From 206e931d66490666af824da9de294e16b888d6a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Otto=20Kek=C3=A4l=C3=A4inen?= Date: Mon, 11 Jul 2016 13:16:58 +0300 Subject: [PATCH 0001/1221] General spell fixes in comments of TokuDB MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Contribution released with the BSD 2-clause license and thus available for any MySQL variant to use freely. Copyright (c) 2016 Otto Kekäläinen All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Signed-off-by: Otto Kekäläinen --- storage/tokudb/ha_tokudb.cc | 2 +- storage/tokudb/tokudb_update_fun.cc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/storage/tokudb/ha_tokudb.cc b/storage/tokudb/ha_tokudb.cc index dd9721807778..3230543aff7b 100644 --- a/storage/tokudb/ha_tokudb.cc +++ b/storage/tokudb/ha_tokudb.cc @@ -6580,7 +6580,7 @@ int ha_tokudb::external_lock(THD * thd, int lock_type) { This happens if the thread didn't update any rows We must in this case commit the work to keep the row locks */ - DBUG_PRINT("trans", ("commiting non-updating transaction")); + DBUG_PRINT("trans", ("committing non-updating transaction")); reset_stmt_progress(&trx->stmt_progress); commit_txn(trx->stmt, 0); trx->stmt = NULL; diff --git a/storage/tokudb/tokudb_update_fun.cc b/storage/tokudb/tokudb_update_fun.cc index 05149d17317b..9791cc726985 100644 --- a/storage/tokudb/tokudb_update_fun.cc +++ b/storage/tokudb/tokudb_update_fun.cc @@ -147,7 +147,7 @@ enum { // field null num 4 bit 31 is 1 if the field is nullible and the // remaining bits contain the null bit number // field offset 4 for fixed fields, this is the offset from -// begining of the row of the field +// beginning of the row of the field // value: // value length 4 == N, length of the value // value N value to add or subtract From 59b8ad91fa2eea9a0beb726ef59b59702cd9967f Mon Sep 17 00:00:00 2001 From: Laurynas Biveinis Date: Wed, 10 May 2017 10:13:51 +0300 Subject: [PATCH 0002/1221] Add a testcase for bug 1689736 / 86260 (Assert on KILL'ing a stored routine invocation) 5.5 is not affected by the bug. Only add the testcase and its associated debug sync point. --- mysql-test/r/bug86260.result | 18 +++++++++++++++ mysql-test/t/bug86260.test | 44 ++++++++++++++++++++++++++++++++++++ sql/sp_head.cc | 3 +++ 3 files changed, 65 insertions(+) create mode 100644 mysql-test/r/bug86260.result create mode 100644 mysql-test/t/bug86260.test diff --git a/mysql-test/r/bug86260.result b/mysql-test/r/bug86260.result new file mode 100644 index 000000000000..1a16005df4d1 --- /dev/null +++ b/mysql-test/r/bug86260.result @@ -0,0 +1,18 @@ +# +# Bug 86260: Assert on KILL'ing a stored routine invocation +# +CREATE TABLE t1 (a INT); +CREATE FUNCTION f1() RETURNS INT +BEGIN +INSERT INTO t1 VALUES (1); +RETURN 1; +END| +SET DEBUG_SYNC= "sp_before_exec_core SIGNAL sp_ready WAIT_FOR sp_finish"; +SELECT f1(); +SET DEBUG_SYNC= "now WAIT_FOR sp_ready"; +KILL QUERY sp_con_id; +SET DEBUG_SYNC= "now SIGNAL sp_finish"; +ERROR 70100: Query execution was interrupted +SET DEBUG_SYNC= 'RESET'; +DROP FUNCTION f1; +DROP TABLE t1; diff --git a/mysql-test/t/bug86260.test b/mysql-test/t/bug86260.test new file mode 100644 index 000000000000..715663cb38a6 --- /dev/null +++ b/mysql-test/t/bug86260.test @@ -0,0 +1,44 @@ +--source include/have_debug_sync.inc +--source include/count_sessions.inc + +--echo # +--echo # Bug 86260: Assert on KILL'ing a stored routine invocation +--echo # + +CREATE TABLE t1 (a INT); + +DELIMITER |; + +CREATE FUNCTION f1() RETURNS INT +BEGIN + INSERT INTO t1 VALUES (1); + RETURN 1; +END| + +DELIMITER ;| + +--connect(con1,localhost,root) + +--connection default +--let $sp_con_id= `SELECT CONNECTION_ID()` +SET DEBUG_SYNC= "sp_before_exec_core SIGNAL sp_ready WAIT_FOR sp_finish"; +send SELECT f1(); + +--connection con1 +SET DEBUG_SYNC= "now WAIT_FOR sp_ready"; +--replace_result $sp_con_id sp_con_id +--eval KILL QUERY $sp_con_id +SET DEBUG_SYNC= "now SIGNAL sp_finish"; + +--connection default +--error ER_QUERY_INTERRUPTED +reap; + +disconnect con1; + +SET DEBUG_SYNC= 'RESET'; + +DROP FUNCTION f1; +DROP TABLE t1; + +--source include/wait_until_count_sessions.inc diff --git a/sql/sp_head.cc b/sql/sp_head.cc index d0ff9ac99967..1ac06a6e2563 100644 --- a/sql/sp_head.cc +++ b/sql/sp_head.cc @@ -40,6 +40,7 @@ #include "sql_parse.h" // cleanup_items #include "sql_base.h" // close_thread_tables #include "transaction.h" // trans_commit_stmt +#include "debug_sync.h" // DEBUG_SYNC /* Sufficient max length of printed destinations and frame offsets (all uints). @@ -2988,6 +2989,8 @@ sp_lex_keeper::reset_lex_and_exec_core(THD *thd, uint *nextp, if (!res) { + DEBUG_SYNC(thd, "sp_before_exec_core"); + res= instr->exec_core(thd, nextp); DBUG_PRINT("info",("exec_core returned: %d", res)); } From dceac3b05df7c546a56c4003fec168d8f3aabe21 Mon Sep 17 00:00:00 2001 From: Yura Sorokin Date: Fri, 19 May 2017 17:48:47 +0300 Subject: [PATCH 0003/1221] Fixed lp:1690012 (Test main.log_tables-big fails with --repeat=2 since 5.6.36 merge) Added missing 'TRUNCATE TABLE mysql.slow_log' statements at the begining and at the end of the test to guarantee that previous MTR runs do not affect 'SELECT ... FROM mysql.slow_log' statements. As this test case uses additional connections, '--source include/count_sessions.inc' / '--source include/wait_until_count_sessions.inc' includes were also added. --- mysql-test/r/log_tables-big.result | 5 ++++- mysql-test/t/log_tables-big.test | 9 ++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/mysql-test/r/log_tables-big.result b/mysql-test/r/log_tables-big.result index 1e189a7726fb..05658271871d 100644 --- a/mysql-test/r/log_tables-big.result +++ b/mysql-test/r/log_tables-big.result @@ -1,4 +1,6 @@ +set @saved_log_output = @@global.log_output; set @@global.log_output = 'TABLE'; +truncate table mysql.slow_log; set session long_query_time=10; select get_lock('bug27638', 1); get_lock('bug27638', 1) @@ -28,4 +30,5 @@ OK select get_lock('bug27638', 101) select release_lock('bug27638'); release_lock('bug27638') 1 -set @@global.log_output=default; +set @@global.log_output = @saved_log_output; +truncate table mysql.slow_log; diff --git a/mysql-test/t/log_tables-big.test b/mysql-test/t/log_tables-big.test index 8936a163d738..a29e2682588c 100644 --- a/mysql-test/t/log_tables-big.test +++ b/mysql-test/t/log_tables-big.test @@ -7,7 +7,11 @@ # check that CSV engine was compiled in --source include/have_csv.inc +set @saved_log_output = @@global.log_output; set @@global.log_output = 'TABLE'; +truncate table mysql.slow_log; + +--source include/count_sessions.inc connect (con1,localhost,root,,); connect (con2,localhost,root,,); @@ -36,4 +40,7 @@ connection default; disconnect con1; disconnect con2; -set @@global.log_output=default; +--source include/wait_until_count_sessions.inc + +set @@global.log_output = @saved_log_output; +truncate table mysql.slow_log; From 9fda9f64ebb8de42b4506104d883f56a4531341e Mon Sep 17 00:00:00 2001 From: Vlad Lesin Date: Tue, 20 Jun 2017 03:38:32 +0300 Subject: [PATCH 0004/1221] TDB-64: Implement PFS for TokuDB The feature was implemented with mysql functions to work with synchronization objects, which, in turn, have PFS implementation built in. The following types of synchronization objects have not been instrumented yet: event_t::_mutex event_t::_cond semaphore_t::_mutext semaphore_t::_cond thread_t::_thread tokudb_hton_initialized_lock object was not instrumented too, for details see comments in the code. The unused lock timeout feature is removed. Not a GCA revision, will be cherry-picked to the higher versions. --- mysql-test/mysql-test-run.pl | 2 +- .../tokudb.perfschema/r/crash_tokudb.result | 30 ++ .../r/start_server_tokudb.result | 114 ++++++++ .../tokudb.perfschema/t/crash_tokudb.test | 36 +++ .../t/start_server_tokudb.test | 10 + .../suite/tokudb.perfschema/t/suite.opt | 1 + storage/tokudb/ha_tokudb.cc | 102 +++---- storage/tokudb/ha_tokudb.h | 16 +- storage/tokudb/ha_tokudb_update.cc | 4 +- storage/tokudb/hatoku_defines.h | 20 +- storage/tokudb/hatoku_hton.cc | 50 +++- storage/tokudb/hatoku_hton.h | 5 +- storage/tokudb/tokudb_background.cc | 30 +- storage/tokudb/tokudb_background.h | 4 +- storage/tokudb/tokudb_information_schema.cc | 14 +- storage/tokudb/tokudb_thread.cc | 1 + storage/tokudb/tokudb_thread.h | 268 ++++++++---------- 17 files changed, 460 insertions(+), 247 deletions(-) create mode 100644 mysql-test/suite/tokudb.perfschema/r/crash_tokudb.result create mode 100644 mysql-test/suite/tokudb.perfschema/r/start_server_tokudb.result create mode 100644 mysql-test/suite/tokudb.perfschema/t/crash_tokudb.test create mode 100644 mysql-test/suite/tokudb.perfschema/t/start_server_tokudb.test create mode 100644 mysql-test/suite/tokudb.perfschema/t/suite.opt diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index e6c4f76cccad..7cc01d14f0a3 100644 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -170,7 +170,7 @@ END ."innodb_zip,perfschema,funcs_1,funcs_2,opt_trace,parts,auth_sec," ."connection_control,jp,stress,engines/iuds,engines/funcs," ."query_response_time,innodb_stress,tokudb.add_index,tokudb.alter_table," - ."tokudb,tokudb.bugs,tokudb.parts,tokudb.rpl"; + ."tokudb,tokudb.bugs,tokudb.parts,tokudb.rpl,tokudb.perfschema"; my $opt_suites; our $opt_verbose= 0; # Verbose output, enable with --verbose diff --git a/mysql-test/suite/tokudb.perfschema/r/crash_tokudb.result b/mysql-test/suite/tokudb.perfschema/r/crash_tokudb.result new file mode 100644 index 000000000000..189d6bef14ed --- /dev/null +++ b/mysql-test/suite/tokudb.perfschema/r/crash_tokudb.result @@ -0,0 +1,30 @@ +SELECT COUNT(*) > 0 FROM performance_schema.setup_consumers +WHERE ENABLED = "NO"; +COUNT(*) > 0 +0 +SELECT COUNT(*) > 0 FROM performance_schema.setup_instruments +WHERE NAME LIKE "%/fti/%" AND (ENABLED = 'NO' OR TIMED = "NO"); +COUNT(*) > 0 +0 +CREATE TABLE t(a INT AUTO_INCREMENT PRIMARY KEY, b INT) ENGINE=TokuDB; +INSERT INTO t (b) VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10), +(1), (2), (3), (4), (5), (6), (7), (8), (9), (10), +(1), (2), (3), (4), (5), (6), (7), (8), (9), (10), +(1), (2), (3), (4), (5), (6), (7), (8), (9), (10), +(1), (2), (3), (4), (5), (6), (7), (8), (9), (10), +(1), (2), (3), (4), (5), (6), (7), (8), (9), (10), +(1), (2), (3), (4), (5), (6), (7), (8), (9), (10), +(1), (2), (3), (4), (5), (6), (7), (8), (9), (10), +(1), (2), (3), (4), (5), (6), (7), (8), (9), (10), +(1), (2), (3), (4), (5), (6), (7), (8), (9), (10); +INSERT INTO t (b) SELECT b FROM t; +UPDATE t SET b = 11 WHERE b = 10; +DELETE FROM t WHERE b = 1; +ALTER TABLE t ADD COLUMN c CHAR(10) default NULL; +TRUNCATE TABLE t; +RENAME TABLE t TO t1; +RENAME TABLE t1 TO t; +SELECT COUNT(*) > 0 FROM t; +COUNT(*) > 0 +0 +DROP TABLE t; diff --git a/mysql-test/suite/tokudb.perfschema/r/start_server_tokudb.result b/mysql-test/suite/tokudb.perfschema/r/start_server_tokudb.result new file mode 100644 index 000000000000..2e220916ec36 --- /dev/null +++ b/mysql-test/suite/tokudb.perfschema/r/start_server_tokudb.result @@ -0,0 +1,114 @@ +show databases; +Database +information_schema +mtr +mysql +performance_schema +test +select count(*) from performance_schema.performance_timers; +count(*) +5 +select count(*) from performance_schema.setup_consumers; +count(*) +12 +select count(*) > 3 from performance_schema.setup_instruments; +count(*) > 3 +1 +select count(*) from performance_schema.setup_timers; +count(*) +4 +select * from performance_schema.accounts; +select * from performance_schema.cond_instances; +select * from performance_schema.events_stages_current; +select * from performance_schema.events_stages_history; +select * from performance_schema.events_stages_history_long; +select * from performance_schema.events_stages_summary_by_account_by_event_name; +select * from performance_schema.events_stages_summary_by_host_by_event_name; +select * from performance_schema.events_stages_summary_by_thread_by_event_name; +select * from performance_schema.events_stages_summary_by_user_by_event_name; +select * from performance_schema.events_stages_summary_global_by_event_name; +select * from performance_schema.events_statements_current; +select * from performance_schema.events_statements_history; +select * from performance_schema.events_statements_history_long; +select * from performance_schema.events_statements_summary_by_account_by_event_name; +select * from performance_schema.events_statements_summary_by_digest; +select * from performance_schema.events_statements_summary_by_host_by_event_name; +select * from performance_schema.events_statements_summary_by_thread_by_event_name; +select * from performance_schema.events_statements_summary_by_user_by_event_name; +select * from performance_schema.events_statements_summary_global_by_event_name; +select * from performance_schema.events_waits_current; +select * from performance_schema.events_waits_history; +select * from performance_schema.events_waits_history_long; +select * from performance_schema.events_waits_summary_by_account_by_event_name; +select * from performance_schema.events_waits_summary_by_host_by_event_name; +select * from performance_schema.events_waits_summary_by_instance; +select * from performance_schema.events_waits_summary_by_thread_by_event_name; +select * from performance_schema.events_waits_summary_by_user_by_event_name; +select * from performance_schema.events_waits_summary_global_by_event_name; +select * from performance_schema.file_instances; +select * from performance_schema.file_summary_by_event_name; +select * from performance_schema.file_summary_by_instance; +select * from performance_schema.host_cache; +select * from performance_schema.hosts; +select * from performance_schema.mutex_instances; +select * from performance_schema.objects_summary_global_by_type; +select * from performance_schema.performance_timers; +select * from performance_schema.rwlock_instances; +select * from performance_schema.session_account_connect_attrs; +select * from performance_schema.session_connect_attrs; +select * from performance_schema.setup_actors; +select * from performance_schema.setup_consumers; +select * from performance_schema.setup_instruments; +select * from performance_schema.setup_objects; +select * from performance_schema.setup_timers; +select * from performance_schema.socket_instances; +select * from performance_schema.socket_summary_by_instance; +select * from performance_schema.socket_summary_by_event_name; +select * from performance_schema.table_io_waits_summary_by_index_usage; +select * from performance_schema.table_io_waits_summary_by_table; +select * from performance_schema.table_lock_waits_summary_by_table; +select * from performance_schema.threads; +select * from performance_schema.users; +show variables where +`Variable_name` != "performance_schema_max_statement_classes" and +`Variable_name` like "performance_schema%"; +Variable_name Value +performance_schema ON +performance_schema_accounts_size 100 +performance_schema_digests_size 200 +performance_schema_events_stages_history_long_size 1000 +performance_schema_events_stages_history_size 10 +performance_schema_events_statements_history_long_size 1000 +performance_schema_events_statements_history_size 10 +performance_schema_events_waits_history_long_size 10000 +performance_schema_events_waits_history_size 10 +performance_schema_hosts_size 100 +performance_schema_max_cond_classes 80 +performance_schema_max_cond_instances 1000 +performance_schema_max_digest_length 1024 +performance_schema_max_file_classes 50 +performance_schema_max_file_handles 32768 +performance_schema_max_file_instances 10000 +performance_schema_max_mutex_classes 200 +performance_schema_max_mutex_instances 5000 +performance_schema_max_rwlock_classes 40 +performance_schema_max_rwlock_instances 5000 +performance_schema_max_socket_classes 10 +performance_schema_max_socket_instances 1000 +performance_schema_max_stage_classes 150 +performance_schema_max_table_handles 1000 +performance_schema_max_table_instances 500 +performance_schema_max_thread_classes 50 +performance_schema_max_thread_instances 200 +performance_schema_session_connect_attrs_size 2048 +performance_schema_setup_actors_size 100 +performance_schema_setup_objects_size 100 +performance_schema_users_size 100 +show engine PERFORMANCE_SCHEMA status; +show status like "performance_schema%"; +SELECT COUNT(NAME) > 0 FROM performance_schema.setup_instruments WHERE NAME LIKE "%/fti/%"; +COUNT(NAME) > 0 +1 +SELECT COUNT(NAME) > 0 FROM performance_schema.threads WHERE NAME LIKE "%kibbutz%"; +COUNT(NAME) > 0 +1 diff --git a/mysql-test/suite/tokudb.perfschema/t/crash_tokudb.test b/mysql-test/suite/tokudb.perfschema/t/crash_tokudb.test new file mode 100644 index 000000000000..31757a202590 --- /dev/null +++ b/mysql-test/suite/tokudb.perfschema/t/crash_tokudb.test @@ -0,0 +1,36 @@ +# TokuDB PFS crash test: +# Make sure FTI instrumentation is on, execute base DDL, DML queries +# and make sure there is no crash. + +--source include/not_embedded.inc +--source include/have_perfschema.inc +--source include/have_tokudb.inc + +SELECT COUNT(*) > 0 FROM performance_schema.setup_consumers + WHERE ENABLED = "NO"; +SELECT COUNT(*) > 0 FROM performance_schema.setup_instruments + WHERE NAME LIKE "%/fti/%" AND (ENABLED = 'NO' OR TIMED = "NO"); + +CREATE TABLE t(a INT AUTO_INCREMENT PRIMARY KEY, b INT) ENGINE=TokuDB; +INSERT INTO t (b) VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10), + (1), (2), (3), (4), (5), (6), (7), (8), (9), (10), + (1), (2), (3), (4), (5), (6), (7), (8), (9), (10), + (1), (2), (3), (4), (5), (6), (7), (8), (9), (10), + (1), (2), (3), (4), (5), (6), (7), (8), (9), (10), + (1), (2), (3), (4), (5), (6), (7), (8), (9), (10), + (1), (2), (3), (4), (5), (6), (7), (8), (9), (10), + (1), (2), (3), (4), (5), (6), (7), (8), (9), (10), + (1), (2), (3), (4), (5), (6), (7), (8), (9), (10), + (1), (2), (3), (4), (5), (6), (7), (8), (9), (10); +INSERT INTO t (b) SELECT b FROM t; + +UPDATE t SET b = 11 WHERE b = 10; +DELETE FROM t WHERE b = 1; + +ALTER TABLE t ADD COLUMN c CHAR(10) default NULL; +TRUNCATE TABLE t; +RENAME TABLE t TO t1; +RENAME TABLE t1 TO t; + +SELECT COUNT(*) > 0 FROM t; +DROP TABLE t; diff --git a/mysql-test/suite/tokudb.perfschema/t/start_server_tokudb.test b/mysql-test/suite/tokudb.perfschema/t/start_server_tokudb.test new file mode 100644 index 000000000000..4034fba05497 --- /dev/null +++ b/mysql-test/suite/tokudb.perfschema/t/start_server_tokudb.test @@ -0,0 +1,10 @@ +# Tests for PERFORMANCE_SCHEMA + +--source include/not_embedded.inc +--source include/have_perfschema.inc +--source include/have_tokudb.inc + +--source ../../perfschema/include/start_server_common.inc + +SELECT COUNT(NAME) > 0 FROM performance_schema.setup_instruments WHERE NAME LIKE "%/fti/%"; +SELECT COUNT(NAME) > 0 FROM performance_schema.threads WHERE NAME LIKE "%kibbutz%"; diff --git a/mysql-test/suite/tokudb.perfschema/t/suite.opt b/mysql-test/suite/tokudb.perfschema/t/suite.opt new file mode 100644 index 000000000000..6d826fe91d1b --- /dev/null +++ b/mysql-test/suite/tokudb.perfschema/t/suite.opt @@ -0,0 +1 @@ +--loose-enable-performance-schema $TOKUDB_OPT $TOKUDB_LOAD_ADD --loose-tokudb-check-jemalloc=0 --loose-tokudb-cache-size=512M --loose-tokudb-block-size=1M diff --git a/storage/tokudb/ha_tokudb.cc b/storage/tokudb/ha_tokudb.cc index 9079d15c7fd3..fb723c76bd0c 100644 --- a/storage/tokudb/ha_tokudb.cc +++ b/storage/tokudb/ha_tokudb.cc @@ -31,6 +31,8 @@ Copyright (c) 2006, 2015, Percona and/or its affiliates. All rights reserved. #include "ha_tokudb.h" #include "sql_db.h" +pfs_key_t ha_tokudb_mutex_key; +pfs_key_t num_DBs_lock_key; HASH TOKUDB_SHARE::_open_tables; tokudb::thread::mutex_t TOKUDB_SHARE::_open_tables_mutex; @@ -174,13 +176,9 @@ const char* TOKUDB_SHARE::get_state_string(share_state_t state) { void* TOKUDB_SHARE::operator new(size_t sz) { return tokudb::memory::malloc(sz, MYF(MY_WME|MY_ZEROFILL|MY_FAE)); } -void TOKUDB_SHARE::operator delete(void* p) { - tokudb::memory::free(p); -} -TOKUDB_SHARE::TOKUDB_SHARE() : - _num_DBs_lock(), - _mutex() { -} +void TOKUDB_SHARE::operator delete(void* p) { tokudb::memory::free(p); } +TOKUDB_SHARE::TOKUDB_SHARE() + : _num_DBs_lock(num_DBs_lock_key), _mutex(ha_tokudb_mutex_key) {} void TOKUDB_SHARE::init(const char* table_name) { _use_count = 0; thr_lock_init(&_thr_lock); @@ -215,20 +213,15 @@ void TOKUDB_SHARE::destroy() { thr_lock_delete(&_thr_lock); TOKUDB_SHARE_DBUG_VOID_RETURN(); } -TOKUDB_SHARE* TOKUDB_SHARE::get_share( - const char* table_name, - TABLE_SHARE* table_share, - THR_LOCK_DATA* data, - bool create_new) { - - _open_tables_mutex.lock(); +TOKUDB_SHARE* TOKUDB_SHARE::get_share(const char* table_name, + TABLE_SHARE* table_share, + THR_LOCK_DATA* data, + bool create_new) { + mutex_t_lock(_open_tables_mutex); int error = 0; - uint length = (uint) strlen(table_name); - TOKUDB_SHARE* share = - (TOKUDB_SHARE*)my_hash_search( - &_open_tables, - (uchar*)table_name, - length); + uint length = (uint)strlen(table_name); + TOKUDB_SHARE* share = (TOKUDB_SHARE*)my_hash_search( + &_open_tables, (uchar*)table_name, length); TOKUDB_TRACE_FOR_FLAGS( TOKUDB_DEBUG_SHARE, @@ -263,28 +256,27 @@ TOKUDB_SHARE* TOKUDB_SHARE::get_share( thr_lock_data_init(&(share->_thr_lock), data, NULL); exit: - _open_tables_mutex.unlock(); + mutex_t_unlock(_open_tables_mutex); return share; } void TOKUDB_SHARE::drop_share(TOKUDB_SHARE* share) { - TOKUDB_TRACE_FOR_FLAGS( - TOKUDB_DEBUG_SHARE, - "share[%p]:file[%s]:state[%s]:use_count[%d]", - share, - share->_full_table_name.ptr(), - get_state_string(share->_state), - share->_use_count); - - _open_tables_mutex.lock(); + TOKUDB_TRACE_FOR_FLAGS(TOKUDB_DEBUG_SHARE, + "share[%p]:file[%s]:state[%s]:use_count[%d]", + share, + share->_full_table_name.ptr(), + get_state_string(share->_state), + share->_use_count); + + mutex_t_lock(_open_tables_mutex); my_hash_delete(&_open_tables, (uchar*)share); - _open_tables_mutex.unlock(); + mutex_t_unlock(_open_tables_mutex); } TOKUDB_SHARE::share_state_t TOKUDB_SHARE::addref() { TOKUDB_SHARE_TRACE_FOR_FLAGS((TOKUDB_DEBUG_ENTER & TOKUDB_DEBUG_SHARE), - "file[%s]:state[%s]:use_count[%d]", - _full_table_name.ptr(), - get_state_string(_state), - _use_count); + "file[%s]:state[%s]:use_count[%d]", + _full_table_name.ptr(), + get_state_string(_state), + _use_count); lock(); _use_count++; @@ -299,7 +291,7 @@ int TOKUDB_SHARE::release() { int error, result = 0; - _mutex.lock(); + mutex_t_lock(_mutex); assert_always(_use_count != 0); _use_count--; if (_use_count == 0 && _state == TOKUDB_SHARE::OPENED) { @@ -343,7 +335,7 @@ int TOKUDB_SHARE::release() { _state = TOKUDB_SHARE::CLOSED; } - _mutex.unlock(); + mutex_t_unlock(_mutex); TOKUDB_SHARE_DBUG_RETURN(result); } @@ -3313,12 +3305,12 @@ void ha_tokudb::start_bulk_insert(ha_rows rows) { delay_updating_ai_metadata = true; ai_metadata_update_required = false; abort_loader = false; - - share->_num_DBs_lock.lock_read(); + + rwlock_t_lock_read(share->_num_DBs_lock); uint curr_num_DBs = table->s->keys + tokudb_test(hidden_primary_key); num_DBs_locked_in_bulk = true; lock_count = 0; - + if ((rows == 0 || rows > 1) && share->try_table_lock) { if (tokudb::sysvars::prelock_empty(thd) && may_table_be_empty(transaction) && @@ -4029,14 +4021,13 @@ int ha_tokudb::write_row(uchar * record) { // grab reader lock on numDBs_lock // if (!num_DBs_locked_in_bulk) { - share->_num_DBs_lock.lock_read(); + rwlock_t_lock_read(share->_num_DBs_lock); num_DBs_locked = true; - } - else { + } else { lock_count++; if (lock_count >= 2000) { share->_num_DBs_lock.unlock(); - share->_num_DBs_lock.lock_read(); + rwlock_t_lock_read(share->_num_DBs_lock); lock_count = 0; } } @@ -4208,7 +4199,7 @@ int ha_tokudb::update_row(const uchar * old_row, uchar * new_row) { // bool num_DBs_locked = false; if (!num_DBs_locked_in_bulk) { - share->_num_DBs_lock.lock_read(); + rwlock_t_lock_read(share->_num_DBs_lock); num_DBs_locked = true; } curr_num_DBs = share->num_DBs; @@ -4350,7 +4341,7 @@ int ha_tokudb::delete_row(const uchar * record) { // bool num_DBs_locked = false; if (!num_DBs_locked_in_bulk) { - share->_num_DBs_lock.lock_read(); + rwlock_t_lock_read(share->_num_DBs_lock); num_DBs_locked = true; } curr_num_DBs = share->num_DBs; @@ -6295,7 +6286,7 @@ int ha_tokudb::acquire_table_lock (DB_TXN* trans, TABLE_LOCK_TYPE lt) { TOKUDB_HANDLER_DBUG_ENTER("%p %s", trans, lt == lock_read ? "r" : "w"); int error = ENOSYS; if (!num_DBs_locked_in_bulk) { - share->_num_DBs_lock.lock_read(); + rwlock_t_lock_read(share->_num_DBs_lock); } uint curr_num_DBs = share->num_DBs; if (lt == lock_read) { @@ -6651,8 +6642,9 @@ THR_LOCK_DATA* *ha_tokudb::store_lock( if (sql_command == SQLCOM_CREATE_INDEX && tokudb::sysvars::create_index_online(thd)) { // hot indexing - share->_num_DBs_lock.lock_read(); - if (share->num_DBs == (table->s->keys + tokudb_test(hidden_primary_key))) { + rwlock_t_lock_read(share->_num_DBs_lock); + if (share->num_DBs == + (table->s->keys + tokudb_test(hidden_primary_key))) { lock_type = TL_WRITE_ALLOW_WRITE; } share->_num_DBs_lock.unlock(); @@ -8093,8 +8085,8 @@ int ha_tokudb::tokudb_add_index( } } } - - share->_num_DBs_lock.lock_write(); + + rwlock_t_lock_write(share->_num_DBs_lock); rw_lock_taken = true; // // open all the DB files and set the appropriate variables in share @@ -8204,7 +8196,7 @@ int ha_tokudb::tokudb_add_index( goto cleanup; } - share->_num_DBs_lock.lock_write(); + rwlock_t_lock_write(share->_num_DBs_lock); error = indexer->close(indexer); share->_num_DBs_lock.unlock(); if (error) { @@ -8438,7 +8430,7 @@ int ha_tokudb::tokudb_add_index( if (indexer != NULL) { sprintf(status_msg, "aborting creation of indexes."); thd_proc_info(thd, status_msg); - share->_num_DBs_lock.lock_write(); + rwlock_t_lock_write(share->_num_DBs_lock); indexer->abort(indexer); share->_num_DBs_lock.unlock(); } @@ -8487,10 +8479,10 @@ void ha_tokudb::restore_add_index( // // need to restore num_DBs, and we have to do it before we close the dictionaries - // so that there is not a window + // so that there is not a window // if (incremented_numDBs) { - share->_num_DBs_lock.lock_write(); + rwlock_t_lock_write(share->_num_DBs_lock); share->num_DBs--; } if (modified_DBs) { diff --git a/storage/tokudb/ha_tokudb.h b/storage/tokudb/ha_tokudb.h index f90f4130b377..9c6af2550cdf 100644 --- a/storage/tokudb/ha_tokudb.h +++ b/storage/tokudb/ha_tokudb.h @@ -318,18 +318,18 @@ inline int TOKUDB_SHARE::use_count() const { } inline void TOKUDB_SHARE::lock() const { TOKUDB_SHARE_DBUG_ENTER("file[%s]:state[%s]:use_count[%d]", - _full_table_name.ptr(), - get_state_string(_state), - _use_count); - _mutex.lock(); + _full_table_name.ptr(), + get_state_string(_state), + _use_count); + mutex_t_lock(_mutex); TOKUDB_SHARE_DBUG_VOID_RETURN(); } inline void TOKUDB_SHARE::unlock() const { TOKUDB_SHARE_DBUG_ENTER("file[%s]:state[%s]:use_count[%d]", - _full_table_name.ptr(), - get_state_string(_state), - _use_count); - _mutex.unlock(); + _full_table_name.ptr(), + get_state_string(_state), + _use_count); + mutex_t_unlock(_mutex); TOKUDB_SHARE_DBUG_VOID_RETURN(); } inline TOKUDB_SHARE::share_state_t TOKUDB_SHARE::state() const { diff --git a/storage/tokudb/ha_tokudb_update.cc b/storage/tokudb/ha_tokudb_update.cc index 23de81f3d8af..9fe5e729ec4e 100644 --- a/storage/tokudb/ha_tokudb_update.cc +++ b/storage/tokudb/ha_tokudb_update.cc @@ -918,7 +918,7 @@ int ha_tokudb::send_update_message( marshall_update(update_message, lhs_item, rhs_item, table, share); } - share->_num_DBs_lock.lock_read(); + rwlock_t_lock_read(share->_num_DBs_lock); // hot index in progress if (share->num_DBs > table->s->keys + tokudb_test(hidden_primary_key)) { @@ -1108,7 +1108,7 @@ int ha_tokudb::send_upsert_message( marshall_update(update_message, lhs_item, rhs_item, table, share); } - share->_num_DBs_lock.lock_read(); + rwlock_t_lock_read(share->_num_DBs_lock); // hot index in progress if (share->num_DBs > table->s->keys + tokudb_test(hidden_primary_key)) { diff --git a/storage/tokudb/hatoku_defines.h b/storage/tokudb/hatoku_defines.h index 83f8a8a21d21..05a06ac8142e 100644 --- a/storage/tokudb/hatoku_defines.h +++ b/storage/tokudb/hatoku_defines.h @@ -246,4 +246,22 @@ inline uint tokudb_uint3korr(const uchar *a) { return uint3korr(b); } -#endif // _HATOKU_DEFINES_H +typedef unsigned int pfs_key_t; + +#if defined(HAVE_PSI_MUTEX_INTERFACE) +#define mutex_t_lock(M) M.lock(__FILE__, __LINE__) +#define mutex_t_unlock(M) M.unlock(__FILE__, __LINE__) +#else // HAVE_PSI_MUTEX_INTERFACE +#define mutex_t_lock(M) M.lock() +#define mutex_t_unlock(M) M.unlock() +#endif // HAVE_PSI_MUTEX_INTERFACE + +#if defined(HAVE_PSI_RWLOCK_INTERFACE) +#define rwlock_t_lock_read(M) M.lock_read(__FILE__, __LINE__) +#define rwlock_t_lock_write(M) M.lock_write(__FILE__, __LINE__) +#else // HAVE_PSI_RWLOCK_INTERFACE +#define rwlock_t_lock_read(M) M.lock_read() +#define rwlock_t_lock_write(M) M.lock_write() +#endif // HAVE_PSI_RWLOCK_INTERFACE + +#endif // _HATOKU_DEFINES_H diff --git a/storage/tokudb/hatoku_hton.cc b/storage/tokudb/hatoku_hton.cc index 2ae9cdc071b8..1cfe4e0a8bc3 100644 --- a/storage/tokudb/hatoku_hton.cc +++ b/storage/tokudb/hatoku_hton.cc @@ -28,6 +28,17 @@ Copyright (c) 2006, 2015, Percona and/or its affiliates. All rights reserved. #define TOKU_METADB_NAME "tokudb_meta" +static pfs_key_t tokudb_map_mutex_key; + +static PSI_mutex_info all_tokudb_mutexes[] = { + {&tokudb_map_mutex_key, "tokudb_map_mutex", 0}, + {&ha_tokudb_mutex_key, "ha_tokudb_mutex", 0}, +}; + +static PSI_rwlock_info all_tokudb_rwlocks[] = { + {&num_DBs_lock_key, "num_DBs_lock", 0}, +}; + typedef struct savepoint_info { DB_TXN* txn; tokudb_trx_data* trx; @@ -219,6 +230,10 @@ extern "C" { // use constructor and destructor functions to create and destroy // the lock before and after main(), respectively. int tokudb_hton_initialized; + +// tokudb_hton_initialized_lock can not be instrumented as it must be +// initialized before mysql_mutex_register() call to protect +// some globals from race condition. tokudb::thread::rwlock_t tokudb_hton_initialized_lock; static SHOW_VAR *toku_global_status_variables = NULL; @@ -274,10 +289,23 @@ static int tokudb_init_func(void *p) { int r; // 3938: lock the handlerton's initialized status flag for writing - tokudb_hton_initialized_lock.lock_write(); + rwlock_t_lock_write(tokudb_hton_initialized_lock); + +#ifdef HAVE_PSI_INTERFACE + /* Register TokuDB mutex keys with MySQL performance schema */ + int count; + + count = array_elements(all_tokudb_mutexes); + mysql_mutex_register("tokudb", all_tokudb_mutexes, count); + + count = array_elements(all_tokudb_rwlocks); + mysql_rwlock_register("tokudb", all_tokudb_rwlocks, count); + + tokudb_map_mutex.reinit(tokudb_map_mutex_key); +#endif /* HAVE_PSI_INTERFACE */ db_env = NULL; - tokudb_hton = (handlerton *) p; + tokudb_hton = (handlerton*)p; if (tokudb::sysvars::check_jemalloc) { typedef int (*mallctl_type)( @@ -674,7 +702,7 @@ int tokudb_end(handlerton* hton, ha_panic_function type) { // initialized. grab a writer lock for the duration of the // call, so we can drop the flag and destroy the mutexes // in isolation. - tokudb_hton_initialized_lock.lock_write(); + rwlock_t_lock_write(tokudb_hton_initialized_lock); assert_always(tokudb_hton_initialized); tokudb::background::destroy(); @@ -754,16 +782,16 @@ static int tokudb_close_connection(handlerton* hton, THD* thd) { } tokudb::memory::free(trx); #if TOKU_THDVAR_MEMALLOC_BUG - tokudb_map_mutex.lock(); - struct tokudb_map_pair key = { thd, NULL }; + mutex_t_lock(tokudb_map_mutex); + struct tokudb_map_pair key = {thd, NULL}; struct tokudb_map_pair* found_key = - (struct tokudb_map_pair*) tree_search(&tokudb_map, &key, NULL); + (struct tokudb_map_pair*)tree_search(&tokudb_map, &key, NULL); if (found_key) { tokudb::memory::free(found_key->last_lock_timeout); tree_delete(&tokudb_map, found_key, sizeof(*found_key), NULL); } - tokudb_map_mutex.unlock(); + mutex_t_unlock(tokudb_map_mutex); #endif return error; } @@ -1721,12 +1749,12 @@ static void tokudb_lock_timeout_callback( tokudb::memory::strdup(log_str.c_ptr(), MY_FAE); tokudb::sysvars::set_last_lock_timeout(thd, new_lock_timeout); #if TOKU_THDVAR_MEMALLOC_BUG - tokudb_map_mutex.lock(); - struct tokudb_map_pair old_key = { thd, old_lock_timeout }; + mutex_t_lock(tokudb_map_mutex); + struct tokudb_map_pair old_key = {thd, old_lock_timeout}; tree_delete(&tokudb_map, &old_key, sizeof old_key, NULL); - struct tokudb_map_pair new_key = { thd, new_lock_timeout }; + struct tokudb_map_pair new_key = {thd, new_lock_timeout}; tree_insert(&tokudb_map, &new_key, sizeof new_key, NULL); - tokudb_map_mutex.unlock(); + mutex_t_unlock(tokudb_map_mutex); #endif tokudb::memory::free(old_lock_timeout); } diff --git a/storage/tokudb/hatoku_hton.h b/storage/tokudb/hatoku_hton.h index ade7be128a50..7efc50b96e34 100644 --- a/storage/tokudb/hatoku_hton.h +++ b/storage/tokudb/hatoku_hton.h @@ -39,6 +39,9 @@ extern handlerton* tokudb_hton; extern DB_ENV* db_env; +extern pfs_key_t ha_tokudb_mutex_key; +extern pfs_key_t num_DBs_lock_key; + inline tokudb::sysvars::row_format_t toku_compression_method_to_row_format( toku_compression_method method) { @@ -180,9 +183,7 @@ inline bool tokudb_killed_thd_callback(void *extra, uint64_t deleted_rows) { return thd_killed(thd) != 0; } - extern HASH tokudb_open_tables; -extern tokudb::thread::mutex_t tokudb_mutex; extern const char* tokudb_hton_name; extern int tokudb_hton_initialized; extern tokudb::thread::rwlock_t tokudb_hton_initialized_lock; diff --git a/storage/tokudb/tokudb_background.cc b/storage/tokudb/tokudb_background.cc index e019e41c7882..13e0e9321cc2 100644 --- a/storage/tokudb/tokudb_background.cc +++ b/storage/tokudb/tokudb_background.cc @@ -66,13 +66,13 @@ void job_manager_t::destroy() { _sem.set_interrupt(); while (_background_jobs.size()) { - _mutex.lock(); + mutex_t_lock(_mutex); job_t* job = _background_jobs.front(); if (!job->cancelled()) cancel(job); _background_jobs.pop_front(); delete job; - _mutex.unlock(); + mutex_t_unlock(_mutex); } void* result; @@ -83,7 +83,7 @@ bool job_manager_t::run_job(job_t* newjob, bool background) { bool ret = false; const char* jobkey = newjob->key(); - _mutex.lock(); + mutex_t_lock(_mutex); assert_always(!_shutdown); for (jobs_t::iterator it = _background_jobs.begin(); @@ -138,15 +138,16 @@ bool job_manager_t::run_job(job_t* newjob, bool background) { } cleanup: - _mutex.unlock(); + mutex_t_unlock(_mutex); return ret; } bool job_manager_t::cancel_job(const char* key) { bool ret = false; - _mutex.lock(); + mutex_t_lock(_mutex); for (jobs_t::iterator it = _background_jobs.begin(); - it != _background_jobs.end(); it++) { + it != _background_jobs.end(); + it++) { job_t* job = *it; if (!job->cancelled() && strcmp(job->key(), key) == 0) { @@ -155,12 +156,11 @@ bool job_manager_t::cancel_job(const char* key) { } } - _mutex.unlock(); + mutex_t_unlock(_mutex); return ret; } void job_manager_t::iterate_jobs(pfn_iterate_t callback, void* extra) const { - - _mutex.lock(); + mutex_t_lock(_mutex); for (jobs_t::const_iterator it = _background_jobs.begin(); it != _background_jobs.end(); @@ -171,7 +171,7 @@ void job_manager_t::iterate_jobs(pfn_iterate_t callback, void* extra) const { } } - _mutex.unlock(); + mutex_t_unlock(_mutex); } void* job_manager_t::thread_func(void* v) { return ((tokudb::background::job_manager_t*)v)->real_thread_func(); @@ -189,14 +189,14 @@ void* job_manager_t::real_thread_func() { tokudb::time::sleep_microsec(250000); continue; } -#endif // TOKUDB_DEBUG +#endif // TOKUDB_DEBUG - _mutex.lock(); + mutex_t_lock(_mutex); assert_debug(_background_jobs.size() > 0); job_t* job = _background_jobs.front(); run(job); _background_jobs.pop_front(); - _mutex.unlock(); + mutex_t_unlock(_mutex); delete job; } } @@ -205,11 +205,11 @@ void* job_manager_t::real_thread_func() { void job_manager_t::run(job_t* job) { assert_debug(_mutex.is_owned_by_me()); if (!job->cancelled()) { - _mutex.unlock(); + mutex_t_unlock(_mutex); // do job job->run(); // done job - _mutex.lock(); + mutex_t_lock(_mutex); } if (!job->cancelled()) { job->destroy(); diff --git a/storage/tokudb/tokudb_background.h b/storage/tokudb/tokudb_background.h index 29991ab325d5..bf5eb97a6191 100644 --- a/storage/tokudb/tokudb_background.h +++ b/storage/tokudb/tokudb_background.h @@ -174,11 +174,11 @@ bool destroy(); inline void job_manager_t::lock() { assert_debug(!_mutex.is_owned_by_me()); - _mutex.lock(); + mutex_t_lock(_mutex); } inline void job_manager_t::unlock() { assert_debug(_mutex.is_owned_by_me()); - _mutex.unlock(); + mutex_t_unlock(_mutex); } inline void job_manager_t::job_t::run() { diff --git a/storage/tokudb/tokudb_information_schema.cc b/storage/tokudb/tokudb_information_schema.cc index fb9e76f340b9..6d4569c522d6 100644 --- a/storage/tokudb/tokudb_information_schema.cc +++ b/storage/tokudb/tokudb_information_schema.cc @@ -97,7 +97,7 @@ int trx_fill_table(THD* thd, TABLE_LIST* tables, COND* cond) { TOKUDB_DBUG_ENTER(""); int error; - tokudb_hton_initialized_lock.lock_read(); + rwlock_t_lock_read(tokudb_hton_initialized_lock); if (!tokudb_hton_initialized) { error = ER_PLUGIN_IS_NOT_LOADED; @@ -232,7 +232,7 @@ int lock_waits_fill_table(THD* thd, TABLE_LIST* tables, COND* cond) { TOKUDB_DBUG_ENTER(""); int error; - tokudb_hton_initialized_lock.lock_read(); + rwlock_t_lock_read(tokudb_hton_initialized_lock); if (!tokudb_hton_initialized) { error = ER_PLUGIN_IS_NOT_LOADED; @@ -375,7 +375,7 @@ int locks_fill_table(THD* thd, TABLE_LIST* tables, COND* cond) { TOKUDB_DBUG_ENTER(""); int error; - tokudb_hton_initialized_lock.lock_read(); + rwlock_t_lock_read(tokudb_hton_initialized_lock); if (!tokudb_hton_initialized) { error = ER_PLUGIN_IS_NOT_LOADED; @@ -519,7 +519,7 @@ int file_map_fill_table(THD* thd, TABLE_LIST* tables, COND* cond) { int error; TABLE* table = tables->table; - tokudb_hton_initialized_lock.lock_read(); + rwlock_t_lock_read(tokudb_hton_initialized_lock); if (!tokudb_hton_initialized) { error = ER_PLUGIN_IS_NOT_LOADED; @@ -726,7 +726,7 @@ int fractal_tree_info_fill_table(THD* thd, TABLE_LIST* tables, COND* cond) { // 3938: Get a read lock on the status flag, since we must // read it before safely proceeding - tokudb_hton_initialized_lock.lock_read(); + rwlock_t_lock_read(tokudb_hton_initialized_lock); if (!tokudb_hton_initialized) { error = ER_PLUGIN_IS_NOT_LOADED; @@ -1023,7 +1023,7 @@ int fractal_tree_block_map_fill_table( // 3938: Get a read lock on the status flag, since we must // read it before safely proceeding - tokudb_hton_initialized_lock.lock_read(); + rwlock_t_lock_read(tokudb_hton_initialized_lock); if (!tokudb_hton_initialized) { error = ER_PLUGIN_IS_NOT_LOADED; @@ -1160,7 +1160,7 @@ int background_job_status_fill_table(THD *thd, TABLE_LIST *tables, COND *cond) { int error; TABLE* table = tables->table; - tokudb_hton_initialized_lock.lock_read(); + rwlock_t_lock_read(tokudb_hton_initialized_lock); if (!tokudb_hton_initialized) { error = ER_PLUGIN_IS_NOT_LOADED; diff --git a/storage/tokudb/tokudb_thread.cc b/storage/tokudb/tokudb_thread.cc index f27e803a0655..6fc1191975dc 100644 --- a/storage/tokudb/tokudb_thread.cc +++ b/storage/tokudb/tokudb_thread.cc @@ -29,6 +29,7 @@ Copyright (c) 2006, 2015, Percona and/or its affiliates. All rights reserved. namespace tokudb { namespace thread { +const pfs_key_t pfs_not_instrumented = 0xFFFFFFFF; pthread_t mutex_t::_null_owner = 0; } // namespace thread diff --git a/storage/tokudb/tokudb_thread.h b/storage/tokudb/tokudb_thread.h index dcb1fd6ec635..25b746e8fc4a 100644 --- a/storage/tokudb/tokudb_thread.h +++ b/storage/tokudb/tokudb_thread.h @@ -34,95 +34,68 @@ Copyright (c) 2006, 2015, Percona and/or its affiliates. All rights reserved. namespace tokudb { namespace thread { -#if (defined(__MACH__) || defined(__APPLE__)) && _POSIX_TIMERS <= 0 - -#define _x_min(a, b) ((a) < (b) ? (a) : (b)) - -#define timed_lock_define(timed_func_name, lock_type_name, lock_func_name) \ -inline int timed_func_name(lock_type_name *mutex, \ - const struct timespec *abs_timeout) { \ - int pthread_rc; \ - struct timespec remaining, slept, ts; \ - static const int sleep_step = 1000000; \ - \ - remaining = *abs_timeout; \ - while ((pthread_rc = lock_func_name(mutex)) == EBUSY) { \ - ts.tv_sec = 0; \ - ts.tv_nsec = (remaining.tv_sec > 0 ? \ - sleep_step : \ - _x_min(remaining.tv_nsec,sleep_step)); \ - nanosleep(&ts, &slept); \ - ts.tv_nsec -= slept.tv_nsec; \ - if (ts.tv_nsec <= remaining.tv_nsec) { \ - remaining.tv_nsec -= ts.tv_nsec; \ - } else { \ - remaining.tv_sec--; \ - remaining.tv_nsec = \ - (sleep_step - (ts.tv_nsec - remaining.tv_nsec)); \ - } \ - if (remaining.tv_sec < 0 || \ - (!remaining.tv_sec && remaining.tv_nsec <= 0)) { \ - return ETIMEDOUT; \ - } \ - } \ - \ - return pthread_rc; \ -} - -timed_lock_define(pthread_mutex_timedlock, - pthread_mutex_t, - pthread_mutex_trylock); - -timed_lock_define(pthread_rwlock_timedrdlock, - pthread_rwlock_t, - pthread_rwlock_tryrdlock); - -timed_lock_define(pthread_rwlock_timedwrlock, - pthread_rwlock_t, - pthread_rwlock_trywrlock); - -#endif //(defined(__MACH__) || defined(__APPLE__)) && _POSIX_TIMERS <= 0 +extern const pfs_key_t pfs_not_instrumented; uint my_tid(void); // Your basic mutex class mutex_t { public: - mutex_t(void); + explicit mutex_t(pfs_key_t key); + mutex_t(void) : mutex_t(pfs_not_instrumented) {} ~mutex_t(void); - void lock(void); - int lock(ulonglong microseconds); - void unlock(void); + void reinit(pfs_key_t key); + void lock( +#ifdef HAVE_PSI_MUTEX_INTERFACE + const char* src_file, + uint src_line +#endif // HAVE_PSI_MUTEX_INTERFACE + ); + void unlock( +#ifdef HAVE_PSI_MUTEX_INTERFACE + const char* src_file, + uint src_line +#endif // HAVE_PSI_MUTEX_INTERFACE + ); #ifdef TOKUDB_DEBUG bool is_owned_by_me(void) const; #endif private: static pthread_t _null_owner; - pthread_mutex_t _mutex; + mysql_mutex_t _mutex; #ifdef TOKUDB_DEBUG - uint _owners; - pthread_t _owner; + uint _owners; + pthread_t _owner; #endif }; // Simple read write lock class rwlock_t { public: - rwlock_t(void); + explicit rwlock_t(pfs_key_t key); + rwlock_t(void) : rwlock_t(pfs_not_instrumented) {} ~rwlock_t(void); - void lock_read(void); - int lock_read(ulonglong microseconds); - void lock_write(void); - int lock_write(ulonglong microseconds); + void lock_read( +#ifdef HAVE_PSI_RWLOCK_INTERFACE + const char* src_file, + uint src_line +#endif // HAVE_PSI_RWLOCK_INTERFACE + ); + void lock_write( +#ifdef HAVE_PSI_RWLOCK_INTERFACE + const char* src_file, + uint src_line +#endif // HAVE_PSI_RWLOCK_INTERFACE + ); void unlock(void); private: rwlock_t(const rwlock_t&); rwlock_t& operator=(const rwlock_t&); - pthread_rwlock_t _rwlock; + mysql_rwlock_t _rwlock; }; // Simple event signal/wait class @@ -224,57 +197,76 @@ class thread_t { pthread_t _thread; }; +inline uint my_tid(void) { return (uint)toku_os_gettid(); } -inline uint my_tid(void) { - return (uint)toku_os_gettid(); -} - - -inline mutex_t::mutex_t(void) { - #ifdef TOKUDB_DEBUG - _owners = 0; - _owner = _null_owner; - #endif - int r = pthread_mutex_init(&_mutex, MY_MUTEX_INIT_FAST); +inline mutex_t::mutex_t(pfs_key_t key) { +#ifdef TOKUDB_DEBUG + _owners = 0; + _owner = _null_owner; +#endif + int r = mysql_mutex_init(key, &_mutex, MY_MUTEX_INIT_FAST); assert_debug(r == 0); } inline mutex_t::~mutex_t(void) { - #ifdef TOKUDB_DEBUG - assert_debug(_owners == 0); - #endif - int r = pthread_mutex_destroy(&_mutex); +#ifdef TOKUDB_DEBUG + assert_debug(_owners == 0); +#endif + int r = mysql_mutex_destroy(&_mutex); assert_debug(r == 0); } -inline void mutex_t::lock(void) { - assert_debug(is_owned_by_me() == false); - int r = pthread_mutex_lock(&_mutex); +inline void mutex_t::reinit(pfs_key_t key) { +#ifdef TOKUDB_DEBUG + assert_debug(_owners == 0); +#endif + int r; + r = mysql_mutex_destroy(&_mutex); + assert_debug(r == 0); + r = mysql_mutex_init(key, &_mutex, MY_MUTEX_INIT_FAST); assert_debug(r == 0); - #ifdef TOKUDB_DEBUG - _owners++; - _owner = pthread_self(); - #endif } -inline int mutex_t::lock(ulonglong microseconds) { +inline void mutex_t::lock( +#ifdef HAVE_PSI_MUTEX_INTERFACE + const char* src_file, + uint src_line +#endif // HAVE_PSI_MUTEX_INTERFACE + ) { assert_debug(is_owned_by_me() == false); - timespec waittime = time::offset_timespec(microseconds); - int r = pthread_mutex_timedlock(&_mutex, &waittime); - #ifdef TOKUDB_DEBUG - if (r == 0) { - _owners++; - _owner = pthread_self(); - } - #endif - assert_debug(r == 0 || r == ETIMEDOUT); - return r; + int r = inline_mysql_mutex_lock(&_mutex +#ifdef HAVE_PSI_MUTEX_INTERFACE + , + src_file, + src_line +#endif // HAVE_PSI_MUTEX_INTERFACE + ); + assert_debug(r == 0); +#ifdef TOKUDB_DEBUG + _owners++; + _owner = pthread_self(); +#endif } -inline void mutex_t::unlock(void) { - #ifdef TOKUDB_DEBUG - assert_debug(_owners > 0); - assert_debug(is_owned_by_me()); - _owners--; - _owner = _null_owner; - #endif - int r = pthread_mutex_unlock(&_mutex); +inline void mutex_t::unlock( +#ifdef HAVE_PSI_MUTEX_INTERFACE + const char* src_file, + uint src_line +#endif // HAVE_PSI_MUTEX_INTERFACE + ) { +#ifndef SAFE_MUTEX + (void)(src_file); + (void)(src_line); +#endif // SAFE_MUTEX +#ifdef TOKUDB_DEBUG + assert_debug(_owners > 0); + assert_debug(is_owned_by_me()); + _owners--; + _owner = _null_owner; +#endif + int r = inline_mysql_mutex_unlock(&_mutex +#ifdef SAFE_MUTEX + , + src_file, + src_line +#endif // SAFE_MUTEX + ); assert_debug(r == 0); } #ifdef TOKUDB_DEBUG @@ -283,18 +275,28 @@ inline bool mutex_t::is_owned_by_me(void) const { } #endif - -inline rwlock_t::rwlock_t(void) { - int r = pthread_rwlock_init(&_rwlock, NULL); +inline rwlock_t::rwlock_t(pfs_key_t key) { + int r = mysql_rwlock_init(key, &_rwlock); assert_debug(r == 0); } inline rwlock_t::~rwlock_t(void) { - int r = pthread_rwlock_destroy(&_rwlock); + int r = mysql_rwlock_destroy(&_rwlock); assert_debug(r == 0); } -inline void rwlock_t::lock_read(void) { +inline void rwlock_t::lock_read( +#ifdef HAVE_PSI_RWLOCK_INTERFACE + const char* src_file, + uint src_line +#endif // HAVE_PSI_RWLOCK_INTERFACE + ) { int r; - while ((r = pthread_rwlock_rdlock(&_rwlock)) != 0) { + while ((r = inline_mysql_rwlock_rdlock(&_rwlock +#ifdef HAVE_PSI_RWLOCK_INTERFACE + , + src_file, + src_line +#endif // HAVE_PSI_RWLOCK_INTERFACE + )) != 0) { if (r == EBUSY || r == EAGAIN) { time::sleep_microsec(1000); continue; @@ -303,24 +305,20 @@ inline void rwlock_t::lock_read(void) { } assert_debug(r == 0); } -inline int rwlock_t::lock_read(ulonglong microseconds) { +inline void rwlock_t::lock_write( +#ifdef HAVE_PSI_RWLOCK_INTERFACE + const char* src_file, + uint src_line +#endif // HAVE_PSI_RWLOCK_INTERFACE + ) { int r; - timespec waittime = time::offset_timespec(microseconds); - while ((r = pthread_rwlock_timedrdlock(&_rwlock, &waittime)) != 0) { - if (r == EBUSY || r == EAGAIN) { - time::sleep_microsec(1000); - continue; - } else if (r == ETIMEDOUT) { - return ETIMEDOUT; - } - break; - } - assert_debug(r == 0); - return r; -} -inline void rwlock_t::lock_write(void) { - int r; - while ((r = pthread_rwlock_wrlock(&_rwlock)) != 0) { + while ((r = inline_mysql_rwlock_wrlock(&_rwlock +#ifdef HAVE_PSI_RWLOCK_INTERFACE + , + src_file, + src_line +#endif // HAVE_PSI_RWLOCK_INTERFACE + )) != 0) { if (r == EBUSY || r == EAGAIN) { time::sleep_microsec(1000); continue; @@ -329,27 +327,11 @@ inline void rwlock_t::lock_write(void) { } assert_debug(r == 0); } -inline int rwlock_t::lock_write(ulonglong microseconds) { - int r; - timespec waittime = time::offset_timespec(microseconds); - while ((r = pthread_rwlock_timedwrlock(&_rwlock, &waittime)) != 0) { - if (r == EBUSY || r == EAGAIN) { - time::sleep_microsec(1000); - continue; - } else if (r == ETIMEDOUT) { - return ETIMEDOUT; - } - break; - } - assert_debug(r == 0); - return r; -} inline void rwlock_t::unlock(void) { - int r = pthread_rwlock_unlock(&_rwlock); + int r = mysql_rwlock_unlock(&_rwlock); assert_debug(r == 0); } -inline rwlock_t::rwlock_t(const rwlock_t&) { -} +inline rwlock_t::rwlock_t(const rwlock_t&) {} inline rwlock_t& rwlock_t::operator=(const rwlock_t&) { return *this; } From e1a42125733ab20590373dd618daa0e3322fe8a1 Mon Sep 17 00:00:00 2001 From: Yura Sorokin Date: Wed, 9 Aug 2017 15:03:32 +0300 Subject: [PATCH 0005/1221] Post fix for ps-5.5.57-merge Added '@PERL_PATH@' to 'mysqldumpslow.sh' missing in the main merge commit. --- scripts/mysqldumpslow.sh | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/scripts/mysqldumpslow.sh b/scripts/mysqldumpslow.sh index 288af6cefd9b..26b922e8107c 100644 --- a/scripts/mysqldumpslow.sh +++ b/scripts/mysqldumpslow.sh @@ -1,8 +1,7 @@ -#!/usr/bin/perl +#!@PERL_PATH@ -# Copyright (c) 2000-2002, 2005-2008 MySQL AB, 2008, 2009 Sun Microsystems, Inc. -# Copyright (c) 2016, Percona Inc. -# Use is subject to license terms. +# Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2017, Percona Inc. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public From 812f5afb450cc154edc876f135f5ba16b6dc2f0f Mon Sep 17 00:00:00 2001 From: Evgeniy Patlan Date: Thu, 10 Aug 2017 10:36:32 +0300 Subject: [PATCH 0006/1221] [BLD-789] postinst fail to find the right MYSQLDATA --- build-ps/debian/percona-server-server-5.6.postinst | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/build-ps/debian/percona-server-server-5.6.postinst b/build-ps/debian/percona-server-server-5.6.postinst index 50bed1711377..53309257f021 100644 --- a/build-ps/debian/percona-server-server-5.6.postinst +++ b/build-ps/debian/percona-server-server-5.6.postinst @@ -63,7 +63,10 @@ set +e; invoke stop; set -e case "$1" in configure) mysql_datadir=/usr/share/mysql - mysql_statedir=/var/lib/mysql + mysql_statedir=$(my_print_defaults mysql | grep '^--datadir=' | sed -n 's/--datadir=//p' | tail -n 1) + if [ -z $mysql_statedir ]; then + mysql_statedir=/var/lib/mysql + fi mysql_rundir=/var/run/mysqld mysql_logdir=/var/log mysql_cfgdir=/etc/mysql From eec5912760fba451138a85380341a6901db9acad Mon Sep 17 00:00:00 2001 From: Evgeniy Patlan Date: Thu, 10 Aug 2017 10:50:18 +0300 Subject: [PATCH 0007/1221] [BLD-789] postinst fail to find the right MYSQLDATA --- build-ps/debian/percona-server-server-5.5.postinst | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/build-ps/debian/percona-server-server-5.5.postinst b/build-ps/debian/percona-server-server-5.5.postinst index 6bf6522588c5..9cd54ea7e9c2 100644 --- a/build-ps/debian/percona-server-server-5.5.postinst +++ b/build-ps/debian/percona-server-server-5.5.postinst @@ -63,7 +63,10 @@ set +e; invoke stop; set -e case "$1" in configure) mysql_datadir=/usr/share/mysql - mysql_statedir=/var/lib/mysql + mysql_statedir=$(my_print_defaults mysql | grep '^--datadir=' | sed -n 's/--datadir=//p' | tail -n 1) + if [ -z $mysql_statedir ]; then + mysql_statedir=/var/lib/mysql + fi mysql_rundir=/var/run/mysqld mysql_logdir=/var/log mysql_cfgdir=/etc/mysql From 9efcc3587acc85a4291b3a5951b7f2f875f38a8b Mon Sep 17 00:00:00 2001 From: Evgeniy Patlan Date: Thu, 10 Aug 2017 14:26:06 +0300 Subject: [PATCH 0008/1221] [BLD-790] mysqld_safe detects basedir incorrectly --- scripts/mysqld_safe.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/mysqld_safe.sh b/scripts/mysqld_safe.sh index 27b57f100210..9fee4e7b8391 100644 --- a/scripts/mysqld_safe.sh +++ b/scripts/mysqld_safe.sh @@ -477,8 +477,8 @@ else # layout is used cd "`dirname $0`" - if [ -h "$0" ] ; then - realpath="`ls -l "$0" | awk '{print $NF}'`" + if [ -h "`dirname $0`" -o -h "$0" ] ; then + realpath=$(readlink -f "$0") cd "`dirname "$realpath"`" fi cd .. From f18c10a5c5ecf5a6e7639d2b84d557b525e6f99e Mon Sep 17 00:00:00 2001 From: Evgeniy Patlan Date: Thu, 10 Aug 2017 14:27:14 +0300 Subject: [PATCH 0009/1221] [BLD-790] mysqld_safe detects basedir incorrectly --- scripts/mysqld_safe.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/mysqld_safe.sh b/scripts/mysqld_safe.sh index 00b337bc5b31..ba92d73296e6 100644 --- a/scripts/mysqld_safe.sh +++ b/scripts/mysqld_safe.sh @@ -457,8 +457,9 @@ else # layout is used cd "`dirname $0`" + if [ -h "`dirname $0`" -o -h "$0" ] ; then if [ -h "$0" ] ; then - realpath="`ls -l "$0" | awk '{print $NF}'`" + realpath=$(readlink -f "$0") cd "`dirname "$realpath"`" fi cd .. From 6c8acd093c687bbba2f71ce7743cdd74db2a2188 Mon Sep 17 00:00:00 2001 From: Yura Sorokin Date: Tue, 15 Aug 2017 18:30:34 +0300 Subject: [PATCH 0010/1221] Post fix for ps-5.6.37-merge Fixed problem with compiling 'segfault-t.cc' gunit test under ASAN. --- unittest/gunit/segfault-t.cc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/unittest/gunit/segfault-t.cc b/unittest/gunit/segfault-t.cc index 77d7d9a17655..273c267d77cb 100644 --- a/unittest/gunit/segfault-t.cc +++ b/unittest/gunit/segfault-t.cc @@ -53,8 +53,8 @@ TEST_F(FatalSignalDeathTest, Abort) TEST_F(FatalSignalDeathTest, Segfault) { -#if defined(__WIN__) int *pint= NULL; +#if defined(__WIN__) /* After upgrading from gtest 1.5 to 1.6 this segfault is no longer caught by handle_fatal_signal(). We get an empty error message from the @@ -65,7 +65,6 @@ TEST_F(FatalSignalDeathTest, Segfault) /* AddressSanitizer */ MY_EXPECT_DEATH_IF_SUPPORTED(*pint= 42, ".*ASAN:(DEADLYSIGNAL|SIGSEGV).*"); #else - int *pint= NULL; /* On most platforms we get SIGSEGV == 11, but SIGBUS == 10 is also possible. And on Mac OsX we can get SIGILL == 4 (but only in optmized mode). From 18df0c57a325f7b51a39b417ee0fb1b917e73f30 Mon Sep 17 00:00:00 2001 From: Evgeniy Patlan Date: Fri, 18 Aug 2017 15:21:19 +0300 Subject: [PATCH 0011/1221] [BLD-797] [PS-5.5] installation fails on Ubuntu --- scripts/mysqld_safe.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/mysqld_safe.sh b/scripts/mysqld_safe.sh index ba92d73296e6..be0ca790b9e4 100644 --- a/scripts/mysqld_safe.sh +++ b/scripts/mysqld_safe.sh @@ -458,7 +458,6 @@ else cd "`dirname $0`" if [ -h "`dirname $0`" -o -h "$0" ] ; then - if [ -h "$0" ] ; then realpath=$(readlink -f "$0") cd "`dirname "$realpath"`" fi From c2cb6e47d30f73399ec6cc89b8b3d9ffab1d65ac Mon Sep 17 00:00:00 2001 From: Evgeniy Patlan Date: Thu, 24 Aug 2017 14:19:44 +0300 Subject: [PATCH 0012/1221] [BLD-805] restart doesn't work on stretch/xenial/yakkety/zesty --- scripts/mysqld_safe.sh | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/scripts/mysqld_safe.sh b/scripts/mysqld_safe.sh index 9fee4e7b8391..d4dc613b84f5 100644 --- a/scripts/mysqld_safe.sh +++ b/scripts/mysqld_safe.sh @@ -30,9 +30,7 @@ want_syslog=0 syslog_tag= user='@MYSQLD_USER@' pid_file= -pid_file_append= err_log= -err_log_append= syslog_tag_mysqld=mysqld syslog_tag_mysqld_safe=mysqld_safe @@ -648,17 +646,15 @@ then err_log="$err_log".err fi - err_log_append="$err_log" case "$err_log" in /* ) ;; * ) err_log="$DATADIR/$err_log" ;; esac else err_log=$DATADIR/`@HOSTNAME@`.err - err_log_append=`@HOSTNAME@`.err fi - append_arg_to_args "--log-error=$err_log_append" + append_arg_to_args "--log-error=$err_log" if [ $want_syslog -eq 1 ] then @@ -773,15 +769,13 @@ fi if test -z "$pid_file" then pid_file="$DATADIR/`@HOSTNAME@`.pid" - pid_file_append="`@HOSTNAME@`.pid" else - pid_file_append="$pid_file" case "$pid_file" in /* ) ;; * ) pid_file="$DATADIR/$pid_file" ;; esac fi -append_arg_to_args "--pid-file=$pid_file_append" +append_arg_to_args "--pid-file=$pid_file" if test -n "$mysql_unix_port" then From ea090ae45f6140b57fd3eb62e7513f42317d347b Mon Sep 17 00:00:00 2001 From: Jun Date: Fri, 25 Aug 2017 17:10:24 -0400 Subject: [PATCH 0013/1221] [TDB-9] TokuDB does not lock rows for writes with LOCK IN SHARE MODE The changes at the sql level. Two small mtr tests are added. The tests fail before the fixes and pass after the fixes are applied, (so does the ctest). The changesets are being cherry-picked forward to 5.7 and not merged. --- mysql-test/mysql-test-run.pl | 0 .../r/locking-read-repeatable-read-1.result | 13 +++++++++ .../r/locking-read-repeatable-read-2.result | 17 +++++++++++ .../t/locking-read-repeatable-read-1.test | 23 +++++++++++++++ .../t/locking-read-repeatable-read-2.test | 29 +++++++++++++++++++ storage/tokudb/PerconaFT | 2 +- storage/tokudb/ha_tokudb.cc | 3 ++ 7 files changed, 86 insertions(+), 1 deletion(-) mode change 100644 => 100755 mysql-test/mysql-test-run.pl create mode 100644 mysql-test/suite/tokudb/r/locking-read-repeatable-read-1.result create mode 100644 mysql-test/suite/tokudb/r/locking-read-repeatable-read-2.result create mode 100644 mysql-test/suite/tokudb/t/locking-read-repeatable-read-1.test create mode 100644 mysql-test/suite/tokudb/t/locking-read-repeatable-read-2.test diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl old mode 100644 new mode 100755 diff --git a/mysql-test/suite/tokudb/r/locking-read-repeatable-read-1.result b/mysql-test/suite/tokudb/r/locking-read-repeatable-read-1.result new file mode 100644 index 000000000000..c9fcb5e22736 --- /dev/null +++ b/mysql-test/suite/tokudb/r/locking-read-repeatable-read-1.result @@ -0,0 +1,13 @@ +create table t (a int primary key, b int) ENGINE=TokuDB; +insert into t values (1,0); +set session transaction isolation level repeatable read; +begin; +select * from t where a=1 lock in share mode; +a b +1 0 +set session transaction isolation level repeatable read; +begin; +update t set b=b+1 where a=1; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +commit; +drop table t; diff --git a/mysql-test/suite/tokudb/r/locking-read-repeatable-read-2.result b/mysql-test/suite/tokudb/r/locking-read-repeatable-read-2.result new file mode 100644 index 000000000000..f1b214e514c4 --- /dev/null +++ b/mysql-test/suite/tokudb/r/locking-read-repeatable-read-2.result @@ -0,0 +1,17 @@ +create table t (a int primary key, b int) ENGINE=TokuDB; +insert into t values (1,0); +insert into t values (2,1); +insert into t values (3,2); +set session transaction isolation level repeatable read; +begin; +select * from t lock in share mode; +a b +1 0 +2 1 +3 2 +set session transaction isolation level repeatable read; +begin; +update t set b=b+1 where a=2; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +commit; +drop table t; diff --git a/mysql-test/suite/tokudb/t/locking-read-repeatable-read-1.test b/mysql-test/suite/tokudb/t/locking-read-repeatable-read-1.test new file mode 100644 index 000000000000..c5ef0f0703e9 --- /dev/null +++ b/mysql-test/suite/tokudb/t/locking-read-repeatable-read-1.test @@ -0,0 +1,23 @@ +source include/have_tokudb.inc; +source include/count_sessions.inc; +create table t (a int primary key, b int) ENGINE=TokuDB; +insert into t values (1,0); +set session transaction isolation level repeatable read; +begin; +# t1 select in share mode +select * from t where a=1 lock in share mode; +# t2 update +connect(conn1,localhost,root); +set session transaction isolation level repeatable read; +begin; +# t2 select for update, should hang until t1 commits +send update t set b=b+1 where a=1; +--error ER_LOCK_WAIT_TIMEOUT +reap; +# t2 update +connection default; +commit; +disconnect conn1; +drop table t; + +source include/wait_until_count_sessions.inc; diff --git a/mysql-test/suite/tokudb/t/locking-read-repeatable-read-2.test b/mysql-test/suite/tokudb/t/locking-read-repeatable-read-2.test new file mode 100644 index 000000000000..20a4549c45f4 --- /dev/null +++ b/mysql-test/suite/tokudb/t/locking-read-repeatable-read-2.test @@ -0,0 +1,29 @@ +#the difference of this test from locking-read-repeatable-read-1 +#is that this test is on range query(gap lock) which actually +#examines a different patch + +source include/have_tokudb.inc; +source include/count_sessions.inc; +create table t (a int primary key, b int) ENGINE=TokuDB; +insert into t values (1,0); +insert into t values (2,1); +insert into t values (3,2); +set session transaction isolation level repeatable read; +begin; +# t1 select in share mode +select * from t lock in share mode; +# t2 update +connect(conn1,localhost,root); +set session transaction isolation level repeatable read; +begin; +# t2 select for update, should hang until t1 commits +send update t set b=b+1 where a=2; +--error ER_LOCK_WAIT_TIMEOUT +reap; +# t2 update +connection default; +commit; +disconnect conn1; +drop table t; + +source include/wait_until_count_sessions.inc; diff --git a/storage/tokudb/PerconaFT b/storage/tokudb/PerconaFT index 43f81569cfd0..938ba1d7175f 160000 --- a/storage/tokudb/PerconaFT +++ b/storage/tokudb/PerconaFT @@ -1 +1 @@ -Subproject commit 43f81569cfd002763e080689d720e52265b72206 +Subproject commit 938ba1d7175ffc9e521b5c068169a8832f53c889 diff --git a/storage/tokudb/ha_tokudb.cc b/storage/tokudb/ha_tokudb.cc index a97657054019..9c4f4f6fbb77 100644 --- a/storage/tokudb/ha_tokudb.cc +++ b/storage/tokudb/ha_tokudb.cc @@ -4632,6 +4632,9 @@ int ha_tokudb::index_init(uint keynr, bool sorted) { if (tokudb::sysvars::disable_prefetching(thd)) { cursor_flags |= DBC_DISABLE_PREFETCHING; } + if (lock.type == TL_READ_WITH_SHARED_LOCKS) { + cursor_flags |= DB_LOCKING_READ; + } if ((error = share->key_file[keynr]->cursor(share->key_file[keynr], transaction, &cursor, cursor_flags))) { From 5cb6382a6cd5cbdd31e257fb78705079a4d49504 Mon Sep 17 00:00:00 2001 From: Balasubramanian Kandasamy Date: Tue, 29 Aug 2017 15:42:38 +0530 Subject: [PATCH 0014/1221] Raise version number after cloning 5.5.58 --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 2905c37cc092..87b72051a84d 100644 --- a/VERSION +++ b/VERSION @@ -1,4 +1,4 @@ MYSQL_VERSION_MAJOR=5 MYSQL_VERSION_MINOR=5 -MYSQL_VERSION_PATCH=58 +MYSQL_VERSION_PATCH=59 MYSQL_VERSION_EXTRA= From 66b0ea5f6946d81d71a69d134e38dfcd5b59b99f Mon Sep 17 00:00:00 2001 From: Anushree Prakash B Date: Tue, 29 Aug 2017 17:36:16 +0530 Subject: [PATCH 0015/1221] Bug#25813089 - CREATE USER IF NOT EXISTS SHOULD ALWAYS BE WRITTEN TO THE BINLOGS DESCRIPTION =========== MySQL 5.7 introduced a new command CREATE USER IF NOT EXISTS ... The idea of this command is that it can be run safely on a master and would not break things irrespective of whether the user exists on the master or on the slave. However, the implementation does not write this statement to the binlog when the user exists on the master which results in an inconsistency. ANALYSIS ======== Presently, if the statements CREATE USER IF NOT EXISTS are a no-op on the master, they are not written to the the binlog. This results in an inconsistent behavior if a particular user is present on the slave but not on the master. Similar issue arises for ALTER USER IF EXISTS statements. FIX === The fix ensures that the statements having queries like 1. CREATE USER IF NOT EXISTS .. and 2. ALTER USER IF EXISTS .. are binlogged making sure that replication does not break and the consistency is maintained across all masters and slaves. --- mysql-test/r/user_if_exists.result | 3 + .../binlog/r/binlog_user_if_exists.result | 120 +++++++++++++++++- .../suite/binlog/t/binlog_user_if_exists.test | 116 ++++++++++++++++- .../suite/rpl/r/rpl_user_if_exists.result | 2 + .../suite/rpl/t/rpl_user_if_exists.test | 15 +++ mysql-test/t/user_if_exists.test | 23 ++++ sql/auth/auth_common.h | 2 +- sql/auth/sql_user.cc | 93 +++++++------- sql/sql_rewrite.cc | 58 ++++++++- 9 files changed, 375 insertions(+), 57 deletions(-) diff --git a/mysql-test/r/user_if_exists.result b/mysql-test/r/user_if_exists.result index 768cd964dec9..18ffea9004de 100644 --- a/mysql-test/r/user_if_exists.result +++ b/mysql-test/r/user_if_exists.result @@ -1,3 +1,4 @@ +call mtr.add_suppression('Corresponding entry in binary log used default authentication.*'); DELETE FROM mysql.user WHERE user = 'wl8540'; FLUSH PRIVILEGES; SELECT COUNT(*) FROM mysql.user WHERE user = 'wl8540'; @@ -163,6 +164,7 @@ Level Code Message SELECT COUNT(*) FROM mysql.user WHERE user = 'wl8540'; COUNT(*) 3 +# Search warnings in the server log DELETE FROM mysql.user WHERE user = 'wl8540'; FLUSH PRIVILEGES; @@ -266,4 +268,5 @@ DROP USER b21807286@localhost; ALTER USER IF EXISTS b21807286@localhost IDENTIFIED BY 'xyz'; Warnings: Note 3162 User 'b21807286'@'localhost' does not exist. +# Search warnings in the server log # End of 5.7 tests diff --git a/mysql-test/suite/binlog/r/binlog_user_if_exists.result b/mysql-test/suite/binlog/r/binlog_user_if_exists.result index fe2694066163..1f00f1cef5d3 100644 --- a/mysql-test/suite/binlog/r/binlog_user_if_exists.result +++ b/mysql-test/suite/binlog/r/binlog_user_if_exists.result @@ -1,3 +1,4 @@ +call mtr.add_suppression('Corresponding entry in binary log used default authentication.*'); include/master-slave.inc Warnings: Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. @@ -33,13 +34,130 @@ include/sync_slave_sql_with_master.inc include/show_binlog_events.inc Log_name Pos Event_type Server_id End_log_pos Info slave-bin.000001 # Query # # use `test`; CREATE USER 'u1'@'localhost' IDENTIFIED WITH 'mysql_native_password' -slave-bin.000001 # Query # # use `test`; CREATE USER IF NOT EXISTS 'u2'@'localhost' IDENTIFIED WITH 'mysql_native_password' +slave-bin.000001 # Query # # use `test`; CREATE USER IF NOT EXISTS 'u1'@'localhost' IDENTIFIED WITH 'mysql_native_password','u2'@'localhost' IDENTIFIED WITH 'mysql_native_password' slave-bin.000001 # Query # # use `test`; ALTER USER IF EXISTS 'u1'@'localhost' ACCOUNT LOCK slave-bin.000001 # Query # # use `test`; DROP USER u1@localhost slave-bin.000001 # Query # # use `test`; DROP USER IF EXISTS u2@localhost slave-bin.000001 # Query # # use `test`; CREATE USER IF NOT EXISTS 'b21807286'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*85D0F19E5598AC04AC7B3FCF5383247D28FB59EF' +slave-bin.000001 # Query # # use `test`; CREATE USER IF NOT EXISTS 'b21807286'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*CF18BC9B45678165F755356FBD148E0F84D19A63' slave-bin.000001 # Query # # use `test`; ALTER USER IF EXISTS 'b21807286'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*7B8BEAA4240FE1A214BFAEDD99FB3842E4234E5E' +slave-bin.000001 # Query # # use `test`; ALTER USER IF EXISTS 'b21807286_not_exists'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*498D18FA98FB65CF8E71D1D9DA5721646499DBD1' slave-bin.000001 # Query # # use `test`; DROP USER b21807286@localhost +# +# Bug #25813089: "CREATE USER IF NOT EXISTS SHOULD ALWAYS +# BE WRITTEN TO THE BINLOGS" +# +# ------ +"Scenario 1: CREATE/ALTER USER IF[NOT]EXISTS FOR A SINGLE USER" +# ------ +CREATE USER u1@localhost IDENTIFIED BY 'pass1'; +CREATE USER IF NOT EXISTS u1@localhost IDENTIFIED BY 'pass2'; +Warnings: +Note 3163 User 'u1'@'localhost' already exists. +ALTER USER u1@localhost IDENTIFIED BY 'pass3'; +ALTER USER IF EXISTS u1@localhost IDENTIFIED BY 'pass4'; +ALTER USER IF EXISTS u1_not_exists@localhost IDENTIFIED BY 'pass5'; +Warnings: +Note 3162 User 'u1_not_exists'@'localhost' does not exist. +DROP USER u1@localhost; +[On Master] +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Query # # use `test`; CREATE USER 'u1'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*22A99BA288DB55E8E230679259740873101CD636' +master-bin.000001 # Query # # use `test`; CREATE USER IF NOT EXISTS 'u1'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*1B884EF334D678B0743C8CE0425F980669D8FBB6' +master-bin.000001 # Query # # use `test`; ALTER USER 'u1'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*35B5E90BC4F5AE5D02ED515DF6B61141F24EDA02' +master-bin.000001 # Query # # use `test`; ALTER USER IF EXISTS 'u1'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*B718D8767BBACFBCE02BA2669ECCEB05930FF7D7' +master-bin.000001 # Query # # use `test`; ALTER USER IF EXISTS 'u1_not_exists'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*9D3D6FA96FA91117D387A4B990C41F5809A536EE' +master-bin.000001 # Query # # use `test`; DROP USER u1@localhost +include/sync_slave_sql_with_master.inc +[On Slave] +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +slave-bin.000001 # Query # # use `test`; CREATE USER 'u1'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*22A99BA288DB55E8E230679259740873101CD636' +slave-bin.000001 # Query # # use `test`; CREATE USER IF NOT EXISTS 'u1'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*1B884EF334D678B0743C8CE0425F980669D8FBB6' +slave-bin.000001 # Query # # use `test`; ALTER USER 'u1'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*35B5E90BC4F5AE5D02ED515DF6B61141F24EDA02' +slave-bin.000001 # Query # # use `test`; ALTER USER IF EXISTS 'u1'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*B718D8767BBACFBCE02BA2669ECCEB05930FF7D7' +slave-bin.000001 # Query # # use `test`; ALTER USER IF EXISTS 'u1_not_exists'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*9D3D6FA96FA91117D387A4B990C41F5809A536EE' +slave-bin.000001 # Query # # use `test`; DROP USER u1@localhost +"Creating a user only on slave" +CREATE USER IF NOT EXISTS slave_user@localhost IDENTIFIED BY 'slave_pass'; +# ------ +"Scenario 2: CREATE/ALTER USER IF[NOT]EXISTS FOR MULTIPLE USERS" +# ------ +CREATE USER IF NOT EXISTS u1@localhost IDENTIFIED BY 'pass1', +u2@localhost IDENTIFIED BY 'pass2'; +CREATE USER IF NOT EXISTS u1@localhost IDENTIFIED BY 'pass1', +u2@localhost IDENTIFIED BY 'pass2', +u3@localhost IDENTIFIED BY 'pass3'; +Warnings: +Note 3163 User 'u1'@'localhost' already exists. +Note 3163 User 'u2'@'localhost' already exists. +ALTER USER IF EXISTS u1@localhost IDENTIFIED BY 'pass4', +u2@localhost IDENTIFIED BY 'pass5', +u3@localhost IDENTIFIED BY 'pass6', +u4_not_exists@localhost IDENTIFIED BY 'pass7', +slave_user@localhost IDENTIFIED BY 'pass8'; +Warnings: +Note 3162 User 'u4_not_exists'@'localhost' does not exist. +Note 3162 User 'slave_user'@'localhost' does not exist. +DROP USER IF EXISTS u1@localhost, u2@localhost, u3@localhost, slave_user@localhost; +Warnings: +Note 3162 User 'slave_user'@'localhost' does not exist. +[On Master] +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Query # # use `test`; CREATE USER IF NOT EXISTS 'u1'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*22A99BA288DB55E8E230679259740873101CD636','u2'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*1B884EF334D678B0743C8CE0425F980669D8FBB6' +master-bin.000001 # Query # # use `test`; CREATE USER IF NOT EXISTS 'u1'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*22A99BA288DB55E8E230679259740873101CD636','u2'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*1B884EF334D678B0743C8CE0425F980669D8FBB6','u3'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*35B5E90BC4F5AE5D02ED515DF6B61141F24EDA02' +master-bin.000001 # Query # # use `test`; ALTER USER IF EXISTS 'u1'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*B718D8767BBACFBCE02BA2669ECCEB05930FF7D7','u2'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*9D3D6FA96FA91117D387A4B990C41F5809A536EE','u3'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*E4744236E26ADD8C3C3D727C7851A097FBBB8A87','u4_not_exists'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*BEA19EBE4ACA6B1820BF580B4054EB6B5B0D198D','slave_user'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*F40D7E5342EC4960531243A96CC2E94079BC11B7' +master-bin.000001 # Query # # use `test`; DROP USER IF EXISTS u1@localhost, u2@localhost, u3@localhost, slave_user@localhost +include/sync_slave_sql_with_master.inc +[On Slave] +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +slave-bin.000001 # Query # # use `test`; CREATE USER IF NOT EXISTS 'slave_user'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*A8204EFAFFB19DEF65BE70042A9D93F1971925BC' +slave-bin.000001 # Query # # use `test`; CREATE USER IF NOT EXISTS 'u1'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*22A99BA288DB55E8E230679259740873101CD636','u2'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*1B884EF334D678B0743C8CE0425F980669D8FBB6' +slave-bin.000001 # Query # # use `test`; CREATE USER IF NOT EXISTS 'u1'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*22A99BA288DB55E8E230679259740873101CD636','u2'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*1B884EF334D678B0743C8CE0425F980669D8FBB6','u3'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*35B5E90BC4F5AE5D02ED515DF6B61141F24EDA02' +slave-bin.000001 # Query # # use `test`; ALTER USER IF EXISTS 'u1'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*B718D8767BBACFBCE02BA2669ECCEB05930FF7D7','u2'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*9D3D6FA96FA91117D387A4B990C41F5809A536EE','u3'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*E4744236E26ADD8C3C3D727C7851A097FBBB8A87','u4_not_exists'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*BEA19EBE4ACA6B1820BF580B4054EB6B5B0D198D','slave_user'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*F40D7E5342EC4960531243A96CC2E94079BC11B7' +slave-bin.000001 # Query # # use `test`; DROP USER IF EXISTS u1@localhost, u2@localhost, u3@localhost, slave_user@localhost +# ------ +"Scenario 3: CREATE/ALTER USER IF[NOT]EXISTS WITH" +"AUTHENTICATION PLUGIN PROVIDED EXPLICITLY" +# ------ +include/rpl_restart_server.inc [server_number=1 parameters: --default_authentication_plugin=sha256_password] +include/rpl_reset.inc +SHOW VARIABLES LIKE 'default_authentication_plugin'; +Variable_name Value +default_authentication_plugin sha256_password +CREATE USER IF NOT EXISTS u1@localhost IDENTIFIED WITH mysql_native_password by 'pass_native'; +CREATE USER IF NOT EXISTS u1@localhost IDENTIFIED WITH mysql_native_password by 'pass_native2'; +Warnings: +Note 3163 User 'u1'@'localhost' already exists. +ALTER USER IF EXISTS u1@localhost IDENTIFIED WITH mysql_native_password BY 'pass_native3'; +ALTER USER IF EXISTS u2_not_exists@localhost IDENTIFIED WITH mysql_native_password BY 'pass_native4'; +Warnings: +Note 3162 User 'u2_not_exists'@'localhost' does not exist. +SELECT user,authentication_string FROM mysql.user WHERE user='u1'; +user authentication_string +u1 *52BA180A884483D54A3CEB45FB50D4E5B8071399 +DROP USER u1@localhost; +[On Master] +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Query # # use `test`; CREATE USER IF NOT EXISTS 'u1'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*6DD89A65903AC3BCC4873BA43D17EFFB912C67EE' +master-bin.000001 # Query # # use `test`; CREATE USER IF NOT EXISTS 'u1'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*AD3E6D897B165BF1FA7D3583FA1FF6AF31FA3C4B' +master-bin.000001 # Query # # use `test`; ALTER USER IF EXISTS 'u1'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*52BA180A884483D54A3CEB45FB50D4E5B8071399' +master-bin.000001 # Query # # use `test`; ALTER USER IF EXISTS 'u2_not_exists'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*53ED7183CBBC6D9995663DD96EFFA60E2CE2C96E' +master-bin.000001 # Query # # use `test`; DROP USER u1@localhost +include/sync_slave_sql_with_master.inc +[On Slave] +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +slave-bin.000001 # Query # # use `test`; CREATE USER IF NOT EXISTS 'u1'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*6DD89A65903AC3BCC4873BA43D17EFFB912C67EE' +slave-bin.000001 # Query # # use `test`; CREATE USER IF NOT EXISTS 'u1'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*AD3E6D897B165BF1FA7D3583FA1FF6AF31FA3C4B' +slave-bin.000001 # Query # # use `test`; ALTER USER IF EXISTS 'u1'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*52BA180A884483D54A3CEB45FB50D4E5B8071399' +slave-bin.000001 # Query # # use `test`; ALTER USER IF EXISTS 'u2_not_exists'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*53ED7183CBBC6D9995663DD96EFFA60E2CE2C96E' +slave-bin.000001 # Query # # use `test`; DROP USER u1@localhost +# Search warnings in the server log include/rpl_end.inc End of 5.7 tests! diff --git a/mysql-test/suite/binlog/t/binlog_user_if_exists.test b/mysql-test/suite/binlog/t/binlog_user_if_exists.test index 7a3dcd53f1cd..bd3b61fb1862 100644 --- a/mysql-test/suite/binlog/t/binlog_user_if_exists.test +++ b/mysql-test/suite/binlog/t/binlog_user_if_exists.test @@ -1,15 +1,15 @@ --source include/not_embedded.inc # Save the initial number of concurrent sessions --source include/count_sessions.inc +call mtr.add_suppression('Corresponding entry in binary log used default authentication.*'); + --source include/master-slave.inc --connection master - SHOW GLOBAL VARIABLES LIKE 'log_builtin_as_identified_by_password'; --echo # --echo # WL#8540: Support IF [NOT] EXISTS clause in CREATE/DROP USER --echo # - CREATE USER u1@localhost; CREATE USER IF NOT EXISTS u1@localhost, u2@localhost; ALTER USER IF EXISTS u1@localhost ACCOUNT LOCK; @@ -19,18 +19,126 @@ DROP USER IF EXISTS u2@localhost; --echo # --echo # Bug #21807286: "CREATE USER IF NOT EXISTS" REPORTS AN ERROR --echo # - - CREATE USER IF NOT EXISTS b21807286@localhost IDENTIFIED BY 'haha'; CREATE USER IF NOT EXISTS b21807286@localhost IDENTIFIED BY 'haha2'; ALTER USER IF EXISTS b21807286@localhost IDENTIFIED BY 'haha3'; ALTER USER IF EXISTS b21807286_not_exists@localhost IDENTIFIED BY 'haha4'; DROP USER b21807286@localhost; +--source include/sync_slave_sql_with_master.inc +--echo [On Slave] +--source include/show_binlog_events.inc + +--echo # +--echo # Bug #25813089: "CREATE USER IF NOT EXISTS SHOULD ALWAYS +--echo # BE WRITTEN TO THE BINLOGS" +--echo # + +# Scenario 1: Create/Alter user executed on a single user + +--echo # ------ +--echo "Scenario 1: CREATE/ALTER USER IF[NOT]EXISTS FOR A SINGLE USER" +--echo # ------ +--connection master +# Save master position +--let $saved_master_pos= query_get_value('SHOW MASTER STATUS', Position, 1) +--let $binlog_start= $saved_master_pos + +CREATE USER u1@localhost IDENTIFIED BY 'pass1'; +CREATE USER IF NOT EXISTS u1@localhost IDENTIFIED BY 'pass2'; +ALTER USER u1@localhost IDENTIFIED BY 'pass3'; +ALTER USER IF EXISTS u1@localhost IDENTIFIED BY 'pass4'; +ALTER USER IF EXISTS u1_not_exists@localhost IDENTIFIED BY 'pass5'; +DROP USER u1@localhost; + +--echo [On Master] +--source include/show_binlog_events.inc --source include/sync_slave_sql_with_master.inc --echo [On Slave] --source include/show_binlog_events.inc + +--echo "Creating a user only on slave" +CREATE USER IF NOT EXISTS slave_user@localhost IDENTIFIED BY 'slave_pass'; + +# Scenario 2: Create/Alter user executed on multiple users +# irrespective of whether they are present on master or not + +--echo # ------ +--echo "Scenario 2: CREATE/ALTER USER IF[NOT]EXISTS FOR MULTIPLE USERS" +--echo # ------ +--connection master +# Save master position +--let $saved_master_pos= query_get_value('SHOW MASTER STATUS', Position, 1) +--let $binlog_start= $saved_master_pos +CREATE USER IF NOT EXISTS u1@localhost IDENTIFIED BY 'pass1', + u2@localhost IDENTIFIED BY 'pass2'; + +CREATE USER IF NOT EXISTS u1@localhost IDENTIFIED BY 'pass1', + u2@localhost IDENTIFIED BY 'pass2', + u3@localhost IDENTIFIED BY 'pass3'; + +ALTER USER IF EXISTS u1@localhost IDENTIFIED BY 'pass4', + u2@localhost IDENTIFIED BY 'pass5', + u3@localhost IDENTIFIED BY 'pass6', + u4_not_exists@localhost IDENTIFIED BY 'pass7', + slave_user@localhost IDENTIFIED BY 'pass8'; +DROP USER IF EXISTS u1@localhost, u2@localhost, u3@localhost, slave_user@localhost; + +--echo [On Master] +--source include/show_binlog_events.inc + +--source include/sync_slave_sql_with_master.inc +--echo [On Slave] +--source include/show_binlog_events.inc + +# Scenario 3: Make sure that the default authentication plugin is not used +# when the plugin is specified explicitly while creating or altering users. + +--echo # ------ +--echo "Scenario 3: CREATE/ALTER USER IF[NOT]EXISTS WITH" +--echo "AUTHENTICATION PLUGIN PROVIDED EXPLICITLY" +--echo # ------ +--connection master +--let $rpl_server_number= 1 +--let $rpl_server_parameters= --default_authentication_plugin=sha256_password +--source include/rpl_restart_server.inc + +--disable_warnings +--source include/rpl_reset.inc +--enable_warnings + +# Save master position +--let $saved_master_pos= query_get_value('SHOW MASTER STATUS', Position, 1) +--let $binlog_start= $saved_master_pos + +SHOW VARIABLES LIKE 'default_authentication_plugin'; +CREATE USER IF NOT EXISTS u1@localhost IDENTIFIED WITH mysql_native_password by 'pass_native'; +CREATE USER IF NOT EXISTS u1@localhost IDENTIFIED WITH mysql_native_password by 'pass_native2'; +ALTER USER IF EXISTS u1@localhost IDENTIFIED WITH mysql_native_password BY 'pass_native3'; +ALTER USER IF EXISTS u2_not_exists@localhost IDENTIFIED WITH mysql_native_password BY 'pass_native4'; +SELECT user,authentication_string FROM mysql.user WHERE user='u1'; +DROP USER u1@localhost; + +--echo [On Master] +--source include/show_binlog_events.inc + +--source include/sync_slave_sql_with_master.inc +--echo [On Slave] +--source include/show_binlog_events.inc + +# Search for the warnings in the server log +let server_log= $MYSQLTEST_VARDIR/log/mysqld.1.err; +let SEARCH_FILE= $server_log; +--echo # Search warnings in the server log + +--let SEARCH_PATTERN= Following users were specified in CREATE USER IF NOT EXISTS +--source include/search_pattern_in_file.inc + +--let SEARCH_PATTERN= Following users were specified in ALTER USER IF EXISTS +--source include/search_pattern_in_file.inc + +#Clean up --source include/rpl_end.inc --echo diff --git a/mysql-test/suite/rpl/r/rpl_user_if_exists.result b/mysql-test/suite/rpl/r/rpl_user_if_exists.result index 057b29985489..5d4f4d41840e 100644 --- a/mysql-test/suite/rpl/r/rpl_user_if_exists.result +++ b/mysql-test/suite/rpl/r/rpl_user_if_exists.result @@ -8,6 +8,7 @@ Note #### Storing MySQL user name or password information in the master info rep # [On Master] # No users exist: +call mtr.add_suppression('Corresponding entry in binary log used default authentication.*'); DROP USER IF EXISTS wl8540@nohost1, wl8540@nohost2; Warnings: Note 3162 User 'wl8540'@'nohost1' does not exist. @@ -96,4 +97,5 @@ Warnings: Note 3162 User 'slave_user2'@'localhost' does not exist. FLUSH PRIVILEGES; include/sync_slave_sql_with_master.inc +# Search warnings in the server log include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_user_if_exists.test b/mysql-test/suite/rpl/t/rpl_user_if_exists.test index 3c5b50d41541..2ecc0dc1710b 100644 --- a/mysql-test/suite/rpl/t/rpl_user_if_exists.test +++ b/mysql-test/suite/rpl/t/rpl_user_if_exists.test @@ -1,6 +1,7 @@ # Created: 2015-07-01 Lalit Choudhary # WL#8540 # Testing IF [NOT] EXISTS clause in CREATE/DROP/ALTER USER with Replication. + --source include/master-slave.inc --connection master --echo [On Master] @@ -10,6 +11,12 @@ --echo [On Master] --echo # No users exist: +# For already existing users in case of CREATE USER IF NOT EXISTS +# and for non-existing users in case of ALTER USER IF EXISTS, +# the warnings will be generated if default authentication plugin +# is used while writing the entries to binlog. +call mtr.add_suppression('Corresponding entry in binary log used default authentication.*'); + DROP USER IF EXISTS wl8540@nohost1, wl8540@nohost2; SELECT COUNT(*) FROM mysql.user WHERE user = 'wl8540'; ALTER USER IF EXISTS wl8540@nohost1, wl8540@nohost2 ACCOUNT LOCK; @@ -80,5 +87,13 @@ FLUSH PRIVILEGES; --source include/sync_slave_sql_with_master.inc +# Search for the warnings in the server log +let server_log= $MYSQLTEST_VARDIR/log/mysqld.1.err; +let SEARCH_FILE= $server_log; +--echo # Search warnings in the server log + +--let SEARCH_PATTERN= Following users were specified in CREATE USER IF NOT EXISTS +--source include/search_pattern_in_file.inc + --source include/rpl_end.inc # End: diff --git a/mysql-test/t/user_if_exists.test b/mysql-test/t/user_if_exists.test index b3d642e8e190..6ceb1aec314c 100644 --- a/mysql-test/t/user_if_exists.test +++ b/mysql-test/t/user_if_exists.test @@ -6,6 +6,11 @@ # Requires privileges to be enabled --source include/not_embedded.inc +# For already existing users in case of CREATE USER IF NOT EXISTS +# and for non-existing users in case of ALTER USER IF EXISTS, +# the warnings will be generated if default authentication plugin +# is used while writing the entries to binlog. +call mtr.add_suppression('Corresponding entry in binary log used default authentication.*'); # cleanup DELETE FROM mysql.user WHERE user = 'wl8540'; FLUSH PRIVILEGES; @@ -82,6 +87,14 @@ CREATE USER IF NOT EXISTS wl8540@nohost1, wl8540@nohost2; SHOW WARNINGS; SELECT COUNT(*) FROM mysql.user WHERE user = 'wl8540'; +# Search for the warnings in the server log +let server_log= $MYSQLTEST_VARDIR/log/mysqld.1.err; +let SEARCH_FILE= $server_log; +--echo # Search warnings in the server log + +--let SEARCH_PATTERN= Following users were specified in CREATE USER IF NOT EXISTS +--source include/search_pattern_in_file.inc + # cleanup DELETE FROM mysql.user WHERE user = 'wl8540'; FLUSH PRIVILEGES; @@ -196,5 +209,15 @@ DROP USER b21807286@localhost; --echo # Must not fail but return a warning ALTER USER IF EXISTS b21807286@localhost IDENTIFIED BY 'xyz'; +# Search for the warnings in the server log +let server_log= $MYSQLTEST_VARDIR/log/mysqld.1.err; +let SEARCH_FILE= $server_log; +--echo # Search warnings in the server log + +--let SEARCH_PATTERN= Following users were specified in CREATE USER IF NOT EXISTS +--source include/search_pattern_in_file.inc + +--let SEARCH_PATTERN= Following users were specified in ALTER USER IF EXISTS +--source include/search_pattern_in_file.inc --echo # End of 5.7 tests diff --git a/sql/auth/auth_common.h b/sql/auth/auth_common.h index b8a24ed195ae..c1d571d2c165 100644 --- a/sql/auth/auth_common.h +++ b/sql/auth/auth_common.h @@ -601,7 +601,7 @@ bool acl_check_host(const char *host, const char *ip); /* rewrite CREATE/ALTER/GRANT user */ void mysql_rewrite_create_alter_user(THD *thd, String *rlb, - std::set *users_not_to_log= NULL); + std::set *extra_users= NULL); void mysql_rewrite_grant(THD *thd, String *rlb); /* sql_user */ diff --git a/sql/auth/sql_user.cc b/sql/auth/sql_user.cc index bb8f5dc85f94..08d3d113300d 100644 --- a/sql/auth/sql_user.cc +++ b/sql/auth/sql_user.cc @@ -29,6 +29,7 @@ #include "tztime.h" #include "crypt_genhash_impl.h" /* CRYPT_MAX_PASSWORD_SIZE */ #include "sql_user_table.h" +#include #ifndef DBUG_OFF #define HASH_STRING_WITH_QUOTE \ @@ -1352,7 +1353,7 @@ bool mysql_create_user(THD *thd, List &list, bool if_not_exists) ulong what_to_update= 0; bool is_anonymous_user= false; bool rollback_whole_statement= false; - std::set users_not_to_log; + std::set extra_users; DBUG_ENTER("mysql_create_user"); /* @@ -1427,12 +1428,12 @@ bool mysql_create_user(THD *thd, List &list, bool if_not_exists) warn_user.c_ptr_safe()); try { - users_not_to_log.insert(tmp_user_name); + extra_users.insert(user_name); } catch (...) {} continue; } - else + else { append_user(thd, &wrong_users, user_name, wrong_users.length() > 0, false); @@ -1454,12 +1455,11 @@ bool mysql_create_user(THD *thd, List &list, bool if_not_exists) my_error(ER_CANNOT_USER, MYF(0), "CREATE USER", wrong_users.c_ptr_safe()); } - if (some_users_created || - (if_not_exists && users_not_to_log.size() < list.elements)) + if (some_users_created || if_not_exists) { String *rlb= &thd->rewritten_query; rlb->mem_free(); - mysql_rewrite_create_alter_user(thd, rlb, &users_not_to_log); + mysql_rewrite_create_alter_user(thd, rlb, &extra_users); int ret= commit_owned_gtid_by_partial_command(thd); @@ -1781,7 +1781,7 @@ bool mysql_alter_user(THD *thd, List &list, bool if_exists) bool save_binlog_row_based; bool is_privileged_user= false; bool rollback_whole_statement= false; - std::set users_not_to_log; + std::set extra_users; Acl_table_intact table_intact; DBUG_ENTER("mysql_alter_user"); @@ -1850,60 +1850,33 @@ bool mysql_alter_user(THD *thd, List &list, bool if_exists) continue; } - /* look up the user */ - if (!(acl_user= find_acl_user(user_from->host.str, - user_from->user.str, TRUE))) - { - if (if_exists) - { - String warn_user; - append_user(thd, &warn_user, user_from, FALSE, FALSE); - push_warning_printf(thd, Sql_condition::SL_NOTE, - ER_USER_DOES_NOT_EXIST, - ER_THD(thd, ER_USER_DOES_NOT_EXIST), - warn_user.c_ptr_safe()); - try - { - users_not_to_log.insert(tmp_user_from); - } - catch (...) {} - } - else - { - result= TRUE; - append_user(thd, &wrong_users, user_from, wrong_users.length() > 0, - false); - } - - continue; - } - if (user_from && user_from->plugin.str) optimize_plugin_compare_by_pointer(&user_from->plugin); /* copy password expire attributes to individual lex user */ user_from->alter_status= thd->lex->alter_password; + if (set_and_validate_user_attributes(thd, user_from, what_to_alter, + is_privileged_user)) + { + result= true; + continue; + } + /* Check if the user's authentication method supports expiration only if PASSWORD EXPIRE attribute is specified */ if (user_from->alter_status.update_password_expired_column && - !auth_plugin_supports_expiration(acl_user->plugin.str)) + !auth_plugin_supports_expiration(user_from->plugin.str)) { result= true; append_user(thd, &wrong_users, user_from, wrong_users.length() > 0, false); continue; } - if (set_and_validate_user_attributes(thd, user_from, what_to_alter, - is_privileged_user)) - { - result= true; - continue; - } - if (!acl_user->user && + if (!strcmp(user_from->user.str, "") && (what_to_alter & PASSWORD_EXPIRE_ATTR) && user_from->alter_status.update_password_expired_column) { @@ -1914,6 +1887,34 @@ bool mysql_alter_user(THD *thd, List &list, bool if_exists) continue; } + /* look up the user */ + if (!(acl_user= find_acl_user(user_from->host.str, + user_from->user.str, TRUE))) + { + if (if_exists) + { + String warn_user; + append_user(thd, &warn_user, user_from, FALSE, FALSE); + push_warning_printf(thd, Sql_condition::SL_NOTE, + ER_USER_DOES_NOT_EXIST, + ER_THD(thd, ER_USER_DOES_NOT_EXIST), + warn_user.c_ptr_safe()); + try + { + extra_users.insert(user_from); + } + catch (...) {} + } + else + { + result= TRUE; + append_user(thd, &wrong_users, user_from, wrong_users.length() > 0, + false); + } + + continue; + } + /* update the mysql.user table */ int ret= replace_user_table(thd, table, user_from, 0, false, true, what_to_alter); @@ -1945,13 +1946,12 @@ bool mysql_alter_user(THD *thd, List &list, bool if_exists) my_error(ER_CANNOT_USER, MYF(0), "ALTER USER", wrong_users.c_ptr_safe()); } - if (some_user_altered || - (if_exists && users_not_to_log.size() < list.elements)) + if (some_user_altered || if_exists) { /* do query rewrite for ALTER USER */ String *rlb= &thd->rewritten_query; rlb->mem_free(); - mysql_rewrite_create_alter_user(thd, rlb, &users_not_to_log); + mysql_rewrite_create_alter_user(thd, rlb, &extra_users); int ret= commit_owned_gtid_by_partial_command(thd); if (ret == 1) @@ -1959,6 +1959,7 @@ bool mysql_alter_user(THD *thd, List &list, bool if_exists) thd->rewritten_query.c_ptr_safe(), thd->rewritten_query.length(), table->file->has_transactions()) != 0); + else if (ret == -1) result|= -1; } diff --git a/sql/sql_rewrite.cc b/sql/sql_rewrite.cc index 353268426c1e..9f92ce26207b 100644 --- a/sql/sql_rewrite.cc +++ b/sql/sql_rewrite.cc @@ -38,7 +38,7 @@ #include "sp_head.h" // struct set_var_base #include "rpl_slave.h" // SLAVE_SQL, SLAVE_IO #include "mysqld.h" // opt_log_builtin_as_identified_by_password - +#include "log.h" /** Append a key/value pair to a string, with an optional preceding comma. @@ -355,7 +355,7 @@ static void mysql_rewrite_set(THD *thd, String *rlb) */ void mysql_rewrite_create_alter_user(THD *thd, String *rlb, - std::set *users_not_to_log) + std::set *extra_users) { LEX *lex= thd->lex; LEX_USER *user_name, *tmp_user_name; @@ -377,9 +377,6 @@ void mysql_rewrite_create_alter_user(THD *thd, String *rlb, while ((tmp_user_name= user_list++)) { - if (users_not_to_log && - users_not_to_log->find(tmp_user_name) != users_not_to_log->end()) - continue; if ((user_name= get_current_user(thd, tmp_user_name))) { if (opt_log_builtin_as_identified_by_password && @@ -421,6 +418,57 @@ void mysql_rewrite_create_alter_user(THD *thd, String *rlb, { rewrite_account_lock(lex, rlb); } + + if ((lex->sql_command == SQLCOM_CREATE_USER || + lex->sql_command == SQLCOM_ALTER_USER) && + extra_users && extra_users->size()) + { + String warn_user; + bool comma= false; + bool log_warning= false; + std::set::iterator it; + for (it = extra_users->begin(); it != extra_users->end(); it++) + { + /* + Consider for warning if one of the following is true: + 1. If SQLCOM_CREATE_USER and IF NOT EXISTS clause is used and + IDENTIFIED WITH clause is not used + 2. If SQLCOM_ALTER_USER and IF EXISTS clause is used and + IDENTIFIED WITH clause is not used + */ + LEX_USER* extra_user= *it; + if (!extra_user->uses_identified_with_clause && + (lex->sql_command == SQLCOM_CREATE_USER || + extra_user->uses_identified_by_clause)) + { + append_user(thd, &warn_user, extra_user, comma, false); + comma= true; + log_warning= true; + } + } + if (log_warning) + { + if (lex->sql_command == SQLCOM_CREATE_USER) + { + sql_print_warning("Following users were specified in CREATE USER " + "IF NOT EXISTS but they already exist. " + "Corresponding entry in binary log used default " + "authentication plugin '%s' to rewrite " + "authentication information(if any) for them: %s\n", + default_auth_plugin, warn_user.c_ptr_safe()); + } + else if (lex->sql_command == SQLCOM_ALTER_USER) + { + sql_print_warning("Following users were specified in ALTER USER " + "IF EXISTS but they do not exist. " + "Corresponding entry in binary log used default " + "authentication plugin '%s' to rewrite " + "authentication information(if any) for them: %s\n", + default_auth_plugin, warn_user.c_ptr_safe()); + } + } + warn_user.mem_free(); + } } /** From f91afb92e2ca2ae49c2a9e3a4ae9a4d65448312d Mon Sep 17 00:00:00 2001 From: Sreeharsha Ramanavarapu Date: Tue, 29 Aug 2017 20:13:34 +0530 Subject: [PATCH 0016/1221] Bug #18898433: EXTREMELY SLOW PERFORMANCE WITH OUTER JOINS AND JOIN BUFFER Issue: ------ The algorithm for join_records is : 1. Generate fully matching records by calling join_matching_records(). That is, extensions for which the ON condition is true. 2. Call to join_records() recursively to extend these matching records for remaining tables. 3. Generate null complemented extensions for those rows in the join buffer that do not have matches. (Call to join_null_complements()) 4. Recursively extend null complemented rows for remaining tables. (second call to join_records()). For joins of the form t1 LEFT JOIN (t2 INNER JOIN t3), that is the first_inner and last_inner aren't the same, it is necessary to call join_records() twice to null complement all the tables. But for queries of the form t1 LEFT JOIN t2 LEFT JOIN t3, is the first_inner and last_inner same, the first call to join_records (Step 2) isn't necessary. Since null complementing will happen anyway towards the end. This is problematic because the extra (and recursive) call to join_records will result in extra reads from the relevant tables. Solution: --------- When there is a single inner table for outer join, skip the Step 2 (linked join_cache's call to join_records()). This will avoid both extra processing and I/O. --- mysql-test/r/join_cache_bka.result | 2 +- mysql-test/r/join_cache_bka_nixbnl.result | 2 +- mysql-test/r/join_cache_bkaunique.result | 2 +- mysql-test/r/join_outer.result | 145 +++++++++++++++++++++- mysql-test/r/join_outer_bka.result | 145 +++++++++++++++++++++- mysql-test/r/join_outer_bka_nixbnl.result | 143 +++++++++++++++++++++ mysql-test/r/signal_demo1.result | 10 +- mysql-test/t/join_outer.test | 52 ++++++++ mysql-test/t/signal_demo1.test | 3 + sql/sql_join_buffer.cc | 10 +- sql/sql_opt_exec_shared.h | 4 +- 11 files changed, 510 insertions(+), 8 deletions(-) diff --git a/mysql-test/r/join_cache_bka.result b/mysql-test/r/join_cache_bka.result index b89ac5f6f0f7..66418a706236 100644 --- a/mysql-test/r/join_cache_bka.result +++ b/mysql-test/r/join_cache_bka.result @@ -2785,9 +2785,9 @@ LEFT JOIN t3 ON t2.pk = t3.pk LEFT JOIN t4 ON t4.pk = t2.pk WHERE t1.col_int OR t3.col_int; col_int -2 3 1 +2 NULL NULL DROP TABLE t1, t2, t3, t4; diff --git a/mysql-test/r/join_cache_bka_nixbnl.result b/mysql-test/r/join_cache_bka_nixbnl.result index 25224f4f96ad..36346bc7c55d 100644 --- a/mysql-test/r/join_cache_bka_nixbnl.result +++ b/mysql-test/r/join_cache_bka_nixbnl.result @@ -2785,9 +2785,9 @@ LEFT JOIN t3 ON t2.pk = t3.pk LEFT JOIN t4 ON t4.pk = t2.pk WHERE t1.col_int OR t3.col_int; col_int -2 3 1 +2 NULL NULL DROP TABLE t1, t2, t3, t4; diff --git a/mysql-test/r/join_cache_bkaunique.result b/mysql-test/r/join_cache_bkaunique.result index 0a06abc8e8b6..13a147add012 100644 --- a/mysql-test/r/join_cache_bkaunique.result +++ b/mysql-test/r/join_cache_bkaunique.result @@ -2786,9 +2786,9 @@ LEFT JOIN t3 ON t2.pk = t3.pk LEFT JOIN t4 ON t4.pk = t2.pk WHERE t1.col_int OR t3.col_int; col_int -2 3 1 +2 NULL NULL DROP TABLE t1, t2, t3, t4; diff --git a/mysql-test/r/join_outer.result b/mysql-test/r/join_outer.result index 1ea5313f0414..700315bc4c75 100644 --- a/mysql-test/r/join_outer.result +++ b/mysql-test/r/join_outer.result @@ -702,9 +702,9 @@ insert into t2 values (1,3), (2,3); insert into t3 values (2,4), (3,4); select * from t1 left join t2 on b1 = a1 left join t3 on c1 = a1 and b1 is null; a1 a2 b1 b2 c1 c2 +3 2 NULL NULL 3 4 1 2 1 3 NULL NULL 2 2 2 3 NULL NULL -3 2 NULL NULL 3 4 explain select * from t1 left join t2 on b1 = a1 left join t3 on c1 = a1 and b1 is null; id select_type table partitions type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 3 100.00 NULL @@ -2737,3 +2737,146 @@ ON subq.t1_a = t1.a ORDER BY t1.a; a st_value DROP TABLE t1, t2; +# Bug #18898433: EXTREMELY SLOW PERFORMANCE WITH OUTER JOINS AND JOIN +# BUFFER. +# +CREATE TABLE t1 (i INT NOT NULL); +INSERT INTO t1 VALUES (0),(2),(3),(4); +CREATE TABLE t2 (i INT NOT NULL); +INSERT INTO t2 VALUES (0),(1),(3),(4); +CREATE TABLE t3 (i INT NOT NULL); +INSERT INTO t3 VALUES (0),(1),(2),(4); +CREATE TABLE t4 (i INT NOT NULL); +INSERT INTO t4 VALUES (0),(1),(2),(3); +EXPLAIN SELECT * +FROM t1 LEFT JOIN +( +(t2 LEFT JOIN t3 ON t3.i= t2.i) +LEFT JOIN t4 ON t3.i= t4.i +)ON t2.i= t1.i; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 4 100.00 NULL +1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 4 100.00 Using where; Using join buffer (Block Nested Loop) +1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 4 100.00 Using where; Using join buffer (Block Nested Loop) +1 SIMPLE t4 NULL ALL NULL NULL NULL NULL 4 100.00 Using where; Using join buffer (Block Nested Loop) +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i`,`test`.`t2`.`i` AS `i`,`test`.`t3`.`i` AS `i`,`test`.`t4`.`i` AS `i` from `test`.`t1` left join (`test`.`t2` left join `test`.`t3` on((`test`.`t3`.`i` = `test`.`t1`.`i`)) left join `test`.`t4` on((`test`.`t4`.`i` = `test`.`t3`.`i`))) on((`test`.`t2`.`i` = `test`.`t1`.`i`)) where 1 +EXPLAIN SELECT * +FROM t1 LEFT JOIN +( +(t2 INNER JOIN t3 ON t3.i= t2.i) +LEFT JOIN t4 ON t3.i= t4.i +)ON t2.i= t1.i; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 4 100.00 NULL +1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 4 100.00 Using where; Using join buffer (Block Nested Loop) +1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 4 100.00 Using where; Using join buffer (Block Nested Loop) +1 SIMPLE t4 NULL ALL NULL NULL NULL NULL 4 100.00 Using where; Using join buffer (Block Nested Loop) +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i`,`test`.`t2`.`i` AS `i`,`test`.`t3`.`i` AS `i`,`test`.`t4`.`i` AS `i` from `test`.`t1` left join (`test`.`t2` join `test`.`t3` left join `test`.`t4` on((`test`.`t4`.`i` = `test`.`t1`.`i`))) on(((`test`.`t2`.`i` = `test`.`t1`.`i`) and (`test`.`t3`.`i` = `test`.`t1`.`i`))) where 1 +EXPLAIN SELECT * +FROM t1 LEFT JOIN t2 ON t2.i= t1.i +LEFT JOIN t3 ON t3.i= t2.i +LEFT JOIN t4 ON t3.i= t4.i; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 4 100.00 NULL +1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 4 100.00 Using where; Using join buffer (Block Nested Loop) +1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 4 100.00 Using where; Using join buffer (Block Nested Loop) +1 SIMPLE t4 NULL ALL NULL NULL NULL NULL 4 100.00 Using where; Using join buffer (Block Nested Loop) +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i`,`test`.`t2`.`i` AS `i`,`test`.`t3`.`i` AS `i`,`test`.`t4`.`i` AS `i` from `test`.`t1` left join `test`.`t2` on((`test`.`t2`.`i` = `test`.`t1`.`i`)) left join `test`.`t3` on((`test`.`t3`.`i` = `test`.`t2`.`i`)) left join `test`.`t4` on((`test`.`t4`.`i` = `test`.`t3`.`i`)) where 1 +flush status; +SELECT * +FROM t1 LEFT JOIN +( +(t2 LEFT JOIN t3 ON t3.i= t2.i) +LEFT JOIN t4 ON t3.i= t4.i +)ON t2.i= t1.i; +i i i i +0 0 0 0 +4 4 4 NULL +3 3 NULL NULL +2 NULL NULL NULL +SHOW STATUS LIKE 'HANDLER_%'; +Variable_name Value +Handler_commit 0 +Handler_delete 0 +Handler_discover 0 +Handler_external_lock 8 +Handler_mrr_init 0 +Handler_prepare 0 +Handler_read_first 0 +Handler_read_key 0 +Handler_read_last 0 +Handler_read_next 0 +Handler_read_prev 0 +Handler_read_rnd 0 +Handler_read_rnd_next 20 +Handler_rollback 0 +Handler_savepoint 0 +Handler_savepoint_rollback 0 +Handler_update 0 +Handler_write 0 +flush status; +SELECT * +FROM t1 LEFT JOIN +( +(t2 INNER JOIN t3 ON t3.i= t2.i) +LEFT JOIN t4 ON t3.i= t4.i +)ON t2.i= t1.i; +i i i i +0 0 0 0 +4 4 4 NULL +2 NULL NULL NULL +3 NULL NULL NULL +SHOW STATUS LIKE 'HANDLER_%'; +Variable_name Value +Handler_commit 0 +Handler_delete 0 +Handler_discover 0 +Handler_external_lock 8 +Handler_mrr_init 0 +Handler_prepare 0 +Handler_read_first 0 +Handler_read_key 0 +Handler_read_last 0 +Handler_read_next 0 +Handler_read_prev 0 +Handler_read_rnd 0 +Handler_read_rnd_next 20 +Handler_rollback 0 +Handler_savepoint 0 +Handler_savepoint_rollback 0 +Handler_update 0 +Handler_write 0 +flush status; +SELECT * +FROM t1 LEFT JOIN t2 ON t2.i= t1.i +LEFT JOIN t3 ON t3.i= t2.i +LEFT JOIN t4 ON t3.i= t4.i; +i i i i +0 0 0 0 +4 4 4 NULL +3 3 NULL NULL +2 NULL NULL NULL +SHOW STATUS LIKE 'HANDLER_%'; +Variable_name Value +Handler_commit 0 +Handler_delete 0 +Handler_discover 0 +Handler_external_lock 8 +Handler_mrr_init 0 +Handler_prepare 0 +Handler_read_first 0 +Handler_read_key 0 +Handler_read_last 0 +Handler_read_next 0 +Handler_read_prev 0 +Handler_read_rnd 0 +Handler_read_rnd_next 20 +Handler_rollback 0 +Handler_savepoint 0 +Handler_savepoint_rollback 0 +Handler_update 0 +Handler_write 0 +DROP TABLE t1, t2, t3, t4; diff --git a/mysql-test/r/join_outer_bka.result b/mysql-test/r/join_outer_bka.result index adf20b992f0d..c2c93409da5f 100644 --- a/mysql-test/r/join_outer_bka.result +++ b/mysql-test/r/join_outer_bka.result @@ -703,9 +703,9 @@ insert into t2 values (1,3), (2,3); insert into t3 values (2,4), (3,4); select * from t1 left join t2 on b1 = a1 left join t3 on c1 = a1 and b1 is null; a1 a2 b1 b2 c1 c2 +3 2 NULL NULL 3 4 1 2 1 3 NULL NULL 2 2 2 3 NULL NULL -3 2 NULL NULL 3 4 explain select * from t1 left join t2 on b1 = a1 left join t3 on c1 = a1 and b1 is null; id select_type table partitions type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 3 100.00 NULL @@ -2738,4 +2738,147 @@ ON subq.t1_a = t1.a ORDER BY t1.a; a st_value DROP TABLE t1, t2; +# Bug #18898433: EXTREMELY SLOW PERFORMANCE WITH OUTER JOINS AND JOIN +# BUFFER. +# +CREATE TABLE t1 (i INT NOT NULL); +INSERT INTO t1 VALUES (0),(2),(3),(4); +CREATE TABLE t2 (i INT NOT NULL); +INSERT INTO t2 VALUES (0),(1),(3),(4); +CREATE TABLE t3 (i INT NOT NULL); +INSERT INTO t3 VALUES (0),(1),(2),(4); +CREATE TABLE t4 (i INT NOT NULL); +INSERT INTO t4 VALUES (0),(1),(2),(3); +EXPLAIN SELECT * +FROM t1 LEFT JOIN +( +(t2 LEFT JOIN t3 ON t3.i= t2.i) +LEFT JOIN t4 ON t3.i= t4.i +)ON t2.i= t1.i; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 4 100.00 NULL +1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 4 100.00 Using where; Using join buffer (Block Nested Loop) +1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 4 100.00 Using where; Using join buffer (Block Nested Loop) +1 SIMPLE t4 NULL ALL NULL NULL NULL NULL 4 100.00 Using where; Using join buffer (Block Nested Loop) +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i`,`test`.`t2`.`i` AS `i`,`test`.`t3`.`i` AS `i`,`test`.`t4`.`i` AS `i` from `test`.`t1` left join (`test`.`t2` left join `test`.`t3` on((`test`.`t3`.`i` = `test`.`t1`.`i`)) left join `test`.`t4` on((`test`.`t4`.`i` = `test`.`t3`.`i`))) on((`test`.`t2`.`i` = `test`.`t1`.`i`)) where 1 +EXPLAIN SELECT * +FROM t1 LEFT JOIN +( +(t2 INNER JOIN t3 ON t3.i= t2.i) +LEFT JOIN t4 ON t3.i= t4.i +)ON t2.i= t1.i; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 4 100.00 NULL +1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 4 100.00 Using where; Using join buffer (Block Nested Loop) +1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 4 100.00 Using where; Using join buffer (Block Nested Loop) +1 SIMPLE t4 NULL ALL NULL NULL NULL NULL 4 100.00 Using where; Using join buffer (Block Nested Loop) +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i`,`test`.`t2`.`i` AS `i`,`test`.`t3`.`i` AS `i`,`test`.`t4`.`i` AS `i` from `test`.`t1` left join (`test`.`t2` join `test`.`t3` left join `test`.`t4` on((`test`.`t4`.`i` = `test`.`t1`.`i`))) on(((`test`.`t2`.`i` = `test`.`t1`.`i`) and (`test`.`t3`.`i` = `test`.`t1`.`i`))) where 1 +EXPLAIN SELECT * +FROM t1 LEFT JOIN t2 ON t2.i= t1.i +LEFT JOIN t3 ON t3.i= t2.i +LEFT JOIN t4 ON t3.i= t4.i; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 4 100.00 NULL +1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 4 100.00 Using where; Using join buffer (Block Nested Loop) +1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 4 100.00 Using where; Using join buffer (Block Nested Loop) +1 SIMPLE t4 NULL ALL NULL NULL NULL NULL 4 100.00 Using where; Using join buffer (Block Nested Loop) +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i`,`test`.`t2`.`i` AS `i`,`test`.`t3`.`i` AS `i`,`test`.`t4`.`i` AS `i` from `test`.`t1` left join `test`.`t2` on((`test`.`t2`.`i` = `test`.`t1`.`i`)) left join `test`.`t3` on((`test`.`t3`.`i` = `test`.`t2`.`i`)) left join `test`.`t4` on((`test`.`t4`.`i` = `test`.`t3`.`i`)) where 1 +flush status; +SELECT * +FROM t1 LEFT JOIN +( +(t2 LEFT JOIN t3 ON t3.i= t2.i) +LEFT JOIN t4 ON t3.i= t4.i +)ON t2.i= t1.i; +i i i i +0 0 0 0 +4 4 4 NULL +3 3 NULL NULL +2 NULL NULL NULL +SHOW STATUS LIKE 'HANDLER_%'; +Variable_name Value +Handler_commit 0 +Handler_delete 0 +Handler_discover 0 +Handler_external_lock 8 +Handler_mrr_init 0 +Handler_prepare 0 +Handler_read_first 0 +Handler_read_key 0 +Handler_read_last 0 +Handler_read_next 0 +Handler_read_prev 0 +Handler_read_rnd 0 +Handler_read_rnd_next 20 +Handler_rollback 0 +Handler_savepoint 0 +Handler_savepoint_rollback 0 +Handler_update 0 +Handler_write 0 +flush status; +SELECT * +FROM t1 LEFT JOIN +( +(t2 INNER JOIN t3 ON t3.i= t2.i) +LEFT JOIN t4 ON t3.i= t4.i +)ON t2.i= t1.i; +i i i i +0 0 0 0 +4 4 4 NULL +2 NULL NULL NULL +3 NULL NULL NULL +SHOW STATUS LIKE 'HANDLER_%'; +Variable_name Value +Handler_commit 0 +Handler_delete 0 +Handler_discover 0 +Handler_external_lock 8 +Handler_mrr_init 0 +Handler_prepare 0 +Handler_read_first 0 +Handler_read_key 0 +Handler_read_last 0 +Handler_read_next 0 +Handler_read_prev 0 +Handler_read_rnd 0 +Handler_read_rnd_next 20 +Handler_rollback 0 +Handler_savepoint 0 +Handler_savepoint_rollback 0 +Handler_update 0 +Handler_write 0 +flush status; +SELECT * +FROM t1 LEFT JOIN t2 ON t2.i= t1.i +LEFT JOIN t3 ON t3.i= t2.i +LEFT JOIN t4 ON t3.i= t4.i; +i i i i +0 0 0 0 +4 4 4 NULL +3 3 NULL NULL +2 NULL NULL NULL +SHOW STATUS LIKE 'HANDLER_%'; +Variable_name Value +Handler_commit 0 +Handler_delete 0 +Handler_discover 0 +Handler_external_lock 8 +Handler_mrr_init 0 +Handler_prepare 0 +Handler_read_first 0 +Handler_read_key 0 +Handler_read_last 0 +Handler_read_next 0 +Handler_read_prev 0 +Handler_read_rnd 0 +Handler_read_rnd_next 20 +Handler_rollback 0 +Handler_savepoint 0 +Handler_savepoint_rollback 0 +Handler_update 0 +Handler_write 0 +DROP TABLE t1, t2, t3, t4; set optimizer_switch=default; diff --git a/mysql-test/r/join_outer_bka_nixbnl.result b/mysql-test/r/join_outer_bka_nixbnl.result index 1bfe80fecfa6..71233aa926ed 100644 --- a/mysql-test/r/join_outer_bka_nixbnl.result +++ b/mysql-test/r/join_outer_bka_nixbnl.result @@ -2736,4 +2736,147 @@ ON subq.t1_a = t1.a ORDER BY t1.a; a st_value DROP TABLE t1, t2; +# Bug #18898433: EXTREMELY SLOW PERFORMANCE WITH OUTER JOINS AND JOIN +# BUFFER. +# +CREATE TABLE t1 (i INT NOT NULL); +INSERT INTO t1 VALUES (0),(2),(3),(4); +CREATE TABLE t2 (i INT NOT NULL); +INSERT INTO t2 VALUES (0),(1),(3),(4); +CREATE TABLE t3 (i INT NOT NULL); +INSERT INTO t3 VALUES (0),(1),(2),(4); +CREATE TABLE t4 (i INT NOT NULL); +INSERT INTO t4 VALUES (0),(1),(2),(3); +EXPLAIN SELECT * +FROM t1 LEFT JOIN +( +(t2 LEFT JOIN t3 ON t3.i= t2.i) +LEFT JOIN t4 ON t3.i= t4.i +)ON t2.i= t1.i; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 4 100.00 NULL +1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 4 100.00 Using where +1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 4 100.00 Using where +1 SIMPLE t4 NULL ALL NULL NULL NULL NULL 4 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i`,`test`.`t2`.`i` AS `i`,`test`.`t3`.`i` AS `i`,`test`.`t4`.`i` AS `i` from `test`.`t1` left join (`test`.`t2` left join `test`.`t3` on((`test`.`t3`.`i` = `test`.`t1`.`i`)) left join `test`.`t4` on((`test`.`t4`.`i` = `test`.`t3`.`i`))) on((`test`.`t2`.`i` = `test`.`t1`.`i`)) where 1 +EXPLAIN SELECT * +FROM t1 LEFT JOIN +( +(t2 INNER JOIN t3 ON t3.i= t2.i) +LEFT JOIN t4 ON t3.i= t4.i +)ON t2.i= t1.i; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 4 100.00 NULL +1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 4 100.00 Using where +1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 4 100.00 Using where +1 SIMPLE t4 NULL ALL NULL NULL NULL NULL 4 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i`,`test`.`t2`.`i` AS `i`,`test`.`t3`.`i` AS `i`,`test`.`t4`.`i` AS `i` from `test`.`t1` left join (`test`.`t2` join `test`.`t3` left join `test`.`t4` on((`test`.`t4`.`i` = `test`.`t1`.`i`))) on(((`test`.`t2`.`i` = `test`.`t1`.`i`) and (`test`.`t3`.`i` = `test`.`t1`.`i`))) where 1 +EXPLAIN SELECT * +FROM t1 LEFT JOIN t2 ON t2.i= t1.i +LEFT JOIN t3 ON t3.i= t2.i +LEFT JOIN t4 ON t3.i= t4.i; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 4 100.00 NULL +1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 4 100.00 Using where +1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 4 100.00 Using where +1 SIMPLE t4 NULL ALL NULL NULL NULL NULL 4 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i`,`test`.`t2`.`i` AS `i`,`test`.`t3`.`i` AS `i`,`test`.`t4`.`i` AS `i` from `test`.`t1` left join `test`.`t2` on((`test`.`t2`.`i` = `test`.`t1`.`i`)) left join `test`.`t3` on((`test`.`t3`.`i` = `test`.`t2`.`i`)) left join `test`.`t4` on((`test`.`t4`.`i` = `test`.`t3`.`i`)) where 1 +flush status; +SELECT * +FROM t1 LEFT JOIN +( +(t2 LEFT JOIN t3 ON t3.i= t2.i) +LEFT JOIN t4 ON t3.i= t4.i +)ON t2.i= t1.i; +i i i i +0 0 0 0 +2 NULL NULL NULL +3 3 NULL NULL +4 4 4 NULL +SHOW STATUS LIKE 'HANDLER_%'; +Variable_name Value +Handler_commit 0 +Handler_delete 0 +Handler_discover 0 +Handler_external_lock 8 +Handler_mrr_init 0 +Handler_prepare 0 +Handler_read_first 0 +Handler_read_key 0 +Handler_read_last 0 +Handler_read_next 0 +Handler_read_prev 0 +Handler_read_rnd 0 +Handler_read_rnd_next 55 +Handler_rollback 0 +Handler_savepoint 0 +Handler_savepoint_rollback 0 +Handler_update 0 +Handler_write 0 +flush status; +SELECT * +FROM t1 LEFT JOIN +( +(t2 INNER JOIN t3 ON t3.i= t2.i) +LEFT JOIN t4 ON t3.i= t4.i +)ON t2.i= t1.i; +i i i i +0 0 0 0 +2 NULL NULL NULL +3 NULL NULL NULL +4 4 4 NULL +SHOW STATUS LIKE 'HANDLER_%'; +Variable_name Value +Handler_commit 0 +Handler_delete 0 +Handler_discover 0 +Handler_external_lock 8 +Handler_mrr_init 0 +Handler_prepare 0 +Handler_read_first 0 +Handler_read_key 0 +Handler_read_last 0 +Handler_read_next 0 +Handler_read_prev 0 +Handler_read_rnd 0 +Handler_read_rnd_next 50 +Handler_rollback 0 +Handler_savepoint 0 +Handler_savepoint_rollback 0 +Handler_update 0 +Handler_write 0 +flush status; +SELECT * +FROM t1 LEFT JOIN t2 ON t2.i= t1.i +LEFT JOIN t3 ON t3.i= t2.i +LEFT JOIN t4 ON t3.i= t4.i; +i i i i +0 0 0 0 +2 NULL NULL NULL +3 3 NULL NULL +4 4 4 NULL +SHOW STATUS LIKE 'HANDLER_%'; +Variable_name Value +Handler_commit 0 +Handler_delete 0 +Handler_discover 0 +Handler_external_lock 8 +Handler_mrr_init 0 +Handler_prepare 0 +Handler_read_first 0 +Handler_read_key 0 +Handler_read_last 0 +Handler_read_next 0 +Handler_read_prev 0 +Handler_read_rnd 0 +Handler_read_rnd_next 65 +Handler_rollback 0 +Handler_savepoint 0 +Handler_savepoint_rollback 0 +Handler_update 0 +Handler_write 0 +DROP TABLE t1, t2, t3, t4; set optimizer_switch=default; diff --git a/mysql-test/r/signal_demo1.result b/mysql-test/r/signal_demo1.result index 752f23a48d68..fce5bfb4376e 100644 --- a/mysql-test/r/signal_demo1.result +++ b/mysql-test/r/signal_demo1.result @@ -236,6 +236,14 @@ po_id line_no item_id qty 2 1 200 1 3 1 300 10 3 2 301 20 +SELECT * FROM ab_physical_person; +person_id first_name middle_initial last_name +1 John A Doe +2 Marry B Smith +SELECT * FROM ab_moral_person; +company_id name +3 ACME real estate, INC +4 Local school select po_id as "PO#", ( case cust_type when "P" then concat (pp.first_name, @@ -250,9 +258,9 @@ left join ab_physical_person pp on po.cust_id = pp.person_id left join ab_moral_person mp on po.cust_id = company_id ; PO# Sold to +3 Local school 1 John A Doe 2 Marry B Smith -3 Local school select po_id as "PO#", ol.line_no as "Line", ol.item_id as "Item", diff --git a/mysql-test/t/join_outer.test b/mysql-test/t/join_outer.test index fd3aee438bff..713f8470b1aa 100644 --- a/mysql-test/t/join_outer.test +++ b/mysql-test/t/join_outer.test @@ -1996,3 +1996,55 @@ eval $query2; eval $query3; DROP TABLE t1, t2; + +--echo # Bug #18898433: EXTREMELY SLOW PERFORMANCE WITH OUTER JOINS AND JOIN +--echo # BUFFER. +--echo # + +CREATE TABLE t1 (i INT NOT NULL); +INSERT INTO t1 VALUES (0),(2),(3),(4); +CREATE TABLE t2 (i INT NOT NULL); +INSERT INTO t2 VALUES (0),(1),(3),(4); +CREATE TABLE t3 (i INT NOT NULL); +INSERT INTO t3 VALUES (0),(1),(2),(4); +CREATE TABLE t4 (i INT NOT NULL); +INSERT INTO t4 VALUES (0),(1),(2),(3); +let query1= +SELECT * +FROM t1 LEFT JOIN + ( + (t2 LEFT JOIN t3 ON t3.i= t2.i) + LEFT JOIN t4 ON t3.i= t4.i + )ON t2.i= t1.i; + +let query2= +SELECT * +FROM t1 LEFT JOIN + ( + (t2 INNER JOIN t3 ON t3.i= t2.i) + LEFT JOIN t4 ON t3.i= t4.i + )ON t2.i= t1.i; + +let query3= +SELECT * +FROM t1 LEFT JOIN t2 ON t2.i= t1.i + LEFT JOIN t3 ON t3.i= t2.i + LEFT JOIN t4 ON t3.i= t4.i; + +eval EXPLAIN $query1; +eval EXPLAIN $query2; +eval EXPLAIN $query3; + +flush status; +eval $query1; +SHOW STATUS LIKE 'HANDLER_%'; + +flush status; +eval $query2; +SHOW STATUS LIKE 'HANDLER_%'; + +flush status; +eval $query3; +SHOW STATUS LIKE 'HANDLER_%'; + +DROP TABLE t1, t2, t3, t4; diff --git a/mysql-test/t/signal_demo1.test b/mysql-test/t/signal_demo1.test index cdb14cd22cfc..f961998dba6d 100644 --- a/mysql-test/t/signal_demo1.test +++ b/mysql-test/t/signal_demo1.test @@ -301,6 +301,9 @@ call po_add_order_line (@my_po, 2, 301, 20); select * from po_order; select * from po_order_line; +SELECT * FROM ab_physical_person; +SELECT * FROM ab_moral_person; + # Creative reporting ... select po_id as "PO#", diff --git a/sql/sql_join_buffer.cc b/sql/sql_join_buffer.cc index e13bd36cb077..b3df15168f4f 100644 --- a/sql/sql_join_buffer.cc +++ b/sql/sql_join_buffer.cc @@ -1912,7 +1912,15 @@ enum_nested_loop_state JOIN_CACHE::join_records(bool skip_last) goto finish; if (outer_join_first_inner) { - if (next_cache) + /* + If the inner-most outer join has a single inner table, all matches for + outer table's record from join buffer is already found by + join_matching_records. There is no need to call + next_cache->join_records now. The full extensions of matched and null + extended rows will be generated together at once by calling + next_cache->join_records at the end of this function. + */ + if (!qep_tab->is_single_inner_for_outer_join() && next_cache) { /* Ensure that all matches for outer records from join buffer are to be diff --git a/sql/sql_opt_exec_shared.h b/sql/sql_opt_exec_shared.h index de5ead9302de..7bdf0dcf885a 100644 --- a/sql/sql_opt_exec_shared.h +++ b/sql/sql_opt_exec_shared.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -508,6 +508,8 @@ class QEP_shared_owner { return m_qs->is_inner_table_of_outer_join(); } bool is_first_inner_for_outer_join() const { return m_qs->is_first_inner_for_outer_join(); } + bool is_single_inner_for_outer_join() const + { return m_qs->is_single_inner_of_outer_join(); } bool has_guarded_conds() const { return ref().has_guarded_conds(); } From 0f7835fdfce57f4f7f6c58c0ce703793ae43a69a Mon Sep 17 00:00:00 2001 From: Kailasnath Nagarkar Date: Tue, 29 Aug 2017 23:05:59 +0530 Subject: [PATCH 0017/1221] Bug #25737271 : MYSQL SERVER CRASHED WITH SIG 11 ON MERGE_BUFFERSP10SORT_PARAMP11ST_IO_CACHE ISSUE: The merge_buffers() function had incorrect way of handling buffers resulting in server exiting abnormally. SOLUTION: Corrected buffer handling in merge_buffers() --- sql/filesort.cc | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/sql/filesort.cc b/sql/filesort.cc index 2a4cbbf384eb..680d8e06db5c 100644 --- a/sql/filesort.cc +++ b/sql/filesort.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -2134,9 +2134,6 @@ int merge_buffers(Sort_param *param, IO_CACHE *from_file, Called by Unique::get() Copy the first argument to param->unique_buff for unique removal. Store it also in 'to_file'. - - This is safe as we know that there is always more than one element - in each block to merge (This is guaranteed by the Unique:: algorithm */ merge_chunk= queue.top(); memcpy(param->unique_buff, merge_chunk->current_key(), rec_length); @@ -2151,6 +2148,17 @@ int merge_buffers(Sort_param *param, IO_CACHE *from_file, error= 0; /* purecov: inspected */ goto end; /* purecov: inspected */ } + // The top chunk may actually contain only a single element + if (merge_chunk->mem_count() == 0) + { + if (!(error= (int) read_to_buffer(from_file, merge_chunk, param))) + { + queue.pop(); + reuse_freed_buff(merge_chunk, &queue); + } + else if (error == -1) + DBUG_RETURN(error); + } queue.update_top(); // Top element has been used } From 7aa9c87cd3708e7092c0780fbbf99cec1e7a3cb3 Mon Sep 17 00:00:00 2001 From: Shishir Jaiswal Date: Wed, 30 Aug 2017 12:38:04 +0530 Subject: [PATCH 0018/1221] Bug#25996291 - NEED MORE INFORMATION THAN: PERFORMANCE SCHEMA DISABLED (REASON: INIT FAILED) DESCRIPTION =========== If Performance schema initialization fails, the server log just reads, "[Warning] Performance schema disabled (reason: init failed)." It doesn't tell the exact reason what caused this failure making it difficult to overcome the failure. ANALYSIS ======== initialize_performance_schema() executes several sub-init functions which are primarily involved in allocating the memory [with the help of pfs_malloc_array()] for various buffers. This function just return the status of the inits, however it would be helpful if something as below is printed. "Failed to allocate for buffer " FIX === We can either do this change in all the sub-init functions or we can do it in the callee function pfs_malloc_array(). Following the 2nd approach and printing the warning now. --- storage/perfschema/pfs_global.cc | 19 ++++++++++++++++--- .../perfschema/unittest/pfs_server_stubs.cc | 7 ++++++- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/storage/perfschema/pfs_global.cc b/storage/perfschema/pfs_global.cc index 6ffc4a38ef78..9bec27d310ed 100644 --- a/storage/perfschema/pfs_global.cc +++ b/storage/perfschema/pfs_global.cc @@ -1,4 +1,5 @@ -/* Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2008, 2017, Oracle and/or its affiliates. All rights + reserved. 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 @@ -22,6 +23,7 @@ #include "my_sys.h" #include "pfs_global.h" #include "pfs_builtin_memory.h" +#include "log.h" #include #include @@ -129,11 +131,23 @@ void *pfs_malloc_array(PFS_builtin_memory_class *klass, size_t n, size_t size, m DBUG_ASSERT(klass != NULL); DBUG_ASSERT(n > 0); DBUG_ASSERT(size > 0); + void *ptr= NULL; size_t array_size= n * size; /* Check for overflow before allocating. */ if (is_overflow(array_size, n, size)) + { + sql_print_warning("Failed to allocate memory for %zu chunks each of size " + "%zu for buffer '%s' due to overflow", n, size, + klass->m_class.m_name); return NULL; - return pfs_malloc(klass, array_size, flags); + } + + if(NULL == (ptr= pfs_malloc(klass, array_size, flags))) + { + sql_print_warning("Failed to allocate %zu bytes for buffer '%s' due to " + "out-of-memory", array_size, klass->m_class.m_name); + } + return ptr; } /** @@ -242,4 +256,3 @@ uint pfs_get_socket_address(char *host, /* Return actual IP address string length */ return (strlen((const char*)host)); } - diff --git a/storage/perfschema/unittest/pfs_server_stubs.cc b/storage/perfschema/unittest/pfs_server_stubs.cc index 54c48009a7ed..fbdd2dbeb96f 100644 --- a/storage/perfschema/unittest/pfs_server_stubs.cc +++ b/storage/perfschema/unittest/pfs_server_stubs.cc @@ -1,4 +1,5 @@ -/* Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2010, 2017, Oracle and/or its affiliates. All rights + reserved. 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 @@ -39,3 +40,7 @@ void reset_status_vars() { } +void sql_print_warning(const char *format, ...) +{ + /* Do not pollute the unit test output with annoying messages. */ +} From 9f850ac9bf222dbac3ae4403442dfa9fe08b226e Mon Sep 17 00:00:00 2001 From: Sujatha Sivakumar Date: Wed, 30 Aug 2017 15:20:44 +0530 Subject: [PATCH 0019/1221] Bug#25940184: P_S TRANSACTION INSTRUMENTATION DOES NOT WORK PROPERLY FOR XA ON SLAVE Problem: ======= When transaction instrumentation and consumers are enabled, the events_transaction_% tables can be used to find the XA xid components in a much cleaner way than using XA RECOVER. However this does not work correctly on the replication slave as the XA STATE is COMMITTED even if it should only be PREPARED. Analysis: ========= On master an XA transaction is written to the binary log in two parts. When XA PREPARE is issued, the first part of the transaction up to XA PREPARE is written. When XA COMMIT or XA ROLLBACK is issued, a second part of the transaction is written to the binlog. Hence in binary log few more transactions can be present in between XA PREPARE and XA COMMIT. On slave server applier thread will be applying all these transactions. Each active transaction will register itself with performance schema so that its progress status can be tracked in performance schema table. For each transaction 'begin' and 'commit', there is an internal 'start_transaction' and 'end_transaction' that will happen within performance schema. When applier thread starts executing 'XA PREPARE' it registers itself with performance schema and the transaction state will be 'XA_PREPARE'. At the end of the transaction applier invokes 'applier_reset_xa_trans' to do the cleanup for active XA transaction. Which intern invokes 'MYSQL_COMMIT_TRANSACTION' which will set the XA_STATE to 'COMMITTED' in performance schema. At this point if users execute XA RECOVER on slave the XA_STATE will be shown as 'PREPARED' but performance schema table will show it as 'COMMITTED'. Fix: === During the execution of 'XA PREPARE' don't commit the transaction in PSI context. Leave the PFS state as it is. Clear the current thread transaction PSI specific pointer as NULL. With this current transaction will exit cleanly without altering the XA_STATE. 'XA COMMIT' is not a regular transaction. But it has all the required XA transaction specific information to start a transaction in PSI context alone. Hence start a new transaction in PSI context by executing MYSQL_START_TRANSACTION. Initialize the new PSI transaction with XA details. This process will also ensure that current GTID is updated in PSI transaction. Then call 'MYSQL_COMMIT_TRANSACTION'. This will provide appropriate XA status for 'XA COMMIT' statement. --- .../rpl_perfschema_applier_xa_status.test | 78 ++++++++++ ...l_gtid_perfschema_applier_xa_status.result | 135 +++++++++++++++++ ..._perfschema_applier_xa_status_check.result | 137 ++++++++++++++++++ ...rpl_gtid_perfschema_applier_xa_status.test | 83 +++++++++++ ...pl_perfschema_applier_xa_status_check.test | 86 +++++++++++ sql/xa.cc | 32 +++- 6 files changed, 550 insertions(+), 1 deletion(-) create mode 100644 mysql-test/extra/rpl_tests/rpl_perfschema_applier_xa_status.test create mode 100644 mysql-test/suite/rpl/r/rpl_gtid_perfschema_applier_xa_status.result create mode 100644 mysql-test/suite/rpl/r/rpl_perfschema_applier_xa_status_check.result create mode 100644 mysql-test/suite/rpl/t/rpl_gtid_perfschema_applier_xa_status.test create mode 100644 mysql-test/suite/rpl/t/rpl_perfschema_applier_xa_status_check.test diff --git a/mysql-test/extra/rpl_tests/rpl_perfschema_applier_xa_status.test b/mysql-test/extra/rpl_tests/rpl_perfschema_applier_xa_status.test new file mode 100644 index 000000000000..0a3239d3d192 --- /dev/null +++ b/mysql-test/extra/rpl_tests/rpl_perfschema_applier_xa_status.test @@ -0,0 +1,78 @@ +# ==== Purpose ==== +# +# Verify that on slave server, appropriate XA_STATE is reported in Performance +# Schema tables for XA transactions. +# +# ==== Implementation ==== +# +# 1) On Master start one XA transaction named 'xatest' and set the state to +# 'PREPARED'. +# 2) On slave wait till the applier thread applies the 'XA PREPARE' statement. +# 3) Verify that the XA_STATE is reported as 'PREPARED' in performance schema +# table. +# 4) On Master COMMIT the XA transaction. +# 5) On slave verify that the XA_STATE is reported as 'COMMITTED' +# +# ==== References ==== +# +# Bug#25940184: P_S TRANSACTION INSTRUMENTATION DOES NOT WORK PROPERLY FOR +# XA ON SLAVE +--source include/rpl_connection_slave.inc +TRUNCATE TABLE performance_schema.events_transactions_current; + +--source include/rpl_connection_master.inc +--let $master_uuid= query_get_value(SELECT @@SERVER_UUID, @@SERVER_UUID, 1) +CREATE TABLE t ( f INT) ENGINE=INNODB; +XA START 'xatest'; +INSERT INTO t VALUES (10); +XA END 'xatest'; +XA PREPARE 'xatest'; +--let $master_pos= query_get_value(SHOW MASTER STATUS, Position, 1) +--let $master_file= query_get_value(SHOW MASTER STATUS, File, 1) + +--source include/rpl_connection_slave.inc +--echo # Wait until SQL thread reaches desired master binlog position +--let $slave_param= Relay_Master_Log_File +--let $slave_param_value= $master_file +--let $slave_param_comparison= = +--source include/wait_for_slave_param.inc + +--let $slave_param= Exec_Master_Log_Pos +--let $slave_param_value= $master_pos +--let $slave_param_comparison= >= +--source include/wait_for_slave_param.inc + +XA RECOVER; +--echo #################################################################### +--echo # Asserting XA_STATE is PREPARED on Slave +--echo #################################################################### +--let $assert_text= Verify that XA_STATE is set PREPARED. +--let $assert_cond=count(*)=1 FROM performance_schema.events_transactions_current WHERE XID_GTRID=\'xatest\' AND XA_STATE=\'PREPARED\' +--source include/assert.inc + +--source include/rpl_connection_master.inc +XA COMMIT 'xatest'; +--source include/sync_slave_sql_with_master.inc +XA RECOVER; +--echo #################################################################### +--echo # Asserting XA_STATE is COMMITTED on Slave +--echo #################################################################### +--let $assert_text= Verify that XA_STATE is set COMMITTED. +--let $assert_cond=count(*)=1 FROM performance_schema.events_transactions_current WHERE XID_GTRID=\'xatest\' AND XA_STATE=\'COMMITTED\' +--source include/assert.inc + +if ($gtid_mode == ON) +{ + --let $gno_0 = 3 + --let $expected_gtid = $master_uuid:$gno_0 + --let $assert_text= Expected gtid is MASTER_UUID:$gno_0 + --let $assert_cond= "[SELECT GTID FROM performance_schema.events_transactions_current where XID_GTRID=\'xatest\']" = "$expected_gtid" + --source include/assert.inc +} + +--let $diff_tables=master:t,slave:t +--source include/diff_tables.inc + +--source include/rpl_connection_master.inc +DROP TABLE t; +--source include/sync_slave_sql_with_master.inc diff --git a/mysql-test/suite/rpl/r/rpl_gtid_perfschema_applier_xa_status.result b/mysql-test/suite/rpl/r/rpl_gtid_perfschema_applier_xa_status.result new file mode 100644 index 000000000000..af1403e803a1 --- /dev/null +++ b/mysql-test/suite/rpl/r/rpl_gtid_perfschema_applier_xa_status.result @@ -0,0 +1,135 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +[connection slave] +TRUNCATE TABLE performance_schema.events_transactions_current; +[connection master] +CREATE TABLE t ( f INT) ENGINE=INNODB; +XA START 'xatest'; +INSERT INTO t VALUES (10); +XA END 'xatest'; +XA PREPARE 'xatest'; +[connection slave] +# Wait until SQL thread reaches desired master binlog position +include/wait_for_slave_param.inc [Relay_Master_Log_File] +include/wait_for_slave_param.inc [Exec_Master_Log_Pos] +XA RECOVER; +formatID gtrid_length bqual_length data +1 6 0 xatest +#################################################################### +# Asserting XA_STATE is PREPARED on Slave +#################################################################### +include/assert.inc [Verify that XA_STATE is set PREPARED.] +[connection master] +XA COMMIT 'xatest'; +include/sync_slave_sql_with_master.inc +XA RECOVER; +formatID gtrid_length bqual_length data +#################################################################### +# Asserting XA_STATE is COMMITTED on Slave +#################################################################### +include/assert.inc [Verify that XA_STATE is set COMMITTED.] +include/assert.inc [Expected gtid is MASTER_UUID:3] +include/diff_tables.inc [master:t,slave:t] +[connection master] +DROP TABLE t; +include/sync_slave_sql_with_master.inc +include/rpl_reset.inc +#################################################################### +# Test Case 2: Enable Multithreaded Slave with slave_parallel_type as +# DATABASE. Verify that slave displays appropriate XA_STATE in +# performance schema table, post XA PREPARE AND XA COMMIT command +# execution. +#################################################################### +[connection slave] +SET @save_slave_parallel_workers=@@global.slave_parallel_workers; +SET @slave_parallel_type=@@global.slave_parallel_type; +include/stop_slave.inc +SET GLOBAL slave_parallel_workers=4; +SET GLOBAL slave_parallel_type='DATABASE'; +include/start_slave.inc +[connection slave] +TRUNCATE TABLE performance_schema.events_transactions_current; +[connection master] +CREATE TABLE t ( f INT) ENGINE=INNODB; +XA START 'xatest'; +INSERT INTO t VALUES (10); +XA END 'xatest'; +XA PREPARE 'xatest'; +[connection slave] +# Wait until SQL thread reaches desired master binlog position +include/wait_for_slave_param.inc [Relay_Master_Log_File] +include/wait_for_slave_param.inc [Exec_Master_Log_Pos] +XA RECOVER; +formatID gtrid_length bqual_length data +1 6 0 xatest +#################################################################### +# Asserting XA_STATE is PREPARED on Slave +#################################################################### +include/assert.inc [Verify that XA_STATE is set PREPARED.] +[connection master] +XA COMMIT 'xatest'; +include/sync_slave_sql_with_master.inc +XA RECOVER; +formatID gtrid_length bqual_length data +#################################################################### +# Asserting XA_STATE is COMMITTED on Slave +#################################################################### +include/assert.inc [Verify that XA_STATE is set COMMITTED.] +include/assert.inc [Expected gtid is MASTER_UUID:3] +include/diff_tables.inc [master:t,slave:t] +[connection master] +DROP TABLE t; +include/sync_slave_sql_with_master.inc +include/rpl_reset.inc +#################################################################### +# Test Case 3: Enable Multithreaded Slave with slave_parallel_type as +# LOGICAL_CLOCK. Verify that slave displays appropriate XA_STATE in +# performance schema table, post XA PREPARE AND XA COMMIT command +# execution. +#################################################################### +include/stop_slave.inc +SET GLOBAL slave_parallel_workers=4; +SET GLOBAL slave_parallel_type='LOGICAL_CLOCK'; +include/start_slave.inc +[connection slave] +TRUNCATE TABLE performance_schema.events_transactions_current; +[connection master] +CREATE TABLE t ( f INT) ENGINE=INNODB; +XA START 'xatest'; +INSERT INTO t VALUES (10); +XA END 'xatest'; +XA PREPARE 'xatest'; +[connection slave] +# Wait until SQL thread reaches desired master binlog position +include/wait_for_slave_param.inc [Relay_Master_Log_File] +include/wait_for_slave_param.inc [Exec_Master_Log_Pos] +XA RECOVER; +formatID gtrid_length bqual_length data +1 6 0 xatest +#################################################################### +# Asserting XA_STATE is PREPARED on Slave +#################################################################### +include/assert.inc [Verify that XA_STATE is set PREPARED.] +[connection master] +XA COMMIT 'xatest'; +include/sync_slave_sql_with_master.inc +XA RECOVER; +formatID gtrid_length bqual_length data +#################################################################### +# Asserting XA_STATE is COMMITTED on Slave +#################################################################### +include/assert.inc [Verify that XA_STATE is set COMMITTED.] +include/assert.inc [Expected gtid is MASTER_UUID:3] +include/diff_tables.inc [master:t,slave:t] +[connection master] +DROP TABLE t; +include/sync_slave_sql_with_master.inc +[connection slave] +include/stop_slave.inc +set @@global.slave_parallel_workers= @save_slave_parallel_workers; +set @@global.slave_parallel_type= @slave_parallel_type; +include/start_slave.inc +include/rpl_end.inc diff --git a/mysql-test/suite/rpl/r/rpl_perfschema_applier_xa_status_check.result b/mysql-test/suite/rpl/r/rpl_perfschema_applier_xa_status_check.result new file mode 100644 index 000000000000..aec6b26dd000 --- /dev/null +++ b/mysql-test/suite/rpl/r/rpl_perfschema_applier_xa_status_check.result @@ -0,0 +1,137 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +#################################################################### +# Test Case 1: Simple MASTER-SLAVE setup. +# Verify that slave displays appropriate XA_STATE in performance +# schema table, post XA PREPARE AND XA COMMIT command execution. +#################################################################### +[connection slave] +TRUNCATE TABLE performance_schema.events_transactions_current; +[connection master] +CREATE TABLE t ( f INT) ENGINE=INNODB; +XA START 'xatest'; +INSERT INTO t VALUES (10); +XA END 'xatest'; +XA PREPARE 'xatest'; +[connection slave] +# Wait until SQL thread reaches desired master binlog position +include/wait_for_slave_param.inc [Relay_Master_Log_File] +include/wait_for_slave_param.inc [Exec_Master_Log_Pos] +XA RECOVER; +formatID gtrid_length bqual_length data +1 6 0 xatest +#################################################################### +# Asserting XA_STATE is PREPARED on Slave +#################################################################### +include/assert.inc [Verify that XA_STATE is set PREPARED.] +[connection master] +XA COMMIT 'xatest'; +include/sync_slave_sql_with_master.inc +XA RECOVER; +formatID gtrid_length bqual_length data +#################################################################### +# Asserting XA_STATE is COMMITTED on Slave +#################################################################### +include/assert.inc [Verify that XA_STATE is set COMMITTED.] +include/diff_tables.inc [master:t,slave:t] +[connection master] +DROP TABLE t; +include/sync_slave_sql_with_master.inc +include/rpl_reset.inc +#################################################################### +# Test Case 2: Enable Multithreaded Slave with slave_parallel_type as +# DATABASE. Verify that slave displays appropriate XA_STATE in +# performance schema table, post XA PREPARE AND XA COMMIT command +# execution. +#################################################################### +[connection slave] +SET @save_slave_parallel_workers=@@global.slave_parallel_workers; +SET @slave_parallel_type=@@global.slave_parallel_type; +include/stop_slave.inc +SET GLOBAL slave_parallel_workers=4; +SET GLOBAL slave_parallel_type='DATABASE'; +include/start_slave.inc +[connection slave] +TRUNCATE TABLE performance_schema.events_transactions_current; +[connection master] +CREATE TABLE t ( f INT) ENGINE=INNODB; +XA START 'xatest'; +INSERT INTO t VALUES (10); +XA END 'xatest'; +XA PREPARE 'xatest'; +[connection slave] +# Wait until SQL thread reaches desired master binlog position +include/wait_for_slave_param.inc [Relay_Master_Log_File] +include/wait_for_slave_param.inc [Exec_Master_Log_Pos] +XA RECOVER; +formatID gtrid_length bqual_length data +1 6 0 xatest +#################################################################### +# Asserting XA_STATE is PREPARED on Slave +#################################################################### +include/assert.inc [Verify that XA_STATE is set PREPARED.] +[connection master] +XA COMMIT 'xatest'; +include/sync_slave_sql_with_master.inc +XA RECOVER; +formatID gtrid_length bqual_length data +#################################################################### +# Asserting XA_STATE is COMMITTED on Slave +#################################################################### +include/assert.inc [Verify that XA_STATE is set COMMITTED.] +include/diff_tables.inc [master:t,slave:t] +[connection master] +DROP TABLE t; +include/sync_slave_sql_with_master.inc +include/rpl_reset.inc +#################################################################### +# Test Case 3: Enable Multithreaded Slave with slave_parallel_type as +# LOGICAL_CLOCK. Verify that slave displays appropriate XA_STATE in +# performance schema table, post XA PREPARE AND XA COMMIT command +# execution. +#################################################################### +include/stop_slave.inc +SET GLOBAL slave_parallel_workers=4; +SET GLOBAL slave_parallel_type='LOGICAL_CLOCK'; +include/start_slave.inc +[connection slave] +TRUNCATE TABLE performance_schema.events_transactions_current; +[connection master] +CREATE TABLE t ( f INT) ENGINE=INNODB; +XA START 'xatest'; +INSERT INTO t VALUES (10); +XA END 'xatest'; +XA PREPARE 'xatest'; +[connection slave] +# Wait until SQL thread reaches desired master binlog position +include/wait_for_slave_param.inc [Relay_Master_Log_File] +include/wait_for_slave_param.inc [Exec_Master_Log_Pos] +XA RECOVER; +formatID gtrid_length bqual_length data +1 6 0 xatest +#################################################################### +# Asserting XA_STATE is PREPARED on Slave +#################################################################### +include/assert.inc [Verify that XA_STATE is set PREPARED.] +[connection master] +XA COMMIT 'xatest'; +include/sync_slave_sql_with_master.inc +XA RECOVER; +formatID gtrid_length bqual_length data +#################################################################### +# Asserting XA_STATE is COMMITTED on Slave +#################################################################### +include/assert.inc [Verify that XA_STATE is set COMMITTED.] +include/diff_tables.inc [master:t,slave:t] +[connection master] +DROP TABLE t; +include/sync_slave_sql_with_master.inc +[connection slave] +include/stop_slave.inc +set @@global.slave_parallel_workers= @save_slave_parallel_workers; +set @@global.slave_parallel_type= @slave_parallel_type; +include/start_slave.inc +include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_gtid_perfschema_applier_xa_status.test b/mysql-test/suite/rpl/t/rpl_gtid_perfschema_applier_xa_status.test new file mode 100644 index 000000000000..c2fbee5edda2 --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_gtid_perfschema_applier_xa_status.test @@ -0,0 +1,83 @@ +# ==== Purpose ==== +# +# Verify that on slave server, appropriate XA_STATE is reported in Performance +# Schema tables for XA transactions. +# +# ==== Implementation ==== +# +# 1) On Master start one XA transaction named 'xatest' and set the state to +# 'PREPARED'. +# 2) On slave wait till the applier thread applies the 'XA PREPARE' statement. +# 3) Verify that the XA_STATE is reported as 'PREPARED' in performance schema +# table. +# 4) On Master COMMIT the XA transaction. +# 5) On slave verify that the XA_STATE is reported as 'COMMITTED' +# 6) Ensure that XA COMMIT statment's GTID is the same as that of master. +# +# ==== References ==== +# +# Bug#25940184: P_S TRANSACTION INSTRUMENTATION DOES NOT WORK PROPERLY FOR +# XA ON SLAVE + +--source include/have_slave_repository_type_file.inc +--source include/have_perfschema.inc +# Test script is independent of binlog format. +--source include/have_binlog_format_mixed.inc +--source include/have_gtid.inc +--source include/master-slave.inc + +# Verify +--source extra/rpl_tests/rpl_perfschema_applier_xa_status.test + +# Cleanup +--source include/rpl_reset.inc + +--echo #################################################################### +--echo # Test Case 2: Enable Multithreaded Slave with slave_parallel_type as +--echo # DATABASE. Verify that slave displays appropriate XA_STATE in +--echo # performance schema table, post XA PREPARE AND XA COMMIT command +--echo # execution. +--echo #################################################################### +--source include/rpl_connection_slave.inc + +# Save existing settings. +SET @save_slave_parallel_workers=@@global.slave_parallel_workers; +SET @slave_parallel_type=@@global.slave_parallel_type; + +# Enable MTS +--source include/stop_slave.inc +SET GLOBAL slave_parallel_workers=4; +SET GLOBAL slave_parallel_type='DATABASE'; +--source include/start_slave.inc + +# Verify +--source extra/rpl_tests/rpl_perfschema_applier_xa_status.test + +# Cleanup +--source include/rpl_reset.inc + +--echo #################################################################### +--echo # Test Case 3: Enable Multithreaded Slave with slave_parallel_type as +--echo # LOGICAL_CLOCK. Verify that slave displays appropriate XA_STATE in +--echo # performance schema table, post XA PREPARE AND XA COMMIT command +--echo # execution. +--echo #################################################################### + +# Enable MTS +--source include/stop_slave.inc +SET GLOBAL slave_parallel_workers=4; +SET GLOBAL slave_parallel_type='LOGICAL_CLOCK'; +--source include/start_slave.inc + +# Verify +--source extra/rpl_tests/rpl_perfschema_applier_xa_status.test + +--source include/rpl_connection_slave.inc + +# Cleanup +--source include/stop_slave.inc +set @@global.slave_parallel_workers= @save_slave_parallel_workers; +set @@global.slave_parallel_type= @slave_parallel_type; +--source include/start_slave.inc + +--source include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_perfschema_applier_xa_status_check.test b/mysql-test/suite/rpl/t/rpl_perfschema_applier_xa_status_check.test new file mode 100644 index 000000000000..9605e7653082 --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_perfschema_applier_xa_status_check.test @@ -0,0 +1,86 @@ +# ==== Purpose ==== +# +# Verify that on slave server, appropriate XA_STATE is reported in Performance +# Schema tables for XA transactions. +# +# ==== Implementation ==== +# +# 1) On Master start one XA transaction named 'xatest' and set the state to +# 'PREPARED'. +# 2) On slave wait till the applier thread applies the 'XA PREPARE' statement. +# 3) Verify that the XA_STATE is reported as 'PREPARED' in performance schema +# table. +# 4) On Master COMMIT the XA transaction. +# 5) On slave verify that the XA_STATE is reported as 'COMMITTED' +# +# ==== References ==== +# +# Bug#25940184: P_S TRANSACTION INSTRUMENTATION DOES NOT WORK PROPERLY FOR +# XA ON SLAVE + +--source include/have_slave_repository_type_file.inc +--source include/have_perfschema.inc +# Test script is independent of binlog format. +--source include/have_binlog_format_mixed.inc +# Separate test script exists for gtid enabled scenario named +# rpl_gtid_perfschema_applier_xa_status.test +--source include/not_gtid_enabled.inc +--source include/master-slave.inc + +--echo #################################################################### +--echo # Test Case 1: Simple MASTER-SLAVE setup. +--echo # Verify that slave displays appropriate XA_STATE in performance +--echo # schema table, post XA PREPARE AND XA COMMIT command execution. +--echo #################################################################### +--source extra/rpl_tests/rpl_perfschema_applier_xa_status.test +--source include/rpl_reset.inc + +--echo #################################################################### +--echo # Test Case 2: Enable Multithreaded Slave with slave_parallel_type as +--echo # DATABASE. Verify that slave displays appropriate XA_STATE in +--echo # performance schema table, post XA PREPARE AND XA COMMIT command +--echo # execution. +--echo #################################################################### +--source include/rpl_connection_slave.inc + +# Save existing settings. +SET @save_slave_parallel_workers=@@global.slave_parallel_workers; +SET @slave_parallel_type=@@global.slave_parallel_type; + +# Enable MTS +--source include/stop_slave.inc +SET GLOBAL slave_parallel_workers=4; +SET GLOBAL slave_parallel_type='DATABASE'; +--source include/start_slave.inc + +# Verify +--source extra/rpl_tests/rpl_perfschema_applier_xa_status.test + +# Cleanup +--source include/rpl_reset.inc + +--echo #################################################################### +--echo # Test Case 3: Enable Multithreaded Slave with slave_parallel_type as +--echo # LOGICAL_CLOCK. Verify that slave displays appropriate XA_STATE in +--echo # performance schema table, post XA PREPARE AND XA COMMIT command +--echo # execution. +--echo #################################################################### + +# Enable MTS +--source include/stop_slave.inc +SET GLOBAL slave_parallel_workers=4; +SET GLOBAL slave_parallel_type='LOGICAL_CLOCK'; +--source include/start_slave.inc + +# Verify +--source extra/rpl_tests/rpl_perfschema_applier_xa_status.test + +--source include/rpl_connection_slave.inc + +# Cleanup +--source include/stop_slave.inc +set @@global.slave_parallel_workers= @save_slave_parallel_workers; +set @@global.slave_parallel_type= @slave_parallel_type; +--source include/start_slave.inc + +--source include/rpl_end.inc diff --git a/sql/xa.cc b/sql/xa.cc index 760d88b82493..c091ba76a7b4 100644 --- a/sql/xa.cc +++ b/sql/xa.cc @@ -304,6 +304,22 @@ bool Sql_cmd_xa_commit::trans_xa_commit(THD *thd) */ res= xs->xa_trans_rolled_back(); +#ifdef HAVE_PSI_TRANSACTION_INTERFACE + /* + If the original transaction is not rolled back then initiate a new PSI + transaction to update performance schema related information. + */ + if (!res) + { + thd->m_transaction_psi= MYSQL_START_TRANSACTION(&thd->m_transaction_state, + NULL, NULL, thd->tx_isolation, + thd->tx_read_only, false); + gtid_set_performance_schema_values(thd); + MYSQL_SET_TRANSACTION_XID(thd->m_transaction_psi, + (const void *)xs->get_xid(), + (int)xs->get_state()); + } +#endif /* xs' is_binlogged() is passed through xid_state's member to low-level logging routines for deciding how to log. The same applies to @@ -348,6 +364,21 @@ bool Sql_cmd_xa_commit::trans_xa_commit(THD *thd) ha_commit_or_rollback_by_xid(thd, m_xid, !res); xid_state->unset_binlogged(); +#ifdef HAVE_PSI_TRANSACTION_INTERFACE + if (!res) + { + if (thd->m_transaction_psi) + { + /* + Set the COMMITTED state in PSI context at the end of committing the + XA transaction. + */ + MYSQL_COMMIT_TRANSACTION(thd->m_transaction_psi); + thd->m_transaction_psi= NULL; + } + } +#endif + transaction_cache_delete(transaction); gtid_state_commit_or_rollback(thd, need_clear_owned_gtid, !gtid_error); DBUG_RETURN(res); @@ -1302,7 +1333,6 @@ bool applier_reset_xa_trans(THD *thd) trn_ctx->set_no_2pc(Transaction_ctx::SESSION, false); trn_ctx->cleanup(); #ifdef HAVE_PSI_TRANSACTION_INTERFACE - MYSQL_COMMIT_TRANSACTION(thd->m_transaction_psi); thd->m_transaction_psi= NULL; #endif thd->mdl_context.release_transactional_locks(); From ec062ee4cc6d445460f82022940cd33352182b41 Mon Sep 17 00:00:00 2001 From: Aakanksha Verma Date: Wed, 30 Aug 2017 17:51:30 +0530 Subject: [PATCH 0020/1221] --- mysql-test/r/partition_innodb.result | 22 ++++++++++++++++++++++ mysql-test/t/partition_innodb.test | 24 ++++++++++++++++++++++++ sql/ha_partition.cc | 9 ++++++++- 3 files changed, 54 insertions(+), 1 deletion(-) diff --git a/mysql-test/r/partition_innodb.result b/mysql-test/r/partition_innodb.result index c50c4e2e8ce8..6595bf1f6b66 100644 --- a/mysql-test/r/partition_innodb.result +++ b/mysql-test/r/partition_innodb.result @@ -875,3 +875,25 @@ t1 CREATE TABLE `t1` ( PARTITION p1 VALUES IN (1) DATA DIRECTORY = 'MYSQL_TMP_DIR/temp_dir' ENGINE = InnoDB) */ t1#p#p1.ibd DROP TABLE t1; + +Bug #26034430 ASSERTION `PART_REC_BUF_PTR' FAILED. + + +CREATE TABLE t1 ( a INT NOT NULL, b INT NOT NULL, c INT NOT NULL, PRIMARY KEY(a,b)) PARTITION BY RANGE (a)(PARTITION x1 VALUES LESS THAN (1)); +SELECT * FROM t1 WHERE (a = 1 and b = 1 and c = 'b') OR (a > 2) ORDER BY a DESC; +a b c +CREATE TABLE t(id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, dttm DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, msg TEXT,PRIMARY KEY (id,dttm))ENGINE=INNODB DEFAULT CHARSET=UTF8MB4 ROW_FORMAT=DYNAMIC PARTITION BY RANGE COLUMNS(dttm) (PARTITION pf_201612 VALUES LESS THAN ('20170101') ENGINE = INNODB); +Warnings: +Warning 1478 InnoDB: ROW_FORMAT=DYNAMIC requires innodb_file_format > Antelope. +Warning 1478 InnoDB: assuming ROW_FORMAT=COMPACT. +SELECT * FROM t WHERE dttm > '2017-01-19' ORDER BY id DESC; +id dttm msg +CREATE TABLE t2(a INT,KEY USING btree(a)) ENGINE=HEAP; +ALTER TABLE t2 ENGINE=HEAP PARTITION BY key(a)(partition p0,partition p1); +INSERT INTO t2 VALUES(0x38),(0x39),(0x3A),(0x3B),(0x3C),(0x3D),(0x3E),(0x3F); +SELECT * FROM t2 ORDER BY a DESC LIMIT 3; +a +63 +62 +61 +DROP TABLE t,t1,t2; diff --git a/mysql-test/t/partition_innodb.test b/mysql-test/t/partition_innodb.test index 8c5f9adfe753..30a037bd02c5 100644 --- a/mysql-test/t/partition_innodb.test +++ b/mysql-test/t/partition_innodb.test @@ -939,3 +939,27 @@ DROP TABLE t1; --rmdir $MYSQL_TMP_DIR/temp_dir/test --rmdir $MYSQL_TMP_DIR/temp_dir + + +--echo +--echo Bug #26034430 ASSERTION `PART_REC_BUF_PTR' FAILED. +--echo +--echo + +CREATE TABLE t1 ( a INT NOT NULL, b INT NOT NULL, c INT NOT NULL, PRIMARY KEY(a,b)) PARTITION BY RANGE (a)(PARTITION x1 VALUES LESS THAN (1)); + +SELECT * FROM t1 WHERE (a = 1 and b = 1 and c = 'b') OR (a > 2) ORDER BY a DESC; + +CREATE TABLE t(id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, dttm DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, msg TEXT,PRIMARY KEY (id,dttm))ENGINE=INNODB DEFAULT CHARSET=UTF8MB4 ROW_FORMAT=DYNAMIC PARTITION BY RANGE COLUMNS(dttm) (PARTITION pf_201612 VALUES LESS THAN ('20170101') ENGINE = INNODB); + +SELECT * FROM t WHERE dttm > '2017-01-19' ORDER BY id DESC; + +CREATE TABLE t2(a INT,KEY USING btree(a)) ENGINE=HEAP; + +ALTER TABLE t2 ENGINE=HEAP PARTITION BY key(a)(partition p0,partition p1); + +INSERT INTO t2 VALUES(0x38),(0x39),(0x3A),(0x3B),(0x3C),(0x3D),(0x3E),(0x3F); + +SELECT * FROM t2 ORDER BY a DESC LIMIT 3; + +DROP TABLE t,t1,t2; diff --git a/sql/ha_partition.cc b/sql/ha_partition.cc index 1bdf160b422b..9a04ef041b2d 100644 --- a/sql/ha_partition.cc +++ b/sql/ha_partition.cc @@ -5415,9 +5415,16 @@ int ha_partition::index_first(uchar * buf) int ha_partition::index_last(uchar * buf) { DBUG_ENTER("ha_partition::index_last"); - + int error = HA_ERR_END_OF_FILE; + uint part_id = bitmap_get_first_set(&(m_part_info->read_partitions)); + if (part_id == MY_BIT_NONE) + { + /* No partition to scan. */ + DBUG_RETURN(error); + } m_index_scan_type= partition_index_last; DBUG_RETURN(common_first_last(buf)); + } /* From 4a8222412d11d93b78debb5012cee1026ea098db Mon Sep 17 00:00:00 2001 From: Piotr Obrzut Date: Mon, 28 Aug 2017 12:30:21 +0200 Subject: [PATCH 0021/1221] Bug #26501092 mysql server installer cannot detect that visual c++ 2010 is installed. --- packaging/WiX/mysql_server.wxs.in | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packaging/WiX/mysql_server.wxs.in b/packaging/WiX/mysql_server.wxs.in index 44849323e8ac..7b3cffb5a38e 100644 --- a/packaging/WiX/mysql_server.wxs.in +++ b/packaging/WiX/mysql_server.wxs.in @@ -79,8 +79,9 @@ @@ -90,8 +91,9 @@ From 722acd166087b15273bc9c0cd53f0018687a0847 Mon Sep 17 00:00:00 2001 From: Piotr Obrzut Date: Mon, 28 Aug 2017 12:30:21 +0200 Subject: [PATCH 0022/1221] Bug #26501092 mysql server installer cannot detect that visual c++ 2010 is installed. --- packaging/WiX/mysql_server.wxs.in | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packaging/WiX/mysql_server.wxs.in b/packaging/WiX/mysql_server.wxs.in index 44849323e8ac..7b3cffb5a38e 100644 --- a/packaging/WiX/mysql_server.wxs.in +++ b/packaging/WiX/mysql_server.wxs.in @@ -79,8 +79,9 @@ @@ -90,8 +91,9 @@ From e6c7ea6d1989623fee42022467de4a663439012e Mon Sep 17 00:00:00 2001 From: Georgi Kodinov Date: Wed, 30 Aug 2017 16:01:53 +0300 Subject: [PATCH 0023/1221] WL#8891: addendum 2: removed an incorrect test that was assuming that AUDIT_GENERAL_ERROR is called in a loop until the stack is depleted. We're not allowing one to abort it now, so the test is irrelevant. --- mysql-test/r/audit_plugin_bugs.result | 12 ------------ mysql-test/t/audit_plugin_bugs.test | 20 +------------------- 2 files changed, 1 insertion(+), 31 deletions(-) diff --git a/mysql-test/r/audit_plugin_bugs.result b/mysql-test/r/audit_plugin_bugs.result index e7eef79b6432..fe7948b7da71 100644 --- a/mysql-test/r/audit_plugin_bugs.result +++ b/mysql-test/r/audit_plugin_bugs.result @@ -30,18 +30,6 @@ SELECT @@null_audit_event_order_check_consume_ignore_count; SET @@GLOBAL.null_audit_event_order_check= NULL; SET @@GLOBAL.null_audit_abort_message= NULL; SET @@GLOBAL.null_audit_event_order_check_consume_ignore_count= 0; -# test -SET @@null_audit_event_order_check= "MYSQL_AUDIT_GENERAL_ERROR;;ABORT_RET"; -SET @@null_audit_abort_message= "Abort message."; -# Try to enter error state infinitely. my_message calls will overrun the stack frame. -SET @@null_audit_event_order_check_consume_ignore_count= 10000; -# Must not crash -SELECT 1 FROM mysql.fictional_table; -ERROR 42S02: Table 'mysql.fictional_table' doesn't exist -SELECT @@null_audit_event_order_check_consume_ignore_count; -@@null_audit_event_order_check_consume_ignore_count -9998 -# Clean up End of 5.7 tests # cleanup UNINSTALL PLUGIN null_audit; diff --git a/mysql-test/t/audit_plugin_bugs.test b/mysql-test/t/audit_plugin_bugs.test index 2934debc45ac..b7e4e9e9ed08 100644 --- a/mysql-test/t/audit_plugin_bugs.test +++ b/mysql-test/t/audit_plugin_bugs.test @@ -92,28 +92,10 @@ SET @@GLOBAL.null_audit_abort_message= NULL; # Let's hope 10000 calls will overrun the stack frame SET @@GLOBAL.null_audit_event_order_check_consume_ignore_count= 0; ---echo # test -connect(user1_con,localhost,root,); - -SET @@null_audit_event_order_check= "MYSQL_AUDIT_GENERAL_ERROR;;ABORT_RET"; -SET @@null_audit_abort_message= "Abort message."; ---echo # Try to enter error state infinitely. my_message calls will overrun the stack frame. -SET @@null_audit_event_order_check_consume_ignore_count= 10000; - ---echo # Must not crash ---replace_regex /[0-9]+ byte[s]?// ---error ER_NO_SUCH_TABLE -SELECT 1 FROM mysql.fictional_table; -SELECT @@null_audit_event_order_check_consume_ignore_count; - ---echo # Clean up -connection default; -disconnect user1_con; - # Wait till we reached the initial number of concurrent sessions --source include/wait_until_count_sessions.inc --echo End of 5.7 tests --echo # cleanup -UNINSTALL PLUGIN null_audit; \ No newline at end of file +UNINSTALL PLUGIN null_audit; From cfb3fcc8e558cf146453ea031b5c4ba261f04361 Mon Sep 17 00:00:00 2001 From: Karthik Kamath Date: Wed, 30 Aug 2017 18:45:03 +0530 Subject: [PATCH 0024/1221] Bug#18432770: SYS_VARS.LOG_SLOW_ADMIN_STATEMENTS_FUNC TEST IS FAILING ON 5.6+ WINDOWS PLATFORM post push fix for improving the reliability of the test --- .../r/log_slow_admin_statements_func.result | 38 +++++++++++++++---- .../t/log_slow_admin_statements_func.test | 35 ++++++++++++----- 2 files changed, 57 insertions(+), 16 deletions(-) diff --git a/mysql-test/suite/sys_vars/r/log_slow_admin_statements_func.result b/mysql-test/suite/sys_vars/r/log_slow_admin_statements_func.result index daddc4af6273..fd23bfcbf8f6 100644 --- a/mysql-test/suite/sys_vars/r/log_slow_admin_statements_func.result +++ b/mysql-test/suite/sys_vars/r/log_slow_admin_statements_func.result @@ -10,7 +10,7 @@ j VARCHAR(255) SET GLOBAL log_output = 'file,table'; SET GLOBAL slow_query_log = on; SET SESSION long_query_time = 0; -SET GLOBAL log_slow_admin_statements = on; +SET GLOBAL log_slow_admin_statements = off; ALTER TABLE log_slow_admin_statements ADD COLUMN k INT DEFAULT 17; CREATE PROCEDURE add_rows() BEGIN @@ -24,6 +24,9 @@ END WHILE; END $ CALL add_rows(); +ANALYZE TABLE log_slow_admin_statements; +Table Op Msg_type Msg_text +test.log_slow_admin_statements analyze status OK OPTIMIZE TABLE log_slow_admin_statements; Table Op Msg_type Msg_text test.log_slow_admin_statements optimize note Table does not support optimize, doing recreate + analyze instead @@ -31,16 +34,37 @@ test.log_slow_admin_statements optimize status OK CHECK TABLE log_slow_admin_statements EXTENDED; Table Op Msg_type Msg_text test.log_slow_admin_statements check status OK +# Administrative sql statements must not be logged +SELECT count(sql_text)= 0 FROM mysql.slow_log +WHERE sql_text LIKE '%TABLE log_slow_admin_statements%'; +count(sql_text)= 0 +1 +SET GLOBAL log_slow_admin_statements = on; DROP TABLE log_slow_admin_statements; -SELECT sql_text FROM mysql.slow_log WHERE sql_text LIKE '%TABLE log_slow_admin_statements%'; -sql_text -ALTER TABLE log_slow_admin_statements ADD COLUMN k INT DEFAULT 17 -OPTIMIZE TABLE log_slow_admin_statements -CHECK TABLE log_slow_admin_statements EXTENDED -DROP TABLE log_slow_admin_statements +CREATE TABLE log_slow_admin_statements ( +i INT PRIMARY KEY AUTO_INCREMENT, +j VARCHAR(255) +) ENGINE=InnoDB; +CALL add_rows(); +ANALYZE TABLE log_slow_admin_statements; +Table Op Msg_type Msg_text +test.log_slow_admin_statements analyze status OK +OPTIMIZE TABLE log_slow_admin_statements; +Table Op Msg_type Msg_text +test.log_slow_admin_statements optimize note Table does not support optimize, doing recreate + analyze instead +test.log_slow_admin_statements optimize status OK +CHECK TABLE log_slow_admin_statements EXTENDED; +Table Op Msg_type Msg_text +test.log_slow_admin_statements check status OK +# At least one administrative sql statement must be logged in slow query log +SELECT count(sql_text)> 0 FROM mysql.slow_log +WHERE sql_text LIKE '%TABLE log_slow_admin_statements%'; +count(sql_text)> 0 +1 SET @@global.log_output= @old_log_output; SET @@global.slow_query_log= @old_slow_query_log; SET @@session.long_query_time= @old_long_query_time; SET @@global.log_slow_admin_statements= @old_log_slow_admin_statements; DROP PROCEDURE add_rows; +DROP TABLE log_slow_admin_statements; TRUNCATE TABLE mysql.slow_log; diff --git a/mysql-test/suite/sys_vars/t/log_slow_admin_statements_func.test b/mysql-test/suite/sys_vars/t/log_slow_admin_statements_func.test index 382edeca6bf4..1362a7eb9376 100644 --- a/mysql-test/suite/sys_vars/t/log_slow_admin_statements_func.test +++ b/mysql-test/suite/sys_vars/t/log_slow_admin_statements_func.test @@ -1,5 +1,6 @@ # check that CSV engine was compiled in --source include/have_csv.inc +--source include/no_valgrind_without_big.inc SET @old_log_output= @@global.log_output; SET @old_slow_query_log= @@global.slow_query_log; @@ -8,15 +9,15 @@ SET @old_log_slow_admin_statements= @@global.log_slow_admin_statements; USE test; CREATE TABLE log_slow_admin_statements ( - i INT PRIMARY KEY AUTO_INCREMENT, - j VARCHAR(255) + i INT PRIMARY KEY AUTO_INCREMENT, + j VARCHAR(255) ) ENGINE=InnoDB; # enable slow logging to table SET GLOBAL log_output = 'file,table'; SET GLOBAL slow_query_log = on; SET SESSION long_query_time = 0; -SET GLOBAL log_slow_admin_statements = on; +SET GLOBAL log_slow_admin_statements = off; # test ALTER, OPTIMIZE and CHECK against the table shown up ALTER TABLE log_slow_admin_statements ADD COLUMN k INT DEFAULT 17; @@ -40,17 +41,32 @@ DELIMITER ;$ CALL add_rows(); -# OPTIMIZE TABLE +ANALYZE TABLE log_slow_admin_statements; OPTIMIZE TABLE log_slow_admin_statements; - -# CHECK TABLE CHECK TABLE log_slow_admin_statements EXTENDED; -# DROP TABLE +--echo # Administrative sql statements must not be logged +SELECT count(sql_text)= 0 FROM mysql.slow_log + WHERE sql_text LIKE '%TABLE log_slow_admin_statements%'; +# SELECT sql_text FROM mysql.slow_log WHERE sql_text LIKE '%TABLE log_slow_admin_statements%'; + +SET GLOBAL log_slow_admin_statements = on; + DROP TABLE log_slow_admin_statements; +CREATE TABLE log_slow_admin_statements ( + i INT PRIMARY KEY AUTO_INCREMENT, + j VARCHAR(255) +) ENGINE=InnoDB; -# ALTER, OPTIMIZE, CHECK and DROP operations should be logged in slow query log. -SELECT sql_text FROM mysql.slow_log WHERE sql_text LIKE '%TABLE log_slow_admin_statements%'; +CALL add_rows(); + +ANALYZE TABLE log_slow_admin_statements; +OPTIMIZE TABLE log_slow_admin_statements; +CHECK TABLE log_slow_admin_statements EXTENDED; + +--echo # At least one administrative sql statement must be logged in slow query log +SELECT count(sql_text)> 0 FROM mysql.slow_log + WHERE sql_text LIKE '%TABLE log_slow_admin_statements%'; SET @@global.log_output= @old_log_output; SET @@global.slow_query_log= @old_slow_query_log; @@ -58,4 +74,5 @@ SET @@session.long_query_time= @old_long_query_time; SET @@global.log_slow_admin_statements= @old_log_slow_admin_statements; DROP PROCEDURE add_rows; +DROP TABLE log_slow_admin_statements; TRUNCATE TABLE mysql.slow_log; From 2fd4dae84862ecfe98ecdf361386adcaef5904c4 Mon Sep 17 00:00:00 2001 From: Piotr Obrzut Date: Mon, 28 Aug 2017 12:30:21 +0200 Subject: [PATCH 0025/1221] Bug #26501092 mysql server installer cannot detect that visual c++ 2010 is installed. (cherry picked from commit 816d1307409636655afee3424aa96451a4e22be2) --- packaging/WiX/mysql_server.wxs.in | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packaging/WiX/mysql_server.wxs.in b/packaging/WiX/mysql_server.wxs.in index 44849323e8ac..7b3cffb5a38e 100644 --- a/packaging/WiX/mysql_server.wxs.in +++ b/packaging/WiX/mysql_server.wxs.in @@ -79,8 +79,9 @@ @@ -90,8 +91,9 @@ From 3b4da6478c9ca29b59cec25a53a708afdfdc36b1 Mon Sep 17 00:00:00 2001 From: Aakanksha Verma Date: Thu, 31 Aug 2017 14:06:07 +0530 Subject: [PATCH 0026/1221] --- mysql-test/r/partition_innodb.result | 10 +--------- mysql-test/t/partition_innodb.test | 10 +--------- 2 files changed, 2 insertions(+), 18 deletions(-) diff --git a/mysql-test/r/partition_innodb.result b/mysql-test/r/partition_innodb.result index 6595bf1f6b66..2245d6cc4c46 100644 --- a/mysql-test/r/partition_innodb.result +++ b/mysql-test/r/partition_innodb.result @@ -888,12 +888,4 @@ Warning 1478 InnoDB: ROW_FORMAT=DYNAMIC requires innodb_file_format > Antelope. Warning 1478 InnoDB: assuming ROW_FORMAT=COMPACT. SELECT * FROM t WHERE dttm > '2017-01-19' ORDER BY id DESC; id dttm msg -CREATE TABLE t2(a INT,KEY USING btree(a)) ENGINE=HEAP; -ALTER TABLE t2 ENGINE=HEAP PARTITION BY key(a)(partition p0,partition p1); -INSERT INTO t2 VALUES(0x38),(0x39),(0x3A),(0x3B),(0x3C),(0x3D),(0x3E),(0x3F); -SELECT * FROM t2 ORDER BY a DESC LIMIT 3; -a -63 -62 -61 -DROP TABLE t,t1,t2; +DROP TABLE t,t1; diff --git a/mysql-test/t/partition_innodb.test b/mysql-test/t/partition_innodb.test index 30a037bd02c5..e11901be7827 100644 --- a/mysql-test/t/partition_innodb.test +++ b/mysql-test/t/partition_innodb.test @@ -954,12 +954,4 @@ CREATE TABLE t(id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, dttm DATETIME NOT NU SELECT * FROM t WHERE dttm > '2017-01-19' ORDER BY id DESC; -CREATE TABLE t2(a INT,KEY USING btree(a)) ENGINE=HEAP; - -ALTER TABLE t2 ENGINE=HEAP PARTITION BY key(a)(partition p0,partition p1); - -INSERT INTO t2 VALUES(0x38),(0x39),(0x3A),(0x3B),(0x3C),(0x3D),(0x3E),(0x3F); - -SELECT * FROM t2 ORDER BY a DESC LIMIT 3; - -DROP TABLE t,t1,t2; +DROP TABLE t,t1; From 9ae160af7647139a321203fa02c4122744e2ba63 Mon Sep 17 00:00:00 2001 From: Aakanksha Verma Date: Thu, 31 Aug 2017 15:44:42 +0530 Subject: [PATCH 0027/1221] --- sql/ha_partition.cc | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/sql/ha_partition.cc b/sql/ha_partition.cc index 414f9d525364..17596fb924c4 100644 --- a/sql/ha_partition.cc +++ b/sql/ha_partition.cc @@ -2751,7 +2751,15 @@ int ha_partition::open(const char *name, int mode, uint test_if_locked) name_buffer_ptr= m_name_buffer_ptr; m_start_key.length= 0; m_rec0= table->record[0]; - m_rec_length= table_share->reclength; + legacy_db_type db_type = ha_legacy_type(m_part_info->default_engine_type); + if (db_type == DB_TYPE_HEAP) + { + m_rec_length= table_share->rec_buff_length; + } else { + m_rec_length= table_share->reclength; + } + DBUG_ASSERT(db_type != DB_TYPE_UNKNOWN); + if (!m_part_ids_sorted_by_num_of_records) { if (!(m_part_ids_sorted_by_num_of_records= From 7f20703a718f855c6aa01f9da92cd95430ea0d8f Mon Sep 17 00:00:00 2001 From: Sreeharsha Ramanavarapu Date: Thu, 31 Aug 2017 18:28:29 +0530 Subject: [PATCH 0028/1221] Bug #26704451: INCORRECT BEHAVIOR WITH USE OF CERTAIN CHARSETS AND SHA2 Issue: ------ Item_func_sha2::val_str_ascii is supposed return an ascii value, but it returns a utf16le when a user variable is set to a value of that charset and passed as parameter. Solution: --------- set_charset on the string value should be called after val_str has been calculated. This is already done in val_str_ascii functions for MD5 and SHA functions. --- sql/item_strfunc.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc index 3c118195842f..cb7cca424568 100644 --- a/sql/item_strfunc.cc +++ b/sql/item_strfunc.cc @@ -239,9 +239,9 @@ String *Item_func_sha2::val_str_ascii(String *str) size_t input_len; uint digest_length= 0; + input_string= args[0]->val_str(str); str->set_charset(&my_charset_bin); - input_string= args[0]->val_str(str); if (input_string == NULL) { null_value= TRUE; From d90de0bd962d448e1866a6d08be9e12818a067f7 Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Thu, 31 Aug 2017 11:56:32 -0700 Subject: [PATCH 0029/1221] TDB-74 : PerconaFT encodes already encoded database name for directory name - Advanced git submodule commit pointer for PErconaFT fix of TDB-74 - This commit will be cherry-picked forward to 5.7 --- storage/tokudb/PerconaFT | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage/tokudb/PerconaFT b/storage/tokudb/PerconaFT index 938ba1d7175f..871ee738913c 160000 --- a/storage/tokudb/PerconaFT +++ b/storage/tokudb/PerconaFT @@ -1 +1 @@ -Subproject commit 938ba1d7175ffc9e521b5c068169a8832f53c889 +Subproject commit 871ee738913cde6d79df10dee08888f9c00e1556 From fab7fb934ea0ee7d40ff1bc994d9c14beba2ec57 Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Fri, 1 Sep 2017 08:48:40 +0530 Subject: [PATCH 0030/1221] From 1217a6c91e84c3645a8975e5620bb49289f9f9a6 Mon Sep 17 00:00:00 2001 From: Sreeharsha Ramanavarapu Date: Fri, 1 Sep 2017 15:24:08 +0530 Subject: [PATCH 0031/1221] Bug #25153670: INCORRECT BEHAVIOR WITH MULTI-TABLE UPDATE USING TEMPORARY TABLE Issue: ------ This problem occurs under the following conditions: 1) When an UPDATE requires a temporary table. 2) This temporary table is then created on INNODB. 3) The size of the target table's primary key is greater than 1024. Root cause: ----------- The temp table is used to hold the rows that qualify and need to be updated. This is done by storing the target table's primary key (PK) in the temp table to identify the row. All the rows are identified and stored in temp table. Then PK values in the temp table are used to identify the rows in t1 (target table) and are then updated. While creating a temp table, Query_result_update::optimize() creates a single field (Field_string) to squeeze all the columns of the target table's PK. This works fine if the size of PK < 1024. INNODB's fixed length column size is restricted to 1024 (See "struct dict_field_t"). Exceeding this can result in incorrect behavior. Solution: --------- Since we have been unable to identify a good fix for this issue, an error will be returned for this DML statement. A different bug will be opened to track and fix this error. Changes specific to trunk: -------------------------- sql_update.cc: While creating temp table, the big_tables option is unset. This code has been removed. This means that optimizer never chooses INNODB for temp table for UPDATE statements. The only way INNODB temp tables come into the picture is when there is an overflow from the temp table on HEAP. with_non_recursive.result: After the above change, some UPDATE statements with big_tables option will use INNODB temp tables. --- sql/sql_tmp_table.cc | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/sql/sql_tmp_table.cc b/sql/sql_tmp_table.cc index 8812a0943c07..b3a2a724235b 100644 --- a/sql/sql_tmp_table.cc +++ b/sql/sql_tmp_table.cc @@ -2255,6 +2255,22 @@ bool create_innodb_tmp_table(TABLE *table, KEY *keyinfo) create_info.row_type= table->s->row_type; create_info.options|= HA_LEX_CREATE_TMP_TABLE | HA_LEX_CREATE_INTERNAL_TMP_TABLE; + /* + INNODB's fixed length column size is restricted to 1024. Exceeding this can + result in incorrect behavior. + */ + if (table->s->db_type() == innodb_hton) + { + for (Field **field= table->field; *field; ++field) + { + if ((*field)->type() == MYSQL_TYPE_STRING && + (*field)->key_length() > 1024) + { + my_error(ER_TOO_LONG_KEY, MYF(0), 1024); + DBUG_RETURN(true); + } + } + } int error; if ((error= table->file->create(share->table_name.str, table, &create_info))) From ad00de40772614e79ef8f14647d37a7d356cff5c Mon Sep 17 00:00:00 2001 From: Sreeharsha Ramanavarapu Date: Wed, 6 Sep 2017 06:45:50 +0530 Subject: [PATCH 0032/1221] Bug #26704451: INCORRECT BEHAVIOR WITH USE OF CERTAIN CHARSETS AND SHA2 Missed pushing to 5.5. --- sql/item_strfunc.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc index ed02f668060b..e2a2ee1b6d8d 100644 --- a/sql/item_strfunc.cc +++ b/sql/item_strfunc.cc @@ -266,9 +266,9 @@ String *Item_func_sha2::val_str_ascii(String *str) size_t input_len; uint digest_length= 0; + input_string= args[0]->val_str(str); str->set_charset(&my_charset_bin); - input_string= args[0]->val_str(str); if (input_string == NULL) { null_value= TRUE; From 91e9770f729738b26ee31ed93094ab8cf7177771 Mon Sep 17 00:00:00 2001 From: Balasubramanian Kandasamy Date: Wed, 6 Sep 2017 17:48:42 +0530 Subject: [PATCH 0033/1221] Bug#26747305 - HOSTNAME: COMMAND NOT FOUND WHILE STARTING CONTAINER WITH 5.5 DOCKER IMAGE - Add hostname package for docker rpm builds. --- packaging/rpm-docker/mysql.spec.in | 1 + 1 file changed, 1 insertion(+) diff --git a/packaging/rpm-docker/mysql.spec.in b/packaging/rpm-docker/mysql.spec.in index cc4e7bc541e2..56e79b7992be 100644 --- a/packaging/rpm-docker/mysql.spec.in +++ b/packaging/rpm-docker/mysql.spec.in @@ -82,6 +82,7 @@ documentation and the manual for more information. %package -n mysql-%{product_suffix}-server-minimal Summary: A very fast and reliable SQL database server Group: Applications/Databases +Requires: hostname Requires: shadow-utils Provides: mysql-server = %{version}-%{release} Provides: mysql-server%{?_isa} = %{version}-%{release} From 8c8147c05c083eef1d831089723827a5478b015f Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Thu, 7 Sep 2017 10:50:56 +0200 Subject: [PATCH 0034/1221] WL#10985 DEPRECATE PERFORMANCE_SCHEMA.SETUP_TIMERS IN 5.7 --- .../perfschema/r/dml_setup_timers.result | 34 +++++++++++++++++++ .../perfschema/r/max_program_zero.result | 2 ++ .../suite/perfschema/r/privilege.result | 10 ++++++ .../suite/perfschema/r/query_cache.result | 4 +++ .../r/socket_summary_by_instance_func.result | 4 +++ ...socket_summary_by_instance_func_win.result | 4 +++ .../r/start_server_disable_idle.result | 2 ++ .../r/start_server_disable_stages.result | 2 ++ .../r/start_server_disable_statements.result | 2 ++ .../start_server_disable_transactions.result | 2 ++ .../r/start_server_disable_waits.result | 2 ++ .../perfschema/r/start_server_innodb.result | 2 ++ .../r/start_server_low_index.result | 2 ++ .../r/start_server_low_table_lock.result | 2 ++ .../r/start_server_no_account.result | 2 ++ .../r/start_server_no_cond_class.result | 2 ++ .../r/start_server_no_cond_inst.result | 2 ++ .../r/start_server_no_file_class.result | 2 ++ .../r/start_server_no_file_inst.result | 2 ++ .../perfschema/r/start_server_no_host.result | 2 ++ .../perfschema/r/start_server_no_index.result | 2 ++ .../perfschema/r/start_server_no_mdl.result | 2 ++ .../r/start_server_no_memory_class.result | 2 ++ .../r/start_server_no_mutex_class.result | 2 ++ .../r/start_server_no_mutex_inst.result | 2 ++ ..._server_no_prepared_stmts_instances.result | 2 ++ .../r/start_server_no_rwlock_class.result | 2 ++ .../r/start_server_no_rwlock_inst.result | 2 ++ .../r/start_server_no_setup_actors.result | 2 ++ .../r/start_server_no_setup_objects.result | 2 ++ .../r/start_server_no_socket_class.result | 2 ++ .../r/start_server_no_socket_inst.result | 2 ++ .../r/start_server_no_stage_class.result | 2 ++ .../r/start_server_no_stages_history.result | 2 ++ ...start_server_no_stages_history_long.result | 2 ++ .../r/start_server_no_statement_class.result | 2 ++ .../start_server_no_statements_history.result | 2 ++ ...t_server_no_statements_history_long.result | 2 ++ .../r/start_server_no_table_hdl.result | 2 ++ .../r/start_server_no_table_inst.result | 2 ++ .../r/start_server_no_table_lock.result | 2 ++ .../r/start_server_no_thread_class.result | 2 ++ .../r/start_server_no_thread_inst.result | 2 ++ ...tart_server_no_transactions_history.result | 2 ++ ...server_no_transactions_history_long.result | 2 ++ .../perfschema/r/start_server_no_user.result | 2 ++ .../r/start_server_no_waits_history.result | 2 ++ .../start_server_no_waits_history_long.result | 2 ++ .../perfschema/r/start_server_nothing.result | 4 +++ .../perfschema/r/start_server_off.result | 4 +++ .../suite/perfschema/r/start_server_on.result | 2 ++ .../r/statement_program_lost_inst.result | 2 ++ storage/perfschema/table_setup_timers.cc | 10 +++++- 53 files changed, 163 insertions(+), 1 deletion(-) diff --git a/mysql-test/suite/perfschema/r/dml_setup_timers.result b/mysql-test/suite/perfschema/r/dml_setup_timers.result index df6a78d7d54e..ff08290175a7 100644 --- a/mysql-test/suite/perfschema/r/dml_setup_timers.result +++ b/mysql-test/suite/perfschema/r/dml_setup_timers.result @@ -1,13 +1,23 @@ update performance_schema.setup_timers set timer_name='CYCLE' where name="wait"; +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. update performance_schema.setup_timers set timer_name='NANOSECOND' where name="stage"; +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. update performance_schema.setup_timers set timer_name='NANOSECOND' where name="statement"; +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. update performance_schema.setup_timers set timer_name='MICROSECOND' where name="transaction"; +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. update performance_schema.setup_timers set timer_name='MICROSECOND' where name="idle"; +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. select * from performance_schema.setup_timers; NAME TIMER_NAME idle MICROSECOND @@ -15,14 +25,20 @@ wait CYCLE stage NANOSECOND statement NANOSECOND transaction MICROSECOND +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. select * from performance_schema.setup_timers where name='Wait'; NAME TIMER_NAME wait CYCLE +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. select * from performance_schema.setup_timers where timer_name='CYCLE'; NAME TIMER_NAME wait CYCLE +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. insert into performance_schema.setup_timers set name='FOO', timer_name='CYCLE'; ERROR 42000: INSERT command denied to user 'root'@'localhost' for table 'setup_timers' @@ -31,6 +47,8 @@ set name='FOO'; ERROR HY000: Invalid performance_schema usage. update performance_schema.setup_timers set timer_name='MILLISECOND'; +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. select * from performance_schema.setup_timers; NAME TIMER_NAME idle MILLISECOND @@ -38,8 +56,12 @@ wait MILLISECOND stage MILLISECOND statement MILLISECOND transaction MILLISECOND +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. update performance_schema.setup_timers set timer_name='CYCLE'; +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. delete from performance_schema.setup_timers; ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'setup_timers' delete from performance_schema.setup_timers @@ -51,14 +73,24 @@ LOCK TABLES performance_schema.setup_timers WRITE; UNLOCK TABLES; update performance_schema.setup_timers set timer_name='CYCLE' where name="wait"; +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. update performance_schema.setup_timers set timer_name='NANOSECOND' where name="stage"; +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. update performance_schema.setup_timers set timer_name='NANOSECOND' where name="statement"; +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. update performance_schema.setup_timers set timer_name='MICROSECOND' where name="transaction"; +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. update performance_schema.setup_timers set timer_name='MICROSECOND' where name="idle"; +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. select * from performance_schema.setup_timers; NAME TIMER_NAME idle MICROSECOND @@ -66,3 +98,5 @@ wait CYCLE stage NANOSECOND statement NANOSECOND transaction MICROSECOND +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. diff --git a/mysql-test/suite/perfschema/r/max_program_zero.result b/mysql-test/suite/perfschema/r/max_program_zero.result index 6b5833a9b6fa..1f244a3a0064 100644 --- a/mysql-test/suite/perfschema/r/max_program_zero.result +++ b/mysql-test/suite/perfschema/r/max_program_zero.result @@ -18,6 +18,8 @@ count(*) > 4 select count(*) from performance_schema.setup_timers; count(*) 5 +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. select * from performance_schema.accounts; select * from performance_schema.cond_instances; select * from performance_schema.events_stages_current; diff --git a/mysql-test/suite/perfschema/r/privilege.result b/mysql-test/suite/perfschema/r/privilege.result index 10338898d345..d8e4abb704d0 100644 --- a/mysql-test/suite/perfschema/r/privilege.result +++ b/mysql-test/suite/perfschema/r/privilege.result @@ -576,6 +576,8 @@ WHERE name LIKE 'wait/synch/mutex/%' OR name LIKE 'wait/synch/rwlock/%'; UPDATE performance_schema.setup_consumers SET enabled = 'YES'; UPDATE performance_schema.setup_timers SET timer_name = 'TICK'; +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. TRUNCATE TABLE performance_schema.events_waits_history_long; TRUNCATE TABLE performance_schema.events_waits_history; TRUNCATE TABLE performance_schema.events_waits_current; @@ -586,9 +588,17 @@ flush privileges; UPDATE performance_schema.setup_instruments SET enabled = 'YES', timed = 'YES'; UPDATE performance_schema.setup_consumers SET enabled = 'YES'; UPDATE performance_schema.setup_timers SET timer_name = 'MICROSECOND' where name="idle"; +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. UPDATE performance_schema.setup_timers SET timer_name = 'CYCLE' where name="wait"; +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. UPDATE performance_schema.setup_timers SET timer_name = 'NANOSECOND' where name="stage"; +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. UPDATE performance_schema.setup_timers SET timer_name = 'NANOSECOND' where name="statement"; +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. set sql_mode= @orig_sql_mode; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. diff --git a/mysql-test/suite/perfschema/r/query_cache.result b/mysql-test/suite/perfschema/r/query_cache.result index 1b2895e5fdb9..958e61057732 100644 --- a/mysql-test/suite/perfschema/r/query_cache.result +++ b/mysql-test/suite/perfschema/r/query_cache.result @@ -45,6 +45,8 @@ NULL select * from performance_schema.setup_timers where name='wait'; NAME TIMER_NAME wait {CYCLE_OR_NANOSECOND} +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. show global status like "Qcache_queries_in_cache"; Variable_name Value Qcache_queries_in_cache 1 @@ -60,6 +62,8 @@ NULL select * from performance_schema.setup_timers where name='wait'; NAME TIMER_NAME wait {CYCLE_OR_NANOSECOND} +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. show global status like "Qcache_queries_in_cache"; Variable_name Value Qcache_queries_in_cache 1 diff --git a/mysql-test/suite/perfschema/r/socket_summary_by_instance_func.result b/mysql-test/suite/perfschema/r/socket_summary_by_instance_func.result index af8eea0a7958..efd4eee876c6 100644 --- a/mysql-test/suite/perfschema/r/socket_summary_by_instance_func.result +++ b/mysql-test/suite/perfschema/r/socket_summary_by_instance_func.result @@ -7,6 +7,8 @@ # - the test might abort # # 0. Check, build or set prequisites +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. UPDATE performance_schema.threads SET INSTRUMENTED='NO' WHERE PROCESSLIST_ID = CONNECTION_ID(); # 1. Basic checks @@ -223,3 +225,5 @@ col2 # It must reset all counters. TRUNCATE TABLE performance_schema.socket_summary_by_instance; # 6. Cleanup +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. diff --git a/mysql-test/suite/perfschema/r/socket_summary_by_instance_func_win.result b/mysql-test/suite/perfschema/r/socket_summary_by_instance_func_win.result index 16e6214bc533..dfaa82253bcf 100644 --- a/mysql-test/suite/perfschema/r/socket_summary_by_instance_func_win.result +++ b/mysql-test/suite/perfschema/r/socket_summary_by_instance_func_win.result @@ -7,6 +7,8 @@ # - the test might abort # # 0. Check, build or set prequisites +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. UPDATE performance_schema.threads SET INSTRUMENTED='NO' WHERE PROCESSLIST_ID = CONNECTION_ID(); # 1. Basic checks @@ -226,3 +228,5 @@ col2 # It must reset all counters. TRUNCATE TABLE performance_schema.socket_summary_by_instance; # 6. Cleanup +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. diff --git a/mysql-test/suite/perfschema/r/start_server_disable_idle.result b/mysql-test/suite/perfschema/r/start_server_disable_idle.result index bf2e50e124a3..38b50f1bebbf 100644 --- a/mysql-test/suite/perfschema/r/start_server_disable_idle.result +++ b/mysql-test/suite/perfschema/r/start_server_disable_idle.result @@ -18,6 +18,8 @@ count(*) > 4 select count(*) from performance_schema.setup_timers; count(*) 5 +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. select * from performance_schema.accounts; select * from performance_schema.cond_instances; select * from performance_schema.events_stages_current; diff --git a/mysql-test/suite/perfschema/r/start_server_disable_stages.result b/mysql-test/suite/perfschema/r/start_server_disable_stages.result index 613ffa121a12..454fd64e56cb 100644 --- a/mysql-test/suite/perfschema/r/start_server_disable_stages.result +++ b/mysql-test/suite/perfschema/r/start_server_disable_stages.result @@ -18,6 +18,8 @@ count(*) > 4 select count(*) from performance_schema.setup_timers; count(*) 5 +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. select * from performance_schema.accounts; select * from performance_schema.cond_instances; select * from performance_schema.events_stages_current; diff --git a/mysql-test/suite/perfschema/r/start_server_disable_statements.result b/mysql-test/suite/perfschema/r/start_server_disable_statements.result index 4dfb128b8b94..d2e1cb132a21 100644 --- a/mysql-test/suite/perfschema/r/start_server_disable_statements.result +++ b/mysql-test/suite/perfschema/r/start_server_disable_statements.result @@ -18,6 +18,8 @@ count(*) > 4 select count(*) from performance_schema.setup_timers; count(*) 5 +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. select * from performance_schema.accounts; select * from performance_schema.cond_instances; select * from performance_schema.events_stages_current; diff --git a/mysql-test/suite/perfschema/r/start_server_disable_transactions.result b/mysql-test/suite/perfschema/r/start_server_disable_transactions.result index 95fc02016b5b..8fc285e81d2b 100644 --- a/mysql-test/suite/perfschema/r/start_server_disable_transactions.result +++ b/mysql-test/suite/perfschema/r/start_server_disable_transactions.result @@ -18,6 +18,8 @@ count(*) > 4 select count(*) from performance_schema.setup_timers; count(*) 5 +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. select * from performance_schema.accounts; select * from performance_schema.cond_instances; select * from performance_schema.events_stages_current; diff --git a/mysql-test/suite/perfschema/r/start_server_disable_waits.result b/mysql-test/suite/perfschema/r/start_server_disable_waits.result index 4d78270123df..087d782da40a 100644 --- a/mysql-test/suite/perfschema/r/start_server_disable_waits.result +++ b/mysql-test/suite/perfschema/r/start_server_disable_waits.result @@ -18,6 +18,8 @@ count(*) > 4 select count(*) from performance_schema.setup_timers; count(*) 5 +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. select * from performance_schema.accounts; select * from performance_schema.cond_instances; select * from performance_schema.events_stages_current; diff --git a/mysql-test/suite/perfschema/r/start_server_innodb.result b/mysql-test/suite/perfschema/r/start_server_innodb.result index 0c297f767de6..116bbbcfb462 100644 --- a/mysql-test/suite/perfschema/r/start_server_innodb.result +++ b/mysql-test/suite/perfschema/r/start_server_innodb.result @@ -18,6 +18,8 @@ count(*) > 4 select count(*) from performance_schema.setup_timers; count(*) 5 +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. select * from performance_schema.accounts; select * from performance_schema.cond_instances; select * from performance_schema.events_stages_current; diff --git a/mysql-test/suite/perfschema/r/start_server_low_index.result b/mysql-test/suite/perfschema/r/start_server_low_index.result index bf3ae7abfb68..f2439059703f 100644 --- a/mysql-test/suite/perfschema/r/start_server_low_index.result +++ b/mysql-test/suite/perfschema/r/start_server_low_index.result @@ -18,6 +18,8 @@ count(*) > 4 select count(*) from performance_schema.setup_timers; count(*) 5 +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. select * from performance_schema.accounts; select * from performance_schema.cond_instances; select * from performance_schema.events_stages_current; diff --git a/mysql-test/suite/perfschema/r/start_server_low_table_lock.result b/mysql-test/suite/perfschema/r/start_server_low_table_lock.result index abdea9a4af36..f0e204935e7a 100644 --- a/mysql-test/suite/perfschema/r/start_server_low_table_lock.result +++ b/mysql-test/suite/perfschema/r/start_server_low_table_lock.result @@ -18,6 +18,8 @@ count(*) > 4 select count(*) from performance_schema.setup_timers; count(*) 5 +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. select * from performance_schema.accounts; select * from performance_schema.cond_instances; select * from performance_schema.events_stages_current; diff --git a/mysql-test/suite/perfschema/r/start_server_no_account.result b/mysql-test/suite/perfschema/r/start_server_no_account.result index 690ca0073b75..cc7f9a324a95 100644 --- a/mysql-test/suite/perfschema/r/start_server_no_account.result +++ b/mysql-test/suite/perfschema/r/start_server_no_account.result @@ -18,6 +18,8 @@ count(*) > 4 select count(*) from performance_schema.setup_timers; count(*) 5 +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. select * from performance_schema.accounts; select * from performance_schema.cond_instances; select * from performance_schema.events_stages_current; diff --git a/mysql-test/suite/perfschema/r/start_server_no_cond_class.result b/mysql-test/suite/perfschema/r/start_server_no_cond_class.result index f60bb6cc7319..afd465aea899 100644 --- a/mysql-test/suite/perfschema/r/start_server_no_cond_class.result +++ b/mysql-test/suite/perfschema/r/start_server_no_cond_class.result @@ -18,6 +18,8 @@ count(*) > 4 select count(*) from performance_schema.setup_timers; count(*) 5 +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. select * from performance_schema.accounts; select * from performance_schema.cond_instances; select * from performance_schema.events_stages_current; diff --git a/mysql-test/suite/perfschema/r/start_server_no_cond_inst.result b/mysql-test/suite/perfschema/r/start_server_no_cond_inst.result index dce5b891278f..2ec4af0df434 100644 --- a/mysql-test/suite/perfschema/r/start_server_no_cond_inst.result +++ b/mysql-test/suite/perfschema/r/start_server_no_cond_inst.result @@ -18,6 +18,8 @@ count(*) > 4 select count(*) from performance_schema.setup_timers; count(*) 5 +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. select * from performance_schema.accounts; select * from performance_schema.cond_instances; select * from performance_schema.events_stages_current; diff --git a/mysql-test/suite/perfschema/r/start_server_no_file_class.result b/mysql-test/suite/perfschema/r/start_server_no_file_class.result index 09cafc51c037..042ba3f1623f 100644 --- a/mysql-test/suite/perfschema/r/start_server_no_file_class.result +++ b/mysql-test/suite/perfschema/r/start_server_no_file_class.result @@ -18,6 +18,8 @@ count(*) > 4 select count(*) from performance_schema.setup_timers; count(*) 5 +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. select * from performance_schema.accounts; select * from performance_schema.cond_instances; select * from performance_schema.events_stages_current; diff --git a/mysql-test/suite/perfschema/r/start_server_no_file_inst.result b/mysql-test/suite/perfschema/r/start_server_no_file_inst.result index e27005af52ef..f8f2dc222d7b 100644 --- a/mysql-test/suite/perfschema/r/start_server_no_file_inst.result +++ b/mysql-test/suite/perfschema/r/start_server_no_file_inst.result @@ -18,6 +18,8 @@ count(*) > 4 select count(*) from performance_schema.setup_timers; count(*) 5 +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. select * from performance_schema.accounts; select * from performance_schema.cond_instances; select * from performance_schema.events_stages_current; diff --git a/mysql-test/suite/perfschema/r/start_server_no_host.result b/mysql-test/suite/perfschema/r/start_server_no_host.result index 2fe4ade254f6..38afb4570ecb 100644 --- a/mysql-test/suite/perfschema/r/start_server_no_host.result +++ b/mysql-test/suite/perfschema/r/start_server_no_host.result @@ -18,6 +18,8 @@ count(*) > 4 select count(*) from performance_schema.setup_timers; count(*) 5 +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. select * from performance_schema.accounts; select * from performance_schema.cond_instances; select * from performance_schema.events_stages_current; diff --git a/mysql-test/suite/perfschema/r/start_server_no_index.result b/mysql-test/suite/perfschema/r/start_server_no_index.result index b0a5f8ef94ab..983342802070 100644 --- a/mysql-test/suite/perfschema/r/start_server_no_index.result +++ b/mysql-test/suite/perfschema/r/start_server_no_index.result @@ -18,6 +18,8 @@ count(*) > 4 select count(*) from performance_schema.setup_timers; count(*) 5 +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. select * from performance_schema.accounts; select * from performance_schema.cond_instances; select * from performance_schema.events_stages_current; diff --git a/mysql-test/suite/perfschema/r/start_server_no_mdl.result b/mysql-test/suite/perfschema/r/start_server_no_mdl.result index 2c73c02c2027..87f2ac8226d1 100644 --- a/mysql-test/suite/perfschema/r/start_server_no_mdl.result +++ b/mysql-test/suite/perfschema/r/start_server_no_mdl.result @@ -18,6 +18,8 @@ count(*) > 4 select count(*) from performance_schema.setup_timers; count(*) 5 +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. select * from performance_schema.accounts; select * from performance_schema.cond_instances; select * from performance_schema.events_stages_current; diff --git a/mysql-test/suite/perfschema/r/start_server_no_memory_class.result b/mysql-test/suite/perfschema/r/start_server_no_memory_class.result index a218bff28e24..ea1bcb258902 100644 --- a/mysql-test/suite/perfschema/r/start_server_no_memory_class.result +++ b/mysql-test/suite/perfschema/r/start_server_no_memory_class.result @@ -18,6 +18,8 @@ count(*) > 4 select count(*) from performance_schema.setup_timers; count(*) 5 +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. select * from performance_schema.accounts; select * from performance_schema.cond_instances; select * from performance_schema.events_stages_current; diff --git a/mysql-test/suite/perfschema/r/start_server_no_mutex_class.result b/mysql-test/suite/perfschema/r/start_server_no_mutex_class.result index c0ccb0dbfdc0..ca4100fcdc5e 100644 --- a/mysql-test/suite/perfschema/r/start_server_no_mutex_class.result +++ b/mysql-test/suite/perfschema/r/start_server_no_mutex_class.result @@ -18,6 +18,8 @@ count(*) > 4 select count(*) from performance_schema.setup_timers; count(*) 5 +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. select * from performance_schema.accounts; select * from performance_schema.cond_instances; select * from performance_schema.events_stages_current; diff --git a/mysql-test/suite/perfschema/r/start_server_no_mutex_inst.result b/mysql-test/suite/perfschema/r/start_server_no_mutex_inst.result index 51fa0c8f9b66..6345552b04de 100644 --- a/mysql-test/suite/perfschema/r/start_server_no_mutex_inst.result +++ b/mysql-test/suite/perfschema/r/start_server_no_mutex_inst.result @@ -18,6 +18,8 @@ count(*) > 4 select count(*) from performance_schema.setup_timers; count(*) 5 +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. select * from performance_schema.accounts; select * from performance_schema.cond_instances; select * from performance_schema.events_stages_current; diff --git a/mysql-test/suite/perfschema/r/start_server_no_prepared_stmts_instances.result b/mysql-test/suite/perfschema/r/start_server_no_prepared_stmts_instances.result index 743c4cf197b9..4b993eb29cdb 100644 --- a/mysql-test/suite/perfschema/r/start_server_no_prepared_stmts_instances.result +++ b/mysql-test/suite/perfschema/r/start_server_no_prepared_stmts_instances.result @@ -18,6 +18,8 @@ count(*) > 4 select count(*) from performance_schema.setup_timers; count(*) 5 +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. select * from performance_schema.accounts; select * from performance_schema.cond_instances; select * from performance_schema.events_stages_current; diff --git a/mysql-test/suite/perfschema/r/start_server_no_rwlock_class.result b/mysql-test/suite/perfschema/r/start_server_no_rwlock_class.result index 880c89708d46..a161f5d6aebc 100644 --- a/mysql-test/suite/perfschema/r/start_server_no_rwlock_class.result +++ b/mysql-test/suite/perfschema/r/start_server_no_rwlock_class.result @@ -18,6 +18,8 @@ count(*) > 4 select count(*) from performance_schema.setup_timers; count(*) 5 +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. select * from performance_schema.accounts; select * from performance_schema.cond_instances; select * from performance_schema.events_stages_current; diff --git a/mysql-test/suite/perfschema/r/start_server_no_rwlock_inst.result b/mysql-test/suite/perfschema/r/start_server_no_rwlock_inst.result index 1e55061b7bd2..336d316f0c32 100644 --- a/mysql-test/suite/perfschema/r/start_server_no_rwlock_inst.result +++ b/mysql-test/suite/perfschema/r/start_server_no_rwlock_inst.result @@ -18,6 +18,8 @@ count(*) > 4 select count(*) from performance_schema.setup_timers; count(*) 5 +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. select * from performance_schema.accounts; select * from performance_schema.cond_instances; select * from performance_schema.events_stages_current; diff --git a/mysql-test/suite/perfschema/r/start_server_no_setup_actors.result b/mysql-test/suite/perfschema/r/start_server_no_setup_actors.result index 6bbd217f8f46..03b60b2ca0bc 100644 --- a/mysql-test/suite/perfschema/r/start_server_no_setup_actors.result +++ b/mysql-test/suite/perfschema/r/start_server_no_setup_actors.result @@ -18,6 +18,8 @@ count(*) > 4 select count(*) from performance_schema.setup_timers; count(*) 5 +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. select * from performance_schema.accounts; select * from performance_schema.cond_instances; select * from performance_schema.events_stages_current; diff --git a/mysql-test/suite/perfschema/r/start_server_no_setup_objects.result b/mysql-test/suite/perfschema/r/start_server_no_setup_objects.result index 622ae333be9e..a8ef5935c52d 100644 --- a/mysql-test/suite/perfschema/r/start_server_no_setup_objects.result +++ b/mysql-test/suite/perfschema/r/start_server_no_setup_objects.result @@ -18,6 +18,8 @@ count(*) > 4 select count(*) from performance_schema.setup_timers; count(*) 5 +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. select * from performance_schema.accounts; select * from performance_schema.cond_instances; select * from performance_schema.events_stages_current; diff --git a/mysql-test/suite/perfschema/r/start_server_no_socket_class.result b/mysql-test/suite/perfschema/r/start_server_no_socket_class.result index fbbb2f74de54..9bd55cf8ad91 100644 --- a/mysql-test/suite/perfschema/r/start_server_no_socket_class.result +++ b/mysql-test/suite/perfschema/r/start_server_no_socket_class.result @@ -18,6 +18,8 @@ count(*) > 4 select count(*) from performance_schema.setup_timers; count(*) 5 +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. select * from performance_schema.accounts; select * from performance_schema.cond_instances; select * from performance_schema.events_stages_current; diff --git a/mysql-test/suite/perfschema/r/start_server_no_socket_inst.result b/mysql-test/suite/perfschema/r/start_server_no_socket_inst.result index ea1bb7d067ff..8029fb4286ea 100644 --- a/mysql-test/suite/perfschema/r/start_server_no_socket_inst.result +++ b/mysql-test/suite/perfschema/r/start_server_no_socket_inst.result @@ -18,6 +18,8 @@ count(*) > 4 select count(*) from performance_schema.setup_timers; count(*) 5 +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. select * from performance_schema.accounts; select * from performance_schema.cond_instances; select * from performance_schema.events_stages_current; diff --git a/mysql-test/suite/perfschema/r/start_server_no_stage_class.result b/mysql-test/suite/perfschema/r/start_server_no_stage_class.result index 03382189f86d..c5840ec78b11 100644 --- a/mysql-test/suite/perfschema/r/start_server_no_stage_class.result +++ b/mysql-test/suite/perfschema/r/start_server_no_stage_class.result @@ -18,6 +18,8 @@ count(*) > 4 select count(*) from performance_schema.setup_timers; count(*) 5 +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. select * from performance_schema.accounts; select * from performance_schema.cond_instances; select * from performance_schema.events_stages_current; diff --git a/mysql-test/suite/perfschema/r/start_server_no_stages_history.result b/mysql-test/suite/perfschema/r/start_server_no_stages_history.result index 5c571539de3b..c63f5a97f723 100644 --- a/mysql-test/suite/perfschema/r/start_server_no_stages_history.result +++ b/mysql-test/suite/perfschema/r/start_server_no_stages_history.result @@ -18,6 +18,8 @@ count(*) > 4 select count(*) from performance_schema.setup_timers; count(*) 5 +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. select * from performance_schema.accounts; select * from performance_schema.cond_instances; select * from performance_schema.events_stages_current; diff --git a/mysql-test/suite/perfschema/r/start_server_no_stages_history_long.result b/mysql-test/suite/perfschema/r/start_server_no_stages_history_long.result index e6df0be94031..c354dfc60bf0 100644 --- a/mysql-test/suite/perfschema/r/start_server_no_stages_history_long.result +++ b/mysql-test/suite/perfschema/r/start_server_no_stages_history_long.result @@ -18,6 +18,8 @@ count(*) > 4 select count(*) from performance_schema.setup_timers; count(*) 5 +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. select * from performance_schema.accounts; select * from performance_schema.cond_instances; select * from performance_schema.events_stages_current; diff --git a/mysql-test/suite/perfschema/r/start_server_no_statement_class.result b/mysql-test/suite/perfschema/r/start_server_no_statement_class.result index f409a48ef226..be3a675cd377 100644 --- a/mysql-test/suite/perfschema/r/start_server_no_statement_class.result +++ b/mysql-test/suite/perfschema/r/start_server_no_statement_class.result @@ -18,6 +18,8 @@ count(*) > 4 select count(*) from performance_schema.setup_timers; count(*) 5 +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. select * from performance_schema.accounts; select * from performance_schema.cond_instances; select * from performance_schema.events_stages_current; diff --git a/mysql-test/suite/perfschema/r/start_server_no_statements_history.result b/mysql-test/suite/perfschema/r/start_server_no_statements_history.result index 1e67ef339633..6d1532db4bdc 100644 --- a/mysql-test/suite/perfschema/r/start_server_no_statements_history.result +++ b/mysql-test/suite/perfschema/r/start_server_no_statements_history.result @@ -18,6 +18,8 @@ count(*) > 4 select count(*) from performance_schema.setup_timers; count(*) 5 +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. select * from performance_schema.accounts; select * from performance_schema.cond_instances; select * from performance_schema.events_stages_current; diff --git a/mysql-test/suite/perfschema/r/start_server_no_statements_history_long.result b/mysql-test/suite/perfschema/r/start_server_no_statements_history_long.result index 52fd49404778..633f2b5b34dd 100644 --- a/mysql-test/suite/perfschema/r/start_server_no_statements_history_long.result +++ b/mysql-test/suite/perfschema/r/start_server_no_statements_history_long.result @@ -18,6 +18,8 @@ count(*) > 4 select count(*) from performance_schema.setup_timers; count(*) 5 +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. select * from performance_schema.accounts; select * from performance_schema.cond_instances; select * from performance_schema.events_stages_current; diff --git a/mysql-test/suite/perfschema/r/start_server_no_table_hdl.result b/mysql-test/suite/perfschema/r/start_server_no_table_hdl.result index 35594eed13ce..4825823c584e 100644 --- a/mysql-test/suite/perfschema/r/start_server_no_table_hdl.result +++ b/mysql-test/suite/perfschema/r/start_server_no_table_hdl.result @@ -18,6 +18,8 @@ count(*) > 4 select count(*) from performance_schema.setup_timers; count(*) 5 +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. select * from performance_schema.accounts; select * from performance_schema.cond_instances; select * from performance_schema.events_stages_current; diff --git a/mysql-test/suite/perfschema/r/start_server_no_table_inst.result b/mysql-test/suite/perfschema/r/start_server_no_table_inst.result index dd828dcfa9be..fe0737909c15 100644 --- a/mysql-test/suite/perfschema/r/start_server_no_table_inst.result +++ b/mysql-test/suite/perfschema/r/start_server_no_table_inst.result @@ -18,6 +18,8 @@ count(*) > 4 select count(*) from performance_schema.setup_timers; count(*) 5 +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. select * from performance_schema.accounts; select * from performance_schema.cond_instances; select * from performance_schema.events_stages_current; diff --git a/mysql-test/suite/perfschema/r/start_server_no_table_lock.result b/mysql-test/suite/perfschema/r/start_server_no_table_lock.result index dfed8ef12c75..6a3a7e8d45fe 100644 --- a/mysql-test/suite/perfschema/r/start_server_no_table_lock.result +++ b/mysql-test/suite/perfschema/r/start_server_no_table_lock.result @@ -18,6 +18,8 @@ count(*) > 4 select count(*) from performance_schema.setup_timers; count(*) 5 +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. select * from performance_schema.accounts; select * from performance_schema.cond_instances; select * from performance_schema.events_stages_current; diff --git a/mysql-test/suite/perfschema/r/start_server_no_thread_class.result b/mysql-test/suite/perfschema/r/start_server_no_thread_class.result index aa15c8d24a02..d17982f16dc1 100644 --- a/mysql-test/suite/perfschema/r/start_server_no_thread_class.result +++ b/mysql-test/suite/perfschema/r/start_server_no_thread_class.result @@ -18,6 +18,8 @@ count(*) > 4 select count(*) from performance_schema.setup_timers; count(*) 5 +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. select * from performance_schema.accounts; select * from performance_schema.cond_instances; select * from performance_schema.events_stages_current; diff --git a/mysql-test/suite/perfschema/r/start_server_no_thread_inst.result b/mysql-test/suite/perfschema/r/start_server_no_thread_inst.result index 831f06b7d087..9ca1f6212e14 100644 --- a/mysql-test/suite/perfschema/r/start_server_no_thread_inst.result +++ b/mysql-test/suite/perfschema/r/start_server_no_thread_inst.result @@ -18,6 +18,8 @@ count(*) > 4 select count(*) from performance_schema.setup_timers; count(*) 5 +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. select * from performance_schema.accounts; select * from performance_schema.cond_instances; select * from performance_schema.events_stages_current; diff --git a/mysql-test/suite/perfschema/r/start_server_no_transactions_history.result b/mysql-test/suite/perfschema/r/start_server_no_transactions_history.result index 4b2b83c994c1..767358d1bcd1 100644 --- a/mysql-test/suite/perfschema/r/start_server_no_transactions_history.result +++ b/mysql-test/suite/perfschema/r/start_server_no_transactions_history.result @@ -18,6 +18,8 @@ count(*) > 4 select count(*) from performance_schema.setup_timers; count(*) 5 +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. select * from performance_schema.accounts; select * from performance_schema.cond_instances; select * from performance_schema.events_stages_current; diff --git a/mysql-test/suite/perfschema/r/start_server_no_transactions_history_long.result b/mysql-test/suite/perfschema/r/start_server_no_transactions_history_long.result index a96946997321..c9598b25a798 100644 --- a/mysql-test/suite/perfschema/r/start_server_no_transactions_history_long.result +++ b/mysql-test/suite/perfschema/r/start_server_no_transactions_history_long.result @@ -18,6 +18,8 @@ count(*) > 4 select count(*) from performance_schema.setup_timers; count(*) 5 +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. select * from performance_schema.accounts; select * from performance_schema.cond_instances; select * from performance_schema.events_stages_current; diff --git a/mysql-test/suite/perfschema/r/start_server_no_user.result b/mysql-test/suite/perfschema/r/start_server_no_user.result index 6fd1b588d20c..cf8b406fd167 100644 --- a/mysql-test/suite/perfschema/r/start_server_no_user.result +++ b/mysql-test/suite/perfschema/r/start_server_no_user.result @@ -18,6 +18,8 @@ count(*) > 4 select count(*) from performance_schema.setup_timers; count(*) 5 +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. select * from performance_schema.accounts; select * from performance_schema.cond_instances; select * from performance_schema.events_stages_current; diff --git a/mysql-test/suite/perfschema/r/start_server_no_waits_history.result b/mysql-test/suite/perfschema/r/start_server_no_waits_history.result index 0a7ced9ce2d3..031f6fd666a5 100644 --- a/mysql-test/suite/perfschema/r/start_server_no_waits_history.result +++ b/mysql-test/suite/perfschema/r/start_server_no_waits_history.result @@ -18,6 +18,8 @@ count(*) > 4 select count(*) from performance_schema.setup_timers; count(*) 5 +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. select * from performance_schema.accounts; select * from performance_schema.cond_instances; select * from performance_schema.events_stages_current; diff --git a/mysql-test/suite/perfschema/r/start_server_no_waits_history_long.result b/mysql-test/suite/perfschema/r/start_server_no_waits_history_long.result index 2c035bd6a63b..6f3a1857e8a7 100644 --- a/mysql-test/suite/perfschema/r/start_server_no_waits_history_long.result +++ b/mysql-test/suite/perfschema/r/start_server_no_waits_history_long.result @@ -18,6 +18,8 @@ count(*) > 4 select count(*) from performance_schema.setup_timers; count(*) 5 +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. select * from performance_schema.accounts; select * from performance_schema.cond_instances; select * from performance_schema.events_stages_current; diff --git a/mysql-test/suite/perfschema/r/start_server_nothing.result b/mysql-test/suite/perfschema/r/start_server_nothing.result index c6f193555951..7be6be09ba86 100644 --- a/mysql-test/suite/perfschema/r/start_server_nothing.result +++ b/mysql-test/suite/perfschema/r/start_server_nothing.result @@ -18,6 +18,8 @@ count(*) > 4 select count(*) from performance_schema.setup_timers; count(*) 5 +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. select * from performance_schema.accounts; select * from performance_schema.cond_instances; select * from performance_schema.events_stages_current; @@ -304,6 +306,8 @@ wait stage statement transaction +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. select * from performance_schema.accounts; USER HOST CURRENT_CONNECTIONS TOTAL_CONNECTIONS select * from performance_schema.cond_instances; diff --git a/mysql-test/suite/perfschema/r/start_server_off.result b/mysql-test/suite/perfschema/r/start_server_off.result index 263f06125c26..34ef1183e195 100644 --- a/mysql-test/suite/perfschema/r/start_server_off.result +++ b/mysql-test/suite/perfschema/r/start_server_off.result @@ -18,6 +18,8 @@ count(*) > 4 select count(*) from performance_schema.setup_timers; count(*) 0 +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. select * from performance_schema.accounts; select * from performance_schema.cond_instances; select * from performance_schema.events_stages_current; @@ -197,6 +199,8 @@ select * from performance_schema.setup_objects; OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME ENABLED TIMED select * from performance_schema.setup_timers; NAME TIMER_NAME +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. insert into performance_schema.setup_objects values ('TABLE', 'myschema', 'myobject', 'YES', 'YES'); ERROR HY000: Invalid performance_schema usage. insert into performance_schema.setup_actors values ('myhost', 'mysuser', 'myrole', 'YES', 'YES'); diff --git a/mysql-test/suite/perfschema/r/start_server_on.result b/mysql-test/suite/perfschema/r/start_server_on.result index 0c297f767de6..116bbbcfb462 100644 --- a/mysql-test/suite/perfschema/r/start_server_on.result +++ b/mysql-test/suite/perfschema/r/start_server_on.result @@ -18,6 +18,8 @@ count(*) > 4 select count(*) from performance_schema.setup_timers; count(*) 5 +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. select * from performance_schema.accounts; select * from performance_schema.cond_instances; select * from performance_schema.events_stages_current; diff --git a/mysql-test/suite/perfschema/r/statement_program_lost_inst.result b/mysql-test/suite/perfschema/r/statement_program_lost_inst.result index bf067163464b..6cbc50579dcb 100644 --- a/mysql-test/suite/perfschema/r/statement_program_lost_inst.result +++ b/mysql-test/suite/perfschema/r/statement_program_lost_inst.result @@ -18,6 +18,8 @@ count(*) > 4 select count(*) from performance_schema.setup_timers; count(*) 5 +Warnings: +Warning 1681 'performance_schema.setup_timers' is deprecated and will be removed in a future release. select * from performance_schema.accounts; select * from performance_schema.cond_instances; select * from performance_schema.events_stages_current; diff --git a/storage/perfschema/table_setup_timers.cc b/storage/perfschema/table_setup_timers.cc index f04aaf7e832f..d5abcdeb6f66 100644 --- a/storage/perfschema/table_setup_timers.cc +++ b/storage/perfschema/table_setup_timers.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2008, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -24,6 +24,7 @@ #include "pfs_column_values.h" #include "pfs_timer.h" #include "field.h" +#include "derror.h" /* ER_THD */ #define COUNT_SETUP_TIMERS 5 @@ -90,6 +91,13 @@ table_setup_timers::m_share= PFS_engine_table* table_setup_timers::create(void) { + THD *thd = current_thd; + push_warning_printf(thd, + Sql_condition::SL_WARNING, + ER_WARN_DEPRECATED_SYNTAX_NO_REPLACEMENT, + ER_THD(thd, ER_WARN_DEPRECATED_SYNTAX_NO_REPLACEMENT), + "performance_schema.setup_timers"); + return new table_setup_timers(); } From 14176f71472c08bcfb613c25b305e2c0b1d786cb Mon Sep 17 00:00:00 2001 From: Balasubramanian Kandasamy Date: Thu, 7 Sep 2017 16:11:15 +0530 Subject: [PATCH 0035/1221] Bug#26742748 - 8.0 DOCKER IMAGE RPM GENERATES 5.7 DOC URL IN /ETC/MY.CNF --- packaging/rpm-docker/my.cnf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/rpm-docker/my.cnf b/packaging/rpm-docker/my.cnf index c1c03c1c668d..4e3cce3e250c 100644 --- a/packaging/rpm-docker/my.cnf +++ b/packaging/rpm-docker/my.cnf @@ -1,5 +1,5 @@ # For advice on how to change settings please see -# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html +# http://dev.mysql.com/doc/refman/5.5/en/server-configuration-defaults.html [mysqld] # From c49ffaa416b4baa5740c30f611203bf94badb017 Mon Sep 17 00:00:00 2001 From: Venkatesh Duggirala Date: Thu, 7 Sep 2017 17:45:57 +0530 Subject: [PATCH 0036/1221] Revert "Bug#26589008 SYNC_BINLOG=0 SHOULD IGNORE BINLOG_GROUP_COMMIT_SYNC_DELAY" This reverts commit 5654f5ec294f3d8ea087029ba9b47ad3eb2835b3. --- .../r/binlog_group_commit_sync_delay.result | 4 -- .../t/binlog_group_commit_sync_delay.test | 42 +++++++------------ sql/binlog.cc | 7 ++-- 3 files changed, 18 insertions(+), 35 deletions(-) diff --git a/mysql-test/suite/binlog/r/binlog_group_commit_sync_delay.result b/mysql-test/suite/binlog/r/binlog_group_commit_sync_delay.result index 703e02b08f92..9783567a99b9 100644 --- a/mysql-test/suite/binlog/r/binlog_group_commit_sync_delay.result +++ b/mysql-test/suite/binlog/r/binlog_group_commit_sync_delay.result @@ -8,10 +8,6 @@ SET GLOBAL sync_binlog=1000; SET @clock_in = SYSDATE(); SET @elapsed = TIMESTAMPDIFF(MICROSECOND, @clock_in, SYSDATE()); include/assert.inc ["Assert that the above statements should not take more than 1000 seconds"] -SET GLOBAL sync_binlog=0; -SET @clock_in = SYSDATE(); -SET @elapsed = TIMESTAMPDIFF(MICROSECOND, @clock_in, SYSDATE()); -include/assert.inc ["Assert that the above statements should not take more than 1000 seconds"] SET GLOBAL binlog_group_commit_sync_delay=0; SET GLOBAL sync_binlog=1; DROP TABLE t1; diff --git a/mysql-test/suite/binlog/t/binlog_group_commit_sync_delay.test b/mysql-test/suite/binlog/t/binlog_group_commit_sync_delay.test index d25e668ec8b0..3f25618ceeca 100644 --- a/mysql-test/suite/binlog/t/binlog_group_commit_sync_delay.test +++ b/mysql-test/suite/binlog/t/binlog_group_commit_sync_delay.test @@ -29,37 +29,23 @@ SET @elapsed = TIMESTAMPDIFF(MICROSECOND, @clock_in, SYSDATE()); # But with fix, it should not take more than few seconds (that depends # on Pb2 machine speed and also depends on various build options too. # -# Do above experiment with two iterations -# 1) When sync_binlog > 1 (i.e., with 1000) -# 2) When sync_binlog = 0 -# --let $group_count=1000 ---let $iter=1 -while ($iter <= 2) +--eval SET GLOBAL sync_binlog=$group_count +--let $i=0 + +SET @clock_in = SYSDATE(); +--disable_query_log +while ($i <= $group_count) { - if ($iter == 1) - { - --eval SET GLOBAL sync_binlog=$group_count - } - if ($iter == 2) - { - --eval SET GLOBAL sync_binlog=0 - } - --let $i=0 - SET @clock_in = SYSDATE(); - --disable_query_log - while ($i <= $group_count) - { - --eval INSERT INTO t1 VALUES ($i) - --inc $i - } - --enable_query_log - SET @elapsed = TIMESTAMPDIFF(MICROSECOND, @clock_in, SYSDATE()); - --let $assert_text="Assert that the above statements should not take more than 1000 seconds" - --let $assert_cond= [SELECT @elapsed < 1000 * @@GLOBAL.binlog_group_commit_sync_delay] - --source include/assert.inc - --inc $iter + --eval INSERT INTO t1 VALUES ($i) + --inc $i } +--enable_query_log +SET @elapsed = TIMESTAMPDIFF(MICROSECOND, @clock_in, SYSDATE()); +--let $assert_text="Assert that the above statements should not take more than 1000 seconds" +--let $assert_cond= [SELECT @elapsed < 1000 * @@GLOBAL.binlog_group_commit_sync_delay] +--source include/assert.inc + # End of Bug#21420180 test # Cleanup diff --git a/sql/binlog.cc b/sql/binlog.cc index 12ca125315a3..9ed72bd8c632 100644 --- a/sql/binlog.cc +++ b/sql/binlog.cc @@ -9157,7 +9157,6 @@ int MYSQL_BIN_LOG::ordered_commit(THD *thd, bool all, bool skip_commit) int flush_error= 0, sync_error= 0; my_off_t total_bytes= 0; bool do_rotate= false; - unsigned int current_sync_period; /* These values are used while flushing a transaction, so clear @@ -9304,9 +9303,11 @@ int MYSQL_BIN_LOG::ordered_commit(THD *thd, bool all, bool skip_commit) Shall introduce a delay only if it is going to do sync in this ongoing SYNC stage. The "+1" used below in the if condition is to count the ongoing sync stage. + When sync_binlog=0 (where we never do sync in BGC group), + it is considered as a special case and delay will be executed + for every group just like how it is done when sync_binlog= 1. */ - current_sync_period= get_sync_period(); - if (!flush_error && current_sync_period && (sync_counter + 1 >= current_sync_period)) + if (!flush_error && (sync_counter + 1 >= get_sync_period())) stage_manager.wait_count_or_timeout(opt_binlog_group_commit_sync_no_delay_count, opt_binlog_group_commit_sync_delay, Stage_manager::SYNC_STAGE); From de3868752fff5354a12ba8dc950d924cab6948ce Mon Sep 17 00:00:00 2001 From: Sreeharsha Ramanavarapu Date: Fri, 8 Sep 2017 06:02:22 +0530 Subject: [PATCH 0037/1221] Bug #26734162: INCORRECT BEHAVIOR WITH INSERT OF BLOB + ON DUPLICATE KEY UPDATE Issue: ------ This problem can occur when : 1) A blob value is updated in INSERT ON DUPLICATE KEY UPDATE statement. This statement fails because of a constraint violation. 2) A statement similar to the one above, but for which the execution is successful. This can result in unexpected behavior. Root cause: ----------- The fix for Bug #25361251 moved clear_values_map() out of lex_end() which is called at the end of every statement and into write_record(). Since the first statement doesn't reach as far as write_record() due to an error, the structures created to hold blob values aren't cleared. Solution: --------- Add a call to clear_values_map() at the end Sql_cmd_insert::mysql_insert(). --- sql/sql_insert.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index 8c505839cd1f..c31837fc068c 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -924,6 +924,7 @@ bool Sql_cmd_insert::mysql_insert(THD *thd,TABLE_LIST *table_list) DBUG_RETURN(FALSE); exit_without_my_ok: + thd->lex->clear_values_map(); if (!joins_freed) free_underlaid_joins(thd, select_lex); DBUG_RETURN(err); From 43632f4cd5f3fc7aaa9a0aa757081725f120c488 Mon Sep 17 00:00:00 2001 From: Anushree Prakash B Date: Fri, 8 Sep 2017 18:29:07 +0530 Subject: [PATCH 0038/1221] Bug#26372491 - RCE THROUGH THE MISHANDLE OF BACKSLASH DESCRIPTION: =========== The bug is related to incorrect parsing of SQL queries when typed in on the CLI. The incorrect parsing can result in unexpected results. ANALYSIS: ======== The scenarios mainly happens for identifier names with a typical combination of backslashes and backticks. The incorrect parsing can either result in executing additional queries or can result in query truncation. This can impact mysqldump as well. FIX: === The fix makes sure that such identifier names are correctly parsed and a proper query is sent to the server for execution. --- client/mysql.cc | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/client/mysql.cc b/client/mysql.cc index d09499c120a3..715d74f18b2f 100644 --- a/client/mysql.cc +++ b/client/mysql.cc @@ -2119,7 +2119,10 @@ static bool add_line(String &buffer,char *line,char *in_string, if (*in_string || inchar == 'N') // \N is short for NULL { // Don't allow commands in string *out++='\\'; - *out++= (char) inchar; + if ((inchar == '`') && (*in_string == inchar)) + pos--; + else + *out++= (char) inchar; continue; } if ((com=find_command(NullS,(char) inchar))) From 332ec6271ac3b330e43064a576af9de6184887d2 Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Fri, 8 Sep 2017 14:58:17 +0200 Subject: [PATCH 0039/1221] Bug#23072792 MYSQL_GROUP_SUFFIX DOES NOT WORK Reintroduce environment variable MYSQL_GROUP_SUFFIX to be used as --default-group-suffix value if not already set. The environment variable was accidentally renamed to DEFAULT_GROUP_SUFFIX_ENV in MySQL server 5.5. --- mysys_ssl/my_default.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mysys_ssl/my_default.cc b/mysys_ssl/my_default.cc index 2bb3df081e48..6250e7008bbb 100644 --- a/mysys_ssl/my_default.cc +++ b/mysys_ssl/my_default.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -267,7 +267,7 @@ int my_search_option_files(const char *conf_file, int *argc, char ***argv, (char **) &my_login_path, found_no_defaults); if (! my_defaults_group_suffix) - my_defaults_group_suffix= getenv(STRINGIFY_ARG(DEFAULT_GROUP_SUFFIX_ENV)); + my_defaults_group_suffix= getenv("MYSQL_GROUP_SUFFIX"); if (forced_extra_defaults && !defaults_already_read) { From d52edb75bbe392fc24f317dabbe4e69245ae993d Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Fri, 8 Sep 2017 16:47:44 +0200 Subject: [PATCH 0040/1221] Bug#23072792 MYSQL_GROUP_SUFFIX DOES NOT WORK Reintroduce environment variable MYSQL_GROUP_SUFFIX to be used as --default-group-suffix value if not already set. The environment variable was accidentally renamed to DEFAULT_GROUP_SUFFIX_ENV in MySQL server 5.5. --- mysys/default.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mysys/default.c b/mysys/default.c index 6fe00af087ea..75274f25edfe 100644 --- a/mysys/default.c +++ b/mysys/default.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -234,7 +234,7 @@ int my_search_option_files(const char *conf_file, int *argc, char ***argv, (char **) &my_defaults_group_suffix); if (! my_defaults_group_suffix) - my_defaults_group_suffix= getenv(STRINGIFY_ARG(DEFAULT_GROUP_SUFFIX_ENV)); + my_defaults_group_suffix= getenv("MYSQL_GROUP_SUFFIX"); if (forced_extra_defaults && !defaults_already_read) { From 7352f13a4952691191f31ec2ad4b004d568734e4 Mon Sep 17 00:00:00 2001 From: Sreeharsha Ramanavarapu Date: Mon, 11 Sep 2017 10:00:04 +0530 Subject: [PATCH 0041/1221] Bug #25989915: LOOSE INDEX SCANS RETURNING WRONG RESULT Problem: -------- This problem occurs under the following conditions: 1) Table has a unique index. 2) Query checks whether a loose index scan is applicable to this query. And mistakenly chooses it despite unique indexes having no index extensions. This is can give wrong results. A similar problem also exists in Bug #26532061. Solution: --------- Index extensions are not applicable to UNIQUE indexes for loose index scans. So Field::is_part_of_actual_key should also consider the HA_NOSAME flag. --- mysql-test/r/group_min_max_innodb.result | 27 ++++++++++++++++++++++++ mysql-test/t/group_min_max_innodb.test | 26 +++++++++++++++++++++++ sql/field.cc | 6 ++++-- sql/field.h | 8 ++++--- sql/opt_range.cc | 2 +- 5 files changed, 63 insertions(+), 6 deletions(-) diff --git a/mysql-test/r/group_min_max_innodb.result b/mysql-test/r/group_min_max_innodb.result index ef4fe64608b8..1684c4843e94 100644 --- a/mysql-test/r/group_min_max_innodb.result +++ b/mysql-test/r/group_min_max_innodb.result @@ -559,3 +559,30 @@ c1 2 10 DROP TABLE t1; +# +# Bug #25989915: LOOSE INDEX SCANS RETURNING WRONG RESULT +# +CREATE TABLE t1 ( +pk INT NOT NULL AUTO_INCREMENT, +c1 varchar(100) DEFAULT NULL, +c2 INT NOT NULL, +PRIMARY KEY (pk), +UNIQUE KEY ukey (c2,c1) +); +INSERT INTO t1(pk, c2) VALUES (100, 0), (101, 0), (102, 0), (103, 0); +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +EXPLAIN SELECT COUNT(DISTINCT(c2)) FROM t1 WHERE pk IN (102, 101); +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 index PRIMARY,ukey ukey 107 NULL 4 Using where; Using index +EXPLAIN SELECT COUNT(DISTINCT(c2)) FROM t1 WHERE pk IN (102, 100); +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 index PRIMARY,ukey ukey 107 NULL 4 Using where; Using index +SELECT COUNT(DISTINCT(c2)) FROM t1 WHERE pk IN (102, 101); +COUNT(DISTINCT(c2)) +1 +SELECT COUNT(DISTINCT(c2)) FROM t1 WHERE pk IN (102, 100); +COUNT(DISTINCT(c2)) +1 +DROP TABLE t1; diff --git a/mysql-test/t/group_min_max_innodb.test b/mysql-test/t/group_min_max_innodb.test index c41f2a6f1f78..c20dc5dc8075 100644 --- a/mysql-test/t/group_min_max_innodb.test +++ b/mysql-test/t/group_min_max_innodb.test @@ -419,3 +419,29 @@ eval $query4; eval $query5; DROP TABLE t1; + +--echo # +--echo # Bug #25989915: LOOSE INDEX SCANS RETURNING WRONG RESULT +--echo # + +CREATE TABLE t1 ( + pk INT NOT NULL AUTO_INCREMENT, + c1 varchar(100) DEFAULT NULL, + c2 INT NOT NULL, + PRIMARY KEY (pk), + UNIQUE KEY ukey (c2,c1) +); + +INSERT INTO t1(pk, c2) VALUES (100, 0), (101, 0), (102, 0), (103, 0); +ANALYZE TABLE t1; + +let query1= SELECT COUNT(DISTINCT(c2)) FROM t1 WHERE pk IN (102, 101); +let query2= SELECT COUNT(DISTINCT(c2)) FROM t1 WHERE pk IN (102, 100); + +eval EXPLAIN $query1; +eval EXPLAIN $query2; + +eval $query1; +eval $query2; + +DROP TABLE t1; diff --git a/sql/field.cc b/sql/field.cc index 9ee8847d87c9..d6f93a5b4986 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -10616,9 +10616,11 @@ Field_temporal::set_datetime_warning(Sql_condition::enum_warning_level level, make_truncated_value_warning(thd, level, val, ts_type, field_name); } -bool Field::is_part_of_actual_key(THD *thd, uint cur_index) +bool Field::is_part_of_actual_key(THD *thd, uint cur_index, KEY *cur_index_info) { - return thd->optimizer_switch_flag(OPTIMIZER_SWITCH_USE_INDEX_EXTENSIONS) ? + return + thd->optimizer_switch_flag(OPTIMIZER_SWITCH_USE_INDEX_EXTENSIONS) && + !(cur_index_info->flags & HA_NOSAME) ? part_of_key.is_set(cur_index) : part_of_key_not_extended.is_set(cur_index); } diff --git a/sql/field.h b/sql/field.h index e5f82aba7640..52021a2f4861 100644 --- a/sql/field.h +++ b/sql/field.h @@ -1,7 +1,7 @@ #ifndef FIELD_INCLUDED #define FIELD_INCLUDED -/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -1254,16 +1254,18 @@ class Field /** Check whether field is part of the index taking the index extensions flag - into account. + into account. Index extensions are also not applicable to UNIQUE indexes + for loose index scans. @param[in] thd THD object @param[in] cur_index Index of the key + @param[in] cur_index_info key_info object @retval true Field is part of the key @retval false otherwise */ - bool is_part_of_actual_key(THD *thd, uint cur_index); + bool is_part_of_actual_key(THD *thd, uint cur_index, KEY *cur_index_info); friend int cre_myisam(char * name, register TABLE *form, uint options, ulonglong auto_increment_value); diff --git a/sql/opt_range.cc b/sql/opt_range.cc index 87248f978305..591beed4b670 100644 --- a/sql/opt_range.cc +++ b/sql/opt_range.cc @@ -11619,7 +11619,7 @@ get_best_group_min_max(PARAM *param, SEL_TREE *tree, double read_time) part of 'cur_index' */ if (bitmap_is_set(table->read_set, cur_field->field_index) && - !cur_field->is_part_of_actual_key(thd, cur_index)) + !cur_field->is_part_of_actual_key(thd, cur_index, cur_index_info)) { cause= "not_covering"; goto next_index; // Field was not part of key From cf3fe5a2df36794428aad511c6e7f0985b72ced7 Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Wed, 13 Sep 2017 12:14:06 +0530 Subject: [PATCH 0042/1221] From a08a6a554e8d7664fec4597992fb4ae77024ad2b Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Fri, 8 Sep 2017 17:44:34 +0200 Subject: [PATCH 0043/1221] Backport some additional GenError dependencies --- client/CMakeLists.txt | 4 ++-- extra/CMakeLists.txt | 3 ++- storage/innobase/CMakeLists.txt | 4 +++- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/client/CMakeLists.txt b/client/CMakeLists.txt index d24555a5d563..626947753767 100644 --- a/client/CMakeLists.txt +++ b/client/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2006, 2015, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 2017, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -40,7 +40,7 @@ ENDIF(UNIX) MYSQL_ADD_EXECUTABLE(mysqltest mysqltest.cc COMPONENT Test) SET_SOURCE_FILES_PROPERTIES(mysqltest.cc PROPERTIES COMPILE_FLAGS "-DTHREADS") TARGET_LINK_LIBRARIES(mysqltest mysqlclient regex) - +ADD_DEPENDENCIES(mysqltest GenError) MYSQL_ADD_EXECUTABLE(mysqlcheck mysqlcheck.c) TARGET_LINK_LIBRARIES(mysqlcheck mysqlclient) diff --git a/extra/CMakeLists.txt b/extra/CMakeLists.txt index 886691a07d7e..ceea41405c94 100644 --- a/extra/CMakeLists.txt +++ b/extra/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2006, 2015, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 2017, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -95,6 +95,7 @@ IF(WITH_INNOBASE_STORAGE_ENGINE) ) MYSQL_ADD_EXECUTABLE(innochecksum innochecksum.cc ${INNOBASE_SOURCES}) TARGET_LINK_LIBRARIES(innochecksum mysys mysys_ssl) + ADD_DEPENDENCIES(innochecksum GenError) ENDIF() IF(UNIX) diff --git a/storage/innobase/CMakeLists.txt b/storage/innobase/CMakeLists.txt index 2e939899d24a..1177256b3662 100644 --- a/storage/innobase/CMakeLists.txt +++ b/storage/innobase/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2006, 2015, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 2017, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -450,3 +450,5 @@ MYSQL_ADD_PLUGIN(innobase ${INNOBASE_SOURCES} STORAGE_ENGINE DEFAULT MODULE_OUTPUT_NAME ha_innodb LINK_LIBRARIES ${ZLIB_LIBRARY}) + +ADD_DEPENDENCIES(innobase GenError) From 3e62de32b1e696a471209ef4ccdb939a6e1c0396 Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Tue, 12 Sep 2017 12:28:35 +0200 Subject: [PATCH 0044/1221] Log cmake message if we have found openssl .dll libraries on windows. --- cmake/ssl.cmake | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/cmake/ssl.cmake b/cmake/ssl.cmake index 8108f90429c5..a576acbfac4d 100644 --- a/cmake/ssl.cmake +++ b/cmake/ssl.cmake @@ -1,4 +1,4 @@ -# Copyright (c) 2009, 2015, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2009, 2017, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -269,7 +269,9 @@ MACRO (COPY_OPENSSL_DLLS target_name) GET_FILENAME_COMPONENT(OPENSSL_NAME "${OPENSSL_LIBRARY}" NAME_WE) FILE(GLOB HAVE_CRYPTO_DLL "${WITH_SSL_PATH}/bin/${CRYPTO_NAME}.dll") FILE(GLOB HAVE_OPENSSL_DLL "${WITH_SSL_PATH}/bin/${OPENSSL_NAME}.dll") - IF (HAVE_CRYPTO_DLL AND HAVE_OPENSSL_DLL) + MESSAGE(STATUS "HAVE_CRYPTO_DLL ${HAVE_CRYPTO_DLL}") + MESSAGE(STATUS "HAVE_OPENSSL_DLL ${HAVE_OPENSSL_DLL}") + IF(HAVE_CRYPTO_DLL AND HAVE_OPENSSL_DLL) ADD_CUSTOM_COMMAND(OUTPUT ${target_name} COMMAND ${CMAKE_COMMAND} -E copy_if_different "${WITH_SSL_PATH}/bin/${CRYPTO_NAME}.dll" From 13548570a25b9ea3131bbea46b934b303c53dda3 Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Wed, 13 Sep 2017 09:52:48 +0200 Subject: [PATCH 0045/1221] dos2unix cmake/mysql_add_executable.cmake --- cmake/mysql_add_executable.cmake | 96 ++++++++++++++++---------------- 1 file changed, 48 insertions(+), 48 deletions(-) diff --git a/cmake/mysql_add_executable.cmake b/cmake/mysql_add_executable.cmake index b1e1d3129e6c..bcbbe7d4931c 100644 --- a/cmake/mysql_add_executable.cmake +++ b/cmake/mysql_add_executable.cmake @@ -1,48 +1,48 @@ -# Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Add executable plus some additional MySQL specific stuff -# Usage (same as for standard CMake's ADD_EXECUTABLE) -# -# MYSQL_ADD_EXECUTABLE(target source1...sourceN) -# -# MySQL specifics: -# - instruct CPack to install executable under ${CMAKE_INSTALL_PREFIX}/bin directory -# On Windows : -# - add version resource -# - instruct CPack to do autenticode signing if SIGNCODE is set - -INCLUDE(cmake_parse_arguments) - -FUNCTION (MYSQL_ADD_EXECUTABLE) - # Pass-through arguments for ADD_EXECUTABLE - MYSQL_PARSE_ARGUMENTS(ARG - "WIN32;MACOSX_BUNDLE;EXCLUDE_FROM_ALL;DESTINATION;COMPONENT" - "" - ${ARGN} - ) - LIST(GET ARG_DEFAULT_ARGS 0 target) - LIST(REMOVE_AT ARG_DEFAULT_ARGS 0) - - SET(sources ${ARG_DEFAULT_ARGS}) - ADD_VERSION_INFO(${target} EXECUTABLE sources) - ADD_EXECUTABLE(${target} ${ARG_WIN32} ${ARG_MACOSX_BUNDLE} ${ARG_EXCLUDE_FROM_ALL} ${sources}) - # tell CPack where to install - IF(NOT ARG_EXCLUDE_FROM_ALL) - IF(NOT ARG_DESTINATION) - SET(ARG_DESTINATION ${INSTALL_BINDIR}) +# Copyright (c) 2009, 2017, Oracle and/or its affiliates. All rights reserved. +# +# 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 + +# Add executable plus some additional MySQL specific stuff +# Usage (same as for standard CMake's ADD_EXECUTABLE) +# +# MYSQL_ADD_EXECUTABLE(target source1...sourceN) +# +# MySQL specifics: +# - instruct CPack to install executable under ${CMAKE_INSTALL_PREFIX}/bin directory +# On Windows : +# - add version resource +# - instruct CPack to do autenticode signing if SIGNCODE is set + +INCLUDE(cmake_parse_arguments) + +FUNCTION (MYSQL_ADD_EXECUTABLE) + # Pass-through arguments for ADD_EXECUTABLE + MYSQL_PARSE_ARGUMENTS(ARG + "WIN32;MACOSX_BUNDLE;EXCLUDE_FROM_ALL;DESTINATION;COMPONENT" + "" + ${ARGN} + ) + LIST(GET ARG_DEFAULT_ARGS 0 target) + LIST(REMOVE_AT ARG_DEFAULT_ARGS 0) + + SET(sources ${ARG_DEFAULT_ARGS}) + ADD_VERSION_INFO(${target} EXECUTABLE sources) + ADD_EXECUTABLE(${target} ${ARG_WIN32} ${ARG_MACOSX_BUNDLE} ${ARG_EXCLUDE_FROM_ALL} ${sources}) + # tell CPack where to install + IF(NOT ARG_EXCLUDE_FROM_ALL) + IF(NOT ARG_DESTINATION) + SET(ARG_DESTINATION ${INSTALL_BINDIR}) ENDIF() IF(ARG_COMPONENT) SET(COMP COMPONENT ${ARG_COMPONENT}) @@ -50,7 +50,7 @@ FUNCTION (MYSQL_ADD_EXECUTABLE) SET(COMP COMPONENT ${MYSQL_INSTALL_COMPONENT}) ELSE() SET(COMP COMPONENT Client) - ENDIF() - MYSQL_INSTALL_TARGETS(${target} DESTINATION ${ARG_DESTINATION} ${COMP}) - ENDIF() + ENDIF() + MYSQL_INSTALL_TARGETS(${target} DESTINATION ${ARG_DESTINATION} ${COMP}) + ENDIF() ENDFUNCTION() From 5ac61b2af0cf37eeed5050a91819d6d273f037a5 Mon Sep 17 00:00:00 2001 From: Anushree Prakash B Date: Fri, 8 Sep 2017 18:29:07 +0530 Subject: [PATCH 0046/1221] Bug#26372491 - RCE THROUGH THE MISHANDLE OF BACKSLASH DESCRIPTION: =========== The bug is related to incorrect parsing of SQL queries when typed in on the CLI. The incorrect parsing can result in unexpected results. ANALYSIS: ======== The scenarios mainly happens for identifier names with a typical combination of backslashes and backticks. The incorrect parsing can either result in executing additional queries or can result in query truncation. This can impact mysqldump as well. FIX: === The fix makes sure that such identifier names are correctly parsed and a proper query is sent to the server for execution. (cherry picked from commit 31a372aa1c2b93dc75267d1f05a7f7fca6080dc0) --- client/mysql.cc | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/client/mysql.cc b/client/mysql.cc index d09499c120a3..715d74f18b2f 100644 --- a/client/mysql.cc +++ b/client/mysql.cc @@ -2119,7 +2119,10 @@ static bool add_line(String &buffer,char *line,char *in_string, if (*in_string || inchar == 'N') // \N is short for NULL { // Don't allow commands in string *out++='\\'; - *out++= (char) inchar; + if ((inchar == '`') && (*in_string == inchar)) + pos--; + else + *out++= (char) inchar; continue; } if ((com=find_command(NullS,(char) inchar))) From 1da916c37e5107b27297fc9e22c3da7772bb097d Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Wed, 13 Sep 2017 12:14:06 +0530 Subject: [PATCH 0047/1221] From 955b65ce92359548ff7c4c3c7327d2330cbda2c5 Mon Sep 17 00:00:00 2001 From: Anushree Prakash B Date: Fri, 8 Sep 2017 18:30:57 +0530 Subject: [PATCH 0048/1221] Merge branch 'mysql-5.5' into mysql-5.6 (cherry picked from commit c25e5c808ba2957db29a319acd4751bf74864584) --- client/mysql.cc | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/client/mysql.cc b/client/mysql.cc index 71fba6a9d9da..dc4c3d03e09b 100644 --- a/client/mysql.cc +++ b/client/mysql.cc @@ -2400,7 +2400,10 @@ static bool add_line(String &buffer, char *line, ulong line_length, if (*in_string || inchar == 'N') // \N is short for NULL { // Don't allow commands in string *out++='\\'; - *out++= (char) inchar; + if ((inchar == '`') && (*in_string == inchar)) + pos--; + else + *out++= (char) inchar; continue; } if ((com= find_command((char) inchar))) From 38e2b4d1fe7564b8e1a0d0f0eeb7f542d0d534b6 Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Wed, 13 Sep 2017 12:17:36 +0530 Subject: [PATCH 0049/1221] From 09fdfad50764ff6809e7dd5300e9ce1ab727b62a Mon Sep 17 00:00:00 2001 From: Shivashankar Nagaraj Date: Thu, 14 Sep 2017 16:19:57 +0530 Subject: [PATCH 0050/1221] BUG#26495791: CONTRIBUTION: EXPAND TEST SUITE TO INCLUDE CRC32 TESTS Description: This bug tracks a contribution by Daniel Black (Github user: grooverdan) as described in http://github.com/mysql/mysql-server/pull/157 Apart from external contribution I have added few more additional testcases for CRC32() function, which are given below. New Testcases added: ->Verify the crc value of various numeric and string data types(int, double, blob, text, json, enum, set) ->Verify the crc value when expressions having comparison_operators and logical_operators ->Verify the crc value for the expression having string_functions, arithmetic_functions, json_functions ->Verify the crc value for the expression having Geometry functions like POINT, LINESTRING, MULTILINESTRING, POLYGON, MULTIPOLYGON ->Verify the crc value generated from stored procedures, functions, triggers, prepare statement, views. Fix: Patch based on contribution by Daniel Black (Github user: grooverdan) Reviewed-by: Anitha Gopi anitha.gopi@oracle.com Reviewed-by: Srikanth B R srikanth.b.r@oracle.com RB: 17294 --- mysql-test/r/func_math.result | 388 ++++++++++++++++++++++++++++++++++ mysql-test/t/func_math.test | 236 +++++++++++++++++++++ 2 files changed, 624 insertions(+) diff --git a/mysql-test/r/func_math.result b/mysql-test/r/func_math.result index 5de4711c38b9..4d356a001425 100644 --- a/mysql-test/r/func_math.result +++ b/mysql-test/r/func_math.result @@ -953,3 +953,391 @@ number Round(number, num_digits) > 0 Round(number, 3) > 0 1 1 1 0 0 0 DROP PROCEDURE test_round_fn; +# +# Bug#26495791 - EXPAND TEST SUITE TO INCLUDE CRC32 TESTS +# +SELECT CRC32(NULL), CRC32(''), CRC32('MySQL'), CRC32('mysql'); +CRC32(NULL) CRC32('') CRC32('MySQL') CRC32('mysql') +NULL 0 3259397556 2501908538 +SELECT CRC32('01234567'), CRC32('012345678'); +CRC32('01234567') CRC32('012345678') +763378421 939184570 +SELECT CRC32('~!@$%^*'), CRC32('-0.0001'); +CRC32('~!@$%^*') CRC32('-0.0001') +1533935548 324352530 +SELECT CRC32(99999999999999999999999999999999); +CRC32(99999999999999999999999999999999) +3035957051 +SELECT CRC32(-99999999999999999999999999999999); +CRC32(-99999999999999999999999999999999) +1052326872 +DROP TABLE IF EXISTS t; +Warnings: +Note 1051 Unknown table 'test.t' +CREATE TABLE t(a INT, b VARCHAR(2)); +INSERT INTO t VALUES (1,'a'), (2,'qw'), (1,'t'), (3,'t'); +SELECT crc32(SUM(a)) FROM t; +crc32(SUM(a)) +1790921346 +SELECT crc32(AVG(a)) FROM t GROUP BY b; +crc32(AVG(a)) +768278432 +2875100430 +2875100430 +SELECT crc32(MAX(b)) FROM t GROUP BY a; +crc32(MAX(b)) +2238339752 +3114057431 +2238339752 +SELECT a, b, crc32(a) FROM t GROUP BY a,b HAVING crc32(MAX(a))=450215437; +a b crc32(a) +2 qw 450215437 +SELECT a,b,concat(a,b),crc32(concat(a,b)) FROM t ORDER BY crc32(concat(a,b)); +a b concat(a,b) crc32(concat(a,b)) +2 qw 2qw 552289476 +1 a 1a 3174122627 +1 t 1t 3505168488 +3 t 3t 3805987562 +DROP TABLE t; +SELECT CRC32(4+2); +CRC32(4+2) +498629140 +SELECT CRC32(4/2); +CRC32(4/2) +2875100430 +SELECT CRC32(4-2); +CRC32(4-2) +450215437 +SELECT CRC32(4*2); +CRC32(4*2) +4194326291 +SELECT CRC32(ABS(-6)); +CRC32(ABS(-6)) +498629140 +SELECT CRC32(CEILING(1.23)); +CRC32(CEILING(1.23)) +450215437 +SELECT CRC32(FLOOR(1.23)); +CRC32(FLOOR(1.23)) +2212294583 +SELECT CRC32(LOG(10,100)); +CRC32(LOG(10,100)) +450215437 +SELECT CRC32(PI()); +CRC32(PI()) +2969982827 +SELECT CRC32(POWER(2,2)); +CRC32(POWER(2,2)) +4088798008 +SELECT CRC32(ROUND(1.58)); +CRC32(ROUND(1.58)) +450215437 +SELECT CRC32(SIGN(0)); +CRC32(SIGN(0)) +4108050209 +SELECT CRC32(SQRT(4)); +CRC32(SQRT(4)) +450215437 +SELECT CRC32(2 > 4); +CRC32(2 > 4) +4108050209 +SELECT CRC32(2 < 4); +CRC32(2 < 4) +2212294583 +SELECT CRC32(2 >= 4); +CRC32(2 >= 4) +4108050209 +SELECT CRC32(2 <= 4); +CRC32(2 <= 4) +2212294583 +SELECT CRC32(2 != 4); +CRC32(2 != 4) +2212294583 +SELECT CRC32(NOT 1); +CRC32(NOT 1) +4108050209 +SELECT CRC32(1 AND 1); +CRC32(1 AND 1) +2212294583 +SELECT CRC32(1 OR 1); +CRC32(1 OR 1) +2212294583 +SELECT CRC32(1 XOR 1); +CRC32(1 XOR 1) +4108050209 +SELECT CRC32(ASCII('2')); +CRC32(ASCII('2')) +3308380389 +SELECT CRC32(BIT_LENGTH('text')); +CRC32(BIT_LENGTH('text')) +2103780943 +SELECT CRC32(CHAR('77','121','83','81','76')); +CRC32(CHAR('77','121','83','81','76')) +3259397556 +SELECT CRC32(CONCAT('good','year')); +CRC32(CONCAT('good','year')) +3441724142 +SELECT CRC32(INSERT('foodyear', 1, 4, 'good')); +CRC32(INSERT('foodyear', 1, 4, 'good')) +3441724142 +SELECT CRC32(LEFT('goodyear', 4)); +CRC32(LEFT('goodyear', 4)) +1820610194 +SELECT CRC32(LENGTH('text')); +CRC32(LENGTH('text')) +4088798008 +SELECT CRC32(LOWER('GOODYEAR')); +CRC32(LOWER('GOODYEAR')) +3441724142 +SELECT CRC32(UPPER('goodyear')); +CRC32(UPPER('goodyear')) +186062498 +SELECT CRC32(LTRIM(' goodyear')); +CRC32(LTRIM(' goodyear')) +3441724142 +SELECT CRC32(RTRIM('goodyear ')); +CRC32(RTRIM('goodyear ')) +3441724142 +SELECT CRC32(REPLACE('godyear','o','oo')); +CRC32(REPLACE('godyear','o','oo')) +3441724142 +SELECT CRC32(REVERSE('goodyear')); +CRC32(REVERSE('goodyear')) +3423698264 +SELECT CRC32(true); +CRC32(true) +2212294583 +SELECT CRC32(false); +CRC32(false) +4108050209 +DROP TABLE IF EXISTS t1; +Warnings: +Note 1051 Unknown table 'test.t1' +CREATE TABLE t1 (c1 BIT(5), +c2 TINYINT, +c3 MEDIUMINT, +c4 INTEGER, +c5 BIGINT, +c6 DECIMAL(7,5), +c7 FLOAT(7,5), +c8 DOUBLE(7,5)); +INSERT INTO t1 VALUES (B'10101', 127, 8388607, 2147483647, +9223372036854775807, 10.5, 11.5, 12.5); +SELECT CRC32(c1) FROM t1; +CRC32(c1) +3219065702 +SELECT CRC32(c2) FROM t1; +CRC32(c2) +2401609675 +SELECT CRC32(c3) FROM t1; +CRC32(c3) +1742563487 +SELECT CRC32(c4) FROM t1; +CRC32(c4) +365954768 +SELECT CRC32(c5) FROM t1; +CRC32(c5) +1122634462 +SELECT CRC32(c6) FROM t1; +CRC32(c6) +4255015174 +SELECT CRC32(c7) FROM t1; +CRC32(c7) +1542023858 +SELECT CRC32(c8) FROM t1; +CRC32(c8) +1778479151 +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 (c1 DATE, +c2 DATETIME, +c3 TIMESTAMP, +c4 TIME, +c5 YEAR); +INSERT INTO t1 VALUES ('2007-01-01', '2007-01-01 12:00:01', +'2007-01-01 00:00:01.000000', +'12:00:01.000000', '2007'); +SELECT CRC32(c1) FROM t1; +CRC32(c1) +2772295888 +SELECT CRC32(c2) FROM t1; +CRC32(c2) +1449026401 +SELECT CRC32(c3) FROM t1; +CRC32(c3) +225145558 +SELECT CRC32(c4) FROM t1; +CRC32(c4) +1077283474 +SELECT CRC32(c5) FROM t1; +CRC32(c5) +955685210 +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 (c1 CHAR, +c2 VARCHAR(10), +c3 BINARY(1), +c4 VARBINARY(10), +c5 TINYBLOB, +c6 TINYTEXT, +c7 BLOB, +c8 TEXT, +c9 MEDIUMBLOB, +c10 MEDIUMTEXT, +c11 LONGBLOB, +c12 LONGTEXT); +INSERT INTO t1 VALUES ('a', 'a', 0x61, 0x61, 'a', 'a', +'a', 'a', 'a', 'a', 'a', 'a'); +SELECT CRC32(c1) FROM t1; +CRC32(c1) +3904355907 +SELECT CRC32(c2) FROM t1; +CRC32(c2) +3904355907 +SELECT CRC32(c3) FROM t1; +CRC32(c3) +3904355907 +SELECT CRC32(c4) FROM t1; +CRC32(c4) +3904355907 +SELECT CRC32(c5) FROM t1; +CRC32(c5) +3904355907 +SELECT CRC32(c6) FROM t1; +CRC32(c6) +3904355907 +SELECT CRC32(c7) FROM t1; +CRC32(c7) +3904355907 +SELECT CRC32(c8) FROM t1; +CRC32(c8) +3904355907 +SELECT CRC32(c9) FROM t1; +CRC32(c9) +3904355907 +SELECT CRC32(c10) FROM t1; +CRC32(c10) +3904355907 +SELECT CRC32(c11) FROM t1; +CRC32(c11) +3904355907 +SELECT CRC32(c12) FROM t1; +CRC32(c12) +3904355907 +SELECT CRC32(ST_GeomFromText('POINT(1 1)')); +CRC32(ST_GeomFromText('POINT(1 1)')) +1349318989 +CREATE TABLE geom_data(id INT, +pt POINT NOT NULL, +lnstr LINESTRING NOT NULL, +mlnstr MULTILINESTRING NOT NULL, +poly POLYGON NOT NULL, +mpoly MULTIPOLYGON NOT NULL); +INSERT INTO geom_data VALUES (10, +ST_GEOMFROMTEXT('POINT(10 20)'), +ST_GEOMFROMTEXT('LINESTRING(0 0,5 5,6 6)'), +ST_GEOMFROMTEXT('MULTILINESTRING((0 0,2 3,4 5),(6 6,8 8,9 9,10 10))'), +ST_GEOMFROMTEXT('POLYGON((0 0,6 7,8 8,3 9,0 0),(3 6,4 6,4 7,3 6))'), +ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,0 5,5 5,5 0,0 0)), + ((2 2,4 5,6 2,2 2)))')); +SELECT CRC32(ST_X(pt)) FROM geom_data; +CRC32(ST_X(pt)) +2707236321 +SELECT CRC32(ST_NumPoints((lnstr))) FROM geom_data; +CRC32(ST_NumPoints((lnstr))) +1842515611 +SELECT CRC32(ST_Length((mlnstr))) FROM geom_data; +CRC32(ST_Length((mlnstr))) +2090153432 +SELECT CRC32(ST_Area((poly))) FROM geom_data; +CRC32(ST_Area((poly))) +534598600 +SELECT CRC32(ST_Area((mpoly))) FROM geom_data; +CRC32(ST_Area((mpoly))) +3832313845 +DROP TABLE geom_data; +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 (e1 ENUM ('a','b'), s1 SET('a','b')); +INSERT INTO t1 VALUES(2,'a,b'),('a','b,a'); +SELECT e1, CRC32(e1) FROM t1; +e1 CRC32(e1) +b 1908338681 +a 3904355907 +SELECT s1, CRC32(s1) FROM t1; +s1 CRC32(s1) +a,b 752423903 +a,b 752423903 +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 (a JSON); +INSERT INTO t1 VALUES ('{"name" : "goodyear"}'), +('{"name" : "verygood-year"}'); +SELECT a->>'$.name', CRC32(a) FROM t1; +a->>'$.name' CRC32(a) +goodyear 3664432072 +verygood-year 922278888 +SELECT CRC32(a->>'$.name') FROM t1 WHERE a->>'$.name' = 'goodyear'; +CRC32(a->>'$.name') +3441724142 +SELECT CRC32(REPLACE(JSON_EXTRACT(a, "$.name"),'\"','')) +FROM t1 WHERE JSON_EXTRACT(a, "$.name") = 'goodyear'; +CRC32(REPLACE(JSON_EXTRACT(a, "$.name"),'\"','')) +3441724142 +DROP TABLE t1; +CREATE TABLE t1 (a INT); +INSERT INTO t1 VALUES(10); +CREATE VIEW v1 AS SELECT CRC32(a) AS my_crc FROM t1; +SELECT * FROM v1; +my_crc +2707236321 +SELECT CRC32(CRC32(my_crc)) FROM v1; +CRC32(CRC32(my_crc)) +3114155452 +DROP VIEW v1; +DROP TABLE t1; +CREATE TABLE t1 (a CHAR); +CREATE TABLE t2 (b BIGINT); +CREATE TRIGGER trg1 +BEFORE INSERT ON t1 +FOR EACH ROW +INSERT INTO t2 VALUES(CRC32(NEW.a)); +INSERT INTO t1 VALUES('a'); +SELECT * FROM t2; +b +3904355907 +DROP TRIGGER trg1; +DROP TABLE t2; +DROP TABLE t1; +CREATE PROCEDURE crc32_proc (IN a CHAR, OUT b BIGINT) +SELECT CRC32(a) INTO b; +CALL crc32_proc('a',@val); +SELECT @val; +@val +3904355907 +DROP PROCEDURE crc32_proc; +CREATE FUNCTION crc32_func(inputvar CHAR) +RETURNS BIGINT +BEGIN +DECLARE crcval BIGINT; +SELECT CRC32(inputvar) INTO crcval; +RETURN crcval; +END| +SELECT crc32_func('a'); +crc32_func('a') +3904355907 +DROP FUNCTION crc32_func; +PREPARE stmt1 FROM 'SELECT CRC32(?)'; +SET @val = 'a'; +EXECUTE stmt1 USING @val; +CRC32(?) +3904355907 +DEALLOCATE PREPARE stmt; +CREATE TABLE t1 (a TEXT) CHARACTER SET = utf8; +LOAD DATA INFILE '../../std_data/loaddata_utf8.dat' INTO TABLE t1; +SELECT a, CRC32(a) from t1; +a CRC32(a) +一二三 4127018387 +四五六 1229003783 +七八九 1497131859 +一二三 4127018387 +四五六 1229003783 +七八九 + 3236706998 +DROP TABLE t1; diff --git a/mysql-test/t/func_math.test b/mysql-test/t/func_math.test index fc45241e2b33..69695dd195c7 100644 --- a/mysql-test/t/func_math.test +++ b/mysql-test/t/func_math.test @@ -683,3 +683,239 @@ DELIMITER ;| CALL test_round_fn(); DROP PROCEDURE test_round_fn; + + +--echo # +--echo # Bug#26495791 - EXPAND TEST SUITE TO INCLUDE CRC32 TESTS +--echo # + +SELECT CRC32(NULL), CRC32(''), CRC32('MySQL'), CRC32('mysql'); +SELECT CRC32('01234567'), CRC32('012345678'); +SELECT CRC32('~!@$%^*'), CRC32('-0.0001'); +SELECT CRC32(99999999999999999999999999999999); +SELECT CRC32(-99999999999999999999999999999999); + +# Test cases for using the function in aggregate functions, group-by, having +# and order-by clauses +DROP TABLE IF EXISTS t; +CREATE TABLE t(a INT, b VARCHAR(2)); +INSERT INTO t VALUES (1,'a'), (2,'qw'), (1,'t'), (3,'t'); +SELECT crc32(SUM(a)) FROM t; +SELECT crc32(AVG(a)) FROM t GROUP BY b; +SELECT crc32(MAX(b)) FROM t GROUP BY a; +SELECT a, b, crc32(a) FROM t GROUP BY a,b HAVING crc32(MAX(a))=450215437; +SELECT a,b,concat(a,b),crc32(concat(a,b)) FROM t ORDER BY crc32(concat(a,b)); +DROP TABLE t; + +# Test cases for arithmetic operators and functions +SELECT CRC32(4+2); +SELECT CRC32(4/2); +SELECT CRC32(4-2); +SELECT CRC32(4*2); +SELECT CRC32(ABS(-6)); +SELECT CRC32(CEILING(1.23)); +SELECT CRC32(FLOOR(1.23)); +SELECT CRC32(LOG(10,100)); +SELECT CRC32(PI()); +SELECT CRC32(POWER(2,2)); +SELECT CRC32(ROUND(1.58)); +SELECT CRC32(SIGN(0)); +SELECT CRC32(SQRT(4)); + +# Test cases for comparison operators +SELECT CRC32(2 > 4); +SELECT CRC32(2 < 4); +SELECT CRC32(2 >= 4); +SELECT CRC32(2 <= 4); +SELECT CRC32(2 != 4); + +# Test cases for logical operators +SELECT CRC32(NOT 1); +SELECT CRC32(1 AND 1); +SELECT CRC32(1 OR 1); +SELECT CRC32(1 XOR 1); + +# Test cases for string functions +SELECT CRC32(ASCII('2')); +SELECT CRC32(BIT_LENGTH('text')); +SELECT CRC32(CHAR('77','121','83','81','76')); +SELECT CRC32(CONCAT('good','year')); +SELECT CRC32(INSERT('foodyear', 1, 4, 'good')); +SELECT CRC32(LEFT('goodyear', 4)); +SELECT CRC32(LENGTH('text')); +SELECT CRC32(LOWER('GOODYEAR')); +SELECT CRC32(UPPER('goodyear')); +SELECT CRC32(LTRIM(' goodyear')); +SELECT CRC32(RTRIM('goodyear ')); +SELECT CRC32(REPLACE('godyear','o','oo')); +SELECT CRC32(REVERSE('goodyear')); + +# Test cases for boolean values +SELECT CRC32(true); +SELECT CRC32(false); + +# Test cases for numeric data types +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 (c1 BIT(5), + c2 TINYINT, + c3 MEDIUMINT, + c4 INTEGER, + c5 BIGINT, + c6 DECIMAL(7,5), + c7 FLOAT(7,5), + c8 DOUBLE(7,5)); + +INSERT INTO t1 VALUES (B'10101', 127, 8388607, 2147483647, + 9223372036854775807, 10.5, 11.5, 12.5); + +SELECT CRC32(c1) FROM t1; +SELECT CRC32(c2) FROM t1; +SELECT CRC32(c3) FROM t1; +SELECT CRC32(c4) FROM t1; +SELECT CRC32(c5) FROM t1; +SELECT CRC32(c6) FROM t1; +SELECT CRC32(c7) FROM t1; +SELECT CRC32(c8) FROM t1; + +# Test cases for temporal data types +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 (c1 DATE, + c2 DATETIME, + c3 TIMESTAMP, + c4 TIME, + c5 YEAR); +INSERT INTO t1 VALUES ('2007-01-01', '2007-01-01 12:00:01', + '2007-01-01 00:00:01.000000', + '12:00:01.000000', '2007'); +SELECT CRC32(c1) FROM t1; +SELECT CRC32(c2) FROM t1; +SELECT CRC32(c3) FROM t1; +SELECT CRC32(c4) FROM t1; +SELECT CRC32(c5) FROM t1; + +# Test cases for string data types +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 (c1 CHAR, + c2 VARCHAR(10), + c3 BINARY(1), + c4 VARBINARY(10), + c5 TINYBLOB, + c6 TINYTEXT, + c7 BLOB, + c8 TEXT, + c9 MEDIUMBLOB, + c10 MEDIUMTEXT, + c11 LONGBLOB, + c12 LONGTEXT); + +INSERT INTO t1 VALUES ('a', 'a', 0x61, 0x61, 'a', 'a', + 'a', 'a', 'a', 'a', 'a', 'a'); +SELECT CRC32(c1) FROM t1; +SELECT CRC32(c2) FROM t1; +SELECT CRC32(c3) FROM t1; +SELECT CRC32(c4) FROM t1; +SELECT CRC32(c5) FROM t1; +SELECT CRC32(c6) FROM t1; +SELECT CRC32(c7) FROM t1; +SELECT CRC32(c8) FROM t1; +SELECT CRC32(c9) FROM t1; +SELECT CRC32(c10) FROM t1; +SELECT CRC32(c11) FROM t1; +SELECT CRC32(c12) FROM t1; + +# Test cases for geometric data types +SELECT CRC32(ST_GeomFromText('POINT(1 1)')); + +CREATE TABLE geom_data(id INT, + pt POINT NOT NULL, + lnstr LINESTRING NOT NULL, + mlnstr MULTILINESTRING NOT NULL, + poly POLYGON NOT NULL, + mpoly MULTIPOLYGON NOT NULL); + +INSERT INTO geom_data VALUES (10, + ST_GEOMFROMTEXT('POINT(10 20)'), + ST_GEOMFROMTEXT('LINESTRING(0 0,5 5,6 6)'), + ST_GEOMFROMTEXT('MULTILINESTRING((0 0,2 3,4 5),(6 6,8 8,9 9,10 10))'), + ST_GEOMFROMTEXT('POLYGON((0 0,6 7,8 8,3 9,0 0),(3 6,4 6,4 7,3 6))'), + ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,0 5,5 5,5 0,0 0)), + ((2 2,4 5,6 2,2 2)))')); + +SELECT CRC32(ST_X(pt)) FROM geom_data; +SELECT CRC32(ST_NumPoints((lnstr))) FROM geom_data; +SELECT CRC32(ST_Length((mlnstr))) FROM geom_data; +SELECT CRC32(ST_Area((poly))) FROM geom_data; +SELECT CRC32(ST_Area((mpoly))) FROM geom_data; +DROP TABLE geom_data; + +# Test cases for ENUM and SET data types +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 (e1 ENUM ('a','b'), s1 SET('a','b')); +INSERT INTO t1 VALUES(2,'a,b'),('a','b,a'); +SELECT e1, CRC32(e1) FROM t1; +SELECT s1, CRC32(s1) FROM t1; + +# Test cases for JSON data types +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 (a JSON); +INSERT INTO t1 VALUES ('{"name" : "goodyear"}'), + ('{"name" : "verygood-year"}'); +SELECT a->>'$.name', CRC32(a) FROM t1; +SELECT CRC32(a->>'$.name') FROM t1 WHERE a->>'$.name' = 'goodyear'; +SELECT CRC32(REPLACE(JSON_EXTRACT(a, "$.name"),'\"','')) + FROM t1 WHERE JSON_EXTRACT(a, "$.name") = 'goodyear'; +DROP TABLE t1; + +# Test case for views +CREATE TABLE t1 (a INT); +INSERT INTO t1 VALUES(10); +CREATE VIEW v1 AS SELECT CRC32(a) AS my_crc FROM t1; +SELECT * FROM v1; +SELECT CRC32(CRC32(my_crc)) FROM v1; +DROP VIEW v1; +DROP TABLE t1; + +# Test case for triggers +CREATE TABLE t1 (a CHAR); +CREATE TABLE t2 (b BIGINT); +CREATE TRIGGER trg1 + BEFORE INSERT ON t1 + FOR EACH ROW + INSERT INTO t2 VALUES(CRC32(NEW.a)); +INSERT INTO t1 VALUES('a'); +SELECT * FROM t2; +DROP TRIGGER trg1; +DROP TABLE t2; +DROP TABLE t1; + +# Test case for a stored procedure +CREATE PROCEDURE crc32_proc (IN a CHAR, OUT b BIGINT) + SELECT CRC32(a) INTO b; +CALL crc32_proc('a',@val); +SELECT @val; +DROP PROCEDURE crc32_proc; + +# Test case for a user defined function +DELIMITER |; +CREATE FUNCTION crc32_func(inputvar CHAR) +RETURNS BIGINT +BEGIN + DECLARE crcval BIGINT; + SELECT CRC32(inputvar) INTO crcval; + RETURN crcval; +END| +DELIMITER ;| +SELECT crc32_func('a'); +DROP FUNCTION crc32_func; + +# Test case for a prepared statement +PREPARE stmt1 FROM 'SELECT CRC32(?)'; +SET @val = 'a'; +EXECUTE stmt1 USING @val; +DEALLOCATE PREPARE stmt; + +# Test case for checksum on contents of a file +CREATE TABLE t1 (a TEXT) CHARACTER SET = utf8; +LOAD DATA INFILE '../../std_data/loaddata_utf8.dat' INTO TABLE t1; +SELECT a, CRC32(a) from t1; +DROP TABLE t1; From 57fe22ec64786522fc26edf72a68a73ce74ee5b3 Mon Sep 17 00:00:00 2001 From: Christopher Powers Date: Wed, 13 Sep 2017 18:27:09 -0500 Subject: [PATCH 0051/1221] Bug#26732229 PERFORMANCE SCHEMA STATEMENT TABLES SHOULD DISPLAY REWRITTEN QUERY TEXT Use rewritten query text when available. --- sql/log_event.cc | 1 - sql/sql_parse.cc | 70 +++++++++++++++++++++++++++++++++--------------- 2 files changed, 48 insertions(+), 23 deletions(-) diff --git a/sql/log_event.cc b/sql/log_event.cc index 26c132a6e0bd..bb152de16e16 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -4820,7 +4820,6 @@ int Query_log_event::do_apply_event(Relay_log_info const *rli, thd->db, thd->db_length, thd->charset()); THD_STAGE_INFO(thd, stage_init); - MYSQL_SET_STATEMENT_TEXT(thd->m_statement_psi, thd->query(), thd->query_length()); if (thd->m_digest != NULL) thd->m_digest->reset(thd->m_token_array, max_digest_length); diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index a420df94dc74..d93ba1a2dd94 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -1367,8 +1367,6 @@ bool dispatch_command(enum enum_server_command command, THD *thd, thd->profiling.set_query_source(thd->query(), thd->query_length()); #endif - MYSQL_SET_STATEMENT_TEXT(thd->m_statement_psi, thd->query(), thd->query_length()); - Parser_state parser_state; if (parser_state.init(thd, thd->query(), thd->query_length())) break; @@ -1441,7 +1439,6 @@ bool dispatch_command(enum enum_server_command command, THD *thd, thd->db, thd->db_length, thd->charset()); THD_STAGE_INFO(thd, stage_init); - MYSQL_SET_STATEMENT_TEXT(thd->m_statement_psi, beginning_of_next_stmt, length); thd->set_query_and_id(beginning_of_next_stmt, length, thd->charset(), next_query_id()); @@ -6352,26 +6349,34 @@ void mysql_parse(THD *thd, char *rawbuf, uint length, if (!err) { /* - See whether we can do any query rewriting. opt_log_raw only controls - writing to the general log, so rewriting still needs to happen because - the other logs (binlog, slow query log, ...) can not be set to raw mode - for security reasons. + Rewrite the query for logging and for the Performance Schema statement + tables. Raw logging happened earlier. + Query-cache only handles SELECT, which we don't rewrite, so it's no concern of ours. - We're not general-logging if we're the slave, or if we've already - done raw-logging earlier. + Sub-routines of mysql_rewrite_query() should try to only rewrite when necessary (e.g. not do password obfuscation when query contains no - password), but we can optimize out even those necessary rewrites when - no logging happens at all. If rewriting does not happen here, - thd->rewritten_query is still empty from being reset in alloc_query(). + password). + + If rewriting does not happen here, thd->rewritten_query is still empty + from being reset in alloc_query(). */ - if (!(opt_log_raw || thd->slave_thread) || opt_slow_log || opt_bin_log) + mysql_rewrite_query(thd); + + if (thd->rewritten_query.length()) { - mysql_rewrite_query(thd); + lex->safe_to_cache_query= false; // see comments below - if (thd->rewritten_query.length()) - lex->safe_to_cache_query= false; // see comments below + MYSQL_SET_STATEMENT_TEXT(thd->m_statement_psi, + thd->rewritten_query.c_ptr_safe(), + thd->rewritten_query.length()); + } + else + { + MYSQL_SET_STATEMENT_TEXT(thd->m_statement_psi, + thd->query(), + thd->query_length()); } if (!(opt_log_raw || thd->slave_thread)) @@ -6391,15 +6396,15 @@ void mysql_parse(THD *thd, char *rawbuf, uint length, #ifndef NO_EMBEDDED_ACCESS_CHECKS if (mqh_used && thd->get_user_connect() && - check_mqh(thd, lex->sql_command)) + check_mqh(thd, lex->sql_command)) { - thd->net.error = 0; + thd->net.error = 0; } else #endif { - if (! thd->is_error()) - { + if (! thd->is_error()) + { /* Binlog logs a string starting from thd->query and having length thd->query_length; so we set thd->query_length correctly (to not @@ -6467,18 +6472,39 @@ void mysql_parse(THD *thd, char *rawbuf, uint length, error= gtid_empty_group_log_and_cleanup(thd); } MYSQL_QUERY_EXEC_DONE(error); - } + } } } else { + /* + Log the failed raw query in the Performance Schema. This statement did not + parse, so there is no way to tell if it may contain a password of not. + + The tradeoff is: + a) If we do log the query, a user typing by accident a broken query + containing a password will have the password exposed. This is very + unlikely, and this behavior can be documented. Remediation is to use + a new password when retyping the corrected query. + + b) If we do not log the query, finding broken queries in the client + application will be much more difficult. This is much more likely. + + Considering that broken queries can typically be generated by attempts at + SQL injection, finding the source of the SQL injection is critical, so the + design choice is to log the query text of broken queries (a). + */ + MYSQL_SET_STATEMENT_TEXT(thd->m_statement_psi, + thd->query(), + thd->query_length()); + /* Instrument this broken statement as "statement/sql/error" */ thd->m_statement_psi= MYSQL_REFINE_STATEMENT(thd->m_statement_psi, sql_statement_info[SQLCOM_END].m_key); DBUG_ASSERT(thd->is_error()); DBUG_PRINT("info",("Command aborted. Fatal_error: %d", - thd->is_fatal_error)); + thd->is_fatal_error)); query_cache_abort(&thd->query_cache_tls); } From e69fac872f28f30cfdcbd63c7e0605798ccb45dd Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Thu, 14 Sep 2017 22:44:20 +0200 Subject: [PATCH 0052/1221] From a02f6e524a951fb3973e339848005127e4ea3b44 Mon Sep 17 00:00:00 2001 From: Christopher Powers Date: Thu, 14 Sep 2017 14:41:25 -0500 Subject: [PATCH 0053/1221] Bug#26732229 PERFORMANCE SCHEMA STATEMENT TABLES SHOULD DISPLAY REWRITTEN QUERY TEXT Use rewritten query text when available. --- include/mysql/psi/mysql_ps.h | 17 ++++- include/mysql/psi/psi.h | 13 +++- include/mysql/psi/psi_abi_v1.h.pp | 4 + .../perfschema/r/prepared_statements.result | 21 +++--- mysys/psi_noop.c | 9 ++- sql/log_event.cc | 3 +- sql/sql_parse.cc | 75 ++++++++++++------- sql/sql_prepare.cc | 20 ++++- storage/perfschema/pfs.cc | 21 ++++++ storage/perfschema/pfs_prepared_stmt.cc | 8 +- 10 files changed, 144 insertions(+), 47 deletions(-) diff --git a/include/mysql/psi/mysql_ps.h b/include/mysql/psi/mysql_ps.h index 485e1fbedfa8..0d3157c42f07 100644 --- a/include/mysql/psi/mysql_ps.h +++ b/include/mysql/psi/mysql_ps.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -36,6 +36,8 @@ inline_mysql_destroy_prepared_stmt(PREPARED_STMT) #define MYSQL_REPREPARE_PS(PREPARED_STMT) \ inline_mysql_reprepare_prepared_stmt(PREPARED_STMT) + #define MYSQL_SET_PS_TEXT(PREPARED_STMT, SQLTEXT, SQLTEXT_LENGTH) \ + inline_mysql_set_prepared_stmt_text(PREPARED_STMT, SQLTEXT, SQLTEXT_LENGTH) #else #define MYSQL_CREATE_PS(IDENTITY, ID, LOCKER, NAME, NAME_LENGTH, SQLTEXT, SQLTEXT_LENGTH) \ NULL @@ -45,6 +47,8 @@ do {} while (0) #define MYSQL_REPREPARE_PS(PREPARED_STMT) \ do {} while (0) + #define MYSQL_SET_PS_TEXT(PREPARED_STMT, SQLTEXT, SQLTEXT_LENGTH) \ + do {} while (0) #endif #ifdef HAVE_PSI_PS_INTERFACE @@ -83,6 +87,17 @@ inline_mysql_reprepare_prepared_stmt(PSI_prepared_stmt *prepared_stmt) if (prepared_stmt != NULL) PSI_PS_CALL(reprepare_prepared_stmt)(prepared_stmt); } + +static inline void +inline_mysql_set_prepared_stmt_text(PSI_prepared_stmt *prepared_stmt, + const char *text, + uint text_len) +{ + if (prepared_stmt != NULL) + { + PSI_PS_CALL(set_prepared_stmt_text)(prepared_stmt, text, text_len); + } +} #endif #endif diff --git a/include/mysql/psi/psi.h b/include/mysql/psi/psi.h index 9fb62868e311..2f5f4ee1ff3b 100644 --- a/include/mysql/psi/psi.h +++ b/include/mysql/psi/psi.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2008, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -2343,6 +2343,15 @@ typedef void (*reprepare_prepared_stmt_v1_t) typedef void (*execute_prepared_stmt_v1_t) (PSI_statement_locker *locker, PSI_prepared_stmt* prepared_stmt); +/** + Set the statement text for a prepared statment event. + @param prepared_stmt prepared statement. + @param text the prepared statement text + @param text_len the prepared statement text length +*/ +typedef void (*set_prepared_stmt_text_v1_t)(PSI_prepared_stmt *prepared_stmt, + const char *text, + uint text_len); /** Get a digest locker for the current statement. @param locker a statement locker for the running thread @@ -2658,6 +2667,8 @@ struct PSI_v1 reprepare_prepared_stmt_v1_t reprepare_prepared_stmt; /** @sa execute_prepared_stmt_v1_t. */ execute_prepared_stmt_v1_t execute_prepared_stmt; + /** @sa set_prepared_stmt_text_v1_t. */ + set_prepared_stmt_text_v1_t set_prepared_stmt_text; /** @sa digest_start_v1_t. */ digest_start_v1_t digest_start; /** @sa digest_end_v1_t. */ diff --git a/include/mysql/psi/psi_abi_v1.h.pp b/include/mysql/psi/psi_abi_v1.h.pp index f96c944df8ed..12e4caa8b4cb 100644 --- a/include/mysql/psi/psi_abi_v1.h.pp +++ b/include/mysql/psi/psi_abi_v1.h.pp @@ -654,6 +654,9 @@ (PSI_prepared_stmt *prepared_stmt); typedef void (*execute_prepared_stmt_v1_t) (PSI_statement_locker *locker, PSI_prepared_stmt* prepared_stmt); +typedef void (*set_prepared_stmt_text_v1_t)(PSI_prepared_stmt *prepared_stmt, + const char *text, + uint text_len); typedef struct PSI_digest_locker * (*digest_start_v1_t) (struct PSI_statement_locker *locker); typedef void (*digest_end_v1_t) @@ -807,6 +810,7 @@ destroy_prepared_stmt_v1_t destroy_prepared_stmt; reprepare_prepared_stmt_v1_t reprepare_prepared_stmt; execute_prepared_stmt_v1_t execute_prepared_stmt; + set_prepared_stmt_text_v1_t set_prepared_stmt_text; digest_start_v1_t digest_start; digest_end_v1_t digest_end; set_thread_connect_attrs_v1_t set_thread_connect_attrs; diff --git a/mysql-test/suite/perfschema/r/prepared_statements.result b/mysql-test/suite/perfschema/r/prepared_statements.result index c11b486094ef..78ca2a65a1d8 100644 --- a/mysql-test/suite/perfschema/r/prepared_statements.result +++ b/mysql-test/suite/perfschema/r/prepared_statements.result @@ -57,7 +57,7 @@ OBJECT_TYPE NULL OBJECT_SCHEMA NULL OBJECT_NAME NULL EVENT_NAME statement/sql/prepare_sql -SQL_TEXT PREPARE st1 FROM 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse' +SQL_TEXT PREPARE st1 FROM ... OBJECT_TYPE NULL OBJECT_SCHEMA NULL OBJECT_NAME NULL @@ -77,13 +77,12 @@ OBJECT_TYPE NULL OBJECT_SCHEMA NULL OBJECT_NAME NULL EVENT_NAME statement/sql/prepare_sql -SQL_TEXT PREPARE st3 FROM 'INSERT INTO t1 SELECT * FROM t1 WHERE a<=?' +SQL_TEXT PREPARE st3 FROM ... OBJECT_TYPE NULL OBJECT_SCHEMA NULL OBJECT_NAME NULL EVENT_NAME statement/sql/prepare_sql -SQL_TEXT PREPARE st4 FROM -'(SELECT a FROM t1) UNION (SELECT a+10 FROM t1) ORDER BY RAND()*0+a' +SQL_TEXT PREPARE st4 FROM ... OBJECT_TYPE NULL OBJECT_SCHEMA NULL OBJECT_NAME NULL @@ -164,7 +163,7 @@ OBJECT_TYPE NULL OBJECT_SCHEMA NULL OBJECT_NAME NULL EVENT_NAME statement/sql/prepare_sql -SQL_TEXT PREPARE st1 FROM 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse' +SQL_TEXT PREPARE st1 FROM ... OBJECT_TYPE NULL OBJECT_SCHEMA NULL OBJECT_NAME NULL @@ -184,13 +183,12 @@ OBJECT_TYPE NULL OBJECT_SCHEMA NULL OBJECT_NAME NULL EVENT_NAME statement/sql/prepare_sql -SQL_TEXT PREPARE st3 FROM 'INSERT INTO t1 SELECT * FROM t1 WHERE a<=?' +SQL_TEXT PREPARE st3 FROM ... OBJECT_TYPE NULL OBJECT_SCHEMA NULL OBJECT_NAME NULL EVENT_NAME statement/sql/prepare_sql -SQL_TEXT PREPARE st4 FROM -'(SELECT a FROM t1) UNION (SELECT a+10 FROM t1) ORDER BY RAND()*0+a' +SQL_TEXT PREPARE st4 FROM ... OBJECT_TYPE NULL OBJECT_SCHEMA NULL OBJECT_NAME NULL @@ -297,7 +295,7 @@ OBJECT_TYPE NULL OBJECT_SCHEMA NULL OBJECT_NAME NULL EVENT_NAME statement/sql/prepare_sql -SQL_TEXT PREPARE st1 FROM 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse' +SQL_TEXT PREPARE st1 FROM ... OBJECT_TYPE NULL OBJECT_SCHEMA NULL OBJECT_NAME NULL @@ -317,13 +315,12 @@ OBJECT_TYPE NULL OBJECT_SCHEMA NULL OBJECT_NAME NULL EVENT_NAME statement/sql/prepare_sql -SQL_TEXT PREPARE st3 FROM 'INSERT INTO t1 SELECT * FROM t1 WHERE a<=?' +SQL_TEXT PREPARE st3 FROM ... OBJECT_TYPE NULL OBJECT_SCHEMA NULL OBJECT_NAME NULL EVENT_NAME statement/sql/prepare_sql -SQL_TEXT PREPARE st4 FROM -'(SELECT a FROM t1) UNION (SELECT a+10 FROM t1) ORDER BY RAND()*0+a' +SQL_TEXT PREPARE st4 FROM ... OBJECT_TYPE NULL OBJECT_SCHEMA NULL OBJECT_NAME NULL diff --git a/mysys/psi_noop.c b/mysys/psi_noop.c index 68350960f430..fa074068e910 100644 --- a/mysys/psi_noop.c +++ b/mysys/psi_noop.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -737,6 +737,12 @@ execute_prepare_stmt_noop(PSI_statement_locker *locker NNN, return; } +static void set_prepared_stmt_text_noop(PSI_prepared_stmt *prepared_stmt NNN, + const char *text NNN, uint text_len NNN) +{ + return; +} + void destroy_prepared_stmt_noop(PSI_prepared_stmt *prepared_stmt NNN) { @@ -991,6 +997,7 @@ static PSI PSI_noop= destroy_prepared_stmt_noop, reprepare_prepared_stmt_noop, execute_prepare_stmt_noop, + set_prepared_stmt_text_noop, digest_start_noop, digest_end_noop, set_thread_connect_attrs_noop, diff --git a/sql/log_event.cc b/sql/log_event.cc index c3eebe3d66c5..f69b80c18564 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -4697,8 +4697,7 @@ int Query_log_event::do_apply_event(Relay_log_info const *rli, thd->db().length, thd->charset(), NULL); THD_STAGE_INFO(thd, stage_starting); - MYSQL_SET_STATEMENT_TEXT(thd->m_statement_psi, thd->query().str, - thd->query().length); + if (thd->m_digest != NULL) thd->m_digest->reset(thd->m_token_array, max_digest_length); diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 67e9dc3e7f20..11e034ec11dd 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -1451,9 +1451,6 @@ bool dispatch_command(THD *thd, const COM_DATA *com_data, thd->profiling.set_query_source(thd->query().str, thd->query().length); #endif - MYSQL_SET_STATEMENT_TEXT(thd->m_statement_psi, thd->query().str, - thd->query().length); - Parser_state parser_state; if (parser_state.init(thd, thd->query().str, thd->query().length)) break; @@ -1530,7 +1527,6 @@ bool dispatch_command(THD *thd, const COM_DATA *com_data, thd->db().str, thd->db().length, thd->charset(), NULL); THD_STAGE_INFO(thd, stage_starting); - MYSQL_SET_STATEMENT_TEXT(thd->m_statement_psi, beginning_of_next_stmt, length); thd->set_query(beginning_of_next_stmt, length); thd->set_query_id(next_query_id()); @@ -5479,31 +5475,39 @@ void mysql_parse(THD *thd, Parser_state *parser_state) if (!err) { /* - See whether we can do any query rewriting. opt_general_log_raw only controls - writing to the general log, so rewriting still needs to happen because - the other logs (binlog, slow query log, ...) can not be set to raw mode - for security reasons. + Rewrite the query for logging and for the Performance Schema statement + tables. Raw logging happened earlier. + Query-cache only handles SELECT, which we don't rewrite, so it's no concern of ours. - We're not general-logging if we're the slave, or if we've already - done raw-logging earlier. + Sub-routines of mysql_rewrite_query() should try to only rewrite when necessary (e.g. not do password obfuscation when query contains no - password), but we can optimize out even those necessary rewrites when - no logging happens at all. If rewriting does not happen here, - thd->rewritten_query is still empty from being reset in alloc_query(). + password). + + If rewriting does not happen here, thd->rewritten_query is still empty + from being reset in alloc_query(). */ - bool general= !(opt_general_log_raw || thd->slave_thread); + // bool general= !(opt_general_log_raw || thd->slave_thread); + + mysql_rewrite_query(thd); - if (general || opt_slow_log || opt_bin_log) + if (thd->rewritten_query.length()) { - mysql_rewrite_query(thd); + lex->safe_to_cache_query= false; // see comments below - if (thd->rewritten_query.length()) - lex->safe_to_cache_query= false; // see comments below + MYSQL_SET_STATEMENT_TEXT(thd->m_statement_psi, + thd->rewritten_query.c_ptr_safe(), + thd->rewritten_query.length()); + } + else + { + MYSQL_SET_STATEMENT_TEXT(thd->m_statement_psi, + thd->query().str, + thd->query().length); } - if (general) + if (!(opt_general_log_raw || thd->slave_thread)) { if (thd->rewritten_query.length()) query_logger.general_log_write(thd, COM_QUERY, @@ -5536,8 +5540,8 @@ void mysql_parse(THD *thd, Parser_state *parser_state) else #endif { - if (! thd->is_error()) - { + if (! thd->is_error()) + { /* Binlog logs a string starting from thd->query and having length thd->query_length; so we set thd->query_length correctly (to not @@ -5577,18 +5581,39 @@ void mysql_parse(THD *thd, Parser_state *parser_state) error= mysql_execute_command(thd, true); MYSQL_QUERY_EXEC_DONE(error); - } + } } } else { + /* + Log the failed raw query in the Performance Schema. This statement did not + parse, so there is no way to tell if it may contain a password of not. + + The tradeoff is: + a) If we do log the query, a user typing by accident a broken query + containing a password will have the password exposed. This is very + unlikely, and this behavior can be documented. Remediation is to use + a new password when retyping the corrected query. + + b) If we do not log the query, finding broken queries in the client + application will be much more difficult. This is much more likely. + + Considering that broken queries can typically be generated by attempts at + SQL injection, finding the source of the SQL injection is critical, so the + design choice is to log the query text of broken queries (a). + */ + MYSQL_SET_STATEMENT_TEXT(thd->m_statement_psi, + thd->query().str, + thd->query().length); + /* Instrument this broken statement as "statement/sql/error" */ thd->m_statement_psi= MYSQL_REFINE_STATEMENT(thd->m_statement_psi, - sql_statement_info[SQLCOM_END].m_key); + sql_statement_info[SQLCOM_END].m_key); DBUG_ASSERT(thd->is_error()); DBUG_PRINT("info",("Command aborted. Fatal_error: %d", - thd->is_fatal_error)); + thd->is_fatal_error)); query_cache.abort(&thd->query_cache_tls); } @@ -5612,8 +5637,6 @@ void mysql_parse(THD *thd, Parser_state *parser_state) query, and then use the obfuscated query-string for logging here when the query is given again. */ - thd->m_statement_psi= MYSQL_REFINE_STATEMENT(thd->m_statement_psi, - sql_statement_info[SQLCOM_SELECT].m_key); if (!opt_general_log_raw) query_logger.general_log_write(thd, COM_QUERY, thd->query().str, thd->query().length); diff --git a/sql/sql_prepare.cc b/sql/sql_prepare.cc index 8e5eee64e50f..62ba2c95b6e3 100644 --- a/sql/sql_prepare.cc +++ b/sql/sql_prepare.cc @@ -2104,10 +2104,12 @@ void mysqld_stmt_prepare(THD *thd, const char *query, uint length) thd->get_protocol()->get_client_capabilities()); thd->set_protocol(&thd->protocol_binary); + + /* Create PS table entry, set query text after rewrite. */ stmt->m_prepared_stmt= MYSQL_CREATE_PS(stmt, stmt->id, thd->m_statement_psi, stmt->name().str, stmt->name().length, - query, length); + NULL, 0); if (stmt->prepare(query, length)) { @@ -2289,10 +2291,11 @@ void mysql_sql_stmt_prepare(THD *thd) DBUG_VOID_RETURN; } + /* Create PS table entry, set query text after rewrite. */ stmt->m_prepared_stmt= MYSQL_CREATE_PS(stmt, stmt->id, thd->m_statement_psi, stmt->name().str, stmt->name().length, - query, query_len); + NULL, 0); if (stmt->prepare(query, query_len)) { @@ -3345,6 +3348,19 @@ bool Prepared_statement::prepare(const char *query_str, size_t query_length) rewrite_query_if_needed(thd); + if (thd->rewritten_query.length()) + { + MYSQL_SET_PS_TEXT(m_prepared_stmt, + thd->rewritten_query.c_ptr_safe(), + thd->rewritten_query.length()); + } + else + { + MYSQL_SET_PS_TEXT(m_prepared_stmt, + thd->query().str, + thd->query().length); + } + cleanup_stmt(); stmt_backup.restore_thd(thd, this); thd->stmt_arena= old_stmt_arena; diff --git a/storage/perfschema/pfs.cc b/storage/perfschema/pfs.cc index a1c3cfd2e9cd..604b8ffc6e05 100644 --- a/storage/perfschema/pfs.cc +++ b/storage/perfschema/pfs.cc @@ -6389,6 +6389,26 @@ void pfs_reprepare_prepared_stmt_v1(PSI_prepared_stmt* prepared_stmt) return; } +void pfs_set_prepared_stmt_text_v1(PSI_prepared_stmt *prepared_stmt, + const char *text, + uint text_len) +{ + PFS_prepared_stmt *pfs_prepared_stmt = + reinterpret_cast(prepared_stmt); + DBUG_ASSERT(pfs_prepared_stmt != NULL); + + uint max_len = sizeof(PFS_prepared_stmt::m_sqltext); + if (text_len > max_len) + { + text_len = max_len; + } + + memcpy(pfs_prepared_stmt->m_sqltext, text, text_len); + pfs_prepared_stmt->m_sqltext_length = text_len; + + return; +} + /** Implementation of the thread attribute connection interface @sa PSI_v1::set_thread_connect_attr. @@ -7049,6 +7069,7 @@ PSI_v1 PFS_v1= pfs_destroy_prepared_stmt_v1, pfs_reprepare_prepared_stmt_v1, pfs_execute_prepared_stmt_v1, + pfs_set_prepared_stmt_text_v1, pfs_digest_start_v1, pfs_digest_end_v1, pfs_set_thread_connect_attrs_v1, diff --git a/storage/perfschema/pfs_prepared_stmt.cc b/storage/perfschema/pfs_prepared_stmt.cc index 4906d3d61cf5..43e96f2f0e14 100644 --- a/storage/perfschema/pfs_prepared_stmt.cc +++ b/storage/perfschema/pfs_prepared_stmt.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -85,8 +85,12 @@ create_prepared_stmt(void *identity, pfs->reset_data(); /* Do the assignments. */ pfs->m_identity= identity; - strncpy(pfs->m_sqltext, sqltext, sqltext_length); + /* Set query text if available, else it will be set later. */ + if (sqltext_length > 0) + strncpy(pfs->m_sqltext, sqltext, sqltext_length); + pfs->m_sqltext_length= sqltext_length; + if (stmt_name != NULL) { pfs->m_stmt_name_length= stmt_name_length; From 9d6a59fa3b28623ca551f48e4b6c7ba486964904 Mon Sep 17 00:00:00 2001 From: Christopher Powers Date: Fri, 15 Sep 2017 00:35:40 +0200 Subject: [PATCH 0054/1221] Bug#26732229 PERFORMANCE SCHEMA STATEMENT TABLES SHOULD DISPLAY REWRITTEN QUERY TEXT Use rewritten query text when available. Updates: - Fix 5.7 build break Windows + MacOS - Re-record query_rewrite_plugins.performance_schema --- .../suite/query_rewrite_plugins/r/performance_schema.result | 2 +- storage/perfschema/pfs.cc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mysql-test/suite/query_rewrite_plugins/r/performance_schema.result b/mysql-test/suite/query_rewrite_plugins/r/performance_schema.result index feb876190930..f659d051b398 100644 --- a/mysql-test/suite/query_rewrite_plugins/r/performance_schema.result +++ b/mysql-test/suite/query_rewrite_plugins/r/performance_schema.result @@ -37,7 +37,7 @@ SELECT sql_text, digest FROM performance_schema.events_statements_history WHERE sql_text LIKE 'SELECT %'; sql_text digest -SELECT 'original' NULL +SELECT "rewritten" NULL SELECT load_rewrite_rules() INTO message_text NULL UPDATE performance_schema.setup_consumers SET enabled = @original_setting diff --git a/storage/perfschema/pfs.cc b/storage/perfschema/pfs.cc index 604b8ffc6e05..af5aa9bb7ba8 100644 --- a/storage/perfschema/pfs.cc +++ b/storage/perfschema/pfs.cc @@ -6397,7 +6397,7 @@ void pfs_set_prepared_stmt_text_v1(PSI_prepared_stmt *prepared_stmt, reinterpret_cast(prepared_stmt); DBUG_ASSERT(pfs_prepared_stmt != NULL); - uint max_len = sizeof(PFS_prepared_stmt::m_sqltext); + uint max_len = COL_INFO_SIZE; if (text_len > max_len) { text_len = max_len; From d1436dbf80185e73c34cbbcaed513acc83937aeb Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Thu, 14 Sep 2017 12:33:25 +0200 Subject: [PATCH 0055/1221] Backport some additional GenError dependencies --- client/CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/client/CMakeLists.txt b/client/CMakeLists.txt index e5d73473db6f..b74f5a7f57f2 100644 --- a/client/CMakeLists.txt +++ b/client/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2006, 2015, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 2017, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -61,6 +61,7 @@ ENDIF() MYSQL_ADD_EXECUTABLE(mysqltest mysqltest.cc COMPONENT Test) SET_SOURCE_FILES_PROPERTIES(mysqltest.cc PROPERTIES COMPILE_FLAGS "-DTHREADS") TARGET_LINK_LIBRARIES(mysqltest mysqlclient regex) +ADD_DEPENDENCIES(mysqltest GenError) ADD_CONVENIENCE_LIBRARY(mysqlcheck_core check/mysqlcheck_core.cc) TARGET_LINK_LIBRARIES(mysqlcheck_core mysqlclient) From 853ff38c2b6980f85be0dfd64dcba503304a4489 Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Thu, 14 Sep 2017 12:34:55 +0200 Subject: [PATCH 0056/1221] Log cmake message if we have found openssl .dll libraries on windows. --- cmake/ssl.cmake | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/cmake/ssl.cmake b/cmake/ssl.cmake index 19ac9a68440f..b0f44d1a2dc0 100644 --- a/cmake/ssl.cmake +++ b/cmake/ssl.cmake @@ -1,4 +1,4 @@ -# Copyright (c) 2009, 2016, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2009, 2017, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -269,7 +269,9 @@ MACRO (COPY_OPENSSL_DLLS target_name) GET_FILENAME_COMPONENT(OPENSSL_NAME "${OPENSSL_LIBRARY}" NAME_WE) FILE(GLOB HAVE_CRYPTO_DLL "${WITH_SSL_PATH}/bin/${CRYPTO_NAME}.dll") FILE(GLOB HAVE_OPENSSL_DLL "${WITH_SSL_PATH}/bin/${OPENSSL_NAME}.dll") - IF (HAVE_CRYPTO_DLL AND HAVE_OPENSSL_DLL) + MESSAGE(STATUS "HAVE_CRYPTO_DLL ${HAVE_CRYPTO_DLL}") + MESSAGE(STATUS "HAVE_OPENSSL_DLL ${HAVE_OPENSSL_DLL}") + IF(HAVE_CRYPTO_DLL AND HAVE_OPENSSL_DLL) ADD_CUSTOM_COMMAND(OUTPUT ${target_name} COMMAND ${CMAKE_COMMAND} -E copy_if_different "${WITH_SSL_PATH}/bin/${CRYPTO_NAME}.dll" From c775c5fe0b6991fc940dd535b262949d51a8beb4 Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Thu, 14 Sep 2017 12:35:34 +0200 Subject: [PATCH 0057/1221] dos2unix cmake/mysql_add_executable.cmake --- cmake/mysql_add_executable.cmake | 96 ++++++++++++++++---------------- 1 file changed, 48 insertions(+), 48 deletions(-) diff --git a/cmake/mysql_add_executable.cmake b/cmake/mysql_add_executable.cmake index b1e1d3129e6c..bcbbe7d4931c 100644 --- a/cmake/mysql_add_executable.cmake +++ b/cmake/mysql_add_executable.cmake @@ -1,48 +1,48 @@ -# Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Add executable plus some additional MySQL specific stuff -# Usage (same as for standard CMake's ADD_EXECUTABLE) -# -# MYSQL_ADD_EXECUTABLE(target source1...sourceN) -# -# MySQL specifics: -# - instruct CPack to install executable under ${CMAKE_INSTALL_PREFIX}/bin directory -# On Windows : -# - add version resource -# - instruct CPack to do autenticode signing if SIGNCODE is set - -INCLUDE(cmake_parse_arguments) - -FUNCTION (MYSQL_ADD_EXECUTABLE) - # Pass-through arguments for ADD_EXECUTABLE - MYSQL_PARSE_ARGUMENTS(ARG - "WIN32;MACOSX_BUNDLE;EXCLUDE_FROM_ALL;DESTINATION;COMPONENT" - "" - ${ARGN} - ) - LIST(GET ARG_DEFAULT_ARGS 0 target) - LIST(REMOVE_AT ARG_DEFAULT_ARGS 0) - - SET(sources ${ARG_DEFAULT_ARGS}) - ADD_VERSION_INFO(${target} EXECUTABLE sources) - ADD_EXECUTABLE(${target} ${ARG_WIN32} ${ARG_MACOSX_BUNDLE} ${ARG_EXCLUDE_FROM_ALL} ${sources}) - # tell CPack where to install - IF(NOT ARG_EXCLUDE_FROM_ALL) - IF(NOT ARG_DESTINATION) - SET(ARG_DESTINATION ${INSTALL_BINDIR}) +# Copyright (c) 2009, 2017, Oracle and/or its affiliates. All rights reserved. +# +# 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 + +# Add executable plus some additional MySQL specific stuff +# Usage (same as for standard CMake's ADD_EXECUTABLE) +# +# MYSQL_ADD_EXECUTABLE(target source1...sourceN) +# +# MySQL specifics: +# - instruct CPack to install executable under ${CMAKE_INSTALL_PREFIX}/bin directory +# On Windows : +# - add version resource +# - instruct CPack to do autenticode signing if SIGNCODE is set + +INCLUDE(cmake_parse_arguments) + +FUNCTION (MYSQL_ADD_EXECUTABLE) + # Pass-through arguments for ADD_EXECUTABLE + MYSQL_PARSE_ARGUMENTS(ARG + "WIN32;MACOSX_BUNDLE;EXCLUDE_FROM_ALL;DESTINATION;COMPONENT" + "" + ${ARGN} + ) + LIST(GET ARG_DEFAULT_ARGS 0 target) + LIST(REMOVE_AT ARG_DEFAULT_ARGS 0) + + SET(sources ${ARG_DEFAULT_ARGS}) + ADD_VERSION_INFO(${target} EXECUTABLE sources) + ADD_EXECUTABLE(${target} ${ARG_WIN32} ${ARG_MACOSX_BUNDLE} ${ARG_EXCLUDE_FROM_ALL} ${sources}) + # tell CPack where to install + IF(NOT ARG_EXCLUDE_FROM_ALL) + IF(NOT ARG_DESTINATION) + SET(ARG_DESTINATION ${INSTALL_BINDIR}) ENDIF() IF(ARG_COMPONENT) SET(COMP COMPONENT ${ARG_COMPONENT}) @@ -50,7 +50,7 @@ FUNCTION (MYSQL_ADD_EXECUTABLE) SET(COMP COMPONENT ${MYSQL_INSTALL_COMPONENT}) ELSE() SET(COMP COMPONENT Client) - ENDIF() - MYSQL_INSTALL_TARGETS(${target} DESTINATION ${ARG_DESTINATION} ${COMP}) - ENDIF() + ENDIF() + MYSQL_INSTALL_TARGETS(${target} DESTINATION ${ARG_DESTINATION} ${COMP}) + ENDIF() ENDFUNCTION() From b4391f49dbc58fd1041be28c5d3aabcc2cadbd01 Mon Sep 17 00:00:00 2001 From: Sreeharsha Ramanavarapu Date: Mon, 18 Sep 2017 08:48:31 +0530 Subject: [PATCH 0058/1221] Bug #26627181: WRONG RESULT WITH LEFT JOIN + DERIVED TABLES Issue: ------ This bug can occur when: - there is an outer join. - an Item_direct_view_ref object references a const value from an inner table. The problem occurs on latest 5.7.20 but not on 8.0. The reason is that the fix for Bug#26432173 was only a partial fix in 5.7 (i.e. fixed only for temp table cases) but a more general one in 8.0. Solution: --------- A new Item_direct_view_ref::used_tables() function is created to take into account whether an Item in a derived table / view is part of an inner table of an outer join. The new tests have been added to 8.0 and trunk. --- mysql-test/r/derived.result | 4 +- mysql-test/r/join_outer.result | 56 +++++++++++++++++++++++ mysql-test/r/join_outer_bka.result | 56 +++++++++++++++++++++++ mysql-test/r/join_outer_bka_nixbnl.result | 56 +++++++++++++++++++++++ mysql-test/t/join_outer.test | 54 ++++++++++++++++++++++ sql/item.h | 33 ++++++++++++- sql/sql_tmp_table.cc | 15 +----- 7 files changed, 257 insertions(+), 17 deletions(-) diff --git a/mysql-test/r/derived.result b/mysql-test/r/derived.result index 4ab525fefbf4..8d0d62ab0588 100644 --- a/mysql-test/r/derived.result +++ b/mysql-test/r/derived.result @@ -2838,7 +2838,7 @@ id select_type table partitions type possible_keys key key_len ref rows filtered 4 DEPENDENT SUBQUERY t4 NULL system PRIMARY,col_int_key NULL NULL NULL 1 100.00 NULL 4 DEPENDENT SUBQUERY t3 NULL index NULL col_varchar_key 7 NULL 20 90.00 Using where; Using index Warnings: -Note 1003 /* select#1 */ select `test`.`t2`.`pk` AS `x` from `test`.`t2` where (((((`test`.`t2`.`col_int_nokey`,`test`.`t2`.`col_int_key`),(/* select#4 */ select 1,1 from `test`.`t3` where ((('7' <> '10') or 0) and (outer_field_is_not_null, (((`test`.`t2`.`col_int_nokey`) = '7') or (isnull('7'))), true) and (outer_field_is_not_null, (((`test`.`t2`.`col_int_key`) = '8') or (isnull('8'))), true) and (`test`.`t3`.`col_varchar_key` <> 'b')) having ((outer_field_is_not_null, ('7'), true) and (outer_field_is_not_null, ('8'), true)))) and (`test`.`t2`.`pk` < 7)) xor (`test`.`t2`.`col_varchar_nokey` <> 'i')) and ('00:00:00' >= `test`.`t2`.`col_date_nokey`)) order by `test`.`t2`.`col_varchar_key`,`test`.`t2`.`pk` +Note 1003 /* select#1 */ select `test`.`t2`.`pk` AS `x` from `test`.`t2` where (((((`test`.`t2`.`col_int_nokey`,`test`.`t2`.`col_int_key`),(/* select#4 */ select 1,1 from `test`.`t3` where ((('7' <> '10') or 0) and (outer_field_is_not_null, (((`test`.`t2`.`col_int_nokey`) = '7') or isnull('7')), true) and (outer_field_is_not_null, (((`test`.`t2`.`col_int_key`) = '8') or isnull('8')), true) and (`test`.`t3`.`col_varchar_key` <> 'b')) having ((outer_field_is_not_null, ('7'), true) and (outer_field_is_not_null, ('8'), true)))) and (`test`.`t2`.`pk` < 7)) xor (`test`.`t2`.`col_varchar_nokey` <> 'i')) and ('00:00:00' >= `test`.`t2`.`col_date_nokey`)) order by `test`.`t2`.`col_varchar_key`,`test`.`t2`.`pk` SELECT outr.pk AS x FROM (SELECT * FROM t1) AS outr2 LEFT JOIN (SELECT * FROM t2) AS outr @@ -4104,7 +4104,7 @@ FROM t3 AS subquery4_t1); id select_type table partitions type possible_keys key key_len ref rows filtered Extra 1 SIMPLE subquery2_t2 NULL system PRIMARY,col_varchar_key NULL NULL NULL 1 100.00 NULL 1 SIMPLE subquery3_t1 NULL system col_varchar_key NULL NULL NULL 1 100.00 NULL -1 SIMPLE NULL const 4 const 1 100.00 Using where +1 SIMPLE NULL eq_ref 4 const 1 100.00 Using where 1 SIMPLE subquery2_t1 NULL ALL NULL NULL NULL NULL 2 50.00 Using where; Using join buffer (Block Nested Loop) 4 MATERIALIZED subquery4_t1 NULL ALL NULL NULL NULL NULL 0 0.00 Using where Warnings: diff --git a/mysql-test/r/join_outer.result b/mysql-test/r/join_outer.result index 700315bc4c75..f7b9d7e90da7 100644 --- a/mysql-test/r/join_outer.result +++ b/mysql-test/r/join_outer.result @@ -2880,3 +2880,59 @@ Handler_savepoint_rollback 0 Handler_update 0 Handler_write 0 DROP TABLE t1, t2, t3, t4; +# +# Bug #26627181: WRONG RESULT WITH LEFT JOIN + DERIVED TABLES +# +CREATE TABLE t1 (id INT); +CREATE TABLE t2 (id INT); +INSERT INTO t1 VALUES (1), (2); +INSERT INTO t2 VALUES (1); +EXPLAIN SELECT * +FROM (SELECT id +FROM t1) AS a +LEFT JOIN +(SELECT id, 2 AS tall +FROM t2) AS b +ON a.id = b.id +WHERE b.tall IS NOT NULL; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 100.00 NULL +1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; Using join buffer (Block Nested Loop) +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`id` AS `id`,`test`.`t2`.`id` AS `id`,2 AS `tall` from `test`.`t1` left join (`test`.`t2`) on((`test`.`t2`.`id` = `test`.`t1`.`id`)) where (2 is not null) +SELECT * +FROM (SELECT id +FROM t1) AS a +LEFT JOIN +(SELECT id, 2 AS tall +FROM t2) AS b +ON a.id = b.id +WHERE b.tall IS NOT NULL; +id id tall +1 1 2 +DROP TABLE t1, t2; +# +# Bug #23169204: Left join + merged derived table + group by = bad result +# +CREATE TABLE t1(doc text); +CREATE TABLE t2(a INTEGER DEFAULT NULL); +INSERT INTO t2 VALUES(1); +SELECT je +FROM t2 LEFT JOIN (SELECT 1 AS je FROM t1 LIMIT 1) AS dt ON FALSE; +je +NULL +SELECT je +FROM t2 LEFT JOIN (SELECT 1 AS je FROM t1 LIMIT 1) AS dt ON FALSE +GROUP BY je; +je +NULL +SELECT je +FROM t2 LEFT JOIN (SELECT 1 AS je FROM t1) AS dt ON FALSE; +je +NULL +SELECT je +FROM t2 LEFT JOIN (SELECT 1 AS je FROM t1) AS dt ON FALSE +GROUP BY je; +je +NULL +DROP TABLE t1, t2; diff --git a/mysql-test/r/join_outer_bka.result b/mysql-test/r/join_outer_bka.result index c2c93409da5f..74da92921315 100644 --- a/mysql-test/r/join_outer_bka.result +++ b/mysql-test/r/join_outer_bka.result @@ -2881,4 +2881,60 @@ Handler_savepoint_rollback 0 Handler_update 0 Handler_write 0 DROP TABLE t1, t2, t3, t4; +# +# Bug #26627181: WRONG RESULT WITH LEFT JOIN + DERIVED TABLES +# +CREATE TABLE t1 (id INT); +CREATE TABLE t2 (id INT); +INSERT INTO t1 VALUES (1), (2); +INSERT INTO t2 VALUES (1); +EXPLAIN SELECT * +FROM (SELECT id +FROM t1) AS a +LEFT JOIN +(SELECT id, 2 AS tall +FROM t2) AS b +ON a.id = b.id +WHERE b.tall IS NOT NULL; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 100.00 NULL +1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 1 100.00 Using where; Using join buffer (Block Nested Loop) +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`id` AS `id`,`test`.`t2`.`id` AS `id`,2 AS `tall` from `test`.`t1` left join (`test`.`t2`) on((`test`.`t2`.`id` = `test`.`t1`.`id`)) where (2 is not null) +SELECT * +FROM (SELECT id +FROM t1) AS a +LEFT JOIN +(SELECT id, 2 AS tall +FROM t2) AS b +ON a.id = b.id +WHERE b.tall IS NOT NULL; +id id tall +1 1 2 +DROP TABLE t1, t2; +# +# Bug #23169204: Left join + merged derived table + group by = bad result +# +CREATE TABLE t1(doc text); +CREATE TABLE t2(a INTEGER DEFAULT NULL); +INSERT INTO t2 VALUES(1); +SELECT je +FROM t2 LEFT JOIN (SELECT 1 AS je FROM t1 LIMIT 1) AS dt ON FALSE; +je +NULL +SELECT je +FROM t2 LEFT JOIN (SELECT 1 AS je FROM t1 LIMIT 1) AS dt ON FALSE +GROUP BY je; +je +NULL +SELECT je +FROM t2 LEFT JOIN (SELECT 1 AS je FROM t1) AS dt ON FALSE; +je +NULL +SELECT je +FROM t2 LEFT JOIN (SELECT 1 AS je FROM t1) AS dt ON FALSE +GROUP BY je; +je +NULL +DROP TABLE t1, t2; set optimizer_switch=default; diff --git a/mysql-test/r/join_outer_bka_nixbnl.result b/mysql-test/r/join_outer_bka_nixbnl.result index 71233aa926ed..7092e3663386 100644 --- a/mysql-test/r/join_outer_bka_nixbnl.result +++ b/mysql-test/r/join_outer_bka_nixbnl.result @@ -2879,4 +2879,60 @@ Handler_savepoint_rollback 0 Handler_update 0 Handler_write 0 DROP TABLE t1, t2, t3, t4; +# +# Bug #26627181: WRONG RESULT WITH LEFT JOIN + DERIVED TABLES +# +CREATE TABLE t1 (id INT); +CREATE TABLE t2 (id INT); +INSERT INTO t1 VALUES (1), (2); +INSERT INTO t2 VALUES (1); +EXPLAIN SELECT * +FROM (SELECT id +FROM t1) AS a +LEFT JOIN +(SELECT id, 2 AS tall +FROM t2) AS b +ON a.id = b.id +WHERE b.tall IS NOT NULL; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 2 100.00 NULL +1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 1 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`id` AS `id`,`test`.`t2`.`id` AS `id`,2 AS `tall` from `test`.`t1` left join (`test`.`t2`) on((`test`.`t2`.`id` = `test`.`t1`.`id`)) where (2 is not null) +SELECT * +FROM (SELECT id +FROM t1) AS a +LEFT JOIN +(SELECT id, 2 AS tall +FROM t2) AS b +ON a.id = b.id +WHERE b.tall IS NOT NULL; +id id tall +1 1 2 +DROP TABLE t1, t2; +# +# Bug #23169204: Left join + merged derived table + group by = bad result +# +CREATE TABLE t1(doc text); +CREATE TABLE t2(a INTEGER DEFAULT NULL); +INSERT INTO t2 VALUES(1); +SELECT je +FROM t2 LEFT JOIN (SELECT 1 AS je FROM t1 LIMIT 1) AS dt ON FALSE; +je +NULL +SELECT je +FROM t2 LEFT JOIN (SELECT 1 AS je FROM t1 LIMIT 1) AS dt ON FALSE +GROUP BY je; +je +NULL +SELECT je +FROM t2 LEFT JOIN (SELECT 1 AS je FROM t1) AS dt ON FALSE; +je +NULL +SELECT je +FROM t2 LEFT JOIN (SELECT 1 AS je FROM t1) AS dt ON FALSE +GROUP BY je; +je +NULL +DROP TABLE t1, t2; set optimizer_switch=default; diff --git a/mysql-test/t/join_outer.test b/mysql-test/t/join_outer.test index 713f8470b1aa..6b5282d9a21e 100644 --- a/mysql-test/t/join_outer.test +++ b/mysql-test/t/join_outer.test @@ -2048,3 +2048,57 @@ eval $query3; SHOW STATUS LIKE 'HANDLER_%'; DROP TABLE t1, t2, t3, t4; + + +--echo # +--echo # Bug #26627181: WRONG RESULT WITH LEFT JOIN + DERIVED TABLES +--echo # + +CREATE TABLE t1 (id INT); +CREATE TABLE t2 (id INT); +INSERT INTO t1 VALUES (1), (2); +INSERT INTO t2 VALUES (1); + +let query1= +SELECT * +FROM (SELECT id + FROM t1) AS a + LEFT JOIN + (SELECT id, 2 AS tall + FROM t2) AS b + ON a.id = b.id +WHERE b.tall IS NOT NULL; + +eval EXPLAIN $query1; +eval $query1; + +DROP TABLE t1, t2; + +--echo # +--echo # Bug #23169204: Left join + merged derived table + group by = bad result +--echo # + +CREATE TABLE t1(doc text); +CREATE TABLE t2(a INTEGER DEFAULT NULL); +INSERT INTO t2 VALUES(1); + +# Derived table is materialized due to LIMIT. +# t1 is empty so the derived table is empty, so NULL-complementing produces +# NULL for 'je' in the SELECT list. +SELECT je +FROM t2 LEFT JOIN (SELECT 1 AS je FROM t1 LIMIT 1) AS dt ON FALSE; + +SELECT je +FROM t2 LEFT JOIN (SELECT 1 AS je FROM t1 LIMIT 1) AS dt ON FALSE +GROUP BY je; + +# Remove LIMIT (to have the derived table be merged), produces NULL too. + +SELECT je +FROM t2 LEFT JOIN (SELECT 1 AS je FROM t1) AS dt ON FALSE; + +SELECT je +FROM t2 LEFT JOIN (SELECT 1 AS je FROM t1) AS dt ON FALSE +GROUP BY je; + +DROP TABLE t1, t2; diff --git a/sql/item.h b/sql/item.h index 3027449b795f..95312a14502e 100644 --- a/sql/item.h +++ b/sql/item.h @@ -4312,7 +4312,38 @@ class Item_direct_view_ref :public Item_direct_ref bool fix_fields(THD *, Item **); - bool eq(const Item *item, bool binary_cmp) const; + /** + Takes into account whether an Item in a derived table / view is part of an + inner table of an outer join. + + 1) If the field is an outer reference, return OUTER_TABLE_REF_BIT. + 2) Else + 2a) If the field is const_for_execution and the field is used in the + inner part of an outer join, return the inner tables of the outer + join. (A 'const' field that depends on the inner table of an outer + join shouldn't be interpreted as const.) + 2b) Else return the used_tables info of the underlying field. + + @note The call to const_for_execution has been replaced by + "!(inner_map & ~INNER_TABLE_BIT)" to avoid multiple and recursive + calls to used_tables. This can create a problem when Views are + created using other views + */ + table_map used_tables() const + { + if (depended_from != NULL) + return OUTER_REF_TABLE_BIT; + + table_map inner_map= (*ref)->used_tables(); + return + inner_map == 0 && first_inner_table != NULL ? + (*ref)->real_item()->type() == FIELD_ITEM ? + down_cast((*ref)->real_item())->table_ref->map() : + first_inner_table->map() : + inner_map; + } + + bool eq(const Item *item, bool binary_cmp) const; Item *get_tmp_table_item(THD *thd) { Item *item= Item_ref::get_tmp_table_item(thd); diff --git a/sql/sql_tmp_table.cc b/sql/sql_tmp_table.cc index b3a2a724235b..7838f5b7d8f0 100644 --- a/sql/sql_tmp_table.cc +++ b/sql/sql_tmp_table.cc @@ -876,20 +876,7 @@ create_tmp_table(THD *thd, Temp_table_param *param, List &fields, } } - /* - Consider field as constant only if: - 1) The item is constant and - 1a) Isn't part of a derived table (or view). OR - 1b) The item belongs to a derived table (or view) and it doesn't - belong to an inner table of an outer join. - */ - bool is_const= item->const_item() && - ((item->type() == Item::REF_ITEM && - (down_cast(item))->ref_type() == Item_ref::VIEW_REF) ? - !(down_cast(item))->cached_table-> - is_inner_table_of_outer_join() : true); - - if (is_const && (int)hidden_field_count <= 0) + if (item->const_item() && (int)hidden_field_count <= 0) continue; // We don't have to store this } if (type == Item::SUM_FUNC_ITEM && !group && !save_sum_fields) From e2abdcbac7d513c786ec2f214d322bc74d20d7fd Mon Sep 17 00:00:00 2001 From: Sreeharsha Ramanavarapu Date: Mon, 18 Sep 2017 09:04:05 +0530 Subject: [PATCH 0059/1221] Bug #25989915: LOOSE INDEX SCANS RETURNING WRONG RESULT Post-push fix for embedded test in 5.6. Explicitly mention Innodb in DDL. Embedded test picks MYISAM. --- mysql-test/r/group_min_max_innodb.result | 2 +- mysql-test/t/group_min_max_innodb.test | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mysql-test/r/group_min_max_innodb.result b/mysql-test/r/group_min_max_innodb.result index 1684c4843e94..1b4ea0844885 100644 --- a/mysql-test/r/group_min_max_innodb.result +++ b/mysql-test/r/group_min_max_innodb.result @@ -568,7 +568,7 @@ c1 varchar(100) DEFAULT NULL, c2 INT NOT NULL, PRIMARY KEY (pk), UNIQUE KEY ukey (c2,c1) -); +)ENGINE=INNODB; INSERT INTO t1(pk, c2) VALUES (100, 0), (101, 0), (102, 0), (103, 0); ANALYZE TABLE t1; Table Op Msg_type Msg_text diff --git a/mysql-test/t/group_min_max_innodb.test b/mysql-test/t/group_min_max_innodb.test index c20dc5dc8075..fdd045de5e96 100644 --- a/mysql-test/t/group_min_max_innodb.test +++ b/mysql-test/t/group_min_max_innodb.test @@ -430,7 +430,7 @@ CREATE TABLE t1 ( c2 INT NOT NULL, PRIMARY KEY (pk), UNIQUE KEY ukey (c2,c1) -); +)ENGINE=INNODB; INSERT INTO t1(pk, c2) VALUES (100, 0), (101, 0), (102, 0), (103, 0); ANALYZE TABLE t1; From e90ae1707e0ca46abc775d1680d1856c4be38b66 Mon Sep 17 00:00:00 2001 From: Shivashankar Nagaraj Date: Mon, 18 Sep 2017 12:21:25 +0530 Subject: [PATCH 0060/1221] BUG#26495791: CONTRIBUTION: EXPAND TEST SUITE TO INCLUDE CRC32 TESTS Post-push fix for a pushbuild failure. --- mysql-test/r/func_math.result | 21 +++++++++++---------- mysql-test/t/func_math.test | 6 ++++-- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/mysql-test/r/func_math.result b/mysql-test/r/func_math.result index 4d356a001425..955a9d613e97 100644 --- a/mysql-test/r/func_math.result +++ b/mysql-test/r/func_math.result @@ -1329,15 +1329,16 @@ EXECUTE stmt1 USING @val; CRC32(?) 3904355907 DEALLOCATE PREPARE stmt; +SET NAMES utf8; CREATE TABLE t1 (a TEXT) CHARACTER SET = utf8; -LOAD DATA INFILE '../../std_data/loaddata_utf8.dat' INTO TABLE t1; -SELECT a, CRC32(a) from t1; -a CRC32(a) -一二三 4127018387 -四五六 1229003783 -七八九 1497131859 -一二三 4127018387 -四五六 1229003783 -七八九 - 3236706998 +LOAD DATA INFILE '../../std_data/loaddata_utf8.dat' INTO TABLE t1 CHARACTER SET utf8; +SELECT HEX(a), CRC32(a) from t1; +HEX(a) CRC32(a) +E4B880E4BA8CE4B889 1785250883 +E59B9BE4BA94E585AD 2914501801 +E4B883E585ABE4B99D 2374586519 +E4B880E4BA8CE4B889 1785250883 +E59B9BE4BA94E585AD 2914501801 +E4B883E585ABE4B99D0A 1546750244 DROP TABLE t1; +SET NAMES default; diff --git a/mysql-test/t/func_math.test b/mysql-test/t/func_math.test index 69695dd195c7..64b93e507d49 100644 --- a/mysql-test/t/func_math.test +++ b/mysql-test/t/func_math.test @@ -915,7 +915,9 @@ EXECUTE stmt1 USING @val; DEALLOCATE PREPARE stmt; # Test case for checksum on contents of a file +SET NAMES utf8; CREATE TABLE t1 (a TEXT) CHARACTER SET = utf8; -LOAD DATA INFILE '../../std_data/loaddata_utf8.dat' INTO TABLE t1; -SELECT a, CRC32(a) from t1; +LOAD DATA INFILE '../../std_data/loaddata_utf8.dat' INTO TABLE t1 CHARACTER SET utf8; +SELECT HEX(a), CRC32(a) from t1; DROP TABLE t1; +SET NAMES default; From 1800b015a1d487330f7b15f2020b887be348a66b Mon Sep 17 00:00:00 2001 From: Venkatesh Duggirala Date: Fri, 8 Sep 2017 20:29:22 +0530 Subject: [PATCH 0061/1221] Bug#26027024 SLAVE_COMPRESSED_PROTOCOL DOESN'T WORK WITH SEMI-SYNC REPLICATION IN MYSQL-5.7 Analysis: In mysql-5.6, dump thread (the thread that is created on Master after Slave requested for a binlog dump) is also used to receive acknowledgements from the Slave and act on them accordingly. For performance reasons, a special thread called Ack Receiver thread is added in mysql-5.7 Semi synchronous replication plugin. This thread does not have special handling to receive acknowledgements if Slave has enabled compression in the protocol. Hence Master is unable to handle any slave if Slave_compressed_protocol is enabled on it. Fix: Enable compress flag on the communication channels if the Slave has Slave_compressed_protocol ON. --- ...semi_sync_slave_compressed_protocol.result | 12 ++++++ ..._sync_slave_compressed_protocol-master.opt | 1 + ...i_sync_slave_compressed_protocol-slave.opt | 2 + ...l_semi_sync_slave_compressed_protocol.test | 41 +++++++++++++++++++ .../semisync/semisync_master_ack_receiver.cc | 8 +++- 5 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 mysql-test/suite/rpl/r/rpl_semi_sync_slave_compressed_protocol.result create mode 100644 mysql-test/suite/rpl/t/rpl_semi_sync_slave_compressed_protocol-master.opt create mode 100644 mysql-test/suite/rpl/t/rpl_semi_sync_slave_compressed_protocol-slave.opt create mode 100644 mysql-test/suite/rpl/t/rpl_semi_sync_slave_compressed_protocol.test diff --git a/mysql-test/suite/rpl/r/rpl_semi_sync_slave_compressed_protocol.result b/mysql-test/suite/rpl/r/rpl_semi_sync_slave_compressed_protocol.result new file mode 100644 index 000000000000..2f2ee74352bc --- /dev/null +++ b/mysql-test/suite/rpl/r/rpl_semi_sync_slave_compressed_protocol.result @@ -0,0 +1,12 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +include/install_semisync.inc +CREATE TABLE t1 (i INT); +DROP TABLE t1; +include/rpl_sync.inc +include/assert_grep.inc [Check that there is no 'Read semi-sync reply magic number error' in error log.] +include/uninstall_semisync.inc +include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_semi_sync_slave_compressed_protocol-master.opt b/mysql-test/suite/rpl/t/rpl_semi_sync_slave_compressed_protocol-master.opt new file mode 100644 index 000000000000..58029d28acec --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_semi_sync_slave_compressed_protocol-master.opt @@ -0,0 +1 @@ +$SEMISYNC_PLUGIN_OPT diff --git a/mysql-test/suite/rpl/t/rpl_semi_sync_slave_compressed_protocol-slave.opt b/mysql-test/suite/rpl/t/rpl_semi_sync_slave_compressed_protocol-slave.opt new file mode 100644 index 000000000000..4600c0eaf154 --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_semi_sync_slave_compressed_protocol-slave.opt @@ -0,0 +1,2 @@ +$SEMISYNC_PLUGIN_OPT +--slave_compressed_protocol diff --git a/mysql-test/suite/rpl/t/rpl_semi_sync_slave_compressed_protocol.test b/mysql-test/suite/rpl/t/rpl_semi_sync_slave_compressed_protocol.test new file mode 100644 index 000000000000..3415000c8976 --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_semi_sync_slave_compressed_protocol.test @@ -0,0 +1,41 @@ +################################################################################ +# Bug#26027024 SLAVE_COMPRESSED_PROTOCOL DOESN'T WORK WITH SEMI-SYNC +# REPLICATION IN MYSQL-5.7 +# +# Steps to reproduce: +# 1) Set slave_compressed_protocol ON on Slave. +# 2) Do some sample work on Master +# 3) After the work is synced on Slave, check that there is no error +# (Read semi-sync reply magic number error) on Slave. +# 4) Cleanup +################################################################################ +# Test is independent of Binlog format. One of the three formats is enough +# for testing. Choosing 'Row' format. +--source include/have_binlog_format_row.inc +--source include/not_group_replication_plugin.inc +--source include/master-slave.inc +--source include/install_semisync.inc + +# Do some sample work on Master with slave_compressed_protocol ON. +# (slave_compressed_protocol is set to ON in -slave.opt file of this test.) +CREATE TABLE t1 (i INT); +DROP TABLE t1; + +# Make sure sync is done, so that next 'assert' step can be executed without +# any issues. +--source include/rpl_sync.inc + +# Without the fix, the test would have generated few +# errors in the error log. With the fix, test will +# pass without any errors in the error log. +--let $assert_text= Check that there is no 'Read semi-sync reply magic number error' in error log. +--let $assert_select=Read semi-sync reply magic number error +--let $assert_file= $MYSQLTEST_VARDIR/log/mysqld.1.err +--let $assert_count= 0 +--let $assert_only_after = CURRENT_TEST:rpl.rpl_semi_sync_slave_compressed_protocol.test +--source include/assert_grep.inc + + +# Cleanup +--source include/uninstall_semisync.inc +--source include/rpl_end.inc diff --git a/plugin/semisync/semisync_master_ack_receiver.cc b/plugin/semisync/semisync_master_ack_receiver.cc index d0faf1f265de..aa0751454c75 100644 --- a/plugin/semisync/semisync_master_ack_receiver.cc +++ b/plugin/semisync/semisync_master_ack_receiver.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -263,6 +263,12 @@ void Ack_receiver::run() net_clear(&net, 0); net.vio= &m_slaves[i].vio; + /* + Set compress flag. This is needed to support + Slave_compress_protocol flag enabled Slaves + */ + net.compress= + m_slaves[i].thd->get_protocol_classic()->get_compression(); len= my_net_read(&net); if (likely(len != packet_error)) From 2d4bb76bf09df2901cef9324e2264bc2678b32aa Mon Sep 17 00:00:00 2001 From: Aakanksha Verma Date: Mon, 18 Sep 2017 18:23:52 +0530 Subject: [PATCH 0062/1221] Bug #26731025 INNODB PARTITION TABLE WILL LOCK INTO THE NEAR RECORD AS A CONDITION IN THE USE PROBLEM ======= During a multiple client scenario: Multiple updates from diffrent sessions end up in lock wait timeout issue. The lock wait timeout is occuring because when session 1 tries to update a record and takes a record lock on it and other session tries doing another update on another record, it starts to wait for lock to be released by session 1 when it tries reading the next record in range. Session 2 while fetching the next record calls on index_next that sets the match mode to be 0 instead of ROW_SEL_EXACT or 1 which would correctly set the lock type to be GAP LOCK and avoid the uneccessary wait it would have to do otherwise in the case when it can't have explict lock on record. FIX ==== Its a regression from 5.7 onwards, in 5.6 the issue doesn't exist. Have made the call to index_next_same instead of index_next only in the case when scan type is PARTITION READ RANGE and the bool value of is_next_same is set to true, so that match mode is correctly set and LOCK_GAP gets set avoiding the uneccessary wait. Reviewed by: Debarun Banerjee RB: 17380 --- mysql-test/r/partition_innodb.result | 33 ++++++++++++++++++ mysql-test/t/partition_innodb.test | 49 +++++++++++++++++++++++++++ sql/partitioning/partition_handler.cc | 14 ++++---- 3 files changed, 89 insertions(+), 7 deletions(-) diff --git a/mysql-test/r/partition_innodb.result b/mysql-test/r/partition_innodb.result index 9cc427be869a..e51ad4d52526 100644 --- a/mysql-test/r/partition_innodb.result +++ b/mysql-test/r/partition_innodb.result @@ -1232,3 +1232,36 @@ CREATE TABLE t(id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, dttm DATETIME NOT NU SELECT * FROM t WHERE dttm > '2017-01-19' ORDER BY id DESC; id dttm msg DROP TABLE t,t1; + +Bug #26731025 INNODB PARTITION TABLE WILL LOCK INTO THE NEAR RECORD AS A CONDITION IN THE USE + + +create table test12 (name varchar(30),age bigint,grade bigint,date datetime +not null,partition_id int not null, +PRIMARY KEY (`name`,`PARTITION_ID`), +KEY `IDX_DATE` (`date`,`name`,`partition_id`), +KEY `IDX_AGE` (`age`,`partition_id`) ) PARTITION BY RANGE +COLUMNS(PARTITION_ID) +(PARTITION p0 VALUES LESS THAN (0) ENGINE = InnoDB, +PARTITION P1 VALUES LESS THAN (1) ENGINE = InnoDB, +PARTITION P2 VALUES LESS THAN (2) ENGINE = InnoDB, +PARTITION P3 VALUES LESS THAN (3) ENGINE = InnoDB, +PARTITION P4 VALUES LESS THAN (4) ENGINE = InnoDB, +PARTITION P5 VALUES LESS THAN (5) ENGINE = InnoDB, +PARTITION P6 VALUES LESS THAN (6) ENGINE = InnoDB, +PARTITION P7 VALUES LESS THAN (7) ENGINE = InnoDB, +PARTITION P8 VALUES LESS THAN (8) ENGINE = InnoDB, +PARTITION P9 VALUES LESS THAN (9) ENGINE = InnoDB); +insert into test12 values('Tom1',20,1,'2017-08-25 +12:12:12',1),('Tom2',21,1,'2017-08-25 12:12:12',1),('Tom3',23,1,'2017-08-25 +12:12:12',1); +begin; +update test12 set grade=3,date=now() where age=23 and +partition_id=1; +begin; +update test12 set grade=1,date=now() where age=21 and +partition_id=1; +begin; +update test12 set grade=0,date=now() where age=20 and +partition_id=1; +drop table test12; diff --git a/mysql-test/t/partition_innodb.test b/mysql-test/t/partition_innodb.test index 09afafd9fd60..11172d03d7be 100644 --- a/mysql-test/t/partition_innodb.test +++ b/mysql-test/t/partition_innodb.test @@ -1196,3 +1196,52 @@ CREATE TABLE t(id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, dttm DATETIME NOT NU SELECT * FROM t WHERE dttm > '2017-01-19' ORDER BY id DESC; DROP TABLE t,t1; + + +--echo +--echo Bug #26731025 INNODB PARTITION TABLE WILL LOCK INTO THE NEAR RECORD AS A CONDITION IN THE USE +--echo +--echo + +--connect (con1,localhost,root,,) +--connect (con2,localhost,root,,) + +--connection default + +create table test12 (name varchar(30),age bigint,grade bigint,date datetime +not null,partition_id int not null, + PRIMARY KEY (`name`,`PARTITION_ID`), + KEY `IDX_DATE` (`date`,`name`,`partition_id`), + KEY `IDX_AGE` (`age`,`partition_id`) ) PARTITION BY RANGE +COLUMNS(PARTITION_ID) +(PARTITION p0 VALUES LESS THAN (0) ENGINE = InnoDB, + PARTITION P1 VALUES LESS THAN (1) ENGINE = InnoDB, + PARTITION P2 VALUES LESS THAN (2) ENGINE = InnoDB, + PARTITION P3 VALUES LESS THAN (3) ENGINE = InnoDB, + PARTITION P4 VALUES LESS THAN (4) ENGINE = InnoDB, + PARTITION P5 VALUES LESS THAN (5) ENGINE = InnoDB, + PARTITION P6 VALUES LESS THAN (6) ENGINE = InnoDB, + PARTITION P7 VALUES LESS THAN (7) ENGINE = InnoDB, + PARTITION P8 VALUES LESS THAN (8) ENGINE = InnoDB, + PARTITION P9 VALUES LESS THAN (9) ENGINE = InnoDB); + + insert into test12 values('Tom1',20,1,'2017-08-25 +12:12:12',1),('Tom2',21,1,'2017-08-25 12:12:12',1),('Tom3',23,1,'2017-08-25 +12:12:12',1); + +begin;update test12 set grade=3,date=now() where age=23 and +partition_id=1; + +--connection con1 +begin;update test12 set grade=1,date=now() where age=21 and +partition_id=1; + +--connection con2 +begin;update test12 set grade=0,date=now() where age=20 and +partition_id=1; + +--disconnect con1 +--disconnect con2 + +--connection default +drop table test12; diff --git a/sql/partitioning/partition_handler.cc b/sql/partitioning/partition_handler.cc index 012fb8d752e1..cb00dc301582 100644 --- a/sql/partitioning/partition_handler.cc +++ b/sql/partitioning/partition_handler.cc @@ -3044,18 +3044,18 @@ int Partition_helper::handle_unordered_next(uchar *buf, bool is_next_same) partition_read_range is_next_same are always local constants */ - if (m_index_scan_type == PARTITION_READ_RANGE) - { - DBUG_ASSERT(buf == m_table->record[0]); - error= read_range_next_in_part(m_part_spec.start_part, NULL); - } - else if (is_next_same) + if(is_next_same) { error= index_next_same_in_part(m_part_spec.start_part, - buf, + buf, m_start_key.key, m_start_key.length); } + else if ((m_index_scan_type == PARTITION_READ_RANGE)) + { + DBUG_ASSERT(buf == m_table->record[0]); + error= read_range_next_in_part(m_part_spec.start_part, NULL); + } else { error= index_next_in_part(m_part_spec.start_part, buf); From 51c873c7879bdd360f2c29c55670a11ca656a38a Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Mon, 18 Sep 2017 16:29:06 +0200 Subject: [PATCH 0063/1221] Bug#26022865 BUILD FOR WINDOWS-S12-64BIT,ADVANCED IS FAILING ON PB2 MYSQL-5.6 Remove cmake code for signing executables. Automatic signing has always failed anyways. It should be done manually as part of the release process. Also: remove unuse cmake code: INSTALL_MANPAGE INSTALL_SYMLINK GET_TARGET_NAME --- .../build_configurations/mysql_release.cmake | 9 +- cmake/install_macros.cmake | 136 +----------------- libmysql/CMakeLists.txt | 6 - 3 files changed, 2 insertions(+), 149 deletions(-) diff --git a/cmake/build_configurations/mysql_release.cmake b/cmake/build_configurations/mysql_release.cmake index 85ece756470b..d371c29ea920 100644 --- a/cmake/build_configurations/mysql_release.cmake +++ b/cmake/build_configurations/mysql_release.cmake @@ -1,4 +1,4 @@ -# Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2010, 2017, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -25,13 +25,6 @@ IF(NOT COMPILATION_COMMENT) SET(COMPILATION_COMMENT "MySQL Community Server (GPL)") ENDIF() -IF(WIN32) - IF(NOT CMAKE_USING_VC_FREE_TOOLS) - # Sign executables with authenticode certificate - SET(SIGNCODE 1 CACHE BOOL "") - ENDIF() -ENDIF() - IF(UNIX) SET(WITH_EXTRA_CHARSETS all CACHE STRING "") diff --git a/cmake/install_macros.cmake b/cmake/install_macros.cmake index 48810f26204e..2677343097f4 100644 --- a/cmake/install_macros.cmake +++ b/cmake/install_macros.cmake @@ -15,6 +15,7 @@ GET_FILENAME_COMPONENT(MYSQL_CMAKE_SCRIPT_DIR ${CMAKE_CURRENT_LIST_FILE} PATH) INCLUDE(${MYSQL_CMAKE_SCRIPT_DIR}/cmake_parse_arguments.cmake) + MACRO (INSTALL_DEBUG_SYMBOLS targets) IF(MSVC) FOREACH(target ${targets}) @@ -54,43 +55,6 @@ MACRO (INSTALL_DEBUG_SYMBOLS targets) ENDIF() ENDMACRO() -# Installs manpage for given file (either script or executable) -# -FUNCTION(INSTALL_MANPAGE file) - IF(NOT UNIX) - RETURN() - ENDIF() - GET_FILENAME_COMPONENT(file_name "${file}" NAME) - SET(GLOB_EXPR - ${CMAKE_SOURCE_DIR}/man/*${file}man.1* - ${CMAKE_SOURCE_DIR}/man/*${file}man.8* - ${CMAKE_BINARY_DIR}/man/*${file}man.1* - ${CMAKE_BINARY_DIR}/man/*${file}man.8* - ) - IF(MYSQL_DOC_DIR) - SET(GLOB_EXPR - ${MYSQL_DOC_DIR}/man/*${file}man.1* - ${MYSQL_DOC_DIR}/man/*${file}man.8* - ${MYSQL_DOC_DIR}/man/*${file}.1* - ${MYSQL_DOC_DIR}/man/*${file}.8* - ${GLOB_EXPR} - ) - ENDIF() - - FILE(GLOB_RECURSE MANPAGES ${GLOB_EXPR}) - IF(MANPAGES) - LIST(GET MANPAGES 0 MANPAGE) - STRING(REPLACE "${file}man.1" "${file}.1" MANPAGE "${MANPAGE}") - STRING(REPLACE "${file}man.8" "${file}.8" MANPAGE "${MANPAGE}") - IF(MANPAGE MATCHES "${file}.1") - SET(SECTION man1) - ELSE() - SET(SECTION man8) - ENDIF() - INSTALL(FILES "${MANPAGE}" DESTINATION "${INSTALL_MANDIR}/${SECTION}" - COMPONENT ManPages) - ENDIF() -ENDFUNCTION() FUNCTION(INSTALL_SCRIPT) MYSQL_PARSE_ARGUMENTS(ARG @@ -116,94 +80,8 @@ FUNCTION(INSTALL_SCRIPT) OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE ${COMP} ) - INSTALL_MANPAGE(${script}) ENDFUNCTION() -# Install symbolic link to CMake target. -# We do 'cd path; ln -s target_name link_name' -# We also add an INSTALL target for "${path}/${link_name}" -MACRO(INSTALL_SYMLINK target target_name link_name destination component) -IF(UNIX) - GET_TARGET_PROPERTY(location ${target} LOCATION) - GET_FILENAME_COMPONENT(path ${location} PATH) - - SET(output ${path}/${link_name}) - ADD_CUSTOM_COMMAND( - OUTPUT ${output} - COMMAND ${CMAKE_COMMAND} ARGS -E remove -f ${output} - COMMAND ${CMAKE_COMMAND} ARGS -E create_symlink - ${target_name} - ${link_name} - WORKING_DIRECTORY ${path} - DEPENDS ${target} - ) - - ADD_CUSTOM_TARGET(symlink_${link_name} - ALL - DEPENDS ${output}) - SET_TARGET_PROPERTIES(symlink_${link_name} PROPERTIES CLEAN_DIRECT_OUTPUT 1) - IF(CMAKE_GENERATOR MATCHES "Xcode") - # For Xcode, replace project config with install config - STRING(REPLACE "${CMAKE_CFG_INTDIR}" - "\${CMAKE_INSTALL_CONFIG_NAME}" output ${output}) - ENDIF() - INSTALL(FILES ${output} DESTINATION ${destination} COMPONENT ${component}) -ENDIF() -ENDMACRO() - -IF(WIN32) - OPTION(SIGNCODE "Sign executables and dlls with digital certificate" OFF) - MARK_AS_ADVANCED(SIGNCODE) - IF(SIGNCODE) - SET(SIGNTOOL_PARAMETERS - /a /t http://timestamp.verisign.com/scripts/timstamp.dll - CACHE STRING "parameters for signtool (list)") - FIND_PROGRAM(SIGNTOOL_EXECUTABLE signtool) - IF(NOT SIGNTOOL_EXECUTABLE) - MESSAGE(FATAL_ERROR - "signtool is not found. Signing executables not possible") - ENDIF() - IF(NOT DEFINED SIGNCODE_ENABLED) - FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/testsign.c "int main(){return 0;}") - MAKE_DIRECTORY(${CMAKE_CURRENT_BINARY_DIR}/testsign) - TRY_COMPILE(RESULT ${CMAKE_CURRENT_BINARY_DIR}/testsign ${CMAKE_CURRENT_BINARY_DIR}/testsign.c - COPY_FILE ${CMAKE_CURRENT_BINARY_DIR}/testsign.exe - ) - - EXECUTE_PROCESS(COMMAND - ${SIGNTOOL_EXECUTABLE} sign ${SIGNTOOL_PARAMETERS} ${CMAKE_CURRENT_BINARY_DIR}/testsign.exe - RESULT_VARIABLE ERR ERROR_QUIET OUTPUT_QUIET - ) - IF(ERR EQUAL 0) - SET(SIGNCODE_ENABLED 1 CACHE INTERNAL "Can sign executables") - ELSE() - MESSAGE(STATUS "Disable authenticode signing for executables") - SET(SIGNCODE_ENABLED 0 CACHE INTERNAL "Invalid or missing certificate") - ENDIF() - ENDIF() - MARK_AS_ADVANCED(SIGNTOOL_EXECUTABLE SIGNTOOL_PARAMETERS) - ENDIF() -ENDIF() - -MACRO(SIGN_TARGET target) - GET_TARGET_PROPERTY(target_type ${target} TYPE) - IF(target_type AND NOT target_type MATCHES "STATIC") - GET_TARGET_PROPERTY(target_location ${target} LOCATION) - IF(CMAKE_GENERATOR MATCHES "Visual Studio") - STRING(REPLACE "${CMAKE_CFG_INTDIR}" "\${CMAKE_INSTALL_CONFIG_NAME}" - target_location ${target_location}) - ENDIF() - INSTALL(CODE - "EXECUTE_PROCESS(COMMAND - ${SIGNTOOL_EXECUTABLE} sign ${SIGNTOOL_PARAMETERS} ${target_location} - RESULT_VARIABLE ERR) - IF(NOT \${ERR} EQUAL 0) - MESSAGE(FATAL_ERROR \"Error signing ${target_location}\") - ENDIF() - ") - ENDIF() -ENDMACRO() - # Installs targets, also installs pdbs on Windows. # @@ -223,18 +101,6 @@ FUNCTION(MYSQL_INSTALL_TARGETS) MESSAGE(FATAL_ERROR "Need DESTINATION parameter for MYSQL_INSTALL_TARGETS") ENDIF() - - FOREACH(target ${TARGETS}) - # If signing is required, sign executables before installing - IF(SIGNCODE AND SIGNCODE_ENABLED) - SIGN_TARGET(${target}) - ENDIF() - # Install man pages on Unix - IF(UNIX) - GET_TARGET_PROPERTY(target_location ${target} LOCATION) - INSTALL_MANPAGE(${target_location}) - ENDIF() - ENDFOREACH() IF(ARG_COMPONENT) SET(COMP COMPONENT ${ARG_COMPONENT}) ENDIF() diff --git a/libmysql/CMakeLists.txt b/libmysql/CMakeLists.txt index b0336a783098..07f1d0085b60 100644 --- a/libmysql/CMakeLists.txt +++ b/libmysql/CMakeLists.txt @@ -243,12 +243,6 @@ IF(MSVC) INSTALL_DEBUG_TARGET(clientlib DESTINATION ${INSTALL_LIBDIR}/debug) ENDIF() -MACRO(GET_TARGET_NAME target out_name) - GET_TARGET_PROPERTY(location ${target} LOCATION) - GET_FILENAME_COMPONENT(name ${location} NAME) - SET(${out_name} ${name}) -ENDMACRO() - IF(UNIX) MACRO(GET_VERSIONED_LIBNAME LIBNAME EXTENSION VERSION OUTNAME) SET(DOT_VERSION ".${VERSION}") From b517a87a86598bb7d3a6f020694cdbeec3f2889e Mon Sep 17 00:00:00 2001 From: Lars Tangvald Date: Thu, 17 Aug 2017 12:37:31 +0200 Subject: [PATCH 0064/1221] Bug#26647168 DEB PACKAGING: COPY LICENSE/README IN D/INSTALL INSTEAD OF D/RULES To include the license and readme files in all packages, they must be in separate locations for each package, since apt does not allow multiple packages to share the same file. We've used the rules file to make copies of the files for each package, but it's cleaner to do it in the install file for each package --- .../deb-in/libmysqlclient-dev.install.in | 6 +-- packaging/deb-in/libmysqlclient18.install.in | 6 +-- packaging/deb-in/libmysqld-dev.install.in | 6 +-- packaging/deb-in/mysql-client.install.in | 6 +-- packaging/deb-in/mysql-common.install.in | 6 +-- .../mysql-packagesource-bench.install.in | 6 +-- .../mysql-packagesource-client.install.in | 4 +- .../mysql-packagesource-server.install.in | 4 +- .../mysql-packagesource-source.install.in | 6 +-- .../mysql-packagesource-test.install.in | 4 +- packaging/deb-in/mysql-server.install.in | 6 +-- packaging/deb-in/mysql-testsuite.install.in | 6 +-- packaging/deb-in/rules.in | 39 ------------------- 13 files changed, 33 insertions(+), 72 deletions(-) diff --git a/packaging/deb-in/libmysqlclient-dev.install.in b/packaging/deb-in/libmysqlclient-dev.install.in index 29d904671e19..ca031954268d 100644 --- a/packaging/deb-in/libmysqlclient-dev.install.in +++ b/packaging/deb-in/libmysqlclient-dev.install.in @@ -1,4 +1,4 @@ -# Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -23,5 +23,5 @@ usr/bin/mysql_config usr/share/man/man1/mysql_config.1 usr/share/aclocal/mysql.m4 # legal -usr/share/doc/libmysqlclient-dev/@DEB_INSTALL_LICENSEFILE@ -usr/share/doc/libmysqlclient-dev/README +usr/share/mysql/@DEB_INSTALL_LICENSEFILE@ usr/share/doc/libmysqlclient-dev/ +usr/share/mysql/README usr/share/doc/libmysqlclient-dev/ diff --git a/packaging/deb-in/libmysqlclient18.install.in b/packaging/deb-in/libmysqlclient18.install.in index 5f7ef63484c9..39ed9f6564cf 100644 --- a/packaging/deb-in/libmysqlclient18.install.in +++ b/packaging/deb-in/libmysqlclient18.install.in @@ -1,4 +1,4 @@ -# Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -15,5 +15,5 @@ usr/lib/*/libmysqlclient.so.18* # legal -usr/share/doc/libmysqlclient18/@DEB_INSTALL_LICENSEFILE@ -usr/share/doc/libmysqlclient18/README +usr/share/mysql/@DEB_INSTALL_LICENSEFILE@ usr/share/doc/libmysqlclient18/ +usr/share/mysql/README usr/share/doc/libmysqlclient18/ diff --git a/packaging/deb-in/libmysqld-dev.install.in b/packaging/deb-in/libmysqld-dev.install.in index 2e5065fbe4e2..9728ec13e543 100644 --- a/packaging/deb-in/libmysqld-dev.install.in +++ b/packaging/deb-in/libmysqld-dev.install.in @@ -1,4 +1,4 @@ -# Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -16,5 +16,5 @@ usr/lib/*/libmysqld.a usr/lib/*/libmysqld-debug.a # legal -usr/share/doc/libmysqld-dev/@DEB_INSTALL_LICENSEFILE@ -usr/share/doc/libmysqld-dev/README +usr/share/mysql/@DEB_INSTALL_LICENSEFILE@ usr/share/doc/libmysqld-dev/ +usr/share/mysql/README usr/share/doc/libmysqld-dev/ diff --git a/packaging/deb-in/mysql-client.install.in b/packaging/deb-in/mysql-client.install.in index 26ae1bf1c9b9..7be84065f7a3 100644 --- a/packaging/deb-in/mysql-client.install.in +++ b/packaging/deb-in/mysql-client.install.in @@ -1,4 +1,4 @@ -# Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -14,5 +14,5 @@ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # legal -usr/share/doc/mysql-client/@DEB_INSTALL_LICENSEFILE@ -usr/share/doc/mysql-client/README +usr/share/mysql/@DEB_INSTALL_LICENSEFILE@ usr/share/doc/mysql-client/ +usr/share/mysql/README usr/share/doc/mysql-client/ diff --git a/packaging/deb-in/mysql-common.install.in b/packaging/deb-in/mysql-common.install.in index c8d8e9e3cff2..e4ac71856753 100644 --- a/packaging/deb-in/mysql-common.install.in +++ b/packaging/deb-in/mysql-common.install.in @@ -1,4 +1,4 @@ -# Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -21,5 +21,5 @@ usr/share/mysql/docs/ChangeLog usr/share/mysql/docs/INFO_SRC usr/share/mysql/docs/INFO_BIN # legal -usr/share/doc/mysql-common/@DEB_INSTALL_LICENSEFILE@ -usr/share/doc/mysql-common/README +usr/share/mysql/@DEB_INSTALL_LICENSEFILE@ usr/share/doc/mysql-common/ +usr/share/mysql/README usr/share/doc/mysql-common/ diff --git a/packaging/deb-in/mysql-packagesource-bench.install.in b/packaging/deb-in/mysql-packagesource-bench.install.in index cefabaa23bd3..b406b07ad11f 100644 --- a/packaging/deb-in/mysql-packagesource-bench.install.in +++ b/packaging/deb-in/mysql-packagesource-bench.install.in @@ -1,4 +1,4 @@ -# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -15,5 +15,5 @@ usr/lib/mysql/sql-bench/* # legal -usr/share/doc/mysql-@DEB_PRODUCTNAME@-bench/@DEB_INSTALL_LICENSEFILE@ -usr/share/doc/mysql-@DEB_PRODUCTNAME@-bench/README +usr/share/mysql/@DEB_INSTALL_LICENSEFILE@ usr/share/doc/mysql-@DEB_PRODUCTNAME@-bench/ +usr/share/mysql/README usr/share/doc/mysql-@DEB_PRODUCTNAME@-bench/ diff --git a/packaging/deb-in/mysql-packagesource-client.install.in b/packaging/deb-in/mysql-packagesource-client.install.in index 6c9066c7e284..7cb1727121b1 100644 --- a/packaging/deb-in/mysql-packagesource-client.install.in +++ b/packaging/deb-in/mysql-packagesource-client.install.in @@ -55,5 +55,5 @@ usr/share/man/man1/mysqlman.1 usr/share/man/man1/mysqlshow.1 usr/share/man/man1/mysqlslap.1 # legal -usr/share/doc/mysql-@DEB_PRODUCTNAME@-client/@DEB_INSTALL_LICENSEFILE@ -usr/share/doc/mysql-@DEB_PRODUCTNAME@-client/README +usr/share/mysql/@DEB_INSTALL_LICENSEFILE@ usr/share/doc/mysql-@DEB_PRODUCTNAME@-client/ +usr/share/mysql/README usr/share/doc/mysql-@DEB_PRODUCTNAME@-client/ diff --git a/packaging/deb-in/mysql-packagesource-server.install.in b/packaging/deb-in/mysql-packagesource-server.install.in index de2c597d6d35..66b265b5b99b 100644 --- a/packaging/deb-in/mysql-packagesource-server.install.in +++ b/packaging/deb-in/mysql-packagesource-server.install.in @@ -94,5 +94,5 @@ usr/share/mysql/errmsg-utf8.txt @DEB_INSTALL_SERVER_SYSTEMD@ usr/share/mysql/mysqld_multi.server # legal -usr/share/doc/mysql-@DEB_PRODUCTNAME@-server/@DEB_INSTALL_LICENSEFILE@ -usr/share/doc/mysql-@DEB_PRODUCTNAME@-server/README +usr/share/mysql/@DEB_INSTALL_LICENSEFILE@ usr/share/doc/mysql-@DEB_PRODUCTNAME@-server/ +usr/share/mysql/README usr/share/doc/mysql-@DEB_PRODUCTNAME@-server/ diff --git a/packaging/deb-in/mysql-packagesource-source.install.in b/packaging/deb-in/mysql-packagesource-source.install.in index 8fb945667399..3556b870337d 100644 --- a/packaging/deb-in/mysql-packagesource-source.install.in +++ b/packaging/deb-in/mysql-packagesource-source.install.in @@ -1,4 +1,4 @@ -# Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -17,5 +17,5 @@ ../*.tar.gz usr/src/mysql/ @DEB_INSTALL_SOURCE_XZ@ # legal -usr/share/doc/mysql-@DEB_PRODUCTNAME@-source/@DEB_INSTALL_LICENSEFILE@ -usr/share/doc/mysql-@DEB_PRODUCTNAME@-source/README +usr/share/mysql/@DEB_INSTALL_LICENSEFILE@ usr/share/doc/mysql-@DEB_PRODUCTNAME@-source/ +usr/share/mysql/README usr/share/doc/mysql-@DEB_PRODUCTNAME@-source/ diff --git a/packaging/deb-in/mysql-packagesource-test.install.in b/packaging/deb-in/mysql-packagesource-test.install.in index 7c592c7952c8..929b5e5c64e9 100644 --- a/packaging/deb-in/mysql-packagesource-test.install.in +++ b/packaging/deb-in/mysql-packagesource-test.install.in @@ -37,5 +37,5 @@ usr/lib/mysql/plugin/test_udf_services.so # test suite usr/lib/mysql-test/* # legal -usr/share/doc/mysql-@DEB_PRODUCTNAME@-test/@DEB_INSTALL_LICENSEFILE@ -usr/share/doc/mysql-@DEB_PRODUCTNAME@-test/README +usr/share/mysql/@DEB_INSTALL_LICENSEFILE@ usr/share/doc/mysql-@DEB_PRODUCTNAME@-test/ +usr/share/mysql/README usr/share/doc/mysql-@DEB_PRODUCTNAME@-test/ diff --git a/packaging/deb-in/mysql-server.install.in b/packaging/deb-in/mysql-server.install.in index bcb11b4ffbf3..91416cc978c7 100644 --- a/packaging/deb-in/mysql-server.install.in +++ b/packaging/deb-in/mysql-server.install.in @@ -1,4 +1,4 @@ -# Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -14,5 +14,5 @@ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # legal -usr/share/doc/mysql-server/@DEB_INSTALL_LICENSEFILE@ -usr/share/doc/mysql-server/README +usr/share/mysql/@DEB_INSTALL_LICENSEFILE@ usr/share/doc/mysql-server/ +usr/share/mysql/README usr/share/doc/mysql-server/ diff --git a/packaging/deb-in/mysql-testsuite.install.in b/packaging/deb-in/mysql-testsuite.install.in index 644be2c6e4b3..80d450e394ef 100644 --- a/packaging/deb-in/mysql-testsuite.install.in +++ b/packaging/deb-in/mysql-testsuite.install.in @@ -1,4 +1,4 @@ -# Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -14,5 +14,5 @@ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # legal -usr/share/doc/mysql-testsuite/@DEB_INSTALL_LICENSEFILE@ -usr/share/doc/mysql-testsuite/README +usr/share/mysql/@DEB_INSTALL_LICENSEFILE@ usr/share/doc/mysql-testsuite/ +usr/share/mysql/README usr/share/doc/mysql-testsuite/ diff --git a/packaging/deb-in/rules.in b/packaging/deb-in/rules.in index 2ee8eda3c511..7332a551e28f 100644 --- a/packaging/deb-in/rules.in +++ b/packaging/deb-in/rules.in @@ -84,45 +84,6 @@ override_dh_auto_install: @DEB_RULES_INSTALL_APPARMOR@ # add systemd script @DEB_RULES_INSTALL_SYSTEMD@ - # add directory for legal docs - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-server - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-@DEB_PRODUCTNAME@-server - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-client - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-@DEB_PRODUCTNAME@-client - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-common - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/libmysqlclient18 - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/libmysqlclient-dev - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/libmysqld-dev - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-@DEB_PRODUCTNAME@-bench - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-testsuite - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-@DEB_PRODUCTNAME@-test - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-@DEB_PRODUCTNAME@-source - # add @DEB_INSTALL_LICENSEFILE@ file to each package - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/@DEB_INSTALL_LICENSEFILE@ debian/tmp/usr/share/doc/mysql-server/@DEB_INSTALL_LICENSEFILE@ - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/@DEB_INSTALL_LICENSEFILE@ debian/tmp/usr/share/doc/mysql-@DEB_PRODUCTNAME@-server/@DEB_INSTALL_LICENSEFILE@ - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/@DEB_INSTALL_LICENSEFILE@ debian/tmp/usr/share/doc/mysql-client/@DEB_INSTALL_LICENSEFILE@ - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/@DEB_INSTALL_LICENSEFILE@ debian/tmp/usr/share/doc/mysql-@DEB_PRODUCTNAME@-client/@DEB_INSTALL_LICENSEFILE@ - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/@DEB_INSTALL_LICENSEFILE@ debian/tmp/usr/share/doc/mysql-common/@DEB_INSTALL_LICENSEFILE@ - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/@DEB_INSTALL_LICENSEFILE@ debian/tmp/usr/share/doc/libmysqlclient18/@DEB_INSTALL_LICENSEFILE@ - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/@DEB_INSTALL_LICENSEFILE@ debian/tmp/usr/share/doc/libmysqlclient-dev/@DEB_INSTALL_LICENSEFILE@ - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/@DEB_INSTALL_LICENSEFILE@ debian/tmp/usr/share/doc/libmysqld-dev/@DEB_INSTALL_LICENSEFILE@ - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/@DEB_INSTALL_LICENSEFILE@ debian/tmp/usr/share/doc/mysql-@DEB_PRODUCTNAME@-bench/@DEB_INSTALL_LICENSEFILE@ - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/@DEB_INSTALL_LICENSEFILE@ debian/tmp/usr/share/doc/mysql-testsuite/@DEB_INSTALL_LICENSEFILE@ - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/@DEB_INSTALL_LICENSEFILE@ debian/tmp/usr/share/doc/mysql-@DEB_PRODUCTNAME@-test/@DEB_INSTALL_LICENSEFILE@ - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/@DEB_INSTALL_LICENSEFILE@ debian/tmp/usr/share/doc/mysql-@DEB_PRODUCTNAME@-source/@DEB_INSTALL_LICENSEFILE@ - # add README file to each package - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-server/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-@DEB_PRODUCTNAME@-server/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-client/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-@DEB_PRODUCTNAME@-client/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-common/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/libmysqlclient18/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/libmysqlclient-dev/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/libmysqld-dev/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-@DEB_PRODUCTNAME@-bench/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-testsuite/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-@DEB_PRODUCTNAME@-test/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-@DEB_PRODUCTNAME@-source/README touch $@ override_dh_installinit: From 9bd98eb60547f1feff45a782f525db9382bec42a Mon Sep 17 00:00:00 2001 From: Nuno Carvalho Date: Thu, 14 Sep 2017 18:51:48 +0200 Subject: [PATCH 0065/1221] BUG#26802395: ASSERT `SERVER_ENGINE_INITIALIZED()' AT DELAYED_PLUGIN_INITIALIZATION.CC:167 During server initialization, with --initialize or --initialize-insecure, replication applier infrastructure is not initialized, as such Group Replication cannot be started on server boot. The above condition was not being properly considered, which led to a assertion failed. To avoid that issue, now the condition is properly considered and Group Replication is not started, which is intended since the server is being initialized. --- .../src/delayed_plugin_initialization.cc | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/rapid/plugin/group_replication/src/delayed_plugin_initialization.cc b/rapid/plugin/group_replication/src/delayed_plugin_initialization.cc index 335a195bab1f..31f85f7de79e 100644 --- a/rapid/plugin/group_replication/src/delayed_plugin_initialization.cc +++ b/rapid/plugin/group_replication/src/delayed_plugin_initialization.cc @@ -141,6 +141,7 @@ int Delayed_initialization_thread::launch_initialization_thread() int Delayed_initialization_thread::initialization_thread_handler() { DBUG_ENTER("initialize_thread_handler"); + int error= 0; mysql_mutex_lock(&run_lock); thread_running= true; @@ -155,12 +156,21 @@ int Delayed_initialization_thread::initialization_thread_handler() } mysql_mutex_unlock(&server_ready_lock); - DBUG_ASSERT(server_engine_initialized()); - - //Protect this delayed start against other start/stop requests - Mutex_autolock auto_lock_mutex(get_plugin_running_lock()); + if (server_engine_initialized()) + { + //Protect this delayed start against other start/stop requests + Mutex_autolock auto_lock_mutex(get_plugin_running_lock()); - int error= initialize_plugin_and_join(PSESSION_INIT_THREAD, this); + error= initialize_plugin_and_join(PSESSION_INIT_THREAD, this); + } + else + { + error= 1; + log_message(MY_ERROR_LEVEL, + "Unable to start Group Replication. Replication applier " + "infrastructure is not initialized since the server was " + "started with --initialize or --initialize-insecure."); + } mysql_mutex_lock(&run_lock); thread_running= false; From 1b3da22c277b80bb3dd773f07fdb8fd9bc6044f3 Mon Sep 17 00:00:00 2001 From: Jimmy Yang Date: Wed, 20 Sep 2017 01:38:26 +0200 Subject: [PATCH 0066/1221] Bug #25729649 LOCK0LOCK.CC:NNN:ADD_POSITION != __NULL Reviewed-by: Sunny Bains --- .../innodb/r/high_prio_trx_predicate.result | 30 +++++++++ .../innodb/t/high_prio_trx_predicate.test | 61 +++++++++++++++++++ storage/innobase/lock/lock0lock.cc | 7 ++- 3 files changed, 96 insertions(+), 2 deletions(-) create mode 100644 mysql-test/suite/innodb/r/high_prio_trx_predicate.result create mode 100644 mysql-test/suite/innodb/t/high_prio_trx_predicate.test diff --git a/mysql-test/suite/innodb/r/high_prio_trx_predicate.result b/mysql-test/suite/innodb/r/high_prio_trx_predicate.result new file mode 100644 index 000000000000..965e1e0f6ad3 --- /dev/null +++ b/mysql-test/suite/innodb/r/high_prio_trx_predicate.result @@ -0,0 +1,30 @@ +CREATE TABLE tab(c1 int NOT NULL PRIMARY KEY,c2 POINT NOT NULL); +CREATE SPATIAL INDEX idx1 on tab(c2); +INSERT INTO tab(c1,c2) VALUES(1,ST_GeomFromText('POINT(10 10)')); + +# On connection 1 +set transaction isolation level serializable ; +START TRANSACTION; +SELECT ST_AsText(c2) FROM tab WHERE MBRWithin(c2, ST_GeomFromText('POLYGON((5 5, 15 5, 15 15, 5 15, 5 5))')); +ST_AsText(c2) +POINT(10 10) + +# On connection 2 +start transaction; +INSERT INTO tab(c1,c2) VALUES(7, ST_GeomFromText('POINT(11 11)'));; + +# On connection 3 +include/start_transaction_high_prio.inc +START TRANSACTION /* HIGH PRIORITY */; +INSERT INTO tab(c1,c2) VALUES(8, ST_GeomFromText('POINT(10 10)')); +COMMIT; + +# On connection 1 +COMMIT; +ERROR HY000: Got error 149 during COMMIT +include/assert.inc ['There is a 8 in tab'] +SELECT c1 FROM tab; +c1 +1 +8 +DROP TABLE tab; diff --git a/mysql-test/suite/innodb/t/high_prio_trx_predicate.test b/mysql-test/suite/innodb/t/high_prio_trx_predicate.test new file mode 100644 index 000000000000..6503e90653bc --- /dev/null +++ b/mysql-test/suite/innodb/t/high_prio_trx_predicate.test @@ -0,0 +1,61 @@ +# Scenario: +# T1=({R(B)}) +# T2=({W(B)}) +# T3=({W(B), C}, HIGH_PRIORITY). +# +# Outcome: T1 must abort, T2 must commit. + +--source include/count_sessions.inc + +CREATE TABLE tab(c1 int NOT NULL PRIMARY KEY,c2 POINT NOT NULL); +CREATE SPATIAL INDEX idx1 on tab(c2); +INSERT INTO tab(c1,c2) VALUES(1,ST_GeomFromText('POINT(10 10)')); + +--connect(con1,localhost,root,,test) +--connect(con2,localhost,root,,test) +--connect(con3,localhost,root,,test) + +--echo +--echo # On connection 1 +--connection con1 +set transaction isolation level serializable ; +START TRANSACTION; +SELECT ST_AsText(c2) FROM tab WHERE MBRWithin(c2, ST_GeomFromText('POLYGON((5 5, 15 5, 15 15, 5 15, 5 5))')); + + +--echo +--echo # On connection 2 +--connection con2 +start transaction; +--send INSERT INTO tab(c1,c2) VALUES(7, ST_GeomFromText('POINT(11 11)')); + +--echo +--echo # On connection 3 +--connection con3 +--source include/start_transaction_high_prio.inc +INSERT INTO tab(c1,c2) VALUES(8, ST_GeomFromText('POINT(10 10)')); +COMMIT; +--disconnect con3 + +--echo +--echo # On connection 1 +--connection con1 +--error ER_ERROR_DURING_COMMIT +COMMIT; +--disconnect con1 + +--connection default +--let $assert_text= 'There is a 8 in tab' +--let $assert_cond= [SELECT COUNT(*) AS count FROM tab WHERE tab.c1 = 8, count, 1] = 1 +--source include/assert.inc + +--connection con2 +--reap; +--disconnect con2 + +--connection default +SELECT c1 FROM tab; + +DROP TABLE tab; + +--source include/wait_until_count_sessions.inc diff --git a/storage/innobase/lock/lock0lock.cc b/storage/innobase/lock/lock0lock.cc index 540bb6190327..77f388774a59 100644 --- a/storage/innobase/lock/lock0lock.cc +++ b/storage/innobase/lock/lock0lock.cc @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2017, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -2257,7 +2257,10 @@ RecLock::lock_add_priority( lock_t* grant_position = NULL; lock_t* add_position = NULL; - HASH_SEARCH(hash, lock_sys->rec_hash, m_rec_id.fold(), lock_t*, + /* Different lock (such as predicate lock) are on different hash */ + hash_table_t* lock_hash = lock_hash_get(m_mode); + + HASH_SEARCH(hash, lock_hash, m_rec_id.fold(), lock_t*, lock_head, ut_ad(lock_head->is_record_lock()), true); ut_ad(lock_head); From 6bc9d699b9ae90b456d43be1d13dde481be6d569 Mon Sep 17 00:00:00 2001 From: Lukasz Kotula Date: Tue, 5 Sep 2017 16:23:16 +0200 Subject: [PATCH 0067/1221] Bug#26695316 - MYSQLXTEST-HELP, WRONG TEXT ALIGNMENT (mysql-5.7) Description =========== "--help" and "--help-commands" arguments doesn't print the user informations correctly. Fix === Added line breaks to correct the information layout. Added a MTR test to confirm any change of the output. Change-Id: Ieac8eb857ad02e80bdb0e73abf66f6bc44829705 RB: 17297 Reviewed-by: Grzegorz Szwarc --- rapid/plugin/x/mysqlxtest_src/mysqlxtest.cc | 45 ++--- .../x/tests/mtr/r/mysqlxtest_help.result | 162 ++++++++++++++++++ .../plugin/x/tests/mtr/t/mysqlxtest_help.test | 18 ++ 3 files changed, 203 insertions(+), 22 deletions(-) create mode 100644 rapid/plugin/x/tests/mtr/r/mysqlxtest_help.result create mode 100644 rapid/plugin/x/tests/mtr/t/mysqlxtest_help.test diff --git a/rapid/plugin/x/mysqlxtest_src/mysqlxtest.cc b/rapid/plugin/x/mysqlxtest_src/mysqlxtest.cc index 04128760e67c..ed534db4ed07 100644 --- a/rapid/plugin/x/mysqlxtest_src/mysqlxtest.cc +++ b/rapid/plugin/x/mysqlxtest_src/mysqlxtest.cc @@ -2991,13 +2991,13 @@ class My_command_line_options : public Command_line_options std::cout << "-h, --host= Connection host\n"; std::cout << "-P, --port= Connection port (default:" << MYSQLX_TCP_PORT << ")\n"; std::cout << "--ipv= Force internet protocol (default:4):\n"; - std::cout << " 0 - allow system to resolve IPv6 and IPv4, for example"; - std::cout << " resolving of 'localhost' can return both '::1' and '127.0.0.1'"; + std::cout << " 0 - allow system to resolve IPv6 and IPv4, for example\n"; + std::cout << " resolving of 'localhost' can return both '::1' and '127.0.0.1'\n"; std::cout << " 4 - allow system to resolve only IPv4, for example\n"; - std::cout << " resolving of 'localhost' is going to return '127.0.0.1'"; + std::cout << " resolving of 'localhost' is going to return '127.0.0.1'\n"; std::cout << " 6 - allow system to resolve only IPv6, for example\n"; - std::cout << " resolving of 'localhost' is going to return '::1'"; - std::cout << "-t, --timeout= Connection timeout\n"; + std::cout << " resolving of 'localhost' is going to return '::1'\n"; + std::cout << "-t, --timeout= I/O timeouts in milliseconds\n"; std::cout << "--close-no-sync Do not wait for connection to be closed by server(disconnect first)\n"; std::cout << "--schema= Default schema to connect to\n"; std::cout << "--uri= Connection URI\n"; @@ -3016,7 +3016,8 @@ class My_command_line_options : public Command_line_options std::cout << "--quiet Don't print out messages sent\n"; std::cout << "-vVARIABLE_NAME=VALUE Set variable VARIABLE_NAME from command line\n"; std::cout << "--fatal-errors=<0|1> Mysqlxtest is started with ignoring or stopping on fatal error (default: 1)\n"; - std::cout << "-B, --bindump Dump binary representation of messages sent, in format suitable for the \"-->binsend\" command\n"; + std::cout << "-B, --bindump Dump binary representation of messages sent, in format suitable for\n"; + std::cout << " the \"-->binsend\" command\n"; std::cout << "--verbose Enable extra verbose messages\n"; std::cout << "--daemon Work as a daemon (unix only)\n"; std::cout << "--help Show command line help\n"; @@ -3074,7 +3075,7 @@ class My_command_line_options : public Command_line_options std::cout << "-->stmtsql \n"; std::cout << " Send StmtExecute with sql command\n"; std::cout << "-->stmtadmin [json_string]\n"; - std::cout << " Send StmtExecute with admin command with given aguments (formated as json object) \n"; + std::cout << " Send StmtExecute with admin command with given aguments (formated as json object)\n"; std::cout << "-->system \n"; std::cout << " Execute application or script (dev only)\n"; std::cout << "-->exit\n"; @@ -3082,7 +3083,7 @@ class My_command_line_options : public Command_line_options std::cout << "-->abort\n"; std::cout << " Exit immediately, without performing cleanup\n"; std::cout << "-->nowarnings/-->yeswarnings\n"; - std::cout << " Whether to print warnings generated by the statement (default no)\n"; + std::cout << " Whether to print warnings generated by the statement (default no)\n"; std::cout << "-->peerdisc [TOLERANCE]\n"; std::cout << " Expect that xplugin disconnects after given number of milliseconds and tolerance\n"; std::cout << "-->sleep \n"; @@ -3105,35 +3106,35 @@ class My_command_line_options : public Command_line_options std::cout << "-->closesession [abort]\n"; std::cout << " Close the active session (unless its the default session)\n"; std::cout << "-->wait_for \t\n"; - std::cout << " Wait until SQL query returns value matches expected value (time limit 30 second)\n"; + std::cout << " Wait until SQL query returns value matches expected value (time limit 30 second)\n"; std::cout << "-->assert_eq \t\n"; - std::cout << " Ensure that 'TESTED' value equals 'EXPECTED' by comparing strings lexicographically\n"; + std::cout << " Ensure that 'TESTED' value equals 'EXPECTED' by comparing strings lexicographically\n"; std::cout << "-->assert_gt \t\n"; - std::cout << " Ensure that 'TESTED' value is greater than 'EXPECTED' (only when the both are numeric values)\n"; + std::cout << " Ensure that 'TESTED' value is greater than 'EXPECTED' (only when the both are numeric values)\n"; std::cout << "-->assert_ge \t\n"; - std::cout << " Ensure that 'TESTED' value is greater or equal to 'EXPECTED' (only when the both are numeric values)\n"; + std::cout << " Ensure that 'TESTED' value is greater or equal to 'EXPECTED' (only when the both are numeric values)\n"; std::cout << "-->varfile \n"; - std::cout << " Assigns the contents of the file to the named variable\n"; + std::cout << " Assigns the contents of the file to the named variable\n"; std::cout << "-->varlet \n"; - std::cout << " Assign the value (can be another variable) to the variable\n"; + std::cout << " Assign the value (can be another variable) to the variable\n"; std::cout << "-->varinc \n"; - std::cout << " Increment the value of varname by n (assuming both convert to integral)\n"; + std::cout << " Increment the value of varname by n (assuming both convert to integral)\n"; std::cout << "-->varsub \n"; - std::cout << " Add a variable to the list of variables to replace for the next recv or sql command (value is replaced by the name)\n"; + std::cout << " Add a variable to the list of variables to replace for the next recv or sql command (value is replaced by the name)\n"; std::cout << "-->binsend [...]\n"; - std::cout << " Sends one or more binary message dumps to the server (generate those with --bindump)\n"; + std::cout << " Sends one or more binary message dumps to the server (generate those with --bindump)\n"; std::cout << "-->binsendoffset [offset-begin[percent]> [offset-end[percent]]]\n"; - std::cout << " Same as binsend with begin and end offset of data to be send\n"; + std::cout << " Same as binsend with begin and end offset of data to be send\n"; std::cout << "-->binparse MESSAGE.NAME {\n"; std::cout << " MESSAGE.DATA\n"; std::cout << "}\n"; - std::cout << " Dump given message to variable %MESSAGE_DUMP%\n"; + std::cout << " Dump given message to variable %MESSAGE_DUMP%\n"; std::cout << "-->quiet/noquiet\n"; - std::cout << " Toggle verbose messages\n"; + std::cout << " Toggle verbose messages\n"; std::cout << "-->query_result/noquery_result\n"; - std::cout << " Toggle visibility for query results\n"; + std::cout << " Toggle visibility for query results\n"; std::cout << "-->received \t\n"; - std::cout << " Assigns number of received messages of indicated type (in active session) to a variable\n"; + std::cout << " Assigns number of received messages of indicated type (in active session) to a variable\n"; std::cout << "# comment\n"; } diff --git a/rapid/plugin/x/tests/mtr/r/mysqlxtest_help.result b/rapid/plugin/x/tests/mtr/r/mysqlxtest_help.result new file mode 100644 index 000000000000..cfd022b42302 --- /dev/null +++ b/rapid/plugin/x/tests/mtr/r/mysqlxtest_help.result @@ -0,0 +1,162 @@ + +############################################################ +## Test mysqlxtest executable help printout +## +mysqlxtest +Options: +-f, --file= Reads input from file +-I, --import= Reads macro files from dir; required by -->import +--sql= Use SQL as input and execute it like in -->sql block +-n, --no-auth Skip authentication which is required by -->sql block (run mode) +--plain-auth Use PLAIN text authentication mechanism +-u, --user= Connection user +-p, --password= Connection password +-h, --host= Connection host +-P, --port= Connection port (default:33060) +--ipv= Force internet protocol (default:4): + 0 - allow system to resolve IPv6 and IPv4, for example + resolving of 'localhost' can return both '::1' and '127.0.0.1' + 4 - allow system to resolve only IPv4, for example + resolving of 'localhost' is going to return '127.0.0.1' + 6 - allow system to resolve only IPv6, for example + resolving of 'localhost' is going to return '::1' +-t, --timeout= I/O timeouts in milliseconds +--close-no-sync Do not wait for connection to be closed by server(disconnect first) +--schema= Default schema to connect to +--uri= Connection URI + URI takes precedence before options like: user, host, password, port +--socket= Connection through UNIX socket +--use-socket Connection through UNIX socket, using default file name 'SOCK' + --use-socket* options take precedence before options like: uri, user, + host, password, port +--ssl-key X509 key in PEM format +--ssl-ca CA file in PEM format +--ssl-ca_path CA directory +--ssl-cert X509 cert in PEM format +--ssl-cipher SSL cipher to use +--tls-version TLS version to use +--connect-expired-password Allow expired password +--quiet Don't print out messages sent +-vVARIABLE_NAME=VALUE Set variable VARIABLE_NAME from command line +--fatal-errors=<0|1> Mysqlxtest is started with ignoring or stopping on fatal error (default: 1) +-B, --bindump Dump binary representation of messages sent, in format suitable for + the "-->binsend" command +--verbose Enable extra verbose messages +--daemon Work as a daemon (unix only) +--help Show command line help +--help-commands Show help for input commands +-V, --version Show version of mysqlxtest + +Only one option that changes run mode is allowed. + +############################################################ +## Test mysqlxtest executable help-command printout +## +Input may be a file (or if no --file is specified, it stdin will be used) +The following commands may appear in the input script: +-->echo + Prints the text (allows variables) +-->title + Prints the text with an underline, using the character +-->sql + Begins SQL block. SQL statements that appear will be executed and results printed (allows variables). +-->endsql + End SQL block. End a block of SQL started by -->sql +-->macro ... + Start a block of text to be defined as a macro. Must be terminated with -->endmacro +-->endmacro + Ends a macro block +-->callmacro ... + Executes the macro text, substituting argument values with the provided ones (args separated by tabs). +-->import + Loads macros from the specified file. The file must be in the directory specified by --import option in command line. +-->enablessl + Enables ssl on current connection + + Encodes the text format protobuf message and sends it to the server (allows variables). +-->recv [quiet|] + quiet - received message isn't printed + - print only selected part of the message using "field-path" filter: + field_name1 + field_name1.field_name2 + repeated_field_name1[1].field_name1.field_name2 +-->recvresult [print-columnsinfo] [be-quiet] + Read and print one resultset from the server; if print-columnsinfo is present also print short columns status +-->recvtovar [COLUMN_NAME] + Read first row and first column (or column with name COLUMN_NAME) of resultset + and set the variable +-->recverror + Read a message and ensure that it's an error of the expected type +-->recvtype [be-quiet] + Read one message and print it, checking that its type is the specified one +-->recvuntil [do_not_show_intermediate] + Read messages and print them, until a msg of the specified type (or Error) is received + do_not_show_intermediate - if this argument is present then printing of intermediate message should be omitted +-->repeat [] + Begin block of instructions that should be repeated N times +-->endrepeat + End block of instructions that should be repeated - next iteration +-->stmtsql + Send StmtExecute with sql command +-->stmtadmin [json_string] + Send StmtExecute with admin command with given aguments (formated as json object) +-->system + Execute application or script (dev only) +-->exit + Stops reading commands, disconnects and exits (same as /^D) +-->abort + Exit immediately, without performing cleanup +-->nowarnings/-->yeswarnings + Whether to print warnings generated by the statement (default no) +-->peerdisc [TOLERANCE] + Expect that xplugin disconnects after given number of milliseconds and tolerance +-->sleep + Stops execution of mysqlxtest for given number of seconds (may be fractional) +-->login ] + Performs authentication steps (use with --no-auth) +-->loginerror + Performs authentication steps expecting an error (use with --no-auth) +-->fatalerrors/nofatalerrors + Whether to immediately exit on MySQL errors +-->expecterror + Expect a specific error for the next command and fail if something else occurs + Works for: newsession, closesession, recvresult +-->newsession + Create a new connection with given name and account (use - as user for no-auth) +-->newsessionplain + Create a new connection with given name and account and force it to NOT use ssl, even if its generally enabled +-->setsession + Activate the named session +-->closesession [abort] + Close the active session (unless its the default session) +-->wait_for + Wait until SQL query returns value matches expected value (time limit 30 second) +-->assert_eq + Ensure that 'TESTED' value equals 'EXPECTED' by comparing strings lexicographically +-->assert_gt + Ensure that 'TESTED' value is greater than 'EXPECTED' (only when the both are numeric values) +-->assert_ge + Ensure that 'TESTED' value is greater or equal to 'EXPECTED' (only when the both are numeric values) +-->varfile + Assigns the contents of the file to the named variable +-->varlet + Assign the value (can be another variable) to the variable +-->varinc + Increment the value of varname by n (assuming both convert to integral) +-->varsub + Add a variable to the list of variables to replace for the next recv or sql command (value is replaced by the name) +-->binsend [...] + Sends one or more binary message dumps to the server (generate those with --bindump) +-->binsendoffset [offset-begin[percent]> [offset-end[percent]]] + Same as binsend with begin and end offset of data to be send +-->binparse MESSAGE.NAME { + MESSAGE.DATA +} + Dump given message to variable %MESSAGE_DUMP% +-->quiet/noquiet + Toggle verbose messages +-->query_result/noquery_result + Toggle visibility for query results +-->received + Assigns number of received messages of indicated type (in active session) to a variable +# comment diff --git a/rapid/plugin/x/tests/mtr/t/mysqlxtest_help.test b/rapid/plugin/x/tests/mtr/t/mysqlxtest_help.test new file mode 100644 index 000000000000..7246d037c35e --- /dev/null +++ b/rapid/plugin/x/tests/mtr/t/mysqlxtest_help.test @@ -0,0 +1,18 @@ +## XPLUGIN: Following test cases validates the help printouts + +--echo +--echo ############################################################ +--echo ## Test mysqlxtest executable help printout +--echo ## +replace_regex /.*mysqlxtest.* Ver .*//, + /Copyright .{0,4}[0-9, ]+ Oracle/Copyright DATE Oracle/ + /using default file name '.*'/using default file name 'SOCK'/; +error 1; +exec $MYSQLXTEST --help 2>&1; + +--echo +--echo ############################################################ +--echo ## Test mysqlxtest executable help-command printout +--echo ## +error 1; +exec $MYSQLXTEST --help-commands 2>&1; From 01ed28c8edb9dd9760dda4c2cd97b187e1992bec Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Wed, 20 Sep 2017 11:04:03 +0200 Subject: [PATCH 0068/1221] From 9c330ab62ea6dd9bc3a4ff9ccc4210b814d91d7f Mon Sep 17 00:00:00 2001 From: Lukasz Kotula Date: Tue, 5 Sep 2017 17:20:22 +0200 Subject: [PATCH 0069/1221] Bug#26695360 - X PROTOCOL DOCUMENTATION REFERES TO MYSQL SERVERS DOCUMENTATION 5.0 OR 5.5 Description =========== "proto" files point to documentation of MySQL Server 5.0 and 5.5. Fix === Links were corrected to point to MySQL Servers 5.7 documentation. Change-Id: I205f551814d557ac19fd14aac38553a616033259 --- rapid/plugin/x/protocol/mysqlx_resultset.proto | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/rapid/plugin/x/protocol/mysqlx_resultset.proto b/rapid/plugin/x/protocol/mysqlx_resultset.proto index bee493760a8b..bd4a59b9c63a 100644 --- a/rapid/plugin/x/protocol/mysqlx_resultset.proto +++ b/rapid/plugin/x/protocol/mysqlx_resultset.proto @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2016 Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -136,7 +136,7 @@ message FetchDone { // // .. note:: the encoding used for the different ``bytes`` fields in the meta data is externally // controlled. -// .. seealso:: https://dev.mysql.com/doc/refman/5.0/en/charset-connection.html +// .. seealso:: https://dev.mysql.com/doc/refman/5.7/en/charset-connection.html // // .. note:: // The server may not set the ``original_{table|name}`` fields if they are equal to the plain @@ -208,7 +208,7 @@ message FetchDone { // LONGLONG SIGNED 20 // =============== == // -// .. seealso:: definition of ``M`` in https://dev.mysql.com/doc/refman/5.5/en/numeric-type-overview.html +// .. seealso:: definition of ``M`` in https://dev.mysql.com/doc/refman/5.7/en/numeric-type-overview.html // // ``value`` // variable length encoded signed 64 integer @@ -234,7 +234,7 @@ message FetchDone { // LONGLONG UNSIGNED 20 // ================= == // -// .. seealso:: definition of ``M`` in https://dev.mysql.com/doc/refman/5.5/en/numeric-type-overview.html +// .. seealso:: definition of ``M`` in https://dev.mysql.com/doc/refman/5.7/en/numeric-type-overview.html // // ``value`` // variable length encoded unsigned 64 integer @@ -245,7 +245,7 @@ message FetchDone { // maximum number of displayable binary digits // // .. note:: valid range for M of the ``BIT`` type is 1 - 64 -// .. seealso:: https://dev.mysql.com/doc/refman/5.5/en/numeric-type-overview.html +// .. seealso:: https://dev.mysql.com/doc/refman/5.7/en/numeric-type-overview.html // // ``value`` // variable length encoded unsigned 64 integer From 98402b6fadf90f40629740c70a4878d8ec2eb8e8 Mon Sep 17 00:00:00 2001 From: Lukasz Kotula Date: Tue, 5 Sep 2017 17:04:15 +0200 Subject: [PATCH 0070/1221] Bug#26695342 - CONNECTOR/J 8.0 PACKAGE CHANGED NAME FROM "MYSQLX" TO "X" Description =========== J/Connector requires that X messages are generated by protobuf to package: "com.mysql.cj.x.protobuf". Change-Id: I8930f4db5a0fedd2c8e41f23c179577907aacc05 --- rapid/plugin/x/protocol/mysqlx.proto | 2 +- rapid/plugin/x/protocol/mysqlx_connection.proto | 4 ++-- rapid/plugin/x/protocol/mysqlx_crud.proto | 4 ++-- rapid/plugin/x/protocol/mysqlx_datatypes.proto | 4 ++-- rapid/plugin/x/protocol/mysqlx_expect.proto | 4 ++-- rapid/plugin/x/protocol/mysqlx_expr.proto | 4 ++-- rapid/plugin/x/protocol/mysqlx_notice.proto | 2 +- rapid/plugin/x/protocol/mysqlx_resultset.proto | 2 +- rapid/plugin/x/protocol/mysqlx_session.proto | 4 ++-- rapid/plugin/x/protocol/mysqlx_sql.proto | 4 ++-- 10 files changed, 17 insertions(+), 17 deletions(-) diff --git a/rapid/plugin/x/protocol/mysqlx.proto b/rapid/plugin/x/protocol/mysqlx.proto index 2b3111d92039..593d9a912fde 100644 --- a/rapid/plugin/x/protocol/mysqlx.proto +++ b/rapid/plugin/x/protocol/mysqlx.proto @@ -23,7 +23,7 @@ syntax = "proto2"; // ifdef PROTOBUF_LITE: option optimize_for = LITE_RUNTIME; package Mysqlx; -option java_package = "com.mysql.cj.mysqlx.protobuf"; +option java_package = "com.mysql.cj.x.protobuf"; // style-guide: diff --git a/rapid/plugin/x/protocol/mysqlx_connection.proto b/rapid/plugin/x/protocol/mysqlx_connection.proto index 91484786b787..e7ea7fee4d6d 100644 --- a/rapid/plugin/x/protocol/mysqlx_connection.proto +++ b/rapid/plugin/x/protocol/mysqlx_connection.proto @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -23,7 +23,7 @@ syntax = "proto2"; import "mysqlx_datatypes.proto"; package Mysqlx.Connection; -option java_package = "com.mysql.cj.mysqlx.protobuf"; +option java_package = "com.mysql.cj.x.protobuf"; // a Capability // diff --git a/rapid/plugin/x/protocol/mysqlx_crud.proto b/rapid/plugin/x/protocol/mysqlx_crud.proto index e046f2c624b6..77e7b5b9cdbd 100644 --- a/rapid/plugin/x/protocol/mysqlx_crud.proto +++ b/rapid/plugin/x/protocol/mysqlx_crud.proto @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -22,7 +22,7 @@ syntax = "proto2"; // Basic CRUD operations package Mysqlx.Crud; -option java_package = "com.mysql.cj.mysqlx.protobuf"; +option java_package = "com.mysql.cj.x.protobuf"; import "mysqlx_expr.proto"; import "mysqlx_datatypes.proto"; diff --git a/rapid/plugin/x/protocol/mysqlx_datatypes.proto b/rapid/plugin/x/protocol/mysqlx_datatypes.proto index f4f5ba1f8ef2..e4da65a09cac 100644 --- a/rapid/plugin/x/protocol/mysqlx_datatypes.proto +++ b/rapid/plugin/x/protocol/mysqlx_datatypes.proto @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2016 Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -21,7 +21,7 @@ syntax = "proto2"; // ifdef PROTOBUF_LITE: option optimize_for = LITE_RUNTIME; package Mysqlx.Datatypes; -option java_package = "com.mysql.cj.mysqlx.protobuf"; +option java_package = "com.mysql.cj.x.protobuf"; // a scalar diff --git a/rapid/plugin/x/protocol/mysqlx_expect.proto b/rapid/plugin/x/protocol/mysqlx_expect.proto index cd8611384118..48fc11f1d469 100644 --- a/rapid/plugin/x/protocol/mysqlx_expect.proto +++ b/rapid/plugin/x/protocol/mysqlx_expect.proto @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -22,7 +22,7 @@ syntax = "proto2"; // Expect operations package Mysqlx.Expect; -option java_package = "com.mysql.cj.mysqlx.protobuf"; +option java_package = "com.mysql.cj.x.protobuf"; // Pipelining messages is a core feature of the Mysqlx Protocol. It // sends messages to the server without waiting for a response to diff --git a/rapid/plugin/x/protocol/mysqlx_expr.proto b/rapid/plugin/x/protocol/mysqlx_expr.proto index fb5057878ac6..19a268ffe7d9 100644 --- a/rapid/plugin/x/protocol/mysqlx_expr.proto +++ b/rapid/plugin/x/protocol/mysqlx_expr.proto @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -34,7 +34,7 @@ syntax = "proto2"; // * generate SQL from it // * use as filter condition in CRUD's Find(), Update() and Delete() calls. package Mysqlx.Expr; -option java_package = "com.mysql.cj.mysqlx.protobuf"; +option java_package = "com.mysql.cj.x.protobuf"; import "mysqlx_datatypes.proto"; diff --git a/rapid/plugin/x/protocol/mysqlx_notice.proto b/rapid/plugin/x/protocol/mysqlx_notice.proto index 0fe5bb997ee0..ab5b5072e800 100644 --- a/rapid/plugin/x/protocol/mysqlx_notice.proto +++ b/rapid/plugin/x/protocol/mysqlx_notice.proto @@ -29,7 +29,7 @@ syntax = "proto2"; // * is sent from the server to the client // * may be global or relate to the current message sequence package Mysqlx.Notice; -option java_package = "com.mysql.cj.mysqlx.protobuf"; +option java_package = "com.mysql.cj.x.protobuf"; import "mysqlx_datatypes.proto"; diff --git a/rapid/plugin/x/protocol/mysqlx_resultset.proto b/rapid/plugin/x/protocol/mysqlx_resultset.proto index bd4a59b9c63a..9c77829879bb 100644 --- a/rapid/plugin/x/protocol/mysqlx_resultset.proto +++ b/rapid/plugin/x/protocol/mysqlx_resultset.proto @@ -118,7 +118,7 @@ syntax = "proto2"; package Mysqlx.Resultset; -option java_package = "com.mysql.cj.mysqlx.protobuf"; +option java_package = "com.mysql.cj.x.protobuf"; // resultsets are finished, OUT paramset is next message FetchDoneMoreOutParams { diff --git a/rapid/plugin/x/protocol/mysqlx_session.proto b/rapid/plugin/x/protocol/mysqlx_session.proto index 5a6842433ff8..844efcb51139 100644 --- a/rapid/plugin/x/protocol/mysqlx_session.proto +++ b/rapid/plugin/x/protocol/mysqlx_session.proto @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -44,7 +44,7 @@ syntax = "proto2"; // Server --> Client: Ok // package Mysqlx.Session; -option java_package = "com.mysql.cj.mysqlx.protobuf"; +option java_package = "com.mysql.cj.x.protobuf"; // the initial message send from the client to the server to start the // authentication proccess diff --git a/rapid/plugin/x/protocol/mysqlx_sql.proto b/rapid/plugin/x/protocol/mysqlx_sql.proto index f955757ffc5c..08fed7d70c7b 100644 --- a/rapid/plugin/x/protocol/mysqlx_sql.proto +++ b/rapid/plugin/x/protocol/mysqlx_sql.proto @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -22,7 +22,7 @@ syntax = "proto2"; // Messages of the MySQL Package package Mysqlx.Sql; -option java_package = "com.mysql.cj.mysqlx.protobuf"; +option java_package = "com.mysql.cj.x.protobuf"; import "mysqlx_datatypes.proto"; From a13969ff2f1691e9205e895106a4935ad70eba7d Mon Sep 17 00:00:00 2001 From: Ramil Kalimullin Date: Thu, 21 Sep 2017 12:37:03 +0400 Subject: [PATCH 0071/1221] Bug #25077223: LIBMYSQLCLIENT CRASH CALLING MYSQL_PING() AFTER CONNECTION CLOSED Wrong cli_safe_read_with_ok()'s result check fixed for CLIENT_PROTOCOL_TRACING. --- sql-common/client.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql-common/client.c b/sql-common/client.c index 11c23b6fe3ec..e846942f8f97 100644 --- a/sql-common/client.c +++ b/sql-common/client.c @@ -1341,7 +1341,7 @@ cli_advanced_command(MYSQL *mysql, enum enum_server_command command, Return to READY_FOR_COMMAND protocol stage in case server reports error or sends OK packet. */ - if (!result || mysql->net.read_pos[0] == 0x00) + if (result || mysql->net.read_pos[0] == 0x00) MYSQL_TRACE_STAGE(mysql, READY_FOR_COMMAND); #endif } From 82458b9dd7699e0213fe90d223367a37d65b9ef1 Mon Sep 17 00:00:00 2001 From: Anushree Prakash B Date: Fri, 22 Sep 2017 12:10:12 +0530 Subject: [PATCH 0072/1221] Bug#25813089 - CREATE USER IF NOT EXISTS SHOULD ALWAYS BE WRITTEN TO THE BINLOGS Post push fix to address the test script failure. --- mysql-test/suite/binlog/r/binlog_user_if_exists.result | 2 ++ mysql-test/suite/binlog/t/binlog_user_if_exists.test | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/mysql-test/suite/binlog/r/binlog_user_if_exists.result b/mysql-test/suite/binlog/r/binlog_user_if_exists.result index 1f00f1cef5d3..4887c9a8f25c 100644 --- a/mysql-test/suite/binlog/r/binlog_user_if_exists.result +++ b/mysql-test/suite/binlog/r/binlog_user_if_exists.result @@ -119,11 +119,13 @@ slave-bin.000001 # Query # # use `test`; CREATE USER IF NOT EXISTS 'u1'@'localho slave-bin.000001 # Query # # use `test`; CREATE USER IF NOT EXISTS 'u1'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*22A99BA288DB55E8E230679259740873101CD636','u2'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*1B884EF334D678B0743C8CE0425F980669D8FBB6','u3'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*35B5E90BC4F5AE5D02ED515DF6B61141F24EDA02' slave-bin.000001 # Query # # use `test`; ALTER USER IF EXISTS 'u1'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*B718D8767BBACFBCE02BA2669ECCEB05930FF7D7','u2'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*9D3D6FA96FA91117D387A4B990C41F5809A536EE','u3'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*E4744236E26ADD8C3C3D727C7851A097FBBB8A87','u4_not_exists'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*BEA19EBE4ACA6B1820BF580B4054EB6B5B0D198D','slave_user'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*F40D7E5342EC4960531243A96CC2E94079BC11B7' slave-bin.000001 # Query # # use `test`; DROP USER IF EXISTS u1@localhost, u2@localhost, u3@localhost, slave_user@localhost +include/stop_slave_io.inc # ------ "Scenario 3: CREATE/ALTER USER IF[NOT]EXISTS WITH" "AUTHENTICATION PLUGIN PROVIDED EXPLICITLY" # ------ include/rpl_restart_server.inc [server_number=1 parameters: --default_authentication_plugin=sha256_password] +include/start_slave_io.inc include/rpl_reset.inc SHOW VARIABLES LIKE 'default_authentication_plugin'; Variable_name Value diff --git a/mysql-test/suite/binlog/t/binlog_user_if_exists.test b/mysql-test/suite/binlog/t/binlog_user_if_exists.test index bd3b61fb1862..6fbb44b1b64c 100644 --- a/mysql-test/suite/binlog/t/binlog_user_if_exists.test +++ b/mysql-test/suite/binlog/t/binlog_user_if_exists.test @@ -91,6 +91,7 @@ DROP USER IF EXISTS u1@localhost, u2@localhost, u3@localhost, slave_user@localho --source include/sync_slave_sql_with_master.inc --echo [On Slave] --source include/show_binlog_events.inc +--source include/stop_slave_io.inc # Scenario 3: Make sure that the default authentication plugin is not used # when the plugin is specified explicitly while creating or altering users. @@ -104,6 +105,10 @@ DROP USER IF EXISTS u1@localhost, u2@localhost, u3@localhost, slave_user@localho --let $rpl_server_parameters= --default_authentication_plugin=sha256_password --source include/rpl_restart_server.inc +--connection slave +--source include/start_slave_io.inc + +--connection master --disable_warnings --source include/rpl_reset.inc --enable_warnings From 984cc2dd4e880a48c7ae371b7bdc42b816139c03 Mon Sep 17 00:00:00 2001 From: Bharathy Satish Date: Fri, 22 Sep 2017 15:22:28 +0530 Subject: [PATCH 0073/1221] Bug #26694675: MYSQLPUMP SPAMS WITH SQL_NO_CACHE DEPRECATION WARNINGS Problem: mysqlpump reports deprecated warnings when dumping table data. This is because mysqlpump executes SHOW WARNINGS; after running every sql query. Fix: Just by encapsulating SQL_NO_CACHE inside version comment will not solve this issue. ex: SELECT /*!50708 SQL_NO_CACHE */ ... Even with version comments server reports a warning. mysqlpump executes SHOW WARNINGS and reports the same warning message. Fix is to remove SQL_NO_CACHE from the underlying SELECT query. --- client/dump/mysql_object_reader.cc | 4 ++-- mysql-test/r/mysqlpump_basic.result | 10 ++++++++++ mysql-test/t/mysqlpump_basic.test | 20 ++++++++++++++++++++ 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/client/dump/mysql_object_reader.cc b/client/dump/mysql_object_reader.cc index 05aa56afc073..1f9f9350e3f9 100644 --- a/client/dump/mysql_object_reader.cc +++ b/client/dump/mysql_object_reader.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2015, 2016 Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -113,7 +113,7 @@ void Mysql_object_reader::read_table_rows_task( new Rows_fetching_context(this, item_to_process, has_generated_columns); runner->run_query( - "SELECT SQL_NO_CACHE " + column_names + " FROM " + + "SELECT " + column_names + " FROM " + this->get_quoted_object_full_name(table), new Mysql::Instance_callback< int64, const Mysql::Tools::Base::Mysql_query_runner::Row&, diff --git a/mysql-test/r/mysqlpump_basic.result b/mysql-test/r/mysqlpump_basic.result index aa14b69a54f2..59a63bc30f6e 100644 --- a/mysql-test/r/mysqlpump_basic.result +++ b/mysql-test/r/mysqlpump_basic.result @@ -708,3 +708,13 @@ SELECT * FROM bug22919028.t; i 0000-00-00 DROP DATABASE bug22919028; +# +# Bug#26694675: MYSQLPUMP SPAMS WITH SQL_NO_CACHE DEPRECATION WARNINGS +# +CREATE DATABASE bug26694675; +USE bug26694675; +CREATE TABLE t (i INT); +INSERT INTO t VALUES (9), (0); +DROP DATABASE bug26694675; +check for warnings +Pattern "mysqlpump: \[WARNING\]" not found diff --git a/mysql-test/t/mysqlpump_basic.test b/mysql-test/t/mysqlpump_basic.test index 6d21b04060a6..6bab4d787595 100644 --- a/mysql-test/t/mysqlpump_basic.test +++ b/mysql-test/t/mysqlpump_basic.test @@ -623,3 +623,23 @@ SELECT * FROM bug22919028.t; # Cleanup --remove_file $MYSQLTEST_VARDIR/tmp/bug22919028.sql DROP DATABASE bug22919028; + +-- echo # +-- echo # Bug#26694675: MYSQLPUMP SPAMS WITH SQL_NO_CACHE DEPRECATION WARNINGS +-- echo # + +CREATE DATABASE bug26694675; +USE bug26694675; +CREATE TABLE t (i INT); +INSERT INTO t VALUES (9), (0); +--exec $MYSQL_PUMP --all-databases --log-error-file=$MYSQLTEST_VARDIR/log/err.log > $MYSQLTEST_VARDIR/tmp/bug26694675.sql +DROP DATABASE bug26694675; + +--echo check for warnings +let SEARCH_FILE= $MYSQLTEST_VARDIR/log/err.log; +let SEARCH_PATTERN= mysqlpump: \[WARNING\]; +--source include/search_pattern.inc + +# cleanup +--remove_file $MYSQLTEST_VARDIR/log/err.log +--remove_file $MYSQLTEST_VARDIR/tmp/bug26694675.sql From ba1a99c5cd7dd6204abbe8d177c7f71a48e53fe3 Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Tue, 19 Sep 2017 18:30:45 +0200 Subject: [PATCH 0074/1221] Bug#26825211 BACKPORT FIX FOR #25643811 TO 5.7 Backport relevant parts of patch for: Bug #25643811: MYSQL DOES NOT COMPILE WITH GCC 7 Change-Id: Iafc7bc70b3621e12b484694ff927fb15e21ac5d2 --- client/mysqlbinlog.cc | 3 +- client/mysqldump.c | 1 + cmake/maintainer.cmake | 11 ++++- extra/lz4/lz4frame.c | 1 + extra/replace.c | 3 +- libbinlogevents/src/binlog_event.cpp | 4 +- libbinlogevents/src/statement_events.cpp | 6 +-- libmysqld/CMakeLists.txt | 12 +++++- .../common/utils_mysql_parsing.cc | 4 +- .../x/mysqlxtest_src/mysqlx_protocol.cc | 3 ++ rapid/plugin/x/ngs/src/client.cc | 2 +- .../plugin/x/ngs/src/protocol/row_builder.cc | 22 +++++----- rapid/plugin/x/src/expr_generator.cc | 4 +- regex/debug.c | 2 +- sql-common/client.c | 1 + sql-common/client_authentication.cc | 4 +- sql/CMakeLists.txt | 10 +++++ sql/binlog.cc | 1 + sql/binlog.h | 7 +++- sql/events.cc | 4 +- sql/field.cc | 4 +- sql/item_func.cc | 2 + sql/item_geofunc.cc | 4 +- sql/json_dom.cc | 18 ++++---- sql/log_event.cc | 1 + sql/opt_sum.cc | 1 + sql/rpl_reporting.h | 4 +- sql/rpl_slave.cc | 1 + sql/sp.cc | 3 +- sql/sql_class.h | 3 ++ sql/sql_lex.cc | 4 ++ sql/sql_parse.cc | 1 + sql/sql_plugin.cc | 3 +- sql/sql_show.cc | 1 + sql/sql_table.cc | 1 + sql/sql_yacc.yy | 2 + sql/sys_vars.h | 2 +- sql/tc_log.cc | 7 +++- storage/federated/ha_federated.cc | 6 +-- storage/heap/hp_create.c | 4 +- storage/heap/hp_extra.c | 3 +- storage/innobase/data/data0type.cc | 3 +- storage/innobase/fts/fts0plugin.cc | 3 +- storage/innobase/handler/ha_innodb.cc | 1 + storage/innobase/handler/handler0alter.cc | 1 + storage/innobase/include/buf0buf.ic | 4 +- storage/innobase/include/mach0data.ic | 16 +++---- storage/innobase/include/page0zip.ic | 4 +- storage/innobase/include/ut0rnd.ic | 8 +++- storage/innobase/row/row0import.cc | 1 + storage/innobase/row/row0log.cc | 1 + storage/innobase/row/row0mysql.cc | 2 +- storage/myisam/mi_extra.c | 3 +- storage/myisam/mi_panic.c | 3 +- storage/myisam/myisamchk.c | 4 +- strings/ctype-utf8.c | 26 +++++------- strings/decimal.c | 42 +++++++++---------- strings/dtoa.c | 9 ++-- unittest/gunit/opt_range-t.cc | 4 +- 59 files changed, 199 insertions(+), 116 deletions(-) diff --git a/client/mysqlbinlog.cc b/client/mysqlbinlog.cc index 500b2bb05868..9dd748127ecd 100644 --- a/client/mysqlbinlog.cc +++ b/client/mysqlbinlog.cc @@ -1310,8 +1310,6 @@ Exit_status process_event(PRINT_EVENT_INFO *print_event_info, Log_event *ev, if (head->error == -1) goto err; break; - - destroy_evt= TRUE; } case binary_log::INTVAR_EVENT: @@ -1536,6 +1534,7 @@ Exit_status process_event(PRINT_EVENT_INFO *print_event_info, Log_event *ev, goto end; } } + // Fall through. case binary_log::ROWS_QUERY_LOG_EVENT: case binary_log::WRITE_ROWS_EVENT: case binary_log::DELETE_ROWS_EVENT: diff --git a/client/mysqldump.c b/client/mysqldump.c index 3cde419366c3..3d8aeaca3637 100644 --- a/client/mysqldump.c +++ b/client/mysqldump.c @@ -2117,6 +2117,7 @@ static void print_xml_comment(FILE *xml_file, size_t len, case '-': if (*(comment_string + 1) == '-') /* Only one hyphen allowed. */ break; + // Fall through. default: fputc(*comment_string, xml_file); break; diff --git a/cmake/maintainer.cmake b/cmake/maintainer.cmake index 8b3a2be97a70..651be16a5df6 100644 --- a/cmake/maintainer.cmake +++ b/cmake/maintainer.cmake @@ -1,4 +1,4 @@ -# Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2010, 2017, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -16,6 +16,15 @@ # Common warning flags for GCC, G++, Clang and Clang++ SET(MY_WARNING_FLAGS "-Wall -Wextra -Wformat-security -Wvla") +# The default =3 given by -Wextra is a bit too strict for our code. +IF(CMAKE_COMPILER_IS_GNUCXX) + MY_CHECK_CXX_COMPILER_FLAG("-Wimplicit-fallthrough=2" + HAVE_IMPLICIT_FALLTHROUGH) + IF(HAVE_IMPLICIT_FALLTHROUGH) + SET(MY_WARNING_FLAGS "${MY_WARNING_FLAGS} -Wimplicit-fallthrough=2") + ENDIF() +ENDIF() + # Common warning flags for GCC and Clang SET(MY_C_WARNING_FLAGS "${MY_WARNING_FLAGS} -Wwrite-strings -Wdeclaration-after-statement") diff --git a/extra/lz4/lz4frame.c b/extra/lz4/lz4frame.c index e5458bb9e4bf..fc2984140ddf 100644 --- a/extra/lz4/lz4frame.c +++ b/extra/lz4/lz4frame.c @@ -1091,6 +1091,7 @@ size_t LZ4F_decompress(LZ4F_decompressionContext_t decompressionContext, dctxPtr->tmpInTarget = minFHSize; /* minimum to attempt decode */ dctxPtr->dStage = dstage_storeHeader; } + // Fall through. case dstage_storeHeader: { diff --git a/extra/replace.c b/extra/replace.c index 5fdaaf9c25df..7e064007c976 100644 --- a/extra/replace.c +++ b/extra/replace.c @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -177,6 +177,7 @@ char **argv[]; break; case 'V': version=1; + // Fall through. case 'I': case '?': help=1; /* Help text written */ diff --git a/libbinlogevents/src/binlog_event.cpp b/libbinlogevents/src/binlog_event.cpp index 65f2af35c210..c084aee7bee9 100644 --- a/libbinlogevents/src/binlog_event.cpp +++ b/libbinlogevents/src/binlog_event.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -169,7 +169,7 @@ Log_event_header(const char* buf, uint16_t binlog_version) extra_headers are not used in the current version. @endverbatim */ - + // Fall through. default: memcpy(&flags, buf + FLAGS_OFFSET, sizeof(flags)); flags= le16toh(flags); diff --git a/libbinlogevents/src/statement_events.cpp b/libbinlogevents/src/statement_events.cpp index 9c013707f70d..62831df4cf5e 100644 --- a/libbinlogevents/src/statement_events.cpp +++ b/libbinlogevents/src/statement_events.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -532,8 +532,8 @@ User_var_event(const char* buf, unsigned int event_len, (description_event->footer()->checksum_alg == BINLOG_CHECKSUM_ALG_OFF)); size_t data_written= (header()->data_written- checksum_verify); - BAPI_ASSERT(((bytes_read == data_written) ? 0 : BINLOG_CHECKSUM_LEN)|| - ((bytes_read == data_written - 1) ? 0 : BINLOG_CHECKSUM_LEN)); + BAPI_ASSERT(((bytes_read == data_written) ? false : true) || + ((bytes_read == data_written - 1) ? false : true)); #endif if ((header()->data_written - bytes_read) > 0) { diff --git a/libmysqld/CMakeLists.txt b/libmysqld/CMakeLists.txt index a95cc6ed69ba..e27e8438412a 100644 --- a/libmysqld/CMakeLists.txt +++ b/libmysqld/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2006, 2016, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 2017, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -181,6 +181,16 @@ IF(HAVE_MISLEADING_INDENTATION) COMPILE_FLAGS "-Wno-misleading-indentation") ENDIF() +# gcc 7.2.0 complains: +# boost/geometry/algorithms/detail/expand/indexed.hpp:81 +# *((void*)& box +24) may be used uninitialized +MY_CHECK_CXX_COMPILER_FLAG("-Wmaybe-uninitialized" HAVE_MAYBE_UNINITIALIZED) +IF(HAVE_MAYBE_UNINITIALIZED) + ADD_COMPILE_FLAGS( + ../sql/geometry_rtree.cc + COMPILE_FLAGS "-Wno-maybe-uninitialized") +ENDIF() + # Handle out-of-source build from source package with possibly broken # bison. Copy bison output to from source to build directory, if not already # there diff --git a/rapid/plugin/x/mysqlxtest_src/common/utils_mysql_parsing.cc b/rapid/plugin/x/mysqlxtest_src/common/utils_mysql_parsing.cc index 13183efbb9f2..e07264d9fe73 100644 --- a/rapid/plugin/x/mysqlxtest_src/common/utils_mysql_parsing.cc +++ b/rapid/plugin/x/mysqlxtest_src/common/utils_mysql_parsing.cc @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -118,8 +118,8 @@ namespace shcore if (!is_hidden_command && !have_content) head = tail; // Skip over the comment. - break; } + break; case '-': // Possible single line comment. { diff --git a/rapid/plugin/x/mysqlxtest_src/mysqlx_protocol.cc b/rapid/plugin/x/mysqlxtest_src/mysqlx_protocol.cc index fbbf0a230f72..53bed6a8a21d 100644 --- a/rapid/plugin/x/mysqlxtest_src/mysqlx_protocol.cc +++ b/rapid/plugin/x/mysqlxtest_src/mysqlx_protocol.cc @@ -557,6 +557,7 @@ void XProtocol::authenticate_mysql41(const std::string &user, const std::string case Mysqlx::ServerMessages::ERROR: throw_server_error(*static_cast(message.get())); + break; default: throw Error(CR_MALFORMED_PACKET, "Unexpected message received from server during authentication"); @@ -577,6 +578,7 @@ void XProtocol::authenticate_mysql41(const std::string &user, const std::string case Mysqlx::ServerMessages::ERROR: throw_server_error(*static_cast(message.get())); + break; case Mysqlx::ServerMessages::NOTICE: dispatch_notice(static_cast(message.get())); @@ -618,6 +620,7 @@ void XProtocol::authenticate_plain(const std::string &user, const std::string &p case Mysqlx::ServerMessages::ERROR: throw_server_error(*static_cast(message.get())); + break; case Mysqlx::ServerMessages::NOTICE: dispatch_notice(static_cast(message.get())); diff --git a/rapid/plugin/x/ngs/src/client.cc b/rapid/plugin/x/ngs/src/client.cc index 2051dca3f4d5..1209a83b1ddc 100644 --- a/rapid/plugin/x/ngs/src/client.cc +++ b/rapid/plugin/x/ngs/src/client.cc @@ -191,7 +191,7 @@ void Client::handle_message(Request &request) } break; } - /* no break */ + // Fall through. default: // invalid message at this time diff --git a/rapid/plugin/x/ngs/src/protocol/row_builder.cc b/rapid/plugin/x/ngs/src/protocol/row_builder.cc index 86ab97229c1b..9afdfc7fb3f3 100644 --- a/rapid/plugin/x/ngs/src/protocol/row_builder.cc +++ b/rapid/plugin/x/ngs/src/protocol/row_builder.cc @@ -1,5 +1,5 @@ /* -* Copyright (c) 2015, 2016 Oracle and/or its affiliates. All rights reserved. +* Copyright (c) 2015, 2017 Oracle and/or its affiliates. All rights reserved. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -126,16 +126,16 @@ static inline int count_leading_zeroes(int i, dec1 val) switch (i) { /* @note Intentional fallthrough in all case labels */ - case 9: if (val >= 1000000000) break; ++ret; - case 8: if (val >= 100000000) break; ++ret; - case 7: if (val >= 10000000) break; ++ret; - case 6: if (val >= 1000000) break; ++ret; - case 5: if (val >= 100000) break; ++ret; - case 4: if (val >= 10000) break; ++ret; - case 3: if (val >= 1000) break; ++ret; - case 2: if (val >= 100) break; ++ret; - case 1: if (val >= 10) break; ++ret; - case 0: if (val >= 1) break; ++ret; + case 9: if (val >= 1000000000) break; ++ret; // Fall through. + case 8: if (val >= 100000000) break; ++ret; // Fall through. + case 7: if (val >= 10000000) break; ++ret; // Fall through. + case 6: if (val >= 1000000) break; ++ret; // Fall through. + case 5: if (val >= 100000) break; ++ret; // Fall through. + case 4: if (val >= 10000) break; ++ret; // Fall through. + case 3: if (val >= 1000) break; ++ret; // Fall through. + case 2: if (val >= 100) break; ++ret; // Fall through. + case 1: if (val >= 10) break; ++ret; // Fall through. + case 0: if (val >= 1) break; ++ret; // Fall through. default: { DBUG_ASSERT(FALSE); } } return ret; diff --git a/rapid/plugin/x/src/expr_generator.cc b/rapid/plugin/x/src/expr_generator.cc index db409cdacb36..d58210575c6c 100644 --- a/rapid/plugin/x/src/expr_generator.cc +++ b/rapid/plugin/x/src/expr_generator.cc @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -434,7 +434,7 @@ void Expression_generator::in_expression(const Mysqlx::Expr::Operator &arg, cons } break; } - // missing "break;"? on purpose + // Fall through. default: m_qb.put("("); diff --git a/regex/debug.c b/regex/debug.c index 784c73aa3d1b..fe6b83105760 100644 --- a/regex/debug.c +++ b/regex/debug.c @@ -102,7 +102,7 @@ FILE *d; int col = 0; int last; sopno offset = 2; - char buf[10]; + char buf[20]; # define GAP() { if (offset % 5 == 0) { \ if (col > 40) { \ fprintf(d, "\n\t"); \ diff --git a/sql-common/client.c b/sql-common/client.c index e846942f8f97..4a95e0288fae 100644 --- a/sql-common/client.c +++ b/sql-common/client.c @@ -1823,6 +1823,7 @@ void mysql_read_default_options(struct st_mysql_options *options, break; case OPT_pipe: options->protocol = MYSQL_PROTOCOL_PIPE; + break; case OPT_connect_timeout: case OPT_timeout: if (opt_arg) diff --git a/sql-common/client_authentication.cc b/sql-common/client_authentication.cc index eaeb2d4d39e2..5d960d913fd4 100644 --- a/sql-common/client_authentication.cc +++ b/sql-common/client_authentication.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -84,7 +84,7 @@ RSA *rsa_init(MYSQL *mysql) if (mysql->options.extension != NULL && mysql->options.extension->server_public_key_path != NULL && - mysql->options.extension->server_public_key_path != '\0') + mysql->options.extension->server_public_key_path[0] != '\0') { pub_key_file= fopen(mysql->options.extension->server_public_key_path, "r"); diff --git a/sql/CMakeLists.txt b/sql/CMakeLists.txt index 6c1e33f0a22e..528670f74458 100644 --- a/sql/CMakeLists.txt +++ b/sql/CMakeLists.txt @@ -359,6 +359,16 @@ IF(HAVE_MISLEADING_INDENTATION) COMPILE_FLAGS "-Wno-misleading-indentation") ENDIF() +# gcc 7.2.0 complains: +# boost/geometry/algorithms/detail/expand/indexed.hpp:81 +# *((void*)& box +24) may be used uninitialized +MY_CHECK_CXX_COMPILER_FLAG("-Wmaybe-uninitialized" HAVE_MAYBE_UNINITIALIZED) +IF(HAVE_MAYBE_UNINITIALIZED) + ADD_COMPILE_FLAGS( + geometry_rtree.cc + COMPILE_FLAGS "-Wno-maybe-uninitialized") +ENDIF() + MY_CHECK_CXX_COMPILER_FLAG("-fno-builtin-memcmp" HAVE_NO_BUILTIN_MEMCMP) # See comments in filesort_compare-t.cc about __builtin_memcmp IF(HAVE_NO_BUILTIN_MEMCMP) diff --git a/sql/binlog.cc b/sql/binlog.cc index 9ed72bd8c632..2ee6cf8980f7 100644 --- a/sql/binlog.cc +++ b/sql/binlog.cc @@ -4224,6 +4224,7 @@ read_gtids_from_binlog(const char *filename, Gtid_set *all_gtids, DBUG_ASSERT(prev_gtids == NULL ? true : all_gtids != NULL || first_gtid != NULL); } + // Fall through. default: // if we found any other event type without finding a // previous_gtids_log_event, then the rest of this binlog diff --git a/sql/binlog.h b/sql/binlog.h index 1f0862bf0372..01236b2dd42c 100644 --- a/sql/binlog.h +++ b/sql/binlog.h @@ -152,7 +152,12 @@ class Stage_manager { /** Lock for protecting the queue. */ mysql_mutex_t m_lock; - } MY_ATTRIBUTE((aligned(CPU_LEVEL1_DCACHE_LINESIZE))); + /* + This attribute did not have the desired effect, at least not according + to -fsanitize=undefined with gcc 5.2.1 + Also: it fails to compile with gcc 7.2 + */ + }; // MY_ATTRIBUTE((aligned(CPU_LEVEL1_DCACHE_LINESIZE))); public: Stage_manager() diff --git a/sql/events.cc b/sql/events.cc index d91471a4fefb..97407c4e2833 100644 --- a/sql/events.cc +++ b/sql/events.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2005, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -241,6 +241,8 @@ Events::reconstruct_interval_expression(String *buf, interval_type interval, break; case INTERVAL_WEEK: expr/= 7; + close_quote= FALSE; + break; default: close_quote= FALSE; break; diff --git a/sql/field.cc b/sql/field.cc index 849882219347..4427bb92cae7 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -10881,7 +10881,7 @@ bool Create_field::init(THD *thd, const char *fld_name, case MYSQL_TYPE_DATE: /* Old date type. */ sql_type= MYSQL_TYPE_NEWDATE; - /* fall trough */ + /* fall through */ case MYSQL_TYPE_NEWDATE: length= MAX_DATE_WIDTH; break; diff --git a/sql/item_func.cc b/sql/item_func.cc index dcaab52f5052..38cb61d866c5 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -2380,6 +2380,7 @@ my_decimal *Item_func_mod::decimal_op(my_decimal *decimal_value) return decimal_value; case E_DEC_DIV_ZERO: signal_divide_by_null(); + // Fall through. default: null_value= 1; return 0; @@ -6420,6 +6421,7 @@ String *user_var_entry::val_str(my_bool *null_value, String *str, case STRING_RESULT: if (str->copy(m_ptr, m_length, collation.collation)) str= 0; // EOM error + break; case ROW_RESULT: DBUG_ASSERT(1); // Impossible break; diff --git a/sql/item_geofunc.cc b/sql/item_geofunc.cc index eae91eaba2a2..6d244abce74e 100644 --- a/sql/item_geofunc.cc +++ b/sql/item_geofunc.cc @@ -1381,6 +1381,7 @@ bool Item_func_geomfromgeojson::fix_fields(THD *thd, Item **ref) maybe_null= (args[0]->maybe_null || args[1]->maybe_null || args[2]->maybe_null); } + // Fall through. case 2: { // Validate options argument @@ -1391,6 +1392,7 @@ bool Item_func_geomfromgeojson::fix_fields(THD *thd, Item **ref) } maybe_null= (args[0]->maybe_null || args[1]->maybe_null); } + // Fall through. case 1: { /* @@ -1884,7 +1886,7 @@ append_geometry(Geometry::wkb_parser *parser, Json_object *geometry, add_short_crs_urn, add_long_crs_urn, geometry_srid); - else if (Geometry::wkb_multilinestring) + else if (header.wkb_type == Geometry::wkb_multilinestring) result= append_linestring(parser, points, mbr, calling_function, max_decimal_digits, add_bounding_box, diff --git a/sql/json_dom.cc b/sql/json_dom.cc index 620c192e33ef..c8715fed6fe7 100644 --- a/sql/json_dom.cc +++ b/sql/json_dom.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -3065,9 +3065,9 @@ int Json_wrapper::compare(const Json_wrapper &other) const return 1; /* purecov: inspected */ return -compare_json_decimal_int(b_dec, get_int()); } - default: - break; + default:; } + break; case Json_dom::J_UINT: // Unsigned integers can be compared to all other numbers. switch (other_type) @@ -3085,9 +3085,9 @@ int Json_wrapper::compare(const Json_wrapper &other) const return 1; /* purecov: inspected */ return -compare_json_decimal_uint(b_dec, get_uint()); } - default: - break; + default:; } + break; case Json_dom::J_DOUBLE: // Doubles can be compared to all other numbers. { @@ -3106,9 +3106,9 @@ int Json_wrapper::compare(const Json_wrapper &other) const return 1; /* purecov: inspected */ return -compare_json_decimal_double(other_dec, get_double()); } - default: - break; + default:; } + break; } case Json_dom::J_DECIMAL: // Decimals can be compared to all other numbers. @@ -3135,9 +3135,9 @@ int Json_wrapper::compare(const Json_wrapper &other) const return compare_json_decimal_uint(a_dec, other.get_uint()); case Json_dom::J_DOUBLE: return compare_json_decimal_double(a_dec, other.get_double()); - default: - break; + default:; } + break; } case Json_dom::J_BOOLEAN: // Booleans are only equal to other booleans. false is less than true. diff --git a/sql/log_event.cc b/sql/log_event.cc index f69b80c18564..bc9c47fa45d5 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -2774,6 +2774,7 @@ bool schedule_next_event(Log_event* ev, Relay_log_info* rli) my_error(ER_MTS_CANT_PARALLEL, MYF(0), ev->get_type_str(), rli->get_event_relay_log_name(), llbuff, "The master event is logically timestamped incorrectly."); + return true; case ER_MTS_INCONSISTENT_DATA: /* Don't have to do anything. */ return true; diff --git a/sql/opt_sum.cc b/sql/opt_sum.cc index 81bc8d636310..7e14568af46d 100644 --- a/sql/opt_sum.cc +++ b/sql/opt_sum.cc @@ -1090,6 +1090,7 @@ static int maxmin_in_range(bool max_fl, Item_field *item_field, Item *cond) case Item_func::LT_FUNC: case Item_func::LE_FUNC: less_fl= 1; + // Fall through. case Item_func::GT_FUNC: case Item_func::GE_FUNC: { diff --git a/sql/rpl_reporting.h b/sql/rpl_reporting.h index 7ed39916c682..d989ec4185e8 100644 --- a/sql/rpl_reporting.h +++ b/sql/rpl_reporting.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2006, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2006, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -125,7 +125,7 @@ class Slave_reporting_capability /** Error message */ char message[MAX_SLAVE_ERRMSG]; /** Error timestamp as string */ - char timestamp[16]; + char timestamp[64]; /** Error timestamp as time_t variable. Used in performance_schema */ time_t skr; diff --git a/sql/rpl_slave.cc b/sql/rpl_slave.cc index 7539b0e486f6..9f3f7a21f665 100644 --- a/sql/rpl_slave.cc +++ b/sql/rpl_slave.cc @@ -3700,6 +3700,7 @@ bool show_slave_status_send_data(THD *thd, Master_info *mi, break; case Relay_log_info::UNTIL_SQL_AFTER_MTS_GAPS: until_type= "SQL_AFTER_MTS_GAPS"; + break; case Relay_log_info::UNTIL_DONE: until_type= "DONE"; break; diff --git a/sql/sp.cc b/sql/sp.cc index 7e897619828c..3b8edac90300 100644 --- a/sql/sp.cc +++ b/sql/sp.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2002, 2016, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2002, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -2807,6 +2807,7 @@ String *sp_get_item_value(THD *thd, Item *item, String *str) if (item->field_type() != MYSQL_TYPE_BIT) return item->val_str(str); else {/* Bit type is handled as binary string */} + // Fall through case STRING_RESULT: { String *result= item->val_str(str); diff --git a/sql/sql_class.h b/sql/sql_class.h index 84ebdfbb6097..2210a3845eb6 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -5070,8 +5070,11 @@ class Temp_table_param :public Sql_alloc Temp_table_param() :copy_field(NULL), copy_field_end(NULL), + group_buff(NULL), + items_to_copy(NULL), recinfo(NULL), start_recinfo(NULL), keyinfo(NULL), + end_write_records(0), field_count(0), func_count(0), sum_func_count(0), hidden_field_count(0), group_parts(0), group_length(0), group_null_parts(0), quick_group(1), diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index f5a38f416e39..141eebe63540 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -1401,6 +1401,7 @@ static int lex_one_token(YYSTYPE *yylval, THD *thd) yylval->lex_str.length=2; return NULL_SYM; } + // Fall through. case MY_LEX_CHAR: // Unknown or single char token case MY_LEX_SKIP: // This should not happen if (c == '-' && lip->yyPeek() == '-' && @@ -1475,12 +1476,14 @@ static int lex_one_token(YYSTYPE *yylval, THD *thd) state= MY_LEX_HEX_NUMBER; break; } + // Fall through. case MY_LEX_IDENT_OR_BIN: if (lip->yyPeek() == '\'') { // Found b'bin-number' state= MY_LEX_BIN_NUMBER; break; } + // Fall through. case MY_LEX_IDENT: const char *start; if (use_mb(cs)) @@ -1839,6 +1842,7 @@ static int lex_one_token(YYSTYPE *yylval, THD *thd) break; } /* " used for strings */ + // Fall through. case MY_LEX_STRING: // Incomplete text string if (!(yylval->lex_str.str = get_text(lip, 1, 1))) { diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 11e034ec11dd..00efd393f6d9 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -4133,6 +4133,7 @@ case SQLCOM_PREPARE: initialize this variable because RESET shares the same code as FLUSH */ lex->no_write_to_binlog= 1; + // Fall through. case SQLCOM_FLUSH: { int write_to_binlog; diff --git a/sql/sql_plugin.cc b/sql/sql_plugin.cc index 947d438993b7..c663c3272ac0 100644 --- a/sql/sql_plugin.cc +++ b/sql/sql_plugin.cc @@ -1730,10 +1730,10 @@ static bool plugin_load_list(MEM_ROOT *tmp_root, int *argc, char **argv, case '\0': list= NULL; /* terminate the loop */ /* fall through */ + case ';': #ifndef _WIN32 case ':': /* can't use this as delimiter as it may be drive letter */ #endif - case ';': str->str[str->length]= '\0'; if (str == &name) // load all plugins in named module { @@ -1780,6 +1780,7 @@ static bool plugin_load_list(MEM_ROOT *tmp_root, int *argc, char **argv, str->str= p; continue; } + // Fall through. default: str->length++; continue; diff --git a/sql/sql_show.cc b/sql/sql_show.cc index f8123a7a5673..58c9df0503d0 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -826,6 +826,7 @@ class Show_create_error_handler : public Internal_error_handler is_handled= false; break; } + // Fall through case ER_COLUMNACCESS_DENIED_ERROR: // ER_VIEW_NO_EXPLAIN cannot happen here. case ER_PROCACCESS_DENIED_ERROR: diff --git a/sql/sql_table.cc b/sql/sql_table.cc index b1bf21a76a7f..2d645013bd9f 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -1218,6 +1218,7 @@ static bool execute_ddl_log_action(THD *thd, DDL_LOG_ENTRY *ddl_log_entry) action in the log entry by stepping up the phase. */ } + // Fall through case DDL_LOG_RENAME_ACTION: { error= TRUE; diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 75125d3a3fb0..2275de122f46 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -5024,9 +5024,11 @@ size_number: case 'g': case 'G': text_shift_number+=10; + // Fall through. case 'm': case 'M': text_shift_number+=10; + // Fall through. case 'k': case 'K': text_shift_number+=10; diff --git a/sql/sys_vars.h b/sql/sys_vars.h index fc3a547c232a..2c1f58b424b2 100644 --- a/sql/sys_vars.h +++ b/sql/sys_vars.h @@ -2767,7 +2767,7 @@ class Sys_var_gtid_mode : public Sys_var_enum mi->get_channel(), mi->is_auto_position())); if (mi != NULL && mi->is_auto_position()) { - char buf[512]; + char buf[1024]; sprintf(buf, "replication channel '%.192s' is configured " "in AUTO_POSITION mode. Execute " "CHANGE MASTER TO MASTER_AUTO_POSITION = 0 " diff --git a/sql/tc_log.cc b/sql/tc_log.cc index f44f840ed5d8..dbb0538d8813 100644 --- a/sql/tc_log.cc +++ b/sql/tc_log.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -470,8 +470,10 @@ void TC_LOG_MMAP::close() case 6: mysql_mutex_destroy(&LOCK_tc); mysql_cond_destroy(&COND_pool); + // Fall through. case 5: data[0]='A'; // garble the first (signature) byte, in case mysql_file_delete fails + // Fall through. case 4: for (i=0; i < npages; i++) { @@ -479,10 +481,13 @@ void TC_LOG_MMAP::close() break; mysql_cond_destroy(&pages[i].cond); } + // Fall through. case 3: my_free(pages); + // Fall through. case 2: my_munmap((char*)data, (size_t)file_length); + // Fall through. case 1: mysql_file_close(fd, MYF(0)); } diff --git a/storage/federated/ha_federated.cc b/storage/federated/ha_federated.cc index c8189155c61a..8524d65a7a98 100644 --- a/storage/federated/ha_federated.cc +++ b/storage/federated/ha_federated.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2004, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2004, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -1425,8 +1425,8 @@ bool ha_federated::create_where_from_key(String *to, { goto err; } - break; } + break; case HA_READ_KEY_OR_NEXT: DBUG_PRINT("info", ("federated HA_READ_KEY_OR_NEXT %d", i)); if (emit_key_part_name(&tmp, key_part) || @@ -1444,8 +1444,8 @@ bool ha_federated::create_where_from_key(String *to, emit_key_part_element(&tmp, key_part, needs_quotes, 0, ptr, part_length)) goto err; - break; } + break; case HA_READ_KEY_OR_PREV: DBUG_PRINT("info", ("federated HA_READ_KEY_OR_PREV %d", i)); if (emit_key_part_name(&tmp, key_part) || diff --git a/storage/heap/hp_create.c b/storage/heap/hp_create.c index 216f7c8c56a5..15e816dd690c 100644 --- a/storage/heap/hp_create.c +++ b/storage/heap/hp_create.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -89,7 +89,7 @@ int heap_create(const char *name, HP_CREATE_INFO *create_info, case HA_KEYTYPE_VARBINARY1: /* Case-insensitiveness is handled in coll->hash_sort */ keyinfo->seg[j].type= HA_KEYTYPE_VARTEXT1; - /* fall_through */ + /* Fall through. */ case HA_KEYTYPE_VARTEXT1: keyinfo->flag|= HA_VAR_LENGTH_KEY; length+= 2; diff --git a/storage/heap/hp_extra.c b/storage/heap/hp_extra.c index 531d0e088fff..03d2aeb78882 100644 --- a/storage/heap/hp_extra.c +++ b/storage/heap/hp_extra.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -33,6 +33,7 @@ int heap_extra(HP_INFO *info, enum ha_extra_function function) switch (function) { case HA_EXTRA_RESET_STATE: heap_reset(info); + break; case HA_EXTRA_NO_READCHECK: info->opt_flag&= ~READ_CHECK_USED; /* No readcheck */ break; diff --git a/storage/innobase/data/data0type.cc b/storage/innobase/data/data0type.cc index 8fb3761531c0..581d521a9280 100644 --- a/storage/innobase/data/data0type.cc +++ b/storage/innobase/data/data0type.cc @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2014, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2017, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -225,6 +225,7 @@ dtype_print( case DATA_VAR_POINT: fputs("DATA_VAR_POINT", stderr); + break; case DATA_GEOMETRY: fputs("DATA_GEOMETRY", stderr); diff --git a/storage/innobase/fts/fts0plugin.cc b/storage/innobase/fts/fts0plugin.cc index ee7771f92099..b68e2abc5268 100644 --- a/storage/innobase/fts/fts0plugin.cc +++ b/storage/innobase/fts/fts0plugin.cc @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2013, 2015, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2013, 2017, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -129,6 +129,7 @@ fts_query_add_word_for_parser( if (cur_node->type != FTS_AST_PARSER_PHRASE_LIST) { break; } + // Fall through. case FT_TOKEN_WORD: term_node = fts_ast_create_node_term_for_parser( diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index 7497bb1f7df6..7b66a3a28fd9 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -11431,6 +11431,7 @@ create_table_info_t::innobase_table_flags() m_thd, Sql_condition::SL_WARNING, ER_ILLEGAL_HA_CREATE_OPTION, "InnoDB: assuming ROW_FORMAT=DYNAMIC."); + // Fall through. case ROW_TYPE_DYNAMIC: innodb_row_format = REC_FORMAT_DYNAMIC; break; diff --git a/storage/innobase/handler/handler0alter.cc b/storage/innobase/handler/handler0alter.cc index 6af8fe3ffc5d..8728b8a7067f 100644 --- a/storage/innobase/handler/handler0alter.cc +++ b/storage/innobase/handler/handler0alter.cc @@ -4632,6 +4632,7 @@ prepare_inplace_alter_table_dict( ctx->old_table->name.m_name); error = DB_SUCCESS; + // Fall through. case DB_SUCCESS: /* We need to bump up the table ref count and diff --git a/storage/innobase/include/buf0buf.ic b/storage/innobase/include/buf0buf.ic index 4d00d0662222..b9724ce12873 100644 --- a/storage/innobase/include/buf0buf.ic +++ b/storage/innobase/include/buf0buf.ic @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1995, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1995, 2017, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2008, Google Inc. Portions of this file contain modifications contributed and copyrighted by @@ -1244,8 +1244,8 @@ buf_page_release_zip( rw_lock_s_unlock(&block->debug_latch); } } - /* Fall through */ #endif /* UNIV_DEBUG */ + /* Fall through */ case BUF_BLOCK_ZIP_PAGE: case BUF_BLOCK_ZIP_DIRTY: diff --git a/storage/innobase/include/mach0data.ic b/storage/innobase/include/mach0data.ic index ece4a37bccea..0868e1cba20d 100644 --- a/storage/innobase/include/mach0data.ic +++ b/storage/innobase/include/mach0data.ic @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1995, 2015, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1995, 2017, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -859,13 +859,13 @@ mach_swap_byte_order( dest += len; switch (len & 0x7) { - case 0: *--dest = *from++; - case 7: *--dest = *from++; - case 6: *--dest = *from++; - case 5: *--dest = *from++; - case 4: *--dest = *from++; - case 3: *--dest = *from++; - case 2: *--dest = *from++; + case 0: *--dest = *from++; // Fall through. + case 7: *--dest = *from++; // Fall through. + case 6: *--dest = *from++; // Fall through. + case 5: *--dest = *from++; // Fall through. + case 4: *--dest = *from++; // Fall through. + case 3: *--dest = *from++; // Fall through. + case 2: *--dest = *from++; // Fall through. case 1: *--dest = *from; } } diff --git a/storage/innobase/include/page0zip.ic b/storage/innobase/include/page0zip.ic index 9963fe01c829..a15024381403 100644 --- a/storage/innobase/include/page0zip.ic +++ b/storage/innobase/include/page0zip.ic @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2005, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2005, 2017, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2012, Facebook Inc. This program is free software; you can redistribute it and/or modify it under @@ -164,7 +164,7 @@ page_zip_rec_needs_ext( ulint n_fields, const page_size_t& page_size) { - ut_ad(rec_size > comp ? REC_N_NEW_EXTRA_BYTES : REC_N_OLD_EXTRA_BYTES); + ut_ad(rec_size > (comp ? REC_N_NEW_EXTRA_BYTES : REC_N_OLD_EXTRA_BYTES)); ut_ad(comp || !page_size.is_compressed()); #if UNIV_PAGE_SIZE_MAX > REC_MAX_DATA_SIZE diff --git a/storage/innobase/include/ut0rnd.ic b/storage/innobase/include/ut0rnd.ic index 503c9482ea31..743c02825de4 100644 --- a/storage/innobase/include/ut0rnd.ic +++ b/storage/innobase/include/ut0rnd.ic @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1994, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1994, 2017, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -217,16 +217,22 @@ ut_fold_binary( switch (len & 0x7) { case 7: fold = ut_fold_ulint_pair(fold, (ulint)(*str++)); + // Fall through. case 6: fold = ut_fold_ulint_pair(fold, (ulint)(*str++)); + // Fall through. case 5: fold = ut_fold_ulint_pair(fold, (ulint)(*str++)); + // Fall through. case 4: fold = ut_fold_ulint_pair(fold, (ulint)(*str++)); + // Fall through. case 3: fold = ut_fold_ulint_pair(fold, (ulint)(*str++)); + // Fall through. case 2: fold = ut_fold_ulint_pair(fold, (ulint)(*str++)); + // Fall through. case 1: fold = ut_fold_ulint_pair(fold, (ulint)(*str++)); } diff --git a/storage/innobase/row/row0import.cc b/storage/innobase/row/row0import.cc index 15fc383b2494..723500c95905 100644 --- a/storage/innobase/row/row0import.cc +++ b/storage/innobase/row/row0import.cc @@ -1969,6 +1969,7 @@ PageConverter::update_page( case FIL_PAGE_TYPE_XDES: err = set_current_xdes( block->page.id.page_no(), get_frame(block)); + /* Fall through. */ case FIL_PAGE_INODE: case FIL_PAGE_TYPE_TRX_SYS: case FIL_PAGE_IBUF_FREE_LIST: diff --git a/storage/innobase/row/row0log.cc b/storage/innobase/row/row0log.cc index c8a56b25d0cf..659d77b8865f 100644 --- a/storage/innobase/row/row0log.cc +++ b/storage/innobase/row/row0log.cc @@ -2037,6 +2037,7 @@ row_log_table_apply_update( When applying the subsequent ROW_T_DELETE, no matching record will be found. */ + /* Fall through. */ case DB_SUCCESS: ut_ad(row != NULL); break; diff --git a/storage/innobase/row/row0mysql.cc b/storage/innobase/row/row0mysql.cc index c73a6b2c49fe..3c1b14c8b603 100644 --- a/storage/innobase/row/row0mysql.cc +++ b/storage/innobase/row/row0mysql.cc @@ -5865,8 +5865,8 @@ row_scan_index_for_mysql( const char* doing = "CHECK TABLE"; ib::warn() << doing << " on index " << index->name << " of" " table " << index->table->name << " returned " << ret; - /* fall through (this error is ignored by CHECK TABLE) */ } + /* fall through (this error is ignored by CHECK TABLE) */ case DB_END_OF_INDEX: ret = DB_SUCCESS; func_exit: diff --git a/storage/myisam/mi_extra.c b/storage/myisam/mi_extra.c index 962c0a4efb49..4a2b9681af90 100644 --- a/storage/myisam/mi_extra.c +++ b/storage/myisam/mi_extra.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -149,6 +149,7 @@ int mi_extra(MI_INFO *info, enum ha_extra_function function, void *extra_arg) if (info->s->data_file_type != DYNAMIC_RECORD) break; /* Remove read/write cache if dynamic rows */ + // Fall through. case HA_EXTRA_NO_CACHE: if (info->opt_flag & (READ_CACHE_USED | WRITE_CACHE_USED)) { diff --git a/storage/myisam/mi_panic.c b/storage/myisam/mi_panic.c index bddbb503d8d9..ab316f2db4be 100644 --- a/storage/myisam/mi_panic.c +++ b/storage/myisam/mi_panic.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -62,6 +62,7 @@ int mi_panic(enum ha_panic_function flag) if (mi_lock_database(info,F_UNLCK)) error=my_errno(); } + break; case HA_PANIC_READ: /* Restore to before WRITE */ if (info->was_locked) { diff --git a/storage/myisam/myisamchk.c b/storage/myisam/myisamchk.c index e6b14d8a8952..57e238c8873c 100644 --- a/storage/myisam/myisamchk.c +++ b/storage/myisam/myisamchk.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -1377,7 +1377,7 @@ static void descript(MI_CHECK *param, MI_INFO *info, char * name) key < share->state.header.uniques; key++, uniqueinfo++) { my_bool new_row=0; - char null_bit[8],null_pos[8]; + char null_bit[8],null_pos[16]; printf("%-8d%-5d",key+1,uniqueinfo->key+1); for (keyseg=uniqueinfo->seg ; keyseg->type != HA_KEYTYPE_END ; keyseg++) { diff --git a/strings/ctype-utf8.c b/strings/ctype-utf8.c index f2ba48d58a63..7dec9609352e 100644 --- a/strings/ctype-utf8.c +++ b/strings/ctype-utf8.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public @@ -5459,9 +5459,8 @@ static int my_uni_utf8 (const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), return MY_CS_TOOSMALLN(count); switch (count) { - /* Fall through all cases!!! */ - case 3: r[2] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0x800; - case 2: r[1] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0xc0; + case 3: r[2] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0x800; // Fall through + case 2: r[1] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0xc0; // Fall through case 1: r[0] = (uchar) wc; } return count; @@ -5488,9 +5487,8 @@ static int my_uni_utf8_no_range(const CHARSET_INFO *cs switch (count) { - /* Fall through all cases!!! */ - case 3: r[2]= (uchar) (0x80 | (wc & 0x3f)); wc= wc >> 6; wc |= 0x800; - case 2: r[1]= (uchar) (0x80 | (wc & 0x3f)); wc= wc >> 6; wc |= 0xc0; + case 3: r[2]= (uchar) (0x80 | (wc & 0x3f)); wc= wc >> 6; wc |= 0x800; // Fall through + case 2: r[1]= (uchar) (0x80 | (wc & 0x3f)); wc= wc >> 6; wc |= 0xc0; // Fall through case 1: r[0]= (uchar) wc; } return count; @@ -8010,10 +8008,9 @@ my_wc_mb_utf8mb4(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), return MY_CS_TOOSMALLN(count); switch (count) { - /* Fall through all cases!!! */ - case 4: r[3] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0x10000; - case 3: r[2] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0x800; - case 2: r[1] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0xc0; + case 4: r[3] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0x10000; // Fall through + case 3: r[2] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0x800; // Fall through + case 2: r[1] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0xc0; // Fall through case 1: r[0] = (uchar) wc; } return count; @@ -8042,10 +8039,9 @@ my_wc_mb_utf8mb4_no_range(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), switch (count) { - /* Fall through all cases!!! */ - case 4: r[3]= (uchar) (0x80 | (wc & 0x3f)); wc= wc >> 6; wc |= 0x10000; - case 3: r[2]= (uchar) (0x80 | (wc & 0x3f)); wc= wc >> 6; wc |= 0x800; - case 2: r[1]= (uchar) (0x80 | (wc & 0x3f)); wc= wc >> 6; wc |= 0xc0; + case 4: r[3]= (uchar) (0x80 | (wc & 0x3f)); wc= wc >> 6; wc |= 0x10000; // Fall through + case 3: r[2]= (uchar) (0x80 | (wc & 0x3f)); wc= wc >> 6; wc |= 0x800; // Fall through + case 2: r[1]= (uchar) (0x80 | (wc & 0x3f)); wc= wc >> 6; wc |= 0xc0; // Fall through case 1: r[0]= (uchar) wc; } return count; diff --git a/strings/decimal.c b/strings/decimal.c index fc4e3974eb98..0ed286d09bc3 100644 --- a/strings/decimal.c +++ b/strings/decimal.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2004, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2004, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -225,16 +225,16 @@ static inline int count_leading_zeroes(int i, dec1 val) switch (i) { /* @note Intentional fallthrough in all case labels */ - case 9: if (val >= 1000000000) break; ++ret; - case 8: if (val >= 100000000) break; ++ret; - case 7: if (val >= 10000000) break; ++ret; - case 6: if (val >= 1000000) break; ++ret; - case 5: if (val >= 100000) break; ++ret; - case 4: if (val >= 10000) break; ++ret; - case 3: if (val >= 1000) break; ++ret; - case 2: if (val >= 100) break; ++ret; - case 1: if (val >= 10) break; ++ret; - case 0: if (val >= 1) break; ++ret; + case 9: if (val >= 1000000000) break; ++ret; // Fall through. + case 8: if (val >= 100000000) break; ++ret; // Fall through. + case 7: if (val >= 10000000) break; ++ret; // Fall through. + case 6: if (val >= 1000000) break; ++ret; // Fall through. + case 5: if (val >= 100000) break; ++ret; // Fall through. + case 4: if (val >= 10000) break; ++ret; // Fall through. + case 3: if (val >= 1000) break; ++ret; // Fall through. + case 2: if (val >= 100) break; ++ret; // Fall through. + case 1: if (val >= 10) break; ++ret; // Fall through. + case 0: if (val >= 1) break; ++ret; // Fall through. default: { DBUG_ASSERT(FALSE); } } return ret; @@ -258,16 +258,16 @@ static inline int count_trailing_zeroes(int i, dec1 val) switch(i) { /* @note Intentional fallthrough in all case labels */ - case 0: if ((val % 1) != 0) break; ++ret; - case 1: if ((val % 10) != 0) break; ++ret; - case 2: if ((val % 100) != 0) break; ++ret; - case 3: if ((val % 1000) != 0) break; ++ret; - case 4: if ((val % 10000) != 0) break; ++ret; - case 5: if ((val % 100000) != 0) break; ++ret; - case 6: if ((val % 1000000) != 0) break; ++ret; - case 7: if ((val % 10000000) != 0) break; ++ret; - case 8: if ((val % 100000000) != 0) break; ++ret; - case 9: if ((val % 1000000000) != 0) break; ++ret; + case 0: if ((val % 1) != 0) break; ++ret; // Fall through. + case 1: if ((val % 10) != 0) break; ++ret; // Fall through. + case 2: if ((val % 100) != 0) break; ++ret; // Fall through. + case 3: if ((val % 1000) != 0) break; ++ret; // Fall through. + case 4: if ((val % 10000) != 0) break; ++ret; // Fall through. + case 5: if ((val % 100000) != 0) break; ++ret; // Fall through. + case 6: if ((val % 1000000) != 0) break; ++ret; // Fall through. + case 7: if ((val % 10000000) != 0) break; ++ret; // Fall through. + case 8: if ((val % 100000000) != 0) break; ++ret; // Fall through. + case 9: if ((val % 1000000000) != 0) break; ++ret; // Fall through. default: { DBUG_ASSERT(FALSE); } } return ret; diff --git a/strings/dtoa.c b/strings/dtoa.c index e05f86ae0782..42a9f0b3101f 100644 --- a/strings/dtoa.c +++ b/strings/dtoa.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2007, 2017, Oracle and/or its affiliates. All rights reserved. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public @@ -1378,7 +1378,7 @@ static double my_strtod_int(const char *s00, char **se, int *error, char *buf, s switch (*s) { case '-': sign= 1; - /* no break */ + // Fall through. case '+': s++; goto break2; @@ -1475,6 +1475,7 @@ static double my_strtod_int(const char *s00, char **se, int *error, char *buf, s switch (c= *s) { case '-': esign= 1; + // Fall through. case '+': if (++s < end) c= *s; @@ -2322,7 +2323,7 @@ static char *dtoa(double dd, int mode, int ndigits, int *decpt, int *sign, break; case 2: leftright= 0; - /* no break */ + // Fall through. case 4: if (ndigits <= 0) ndigits= 1; @@ -2330,7 +2331,7 @@ static char *dtoa(double dd, int mode, int ndigits, int *decpt, int *sign, break; case 3: leftright= 0; - /* no break */ + // Fall through. case 5: i= ndigits + k + 1; ilim= i; diff --git a/unittest/gunit/opt_range-t.cc b/unittest/gunit/opt_range-t.cc index b3641fd959fb..390e3776305e 100644 --- a/unittest/gunit/opt_range-t.cc +++ b/unittest/gunit/opt_range-t.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -351,7 +351,9 @@ void OptRangeTest::check_use_count(SEL_TREE *tree) { SEL_ARG *cur_range= tree->keys[i]; if (cur_range != NULL) + { EXPECT_FALSE(cur_range->test_use_count(cur_range)); + } } if (!tree->merges.is_empty()) From 9f740e80f96aac4621c489888db355e4a4b4621c Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Tue, 19 Sep 2017 18:43:11 +0200 Subject: [PATCH 0075/1221] Bug#26612465 BUILDING WITH CMAKE 3.9.0 OR NEWER GIVES DEPRECATION WARNINGS [noclose] Patch 1 for 5.7 Configure plugins and storage engines after convenience libraries. This is a prerequisite for merging "convenience libraries" properly for NDBCLUSTER. Prior to this, mysys_ssl was treated as an "unknown system library". With this patch it is treated as a known "convenience library". Change-Id: I6f0d88275b41bddb3839bce58179a553cc29e430 --- CMakeLists.txt | 20 ++++++++++---------- storage/ndb/src/CMakeLists.txt | 5 +++-- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ce2c3effd384..cfd30c24cb28 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -605,16 +605,6 @@ IF(WITH_UNIT_TESTS) ENABLE_TESTING() ENDIF() -IF(NOT WITHOUT_SERVER) - SET (MYSQLD_STATIC_PLUGIN_LIBS "" CACHE INTERNAL "") - SET (MYSQLD_STATIC_EMBEDDED_PLUGIN_LIBS "" CACHE INTERNAL "") - # Add storage engines and plugins. - CONFIGURE_PLUGINS() -ELSE() - # We may still want Cluster client libraries, use -DWITH_NDBCLUSTER=1 - ADD_SUBDIRECTORY(storage/ndb) -ENDIF() - ADD_SUBDIRECTORY(include) ADD_SUBDIRECTORY(dbug) ADD_SUBDIRECTORY(strings) @@ -626,6 +616,16 @@ ADD_SUBDIRECTORY(libmysql) ADD_SUBDIRECTORY(libbinlogevents) ADD_SUBDIRECTORY(libbinlogstandalone) +IF(NOT WITHOUT_SERVER) + SET (MYSQLD_STATIC_PLUGIN_LIBS "" CACHE INTERNAL "") + SET (MYSQLD_STATIC_EMBEDDED_PLUGIN_LIBS "" CACHE INTERNAL "") + # Add storage engines and plugins. + CONFIGURE_PLUGINS() +ELSE() + # We may still want Cluster client libraries, use -DWITH_NDBCLUSTER=1 + ADD_SUBDIRECTORY(storage/ndb) +ENDIF() + IF(WITH_UNIT_TESTS) # Visual Studio 11 needs this extra flag in order to compile gmock. IF(WIN32) diff --git a/storage/ndb/src/CMakeLists.txt b/storage/ndb/src/CMakeLists.txt index 84fe42c11f0e..245b006f4b0e 100644 --- a/storage/ndb/src/CMakeLists.txt +++ b/storage/ndb/src/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2008, 2017, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -36,7 +36,8 @@ ENDIF() # Build static ndbclient library # SET(NDBCLIENT_LIBS - mysys dbug strings + mysys dbug strings mysys_ssl + ${SSL_LIBRARIES} ${ZLIB_LIBRARY} ndbapi ndbtransport ndbtrace From 8cfad2454a2c3033dfd85a49ea3a9d90631b353b Mon Sep 17 00:00:00 2001 From: Sujatha Sivakumar Date: Mon, 25 Sep 2017 12:56:19 +0530 Subject: [PATCH 0076/1221] Bug#26324852: THERE IS NO LOCAL IP ADDRESS MATCHING THE ONE CONFIGURED FOR THE LOCAL NODE Problem: ======== We bind many virtual IPs in one machine, it seems that group replication can not recognize all of the virtual IPs that we bind. Execution of "start group_replication" will fail and error log shows : '[GCS] There is no local IP address matching the one configured for the local node (10.202.44.222:24901). Analysis: ========= No matter how many virtual IPs that users configure, MySQL group replication will be able to fetch only the first 12 IPs among them. The reason for that is, within the code an initial buffer of size 512 bytes is allocated to hold list of network interfaces. Each interface is represented by 'struct ifreq'. The size of 'struct ifreq'= 40 bytes. Hence the buffer that was provided by the group replication layer can hold a maximum of 12 interfaces. i.e (40 *12)=480 < 512. Documented behavior of 'ioctnl': ================================ 'ioctnl' function is used to retrieve the list of interface addresses. The user will be passing a buffer and the kernel fills the ifreqs with all current L3 interface addresses that are running. Along with this the kernel also returns actual length in ifc_len. If ifc_len is equal to the original length the buffer probably has overflowed and user should retry with a bigger buffer to get all addresses. In order to do an appropriate overflow check, the ifc_len should be a multiple of struct ifreq size. Since the initialized value '512' is not a multiple the code will return earlier after reading the first 12 IP addresses. Fix: === Changed the initial buffer size to be a multiple of struct ifreq size. --- .../src/bindings/xcom/xcom/sock_probe_ix.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/sock_probe_ix.c b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/sock_probe_ix.c index c9d73007e400..fc6636b981d4 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/sock_probe_ix.c +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/sock_probe_ix.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -41,7 +41,8 @@ #include "node_no.h" #include "x_platform.h" -#define IF_INIT_BUF_SIZE 512 +/* Buffer size should be always a multiple of 'struct ifreq' size */ +#define IF_INIT_BUF_SIZE (sizeof(struct ifreq) * 10) #define IFRP_INIT_ARR_SIZE 64 struct sock_probe @@ -89,12 +90,11 @@ static int init_sock_probe(sock_probe *s) ioctl may overflow without returning an error. Thence we iterate to make sure that we don't fill up the buffer. Then, when finally ifc_len is smaller than the buffer size, we break the loop. - */ - for (i= 0, bufsize= IF_INIT_BUF_SIZE; - i==0 || s->ifc.ifc_len >= bufsize; - i++, bufsize+= IF_INIT_BUF_SIZE) + */ + do { - if (!(s->ifbuf= (char*)realloc(s->ifbuf, (size_t)bufsize))) + bufsize+= IF_INIT_BUF_SIZE; + if (!(s->ifbuf= (char*)realloc(s->ifbuf, (size_t)bufsize))) { abrt= TRUE; /* Out of memory. */ @@ -115,7 +115,7 @@ static int init_sock_probe(sock_probe *s) abrt= TRUE; goto err; } - } + } while (s->ifc.ifc_len >= bufsize); DBGOUT(STRLIT("Registering interfaces:")); From 23228b9b835271e03fd975c44c5783705947151c Mon Sep 17 00:00:00 2001 From: Thirunarayanan Balathandayuthapani Date: Mon, 25 Sep 2017 17:04:25 +0530 Subject: [PATCH 0077/1221] Bug #25076416 VIRTUAL COLUMN IS NOT CONSIDERED WHILE FETCHING THE AUTOINC COLUMN Analysis: While fetching the auto-increment value from the table, InnoDB tries to find the index which has the first column as autoincrement column. While searching the index, InnoDB uses column offset of the table to fetch the auto_increment column but virtual column is not considered while searching the column and it leads to wrong column. Fix: Consider the virtual column of the table while fetching the auto_increment column from the table using column offset. Reviewed-by: Jimmy Yang RB: 16281 --- storage/innobase/include/dict0dict.ic | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/storage/innobase/include/dict0dict.ic b/storage/innobase/include/dict0dict.ic index 927aa84094ab..a0b879abab32 100644 --- a/storage/innobase/include/dict0dict.ic +++ b/storage/innobase/include/dict0dict.ic @@ -1800,7 +1800,25 @@ dict_table_get_index_on_first_col( { ut_ad(col_index < table->n_cols); - dict_col_t* column = dict_table_get_nth_col(table, col_index); + ulint non_v_col_index = col_index; + dict_col_t* column = NULL; + + /* Decrement the col_index if the virtual column + encountered before the col_index of the table. */ + for (ulint i = 0; i < table->n_v_cols; i++) { + column = reinterpret_cast( + dict_table_get_nth_v_col(table, i)); + + if (column->ind < col_index) { + non_v_col_index--; + } else if (column->ind >= col_index) { + break; + } + } + + if (column->ind != col_index) { + column = dict_table_get_nth_col(table, non_v_col_index); + } for (dict_index_t* index = dict_table_get_first_index(table); index != NULL; index = dict_table_get_next_index(index)) { From 5c312c43444024d91ce56050f4078b169f1d635a Mon Sep 17 00:00:00 2001 From: Thirunarayanan Balathandayuthapani Date: Mon, 25 Sep 2017 18:56:33 +0530 Subject: [PATCH 0078/1221] Revert "Bug #25076416 VIRTUAL COLUMN IS NOT CONSIDERED WHILE" This reverts commit f5f08d016519dfaf9f7e56eb9243be4e00462cd1. --- storage/innobase/include/dict0dict.ic | 20 +------------------- 1 file changed, 1 insertion(+), 19 deletions(-) diff --git a/storage/innobase/include/dict0dict.ic b/storage/innobase/include/dict0dict.ic index a0b879abab32..927aa84094ab 100644 --- a/storage/innobase/include/dict0dict.ic +++ b/storage/innobase/include/dict0dict.ic @@ -1800,25 +1800,7 @@ dict_table_get_index_on_first_col( { ut_ad(col_index < table->n_cols); - ulint non_v_col_index = col_index; - dict_col_t* column = NULL; - - /* Decrement the col_index if the virtual column - encountered before the col_index of the table. */ - for (ulint i = 0; i < table->n_v_cols; i++) { - column = reinterpret_cast( - dict_table_get_nth_v_col(table, i)); - - if (column->ind < col_index) { - non_v_col_index--; - } else if (column->ind >= col_index) { - break; - } - } - - if (column->ind != col_index) { - column = dict_table_get_nth_col(table, non_v_col_index); - } + dict_col_t* column = dict_table_get_nth_col(table, col_index); for (dict_index_t* index = dict_table_get_first_index(table); index != NULL; index = dict_table_get_next_index(index)) { From 82097de40dd596fe494026736be452739082f695 Mon Sep 17 00:00:00 2001 From: Jaideep Karande Date: Tue, 26 Sep 2017 06:42:53 +0200 Subject: [PATCH 0079/1221] BUG#25404162: GR CHECKS WRONG FOREIGN TABLES CASCADES Description: When group_replication_enforce_update_everywhere_checks=ON the Group Replication plugin checks if there are foreign keys cascades and disallows updates to such tables. However SET NULL operations are not checked, which can cause data in-consistency. Resolution: Block operations on child table if it has SET NULL. --- .../tests/mtr/r/gr_generated_column.result | 5 +- .../tests/mtr/r/gr_key_rotation.result | 7 ++- .../mtr/r/gr_runtime_verifications.result | 62 +++++++++++++++++++ .../tests/mtr/t/gr_generated_column.test | 3 +- .../tests/mtr/t/gr_key_rotation.test | 7 ++- .../tests/mtr/t/gr_runtime_verifications.test | 40 ++++++++++-- sql/rpl_handler.cc | 12 ++-- 7 files changed, 119 insertions(+), 17 deletions(-) diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_generated_column.result b/rapid/plugin/group_replication/tests/mtr/r/gr_generated_column.result index c10865f9c9cd..2392ef153ac0 100644 --- a/rapid/plugin/group_replication/tests/mtr/r/gr_generated_column.result +++ b/rapid/plugin/group_replication/tests/mtr/r/gr_generated_column.result @@ -85,15 +85,16 @@ include/diff_tables.inc [server1:vt2, server2:vt2] Table vt3: Virtual Column with foreign keys [connection server1] CREATE TABLE t2(a INT PRIMARY KEY,b INT GENERATED ALWAYS AS (a+1) VIRTUAL,INDEX(b)); -CREATE TABLE vt3(a INT PRIMARY KEY,b INT,FOREIGN KEY(b) REFERENCES t2(a) ON UPDATE SET NULL ON DELETE RESTRICT,c INT AS (a*b)VIRTUAL); +CREATE TABLE vt3(a INT PRIMARY KEY,b INT,FOREIGN KEY(b) REFERENCES t2(a) ON UPDATE RESTRICT ON DELETE RESTRICT,c INT AS (a*b)VIRTUAL); INSERT INTO t2(a) VALUES(1); INSERT INTO t2(a) VALUES(3); INSERT INTO vt3(a,b) VALUES(100,1),(200,3); +UPDATE vt3 SET b=NULL WHERE b=3; UPDATE t2 SET a=2 WHERE b=4; UPDATE vt3 SET b=2 WHERE b IS NULL; UPDATE t2,vt3 SET vt3.a=t2.a WHERE t2.b=vt3.b; DELETE FROM t2 WHERE a=2; -ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`vt3`, CONSTRAINT `vt3_ibfk_1` FOREIGN KEY (`b`) REFERENCES `t2` (`a`) ON UPDATE SET NULL) +ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`vt3`, CONSTRAINT `vt3_ibfk_1` FOREIGN KEY (`b`) REFERENCES `t2` (`a`)) DELETE FROM vt3 WHERE a=1; DELETE FROM vt3 WHERE c=100; include/rpl_sync.inc diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_key_rotation.result b/rapid/plugin/group_replication/tests/mtr/r/gr_key_rotation.result index 6aa16bbf4fdd..6485c58274c7 100644 --- a/rapid/plugin/group_replication/tests/mtr/r/gr_key_rotation.result +++ b/rapid/plugin/group_replication/tests/mtr/r/gr_key_rotation.result @@ -23,7 +23,7 @@ CREATE TABLE t1(c1 INT PRIMARY KEY, c2 char(20)) ENCRYPTION="Y" ENGINE = InnoDB; INSERT INTO t1 VALUES(1, "first"); INSERT INTO t1 VALUES(2, "second"); INSERT INTO t1 VALUES(3, "third"); -CREATE TABLE t2 (c1 INT PRIMARY KEY,c2 INT,FOREIGN KEY(c2)REFERENCES t1(c1)ON DELETE SET NULL); +CREATE TABLE t2 (c1 INT PRIMARY KEY,c2 INT,FOREIGN KEY(c2)REFERENCES t1(c1)ON DELETE RESTRICT); INSERT INTO t2 VALUES(1,1); INSERT INTO t2 VALUEs(2,2); [connection server2] @@ -52,6 +52,7 @@ PLUGIN_VERSION 1.0 PLUGIN_STATUS ACTIVE include/start_group_replication.inc UPDATE t2 SET c1=3 WHERE c1=2; +UPDATE t2 SET c2=NULL WHERE c2=3; DELETE FROM t1 WHERE c1=3; include/rpl_sync.inc # check that t1 exists and has same values in both servers @@ -80,9 +81,9 @@ PLUGIN_NAME keyring_file PLUGIN_VERSION 1.0 PLUGIN_STATUS ACTIVE include/start_group_replication.inc -DELETE FROM t1 WHERE c1=1; -DELETE FROM t2 WHERE c1=1; DELETE FROM t3 WHERE c1=1; +DELETE FROM t2 WHERE c1=1; +DELETE FROM t1 WHERE c1=1; include/rpl_sync.inc # check that t1 exists and has same values in both servers include/diff_tables.inc [server1:t1, server2:t1] diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_runtime_verifications.result b/rapid/plugin/group_replication/tests/mtr/r/gr_runtime_verifications.result index 5ebf46b58e4a..55dd64728ee8 100644 --- a/rapid/plugin/group_replication/tests/mtr/r/gr_runtime_verifications.result +++ b/rapid/plugin/group_replication/tests/mtr/r/gr_runtime_verifications.result @@ -13,13 +13,61 @@ tn(cn) ON UPDATE CASCADE ON DELETE RESTRICT) ENGINE = InnoDB; CREATE TABLE t7 (c1 char(50) NOT NULL PRIMARY KEY, FOREIGN KEY (c1) REFERENCES tn(cn) ON DELETE CASCADE) ENGINE = InnoDB; CREATE TABLE t8 (c1 char(50) NOT NULL PRIMARY KEY, FOREIGN KEY (c1) REFERENCES tn(cn) ON DELETE CASCADE ON UPDATE RESTRICT) ENGINE = InnoDB; +CREATE TABLE t9 (c1 char(50), c2 char(50) NOT NULL PRIMARY KEY, FOREIGN KEY (c1) REFERENCES +tn(cn) ON DELETE SET NULL) ENGINE = InnoDB; +CREATE TABLE t10 (c1 char(50), c2 char(50) NOT NULL PRIMARY KEY, FOREIGN KEY (c1) REFERENCES +tn(cn) ON UPDATE SET NULL) ENGINE = InnoDB; # # Testing all tables that will fail. # +INSERT INTO t10 VALUES('a','a'); +ERROR HY000: The table does not comply with the requirements by an external plugin. +UPDATE t10 SET c1 = 'a'; +ERROR HY000: The table does not comply with the requirements by an external plugin. +UPDATE t10 SET c1 = 'a'; +ERROR HY000: The table does not comply with the requirements by an external plugin. +INSERT INTO t10 (c1,c2) SELECT tn.cn,'a' FROM tn; +ERROR HY000: The table does not comply with the requirements by an external plugin. +DELETE FROM t10; +ERROR HY000: The table does not comply with the requirements by an external plugin. +LOAD DATA INFILE '../../std_data/words.dat' INTO TABLE t10; +ERROR HY000: The table does not comply with the requirements by an external plugin. +REPLACE INTO t10(c1) VALUES('a'); +ERROR HY000: The table does not comply with the requirements by an external plugin. +REPLACE INTO t10 (c1) SELECT tn.cn FROM tn; +ERROR HY000: The table does not comply with the requirements by an external plugin. +DELETE t10, tn FROM t10, tn; +ERROR HY000: The table does not comply with the requirements by an external plugin. +UPDATE t10, tn SET c1 = 'a'; +ERROR HY000: The table does not comply with the requirements by an external plugin. +DROP TABLE t10; +INSERT INTO t9 VALUES('a','a'); +ERROR HY000: The table does not comply with the requirements by an external plugin. +UPDATE t9 SET c1 = 'a'; +ERROR HY000: The table does not comply with the requirements by an external plugin. +UPDATE t9 SET c1 = 'a'; +ERROR HY000: The table does not comply with the requirements by an external plugin. +INSERT INTO t9 (c1,c2) SELECT tn.cn,'a' FROM tn; +ERROR HY000: The table does not comply with the requirements by an external plugin. +DELETE FROM t9; +ERROR HY000: The table does not comply with the requirements by an external plugin. +LOAD DATA INFILE '../../std_data/words.dat' INTO TABLE t9; +ERROR HY000: The table does not comply with the requirements by an external plugin. +REPLACE INTO t9(c1) VALUES('a'); +ERROR HY000: The table does not comply with the requirements by an external plugin. +REPLACE INTO t9 (c1) SELECT tn.cn FROM tn; +ERROR HY000: The table does not comply with the requirements by an external plugin. +DELETE t9, tn FROM t9, tn; +ERROR HY000: The table does not comply with the requirements by an external plugin. +UPDATE t9, tn SET c1 = 'a'; +ERROR HY000: The table does not comply with the requirements by an external plugin. +DROP TABLE t9; INSERT INTO t8 VALUES('a'); ERROR HY000: The table does not comply with the requirements by an external plugin. UPDATE t8 SET c1 = 'a'; ERROR HY000: The table does not comply with the requirements by an external plugin. +UPDATE t8 SET c1 = 'a'; +ERROR HY000: The table does not comply with the requirements by an external plugin. INSERT INTO t8 (c1) SELECT tn.cn FROM tn; ERROR HY000: The table does not comply with the requirements by an external plugin. DELETE FROM t8; @@ -39,6 +87,8 @@ INSERT INTO t7 VALUES('a'); ERROR HY000: The table does not comply with the requirements by an external plugin. UPDATE t7 SET c1 = 'a'; ERROR HY000: The table does not comply with the requirements by an external plugin. +UPDATE t7 SET c1 = 'a'; +ERROR HY000: The table does not comply with the requirements by an external plugin. INSERT INTO t7 (c1) SELECT tn.cn FROM tn; ERROR HY000: The table does not comply with the requirements by an external plugin. DELETE FROM t7; @@ -58,6 +108,8 @@ INSERT INTO t6 VALUES('a'); ERROR HY000: The table does not comply with the requirements by an external plugin. UPDATE t6 SET c1 = 'a'; ERROR HY000: The table does not comply with the requirements by an external plugin. +UPDATE t6 SET c1 = 'a'; +ERROR HY000: The table does not comply with the requirements by an external plugin. INSERT INTO t6 (c1) SELECT tn.cn FROM tn; ERROR HY000: The table does not comply with the requirements by an external plugin. DELETE FROM t6; @@ -77,6 +129,8 @@ INSERT INTO t5 VALUES('a'); ERROR HY000: The table does not comply with the requirements by an external plugin. UPDATE t5 SET c1 = 'a'; ERROR HY000: The table does not comply with the requirements by an external plugin. +UPDATE t5 SET c1 = 'a'; +ERROR HY000: The table does not comply with the requirements by an external plugin. INSERT INTO t5 (c1) SELECT tn.cn FROM tn; ERROR HY000: The table does not comply with the requirements by an external plugin. DELETE FROM t5; @@ -96,6 +150,8 @@ INSERT INTO t4 VALUES('a'); ERROR HY000: The table does not comply with the requirements by an external plugin. UPDATE t4 SET c1 = 'a'; ERROR HY000: The table does not comply with the requirements by an external plugin. +UPDATE t4 SET c1 = 'a'; +ERROR HY000: The table does not comply with the requirements by an external plugin. INSERT INTO t4 (c1) SELECT tn.cn FROM tn; ERROR HY000: The table does not comply with the requirements by an external plugin. DELETE FROM t4; @@ -115,6 +171,8 @@ INSERT INTO t3 VALUES('a'); ERROR HY000: The table does not comply with the requirements by an external plugin. UPDATE t3 SET c1 = 'a'; ERROR HY000: The table does not comply with the requirements by an external plugin. +UPDATE t3 SET c1 = 'a'; +ERROR HY000: The table does not comply with the requirements by an external plugin. INSERT INTO t3 (c1) SELECT tn.cn FROM tn; ERROR HY000: The table does not comply with the requirements by an external plugin. DELETE FROM t3; @@ -134,6 +192,8 @@ INSERT INTO t2 VALUES('a'); ERROR HY000: The table does not comply with the requirements by an external plugin. UPDATE t2 SET c1 = 'a'; ERROR HY000: The table does not comply with the requirements by an external plugin. +UPDATE t2 SET c1 = 'a'; +ERROR HY000: The table does not comply with the requirements by an external plugin. INSERT INTO t2 (c1) SELECT tn.cn FROM tn; ERROR HY000: The table does not comply with the requirements by an external plugin. DELETE FROM t2; @@ -153,6 +213,8 @@ INSERT INTO t1 VALUES('a'); ERROR HY000: The table does not comply with the requirements by an external plugin. UPDATE t1 SET c1 = 'a'; ERROR HY000: The table does not comply with the requirements by an external plugin. +UPDATE t1 SET c1 = 'a'; +ERROR HY000: The table does not comply with the requirements by an external plugin. INSERT INTO t1 (c1) SELECT tn.cn FROM tn; ERROR HY000: The table does not comply with the requirements by an external plugin. DELETE FROM t1; diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_generated_column.test b/rapid/plugin/group_replication/tests/mtr/t/gr_generated_column.test index 6ad89a1c181e..423265800087 100644 --- a/rapid/plugin/group_replication/tests/mtr/t/gr_generated_column.test +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_generated_column.test @@ -182,7 +182,7 @@ DELETE FROM vt2 WHERE c2='se'; #Parent table CREATE TABLE t2(a INT PRIMARY KEY,b INT GENERATED ALWAYS AS (a+1) VIRTUAL,INDEX(b)); -CREATE TABLE vt3(a INT PRIMARY KEY,b INT,FOREIGN KEY(b) REFERENCES t2(a) ON UPDATE SET NULL ON DELETE RESTRICT,c INT AS (a*b)VIRTUAL); +CREATE TABLE vt3(a INT PRIMARY KEY,b INT,FOREIGN KEY(b) REFERENCES t2(a) ON UPDATE RESTRICT ON DELETE RESTRICT,c INT AS (a*b)VIRTUAL); # Insert on Parent table INSERT INTO t2(a) VALUES(1); @@ -190,6 +190,7 @@ INSERT INTO t2(a) VALUES(3); # Perform some basic DML on vt3 INSERT INTO vt3(a,b) VALUES(100,1),(200,3); +UPDATE vt3 SET b=NULL WHERE b=3; UPDATE t2 SET a=2 WHERE b=4; UPDATE vt3 SET b=2 WHERE b IS NULL; UPDATE t2,vt3 SET vt3.a=t2.a WHERE t2.b=vt3.b; diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_key_rotation.test b/rapid/plugin/group_replication/tests/mtr/t/gr_key_rotation.test index f83493a13a90..0e89e81e0553 100644 --- a/rapid/plugin/group_replication/tests/mtr/t/gr_key_rotation.test +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_key_rotation.test @@ -61,7 +61,7 @@ CREATE TABLE t1(c1 INT PRIMARY KEY, c2 char(20)) ENCRYPTION="Y" ENGINE = InnoDB; INSERT INTO t1 VALUES(1, "first"); INSERT INTO t1 VALUES(2, "second"); INSERT INTO t1 VALUES(3, "third"); -CREATE TABLE t2 (c1 INT PRIMARY KEY,c2 INT,FOREIGN KEY(c2)REFERENCES t1(c1)ON DELETE SET NULL); +CREATE TABLE t2 (c1 INT PRIMARY KEY,c2 INT,FOREIGN KEY(c2)REFERENCES t1(c1)ON DELETE RESTRICT); INSERT INTO t2 VALUES(1,1); INSERT INTO t2 VALUEs(2,2); @@ -99,6 +99,7 @@ ALTER INSTANCE ROTATE INNODB MASTER KEY; --source include/start_group_replication.inc UPDATE t2 SET c1=3 WHERE c1=2; +UPDATE t2 SET c2=NULL WHERE c2=3; DELETE FROM t1 WHERE c1=3; --source include/rpl_sync.inc @@ -156,9 +157,9 @@ SELECT * FROM t3; --query_vertical SELECT PLUGIN_NAME,PLUGIN_VERSION,PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE plugin_name='keyring_file' --source include/start_group_replication.inc -DELETE FROM t1 WHERE c1=1; -DELETE FROM t2 WHERE c1=1; DELETE FROM t3 WHERE c1=1; +DELETE FROM t2 WHERE c1=1; +DELETE FROM t1 WHERE c1=1; --source include/rpl_sync.inc --echo # check that t1 exists and has same values in both servers diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_runtime_verifications.test b/rapid/plugin/group_replication/tests/mtr/t/gr_runtime_verifications.test index 54822cc5ed8b..321978e95270 100644 --- a/rapid/plugin/group_replication/tests/mtr/t/gr_runtime_verifications.test +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_runtime_verifications.test @@ -8,6 +8,7 @@ # - Table without InnoDB storage engine # - Table without both # - Table with 'CASCADE' referential key +# - Table with 'SET NULL' referential key # # It will cycle all cases in which the runtime validation is verified. # @@ -37,6 +38,8 @@ # - Create auxiliary table with primary key and with InnoDB engine. # - Create table with 'ON UPDATE CASCADE' foreign key. # - Create table with 'ON DELETE CASCADE' foreign key. +# - Create table with 'ON DELETE SET NULL' foreign key. +# - Create table with 'ON UPDATE SET NULL' foreign key. # # 2. Testing all tables that will fail with following DMLs: # INSERT, UPDATE, INSERT...SELECT, DELETE, LOAD DATA, REPLACE, @@ -94,6 +97,15 @@ CREATE TABLE t7 (c1 char(50) NOT NULL PRIMARY KEY, FOREIGN KEY (c1) REFERENCES t # Wrong table with 'ON DELETE CASCADE' foreign key. CREATE TABLE t8 (c1 char(50) NOT NULL PRIMARY KEY, FOREIGN KEY (c1) REFERENCES tn(cn) ON DELETE CASCADE ON UPDATE RESTRICT) ENGINE = InnoDB; + +# Wrong table with 'ON DELETE SET NULL' foreign key. +CREATE TABLE t9 (c1 char(50), c2 char(50) NOT NULL PRIMARY KEY, FOREIGN KEY (c1) REFERENCES + tn(cn) ON DELETE SET NULL) ENGINE = InnoDB; + +# Wrong table with 'ON UPDATE SET NULL' foreign key. +CREATE TABLE t10 (c1 char(50), c2 char(50) NOT NULL PRIMARY KEY, FOREIGN KEY (c1) REFERENCES + tn(cn) ON UPDATE SET NULL) ENGINE = InnoDB; + # # The tests begin here. # @@ -113,12 +125,20 @@ CREATE TABLE t8 (c1 char(50) NOT NULL PRIMARY KEY, FOREIGN KEY (c1) REFERENCES --echo # Testing all tables that will fail. --echo # ---let $wrong_tables_count=8 +--let $wrong_tables_count=10 while ($wrong_tables_count) { #Test the INSERT instruction - --error ER_BEFORE_DML_VALIDATION_ERROR - --eval INSERT INTO t$wrong_tables_count VALUES('a') + if ($wrong_tables_count >= 9) + { + --error ER_BEFORE_DML_VALIDATION_ERROR + --eval INSERT INTO t$wrong_tables_count VALUES('a','a') + } + if ($wrong_tables_count < 9) + { + --error ER_BEFORE_DML_VALIDATION_ERROR + --eval INSERT INTO t$wrong_tables_count VALUES('a') + } #Test the UPDATE instruction --error ER_BEFORE_DML_VALIDATION_ERROR @@ -126,7 +146,19 @@ while ($wrong_tables_count) #Test the INSERT...SELECT instruction --error ER_BEFORE_DML_VALIDATION_ERROR - --eval INSERT INTO t$wrong_tables_count (c1) SELECT tn.cn FROM tn + --eval UPDATE t$wrong_tables_count SET c1 = 'a' + + #Test the INSERT...SELECT instruction + if ($wrong_tables_count >= 9) + { + --error ER_BEFORE_DML_VALIDATION_ERROR + --eval INSERT INTO t$wrong_tables_count (c1,c2) SELECT tn.cn,'a' FROM tn + } + if ($wrong_tables_count < 9) + { + --error ER_BEFORE_DML_VALIDATION_ERROR + --eval INSERT INTO t$wrong_tables_count (c1) SELECT tn.cn FROM tn + } #Test the DELETE instruction --error ER_BEFORE_DML_VALIDATION_ERROR diff --git a/sql/rpl_handler.cc b/sql/rpl_handler.cc index 25858c55f059..c9a8e3af5c1c 100644 --- a/sql/rpl_handler.cc +++ b/sql/rpl_handler.cc @@ -350,14 +350,18 @@ bool has_cascade_foreign_key(TABLE *table, THD *thd) {"CASCADE", "SET NULL", "NO ACTION", "RESTRICT"}. Hence we are avoiding the usage of strncmp - ("'update_method' value with 'CASCADE'") and just comparing - the first character of the update_method value with 'C'. + ("'update_method' value with 'CASCADE' or 'SET NULL'") and just comparing + the first character of the update_method value with 'C' or 'S'. */ if (f_key_info->update_method->str[0] == 'C' || - f_key_info->delete_method->str[0] == 'C') + f_key_info->delete_method->str[0] == 'C' || + f_key_info->update_method->str[0] == 'S' || + f_key_info->delete_method->str[0] == 'S') { DBUG_ASSERT(!strncmp(f_key_info->update_method->str, "CASCADE", 7) || - !strncmp(f_key_info->delete_method->str, "CASCADE", 7)); + !strncmp(f_key_info->delete_method->str, "CASCADE", 7) || + !strncmp(f_key_info->update_method->str, "SET NUL", 7) || + !strncmp(f_key_info->delete_method->str, "SET NUL", 7)); DBUG_RETURN(TRUE); } } From f872e6fa37f0ca4a229de7aadaabb7cecfc7d516 Mon Sep 17 00:00:00 2001 From: Sujatha Sivakumar Date: Wed, 27 Sep 2017 12:50:59 +0530 Subject: [PATCH 0080/1221] Bug#24812958: REPLICATION ERROR OCCURS, USE XA TRANSACTION(ONE PHASE) Problem: ======= Use XA transaction and execute DELETE or UPDATE statement. If `0 rows affected`, replication error occurs. But if more than 1 rows affected, replication error does not occur. And if use `XA PREPARE` (not use `ONE PHASE`), replication error doesn't occur. Analysis: ========= The reported issue is reproducible in 'STATEMENT' based replication format. In case of 'ROW' based replication if the DML operation results in '0 rows affected' then the query is not written to the binary log. Hence the scope of the issue is limited to 'STATEMENT' mode. Behavior of existing code:- ========================= Transactional DML operations make use of two phase commit protocol. First phase is 'prepare' phase and the second phase is 'commit'. tc_log->prepare() - Prepare phase tc_log->commit() - Commit phase During 'Prepare Phase', if there is an XA transaction, which is in 'IDLE' state, then the transaction is written to the binary log. 'XA END' operation will set the XA_STATE to 'IDLE'. 'XA PREPARE' and 'XA COMMIT ONE PHASE' commands will have their prior XA state as 'IDLE'. Sample binlog content for XA PREPARE:- XA END X'786174657374',X'',1 XA PREPARE X'786174657374',X'',1 Sample binlog context for XA COMMIT ONE PHASE:- XA END X'786174657374',X'',1 #170904 server id 1 ... XA PREPARE X'786174657374',X'',1 XA COMMIT X'786174657374',X'' In order to make 'XA COMMIT ONE PHASE' to follow the 'two phase commit' protocol the current XA_STATE of 'XA COMMIT ONE PHASE' is changed from 'IDLE' to 'PREPARED' as intermediate, right after the prepare phase is done. All these are required to enforce that no storage engine commit operation is done during prepare phase. During commit phase i.e during tc_log->commit() execution, storage engine specific commit operation is performed. Bug Scenario:- ============ There are no rows that are affected, hence two phase commit operation will not be carried out. Prepare phase gets skipped for 'XA COMMIT ONE PHASE' operation. tc_log->prepare() is not executed. As per the above 'XA COMMIT ONE PHASE' rule XA_STATE is set to intermediate 'PREPARED' state. tc_log->commit() is invoked. During commit operation the code finds that the XA_STATE is 'PREPARED' and doesn't log anything. A plain 'COMMIT' operation is written to the binary log. Binlog output in Bug scenario: ============================== SET TIMESTAMP=1504515863/*!*/; XA START X'786174657374',X'',1 /*!*/; # at 943 #170904 14:34:23 server id 1 end_log_pos 1050 CRC32 0xf66ec1b4 Query thread_id=8 exec_time=0 error_code=0 SET TIMESTAMP=1504515863/*!*/; DELETE FROM xatest where id=1 /*!*/; # at 1050 #170904 14:34:23 server id 1 end_log_pos 1125 CRC32 0xd1c7b760 Query thread_id=8 exec_time=0 error_code=0 SET TIMESTAMP=1504515863/*!*/; COMMIT i.e 'XA START' is followed by plain 'COMMIT' in binary log. Ideally the binlog should be like this: ======================================= SET TIMESTAMP=1504515056/*!*/; DELETE FROM xatest where id=1 /*!*/; # at 1336 #170904 14:20:56 server id 1 end_log_pos 1433 CRC32 0x058559ec Query thread_id=8 exec_time=0 error_code=0 SET TIMESTAMP=1504515056/*!*/; XA END X'786174657374',X'',1 /*!*/; # at 1433 #170904 server id 1 ... XA PREPARE X'786174657374',X'',1 XA COMMIT X'786174657374',X'',1 ONE PHASE When the slave server finds plain 'COMMIT' operation for an on going 'ACTIVE' XA transaction it throws the above error. Fix: === Make use of the 'PREPARE' state of 'XA COMMIT ONE PHASE' operation to identify that the current phase of 'two phase commit protocol' as 'commit' phase and check if the XA COMMIT ONE PHASE' operation has already written its contents to binlog or not. If it has not written anything during 'prepare phase' write the appropriate END statements in the binary log. --- .../suite/rpl/r/rpl_xa_one_phase_error.result | 16 ++++++++ .../suite/rpl/t/rpl_xa_one_phase_error.test | 40 ++++++++++++++++++ sql/binlog.cc | 41 +++++++++++++++---- 3 files changed, 90 insertions(+), 7 deletions(-) create mode 100644 mysql-test/suite/rpl/r/rpl_xa_one_phase_error.result create mode 100644 mysql-test/suite/rpl/t/rpl_xa_one_phase_error.test diff --git a/mysql-test/suite/rpl/r/rpl_xa_one_phase_error.result b/mysql-test/suite/rpl/r/rpl_xa_one_phase_error.result new file mode 100644 index 000000000000..1c04de23ec9f --- /dev/null +++ b/mysql-test/suite/rpl/r/rpl_xa_one_phase_error.result @@ -0,0 +1,16 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +CALL mtr.add_suppression('Unsafe statement written to the binary log using statement format'); +CREATE TABLE t1 ( id int(11) NOT NULL AUTO_INCREMENT, PRIMARY KEY (id)) ENGINE=InnoDB; +XA START 'xatest'; +DELETE FROM t1 where id=1; +XA END 'xatest'; +XA COMMIT 'xatest' ONE PHASE; +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:test.t1, slave:test.t1] +[connection master] +DROP TABLE t1; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_xa_one_phase_error.test b/mysql-test/suite/rpl/t/rpl_xa_one_phase_error.test new file mode 100644 index 000000000000..8cc1367e903f --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_xa_one_phase_error.test @@ -0,0 +1,40 @@ +############################################################################### +# Bug#24812958: REPLICATION ERROR OCCURS, USE XA TRANSACTION(ONE PHASE) +# +# Problem: +# ======= +# Use XA transaction and execute DELETE or UPDATE statement. +# If `0 rows affected`, replication error occurs. +# But over 1 rows affected, replication error doesn't occur. +# And if use `XA PREPARE` (not use `ONE PHASE`), replication error doesnot +# occur. +# +# Test: +# ===== +# 1) Start an XA transaction named 'xatest' on master. +# 2) Execute DML operation such that '0' rows are affected. +# 3) Execute XA COMMIT 'xatest' ONE PHASE. +# 4) On slave wait till the above XA COMMIT 'xatest' ONE PHASE command is +# executed. +# 5) Verify that slave server doesn't fail with 'ER_XAER_RMFAIL' error. +############################################################################### +--source include/have_binlog_format_statement.inc +--source include/master-slave.inc + +# Suppression of error messages +CALL mtr.add_suppression('Unsafe statement written to the binary log using statement format'); + +CREATE TABLE t1 ( id int(11) NOT NULL AUTO_INCREMENT, PRIMARY KEY (id)) ENGINE=InnoDB; +XA START 'xatest'; +--disable_warnings ONCE +DELETE FROM t1 where id=1; +XA END 'xatest'; +XA COMMIT 'xatest' ONE PHASE; +--source include/sync_slave_sql_with_master.inc + +--let diff_tables=master:test.t1, slave:test.t1 +--source include/diff_tables.inc + +--source include/rpl_connection_master.inc +DROP TABLE t1; +--source include/rpl_end.inc diff --git a/sql/binlog.cc b/sql/binlog.cc index 2ee6cf8980f7..58e108756b21 100644 --- a/sql/binlog.cc +++ b/sql/binlog.cc @@ -8295,7 +8295,8 @@ TC_LOG::enum_result MYSQL_BIN_LOG::commit(THD *thd, bool all) binlog_cache_mngr *cache_mngr= thd_get_cache_mngr(thd); Transaction_ctx *trn_ctx= thd->get_transaction(); my_xid xid= trn_ctx->xid_state()->get_xid()->get_my_xid(); - bool stuff_logged= false; + bool stmt_stuff_logged= false; + bool trx_stuff_logged= false; bool skip_commit= is_loggable_xa_prepare(thd); DBUG_PRINT("enter", ("thd: 0x%llx, all: %s, xid: %llu, cache_mngr: 0x%llx", @@ -8352,11 +8353,37 @@ TC_LOG::enum_result MYSQL_BIN_LOG::commit(THD *thd, bool all) { /* The Commit phase of the XA two phase logging. */ + bool one_phase= get_xa_opt(thd) == XA_ONE_PHASE; DBUG_ASSERT(all); - DBUG_ASSERT(!skip_commit || get_xa_opt(thd) == XA_ONE_PHASE); + DBUG_ASSERT(!skip_commit || one_phase); + int err= 0; XID_STATE *xs= thd->get_transaction()->xid_state(); - + /* + XA COMMIT ONE PHASE statement which has not gone through the binary log + prepare phase, has to end the active XA transaction with appropriate XA + END followed by XA COMMIT ONE PHASE. + + The state of XA transaction is changed to PREPARED after the prepare + phase, intermediately in ha_commit_trans code for the interest of + binlogger. Hence check that the XA COMMIT ONE PHASE is set to 'PREPARE' + and it has not already been written to binary log. For such transaction + write the appropriate XA END statement. + */ + if (!(is_loggable_xa_prepare(thd)) + && one_phase + && !(xs->is_binlogged()) + && !cache_mngr->trx_cache.is_binlog_empty()) + { + XA_prepare_log_event end_evt(thd, xs->get_xid(), one_phase); + err= cache_mngr->trx_cache.finalize(thd, &end_evt, xs); + if (err) + { + DBUG_RETURN(RESULT_ABORTED); + } + trx_stuff_logged= true; + thd->get_transaction()->xid_state()->set_binlogged(); + } if (DBUG_EVALUATE_IF("simulate_xa_commit_log_failure", true, do_binlog_xa_commit_rollback(thd, xs->get_xid(), true))) @@ -8381,7 +8408,7 @@ TC_LOG::enum_result MYSQL_BIN_LOG::commit(THD *thd, bool all) trn_ctx->store_commit_parent(max_committed_transaction.get_timestamp()); if (cache_mngr->stmt_cache.finalize(thd)) DBUG_RETURN(RESULT_ABORTED); - stuff_logged= true; + stmt_stuff_logged= true; } /* @@ -8391,7 +8418,7 @@ TC_LOG::enum_result MYSQL_BIN_LOG::commit(THD *thd, bool all) Otherwise, we accumulate the changes. */ if (!cache_mngr->trx_cache.is_binlog_empty() && - ending_trans(thd, all)) + ending_trans(thd, all) && !trx_stuff_logged) { const bool real_trans= (all || !trn_ctx->is_active(Transaction_ctx::SESSION)); @@ -8442,7 +8469,7 @@ TC_LOG::enum_result MYSQL_BIN_LOG::commit(THD *thd, bool all) if (cache_mngr->trx_cache.finalize(thd, &end_evt)) DBUG_RETURN(RESULT_ABORTED); } - stuff_logged= true; + trx_stuff_logged= true; } /* @@ -8461,7 +8488,7 @@ TC_LOG::enum_result MYSQL_BIN_LOG::commit(THD *thd, bool all) to the binary log so we have to report this as a "bad" failure (failed to commit, but logged something). */ - if (stuff_logged) + if (stmt_stuff_logged || trx_stuff_logged) { if (RUN_HOOK(transaction, before_commit, From 54d912b6bc399d2d60e16029a686f4587c19d13b Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Wed, 27 Sep 2017 12:50:09 +0200 Subject: [PATCH 0081/1221] Problem: some gis tests may fail in optimized mode with embedded server. Fix: Backport from patch for: Bug#25148549 REVISIT COMPILER FLAGS FOR ORACLE DEVELOPER STUDIO This reduces optimization level from -xO3 to -xO2 for one source file. Change-Id: I93a440764d422651ff85a69c87c168300c7ff051 --- libmysqld/CMakeLists.txt | 8 ++++++++ sql/CMakeLists.txt | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/libmysqld/CMakeLists.txt b/libmysqld/CMakeLists.txt index e27e8438412a..bef839dff787 100644 --- a/libmysqld/CMakeLists.txt +++ b/libmysqld/CMakeLists.txt @@ -166,6 +166,14 @@ IF(HAVE_NO_UNUSED_TYPEDEFS) ) ENDIF() +# Segfault in boost::geometry code at high optimization levels +IF(CMAKE_CXX_COMPILER_ID MATCHES "SunPro") + STRING(TOUPPER "${CMAKE_BUILD_TYPE}" CMAKEBT) + IF(CMAKEBT MATCHES "^REL") + ADD_COMPILE_FLAGS(../sql/item_geofunc_buffer.cc COMPILE_FLAGS "-xO2") + ENDIF() +ENDIF() + # Boost source has misleading indentation MY_CHECK_CXX_COMPILER_FLAG("-Wmisleading-indentation" HAVE_MISLEADING_INDENTATION) diff --git a/sql/CMakeLists.txt b/sql/CMakeLists.txt index 528670f74458..de0a74d34368 100644 --- a/sql/CMakeLists.txt +++ b/sql/CMakeLists.txt @@ -344,6 +344,14 @@ IF(HAVE_NO_UNUSED_TYPEDEFS) ) ENDIF() +# Segfault in boost::geometry code at high optimization levels +IF(CMAKE_CXX_COMPILER_ID MATCHES "SunPro") + STRING(TOUPPER "${CMAKE_BUILD_TYPE}" CMAKEBT) + IF(CMAKEBT MATCHES "^REL") + ADD_COMPILE_FLAGS(item_geofunc_buffer.cc COMPILE_FLAGS "-xO2") + ENDIF() +ENDIF() + # Boost source has misleading indentation MY_CHECK_CXX_COMPILER_FLAG("-Wmisleading-indentation" HAVE_MISLEADING_INDENTATION) From 1e893af9572746820ac3012058e9c6eedf58cad4 Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Fri, 22 Sep 2017 15:22:12 +0200 Subject: [PATCH 0082/1221] Bug#26612465 BUILDING WITH CMAKE 3.9.0 OR NEWER GIVES DEPRECATION WARNINGS [noclose] Patch 2 for 5.7 - Increase CMAKE_MINIMUM_REQUIRED VERSION from 2.8.2 to 2.8.9 - Keep a global list of KNOWN_CONVENIENCE_LIBRARIES - Add an ADD_IMPORTED_LIBRARY macro for merging of imported static libraries with "convenience" libraries. - Remove usage of LOCATION property in DTRACE_INSTRUMENT - Remove usage of LOCATION property in GET_DEPENDEND_OS_LIBS - Remove usage of LOCATION property when determining what to link into the embedded server. - Use $ rather than LOCATION for the mysqld PRE_LINK command on windows. - Remove usage of LOCATION when creating ndbclient_so (shared client library for NDBCLUSTER) DTRACE and EMBEDDED have new code, everything else is backported from 8.0 Change-Id: I5c6b5c722c8cedb0a521f3a47b6fa676efa938a2 --- CMakeLists.txt | 5 ++++- cmake/dtrace.cmake | 7 +++--- cmake/libutils.cmake | 33 ++++++++++++++++++++------- cmake/ssl.cmake | 11 ++++----- libmysqld/CMakeLists.txt | 4 ++-- sql/CMakeLists.txt | 35 +++++++++++++++-------------- storage/ndb/src/CMakeLists.txt | 38 ++++++++++++++------------------ storage/ndb/tools/CMakeLists.txt | 13 +++++------ 8 files changed, 80 insertions(+), 66 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index cfd30c24cb28..0afba18cfa29 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,7 +18,8 @@ IF(WIN32) CMAKE_MINIMUM_REQUIRED(VERSION 2.8.12) ELSE() # There's a bug in unzipping prior to 2.8.2 - CMAKE_MINIMUM_REQUIRED(VERSION 2.8.2) + # Debian 7 has the oldest cmake we need to support + CMAKE_MINIMUM_REQUIRED(VERSION 2.8.9) ENDIF() # We use CMAKE_SHARED_LIBRARY__FLAGS. See cmake --help-policy CMP0018 @@ -696,6 +697,8 @@ CONFIGURE_FILE( ${CMAKE_SOURCE_DIR}/cmake/info_macros.cmake.in ${CMAKE_BINARY_DIR}/info_macros.cmake @ONLY) +SET(KNOWN_CONVENIENCE_LIBRARIES "" CACHE INTERNAL "") + # Handle the "INFO_*" files. INCLUDE(${CMAKE_BINARY_DIR}/info_macros.cmake) # Source: This can be done during the cmake phase, all information is diff --git a/cmake/dtrace.cmake b/cmake/dtrace.cmake index b6375de591ff..80050b931f2e 100644 --- a/cmake/dtrace.cmake +++ b/cmake/dtrace.cmake @@ -1,4 +1,4 @@ -# Copyright (c) 2009, 2014, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2009, 2017, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -125,11 +125,10 @@ FUNCTION(DTRACE_INSTRUMENT target) # Note: DTrace probes in static libraries are unusable currently # (see explanation for DTRACE_INSTRUMENT_STATIC_LIBS below) # but maybe one day this will be fixed. - GET_TARGET_PROPERTY(target_location ${target} LOCATION) ADD_CUSTOM_COMMAND( TARGET ${target} POST_BUILD - COMMAND ${CMAKE_AR} r ${target_location} ${outfile} - COMMAND ${CMAKE_RANLIB} ${target_location} + COMMAND ${CMAKE_AR} r $ ${outfile} + COMMAND ${CMAKE_RANLIB} $ ) # Used in DTRACE_INSTRUMENT_WITH_STATIC_LIBS SET(TARGET_OBJECT_DIRECTORY_${target} ${objdir} CACHE INTERNAL "") diff --git a/cmake/libutils.cmake b/cmake/libutils.cmake index fa41585126c9..fe6cdb1dc568 100644 --- a/cmake/libutils.cmake +++ b/cmake/libutils.cmake @@ -1,4 +1,4 @@ -# Copyright (c) 2009, 2016, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2009, 2017, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -102,12 +102,23 @@ MACRO(ADD_CONVENIENCE_LIBRARY) LIST(REMOVE_AT SOURCES 0) ADD_LIBRARY(${TARGET} STATIC ${SOURCES}) IF(NOT _SKIP_PIC) - SET_TARGET_PROPERTIES(${TARGET} PROPERTIES COMPILE_FLAGS - "${CMAKE_SHARED_LIBRARY_C_FLAGS}") + SET_TARGET_PROPERTIES(${TARGET} PROPERTIES POSITION_INDEPENDENT_CODE ON) ENDIF() + + # Keep track of known convenience libraries, in a global scope. + SET(KNOWN_CONVENIENCE_LIBRARIES + ${KNOWN_CONVENIENCE_LIBRARIES} ${TARGET} CACHE INTERNAL "" FORCE) ENDMACRO() +# An IMPORTED library can also be merged. +MACRO(ADD_IMPORTED_LIBRARY TARGET LOC) + ADD_LIBRARY(${TARGET} STATIC IMPORTED) + SET_TARGET_PROPERTIES(${TARGET} PROPERTIES IMPORTED_LOCATION ${LOC}) + SET(KNOWN_CONVENIENCE_LIBRARIES + ${KNOWN_CONVENIENCE_LIBRARIES} ${TARGET} CACHE INTERNAL "" FORCE) +ENDMACRO() + # Write content to file, using CONFIGURE_FILE # The advantage compared to FILE(WRITE) is that timestamp # does not change if file already has the same content @@ -262,7 +273,8 @@ MACRO(MERGE_LIBRARIES) ADD_LIBRARY(${TARGET} ${LIBTYPE} ${SRC}) TARGET_LINK_LIBRARIES(${TARGET} ${LIBS}) IF(ARG_OUTPUT_NAME) - SET_TARGET_PROPERTIES(${TARGET} PROPERTIES OUTPUT_NAME "${ARG_OUTPUT_NAME}") + SET_TARGET_PROPERTIES( + ${TARGET} PROPERTIES OUTPUT_NAME "${ARG_OUTPUT_NAME}") ENDIF() ELSE() MESSAGE(FATAL_ERROR "Unknown library type") @@ -271,19 +283,24 @@ MACRO(MERGE_LIBRARIES) IF(ARG_COMPONENT) SET(COMP COMPONENT ${ARG_COMPONENT}) ENDIF() + MYSQL_INSTALL_TARGETS(${TARGET} DESTINATION "${INSTALL_LIBDIR}" ${COMP}) + ENDIF() SET_TARGET_PROPERTIES(${TARGET} PROPERTIES LINK_INTERFACE_LIBRARIES "") ENDMACRO() + FUNCTION(GET_DEPENDEND_OS_LIBS target result) SET(deps ${${target}_LIB_DEPENDS}) IF(deps) FOREACH(lib ${deps}) - # Filter out keywords for used for debug vs optimized builds - IF(NOT lib MATCHES "general" AND NOT lib MATCHES "debug" AND NOT lib MATCHES "optimized") - GET_TARGET_PROPERTY(lib_location ${lib} LOCATION) - IF(NOT lib_location) + # Filter out keywords for used for debug vs optimized builds + IF(NOT lib MATCHES "general" AND + NOT lib MATCHES "debug" AND + NOT lib MATCHES "optimized") + LIST(FIND KNOWN_CONVENIENCE_LIBRARIES ${lib} FOUNDIT) + IF(FOUNDIT LESS 0) SET(ret ${ret} ${lib}) ENDIF() ENDIF() diff --git a/cmake/ssl.cmake b/cmake/ssl.cmake index b0f44d1a2dc0..d745c4c5da39 100644 --- a/cmake/ssl.cmake +++ b/cmake/ssl.cmake @@ -87,6 +87,7 @@ MACRO (MYSQL_CHECK_SSL) FILE(GLOB WITH_SSL_HEADER ${WITH_SSL}/include/openssl/ssl.h) IF (WITH_SSL_HEADER) SET(WITH_SSL_PATH ${WITH_SSL} CACHE PATH "path to custom SSL installation") + SET(WITH_SSL_PATH ${WITH_SSL}) ENDIF() IF(WITH_SSL STREQUAL "bundled") @@ -187,7 +188,7 @@ MACRO (MYSQL_CHECK_SSL) # and we have found static libraries, then link them statically # into our executables and libraries. # Adding IMPORTED_LOCATION allows MERGE_STATIC_LIBS - # to get LOCATION and do correct dependency analysis. + # to merge imported libraries as well as our own libraries. SET(MY_CRYPTO_LIBRARY "${CRYPTO_LIBRARY}") SET(MY_OPENSSL_LIBRARY "${OPENSSL_LIBRARY}") IF (WITH_SSL_PATH) @@ -195,15 +196,11 @@ MACRO (MYSQL_CHECK_SSL) GET_FILENAME_COMPONENT(OPENSSL_EXT "${OPENSSL_LIBRARY}" EXT) IF (CRYPTO_EXT STREQUAL ".a" OR OPENSSL_EXT STREQUAL ".lib") SET(MY_CRYPTO_LIBRARY imported_crypto) - ADD_LIBRARY(imported_crypto STATIC IMPORTED) - SET_TARGET_PROPERTIES(imported_crypto - PROPERTIES IMPORTED_LOCATION "${CRYPTO_LIBRARY}") + ADD_IMPORTED_LIBRARY(imported_crypto "${CRYPTO_LIBRARY}") ENDIF() IF (OPENSSL_EXT STREQUAL ".a" OR OPENSSL_EXT STREQUAL ".lib") SET(MY_OPENSSL_LIBRARY imported_openssl) - ADD_LIBRARY(imported_openssl STATIC IMPORTED) - SET_TARGET_PROPERTIES(imported_openssl - PROPERTIES IMPORTED_LOCATION "${OPENSSL_LIBRARY}") + ADD_IMPORTED_LIBRARY(imported_openssl "${OPENSSL_LIBRARY}") ENDIF() ENDIF() diff --git a/libmysqld/CMakeLists.txt b/libmysqld/CMakeLists.txt index bef839dff787..6b8b04f2665d 100644 --- a/libmysqld/CMakeLists.txt +++ b/libmysqld/CMakeLists.txt @@ -274,8 +274,8 @@ SET(LIBS # (with corresponding target ${engine}_embedded) SET(EMBEDDED_LIBS) FOREACH(LIB ${LIBS}) - GET_TARGET_PROPERTY(EMBEDDED_LOCATION ${LIB}_embedded LOCATION) - IF(EMBEDDED_LOCATION) + LIST(FIND KNOWN_CONVENIENCE_LIBRARIES ${LIB}_embedded FOUNDIT) + IF(FOUNDIT GREATER -1) LIST(APPEND EMBEDDED_LIBS ${LIB}_embedded) ELSE() LIST(APPEND EMBEDDED_LIBS ${LIB}) diff --git a/sql/CMakeLists.txt b/sql/CMakeLists.txt index de0a74d34368..ba204b6434ab 100644 --- a/sql/CMakeLists.txt +++ b/sql/CMakeLists.txt @@ -466,7 +466,8 @@ ELSE() SET(MYSQLD_SOURCE main.cc ${DTRACE_PROBES_ALL}) ENDIF() -MYSQL_ADD_EXECUTABLE(mysqld ${MYSQLD_SOURCE} DESTINATION ${INSTALL_SBINDIR} COMPONENT Server) +MYSQL_ADD_EXECUTABLE(mysqld + ${MYSQLD_SOURCE} DESTINATION ${INSTALL_SBINDIR} COMPONENT Server) OPTION(DEBUG_EXTNAME "Build server as mysqld-debug (debug builds only)" OFF) MARK_AS_ADVANCED(DEBUG_EXTNAME) @@ -493,28 +494,30 @@ IF(NOT WITHOUT_DYNAMIC_PLUGINS) SET_TARGET_PROPERTIES(mysqld PROPERTIES LINK_FLAGS "${mysqld_link_flags} -Wl,--export-all-symbols") ENDIF() IF(MSVC) - # Set module definition file. Also use non-incremental linker, - # incremental appears to crash from time to time,if used with /DEF option - SET_TARGET_PROPERTIES(mysqld PROPERTIES LINK_FLAGS "${mysqld_link_flags} /DEF:mysqld.def /INCREMENTAL:NO") + # Set module definition file. + # Also use non-incremental linker, incremental appears to crash from + # time to time,if used with /DEF option + SET_TARGET_PROPERTIES(mysqld PROPERTIES LINK_FLAGS + "${mysqld_link_flags} /DEF:${CMAKE_CURRENT_BINARY_DIR}/mysqld.def /INCREMENTAL:NO") - FOREACH (CORELIB sql binlog slave mysys mysys_ssl dbug regex strings - vio binlogevents_static) - GET_TARGET_PROPERTY(LOC ${CORELIB} LOCATION) - IF (NOT LOC) - GET_TARGET_PROPERTY(LOC ${CORELIB} IMPORTED_LOCATION) - ENDIF() - - - FILE(TO_NATIVE_PATH ${LOC} LOC) - SET (LIB_LOCATIONS ${LIB_LOCATIONS} ${LOC}) - ENDFOREACH (CORELIB ${MYSQLD_CORE_LIBS}) SET(_PLATFORM x86) IF(CMAKE_SIZEOF_VOID_P EQUAL 8) SET(_PLATFORM x64) ENDIF() ADD_CUSTOM_COMMAND(TARGET mysqld PRE_LINK COMMAND echo ${_PLATFORM} && cscript ARGS //nologo ${PROJECT_SOURCE_DIR}/win/create_def_file.js - ${_PLATFORM} ${LIB_LOCATIONS} > mysqld.def + ${_PLATFORM} + "$" + "$" + "$" + "$" + "$" + "$" + "$" + "$" + "$" + "$" + > mysqld.def WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) ADD_DEPENDENCIES(sql GenError) ENDIF() diff --git a/storage/ndb/src/CMakeLists.txt b/storage/ndb/src/CMakeLists.txt index 245b006f4b0e..ab0f662bd0ae 100644 --- a/storage/ndb/src/CMakeLists.txt +++ b/storage/ndb/src/CMakeLists.txt @@ -49,7 +49,9 @@ SET(NDBCLIENT_LIBS ndbgeneral ndbconf) -MERGE_LIBRARIES(ndbclient_static STATIC ${NDBCLIENT_LIBS} COMPONENT Development) +MERGE_LIBRARIES( + ndbclient_static STATIC ${NDBCLIENT_LIBS} COMPONENT Development) + # Build test program to check linking against ndclient_static ADD_EXECUTABLE(ndbclient_static_link_test ndbclient_link_test.cpp) TARGET_LINK_LIBRARIES(ndbclient_static_link_test ndbclient_static) @@ -70,29 +72,22 @@ ADD_LIBRARY(ndbclient_so SHARED ndbclient_exports.cpp) TARGET_LINK_LIBRARIES(ndbclient_so ${NDBCLIENT_SO_LIBS}) IF(MSVC) -# Not yet! -# # Add a PREBUILD command which creates a module definition file -# # for all the symbols which should be exported from ndbclient_so -# # PROBLEM: Fails to get the full path to mysys, strings etc since those -# # targets haven't been added yet -> defer this step to build time? -# FOREACH (lib ${NDBCLIENT_SO_LIBS}) -# GET_TARGET_PROPERTY(loc ${lib} LOCATION) -# FILE(TO_NATIVE_PATH ${loc} loc) -# SET (lib_locations ${lib_locations} ${loc}) -# ENDFOREACH () -# -# SET(_PLATFORM x86) -# IF(CMAKE_SIZEOF_VOID_P EQUAL 8) -# SET(_PLATFORM x64) -# ENDIF() -# ADD_CUSTOM_COMMAND(TARGET ndbclient_so PRE_BUILD +# All "convenience" libraries are now well-known, we *could* do this: +# SET(_PLATFORM x64) +# +# ADD_CUSTOM_COMMAND(TARGET ndbclient_so PRE_LINK # COMMAND cscript ARGS //nologo ${PROJECT_SOURCE_DIR}/win/create_def_file.js -# ${_PLATFORM} ${lib_locations} > ndbclient_exports.def +# ${_PLATFORM} +# "$" +# "$" +# ... +# > ndbclient_exports.def # WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) # # # Modify link flags to use the generated module definition file # GET_TARGET_PROPERTY(ndbclient_so_link_flags ndbclient_so LINK_FLAGS) -# SET_TARGET_PROPERTIES(ndbclient_so PROPERTIES LINK_FLAGS "${ndbclient_link_flags} /DEF:ndbclient_exports.def") +# SET_TARGET_PROPERTIES(ndbclient_so PROPERTIES LINK_FLAGS +# "${ndbclient_link_flags} /DEF:ndbclient_exports.def") ELSE() # Turn off cmake's transitive link behaviour so that the shared # ndbclient library contains everything except functions from @@ -122,8 +117,8 @@ ELSE() ENDIF() # Ignore libs where location is known(this means it's built locally) - GET_TARGET_PROPERTY(dep_lib_location ${dep_lib} LOCATION) - IF(dep_lib_location) + LIST(FIND KNOWN_CONVENIENCE_LIBRARIES ${dep_lib} FOUNDIT) + IF(FOUNDIT GREATER -1) # MESSAGE(STATUS "Ignoring ${dep_lib} since location is known") SET(ignore_dep_lib 1) ENDIF() @@ -134,6 +129,7 @@ ELSE() ENDFOREACH() ENDFOREACH() + LIST(REMOVE_DUPLICATES NDBCLIENT_SYSTEM_LIBS) MESSAGE(STATUS "System libs used by ndbclient_so: ${NDBCLIENT_SYSTEM_LIBS}") TARGET_LINK_LIBRARIES(ndbclient_so LINK_INTERFACE_LIBRARIES ${NDBCLIENT_SYSTEM_LIBS}) diff --git a/storage/ndb/tools/CMakeLists.txt b/storage/ndb/tools/CMakeLists.txt index d0f953e6fe4e..bb4c0a6c6686 100644 --- a/storage/ndb/tools/CMakeLists.txt +++ b/storage/ndb/tools/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2008, 2017, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -79,12 +79,11 @@ ADD_EXECUTABLE(ndbinfo_sql ndbinfo_sql.cpp ) TARGET_LINK_LIBRARIES(ndbinfo_sql ndbclient_static) -GET_TARGET_PROPERTY(NDBINFO_SQL_EXE ndbinfo_sql LOCATION) -ADD_CUSTOM_COMMAND(OUTPUT ${PROJECT_BINARY_DIR}/storage/ndb/tools/ndbinfo.sql - COMMAND ${NDBINFO_SQL_EXE} ARGS > ndbinfo.sql - DEPENDS ndbinfo_sql) -ADD_CUSTOM_TARGET(ndbinfo_sql_run ALL - DEPENDS ${PROJECT_BINARY_DIR}/storage/ndb/tools/ndbinfo.sql) + +ADD_CUSTOM_COMMAND(TARGET ndbinfo_sql POST_BUILD + COMMAND $ + > ${PROJECT_BINARY_DIR}/storage/ndb/tools/ndbinfo.sql + ) MYSQL_ADD_EXECUTABLE(ndb_index_stat ndb_index_stat.cpp From 543129a577c42d83294b597ef9a7dca9075fcbb0 Mon Sep 17 00:00:00 2001 From: Joao Gramacho Date: Wed, 27 Sep 2017 10:23:39 +0100 Subject: [PATCH 0083/1221] BUG#26878022 MYSQLBINLOG: ASSERTION `(OLD_MH->M_KEY == KEY) || (OLD_MH->M_KEY == 0)' FAILED Problem and Analysis -------------------- The mysqlbinlog client program is trying to reallocate a buffer passing a pointer to an advanced position of the buffer instead of the base address of the buffer. This is making P_S and realloc function to not detect correct PSI memory key for the buffer. Fix --- client/mysqlbinlog.cc | 17 ++++--- .../r/binlog_mysqlbinlog_rewrite_db.result | 22 +++++----- .../t/binlog_mysqlbinlog_rewrite_db.test | 44 +++++++++---------- 3 files changed, 44 insertions(+), 39 deletions(-) diff --git a/client/mysqlbinlog.cc b/client/mysqlbinlog.cc index 9dd748127ecd..1b3cb26724cf 100644 --- a/client/mysqlbinlog.cc +++ b/client/mysqlbinlog.cc @@ -85,8 +85,10 @@ std::map map_mysqlbinlog_rewrite_db; */ inline void reset_temp_buf_and_delete(Log_event *ev) { + char *event_buf= ev->temp_buf; ev->temp_buf= NULL; delete ev; + my_free(event_buf); } static bool @@ -2692,8 +2694,14 @@ static Exit_status dump_remote_log_entries(PRINT_EVENT_INFO *print_event_info, */ if (type == binary_log::HEARTBEAT_LOG_EVENT) continue; - event_buf= (char *) net->read_pos + 1; event_len= len - 1; + if (!(event_buf = (char*) my_malloc(key_memory_log_event, + event_len+1, MYF(0)))) + { + error("Out of memory."); + DBUG_RETURN(ERROR_STOP); + } + memcpy(event_buf, net->buff + 1, event_len); if (rewrite_db_filter(&event_buf, &event_len, glob_description_event)) { error("Got a fatal error while applying rewrite db filter."); @@ -2709,13 +2717,10 @@ static Exit_status dump_remote_log_entries(PRINT_EVENT_INFO *print_event_info, opt_verify_binlog_checksum))) { error("Could not construct log event object: %s", error_msg); + my_free(event_buf); DBUG_RETURN(ERROR_STOP); } - /* - If reading from a remote host, ensure the temp_buf for the - Log_event class is pointing to the incoming stream. - */ - ev->register_temp_buf((char *) net->read_pos + 1); + ev->register_temp_buf(event_buf); } if (raw_mode || (type != binary_log::LOAD_EVENT)) { diff --git a/mysql-test/suite/binlog/r/binlog_mysqlbinlog_rewrite_db.result b/mysql-test/suite/binlog/r/binlog_mysqlbinlog_rewrite_db.result index fe62883d83f8..dbd9bebf8733 100644 --- a/mysql-test/suite/binlog/r/binlog_mysqlbinlog_rewrite_db.result +++ b/mysql-test/suite/binlog/r/binlog_mysqlbinlog_rewrite_db.result @@ -13,22 +13,22 @@ DELETE FROM t1 WHERE i=2; [VALID SYNTAX read from remote server ,The from->to database names are correctly mentioned] [VALID SYNTAX, but during the application of rewrite_db filter an invalid event is found. Hence mysqlbinlog tool should exit with an appropriate error] [ERROR: Got fatal error while applying rewrite db filter.] -#Dropping the database db1 and creating the table in the new database db2. -CREATE DATABASE db2; +#Dropping the database db1 and creating the table in the new database new_db1. +CREATE DATABASE new_db1; DROP DATABASE db1; RESET MASTER; -SELECT * FROM db2.t1; -ERROR 42S02: Table 'db2.t1' doesn't exist +SELECT * FROM new_db1.t1; +ERROR 42S02: Table 'new_db1.t1' doesn't exist DROP DATABASE db1; RESET MASTER; -[The event of table db1.t1 has been successfully applied to db2.t1] -include/assert.inc [Assert that table db2.t1 has one row after applying the sql file.] +[The event of table db1.t1 has been successfully applied to new_db1.t1] +include/assert.inc [Assert that table new_db1.t1 has one row after applying the sql file.] DROP DATABASE db1; -DROP DATABASE db2; -CREATE DATABASE db2; +DROP DATABASE new_db1; +CREATE DATABASE new_db1; RESET MASTER; -[The event of table db1.t1 has been successfully applied to db2.t1] -include/assert.inc [Assert that table db2.t1 has one row after applying the sql file.] +[The event of table db1.t1 has been successfully applied to new_db1.t1] +include/assert.inc [Assert that table new_db1.t1 has one row after applying the sql file.] CLEANUP DROP DATABASE db1; -DROP DATABASE db2; +DROP DATABASE new_db1; diff --git a/mysql-test/suite/binlog/t/binlog_mysqlbinlog_rewrite_db.test b/mysql-test/suite/binlog/t/binlog_mysqlbinlog_rewrite_db.test index 41b23a37ef15..710bd2ef43df 100644 --- a/mysql-test/suite/binlog/t/binlog_mysqlbinlog_rewrite_db.test +++ b/mysql-test/suite/binlog/t/binlog_mysqlbinlog_rewrite_db.test @@ -44,48 +44,48 @@ DELETE FROM t1 WHERE i=2; --let $MYSQLD_DATADIR= `select @@datadir` --exec $MYSQL_BINLOG --force-if-open $MYSQLD_DATADIR/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/row_event.sql -# Using the new option to apply the row event on some other database (from db1 -> db2 in the current case) +# Using the new option to apply the row event on some other database (from db1 -> new_db1 in the current case) --echo [Syntax error in the use of the new option: The from database name is missing] --error 1 ---exec $MYSQL_BINLOG --force-if-open --rewrite-db="->db2" $MYSQLD_DATADIR/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/row_event_rewrite.sql +--exec $MYSQL_BINLOG --force-if-open --rewrite-db="->new_db1" $MYSQLD_DATADIR/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/row_event_rewrite.sql --echo [Syntax error in the use of the new option: The '->' is missing] --error 1 ---exec $MYSQL_BINLOG --force-if-open --rewrite-db="db1 db2" $MYSQLD_DATADIR/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/row_event_rewrite.sql +--exec $MYSQL_BINLOG --force-if-open --rewrite-db="db1 new_db1" $MYSQLD_DATADIR/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/row_event_rewrite.sql --echo [Syntax error in the use of the new option: The to database name is missing] --error 1 --exec $MYSQL_BINLOG --force-if-open --rewrite-db="db1->" $MYSQLD_DATADIR/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/row_event_rewrite.sql --echo [VALID SYNTAX,The from->to database names is correctly mentioned] ---exec $MYSQL_BINLOG --force-if-open --rewrite-db="db1->db2" $MYSQLD_DATADIR/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/row_event_rewrite.sql +--exec $MYSQL_BINLOG --force-if-open --rewrite-db="db1->new_db1" $MYSQLD_DATADIR/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/row_event_rewrite.sql --let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1) # Bug26117735: MYSQLBINLOG READ-FROM-REMOTE-SERVER NOT HONORING REWRITE_DB FILTERING --echo [VALID SYNTAX read from remote server ,The from->to database names are correctly mentioned] ---exec $MYSQL_BINLOG --force-if-open --read-from-remote-server --user=root --host=127.0.0.1 --port=$MASTER_MYPORT --rewrite-db="db1->db2" $binlog_file > $MYSQLTEST_VARDIR/tmp/row_event_from_remote_server_rewrite.sql +--exec $MYSQL_BINLOG --force-if-open --read-from-remote-server --user=root --host=127.0.0.1 --port=$MASTER_MYPORT --rewrite-db="db1->new_db1" $binlog_file > $MYSQLTEST_VARDIR/tmp/row_event_from_remote_server_rewrite.sql --echo [VALID SYNTAX, but during the application of rewrite_db filter an invalid event is found. Hence mysqlbinlog tool should exit with an appropriate error] --echo [ERROR: Got fatal error while applying rewrite db filter.] --error 1 ---exec $MYSQL_BINLOG --force-if-open -#d,'simulate_corrupt_event_len' --read-from-remote-server --user=root --host=127.0.0.1 --port=$MASTER_MYPORT --rewrite-db="db1->db2" $binlog_file > $MYSQLTEST_VARDIR/tmp/tmp.sql +--exec $MYSQL_BINLOG --force-if-open -#d,'simulate_corrupt_event_len' --read-from-remote-server --user=root --host=127.0.0.1 --port=$MASTER_MYPORT --rewrite-db="db1->new_db1" $binlog_file > $MYSQLTEST_VARDIR/tmp/tmp.sql ---echo #Dropping the database db1 and creating the table in the new database db2. +--echo #Dropping the database db1 and creating the table in the new database new_db1. -CREATE DATABASE db2; +CREATE DATABASE new_db1; DROP DATABASE db1; -# The SQL file will be applied but nothing is applied on Database db2 since the row event was +# The SQL file will be applied but nothing is applied on Database new_db1 since the row event was # generated for database db1 and table t1. # With gtid-mode=on we need purge gtid_executed, if not transactions # replayed through mysqlbinlog will be skipped. RESET MASTER; ---exec $MYSQL --database=db2 --local-infile=1 < $MYSQLTEST_VARDIR/tmp/row_event.sql +--exec $MYSQL --database=new_db1 --local-infile=1 < $MYSQLTEST_VARDIR/tmp/row_event.sql --error ER_NO_SUCH_TABLE -SELECT * FROM db2.t1; +SELECT * FROM new_db1.t1; # The SQL file should be applied since the row event was extracted using the new mysqlbinlog option. @@ -93,22 +93,22 @@ DROP DATABASE db1; # With gtid-mode=on we need purge gtid_executed, if not transactions # replayed through mysqlbinlog will be skipped. RESET MASTER; ---echo [The event of table db1.t1 has been successfully applied to db2.t1] ---exec $MYSQL --database=db2 --local-infile=1 < $MYSQLTEST_VARDIR/tmp/row_event_rewrite.sql ---let $assert_text= Assert that table db2.t1 has one row after applying the sql file. ---let $assert_cond= `SELECT COUNT(*)=1 from db2.t1` +--echo [The event of table db1.t1 has been successfully applied to new_db1.t1] +--exec $MYSQL --database=new_db1 --local-infile=1 < $MYSQLTEST_VARDIR/tmp/row_event_rewrite.sql +--let $assert_text= Assert that table new_db1.t1 has one row after applying the sql file. +--let $assert_cond= `SELECT COUNT(*)=1 from new_db1.t1` --source include/assert.inc DROP DATABASE db1; -DROP DATABASE db2; -CREATE DATABASE db2; +DROP DATABASE new_db1; +CREATE DATABASE new_db1; # With gtid-mode=on we need purge gtid_executed, if not transactions # replayed through mysqlbinlog will be skipped. RESET MASTER; ---echo [The event of table db1.t1 has been successfully applied to db2.t1] ---exec $MYSQL --database=db2 --local-infile=1 < $MYSQLTEST_VARDIR/tmp/row_event_from_remote_server_rewrite.sql ---let $assert_text= Assert that table db2.t1 has one row after applying the sql file. ---let $assert_cond= `SELECT COUNT(*)=1 from db2.t1` +--echo [The event of table db1.t1 has been successfully applied to new_db1.t1] +--exec $MYSQL --database=new_db1 --local-infile=1 < $MYSQLTEST_VARDIR/tmp/row_event_from_remote_server_rewrite.sql +--let $assert_text= Assert that table new_db1.t1 has one row after applying the sql file. +--let $assert_cond= `SELECT COUNT(*)=1 from new_db1.t1` --source include/assert.inc --echo CLEANUP @@ -118,4 +118,4 @@ RESET MASTER; --remove_file $MYSQLTEST_VARDIR/tmp/row_event_from_remote_server_rewrite.sql --remove_file $MYSQLTEST_VARDIR/tmp/tmp.sql DROP DATABASE db1; -DROP DATABASE db2; +DROP DATABASE new_db1; From 6d94ca896fc3d50b8febbf8aae4140708c1879de Mon Sep 17 00:00:00 2001 From: Daogang Qu Date: Thu, 28 Sep 2017 10:59:19 +0800 Subject: [PATCH 0084/1221] Bug #26865538 THE ACK RECEIVER DOES NOT WORK WELL WITH YASSL IN SEMISYNC YaSSL will read more than one acknowledgement packets together if there are more than one acknowledgement packets are ready in the system net buffer, but ack_receiver thread just handles the first acknowledgement after each poll(). So the following acknowledgement may never be handled if there is no new acknowledgement coming. Which causes that rpl_semi_sync_group_commit_deadlock.test timeout. To fix the problem, the ack_receiver thread handles all the acknowledgements in the system net buffer after each poll(). --- ...semi_sync_group_commit_deadlock_ssl.result | 86 +++++++++++++++++++ ..._sync_group_commit_deadlock_ssl-master.opt | 1 + ...i_sync_group_commit_deadlock_ssl-slave.opt | 1 + ...l_semi_sync_group_commit_deadlock_ssl.test | 46 ++++++++++ .../semisync/semisync_master_ack_receiver.cc | 18 ++-- 5 files changed, 144 insertions(+), 8 deletions(-) create mode 100644 mysql-test/suite/rpl/r/rpl_semi_sync_group_commit_deadlock_ssl.result create mode 100644 mysql-test/suite/rpl/t/rpl_semi_sync_group_commit_deadlock_ssl-master.opt create mode 100644 mysql-test/suite/rpl/t/rpl_semi_sync_group_commit_deadlock_ssl-slave.opt create mode 100644 mysql-test/suite/rpl/t/rpl_semi_sync_group_commit_deadlock_ssl.test diff --git a/mysql-test/suite/rpl/r/rpl_semi_sync_group_commit_deadlock_ssl.result b/mysql-test/suite/rpl/r/rpl_semi_sync_group_commit_deadlock_ssl.result new file mode 100644 index 000000000000..55c95df54959 --- /dev/null +++ b/mysql-test/suite/rpl/r/rpl_semi_sync_group_commit_deadlock_ssl.result @@ -0,0 +1,86 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +include/install_semisync.inc +[connection slave] +STOP SLAVE IO_THREAD; +CHANGE MASTER TO MASTER_SSL=1; +START SLAVE IO_THREAD; +[connection master] +SET @max_binlog_size_save= @@GLOBAL.MAX_BINLOG_SIZE; +SET @@GLOBAL.MAX_BINLOG_SIZE= 4096; +SET GLOBAL rpl_semi_sync_master_timeout= 6000000; +# +# Verify it on AFTER_SYNC wait point +# ============================================================== +# Flush error happens before AFTER_SYNC wait point. So +# +[connection master] +SET GLOBAL rpl_semi_sync_master_wait_point= AFTER_SYNC; +# Disable diff_table test +# Test tables with MyISAM engine when disabling diff_table and +# simulating flush error +include/sync_slave_sql_with_master.inc +# Build connections to master server +# Stress test that execute massive queries on every connection +include/sync_slave_sql_with_master.inc +# Enable diff_table test +# Test tables with InnoDB engine when enableing diff_table +# and simulating flush error +include/sync_slave_sql_with_master.inc +# Build connections to master server +# Stress test that execute massive queries on every connection +include/sync_slave_sql_with_master.inc +# Test if the results are consistent on master and slave +include/diff_tables.inc [master:t1, slave:t1] +include/diff_tables.inc [master:t2, slave:t2] +include/diff_tables.inc [master:t3, slave:t3] +include/diff_tables.inc [master:t4, slave:t4] +include/diff_tables.inc [master:t5, slave:t5] +include/diff_tables.inc [master:t6, slave:t6] +include/diff_tables.inc [master:t7, slave:t7] +include/diff_tables.inc [master:t8, slave:t8] +include/diff_tables.inc [master:t9, slave:t9] +include/diff_tables.inc [master:t10, slave:t10] +include/sync_slave_sql_with_master.inc +# +# Verify it on AFTER_COMMIT wait point +# ============================================================== +# +[connection master] +SET GLOBAL rpl_semi_sync_master_wait_point= AFTER_COMMIT; +# Disable diff_table test +# Test tables with MyISAM engine when disabling diff_table and +# simulating flush error +include/sync_slave_sql_with_master.inc +# Build connections to master server +# Stress test that execute massive queries on every connection +include/sync_slave_sql_with_master.inc +# Enable diff_table test +# Test tables with InnoDB engine when enableing diff_table +# and simulating flush error +include/sync_slave_sql_with_master.inc +# Build connections to master server +# Stress test that execute massive queries on every connection +include/sync_slave_sql_with_master.inc +# Test if the results are consistent on master and slave +include/diff_tables.inc [master:t1, slave:t1] +include/diff_tables.inc [master:t2, slave:t2] +include/diff_tables.inc [master:t3, slave:t3] +include/diff_tables.inc [master:t4, slave:t4] +include/diff_tables.inc [master:t5, slave:t5] +include/diff_tables.inc [master:t6, slave:t6] +include/diff_tables.inc [master:t7, slave:t7] +include/diff_tables.inc [master:t8, slave:t8] +include/diff_tables.inc [master:t9, slave:t9] +include/diff_tables.inc [master:t10, slave:t10] +include/sync_slave_sql_with_master.inc +[connection master] +SET @@GLOBAL.MAX_BINLOG_SIZE= @max_binlog_size_save; +include/uninstall_semisync.inc +[connection slave] +include/stop_slave.inc +CHANGE MASTER TO MASTER_SSL = 0; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_semi_sync_group_commit_deadlock_ssl-master.opt b/mysql-test/suite/rpl/t/rpl_semi_sync_group_commit_deadlock_ssl-master.opt new file mode 100644 index 000000000000..80eb5b060a59 --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_semi_sync_group_commit_deadlock_ssl-master.opt @@ -0,0 +1 @@ +$SEMISYNC_PLUGIN_OPT --sync_binlog=0 diff --git a/mysql-test/suite/rpl/t/rpl_semi_sync_group_commit_deadlock_ssl-slave.opt b/mysql-test/suite/rpl/t/rpl_semi_sync_group_commit_deadlock_ssl-slave.opt new file mode 100644 index 000000000000..58029d28acec --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_semi_sync_group_commit_deadlock_ssl-slave.opt @@ -0,0 +1 @@ +$SEMISYNC_PLUGIN_OPT diff --git a/mysql-test/suite/rpl/t/rpl_semi_sync_group_commit_deadlock_ssl.test b/mysql-test/suite/rpl/t/rpl_semi_sync_group_commit_deadlock_ssl.test new file mode 100644 index 000000000000..4eaf699002cc --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_semi_sync_group_commit_deadlock_ssl.test @@ -0,0 +1,46 @@ +################################################################################ +# Bug #26865538 THE ACK RECEIVER DOES NOT WORK WELL WITH YASSL IN SEMISYNC +# +# The test verifies that ack receiver works well with yassl in semi-sync. +# +# Note: YaSSL code is frozen in 8.0+. Please see WL#8998. So we allow the +# test fail in 8.0+ before pushing WL#8998. The test will work well with +# wolfssl after pushing WL#8998. The test works well with opensll in 5.7+. +# +# ################################################################################ +--source include/not_group_replication_plugin.inc +# Want to skip this test from daily Valgrind execution +--source include/no_valgrind_without_big.inc +--source include/have_ssl_communication.inc +# Adding big test option for this test. +--source include/big_test.inc +--source include/have_debug.inc +--source include/master-slave.inc +--source include/install_semisync.inc + +--source include/rpl_connection_slave.inc +STOP SLAVE IO_THREAD; +CHANGE MASTER TO MASTER_SSL=1; +START SLAVE IO_THREAD; + +--source include/rpl_connection_master.inc +SET @max_binlog_size_save= @@GLOBAL.MAX_BINLOG_SIZE; +SET @@GLOBAL.MAX_BINLOG_SIZE= 4096; +SET GLOBAL rpl_semi_sync_master_timeout= 6000000; + +--let $connections= 11 +--let $loops= 500 +--let $error_simulation= 0 + +--source extra/rpl_tests/rpl_semi_sync_group_commit_deadlock.inc + +--source include/rpl_connection_master.inc +SET @@GLOBAL.MAX_BINLOG_SIZE= @max_binlog_size_save; +--source include/uninstall_semisync.inc + +--source include/rpl_connection_slave.inc +--source include/stop_slave.inc +CHANGE MASTER TO MASTER_SSL = 0; + +--let $rpl_only_running_threads= 1 +--source include/rpl_end.inc diff --git a/plugin/semisync/semisync_master_ack_receiver.cc b/plugin/semisync/semisync_master_ack_receiver.cc index aa0751454c75..fff2c7144f79 100644 --- a/plugin/semisync/semisync_master_ack_receiver.cc +++ b/plugin/semisync/semisync_master_ack_receiver.cc @@ -260,8 +260,6 @@ void Ack_receiver::run() if (listener.is_socket_active(i)) { ulong len; - - net_clear(&net, 0); net.vio= &m_slaves[i].vio; /* Set compress flag. This is needed to support @@ -270,12 +268,16 @@ void Ack_receiver::run() net.compress= m_slaves[i].thd->get_protocol_classic()->get_compression(); - len= my_net_read(&net); - if (likely(len != packet_error)) - repl_semisync.reportReplyPacket(m_slaves[i].server_id(), - net.read_pos, len); - else if (net.last_errno == ER_NET_READ_ERROR) - listener.clear_socket_info(i); + do { + net_clear(&net, 0); + + len= my_net_read(&net); + if (likely(len != packet_error)) + repl_semisync.reportReplyPacket(m_slaves[i].server_id(), + net.read_pos, len); + else if (net.last_errno == ER_NET_READ_ERROR) + listener.clear_socket_info(i); + } while (net.vio->has_data(net.vio)); } i++; } From 504daff98ce883b9a12c95514bc40d486fa55761 Mon Sep 17 00:00:00 2001 From: Lars Tangvald Date: Thu, 28 Sep 2017 10:01:21 +0200 Subject: [PATCH 0085/1221] Bug#26647168 Postpush fix The debian/rules file listed the default-location license files as skipped. This silently overrides their entries in the .install files so no packages contains the files, but without the packaging failing. --- packaging/deb-in/rules.in | 2 -- 1 file changed, 2 deletions(-) diff --git a/packaging/deb-in/rules.in b/packaging/deb-in/rules.in index 7332a551e28f..f983111e12c6 100644 --- a/packaging/deb-in/rules.in +++ b/packaging/deb-in/rules.in @@ -100,8 +100,6 @@ override_dh_install: -Xusr/share/mysql/mysql.server \ -Xusr/share/man/man1/mysql.server.1 \ -Xusr/share/mysql/binary-configure \ - -Xusr/share/mysql/@DEB_INSTALL_LICENSEFILE@ \ - -Xusr/share/mysql/README \ -Xusr/share/mysql/docs/mysql.info \ -Xusr/share/man/man1/mysqlman.1 \ -X.h.pp From f60bc0458e12cf3f79df5f0d4e255cbb2341576e Mon Sep 17 00:00:00 2001 From: Venkatesh Duggirala Date: Thu, 28 Sep 2017 16:24:05 +0530 Subject: [PATCH 0086/1221] Bug#25656123 MEMORY LEAK IN MASTER-MASTER GTID REPLICATION WITH SYNC_RELAY_LOG_INFO Problem: Applier thread is leaking memory when it is updating repository tables for skipped events. Analysis: Applier thread does free_root(thd->mem_root,...) after every event group execution (in Query_log_event::do_apply_event and Row_log_event do_apply_event execution). But when Applier thread is skipping/igonring some events, free_root is not getting executed. Rotate_log_events are generated on Slaves with server_id=0 for all the ignored events, so that the positions in the repository is updated properly even for ignored events. This kind of Rotate_log_event is generated when 1) the event is generated on the same host and reached due to circular replication (server_id == ::server_id) 2) the event is from the host which is listed in ignore_server_ids 3) IO thread is receiving HEARTBEAT event from the master 4) IO thread is receiving PREVIOUS_GTID_LOG_EVENT from the master. Slave skips an event if the slave_skip_counter is greater than zero. Even in case of events are skipped/ignored, applier thread needs to update repository table. While updating repository table, applier thread uses thread's memory root . We have to free thd's mem_root after we update the positions in the repository table if the event is a skipped/ignored event. Otherwise, imagine a situation where slave_skip_counter is big number or Slave is getting only ignored events, slave is updating the repository for these events. All the memory used while these operations are going on is never freed unless slave starts executing the events (after slave_skip_counter becomes zero or slave gets non-ignorable events). Fix: After skipped/ignored event updates the repository table, memory used by mem_root is not required any more and can be freed. --- .../rpl/r/rpl_ignore_events_mem_growth.result | 59 +++++++ .../t/rpl_ignore_events_mem_growth-master.opt | 5 + .../t/rpl_ignore_events_mem_growth-slave.opt | 5 + .../rpl/t/rpl_ignore_events_mem_growth.test | 150 ++++++++++++++++++ sql/log_event.cc | 25 +++ sql/rpl_slave.cc | 17 ++ 6 files changed, 261 insertions(+) create mode 100644 mysql-test/suite/rpl/r/rpl_ignore_events_mem_growth.result create mode 100644 mysql-test/suite/rpl/t/rpl_ignore_events_mem_growth-master.opt create mode 100644 mysql-test/suite/rpl/t/rpl_ignore_events_mem_growth-slave.opt create mode 100644 mysql-test/suite/rpl/t/rpl_ignore_events_mem_growth.test diff --git a/mysql-test/suite/rpl/r/rpl_ignore_events_mem_growth.result b/mysql-test/suite/rpl/r/rpl_ignore_events_mem_growth.result new file mode 100644 index 000000000000..6e694fd752f5 --- /dev/null +++ b/mysql-test/suite/rpl/r/rpl_ignore_events_mem_growth.result @@ -0,0 +1,59 @@ +# +# Step-1) Create M1<->M2 replication topology +# +include/rpl_init.inc [topology=1->2->1] +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +# +# Step-2) Create a sample table to create ignored/skipped +# insert events on the table. +# +[connection server_1] +CREATE TABLE t1(i INT); +include/rpl_sync.inc +# +# Step-3) If gtid_mode is OFF, set sql_slave_skip_counter to 500 on +# M2 node and restart sql thread to make the change effective. +# +# If gtid_mode is ON, execute 500 empty transactions on +# M2 node, so that 500 transactions from M1 will be skipped. +# +[connection server_2] +include/stop_slave_sql.inc +include/start_slave_sql.inc +# +# Step-4) Record thd::main_mem_root usage values on both servers before +# starting the experiment. +# +[connection server_1] +[connection server_2] +# +# Step-5) Insert 1000 sample queries on M1 node. First 500 inserts will +# be ignored on M2 node (because sql_slave_skip_counter set to +# 500). Second 500 inserts will be executed on M2 and will be +# replicated back to M1 node. But they will be ignored on M1 +# because they were originated on M1 node. +# +[connection server_1] +DROP TABLE t1; +# +# Step-6) Record thd::main_mem_root usage value on M1 after +# the experiment. Check that thd::main_mem_root value +# did not increased. +# +include/assert.inc [thd::main_mem_root on M1 should be the same value as before experiment value.] +# +# Step-7) Record thd::main_mem_root usage value on M2 after +# the experiment. Check that thd::main_mem_root value +# did not increased. +# +[connection server_2] +include/assert.inc [thd::main_mem_root on M2 should be the same value as before experiment value.] +# +# Step-8) Cleanup. +# +include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_ignore_events_mem_growth-master.opt b/mysql-test/suite/rpl/t/rpl_ignore_events_mem_growth-master.opt new file mode 100644 index 000000000000..1e7a661da110 --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_ignore_events_mem_growth-master.opt @@ -0,0 +1,5 @@ +--master_info_repository='TABLE' +--relay_log_info_repository='TABLE' +--sync_relay_log_info=1 +--sync_master_info=1 +--performance-schema-instrument='memory%=ON' diff --git a/mysql-test/suite/rpl/t/rpl_ignore_events_mem_growth-slave.opt b/mysql-test/suite/rpl/t/rpl_ignore_events_mem_growth-slave.opt new file mode 100644 index 000000000000..1e7a661da110 --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_ignore_events_mem_growth-slave.opt @@ -0,0 +1,5 @@ +--master_info_repository='TABLE' +--relay_log_info_repository='TABLE' +--sync_relay_log_info=1 +--sync_master_info=1 +--performance-schema-instrument='memory%=ON' diff --git a/mysql-test/suite/rpl/t/rpl_ignore_events_mem_growth.test b/mysql-test/suite/rpl/t/rpl_ignore_events_mem_growth.test new file mode 100644 index 000000000000..9ee79823a163 --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_ignore_events_mem_growth.test @@ -0,0 +1,150 @@ +############################################################################### +# Bug#25656123 MEMORY LEAK IN MASTER-MASTER GTID REPLICATION WITH +# SYNC_RELAY_LOG_INFO +# +# Problem: Applier thread is leaking memory when it is updating +# repository tables for ignored/skipped events. +# +# Steps to reproduce: +# +# 1) Create M1<->M2 replication topology +# +# 2) Create a sample table to create ignored/skipped insert events +# on the table. +# +# 3) If gtid_mode is OFF, set sql_slave_skip_counter to 500 on M2 node +# and restart sql thread to make the change effective. +# +# If gtid_mode is ON, execute 500 empty transactions on M2 node, +# so that 500 transactions from M1 will be skipped. +# +# 4) Record thd::main_mem_root usage values on both servers before +# starting the experiment. +# +# 5) Insert 1000 sample queries on M1 node. First 500 inserts will be ignored +# on M2 node (because sql_slave_skip_counter set to 500 in step-3). +# Second 500 inserts will be executed on M2 and will be replicated back to +# M1 node. But they will be ignored on M1 because they were originated on +# M1 node. +# +# 6) Record thd::main_mem_root usage value on M1 after +# the experiment. Check that thd::main_mem_root value +# did not increased. +# +# 7) Record thd::main_mem_root usage value on M2 after +# the experiment. Check that thd::main_mem_root value +# did not increased. +# +# 8) Cleanup. +############################################################################### + +# This test is independent of binlog format. Choosing 'row' format. +--source include/have_binlog_format_row.inc +# Performance schema Query used to test memory growth +--let $perf_query=SELECT high_number_of_bytes_used/1024/1024 FROM performance_schema.memory_summary_global_by_event_name WHERE event_name = 'memory/sql/thd::main_mem_root' +--let $master_uuid=`SELECT @@SERVER_UUID` + +--echo # +--echo # Step-1) Create M1<->M2 replication topology +--echo # +--let $rpl_topology= 1->2->1 +--source include/rpl_init.inc + +--echo # +--echo # Step-2) Create a sample table to create ignored/skipped +--echo # insert events on the table. +--echo # +--let $rpl_connection_name=server_1 +--source include/rpl_connection.inc +CREATE TABLE t1(i INT); +--source include/rpl_sync.inc + +--echo # +--echo # Step-3) If gtid_mode is OFF, set sql_slave_skip_counter to 500 on +--echo # M2 node and restart sql thread to make the change effective. +--echo # +--echo # If gtid_mode is ON, execute 500 empty transactions on +--echo # M2 node, so that 500 transactions from M1 will be skipped. +--echo # +--let $rpl_connection_name=server_2 +--source include/rpl_connection.inc +--source include/stop_slave_sql.inc +--disable_query_log +if ( `SELECT @@GLOBAL.GTID_MODE = "OFF"` ) +{ + SET GLOBAL sql_slave_skip_counter=500; +} +if ( `SELECT @@GLOBAL.GTID_MODE = "ON"` ) +{ + --let $trx_no=2 + while ($trx_no <= 500) + { + --replace_result $master_uuid MASTER_UUID + --eval SET GTID_NEXT='$master_uuid:$trx_no' + BEGIN; + COMMIT; + --inc $trx_no + } + SET GTID_NEXT='AUTOMATIC'; +} +--enable_query_log +--source include/start_slave_sql.inc + +--echo # +--echo # Step-4) Record thd::main_mem_root usage values on both servers before +--echo # starting the experiment. +--echo # +--let $rpl_connection_name=server_1 +--source include/rpl_connection.inc + +--let $thd_mem_root_usage_on_M1_before_experiment=`$perf_query` + +--let $rpl_connection_name=server_2 +--source include/rpl_connection.inc +--let $thd_mem_root_usage_on_M2_before_experiment=`$perf_query` + +--echo # +--echo # Step-5) Insert 1000 sample queries on M1 node. First 500 inserts will +--echo # be ignored on M2 node (because sql_slave_skip_counter set to +--echo # 500). Second 500 inserts will be executed on M2 and will be +--echo # replicated back to M1 node. But they will be ignored on M1 +--echo # because they were originated on M1 node. +--echo # +--let $rpl_connection_name=server_1 +--source include/rpl_connection.inc +--disable_query_log +--let $i=0 +while ($i < 1000) +{ + --eval INSERT INTO t1 VALUES ($i) + --inc $i +} +--enable_query_log +DROP TABLE t1; + +--echo # +--echo # Step-6) Record thd::main_mem_root usage value on M1 after +--echo # the experiment. Check that thd::main_mem_root value +--echo # did not increased. +--echo # +--let $thd_mem_root_usage_on_M1_after_experiment=`$perf_query` +--let $assert_text= thd::main_mem_root on M1 should be the same value as before experiment value. +--let $assert_cond= $thd_mem_root_usage_on_M1_after_experiment = $thd_mem_root_usage_on_M1_before_experiment +--source include/assert.inc + +--echo # +--echo # Step-7) Record thd::main_mem_root usage value on M2 after +--echo # the experiment. Check that thd::main_mem_root value +--echo # did not increased. +--echo # +--let $rpl_connection_name=server_2 +--source include/rpl_connection.inc +--let $thd_mem_root_usage_on_M2_after_experiment=`$perf_query` +--let $assert_text= thd::main_mem_root on M2 should be the same value as before experiment value. +--let $assert_cond= $thd_mem_root_usage_on_M2_after_experiment = $thd_mem_root_usage_on_M2_before_experiment +--source include/assert.inc + +--echo # +--echo # Step-8) Cleanup. +--echo # +--source include/rpl_end.inc diff --git a/sql/log_event.cc b/sql/log_event.cc index bc9c47fa45d5..2e2e5bb29c1e 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -6624,6 +6624,31 @@ int Rotate_log_event::do_update_pos(Relay_log_info *rli) thd->variables.sql_mode= global_system_variables.sql_mode; thd->variables.auto_increment_increment= thd->variables.auto_increment_offset= 1; + /* + Rotate_log_events are generated on Slaves with server_id=0 + for all the ignored events, so that the positions in the repository + is updated properly even for ignored events. + + This kind of Rotate_log_event is generated when + + 1) the event is generated on the same host and reached due + to circular replication (server_id == ::server_id) + + 2) the event is from the host which is listed in ignore_server_ids + + 3) IO thread is receiving HEARTBEAT event from the master + + 4) IO thread is receiving PREVIOUS_GTID_LOG_EVENT from the master. + + We have to free thd's mem_root here after we update the positions + in the repository table. Otherwise, imagine a situation where + Slave is keep getting ignored events only and no other (non-ignored) + events from the Master, Slave never executes free_root (that generally + happens from Query_log_event::do_apply_event or + Rows_log_event::do_apply_event when they find end of the group event). + */ + if (server_id == 0) + free_root(thd->mem_root, MYF(MY_KEEP_PREALLOC)); } else rli->inc_event_relay_log_pos(); diff --git a/sql/rpl_slave.cc b/sql/rpl_slave.cc index 9f3f7a21f665..2bbc719d8c94 100644 --- a/sql/rpl_slave.cc +++ b/sql/rpl_slave.cc @@ -4869,6 +4869,23 @@ apply_event_and_update_pos(Log_event** ptr_ev, THD* thd, Relay_log_info* rli) #endif error= ev->update_pos(rli); + /* + Slave skips an event if the slave_skip_counter is greater than zero. + We have to free thd's mem_root here after we update the positions + in the repository table if the event is a skipped event. + Otherwise, imagine a situation where slave_skip_counter is big number + and slave is skipping the events and updating the repository. + All the memory used while these operations are going on is never + freed unless slave starts executing the events (after slave_skip_counter + becomes zero). + + Hence we free thd's mem_root here if it is a skipped event. + (freeing mem_root generally happens from Query_log_event::do_apply_event + or Rows_log_event::do_apply_event when they find the end of + the group event). + */ + if (skip_event) + free_root(thd->mem_root, MYF(MY_KEEP_PREALLOC)); #ifndef DBUG_OFF DBUG_PRINT("info", ("update_pos error = %d", error)); From 052dbd7b0796c606a29b25a3a5c573321f3dcd79 Mon Sep 17 00:00:00 2001 From: Joao Gramacho Date: Thu, 28 Sep 2017 10:07:57 +0100 Subject: [PATCH 0087/1221] BUG#26878022 MYSQLBINLOG: ASSERTION `(OLD_MH->M_KEY == KEY) || (OLD_MH->M_KEY == 0)' FAILED Post push fix to ASAN issues. --- client/mysqlbinlog.cc | 29 +++++++------------ .../r/binlog_mysqlbinlog_rewrite_db.result | 7 +++++ .../t/binlog_mysqlbinlog_rewrite_db.test | 19 ++++++++++++ 3 files changed, 37 insertions(+), 18 deletions(-) diff --git a/client/mysqlbinlog.cc b/client/mysqlbinlog.cc index 1b3cb26724cf..b8184e169f77 100644 --- a/client/mysqlbinlog.cc +++ b/client/mysqlbinlog.cc @@ -1460,17 +1460,7 @@ Exit_status process_event(PRINT_EVENT_INFO *print_event_info, Log_event *ev, if (head->error == -1) goto err; - if (opt_remote_proto == BINLOG_LOCAL) - { - ev->free_temp_buf(); // free memory allocated in dump_local_log_entries - } - else - { - /* - disassociate but not free dump_remote_log_entries time memory - */ - ev->temp_buf= 0; - } + ev->free_temp_buf(); /* We don't want this event to be deleted now, so let's hide it (I (Guilhem) should later see if this triggers a non-serious Valgrind @@ -1718,14 +1708,9 @@ Exit_status process_event(PRINT_EVENT_INFO *print_event_info, Log_event *ev, retval= ERROR_STOP; end: rec_count++; - /* - Destroy the log_event object. If reading from a remote host, - set the temp_buf to NULL so that memory isn't freed twice. - */ + /* Destroy the log_event object. */ if (ev) { - if (opt_remote_proto != BINLOG_LOCAL) - ev->temp_buf= 0; if (destroy_evt) /* destroy it later if not set (ignored table map) */ delete ev; } @@ -2705,6 +2690,7 @@ static Exit_status dump_remote_log_entries(PRINT_EVENT_INFO *print_event_info, if (rewrite_db_filter(&event_buf, &event_len, glob_description_event)) { error("Got a fatal error while applying rewrite db filter."); + my_free(event_buf); DBUG_RETURN(ERROR_STOP); } @@ -2781,6 +2767,7 @@ static Exit_status dump_remote_log_entries(PRINT_EVENT_INFO *print_event_info, */ old_off= start_position_mot; len= 1; // fake Rotate, so don't increment old_off + event_len= 0; } } else if (type == binary_log::FORMAT_DESCRIPTION_EVENT) @@ -2794,7 +2781,10 @@ static Exit_status dump_remote_log_entries(PRINT_EVENT_INFO *print_event_info, */ // fake event when not in raw mode, don't increment old_off if ((old_off != BIN_LOG_HEADER_SIZE) && (!raw_mode)) + { len= 1; + event_len= 0; + } if (raw_mode) { if (result_file && (result_file != stdout)) @@ -2839,13 +2829,16 @@ static Exit_status dump_remote_log_entries(PRINT_EVENT_INFO *print_event_info, { DBUG_EXECUTE_IF("simulate_result_file_write_error", DBUG_SET("+d,simulate_fwrite_error");); - if (my_fwrite(result_file, net->read_pos + 1 , len - 1, MYF(MY_NABP))) + if (my_fwrite(result_file, (const uchar*)event_buf, event_len, + MYF(MY_NABP))) { error("Could not write into log file '%s'", log_file_name); retval= ERROR_STOP; } if (ev) reset_temp_buf_and_delete(ev); + else + my_free(event_buf); /* Flush result_file after every event */ fflush(result_file); diff --git a/mysql-test/suite/binlog/r/binlog_mysqlbinlog_rewrite_db.result b/mysql-test/suite/binlog/r/binlog_mysqlbinlog_rewrite_db.result index dbd9bebf8733..6d1b44a54a04 100644 --- a/mysql-test/suite/binlog/r/binlog_mysqlbinlog_rewrite_db.result +++ b/mysql-test/suite/binlog/r/binlog_mysqlbinlog_rewrite_db.result @@ -11,6 +11,7 @@ DELETE FROM t1 WHERE i=2; [Syntax error in the use of the new option: The to database name is missing] [VALID SYNTAX,The from->to database names is correctly mentioned] [VALID SYNTAX read from remote server ,The from->to database names are correctly mentioned] +[VALID SYNTAX read from remote server in raw mode, the from->to database names are correctly mentioned] [VALID SYNTAX, but during the application of rewrite_db filter an invalid event is found. Hence mysqlbinlog tool should exit with an appropriate error] [ERROR: Got fatal error while applying rewrite db filter.] #Dropping the database db1 and creating the table in the new database new_db1. @@ -29,6 +30,12 @@ CREATE DATABASE new_db1; RESET MASTER; [The event of table db1.t1 has been successfully applied to new_db1.t1] include/assert.inc [Assert that table new_db1.t1 has one row after applying the sql file.] +DROP DATABASE db1; +DROP DATABASE new_db1; +CREATE DATABASE new_db1; +RESET MASTER; +[The event of table db1.t1 has been successfully applied to new_db1.t1 from raw mode] +include/assert.inc [Assert that table new_db1.t1 has one row after applying the sql file from raw binlog dump.] CLEANUP DROP DATABASE db1; DROP DATABASE new_db1; diff --git a/mysql-test/suite/binlog/t/binlog_mysqlbinlog_rewrite_db.test b/mysql-test/suite/binlog/t/binlog_mysqlbinlog_rewrite_db.test index 710bd2ef43df..e96eb6931dfe 100644 --- a/mysql-test/suite/binlog/t/binlog_mysqlbinlog_rewrite_db.test +++ b/mysql-test/suite/binlog/t/binlog_mysqlbinlog_rewrite_db.test @@ -67,6 +67,11 @@ DELETE FROM t1 WHERE i=2; --echo [VALID SYNTAX read from remote server ,The from->to database names are correctly mentioned] --exec $MYSQL_BINLOG --force-if-open --read-from-remote-server --user=root --host=127.0.0.1 --port=$MASTER_MYPORT --rewrite-db="db1->new_db1" $binlog_file > $MYSQLTEST_VARDIR/tmp/row_event_from_remote_server_rewrite.sql +# BUG26878022: MYSQLBINLOG: ASSERTION `(OLD_MH->M_KEY == KEY) || (OLD_MH->M_KEY == 0)' FAILED +--echo [VALID SYNTAX read from remote server in raw mode, the from->to database names are correctly mentioned] +--exec $MYSQL_BINLOG --raw --read-from-remote-server --user=root --host=127.0.0.1 --port=$MASTER_MYPORT --rewrite-db="db1->new_db1" $binlog_file --result-file=$MYSQLTEST_VARDIR/tmp/ +--exec $MYSQL_BINLOG $MYSQLTEST_VARDIR/tmp/$binlog_file > $MYSQLTEST_VARDIR/tmp/row_event_from_remote_server_rewrite_raw.sql + --echo [VALID SYNTAX, but during the application of rewrite_db filter an invalid event is found. Hence mysqlbinlog tool should exit with an appropriate error] --echo [ERROR: Got fatal error while applying rewrite db filter.] --error 1 @@ -111,11 +116,25 @@ RESET MASTER; --let $assert_cond= `SELECT COUNT(*)=1 from new_db1.t1` --source include/assert.inc +DROP DATABASE db1; +DROP DATABASE new_db1; +CREATE DATABASE new_db1; +# With gtid-mode=on we need purge gtid_executed, if not transactions +# replayed through mysqlbinlog will be skipped. +RESET MASTER; +--echo [The event of table db1.t1 has been successfully applied to new_db1.t1 from raw mode] +--exec $MYSQL --database=new_db1 --local-infile=1 < $MYSQLTEST_VARDIR/tmp/row_event_from_remote_server_rewrite_raw.sql +--let $assert_text= Assert that table new_db1.t1 has one row after applying the sql file from raw binlog dump. +--let $assert_cond= `SELECT COUNT(*)=1 from new_db1.t1` +--source include/assert.inc + --echo CLEANUP --remove_file $MYSQLTEST_VARDIR/tmp/row_event.sql --remove_file $MYSQLTEST_VARDIR/tmp/row_event_rewrite.sql --remove_file $MYSQLTEST_VARDIR/tmp/row_event_from_remote_server_rewrite.sql +--remove_file $MYSQLTEST_VARDIR/tmp/row_event_from_remote_server_rewrite_raw.sql --remove_file $MYSQLTEST_VARDIR/tmp/tmp.sql +--remove_file $MYSQLTEST_VARDIR/tmp/$binlog_file DROP DATABASE db1; DROP DATABASE new_db1; From 73e7d770b2a295de468edc12bf7fcab5f8ffb115 Mon Sep 17 00:00:00 2001 From: Lars Tangvald Date: Thu, 28 Sep 2017 14:22:10 +0200 Subject: [PATCH 0088/1221] Bug#26647168 PostPostpushfixfix The line excluding README also matched README-test, which still needs to be excluded, or the packaging will fail (5.7+) --- packaging/deb-in/rules.in | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packaging/deb-in/rules.in b/packaging/deb-in/rules.in index df88db158009..651a31e82a8b 100644 --- a/packaging/deb-in/rules.in +++ b/packaging/deb-in/rules.in @@ -99,6 +99,8 @@ override_dh_install: -Xusr/share/mysql/mysql.server \ -Xusr/share/man/man1/mysql.server.1 \ -Xusr/share/mysql/binary-configure \ + -Xusr/share/mysql/@DEB_INSTALL_LICENSEFILE@-test \ + -Xusr/share/mysql/README-test \ -Xusr/share/mysql/docs/mysql.info \ -Xusr/share/man/man1/mysqlman.1 \ -X.h.pp From c3de09c8e6213ba282d2b39981e29f4996b14b18 Mon Sep 17 00:00:00 2001 From: Venkatesh Duggirala Date: Thu, 7 Sep 2017 18:38:03 +0530 Subject: [PATCH 0089/1221] Bug#26618925 XA ROLLBACK WITH WRONG XID WILL BE RECORDED INTO THE BINLOG Problem: XA ROLLBACK is getting binlogged even when it is failed. Fix: Error case is checked when XA ROLLBACK is getting binlogged. Change-Id: Id45e29090b482546920471186ee93400810208ec --- .../r/binlog_xa_rollback_failure.result | 24 ++++++++++ .../binlog/t/binlog_xa_rollback_failure.test | 45 +++++++++++++++++++ sql/binlog.cc | 2 + 3 files changed, 71 insertions(+) create mode 100644 mysql-test/suite/binlog/r/binlog_xa_rollback_failure.result create mode 100644 mysql-test/suite/binlog/t/binlog_xa_rollback_failure.test diff --git a/mysql-test/suite/binlog/r/binlog_xa_rollback_failure.result b/mysql-test/suite/binlog/r/binlog_xa_rollback_failure.result new file mode 100644 index 000000000000..457ae10a8fd5 --- /dev/null +++ b/mysql-test/suite/binlog/r/binlog_xa_rollback_failure.result @@ -0,0 +1,24 @@ +CREATE TABLE t1(id INT PRIMARY KEY); +# +# 1) Prepare XA transaction with some sample data with +# XA global Trx id '1'. +# +XA START '1'; +INSERT INTO t1 VALUES (1); +XA END '1'; +XA PREPARE '1'; +# +# 2) Try to do 'XA ROLLBACK' with XA global Trx id '2' and check that +# it fails. +# +XA ROLLBACK '2'; +ERROR XAE07: XAER_RMFAIL: The command cannot be executed when global transaction is in the PREPARED state +# +# 3) Check that nothing is written to binary log. +# +include/assert.inc [Nothing should be written in binlog for failed XA ROLLBACK.] +# +# 4) Cleanup. +# +XA COMMIT '1'; +DROP TABLE t1; diff --git a/mysql-test/suite/binlog/t/binlog_xa_rollback_failure.test b/mysql-test/suite/binlog/t/binlog_xa_rollback_failure.test new file mode 100644 index 000000000000..8780f8bde130 --- /dev/null +++ b/mysql-test/suite/binlog/t/binlog_xa_rollback_failure.test @@ -0,0 +1,45 @@ +############################################################################### +# Bug#26618925 XA ROLLBACK WITH WRONG XID WILL BE RECORDED INTO THE BINLOG +# +# Problem: XA ROLLBACK is getting binlogged even when it is failed. +# +# Steps to reproduce: +# 1) Prepare XA transaction with some sample data with XA global Trx id '1'. +# 2) Try to do 'XA ROLLBACK' with XA global Trx id '2' and check that it fails. +# 3) Check that nothing is written to binary log +# 4) Cleanup +############################################################################### +--source include/have_log_bin.inc +--source include/have_binlog_format_row.inc + +CREATE TABLE t1(id INT PRIMARY KEY); + +--echo # +--echo # 1) Prepare XA transaction with some sample data with +--echo # XA global Trx id '1'. +--echo # +XA START '1'; +INSERT INTO t1 VALUES (1); +XA END '1'; +XA PREPARE '1'; + +--echo # +--echo # 2) Try to do 'XA ROLLBACK' with XA global Trx id '2' and check that +--echo # it fails. +--echo # +let $binlog_before_xa_rollback = query_get_value(SHOW MASTER STATUS, Position, 1); +--error ER_XAER_RMFAIL +XA ROLLBACK '2'; + +--echo # +--echo # 3) Check that nothing is written to binary log. +--echo # +--let $assert_text= Nothing should be written in binlog for failed XA ROLLBACK. +--let $assert_cond= [SHOW MASTER STATUS, Position, 1] = $binlog_before_xa_rollback +--source include/assert.inc + +--echo # +--echo # 4) Cleanup. +--echo # +XA COMMIT '1'; +DROP TABLE t1; diff --git a/sql/binlog.cc b/sql/binlog.cc index 58e108756b21..c41f91ca82dd 100644 --- a/sql/binlog.cc +++ b/sql/binlog.cc @@ -1734,6 +1734,8 @@ inline int do_binlog_xa_commit_rollback(THD *thd, XID *xid, bool commit) return 0; if (!xid_state->is_binlogged()) return 0; // nothing was really logged at prepare + if (thd->is_error() && DBUG_EVALUATE_IF("simulate_xa_rm_error", 0, 1)) + return 0; // don't binlog if there are some errors. DBUG_ASSERT(!xid->is_null() || !(thd->variables.option_bits & OPTION_BIN_LOG)); From 7bc11beb53fd229ce0d36b3d4fe7abd5478f199b Mon Sep 17 00:00:00 2001 From: Piotr Obrzut Date: Fri, 29 Sep 2017 14:35:37 +0200 Subject: [PATCH 0090/1221] Bug #26835724 SERVER 5.7 REDIST CHECK IS FAILING DURING INSTALLATION Updated registry keys for the redist check. --- packaging/WiX/mysql_server.wxs.in | 36 +++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/packaging/WiX/mysql_server.wxs.in b/packaging/WiX/mysql_server.wxs.in index 327d68918aa9..ee5a008455de 100644 --- a/packaging/WiX/mysql_server.wxs.in +++ b/packaging/WiX/mysql_server.wxs.in @@ -64,18 +64,32 @@ - - - - - - Installed OR VS12REDIST - + + + + + + Installed OR VS12REDISTX64 + + + + + + + Installed OR VS12REDISTX86 + + From a510935da6bd5bd3e8870736fca010055c688f9a Mon Sep 17 00:00:00 2001 From: Knut Anders Hatlen Date: Tue, 26 Sep 2017 12:19:51 +0200 Subject: [PATCH 0091/1221] Bug#26867509: JSON_OBJECT CREATES INVALID JSON CODE When inserting JSON values from a grouped query into a string column, the inserted values could sometimes include the concatenation of all the values previously inserted into that column. The fix is to make Item_copy_json::save_in_field_inner() reset the buffer before converting the JSON value to text. (cherry picked from commit 0178fbc193bfaa0af49136e444ad5b73586d6f83) --- mysql-test/suite/json/inc/json_insert.inc | 11 +++++++++++ mysql-test/suite/json/r/json_insert_innodb.result | 13 +++++++++++++ mysql-test/suite/json/r/json_insert_ndb.result | 13 +++++++++++++ sql/item.cc | 1 + 4 files changed, 38 insertions(+) diff --git a/mysql-test/suite/json/inc/json_insert.inc b/mysql-test/suite/json/inc/json_insert.inc index 596bd6971f3f..081216c5c81d 100644 --- a/mysql-test/suite/json/inc/json_insert.inc +++ b/mysql-test/suite/json/inc/json_insert.inc @@ -145,3 +145,14 @@ disconnect con1; connection default; SET global max_allowed_packet=default; + +--echo # +--echo # Bug#26867509: JSON_OBJECT CREATES INVALID JSON CODE +--echo # + +CREATE TABLE t1(i INT, KEY(i)); +INSERT INTO t1 VALUES (1), (2), (3); +CREATE TABLE t2(i INT, vc VARCHAR(100)); +INSERT INTO t2 SELECT i, JSON_ARRAY(i) FROM t1 GROUP BY i; +SELECT * FROM t2 ORDER BY i; +DROP TABLE t1, t2; diff --git a/mysql-test/suite/json/r/json_insert_innodb.result b/mysql-test/suite/json/r/json_insert_innodb.result index eee8ffdc7db3..25f28b14d55f 100644 --- a/mysql-test/suite/json/r/json_insert_innodb.result +++ b/mysql-test/suite/json/r/json_insert_innodb.result @@ -174,3 +174,16 @@ ARRAY 6000005 18000015 INSERT INTO t1(a) VALUES(@a); DROP TABLE t1; SET global max_allowed_packet=default; +# +# Bug#26867509: JSON_OBJECT CREATES INVALID JSON CODE +# +CREATE TABLE t1(i INT, KEY(i)); +INSERT INTO t1 VALUES (1), (2), (3); +CREATE TABLE t2(i INT, vc VARCHAR(100)); +INSERT INTO t2 SELECT i, JSON_ARRAY(i) FROM t1 GROUP BY i; +SELECT * FROM t2 ORDER BY i; +i vc +1 [1] +2 [2] +3 [3] +DROP TABLE t1, t2; diff --git a/mysql-test/suite/json/r/json_insert_ndb.result b/mysql-test/suite/json/r/json_insert_ndb.result index a97f8be39a71..369ea68b1d13 100644 --- a/mysql-test/suite/json/r/json_insert_ndb.result +++ b/mysql-test/suite/json/r/json_insert_ndb.result @@ -180,3 +180,16 @@ ARRAY 6000005 18000015 INSERT INTO t1(a) VALUES(@a); DROP TABLE t1; SET global max_allowed_packet=default; +# +# Bug#26867509: JSON_OBJECT CREATES INVALID JSON CODE +# +CREATE TABLE t1(i INT, KEY(i)); +INSERT INTO t1 VALUES (1), (2), (3); +CREATE TABLE t2(i INT, vc VARCHAR(100)); +INSERT INTO t2 SELECT i, JSON_ARRAY(i) FROM t1 GROUP BY i; +SELECT * FROM t2 ORDER BY i; +i vc +1 [1] +2 [2] +3 [3] +DROP TABLE t1, t2; diff --git a/sql/item.cc b/sql/item.cc index 181d9aa3a915..cd9da1d95bbc 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -4838,6 +4838,7 @@ Item_copy_json::save_in_field_inner(Field *field, bool no_conversions) } else { + str_value.length(0); if (m_value->to_string(&str_value, true, item_name.ptr())) return set_field_to_null(field); /* purecov: inspected */ return save_str_value_in_field(field, &str_value); From 23a2ce92e9d1e0f560b1d393cc5a9c7a0e6310a1 Mon Sep 17 00:00:00 2001 From: Venkatesh Duggirala Date: Fri, 29 Sep 2017 19:23:49 +0530 Subject: [PATCH 0092/1221] Bug #24918678 GCS: IMPROVE ERROR MESSAGE "ERROR ON OPENING ...ERROR= 0000000000000000" ON WINT Problem: There are two problems reported in the bug. a) ERROR= 00000000 in the error message always does not make sense. b) In windows platform, error message contains error number instead of detailed error message like in the unix platform. Eg: Connection to socket 2032 failed with error 10061 Fix: For a) ERROR=0 is removed from the error message For b) In windows, code will use strerror_s now to get the detailed error message and will append that to error message. --- mysql-test/include/mtr_warnings.sql | 2 +- .../bindings/xcom/gcs_xcom_control_interface.cc | 5 ++--- .../src/bindings/xcom/xcom/xcom_base.c | 17 +++++------------ .../src/bindings/xcom/xcom/xcom_base.h | 10 ++++++++++ 4 files changed, 18 insertions(+), 16 deletions(-) diff --git a/mysql-test/include/mtr_warnings.sql b/mysql-test/include/mtr_warnings.sql index 339bb86cf6a9..7b964a67b29a 100644 --- a/mysql-test/include/mtr_warnings.sql +++ b/mysql-test/include/mtr_warnings.sql @@ -276,7 +276,7 @@ INSERT INTO global_suppressions VALUES ("\\[GCS\\] The member is already leaving or joining a group."), ("\\[GCS\\] The member is leaving a group without being on one."), ("\\[GCS\\] Processing new view on handler without a valid group configuration."), - ("\\[GCS\\] Error on opening a connection to localhost:.* on local port: .*. Error= 0"), + ("\\[GCS\\] Error on opening a connection to localhost:.* on local port: .*."), ("\\[GCS\\] Error pushing message into group communication engine."), ("\\[GCS\\] Message cannot be sent because the member does not belong to a group."), ("Slave SQL for channel 'group_replication_recovery': ... The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state.*"), diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_control_interface.cc b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_control_interface.cc index c992dd8a819e..4832e371420f 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_control_interface.cc +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_control_interface.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -422,8 +422,7 @@ enum_gcs_error Gcs_xcom_control::do_join() { MYSQL_GCS_LOG_ERROR( "Error on opening a connection to " << addr <<":"<< port << - " on local port: " << local_port - << ". Error= " << con + " on local port: " << local_port << "." ) } } diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.c b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.c index 2553c0d41d31..3b843d31480a 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.c +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.c @@ -307,6 +307,7 @@ /* {{{ Defines and constants */ +#define SYS_STRERROR_SIZE 512 #define TERMINATE_DELAY 3.0 #define EVENT_HORIZON_MIN 10 unsigned int event_horizon = EVENT_HORIZON_MIN; @@ -4628,6 +4629,7 @@ static int timed_connect(int fd, sockaddr *sock_addr, socklen_t sock_size) struct timeval timeout; fd_set rfds, wfds, efds; int res; + char buf[SYS_STRERROR_SIZE]; timeout.tv_sec= 10; timeout.tv_usec= 0; @@ -4709,13 +4711,8 @@ static int timed_connect(int fd, sockaddr *sock_addr, socklen_t sock_size) } else { -#if defined (WIN32) || defined (WIN64) - G_WARNING("Connection to socket %d failed with error %d.", - fd, socket_errno); -#else G_WARNING("Connection to socket %d failed with error %d - %s.", - fd, socket_errno, strerror(socket_errno)); -#endif + fd, socket_errno, strerr_msg(buf, sizeof(buf), socket_errno)); } return -1; } @@ -4766,6 +4763,7 @@ static connection_descriptor* connect_xcom(char *server, xcom_port port) result ret = {0,0}; struct sockaddr_in sock_addr; socklen_t sock_size; + char buf[SYS_STRERROR_SIZE]; DBGOUT(FN; STREXP(server); NEXP(port, d)); G_MESSAGE("connecting to %s %d", server, port); @@ -4787,13 +4785,8 @@ static connection_descriptor* connect_xcom(char *server, xcom_port port) SET_OS_ERR(0); if (timed_connect(fd.val, (struct sockaddr *)&sock_addr, sock_size) == -1) { fd.funerr = to_errno(GET_OS_ERR); -#if defined (WIN32) || defined (WIN64) - G_MESSAGE("Connecting socket to address %s in port %d failed with error %d.", - server, port, fd.funerr); -#else G_MESSAGE("Connecting socket to address %s in port %d failed with error %d - %s.", - server, port, fd.funerr, strerror(fd.funerr)); -#endif + server, port, fd.funerr, strerr_msg(buf, sizeof(buf), fd.funerr)); xcom_close_socket(&fd.val); return NULL; } diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.h b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.h index 0985627e4260..86258e594a35 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.h +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.h @@ -217,6 +217,16 @@ int64_t xcom_client_send_data(uint32_t size, char *data, int xcom_client_terminate_and_exit(connection_descriptor* fd); int xcom_client_set_cache_limit(connection_descriptor *fd, uint64_t cache_limit); +static inline char *strerr_msg(char *buf, size_t len, int nr) +{ +#if defined (WIN32) || defined (WIN64) + strerror_s(buf, len, nr); +#else + snprintf(buf, len, "%s", strerror(nr)); +#endif + return buf; +} + #define XCOM_COMMS_ERROR 1 #define XCOM_COMMS_OK 0 void set_xcom_comms_cb(xcom_state_change_cb x); From 58c27d9f2c70277f028d5299a1cec220801aae59 Mon Sep 17 00:00:00 2001 From: Nisha Gopalakrishnan Date: Tue, 3 Oct 2017 21:03:51 +0530 Subject: [PATCH 0093/1221] BUG#26626277: BUG IN "INSERT... ON DUPLICATE KEY UPDATE" QUERY Analysis: ========= The AFTER UPDATE trigger is not invoked for 'INSERT..ON DUPLICATE KEY UPDATE', when the value to be updated and the new value provided are the same. The AFTER UPDATE TRIGGER was triggered only if the new and old record values were different for 'INSERT..ON DUPLICATE KEY UPDATE' handling. Since the values specified in the UPDATE clause and the old value were the same, the trigger was never invoked. Fix: ==== The AFTER UPDATE trigger is invoked even if the values specified in the UPDATE clause and the old value are the same. --- mysql-test/r/trigger.result | 80 ++++++++++++++++++++++++++++++++++++- mysql-test/t/trigger.test | 79 ++++++++++++++++++++++++++++++++++++ sql/sql_insert.cc | 7 ++-- 3 files changed, 161 insertions(+), 5 deletions(-) diff --git a/mysql-test/r/trigger.result b/mysql-test/r/trigger.result index 9324febca9e2..fc5787ca5151 100644 --- a/mysql-test/r/trigger.result +++ b/mysql-test/r/trigger.result @@ -1408,8 +1408,9 @@ SELECT * FROM t2; id val 1 test1 2 test2 -3 test3 -4 test4 +3 test2 +4 test3 +5 test4 DROP TRIGGER trg27006_a_insert; DROP TRIGGER trg27006_a_update; drop table t1,t2; @@ -2795,4 +2796,79 @@ SELECT @x; 2017-04-17 06:06:06 DROP TABLE t1; SET TIMESTAMP= DEFAULT; +# +# BUG 26626277: BUG IN "INSERT... ON DUPLICATE KEY UPDATE" QUERY +# +# Setup. +CREATE TABLE t1 (fld1 VARCHAR(64) NOT NULL, +fld2 INT DEFAULT 0, PRIMARY KEY (fld1)); +CREATE TABLE t2 (fld1 VARCHAR(64) NOT NULL, +fld2 INT(11) DEFAULT NULL, PRIMARY KEY (fld1)); +INSERT INTO t1(fld1) VALUES (1100); +INSERT INTO t2 VALUES (1100, 40); +CREATE TRIGGER update_after_update +AFTER UPDATE ON t2 FOR EACH ROW +BEGIN +UPDATE t1 SET t1.fld2 = t1.fld2 + 1 +WHERE t1.fld1 = NEW.fld1; +END$$ +SELECT * FROM t1; +fld1 fld2 +1100 0 +SELECT * FROM t2; +fld1 fld2 +1100 40 +INSERT INTO t2 (fld1) values (1100) ON DUPLICATE KEY UPDATE +fld2= 50; +SELECT * FROM t1; +fld1 fld2 +1100 1 +SELECT * FROM t2; +fld1 fld2 +1100 50 +# Without patch, the after update trigger is not invoked. +INSERT INTO t2 (fld1) values (1100) ON DUPLICATE KEY UPDATE +fld2= 50; +SELECT * FROM t1; +fld1 fld2 +1100 2 +SELECT * FROM t2; +fld1 fld2 +1100 50 +# Tests covering before update trigger. +# Setup. +TRUNCATE TABLE t1; +DROP TRIGGER update_after_update; +INSERT INTO t1(fld1) VALUES (1100); +CREATE TRIGGER update_before_update +BEFORE UPDATE ON t2 FOR EACH ROW +BEGIN +UPDATE t1 SET t1.fld2 = t1.fld2 + 1 +WHERE t1.fld1 = NEW.fld1; +END$$ +SELECT * FROM t1; +fld1 fld2 +1100 0 +SELECT * FROM t2; +fld1 fld2 +1100 50 +INSERT INTO t2 (fld1) values (1100) ON DUPLICATE KEY UPDATE +fld2= 50; +SELECT * FROM t1; +fld1 fld2 +1100 1 +SELECT * FROM t2; +fld1 fld2 +1100 50 +INSERT INTO t2 (fld1) values (1100) ON DUPLICATE KEY UPDATE +fld2= 50; +SELECT * FROM t1; +fld1 fld2 +1100 2 +SELECT * FROM t2; +fld1 fld2 +1100 50 +# Cleanup +DROP TRIGGER update_before_update; +DROP TABLE t1, t2; End of 5.7 tests. diff --git a/mysql-test/t/trigger.test b/mysql-test/t/trigger.test index 4aca9b7a53af..554854712fba 100644 --- a/mysql-test/t/trigger.test +++ b/mysql-test/t/trigger.test @@ -3064,4 +3064,83 @@ remove_file $MYSQLD_DATADIR/test/t1.dat; SET TIMESTAMP= DEFAULT; + +--echo # +--echo # BUG 26626277: BUG IN "INSERT... ON DUPLICATE KEY UPDATE" QUERY +--echo # + +--echo # Setup. +CREATE TABLE t1 (fld1 VARCHAR(64) NOT NULL, +fld2 INT DEFAULT 0, PRIMARY KEY (fld1)); + +CREATE TABLE t2 (fld1 VARCHAR(64) NOT NULL, +fld2 INT(11) DEFAULT NULL, PRIMARY KEY (fld1)); + +INSERT INTO t1(fld1) VALUES (1100); +INSERT INTO t2 VALUES (1100, 40); + +DELIMITER $$; + +CREATE TRIGGER update_after_update +AFTER UPDATE ON t2 FOR EACH ROW +BEGIN + UPDATE t1 SET t1.fld2 = t1.fld2 + 1 + WHERE t1.fld1 = NEW.fld1; +END$$ + +DELIMITER ;$$ + +SELECT * FROM t1; +SELECT * FROM t2; + +INSERT INTO t2 (fld1) values (1100) ON DUPLICATE KEY UPDATE +fld2= 50; + +SELECT * FROM t1; +SELECT * FROM t2; + +--echo # Without patch, the after update trigger is not invoked. +INSERT INTO t2 (fld1) values (1100) ON DUPLICATE KEY UPDATE +fld2= 50; + +SELECT * FROM t1; +SELECT * FROM t2; + +--echo # Tests covering before update trigger. + +--echo # Setup. +TRUNCATE TABLE t1; +DROP TRIGGER update_after_update; +INSERT INTO t1(fld1) VALUES (1100); + +DELIMITER $$; + +CREATE TRIGGER update_before_update +BEFORE UPDATE ON t2 FOR EACH ROW +BEGIN + UPDATE t1 SET t1.fld2 = t1.fld2 + 1 + WHERE t1.fld1 = NEW.fld1; +END$$ + +DELIMITER ;$$ + +SELECT * FROM t1; +SELECT * FROM t2; + +INSERT INTO t2 (fld1) values (1100) ON DUPLICATE KEY UPDATE +fld2= 50; + +SELECT * FROM t1; +SELECT * FROM t2; + +INSERT INTO t2 (fld1) values (1100) ON DUPLICATE KEY UPDATE +fld2= 50; + +SELECT * FROM t1; +SELECT * FROM t2; + +--echo # Cleanup +DROP TRIGGER update_before_update; +DROP TABLE t1, t2; + --echo End of 5.7 tests. diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index c31837fc068c..0509e8872f72 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -1747,12 +1747,13 @@ int write_record(THD *thd, TABLE *table, COPY_INFO *info, COPY_INFO *update) handled separately by THD::arg_of_last_insert_id_function. */ insert_id_for_cur_row= table->file->insert_id_for_cur_row= 0; - trg_error= (table->triggers && - table->triggers->process_triggers(thd, TRG_EVENT_UPDATE, - TRG_ACTION_AFTER, TRUE)); info->stats.copied++; } + // Execute the 'AFTER, ON UPDATE' trigger + trg_error= (table->triggers && + table->triggers->process_triggers(thd, TRG_EVENT_UPDATE, + TRG_ACTION_AFTER, TRUE)); goto ok_or_after_trg_err; } else /* DUP_REPLACE */ From 4206a24fe8e06ab6f937855cba184b669e02270e Mon Sep 17 00:00:00 2001 From: Nisha Gopalakrishnan Date: Wed, 4 Oct 2017 10:56:20 +0530 Subject: [PATCH 0094/1221] BUG#21625016: INNODB FULL TEXT CASE SENSITIVE NOT WORKING. Analysis: ======== Full text search on InnoDB tables using binary collation for indexed columns does not return case sensitive matches. For case sensitive matches, it is recommended to use binary collation for the indexed columns. During the processing of the FTS query, the query string is always converted to lower case regardless of the collation type. Hence, case insensitive matches were returned during the FTS search. Fix: === Don't convert the query string to lower case during FTS search if the collation of the indexed column is of binary type. --- mysql-test/r/fulltext.result | 72 +++++++++++++++++++++++++++++++++ mysql-test/t/fulltext.test | 41 +++++++++++++++++++ storage/innobase/fts/fts0fts.cc | 14 +++++-- storage/innobase/fts/fts0que.cc | 17 ++++++-- 4 files changed, 137 insertions(+), 7 deletions(-) diff --git a/mysql-test/r/fulltext.result b/mysql-test/r/fulltext.result index 34e567e117d1..3173bc01ddeb 100644 --- a/mysql-test/r/fulltext.result +++ b/mysql-test/r/fulltext.result @@ -695,3 +695,75 @@ CREATE TABLE q(b TEXT CHARSET latin1, fulltext(b)) engine=innodb; explain format=json SELECT 1 FROM q WHERE (SELECT MATCH(b) AGAINST ('*') FROM z); ERROR HY000: Incorrect arguments to MATCH DROP TABLE z, q; +# +# BUG#21625016: INNODB FULL TEXT CASE SENSITIVE NOT WORKING +# +CREATE TABLE t1(fld1 VARCHAR(10) COLLATE 'latin1_bin', FULLTEXT INDEX (fld1)) +ENGINE=InnoDB; +INSERT INTO t1 VALUES ('abCD'),('ABCD'); +# With the patch, case sensitive comparison is performed since +# binary collation is used. +SELECT * FROM t1 WHERE MATCH(fld1) AGAINST ('abCD' IN BOOLEAN MODE); +fld1 +abCD +SELECT * FROM t1 WHERE MATCH(fld1) AGAINST ('ABCD' IN BOOLEAN MODE); +fld1 +ABCD +SELECT * FROM t1 WHERE MATCH(fld1) AGAINST ('abCD' IN NATURAL LANGUAGE MODE); +fld1 +abCD +SELECT * FROM t1 WHERE MATCH(fld1) AGAINST ('ABCD' IN NATURAL LANGUAGE MODE); +fld1 +ABCD +# Since binary collation is not used, case insensitive comparison is +# performed. +ALTER TABLE t1 MODIFY fld1 VARCHAR(10) COLLATE 'latin1_general_cs'; +SELECT * FROM t1 WHERE MATCH(fld1) AGAINST ('abCD' IN BOOLEAN MODE); +fld1 +abCD +ABCD +SELECT * FROM t1 WHERE MATCH(fld1) AGAINST ('ABCD' IN BOOLEAN MODE); +fld1 +abCD +ABCD +SELECT * FROM t1 WHERE MATCH(fld1) AGAINST ('abCD' IN NATURAL LANGUAGE MODE); +fld1 +abCD +ABCD +SELECT * FROM t1 WHERE MATCH(fld1) AGAINST ('ABCD' IN NATURAL LANGUAGE MODE); +fld1 +abCD +ABCD +# With the patch, case sensitive comparison is performed. +ALTER TABLE t1 MODIFY fld1 VARCHAR(10) COLLATE 'utf8mb4_bin'; +SELECT * FROM t1 WHERE MATCH(fld1) AGAINST ('abCD' IN BOOLEAN MODE); +fld1 +abCD +SELECT * FROM t1 WHERE MATCH(fld1) AGAINST ('ABCD' IN BOOLEAN MODE); +fld1 +ABCD +SELECT * FROM t1 WHERE MATCH(fld1) AGAINST ('abCD' IN NATURAL LANGUAGE MODE); +fld1 +abCD +SELECT * FROM t1 WHERE MATCH(fld1) AGAINST ('ABCD' IN NATURAL LANGUAGE MODE); +fld1 +ABCD +# Test(using case insensitive collation) added for coverage +ALTER TABLE t1 MODIFY fld1 VARCHAR(10) COLLATE 'utf8mb4_general_ci'; +SELECT * FROM t1 WHERE MATCH(fld1) AGAINST ('abCD' IN BOOLEAN MODE); +fld1 +abCD +ABCD +SELECT * FROM t1 WHERE MATCH(fld1) AGAINST ('ABCD' IN BOOLEAN MODE); +fld1 +abCD +ABCD +SELECT * FROM t1 WHERE MATCH(fld1) AGAINST ('abCD' IN NATURAL LANGUAGE MODE); +fld1 +abCD +ABCD +SELECT * FROM t1 WHERE MATCH(fld1) AGAINST ('ABCD' IN NATURAL LANGUAGE MODE); +fld1 +abCD +ABCD +DROP TABLE t1; diff --git a/mysql-test/t/fulltext.test b/mysql-test/t/fulltext.test index 33f3b287679b..e756b5b4d440 100644 --- a/mysql-test/t/fulltext.test +++ b/mysql-test/t/fulltext.test @@ -646,3 +646,44 @@ SELECT 1 FROM q WHERE (SELECT MATCH(b) AGAINST ('*') FROM z); eval explain format=json $query; DROP TABLE z, q; + + +--echo # +--echo # BUG#21625016: INNODB FULL TEXT CASE SENSITIVE NOT WORKING +--echo # + +CREATE TABLE t1(fld1 VARCHAR(10) COLLATE 'latin1_bin', FULLTEXT INDEX (fld1)) +ENGINE=InnoDB; + +INSERT INTO t1 VALUES ('abCD'),('ABCD'); + +--echo # With the patch, case sensitive comparison is performed since +--echo # binary collation is used. +SELECT * FROM t1 WHERE MATCH(fld1) AGAINST ('abCD' IN BOOLEAN MODE); +SELECT * FROM t1 WHERE MATCH(fld1) AGAINST ('ABCD' IN BOOLEAN MODE); +SELECT * FROM t1 WHERE MATCH(fld1) AGAINST ('abCD' IN NATURAL LANGUAGE MODE); +SELECT * FROM t1 WHERE MATCH(fld1) AGAINST ('ABCD' IN NATURAL LANGUAGE MODE); + +--echo # Since binary collation is not used, case insensitive comparison is +--echo # performed. +ALTER TABLE t1 MODIFY fld1 VARCHAR(10) COLLATE 'latin1_general_cs'; +SELECT * FROM t1 WHERE MATCH(fld1) AGAINST ('abCD' IN BOOLEAN MODE); +SELECT * FROM t1 WHERE MATCH(fld1) AGAINST ('ABCD' IN BOOLEAN MODE); +SELECT * FROM t1 WHERE MATCH(fld1) AGAINST ('abCD' IN NATURAL LANGUAGE MODE); +SELECT * FROM t1 WHERE MATCH(fld1) AGAINST ('ABCD' IN NATURAL LANGUAGE MODE); + +--echo # With the patch, case sensitive comparison is performed. +ALTER TABLE t1 MODIFY fld1 VARCHAR(10) COLLATE 'utf8mb4_bin'; +SELECT * FROM t1 WHERE MATCH(fld1) AGAINST ('abCD' IN BOOLEAN MODE); +SELECT * FROM t1 WHERE MATCH(fld1) AGAINST ('ABCD' IN BOOLEAN MODE); +SELECT * FROM t1 WHERE MATCH(fld1) AGAINST ('abCD' IN NATURAL LANGUAGE MODE); +SELECT * FROM t1 WHERE MATCH(fld1) AGAINST ('ABCD' IN NATURAL LANGUAGE MODE); + +--echo # Test(using case insensitive collation) added for coverage +ALTER TABLE t1 MODIFY fld1 VARCHAR(10) COLLATE 'utf8mb4_general_ci'; +SELECT * FROM t1 WHERE MATCH(fld1) AGAINST ('abCD' IN BOOLEAN MODE); +SELECT * FROM t1 WHERE MATCH(fld1) AGAINST ('ABCD' IN BOOLEAN MODE); +SELECT * FROM t1 WHERE MATCH(fld1) AGAINST ('abCD' IN NATURAL LANGUAGE MODE); +SELECT * FROM t1 WHERE MATCH(fld1) AGAINST ('ABCD' IN NATURAL LANGUAGE MODE); + +DROP TABLE t1; diff --git a/storage/innobase/fts/fts0fts.cc b/storage/innobase/fts/fts0fts.cc index a29e046eb842..f3fa6e52d0d4 100644 --- a/storage/innobase/fts/fts0fts.cc +++ b/storage/innobase/fts/fts0fts.cc @@ -4804,9 +4804,17 @@ fts_process_token( t_str.f_str = static_cast( mem_heap_alloc(heap, t_str.f_len)); - newlen = innobase_fts_casedn_str( - doc->charset, (char*) str.f_str, str.f_len, - (char*) t_str.f_str, t_str.f_len); + /* For binary collations, a case sensitive search is + performed. Hence don't convert to lower case. */ + if (my_binary_compare(result_doc->charset)) { + memcpy(t_str.f_str, str.f_str, str.f_len); + t_str.f_str[str.f_len]= 0; + newlen= str.f_len; + } else { + newlen = innobase_fts_casedn_str( + doc->charset, (char*) str.f_str, str.f_len, + (char*) t_str.f_str, t_str.f_len); + } t_str.f_len = newlen; t_str.f_str[newlen] = 0; diff --git a/storage/innobase/fts/fts0que.cc b/storage/innobase/fts/fts0que.cc index fd1199ac4349..d20ff345dc60 100644 --- a/storage/innobase/fts/fts0que.cc +++ b/storage/innobase/fts/fts0que.cc @@ -3764,10 +3764,19 @@ fts_query_str_preprocess( str_len = query_len * charset->casedn_multiply + 1; str_ptr = static_cast(ut_malloc(str_len)); - *result_len = innobase_fts_casedn_str( - charset, const_cast(reinterpret_cast( - query_str)), query_len, - reinterpret_cast(str_ptr), str_len); + /* For binary collations, a case sensitive search is + performed. Hence don't convert to lower case. */ + if (my_binary_compare(charset)) { + memcpy(str_ptr, query_str, query_len); + str_ptr[query_len]= 0; + *result_len= query_len; + } else { + *result_len = innobase_fts_casedn_str( + charset, const_cast + (reinterpret_cast( query_str)), + query_len, + reinterpret_cast(str_ptr), str_len); + } ut_ad(*result_len < str_len); From 7333f16e18ea0cf8ace347fe52ab29bcd44da3df Mon Sep 17 00:00:00 2001 From: Sreeharsha Ramanavarapu Date: Thu, 5 Oct 2017 08:46:09 +0530 Subject: [PATCH 0095/1221] Bug #26838771: GCOL: INCORRECT BEHAVIOR WITH UPDATE ON FLY Issue: ------ When an UPDATE statement is using update on the fly optimization, generated column related checks are skipped. Solution: --------- On 5.7: Call validate_gc_assignment at an earlier place in Query_result_update::initialize_tables. On 8.0 and trunk: Move the call to validate_gc_assignment Sql_cmd_update::prepare_inner(). This way no separate handling is required for single and multi-table UPDATE. --- mysql-test/suite/gcol/r/gcol_update.result | 19 +++++++++++++++ mysql-test/suite/gcol/t/gcol_update.test | 27 ++++++++++++++++++++++ sql/sql_update.cc | 9 ++++---- 3 files changed, 50 insertions(+), 5 deletions(-) diff --git a/mysql-test/suite/gcol/r/gcol_update.result b/mysql-test/suite/gcol/r/gcol_update.result index 64c840b24884..e70c7004e3be 100644 --- a/mysql-test/suite/gcol/r/gcol_update.result +++ b/mysql-test/suite/gcol/r/gcol_update.result @@ -31,3 +31,22 @@ set global innodb_purge_run_now=1; set global innodb_fast_shutdown=0; # restart drop table t1; +# +# Bug #26838771: GCOL: INCORRECT BEHAVIOR WITH UPDATE ON FLY +# +CREATE TABLE t1(c1 INT); +CREATE TABLE t2(c1 INT, c2 JSON, c3 varchar(15) GENERATED ALWAYS AS +(concat(c2,_utf8mb4'x')) VIRTUAL); +CREATE TABLE t3(c1 JSON, c2 INT GENERATED ALWAYS AS ((c1 + 1)) VIRTUAL); +INSERT INTO t2(c1,c2) VALUES(1, '{"tr": "x"}'), (2, '{"tr": "x"}'); +INSERT INTO t3(c1) VALUES(CAST(7 AS JSON)); +UPDATE t3 SET c2 = 0; +ERROR HY000: The value specified for generated column 'c2' in table 't3' is not allowed. +UPDATE t3 JOIN t2 ON (t3.c1 = t2.c1) SET t3.c2 = 0; +ERROR HY000: The value specified for generated column 'c2' in table 't3' is not allowed. +UPDATE t1 RIGHT JOIN +t2 ON (t1.c1 = t2.c1), +t3 +SET t2.c2 = 'tr', t3.c2 = 0; +ERROR HY000: The value specified for generated column 'c2' in table 't3' is not allowed. +DROP TABLE t1,t2,t3; diff --git a/mysql-test/suite/gcol/t/gcol_update.test b/mysql-test/suite/gcol/t/gcol_update.test index 0a7265bebace..9075d1e5a15b 100644 --- a/mysql-test/suite/gcol/t/gcol_update.test +++ b/mysql-test/suite/gcol/t/gcol_update.test @@ -54,3 +54,30 @@ set global innodb_purge_run_now=1; set global innodb_fast_shutdown=0; --source include/restart_mysqld.inc drop table t1; + +--echo # +--echo # Bug #26838771: GCOL: INCORRECT BEHAVIOR WITH UPDATE ON FLY +--echo # + +CREATE TABLE t1(c1 INT); +CREATE TABLE t2(c1 INT, c2 JSON, c3 varchar(15) GENERATED ALWAYS AS + (concat(c2,_utf8mb4'x')) VIRTUAL); +CREATE TABLE t3(c1 JSON, c2 INT GENERATED ALWAYS AS ((c1 + 1)) VIRTUAL); + +INSERT INTO t2(c1,c2) VALUES(1, '{"tr": "x"}'), (2, '{"tr": "x"}'); +INSERT INTO t3(c1) VALUES(CAST(7 AS JSON)); + + +--error ER_NON_DEFAULT_VALUE_FOR_GENERATED_COLUMN +UPDATE t3 SET c2 = 0; + +--error ER_NON_DEFAULT_VALUE_FOR_GENERATED_COLUMN +UPDATE t3 JOIN t2 ON (t3.c1 = t2.c1) SET t3.c2 = 0; + +--error ER_NON_DEFAULT_VALUE_FOR_GENERATED_COLUMN +UPDATE t1 RIGHT JOIN + t2 ON (t1.c1 = t2.c1), + t3 +SET t2.c2 = 'tr', t3.c2 = 0; + +DROP TABLE t1,t2,t3; diff --git a/sql/sql_update.cc b/sql/sql_update.cc index 4b90112166ea..3b3694ce432a 100644 --- a/sql/sql_update.cc +++ b/sql/sql_update.cc @@ -2021,6 +2021,9 @@ bool Query_result_update::initialize_tables(JOIN *join) List temp_fields; ORDER group; Temp_table_param *tmp_param; + if (table->vfield && + validate_gc_assignment(thd, fields, values, table)) + DBUG_RETURN(0); if (thd->lex->is_ignore()) table->file->extra(HA_EXTRA_IGNORE_DUP_KEY); @@ -2080,15 +2083,11 @@ bool Query_result_update::initialize_tables(JOIN *join) if (safe_update_on_fly(thd, join->best_ref[0], table_ref, all_tables)) { table->mark_columns_needed_for_update(true/*mark_binlog_columns=true*/); - table_to_update= table; // Update table on the fly + table_to_update= table; // Update table on the fly continue; } } table->mark_columns_needed_for_update(true/*mark_binlog_columns=true*/); - - if (table->vfield && - validate_gc_assignment(thd, fields, values, table)) - DBUG_RETURN(0); /* enable uncacheable flag if we update a view with check option and check option has a subselect, otherwise, the check option From e96bebdb33db564f5dc6b8c2cdcf0d32135e7eb5 Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Tue, 3 Oct 2017 11:01:46 +0200 Subject: [PATCH 0096/1221] Bug#26612465 BUILDING WITH CMAKE 3.9.0 OR NEWER GIVES DEPRECATION WARNINGS [noclose] Patch 3 for 5.7 Backport WiX/MSI fixes to avoid LOCATION property. Change-Id: Idd7a7fd94d403b4da54e93248f8436c78cb86b36 --- packaging/WiX/CMakeLists.txt | 21 +++++++++++++++++---- packaging/WiX/configure_file.cmake | 16 ++++++++++++++++ packaging/WiX/create_msi.cmake.in | 4 ++-- 3 files changed, 35 insertions(+), 6 deletions(-) create mode 100644 packaging/WiX/configure_file.cmake diff --git a/packaging/WiX/CMakeLists.txt b/packaging/WiX/CMakeLists.txt index 4a8101174b1f..c2346cf9bc68 100644 --- a/packaging/WiX/CMakeLists.txt +++ b/packaging/WiX/CMakeLists.txt @@ -87,7 +87,7 @@ ELSE() FILE(APPEND "${CMAKE_CURRENT_BINARY_DIR}/COPYING.rtf" "\n}\n") SET(COPYING_RTF "${CMAKE_CURRENT_BINARY_DIR}/COPYING.rtf") ENDIF() -GET_TARGET_PROPERTY(WIXCA_LOCATION wixca LOCATION) +# GET_TARGET_PROPERTY(WIXCA_LOCATION wixca LOCATION) SET(CPACK_WIX_CONFIG ${CMAKE_CURRENT_SOURCE_DIR}/CPackWixConfig.cmake) SET(CPACK_WIX_INCLUDE "${CMAKE_CURRENT_BINARY_DIR}/mysql_server_extra.wxs;${CMAKE_CURRENT_SOURCE_DIR}/custom_ui.wxs") @@ -111,8 +111,20 @@ IF("${VERSION}" MATCHES "-ndb-") MESSAGE(STATUS "DISPLAY_PATCH_VERSION: ${DISPLAY_PATCH_VERSION}") ENDIF() -CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/mysql_server_extra.wxs.in - ${CMAKE_CURRENT_BINARY_DIR}/mysql_server_extra.wxs) +#CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/mysql_server_extra.wxs.in +# ${CMAKE_CURRENT_BINARY_DIR}/mysql_server_extra.wxs) + +ADD_CUSTOM_TARGET( + configure_mysql_server_extra + COMMAND ${CMAKE_COMMAND} + -DINPUT_FILE=${CMAKE_CURRENT_SOURCE_DIR}/mysql_server_extra.wxs.in + -DOUTPUT_FILE=${CMAKE_CURRENT_BINARY_DIR}/mysql_server_extra.wxs + -DWIXCA_LOCATION=$ + -DMAJOR_VERSION=${MAJOR_VERSION} + -DMINOR_VERSION=${MINOR_VERSION} + -DWixWin64=${WixWin64} + -P ${CMAKE_CURRENT_SOURCE_DIR}/configure_file.cmake + ) CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/create_msi.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/create_msi.cmake @@ -128,7 +140,8 @@ ADD_CUSTOM_TARGET( COMMAND set VS_UNICODE_OUTPUT= COMMAND ${CMAKE_COMMAND} ${CONFIG_PARAM} + -DWIXCA_LOCATION=$ -P ${CMAKE_CURRENT_BINARY_DIR}/create_msi.cmake ) ADD_DEPENDENCIES(MSI wixca) - +ADD_DEPENDENCIES(MSI configure_mysql_server_extra) diff --git a/packaging/WiX/configure_file.cmake b/packaging/WiX/configure_file.cmake new file mode 100644 index 000000000000..0f76d1b2993a --- /dev/null +++ b/packaging/WiX/configure_file.cmake @@ -0,0 +1,16 @@ +# Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. +# +# 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 + +CONFIGURE_FILE(${INPUT_FILE} ${OUTPUT_FILE}) diff --git a/packaging/WiX/create_msi.cmake.in b/packaging/WiX/create_msi.cmake.in index 1c62036979cb..60aaa7286bc4 100644 --- a/packaging/WiX/create_msi.cmake.in +++ b/packaging/WiX/create_msi.cmake.in @@ -32,7 +32,7 @@ IF("${VERSION}" MATCHES "-ndb-") ENDIF() SET(CMAKE_SIZEOF_VOID_P @CMAKE_SIZEOF_VOID_P@) SET(MANUFACTURER "@MANUFACTURER@") -SET(WIXCA_LOCATION "@WIXCA_LOCATION@") +# SET(WIXCA_LOCATION "@WIXCA_LOCATION@") SET(COPYING_RTF "@COPYING_RTF@") SET(CPACK_WIX_CONFIG "@CPACK_WIX_CONFIG@") SET(CPACK_WIX_INCLUDE "@CPACK_WIX_INCLUDE@") @@ -431,4 +431,4 @@ EXECUTE_PROCESS( IF(LIGHT_RESULT) MESSAGE(FATAL_ERROR "ERROR: can't run light") -ENDIF() \ No newline at end of file +ENDIF() From 63077525866bc0b40b314cf6aca99f1b48b0da78 Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Thu, 28 Sep 2017 09:57:54 +0200 Subject: [PATCH 0097/1221] Bug#26665217 BUILD WITH WITHOUT_SERVER MAY TRY LINK PLUGIN WITH LIBMYSQLD The authentication_ldap_sasl_client plugin is a client-side plugin, and should not be linked with server-side utilities. Add a new argument CLIENT_ONLY to MYSQL_ADD_PLUGIN Details: client/mysql.cc Fix some 'may be used uninitialized' warnings. mysql-test/lib/My/SafeProcess/CMakeLists.txt Remove obsolete handling of stlport, this can no longer be used for building the server. mysys/my_conio.c mysys/my_windac.c mysys/my_winfile.c Explicitly #include "my_sys.h" which is needed in order to build. my_sys.h is implicitly included by "mysys_priv.h" in a default build, but not in a client-build, which does not have HAVE_PSI_INTERFACE defined. storage/ndb/mcc/CMakeLists.txt Skip building for client-only build, as this is part of NDB server. storage/ndb/src/CMakeLists.txt NDBCLIENT_SYSTEM_LIBS can be empty on some platforms, so check contents before doing LIST(REMOVE_DUPLICATES) storage/ndb/src/mgmsrv/ConfigInfo.cpp Insert whitespace between text literals and preprocessor tokens. Modern compilers will otherwise reject to do the token concatenation. Change-Id: I0d993b131afe2f4ccbc5b1bedfa3da071d99f6a8 --- client/mysql.cc | 3 +- cmake/plugin.cmake | 14 ++-- configure.cmake | 5 +- libmysql/CMakeLists.txt | 2 +- libmysql/authentication_ldap/CMakeLists.txt | 2 +- libservices/CMakeLists.txt | 7 +- mysql-test/lib/My/SafeProcess/CMakeLists.txt | 13 +--- mysys/my_conio.c | 3 +- mysys/my_windac.c | 3 +- mysys/my_winfile.c | 3 +- storage/ndb/mcc/CMakeLists.txt | 8 ++- storage/ndb/src/CMakeLists.txt | 4 +- storage/ndb/src/mgmsrv/ConfigInfo.cpp | 76 ++++++++++---------- 13 files changed, 77 insertions(+), 66 deletions(-) diff --git a/client/mysql.cc b/client/mysql.cc index 37191a5ae3d0..55fed58861af 100644 --- a/client/mysql.cc +++ b/client/mysql.cc @@ -1435,7 +1435,8 @@ int main(int argc,char *argv[]) "statement.\n"); put_info(buff,INFO_INFO); - uint protocol, ssl_mode; + uint protocol= MYSQL_PROTOCOL_DEFAULT; + uint ssl_mode= 0; if (!mysql_get_option(&mysql, MYSQL_OPT_PROTOCOL, &protocol) && !mysql_get_option(&mysql, MYSQL_OPT_SSL_MODE, &ssl_mode)) { diff --git a/cmake/plugin.cmake b/cmake/plugin.cmake index 9912826ae04c..51cdc1314f4f 100644 --- a/cmake/plugin.cmake +++ b/cmake/plugin.cmake @@ -1,4 +1,4 @@ -# Copyright (c) 2009, 2016, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2009, 2017, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -52,7 +52,7 @@ ENDMACRO() MACRO(MYSQL_ADD_PLUGIN) MYSQL_PARSE_ARGUMENTS(ARG "LINK_LIBRARIES;DEPENDENCIES;MODULE_OUTPUT_NAME;STATIC_OUTPUT_NAME" - "STORAGE_ENGINE;STATIC_ONLY;MODULE_ONLY;MANDATORY;DEFAULT;DISABLED;NOT_FOR_EMBEDDED;RECOMPILE_FOR_EMBEDDED;TEST_ONLY" + "STORAGE_ENGINE;STATIC_ONLY;MODULE_ONLY;CLIENT_ONLY;MANDATORY;DEFAULT;DISABLED;NOT_FOR_EMBEDDED;RECOMPILE_FOR_EMBEDDED;TEST_ONLY" ${ARGN} ) @@ -200,7 +200,9 @@ MACRO(MYSQL_ADD_PLUGIN) DTRACE_INSTRUMENT(${target}) SET_TARGET_PROPERTIES (${target} PROPERTIES PREFIX "" COMPILE_DEFINITIONS "MYSQL_DYNAMIC_PLUGIN") - TARGET_LINK_LIBRARIES (${target} mysqlservices) + IF(NOT ARG_CLIENT_ONLY) + TARGET_LINK_LIBRARIES (${target} mysqlservices) + ENDIF() GET_TARGET_PROPERTY(LINK_FLAGS ${target} LINK_FLAGS) IF(NOT LINK_FLAGS) @@ -219,8 +221,10 @@ MACRO(MYSQL_ADD_PLUGIN) # Thus we skip TARGET_LINK_LIBRARIES on Linux, as it would only generate # an additional dependency. # Use MYSQL_PLUGIN_IMPORT for static data symbols to be exported. - IF(NOT CMAKE_SYSTEM_NAME STREQUAL "Linux") - TARGET_LINK_LIBRARIES (${target} mysqld ${ARG_LINK_LIBRARIES}) + IF(NOT ARG_CLIENT_ONLY) + IF(WIN32 OR APPLE) + TARGET_LINK_LIBRARIES (${target} mysqld ${ARG_LINK_LIBRARIES}) + ENDIF() ENDIF() ADD_DEPENDENCIES(${target} GenError ${ARG_DEPENDENCIES}) diff --git a/configure.cmake b/configure.cmake index 1d98347acd3a..4bbfcca658cc 100644 --- a/configure.cmake +++ b/configure.cmake @@ -80,6 +80,7 @@ IF(CMAKE_SYSTEM_NAME MATCHES "SunOS" AND MESSAGE(WARNING "You should upgrade to -std=c++03") ELSE() # cmake/os/SunOS.cmake has done version check + # /opt/solarisstudio12.4/bin/CC has CC_MINOR_VERSION == 13 IF(DEFINED CC_MINOR_VERSION AND CC_MINOR_VERSION GREATER 12) MESSAGE("Adding -std=c++03") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++03") @@ -88,9 +89,11 @@ IF(CMAKE_SYSTEM_NAME MATCHES "SunOS" AND ENDIF() # The default C++ library for SunPro is really old, and not standards compliant. -# http://www.oracle.com/technetwork/server-storage/solaris10/cmp-stlport-libcstd-142559.html +# http://www.oracle.com/technetwork/server-storage/solaris/cmp-stlport-libcstd-142559.html # Use stlport rather than Rogue Wave, # unless otherwise specified on command line. +# This does *not* work for building the server, only for client libraries, +# i.e. -DWITHOUT_SERVER=1 IF(CMAKE_SYSTEM_NAME MATCHES "SunOS") IF(CMAKE_CXX_COMPILER_ID MATCHES "SunPro") IF(CMAKE_CXX_FLAGS MATCHES "-std=") diff --git a/libmysql/CMakeLists.txt b/libmysql/CMakeLists.txt index 07f1d0085b60..f663e11379f9 100644 --- a/libmysql/CMakeLists.txt +++ b/libmysql/CMakeLists.txt @@ -257,7 +257,7 @@ IF(UNIX) ENDMACRO() ENDIF() -# In our special "mixed" builds, also install libstlport which will +# I we build client-only, we may be using libstlport which will # be injected into the build tree by the Sun Studio part of the build. IF(CMAKE_SYSTEM_NAME MATCHES "SunOS" AND DEFINED ENV{PB2WORKDIR}) diff --git a/libmysql/authentication_ldap/CMakeLists.txt b/libmysql/authentication_ldap/CMakeLists.txt index eddf108a0baf..5ae3b15d4be9 100644 --- a/libmysql/authentication_ldap/CMakeLists.txt +++ b/libmysql/authentication_ldap/CMakeLists.txt @@ -55,5 +55,5 @@ ENDIF () MYSQL_ADD_PLUGIN(authentication_ldap_sasl_client auth_ldap_sasl_client.cc log_client.cc LINK_LIBRARIES ${SASL_LIBRARY} - MODULE_ONLY + CLIENT_ONLY MODULE_ONLY MODULE_OUTPUT_NAME "authentication_ldap_sasl_client") diff --git a/libservices/CMakeLists.txt b/libservices/CMakeLists.txt index a2bf28a95785..35a50b93af31 100644 --- a/libservices/CMakeLists.txt +++ b/libservices/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2006, 2016, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 2017, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -13,6 +13,11 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +IF(WITHOUT_SERVER) + MESSAGE(STATUS "The mysqlservices library is for server plugins only") + RETURN() +ENDIF() + INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include) SET(MYSQLSERVICES_SOURCES diff --git a/mysql-test/lib/My/SafeProcess/CMakeLists.txt b/mysql-test/lib/My/SafeProcess/CMakeLists.txt index ceead7830a4e..1381d8d4eadd 100644 --- a/mysql-test/lib/My/SafeProcess/CMakeLists.txt +++ b/mysql-test/lib/My/SafeProcess/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2006, 2014, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 2017, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -22,17 +22,6 @@ SET(INSTALL_ARGS COMPONENT Test ) -# Remove linking with stlport, it's not needed and won't link correctly -# Also remove useless -R link options -IF(CMAKE_SYSTEM_NAME MATCHES "SunOS") - IF(CMAKE_CXX_COMPILER_ID MATCHES "SunPro") - STRING(REPLACE " -library=stlport4" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) - STRING(REPLACE " -library=stlport4" "" CMAKE_CXX_FLAGS_DEBUG ${CMAKE_CXX_FLAGS_DEBUG}) - STRING(REPLACE " -library=stlport4" "" CMAKE_CXX_FLAGS_RELWITHDEBINFO ${CMAKE_CXX_FLAGS_RELWITHDEBINFO}) - STRING(REGEX REPLACE " -R[^ ]+" "" CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS}") - ENDIF() -ENDIF() - IF (WIN32) MYSQL_ADD_EXECUTABLE(my_safe_process safe_process_win.cc ${INSTALL_ARGS}) MYSQL_ADD_EXECUTABLE(my_safe_kill safe_kill_win.cc ${INSTALL_ARGS}) diff --git a/mysys/my_conio.c b/mysys/my_conio.c index 2c8e58fe516b..440c142e41dd 100644 --- a/mysys/my_conio.c +++ b/mysys/my_conio.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -15,6 +15,7 @@ #include "mysys_priv.h" +#include "my_sys.h" #ifdef _WIN32 diff --git a/mysys/my_windac.c b/mysys/my_windac.c index 137d44f64495..affc37b6b5e7 100644 --- a/mysys/my_windac.c +++ b/mysys/my_windac.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -14,6 +14,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "mysys_priv.h" +#include "my_sys.h" #include "m_string.h" #ifdef _WIN32 diff --git a/mysys/my_winfile.c b/mysys/my_winfile.c index a5c13a322d0e..293a916a50ca 100644 --- a/mysys/my_winfile.c +++ b/mysys/my_winfile.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2008, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -47,6 +47,7 @@ #ifdef _WIN32 #include "mysys_priv.h" +#include "my_sys.h" #include "my_thread_local.h" #include #include diff --git a/storage/ndb/mcc/CMakeLists.txt b/storage/ndb/mcc/CMakeLists.txt index a5815a203898..b30201d1bb8f 100644 --- a/storage/ndb/mcc/CMakeLists.txt +++ b/storage/ndb/mcc/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2012, 2013 Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2012, 2017 Oracle and/or its affiliates. All rights reserved. # # 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 @@ -20,7 +20,11 @@ if(NOT DEFAULT_MYSQL_HOME) enable_testing() endif() -option(WITH_MCC "Include MySQL Cluster Configurator" ON) +IF(WITHOUT_SERVER) + option(WITH_MCC "Include MySQL Cluster Configurator" OFF) +ELSE() + option(WITH_MCC "Include MySQL Cluster Configurator" ON) +ENDIF() if(NOT WITH_MCC) message(STATUS "Skipping mcc") diff --git a/storage/ndb/src/CMakeLists.txt b/storage/ndb/src/CMakeLists.txt index ab0f662bd0ae..4698b9c460aa 100644 --- a/storage/ndb/src/CMakeLists.txt +++ b/storage/ndb/src/CMakeLists.txt @@ -129,7 +129,9 @@ ELSE() ENDFOREACH() ENDFOREACH() - LIST(REMOVE_DUPLICATES NDBCLIENT_SYSTEM_LIBS) + IF(NDBCLIENT_SYSTEM_LIBS) + LIST(REMOVE_DUPLICATES NDBCLIENT_SYSTEM_LIBS) + ENDIF() MESSAGE(STATUS "System libs used by ndbclient_so: ${NDBCLIENT_SYSTEM_LIBS}") TARGET_LINK_LIBRARIES(ndbclient_so LINK_INTERFACE_LIBRARIES ${NDBCLIENT_SYSTEM_LIBS}) diff --git a/storage/ndb/src/mgmsrv/ConfigInfo.cpp b/storage/ndb/src/mgmsrv/ConfigInfo.cpp index 2576118e3398..45f4fc80e4b6 100644 --- a/storage/ndb/src/mgmsrv/ConfigInfo.cpp +++ b/storage/ndb/src/mgmsrv/ConfigInfo.cpp @@ -1,5 +1,5 @@ /* - Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -356,7 +356,7 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = { CFG_SYS_PRIMARY_MGM_NODE, "PrimaryMGMNode", "SYSTEM", - "Node id of Primary "MGM_TOKEN_PRINT" node", + "Node id of Primary " MGM_TOKEN_PRINT " node", ConfigInfo::CI_USED, false, ConfigInfo::CI_INT, @@ -481,7 +481,7 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = { CFG_NODE_ID, "NodeId", DB_TOKEN, - "Number identifying the database node ("DB_TOKEN_PRINT")", + "Number identifying the database node (" DB_TOKEN_PRINT ")", ConfigInfo::CI_USED, false, ConfigInfo::CI_INT, @@ -578,7 +578,7 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = { CFG_DB_NO_INDEX_OPS, "MaxNoOfConcurrentIndexOperations", DB_TOKEN, - "Total number of index operations that can execute simultaneously on one "DB_TOKEN_PRINT" node", + "Total number of index operations that can execute simultaneously on one " DB_TOKEN_PRINT " node", ConfigInfo::CI_USED, false, ConfigInfo::CI_INT, @@ -603,7 +603,7 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = { CFG_DB_NO_TRIGGER_OPS, "MaxNoOfFiredTriggers", DB_TOKEN, - "Total number of triggers that can fire simultaneously in one "DB_TOKEN_PRINT" node", + "Total number of triggers that can fire simultaneously in one " DB_TOKEN_PRINT " node", ConfigInfo::CI_USED, false, ConfigInfo::CI_INT, @@ -747,7 +747,7 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = { CFG_DB_STOP_ON_ERROR, "StopOnError", DB_TOKEN, - "If set to N, "DB_TOKEN_PRINT" automatically restarts/recovers in case of node failure", + "If set to N, " DB_TOKEN_PRINT " automatically restarts/recovers in case of node failure", ConfigInfo::CI_USED, 0, ConfigInfo::CI_BOOL, @@ -832,7 +832,7 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = { CFG_DB_NO_TRANSACTIONS, "MaxNoOfConcurrentTransactions", DB_TOKEN, - "Max number of transaction executing concurrently on the "DB_TOKEN_PRINT" node", + "Max number of transaction executing concurrently on the " DB_TOKEN_PRINT " node", ConfigInfo::CI_USED, false, ConfigInfo::CI_INT, @@ -844,7 +844,7 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = { CFG_DB_NO_SCANS, "MaxNoOfConcurrentScans", DB_TOKEN, - "Max number of scans executing concurrently on the "DB_TOKEN_PRINT" node", + "Max number of scans executing concurrently on the " DB_TOKEN_PRINT " node", ConfigInfo::CI_USED, false, ConfigInfo::CI_INT, @@ -856,7 +856,7 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = { CFG_DB_TRANS_BUFFER_MEM, "TransactionBufferMemory", DB_TOKEN, - "Dynamic buffer space (in bytes) for key and attribute data allocated for each "DB_TOKEN_PRINT" node", + "Dynamic buffer space (in bytes) for key and attribute data allocated for each " DB_TOKEN_PRINT " node", ConfigInfo::CI_USED, false, ConfigInfo::CI_INT, @@ -868,7 +868,7 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = { CFG_DB_INDEX_MEM, "IndexMemory", DB_TOKEN, - "Number bytes on each "DB_TOKEN_PRINT" node allocated for storing indexes", + "Number bytes on each " DB_TOKEN_PRINT " node allocated for storing indexes", ConfigInfo::CI_USED, false, ConfigInfo::CI_INT64, @@ -880,7 +880,7 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = { CFG_DB_DATA_MEM, "DataMemory", DB_TOKEN, - "Number bytes on each "DB_TOKEN_PRINT" node allocated for storing data", + "Number bytes on each " DB_TOKEN_PRINT " node allocated for storing data", ConfigInfo::CI_USED, false, ConfigInfo::CI_INT64, @@ -892,7 +892,7 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = { CFG_DB_UNDO_INDEX_BUFFER, "UndoIndexBuffer", DB_TOKEN, - "Number bytes on each "DB_TOKEN_PRINT" node allocated for writing UNDO logs for index part", + "Number bytes on each " DB_TOKEN_PRINT " node allocated for writing UNDO logs for index part", ConfigInfo::CI_USED, false, ConfigInfo::CI_INT, @@ -904,7 +904,7 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = { CFG_DB_UNDO_DATA_BUFFER, "UndoDataBuffer", DB_TOKEN, - "Number bytes on each "DB_TOKEN_PRINT" node allocated for writing UNDO logs for data part", + "Number bytes on each " DB_TOKEN_PRINT " node allocated for writing UNDO logs for data part", ConfigInfo::CI_USED, false, ConfigInfo::CI_INT, @@ -916,7 +916,7 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = { CFG_DB_REDO_BUFFER, "RedoBuffer", DB_TOKEN, - "Number bytes on each "DB_TOKEN_PRINT" node allocated for writing REDO logs", + "Number bytes on each " DB_TOKEN_PRINT " node allocated for writing REDO logs", ConfigInfo::CI_USED, false, ConfigInfo::CI_INT, @@ -928,7 +928,7 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = { CFG_DB_LONG_SIGNAL_BUFFER, "LongMessageBuffer", DB_TOKEN, - "Number bytes on each "DB_TOKEN_PRINT" node allocated for internal long messages", + "Number bytes on each " DB_TOKEN_PRINT " node allocated for internal long messages", ConfigInfo::CI_USED, false, ConfigInfo::CI_INT, @@ -940,7 +940,7 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = { CFG_DB_DISK_PAGE_BUFFER_MEMORY, "DiskPageBufferMemory", DB_TOKEN, - "Number bytes on each "DB_TOKEN_PRINT" node allocated for disk page buffer cache", + "Number bytes on each " DB_TOKEN_PRINT " node allocated for disk page buffer cache", ConfigInfo::CI_USED, false, ConfigInfo::CI_INT64, @@ -952,7 +952,7 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = { CFG_DB_SGA, "SharedGlobalMemory", DB_TOKEN, - "Total number bytes on each "DB_TOKEN_PRINT" node allocated for any use", + "Total number bytes on each " DB_TOKEN_PRINT " node allocated for any use", ConfigInfo::CI_USED, false, ConfigInfo::CI_INT64, @@ -1016,7 +1016,7 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = { CFG_DB_HEARTBEAT_INTERVAL, "HeartbeatIntervalDbDb", DB_TOKEN, - "Time between "DB_TOKEN_PRINT"-"DB_TOKEN_PRINT" heartbeats. "DB_TOKEN_PRINT" considered dead after 3 missed HBs", + "Time between " DB_TOKEN_PRINT "-" DB_TOKEN_PRINT " heartbeats. " DB_TOKEN_PRINT " considered dead after 3 missed HBs", ConfigInfo::CI_USED, 0, ConfigInfo::CI_INT, @@ -1032,7 +1032,7 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = { CFG_DB_CONNECT_CHECK_DELAY, "ConnectCheckIntervalDelay", DB_TOKEN, - "Time between "DB_TOKEN_PRINT" connectivity check stages. "DB_TOKEN_PRINT" considered suspect after 1 and dead after 2 intervals.", + "Time between " DB_TOKEN_PRINT " connectivity check stages. " DB_TOKEN_PRINT " considered suspect after 1 and dead after 2 intervals.", ConfigInfo::CI_USED, 0, ConfigInfo::CI_INT, @@ -1044,7 +1044,7 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = { CFG_DB_API_HEARTBEAT_INTERVAL, "HeartbeatIntervalDbApi", DB_TOKEN, - "Time between "API_TOKEN_PRINT"-"DB_TOKEN_PRINT" heartbeats. "API_TOKEN_PRINT" connection closed after 3 missed HBs", + "Time between " API_TOKEN_PRINT "-" DB_TOKEN_PRINT " heartbeats. " API_TOKEN_PRINT " connection closed after 3 missed HBs", ConfigInfo::CI_USED, 0, ConfigInfo::CI_INT, @@ -1148,7 +1148,7 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = { CFG_DB_NO_REDOLOG_PARTS, "NoOfFragmentLogParts", DB_TOKEN, - "Number of file groups of redo log files belonging to "DB_TOKEN_PRINT" node", + "Number of file groups of redo log files belonging to " DB_TOKEN_PRINT " node", ConfigInfo::CI_USED, CI_RESTART_INITIAL, ConfigInfo::CI_INT, @@ -1161,7 +1161,7 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = { CFG_DB_NO_REDOLOG_FILES, "NoOfFragmentLogFiles", DB_TOKEN, - "No of Redo log files in each of the file group belonging to "DB_TOKEN_PRINT" node", + "No of Redo log files in each of the file group belonging to " DB_TOKEN_PRINT " node", ConfigInfo::CI_USED, CI_RESTART_INITIAL, ConfigInfo::CI_INT, @@ -1208,7 +1208,7 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = { CFG_DB_MAX_OPEN_FILES, "MaxNoOfOpenFiles", DB_TOKEN, - "Max number of files open per "DB_TOKEN_PRINT" node.(One thread is created per file)", + "Max number of files open per " DB_TOKEN_PRINT " node.(One thread is created per file)", ConfigInfo::CI_USED, false, ConfigInfo::CI_INT, @@ -1220,7 +1220,7 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = { CFG_DB_INITIAL_OPEN_FILES, "InitialNoOfOpenFiles", DB_TOKEN, - "Initial number of files open per "DB_TOKEN_PRINT" node.(One thread is created per file)", + "Initial number of files open per " DB_TOKEN_PRINT " node.(One thread is created per file)", ConfigInfo::CI_USED, false, ConfigInfo::CI_INT, @@ -1390,7 +1390,7 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = { CFG_DB_FILESYSTEM_PATH, "FileSystemPath", DB_TOKEN, - "Path to directory where the "DB_TOKEN_PRINT" node stores its data (directory must exist)", + "Path to directory where the " DB_TOKEN_PRINT " node stores its data (directory must exist)", ConfigInfo::CI_USED, CI_CHECK_WRITABLE | CI_RESTART_INITIAL, ConfigInfo::CI_STRING, @@ -1905,7 +1905,7 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = { CFG_DB_DD_FILESYSTEM_PATH, "FileSystemPathDD", DB_TOKEN, - "Path to directory where the "DB_TOKEN_PRINT" node stores its disk-data/undo-files", + "Path to directory where the " DB_TOKEN_PRINT " node stores its disk-data/undo-files", ConfigInfo::CI_USED, CI_CHECK_WRITABLE | CI_RESTART_INITIAL, ConfigInfo::CI_STRING, @@ -1916,7 +1916,7 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = { CFG_DB_DD_DATAFILE_PATH, "FileSystemPathDataFiles", DB_TOKEN, - "Path to directory where the "DB_TOKEN_PRINT" node stores its disk-data-files", + "Path to directory where the " DB_TOKEN_PRINT " node stores its disk-data-files", ConfigInfo::CI_USED, CI_CHECK_WRITABLE | CI_RESTART_INITIAL, ConfigInfo::CI_STRING, @@ -1927,7 +1927,7 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = { CFG_DB_DD_UNDOFILE_PATH, "FileSystemPathUndoFiles", DB_TOKEN, - "Path to directory where the "DB_TOKEN_PRINT" node stores its disk-undo-files", + "Path to directory where the " DB_TOKEN_PRINT " node stores its disk-undo-files", ConfigInfo::CI_USED, CI_CHECK_WRITABLE | CI_RESTART_INITIAL, ConfigInfo::CI_STRING, @@ -2446,7 +2446,7 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = { CFG_NODE_ID, "NodeId", API_TOKEN, - "Number identifying application node ("API_TOKEN_PRINT")", + "Number identifying application node (" API_TOKEN_PRINT ")", ConfigInfo::CI_USED, false, ConfigInfo::CI_INT, @@ -2469,7 +2469,7 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = { CFG_NODE_ARBIT_RANK, "ArbitrationRank", API_TOKEN, - "If 0, then "API_TOKEN_PRINT" is not arbitrator. Kernel selects arbitrators in order 1, 2", + "If 0, then " API_TOKEN_PRINT " is not arbitrator. Kernel selects arbitrators in order 1, 2", ConfigInfo::CI_USED, false, ConfigInfo::CI_INT, @@ -2744,7 +2744,7 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = { CFG_NODE_ID, "NodeId", MGM_TOKEN, - "Number identifying the management server node ("MGM_TOKEN_PRINT")", + "Number identifying the management server node (" MGM_TOKEN_PRINT ")", ConfigInfo::CI_USED, false, ConfigInfo::CI_INT, @@ -2814,7 +2814,7 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = { CFG_NODE_ARBIT_RANK, "ArbitrationRank", MGM_TOKEN, - "If 0, then "MGM_TOKEN_PRINT" is not arbitrator. Kernel selects arbitrators in order 1, 2", + "If 0, then " MGM_TOKEN_PRINT " is not arbitrator. Kernel selects arbitrators in order 1, 2", ConfigInfo::CI_USED, false, ConfigInfo::CI_INT, @@ -2956,7 +2956,7 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = { CFG_CONNECTION_NODE_1, "NodeId1", "TCP", - "Id of node ("DB_TOKEN_PRINT", "API_TOKEN_PRINT" or "MGM_TOKEN_PRINT") on one side of the connection", + "Id of node (" DB_TOKEN_PRINT ", " API_TOKEN_PRINT " or " MGM_TOKEN_PRINT ") on one side of the connection", ConfigInfo::CI_USED, false, ConfigInfo::CI_STRING, @@ -2967,7 +2967,7 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = { CFG_CONNECTION_NODE_2, "NodeId2", "TCP", - "Id of node ("DB_TOKEN_PRINT", "API_TOKEN_PRINT" or "MGM_TOKEN_PRINT") on one side of the connection", + "Id of node (" DB_TOKEN_PRINT ", " API_TOKEN_PRINT " or " MGM_TOKEN_PRINT ") on one side of the connection", ConfigInfo::CI_USED, false, ConfigInfo::CI_STRING, @@ -3218,7 +3218,7 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = { CFG_CONNECTION_NODE_1, "NodeId1", "SHM", - "Id of node ("DB_TOKEN_PRINT", "API_TOKEN_PRINT" or "MGM_TOKEN_PRINT") on one side of the connection", + "Id of node (" DB_TOKEN_PRINT ", " API_TOKEN_PRINT " or " MGM_TOKEN_PRINT ") on one side of the connection", ConfigInfo::CI_EXPERIMENTAL, false, ConfigInfo::CI_STRING, @@ -3229,7 +3229,7 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = { CFG_CONNECTION_NODE_2, "NodeId2", "SHM", - "Id of node ("DB_TOKEN_PRINT", "API_TOKEN_PRINT" or "MGM_TOKEN_PRINT") on one side of the connection", + "Id of node (" DB_TOKEN_PRINT ", " API_TOKEN_PRINT " or " MGM_TOKEN_PRINT ") on one side of the connection", ConfigInfo::CI_EXPERIMENTAL, false, ConfigInfo::CI_STRING, @@ -3362,7 +3362,7 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = { CFG_CONNECTION_NODE_1, "NodeId1", "SCI", - "Id of node ("DB_TOKEN_PRINT", "API_TOKEN_PRINT" or "MGM_TOKEN_PRINT") on one side of the connection", + "Id of node (" DB_TOKEN_PRINT ", " API_TOKEN_PRINT " or " MGM_TOKEN_PRINT ") on one side of the connection", ConfigInfo::CI_EXPERIMENTAL, false, ConfigInfo::CI_STRING, @@ -3373,7 +3373,7 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = { CFG_CONNECTION_NODE_2, "NodeId2", "SCI", - "Id of node ("DB_TOKEN_PRINT", "API_TOKEN_PRINT" or "MGM_TOKEN_PRINT") on one side of the connection", + "Id of node (" DB_TOKEN_PRINT ", " API_TOKEN_PRINT " or " MGM_TOKEN_PRINT ") on one side of the connection", ConfigInfo::CI_EXPERIMENTAL, false, ConfigInfo::CI_STRING, From ffdf388df94b240757af3a546efb2a035f2d41d3 Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Thu, 5 Oct 2017 13:25:20 +0200 Subject: [PATCH 0098/1221] Bug#26918439 ROW0SEL.CC:5178:32 ERROR: ISO C++ FORBIDS COMPARISON BETWEEN POINTER AND INTEGE prebuilt->idx_cond is a pointer, so compare it to NULL rather than false. Change-Id: Id01bda87fc921d0d595e07f9a1d11151e723618e --- storage/innobase/row/row0sel.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage/innobase/row/row0sel.cc b/storage/innobase/row/row0sel.cc index ffc059eed1be..0e37c3df6f29 100644 --- a/storage/innobase/row/row0sel.cc +++ b/storage/innobase/row/row0sel.cc @@ -5193,7 +5193,7 @@ row_search_mvcc( reporting due to search views etc. */ if (prev_rec != NULL && prebuilt->m_mysql_handler->end_range != NULL - && prebuilt->idx_cond == false && end_loop >= 100) { + && prebuilt->idx_cond == NULL && end_loop >= 100) { dict_index_t* key_index = prebuilt->index; bool clust_templ_for_sec = false; From 7f9d06b6005b51a9edc8e31587b0f57c677dd162 Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Thu, 5 Oct 2017 14:03:43 +0200 Subject: [PATCH 0099/1221] two trivial zero-initializations, to avoid "may be used unitialized" warnings Change-Id: I04de95d07e08d7949dcb6e8c347b2f79f780b6c3 --- sql/spatial.cc | 4 ++-- storage/innobase/row/row0sel.cc | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sql/spatial.cc b/sql/spatial.cc index cbdae6e6f04c..a4ea75e848d2 100644 --- a/sql/spatial.cc +++ b/sql/spatial.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2002, 2016, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2002, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -3076,7 +3076,7 @@ bool Gis_multi_polygon::get_mbr(MBR *mbr, wkb_parser *wkb) const while (n_polygons--) { - uint32 n_linear_rings; + uint32 n_linear_rings= 0; if (wkb->skip_wkb_header() || wkb->scan_non_zero_uint4(&n_linear_rings)) return true; diff --git a/storage/innobase/row/row0sel.cc b/storage/innobase/row/row0sel.cc index 0e37c3df6f29..4e740d84ac6c 100644 --- a/storage/innobase/row/row0sel.cc +++ b/storage/innobase/row/row0sel.cc @@ -3094,7 +3094,7 @@ row_sel_store_mysql_field_func( const byte* data; ulint len; - ulint clust_field_no; + ulint clust_field_no = 0; bool clust_templ_for_sec = (sec_field_no != ULINT_UNDEFINED); ut_ad(prebuilt->default_rec); From 219c900ef3512699e60e5e67095bb3e72ed24a79 Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Thu, 5 Oct 2017 10:47:07 -0700 Subject: [PATCH 0100/1221] TDB-80 : TDB-76 introduced regression in mtr tests - Re-recorded tests to pick up new warning when unrecognized ROW_FORMAT is passed to TokuDB - Since this change requires the change for TDB-76 in order to test properly and GA has not yet advanced past the TDB-76 change, this will be cherry picked forward to 5.7 instead of merged --- mysql-test/suite/tokudb.alter_table/r/null_bytes_add_key.result | 2 ++ .../suite/tokudb.alter_table/r/null_bytes_col_rename.result | 2 ++ .../suite/tokudb.alter_table/r/null_bytes_drop_default.result | 2 ++ .../suite/tokudb.alter_table/r/null_bytes_drop_key.result | 2 ++ 4 files changed, 8 insertions(+) diff --git a/mysql-test/suite/tokudb.alter_table/r/null_bytes_add_key.result b/mysql-test/suite/tokudb.alter_table/r/null_bytes_add_key.result index 687c60e4e055..e81bd96d15a9 100644 --- a/mysql-test/suite/tokudb.alter_table/r/null_bytes_add_key.result +++ b/mysql-test/suite/tokudb.alter_table/r/null_bytes_add_key.result @@ -43,6 +43,8 @@ Warnings: Warning 1265 Data truncated for column 'c19' at row 1 UPDATE t SET c27=0; ALTER TABLE t ROW_FORMAT=FIXED KEY_BLOCK_SIZE=1; +Warnings: +Warning 1478 TokuDB: invalid ROW_FORMAT specifier. UPDATE t SET c27=0; set tokudb_disable_hot_alter=0; set tokudb_disable_slow_alter=1; diff --git a/mysql-test/suite/tokudb.alter_table/r/null_bytes_col_rename.result b/mysql-test/suite/tokudb.alter_table/r/null_bytes_col_rename.result index 05895bf4b76a..c1d3b7e72dd9 100644 --- a/mysql-test/suite/tokudb.alter_table/r/null_bytes_col_rename.result +++ b/mysql-test/suite/tokudb.alter_table/r/null_bytes_col_rename.result @@ -43,6 +43,8 @@ Warnings: Warning 1265 Data truncated for column 'c19' at row 1 UPDATE t SET c27=0; ALTER TABLE t ROW_FORMAT=FIXED KEY_BLOCK_SIZE=1; +Warnings: +Warning 1478 TokuDB: invalid ROW_FORMAT specifier. UPDATE t SET c27=0; set tokudb_disable_hot_alter=0; set tokudb_disable_slow_alter=1; diff --git a/mysql-test/suite/tokudb.alter_table/r/null_bytes_drop_default.result b/mysql-test/suite/tokudb.alter_table/r/null_bytes_drop_default.result index ae5249261950..f4cd3183b1e9 100644 --- a/mysql-test/suite/tokudb.alter_table/r/null_bytes_drop_default.result +++ b/mysql-test/suite/tokudb.alter_table/r/null_bytes_drop_default.result @@ -43,6 +43,8 @@ Warnings: Warning 1265 Data truncated for column 'c19' at row 1 UPDATE t SET c27=0; ALTER TABLE t ROW_FORMAT=FIXED KEY_BLOCK_SIZE=1; +Warnings: +Warning 1478 TokuDB: invalid ROW_FORMAT specifier. UPDATE t SET c27=0; set tokudb_disable_hot_alter=0; set tokudb_disable_slow_alter=1; diff --git a/mysql-test/suite/tokudb.alter_table/r/null_bytes_drop_key.result b/mysql-test/suite/tokudb.alter_table/r/null_bytes_drop_key.result index c209c80b4bbe..88aaad242261 100644 --- a/mysql-test/suite/tokudb.alter_table/r/null_bytes_drop_key.result +++ b/mysql-test/suite/tokudb.alter_table/r/null_bytes_drop_key.result @@ -45,6 +45,8 @@ UPDATE t SET c27=0; ALTER TABLE t ADD KEY (c25); UPDATE t SET c27=0; ALTER TABLE t ROW_FORMAT=FIXED KEY_BLOCK_SIZE=1; +Warnings: +Warning 1478 TokuDB: invalid ROW_FORMAT specifier. UPDATE t SET c27=0; set tokudb_disable_hot_alter=0; set tokudb_disable_slow_alter=1; From b9c35c7e5f487cc3f89e78998992e5298368dc11 Mon Sep 17 00:00:00 2001 From: Knut Anders Hatlen Date: Tue, 12 Sep 2017 08:57:14 +0200 Subject: [PATCH 0101/1221] Bug#26780307: INCONSISTENT JSON ESCAPING WHEN USING JSON TYPE The JSON specification says that all control characters from U+0000 to U+001F need to be escaped, but when MySQL shows JSON data as text, it does not escape the character U+001F. The fix is to escape all characters less than or equal to 0x1f. Previously it only escaped those less than 0x1f. This is a partial backport of bug#26388690. Change-Id: Ia9b4e6653057ac817ab0ca2e0f9c1895ad0f637e --- sql/json_dom.cc | 2 +- unittest/gunit/json_dom-t.cc | 29 ++++++++++++++++++++++++++++- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/sql/json_dom.cc b/sql/json_dom.cc index c8715fed6fe7..29507891a09c 100644 --- a/sql/json_dom.cc +++ b/sql/json_dom.cc @@ -1571,7 +1571,7 @@ bool double_quote(const char *cptr, size_t length, String *buf) return true; /* purecov: inspected */ } else if (((cptr[i] & ~0x7f) == 0) && // bit 8 not set - (cptr[i] < 0x1f)) + (cptr[i] <= 0x1f)) { /* Unprintable control character, use hex a hexadecimal number. diff --git a/unittest/gunit/json_dom-t.cc b/unittest/gunit/json_dom-t.cc index 6c1346a518af..265f6fb4b0f6 100644 --- a/unittest/gunit/json_dom-t.cc +++ b/unittest/gunit/json_dom-t.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -385,6 +385,33 @@ TEST_F(JsonDomTest, BasicTest) EXPECT_EQ(null_dom, dom.get()); } +/* + Test that special characters are escaped when a Json_string is + converted to text, so that it is possible to parse the resulting + string. The JSON parser requires all characters in the range [0x00, + 0x1F] and the characters " (double-quote) and \ (backslash) to be + escaped. +*/ +TEST_F(JsonDomTest, EscapeSpecialChars) +{ + // Create a JSON string with all characters in the range [0, 127]. + char input[128]; + for (size_t i= 0; i < sizeof(input); ++i) + input[i]= static_cast(i); + const Json_string jstr(std::string(input, sizeof(input))); + + // Now convert that value from JSON to text and back to JSON. + std::string str= format(jstr); + std::auto_ptr dom(Json_dom::parse(str.c_str(), str.length(), + NULL, NULL)); + EXPECT_NE(static_cast(NULL), dom.get()); + EXPECT_EQ(Json_dom::J_STRING, dom->json_type()); + + // Expect to get the same string back, including all the special characters. + const Json_string *jstr2= down_cast(dom.get()); + EXPECT_EQ(jstr.value(), jstr2->value()); +} + void vet_wrapper_length(char * text, size_t expected_length ) { const char *msg; From be23d33157e6f7fecdfc947f7b1973c1cfd0776e Mon Sep 17 00:00:00 2001 From: Venkatesh Duggirala Date: Fri, 6 Oct 2017 19:32:29 +0530 Subject: [PATCH 0102/1221] Bug#25656123 MEMORY LEAK IN MASTER-MASTER GTID REPLICATION WITH SYNC_RELAY_LOG_INFO Post push fix: Fixing valgrind pb2 failure issue by 1) Adjusting the data load 2) Adding syncs before the asserts checks. --- .../rpl/r/rpl_ignore_events_mem_growth.result | 28 ++++++--- .../rpl/t/rpl_ignore_events_mem_growth.test | 59 +++++++++++++------ 2 files changed, 63 insertions(+), 24 deletions(-) diff --git a/mysql-test/suite/rpl/r/rpl_ignore_events_mem_growth.result b/mysql-test/suite/rpl/r/rpl_ignore_events_mem_growth.result index 6e694fd752f5..b0b382ddd5a4 100644 --- a/mysql-test/suite/rpl/r/rpl_ignore_events_mem_growth.result +++ b/mysql-test/suite/rpl/r/rpl_ignore_events_mem_growth.result @@ -10,17 +10,26 @@ Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. # # Step-2) Create a sample table to create ignored/skipped -# insert events on the table. +# insert events on the table. And run some sample +# inserts on both nodes, so that initial hiccups +# in bytes used will not be counted. # [connection server_1] CREATE TABLE t1(i INT); include/rpl_sync.inc +[connection server_1] +INSERT INTO t1 VALUES (1); +INSERT INTO t1 VALUES (2); +[connection server_2] +INSERT INTO t1 VALUES (3); +INSERT INTO t1 VALUES (4); +include/rpl_sync.inc # -# Step-3) If gtid_mode is OFF, set sql_slave_skip_counter to 500 on +# Step-3) If gtid_mode is OFF, set sql_slave_skip_counter to 50 on # M2 node and restart sql thread to make the change effective. # -# If gtid_mode is ON, execute 500 empty transactions on -# M2 node, so that 500 transactions from M1 will be skipped. +# If gtid_mode is ON, execute 50 empty transactions on +# M2 node, so that 50 transactions from M1 will be skipped. # [connection server_2] include/stop_slave_sql.inc @@ -32,19 +41,23 @@ include/start_slave_sql.inc [connection server_1] [connection server_2] # -# Step-5) Insert 1000 sample queries on M1 node. First 500 inserts will +# Step-5) Insert 100 sample queries on M1 node. First 50 inserts will # be ignored on M2 node (because sql_slave_skip_counter set to -# 500). Second 500 inserts will be executed on M2 and will be +# 50). Second 50 inserts will be executed on M2 and will be # replicated back to M1 node. But they will be ignored on M1 # because they were originated on M1 node. # [connection server_1] -DROP TABLE t1; +include/rpl_sync.inc +[connection server_2] +INSERT INTO t1 VALUES (100); +include/rpl_sync.inc # # Step-6) Record thd::main_mem_root usage value on M1 after # the experiment. Check that thd::main_mem_root value # did not increased. # +[connection server_1] include/assert.inc [thd::main_mem_root on M1 should be the same value as before experiment value.] # # Step-7) Record thd::main_mem_root usage value on M2 after @@ -56,4 +69,5 @@ include/assert.inc [thd::main_mem_root on M2 should be the same value as before # # Step-8) Cleanup. # +DROP TABLE t1; include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_ignore_events_mem_growth.test b/mysql-test/suite/rpl/t/rpl_ignore_events_mem_growth.test index 9ee79823a163..b9ada0ddf8b4 100644 --- a/mysql-test/suite/rpl/t/rpl_ignore_events_mem_growth.test +++ b/mysql-test/suite/rpl/t/rpl_ignore_events_mem_growth.test @@ -10,20 +10,21 @@ # 1) Create M1<->M2 replication topology # # 2) Create a sample table to create ignored/skipped insert events -# on the table. +# on the table. And run some sample inserts on both nodes, so that +# initially bytes used will not be counted. # -# 3) If gtid_mode is OFF, set sql_slave_skip_counter to 500 on M2 node +# 3) If gtid_mode is OFF, set sql_slave_skip_counter to 50 on M2 node # and restart sql thread to make the change effective. # -# If gtid_mode is ON, execute 500 empty transactions on M2 node, -# so that 500 transactions from M1 will be skipped. +# If gtid_mode is ON, execute 50 empty transactions on M2 node, +# so that 50 transactions from M1 will be skipped. # # 4) Record thd::main_mem_root usage values on both servers before # starting the experiment. # -# 5) Insert 1000 sample queries on M1 node. First 500 inserts will be ignored -# on M2 node (because sql_slave_skip_counter set to 500 in step-3). -# Second 500 inserts will be executed on M2 and will be replicated back to +# 5) Insert 100 sample queries on M1 node. First 50 inserts will be ignored +# on M2 node (because sql_slave_skip_counter set to 50 in step-3). +# Second 50 inserts will be executed on M2 and will be replicated back to # M1 node. But they will be ignored on M1 because they were originated on # M1 node. # @@ -52,19 +53,30 @@ --echo # --echo # Step-2) Create a sample table to create ignored/skipped ---echo # insert events on the table. +--echo # insert events on the table. And run some sample +--echo # inserts on both nodes, so that initial hiccups +--echo # in bytes used will not be counted. --echo # --let $rpl_connection_name=server_1 --source include/rpl_connection.inc CREATE TABLE t1(i INT); --source include/rpl_sync.inc +--let $rpl_connection_name=server_1 +--source include/rpl_connection.inc +INSERT INTO t1 VALUES (1); +INSERT INTO t1 VALUES (2); +--let $rpl_connection_name=server_2 +--source include/rpl_connection.inc +INSERT INTO t1 VALUES (3); +INSERT INTO t1 VALUES (4); +--source include/rpl_sync.inc --echo # ---echo # Step-3) If gtid_mode is OFF, set sql_slave_skip_counter to 500 on +--echo # Step-3) If gtid_mode is OFF, set sql_slave_skip_counter to 50 on --echo # M2 node and restart sql thread to make the change effective. --echo # ---echo # If gtid_mode is ON, execute 500 empty transactions on ---echo # M2 node, so that 500 transactions from M1 will be skipped. +--echo # If gtid_mode is ON, execute 50 empty transactions on +--echo # M2 node, so that 50 transactions from M1 will be skipped. --echo # --let $rpl_connection_name=server_2 --source include/rpl_connection.inc @@ -72,12 +84,12 @@ CREATE TABLE t1(i INT); --disable_query_log if ( `SELECT @@GLOBAL.GTID_MODE = "OFF"` ) { - SET GLOBAL sql_slave_skip_counter=500; + SET GLOBAL sql_slave_skip_counter=50; } if ( `SELECT @@GLOBAL.GTID_MODE = "ON"` ) { --let $trx_no=2 - while ($trx_no <= 500) + while ($trx_no <= 50) { --replace_result $master_uuid MASTER_UUID --eval SET GTID_NEXT='$master_uuid:$trx_no' @@ -104,9 +116,9 @@ if ( `SELECT @@GLOBAL.GTID_MODE = "ON"` ) --let $thd_mem_root_usage_on_M2_before_experiment=`$perf_query` --echo # ---echo # Step-5) Insert 1000 sample queries on M1 node. First 500 inserts will +--echo # Step-5) Insert 100 sample queries on M1 node. First 50 inserts will --echo # be ignored on M2 node (because sql_slave_skip_counter set to ---echo # 500). Second 500 inserts will be executed on M2 and will be +--echo # 50). Second 50 inserts will be executed on M2 and will be --echo # replicated back to M1 node. But they will be ignored on M1 --echo # because they were originated on M1 node. --echo # @@ -114,19 +126,31 @@ if ( `SELECT @@GLOBAL.GTID_MODE = "ON"` ) --source include/rpl_connection.inc --disable_query_log --let $i=0 -while ($i < 1000) +while ($i < 100) { --eval INSERT INTO t1 VALUES ($i) --inc $i } --enable_query_log -DROP TABLE t1; +--source include/rpl_sync.inc +# Wait for all the events from M2 reach M1 back (they will be ignored but we +# should wait till all the events reach M1 to verify our experiment). +# Simple sync will not work in case of GTIDs, as the GTID_EXECUTED already contains +# everything, sync will think that everything is applied. +# So to achieve what we wanted, execute a sample query on M2 that will *not* be ignored +# by M1, and wait till M1 executes that particular query (i.e., a query and then sync). +--let $rpl_connection_name=server_2 +--source include/rpl_connection.inc +INSERT INTO t1 VALUES (100); +--source include/rpl_sync.inc --echo # --echo # Step-6) Record thd::main_mem_root usage value on M1 after --echo # the experiment. Check that thd::main_mem_root value --echo # did not increased. --echo # +--let $rpl_connection_name=server_1 +--source include/rpl_connection.inc --let $thd_mem_root_usage_on_M1_after_experiment=`$perf_query` --let $assert_text= thd::main_mem_root on M1 should be the same value as before experiment value. --let $assert_cond= $thd_mem_root_usage_on_M1_after_experiment = $thd_mem_root_usage_on_M1_before_experiment @@ -147,4 +171,5 @@ DROP TABLE t1; --echo # --echo # Step-8) Cleanup. --echo # +DROP TABLE t1; --source include/rpl_end.inc From 5017e6f5fb92d2c885996727956ffa8fc9ed21c3 Mon Sep 17 00:00:00 2001 From: Kevin Lewis Date: Wed, 16 Aug 2017 17:05:50 -0700 Subject: [PATCH 0103/1221] WL#10473: InnoDB: Deprecate innodb_undo_tablespaces in 5.7 This setting is a global read-only variable, command line only, so it does not have any user interface other than its description. It must be mostly deprecated in the documentation. --- storage/innobase/handler/ha_innodb.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index 7b66a3a28fd9..035f71d55b81 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -19897,7 +19897,7 @@ static MYSQL_SYSVAR_STR(undo_directory, srv_undo_dir, static MYSQL_SYSVAR_ULONG(undo_tablespaces, srv_undo_tablespaces, PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY, - "Number of undo tablespaces to use. ", + "Number of undo tablespaces to use. (deprecated)", NULL, NULL, 0L, /* Default seting */ 0L, /* Minimum value */ From 538fe2732cebe513dad37bf4375bf4756d6ff403 Mon Sep 17 00:00:00 2001 From: Sreeharsha Ramanavarapu Date: Sat, 7 Oct 2017 07:27:35 +0530 Subject: [PATCH 0104/1221] Bug #26251621: INCORRECT BEHAVIOR WITH TRIGGER AND GCOL Issue: ------ This problem occurs under the following conditions: 1) Table t2 has a virtual generated column with a certain string function. 2) Table t1 has an AFTER INSERT trigger on table t2. It contains multiple statements, some unrelated to t2. 3) While inserting into t1, the trigger fails (due to a legitimate error). 4) Try to insert into table t2 and this can result in incorrect behavior. Root cause ---------- Step 3 performs open_table for both tables t1 and t2 (since t2 is part of the trigger). Due to an error, this step is interrupted and the relevant tables are closed. if (thd->locked_tables_mode <= LTM_LOCK_TABLES || table->query_id == thd->query_id) { DBUG_ASSERT(table->file); if (table->db_stat) table->file->extra(HA_EXTRA_DETACH_CHILDREN); table->cleanup_gc_items(); .... } Here cleanup_gc_items() is called for table t1 because query_id is matching. But cleanup_gc_items() is never called for t2, since the query_id doesn't match and the table is in LTM_PRELOCKED mode. While closing the tables it is necessary to specifically call cleanup_gc_items(). Failure to call this function will leave the generated column's expression marked as fixed, while the related table object has been closed. In Step 4 the generated column's expression is considered as fixed (even when it isn't) and can result in incorrect behavior. Solution: --------- Stored Functions (SF) and triggers open all the tables involved at the beginning. If refix_gc_items is allowed for all the tables at the beginning of an SF and it exits due to an error during execution, cleanup_gc_items() for all the tables in the subsequent statements will not be called. refix_gc_items should be called only when table is directly used by the statement or substatement (i.e. right before the relevant substatement is going to be executed). --- sql/table.cc | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/sql/table.cc b/sql/table.cc index f07a99ca74a9..302114c78968 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -4702,8 +4702,24 @@ void TABLE::init(THD *thd, TABLE_LIST *tl) /* Tables may be reused in a sub statement. */ DBUG_ASSERT(!file->extra(HA_EXTRA_IS_ATTACHED_CHILDREN)); - bool error MY_ATTRIBUTE((unused))= refix_gc_items(thd); - DBUG_ASSERT(!error); + /* + Do not call refix_gc_items() for tables which are not directly used by the + statement (i.e. used by the substatements of routines or triggers to be + invoked by the statement). + + Firstly, there will be call to refix_gc_items() at the start of execution + of substatement which directly uses this table anyway.Secondly, cleanup of + generated column (call to cleanup_gc_items()) for the table will be done + only at the end of execution of substatement which uses it. Because of this + call to refix_gc_items() for prelocking placeholder will miss corresponding + call to cleanup_gc_items() if substatement which uses the table is not + executed for some reason. + */ + if (!pos_in_table_list->prelocking_placeholder) + { + bool error MY_ATTRIBUTE((unused))= refix_gc_items(thd); + DBUG_ASSERT(!error); + } } From 36cb2848e9c70414dbae1ecbd7f4650a76b10733 Mon Sep 17 00:00:00 2001 From: Arun Kuruvila Date: Mon, 9 Oct 2017 15:57:22 +0530 Subject: [PATCH 0105/1221] Bug#26529942: NON-DEFAULT UMASK AND UMASK_DIR HAS NO EFFECT IN MYSQL 5.7 Description: Mysql server is not respecting the values of the environment variables, UMASK and UMASK_DIR. Analysis: As per the mysql documentation, if UMASK is set, mysqld uses ($UMASK | 0600) as the mode for file creation. Similarly if UMASK_DIR is set, mysqld uses ($UMASK_DIR | 0700) as the base mode for directory creation. But the function "my_init()" is not setting the variables 'my_umask' and 'my_umask_dir' correctly if the environment variables, UMASK and UMASK_DIR is set. Fix: Variables, 'my_umask and 'my_umask_dir' are correctly set as per the mysql documentation. --- mysys/my_init.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mysys/my_init.c b/mysys/my_init.c index 54d44e688894..f3909ad0ef0f 100644 --- a/mysys/my_init.c +++ b/mysys/my_init.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -102,10 +102,10 @@ my_bool my_init() /* Default creation of new files */ if ((str= getenv("UMASK")) != 0) - my_umask= (int) (atoi_octal(str) | 0640); + my_umask= (int) (atoi_octal(str) | 0600); /* Default creation of new dir's */ if ((str= getenv("UMASK_DIR")) != 0) - my_umask_dir= (int) (atoi_octal(str) | 0750); + my_umask_dir= (int) (atoi_octal(str) | 0700); instrumented_stdin.m_file= stdin; instrumented_stdin.m_psi= NULL; /* not yet instrumented */ From aa6e69db10a991e5c3ca213a8c3a60350c1462c2 Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Mon, 9 Oct 2017 16:24:11 +0200 Subject: [PATCH 0106/1221] Backport patch for Bug#16877045 5.6-CLUSTER-7.3 WIN32 SQL_YACC.CC BUILD PROBLEM Building with ninja shows the problem: cmake .. -G Ninja ninja ninja: error: dependency cycle: sql/GenServerSource -> sql/CMakeFiles/GenServerSource -> sql/sql_builtin.cc -> cmake_order_depends_target_sq sql/GenServerSource Bug#16877045 5.6-CLUSTER-7.3 WIN32 SQL_YACC.CC BUILD PROBLEM - Somewhat circular dependency caused by the configured files sql_builtin.cc being included as part of the files to generate in sql/ - Move sql_builtin.cc out of GEN_SOURCES variable. - Create new variable CONF_SOURCES to be used for configured files. --- mysql-test/CMakeLists.txt | 4 ++-- sql/CMakeLists.txt | 9 ++++++--- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/mysql-test/CMakeLists.txt b/mysql-test/CMakeLists.txt index d12e594a1ff4..e704481d6a33 100644 --- a/mysql-test/CMakeLists.txt +++ b/mysql-test/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2009, 2013, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2009, 2017, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -92,7 +92,7 @@ ENDIF() IF(WITH_EMBEDDED_SERVER) SET(TEST_EMBEDDED ${MTR_FORCE} --comment=embedded --timer --embedded-server - --skip-rpl --skip-ndbcluster $(EXP)) + --skip-rpl --skip-ndbcluster ${EXP}) ELSE() SET(TEST_EMBEDDED echo "Can not test embedded, not compiled in") ENDIF() diff --git a/sql/CMakeLists.txt b/sql/CMakeLists.txt index b0a44b9a1d45..531561ac36d7 100644 --- a/sql/CMakeLists.txt +++ b/sql/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2006, 2014, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 2017, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -22,14 +22,16 @@ ${SSL_INCLUDE_DIRS} ${CMAKE_BINARY_DIR}/sql ) +SET(CONF_SOURCES + ${CMAKE_CURRENT_BINARY_DIR}/sql_builtin.cc +) SET(GEN_SOURCES ${CMAKE_CURRENT_BINARY_DIR}/sql_yacc.h ${CMAKE_CURRENT_BINARY_DIR}/sql_yacc.cc -${CMAKE_CURRENT_BINARY_DIR}/sql_builtin.cc ${CMAKE_CURRENT_BINARY_DIR}/lex_hash.h ) -SET_SOURCE_FILES_PROPERTIES(${GEN_SOURCES} PROPERTIES GENERATED 1) +SET_SOURCE_FILES_PROPERTIES(${GEN_SOURCES} ${CONF_SOURCES} PROPERTIES GENERATED 1) ADD_DEFINITIONS(-DMYSQL_SERVER -DHAVE_EVENT_SCHEDULER) IF(SSL_DEFINES) @@ -78,6 +80,7 @@ SET (SQL_SOURCE transaction.cc sys_vars.cc sql_truncate.cc datadict.cc sql_reload.cc ${GEN_SOURCES} + ${CONF_SOURCES} ${MYSYS_LIBWRAP_SOURCE}) # These files have unused result errors, so we skip Werror From eba6a5fac02877df2076faf2b6235975f4c6d4ac Mon Sep 17 00:00:00 2001 From: Aakanksha Verma Date: Tue, 10 Oct 2017 10:33:06 +0530 Subject: [PATCH 0107/1221] Bug #26390658 RENAMING A PARTITIONED TABLE DOES NOT UPDATE MYSQL.INNODB_TABLE_STATS. PROBLEM While renaming table that has partitions , table stats don't get updated with renamed parition names. Renaming of a partitioned table in 5.7 is done as part of normal ha_innobase::rename_table and hence after the partitioned tables are renamed they are not correctly updated to the stats table since table name fed to the rename stats table function is only the original table and not the new names of the partition. FIX Have made a call to update the table statistics after each rename of partitioned table happens. Reviewed by: bin su RB: 17444 --- mysql-test/r/partition_innodb.result | 28 +++++++++++++++++ mysql-test/t/partition_innodb.test | 29 ++++++++++++++++++ storage/innobase/dict/dict0stats.cc | 27 ++++++++++------- storage/innobase/handler/ha_innodb.cc | 43 +++++++++++++-------------- storage/innobase/include/dict0stats.h | 5 +++- storage/innobase/include/row0mysql.h | 1 + storage/innobase/row/row0mysql.cc | 15 ++++++++++ 7 files changed, 114 insertions(+), 34 deletions(-) diff --git a/mysql-test/r/partition_innodb.result b/mysql-test/r/partition_innodb.result index e51ad4d52526..745877df211d 100644 --- a/mysql-test/r/partition_innodb.result +++ b/mysql-test/r/partition_innodb.result @@ -1265,3 +1265,31 @@ begin; update test12 set grade=0,date=now() where age=20 and partition_id=1; drop table test12; + + +Bug #26390658 RENAMING A PARTITIONED TABLE DOES NOT UPDATE +MYSQL.INNODB_TABLE_STATS. + +CREATE DATABASE test_jfg; +CREATE TABLE test_jfg.test_jfg1 (id int(10) unsigned NOT NULL,PRIMARY +KEY (id)) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC; +CREATE TABLE test_jfg.test_jfg2 (id int(10) unsigned NOT NULL,PRIMARY +KEY (id)) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC +PARTITION BY RANGE ( id ) (PARTITION p1000 VALUES LESS THAN (1000) +ENGINE = InnoDB,PARTITION pmax VALUES LESS THAN MAXVALUE ENGINE = +InnoDB); +SELECT database_name, table_name FROM mysql.innodb_table_stats WHERE +database_name = 'test_jfg'; +database_name table_name +test_jfg test_jfg1 +test_jfg test_jfg2#P#p1000 +test_jfg test_jfg2#P#pmax +RENAME TABLE test_jfg.test_jfg1 TO test_jfg.test_jfg11; +RENAME TABLE test_jfg.test_jfg2 TO test_jfg.test_jfg12; +SELECT database_name, table_name FROM mysql.innodb_table_stats WHERE +database_name = 'test_jfg'; +database_name table_name +test_jfg test_jfg11 +test_jfg test_jfg12#P#p1000 +test_jfg test_jfg12#P#pmax +DROP DATABASE test_jfg; diff --git a/mysql-test/t/partition_innodb.test b/mysql-test/t/partition_innodb.test index 11172d03d7be..f534a6859372 100644 --- a/mysql-test/t/partition_innodb.test +++ b/mysql-test/t/partition_innodb.test @@ -1245,3 +1245,32 @@ partition_id=1; --connection default drop table test12; + +--echo +--echo +--echo Bug #26390658 RENAMING A PARTITIONED TABLE DOES NOT UPDATE +--echo MYSQL.INNODB_TABLE_STATS. +--echo + +CREATE DATABASE test_jfg; + +CREATE TABLE test_jfg.test_jfg1 (id int(10) unsigned NOT NULL,PRIMARY +KEY (id)) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC; +CREATE TABLE test_jfg.test_jfg2 (id int(10) unsigned NOT NULL,PRIMARY +KEY (id)) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC +PARTITION BY RANGE ( id ) (PARTITION p1000 VALUES LESS THAN (1000) +ENGINE = InnoDB,PARTITION pmax VALUES LESS THAN MAXVALUE ENGINE = +InnoDB); + +--replace_result #p# #P# +SELECT database_name, table_name FROM mysql.innodb_table_stats WHERE +database_name = 'test_jfg'; + +RENAME TABLE test_jfg.test_jfg1 TO test_jfg.test_jfg11; +RENAME TABLE test_jfg.test_jfg2 TO test_jfg.test_jfg12; + +--replace_result #p# #P# +SELECT database_name, table_name FROM mysql.innodb_table_stats WHERE +database_name = 'test_jfg'; + +DROP DATABASE test_jfg; diff --git a/storage/innobase/dict/dict0stats.cc b/storage/innobase/dict/dict0stats.cc index 672794088c39..42abe221a778 100644 --- a/storage/innobase/dict/dict0stats.cc +++ b/storage/innobase/dict/dict0stats.cc @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2009, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2009, 2017, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -37,6 +37,7 @@ Created Jan 06, 2010 Vasil Dimov #include "ha_prototypes.h" #include "ut0new.h" #include +#include "row0mysql.h" #include #include @@ -3590,6 +3591,9 @@ This function creates its own transaction and commits it. dberr_t dict_stats_rename_table( /*====================*/ + bool dict_locked, /*!< in: true if dict_sys mutex + and dict_operation_lock are held, + otherwise false*/ const char* old_name, /*!< in: old name, e.g. 'db/table' */ const char* new_name, /*!< in: new name, e.g. 'db/table' */ char* errstr, /*!< out: error string if != DB_SUCCESS @@ -3602,9 +3606,10 @@ dict_stats_rename_table( char new_table_utf8[MAX_TABLE_UTF8_LEN]; dberr_t ret; - ut_ad(!rw_lock_own(dict_operation_lock, RW_LOCK_X)); - ut_ad(!mutex_own(&dict_sys->mutex)); - + if (!dict_locked) { + ut_ad(!rw_lock_own(dict_operation_lock, RW_LOCK_X)); + ut_ad(!mutex_own(&dict_sys->mutex)); + } /* skip innodb_table_stats and innodb_index_stats themselves */ if (strcmp(old_name, TABLE_STATS_NAME) == 0 || strcmp(old_name, INDEX_STATS_NAME) == 0 @@ -3620,9 +3625,10 @@ dict_stats_rename_table( dict_fs2utf8(new_name, new_db_utf8, sizeof(new_db_utf8), new_table_utf8, sizeof(new_table_utf8)); - rw_lock_x_lock(dict_operation_lock); - mutex_enter(&dict_sys->mutex); - + if (!dict_locked) { + rw_lock_x_lock(dict_operation_lock); + mutex_enter(&dict_sys->mutex); + } ulint n_attempts = 0; do { n_attempts++; @@ -3708,9 +3714,10 @@ dict_stats_rename_table( || ret == DB_LOCK_WAIT_TIMEOUT) && n_attempts < 5); - mutex_exit(&dict_sys->mutex); - rw_lock_x_unlock(dict_operation_lock); - + if(!dict_locked) { + mutex_exit(&dict_sys->mutex); + rw_lock_x_unlock(dict_operation_lock); + } if (ret != DB_SUCCESS) { ut_snprintf(errstr, errstr_sz, "Unable to rename statistics from" diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index 035f71d55b81..8067c3dbb86b 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -13072,6 +13072,7 @@ inline MY_ATTRIBUTE((warn_unused_result)) dberr_t innobase_rename_table( /*==================*/ + THD* thd, /*!< Connection thread handle */ trx_t* trx, /*!< in: transaction */ const char* from, /*!< in: old name of the table */ const char* to) /*!< in: new name of the table */ @@ -13106,6 +13107,7 @@ innobase_rename_table( error = row_rename_table_for_mysql(norm_from, norm_to, trx, TRUE); + bool rename_parts = false; if (error == DB_TABLE_NOT_FOUND) { /* May be partitioned table, which consists of partitions named table_name#P#partition_name[#SP#subpartition_name]. @@ -13114,8 +13116,9 @@ innobase_rename_table( ++trx->will_lock; trx_set_dict_operation(trx, TRX_DICT_OP_INDEX); trx_start_if_not_started(trx, true); - error = row_rename_partitions_for_mysql(norm_from, norm_to, + error = row_rename_partitions_for_mysql(thd, norm_from, norm_to, trx); + rename_parts = true; if (error == DB_TABLE_NOT_FOUND) { ib::error() << "Table " << ut_get_name(trx, norm_from) << " does not exist in the InnoDB internal" @@ -13129,7 +13132,7 @@ innobase_rename_table( if (error != DB_SUCCESS) { if (error == DB_TABLE_NOT_FOUND && innobase_get_lower_case_table_names() == 1) { - char* is_part = NULL; + char* is_part = NULL; #ifdef _WIN32 is_part = strstr(norm_from, "#p#"); #else @@ -13180,6 +13183,20 @@ innobase_rename_table( row_mysql_unlock_data_dictionary(trx); + if (error == DB_SUCCESS && !rename_parts) { + char errstr[512]; + error = dict_stats_rename_table(false, + norm_from, + norm_to, errstr, + sizeof(errstr)); + if (error != DB_SUCCESS) { + ib::error() << errstr; + push_warning(thd, Sql_condition::SL_WARNING, + ER_LOCK_WAIT_TIMEOUT, errstr); + } + } + + /* Flush the log to reduce probability that the .frm files and the InnoDB data dictionary get out-of-sync if the user runs with innodb_flush_log_at_trx_commit = 0 */ @@ -13221,7 +13238,7 @@ ha_innobase::rename_table( ++trx->will_lock; trx_set_dict_operation(trx, TRX_DICT_OP_INDEX); - dberr_t error = innobase_rename_table(trx, from, to); + dberr_t error = innobase_rename_table(thd, trx, from, to); DEBUG_SYNC(thd, "after_innobase_rename_table"); @@ -13229,26 +13246,6 @@ ha_innobase::rename_table( trx_free_for_mysql(trx); - if (error == DB_SUCCESS) { - char norm_from[MAX_FULL_NAME_LEN]; - char norm_to[MAX_FULL_NAME_LEN]; - char errstr[512]; - dberr_t ret; - - normalize_table_name(norm_from, from); - normalize_table_name(norm_to, to); - - ret = dict_stats_rename_table(norm_from, norm_to, - errstr, sizeof(errstr)); - - if (ret != DB_SUCCESS) { - ib::error() << errstr; - - push_warning(thd, Sql_condition::SL_WARNING, - ER_LOCK_WAIT_TIMEOUT, errstr); - } - } - /* Add a special case to handle the Duplicated Key error and return DB_ERROR instead. This is to avoid a possible SIGSEGV error from mysql error diff --git a/storage/innobase/include/dict0stats.h b/storage/innobase/include/dict0stats.h index e30704c815a0..1090273aeedb 100644 --- a/storage/innobase/include/dict0stats.h +++ b/storage/innobase/include/dict0stats.h @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2009, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2009, 2017, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -182,6 +182,9 @@ This function creates its own transaction and commits it. dberr_t dict_stats_rename_table( /*====================*/ + bool dict_locked, /*!< in: true if dict_sys mutex + and dict_operation_lock are held, + otherwise false*/ const char* old_name, /*!< in: old table name */ const char* new_name, /*!< in: new table name */ char* errstr, /*!< out: error string if != DB_SUCCESS diff --git a/storage/innobase/include/row0mysql.h b/storage/innobase/include/row0mysql.h index ff3c50d0be47..f2c9dbb06b41 100644 --- a/storage/innobase/include/row0mysql.h +++ b/storage/innobase/include/row0mysql.h @@ -547,6 +547,7 @@ row_rename_table_for_mysql( @return error code or DB_SUCCESS */ dberr_t row_rename_partitions_for_mysql( + THD* thd, const char* old_name, const char* new_name, trx_t* trx) diff --git a/storage/innobase/row/row0mysql.cc b/storage/innobase/row/row0mysql.cc index 3c1b14c8b603..613b572e4a3e 100644 --- a/storage/innobase/row/row0mysql.cc +++ b/storage/innobase/row/row0mysql.cc @@ -28,6 +28,9 @@ Created 9/17/2000 Heikki Tuuri #include #include #include +#include +#include +#include #include "row0mysql.h" @@ -5725,12 +5728,14 @@ row_rename_table_for_mysql( } /** Renames a partitioned table for MySQL. +@parama[in] thd Connection thread handle @param[in] old_name Old table name. @param[in] new_name New table name. @param[in,out] trx Transaction. @return error code or DB_SUCCESS */ dberr_t row_rename_partitions_for_mysql( + THD* thd, const char* old_name, const char* new_name, trx_t* trx) @@ -5765,6 +5770,16 @@ row_rename_partitions_for_mysql( strlen(table_name) - from_len + 1); error = row_rename_table_for_mysql(table_name, to_name, trx, false); + if (error == DB_SUCCESS) { + char errstr[512]; + error = dict_stats_rename_table(true, table_name, to_name, + errstr, sizeof(errstr)); + if (error != DB_SUCCESS) { + ib::error() << errstr; + push_warning(thd, Sql_condition::SL_WARNING, + ER_LOCK_WAIT_TIMEOUT, errstr); + } + } if (error != DB_SUCCESS) { /* Rollback and return. */ trx_rollback_for_mysql(trx); From 3a2f365bd2d65f8ea865113027125c947a6c9f3e Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Mon, 9 Oct 2017 16:15:29 +0200 Subject: [PATCH 0108/1221] Backport patch for Bug#16877045 5.6-CLUSTER-7.3 WIN32 SQL_YACC.CC BUILD PROBLEM Building with ninja shows the problem: cmake .. -G Ninja ninja ninja: error: dependency cycle: sql/GenServerSource -> sql/CMakeFiles/GenServerSource -> sql/sql_builtin.cc -> cmake_order_depends_target_sql -> sql/GenServerSource Bug#16877045 5.6-CLUSTER-7.3 WIN32 SQL_YACC.CC BUILD PROBLEM - Somewhat circular dependency caused by the configured files sql_builtin.cc being included as part of the files to generate in sql/ - Move sql_builtin.cc out of GEN_SOURCES variable. - Create new variable CONF_SOURCES to be used for configured files. - Fix minor out of source build problem where the generated libmysql.ver wasn't found Also: zero-initialize a couple of stack variables, to avoid 'may be uninitialized' warnings --- libmysql/CMakeLists.txt | 4 ++-- sql/CMakeLists.txt | 8 ++++++-- sql/ha_partition.cc | 2 +- sql/spatial.cc | 4 ++-- storage/innobase/row/row0sel.cc | 2 +- 5 files changed, 12 insertions(+), 8 deletions(-) diff --git a/libmysql/CMakeLists.txt b/libmysql/CMakeLists.txt index 7b9c76266039..fe2dda6bc16d 100644 --- a/libmysql/CMakeLists.txt +++ b/libmysql/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2006, 2016, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 2017, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -253,7 +253,7 @@ IF(NOT DISABLE_SHARED) SET(libmysql_link_flags "${libmysql_link_flags} ${LINK_FLAG_NO_UNDEFINED}") SET(libmysql_link_flags - "${libmysql_link_flags} -Wl,--version-script=libmysql.ver") + "${libmysql_link_flags} -Wl,--version-script=${CMAKE_CURRENT_BINARY_DIR}/libmysql.ver") SET_TARGET_PROPERTIES(libmysql PROPERTIES LINK_FLAGS "${libmysql_link_flags}") ENDIF() diff --git a/sql/CMakeLists.txt b/sql/CMakeLists.txt index e41141b4780d..5bc3c9cce1ae 100644 --- a/sql/CMakeLists.txt +++ b/sql/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2006, 2016, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 2017, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -22,10 +22,12 @@ INCLUDE_DIRECTORIES( ${CMAKE_BINARY_DIR}/sql ) +SET(CONF_SOURCES + ${CMAKE_CURRENT_BINARY_DIR}/sql_builtin.cc +) SET(GEN_SOURCES ${CMAKE_CURRENT_BINARY_DIR}/sql_yacc.h ${CMAKE_CURRENT_BINARY_DIR}/sql_yacc.cc - ${CMAKE_CURRENT_BINARY_DIR}/sql_builtin.cc ${CMAKE_CURRENT_BINARY_DIR}/lex_hash.h ) SET(GEN_DIGEST_SOURCES @@ -33,6 +35,7 @@ SET(GEN_DIGEST_SOURCES ) SET_SOURCE_FILES_PROPERTIES(${GEN_SOURCES} + ${CONF_SOURCES} ${GEN_DIGEST_SOURCES} PROPERTIES GENERATED 1) @@ -190,6 +193,7 @@ SET(SQL_EXPORTED_SOURCES ${SQL_SHARED_SOURCES} PARENT_SCOPE) SET(SQL_SOURCE ${GEN_SOURCES} + ${CONF_SOURCES} ${GEN_DIGEST_SOURCES} ${MYSYS_LIBWRAP_SOURCE} ${SQL_SHARED_SOURCES} diff --git a/sql/ha_partition.cc b/sql/ha_partition.cc index 24bd299083f0..5374afd9357c 100644 --- a/sql/ha_partition.cc +++ b/sql/ha_partition.cc @@ -702,7 +702,7 @@ int ha_partition::create_handler_files(const char *path, int ha_partition::create(const char *name, TABLE *table_arg, HA_CREATE_INFO *create_info) { - int error; + int error= 0; char name_buff[FN_REFLEN + 1], name_lc_buff[FN_REFLEN + 1]; char *name_buffer_ptr; const char *path; diff --git a/sql/spatial.cc b/sql/spatial.cc index 0ffc4602fa8d..faa590ec7f28 100644 --- a/sql/spatial.cc +++ b/sql/spatial.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2002, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -1777,7 +1777,7 @@ bool Gis_multi_polygon::get_mbr(MBR *mbr, wkb_parser *wkb) const while (n_polygons--) { - uint32 n_linear_rings; + uint32 n_linear_rings= 0; if (wkb->skip_wkb_header() || wkb->scan_non_zero_uint4(&n_linear_rings)) return true; diff --git a/storage/innobase/row/row0sel.cc b/storage/innobase/row/row0sel.cc index bd311a99b775..706b54369819 100644 --- a/storage/innobase/row/row0sel.cc +++ b/storage/innobase/row/row0sel.cc @@ -2796,7 +2796,7 @@ row_sel_store_mysql_field_func( { const byte* data; ulint len; - ulint clust_field_no; + ulint clust_field_no = 0; bool clust_templ_for_sec = (sec_field_no != ULINT_UNDEFINED); ut_ad(prebuilt->default_rec); From 283df62d7fc8237b86b2f6e648c1518241f08d19 Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Tue, 10 Oct 2017 12:14:50 +0530 Subject: [PATCH 0109/1221] From 94622a315321c6155d377c559d3570c65aeabbec Mon Sep 17 00:00:00 2001 From: Lars Tangvald Date: Wed, 13 Sep 2017 08:13:49 +0200 Subject: [PATCH 0110/1221] Deb packaging: Add support for Ubuntu 17.10 (Artful) --- packaging/deb-in/CMakeLists.txt | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/packaging/deb-in/CMakeLists.txt b/packaging/deb-in/CMakeLists.txt index 1825ab80083b..0c9ea040875c 100644 --- a/packaging/deb-in/CMakeLists.txt +++ b/packaging/deb-in/CMakeLists.txt @@ -234,6 +234,23 @@ ELSEIF(DEB_CODENAME STREQUAL "zesty") SET (DEB_SERVICE_SERVER_EXECPRE "ExecStartPre=/usr/share/mysql/mysql-systemd-start pre") SET (DEB_INIT_APPARMOR "/lib/apparmor/profile-load usr.sbin.mysqld") +ELSEIF(DEB_CODENAME STREQUAL "artful") + SET (DEB_PLATFORMRELEASE "ubuntu17.10") + SET (DEB_CONTROL_BDEPS "dh-apparmor, dh-systemd (>=1.5)") + SET (DEB_INSTALL_SOURCE_XZ "../*.tar.xz usr/src/mysql/") + SET (DEB_RULES_INSTALL_SYSTEMD + "install -m 0755 debian/extra/mysql-systemd-start debian/tmp/usr/share/mysql/") + SET (DEB_RULES_INSTALL_APPARMOR + "install -g root -o root -m 0644 -D debian/extra/apparmor-profile debian/tmp/etc/apparmor.d/usr.sbin.mysqld") + SET (DEB_RULES_APPARMOR_LOAD + "dh_apparmor -pmysql-${DEB_PRODUCTNAME}-server --profile-name=usr.sbin.mysqld") + SET (DEB_RULES_SYSTEMD_ENABLE "dh_systemd_enable --name=mysql") + SET (DEB_RULES_SYSTEMD_START "dh_systemd_start --restart-after-upgrade") + SET (DEB_INSTALL_SERVER_SYSTEMD "usr/share/mysql/mysql-systemd-start") + SET (DEB_INSTALL_SERVER_APPARMOR "etc/apparmor.d/usr.sbin.mysqld") + SET (DEB_SERVICE_SERVER_EXECPRE + "ExecStartPre=/usr/share/mysql/mysql-systemd-start pre") + SET (DEB_INIT_APPARMOR "/lib/apparmor/profile-load usr.sbin.mysqld") ELSE() MESSAGE(STATUS "Skipping deb packaging on unsupported platform ${DEB_CODENAME}.") From ded1a610f9040eea1af72665604e8bbd42ac5358 Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Fri, 6 Oct 2017 10:02:40 +0200 Subject: [PATCH 0111/1221] Backport libutils.cmake parts of 26562464: ONE DEFINITION RULE VIOLATIONS This ensures that all externally visible symbols in libmysqlclient.so are exported with correct type, rather than as an array of (void*) functions. Also: - fix a typo in libmysql/CMakeLists.txt libmysql_link_flag/libmysql_link_flags - similar typo in libmysqld/CMakeLists.txt - add libmysql_api_test POST_BUILD target, to verify that all symbols are exported. Change-Id: If92e6a7102004fc929f065e78fd35117ed56ceb0 --- cmake/libutils.cmake | 44 ++++++++++++++++++++-------------------- libmysql/CMakeLists.txt | 7 ++++++- libmysqld/CMakeLists.txt | 2 +- 3 files changed, 29 insertions(+), 24 deletions(-) diff --git a/cmake/libutils.cmake b/cmake/libutils.cmake index fe6cdb1dc568..cbc190b864cf 100644 --- a/cmake/libutils.cmake +++ b/cmake/libutils.cmake @@ -59,16 +59,14 @@ ENDIF() INCLUDE(${MYSQL_CMAKE_SCRIPT_DIR}/cmake_parse_arguments.cmake) # CREATE_EXPORT_FILE (VAR target api_functions) -# Internal macro, used to create source file for shared libraries that -# otherwise consists entirely of "convenience" libraries. On Windows, -# also exports API functions as dllexport. On unix, creates a dummy file -# that references all exports and this prevents linker from creating an -# empty library(there are unportable alternatives, --whole-archive) +# Internal macro, used on Windows to export API functions as dllexport. +# Returns a list of extra files that should be linked into the library +# (in the variable pointed to by VAR). MACRO(CREATE_EXPORT_FILE VAR TARGET API_FUNCTIONS) + SET(DUMMY ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_dummy.cc) + CONFIGURE_FILE_CONTENT("" ${DUMMY}) IF(WIN32) - SET(DUMMY ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_dummy.c) SET(EXPORTS ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_exports.def) - CONFIGURE_FILE_CONTENT("" ${DUMMY}) SET(CONTENT "EXPORTS\n") FOREACH(FUNC ${API_FUNCTIONS}) SET(CONTENT "${CONTENT} ${FUNC}\n") @@ -76,18 +74,7 @@ MACRO(CREATE_EXPORT_FILE VAR TARGET API_FUNCTIONS) CONFIGURE_FILE_CONTENT(${CONTENT} ${EXPORTS}) SET(${VAR} ${DUMMY} ${EXPORTS}) ELSE() - SET(EXPORTS ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_exports_file.cc) - SET(CONTENT) - FOREACH(FUNC ${API_FUNCTIONS}) - SET(CONTENT "${CONTENT} extern void* ${FUNC}\;\n") - ENDFOREACH() - SET(CONTENT "${CONTENT} void *${TARGET}_api_funcs[] = {\n") - FOREACH(FUNC ${API_FUNCTIONS}) - SET(CONTENT "${CONTENT} &${FUNC},\n") - ENDFOREACH() - SET(CONTENT "${CONTENT} (void *)0\n}\;") - CONFIGURE_FILE_CONTENT(${CONTENT} ${EXPORTS}) - SET(${VAR} ${EXPORTS}) + SET(${VAR} ${DUMMY}) ENDIF() ENDMACRO() @@ -232,7 +219,7 @@ ENDMACRO() MACRO(MERGE_LIBRARIES) MYSQL_PARSE_ARGUMENTS(ARG "EXPORTS;OUTPUT_NAME;COMPONENT" - "STATIC;SHARED;MODULE;NOINSTALL" + "STATIC;SHARED;MODULE;SKIP_INSTALL" ${ARGN} ) LIST(GET ARG_DEFAULT_ARGS 0 TARGET) @@ -267,7 +254,19 @@ MACRO(MERGE_LIBRARIES) ENDFOREACH() ENDIF() CREATE_EXPORT_FILE(SRC ${TARGET} "${ARG_EXPORTS}") - IF(NOT ARG_NOINSTALL) + IF(UNIX) + # Mark every export as explicitly needed, so that ld won't remove the .a files + # containing them. This has a similar effect as --Wl,--no-whole-archive, + # but is more focused. + FOREACH(SYMBOL ${ARG_EXPORTS}) + IF(APPLE) + SET(export_link_flags "${export_link_flags} -Wl,-u,_${SYMBOL}") + ELSE() + SET(export_link_flags "${export_link_flags} -Wl,-u,${SYMBOL}") + ENDIF() + ENDFOREACH() + ENDIF() + IF(NOT ARG_SKIP_INSTALL) ADD_VERSION_INFO(${TARGET} SHARED SRC) ENDIF() ADD_LIBRARY(${TARGET} ${LIBTYPE} ${SRC}) @@ -276,10 +275,11 @@ MACRO(MERGE_LIBRARIES) SET_TARGET_PROPERTIES( ${TARGET} PROPERTIES OUTPUT_NAME "${ARG_OUTPUT_NAME}") ENDIF() + SET_TARGET_PROPERTIES(${TARGET} PROPERTIES LINK_FLAGS "${export_link_flags}") ELSE() MESSAGE(FATAL_ERROR "Unknown library type") ENDIF() - IF(NOT ARG_NOINSTALL) + IF(NOT ARG_SKIP_INSTALL) IF(ARG_COMPONENT) SET(COMP COMPONENT ${ARG_COMPONENT}) ENDIF() diff --git a/libmysql/CMakeLists.txt b/libmysql/CMakeLists.txt index f663e11379f9..9151237cbb5d 100644 --- a/libmysql/CMakeLists.txt +++ b/libmysql/CMakeLists.txt @@ -294,7 +294,7 @@ IF(NOT DISABLE_SHARED) ENDIF() GET_TARGET_PROPERTY(libmysql_link_flags libmysql LINK_FLAGS) - IF(NOT libmysql_link_flag) + IF(NOT libmysql_link_flags) SET(libmysql_link_flags) ENDIF() SET(libmysql_link_flags @@ -354,3 +354,8 @@ ELSE() TARGET_LINK_LIBRARIES(libmysql_api_test libmysql) ENDIF() +# Verify that libmysql_api_test runs OK +ADD_CUSTOM_COMMAND(TARGET libmysql_api_test POST_BUILD + COMMAND $ + > ${CMAKE_CURRENT_BINARY_DIR}/libmysql_api_test.out + ) diff --git a/libmysqld/CMakeLists.txt b/libmysqld/CMakeLists.txt index 6b8b04f2665d..d068ae356c53 100644 --- a/libmysqld/CMakeLists.txt +++ b/libmysqld/CMakeLists.txt @@ -315,7 +315,7 @@ IF(WITH_EMBEDDED_SHARED_LIBRARY) ) GET_TARGET_PROPERTY(libmysqld_link_flags libmysqld LINK_FLAGS) - IF(NOT libmysqld_link_flag) + IF(NOT libmysqld_link_flags) SET(libmysqld_link_flags) ENDIF() SET(libmysqld_link_flags From cf2aa612e015df22996932fea8c461dca3a4a84b Mon Sep 17 00:00:00 2001 From: Joao Gramacho Date: Thu, 21 Sep 2017 12:14:53 +0100 Subject: [PATCH 0112/1221] BUG#25585436 ASSERT `!RLI_DESCRIPTION_EVENT || IS_PARALLEL_EXEC()' AT RPL_RLI.CC:2393 Problem and Analysis -------------------- The issues happen when the MTS coordinator is trying to determine which worker should handle a new transaction being scheduled that depends on a transaction still in progress in a worker because of MTS logical clock. If the worker fails to apply the transaction, instead of being notified that there was an error and the logical clock the coordinator was waiting will never be reached, the coordinator is assigning the transaction to itself before seen that an error happened. When the MTS coordinator becomes aware of the error, it has already scheduled (and applied) some events of the new transaction, messing with some of the cleanup logics. Requesting the MTS coordinator (STOP SLAVE) while it is applying a transaction that should be handled by workers are making debug binaries to hit the assert. Fix --- Make schedule_next_event return an error when a dependent transaction is aware of the failure of a transaction it was waiting on. --- ...applier_error_concurrent_stop_slave.result | 49 ++++++++++ ...k_applier_error_concurrent_stop_slave.test | 89 +++++++++++++++++++ sql/log_event.cc | 7 +- sql/rpl_mts_submode.cc | 10 ++- 4 files changed, 152 insertions(+), 3 deletions(-) create mode 100644 mysql-test/suite/rpl/r/rpl_mts_logical_clock_applier_error_concurrent_stop_slave.result create mode 100644 mysql-test/suite/rpl/t/rpl_mts_logical_clock_applier_error_concurrent_stop_slave.test diff --git a/mysql-test/suite/rpl/r/rpl_mts_logical_clock_applier_error_concurrent_stop_slave.result b/mysql-test/suite/rpl/r/rpl_mts_logical_clock_applier_error_concurrent_stop_slave.result new file mode 100644 index 000000000000..dfa10f2fe6bd --- /dev/null +++ b/mysql-test/suite/rpl/r/rpl_mts_logical_clock_applier_error_concurrent_stop_slave.result @@ -0,0 +1,49 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +[connection slave] +CALL mtr.add_suppression('The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state.'); +SET @save_slave_parallel_type = @@GLOBAL.slave_parallel_type; +SET @save_slave_parallel_workers = @@GLOBAL.slave_parallel_workers; +SET @save_slave_transaction_retries = @@GLOBAL.slave_transaction_retries; +SET @save_innodb_lock_wait_timeout = @@GLOBAL.innodb_lock_wait_timeout; +SET @@GLOBAL.slave_parallel_type = LOGICAL_CLOCK; +SET @@GLOBAL.slave_parallel_workers = 3; +SET @@GLOBAL.slave_transaction_retries = 0; +SET @@GLOBAL.innodb_lock_wait_timeout = 1; +include/start_slave.inc +[connection master] +CREATE TABLE parent (a INT NOT NULL PRIMARY KEY, b VARCHAR(50)); +CREATE TABLE child ( a INT NOT NULL PRIMARY KEY, b INT, +FOREIGN KEY(a) REFERENCES parent (a) ON DELETE RESTRICT); +INSERT INTO parent VALUES (1, 'a1'); +INSERT INTO parent VALUES (2, 'a2'); +INSERT INTO parent VALUES (3, 'a3'); +INSERT INTO parent VALUES (4, 'a4'); +INSERT INTO child VALUES (1,1); +INSERT INTO child VALUES (2,1); +INSERT INTO child VALUES (3,1); +INSERT INTO child VALUES (4,1); +include/sync_slave_sql_with_master.inc +[connection slave1] +BEGIN; +DELETE FROM child WHERE a=3; +[connection master] +DELETE FROM child WHERE a=3; +DELETE FROM parent WHERE a=3; +include/sync_slave_io_with_master.inc +include/wait_for_slave_param.inc [Slave_SQL_Running_State] +include/stop_slave_sql.inc +[connection slave1] +ROLLBACK; +[connection master] +DROP TABLE child, parent; +[connection slave] +SET @@GLOBAL.slave_parallel_type= @save_slave_parallel_type; +SET @@GLOBAL.slave_parallel_workers= @save_slave_parallel_workers; +SET @@GLOBAL.slave_transaction_retries= @save_slave_transaction_retries; +SET @@GLOBAL.innodb_lock_wait_timeout= @save_innodb_lock_wait_timeout; +include/start_slave_sql.inc +include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_mts_logical_clock_applier_error_concurrent_stop_slave.test b/mysql-test/suite/rpl/t/rpl_mts_logical_clock_applier_error_concurrent_stop_slave.test new file mode 100644 index 000000000000..1ab0a3c32ba6 --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_mts_logical_clock_applier_error_concurrent_stop_slave.test @@ -0,0 +1,89 @@ +# ==== Purpose ==== +# +# This test will make a worker to fail applying a transaction while SQL thread +# is requested to stop and MTS logical clock was waiting for a transaction to +# continue scheduling events to workers. +# +# ==== Related Bugs and Worklogs ==== +# +# BUG#25585436 ASSERT `!RLI_DESCRIPTION_EVENT || IS_PARALLEL_EXEC()' AT +# RPL_RLI.CC:2393 +# + +# This test case is binary log format agnostic +--source include/have_binlog_format_row.inc +--let $rpl_skip_start_slave= 1 +--source include/master-slave.inc + +--source include/rpl_connection_slave.inc +CALL mtr.add_suppression('The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state.'); +SET @save_slave_parallel_type = @@GLOBAL.slave_parallel_type; +SET @save_slave_parallel_workers = @@GLOBAL.slave_parallel_workers; +SET @save_slave_transaction_retries = @@GLOBAL.slave_transaction_retries; +SET @save_innodb_lock_wait_timeout = @@GLOBAL.innodb_lock_wait_timeout; + +SET @@GLOBAL.slave_parallel_type = LOGICAL_CLOCK; +SET @@GLOBAL.slave_parallel_workers = 3; +SET @@GLOBAL.slave_transaction_retries = 0; +SET @@GLOBAL.innodb_lock_wait_timeout = 1; +--source include/start_slave.inc + +# +# Workload +# +--source include/rpl_connection_master.inc +CREATE TABLE parent (a INT NOT NULL PRIMARY KEY, b VARCHAR(50)); +CREATE TABLE child ( a INT NOT NULL PRIMARY KEY, b INT, + FOREIGN KEY(a) REFERENCES parent (a) ON DELETE RESTRICT); + +INSERT INTO parent VALUES (1, 'a1'); +INSERT INTO parent VALUES (2, 'a2'); +INSERT INTO parent VALUES (3, 'a3'); +INSERT INTO parent VALUES (4, 'a4'); + +INSERT INTO child VALUES (1,1); +INSERT INTO child VALUES (2,1); +INSERT INTO child VALUES (3,1); +INSERT INTO child VALUES (4,1); + +--source include/sync_slave_sql_with_master.inc + +# +# Block MTS worker and put coordinator to wait on logical clock +# +--source include/rpl_connection_slave1.inc +BEGIN; +DELETE FROM child WHERE a=3; + +--source include/rpl_connection_master.inc +DELETE FROM child WHERE a=3; +DELETE FROM parent WHERE a=3; + +# +# Wait until coordinator is waiting to schedule transactions +# +--source include/sync_slave_io_with_master.inc +--let $slave_param= Slave_SQL_Running_State +--let $slave_param_value= Waiting for dependent transaction to commit +--source include/wait_for_slave_param.inc +# +# Stop slave and cleanup the blocking +# +--source include/stop_slave_sql.inc +--source include/rpl_connection_slave1.inc +ROLLBACK; + +# +# Cleanup +# +--source include/rpl_connection_master.inc +DROP TABLE child, parent; + +--source include/rpl_connection_slave.inc +SET @@GLOBAL.slave_parallel_type= @save_slave_parallel_type; +SET @@GLOBAL.slave_parallel_workers= @save_slave_parallel_workers; +SET @@GLOBAL.slave_transaction_retries= @save_slave_transaction_retries; +SET @@GLOBAL.innodb_lock_wait_timeout= @save_innodb_lock_wait_timeout; +--source include/start_slave_sql.inc + +--source include/rpl_end.inc diff --git a/sql/log_event.cc b/sql/log_event.cc index 2e2e5bb29c1e..2339ee8323c3 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -2778,6 +2778,9 @@ bool schedule_next_event(Log_event* ev, Relay_log_info* rli) case ER_MTS_INCONSISTENT_DATA: /* Don't have to do anything. */ return true; + case -1: + /* Unable to schedule: wait_for_last_committed_trx has failed */ + return true; default: return false; } @@ -3471,7 +3474,7 @@ int Log_event::apply_event(Relay_log_info *rli) #endif err: - if (rli_thd->is_error()) + if (rli_thd->is_error() || (!worker && rli->abort_slave)) { DBUG_ASSERT(!worker); @@ -3493,7 +3496,7 @@ int Log_event::apply_event(Relay_log_info *rli) DBUG_ASSERT(worker || rli->curr_group_assigned_parts.size() == 0); } - DBUG_RETURN((!rli_thd->is_error() || + DBUG_RETURN((!(rli_thd->is_error() || (!worker && rli->abort_slave)) || DBUG_EVALUATE_IF("fault_injection_get_slave_worker", 1, 0)) ? 0 : -1); } diff --git a/sql/rpl_mts_submode.cc b/sql/rpl_mts_submode.cc index fd3b6fa0c7f0..e6341ed9f5cc 100644 --- a/sql/rpl_mts_submode.cc +++ b/sql/rpl_mts_submode.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -656,6 +656,14 @@ Mts_submode_logical_clock::schedule_next_event(Relay_log_info* rli, */ if (wait_for_last_committed_trx(rli, last_committed, lwm_estimate)) { + /* + MTS was waiting for a dependent transaction to finish but either it + has failed or the applier was requested to stop. In any case, this + transaction wasn't started yet and should not warn about the + coordinator stopping in a middle of a transaction to avoid polluting + the server error log. + */ + rli->reported_unsafe_warning= true; DBUG_RETURN(-1); } /* From d82e875912ef45032db777a93e0e5263690a39e2 Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Wed, 11 Oct 2017 15:57:15 +0530 Subject: [PATCH 0113/1221] From 9a715ecbc003ceb2a380a76728ae998ab085c003 Mon Sep 17 00:00:00 2001 From: Marek Szymczak Date: Wed, 11 Oct 2017 17:29:27 +0200 Subject: [PATCH 0114/1221] WL#8838 Compressed and encrypted JSON audit log output Audit log extension that allows logging into JSON file format. Files of all logging formats can be compressed and encrypted. Content of JSON files can be accessed using SQL interface. Reviewed-by: ============ Georgi Kodinov Ramil Kalimullin --- include/my_sys.h | 2 ++ .../t/test_session_audit_log.test | 3 ++- .../t/test_sql_audit_log.test | 3 ++- mysys/mf_getdate.c | 17 ++++++++++++++++- sql/share/errmsg-utf8.txt | 3 +++ 5 files changed, 25 insertions(+), 3 deletions(-) diff --git a/include/my_sys.h b/include/my_sys.h index 21bdc5fe1c02..f2fc04ba0105 100644 --- a/include/my_sys.h +++ b/include/my_sys.h @@ -149,6 +149,8 @@ C_MODE_START #define GETDATE_HHMMSSTIME 4 #define GETDATE_GMT 8 #define GETDATE_FIXEDLENGTH 16 +#define GETDATE_T_DELIMITER 32 +#define GETDATE_SHORT_DATE_FULL_YEAR 64 /* defines when allocating data */ extern void *my_multi_malloc(PSI_memory_key key, myf flags, ...); diff --git a/mysql-test/suite/test_service_sql_api/t/test_session_audit_log.test b/mysql-test/suite/test_service_sql_api/t/test_session_audit_log.test index 45bcf9a1702e..4d546a8aebd4 100644 --- a/mysql-test/suite/test_service_sql_api/t/test_session_audit_log.test +++ b/mysql-test/suite/test_service_sql_api/t/test_session_audit_log.test @@ -44,6 +44,7 @@ UNINSTALL PLUGIN test_session_in_thd; --echo ########################################## --echo # Stop audit_log plugin --echo ########################################## +move_file $MYSQLTEST_VARDIR/mysqld.1/data/audit.log $MYSQLTEST_VARDIR/mysqld.1/data/audit.log.temp; UNINSTALL PLUGIN audit_log; --echo ########################################## @@ -53,7 +54,7 @@ let $MYSQLD_DATADIR= `select @@datadir`; cat_file $MYSQLD_DATADIR/test_session_in_thd.log; remove_file $MYSQLD_DATADIR/test_session_in_thd.log; -let $MYSQL_LOGFILE= $MYSQLTEST_VARDIR/mysqld.1/data/audit.log; +let $MYSQL_LOGFILE= $MYSQLTEST_VARDIR/mysqld.1/data/audit.log.temp; CREATE TABLE t1 (c1 text); sleep 1; --replace_result $MYSQL_LOGFILE MYSQL_LOGFILE diff --git a/mysql-test/suite/test_service_sql_api/t/test_sql_audit_log.test b/mysql-test/suite/test_service_sql_api/t/test_sql_audit_log.test index 0839386234cb..b397a11d4555 100644 --- a/mysql-test/suite/test_service_sql_api/t/test_sql_audit_log.test +++ b/mysql-test/suite/test_service_sql_api/t/test_sql_audit_log.test @@ -74,6 +74,7 @@ UNINSTALL PLUGIN test_sql_2_sessions; --echo ########################################## --echo # Stop audit_log plugin --echo ########################################## +move_file $MYSQLTEST_VARDIR/mysqld.1/data/audit.log $MYSQLTEST_VARDIR/mysqld.1/data/audit.log.temp; UNINSTALL PLUGIN audit_log; --echo ########################################## @@ -86,7 +87,7 @@ remove_file $MYSQLD_DATADIR/test_sql_2_sessions.log; --echo ########################################## --echo # Check audit log file --echo ########################################## -let $MYSQL_LOGFILE = $MYSQLTEST_VARDIR/mysqld.1/data/audit.log; +let $MYSQL_LOGFILE = $MYSQLTEST_VARDIR/mysqld.1/data/audit.log.temp; CREATE TABLE t1 (c1 text); sleep 1; --replace_result $MYSQL_LOGFILE MYSQL_LOGFILE diff --git a/mysys/mf_getdate.c b/mysys/mf_getdate.c index 5efadcd0c293..f9176bfdb095 100644 --- a/mysys/mf_getdate.c +++ b/mysys/mf_getdate.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -32,6 +32,8 @@ If flag & GETDATE_GMT Date/time in GMT If flag & GETDATE_FIXEDLENGTH Return fixed length date/time date - for conversion + If flag & GETDATE_T_DELIMITER Append 'T' between date and time. + If flag & GETDATE_SHORT_DATE_FULL_YEAR Return compact date format YYYYMMDD */ @@ -52,6 +54,11 @@ void get_date(char * to, int flag, time_t date) start_time->tm_year % 100, start_time->tm_mon+1, start_time->tm_mday); + else if (flag & GETDATE_SHORT_DATE_FULL_YEAR) + sprintf(to,"%4d%02d%02d", + start_time->tm_year+1900, + start_time->tm_mon+1, + start_time->tm_mday); else sprintf(to, ((flag & GETDATE_FIXEDLENGTH) ? "%4d-%02d-%02d" : "%d-%02d-%02d"), @@ -59,15 +66,23 @@ void get_date(char * to, int flag, time_t date) start_time->tm_mon+1, start_time->tm_mday); if (flag & GETDATE_DATE_TIME) + { + if (flag & GETDATE_T_DELIMITER) + sprintf(strend(to), "T"); sprintf(strend(to), ((flag & GETDATE_FIXEDLENGTH) ? " %02d:%02d:%02d" : " %2d:%02d:%02d"), start_time->tm_hour, start_time->tm_min, start_time->tm_sec); + } else if (flag & GETDATE_HHMMSSTIME) + { + if (flag & GETDATE_T_DELIMITER) + sprintf(strend(to), "T"); sprintf(strend(to),"%02d%02d%02d", start_time->tm_hour, start_time->tm_min, start_time->tm_sec); + } } /* get_date */ diff --git a/sql/share/errmsg-utf8.txt b/sql/share/errmsg-utf8.txt index 0b49d1a6074f..3189f874d616 100644 --- a/sql/share/errmsg-utf8.txt +++ b/sql/share/errmsg-utf8.txt @@ -7684,6 +7684,9 @@ ER_KEYRING_AWS_UDF_AWS_KMS_ERROR ER_BINLOG_UNSAFE_XA eng "Statement is unsafe because it is being used inside a XA transaction. Concurrent XA transactions may deadlock on slaves when replicated using statements." +ER_UDF_ERROR + eng "%s UDF failed; %s" + # # End of 5.7 error messages. # From 797ce0ea7f1fe30329f9d516ff004ad4d9c897fe Mon Sep 17 00:00:00 2001 From: Sreeharsha Ramanavarapu Date: Thu, 12 Oct 2017 10:17:35 +0530 Subject: [PATCH 0115/1221] Bug #26881855: GCOL: INCORRECT BEHAVIOR WITH CONSTANT ITEM Issue: ------ Virtual generated column expression that contain a comparision operators between certain datatypes can cause problems. When a table is opened, the expression in the generated column is created on the table's memroot. As subsequent statements access the same table, convert_constant_item() checks the types and under certain conditions chooses to re-create one of the objects with the correct type. The new object will be created on the statement's memroot and will be freed at the end of the statement. This can cause problem when subsequent statements access the same table. Root cause: ----------- Currently Item_int_with_ref class has no field_type and defaults to an integer. convert_constant_item() decides to re-create the objects based on the field_type even when a re-create will only result in a new Item_int_with_ref object. Solution: --------- Add a field_type to Item_int_with_ref. This will make sure that convert_constant_item() can distinguish if a new object is actually neccessary. This fix also addresses Bug #26881924 and Bug #26881874. This problem was fixed in trunk by Roy's Bug#25221172. --- sql/item.h | 15 ++++++++------- sql/item_cmpfunc.cc | 4 ++-- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/sql/item.h b/sql/item.h index 95312a14502e..1313685b29c9 100644 --- a/sql/item.h +++ b/sql/item.h @@ -4506,6 +4506,8 @@ class Item_ref_null_helper: public Item_ref class Item_int_with_ref :public Item_int { +private: + enum_field_types cached_field_type; protected: Item *ref; type_conversion_status save_in_field_inner(Field *field, bool no_conversions) @@ -4513,13 +4515,16 @@ class Item_int_with_ref :public Item_int return ref->save_in_field(field, no_conversions); } public: - Item_int_with_ref(longlong i, Item *ref_arg, my_bool unsigned_arg) : - Item_int(i), ref(ref_arg) + Item_int_with_ref(enum_field_types field_type_arg, + longlong i, Item *ref_arg, my_bool unsigned_arg) : + Item_int(i), cached_field_type(field_type_arg), ref(ref_arg) + { unsigned_flag= unsigned_arg; } Item *clone_item(); virtual Item *real_item() { return ref; } + enum_field_types field_type() const { return cached_field_type; } }; @@ -4528,18 +4533,14 @@ class Item_int_with_ref :public Item_int */ class Item_temporal_with_ref :public Item_int_with_ref { -private: - enum_field_types cached_field_type; public: Item_temporal_with_ref(enum_field_types field_type_arg, uint8 decimals_arg, longlong i, Item *ref_arg, bool unsigned_flag): - Item_int_with_ref(i, ref_arg, unsigned_flag), - cached_field_type(field_type_arg) + Item_int_with_ref(field_type_arg, i, ref_arg, unsigned_flag) { decimals= decimals_arg; } - enum_field_types field_type() const { return cached_field_type; } void print(String *str, enum_query_type query_type); bool get_date(MYSQL_TIME *ltime, my_time_flags_t fuzzydate) { diff --git a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc index 0b90d3e676dc..405126765f7c 100644 --- a/sql/item_cmpfunc.cc +++ b/sql/item_cmpfunc.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -598,7 +598,7 @@ static bool convert_constant_item(THD *thd, Item_field *field_item, (*item)->val_date_temporal(), *item) : #endif - new Item_int_with_ref(field->val_int(), *item, + new Item_int_with_ref(field->type(), field->val_int(), *item, MY_TEST(field->flags & UNSIGNED_FLAG)); if (tmp) thd->change_item_tree(item, tmp); From 1633025181143314dfeb34e24d1da7c422d12c94 Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Thu, 12 Oct 2017 07:39:16 +0200 Subject: [PATCH 0116/1221] From 74af7fb526ceded649fc6d44927e0f43b62c0268 Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Thu, 12 Oct 2017 13:09:15 +0200 Subject: [PATCH 0117/1221] From 36f7f47b808a8374e0fcef9c7f42db4c13c5df0b Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Thu, 12 Oct 2017 11:47:17 +0200 Subject: [PATCH 0118/1221] Bug#26021187 OVERFLOW IN DIGEST_ADD_TOKEN MySQL Bug 86209 Overflow in digest_add_token Before this fix, some queries could cause an overflow in the digest code, in function digest_add_token(). External contribution from: - Laurynas Biveinis - Roel van de Paar Please see the original contribution attached to the bug report for: - the root cause analysis - the test cases - the rationale for the fix - the full change set comments. --- sql/sql_digest.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sql/sql_digest.cc b/sql/sql_digest.cc index 74223c63b3da..b64d59ffe570 100644 --- a/sql/sql_digest.cc +++ b/sql/sql_digest.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2008, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2008, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -597,6 +597,8 @@ sql_digest_state* digest_add_token(sql_digest_state *state, } case 0: { + if (digest_storage->m_byte_count < SIZE_OF_A_TOKEN) + break; unsigned int temp_tok; read_token(digest_storage, digest_storage->m_byte_count-SIZE_OF_A_TOKEN, From f7cc223ebcf2a4c1df5dbeac5ed22e43991c0c7f Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Thu, 12 Oct 2017 21:25:17 +0200 Subject: [PATCH 0119/1221] From 99be214e1f8f047787469c0c733b914e00121fb1 Mon Sep 17 00:00:00 2001 From: Balasubramanian Kandasamy Date: Fri, 13 Oct 2017 12:52:55 +0530 Subject: [PATCH 0120/1221] Bug#26963839 - SERVER FAILING TO INSTALL ON FEDORA 27 OVER NATIVE MARIADB-CONNECTOR-C-DEVEL.X8 - Due to changes in packages, add more obsoletes to -devel package. --- packaging/rpm-fedora/mysql.spec.in | 1 + 1 file changed, 1 insertion(+) diff --git a/packaging/rpm-fedora/mysql.spec.in b/packaging/rpm-fedora/mysql.spec.in index a055b188cee5..f6468b84c5a7 100644 --- a/packaging/rpm-fedora/mysql.spec.in +++ b/packaging/rpm-fedora/mysql.spec.in @@ -233,6 +233,7 @@ Requires: mysql-commercial-libs%{?_isa} >= %{min} Requires: mysql-community-libs%{?_isa} >= %{min} %endif Obsoletes: mariadb-devel +Obsoletes: mariadb-connector-c-devel Obsoletes: community-mysql-devel < %{version}-%{release} Obsoletes: mysql-devel < %{version}-%{release} Provides: mysql-devel = %{version}-%{release} From f8580833f8bafd6fd1ebe4dc445b85239e0c8449 Mon Sep 17 00:00:00 2001 From: Sergey Glukhov Date: Fri, 13 Oct 2017 10:31:32 +0300 Subject: [PATCH 0121/1221] Bug#26877788 SELECT FROM INFORMATION_SCHEMA.FILES RETURNS NO RECORDS WHEN ORDER BY IS USED During subquery materialization table list is modified so that empty JOIN_TAB table is inserted in the middle of table list. It leads to interruption of the loop in get_schema_tables_result() function and tables which are after empty JOIN_TAB are not processed. The fix: Do not interrupt the loop on empty JOIN_TAB. --- mysql-test/r/information_schema.result | 36 ++++++++++++++++++++++++++ mysql-test/t/information_schema.test | 28 ++++++++++++++++++++ sql/sql_show.cc | 4 +-- 3 files changed, 66 insertions(+), 2 deletions(-) diff --git a/mysql-test/r/information_schema.result b/mysql-test/r/information_schema.result index fce2f40dd89b..4713afa0fde7 100644 --- a/mysql-test/r/information_schema.result +++ b/mysql-test/r/information_schema.result @@ -2114,5 +2114,41 @@ DROP TABLE t1; CREATE PROCEDURE information_schema.is() BEGIN END; ERROR 42000: Access denied for user 'root'@'localhost' to database 'information_schema' # +# Bug#26877788 SELECT FROM INFORMATION_SCHEMA.FILES RETURNS NO RECORDS WHEN ORDER BY IS USED +# +EXPLAIN SELECT ENGINE, SUPPORT, TRANSACTIONS FROM INFORMATION_SCHEMA.ENGINES +WHERE +SUPPORT IN ( +SELECT DISTINCT SUPPORT +FROM INFORMATION_SCHEMA.ENGINES +WHERE +ENGINE IN ( +SELECT DISTINCT ENGINE FROM INFORMATION_SCHEMA.ENGINES +WHERE ENGINE IN ('MEMORY'))) +ORDER BY ENGINE; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE ENGINES ALL NULL NULL NULL NULL NULL Using where; Using filesort +1 SIMPLE eq_ref 26 information_schema.ENGINES.SUPPORT 1 NULL +2 MATERIALIZED ENGINES ALL NULL NULL NULL NULL NULL Using where +2 MATERIALIZED ENGINES ALL NULL NULL NULL NULL NULL Using where; Using join buffer (Block Nested Loop) +SELECT ENGINE, SUPPORT, TRANSACTIONS FROM INFORMATION_SCHEMA.ENGINES +WHERE +SUPPORT IN ( +SELECT DISTINCT SUPPORT +FROM INFORMATION_SCHEMA.ENGINES +WHERE +ENGINE IN ( +SELECT DISTINCT ENGINE FROM INFORMATION_SCHEMA.ENGINES +WHERE ENGINE IN ('MEMORY'))) +ORDER BY ENGINE; +ENGINE SUPPORT TRANSACTIONS +ARCHIVE YES NO +BLACKHOLE YES NO +CSV YES NO +InnoDB YES YES +MEMORY YES NO +MRG_MYISAM YES NO +PERFORMANCE_SCHEMA YES NO +# # End of 5.6 tests # diff --git a/mysql-test/t/information_schema.test b/mysql-test/t/information_schema.test index e70155b59217..08c5b42f33e8 100644 --- a/mysql-test/t/information_schema.test +++ b/mysql-test/t/information_schema.test @@ -1878,6 +1878,34 @@ DROP TABLE t1; --error ER_DBACCESS_DENIED_ERROR CREATE PROCEDURE information_schema.is() BEGIN END; + +--echo # +--echo # Bug#26877788 SELECT FROM INFORMATION_SCHEMA.FILES RETURNS NO RECORDS WHEN ORDER BY IS USED +--echo # + +EXPLAIN SELECT ENGINE, SUPPORT, TRANSACTIONS FROM INFORMATION_SCHEMA.ENGINES +WHERE +SUPPORT IN ( +SELECT DISTINCT SUPPORT +FROM INFORMATION_SCHEMA.ENGINES +WHERE +ENGINE IN ( +SELECT DISTINCT ENGINE FROM INFORMATION_SCHEMA.ENGINES +WHERE ENGINE IN ('MEMORY'))) +ORDER BY ENGINE; + +SELECT ENGINE, SUPPORT, TRANSACTIONS FROM INFORMATION_SCHEMA.ENGINES +WHERE +SUPPORT IN ( +SELECT DISTINCT SUPPORT +FROM INFORMATION_SCHEMA.ENGINES +WHERE +ENGINE IN ( +SELECT DISTINCT ENGINE FROM INFORMATION_SCHEMA.ENGINES +WHERE ENGINE IN ('MEMORY'))) +ORDER BY ENGINE; + + --echo # --echo # End of 5.6 tests --echo # diff --git a/sql/sql_show.cc b/sql/sql_show.cc index aac58f70e498..4a73a0de167c 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -7484,7 +7484,7 @@ bool get_schema_tables_result(JOIN *join, { JOIN_TAB *const tab= join->join_tab + i; if (!tab->table || !tab->table->pos_in_table_list) - break; + continue; TABLE_LIST *table_list= tab->table->pos_in_table_list; if (table_list->schema_table && thd->fill_information_schema_tables()) From 7b26dc98a624d5cdf79cd5eee455cb03e3bccb5a Mon Sep 17 00:00:00 2001 From: Aditya A Date: Fri, 13 Oct 2017 21:33:43 +0530 Subject: [PATCH 0122/1221] Bug #26191879 FOREIGN KEY CASCADES USE EXCESSIVE MEMORY PROBLEM The iterative approach used in the fix of Bug 16244691 was causing excessive memory usage when doing a cascade operation owing to the fact that for each row being updated we were allocating a update node from heap and this memory was not getting released to OS even after completion of delete. FIX We went back to recursive approach of cascading operation instead of iterative approach . --- .../innodb/r/innodb-index-online-fk.result | 1 + mysql-test/suite/innodb/r/innodb.result | 77 +---- .../suite/innodb/r/update-cascade.result | 2 - mysql-test/suite/innodb/t/innodb.test | 73 +---- storage/innobase/handler/ha_innopart.cc | 3 +- storage/innobase/include/dict0mem.h | 9 +- storage/innobase/include/row0mysql.h | 12 + storage/innobase/include/row0upd.h | 64 +--- storage/innobase/que/que0que.cc | 11 +- storage/innobase/row/row0ins.cc | 68 ++--- storage/innobase/row/row0mysql.cc | 283 +++++++----------- storage/innobase/row/row0upd.cc | 70 +---- 12 files changed, 194 insertions(+), 479 deletions(-) diff --git a/mysql-test/suite/innodb/r/innodb-index-online-fk.result b/mysql-test/suite/innodb/r/innodb-index-online-fk.result index dc3c5e6a0dda..ea3a6eed5272 100644 --- a/mysql-test/suite/innodb/r/innodb-index-online-fk.result +++ b/mysql-test/suite/innodb/r/innodb-index-online-fk.result @@ -86,6 +86,7 @@ child CREATE TABLE `child` ( DELETE FROM parent where a = 1; SELECT * FROM child; a1 a2 +1 NULL 2 3 10 20 SET foreign_key_checks = 0; diff --git a/mysql-test/suite/innodb/r/innodb.result b/mysql-test/suite/innodb/r/innodb.result index 1fc474446fe0..b6146afe6890 100644 --- a/mysql-test/suite/innodb/r/innodb.result +++ b/mysql-test/suite/innodb/r/innodb.result @@ -1383,80 +1383,17 @@ INSERT INTO t2 VALUES (10, 'old'), (20, 'other'); UPDATE t1 SET c1 = 'other' WHERE c1 = 'old'; ERROR 23000: Foreign key constraint for table 't1', record 'other-somevalu' would lead to a duplicate entry in table 't2', key 'c1' DROP TABLE t2,t1; -call mtr.add_suppression("Cannot delete/update rows with cascading foreign key constraints that exceed max depth of 255. Please drop excessive foreign constraints and try again"); +call mtr.add_suppression("Cannot delete/update rows with cascading foreign key constraints that exceed max depth of 15. Please drop excessive foreign constraints and try again"); create table t1( id int primary key, pid int, index(pid), foreign key(pid) references t1(id) on delete cascade) engine=innodb; -insert into t1 values -( 0, 0), ( 1, 0), ( 2, 1), ( 3, 2), -( 4, 3), ( 5, 4), ( 6, 5), ( 7, 6), -( 8, 7), ( 9, 8), ( 10, 9), ( 11, 10), -( 12, 11), ( 13, 12), ( 14, 13), ( 15, 14), -( 16, 15), ( 17, 16), ( 18, 17), ( 19, 18), -( 20, 19), ( 21, 20), ( 22, 21), ( 23, 22), -( 24, 23), ( 25, 24), ( 26, 25), ( 27, 26), -( 28, 27), ( 29, 28), ( 30, 29), ( 31, 30), -( 32, 31), ( 33, 32), ( 34, 33), ( 35, 34), -( 36, 35), ( 37, 36), ( 38, 37), ( 39, 38), -( 40, 39), ( 41, 40), ( 42, 41), ( 43, 42), -( 44, 43), ( 45, 44), ( 46, 45), ( 47, 46), -( 48, 47), ( 49, 48), ( 50, 49), ( 51, 50), -( 52, 51), ( 53, 52), ( 54, 53), ( 55, 54), -( 56, 55), ( 57, 56), ( 58, 57), ( 59, 58), -( 60, 59), ( 61, 60), ( 62, 61), ( 63, 62), -( 64, 63), ( 65, 64), ( 66, 65), ( 67, 66), -( 68, 67), ( 69, 68), ( 70, 69), ( 71, 70), -( 72, 71), ( 73, 72), ( 74, 73), ( 75, 74), -( 76, 75), ( 77, 76), ( 78, 77), ( 79, 78), -( 80, 79), ( 81, 80), ( 82, 81), ( 83, 82), -( 84, 83), ( 85, 84), ( 86, 85), ( 87, 86), -( 88, 87), ( 89, 88), ( 90, 89), ( 91, 90), -( 92, 91), ( 93, 92), ( 94, 93), ( 95, 94), -( 96, 95), ( 97, 96), ( 98, 97), ( 99, 98), -(100, 99), (101, 100), (102, 101), (103, 102), -(104, 103), (105, 104), (106, 105), (107, 106), -(108, 107), (109, 108), (110, 109), (111, 110), -(112, 111), (113, 112), (114, 113), (115, 114), -(116, 115), (117, 116), (118, 117), (119, 118), -(120, 119), (121, 120), (122, 121), (123, 122), -(124, 123), (125, 124), (126, 125), (127, 126), -(128, 127), (129, 128), (130, 129), (131, 130), -(132, 131), (133, 132), (134, 133), (135, 134), -(136, 135), (137, 136), (138, 137), (139, 138), -(140, 139), (141, 140), (142, 141), (143, 142), -(144, 143), (145, 144), (146, 145), (147, 146), -(148, 147), (149, 148), (150, 149), (151, 150), -(152, 151), (153, 152), (154, 153), (155, 154), -(156, 155), (157, 156), (158, 157), (159, 158), -(160, 159), (161, 160), (162, 161), (163, 162), -(164, 163), (165, 164), (166, 165), (167, 166), -(168, 167), (169, 168), (170, 169), (171, 170), -(172, 171), (173, 172), (174, 173), (175, 174), -(176, 175), (177, 176), (178, 177), (179, 178), -(180, 179), (181, 180), (182, 181), (183, 182), -(184, 183), (185, 184), (186, 185), (187, 186), -(188, 187), (189, 188), (190, 189), (191, 190), -(192, 191), (193, 192), (194, 193), (195, 194), -(196, 195), (197, 196), (198, 197), (199, 198), -(200, 199), (201, 200), (202, 201), (203, 202), -(204, 203), (205, 204), (206, 205), (207, 206), -(208, 207), (209, 208), (210, 209), (211, 210), -(212, 211), (213, 212), (214, 213), (215, 214), -(216, 215), (217, 216), (218, 217), (219, 218), -(220, 219), (221, 220), (222, 221), (223, 222), -(224, 223), (225, 224), (226, 225), (227, 226), -(228, 227), (229, 228), (230, 229), (231, 230), -(232, 231), (233, 232), (234, 233), (235, 234), -(236, 235), (237, 236), (238, 237), (239, 238), -(240, 239), (241, 240), (242, 241), (243, 242), -(244, 243), (245, 244), (246, 245), (247, 246), -(248, 247), (249, 248), (250, 249), (251, 250), -(252, 251), (253, 252), (254, 253), (255, 254); +insert into t1 values(0,0),(1,0),(2,1),(3,2),(4,3),(5,4),(6,5),(7,6), +(8,7),(9,8),(10,9),(11,10),(12,11),(13,12),(14,13),(15,14); delete from t1 where id=0; -ERROR HY000: Foreign key cascade delete/update exceeds max depth of 255. -delete from t1 where id=255; +ERROR HY000: Foreign key cascade delete/update exceeds max depth of 15. +delete from t1 where id=15; delete from t1 where id=0; drop table t1; CREATE TABLE t1 (col1 int(1))ENGINE=InnoDB; @@ -1819,10 +1756,10 @@ variable_value {checked_valid} SELECT variable_value - @innodb_rows_deleted_orig FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_rows_deleted'; variable_value - @innodb_rows_deleted_orig -311 +71 SELECT variable_value - @innodb_rows_inserted_orig FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_rows_inserted'; variable_value - @innodb_rows_inserted_orig -1206 +966 SELECT variable_value - @innodb_rows_updated_orig FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_rows_updated'; variable_value - @innodb_rows_updated_orig 866 diff --git a/mysql-test/suite/innodb/r/update-cascade.result b/mysql-test/suite/innodb/r/update-cascade.result index 8a087b9ece95..3d57dcde90ff 100644 --- a/mysql-test/suite/innodb/r/update-cascade.result +++ b/mysql-test/suite/innodb/r/update-cascade.result @@ -179,7 +179,6 @@ set session transaction isolation level read uncommitted; start transaction; select f1, right(f2, 20) as p2 from t1; f1 p2 -10 -------------------- select f1, right(f2, 20) as p2 from t2; f1 p2 select f1, right(f2, 20) as p2 from t3; @@ -270,7 +269,6 @@ set session transaction isolation level read uncommitted; start transaction; select f1, f2 from t1; f1 f2 -2 28 select f1, f2 from t2; f1 f2 select f1, f2 from t3; diff --git a/mysql-test/suite/innodb/t/innodb.test b/mysql-test/suite/innodb/t/innodb.test index 817d23896d43..679d251d7fa5 100644 --- a/mysql-test/suite/innodb/t/innodb.test +++ b/mysql-test/suite/innodb/t/innodb.test @@ -1054,84 +1054,23 @@ INSERT INTO t2 VALUES (10, 'old'), (20, 'other'); UPDATE t1 SET c1 = 'other' WHERE c1 = 'old'; DROP TABLE t2,t1; + # # test for FK cascade depth limit # -call mtr.add_suppression("Cannot delete/update rows with cascading foreign key constraints that exceed max depth of 255. Please drop excessive foreign constraints and try again"); +call mtr.add_suppression("Cannot delete/update rows with cascading foreign key constraints that exceed max depth of 15. Please drop excessive foreign constraints and try again"); create table t1( id int primary key, pid int, index(pid), foreign key(pid) references t1(id) on delete cascade) engine=innodb; -insert into t1 values -( 0, 0), ( 1, 0), ( 2, 1), ( 3, 2), -( 4, 3), ( 5, 4), ( 6, 5), ( 7, 6), -( 8, 7), ( 9, 8), ( 10, 9), ( 11, 10), -( 12, 11), ( 13, 12), ( 14, 13), ( 15, 14), -( 16, 15), ( 17, 16), ( 18, 17), ( 19, 18), -( 20, 19), ( 21, 20), ( 22, 21), ( 23, 22), -( 24, 23), ( 25, 24), ( 26, 25), ( 27, 26), -( 28, 27), ( 29, 28), ( 30, 29), ( 31, 30), -( 32, 31), ( 33, 32), ( 34, 33), ( 35, 34), -( 36, 35), ( 37, 36), ( 38, 37), ( 39, 38), -( 40, 39), ( 41, 40), ( 42, 41), ( 43, 42), -( 44, 43), ( 45, 44), ( 46, 45), ( 47, 46), -( 48, 47), ( 49, 48), ( 50, 49), ( 51, 50), -( 52, 51), ( 53, 52), ( 54, 53), ( 55, 54), -( 56, 55), ( 57, 56), ( 58, 57), ( 59, 58), -( 60, 59), ( 61, 60), ( 62, 61), ( 63, 62), -( 64, 63), ( 65, 64), ( 66, 65), ( 67, 66), -( 68, 67), ( 69, 68), ( 70, 69), ( 71, 70), -( 72, 71), ( 73, 72), ( 74, 73), ( 75, 74), -( 76, 75), ( 77, 76), ( 78, 77), ( 79, 78), -( 80, 79), ( 81, 80), ( 82, 81), ( 83, 82), -( 84, 83), ( 85, 84), ( 86, 85), ( 87, 86), -( 88, 87), ( 89, 88), ( 90, 89), ( 91, 90), -( 92, 91), ( 93, 92), ( 94, 93), ( 95, 94), -( 96, 95), ( 97, 96), ( 98, 97), ( 99, 98), -(100, 99), (101, 100), (102, 101), (103, 102), -(104, 103), (105, 104), (106, 105), (107, 106), -(108, 107), (109, 108), (110, 109), (111, 110), -(112, 111), (113, 112), (114, 113), (115, 114), -(116, 115), (117, 116), (118, 117), (119, 118), -(120, 119), (121, 120), (122, 121), (123, 122), -(124, 123), (125, 124), (126, 125), (127, 126), -(128, 127), (129, 128), (130, 129), (131, 130), -(132, 131), (133, 132), (134, 133), (135, 134), -(136, 135), (137, 136), (138, 137), (139, 138), -(140, 139), (141, 140), (142, 141), (143, 142), -(144, 143), (145, 144), (146, 145), (147, 146), -(148, 147), (149, 148), (150, 149), (151, 150), -(152, 151), (153, 152), (154, 153), (155, 154), -(156, 155), (157, 156), (158, 157), (159, 158), -(160, 159), (161, 160), (162, 161), (163, 162), -(164, 163), (165, 164), (166, 165), (167, 166), -(168, 167), (169, 168), (170, 169), (171, 170), -(172, 171), (173, 172), (174, 173), (175, 174), -(176, 175), (177, 176), (178, 177), (179, 178), -(180, 179), (181, 180), (182, 181), (183, 182), -(184, 183), (185, 184), (186, 185), (187, 186), -(188, 187), (189, 188), (190, 189), (191, 190), -(192, 191), (193, 192), (194, 193), (195, 194), -(196, 195), (197, 196), (198, 197), (199, 198), -(200, 199), (201, 200), (202, 201), (203, 202), -(204, 203), (205, 204), (206, 205), (207, 206), -(208, 207), (209, 208), (210, 209), (211, 210), -(212, 211), (213, 212), (214, 213), (215, 214), -(216, 215), (217, 216), (218, 217), (219, 218), -(220, 219), (221, 220), (222, 221), (223, 222), -(224, 223), (225, 224), (226, 225), (227, 226), -(228, 227), (229, 228), (230, 229), (231, 230), -(232, 231), (233, 232), (234, 233), (235, 234), -(236, 235), (237, 236), (238, 237), (239, 238), -(240, 239), (241, 240), (242, 241), (243, 242), -(244, 243), (245, 244), (246, 245), (247, 246), -(248, 247), (249, 248), (250, 249), (251, 250), -(252, 251), (253, 252), (254, 253), (255, 254); +insert into t1 values(0,0),(1,0),(2,1),(3,2),(4,3),(5,4),(6,5),(7,6), +(8,7),(9,8),(10,9),(11,10),(12,11),(13,12),(14,13),(15,14); + --error ER_FK_DEPTH_EXCEEDED delete from t1 where id=0; -delete from t1 where id=255; +delete from t1 where id=15; delete from t1 where id=0; drop table t1; diff --git a/storage/innobase/handler/ha_innopart.cc b/storage/innobase/handler/ha_innopart.cc index d16cc66449e8..3a1cdcc314f3 100644 --- a/storage/innobase/handler/ha_innopart.cc +++ b/storage/innobase/handler/ha_innopart.cc @@ -1399,9 +1399,8 @@ void ha_innopart::clear_ins_upd_nodes() for (uint i = 0; i < m_tot_parts; i++) { if (m_upd_node_parts[i] != NULL) { upd_node_t* upd = m_upd_node_parts[i]; - if (upd->cascade_top) { + if (upd->cascade_heap) { mem_heap_free(upd->cascade_heap); - upd->cascade_top = false; upd->cascade_heap = NULL; } if (upd->in_mysql_interface) { diff --git a/storage/innobase/include/dict0mem.h b/storage/innobase/include/dict0mem.h index c64a2260aff6..1578b572b05a 100644 --- a/storage/innobase/include/dict0mem.h +++ b/storage/innobase/include/dict0mem.h @@ -272,13 +272,14 @@ it is not created by user and so not visible to end-user. */ #define DICT_TF2_FLAG_UNSET(table, flag) \ (table->flags2 &= ~(flag)) + /** Tables could be chained together with Foreign key constraint. When first load the parent table, we would load all of its descedents. This could result in rescursive calls and out of stack error eventually. DICT_FK_MAX_RECURSIVE_LOAD defines the maximum number of recursive loads, when exceeded, the child table will not be loaded. It will be loaded when the foreign constraint check needs to be run. */ -#define DICT_FK_MAX_RECURSIVE_LOAD 20 +#define DICT_FK_MAX_RECURSIVE_LOAD 20 /** Similarly, when tables are chained together with foreign key constraints with on cascading delete/update clause, delete from parent table could @@ -286,7 +287,7 @@ result in recursive cascading calls. This defines the maximum number of such cascading deletes/updates allowed. When exceeded, the delete from parent table will fail, and user has to drop excessive foreign constraint before proceeds. */ -#define FK_MAX_CASCADE_DEL 255 +#define FK_MAX_CASCADE_DEL 15 /**********************************************************************//** Creates a table memory object. @@ -1244,8 +1245,8 @@ struct dict_foreign_set_free { a foreign key constraint is enforced, therefore RESTRICT just means no flag */ /* @{ */ #define DICT_FOREIGN_ON_DELETE_CASCADE 1 /*!< ON DELETE CASCADE */ -#define DICT_FOREIGN_ON_DELETE_SET_NULL 2 /*!< ON UPDATE SET NULL */ -#define DICT_FOREIGN_ON_UPDATE_CASCADE 4 /*!< ON DELETE CASCADE */ +#define DICT_FOREIGN_ON_DELETE_SET_NULL 2 /*!< ON DELETE SET NULL */ +#define DICT_FOREIGN_ON_UPDATE_CASCADE 4 /*!< ON UPDATE CASCADE */ #define DICT_FOREIGN_ON_UPDATE_SET_NULL 8 /*!< ON UPDATE SET NULL */ #define DICT_FOREIGN_ON_DELETE_NO_ACTION 16 /*!< ON DELETE NO ACTION */ #define DICT_FOREIGN_ON_UPDATE_NO_ACTION 32 /*!< ON UPDATE NO ACTION */ diff --git a/storage/innobase/include/row0mysql.h b/storage/innobase/include/row0mysql.h index f2c9dbb06b41..aacbb0bb0709 100644 --- a/storage/innobase/include/row0mysql.h +++ b/storage/innobase/include/row0mysql.h @@ -335,6 +335,18 @@ row_create_update_node_for_mysql( /*=============================*/ dict_table_t* table, /*!< in: table to update */ mem_heap_t* heap); /*!< in: mem heap from which allocated */ + +/**********************************************************************//** +Does a cascaded delete or set null in a foreign key operation. +@return error code or DB_SUCCESS */ +dberr_t +row_update_cascade_for_mysql( +/*=========================*/ + que_thr_t* thr, /*!< in: query thread */ + upd_node_t* node, /*!< in: update node used in the cascade + or set null operation */ + dict_table_t* table) /*!< in: table where we do the operation */ + MY_ATTRIBUTE((nonnull, warn_unused_result)); /*********************************************************************//** Locks the data dictionary exclusively for performing a table create or other data dictionary modification operation. */ diff --git a/storage/innobase/include/row0upd.h b/storage/innobase/include/row0upd.h index 178ba3cc782b..14917985230a 100644 --- a/storage/innobase/include/row0upd.h +++ b/storage/innobase/include/row0upd.h @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2017, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -40,15 +40,6 @@ Created 12/27/1996 Heikki Tuuri # include "pars0types.h" #endif /* !UNIV_HOTBACKUP */ -/** The std::deque to store cascade update nodes, that uses mem_heap_t -as allocator. */ -typedef std::deque > - deque_mem_heap_t; - -/** Double-ended queue of update nodes to be processed for cascade -operations */ -typedef deque_mem_heap_t upd_cascade_t; - /*********************************************************************//** Creates an update vector object. @return own: update vector object */ @@ -530,38 +521,12 @@ struct upd_node_t{ dict_foreign_t* foreign;/* NULL or pointer to a foreign key constraint if this update node is used in doing an ON DELETE or ON UPDATE operation */ - - bool cascade_top; - /*!< true if top level in cascade */ - - upd_cascade_t* cascade_upd_nodes; - /*!< Queue of update nodes to handle the - cascade of update and delete operations in an - iterative manner. Their parent/child - relations are properly maintained. All update - nodes point to this same queue. All these - nodes are allocated in heap pointed to by - upd_node_t::cascade_heap. */ - - upd_cascade_t* new_upd_nodes; - /*!< Intermediate list of update nodes in a - cascading update/delete operation. After - processing one update node, this will be - concatenated to cascade_upd_nodes. This extra - list is needed so that retry because of - DB_LOCK_WAIT works corrrectly. */ - - upd_cascade_t* processed_cascades; - /*!< List of processed update nodes in a - cascading update/delete operation. All the - cascade nodes are stored here, so that memory - can be freed. */ - + upd_node_t* cascade_node;/* NULL or an update node template which + is used to implement ON DELETE/UPDATE CASCADE + or ... SET NULL for foreign keys */ mem_heap_t* cascade_heap; - /*!< NULL or a mem heap where cascade_upd_nodes - are created. This heap is owned by the node - that has cascade_top=true. */ - + /*!< NULL or a mem heap where cascade + node is created.*/ sel_node_t* select; /*!< query graph subtree implementing a base table cursor: the rows returned will be updated */ @@ -608,25 +573,8 @@ struct upd_node_t{ sym_node_t* table_sym;/* table node in symbol table */ que_node_t* col_assign_list; /* column assignment list */ - - doc_id_t fts_doc_id; - /* The FTS doc id of the row that is now - pointed to by the pcur. */ - - doc_id_t fts_next_doc_id; - /* The new fts doc id that will be used - in update operation */ - ulint magic_n; -#ifndef DBUG_OFF - /** Print information about this object into the trace log file. */ - void dbug_trace(); - - /** Ensure that the member cascade_upd_nodes has only one update node - for each of the tables. This is useful for testing purposes. */ - void check_cascade_only_once(); -#endif /* !DBUG_OFF */ }; #define UPD_NODE_MAGIC_N 1579975 diff --git a/storage/innobase/que/que0que.cc b/storage/innobase/que/que0que.cc index 8d3e8cfa115d..afe10f0fc769 100644 --- a/storage/innobase/que/que0que.cc +++ b/storage/innobase/que/que0que.cc @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2017, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -485,20 +485,17 @@ que_graph_free_recursive( case QUE_NODE_UPDATE: upd = static_cast(node); - DBUG_PRINT("que_graph_free_recursive", - ("QUE_NODE_UPDATE: %p, processed_cascades: %p", - upd, upd->processed_cascades)); - if (upd->in_mysql_interface) { btr_pcur_free_for_mysql(upd->pcur); upd->in_mysql_interface = FALSE; } - if (upd->cascade_top) { + que_graph_free_recursive(upd->cascade_node); + + if (upd->cascade_heap) { mem_heap_free(upd->cascade_heap); upd->cascade_heap = NULL; - upd->cascade_top = false; } que_graph_free_recursive(upd->select); diff --git a/storage/innobase/row/row0ins.cc b/storage/innobase/row/row0ins.cc index b4eb8ebb5c55..e60184b00a3d 100644 --- a/storage/innobase/row/row0ins.cc +++ b/storage/innobase/row/row0ins.cc @@ -484,10 +484,10 @@ row_ins_cascade_calc_update_vec( mem_heap_t* heap, /*!< in: memory heap to use as temporary storage */ trx_t* trx, /*!< in: update transaction */ - ibool* fts_col_affected, + ibool* fts_col_affected) /*!< out: is FTS column affected */ - upd_node_t* cascade) /*!< in: cascade update node */ { + upd_node_t* cascade = node->cascade_node; dict_table_t* table = foreign->foreign_table; dict_index_t* index = foreign->foreign_index; upd_t* update; @@ -710,13 +710,13 @@ row_ins_cascade_calc_update_vec( fts_get_next_doc_id(table, next_doc_id); doc_id = fts_update_doc_id(table, ufield, next_doc_id); n_fields_updated++; - cascade->fts_next_doc_id = doc_id; + fts_trx_add_op(trx, table, doc_id, FTS_INSERT, NULL); } else { if (doc_id_updated) { ut_ad(new_doc_id); - cascade->fts_next_doc_id = new_doc_id; + fts_trx_add_op(trx, table, new_doc_id, + FTS_INSERT, NULL); } else { - cascade->fts_next_doc_id = FTS_NULL_DOC_ID; ib::error() << "FTS Doc ID must be updated" " along with FTS indexed column for" " table " << table->name; @@ -1118,20 +1118,15 @@ row_ins_foreign_check_on_constraint( DBUG_RETURN(DB_ROW_IS_REFERENCED); } - cascade = row_create_update_node_for_mysql(table, node->cascade_heap); - que_node_set_parent(cascade, node); - - /* For the cascaded operation, all the update nodes are allocated in - the same heap. All the update nodes will point to the same heap. - This heap is owned by the first update node. And it must be freed - only in the first update node */ - cascade->cascade_heap = node->cascade_heap; - cascade->cascade_upd_nodes = node->cascade_upd_nodes; - cascade->new_upd_nodes = node->new_upd_nodes; - cascade->processed_cascades = node->processed_cascades; + if (node->cascade_node == NULL) { + node->cascade_heap = mem_heap_create(128); + node->cascade_node = row_create_update_node_for_mysql( + table, node->cascade_heap); + que_node_set_parent(node->cascade_node, node); + } + cascade = node->cascade_node; cascade->table = table; - cascade->foreign = foreign; if (node->is_delete @@ -1274,17 +1269,8 @@ row_ins_foreign_check_on_constraint( if (node->is_delete ? (foreign->type & DICT_FOREIGN_ON_DELETE_SET_NULL) : (foreign->type & DICT_FOREIGN_ON_UPDATE_SET_NULL)) { - /* Build the appropriate update vector which sets foreign->n_fields first fields in rec to SQL NULL */ - if (table->fts) { - - /* For the clause ON DELETE SET NULL, the cascade - operation is actually an update operation with the new - values being null. For FTS, this means that the old - values be deleted and no new values to be added.*/ - cascade->fts_next_doc_id = FTS_NULL_DOC_ID; - } update = cascade->update; @@ -1319,7 +1305,7 @@ row_ins_foreign_check_on_constraint( } if (fts_col_affacted) { - cascade->fts_doc_id = doc_id; + fts_trx_add_op(trx, table, doc_id, FTS_DELETE, NULL); } if (foreign->v_cols != NULL @@ -1347,7 +1333,7 @@ row_ins_foreign_check_on_constraint( } if (fts_col_affacted) { - cascade->fts_doc_id = doc_id; + fts_trx_add_op(trx, table, doc_id, FTS_DELETE, NULL); } } @@ -1358,8 +1344,8 @@ row_ins_foreign_check_on_constraint( foreign->n_fields first fields in rec to new values */ n_to_update = row_ins_cascade_calc_update_vec( - node, foreign, cascade->cascade_heap, - trx, &fts_col_affacted, cascade); + node, foreign, tmp_heap, + trx, &fts_col_affacted); if (foreign->v_cols != NULL @@ -1402,7 +1388,7 @@ row_ins_foreign_check_on_constraint( /* Mark the old Doc ID as deleted */ if (fts_col_affacted) { ut_ad(table->fts); - cascade->fts_doc_id = doc_id; + fts_trx_add_op(trx, table, doc_id, FTS_DELETE, NULL); } } @@ -1423,11 +1409,8 @@ row_ins_foreign_check_on_constraint( cascade->state = UPD_NODE_UPDATE_CLUSTERED; - node->new_upd_nodes->push_back(cascade); - - os_atomic_increment_ulint(&table->n_foreign_key_checks_running, 1); - - ut_ad(foreign->foreign_table->n_foreign_key_checks_running > 0); + err = row_update_cascade_for_mysql(thr, cascade, + foreign->foreign_table); /* Release the data dictionary latch for a while, so that we do not starve other threads from doing CREATE TABLE etc. if we have a huge @@ -1454,7 +1437,6 @@ row_ins_foreign_check_on_constraint( DBUG_RETURN(err); nonstandard_exit_func: - que_graph_free_recursive(cascade); if (tmp_heap) { mem_heap_free(tmp_heap); @@ -1883,7 +1865,6 @@ row_ins_check_foreign_constraint( goto exit_func; } - } @@ -1929,6 +1910,7 @@ row_ins_check_foreign_constraints( if (foreign->foreign_index == index) { dict_table_t* ref_table = NULL; + dict_table_t* foreign_table = foreign->foreign_table; dict_table_t* referenced_table = foreign->referenced_table; @@ -1945,6 +1927,11 @@ row_ins_check_foreign_constraints( row_mysql_freeze_data_dictionary(trx); } + if (referenced_table) { + os_atomic_increment_ulint( + &foreign_table->n_foreign_key_checks_running, 1); + } + /* NOTE that if the thread ends up waiting for a lock we will release dict_operation_lock temporarily! But the counter on the table protects the referenced @@ -1953,6 +1940,11 @@ row_ins_check_foreign_constraints( err = row_ins_check_foreign_constraint( TRUE, foreign, table, entry, thr); + if (referenced_table) { + os_atomic_decrement_ulint( + &foreign_table->n_foreign_key_checks_running, 1); + } + if (got_s_lock) { row_mysql_unfreeze_data_dictionary(trx); } diff --git a/storage/innobase/row/row0mysql.cc b/storage/innobase/row/row0mysql.cc index 613b572e4a3e..e95a3805e4c4 100644 --- a/storage/innobase/row/row0mysql.cc +++ b/storage/innobase/row/row0mysql.cc @@ -1927,8 +1927,6 @@ row_create_update_node_for_mysql( node->table_sym = NULL; node->col_assign_list = NULL; - node->fts_doc_id = FTS_NULL_DOC_ID; - node->fts_next_doc_id = UINT64_UNDEFINED; DBUG_RETURN(node); } @@ -1982,9 +1980,9 @@ row_fts_do_update( doc_id_t old_doc_id, /* in: old document id */ doc_id_t new_doc_id) /* in: new document id */ { - fts_trx_add_op(trx, table, old_doc_id, FTS_DELETE, NULL); - - if (new_doc_id != FTS_NULL_DOC_ID) { + if(trx->fts_next_doc_id) { + fts_trx_add_op(trx, table, old_doc_id, FTS_DELETE, NULL); + if(new_doc_id != FTS_NULL_DOC_ID) fts_trx_add_op(trx, table, new_doc_id, FTS_INSERT, NULL); } } @@ -1996,24 +1994,30 @@ static dberr_t row_fts_update_or_delete( /*=====================*/ - trx_t* trx, - upd_node_t* node) /* in: prebuilt struct in MySQL + row_prebuilt_t* prebuilt) /* in: prebuilt struct in MySQL handle */ { - dict_table_t* table = node->table; - doc_id_t old_doc_id = node->fts_doc_id; + trx_t* trx = prebuilt->trx; + dict_table_t* table = prebuilt->table; + upd_node_t* node = prebuilt->upd_node; + doc_id_t old_doc_id = prebuilt->fts_doc_id; + DBUG_ENTER("row_fts_update_or_delete"); - ut_a(dict_table_has_fts_index(node->table)); + ut_a(dict_table_has_fts_index(prebuilt->table)); /* Deletes are simple; get them out of the way first. */ if (node->is_delete) { /* A delete affects all FTS indexes, so we pass NULL */ fts_trx_add_op(trx, table, old_doc_id, FTS_DELETE, NULL); } else { - doc_id_t new_doc_id = node->fts_next_doc_id; - ut_ad(new_doc_id != UINT64_UNDEFINED); + doc_id_t new_doc_id; + new_doc_id = fts_read_doc_id((byte*) &trx->fts_next_doc_id); + if (new_doc_id == 0) { + ib::error() << "InnoDB FTS: Doc ID cannot be 0"; + return(DB_FTS_INVALID_DOCID); + } row_fts_do_update(trx, table, old_doc_id, new_doc_id); } @@ -2406,9 +2410,6 @@ row_update_for_mysql_using_upd_graph( dict_table_t* table = prebuilt->table; trx_t* trx = prebuilt->trx; ulint fk_depth = 0; - upd_cascade_t* cascade_upd_nodes; - upd_cascade_t* new_upd_nodes; - upd_cascade_t* processed_cascades; bool got_s_lock = false; DBUG_ENTER("row_update_for_mysql_using_upd_graph"); @@ -2457,26 +2458,6 @@ row_update_for_mysql_using_upd_graph( node = prebuilt->upd_node; - if (node->cascade_heap) { - mem_heap_empty(node->cascade_heap); - } else { - node->cascade_heap = mem_heap_create(128); - } - - mem_heap_allocator mem_heap_ator(node->cascade_heap); - - cascade_upd_nodes = new - (mem_heap_ator.allocate(sizeof(upd_cascade_t))) - upd_cascade_t(deque_mem_heap_t(mem_heap_ator)); - - new_upd_nodes = new - (mem_heap_ator.allocate(sizeof(upd_cascade_t))) - upd_cascade_t(deque_mem_heap_t(mem_heap_ator)); - - processed_cascades = new - (mem_heap_ator.allocate(sizeof(upd_cascade_t))) - upd_cascade_t(deque_mem_heap_t(mem_heap_ator)); - clust_index = dict_table_get_first_index(table); if (prebuilt->pcur->btr_cur.index == clust_index) { @@ -2501,38 +2482,18 @@ row_update_for_mysql_using_upd_graph( node->state = UPD_NODE_UPDATE_CLUSTERED; - node->cascade_top = true; - node->cascade_upd_nodes = cascade_upd_nodes; - node->new_upd_nodes = new_upd_nodes; - node->processed_cascades = processed_cascades; - node->fts_doc_id = prebuilt->fts_doc_id; - - if (trx->fts_next_doc_id != UINT64_UNDEFINED) { - node->fts_next_doc_id = fts_read_doc_id( - (byte*) &trx->fts_next_doc_id); - } else { - node->fts_next_doc_id = UINT64_UNDEFINED; - } - ut_ad(!prebuilt->sql_stat_start); que_thr_move_to_run_state_for_mysql(thr, trx); - thr->fk_cascade_depth = 0; run_again: - if (thr->fk_cascade_depth == 1 && trx->dict_operation_lock_mode == 0) { - got_s_lock = true; - row_mysql_freeze_data_dictionary(trx); - } - thr->run_node = node; thr->prev_node = node; + thr->fk_cascade_depth = 0; row_upd_step(thr); - DBUG_EXECUTE_IF("dml_cascade_only_once", node->check_cascade_only_once();); - err = trx->error_state; if (err != DB_SUCCESS) { @@ -2542,23 +2503,9 @@ row_update_for_mysql_using_upd_graph( if (err == DB_RECORD_NOT_FOUND) { trx->error_state = DB_SUCCESS; trx->op_info = ""; - - if (thr->fk_cascade_depth > 0) { - que_graph_free_recursive(node); - } goto error; } - /* Since reporting a plain "duplicate key" error message to - the user in cases where a long CASCADE operation would lead - to a duplicate key in some other table is very confusing, - map duplicate key errors resulting from FK constraints to a - separate error code. */ - if (err == DB_DUPLICATE_KEY && thr->fk_cascade_depth > 0) { - err = DB_FOREIGN_DUPLICATE_KEY; - trx->error_state = err; - } - thr->lock_state= QUE_THR_LOCK_ROW; DEBUG_SYNC(trx->mysql_thd, "row_update_for_mysql_error"); @@ -2568,55 +2515,23 @@ row_update_for_mysql_using_upd_graph( thr->lock_state= QUE_THR_LOCK_NOLOCK; if (was_lock_wait) { - std::for_each(new_upd_nodes->begin(), - new_upd_nodes->end(), - ib_dec_counter()); - std::for_each(new_upd_nodes->begin(), - new_upd_nodes->end(), - que_graph_free_recursive); - node->new_upd_nodes->clear(); goto run_again; } trx->op_info = ""; - - if (thr->fk_cascade_depth > 0) { - que_graph_free_recursive(node); - } goto error; - } else { - - std::copy(node->new_upd_nodes->begin(), - node->new_upd_nodes->end(), - std::back_inserter(*node->cascade_upd_nodes)); - - node->new_upd_nodes->clear(); - } - - if (dict_table_has_fts_index(node->table) - && node->fts_doc_id != FTS_NULL_DOC_ID - && node->fts_next_doc_id != UINT64_UNDEFINED) { - err = row_fts_update_or_delete(trx, node); - ut_a(err == DB_SUCCESS); } - if (thr->fk_cascade_depth > 0) { - /* Processing cascade operation */ - ut_ad(node->table->n_foreign_key_checks_running > 0); - os_atomic_decrement_ulint( - &node->table->n_foreign_key_checks_running, 1); - node->processed_cascades->push_back(node); - } - if (!cascade_upd_nodes->empty()) { - DEBUG_SYNC_C("foreign_constraint_update_cascade"); - node = cascade_upd_nodes->front(); - node->cascade_upd_nodes = cascade_upd_nodes; - cascade_upd_nodes->pop_front(); - thr->fk_cascade_depth++; - prebuilt->m_mysql_table = NULL; + que_thr_stop_for_mysql_no_error(thr, trx); - goto run_again; + if (dict_table_has_fts_index(table) + && trx->fts_next_doc_id != UINT64_UNDEFINED) { + err = row_fts_update_or_delete(prebuilt); + ut_ad(err == DB_SUCCESS); + if (err != DB_SUCCESS) { + goto error; + } } /* Completed cascading operations (if any) */ @@ -2624,32 +2539,6 @@ row_update_for_mysql_using_upd_graph( row_mysql_unfreeze_data_dictionary(trx); } - thr->fk_cascade_depth = 0; - - /* Update the statistics only after completing all cascaded - operations */ - for (upd_cascade_t::iterator i = processed_cascades->begin(); - i != processed_cascades->end(); - ++i) { - - node = *i; - - if (node->is_delete) { - /* Not protected by dict_table_stats_lock() for - performance reasons, we would rather get garbage - in stat_n_rows (which is just an estimate anyway) - than protecting the following code with a latch. */ - dict_table_n_rows_dec(node->table); - - srv_stats.n_rows_deleted.add((size_t)trx->id, 1); - } else { - srv_stats.n_rows_updated.add((size_t)trx->id, 1); - } - - row_update_statistics_if_needed(node->table); - que_graph_free_recursive(node); - } - if (node->is_delete) { /* Not protected by dict_table_stats_lock() for performance reasons, we would rather get garbage in stat_n_rows (which is @@ -2671,45 +2560,12 @@ row_update_for_mysql_using_upd_graph( trx->op_info = ""; - que_thr_stop_for_mysql_no_error(thr, trx); - - DBUG_ASSERT(cascade_upd_nodes->empty()); - DBUG_RETURN(err); error: if (got_s_lock) { row_mysql_unfreeze_data_dictionary(trx); } - - if (thr->fk_cascade_depth > 0) { - ut_ad(node->table->n_foreign_key_checks_running > 0); - os_atomic_decrement_ulint( - &node->table->n_foreign_key_checks_running, 1); - thr->fk_cascade_depth = 0; - } - - /* Reset the table->n_foreign_key_checks_running counter */ - std::for_each(cascade_upd_nodes->begin(), - cascade_upd_nodes->end(), - ib_dec_counter()); - - std::for_each(new_upd_nodes->begin(), - new_upd_nodes->end(), - ib_dec_counter()); - - std::for_each(cascade_upd_nodes->begin(), - cascade_upd_nodes->end(), - que_graph_free_recursive); - - std::for_each(new_upd_nodes->begin(), - new_upd_nodes->end(), - que_graph_free_recursive); - - std::for_each(processed_cascades->begin(), - processed_cascades->end(), - que_graph_free_recursive); - DBUG_RETURN(err); } @@ -2894,6 +2750,95 @@ row_unlock_for_mysql( trx->op_info = ""; } +/**********************************************************************//** +Does a cascaded delete or set null in a foreign key operation. +@return error code or DB_SUCCESS */ +dberr_t +row_update_cascade_for_mysql( +/*=========================*/ + que_thr_t* thr, /*!< in: query thread */ + upd_node_t* node, /*!< in: update node used in the cascade + or set null operation */ + dict_table_t* table) /*!< in: table where we do the operation */ +{ + dberr_t err; + trx_t* trx; + + trx = thr_get_trx(thr); + + /* Increment fk_cascade_depth to record the recursive call depth on + a single update/delete that affects multiple tables chained + together with foreign key relations. */ + thr->fk_cascade_depth++; + + if (thr->fk_cascade_depth > FK_MAX_CASCADE_DEL) { + return(DB_FOREIGN_EXCEED_MAX_CASCADE); + } +run_again: + thr->run_node = node; + thr->prev_node = node; + + DEBUG_SYNC_C("foreign_constraint_update_cascade"); + TABLE *temp = thr->prebuilt->m_mysql_table; + thr->prebuilt->m_mysql_table = NULL ; + row_upd_step(thr); + thr->prebuilt->m_mysql_table = temp; + /* The recursive call for cascading update/delete happens + in above row_upd_step(), reset the counter once we come + out of the recursive call, so it does not accumulate for + different row deletes */ + thr->fk_cascade_depth = 0; + + err = trx->error_state; + + + /* Note that the cascade node is a subnode of another InnoDB + query graph node. We do a normal lock wait in this node, but + all errors are handled by the parent node. */ + + if (err == DB_LOCK_WAIT) { + /* Handle lock wait here */ + + que_thr_stop_for_mysql(thr); + + lock_wait_suspend_thread(thr); + + /* Note that a lock wait may also end in a lock wait timeout, + or this transaction is picked as a victim in selective + deadlock resolution */ + + if (trx->error_state != DB_SUCCESS) { + + return(trx->error_state); + } + + /* Retry operation after a normal lock wait */ + + goto run_again; + } + + if (err != DB_SUCCESS) { + + return(err); + } + + if (node->is_delete) { + /* Not protected by dict_table_stats_lock() for performance + reasons, we would rather get garbage in stat_n_rows (which is + just an estimate anyway) than protecting the following code + with a latch. */ + dict_table_n_rows_dec(table); + + srv_stats.n_rows_deleted.add((size_t)trx->id, 1); + } else { + srv_stats.n_rows_updated.add((size_t)trx->id, 1); + } + + row_update_statistics_if_needed(table); + + return(err); +} + /*********************************************************************//** Checks if a table is such that we automatically created a clustered index on it (on row id). diff --git a/storage/innobase/row/row0upd.cc b/storage/innobase/row/row0upd.cc index 637daf42973f..dd7206500c54 100644 --- a/storage/innobase/row/row0upd.cc +++ b/storage/innobase/row/row0upd.cc @@ -278,9 +278,17 @@ row_upd_check_references_constraints( But the counter on the table protects 'foreign' from being dropped while the check is running. */ + + if (foreign_table) { + os_atomic_increment_ulint(&foreign_table->n_foreign_key_checks_running, 1); + } + err = row_ins_check_foreign_constraint( FALSE, foreign, table, entry, thr); + if (foreign_table) { + os_atomic_decrement_ulint(&foreign_table->n_foreign_key_checks_running, 1); + } if (ref_table != NULL) { dict_table_close(ref_table, FALSE, FALSE); } @@ -301,11 +309,6 @@ row_upd_check_references_constraints( mem_heap_free(heap); DEBUG_SYNC_C("foreign_constraint_check_for_update_done"); - - DBUG_EXECUTE_IF("row_upd_cascade_lock_wait_err", - err = DB_LOCK_WAIT; - DBUG_SET("-d,row_upd_cascade_lock_wait_err");); - DBUG_RETURN(err); } @@ -1989,7 +1992,6 @@ row_upd_store_v_row( cascade update. And virtual column can't be affected, so it is Ok to set it to NULL */ - ut_ad(!node->cascade_top); dfield_set_null(dfield); } else { dfield_t* vfield @@ -3204,60 +3206,4 @@ row_upd_step( DBUG_RETURN(thr); } -#ifndef DBUG_OFF - -/** Ensure that the member cascade_upd_nodes has only one update node -for each of the tables. This is useful for testing purposes. */ -void upd_node_t::check_cascade_only_once() -{ - DBUG_ENTER("upd_node_t::check_cascade_only_once"); - - dbug_trace(); - - for (upd_cascade_t::const_iterator i = cascade_upd_nodes->begin(); - i != cascade_upd_nodes->end(); ++i) { - - const upd_node_t* update_node = *i; - std::string table_name(update_node->table->name.m_name); - ulint count = 0; - - for (upd_cascade_t::const_iterator j - = cascade_upd_nodes->begin(); - j != cascade_upd_nodes->end(); ++j) { - - const upd_node_t* node = *j; - - if (table_name == node->table->name.m_name) { - DBUG_ASSERT(count++ == 0); - } - } - } - - DBUG_VOID_RETURN; -} - -/** Print information about this object into the trace log file. */ -void upd_node_t::dbug_trace() -{ - DBUG_ENTER("upd_node_t::dbug_trace"); - - for (upd_cascade_t::const_iterator i = cascade_upd_nodes->begin(); - i != cascade_upd_nodes->end(); ++i) { - - const upd_node_t* update_node = *i; - DBUG_LOG("upd_node_t", "cascade_upd_nodes: Cascade to table: " - << update_node->table->name); - } - - for (upd_cascade_t::const_iterator j = new_upd_nodes->begin(); - j != new_upd_nodes->end(); ++j) { - - const upd_node_t* update_node = *j; - DBUG_LOG("upd_node_t", "new_upd_nodes: Cascade to table: " - << update_node->table->name); - } - - DBUG_VOID_RETURN; -} -#endif /* !DBUG_OFF */ #endif /* !UNIV_HOTBACKUP */ From fc7c6b668355c8d8bd224588e000065454c7a74d Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Sat, 14 Oct 2017 00:36:30 +0200 Subject: [PATCH 0123/1221] From 6fa258c56c64f028ade6aaa73b11951e5a68c4a0 Mon Sep 17 00:00:00 2001 From: Arun Kuruvila Date: Mon, 16 Oct 2017 15:35:37 +0530 Subject: [PATCH 0124/1221] Bug#26152751: INNODB LEAKS MEMORY, PERFORMANCE_SCHEMA FILE_INSTANCES #SQL-IB3129987-252773.IBD Description:- When a Innodb table is altered numerous times memory growth is observed for PFS file instances. Analysis:- The temporary IBD file instance created during ALTER table (using copy algorithm) is not deleted from PFS. For every ALTER TABLE operation, a residue IBD file instance is created which causes memory growth. This problem is not restricted to Innodb tables alone but also other SE which uses copy algorithm for ALTER TABLE operation. Following is the order of file creation during the ALTER operation which uses copy algorithm :- a) A temporary FRM file (example: temp1.frm) is created and the corresponding file instance entry is made. b) File t1.frm is renamed to temp2.frm and the file instance entry in PFS is not updated. c) File temp1.frm is renamed to t1.frm and the file instance entry in PFS is not updated. d) File temp2.frm is deleted and the file instance entry is not updated since no corresponding entry is found in PFS. Similar sequence is observed for MYI/MYD/IBD/.. files. PFS file instances are not updated during the file rename operation which in turn triggers memory growth. A RENAME operation performed on a table will also trigger similar issue. Even after the rename, FRM/IBD/MYI/MYD... files instance names are not updated in the PFS. Fix:- A new performance schema API "rename_file_close_wait" is introduced to handle the rename of a file, which will take care of adjusting the hash by name. The new API does the following operations: - lf_hash_search to find the old instrumented file. - lf_hash_delete to remove the old name. - fix the file name in PSI_file. - lf_hash_insert to add the new name. --- include/mysql/psi/mysql_file.h | 10 +- include/mysql/psi/psi.h | 13 ++ include/mysql/psi/psi_abi_v1.h.pp | 4 + include/pfs_file_provider.h | 5 +- .../perfschema/r/dml_file_instances.result | 59 +++++++ .../perfschema/t/dml_file_instances.test | 59 +++++++ mysys/psi_noop.c | 9 ++ storage/innobase/include/os0file.h | 6 +- storage/innobase/include/os0file.ic | 2 +- storage/perfschema/pfs.cc | 26 +++ storage/perfschema/pfs_instr.cc | 152 +++++++++++++++++- storage/perfschema/pfs_instr.h | 5 +- storage/perfschema/unittest/pfs_noop-t.cc | 1 + 13 files changed, 339 insertions(+), 12 deletions(-) diff --git a/include/mysql/psi/mysql_file.h b/include/mysql/psi/mysql_file.h index fd28886d7bce..4c75cda8fde3 100644 --- a/include/mysql/psi/mysql_file.h +++ b/include/mysql/psi/mysql_file.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2008, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2008, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -1306,12 +1306,12 @@ inline_mysql_file_rename( struct PSI_file_locker *locker; PSI_file_locker_state state; locker= PSI_FILE_CALL(get_thread_file_name_locker) - (&state, key, PSI_FILE_RENAME, to, &locker); + (&state, key, PSI_FILE_RENAME, from, &locker); if (likely(locker != NULL)) { PSI_FILE_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line); result= my_rename(from, to, flags); - PSI_FILE_CALL(end_file_wait)(locker, (size_t) 0); + PSI_FILE_CALL(end_file_rename_wait)(locker, from, to, result); return result; } #endif @@ -1387,12 +1387,12 @@ inline_mysql_file_rename_with_symlink( struct PSI_file_locker *locker; PSI_file_locker_state state; locker= PSI_FILE_CALL(get_thread_file_name_locker) - (&state, key, PSI_FILE_RENAME, to, &locker); + (&state, key, PSI_FILE_RENAME, from, &locker); if (likely(locker != NULL)) { PSI_FILE_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line); result= my_rename_with_symlink(from, to, flags); - PSI_FILE_CALL(end_file_wait)(locker, (size_t) 0); + PSI_FILE_CALL(end_file_rename_wait)(locker, from, to, result); return result; } #endif diff --git a/include/mysql/psi/psi.h b/include/mysql/psi/psi.h index 2f5f4ee1ff3b..fd8927ba81dc 100644 --- a/include/mysql/psi/psi.h +++ b/include/mysql/psi/psi.h @@ -1964,6 +1964,17 @@ typedef void (*start_file_close_wait_v1_t) typedef void (*end_file_close_wait_v1_t) (struct PSI_file_locker *locker, int rc); +/** + Rename a file instrumentation close operation. + @param locker the file locker. + @param old_name name of the file to be renamed. + @param new_name name of the file after rename. + @param rc the rename operation return code (0 for success). +*/ +typedef void (*end_file_rename_wait_v1_t) + (struct PSI_file_locker *locker, const char *old_name, + const char *new_name, int rc); + /** Start a new stage, and implicitly end the previous stage. @param key the key of the new stage @@ -2581,6 +2592,8 @@ struct PSI_v1 start_file_close_wait_v1_t start_file_close_wait; /** @sa end_file_close_wait_v1_t. */ end_file_close_wait_v1_t end_file_close_wait; + /** @sa rename_file_close_wait_v1_t. */ + end_file_rename_wait_v1_t end_file_rename_wait; /** @sa start_stage_v1_t. */ start_stage_v1_t start_stage; /** @sa get_current_stage_progress_v1_t. */ diff --git a/include/mysql/psi/psi_abi_v1.h.pp b/include/mysql/psi/psi_abi_v1.h.pp index 12e4caa8b4cb..10fcde7128ec 100644 --- a/include/mysql/psi/psi_abi_v1.h.pp +++ b/include/mysql/psi/psi_abi_v1.h.pp @@ -550,6 +550,9 @@ (struct PSI_file_locker *locker, const char *src_file, uint src_line); typedef void (*end_file_close_wait_v1_t) (struct PSI_file_locker *locker, int rc); +typedef void (*end_file_rename_wait_v1_t) + (struct PSI_file_locker *locker, const char *old_name, + const char *new_name, int rc); typedef PSI_stage_progress* (*start_stage_v1_t) (PSI_stage_key key, const char *src_file, int src_line); typedef PSI_stage_progress* (*get_current_stage_progress_v1_t)(void); @@ -767,6 +770,7 @@ end_file_wait_v1_t end_file_wait; start_file_close_wait_v1_t start_file_close_wait; end_file_close_wait_v1_t end_file_close_wait; + end_file_rename_wait_v1_t end_file_rename_wait; start_stage_v1_t start_stage; get_current_stage_progress_v1_t get_current_stage_progress; end_stage_v1_t end_stage; diff --git a/include/pfs_file_provider.h b/include/pfs_file_provider.h index eae10e9c39e5..7717e83bb350 100644 --- a/include/pfs_file_provider.h +++ b/include/pfs_file_provider.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2012, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -78,6 +78,9 @@ void pfs_start_file_close_wait_v1(PSI_file_locker *locker, void pfs_end_file_close_wait_v1(PSI_file_locker *locker, int rc); +void pfs_end_file_rename_wait_v1(PSI_file_locker *locker, const char *old_name, + const char *new_name, int rc); + C_MODE_END #endif /* EMBEDDED_LIBRARY */ diff --git a/mysql-test/suite/perfschema/r/dml_file_instances.result b/mysql-test/suite/perfschema/r/dml_file_instances.result index d2564cb58dda..a13c570a5adb 100644 --- a/mysql-test/suite/perfschema/r/dml_file_instances.result +++ b/mysql-test/suite/perfschema/r/dml_file_instances.result @@ -18,3 +18,62 @@ UNLOCK TABLES; LOCK TABLES performance_schema.file_instances WRITE; ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'file_instances' UNLOCK TABLES; +### +### Bug#26152751: INNODB LEAKS MEMORY, PERFORMANCE_SCHEMA FILE_INSTANCES +### #SQL-IB3129987-252773.IBD +### +CREATE DATABASE db_26152751; +USE db_26152751; +SELECT FILE_NAME FROM performance_schema.file_instances WHERE FILE_NAME LIKE "%t_db_26152751%"; +FILE_NAME +CREATE TABLE t_db_26152751 (a INT) ENGINE=MYISAM; +SELECT FILE_NAME FROM performance_schema.file_instances WHERE FILE_NAME LIKE "%t_db_26152751%"; +FILE_NAME +t_db_26152751.frm +t_db_26152751.MYI +t_db_26152751.MYD +RENAME TABLE t_db_26152751 to t_db_26152751_new; +SELECT FILE_NAME FROM performance_schema.file_instances WHERE FILE_NAME LIKE "%t_db_26152751%"; +FILE_NAME +t_db_26152751_new.frm +t_db_26152751_new.MYI +t_db_26152751_new.MYD +RENAME TABLE t_db_26152751_new to t_db_26152751; +SELECT FILE_NAME FROM performance_schema.file_instances WHERE FILE_NAME LIKE "%t_db_26152751%"; +FILE_NAME +t_db_26152751.frm +t_db_26152751.MYI +t_db_26152751.MYD +ALTER TABLE t_db_26152751 ADD COLUMN b INT; +SELECT FILE_NAME FROM performance_schema.file_instances WHERE FILE_NAME LIKE "%t_db_26152751%"; +FILE_NAME +t_db_26152751.frm +t_db_26152751.MYI +t_db_26152751.MYD +DROP TABLE t_db_26152751; +SELECT FILE_NAME FROM performance_schema.file_instances WHERE FILE_NAME LIKE "%t_db_26152751%"; +FILE_NAME +CREATE TABLE t_db_26152751 (a INT) ENGINE=INNODB; +SELECT FILE_NAME FROM performance_schema.file_instances WHERE FILE_NAME LIKE "%t_db_26152751%"; +FILE_NAME +t_db_26152751.frm +t_db_26152751.ibd +RENAME TABLE t_db_26152751 to t_db_26152751_new; +SELECT FILE_NAME FROM performance_schema.file_instances WHERE FILE_NAME LIKE "%t_db_26152751%"; +FILE_NAME +t_db_26152751_new.frm +t_db_26152751_new.ibd +RENAME TABLE t_db_26152751_new to t_db_26152751; +SELECT FILE_NAME FROM performance_schema.file_instances WHERE FILE_NAME LIKE "%t_db_26152751%"; +FILE_NAME +t_db_26152751.frm +t_db_26152751.ibd +ALTER TABLE t_db_26152751 ADD COLUMN b INT; +SELECT FILE_NAME FROM performance_schema.file_instances WHERE FILE_NAME LIKE "%t_db_26152751%"; +FILE_NAME +t_db_26152751.frm +t_db_26152751.ibd +DROP TABLE t_db_26152751; +SELECT FILE_NAME FROM performance_schema.file_instances WHERE FILE_NAME LIKE "%t_db_26152751%"; +FILE_NAME +DROP DATABASE db_26152751; diff --git a/mysql-test/suite/perfschema/t/dml_file_instances.test b/mysql-test/suite/perfschema/t/dml_file_instances.test index f95f74fd61a6..92174e222ba6 100644 --- a/mysql-test/suite/perfschema/t/dml_file_instances.test +++ b/mysql-test/suite/perfschema/t/dml_file_instances.test @@ -33,3 +33,62 @@ UNLOCK TABLES; LOCK TABLES performance_schema.file_instances WRITE; UNLOCK TABLES; +--echo ### +--echo ### Bug#26152751: INNODB LEAKS MEMORY, PERFORMANCE_SCHEMA FILE_INSTANCES +--echo ### #SQL-IB3129987-252773.IBD +--echo ### + +CREATE DATABASE db_26152751; +USE db_26152751; + +SELECT FILE_NAME FROM performance_schema.file_instances WHERE FILE_NAME LIKE "%t_db_26152751%"; + +CREATE TABLE t_db_26152751 (a INT) ENGINE=MYISAM; + +--replace_regex /.*\/t_db_26152751/t_db_26152751/ +SELECT FILE_NAME FROM performance_schema.file_instances WHERE FILE_NAME LIKE "%t_db_26152751%"; + +RENAME TABLE t_db_26152751 to t_db_26152751_new; + +--replace_regex /.*\/t_db_26152751/t_db_26152751/ +SELECT FILE_NAME FROM performance_schema.file_instances WHERE FILE_NAME LIKE "%t_db_26152751%"; + +RENAME TABLE t_db_26152751_new to t_db_26152751; + +--replace_regex /.*\/t_db_26152751/t_db_26152751/ +SELECT FILE_NAME FROM performance_schema.file_instances WHERE FILE_NAME LIKE "%t_db_26152751%"; + +ALTER TABLE t_db_26152751 ADD COLUMN b INT; + +--replace_regex /.*\/t_db_26152751/t_db_26152751/ +SELECT FILE_NAME FROM performance_schema.file_instances WHERE FILE_NAME LIKE "%t_db_26152751%"; + +DROP TABLE t_db_26152751; + +SELECT FILE_NAME FROM performance_schema.file_instances WHERE FILE_NAME LIKE "%t_db_26152751%"; + +CREATE TABLE t_db_26152751 (a INT) ENGINE=INNODB; + +--replace_regex /.*\/t_db_26152751/t_db_26152751/ +SELECT FILE_NAME FROM performance_schema.file_instances WHERE FILE_NAME LIKE "%t_db_26152751%"; + +RENAME TABLE t_db_26152751 to t_db_26152751_new; + +--replace_regex /.*\/t_db_26152751/t_db_26152751/ +SELECT FILE_NAME FROM performance_schema.file_instances WHERE FILE_NAME LIKE "%t_db_26152751%"; + +RENAME TABLE t_db_26152751_new to t_db_26152751; + +--replace_regex /.*\/t_db_26152751/t_db_26152751/ +SELECT FILE_NAME FROM performance_schema.file_instances WHERE FILE_NAME LIKE "%t_db_26152751%"; + +ALTER TABLE t_db_26152751 ADD COLUMN b INT; + +--replace_regex /.*\/t_db_26152751/t_db_26152751/ +SELECT FILE_NAME FROM performance_schema.file_instances WHERE FILE_NAME LIKE "%t_db_26152751%"; + +DROP TABLE t_db_26152751; + +SELECT FILE_NAME FROM performance_schema.file_instances WHERE FILE_NAME LIKE "%t_db_26152751%"; + +DROP DATABASE db_26152751; diff --git a/mysys/psi_noop.c b/mysys/psi_noop.c index fa074068e910..f8f06005e98c 100644 --- a/mysys/psi_noop.c +++ b/mysys/psi_noop.c @@ -471,6 +471,14 @@ static void end_file_close_wait_noop(PSI_file_locker *locker NNN, return; } +static void end_file_rename_wait_noop(PSI_file_locker *locker NNN, + const char *old_name NNN, + const char *new_name NNN, + int result NNN) +{ + return; +} + static PSI_stage_progress* start_stage_noop(PSI_stage_key key NNN, const char *src_file NNN, int src_line NNN) @@ -954,6 +962,7 @@ static PSI PSI_noop= end_file_wait_noop, start_file_close_wait_noop, end_file_close_wait_noop, + end_file_rename_wait_noop, start_stage_noop, get_current_stage_progress_noop, end_stage_noop, diff --git a/storage/innobase/include/os0file.h b/storage/innobase/include/os0file.h index f1dd4f69fa2d..c4402c58fddc 100644 --- a/storage/innobase/include/os0file.h +++ b/storage/innobase/include/os0file.h @@ -1137,12 +1137,12 @@ do { \ state, locker, key, op, name, \ src_file, static_cast(src_line)) \ -# define register_pfs_file_rename_end(locker, result) \ +# define register_pfs_file_rename_end(locker, from, to, result) \ do { \ if (locker != NULL) { \ PSI_FILE_CALL( \ - end_file_open_wait)( \ - locker, result); \ + end_file_rename_wait)( \ + locker, from, to, result); \ } \ }while(0) diff --git a/storage/innobase/include/os0file.ic b/storage/innobase/include/os0file.ic index c169532b8bc5..7ea71972f16b 100644 --- a/storage/innobase/include/os0file.ic +++ b/storage/innobase/include/os0file.ic @@ -538,7 +538,7 @@ pfs_os_file_rename_func( bool result = os_file_rename_func(oldpath, newpath); - register_pfs_file_rename_end(locker, 0); + register_pfs_file_rename_end(locker, oldpath, newpath, !result); return(result); } diff --git a/storage/perfschema/pfs.cc b/storage/perfschema/pfs.cc index af5aa9bb7ba8..4b12ea0c500b 100644 --- a/storage/perfschema/pfs.cc +++ b/storage/perfschema/pfs.cc @@ -4738,6 +4738,31 @@ void pfs_end_file_close_wait_v1(PSI_file_locker *locker, int rc) return; } +/** + Implementation of the file instrumentation interface. + @sa PSI_v1::end_file_rename_wait. +*/ +void pfs_end_file_rename_wait_v1(PSI_file_locker *locker, const char *old_name, + const char *new_name, int rc) +{ + PSI_file_locker_state *state= reinterpret_cast (locker); + DBUG_ASSERT(state != NULL); + DBUG_ASSERT(state->m_operation == PSI_FILE_RENAME); + + if (rc == 0) + { + PFS_thread *thread= reinterpret_cast (state->m_thread); + + uint old_len= (uint)strlen(old_name); + uint new_len= (uint)strlen(new_name); + + find_and_rename_file(thread, old_name, old_len, new_name, new_len); + } + + pfs_end_file_wait_v1(locker, 0); + return; +} + PSI_stage_progress* pfs_start_stage_v1(PSI_stage_key key, const char *src_file, int src_line) { @@ -7026,6 +7051,7 @@ PSI_v1 PFS_v1= pfs_end_file_wait_v1, pfs_start_file_close_wait_v1, pfs_end_file_close_wait_v1, + pfs_end_file_rename_wait_v1, pfs_start_stage_v1, pfs_get_current_stage_progress_v1, pfs_end_stage_v1, diff --git a/storage/perfschema/pfs_instr.cc b/storage/perfschema/pfs_instr.cc index cf31d6730a1e..4d3cb4bb6789 100644 --- a/storage/perfschema/pfs_instr.cc +++ b/storage/perfschema/pfs_instr.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2008, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2008, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -905,6 +905,156 @@ find_or_create_file(PFS_thread *thread, PFS_file_class *klass, return NULL; } +/** + Find a file instrumentation instance by name, and rename it + @param thread the executing instrumented thread + @param old_filename the file to be renamed + @param old_len the length in bytes of the old filename + @param new_filename the new file name + @param new_len the length in bytes of the new filename +*/ +void find_and_rename_file(PFS_thread *thread, const char *old_filename, + uint old_len, const char *new_filename, uint new_len) +{ + PFS_file *pfs; + + DBUG_ASSERT(thread != NULL); + + LF_PINS *pins= get_filename_hash_pins(thread); + if (unlikely(pins == NULL)) + { + global_file_container.m_lost++; + return; + } + + /* + Normalize the old file name. + */ + char safe_buffer[FN_REFLEN]; + const char *safe_filename; + + if (old_len >= FN_REFLEN) + { + memcpy(safe_buffer, old_filename, FN_REFLEN - 1); + safe_buffer[FN_REFLEN - 1]= 0; + safe_filename= safe_buffer; + } + else + safe_filename= old_filename; + + char buffer[FN_REFLEN]; + char dirbuffer[FN_REFLEN]; + size_t dirlen; + const char *normalized_filename; + uint normalized_length; + + dirlen= dirname_length(safe_filename); + if (dirlen == 0) + { + dirbuffer[0]= FN_CURLIB; + dirbuffer[1]= FN_LIBCHAR; + dirbuffer[2]= '\0'; + } + else + { + memcpy(dirbuffer, safe_filename, dirlen); + dirbuffer[dirlen]= '\0'; + } + + if (my_realpath(buffer, dirbuffer, MYF(0)) != 0) + { + global_file_container.m_lost++; + return; + } + + /* Append the unresolved file name to the resolved path */ + char *ptr= buffer + strlen(buffer); + char *buf_end= &buffer[sizeof(buffer)-1]; + if ((buf_end > ptr) && (*(ptr-1) != FN_LIBCHAR)) + *ptr++= FN_LIBCHAR; + if (buf_end > ptr) + strncpy(ptr, safe_filename + dirlen, buf_end - ptr); + *buf_end= '\0'; + + normalized_filename= buffer; + normalized_length= (uint)strlen(normalized_filename); + + PFS_file **entry; + entry= reinterpret_cast + (lf_hash_search(&filename_hash, pins, + normalized_filename, normalized_length)); + + if (entry && (entry != MY_ERRPTR)) + pfs= *entry; + else + { + lf_hash_search_unpin(pins); + return; + } + + lf_hash_delete(&filename_hash, pins, + pfs->m_filename, pfs->m_filename_length); + + /* + Normalize the new file name. + */ + if (new_len >= FN_REFLEN) + { + memcpy(safe_buffer, new_filename, FN_REFLEN - 1); + safe_buffer[FN_REFLEN - 1]= 0; + safe_filename= safe_buffer; + } + else + safe_filename= new_filename; + + dirlen= dirname_length(safe_filename); + if (dirlen == 0) + { + dirbuffer[0]= FN_CURLIB; + dirbuffer[1]= FN_LIBCHAR; + dirbuffer[2]= '\0'; + } + else + { + memcpy(dirbuffer, safe_filename, dirlen); + dirbuffer[dirlen]= '\0'; + } + + if (my_realpath(buffer, dirbuffer, MYF(0)) != 0) + { + global_file_container.m_lost++; + return; + } + + /* Append the unresolved file name to the resolved path */ + ptr= buffer + strlen(buffer); + buf_end= &buffer[sizeof(buffer)-1]; + if ((buf_end > ptr) && (*(ptr-1) != FN_LIBCHAR)) + *ptr++= FN_LIBCHAR; + if (buf_end > ptr) + strncpy(ptr, safe_filename + dirlen, buf_end - ptr); + *buf_end= '\0'; + + normalized_filename= buffer; + normalized_length= (uint)strlen(normalized_filename); + + strncpy(pfs->m_filename, normalized_filename, normalized_length); + pfs->m_filename[normalized_length]= '\0'; + pfs->m_filename_length= normalized_length; + + int res; + res= lf_hash_insert(&filename_hash, pins, &pfs); + + if (likely(res == 0)) + return; + else + { + global_file_container.deallocate(pfs); + global_file_container.m_lost++; + return; + } +} + /** Release instrumentation for a file instance. @param pfs the file to release diff --git a/storage/perfschema/pfs_instr.h b/storage/perfschema/pfs_instr.h index 8741375e62e3..d363adab5f23 100644 --- a/storage/perfschema/pfs_instr.h +++ b/storage/perfschema/pfs_instr.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2008, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2008, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -670,6 +670,9 @@ void destroy_thread(PFS_thread *pfs); PFS_file* find_or_create_file(PFS_thread *thread, PFS_file_class *klass, const char *filename, uint len, bool create); +void find_and_rename_file(PFS_thread *thread, const char *old_filename, + uint old_len, const char *new_filename, + uint new_len); void release_file(PFS_file *pfs); void destroy_file(PFS_thread *thread, PFS_file *pfs); diff --git a/storage/perfschema/unittest/pfs_noop-t.cc b/storage/perfschema/unittest/pfs_noop-t.cc index 4ee2b971643d..0728006f98ad 100644 --- a/storage/perfschema/unittest/pfs_noop-t.cc +++ b/storage/perfschema/unittest/pfs_noop-t.cc @@ -144,6 +144,7 @@ void test_noop() PSI_server->end_file_wait(NULL, 0); PSI_server->start_file_close_wait(NULL, NULL, 0); PSI_server->end_file_close_wait(NULL, 0); + PSI_server->end_file_rename_wait(NULL, NULL, NULL, 0); PSI_server->start_stage(1, NULL, 0); PSI_stage_progress *progress; From d92ba0192be51fca7def8e7a9ecc1f2c244364b3 Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Mon, 16 Oct 2017 18:04:45 +0530 Subject: [PATCH 0125/1221] From b5323d156daa7e349055500d11ee01d5f8c4d84c Mon Sep 17 00:00:00 2001 From: Ajo Robert Date: Mon, 16 Oct 2017 20:08:13 +0530 Subject: [PATCH 0126/1221] Bug#25062396 - ASSERTION `CUR_SHAPE != GCALC_FUNCTION:: SHAPE_POINT' FAILED. Invalid input parameters could lead to wrong result buffer. Which can cause an assert due to traversing to uninitialized pointers and abrupt exit or cyclic processing of the result buffer. Fix included handling of below scenarios. 1. Uninitialized structure elements. 2. Handling of NULL pointers. 3. Breakout from cyclic loops. 4. Wrong result object (Point with more than one coordinates). Change-Id: I9badfa248889bc4e2f460b77d6a4be5dd72a962a --- sql/gcalc_tools.cc | 26 +++++++++++++++++++++++--- sql/gcalc_tools.h | 6 +++++- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/sql/gcalc_tools.cc b/sql/gcalc_tools.cc index a1adbb246e01..c4411ef4f4f2 100644 --- a/sql/gcalc_tools.cc +++ b/sql/gcalc_tools.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -447,6 +447,11 @@ int Gcalc_result_receiver::complete_shape() } else { + if (cur_shape == Gcalc_function::shape_point) + { + DBUG_RETURN(1); + } + DBUG_ASSERT(cur_shape != Gcalc_function::shape_point); if (cur_shape == Gcalc_function::shape_hole || cur_shape == Gcalc_function::shape_polygon) @@ -1173,8 +1178,12 @@ int Gcalc_operation_reducer::get_polygon_result(res_point *cur, { DBUG_ENTER("Gcalc_operation_reducer::get_polygon_result"); res_point *glue= cur->glue; - glue->up->down= NULL; - free_result(glue); + if(glue) + { + if(glue->up) + glue->up->down= NULL; + free_result(glue); + } DBUG_RETURN(get_result_thread(cur, storage, 1) || storage->complete_shape()); } @@ -1261,10 +1270,21 @@ int Gcalc_operation_reducer::get_result(Gcalc_result_receiver *storage) DBUG_ENTER("Gcalc_operation_reducer::get_result"); Dynamic_array chunks; bool polygons_found= false; + int counter= 0; *m_res_hook= NULL; while (m_result) { + /** + Handle cyclic graph scenario. This can occur due to invalid input + geometry. Ideally the comparison should be with length of the string. + We have choosen an arbitory number suitable for practical usecase's + due to the complexity involved in checking with the length. + */ + counter++; + if (counter > 10000) + DBUG_RETURN(1); + Gcalc_function::shape_type shape; Gcalc_result_receiver::chunk_info chunk; diff --git a/sql/gcalc_tools.h b/sql/gcalc_tools.h index 73c45096c40c..10dd31181289 100644 --- a/sql/gcalc_tools.h +++ b/sql/gcalc_tools.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -353,6 +353,10 @@ class Gcalc_operation_reducer : public Gcalc_dyn_list bool intersection_point) { res_point *result= (res_point *) new_item(); + result->up= result->down= result->glue= NULL; + result->set_outer_poly(NULL); + result->pi= NULL; + result->first_poly_node= NULL; *m_res_hook= result; result->prev_hook= m_res_hook; m_res_hook= &result->next; From 49bbf4184d65db3708521cc3a798d351e5e1c0d6 Mon Sep 17 00:00:00 2001 From: Sergey Glukhov Date: Mon, 16 Oct 2017 17:55:01 +0300 Subject: [PATCH 0127/1221] Bug#26877788 SELECT FROM INFORMATION_SCHEMA.FILES RETURNS NO RECORDS WHEN ORDER BY IS USED test case fix. --- mysql-test/r/information_schema.result | 24 ++---------------------- mysql-test/t/information_schema.test | 14 ++------------ 2 files changed, 4 insertions(+), 34 deletions(-) diff --git a/mysql-test/r/information_schema.result b/mysql-test/r/information_schema.result index 4713afa0fde7..368e65f6414f 100644 --- a/mysql-test/r/information_schema.result +++ b/mysql-test/r/information_schema.result @@ -2116,21 +2116,6 @@ ERROR 42000: Access denied for user 'root'@'localhost' to database 'information_ # # Bug#26877788 SELECT FROM INFORMATION_SCHEMA.FILES RETURNS NO RECORDS WHEN ORDER BY IS USED # -EXPLAIN SELECT ENGINE, SUPPORT, TRANSACTIONS FROM INFORMATION_SCHEMA.ENGINES -WHERE -SUPPORT IN ( -SELECT DISTINCT SUPPORT -FROM INFORMATION_SCHEMA.ENGINES -WHERE -ENGINE IN ( -SELECT DISTINCT ENGINE FROM INFORMATION_SCHEMA.ENGINES -WHERE ENGINE IN ('MEMORY'))) -ORDER BY ENGINE; -id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE ENGINES ALL NULL NULL NULL NULL NULL Using where; Using filesort -1 SIMPLE eq_ref 26 information_schema.ENGINES.SUPPORT 1 NULL -2 MATERIALIZED ENGINES ALL NULL NULL NULL NULL NULL Using where -2 MATERIALIZED ENGINES ALL NULL NULL NULL NULL NULL Using where; Using join buffer (Block Nested Loop) SELECT ENGINE, SUPPORT, TRANSACTIONS FROM INFORMATION_SCHEMA.ENGINES WHERE SUPPORT IN ( @@ -2140,15 +2125,10 @@ WHERE ENGINE IN ( SELECT DISTINCT ENGINE FROM INFORMATION_SCHEMA.ENGINES WHERE ENGINE IN ('MEMORY'))) -ORDER BY ENGINE; +ORDER BY ENGINE +LIMIT 1; ENGINE SUPPORT TRANSACTIONS ARCHIVE YES NO -BLACKHOLE YES NO -CSV YES NO -InnoDB YES YES -MEMORY YES NO -MRG_MYISAM YES NO -PERFORMANCE_SCHEMA YES NO # # End of 5.6 tests # diff --git a/mysql-test/t/information_schema.test b/mysql-test/t/information_schema.test index 08c5b42f33e8..addefffd4f90 100644 --- a/mysql-test/t/information_schema.test +++ b/mysql-test/t/information_schema.test @@ -1883,17 +1883,6 @@ CREATE PROCEDURE information_schema.is() BEGIN END; --echo # Bug#26877788 SELECT FROM INFORMATION_SCHEMA.FILES RETURNS NO RECORDS WHEN ORDER BY IS USED --echo # -EXPLAIN SELECT ENGINE, SUPPORT, TRANSACTIONS FROM INFORMATION_SCHEMA.ENGINES -WHERE -SUPPORT IN ( -SELECT DISTINCT SUPPORT -FROM INFORMATION_SCHEMA.ENGINES -WHERE -ENGINE IN ( -SELECT DISTINCT ENGINE FROM INFORMATION_SCHEMA.ENGINES -WHERE ENGINE IN ('MEMORY'))) -ORDER BY ENGINE; - SELECT ENGINE, SUPPORT, TRANSACTIONS FROM INFORMATION_SCHEMA.ENGINES WHERE SUPPORT IN ( @@ -1903,7 +1892,8 @@ WHERE ENGINE IN ( SELECT DISTINCT ENGINE FROM INFORMATION_SCHEMA.ENGINES WHERE ENGINE IN ('MEMORY'))) -ORDER BY ENGINE; +ORDER BY ENGINE +LIMIT 1; --echo # From b4a7d68a5c06b8f1df283570dbd5f12b46285e80 Mon Sep 17 00:00:00 2001 From: Nuno Carvalho Date: Tue, 17 Oct 2017 12:58:08 +0200 Subject: [PATCH 0128/1221] BUG#26770576: ALL MEMBERS ARE EXITED FROM GR WHEN 1/3 NODE TRIED TO REJOIN AFTER SHUTDOWN Problem: All members in group goes in ERROR STATE when new member joins and certification database is big Scenario (slow machine with heavy load): 1. Start 3 server (MEMBER_1, MEMBER_2, MEMBER_3) 2. Wait for all members to be ONLINE 3. Start heavy load on MEMBER_1 (wait for 5 to 10 minutes) (MEMBER_2 and MEMBER_3 receives data slowly.) 4. STOP, START MEMBER_3 5. MEMBER_1 and MEMBER_2 goes offline Description: When new member joins server, certification database can be big. Certification database is transferred with View_change. If packet size(View_change) is greater then 4MB, GR stops and goes in error state. Resolution: Applier thread will be initialized with slave_max_allowed_packet, which default size is 1GB. --- .../include/pipeline_interfaces.h | 25 ++- .../plugin/group_replication/src/certifier.cc | 3 + ...slave_max_allowed_packet_dependency.result | 81 +++++++++ ...gr_slave_max_allowed_packet_dependency.cnf | 11 ++ ...r_slave_max_allowed_packet_dependency.test | 165 ++++++++++++++++++ sql/rpl_channel_service_interface.cc | 8 + 6 files changed, 292 insertions(+), 1 deletion(-) create mode 100644 rapid/plugin/group_replication/tests/mtr/r/gr_slave_max_allowed_packet_dependency.result create mode 100644 rapid/plugin/group_replication/tests/mtr/t/gr_slave_max_allowed_packet_dependency.cnf create mode 100644 rapid/plugin/group_replication/tests/mtr/t/gr_slave_max_allowed_packet_dependency.test diff --git a/rapid/plugin/group_replication/include/pipeline_interfaces.h b/rapid/plugin/group_replication/include/pipeline_interfaces.h index 5b88da4dba8d..7160f26834d9 100644 --- a/rapid/plugin/group_replication/include/pipeline_interfaces.h +++ b/rapid/plugin/group_replication/include/pipeline_interfaces.h @@ -416,7 +416,7 @@ class Pipeline_event { log_message(MY_ERROR_LEVEL, "Unable to convert the event into a packet on the applier!" - " Error: %d\n", error); /* purecov: inspected */ + " Error: %s.\n", get_string_log_read_error_msg(error)); /* purecov: inspected */ return error; /* purecov: inspected */ } packet= new Data_packet((uchar*)packet_data.ptr(), static_cast(packet_data.length())); @@ -427,6 +427,29 @@ class Pipeline_event return error; } + const char* get_string_log_read_error_msg(int error) + { + switch (error) + { + case LOG_READ_BOGUS: + return "corrupted data in log event"; + case LOG_READ_TOO_LARGE: + return "log event entry exceeded slave_max_allowed_packet; Increase " + "slave_max_allowed_packet"; + case LOG_READ_IO: + return "I/O error reading log event"; + case LOG_READ_MEM: + return "memory allocation failed reading log event, machine is out of memory"; + case LOG_READ_TRUNC: + return "binlog truncated in the middle of event; consider out of disk space"; + case LOG_READ_CHECKSUM_FAILURE: + return "event read from binlog did not pass checksum algorithm " + "check specified on --binlog-checksum option"; + default: + return "unknown error reading log event"; + } + } + private: Data_packet *packet; Log_event *log_event; diff --git a/rapid/plugin/group_replication/src/certifier.cc b/rapid/plugin/group_replication/src/certifier.cc index 7403faff3710..7e1fd6f0c30a 100644 --- a/rapid/plugin/group_replication/src/certifier.cc +++ b/rapid/plugin/group_replication/src/certifier.cc @@ -1214,6 +1214,9 @@ bool Certifier::set_group_stable_transactions_set(Gtid_set* executed_gtid_set) void Certifier::garbage_collect() { DBUG_ENTER("Certifier::garbage_collect"); + DBUG_EXECUTE_IF("group_replication_do_not_clear_certification_database", + { DBUG_VOID_RETURN; };); + mysql_mutex_lock(&LOCK_certification_info); /* diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_slave_max_allowed_packet_dependency.result b/rapid/plugin/group_replication/tests/mtr/r/gr_slave_max_allowed_packet_dependency.result new file mode 100644 index 000000000000..c1f1be7a51d9 --- /dev/null +++ b/rapid/plugin/group_replication/tests/mtr/r/gr_slave_max_allowed_packet_dependency.result @@ -0,0 +1,81 @@ +include/group_replication.inc [rpl_server_count=3] +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection server1] + +# 1. Start three server(disable certification database garbage collection). + +# 1A. Bootstrap server1. +[connection server1] +include/start_and_bootstrap_group_replication.inc +SET @debug_save1= @@GLOBAL.DEBUG; +SET @@GLOBAL.DEBUG= 'd,group_replication_do_not_clear_certification_database'; +# 1B. Set slave_max_allowed_packet to lowest value and start server2. +[connection server2] +SET @debug_save_slave_max_allowed_packet= @@GLOBAL.slave_max_allowed_packet; +SET GLOBAL slave_max_allowed_packet=1024; +include/start_group_replication.inc +SET @debug_save2= @@GLOBAL.DEBUG; +SET @@GLOBAL.DEBUG= 'd,group_replication_do_not_clear_certification_database'; +set session sql_log_bin=0; +call mtr.add_suppression("Unable to convert the event into a packet on the applier.*"); +call mtr.add_suppression("Failed to fetch transaction data containing required transaction info for applier"); +call mtr.add_suppression("Error at event handling.*"); +call mtr.add_suppression("Fatal error during execution on the Applier process of Group Replication. The server will now leave the group."); +call mtr.add_suppression("The server was automatically set into read only mode after an error was detected."); +call mtr.add_suppression("Slave SQL for channel 'group_replication_applier'.*"); +call mtr.add_suppression("Skipping leave operation: concurrent attempt to leave the group is on-going."); +set session sql_log_bin=1; +# 1C. Setup environment on server3, do not start GR yet. +[connection server3] +SET @debug_save3= @@GLOBAL.DEBUG; +SET @@GLOBAL.DEBUG= 'd,group_replication_do_not_clear_certification_database'; + +# 2. Generate 200 transactions on server1 to increase +# certification database size. + +[connection server1] +CREATE TABLE t1 (a INT PRIMARY KEY); + +# 3. Start GR on server3, View_change packet will be high in size. + +[connection server3] +include/start_group_replication.inc + +# 4. Server2 can only handle small packet sizes, so it will go in error state. + +[connection server2] +include/gr_wait_for_member_state.inc +include/assert_grep.inc [Found the expected error about log event entry exceeded slave_max_allowed_packet.] + +# 5. Server1 can handle 1GB packet size(default) so it will become donor and +# assist server3 to come ONLINE. + +[connection server1] +include/rpl_gr_wait_for_number_of_members.inc + +# 6. Restart GR on server2 with large value of slave_max_allowed_packet +# to make it ONLINE. + +[connection server2] +include/stop_group_replication.inc +SET @@GLOBAL.slave_max_allowed_packet=@debug_save_slave_max_allowed_packet; +include/start_group_replication.inc +[connection server1] +include/rpl_gr_wait_for_number_of_members.inc + +# 7. Verification. + +include/diff_tables.inc [server1:t1, server2:t1, server3:t1] + +# 8. Cleanup. + +DROP TABLE t1; +[connection server1] +SET @@GLOBAL.DEBUG= @debug_save1; +[connection server2] +SET @@GLOBAL.DEBUG= @debug_save2; +[connection server3] +SET @@GLOBAL.DEBUG= @debug_save3; +include/group_replication_end.inc diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_slave_max_allowed_packet_dependency.cnf b/rapid/plugin/group_replication/tests/mtr/t/gr_slave_max_allowed_packet_dependency.cnf new file mode 100644 index 000000000000..30847abcd9cc --- /dev/null +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_slave_max_allowed_packet_dependency.cnf @@ -0,0 +1,11 @@ +!include ../my.cnf + +[mysqld.1] + +[mysqld.2] + +[mysqld.3] + +[ENV] +SERVER_MYPORT_3= @mysqld.3.port +SERVER_MYSOCK_3= @mysqld.3.socket diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_slave_max_allowed_packet_dependency.test b/rapid/plugin/group_replication/tests/mtr/t/gr_slave_max_allowed_packet_dependency.test new file mode 100644 index 000000000000..f21d67ac3c97 --- /dev/null +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_slave_max_allowed_packet_dependency.test @@ -0,0 +1,165 @@ +################################################################################ +# This test checks that group replication applier thread is dependant upon +# slave_max_allowed_packet and allows processing of larger View_change packets. +# +# Test: +# 0. The test requires three servers. +# 1. Start three server(disable certification database garbage collection). +# 1A. Bootstrap server1. +# 1B. Set slave_max_allowed_packet to lowest value and start server2. +# 1C. Setup environment on server3, do not start GR yet. +# 2. Generate 200 transactions on server1 to increase +# certification database size. +# 3. Start GR on server3, View_change packet will be high in size. +# 4. Server2 can only handle small packet sizes, so it will go in error state. +# 5. Server1 can handle 1GB packet size(default) so it will become donor and +# assist server3 to come ONLINE. +# 6. Restart GR on server2 with large value of slave_max_allowed_packet +# to make it ONLINE. +# 7. Verification. +# 8. Cleanup. +################################################################################ + +--source include/big_test.inc +--source include/have_debug.inc +--source ../inc/have_group_replication_plugin.inc +--let $rpl_server_count= 3 +--let $rpl_skip_group_replication_start= 1 +--source ../inc/group_replication.inc + +--echo +--echo # 1. Start three server(disable certification database garbage collection). +--echo + +--echo # 1A. Bootstrap server1. +--let $rpl_connection_name= server1 +--source include/rpl_connection.inc +--source ../inc/start_and_bootstrap_group_replication.inc +SET @debug_save1= @@GLOBAL.DEBUG; +SET @@GLOBAL.DEBUG= 'd,group_replication_do_not_clear_certification_database'; + +--echo # 1B. Set slave_max_allowed_packet to lowest value and start server2. +--let $rpl_connection_name= server2 +--source include/rpl_connection.inc +SET @debug_save_slave_max_allowed_packet= @@GLOBAL.slave_max_allowed_packet; +SET GLOBAL slave_max_allowed_packet=1024; +--source include/start_group_replication.inc +SET @debug_save2= @@GLOBAL.DEBUG; +SET @@GLOBAL.DEBUG= 'd,group_replication_do_not_clear_certification_database'; + +set session sql_log_bin=0; +call mtr.add_suppression("Unable to convert the event into a packet on the applier.*"); +call mtr.add_suppression("Failed to fetch transaction data containing required transaction info for applier"); +call mtr.add_suppression("Error at event handling.*"); +call mtr.add_suppression("Fatal error during execution on the Applier process of Group Replication. The server will now leave the group."); +call mtr.add_suppression("The server was automatically set into read only mode after an error was detected."); +call mtr.add_suppression("Slave SQL for channel 'group_replication_applier'.*"); +call mtr.add_suppression("Skipping leave operation: concurrent attempt to leave the group is on-going."); +set session sql_log_bin=1; + +--echo # 1C. Setup environment on server3, do not start GR yet. +--let $rpl_connection_name= server3 +--source include/rpl_connection.inc +SET @debug_save3= @@GLOBAL.DEBUG; +SET @@GLOBAL.DEBUG= 'd,group_replication_do_not_clear_certification_database'; + +--echo +--echo # 2. Generate 200 transactions on server1 to increase +--echo # certification database size. +--echo + +## We have disabled cleaning of certification database. +## We have limited Member 2, packet size to 1 KB slave_max_allowed_packet. +## Member2 will go in ERROR state if any packet is bigger then +## MAX (slave_max_allowed_packet,binlog-row-event-max-size + +## MAX_LOG_EVENT_HEADER i.e. 12251 as of now) +## Member1 uses default value which is 1GB as of now. so it will process +## View_change packet successfully. +## As of now size of certification database is growing to approx 13339 +## which includes (12+48)*200 and other View_change information. +--let $rpl_connection_name= server1 +--source include/rpl_connection.inc +CREATE TABLE t1 (a INT PRIMARY KEY); +--disable_query_log +--let $rows= 200 +WHILE($rows) +{ + --eval INSERT INTO t1 (a) VALUES ( $rows ) + --dec $rows +} +--enable_query_log + +--echo +--echo # 3. Start GR on server3, View_change packet will be high in size. +--echo +--let $rpl_connection_name= server3 +--source include/rpl_connection.inc +--source include/start_group_replication.inc + +--echo +--echo # 4. Server2 can only handle small packet sizes, so it will go in error state. +--echo +--let $rpl_connection_name= server2 +--source include/rpl_connection.inc +--let $group_replication_member_state= ERROR +--source ../inc/gr_wait_for_member_state.inc + +--let $assert_file= $MYSQLTEST_VARDIR/log/mysqld.2.err +--let $assert_only_after = CURRENT_TEST: group_replication.gr_slave_max_allowed_packet_dependency +--let $assert_count = 1 +--let $assert_select = log event entry exceeded slave_max_allowed_packet; Increase slave_max_allowed_packet +--let $assert_text = Found the expected error about log event entry exceeded slave_max_allowed_packet. +--source include/assert_grep.inc + +--echo +--echo # 5. Server1 can handle 1GB packet size(default) so it will become donor and +--echo # assist server3 to come ONLINE. +--echo +--let $rpl_connection_name= server1 +--source include/rpl_connection.inc +--let $group_replication_number_of_members= 2 +--source ../inc/gr_wait_for_number_of_members.inc + +--echo +--echo # 6. Restart GR on server2 with large value of slave_max_allowed_packet +--echo # to make it ONLINE. +--echo +--let $rpl_connection_name= server2 +--source include/rpl_connection.inc +--source include/stop_group_replication.inc + +SET @@GLOBAL.slave_max_allowed_packet=@debug_save_slave_max_allowed_packet; +--let $wait_timeout=150 +--source include/start_group_replication.inc + +--let $rpl_connection_name= server1 +--source include/rpl_connection.inc +--let $group_replication_number_of_members= 3 +--source ../inc/gr_wait_for_number_of_members.inc + +--echo +--echo # 7. Verification. +--echo + +--let $diff_tables=server1:t1, server2:t1, server3:t1 +--source include/diff_tables.inc + +--echo +--echo # 8. Cleanup. +--echo + +DROP TABLE t1; + +--let $rpl_connection_name= server1 +--source include/rpl_connection.inc +SET @@GLOBAL.DEBUG= @debug_save1; + +--let $rpl_connection_name= server2 +--source include/rpl_connection.inc +SET @@GLOBAL.DEBUG= @debug_save2; + +--let $rpl_connection_name= server3 +--source include/rpl_connection.inc +SET @@GLOBAL.DEBUG= @debug_save3; + +--source ../inc/group_replication_end.inc diff --git a/sql/rpl_channel_service_interface.cc b/sql/rpl_channel_service_interface.cc index e66f16f30203..7142ad717612 100644 --- a/sql/rpl_channel_service_interface.cc +++ b/sql/rpl_channel_service_interface.cc @@ -321,6 +321,14 @@ int channel_create(const char* channel, set_mi_settings(mi, channel_info); + if (channel_map.is_group_replication_channel_name(mi->get_channel())) + { + thd->variables.max_allowed_packet= slave_max_allowed_packet; + thd->get_protocol_classic()->set_max_packet_size( + slave_max_allowed_packet + MAX_LOG_EVENT_HEADER); + } + + err: channel_map.unlock(); From f211d8f9a3fb935ee0006d0070faa13c77705e96 Mon Sep 17 00:00:00 2001 From: Anibal Pinto Date: Tue, 17 Oct 2017 15:10:58 +0200 Subject: [PATCH 0129/1221] BUG#26787288: CHECK_WARNINGS FOR GROUP_REPLICATION.GR_RELAY_LOG_NAME_CHANGE TIMES OUT ON PB2 The test produces a failure when server is starting and the following steps put it on restart. This situation caused a possibility of group replication execute an query on the server but don't have any response due server is stopping. The group replication service sql command wasn't retrieving an error when this failure happened that caused the server to crash on the end of the test. We modified the function to return failure when this occurred. When accessing to SQL result we confirm that it has values. --- .../sql_service/sql_service_interface.h | 3 +- .../src/sql_service/sql_service_command.cc | 58 +++++-------------- .../src/sql_service/sql_service_interface.cc | 43 ++++++++++---- .../mtr/r/gr_relay_log_name_change.result | 2 +- .../tests/mtr/t/gr_relay_log_name_change.test | 2 +- 5 files changed, 53 insertions(+), 55 deletions(-) diff --git a/rapid/plugin/group_replication/include/sql_service/sql_service_interface.h b/rapid/plugin/group_replication/include/sql_service/sql_service_interface.h index 39f77aa53065..4e888b0c1469 100644 --- a/rapid/plugin/group_replication/include/sql_service/sql_service_interface.h +++ b/rapid/plugin/group_replication/include/sql_service/sql_service_interface.h @@ -53,7 +53,8 @@ class Sql_service_interface @return the sql error number @retval 0 OK @retval >0 SQL Error Number returned from MySQL Service API - @retval <0 local errors + @retval -1 Internal server session failed or was killed + @retval -2 Internal API failure */ long execute_internal(Sql_resultset *rset, diff --git a/rapid/plugin/group_replication/src/sql_service/sql_service_command.cc b/rapid/plugin/group_replication/src/sql_service/sql_service_command.cc index f188104dc4b3..f00bc2085ee6 100644 --- a/rapid/plugin/group_replication/src/sql_service/sql_service_command.cc +++ b/rapid/plugin/group_replication/src/sql_service/sql_service_command.cc @@ -152,16 +152,13 @@ internal_set_super_read_only(Sql_service_interface *sql_interface) if (srv_err == 0) { #ifndef DBUG_OFF - sql_interface->execute_query("SELECT @@GLOBAL.super_read_only;", &rset); - DBUG_ASSERT(rset.getLong(0) == 1); + long err; + err = sql_interface->execute_query("SELECT @@GLOBAL.super_read_only;", &rset); + + DBUG_ASSERT(!err && rset.get_rows() > 0 && rset.getLong(0) == 1); log_message(MY_INFORMATION_LEVEL, "Setting super_read_only=ON."); #endif } - else - { - log_message(MY_ERROR_LEVEL, "'SET super_read_only= 1' query execution" - " resulted in failure. errno: %d", srv_err); /* purecov: inspected */ - } DBUG_RETURN(srv_err); } @@ -224,18 +221,14 @@ internal_reset_super_read_only(Sql_service_interface *sql_interface) const char * query= "SET GLOBAL super_read_only= 0"; long srv_err= sql_interface->execute_query(query); - if (srv_err) - { - log_message(MY_ERROR_LEVEL, "SET super_read_only query execution " - "resulted in failure. errno: %d", srv_err); /* purecov: inspected */ - } #ifndef DBUG_OFF - else + if (srv_err == 0) { + long err; query= "SELECT @@GLOBAL.super_read_only;"; - sql_interface->execute_query(query, &rset); - DBUG_ASSERT(rset.getLong(0) == 0); + err= sql_interface->execute_query(query, &rset); + DBUG_ASSERT(!err && rset.get_rows() > 0 && rset.getLong(0) == 0); log_message(MY_INFORMATION_LEVEL, "Setting super_read_only=OFF."); } #endif @@ -273,18 +266,14 @@ internal_reset_read_only(Sql_service_interface *sql_interface) const char* query= "SET GLOBAL read_only= 0"; long srv_err= sql_interface->execute_query(query); - if (srv_err) - { - - log_message(MY_ERROR_LEVEL, "SET read_only query execution " - "resulted in failure. errno: %d", srv_err); /* purecov: inspected */ - } #ifndef DBUG_OFF - else + if (srv_err == 0) { + long err; query= "SELECT @@GLOBAL.read_only"; - sql_interface->execute_query(query, &rset); - DBUG_ASSERT(rset.getLong(0) == 0); + err= sql_interface->execute_query(query, &rset); + + DBUG_ASSERT(!err && rset.get_rows() > 0 && rset.getLong(0) == 0); log_message(MY_INFORMATION_LEVEL, "Setting read_only=OFF."); } #endif @@ -351,15 +340,10 @@ internal_get_server_super_read_only(Sql_service_interface *sql_interface) long srv_error= sql_interface->execute_query("SELECT @@GLOBAL.super_read_only", &rset); - if (srv_error == 0) + if (srv_error == 0 && rset.get_rows() > 0) { server_super_read_only= rset.getLong(0); } - else - { - log_message(MY_ERROR_LEVEL, " SELECT @@GLOBAL.read_only " - "resulted in failure. errno: %d", srv_error); /* purecov: inspected */ - } DBUG_RETURN(server_super_read_only); } @@ -393,15 +377,10 @@ internal_get_server_read_only(Sql_service_interface *sql_interface) Sql_resultset rset; longlong server_read_only= -1; long srv_error= sql_interface->execute_query("SELECT @@GLOBAL.read_only", &rset); - if (srv_error == 0) + if (srv_error == 0 && rset.get_rows()) { server_read_only= rset.getLong(0); } - else - { - log_message(MY_ERROR_LEVEL, " SELECT @@GLOBAL.read_only " - "resulted in failure. errno: %d", srv_error); /* purecov: inspected */ - } DBUG_RETURN(server_read_only); } @@ -435,16 +414,11 @@ internal_get_server_gtid_executed(Sql_service_interface *sql_interface, Sql_resultset rset; long srv_err= sql_interface->execute_query("SELECT @@GLOBAL.gtid_executed", &rset); - if (srv_err == 0) + if (srv_err == 0 && rset.get_rows() > 0) { gtid_executed.assign(rset.getString(0)); DBUG_RETURN(0); } - else - { - log_message(MY_ERROR_LEVEL, "Internal query: SELECT GLOBAL.gtid_executed" - " resulted in failure. errno: %d", srv_err); /* purecov: inspected */ - } DBUG_RETURN(1); } diff --git a/rapid/plugin/group_replication/src/sql_service/sql_service_interface.cc b/rapid/plugin/group_replication/src/sql_service/sql_service_interface.cc index 8ec0982c2a16..cb45ef180d6b 100644 --- a/rapid/plugin/group_replication/src/sql_service/sql_service_interface.cc +++ b/rapid/plugin/group_replication/src/sql_service/sql_service_interface.cc @@ -132,13 +132,14 @@ long Sql_service_interface::execute_internal(Sql_resultset *rset, enum enum_server_command cmd_type) { DBUG_ENTER("Sql_service_interface::execute_internal"); - int err= 0; + long err= 0; if (!m_session) { /* purecov: begin inspected */ - log_message(MY_ERROR_LEVEL, "Error, the internal server communication " - "session is not initialized."); + log_message(MY_ERROR_LEVEL, "Error running internal SQL query: %s. " + "The internal server communication session is not initialized", + cmd.com_query.query); DBUG_RETURN(-1); /* purecov: end */ } @@ -146,9 +147,9 @@ long Sql_service_interface::execute_internal(Sql_resultset *rset, if (is_session_killed(m_session)) { /* purecov: begin inspected */ - log_message(MY_INFORMATION_LEVEL, "Error, the internal server communication " - "session is killed or server is shutting" - " down."); + log_message(MY_INFORMATION_LEVEL, "Error running internal SQL query: %s. " + "The internal server session was killed or server is shutting " + "down.", cmd.com_query.query); DBUG_RETURN(-1); /* purecov: end */ } @@ -162,12 +163,34 @@ long Sql_service_interface::execute_internal(Sql_resultset *rset, cs_txt_bin, ctx)) { /* purecov: begin inspected */ - log_message(MY_ERROR_LEVEL, "Error running internal command type: %s." - "Got error: %s(%d)", command_name[cmd_type].str, - rset->sql_errno(), rset->err_msg().c_str()); + err= rset->sql_errno(); + + if (err != 0) + { + log_message(MY_ERROR_LEVEL, "Error running internal SQL query: %s. Got " + "internal SQL error: %s(%d)", cmd.com_query.query, + rset->sql_errno(), rset->err_msg().c_str()); + } + else + { + if (is_session_killed(m_session) && rset->get_killed_status()) + { + log_message(MY_INFORMATION_LEVEL, "Error running internal SQL query: " + "%s. The internal server session was killed or server is " + "shutting down.", cmd.com_query.query); + err= -1; + } + else + { + /* sql_errno is empty and session is alive */ + err= -2; + log_message(MY_ERROR_LEVEL, "Error running internal SQL query: %s. " + "Internal failure.", cmd.com_query.query); + } + } delete ctx; - DBUG_RETURN(rset->sql_errno()); + DBUG_RETURN(err); /* purecov: end */ } diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_relay_log_name_change.result b/rapid/plugin/group_replication/tests/mtr/r/gr_relay_log_name_change.result index 29d01710fdb5..9dbe35e81041 100644 --- a/rapid/plugin/group_replication/tests/mtr/r/gr_relay_log_name_change.result +++ b/rapid/plugin/group_replication/tests/mtr/r/gr_relay_log_name_change.result @@ -10,8 +10,8 @@ call mtr.add_suppression("Error checking relay log repository."); call mtr.add_suppression("Slave failed to initialize relay log info structure from the repository"); call mtr.add_suppression("Error while starting the group replication applier thread"); call mtr.add_suppression("It was not possible to identify the group replication applier thread"); -call mtr.add_suppression("SET read_only query execution resulted in failure. errno: -1"); call mtr.add_suppression("It was not possible to reset the server read mode settings. Try to reset them manually."); +call mtr.add_suppression("Error running internal SQL query:*"); SET SESSION sql_log_bin=1; include/start_and_bootstrap_group_replication.inc diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_relay_log_name_change.test b/rapid/plugin/group_replication/tests/mtr/t/gr_relay_log_name_change.test index aa7ff4463860..7bd60fa8576e 100644 --- a/rapid/plugin/group_replication/tests/mtr/t/gr_relay_log_name_change.test +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_relay_log_name_change.test @@ -32,8 +32,8 @@ call mtr.add_suppression("Error checking relay log repository."); call mtr.add_suppression("Slave failed to initialize relay log info structure from the repository"); call mtr.add_suppression("Error while starting the group replication applier thread"); call mtr.add_suppression("It was not possible to identify the group replication applier thread"); -call mtr.add_suppression("SET read_only query execution resulted in failure. errno: -1"); call mtr.add_suppression("It was not possible to reset the server read mode settings. Try to reset them manually."); +call mtr.add_suppression("Error running internal SQL query:*"); SET SESSION sql_log_bin=1; --source ../inc/start_and_bootstrap_group_replication.inc From 84c32cdbe746fdabc33988fc17b1f11b08fd22e0 Mon Sep 17 00:00:00 2001 From: Sreeharsha Ramanavarapu Date: Thu, 19 Oct 2017 10:19:36 +0530 Subject: [PATCH 0130/1221] Bug #26867652: INCORRECT BEHAVIOR WITH PREPARE STATEMENT AND PARAM IN ORDER BY Issue: ------ This issue can occur when the ORDER BY list refers to a column that contains a parameter in the select list. Solution: --------- In JOIN::update_depend_map and get_sort_by_table, the ORDER BY list's used_tables isn't checked for parameters. This can result in incorrect behavior. This is a partial backport of Roy's --- sql/sql_select.cc | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 80d4b87e9169..eb38d8be382e 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -7430,7 +7430,8 @@ static void update_depend_map(JOIN *join, ORDER *order) { table_map depend_map; order->item[0]->update_used_tables(); - order->depend_map=depend_map=order->item[0]->used_tables(); + order->depend_map=depend_map= + order->item[0]->used_tables() & ~PARAM_TABLE_BIT; order->used= 0; // Not item_sum(), RAND() and no reference to table outside of sub select if (!(order->depend_map & (OUTER_REF_TABLE_BIT | RAND_TABLE_BIT)) @@ -15583,6 +15584,7 @@ get_sort_by_table(ORDER *a,ORDER *b,TABLE_LIST *tables) DBUG_RETURN(0); map|=a->item[0]->used_tables(); } + map&= ~PARAM_TABLE_BIT; if (!map || (map & (RAND_TABLE_BIT | OUTER_REF_TABLE_BIT))) DBUG_RETURN(0); From 139010f6eb44d3f9f22729d16335e11fd13d79ae Mon Sep 17 00:00:00 2001 From: Anibal Pinto Date: Thu, 19 Oct 2017 09:58:45 +0200 Subject: [PATCH 0131/1221] BUG#26821852: GR TEST FAILURES ON PB2 5.7 Tests gr_server_uuid_matches_group_name_bootstrap and gr_server_uuid_matches_group_name_non_bootstrap were executing a assert_grep on error log and the error wasn't yet happened. Put assert_grep on log before cleanup, that guarantee that the error was executed. Test gr_start_replication_auto_with_ssl_recovery had some operations with auto increment not necessary for execution of the test that can trigger some errors on slower platforms. Code remove from test. --- ...r_uuid_matches_group_name_bootstrap.result | 7 ++++- ...id_matches_group_name_non_bootstrap.result | 7 ++++- ..._replication_auto_with_ssl_recovery.result | 4 --- ...ver_uuid_matches_group_name_bootstrap.test | 28 +++++++++++-------- ...uuid_matches_group_name_non_bootstrap.test | 28 +++++++++++-------- ...rt_replication_auto_with_ssl_recovery.test | 17 ----------- 6 files changed, 46 insertions(+), 45 deletions(-) diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_server_uuid_matches_group_name_bootstrap.result b/rapid/plugin/group_replication/tests/mtr/r/gr_server_uuid_matches_group_name_bootstrap.result index 6748a4bd9a8c..774e25dc9cde 100644 --- a/rapid/plugin/group_replication/tests/mtr/r/gr_server_uuid_matches_group_name_bootstrap.result +++ b/rapid/plugin/group_replication/tests/mtr/r/gr_server_uuid_matches_group_name_bootstrap.result @@ -11,7 +11,6 @@ SET @debug_group_replication_local_address= @@GLOBAL.group_replication_local_add [connection server1] # restart:--group_replication_group_name=MEMBER_UUID --group_replication_bootstrap_group=ON --group_replication_local_address=GROUP_REPLICATION_LOCAL_ADDRESS --group_replication_start_on_boot=1 include/assert.inc ['Assert server1 do not join group when server_uuid and group_name are same.'] -include/assert_grep.inc [Found the expected error about server_uuid incompatible with the group_name] ########################### ## SUCCESSFUL SCENARIO ## @@ -24,6 +23,12 @@ SET GLOBAL group_replication_bootstrap_group=OFF; include/start_group_replication.inc include/assert.inc ['Assert server2 joins group when server_uuid and group_name are different.'] +############################ +## VALIDATE ERROR LOGGED ## +############################ + +include/assert_grep.inc [Found the expected error about server_uuid incompatible with the group_name] + ############### ## Cleanup ## ############### diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_server_uuid_matches_group_name_non_bootstrap.result b/rapid/plugin/group_replication/tests/mtr/r/gr_server_uuid_matches_group_name_non_bootstrap.result index 72c7f058c411..24732d96a033 100644 --- a/rapid/plugin/group_replication/tests/mtr/r/gr_server_uuid_matches_group_name_non_bootstrap.result +++ b/rapid/plugin/group_replication/tests/mtr/r/gr_server_uuid_matches_group_name_non_bootstrap.result @@ -15,7 +15,6 @@ include/assert.inc ['Assert server1 bootstraps, server2 will use server1 as seed [connection server2] # restart:--group_replication_local_address=GROUP_REPLICATION_LOCAL_ADDRESS --group_replication_group_seeds=GROUP_REPLICATION_GROUP_SEEDS --group_replication_start_on_boot=1 --group_replication_group_name=MEMBER_UUID include/assert.inc ['Assert server2 do not join group when server_uuid and group_name are same.'] -include/assert_grep.inc [Found the expected error about server_uuid incompatible with the group_name] ########################### ## SUCCESSFUL SCENARIO ## @@ -29,6 +28,12 @@ include/assert.inc ['Assert server1 bootstraps, server2 will use server1 as seed # restart:--group_replication_local_address=GROUP_REPLICATION_LOCAL_ADDRESS --group_replication_group_seeds=GROUP_REPLICATION_GROUP_SEEDS --group_replication_start_on_boot=1 --group_replication_group_name=GROUP_REPLICATION_GROUP_NAME include/assert.inc ['Assert server2 joins group when server_uuid and group_name are different.'] +############################ +## VALIDATE ERROR LOGGED ## +############################ + +include/assert_grep.inc [Found the expected error about server_uuid incompatible with the group_name] + ############### ## Cleanup ## ############### diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_start_replication_auto_with_ssl_recovery.result b/rapid/plugin/group_replication/tests/mtr/r/gr_start_replication_auto_with_ssl_recovery.result index 52cc51504e81..def9bf74630d 100644 --- a/rapid/plugin/group_replication/tests/mtr/r/gr_start_replication_auto_with_ssl_recovery.result +++ b/rapid/plugin/group_replication/tests/mtr/r/gr_start_replication_auto_with_ssl_recovery.result @@ -37,10 +37,6 @@ set session sql_log_bin=1; include/stop_group_replication.inc RESET SLAVE ALL FOR CHANNEL "group_replication_applier"; RESET MASTER; -SET GLOBAL AUTO_INCREMENT_INCREMENT= 1; -SET GLOBAL AUTO_INCREMENT_OFFSET= 1; include/stop_group_replication.inc RESET SLAVE ALL FOR CHANNEL "group_replication_applier"; RESET MASTER; -SET GLOBAL AUTO_INCREMENT_INCREMENT= 7; -SET GLOBAL AUTO_INCREMENT_OFFSET= 1; diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_server_uuid_matches_group_name_bootstrap.test b/rapid/plugin/group_replication/tests/mtr/t/gr_server_uuid_matches_group_name_bootstrap.test index fb99299eb759..436809fdc697 100644 --- a/rapid/plugin/group_replication/tests/mtr/t/gr_server_uuid_matches_group_name_bootstrap.test +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_server_uuid_matches_group_name_bootstrap.test @@ -12,14 +12,14 @@ ## 1. Restart server1 with group_name as server1_uuid ## 1.1. Assert GR do not start. ## Since server_uuid matches group_name GR should not start. -## 1.2. Validate failure logged in error file. ## 2. Restart server1 with unique group_name ## 2.1. Assert GR starts on server1. ## Since server_uuid does not match group_name GR should start. ## 2.2. Start server2 to confirm other servers can join group. ## 2.3. Assert GR starts on server2. ## Since server_uuid does not match group_name GR should start. -## 3. Cleanup +## 3. Validate failure logged in error file. +## 4. Cleanup ################################################################################ --source include/big_test.inc @@ -62,14 +62,6 @@ SET @debug_group_replication_local_address= @@GLOBAL.group_replication_local_add --let $assert_cond= "[SELECT COUNT(*) from performance_schema.replication_group_members WHERE MEMBER_STATE=\"ONLINE\"]" = 0 --source include/assert.inc -## 1.2. Validate failure logged in error file. - ---let $assert_file= $MYSQLTEST_VARDIR/tmp/gr_server_uuid_matches_group_name_bootstrap.1.test ---let $assert_text = Found the expected error about server_uuid incompatible with the group_name ---let $assert_select = Member server_uuid is incompatible with the group ---let $assert_count = 1 ---source include/assert_grep.inc - --echo --echo ########################### --echo ## SUCCESSFUL SCENARIO ## @@ -107,13 +99,27 @@ SET GLOBAL group_replication_bootstrap_group=OFF; --let $assert_cond= "[SELECT COUNT(*) from performance_schema.replication_group_members WHERE MEMBER_STATE=\"ONLINE\"]" = 2 --source include/assert.inc +--echo +--echo ############################ +--echo ## VALIDATE ERROR LOGGED ## +--echo ############################ +--echo + +## 3. Validate failure logged in error file. + +--let $assert_file= $MYSQLTEST_VARDIR/tmp/gr_server_uuid_matches_group_name_bootstrap.1.test +--let $assert_text = Found the expected error about server_uuid incompatible with the group_name +--let $assert_select = Member server_uuid is incompatible with the group +--let $assert_count = 1 +--source include/assert_grep.inc + --echo --echo ############### --echo ## Cleanup ## --echo ############### --echo -## 3. Cleanup +## 4. Cleanup SET @@GLOBAL.group_replication_local_address= @debug_group_replication_local_address; --source include/stop_group_replication.inc diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_server_uuid_matches_group_name_non_bootstrap.test b/rapid/plugin/group_replication/tests/mtr/t/gr_server_uuid_matches_group_name_non_bootstrap.test index 31843681b87f..95b9d625dc5b 100644 --- a/rapid/plugin/group_replication/tests/mtr/t/gr_server_uuid_matches_group_name_non_bootstrap.test +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_server_uuid_matches_group_name_non_bootstrap.test @@ -15,7 +15,6 @@ ## 1. Restart server2 with group_name as server2_uuid ## 1.1. Assert GR do not start. ## Since server_uuid matches group_name GR should not start. -## 1.2. Validate failure logged in error file. ## 2. Start server1 with unique group_name. ## Server1 will work as seed. ## 2.1. Assert GR starts on server1. @@ -23,7 +22,8 @@ ## 2.2. Restart server2 with unique group_name. ## 2.3. Assert GR starts on server2. ## Since server_uuid does not match group_name GR should start. -## 3. Cleanup +## 3. Validate failure logged in error file. +## 4. Cleanup ################################################################################ --source include/big_test.inc @@ -83,14 +83,6 @@ set session sql_log_bin=1; --let $assert_cond= "[SELECT COUNT(*) from performance_schema.replication_group_members WHERE MEMBER_STATE=\"ONLINE\"]" = 0 --source include/assert.inc -## 1.2. Validate failure logged in error file. - ---let $assert_file= $MYSQLTEST_VARDIR/tmp/gr_server_uuid_matches_group_name_non_bootstrap.2.err ---let $assert_text = Found the expected error about server_uuid incompatible with the group_name ---let $assert_select = Member server_uuid is incompatible with the group ---let $assert_count = 1 ---source include/assert_grep.inc - --echo --echo ########################### --echo ## SUCCESSFUL SCENARIO ## @@ -133,13 +125,27 @@ set session sql_log_bin=1; --let $assert_cond= "[SELECT COUNT(*) from performance_schema.replication_group_members WHERE MEMBER_STATE=\"ONLINE\"]" = 2 --source include/assert.inc +--echo +--echo ############################ +--echo ## VALIDATE ERROR LOGGED ## +--echo ############################ +--echo + +## 3. Validate failure logged in error file. + +--let $assert_file= $MYSQLTEST_VARDIR/tmp/gr_server_uuid_matches_group_name_non_bootstrap.2.err +--let $assert_text = Found the expected error about server_uuid incompatible with the group_name +--let $assert_select = Member server_uuid is incompatible with the group +--let $assert_count = 1 +--source include/assert_grep.inc + --echo --echo ############### --echo ## Cleanup ## --echo ############### --echo -## 3. Cleanup +## 4. Cleanup SET @@GLOBAL.group_replication_local_address= @debug_group_replication_local_address; SET @@GLOBAL.group_replication_group_seeds= @debug_group_replication_group_seeds; diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_start_replication_auto_with_ssl_recovery.test b/rapid/plugin/group_replication/tests/mtr/t/gr_start_replication_auto_with_ssl_recovery.test index e778c1ede040..ef9d853c4bcb 100644 --- a/rapid/plugin/group_replication/tests/mtr/t/gr_start_replication_auto_with_ssl_recovery.test +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_start_replication_auto_with_ssl_recovery.test @@ -31,16 +31,7 @@ --replace_result $_group_replication_local_address GROUP_REPLICATION_LOCAL_ADDRESS $_group_replication_group_seeds GROUP_REPLICATION_GROUP_SEEDS --source include/restart_mysqld.inc -# saving initial auto_increment_increment and auto_increment_offset -# to be restored at end ---connection server1 ---let $_init_server1_auto_increment= `SELECT @@GLOBAL.AUTO_INCREMENT_INCREMENT` ---let $_init_server1_auto_offset= `SELECT @@GLOBAL.AUTO_INCREMENT_OFFSET` - --connection server2 ---let $_init_server2_auto_increment= `SELECT @@GLOBAL.AUTO_INCREMENT_INCREMENT` ---let $_init_server2_auto_offset= `SELECT @@GLOBAL.AUTO_INCREMENT_OFFSET` - #Connection options (Update the options file if changed) --let $recovery_user= rec_ssl_user @@ -126,10 +117,6 @@ set session sql_log_bin=1; RESET SLAVE ALL FOR CHANNEL "group_replication_applier"; RESET MASTER; -# reset auto_increment variables from initial saved values ---eval SET GLOBAL AUTO_INCREMENT_INCREMENT= $_init_server2_auto_increment ---eval SET GLOBAL AUTO_INCREMENT_OFFSET= $_init_server2_auto_offset - --connection server1 --source include/stop_group_replication.inc @@ -137,8 +124,4 @@ RESET MASTER; RESET SLAVE ALL FOR CHANNEL "group_replication_applier"; RESET MASTER; -# reset auto_increment variables from initial saved values ---eval SET GLOBAL AUTO_INCREMENT_INCREMENT= $_init_server1_auto_increment ---eval SET GLOBAL AUTO_INCREMENT_OFFSET= $_init_server1_auto_offset - --source ../inc/gr_clear_configuration.inc From 5dbe2a61dec66aa9f02eea6ea9d488e33cff61f4 Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Thu, 19 Oct 2017 16:31:55 +0200 Subject: [PATCH 0132/1221] From cf9e87f9993e91c296962433bfa3edf18563e884 Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Fri, 20 Oct 2017 12:06:02 +0530 Subject: [PATCH 0133/1221] From cc54258fff4bde2c145dad39693092d1b57321eb Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Fri, 20 Oct 2017 19:00:10 +0200 Subject: [PATCH 0134/1221] From a542209b9e70e28e88ba60d2e4441a8c2d3e746c Mon Sep 17 00:00:00 2001 From: Karthik Kamath Date: Mon, 23 Oct 2017 10:56:20 +0530 Subject: [PATCH 0135/1221] BUG#26529369: CREATE INDEX WITH LONG COMMENT CAUSE UNEXPECTED ERROR ANALYSIS: ========= Creating many indexes with large amount of index information causes a server exit. FIX: ==== A appropriate error is reported when the cumulative index information length exceeds the 2 byte range (i.e 65535). --- sql/unireg.cc | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/sql/unireg.cc b/sql/unireg.cc index d77a6b062759..788046cfae4c 100644 --- a/sql/unireg.cc +++ b/sql/unireg.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -283,6 +283,25 @@ bool mysql_create_frm(THD *thd, const char *file_name, keybuff=(uchar*) my_malloc(key_buff_length, MYF(0)); key_info_length= pack_keys(keybuff, keys, key_info, data_offset); + /* key_info_length is currently stored in 2 bytes */ + if (key_info_length > 65535U) + { + char *real_table_name= (char*) table; + List_iterator it(create_fields); + Create_field *field; + while ((field=it++)) + { + if (field->field && field->field->table && + (real_table_name= field->field->table->s->table_name.str)) + break; + } + my_printf_error(ER_UNKNOWN_ERROR, + "Index information size for the table %s.%s exceeds the " + "maximum limit (Max: 2 bytes). Please recreate indexes " + "accordingly.", MYF(0), db, real_table_name); + goto err; + } + /* Ensure that there are no forms in this newly created form file. Even if the form file exists, create_frm must truncate it to From 9cdbc6a2a8393c0d32e6761f6062c9e77a31059d Mon Sep 17 00:00:00 2001 From: Maria Couceiro Date: Tue, 26 Sep 2017 12:15:37 +0100 Subject: [PATCH 0136/1221] BUG#26280724 ASSERT FAILURE WHEN REPLICATING TABLE WITH VIRTUAL JSON COLUMN Problem and analysis: When row based replication is enabled and slave-rows-search-algorithms is set to 'INDEX_SCAN,HASH_SCAN', updating a table containing a virtual generated field that relies on its string representation to generate the hash for the table scan would result in an error when generating the said string. Fix: Since virtual generated fields cannot be used to identify a row, do not create hashes for virtual generated fields. Also, exclude these fields when comparing records field by field. --- .../suite/rpl/r/rpl_virtual_gcol.result | 69 +++++++++++ mysql-test/suite/rpl/t/rpl_virtual_gcol.test | 113 ++++++++++++++++++ sql/log_event.cc | 2 +- sql/rpl_utility.cc | 4 +- 4 files changed, 186 insertions(+), 2 deletions(-) create mode 100644 mysql-test/suite/rpl/r/rpl_virtual_gcol.result create mode 100644 mysql-test/suite/rpl/t/rpl_virtual_gcol.test diff --git a/mysql-test/suite/rpl/r/rpl_virtual_gcol.result b/mysql-test/suite/rpl/r/rpl_virtual_gcol.result new file mode 100644 index 000000000000..b59bc265c67c --- /dev/null +++ b/mysql-test/suite/rpl/r/rpl_virtual_gcol.result @@ -0,0 +1,69 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +[connection slave] +set @saved_slave_rows_search_algorithms= @@global.slave_rows_search_algorithms; +SET GLOBAL slave_rows_search_algorithms= 'INDEX_SCAN,HASH_SCAN'; +[connection master] +CREATE TABLE gtable (doc JSON); +INSERT INTO gtable (doc) VALUES +('{"id": 1, "name": "abcd efgh"}'), +('{"id": 2, "name": "abcd ijk"}'); +ALTER TABLE gtable ADD COLUMN gtext JSON +GENERATED ALWAYS AS (JSON_EXTRACT(doc, '$.name')) VIRTUAL; +include/sync_slave_sql_with_master.inc +[connection master] +UPDATE gtable SET doc = JSON_SET(doc, '$.name', 'abcd lmnopqrstuvxz') +WHERE JSON_EXTRACT(doc, '$.id') = 2; +include/sync_slave_sql_with_master.inc +[connection master] +INSERT INTO gtable(doc) VALUES (NULL); +include/sync_slave_sql_with_master.inc +[connection master] +UPDATE gtable SET doc = '{ "id": 4, "name": "abc aba" }' where doc IS NULL; +include/sync_slave_sql_with_master.inc +[connection master] +UPDATE gtable SET doc = NULL WHERE JSON_EXTRACT(doc, '$.id') = 4; +include/sync_slave_sql_with_master.inc +[connection master] +DROP TABLE gtable; +include/sync_slave_sql_with_master.inc +[connection master] +CREATE TABLE gtable(id INT, doc JSON, gcol JSON AS (JSON_ARRAY(id, doc))); +INSERT INTO gtable(id, doc) VALUES(10, '{"a": 1}'); +include/sync_slave_sql_with_master.inc +[connection master] +UPDATE gtable SET doc = JSON_REPLACE(gcol, '$[0].a',"a"); +include/sync_slave_sql_with_master.inc +[connection master] +DROP TABLE gtable; +include/sync_slave_sql_with_master.inc +[connection master] +CREATE TABLE gtable (doc TEXT); +INSERT INTO gtable (doc) VALUES ('point(1 1)'), ('point(2 2)'); +ALTER TABLE gtable ADD COLUMN gtext GEOMETRY +GENERATED ALWAYS AS (ST_GEOMFROMTEXT(doc)) VIRTUAL; +UPDATE gtable SET doc = 'POINT(3 3)' WHERE ST_X(ST_GEOMFROMTEXT(doc)) = 2; +INSERT INTO gtable(doc) VALUES (NULL); +UPDATE gtable SET doc = 'POINT(4 4)' where doc IS NULL; +UPDATE gtable SET doc = NULL WHERE ST_X(ST_GEOMFROMTEXT(doc)) = 4; +include/sync_slave_sql_with_master.inc +# Cleanup +[connection master] +DROP TABLE gtable; +include/sync_slave_sql_with_master.inc +[connection master] +CREATE TABLE gtable(a DOUBLE, +b DOUBLE AS (a * a)); +INSERT INTO gtable (a) VALUES (1); +include/sync_slave_sql_with_master.inc +[connection master] +UPDATE gtable SET a= 2; +include/sync_slave_sql_with_master.inc +[connection master] +DROP TABLE gtable; +include/sync_slave_sql_with_master.inc +SET @@global.slave_rows_search_algorithms= @saved_slave_rows_search_algorithms; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_virtual_gcol.test b/mysql-test/suite/rpl/t/rpl_virtual_gcol.test new file mode 100644 index 000000000000..6f8601bd25d7 --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_virtual_gcol.test @@ -0,0 +1,113 @@ +# +# ==== Purpose ==== +# +# The test checks if different operations on rows with generated fields as json, +# geometry and double are completed without errors when +# slave_rows_search_algorithms uses hash scan. +# +# ==== References ==== +# +# BUG#26280724 ASSERT FAILURE WHEN REPLICATING TABLE WITH VIRTUAL JSON COLUMN +# + +--source include/have_binlog_format_row.inc +--source include/master-slave.inc + +--source include/rpl_connection_slave.inc +set @saved_slave_rows_search_algorithms= @@global.slave_rows_search_algorithms; +SET GLOBAL slave_rows_search_algorithms= 'INDEX_SCAN,HASH_SCAN'; +--source include/rpl_connection_master.inc + +# +# Generated column as json +# +CREATE TABLE gtable (doc JSON); +INSERT INTO gtable (doc) VALUES + ('{"id": 1, "name": "abcd efgh"}'), + ('{"id": 2, "name": "abcd ijk"}'); +ALTER TABLE gtable ADD COLUMN gtext JSON + GENERATED ALWAYS AS (JSON_EXTRACT(doc, '$.name')) VIRTUAL; +--source include/sync_slave_sql_with_master.inc + +# update one of the rows + +--source include/rpl_connection_master.inc +UPDATE gtable SET doc = JSON_SET(doc, '$.name', 'abcd lmnopqrstuvxz') + WHERE JSON_EXTRACT(doc, '$.id') = 2; +--source include/sync_slave_sql_with_master.inc + +# Insert a null row and modify it + +--source include/rpl_connection_master.inc +INSERT INTO gtable(doc) VALUES (NULL); +--source include/sync_slave_sql_with_master.inc + +--source include/rpl_connection_master.inc +UPDATE gtable SET doc = '{ "id": 4, "name": "abc aba" }' where doc IS NULL; +--source include/sync_slave_sql_with_master.inc + +--source include/rpl_connection_master.inc +UPDATE gtable SET doc = NULL WHERE JSON_EXTRACT(doc, '$.id') = 4; +--source include/sync_slave_sql_with_master.inc + +# cleanup +--source include/rpl_connection_master.inc +DROP TABLE gtable; +--source include/sync_slave_sql_with_master.inc + +# +# Generated column as a json (array) +# +--source include/rpl_connection_master.inc +CREATE TABLE gtable(id INT, doc JSON, gcol JSON AS (JSON_ARRAY(id, doc))); +INSERT INTO gtable(id, doc) VALUES(10, '{"a": 1}'); +--source include/sync_slave_sql_with_master.inc + +--source include/rpl_connection_master.inc +UPDATE gtable SET doc = JSON_REPLACE(gcol, '$[0].a',"a"); +--source include/sync_slave_sql_with_master.inc + +# cleanup +--source include/rpl_connection_master.inc +DROP TABLE gtable; +--source include/sync_slave_sql_with_master.inc + +# +# Generated as geometry +# +--source include/rpl_connection_master.inc +CREATE TABLE gtable (doc TEXT); +INSERT INTO gtable (doc) VALUES ('point(1 1)'), ('point(2 2)'); +ALTER TABLE gtable ADD COLUMN gtext GEOMETRY + GENERATED ALWAYS AS (ST_GEOMFROMTEXT(doc)) VIRTUAL; + +UPDATE gtable SET doc = 'POINT(3 3)' WHERE ST_X(ST_GEOMFROMTEXT(doc)) = 2; +INSERT INTO gtable(doc) VALUES (NULL); +UPDATE gtable SET doc = 'POINT(4 4)' where doc IS NULL; +UPDATE gtable SET doc = NULL WHERE ST_X(ST_GEOMFROMTEXT(doc)) = 4; +--source include/sync_slave_sql_with_master.inc + +--echo # Cleanup +--source include/rpl_connection_master.inc +DROP TABLE gtable; +--source include/sync_slave_sql_with_master.inc + +# +# Generated column as double +# +--source include/rpl_connection_master.inc +CREATE TABLE gtable(a DOUBLE, + b DOUBLE AS (a * a)); +INSERT INTO gtable (a) VALUES (1); +--source include/sync_slave_sql_with_master.inc + +--source include/rpl_connection_master.inc +UPDATE gtable SET a= 2; +--source include/sync_slave_sql_with_master.inc + +# cleanup +--source include/rpl_connection_master.inc +DROP TABLE gtable; +--source include/sync_slave_sql_with_master.inc +SET @@global.slave_rows_search_algorithms= @saved_slave_rows_search_algorithms; +--source include/rpl_end.inc diff --git a/sql/log_event.cc b/sql/log_event.cc index 2339ee8323c3..ee4bbffdb03f 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -9881,7 +9881,7 @@ static bool record_compare(TABLE *table, MY_BITMAP *cols) ptr++) { Field *field= *ptr; - if (bitmap_is_set(cols, field->field_index)) + if (bitmap_is_set(cols, field->field_index) && !field->is_virtual_gcol()) { /* compare null bit */ if (field->is_null() != field->is_null_in_record(table->record[1])) diff --git a/sql/rpl_utility.cc b/sql/rpl_utility.cc index 01f69023758c..9b76c689c541 100644 --- a/sql/rpl_utility.cc +++ b/sql/rpl_utility.cc @@ -1262,7 +1262,9 @@ Hash_slave_rows::make_hash_key(TABLE *table, MY_BITMAP *cols) /* Field is set in the read_set and is isn't NULL. */ - if (bitmap_is_set(cols, f->field_index) && !f->is_null()) + if (bitmap_is_set(cols, f->field_index) && + !f->is_virtual_gcol() && // Avoid virtual generated columns on hashes + !f->is_null()) { /* BLOB and VARCHAR have pointers in their field, we must convert From 06fa1460dce89597d5d09eafd73bdd48bc4e0e70 Mon Sep 17 00:00:00 2001 From: Daogang Qu Date: Tue, 24 Oct 2017 11:21:19 +0800 Subject: [PATCH 0137/1221] Bug #26976071 TYPO, 'THE BINLOG AND LOG_SLAVE UPDATE OPTIONS' Start mysqld with --skip-log-bin causes the following error message: [ERROR] mysqld: slave_preserve_commit_order is not supported unless the binlog and log_slave update options are both enabled. The error message is misleading, since there is no such option as "log_slave update". To fix the problem, correct the error message to "slave_preserve_commit_order is not supported unless both log_bin and log_slave_updates are enabled.". --- .../r/rpl_mts_slave_preserve_commit_order_config_error.result | 4 ++-- .../t/rpl_mts_slave_preserve_commit_order_config_error.test | 4 ++-- .../tests/mtr/r/gr_startup_verifications_not_binlog.result | 2 +- .../r/gr_startup_verifications_not_log_slave_updates.result | 2 +- .../tests/mtr/t/gr_startup_verifications_not_binlog.test | 2 +- .../mtr/t/gr_startup_verifications_not_log_slave_updates.test | 2 +- sql/rpl_slave.cc | 3 +-- 7 files changed, 9 insertions(+), 10 deletions(-) diff --git a/mysql-test/suite/rpl/r/rpl_mts_slave_preserve_commit_order_config_error.result b/mysql-test/suite/rpl/r/rpl_mts_slave_preserve_commit_order_config_error.result index fdec68c7755c..d0bc3f749598 100644 --- a/mysql-test/suite/rpl/r/rpl_mts_slave_preserve_commit_order_config_error.result +++ b/mysql-test/suite/rpl/r/rpl_mts_slave_preserve_commit_order_config_error.result @@ -4,10 +4,10 @@ Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. [connection master] [connection slave] -CALL mtr.add_suppression(".* slave_preserve_commit_order is not supported unless the binlog and log_slave update options are both enabled."); +CALL mtr.add_suppression(".* slave_preserve_commit_order is not supported unless both log_bin and log_slave_updates are enabled."); include/assert_grep.inc [Slave incompatible configuration error present in log] START SLAVE; -ERROR HY000: slave_preserve_commit_order is not supported unless the binlog and log_slave update options are both enabled. +ERROR HY000: slave_preserve_commit_order is not supported unless both log_bin and log_slave_updates are enabled. SET @@GLOBAL.slave_preserve_commit_order= FALSE; include/start_slave.inc include/stop_slave.inc diff --git a/mysql-test/suite/rpl/t/rpl_mts_slave_preserve_commit_order_config_error.test b/mysql-test/suite/rpl/t/rpl_mts_slave_preserve_commit_order_config_error.test index 5d2308921674..9d22f5d4246c 100644 --- a/mysql-test/suite/rpl/t/rpl_mts_slave_preserve_commit_order_config_error.test +++ b/mysql-test/suite/rpl/t/rpl_mts_slave_preserve_commit_order_config_error.test @@ -34,13 +34,13 @@ --source include/master-slave.inc --source include/rpl_connection_slave.inc -CALL mtr.add_suppression(".* slave_preserve_commit_order is not supported unless the binlog and log_slave update options are both enabled."); +CALL mtr.add_suppression(".* slave_preserve_commit_order is not supported unless both log_bin and log_slave_updates are enabled."); # check if the error ER_DONT_SUPPORT_SLAVE_PRESERVE_COMMIT_ORDER is present in # the slave's log file --let $assert_file=$MYSQLTEST_VARDIR/log/mysqld.2.err --let $assert_text= Slave incompatible configuration error present in log ---let $assert_select= slave_preserve_commit_order is not supported unless the binlog and log_slave update options are both enabled +--let $assert_select= slave_preserve_commit_order is not supported unless both log_bin and log_slave_updates are enabled --let $assert_count= 1 --let $assert_only_after= CURRENT_TEST: rpl.rpl_mts_slave_preserve_commit_order_config_error --source include/assert_grep.inc diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_startup_verifications_not_binlog.result b/rapid/plugin/group_replication/tests/mtr/r/gr_startup_verifications_not_binlog.result index f2368a53a68f..2ba3a5937a8a 100644 --- a/rapid/plugin/group_replication/tests/mtr/r/gr_startup_verifications_not_binlog.result +++ b/rapid/plugin/group_replication/tests/mtr/r/gr_startup_verifications_not_binlog.result @@ -6,4 +6,4 @@ START GROUP_REPLICATION; ERROR HY000: The server is not configured properly to be an active member of the group. Please see more details on error log. call mtr.add_suppression("Binlog must be enabled for Group Replication"); call mtr.add_suppression("You need to use --log-bin"); -call mtr.add_suppression("slave_preserve_commit_order is not supported unless the binlog and log_slave update options are both enabled."); +call mtr.add_suppression("slave_preserve_commit_order is not supported unless both log_bin and log_slave_updates are enabled."); diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_startup_verifications_not_log_slave_updates.result b/rapid/plugin/group_replication/tests/mtr/r/gr_startup_verifications_not_log_slave_updates.result index 76e0ef90810d..d9534cb962f0 100644 --- a/rapid/plugin/group_replication/tests/mtr/r/gr_startup_verifications_not_log_slave_updates.result +++ b/rapid/plugin/group_replication/tests/mtr/r/gr_startup_verifications_not_log_slave_updates.result @@ -5,7 +5,7 @@ Note #### Storing MySQL user name or password information in the master info rep [connection server1] SET SESSION sql_log_bin= 0; call mtr.add_suppression("LOG_SLAVE_UPDATES should be ON for Group Replication"); -call mtr.add_suppression("slave_preserve_commit_order is not supported unless the binlog and log_slave update options are both enabled."); +call mtr.add_suppression("slave_preserve_commit_order is not supported unless both log_bin and log_slave_updates are enabled."); SET SESSION sql_log_bin= 1; include/assert.inc [LOG_SLAVE_UPDATES is set to OFF] # diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_startup_verifications_not_binlog.test b/rapid/plugin/group_replication/tests/mtr/t/gr_startup_verifications_not_binlog.test index cc29ecf2b8e2..5201f7aa9e37 100644 --- a/rapid/plugin/group_replication/tests/mtr/t/gr_startup_verifications_not_binlog.test +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_startup_verifications_not_binlog.test @@ -42,4 +42,4 @@ START GROUP_REPLICATION; call mtr.add_suppression("Binlog must be enabled for Group Replication"); call mtr.add_suppression("You need to use --log-bin"); -call mtr.add_suppression("slave_preserve_commit_order is not supported unless the binlog and log_slave update options are both enabled."); +call mtr.add_suppression("slave_preserve_commit_order is not supported unless both log_bin and log_slave_updates are enabled."); diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_startup_verifications_not_log_slave_updates.test b/rapid/plugin/group_replication/tests/mtr/t/gr_startup_verifications_not_log_slave_updates.test index f7ac8e1a7b8d..f0572005937d 100644 --- a/rapid/plugin/group_replication/tests/mtr/t/gr_startup_verifications_not_log_slave_updates.test +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_startup_verifications_not_log_slave_updates.test @@ -19,7 +19,7 @@ SET SESSION sql_log_bin= 0; call mtr.add_suppression("LOG_SLAVE_UPDATES should be ON for Group Replication"); -call mtr.add_suppression("slave_preserve_commit_order is not supported unless the binlog and log_slave update options are both enabled."); +call mtr.add_suppression("slave_preserve_commit_order is not supported unless both log_bin and log_slave_updates are enabled."); SET SESSION sql_log_bin= 1; --let $assert_text= LOG_SLAVE_UPDATES is set to OFF diff --git a/sql/rpl_slave.cc b/sql/rpl_slave.cc index 2bbc719d8c94..e41caf9b3376 100644 --- a/sql/rpl_slave.cc +++ b/sql/rpl_slave.cc @@ -11546,8 +11546,7 @@ static int check_slave_sql_config_conflict(const Relay_log_info *rli) channel_mts_submode == MTS_PARALLEL_TYPE_LOGICAL_CLOCK) { my_error(ER_DONT_SUPPORT_SLAVE_PRESERVE_COMMIT_ORDER, MYF(0), - "unless the binlog and log_slave update options are " - "both enabled"); + "unless both log_bin and log_slave_updates are enabled"); return ER_DONT_SUPPORT_SLAVE_PRESERVE_COMMIT_ORDER; } } From 89fc40e0b5a19b096c344aea2facf99f409ecea7 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Wed, 25 Oct 2017 14:03:21 +0200 Subject: [PATCH 0138/1221] Bug#26116415 TABLESPACE CLAUSE CONFUSES MYSQLPUMP Before this fix, mysqlpump failed to export tables using a tablespace. The root cause is that mysqlpump parses the result of SHOW CREATE TABLE, and is not expecting the TABLESPACE clause. In the following statement: CREATE TABLE `t1` ( `a` int(11) DEFAULT NULL ) /*!50100 TABLESPACE `mytbsp` */ ENGINE=InnoDB DEFAULT CHARSET=latin1 MYSQLPUMP was looking for ") ENGINE=" ..., and failed to detect this line. The fix is to relax parsing of SHOW CREATE TABLE, so that the line: ) /*!50100 TABLESPACE `mytbsp` */ ENGINE=... is also detected as the table options clause. --- client/dump/table.cc | 15 ++++++++++++--- mysql-test/r/mysqlpump_basic.result | 18 ++++++++++++++++++ mysql-test/t/mysqlpump_basic.test | 24 ++++++++++++++++++++++++ 3 files changed, 54 insertions(+), 3 deletions(-) diff --git a/client/dump/table.cc b/client/dump/table.cc index 8115c978a744..aa1d4da56a56 100644 --- a/client/dump/table.cc +++ b/client/dump/table.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2015, 2016 Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2015, 2017 Oracle and/or its affiliates. All rights reserved. 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 @@ -39,10 +39,14 @@ Table::Table(uint64 id, const std::string& name, const std::string& schema, for (std::vector::iterator it= definition_lines.begin(); it != definition_lines.end(); ++it) { + /* + MAINTAINER: This code parses the output of SHOW CREATE TABLE. + @TODO: Instead, look up INFORMATION_SCHEMA and get the table details. + */ + boost::trim_left(*it); if (!engine_line_read) boost::trim_if(*it, boost::is_any_of(",")); - // TODO: Look up INFORMATION_SCHEMA and get the table details. if (boost::starts_with(*it, "KEY ") || boost::starts_with(*it, "INDEX ") || boost::starts_with(*it, "UNIQUE KEY ") @@ -57,7 +61,12 @@ Table::Table(uint64 id, const std::string& name, const std::string& schema, } else { - if (boost::starts_with(*it, ") ENGINE=")) + /* + Make sure we detect the table options clauses, + even with different syntaxes (with or without TABLESPACE) + */ + if (boost::starts_with(*it, ")") && + boost::contains(*it, "ENGINE=")) { engine_line_read= true; std::string &sql_def = m_sql_definition_without_indexes; diff --git a/mysql-test/r/mysqlpump_basic.result b/mysql-test/r/mysqlpump_basic.result index 59a63bc30f6e..f4f12e75e33d 100644 --- a/mysql-test/r/mysqlpump_basic.result +++ b/mysql-test/r/mysqlpump_basic.result @@ -718,3 +718,21 @@ INSERT INTO t VALUES (9), (0); DROP DATABASE bug26694675; check for warnings Pattern "mysqlpump: \[WARNING\]" not found +# +# Bug#26116415 TABLESPACE CLAUSE CONFUSES MYSQLPUMP +# +CREATE TABLESPACE `mytbsp` ADD DATAFILE 'mytbsp.ibd' ENGINE INNODB; +CREATE TABLE `test`.`t1` (a integer) TABLESPACE `mytbsp`; +SHOW CREATE TABLE test.t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL +) /*!50100 TABLESPACE `mytbsp` */ ENGINE=InnoDB DEFAULT CHARSET=latin1 +DROP TABLE `test`.`t1`; +SHOW CREATE TABLE test.t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL +) /*!50100 TABLESPACE `mytbsp` */ ENGINE=InnoDB DEFAULT CHARSET=latin1 +DROP TABLE `test`.`t1`; +DROP TABLESPACE `mytbsp`; diff --git a/mysql-test/t/mysqlpump_basic.test b/mysql-test/t/mysqlpump_basic.test index 6bab4d787595..0081f6b4ceb4 100644 --- a/mysql-test/t/mysqlpump_basic.test +++ b/mysql-test/t/mysqlpump_basic.test @@ -643,3 +643,27 @@ let SEARCH_PATTERN= mysqlpump: \[WARNING\]; # cleanup --remove_file $MYSQLTEST_VARDIR/log/err.log --remove_file $MYSQLTEST_VARDIR/tmp/bug26694675.sql + +-- echo # +-- echo # Bug#26116415 TABLESPACE CLAUSE CONFUSES MYSQLPUMP +-- echo # + +CREATE TABLESPACE `mytbsp` ADD DATAFILE 'mytbsp.ibd' ENGINE INNODB; + +CREATE TABLE `test`.`t1` (a integer) TABLESPACE `mytbsp`; + +SHOW CREATE TABLE test.t1; + +--let $program= $MYSQL_PUMP --include-databases=test --include-tables=t1 + +--exec $PROGRAM >> $MYSQL_TMP_DIR/mysqlpump.sql + +DROP TABLE `test`.`t1`; + +--exec $MYSQL < $MYSQL_TMP_DIR/mysqlpump.sql + +SHOW CREATE TABLE test.t1; + +DROP TABLE `test`.`t1`; +DROP TABLESPACE `mytbsp`; + From 22a15005833791d11a3cde58338a6591dd9e305b Mon Sep 17 00:00:00 2001 From: Venkatesh Duggirala Date: Wed, 25 Oct 2017 21:45:49 +0530 Subject: [PATCH 0139/1221] Bug#26748533 SEMISYNC MASTER CRASH AFTER RESET MASTER Problem: While some active transaction are waiting for ack from Slave, executing 'RESET MASTER' is leaving Master's semisync in bad state. Analysis: In ReplSemiSyncMaster::commitTrx, when transaction is waiting for an acknowledgement from the Slave, before it goes into the wait state, it increases rpl_semi_sync_master_wait_sessions status variable to indicate the number of sessions waiting for the acknowledgements. Also before it goes into the wait state, it releases LOCK_binlog_ lock to avoid any hang issues for the other sessions which are looking for LOCK_binlog_. When the thread releases LOCK_binlog_ lock and waiting for the acknowledgement, there is a possibility that some other thread which is executing 'RESET MASTER' can get the lock and reset all the status variables. rpl_semi_sync_master_wait_sessions is one of such status variables. After the wait is over in ReplSemiSyncMaster::commitTrx (either the timeout or received acknowledgement from Slave), the logic is decreasing rpl_semi_sync_master_wait_sessions) without checking whether 'RESET MASTER' was executing by any other parallel thread. This leads invalid value for rpl_semi_sync_master_wait_sessions status variable. Any other logic which is trying to use this status variable will lead to unexpected results in the server. Fix: Check the value of rpl_semi_sync_master_wait_sessions before decrementing it and decrement it only if it is non-zero value. --- plugin/semisync/semisync_master.cc | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/plugin/semisync/semisync_master.cc b/plugin/semisync/semisync_master.cc index a2d03bc2a1d1..7ba6254baa8a 100644 --- a/plugin/semisync/semisync_master.cc +++ b/plugin/semisync/semisync_master.cc @@ -1,5 +1,5 @@ /* Copyright (C) 2007 Google Inc. - Copyright (c) 2008, 2016, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2008, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -813,7 +813,15 @@ int ReplSemiSyncMaster::commitTrx(const char* trx_wait_binlog_name, entry->n_waiters++; wait_result= mysql_cond_timedwait(&entry->cond, &LOCK_binlog_, &abstime); entry->n_waiters--; - rpl_semi_sync_master_wait_sessions--; + /* + After we release LOCK_binlog_ above while waiting for the condition, + it can happen that some other parallel client session executed + RESET MASTER. That can set rpl_semi_sync_master_wait_sessions to zero. + Hence check the value before decrementing it and decrement it only if it is + non-zero value. + */ + if (rpl_semi_sync_master_wait_sessions > 0) + rpl_semi_sync_master_wait_sessions--; if (wait_result != 0) { From bd1fe2613a920d3c193f2d72d84ac8d954e4f3f6 Mon Sep 17 00:00:00 2001 From: Arun Kuruvila Date: Thu, 26 Oct 2017 18:07:36 +0530 Subject: [PATCH 0140/1221] Bug #26880757: MYISAM_USE_MMAP=1 ON WINDOWS FREQUENTLY DOES NOT UPDATE FILE ON DISK Description:- When the server variable, "myisam_use_mmap" is enabled, MyISAM tables on windows are not updating the file on disk even when the server variable "flush" is set to 1. This is inturn making the table corrupted when encountering a power failure. Analysis:- When the server variable "myisam_use_mmap" is set, files of MyISAM tables will be memory mapped using the OS APIs mmap()/munmap()/msync() on Unix and CreateFileMapping() /UnmapViewOfFile()/FlushViewOfFile() on Windows. msync() and FlushViewOfFile() is responsible for flushing the changes made to the in-core copy of a file that was mapped into memory using mmap()/CreateFileMapping() back to the file system. FLUSH is determined by the OS unless explicitly called using msync()/FlushViewOfFile(). When the server variables "myisam_use_mmap" and "flush" are enabled, MyISAM is only flushing the files from file system cache to disc using "mysql_file_sync()" and not the memory mapped file from memory to FS cache using "my_msync()". ["my_msync()" inturn calls msync() on Unix and FlushViewOfFile() on Windows. Fix:- As part of the fix, if server variable "myisam_use_mmap" is enabled along with "flush", "my_msync()" is invoked to flush the data in memory to file system cache and followed by "mysql_file_sync()" which will flush the data from file system cache to disk. --- storage/myisam/mi_locking.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/storage/myisam/mi_locking.c b/storage/myisam/mi_locking.c index 98c2a6c75499..4a33e838fb93 100644 --- a/storage/myisam/mi_locking.c +++ b/storage/myisam/mi_locking.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -103,6 +103,8 @@ int mi_lock_database(MI_INFO *info, int lock_type) share->changed=0; if (myisam_flush) { + if (share->file_map) + my_msync(info->dfile, share->file_map, share->mmaped_length, MS_SYNC); if (mysql_file_sync(share->kfile, MYF(0))) error= my_errno; if (mysql_file_sync(info->dfile, MYF(0))) @@ -450,6 +452,8 @@ int _mi_writeinfo(register MI_INFO *info, uint operation) #ifdef _WIN32 if (myisam_flush) { + if (share->file_map) + my_msync(info->dfile, share->file_map, share->mmaped_length, MS_SYNC); mysql_file_sync(share->kfile, 0); mysql_file_sync(info->dfile, 0); } From dae6d3252c8d1303bbbd213bdad62e2ed704d472 Mon Sep 17 00:00:00 2001 From: Maria Couceiro Date: Fri, 27 Oct 2017 09:19:58 +0100 Subject: [PATCH 0141/1221] BUG#25873029 HEAP-USE-AFTER-FREE IN RPL.RPL_JSON [noclose] Disabling rpl.rpl_virtual_gcol test for valgrind and ASAN runs. --- mysql-test/suite/rpl/t/rpl_virtual_gcol.test | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/mysql-test/suite/rpl/t/rpl_virtual_gcol.test b/mysql-test/suite/rpl/t/rpl_virtual_gcol.test index 6f8601bd25d7..3e214b50116c 100644 --- a/mysql-test/suite/rpl/t/rpl_virtual_gcol.test +++ b/mysql-test/suite/rpl/t/rpl_virtual_gcol.test @@ -10,6 +10,10 @@ # BUG#26280724 ASSERT FAILURE WHEN REPLICATING TABLE WITH VIRTUAL JSON COLUMN # +# test disabled in valgrind and ASAN due to BUG#25873029 +--source include/not_valgrind.inc +--source include/not_asan.inc + --source include/have_binlog_format_row.inc --source include/master-slave.inc From b1a1d0dc98862da566a260942a5739bf52a36415 Mon Sep 17 00:00:00 2001 From: Karthik Kamath Date: Fri, 27 Oct 2017 11:55:47 +0100 Subject: [PATCH 0142/1221] --- sql/sql_parse.cc | 22 ++++++++++++++++------ sql/sql_parse.h | 3 ++- sql/sql_table.cc | 5 +++-- 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index d93ba1a2dd94..6fb9b1341a72 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -5839,10 +5839,11 @@ bool check_global_access(THD *thd, ulong want_access) /** Checks foreign key's parent table access. - @param thd [in] Thread handler - @param create_info [in] Create information (like MAX_ROWS, ENGINE or + @param thd [in] Thread handler + @param child_table_db [in] Database of child table + @param create_info [in] Create information (like MAX_ROWS, ENGINE or temporary table flag) - @param alter_info [in] Initial list of columns and indexes for the + @param alter_info [in] Initial list of columns and indexes for the table to be created @retval @@ -5851,6 +5852,7 @@ bool check_global_access(THD *thd, ulong want_access) true error or access denied. Error is sent to client in this case. */ bool check_fk_parent_table_access(THD *thd, + const char *child_table_db, HA_CREATE_INFO *create_info, Alter_info *alter_info) { @@ -5895,10 +5897,17 @@ bool check_fk_parent_table_access(THD *thd, if (fk_key->ref_db.str && check_and_convert_db_name(&db_name, false)) return true; } - else if (thd->lex->copy_db_to(&db_name.str, &db_name.length)) - return true; else + { + /* + If database name for parent table is not specified explicitly + SEs assume that it is the same as database name of child table. + We do the same here. + */ is_qualified_table_name= false; + db_name.str= const_cast(child_table_db); + db_name.length= strlen(child_table_db); + } // if lower_case_table_names is set then convert tablename to lower case. if (lower_case_table_names) @@ -8027,7 +8036,8 @@ bool create_table_precheck(THD *thd, TABLE_LIST *tables, goto err; } - if (check_fk_parent_table_access(thd, &lex->create_info, &lex->alter_info)) + if (check_fk_parent_table_access(thd, create_table->db, + &lex->create_info, &lex->alter_info)) goto err; error= FALSE; diff --git a/sql/sql_parse.h b/sql/sql_parse.h index d062a36acb21..6ad96fa4f43b 100644 --- a/sql/sql_parse.h +++ b/sql/sql_parse.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2006, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2006, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -50,6 +50,7 @@ bool insert_precheck(THD *thd, TABLE_LIST *tables); bool create_table_precheck(THD *thd, TABLE_LIST *tables, TABLE_LIST *create_table); bool check_fk_parent_table_access(THD *thd, + const char *child_table_db, HA_CREATE_INFO *create_info, Alter_info *alter_info); diff --git a/sql/sql_table.cc b/sql/sql_table.cc index 5b0b94ffcd59..0c0eac690aab 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -8135,7 +8135,8 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name, till this point for the alter operation. */ if ((alter_info->flags & Alter_info::ADD_FOREIGN_KEY) && - check_fk_parent_table_access(thd, create_info, alter_info)) + check_fk_parent_table_access(thd, alter_ctx.new_db, + create_info, alter_info)) DBUG_RETURN(true); /* From 180adbe271e00ec6f51791636f668d5af6132ff2 Mon Sep 17 00:00:00 2001 From: Ajo Robert Date: Fri, 27 Oct 2017 16:19:45 +0530 Subject: [PATCH 0143/1221] Post push fix for Bug#25062396. Change: Variable initialization. Change-Id: I2e4afddcfb9651c98a554695b1565fdb1504b69a --- sql/gcalc_slicescan.h | 3 ++- sql/gcalc_tools.cc | 1 + sql/gcalc_tools.h | 5 ++++- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/sql/gcalc_slicescan.h b/sql/gcalc_slicescan.h index e0841449fdb2..10362c4bedc8 100644 --- a/sql/gcalc_slicescan.h +++ b/sql/gcalc_slicescan.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. reserved. +/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. reserved. reserved. This program is free software; you can redistribute it and/or modify @@ -134,6 +134,7 @@ class Gcalc_heap : public Gcalc_dyn_list #ifndef DBUG_OFF inline void dbug_print() const; #endif + Info(): x(0), y(0) {} }; Gcalc_heap(size_t blk_size=8192) : diff --git a/sql/gcalc_tools.cc b/sql/gcalc_tools.cc index c4411ef4f4f2..ccbfb7138931 100644 --- a/sql/gcalc_tools.cc +++ b/sql/gcalc_tools.cc @@ -1183,6 +1183,7 @@ int Gcalc_operation_reducer::get_polygon_result(res_point *cur, if(glue->up) glue->up->down= NULL; free_result(glue); + cur->glue= NULL; } DBUG_RETURN(get_result_thread(cur, storage, 1) || storage->complete_shape()); diff --git a/sql/gcalc_tools.h b/sql/gcalc_tools.h index 10dd31181289..e4288c8720b8 100644 --- a/sql/gcalc_tools.h +++ b/sql/gcalc_tools.h @@ -200,7 +200,8 @@ class Gcalc_result_receiver #endif }; - Gcalc_result_receiver() : collection_result(FALSE), n_shapes(0), n_holes(0) + Gcalc_result_receiver() : n_points(0), collection_result(FALSE), n_shapes(0), + n_holes(0), prev_x(0), prev_y(0), shape_area(0) {} int start_shape(Gcalc_function::shape_type shape); int add_point(double x, double y); @@ -362,6 +363,8 @@ class Gcalc_operation_reducer : public Gcalc_dyn_list m_res_hook= &result->next; result->pi= pi; result->intersection_point= intersection_point; + result->x= 0; + result->y= 0; return result; } From cd0b9f7de6561613338774f6253031a3bcd9db7e Mon Sep 17 00:00:00 2001 From: Daniel Blanchard Date: Mon, 4 Sep 2017 10:30:14 +0100 Subject: [PATCH 0144/1221] BUG#26734457 BACKPORT BUG#22305994 TO 5.6 AND 5.7 Use GetSystemTimePreciseAsFileTime in my_micro_time on Windows when it is available to achieve higher timer resolution. Change-Id: I200c54b83fedb22c2e4c45bc151aed44fec0ff6c --- mysql-test/suite/innodb/r/timestamp.result | 30 +++++++++++++++ mysql-test/suite/innodb/t/timestamp.test | 26 +++++++++++++ mysys/my_getsystime.c | 44 +++++++++++++++++++--- mysys/my_init.c | 5 ++- storage/innobase/handler/ha_innodb.cc | 8 ++++ storage/innobase/include/ut0ut.h | 11 +++++- storage/innobase/ut/ut0ut.cc | 30 ++++++++++++++- 7 files changed, 144 insertions(+), 10 deletions(-) create mode 100644 mysql-test/suite/innodb/r/timestamp.result create mode 100644 mysql-test/suite/innodb/t/timestamp.test diff --git a/mysql-test/suite/innodb/r/timestamp.result b/mysql-test/suite/innodb/r/timestamp.result new file mode 100644 index 000000000000..db5bd58c9e7b --- /dev/null +++ b/mysql-test/suite/innodb/r/timestamp.result @@ -0,0 +1,30 @@ +# +# Bug #47453: InnoDB incorrectly changes TIMESTAMP columns when +# JOINed during an UPDATE +# +CREATE TABLE t1 (d INT) ENGINE=InnoDB; +CREATE TABLE t2 (a INT, b INT, +c TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) +ON UPDATE CURRENT_TIMESTAMP(6)) ENGINE=InnoDB; +# set up our data elements +INSERT INTO t1 (d) VALUES (1); +INSERT INTO t2 (a,b) VALUES (1,1); +SELECT c INTO @bug47453 FROM t2; +SELECT c!=@bug47453 FROM t1 JOIN t2 ON d=a; +c!=@bug47453 +0 +UPDATE t1 JOIN t2 ON d=a SET b=1 WHERE a=1; +SELECT c!=@bug47453 FROM t1 JOIN t2 ON d=a; +c!=@bug47453 +0 +UPDATE t1 JOIN t2 ON d=a SET b=1; +# should be 0 +SELECT c!=@bug47453 FROM t1 JOIN t2 ON d=a; +c!=@bug47453 +0 +UPDATE t1 JOIN t2 ON d=a SET b=2; +# should not be 0 +SELECT c!=@bug47453 FROM t1 JOIN t2 ON d=a; +c!=@bug47453 +1 +DROP TABLE t1, t2; diff --git a/mysql-test/suite/innodb/t/timestamp.test b/mysql-test/suite/innodb/t/timestamp.test new file mode 100644 index 000000000000..6ec5cfdd1bfc --- /dev/null +++ b/mysql-test/suite/innodb/t/timestamp.test @@ -0,0 +1,26 @@ +--echo # +--echo # Bug #47453: InnoDB incorrectly changes TIMESTAMP columns when +--echo # JOINed during an UPDATE +--echo # + +CREATE TABLE t1 (d INT) ENGINE=InnoDB; +CREATE TABLE t2 (a INT, b INT, + c TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) + ON UPDATE CURRENT_TIMESTAMP(6)) ENGINE=InnoDB; + +--echo # set up our data elements +INSERT INTO t1 (d) VALUES (1); +INSERT INTO t2 (a,b) VALUES (1,1); +SELECT c INTO @bug47453 FROM t2; + +SELECT c!=@bug47453 FROM t1 JOIN t2 ON d=a; +UPDATE t1 JOIN t2 ON d=a SET b=1 WHERE a=1; +SELECT c!=@bug47453 FROM t1 JOIN t2 ON d=a; +UPDATE t1 JOIN t2 ON d=a SET b=1; +--echo # should be 0 +SELECT c!=@bug47453 FROM t1 JOIN t2 ON d=a; +UPDATE t1 JOIN t2 ON d=a SET b=2; +--echo # should not be 0 +SELECT c!=@bug47453 FROM t1 JOIN t2 ON d=a; + +DROP TABLE t1, t2; diff --git a/mysys/my_getsystime.c b/mysys/my_getsystime.c index 5e9ff149113e..16307fe2d065 100644 --- a/mysys/my_getsystime.c +++ b/mysys/my_getsystime.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2004, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2004, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -25,6 +25,40 @@ #include "mysys_priv.h" #include "my_static.h" +#if defined(_WIN32) +#include "my_sys.h" /* for my_printf_error */ +typedef VOID(WINAPI *time_fn)(LPFILETIME); +static time_fn my_get_system_time_as_file_time= GetSystemTimeAsFileTime; + +/** +Initialise highest available time resolution API on Windows +@return Initialization result +@retval FALSE Success +@retval TRUE Error. Couldn't initialize environment +*/ +my_bool win_init_get_system_time_as_file_time() +{ + HMODULE h= LoadLibrary("kernel32.dll"); + if (h != NULL) + { + time_fn pfn= (time_fn) GetProcAddress(h, "GetSystemTimePreciseAsFileTime"); + if (pfn) + my_get_system_time_as_file_time= pfn; + + return FALSE; + } + + DWORD error= GetLastError(); + my_printf_error(0, + "LoadLibrary(\"kernel32.dll\") failed: GetLastError returns %lu", + MYF(0), + error); + + return TRUE; +} +#endif + + /** Get high-resolution time. @@ -89,18 +123,16 @@ time_t my_time(myf flags) Return time in microseconds. @remark This function is to be used to measure performance in - micro seconds. As it's not defined whats the start time - for the clock, this function us only useful to measure - time between two moments. + micro seconds. - @retval Value in microseconds from some undefined point in time. + @retval Number of microseconds since the Epoch, 1970-01-01 00:00:00 +0000 (UTC) */ ulonglong my_micro_time() { #ifdef _WIN32 ulonglong newtime; - GetSystemTimeAsFileTime((FILETIME*)&newtime); + my_get_system_time_as_file_time((FILETIME*)&newtime); newtime-= OFFSET_TO_EPOCH; return (newtime/10); #else diff --git a/mysys/my_init.c b/mysys/my_init.c index 78ba7cf30de3..c9c3a6ca6c72 100644 --- a/mysys/my_init.c +++ b/mysys/my_init.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -30,6 +30,7 @@ my_bool have_tcpip=0; static void my_win_init(void); static my_bool win32_init_tcp_ip(); +my_bool win_init_get_system_time_as_file_time(); #else #define my_win_init() #endif @@ -109,6 +110,8 @@ my_bool my_init(void) DBUG_PRINT("exit", ("home: '%s'", home_dir)); #ifdef __WIN__ win32_init_tcp_ip(); + if (win_init_get_system_time_as_file_time()) + DBUG_RETURN(1); #endif DBUG_RETURN(0); } diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index 142f1b94a1e1..2b41c3db3448 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -3473,6 +3473,14 @@ innobase_init( /* Turn on monitor counters that are default on */ srv_mon_default_on(); +#ifndef UNIV_HOTBACKUP +#ifdef _WIN32 + if (ut_win_init_time()) { + goto mem_free_and_error; + } +#endif /* _WIN32 */ +#endif /* !UNIV_HOTBACKUP */ + DBUG_RETURN(FALSE); error: DBUG_RETURN(TRUE); diff --git a/storage/innobase/include/ut0ut.h b/storage/innobase/include/ut0ut.h index ef887ed5e584..7c28081dd70e 100644 --- a/storage/innobase/include/ut0ut.h +++ b/storage/innobase/include/ut0ut.h @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1994, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1994, 2017, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -266,6 +266,15 @@ UNIV_INTERN ulint ut_time_ms(void); /*============*/ +#ifdef _WIN32 +/**********************************************************//** +Initialise highest available time resolution API on Windows +@return 0 if all OK else -1 */ +int +ut_win_init_time(); + +#endif /* _WIN32 */ + #endif /* !UNIV_HOTBACKUP */ /**********************************************************//** diff --git a/storage/innobase/ut/ut0ut.cc b/storage/innobase/ut/ut0ut.cc index 68446cc85ef7..82979b5bcc8f 100644 --- a/storage/innobase/ut/ut0ut.cc +++ b/storage/innobase/ut/ut0ut.cc @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1994, 2014, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1994, 2017, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -48,6 +48,10 @@ Created 5/11/1994 Heikki Tuuri UNIV_INTERN ibool ut_always_false = FALSE; #ifdef __WIN__ +#include /* For sql_print_error */ +typedef VOID(WINAPI *time_fn)(LPFILETIME); +static time_fn ut_get_system_time_as_file_time = GetSystemTimeAsFileTime; + /*****************************************************************//** NOTE: The Windows epoch starts from 1601/01/01 whereas the Unix epoch starts from 1970/1/1. For selection of constant see: @@ -55,6 +59,28 @@ epoch starts from 1970/1/1. For selection of constant see: #define WIN_TO_UNIX_DELTA_USEC ((ib_int64_t) 11644473600000000ULL) +/** +Initialise highest available time resolution API on Windows +@return 0 if all OK else -1 */ +int +ut_win_init_time() +{ + HMODULE h = LoadLibrary("kernel32.dll"); + if (h != NULL) + { + time_fn pfn = (time_fn)GetProcAddress(h, "GetSystemTimePreciseAsFileTime"); + if (pfn != NULL) + { + ut_get_system_time_as_file_time = pfn; + } + return false; + } + DWORD error = GetLastError(); + sql_print_error( + "LoadLibrary(\"kernel32.dll\") failed: GetLastError returns %lu", error); + return(-1); +} + /*****************************************************************//** This is the Windows version of gettimeofday(2). @return 0 if all OK else -1 */ @@ -73,7 +99,7 @@ ut_gettimeofday( return(-1); } - GetSystemTimeAsFileTime(&ft); + ut_get_system_time_as_file_time(&ft); tm = (ib_int64_t) ft.dwHighDateTime << 32; tm |= ft.dwLowDateTime; From e7c1264122fc2189ca8203f187d6b8f5df78f0bf Mon Sep 17 00:00:00 2001 From: Daniel Blanchard Date: Fri, 27 Oct 2017 14:44:15 +0100 Subject: [PATCH 0145/1221] BUG#26734457 BACKPORT BUG#22305994 TO 5.6 AND 5.7 Fixing post push pb2 failure --- mysys/my_getsystime.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/mysys/my_getsystime.c b/mysys/my_getsystime.c index 16307fe2d065..5c52f41d5a4c 100644 --- a/mysys/my_getsystime.c +++ b/mysys/my_getsystime.c @@ -38,7 +38,9 @@ Initialise highest available time resolution API on Windows */ my_bool win_init_get_system_time_as_file_time() { - HMODULE h= LoadLibrary("kernel32.dll"); + DWORD error; + HMODULE h; + h= LoadLibrary("kernel32.dll"); if (h != NULL) { time_fn pfn= (time_fn) GetProcAddress(h, "GetSystemTimePreciseAsFileTime"); @@ -48,7 +50,7 @@ my_bool win_init_get_system_time_as_file_time() return FALSE; } - DWORD error= GetLastError(); + error= GetLastError(); my_printf_error(0, "LoadLibrary(\"kernel32.dll\") failed: GetLastError returns %lu", MYF(0), From 54ef827b9bf6da10abc8693e2a43f2df3fea3a2b Mon Sep 17 00:00:00 2001 From: Libing Song Date: Wed, 23 Aug 2017 22:39:00 +0800 Subject: [PATCH 0146/1221] BUG#26474110 RPL_KILLED_DDL USES A DEBUG POINT NOT EXIST There where two problems: 1. debug_lock_before_query_log_event was lost. 2. ALTER EVENT was not binlogged when it was killed just after event table was updated. Analysis On 2th Problem ======================= After event table is updated successfully, it calls load_named_event(). If load_named_event() returns true, the ALTER EVENT will not be logged. Since event able is myisam table, the update cannot be updated. So it cause the problem: the statement updated something but it is not binlogged. KILL QUERY causes load_named_event() return true. That caused the inconsistency between master and slave. Fixes ===== 1. Added the debug_lock_before_query_log_event 2. binlog the ALTER EVENT, even load_named_event() return true. --- .../suite/rpl/r/rpl_kill_alter_event.result | 16 +++++++ .../suite/rpl/t/rpl_kill_alter_event.test | 44 +++++++++++++++++++ sql/events.cc | 20 +++++---- sql/log_event.cc | 3 ++ 4 files changed, 75 insertions(+), 8 deletions(-) create mode 100644 mysql-test/suite/rpl/r/rpl_kill_alter_event.result create mode 100644 mysql-test/suite/rpl/t/rpl_kill_alter_event.test diff --git a/mysql-test/suite/rpl/r/rpl_kill_alter_event.result b/mysql-test/suite/rpl/r/rpl_kill_alter_event.result new file mode 100644 index 000000000000..892d2861b3a5 --- /dev/null +++ b/mysql-test/suite/rpl/r/rpl_kill_alter_event.result @@ -0,0 +1,16 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +CREATE EVENT e1 +ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 DAY +DO SELECT 1; +[START] ALTER EVENT e1 ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 2 DAY; +[connection default] +KILL QUERY CONNECTION_ID; +[connection master] +ERROR 70100: Query execution was interrupted +include/rpl_diff.inc +DROP EVENT e1; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_kill_alter_event.test b/mysql-test/suite/rpl/t/rpl_kill_alter_event.test new file mode 100644 index 000000000000..2b4968b0c990 --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_kill_alter_event.test @@ -0,0 +1,44 @@ +################################################################################ +# BUG#26474110 RPL_KILLED_DDL USES A DEBUG POINT NOT EXIST +# +# This test uses a debug_sync point to guarantee that the ALTER EVENT +# is killed just after it updates mysql.event table. And this test verifies the +# statement is binlogged correctly when it is killed. +################################################################################ +--source include/have_binlog_format_row.inc +--source include/master-slave.inc + +--let $connection_id= `SELECT CONNECTION_ID()` + +CREATE EVENT e1 + ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 DAY + DO SELECT 1; + +# Block ALTER EVENT just after it updated event table +--let $statement_connection= master +--let $auxiliary_connection= default +--let $statement= ALTER EVENT e1 ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 2 DAY +--let $sync_point= after_alter_event_updated_event_table +--source include/execute_to_sync_point.inc + +# Kill ALTER EVENT +--let $rpl_connection_name= default +--source include/rpl_connection.inc +--replace_result $connection_id CONNECTION_ID +eval KILL QUERY $connection_id; + +# ALTER EVENT returns with ER_QUERY_INTERRUPTED +--source include/rpl_connection_master.inc +--error ER_QUERY_INTERRUPTED +reap; + +# Verify master and slave have same events +let $rpl_diff_statement= SELECT event_name, event_body, execute_at + FROM information_schema.events where event_name like \'e%\' + ORDER BY event_name; +--source include/rpl_diff.inc + +--connection master +DROP EVENT e1; + +--source include/rpl_end.inc diff --git a/sql/events.cc b/sql/events.cc index 97407c4e2833..ec1b61d002f4 100644 --- a/sql/events.cc +++ b/sql/events.cc @@ -32,6 +32,7 @@ #include "lock.h" // lock_object_name #include "log.h" #include "mysql/psi/mysql_sp.h" +#include "debug_sync.h" /** @addtogroup Event_Scheduler @@ -513,6 +514,8 @@ Events::update_event(THD *thd, Event_parse_data *parse_data, LEX_STRING dbname= new_dbname ? *new_dbname : parse_data->dbname; LEX_STRING name= new_name ? *new_name : parse_data->name; + DEBUG_SYNC(thd, "after_alter_event_updated_event_table"); + if (opt_event_scheduler != Events::EVENTS_DISABLED) { if (!(new_element= new Event_queue_element())) @@ -531,16 +534,17 @@ Events::update_event(THD *thd, Event_parse_data *parse_data, if (event_queue) event_queue->update_event(thd, parse_data->dbname, parse_data->name, new_element); - /* Binlog the alter event. */ - DBUG_ASSERT(thd->query().str && thd->query().length); - - thd->add_to_binlog_accessed_dbs(parse_data->dbname.str); - if (new_dbname) - thd->add_to_binlog_accessed_dbs(new_dbname->str); - - ret= write_bin_log(thd, true, thd->query().str, thd->query().length); } } + + /* Binlog the alter event. */ + DBUG_ASSERT(thd->query().str && thd->query().length); + + thd->add_to_binlog_accessed_dbs(parse_data->dbname.str); + if (new_dbname) + thd->add_to_binlog_accessed_dbs(new_dbname->str); + + ret|= write_bin_log(thd, true, thd->query().str, thd->query().length); } /* Restore the state of binlog format */ DBUG_ASSERT(!thd->is_current_stmt_binlog_format_row()); diff --git a/sql/log_event.cc b/sql/log_event.cc index ee4bbffdb03f..3179dd3a8fe3 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -3903,6 +3903,9 @@ Query_log_event::Query_log_event(THD* thd_arg, const char* query_arg, header(), footer()), data_buf(0) { + DBUG_EXECUTE_IF("debug_lock_before_query_log_event", + DBUG_SYNC_POINT("debug_lock.before_query_log_event", 10);); + /* save the original thread id; we already know the server id */ slave_proxy_id= thd_arg->variables.pseudo_thread_id; if (query != 0) From ddd9d614a32a116b98bed5f7885de77e1694a92b Mon Sep 17 00:00:00 2001 From: Sreeharsha Ramanavarapu Date: Sun, 29 Oct 2017 07:52:40 +0530 Subject: [PATCH 0147/1221] Bug #26727773: OPTIMIZER CHOSES COMPOSITE INDEX FOR REF OVER RANGE Issue: ------ While choosing between ref-access and range-access on the same index, we prefer range if certain pre-determined criteria are fulfilled (See can_switch_from_ref_to_range()). One such criteria is to choose avoid ref-access if it has an overly-optimistic / unrealistically low cost. This can happen when, as in this case, records_per_key is very low. For this query, ref-access acquires its estimated number of rows value records_per_key (which is 1) and is considered to be the cheapest. But in reality the estimate of range-access which uses more keyparts is accurate (due to index dives). So, choosing range-access would be ideal. But the optimizer choose ref-access. Solution: --------- This problem was mostly handled in Bug #23259872. For 5.7: -------- Range-access estimates the number of rows to be 1 (correctly) and ref-access arrives at the same number from records_per_key (incorrectly). Range access is more accurate and the overhead of using range is also limited. Hence, choosing range is better than ref, because ref's estimate is from the less reliable records_per_key. It is better to use the "<=" rather than "<", to set the "is_dodgy" flag which is one of the criteria in can_switch_from_ref_to_range(). For 8.0 and trunk: ------------------ Irrespective of the number of rows estimated for ref-access, if range-access uses more keyparts, don't consider this index for ref-access. --- mysql-test/include/range.inc | 81 ++++++++++ mysql-test/r/range_all.result | 61 +++++++ mysql-test/r/range_icp.result | 61 +++++++ mysql-test/r/range_icp_mrr.result | 61 +++++++ mysql-test/r/range_mrr.result | 61 +++++++ mysql-test/r/range_mrr_cost.result | 61 +++++++ mysql-test/r/range_none.result | 61 +++++++ mysql-test/r/range_with_memory_limit.result | 68 ++++++++ mysql-test/suite/opt_trace/include/range.inc | 2 +- .../suite/opt_trace/r/range_no_prot.result | 151 +++++++++++++++++- .../suite/opt_trace/r/range_ps_prot.result | 151 +++++++++++++++++- sql/sql_planner.cc | 4 +- 12 files changed, 812 insertions(+), 11 deletions(-) diff --git a/mysql-test/include/range.inc b/mysql-test/include/range.inc index f1729f31e195..1ff33c0aa2b6 100644 --- a/mysql-test/include/range.inc +++ b/mysql-test/include/range.inc @@ -2463,3 +2463,84 @@ WHERE id IN (66136539, 68983258, 89628210, 77869520, 82543198, 67538272, DROP PROCEDURE p; DROP TABLE giant_table, t1; + + +--echo # +--echo # Bug #26727773: OPTIMIZER CHOSES COMPOSITE INDEX FOR REF OVER RANGE +--echo # + +CREATE TABLE transactions ( + app_trans_id INT DEFAULT NULL, + id INT NOT NULL, + tbl INT NOT NULL DEFAULT 1, + created TIMESTAMP NOT NULL DEFAULT '2017-01-01 01:01:01', + trans_type INT NOT NULL, + description BLOB, + source_lvl1 INT DEFAULT NULL, + source_lvl2 INT DEFAULT NULL, + KEY tbl_id_idx (tbl,id), + KEY created_idx (created), + KEY trans_type_created_idx (trans_type,created), + KEY app_trans_id_idx (app_trans_id) +) ENGINE=INNODB ; + +CREATE TABLE t1 (c1 INT); +INSERT INTO t1 VALUES (1), (1000), (2000), (3000), (4000), (5000), (6000), + (7000), (8000), (9000); + +DELIMITER $; +CREATE PROCEDURE p() +BEGIN + +SET @x = 1; +REPEAT + +INSERT IGNORE INTO transactions(id,trans_type, description) + SELECT c1 + @x, @x , 'abcd' + FROM t1; + +SET @x = @x + 1; + +UNTIL @x > 300 END REPEAT; +END $ +DELIMITER ;$ + +CALL p(); +SELECT count(*) FROM transactions; + +#The qualifying row. +INSERT IGNORE INTO transactions(id,trans_type, description, created) + SELECT 3, 3 , 'abcd', '2018-01-01 01:01:01' + FROM dual; + +let query1= +SELECT '2017-10-23 01:01:01', HOUR(created), source_lvl1, source_lvl2, + COUNT(DISTINCT(app_trans_id)) +FROM transactions +WHERE created > '2017-10-23 01:01:01' AND tbl = 1 AND trans_type in (3) +GROUP BY '2017-10-23 01:01:01', HOUR(created), source_lvl1, source_lvl2; + + +#UPDATE stats to produce a ref-access plan on 'trans_type_created_idx' +--disable_query_log +ALTER TABLE transactions STATS_PERSISTENT=1, STATS_AUTO_RECALC=0; + +UPDATE mysql.innodb_index_stats +SET stat_value=3001 +WHERE index_name ='trans_type_created_idx' AND TABLE_name='transactions'; + +UPDATE mysql.innodb_table_stats SET n_rows=3001 WHERE TABLE_name='transactions'; + +FLUSH TABLE transactions; +--enable_query_log + +eval EXPLAIN $query1; + +SET optimizer_trace="enabled=on"; +eval $query1; +SELECT TRACE INTO @trace FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; +SELECT @trace RLIKE "uses_more_keyparts"; +SET optimizer_trace="enabled=off"; + +DROP PROCEDURE p; +DROP TABLE t1, transactions; diff --git a/mysql-test/r/range_all.result b/mysql-test/r/range_all.result index 491a0cd24c95..c68ee9b54066 100644 --- a/mysql-test/r/range_all.result +++ b/mysql-test/r/range_all.result @@ -3626,4 +3626,65 @@ Warnings: Note 1003 /* select#1 */ select `test`.`giant_table`.`id` AS `id`,`test`.`giant_table`.`something` AS `something`,`test`.`giant_table`.`comment` AS `comment`,`test`.`giant_table`.`time_created` AS `time_created`,`test`.`giant_table`.`one_id` AS `one_id`,`test`.`giant_table`.`other_id` AS `other_id`,`test`.`giant_table`.`some_other_id` AS `some_other_id`,`test`.`giant_table`.`flags` AS `flags` from `test`.`giant_table` where ((`test`.`giant_table`.`some_other_id` = 0) and (`test`.`giant_table`.`id` in (66136539,68983258,89628210,77869520,82543198,67538272,84673401,61069031,68214385,77282865,76991297,64569216,89481638,74534074,70396537,80076375,63308530,77908270,70923271,68066180)) and ((`test`.`giant_table`.`flags` & 0x01) = 0)) DROP PROCEDURE p; DROP TABLE giant_table, t1; +# +# Bug #26727773: OPTIMIZER CHOSES COMPOSITE INDEX FOR REF OVER RANGE +# +CREATE TABLE transactions ( +app_trans_id INT DEFAULT NULL, +id INT NOT NULL, +tbl INT NOT NULL DEFAULT 1, +created TIMESTAMP NOT NULL DEFAULT '2017-01-01 01:01:01', +trans_type INT NOT NULL, +description BLOB, +source_lvl1 INT DEFAULT NULL, +source_lvl2 INT DEFAULT NULL, +KEY tbl_id_idx (tbl,id), +KEY created_idx (created), +KEY trans_type_created_idx (trans_type,created), +KEY app_trans_id_idx (app_trans_id) +) ENGINE=INNODB ; +CREATE TABLE t1 (c1 INT); +INSERT INTO t1 VALUES (1), (1000), (2000), (3000), (4000), (5000), (6000), +(7000), (8000), (9000); +CREATE PROCEDURE p() +BEGIN +SET @x = 1; +REPEAT +INSERT IGNORE INTO transactions(id,trans_type, description) +SELECT c1 + @x, @x , 'abcd' + FROM t1; +SET @x = @x + 1; +UNTIL @x > 300 END REPEAT; +END $ +CALL p(); +SELECT count(*) FROM transactions; +count(*) +3000 +INSERT IGNORE INTO transactions(id,trans_type, description, created) +SELECT 3, 3 , 'abcd', '2018-01-01 01:01:01' + FROM dual; +EXPLAIN SELECT '2017-10-23 01:01:01', HOUR(created), source_lvl1, source_lvl2, +COUNT(DISTINCT(app_trans_id)) +FROM transactions +WHERE created > '2017-10-23 01:01:01' AND tbl = 1 AND trans_type in (3) +GROUP BY '2017-10-23 01:01:01', HOUR(created), source_lvl1, source_lvl2; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE transactions NULL range tbl_id_idx,created_idx,trans_type_created_idx trans_type_created_idx 8 NULL 1 100.00 Using index condition; Using where; Using MRR; Using filesort +Warnings: +Note 1003 /* select#1 */ select '2017-10-23 01:01:01' AS `2017-10-23 01:01:01`,hour(`test`.`transactions`.`created`) AS `HOUR(created)`,`test`.`transactions`.`source_lvl1` AS `source_lvl1`,`test`.`transactions`.`source_lvl2` AS `source_lvl2`,count(distinct `test`.`transactions`.`app_trans_id`) AS `COUNT(DISTINCT(app_trans_id))` from `test`.`transactions` where ((`test`.`transactions`.`trans_type` = 3) and (`test`.`transactions`.`tbl` = 1) and (`test`.`transactions`.`created` > '2017-10-23 01:01:01')) group by '2017-10-23 01:01:01',hour(`test`.`transactions`.`created`),`test`.`transactions`.`source_lvl1`,`test`.`transactions`.`source_lvl2` +SET optimizer_trace="enabled=on"; +SELECT '2017-10-23 01:01:01', HOUR(created), source_lvl1, source_lvl2, +COUNT(DISTINCT(app_trans_id)) +FROM transactions +WHERE created > '2017-10-23 01:01:01' AND tbl = 1 AND trans_type in (3) +GROUP BY '2017-10-23 01:01:01', HOUR(created), source_lvl1, source_lvl2; +2017-10-23 01:01:01 HOUR(created) source_lvl1 source_lvl2 COUNT(DISTINCT(app_trans_id)) +2017-10-23 01:01:01 1 NULL NULL 0 +SELECT TRACE INTO @trace FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; +SELECT @trace RLIKE "uses_more_keyparts"; +@trace RLIKE "uses_more_keyparts" +1 +SET optimizer_trace="enabled=off"; +DROP PROCEDURE p; +DROP TABLE t1, transactions; set optimizer_switch=default; diff --git a/mysql-test/r/range_icp.result b/mysql-test/r/range_icp.result index c6e7083e2b9b..58d55e7dc221 100644 --- a/mysql-test/r/range_icp.result +++ b/mysql-test/r/range_icp.result @@ -3626,4 +3626,65 @@ Warnings: Note 1003 /* select#1 */ select `test`.`giant_table`.`id` AS `id`,`test`.`giant_table`.`something` AS `something`,`test`.`giant_table`.`comment` AS `comment`,`test`.`giant_table`.`time_created` AS `time_created`,`test`.`giant_table`.`one_id` AS `one_id`,`test`.`giant_table`.`other_id` AS `other_id`,`test`.`giant_table`.`some_other_id` AS `some_other_id`,`test`.`giant_table`.`flags` AS `flags` from `test`.`giant_table` where ((`test`.`giant_table`.`some_other_id` = 0) and (`test`.`giant_table`.`id` in (66136539,68983258,89628210,77869520,82543198,67538272,84673401,61069031,68214385,77282865,76991297,64569216,89481638,74534074,70396537,80076375,63308530,77908270,70923271,68066180)) and ((`test`.`giant_table`.`flags` & 0x01) = 0)) DROP PROCEDURE p; DROP TABLE giant_table, t1; +# +# Bug #26727773: OPTIMIZER CHOSES COMPOSITE INDEX FOR REF OVER RANGE +# +CREATE TABLE transactions ( +app_trans_id INT DEFAULT NULL, +id INT NOT NULL, +tbl INT NOT NULL DEFAULT 1, +created TIMESTAMP NOT NULL DEFAULT '2017-01-01 01:01:01', +trans_type INT NOT NULL, +description BLOB, +source_lvl1 INT DEFAULT NULL, +source_lvl2 INT DEFAULT NULL, +KEY tbl_id_idx (tbl,id), +KEY created_idx (created), +KEY trans_type_created_idx (trans_type,created), +KEY app_trans_id_idx (app_trans_id) +) ENGINE=INNODB ; +CREATE TABLE t1 (c1 INT); +INSERT INTO t1 VALUES (1), (1000), (2000), (3000), (4000), (5000), (6000), +(7000), (8000), (9000); +CREATE PROCEDURE p() +BEGIN +SET @x = 1; +REPEAT +INSERT IGNORE INTO transactions(id,trans_type, description) +SELECT c1 + @x, @x , 'abcd' + FROM t1; +SET @x = @x + 1; +UNTIL @x > 300 END REPEAT; +END $ +CALL p(); +SELECT count(*) FROM transactions; +count(*) +3000 +INSERT IGNORE INTO transactions(id,trans_type, description, created) +SELECT 3, 3 , 'abcd', '2018-01-01 01:01:01' + FROM dual; +EXPLAIN SELECT '2017-10-23 01:01:01', HOUR(created), source_lvl1, source_lvl2, +COUNT(DISTINCT(app_trans_id)) +FROM transactions +WHERE created > '2017-10-23 01:01:01' AND tbl = 1 AND trans_type in (3) +GROUP BY '2017-10-23 01:01:01', HOUR(created), source_lvl1, source_lvl2; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE transactions NULL range tbl_id_idx,created_idx,trans_type_created_idx trans_type_created_idx 8 NULL 1 100.00 Using index condition; Using where; Using filesort +Warnings: +Note 1003 /* select#1 */ select '2017-10-23 01:01:01' AS `2017-10-23 01:01:01`,hour(`test`.`transactions`.`created`) AS `HOUR(created)`,`test`.`transactions`.`source_lvl1` AS `source_lvl1`,`test`.`transactions`.`source_lvl2` AS `source_lvl2`,count(distinct `test`.`transactions`.`app_trans_id`) AS `COUNT(DISTINCT(app_trans_id))` from `test`.`transactions` where ((`test`.`transactions`.`trans_type` = 3) and (`test`.`transactions`.`tbl` = 1) and (`test`.`transactions`.`created` > '2017-10-23 01:01:01')) group by '2017-10-23 01:01:01',hour(`test`.`transactions`.`created`),`test`.`transactions`.`source_lvl1`,`test`.`transactions`.`source_lvl2` +SET optimizer_trace="enabled=on"; +SELECT '2017-10-23 01:01:01', HOUR(created), source_lvl1, source_lvl2, +COUNT(DISTINCT(app_trans_id)) +FROM transactions +WHERE created > '2017-10-23 01:01:01' AND tbl = 1 AND trans_type in (3) +GROUP BY '2017-10-23 01:01:01', HOUR(created), source_lvl1, source_lvl2; +2017-10-23 01:01:01 HOUR(created) source_lvl1 source_lvl2 COUNT(DISTINCT(app_trans_id)) +2017-10-23 01:01:01 1 NULL NULL 0 +SELECT TRACE INTO @trace FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; +SELECT @trace RLIKE "uses_more_keyparts"; +@trace RLIKE "uses_more_keyparts" +1 +SET optimizer_trace="enabled=off"; +DROP PROCEDURE p; +DROP TABLE t1, transactions; set optimizer_switch=default; diff --git a/mysql-test/r/range_icp_mrr.result b/mysql-test/r/range_icp_mrr.result index d193ff83a179..6ce7f6c981d4 100644 --- a/mysql-test/r/range_icp_mrr.result +++ b/mysql-test/r/range_icp_mrr.result @@ -3626,4 +3626,65 @@ Warnings: Note 1003 /* select#1 */ select `test`.`giant_table`.`id` AS `id`,`test`.`giant_table`.`something` AS `something`,`test`.`giant_table`.`comment` AS `comment`,`test`.`giant_table`.`time_created` AS `time_created`,`test`.`giant_table`.`one_id` AS `one_id`,`test`.`giant_table`.`other_id` AS `other_id`,`test`.`giant_table`.`some_other_id` AS `some_other_id`,`test`.`giant_table`.`flags` AS `flags` from `test`.`giant_table` where ((`test`.`giant_table`.`some_other_id` = 0) and (`test`.`giant_table`.`id` in (66136539,68983258,89628210,77869520,82543198,67538272,84673401,61069031,68214385,77282865,76991297,64569216,89481638,74534074,70396537,80076375,63308530,77908270,70923271,68066180)) and ((`test`.`giant_table`.`flags` & 0x01) = 0)) DROP PROCEDURE p; DROP TABLE giant_table, t1; +# +# Bug #26727773: OPTIMIZER CHOSES COMPOSITE INDEX FOR REF OVER RANGE +# +CREATE TABLE transactions ( +app_trans_id INT DEFAULT NULL, +id INT NOT NULL, +tbl INT NOT NULL DEFAULT 1, +created TIMESTAMP NOT NULL DEFAULT '2017-01-01 01:01:01', +trans_type INT NOT NULL, +description BLOB, +source_lvl1 INT DEFAULT NULL, +source_lvl2 INT DEFAULT NULL, +KEY tbl_id_idx (tbl,id), +KEY created_idx (created), +KEY trans_type_created_idx (trans_type,created), +KEY app_trans_id_idx (app_trans_id) +) ENGINE=INNODB ; +CREATE TABLE t1 (c1 INT); +INSERT INTO t1 VALUES (1), (1000), (2000), (3000), (4000), (5000), (6000), +(7000), (8000), (9000); +CREATE PROCEDURE p() +BEGIN +SET @x = 1; +REPEAT +INSERT IGNORE INTO transactions(id,trans_type, description) +SELECT c1 + @x, @x , 'abcd' + FROM t1; +SET @x = @x + 1; +UNTIL @x > 300 END REPEAT; +END $ +CALL p(); +SELECT count(*) FROM transactions; +count(*) +3000 +INSERT IGNORE INTO transactions(id,trans_type, description, created) +SELECT 3, 3 , 'abcd', '2018-01-01 01:01:01' + FROM dual; +EXPLAIN SELECT '2017-10-23 01:01:01', HOUR(created), source_lvl1, source_lvl2, +COUNT(DISTINCT(app_trans_id)) +FROM transactions +WHERE created > '2017-10-23 01:01:01' AND tbl = 1 AND trans_type in (3) +GROUP BY '2017-10-23 01:01:01', HOUR(created), source_lvl1, source_lvl2; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE transactions NULL range tbl_id_idx,created_idx,trans_type_created_idx trans_type_created_idx 8 NULL 1 100.00 Using index condition; Using where; Using MRR; Using filesort +Warnings: +Note 1003 /* select#1 */ select '2017-10-23 01:01:01' AS `2017-10-23 01:01:01`,hour(`test`.`transactions`.`created`) AS `HOUR(created)`,`test`.`transactions`.`source_lvl1` AS `source_lvl1`,`test`.`transactions`.`source_lvl2` AS `source_lvl2`,count(distinct `test`.`transactions`.`app_trans_id`) AS `COUNT(DISTINCT(app_trans_id))` from `test`.`transactions` where ((`test`.`transactions`.`trans_type` = 3) and (`test`.`transactions`.`tbl` = 1) and (`test`.`transactions`.`created` > '2017-10-23 01:01:01')) group by '2017-10-23 01:01:01',hour(`test`.`transactions`.`created`),`test`.`transactions`.`source_lvl1`,`test`.`transactions`.`source_lvl2` +SET optimizer_trace="enabled=on"; +SELECT '2017-10-23 01:01:01', HOUR(created), source_lvl1, source_lvl2, +COUNT(DISTINCT(app_trans_id)) +FROM transactions +WHERE created > '2017-10-23 01:01:01' AND tbl = 1 AND trans_type in (3) +GROUP BY '2017-10-23 01:01:01', HOUR(created), source_lvl1, source_lvl2; +2017-10-23 01:01:01 HOUR(created) source_lvl1 source_lvl2 COUNT(DISTINCT(app_trans_id)) +2017-10-23 01:01:01 1 NULL NULL 0 +SELECT TRACE INTO @trace FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; +SELECT @trace RLIKE "uses_more_keyparts"; +@trace RLIKE "uses_more_keyparts" +1 +SET optimizer_trace="enabled=off"; +DROP PROCEDURE p; +DROP TABLE t1, transactions; set optimizer_switch=default; diff --git a/mysql-test/r/range_mrr.result b/mysql-test/r/range_mrr.result index 920c9713b460..daecc0d27858 100644 --- a/mysql-test/r/range_mrr.result +++ b/mysql-test/r/range_mrr.result @@ -3626,4 +3626,65 @@ Warnings: Note 1003 /* select#1 */ select `test`.`giant_table`.`id` AS `id`,`test`.`giant_table`.`something` AS `something`,`test`.`giant_table`.`comment` AS `comment`,`test`.`giant_table`.`time_created` AS `time_created`,`test`.`giant_table`.`one_id` AS `one_id`,`test`.`giant_table`.`other_id` AS `other_id`,`test`.`giant_table`.`some_other_id` AS `some_other_id`,`test`.`giant_table`.`flags` AS `flags` from `test`.`giant_table` where ((`test`.`giant_table`.`some_other_id` = 0) and (`test`.`giant_table`.`id` in (66136539,68983258,89628210,77869520,82543198,67538272,84673401,61069031,68214385,77282865,76991297,64569216,89481638,74534074,70396537,80076375,63308530,77908270,70923271,68066180)) and ((`test`.`giant_table`.`flags` & 0x01) = 0)) DROP PROCEDURE p; DROP TABLE giant_table, t1; +# +# Bug #26727773: OPTIMIZER CHOSES COMPOSITE INDEX FOR REF OVER RANGE +# +CREATE TABLE transactions ( +app_trans_id INT DEFAULT NULL, +id INT NOT NULL, +tbl INT NOT NULL DEFAULT 1, +created TIMESTAMP NOT NULL DEFAULT '2017-01-01 01:01:01', +trans_type INT NOT NULL, +description BLOB, +source_lvl1 INT DEFAULT NULL, +source_lvl2 INT DEFAULT NULL, +KEY tbl_id_idx (tbl,id), +KEY created_idx (created), +KEY trans_type_created_idx (trans_type,created), +KEY app_trans_id_idx (app_trans_id) +) ENGINE=INNODB ; +CREATE TABLE t1 (c1 INT); +INSERT INTO t1 VALUES (1), (1000), (2000), (3000), (4000), (5000), (6000), +(7000), (8000), (9000); +CREATE PROCEDURE p() +BEGIN +SET @x = 1; +REPEAT +INSERT IGNORE INTO transactions(id,trans_type, description) +SELECT c1 + @x, @x , 'abcd' + FROM t1; +SET @x = @x + 1; +UNTIL @x > 300 END REPEAT; +END $ +CALL p(); +SELECT count(*) FROM transactions; +count(*) +3000 +INSERT IGNORE INTO transactions(id,trans_type, description, created) +SELECT 3, 3 , 'abcd', '2018-01-01 01:01:01' + FROM dual; +EXPLAIN SELECT '2017-10-23 01:01:01', HOUR(created), source_lvl1, source_lvl2, +COUNT(DISTINCT(app_trans_id)) +FROM transactions +WHERE created > '2017-10-23 01:01:01' AND tbl = 1 AND trans_type in (3) +GROUP BY '2017-10-23 01:01:01', HOUR(created), source_lvl1, source_lvl2; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE transactions NULL range tbl_id_idx,created_idx,trans_type_created_idx trans_type_created_idx 8 NULL 1 100.00 Using where; Using MRR; Using filesort +Warnings: +Note 1003 /* select#1 */ select '2017-10-23 01:01:01' AS `2017-10-23 01:01:01`,hour(`test`.`transactions`.`created`) AS `HOUR(created)`,`test`.`transactions`.`source_lvl1` AS `source_lvl1`,`test`.`transactions`.`source_lvl2` AS `source_lvl2`,count(distinct `test`.`transactions`.`app_trans_id`) AS `COUNT(DISTINCT(app_trans_id))` from `test`.`transactions` where ((`test`.`transactions`.`trans_type` = 3) and (`test`.`transactions`.`tbl` = 1) and (`test`.`transactions`.`created` > '2017-10-23 01:01:01')) group by '2017-10-23 01:01:01',hour(`test`.`transactions`.`created`),`test`.`transactions`.`source_lvl1`,`test`.`transactions`.`source_lvl2` +SET optimizer_trace="enabled=on"; +SELECT '2017-10-23 01:01:01', HOUR(created), source_lvl1, source_lvl2, +COUNT(DISTINCT(app_trans_id)) +FROM transactions +WHERE created > '2017-10-23 01:01:01' AND tbl = 1 AND trans_type in (3) +GROUP BY '2017-10-23 01:01:01', HOUR(created), source_lvl1, source_lvl2; +2017-10-23 01:01:01 HOUR(created) source_lvl1 source_lvl2 COUNT(DISTINCT(app_trans_id)) +2017-10-23 01:01:01 1 NULL NULL 0 +SELECT TRACE INTO @trace FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; +SELECT @trace RLIKE "uses_more_keyparts"; +@trace RLIKE "uses_more_keyparts" +1 +SET optimizer_trace="enabled=off"; +DROP PROCEDURE p; +DROP TABLE t1, transactions; set optimizer_switch=default; diff --git a/mysql-test/r/range_mrr_cost.result b/mysql-test/r/range_mrr_cost.result index aecbd1e822b2..de3d0e46d7c0 100644 --- a/mysql-test/r/range_mrr_cost.result +++ b/mysql-test/r/range_mrr_cost.result @@ -3626,4 +3626,65 @@ Warnings: Note 1003 /* select#1 */ select `test`.`giant_table`.`id` AS `id`,`test`.`giant_table`.`something` AS `something`,`test`.`giant_table`.`comment` AS `comment`,`test`.`giant_table`.`time_created` AS `time_created`,`test`.`giant_table`.`one_id` AS `one_id`,`test`.`giant_table`.`other_id` AS `other_id`,`test`.`giant_table`.`some_other_id` AS `some_other_id`,`test`.`giant_table`.`flags` AS `flags` from `test`.`giant_table` where ((`test`.`giant_table`.`some_other_id` = 0) and (`test`.`giant_table`.`id` in (66136539,68983258,89628210,77869520,82543198,67538272,84673401,61069031,68214385,77282865,76991297,64569216,89481638,74534074,70396537,80076375,63308530,77908270,70923271,68066180)) and ((`test`.`giant_table`.`flags` & 0x01) = 0)) DROP PROCEDURE p; DROP TABLE giant_table, t1; +# +# Bug #26727773: OPTIMIZER CHOSES COMPOSITE INDEX FOR REF OVER RANGE +# +CREATE TABLE transactions ( +app_trans_id INT DEFAULT NULL, +id INT NOT NULL, +tbl INT NOT NULL DEFAULT 1, +created TIMESTAMP NOT NULL DEFAULT '2017-01-01 01:01:01', +trans_type INT NOT NULL, +description BLOB, +source_lvl1 INT DEFAULT NULL, +source_lvl2 INT DEFAULT NULL, +KEY tbl_id_idx (tbl,id), +KEY created_idx (created), +KEY trans_type_created_idx (trans_type,created), +KEY app_trans_id_idx (app_trans_id) +) ENGINE=INNODB ; +CREATE TABLE t1 (c1 INT); +INSERT INTO t1 VALUES (1), (1000), (2000), (3000), (4000), (5000), (6000), +(7000), (8000), (9000); +CREATE PROCEDURE p() +BEGIN +SET @x = 1; +REPEAT +INSERT IGNORE INTO transactions(id,trans_type, description) +SELECT c1 + @x, @x , 'abcd' + FROM t1; +SET @x = @x + 1; +UNTIL @x > 300 END REPEAT; +END $ +CALL p(); +SELECT count(*) FROM transactions; +count(*) +3000 +INSERT IGNORE INTO transactions(id,trans_type, description, created) +SELECT 3, 3 , 'abcd', '2018-01-01 01:01:01' + FROM dual; +EXPLAIN SELECT '2017-10-23 01:01:01', HOUR(created), source_lvl1, source_lvl2, +COUNT(DISTINCT(app_trans_id)) +FROM transactions +WHERE created > '2017-10-23 01:01:01' AND tbl = 1 AND trans_type in (3) +GROUP BY '2017-10-23 01:01:01', HOUR(created), source_lvl1, source_lvl2; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE transactions NULL range tbl_id_idx,created_idx,trans_type_created_idx trans_type_created_idx 8 NULL 1 100.00 Using where; Using filesort +Warnings: +Note 1003 /* select#1 */ select '2017-10-23 01:01:01' AS `2017-10-23 01:01:01`,hour(`test`.`transactions`.`created`) AS `HOUR(created)`,`test`.`transactions`.`source_lvl1` AS `source_lvl1`,`test`.`transactions`.`source_lvl2` AS `source_lvl2`,count(distinct `test`.`transactions`.`app_trans_id`) AS `COUNT(DISTINCT(app_trans_id))` from `test`.`transactions` where ((`test`.`transactions`.`trans_type` = 3) and (`test`.`transactions`.`tbl` = 1) and (`test`.`transactions`.`created` > '2017-10-23 01:01:01')) group by '2017-10-23 01:01:01',hour(`test`.`transactions`.`created`),`test`.`transactions`.`source_lvl1`,`test`.`transactions`.`source_lvl2` +SET optimizer_trace="enabled=on"; +SELECT '2017-10-23 01:01:01', HOUR(created), source_lvl1, source_lvl2, +COUNT(DISTINCT(app_trans_id)) +FROM transactions +WHERE created > '2017-10-23 01:01:01' AND tbl = 1 AND trans_type in (3) +GROUP BY '2017-10-23 01:01:01', HOUR(created), source_lvl1, source_lvl2; +2017-10-23 01:01:01 HOUR(created) source_lvl1 source_lvl2 COUNT(DISTINCT(app_trans_id)) +2017-10-23 01:01:01 1 NULL NULL 0 +SELECT TRACE INTO @trace FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; +SELECT @trace RLIKE "uses_more_keyparts"; +@trace RLIKE "uses_more_keyparts" +1 +SET optimizer_trace="enabled=off"; +DROP PROCEDURE p; +DROP TABLE t1, transactions; set optimizer_switch=default; diff --git a/mysql-test/r/range_none.result b/mysql-test/r/range_none.result index d0e86573dd4f..047effcc3b6c 100644 --- a/mysql-test/r/range_none.result +++ b/mysql-test/r/range_none.result @@ -3625,4 +3625,65 @@ Warnings: Note 1003 /* select#1 */ select `test`.`giant_table`.`id` AS `id`,`test`.`giant_table`.`something` AS `something`,`test`.`giant_table`.`comment` AS `comment`,`test`.`giant_table`.`time_created` AS `time_created`,`test`.`giant_table`.`one_id` AS `one_id`,`test`.`giant_table`.`other_id` AS `other_id`,`test`.`giant_table`.`some_other_id` AS `some_other_id`,`test`.`giant_table`.`flags` AS `flags` from `test`.`giant_table` where ((`test`.`giant_table`.`some_other_id` = 0) and (`test`.`giant_table`.`id` in (66136539,68983258,89628210,77869520,82543198,67538272,84673401,61069031,68214385,77282865,76991297,64569216,89481638,74534074,70396537,80076375,63308530,77908270,70923271,68066180)) and ((`test`.`giant_table`.`flags` & 0x01) = 0)) DROP PROCEDURE p; DROP TABLE giant_table, t1; +# +# Bug #26727773: OPTIMIZER CHOSES COMPOSITE INDEX FOR REF OVER RANGE +# +CREATE TABLE transactions ( +app_trans_id INT DEFAULT NULL, +id INT NOT NULL, +tbl INT NOT NULL DEFAULT 1, +created TIMESTAMP NOT NULL DEFAULT '2017-01-01 01:01:01', +trans_type INT NOT NULL, +description BLOB, +source_lvl1 INT DEFAULT NULL, +source_lvl2 INT DEFAULT NULL, +KEY tbl_id_idx (tbl,id), +KEY created_idx (created), +KEY trans_type_created_idx (trans_type,created), +KEY app_trans_id_idx (app_trans_id) +) ENGINE=INNODB ; +CREATE TABLE t1 (c1 INT); +INSERT INTO t1 VALUES (1), (1000), (2000), (3000), (4000), (5000), (6000), +(7000), (8000), (9000); +CREATE PROCEDURE p() +BEGIN +SET @x = 1; +REPEAT +INSERT IGNORE INTO transactions(id,trans_type, description) +SELECT c1 + @x, @x , 'abcd' + FROM t1; +SET @x = @x + 1; +UNTIL @x > 300 END REPEAT; +END $ +CALL p(); +SELECT count(*) FROM transactions; +count(*) +3000 +INSERT IGNORE INTO transactions(id,trans_type, description, created) +SELECT 3, 3 , 'abcd', '2018-01-01 01:01:01' + FROM dual; +EXPLAIN SELECT '2017-10-23 01:01:01', HOUR(created), source_lvl1, source_lvl2, +COUNT(DISTINCT(app_trans_id)) +FROM transactions +WHERE created > '2017-10-23 01:01:01' AND tbl = 1 AND trans_type in (3) +GROUP BY '2017-10-23 01:01:01', HOUR(created), source_lvl1, source_lvl2; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE transactions NULL range tbl_id_idx,created_idx,trans_type_created_idx trans_type_created_idx 8 NULL 1 100.00 Using where; Using filesort +Warnings: +Note 1003 /* select#1 */ select '2017-10-23 01:01:01' AS `2017-10-23 01:01:01`,hour(`test`.`transactions`.`created`) AS `HOUR(created)`,`test`.`transactions`.`source_lvl1` AS `source_lvl1`,`test`.`transactions`.`source_lvl2` AS `source_lvl2`,count(distinct `test`.`transactions`.`app_trans_id`) AS `COUNT(DISTINCT(app_trans_id))` from `test`.`transactions` where ((`test`.`transactions`.`trans_type` = 3) and (`test`.`transactions`.`tbl` = 1) and (`test`.`transactions`.`created` > '2017-10-23 01:01:01')) group by '2017-10-23 01:01:01',hour(`test`.`transactions`.`created`),`test`.`transactions`.`source_lvl1`,`test`.`transactions`.`source_lvl2` +SET optimizer_trace="enabled=on"; +SELECT '2017-10-23 01:01:01', HOUR(created), source_lvl1, source_lvl2, +COUNT(DISTINCT(app_trans_id)) +FROM transactions +WHERE created > '2017-10-23 01:01:01' AND tbl = 1 AND trans_type in (3) +GROUP BY '2017-10-23 01:01:01', HOUR(created), source_lvl1, source_lvl2; +2017-10-23 01:01:01 HOUR(created) source_lvl1 source_lvl2 COUNT(DISTINCT(app_trans_id)) +2017-10-23 01:01:01 1 NULL NULL 0 +SELECT TRACE INTO @trace FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; +SELECT @trace RLIKE "uses_more_keyparts"; +@trace RLIKE "uses_more_keyparts" +1 +SET optimizer_trace="enabled=off"; +DROP PROCEDURE p; +DROP TABLE t1, transactions; set optimizer_switch=default; diff --git a/mysql-test/r/range_with_memory_limit.result b/mysql-test/r/range_with_memory_limit.result index fe2dedcc260d..455cd2dc91a4 100644 --- a/mysql-test/r/range_with_memory_limit.result +++ b/mysql-test/r/range_with_memory_limit.result @@ -4138,5 +4138,73 @@ Warning 3170 Memory capacity of 50 bytes for 'range_optimizer_max_mem_size' exce Note 1003 /* select#1 */ select `test`.`giant_table`.`id` AS `id`,`test`.`giant_table`.`something` AS `something`,`test`.`giant_table`.`comment` AS `comment`,`test`.`giant_table`.`time_created` AS `time_created`,`test`.`giant_table`.`one_id` AS `one_id`,`test`.`giant_table`.`other_id` AS `other_id`,`test`.`giant_table`.`some_other_id` AS `some_other_id`,`test`.`giant_table`.`flags` AS `flags` from `test`.`giant_table` where ((`test`.`giant_table`.`some_other_id` = 0) and (`test`.`giant_table`.`id` in (66136539,68983258,89628210,77869520,82543198,67538272,84673401,61069031,68214385,77282865,76991297,64569216,89481638,74534074,70396537,80076375,63308530,77908270,70923271,68066180)) and ((`test`.`giant_table`.`flags` & 0x01) = 0)) DROP PROCEDURE p; DROP TABLE giant_table, t1; +# +# Bug #26727773: OPTIMIZER CHOSES COMPOSITE INDEX FOR REF OVER RANGE +# +CREATE TABLE transactions ( +app_trans_id INT DEFAULT NULL, +id INT NOT NULL, +tbl INT NOT NULL DEFAULT 1, +created TIMESTAMP NOT NULL DEFAULT '2017-01-01 01:01:01', +trans_type INT NOT NULL, +description BLOB, +source_lvl1 INT DEFAULT NULL, +source_lvl2 INT DEFAULT NULL, +KEY tbl_id_idx (tbl,id), +KEY created_idx (created), +KEY trans_type_created_idx (trans_type,created), +KEY app_trans_id_idx (app_trans_id) +) ENGINE=INNODB ; +CREATE TABLE t1 (c1 INT); +INSERT INTO t1 VALUES (1), (1000), (2000), (3000), (4000), (5000), (6000), +(7000), (8000), (9000); +CREATE PROCEDURE p() +BEGIN +SET @x = 1; +REPEAT +INSERT IGNORE INTO transactions(id,trans_type, description) +SELECT c1 + @x, @x , 'abcd' + FROM t1; +SET @x = @x + 1; +UNTIL @x > 300 END REPEAT; +END $ +CALL p(); +SELECT count(*) FROM transactions; +count(*) +3000 +INSERT IGNORE INTO transactions(id,trans_type, description, created) +SELECT 3, 3 , 'abcd', '2018-01-01 01:01:01' + FROM dual; +Warnings: +Warning 3170 Memory capacity of 50 bytes for 'range_optimizer_max_mem_size' exceeded. Range optimization was not done for this query. +Warnings: +Warning 3170 Memory capacity of 50 bytes for 'range_optimizer_max_mem_size' exceeded. Range optimization was not done for this query. +EXPLAIN SELECT '2017-10-23 01:01:01', HOUR(created), source_lvl1, source_lvl2, +COUNT(DISTINCT(app_trans_id)) +FROM transactions +WHERE created > '2017-10-23 01:01:01' AND tbl = 1 AND trans_type in (3) +GROUP BY '2017-10-23 01:01:01', HOUR(created), source_lvl1, source_lvl2; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE transactions NULL ref tbl_id_idx,created_idx,trans_type_created_idx trans_type_created_idx 4 const 1 33.33 Using index condition; Using where; Using filesort +Warnings: +Warning 3170 Memory capacity of 50 bytes for 'range_optimizer_max_mem_size' exceeded. Range optimization was not done for this query. +Note 1003 /* select#1 */ select '2017-10-23 01:01:01' AS `2017-10-23 01:01:01`,hour(`test`.`transactions`.`created`) AS `HOUR(created)`,`test`.`transactions`.`source_lvl1` AS `source_lvl1`,`test`.`transactions`.`source_lvl2` AS `source_lvl2`,count(distinct `test`.`transactions`.`app_trans_id`) AS `COUNT(DISTINCT(app_trans_id))` from `test`.`transactions` where ((`test`.`transactions`.`trans_type` = 3) and (`test`.`transactions`.`tbl` = 1) and (`test`.`transactions`.`created` > '2017-10-23 01:01:01')) group by '2017-10-23 01:01:01',hour(`test`.`transactions`.`created`),`test`.`transactions`.`source_lvl1`,`test`.`transactions`.`source_lvl2` +SET optimizer_trace="enabled=on"; +SELECT '2017-10-23 01:01:01', HOUR(created), source_lvl1, source_lvl2, +COUNT(DISTINCT(app_trans_id)) +FROM transactions +WHERE created > '2017-10-23 01:01:01' AND tbl = 1 AND trans_type in (3) +GROUP BY '2017-10-23 01:01:01', HOUR(created), source_lvl1, source_lvl2; +2017-10-23 01:01:01 HOUR(created) source_lvl1 source_lvl2 COUNT(DISTINCT(app_trans_id)) +2017-10-23 01:01:01 1 NULL NULL 0 +Warnings: +Warning 3170 Memory capacity of 50 bytes for 'range_optimizer_max_mem_size' exceeded. Range optimization was not done for this query. +SELECT TRACE INTO @trace FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; +SELECT @trace RLIKE "uses_more_keyparts"; +@trace RLIKE "uses_more_keyparts" +0 +SET optimizer_trace="enabled=off"; +DROP PROCEDURE p; +DROP TABLE t1, transactions; SET RANGE_OPTIMIZER_MAX_MEM_SIZE= DEFAULT; # End of test for Bug#17769777 and Bug#17413040 diff --git a/mysql-test/suite/opt_trace/include/range.inc b/mysql-test/suite/opt_trace/include/range.inc index 7500343fae4e..0a80473a6a8a 100644 --- a/mysql-test/suite/opt_trace/include/range.inc +++ b/mysql-test/suite/opt_trace/include/range.inc @@ -275,7 +275,7 @@ CREATE INDEX i1_i2_idx ON t1 (i2,i1); ANALYZE TABLE t1; --echo ---echo # Covering ROR intersect not chosen: cost +--echo # Covering ROR intersect not chosen: Index with more keyparts found. EXPLAIN SELECT v FROM t1 WHERE i1 = 1 AND i2 = 1 AND v = 'a' AND pk < 3; --echo SELECT * FROM information_schema.OPTIMIZER_TRACE; diff --git a/mysql-test/suite/opt_trace/r/range_no_prot.result b/mysql-test/suite/opt_trace/r/range_no_prot.result index 895559767b65..972e20257fb7 100644 --- a/mysql-test/suite/opt_trace/r/range_no_prot.result +++ b/mysql-test/suite/opt_trace/r/range_no_prot.result @@ -5413,6 +5413,69 @@ EXPLAIN SELECT v FROM t1 WHERE i1 = 1 AND v = 'a' AND pk < 3 { } ] /* considered_execution_plans */ }, + { + "rerunning_range_optimizer_for_single_index": [ + { + "table_scan": { + "rows": 5, + "cost": 4.1 + } /* table_scan */, + "potential_range_indexes": [ + { + "index": "PRIMARY", + "usable": false, + "cause": "not_applicable" + }, + { + "index": "i1_idx", + "usable": true, + "key_parts": [ + "i1", + "pk" + ] /* key_parts */ + }, + { + "index": "v_idx", + "usable": false, + "cause": "not_applicable" + } + ] /* potential_range_indexes */, + "best_covering_index_scan": { + "index": "v_idx", + "cost": 2.0063, + "chosen": true + } /* best_covering_index_scan */, + "setup_range_conditions": [ + ] /* setup_range_conditions */, + "group_index_range": { + "chosen": false, + "cause": "not_group_by_or_distinct" + } /* group_index_range */, + "analyzing_range_alternatives": { + "range_scan_alternatives": [ + { + "index": "i1_idx", + "ranges": [ + "1 <= i1 <= 1 AND pk < 3" + ] /* ranges */, + "index_dives_for_eq_ranges": true, + "rowid_ordered": true, + "using_mrr": false, + "index_only": false, + "rows": 1, + "cost": 2.21, + "chosen": false, + "cause": "cost" + } + ] /* range_scan_alternatives */, + "analyzing_roworder_intersect": { + "usable": false, + "cause": "too_few_roworder_scans" + } /* analyzing_roworder_intersect */ + } /* analyzing_range_alternatives */ + } /* range_analysis */ + ] /* rerunning_range_optimizer_for_single_index */ + }, { "attaching_conditions_to_tables": { "original_condition": "((`t1`.`v` = 'a') and (`t1`.`i1` = 1) and (`t1`.`pk` < 3))", @@ -5453,10 +5516,10 @@ ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK -# Covering ROR intersect not chosen: cost +# Covering ROR intersect not chosen: Index with more keyparts found. EXPLAIN SELECT v FROM t1 WHERE i1 = 1 AND i2 = 1 AND v = 'a' AND pk < 3; id select_type table partitions type possible_keys key key_len ref rows filtered Extra -1 SIMPLE t1 NULL ref PRIMARY,v_idx,i1_i2_idx v_idx 9 const,const 1 20.00 Using index condition; Using where +1 SIMPLE t1 NULL range PRIMARY,v_idx,i1_i2_idx v_idx 13 NULL 1 20.00 Using index condition; Using where Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`v` AS `v` from `test`.`t1` where ((`test`.`t1`.`v` = 'a') and (`test`.`t1`.`i2` = 1) and (`test`.`t1`.`i1` = 1) and (`test`.`t1`.`pk` < 3)) @@ -5732,6 +5795,86 @@ EXPLAIN SELECT v FROM t1 WHERE i1 = 1 AND i2 = 1 AND v = 'a' AND pk < 3 { } ] /* considered_execution_plans */ }, + { + "rerunning_range_optimizer_for_single_index": [ + { + "table_scan": { + "rows": 5, + "cost": 4.1 + } /* table_scan */, + "potential_range_indexes": [ + { + "index": "PRIMARY", + "usable": false, + "cause": "not_applicable" + }, + { + "index": "v_idx", + "usable": true, + "key_parts": [ + "v", + "i1", + "pk" + ] /* key_parts */ + }, + { + "index": "i1_i2_idx", + "usable": false, + "cause": "not_applicable" + } + ] /* potential_range_indexes */, + "setup_range_conditions": [ + ] /* setup_range_conditions */, + "group_index_range": { + "chosen": false, + "cause": "not_group_by_or_distinct" + } /* group_index_range */, + "analyzing_range_alternatives": { + "range_scan_alternatives": [ + { + "index": "v_idx", + "ranges": [ + "a <= v <= a AND 1 <= i1 <= 1 AND pk < 3" + ] /* ranges */, + "index_dives_for_eq_ranges": true, + "rowid_ordered": true, + "using_mrr": false, + "index_only": false, + "rows": 1, + "cost": 2.21, + "chosen": true + } + ] /* range_scan_alternatives */, + "analyzing_roworder_intersect": { + "usable": false, + "cause": "too_few_roworder_scans" + } /* analyzing_roworder_intersect */ + } /* analyzing_range_alternatives */, + "chosen_range_access_summary": { + "range_access_plan": { + "type": "range_scan", + "index": "v_idx", + "rows": 1, + "ranges": [ + "a <= v <= a AND 1 <= i1 <= 1 AND pk < 3" + ] /* ranges */ + } /* range_access_plan */, + "rows_for_plan": 1, + "cost_for_plan": 2.21, + "chosen": true + } /* chosen_range_access_summary */ + } /* range_analysis */ + ] /* rerunning_range_optimizer_for_single_index */ + }, + { + "access_type_changed": { + "table": "`t1`", + "index": "v_idx", + "old_type": "ref", + "new_type": "range", + "cause": "uses_more_keyparts" + } /* access_type_changed */ + }, { "attaching_conditions_to_tables": { "original_condition": "((`t1`.`v` = 'a') and (`t1`.`i2` = 1) and (`t1`.`i1` = 1) and (`t1`.`pk` < 3))", @@ -5740,7 +5883,7 @@ EXPLAIN SELECT v FROM t1 WHERE i1 = 1 AND i2 = 1 AND v = 'a' AND pk < 3 { "attached_conditions_summary": [ { "table": "`t1`", - "attached": "((`t1`.`i2` = 1) and (`t1`.`pk` < 3))" + "attached": "((`t1`.`v` = 'a') and (`t1`.`i2` = 1) and (`t1`.`i1` = 1) and (`t1`.`pk` < 3))" } ] /* attached_conditions_summary */ } /* attaching_conditions_to_tables */ @@ -5749,7 +5892,7 @@ EXPLAIN SELECT v FROM t1 WHERE i1 = 1 AND i2 = 1 AND v = 'a' AND pk < 3 { "refine_plan": [ { "table": "`t1`", - "pushed_index_condition": "(`t1`.`pk` < 3)", + "pushed_index_condition": "((`t1`.`v` = 'a') and (`t1`.`i1` = 1) and (`t1`.`pk` < 3))", "table_condition_attached": "(`t1`.`i2` = 1)" } ] /* refine_plan */ diff --git a/mysql-test/suite/opt_trace/r/range_ps_prot.result b/mysql-test/suite/opt_trace/r/range_ps_prot.result index e2e9981405d2..e32a0f7ffb30 100644 --- a/mysql-test/suite/opt_trace/r/range_ps_prot.result +++ b/mysql-test/suite/opt_trace/r/range_ps_prot.result @@ -5413,6 +5413,69 @@ EXPLAIN SELECT v FROM t1 WHERE i1 = 1 AND v = 'a' AND pk < 3 { } ] /* considered_execution_plans */ }, + { + "rerunning_range_optimizer_for_single_index": [ + { + "table_scan": { + "rows": 5, + "cost": 4.1 + } /* table_scan */, + "potential_range_indexes": [ + { + "index": "PRIMARY", + "usable": false, + "cause": "not_applicable" + }, + { + "index": "i1_idx", + "usable": true, + "key_parts": [ + "i1", + "pk" + ] /* key_parts */ + }, + { + "index": "v_idx", + "usable": false, + "cause": "not_applicable" + } + ] /* potential_range_indexes */, + "best_covering_index_scan": { + "index": "v_idx", + "cost": 2.0063, + "chosen": true + } /* best_covering_index_scan */, + "setup_range_conditions": [ + ] /* setup_range_conditions */, + "group_index_range": { + "chosen": false, + "cause": "not_group_by_or_distinct" + } /* group_index_range */, + "analyzing_range_alternatives": { + "range_scan_alternatives": [ + { + "index": "i1_idx", + "ranges": [ + "1 <= i1 <= 1 AND pk < 3" + ] /* ranges */, + "index_dives_for_eq_ranges": true, + "rowid_ordered": true, + "using_mrr": false, + "index_only": false, + "rows": 1, + "cost": 2.21, + "chosen": false, + "cause": "cost" + } + ] /* range_scan_alternatives */, + "analyzing_roworder_intersect": { + "usable": false, + "cause": "too_few_roworder_scans" + } /* analyzing_roworder_intersect */ + } /* analyzing_range_alternatives */ + } /* range_analysis */ + ] /* rerunning_range_optimizer_for_single_index */ + }, { "attaching_conditions_to_tables": { "original_condition": "((`t1`.`v` = 'a') and (`t1`.`i1` = 1) and (`t1`.`pk` < 3))", @@ -5453,10 +5516,10 @@ ANALYZE TABLE t1; Table Op Msg_type Msg_text test.t1 analyze status OK -# Covering ROR intersect not chosen: cost +# Covering ROR intersect not chosen: Index with more keyparts found. EXPLAIN SELECT v FROM t1 WHERE i1 = 1 AND i2 = 1 AND v = 'a' AND pk < 3; id select_type table partitions type possible_keys key key_len ref rows filtered Extra -1 SIMPLE t1 NULL ref PRIMARY,v_idx,i1_i2_idx v_idx 9 const,const 1 20.00 Using index condition; Using where +1 SIMPLE t1 NULL range PRIMARY,v_idx,i1_i2_idx v_idx 13 NULL 1 20.00 Using index condition; Using where Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`v` AS `v` from `test`.`t1` where ((`test`.`t1`.`v` = 'a') and (`test`.`t1`.`i2` = 1) and (`test`.`t1`.`i1` = 1) and (`test`.`t1`.`pk` < 3)) @@ -5732,6 +5795,86 @@ EXPLAIN SELECT v FROM t1 WHERE i1 = 1 AND i2 = 1 AND v = 'a' AND pk < 3 { } ] /* considered_execution_plans */ }, + { + "rerunning_range_optimizer_for_single_index": [ + { + "table_scan": { + "rows": 5, + "cost": 4.1 + } /* table_scan */, + "potential_range_indexes": [ + { + "index": "PRIMARY", + "usable": false, + "cause": "not_applicable" + }, + { + "index": "v_idx", + "usable": true, + "key_parts": [ + "v", + "i1", + "pk" + ] /* key_parts */ + }, + { + "index": "i1_i2_idx", + "usable": false, + "cause": "not_applicable" + } + ] /* potential_range_indexes */, + "setup_range_conditions": [ + ] /* setup_range_conditions */, + "group_index_range": { + "chosen": false, + "cause": "not_group_by_or_distinct" + } /* group_index_range */, + "analyzing_range_alternatives": { + "range_scan_alternatives": [ + { + "index": "v_idx", + "ranges": [ + "a <= v <= a AND 1 <= i1 <= 1 AND pk < 3" + ] /* ranges */, + "index_dives_for_eq_ranges": true, + "rowid_ordered": true, + "using_mrr": false, + "index_only": false, + "rows": 1, + "cost": 2.21, + "chosen": true + } + ] /* range_scan_alternatives */, + "analyzing_roworder_intersect": { + "usable": false, + "cause": "too_few_roworder_scans" + } /* analyzing_roworder_intersect */ + } /* analyzing_range_alternatives */, + "chosen_range_access_summary": { + "range_access_plan": { + "type": "range_scan", + "index": "v_idx", + "rows": 1, + "ranges": [ + "a <= v <= a AND 1 <= i1 <= 1 AND pk < 3" + ] /* ranges */ + } /* range_access_plan */, + "rows_for_plan": 1, + "cost_for_plan": 2.21, + "chosen": true + } /* chosen_range_access_summary */ + } /* range_analysis */ + ] /* rerunning_range_optimizer_for_single_index */ + }, + { + "access_type_changed": { + "table": "`t1`", + "index": "v_idx", + "old_type": "ref", + "new_type": "range", + "cause": "uses_more_keyparts" + } /* access_type_changed */ + }, { "attaching_conditions_to_tables": { "original_condition": "((`t1`.`v` = 'a') and (`t1`.`i2` = 1) and (`t1`.`i1` = 1) and (`t1`.`pk` < 3))", @@ -5740,7 +5883,7 @@ EXPLAIN SELECT v FROM t1 WHERE i1 = 1 AND i2 = 1 AND v = 'a' AND pk < 3 { "attached_conditions_summary": [ { "table": "`t1`", - "attached": "((`t1`.`i2` = 1) and (`t1`.`pk` < 3))" + "attached": "((`t1`.`v` = 'a') and (`t1`.`i2` = 1) and (`t1`.`i1` = 1) and (`t1`.`pk` < 3))" } ] /* attached_conditions_summary */ } /* attaching_conditions_to_tables */ @@ -5749,7 +5892,7 @@ EXPLAIN SELECT v FROM t1 WHERE i1 = 1 AND i2 = 1 AND v = 'a' AND pk < 3 { "refine_plan": [ { "table": "`t1`", - "pushed_index_condition": "(`t1`.`pk` < 3)", + "pushed_index_condition": "((`t1`.`v` = 'a') and (`t1`.`i1` = 1) and (`t1`.`pk` < 3))", "table_condition_attached": "(`t1`.`i2` = 1)" } ] /* refine_plan */ diff --git a/sql/sql_planner.cc b/sql/sql_planner.cc index bb1e906a27ea..3979d696d5d1 100644 --- a/sql/sql_planner.cc +++ b/sql/sql_planner.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -515,7 +515,7 @@ Key_use* Optimize_table_order::find_best_ref(JOIN_TAB *tab, */ if (!table_deps && table->quick_keys.is_set(key) && // (1) table->quick_key_parts[key] > cur_used_keyparts && // (2) - cur_fanout < (double)table->quick_rows[key]) // (3) + cur_fanout <= (double)table->quick_rows[key]) // (3) { cur_fanout= (double)table->quick_rows[key]; is_dodgy= true; From 9a2f4abbb85880b91b46f6157bf8692b73d86da2 Mon Sep 17 00:00:00 2001 From: Nuno Carvalho Date: Tue, 24 Oct 2017 19:16:49 +0200 Subject: [PATCH 0148/1221] BUG#27008102: CRASH DURING SHUTDOWN WHEN START GR EXECUTED IF MAX CONNECTIONS ALREADY OPENED BUG#27016552: MAX_CONNECTIONS ARE ACCOUNTED FOR GR INTERNAL CONNECTIONS Group Replication does use the SQL API to execute internal operations on the server during START and STOP, like enable and disable read only mode. While opening this internal connection, if the server already reached the max_connections value, Group Replication was failing as expected but a dangling thread was left behind, which later would cause issues. This patch addresses that issue, by handling completely the open connection failure scenario. This patch also improves the error messages on this error scenario, by including the internal server error and message, and on the particular case of max_connections also instructing the user what needs to be changed. --- .../src/sql_service/sql_service_interface.cc | 32 ++++++++- ..._reach_max_connections_during_start.result | 30 ++++++++ ...gr_reach_max_connections_during_start.test | 68 +++++++++++++++++++ sql/srv_session_service.cc | 9 ++- 4 files changed, 134 insertions(+), 5 deletions(-) create mode 100644 rapid/plugin/group_replication/tests/mtr/r/gr_reach_max_connections_during_start.result create mode 100644 rapid/plugin/group_replication/tests/mtr/t/gr_reach_max_connections_during_start.test diff --git a/rapid/plugin/group_replication/src/sql_service/sql_service_interface.cc b/rapid/plugin/group_replication/src/sql_service/sql_service_interface.cc index cb45ef180d6b..f4e79f5b6980 100644 --- a/rapid/plugin/group_replication/src/sql_service/sql_service_interface.cc +++ b/rapid/plugin/group_replication/src/sql_service/sql_service_interface.cc @@ -15,6 +15,7 @@ #include "sql_service_interface.h" #include "plugin_log.h" +#include /* keep it in sync with enum_server_command in my_command.h */ const LEX_STRING command_name[]={ @@ -74,6 +75,28 @@ Sql_service_interface::~Sql_service_interface() srv_session_deinit_thread(); } +static void srv_session_error_handler(void *ctx, unsigned int sql_errno, + const char *err_msg) +{ + switch (sql_errno) + { + case ER_CON_COUNT_ERROR: + log_message(MY_ERROR_LEVEL, + "Can't establish a internal server connection to " + "execute plugin operations since the server " + "does not have available connections, please " + "increase @@GLOBAL.MAX_CONNECTIONS. Server error: %i.", + sql_errno); + break; + default: + log_message(MY_ERROR_LEVEL, + "Can't establish a internal server connection to " + "execute plugin operations. Server error: %i. " + "Server error message: %s", + sql_errno, err_msg); + } +} + int Sql_service_interface::open_session() { DBUG_ENTER("Sql_service_interface::open_session"); @@ -82,7 +105,7 @@ int Sql_service_interface::open_session() /* open a server session after server is in operating state */ if (!wait_for_session_server(SESSION_WAIT_TIMEOUT)) { - m_session= srv_session_open(NULL, NULL); + m_session= srv_session_open(srv_session_error_handler, NULL); if (m_session == NULL) DBUG_RETURN(1); /* purecov: inspected */ } @@ -112,9 +135,12 @@ int Sql_service_interface::open_thread_session(void *plugin_ptr) /* purecov: end */ } - m_session= srv_session_open(NULL, NULL); + m_session= srv_session_open(srv_session_error_handler, NULL); if (m_session == NULL) - return 1; /* purecov: inspected */ + { + srv_session_deinit_thread(); + return 1; + } } else { diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_reach_max_connections_during_start.result b/rapid/plugin/group_replication/tests/mtr/r/gr_reach_max_connections_during_start.result new file mode 100644 index 000000000000..ffe548c5e4d3 --- /dev/null +++ b/rapid/plugin/group_replication/tests/mtr/r/gr_reach_max_connections_during_start.result @@ -0,0 +1,30 @@ +include/group_replication.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection server1] + +############################################################ +# 1. Simulate that server did reach max_connections before +# group replication is started, start will fail. +[connection server1] +SET SESSION sql_log_bin= 0; +call mtr.add_suppression("Can't establish a internal server connection to execute plugin operations.*"); +call mtr.add_suppression("Error calling group communication interfaces while trying to leave the group"); +SET SESSION sql_log_bin= 1; +SET GLOBAL group_replication_group_name= "GROUP_REPLICATION_GROUP_NAME"; +SET @debug_saved= @@GLOBAL.DEBUG; +SET @@GLOBAL.DEBUG= '+d,simulate_reach_max_connections'; +START GROUP_REPLICATION; +ERROR HY000: The server is not configured properly to be an active member of the group. Please see more details on error log. +include/assert_grep.inc [Found the expected error log message about exceeded max connections.] + +############################################################ +# 2. Shutdown server. +include/rpl_reconnect.inc + +############################################################ +# 3. Clean up. +[connection server1] +SET @@GLOBAL.DEBUG= @debug_save; +include/group_replication_end.inc diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_reach_max_connections_during_start.test b/rapid/plugin/group_replication/tests/mtr/t/gr_reach_max_connections_during_start.test new file mode 100644 index 000000000000..e39f99c1a431 --- /dev/null +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_reach_max_connections_during_start.test @@ -0,0 +1,68 @@ +################################################################################ +# Validate that Group Replication is do handle correctly SQL API connection open +# failure. +# +# Test: +# 0. The test requires one servers: M1. +# 1. Simulate that server did reach max_connections before +# group replication is started, start will fail. +# 2. Shutdown server. +# 3. Clean up. +################################################################################ +--source include/have_debug.inc +--source ../inc/have_group_replication_plugin.inc +--let $rpl_skip_group_replication_start= 1 +--source ../inc/group_replication.inc + +--echo +--echo ############################################################ +--echo # 1. Simulate that server did reach max_connections before +--echo # group replication is started, start will fail. +--let $rpl_connection_name= server1 +--source include/rpl_connection.inc + +SET SESSION sql_log_bin= 0; +call mtr.add_suppression("Can't establish a internal server connection to execute plugin operations.*"); +call mtr.add_suppression("Error calling group communication interfaces while trying to leave the group"); +SET SESSION sql_log_bin= 1; + +--replace_result $group_replication_group_name GROUP_REPLICATION_GROUP_NAME +--eval SET GLOBAL group_replication_group_name= "$group_replication_group_name" + +SET @debug_saved= @@GLOBAL.DEBUG; +SET @@GLOBAL.DEBUG= '+d,simulate_reach_max_connections'; + +--error ER_GROUP_REPLICATION_CONFIGURATION +START GROUP_REPLICATION; + +--let $assert_file= $MYSQLTEST_VARDIR/log/mysqld.1.err +--let $assert_only_after = CURRENT_TEST: group_replication.gr_reach_max_connections_during_start +--let $assert_count = 1 +--let $assert_select = Can't establish a internal server connection to execute plugin operations since the server does not have available connections, please increase @@GLOBAL.MAX_CONNECTIONS. +--let $assert_text = Found the expected error log message about exceeded max connections. +--source include/assert_grep.inc + + +--echo +--echo ############################################################ +--echo # 2. Shutdown server. +--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect +--exec $MYSQL -e "shutdown;" 2>&1 +--source include/wait_until_disconnected.inc + +--exec echo "restart:" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect +--enable_reconnect +--source include/wait_until_connected_again.inc + +--let $rpl_server_number= 1 +--source include/rpl_reconnect.inc + + +--echo +--echo ############################################################ +--echo # 3. Clean up. +--let $rpl_connection_name= server1 +--source include/rpl_connection.inc +SET @@GLOBAL.DEBUG= @debug_save; + +--source ../inc/group_replication_end.inc diff --git a/sql/srv_session_service.cc b/sql/srv_session_service.cc index 267cf4c91522..e39187e46304 100644 --- a/sql/srv_session_service.cc +++ b/sql/srv_session_service.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as @@ -80,10 +80,15 @@ Srv_session* srv_session_open(srv_session_error_cb error_cb, void *plugin_ctx) DBUG_RETURN(NULL); } + bool simulate_reach_max_connections= false; + DBUG_EXECUTE_IF("simulate_reach_max_connections", + simulate_reach_max_connections= true;); + Connection_handler_manager *conn_manager= Connection_handler_manager::get_instance(); - if (!conn_manager->check_and_incr_conn_count()) + if (simulate_reach_max_connections || + !conn_manager->check_and_incr_conn_count()) { if (error_cb) error_cb(plugin_ctx, ER_CON_COUNT_ERROR, ER_DEFAULT(ER_CON_COUNT_ERROR)); From 22aaceadcdfcaa1bb362a5119b9fad449d42f0e4 Mon Sep 17 00:00:00 2001 From: Nuno Carvalho Date: Wed, 13 Sep 2017 19:23:14 +0200 Subject: [PATCH 0149/1221] WL#11138: Deprecate group_replication_allow_local_disjoint_gtids_join option The option group_replication_allow_local_disjoint_gtids_join[1] was introduced with the purpose[2]: This variable is an override mechanism for a new consistency feature in the plugin. When you try to add to the group a server that has more data than the existing members, by default the joining member will be rejected. The purpose is to avoid possible recovery and run time errors in the plugin leading to data divergence and other issues. If you are sure of what you are doing, and that the extra data is safe, then you can use this option. The scenarios on which this can help users are: S1) Solve a broken majority asap * Group had 3 members in single-primary mode * 2 members crashed and end up with different data (GTID_EXECUTED) when compared with the group. * User wants to add one of the members (S2) to solve the majority loss or increase group members number to handle possible future member failures. * The member that is still on the group is the one that is the primary or will be elected as primary when majority is re-established, since is the only one ONLINE. * The group will be stable if a future failover does not switch to the S2 member. The runtime errors that may happen are that the member which did force the join with disjoint GTIDS, if it does a write, the changed rows will never be updated by other members. Certification will fail. The recovery errors that may happen are that if this member is chosen as donor, it will distribute the disjoint GTIDS among the new members and increase the likelihood of the runtime errors to happen. It must never be used unless the DBA knows exactly what she/he is doing or does need to solve a broken majority, on which crashed members suffered corruption and she/he will not perform writes on it. Which can already be done by resetting master and setting GTID_PURGED to match the GTID executed of the group if they really want to add the damaged server to the group. People use this option to force member join, and assume that since member did successfully join everything is OK. Which is not the case, data is inconsistent. The correct procedure to fix a majority loss is described at https://dev.mysql.com/doc/refman/5.7/en/group-replication-network-partitioning.html Since the trade-off between this option benefit vs danger is negative, we are deprecating this option. It will be removed on a future version. --- rapid/plugin/group_replication/src/plugin.cc | 39 +++++++++++++- ...joint_gtids_join_option_deprecation.result | 25 +++++++++ .../r/gr_executed_sets_compatibility.result | 6 +++ ..._recovery_conflicting_data_failover.result | 12 +++++ ...r_recovery_conflicting_data_failure.result | 6 +++ .../tests/mtr/r/gr_recovery_no_donors.result | 6 +++ ...r_show_global_and_session_variables.result | 6 +++ ...gr_transaction_compatibility_basics.result | 6 +++ .../mtr/r/gr_variables_default_values.result | 4 ++ .../mtr/r/gr_xplugin_global_variables.result | 4 ++ ...t_gtids_join_option_deprecation-master.opt | 3 ++ ...isjoint_gtids_join_option_deprecation.test | 53 +++++++++++++++++++ 12 files changed, 169 insertions(+), 1 deletion(-) create mode 100644 rapid/plugin/group_replication/tests/mtr/r/gr_disjoint_gtids_join_option_deprecation.result create mode 100644 rapid/plugin/group_replication/tests/mtr/t/gr_disjoint_gtids_join_option_deprecation-master.opt create mode 100644 rapid/plugin/group_replication/tests/mtr/t/gr_disjoint_gtids_join_option_deprecation.test diff --git a/rapid/plugin/group_replication/src/plugin.cc b/rapid/plugin/group_replication/src/plugin.cc index 56ff48782b47..7f7055ba8bbe 100644 --- a/rapid/plugin/group_replication/src/plugin.cc +++ b/rapid/plugin/group_replication/src/plugin.cc @@ -273,6 +273,23 @@ int log_message(enum plugin_log_level level, const char *format, ...) return my_plugin_log_message(&plugin_info_ptr, level, buff); } +static void option_deprecation_warning(MYSQL_THD thd, const char* name) +{ + if (thd != NULL) + { + push_warning_printf(thd, Sql_condition::SL_WARNING, + ER_WARN_DEPRECATED_SYNTAX_NO_REPLACEMENT, + ER_THD(thd, ER_WARN_DEPRECATED_SYNTAX_NO_REPLACEMENT), + name); + } + else + { + log_message(MY_WARNING_LEVEL, + ER_DEFAULT(ER_WARN_DEPRECATED_SYNTAX_NO_REPLACEMENT), + name); + } +} + /* Plugin interface. */ @@ -370,6 +387,12 @@ int plugin_group_replication_start() if (init_group_sidno()) DBUG_RETURN(GROUP_REPLICATION_CONFIGURATION_ERROR); /* purecov: inspected */ + if (allow_local_disjoint_gtids_join_var) + { + option_deprecation_warning(current_thd, + "group_replication_allow_local_disjoint_gtids_join"); + } + /* Instantiate certification latch. */ @@ -2238,6 +2261,20 @@ check_enforce_update_everywhere_checks(MYSQL_THD thd, SYS_VAR *var, DBUG_RETURN(0); } +static void +update_allow_local_disjoint_gtids_join(MYSQL_THD thd, SYS_VAR *var, + void *var_ptr, const void *save) +{ + DBUG_ENTER("update_allow_local_disjoint_gtids_join"); + + (*(my_bool *) var_ptr)= (*(my_bool *) save); + + option_deprecation_warning(thd, + "group_replication_allow_local_disjoint_gtids_join"); + + DBUG_VOID_RETURN; +} + static void update_unreachable_timeout(MYSQL_THD thd, SYS_VAR *var, void *var_ptr, const void *save) { @@ -2536,7 +2573,7 @@ static MYSQL_SYSVAR_BOOL( PLUGIN_VAR_OPCMDARG, /* optional var */ "Allow this server to join the group even if it has transactions not present in the group", NULL, /* check func. */ - NULL, /* update func*/ + update_allow_local_disjoint_gtids_join,/* update func*/ 0 /* default */ ); diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_disjoint_gtids_join_option_deprecation.result b/rapid/plugin/group_replication/tests/mtr/r/gr_disjoint_gtids_join_option_deprecation.result new file mode 100644 index 000000000000..f7046a3f51d0 --- /dev/null +++ b/rapid/plugin/group_replication/tests/mtr/r/gr_disjoint_gtids_join_option_deprecation.result @@ -0,0 +1,25 @@ +include/group_replication.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection server1] + +############################################################ +# 1. Validate that the group_replication_allow_local_disjoint_gtids_join +# option deprecation warning is thrown. +include/start_and_bootstrap_group_replication.inc +Warnings: +Warning 1681 'group_replication_allow_local_disjoint_gtids_join' is deprecated and will be removed in a future release. +include/stop_group_replication.inc + +############################################################ +# 2. Validate that the group_replication_allow_local_disjoint_gtids_join +# option deprecation warning is logged on server start. +# restart:--group_replication_group_name=GROUP_REPLICATION_GROUP_NAME --group_replication_local_address=GROUP_REPLICATION_LOCAL_ADDRESS --group_replication_group_seeds=GROUP_REPLICATION_GROUP_SEEDS --group_replication_bootstrap_group=1 --group_replication_start_on_boot=1 +include/rpl_reconnect.inc +include/gr_wait_for_member_state.inc +include/assert_grep.inc [Found the expected deprecation log message.] + +############################################################ +# 3. Clean up. +include/group_replication_end.inc diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_executed_sets_compatibility.result b/rapid/plugin/group_replication/tests/mtr/r/gr_executed_sets_compatibility.result index c76f50c11208..31ee7e2d77a4 100644 --- a/rapid/plugin/group_replication/tests/mtr/r/gr_executed_sets_compatibility.result +++ b/rapid/plugin/group_replication/tests/mtr/r/gr_executed_sets_compatibility.result @@ -71,7 +71,11 @@ CREATE TABLE t2 (c1 INT NOT NULL PRIMARY KEY) ENGINE=InnoDB; SET GTID_NEXT= "AUTOMATIC"; include/assert.inc [The member shall contain a local transaction] SET GLOBAL group_replication_allow_local_disjoint_gtids_join= 1; +Warnings: +Warning 1681 'group_replication_allow_local_disjoint_gtids_join' is deprecated and will be removed in a future release. include/start_group_replication.inc +Warnings: +Warning 1681 'group_replication_allow_local_disjoint_gtids_join' is deprecated and will be removed in a future release. include/assert.inc [The joiner shall contain both group and local transactions] [connection server1] include/assert.inc [The old member shall only contain group transactions] @@ -105,6 +109,8 @@ DROP TABLE t1; RESET MASTER; [connection server2] SET GLOBAL group_replication_allow_local_disjoint_gtids_join= 0; +Warnings: +Warning 1681 'group_replication_allow_local_disjoint_gtids_join' is deprecated and will be removed in a future release. include/stop_group_replication.inc DROP TABLE t2; DROP TABLE t1; diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_recovery_conflicting_data_failover.result b/rapid/plugin/group_replication/tests/mtr/r/gr_recovery_conflicting_data_failover.result index 24da6688cf97..67ed80106429 100644 --- a/rapid/plugin/group_replication/tests/mtr/r/gr_recovery_conflicting_data_failover.result +++ b/rapid/plugin/group_replication/tests/mtr/r/gr_recovery_conflicting_data_failover.result @@ -25,7 +25,11 @@ GRANT REPLICATION SLAVE ON *.* TO "recovery_user"; FLUSH PRIVILEGES; SET SESSION sql_log_bin= 1; SET GLOBAL group_replication_allow_local_disjoint_gtids_join= 1; +Warnings: +Warning 1681 'group_replication_allow_local_disjoint_gtids_join' is deprecated and will be removed in a future release. include/start_group_replication.inc +Warnings: +Warning 1681 'group_replication_allow_local_disjoint_gtids_join' is deprecated and will be removed in a future release. # # Start recovery on member 3 and watch it fail for a bit as: # 1) Server 1 does not has the correct replication user @@ -49,10 +53,14 @@ SET @debug_save_rec_int= @@GLOBAL.group_replication_recovery_reconnect_interval; CHANGE MASTER TO MASTER_USER='recovery_user', MASTER_PASSWORD='recovery_password' FOR CHANNEL 'group_replication_recovery'; SET GLOBAL group_replication_recovery_reconnect_interval= 1; SET GLOBAL group_replication_allow_local_disjoint_gtids_join= 1; +Warnings: +Warning 1681 'group_replication_allow_local_disjoint_gtids_join' is deprecated and will be removed in a future release. CREATE TABLE lost_test_table (c1 INT NOT NULL PRIMARY KEY) ENGINE=InnoDB; INSERT INTO lost_test_table VALUES (1); SET GLOBAL group_replication_group_name= "65b51c20-262d-11e5-867f-0800200c9a66"; START GROUP_REPLICATION; +Warnings: +Warning 1681 'group_replication_allow_local_disjoint_gtids_join' is deprecated and will be removed in a future release. include/gr_wait_for_member_state.inc # # Create the recovery user on server 1 @@ -71,12 +79,16 @@ include/assert.inc [On the recovered member, the table should exist and have 1 e # SET @@GLOBAL.group_replication_recovery_reconnect_interval= @debug_save_rec_int; SET GLOBAL group_replication_allow_local_disjoint_gtids_join= 0; +Warnings: +Warning 1681 'group_replication_allow_local_disjoint_gtids_join' is deprecated and will be removed in a future release. DROP TABLE t1; include/stop_group_replication.inc DROP TABLE lost_test_table; RESET MASTER; include/stop_group_replication.inc SET GLOBAL group_replication_allow_local_disjoint_gtids_join= 0; +Warnings: +Warning 1681 'group_replication_allow_local_disjoint_gtids_join' is deprecated and will be removed in a future release. SET SESSION sql_log_bin= 0; DROP USER "recovery_user"; SET SESSION sql_log_bin= 1; diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_recovery_conflicting_data_failure.result b/rapid/plugin/group_replication/tests/mtr/r/gr_recovery_conflicting_data_failure.result index 272300701b1b..b38d3c1d0b1f 100644 --- a/rapid/plugin/group_replication/tests/mtr/r/gr_recovery_conflicting_data_failure.result +++ b/rapid/plugin/group_replication/tests/mtr/r/gr_recovery_conflicting_data_failure.result @@ -38,7 +38,11 @@ SET SESSION sql_log_bin= 1; SET @debug_save_retries= @@GLOBAL.group_replication_recovery_retry_count; SET GLOBAL group_replication_recovery_retry_count= 1; SET GLOBAL group_replication_allow_local_disjoint_gtids_join= 1; +Warnings: +Warning 1681 'group_replication_allow_local_disjoint_gtids_join' is deprecated and will be removed in a future release. include/start_group_replication.inc +Warnings: +Warning 1681 'group_replication_allow_local_disjoint_gtids_join' is deprecated and will be removed in a future release. # # Remove the conflicting data and see that all goes fine now # @@ -47,6 +51,8 @@ DROP TABLE t1; RESET MASTER; SET @@GLOBAL.group_replication_recovery_retry_count= @debug_save_retries; SET GLOBAL group_replication_allow_local_disjoint_gtids_join= 0; +Warnings: +Warning 1681 'group_replication_allow_local_disjoint_gtids_join' is deprecated and will be removed in a future release. include/start_group_replication.inc include/assert.inc [On the recovered member, the table should exist and have 1 elements] # diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_recovery_no_donors.result b/rapid/plugin/group_replication/tests/mtr/r/gr_recovery_no_donors.result index fc2d9d26bd54..1812fe72528a 100644 --- a/rapid/plugin/group_replication/tests/mtr/r/gr_recovery_no_donors.result +++ b/rapid/plugin/group_replication/tests/mtr/r/gr_recovery_no_donors.result @@ -97,8 +97,12 @@ SET @group_replication_recovery_reconnect_interval_save= @@GLOBAL.group_replicat SET @group_replication_allow_local_disjoint_gtids_join_save= @@GLOBAL.group_replication_allow_local_disjoint_gtids_join; SET GLOBAL group_replication_recovery_reconnect_interval= 1; SET GLOBAL group_replication_allow_local_disjoint_gtids_join= 1; +Warnings: +Warning 1681 'group_replication_allow_local_disjoint_gtids_join' is deprecated and will be removed in a future release. STOP GROUP_REPLICATION; START GROUP_REPLICATION; +Warnings: +Warning 1681 'group_replication_allow_local_disjoint_gtids_join' is deprecated and will be removed in a future release. include/gr_wait_for_member_state.inc ############################################################ @@ -107,6 +111,8 @@ include/gr_wait_for_member_state.inc include/stop_group_replication.inc SET GLOBAL group_replication_recovery_reconnect_interval= @group_replication_recovery_reconnect_interval_save; SET GLOBAL group_replication_allow_local_disjoint_gtids_join= @group_replication_allow_local_disjoint_gtids_join_save; +Warnings: +Warning 1681 'group_replication_allow_local_disjoint_gtids_join' is deprecated and will be removed in a future release. ALTER EVENT e1 DISABLE; SET GLOBAL EVENT_SCHEDULER= OFF; DROP EVENT e1; diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_show_global_and_session_variables.result b/rapid/plugin/group_replication/tests/mtr/r/gr_show_global_and_session_variables.result index 527fdacbeaa6..0849d161007a 100644 --- a/rapid/plugin/group_replication/tests/mtr/r/gr_show_global_and_session_variables.result +++ b/rapid/plugin/group_replication/tests/mtr/r/gr_show_global_and_session_variables.result @@ -75,9 +75,13 @@ SET @@SESSION.group_replication_unreachable_majority_timeout= 10240; ERROR HY000: Variable 'group_replication_unreachable_majority_timeout' is a GLOBAL variable and should be set with SET GLOBAL SET @@SESSION.group_replication_member_weight= 80; ERROR HY000: Variable 'group_replication_member_weight' is a GLOBAL variable and should be set with SET GLOBAL +Warnings: +Warning 1681 'group_replication_allow_local_disjoint_gtids_join' is deprecated and will be removed in a future release. # Test#3: Verify GLOBAL and SESSION variables include/start_group_replication.inc +Warnings: +Warning 1681 'group_replication_allow_local_disjoint_gtids_join' is deprecated and will be removed in a future release. include/assert.inc [Verify GLOBAL value of group_replication_allow_local_disjoint_gtids_join] include/assert.inc [Verify GLOBAL value of group_replication_allow_local_disjoint_gtids_join] include/assert.inc [Verify SESSION value of group_replication_allow_local_disjoint_gtids_join] @@ -209,4 +213,6 @@ include/assert.inc [Verify SESSION value of group_replication_member_weight] # Clean up include/stop_group_replication.inc +Warnings: +Warning 1681 'group_replication_allow_local_disjoint_gtids_join' is deprecated and will be removed in a future release. include/group_replication_end.inc diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_transaction_compatibility_basics.result b/rapid/plugin/group_replication/tests/mtr/r/gr_transaction_compatibility_basics.result index 6dcf2fafa679..05ca9f4323a9 100644 --- a/rapid/plugin/group_replication/tests/mtr/r/gr_transaction_compatibility_basics.result +++ b/rapid/plugin/group_replication/tests/mtr/r/gr_transaction_compatibility_basics.result @@ -45,6 +45,8 @@ ERROR 42000: Variable 'group_replication_allow_local_disjoint_gtids_join' can't SET GLOBAL group_replication_allow_local_disjoint_gtids_join= 1.2; ERROR 42000: Incorrect argument type to variable 'group_replication_allow_local_disjoint_gtids_join' SET GLOBAL group_replication_allow_local_disjoint_gtids_join= 1; +Warnings: +Warning 1681 'group_replication_allow_local_disjoint_gtids_join' is deprecated and will be removed in a future release. include/assert.inc [The value of allow_local_disjoint_gtids_join should now be 1/ON] # # Test that server 2 can now join @@ -53,6 +55,8 @@ include/assert.inc [The value of allow_local_disjoint_gtids_join should now be 1 include/rpl_gr_wait_for_number_of_members.inc [connection server2] include/start_group_replication.inc +Warnings: +Warning 1681 'group_replication_allow_local_disjoint_gtids_join' is deprecated and will be removed in a future release. # # Verify all is fine # @@ -68,6 +72,8 @@ include/stop_group_replication.inc include/start_group_replication.inc [connection server2] SET GLOBAL group_replication_allow_local_disjoint_gtids_join= 0; +Warnings: +Warning 1681 'group_replication_allow_local_disjoint_gtids_join' is deprecated and will be removed in a future release. DROP TABLE t1; DROP TABLE t2; include/group_replication_end.inc diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_variables_default_values.result b/rapid/plugin/group_replication/tests/mtr/r/gr_variables_default_values.result index 353d12a33717..3ec4c2a4b1ed 100644 --- a/rapid/plugin/group_replication/tests/mtr/r/gr_variables_default_values.result +++ b/rapid/plugin/group_replication/tests/mtr/r/gr_variables_default_values.result @@ -42,6 +42,8 @@ ERROR 42000: Variable 'group_replication_gtid_assignment_block_size' can't be se SET @@GLOBAL.group_replication_ip_whitelist= default; ERROR 42000: Variable 'group_replication_ip_whitelist' can't be set to the value of 'DEFAULT' SET @@GLOBAL.group_replication_allow_local_disjoint_gtids_join= default; +Warnings: +Warning 1681 'group_replication_allow_local_disjoint_gtids_join' is deprecated and will be removed in a future release. SET @@GLOBAL.group_replication_allow_local_lower_version_join= default; SET @@GLOBAL.group_replication_bootstrap_group= default; SET @@GLOBAL.group_replication_components_stop_timeout= default; @@ -101,4 +103,6 @@ include/assert.inc [Default group_replication_member_weight is 50] # # Clean up # +Warnings: +Warning 1681 'group_replication_allow_local_disjoint_gtids_join' is deprecated and will be removed in a future release. include/group_replication_end.inc diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_xplugin_global_variables.result b/rapid/plugin/group_replication/tests/mtr/r/gr_xplugin_global_variables.result index cf1c4d80e3e2..25bb57dcafd5 100644 --- a/rapid/plugin/group_replication/tests/mtr/r/gr_xplugin_global_variables.result +++ b/rapid/plugin/group_replication/tests/mtr/r/gr_xplugin_global_variables.result @@ -153,6 +153,8 @@ Mysqlx.Ok { } ok START GROUP_REPLICATION; +Warnings: +Warning 1681 'group_replication_allow_local_disjoint_gtids_join' is deprecated and will be removed in a future release. include/assert.inc [group_replication_allow_local_disjoint_gtids_join is ON] include/assert.inc [group_replication_allow_local_lower_version_join is ON] include/assert.inc [group_replication_auto_increment_increment is 5] @@ -185,6 +187,8 @@ include/assert.inc [group_replication_start_on_boot is ON] include/assert.inc [group_replication_ssl_mode is VERIFY_CA] include/stop_group_replication.inc SET GLOBAL group_replication_allow_local_disjoint_gtids_join= @group_replication_allow_local_disjoint_gtids_join_save; +Warnings: +Warning 1681 'group_replication_allow_local_disjoint_gtids_join' is deprecated and will be removed in a future release. SET GLOBAL group_replication_allow_local_lower_version_join= @group_replication_allow_local_lower_version_join_save; SET GLOBAL group_replication_auto_increment_increment= @group_replication_auto_increment_increment_save; SET GLOBAL group_replication_components_stop_timeout= @group_replication_components_stop_timeout_save; diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_disjoint_gtids_join_option_deprecation-master.opt b/rapid/plugin/group_replication/tests/mtr/t/gr_disjoint_gtids_join_option_deprecation-master.opt new file mode 100644 index 000000000000..1155ad607ed1 --- /dev/null +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_disjoint_gtids_join_option_deprecation-master.opt @@ -0,0 +1,3 @@ +--no-console +--log-error=$MYSQLTEST_VARDIR/tmp/gr_disjoint_gtids_join_option_deprecation.1.err +--loose-group_replication_allow_local_disjoint_gtids_join=1 diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_disjoint_gtids_join_option_deprecation.test b/rapid/plugin/group_replication/tests/mtr/t/gr_disjoint_gtids_join_option_deprecation.test new file mode 100644 index 000000000000..119c2fb81b35 --- /dev/null +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_disjoint_gtids_join_option_deprecation.test @@ -0,0 +1,53 @@ +################################################################################ +# Validate that group_replication_allow_local_disjoint_gtids_join deprecation +# warning is thrown when set through configuration file. +# +# Test: +# 0. The test requires one server. +# 1. Validate that the group_replication_allow_local_disjoint_gtids_join +# option deprecation warning is thrown. +# 2. Validate that the group_replication_allow_local_disjoint_gtids_join +# option deprecation warning is logged on server start. +# 3. Clean up. +################################################################################ +--source include/big_test.inc +--source ../inc/have_group_replication_plugin.inc +--let $rpl_skip_group_replication_start= 1 +--source ../inc/group_replication.inc + +--echo +--echo ############################################################ +--echo # 1. Validate that the group_replication_allow_local_disjoint_gtids_join +--echo # option deprecation warning is thrown. +--source ../inc/start_and_bootstrap_group_replication.inc +--source include/stop_group_replication.inc + + +--echo +--echo ############################################################ +--echo # 2. Validate that the group_replication_allow_local_disjoint_gtids_join +--echo # option deprecation warning is logged on server start. +--let $allow_rpl_inited=1 +--let $_group_replication_local_address= `SELECT @@GLOBAL.group_replication_local_address` +--let $_group_replication_group_seeds= `SELECT @@GLOBAL.group_replication_group_seeds` +--let $restart_parameters=restart:--group_replication_group_name=$group_replication_group_name --group_replication_local_address=$_group_replication_local_address --group_replication_group_seeds=$_group_replication_group_seeds --group_replication_bootstrap_group=1 --group_replication_start_on_boot=1 +--replace_result $group_replication_group_name GROUP_REPLICATION_GROUP_NAME $_group_replication_local_address GROUP_REPLICATION_LOCAL_ADDRESS $_group_replication_group_seeds GROUP_REPLICATION_GROUP_SEEDS +--source include/restart_mysqld.inc + +--let $rpl_server_number= 1 +--source include/rpl_reconnect.inc + +--let $group_replication_member_state= ONLINE +--source ../inc/gr_wait_for_member_state.inc + +--let $assert_file= $MYSQLTEST_VARDIR/tmp/gr_disjoint_gtids_join_option_deprecation.1.err +--let $assert_count = 1 +--let $assert_select = 'group_replication_allow_local_disjoint_gtids_join' is deprecated and will be removed in a future release. +--let $assert_text = Found the expected deprecation log message. +--source include/assert_grep.inc + + +--echo +--echo ############################################################ +--echo # 3. Clean up. +--source ../inc/group_replication_end.inc From 5a3d186dd65b1335c6bd505805bc99fe3f500b31 Mon Sep 17 00:00:00 2001 From: Shishir Jaiswal Date: Wed, 1 Nov 2017 19:36:06 +0530 Subject: [PATCH 0150/1221] Bug#26199978 - WRONG ERROR MESSAGE FOR PARTIAL BACKUPS WITH GTID_MODE = ON DESCRIPTION =========== Attempt to take partial backup through mysqlpump on a GTID enabled server fails reporting, "mysqlpump: [ERROR] (1) A partial dump from a server that has GTIDs is not allowed. Dump process encountered error and will not continue." If one trusts this message, he would think that there is no way ("at all") mysqlpump can be used to take partial backup with GTID enabled server, which is wrong. ANALYSIS ======== We've two issues here: 1. The error message, as stated above. 2. One(undocumented) way to still do so is to pass --set-gtid-purged=OFF. Ideally both the values [ON|OFF] should be allowed even in case of partial backup, depending upon the use case (the use cases should be part of error message) FIX === Sql_formatter::format_dump_start() checks for the gtid-purged mode, so we now error out "only" when this mode is set to AUTO. The message is as follows. "A partial dump from a server that is using GTID-based replication requires the --set-gtid-purged=[ON|OFF] option to be specified. Use ON if the intention is to deploy a new replication slave using only some of the data from the dumped server. Use OFF if the intention is to repair a table by copying it within a topology, and use OFF if the intention is to copy a table between replication topologies that are disjoint and will remain so." The above message is self-explanatory. NOTE FOR THE DOCUMENTATION TEAM =============================== Please add the above message for option "--set-gtid-purged=value" under "mysqlpump Option Descriptions" section in the documentation pages. --- client/dump/sql_formatter.cc | 13 +++++++-- mysql-test/r/mysqlpump_extended.result | 20 +++++++++++++ mysql-test/t/mysqlpump_extended.test | 40 ++++++++++++++++++++++++++ 3 files changed, 70 insertions(+), 3 deletions(-) diff --git a/client/dump/sql_formatter.cc b/client/dump/sql_formatter.cc index 34142c1bc930..c13698bf261b 100644 --- a/client/dump/sql_formatter.cc +++ b/client/dump/sql_formatter.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2015, 2016 Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2015, 2017 Oracle and/or its affiliates. All rights reserved. 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 @@ -320,11 +320,18 @@ void Sql_formatter::format_dump_start( if (*((ulong*)&m_options->m_gtid_purged) == ((ulong)GTID_PURGED_ON) || *((ulong*)&m_options->m_gtid_purged) == ((ulong)GTID_PURGED_AUTO)) { - if (!m_mysqldump_tool_options->m_dump_all_databases) + if (!m_mysqldump_tool_options->m_dump_all_databases && + *((ulong*)&m_options->m_gtid_purged) == ((ulong)GTID_PURGED_AUTO)) { m_options->m_mysql_chain_element_options->get_program()->error( Mysql::Tools::Base::Message_data(1, - "A partial dump from a server that has GTIDs is not allowed.\n", + "A partial dump from a server that is using GTID-based replication " + "requires the --set-gtid-purged=[ON|OFF] option to be specified. Use ON " + "if the intention is to deploy a new replication slave using only some " + "of the data from the dumped server. Use OFF if the intention is to " + "repair a table by copying it within a topology, and use OFF if the " + "intention is to copy a table between replication topologies that are " + "disjoint and will remain so.\n", Mysql::Tools::Base::Message_type_error)); return; } diff --git a/mysql-test/r/mysqlpump_extended.result b/mysql-test/r/mysqlpump_extended.result index 191540c5e04c..c6a60a83c7ad 100644 --- a/mysql-test/r/mysqlpump_extended.result +++ b/mysql-test/r/mysqlpump_extended.result @@ -368,3 +368,23 @@ INSERT INTO t1 VALUES (x) utf8mb4 utf8mb4_general_ci latin1_swedish_ci DROP DATABASE db1_extended; DROP USER u1@localhost; # test for compress-output +# +# Bug#26199978 - WRONG ERROR MESSAGE FOR PARTIAL BACKUPS WITH GTID_MODE = ON +# +# Test 1: Taking backup when --set-gtid-purged is passed as ON +CREATE DATABASE bug26199978; +DROP DATABASE bug26199978; +# Backup file should contain "SET @@GLOBAL.GTID_PURGED=.* ''" +Pattern "SET @@GLOBAL.GTID_PURGED=.* ''" found +# Test 2: Taking backup when --set-gtid-purged is pased as OFF +CREATE DATABASE bug26199978; +DROP DATABASE bug26199978; +# Backup file should NOT contain "SET @@GLOBAL.GTID_PURGED=.* ''" +Matching lines are: +None +Occurrences of 'SET @@GLOBAL.GTID_PURGED=.* ''' in the input file: 0 +# Test 3: Taking backup when --set-gtid-purged is passed as AUTO. Should error out +# asking to pass --set-gtid-purged=[ON|OFF] +CREATE DATABASE bug26199978; +DROP DATABASE bug26199978; +# Cleanup diff --git a/mysql-test/t/mysqlpump_extended.test b/mysql-test/t/mysqlpump_extended.test index 7b8c2078d47a..6e80fbddd0db 100644 --- a/mysql-test/t/mysqlpump_extended.test +++ b/mysql-test/t/mysqlpump_extended.test @@ -427,3 +427,43 @@ DROP USER u1@localhost; #cleanup --remove_file $MYSQLTEST_VARDIR/tmp/db1_extended.zlib --remove_file $MYSQLTEST_VARDIR/tmp/db1_extended.lz4 + +-- echo # +-- echo # Bug#26199978 - WRONG ERROR MESSAGE FOR PARTIAL BACKUPS WITH GTID_MODE = ON +-- echo # + +--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect +--shutdown_server 10 +--source include/wait_until_disconnected.inc +--enable_reconnect +--exec echo "restart: --enforce-gtid-consistency=ON --gtid-mode=ON" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect +--source include/wait_until_connected_again.inc + +let SEARCH_FILE=$MYSQLTEST_VARDIR/tmp/bug26199978_gtid-purged_ON.sql; +let SEARCH_PATTERN=SET @@GLOBAL.GTID_PURGED=.* ''; +let GREP_FILE=$MYSQLTEST_VARDIR/tmp/bug26199978_gtid-purged_OFF.sql; +let GREP_PATTERN=$SEARCH_PATTERN; + +--echo # Test 1: Taking backup when --set-gtid-purged is passed as ON +CREATE DATABASE bug26199978; +--exec $MYSQL_PUMP --databases bug26199978 --set-gtid-purged=ON > $SEARCH_FILE +DROP DATABASE bug26199978; +--echo # Backup file should contain "$SEARCH_PATTERN" +--source include/search_pattern.inc + +--echo # Test 2: Taking backup when --set-gtid-purged is pased as OFF +CREATE DATABASE bug26199978; +--exec $MYSQL_PUMP --databases bug26199978 --set-gtid-purged=OFF > $GREP_FILE +DROP DATABASE bug26199978; +--echo # Backup file should NOT contain "$GREP_PATTERN" +--source include/grep_pattern.inc + +--echo # Test 3: Taking backup when --set-gtid-purged is passed as AUTO. Should error out +--echo # asking to pass --set-gtid-purged=[ON|OFF] +CREATE DATABASE bug26199978; +--error 1 +--exec $MYSQL_PUMP --databases bug26199978 --set-gtid-purged=AUTO > $MYSQLTEST_VARDIR/tmp/bug26199978_auto.sql +DROP DATABASE bug26199978; + +--echo # Cleanup +--remove_files_wildcard $MYSQLTEST_VARDIR/tmp bug26199978_*.sql From 0f0de06f69c382c920b3332c721284bffc3d6c39 Mon Sep 17 00:00:00 2001 From: Jaideep Karande Date: Thu, 2 Nov 2017 08:43:08 +0100 Subject: [PATCH 0151/1221] Bug#25392468: TESTS WAITING ON ROLLBACK FAILING WITH WAIT_CONDITION Problem: Test case assumes rollback will broadcast transaction Description: After enforcing the use of wait_condition.inc post bug BUG#25247574 some test cases started failing. These tests use a debug sync point to block rollback queries. That is not true, and they are not blocked as group replication does not broadcasts the transaction where the code was being blocked. Resolution: ROLLBACK transactions will not be received by GR for broadcast, so conflict testing between ROLLBACK and COMMIT is not needed. However to maintain completeness of test case, ROLLBACK part has been retained. Debug sync points have been removed now, since they will not block. Parallelly running transaction is COMMIT so there will be no conflict. --- .../mtr/r/gr_read_committed_isolation.result | 47 +++++-------- .../r/gr_read_uncommitted_isolation.result | 47 +++++-------- .../mtr/r/gr_repeatable_read_isolation.result | 47 +++++-------- .../tests/mtr/t/disabled.def | 3 - .../mtr/t/gr_read_committed_isolation.test | 69 ++++++------------ .../mtr/t/gr_read_uncommitted_isolation.test | 69 ++++++------------ .../mtr/t/gr_repeatable_read_isolation.test | 70 ++++++------------- 7 files changed, 114 insertions(+), 238 deletions(-) diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_read_committed_isolation.result b/rapid/plugin/group_replication/tests/mtr/r/gr_read_committed_isolation.result index fd116d9ad0cb..5c3cd709177b 100644 --- a/rapid/plugin/group_replication/tests/mtr/r/gr_read_committed_isolation.result +++ b/rapid/plugin/group_replication/tests/mtr/r/gr_read_committed_isolation.result @@ -6,15 +6,15 @@ Note #### Storing MySQL user name or password information in the master info rep ## 1. Set global isolation level to 'READ-COMMITTED' on server1, server2 [connection server1] -SET @tx_isolation_global_orig = @@global.tx_isolation; -SET GLOBAL tx_isolation= 'READ-COMMITTED'; -SET @tx_isolation_session_orig = @@global.tx_isolation; -SET SESSION tx_isolation= 'READ-COMMITTED'; +SET @transaction_isolation_global_orig = @@global.transaction_isolation; +SET GLOBAL transaction_isolation= 'READ-COMMITTED'; +SET @transaction_isolation_session_orig = @@global.transaction_isolation; +SET SESSION transaction_isolation= 'READ-COMMITTED'; [connection server2] -SET @tx_isolation_global_orig = @@global.tx_isolation; -SET GLOBAL tx_isolation= 'READ-COMMITTED'; -SET @tx_isolation_session_orig = @@global.tx_isolation; -SET SESSION tx_isolation= 'READ-COMMITTED'; +SET @transaction_isolation_global_orig = @@global.transaction_isolation; +SET GLOBAL transaction_isolation= 'READ-COMMITTED'; +SET @transaction_isolation_session_orig = @@global.transaction_isolation; +SET SESSION transaction_isolation= 'READ-COMMITTED'; ## 2. Create table and insert some data [connection server1] @@ -57,35 +57,21 @@ include/sync_slave_sql_with_master.inc [connection server_1] ERROR HY000: Plugin instructed the server to rollback the current transaction. -## 3.6 Set a debug sync before broadcast message to group on server1 -## execute a transaction that will be blocked before broadcast. +## 3.6 ROLL BACK a transaction on server1 [connection server_1] -SET @debug_save= @@GLOBAL.DEBUG; -SET @@GLOBAL.DEBUG='d,group_replication_before_message_broadcast'; BEGIN; UPDATE t1 set a= 30 where a= 3; ROLLBACK; -## 3.7 Wait until server1 connection reaches the -## 'group_replication_before_message_broadcast' debug sync point. -[connection server1] -Timeout in wait_condition.inc for SELECT COUNT(*)=1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE State = 'debug sync point: now' - -## 3.8 Execute a transaction on server2, that will reach first -## certification, since server_1 is blocked before broadcast. +## 3.7 Execute a transaction on server2 [connection server2] BEGIN; UPDATE t1 SET a=10 WHERE a=3; COMMIT; include/sync_slave_sql_with_master.inc -## 3.9 Signal the waiting thread on server1 to resume. -[connection server1] -SET DEBUG_SYNC='now SIGNAL waiting'; -SET @@GLOBAL.DEBUG= @debug_save; - -## 3.10 Transaction originated on server2 will be successful without -## error as conflicting transaction on server1 is ROLLED BACK. +## 3.8 Transaction originated on server2 will be successful as ROLLED BACK +## transactions are not broadcasted. [connection server_1] ## Validating data on server1 and server2 [connection server1] @@ -109,7 +95,6 @@ COMMIT; ## 4.2 Wait until server_1 connection reaches the ## group_replication_before_message_broadcast debug sync point. [connection server1] -Timeout in wait_condition.inc for SELECT COUNT(*)=1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE State = 'debug sync point: now' ## 4.3 Execute a non-conflicting transaction on server2, that will reach ## first certification, since server_1 is blocked before broadcast. @@ -137,11 +122,11 @@ include/assert.inc ['The value of Count_Conflicts_Detected should be 1 after sta include/diff_tables.inc [server1:test.t1, server2:test.t1] ## 6. Clean up. -SET GLOBAL tx_isolation= @tx_isolation_global_orig; -SET SESSION tx_isolation= @tx_isolation_session_orig; +SET GLOBAL transaction_isolation= @transaction_isolation_global_orig; +SET SESSION transaction_isolation= @transaction_isolation_session_orig; SET DEBUG_SYNC='RESET'; [connection server2] -SET GLOBAL tx_isolation= @tx_isolation_global_orig; -SET SESSION tx_isolation= @tx_isolation_session_orig; +SET GLOBAL transaction_isolation= @transaction_isolation_global_orig; +SET SESSION transaction_isolation= @transaction_isolation_session_orig; DROP TABLE t1; include/group_replication_end.inc diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_read_uncommitted_isolation.result b/rapid/plugin/group_replication/tests/mtr/r/gr_read_uncommitted_isolation.result index 90773c60302a..0aab116aedd0 100644 --- a/rapid/plugin/group_replication/tests/mtr/r/gr_read_uncommitted_isolation.result +++ b/rapid/plugin/group_replication/tests/mtr/r/gr_read_uncommitted_isolation.result @@ -6,15 +6,15 @@ Note #### Storing MySQL user name or password information in the master info rep ## 1. Set global isolation level to 'READ-UNCOMMITTED' on server1, server2 [connection server1] -SET @tx_isolation_global_orig = @@global.tx_isolation; -SET GLOBAL tx_isolation= 'READ-UNCOMMITTED'; -SET @tx_isolation_session_orig = @@global.tx_isolation; -SET SESSION tx_isolation= 'READ-UNCOMMITTED'; +SET @transaction_isolation_global_orig = @@global.transaction_isolation; +SET GLOBAL transaction_isolation= 'READ-UNCOMMITTED'; +SET @transaction_isolation_session_orig = @@global.transaction_isolation; +SET SESSION transaction_isolation= 'READ-UNCOMMITTED'; [connection server2] -SET @tx_isolation_global_orig = @@global.tx_isolation; -SET GLOBAL tx_isolation= 'READ-UNCOMMITTED'; -SET @tx_isolation_session_orig = @@global.tx_isolation; -SET SESSION tx_isolation= 'READ-UNCOMMITTED'; +SET @transaction_isolation_global_orig = @@global.transaction_isolation; +SET GLOBAL transaction_isolation= 'READ-UNCOMMITTED'; +SET @transaction_isolation_session_orig = @@global.transaction_isolation; +SET SESSION transaction_isolation= 'READ-UNCOMMITTED'; ## 2. Create table and insert some data [connection server1] @@ -57,35 +57,21 @@ include/sync_slave_sql_with_master.inc [connection server_1] ERROR HY000: Plugin instructed the server to rollback the current transaction. -## 3.6 Set a debug sync before broadcast message to group on server1 -## execute a transaction that will be blocked before broadcast. +## 3.6 ROLL BACK a transaction on server1 [connection server_1] -SET @debug_save= @@GLOBAL.DEBUG; -SET @@GLOBAL.DEBUG='d,group_replication_before_message_broadcast'; BEGIN; UPDATE t1 set a= 30 where a= 3; ROLLBACK; -## 3.7 Wait until server1 connection reaches the -## 'group_replication_before_message_broadcast' debug sync point. -[connection server1] -Timeout in wait_condition.inc for SELECT COUNT(*)=1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE State = 'debug sync point: now' - -## 3.8 Execute a transaction on server2, that will reach first -## certification, since server_1 is blocked before broadcast. +## 3.7 Execute a transaction on server2 [connection server2] BEGIN; UPDATE t1 SET a=10 WHERE a=3; COMMIT; include/sync_slave_sql_with_master.inc -## 3.9 Signal the waiting thread on server1 to resume. -[connection server1] -SET DEBUG_SYNC='now SIGNAL waiting'; -SET @@GLOBAL.DEBUG= @debug_save; - -## 3.10 Transaction originated on server2 will be successful without -## error as conflicting transaction on server1 is ROLLED BACK. +## 3.8 Transaction originated on server2 will be successful as ROLLED BACK +## transactions are not broadcasted. [connection server_1] ## Validating data on server1 and server2 [connection server1] @@ -109,7 +95,6 @@ COMMIT; ## 4.2 Wait until server_1 connection reaches the ## group_replication_before_message_broadcast debug sync point. [connection server1] -Timeout in wait_condition.inc for SELECT COUNT(*)=1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE State = 'debug sync point: now' ## 4.3 Execute a non-conflicting transaction on server2, that will reach ## first certification, since server_1 is blocked before broadcast. @@ -137,11 +122,11 @@ include/assert.inc ['The value of Count_Conflicts_Detected should be 1 after sta include/diff_tables.inc [server1:test.t1, server2:test.t1] ## 6. Clean up. -SET GLOBAL tx_isolation= @tx_isolation_global_orig; -SET SESSION tx_isolation= @tx_isolation_session_orig; +SET GLOBAL transaction_isolation= @transaction_isolation_global_orig; +SET SESSION transaction_isolation= @transaction_isolation_session_orig; SET DEBUG_SYNC='RESET'; [connection server2] -SET GLOBAL tx_isolation= @tx_isolation_global_orig; -SET SESSION tx_isolation= @tx_isolation_session_orig; +SET GLOBAL transaction_isolation= @transaction_isolation_global_orig; +SET SESSION transaction_isolation= @transaction_isolation_session_orig; DROP TABLE t1; include/group_replication_end.inc diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_repeatable_read_isolation.result b/rapid/plugin/group_replication/tests/mtr/r/gr_repeatable_read_isolation.result index f3384ca70644..f3513efb3292 100644 --- a/rapid/plugin/group_replication/tests/mtr/r/gr_repeatable_read_isolation.result +++ b/rapid/plugin/group_replication/tests/mtr/r/gr_repeatable_read_isolation.result @@ -6,15 +6,15 @@ Note #### Storing MySQL user name or password information in the master info rep ## 1. Set global isolation level to 'REPEATABLE-READ' on server1, server2 [connection server1] -SET @tx_isolation_global_orig = @@global.tx_isolation; -SET GLOBAL tx_isolation= 'REPEATABLE-READ'; -SET @tx_isolation_session_orig = @@global.tx_isolation; -SET SESSION tx_isolation= 'REPEATABLE-READ'; +SET @transaction_isolation_global_orig = @@global.transaction_isolation; +SET GLOBAL transaction_isolation= 'REPEATABLE-READ'; +SET @transaction_isolation_session_orig = @@global.transaction_isolation; +SET SESSION transaction_isolation= 'REPEATABLE-READ'; [connection server2] -SET @tx_isolation_global_orig = @@global.tx_isolation; -SET GLOBAL tx_isolation= 'REPEATABLE-READ'; -SET @tx_isolation_session_orig = @@global.tx_isolation; -SET SESSION tx_isolation= 'REPEATABLE-READ'; +SET @transaction_isolation_global_orig = @@global.transaction_isolation; +SET GLOBAL transaction_isolation= 'REPEATABLE-READ'; +SET @transaction_isolation_session_orig = @@global.transaction_isolation; +SET SESSION transaction_isolation= 'REPEATABLE-READ'; ## 2. Create table and insert some data [connection server1] @@ -57,36 +57,21 @@ include/sync_slave_sql_with_master.inc [connection server_1] ERROR HY000: Plugin instructed the server to rollback the current transaction. -## 3.6 Set a debug sync before broadcast message to group on server1 -## execute a transaction that will be blocked before broadcast. +## 3.6 ROLL BACK a transaction on server1 [connection server_1] -SET @debug_save= @@GLOBAL.DEBUG; -SET @@GLOBAL.DEBUG='d,group_replication_before_message_broadcast'; BEGIN; UPDATE t1 set a= 30 where a= 3; ROLLBACK; -## 3.7 Wait until server1 connection reaches the -## 'group_replication_before_message_broadcast' debug sync point. -[connection server1] -Timeout in wait_condition.inc for SELECT COUNT(*)=1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE State = 'debug sync point: now' - -## 3.8 Execute a transaction on server2, that will reach first -## certification, since server_1 is blocked before broadcast. +## 3.7 Execute a transaction on server2 [connection server2] BEGIN; UPDATE t1 SET a=10 WHERE a=3; COMMIT; include/sync_slave_sql_with_master.inc -## 3.9 Signal the waiting thread on server1 to resume. -[connection server1] -SET DEBUG_SYNC='now SIGNAL waiting'; -SET DEBUG_SYNC= 'RESET'; -SET @@GLOBAL.DEBUG= @debug_save; - -## 3.10 Transaction originated on server2 will be successful without -## error as conflicting transaction on server1 is ROLLED BACK. +## 3.8 Transaction originated on server2 will be successful as ROLLED BACK +## transactions are not broadcasted. [connection server_1] ## Validating data on server1 and server2 [connection server1] @@ -138,10 +123,10 @@ include/assert.inc [The value of Count_Conflicts_Detected should be 1 after star include/diff_tables.inc [server1:test.t1, server2:test.t1] ## 6. Clean up. -SET GLOBAL tx_isolation= @tx_isolation_global_orig; -SET SESSION tx_isolation= @tx_isolation_session_orig; +SET GLOBAL transaction_isolation= @transaction_isolation_global_orig; +SET SESSION transaction_isolation= @transaction_isolation_session_orig; [connection server2] -SET GLOBAL tx_isolation= @tx_isolation_global_orig; -SET SESSION tx_isolation= @tx_isolation_session_orig; +SET GLOBAL transaction_isolation= @transaction_isolation_global_orig; +SET SESSION transaction_isolation= @transaction_isolation_session_orig; DROP TABLE t1; include/group_replication_end.inc diff --git a/rapid/plugin/group_replication/tests/mtr/t/disabled.def b/rapid/plugin/group_replication/tests/mtr/t/disabled.def index 671ca43bf727..888298bbb09e 100644 --- a/rapid/plugin/group_replication/tests/mtr/t/disabled.def +++ b/rapid/plugin/group_replication/tests/mtr/t/disabled.def @@ -9,6 +9,3 @@ # Do not use any TAB characters for whitespace. # ############################################################################## -gr_read_committed_isolation : BUG#25392468 2017-01-16 Jaideep TESTS WAITING ON ROLLBACK FAILING WITH WAIT_CONDITION -gr_read_uncommitted_isolation : BUG#25392468 2017-01-16 Jaideep TESTS WAITING ON ROLLBACK FAILING WITH WAIT_CONDITION -gr_repeatable_read_isolation : BUG#25392468 2017-01-16 Jaideep TESTS WAITING ON ROLLBACK FAILING WITH WAIT_CONDITION diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_read_committed_isolation.test b/rapid/plugin/group_replication/tests/mtr/t/gr_read_committed_isolation.test index 12e462276b2d..4409ca8aef5e 100644 --- a/rapid/plugin/group_replication/tests/mtr/t/gr_read_committed_isolation.test +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_read_committed_isolation.test @@ -16,15 +16,10 @@ # 3.5 Check the error on server1, it will rollback T1 as it is conflicting # with T2. # Another conflicting transaction, but transaction will rollback -# 3.6 set a debug sync and execute a transaction on server1 that will be -# blocked before broadcast. -# 3.7 Wait until server_1 connection reaches the -# 'group_replication_before_message_broadcast' debug sync point. -# 3.8 execute a conflicting transaction (T2) on server2 that will reach -# certification first. -# 3.9 Signal the waiting thread on server1 to resume. -# 3.10 Transaction originated on server2 will be successful without error, as -# conflicting transaction on server1 is ROLLED BACK. +# 3.6 ROLL BACK a transaction on server1 +# 3.7 Execute a transaction on server2 +# 3.8 Transaction originated on server2 will be successful as ROLLED BACK +# transactions are not broadcasted. # 4. Check the positive scenarios with non-conflicting transaction, # 4.1 set a debug sync and execute a transaction (T1) on server_1 so that it # is blocked before broadcast. @@ -48,17 +43,17 @@ --let $rpl_connection_name= server1 --source include/rpl_connection.inc # Store default isolation level -SET @tx_isolation_global_orig = @@global.tx_isolation; -SET GLOBAL tx_isolation= 'READ-COMMITTED'; -SET @tx_isolation_session_orig = @@global.tx_isolation; -SET SESSION tx_isolation= 'READ-COMMITTED'; +SET @transaction_isolation_global_orig = @@global.transaction_isolation; +SET GLOBAL transaction_isolation= 'READ-COMMITTED'; +SET @transaction_isolation_session_orig = @@global.transaction_isolation; +SET SESSION transaction_isolation= 'READ-COMMITTED'; --let $rpl_connection_name= server2 --source include/rpl_connection.inc -SET @tx_isolation_global_orig = @@global.tx_isolation; -SET GLOBAL tx_isolation= 'READ-COMMITTED'; -SET @tx_isolation_session_orig = @@global.tx_isolation; -SET SESSION tx_isolation= 'READ-COMMITTED'; +SET @transaction_isolation_global_orig = @@global.transaction_isolation; +SET GLOBAL transaction_isolation= 'READ-COMMITTED'; +SET @transaction_isolation_session_orig = @@global.transaction_isolation; +SET SESSION transaction_isolation= 'READ-COMMITTED'; --echo --echo ## 2. Create table and insert some data @@ -128,28 +123,15 @@ SET @@GLOBAL.DEBUG= @debug_save; --reap --echo ---echo ## 3.6 Set a debug sync before broadcast message to group on server1 ---echo ## execute a transaction that will be blocked before broadcast. +--echo ## 3.6 ROLL BACK a transaction on server1 --let $rpl_connection_name= server_1 --source include/rpl_connection.inc -SET @debug_save= @@GLOBAL.DEBUG; -SET @@GLOBAL.DEBUG='d,group_replication_before_message_broadcast'; BEGIN; UPDATE t1 set a= 30 where a= 3; --send ROLLBACK --echo ---echo ## 3.7 Wait until server1 connection reaches the ---echo ## 'group_replication_before_message_broadcast' debug sync point. ---let $rpl_connection_name= server1 ---source include/rpl_connection.inc - ---let $wait_condition=SELECT COUNT(*)=1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE State = 'debug sync point: now' ---source include/wait_condition.inc - ---echo ---echo ## 3.8 Execute a transaction on server2, that will reach first ---echo ## certification, since server_1 is blocked before broadcast. +--echo ## 3.7 Execute a transaction on server2 --let $rpl_connection_name= server2 --source include/rpl_connection.inc BEGIN; @@ -159,15 +141,8 @@ COMMIT; --source include/sync_slave_sql_with_master.inc --echo ---echo ## 3.9 Signal the waiting thread on server1 to resume. ---let $rpl_connection_name= server1 ---source include/rpl_connection.inc -SET DEBUG_SYNC='now SIGNAL waiting'; -SET @@GLOBAL.DEBUG= @debug_save; - ---echo ---echo ## 3.10 Transaction originated on server2 will be successful without ---echo ## error as conflicting transaction on server1 is ROLLED BACK. +--echo ## 3.8 Transaction originated on server2 will be successful as ROLLED BACK +--echo ## transactions are not broadcasted. --let $rpl_connection_name= server_1 --source include/rpl_connection.inc --reap @@ -250,11 +225,11 @@ SET @@GLOBAL.DEBUG= @debug_save; --source include/assert.inc --let $assert_text= 'The value of Count_Transactions_Checked should be 7 after starting group replication' ---let $assert_cond= "[SELECT Count_Transactions_Checked from performance_schema.replication_group_member_stats, Count_Transactions_Checked, 1]" = "7" +--let $assert_cond= "[SELECT Count_Transactions_Checked from performance_schema.replication_group_member_stats where member_id in (SELECT @@server_uuid), Count_Transactions_Checked, 1]" = "7" --source include/assert.inc --let $assert_text= 'The value of Count_Conflicts_Detected should be 1 after starting group replication' ---let $assert_cond= "[SELECT Count_Conflicts_Detected from performance_schema.replication_group_member_stats, Count_Conflicts_Detected, 1]" = "1" +--let $assert_cond= "[SELECT Count_Conflicts_Detected from performance_schema.replication_group_member_stats where member_id in (SELECT @@server_uuid), Count_Conflicts_Detected, 1]" = "1" --source include/assert.inc # Check that t1 on Server1, Server2 has same data @@ -265,16 +240,16 @@ SET @@GLOBAL.DEBUG= @debug_save; --echo ## 6. Clean up. # Restore original isolation levels -SET GLOBAL tx_isolation= @tx_isolation_global_orig; -SET SESSION tx_isolation= @tx_isolation_session_orig; +SET GLOBAL transaction_isolation= @transaction_isolation_global_orig; +SET SESSION transaction_isolation= @transaction_isolation_session_orig; SET DEBUG_SYNC='RESET'; --let $rpl_connection_name= server2 --source include/rpl_connection.inc -SET GLOBAL tx_isolation= @tx_isolation_global_orig; -SET SESSION tx_isolation= @tx_isolation_session_orig; +SET GLOBAL transaction_isolation= @transaction_isolation_global_orig; +SET SESSION transaction_isolation= @transaction_isolation_session_orig; # Drop table DROP TABLE t1; diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_read_uncommitted_isolation.test b/rapid/plugin/group_replication/tests/mtr/t/gr_read_uncommitted_isolation.test index 1688c90048f8..ae1e979e2e66 100644 --- a/rapid/plugin/group_replication/tests/mtr/t/gr_read_uncommitted_isolation.test +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_read_uncommitted_isolation.test @@ -16,15 +16,10 @@ # 3.5 Check the error on server1, it will rollback T1 as it is conflicting # with T2. # Another conflicting transaction, but transaction will rollback -# 3.6 set a debug sync and execute a transaction on server1 that will be -# blocked before broadcast. -# 3.7 Wait until server_1 connection reaches the -# 'group_replication_before_message_broadcast' debug sync point. -# 3.8 execute a conflicting transaction (T2) on server2 that will reach -# certification first. -# 3.9 Signal the waiting thread on server1 to resume. -# 3.10 Transaction originated on server2 will be successful without error, as -# conflicting transaction on server1 is ROLLED BACK. +# 3.6 ROLL BACK a transaction on server1 +# 3.7 Execute a transaction on server2 +# 3.8 Transaction originated on server2 will be successful as ROLLED BACK +# transactions are not broadcasted. # 4. Check the positive scenarios with non-conflicting transactions, # 4.1 set a debug sync and execute a transaction (T1) on server1 so that it # is blocked before broadcast. @@ -48,17 +43,17 @@ --let $rpl_connection_name= server1 --source include/rpl_connection.inc # Take a back-up of isolation level -SET @tx_isolation_global_orig = @@global.tx_isolation; -SET GLOBAL tx_isolation= 'READ-UNCOMMITTED'; -SET @tx_isolation_session_orig = @@global.tx_isolation; -SET SESSION tx_isolation= 'READ-UNCOMMITTED'; +SET @transaction_isolation_global_orig = @@global.transaction_isolation; +SET GLOBAL transaction_isolation= 'READ-UNCOMMITTED'; +SET @transaction_isolation_session_orig = @@global.transaction_isolation; +SET SESSION transaction_isolation= 'READ-UNCOMMITTED'; --let $rpl_connection_name= server2 --source include/rpl_connection.inc -SET @tx_isolation_global_orig = @@global.tx_isolation; -SET GLOBAL tx_isolation= 'READ-UNCOMMITTED'; -SET @tx_isolation_session_orig = @@global.tx_isolation; -SET SESSION tx_isolation= 'READ-UNCOMMITTED'; +SET @transaction_isolation_global_orig = @@global.transaction_isolation; +SET GLOBAL transaction_isolation= 'READ-UNCOMMITTED'; +SET @transaction_isolation_session_orig = @@global.transaction_isolation; +SET SESSION transaction_isolation= 'READ-UNCOMMITTED'; --echo --echo ## 2. Create table and insert some data @@ -128,28 +123,15 @@ SET @@GLOBAL.DEBUG= @debug_save; --reap --echo ---echo ## 3.6 Set a debug sync before broadcast message to group on server1 ---echo ## execute a transaction that will be blocked before broadcast. +--echo ## 3.6 ROLL BACK a transaction on server1 --let $rpl_connection_name= server_1 --source include/rpl_connection.inc -SET @debug_save= @@GLOBAL.DEBUG; -SET @@GLOBAL.DEBUG='d,group_replication_before_message_broadcast'; BEGIN; UPDATE t1 set a= 30 where a= 3; --send ROLLBACK --echo ---echo ## 3.7 Wait until server1 connection reaches the ---echo ## 'group_replication_before_message_broadcast' debug sync point. ---let $rpl_connection_name= server1 ---source include/rpl_connection.inc - ---let $wait_condition=SELECT COUNT(*)=1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE State = 'debug sync point: now' ---source include/wait_condition.inc - ---echo ---echo ## 3.8 Execute a transaction on server2, that will reach first ---echo ## certification, since server_1 is blocked before broadcast. +--echo ## 3.7 Execute a transaction on server2 --let $rpl_connection_name= server2 --source include/rpl_connection.inc BEGIN; @@ -159,15 +141,8 @@ COMMIT; --source include/sync_slave_sql_with_master.inc --echo ---echo ## 3.9 Signal the waiting thread on server1 to resume. ---let $rpl_connection_name= server1 ---source include/rpl_connection.inc -SET DEBUG_SYNC='now SIGNAL waiting'; -SET @@GLOBAL.DEBUG= @debug_save; - ---echo ---echo ## 3.10 Transaction originated on server2 will be successful without ---echo ## error as conflicting transaction on server1 is ROLLED BACK. +--echo ## 3.8 Transaction originated on server2 will be successful as ROLLED BACK +--echo ## transactions are not broadcasted. --let $rpl_connection_name= server_1 --source include/rpl_connection.inc --reap @@ -250,11 +225,11 @@ SET @@GLOBAL.DEBUG= @debug_save; --source include/assert.inc --let $assert_text= 'The value of Count_Transactions_Checked should be 7 after starting group replication' ---let $assert_cond= "[SELECT Count_Transactions_Checked from performance_schema.replication_group_member_stats, Count_Transactions_Checked, 1]" = "7" +--let $assert_cond= "[SELECT Count_Transactions_Checked from performance_schema.replication_group_member_stats where member_id in (SELECT @@server_uuid), Count_Transactions_Checked, 1]" = "7" --source include/assert.inc --let $assert_text= 'The value of Count_Conflicts_Detected should be 1 after starting group replication' ---let $assert_cond= "[SELECT Count_Conflicts_Detected from performance_schema.replication_group_member_stats, Count_Conflicts_Detected, 1]" = "1" +--let $assert_cond= "[SELECT Count_Conflicts_Detected from performance_schema.replication_group_member_stats where member_id in (SELECT @@server_uuid), Count_Conflicts_Detected, 1]" = "1" --source include/assert.inc # Check that t1 on Server1, Server2 has same data @@ -265,16 +240,16 @@ SET @@GLOBAL.DEBUG= @debug_save; --echo ## 6. Clean up. # Restore original isolation levels -SET GLOBAL tx_isolation= @tx_isolation_global_orig; -SET SESSION tx_isolation= @tx_isolation_session_orig; +SET GLOBAL transaction_isolation= @transaction_isolation_global_orig; +SET SESSION transaction_isolation= @transaction_isolation_session_orig; SET DEBUG_SYNC='RESET'; --let $rpl_connection_name= server2 --source include/rpl_connection.inc -SET GLOBAL tx_isolation= @tx_isolation_global_orig; -SET SESSION tx_isolation= @tx_isolation_session_orig; +SET GLOBAL transaction_isolation= @transaction_isolation_global_orig; +SET SESSION transaction_isolation= @transaction_isolation_session_orig; # Drop table DROP TABLE t1; diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_repeatable_read_isolation.test b/rapid/plugin/group_replication/tests/mtr/t/gr_repeatable_read_isolation.test index 7bc0deb2a9d6..add29f124aa4 100644 --- a/rapid/plugin/group_replication/tests/mtr/t/gr_repeatable_read_isolation.test +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_repeatable_read_isolation.test @@ -16,15 +16,10 @@ # 3.5 Check the error on server1, it will rollback T1 as it is conflicting # with T2. # Another conflicting transaction, but transaction will rollback -# 3.6 set a debug sync and execute a transaction on server1 that will be -# blocked before broadcast. -# 3.7 Wait until server_1 connection reaches the -# 'group_replication_before_message_broadcast' debug sync point. -# 3.8 execute a conflicting transaction (T2) on server2 that will reach -# certification first. -# 3.9 Signal the waiting thread on server1 to resume. -# 3.10 Transaction originated on server2 will be successful without error, as -# conflicting transaction on server1 is ROLLED BACK. +# 3.6 ROLL BACK a transaction on server1 +# 3.7 Execute a transaction on server2 +# 3.8 Transaction originated on server2 will be successful as ROLLED BACK +# transactions are not broadcasted. # 4. Check the positive scenarios with non-conflicting transaction, # 4.1 set a debug sync and execute a transaction (T1) on server_1 so that it # is blocked before broadcast. @@ -48,17 +43,17 @@ --let $rpl_connection_name= server1 --source include/rpl_connection.inc # Store default isolation level -SET @tx_isolation_global_orig = @@global.tx_isolation; -SET GLOBAL tx_isolation= 'REPEATABLE-READ'; -SET @tx_isolation_session_orig = @@global.tx_isolation; -SET SESSION tx_isolation= 'REPEATABLE-READ'; +SET @transaction_isolation_global_orig = @@global.transaction_isolation; +SET GLOBAL transaction_isolation= 'REPEATABLE-READ'; +SET @transaction_isolation_session_orig = @@global.transaction_isolation; +SET SESSION transaction_isolation= 'REPEATABLE-READ'; --let $rpl_connection_name= server2 --source include/rpl_connection.inc -SET @tx_isolation_global_orig = @@global.tx_isolation; -SET GLOBAL tx_isolation= 'REPEATABLE-READ'; -SET @tx_isolation_session_orig = @@global.tx_isolation; -SET SESSION tx_isolation= 'REPEATABLE-READ'; +SET @transaction_isolation_global_orig = @@global.transaction_isolation; +SET GLOBAL transaction_isolation= 'REPEATABLE-READ'; +SET @transaction_isolation_session_orig = @@global.transaction_isolation; +SET SESSION transaction_isolation= 'REPEATABLE-READ'; --echo --echo ## 2. Create table and insert some data @@ -128,28 +123,15 @@ SET @@GLOBAL.DEBUG= @debug_save; --reap --echo ---echo ## 3.6 Set a debug sync before broadcast message to group on server1 ---echo ## execute a transaction that will be blocked before broadcast. +--echo ## 3.6 ROLL BACK a transaction on server1 --let $rpl_connection_name= server_1 --source include/rpl_connection.inc -SET @debug_save= @@GLOBAL.DEBUG; -SET @@GLOBAL.DEBUG='d,group_replication_before_message_broadcast'; BEGIN; UPDATE t1 set a= 30 where a= 3; --send ROLLBACK --echo ---echo ## 3.7 Wait until server1 connection reaches the ---echo ## 'group_replication_before_message_broadcast' debug sync point. ---let $rpl_connection_name= server1 ---source include/rpl_connection.inc - ---let $wait_condition=SELECT COUNT(*)=1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE State = 'debug sync point: now' ---source include/wait_condition.inc - ---echo ---echo ## 3.8 Execute a transaction on server2, that will reach first ---echo ## certification, since server_1 is blocked before broadcast. +--echo ## 3.7 Execute a transaction on server2 --let $rpl_connection_name= server2 --source include/rpl_connection.inc BEGIN; @@ -159,16 +141,8 @@ COMMIT; --source include/sync_slave_sql_with_master.inc --echo ---echo ## 3.9 Signal the waiting thread on server1 to resume. ---let $rpl_connection_name= server1 ---source include/rpl_connection.inc -SET DEBUG_SYNC='now SIGNAL waiting'; -SET DEBUG_SYNC= 'RESET'; -SET @@GLOBAL.DEBUG= @debug_save; - ---echo ---echo ## 3.10 Transaction originated on server2 will be successful without ---echo ## error as conflicting transaction on server1 is ROLLED BACK. +--echo ## 3.8 Transaction originated on server2 will be successful as ROLLED BACK +--echo ## transactions are not broadcasted. --let $rpl_connection_name= server_1 --source include/rpl_connection.inc --reap @@ -252,11 +226,11 @@ SET @@GLOBAL.DEBUG= @debug_save; --source include/assert.inc --let $assert_text= 'The value of Count_Transactions_Checked should be 7 after starting group replication' ---let $assert_cond= "[SELECT Count_Transactions_Checked from performance_schema.replication_group_member_stats, Count_Transactions_Checked, 1]" = "7" +--let $assert_cond= "[SELECT Count_Transactions_Checked from performance_schema.replication_group_member_stats where member_id in (SELECT @@server_uuid), Count_Transactions_Checked, 1]" = "7" --source include/assert.inc --let $assert_text= The value of Count_Conflicts_Detected should be 1 after starting group replication ---let $assert_cond= "[SELECT Count_Conflicts_Detected from performance_schema.replication_group_member_stats, Count_Conflicts_Detected, 1]" = "1" +--let $assert_cond= "[SELECT Count_Conflicts_Detected from performance_schema.replication_group_member_stats where member_id in (SELECT @@server_uuid), Count_Conflicts_Detected, 1]" = "1" --source include/assert.inc # Check that t1 on Server1, Server2 is same @@ -267,14 +241,14 @@ SET @@GLOBAL.DEBUG= @debug_save; --echo ## 6. Clean up. # Restore original isolation levels -SET GLOBAL tx_isolation= @tx_isolation_global_orig; -SET SESSION tx_isolation= @tx_isolation_session_orig; +SET GLOBAL transaction_isolation= @transaction_isolation_global_orig; +SET SESSION transaction_isolation= @transaction_isolation_session_orig; --let $rpl_connection_name= server2 --source include/rpl_connection.inc -SET GLOBAL tx_isolation= @tx_isolation_global_orig; -SET SESSION tx_isolation= @tx_isolation_session_orig; +SET GLOBAL transaction_isolation= @transaction_isolation_global_orig; +SET SESSION transaction_isolation= @transaction_isolation_session_orig; # Drop table DROP TABLE t1; From 48c9f0add1c1d0199076929e9f350f48cd617420 Mon Sep 17 00:00:00 2001 From: Jon Olav Hauglid Date: Fri, 3 Nov 2017 11:11:27 +0100 Subject: [PATCH 0152/1221] Bug#26931470: PLEASE BACKPORT TO 5.7: DEFAULT LOG-TC-SIZE TOO SMALL ON POWER - 3 * ( 64K PAGE This is a backport to 5.7 of Bug#23014086: DEFAULT LOG-TC-SIZE TOO SMALL ON POWER - 3 * ( 64K PAGE SIZE) MINIMIUM NEEDED The problem was that the memory page size for the memory mapped transaction coordinator was hardcoded to 8k. This did not work properly on platforms like ARM64 and PowerPC where the page size is much larger. This patch fixes the problem by using my_getpagesize() to get the page size of the current platform rather than using a hardcoded value. This has consequences for and changes the behavior of the --log-tc-size startup option. The minimum and default value of the option is now 6 * pagesize. This means it is still 24k on Linux (4k pagesize). The value also now has to be multiples of pagesize rather than multiples of 8k. Patch based on contribution from Alexey Kopytov. (cherry picked from commit e3b09cae22163edfc1951641767b776c8545ad49) Original backport provided by Daniel Black. --- mysql-test/include/mysqld--help.inc | 2 ++ mysql-test/r/mysqld--help-notwin.result | 2 +- mysql-test/r/mysqld--help-win.result | 2 +- sql/binlog.cc | 7 ++++--- sql/mysqld.cc | 7 +++++-- sql/tc_log.cc | 5 ----- sql/tc_log.h | 3 ++- 7 files changed, 15 insertions(+), 13 deletions(-) diff --git a/mysql-test/include/mysqld--help.inc b/mysql-test/include/mysqld--help.inc index 40e9bdc23f2c..544d007079fe 100644 --- a/mysql-test/include/mysqld--help.inc +++ b/mysql-test/include/mysqld--help.inc @@ -58,6 +58,8 @@ perl; s/\b393216\b/262144/; # Replacing port number with string s/^port \d+/port ####/; + # log-tc-size varies by platform + s/^log-tc-size \d+/log-tc-size #####/; foreach $var (@env) { s/$ENV{$var}/$var/ } next if /use --skip-(use-)?symbolic-links to disable/; # for valgrind, again next if $skip; diff --git a/mysql-test/r/mysqld--help-notwin.result b/mysql-test/r/mysqld--help-notwin.result index 1b4c26b92a9c..8ac71bbf1d4e 100644 --- a/mysql-test/r/mysqld--help-notwin.result +++ b/mysql-test/r/mysqld--help-notwin.result @@ -1362,7 +1362,7 @@ log-syslog-facility daemon log-syslog-include-pid TRUE log-syslog-tag log-tc tc.log -log-tc-size 24576 +log-tc-size ##### log-throttle-queries-not-using-indexes 0 log-timestamps UTC log-warnings 0 diff --git a/mysql-test/r/mysqld--help-win.result b/mysql-test/r/mysqld--help-win.result index b2d925433da5..d959ea52cfa2 100644 --- a/mysql-test/r/mysqld--help-win.result +++ b/mysql-test/r/mysqld--help-win.result @@ -1357,7 +1357,7 @@ log-statements-unsafe-for-binlog TRUE log-syslog FALSE log-syslog-tag log-tc tc.log -log-tc-size 24576 +log-tc-size ##### log-throttle-queries-not-using-indexes 0 log-timestamps UTC log-warnings 0 diff --git a/sql/binlog.cc b/sql/binlog.cc index c41f91ca82dd..a40d8d14aa9b 100644 --- a/sql/binlog.cc +++ b/sql/binlog.cc @@ -9511,15 +9511,16 @@ int MYSQL_BIN_LOG::recover(IO_CACHE *log, Format_description_log_event *fdle, is partially written to the binlog. */ bool in_transaction= FALSE; + int memory_page_size= my_getpagesize(); if (! fdle->is_valid() || - my_hash_init(&xids, &my_charset_bin, TC_LOG_PAGE_SIZE/3, 0, - sizeof(my_xid), 0, 0, MYF(0), + my_hash_init(&xids, &my_charset_bin, memory_page_size/3, 0, + sizeof(my_xid), 0, 0, 0, key_memory_binlog_recover_exec)) goto err1; init_alloc_root(key_memory_binlog_recover_exec, - &mem_root, TC_LOG_PAGE_SIZE, TC_LOG_PAGE_SIZE); + &mem_root, memory_page_size, memory_page_size); while ((ev= Log_event::read_log_event(log, 0, fdle, TRUE)) && ev->is_valid()) diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 541fc78630ea..0b3e94d2c4a9 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -314,6 +314,8 @@ bool opt_endinfo, using_udf_functions; my_bool locked_in_memory; bool opt_using_transactions; bool volatile abort_loop; +ulong opt_tc_log_size; + static enum_server_operational_state server_operational_state= SERVER_BOOTING; ulong log_warnings; bool opt_log_syslog_enable; @@ -5736,8 +5738,9 @@ struct my_option my_long_options[]= REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, {"log-tc-size", 0, "Size of transaction coordinator log.", &opt_tc_log_size, &opt_tc_log_size, 0, GET_ULONG, - REQUIRED_ARG, TC_LOG_MIN_SIZE, TC_LOG_MIN_SIZE, ULONG_MAX, 0, - TC_LOG_PAGE_SIZE, 0}, + REQUIRED_ARG, TC_LOG_MIN_PAGES * my_getpagesize(), + TC_LOG_MIN_PAGES * my_getpagesize(), ULONG_MAX, 0, + my_getpagesize(), 0}, {"master-info-file", 0, "The location and name of the file that remembers the master and where " "the I/O replication thread is in the master's binlogs.", diff --git a/sql/tc_log.cc b/sql/tc_log.cc index dbb0538d8813..290d51ddf337 100644 --- a/sql/tc_log.cc +++ b/sql/tc_log.cc @@ -85,7 +85,6 @@ ulong tc_log_page_waits= 0; static const char tc_log_magic[]={(char) 254, 0x23, 0x05, 0x74}; -ulong opt_tc_log_size= TC_LOG_MIN_SIZE; ulong tc_log_max_pages_used=0, tc_log_page_size=0, tc_log_cur_pages_used=0; int TC_LOG_MMAP::open(const char *opt_name) @@ -98,10 +97,6 @@ int TC_LOG_MMAP::open(const char *opt_name) DBUG_ASSERT(opt_name && opt_name[0]); tc_log_page_size= my_getpagesize(); - if (TC_LOG_PAGE_SIZE > tc_log_page_size) - { - DBUG_ASSERT(TC_LOG_PAGE_SIZE % tc_log_page_size == 0); - } fn_format(logname,opt_name,mysql_data_home,"",MY_UNPACK_FILENAME); if ((fd= mysql_file_open(key_file_tclog, logname, O_RDWR, MYF(0))) < 0) diff --git a/sql/tc_log.h b/sql/tc_log.h index a55b0e2cbb03..5ae114c0ff0f 100644 --- a/sql/tc_log.h +++ b/sql/tc_log.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -23,6 +23,7 @@ class THD; typedef ulonglong my_xid; +#define TC_LOG_MIN_PAGES 6 /** Transaction Coordinator Log. From 79c0c202da5414abbbe4a0342c289e384c055b88 Mon Sep 17 00:00:00 2001 From: Bjorn Munch Date: Fri, 3 Nov 2017 12:21:26 +0100 Subject: [PATCH 0153/1221] Bug #27021754 MYSQLTEST MAN PAGES WILL BE REMOVED, PACKAGING MUST BE PREPARED Removed relevant man pages from file lists for RPM and DEB RPM: added conditional removal of them, so it works both before and after man pages are actually removed DEB: added to exclude list (5.6+) --- packaging/rpm-oel/mysql.spec.in | 19 ++++++++++++------- packaging/rpm-sles/mysql.spec.in | 21 ++++++++++++--------- support-files/mysql.spec.sh | 17 ++++++++++------- 3 files changed, 34 insertions(+), 23 deletions(-) diff --git a/packaging/rpm-oel/mysql.spec.in b/packaging/rpm-oel/mysql.spec.in index 7ef294ffa849..7aa8cdb5640f 100644 --- a/packaging/rpm-oel/mysql.spec.in +++ b/packaging/rpm-oel/mysql.spec.in @@ -1,4 +1,4 @@ -# Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -609,6 +609,14 @@ rm -rf %{buildroot}%{_bindir}/mysql_embedded rm -rf %{buildroot}%{_bindir}/mysql_setpermission rm -rf %{buildroot}%{_mandir}/man1/mysql_setpermission.1* +# Remove obsoleted man pages +rm -f %{buildroot}%{_mandir}/man1/mysql-stress-test.pl.1 +rm -f %{buildroot}%{_mandir}/man1/mysql-test-run.pl.1 +rm -f %{buildroot}%{_mandir}/man1/mysql_client_test.1 +rm -f %{buildroot}%{_mandir}/man1/mysql_client_test_embedded.1 +rm -f %{buildroot}%{_mandir}/man1/mysqltest.1 +rm -f %{buildroot}%{_mandir}/man1/mysqltest_embedded.1 + %check %if 0%{?runselftest} pushd release @@ -697,7 +705,6 @@ fi %attr(644, root, root) %{_mandir}/man1/mysqlhotcopy.1* %attr(644, root, root) %{_mandir}/man1/mysqlman.1* %attr(644, root, root) %{_mandir}/man1/mysql.server.1* -%attr(644, root, root) %{_mandir}/man1/mysqltest.1* %attr(644, root, root) %{_mandir}/man1/mysql_tzinfo_to_sql.1* %attr(644, root, root) %{_mandir}/man1/mysql_zap.1* %attr(644, root, root) %{_mandir}/man1/mysqlbug.1* @@ -889,11 +896,6 @@ fi %attr(755, root, root) %{_bindir}/mysql_client_test %attr(755, root, root) %{_bindir}/mysql_client_test_embedded %attr(755, root, root) %{_bindir}/mysqltest_embedded -%attr(644, root, root) %{_mandir}/man1/mysql_client_test.1* -%attr(644, root, root) %{_mandir}/man1/mysql-stress-test.pl.1* -%attr(644, root, root) %{_mandir}/man1/mysql-test-run.pl.1* -%attr(644, root, root) %{_mandir}/man1/mysql_client_test_embedded.1* -%attr(644, root, root) %{_mandir}/man1/mysqltest_embedded.1* %files bench %defattr(-, root, root, -) @@ -918,6 +920,9 @@ fi %endif %changelog +* Tue Oct 31 2017 Bjorn Munch - 5.5.59-1 +- Remove obsoleted mysqltest man pages + * Mon Sep 26 2016 Balasubramanian Kandasamy - 5.5.53-1 - Include mysql-files directory diff --git a/packaging/rpm-sles/mysql.spec.in b/packaging/rpm-sles/mysql.spec.in index 1b5f1806321e..5d0d1a55214a 100644 --- a/packaging/rpm-sles/mysql.spec.in +++ b/packaging/rpm-sles/mysql.spec.in @@ -1,4 +1,4 @@ -# Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -446,6 +446,14 @@ rm -rf %{buildroot}%{_bindir}/mysql_embedded rm -rf %{buildroot}%{_bindir}/mysql_setpermission rm -rf %{buildroot}%{_mandir}/man1/mysql_setpermission.1* +# Remove obsoleted man pages +rm -f %{buildroot}%{_mandir}/man1/mysql-stress-test.pl.1 +rm -f %{buildroot}%{_mandir}/man1/mysql-test-run.pl.1 +rm -f %{buildroot}%{_mandir}/man1/mysql_client_test.1 +rm -f %{buildroot}%{_mandir}/man1/mysql_client_test_embedded.1 +rm -f %{buildroot}%{_mandir}/man1/mysqltest.1 +rm -f %{buildroot}%{_mandir}/man1/mysqltest_embedded.1 + # rcmysql symlink install -d %{buildroot}%{_sbindir} ln -sf %{_initrddir}/mysql %{buildroot}%{_sbindir}/rcmysql @@ -525,7 +533,6 @@ fi %attr(644, root, root) %{_mandir}/man1/mysqlhotcopy.1* %attr(644, root, root) %{_mandir}/man1/mysqlman.1* %attr(644, root, root) %{_mandir}/man1/mysql.server.1* -%attr(644, root, root) %{_mandir}/man1/mysqltest.1* %attr(644, root, root) %{_mandir}/man1/mysql_tzinfo_to_sql.1* %attr(644, root, root) %{_mandir}/man1/mysql_zap.1* %attr(644, root, root) %{_mandir}/man1/mysqlbug.1* @@ -715,13 +722,6 @@ fi %attr(755, root, root) %{_libdir}/mysql/plugin/debug/qa_auth_interface.so %attr(755, root, root) %{_libdir}/mysql/plugin/debug/qa_auth_server.so -%attr(644, root, root) %{_mandir}/man1/mysql_client_test.1* -%attr(644, root, root) %{_mandir}/man1/mysql-stress-test.pl.1* -%attr(644, root, root) %{_mandir}/man1/mysql-test-run.pl.1* -%attr(644, root, root) %{_mandir}/man1/mysql_client_test_embedded.1* -%attr(644, root, root) %{_mandir}/man1/mysqltest.1* -%attr(644, root, root) %{_mandir}/man1/mysqltest_embedded.1* - %files bench %defattr(-, root, root, -) %doc %{?license_files_server} @@ -742,6 +742,9 @@ fi %attr(755, root, root) %{_libdir}/mysql/libmysqld.so %changelog +* Tue Oct 31 2017 Bjorn Munch - 5.5.59-1 +- Remove obsoleted mysqltest man pages + * Mon Sep 26 2016 Balasubramanian Kandasamy - 5.5.53-1 - Include mysql-files directory diff --git a/support-files/mysql.spec.sh b/support-files/mysql.spec.sh index 211ed4f38881..4060284ce9df 100644 --- a/support-files/mysql.spec.sh +++ b/support-files/mysql.spec.sh @@ -1,4 +1,4 @@ -# Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -621,6 +621,12 @@ install -m 644 "%{malloc_lib_source}" \ # Remove man pages we explicitly do not want to package, avoids 'unpackaged # files' warning. # This has become obsolete: rm -f $RBR%{_mandir}/man1/make_win_bin_dist.1* +rm -f $RBR%{_mandir}/man1/mysql-stress-test.pl.1 +rm -f $RBR%{_mandir}/man1/mysql-test-run.pl.1 +rm -f $RBR%{_mandir}/man1/mysql_client_test.1 +rm -f $RBR%{_mandir}/man1/mysql_client_test_embedded.1 +rm -f $RBR%{_mandir}/man1/mysqltest.1 +rm -f $RBR%{_mandir}/man1/mysqltest_embedded.1 ############################################################################## # Post processing actions, i.e. when installed @@ -1091,7 +1097,6 @@ echo "=====" >> $STATUS_HISTORY %doc %attr(644, root, man) %{_mandir}/man1/mysqlhotcopy.1* %doc %attr(644, root, man) %{_mandir}/man1/mysqlman.1* %doc %attr(644, root, man) %{_mandir}/man1/mysql.server.1* -%doc %attr(644, root, man) %{_mandir}/man1/mysqltest.1* %doc %attr(644, root, man) %{_mandir}/man1/mysql_tzinfo_to_sql.1* %doc %attr(644, root, man) %{_mandir}/man1/mysql_zap.1* %doc %attr(644, root, man) %{_mandir}/man1/mysqlbug.1* @@ -1209,11 +1214,6 @@ echo "=====" >> $STATUS_HISTORY %attr(755, root, root) %{_bindir}/mysql_client_test %attr(755, root, root) %{_bindir}/mysql_client_test_embedded %attr(755, root, root) %{_bindir}/mysqltest_embedded -%doc %attr(644, root, man) %{_mandir}/man1/mysql_client_test.1* -%doc %attr(644, root, man) %{_mandir}/man1/mysql-stress-test.pl.1* -%doc %attr(644, root, man) %{_mandir}/man1/mysql-test-run.pl.1* -%doc %attr(644, root, man) %{_mandir}/man1/mysql_client_test_embedded.1* -%doc %attr(644, root, man) %{_mandir}/man1/mysqltest_embedded.1* # ---------------------------------------------------------------------------- %files -n MySQL-embedded%{product_suffix} @@ -1228,6 +1228,9 @@ echo "=====" >> $STATUS_HISTORY # merging BK trees) ############################################################################## %changelog +* Tue Oct 31 2017 Bjorn Munch +- Remove obsoleted mysqltest man pages + * Mon Sep 26 2016 Balasubramanian Kandasamy - Include mysql-files directory From 78dad481eac4e821996f1ded0ee01002da82285a Mon Sep 17 00:00:00 2001 From: Libing Song Date: Fri, 3 Nov 2017 21:41:47 +0800 Subject: [PATCH 0154/1221] BUG#26474110 RPL_KILLED_DDL USES A DEBUG POINT NOT EXIST Post fix: included have_debug_sync.inc into the test --- mysql-test/suite/rpl/t/rpl_kill_alter_event.test | 1 + 1 file changed, 1 insertion(+) diff --git a/mysql-test/suite/rpl/t/rpl_kill_alter_event.test b/mysql-test/suite/rpl/t/rpl_kill_alter_event.test index 2b4968b0c990..1b032e2c17c0 100644 --- a/mysql-test/suite/rpl/t/rpl_kill_alter_event.test +++ b/mysql-test/suite/rpl/t/rpl_kill_alter_event.test @@ -6,6 +6,7 @@ # statement is binlogged correctly when it is killed. ################################################################################ --source include/have_binlog_format_row.inc +--source include/have_debug_sync.inc --source include/master-slave.inc --let $connection_id= `SELECT CONNECTION_ID()` From cdbd81d0b582b21102fc3d2a36be474a906e22f0 Mon Sep 17 00:00:00 2001 From: Dyre Tjeldvoll Date: Sat, 4 Nov 2017 18:19:10 +0100 Subject: [PATCH 0155/1221] Bug#26739438: DEADLOCK ON GET_LOCK(..., 0) Problem: Concurrent calls to GET_LOCK could cause deadlock, even with a wait time of 0. Root cause was that MDL_context::acquire_lock() would add the ticket as waiter and perform deadlock detection analysis even when the wait time was 0. Solution: Return error immediately if lock cannot be obtained and wait time is 0. (cherry picked from commit c528fee7d9c8186bcc14549f62b1f835ab01c0c5) --- mysql-test/r/locking_service.result | 10 ++---- mysql-test/r/mdl_sync.result | 34 +++++++++++++++++++ mysql-test/r/user_lock.result | 2 +- mysql-test/t/locking_service.test | 7 ++-- mysql-test/t/mdl_sync.test | 51 +++++++++++++++++++++++++++++ mysql-test/t/user_lock.test | 2 +- sql/mdl.cc | 30 ++++++++++++++++- 7 files changed, 122 insertions(+), 14 deletions(-) diff --git a/mysql-test/r/locking_service.result b/mysql-test/r/locking_service.result index ed435dc58726..8c049ca35f91 100644 --- a/mysql-test/r/locking_service.result +++ b/mysql-test/r/locking_service.result @@ -140,18 +140,14 @@ ERROR HY000: Service lock wait timeout exceeded. SELECT service_get_read_locks("namespace1", "lock1", 0); ERROR HY000: Service lock wait timeout exceeded. # 4.2: The content of performance_schema.events_waits_history_long -# should show that we have waited six times including correct +# should show that we have waited three times including correct # service lock namespace and lock name. -# BTW: Even a timeout of 0 leads to wait. SELECT OBJECT_SCHEMA, OBJECT_NAME, OBJECT_TYPE, OPERATION FROM performance_schema.events_waits_history_long WHERE OBJECT_TYPE = 'LOCKING SERVICE'; OBJECT_SCHEMA OBJECT_NAME OBJECT_TYPE OPERATION namespace1 lock1 LOCKING SERVICE metadata lock namespace1 lock1 LOCKING SERVICE metadata lock -namespace1 lock1 LOCKING SERVICE metadata lock -namespace1 lock1 LOCKING SERVICE metadata lock -namespace1 lock2 LOCKING SERVICE metadata lock namespace1 lock2 LOCKING SERVICE metadata lock # Per performance_schema there is no current wait for getting a # service lock because our attempt already timed out. @@ -175,7 +171,7 @@ WHERE OBJECT_TYPE = 'LOCKING SERVICE'; OBJECT_SCHEMA OBJECT_NAME OBJECT_TYPE OPERATION namespace1 lock1 LOCKING SERVICE metadata lock # Per performance_schema six waits in history -SELECT COUNT(*) = 6 AS expect_1 +SELECT COUNT(*) = 3 AS expect_1 FROM performance_schema.events_waits_history_long WHERE OBJECT_TYPE = 'LOCKING SERVICE'; expect_1 @@ -199,7 +195,7 @@ WHERE OBJECT_TYPE = 'LOCKING SERVICE'; expect_1 1 # Per performance_schema now seven waits in history -SELECT COUNT(*) = 7 AS expect_1 +SELECT COUNT(*) = 4 AS expect_1 FROM performance_schema.events_waits_history_long WHERE OBJECT_TYPE = 'LOCKING SERVICE'; expect_1 diff --git a/mysql-test/r/mdl_sync.result b/mysql-test/r/mdl_sync.result index 964d5a5696f6..f4d08ac8f533 100644 --- a/mysql-test/r/mdl_sync.result +++ b/mysql-test/r/mdl_sync.result @@ -4024,3 +4024,37 @@ SET DEBUG_SYNC= 'RESET'; # Wait for the now unblocked DROP t1, t2 to complete # Disconnecting con1 # Switching to back to default at end of test case +# +# Bug#26739438 DEADLOCK ON GET_LOCK(..., 0) +# +# Run GET_LOCK(...,0) from two connections to which would previously +# cause deadlock +CREATE TABLE t1(i INT); +INSERT INTO t1 VALUES (0), (1); +# Starting con0 +SELECT i FROM t1 WHERE i = 0 AND GET_LOCK(i, 0); +i +0 +# Starting con1 +SELECT i FROM t1 WHERE i = 1 AND GET_LOCK(i, 0); +i +1 +# Send query which will do a 0-wait on i=0 while holding lock on i=1 +SET DEBUG_SYNC='mdl_acquire_lock_wait SIGNAL wait0 WAIT_FOR go0'; +SELECT i FROM t1 WHERE GET_LOCK(i, 0) AND i = 0; +# Switch to con0. Send query which will do a 0-wait on i=1 while +# holding lock on i=0 +SET DEBUG_SYNC='mdl_acquire_lock_wait SIGNAL wait1 WAIT_FOR go1'; +SELECT i FROM t1 WHERE GET_LOCK(i, 0) AND i = 1; +# Switch to default connection and wait until both con0 and con1 +# are ready to check for deadlocks +SET DEBUG_SYNC='now WAIT_FOR wait0'; +SET DEBUG_SYNC='now WAIT_FOR wait1'; +# Tell both connections to proceed +SET DEBUG_SYNC='now SIGNAL go0'; +SET DEBUG_SYNC='now SIGNAL go1'; +# Wait for con0 +i +# Wait for con1 (should not deadlock) +i +DROP TABLE t1; diff --git a/mysql-test/r/user_lock.result b/mysql-test/r/user_lock.result index f101512ea83d..2ba7045388cd 100644 --- a/mysql-test/r/user_lock.result +++ b/mysql-test/r/user_lock.result @@ -477,7 +477,7 @@ DELETE FROM t1; DROP TRIGGER trig_t1_ins; CREATE TRIGGER trig_t1_ins BEFORE INSERT ON t1 FOR EACH ROW BEGIN -SET @aux = GET_LOCK(2,0); +SET @aux = GET_LOCK(2,1); IF @aux <> 1 THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'LOCK 2 not got. Abort.', MYSQL_ERRNO = 9999; diff --git a/mysql-test/t/locking_service.test b/mysql-test/t/locking_service.test index e623860998a0..7ddfff8dd52b 100644 --- a/mysql-test/t/locking_service.test +++ b/mysql-test/t/locking_service.test @@ -202,9 +202,8 @@ SELECT service_get_write_locks("namespace1", "lock2", 0); --error ER_LOCKING_SERVICE_TIMEOUT SELECT service_get_read_locks("namespace1", "lock1", 0); --echo # 4.2: The content of performance_schema.events_waits_history_long ---echo # should show that we have waited six times including correct +--echo # should show that we have waited three times including correct --echo # service lock namespace and lock name. ---echo # BTW: Even a timeout of 0 leads to wait. --sorted_result SELECT OBJECT_SCHEMA, OBJECT_NAME, OBJECT_TYPE, OPERATION FROM performance_schema.events_waits_history_long @@ -230,7 +229,7 @@ SELECT OBJECT_SCHEMA, OBJECT_NAME, OBJECT_TYPE, OPERATION FROM performance_schema.events_waits_current WHERE OBJECT_TYPE = 'LOCKING SERVICE'; --echo # Per performance_schema six waits in history -SELECT COUNT(*) = 6 AS expect_1 +SELECT COUNT(*) = 3 AS expect_1 FROM performance_schema.events_waits_history_long WHERE OBJECT_TYPE = 'LOCKING SERVICE'; --echo # 4.4: Show the impact of releasing and getting a service lock on @@ -246,7 +245,7 @@ WHERE state = 'Waiting for locking service lock'; SELECT COUNT(*) = 0 AS expect_1 FROM performance_schema.events_waits_current WHERE OBJECT_TYPE = 'LOCKING SERVICE'; --echo # Per performance_schema now seven waits in history -SELECT COUNT(*) = 7 AS expect_1 +SELECT COUNT(*) = 4 AS expect_1 FROM performance_schema.events_waits_history_long WHERE OBJECT_TYPE = 'LOCKING SERVICE'; SELECT service_release_locks("namespace1"); diff --git a/mysql-test/t/mdl_sync.test b/mysql-test/t/mdl_sync.test index 8b3c2dc3152b..1eaa8e35ac0d 100644 --- a/mysql-test/t/mdl_sync.test +++ b/mysql-test/t/mdl_sync.test @@ -6091,6 +6091,57 @@ SET DEBUG_SYNC= 'RESET'; --echo # Switching to back to default at end of test case --connection default +--echo # +--echo # Bug#26739438 DEADLOCK ON GET_LOCK(..., 0) +--echo # +--echo # Run GET_LOCK(...,0) from two connections to which would previously +--echo # cause deadlock + +CREATE TABLE t1(i INT); +INSERT INTO t1 VALUES (0), (1); + +--echo # Starting con0 +connect (con0,localhost,root,,test,,); +SELECT i FROM t1 WHERE i = 0 AND GET_LOCK(i, 0); + +--echo # Starting con1 +connect (con1,localhost,root,,test,,); +SELECT i FROM t1 WHERE i = 1 AND GET_LOCK(i, 0); + +--echo # Send query which will do a 0-wait on i=0 while holding lock on i=1 +SET DEBUG_SYNC='mdl_acquire_lock_wait SIGNAL wait0 WAIT_FOR go0'; +--send SELECT i FROM t1 WHERE GET_LOCK(i, 0) AND i = 0 + +--echo # Switch to con0. Send query which will do a 0-wait on i=1 while +--echo # holding lock on i=0 +connection con0; +SET DEBUG_SYNC='mdl_acquire_lock_wait SIGNAL wait1 WAIT_FOR go1'; +--send SELECT i FROM t1 WHERE GET_LOCK(i, 0) AND i = 1 + +--echo # Switch to default connection and wait until both con0 and con1 +--echo # are ready to check for deadlocks +connection default; +SET DEBUG_SYNC='now WAIT_FOR wait0'; +SET DEBUG_SYNC='now WAIT_FOR wait1'; + +--echo # Tell both connections to proceed +SET DEBUG_SYNC='now SIGNAL go0'; +SET DEBUG_SYNC='now SIGNAL go1'; + +--echo # Wait for con0 +connection con0; +--reap + +--echo # Wait for con1 (should not deadlock) +connection con1; +--reap + +connection default; +disconnect con0; +disconnect con1; + +DROP TABLE t1; + # Check that all connections opened by test cases in this file are really # gone so execution of other tests won't be affected by their presence. --source include/wait_until_count_sessions.inc diff --git a/mysql-test/t/user_lock.test b/mysql-test/t/user_lock.test index e801f25ef2ca..225e3a0a5667 100644 --- a/mysql-test/t/user_lock.test +++ b/mysql-test/t/user_lock.test @@ -417,7 +417,7 @@ DROP TRIGGER trig_t1_ins; --delimiter | CREATE TRIGGER trig_t1_ins BEFORE INSERT ON t1 FOR EACH ROW BEGIN - SET @aux = GET_LOCK(2,0); + SET @aux = GET_LOCK(2,1); IF @aux <> 1 THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'LOCK 2 not got. Abort.', MYSQL_ERRNO = 9999; diff --git a/sql/mdl.cc b/sql/mdl.cc index de250114fd1e..8fcb568b5e87 100644 --- a/sql/mdl.cc +++ b/sql/mdl.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2007, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2007, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -3574,6 +3574,34 @@ MDL_context::acquire_lock(MDL_request *mdl_request, ulong lock_wait_timeout) return FALSE; } + /* + Return early if we did not get the lock and are not willing to wait. + This way we avoid reporting "fake" deadlock for lock_wait_timeout == 0. + */ + if (lock_wait_timeout == 0) + { + /* + Lock acquired inside try_acquire_lock_impl(). Release before + leaving scope. + */ + mysql_prlock_unlock(&ticket->m_lock->m_rwlock); + + /* + If SEs were notified about impending lock acquisition, the failure + to acquire it requires the same notification as lock release. + */ + if (ticket->m_hton_notified) + { + mysql_mdl_set_status(ticket->m_psi, MDL_ticket::POST_RELEASE_NOTIFY); + m_owner->notify_hton_post_release_exclusive(&mdl_request->key); + } + DEBUG_SYNC(get_thd(), "mdl_acquire_lock_wait"); + + MDL_ticket::destroy(ticket); + my_error(ER_LOCK_WAIT_TIMEOUT, MYF(0)); + return true; + } + /* Our attempt to acquire lock without waiting has failed. As a result of this attempt we got MDL_ticket with m_lock From 1a13f7f98772da507b54018e05c4b88abbaac32c Mon Sep 17 00:00:00 2001 From: Aditya A Date: Mon, 6 Nov 2017 11:05:22 +0530 Subject: [PATCH 0156/1221] Bug #22486025 INNODB: FAILING ASSERTION: KEY_LEN != 0 || FIND_FLAG != HA_READ_KEY_EXACT This assertion basically comes because innodb doesn't support index on zero length column.This problem comes only for innodb intrinsic temporary table. It was decided that we will presently return an error for the queries which build a index on a zero length column . Supporting the index on zero length column will be taken as a separate bug. --- mysql-test/r/group_by.result | 3 +-- mysql-test/t/group_by.test | 1 + storage/innobase/handler/ha_innodb.cc | 6 ++++++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/mysql-test/r/group_by.result b/mysql-test/r/group_by.result index e5413512db99..dec56f87be82 100644 --- a/mysql-test/r/group_by.result +++ b/mysql-test/r/group_by.result @@ -2108,8 +2108,7 @@ SET BIG_TABLES=1; CREATE TABLE t1(a INT); INSERT INTO t1 VALUES (0),(0); SELECT 1 FROM t1 GROUP BY IF(`a`,'',''); -1 -1 +ERROR 42000: The used storage engine can't index column 'tmp_field_0' SELECT 1 FROM t1 GROUP BY TRIM(LEADING RAND() FROM ''); 1 1 diff --git a/mysql-test/t/group_by.test b/mysql-test/t/group_by.test index 2f0f6a44bf69..67c89c80cf33 100644 --- a/mysql-test/t/group_by.test +++ b/mysql-test/t/group_by.test @@ -1374,6 +1374,7 @@ DROP TABLE t1; SET BIG_TABLES=1; CREATE TABLE t1(a INT); INSERT INTO t1 VALUES (0),(0); +--error ER_WRONG_KEY_COLUMN SELECT 1 FROM t1 GROUP BY IF(`a`,'',''); SELECT 1 FROM t1 GROUP BY TRIM(LEADING RAND() FROM ''); SELECT 1 FROM t1 GROUP BY SUBSTRING('',SLEEP(0),''); diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index 66ae351a4bb7..b946c3478d6c 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -10354,6 +10354,12 @@ create_index( /* Assert that "GEN_CLUST_INDEX" cannot be used as non-primary index */ ut_a(innobase_strcasecmp(key->name, innobase_index_reserve_name) != 0); + if(key->key_length == 0) { + my_error(ER_WRONG_KEY_COLUMN, + MYF(0), + key->key_part->field->field_name); + DBUG_RETURN(ER_WRONG_KEY_COLUMN); + } ind_type = 0; if (key->flags & HA_SPATIAL) { ind_type = DICT_SPATIAL; From b6446a922f238b2e9ba6eea23f374aae788e1781 Mon Sep 17 00:00:00 2001 From: Lars Tangvald Date: Mon, 6 Nov 2017 09:39:56 +0100 Subject: [PATCH 0157/1221] Deb packaging: Remove unused packaging files --- packaging/deb-jessie/changelog | 95 --------- packaging/deb-jessie/compat | 1 - packaging/deb-jessie/control | 188 ----------------- packaging/deb-jessie/copyright | 41 ---- packaging/deb-jessie/extra/my.cnf | 57 ------ .../deb-jessie/extra/mysql-systemd-start | 82 -------- packaging/deb-jessie/extra/mysql_embedded.1 | 1 - packaging/deb-jessie/libmysqlclient-dev.dirs | 17 -- .../deb-jessie/libmysqlclient-dev.install | 29 --- .../libmysqlclient-dev.lintian-overrides | 21 -- packaging/deb-jessie/libmysqlclient18.install | 19 -- .../libmysqlclient18.lintian-overrides | 21 -- packaging/deb-jessie/libmysqld-dev.install | 20 -- .../libmysqld-dev.lintian-overrides | 19 -- packaging/deb-jessie/mysql-client.install | 18 -- .../deb-jessie/mysql-client.lintian-overrides | 19 -- packaging/deb-jessie/mysql-common.dirs | 16 -- packaging/deb-jessie/mysql-common.install | 29 --- .../deb-jessie/mysql-common.lintian-overrides | 19 -- .../deb-jessie/mysql-community-bench.dirs | 17 -- .../deb-jessie/mysql-community-bench.install | 19 -- .../mysql-community-bench.lintian-overrides | 19 -- .../deb-jessie/mysql-community-client.install | 60 ------ .../mysql-community-client.lintian-overrides | 21 -- .../deb-jessie/mysql-community-server.config | 88 -------- .../deb-jessie/mysql-community-server.dirs | 19 -- .../deb-jessie/mysql-community-server.install | 85 -------- .../mysql-community-server.lintian-overrides | 23 --- .../mysql-community-server.mysql.init | 190 ----------------- .../mysql-community-server.mysql.service | 33 --- .../mysql-community-server.postinst | 102 ---------- .../deb-jessie/mysql-community-server.postrm | 165 --------------- .../deb-jessie/mysql-community-server.preinst | 131 ------------ .../deb-jessie/mysql-community-server.prerm | 24 --- .../mysql-community-server.templates | 34 ---- .../deb-jessie/mysql-community-source.install | 20 -- .../mysql-community-source.lintian-overrides | 19 -- .../deb-jessie/mysql-community-test.dirs | 16 -- .../deb-jessie/mysql-community-test.install | 20 -- .../deb-jessie/mysql-community-test.links | 17 -- .../mysql-community-test.lintian-overrides | 19 -- packaging/deb-jessie/mysql-server.install | 18 -- .../deb-jessie/mysql-server.lintian-overrides | 19 -- packaging/deb-jessie/mysql-testsuite.install | 18 -- .../mysql-testsuite.lintian-overrides | 19 -- .../patches/fix-man-page-links.patch | 14 -- .../patches/fix-mtr-search-paths.patch | 13 -- .../patches/fix-mysql_install_db.patch | 43 ---- packaging/deb-jessie/patches/series | 18 -- packaging/deb-jessie/rules | 136 ------------- packaging/deb-jessie/source/format | 1 - packaging/deb-jessie/source/include-binaries | 35 ---- packaging/deb-jessie/source/lintian-overrides | 18 -- packaging/deb-jessie/watch | 2 - packaging/deb-precise/changelog | 86 -------- packaging/deb-precise/compat | 1 - packaging/deb-precise/control | 188 ----------------- packaging/deb-precise/copyright | 41 ---- packaging/deb-precise/extra/apparmor-profile | 53 ----- packaging/deb-precise/extra/my.cnf | 57 ------ packaging/deb-precise/extra/mysql_embedded.1 | 1 - packaging/deb-precise/libmysqlclient-dev.dirs | 17 -- .../deb-precise/libmysqlclient-dev.install | 29 --- .../libmysqlclient-dev.lintian-overrides | 21 -- .../deb-precise/libmysqlclient18.install | 19 -- .../libmysqlclient18.lintian-overrides | 21 -- packaging/deb-precise/libmysqld-dev.install | 20 -- .../libmysqld-dev.lintian-overrides | 19 -- packaging/deb-precise/mysql-client.install | 18 -- .../mysql-client.lintian-overrides | 19 -- packaging/deb-precise/mysql-common.dirs | 16 -- packaging/deb-precise/mysql-common.install | 29 --- .../mysql-common.lintian-overrides | 19 -- .../deb-precise/mysql-community-bench.dirs | 17 -- .../deb-precise/mysql-community-bench.install | 19 -- .../mysql-community-bench.lintian-overrides | 19 -- .../mysql-community-client.install | 60 ------ .../mysql-community-client.lintian-overrides | 21 -- .../deb-precise/mysql-community-server.config | 88 -------- .../deb-precise/mysql-community-server.dirs | 19 -- .../mysql-community-server.install | 86 -------- .../mysql-community-server.lintian-overrides | 23 --- .../mysql-community-server.mysql.init | 192 ------------------ .../mysql-community-server.postinst | 102 ---------- .../deb-precise/mysql-community-server.postrm | 165 --------------- .../mysql-community-server.preinst | 131 ------------ .../deb-precise/mysql-community-server.prerm | 24 --- .../mysql-community-server.templates | 34 ---- .../mysql-community-source.install | 20 -- .../mysql-community-source.lintian-overrides | 19 -- .../deb-precise/mysql-community-test.dirs | 16 -- .../deb-precise/mysql-community-test.install | 20 -- .../deb-precise/mysql-community-test.links | 17 -- .../mysql-community-test.lintian-overrides | 19 -- packaging/deb-precise/mysql-server.install | 18 -- .../mysql-server.lintian-overrides | 19 -- packaging/deb-precise/mysql-testsuite.install | 18 -- .../mysql-testsuite.lintian-overrides | 19 -- .../patches/fix-man-page-links.patch | 14 -- .../patches/fix-mtr-search-paths.patch | 13 -- .../patches/fix-mysql_install_db.patch | 43 ---- packaging/deb-precise/patches/series | 18 -- packaging/deb-precise/rules | 135 ------------ packaging/deb-precise/source/format | 1 - packaging/deb-precise/source/include-binaries | 35 ---- packaging/deb-precise/watch | 2 - packaging/deb-trusty/changelog | 93 --------- packaging/deb-trusty/compat | 1 - packaging/deb-trusty/control | 189 ----------------- packaging/deb-trusty/copyright | 41 ---- packaging/deb-trusty/extra/apparmor-profile | 53 ----- packaging/deb-trusty/extra/my.cnf | 57 ------ packaging/deb-trusty/extra/mysql_embedded.1 | 1 - .../deb-trusty/libmysqlclient-dev.install | 29 --- .../libmysqlclient-dev.lintian-overrides | 21 -- packaging/deb-trusty/libmysqlclient18.install | 19 -- .../libmysqlclient18.lintian-overrides | 21 -- packaging/deb-trusty/libmysqld-dev.install | 20 -- .../libmysqld-dev.lintian-overrides | 19 -- packaging/deb-trusty/mysql-client.install | 18 -- .../deb-trusty/mysql-client.lintian-overrides | 19 -- packaging/deb-trusty/mysql-common.dirs | 16 -- packaging/deb-trusty/mysql-common.install | 29 --- .../deb-trusty/mysql-common.lintian-overrides | 19 -- .../deb-trusty/mysql-community-bench.install | 19 -- .../mysql-community-bench.lintian-overrides | 19 -- .../deb-trusty/mysql-community-client.install | 60 ------ .../mysql-community-client.lintian-overrides | 21 -- .../deb-trusty/mysql-community-server.config | 88 -------- .../deb-trusty/mysql-community-server.dirs | 19 -- .../deb-trusty/mysql-community-server.install | 86 -------- .../mysql-community-server.lintian-overrides | 23 --- .../mysql-community-server.mysql.init | 192 ------------------ .../mysql-community-server.postinst | 102 ---------- .../deb-trusty/mysql-community-server.postrm | 165 --------------- .../deb-trusty/mysql-community-server.preinst | 131 ------------ .../deb-trusty/mysql-community-server.prerm | 24 --- .../mysql-community-server.templates | 34 ---- .../deb-trusty/mysql-community-source.install | 20 -- .../mysql-community-source.lintian-overrides | 19 -- .../deb-trusty/mysql-community-test.install | 20 -- .../deb-trusty/mysql-community-test.links | 17 -- .../mysql-community-test.lintian-overrides | 19 -- packaging/deb-trusty/mysql-server.install | 18 -- .../deb-trusty/mysql-server.lintian-overrides | 19 -- packaging/deb-trusty/mysql-testsuite.install | 18 -- .../mysql-testsuite.lintian-overrides | 19 -- .../patches/fix-man-page-links.patch | 14 -- .../patches/fix-mtr-search-paths.patch | 13 -- .../patches/fix-mysql_install_db.patch | 43 ---- packaging/deb-trusty/patches/series | 18 -- packaging/deb-trusty/rules | 135 ------------ packaging/deb-trusty/source/format | 1 - packaging/deb-trusty/source/include-binaries | 35 ---- packaging/deb-trusty/watch | 2 - packaging/deb-utopic/changelog | 96 --------- packaging/deb-utopic/compat | 1 - packaging/deb-utopic/control | 190 ----------------- packaging/deb-utopic/copyright | 41 ---- packaging/deb-utopic/extra/apparmor-profile | 49 ----- packaging/deb-utopic/extra/my.cnf | 57 ------ packaging/deb-utopic/extra/mysql_embedded.1 | 1 - .../deb-utopic/libmysqlclient-dev.install | 29 --- .../libmysqlclient-dev.lintian-overrides | 21 -- packaging/deb-utopic/libmysqlclient18.install | 19 -- .../libmysqlclient18.lintian-overrides | 21 -- packaging/deb-utopic/libmysqld-dev.install | 20 -- .../libmysqld-dev.lintian-overrides | 19 -- packaging/deb-utopic/mysql-client.install | 18 -- .../deb-utopic/mysql-client.lintian-overrides | 19 -- packaging/deb-utopic/mysql-common.dirs | 16 -- packaging/deb-utopic/mysql-common.install | 29 --- .../deb-utopic/mysql-common.lintian-overrides | 19 -- .../deb-utopic/mysql-community-bench.install | 19 -- .../mysql-community-bench.lintian-overrides | 19 -- .../deb-utopic/mysql-community-client.install | 60 ------ .../mysql-community-client.lintian-overrides | 21 -- .../deb-utopic/mysql-community-server.config | 88 -------- .../deb-utopic/mysql-community-server.dirs | 19 -- .../deb-utopic/mysql-community-server.install | 86 -------- .../mysql-community-server.lintian-overrides | 23 --- .../mysql-community-server.mysql.init | 192 ------------------ .../mysql-community-server.postinst | 93 --------- .../deb-utopic/mysql-community-server.postrm | 154 -------------- .../deb-utopic/mysql-community-server.preinst | 123 ----------- .../deb-utopic/mysql-community-server.prerm | 24 --- .../mysql-community-server.templates | 33 --- .../deb-utopic/mysql-community-source.install | 21 -- .../mysql-community-source.lintian-overrides | 19 -- .../deb-utopic/mysql-community-test.install | 20 -- .../deb-utopic/mysql-community-test.links | 17 -- .../mysql-community-test.lintian-overrides | 19 -- packaging/deb-utopic/mysql-server.install | 18 -- .../deb-utopic/mysql-server.lintian-overrides | 19 -- packaging/deb-utopic/mysql-testsuite.install | 18 -- .../mysql-testsuite.lintian-overrides | 19 -- .../patches/fix-man-page-links.patch | 14 -- .../patches/fix-mtr-search-paths.patch | 13 -- .../patches/fix-mysql_install_db.patch | 43 ---- packaging/deb-utopic/patches/series | 18 -- packaging/deb-utopic/rules | 135 ------------ packaging/deb-utopic/source/format | 1 - packaging/deb-utopic/source/include-binaries | 34 ---- packaging/deb-utopic/watch | 2 - packaging/deb-vivid/changelog | 131 ------------ packaging/deb-vivid/compat | 1 - packaging/deb-vivid/control | 192 ------------------ packaging/deb-vivid/copyright | 41 ---- packaging/deb-vivid/extra/apparmor-profile | 47 ----- packaging/deb-vivid/extra/my.cnf.fallback | 25 --- packaging/deb-vivid/extra/mysql-systemd-start | 84 -------- packaging/deb-vivid/extra/mysql.cnf | 26 --- packaging/deb-vivid/extra/mysql.conf.cnf | 22 -- packaging/deb-vivid/extra/mysql_embedded.1 | 1 - packaging/deb-vivid/extra/mysqld.cnf | 48 ----- .../deb-vivid/libmysqlclient-dev.install | 29 --- .../libmysqlclient-dev.lintian-overrides | 21 -- packaging/deb-vivid/libmysqlclient18.install | 19 -- .../libmysqlclient18.lintian-overrides | 21 -- packaging/deb-vivid/libmysqld-dev.install | 20 -- .../deb-vivid/libmysqld-dev.lintian-overrides | 19 -- packaging/deb-vivid/mysql-client.install | 18 -- .../deb-vivid/mysql-client.lintian-overrides | 19 -- packaging/deb-vivid/mysql-common.dirs | 16 -- packaging/deb-vivid/mysql-common.install | 32 --- .../deb-vivid/mysql-common.lintian-overrides | 19 -- packaging/deb-vivid/mysql-common.postinst | 25 --- packaging/deb-vivid/mysql-common.postrm | 25 --- .../deb-vivid/mysql-community-bench.install | 19 -- .../mysql-community-bench.lintian-overrides | 19 -- .../deb-vivid/mysql-community-client.install | 56 ----- .../mysql-community-client.lintian-overrides | 21 -- .../deb-vivid/mysql-community-server.config | 88 -------- .../deb-vivid/mysql-community-server.dirs | 19 -- .../deb-vivid/mysql-community-server.install | 94 --------- .../mysql-community-server.lintian-overrides | 23 --- .../mysql-community-server.mysql.init | 192 ------------------ .../mysql-community-server.mysql.service | 33 --- .../deb-vivid/mysql-community-server.postinst | 95 --------- .../deb-vivid/mysql-community-server.postrm | 155 -------------- .../deb-vivid/mysql-community-server.preinst | 123 ----------- .../deb-vivid/mysql-community-server.prerm | 24 --- .../mysql-community-server.templates | 33 --- .../deb-vivid/mysql-community-source.install | 21 -- .../mysql-community-source.lintian-overrides | 19 -- .../deb-vivid/mysql-community-test.install | 20 -- .../deb-vivid/mysql-community-test.links | 17 -- .../mysql-community-test.lintian-overrides | 19 -- packaging/deb-vivid/mysql-server.install | 18 -- .../deb-vivid/mysql-server.lintian-overrides | 19 -- packaging/deb-vivid/mysql-testsuite.install | 18 -- .../mysql-testsuite.lintian-overrides | 19 -- .../patches/fix-man-page-links.patch | 14 -- .../patches/fix-mtr-search-paths.patch | 13 -- .../patches/fix-mysql_install_db.patch | 43 ---- packaging/deb-vivid/patches/series | 18 -- packaging/deb-vivid/rules | 137 ------------- packaging/deb-vivid/source/format | 1 - packaging/deb-vivid/source/include-binaries | 34 ---- packaging/deb-vivid/watch | 2 - packaging/deb-wheezy/changelog | 82 -------- packaging/deb-wheezy/compat | 1 - packaging/deb-wheezy/control | 188 ----------------- packaging/deb-wheezy/copyright | 41 ---- packaging/deb-wheezy/extra/my.cnf | 57 ------ packaging/deb-wheezy/extra/mysql_embedded.1 | 1 - packaging/deb-wheezy/libmysqlclient-dev.dirs | 17 -- .../deb-wheezy/libmysqlclient-dev.install | 29 --- .../libmysqlclient-dev.lintian-overrides | 21 -- packaging/deb-wheezy/libmysqlclient18.install | 19 -- .../libmysqlclient18.lintian-overrides | 21 -- packaging/deb-wheezy/libmysqld-dev.install | 20 -- .../libmysqld-dev.lintian-overrides | 19 -- packaging/deb-wheezy/mysql-client.install | 18 -- .../deb-wheezy/mysql-client.lintian-overrides | 19 -- packaging/deb-wheezy/mysql-common.dirs | 16 -- packaging/deb-wheezy/mysql-common.install | 29 --- .../deb-wheezy/mysql-common.lintian-overrides | 19 -- .../deb-wheezy/mysql-community-bench.dirs | 17 -- .../deb-wheezy/mysql-community-bench.install | 19 -- .../mysql-community-bench.lintian-overrides | 19 -- .../deb-wheezy/mysql-community-client.install | 60 ------ .../mysql-community-client.lintian-overrides | 21 -- .../deb-wheezy/mysql-community-server.config | 88 -------- .../deb-wheezy/mysql-community-server.dirs | 19 -- .../deb-wheezy/mysql-community-server.install | 84 -------- .../mysql-community-server.lintian-overrides | 23 --- .../mysql-community-server.mysql.init | 190 ----------------- .../mysql-community-server.postinst | 102 ---------- .../deb-wheezy/mysql-community-server.postrm | 165 --------------- .../deb-wheezy/mysql-community-server.preinst | 131 ------------ .../deb-wheezy/mysql-community-server.prerm | 24 --- .../mysql-community-server.templates | 34 ---- .../deb-wheezy/mysql-community-source.install | 20 -- .../mysql-community-source.lintian-overrides | 19 -- .../deb-wheezy/mysql-community-test.dirs | 16 -- .../deb-wheezy/mysql-community-test.install | 20 -- .../deb-wheezy/mysql-community-test.links | 17 -- .../mysql-community-test.lintian-overrides | 19 -- packaging/deb-wheezy/mysql-server.install | 18 -- .../deb-wheezy/mysql-server.lintian-overrides | 19 -- packaging/deb-wheezy/mysql-testsuite.install | 18 -- .../mysql-testsuite.lintian-overrides | 19 -- .../patches/fix-man-page-links.patch | 14 -- .../patches/fix-mtr-search-paths.patch | 13 -- .../patches/fix-mysql_install_db.patch | 43 ---- packaging/deb-wheezy/patches/series | 18 -- packaging/deb-wheezy/rules | 132 ------------ packaging/deb-wheezy/source/format | 1 - packaging/deb-wheezy/source/include-binaries | 35 ---- packaging/deb-wheezy/source/lintian-overrides | 18 -- packaging/deb-wheezy/watch | 2 - packaging/deb-wily/changelog | 137 ------------- packaging/deb-wily/compat | 1 - packaging/deb-wily/control | 192 ------------------ packaging/deb-wily/copyright | 41 ---- packaging/deb-wily/extra/apparmor-profile | 47 ----- packaging/deb-wily/extra/my.cnf.fallback | 25 --- packaging/deb-wily/extra/mysql-systemd-start | 84 -------- packaging/deb-wily/extra/mysql.cnf | 26 --- packaging/deb-wily/extra/mysql.conf.cnf | 22 -- packaging/deb-wily/extra/mysql_embedded.1 | 1 - packaging/deb-wily/extra/mysqld.cnf | 48 ----- packaging/deb-wily/libmysqlclient-dev.install | 29 --- .../libmysqlclient-dev.lintian-overrides | 21 -- packaging/deb-wily/libmysqlclient18.install | 19 -- .../libmysqlclient18.lintian-overrides | 21 -- packaging/deb-wily/libmysqld-dev.install | 20 -- .../deb-wily/libmysqld-dev.lintian-overrides | 19 -- packaging/deb-wily/mysql-client.install | 18 -- .../deb-wily/mysql-client.lintian-overrides | 19 -- packaging/deb-wily/mysql-common.dirs | 16 -- packaging/deb-wily/mysql-common.install | 32 --- .../deb-wily/mysql-common.lintian-overrides | 19 -- packaging/deb-wily/mysql-common.postinst | 25 --- packaging/deb-wily/mysql-common.postrm | 25 --- .../deb-wily/mysql-community-bench.install | 19 -- .../mysql-community-bench.lintian-overrides | 19 -- .../deb-wily/mysql-community-client.install | 56 ----- .../mysql-community-client.lintian-overrides | 21 -- .../deb-wily/mysql-community-server.config | 88 -------- .../deb-wily/mysql-community-server.dirs | 19 -- .../deb-wily/mysql-community-server.install | 94 --------- .../mysql-community-server.lintian-overrides | 23 --- .../mysql-community-server.mysql.init | 192 ------------------ .../mysql-community-server.mysql.service | 33 --- .../deb-wily/mysql-community-server.postinst | 95 --------- .../deb-wily/mysql-community-server.postrm | 155 -------------- .../deb-wily/mysql-community-server.preinst | 123 ----------- .../deb-wily/mysql-community-server.prerm | 24 --- .../deb-wily/mysql-community-server.templates | 33 --- .../deb-wily/mysql-community-source.install | 21 -- .../mysql-community-source.lintian-overrides | 19 -- .../deb-wily/mysql-community-test.install | 20 -- packaging/deb-wily/mysql-community-test.links | 17 -- .../mysql-community-test.lintian-overrides | 19 -- packaging/deb-wily/mysql-server.install | 18 -- .../deb-wily/mysql-server.lintian-overrides | 19 -- packaging/deb-wily/mysql-testsuite.install | 18 -- .../mysql-testsuite.lintian-overrides | 19 -- .../deb-wily/patches/fix-man-page-links.patch | 14 -- .../patches/fix-mtr-search-paths.patch | 13 -- .../patches/fix-mysql_install_db.patch | 43 ---- packaging/deb-wily/patches/series | 18 -- packaging/deb-wily/rules | 137 ------------- packaging/deb-wily/source/format | 1 - packaging/deb-wily/source/include-binaries | 34 ---- packaging/deb-wily/watch | 2 - packaging/deb-xenial/changelog | 143 ------------- packaging/deb-xenial/compat | 1 - packaging/deb-xenial/control | 192 ------------------ packaging/deb-xenial/copyright | 41 ---- packaging/deb-xenial/extra/apparmor-profile | 47 ----- packaging/deb-xenial/extra/my.cnf.fallback | 25 --- .../deb-xenial/extra/mysql-systemd-start | 84 -------- packaging/deb-xenial/extra/mysql.cnf | 26 --- packaging/deb-xenial/extra/mysql.conf.cnf | 22 -- packaging/deb-xenial/extra/mysql_embedded.1 | 1 - packaging/deb-xenial/extra/mysqld.cnf | 48 ----- .../deb-xenial/libmysqlclient-dev.install | 29 --- .../libmysqlclient-dev.lintian-overrides | 21 -- packaging/deb-xenial/libmysqlclient18.install | 19 -- .../libmysqlclient18.lintian-overrides | 21 -- packaging/deb-xenial/libmysqld-dev.install | 20 -- .../libmysqld-dev.lintian-overrides | 19 -- packaging/deb-xenial/mysql-client.install | 18 -- .../deb-xenial/mysql-client.lintian-overrides | 19 -- packaging/deb-xenial/mysql-common.dirs | 16 -- packaging/deb-xenial/mysql-common.install | 32 --- .../deb-xenial/mysql-common.lintian-overrides | 19 -- packaging/deb-xenial/mysql-common.postinst | 25 --- packaging/deb-xenial/mysql-common.postrm | 25 --- .../deb-xenial/mysql-community-bench.install | 19 -- .../mysql-community-bench.lintian-overrides | 19 -- .../deb-xenial/mysql-community-client.install | 56 ----- .../mysql-community-client.lintian-overrides | 21 -- .../deb-xenial/mysql-community-server.config | 88 -------- .../deb-xenial/mysql-community-server.dirs | 19 -- .../deb-xenial/mysql-community-server.install | 94 --------- .../mysql-community-server.lintian-overrides | 23 --- .../mysql-community-server.mysql.init | 192 ------------------ .../mysql-community-server.mysql.service | 33 --- .../mysql-community-server.postinst | 95 --------- .../deb-xenial/mysql-community-server.postrm | 155 -------------- .../deb-xenial/mysql-community-server.preinst | 123 ----------- .../deb-xenial/mysql-community-server.prerm | 24 --- .../mysql-community-server.templates | 33 --- .../deb-xenial/mysql-community-source.install | 21 -- .../mysql-community-source.lintian-overrides | 19 -- .../deb-xenial/mysql-community-test.install | 20 -- .../deb-xenial/mysql-community-test.links | 17 -- .../mysql-community-test.lintian-overrides | 19 -- packaging/deb-xenial/mysql-server.install | 18 -- .../deb-xenial/mysql-server.lintian-overrides | 19 -- packaging/deb-xenial/mysql-testsuite.install | 18 -- .../mysql-testsuite.lintian-overrides | 19 -- .../patches/fix-man-page-links.patch | 14 -- .../patches/fix-mtr-search-paths.patch | 13 -- .../patches/fix-mysql_install_db.patch | 43 ---- packaging/deb-xenial/patches/series | 18 -- packaging/deb-xenial/rules | 137 ------------- packaging/deb-xenial/source/format | 1 - packaging/deb-xenial/source/include-binaries | 34 ---- packaging/deb-xenial/watch | 2 - 424 files changed, 17527 deletions(-) delete mode 100644 packaging/deb-jessie/changelog delete mode 100644 packaging/deb-jessie/compat delete mode 100644 packaging/deb-jessie/control delete mode 100644 packaging/deb-jessie/copyright delete mode 100644 packaging/deb-jessie/extra/my.cnf delete mode 100644 packaging/deb-jessie/extra/mysql-systemd-start delete mode 100644 packaging/deb-jessie/extra/mysql_embedded.1 delete mode 100644 packaging/deb-jessie/libmysqlclient-dev.dirs delete mode 100644 packaging/deb-jessie/libmysqlclient-dev.install delete mode 100644 packaging/deb-jessie/libmysqlclient-dev.lintian-overrides delete mode 100644 packaging/deb-jessie/libmysqlclient18.install delete mode 100644 packaging/deb-jessie/libmysqlclient18.lintian-overrides delete mode 100644 packaging/deb-jessie/libmysqld-dev.install delete mode 100644 packaging/deb-jessie/libmysqld-dev.lintian-overrides delete mode 100644 packaging/deb-jessie/mysql-client.install delete mode 100644 packaging/deb-jessie/mysql-client.lintian-overrides delete mode 100644 packaging/deb-jessie/mysql-common.dirs delete mode 100644 packaging/deb-jessie/mysql-common.install delete mode 100644 packaging/deb-jessie/mysql-common.lintian-overrides delete mode 100644 packaging/deb-jessie/mysql-community-bench.dirs delete mode 100644 packaging/deb-jessie/mysql-community-bench.install delete mode 100644 packaging/deb-jessie/mysql-community-bench.lintian-overrides delete mode 100644 packaging/deb-jessie/mysql-community-client.install delete mode 100644 packaging/deb-jessie/mysql-community-client.lintian-overrides delete mode 100755 packaging/deb-jessie/mysql-community-server.config delete mode 100644 packaging/deb-jessie/mysql-community-server.dirs delete mode 100644 packaging/deb-jessie/mysql-community-server.install delete mode 100644 packaging/deb-jessie/mysql-community-server.lintian-overrides delete mode 100755 packaging/deb-jessie/mysql-community-server.mysql.init delete mode 100644 packaging/deb-jessie/mysql-community-server.mysql.service delete mode 100755 packaging/deb-jessie/mysql-community-server.postinst delete mode 100755 packaging/deb-jessie/mysql-community-server.postrm delete mode 100755 packaging/deb-jessie/mysql-community-server.preinst delete mode 100755 packaging/deb-jessie/mysql-community-server.prerm delete mode 100644 packaging/deb-jessie/mysql-community-server.templates delete mode 100644 packaging/deb-jessie/mysql-community-source.install delete mode 100644 packaging/deb-jessie/mysql-community-source.lintian-overrides delete mode 100644 packaging/deb-jessie/mysql-community-test.dirs delete mode 100644 packaging/deb-jessie/mysql-community-test.install delete mode 100644 packaging/deb-jessie/mysql-community-test.links delete mode 100644 packaging/deb-jessie/mysql-community-test.lintian-overrides delete mode 100644 packaging/deb-jessie/mysql-server.install delete mode 100644 packaging/deb-jessie/mysql-server.lintian-overrides delete mode 100644 packaging/deb-jessie/mysql-testsuite.install delete mode 100644 packaging/deb-jessie/mysql-testsuite.lintian-overrides delete mode 100644 packaging/deb-jessie/patches/fix-man-page-links.patch delete mode 100644 packaging/deb-jessie/patches/fix-mtr-search-paths.patch delete mode 100644 packaging/deb-jessie/patches/fix-mysql_install_db.patch delete mode 100644 packaging/deb-jessie/patches/series delete mode 100755 packaging/deb-jessie/rules delete mode 100644 packaging/deb-jessie/source/format delete mode 100644 packaging/deb-jessie/source/include-binaries delete mode 100644 packaging/deb-jessie/source/lintian-overrides delete mode 100644 packaging/deb-jessie/watch delete mode 100644 packaging/deb-precise/changelog delete mode 100644 packaging/deb-precise/compat delete mode 100644 packaging/deb-precise/control delete mode 100644 packaging/deb-precise/copyright delete mode 100644 packaging/deb-precise/extra/apparmor-profile delete mode 100644 packaging/deb-precise/extra/my.cnf delete mode 100644 packaging/deb-precise/extra/mysql_embedded.1 delete mode 100644 packaging/deb-precise/libmysqlclient-dev.dirs delete mode 100644 packaging/deb-precise/libmysqlclient-dev.install delete mode 100644 packaging/deb-precise/libmysqlclient-dev.lintian-overrides delete mode 100644 packaging/deb-precise/libmysqlclient18.install delete mode 100644 packaging/deb-precise/libmysqlclient18.lintian-overrides delete mode 100644 packaging/deb-precise/libmysqld-dev.install delete mode 100644 packaging/deb-precise/libmysqld-dev.lintian-overrides delete mode 100644 packaging/deb-precise/mysql-client.install delete mode 100644 packaging/deb-precise/mysql-client.lintian-overrides delete mode 100644 packaging/deb-precise/mysql-common.dirs delete mode 100644 packaging/deb-precise/mysql-common.install delete mode 100644 packaging/deb-precise/mysql-common.lintian-overrides delete mode 100644 packaging/deb-precise/mysql-community-bench.dirs delete mode 100644 packaging/deb-precise/mysql-community-bench.install delete mode 100644 packaging/deb-precise/mysql-community-bench.lintian-overrides delete mode 100644 packaging/deb-precise/mysql-community-client.install delete mode 100644 packaging/deb-precise/mysql-community-client.lintian-overrides delete mode 100755 packaging/deb-precise/mysql-community-server.config delete mode 100644 packaging/deb-precise/mysql-community-server.dirs delete mode 100644 packaging/deb-precise/mysql-community-server.install delete mode 100644 packaging/deb-precise/mysql-community-server.lintian-overrides delete mode 100755 packaging/deb-precise/mysql-community-server.mysql.init delete mode 100755 packaging/deb-precise/mysql-community-server.postinst delete mode 100755 packaging/deb-precise/mysql-community-server.postrm delete mode 100755 packaging/deb-precise/mysql-community-server.preinst delete mode 100755 packaging/deb-precise/mysql-community-server.prerm delete mode 100644 packaging/deb-precise/mysql-community-server.templates delete mode 100644 packaging/deb-precise/mysql-community-source.install delete mode 100644 packaging/deb-precise/mysql-community-source.lintian-overrides delete mode 100644 packaging/deb-precise/mysql-community-test.dirs delete mode 100644 packaging/deb-precise/mysql-community-test.install delete mode 100644 packaging/deb-precise/mysql-community-test.links delete mode 100644 packaging/deb-precise/mysql-community-test.lintian-overrides delete mode 100644 packaging/deb-precise/mysql-server.install delete mode 100644 packaging/deb-precise/mysql-server.lintian-overrides delete mode 100644 packaging/deb-precise/mysql-testsuite.install delete mode 100644 packaging/deb-precise/mysql-testsuite.lintian-overrides delete mode 100644 packaging/deb-precise/patches/fix-man-page-links.patch delete mode 100644 packaging/deb-precise/patches/fix-mtr-search-paths.patch delete mode 100644 packaging/deb-precise/patches/fix-mysql_install_db.patch delete mode 100644 packaging/deb-precise/patches/series delete mode 100755 packaging/deb-precise/rules delete mode 100644 packaging/deb-precise/source/format delete mode 100644 packaging/deb-precise/source/include-binaries delete mode 100644 packaging/deb-precise/watch delete mode 100644 packaging/deb-trusty/changelog delete mode 100644 packaging/deb-trusty/compat delete mode 100644 packaging/deb-trusty/control delete mode 100644 packaging/deb-trusty/copyright delete mode 100644 packaging/deb-trusty/extra/apparmor-profile delete mode 100644 packaging/deb-trusty/extra/my.cnf delete mode 100644 packaging/deb-trusty/extra/mysql_embedded.1 delete mode 100644 packaging/deb-trusty/libmysqlclient-dev.install delete mode 100644 packaging/deb-trusty/libmysqlclient-dev.lintian-overrides delete mode 100644 packaging/deb-trusty/libmysqlclient18.install delete mode 100644 packaging/deb-trusty/libmysqlclient18.lintian-overrides delete mode 100644 packaging/deb-trusty/libmysqld-dev.install delete mode 100644 packaging/deb-trusty/libmysqld-dev.lintian-overrides delete mode 100644 packaging/deb-trusty/mysql-client.install delete mode 100644 packaging/deb-trusty/mysql-client.lintian-overrides delete mode 100644 packaging/deb-trusty/mysql-common.dirs delete mode 100644 packaging/deb-trusty/mysql-common.install delete mode 100644 packaging/deb-trusty/mysql-common.lintian-overrides delete mode 100644 packaging/deb-trusty/mysql-community-bench.install delete mode 100644 packaging/deb-trusty/mysql-community-bench.lintian-overrides delete mode 100644 packaging/deb-trusty/mysql-community-client.install delete mode 100644 packaging/deb-trusty/mysql-community-client.lintian-overrides delete mode 100755 packaging/deb-trusty/mysql-community-server.config delete mode 100644 packaging/deb-trusty/mysql-community-server.dirs delete mode 100644 packaging/deb-trusty/mysql-community-server.install delete mode 100644 packaging/deb-trusty/mysql-community-server.lintian-overrides delete mode 100755 packaging/deb-trusty/mysql-community-server.mysql.init delete mode 100755 packaging/deb-trusty/mysql-community-server.postinst delete mode 100755 packaging/deb-trusty/mysql-community-server.postrm delete mode 100755 packaging/deb-trusty/mysql-community-server.preinst delete mode 100755 packaging/deb-trusty/mysql-community-server.prerm delete mode 100644 packaging/deb-trusty/mysql-community-server.templates delete mode 100644 packaging/deb-trusty/mysql-community-source.install delete mode 100644 packaging/deb-trusty/mysql-community-source.lintian-overrides delete mode 100644 packaging/deb-trusty/mysql-community-test.install delete mode 100644 packaging/deb-trusty/mysql-community-test.links delete mode 100644 packaging/deb-trusty/mysql-community-test.lintian-overrides delete mode 100644 packaging/deb-trusty/mysql-server.install delete mode 100644 packaging/deb-trusty/mysql-server.lintian-overrides delete mode 100644 packaging/deb-trusty/mysql-testsuite.install delete mode 100644 packaging/deb-trusty/mysql-testsuite.lintian-overrides delete mode 100644 packaging/deb-trusty/patches/fix-man-page-links.patch delete mode 100644 packaging/deb-trusty/patches/fix-mtr-search-paths.patch delete mode 100644 packaging/deb-trusty/patches/fix-mysql_install_db.patch delete mode 100644 packaging/deb-trusty/patches/series delete mode 100755 packaging/deb-trusty/rules delete mode 100644 packaging/deb-trusty/source/format delete mode 100644 packaging/deb-trusty/source/include-binaries delete mode 100644 packaging/deb-trusty/watch delete mode 100644 packaging/deb-utopic/changelog delete mode 100644 packaging/deb-utopic/compat delete mode 100644 packaging/deb-utopic/control delete mode 100644 packaging/deb-utopic/copyright delete mode 100644 packaging/deb-utopic/extra/apparmor-profile delete mode 100644 packaging/deb-utopic/extra/my.cnf delete mode 100644 packaging/deb-utopic/extra/mysql_embedded.1 delete mode 100644 packaging/deb-utopic/libmysqlclient-dev.install delete mode 100644 packaging/deb-utopic/libmysqlclient-dev.lintian-overrides delete mode 100644 packaging/deb-utopic/libmysqlclient18.install delete mode 100644 packaging/deb-utopic/libmysqlclient18.lintian-overrides delete mode 100644 packaging/deb-utopic/libmysqld-dev.install delete mode 100644 packaging/deb-utopic/libmysqld-dev.lintian-overrides delete mode 100644 packaging/deb-utopic/mysql-client.install delete mode 100644 packaging/deb-utopic/mysql-client.lintian-overrides delete mode 100644 packaging/deb-utopic/mysql-common.dirs delete mode 100644 packaging/deb-utopic/mysql-common.install delete mode 100644 packaging/deb-utopic/mysql-common.lintian-overrides delete mode 100644 packaging/deb-utopic/mysql-community-bench.install delete mode 100644 packaging/deb-utopic/mysql-community-bench.lintian-overrides delete mode 100644 packaging/deb-utopic/mysql-community-client.install delete mode 100644 packaging/deb-utopic/mysql-community-client.lintian-overrides delete mode 100755 packaging/deb-utopic/mysql-community-server.config delete mode 100644 packaging/deb-utopic/mysql-community-server.dirs delete mode 100644 packaging/deb-utopic/mysql-community-server.install delete mode 100644 packaging/deb-utopic/mysql-community-server.lintian-overrides delete mode 100755 packaging/deb-utopic/mysql-community-server.mysql.init delete mode 100755 packaging/deb-utopic/mysql-community-server.postinst delete mode 100755 packaging/deb-utopic/mysql-community-server.postrm delete mode 100755 packaging/deb-utopic/mysql-community-server.preinst delete mode 100755 packaging/deb-utopic/mysql-community-server.prerm delete mode 100644 packaging/deb-utopic/mysql-community-server.templates delete mode 100644 packaging/deb-utopic/mysql-community-source.install delete mode 100644 packaging/deb-utopic/mysql-community-source.lintian-overrides delete mode 100644 packaging/deb-utopic/mysql-community-test.install delete mode 100644 packaging/deb-utopic/mysql-community-test.links delete mode 100644 packaging/deb-utopic/mysql-community-test.lintian-overrides delete mode 100644 packaging/deb-utopic/mysql-server.install delete mode 100644 packaging/deb-utopic/mysql-server.lintian-overrides delete mode 100644 packaging/deb-utopic/mysql-testsuite.install delete mode 100644 packaging/deb-utopic/mysql-testsuite.lintian-overrides delete mode 100644 packaging/deb-utopic/patches/fix-man-page-links.patch delete mode 100644 packaging/deb-utopic/patches/fix-mtr-search-paths.patch delete mode 100644 packaging/deb-utopic/patches/fix-mysql_install_db.patch delete mode 100644 packaging/deb-utopic/patches/series delete mode 100755 packaging/deb-utopic/rules delete mode 100644 packaging/deb-utopic/source/format delete mode 100644 packaging/deb-utopic/source/include-binaries delete mode 100644 packaging/deb-utopic/watch delete mode 100644 packaging/deb-vivid/changelog delete mode 100644 packaging/deb-vivid/compat delete mode 100644 packaging/deb-vivid/control delete mode 100644 packaging/deb-vivid/copyright delete mode 100644 packaging/deb-vivid/extra/apparmor-profile delete mode 100644 packaging/deb-vivid/extra/my.cnf.fallback delete mode 100644 packaging/deb-vivid/extra/mysql-systemd-start delete mode 100644 packaging/deb-vivid/extra/mysql.cnf delete mode 100644 packaging/deb-vivid/extra/mysql.conf.cnf delete mode 100644 packaging/deb-vivid/extra/mysql_embedded.1 delete mode 100644 packaging/deb-vivid/extra/mysqld.cnf delete mode 100644 packaging/deb-vivid/libmysqlclient-dev.install delete mode 100644 packaging/deb-vivid/libmysqlclient-dev.lintian-overrides delete mode 100644 packaging/deb-vivid/libmysqlclient18.install delete mode 100644 packaging/deb-vivid/libmysqlclient18.lintian-overrides delete mode 100644 packaging/deb-vivid/libmysqld-dev.install delete mode 100644 packaging/deb-vivid/libmysqld-dev.lintian-overrides delete mode 100644 packaging/deb-vivid/mysql-client.install delete mode 100644 packaging/deb-vivid/mysql-client.lintian-overrides delete mode 100644 packaging/deb-vivid/mysql-common.dirs delete mode 100644 packaging/deb-vivid/mysql-common.install delete mode 100644 packaging/deb-vivid/mysql-common.lintian-overrides delete mode 100644 packaging/deb-vivid/mysql-common.postinst delete mode 100644 packaging/deb-vivid/mysql-common.postrm delete mode 100644 packaging/deb-vivid/mysql-community-bench.install delete mode 100644 packaging/deb-vivid/mysql-community-bench.lintian-overrides delete mode 100644 packaging/deb-vivid/mysql-community-client.install delete mode 100644 packaging/deb-vivid/mysql-community-client.lintian-overrides delete mode 100755 packaging/deb-vivid/mysql-community-server.config delete mode 100644 packaging/deb-vivid/mysql-community-server.dirs delete mode 100644 packaging/deb-vivid/mysql-community-server.install delete mode 100644 packaging/deb-vivid/mysql-community-server.lintian-overrides delete mode 100755 packaging/deb-vivid/mysql-community-server.mysql.init delete mode 100644 packaging/deb-vivid/mysql-community-server.mysql.service delete mode 100755 packaging/deb-vivid/mysql-community-server.postinst delete mode 100755 packaging/deb-vivid/mysql-community-server.postrm delete mode 100755 packaging/deb-vivid/mysql-community-server.preinst delete mode 100755 packaging/deb-vivid/mysql-community-server.prerm delete mode 100644 packaging/deb-vivid/mysql-community-server.templates delete mode 100644 packaging/deb-vivid/mysql-community-source.install delete mode 100644 packaging/deb-vivid/mysql-community-source.lintian-overrides delete mode 100644 packaging/deb-vivid/mysql-community-test.install delete mode 100644 packaging/deb-vivid/mysql-community-test.links delete mode 100644 packaging/deb-vivid/mysql-community-test.lintian-overrides delete mode 100644 packaging/deb-vivid/mysql-server.install delete mode 100644 packaging/deb-vivid/mysql-server.lintian-overrides delete mode 100644 packaging/deb-vivid/mysql-testsuite.install delete mode 100644 packaging/deb-vivid/mysql-testsuite.lintian-overrides delete mode 100644 packaging/deb-vivid/patches/fix-man-page-links.patch delete mode 100644 packaging/deb-vivid/patches/fix-mtr-search-paths.patch delete mode 100644 packaging/deb-vivid/patches/fix-mysql_install_db.patch delete mode 100644 packaging/deb-vivid/patches/series delete mode 100755 packaging/deb-vivid/rules delete mode 100644 packaging/deb-vivid/source/format delete mode 100644 packaging/deb-vivid/source/include-binaries delete mode 100644 packaging/deb-vivid/watch delete mode 100644 packaging/deb-wheezy/changelog delete mode 100644 packaging/deb-wheezy/compat delete mode 100644 packaging/deb-wheezy/control delete mode 100644 packaging/deb-wheezy/copyright delete mode 100644 packaging/deb-wheezy/extra/my.cnf delete mode 100644 packaging/deb-wheezy/extra/mysql_embedded.1 delete mode 100644 packaging/deb-wheezy/libmysqlclient-dev.dirs delete mode 100644 packaging/deb-wheezy/libmysqlclient-dev.install delete mode 100644 packaging/deb-wheezy/libmysqlclient-dev.lintian-overrides delete mode 100644 packaging/deb-wheezy/libmysqlclient18.install delete mode 100644 packaging/deb-wheezy/libmysqlclient18.lintian-overrides delete mode 100644 packaging/deb-wheezy/libmysqld-dev.install delete mode 100644 packaging/deb-wheezy/libmysqld-dev.lintian-overrides delete mode 100644 packaging/deb-wheezy/mysql-client.install delete mode 100644 packaging/deb-wheezy/mysql-client.lintian-overrides delete mode 100644 packaging/deb-wheezy/mysql-common.dirs delete mode 100644 packaging/deb-wheezy/mysql-common.install delete mode 100644 packaging/deb-wheezy/mysql-common.lintian-overrides delete mode 100644 packaging/deb-wheezy/mysql-community-bench.dirs delete mode 100644 packaging/deb-wheezy/mysql-community-bench.install delete mode 100644 packaging/deb-wheezy/mysql-community-bench.lintian-overrides delete mode 100644 packaging/deb-wheezy/mysql-community-client.install delete mode 100644 packaging/deb-wheezy/mysql-community-client.lintian-overrides delete mode 100755 packaging/deb-wheezy/mysql-community-server.config delete mode 100644 packaging/deb-wheezy/mysql-community-server.dirs delete mode 100644 packaging/deb-wheezy/mysql-community-server.install delete mode 100644 packaging/deb-wheezy/mysql-community-server.lintian-overrides delete mode 100755 packaging/deb-wheezy/mysql-community-server.mysql.init delete mode 100755 packaging/deb-wheezy/mysql-community-server.postinst delete mode 100755 packaging/deb-wheezy/mysql-community-server.postrm delete mode 100755 packaging/deb-wheezy/mysql-community-server.preinst delete mode 100755 packaging/deb-wheezy/mysql-community-server.prerm delete mode 100644 packaging/deb-wheezy/mysql-community-server.templates delete mode 100644 packaging/deb-wheezy/mysql-community-source.install delete mode 100644 packaging/deb-wheezy/mysql-community-source.lintian-overrides delete mode 100644 packaging/deb-wheezy/mysql-community-test.dirs delete mode 100644 packaging/deb-wheezy/mysql-community-test.install delete mode 100644 packaging/deb-wheezy/mysql-community-test.links delete mode 100644 packaging/deb-wheezy/mysql-community-test.lintian-overrides delete mode 100644 packaging/deb-wheezy/mysql-server.install delete mode 100644 packaging/deb-wheezy/mysql-server.lintian-overrides delete mode 100644 packaging/deb-wheezy/mysql-testsuite.install delete mode 100644 packaging/deb-wheezy/mysql-testsuite.lintian-overrides delete mode 100644 packaging/deb-wheezy/patches/fix-man-page-links.patch delete mode 100644 packaging/deb-wheezy/patches/fix-mtr-search-paths.patch delete mode 100644 packaging/deb-wheezy/patches/fix-mysql_install_db.patch delete mode 100644 packaging/deb-wheezy/patches/series delete mode 100755 packaging/deb-wheezy/rules delete mode 100644 packaging/deb-wheezy/source/format delete mode 100644 packaging/deb-wheezy/source/include-binaries delete mode 100644 packaging/deb-wheezy/source/lintian-overrides delete mode 100644 packaging/deb-wheezy/watch delete mode 100644 packaging/deb-wily/changelog delete mode 100644 packaging/deb-wily/compat delete mode 100644 packaging/deb-wily/control delete mode 100644 packaging/deb-wily/copyright delete mode 100644 packaging/deb-wily/extra/apparmor-profile delete mode 100644 packaging/deb-wily/extra/my.cnf.fallback delete mode 100644 packaging/deb-wily/extra/mysql-systemd-start delete mode 100644 packaging/deb-wily/extra/mysql.cnf delete mode 100644 packaging/deb-wily/extra/mysql.conf.cnf delete mode 100644 packaging/deb-wily/extra/mysql_embedded.1 delete mode 100644 packaging/deb-wily/extra/mysqld.cnf delete mode 100644 packaging/deb-wily/libmysqlclient-dev.install delete mode 100644 packaging/deb-wily/libmysqlclient-dev.lintian-overrides delete mode 100644 packaging/deb-wily/libmysqlclient18.install delete mode 100644 packaging/deb-wily/libmysqlclient18.lintian-overrides delete mode 100644 packaging/deb-wily/libmysqld-dev.install delete mode 100644 packaging/deb-wily/libmysqld-dev.lintian-overrides delete mode 100644 packaging/deb-wily/mysql-client.install delete mode 100644 packaging/deb-wily/mysql-client.lintian-overrides delete mode 100644 packaging/deb-wily/mysql-common.dirs delete mode 100644 packaging/deb-wily/mysql-common.install delete mode 100644 packaging/deb-wily/mysql-common.lintian-overrides delete mode 100644 packaging/deb-wily/mysql-common.postinst delete mode 100644 packaging/deb-wily/mysql-common.postrm delete mode 100644 packaging/deb-wily/mysql-community-bench.install delete mode 100644 packaging/deb-wily/mysql-community-bench.lintian-overrides delete mode 100644 packaging/deb-wily/mysql-community-client.install delete mode 100644 packaging/deb-wily/mysql-community-client.lintian-overrides delete mode 100755 packaging/deb-wily/mysql-community-server.config delete mode 100644 packaging/deb-wily/mysql-community-server.dirs delete mode 100644 packaging/deb-wily/mysql-community-server.install delete mode 100644 packaging/deb-wily/mysql-community-server.lintian-overrides delete mode 100755 packaging/deb-wily/mysql-community-server.mysql.init delete mode 100644 packaging/deb-wily/mysql-community-server.mysql.service delete mode 100755 packaging/deb-wily/mysql-community-server.postinst delete mode 100755 packaging/deb-wily/mysql-community-server.postrm delete mode 100755 packaging/deb-wily/mysql-community-server.preinst delete mode 100755 packaging/deb-wily/mysql-community-server.prerm delete mode 100644 packaging/deb-wily/mysql-community-server.templates delete mode 100644 packaging/deb-wily/mysql-community-source.install delete mode 100644 packaging/deb-wily/mysql-community-source.lintian-overrides delete mode 100644 packaging/deb-wily/mysql-community-test.install delete mode 100644 packaging/deb-wily/mysql-community-test.links delete mode 100644 packaging/deb-wily/mysql-community-test.lintian-overrides delete mode 100644 packaging/deb-wily/mysql-server.install delete mode 100644 packaging/deb-wily/mysql-server.lintian-overrides delete mode 100644 packaging/deb-wily/mysql-testsuite.install delete mode 100644 packaging/deb-wily/mysql-testsuite.lintian-overrides delete mode 100644 packaging/deb-wily/patches/fix-man-page-links.patch delete mode 100644 packaging/deb-wily/patches/fix-mtr-search-paths.patch delete mode 100644 packaging/deb-wily/patches/fix-mysql_install_db.patch delete mode 100644 packaging/deb-wily/patches/series delete mode 100755 packaging/deb-wily/rules delete mode 100644 packaging/deb-wily/source/format delete mode 100644 packaging/deb-wily/source/include-binaries delete mode 100644 packaging/deb-wily/watch delete mode 100644 packaging/deb-xenial/changelog delete mode 100644 packaging/deb-xenial/compat delete mode 100644 packaging/deb-xenial/control delete mode 100644 packaging/deb-xenial/copyright delete mode 100644 packaging/deb-xenial/extra/apparmor-profile delete mode 100644 packaging/deb-xenial/extra/my.cnf.fallback delete mode 100644 packaging/deb-xenial/extra/mysql-systemd-start delete mode 100644 packaging/deb-xenial/extra/mysql.cnf delete mode 100644 packaging/deb-xenial/extra/mysql.conf.cnf delete mode 100644 packaging/deb-xenial/extra/mysql_embedded.1 delete mode 100644 packaging/deb-xenial/extra/mysqld.cnf delete mode 100644 packaging/deb-xenial/libmysqlclient-dev.install delete mode 100644 packaging/deb-xenial/libmysqlclient-dev.lintian-overrides delete mode 100644 packaging/deb-xenial/libmysqlclient18.install delete mode 100644 packaging/deb-xenial/libmysqlclient18.lintian-overrides delete mode 100644 packaging/deb-xenial/libmysqld-dev.install delete mode 100644 packaging/deb-xenial/libmysqld-dev.lintian-overrides delete mode 100644 packaging/deb-xenial/mysql-client.install delete mode 100644 packaging/deb-xenial/mysql-client.lintian-overrides delete mode 100644 packaging/deb-xenial/mysql-common.dirs delete mode 100644 packaging/deb-xenial/mysql-common.install delete mode 100644 packaging/deb-xenial/mysql-common.lintian-overrides delete mode 100644 packaging/deb-xenial/mysql-common.postinst delete mode 100644 packaging/deb-xenial/mysql-common.postrm delete mode 100644 packaging/deb-xenial/mysql-community-bench.install delete mode 100644 packaging/deb-xenial/mysql-community-bench.lintian-overrides delete mode 100644 packaging/deb-xenial/mysql-community-client.install delete mode 100644 packaging/deb-xenial/mysql-community-client.lintian-overrides delete mode 100755 packaging/deb-xenial/mysql-community-server.config delete mode 100644 packaging/deb-xenial/mysql-community-server.dirs delete mode 100644 packaging/deb-xenial/mysql-community-server.install delete mode 100644 packaging/deb-xenial/mysql-community-server.lintian-overrides delete mode 100755 packaging/deb-xenial/mysql-community-server.mysql.init delete mode 100644 packaging/deb-xenial/mysql-community-server.mysql.service delete mode 100755 packaging/deb-xenial/mysql-community-server.postinst delete mode 100755 packaging/deb-xenial/mysql-community-server.postrm delete mode 100755 packaging/deb-xenial/mysql-community-server.preinst delete mode 100755 packaging/deb-xenial/mysql-community-server.prerm delete mode 100644 packaging/deb-xenial/mysql-community-server.templates delete mode 100644 packaging/deb-xenial/mysql-community-source.install delete mode 100644 packaging/deb-xenial/mysql-community-source.lintian-overrides delete mode 100644 packaging/deb-xenial/mysql-community-test.install delete mode 100644 packaging/deb-xenial/mysql-community-test.links delete mode 100644 packaging/deb-xenial/mysql-community-test.lintian-overrides delete mode 100644 packaging/deb-xenial/mysql-server.install delete mode 100644 packaging/deb-xenial/mysql-server.lintian-overrides delete mode 100644 packaging/deb-xenial/mysql-testsuite.install delete mode 100644 packaging/deb-xenial/mysql-testsuite.lintian-overrides delete mode 100644 packaging/deb-xenial/patches/fix-man-page-links.patch delete mode 100644 packaging/deb-xenial/patches/fix-mtr-search-paths.patch delete mode 100644 packaging/deb-xenial/patches/fix-mysql_install_db.patch delete mode 100644 packaging/deb-xenial/patches/series delete mode 100755 packaging/deb-xenial/rules delete mode 100644 packaging/deb-xenial/source/format delete mode 100644 packaging/deb-xenial/source/include-binaries delete mode 100644 packaging/deb-xenial/watch diff --git a/packaging/deb-jessie/changelog b/packaging/deb-jessie/changelog deleted file mode 100644 index 6c788508608e..000000000000 --- a/packaging/deb-jessie/changelog +++ /dev/null @@ -1,95 +0,0 @@ -mysql-community (5.6.26-1debian8) jessie; urgency=low - - * new upstream release - * mysql-commercial-server now depends on perl, psmisc - mysql-commercial-test now depends on python, libmysqlclient-dev - (Closes: #20893836) - - -- Akhil Mohan Thu, 18 Jun 2015 16:34:10 +0530 - -mysql-community (5.6.25-2debian8) jessie; urgency=low - - * new upstream release - * added systemd support - - -- Akhil Mohan Fri, 29 May 2015 17:07:34 +0530 - -mysql-community (5.6.24-2debian8) jessie; urgency=low - - * new upstream release - - -- Akhil Mohan Mon, 14 Apr 2015 16:40:14 +0530 - -mysql-community (5.6.24-1debian7) wheezy; urgency=low - - * new upstream release - - -- Akhil Mohan Mon, 16 Feb 2015 15:45:09 +0530 - -mysql-community (5.6.23-1debian7) wheezy; urgency=low - - * new upstream release - * mysql-community-server now recommends mysql-client - * removed template install-test-db; not installed by default - * d/compat incremented to 9 from 8 - * d/control updated to build depend on debhelper 9 - * added d/*.lintian-overrides and d/source/lintian-overrides - * d/rules updated to reflect correct file permissions - - -- Akhil Mohan Wed, 31 Dec 2014 10:51:07 +0530 - -mysql-community (5.6.22-1debian7) wheezy; urgency=low - - * new upstream release - * fixed d/*server.postinst to allow dropping test db without - setting root password - * init script will now run my_i_db if data dir is not present or empty - - -- Akhil Mohan Wed, 24 Sep 2014 14:48:07 +0530 - -mysql-community (5.6.21-1debian7) wheezy; urgency=low - - * new upstream release - * updated d/rules to increment -j8 as make option - * updated d/source/include-binaries to add mysql_no_login plugin - * updated CMake option WITH_EXTRA_CHARSETS from complex to all - - -- Akhil Mohan Wed, 20 Aug 2014 19:12:30 +0530 - -mysql-community (5.6.20-1debian7) wheezy; urgency=low - - * new upstream release - * added fakeroot as build-dep in d/control - * added d/*.dirs for bench, dev and test pkg - * updated d/rules to make compilation verbose - * removed default CFLAGS, CXXFLAGS in d/rules - * added patch for testsuite search paths under d/patches - * modified cmake option for testsuite in d/rules - * updated patch d/fix-mysql_install_db.patch - * enabled two patches in d/patches/series - * removed extra permissions check in d/rules when fixed in source - * modified d/mysql-*-server.postinst to stop removing /usr/my.cnf - * modified d/*-test.* for updated location of testsuite - * updated d/{mysql-*-server.install,rules} to include debug plugins - * updated d/rules to remove storage engine cmake options - * modified data dir permission in d/*server.{pre,post}inst - * updated d/source/include-binaries to add debug plugins - * updated d/rules to rename debug plugins - - -- Akhil Mohan Wed, 02 Jul 2014 17:45:30 +0530 - -mysql-community (5.6.19-1debian7) wheezy; urgency=low - - * new upstream release - * d/rules updated to rid of files removed from source - * modified path for source tar in source pkg - * obscured actual filenames in d/source/include-binaries - * modified d/rules to handle obscured filenames - - -- Akhil Mohan Mon, 05 May 2014 15:45:10 +0530 - -mysql-community (5.6.17-1debian7) stable; urgency=low - - * new upstream release - - -- Akhil Mohan Fri, 28 Feb 2014 18:06:30 +0530 diff --git a/packaging/deb-jessie/compat b/packaging/deb-jessie/compat deleted file mode 100644 index ec635144f600..000000000000 --- a/packaging/deb-jessie/compat +++ /dev/null @@ -1 +0,0 @@ -9 diff --git a/packaging/deb-jessie/control b/packaging/deb-jessie/control deleted file mode 100644 index 7ce536d473d1..000000000000 --- a/packaging/deb-jessie/control +++ /dev/null @@ -1,188 +0,0 @@ -Source: mysql-community -Maintainer: MySQL Release Engineering -Section: database -Priority: optional -Standards-Version: 3.9.5 -Homepage: http://www.mysql.com/ -Build-Depends: debhelper (>= 9.0.0), libaio-dev[linux-any], libncurses5-dev (>= 5.0-6), perl, zlib1g-dev (>= 1:1.1.3-5), po-debconf, psmisc, bison, dh-systemd (>= 1.5), lsb-release, cmake, fakeroot, libnuma-dev - -Package: mysql-server -Architecture: any -Depends: mysql-community-server (= ${binary:Version}), ${misc:Depends} -Description: MySQL Server meta package depending on latest version - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This is a meta package that depends on the latest mysql server - package available in the repository. - -Package: mysql-community-server -Architecture: any -Pre-depends: debconf (>= 0.2.17), adduser -Depends: mysql-common (= ${binary:Version}), perl, psmisc, - ${shlibs:Depends}, ${misc:Depends} -Recommends: mysql-client (= ${binary:Version}) -Conflicts: mysql, - mysql-server-5.0, mysql-server-core-5.0, - mysql-server-5.1, mysql-server-core-5.1, - mysql-server-5.5, mysql-server-core-5.5, - mysql-server-5.6, mysql-server-core-5.6, - mysql-commercial-server -Replaces: mysql, - mysql-server-5.0, mysql-server-core-5.0, - mysql-server-5.1, mysql-server-core-5.1, - mysql-server-5.5, mysql-server-core-5.5, - mysql-server-5.6, mysql-server-core-5.6, - mysql-commercial-server -Provides: virtual-mysql-server, virtual-mysql-server-core, - mysql-server-5.6, mysql-server-core-5.6 -Description: MySQL Server - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This package includes the MySQL server binary as well as related - utilities to run and administer a MySQL server. - -Package: mysql-client -Architecture: any -Depends: mysql-community-client (= ${binary:Version}), ${misc:Depends} -Description: MySQL Client meta package depending on latest version - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This is a meta package that depends on the latest mysql client - package available in the repository. - -Package: mysql-community-client -Architecture: any -Depends: mysql-common (= ${binary:Version}), - ${shlibs:Depends}, ${misc:Depends} -Conflicts: mysql, - mysql-client-5.0, mysql-client-core-5.0, - mysql-client-5.1, mysql-client-core-5.1, - mysql-client-5.5, mysql-client-core-5.5, - mysql-client-5.6, mysql-client-core-5.6, - mysql-commercial-client -Replaces: mysql, - mysql-client-5.0, mysql-client-core-5.0, - mysql-client-5.1, mysql-client-core-5.1, - mysql-client-5.5, mysql-client-core-5.5, - mysql-client-5.6, mysql-client-core-5.6, - mysql-commercial-client -Provides: virtual-mysql-client, virtual-mysql-client-core, - mysql-client-5.6, mysql-client-core-5.6 -Description: MySQL Client - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This package contains the standard MySQL clients and - administration tools. - -Package: libmysqlclient18 -Architecture: any -Section: libs -Pre-Depends: ${misc:Pre-Depends} -Multi-Arch: same -Depends: mysql-common (= ${binary:Version}), - ${shlibs:Depends}, ${misc:Depends} -Description: MySQL shared client libraries - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This package contains the shared libraries for MySQL client - applications. - -Package: mysql-common -Architecture: any -Pre-depends: debconf (>= 0.2.17), ${misc:Pre-Depends} -Multi-Arch: foreign -Depends: ${shlibs:Depends}, ${misc:Depends} -Conflicts: mysql -Replaces: mysql, mysql-server-5.5, mysql-server-core-5.5, libmysqlclient-dev -Provides: mysql-common -Description: MySQL Common - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This package contains common files needed by MySQL client - library, MySQL database server, and MySQL embedded server. - -Package: libmysqlclient-dev -Architecture: any -Section: libdevel -Depends: libmysqlclient18 (= ${binary:Version}), - ${shlibs:Depends}, ${misc:Depends} -Description: MySQL development headers - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This package contains the development header files necessary - to develop MySQL client applications. - -Package: libmysqld-dev -Architecture: any -Section: libdevel -Depends: libmysqlclient-dev (= ${binary:Version}), - ${shlibs:Depends}, ${misc:Depends} -Description: MySQL embedded server library - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This package contains the MySQL server as an embedded library. - -Package: mysql-testsuite -Architecture: any -Depends: mysql-community-test (= ${binary:Version}), ${misc:Depends} -Description: MySQL Testsuite meta package depending on latest version - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This is a meta package that depends on the latest mysql test - package available in the repository. - -Package: mysql-community-test -Architecture: any -Depends: mysql-community-server (= ${binary:Version}), - mysql-community-client (= ${binary:Version}), python, - libmysqlclient-dev, ${shlibs:Depends}, ${misc:Depends} -Conflicts: mysql, - mysql-testsuite-5.0, mysql-testsuite-5.1, mysql-testsuite-5.5, - mysql-testsuite-5.6, mysql-commercial-test -Description: MySQL Test Run MTR - The MySQL testsuite - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This package contains the MySQL regression test suite for MySQL - database server. - -Package: mysql-community-bench -Architecture: any -Depends: mysql-community-server (= ${binary:Version}), - ${shlibs:Depends}, ${misc:Depends} -Conflicts: mysql, mysql-commercial-bench -Description: MySQL Bench - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. - -Package: mysql-community-source -Architecture: any -Depends: ${misc:Depends}, ${shlibs:Depends} -Description: MySQL source - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. diff --git a/packaging/deb-jessie/copyright b/packaging/deb-jessie/copyright deleted file mode 100644 index 482a6765ebd4..000000000000 --- a/packaging/deb-jessie/copyright +++ /dev/null @@ -1,41 +0,0 @@ -Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ -Upstream-Name: MySQL Server 5.6 -Upstream-Contact: MySQL Release Engineering -Source: http://dev.mysql.com/ - -Copyright: 2000, 2014, Oracle and/or its affiliates. All rights reserved. -License: - This is a release of MySQL, a dual-license SQL database server. - For the avoidance of doubt, this particular copy of the software - is released under the version 2 of the GNU General Public License. - MySQL is brought to you by Oracle. - . - MySQL FOSS License Exception - We want free and open source software applications under certain - licenses to be able to use specified GPL-licensed MySQL client - libraries despite the fact that not all such FOSS licenses are - compatible with version 2 of the GNU General Public License. - Therefore there are special exceptions to the terms and conditions - of the GPLv2 as applied to these client libraries, which are - identified and described in more detail in the FOSS License - Exception at - . - . - This distribution may include materials developed by third - parties. For license and attribution notices for these - materials, please refer to the documentation that accompanies - this distribution (see the "Licenses for Third-Party Components" - appendix) or view the online documentation at - . - . - GPLv2 Disclaimer - For the avoidance of doubt, except that if any license choice - other than GPL or LGPL is available it will apply instead, - Oracle elects to use only the General Public License version 2 - (GPLv2) at this time for any software where a choice of GPL - license versions is made available with the language indicating - that GPLv2 or any later version may be used, or where a choice - . - The full text of the GNU General Public License version 2 can - be found in the file - `/usr/share/mysql/doc/COPYING'. diff --git a/packaging/deb-jessie/extra/my.cnf b/packaging/deb-jessie/extra/my.cnf deleted file mode 100644 index 3a5445fac740..000000000000 --- a/packaging/deb-jessie/extra/my.cnf +++ /dev/null @@ -1,57 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# -# The MySQL Community Server configuration file. -# -# For explanations see -# http://dev.mysql.com/doc/mysql/en/server-system-variables.html - -[client] -port = 3306 -socket = /var/run/mysqld/mysqld.sock - -[mysqld_safe] -pid-file = /var/run/mysqld/mysqld.pid -socket = /var/run/mysqld/mysqld.sock -nice = 0 - -[mysqld] -user = mysql -pid-file = /var/run/mysqld/mysqld.pid -socket = /var/run/mysqld/mysqld.sock -port = 3306 -basedir = /usr -datadir = /var/lib/mysql -tmpdir = /tmp -lc-messages-dir = /usr/share/mysql -explicit_defaults_for_timestamp - -# Instead of skip-networking the default is now to listen only on -# localhost which is more compatible and is not less secure. -bind-address = 127.0.0.1 - -log-error = /var/log/mysql/error.log - -# Recommended in standard MySQL setup -sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES - -# Disabling symbolic-links is recommended to prevent assorted security risks -symbolic-links=0 - -# * IMPORTANT: Additional settings that can override those from this file! -# The files must end with '.cnf', otherwise they'll be ignored. -# -!includedir /etc/mysql/conf.d/ diff --git a/packaging/deb-jessie/extra/mysql-systemd-start b/packaging/deb-jessie/extra/mysql-systemd-start deleted file mode 100644 index 143d1753e21f..000000000000 --- a/packaging/deb-jessie/extra/mysql-systemd-start +++ /dev/null @@ -1,82 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Scripts to run by MySQL systemd service -# -# Needed argument: pre | post -# -# pre mode : try to perform sanity check for configuration, log, data -# post mode : ping server until answer is received - -pinger () { - while /bin/true ; do - sleep 1 - mysqladmin ping >/dev/null 2>&1 && break - done -} - -sanity () { - MYSQLRUN=/var/run/mysqld - MYSQLDATA=/var/lib/mysql - MYSQLLOG=/var/log/mysql - - if [ ! -d ${MYSQLDATA} -a ! -L ${MYSQLDATA} ]; - then - mkdir ${MYSQLDATA} - chown mysql:mysql ${MYSQLDATA} - chmod 750 ${MYSQLDATA} - fi - - if [ ! -d "${MYSQLDATA}/mysql" -a ! -L "${MYSQLDATA}/mysql" ]; - then - mkdir ${MYSQLDATA}/mysql - chown mysql:mysql ${MYSQLDATA}/mysql - chmod 750 ${MYSQLDATA}/mysql - fi - - if [ ! "$(ls -A ${MYSQLDATA}/mysql)" ]; - then - mysql_install_db --user=mysql > /dev/null - fi - - if [ ! -d ${MYSQLLOG} -a ! -L ${MYSQLLOG} ]; - then - mkdir ${MYSQLLOG} - chown mysql:adm ${MYSQLLOG} - chmod 750 ${MYSQLLOG} - touch ${MYSQLLOG}/error.log - chmod 640 ${MYSQLLOG}/error.log - chown mysql:adm ${MYSQLLOG}/error.log - fi - - if [ ! -d "${MYSQLRUN}" -a ! -L "${MYSQLRUN}" ]; - then - mkdir ${MYSQLRUN} - chown mysql:mysql ${MYSQLRUN} - chmod 755 ${MYSQLRUN} - fi - - if [ ! -r /etc/mysql/my.cnf ]; then - echo "MySQL configuration not found at /etc/mysql/my.cnf. Please install one using update-alternatives." - exit 1 - fi -} - -case $1 in - "pre") sanity ;; - "post") pinger ;; -esac diff --git a/packaging/deb-jessie/extra/mysql_embedded.1 b/packaging/deb-jessie/extra/mysql_embedded.1 deleted file mode 100644 index 735c4e05ae07..000000000000 --- a/packaging/deb-jessie/extra/mysql_embedded.1 +++ /dev/null @@ -1 +0,0 @@ -.so man1/mysql.1 diff --git a/packaging/deb-jessie/libmysqlclient-dev.dirs b/packaging/deb-jessie/libmysqlclient-dev.dirs deleted file mode 100644 index c287614c79c3..000000000000 --- a/packaging/deb-jessie/libmysqlclient-dev.dirs +++ /dev/null @@ -1,17 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -usr/include/mysql -usr/include/mysql/mysql diff --git a/packaging/deb-jessie/libmysqlclient-dev.install b/packaging/deb-jessie/libmysqlclient-dev.install deleted file mode 100644 index e7e98c156c39..000000000000 --- a/packaging/deb-jessie/libmysqlclient-dev.install +++ /dev/null @@ -1,29 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -usr/include/mysql/*.h -usr/include/mysql/mysql/*.h -usr/include/mysql/mysql/*.h.pp -usr/include/mysql/mysql/psi/*.h -usr/lib/*/libmysqlclient.a -usr/lib/*/libmysqlclient.so -usr/lib/*/libmysqlservices.a -usr/bin/mysql_config -usr/bin/mysql_config_editor -usr/share/man/man1/mysql_config.1 -usr/share/man/man1/mysql_config_editor.1 -# legal -usr/share/doc/libmysqlclient-dev/COPYING -usr/share/doc/libmysqlclient-dev/README diff --git a/packaging/deb-jessie/libmysqlclient-dev.lintian-overrides b/packaging/deb-jessie/libmysqlclient-dev.lintian-overrides deleted file mode 100644 index 09960eb27301..000000000000 --- a/packaging/deb-jessie/libmysqlclient-dev.lintian-overrides +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -libmysqlclient-dev: extra-license-file usr/share/doc/libmysqlclient-dev/LICENSE.mysql -libmysqlclient-dev: extra-license-file usr/share/doc/libmysqlclient-dev/COPYING.gz -libmysqlclient-dev: copyright-should-refer-to-common-license-file-for-lgpl -# Due to static linking this cannot be avoided and hence being overridden -libmysqlclient-dev: embedded-library diff --git a/packaging/deb-jessie/libmysqlclient18.install b/packaging/deb-jessie/libmysqlclient18.install deleted file mode 100644 index fe6aa56ce62c..000000000000 --- a/packaging/deb-jessie/libmysqlclient18.install +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -usr/lib/*/libmysqlclient.so.* -# legal -usr/share/doc/libmysqlclient18/COPYING -usr/share/doc/libmysqlclient18/README diff --git a/packaging/deb-jessie/libmysqlclient18.lintian-overrides b/packaging/deb-jessie/libmysqlclient18.lintian-overrides deleted file mode 100644 index 1f26511a13d0..000000000000 --- a/packaging/deb-jessie/libmysqlclient18.lintian-overrides +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -libmysqlclient18: extra-license-file usr/share/doc/libmysqlclient18/LICENSE.mysql -libmysqlclient18: extra-license-file usr/share/doc/libmysqlclient18/COPYING.gz -libmysqlclient18: copyright-should-refer-to-common-license-file-for-lgpl -# Due to static linking this cannot be avoided and hence being overridden -libmysqlclient18: embedded-library diff --git a/packaging/deb-jessie/libmysqld-dev.install b/packaging/deb-jessie/libmysqld-dev.install deleted file mode 100644 index 923f826ae5fe..000000000000 --- a/packaging/deb-jessie/libmysqld-dev.install +++ /dev/null @@ -1,20 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -usr/lib/*/libmysqld.a -usr/lib/*/libmysqld-debug.a -# legal -usr/share/doc/libmysqld-dev/COPYING -usr/share/doc/libmysqld-dev/README diff --git a/packaging/deb-jessie/libmysqld-dev.lintian-overrides b/packaging/deb-jessie/libmysqld-dev.lintian-overrides deleted file mode 100644 index 35caaeca0121..000000000000 --- a/packaging/deb-jessie/libmysqld-dev.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -libmysqld-dev: extra-license-file usr/share/doc/libmysqld-dev/LICENSE.mysql -libmysqld-dev: extra-license-file usr/share/doc/libmysqld-dev/COPYING.gz -libmysqld-dev: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-jessie/mysql-client.install b/packaging/deb-jessie/mysql-client.install deleted file mode 100644 index 13b877e7dafd..000000000000 --- a/packaging/deb-jessie/mysql-client.install +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# legal -usr/share/doc/mysql-client/COPYING -usr/share/doc/mysql-client/README diff --git a/packaging/deb-jessie/mysql-client.lintian-overrides b/packaging/deb-jessie/mysql-client.lintian-overrides deleted file mode 100644 index 5c4891c9190f..000000000000 --- a/packaging/deb-jessie/mysql-client.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-client: extra-license-file usr/share/doc/mysql-client/LICENSE.mysql -mysql-client: extra-license-file usr/share/doc/mysql-client/COPYING.gz -mysql-client: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-jessie/mysql-common.dirs b/packaging/deb-jessie/mysql-common.dirs deleted file mode 100644 index 69265ef08550..000000000000 --- a/packaging/deb-jessie/mysql-common.dirs +++ /dev/null @@ -1,16 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -etc/mysql/conf.d diff --git a/packaging/deb-jessie/mysql-common.install b/packaging/deb-jessie/mysql-common.install deleted file mode 100644 index 8a22acd42f67..000000000000 --- a/packaging/deb-jessie/mysql-common.install +++ /dev/null @@ -1,29 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -etc/mysql/my.cnf -usr/share/aclocal/mysql.m4 -usr/share/mysql/docs/INFO_SRC -usr/share/mysql/docs/INFO_BIN -usr/share/mysql/docs/ChangeLog -# localized error msgs -usr/share/mysql/*/errmsg.sys -usr/share/mysql/errmsg-utf8.txt -# charsets -usr/share/mysql/charsets/*.xml -usr/share/mysql/charsets/README -# legal -usr/share/doc/mysql-common/COPYING -usr/share/doc/mysql-common/README diff --git a/packaging/deb-jessie/mysql-common.lintian-overrides b/packaging/deb-jessie/mysql-common.lintian-overrides deleted file mode 100644 index 70ddcdf63713..000000000000 --- a/packaging/deb-jessie/mysql-common.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-common: extra-license-file usr/share/doc/mysql-common/LICENSE.mysql -mysql-common: extra-license-file usr/share/doc/mysql-common/COPYING.gz -mysql-common: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-jessie/mysql-community-bench.dirs b/packaging/deb-jessie/mysql-community-bench.dirs deleted file mode 100644 index d630d6b12bf6..000000000000 --- a/packaging/deb-jessie/mysql-community-bench.dirs +++ /dev/null @@ -1,17 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -usr/lib/mysql -usr/lib/mysql/sql-bench diff --git a/packaging/deb-jessie/mysql-community-bench.install b/packaging/deb-jessie/mysql-community-bench.install deleted file mode 100644 index 065124bd6933..000000000000 --- a/packaging/deb-jessie/mysql-community-bench.install +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -usr/lib/mysql/sql-bench/* -# legal -usr/share/doc/mysql-community-bench/COPYING -usr/share/doc/mysql-community-bench/README diff --git a/packaging/deb-jessie/mysql-community-bench.lintian-overrides b/packaging/deb-jessie/mysql-community-bench.lintian-overrides deleted file mode 100644 index 04df14ea0469..000000000000 --- a/packaging/deb-jessie/mysql-community-bench.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-community-bench: extra-license-file usr/share/doc/mysql-community-bench/LICENSE.mysql -mysql-community-bench: extra-license-file usr/share/doc/mysql-community-bench/COPYING.gz -mysql-community-bench: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-jessie/mysql-community-client.install b/packaging/deb-jessie/mysql-community-client.install deleted file mode 100644 index 46cd07d4df39..000000000000 --- a/packaging/deb-jessie/mysql-community-client.install +++ /dev/null @@ -1,60 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# binaries -usr/bin/innochecksum -usr/bin/myisam_ftdump -usr/bin/mysql -usr/bin/mysql_embedded -usr/bin/mysqlaccess -usr/bin/mysqlaccess.conf -usr/bin/mysqladmin -usr/bin/mysqlbug -usr/bin/mysqlcheck -usr/bin/mysql_client_test -usr/bin/mysql_client_test_embedded -usr/bin/mysqldump -usr/bin/mysqldumpslow -usr/bin/mysql_find_rows -usr/bin/mysql_fix_extensions -usr/bin/mysqlimport -usr/bin/mysql_plugin -usr/bin/mysqlshow -usr/bin/mysqlslap -usr/bin/mysql_waitpid -# man pages -usr/share/man/man1/innochecksum.1 -usr/share/man/man1/myisam_ftdump.1 -usr/share/man/man1/mysql.1 -usr/share/man/man1/mysql_embedded.1 -usr/share/man/man1/mysqlaccess.1 -usr/share/man/man1/mysqladmin.1 -usr/share/man/man1/mysqlbug.1 -usr/share/man/man1/mysqlcheck.1 -usr/share/man/man1/mysql_client_test.1 -usr/share/man/man1/mysql_client_test_embedded.1 -usr/share/man/man1/mysqldump.1 -usr/share/man/man1/mysqldumpslow.1 -usr/share/man/man1/mysql_find_rows.1 -usr/share/man/man1/mysql_fix_extensions.1 -usr/share/man/man1/mysqlimport.1 -usr/share/man/man1/mysqlman.1 -usr/share/man/man1/mysql_plugin.1 -usr/share/man/man1/mysqlshow.1 -usr/share/man/man1/mysqlslap.1 -usr/share/man/man1/mysql_waitpid.1 -# legal -usr/share/doc/mysql-community-client/COPYING -usr/share/doc/mysql-community-client/README diff --git a/packaging/deb-jessie/mysql-community-client.lintian-overrides b/packaging/deb-jessie/mysql-community-client.lintian-overrides deleted file mode 100644 index 589293560ee7..000000000000 --- a/packaging/deb-jessie/mysql-community-client.lintian-overrides +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-community-client: extra-license-file usr/share/doc/mysql-community-client/LICENSE.mysql -mysql-community-client: extra-license-file usr/share/doc/mysql-community-clienti/COPYING.gz -mysql-community-client: copyright-should-refer-to-common-license-file-for-lgpl -# Due to static linking this cannot be avoided and hence being overridden -mysql-community-client: embedded-library diff --git a/packaging/deb-jessie/mysql-community-server.config b/packaging/deb-jessie/mysql-community-server.config deleted file mode 100755 index cb6c39cfd5b9..000000000000 --- a/packaging/deb-jessie/mysql-community-server.config +++ /dev/null @@ -1,88 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -. /usr/share/debconf/confmodule - -if [ "$1" = "configure" ] && [ -z "$2" ]; -then - - set -e - - PKG_LIST=mysql-server-5.5:mysql-server-5.6:mysql-community-server:mysql-commercial-server - INSTALLED_PKG=none - MYSQLDATA=/var/lib/mysql - - IFS_BACKUP=${IFS} - IFS=":" - for PKG in ${PKG_LIST}; - do - STATUS=$(dpkg -s ${PKG} 2> /dev/null | grep Status: | cut -d' ' -f4) - if [ "${STATUS}" = "installed" ]; - then - INSTALLED_PKG=${PKG} - break - fi - done - IFS=${IFS_BACKUP} - - if [ "${INSTALLED_PKG}" = "none" ]; - then - if [ -d ${MYSQLDATA} -o -L ${MYSQLDATA} ]; - then - db_input high mysql-community-server/data-dir || true - else - db_fset mysql-community-server/data-dir seen true - fi - - while :; do - PASSWD="" - db_input high mysql-community-server/root-pass || true - db_go - - db_get mysql-community-server/root-pass - if [ -z "${RET}" ]; - then - db_fset mysql-community-server/root-pass seen true - db_fset mysql-community-server/re-root-pass seen true - break - fi - PASSWD="${RET}" - - db_input high mysql-community-server/re-root-pass || true - db_go - - db_get mysql-community-server/re-root-pass - if [ "${RET}" == "${PASSWD}" ]; - then - PASSWD="" - break - fi - - db_fset mysql-community-server/root-pass-mismatch seen false - db_input critical mysql-community-server/root-pass-mismatch - db_set mysql-community-server/root-pass "" - db_set mysql-community-server/re-root-pass "" - done - - else - db_fset mysql-community-server/data-dir seen true - db_fset mysql-community-server/root-pass seen true - db_fset mysql-community-server/re-root-pass seen true - fi - - set +e -fi diff --git a/packaging/deb-jessie/mysql-community-server.dirs b/packaging/deb-jessie/mysql-community-server.dirs deleted file mode 100644 index 91e718557a45..000000000000 --- a/packaging/deb-jessie/mysql-community-server.dirs +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -etc/mysql/conf.d -etc/init.d -usr/lib/mysql -usr/lib/mysql/plugin diff --git a/packaging/deb-jessie/mysql-community-server.install b/packaging/deb-jessie/mysql-community-server.install deleted file mode 100644 index 03de843417fe..000000000000 --- a/packaging/deb-jessie/mysql-community-server.install +++ /dev/null @@ -1,85 +0,0 @@ -# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# binaries -usr/bin/msql2mysql -usr/bin/myisamchk -usr/bin/myisamlog -usr/bin/myisampack -usr/bin/my_print_defaults -usr/bin/mysqlbinlog -usr/bin/mysql_convert_table_format -usr/bin/mysqld_multi -usr/bin/mysqld_safe -usr/bin/mysqlhotcopy -usr/bin/mysql_install_db -usr/bin/mysql_secure_installation -usr/bin/mysql_setpermission -usr/bin/mysqltest -usr/bin/mysqltest_embedded -usr/bin/mysql_tzinfo_to_sql -usr/bin/mysql_upgrade -usr/bin/mysql_zap -usr/bin/perror -usr/bin/replace -usr/bin/resolveip -usr/bin/resolve_stack_dump -usr/sbin/mysqld -# debug binary -usr/sbin/mysqld-debug -# man pages -usr/share/man/man1/comp_err.1 -usr/share/man/man1/msql2mysql.1 -usr/share/man/man1/myisamchk.1 -usr/share/man/man1/myisamlog.1 -usr/share/man/man1/myisampack.1 -usr/share/man/man1/my_print_defaults.1 -usr/share/man/man1/mysqlbinlog.1 -usr/share/man/man1/mysql_convert_table_format.1 -usr/share/man/man1/mysqld_multi.1 -usr/share/man/man1/mysqld_safe.1 -usr/share/man/man1/mysqlhotcopy.1 -usr/share/man/man1/mysql_install_db.1 -usr/share/man/man1/mysql_secure_installation.1 -usr/share/man/man1/mysql.server.1 -usr/share/man/man1/mysql_setpermission.1 -usr/share/man/man1/mysql-stress-test.pl.1 -usr/share/man/man1/mysqltest.1 -usr/share/man/man1/mysqltest_embedded.1 -usr/share/man/man1/mysql_tzinfo_to_sql.1 -usr/share/man/man1/mysql_upgrade.1 -usr/share/man/man1/mysql_zap.1 -usr/share/man/man1/perror.1 -usr/share/man/man1/replace.1 -usr/share/man/man1/resolveip.1 -usr/share/man/man1/resolve_stack_dump.1 -usr/share/man/man8/mysqld.8 -# SQL files -usr/share/mysql/*.sql -# plugins -usr/lib/mysql/plugin/*.so -usr/lib/mysql/plugin/debug/*.so -usr/lib/mysql/plugin/daemon_example.ini -usr/lib/mysql/plugin/debug/daemon_example.ini -# support files -usr/share/mysql/mysqld_multi.server -usr/share/mysql/magic -usr/share/mysql/mysql-log-rotate -usr/share/mysql/mysql-systemd-start -usr/share/mysql/my-default.cnf -usr/share/mysql/dictionary.txt -# legal -usr/share/doc/mysql-community-server/COPYING -usr/share/doc/mysql-community-server/README diff --git a/packaging/deb-jessie/mysql-community-server.lintian-overrides b/packaging/deb-jessie/mysql-community-server.lintian-overrides deleted file mode 100644 index 08b386543cbc..000000000000 --- a/packaging/deb-jessie/mysql-community-server.lintian-overrides +++ /dev/null @@ -1,23 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-community-server: extra-license-file usr/share/doc/mysql-community-server/LICENSE.mysql -mysql-community-server: extra-license-file usr/share/doc/mysql-community-server/COPYING.gz -mysql-community-server: copyright-should-refer-to-common-license-file-for-lgpl -# Due to static linking this cannot be avoided and hence being overridden -mysql-community-server: embedded-library -# Since we ship debug plugins so this error is overridden -mysql-community-server: unstripped-binary-or-object usr/lib/mysql/plugin/debug/* diff --git a/packaging/deb-jessie/mysql-community-server.mysql.init b/packaging/deb-jessie/mysql-community-server.mysql.init deleted file mode 100755 index d8c08082f550..000000000000 --- a/packaging/deb-jessie/mysql-community-server.mysql.init +++ /dev/null @@ -1,190 +0,0 @@ -#!/bin/bash -# -### BEGIN INIT INFO -# Provides: mysql -# Required-Start: $remote_fs $syslog -# Required-Stop: $remote_fs $syslog -# Should-Start: $network $time -# Should-Stop: $network $time -# Default-Start: 2 3 4 5 -# Default-Stop: 0 1 6 -# Short-Description: Start/ Stop MySQL Community Server daemon -# Description: This service script facilitates startup and shutdown of -# mysqld daemon throught its wrapper script mysqld_safe -### END INIT INFO -# - -# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -. /lib/lsb/init-functions - -cd / -umask 077 - -MYSQLDATA=/var/lib/mysql -VERSION=$(mysqld --version | grep mysqld | cut -d' ' -f4) - -get_mysql_option() { - RESULT=$(my_print_defaults "$1" | sed -n "s/^--$2=//p" | tail -n 1) - if [ -z "$RESULT" ]; - then - RESULT="$3" - fi - echo $RESULT -} - -get_running () { - PIDFILE=$(get_mysql_option mysqld_safe pid-file "") - if [ -z "$PIDFILE" ]; - then - PIDFILE=$(get_mysql_option mysqld pid-file "$MYSQLDATA/$(hostname).pid") - fi - if [ -e "$PIDFILE" ] && [ -d "/proc/$(cat "$PIDFILE")" ]; - then - echo 1 - else - echo 0 - fi -} - -server_stop () { - RUNNING=$(get_running) - COUNT=0 - while :; do - COUNT=$(( COUNT+1 )) - echo -n . - if [ "${RUNNING}" -eq 0 ]; - then - echo - break - fi - if [ "${COUNT}" -gt 15 ]; - then - echo - return 1 - fi - RUNNING=$(get_running) - sleep 1 - done - return 0 -} - -case "$1" in - 'start') - RUNNING=$(get_running) - if [ "${RUNNING}" -eq 1 ]; - then - log_action_msg "A MySQL Server is already started" - else - MYSQLRUN=/var/run/mysqld - MYSQLDATA=/var/lib/mysql - MYSQLLOG=/var/log/mysql - - if [ ! -d ${MYSQLDATA} -a ! -L ${MYSQLDATA} ]; - then - mkdir ${MYSQLDATA} - chown mysql:mysql ${MYSQLDATA} - chmod 750 ${MYSQLDATA} - fi - - if [ ! -d "${MYSQLDATA}/mysql" -a ! -L "${MYSQLDATA}/mysql" ]; - then - mkdir ${MYSQLDATA}/mysql - chown mysql:mysql ${MYSQLDATA}/mysql - chmod 750 ${MYSQLDATA}/mysql - fi - - if [ ! "$(ls -A ${MYSQLDATA}/mysql)" ]; - then - mysql_install_db --user=mysql > /dev/null - fi - - if [ ! -d ${MYSQLLOG} -a ! -L ${MYSQLLOG} ]; - then - mkdir ${MYSQLLOG} - chown mysql:adm ${MYSQLLOG} - chmod 750 ${MYSQLLOG} - touch ${MYSQLLOG}/error.log - chmod 640 ${MYSQLLOG}/error.log - chown mysql:adm ${MYSQLLOG}/error.log - fi - - if [ ! -d "${MYSQLRUN}" -a ! -L "${MYSQLRUN}" ]; - then - mkdir ${MYSQLRUN} - chown mysql:mysql ${MYSQLRUN} - chmod 755 ${MYSQLRUN} - fi - - su - mysql -s /bin/bash -c "mysqld_safe > /dev/null &" - for i in 1 2 3 4 5 6; - do - sleep 1 - echo -n . - done - echo - RUNNING=$(get_running) - if [ "${RUNNING}" -eq 1 ]; - then - log_action_msg "MySQL Community Server ${VERSION} is started" - else - log_action_msg "MySQL Community Server ${VERSION} did not start. Please check logs for more details." - fi - fi - ;; - - 'stop') - RUNNING=$(get_running) - if [ "${RUNNING}" -eq 1 ]; - then - killall -15 mysqld - server_stop - if [ "$?" -eq 0 ]; - then - log_action_msg "MySQL Community Server ${VERSION} is stopped" - else - log_action_msg "Attempt to shutdown MySQL Community Server ${VERSION} timed out" - fi - else - log_action_msg "MySQL Community Server ${VERSION} is already stopped" - fi - ;; - - 'restart'|'reload'|'force-reload') - log_action_msg "Stopping MySQL Community Server ${VERSION}" - $0 stop - log_action_msg "Re-starting MySQL Community Server ${VERSION}" - $0 start - ;; - - 'status') - RUNNING=$(get_running) - if [ ${RUNNING} -eq 1 ]; - then - log_action_msg "MySQL Community Server ${VERSION} is running" - else - log_action_msg "MySQL Community Server ${VERSION} is not running" - exit 3 - fi - ;; - - *) - echo "Usage: $SELF start|stop|restart|reload|force-reload|status" - exit 1 - ;; -esac - -exit 0 diff --git a/packaging/deb-jessie/mysql-community-server.mysql.service b/packaging/deb-jessie/mysql-community-server.mysql.service deleted file mode 100644 index b3e33058beda..000000000000 --- a/packaging/deb-jessie/mysql-community-server.mysql.service +++ /dev/null @@ -1,33 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# MySQL systemd service file - -[Unit] -Description=MySQL Community Server -After=network.target - -[Install] -WantedBy=multi-user.target - -[Service] -User=mysql -Group=mysql -PermissionsStartOnly=true -ExecStartPre=/usr/share/mysql/mysql-systemd-start pre -ExecStart=/usr/bin/mysqld_safe -ExecStartPost=/usr/share/mysql/mysql-systemd-start post -TimeoutSec=600 -Restart=on-failure diff --git a/packaging/deb-jessie/mysql-community-server.postinst b/packaging/deb-jessie/mysql-community-server.postinst deleted file mode 100755 index 0fe3dc1227cf..000000000000 --- a/packaging/deb-jessie/mysql-community-server.postinst +++ /dev/null @@ -1,102 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -. /usr/share/debconf/confmodule - -take_upstart_job_backup () { - if [ -e "/etc/init/mysql.conf" ] && [ -d "/var/lib/mysql" ]; - then - mv /etc/init/mysql.conf /var/lib/mysql/.mysql.conf.backup - fi -} - -case "$1" in - configure) - -# MySQL 5.6.34 needs this - MYSQLFILES=/var/lib/mysql-files - if [ ! -d ${MYSQLFILES} -a ! -L ${MYSQLFILES} ]; - then - mkdir ${MYSQLFILES} - chown mysql:mysql ${MYSQLFILES} - chmod 770 ${MYSQLFILES} - fi - - if [ -z "$2" ]; - then - set -e - - MYSQLDATA=/var/lib/mysql - - if [ ! -d "${MYSQLDATA}/mysql" -a ! -L "${MYSQLDATA}/mysql" ]; - then - mkdir ${MYSQLDATA}/mysql - chown mysql:mysql ${MYSQLDATA}/mysql - chmod 750 ${MYSQLDATA}/mysql - if [ ! "$(ls -A ${MYSQLDATA}/mysql)" ]; - then - mysql_install_db --user=mysql > /dev/null - fi - fi - - db_get mysql-community-server/root-pass && PASSWD=${RET} - if [ ! -z "${PASSWD}" ]; - then - db_set mysql-community-server/root-pass "" - db_set mysql-community-server/re-root-pass "" - PASSWD="UPDATE user SET password=PASSWORD('${PASSWD}') WHERE user='root';" - else - PASSWD="" - fi - - SQL=`mktemp` - if [ -f "${SQL}" ]; - then - chmod 700 ${SQL} - cat << EOF > ${SQL} -USE mysql; -${PASSWD} -DELETE FROM user WHERE user=''; -FLUSH PRIVILEGES; -EOF - mysqld --basedir=/usr --bootstrap --user=mysql --skip-grant-tables < $SQL - PASSWD="" - rm -f ${SQL} - fi - - set +e - - fi - - ;; - - abort-upgrade|abort-remove|abort-configure) - - ;; - - *) - exit 1 - ;; -esac - -db_stop - -take_upstart_job_backup - -#DEBHELPER# - -exit 0 diff --git a/packaging/deb-jessie/mysql-community-server.postrm b/packaging/deb-jessie/mysql-community-server.postrm deleted file mode 100755 index 55f83a3bec28..000000000000 --- a/packaging/deb-jessie/mysql-community-server.postrm +++ /dev/null @@ -1,165 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -if [ "$1" = purge ] && [ -e /usr/share/debconf/confmodule ]; -then -. /usr/share/debconf/confmodule -fi - -place_upstart_job_back () { - if [ -e "/var/lib/mysql/.mysql.conf.backup" ]; - then - mv /var/lib/mysql/.mysql.conf.backup /etc/init/mysql.conf - fi -} - -get_pcount () { - PSCOUNT=$(ps -ef | grep "/usr/sbin/mysqld" | wc -l) - echo "${PSCOUNT}" -} - -server_stop () { - PSCOUNT=$(get_pcount) - COUNT=0 - while :; do - COUNT=$(( COUNT+1 )) - echo -n . - if [ "${PSCOUNT}" -eq 1 ]; - then - echo - break - fi - if [ "${COUNT}" -gt 15 ]; - then - echo - return 1 - fi - PSCOUNT=$(get_pcount) - sleep 1 - done - return 0 -} - -case "$1" in - remove) - - set -e - - place_upstart_job_back - - set +e - - ;; - - purge) - - set -e - - place_upstart_job_back - - MYSQLDATA=/var/lib/mysql - MYSQLLOG=/var/log/mysql - MYSQLRUN=/var/run/mysqld - MYSQLFILES=/var/lib/mysql-files - - server_stop - - db_input high mysql-community-server/remove-data-dir || true - db_go - db_get mysql-community-server/remove-data-dir && RMDATADIR=${RET} - if [ "${RMDATADIR}" = "true" ]; - then - if [ -d ${MYSQLRUN} ] || [ -L ${MYSQLRUN} ]; - then - rm -rf ${MYSQLRUN} - fi - - if [ -d ${MYSQLLOG} ] || [ -L ${MYSQLLOG} ]; - then - rm -rf ${MYSQLLOG} - fi - - if [ -d ${MYSQLDATA} ] || [ -L ${MYSQLDATA} ]; - then - rm -rf ${MYSQLDATA} - fi - - if [ -d ${MYSQLFILES} ] || [ -L ${MYSQLFILES} ]; - then - rm -rf ${MYSQLFILES} - fi - - if getent passwd mysql >/dev/null; - then - userdel mysql - fi - fi - - set +e - ;; - - abort-install) - - set -e - - place_upstart_job_back - - if [ -x "/etc/init.d/mysql" ]; - then - invoke-rc.d mysql start || exit $? - else - if [ -d ${MYSQLRUN} ] || [ -L ${MYSQLRUN} ]; - then - rm -rf ${MYSQLRUN} - fi - - if [ -d ${MYSQLLOG} ] || [ -L ${MYSQLLOG} ]; - then - rm -rf ${MYSQLLOG} - fi - - if [ -d ${MYSQLDATA} ] || [ -L ${MYSQLDATA} ]; - then - rm -rf ${MYSQLDATA} - fi - - if [ -d ${MYSQLFILES} ] || [ -L ${MYSQLFILES} ]; - then - rm -rf ${MYSQLFILES} - fi - - if getent passwd mysql >/dev/null; - then - userdel mysql - fi - fi - - set +e - ;; - - upgrade|abort-upgrade) - - ;; - - *) - exit 1 - ;; -esac - -#DEBHELPER# - -exit 0 diff --git a/packaging/deb-jessie/mysql-community-server.preinst b/packaging/deb-jessie/mysql-community-server.preinst deleted file mode 100755 index e5b3b7719b69..000000000000 --- a/packaging/deb-jessie/mysql-community-server.preinst +++ /dev/null @@ -1,131 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -get_pcount () { - PSCOUNT=$(ps -ef | grep "/usr/sbin/mysqld" | wc -l) - echo "${PSCOUNT}" -} - -server_stop () { - PSCOUNT=$(get_pcount) - COUNT=0 - while :; do - COUNT=$(( COUNT+1 )) - echo -n . - if [ "${PSCOUNT}" -eq 1 ]; - then - echo - break - fi - if [ "${COUNT}" -gt 15 ]; - then - echo - return 1 - fi - PSCOUNT=$(get_pcount) - sleep 1 - done - return 0 -} - -case "$1" in - install) - - if [ -z "$2" ]; - then - - set -e - - if [ -x "/etc/init.d/mysql" ]; - then - invoke-rc.d mysql stop || exit $? - server_stop - fi - - MYSQLDATA=/var/lib/mysql - MYSQLFILES=/var/lib/mysql-files - MYSQLLOG=/var/log/mysql - MYSQLRUN=/var/run/mysqld - - if ! getent group mysql >/dev/null; - then - addgroup --system mysql >/dev/null - fi - - if ! getent passwd mysql >/dev/null; - then - adduser --ingroup mysql --system --disabled-login --no-create-home --home ${MYSQLDATA} --shell /bin/false --gecos "MySQL Server" mysql >/dev/null - fi - - if [ ! -d ${MYSQLDATA} -a ! -L ${MYSQLDATA} ]; - then - mkdir ${MYSQLDATA} - chown mysql:mysql ${MYSQLDATA} - chmod 750 ${MYSQLDATA} - fi - - if [ ! -d ${MYSQLFILES} -a ! -L ${MYSQLFILES} ]; - then - mkdir ${MYSQLFILES} - chown mysql:mysql ${MYSQLFILES} - chmod 770 ${MYSQLFILES} - fi - - if [ ! -d ${MYSQLLOG} -a ! -L ${MYSQLLOG} ]; - then - mkdir ${MYSQLLOG} - chown mysql:adm ${MYSQLLOG} - chmod 750 ${MYSQLLOG} - touch ${MYSQLLOG}/error.log - chmod 640 ${MYSQLLOG}/error.log - chown mysql:adm ${MYSQLLOG}/error.log - fi - - if [ ! -d ${MYSQLRUN} -a ! -L ${MYSQLRUN} ]; - then - mkdir ${MYSQLRUN} - chown mysql:mysql ${MYSQLRUN} - chmod 755 ${MYSQLRUN} - fi - - set +e - - fi - - ;; - - upgrade) - - set -e - - #DEBHELPER# - server_stop - - set +e - - ;; - - abort-upgrade) - - ;; - - *) - exit 1 - ;; -esac - -exit 0 diff --git a/packaging/deb-jessie/mysql-community-server.prerm b/packaging/deb-jessie/mysql-community-server.prerm deleted file mode 100755 index 7509de7a948c..000000000000 --- a/packaging/deb-jessie/mysql-community-server.prerm +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -set -e - -#DEBHELPER# - -set +e - -exit 0 diff --git a/packaging/deb-jessie/mysql-community-server.templates b/packaging/deb-jessie/mysql-community-server.templates deleted file mode 100644 index 2469d917769e..000000000000 --- a/packaging/deb-jessie/mysql-community-server.templates +++ /dev/null @@ -1,34 +0,0 @@ -Template: mysql-community-server/root-pass -Type: password -Description: Enter root password: - Please provide a strong password that will be set for the root account of your MySQL database. - Leave it blank if you do not wish to set or change the root password at this time. - -Template: mysql-community-server/re-root-pass -Type: password -Description: Re-enter root password: - Now that you have selected a password for the root account, please confirm by typing it again. Do not share the password with anyone. - -Template: mysql-community-server/root-pass-mismatch -Type: error -Description: The two passwords did not match - Please try again. Make sure you type the exact same password twice. - -Template: mysql-community-server/remove-data-dir -Type: boolean -Default: false -Description: Remove data directory at /var/lib/mysql ? - This operation will remove the data directory that stores all the databases, tables and related meta-data. - Additionally, any import or export files stored at '/var/lib/mysql-files' will be removed along with directory. - It is highly recommended to take data backup before removing the data directory. - -Template: mysql-community-server/data-dir -Type: note -Description: Data directory found when no MySQL server package is installed - A data directory '/var/lib/mysql' is present on this system when no MySQL server - package is currently installed on the system. The directory may be under control of - server package received from third-party vendors. It may also be an unclaimed data - directory from previous removal of mysql packages. - . - It is highly recommended to take data backup. If you have not done so, now would be - the time to take backup in another shell. Once completed, press 'Ok' to continue. diff --git a/packaging/deb-jessie/mysql-community-source.install b/packaging/deb-jessie/mysql-community-source.install deleted file mode 100644 index dd7a09429eb1..000000000000 --- a/packaging/deb-jessie/mysql-community-source.install +++ /dev/null @@ -1,20 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -../*.dsc usr/src/mysql/ -../*.tar.xz usr/src/mysql/ -# legal -usr/share/doc/mysql-community-source/COPYING -usr/share/doc/mysql-community-source/README diff --git a/packaging/deb-jessie/mysql-community-source.lintian-overrides b/packaging/deb-jessie/mysql-community-source.lintian-overrides deleted file mode 100644 index 9ca84e90712c..000000000000 --- a/packaging/deb-jessie/mysql-community-source.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-community-source: extra-license-file usr/share/doc/mysql-community-source/LICENSE.mysql -mysql-community-source: extra-license-file usr/share/doc/mysql-community-source/COPYING.gz -mysql-community-source: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-jessie/mysql-community-test.dirs b/packaging/deb-jessie/mysql-community-test.dirs deleted file mode 100644 index f93ca25bd85b..000000000000 --- a/packaging/deb-jessie/mysql-community-test.dirs +++ /dev/null @@ -1,16 +0,0 @@ -# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -usr/lib/mysql-test diff --git a/packaging/deb-jessie/mysql-community-test.install b/packaging/deb-jessie/mysql-community-test.install deleted file mode 100644 index d5f820dd6fc4..000000000000 --- a/packaging/deb-jessie/mysql-community-test.install +++ /dev/null @@ -1,20 +0,0 @@ -# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -usr/lib/mysql-test/* -usr/share/man/man1/mysql-test-run.pl.1 -# legal -usr/share/doc/mysql-community-test/COPYING -usr/share/doc/mysql-community-test/README diff --git a/packaging/deb-jessie/mysql-community-test.links b/packaging/deb-jessie/mysql-community-test.links deleted file mode 100644 index aedf2db3b736..000000000000 --- a/packaging/deb-jessie/mysql-community-test.links +++ /dev/null @@ -1,17 +0,0 @@ -# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -usr/lib/mysql-test/mysql-test-run.pl usr/lib/mysql-test/mysql-test-run -usr/lib/mysql-test/mysql-test-run.pl usr/lib/mysql-test/mtr diff --git a/packaging/deb-jessie/mysql-community-test.lintian-overrides b/packaging/deb-jessie/mysql-community-test.lintian-overrides deleted file mode 100644 index ff273bbe9135..000000000000 --- a/packaging/deb-jessie/mysql-community-test.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-community-test: extra-license-file usr/share/doc/mysql-community-test/LICENSE.mysql -mysql-community-test: extra-license-file usr/share/doc/mysql-community-test/COPYING.gz -mysql-community-test: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-jessie/mysql-server.install b/packaging/deb-jessie/mysql-server.install deleted file mode 100644 index e3aa8de274f0..000000000000 --- a/packaging/deb-jessie/mysql-server.install +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# legal -usr/share/doc/mysql-server/COPYING -usr/share/doc/mysql-server/README diff --git a/packaging/deb-jessie/mysql-server.lintian-overrides b/packaging/deb-jessie/mysql-server.lintian-overrides deleted file mode 100644 index 487709765b02..000000000000 --- a/packaging/deb-jessie/mysql-server.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-server: extra-license-file usr/share/doc/mysql-server/LICENSE.mysql -mysql-server: extra-license-file usr/share/doc/mysql-server/COPYING.gz -mysql-server: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-jessie/mysql-testsuite.install b/packaging/deb-jessie/mysql-testsuite.install deleted file mode 100644 index dfc17333700e..000000000000 --- a/packaging/deb-jessie/mysql-testsuite.install +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# legal -usr/share/doc/mysql-testsuite/COPYING -usr/share/doc/mysql-testsuite/README diff --git a/packaging/deb-jessie/mysql-testsuite.lintian-overrides b/packaging/deb-jessie/mysql-testsuite.lintian-overrides deleted file mode 100644 index 37488fe69b72..000000000000 --- a/packaging/deb-jessie/mysql-testsuite.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-testsuite: extra-license-file usr/share/doc/mysql-testsuite/LICENSE.mysql -mysql-testsuite: extra-license-file usr/share/doc/mysql-testsuite/COPYING.gz -mysql-testsuite: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-jessie/patches/fix-man-page-links.patch b/packaging/deb-jessie/patches/fix-man-page-links.patch deleted file mode 100644 index 004ccdf77d03..000000000000 --- a/packaging/deb-jessie/patches/fix-man-page-links.patch +++ /dev/null @@ -1,14 +0,0 @@ -From: Akhil Mohan -Description: Fix path in man page link. -Bug: http://bugs.mysql.com/bug.php?id=70952 - ---- a/man/mysql_client_test_embedded.1 2013-11-08 19:00:22.000000000 +0530 -+++ b/man/mysql_client_test_embedded.1 2013-11-14 19:29:56.768315219 +0530 -@@ -1 +1 @@ --.so man-gpl-tmp2/mysql_client_test.1 -+.so man1/mysql_client_test.1 ---- a/man/mysqltest_embedded.1 2013-11-08 19:00:22.000000000 +0530 -+++ b/man/mysqltest_embedded.1 2013-11-14 19:31:19.079280675 +0530 -@@ -1 +1 @@ --.so man-gpl-tmp2/mysqltest.1 -+.so man1/mysqltest.1 diff --git a/packaging/deb-jessie/patches/fix-mtr-search-paths.patch b/packaging/deb-jessie/patches/fix-mtr-search-paths.patch deleted file mode 100644 index 8a27a091e6ce..000000000000 --- a/packaging/deb-jessie/patches/fix-mtr-search-paths.patch +++ /dev/null @@ -1,13 +0,0 @@ -From: Akhil Mohan -Description: Adding extra search path for testsuite. - ---- a/mysql-test/lib/mtr_cases.pm 2014-02-24 13:14:37 +0530 -+++ b/mysql-test/lib/mtr_cases.pm 2014-07-02 11:46:24 +0530 -@@ -288,6 +288,7 @@ - { - $suitedir= my_find_dir($::basedir, - ["share/mysql-test/suite", -+ "lib/mysql-test/suite", - "mysql-test/suite", - "internal/mysql-test/suite", - "mysql-test", diff --git a/packaging/deb-jessie/patches/fix-mysql_install_db.patch b/packaging/deb-jessie/patches/fix-mysql_install_db.patch deleted file mode 100644 index 41311b2c8f9e..000000000000 --- a/packaging/deb-jessie/patches/fix-mysql_install_db.patch +++ /dev/null @@ -1,43 +0,0 @@ -From: Terje Røsten -Description: Maintains the pending --skip-my-cnf option in mainline -Bug: - -diff --git a/scripts/mysql_install_db.pl.in b/scripts/mysql_install_db.pl.in -index 440a977..7d068fc 100644 ---- a/scripts/mysql_install_db.pl.in -+++ b/scripts/mysql_install_db.pl.in -@@ -113,6 +113,7 @@ EOF2 - print <{srcdir} and $opt->{basedir} ) - { - error($opt,"Specify either --basedir or --srcdir, not both"); - } --if ( $opt->{'keep-my-cnf'} ) -+if ( $opt->{rpm} || $opt->{'keep-my-cnf'} ) - { - $keep_my_cnf = 1; - } -@@ -664,7 +665,7 @@ if ( $opt->{'skip-name-resolve'} and $resolved and $resolved =~ /\s/ ) - } - - # ---------------------------------------------------------------------- --# Create database directories mysql & test -+# Create database directory mysql - # ---------------------------------------------------------------------- - - # FIXME The shell variant uses "mkdir -p": -@@ -697,7 +698,7 @@ if ($opt_user) - } - } - --foreach my $dir ( $opt->{ldata}, "$opt->{ldata}/mysql", "$opt->{ldata}/test" ) -+foreach my $dir ( $opt->{ldata}, "$opt->{ldata}/mysql") - { - mkdir($dir, 0700) unless -d $dir; - if ($opt_user and -w "/") diff --git a/packaging/deb-jessie/patches/series b/packaging/deb-jessie/patches/series deleted file mode 100644 index 31af2dc779ba..000000000000 --- a/packaging/deb-jessie/patches/series +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -#fix-man-page-links.patch -fix-mysql_install_db.patch -fix-mtr-search-paths.patch diff --git a/packaging/deb-jessie/rules b/packaging/deb-jessie/rules deleted file mode 100755 index 92f0d1a599b4..000000000000 --- a/packaging/deb-jessie/rules +++ /dev/null @@ -1,136 +0,0 @@ -#!/usr/bin/make -f - -# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -%: - dh $@ - -export DH_VERBOSE=1 -export CFLAGS= -export CXXFLAGS= - -override_dh_auto_configure: - @echo "RULES.$@" - cmake . \ - -DBUILD_CONFIG=mysql_release \ - -DCMAKE_INSTALL_PREFIX=/usr \ - -DINSTALL_DOCDIR=share/mysql/docs \ - -DINSTALL_DOCREADMEDIR=share/mysql \ - -DINSTALL_INCLUDEDIR=include/mysql \ - -DINSTALL_INFODIR=share/mysql/docs \ - -DINSTALL_LIBDIR=lib/$(DEB_HOST_MULTIARCH) \ - -DINSTALL_MANDIR=share/man \ - -DINSTALL_MYSQLSHAREDIR=share/mysql \ - -DINSTALL_MYSQLTESTDIR=lib/mysql-test \ - -DINSTALL_PLUGINDIR=lib/mysql/plugin \ - -DINSTALL_SBINDIR=sbin \ - -DINSTALL_SCRIPTDIR=bin \ - -DINSTALL_SQLBENCHDIR=lib/mysql \ - -DINSTALL_SUPPORTFILESDIR=share/mysql \ - -DMYSQL_DATADIR=/var/lib/mysql \ - -DSYSCONFDIR=/etc/mysql \ - -DMYSQL_UNIX_ADDR=/var/run/mysqld/mysqld.sock \ - -DWITH_SSL=bundled \ - -DWITH_ZLIB=system \ - -DWITH_EXTRA_CHARSETS=all \ - -DWITH_INNODB_MEMCACHED=1 \ - -DCOMPILATION_COMMENT="MySQL Community Server (GPL)" \ - -DINSTALL_LAYOUT=DEB - - cat CMakeCache.txt - touch $@ - -override_dh_auto_build: - @echo "RULES.$@" - $(MAKE) -j8 VERBOSE=1 - touch $@ - -override_dh_auto_test: - @echo "RULES.$@" - echo "No tests run because test 9: pfs_connect_attr is failing unreasonably" - touch $@ - -override_dh_auto_install: - - @echo "RULES.$@" - # complete install first - $(MAKE) install DESTDIR=debian/tmp - # remove all redundant files and links - rm debian/tmp/usr/lib/*/*_r* - rm debian/tmp/usr/lib/mysql-test/cmake_install.cmake - rm debian/tmp/usr/lib/mysql-test/CTestTestfile.cmake - rm debian/tmp/usr/lib/mysql-test/Makefile - # add missing man pages - install -g root -o root -m 0644 debian/extra/mysql_embedded.1 debian/tmp/usr/share/man/man1 - # add MySQL Server configuration file my.cnf to mysql-common package - install -g root -o root -m 0644 -D debian/extra/my.cnf debian/tmp/etc/mysql/my.cnf - # add MySQL Server debug binary and library to package - install -g root -o root -m 0755 debian/extra/server-binary debian/tmp/usr/sbin/mysqld-debug - install -g root -o root -m 0755 debian/extra/embedded-server debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/libmysqld-debug.a - # add debug plugin libraries to package - install -g root -o root -m 0755 -d debian/tmp/usr/lib/mysql/plugin/debug - for file in debian/extra/*-plugin; do NEW=`echo $$file | cut -d- -f1`; mv $$file $$NEW.so; done - install -g root -o root -m 0755 debian/extra/*.so debian/tmp/usr/lib/mysql/plugin/debug - install -g root -o root -m 0755 debian/extra/daemon_example.ini debian/tmp/usr/lib/mysql/plugin/debug - # add systemd script - install -m 0755 debian/extra/mysql-systemd-start debian/tmp/usr/share/mysql/ - # add directory for legal docs - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-server - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-community-server - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-client - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-community-client - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-common - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/libmysqlclient18 - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/libmysqlclient-dev - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/libmysqld-dev - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-community-bench - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-testsuite - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-community-test - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-community-source - # add COPYING file to each package - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-server/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-community-server/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-client/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-community-client/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-common/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/libmysqlclient18/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/libmysqlclient-dev/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/libmysqld-dev/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-community-bench/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-testsuite/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-community-test/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-community-source/COPYING - # add README file to each package - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-server/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-community-server/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-client/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-community-client/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-common/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/libmysqlclient18/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/libmysqlclient-dev/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/libmysqld-dev/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-community-bench/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-testsuite/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-community-test/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-community-source/README - touch $@ - -override_dh_installinit: - @echo "RULES.$@" - dh_systemd_enable --name=mysql - dh_installinit --name=mysql -- defaults 19 21 - dh_systemd_start --restart-after-upgrade - touch $@ diff --git a/packaging/deb-jessie/source/format b/packaging/deb-jessie/source/format deleted file mode 100644 index 163aaf8d82b6..000000000000 --- a/packaging/deb-jessie/source/format +++ /dev/null @@ -1 +0,0 @@ -3.0 (quilt) diff --git a/packaging/deb-jessie/source/include-binaries b/packaging/deb-jessie/source/include-binaries deleted file mode 100644 index adb5f54bb2d2..000000000000 --- a/packaging/deb-jessie/source/include-binaries +++ /dev/null @@ -1,35 +0,0 @@ -# Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# obscured filename for mysqld-debug, libmysqld-debug.a and debug plugins -debian/extra/server-binary -debian/extra/embedded-server -debian/extra/adt_null-plugin -debian/extra/auth-plugin -debian/extra/auth_socket-plugin -debian/extra/auth_test_plugin-plugin -debian/extra/innodb_engine-plugin -debian/extra/libdaemon_example-plugin -debian/extra/libmemcached-plugin -debian/extra/mypluglib-plugin -debian/extra/mysql_no_login-plugin -debian/extra/qa_auth_client-plugin -debian/extra/qa_auth_interface-plugin -debian/extra/qa_auth_server-plugin -debian/extra/semisync_master-plugin -debian/extra/semisync_slave-plugin -debian/extra/test_udf_services-plugin -debian/extra/validate_password-plugin -debian/extra/connection_control-plugin diff --git a/packaging/deb-jessie/source/lintian-overrides b/packaging/deb-jessie/source/lintian-overrides deleted file mode 100644 index 9eefbb7dca0f..000000000000 --- a/packaging/deb-jessie/source/lintian-overrides +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# We provide our own versioning scheme so this warning is overridden -mysql-community source: changelog-should-mention-nmu -mysql-community source: source-nmu-has-incorrect-version-number diff --git a/packaging/deb-jessie/watch b/packaging/deb-jessie/watch deleted file mode 100644 index c45c5e3e89d6..000000000000 --- a/packaging/deb-jessie/watch +++ /dev/null @@ -1,2 +0,0 @@ -version=3 -http://mysql.mirrors.pair.com/Downloads/MySQL-5.6/mysql-([\d\.]+).tar.gz diff --git a/packaging/deb-precise/changelog b/packaging/deb-precise/changelog deleted file mode 100644 index 3773713eafd4..000000000000 --- a/packaging/deb-precise/changelog +++ /dev/null @@ -1,86 +0,0 @@ -mysql-community (5.6.25-1ubuntu12.04) precise; urgency=low - - * new upstream release - * mysql-community-server now depends on perl, psmisc - mysql-community-test now depends on python, libmysqlclient-dev - (Closes: #20561621) - - -- Akhil Mohan Wed, 25 Feb 2014 22:52:19 +0530 - -mysql-community (5.6.24-1ubuntu12.04) precise; urgency=low - - * new upstream release - - -- Akhil Mohan Mon, 16 Feb 2014 15:45:09 +0530 - -mysql-community (5.6.23-1ubuntu12.04) precise; urgency=low - - * new upstream release - * dh_apparmor to now run before dh_installinit in d/rules - * mysql-community-server now recommends mysql-client - * mysql-community-server now depends on apparmor - * removed template install-test-db; not installed by default - * d/compat incremented to 9 from 8 - * d/control updated to build depend on debhelper 9 - * added d/*.lintian-overrides and d/source/lintian-overrides - * d/rules updated to reflect correct file permissions - - -- Akhil Mohan Wed, 31 Dec 2014 10:51:07 +0530 - -mysql-community (5.6.22-1ubuntu12.04) precise; urgency=low - - * new upstream release - * fixed d/*server.postinst to allow dropping test db without - setting root password - * init script will now run my_i_db if data dir is not present or empty - * updated init script to read app armor profile on startup - * added more system resources to app armor profile - - -- Akhil Mohan Wed, 24 Sep 2014 14:48:07 +0530 - -mysql-community (5.6.21-1ubuntu12.04) precise; urgency=low - - * new upstream release - * updated d/rules to increment -j8 as make option - * updated d/source/include-binaries to add mysql_no_login plugin - * updated CMake option WITH_EXTRA_CHARSETS from complex to all - - -- Akhil Mohan Wed, 20 Aug 2014 19:12:30 +0530 - -mysql-community (5.6.20-1ubuntu12.04) precise; urgency=low - - * new upstream release - * added fakeroot as build-dep in d/control - * added d/*.dirs for bench, dev and test pkg - * updated d/rules to make compilation verbose - * removed default CFLAGS, CXXFLAGS in d/rules - * added patch for testsuite search paths under d/patches - * modified cmake option for testsuite in d/rules - * updated patch d/fix-mysql_install_db.patch - * enabled two patches in d/patches/series - * removed extra permissions check in d/rules when fixed in source - * modified d/mysql-*-server.postinst to stop removing /usr/my.cnf - * modified d/*-test.* for updated location of testsuite - * updated d/{mysql-*-server.install,rules} to include debug plugins - * updated d/rules to remove storage engine cmake options - * modified data dir permission in d/*server.{pre,post}inst - * updated d/source/include-binaries to add debug plugins - * updated d/rules to rename debug plugins - - -- Akhil Mohan Wed, 02 Jul 2014 17:45:30 +0530 - -mysql-community (5.6.19-1ubuntu12.04) precise; urgency=low - - * new upstream release - * d/rules updated to rid of files removed from source - * modified path for source tar in source pkg - * obscured actual filenames in d/source/include-binaries - * modified d/rules to handle obscured filenames - - -- Akhil Mohan Mon, 05 May 2014 15:45:10 +0530 - -mysql-community (5.6.17-1ubuntu12.04) precise; urgency=low - - * new upstream release - - -- Akhil Mohan Fri, 28 Feb 2014 18:06:30 +0530 diff --git a/packaging/deb-precise/compat b/packaging/deb-precise/compat deleted file mode 100644 index ec635144f600..000000000000 --- a/packaging/deb-precise/compat +++ /dev/null @@ -1 +0,0 @@ -9 diff --git a/packaging/deb-precise/control b/packaging/deb-precise/control deleted file mode 100644 index c65f5371d340..000000000000 --- a/packaging/deb-precise/control +++ /dev/null @@ -1,188 +0,0 @@ -Source: mysql-community -Maintainer: MySQL Release Engineering -Section: database -Priority: optional -Standards-Version: 3.9.3 -Homepage: http://www.mysql.com/ -Build-Depends: debhelper (>= 9.0.0), libaio-dev[linux-any], libncurses5-dev (>= 5.0-6), perl, zlib1g-dev (>= 1:1.1.3-5), po-debconf, psmisc, bison, dh-apparmor, lsb-release, cmake, fakeroot, libnuma-dev - -Package: mysql-server -Architecture: any -Depends: mysql-community-server (= ${binary:Version}), ${misc:Depends} -Description: MySQL Server meta package depending on latest version - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This is a meta package that depends on the latest mysql server - package available in the repository. - -Package: mysql-community-server -Architecture: any -Pre-depends: debconf (>= 0.2.17), adduser -Depends: mysql-common (= ${binary:Version}), apparmor, perl, psmisc, - ${shlibs:Depends}, ${misc:Depends} -Recommends: mysql-client (= ${binary:Version}) -Conflicts: mysql, - mysql-server-5.0, mysql-server-core-5.0, - mysql-server-5.1, mysql-server-core-5.1, - mysql-server-5.5, mysql-server-core-5.5, - mysql-server-5.6, mysql-server-core-5.6, - mysql-commercial-server -Replaces: mysql, - mysql-server-5.0, mysql-server-core-5.0, - mysql-server-5.1, mysql-server-core-5.1, - mysql-server-5.5, mysql-server-core-5.5, - mysql-server-5.6, mysql-server-core-5.6, - mysql-commercial-server -Provides: virtual-mysql-server, virtual-mysql-server-core, - mysql-server-5.6, mysql-server-core-5.6 -Description: MySQL Server - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This package includes the MySQL server binary as well as related - utilities to run and administer a MySQL server. - -Package: mysql-client -Architecture: any -Depends: mysql-community-client (= ${binary:Version}), ${misc:Depends} -Description: MySQL Client meta package depending on latest version - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This is a meta package that depends on the latest mysql client - package available in the repository. - -Package: mysql-community-client -Architecture: any -Depends: mysql-common (= ${binary:Version}), - ${shlibs:Depends}, ${misc:Depends} -Conflicts: mysql, - mysql-client-5.0, mysql-client-core-5.0, - mysql-client-5.1, mysql-client-core-5.1, - mysql-client-5.5, mysql-client-core-5.5, - mysql-client-5.6, mysql-client-core-5.6, - mysql-commercial-client -Replaces: mysql, - mysql-client-5.0, mysql-client-core-5.0, - mysql-client-5.1, mysql-client-core-5.1, - mysql-client-5.5, mysql-client-core-5.5, - mysql-client-5.6, mysql-client-core-5.6, - mysql-commercial-client -Provides: virtual-mysql-client, virtual-mysql-client-core, - mysql-client-5.6, mysql-client-core-5.6 -Description: MySQL Client - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This package contains the standard MySQL clients and - administration tools. - -Package: libmysqlclient18 -Architecture: any -Section: libs -Pre-Depends: ${misc:Pre-Depends} -Multi-Arch: same -Depends: mysql-common (= ${binary:Version}), - ${shlibs:Depends}, ${misc:Depends} -Description: MySQL shared client libraries - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This package contains the shared libraries for MySQL client - applications. - -Package: mysql-common -Architecture: any -Pre-depends: debconf (>= 0.2.17), ${misc:Pre-Depends} -Multi-Arch: foreign -Depends: ${shlibs:Depends}, ${misc:Depends} -Conflicts: mysql -Replaces: mysql, mysql-server-5.5, mysql-server-core-5.5, libmysqlclient-dev -Provides: mysql-common -Description: MySQL Common - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This package contains common files needed by MySQL client - library, MySQL database server, and MySQL embedded server. - -Package: libmysqlclient-dev -Architecture: any -Section: libdevel -Depends: libmysqlclient18 (= ${binary:Version}), - ${shlibs:Depends}, ${misc:Depends} -Description: MySQL development headers - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This package contains the development header files necessary - to develop MySQL client applications. - -Package: libmysqld-dev -Architecture: any -Section: libdevel -Depends: libmysqlclient-dev (= ${binary:Version}), - ${shlibs:Depends}, ${misc:Depends} -Description: MySQL embedded server library - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This package contains the MySQL server as an embedded library. - -Package: mysql-testsuite -Architecture: any -Depends: mysql-community-test (= ${binary:Version}), ${misc:Depends} -Description: MySQL Testsuite meta package depending on latest version - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This is a meta package that depends on the latest mysql test - package available in the repository. - -Package: mysql-community-test -Architecture: any -Depends: mysql-community-server (= ${binary:Version}), - mysql-community-client (= ${binary:Version}), python, - libmysqlclient-dev, ${shlibs:Depends}, ${misc:Depends} -Conflicts: mysql, - mysql-testsuite-5.0, mysql-testsuite-5.1, mysql-testsuite-5.5, - mysql-testsuite-5.6, mysql-commercial-test -Description: MySQL Test Run MTR - The MySQL testsuite - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This package contains the MySQL regression test suite for MySQL - database server. - -Package: mysql-community-bench -Architecture: any -Depends: mysql-community-server (= ${binary:Version}), - ${shlibs:Depends}, ${misc:Depends} -Conflicts: mysql, mysql-commercial-bench -Description: MySQL Bench - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. - -Package: mysql-community-source -Architecture: any -Depends: ${misc:Depends}, ${shlibs:Depends} -Description: MySQL source - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. diff --git a/packaging/deb-precise/copyright b/packaging/deb-precise/copyright deleted file mode 100644 index 482a6765ebd4..000000000000 --- a/packaging/deb-precise/copyright +++ /dev/null @@ -1,41 +0,0 @@ -Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ -Upstream-Name: MySQL Server 5.6 -Upstream-Contact: MySQL Release Engineering -Source: http://dev.mysql.com/ - -Copyright: 2000, 2014, Oracle and/or its affiliates. All rights reserved. -License: - This is a release of MySQL, a dual-license SQL database server. - For the avoidance of doubt, this particular copy of the software - is released under the version 2 of the GNU General Public License. - MySQL is brought to you by Oracle. - . - MySQL FOSS License Exception - We want free and open source software applications under certain - licenses to be able to use specified GPL-licensed MySQL client - libraries despite the fact that not all such FOSS licenses are - compatible with version 2 of the GNU General Public License. - Therefore there are special exceptions to the terms and conditions - of the GPLv2 as applied to these client libraries, which are - identified and described in more detail in the FOSS License - Exception at - . - . - This distribution may include materials developed by third - parties. For license and attribution notices for these - materials, please refer to the documentation that accompanies - this distribution (see the "Licenses for Third-Party Components" - appendix) or view the online documentation at - . - . - GPLv2 Disclaimer - For the avoidance of doubt, except that if any license choice - other than GPL or LGPL is available it will apply instead, - Oracle elects to use only the General Public License version 2 - (GPLv2) at this time for any software where a choice of GPL - license versions is made available with the language indicating - that GPLv2 or any later version may be used, or where a choice - . - The full text of the GNU General Public License version 2 can - be found in the file - `/usr/share/mysql/doc/COPYING'. diff --git a/packaging/deb-precise/extra/apparmor-profile b/packaging/deb-precise/extra/apparmor-profile deleted file mode 100644 index ca5d1f58d6c5..000000000000 --- a/packaging/deb-precise/extra/apparmor-profile +++ /dev/null @@ -1,53 +0,0 @@ -# vim:syntax=apparmor -# Last Modified: Fri Feb 28 18:06:30 2014 -#include - -/usr/sbin/mysqld { - #include - #include - #include - -# Allow system resource access - /sys/devices/system/cpu/ r, - capability sys_resource, - capability dac_override, - capability setuid, - capability setgid, - -# Allow config access - /etc/mysql/conf.d/ r, - /etc/mysql/conf.d/*.cnf r, - /etc/mysql/*.cnf r, - -# Allow pid and socket file access - /run/mysqld/mysqld.pid rw, - /run/mysqld/mysqld.sock rw, - -# Allow read/ write to /tmp - /tmp/ r, - /tmp/* rw, - -# Allow execution of server binary - /usr/sbin/mysqld mr, - /usr/sbin/mysqld-debug mr, - -# Allow plugin access - /usr/lib/mysql/plugin/ r, - /usr/lib/mysql/plugin/*.so* mr, - -# Allow error msg and charset access - /usr/share/mysql/ r, - /usr/share/mysql/** r, - -# Allow data dir access - /var/lib/mysql/ r, - /var/lib/mysql/** rwk, - -# Allow data files dir access - /var/lib/mysql-files/ r, - /var/lib/mysql-files/** rwk, - -# Allow log file access - /var/log/mysql/ r, - /var/log/mysql/** rw, -} diff --git a/packaging/deb-precise/extra/my.cnf b/packaging/deb-precise/extra/my.cnf deleted file mode 100644 index a2b2fd8d107a..000000000000 --- a/packaging/deb-precise/extra/my.cnf +++ /dev/null @@ -1,57 +0,0 @@ -# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# -# The MySQL Community Server configuration file. -# -# For explanations see -# http://dev.mysql.com/doc/mysql/en/server-system-variables.html - -[client] -port = 3306 -socket = /var/run/mysqld/mysqld.sock - -[mysqld_safe] -pid-file = /var/run/mysqld/mysqld.pid -socket = /var/run/mysqld/mysqld.sock -nice = 0 - -[mysqld] -user = mysql -pid-file = /var/run/mysqld/mysqld.pid -socket = /var/run/mysqld/mysqld.sock -port = 3306 -basedir = /usr -datadir = /var/lib/mysql -tmpdir = /tmp -lc-messages-dir = /usr/share/mysql -explicit_defaults_for_timestamp - -# Instead of skip-networking the default is now to listen only on -# localhost which is more compatible and is not less secure. -bind-address = 127.0.0.1 - -log-error = /var/log/mysql/error.log - -# Recommended in standard MySQL setup -sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES - -# Disabling symbolic-links is recommended to prevent assorted security risks -symbolic-links=0 - -# * IMPORTANT: Additional settings that can override those from this file! -# The files must end with '.cnf', otherwise they'll be ignored. -# -!includedir /etc/mysql/conf.d/ diff --git a/packaging/deb-precise/extra/mysql_embedded.1 b/packaging/deb-precise/extra/mysql_embedded.1 deleted file mode 100644 index 735c4e05ae07..000000000000 --- a/packaging/deb-precise/extra/mysql_embedded.1 +++ /dev/null @@ -1 +0,0 @@ -.so man1/mysql.1 diff --git a/packaging/deb-precise/libmysqlclient-dev.dirs b/packaging/deb-precise/libmysqlclient-dev.dirs deleted file mode 100644 index 2772b1138317..000000000000 --- a/packaging/deb-precise/libmysqlclient-dev.dirs +++ /dev/null @@ -1,17 +0,0 @@ -# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -usr/include/mysql -usr/include/mysql/mysql diff --git a/packaging/deb-precise/libmysqlclient-dev.install b/packaging/deb-precise/libmysqlclient-dev.install deleted file mode 100644 index 6794f18c300d..000000000000 --- a/packaging/deb-precise/libmysqlclient-dev.install +++ /dev/null @@ -1,29 +0,0 @@ -# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -usr/include/mysql/*.h -usr/include/mysql/mysql/*.h -usr/include/mysql/mysql/*.h.pp -usr/include/mysql/mysql/psi/*.h -usr/lib/*/libmysqlclient.a -usr/lib/*/libmysqlclient.so -usr/lib/*/libmysqlservices.a -usr/bin/mysql_config -usr/bin/mysql_config_editor -usr/share/man/man1/mysql_config.1 -usr/share/man/man1/mysql_config_editor.1 -# legal -usr/share/doc/libmysqlclient-dev/COPYING -usr/share/doc/libmysqlclient-dev/README diff --git a/packaging/deb-precise/libmysqlclient-dev.lintian-overrides b/packaging/deb-precise/libmysqlclient-dev.lintian-overrides deleted file mode 100644 index 09960eb27301..000000000000 --- a/packaging/deb-precise/libmysqlclient-dev.lintian-overrides +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -libmysqlclient-dev: extra-license-file usr/share/doc/libmysqlclient-dev/LICENSE.mysql -libmysqlclient-dev: extra-license-file usr/share/doc/libmysqlclient-dev/COPYING.gz -libmysqlclient-dev: copyright-should-refer-to-common-license-file-for-lgpl -# Due to static linking this cannot be avoided and hence being overridden -libmysqlclient-dev: embedded-library diff --git a/packaging/deb-precise/libmysqlclient18.install b/packaging/deb-precise/libmysqlclient18.install deleted file mode 100644 index cdfdaa60744f..000000000000 --- a/packaging/deb-precise/libmysqlclient18.install +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -usr/lib/*/libmysqlclient.so.* -# legal -usr/share/doc/libmysqlclient18/COPYING -usr/share/doc/libmysqlclient18/README diff --git a/packaging/deb-precise/libmysqlclient18.lintian-overrides b/packaging/deb-precise/libmysqlclient18.lintian-overrides deleted file mode 100644 index 1f26511a13d0..000000000000 --- a/packaging/deb-precise/libmysqlclient18.lintian-overrides +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -libmysqlclient18: extra-license-file usr/share/doc/libmysqlclient18/LICENSE.mysql -libmysqlclient18: extra-license-file usr/share/doc/libmysqlclient18/COPYING.gz -libmysqlclient18: copyright-should-refer-to-common-license-file-for-lgpl -# Due to static linking this cannot be avoided and hence being overridden -libmysqlclient18: embedded-library diff --git a/packaging/deb-precise/libmysqld-dev.install b/packaging/deb-precise/libmysqld-dev.install deleted file mode 100644 index f2b59fcb9a28..000000000000 --- a/packaging/deb-precise/libmysqld-dev.install +++ /dev/null @@ -1,20 +0,0 @@ -# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -usr/lib/*/libmysqld.a -usr/lib/*/libmysqld-debug.a -# legal -usr/share/doc/libmysqld-dev/COPYING -usr/share/doc/libmysqld-dev/README diff --git a/packaging/deb-precise/libmysqld-dev.lintian-overrides b/packaging/deb-precise/libmysqld-dev.lintian-overrides deleted file mode 100644 index 35caaeca0121..000000000000 --- a/packaging/deb-precise/libmysqld-dev.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -libmysqld-dev: extra-license-file usr/share/doc/libmysqld-dev/LICENSE.mysql -libmysqld-dev: extra-license-file usr/share/doc/libmysqld-dev/COPYING.gz -libmysqld-dev: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-precise/mysql-client.install b/packaging/deb-precise/mysql-client.install deleted file mode 100644 index 0a24793e11ea..000000000000 --- a/packaging/deb-precise/mysql-client.install +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# legal -usr/share/doc/mysql-client/COPYING -usr/share/doc/mysql-client/README diff --git a/packaging/deb-precise/mysql-client.lintian-overrides b/packaging/deb-precise/mysql-client.lintian-overrides deleted file mode 100644 index 5c4891c9190f..000000000000 --- a/packaging/deb-precise/mysql-client.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-client: extra-license-file usr/share/doc/mysql-client/LICENSE.mysql -mysql-client: extra-license-file usr/share/doc/mysql-client/COPYING.gz -mysql-client: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-precise/mysql-common.dirs b/packaging/deb-precise/mysql-common.dirs deleted file mode 100644 index a3b0c16a8e40..000000000000 --- a/packaging/deb-precise/mysql-common.dirs +++ /dev/null @@ -1,16 +0,0 @@ -# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -etc/mysql/conf.d diff --git a/packaging/deb-precise/mysql-common.install b/packaging/deb-precise/mysql-common.install deleted file mode 100644 index 2a547a807a9d..000000000000 --- a/packaging/deb-precise/mysql-common.install +++ /dev/null @@ -1,29 +0,0 @@ -# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -etc/mysql/my.cnf -usr/share/aclocal/mysql.m4 -usr/share/mysql/docs/INFO_SRC -usr/share/mysql/docs/INFO_BIN -usr/share/mysql/docs/ChangeLog -# localized error msgs -usr/share/mysql/*/errmsg.sys -usr/share/mysql/errmsg-utf8.txt -# charsets -usr/share/mysql/charsets/*.xml -usr/share/mysql/charsets/README -# legal -usr/share/doc/mysql-common/COPYING -usr/share/doc/mysql-common/README diff --git a/packaging/deb-precise/mysql-common.lintian-overrides b/packaging/deb-precise/mysql-common.lintian-overrides deleted file mode 100644 index 70ddcdf63713..000000000000 --- a/packaging/deb-precise/mysql-common.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-common: extra-license-file usr/share/doc/mysql-common/LICENSE.mysql -mysql-common: extra-license-file usr/share/doc/mysql-common/COPYING.gz -mysql-common: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-precise/mysql-community-bench.dirs b/packaging/deb-precise/mysql-community-bench.dirs deleted file mode 100644 index 9d0acf491338..000000000000 --- a/packaging/deb-precise/mysql-community-bench.dirs +++ /dev/null @@ -1,17 +0,0 @@ -# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -usr/lib/mysql -usr/lib/mysql/sql-bench diff --git a/packaging/deb-precise/mysql-community-bench.install b/packaging/deb-precise/mysql-community-bench.install deleted file mode 100644 index 8aa8be6facba..000000000000 --- a/packaging/deb-precise/mysql-community-bench.install +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -usr/lib/mysql/sql-bench/* -# legal -usr/share/doc/mysql-community-bench/COPYING -usr/share/doc/mysql-community-bench/README diff --git a/packaging/deb-precise/mysql-community-bench.lintian-overrides b/packaging/deb-precise/mysql-community-bench.lintian-overrides deleted file mode 100644 index 04df14ea0469..000000000000 --- a/packaging/deb-precise/mysql-community-bench.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-community-bench: extra-license-file usr/share/doc/mysql-community-bench/LICENSE.mysql -mysql-community-bench: extra-license-file usr/share/doc/mysql-community-bench/COPYING.gz -mysql-community-bench: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-precise/mysql-community-client.install b/packaging/deb-precise/mysql-community-client.install deleted file mode 100644 index c6a27ce6f4a3..000000000000 --- a/packaging/deb-precise/mysql-community-client.install +++ /dev/null @@ -1,60 +0,0 @@ -# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# binaries -usr/bin/innochecksum -usr/bin/myisam_ftdump -usr/bin/mysql -usr/bin/mysql_embedded -usr/bin/mysqlaccess -usr/bin/mysqlaccess.conf -usr/bin/mysqladmin -usr/bin/mysqlbug -usr/bin/mysqlcheck -usr/bin/mysql_client_test -usr/bin/mysql_client_test_embedded -usr/bin/mysqldump -usr/bin/mysqldumpslow -usr/bin/mysql_find_rows -usr/bin/mysql_fix_extensions -usr/bin/mysqlimport -usr/bin/mysql_plugin -usr/bin/mysqlshow -usr/bin/mysqlslap -usr/bin/mysql_waitpid -# man pages -usr/share/man/man1/innochecksum.1 -usr/share/man/man1/myisam_ftdump.1 -usr/share/man/man1/mysql.1 -usr/share/man/man1/mysql_embedded.1 -usr/share/man/man1/mysqlaccess.1 -usr/share/man/man1/mysqladmin.1 -usr/share/man/man1/mysqlbug.1 -usr/share/man/man1/mysqlcheck.1 -usr/share/man/man1/mysql_client_test.1 -usr/share/man/man1/mysql_client_test_embedded.1 -usr/share/man/man1/mysqldump.1 -usr/share/man/man1/mysqldumpslow.1 -usr/share/man/man1/mysql_find_rows.1 -usr/share/man/man1/mysql_fix_extensions.1 -usr/share/man/man1/mysqlimport.1 -usr/share/man/man1/mysqlman.1 -usr/share/man/man1/mysql_plugin.1 -usr/share/man/man1/mysqlshow.1 -usr/share/man/man1/mysqlslap.1 -usr/share/man/man1/mysql_waitpid.1 -# legal -usr/share/doc/mysql-community-client/COPYING -usr/share/doc/mysql-community-client/README diff --git a/packaging/deb-precise/mysql-community-client.lintian-overrides b/packaging/deb-precise/mysql-community-client.lintian-overrides deleted file mode 100644 index 589293560ee7..000000000000 --- a/packaging/deb-precise/mysql-community-client.lintian-overrides +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-community-client: extra-license-file usr/share/doc/mysql-community-client/LICENSE.mysql -mysql-community-client: extra-license-file usr/share/doc/mysql-community-clienti/COPYING.gz -mysql-community-client: copyright-should-refer-to-common-license-file-for-lgpl -# Due to static linking this cannot be avoided and hence being overridden -mysql-community-client: embedded-library diff --git a/packaging/deb-precise/mysql-community-server.config b/packaging/deb-precise/mysql-community-server.config deleted file mode 100755 index cb6c39cfd5b9..000000000000 --- a/packaging/deb-precise/mysql-community-server.config +++ /dev/null @@ -1,88 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -. /usr/share/debconf/confmodule - -if [ "$1" = "configure" ] && [ -z "$2" ]; -then - - set -e - - PKG_LIST=mysql-server-5.5:mysql-server-5.6:mysql-community-server:mysql-commercial-server - INSTALLED_PKG=none - MYSQLDATA=/var/lib/mysql - - IFS_BACKUP=${IFS} - IFS=":" - for PKG in ${PKG_LIST}; - do - STATUS=$(dpkg -s ${PKG} 2> /dev/null | grep Status: | cut -d' ' -f4) - if [ "${STATUS}" = "installed" ]; - then - INSTALLED_PKG=${PKG} - break - fi - done - IFS=${IFS_BACKUP} - - if [ "${INSTALLED_PKG}" = "none" ]; - then - if [ -d ${MYSQLDATA} -o -L ${MYSQLDATA} ]; - then - db_input high mysql-community-server/data-dir || true - else - db_fset mysql-community-server/data-dir seen true - fi - - while :; do - PASSWD="" - db_input high mysql-community-server/root-pass || true - db_go - - db_get mysql-community-server/root-pass - if [ -z "${RET}" ]; - then - db_fset mysql-community-server/root-pass seen true - db_fset mysql-community-server/re-root-pass seen true - break - fi - PASSWD="${RET}" - - db_input high mysql-community-server/re-root-pass || true - db_go - - db_get mysql-community-server/re-root-pass - if [ "${RET}" == "${PASSWD}" ]; - then - PASSWD="" - break - fi - - db_fset mysql-community-server/root-pass-mismatch seen false - db_input critical mysql-community-server/root-pass-mismatch - db_set mysql-community-server/root-pass "" - db_set mysql-community-server/re-root-pass "" - done - - else - db_fset mysql-community-server/data-dir seen true - db_fset mysql-community-server/root-pass seen true - db_fset mysql-community-server/re-root-pass seen true - fi - - set +e -fi diff --git a/packaging/deb-precise/mysql-community-server.dirs b/packaging/deb-precise/mysql-community-server.dirs deleted file mode 100644 index f677b6f3747b..000000000000 --- a/packaging/deb-precise/mysql-community-server.dirs +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -etc/mysql/conf.d -etc/init.d -usr/lib/mysql -usr/lib/mysql/plugin diff --git a/packaging/deb-precise/mysql-community-server.install b/packaging/deb-precise/mysql-community-server.install deleted file mode 100644 index a1f5d0535c47..000000000000 --- a/packaging/deb-precise/mysql-community-server.install +++ /dev/null @@ -1,86 +0,0 @@ -# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# binaries -usr/bin/msql2mysql -usr/bin/myisamchk -usr/bin/myisamlog -usr/bin/myisampack -usr/bin/my_print_defaults -usr/bin/mysqlbinlog -usr/bin/mysql_convert_table_format -usr/bin/mysqld_multi -usr/bin/mysqld_safe -usr/bin/mysqlhotcopy -usr/bin/mysql_install_db -usr/bin/mysql_secure_installation -usr/bin/mysql_setpermission -usr/bin/mysqltest -usr/bin/mysqltest_embedded -usr/bin/mysql_tzinfo_to_sql -usr/bin/mysql_upgrade -usr/bin/mysql_zap -usr/bin/perror -usr/bin/replace -usr/bin/resolveip -usr/bin/resolve_stack_dump -usr/sbin/mysqld -# debug binary -usr/sbin/mysqld-debug -# man pages -usr/share/man/man1/comp_err.1 -usr/share/man/man1/msql2mysql.1 -usr/share/man/man1/myisamchk.1 -usr/share/man/man1/myisamlog.1 -usr/share/man/man1/myisampack.1 -usr/share/man/man1/my_print_defaults.1 -usr/share/man/man1/mysqlbinlog.1 -usr/share/man/man1/mysql_convert_table_format.1 -usr/share/man/man1/mysqld_multi.1 -usr/share/man/man1/mysqld_safe.1 -usr/share/man/man1/mysqlhotcopy.1 -usr/share/man/man1/mysql_install_db.1 -usr/share/man/man1/mysql_secure_installation.1 -usr/share/man/man1/mysql.server.1 -usr/share/man/man1/mysql_setpermission.1 -usr/share/man/man1/mysql-stress-test.pl.1 -usr/share/man/man1/mysqltest.1 -usr/share/man/man1/mysqltest_embedded.1 -usr/share/man/man1/mysql_tzinfo_to_sql.1 -usr/share/man/man1/mysql_upgrade.1 -usr/share/man/man1/mysql_zap.1 -usr/share/man/man1/perror.1 -usr/share/man/man1/replace.1 -usr/share/man/man1/resolveip.1 -usr/share/man/man1/resolve_stack_dump.1 -usr/share/man/man8/mysqld.8 -# app armor profile -etc/apparmor.d/usr.sbin.mysqld -# SQL files -usr/share/mysql/*.sql -# plugins -usr/lib/mysql/plugin/*.so -usr/lib/mysql/plugin/debug/*.so -usr/lib/mysql/plugin/daemon_example.ini -usr/lib/mysql/plugin/debug/daemon_example.ini -# support files -usr/share/mysql/mysqld_multi.server -usr/share/mysql/magic -usr/share/mysql/mysql-log-rotate -usr/share/mysql/my-default.cnf -usr/share/mysql/dictionary.txt -# legal -usr/share/doc/mysql-community-server/COPYING -usr/share/doc/mysql-community-server/README diff --git a/packaging/deb-precise/mysql-community-server.lintian-overrides b/packaging/deb-precise/mysql-community-server.lintian-overrides deleted file mode 100644 index 08b386543cbc..000000000000 --- a/packaging/deb-precise/mysql-community-server.lintian-overrides +++ /dev/null @@ -1,23 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-community-server: extra-license-file usr/share/doc/mysql-community-server/LICENSE.mysql -mysql-community-server: extra-license-file usr/share/doc/mysql-community-server/COPYING.gz -mysql-community-server: copyright-should-refer-to-common-license-file-for-lgpl -# Due to static linking this cannot be avoided and hence being overridden -mysql-community-server: embedded-library -# Since we ship debug plugins so this error is overridden -mysql-community-server: unstripped-binary-or-object usr/lib/mysql/plugin/debug/* diff --git a/packaging/deb-precise/mysql-community-server.mysql.init b/packaging/deb-precise/mysql-community-server.mysql.init deleted file mode 100755 index 475ce0fe7092..000000000000 --- a/packaging/deb-precise/mysql-community-server.mysql.init +++ /dev/null @@ -1,192 +0,0 @@ -#!/bin/bash -# -### BEGIN INIT INFO -# Provides: mysql -# Required-Start: $remote_fs $syslog -# Required-Stop: $remote_fs $syslog -# Should-Start: $network $time -# Should-Stop: $network $time -# Default-Start: 2 3 4 5 -# Default-Stop: 0 1 6 -# Short-Description: Start/ Stop MySQL Community Server daemon -# Description: This service script facilitates startup and shutdown of -# mysqld daemon throught its wrapper script mysqld_safe -### END INIT INFO -# - -# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -. /lib/lsb/init-functions - -cd / -umask 077 - -MYSQLDATA=/var/lib/mysql -VERSION=$(mysqld --version | grep mysqld | cut -d' ' -f4) - -get_mysql_option() { - RESULT=$(my_print_defaults "$1" | sed -n "s/^--$2=//p" | tail -n 1) - if [ -z "$RESULT" ]; - then - RESULT="$3" - fi - echo $RESULT -} - -get_running () { - PIDFILE=$(get_mysql_option mysqld_safe pid-file "") - if [ -z "$PIDFILE" ]; - then - PIDFILE=$(get_mysql_option mysqld pid-file "$MYSQLDATA/$(hostname).pid") - fi - if [ -e "$PIDFILE" ] && [ -d "/proc/$(cat "$PIDFILE")" ]; - then - echo 1 - else - echo 0 - fi -} - -server_stop () { - RUNNING=$(get_running) - COUNT=0 - while :; do - COUNT=$(( COUNT+1 )) - echo -n . - if [ "${RUNNING}" -eq 0 ]; - then - echo - break - fi - if [ "${COUNT}" -gt 15 ]; - then - echo - return 1 - fi - RUNNING=$(get_running) - sleep 1 - done - return 0 -} - -case "$1" in - 'start') - RUNNING=$(get_running) - if [ "${RUNNING}" -eq 1 ]; - then - log_action_msg "A MySQL Server is already started" - else - MYSQLRUN=/var/run/mysqld - MYSQLDATA=/var/lib/mysql - MYSQLLOG=/var/log/mysql - - if [ ! -d ${MYSQLDATA} -a ! -L ${MYSQLDATA} ]; - then - mkdir ${MYSQLDATA} - chown mysql:mysql ${MYSQLDATA} - chmod 750 ${MYSQLDATA} - fi - - if [ ! -d "${MYSQLDATA}/mysql" -a ! -L "${MYSQLDATA}/mysql" ]; - then - mkdir ${MYSQLDATA}/mysql - chown mysql:mysql ${MYSQLDATA}/mysql - chmod 750 ${MYSQLDATA}/mysql - fi - - if [ ! "$(ls -A ${MYSQLDATA}/mysql)" ]; - then - mysql_install_db --user=mysql > /dev/null - fi - - if [ ! -d ${MYSQLLOG} -a ! -L ${MYSQLLOG} ]; - then - mkdir ${MYSQLLOG} - chown mysql:adm ${MYSQLLOG} - chmod 750 ${MYSQLLOG} - touch ${MYSQLLOG}/error.log - chmod 640 ${MYSQLLOG}/error.log - chown mysql:adm ${MYSQLLOG}/error.log - fi - - if [ ! -d "${MYSQLRUN}" -a ! -L "${MYSQLRUN}" ]; - then - mkdir ${MYSQLRUN} - chown mysql:mysql ${MYSQLRUN} - chmod 755 ${MYSQLRUN} - fi - - /lib/init/apparmor-profile-load usr.sbin.mysqld - - su - mysql -s /bin/bash -c "mysqld_safe > /dev/null &" - for i in 1 2 3 4 5 6; - do - sleep 1 - echo -n . - done - echo - RUNNING=$(get_running) - if [ "${RUNNING}" -eq 1 ]; - then - log_action_msg "MySQL Community Server ${VERSION} is started" - else - log_action_msg "MySQL Community Server ${VERSION} did not start. Please check logs for more details." - fi - fi - ;; - - 'stop') - RUNNING=$(get_running) - if [ "${RUNNING}" -eq 1 ]; - then - killall -15 mysqld - server_stop - if [ "$?" -eq 0 ]; - then - log_action_msg "MySQL Community Server ${VERSION} is stopped" - else - log_action_msg "Attempt to shutdown MySQL Community Server ${VERSION} timed out" - fi - else - log_action_msg "MySQL Community Server ${VERSION} is already stopped" - fi - ;; - - 'restart'|'reload'|'force-reload') - log_action_msg "Stopping MySQL Community Server ${VERSION}" - $0 stop - log_action_msg "Re-starting MySQL Community Server ${VERSION}" - $0 start - ;; - - 'status') - RUNNING=$(get_running) - if [ ${RUNNING} -eq 1 ]; - then - log_action_msg "MySQL Community Server ${VERSION} is running" - else - log_action_msg "MySQL Community Server ${VERSION} is not running" - exit 3 - fi - ;; - - *) - echo "Usage: $SELF start|stop|restart|reload|force-reload|status" - exit 1 - ;; -esac - -exit 0 diff --git a/packaging/deb-precise/mysql-community-server.postinst b/packaging/deb-precise/mysql-community-server.postinst deleted file mode 100755 index 0fe3dc1227cf..000000000000 --- a/packaging/deb-precise/mysql-community-server.postinst +++ /dev/null @@ -1,102 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -. /usr/share/debconf/confmodule - -take_upstart_job_backup () { - if [ -e "/etc/init/mysql.conf" ] && [ -d "/var/lib/mysql" ]; - then - mv /etc/init/mysql.conf /var/lib/mysql/.mysql.conf.backup - fi -} - -case "$1" in - configure) - -# MySQL 5.6.34 needs this - MYSQLFILES=/var/lib/mysql-files - if [ ! -d ${MYSQLFILES} -a ! -L ${MYSQLFILES} ]; - then - mkdir ${MYSQLFILES} - chown mysql:mysql ${MYSQLFILES} - chmod 770 ${MYSQLFILES} - fi - - if [ -z "$2" ]; - then - set -e - - MYSQLDATA=/var/lib/mysql - - if [ ! -d "${MYSQLDATA}/mysql" -a ! -L "${MYSQLDATA}/mysql" ]; - then - mkdir ${MYSQLDATA}/mysql - chown mysql:mysql ${MYSQLDATA}/mysql - chmod 750 ${MYSQLDATA}/mysql - if [ ! "$(ls -A ${MYSQLDATA}/mysql)" ]; - then - mysql_install_db --user=mysql > /dev/null - fi - fi - - db_get mysql-community-server/root-pass && PASSWD=${RET} - if [ ! -z "${PASSWD}" ]; - then - db_set mysql-community-server/root-pass "" - db_set mysql-community-server/re-root-pass "" - PASSWD="UPDATE user SET password=PASSWORD('${PASSWD}') WHERE user='root';" - else - PASSWD="" - fi - - SQL=`mktemp` - if [ -f "${SQL}" ]; - then - chmod 700 ${SQL} - cat << EOF > ${SQL} -USE mysql; -${PASSWD} -DELETE FROM user WHERE user=''; -FLUSH PRIVILEGES; -EOF - mysqld --basedir=/usr --bootstrap --user=mysql --skip-grant-tables < $SQL - PASSWD="" - rm -f ${SQL} - fi - - set +e - - fi - - ;; - - abort-upgrade|abort-remove|abort-configure) - - ;; - - *) - exit 1 - ;; -esac - -db_stop - -take_upstart_job_backup - -#DEBHELPER# - -exit 0 diff --git a/packaging/deb-precise/mysql-community-server.postrm b/packaging/deb-precise/mysql-community-server.postrm deleted file mode 100755 index 55f83a3bec28..000000000000 --- a/packaging/deb-precise/mysql-community-server.postrm +++ /dev/null @@ -1,165 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -if [ "$1" = purge ] && [ -e /usr/share/debconf/confmodule ]; -then -. /usr/share/debconf/confmodule -fi - -place_upstart_job_back () { - if [ -e "/var/lib/mysql/.mysql.conf.backup" ]; - then - mv /var/lib/mysql/.mysql.conf.backup /etc/init/mysql.conf - fi -} - -get_pcount () { - PSCOUNT=$(ps -ef | grep "/usr/sbin/mysqld" | wc -l) - echo "${PSCOUNT}" -} - -server_stop () { - PSCOUNT=$(get_pcount) - COUNT=0 - while :; do - COUNT=$(( COUNT+1 )) - echo -n . - if [ "${PSCOUNT}" -eq 1 ]; - then - echo - break - fi - if [ "${COUNT}" -gt 15 ]; - then - echo - return 1 - fi - PSCOUNT=$(get_pcount) - sleep 1 - done - return 0 -} - -case "$1" in - remove) - - set -e - - place_upstart_job_back - - set +e - - ;; - - purge) - - set -e - - place_upstart_job_back - - MYSQLDATA=/var/lib/mysql - MYSQLLOG=/var/log/mysql - MYSQLRUN=/var/run/mysqld - MYSQLFILES=/var/lib/mysql-files - - server_stop - - db_input high mysql-community-server/remove-data-dir || true - db_go - db_get mysql-community-server/remove-data-dir && RMDATADIR=${RET} - if [ "${RMDATADIR}" = "true" ]; - then - if [ -d ${MYSQLRUN} ] || [ -L ${MYSQLRUN} ]; - then - rm -rf ${MYSQLRUN} - fi - - if [ -d ${MYSQLLOG} ] || [ -L ${MYSQLLOG} ]; - then - rm -rf ${MYSQLLOG} - fi - - if [ -d ${MYSQLDATA} ] || [ -L ${MYSQLDATA} ]; - then - rm -rf ${MYSQLDATA} - fi - - if [ -d ${MYSQLFILES} ] || [ -L ${MYSQLFILES} ]; - then - rm -rf ${MYSQLFILES} - fi - - if getent passwd mysql >/dev/null; - then - userdel mysql - fi - fi - - set +e - ;; - - abort-install) - - set -e - - place_upstart_job_back - - if [ -x "/etc/init.d/mysql" ]; - then - invoke-rc.d mysql start || exit $? - else - if [ -d ${MYSQLRUN} ] || [ -L ${MYSQLRUN} ]; - then - rm -rf ${MYSQLRUN} - fi - - if [ -d ${MYSQLLOG} ] || [ -L ${MYSQLLOG} ]; - then - rm -rf ${MYSQLLOG} - fi - - if [ -d ${MYSQLDATA} ] || [ -L ${MYSQLDATA} ]; - then - rm -rf ${MYSQLDATA} - fi - - if [ -d ${MYSQLFILES} ] || [ -L ${MYSQLFILES} ]; - then - rm -rf ${MYSQLFILES} - fi - - if getent passwd mysql >/dev/null; - then - userdel mysql - fi - fi - - set +e - ;; - - upgrade|abort-upgrade) - - ;; - - *) - exit 1 - ;; -esac - -#DEBHELPER# - -exit 0 diff --git a/packaging/deb-precise/mysql-community-server.preinst b/packaging/deb-precise/mysql-community-server.preinst deleted file mode 100755 index e5b3b7719b69..000000000000 --- a/packaging/deb-precise/mysql-community-server.preinst +++ /dev/null @@ -1,131 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -get_pcount () { - PSCOUNT=$(ps -ef | grep "/usr/sbin/mysqld" | wc -l) - echo "${PSCOUNT}" -} - -server_stop () { - PSCOUNT=$(get_pcount) - COUNT=0 - while :; do - COUNT=$(( COUNT+1 )) - echo -n . - if [ "${PSCOUNT}" -eq 1 ]; - then - echo - break - fi - if [ "${COUNT}" -gt 15 ]; - then - echo - return 1 - fi - PSCOUNT=$(get_pcount) - sleep 1 - done - return 0 -} - -case "$1" in - install) - - if [ -z "$2" ]; - then - - set -e - - if [ -x "/etc/init.d/mysql" ]; - then - invoke-rc.d mysql stop || exit $? - server_stop - fi - - MYSQLDATA=/var/lib/mysql - MYSQLFILES=/var/lib/mysql-files - MYSQLLOG=/var/log/mysql - MYSQLRUN=/var/run/mysqld - - if ! getent group mysql >/dev/null; - then - addgroup --system mysql >/dev/null - fi - - if ! getent passwd mysql >/dev/null; - then - adduser --ingroup mysql --system --disabled-login --no-create-home --home ${MYSQLDATA} --shell /bin/false --gecos "MySQL Server" mysql >/dev/null - fi - - if [ ! -d ${MYSQLDATA} -a ! -L ${MYSQLDATA} ]; - then - mkdir ${MYSQLDATA} - chown mysql:mysql ${MYSQLDATA} - chmod 750 ${MYSQLDATA} - fi - - if [ ! -d ${MYSQLFILES} -a ! -L ${MYSQLFILES} ]; - then - mkdir ${MYSQLFILES} - chown mysql:mysql ${MYSQLFILES} - chmod 770 ${MYSQLFILES} - fi - - if [ ! -d ${MYSQLLOG} -a ! -L ${MYSQLLOG} ]; - then - mkdir ${MYSQLLOG} - chown mysql:adm ${MYSQLLOG} - chmod 750 ${MYSQLLOG} - touch ${MYSQLLOG}/error.log - chmod 640 ${MYSQLLOG}/error.log - chown mysql:adm ${MYSQLLOG}/error.log - fi - - if [ ! -d ${MYSQLRUN} -a ! -L ${MYSQLRUN} ]; - then - mkdir ${MYSQLRUN} - chown mysql:mysql ${MYSQLRUN} - chmod 755 ${MYSQLRUN} - fi - - set +e - - fi - - ;; - - upgrade) - - set -e - - #DEBHELPER# - server_stop - - set +e - - ;; - - abort-upgrade) - - ;; - - *) - exit 1 - ;; -esac - -exit 0 diff --git a/packaging/deb-precise/mysql-community-server.prerm b/packaging/deb-precise/mysql-community-server.prerm deleted file mode 100755 index 7509de7a948c..000000000000 --- a/packaging/deb-precise/mysql-community-server.prerm +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -set -e - -#DEBHELPER# - -set +e - -exit 0 diff --git a/packaging/deb-precise/mysql-community-server.templates b/packaging/deb-precise/mysql-community-server.templates deleted file mode 100644 index 2469d917769e..000000000000 --- a/packaging/deb-precise/mysql-community-server.templates +++ /dev/null @@ -1,34 +0,0 @@ -Template: mysql-community-server/root-pass -Type: password -Description: Enter root password: - Please provide a strong password that will be set for the root account of your MySQL database. - Leave it blank if you do not wish to set or change the root password at this time. - -Template: mysql-community-server/re-root-pass -Type: password -Description: Re-enter root password: - Now that you have selected a password for the root account, please confirm by typing it again. Do not share the password with anyone. - -Template: mysql-community-server/root-pass-mismatch -Type: error -Description: The two passwords did not match - Please try again. Make sure you type the exact same password twice. - -Template: mysql-community-server/remove-data-dir -Type: boolean -Default: false -Description: Remove data directory at /var/lib/mysql ? - This operation will remove the data directory that stores all the databases, tables and related meta-data. - Additionally, any import or export files stored at '/var/lib/mysql-files' will be removed along with directory. - It is highly recommended to take data backup before removing the data directory. - -Template: mysql-community-server/data-dir -Type: note -Description: Data directory found when no MySQL server package is installed - A data directory '/var/lib/mysql' is present on this system when no MySQL server - package is currently installed on the system. The directory may be under control of - server package received from third-party vendors. It may also be an unclaimed data - directory from previous removal of mysql packages. - . - It is highly recommended to take data backup. If you have not done so, now would be - the time to take backup in another shell. Once completed, press 'Ok' to continue. diff --git a/packaging/deb-precise/mysql-community-source.install b/packaging/deb-precise/mysql-community-source.install deleted file mode 100644 index 326c5dfb575e..000000000000 --- a/packaging/deb-precise/mysql-community-source.install +++ /dev/null @@ -1,20 +0,0 @@ -# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -../*.dsc usr/src/mysql/ -../*.tar.gz usr/src/mysql/ -# legal -usr/share/doc/mysql-community-source/COPYING -usr/share/doc/mysql-community-source/README diff --git a/packaging/deb-precise/mysql-community-source.lintian-overrides b/packaging/deb-precise/mysql-community-source.lintian-overrides deleted file mode 100644 index 9ca84e90712c..000000000000 --- a/packaging/deb-precise/mysql-community-source.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-community-source: extra-license-file usr/share/doc/mysql-community-source/LICENSE.mysql -mysql-community-source: extra-license-file usr/share/doc/mysql-community-source/COPYING.gz -mysql-community-source: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-precise/mysql-community-test.dirs b/packaging/deb-precise/mysql-community-test.dirs deleted file mode 100644 index f93ca25bd85b..000000000000 --- a/packaging/deb-precise/mysql-community-test.dirs +++ /dev/null @@ -1,16 +0,0 @@ -# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -usr/lib/mysql-test diff --git a/packaging/deb-precise/mysql-community-test.install b/packaging/deb-precise/mysql-community-test.install deleted file mode 100644 index d5f820dd6fc4..000000000000 --- a/packaging/deb-precise/mysql-community-test.install +++ /dev/null @@ -1,20 +0,0 @@ -# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -usr/lib/mysql-test/* -usr/share/man/man1/mysql-test-run.pl.1 -# legal -usr/share/doc/mysql-community-test/COPYING -usr/share/doc/mysql-community-test/README diff --git a/packaging/deb-precise/mysql-community-test.links b/packaging/deb-precise/mysql-community-test.links deleted file mode 100644 index aedf2db3b736..000000000000 --- a/packaging/deb-precise/mysql-community-test.links +++ /dev/null @@ -1,17 +0,0 @@ -# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -usr/lib/mysql-test/mysql-test-run.pl usr/lib/mysql-test/mysql-test-run -usr/lib/mysql-test/mysql-test-run.pl usr/lib/mysql-test/mtr diff --git a/packaging/deb-precise/mysql-community-test.lintian-overrides b/packaging/deb-precise/mysql-community-test.lintian-overrides deleted file mode 100644 index ff273bbe9135..000000000000 --- a/packaging/deb-precise/mysql-community-test.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-community-test: extra-license-file usr/share/doc/mysql-community-test/LICENSE.mysql -mysql-community-test: extra-license-file usr/share/doc/mysql-community-test/COPYING.gz -mysql-community-test: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-precise/mysql-server.install b/packaging/deb-precise/mysql-server.install deleted file mode 100644 index 07f36ef57d80..000000000000 --- a/packaging/deb-precise/mysql-server.install +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# legal -usr/share/doc/mysql-server/COPYING -usr/share/doc/mysql-server/README diff --git a/packaging/deb-precise/mysql-server.lintian-overrides b/packaging/deb-precise/mysql-server.lintian-overrides deleted file mode 100644 index 487709765b02..000000000000 --- a/packaging/deb-precise/mysql-server.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-server: extra-license-file usr/share/doc/mysql-server/LICENSE.mysql -mysql-server: extra-license-file usr/share/doc/mysql-server/COPYING.gz -mysql-server: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-precise/mysql-testsuite.install b/packaging/deb-precise/mysql-testsuite.install deleted file mode 100644 index 6a6e5f505b0f..000000000000 --- a/packaging/deb-precise/mysql-testsuite.install +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# legal -usr/share/doc/mysql-testsuite/COPYING -usr/share/doc/mysql-testsuite/README diff --git a/packaging/deb-precise/mysql-testsuite.lintian-overrides b/packaging/deb-precise/mysql-testsuite.lintian-overrides deleted file mode 100644 index 37488fe69b72..000000000000 --- a/packaging/deb-precise/mysql-testsuite.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-testsuite: extra-license-file usr/share/doc/mysql-testsuite/LICENSE.mysql -mysql-testsuite: extra-license-file usr/share/doc/mysql-testsuite/COPYING.gz -mysql-testsuite: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-precise/patches/fix-man-page-links.patch b/packaging/deb-precise/patches/fix-man-page-links.patch deleted file mode 100644 index 004ccdf77d03..000000000000 --- a/packaging/deb-precise/patches/fix-man-page-links.patch +++ /dev/null @@ -1,14 +0,0 @@ -From: Akhil Mohan -Description: Fix path in man page link. -Bug: http://bugs.mysql.com/bug.php?id=70952 - ---- a/man/mysql_client_test_embedded.1 2013-11-08 19:00:22.000000000 +0530 -+++ b/man/mysql_client_test_embedded.1 2013-11-14 19:29:56.768315219 +0530 -@@ -1 +1 @@ --.so man-gpl-tmp2/mysql_client_test.1 -+.so man1/mysql_client_test.1 ---- a/man/mysqltest_embedded.1 2013-11-08 19:00:22.000000000 +0530 -+++ b/man/mysqltest_embedded.1 2013-11-14 19:31:19.079280675 +0530 -@@ -1 +1 @@ --.so man-gpl-tmp2/mysqltest.1 -+.so man1/mysqltest.1 diff --git a/packaging/deb-precise/patches/fix-mtr-search-paths.patch b/packaging/deb-precise/patches/fix-mtr-search-paths.patch deleted file mode 100644 index 8a27a091e6ce..000000000000 --- a/packaging/deb-precise/patches/fix-mtr-search-paths.patch +++ /dev/null @@ -1,13 +0,0 @@ -From: Akhil Mohan -Description: Adding extra search path for testsuite. - ---- a/mysql-test/lib/mtr_cases.pm 2014-02-24 13:14:37 +0530 -+++ b/mysql-test/lib/mtr_cases.pm 2014-07-02 11:46:24 +0530 -@@ -288,6 +288,7 @@ - { - $suitedir= my_find_dir($::basedir, - ["share/mysql-test/suite", -+ "lib/mysql-test/suite", - "mysql-test/suite", - "internal/mysql-test/suite", - "mysql-test", diff --git a/packaging/deb-precise/patches/fix-mysql_install_db.patch b/packaging/deb-precise/patches/fix-mysql_install_db.patch deleted file mode 100644 index 41311b2c8f9e..000000000000 --- a/packaging/deb-precise/patches/fix-mysql_install_db.patch +++ /dev/null @@ -1,43 +0,0 @@ -From: Terje Røsten -Description: Maintains the pending --skip-my-cnf option in mainline -Bug: - -diff --git a/scripts/mysql_install_db.pl.in b/scripts/mysql_install_db.pl.in -index 440a977..7d068fc 100644 ---- a/scripts/mysql_install_db.pl.in -+++ b/scripts/mysql_install_db.pl.in -@@ -113,6 +113,7 @@ EOF2 - print <{srcdir} and $opt->{basedir} ) - { - error($opt,"Specify either --basedir or --srcdir, not both"); - } --if ( $opt->{'keep-my-cnf'} ) -+if ( $opt->{rpm} || $opt->{'keep-my-cnf'} ) - { - $keep_my_cnf = 1; - } -@@ -664,7 +665,7 @@ if ( $opt->{'skip-name-resolve'} and $resolved and $resolved =~ /\s/ ) - } - - # ---------------------------------------------------------------------- --# Create database directories mysql & test -+# Create database directory mysql - # ---------------------------------------------------------------------- - - # FIXME The shell variant uses "mkdir -p": -@@ -697,7 +698,7 @@ if ($opt_user) - } - } - --foreach my $dir ( $opt->{ldata}, "$opt->{ldata}/mysql", "$opt->{ldata}/test" ) -+foreach my $dir ( $opt->{ldata}, "$opt->{ldata}/mysql") - { - mkdir($dir, 0700) unless -d $dir; - if ($opt_user and -w "/") diff --git a/packaging/deb-precise/patches/series b/packaging/deb-precise/patches/series deleted file mode 100644 index 31af2dc779ba..000000000000 --- a/packaging/deb-precise/patches/series +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -#fix-man-page-links.patch -fix-mysql_install_db.patch -fix-mtr-search-paths.patch diff --git a/packaging/deb-precise/rules b/packaging/deb-precise/rules deleted file mode 100755 index 8e4ab9490aea..000000000000 --- a/packaging/deb-precise/rules +++ /dev/null @@ -1,135 +0,0 @@ -#!/usr/bin/make -f - -# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -%: - dh $@ - -export DH_VERBOSE=1 -export CFLAGS= -export CXXFLAGS= - -override_dh_auto_configure: - @echo "RULES.$@" - cmake . \ - -DBUILD_CONFIG=mysql_release \ - -DCMAKE_INSTALL_PREFIX=/usr \ - -DINSTALL_DOCDIR=share/mysql/docs \ - -DINSTALL_DOCREADMEDIR=share/mysql \ - -DINSTALL_INCLUDEDIR=include/mysql \ - -DINSTALL_INFODIR=share/mysql/docs \ - -DINSTALL_LIBDIR=lib/$(DEB_HOST_MULTIARCH) \ - -DINSTALL_MANDIR=share/man \ - -DINSTALL_MYSQLSHAREDIR=share/mysql \ - -DINSTALL_MYSQLTESTDIR=lib/mysql-test \ - -DINSTALL_PLUGINDIR=lib/mysql/plugin \ - -DINSTALL_SBINDIR=sbin \ - -DINSTALL_SCRIPTDIR=bin \ - -DINSTALL_SQLBENCHDIR=lib/mysql \ - -DINSTALL_SUPPORTFILESDIR=share/mysql \ - -DMYSQL_DATADIR=/var/lib/mysql \ - -DSYSCONFDIR=/etc/mysql \ - -DMYSQL_UNIX_ADDR=/var/run/mysqld/mysqld.sock \ - -DWITH_SSL=bundled \ - -DWITH_ZLIB=system \ - -DWITH_EXTRA_CHARSETS=all \ - -DWITH_INNODB_MEMCACHED=1 \ - -DCOMPILATION_COMMENT="MySQL Community Server (GPL)" \ - -DINSTALL_LAYOUT=DEB - - cat CMakeCache.txt - touch $@ - -override_dh_auto_build: - @echo "RULES.$@" - $(MAKE) -j8 VERBOSE=1 - touch $@ - -override_dh_auto_test: - @echo "RULES.$@" - echo "No tests run because test 9: pfs_connect_attr is failing unreasonably" - touch $@ - -override_dh_auto_install: - - @echo "RULES.$@" - # complete install first - $(MAKE) install DESTDIR=debian/tmp - # remove all redundant files and links - rm debian/tmp/usr/lib/*/*_r* - rm debian/tmp/usr/lib/mysql-test/cmake_install.cmake - rm debian/tmp/usr/lib/mysql-test/CTestTestfile.cmake - rm debian/tmp/usr/lib/mysql-test/Makefile - # add missing man pages - install -g root -o root -m 0644 debian/extra/mysql_embedded.1 debian/tmp/usr/share/man/man1 - # add MySQL Server configuration file my.cnf to mysql-common package - install -g root -o root -m 0644 -D debian/extra/my.cnf debian/tmp/etc/mysql/my.cnf - # add MySQL Server debug binary and library to package - install -g root -o root -m 0755 debian/extra/server-binary debian/tmp/usr/sbin/mysqld-debug - install -g root -o root -m 0755 debian/extra/embedded-server debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/libmysqld-debug.a - # add debug plugin libraries to package - install -g root -o root -m 0755 -d debian/tmp/usr/lib/mysql/plugin/debug - for file in debian/extra/*-plugin; do NEW=`echo $$file | cut -d- -f1`; mv $$file $$NEW.so; done - install -g root -o root -m 0755 debian/extra/*.so debian/tmp/usr/lib/mysql/plugin/debug - install -g root -o root -m 0755 debian/extra/daemon_example.ini debian/tmp/usr/lib/mysql/plugin/debug - # add apparmor profile - install -g root -o root -m 0644 -D debian/extra/apparmor-profile debian/tmp/etc/apparmor.d/usr.sbin.mysqld - # add directory for legal docs - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-server - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-community-server - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-client - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-community-client - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-common - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/libmysqlclient18 - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/libmysqlclient-dev - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/libmysqld-dev - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-community-bench - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-testsuite - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-community-test - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-community-source - # add COPYING file to each package - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-server/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-community-server/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-client/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-community-client/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-common/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/libmysqlclient18/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/libmysqlclient-dev/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/libmysqld-dev/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-community-bench/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-testsuite/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-community-test/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-community-source/COPYING - # add README file to each package - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-server/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-community-server/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-client/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-community-client/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-common/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/libmysqlclient18/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/libmysqlclient-dev/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/libmysqld-dev/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-community-bench/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-testsuite/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-community-test/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-community-source/README - touch $@ - -override_dh_installinit: - @echo "RULES.$@" - dh_apparmor -pmysql-community-server --profile-name=usr.sbin.mysqld - dh_installinit --name=mysql -- defaults 19 21 - touch $@ diff --git a/packaging/deb-precise/source/format b/packaging/deb-precise/source/format deleted file mode 100644 index 163aaf8d82b6..000000000000 --- a/packaging/deb-precise/source/format +++ /dev/null @@ -1 +0,0 @@ -3.0 (quilt) diff --git a/packaging/deb-precise/source/include-binaries b/packaging/deb-precise/source/include-binaries deleted file mode 100644 index adb5f54bb2d2..000000000000 --- a/packaging/deb-precise/source/include-binaries +++ /dev/null @@ -1,35 +0,0 @@ -# Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# obscured filename for mysqld-debug, libmysqld-debug.a and debug plugins -debian/extra/server-binary -debian/extra/embedded-server -debian/extra/adt_null-plugin -debian/extra/auth-plugin -debian/extra/auth_socket-plugin -debian/extra/auth_test_plugin-plugin -debian/extra/innodb_engine-plugin -debian/extra/libdaemon_example-plugin -debian/extra/libmemcached-plugin -debian/extra/mypluglib-plugin -debian/extra/mysql_no_login-plugin -debian/extra/qa_auth_client-plugin -debian/extra/qa_auth_interface-plugin -debian/extra/qa_auth_server-plugin -debian/extra/semisync_master-plugin -debian/extra/semisync_slave-plugin -debian/extra/test_udf_services-plugin -debian/extra/validate_password-plugin -debian/extra/connection_control-plugin diff --git a/packaging/deb-precise/watch b/packaging/deb-precise/watch deleted file mode 100644 index c45c5e3e89d6..000000000000 --- a/packaging/deb-precise/watch +++ /dev/null @@ -1,2 +0,0 @@ -version=3 -http://mysql.mirrors.pair.com/Downloads/MySQL-5.6/mysql-([\d\.]+).tar.gz diff --git a/packaging/deb-trusty/changelog b/packaging/deb-trusty/changelog deleted file mode 100644 index 16f83c935df3..000000000000 --- a/packaging/deb-trusty/changelog +++ /dev/null @@ -1,93 +0,0 @@ -mysql-community (5.6.25-1ubuntu14.04) trusty; urgency=low - - * new upstream release - * mysql-community-server now depends on perl, psmisc - mysql-community-test now depends on python, libmysqlclient-dev - (Closes: #20561621) - - -- Akhil Mohan Wed, 25 Feb 2014 22:52:19 +0530 - -mysql-community (5.6.24-1ubuntu14.04) trusty; urgency=low - - * new upstream release - - -- Akhil Mohan Mon, 16 Feb 2014 15:45:09 +0530 - -mysql-community (5.6.23-1ubuntu14.04) trusty; urgency=low - - * new upstream release - * dh_apparmor to now run before dh_installinit in d/rules - * mysql-community-server now recommends mysql-client - * mysql-community-server now depends on apparmor - * removed template install-test-db; not installed by default - * d/compat incremented to 9 from 8 - * d/control updated to build depend on debhelper 9 - * added d/*.lintian-overrides and d/source/lintian-overrides - * d/rules updated to reflect correct file permissions - - -- Akhil Mohan Wed, 31 Dec 2014 10:51:07 +0530 - -mysql-community (5.6.22-2ubuntu14.04) trusty; urgency=low - - * new upstream release - * mysql-common now replaces mysql-server-{,core-}5.6 - - -- Akhil Mohan Wed, 28 Nov 2014 15:18:07 +0530 - -mysql-community (5.6.22-1ubuntu14.04) trusty; urgency=low - - * new upstream release - * fixed d/*server.postinst to allow dropping test db without - setting root password - * init script will now run my_i_db if data dir is not present or empty - * updated init script to read app armor profile on startup - * added more system resources to app armor profile - - -- Akhil Mohan Wed, 24 Sep 2014 14:48:07 +0530 - -mysql-community (5.6.21-1ubuntu14.04) trusty; urgency=low - - * new upstream release - * updated d/rules to increment -j8 as make option - * updated d/source/include-binaries to add mysql_no_login plugin - * updated CMake option WITH_EXTRA_CHARSETS from complex to all - - -- Akhil Mohan Wed, 20 Aug 2014 19:12:30 +0530 - -mysql-community (5.6.20-1ubuntu14.04) trusty; urgency=low - - * new upstream release - * added fakeroot as build-dep in d/control - * added d/*.dirs for bench, dev and test pkg - * updated d/rules to make compilation verbose - * removed default CFLAGS, CXXFLAGS in d/rules - * added patch for testsuite search paths under d/patches - * modified cmake option for testsuite in d/rules - * updated patch d/fix-mysql_install_db.patch - * enabled two patches in d/patches/series - * removed extra permissions check in d/rules when fixed in source - * modified d/mysql-*-server.postinst to stop removing /usr/my.cnf - * modified d/*-test.* for updated location of testsuite - * updated d/{mysql-*-server.install,rules} to include debug plugins - * updated d/rules to remove storage engine cmake options - * modified data dir permission in d/*server.{pre,post}inst - * updated d/source/include-binaries to add debug plugins - * updated d/rules to rename debug plugins - - -- Akhil Mohan Wed, 02 Jul 2014 17:45:30 +0530 - -mysql-community (5.6.19-1ubuntu14.04) trusty; urgency=low - - * new upstream release - * d/rules updated to rid of files removed from source - * modified path for source tar in source pkg - * obscured actual filenames in d/source/include-binaries - * modified d/rules to handle obscured filenames - - -- Akhil Mohan Mon, 05 May 2014 15:45:10 +0530 - -mysql-community (5.6.17-1ubuntu14.04) trusty; urgency=low - - * new upstream release - - -- Akhil Mohan Fri, 28 Feb 2014 18:06:30 +0530 diff --git a/packaging/deb-trusty/compat b/packaging/deb-trusty/compat deleted file mode 100644 index ec635144f600..000000000000 --- a/packaging/deb-trusty/compat +++ /dev/null @@ -1 +0,0 @@ -9 diff --git a/packaging/deb-trusty/control b/packaging/deb-trusty/control deleted file mode 100644 index c40f032d866e..000000000000 --- a/packaging/deb-trusty/control +++ /dev/null @@ -1,189 +0,0 @@ -Source: mysql-community -Maintainer: MySQL Release Engineering -Section: database -Priority: optional -Standards-Version: 3.9.5 -Homepage: http://www.mysql.com/ -Build-Depends: debhelper (>= 9.0.0), libaio-dev[linux-any], libncurses5-dev (>= 5.0-6), perl, zlib1g-dev (>= 1:1.1.3-5), po-debconf, psmisc, bison, dh-apparmor, lsb-release, cmake, fakeroot, libnuma-dev - -Package: mysql-server -Architecture: any -Depends: mysql-community-server (= ${binary:Version}), ${misc:Depends} -Description: MySQL Server meta package depending on latest version - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This is a meta package that depends on the latest mysql server - package available in the repository. - -Package: mysql-community-server -Architecture: any -Pre-depends: debconf (>= 0.2.17), adduser -Depends: mysql-common (= ${binary:Version}), apparmor, perl, psmisc, - ${shlibs:Depends}, ${misc:Depends} -Recommends: mysql-client (= ${binary:Version}) -Conflicts: mysql, - mysql-server-5.0, mysql-server-core-5.0, - mysql-server-5.1, mysql-server-core-5.1, - mysql-server-5.5, mysql-server-core-5.5, - mysql-server-5.6, mysql-server-core-5.6, - mysql-commercial-server -Replaces: mysql, - mysql-server-5.0, mysql-server-core-5.0, - mysql-server-5.1, mysql-server-core-5.1, - mysql-server-5.5, mysql-server-core-5.5, - mysql-server-5.6, mysql-server-core-5.6, - mysql-commercial-server -Provides: virtual-mysql-server, virtual-mysql-server-core, - mysql-server-5.6, mysql-server-core-5.6 -Description: MySQL Server - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This package includes the MySQL server binary as well as related - utilities to run and administer a MySQL server. - -Package: mysql-client -Architecture: any -Depends: mysql-community-client (= ${binary:Version}), ${misc:Depends} -Description: MySQL Client meta package depending on latest version - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This is a meta package that depends on the latest mysql client - package available in the repository. - -Package: mysql-community-client -Architecture: any -Depends: mysql-common (= ${binary:Version}), - ${shlibs:Depends}, ${misc:Depends} -Conflicts: mysql, - mysql-client-5.0, mysql-client-core-5.0, - mysql-client-5.1, mysql-client-core-5.1, - mysql-client-5.5, mysql-client-core-5.5, - mysql-client-5.6, mysql-client-core-5.6, - mysql-commercial-client -Replaces: mysql, - mysql-client-5.0, mysql-client-core-5.0, - mysql-client-5.1, mysql-client-core-5.1, - mysql-client-5.5, mysql-client-core-5.5, - mysql-client-5.6, mysql-client-core-5.6, - mysql-commercial-client -Provides: virtual-mysql-client, virtual-mysql-client-core, - mysql-client-5.6, mysql-client-core-5.6 -Description: MySQL Client - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This package contains the standard MySQL clients and - administration tools. - -Package: libmysqlclient18 -Architecture: any -Section: libs -Pre-Depends: ${misc:Pre-Depends} -Multi-Arch: same -Depends: mysql-common (= ${binary:Version}), - ${shlibs:Depends}, ${misc:Depends} -Description: MySQL shared client libraries - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This package contains the shared libraries for MySQL client - applications. - -Package: mysql-common -Architecture: any -Pre-depends: debconf (>= 0.2.17), ${misc:Pre-Depends} -Multi-Arch: foreign -Depends: ${shlibs:Depends}, ${misc:Depends} -Conflicts: mysql -Replaces: mysql, mysql-server-5.5, mysql-server-core-5.5, libmysqlclient-dev, - mysql-server-5.6, mysql-server-core-5.6 -Provides: mysql-common -Description: MySQL Common - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This package contains common files needed by MySQL client - library, MySQL database server, and MySQL embedded server. - -Package: libmysqlclient-dev -Architecture: any -Section: libdevel -Depends: libmysqlclient18 (= ${binary:Version}), - ${shlibs:Depends}, ${misc:Depends} -Description: MySQL development headers - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This package contains the development header files necessary - to develop MySQL client applications. - -Package: libmysqld-dev -Architecture: any -Section: libdevel -Depends: libmysqlclient-dev (= ${binary:Version}), - ${shlibs:Depends}, ${misc:Depends} -Description: MySQL embedded server library - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This package contains the MySQL server as an embedded library. - -Package: mysql-testsuite -Architecture: any -Depends: mysql-community-test (= ${binary:Version}), ${misc:Depends} -Description: MySQL Testsuite meta package depending on latest version - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This is a meta package that depends on the latest mysql test - package available in the repository. - -Package: mysql-community-test -Architecture: any -Depends: mysql-community-server (= ${binary:Version}), - mysql-community-client (= ${binary:Version}), python, - libmysqlclient-dev, ${shlibs:Depends}, ${misc:Depends} -Conflicts: mysql, - mysql-testsuite-5.0, mysql-testsuite-5.1, mysql-testsuite-5.5, - mysql-testsuite-5.6, mysql-commercial-test -Description: MySQL Test Run MTR - The MySQL testsuite - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This package contains the MySQL regression test suite for MySQL - database server. - -Package: mysql-community-bench -Architecture: any -Depends: mysql-community-server (= ${binary:Version}), - ${shlibs:Depends}, ${misc:Depends} -Conflicts: mysql, mysql-commercial-bench -Description: MySQL Bench - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. - -Package: mysql-community-source -Architecture: any -Depends: ${misc:Depends}, ${shlibs:Depends} -Description: MySQL source - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. diff --git a/packaging/deb-trusty/copyright b/packaging/deb-trusty/copyright deleted file mode 100644 index 482a6765ebd4..000000000000 --- a/packaging/deb-trusty/copyright +++ /dev/null @@ -1,41 +0,0 @@ -Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ -Upstream-Name: MySQL Server 5.6 -Upstream-Contact: MySQL Release Engineering -Source: http://dev.mysql.com/ - -Copyright: 2000, 2014, Oracle and/or its affiliates. All rights reserved. -License: - This is a release of MySQL, a dual-license SQL database server. - For the avoidance of doubt, this particular copy of the software - is released under the version 2 of the GNU General Public License. - MySQL is brought to you by Oracle. - . - MySQL FOSS License Exception - We want free and open source software applications under certain - licenses to be able to use specified GPL-licensed MySQL client - libraries despite the fact that not all such FOSS licenses are - compatible with version 2 of the GNU General Public License. - Therefore there are special exceptions to the terms and conditions - of the GPLv2 as applied to these client libraries, which are - identified and described in more detail in the FOSS License - Exception at - . - . - This distribution may include materials developed by third - parties. For license and attribution notices for these - materials, please refer to the documentation that accompanies - this distribution (see the "Licenses for Third-Party Components" - appendix) or view the online documentation at - . - . - GPLv2 Disclaimer - For the avoidance of doubt, except that if any license choice - other than GPL or LGPL is available it will apply instead, - Oracle elects to use only the General Public License version 2 - (GPLv2) at this time for any software where a choice of GPL - license versions is made available with the language indicating - that GPLv2 or any later version may be used, or where a choice - . - The full text of the GNU General Public License version 2 can - be found in the file - `/usr/share/mysql/doc/COPYING'. diff --git a/packaging/deb-trusty/extra/apparmor-profile b/packaging/deb-trusty/extra/apparmor-profile deleted file mode 100644 index ca5d1f58d6c5..000000000000 --- a/packaging/deb-trusty/extra/apparmor-profile +++ /dev/null @@ -1,53 +0,0 @@ -# vim:syntax=apparmor -# Last Modified: Fri Feb 28 18:06:30 2014 -#include - -/usr/sbin/mysqld { - #include - #include - #include - -# Allow system resource access - /sys/devices/system/cpu/ r, - capability sys_resource, - capability dac_override, - capability setuid, - capability setgid, - -# Allow config access - /etc/mysql/conf.d/ r, - /etc/mysql/conf.d/*.cnf r, - /etc/mysql/*.cnf r, - -# Allow pid and socket file access - /run/mysqld/mysqld.pid rw, - /run/mysqld/mysqld.sock rw, - -# Allow read/ write to /tmp - /tmp/ r, - /tmp/* rw, - -# Allow execution of server binary - /usr/sbin/mysqld mr, - /usr/sbin/mysqld-debug mr, - -# Allow plugin access - /usr/lib/mysql/plugin/ r, - /usr/lib/mysql/plugin/*.so* mr, - -# Allow error msg and charset access - /usr/share/mysql/ r, - /usr/share/mysql/** r, - -# Allow data dir access - /var/lib/mysql/ r, - /var/lib/mysql/** rwk, - -# Allow data files dir access - /var/lib/mysql-files/ r, - /var/lib/mysql-files/** rwk, - -# Allow log file access - /var/log/mysql/ r, - /var/log/mysql/** rw, -} diff --git a/packaging/deb-trusty/extra/my.cnf b/packaging/deb-trusty/extra/my.cnf deleted file mode 100644 index a2b2fd8d107a..000000000000 --- a/packaging/deb-trusty/extra/my.cnf +++ /dev/null @@ -1,57 +0,0 @@ -# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# -# The MySQL Community Server configuration file. -# -# For explanations see -# http://dev.mysql.com/doc/mysql/en/server-system-variables.html - -[client] -port = 3306 -socket = /var/run/mysqld/mysqld.sock - -[mysqld_safe] -pid-file = /var/run/mysqld/mysqld.pid -socket = /var/run/mysqld/mysqld.sock -nice = 0 - -[mysqld] -user = mysql -pid-file = /var/run/mysqld/mysqld.pid -socket = /var/run/mysqld/mysqld.sock -port = 3306 -basedir = /usr -datadir = /var/lib/mysql -tmpdir = /tmp -lc-messages-dir = /usr/share/mysql -explicit_defaults_for_timestamp - -# Instead of skip-networking the default is now to listen only on -# localhost which is more compatible and is not less secure. -bind-address = 127.0.0.1 - -log-error = /var/log/mysql/error.log - -# Recommended in standard MySQL setup -sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES - -# Disabling symbolic-links is recommended to prevent assorted security risks -symbolic-links=0 - -# * IMPORTANT: Additional settings that can override those from this file! -# The files must end with '.cnf', otherwise they'll be ignored. -# -!includedir /etc/mysql/conf.d/ diff --git a/packaging/deb-trusty/extra/mysql_embedded.1 b/packaging/deb-trusty/extra/mysql_embedded.1 deleted file mode 100644 index 735c4e05ae07..000000000000 --- a/packaging/deb-trusty/extra/mysql_embedded.1 +++ /dev/null @@ -1 +0,0 @@ -.so man1/mysql.1 diff --git a/packaging/deb-trusty/libmysqlclient-dev.install b/packaging/deb-trusty/libmysqlclient-dev.install deleted file mode 100644 index 6794f18c300d..000000000000 --- a/packaging/deb-trusty/libmysqlclient-dev.install +++ /dev/null @@ -1,29 +0,0 @@ -# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -usr/include/mysql/*.h -usr/include/mysql/mysql/*.h -usr/include/mysql/mysql/*.h.pp -usr/include/mysql/mysql/psi/*.h -usr/lib/*/libmysqlclient.a -usr/lib/*/libmysqlclient.so -usr/lib/*/libmysqlservices.a -usr/bin/mysql_config -usr/bin/mysql_config_editor -usr/share/man/man1/mysql_config.1 -usr/share/man/man1/mysql_config_editor.1 -# legal -usr/share/doc/libmysqlclient-dev/COPYING -usr/share/doc/libmysqlclient-dev/README diff --git a/packaging/deb-trusty/libmysqlclient-dev.lintian-overrides b/packaging/deb-trusty/libmysqlclient-dev.lintian-overrides deleted file mode 100644 index 09960eb27301..000000000000 --- a/packaging/deb-trusty/libmysqlclient-dev.lintian-overrides +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -libmysqlclient-dev: extra-license-file usr/share/doc/libmysqlclient-dev/LICENSE.mysql -libmysqlclient-dev: extra-license-file usr/share/doc/libmysqlclient-dev/COPYING.gz -libmysqlclient-dev: copyright-should-refer-to-common-license-file-for-lgpl -# Due to static linking this cannot be avoided and hence being overridden -libmysqlclient-dev: embedded-library diff --git a/packaging/deb-trusty/libmysqlclient18.install b/packaging/deb-trusty/libmysqlclient18.install deleted file mode 100644 index cdfdaa60744f..000000000000 --- a/packaging/deb-trusty/libmysqlclient18.install +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -usr/lib/*/libmysqlclient.so.* -# legal -usr/share/doc/libmysqlclient18/COPYING -usr/share/doc/libmysqlclient18/README diff --git a/packaging/deb-trusty/libmysqlclient18.lintian-overrides b/packaging/deb-trusty/libmysqlclient18.lintian-overrides deleted file mode 100644 index 1f26511a13d0..000000000000 --- a/packaging/deb-trusty/libmysqlclient18.lintian-overrides +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -libmysqlclient18: extra-license-file usr/share/doc/libmysqlclient18/LICENSE.mysql -libmysqlclient18: extra-license-file usr/share/doc/libmysqlclient18/COPYING.gz -libmysqlclient18: copyright-should-refer-to-common-license-file-for-lgpl -# Due to static linking this cannot be avoided and hence being overridden -libmysqlclient18: embedded-library diff --git a/packaging/deb-trusty/libmysqld-dev.install b/packaging/deb-trusty/libmysqld-dev.install deleted file mode 100644 index f2b59fcb9a28..000000000000 --- a/packaging/deb-trusty/libmysqld-dev.install +++ /dev/null @@ -1,20 +0,0 @@ -# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -usr/lib/*/libmysqld.a -usr/lib/*/libmysqld-debug.a -# legal -usr/share/doc/libmysqld-dev/COPYING -usr/share/doc/libmysqld-dev/README diff --git a/packaging/deb-trusty/libmysqld-dev.lintian-overrides b/packaging/deb-trusty/libmysqld-dev.lintian-overrides deleted file mode 100644 index 35caaeca0121..000000000000 --- a/packaging/deb-trusty/libmysqld-dev.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -libmysqld-dev: extra-license-file usr/share/doc/libmysqld-dev/LICENSE.mysql -libmysqld-dev: extra-license-file usr/share/doc/libmysqld-dev/COPYING.gz -libmysqld-dev: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-trusty/mysql-client.install b/packaging/deb-trusty/mysql-client.install deleted file mode 100644 index 0a24793e11ea..000000000000 --- a/packaging/deb-trusty/mysql-client.install +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# legal -usr/share/doc/mysql-client/COPYING -usr/share/doc/mysql-client/README diff --git a/packaging/deb-trusty/mysql-client.lintian-overrides b/packaging/deb-trusty/mysql-client.lintian-overrides deleted file mode 100644 index 5c4891c9190f..000000000000 --- a/packaging/deb-trusty/mysql-client.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-client: extra-license-file usr/share/doc/mysql-client/LICENSE.mysql -mysql-client: extra-license-file usr/share/doc/mysql-client/COPYING.gz -mysql-client: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-trusty/mysql-common.dirs b/packaging/deb-trusty/mysql-common.dirs deleted file mode 100644 index a3b0c16a8e40..000000000000 --- a/packaging/deb-trusty/mysql-common.dirs +++ /dev/null @@ -1,16 +0,0 @@ -# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -etc/mysql/conf.d diff --git a/packaging/deb-trusty/mysql-common.install b/packaging/deb-trusty/mysql-common.install deleted file mode 100644 index 2a547a807a9d..000000000000 --- a/packaging/deb-trusty/mysql-common.install +++ /dev/null @@ -1,29 +0,0 @@ -# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -etc/mysql/my.cnf -usr/share/aclocal/mysql.m4 -usr/share/mysql/docs/INFO_SRC -usr/share/mysql/docs/INFO_BIN -usr/share/mysql/docs/ChangeLog -# localized error msgs -usr/share/mysql/*/errmsg.sys -usr/share/mysql/errmsg-utf8.txt -# charsets -usr/share/mysql/charsets/*.xml -usr/share/mysql/charsets/README -# legal -usr/share/doc/mysql-common/COPYING -usr/share/doc/mysql-common/README diff --git a/packaging/deb-trusty/mysql-common.lintian-overrides b/packaging/deb-trusty/mysql-common.lintian-overrides deleted file mode 100644 index 70ddcdf63713..000000000000 --- a/packaging/deb-trusty/mysql-common.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-common: extra-license-file usr/share/doc/mysql-common/LICENSE.mysql -mysql-common: extra-license-file usr/share/doc/mysql-common/COPYING.gz -mysql-common: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-trusty/mysql-community-bench.install b/packaging/deb-trusty/mysql-community-bench.install deleted file mode 100644 index 8aa8be6facba..000000000000 --- a/packaging/deb-trusty/mysql-community-bench.install +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -usr/lib/mysql/sql-bench/* -# legal -usr/share/doc/mysql-community-bench/COPYING -usr/share/doc/mysql-community-bench/README diff --git a/packaging/deb-trusty/mysql-community-bench.lintian-overrides b/packaging/deb-trusty/mysql-community-bench.lintian-overrides deleted file mode 100644 index 04df14ea0469..000000000000 --- a/packaging/deb-trusty/mysql-community-bench.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-community-bench: extra-license-file usr/share/doc/mysql-community-bench/LICENSE.mysql -mysql-community-bench: extra-license-file usr/share/doc/mysql-community-bench/COPYING.gz -mysql-community-bench: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-trusty/mysql-community-client.install b/packaging/deb-trusty/mysql-community-client.install deleted file mode 100644 index c6a27ce6f4a3..000000000000 --- a/packaging/deb-trusty/mysql-community-client.install +++ /dev/null @@ -1,60 +0,0 @@ -# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# binaries -usr/bin/innochecksum -usr/bin/myisam_ftdump -usr/bin/mysql -usr/bin/mysql_embedded -usr/bin/mysqlaccess -usr/bin/mysqlaccess.conf -usr/bin/mysqladmin -usr/bin/mysqlbug -usr/bin/mysqlcheck -usr/bin/mysql_client_test -usr/bin/mysql_client_test_embedded -usr/bin/mysqldump -usr/bin/mysqldumpslow -usr/bin/mysql_find_rows -usr/bin/mysql_fix_extensions -usr/bin/mysqlimport -usr/bin/mysql_plugin -usr/bin/mysqlshow -usr/bin/mysqlslap -usr/bin/mysql_waitpid -# man pages -usr/share/man/man1/innochecksum.1 -usr/share/man/man1/myisam_ftdump.1 -usr/share/man/man1/mysql.1 -usr/share/man/man1/mysql_embedded.1 -usr/share/man/man1/mysqlaccess.1 -usr/share/man/man1/mysqladmin.1 -usr/share/man/man1/mysqlbug.1 -usr/share/man/man1/mysqlcheck.1 -usr/share/man/man1/mysql_client_test.1 -usr/share/man/man1/mysql_client_test_embedded.1 -usr/share/man/man1/mysqldump.1 -usr/share/man/man1/mysqldumpslow.1 -usr/share/man/man1/mysql_find_rows.1 -usr/share/man/man1/mysql_fix_extensions.1 -usr/share/man/man1/mysqlimport.1 -usr/share/man/man1/mysqlman.1 -usr/share/man/man1/mysql_plugin.1 -usr/share/man/man1/mysqlshow.1 -usr/share/man/man1/mysqlslap.1 -usr/share/man/man1/mysql_waitpid.1 -# legal -usr/share/doc/mysql-community-client/COPYING -usr/share/doc/mysql-community-client/README diff --git a/packaging/deb-trusty/mysql-community-client.lintian-overrides b/packaging/deb-trusty/mysql-community-client.lintian-overrides deleted file mode 100644 index 589293560ee7..000000000000 --- a/packaging/deb-trusty/mysql-community-client.lintian-overrides +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-community-client: extra-license-file usr/share/doc/mysql-community-client/LICENSE.mysql -mysql-community-client: extra-license-file usr/share/doc/mysql-community-clienti/COPYING.gz -mysql-community-client: copyright-should-refer-to-common-license-file-for-lgpl -# Due to static linking this cannot be avoided and hence being overridden -mysql-community-client: embedded-library diff --git a/packaging/deb-trusty/mysql-community-server.config b/packaging/deb-trusty/mysql-community-server.config deleted file mode 100755 index cb6c39cfd5b9..000000000000 --- a/packaging/deb-trusty/mysql-community-server.config +++ /dev/null @@ -1,88 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -. /usr/share/debconf/confmodule - -if [ "$1" = "configure" ] && [ -z "$2" ]; -then - - set -e - - PKG_LIST=mysql-server-5.5:mysql-server-5.6:mysql-community-server:mysql-commercial-server - INSTALLED_PKG=none - MYSQLDATA=/var/lib/mysql - - IFS_BACKUP=${IFS} - IFS=":" - for PKG in ${PKG_LIST}; - do - STATUS=$(dpkg -s ${PKG} 2> /dev/null | grep Status: | cut -d' ' -f4) - if [ "${STATUS}" = "installed" ]; - then - INSTALLED_PKG=${PKG} - break - fi - done - IFS=${IFS_BACKUP} - - if [ "${INSTALLED_PKG}" = "none" ]; - then - if [ -d ${MYSQLDATA} -o -L ${MYSQLDATA} ]; - then - db_input high mysql-community-server/data-dir || true - else - db_fset mysql-community-server/data-dir seen true - fi - - while :; do - PASSWD="" - db_input high mysql-community-server/root-pass || true - db_go - - db_get mysql-community-server/root-pass - if [ -z "${RET}" ]; - then - db_fset mysql-community-server/root-pass seen true - db_fset mysql-community-server/re-root-pass seen true - break - fi - PASSWD="${RET}" - - db_input high mysql-community-server/re-root-pass || true - db_go - - db_get mysql-community-server/re-root-pass - if [ "${RET}" == "${PASSWD}" ]; - then - PASSWD="" - break - fi - - db_fset mysql-community-server/root-pass-mismatch seen false - db_input critical mysql-community-server/root-pass-mismatch - db_set mysql-community-server/root-pass "" - db_set mysql-community-server/re-root-pass "" - done - - else - db_fset mysql-community-server/data-dir seen true - db_fset mysql-community-server/root-pass seen true - db_fset mysql-community-server/re-root-pass seen true - fi - - set +e -fi diff --git a/packaging/deb-trusty/mysql-community-server.dirs b/packaging/deb-trusty/mysql-community-server.dirs deleted file mode 100644 index f677b6f3747b..000000000000 --- a/packaging/deb-trusty/mysql-community-server.dirs +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -etc/mysql/conf.d -etc/init.d -usr/lib/mysql -usr/lib/mysql/plugin diff --git a/packaging/deb-trusty/mysql-community-server.install b/packaging/deb-trusty/mysql-community-server.install deleted file mode 100644 index a1f5d0535c47..000000000000 --- a/packaging/deb-trusty/mysql-community-server.install +++ /dev/null @@ -1,86 +0,0 @@ -# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# binaries -usr/bin/msql2mysql -usr/bin/myisamchk -usr/bin/myisamlog -usr/bin/myisampack -usr/bin/my_print_defaults -usr/bin/mysqlbinlog -usr/bin/mysql_convert_table_format -usr/bin/mysqld_multi -usr/bin/mysqld_safe -usr/bin/mysqlhotcopy -usr/bin/mysql_install_db -usr/bin/mysql_secure_installation -usr/bin/mysql_setpermission -usr/bin/mysqltest -usr/bin/mysqltest_embedded -usr/bin/mysql_tzinfo_to_sql -usr/bin/mysql_upgrade -usr/bin/mysql_zap -usr/bin/perror -usr/bin/replace -usr/bin/resolveip -usr/bin/resolve_stack_dump -usr/sbin/mysqld -# debug binary -usr/sbin/mysqld-debug -# man pages -usr/share/man/man1/comp_err.1 -usr/share/man/man1/msql2mysql.1 -usr/share/man/man1/myisamchk.1 -usr/share/man/man1/myisamlog.1 -usr/share/man/man1/myisampack.1 -usr/share/man/man1/my_print_defaults.1 -usr/share/man/man1/mysqlbinlog.1 -usr/share/man/man1/mysql_convert_table_format.1 -usr/share/man/man1/mysqld_multi.1 -usr/share/man/man1/mysqld_safe.1 -usr/share/man/man1/mysqlhotcopy.1 -usr/share/man/man1/mysql_install_db.1 -usr/share/man/man1/mysql_secure_installation.1 -usr/share/man/man1/mysql.server.1 -usr/share/man/man1/mysql_setpermission.1 -usr/share/man/man1/mysql-stress-test.pl.1 -usr/share/man/man1/mysqltest.1 -usr/share/man/man1/mysqltest_embedded.1 -usr/share/man/man1/mysql_tzinfo_to_sql.1 -usr/share/man/man1/mysql_upgrade.1 -usr/share/man/man1/mysql_zap.1 -usr/share/man/man1/perror.1 -usr/share/man/man1/replace.1 -usr/share/man/man1/resolveip.1 -usr/share/man/man1/resolve_stack_dump.1 -usr/share/man/man8/mysqld.8 -# app armor profile -etc/apparmor.d/usr.sbin.mysqld -# SQL files -usr/share/mysql/*.sql -# plugins -usr/lib/mysql/plugin/*.so -usr/lib/mysql/plugin/debug/*.so -usr/lib/mysql/plugin/daemon_example.ini -usr/lib/mysql/plugin/debug/daemon_example.ini -# support files -usr/share/mysql/mysqld_multi.server -usr/share/mysql/magic -usr/share/mysql/mysql-log-rotate -usr/share/mysql/my-default.cnf -usr/share/mysql/dictionary.txt -# legal -usr/share/doc/mysql-community-server/COPYING -usr/share/doc/mysql-community-server/README diff --git a/packaging/deb-trusty/mysql-community-server.lintian-overrides b/packaging/deb-trusty/mysql-community-server.lintian-overrides deleted file mode 100644 index 08b386543cbc..000000000000 --- a/packaging/deb-trusty/mysql-community-server.lintian-overrides +++ /dev/null @@ -1,23 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-community-server: extra-license-file usr/share/doc/mysql-community-server/LICENSE.mysql -mysql-community-server: extra-license-file usr/share/doc/mysql-community-server/COPYING.gz -mysql-community-server: copyright-should-refer-to-common-license-file-for-lgpl -# Due to static linking this cannot be avoided and hence being overridden -mysql-community-server: embedded-library -# Since we ship debug plugins so this error is overridden -mysql-community-server: unstripped-binary-or-object usr/lib/mysql/plugin/debug/* diff --git a/packaging/deb-trusty/mysql-community-server.mysql.init b/packaging/deb-trusty/mysql-community-server.mysql.init deleted file mode 100755 index 475ce0fe7092..000000000000 --- a/packaging/deb-trusty/mysql-community-server.mysql.init +++ /dev/null @@ -1,192 +0,0 @@ -#!/bin/bash -# -### BEGIN INIT INFO -# Provides: mysql -# Required-Start: $remote_fs $syslog -# Required-Stop: $remote_fs $syslog -# Should-Start: $network $time -# Should-Stop: $network $time -# Default-Start: 2 3 4 5 -# Default-Stop: 0 1 6 -# Short-Description: Start/ Stop MySQL Community Server daemon -# Description: This service script facilitates startup and shutdown of -# mysqld daemon throught its wrapper script mysqld_safe -### END INIT INFO -# - -# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -. /lib/lsb/init-functions - -cd / -umask 077 - -MYSQLDATA=/var/lib/mysql -VERSION=$(mysqld --version | grep mysqld | cut -d' ' -f4) - -get_mysql_option() { - RESULT=$(my_print_defaults "$1" | sed -n "s/^--$2=//p" | tail -n 1) - if [ -z "$RESULT" ]; - then - RESULT="$3" - fi - echo $RESULT -} - -get_running () { - PIDFILE=$(get_mysql_option mysqld_safe pid-file "") - if [ -z "$PIDFILE" ]; - then - PIDFILE=$(get_mysql_option mysqld pid-file "$MYSQLDATA/$(hostname).pid") - fi - if [ -e "$PIDFILE" ] && [ -d "/proc/$(cat "$PIDFILE")" ]; - then - echo 1 - else - echo 0 - fi -} - -server_stop () { - RUNNING=$(get_running) - COUNT=0 - while :; do - COUNT=$(( COUNT+1 )) - echo -n . - if [ "${RUNNING}" -eq 0 ]; - then - echo - break - fi - if [ "${COUNT}" -gt 15 ]; - then - echo - return 1 - fi - RUNNING=$(get_running) - sleep 1 - done - return 0 -} - -case "$1" in - 'start') - RUNNING=$(get_running) - if [ "${RUNNING}" -eq 1 ]; - then - log_action_msg "A MySQL Server is already started" - else - MYSQLRUN=/var/run/mysqld - MYSQLDATA=/var/lib/mysql - MYSQLLOG=/var/log/mysql - - if [ ! -d ${MYSQLDATA} -a ! -L ${MYSQLDATA} ]; - then - mkdir ${MYSQLDATA} - chown mysql:mysql ${MYSQLDATA} - chmod 750 ${MYSQLDATA} - fi - - if [ ! -d "${MYSQLDATA}/mysql" -a ! -L "${MYSQLDATA}/mysql" ]; - then - mkdir ${MYSQLDATA}/mysql - chown mysql:mysql ${MYSQLDATA}/mysql - chmod 750 ${MYSQLDATA}/mysql - fi - - if [ ! "$(ls -A ${MYSQLDATA}/mysql)" ]; - then - mysql_install_db --user=mysql > /dev/null - fi - - if [ ! -d ${MYSQLLOG} -a ! -L ${MYSQLLOG} ]; - then - mkdir ${MYSQLLOG} - chown mysql:adm ${MYSQLLOG} - chmod 750 ${MYSQLLOG} - touch ${MYSQLLOG}/error.log - chmod 640 ${MYSQLLOG}/error.log - chown mysql:adm ${MYSQLLOG}/error.log - fi - - if [ ! -d "${MYSQLRUN}" -a ! -L "${MYSQLRUN}" ]; - then - mkdir ${MYSQLRUN} - chown mysql:mysql ${MYSQLRUN} - chmod 755 ${MYSQLRUN} - fi - - /lib/init/apparmor-profile-load usr.sbin.mysqld - - su - mysql -s /bin/bash -c "mysqld_safe > /dev/null &" - for i in 1 2 3 4 5 6; - do - sleep 1 - echo -n . - done - echo - RUNNING=$(get_running) - if [ "${RUNNING}" -eq 1 ]; - then - log_action_msg "MySQL Community Server ${VERSION} is started" - else - log_action_msg "MySQL Community Server ${VERSION} did not start. Please check logs for more details." - fi - fi - ;; - - 'stop') - RUNNING=$(get_running) - if [ "${RUNNING}" -eq 1 ]; - then - killall -15 mysqld - server_stop - if [ "$?" -eq 0 ]; - then - log_action_msg "MySQL Community Server ${VERSION} is stopped" - else - log_action_msg "Attempt to shutdown MySQL Community Server ${VERSION} timed out" - fi - else - log_action_msg "MySQL Community Server ${VERSION} is already stopped" - fi - ;; - - 'restart'|'reload'|'force-reload') - log_action_msg "Stopping MySQL Community Server ${VERSION}" - $0 stop - log_action_msg "Re-starting MySQL Community Server ${VERSION}" - $0 start - ;; - - 'status') - RUNNING=$(get_running) - if [ ${RUNNING} -eq 1 ]; - then - log_action_msg "MySQL Community Server ${VERSION} is running" - else - log_action_msg "MySQL Community Server ${VERSION} is not running" - exit 3 - fi - ;; - - *) - echo "Usage: $SELF start|stop|restart|reload|force-reload|status" - exit 1 - ;; -esac - -exit 0 diff --git a/packaging/deb-trusty/mysql-community-server.postinst b/packaging/deb-trusty/mysql-community-server.postinst deleted file mode 100755 index 0fe3dc1227cf..000000000000 --- a/packaging/deb-trusty/mysql-community-server.postinst +++ /dev/null @@ -1,102 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -. /usr/share/debconf/confmodule - -take_upstart_job_backup () { - if [ -e "/etc/init/mysql.conf" ] && [ -d "/var/lib/mysql" ]; - then - mv /etc/init/mysql.conf /var/lib/mysql/.mysql.conf.backup - fi -} - -case "$1" in - configure) - -# MySQL 5.6.34 needs this - MYSQLFILES=/var/lib/mysql-files - if [ ! -d ${MYSQLFILES} -a ! -L ${MYSQLFILES} ]; - then - mkdir ${MYSQLFILES} - chown mysql:mysql ${MYSQLFILES} - chmod 770 ${MYSQLFILES} - fi - - if [ -z "$2" ]; - then - set -e - - MYSQLDATA=/var/lib/mysql - - if [ ! -d "${MYSQLDATA}/mysql" -a ! -L "${MYSQLDATA}/mysql" ]; - then - mkdir ${MYSQLDATA}/mysql - chown mysql:mysql ${MYSQLDATA}/mysql - chmod 750 ${MYSQLDATA}/mysql - if [ ! "$(ls -A ${MYSQLDATA}/mysql)" ]; - then - mysql_install_db --user=mysql > /dev/null - fi - fi - - db_get mysql-community-server/root-pass && PASSWD=${RET} - if [ ! -z "${PASSWD}" ]; - then - db_set mysql-community-server/root-pass "" - db_set mysql-community-server/re-root-pass "" - PASSWD="UPDATE user SET password=PASSWORD('${PASSWD}') WHERE user='root';" - else - PASSWD="" - fi - - SQL=`mktemp` - if [ -f "${SQL}" ]; - then - chmod 700 ${SQL} - cat << EOF > ${SQL} -USE mysql; -${PASSWD} -DELETE FROM user WHERE user=''; -FLUSH PRIVILEGES; -EOF - mysqld --basedir=/usr --bootstrap --user=mysql --skip-grant-tables < $SQL - PASSWD="" - rm -f ${SQL} - fi - - set +e - - fi - - ;; - - abort-upgrade|abort-remove|abort-configure) - - ;; - - *) - exit 1 - ;; -esac - -db_stop - -take_upstart_job_backup - -#DEBHELPER# - -exit 0 diff --git a/packaging/deb-trusty/mysql-community-server.postrm b/packaging/deb-trusty/mysql-community-server.postrm deleted file mode 100755 index 55f83a3bec28..000000000000 --- a/packaging/deb-trusty/mysql-community-server.postrm +++ /dev/null @@ -1,165 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -if [ "$1" = purge ] && [ -e /usr/share/debconf/confmodule ]; -then -. /usr/share/debconf/confmodule -fi - -place_upstart_job_back () { - if [ -e "/var/lib/mysql/.mysql.conf.backup" ]; - then - mv /var/lib/mysql/.mysql.conf.backup /etc/init/mysql.conf - fi -} - -get_pcount () { - PSCOUNT=$(ps -ef | grep "/usr/sbin/mysqld" | wc -l) - echo "${PSCOUNT}" -} - -server_stop () { - PSCOUNT=$(get_pcount) - COUNT=0 - while :; do - COUNT=$(( COUNT+1 )) - echo -n . - if [ "${PSCOUNT}" -eq 1 ]; - then - echo - break - fi - if [ "${COUNT}" -gt 15 ]; - then - echo - return 1 - fi - PSCOUNT=$(get_pcount) - sleep 1 - done - return 0 -} - -case "$1" in - remove) - - set -e - - place_upstart_job_back - - set +e - - ;; - - purge) - - set -e - - place_upstart_job_back - - MYSQLDATA=/var/lib/mysql - MYSQLLOG=/var/log/mysql - MYSQLRUN=/var/run/mysqld - MYSQLFILES=/var/lib/mysql-files - - server_stop - - db_input high mysql-community-server/remove-data-dir || true - db_go - db_get mysql-community-server/remove-data-dir && RMDATADIR=${RET} - if [ "${RMDATADIR}" = "true" ]; - then - if [ -d ${MYSQLRUN} ] || [ -L ${MYSQLRUN} ]; - then - rm -rf ${MYSQLRUN} - fi - - if [ -d ${MYSQLLOG} ] || [ -L ${MYSQLLOG} ]; - then - rm -rf ${MYSQLLOG} - fi - - if [ -d ${MYSQLDATA} ] || [ -L ${MYSQLDATA} ]; - then - rm -rf ${MYSQLDATA} - fi - - if [ -d ${MYSQLFILES} ] || [ -L ${MYSQLFILES} ]; - then - rm -rf ${MYSQLFILES} - fi - - if getent passwd mysql >/dev/null; - then - userdel mysql - fi - fi - - set +e - ;; - - abort-install) - - set -e - - place_upstart_job_back - - if [ -x "/etc/init.d/mysql" ]; - then - invoke-rc.d mysql start || exit $? - else - if [ -d ${MYSQLRUN} ] || [ -L ${MYSQLRUN} ]; - then - rm -rf ${MYSQLRUN} - fi - - if [ -d ${MYSQLLOG} ] || [ -L ${MYSQLLOG} ]; - then - rm -rf ${MYSQLLOG} - fi - - if [ -d ${MYSQLDATA} ] || [ -L ${MYSQLDATA} ]; - then - rm -rf ${MYSQLDATA} - fi - - if [ -d ${MYSQLFILES} ] || [ -L ${MYSQLFILES} ]; - then - rm -rf ${MYSQLFILES} - fi - - if getent passwd mysql >/dev/null; - then - userdel mysql - fi - fi - - set +e - ;; - - upgrade|abort-upgrade) - - ;; - - *) - exit 1 - ;; -esac - -#DEBHELPER# - -exit 0 diff --git a/packaging/deb-trusty/mysql-community-server.preinst b/packaging/deb-trusty/mysql-community-server.preinst deleted file mode 100755 index e5b3b7719b69..000000000000 --- a/packaging/deb-trusty/mysql-community-server.preinst +++ /dev/null @@ -1,131 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -get_pcount () { - PSCOUNT=$(ps -ef | grep "/usr/sbin/mysqld" | wc -l) - echo "${PSCOUNT}" -} - -server_stop () { - PSCOUNT=$(get_pcount) - COUNT=0 - while :; do - COUNT=$(( COUNT+1 )) - echo -n . - if [ "${PSCOUNT}" -eq 1 ]; - then - echo - break - fi - if [ "${COUNT}" -gt 15 ]; - then - echo - return 1 - fi - PSCOUNT=$(get_pcount) - sleep 1 - done - return 0 -} - -case "$1" in - install) - - if [ -z "$2" ]; - then - - set -e - - if [ -x "/etc/init.d/mysql" ]; - then - invoke-rc.d mysql stop || exit $? - server_stop - fi - - MYSQLDATA=/var/lib/mysql - MYSQLFILES=/var/lib/mysql-files - MYSQLLOG=/var/log/mysql - MYSQLRUN=/var/run/mysqld - - if ! getent group mysql >/dev/null; - then - addgroup --system mysql >/dev/null - fi - - if ! getent passwd mysql >/dev/null; - then - adduser --ingroup mysql --system --disabled-login --no-create-home --home ${MYSQLDATA} --shell /bin/false --gecos "MySQL Server" mysql >/dev/null - fi - - if [ ! -d ${MYSQLDATA} -a ! -L ${MYSQLDATA} ]; - then - mkdir ${MYSQLDATA} - chown mysql:mysql ${MYSQLDATA} - chmod 750 ${MYSQLDATA} - fi - - if [ ! -d ${MYSQLFILES} -a ! -L ${MYSQLFILES} ]; - then - mkdir ${MYSQLFILES} - chown mysql:mysql ${MYSQLFILES} - chmod 770 ${MYSQLFILES} - fi - - if [ ! -d ${MYSQLLOG} -a ! -L ${MYSQLLOG} ]; - then - mkdir ${MYSQLLOG} - chown mysql:adm ${MYSQLLOG} - chmod 750 ${MYSQLLOG} - touch ${MYSQLLOG}/error.log - chmod 640 ${MYSQLLOG}/error.log - chown mysql:adm ${MYSQLLOG}/error.log - fi - - if [ ! -d ${MYSQLRUN} -a ! -L ${MYSQLRUN} ]; - then - mkdir ${MYSQLRUN} - chown mysql:mysql ${MYSQLRUN} - chmod 755 ${MYSQLRUN} - fi - - set +e - - fi - - ;; - - upgrade) - - set -e - - #DEBHELPER# - server_stop - - set +e - - ;; - - abort-upgrade) - - ;; - - *) - exit 1 - ;; -esac - -exit 0 diff --git a/packaging/deb-trusty/mysql-community-server.prerm b/packaging/deb-trusty/mysql-community-server.prerm deleted file mode 100755 index 7509de7a948c..000000000000 --- a/packaging/deb-trusty/mysql-community-server.prerm +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -set -e - -#DEBHELPER# - -set +e - -exit 0 diff --git a/packaging/deb-trusty/mysql-community-server.templates b/packaging/deb-trusty/mysql-community-server.templates deleted file mode 100644 index 2469d917769e..000000000000 --- a/packaging/deb-trusty/mysql-community-server.templates +++ /dev/null @@ -1,34 +0,0 @@ -Template: mysql-community-server/root-pass -Type: password -Description: Enter root password: - Please provide a strong password that will be set for the root account of your MySQL database. - Leave it blank if you do not wish to set or change the root password at this time. - -Template: mysql-community-server/re-root-pass -Type: password -Description: Re-enter root password: - Now that you have selected a password for the root account, please confirm by typing it again. Do not share the password with anyone. - -Template: mysql-community-server/root-pass-mismatch -Type: error -Description: The two passwords did not match - Please try again. Make sure you type the exact same password twice. - -Template: mysql-community-server/remove-data-dir -Type: boolean -Default: false -Description: Remove data directory at /var/lib/mysql ? - This operation will remove the data directory that stores all the databases, tables and related meta-data. - Additionally, any import or export files stored at '/var/lib/mysql-files' will be removed along with directory. - It is highly recommended to take data backup before removing the data directory. - -Template: mysql-community-server/data-dir -Type: note -Description: Data directory found when no MySQL server package is installed - A data directory '/var/lib/mysql' is present on this system when no MySQL server - package is currently installed on the system. The directory may be under control of - server package received from third-party vendors. It may also be an unclaimed data - directory from previous removal of mysql packages. - . - It is highly recommended to take data backup. If you have not done so, now would be - the time to take backup in another shell. Once completed, press 'Ok' to continue. diff --git a/packaging/deb-trusty/mysql-community-source.install b/packaging/deb-trusty/mysql-community-source.install deleted file mode 100644 index 326c5dfb575e..000000000000 --- a/packaging/deb-trusty/mysql-community-source.install +++ /dev/null @@ -1,20 +0,0 @@ -# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -../*.dsc usr/src/mysql/ -../*.tar.gz usr/src/mysql/ -# legal -usr/share/doc/mysql-community-source/COPYING -usr/share/doc/mysql-community-source/README diff --git a/packaging/deb-trusty/mysql-community-source.lintian-overrides b/packaging/deb-trusty/mysql-community-source.lintian-overrides deleted file mode 100644 index 9ca84e90712c..000000000000 --- a/packaging/deb-trusty/mysql-community-source.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-community-source: extra-license-file usr/share/doc/mysql-community-source/LICENSE.mysql -mysql-community-source: extra-license-file usr/share/doc/mysql-community-source/COPYING.gz -mysql-community-source: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-trusty/mysql-community-test.install b/packaging/deb-trusty/mysql-community-test.install deleted file mode 100644 index d5f820dd6fc4..000000000000 --- a/packaging/deb-trusty/mysql-community-test.install +++ /dev/null @@ -1,20 +0,0 @@ -# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -usr/lib/mysql-test/* -usr/share/man/man1/mysql-test-run.pl.1 -# legal -usr/share/doc/mysql-community-test/COPYING -usr/share/doc/mysql-community-test/README diff --git a/packaging/deb-trusty/mysql-community-test.links b/packaging/deb-trusty/mysql-community-test.links deleted file mode 100644 index aedf2db3b736..000000000000 --- a/packaging/deb-trusty/mysql-community-test.links +++ /dev/null @@ -1,17 +0,0 @@ -# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -usr/lib/mysql-test/mysql-test-run.pl usr/lib/mysql-test/mysql-test-run -usr/lib/mysql-test/mysql-test-run.pl usr/lib/mysql-test/mtr diff --git a/packaging/deb-trusty/mysql-community-test.lintian-overrides b/packaging/deb-trusty/mysql-community-test.lintian-overrides deleted file mode 100644 index ff273bbe9135..000000000000 --- a/packaging/deb-trusty/mysql-community-test.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-community-test: extra-license-file usr/share/doc/mysql-community-test/LICENSE.mysql -mysql-community-test: extra-license-file usr/share/doc/mysql-community-test/COPYING.gz -mysql-community-test: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-trusty/mysql-server.install b/packaging/deb-trusty/mysql-server.install deleted file mode 100644 index 07f36ef57d80..000000000000 --- a/packaging/deb-trusty/mysql-server.install +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# legal -usr/share/doc/mysql-server/COPYING -usr/share/doc/mysql-server/README diff --git a/packaging/deb-trusty/mysql-server.lintian-overrides b/packaging/deb-trusty/mysql-server.lintian-overrides deleted file mode 100644 index 487709765b02..000000000000 --- a/packaging/deb-trusty/mysql-server.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-server: extra-license-file usr/share/doc/mysql-server/LICENSE.mysql -mysql-server: extra-license-file usr/share/doc/mysql-server/COPYING.gz -mysql-server: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-trusty/mysql-testsuite.install b/packaging/deb-trusty/mysql-testsuite.install deleted file mode 100644 index 6a6e5f505b0f..000000000000 --- a/packaging/deb-trusty/mysql-testsuite.install +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# legal -usr/share/doc/mysql-testsuite/COPYING -usr/share/doc/mysql-testsuite/README diff --git a/packaging/deb-trusty/mysql-testsuite.lintian-overrides b/packaging/deb-trusty/mysql-testsuite.lintian-overrides deleted file mode 100644 index 37488fe69b72..000000000000 --- a/packaging/deb-trusty/mysql-testsuite.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-testsuite: extra-license-file usr/share/doc/mysql-testsuite/LICENSE.mysql -mysql-testsuite: extra-license-file usr/share/doc/mysql-testsuite/COPYING.gz -mysql-testsuite: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-trusty/patches/fix-man-page-links.patch b/packaging/deb-trusty/patches/fix-man-page-links.patch deleted file mode 100644 index 004ccdf77d03..000000000000 --- a/packaging/deb-trusty/patches/fix-man-page-links.patch +++ /dev/null @@ -1,14 +0,0 @@ -From: Akhil Mohan -Description: Fix path in man page link. -Bug: http://bugs.mysql.com/bug.php?id=70952 - ---- a/man/mysql_client_test_embedded.1 2013-11-08 19:00:22.000000000 +0530 -+++ b/man/mysql_client_test_embedded.1 2013-11-14 19:29:56.768315219 +0530 -@@ -1 +1 @@ --.so man-gpl-tmp2/mysql_client_test.1 -+.so man1/mysql_client_test.1 ---- a/man/mysqltest_embedded.1 2013-11-08 19:00:22.000000000 +0530 -+++ b/man/mysqltest_embedded.1 2013-11-14 19:31:19.079280675 +0530 -@@ -1 +1 @@ --.so man-gpl-tmp2/mysqltest.1 -+.so man1/mysqltest.1 diff --git a/packaging/deb-trusty/patches/fix-mtr-search-paths.patch b/packaging/deb-trusty/patches/fix-mtr-search-paths.patch deleted file mode 100644 index 8a27a091e6ce..000000000000 --- a/packaging/deb-trusty/patches/fix-mtr-search-paths.patch +++ /dev/null @@ -1,13 +0,0 @@ -From: Akhil Mohan -Description: Adding extra search path for testsuite. - ---- a/mysql-test/lib/mtr_cases.pm 2014-02-24 13:14:37 +0530 -+++ b/mysql-test/lib/mtr_cases.pm 2014-07-02 11:46:24 +0530 -@@ -288,6 +288,7 @@ - { - $suitedir= my_find_dir($::basedir, - ["share/mysql-test/suite", -+ "lib/mysql-test/suite", - "mysql-test/suite", - "internal/mysql-test/suite", - "mysql-test", diff --git a/packaging/deb-trusty/patches/fix-mysql_install_db.patch b/packaging/deb-trusty/patches/fix-mysql_install_db.patch deleted file mode 100644 index 41311b2c8f9e..000000000000 --- a/packaging/deb-trusty/patches/fix-mysql_install_db.patch +++ /dev/null @@ -1,43 +0,0 @@ -From: Terje Røsten -Description: Maintains the pending --skip-my-cnf option in mainline -Bug: - -diff --git a/scripts/mysql_install_db.pl.in b/scripts/mysql_install_db.pl.in -index 440a977..7d068fc 100644 ---- a/scripts/mysql_install_db.pl.in -+++ b/scripts/mysql_install_db.pl.in -@@ -113,6 +113,7 @@ EOF2 - print <{srcdir} and $opt->{basedir} ) - { - error($opt,"Specify either --basedir or --srcdir, not both"); - } --if ( $opt->{'keep-my-cnf'} ) -+if ( $opt->{rpm} || $opt->{'keep-my-cnf'} ) - { - $keep_my_cnf = 1; - } -@@ -664,7 +665,7 @@ if ( $opt->{'skip-name-resolve'} and $resolved and $resolved =~ /\s/ ) - } - - # ---------------------------------------------------------------------- --# Create database directories mysql & test -+# Create database directory mysql - # ---------------------------------------------------------------------- - - # FIXME The shell variant uses "mkdir -p": -@@ -697,7 +698,7 @@ if ($opt_user) - } - } - --foreach my $dir ( $opt->{ldata}, "$opt->{ldata}/mysql", "$opt->{ldata}/test" ) -+foreach my $dir ( $opt->{ldata}, "$opt->{ldata}/mysql") - { - mkdir($dir, 0700) unless -d $dir; - if ($opt_user and -w "/") diff --git a/packaging/deb-trusty/patches/series b/packaging/deb-trusty/patches/series deleted file mode 100644 index 31af2dc779ba..000000000000 --- a/packaging/deb-trusty/patches/series +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -#fix-man-page-links.patch -fix-mysql_install_db.patch -fix-mtr-search-paths.patch diff --git a/packaging/deb-trusty/rules b/packaging/deb-trusty/rules deleted file mode 100755 index 8e4ab9490aea..000000000000 --- a/packaging/deb-trusty/rules +++ /dev/null @@ -1,135 +0,0 @@ -#!/usr/bin/make -f - -# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -%: - dh $@ - -export DH_VERBOSE=1 -export CFLAGS= -export CXXFLAGS= - -override_dh_auto_configure: - @echo "RULES.$@" - cmake . \ - -DBUILD_CONFIG=mysql_release \ - -DCMAKE_INSTALL_PREFIX=/usr \ - -DINSTALL_DOCDIR=share/mysql/docs \ - -DINSTALL_DOCREADMEDIR=share/mysql \ - -DINSTALL_INCLUDEDIR=include/mysql \ - -DINSTALL_INFODIR=share/mysql/docs \ - -DINSTALL_LIBDIR=lib/$(DEB_HOST_MULTIARCH) \ - -DINSTALL_MANDIR=share/man \ - -DINSTALL_MYSQLSHAREDIR=share/mysql \ - -DINSTALL_MYSQLTESTDIR=lib/mysql-test \ - -DINSTALL_PLUGINDIR=lib/mysql/plugin \ - -DINSTALL_SBINDIR=sbin \ - -DINSTALL_SCRIPTDIR=bin \ - -DINSTALL_SQLBENCHDIR=lib/mysql \ - -DINSTALL_SUPPORTFILESDIR=share/mysql \ - -DMYSQL_DATADIR=/var/lib/mysql \ - -DSYSCONFDIR=/etc/mysql \ - -DMYSQL_UNIX_ADDR=/var/run/mysqld/mysqld.sock \ - -DWITH_SSL=bundled \ - -DWITH_ZLIB=system \ - -DWITH_EXTRA_CHARSETS=all \ - -DWITH_INNODB_MEMCACHED=1 \ - -DCOMPILATION_COMMENT="MySQL Community Server (GPL)" \ - -DINSTALL_LAYOUT=DEB - - cat CMakeCache.txt - touch $@ - -override_dh_auto_build: - @echo "RULES.$@" - $(MAKE) -j8 VERBOSE=1 - touch $@ - -override_dh_auto_test: - @echo "RULES.$@" - echo "No tests run because test 9: pfs_connect_attr is failing unreasonably" - touch $@ - -override_dh_auto_install: - - @echo "RULES.$@" - # complete install first - $(MAKE) install DESTDIR=debian/tmp - # remove all redundant files and links - rm debian/tmp/usr/lib/*/*_r* - rm debian/tmp/usr/lib/mysql-test/cmake_install.cmake - rm debian/tmp/usr/lib/mysql-test/CTestTestfile.cmake - rm debian/tmp/usr/lib/mysql-test/Makefile - # add missing man pages - install -g root -o root -m 0644 debian/extra/mysql_embedded.1 debian/tmp/usr/share/man/man1 - # add MySQL Server configuration file my.cnf to mysql-common package - install -g root -o root -m 0644 -D debian/extra/my.cnf debian/tmp/etc/mysql/my.cnf - # add MySQL Server debug binary and library to package - install -g root -o root -m 0755 debian/extra/server-binary debian/tmp/usr/sbin/mysqld-debug - install -g root -o root -m 0755 debian/extra/embedded-server debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/libmysqld-debug.a - # add debug plugin libraries to package - install -g root -o root -m 0755 -d debian/tmp/usr/lib/mysql/plugin/debug - for file in debian/extra/*-plugin; do NEW=`echo $$file | cut -d- -f1`; mv $$file $$NEW.so; done - install -g root -o root -m 0755 debian/extra/*.so debian/tmp/usr/lib/mysql/plugin/debug - install -g root -o root -m 0755 debian/extra/daemon_example.ini debian/tmp/usr/lib/mysql/plugin/debug - # add apparmor profile - install -g root -o root -m 0644 -D debian/extra/apparmor-profile debian/tmp/etc/apparmor.d/usr.sbin.mysqld - # add directory for legal docs - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-server - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-community-server - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-client - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-community-client - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-common - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/libmysqlclient18 - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/libmysqlclient-dev - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/libmysqld-dev - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-community-bench - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-testsuite - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-community-test - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-community-source - # add COPYING file to each package - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-server/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-community-server/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-client/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-community-client/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-common/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/libmysqlclient18/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/libmysqlclient-dev/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/libmysqld-dev/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-community-bench/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-testsuite/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-community-test/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-community-source/COPYING - # add README file to each package - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-server/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-community-server/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-client/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-community-client/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-common/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/libmysqlclient18/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/libmysqlclient-dev/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/libmysqld-dev/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-community-bench/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-testsuite/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-community-test/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-community-source/README - touch $@ - -override_dh_installinit: - @echo "RULES.$@" - dh_apparmor -pmysql-community-server --profile-name=usr.sbin.mysqld - dh_installinit --name=mysql -- defaults 19 21 - touch $@ diff --git a/packaging/deb-trusty/source/format b/packaging/deb-trusty/source/format deleted file mode 100644 index 163aaf8d82b6..000000000000 --- a/packaging/deb-trusty/source/format +++ /dev/null @@ -1 +0,0 @@ -3.0 (quilt) diff --git a/packaging/deb-trusty/source/include-binaries b/packaging/deb-trusty/source/include-binaries deleted file mode 100644 index adb5f54bb2d2..000000000000 --- a/packaging/deb-trusty/source/include-binaries +++ /dev/null @@ -1,35 +0,0 @@ -# Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# obscured filename for mysqld-debug, libmysqld-debug.a and debug plugins -debian/extra/server-binary -debian/extra/embedded-server -debian/extra/adt_null-plugin -debian/extra/auth-plugin -debian/extra/auth_socket-plugin -debian/extra/auth_test_plugin-plugin -debian/extra/innodb_engine-plugin -debian/extra/libdaemon_example-plugin -debian/extra/libmemcached-plugin -debian/extra/mypluglib-plugin -debian/extra/mysql_no_login-plugin -debian/extra/qa_auth_client-plugin -debian/extra/qa_auth_interface-plugin -debian/extra/qa_auth_server-plugin -debian/extra/semisync_master-plugin -debian/extra/semisync_slave-plugin -debian/extra/test_udf_services-plugin -debian/extra/validate_password-plugin -debian/extra/connection_control-plugin diff --git a/packaging/deb-trusty/watch b/packaging/deb-trusty/watch deleted file mode 100644 index c45c5e3e89d6..000000000000 --- a/packaging/deb-trusty/watch +++ /dev/null @@ -1,2 +0,0 @@ -version=3 -http://mysql.mirrors.pair.com/Downloads/MySQL-5.6/mysql-([\d\.]+).tar.gz diff --git a/packaging/deb-utopic/changelog b/packaging/deb-utopic/changelog deleted file mode 100644 index 6c391b4417a7..000000000000 --- a/packaging/deb-utopic/changelog +++ /dev/null @@ -1,96 +0,0 @@ -mysql-community (5.6.25-1ubuntu14.10) utopic; urgency=low - - * new upstream release - * mysql-community-server now depends on perl, psmisc - mysql-community-test now depends on python, libmysqlclient-dev - (Closes: #20561621) - - -- Akhil Mohan Wed, 25 Feb 2014 22:52:19 +0530 - -mysql-community (5.6.24-1ubuntu14.10) utopic; urgency=low - - * new upstream release - - -- Akhil Mohan Mon, 16 Feb 2014 15:45:09 +0530 - -mysql-community (5.6.23-1ubuntu14.10) utopic; urgency=low - - * new upstream release - * mysql-community-server now recommends mysql-client - * mysql-community-server now depends on apparmor - * removed template install-test-db; not installed by default - * d/compat incremented to 9 from 8 - * d/control updated to build depend on debhelper 9 - * added d/*.lintian-overrides and d/source/lintian-overrides - * d/rules updated to reflect correct file permissions - - -- Akhil Mohan Wed, 31 Dec 2014 10:51:07 +0530 - -mysql-community (5.6.22-2ubuntu14.10) utopic; urgency=low - - * new upstream release - * mysql-common now replaces mysql-server-{,core-}5.6 - - -- Akhil Mohan Wed, 28 Nov 2014 15:18:07 +0530 - -mysql-community (5.6.22-1ubuntu14.10) utopic; urgency=low - - * new upstream release - * fixed d/*server.postinst to allow dropping test db without - setting root password - * init script will now run my_i_db if data dir is not present or empty - * updated init script to read app armor profile on startup - * forked packaging source from trusty and rebranded for utopic - * updated d/m-c-source.install to pack *.xz packaging source archive - * added more system resources to app armor profile - * dh_apparmor to now run before dh_installinit in d/rules - * libmysqlclient-dev now replaces mysql-client-{,core-}5.6 - - -- Akhil Mohan Wed, 05 Nov 2014 17:04:07 +0530 - -mysql-community (5.6.21-1ubuntu14.04) trusty; urgency=low - - * new upstream release - * updated d/rules to increment -j8 as make option - * updated d/source/include-binaries to add mysql_no_login plugin - * updated CMake option WITH_EXTRA_CHARSETS from complex to all - - -- Akhil Mohan Wed, 20 Aug 2014 19:12:30 +0530 - -mysql-community (5.6.20-1ubuntu14.04) trusty; urgency=low - - * new upstream release - * added fakeroot as build-dep in d/control - * added d/*.dirs for bench, dev and test pkg - * updated d/rules to make compilation verbose - * removed default CFLAGS, CXXFLAGS in d/rules - * added patch for testsuite search paths under d/patches - * modified cmake option for testsuite in d/rules - * updated patch d/fix-mysql_install_db.patch - * enabled two patches in d/patches/series - * removed extra permissions check in d/rules when fixed in source - * modified d/mysql-*-server.postinst to stop removing /usr/my.cnf - * modified d/*-test.* for updated location of testsuite - * updated d/{mysql-*-server.install,rules} to include debug plugins - * updated d/rules to remove storage engine cmake options - * modified data dir permission in d/*server.{pre,post}inst - * updated d/source/include-binaries to add debug plugins - * updated d/rules to rename debug plugins - - -- Akhil Mohan Wed, 02 Jul 2014 17:45:30 +0530 - -mysql-community (5.6.19-1ubuntu14.04) trusty; urgency=low - - * new upstream release - * d/rules updated to rid of files removed from source - * modified path for source tar in source pkg - * obscured actual filenames in d/source/include-binaries - * modified d/rules to handle obscured filenames - - -- Akhil Mohan Mon, 05 May 2014 15:45:10 +0530 - -mysql-community (5.6.17-1ubuntu14.04) trusty; urgency=low - - * new upstream release - - -- Akhil Mohan Fri, 28 Feb 2014 18:06:30 +0530 diff --git a/packaging/deb-utopic/compat b/packaging/deb-utopic/compat deleted file mode 100644 index ec635144f600..000000000000 --- a/packaging/deb-utopic/compat +++ /dev/null @@ -1 +0,0 @@ -9 diff --git a/packaging/deb-utopic/control b/packaging/deb-utopic/control deleted file mode 100644 index e04d7531d286..000000000000 --- a/packaging/deb-utopic/control +++ /dev/null @@ -1,190 +0,0 @@ -Source: mysql-community -Maintainer: MySQL Release Engineering -Section: database -Priority: optional -Standards-Version: 3.9.5 -Homepage: http://www.mysql.com/ -Build-Depends: debhelper (>= 9.0.0), libaio-dev[linux-any], libncurses5-dev (>= 5.0-6), perl, zlib1g-dev (>= 1:1.1.3-5), po-debconf, psmisc, bison, dh-apparmor, lsb-release, cmake, fakeroot, libnuma-dev - -Package: mysql-server -Architecture: any -Depends: mysql-community-server (= ${binary:Version}), ${misc:Depends} -Description: MySQL Server meta package depending on latest version - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This is a meta package that depends on the latest mysql server - package available in the repository. - -Package: mysql-community-server -Architecture: any -Pre-depends: debconf (>= 0.2.17), adduser -Depends: mysql-common (= ${binary:Version}), apparmor, perl, psmisc, - ${shlibs:Depends}, ${misc:Depends} -Recommends: mysql-client (= ${binary:Version}) -Conflicts: mysql, - mysql-server-5.0, mysql-server-core-5.0, - mysql-server-5.1, mysql-server-core-5.1, - mysql-server-5.5, mysql-server-core-5.5, - mysql-server-5.6, mysql-server-core-5.6, - mysql-commercial-server -Replaces: mysql, - mysql-server-5.0, mysql-server-core-5.0, - mysql-server-5.1, mysql-server-core-5.1, - mysql-server-5.5, mysql-server-core-5.5, - mysql-server-5.6, mysql-server-core-5.6, - mysql-commercial-server -Provides: virtual-mysql-server, virtual-mysql-server-core, - mysql-server-5.6, mysql-server-core-5.6 -Description: MySQL Server - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This package includes the MySQL server binary as well as related - utilities to run and administer a MySQL server. - -Package: mysql-client -Architecture: any -Depends: mysql-community-client (= ${binary:Version}), ${misc:Depends} -Description: MySQL Client meta package depending on latest version - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This is a meta package that depends on the latest mysql client - package available in the repository. - -Package: mysql-community-client -Architecture: any -Depends: mysql-common (= ${binary:Version}), - ${shlibs:Depends}, ${misc:Depends} -Conflicts: mysql, - mysql-client-5.0, mysql-client-core-5.0, - mysql-client-5.1, mysql-client-core-5.1, - mysql-client-5.5, mysql-client-core-5.5, - mysql-client-5.6, mysql-client-core-5.6, - mysql-commercial-client -Replaces: mysql, - mysql-client-5.0, mysql-client-core-5.0, - mysql-client-5.1, mysql-client-core-5.1, - mysql-client-5.5, mysql-client-core-5.5, - mysql-client-5.6, mysql-client-core-5.6, - mysql-commercial-client -Provides: virtual-mysql-client, virtual-mysql-client-core, - mysql-client-5.6, mysql-client-core-5.6 -Description: MySQL Client - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This package contains the standard MySQL clients and - administration tools. - -Package: libmysqlclient18 -Architecture: any -Section: libs -Pre-Depends: ${misc:Pre-Depends} -Multi-Arch: same -Depends: mysql-common (= ${binary:Version}), - ${shlibs:Depends}, ${misc:Depends} -Description: MySQL shared client libraries - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This package contains the shared libraries for MySQL client - applications. - -Package: mysql-common -Architecture: any -Pre-depends: debconf (>= 0.2.17), ${misc:Pre-Depends} -Multi-Arch: foreign -Depends: ${shlibs:Depends}, ${misc:Depends} -Conflicts: mysql -Replaces: mysql, mysql-server-5.5, mysql-server-core-5.5, libmysqlclient-dev, - mysql-server-5.6, mysql-server-core-5.6 -Provides: mysql-common -Description: MySQL Common - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This package contains common files needed by MySQL client - library, MySQL database server, and MySQL embedded server. - -Package: libmysqlclient-dev -Architecture: any -Section: libdevel -Depends: libmysqlclient18 (= ${binary:Version}), - ${shlibs:Depends}, ${misc:Depends} -Replaces: mysql-client-5.6, mysql-client-core-5.6 -Description: MySQL development headers - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This package contains the development header files necessary - to develop MySQL client applications. - -Package: libmysqld-dev -Architecture: any -Section: libdevel -Depends: libmysqlclient-dev (= ${binary:Version}), - ${shlibs:Depends}, ${misc:Depends} -Description: MySQL embedded server library - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This package contains the MySQL server as an embedded library. - -Package: mysql-testsuite -Architecture: any -Depends: mysql-community-test (= ${binary:Version}), ${misc:Depends} -Description: MySQL Testsuite meta package depending on latest version - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This is a meta package that depends on the latest mysql test - package available in the repository. - -Package: mysql-community-test -Architecture: any -Depends: mysql-community-server (= ${binary:Version}), - mysql-community-client (= ${binary:Version}), python, - libmysqlclient-dev, ${shlibs:Depends}, ${misc:Depends} -Conflicts: mysql, - mysql-testsuite-5.0, mysql-testsuite-5.1, mysql-testsuite-5.5, - mysql-testsuite-5.6, mysql-commercial-test -Description: MySQL Test Run MTR - The MySQL testsuite - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This package contains the MySQL regression test suite for MySQL - database server. - -Package: mysql-community-bench -Architecture: any -Depends: mysql-community-server (= ${binary:Version}), - ${shlibs:Depends}, ${misc:Depends} -Conflicts: mysql, mysql-commercial-bench -Description: MySQL Bench - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. - -Package: mysql-community-source -Architecture: any -Depends: ${misc:Depends}, ${shlibs:Depends} -Description: MySQL source - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. diff --git a/packaging/deb-utopic/copyright b/packaging/deb-utopic/copyright deleted file mode 100644 index 2c31f2400ae5..000000000000 --- a/packaging/deb-utopic/copyright +++ /dev/null @@ -1,41 +0,0 @@ -Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ -Upstream-Name: MySQL Server 5.6 -Upstream-Contact: MySQL Release Engineering -Source: http://dev.mysql.com/ - -Copyright: 2000, 2014, 2015, Oracle and/or its affiliates. All rights reserved. -License: - This is a release of MySQL, a dual-license SQL database server. - For the avoidance of doubt, this particular copy of the software - is released under the version 2 of the GNU General Public License. - MySQL is brought to you by Oracle. - . - MySQL FOSS License Exception - We want free and open source software applications under certain - licenses to be able to use specified GPL-licensed MySQL client - libraries despite the fact that not all such FOSS licenses are - compatible with version 2 of the GNU General Public License. - Therefore there are special exceptions to the terms and conditions - of the GPLv2 as applied to these client libraries, which are - identified and described in more detail in the FOSS License - Exception at - . - . - This distribution may include materials developed by third - parties. For license and attribution notices for these - materials, please refer to the documentation that accompanies - this distribution (see the "Licenses for Third-Party Components" - appendix) or view the online documentation at - . - . - GPLv2 Disclaimer - For the avoidance of doubt, except that if any license choice - other than GPL or LGPL is available it will apply instead, - Oracle elects to use only the General Public License version 2 - (GPLv2) at this time for any software where a choice of GPL - license versions is made available with the language indicating - that GPLv2 or any later version may be used, or where a choice - . - The full text of the GNU General Public License version 2 can - be found in the file - `/usr/share/mysql/doc/COPYING'. diff --git a/packaging/deb-utopic/extra/apparmor-profile b/packaging/deb-utopic/extra/apparmor-profile deleted file mode 100644 index 5370d9e496a0..000000000000 --- a/packaging/deb-utopic/extra/apparmor-profile +++ /dev/null @@ -1,49 +0,0 @@ -# vim:syntax=apparmor -# Last Modified: Fri Feb 28 18:06:30 2014 -#include - -/usr/sbin/mysqld { - #include - #include - #include - -# Allow system resource access - /sys/devices/system/cpu/ r, - capability sys_resource, - capability dac_override, - capability setuid, - capability setgid, - -# Allow config access - /etc/mysql/conf.d/ r, - /etc/mysql/conf.d/*.cnf r, - /etc/mysql/*.cnf r, - -# Allow pid and socket file access - /run/mysqld/mysqld.pid rw, - /run/mysqld/mysqld.sock rw, - -# Allow read/ write to /tmp - /tmp/ r, - /tmp/* rw, - -# Allow execution of server binary - /usr/sbin/mysqld mr, - /usr/sbin/mysqld-debug mr, - -# Allow plugin access - /usr/lib/mysql/plugin/ r, - /usr/lib/mysql/plugin/*.so* mr, - -# Allow error msg and charset access - /usr/share/mysql/ r, - /usr/share/mysql/** r, - -# Allow data dir access - /var/lib/mysql/ r, - /var/lib/mysql/** rwk, - -# Allow log file access - /var/log/mysql/ r, - /var/log/mysql/** rw, -} diff --git a/packaging/deb-utopic/extra/my.cnf b/packaging/deb-utopic/extra/my.cnf deleted file mode 100644 index 3a5445fac740..000000000000 --- a/packaging/deb-utopic/extra/my.cnf +++ /dev/null @@ -1,57 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# -# The MySQL Community Server configuration file. -# -# For explanations see -# http://dev.mysql.com/doc/mysql/en/server-system-variables.html - -[client] -port = 3306 -socket = /var/run/mysqld/mysqld.sock - -[mysqld_safe] -pid-file = /var/run/mysqld/mysqld.pid -socket = /var/run/mysqld/mysqld.sock -nice = 0 - -[mysqld] -user = mysql -pid-file = /var/run/mysqld/mysqld.pid -socket = /var/run/mysqld/mysqld.sock -port = 3306 -basedir = /usr -datadir = /var/lib/mysql -tmpdir = /tmp -lc-messages-dir = /usr/share/mysql -explicit_defaults_for_timestamp - -# Instead of skip-networking the default is now to listen only on -# localhost which is more compatible and is not less secure. -bind-address = 127.0.0.1 - -log-error = /var/log/mysql/error.log - -# Recommended in standard MySQL setup -sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES - -# Disabling symbolic-links is recommended to prevent assorted security risks -symbolic-links=0 - -# * IMPORTANT: Additional settings that can override those from this file! -# The files must end with '.cnf', otherwise they'll be ignored. -# -!includedir /etc/mysql/conf.d/ diff --git a/packaging/deb-utopic/extra/mysql_embedded.1 b/packaging/deb-utopic/extra/mysql_embedded.1 deleted file mode 100644 index 735c4e05ae07..000000000000 --- a/packaging/deb-utopic/extra/mysql_embedded.1 +++ /dev/null @@ -1 +0,0 @@ -.so man1/mysql.1 diff --git a/packaging/deb-utopic/libmysqlclient-dev.install b/packaging/deb-utopic/libmysqlclient-dev.install deleted file mode 100644 index e7e98c156c39..000000000000 --- a/packaging/deb-utopic/libmysqlclient-dev.install +++ /dev/null @@ -1,29 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -usr/include/mysql/*.h -usr/include/mysql/mysql/*.h -usr/include/mysql/mysql/*.h.pp -usr/include/mysql/mysql/psi/*.h -usr/lib/*/libmysqlclient.a -usr/lib/*/libmysqlclient.so -usr/lib/*/libmysqlservices.a -usr/bin/mysql_config -usr/bin/mysql_config_editor -usr/share/man/man1/mysql_config.1 -usr/share/man/man1/mysql_config_editor.1 -# legal -usr/share/doc/libmysqlclient-dev/COPYING -usr/share/doc/libmysqlclient-dev/README diff --git a/packaging/deb-utopic/libmysqlclient-dev.lintian-overrides b/packaging/deb-utopic/libmysqlclient-dev.lintian-overrides deleted file mode 100644 index 09960eb27301..000000000000 --- a/packaging/deb-utopic/libmysqlclient-dev.lintian-overrides +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -libmysqlclient-dev: extra-license-file usr/share/doc/libmysqlclient-dev/LICENSE.mysql -libmysqlclient-dev: extra-license-file usr/share/doc/libmysqlclient-dev/COPYING.gz -libmysqlclient-dev: copyright-should-refer-to-common-license-file-for-lgpl -# Due to static linking this cannot be avoided and hence being overridden -libmysqlclient-dev: embedded-library diff --git a/packaging/deb-utopic/libmysqlclient18.install b/packaging/deb-utopic/libmysqlclient18.install deleted file mode 100644 index fe6aa56ce62c..000000000000 --- a/packaging/deb-utopic/libmysqlclient18.install +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -usr/lib/*/libmysqlclient.so.* -# legal -usr/share/doc/libmysqlclient18/COPYING -usr/share/doc/libmysqlclient18/README diff --git a/packaging/deb-utopic/libmysqlclient18.lintian-overrides b/packaging/deb-utopic/libmysqlclient18.lintian-overrides deleted file mode 100644 index 1f26511a13d0..000000000000 --- a/packaging/deb-utopic/libmysqlclient18.lintian-overrides +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -libmysqlclient18: extra-license-file usr/share/doc/libmysqlclient18/LICENSE.mysql -libmysqlclient18: extra-license-file usr/share/doc/libmysqlclient18/COPYING.gz -libmysqlclient18: copyright-should-refer-to-common-license-file-for-lgpl -# Due to static linking this cannot be avoided and hence being overridden -libmysqlclient18: embedded-library diff --git a/packaging/deb-utopic/libmysqld-dev.install b/packaging/deb-utopic/libmysqld-dev.install deleted file mode 100644 index 923f826ae5fe..000000000000 --- a/packaging/deb-utopic/libmysqld-dev.install +++ /dev/null @@ -1,20 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -usr/lib/*/libmysqld.a -usr/lib/*/libmysqld-debug.a -# legal -usr/share/doc/libmysqld-dev/COPYING -usr/share/doc/libmysqld-dev/README diff --git a/packaging/deb-utopic/libmysqld-dev.lintian-overrides b/packaging/deb-utopic/libmysqld-dev.lintian-overrides deleted file mode 100644 index 35caaeca0121..000000000000 --- a/packaging/deb-utopic/libmysqld-dev.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -libmysqld-dev: extra-license-file usr/share/doc/libmysqld-dev/LICENSE.mysql -libmysqld-dev: extra-license-file usr/share/doc/libmysqld-dev/COPYING.gz -libmysqld-dev: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-utopic/mysql-client.install b/packaging/deb-utopic/mysql-client.install deleted file mode 100644 index 13b877e7dafd..000000000000 --- a/packaging/deb-utopic/mysql-client.install +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# legal -usr/share/doc/mysql-client/COPYING -usr/share/doc/mysql-client/README diff --git a/packaging/deb-utopic/mysql-client.lintian-overrides b/packaging/deb-utopic/mysql-client.lintian-overrides deleted file mode 100644 index 5c4891c9190f..000000000000 --- a/packaging/deb-utopic/mysql-client.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-client: extra-license-file usr/share/doc/mysql-client/LICENSE.mysql -mysql-client: extra-license-file usr/share/doc/mysql-client/COPYING.gz -mysql-client: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-utopic/mysql-common.dirs b/packaging/deb-utopic/mysql-common.dirs deleted file mode 100644 index 69265ef08550..000000000000 --- a/packaging/deb-utopic/mysql-common.dirs +++ /dev/null @@ -1,16 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -etc/mysql/conf.d diff --git a/packaging/deb-utopic/mysql-common.install b/packaging/deb-utopic/mysql-common.install deleted file mode 100644 index 8a22acd42f67..000000000000 --- a/packaging/deb-utopic/mysql-common.install +++ /dev/null @@ -1,29 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -etc/mysql/my.cnf -usr/share/aclocal/mysql.m4 -usr/share/mysql/docs/INFO_SRC -usr/share/mysql/docs/INFO_BIN -usr/share/mysql/docs/ChangeLog -# localized error msgs -usr/share/mysql/*/errmsg.sys -usr/share/mysql/errmsg-utf8.txt -# charsets -usr/share/mysql/charsets/*.xml -usr/share/mysql/charsets/README -# legal -usr/share/doc/mysql-common/COPYING -usr/share/doc/mysql-common/README diff --git a/packaging/deb-utopic/mysql-common.lintian-overrides b/packaging/deb-utopic/mysql-common.lintian-overrides deleted file mode 100644 index 70ddcdf63713..000000000000 --- a/packaging/deb-utopic/mysql-common.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-common: extra-license-file usr/share/doc/mysql-common/LICENSE.mysql -mysql-common: extra-license-file usr/share/doc/mysql-common/COPYING.gz -mysql-common: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-utopic/mysql-community-bench.install b/packaging/deb-utopic/mysql-community-bench.install deleted file mode 100644 index 065124bd6933..000000000000 --- a/packaging/deb-utopic/mysql-community-bench.install +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -usr/lib/mysql/sql-bench/* -# legal -usr/share/doc/mysql-community-bench/COPYING -usr/share/doc/mysql-community-bench/README diff --git a/packaging/deb-utopic/mysql-community-bench.lintian-overrides b/packaging/deb-utopic/mysql-community-bench.lintian-overrides deleted file mode 100644 index 04df14ea0469..000000000000 --- a/packaging/deb-utopic/mysql-community-bench.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-community-bench: extra-license-file usr/share/doc/mysql-community-bench/LICENSE.mysql -mysql-community-bench: extra-license-file usr/share/doc/mysql-community-bench/COPYING.gz -mysql-community-bench: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-utopic/mysql-community-client.install b/packaging/deb-utopic/mysql-community-client.install deleted file mode 100644 index 46cd07d4df39..000000000000 --- a/packaging/deb-utopic/mysql-community-client.install +++ /dev/null @@ -1,60 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# binaries -usr/bin/innochecksum -usr/bin/myisam_ftdump -usr/bin/mysql -usr/bin/mysql_embedded -usr/bin/mysqlaccess -usr/bin/mysqlaccess.conf -usr/bin/mysqladmin -usr/bin/mysqlbug -usr/bin/mysqlcheck -usr/bin/mysql_client_test -usr/bin/mysql_client_test_embedded -usr/bin/mysqldump -usr/bin/mysqldumpslow -usr/bin/mysql_find_rows -usr/bin/mysql_fix_extensions -usr/bin/mysqlimport -usr/bin/mysql_plugin -usr/bin/mysqlshow -usr/bin/mysqlslap -usr/bin/mysql_waitpid -# man pages -usr/share/man/man1/innochecksum.1 -usr/share/man/man1/myisam_ftdump.1 -usr/share/man/man1/mysql.1 -usr/share/man/man1/mysql_embedded.1 -usr/share/man/man1/mysqlaccess.1 -usr/share/man/man1/mysqladmin.1 -usr/share/man/man1/mysqlbug.1 -usr/share/man/man1/mysqlcheck.1 -usr/share/man/man1/mysql_client_test.1 -usr/share/man/man1/mysql_client_test_embedded.1 -usr/share/man/man1/mysqldump.1 -usr/share/man/man1/mysqldumpslow.1 -usr/share/man/man1/mysql_find_rows.1 -usr/share/man/man1/mysql_fix_extensions.1 -usr/share/man/man1/mysqlimport.1 -usr/share/man/man1/mysqlman.1 -usr/share/man/man1/mysql_plugin.1 -usr/share/man/man1/mysqlshow.1 -usr/share/man/man1/mysqlslap.1 -usr/share/man/man1/mysql_waitpid.1 -# legal -usr/share/doc/mysql-community-client/COPYING -usr/share/doc/mysql-community-client/README diff --git a/packaging/deb-utopic/mysql-community-client.lintian-overrides b/packaging/deb-utopic/mysql-community-client.lintian-overrides deleted file mode 100644 index 589293560ee7..000000000000 --- a/packaging/deb-utopic/mysql-community-client.lintian-overrides +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-community-client: extra-license-file usr/share/doc/mysql-community-client/LICENSE.mysql -mysql-community-client: extra-license-file usr/share/doc/mysql-community-clienti/COPYING.gz -mysql-community-client: copyright-should-refer-to-common-license-file-for-lgpl -# Due to static linking this cannot be avoided and hence being overridden -mysql-community-client: embedded-library diff --git a/packaging/deb-utopic/mysql-community-server.config b/packaging/deb-utopic/mysql-community-server.config deleted file mode 100755 index ceb3373350a0..000000000000 --- a/packaging/deb-utopic/mysql-community-server.config +++ /dev/null @@ -1,88 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -. /usr/share/debconf/confmodule - -if [ "$1" = "configure" ] && [ -z "$2" ]; -then - - set -e - - PKG_LIST=mysql-server-5.5:mysql-server-5.6:mysql-community-server:mysql-commercial-server - INSTALLED_PKG=none - MYSQLDATA=/var/lib/mysql - - IFS_BACKUP=${IFS} - IFS=":" - for PKG in ${PKG_LIST}; - do - STATUS=$(dpkg -s ${PKG} 2> /dev/null | grep Status: | cut -d' ' -f4) - if [ "${STATUS}" = "installed" ]; - then - INSTALLED_PKG=${PKG} - break - fi - done - IFS=${IFS_BACKUP} - - if [ "${INSTALLED_PKG}" = "none" ]; - then - if [ -d ${MYSQLDATA} -o -L ${MYSQLDATA} ]; - then - db_input high mysql-community-server/data-dir || true - else - db_fset mysql-community-server/data-dir seen true - fi - - while :; do - PASSWD="" - db_input high mysql-community-server/root-pass || true - db_go - - db_get mysql-community-server/root-pass - if [ -z "${RET}" ]; - then - db_fset mysql-community-server/root-pass seen true - db_fset mysql-community-server/re-root-pass seen true - break - fi - PASSWD="${RET}" - - db_input high mysql-community-server/re-root-pass || true - db_go - - db_get mysql-community-server/re-root-pass - if [ "${RET}" == "${PASSWD}" ]; - then - PASSWD="" - break - fi - - db_fset mysql-community-server/root-pass-mismatch seen false - db_input critical mysql-community-server/root-pass-mismatch - db_set mysql-community-server/root-pass "" - db_set mysql-community-server/re-root-pass "" - done - - else - db_fset mysql-community-server/data-dir seen true - db_fset mysql-community-server/root-pass seen true - db_fset mysql-community-server/re-root-pass seen true - fi - - set +e -fi diff --git a/packaging/deb-utopic/mysql-community-server.dirs b/packaging/deb-utopic/mysql-community-server.dirs deleted file mode 100644 index 91e718557a45..000000000000 --- a/packaging/deb-utopic/mysql-community-server.dirs +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -etc/mysql/conf.d -etc/init.d -usr/lib/mysql -usr/lib/mysql/plugin diff --git a/packaging/deb-utopic/mysql-community-server.install b/packaging/deb-utopic/mysql-community-server.install deleted file mode 100644 index 589ea20912b1..000000000000 --- a/packaging/deb-utopic/mysql-community-server.install +++ /dev/null @@ -1,86 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# binaries -usr/bin/msql2mysql -usr/bin/myisamchk -usr/bin/myisamlog -usr/bin/myisampack -usr/bin/my_print_defaults -usr/bin/mysqlbinlog -usr/bin/mysql_convert_table_format -usr/bin/mysqld_multi -usr/bin/mysqld_safe -usr/bin/mysqlhotcopy -usr/bin/mysql_install_db -usr/bin/mysql_secure_installation -usr/bin/mysql_setpermission -usr/bin/mysqltest -usr/bin/mysqltest_embedded -usr/bin/mysql_tzinfo_to_sql -usr/bin/mysql_upgrade -usr/bin/mysql_zap -usr/bin/perror -usr/bin/replace -usr/bin/resolveip -usr/bin/resolve_stack_dump -usr/sbin/mysqld -# debug binary -usr/sbin/mysqld-debug -# man pages -usr/share/man/man1/comp_err.1 -usr/share/man/man1/msql2mysql.1 -usr/share/man/man1/myisamchk.1 -usr/share/man/man1/myisamlog.1 -usr/share/man/man1/myisampack.1 -usr/share/man/man1/my_print_defaults.1 -usr/share/man/man1/mysqlbinlog.1 -usr/share/man/man1/mysql_convert_table_format.1 -usr/share/man/man1/mysqld_multi.1 -usr/share/man/man1/mysqld_safe.1 -usr/share/man/man1/mysqlhotcopy.1 -usr/share/man/man1/mysql_install_db.1 -usr/share/man/man1/mysql_secure_installation.1 -usr/share/man/man1/mysql.server.1 -usr/share/man/man1/mysql_setpermission.1 -usr/share/man/man1/mysql-stress-test.pl.1 -usr/share/man/man1/mysqltest.1 -usr/share/man/man1/mysqltest_embedded.1 -usr/share/man/man1/mysql_tzinfo_to_sql.1 -usr/share/man/man1/mysql_upgrade.1 -usr/share/man/man1/mysql_zap.1 -usr/share/man/man1/perror.1 -usr/share/man/man1/replace.1 -usr/share/man/man1/resolveip.1 -usr/share/man/man1/resolve_stack_dump.1 -usr/share/man/man8/mysqld.8 -# app armor profile -etc/apparmor.d/usr.sbin.mysqld -# SQL files -usr/share/mysql/*.sql -# plugins -usr/lib/mysql/plugin/*.so -usr/lib/mysql/plugin/debug/*.so -usr/lib/mysql/plugin/daemon_example.ini -usr/lib/mysql/plugin/debug/daemon_example.ini -# support files -usr/share/mysql/mysqld_multi.server -usr/share/mysql/magic -usr/share/mysql/mysql-log-rotate -usr/share/mysql/my-default.cnf -usr/share/mysql/dictionary.txt -# legal -usr/share/doc/mysql-community-server/COPYING -usr/share/doc/mysql-community-server/README diff --git a/packaging/deb-utopic/mysql-community-server.lintian-overrides b/packaging/deb-utopic/mysql-community-server.lintian-overrides deleted file mode 100644 index 08b386543cbc..000000000000 --- a/packaging/deb-utopic/mysql-community-server.lintian-overrides +++ /dev/null @@ -1,23 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-community-server: extra-license-file usr/share/doc/mysql-community-server/LICENSE.mysql -mysql-community-server: extra-license-file usr/share/doc/mysql-community-server/COPYING.gz -mysql-community-server: copyright-should-refer-to-common-license-file-for-lgpl -# Due to static linking this cannot be avoided and hence being overridden -mysql-community-server: embedded-library -# Since we ship debug plugins so this error is overridden -mysql-community-server: unstripped-binary-or-object usr/lib/mysql/plugin/debug/* diff --git a/packaging/deb-utopic/mysql-community-server.mysql.init b/packaging/deb-utopic/mysql-community-server.mysql.init deleted file mode 100755 index 67a01932265f..000000000000 --- a/packaging/deb-utopic/mysql-community-server.mysql.init +++ /dev/null @@ -1,192 +0,0 @@ -#!/bin/bash -# -### BEGIN INIT INFO -# Provides: mysql -# Required-Start: $remote_fs $syslog -# Required-Stop: $remote_fs $syslog -# Should-Start: $network $time -# Should-Stop: $network $time -# Default-Start: 2 3 4 5 -# Default-Stop: 0 1 6 -# Short-Description: Start/ Stop MySQL Community Server daemon -# Description: This service script facilitates startup and shutdown of -# mysqld daemon throught its wrapper script mysqld_safe -### END INIT INFO -# - -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -. /lib/lsb/init-functions - -cd / -umask 077 - -MYSQLDATA=/var/lib/mysql -VERSION=$(mysqld --version | grep mysqld | cut -d' ' -f4) - -get_mysql_option() { - RESULT=$(my_print_defaults "$1" | sed -n "s/^--$2=//p" | tail -n 1) - if [ -z "$RESULT" ]; - then - RESULT="$3" - fi - echo $RESULT -} - -get_running () { - PIDFILE=$(get_mysql_option mysqld_safe pid-file "") - if [ -z "$PIDFILE" ]; - then - PIDFILE=$(get_mysql_option mysqld pid-file "$MYSQLDATA/$(hostname).pid") - fi - if [ -e "$PIDFILE" ] && [ -d "/proc/$(cat "$PIDFILE")" ]; - then - echo 1 - else - echo 0 - fi -} - -server_stop () { - RUNNING=$(get_running) - COUNT=0 - while :; do - COUNT=$(( COUNT+1 )) - echo -n . - if [ "${RUNNING}" -eq 0 ]; - then - echo - break - fi - if [ "${COUNT}" -gt 15 ]; - then - echo - return 1 - fi - RUNNING=$(get_running) - sleep 1 - done - return 0 -} - -case "$1" in - 'start') - RUNNING=$(get_running) - if [ "${RUNNING}" -eq 1 ]; - then - log_action_msg "A MySQL Server is already started" - else - MYSQLRUN=/var/run/mysqld - MYSQLDATA=/var/lib/mysql - MYSQLLOG=/var/log/mysql - - if [ ! -d ${MYSQLDATA} -a ! -L ${MYSQLDATA} ]; - then - mkdir ${MYSQLDATA} - chown mysql:mysql ${MYSQLDATA} - chmod 750 ${MYSQLDATA} - fi - - if [ ! -d "${MYSQLDATA}/mysql" -a ! -L "${MYSQLDATA}/mysql" ]; - then - mkdir ${MYSQLDATA}/mysql - chown mysql:mysql ${MYSQLDATA}/mysql - chmod 750 ${MYSQLDATA}/mysql - fi - - if [ ! "$(ls -A ${MYSQLDATA}/mysql)" ]; - then - mysql_install_db --user=mysql > /dev/null - fi - - if [ ! -d ${MYSQLLOG} -a ! -L ${MYSQLLOG} ]; - then - mkdir ${MYSQLLOG} - chown mysql:adm ${MYSQLLOG} - chmod 750 ${MYSQLLOG} - touch ${MYSQLLOG}/error.log - chmod 640 ${MYSQLLOG}/error.log - chown mysql:adm ${MYSQLLOG}/error.log - fi - - if [ ! -d "${MYSQLRUN}" -a ! -L "${MYSQLRUN}" ]; - then - mkdir ${MYSQLRUN} - chown mysql:mysql ${MYSQLRUN} - chmod 755 ${MYSQLRUN} - fi - - /lib/init/apparmor-profile-load usr.sbin.mysqld - - su - mysql -s /bin/bash -c "mysqld_safe > /dev/null &" - for i in 1 2 3 4 5 6; - do - sleep 1 - echo -n . - done - echo - RUNNING=$(get_running) - if [ "${RUNNING}" -eq 1 ]; - then - log_action_msg "MySQL Community Server ${VERSION} is started" - else - log_action_msg "MySQL Community Server ${VERSION} did not start. Please check logs for more details." - fi - fi - ;; - - 'stop') - RUNNING=$(get_running) - if [ "${RUNNING}" -eq 1 ]; - then - killall -15 mysqld - server_stop - if [ "$?" -eq 0 ]; - then - log_action_msg "MySQL Community Server ${VERSION} is stopped" - else - log_action_msg "Attempt to shutdown MySQL Community Server ${VERSION} timed out" - fi - else - log_action_msg "MySQL Community Server ${VERSION} is already stopped" - fi - ;; - - 'restart'|'reload'|'force-reload') - log_action_msg "Stopping MySQL Community Server ${VERSION}" - $0 stop - log_action_msg "Re-starting MySQL Community Server ${VERSION}" - $0 start - ;; - - 'status') - RUNNING=$(get_running) - if [ ${RUNNING} -eq 1 ]; - then - log_action_msg "MySQL Community Server ${VERSION} is running" - else - log_action_msg "MySQL Community Server ${VERSION} is not running" - exit 3 - fi - ;; - - *) - echo "Usage: $SELF start|stop|restart|reload|force-reload|status" - exit 1 - ;; -esac - -exit 0 diff --git a/packaging/deb-utopic/mysql-community-server.postinst b/packaging/deb-utopic/mysql-community-server.postinst deleted file mode 100755 index ee72a0f2f467..000000000000 --- a/packaging/deb-utopic/mysql-community-server.postinst +++ /dev/null @@ -1,93 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -. /usr/share/debconf/confmodule - -take_upstart_job_backup () { - if [ -e "/etc/init/mysql.conf" ] && [ -d "/var/lib/mysql" ]; - then - mv /etc/init/mysql.conf /var/lib/mysql/.mysql.conf.backup - fi -} - -case "$1" in - configure) - - if [ -z "$2" ]; - then - set -e - - MYSQLDATA=/var/lib/mysql - - if [ ! -d "${MYSQLDATA}/mysql" -a ! -L "${MYSQLDATA}/mysql" ]; - then - mkdir ${MYSQLDATA}/mysql - chown mysql:mysql ${MYSQLDATA}/mysql - chmod 750 ${MYSQLDATA}/mysql - if [ ! "$(ls -A ${MYSQLDATA}/mysql)" ]; - then - mysql_install_db --user=mysql > /dev/null - fi - fi - - db_get mysql-community-server/root-pass && PASSWD=${RET} - if [ ! -z "${PASSWD}" ]; - then - db_set mysql-community-server/root-pass "" - db_set mysql-community-server/re-root-pass "" - PASSWD="UPDATE user SET password=PASSWORD('${PASSWD}') WHERE user='root';" - else - PASSWD="" - fi - - SQL=`mktemp` - if [ -f "${SQL}" ]; - then - chmod 700 ${SQL} - cat << EOF > ${SQL} -USE mysql; -${PASSWD} -DELETE FROM user WHERE user=''; -FLUSH PRIVILEGES; -EOF - mysqld --basedir=/usr --bootstrap --user=mysql --skip-grant-tables < $SQL - PASSWD="" - rm -f ${SQL} - fi - - set +e - - fi - - ;; - - abort-upgrade|abort-remove|abort-configure) - - ;; - - *) - exit 1 - ;; -esac - -db_stop - -take_upstart_job_backup - -#DEBHELPER# - -exit 0 diff --git a/packaging/deb-utopic/mysql-community-server.postrm b/packaging/deb-utopic/mysql-community-server.postrm deleted file mode 100755 index efdaeeaeb6d5..000000000000 --- a/packaging/deb-utopic/mysql-community-server.postrm +++ /dev/null @@ -1,154 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -if [ "$1" = purge ] && [ -e /usr/share/debconf/confmodule ]; -then -. /usr/share/debconf/confmodule -fi - -place_upstart_job_back () { - if [ -e "/var/lib/mysql/.mysql.conf.backup" ]; - then - mv /var/lib/mysql/.mysql.conf.backup /etc/init/mysql.conf - fi -} - -get_pcount () { - PSCOUNT=$(ps -ef | grep "/usr/sbin/mysqld" | wc -l) - echo "${PSCOUNT}" -} - -server_stop () { - PSCOUNT=$(get_pcount) - COUNT=0 - while :; do - COUNT=$(( COUNT+1 )) - echo -n . - if [ "${PSCOUNT}" -eq 1 ]; - then - echo - break - fi - if [ "${COUNT}" -gt 15 ]; - then - echo - return 1 - fi - PSCOUNT=$(get_pcount) - sleep 1 - done - return 0 -} - -case "$1" in - remove) - - set -e - - place_upstart_job_back - - set +e - - ;; - - purge) - - set -e - - place_upstart_job_back - - MYSQLDATA=/var/lib/mysql - MYSQLLOG=/var/log/mysql - MYSQLRUN=/var/run/mysqld - - server_stop - - db_input high mysql-community-server/remove-data-dir || true - db_go - db_get mysql-community-server/remove-data-dir && RMDATADIR=${RET} - if [ "${RMDATADIR}" = "true" ]; - then - if [ -d ${MYSQLRUN} ] || [ -L ${MYSQLRUN} ]; - then - rm -rf ${MYSQLRUN} - fi - - if [ -d ${MYSQLLOG} ] || [ -L ${MYSQLLOG} ]; - then - rm -rf ${MYSQLLOG} - fi - - if [ -d ${MYSQLDATA} ] || [ -L ${MYSQLDATA} ]; - then - rm -rf ${MYSQLDATA} - fi - - if getent passwd mysql >/dev/null; - then - userdel mysql - fi - fi - - set +e - ;; - - abort-install) - - set -e - - place_upstart_job_back - - if [ -x "/etc/init.d/mysql" ]; - then - invoke-rc.d mysql start || exit $? - else - if [ -d ${MYSQLRUN} ] || [ -L ${MYSQLRUN} ]; - then - rm -rf ${MYSQLRUN} - fi - - if [ -d ${MYSQLLOG} ] || [ -L ${MYSQLLOG} ]; - then - rm -rf ${MYSQLLOG} - fi - - if [ -d ${MYSQLDATA} ] || [ -L ${MYSQLDATA} ]; - then - rm -rf ${MYSQLDATA} - fi - - if getent passwd mysql >/dev/null; - then - userdel mysql - fi - fi - - set +e - ;; - - upgrade|abort-upgrade) - - ;; - - *) - exit 1 - ;; -esac - -#DEBHELPER# - -exit 0 diff --git a/packaging/deb-utopic/mysql-community-server.preinst b/packaging/deb-utopic/mysql-community-server.preinst deleted file mode 100755 index c769885e476b..000000000000 --- a/packaging/deb-utopic/mysql-community-server.preinst +++ /dev/null @@ -1,123 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -get_pcount () { - PSCOUNT=$(ps -ef | grep "/usr/sbin/mysqld" | wc -l) - echo "${PSCOUNT}" -} - -server_stop () { - PSCOUNT=$(get_pcount) - COUNT=0 - while :; do - COUNT=$(( COUNT+1 )) - echo -n . - if [ "${PSCOUNT}" -eq 1 ]; - then - echo - break - fi - if [ "${COUNT}" -gt 15 ]; - then - echo - return 1 - fi - PSCOUNT=$(get_pcount) - sleep 1 - done - return 0 -} - -case "$1" in - install) - - if [ -z "$2" ]; - then - - set -e - - if [ -x "/etc/init.d/mysql" ]; - then - invoke-rc.d mysql stop || exit $? - server_stop - fi - - MYSQLDATA=/var/lib/mysql - MYSQLLOG=/var/log/mysql - MYSQLRUN=/var/run/mysqld - - if ! getent group mysql >/dev/null; - then - addgroup --system mysql >/dev/null - fi - - if ! getent passwd mysql >/dev/null; - then - adduser --ingroup mysql --system --disabled-login --no-create-home --home ${MYSQLDATA} --shell /bin/false --gecos "MySQL Server" mysql >/dev/null - fi - - if [ ! -d ${MYSQLDATA} -a ! -L ${MYSQLDATA} ]; - then - mkdir ${MYSQLDATA} - chown mysql:mysql ${MYSQLDATA} - chmod 750 ${MYSQLDATA} - fi - - if [ ! -d ${MYSQLLOG} -a ! -L ${MYSQLLOG} ]; - then - mkdir ${MYSQLLOG} - chown mysql:adm ${MYSQLLOG} - chmod 750 ${MYSQLLOG} - touch ${MYSQLLOG}/error.log - chmod 640 ${MYSQLLOG}/error.log - chown mysql:adm ${MYSQLLOG}/error.log - fi - - if [ ! -d ${MYSQLRUN} -a ! -L ${MYSQLRUN} ]; - then - mkdir ${MYSQLRUN} - chown mysql:mysql ${MYSQLRUN} - chmod 755 ${MYSQLRUN} - fi - - set +e - - fi - - ;; - - upgrade) - - set -e - - #DEBHELPER# - server_stop - - set +e - - ;; - - abort-upgrade) - - ;; - - *) - exit 1 - ;; -esac - -exit 0 diff --git a/packaging/deb-utopic/mysql-community-server.prerm b/packaging/deb-utopic/mysql-community-server.prerm deleted file mode 100755 index 1386b5d43ab9..000000000000 --- a/packaging/deb-utopic/mysql-community-server.prerm +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -set -e - -#DEBHELPER# - -set +e - -exit 0 diff --git a/packaging/deb-utopic/mysql-community-server.templates b/packaging/deb-utopic/mysql-community-server.templates deleted file mode 100644 index 7b7e0ac33cdc..000000000000 --- a/packaging/deb-utopic/mysql-community-server.templates +++ /dev/null @@ -1,33 +0,0 @@ -Template: mysql-community-server/root-pass -Type: password -Description: Enter root password: - Please provide a strong password that will be set for the root account of your MySQL database. - Leave it blank if you do not wish to set or change the root password at this time. - -Template: mysql-community-server/re-root-pass -Type: password -Description: Re-enter root password: - Now that you have selected a password for the root account, please confirm by typing it again. Do not share the password with anyone. - -Template: mysql-community-server/root-pass-mismatch -Type: error -Description: The two passwords did not match - Please try again. Make sure you type the exact same password twice. - -Template: mysql-community-server/remove-data-dir -Type: boolean -Default: false -Description: Remove data directory at /var/lib/mysql ? - This operation will remove the data directory that stores all the databases, tables and related meta-data. - It is highly recommended to take data backup before removing the data directory. - -Template: mysql-community-server/data-dir -Type: note -Description: Data directory found when no MySQL server package is installed - A data directory '/var/lib/mysql' is present on this system when no MySQL server - package is currently installed on the system. The directory may be under control of - server package received from third-party vendors. It may also be an unclaimed data - directory from previous removal of mysql packages. - . - It is highly recommended to take data backup. If you have not done so, now would be - the time to take backup in another shell. Once completed, press 'Ok' to continue. diff --git a/packaging/deb-utopic/mysql-community-source.install b/packaging/deb-utopic/mysql-community-source.install deleted file mode 100644 index 46a0f12b0a52..000000000000 --- a/packaging/deb-utopic/mysql-community-source.install +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -../*.dsc usr/src/mysql/ -../*.tar.gz usr/src/mysql/ -../*.tar.xz usr/src/mysql/ -# legal -usr/share/doc/mysql-community-source/COPYING -usr/share/doc/mysql-community-source/README diff --git a/packaging/deb-utopic/mysql-community-source.lintian-overrides b/packaging/deb-utopic/mysql-community-source.lintian-overrides deleted file mode 100644 index 9ca84e90712c..000000000000 --- a/packaging/deb-utopic/mysql-community-source.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-community-source: extra-license-file usr/share/doc/mysql-community-source/LICENSE.mysql -mysql-community-source: extra-license-file usr/share/doc/mysql-community-source/COPYING.gz -mysql-community-source: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-utopic/mysql-community-test.install b/packaging/deb-utopic/mysql-community-test.install deleted file mode 100644 index e70086b33ade..000000000000 --- a/packaging/deb-utopic/mysql-community-test.install +++ /dev/null @@ -1,20 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -usr/lib/mysql-test/* -usr/share/man/man1/mysql-test-run.pl.1 -# legal -usr/share/doc/mysql-community-test/COPYING -usr/share/doc/mysql-community-test/README diff --git a/packaging/deb-utopic/mysql-community-test.links b/packaging/deb-utopic/mysql-community-test.links deleted file mode 100644 index bf66c98bb758..000000000000 --- a/packaging/deb-utopic/mysql-community-test.links +++ /dev/null @@ -1,17 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -usr/lib/mysql-test/mysql-test-run.pl usr/lib/mysql-test/mysql-test-run -usr/lib/mysql-test/mysql-test-run.pl usr/lib/mysql-test/mtr diff --git a/packaging/deb-utopic/mysql-community-test.lintian-overrides b/packaging/deb-utopic/mysql-community-test.lintian-overrides deleted file mode 100644 index ff273bbe9135..000000000000 --- a/packaging/deb-utopic/mysql-community-test.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-community-test: extra-license-file usr/share/doc/mysql-community-test/LICENSE.mysql -mysql-community-test: extra-license-file usr/share/doc/mysql-community-test/COPYING.gz -mysql-community-test: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-utopic/mysql-server.install b/packaging/deb-utopic/mysql-server.install deleted file mode 100644 index e3aa8de274f0..000000000000 --- a/packaging/deb-utopic/mysql-server.install +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# legal -usr/share/doc/mysql-server/COPYING -usr/share/doc/mysql-server/README diff --git a/packaging/deb-utopic/mysql-server.lintian-overrides b/packaging/deb-utopic/mysql-server.lintian-overrides deleted file mode 100644 index 487709765b02..000000000000 --- a/packaging/deb-utopic/mysql-server.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-server: extra-license-file usr/share/doc/mysql-server/LICENSE.mysql -mysql-server: extra-license-file usr/share/doc/mysql-server/COPYING.gz -mysql-server: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-utopic/mysql-testsuite.install b/packaging/deb-utopic/mysql-testsuite.install deleted file mode 100644 index dfc17333700e..000000000000 --- a/packaging/deb-utopic/mysql-testsuite.install +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# legal -usr/share/doc/mysql-testsuite/COPYING -usr/share/doc/mysql-testsuite/README diff --git a/packaging/deb-utopic/mysql-testsuite.lintian-overrides b/packaging/deb-utopic/mysql-testsuite.lintian-overrides deleted file mode 100644 index 37488fe69b72..000000000000 --- a/packaging/deb-utopic/mysql-testsuite.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-testsuite: extra-license-file usr/share/doc/mysql-testsuite/LICENSE.mysql -mysql-testsuite: extra-license-file usr/share/doc/mysql-testsuite/COPYING.gz -mysql-testsuite: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-utopic/patches/fix-man-page-links.patch b/packaging/deb-utopic/patches/fix-man-page-links.patch deleted file mode 100644 index 004ccdf77d03..000000000000 --- a/packaging/deb-utopic/patches/fix-man-page-links.patch +++ /dev/null @@ -1,14 +0,0 @@ -From: Akhil Mohan -Description: Fix path in man page link. -Bug: http://bugs.mysql.com/bug.php?id=70952 - ---- a/man/mysql_client_test_embedded.1 2013-11-08 19:00:22.000000000 +0530 -+++ b/man/mysql_client_test_embedded.1 2013-11-14 19:29:56.768315219 +0530 -@@ -1 +1 @@ --.so man-gpl-tmp2/mysql_client_test.1 -+.so man1/mysql_client_test.1 ---- a/man/mysqltest_embedded.1 2013-11-08 19:00:22.000000000 +0530 -+++ b/man/mysqltest_embedded.1 2013-11-14 19:31:19.079280675 +0530 -@@ -1 +1 @@ --.so man-gpl-tmp2/mysqltest.1 -+.so man1/mysqltest.1 diff --git a/packaging/deb-utopic/patches/fix-mtr-search-paths.patch b/packaging/deb-utopic/patches/fix-mtr-search-paths.patch deleted file mode 100644 index 8a27a091e6ce..000000000000 --- a/packaging/deb-utopic/patches/fix-mtr-search-paths.patch +++ /dev/null @@ -1,13 +0,0 @@ -From: Akhil Mohan -Description: Adding extra search path for testsuite. - ---- a/mysql-test/lib/mtr_cases.pm 2014-02-24 13:14:37 +0530 -+++ b/mysql-test/lib/mtr_cases.pm 2014-07-02 11:46:24 +0530 -@@ -288,6 +288,7 @@ - { - $suitedir= my_find_dir($::basedir, - ["share/mysql-test/suite", -+ "lib/mysql-test/suite", - "mysql-test/suite", - "internal/mysql-test/suite", - "mysql-test", diff --git a/packaging/deb-utopic/patches/fix-mysql_install_db.patch b/packaging/deb-utopic/patches/fix-mysql_install_db.patch deleted file mode 100644 index 41311b2c8f9e..000000000000 --- a/packaging/deb-utopic/patches/fix-mysql_install_db.patch +++ /dev/null @@ -1,43 +0,0 @@ -From: Terje Røsten -Description: Maintains the pending --skip-my-cnf option in mainline -Bug: - -diff --git a/scripts/mysql_install_db.pl.in b/scripts/mysql_install_db.pl.in -index 440a977..7d068fc 100644 ---- a/scripts/mysql_install_db.pl.in -+++ b/scripts/mysql_install_db.pl.in -@@ -113,6 +113,7 @@ EOF2 - print <{srcdir} and $opt->{basedir} ) - { - error($opt,"Specify either --basedir or --srcdir, not both"); - } --if ( $opt->{'keep-my-cnf'} ) -+if ( $opt->{rpm} || $opt->{'keep-my-cnf'} ) - { - $keep_my_cnf = 1; - } -@@ -664,7 +665,7 @@ if ( $opt->{'skip-name-resolve'} and $resolved and $resolved =~ /\s/ ) - } - - # ---------------------------------------------------------------------- --# Create database directories mysql & test -+# Create database directory mysql - # ---------------------------------------------------------------------- - - # FIXME The shell variant uses "mkdir -p": -@@ -697,7 +698,7 @@ if ($opt_user) - } - } - --foreach my $dir ( $opt->{ldata}, "$opt->{ldata}/mysql", "$opt->{ldata}/test" ) -+foreach my $dir ( $opt->{ldata}, "$opt->{ldata}/mysql") - { - mkdir($dir, 0700) unless -d $dir; - if ($opt_user and -w "/") diff --git a/packaging/deb-utopic/patches/series b/packaging/deb-utopic/patches/series deleted file mode 100644 index e3b20d6febc0..000000000000 --- a/packaging/deb-utopic/patches/series +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -#fix-man-page-links.patch -fix-mysql_install_db.patch -fix-mtr-search-paths.patch diff --git a/packaging/deb-utopic/rules b/packaging/deb-utopic/rules deleted file mode 100755 index 8ffd861a77b8..000000000000 --- a/packaging/deb-utopic/rules +++ /dev/null @@ -1,135 +0,0 @@ -#!/usr/bin/make -f - -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -%: - dh $@ - -export DH_VERBOSE=1 -export CFLAGS= -export CXXFLAGS= - -override_dh_auto_configure: - @echo "RULES.$@" - cmake . \ - -DBUILD_CONFIG=mysql_release \ - -DCMAKE_INSTALL_PREFIX=/usr \ - -DINSTALL_DOCDIR=share/mysql/docs \ - -DINSTALL_DOCREADMEDIR=share/mysql \ - -DINSTALL_INCLUDEDIR=include/mysql \ - -DINSTALL_INFODIR=share/mysql/docs \ - -DINSTALL_LIBDIR=lib/$(DEB_HOST_MULTIARCH) \ - -DINSTALL_MANDIR=share/man \ - -DINSTALL_MYSQLSHAREDIR=share/mysql \ - -DINSTALL_MYSQLTESTDIR=lib/mysql-test \ - -DINSTALL_PLUGINDIR=lib/mysql/plugin \ - -DINSTALL_SBINDIR=sbin \ - -DINSTALL_SCRIPTDIR=bin \ - -DINSTALL_SQLBENCHDIR=lib/mysql \ - -DINSTALL_SUPPORTFILESDIR=share/mysql \ - -DMYSQL_DATADIR=/var/lib/mysql \ - -DSYSCONFDIR=/etc/mysql \ - -DMYSQL_UNIX_ADDR=/var/run/mysqld/mysqld.sock \ - -DWITH_SSL=bundled \ - -DWITH_ZLIB=system \ - -DWITH_EXTRA_CHARSETS=all \ - -DWITH_INNODB_MEMCACHED=1 \ - -DCOMPILATION_COMMENT="MySQL Community Server (GPL)" \ - -DINSTALL_LAYOUT=DEB - - cat CMakeCache.txt - touch $@ - -override_dh_auto_build: - @echo "RULES.$@" - $(MAKE) -j8 VERBOSE=1 - touch $@ - -override_dh_auto_test: - @echo "RULES.$@" - echo "No tests run because test 9: pfs_connect_attr is failing unreasonably" - touch $@ - -override_dh_auto_install: - - @echo "RULES.$@" - # complete install first - $(MAKE) install DESTDIR=debian/tmp - # remove all redundant files and links - rm debian/tmp/usr/lib/*/*_r* - rm debian/tmp/usr/lib/mysql-test/cmake_install.cmake - rm debian/tmp/usr/lib/mysql-test/CTestTestfile.cmake - rm debian/tmp/usr/lib/mysql-test/Makefile - # add missing man pages - install -g root -o root -m 0644 debian/extra/mysql_embedded.1 debian/tmp/usr/share/man/man1 - # add MySQL Server configuration file my.cnf to mysql-common package - install -g root -o root -m 0644 -D debian/extra/my.cnf debian/tmp/etc/mysql/my.cnf - # add MySQL Server debug binary and library to package - install -g root -o root -m 0755 debian/extra/server-binary debian/tmp/usr/sbin/mysqld-debug - install -g root -o root -m 0755 debian/extra/embedded-server debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/libmysqld-debug.a - # add debug plugin libraries to package - install -g root -o root -m 0755 -d debian/tmp/usr/lib/mysql/plugin/debug - for file in debian/extra/*-plugin; do NEW=`echo $$file | cut -d- -f1`; mv $$file $$NEW.so; done - install -g root -o root -m 0755 debian/extra/*.so debian/tmp/usr/lib/mysql/plugin/debug - install -g root -o root -m 0755 debian/extra/daemon_example.ini debian/tmp/usr/lib/mysql/plugin/debug - # add apparmor profile - install -g root -o root -m 0644 -D debian/extra/apparmor-profile debian/tmp/etc/apparmor.d/usr.sbin.mysqld - # add directory for legal docs - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-server - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-community-server - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-client - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-community-client - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-common - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/libmysqlclient18 - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/libmysqlclient-dev - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/libmysqld-dev - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-community-bench - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-testsuite - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-community-test - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-community-source - # add COPYING file to each package - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-server/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-community-server/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-client/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-community-client/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-common/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/libmysqlclient18/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/libmysqlclient-dev/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/libmysqld-dev/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-community-bench/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-testsuite/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-community-test/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-community-source/COPYING - # add README file to each package - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-server/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-community-server/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-client/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-community-client/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-common/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/libmysqlclient18/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/libmysqlclient-dev/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/libmysqld-dev/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-community-bench/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-testsuite/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-community-test/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-community-source/README - touch $@ - -override_dh_installinit: - @echo "RULES.$@" - dh_apparmor -pmysql-community-server --profile-name=usr.sbin.mysqld - dh_installinit --name=mysql -- defaults 19 21 - touch $@ diff --git a/packaging/deb-utopic/source/format b/packaging/deb-utopic/source/format deleted file mode 100644 index 163aaf8d82b6..000000000000 --- a/packaging/deb-utopic/source/format +++ /dev/null @@ -1 +0,0 @@ -3.0 (quilt) diff --git a/packaging/deb-utopic/source/include-binaries b/packaging/deb-utopic/source/include-binaries deleted file mode 100644 index 0c23142f3c13..000000000000 --- a/packaging/deb-utopic/source/include-binaries +++ /dev/null @@ -1,34 +0,0 @@ -# Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# obscured filename for mysqld-debug, libmysqld-debug.a and debug plugins -debian/extra/server-binary -debian/extra/embedded-server -debian/extra/adt_null-plugin -debian/extra/auth-plugin -debian/extra/auth_socket-plugin -debian/extra/auth_test_plugin-plugin -debian/extra/innodb_engine-plugin -debian/extra/libdaemon_example-plugin -debian/extra/libmemcached-plugin -debian/extra/mypluglib-plugin -debian/extra/mysql_no_login-plugin -debian/extra/qa_auth_client-plugin -debian/extra/qa_auth_interface-plugin -debian/extra/qa_auth_server-plugin -debian/extra/semisync_master-plugin -debian/extra/semisync_slave-plugin -debian/extra/test_udf_services-plugin -debian/extra/validate_password-plugin diff --git a/packaging/deb-utopic/watch b/packaging/deb-utopic/watch deleted file mode 100644 index c45c5e3e89d6..000000000000 --- a/packaging/deb-utopic/watch +++ /dev/null @@ -1,2 +0,0 @@ -version=3 -http://mysql.mirrors.pair.com/Downloads/MySQL-5.6/mysql-([\d\.]+).tar.gz diff --git a/packaging/deb-vivid/changelog b/packaging/deb-vivid/changelog deleted file mode 100644 index 6651421ff290..000000000000 --- a/packaging/deb-vivid/changelog +++ /dev/null @@ -1,131 +0,0 @@ -mysql-community (5.6.26-1ubuntu15.04) vivid; urgency=low - - * new upstream release - * mysql-commercial-server now depends on perl, psmisc - mysql-commercial-test now depends on python, libmysqlclient-dev - (Closes: #20893836) - - -- Akhil Mohan Thu, 18 Jun 2015 16:34:10 +0530 - -mysql-community (5.6.25-3ubuntu15.04) vivid; urgency=low - - * new upstream release - * mysql-common now conflicts with - mysql-server-5.6, mysql-server-core-5.6 - mysql-client-5.6, mysql-client-core-5.6 - * mysql-*-server no more provides - mysql-server-5.6, mysql-server-core-5.6 - * mysql-*-client no more provides - mysql-client-5.6, mysql-client-core-5.6 - - -- Akhil Mohan Mon, 15 Jun 2015 16:48:05 +0530 - -mysql-community (5.6.24-3ubuntu15.04) vivid; urgency=low - - * updated Standards-Version to 3.9.6 in d/control - * apparmor profile updated to allow read on all files under /etc/mysql - * added new conf files under d/extra/*.conf - * mysql_plugin moved from client to server pkg - * innochecksum moved from client to server pkg - * server pkg now replaces client pkg - * added systemd service profile and script - * new /etc/mysql/my.cnf management scheme added for Ubuntu 15.04 - as discussed in Dec 2014 for native packaging source - * added dh "--with systemd" for enabling systemd - - -- Akhil Mohan Wed, 27 May 2015 11:35:35 +0530 - -mysql-community (5.6.24-2ubuntu15.04) vivid; urgency=low - - * new upstream release - * forked packaging source from utopic to vivid - - -- Akhil Mohan Wed, 15 Apr 2015 18:52:22 +0530 - -mysql-community (5.6.24-1ubuntu14.10) utopic; urgency=low - - * new upstream release - - -- Akhil Mohan Mon, 16 Feb 2014 15:45:09 +0530 - -mysql-community (5.6.23-1ubuntu14.10) utopic; urgency=low - - * new upstream release - * mysql-community-server now recommends mysql-client - * mysql-community-server now depends on apparmor - * removed template install-test-db; not installed by default - * d/compat incremented to 9 from 8 - * d/control updated to build depend on debhelper 9 - * added d/*.lintian-overrides and d/source/lintian-overrides - * d/rules updated to reflect correct file permissions - - -- Akhil Mohan Wed, 31 Dec 2014 10:51:07 +0530 - -mysql-community (5.6.22-2ubuntu14.10) utopic; urgency=low - - * new upstream release - * mysql-common now replaces mysql-server-{,core-}5.6 - - -- Akhil Mohan Wed, 28 Nov 2014 15:18:07 +0530 - -mysql-community (5.6.22-1ubuntu14.10) utopic; urgency=low - - * new upstream release - * fixed d/*server.postinst to allow dropping test db without - setting root password - * init script will now run my_i_db if data dir is not present or empty - * updated init script to read app armor profile on startup - * forked packaging source from trusty and rebranded for utopic - * updated d/m-c-source.install to pack *.xz packaging source archive - * added more system resources to app armor profile - * dh_apparmor to now run before dh_installinit in d/rules - * libmysqlclient-dev now replaces mysql-client-{,core-}5.6 - - -- Akhil Mohan Wed, 05 Nov 2014 17:04:07 +0530 - -mysql-community (5.6.21-1ubuntu14.04) trusty; urgency=low - - * new upstream release - * updated d/rules to increment -j8 as make option - * updated d/source/include-binaries to add mysql_no_login plugin - * updated CMake option WITH_EXTRA_CHARSETS from complex to all - - -- Akhil Mohan Wed, 20 Aug 2014 19:12:30 +0530 - -mysql-community (5.6.20-1ubuntu14.04) trusty; urgency=low - - * new upstream release - * added fakeroot as build-dep in d/control - * added d/*.dirs for bench, dev and test pkg - * updated d/rules to make compilation verbose - * removed default CFLAGS, CXXFLAGS in d/rules - * added patch for testsuite search paths under d/patches - * modified cmake option for testsuite in d/rules - * updated patch d/fix-mysql_install_db.patch - * enabled two patches in d/patches/series - * removed extra permissions check in d/rules when fixed in source - * modified d/mysql-*-server.postinst to stop removing /usr/my.cnf - * modified d/*-test.* for updated location of testsuite - * updated d/{mysql-*-server.install,rules} to include debug plugins - * updated d/rules to remove storage engine cmake options - * modified data dir permission in d/*server.{pre,post}inst - * updated d/source/include-binaries to add debug plugins - * updated d/rules to rename debug plugins - - -- Akhil Mohan Wed, 02 Jul 2014 17:45:30 +0530 - -mysql-community (5.6.19-1ubuntu14.04) trusty; urgency=low - - * new upstream release - * d/rules updated to rid of files removed from source - * modified path for source tar in source pkg - * obscured actual filenames in d/source/include-binaries - * modified d/rules to handle obscured filenames - - -- Akhil Mohan Mon, 05 May 2014 15:45:10 +0530 - -mysql-community (5.6.17-1ubuntu14.04) trusty; urgency=low - - * new upstream release - - -- Akhil Mohan Fri, 28 Feb 2014 18:06:30 +0530 diff --git a/packaging/deb-vivid/compat b/packaging/deb-vivid/compat deleted file mode 100644 index ec635144f600..000000000000 --- a/packaging/deb-vivid/compat +++ /dev/null @@ -1 +0,0 @@ -9 diff --git a/packaging/deb-vivid/control b/packaging/deb-vivid/control deleted file mode 100644 index 8bc5ecdf4053..000000000000 --- a/packaging/deb-vivid/control +++ /dev/null @@ -1,192 +0,0 @@ -Source: mysql-community -Maintainer: MySQL Release Engineering -Section: database -Priority: optional -Standards-Version: 3.9.6 -Homepage: http://www.mysql.com/ -Build-Depends: debhelper (>= 9.0.0), libaio-dev[linux-any], libncurses5-dev (>= 5.0-6), perl, zlib1g-dev (>= 1:1.1.3-5), po-debconf, psmisc, bison, dh-apparmor, dh-systemd (>= 1.5), lsb-release, cmake, fakeroot, libnuma-dev - -Package: mysql-server -Architecture: any -Depends: mysql-community-server (= ${binary:Version}), ${misc:Depends} -Description: MySQL Server meta package depending on latest version - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This is a meta package that depends on the latest mysql server - package available in the repository. - -Package: mysql-community-server -Architecture: any -Pre-depends: debconf (>= 0.2.17), adduser -Depends: mysql-common (= ${binary:Version}), apparmor, perl, psmisc, - ${shlibs:Depends}, ${misc:Depends} -Recommends: mysql-client (= ${binary:Version}) -Conflicts: mysql, - mysql-server-5.0, mysql-server-core-5.0, - mysql-server-5.1, mysql-server-core-5.1, - mysql-server-5.5, mysql-server-core-5.5, - mysql-server-5.6, mysql-server-core-5.6, - mysql-commercial-server -Replaces: mysql, - mysql-server-5.0, mysql-server-core-5.0, - mysql-server-5.1, mysql-server-core-5.1, - mysql-server-5.5, mysql-server-core-5.5, - mysql-server-5.6, mysql-server-core-5.6, - mysql-commercial-server, - mysql-community-client -Provides: virtual-mysql-server, virtual-mysql-server-core -Description: MySQL Server - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This package includes the MySQL server binary as well as related - utilities to run and administer a MySQL server. - -Package: mysql-client -Architecture: any -Depends: mysql-community-client (= ${binary:Version}), ${misc:Depends} -Description: MySQL Client meta package depending on latest version - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This is a meta package that depends on the latest mysql client - package available in the repository. - -Package: mysql-community-client -Architecture: any -Depends: mysql-common (= ${binary:Version}), - ${shlibs:Depends}, ${misc:Depends} -Conflicts: mysql, - mysql-client-5.0, mysql-client-core-5.0, - mysql-client-5.1, mysql-client-core-5.1, - mysql-client-5.5, mysql-client-core-5.5, - mysql-client-5.6, mysql-client-core-5.6, - mysql-commercial-client -Replaces: mysql, - mysql-client-5.0, mysql-client-core-5.0, - mysql-client-5.1, mysql-client-core-5.1, - mysql-client-5.5, mysql-client-core-5.5, - mysql-client-5.6, mysql-client-core-5.6, - mysql-commercial-client -Provides: virtual-mysql-client, virtual-mysql-client-core -Description: MySQL Client - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This package contains the standard MySQL clients and - administration tools. - -Package: libmysqlclient18 -Architecture: any -Section: libs -Pre-Depends: ${misc:Pre-Depends} -Multi-Arch: same -Depends: mysql-common (= ${binary:Version}), - ${shlibs:Depends}, ${misc:Depends} -Description: MySQL shared client libraries - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This package contains the shared libraries for MySQL client - applications. - -Package: mysql-common -Architecture: any -Pre-depends: debconf (>= 0.2.17), ${misc:Pre-Depends} -Multi-Arch: foreign -Depends: ${shlibs:Depends}, ${misc:Depends} -Conflicts: mysql, mysql-server-5.6, mysql-server-core-5.6, - mysql-client-5.6, mysql-client-core-5.6, - mariadb-server-5.5, percona-xtradb-cluster-common-5.5 -Replaces: mysql, mysql-server-5.5, mysql-server-core-5.5, libmysqlclient-dev, - mysql-server-5.6, mysql-server-core-5.6, - mariadb-server-5.5, percona-xtradb-cluster-common-5.5 -Provides: mysql-common, mysql-common-5.6 -Description: MySQL Common - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This package contains common files needed by MySQL client - library, MySQL database server, and MySQL embedded server. - -Package: libmysqlclient-dev -Architecture: any -Section: libdevel -Depends: libmysqlclient18 (= ${binary:Version}), - ${shlibs:Depends}, ${misc:Depends} -Replaces: mysql-client-5.6, mysql-client-core-5.6 -Description: MySQL development headers - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This package contains the development header files necessary - to develop MySQL client applications. - -Package: libmysqld-dev -Architecture: any -Section: libdevel -Depends: libmysqlclient-dev (= ${binary:Version}), - ${shlibs:Depends}, ${misc:Depends} -Description: MySQL embedded server library - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This package contains the MySQL server as an embedded library. - -Package: mysql-testsuite -Architecture: any -Depends: mysql-community-test (= ${binary:Version}), ${misc:Depends} -Description: MySQL Testsuite meta package depending on latest version - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This is a meta package that depends on the latest mysql test - package available in the repository. - -Package: mysql-community-test -Architecture: any -Depends: mysql-community-server (= ${binary:Version}), - mysql-community-client (= ${binary:Version}), python, - libmysqlclient-dev, ${shlibs:Depends}, ${misc:Depends} -Conflicts: mysql, - mysql-testsuite-5.0, mysql-testsuite-5.1, mysql-testsuite-5.5, - mysql-testsuite-5.6, mysql-commercial-test -Description: MySQL Test Run MTR - The MySQL testsuite - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This package contains the MySQL regression test suite for MySQL - database server. - -Package: mysql-community-bench -Architecture: any -Depends: mysql-community-server (= ${binary:Version}), - ${shlibs:Depends}, ${misc:Depends} -Conflicts: mysql, mysql-commercial-bench -Description: MySQL Bench - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. - -Package: mysql-community-source -Architecture: any -Depends: ${misc:Depends}, ${shlibs:Depends} -Description: MySQL source - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. diff --git a/packaging/deb-vivid/copyright b/packaging/deb-vivid/copyright deleted file mode 100644 index 2c31f2400ae5..000000000000 --- a/packaging/deb-vivid/copyright +++ /dev/null @@ -1,41 +0,0 @@ -Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ -Upstream-Name: MySQL Server 5.6 -Upstream-Contact: MySQL Release Engineering -Source: http://dev.mysql.com/ - -Copyright: 2000, 2014, 2015, Oracle and/or its affiliates. All rights reserved. -License: - This is a release of MySQL, a dual-license SQL database server. - For the avoidance of doubt, this particular copy of the software - is released under the version 2 of the GNU General Public License. - MySQL is brought to you by Oracle. - . - MySQL FOSS License Exception - We want free and open source software applications under certain - licenses to be able to use specified GPL-licensed MySQL client - libraries despite the fact that not all such FOSS licenses are - compatible with version 2 of the GNU General Public License. - Therefore there are special exceptions to the terms and conditions - of the GPLv2 as applied to these client libraries, which are - identified and described in more detail in the FOSS License - Exception at - . - . - This distribution may include materials developed by third - parties. For license and attribution notices for these - materials, please refer to the documentation that accompanies - this distribution (see the "Licenses for Third-Party Components" - appendix) or view the online documentation at - . - . - GPLv2 Disclaimer - For the avoidance of doubt, except that if any license choice - other than GPL or LGPL is available it will apply instead, - Oracle elects to use only the General Public License version 2 - (GPLv2) at this time for any software where a choice of GPL - license versions is made available with the language indicating - that GPLv2 or any later version may be used, or where a choice - . - The full text of the GNU General Public License version 2 can - be found in the file - `/usr/share/mysql/doc/COPYING'. diff --git a/packaging/deb-vivid/extra/apparmor-profile b/packaging/deb-vivid/extra/apparmor-profile deleted file mode 100644 index 5cae3bfa0f80..000000000000 --- a/packaging/deb-vivid/extra/apparmor-profile +++ /dev/null @@ -1,47 +0,0 @@ -# vim:syntax=apparmor -# Last Modified: Fri Feb 28 18:06:30 2014 -#include - -/usr/sbin/mysqld { - #include - #include - #include - -# Allow system resource access - /sys/devices/system/cpu/ r, - capability sys_resource, - capability dac_override, - capability setuid, - capability setgid, - -# Allow config access - /etc/mysql/** r, - -# Allow pid and socket file access - /run/mysqld/mysqld.pid rw, - /run/mysqld/mysqld.sock rw, - -# Allow read/ write to /tmp - /tmp/ r, - /tmp/* rw, - -# Allow execution of server binary - /usr/sbin/mysqld mr, - /usr/sbin/mysqld-debug mr, - -# Allow plugin access - /usr/lib/mysql/plugin/ r, - /usr/lib/mysql/plugin/*.so* mr, - -# Allow error msg and charset access - /usr/share/mysql/ r, - /usr/share/mysql/** r, - -# Allow data dir access - /var/lib/mysql/ r, - /var/lib/mysql/** rwk, - -# Allow log file access - /var/log/mysql/ r, - /var/log/mysql/** rw, -} diff --git a/packaging/deb-vivid/extra/my.cnf.fallback b/packaging/deb-vivid/extra/my.cnf.fallback deleted file mode 100644 index a7525caea5b3..000000000000 --- a/packaging/deb-vivid/extra/my.cnf.fallback +++ /dev/null @@ -1,25 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# -# The MySQL Commercial Server configuration file. -# -# For explanations see -# http://dev.mysql.com/doc/mysql/en/server-system-variables.html - -# * IMPORTANT: Additional settings that can override those from this file! -# The files must end with '.cnf', otherwise they'll be ignored. -# -!includedir /etc/mysql/conf.d/ diff --git a/packaging/deb-vivid/extra/mysql-systemd-start b/packaging/deb-vivid/extra/mysql-systemd-start deleted file mode 100644 index f4aa9c97fc06..000000000000 --- a/packaging/deb-vivid/extra/mysql-systemd-start +++ /dev/null @@ -1,84 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Scripts to run by MySQL systemd service -# -# Needed argument: pre | post -# -# pre mode : try to perform sanity check for configuration, log, data -# post mode : ping server until answer is received - -pinger () { - while /bin/true ; do - sleep 1 - mysqladmin ping >/dev/null 2>&1 && break - done -} - -sanity () { - MYSQLRUN=/var/run/mysqld - MYSQLDATA=/var/lib/mysql - MYSQLLOG=/var/log/mysql - - if [ ! -d ${MYSQLDATA} -a ! -L ${MYSQLDATA} ]; - then - mkdir ${MYSQLDATA} - chown mysql:mysql ${MYSQLDATA} - chmod 750 ${MYSQLDATA} - fi - - if [ ! -d "${MYSQLDATA}/mysql" -a ! -L "${MYSQLDATA}/mysql" ]; - then - mkdir ${MYSQLDATA}/mysql - chown mysql:mysql ${MYSQLDATA}/mysql - chmod 750 ${MYSQLDATA}/mysql - fi - - if [ ! "$(ls -A ${MYSQLDATA}/mysql)" ]; - then - mysql_install_db --user=mysql > /dev/null - fi - - if [ ! -d ${MYSQLLOG} -a ! -L ${MYSQLLOG} ]; - then - mkdir ${MYSQLLOG} - chown mysql:adm ${MYSQLLOG} - chmod 750 ${MYSQLLOG} - touch ${MYSQLLOG}/error.log - chmod 640 ${MYSQLLOG}/error.log - chown mysql:adm ${MYSQLLOG}/error.log - fi - - if [ ! -d "${MYSQLRUN}" -a ! -L "${MYSQLRUN}" ]; - then - mkdir ${MYSQLRUN} - chown mysql:mysql ${MYSQLRUN} - chmod 755 ${MYSQLRUN} - fi - - /lib/init/apparmor-profile-load usr.sbin.mysqld - - if [ ! -r /etc/mysql/my.cnf ]; then - echo "MySQL configuration not found at /etc/mysql/my.cnf. Please install one using update-alternatives." - exit 1 - fi -} - -case $1 in - "pre") sanity ;; - "post") pinger ;; -esac diff --git a/packaging/deb-vivid/extra/mysql.cnf b/packaging/deb-vivid/extra/mysql.cnf deleted file mode 100644 index 8fa01386db6c..000000000000 --- a/packaging/deb-vivid/extra/mysql.cnf +++ /dev/null @@ -1,26 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# -# The MySQL Community Server configuration file. -# -# For explanations see -# http://dev.mysql.com/doc/mysql/en/server-system-variables.html - -# * IMPORTANT: Additional settings that can override those from this file! -# The files must end with '.cnf', otherwise they'll be ignored. -# -!includedir /etc/mysql/conf.d/ -!includedir /etc/mysql/mysql.conf.d/ diff --git a/packaging/deb-vivid/extra/mysql.conf.cnf b/packaging/deb-vivid/extra/mysql.conf.cnf deleted file mode 100644 index a201d7253bda..000000000000 --- a/packaging/deb-vivid/extra/mysql.conf.cnf +++ /dev/null @@ -1,22 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# -# The MySQL Commercial Client configuration file. -# -# For explanations see -# http://dev.mysql.com/doc/mysql/en/server-system-variables.html - -[mysql] diff --git a/packaging/deb-vivid/extra/mysql_embedded.1 b/packaging/deb-vivid/extra/mysql_embedded.1 deleted file mode 100644 index 735c4e05ae07..000000000000 --- a/packaging/deb-vivid/extra/mysql_embedded.1 +++ /dev/null @@ -1 +0,0 @@ -.so man1/mysql.1 diff --git a/packaging/deb-vivid/extra/mysqld.cnf b/packaging/deb-vivid/extra/mysqld.cnf deleted file mode 100644 index 95ae6d87761c..000000000000 --- a/packaging/deb-vivid/extra/mysqld.cnf +++ /dev/null @@ -1,48 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# -# The MySQL Commercial Server configuration file. -# -# For explanations see -# http://dev.mysql.com/doc/mysql/en/server-system-variables.html - -[mysqld_safe] -pid-file = /var/run/mysqld/mysqld.pid -socket = /var/run/mysqld/mysqld.sock -nice = 0 - -[mysqld] -user = mysql -pid-file = /var/run/mysqld/mysqld.pid -socket = /var/run/mysqld/mysqld.sock -port = 3306 -basedir = /usr -datadir = /var/lib/mysql -tmpdir = /tmp -lc-messages-dir = /usr/share/mysql -explicit_defaults_for_timestamp - -# Instead of skip-networking the default is now to listen only on -# localhost which is more compatible and is not less secure. -bind-address = 127.0.0.1 - -log-error = /var/log/mysql/error.log - -# Recommended in standard MySQL setup -sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES - -# Disabling symbolic-links is recommended to prevent assorted security risks -symbolic-links=0 diff --git a/packaging/deb-vivid/libmysqlclient-dev.install b/packaging/deb-vivid/libmysqlclient-dev.install deleted file mode 100644 index e7e98c156c39..000000000000 --- a/packaging/deb-vivid/libmysqlclient-dev.install +++ /dev/null @@ -1,29 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -usr/include/mysql/*.h -usr/include/mysql/mysql/*.h -usr/include/mysql/mysql/*.h.pp -usr/include/mysql/mysql/psi/*.h -usr/lib/*/libmysqlclient.a -usr/lib/*/libmysqlclient.so -usr/lib/*/libmysqlservices.a -usr/bin/mysql_config -usr/bin/mysql_config_editor -usr/share/man/man1/mysql_config.1 -usr/share/man/man1/mysql_config_editor.1 -# legal -usr/share/doc/libmysqlclient-dev/COPYING -usr/share/doc/libmysqlclient-dev/README diff --git a/packaging/deb-vivid/libmysqlclient-dev.lintian-overrides b/packaging/deb-vivid/libmysqlclient-dev.lintian-overrides deleted file mode 100644 index 09960eb27301..000000000000 --- a/packaging/deb-vivid/libmysqlclient-dev.lintian-overrides +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -libmysqlclient-dev: extra-license-file usr/share/doc/libmysqlclient-dev/LICENSE.mysql -libmysqlclient-dev: extra-license-file usr/share/doc/libmysqlclient-dev/COPYING.gz -libmysqlclient-dev: copyright-should-refer-to-common-license-file-for-lgpl -# Due to static linking this cannot be avoided and hence being overridden -libmysqlclient-dev: embedded-library diff --git a/packaging/deb-vivid/libmysqlclient18.install b/packaging/deb-vivid/libmysqlclient18.install deleted file mode 100644 index fe6aa56ce62c..000000000000 --- a/packaging/deb-vivid/libmysqlclient18.install +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -usr/lib/*/libmysqlclient.so.* -# legal -usr/share/doc/libmysqlclient18/COPYING -usr/share/doc/libmysqlclient18/README diff --git a/packaging/deb-vivid/libmysqlclient18.lintian-overrides b/packaging/deb-vivid/libmysqlclient18.lintian-overrides deleted file mode 100644 index 1f26511a13d0..000000000000 --- a/packaging/deb-vivid/libmysqlclient18.lintian-overrides +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -libmysqlclient18: extra-license-file usr/share/doc/libmysqlclient18/LICENSE.mysql -libmysqlclient18: extra-license-file usr/share/doc/libmysqlclient18/COPYING.gz -libmysqlclient18: copyright-should-refer-to-common-license-file-for-lgpl -# Due to static linking this cannot be avoided and hence being overridden -libmysqlclient18: embedded-library diff --git a/packaging/deb-vivid/libmysqld-dev.install b/packaging/deb-vivid/libmysqld-dev.install deleted file mode 100644 index 923f826ae5fe..000000000000 --- a/packaging/deb-vivid/libmysqld-dev.install +++ /dev/null @@ -1,20 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -usr/lib/*/libmysqld.a -usr/lib/*/libmysqld-debug.a -# legal -usr/share/doc/libmysqld-dev/COPYING -usr/share/doc/libmysqld-dev/README diff --git a/packaging/deb-vivid/libmysqld-dev.lintian-overrides b/packaging/deb-vivid/libmysqld-dev.lintian-overrides deleted file mode 100644 index 35caaeca0121..000000000000 --- a/packaging/deb-vivid/libmysqld-dev.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -libmysqld-dev: extra-license-file usr/share/doc/libmysqld-dev/LICENSE.mysql -libmysqld-dev: extra-license-file usr/share/doc/libmysqld-dev/COPYING.gz -libmysqld-dev: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-vivid/mysql-client.install b/packaging/deb-vivid/mysql-client.install deleted file mode 100644 index 13b877e7dafd..000000000000 --- a/packaging/deb-vivid/mysql-client.install +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# legal -usr/share/doc/mysql-client/COPYING -usr/share/doc/mysql-client/README diff --git a/packaging/deb-vivid/mysql-client.lintian-overrides b/packaging/deb-vivid/mysql-client.lintian-overrides deleted file mode 100644 index 5c4891c9190f..000000000000 --- a/packaging/deb-vivid/mysql-client.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-client: extra-license-file usr/share/doc/mysql-client/LICENSE.mysql -mysql-client: extra-license-file usr/share/doc/mysql-client/COPYING.gz -mysql-client: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-vivid/mysql-common.dirs b/packaging/deb-vivid/mysql-common.dirs deleted file mode 100644 index 69265ef08550..000000000000 --- a/packaging/deb-vivid/mysql-common.dirs +++ /dev/null @@ -1,16 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -etc/mysql/conf.d diff --git a/packaging/deb-vivid/mysql-common.install b/packaging/deb-vivid/mysql-common.install deleted file mode 100644 index 8e84e73575cc..000000000000 --- a/packaging/deb-vivid/mysql-common.install +++ /dev/null @@ -1,32 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# configuration file and script -debian/extra/my.cnf.fallback etc/mysql/ -debian/extra/mysql.conf.cnf etc/mysql/conf.d/mysql.cnf - -usr/share/aclocal/mysql.m4 -usr/share/mysql/docs/INFO_SRC -usr/share/mysql/docs/INFO_BIN -usr/share/mysql/docs/ChangeLog -# localized error msgs -usr/share/mysql/*/errmsg.sys -usr/share/mysql/errmsg-utf8.txt -# charsets -usr/share/mysql/charsets/*.xml -usr/share/mysql/charsets/README -# legal -usr/share/doc/mysql-common/COPYING -usr/share/doc/mysql-common/README diff --git a/packaging/deb-vivid/mysql-common.lintian-overrides b/packaging/deb-vivid/mysql-common.lintian-overrides deleted file mode 100644 index 70ddcdf63713..000000000000 --- a/packaging/deb-vivid/mysql-common.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-common: extra-license-file usr/share/doc/mysql-common/LICENSE.mysql -mysql-common: extra-license-file usr/share/doc/mysql-common/COPYING.gz -mysql-common: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-vivid/mysql-common.postinst b/packaging/deb-vivid/mysql-common.postinst deleted file mode 100644 index f53bfaa15616..000000000000 --- a/packaging/deb-vivid/mysql-common.postinst +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/sh - -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -set -e - -if [ "$1" = "configure" ]; then - # Low priority fallback for client use when no server is installed. - update-alternatives --install /etc/mysql/my.cnf my.cnf /etc/mysql/my.cnf.fallback 100 -fi - -#DEBHELPER# diff --git a/packaging/deb-vivid/mysql-common.postrm b/packaging/deb-vivid/mysql-common.postrm deleted file mode 100644 index 4698a986b333..000000000000 --- a/packaging/deb-vivid/mysql-common.postrm +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -set -e - -if [ "$1" = "purge" ]; then - rmdir /etc/mysql 2>/dev/null || true - update-alternatives --remove-all my.cnf -fi - -#DEBHELPER# diff --git a/packaging/deb-vivid/mysql-community-bench.install b/packaging/deb-vivid/mysql-community-bench.install deleted file mode 100644 index 065124bd6933..000000000000 --- a/packaging/deb-vivid/mysql-community-bench.install +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -usr/lib/mysql/sql-bench/* -# legal -usr/share/doc/mysql-community-bench/COPYING -usr/share/doc/mysql-community-bench/README diff --git a/packaging/deb-vivid/mysql-community-bench.lintian-overrides b/packaging/deb-vivid/mysql-community-bench.lintian-overrides deleted file mode 100644 index 04df14ea0469..000000000000 --- a/packaging/deb-vivid/mysql-community-bench.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-community-bench: extra-license-file usr/share/doc/mysql-community-bench/LICENSE.mysql -mysql-community-bench: extra-license-file usr/share/doc/mysql-community-bench/COPYING.gz -mysql-community-bench: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-vivid/mysql-community-client.install b/packaging/deb-vivid/mysql-community-client.install deleted file mode 100644 index aa4e6128e760..000000000000 --- a/packaging/deb-vivid/mysql-community-client.install +++ /dev/null @@ -1,56 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# binaries -usr/bin/myisam_ftdump -usr/bin/mysql -usr/bin/mysql_embedded -usr/bin/mysqlaccess -usr/bin/mysqlaccess.conf -usr/bin/mysqladmin -usr/bin/mysqlbug -usr/bin/mysqlcheck -usr/bin/mysql_client_test -usr/bin/mysql_client_test_embedded -usr/bin/mysqldump -usr/bin/mysqldumpslow -usr/bin/mysql_find_rows -usr/bin/mysql_fix_extensions -usr/bin/mysqlimport -usr/bin/mysqlshow -usr/bin/mysqlslap -usr/bin/mysql_waitpid -# man pages -usr/share/man/man1/myisam_ftdump.1 -usr/share/man/man1/mysql.1 -usr/share/man/man1/mysql_embedded.1 -usr/share/man/man1/mysqlaccess.1 -usr/share/man/man1/mysqladmin.1 -usr/share/man/man1/mysqlbug.1 -usr/share/man/man1/mysqlcheck.1 -usr/share/man/man1/mysql_client_test.1 -usr/share/man/man1/mysql_client_test_embedded.1 -usr/share/man/man1/mysqldump.1 -usr/share/man/man1/mysqldumpslow.1 -usr/share/man/man1/mysql_find_rows.1 -usr/share/man/man1/mysql_fix_extensions.1 -usr/share/man/man1/mysqlimport.1 -usr/share/man/man1/mysqlman.1 -usr/share/man/man1/mysqlshow.1 -usr/share/man/man1/mysqlslap.1 -usr/share/man/man1/mysql_waitpid.1 -# legal -usr/share/doc/mysql-community-client/COPYING -usr/share/doc/mysql-community-client/README diff --git a/packaging/deb-vivid/mysql-community-client.lintian-overrides b/packaging/deb-vivid/mysql-community-client.lintian-overrides deleted file mode 100644 index 589293560ee7..000000000000 --- a/packaging/deb-vivid/mysql-community-client.lintian-overrides +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-community-client: extra-license-file usr/share/doc/mysql-community-client/LICENSE.mysql -mysql-community-client: extra-license-file usr/share/doc/mysql-community-clienti/COPYING.gz -mysql-community-client: copyright-should-refer-to-common-license-file-for-lgpl -# Due to static linking this cannot be avoided and hence being overridden -mysql-community-client: embedded-library diff --git a/packaging/deb-vivid/mysql-community-server.config b/packaging/deb-vivid/mysql-community-server.config deleted file mode 100755 index ceb3373350a0..000000000000 --- a/packaging/deb-vivid/mysql-community-server.config +++ /dev/null @@ -1,88 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -. /usr/share/debconf/confmodule - -if [ "$1" = "configure" ] && [ -z "$2" ]; -then - - set -e - - PKG_LIST=mysql-server-5.5:mysql-server-5.6:mysql-community-server:mysql-commercial-server - INSTALLED_PKG=none - MYSQLDATA=/var/lib/mysql - - IFS_BACKUP=${IFS} - IFS=":" - for PKG in ${PKG_LIST}; - do - STATUS=$(dpkg -s ${PKG} 2> /dev/null | grep Status: | cut -d' ' -f4) - if [ "${STATUS}" = "installed" ]; - then - INSTALLED_PKG=${PKG} - break - fi - done - IFS=${IFS_BACKUP} - - if [ "${INSTALLED_PKG}" = "none" ]; - then - if [ -d ${MYSQLDATA} -o -L ${MYSQLDATA} ]; - then - db_input high mysql-community-server/data-dir || true - else - db_fset mysql-community-server/data-dir seen true - fi - - while :; do - PASSWD="" - db_input high mysql-community-server/root-pass || true - db_go - - db_get mysql-community-server/root-pass - if [ -z "${RET}" ]; - then - db_fset mysql-community-server/root-pass seen true - db_fset mysql-community-server/re-root-pass seen true - break - fi - PASSWD="${RET}" - - db_input high mysql-community-server/re-root-pass || true - db_go - - db_get mysql-community-server/re-root-pass - if [ "${RET}" == "${PASSWD}" ]; - then - PASSWD="" - break - fi - - db_fset mysql-community-server/root-pass-mismatch seen false - db_input critical mysql-community-server/root-pass-mismatch - db_set mysql-community-server/root-pass "" - db_set mysql-community-server/re-root-pass "" - done - - else - db_fset mysql-community-server/data-dir seen true - db_fset mysql-community-server/root-pass seen true - db_fset mysql-community-server/re-root-pass seen true - fi - - set +e -fi diff --git a/packaging/deb-vivid/mysql-community-server.dirs b/packaging/deb-vivid/mysql-community-server.dirs deleted file mode 100644 index 95711c411ee3..000000000000 --- a/packaging/deb-vivid/mysql-community-server.dirs +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -etc/mysql/mysql.conf.d -etc/init.d -usr/lib/mysql -usr/lib/mysql/plugin diff --git a/packaging/deb-vivid/mysql-community-server.install b/packaging/deb-vivid/mysql-community-server.install deleted file mode 100644 index 229a81604b98..000000000000 --- a/packaging/deb-vivid/mysql-community-server.install +++ /dev/null @@ -1,94 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# binaries -usr/bin/innochecksum -usr/bin/msql2mysql -usr/bin/myisamchk -usr/bin/myisamlog -usr/bin/myisampack -usr/bin/my_print_defaults -usr/bin/mysqlbinlog -usr/bin/mysql_convert_table_format -usr/bin/mysqld_multi -usr/bin/mysqld_safe -usr/bin/mysqlhotcopy -usr/bin/mysql_install_db -usr/bin/mysql_plugin -usr/bin/mysql_secure_installation -usr/bin/mysql_setpermission -usr/bin/mysqltest -usr/bin/mysqltest_embedded -usr/bin/mysql_tzinfo_to_sql -usr/bin/mysql_upgrade -usr/bin/mysql_zap -usr/bin/perror -usr/bin/replace -usr/bin/resolveip -usr/bin/resolve_stack_dump -usr/sbin/mysqld -# debug binary -usr/sbin/mysqld-debug -# man pages -usr/share/man/man1/innochecksum.1 -usr/share/man/man1/comp_err.1 -usr/share/man/man1/msql2mysql.1 -usr/share/man/man1/myisamchk.1 -usr/share/man/man1/myisamlog.1 -usr/share/man/man1/myisampack.1 -usr/share/man/man1/my_print_defaults.1 -usr/share/man/man1/mysqlbinlog.1 -usr/share/man/man1/mysql_convert_table_format.1 -usr/share/man/man1/mysqld_multi.1 -usr/share/man/man1/mysqld_safe.1 -usr/share/man/man1/mysqlhotcopy.1 -usr/share/man/man1/mysql_install_db.1 -usr/share/man/man1/mysql_plugin.1 -usr/share/man/man1/mysql_secure_installation.1 -usr/share/man/man1/mysql.server.1 -usr/share/man/man1/mysql_setpermission.1 -usr/share/man/man1/mysql-stress-test.pl.1 -usr/share/man/man1/mysqltest.1 -usr/share/man/man1/mysqltest_embedded.1 -usr/share/man/man1/mysql_tzinfo_to_sql.1 -usr/share/man/man1/mysql_upgrade.1 -usr/share/man/man1/mysql_zap.1 -usr/share/man/man1/perror.1 -usr/share/man/man1/replace.1 -usr/share/man/man1/resolveip.1 -usr/share/man/man1/resolve_stack_dump.1 -usr/share/man/man8/mysqld.8 -# confguration files -debian/extra/mysql.cnf etc/mysql/ -debian/extra/mysqld.cnf etc/mysql/mysql.conf.d/ -# app armor profile -etc/apparmor.d/usr.sbin.mysqld -# SQL files -usr/share/mysql/*.sql -# plugins -usr/lib/mysql/plugin/*.so -usr/lib/mysql/plugin/debug/*.so -usr/lib/mysql/plugin/daemon_example.ini -usr/lib/mysql/plugin/debug/daemon_example.ini -# support files -usr/share/mysql/mysqld_multi.server -usr/share/mysql/magic -usr/share/mysql/mysql-log-rotate -usr/share/mysql/mysql-systemd-start -usr/share/mysql/my-default.cnf -usr/share/mysql/dictionary.txt -# legal -usr/share/doc/mysql-community-server/COPYING -usr/share/doc/mysql-community-server/README diff --git a/packaging/deb-vivid/mysql-community-server.lintian-overrides b/packaging/deb-vivid/mysql-community-server.lintian-overrides deleted file mode 100644 index 08b386543cbc..000000000000 --- a/packaging/deb-vivid/mysql-community-server.lintian-overrides +++ /dev/null @@ -1,23 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-community-server: extra-license-file usr/share/doc/mysql-community-server/LICENSE.mysql -mysql-community-server: extra-license-file usr/share/doc/mysql-community-server/COPYING.gz -mysql-community-server: copyright-should-refer-to-common-license-file-for-lgpl -# Due to static linking this cannot be avoided and hence being overridden -mysql-community-server: embedded-library -# Since we ship debug plugins so this error is overridden -mysql-community-server: unstripped-binary-or-object usr/lib/mysql/plugin/debug/* diff --git a/packaging/deb-vivid/mysql-community-server.mysql.init b/packaging/deb-vivid/mysql-community-server.mysql.init deleted file mode 100755 index 67a01932265f..000000000000 --- a/packaging/deb-vivid/mysql-community-server.mysql.init +++ /dev/null @@ -1,192 +0,0 @@ -#!/bin/bash -# -### BEGIN INIT INFO -# Provides: mysql -# Required-Start: $remote_fs $syslog -# Required-Stop: $remote_fs $syslog -# Should-Start: $network $time -# Should-Stop: $network $time -# Default-Start: 2 3 4 5 -# Default-Stop: 0 1 6 -# Short-Description: Start/ Stop MySQL Community Server daemon -# Description: This service script facilitates startup and shutdown of -# mysqld daemon throught its wrapper script mysqld_safe -### END INIT INFO -# - -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -. /lib/lsb/init-functions - -cd / -umask 077 - -MYSQLDATA=/var/lib/mysql -VERSION=$(mysqld --version | grep mysqld | cut -d' ' -f4) - -get_mysql_option() { - RESULT=$(my_print_defaults "$1" | sed -n "s/^--$2=//p" | tail -n 1) - if [ -z "$RESULT" ]; - then - RESULT="$3" - fi - echo $RESULT -} - -get_running () { - PIDFILE=$(get_mysql_option mysqld_safe pid-file "") - if [ -z "$PIDFILE" ]; - then - PIDFILE=$(get_mysql_option mysqld pid-file "$MYSQLDATA/$(hostname).pid") - fi - if [ -e "$PIDFILE" ] && [ -d "/proc/$(cat "$PIDFILE")" ]; - then - echo 1 - else - echo 0 - fi -} - -server_stop () { - RUNNING=$(get_running) - COUNT=0 - while :; do - COUNT=$(( COUNT+1 )) - echo -n . - if [ "${RUNNING}" -eq 0 ]; - then - echo - break - fi - if [ "${COUNT}" -gt 15 ]; - then - echo - return 1 - fi - RUNNING=$(get_running) - sleep 1 - done - return 0 -} - -case "$1" in - 'start') - RUNNING=$(get_running) - if [ "${RUNNING}" -eq 1 ]; - then - log_action_msg "A MySQL Server is already started" - else - MYSQLRUN=/var/run/mysqld - MYSQLDATA=/var/lib/mysql - MYSQLLOG=/var/log/mysql - - if [ ! -d ${MYSQLDATA} -a ! -L ${MYSQLDATA} ]; - then - mkdir ${MYSQLDATA} - chown mysql:mysql ${MYSQLDATA} - chmod 750 ${MYSQLDATA} - fi - - if [ ! -d "${MYSQLDATA}/mysql" -a ! -L "${MYSQLDATA}/mysql" ]; - then - mkdir ${MYSQLDATA}/mysql - chown mysql:mysql ${MYSQLDATA}/mysql - chmod 750 ${MYSQLDATA}/mysql - fi - - if [ ! "$(ls -A ${MYSQLDATA}/mysql)" ]; - then - mysql_install_db --user=mysql > /dev/null - fi - - if [ ! -d ${MYSQLLOG} -a ! -L ${MYSQLLOG} ]; - then - mkdir ${MYSQLLOG} - chown mysql:adm ${MYSQLLOG} - chmod 750 ${MYSQLLOG} - touch ${MYSQLLOG}/error.log - chmod 640 ${MYSQLLOG}/error.log - chown mysql:adm ${MYSQLLOG}/error.log - fi - - if [ ! -d "${MYSQLRUN}" -a ! -L "${MYSQLRUN}" ]; - then - mkdir ${MYSQLRUN} - chown mysql:mysql ${MYSQLRUN} - chmod 755 ${MYSQLRUN} - fi - - /lib/init/apparmor-profile-load usr.sbin.mysqld - - su - mysql -s /bin/bash -c "mysqld_safe > /dev/null &" - for i in 1 2 3 4 5 6; - do - sleep 1 - echo -n . - done - echo - RUNNING=$(get_running) - if [ "${RUNNING}" -eq 1 ]; - then - log_action_msg "MySQL Community Server ${VERSION} is started" - else - log_action_msg "MySQL Community Server ${VERSION} did not start. Please check logs for more details." - fi - fi - ;; - - 'stop') - RUNNING=$(get_running) - if [ "${RUNNING}" -eq 1 ]; - then - killall -15 mysqld - server_stop - if [ "$?" -eq 0 ]; - then - log_action_msg "MySQL Community Server ${VERSION} is stopped" - else - log_action_msg "Attempt to shutdown MySQL Community Server ${VERSION} timed out" - fi - else - log_action_msg "MySQL Community Server ${VERSION} is already stopped" - fi - ;; - - 'restart'|'reload'|'force-reload') - log_action_msg "Stopping MySQL Community Server ${VERSION}" - $0 stop - log_action_msg "Re-starting MySQL Community Server ${VERSION}" - $0 start - ;; - - 'status') - RUNNING=$(get_running) - if [ ${RUNNING} -eq 1 ]; - then - log_action_msg "MySQL Community Server ${VERSION} is running" - else - log_action_msg "MySQL Community Server ${VERSION} is not running" - exit 3 - fi - ;; - - *) - echo "Usage: $SELF start|stop|restart|reload|force-reload|status" - exit 1 - ;; -esac - -exit 0 diff --git a/packaging/deb-vivid/mysql-community-server.mysql.service b/packaging/deb-vivid/mysql-community-server.mysql.service deleted file mode 100644 index b3e33058beda..000000000000 --- a/packaging/deb-vivid/mysql-community-server.mysql.service +++ /dev/null @@ -1,33 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# MySQL systemd service file - -[Unit] -Description=MySQL Community Server -After=network.target - -[Install] -WantedBy=multi-user.target - -[Service] -User=mysql -Group=mysql -PermissionsStartOnly=true -ExecStartPre=/usr/share/mysql/mysql-systemd-start pre -ExecStart=/usr/bin/mysqld_safe -ExecStartPost=/usr/share/mysql/mysql-systemd-start post -TimeoutSec=600 -Restart=on-failure diff --git a/packaging/deb-vivid/mysql-community-server.postinst b/packaging/deb-vivid/mysql-community-server.postinst deleted file mode 100755 index ad164e52f1b9..000000000000 --- a/packaging/deb-vivid/mysql-community-server.postinst +++ /dev/null @@ -1,95 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -. /usr/share/debconf/confmodule - -take_upstart_job_backup () { - if [ -e "/etc/init/mysql.conf" ] && [ -d "/var/lib/mysql" ]; - then - mv /etc/init/mysql.conf /var/lib/mysql/.mysql.conf.backup - fi -} - -case "$1" in - configure) - - if [ -z "$2" ]; - then - set -e - - update-alternatives --install /etc/mysql/my.cnf my.cnf "/etc/mysql/mysql.cnf" 200 - - MYSQLDATA=/var/lib/mysql - - if [ ! -d "${MYSQLDATA}/mysql" -a ! -L "${MYSQLDATA}/mysql" ]; - then - mkdir ${MYSQLDATA}/mysql - chown mysql:mysql ${MYSQLDATA}/mysql - chmod 750 ${MYSQLDATA}/mysql - if [ ! "$(ls -A ${MYSQLDATA}/mysql)" ]; - then - mysql_install_db --user=mysql > /dev/null - fi - fi - - db_get mysql-community-server/root-pass && PASSWD=${RET} - if [ ! -z "${PASSWD}" ]; - then - db_set mysql-community-server/root-pass "" - db_set mysql-community-server/re-root-pass "" - PASSWD="UPDATE user SET password=PASSWORD('${PASSWD}') WHERE user='root';" - else - PASSWD="" - fi - - SQL=`mktemp` - if [ -f "${SQL}" ]; - then - chmod 700 ${SQL} - cat << EOF > ${SQL} -USE mysql; -${PASSWD} -DELETE FROM user WHERE user=''; -FLUSH PRIVILEGES; -EOF - mysqld --basedir=/usr --bootstrap --user=mysql --skip-grant-tables < $SQL - PASSWD="" - rm -f ${SQL} - fi - - set +e - - fi - - ;; - - abort-upgrade|abort-remove|abort-configure) - - ;; - - *) - exit 1 - ;; -esac - -db_stop - -take_upstart_job_backup - -#DEBHELPER# - -exit 0 diff --git a/packaging/deb-vivid/mysql-community-server.postrm b/packaging/deb-vivid/mysql-community-server.postrm deleted file mode 100755 index 5d4a7b48db02..000000000000 --- a/packaging/deb-vivid/mysql-community-server.postrm +++ /dev/null @@ -1,155 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -if [ "$1" = purge ] && [ -e /usr/share/debconf/confmodule ]; -then -. /usr/share/debconf/confmodule -fi - -place_upstart_job_back () { - if [ -e "/var/lib/mysql/.mysql.conf.backup" ]; - then - mv /var/lib/mysql/.mysql.conf.backup /etc/init/mysql.conf - fi -} - -get_pcount () { - PSCOUNT=$(ps -ef | grep "/usr/sbin/mysqld" | wc -l) - echo "${PSCOUNT}" -} - -server_stop () { - PSCOUNT=$(get_pcount) - COUNT=0 - while :; do - COUNT=$(( COUNT+1 )) - echo -n . - if [ "${PSCOUNT}" -eq 1 ]; - then - echo - break - fi - if [ "${COUNT}" -gt 15 ]; - then - echo - return 1 - fi - PSCOUNT=$(get_pcount) - sleep 1 - done - return 0 -} - -case "$1" in - remove) - - set -e - - place_upstart_job_back - update-alternatives --remove my.cnf "/etc/mysql/mysql.cnf" - - set +e - - ;; - - purge) - - set -e - - place_upstart_job_back - - MYSQLDATA=/var/lib/mysql - MYSQLLOG=/var/log/mysql - MYSQLRUN=/var/run/mysqld - - server_stop - - db_input high mysql-community-server/remove-data-dir || true - db_go - db_get mysql-community-server/remove-data-dir && RMDATADIR=${RET} - if [ "${RMDATADIR}" = "true" ]; - then - if [ -d ${MYSQLRUN} ] || [ -L ${MYSQLRUN} ]; - then - rm -rf ${MYSQLRUN} - fi - - if [ -d ${MYSQLLOG} ] || [ -L ${MYSQLLOG} ]; - then - rm -rf ${MYSQLLOG} - fi - - if [ -d ${MYSQLDATA} ] || [ -L ${MYSQLDATA} ]; - then - rm -rf ${MYSQLDATA} - fi - - if getent passwd mysql >/dev/null; - then - userdel mysql - fi - fi - - set +e - ;; - - abort-install) - - set -e - - place_upstart_job_back - - if [ -x "/etc/init.d/mysql" ]; - then - invoke-rc.d mysql start || exit $? - else - if [ -d ${MYSQLRUN} ] || [ -L ${MYSQLRUN} ]; - then - rm -rf ${MYSQLRUN} - fi - - if [ -d ${MYSQLLOG} ] || [ -L ${MYSQLLOG} ]; - then - rm -rf ${MYSQLLOG} - fi - - if [ -d ${MYSQLDATA} ] || [ -L ${MYSQLDATA} ]; - then - rm -rf ${MYSQLDATA} - fi - - if getent passwd mysql >/dev/null; - then - userdel mysql - fi - fi - - set +e - ;; - - upgrade|abort-upgrade) - - ;; - - *) - exit 1 - ;; -esac - -#DEBHELPER# - -exit 0 diff --git a/packaging/deb-vivid/mysql-community-server.preinst b/packaging/deb-vivid/mysql-community-server.preinst deleted file mode 100755 index c769885e476b..000000000000 --- a/packaging/deb-vivid/mysql-community-server.preinst +++ /dev/null @@ -1,123 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -get_pcount () { - PSCOUNT=$(ps -ef | grep "/usr/sbin/mysqld" | wc -l) - echo "${PSCOUNT}" -} - -server_stop () { - PSCOUNT=$(get_pcount) - COUNT=0 - while :; do - COUNT=$(( COUNT+1 )) - echo -n . - if [ "${PSCOUNT}" -eq 1 ]; - then - echo - break - fi - if [ "${COUNT}" -gt 15 ]; - then - echo - return 1 - fi - PSCOUNT=$(get_pcount) - sleep 1 - done - return 0 -} - -case "$1" in - install) - - if [ -z "$2" ]; - then - - set -e - - if [ -x "/etc/init.d/mysql" ]; - then - invoke-rc.d mysql stop || exit $? - server_stop - fi - - MYSQLDATA=/var/lib/mysql - MYSQLLOG=/var/log/mysql - MYSQLRUN=/var/run/mysqld - - if ! getent group mysql >/dev/null; - then - addgroup --system mysql >/dev/null - fi - - if ! getent passwd mysql >/dev/null; - then - adduser --ingroup mysql --system --disabled-login --no-create-home --home ${MYSQLDATA} --shell /bin/false --gecos "MySQL Server" mysql >/dev/null - fi - - if [ ! -d ${MYSQLDATA} -a ! -L ${MYSQLDATA} ]; - then - mkdir ${MYSQLDATA} - chown mysql:mysql ${MYSQLDATA} - chmod 750 ${MYSQLDATA} - fi - - if [ ! -d ${MYSQLLOG} -a ! -L ${MYSQLLOG} ]; - then - mkdir ${MYSQLLOG} - chown mysql:adm ${MYSQLLOG} - chmod 750 ${MYSQLLOG} - touch ${MYSQLLOG}/error.log - chmod 640 ${MYSQLLOG}/error.log - chown mysql:adm ${MYSQLLOG}/error.log - fi - - if [ ! -d ${MYSQLRUN} -a ! -L ${MYSQLRUN} ]; - then - mkdir ${MYSQLRUN} - chown mysql:mysql ${MYSQLRUN} - chmod 755 ${MYSQLRUN} - fi - - set +e - - fi - - ;; - - upgrade) - - set -e - - #DEBHELPER# - server_stop - - set +e - - ;; - - abort-upgrade) - - ;; - - *) - exit 1 - ;; -esac - -exit 0 diff --git a/packaging/deb-vivid/mysql-community-server.prerm b/packaging/deb-vivid/mysql-community-server.prerm deleted file mode 100755 index 1386b5d43ab9..000000000000 --- a/packaging/deb-vivid/mysql-community-server.prerm +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -set -e - -#DEBHELPER# - -set +e - -exit 0 diff --git a/packaging/deb-vivid/mysql-community-server.templates b/packaging/deb-vivid/mysql-community-server.templates deleted file mode 100644 index 7b7e0ac33cdc..000000000000 --- a/packaging/deb-vivid/mysql-community-server.templates +++ /dev/null @@ -1,33 +0,0 @@ -Template: mysql-community-server/root-pass -Type: password -Description: Enter root password: - Please provide a strong password that will be set for the root account of your MySQL database. - Leave it blank if you do not wish to set or change the root password at this time. - -Template: mysql-community-server/re-root-pass -Type: password -Description: Re-enter root password: - Now that you have selected a password for the root account, please confirm by typing it again. Do not share the password with anyone. - -Template: mysql-community-server/root-pass-mismatch -Type: error -Description: The two passwords did not match - Please try again. Make sure you type the exact same password twice. - -Template: mysql-community-server/remove-data-dir -Type: boolean -Default: false -Description: Remove data directory at /var/lib/mysql ? - This operation will remove the data directory that stores all the databases, tables and related meta-data. - It is highly recommended to take data backup before removing the data directory. - -Template: mysql-community-server/data-dir -Type: note -Description: Data directory found when no MySQL server package is installed - A data directory '/var/lib/mysql' is present on this system when no MySQL server - package is currently installed on the system. The directory may be under control of - server package received from third-party vendors. It may also be an unclaimed data - directory from previous removal of mysql packages. - . - It is highly recommended to take data backup. If you have not done so, now would be - the time to take backup in another shell. Once completed, press 'Ok' to continue. diff --git a/packaging/deb-vivid/mysql-community-source.install b/packaging/deb-vivid/mysql-community-source.install deleted file mode 100644 index 46a0f12b0a52..000000000000 --- a/packaging/deb-vivid/mysql-community-source.install +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -../*.dsc usr/src/mysql/ -../*.tar.gz usr/src/mysql/ -../*.tar.xz usr/src/mysql/ -# legal -usr/share/doc/mysql-community-source/COPYING -usr/share/doc/mysql-community-source/README diff --git a/packaging/deb-vivid/mysql-community-source.lintian-overrides b/packaging/deb-vivid/mysql-community-source.lintian-overrides deleted file mode 100644 index 9ca84e90712c..000000000000 --- a/packaging/deb-vivid/mysql-community-source.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-community-source: extra-license-file usr/share/doc/mysql-community-source/LICENSE.mysql -mysql-community-source: extra-license-file usr/share/doc/mysql-community-source/COPYING.gz -mysql-community-source: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-vivid/mysql-community-test.install b/packaging/deb-vivid/mysql-community-test.install deleted file mode 100644 index e70086b33ade..000000000000 --- a/packaging/deb-vivid/mysql-community-test.install +++ /dev/null @@ -1,20 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -usr/lib/mysql-test/* -usr/share/man/man1/mysql-test-run.pl.1 -# legal -usr/share/doc/mysql-community-test/COPYING -usr/share/doc/mysql-community-test/README diff --git a/packaging/deb-vivid/mysql-community-test.links b/packaging/deb-vivid/mysql-community-test.links deleted file mode 100644 index bf66c98bb758..000000000000 --- a/packaging/deb-vivid/mysql-community-test.links +++ /dev/null @@ -1,17 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -usr/lib/mysql-test/mysql-test-run.pl usr/lib/mysql-test/mysql-test-run -usr/lib/mysql-test/mysql-test-run.pl usr/lib/mysql-test/mtr diff --git a/packaging/deb-vivid/mysql-community-test.lintian-overrides b/packaging/deb-vivid/mysql-community-test.lintian-overrides deleted file mode 100644 index ff273bbe9135..000000000000 --- a/packaging/deb-vivid/mysql-community-test.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-community-test: extra-license-file usr/share/doc/mysql-community-test/LICENSE.mysql -mysql-community-test: extra-license-file usr/share/doc/mysql-community-test/COPYING.gz -mysql-community-test: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-vivid/mysql-server.install b/packaging/deb-vivid/mysql-server.install deleted file mode 100644 index e3aa8de274f0..000000000000 --- a/packaging/deb-vivid/mysql-server.install +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# legal -usr/share/doc/mysql-server/COPYING -usr/share/doc/mysql-server/README diff --git a/packaging/deb-vivid/mysql-server.lintian-overrides b/packaging/deb-vivid/mysql-server.lintian-overrides deleted file mode 100644 index 487709765b02..000000000000 --- a/packaging/deb-vivid/mysql-server.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-server: extra-license-file usr/share/doc/mysql-server/LICENSE.mysql -mysql-server: extra-license-file usr/share/doc/mysql-server/COPYING.gz -mysql-server: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-vivid/mysql-testsuite.install b/packaging/deb-vivid/mysql-testsuite.install deleted file mode 100644 index dfc17333700e..000000000000 --- a/packaging/deb-vivid/mysql-testsuite.install +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# legal -usr/share/doc/mysql-testsuite/COPYING -usr/share/doc/mysql-testsuite/README diff --git a/packaging/deb-vivid/mysql-testsuite.lintian-overrides b/packaging/deb-vivid/mysql-testsuite.lintian-overrides deleted file mode 100644 index 37488fe69b72..000000000000 --- a/packaging/deb-vivid/mysql-testsuite.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-testsuite: extra-license-file usr/share/doc/mysql-testsuite/LICENSE.mysql -mysql-testsuite: extra-license-file usr/share/doc/mysql-testsuite/COPYING.gz -mysql-testsuite: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-vivid/patches/fix-man-page-links.patch b/packaging/deb-vivid/patches/fix-man-page-links.patch deleted file mode 100644 index 004ccdf77d03..000000000000 --- a/packaging/deb-vivid/patches/fix-man-page-links.patch +++ /dev/null @@ -1,14 +0,0 @@ -From: Akhil Mohan -Description: Fix path in man page link. -Bug: http://bugs.mysql.com/bug.php?id=70952 - ---- a/man/mysql_client_test_embedded.1 2013-11-08 19:00:22.000000000 +0530 -+++ b/man/mysql_client_test_embedded.1 2013-11-14 19:29:56.768315219 +0530 -@@ -1 +1 @@ --.so man-gpl-tmp2/mysql_client_test.1 -+.so man1/mysql_client_test.1 ---- a/man/mysqltest_embedded.1 2013-11-08 19:00:22.000000000 +0530 -+++ b/man/mysqltest_embedded.1 2013-11-14 19:31:19.079280675 +0530 -@@ -1 +1 @@ --.so man-gpl-tmp2/mysqltest.1 -+.so man1/mysqltest.1 diff --git a/packaging/deb-vivid/patches/fix-mtr-search-paths.patch b/packaging/deb-vivid/patches/fix-mtr-search-paths.patch deleted file mode 100644 index 8a27a091e6ce..000000000000 --- a/packaging/deb-vivid/patches/fix-mtr-search-paths.patch +++ /dev/null @@ -1,13 +0,0 @@ -From: Akhil Mohan -Description: Adding extra search path for testsuite. - ---- a/mysql-test/lib/mtr_cases.pm 2014-02-24 13:14:37 +0530 -+++ b/mysql-test/lib/mtr_cases.pm 2014-07-02 11:46:24 +0530 -@@ -288,6 +288,7 @@ - { - $suitedir= my_find_dir($::basedir, - ["share/mysql-test/suite", -+ "lib/mysql-test/suite", - "mysql-test/suite", - "internal/mysql-test/suite", - "mysql-test", diff --git a/packaging/deb-vivid/patches/fix-mysql_install_db.patch b/packaging/deb-vivid/patches/fix-mysql_install_db.patch deleted file mode 100644 index 41311b2c8f9e..000000000000 --- a/packaging/deb-vivid/patches/fix-mysql_install_db.patch +++ /dev/null @@ -1,43 +0,0 @@ -From: Terje Røsten -Description: Maintains the pending --skip-my-cnf option in mainline -Bug: - -diff --git a/scripts/mysql_install_db.pl.in b/scripts/mysql_install_db.pl.in -index 440a977..7d068fc 100644 ---- a/scripts/mysql_install_db.pl.in -+++ b/scripts/mysql_install_db.pl.in -@@ -113,6 +113,7 @@ EOF2 - print <{srcdir} and $opt->{basedir} ) - { - error($opt,"Specify either --basedir or --srcdir, not both"); - } --if ( $opt->{'keep-my-cnf'} ) -+if ( $opt->{rpm} || $opt->{'keep-my-cnf'} ) - { - $keep_my_cnf = 1; - } -@@ -664,7 +665,7 @@ if ( $opt->{'skip-name-resolve'} and $resolved and $resolved =~ /\s/ ) - } - - # ---------------------------------------------------------------------- --# Create database directories mysql & test -+# Create database directory mysql - # ---------------------------------------------------------------------- - - # FIXME The shell variant uses "mkdir -p": -@@ -697,7 +698,7 @@ if ($opt_user) - } - } - --foreach my $dir ( $opt->{ldata}, "$opt->{ldata}/mysql", "$opt->{ldata}/test" ) -+foreach my $dir ( $opt->{ldata}, "$opt->{ldata}/mysql") - { - mkdir($dir, 0700) unless -d $dir; - if ($opt_user and -w "/") diff --git a/packaging/deb-vivid/patches/series b/packaging/deb-vivid/patches/series deleted file mode 100644 index e3b20d6febc0..000000000000 --- a/packaging/deb-vivid/patches/series +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -#fix-man-page-links.patch -fix-mysql_install_db.patch -fix-mtr-search-paths.patch diff --git a/packaging/deb-vivid/rules b/packaging/deb-vivid/rules deleted file mode 100755 index b9cd814ce4fd..000000000000 --- a/packaging/deb-vivid/rules +++ /dev/null @@ -1,137 +0,0 @@ -#!/usr/bin/make -f - -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -%: - dh $@ - -export DH_VERBOSE=1 -export CFLAGS= -export CXXFLAGS= - -override_dh_auto_configure: - @echo "RULES.$@" - cmake . \ - -DBUILD_CONFIG=mysql_release \ - -DCMAKE_INSTALL_PREFIX=/usr \ - -DINSTALL_DOCDIR=share/mysql/docs \ - -DINSTALL_DOCREADMEDIR=share/mysql \ - -DINSTALL_INCLUDEDIR=include/mysql \ - -DINSTALL_INFODIR=share/mysql/docs \ - -DINSTALL_LIBDIR=lib/$(DEB_HOST_MULTIARCH) \ - -DINSTALL_MANDIR=share/man \ - -DINSTALL_MYSQLSHAREDIR=share/mysql \ - -DINSTALL_MYSQLTESTDIR=lib/mysql-test \ - -DINSTALL_PLUGINDIR=lib/mysql/plugin \ - -DINSTALL_SBINDIR=sbin \ - -DINSTALL_SCRIPTDIR=bin \ - -DINSTALL_SQLBENCHDIR=lib/mysql \ - -DINSTALL_SUPPORTFILESDIR=share/mysql \ - -DMYSQL_DATADIR=/var/lib/mysql \ - -DSYSCONFDIR=/etc/mysql \ - -DMYSQL_UNIX_ADDR=/var/run/mysqld/mysqld.sock \ - -DWITH_SSL=bundled \ - -DWITH_ZLIB=system \ - -DWITH_EXTRA_CHARSETS=all \ - -DWITH_INNODB_MEMCACHED=1 \ - -DCOMPILATION_COMMENT="MySQL Community Server (GPL)" \ - -DINSTALL_LAYOUT=DEB - - cat CMakeCache.txt - touch $@ - -override_dh_auto_build: - @echo "RULES.$@" - $(MAKE) -j8 VERBOSE=1 - touch $@ - -override_dh_auto_test: - @echo "RULES.$@" - echo "No tests run because test 9: pfs_connect_attr is failing unreasonably" - touch $@ - -override_dh_auto_install: - - @echo "RULES.$@" - # complete install first - $(MAKE) install DESTDIR=debian/tmp - # remove all redundant files and links - rm debian/tmp/usr/lib/*/*_r* - rm debian/tmp/usr/lib/mysql-test/cmake_install.cmake - rm debian/tmp/usr/lib/mysql-test/CTestTestfile.cmake - rm debian/tmp/usr/lib/mysql-test/Makefile - # add missing man pages - install -g root -o root -m 0644 debian/extra/mysql_embedded.1 debian/tmp/usr/share/man/man1 - # add MySQL Server debug binary and library to package - install -g root -o root -m 0755 debian/extra/server-binary debian/tmp/usr/sbin/mysqld-debug - install -g root -o root -m 0755 debian/extra/embedded-server debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/libmysqld-debug.a - # add debug plugin libraries to package - install -g root -o root -m 0755 -d debian/tmp/usr/lib/mysql/plugin/debug - for file in debian/extra/*-plugin; do NEW=`echo $$file | cut -d- -f1`; mv $$file $$NEW.so; done - install -g root -o root -m 0755 debian/extra/*.so debian/tmp/usr/lib/mysql/plugin/debug - install -g root -o root -m 0755 debian/extra/daemon_example.ini debian/tmp/usr/lib/mysql/plugin/debug - # add apparmor profile - install -g root -o root -m 0644 -D debian/extra/apparmor-profile debian/tmp/etc/apparmor.d/usr.sbin.mysqld - # add systemd script - install -m 0755 debian/extra/mysql-systemd-start debian/tmp/usr/share/mysql/ - # add directory for legal docs - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-server - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-community-server - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-client - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-community-client - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-common - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/libmysqlclient18 - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/libmysqlclient-dev - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/libmysqld-dev - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-community-bench - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-testsuite - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-community-test - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-community-source - # add COPYING file to each package - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-server/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-community-server/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-client/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-community-client/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-common/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/libmysqlclient18/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/libmysqlclient-dev/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/libmysqld-dev/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-community-bench/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-testsuite/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-community-test/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-community-source/COPYING - # add README file to each package - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-server/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-community-server/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-client/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-community-client/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-common/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/libmysqlclient18/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/libmysqlclient-dev/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/libmysqld-dev/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-community-bench/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-testsuite/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-community-test/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-community-source/README - touch $@ - -override_dh_installinit: - @echo "RULES.$@" - dh_apparmor -pmysql-community-server --profile-name=usr.sbin.mysqld - dh_systemd_enable --name=mysql - dh_installinit --name=mysql -- defaults 19 21 - dh_systemd_start --restart-after-upgrade - touch $@ diff --git a/packaging/deb-vivid/source/format b/packaging/deb-vivid/source/format deleted file mode 100644 index 163aaf8d82b6..000000000000 --- a/packaging/deb-vivid/source/format +++ /dev/null @@ -1 +0,0 @@ -3.0 (quilt) diff --git a/packaging/deb-vivid/source/include-binaries b/packaging/deb-vivid/source/include-binaries deleted file mode 100644 index 0c23142f3c13..000000000000 --- a/packaging/deb-vivid/source/include-binaries +++ /dev/null @@ -1,34 +0,0 @@ -# Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# obscured filename for mysqld-debug, libmysqld-debug.a and debug plugins -debian/extra/server-binary -debian/extra/embedded-server -debian/extra/adt_null-plugin -debian/extra/auth-plugin -debian/extra/auth_socket-plugin -debian/extra/auth_test_plugin-plugin -debian/extra/innodb_engine-plugin -debian/extra/libdaemon_example-plugin -debian/extra/libmemcached-plugin -debian/extra/mypluglib-plugin -debian/extra/mysql_no_login-plugin -debian/extra/qa_auth_client-plugin -debian/extra/qa_auth_interface-plugin -debian/extra/qa_auth_server-plugin -debian/extra/semisync_master-plugin -debian/extra/semisync_slave-plugin -debian/extra/test_udf_services-plugin -debian/extra/validate_password-plugin diff --git a/packaging/deb-vivid/watch b/packaging/deb-vivid/watch deleted file mode 100644 index c45c5e3e89d6..000000000000 --- a/packaging/deb-vivid/watch +++ /dev/null @@ -1,2 +0,0 @@ -version=3 -http://mysql.mirrors.pair.com/Downloads/MySQL-5.6/mysql-([\d\.]+).tar.gz diff --git a/packaging/deb-wheezy/changelog b/packaging/deb-wheezy/changelog deleted file mode 100644 index 87855edb89fb..000000000000 --- a/packaging/deb-wheezy/changelog +++ /dev/null @@ -1,82 +0,0 @@ -mysql-community (5.6.25-1debian7) wheezy; urgency=low - - * new upstream release - * mysql-community-server now depends on perl, psmisc - mysql-community-test now depends on python, libmysqlclient-dev - (Closes: #20561621) - - -- Akhil Mohan Wed, 25 Feb 2014 22:52:19 +0530 - -mysql-community (5.6.24-1debian7) wheezy; urgency=low - - * new upstream release - - -- Akhil Mohan Mon, 16 Feb 2014 15:45:09 +0530 - -mysql-community (5.6.23-1debian7) wheezy; urgency=low - - * new upstream release - * mysql-community-server now recommends mysql-client - * removed template install-test-db; not installed by default - * d/compat incremented to 9 from 8 - * d/control updated to build depend on debhelper 9 - * added d/*.lintian-overrides and d/source/lintian-overrides - * d/rules updated to reflect correct file permissions - - -- Akhil Mohan Wed, 31 Dec 2014 10:51:07 +0530 - -mysql-community (5.6.22-1debian7) wheezy; urgency=low - - * new upstream release - * fixed d/*server.postinst to allow dropping test db without - setting root password - * init script will now run my_i_db if data dir is not present or empty - - -- Akhil Mohan Wed, 24 Sep 2014 14:48:07 +0530 - -mysql-community (5.6.21-1debian7) wheezy; urgency=low - - * new upstream release - * updated d/rules to increment -j8 as make option - * updated d/source/include-binaries to add mysql_no_login plugin - * updated CMake option WITH_EXTRA_CHARSETS from complex to all - - -- Akhil Mohan Wed, 20 Aug 2014 19:12:30 +0530 - -mysql-community (5.6.20-1debian7) wheezy; urgency=low - - * new upstream release - * added fakeroot as build-dep in d/control - * added d/*.dirs for bench, dev and test pkg - * updated d/rules to make compilation verbose - * removed default CFLAGS, CXXFLAGS in d/rules - * added patch for testsuite search paths under d/patches - * modified cmake option for testsuite in d/rules - * updated patch d/fix-mysql_install_db.patch - * enabled two patches in d/patches/series - * removed extra permissions check in d/rules when fixed in source - * modified d/mysql-*-server.postinst to stop removing /usr/my.cnf - * modified d/*-test.* for updated location of testsuite - * updated d/{mysql-*-server.install,rules} to include debug plugins - * updated d/rules to remove storage engine cmake options - * modified data dir permission in d/*server.{pre,post}inst - * updated d/source/include-binaries to add debug plugins - * updated d/rules to rename debug plugins - - -- Akhil Mohan Wed, 02 Jul 2014 17:45:30 +0530 - -mysql-community (5.6.19-1debian7) wheezy; urgency=low - - * new upstream release - * d/rules updated to rid of files removed from source - * modified path for source tar in source pkg - * obscured actual filenames in d/source/include-binaries - * modified d/rules to handle obscured filenames - - -- Akhil Mohan Mon, 05 May 2014 15:45:10 +0530 - -mysql-community (5.6.17-1debian7) stable; urgency=low - - * new upstream release - - -- Akhil Mohan Fri, 28 Feb 2014 18:06:30 +0530 diff --git a/packaging/deb-wheezy/compat b/packaging/deb-wheezy/compat deleted file mode 100644 index ec635144f600..000000000000 --- a/packaging/deb-wheezy/compat +++ /dev/null @@ -1 +0,0 @@ -9 diff --git a/packaging/deb-wheezy/control b/packaging/deb-wheezy/control deleted file mode 100644 index 4bac0012e482..000000000000 --- a/packaging/deb-wheezy/control +++ /dev/null @@ -1,188 +0,0 @@ -Source: mysql-community -Maintainer: MySQL Release Engineering -Section: database -Priority: optional -Standards-Version: 3.9.3 -Homepage: http://www.mysql.com/ -Build-Depends: debhelper (>= 9.0.0), libaio-dev[linux-any], libncurses5-dev (>= 5.0-6), perl, zlib1g-dev (>= 1:1.1.3-5), po-debconf, psmisc, bison, lsb-release, cmake, fakeroot, libnuma-dev - -Package: mysql-server -Architecture: any -Depends: mysql-community-server (= ${binary:Version}), ${misc:Depends} -Description: MySQL Server meta package depending on latest version - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This is a meta package that depends on the latest mysql server - package available in the repository. - -Package: mysql-community-server -Architecture: any -Pre-depends: debconf (>= 0.2.17), adduser -Depends: mysql-common (= ${binary:Version}), perl, psmisc, - ${shlibs:Depends}, ${misc:Depends} -Recommends: mysql-client (= ${binary:Version}) -Conflicts: mysql, - mysql-server-5.0, mysql-server-core-5.0, - mysql-server-5.1, mysql-server-core-5.1, - mysql-server-5.5, mysql-server-core-5.5, - mysql-server-5.6, mysql-server-core-5.6, - mysql-commercial-server -Replaces: mysql, - mysql-server-5.0, mysql-server-core-5.0, - mysql-server-5.1, mysql-server-core-5.1, - mysql-server-5.5, mysql-server-core-5.5, - mysql-server-5.6, mysql-server-core-5.6, - mysql-commercial-server -Provides: virtual-mysql-server, virtual-mysql-server-core, - mysql-server-5.6, mysql-server-core-5.6 -Description: MySQL Server - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This package includes the MySQL server binary as well as related - utilities to run and administer a MySQL server. - -Package: mysql-client -Architecture: any -Depends: mysql-community-client (= ${binary:Version}), ${misc:Depends} -Description: MySQL Client meta package depending on latest version - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This is a meta package that depends on the latest mysql client - package available in the repository. - -Package: mysql-community-client -Architecture: any -Depends: mysql-common (= ${binary:Version}), - ${shlibs:Depends}, ${misc:Depends} -Conflicts: mysql, - mysql-client-5.0, mysql-client-core-5.0, - mysql-client-5.1, mysql-client-core-5.1, - mysql-client-5.5, mysql-client-core-5.5, - mysql-client-5.6, mysql-client-core-5.6, - mysql-commercial-client -Replaces: mysql, - mysql-client-5.0, mysql-client-core-5.0, - mysql-client-5.1, mysql-client-core-5.1, - mysql-client-5.5, mysql-client-core-5.5, - mysql-client-5.6, mysql-client-core-5.6, - mysql-commercial-client -Provides: virtual-mysql-client, virtual-mysql-client-core, - mysql-client-5.6, mysql-client-core-5.6 -Description: MySQL Client - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This package contains the standard MySQL clients and - administration tools. - -Package: libmysqlclient18 -Architecture: any -Section: libs -Pre-Depends: ${misc:Pre-Depends} -Multi-Arch: same -Depends: mysql-common (= ${binary:Version}), - ${shlibs:Depends}, ${misc:Depends} -Description: MySQL shared client libraries - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This package contains the shared libraries for MySQL client - applications. - -Package: mysql-common -Architecture: any -Pre-depends: debconf (>= 0.2.17), ${misc:Pre-Depends} -Multi-Arch: foreign -Depends: ${shlibs:Depends}, ${misc:Depends} -Conflicts: mysql -Replaces: mysql, mysql-server-5.5, mysql-server-core-5.5, libmysqlclient-dev -Provides: mysql-common -Description: MySQL Common - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This package contains common files needed by MySQL client - library, MySQL database server, and MySQL embedded server. - -Package: libmysqlclient-dev -Architecture: any -Section: libdevel -Depends: libmysqlclient18 (= ${binary:Version}), - ${shlibs:Depends}, ${misc:Depends} -Description: MySQL development headers - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This package contains the development header files necessary - to develop MySQL client applications. - -Package: libmysqld-dev -Architecture: any -Section: libdevel -Depends: libmysqlclient-dev (= ${binary:Version}), - ${shlibs:Depends}, ${misc:Depends} -Description: MySQL embedded server library - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This package contains the MySQL server as an embedded library. - -Package: mysql-testsuite -Architecture: any -Depends: mysql-community-test (= ${binary:Version}), ${misc:Depends} -Description: MySQL Testsuite meta package depending on latest version - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This is a meta package that depends on the latest mysql test - package available in the repository. - -Package: mysql-community-test -Architecture: any -Depends: mysql-community-server (= ${binary:Version}), - mysql-community-client (= ${binary:Version}), python, - libmysqlclient-dev, ${shlibs:Depends}, ${misc:Depends} -Conflicts: mysql, - mysql-testsuite-5.0, mysql-testsuite-5.1, mysql-testsuite-5.5, - mysql-testsuite-5.6, mysql-commercial-test -Description: MySQL Test Run MTR - The MySQL testsuite - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This package contains the MySQL regression test suite for MySQL - database server. - -Package: mysql-community-bench -Architecture: any -Depends: mysql-community-server (= ${binary:Version}), - ${shlibs:Depends}, ${misc:Depends} -Conflicts: mysql, mysql-commercial-bench -Description: MySQL Bench - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. - -Package: mysql-community-source -Architecture: any -Depends: ${misc:Depends}, ${shlibs:Depends} -Description: MySQL source - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. diff --git a/packaging/deb-wheezy/copyright b/packaging/deb-wheezy/copyright deleted file mode 100644 index 482a6765ebd4..000000000000 --- a/packaging/deb-wheezy/copyright +++ /dev/null @@ -1,41 +0,0 @@ -Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ -Upstream-Name: MySQL Server 5.6 -Upstream-Contact: MySQL Release Engineering -Source: http://dev.mysql.com/ - -Copyright: 2000, 2014, Oracle and/or its affiliates. All rights reserved. -License: - This is a release of MySQL, a dual-license SQL database server. - For the avoidance of doubt, this particular copy of the software - is released under the version 2 of the GNU General Public License. - MySQL is brought to you by Oracle. - . - MySQL FOSS License Exception - We want free and open source software applications under certain - licenses to be able to use specified GPL-licensed MySQL client - libraries despite the fact that not all such FOSS licenses are - compatible with version 2 of the GNU General Public License. - Therefore there are special exceptions to the terms and conditions - of the GPLv2 as applied to these client libraries, which are - identified and described in more detail in the FOSS License - Exception at - . - . - This distribution may include materials developed by third - parties. For license and attribution notices for these - materials, please refer to the documentation that accompanies - this distribution (see the "Licenses for Third-Party Components" - appendix) or view the online documentation at - . - . - GPLv2 Disclaimer - For the avoidance of doubt, except that if any license choice - other than GPL or LGPL is available it will apply instead, - Oracle elects to use only the General Public License version 2 - (GPLv2) at this time for any software where a choice of GPL - license versions is made available with the language indicating - that GPLv2 or any later version may be used, or where a choice - . - The full text of the GNU General Public License version 2 can - be found in the file - `/usr/share/mysql/doc/COPYING'. diff --git a/packaging/deb-wheezy/extra/my.cnf b/packaging/deb-wheezy/extra/my.cnf deleted file mode 100644 index a2b2fd8d107a..000000000000 --- a/packaging/deb-wheezy/extra/my.cnf +++ /dev/null @@ -1,57 +0,0 @@ -# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# -# The MySQL Community Server configuration file. -# -# For explanations see -# http://dev.mysql.com/doc/mysql/en/server-system-variables.html - -[client] -port = 3306 -socket = /var/run/mysqld/mysqld.sock - -[mysqld_safe] -pid-file = /var/run/mysqld/mysqld.pid -socket = /var/run/mysqld/mysqld.sock -nice = 0 - -[mysqld] -user = mysql -pid-file = /var/run/mysqld/mysqld.pid -socket = /var/run/mysqld/mysqld.sock -port = 3306 -basedir = /usr -datadir = /var/lib/mysql -tmpdir = /tmp -lc-messages-dir = /usr/share/mysql -explicit_defaults_for_timestamp - -# Instead of skip-networking the default is now to listen only on -# localhost which is more compatible and is not less secure. -bind-address = 127.0.0.1 - -log-error = /var/log/mysql/error.log - -# Recommended in standard MySQL setup -sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES - -# Disabling symbolic-links is recommended to prevent assorted security risks -symbolic-links=0 - -# * IMPORTANT: Additional settings that can override those from this file! -# The files must end with '.cnf', otherwise they'll be ignored. -# -!includedir /etc/mysql/conf.d/ diff --git a/packaging/deb-wheezy/extra/mysql_embedded.1 b/packaging/deb-wheezy/extra/mysql_embedded.1 deleted file mode 100644 index 735c4e05ae07..000000000000 --- a/packaging/deb-wheezy/extra/mysql_embedded.1 +++ /dev/null @@ -1 +0,0 @@ -.so man1/mysql.1 diff --git a/packaging/deb-wheezy/libmysqlclient-dev.dirs b/packaging/deb-wheezy/libmysqlclient-dev.dirs deleted file mode 100644 index 2772b1138317..000000000000 --- a/packaging/deb-wheezy/libmysqlclient-dev.dirs +++ /dev/null @@ -1,17 +0,0 @@ -# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -usr/include/mysql -usr/include/mysql/mysql diff --git a/packaging/deb-wheezy/libmysqlclient-dev.install b/packaging/deb-wheezy/libmysqlclient-dev.install deleted file mode 100644 index 6794f18c300d..000000000000 --- a/packaging/deb-wheezy/libmysqlclient-dev.install +++ /dev/null @@ -1,29 +0,0 @@ -# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -usr/include/mysql/*.h -usr/include/mysql/mysql/*.h -usr/include/mysql/mysql/*.h.pp -usr/include/mysql/mysql/psi/*.h -usr/lib/*/libmysqlclient.a -usr/lib/*/libmysqlclient.so -usr/lib/*/libmysqlservices.a -usr/bin/mysql_config -usr/bin/mysql_config_editor -usr/share/man/man1/mysql_config.1 -usr/share/man/man1/mysql_config_editor.1 -# legal -usr/share/doc/libmysqlclient-dev/COPYING -usr/share/doc/libmysqlclient-dev/README diff --git a/packaging/deb-wheezy/libmysqlclient-dev.lintian-overrides b/packaging/deb-wheezy/libmysqlclient-dev.lintian-overrides deleted file mode 100644 index 09960eb27301..000000000000 --- a/packaging/deb-wheezy/libmysqlclient-dev.lintian-overrides +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -libmysqlclient-dev: extra-license-file usr/share/doc/libmysqlclient-dev/LICENSE.mysql -libmysqlclient-dev: extra-license-file usr/share/doc/libmysqlclient-dev/COPYING.gz -libmysqlclient-dev: copyright-should-refer-to-common-license-file-for-lgpl -# Due to static linking this cannot be avoided and hence being overridden -libmysqlclient-dev: embedded-library diff --git a/packaging/deb-wheezy/libmysqlclient18.install b/packaging/deb-wheezy/libmysqlclient18.install deleted file mode 100644 index cdfdaa60744f..000000000000 --- a/packaging/deb-wheezy/libmysqlclient18.install +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -usr/lib/*/libmysqlclient.so.* -# legal -usr/share/doc/libmysqlclient18/COPYING -usr/share/doc/libmysqlclient18/README diff --git a/packaging/deb-wheezy/libmysqlclient18.lintian-overrides b/packaging/deb-wheezy/libmysqlclient18.lintian-overrides deleted file mode 100644 index 1f26511a13d0..000000000000 --- a/packaging/deb-wheezy/libmysqlclient18.lintian-overrides +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -libmysqlclient18: extra-license-file usr/share/doc/libmysqlclient18/LICENSE.mysql -libmysqlclient18: extra-license-file usr/share/doc/libmysqlclient18/COPYING.gz -libmysqlclient18: copyright-should-refer-to-common-license-file-for-lgpl -# Due to static linking this cannot be avoided and hence being overridden -libmysqlclient18: embedded-library diff --git a/packaging/deb-wheezy/libmysqld-dev.install b/packaging/deb-wheezy/libmysqld-dev.install deleted file mode 100644 index f2b59fcb9a28..000000000000 --- a/packaging/deb-wheezy/libmysqld-dev.install +++ /dev/null @@ -1,20 +0,0 @@ -# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -usr/lib/*/libmysqld.a -usr/lib/*/libmysqld-debug.a -# legal -usr/share/doc/libmysqld-dev/COPYING -usr/share/doc/libmysqld-dev/README diff --git a/packaging/deb-wheezy/libmysqld-dev.lintian-overrides b/packaging/deb-wheezy/libmysqld-dev.lintian-overrides deleted file mode 100644 index 35caaeca0121..000000000000 --- a/packaging/deb-wheezy/libmysqld-dev.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -libmysqld-dev: extra-license-file usr/share/doc/libmysqld-dev/LICENSE.mysql -libmysqld-dev: extra-license-file usr/share/doc/libmysqld-dev/COPYING.gz -libmysqld-dev: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-wheezy/mysql-client.install b/packaging/deb-wheezy/mysql-client.install deleted file mode 100644 index 0a24793e11ea..000000000000 --- a/packaging/deb-wheezy/mysql-client.install +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# legal -usr/share/doc/mysql-client/COPYING -usr/share/doc/mysql-client/README diff --git a/packaging/deb-wheezy/mysql-client.lintian-overrides b/packaging/deb-wheezy/mysql-client.lintian-overrides deleted file mode 100644 index 5c4891c9190f..000000000000 --- a/packaging/deb-wheezy/mysql-client.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-client: extra-license-file usr/share/doc/mysql-client/LICENSE.mysql -mysql-client: extra-license-file usr/share/doc/mysql-client/COPYING.gz -mysql-client: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-wheezy/mysql-common.dirs b/packaging/deb-wheezy/mysql-common.dirs deleted file mode 100644 index a3b0c16a8e40..000000000000 --- a/packaging/deb-wheezy/mysql-common.dirs +++ /dev/null @@ -1,16 +0,0 @@ -# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -etc/mysql/conf.d diff --git a/packaging/deb-wheezy/mysql-common.install b/packaging/deb-wheezy/mysql-common.install deleted file mode 100644 index 2a547a807a9d..000000000000 --- a/packaging/deb-wheezy/mysql-common.install +++ /dev/null @@ -1,29 +0,0 @@ -# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -etc/mysql/my.cnf -usr/share/aclocal/mysql.m4 -usr/share/mysql/docs/INFO_SRC -usr/share/mysql/docs/INFO_BIN -usr/share/mysql/docs/ChangeLog -# localized error msgs -usr/share/mysql/*/errmsg.sys -usr/share/mysql/errmsg-utf8.txt -# charsets -usr/share/mysql/charsets/*.xml -usr/share/mysql/charsets/README -# legal -usr/share/doc/mysql-common/COPYING -usr/share/doc/mysql-common/README diff --git a/packaging/deb-wheezy/mysql-common.lintian-overrides b/packaging/deb-wheezy/mysql-common.lintian-overrides deleted file mode 100644 index 70ddcdf63713..000000000000 --- a/packaging/deb-wheezy/mysql-common.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-common: extra-license-file usr/share/doc/mysql-common/LICENSE.mysql -mysql-common: extra-license-file usr/share/doc/mysql-common/COPYING.gz -mysql-common: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-wheezy/mysql-community-bench.dirs b/packaging/deb-wheezy/mysql-community-bench.dirs deleted file mode 100644 index 9d0acf491338..000000000000 --- a/packaging/deb-wheezy/mysql-community-bench.dirs +++ /dev/null @@ -1,17 +0,0 @@ -# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -usr/lib/mysql -usr/lib/mysql/sql-bench diff --git a/packaging/deb-wheezy/mysql-community-bench.install b/packaging/deb-wheezy/mysql-community-bench.install deleted file mode 100644 index 8aa8be6facba..000000000000 --- a/packaging/deb-wheezy/mysql-community-bench.install +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -usr/lib/mysql/sql-bench/* -# legal -usr/share/doc/mysql-community-bench/COPYING -usr/share/doc/mysql-community-bench/README diff --git a/packaging/deb-wheezy/mysql-community-bench.lintian-overrides b/packaging/deb-wheezy/mysql-community-bench.lintian-overrides deleted file mode 100644 index 04df14ea0469..000000000000 --- a/packaging/deb-wheezy/mysql-community-bench.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-community-bench: extra-license-file usr/share/doc/mysql-community-bench/LICENSE.mysql -mysql-community-bench: extra-license-file usr/share/doc/mysql-community-bench/COPYING.gz -mysql-community-bench: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-wheezy/mysql-community-client.install b/packaging/deb-wheezy/mysql-community-client.install deleted file mode 100644 index c6a27ce6f4a3..000000000000 --- a/packaging/deb-wheezy/mysql-community-client.install +++ /dev/null @@ -1,60 +0,0 @@ -# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# binaries -usr/bin/innochecksum -usr/bin/myisam_ftdump -usr/bin/mysql -usr/bin/mysql_embedded -usr/bin/mysqlaccess -usr/bin/mysqlaccess.conf -usr/bin/mysqladmin -usr/bin/mysqlbug -usr/bin/mysqlcheck -usr/bin/mysql_client_test -usr/bin/mysql_client_test_embedded -usr/bin/mysqldump -usr/bin/mysqldumpslow -usr/bin/mysql_find_rows -usr/bin/mysql_fix_extensions -usr/bin/mysqlimport -usr/bin/mysql_plugin -usr/bin/mysqlshow -usr/bin/mysqlslap -usr/bin/mysql_waitpid -# man pages -usr/share/man/man1/innochecksum.1 -usr/share/man/man1/myisam_ftdump.1 -usr/share/man/man1/mysql.1 -usr/share/man/man1/mysql_embedded.1 -usr/share/man/man1/mysqlaccess.1 -usr/share/man/man1/mysqladmin.1 -usr/share/man/man1/mysqlbug.1 -usr/share/man/man1/mysqlcheck.1 -usr/share/man/man1/mysql_client_test.1 -usr/share/man/man1/mysql_client_test_embedded.1 -usr/share/man/man1/mysqldump.1 -usr/share/man/man1/mysqldumpslow.1 -usr/share/man/man1/mysql_find_rows.1 -usr/share/man/man1/mysql_fix_extensions.1 -usr/share/man/man1/mysqlimport.1 -usr/share/man/man1/mysqlman.1 -usr/share/man/man1/mysql_plugin.1 -usr/share/man/man1/mysqlshow.1 -usr/share/man/man1/mysqlslap.1 -usr/share/man/man1/mysql_waitpid.1 -# legal -usr/share/doc/mysql-community-client/COPYING -usr/share/doc/mysql-community-client/README diff --git a/packaging/deb-wheezy/mysql-community-client.lintian-overrides b/packaging/deb-wheezy/mysql-community-client.lintian-overrides deleted file mode 100644 index 589293560ee7..000000000000 --- a/packaging/deb-wheezy/mysql-community-client.lintian-overrides +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-community-client: extra-license-file usr/share/doc/mysql-community-client/LICENSE.mysql -mysql-community-client: extra-license-file usr/share/doc/mysql-community-clienti/COPYING.gz -mysql-community-client: copyright-should-refer-to-common-license-file-for-lgpl -# Due to static linking this cannot be avoided and hence being overridden -mysql-community-client: embedded-library diff --git a/packaging/deb-wheezy/mysql-community-server.config b/packaging/deb-wheezy/mysql-community-server.config deleted file mode 100755 index cb6c39cfd5b9..000000000000 --- a/packaging/deb-wheezy/mysql-community-server.config +++ /dev/null @@ -1,88 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -. /usr/share/debconf/confmodule - -if [ "$1" = "configure" ] && [ -z "$2" ]; -then - - set -e - - PKG_LIST=mysql-server-5.5:mysql-server-5.6:mysql-community-server:mysql-commercial-server - INSTALLED_PKG=none - MYSQLDATA=/var/lib/mysql - - IFS_BACKUP=${IFS} - IFS=":" - for PKG in ${PKG_LIST}; - do - STATUS=$(dpkg -s ${PKG} 2> /dev/null | grep Status: | cut -d' ' -f4) - if [ "${STATUS}" = "installed" ]; - then - INSTALLED_PKG=${PKG} - break - fi - done - IFS=${IFS_BACKUP} - - if [ "${INSTALLED_PKG}" = "none" ]; - then - if [ -d ${MYSQLDATA} -o -L ${MYSQLDATA} ]; - then - db_input high mysql-community-server/data-dir || true - else - db_fset mysql-community-server/data-dir seen true - fi - - while :; do - PASSWD="" - db_input high mysql-community-server/root-pass || true - db_go - - db_get mysql-community-server/root-pass - if [ -z "${RET}" ]; - then - db_fset mysql-community-server/root-pass seen true - db_fset mysql-community-server/re-root-pass seen true - break - fi - PASSWD="${RET}" - - db_input high mysql-community-server/re-root-pass || true - db_go - - db_get mysql-community-server/re-root-pass - if [ "${RET}" == "${PASSWD}" ]; - then - PASSWD="" - break - fi - - db_fset mysql-community-server/root-pass-mismatch seen false - db_input critical mysql-community-server/root-pass-mismatch - db_set mysql-community-server/root-pass "" - db_set mysql-community-server/re-root-pass "" - done - - else - db_fset mysql-community-server/data-dir seen true - db_fset mysql-community-server/root-pass seen true - db_fset mysql-community-server/re-root-pass seen true - fi - - set +e -fi diff --git a/packaging/deb-wheezy/mysql-community-server.dirs b/packaging/deb-wheezy/mysql-community-server.dirs deleted file mode 100644 index f677b6f3747b..000000000000 --- a/packaging/deb-wheezy/mysql-community-server.dirs +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -etc/mysql/conf.d -etc/init.d -usr/lib/mysql -usr/lib/mysql/plugin diff --git a/packaging/deb-wheezy/mysql-community-server.install b/packaging/deb-wheezy/mysql-community-server.install deleted file mode 100644 index f311000c7ee8..000000000000 --- a/packaging/deb-wheezy/mysql-community-server.install +++ /dev/null @@ -1,84 +0,0 @@ -# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# binaries -usr/bin/msql2mysql -usr/bin/myisamchk -usr/bin/myisamlog -usr/bin/myisampack -usr/bin/my_print_defaults -usr/bin/mysqlbinlog -usr/bin/mysql_convert_table_format -usr/bin/mysqld_multi -usr/bin/mysqld_safe -usr/bin/mysqlhotcopy -usr/bin/mysql_install_db -usr/bin/mysql_secure_installation -usr/bin/mysql_setpermission -usr/bin/mysqltest -usr/bin/mysqltest_embedded -usr/bin/mysql_tzinfo_to_sql -usr/bin/mysql_upgrade -usr/bin/mysql_zap -usr/bin/perror -usr/bin/replace -usr/bin/resolveip -usr/bin/resolve_stack_dump -usr/sbin/mysqld -# debug binary -usr/sbin/mysqld-debug -# man pages -usr/share/man/man1/comp_err.1 -usr/share/man/man1/msql2mysql.1 -usr/share/man/man1/myisamchk.1 -usr/share/man/man1/myisamlog.1 -usr/share/man/man1/myisampack.1 -usr/share/man/man1/my_print_defaults.1 -usr/share/man/man1/mysqlbinlog.1 -usr/share/man/man1/mysql_convert_table_format.1 -usr/share/man/man1/mysqld_multi.1 -usr/share/man/man1/mysqld_safe.1 -usr/share/man/man1/mysqlhotcopy.1 -usr/share/man/man1/mysql_install_db.1 -usr/share/man/man1/mysql_secure_installation.1 -usr/share/man/man1/mysql.server.1 -usr/share/man/man1/mysql_setpermission.1 -usr/share/man/man1/mysql-stress-test.pl.1 -usr/share/man/man1/mysqltest.1 -usr/share/man/man1/mysqltest_embedded.1 -usr/share/man/man1/mysql_tzinfo_to_sql.1 -usr/share/man/man1/mysql_upgrade.1 -usr/share/man/man1/mysql_zap.1 -usr/share/man/man1/perror.1 -usr/share/man/man1/replace.1 -usr/share/man/man1/resolveip.1 -usr/share/man/man1/resolve_stack_dump.1 -usr/share/man/man8/mysqld.8 -# SQL files -usr/share/mysql/*.sql -# plugins -usr/lib/mysql/plugin/*.so -usr/lib/mysql/plugin/debug/*.so -usr/lib/mysql/plugin/daemon_example.ini -usr/lib/mysql/plugin/debug/daemon_example.ini -# support files -usr/share/mysql/mysqld_multi.server -usr/share/mysql/magic -usr/share/mysql/mysql-log-rotate -usr/share/mysql/my-default.cnf -usr/share/mysql/dictionary.txt -# legal -usr/share/doc/mysql-community-server/COPYING -usr/share/doc/mysql-community-server/README diff --git a/packaging/deb-wheezy/mysql-community-server.lintian-overrides b/packaging/deb-wheezy/mysql-community-server.lintian-overrides deleted file mode 100644 index 08b386543cbc..000000000000 --- a/packaging/deb-wheezy/mysql-community-server.lintian-overrides +++ /dev/null @@ -1,23 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-community-server: extra-license-file usr/share/doc/mysql-community-server/LICENSE.mysql -mysql-community-server: extra-license-file usr/share/doc/mysql-community-server/COPYING.gz -mysql-community-server: copyright-should-refer-to-common-license-file-for-lgpl -# Due to static linking this cannot be avoided and hence being overridden -mysql-community-server: embedded-library -# Since we ship debug plugins so this error is overridden -mysql-community-server: unstripped-binary-or-object usr/lib/mysql/plugin/debug/* diff --git a/packaging/deb-wheezy/mysql-community-server.mysql.init b/packaging/deb-wheezy/mysql-community-server.mysql.init deleted file mode 100755 index d8c08082f550..000000000000 --- a/packaging/deb-wheezy/mysql-community-server.mysql.init +++ /dev/null @@ -1,190 +0,0 @@ -#!/bin/bash -# -### BEGIN INIT INFO -# Provides: mysql -# Required-Start: $remote_fs $syslog -# Required-Stop: $remote_fs $syslog -# Should-Start: $network $time -# Should-Stop: $network $time -# Default-Start: 2 3 4 5 -# Default-Stop: 0 1 6 -# Short-Description: Start/ Stop MySQL Community Server daemon -# Description: This service script facilitates startup and shutdown of -# mysqld daemon throught its wrapper script mysqld_safe -### END INIT INFO -# - -# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -. /lib/lsb/init-functions - -cd / -umask 077 - -MYSQLDATA=/var/lib/mysql -VERSION=$(mysqld --version | grep mysqld | cut -d' ' -f4) - -get_mysql_option() { - RESULT=$(my_print_defaults "$1" | sed -n "s/^--$2=//p" | tail -n 1) - if [ -z "$RESULT" ]; - then - RESULT="$3" - fi - echo $RESULT -} - -get_running () { - PIDFILE=$(get_mysql_option mysqld_safe pid-file "") - if [ -z "$PIDFILE" ]; - then - PIDFILE=$(get_mysql_option mysqld pid-file "$MYSQLDATA/$(hostname).pid") - fi - if [ -e "$PIDFILE" ] && [ -d "/proc/$(cat "$PIDFILE")" ]; - then - echo 1 - else - echo 0 - fi -} - -server_stop () { - RUNNING=$(get_running) - COUNT=0 - while :; do - COUNT=$(( COUNT+1 )) - echo -n . - if [ "${RUNNING}" -eq 0 ]; - then - echo - break - fi - if [ "${COUNT}" -gt 15 ]; - then - echo - return 1 - fi - RUNNING=$(get_running) - sleep 1 - done - return 0 -} - -case "$1" in - 'start') - RUNNING=$(get_running) - if [ "${RUNNING}" -eq 1 ]; - then - log_action_msg "A MySQL Server is already started" - else - MYSQLRUN=/var/run/mysqld - MYSQLDATA=/var/lib/mysql - MYSQLLOG=/var/log/mysql - - if [ ! -d ${MYSQLDATA} -a ! -L ${MYSQLDATA} ]; - then - mkdir ${MYSQLDATA} - chown mysql:mysql ${MYSQLDATA} - chmod 750 ${MYSQLDATA} - fi - - if [ ! -d "${MYSQLDATA}/mysql" -a ! -L "${MYSQLDATA}/mysql" ]; - then - mkdir ${MYSQLDATA}/mysql - chown mysql:mysql ${MYSQLDATA}/mysql - chmod 750 ${MYSQLDATA}/mysql - fi - - if [ ! "$(ls -A ${MYSQLDATA}/mysql)" ]; - then - mysql_install_db --user=mysql > /dev/null - fi - - if [ ! -d ${MYSQLLOG} -a ! -L ${MYSQLLOG} ]; - then - mkdir ${MYSQLLOG} - chown mysql:adm ${MYSQLLOG} - chmod 750 ${MYSQLLOG} - touch ${MYSQLLOG}/error.log - chmod 640 ${MYSQLLOG}/error.log - chown mysql:adm ${MYSQLLOG}/error.log - fi - - if [ ! -d "${MYSQLRUN}" -a ! -L "${MYSQLRUN}" ]; - then - mkdir ${MYSQLRUN} - chown mysql:mysql ${MYSQLRUN} - chmod 755 ${MYSQLRUN} - fi - - su - mysql -s /bin/bash -c "mysqld_safe > /dev/null &" - for i in 1 2 3 4 5 6; - do - sleep 1 - echo -n . - done - echo - RUNNING=$(get_running) - if [ "${RUNNING}" -eq 1 ]; - then - log_action_msg "MySQL Community Server ${VERSION} is started" - else - log_action_msg "MySQL Community Server ${VERSION} did not start. Please check logs for more details." - fi - fi - ;; - - 'stop') - RUNNING=$(get_running) - if [ "${RUNNING}" -eq 1 ]; - then - killall -15 mysqld - server_stop - if [ "$?" -eq 0 ]; - then - log_action_msg "MySQL Community Server ${VERSION} is stopped" - else - log_action_msg "Attempt to shutdown MySQL Community Server ${VERSION} timed out" - fi - else - log_action_msg "MySQL Community Server ${VERSION} is already stopped" - fi - ;; - - 'restart'|'reload'|'force-reload') - log_action_msg "Stopping MySQL Community Server ${VERSION}" - $0 stop - log_action_msg "Re-starting MySQL Community Server ${VERSION}" - $0 start - ;; - - 'status') - RUNNING=$(get_running) - if [ ${RUNNING} -eq 1 ]; - then - log_action_msg "MySQL Community Server ${VERSION} is running" - else - log_action_msg "MySQL Community Server ${VERSION} is not running" - exit 3 - fi - ;; - - *) - echo "Usage: $SELF start|stop|restart|reload|force-reload|status" - exit 1 - ;; -esac - -exit 0 diff --git a/packaging/deb-wheezy/mysql-community-server.postinst b/packaging/deb-wheezy/mysql-community-server.postinst deleted file mode 100755 index 0fe3dc1227cf..000000000000 --- a/packaging/deb-wheezy/mysql-community-server.postinst +++ /dev/null @@ -1,102 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -. /usr/share/debconf/confmodule - -take_upstart_job_backup () { - if [ -e "/etc/init/mysql.conf" ] && [ -d "/var/lib/mysql" ]; - then - mv /etc/init/mysql.conf /var/lib/mysql/.mysql.conf.backup - fi -} - -case "$1" in - configure) - -# MySQL 5.6.34 needs this - MYSQLFILES=/var/lib/mysql-files - if [ ! -d ${MYSQLFILES} -a ! -L ${MYSQLFILES} ]; - then - mkdir ${MYSQLFILES} - chown mysql:mysql ${MYSQLFILES} - chmod 770 ${MYSQLFILES} - fi - - if [ -z "$2" ]; - then - set -e - - MYSQLDATA=/var/lib/mysql - - if [ ! -d "${MYSQLDATA}/mysql" -a ! -L "${MYSQLDATA}/mysql" ]; - then - mkdir ${MYSQLDATA}/mysql - chown mysql:mysql ${MYSQLDATA}/mysql - chmod 750 ${MYSQLDATA}/mysql - if [ ! "$(ls -A ${MYSQLDATA}/mysql)" ]; - then - mysql_install_db --user=mysql > /dev/null - fi - fi - - db_get mysql-community-server/root-pass && PASSWD=${RET} - if [ ! -z "${PASSWD}" ]; - then - db_set mysql-community-server/root-pass "" - db_set mysql-community-server/re-root-pass "" - PASSWD="UPDATE user SET password=PASSWORD('${PASSWD}') WHERE user='root';" - else - PASSWD="" - fi - - SQL=`mktemp` - if [ -f "${SQL}" ]; - then - chmod 700 ${SQL} - cat << EOF > ${SQL} -USE mysql; -${PASSWD} -DELETE FROM user WHERE user=''; -FLUSH PRIVILEGES; -EOF - mysqld --basedir=/usr --bootstrap --user=mysql --skip-grant-tables < $SQL - PASSWD="" - rm -f ${SQL} - fi - - set +e - - fi - - ;; - - abort-upgrade|abort-remove|abort-configure) - - ;; - - *) - exit 1 - ;; -esac - -db_stop - -take_upstart_job_backup - -#DEBHELPER# - -exit 0 diff --git a/packaging/deb-wheezy/mysql-community-server.postrm b/packaging/deb-wheezy/mysql-community-server.postrm deleted file mode 100755 index 55f83a3bec28..000000000000 --- a/packaging/deb-wheezy/mysql-community-server.postrm +++ /dev/null @@ -1,165 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -if [ "$1" = purge ] && [ -e /usr/share/debconf/confmodule ]; -then -. /usr/share/debconf/confmodule -fi - -place_upstart_job_back () { - if [ -e "/var/lib/mysql/.mysql.conf.backup" ]; - then - mv /var/lib/mysql/.mysql.conf.backup /etc/init/mysql.conf - fi -} - -get_pcount () { - PSCOUNT=$(ps -ef | grep "/usr/sbin/mysqld" | wc -l) - echo "${PSCOUNT}" -} - -server_stop () { - PSCOUNT=$(get_pcount) - COUNT=0 - while :; do - COUNT=$(( COUNT+1 )) - echo -n . - if [ "${PSCOUNT}" -eq 1 ]; - then - echo - break - fi - if [ "${COUNT}" -gt 15 ]; - then - echo - return 1 - fi - PSCOUNT=$(get_pcount) - sleep 1 - done - return 0 -} - -case "$1" in - remove) - - set -e - - place_upstart_job_back - - set +e - - ;; - - purge) - - set -e - - place_upstart_job_back - - MYSQLDATA=/var/lib/mysql - MYSQLLOG=/var/log/mysql - MYSQLRUN=/var/run/mysqld - MYSQLFILES=/var/lib/mysql-files - - server_stop - - db_input high mysql-community-server/remove-data-dir || true - db_go - db_get mysql-community-server/remove-data-dir && RMDATADIR=${RET} - if [ "${RMDATADIR}" = "true" ]; - then - if [ -d ${MYSQLRUN} ] || [ -L ${MYSQLRUN} ]; - then - rm -rf ${MYSQLRUN} - fi - - if [ -d ${MYSQLLOG} ] || [ -L ${MYSQLLOG} ]; - then - rm -rf ${MYSQLLOG} - fi - - if [ -d ${MYSQLDATA} ] || [ -L ${MYSQLDATA} ]; - then - rm -rf ${MYSQLDATA} - fi - - if [ -d ${MYSQLFILES} ] || [ -L ${MYSQLFILES} ]; - then - rm -rf ${MYSQLFILES} - fi - - if getent passwd mysql >/dev/null; - then - userdel mysql - fi - fi - - set +e - ;; - - abort-install) - - set -e - - place_upstart_job_back - - if [ -x "/etc/init.d/mysql" ]; - then - invoke-rc.d mysql start || exit $? - else - if [ -d ${MYSQLRUN} ] || [ -L ${MYSQLRUN} ]; - then - rm -rf ${MYSQLRUN} - fi - - if [ -d ${MYSQLLOG} ] || [ -L ${MYSQLLOG} ]; - then - rm -rf ${MYSQLLOG} - fi - - if [ -d ${MYSQLDATA} ] || [ -L ${MYSQLDATA} ]; - then - rm -rf ${MYSQLDATA} - fi - - if [ -d ${MYSQLFILES} ] || [ -L ${MYSQLFILES} ]; - then - rm -rf ${MYSQLFILES} - fi - - if getent passwd mysql >/dev/null; - then - userdel mysql - fi - fi - - set +e - ;; - - upgrade|abort-upgrade) - - ;; - - *) - exit 1 - ;; -esac - -#DEBHELPER# - -exit 0 diff --git a/packaging/deb-wheezy/mysql-community-server.preinst b/packaging/deb-wheezy/mysql-community-server.preinst deleted file mode 100755 index e5b3b7719b69..000000000000 --- a/packaging/deb-wheezy/mysql-community-server.preinst +++ /dev/null @@ -1,131 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -get_pcount () { - PSCOUNT=$(ps -ef | grep "/usr/sbin/mysqld" | wc -l) - echo "${PSCOUNT}" -} - -server_stop () { - PSCOUNT=$(get_pcount) - COUNT=0 - while :; do - COUNT=$(( COUNT+1 )) - echo -n . - if [ "${PSCOUNT}" -eq 1 ]; - then - echo - break - fi - if [ "${COUNT}" -gt 15 ]; - then - echo - return 1 - fi - PSCOUNT=$(get_pcount) - sleep 1 - done - return 0 -} - -case "$1" in - install) - - if [ -z "$2" ]; - then - - set -e - - if [ -x "/etc/init.d/mysql" ]; - then - invoke-rc.d mysql stop || exit $? - server_stop - fi - - MYSQLDATA=/var/lib/mysql - MYSQLFILES=/var/lib/mysql-files - MYSQLLOG=/var/log/mysql - MYSQLRUN=/var/run/mysqld - - if ! getent group mysql >/dev/null; - then - addgroup --system mysql >/dev/null - fi - - if ! getent passwd mysql >/dev/null; - then - adduser --ingroup mysql --system --disabled-login --no-create-home --home ${MYSQLDATA} --shell /bin/false --gecos "MySQL Server" mysql >/dev/null - fi - - if [ ! -d ${MYSQLDATA} -a ! -L ${MYSQLDATA} ]; - then - mkdir ${MYSQLDATA} - chown mysql:mysql ${MYSQLDATA} - chmod 750 ${MYSQLDATA} - fi - - if [ ! -d ${MYSQLFILES} -a ! -L ${MYSQLFILES} ]; - then - mkdir ${MYSQLFILES} - chown mysql:mysql ${MYSQLFILES} - chmod 770 ${MYSQLFILES} - fi - - if [ ! -d ${MYSQLLOG} -a ! -L ${MYSQLLOG} ]; - then - mkdir ${MYSQLLOG} - chown mysql:adm ${MYSQLLOG} - chmod 750 ${MYSQLLOG} - touch ${MYSQLLOG}/error.log - chmod 640 ${MYSQLLOG}/error.log - chown mysql:adm ${MYSQLLOG}/error.log - fi - - if [ ! -d ${MYSQLRUN} -a ! -L ${MYSQLRUN} ]; - then - mkdir ${MYSQLRUN} - chown mysql:mysql ${MYSQLRUN} - chmod 755 ${MYSQLRUN} - fi - - set +e - - fi - - ;; - - upgrade) - - set -e - - #DEBHELPER# - server_stop - - set +e - - ;; - - abort-upgrade) - - ;; - - *) - exit 1 - ;; -esac - -exit 0 diff --git a/packaging/deb-wheezy/mysql-community-server.prerm b/packaging/deb-wheezy/mysql-community-server.prerm deleted file mode 100755 index 7509de7a948c..000000000000 --- a/packaging/deb-wheezy/mysql-community-server.prerm +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -set -e - -#DEBHELPER# - -set +e - -exit 0 diff --git a/packaging/deb-wheezy/mysql-community-server.templates b/packaging/deb-wheezy/mysql-community-server.templates deleted file mode 100644 index 2469d917769e..000000000000 --- a/packaging/deb-wheezy/mysql-community-server.templates +++ /dev/null @@ -1,34 +0,0 @@ -Template: mysql-community-server/root-pass -Type: password -Description: Enter root password: - Please provide a strong password that will be set for the root account of your MySQL database. - Leave it blank if you do not wish to set or change the root password at this time. - -Template: mysql-community-server/re-root-pass -Type: password -Description: Re-enter root password: - Now that you have selected a password for the root account, please confirm by typing it again. Do not share the password with anyone. - -Template: mysql-community-server/root-pass-mismatch -Type: error -Description: The two passwords did not match - Please try again. Make sure you type the exact same password twice. - -Template: mysql-community-server/remove-data-dir -Type: boolean -Default: false -Description: Remove data directory at /var/lib/mysql ? - This operation will remove the data directory that stores all the databases, tables and related meta-data. - Additionally, any import or export files stored at '/var/lib/mysql-files' will be removed along with directory. - It is highly recommended to take data backup before removing the data directory. - -Template: mysql-community-server/data-dir -Type: note -Description: Data directory found when no MySQL server package is installed - A data directory '/var/lib/mysql' is present on this system when no MySQL server - package is currently installed on the system. The directory may be under control of - server package received from third-party vendors. It may also be an unclaimed data - directory from previous removal of mysql packages. - . - It is highly recommended to take data backup. If you have not done so, now would be - the time to take backup in another shell. Once completed, press 'Ok' to continue. diff --git a/packaging/deb-wheezy/mysql-community-source.install b/packaging/deb-wheezy/mysql-community-source.install deleted file mode 100644 index 326c5dfb575e..000000000000 --- a/packaging/deb-wheezy/mysql-community-source.install +++ /dev/null @@ -1,20 +0,0 @@ -# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -../*.dsc usr/src/mysql/ -../*.tar.gz usr/src/mysql/ -# legal -usr/share/doc/mysql-community-source/COPYING -usr/share/doc/mysql-community-source/README diff --git a/packaging/deb-wheezy/mysql-community-source.lintian-overrides b/packaging/deb-wheezy/mysql-community-source.lintian-overrides deleted file mode 100644 index 9ca84e90712c..000000000000 --- a/packaging/deb-wheezy/mysql-community-source.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-community-source: extra-license-file usr/share/doc/mysql-community-source/LICENSE.mysql -mysql-community-source: extra-license-file usr/share/doc/mysql-community-source/COPYING.gz -mysql-community-source: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-wheezy/mysql-community-test.dirs b/packaging/deb-wheezy/mysql-community-test.dirs deleted file mode 100644 index f93ca25bd85b..000000000000 --- a/packaging/deb-wheezy/mysql-community-test.dirs +++ /dev/null @@ -1,16 +0,0 @@ -# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -usr/lib/mysql-test diff --git a/packaging/deb-wheezy/mysql-community-test.install b/packaging/deb-wheezy/mysql-community-test.install deleted file mode 100644 index d5f820dd6fc4..000000000000 --- a/packaging/deb-wheezy/mysql-community-test.install +++ /dev/null @@ -1,20 +0,0 @@ -# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -usr/lib/mysql-test/* -usr/share/man/man1/mysql-test-run.pl.1 -# legal -usr/share/doc/mysql-community-test/COPYING -usr/share/doc/mysql-community-test/README diff --git a/packaging/deb-wheezy/mysql-community-test.links b/packaging/deb-wheezy/mysql-community-test.links deleted file mode 100644 index aedf2db3b736..000000000000 --- a/packaging/deb-wheezy/mysql-community-test.links +++ /dev/null @@ -1,17 +0,0 @@ -# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -usr/lib/mysql-test/mysql-test-run.pl usr/lib/mysql-test/mysql-test-run -usr/lib/mysql-test/mysql-test-run.pl usr/lib/mysql-test/mtr diff --git a/packaging/deb-wheezy/mysql-community-test.lintian-overrides b/packaging/deb-wheezy/mysql-community-test.lintian-overrides deleted file mode 100644 index ff273bbe9135..000000000000 --- a/packaging/deb-wheezy/mysql-community-test.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-community-test: extra-license-file usr/share/doc/mysql-community-test/LICENSE.mysql -mysql-community-test: extra-license-file usr/share/doc/mysql-community-test/COPYING.gz -mysql-community-test: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-wheezy/mysql-server.install b/packaging/deb-wheezy/mysql-server.install deleted file mode 100644 index 07f36ef57d80..000000000000 --- a/packaging/deb-wheezy/mysql-server.install +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# legal -usr/share/doc/mysql-server/COPYING -usr/share/doc/mysql-server/README diff --git a/packaging/deb-wheezy/mysql-server.lintian-overrides b/packaging/deb-wheezy/mysql-server.lintian-overrides deleted file mode 100644 index 487709765b02..000000000000 --- a/packaging/deb-wheezy/mysql-server.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-server: extra-license-file usr/share/doc/mysql-server/LICENSE.mysql -mysql-server: extra-license-file usr/share/doc/mysql-server/COPYING.gz -mysql-server: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-wheezy/mysql-testsuite.install b/packaging/deb-wheezy/mysql-testsuite.install deleted file mode 100644 index 6a6e5f505b0f..000000000000 --- a/packaging/deb-wheezy/mysql-testsuite.install +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# legal -usr/share/doc/mysql-testsuite/COPYING -usr/share/doc/mysql-testsuite/README diff --git a/packaging/deb-wheezy/mysql-testsuite.lintian-overrides b/packaging/deb-wheezy/mysql-testsuite.lintian-overrides deleted file mode 100644 index 37488fe69b72..000000000000 --- a/packaging/deb-wheezy/mysql-testsuite.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-testsuite: extra-license-file usr/share/doc/mysql-testsuite/LICENSE.mysql -mysql-testsuite: extra-license-file usr/share/doc/mysql-testsuite/COPYING.gz -mysql-testsuite: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-wheezy/patches/fix-man-page-links.patch b/packaging/deb-wheezy/patches/fix-man-page-links.patch deleted file mode 100644 index 004ccdf77d03..000000000000 --- a/packaging/deb-wheezy/patches/fix-man-page-links.patch +++ /dev/null @@ -1,14 +0,0 @@ -From: Akhil Mohan -Description: Fix path in man page link. -Bug: http://bugs.mysql.com/bug.php?id=70952 - ---- a/man/mysql_client_test_embedded.1 2013-11-08 19:00:22.000000000 +0530 -+++ b/man/mysql_client_test_embedded.1 2013-11-14 19:29:56.768315219 +0530 -@@ -1 +1 @@ --.so man-gpl-tmp2/mysql_client_test.1 -+.so man1/mysql_client_test.1 ---- a/man/mysqltest_embedded.1 2013-11-08 19:00:22.000000000 +0530 -+++ b/man/mysqltest_embedded.1 2013-11-14 19:31:19.079280675 +0530 -@@ -1 +1 @@ --.so man-gpl-tmp2/mysqltest.1 -+.so man1/mysqltest.1 diff --git a/packaging/deb-wheezy/patches/fix-mtr-search-paths.patch b/packaging/deb-wheezy/patches/fix-mtr-search-paths.patch deleted file mode 100644 index 8a27a091e6ce..000000000000 --- a/packaging/deb-wheezy/patches/fix-mtr-search-paths.patch +++ /dev/null @@ -1,13 +0,0 @@ -From: Akhil Mohan -Description: Adding extra search path for testsuite. - ---- a/mysql-test/lib/mtr_cases.pm 2014-02-24 13:14:37 +0530 -+++ b/mysql-test/lib/mtr_cases.pm 2014-07-02 11:46:24 +0530 -@@ -288,6 +288,7 @@ - { - $suitedir= my_find_dir($::basedir, - ["share/mysql-test/suite", -+ "lib/mysql-test/suite", - "mysql-test/suite", - "internal/mysql-test/suite", - "mysql-test", diff --git a/packaging/deb-wheezy/patches/fix-mysql_install_db.patch b/packaging/deb-wheezy/patches/fix-mysql_install_db.patch deleted file mode 100644 index 41311b2c8f9e..000000000000 --- a/packaging/deb-wheezy/patches/fix-mysql_install_db.patch +++ /dev/null @@ -1,43 +0,0 @@ -From: Terje Røsten -Description: Maintains the pending --skip-my-cnf option in mainline -Bug: - -diff --git a/scripts/mysql_install_db.pl.in b/scripts/mysql_install_db.pl.in -index 440a977..7d068fc 100644 ---- a/scripts/mysql_install_db.pl.in -+++ b/scripts/mysql_install_db.pl.in -@@ -113,6 +113,7 @@ EOF2 - print <{srcdir} and $opt->{basedir} ) - { - error($opt,"Specify either --basedir or --srcdir, not both"); - } --if ( $opt->{'keep-my-cnf'} ) -+if ( $opt->{rpm} || $opt->{'keep-my-cnf'} ) - { - $keep_my_cnf = 1; - } -@@ -664,7 +665,7 @@ if ( $opt->{'skip-name-resolve'} and $resolved and $resolved =~ /\s/ ) - } - - # ---------------------------------------------------------------------- --# Create database directories mysql & test -+# Create database directory mysql - # ---------------------------------------------------------------------- - - # FIXME The shell variant uses "mkdir -p": -@@ -697,7 +698,7 @@ if ($opt_user) - } - } - --foreach my $dir ( $opt->{ldata}, "$opt->{ldata}/mysql", "$opt->{ldata}/test" ) -+foreach my $dir ( $opt->{ldata}, "$opt->{ldata}/mysql") - { - mkdir($dir, 0700) unless -d $dir; - if ($opt_user and -w "/") diff --git a/packaging/deb-wheezy/patches/series b/packaging/deb-wheezy/patches/series deleted file mode 100644 index 31af2dc779ba..000000000000 --- a/packaging/deb-wheezy/patches/series +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -#fix-man-page-links.patch -fix-mysql_install_db.patch -fix-mtr-search-paths.patch diff --git a/packaging/deb-wheezy/rules b/packaging/deb-wheezy/rules deleted file mode 100755 index 386ee62c3d35..000000000000 --- a/packaging/deb-wheezy/rules +++ /dev/null @@ -1,132 +0,0 @@ -#!/usr/bin/make -f - -# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -%: - dh $@ - -export DH_VERBOSE=1 -export CFLAGS= -export CXXFLAGS= - -override_dh_auto_configure: - @echo "RULES.$@" - cmake . \ - -DBUILD_CONFIG=mysql_release \ - -DCMAKE_INSTALL_PREFIX=/usr \ - -DINSTALL_DOCDIR=share/mysql/docs \ - -DINSTALL_DOCREADMEDIR=share/mysql \ - -DINSTALL_INCLUDEDIR=include/mysql \ - -DINSTALL_INFODIR=share/mysql/docs \ - -DINSTALL_LIBDIR=lib/$(DEB_HOST_MULTIARCH) \ - -DINSTALL_MANDIR=share/man \ - -DINSTALL_MYSQLSHAREDIR=share/mysql \ - -DINSTALL_MYSQLTESTDIR=lib/mysql-test \ - -DINSTALL_PLUGINDIR=lib/mysql/plugin \ - -DINSTALL_SBINDIR=sbin \ - -DINSTALL_SCRIPTDIR=bin \ - -DINSTALL_SQLBENCHDIR=lib/mysql \ - -DINSTALL_SUPPORTFILESDIR=share/mysql \ - -DMYSQL_DATADIR=/var/lib/mysql \ - -DSYSCONFDIR=/etc/mysql \ - -DMYSQL_UNIX_ADDR=/var/run/mysqld/mysqld.sock \ - -DWITH_SSL=bundled \ - -DWITH_ZLIB=system \ - -DWITH_EXTRA_CHARSETS=all \ - -DWITH_INNODB_MEMCACHED=1 \ - -DCOMPILATION_COMMENT="MySQL Community Server (GPL)" \ - -DINSTALL_LAYOUT=DEB - - cat CMakeCache.txt - touch $@ - -override_dh_auto_build: - @echo "RULES.$@" - $(MAKE) -j8 VERBOSE=1 - touch $@ - -override_dh_auto_test: - @echo "RULES.$@" - echo "No tests run because test 9: pfs_connect_attr is failing unreasonably" - touch $@ - -override_dh_auto_install: - - @echo "RULES.$@" - # complete install first - $(MAKE) install DESTDIR=debian/tmp - # remove all redundant files and links - rm debian/tmp/usr/lib/*/*_r* - rm debian/tmp/usr/lib/mysql-test/cmake_install.cmake - rm debian/tmp/usr/lib/mysql-test/CTestTestfile.cmake - rm debian/tmp/usr/lib/mysql-test/Makefile - # add missing man pages - install -g root -o root -m 0644 debian/extra/mysql_embedded.1 debian/tmp/usr/share/man/man1 - # add MySQL Server configuration file my.cnf to mysql-common package - install -g root -o root -m 0644 -D debian/extra/my.cnf debian/tmp/etc/mysql/my.cnf - # add MySQL Server debug binary and library to package - install -g root -o root -m 0755 debian/extra/server-binary debian/tmp/usr/sbin/mysqld-debug - install -g root -o root -m 0755 debian/extra/embedded-server debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/libmysqld-debug.a - # add debug plugin libraries to package - install -g root -o root -m 0755 -d debian/tmp/usr/lib/mysql/plugin/debug - for file in debian/extra/*-plugin; do NEW=`echo $$file | cut -d- -f1`; mv $$file $$NEW.so; done - install -g root -o root -m 0755 debian/extra/*.so debian/tmp/usr/lib/mysql/plugin/debug - install -g root -o root -m 0755 debian/extra/daemon_example.ini debian/tmp/usr/lib/mysql/plugin/debug - # add directory for legal docs - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-server - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-community-server - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-client - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-community-client - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-common - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/libmysqlclient18 - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/libmysqlclient-dev - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/libmysqld-dev - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-community-bench - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-testsuite - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-community-test - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-community-source - # add COPYING file to each package - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-server/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-community-server/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-client/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-community-client/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-common/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/libmysqlclient18/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/libmysqlclient-dev/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/libmysqld-dev/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-community-bench/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-testsuite/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-community-test/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-community-source/COPYING - # add README file to each package - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-server/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-community-server/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-client/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-community-client/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-common/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/libmysqlclient18/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/libmysqlclient-dev/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/libmysqld-dev/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-community-bench/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-testsuite/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-community-test/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-community-source/README - touch $@ - -override_dh_installinit: - @echo "RULES.$@" - dh_installinit --name=mysql -- defaults 19 21 - touch $@ diff --git a/packaging/deb-wheezy/source/format b/packaging/deb-wheezy/source/format deleted file mode 100644 index 163aaf8d82b6..000000000000 --- a/packaging/deb-wheezy/source/format +++ /dev/null @@ -1 +0,0 @@ -3.0 (quilt) diff --git a/packaging/deb-wheezy/source/include-binaries b/packaging/deb-wheezy/source/include-binaries deleted file mode 100644 index adb5f54bb2d2..000000000000 --- a/packaging/deb-wheezy/source/include-binaries +++ /dev/null @@ -1,35 +0,0 @@ -# Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# obscured filename for mysqld-debug, libmysqld-debug.a and debug plugins -debian/extra/server-binary -debian/extra/embedded-server -debian/extra/adt_null-plugin -debian/extra/auth-plugin -debian/extra/auth_socket-plugin -debian/extra/auth_test_plugin-plugin -debian/extra/innodb_engine-plugin -debian/extra/libdaemon_example-plugin -debian/extra/libmemcached-plugin -debian/extra/mypluglib-plugin -debian/extra/mysql_no_login-plugin -debian/extra/qa_auth_client-plugin -debian/extra/qa_auth_interface-plugin -debian/extra/qa_auth_server-plugin -debian/extra/semisync_master-plugin -debian/extra/semisync_slave-plugin -debian/extra/test_udf_services-plugin -debian/extra/validate_password-plugin -debian/extra/connection_control-plugin diff --git a/packaging/deb-wheezy/source/lintian-overrides b/packaging/deb-wheezy/source/lintian-overrides deleted file mode 100644 index 9eefbb7dca0f..000000000000 --- a/packaging/deb-wheezy/source/lintian-overrides +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# We provide our own versioning scheme so this warning is overridden -mysql-community source: changelog-should-mention-nmu -mysql-community source: source-nmu-has-incorrect-version-number diff --git a/packaging/deb-wheezy/watch b/packaging/deb-wheezy/watch deleted file mode 100644 index c45c5e3e89d6..000000000000 --- a/packaging/deb-wheezy/watch +++ /dev/null @@ -1,2 +0,0 @@ -version=3 -http://mysql.mirrors.pair.com/Downloads/MySQL-5.6/mysql-([\d\.]+).tar.gz diff --git a/packaging/deb-wily/changelog b/packaging/deb-wily/changelog deleted file mode 100644 index 5d94ab20d83b..000000000000 --- a/packaging/deb-wily/changelog +++ /dev/null @@ -1,137 +0,0 @@ -mysql-community (5.6.28-1ubuntu15.10) wily; urgency=low - - * New upstream release - - -- Lars Tangvald Thu, 12 Nov 2015 10:34:23 +0100 - -mysql-community (5.6.26-1ubuntu15.04) vivid; urgency=low - - * new upstream release - * mysql-commercial-server now depends on perl, psmisc - mysql-commercial-test now depends on python, libmysqlclient-dev - (Closes: #20893836) - - -- Akhil Mohan Thu, 18 Jun 2015 16:34:10 +0530 - -mysql-community (5.6.25-3ubuntu15.04) vivid; urgency=low - - * new upstream release - * mysql-common now conflicts with - mysql-server-5.6, mysql-server-core-5.6 - mysql-client-5.6, mysql-client-core-5.6 - * mysql-*-server no more provides - mysql-server-5.6, mysql-server-core-5.6 - * mysql-*-client no more provides - mysql-client-5.6, mysql-client-core-5.6 - - -- Akhil Mohan Mon, 15 Jun 2015 16:48:05 +0530 - -mysql-community (5.6.24-3ubuntu15.04) vivid; urgency=low - - * updated Standards-Version to 3.9.6 in d/control - * apparmor profile updated to allow read on all files under /etc/mysql - * added new conf files under d/extra/*.conf - * mysql_plugin moved from client to server pkg - * innochecksum moved from client to server pkg - * server pkg now replaces client pkg - * added systemd service profile and script - * new /etc/mysql/my.cnf management scheme added for Ubuntu 15.04 - as discussed in Dec 2014 for native packaging source - * added dh "--with systemd" for enabling systemd - - -- Akhil Mohan Wed, 27 May 2015 11:35:35 +0530 - -mysql-community (5.6.24-2ubuntu15.04) vivid; urgency=low - - * new upstream release - * forked packaging source from utopic to vivid - - -- Akhil Mohan Wed, 15 Apr 2015 18:52:22 +0530 - -mysql-community (5.6.24-1ubuntu14.10) utopic; urgency=low - - * new upstream release - - -- Akhil Mohan Mon, 16 Feb 2014 15:45:09 +0530 - -mysql-community (5.6.23-1ubuntu14.10) utopic; urgency=low - - * new upstream release - * mysql-community-server now recommends mysql-client - * mysql-community-server now depends on apparmor - * removed template install-test-db; not installed by default - * d/compat incremented to 9 from 8 - * d/control updated to build depend on debhelper 9 - * added d/*.lintian-overrides and d/source/lintian-overrides - * d/rules updated to reflect correct file permissions - - -- Akhil Mohan Wed, 31 Dec 2014 10:51:07 +0530 - -mysql-community (5.6.22-2ubuntu14.10) utopic; urgency=low - - * new upstream release - * mysql-common now replaces mysql-server-{,core-}5.6 - - -- Akhil Mohan Wed, 28 Nov 2014 15:18:07 +0530 - -mysql-community (5.6.22-1ubuntu14.10) utopic; urgency=low - - * new upstream release - * fixed d/*server.postinst to allow dropping test db without - setting root password - * init script will now run my_i_db if data dir is not present or empty - * updated init script to read app armor profile on startup - * forked packaging source from trusty and rebranded for utopic - * updated d/m-c-source.install to pack *.xz packaging source archive - * added more system resources to app armor profile - * dh_apparmor to now run before dh_installinit in d/rules - * libmysqlclient-dev now replaces mysql-client-{,core-}5.6 - - -- Akhil Mohan Wed, 05 Nov 2014 17:04:07 +0530 - -mysql-community (5.6.21-1ubuntu14.04) trusty; urgency=low - - * new upstream release - * updated d/rules to increment -j8 as make option - * updated d/source/include-binaries to add mysql_no_login plugin - * updated CMake option WITH_EXTRA_CHARSETS from complex to all - - -- Akhil Mohan Wed, 20 Aug 2014 19:12:30 +0530 - -mysql-community (5.6.20-1ubuntu14.04) trusty; urgency=low - - * new upstream release - * added fakeroot as build-dep in d/control - * added d/*.dirs for bench, dev and test pkg - * updated d/rules to make compilation verbose - * removed default CFLAGS, CXXFLAGS in d/rules - * added patch for testsuite search paths under d/patches - * modified cmake option for testsuite in d/rules - * updated patch d/fix-mysql_install_db.patch - * enabled two patches in d/patches/series - * removed extra permissions check in d/rules when fixed in source - * modified d/mysql-*-server.postinst to stop removing /usr/my.cnf - * modified d/*-test.* for updated location of testsuite - * updated d/{mysql-*-server.install,rules} to include debug plugins - * updated d/rules to remove storage engine cmake options - * modified data dir permission in d/*server.{pre,post}inst - * updated d/source/include-binaries to add debug plugins - * updated d/rules to rename debug plugins - - -- Akhil Mohan Wed, 02 Jul 2014 17:45:30 +0530 - -mysql-community (5.6.19-1ubuntu14.04) trusty; urgency=low - - * new upstream release - * d/rules updated to rid of files removed from source - * modified path for source tar in source pkg - * obscured actual filenames in d/source/include-binaries - * modified d/rules to handle obscured filenames - - -- Akhil Mohan Mon, 05 May 2014 15:45:10 +0530 - -mysql-community (5.6.17-1ubuntu14.04) trusty; urgency=low - - * new upstream release - - -- Akhil Mohan Fri, 28 Feb 2014 18:06:30 +0530 diff --git a/packaging/deb-wily/compat b/packaging/deb-wily/compat deleted file mode 100644 index ec635144f600..000000000000 --- a/packaging/deb-wily/compat +++ /dev/null @@ -1 +0,0 @@ -9 diff --git a/packaging/deb-wily/control b/packaging/deb-wily/control deleted file mode 100644 index 8bc5ecdf4053..000000000000 --- a/packaging/deb-wily/control +++ /dev/null @@ -1,192 +0,0 @@ -Source: mysql-community -Maintainer: MySQL Release Engineering -Section: database -Priority: optional -Standards-Version: 3.9.6 -Homepage: http://www.mysql.com/ -Build-Depends: debhelper (>= 9.0.0), libaio-dev[linux-any], libncurses5-dev (>= 5.0-6), perl, zlib1g-dev (>= 1:1.1.3-5), po-debconf, psmisc, bison, dh-apparmor, dh-systemd (>= 1.5), lsb-release, cmake, fakeroot, libnuma-dev - -Package: mysql-server -Architecture: any -Depends: mysql-community-server (= ${binary:Version}), ${misc:Depends} -Description: MySQL Server meta package depending on latest version - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This is a meta package that depends on the latest mysql server - package available in the repository. - -Package: mysql-community-server -Architecture: any -Pre-depends: debconf (>= 0.2.17), adduser -Depends: mysql-common (= ${binary:Version}), apparmor, perl, psmisc, - ${shlibs:Depends}, ${misc:Depends} -Recommends: mysql-client (= ${binary:Version}) -Conflicts: mysql, - mysql-server-5.0, mysql-server-core-5.0, - mysql-server-5.1, mysql-server-core-5.1, - mysql-server-5.5, mysql-server-core-5.5, - mysql-server-5.6, mysql-server-core-5.6, - mysql-commercial-server -Replaces: mysql, - mysql-server-5.0, mysql-server-core-5.0, - mysql-server-5.1, mysql-server-core-5.1, - mysql-server-5.5, mysql-server-core-5.5, - mysql-server-5.6, mysql-server-core-5.6, - mysql-commercial-server, - mysql-community-client -Provides: virtual-mysql-server, virtual-mysql-server-core -Description: MySQL Server - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This package includes the MySQL server binary as well as related - utilities to run and administer a MySQL server. - -Package: mysql-client -Architecture: any -Depends: mysql-community-client (= ${binary:Version}), ${misc:Depends} -Description: MySQL Client meta package depending on latest version - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This is a meta package that depends on the latest mysql client - package available in the repository. - -Package: mysql-community-client -Architecture: any -Depends: mysql-common (= ${binary:Version}), - ${shlibs:Depends}, ${misc:Depends} -Conflicts: mysql, - mysql-client-5.0, mysql-client-core-5.0, - mysql-client-5.1, mysql-client-core-5.1, - mysql-client-5.5, mysql-client-core-5.5, - mysql-client-5.6, mysql-client-core-5.6, - mysql-commercial-client -Replaces: mysql, - mysql-client-5.0, mysql-client-core-5.0, - mysql-client-5.1, mysql-client-core-5.1, - mysql-client-5.5, mysql-client-core-5.5, - mysql-client-5.6, mysql-client-core-5.6, - mysql-commercial-client -Provides: virtual-mysql-client, virtual-mysql-client-core -Description: MySQL Client - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This package contains the standard MySQL clients and - administration tools. - -Package: libmysqlclient18 -Architecture: any -Section: libs -Pre-Depends: ${misc:Pre-Depends} -Multi-Arch: same -Depends: mysql-common (= ${binary:Version}), - ${shlibs:Depends}, ${misc:Depends} -Description: MySQL shared client libraries - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This package contains the shared libraries for MySQL client - applications. - -Package: mysql-common -Architecture: any -Pre-depends: debconf (>= 0.2.17), ${misc:Pre-Depends} -Multi-Arch: foreign -Depends: ${shlibs:Depends}, ${misc:Depends} -Conflicts: mysql, mysql-server-5.6, mysql-server-core-5.6, - mysql-client-5.6, mysql-client-core-5.6, - mariadb-server-5.5, percona-xtradb-cluster-common-5.5 -Replaces: mysql, mysql-server-5.5, mysql-server-core-5.5, libmysqlclient-dev, - mysql-server-5.6, mysql-server-core-5.6, - mariadb-server-5.5, percona-xtradb-cluster-common-5.5 -Provides: mysql-common, mysql-common-5.6 -Description: MySQL Common - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This package contains common files needed by MySQL client - library, MySQL database server, and MySQL embedded server. - -Package: libmysqlclient-dev -Architecture: any -Section: libdevel -Depends: libmysqlclient18 (= ${binary:Version}), - ${shlibs:Depends}, ${misc:Depends} -Replaces: mysql-client-5.6, mysql-client-core-5.6 -Description: MySQL development headers - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This package contains the development header files necessary - to develop MySQL client applications. - -Package: libmysqld-dev -Architecture: any -Section: libdevel -Depends: libmysqlclient-dev (= ${binary:Version}), - ${shlibs:Depends}, ${misc:Depends} -Description: MySQL embedded server library - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This package contains the MySQL server as an embedded library. - -Package: mysql-testsuite -Architecture: any -Depends: mysql-community-test (= ${binary:Version}), ${misc:Depends} -Description: MySQL Testsuite meta package depending on latest version - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This is a meta package that depends on the latest mysql test - package available in the repository. - -Package: mysql-community-test -Architecture: any -Depends: mysql-community-server (= ${binary:Version}), - mysql-community-client (= ${binary:Version}), python, - libmysqlclient-dev, ${shlibs:Depends}, ${misc:Depends} -Conflicts: mysql, - mysql-testsuite-5.0, mysql-testsuite-5.1, mysql-testsuite-5.5, - mysql-testsuite-5.6, mysql-commercial-test -Description: MySQL Test Run MTR - The MySQL testsuite - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This package contains the MySQL regression test suite for MySQL - database server. - -Package: mysql-community-bench -Architecture: any -Depends: mysql-community-server (= ${binary:Version}), - ${shlibs:Depends}, ${misc:Depends} -Conflicts: mysql, mysql-commercial-bench -Description: MySQL Bench - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. - -Package: mysql-community-source -Architecture: any -Depends: ${misc:Depends}, ${shlibs:Depends} -Description: MySQL source - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. diff --git a/packaging/deb-wily/copyright b/packaging/deb-wily/copyright deleted file mode 100644 index 2c31f2400ae5..000000000000 --- a/packaging/deb-wily/copyright +++ /dev/null @@ -1,41 +0,0 @@ -Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ -Upstream-Name: MySQL Server 5.6 -Upstream-Contact: MySQL Release Engineering -Source: http://dev.mysql.com/ - -Copyright: 2000, 2014, 2015, Oracle and/or its affiliates. All rights reserved. -License: - This is a release of MySQL, a dual-license SQL database server. - For the avoidance of doubt, this particular copy of the software - is released under the version 2 of the GNU General Public License. - MySQL is brought to you by Oracle. - . - MySQL FOSS License Exception - We want free and open source software applications under certain - licenses to be able to use specified GPL-licensed MySQL client - libraries despite the fact that not all such FOSS licenses are - compatible with version 2 of the GNU General Public License. - Therefore there are special exceptions to the terms and conditions - of the GPLv2 as applied to these client libraries, which are - identified and described in more detail in the FOSS License - Exception at - . - . - This distribution may include materials developed by third - parties. For license and attribution notices for these - materials, please refer to the documentation that accompanies - this distribution (see the "Licenses for Third-Party Components" - appendix) or view the online documentation at - . - . - GPLv2 Disclaimer - For the avoidance of doubt, except that if any license choice - other than GPL or LGPL is available it will apply instead, - Oracle elects to use only the General Public License version 2 - (GPLv2) at this time for any software where a choice of GPL - license versions is made available with the language indicating - that GPLv2 or any later version may be used, or where a choice - . - The full text of the GNU General Public License version 2 can - be found in the file - `/usr/share/mysql/doc/COPYING'. diff --git a/packaging/deb-wily/extra/apparmor-profile b/packaging/deb-wily/extra/apparmor-profile deleted file mode 100644 index 5cae3bfa0f80..000000000000 --- a/packaging/deb-wily/extra/apparmor-profile +++ /dev/null @@ -1,47 +0,0 @@ -# vim:syntax=apparmor -# Last Modified: Fri Feb 28 18:06:30 2014 -#include - -/usr/sbin/mysqld { - #include - #include - #include - -# Allow system resource access - /sys/devices/system/cpu/ r, - capability sys_resource, - capability dac_override, - capability setuid, - capability setgid, - -# Allow config access - /etc/mysql/** r, - -# Allow pid and socket file access - /run/mysqld/mysqld.pid rw, - /run/mysqld/mysqld.sock rw, - -# Allow read/ write to /tmp - /tmp/ r, - /tmp/* rw, - -# Allow execution of server binary - /usr/sbin/mysqld mr, - /usr/sbin/mysqld-debug mr, - -# Allow plugin access - /usr/lib/mysql/plugin/ r, - /usr/lib/mysql/plugin/*.so* mr, - -# Allow error msg and charset access - /usr/share/mysql/ r, - /usr/share/mysql/** r, - -# Allow data dir access - /var/lib/mysql/ r, - /var/lib/mysql/** rwk, - -# Allow log file access - /var/log/mysql/ r, - /var/log/mysql/** rw, -} diff --git a/packaging/deb-wily/extra/my.cnf.fallback b/packaging/deb-wily/extra/my.cnf.fallback deleted file mode 100644 index a7525caea5b3..000000000000 --- a/packaging/deb-wily/extra/my.cnf.fallback +++ /dev/null @@ -1,25 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# -# The MySQL Commercial Server configuration file. -# -# For explanations see -# http://dev.mysql.com/doc/mysql/en/server-system-variables.html - -# * IMPORTANT: Additional settings that can override those from this file! -# The files must end with '.cnf', otherwise they'll be ignored. -# -!includedir /etc/mysql/conf.d/ diff --git a/packaging/deb-wily/extra/mysql-systemd-start b/packaging/deb-wily/extra/mysql-systemd-start deleted file mode 100644 index f4aa9c97fc06..000000000000 --- a/packaging/deb-wily/extra/mysql-systemd-start +++ /dev/null @@ -1,84 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Scripts to run by MySQL systemd service -# -# Needed argument: pre | post -# -# pre mode : try to perform sanity check for configuration, log, data -# post mode : ping server until answer is received - -pinger () { - while /bin/true ; do - sleep 1 - mysqladmin ping >/dev/null 2>&1 && break - done -} - -sanity () { - MYSQLRUN=/var/run/mysqld - MYSQLDATA=/var/lib/mysql - MYSQLLOG=/var/log/mysql - - if [ ! -d ${MYSQLDATA} -a ! -L ${MYSQLDATA} ]; - then - mkdir ${MYSQLDATA} - chown mysql:mysql ${MYSQLDATA} - chmod 750 ${MYSQLDATA} - fi - - if [ ! -d "${MYSQLDATA}/mysql" -a ! -L "${MYSQLDATA}/mysql" ]; - then - mkdir ${MYSQLDATA}/mysql - chown mysql:mysql ${MYSQLDATA}/mysql - chmod 750 ${MYSQLDATA}/mysql - fi - - if [ ! "$(ls -A ${MYSQLDATA}/mysql)" ]; - then - mysql_install_db --user=mysql > /dev/null - fi - - if [ ! -d ${MYSQLLOG} -a ! -L ${MYSQLLOG} ]; - then - mkdir ${MYSQLLOG} - chown mysql:adm ${MYSQLLOG} - chmod 750 ${MYSQLLOG} - touch ${MYSQLLOG}/error.log - chmod 640 ${MYSQLLOG}/error.log - chown mysql:adm ${MYSQLLOG}/error.log - fi - - if [ ! -d "${MYSQLRUN}" -a ! -L "${MYSQLRUN}" ]; - then - mkdir ${MYSQLRUN} - chown mysql:mysql ${MYSQLRUN} - chmod 755 ${MYSQLRUN} - fi - - /lib/init/apparmor-profile-load usr.sbin.mysqld - - if [ ! -r /etc/mysql/my.cnf ]; then - echo "MySQL configuration not found at /etc/mysql/my.cnf. Please install one using update-alternatives." - exit 1 - fi -} - -case $1 in - "pre") sanity ;; - "post") pinger ;; -esac diff --git a/packaging/deb-wily/extra/mysql.cnf b/packaging/deb-wily/extra/mysql.cnf deleted file mode 100644 index 8fa01386db6c..000000000000 --- a/packaging/deb-wily/extra/mysql.cnf +++ /dev/null @@ -1,26 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# -# The MySQL Community Server configuration file. -# -# For explanations see -# http://dev.mysql.com/doc/mysql/en/server-system-variables.html - -# * IMPORTANT: Additional settings that can override those from this file! -# The files must end with '.cnf', otherwise they'll be ignored. -# -!includedir /etc/mysql/conf.d/ -!includedir /etc/mysql/mysql.conf.d/ diff --git a/packaging/deb-wily/extra/mysql.conf.cnf b/packaging/deb-wily/extra/mysql.conf.cnf deleted file mode 100644 index a201d7253bda..000000000000 --- a/packaging/deb-wily/extra/mysql.conf.cnf +++ /dev/null @@ -1,22 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# -# The MySQL Commercial Client configuration file. -# -# For explanations see -# http://dev.mysql.com/doc/mysql/en/server-system-variables.html - -[mysql] diff --git a/packaging/deb-wily/extra/mysql_embedded.1 b/packaging/deb-wily/extra/mysql_embedded.1 deleted file mode 100644 index 735c4e05ae07..000000000000 --- a/packaging/deb-wily/extra/mysql_embedded.1 +++ /dev/null @@ -1 +0,0 @@ -.so man1/mysql.1 diff --git a/packaging/deb-wily/extra/mysqld.cnf b/packaging/deb-wily/extra/mysqld.cnf deleted file mode 100644 index 95ae6d87761c..000000000000 --- a/packaging/deb-wily/extra/mysqld.cnf +++ /dev/null @@ -1,48 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# -# The MySQL Commercial Server configuration file. -# -# For explanations see -# http://dev.mysql.com/doc/mysql/en/server-system-variables.html - -[mysqld_safe] -pid-file = /var/run/mysqld/mysqld.pid -socket = /var/run/mysqld/mysqld.sock -nice = 0 - -[mysqld] -user = mysql -pid-file = /var/run/mysqld/mysqld.pid -socket = /var/run/mysqld/mysqld.sock -port = 3306 -basedir = /usr -datadir = /var/lib/mysql -tmpdir = /tmp -lc-messages-dir = /usr/share/mysql -explicit_defaults_for_timestamp - -# Instead of skip-networking the default is now to listen only on -# localhost which is more compatible and is not less secure. -bind-address = 127.0.0.1 - -log-error = /var/log/mysql/error.log - -# Recommended in standard MySQL setup -sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES - -# Disabling symbolic-links is recommended to prevent assorted security risks -symbolic-links=0 diff --git a/packaging/deb-wily/libmysqlclient-dev.install b/packaging/deb-wily/libmysqlclient-dev.install deleted file mode 100644 index e7e98c156c39..000000000000 --- a/packaging/deb-wily/libmysqlclient-dev.install +++ /dev/null @@ -1,29 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -usr/include/mysql/*.h -usr/include/mysql/mysql/*.h -usr/include/mysql/mysql/*.h.pp -usr/include/mysql/mysql/psi/*.h -usr/lib/*/libmysqlclient.a -usr/lib/*/libmysqlclient.so -usr/lib/*/libmysqlservices.a -usr/bin/mysql_config -usr/bin/mysql_config_editor -usr/share/man/man1/mysql_config.1 -usr/share/man/man1/mysql_config_editor.1 -# legal -usr/share/doc/libmysqlclient-dev/COPYING -usr/share/doc/libmysqlclient-dev/README diff --git a/packaging/deb-wily/libmysqlclient-dev.lintian-overrides b/packaging/deb-wily/libmysqlclient-dev.lintian-overrides deleted file mode 100644 index 09960eb27301..000000000000 --- a/packaging/deb-wily/libmysqlclient-dev.lintian-overrides +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -libmysqlclient-dev: extra-license-file usr/share/doc/libmysqlclient-dev/LICENSE.mysql -libmysqlclient-dev: extra-license-file usr/share/doc/libmysqlclient-dev/COPYING.gz -libmysqlclient-dev: copyright-should-refer-to-common-license-file-for-lgpl -# Due to static linking this cannot be avoided and hence being overridden -libmysqlclient-dev: embedded-library diff --git a/packaging/deb-wily/libmysqlclient18.install b/packaging/deb-wily/libmysqlclient18.install deleted file mode 100644 index fe6aa56ce62c..000000000000 --- a/packaging/deb-wily/libmysqlclient18.install +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -usr/lib/*/libmysqlclient.so.* -# legal -usr/share/doc/libmysqlclient18/COPYING -usr/share/doc/libmysqlclient18/README diff --git a/packaging/deb-wily/libmysqlclient18.lintian-overrides b/packaging/deb-wily/libmysqlclient18.lintian-overrides deleted file mode 100644 index 1f26511a13d0..000000000000 --- a/packaging/deb-wily/libmysqlclient18.lintian-overrides +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -libmysqlclient18: extra-license-file usr/share/doc/libmysqlclient18/LICENSE.mysql -libmysqlclient18: extra-license-file usr/share/doc/libmysqlclient18/COPYING.gz -libmysqlclient18: copyright-should-refer-to-common-license-file-for-lgpl -# Due to static linking this cannot be avoided and hence being overridden -libmysqlclient18: embedded-library diff --git a/packaging/deb-wily/libmysqld-dev.install b/packaging/deb-wily/libmysqld-dev.install deleted file mode 100644 index 923f826ae5fe..000000000000 --- a/packaging/deb-wily/libmysqld-dev.install +++ /dev/null @@ -1,20 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -usr/lib/*/libmysqld.a -usr/lib/*/libmysqld-debug.a -# legal -usr/share/doc/libmysqld-dev/COPYING -usr/share/doc/libmysqld-dev/README diff --git a/packaging/deb-wily/libmysqld-dev.lintian-overrides b/packaging/deb-wily/libmysqld-dev.lintian-overrides deleted file mode 100644 index 35caaeca0121..000000000000 --- a/packaging/deb-wily/libmysqld-dev.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -libmysqld-dev: extra-license-file usr/share/doc/libmysqld-dev/LICENSE.mysql -libmysqld-dev: extra-license-file usr/share/doc/libmysqld-dev/COPYING.gz -libmysqld-dev: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-wily/mysql-client.install b/packaging/deb-wily/mysql-client.install deleted file mode 100644 index 13b877e7dafd..000000000000 --- a/packaging/deb-wily/mysql-client.install +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# legal -usr/share/doc/mysql-client/COPYING -usr/share/doc/mysql-client/README diff --git a/packaging/deb-wily/mysql-client.lintian-overrides b/packaging/deb-wily/mysql-client.lintian-overrides deleted file mode 100644 index 5c4891c9190f..000000000000 --- a/packaging/deb-wily/mysql-client.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-client: extra-license-file usr/share/doc/mysql-client/LICENSE.mysql -mysql-client: extra-license-file usr/share/doc/mysql-client/COPYING.gz -mysql-client: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-wily/mysql-common.dirs b/packaging/deb-wily/mysql-common.dirs deleted file mode 100644 index 69265ef08550..000000000000 --- a/packaging/deb-wily/mysql-common.dirs +++ /dev/null @@ -1,16 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -etc/mysql/conf.d diff --git a/packaging/deb-wily/mysql-common.install b/packaging/deb-wily/mysql-common.install deleted file mode 100644 index 8e84e73575cc..000000000000 --- a/packaging/deb-wily/mysql-common.install +++ /dev/null @@ -1,32 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# configuration file and script -debian/extra/my.cnf.fallback etc/mysql/ -debian/extra/mysql.conf.cnf etc/mysql/conf.d/mysql.cnf - -usr/share/aclocal/mysql.m4 -usr/share/mysql/docs/INFO_SRC -usr/share/mysql/docs/INFO_BIN -usr/share/mysql/docs/ChangeLog -# localized error msgs -usr/share/mysql/*/errmsg.sys -usr/share/mysql/errmsg-utf8.txt -# charsets -usr/share/mysql/charsets/*.xml -usr/share/mysql/charsets/README -# legal -usr/share/doc/mysql-common/COPYING -usr/share/doc/mysql-common/README diff --git a/packaging/deb-wily/mysql-common.lintian-overrides b/packaging/deb-wily/mysql-common.lintian-overrides deleted file mode 100644 index 70ddcdf63713..000000000000 --- a/packaging/deb-wily/mysql-common.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-common: extra-license-file usr/share/doc/mysql-common/LICENSE.mysql -mysql-common: extra-license-file usr/share/doc/mysql-common/COPYING.gz -mysql-common: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-wily/mysql-common.postinst b/packaging/deb-wily/mysql-common.postinst deleted file mode 100644 index f53bfaa15616..000000000000 --- a/packaging/deb-wily/mysql-common.postinst +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/sh - -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -set -e - -if [ "$1" = "configure" ]; then - # Low priority fallback for client use when no server is installed. - update-alternatives --install /etc/mysql/my.cnf my.cnf /etc/mysql/my.cnf.fallback 100 -fi - -#DEBHELPER# diff --git a/packaging/deb-wily/mysql-common.postrm b/packaging/deb-wily/mysql-common.postrm deleted file mode 100644 index 4698a986b333..000000000000 --- a/packaging/deb-wily/mysql-common.postrm +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -set -e - -if [ "$1" = "purge" ]; then - rmdir /etc/mysql 2>/dev/null || true - update-alternatives --remove-all my.cnf -fi - -#DEBHELPER# diff --git a/packaging/deb-wily/mysql-community-bench.install b/packaging/deb-wily/mysql-community-bench.install deleted file mode 100644 index 065124bd6933..000000000000 --- a/packaging/deb-wily/mysql-community-bench.install +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -usr/lib/mysql/sql-bench/* -# legal -usr/share/doc/mysql-community-bench/COPYING -usr/share/doc/mysql-community-bench/README diff --git a/packaging/deb-wily/mysql-community-bench.lintian-overrides b/packaging/deb-wily/mysql-community-bench.lintian-overrides deleted file mode 100644 index 04df14ea0469..000000000000 --- a/packaging/deb-wily/mysql-community-bench.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-community-bench: extra-license-file usr/share/doc/mysql-community-bench/LICENSE.mysql -mysql-community-bench: extra-license-file usr/share/doc/mysql-community-bench/COPYING.gz -mysql-community-bench: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-wily/mysql-community-client.install b/packaging/deb-wily/mysql-community-client.install deleted file mode 100644 index aa4e6128e760..000000000000 --- a/packaging/deb-wily/mysql-community-client.install +++ /dev/null @@ -1,56 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# binaries -usr/bin/myisam_ftdump -usr/bin/mysql -usr/bin/mysql_embedded -usr/bin/mysqlaccess -usr/bin/mysqlaccess.conf -usr/bin/mysqladmin -usr/bin/mysqlbug -usr/bin/mysqlcheck -usr/bin/mysql_client_test -usr/bin/mysql_client_test_embedded -usr/bin/mysqldump -usr/bin/mysqldumpslow -usr/bin/mysql_find_rows -usr/bin/mysql_fix_extensions -usr/bin/mysqlimport -usr/bin/mysqlshow -usr/bin/mysqlslap -usr/bin/mysql_waitpid -# man pages -usr/share/man/man1/myisam_ftdump.1 -usr/share/man/man1/mysql.1 -usr/share/man/man1/mysql_embedded.1 -usr/share/man/man1/mysqlaccess.1 -usr/share/man/man1/mysqladmin.1 -usr/share/man/man1/mysqlbug.1 -usr/share/man/man1/mysqlcheck.1 -usr/share/man/man1/mysql_client_test.1 -usr/share/man/man1/mysql_client_test_embedded.1 -usr/share/man/man1/mysqldump.1 -usr/share/man/man1/mysqldumpslow.1 -usr/share/man/man1/mysql_find_rows.1 -usr/share/man/man1/mysql_fix_extensions.1 -usr/share/man/man1/mysqlimport.1 -usr/share/man/man1/mysqlman.1 -usr/share/man/man1/mysqlshow.1 -usr/share/man/man1/mysqlslap.1 -usr/share/man/man1/mysql_waitpid.1 -# legal -usr/share/doc/mysql-community-client/COPYING -usr/share/doc/mysql-community-client/README diff --git a/packaging/deb-wily/mysql-community-client.lintian-overrides b/packaging/deb-wily/mysql-community-client.lintian-overrides deleted file mode 100644 index 589293560ee7..000000000000 --- a/packaging/deb-wily/mysql-community-client.lintian-overrides +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-community-client: extra-license-file usr/share/doc/mysql-community-client/LICENSE.mysql -mysql-community-client: extra-license-file usr/share/doc/mysql-community-clienti/COPYING.gz -mysql-community-client: copyright-should-refer-to-common-license-file-for-lgpl -# Due to static linking this cannot be avoided and hence being overridden -mysql-community-client: embedded-library diff --git a/packaging/deb-wily/mysql-community-server.config b/packaging/deb-wily/mysql-community-server.config deleted file mode 100755 index ceb3373350a0..000000000000 --- a/packaging/deb-wily/mysql-community-server.config +++ /dev/null @@ -1,88 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -. /usr/share/debconf/confmodule - -if [ "$1" = "configure" ] && [ -z "$2" ]; -then - - set -e - - PKG_LIST=mysql-server-5.5:mysql-server-5.6:mysql-community-server:mysql-commercial-server - INSTALLED_PKG=none - MYSQLDATA=/var/lib/mysql - - IFS_BACKUP=${IFS} - IFS=":" - for PKG in ${PKG_LIST}; - do - STATUS=$(dpkg -s ${PKG} 2> /dev/null | grep Status: | cut -d' ' -f4) - if [ "${STATUS}" = "installed" ]; - then - INSTALLED_PKG=${PKG} - break - fi - done - IFS=${IFS_BACKUP} - - if [ "${INSTALLED_PKG}" = "none" ]; - then - if [ -d ${MYSQLDATA} -o -L ${MYSQLDATA} ]; - then - db_input high mysql-community-server/data-dir || true - else - db_fset mysql-community-server/data-dir seen true - fi - - while :; do - PASSWD="" - db_input high mysql-community-server/root-pass || true - db_go - - db_get mysql-community-server/root-pass - if [ -z "${RET}" ]; - then - db_fset mysql-community-server/root-pass seen true - db_fset mysql-community-server/re-root-pass seen true - break - fi - PASSWD="${RET}" - - db_input high mysql-community-server/re-root-pass || true - db_go - - db_get mysql-community-server/re-root-pass - if [ "${RET}" == "${PASSWD}" ]; - then - PASSWD="" - break - fi - - db_fset mysql-community-server/root-pass-mismatch seen false - db_input critical mysql-community-server/root-pass-mismatch - db_set mysql-community-server/root-pass "" - db_set mysql-community-server/re-root-pass "" - done - - else - db_fset mysql-community-server/data-dir seen true - db_fset mysql-community-server/root-pass seen true - db_fset mysql-community-server/re-root-pass seen true - fi - - set +e -fi diff --git a/packaging/deb-wily/mysql-community-server.dirs b/packaging/deb-wily/mysql-community-server.dirs deleted file mode 100644 index 95711c411ee3..000000000000 --- a/packaging/deb-wily/mysql-community-server.dirs +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -etc/mysql/mysql.conf.d -etc/init.d -usr/lib/mysql -usr/lib/mysql/plugin diff --git a/packaging/deb-wily/mysql-community-server.install b/packaging/deb-wily/mysql-community-server.install deleted file mode 100644 index 229a81604b98..000000000000 --- a/packaging/deb-wily/mysql-community-server.install +++ /dev/null @@ -1,94 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# binaries -usr/bin/innochecksum -usr/bin/msql2mysql -usr/bin/myisamchk -usr/bin/myisamlog -usr/bin/myisampack -usr/bin/my_print_defaults -usr/bin/mysqlbinlog -usr/bin/mysql_convert_table_format -usr/bin/mysqld_multi -usr/bin/mysqld_safe -usr/bin/mysqlhotcopy -usr/bin/mysql_install_db -usr/bin/mysql_plugin -usr/bin/mysql_secure_installation -usr/bin/mysql_setpermission -usr/bin/mysqltest -usr/bin/mysqltest_embedded -usr/bin/mysql_tzinfo_to_sql -usr/bin/mysql_upgrade -usr/bin/mysql_zap -usr/bin/perror -usr/bin/replace -usr/bin/resolveip -usr/bin/resolve_stack_dump -usr/sbin/mysqld -# debug binary -usr/sbin/mysqld-debug -# man pages -usr/share/man/man1/innochecksum.1 -usr/share/man/man1/comp_err.1 -usr/share/man/man1/msql2mysql.1 -usr/share/man/man1/myisamchk.1 -usr/share/man/man1/myisamlog.1 -usr/share/man/man1/myisampack.1 -usr/share/man/man1/my_print_defaults.1 -usr/share/man/man1/mysqlbinlog.1 -usr/share/man/man1/mysql_convert_table_format.1 -usr/share/man/man1/mysqld_multi.1 -usr/share/man/man1/mysqld_safe.1 -usr/share/man/man1/mysqlhotcopy.1 -usr/share/man/man1/mysql_install_db.1 -usr/share/man/man1/mysql_plugin.1 -usr/share/man/man1/mysql_secure_installation.1 -usr/share/man/man1/mysql.server.1 -usr/share/man/man1/mysql_setpermission.1 -usr/share/man/man1/mysql-stress-test.pl.1 -usr/share/man/man1/mysqltest.1 -usr/share/man/man1/mysqltest_embedded.1 -usr/share/man/man1/mysql_tzinfo_to_sql.1 -usr/share/man/man1/mysql_upgrade.1 -usr/share/man/man1/mysql_zap.1 -usr/share/man/man1/perror.1 -usr/share/man/man1/replace.1 -usr/share/man/man1/resolveip.1 -usr/share/man/man1/resolve_stack_dump.1 -usr/share/man/man8/mysqld.8 -# confguration files -debian/extra/mysql.cnf etc/mysql/ -debian/extra/mysqld.cnf etc/mysql/mysql.conf.d/ -# app armor profile -etc/apparmor.d/usr.sbin.mysqld -# SQL files -usr/share/mysql/*.sql -# plugins -usr/lib/mysql/plugin/*.so -usr/lib/mysql/plugin/debug/*.so -usr/lib/mysql/plugin/daemon_example.ini -usr/lib/mysql/plugin/debug/daemon_example.ini -# support files -usr/share/mysql/mysqld_multi.server -usr/share/mysql/magic -usr/share/mysql/mysql-log-rotate -usr/share/mysql/mysql-systemd-start -usr/share/mysql/my-default.cnf -usr/share/mysql/dictionary.txt -# legal -usr/share/doc/mysql-community-server/COPYING -usr/share/doc/mysql-community-server/README diff --git a/packaging/deb-wily/mysql-community-server.lintian-overrides b/packaging/deb-wily/mysql-community-server.lintian-overrides deleted file mode 100644 index 08b386543cbc..000000000000 --- a/packaging/deb-wily/mysql-community-server.lintian-overrides +++ /dev/null @@ -1,23 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-community-server: extra-license-file usr/share/doc/mysql-community-server/LICENSE.mysql -mysql-community-server: extra-license-file usr/share/doc/mysql-community-server/COPYING.gz -mysql-community-server: copyright-should-refer-to-common-license-file-for-lgpl -# Due to static linking this cannot be avoided and hence being overridden -mysql-community-server: embedded-library -# Since we ship debug plugins so this error is overridden -mysql-community-server: unstripped-binary-or-object usr/lib/mysql/plugin/debug/* diff --git a/packaging/deb-wily/mysql-community-server.mysql.init b/packaging/deb-wily/mysql-community-server.mysql.init deleted file mode 100755 index 67a01932265f..000000000000 --- a/packaging/deb-wily/mysql-community-server.mysql.init +++ /dev/null @@ -1,192 +0,0 @@ -#!/bin/bash -# -### BEGIN INIT INFO -# Provides: mysql -# Required-Start: $remote_fs $syslog -# Required-Stop: $remote_fs $syslog -# Should-Start: $network $time -# Should-Stop: $network $time -# Default-Start: 2 3 4 5 -# Default-Stop: 0 1 6 -# Short-Description: Start/ Stop MySQL Community Server daemon -# Description: This service script facilitates startup and shutdown of -# mysqld daemon throught its wrapper script mysqld_safe -### END INIT INFO -# - -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -. /lib/lsb/init-functions - -cd / -umask 077 - -MYSQLDATA=/var/lib/mysql -VERSION=$(mysqld --version | grep mysqld | cut -d' ' -f4) - -get_mysql_option() { - RESULT=$(my_print_defaults "$1" | sed -n "s/^--$2=//p" | tail -n 1) - if [ -z "$RESULT" ]; - then - RESULT="$3" - fi - echo $RESULT -} - -get_running () { - PIDFILE=$(get_mysql_option mysqld_safe pid-file "") - if [ -z "$PIDFILE" ]; - then - PIDFILE=$(get_mysql_option mysqld pid-file "$MYSQLDATA/$(hostname).pid") - fi - if [ -e "$PIDFILE" ] && [ -d "/proc/$(cat "$PIDFILE")" ]; - then - echo 1 - else - echo 0 - fi -} - -server_stop () { - RUNNING=$(get_running) - COUNT=0 - while :; do - COUNT=$(( COUNT+1 )) - echo -n . - if [ "${RUNNING}" -eq 0 ]; - then - echo - break - fi - if [ "${COUNT}" -gt 15 ]; - then - echo - return 1 - fi - RUNNING=$(get_running) - sleep 1 - done - return 0 -} - -case "$1" in - 'start') - RUNNING=$(get_running) - if [ "${RUNNING}" -eq 1 ]; - then - log_action_msg "A MySQL Server is already started" - else - MYSQLRUN=/var/run/mysqld - MYSQLDATA=/var/lib/mysql - MYSQLLOG=/var/log/mysql - - if [ ! -d ${MYSQLDATA} -a ! -L ${MYSQLDATA} ]; - then - mkdir ${MYSQLDATA} - chown mysql:mysql ${MYSQLDATA} - chmod 750 ${MYSQLDATA} - fi - - if [ ! -d "${MYSQLDATA}/mysql" -a ! -L "${MYSQLDATA}/mysql" ]; - then - mkdir ${MYSQLDATA}/mysql - chown mysql:mysql ${MYSQLDATA}/mysql - chmod 750 ${MYSQLDATA}/mysql - fi - - if [ ! "$(ls -A ${MYSQLDATA}/mysql)" ]; - then - mysql_install_db --user=mysql > /dev/null - fi - - if [ ! -d ${MYSQLLOG} -a ! -L ${MYSQLLOG} ]; - then - mkdir ${MYSQLLOG} - chown mysql:adm ${MYSQLLOG} - chmod 750 ${MYSQLLOG} - touch ${MYSQLLOG}/error.log - chmod 640 ${MYSQLLOG}/error.log - chown mysql:adm ${MYSQLLOG}/error.log - fi - - if [ ! -d "${MYSQLRUN}" -a ! -L "${MYSQLRUN}" ]; - then - mkdir ${MYSQLRUN} - chown mysql:mysql ${MYSQLRUN} - chmod 755 ${MYSQLRUN} - fi - - /lib/init/apparmor-profile-load usr.sbin.mysqld - - su - mysql -s /bin/bash -c "mysqld_safe > /dev/null &" - for i in 1 2 3 4 5 6; - do - sleep 1 - echo -n . - done - echo - RUNNING=$(get_running) - if [ "${RUNNING}" -eq 1 ]; - then - log_action_msg "MySQL Community Server ${VERSION} is started" - else - log_action_msg "MySQL Community Server ${VERSION} did not start. Please check logs for more details." - fi - fi - ;; - - 'stop') - RUNNING=$(get_running) - if [ "${RUNNING}" -eq 1 ]; - then - killall -15 mysqld - server_stop - if [ "$?" -eq 0 ]; - then - log_action_msg "MySQL Community Server ${VERSION} is stopped" - else - log_action_msg "Attempt to shutdown MySQL Community Server ${VERSION} timed out" - fi - else - log_action_msg "MySQL Community Server ${VERSION} is already stopped" - fi - ;; - - 'restart'|'reload'|'force-reload') - log_action_msg "Stopping MySQL Community Server ${VERSION}" - $0 stop - log_action_msg "Re-starting MySQL Community Server ${VERSION}" - $0 start - ;; - - 'status') - RUNNING=$(get_running) - if [ ${RUNNING} -eq 1 ]; - then - log_action_msg "MySQL Community Server ${VERSION} is running" - else - log_action_msg "MySQL Community Server ${VERSION} is not running" - exit 3 - fi - ;; - - *) - echo "Usage: $SELF start|stop|restart|reload|force-reload|status" - exit 1 - ;; -esac - -exit 0 diff --git a/packaging/deb-wily/mysql-community-server.mysql.service b/packaging/deb-wily/mysql-community-server.mysql.service deleted file mode 100644 index b3e33058beda..000000000000 --- a/packaging/deb-wily/mysql-community-server.mysql.service +++ /dev/null @@ -1,33 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# MySQL systemd service file - -[Unit] -Description=MySQL Community Server -After=network.target - -[Install] -WantedBy=multi-user.target - -[Service] -User=mysql -Group=mysql -PermissionsStartOnly=true -ExecStartPre=/usr/share/mysql/mysql-systemd-start pre -ExecStart=/usr/bin/mysqld_safe -ExecStartPost=/usr/share/mysql/mysql-systemd-start post -TimeoutSec=600 -Restart=on-failure diff --git a/packaging/deb-wily/mysql-community-server.postinst b/packaging/deb-wily/mysql-community-server.postinst deleted file mode 100755 index ad164e52f1b9..000000000000 --- a/packaging/deb-wily/mysql-community-server.postinst +++ /dev/null @@ -1,95 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -. /usr/share/debconf/confmodule - -take_upstart_job_backup () { - if [ -e "/etc/init/mysql.conf" ] && [ -d "/var/lib/mysql" ]; - then - mv /etc/init/mysql.conf /var/lib/mysql/.mysql.conf.backup - fi -} - -case "$1" in - configure) - - if [ -z "$2" ]; - then - set -e - - update-alternatives --install /etc/mysql/my.cnf my.cnf "/etc/mysql/mysql.cnf" 200 - - MYSQLDATA=/var/lib/mysql - - if [ ! -d "${MYSQLDATA}/mysql" -a ! -L "${MYSQLDATA}/mysql" ]; - then - mkdir ${MYSQLDATA}/mysql - chown mysql:mysql ${MYSQLDATA}/mysql - chmod 750 ${MYSQLDATA}/mysql - if [ ! "$(ls -A ${MYSQLDATA}/mysql)" ]; - then - mysql_install_db --user=mysql > /dev/null - fi - fi - - db_get mysql-community-server/root-pass && PASSWD=${RET} - if [ ! -z "${PASSWD}" ]; - then - db_set mysql-community-server/root-pass "" - db_set mysql-community-server/re-root-pass "" - PASSWD="UPDATE user SET password=PASSWORD('${PASSWD}') WHERE user='root';" - else - PASSWD="" - fi - - SQL=`mktemp` - if [ -f "${SQL}" ]; - then - chmod 700 ${SQL} - cat << EOF > ${SQL} -USE mysql; -${PASSWD} -DELETE FROM user WHERE user=''; -FLUSH PRIVILEGES; -EOF - mysqld --basedir=/usr --bootstrap --user=mysql --skip-grant-tables < $SQL - PASSWD="" - rm -f ${SQL} - fi - - set +e - - fi - - ;; - - abort-upgrade|abort-remove|abort-configure) - - ;; - - *) - exit 1 - ;; -esac - -db_stop - -take_upstart_job_backup - -#DEBHELPER# - -exit 0 diff --git a/packaging/deb-wily/mysql-community-server.postrm b/packaging/deb-wily/mysql-community-server.postrm deleted file mode 100755 index 5d4a7b48db02..000000000000 --- a/packaging/deb-wily/mysql-community-server.postrm +++ /dev/null @@ -1,155 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -if [ "$1" = purge ] && [ -e /usr/share/debconf/confmodule ]; -then -. /usr/share/debconf/confmodule -fi - -place_upstart_job_back () { - if [ -e "/var/lib/mysql/.mysql.conf.backup" ]; - then - mv /var/lib/mysql/.mysql.conf.backup /etc/init/mysql.conf - fi -} - -get_pcount () { - PSCOUNT=$(ps -ef | grep "/usr/sbin/mysqld" | wc -l) - echo "${PSCOUNT}" -} - -server_stop () { - PSCOUNT=$(get_pcount) - COUNT=0 - while :; do - COUNT=$(( COUNT+1 )) - echo -n . - if [ "${PSCOUNT}" -eq 1 ]; - then - echo - break - fi - if [ "${COUNT}" -gt 15 ]; - then - echo - return 1 - fi - PSCOUNT=$(get_pcount) - sleep 1 - done - return 0 -} - -case "$1" in - remove) - - set -e - - place_upstart_job_back - update-alternatives --remove my.cnf "/etc/mysql/mysql.cnf" - - set +e - - ;; - - purge) - - set -e - - place_upstart_job_back - - MYSQLDATA=/var/lib/mysql - MYSQLLOG=/var/log/mysql - MYSQLRUN=/var/run/mysqld - - server_stop - - db_input high mysql-community-server/remove-data-dir || true - db_go - db_get mysql-community-server/remove-data-dir && RMDATADIR=${RET} - if [ "${RMDATADIR}" = "true" ]; - then - if [ -d ${MYSQLRUN} ] || [ -L ${MYSQLRUN} ]; - then - rm -rf ${MYSQLRUN} - fi - - if [ -d ${MYSQLLOG} ] || [ -L ${MYSQLLOG} ]; - then - rm -rf ${MYSQLLOG} - fi - - if [ -d ${MYSQLDATA} ] || [ -L ${MYSQLDATA} ]; - then - rm -rf ${MYSQLDATA} - fi - - if getent passwd mysql >/dev/null; - then - userdel mysql - fi - fi - - set +e - ;; - - abort-install) - - set -e - - place_upstart_job_back - - if [ -x "/etc/init.d/mysql" ]; - then - invoke-rc.d mysql start || exit $? - else - if [ -d ${MYSQLRUN} ] || [ -L ${MYSQLRUN} ]; - then - rm -rf ${MYSQLRUN} - fi - - if [ -d ${MYSQLLOG} ] || [ -L ${MYSQLLOG} ]; - then - rm -rf ${MYSQLLOG} - fi - - if [ -d ${MYSQLDATA} ] || [ -L ${MYSQLDATA} ]; - then - rm -rf ${MYSQLDATA} - fi - - if getent passwd mysql >/dev/null; - then - userdel mysql - fi - fi - - set +e - ;; - - upgrade|abort-upgrade) - - ;; - - *) - exit 1 - ;; -esac - -#DEBHELPER# - -exit 0 diff --git a/packaging/deb-wily/mysql-community-server.preinst b/packaging/deb-wily/mysql-community-server.preinst deleted file mode 100755 index c769885e476b..000000000000 --- a/packaging/deb-wily/mysql-community-server.preinst +++ /dev/null @@ -1,123 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -get_pcount () { - PSCOUNT=$(ps -ef | grep "/usr/sbin/mysqld" | wc -l) - echo "${PSCOUNT}" -} - -server_stop () { - PSCOUNT=$(get_pcount) - COUNT=0 - while :; do - COUNT=$(( COUNT+1 )) - echo -n . - if [ "${PSCOUNT}" -eq 1 ]; - then - echo - break - fi - if [ "${COUNT}" -gt 15 ]; - then - echo - return 1 - fi - PSCOUNT=$(get_pcount) - sleep 1 - done - return 0 -} - -case "$1" in - install) - - if [ -z "$2" ]; - then - - set -e - - if [ -x "/etc/init.d/mysql" ]; - then - invoke-rc.d mysql stop || exit $? - server_stop - fi - - MYSQLDATA=/var/lib/mysql - MYSQLLOG=/var/log/mysql - MYSQLRUN=/var/run/mysqld - - if ! getent group mysql >/dev/null; - then - addgroup --system mysql >/dev/null - fi - - if ! getent passwd mysql >/dev/null; - then - adduser --ingroup mysql --system --disabled-login --no-create-home --home ${MYSQLDATA} --shell /bin/false --gecos "MySQL Server" mysql >/dev/null - fi - - if [ ! -d ${MYSQLDATA} -a ! -L ${MYSQLDATA} ]; - then - mkdir ${MYSQLDATA} - chown mysql:mysql ${MYSQLDATA} - chmod 750 ${MYSQLDATA} - fi - - if [ ! -d ${MYSQLLOG} -a ! -L ${MYSQLLOG} ]; - then - mkdir ${MYSQLLOG} - chown mysql:adm ${MYSQLLOG} - chmod 750 ${MYSQLLOG} - touch ${MYSQLLOG}/error.log - chmod 640 ${MYSQLLOG}/error.log - chown mysql:adm ${MYSQLLOG}/error.log - fi - - if [ ! -d ${MYSQLRUN} -a ! -L ${MYSQLRUN} ]; - then - mkdir ${MYSQLRUN} - chown mysql:mysql ${MYSQLRUN} - chmod 755 ${MYSQLRUN} - fi - - set +e - - fi - - ;; - - upgrade) - - set -e - - #DEBHELPER# - server_stop - - set +e - - ;; - - abort-upgrade) - - ;; - - *) - exit 1 - ;; -esac - -exit 0 diff --git a/packaging/deb-wily/mysql-community-server.prerm b/packaging/deb-wily/mysql-community-server.prerm deleted file mode 100755 index 1386b5d43ab9..000000000000 --- a/packaging/deb-wily/mysql-community-server.prerm +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -set -e - -#DEBHELPER# - -set +e - -exit 0 diff --git a/packaging/deb-wily/mysql-community-server.templates b/packaging/deb-wily/mysql-community-server.templates deleted file mode 100644 index 7b7e0ac33cdc..000000000000 --- a/packaging/deb-wily/mysql-community-server.templates +++ /dev/null @@ -1,33 +0,0 @@ -Template: mysql-community-server/root-pass -Type: password -Description: Enter root password: - Please provide a strong password that will be set for the root account of your MySQL database. - Leave it blank if you do not wish to set or change the root password at this time. - -Template: mysql-community-server/re-root-pass -Type: password -Description: Re-enter root password: - Now that you have selected a password for the root account, please confirm by typing it again. Do not share the password with anyone. - -Template: mysql-community-server/root-pass-mismatch -Type: error -Description: The two passwords did not match - Please try again. Make sure you type the exact same password twice. - -Template: mysql-community-server/remove-data-dir -Type: boolean -Default: false -Description: Remove data directory at /var/lib/mysql ? - This operation will remove the data directory that stores all the databases, tables and related meta-data. - It is highly recommended to take data backup before removing the data directory. - -Template: mysql-community-server/data-dir -Type: note -Description: Data directory found when no MySQL server package is installed - A data directory '/var/lib/mysql' is present on this system when no MySQL server - package is currently installed on the system. The directory may be under control of - server package received from third-party vendors. It may also be an unclaimed data - directory from previous removal of mysql packages. - . - It is highly recommended to take data backup. If you have not done so, now would be - the time to take backup in another shell. Once completed, press 'Ok' to continue. diff --git a/packaging/deb-wily/mysql-community-source.install b/packaging/deb-wily/mysql-community-source.install deleted file mode 100644 index 46a0f12b0a52..000000000000 --- a/packaging/deb-wily/mysql-community-source.install +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -../*.dsc usr/src/mysql/ -../*.tar.gz usr/src/mysql/ -../*.tar.xz usr/src/mysql/ -# legal -usr/share/doc/mysql-community-source/COPYING -usr/share/doc/mysql-community-source/README diff --git a/packaging/deb-wily/mysql-community-source.lintian-overrides b/packaging/deb-wily/mysql-community-source.lintian-overrides deleted file mode 100644 index 9ca84e90712c..000000000000 --- a/packaging/deb-wily/mysql-community-source.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-community-source: extra-license-file usr/share/doc/mysql-community-source/LICENSE.mysql -mysql-community-source: extra-license-file usr/share/doc/mysql-community-source/COPYING.gz -mysql-community-source: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-wily/mysql-community-test.install b/packaging/deb-wily/mysql-community-test.install deleted file mode 100644 index e70086b33ade..000000000000 --- a/packaging/deb-wily/mysql-community-test.install +++ /dev/null @@ -1,20 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -usr/lib/mysql-test/* -usr/share/man/man1/mysql-test-run.pl.1 -# legal -usr/share/doc/mysql-community-test/COPYING -usr/share/doc/mysql-community-test/README diff --git a/packaging/deb-wily/mysql-community-test.links b/packaging/deb-wily/mysql-community-test.links deleted file mode 100644 index bf66c98bb758..000000000000 --- a/packaging/deb-wily/mysql-community-test.links +++ /dev/null @@ -1,17 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -usr/lib/mysql-test/mysql-test-run.pl usr/lib/mysql-test/mysql-test-run -usr/lib/mysql-test/mysql-test-run.pl usr/lib/mysql-test/mtr diff --git a/packaging/deb-wily/mysql-community-test.lintian-overrides b/packaging/deb-wily/mysql-community-test.lintian-overrides deleted file mode 100644 index ff273bbe9135..000000000000 --- a/packaging/deb-wily/mysql-community-test.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-community-test: extra-license-file usr/share/doc/mysql-community-test/LICENSE.mysql -mysql-community-test: extra-license-file usr/share/doc/mysql-community-test/COPYING.gz -mysql-community-test: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-wily/mysql-server.install b/packaging/deb-wily/mysql-server.install deleted file mode 100644 index e3aa8de274f0..000000000000 --- a/packaging/deb-wily/mysql-server.install +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# legal -usr/share/doc/mysql-server/COPYING -usr/share/doc/mysql-server/README diff --git a/packaging/deb-wily/mysql-server.lintian-overrides b/packaging/deb-wily/mysql-server.lintian-overrides deleted file mode 100644 index 487709765b02..000000000000 --- a/packaging/deb-wily/mysql-server.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-server: extra-license-file usr/share/doc/mysql-server/LICENSE.mysql -mysql-server: extra-license-file usr/share/doc/mysql-server/COPYING.gz -mysql-server: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-wily/mysql-testsuite.install b/packaging/deb-wily/mysql-testsuite.install deleted file mode 100644 index dfc17333700e..000000000000 --- a/packaging/deb-wily/mysql-testsuite.install +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# legal -usr/share/doc/mysql-testsuite/COPYING -usr/share/doc/mysql-testsuite/README diff --git a/packaging/deb-wily/mysql-testsuite.lintian-overrides b/packaging/deb-wily/mysql-testsuite.lintian-overrides deleted file mode 100644 index 37488fe69b72..000000000000 --- a/packaging/deb-wily/mysql-testsuite.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-testsuite: extra-license-file usr/share/doc/mysql-testsuite/LICENSE.mysql -mysql-testsuite: extra-license-file usr/share/doc/mysql-testsuite/COPYING.gz -mysql-testsuite: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-wily/patches/fix-man-page-links.patch b/packaging/deb-wily/patches/fix-man-page-links.patch deleted file mode 100644 index 004ccdf77d03..000000000000 --- a/packaging/deb-wily/patches/fix-man-page-links.patch +++ /dev/null @@ -1,14 +0,0 @@ -From: Akhil Mohan -Description: Fix path in man page link. -Bug: http://bugs.mysql.com/bug.php?id=70952 - ---- a/man/mysql_client_test_embedded.1 2013-11-08 19:00:22.000000000 +0530 -+++ b/man/mysql_client_test_embedded.1 2013-11-14 19:29:56.768315219 +0530 -@@ -1 +1 @@ --.so man-gpl-tmp2/mysql_client_test.1 -+.so man1/mysql_client_test.1 ---- a/man/mysqltest_embedded.1 2013-11-08 19:00:22.000000000 +0530 -+++ b/man/mysqltest_embedded.1 2013-11-14 19:31:19.079280675 +0530 -@@ -1 +1 @@ --.so man-gpl-tmp2/mysqltest.1 -+.so man1/mysqltest.1 diff --git a/packaging/deb-wily/patches/fix-mtr-search-paths.patch b/packaging/deb-wily/patches/fix-mtr-search-paths.patch deleted file mode 100644 index 8a27a091e6ce..000000000000 --- a/packaging/deb-wily/patches/fix-mtr-search-paths.patch +++ /dev/null @@ -1,13 +0,0 @@ -From: Akhil Mohan -Description: Adding extra search path for testsuite. - ---- a/mysql-test/lib/mtr_cases.pm 2014-02-24 13:14:37 +0530 -+++ b/mysql-test/lib/mtr_cases.pm 2014-07-02 11:46:24 +0530 -@@ -288,6 +288,7 @@ - { - $suitedir= my_find_dir($::basedir, - ["share/mysql-test/suite", -+ "lib/mysql-test/suite", - "mysql-test/suite", - "internal/mysql-test/suite", - "mysql-test", diff --git a/packaging/deb-wily/patches/fix-mysql_install_db.patch b/packaging/deb-wily/patches/fix-mysql_install_db.patch deleted file mode 100644 index 41311b2c8f9e..000000000000 --- a/packaging/deb-wily/patches/fix-mysql_install_db.patch +++ /dev/null @@ -1,43 +0,0 @@ -From: Terje Røsten -Description: Maintains the pending --skip-my-cnf option in mainline -Bug: - -diff --git a/scripts/mysql_install_db.pl.in b/scripts/mysql_install_db.pl.in -index 440a977..7d068fc 100644 ---- a/scripts/mysql_install_db.pl.in -+++ b/scripts/mysql_install_db.pl.in -@@ -113,6 +113,7 @@ EOF2 - print <{srcdir} and $opt->{basedir} ) - { - error($opt,"Specify either --basedir or --srcdir, not both"); - } --if ( $opt->{'keep-my-cnf'} ) -+if ( $opt->{rpm} || $opt->{'keep-my-cnf'} ) - { - $keep_my_cnf = 1; - } -@@ -664,7 +665,7 @@ if ( $opt->{'skip-name-resolve'} and $resolved and $resolved =~ /\s/ ) - } - - # ---------------------------------------------------------------------- --# Create database directories mysql & test -+# Create database directory mysql - # ---------------------------------------------------------------------- - - # FIXME The shell variant uses "mkdir -p": -@@ -697,7 +698,7 @@ if ($opt_user) - } - } - --foreach my $dir ( $opt->{ldata}, "$opt->{ldata}/mysql", "$opt->{ldata}/test" ) -+foreach my $dir ( $opt->{ldata}, "$opt->{ldata}/mysql") - { - mkdir($dir, 0700) unless -d $dir; - if ($opt_user and -w "/") diff --git a/packaging/deb-wily/patches/series b/packaging/deb-wily/patches/series deleted file mode 100644 index e3b20d6febc0..000000000000 --- a/packaging/deb-wily/patches/series +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -#fix-man-page-links.patch -fix-mysql_install_db.patch -fix-mtr-search-paths.patch diff --git a/packaging/deb-wily/rules b/packaging/deb-wily/rules deleted file mode 100755 index b9cd814ce4fd..000000000000 --- a/packaging/deb-wily/rules +++ /dev/null @@ -1,137 +0,0 @@ -#!/usr/bin/make -f - -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -%: - dh $@ - -export DH_VERBOSE=1 -export CFLAGS= -export CXXFLAGS= - -override_dh_auto_configure: - @echo "RULES.$@" - cmake . \ - -DBUILD_CONFIG=mysql_release \ - -DCMAKE_INSTALL_PREFIX=/usr \ - -DINSTALL_DOCDIR=share/mysql/docs \ - -DINSTALL_DOCREADMEDIR=share/mysql \ - -DINSTALL_INCLUDEDIR=include/mysql \ - -DINSTALL_INFODIR=share/mysql/docs \ - -DINSTALL_LIBDIR=lib/$(DEB_HOST_MULTIARCH) \ - -DINSTALL_MANDIR=share/man \ - -DINSTALL_MYSQLSHAREDIR=share/mysql \ - -DINSTALL_MYSQLTESTDIR=lib/mysql-test \ - -DINSTALL_PLUGINDIR=lib/mysql/plugin \ - -DINSTALL_SBINDIR=sbin \ - -DINSTALL_SCRIPTDIR=bin \ - -DINSTALL_SQLBENCHDIR=lib/mysql \ - -DINSTALL_SUPPORTFILESDIR=share/mysql \ - -DMYSQL_DATADIR=/var/lib/mysql \ - -DSYSCONFDIR=/etc/mysql \ - -DMYSQL_UNIX_ADDR=/var/run/mysqld/mysqld.sock \ - -DWITH_SSL=bundled \ - -DWITH_ZLIB=system \ - -DWITH_EXTRA_CHARSETS=all \ - -DWITH_INNODB_MEMCACHED=1 \ - -DCOMPILATION_COMMENT="MySQL Community Server (GPL)" \ - -DINSTALL_LAYOUT=DEB - - cat CMakeCache.txt - touch $@ - -override_dh_auto_build: - @echo "RULES.$@" - $(MAKE) -j8 VERBOSE=1 - touch $@ - -override_dh_auto_test: - @echo "RULES.$@" - echo "No tests run because test 9: pfs_connect_attr is failing unreasonably" - touch $@ - -override_dh_auto_install: - - @echo "RULES.$@" - # complete install first - $(MAKE) install DESTDIR=debian/tmp - # remove all redundant files and links - rm debian/tmp/usr/lib/*/*_r* - rm debian/tmp/usr/lib/mysql-test/cmake_install.cmake - rm debian/tmp/usr/lib/mysql-test/CTestTestfile.cmake - rm debian/tmp/usr/lib/mysql-test/Makefile - # add missing man pages - install -g root -o root -m 0644 debian/extra/mysql_embedded.1 debian/tmp/usr/share/man/man1 - # add MySQL Server debug binary and library to package - install -g root -o root -m 0755 debian/extra/server-binary debian/tmp/usr/sbin/mysqld-debug - install -g root -o root -m 0755 debian/extra/embedded-server debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/libmysqld-debug.a - # add debug plugin libraries to package - install -g root -o root -m 0755 -d debian/tmp/usr/lib/mysql/plugin/debug - for file in debian/extra/*-plugin; do NEW=`echo $$file | cut -d- -f1`; mv $$file $$NEW.so; done - install -g root -o root -m 0755 debian/extra/*.so debian/tmp/usr/lib/mysql/plugin/debug - install -g root -o root -m 0755 debian/extra/daemon_example.ini debian/tmp/usr/lib/mysql/plugin/debug - # add apparmor profile - install -g root -o root -m 0644 -D debian/extra/apparmor-profile debian/tmp/etc/apparmor.d/usr.sbin.mysqld - # add systemd script - install -m 0755 debian/extra/mysql-systemd-start debian/tmp/usr/share/mysql/ - # add directory for legal docs - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-server - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-community-server - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-client - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-community-client - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-common - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/libmysqlclient18 - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/libmysqlclient-dev - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/libmysqld-dev - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-community-bench - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-testsuite - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-community-test - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-community-source - # add COPYING file to each package - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-server/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-community-server/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-client/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-community-client/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-common/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/libmysqlclient18/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/libmysqlclient-dev/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/libmysqld-dev/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-community-bench/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-testsuite/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-community-test/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-community-source/COPYING - # add README file to each package - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-server/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-community-server/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-client/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-community-client/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-common/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/libmysqlclient18/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/libmysqlclient-dev/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/libmysqld-dev/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-community-bench/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-testsuite/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-community-test/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-community-source/README - touch $@ - -override_dh_installinit: - @echo "RULES.$@" - dh_apparmor -pmysql-community-server --profile-name=usr.sbin.mysqld - dh_systemd_enable --name=mysql - dh_installinit --name=mysql -- defaults 19 21 - dh_systemd_start --restart-after-upgrade - touch $@ diff --git a/packaging/deb-wily/source/format b/packaging/deb-wily/source/format deleted file mode 100644 index 163aaf8d82b6..000000000000 --- a/packaging/deb-wily/source/format +++ /dev/null @@ -1 +0,0 @@ -3.0 (quilt) diff --git a/packaging/deb-wily/source/include-binaries b/packaging/deb-wily/source/include-binaries deleted file mode 100644 index 0c23142f3c13..000000000000 --- a/packaging/deb-wily/source/include-binaries +++ /dev/null @@ -1,34 +0,0 @@ -# Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# obscured filename for mysqld-debug, libmysqld-debug.a and debug plugins -debian/extra/server-binary -debian/extra/embedded-server -debian/extra/adt_null-plugin -debian/extra/auth-plugin -debian/extra/auth_socket-plugin -debian/extra/auth_test_plugin-plugin -debian/extra/innodb_engine-plugin -debian/extra/libdaemon_example-plugin -debian/extra/libmemcached-plugin -debian/extra/mypluglib-plugin -debian/extra/mysql_no_login-plugin -debian/extra/qa_auth_client-plugin -debian/extra/qa_auth_interface-plugin -debian/extra/qa_auth_server-plugin -debian/extra/semisync_master-plugin -debian/extra/semisync_slave-plugin -debian/extra/test_udf_services-plugin -debian/extra/validate_password-plugin diff --git a/packaging/deb-wily/watch b/packaging/deb-wily/watch deleted file mode 100644 index c45c5e3e89d6..000000000000 --- a/packaging/deb-wily/watch +++ /dev/null @@ -1,2 +0,0 @@ -version=3 -http://mysql.mirrors.pair.com/Downloads/MySQL-5.6/mysql-([\d\.]+).tar.gz diff --git a/packaging/deb-xenial/changelog b/packaging/deb-xenial/changelog deleted file mode 100644 index 4f4e77ecc911..000000000000 --- a/packaging/deb-xenial/changelog +++ /dev/null @@ -1,143 +0,0 @@ -mysql-community (5.6.31-1ubuntu16.04) xenial; urgency=medium - - * New upstream release - - -- Lars Tangvald Tue, 03 May 2016 09:30:33 +0200 - -mysql-community (5.6.28-1ubuntu15.10) wily; urgency=low - - * New upstream release - - -- Lars Tangvald Thu, 12 Nov 2015 10:34:23 +0100 - -mysql-community (5.6.26-1ubuntu15.04) vivid; urgency=low - - * new upstream release - * mysql-commercial-server now depends on perl, psmisc - mysql-commercial-test now depends on python, libmysqlclient-dev - (Closes: #20893836) - - -- Akhil Mohan Thu, 18 Jun 2015 16:34:10 +0530 - -mysql-community (5.6.25-3ubuntu15.04) vivid; urgency=low - - * new upstream release - * mysql-common now conflicts with - mysql-server-5.6, mysql-server-core-5.6 - mysql-client-5.6, mysql-client-core-5.6 - * mysql-*-server no more provides - mysql-server-5.6, mysql-server-core-5.6 - * mysql-*-client no more provides - mysql-client-5.6, mysql-client-core-5.6 - - -- Akhil Mohan Mon, 15 Jun 2015 16:48:05 +0530 - -mysql-community (5.6.24-3ubuntu15.04) vivid; urgency=low - - * updated Standards-Version to 3.9.6 in d/control - * apparmor profile updated to allow read on all files under /etc/mysql - * added new conf files under d/extra/*.conf - * mysql_plugin moved from client to server pkg - * innochecksum moved from client to server pkg - * server pkg now replaces client pkg - * added systemd service profile and script - * new /etc/mysql/my.cnf management scheme added for Ubuntu 15.04 - as discussed in Dec 2014 for native packaging source - * added dh "--with systemd" for enabling systemd - - -- Akhil Mohan Wed, 27 May 2015 11:35:35 +0530 - -mysql-community (5.6.24-2ubuntu15.04) vivid; urgency=low - - * new upstream release - * forked packaging source from utopic to vivid - - -- Akhil Mohan Wed, 15 Apr 2015 18:52:22 +0530 - -mysql-community (5.6.24-1ubuntu14.10) utopic; urgency=low - - * new upstream release - - -- Akhil Mohan Mon, 16 Feb 2014 15:45:09 +0530 - -mysql-community (5.6.23-1ubuntu14.10) utopic; urgency=low - - * new upstream release - * mysql-community-server now recommends mysql-client - * mysql-community-server now depends on apparmor - * removed template install-test-db; not installed by default - * d/compat incremented to 9 from 8 - * d/control updated to build depend on debhelper 9 - * added d/*.lintian-overrides and d/source/lintian-overrides - * d/rules updated to reflect correct file permissions - - -- Akhil Mohan Wed, 31 Dec 2014 10:51:07 +0530 - -mysql-community (5.6.22-2ubuntu14.10) utopic; urgency=low - - * new upstream release - * mysql-common now replaces mysql-server-{,core-}5.6 - - -- Akhil Mohan Wed, 28 Nov 2014 15:18:07 +0530 - -mysql-community (5.6.22-1ubuntu14.10) utopic; urgency=low - - * new upstream release - * fixed d/*server.postinst to allow dropping test db without - setting root password - * init script will now run my_i_db if data dir is not present or empty - * updated init script to read app armor profile on startup - * forked packaging source from trusty and rebranded for utopic - * updated d/m-c-source.install to pack *.xz packaging source archive - * added more system resources to app armor profile - * dh_apparmor to now run before dh_installinit in d/rules - * libmysqlclient-dev now replaces mysql-client-{,core-}5.6 - - -- Akhil Mohan Wed, 05 Nov 2014 17:04:07 +0530 - -mysql-community (5.6.21-1ubuntu14.04) trusty; urgency=low - - * new upstream release - * updated d/rules to increment -j8 as make option - * updated d/source/include-binaries to add mysql_no_login plugin - * updated CMake option WITH_EXTRA_CHARSETS from complex to all - - -- Akhil Mohan Wed, 20 Aug 2014 19:12:30 +0530 - -mysql-community (5.6.20-1ubuntu14.04) trusty; urgency=low - - * new upstream release - * added fakeroot as build-dep in d/control - * added d/*.dirs for bench, dev and test pkg - * updated d/rules to make compilation verbose - * removed default CFLAGS, CXXFLAGS in d/rules - * added patch for testsuite search paths under d/patches - * modified cmake option for testsuite in d/rules - * updated patch d/fix-mysql_install_db.patch - * enabled two patches in d/patches/series - * removed extra permissions check in d/rules when fixed in source - * modified d/mysql-*-server.postinst to stop removing /usr/my.cnf - * modified d/*-test.* for updated location of testsuite - * updated d/{mysql-*-server.install,rules} to include debug plugins - * updated d/rules to remove storage engine cmake options - * modified data dir permission in d/*server.{pre,post}inst - * updated d/source/include-binaries to add debug plugins - * updated d/rules to rename debug plugins - - -- Akhil Mohan Wed, 02 Jul 2014 17:45:30 +0530 - -mysql-community (5.6.19-1ubuntu14.04) trusty; urgency=low - - * new upstream release - * d/rules updated to rid of files removed from source - * modified path for source tar in source pkg - * obscured actual filenames in d/source/include-binaries - * modified d/rules to handle obscured filenames - - -- Akhil Mohan Mon, 05 May 2014 15:45:10 +0530 - -mysql-community (5.6.17-1ubuntu14.04) trusty; urgency=low - - * new upstream release - - -- Akhil Mohan Fri, 28 Feb 2014 18:06:30 +0530 diff --git a/packaging/deb-xenial/compat b/packaging/deb-xenial/compat deleted file mode 100644 index ec635144f600..000000000000 --- a/packaging/deb-xenial/compat +++ /dev/null @@ -1 +0,0 @@ -9 diff --git a/packaging/deb-xenial/control b/packaging/deb-xenial/control deleted file mode 100644 index 8bc5ecdf4053..000000000000 --- a/packaging/deb-xenial/control +++ /dev/null @@ -1,192 +0,0 @@ -Source: mysql-community -Maintainer: MySQL Release Engineering -Section: database -Priority: optional -Standards-Version: 3.9.6 -Homepage: http://www.mysql.com/ -Build-Depends: debhelper (>= 9.0.0), libaio-dev[linux-any], libncurses5-dev (>= 5.0-6), perl, zlib1g-dev (>= 1:1.1.3-5), po-debconf, psmisc, bison, dh-apparmor, dh-systemd (>= 1.5), lsb-release, cmake, fakeroot, libnuma-dev - -Package: mysql-server -Architecture: any -Depends: mysql-community-server (= ${binary:Version}), ${misc:Depends} -Description: MySQL Server meta package depending on latest version - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This is a meta package that depends on the latest mysql server - package available in the repository. - -Package: mysql-community-server -Architecture: any -Pre-depends: debconf (>= 0.2.17), adduser -Depends: mysql-common (= ${binary:Version}), apparmor, perl, psmisc, - ${shlibs:Depends}, ${misc:Depends} -Recommends: mysql-client (= ${binary:Version}) -Conflicts: mysql, - mysql-server-5.0, mysql-server-core-5.0, - mysql-server-5.1, mysql-server-core-5.1, - mysql-server-5.5, mysql-server-core-5.5, - mysql-server-5.6, mysql-server-core-5.6, - mysql-commercial-server -Replaces: mysql, - mysql-server-5.0, mysql-server-core-5.0, - mysql-server-5.1, mysql-server-core-5.1, - mysql-server-5.5, mysql-server-core-5.5, - mysql-server-5.6, mysql-server-core-5.6, - mysql-commercial-server, - mysql-community-client -Provides: virtual-mysql-server, virtual-mysql-server-core -Description: MySQL Server - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This package includes the MySQL server binary as well as related - utilities to run and administer a MySQL server. - -Package: mysql-client -Architecture: any -Depends: mysql-community-client (= ${binary:Version}), ${misc:Depends} -Description: MySQL Client meta package depending on latest version - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This is a meta package that depends on the latest mysql client - package available in the repository. - -Package: mysql-community-client -Architecture: any -Depends: mysql-common (= ${binary:Version}), - ${shlibs:Depends}, ${misc:Depends} -Conflicts: mysql, - mysql-client-5.0, mysql-client-core-5.0, - mysql-client-5.1, mysql-client-core-5.1, - mysql-client-5.5, mysql-client-core-5.5, - mysql-client-5.6, mysql-client-core-5.6, - mysql-commercial-client -Replaces: mysql, - mysql-client-5.0, mysql-client-core-5.0, - mysql-client-5.1, mysql-client-core-5.1, - mysql-client-5.5, mysql-client-core-5.5, - mysql-client-5.6, mysql-client-core-5.6, - mysql-commercial-client -Provides: virtual-mysql-client, virtual-mysql-client-core -Description: MySQL Client - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This package contains the standard MySQL clients and - administration tools. - -Package: libmysqlclient18 -Architecture: any -Section: libs -Pre-Depends: ${misc:Pre-Depends} -Multi-Arch: same -Depends: mysql-common (= ${binary:Version}), - ${shlibs:Depends}, ${misc:Depends} -Description: MySQL shared client libraries - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This package contains the shared libraries for MySQL client - applications. - -Package: mysql-common -Architecture: any -Pre-depends: debconf (>= 0.2.17), ${misc:Pre-Depends} -Multi-Arch: foreign -Depends: ${shlibs:Depends}, ${misc:Depends} -Conflicts: mysql, mysql-server-5.6, mysql-server-core-5.6, - mysql-client-5.6, mysql-client-core-5.6, - mariadb-server-5.5, percona-xtradb-cluster-common-5.5 -Replaces: mysql, mysql-server-5.5, mysql-server-core-5.5, libmysqlclient-dev, - mysql-server-5.6, mysql-server-core-5.6, - mariadb-server-5.5, percona-xtradb-cluster-common-5.5 -Provides: mysql-common, mysql-common-5.6 -Description: MySQL Common - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This package contains common files needed by MySQL client - library, MySQL database server, and MySQL embedded server. - -Package: libmysqlclient-dev -Architecture: any -Section: libdevel -Depends: libmysqlclient18 (= ${binary:Version}), - ${shlibs:Depends}, ${misc:Depends} -Replaces: mysql-client-5.6, mysql-client-core-5.6 -Description: MySQL development headers - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This package contains the development header files necessary - to develop MySQL client applications. - -Package: libmysqld-dev -Architecture: any -Section: libdevel -Depends: libmysqlclient-dev (= ${binary:Version}), - ${shlibs:Depends}, ${misc:Depends} -Description: MySQL embedded server library - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This package contains the MySQL server as an embedded library. - -Package: mysql-testsuite -Architecture: any -Depends: mysql-community-test (= ${binary:Version}), ${misc:Depends} -Description: MySQL Testsuite meta package depending on latest version - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This is a meta package that depends on the latest mysql test - package available in the repository. - -Package: mysql-community-test -Architecture: any -Depends: mysql-community-server (= ${binary:Version}), - mysql-community-client (= ${binary:Version}), python, - libmysqlclient-dev, ${shlibs:Depends}, ${misc:Depends} -Conflicts: mysql, - mysql-testsuite-5.0, mysql-testsuite-5.1, mysql-testsuite-5.5, - mysql-testsuite-5.6, mysql-commercial-test -Description: MySQL Test Run MTR - The MySQL testsuite - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. This package contains the MySQL regression test suite for MySQL - database server. - -Package: mysql-community-bench -Architecture: any -Depends: mysql-community-server (= ${binary:Version}), - ${shlibs:Depends}, ${misc:Depends} -Conflicts: mysql, mysql-commercial-bench -Description: MySQL Bench - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. - -Package: mysql-community-source -Architecture: any -Depends: ${misc:Depends}, ${shlibs:Depends} -Description: MySQL source - The MySQL(TM) software delivers a very fast, multi-threaded, multi-user, - and robust SQL (Structured Query Language) database server. MySQL Server - is intended for mission-critical, heavy-load production systems as well - as for embedding into mass-deployed software. MySQL is a trademark of - Oracle. diff --git a/packaging/deb-xenial/copyright b/packaging/deb-xenial/copyright deleted file mode 100644 index 0d2a19fa1474..000000000000 --- a/packaging/deb-xenial/copyright +++ /dev/null @@ -1,41 +0,0 @@ -Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ -Upstream-Name: MySQL Server 5.6 -Upstream-Contact: MySQL Release Engineering -Source: http://dev.mysql.com/ - -Copyright: 2000, 2016, Oracle and/or its affiliates. All rights reserved. -License: - This is a release of MySQL, a dual-license SQL database server. - For the avoidance of doubt, this particular copy of the software - is released under the version 2 of the GNU General Public License. - MySQL is brought to you by Oracle. - . - MySQL FOSS License Exception - We want free and open source software applications under certain - licenses to be able to use specified GPL-licensed MySQL client - libraries despite the fact that not all such FOSS licenses are - compatible with version 2 of the GNU General Public License. - Therefore there are special exceptions to the terms and conditions - of the GPLv2 as applied to these client libraries, which are - identified and described in more detail in the FOSS License - Exception at - . - . - This distribution may include materials developed by third - parties. For license and attribution notices for these - materials, please refer to the documentation that accompanies - this distribution (see the "Licenses for Third-Party Components" - appendix) or view the online documentation at - . - . - GPLv2 Disclaimer - For the avoidance of doubt, except that if any license choice - other than GPL or LGPL is available it will apply instead, - Oracle elects to use only the General Public License version 2 - (GPLv2) at this time for any software where a choice of GPL - license versions is made available with the language indicating - that GPLv2 or any later version may be used, or where a choice - . - The full text of the GNU General Public License version 2 can - be found in the file - `/usr/share/mysql/doc/COPYING'. diff --git a/packaging/deb-xenial/extra/apparmor-profile b/packaging/deb-xenial/extra/apparmor-profile deleted file mode 100644 index 5cae3bfa0f80..000000000000 --- a/packaging/deb-xenial/extra/apparmor-profile +++ /dev/null @@ -1,47 +0,0 @@ -# vim:syntax=apparmor -# Last Modified: Fri Feb 28 18:06:30 2014 -#include - -/usr/sbin/mysqld { - #include - #include - #include - -# Allow system resource access - /sys/devices/system/cpu/ r, - capability sys_resource, - capability dac_override, - capability setuid, - capability setgid, - -# Allow config access - /etc/mysql/** r, - -# Allow pid and socket file access - /run/mysqld/mysqld.pid rw, - /run/mysqld/mysqld.sock rw, - -# Allow read/ write to /tmp - /tmp/ r, - /tmp/* rw, - -# Allow execution of server binary - /usr/sbin/mysqld mr, - /usr/sbin/mysqld-debug mr, - -# Allow plugin access - /usr/lib/mysql/plugin/ r, - /usr/lib/mysql/plugin/*.so* mr, - -# Allow error msg and charset access - /usr/share/mysql/ r, - /usr/share/mysql/** r, - -# Allow data dir access - /var/lib/mysql/ r, - /var/lib/mysql/** rwk, - -# Allow log file access - /var/log/mysql/ r, - /var/log/mysql/** rw, -} diff --git a/packaging/deb-xenial/extra/my.cnf.fallback b/packaging/deb-xenial/extra/my.cnf.fallback deleted file mode 100644 index 4c4004c1c805..000000000000 --- a/packaging/deb-xenial/extra/my.cnf.fallback +++ /dev/null @@ -1,25 +0,0 @@ -# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# -# The MySQL Commercial Server configuration file. -# -# For explanations see -# http://dev.mysql.com/doc/mysql/en/server-system-variables.html - -# * IMPORTANT: Additional settings that can override those from this file! -# The files must end with '.cnf', otherwise they'll be ignored. -# -!includedir /etc/mysql/conf.d/ diff --git a/packaging/deb-xenial/extra/mysql-systemd-start b/packaging/deb-xenial/extra/mysql-systemd-start deleted file mode 100644 index d22c44d09f27..000000000000 --- a/packaging/deb-xenial/extra/mysql-systemd-start +++ /dev/null @@ -1,84 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Scripts to run by MySQL systemd service -# -# Needed argument: pre | post -# -# pre mode : try to perform sanity check for configuration, log, data -# post mode : ping server until answer is received - -pinger () { - while /bin/true ; do - sleep 1 - mysqladmin ping >/dev/null 2>&1 && break - done -} - -sanity () { - MYSQLRUN=/var/run/mysqld - MYSQLDATA=/var/lib/mysql - MYSQLLOG=/var/log/mysql - - if [ ! -d ${MYSQLDATA} -a ! -L ${MYSQLDATA} ]; - then - mkdir ${MYSQLDATA} - chown mysql:mysql ${MYSQLDATA} - chmod 750 ${MYSQLDATA} - fi - - if [ ! -d "${MYSQLDATA}/mysql" -a ! -L "${MYSQLDATA}/mysql" ]; - then - mkdir ${MYSQLDATA}/mysql - chown mysql:mysql ${MYSQLDATA}/mysql - chmod 750 ${MYSQLDATA}/mysql - fi - - if [ ! "$(ls -A ${MYSQLDATA}/mysql)" ]; - then - mysql_install_db --user=mysql > /dev/null - fi - - if [ ! -d ${MYSQLLOG} -a ! -L ${MYSQLLOG} ]; - then - mkdir ${MYSQLLOG} - chown mysql:adm ${MYSQLLOG} - chmod 750 ${MYSQLLOG} - touch ${MYSQLLOG}/error.log - chmod 640 ${MYSQLLOG}/error.log - chown mysql:adm ${MYSQLLOG}/error.log - fi - - if [ ! -d "${MYSQLRUN}" -a ! -L "${MYSQLRUN}" ]; - then - mkdir ${MYSQLRUN} - chown mysql:mysql ${MYSQLRUN} - chmod 755 ${MYSQLRUN} - fi - - /lib/init/apparmor-profile-load usr.sbin.mysqld - - if [ ! -r /etc/mysql/my.cnf ]; then - echo "MySQL configuration not found at /etc/mysql/my.cnf. Please install one using update-alternatives." - exit 1 - fi -} - -case $1 in - "pre") sanity ;; - "post") pinger ;; -esac diff --git a/packaging/deb-xenial/extra/mysql.cnf b/packaging/deb-xenial/extra/mysql.cnf deleted file mode 100644 index 04caab3e8af8..000000000000 --- a/packaging/deb-xenial/extra/mysql.cnf +++ /dev/null @@ -1,26 +0,0 @@ -# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# -# The MySQL Community Server configuration file. -# -# For explanations see -# http://dev.mysql.com/doc/mysql/en/server-system-variables.html - -# * IMPORTANT: Additional settings that can override those from this file! -# The files must end with '.cnf', otherwise they'll be ignored. -# -!includedir /etc/mysql/conf.d/ -!includedir /etc/mysql/mysql.conf.d/ diff --git a/packaging/deb-xenial/extra/mysql.conf.cnf b/packaging/deb-xenial/extra/mysql.conf.cnf deleted file mode 100644 index b76afea3bfbf..000000000000 --- a/packaging/deb-xenial/extra/mysql.conf.cnf +++ /dev/null @@ -1,22 +0,0 @@ -# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# -# The MySQL Commercial Client configuration file. -# -# For explanations see -# http://dev.mysql.com/doc/mysql/en/server-system-variables.html - -[mysql] diff --git a/packaging/deb-xenial/extra/mysql_embedded.1 b/packaging/deb-xenial/extra/mysql_embedded.1 deleted file mode 100644 index 735c4e05ae07..000000000000 --- a/packaging/deb-xenial/extra/mysql_embedded.1 +++ /dev/null @@ -1 +0,0 @@ -.so man1/mysql.1 diff --git a/packaging/deb-xenial/extra/mysqld.cnf b/packaging/deb-xenial/extra/mysqld.cnf deleted file mode 100644 index f8275a9ec2c5..000000000000 --- a/packaging/deb-xenial/extra/mysqld.cnf +++ /dev/null @@ -1,48 +0,0 @@ -# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# -# The MySQL Commercial Server configuration file. -# -# For explanations see -# http://dev.mysql.com/doc/mysql/en/server-system-variables.html - -[mysqld_safe] -pid-file = /var/run/mysqld/mysqld.pid -socket = /var/run/mysqld/mysqld.sock -nice = 0 - -[mysqld] -user = mysql -pid-file = /var/run/mysqld/mysqld.pid -socket = /var/run/mysqld/mysqld.sock -port = 3306 -basedir = /usr -datadir = /var/lib/mysql -tmpdir = /tmp -lc-messages-dir = /usr/share/mysql -explicit_defaults_for_timestamp - -# Instead of skip-networking the default is now to listen only on -# localhost which is more compatible and is not less secure. -bind-address = 127.0.0.1 - -log-error = /var/log/mysql/error.log - -# Recommended in standard MySQL setup -sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES - -# Disabling symbolic-links is recommended to prevent assorted security risks -symbolic-links=0 diff --git a/packaging/deb-xenial/libmysqlclient-dev.install b/packaging/deb-xenial/libmysqlclient-dev.install deleted file mode 100644 index 1040c1c1d79c..000000000000 --- a/packaging/deb-xenial/libmysqlclient-dev.install +++ /dev/null @@ -1,29 +0,0 @@ -# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -usr/include/mysql/*.h -usr/include/mysql/mysql/*.h -usr/include/mysql/mysql/*.h.pp -usr/include/mysql/mysql/psi/*.h -usr/lib/*/libmysqlclient.a -usr/lib/*/libmysqlclient.so -usr/lib/*/libmysqlservices.a -usr/bin/mysql_config -usr/bin/mysql_config_editor -usr/share/man/man1/mysql_config.1 -usr/share/man/man1/mysql_config_editor.1 -# legal -usr/share/doc/libmysqlclient-dev/COPYING -usr/share/doc/libmysqlclient-dev/README diff --git a/packaging/deb-xenial/libmysqlclient-dev.lintian-overrides b/packaging/deb-xenial/libmysqlclient-dev.lintian-overrides deleted file mode 100644 index 5684af7a0eab..000000000000 --- a/packaging/deb-xenial/libmysqlclient-dev.lintian-overrides +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -libmysqlclient-dev: extra-license-file usr/share/doc/libmysqlclient-dev/LICENSE.mysql -libmysqlclient-dev: extra-license-file usr/share/doc/libmysqlclient-dev/COPYING.gz -libmysqlclient-dev: copyright-should-refer-to-common-license-file-for-lgpl -# Due to static linking this cannot be avoided and hence being overridden -libmysqlclient-dev: embedded-library diff --git a/packaging/deb-xenial/libmysqlclient18.install b/packaging/deb-xenial/libmysqlclient18.install deleted file mode 100644 index 34656aecc6a2..000000000000 --- a/packaging/deb-xenial/libmysqlclient18.install +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -usr/lib/*/libmysqlclient.so.* -# legal -usr/share/doc/libmysqlclient18/COPYING -usr/share/doc/libmysqlclient18/README diff --git a/packaging/deb-xenial/libmysqlclient18.lintian-overrides b/packaging/deb-xenial/libmysqlclient18.lintian-overrides deleted file mode 100644 index b209f7d66760..000000000000 --- a/packaging/deb-xenial/libmysqlclient18.lintian-overrides +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -libmysqlclient18: extra-license-file usr/share/doc/libmysqlclient18/LICENSE.mysql -libmysqlclient18: extra-license-file usr/share/doc/libmysqlclient18/COPYING.gz -libmysqlclient18: copyright-should-refer-to-common-license-file-for-lgpl -# Due to static linking this cannot be avoided and hence being overridden -libmysqlclient18: embedded-library diff --git a/packaging/deb-xenial/libmysqld-dev.install b/packaging/deb-xenial/libmysqld-dev.install deleted file mode 100644 index 25d84d70cd9a..000000000000 --- a/packaging/deb-xenial/libmysqld-dev.install +++ /dev/null @@ -1,20 +0,0 @@ -# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -usr/lib/*/libmysqld.a -usr/lib/*/libmysqld-debug.a -# legal -usr/share/doc/libmysqld-dev/COPYING -usr/share/doc/libmysqld-dev/README diff --git a/packaging/deb-xenial/libmysqld-dev.lintian-overrides b/packaging/deb-xenial/libmysqld-dev.lintian-overrides deleted file mode 100644 index 5f23271b8747..000000000000 --- a/packaging/deb-xenial/libmysqld-dev.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -libmysqld-dev: extra-license-file usr/share/doc/libmysqld-dev/LICENSE.mysql -libmysqld-dev: extra-license-file usr/share/doc/libmysqld-dev/COPYING.gz -libmysqld-dev: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-xenial/mysql-client.install b/packaging/deb-xenial/mysql-client.install deleted file mode 100644 index bdfd340499f3..000000000000 --- a/packaging/deb-xenial/mysql-client.install +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# legal -usr/share/doc/mysql-client/COPYING -usr/share/doc/mysql-client/README diff --git a/packaging/deb-xenial/mysql-client.lintian-overrides b/packaging/deb-xenial/mysql-client.lintian-overrides deleted file mode 100644 index 3a13702ca300..000000000000 --- a/packaging/deb-xenial/mysql-client.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-client: extra-license-file usr/share/doc/mysql-client/LICENSE.mysql -mysql-client: extra-license-file usr/share/doc/mysql-client/COPYING.gz -mysql-client: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-xenial/mysql-common.dirs b/packaging/deb-xenial/mysql-common.dirs deleted file mode 100644 index 6879c646d0f9..000000000000 --- a/packaging/deb-xenial/mysql-common.dirs +++ /dev/null @@ -1,16 +0,0 @@ -# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -etc/mysql/conf.d diff --git a/packaging/deb-xenial/mysql-common.install b/packaging/deb-xenial/mysql-common.install deleted file mode 100644 index 80d940ebbe71..000000000000 --- a/packaging/deb-xenial/mysql-common.install +++ /dev/null @@ -1,32 +0,0 @@ -# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# configuration file and script -debian/extra/my.cnf.fallback etc/mysql/ -debian/extra/mysql.conf.cnf etc/mysql/conf.d/mysql.cnf - -usr/share/aclocal/mysql.m4 -usr/share/mysql/docs/INFO_SRC -usr/share/mysql/docs/INFO_BIN -usr/share/mysql/docs/ChangeLog -# localized error msgs -usr/share/mysql/*/errmsg.sys -usr/share/mysql/errmsg-utf8.txt -# charsets -usr/share/mysql/charsets/*.xml -usr/share/mysql/charsets/README -# legal -usr/share/doc/mysql-common/COPYING -usr/share/doc/mysql-common/README diff --git a/packaging/deb-xenial/mysql-common.lintian-overrides b/packaging/deb-xenial/mysql-common.lintian-overrides deleted file mode 100644 index 567b8c95a67d..000000000000 --- a/packaging/deb-xenial/mysql-common.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-common: extra-license-file usr/share/doc/mysql-common/LICENSE.mysql -mysql-common: extra-license-file usr/share/doc/mysql-common/COPYING.gz -mysql-common: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-xenial/mysql-common.postinst b/packaging/deb-xenial/mysql-common.postinst deleted file mode 100644 index ce1cd9e2f4c1..000000000000 --- a/packaging/deb-xenial/mysql-common.postinst +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/sh - -# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -set -e - -if [ "$1" = "configure" ]; then - # Low priority fallback for client use when no server is installed. - update-alternatives --install /etc/mysql/my.cnf my.cnf /etc/mysql/my.cnf.fallback 100 -fi - -#DEBHELPER# diff --git a/packaging/deb-xenial/mysql-common.postrm b/packaging/deb-xenial/mysql-common.postrm deleted file mode 100644 index 3c37399e176b..000000000000 --- a/packaging/deb-xenial/mysql-common.postrm +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -set -e - -if [ "$1" = "purge" ]; then - rmdir /etc/mysql 2>/dev/null || true - update-alternatives --remove-all my.cnf -fi - -#DEBHELPER# diff --git a/packaging/deb-xenial/mysql-community-bench.install b/packaging/deb-xenial/mysql-community-bench.install deleted file mode 100644 index bb46ab336c7b..000000000000 --- a/packaging/deb-xenial/mysql-community-bench.install +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -usr/lib/mysql/sql-bench/* -# legal -usr/share/doc/mysql-community-bench/COPYING -usr/share/doc/mysql-community-bench/README diff --git a/packaging/deb-xenial/mysql-community-bench.lintian-overrides b/packaging/deb-xenial/mysql-community-bench.lintian-overrides deleted file mode 100644 index 7d6a1cf94ace..000000000000 --- a/packaging/deb-xenial/mysql-community-bench.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-community-bench: extra-license-file usr/share/doc/mysql-community-bench/LICENSE.mysql -mysql-community-bench: extra-license-file usr/share/doc/mysql-community-bench/COPYING.gz -mysql-community-bench: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-xenial/mysql-community-client.install b/packaging/deb-xenial/mysql-community-client.install deleted file mode 100644 index 531f12d9fcdb..000000000000 --- a/packaging/deb-xenial/mysql-community-client.install +++ /dev/null @@ -1,56 +0,0 @@ -# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# binaries -usr/bin/myisam_ftdump -usr/bin/mysql -usr/bin/mysql_embedded -usr/bin/mysqlaccess -usr/bin/mysqlaccess.conf -usr/bin/mysqladmin -usr/bin/mysqlbug -usr/bin/mysqlcheck -usr/bin/mysql_client_test -usr/bin/mysql_client_test_embedded -usr/bin/mysqldump -usr/bin/mysqldumpslow -usr/bin/mysql_find_rows -usr/bin/mysql_fix_extensions -usr/bin/mysqlimport -usr/bin/mysqlshow -usr/bin/mysqlslap -usr/bin/mysql_waitpid -# man pages -usr/share/man/man1/myisam_ftdump.1 -usr/share/man/man1/mysql.1 -usr/share/man/man1/mysql_embedded.1 -usr/share/man/man1/mysqlaccess.1 -usr/share/man/man1/mysqladmin.1 -usr/share/man/man1/mysqlbug.1 -usr/share/man/man1/mysqlcheck.1 -usr/share/man/man1/mysql_client_test.1 -usr/share/man/man1/mysql_client_test_embedded.1 -usr/share/man/man1/mysqldump.1 -usr/share/man/man1/mysqldumpslow.1 -usr/share/man/man1/mysql_find_rows.1 -usr/share/man/man1/mysql_fix_extensions.1 -usr/share/man/man1/mysqlimport.1 -usr/share/man/man1/mysqlman.1 -usr/share/man/man1/mysqlshow.1 -usr/share/man/man1/mysqlslap.1 -usr/share/man/man1/mysql_waitpid.1 -# legal -usr/share/doc/mysql-community-client/COPYING -usr/share/doc/mysql-community-client/README diff --git a/packaging/deb-xenial/mysql-community-client.lintian-overrides b/packaging/deb-xenial/mysql-community-client.lintian-overrides deleted file mode 100644 index fa916a0659a0..000000000000 --- a/packaging/deb-xenial/mysql-community-client.lintian-overrides +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-community-client: extra-license-file usr/share/doc/mysql-community-client/LICENSE.mysql -mysql-community-client: extra-license-file usr/share/doc/mysql-community-clienti/COPYING.gz -mysql-community-client: copyright-should-refer-to-common-license-file-for-lgpl -# Due to static linking this cannot be avoided and hence being overridden -mysql-community-client: embedded-library diff --git a/packaging/deb-xenial/mysql-community-server.config b/packaging/deb-xenial/mysql-community-server.config deleted file mode 100755 index d97d53489cce..000000000000 --- a/packaging/deb-xenial/mysql-community-server.config +++ /dev/null @@ -1,88 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -. /usr/share/debconf/confmodule - -if [ "$1" = "configure" ] && [ -z "$2" ]; -then - - set -e - - PKG_LIST=mysql-server-5.5:mysql-server-5.6:mysql-community-server:mysql-commercial-server - INSTALLED_PKG=none - MYSQLDATA=/var/lib/mysql - - IFS_BACKUP=${IFS} - IFS=":" - for PKG in ${PKG_LIST}; - do - STATUS=$(dpkg -s ${PKG} 2> /dev/null | grep Status: | cut -d' ' -f4) - if [ "${STATUS}" = "installed" ]; - then - INSTALLED_PKG=${PKG} - break - fi - done - IFS=${IFS_BACKUP} - - if [ "${INSTALLED_PKG}" = "none" ]; - then - if [ -d ${MYSQLDATA} -o -L ${MYSQLDATA} ]; - then - db_input high mysql-community-server/data-dir || true - else - db_fset mysql-community-server/data-dir seen true - fi - - while :; do - PASSWD="" - db_input high mysql-community-server/root-pass || true - db_go - - db_get mysql-community-server/root-pass - if [ -z "${RET}" ]; - then - db_fset mysql-community-server/root-pass seen true - db_fset mysql-community-server/re-root-pass seen true - break - fi - PASSWD="${RET}" - - db_input high mysql-community-server/re-root-pass || true - db_go - - db_get mysql-community-server/re-root-pass - if [ "${RET}" == "${PASSWD}" ]; - then - PASSWD="" - break - fi - - db_fset mysql-community-server/root-pass-mismatch seen false - db_input critical mysql-community-server/root-pass-mismatch - db_set mysql-community-server/root-pass "" - db_set mysql-community-server/re-root-pass "" - done - - else - db_fset mysql-community-server/data-dir seen true - db_fset mysql-community-server/root-pass seen true - db_fset mysql-community-server/re-root-pass seen true - fi - - set +e -fi diff --git a/packaging/deb-xenial/mysql-community-server.dirs b/packaging/deb-xenial/mysql-community-server.dirs deleted file mode 100644 index 4a021150101c..000000000000 --- a/packaging/deb-xenial/mysql-community-server.dirs +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -etc/mysql/mysql.conf.d -etc/init.d -usr/lib/mysql -usr/lib/mysql/plugin diff --git a/packaging/deb-xenial/mysql-community-server.install b/packaging/deb-xenial/mysql-community-server.install deleted file mode 100644 index d5b6b2b0eff8..000000000000 --- a/packaging/deb-xenial/mysql-community-server.install +++ /dev/null @@ -1,94 +0,0 @@ -# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# binaries -usr/bin/innochecksum -usr/bin/msql2mysql -usr/bin/myisamchk -usr/bin/myisamlog -usr/bin/myisampack -usr/bin/my_print_defaults -usr/bin/mysqlbinlog -usr/bin/mysql_convert_table_format -usr/bin/mysqld_multi -usr/bin/mysqld_safe -usr/bin/mysqlhotcopy -usr/bin/mysql_install_db -usr/bin/mysql_plugin -usr/bin/mysql_secure_installation -usr/bin/mysql_setpermission -usr/bin/mysqltest -usr/bin/mysqltest_embedded -usr/bin/mysql_tzinfo_to_sql -usr/bin/mysql_upgrade -usr/bin/mysql_zap -usr/bin/perror -usr/bin/replace -usr/bin/resolveip -usr/bin/resolve_stack_dump -usr/sbin/mysqld -# debug binary -usr/sbin/mysqld-debug -# man pages -usr/share/man/man1/innochecksum.1 -usr/share/man/man1/comp_err.1 -usr/share/man/man1/msql2mysql.1 -usr/share/man/man1/myisamchk.1 -usr/share/man/man1/myisamlog.1 -usr/share/man/man1/myisampack.1 -usr/share/man/man1/my_print_defaults.1 -usr/share/man/man1/mysqlbinlog.1 -usr/share/man/man1/mysql_convert_table_format.1 -usr/share/man/man1/mysqld_multi.1 -usr/share/man/man1/mysqld_safe.1 -usr/share/man/man1/mysqlhotcopy.1 -usr/share/man/man1/mysql_install_db.1 -usr/share/man/man1/mysql_plugin.1 -usr/share/man/man1/mysql_secure_installation.1 -usr/share/man/man1/mysql.server.1 -usr/share/man/man1/mysql_setpermission.1 -usr/share/man/man1/mysql-stress-test.pl.1 -usr/share/man/man1/mysqltest.1 -usr/share/man/man1/mysqltest_embedded.1 -usr/share/man/man1/mysql_tzinfo_to_sql.1 -usr/share/man/man1/mysql_upgrade.1 -usr/share/man/man1/mysql_zap.1 -usr/share/man/man1/perror.1 -usr/share/man/man1/replace.1 -usr/share/man/man1/resolveip.1 -usr/share/man/man1/resolve_stack_dump.1 -usr/share/man/man8/mysqld.8 -# confguration files -debian/extra/mysql.cnf etc/mysql/ -debian/extra/mysqld.cnf etc/mysql/mysql.conf.d/ -# app armor profile -etc/apparmor.d/usr.sbin.mysqld -# SQL files -usr/share/mysql/*.sql -# plugins -usr/lib/mysql/plugin/*.so -usr/lib/mysql/plugin/debug/*.so -usr/lib/mysql/plugin/daemon_example.ini -usr/lib/mysql/plugin/debug/daemon_example.ini -# support files -usr/share/mysql/mysqld_multi.server -usr/share/mysql/magic -usr/share/mysql/mysql-log-rotate -usr/share/mysql/mysql-systemd-start -usr/share/mysql/my-default.cnf -usr/share/mysql/dictionary.txt -# legal -usr/share/doc/mysql-community-server/COPYING -usr/share/doc/mysql-community-server/README diff --git a/packaging/deb-xenial/mysql-community-server.lintian-overrides b/packaging/deb-xenial/mysql-community-server.lintian-overrides deleted file mode 100644 index e80759aea149..000000000000 --- a/packaging/deb-xenial/mysql-community-server.lintian-overrides +++ /dev/null @@ -1,23 +0,0 @@ -# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-community-server: extra-license-file usr/share/doc/mysql-community-server/LICENSE.mysql -mysql-community-server: extra-license-file usr/share/doc/mysql-community-server/COPYING.gz -mysql-community-server: copyright-should-refer-to-common-license-file-for-lgpl -# Due to static linking this cannot be avoided and hence being overridden -mysql-community-server: embedded-library -# Since we ship debug plugins so this error is overridden -mysql-community-server: unstripped-binary-or-object usr/lib/mysql/plugin/debug/* diff --git a/packaging/deb-xenial/mysql-community-server.mysql.init b/packaging/deb-xenial/mysql-community-server.mysql.init deleted file mode 100755 index cab9cec69326..000000000000 --- a/packaging/deb-xenial/mysql-community-server.mysql.init +++ /dev/null @@ -1,192 +0,0 @@ -#!/bin/bash -# -### BEGIN INIT INFO -# Provides: mysql -# Required-Start: $remote_fs $syslog -# Required-Stop: $remote_fs $syslog -# Should-Start: $network $time -# Should-Stop: $network $time -# Default-Start: 2 3 4 5 -# Default-Stop: 0 1 6 -# Short-Description: Start/ Stop MySQL Community Server daemon -# Description: This service script facilitates startup and shutdown of -# mysqld daemon throught its wrapper script mysqld_safe -### END INIT INFO -# - -# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -. /lib/lsb/init-functions - -cd / -umask 077 - -MYSQLDATA=/var/lib/mysql -VERSION=$(mysqld --version | grep mysqld | cut -d' ' -f4) - -get_mysql_option() { - RESULT=$(my_print_defaults "$1" | sed -n "s/^--$2=//p" | tail -n 1) - if [ -z "$RESULT" ]; - then - RESULT="$3" - fi - echo $RESULT -} - -get_running () { - PIDFILE=$(get_mysql_option mysqld_safe pid-file "") - if [ -z "$PIDFILE" ]; - then - PIDFILE=$(get_mysql_option mysqld pid-file "$MYSQLDATA/$(hostname).pid") - fi - if [ -e "$PIDFILE" ] && [ -d "/proc/$(cat "$PIDFILE")" ]; - then - echo 1 - else - echo 0 - fi -} - -server_stop () { - RUNNING=$(get_running) - COUNT=0 - while :; do - COUNT=$(( COUNT+1 )) - echo -n . - if [ "${RUNNING}" -eq 0 ]; - then - echo - break - fi - if [ "${COUNT}" -gt 15 ]; - then - echo - return 1 - fi - RUNNING=$(get_running) - sleep 1 - done - return 0 -} - -case "$1" in - 'start') - RUNNING=$(get_running) - if [ "${RUNNING}" -eq 1 ]; - then - log_action_msg "A MySQL Server is already started" - else - MYSQLRUN=/var/run/mysqld - MYSQLDATA=/var/lib/mysql - MYSQLLOG=/var/log/mysql - - if [ ! -d ${MYSQLDATA} -a ! -L ${MYSQLDATA} ]; - then - mkdir ${MYSQLDATA} - chown mysql:mysql ${MYSQLDATA} - chmod 750 ${MYSQLDATA} - fi - - if [ ! -d "${MYSQLDATA}/mysql" -a ! -L "${MYSQLDATA}/mysql" ]; - then - mkdir ${MYSQLDATA}/mysql - chown mysql:mysql ${MYSQLDATA}/mysql - chmod 750 ${MYSQLDATA}/mysql - fi - - if [ ! "$(ls -A ${MYSQLDATA}/mysql)" ]; - then - mysql_install_db --user=mysql > /dev/null - fi - - if [ ! -d ${MYSQLLOG} -a ! -L ${MYSQLLOG} ]; - then - mkdir ${MYSQLLOG} - chown mysql:adm ${MYSQLLOG} - chmod 750 ${MYSQLLOG} - touch ${MYSQLLOG}/error.log - chmod 640 ${MYSQLLOG}/error.log - chown mysql:adm ${MYSQLLOG}/error.log - fi - - if [ ! -d "${MYSQLRUN}" -a ! -L "${MYSQLRUN}" ]; - then - mkdir ${MYSQLRUN} - chown mysql:mysql ${MYSQLRUN} - chmod 755 ${MYSQLRUN} - fi - - /lib/init/apparmor-profile-load usr.sbin.mysqld - - su - mysql -s /bin/bash -c "mysqld_safe > /dev/null &" - for i in 1 2 3 4 5 6; - do - sleep 1 - echo -n . - done - echo - RUNNING=$(get_running) - if [ "${RUNNING}" -eq 1 ]; - then - log_action_msg "MySQL Community Server ${VERSION} is started" - else - log_action_msg "MySQL Community Server ${VERSION} did not start. Please check logs for more details." - fi - fi - ;; - - 'stop') - RUNNING=$(get_running) - if [ "${RUNNING}" -eq 1 ]; - then - killall -15 mysqld - server_stop - if [ "$?" -eq 0 ]; - then - log_action_msg "MySQL Community Server ${VERSION} is stopped" - else - log_action_msg "Attempt to shutdown MySQL Community Server ${VERSION} timed out" - fi - else - log_action_msg "MySQL Community Server ${VERSION} is already stopped" - fi - ;; - - 'restart'|'reload'|'force-reload') - log_action_msg "Stopping MySQL Community Server ${VERSION}" - $0 stop - log_action_msg "Re-starting MySQL Community Server ${VERSION}" - $0 start - ;; - - 'status') - RUNNING=$(get_running) - if [ ${RUNNING} -eq 1 ]; - then - log_action_msg "MySQL Community Server ${VERSION} is running" - else - log_action_msg "MySQL Community Server ${VERSION} is not running" - exit 3 - fi - ;; - - *) - echo "Usage: $SELF start|stop|restart|reload|force-reload|status" - exit 1 - ;; -esac - -exit 0 diff --git a/packaging/deb-xenial/mysql-community-server.mysql.service b/packaging/deb-xenial/mysql-community-server.mysql.service deleted file mode 100644 index e38ab61398ba..000000000000 --- a/packaging/deb-xenial/mysql-community-server.mysql.service +++ /dev/null @@ -1,33 +0,0 @@ -# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# MySQL systemd service file - -[Unit] -Description=MySQL Community Server -After=network.target - -[Install] -WantedBy=multi-user.target - -[Service] -User=mysql -Group=mysql -PermissionsStartOnly=true -ExecStartPre=/usr/share/mysql/mysql-systemd-start pre -ExecStart=/usr/bin/mysqld_safe -ExecStartPost=/usr/share/mysql/mysql-systemd-start post -TimeoutSec=600 -Restart=on-failure diff --git a/packaging/deb-xenial/mysql-community-server.postinst b/packaging/deb-xenial/mysql-community-server.postinst deleted file mode 100755 index 246c2779a93d..000000000000 --- a/packaging/deb-xenial/mysql-community-server.postinst +++ /dev/null @@ -1,95 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -. /usr/share/debconf/confmodule - -take_upstart_job_backup () { - if [ -e "/etc/init/mysql.conf" ] && [ -d "/var/lib/mysql" ]; - then - mv /etc/init/mysql.conf /var/lib/mysql/.mysql.conf.backup - fi -} - -case "$1" in - configure) - - if [ -z "$2" ]; - then - set -e - - update-alternatives --install /etc/mysql/my.cnf my.cnf "/etc/mysql/mysql.cnf" 200 - - MYSQLDATA=/var/lib/mysql - - if [ ! -d "${MYSQLDATA}/mysql" -a ! -L "${MYSQLDATA}/mysql" ]; - then - mkdir ${MYSQLDATA}/mysql - chown mysql:mysql ${MYSQLDATA}/mysql - chmod 750 ${MYSQLDATA}/mysql - if [ ! "$(ls -A ${MYSQLDATA}/mysql)" ]; - then - mysql_install_db --user=mysql > /dev/null - fi - fi - - db_get mysql-community-server/root-pass && PASSWD=${RET} - if [ ! -z "${PASSWD}" ]; - then - db_set mysql-community-server/root-pass "" - db_set mysql-community-server/re-root-pass "" - PASSWD="UPDATE user SET password=PASSWORD('${PASSWD}') WHERE user='root';" - else - PASSWD="" - fi - - SQL=`mktemp` - if [ -f "${SQL}" ]; - then - chmod 700 ${SQL} - cat << EOF > ${SQL} -USE mysql; -${PASSWD} -DELETE FROM user WHERE user=''; -FLUSH PRIVILEGES; -EOF - mysqld --basedir=/usr --bootstrap --user=mysql --skip-grant-tables < $SQL - PASSWD="" - rm -f ${SQL} - fi - - set +e - - fi - - ;; - - abort-upgrade|abort-remove|abort-configure) - - ;; - - *) - exit 1 - ;; -esac - -db_stop - -take_upstart_job_backup - -#DEBHELPER# - -exit 0 diff --git a/packaging/deb-xenial/mysql-community-server.postrm b/packaging/deb-xenial/mysql-community-server.postrm deleted file mode 100755 index 6d9b3ec77d67..000000000000 --- a/packaging/deb-xenial/mysql-community-server.postrm +++ /dev/null @@ -1,155 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -if [ "$1" = purge ] && [ -e /usr/share/debconf/confmodule ]; -then -. /usr/share/debconf/confmodule -fi - -place_upstart_job_back () { - if [ -e "/var/lib/mysql/.mysql.conf.backup" ]; - then - mv /var/lib/mysql/.mysql.conf.backup /etc/init/mysql.conf - fi -} - -get_pcount () { - PSCOUNT=$(ps -ef | grep "/usr/sbin/mysqld" | wc -l) - echo "${PSCOUNT}" -} - -server_stop () { - PSCOUNT=$(get_pcount) - COUNT=0 - while :; do - COUNT=$(( COUNT+1 )) - echo -n . - if [ "${PSCOUNT}" -eq 1 ]; - then - echo - break - fi - if [ "${COUNT}" -gt 15 ]; - then - echo - return 1 - fi - PSCOUNT=$(get_pcount) - sleep 1 - done - return 0 -} - -case "$1" in - remove) - - set -e - - place_upstart_job_back - update-alternatives --remove my.cnf "/etc/mysql/mysql.cnf" - - set +e - - ;; - - purge) - - set -e - - place_upstart_job_back - - MYSQLDATA=/var/lib/mysql - MYSQLLOG=/var/log/mysql - MYSQLRUN=/var/run/mysqld - - server_stop - - db_input high mysql-community-server/remove-data-dir || true - db_go - db_get mysql-community-server/remove-data-dir && RMDATADIR=${RET} - if [ "${RMDATADIR}" = "true" ]; - then - if [ -d ${MYSQLRUN} ] || [ -L ${MYSQLRUN} ]; - then - rm -rf ${MYSQLRUN} - fi - - if [ -d ${MYSQLLOG} ] || [ -L ${MYSQLLOG} ]; - then - rm -rf ${MYSQLLOG} - fi - - if [ -d ${MYSQLDATA} ] || [ -L ${MYSQLDATA} ]; - then - rm -rf ${MYSQLDATA} - fi - - if getent passwd mysql >/dev/null; - then - userdel mysql - fi - fi - - set +e - ;; - - abort-install) - - set -e - - place_upstart_job_back - - if [ -x "/etc/init.d/mysql" ]; - then - invoke-rc.d mysql start || exit $? - else - if [ -d ${MYSQLRUN} ] || [ -L ${MYSQLRUN} ]; - then - rm -rf ${MYSQLRUN} - fi - - if [ -d ${MYSQLLOG} ] || [ -L ${MYSQLLOG} ]; - then - rm -rf ${MYSQLLOG} - fi - - if [ -d ${MYSQLDATA} ] || [ -L ${MYSQLDATA} ]; - then - rm -rf ${MYSQLDATA} - fi - - if getent passwd mysql >/dev/null; - then - userdel mysql - fi - fi - - set +e - ;; - - upgrade|abort-upgrade) - - ;; - - *) - exit 1 - ;; -esac - -#DEBHELPER# - -exit 0 diff --git a/packaging/deb-xenial/mysql-community-server.preinst b/packaging/deb-xenial/mysql-community-server.preinst deleted file mode 100755 index 2a747ba5a463..000000000000 --- a/packaging/deb-xenial/mysql-community-server.preinst +++ /dev/null @@ -1,123 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -get_pcount () { - PSCOUNT=$(ps -ef | grep "/usr/sbin/mysqld" | wc -l) - echo "${PSCOUNT}" -} - -server_stop () { - PSCOUNT=$(get_pcount) - COUNT=0 - while :; do - COUNT=$(( COUNT+1 )) - echo -n . - if [ "${PSCOUNT}" -eq 1 ]; - then - echo - break - fi - if [ "${COUNT}" -gt 15 ]; - then - echo - return 1 - fi - PSCOUNT=$(get_pcount) - sleep 1 - done - return 0 -} - -case "$1" in - install) - - if [ -z "$2" ]; - then - - set -e - - if [ -x "/etc/init.d/mysql" ]; - then - invoke-rc.d mysql stop || exit $? - server_stop - fi - - MYSQLDATA=/var/lib/mysql - MYSQLLOG=/var/log/mysql - MYSQLRUN=/var/run/mysqld - - if ! getent group mysql >/dev/null; - then - addgroup --system mysql >/dev/null - fi - - if ! getent passwd mysql >/dev/null; - then - adduser --ingroup mysql --system --disabled-login --no-create-home --home ${MYSQLDATA} --shell /bin/false --gecos "MySQL Server" mysql >/dev/null - fi - - if [ ! -d ${MYSQLDATA} -a ! -L ${MYSQLDATA} ]; - then - mkdir ${MYSQLDATA} - chown mysql:mysql ${MYSQLDATA} - chmod 750 ${MYSQLDATA} - fi - - if [ ! -d ${MYSQLLOG} -a ! -L ${MYSQLLOG} ]; - then - mkdir ${MYSQLLOG} - chown mysql:adm ${MYSQLLOG} - chmod 750 ${MYSQLLOG} - touch ${MYSQLLOG}/error.log - chmod 640 ${MYSQLLOG}/error.log - chown mysql:adm ${MYSQLLOG}/error.log - fi - - if [ ! -d ${MYSQLRUN} -a ! -L ${MYSQLRUN} ]; - then - mkdir ${MYSQLRUN} - chown mysql:mysql ${MYSQLRUN} - chmod 755 ${MYSQLRUN} - fi - - set +e - - fi - - ;; - - upgrade) - - set -e - - #DEBHELPER# - server_stop - - set +e - - ;; - - abort-upgrade) - - ;; - - *) - exit 1 - ;; -esac - -exit 0 diff --git a/packaging/deb-xenial/mysql-community-server.prerm b/packaging/deb-xenial/mysql-community-server.prerm deleted file mode 100755 index 642c03d888c4..000000000000 --- a/packaging/deb-xenial/mysql-community-server.prerm +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -set -e - -#DEBHELPER# - -set +e - -exit 0 diff --git a/packaging/deb-xenial/mysql-community-server.templates b/packaging/deb-xenial/mysql-community-server.templates deleted file mode 100644 index 7b7e0ac33cdc..000000000000 --- a/packaging/deb-xenial/mysql-community-server.templates +++ /dev/null @@ -1,33 +0,0 @@ -Template: mysql-community-server/root-pass -Type: password -Description: Enter root password: - Please provide a strong password that will be set for the root account of your MySQL database. - Leave it blank if you do not wish to set or change the root password at this time. - -Template: mysql-community-server/re-root-pass -Type: password -Description: Re-enter root password: - Now that you have selected a password for the root account, please confirm by typing it again. Do not share the password with anyone. - -Template: mysql-community-server/root-pass-mismatch -Type: error -Description: The two passwords did not match - Please try again. Make sure you type the exact same password twice. - -Template: mysql-community-server/remove-data-dir -Type: boolean -Default: false -Description: Remove data directory at /var/lib/mysql ? - This operation will remove the data directory that stores all the databases, tables and related meta-data. - It is highly recommended to take data backup before removing the data directory. - -Template: mysql-community-server/data-dir -Type: note -Description: Data directory found when no MySQL server package is installed - A data directory '/var/lib/mysql' is present on this system when no MySQL server - package is currently installed on the system. The directory may be under control of - server package received from third-party vendors. It may also be an unclaimed data - directory from previous removal of mysql packages. - . - It is highly recommended to take data backup. If you have not done so, now would be - the time to take backup in another shell. Once completed, press 'Ok' to continue. diff --git a/packaging/deb-xenial/mysql-community-source.install b/packaging/deb-xenial/mysql-community-source.install deleted file mode 100644 index 8c3fbbb24611..000000000000 --- a/packaging/deb-xenial/mysql-community-source.install +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -../*.dsc usr/src/mysql/ -../*.tar.gz usr/src/mysql/ -../*.tar.xz usr/src/mysql/ -# legal -usr/share/doc/mysql-community-source/COPYING -usr/share/doc/mysql-community-source/README diff --git a/packaging/deb-xenial/mysql-community-source.lintian-overrides b/packaging/deb-xenial/mysql-community-source.lintian-overrides deleted file mode 100644 index 8247923349b2..000000000000 --- a/packaging/deb-xenial/mysql-community-source.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-community-source: extra-license-file usr/share/doc/mysql-community-source/LICENSE.mysql -mysql-community-source: extra-license-file usr/share/doc/mysql-community-source/COPYING.gz -mysql-community-source: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-xenial/mysql-community-test.install b/packaging/deb-xenial/mysql-community-test.install deleted file mode 100644 index 5b33d48892be..000000000000 --- a/packaging/deb-xenial/mysql-community-test.install +++ /dev/null @@ -1,20 +0,0 @@ -# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -usr/lib/mysql-test/* -usr/share/man/man1/mysql-test-run.pl.1 -# legal -usr/share/doc/mysql-community-test/COPYING -usr/share/doc/mysql-community-test/README diff --git a/packaging/deb-xenial/mysql-community-test.links b/packaging/deb-xenial/mysql-community-test.links deleted file mode 100644 index 6a68af051590..000000000000 --- a/packaging/deb-xenial/mysql-community-test.links +++ /dev/null @@ -1,17 +0,0 @@ -# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -usr/lib/mysql-test/mysql-test-run.pl usr/lib/mysql-test/mysql-test-run -usr/lib/mysql-test/mysql-test-run.pl usr/lib/mysql-test/mtr diff --git a/packaging/deb-xenial/mysql-community-test.lintian-overrides b/packaging/deb-xenial/mysql-community-test.lintian-overrides deleted file mode 100644 index 38315bcf58a1..000000000000 --- a/packaging/deb-xenial/mysql-community-test.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-community-test: extra-license-file usr/share/doc/mysql-community-test/LICENSE.mysql -mysql-community-test: extra-license-file usr/share/doc/mysql-community-test/COPYING.gz -mysql-community-test: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-xenial/mysql-server.install b/packaging/deb-xenial/mysql-server.install deleted file mode 100644 index 47255da6238f..000000000000 --- a/packaging/deb-xenial/mysql-server.install +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# legal -usr/share/doc/mysql-server/COPYING -usr/share/doc/mysql-server/README diff --git a/packaging/deb-xenial/mysql-server.lintian-overrides b/packaging/deb-xenial/mysql-server.lintian-overrides deleted file mode 100644 index 8642e14c7163..000000000000 --- a/packaging/deb-xenial/mysql-server.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-server: extra-license-file usr/share/doc/mysql-server/LICENSE.mysql -mysql-server: extra-license-file usr/share/doc/mysql-server/COPYING.gz -mysql-server: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-xenial/mysql-testsuite.install b/packaging/deb-xenial/mysql-testsuite.install deleted file mode 100644 index 342af0454ebc..000000000000 --- a/packaging/deb-xenial/mysql-testsuite.install +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# legal -usr/share/doc/mysql-testsuite/COPYING -usr/share/doc/mysql-testsuite/README diff --git a/packaging/deb-xenial/mysql-testsuite.lintian-overrides b/packaging/deb-xenial/mysql-testsuite.lintian-overrides deleted file mode 100644 index fd192af25947..000000000000 --- a/packaging/deb-xenial/mysql-testsuite.lintian-overrides +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Additional license file is needed so overriding this warning -mysql-testsuite: extra-license-file usr/share/doc/mysql-testsuite/LICENSE.mysql -mysql-testsuite: extra-license-file usr/share/doc/mysql-testsuite/COPYING.gz -mysql-testsuite: copyright-should-refer-to-common-license-file-for-lgpl diff --git a/packaging/deb-xenial/patches/fix-man-page-links.patch b/packaging/deb-xenial/patches/fix-man-page-links.patch deleted file mode 100644 index 004ccdf77d03..000000000000 --- a/packaging/deb-xenial/patches/fix-man-page-links.patch +++ /dev/null @@ -1,14 +0,0 @@ -From: Akhil Mohan -Description: Fix path in man page link. -Bug: http://bugs.mysql.com/bug.php?id=70952 - ---- a/man/mysql_client_test_embedded.1 2013-11-08 19:00:22.000000000 +0530 -+++ b/man/mysql_client_test_embedded.1 2013-11-14 19:29:56.768315219 +0530 -@@ -1 +1 @@ --.so man-gpl-tmp2/mysql_client_test.1 -+.so man1/mysql_client_test.1 ---- a/man/mysqltest_embedded.1 2013-11-08 19:00:22.000000000 +0530 -+++ b/man/mysqltest_embedded.1 2013-11-14 19:31:19.079280675 +0530 -@@ -1 +1 @@ --.so man-gpl-tmp2/mysqltest.1 -+.so man1/mysqltest.1 diff --git a/packaging/deb-xenial/patches/fix-mtr-search-paths.patch b/packaging/deb-xenial/patches/fix-mtr-search-paths.patch deleted file mode 100644 index 8a27a091e6ce..000000000000 --- a/packaging/deb-xenial/patches/fix-mtr-search-paths.patch +++ /dev/null @@ -1,13 +0,0 @@ -From: Akhil Mohan -Description: Adding extra search path for testsuite. - ---- a/mysql-test/lib/mtr_cases.pm 2014-02-24 13:14:37 +0530 -+++ b/mysql-test/lib/mtr_cases.pm 2014-07-02 11:46:24 +0530 -@@ -288,6 +288,7 @@ - { - $suitedir= my_find_dir($::basedir, - ["share/mysql-test/suite", -+ "lib/mysql-test/suite", - "mysql-test/suite", - "internal/mysql-test/suite", - "mysql-test", diff --git a/packaging/deb-xenial/patches/fix-mysql_install_db.patch b/packaging/deb-xenial/patches/fix-mysql_install_db.patch deleted file mode 100644 index 41311b2c8f9e..000000000000 --- a/packaging/deb-xenial/patches/fix-mysql_install_db.patch +++ /dev/null @@ -1,43 +0,0 @@ -From: Terje Røsten -Description: Maintains the pending --skip-my-cnf option in mainline -Bug: - -diff --git a/scripts/mysql_install_db.pl.in b/scripts/mysql_install_db.pl.in -index 440a977..7d068fc 100644 ---- a/scripts/mysql_install_db.pl.in -+++ b/scripts/mysql_install_db.pl.in -@@ -113,6 +113,7 @@ EOF2 - print <{srcdir} and $opt->{basedir} ) - { - error($opt,"Specify either --basedir or --srcdir, not both"); - } --if ( $opt->{'keep-my-cnf'} ) -+if ( $opt->{rpm} || $opt->{'keep-my-cnf'} ) - { - $keep_my_cnf = 1; - } -@@ -664,7 +665,7 @@ if ( $opt->{'skip-name-resolve'} and $resolved and $resolved =~ /\s/ ) - } - - # ---------------------------------------------------------------------- --# Create database directories mysql & test -+# Create database directory mysql - # ---------------------------------------------------------------------- - - # FIXME The shell variant uses "mkdir -p": -@@ -697,7 +698,7 @@ if ($opt_user) - } - } - --foreach my $dir ( $opt->{ldata}, "$opt->{ldata}/mysql", "$opt->{ldata}/test" ) -+foreach my $dir ( $opt->{ldata}, "$opt->{ldata}/mysql") - { - mkdir($dir, 0700) unless -d $dir; - if ($opt_user and -w "/") diff --git a/packaging/deb-xenial/patches/series b/packaging/deb-xenial/patches/series deleted file mode 100644 index 48069e28d474..000000000000 --- a/packaging/deb-xenial/patches/series +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -#fix-man-page-links.patch -fix-mysql_install_db.patch -fix-mtr-search-paths.patch diff --git a/packaging/deb-xenial/rules b/packaging/deb-xenial/rules deleted file mode 100755 index e81d6a22e4a9..000000000000 --- a/packaging/deb-xenial/rules +++ /dev/null @@ -1,137 +0,0 @@ -#!/usr/bin/make -f - -# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -%: - dh $@ - -export DH_VERBOSE=1 -export CFLAGS= -export CXXFLAGS= - -override_dh_auto_configure: - @echo "RULES.$@" - cmake . \ - -DBUILD_CONFIG=mysql_release \ - -DCMAKE_INSTALL_PREFIX=/usr \ - -DINSTALL_DOCDIR=share/mysql/docs \ - -DINSTALL_DOCREADMEDIR=share/mysql \ - -DINSTALL_INCLUDEDIR=include/mysql \ - -DINSTALL_INFODIR=share/mysql/docs \ - -DINSTALL_LIBDIR=lib/$(DEB_HOST_MULTIARCH) \ - -DINSTALL_MANDIR=share/man \ - -DINSTALL_MYSQLSHAREDIR=share/mysql \ - -DINSTALL_MYSQLTESTDIR=lib/mysql-test \ - -DINSTALL_PLUGINDIR=lib/mysql/plugin \ - -DINSTALL_SBINDIR=sbin \ - -DINSTALL_SCRIPTDIR=bin \ - -DINSTALL_SQLBENCHDIR=lib/mysql \ - -DINSTALL_SUPPORTFILESDIR=share/mysql \ - -DMYSQL_DATADIR=/var/lib/mysql \ - -DSYSCONFDIR=/etc/mysql \ - -DMYSQL_UNIX_ADDR=/var/run/mysqld/mysqld.sock \ - -DWITH_SSL=bundled \ - -DWITH_ZLIB=system \ - -DWITH_EXTRA_CHARSETS=all \ - -DWITH_INNODB_MEMCACHED=1 \ - -DCOMPILATION_COMMENT="MySQL Community Server (GPL)" \ - -DINSTALL_LAYOUT=DEB - - cat CMakeCache.txt - touch $@ - -override_dh_auto_build: - @echo "RULES.$@" - $(MAKE) -j8 VERBOSE=1 - touch $@ - -override_dh_auto_test: - @echo "RULES.$@" - echo "No tests run because test 9: pfs_connect_attr is failing unreasonably" - touch $@ - -override_dh_auto_install: - - @echo "RULES.$@" - # complete install first - $(MAKE) install DESTDIR=debian/tmp - # remove all redundant files and links - rm debian/tmp/usr/lib/*/*_r* - rm debian/tmp/usr/lib/mysql-test/cmake_install.cmake - rm debian/tmp/usr/lib/mysql-test/CTestTestfile.cmake - rm debian/tmp/usr/lib/mysql-test/Makefile - # add missing man pages - install -g root -o root -m 0644 debian/extra/mysql_embedded.1 debian/tmp/usr/share/man/man1 - # add MySQL Server debug binary and library to package - install -g root -o root -m 0755 debian/extra/server-binary debian/tmp/usr/sbin/mysqld-debug - install -g root -o root -m 0755 debian/extra/embedded-server debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/libmysqld-debug.a - # add debug plugin libraries to package - install -g root -o root -m 0755 -d debian/tmp/usr/lib/mysql/plugin/debug - for file in debian/extra/*-plugin; do NEW=`echo $$file | cut -d- -f1`; mv $$file $$NEW.so; done - install -g root -o root -m 0755 debian/extra/*.so debian/tmp/usr/lib/mysql/plugin/debug - install -g root -o root -m 0755 debian/extra/daemon_example.ini debian/tmp/usr/lib/mysql/plugin/debug - # add apparmor profile - install -g root -o root -m 0644 -D debian/extra/apparmor-profile debian/tmp/etc/apparmor.d/usr.sbin.mysqld - # add systemd script - install -m 0755 debian/extra/mysql-systemd-start debian/tmp/usr/share/mysql/ - # add directory for legal docs - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-server - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-community-server - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-client - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-community-client - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-common - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/libmysqlclient18 - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/libmysqlclient-dev - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/libmysqld-dev - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-community-bench - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-testsuite - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-community-test - install -g root -o root -m 0755 -d debian/tmp/usr/share/doc/mysql-community-source - # add COPYING file to each package - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-server/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-community-server/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-client/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-community-client/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-common/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/libmysqlclient18/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/libmysqlclient-dev/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/libmysqld-dev/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-community-bench/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-testsuite/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-community-test/COPYING - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/COPYING debian/tmp/usr/share/doc/mysql-community-source/COPYING - # add README file to each package - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-server/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-community-server/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-client/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-community-client/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-common/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/libmysqlclient18/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/libmysqlclient-dev/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/libmysqld-dev/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-community-bench/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-testsuite/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-community-test/README - install -g root -o root -m 0644 debian/tmp/usr/share/mysql/README debian/tmp/usr/share/doc/mysql-community-source/README - touch $@ - -override_dh_installinit: - @echo "RULES.$@" - dh_apparmor -pmysql-community-server --profile-name=usr.sbin.mysqld - dh_systemd_enable --name=mysql - dh_installinit --name=mysql -- defaults 19 21 - dh_systemd_start --restart-after-upgrade - touch $@ diff --git a/packaging/deb-xenial/source/format b/packaging/deb-xenial/source/format deleted file mode 100644 index 163aaf8d82b6..000000000000 --- a/packaging/deb-xenial/source/format +++ /dev/null @@ -1 +0,0 @@ -3.0 (quilt) diff --git a/packaging/deb-xenial/source/include-binaries b/packaging/deb-xenial/source/include-binaries deleted file mode 100644 index a199230861d6..000000000000 --- a/packaging/deb-xenial/source/include-binaries +++ /dev/null @@ -1,34 +0,0 @@ -# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# obscured filename for mysqld-debug, libmysqld-debug.a and debug plugins -debian/extra/server-binary -debian/extra/embedded-server -debian/extra/adt_null-plugin -debian/extra/auth-plugin -debian/extra/auth_socket-plugin -debian/extra/auth_test_plugin-plugin -debian/extra/innodb_engine-plugin -debian/extra/libdaemon_example-plugin -debian/extra/libmemcached-plugin -debian/extra/mypluglib-plugin -debian/extra/mysql_no_login-plugin -debian/extra/qa_auth_client-plugin -debian/extra/qa_auth_interface-plugin -debian/extra/qa_auth_server-plugin -debian/extra/semisync_master-plugin -debian/extra/semisync_slave-plugin -debian/extra/test_udf_services-plugin -debian/extra/validate_password-plugin diff --git a/packaging/deb-xenial/watch b/packaging/deb-xenial/watch deleted file mode 100644 index c45c5e3e89d6..000000000000 --- a/packaging/deb-xenial/watch +++ /dev/null @@ -1,2 +0,0 @@ -version=3 -http://mysql.mirrors.pair.com/Downloads/MySQL-5.6/mysql-([\d\.]+).tar.gz From 5b44726e432dd0ff1afa91ef73479ce787229eda Mon Sep 17 00:00:00 2001 From: Lars Tangvald Date: Mon, 6 Nov 2017 09:48:03 +0100 Subject: [PATCH 0158/1221] Deb packaging: Remove handling of eol'ed Ubuntu 12.04, 15.10 and 16.10 --- packaging/deb-in/CMakeLists.txt | 49 --------------------------------- 1 file changed, 49 deletions(-) diff --git a/packaging/deb-in/CMakeLists.txt b/packaging/deb-in/CMakeLists.txt index 0c9ea040875c..c607ee333d76 100644 --- a/packaging/deb-in/CMakeLists.txt +++ b/packaging/deb-in/CMakeLists.txt @@ -136,21 +136,6 @@ ELSEIF(DEB_CODENAME STREQUAL "stretch") SET (DEB_SERVICE_SERVER_EXECPRE "ExecStartPre=/usr/share/mysql/mysql-systemd-start pre") SET (DEB_INIT_APPARMOR "") -ELSEIF(DEB_CODENAME STREQUAL "precise") - SET (DEB_PLATFORMRELEASE "ubuntu12.04") - SET (DEB_CONTROL_BDEPS "dh-apparmor") - SET (DEB_INSTALL_SOURCE_XZ "") - SET (DEB_RULES_INSTALL_SYSTEMD "") - SET (DEB_RULES_INSTALL_APPARMOR - "install -g root -o root -m 0644 -D debian/extra/apparmor-profile debian/tmp/etc/apparmor.d/usr.sbin.mysqld") - SET (DEB_RULES_APPARMOR_LOAD - "dh_apparmor -pmysql-${DEB_PRODUCTNAME}-server --profile-name=usr.sbin.mysqld") - SET (DEB_RULES_SYSTEMD_ENABLE "") - SET (DEB_RULES_SYSTEMD_START "") - SET (DEB_INSTALL_SERVER_SYSTEMD "") - SET (DEB_INSTALL_SERVER_APPARMOR "etc/apparmor.d/usr.sbin.mysqld") - SET (DEB_SERVICE_SERVER_EXECPRE "") - SET (DEB_INIT_APPARMOR "/lib/init/apparmor-profile-load usr.sbin.mysqld") ELSEIF(DEB_CODENAME STREQUAL "trusty") SET (DEB_PLATFORMRELEASE "ubuntu14.04") SET (DEB_CONTROL_BDEPS "dh-apparmor") @@ -166,23 +151,6 @@ ELSEIF(DEB_CODENAME STREQUAL "trusty") SET (DEB_INSTALL_SERVER_APPARMOR "etc/apparmor.d/usr.sbin.mysqld") SET (DEB_SERVICE_SERVER_EXECPRE "") SET (DEB_INIT_APPARMOR "/lib/init/apparmor-profile-load usr.sbin.mysqld") -ELSEIF(DEB_CODENAME STREQUAL "wily") - SET (DEB_PLATFORMRELEASE "ubuntu15.10") - SET (DEB_CONTROL_BDEPS "dh-apparmor, dh-systemd (>=1.5)") - SET (DEB_INSTALL_SOURCE_XZ "../*.tar.xz usr/src/mysql/") - SET (DEB_RULES_INSTALL_SYSTEMD - "install -m 0755 debian/extra/mysql-systemd-start debian/tmp/usr/share/mysql/") - SET (DEB_RULES_INSTALL_APPARMOR - "install -g root -o root -m 0644 -D debian/extra/apparmor-profile debian/tmp/etc/apparmor.d/usr.sbin.mysqld") - SET (DEB_RULES_APPARMOR_LOAD - "dh_apparmor -pmysql-community-server --profile-name=usr.sbin.mysqld") - SET (DEB_RULES_SYSTEMD_ENABLE "dh_systemd_enable --name=mysql") - SET (DEB_RULES_SYSTEMD_START "dh_systemd_start --restart-after-upgrade") - SET (DEB_INSTALL_SERVER_SYSTEMD "usr/share/mysql/mysql-systemd-start") - SET (DEB_INSTALL_SERVER_APPARMOR "etc/apparmor.d/usr.sbin.mysqld") - SET (DEB_SERVICE_SERVER_EXECPRE - "ExecStartPre=/usr/share/mysql/mysql-systemd-start pre") - SET (DEB_INIT_APPARMOR "/lib/init/apparmor-profile-load usr.sbin.mysqld") ELSEIF(DEB_CODENAME STREQUAL "xenial") SET (DEB_PLATFORMRELEASE "ubuntu16.04") SET (DEB_CONTROL_BDEPS "dh-apparmor, dh-systemd (>=1.5)") @@ -200,23 +168,6 @@ ELSEIF(DEB_CODENAME STREQUAL "xenial") SET (DEB_SERVICE_SERVER_EXECPRE "ExecStartPre=/usr/share/mysql/mysql-systemd-start pre") SET (DEB_INIT_APPARMOR "/lib/apparmor/profile-load usr.sbin.mysqld") -ELSEIF(DEB_CODENAME STREQUAL "yakkety") - SET (DEB_PLATFORMRELEASE "ubuntu16.10") - SET (DEB_CONTROL_BDEPS "dh-apparmor, dh-systemd (>=1.5)") - SET (DEB_INSTALL_SOURCE_XZ "../*.tar.xz usr/src/mysql/") - SET (DEB_RULES_INSTALL_SYSTEMD - "install -m 0755 debian/extra/mysql-systemd-start debian/tmp/usr/share/mysql/") - SET (DEB_RULES_INSTALL_APPARMOR - "install -g root -o root -m 0644 -D debian/extra/apparmor-profile debian/tmp/etc/apparmor.d/usr.sbin.mysqld") - SET (DEB_RULES_APPARMOR_LOAD - "dh_apparmor -pmysql-${DEB_PRODUCTNAME}-server --profile-name=usr.sbin.mysqld") - SET (DEB_RULES_SYSTEMD_ENABLE "dh_systemd_enable --name=mysql") - SET (DEB_RULES_SYSTEMD_START "dh_systemd_start --restart-after-upgrade") - SET (DEB_INSTALL_SERVER_SYSTEMD "usr/share/mysql/mysql-systemd-start") - SET (DEB_INSTALL_SERVER_APPARMOR "etc/apparmor.d/usr.sbin.mysqld") - SET (DEB_SERVICE_SERVER_EXECPRE - "ExecStartPre=/usr/share/mysql/mysql-systemd-start pre") - SET (DEB_INIT_APPARMOR "/lib/apparmor/profile-load usr.sbin.mysqld") ELSEIF(DEB_CODENAME STREQUAL "zesty") SET (DEB_PLATFORMRELEASE "ubuntu17.04") SET (DEB_CONTROL_BDEPS "dh-apparmor, dh-systemd (>=1.5)") From ed05c8786e6d4575afe9da3333d0f80be8649411 Mon Sep 17 00:00:00 2001 From: Aditya A Date: Mon, 6 Nov 2017 23:09:26 +0530 Subject: [PATCH 0159/1221] Bug #26256456 INNODB CRASHED WHEN MASTER THREAD EVICT DICT_TABLE_T OBJECT PROBLEM ------- 1) Flush table command fails to drop the aborted index because the drop_aborted condition is checked after n_ref_count is decremented. 2) While removing the table from cache in background ,we were first dropping the clustered index and then checking for aborted index which is wrong because to drop aborted index we require to traverse to the index list.Since the index list is deleted we ended up in an assert FIX --- 1) Check drop_aborted condition before decrementing n_ref_count. 2) When removing the table from cache in background ,check for aborted condition first,drop the aborted indexes and then proceed to drop the rest of indexes. --- storage/innobase/dict/dict0dict.cc | 66 ++++++++++++++++-------------- 1 file changed, 35 insertions(+), 31 deletions(-) diff --git a/storage/innobase/dict/dict0dict.cc b/storage/innobase/dict/dict0dict.cc index ae4cb0b845ad..b2def1edffea 100644 --- a/storage/innobase/dict/dict0dict.cc +++ b/storage/innobase/dict/dict0dict.cc @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2017, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2012, Facebook Inc. This program is free software; you can redistribute it and/or modify it under @@ -556,6 +556,8 @@ dict_table_close( indexes after an aborted online index creation */ { + + ibool drop_aborted; if (!dict_locked) { mutex_enter(&dict_sys->mutex); } @@ -563,6 +565,11 @@ dict_table_close( ut_ad(mutex_own(&dict_sys->mutex)); ut_a(table->n_ref_count > 0); + drop_aborted = try_drop + && table->drop_aborted + && table->n_ref_count == 1 + && dict_table_get_first_index(table); + --table->n_ref_count; /* Force persistent stats re-read upon next open of the table @@ -591,12 +598,6 @@ dict_table_close( if (!dict_locked) { table_id_t table_id = table->id; - ibool drop_aborted; - - drop_aborted = try_drop - && table->drop_aborted - && table->n_ref_count == 1 - && dict_table_get_first_index(table); mutex_exit(&dict_sys->mutex); @@ -2054,6 +2055,33 @@ dict_table_remove_from_cache_low( foreign->referenced_index = NULL; } + /* The check for dropped index should happen before we release + all the indexes */ + + if (lru_evict && table->drop_aborted) { + /* Do as dict_table_try_drop_aborted() does. */ + + trx_t* trx = trx_allocate_for_background(); + + ut_ad(mutex_own(&dict_sys->mutex)); +#ifdef UNIV_SYNC_DEBUG + ut_ad(rw_lock_own(&dict_operation_lock, RW_LOCK_EX)); +#endif /* UNIV_SYNC_DEBUG */ + /* Mimic row_mysql_lock_data_dictionary(). */ + trx->dict_operation_lock_mode = RW_X_LATCH; + + trx_set_dict_operation(trx, TRX_DICT_OP_INDEX); + + /* Silence a debug assertion in row_merge_drop_indexes(). */ + ut_d(table->n_ref_count++); + row_merge_drop_indexes(trx, table, TRUE); + ut_d(table->n_ref_count--); + ut_ad(table->n_ref_count == 0); + trx_commit_for_mysql(trx); + trx->dict_operation_lock_mode = 0; + trx_free_for_background(trx); + } + /* Remove the indexes from the cache */ for (index = UT_LIST_GET_LAST(table->indexes); @@ -2086,30 +2114,6 @@ dict_table_remove_from_cache_low( dict_table_autoinc_store(table); } - if (lru_evict && table->drop_aborted) { - /* Do as dict_table_try_drop_aborted() does. */ - - trx_t* trx = trx_allocate_for_background(); - - ut_ad(mutex_own(&dict_sys->mutex)); -#ifdef UNIV_SYNC_DEBUG - ut_ad(rw_lock_own(&dict_operation_lock, RW_LOCK_EX)); -#endif /* UNIV_SYNC_DEBUG */ - /* Mimic row_mysql_lock_data_dictionary(). */ - trx->dict_operation_lock_mode = RW_X_LATCH; - - trx_set_dict_operation(trx, TRX_DICT_OP_INDEX); - - /* Silence a debug assertion in row_merge_drop_indexes(). */ - ut_d(table->n_ref_count++); - row_merge_drop_indexes(trx, table, TRUE); - ut_d(table->n_ref_count--); - ut_ad(table->n_ref_count == 0); - trx_commit_for_mysql(trx); - trx->dict_operation_lock_mode = 0; - trx_free_for_background(trx); - } - size = mem_heap_get_size(table->heap) + strlen(table->name) + 1; ut_ad(dict_sys->size >= size); From 6bb5158c8c7c18532a04cf7537314bebd1961d67 Mon Sep 17 00:00:00 2001 From: Parveez Baig Date: Mon, 6 Nov 2017 10:31:38 +0530 Subject: [PATCH 0160/1221] WL11144: Improve test coverage for create user/alter/drop if exists with replication This patch adds test coverage for scenarios around create/alter/drop user IF[NOT] exists. --- .../suite/rpl/r/rpl_user_if_exists.result | 177 +++++++++++++++ .../suite/rpl/t/rpl_user_if_exists.test | 213 +++++++++++++++++- 2 files changed, 389 insertions(+), 1 deletion(-) diff --git a/mysql-test/suite/rpl/r/rpl_user_if_exists.result b/mysql-test/suite/rpl/r/rpl_user_if_exists.result index 5d4f4d41840e..1940feb0d1d8 100644 --- a/mysql-test/suite/rpl/r/rpl_user_if_exists.result +++ b/mysql-test/suite/rpl/r/rpl_user_if_exists.result @@ -98,4 +98,181 @@ Note 3162 User 'slave_user2'@'localhost' does not exist. FLUSH PRIVILEGES; include/sync_slave_sql_with_master.inc # Search warnings in the server log +WL11144: Check that ALTER/CREATE/DROP USER IF [NOT] EXISTS will succesfully replicate in multi user scenarios +[connection master] +# All users exist on master, some on slave +CREATE USER u1,u2; +set @@session.sql_log_bin=0; +CREATE USER u3,u4; +set @@session.sql_log_bin=1; +ALTER USER IF EXISTS u1, u2, u3, u4 ACCOUNT LOCK; +CREATE USER IF NOT EXISTS u1, u2, u3, u4; +Warnings: +Note 3163 User 'u1'@'%' already exists. +Note 3163 User 'u2'@'%' already exists. +Note 3163 User 'u3'@'%' already exists. +Note 3163 User 'u4'@'%' already exists. +DROP USER u1, u2, u3, u4; +CREATE USER u1,u2; +set @@session.sql_log_bin=0; +CREATE USER u3,u4; +set @@session.sql_log_bin=1; +DROP USER IF EXISTS u1, u2, u3, u4; +include/sync_slave_sql_with_master.inc +# All users exist on master, none on slave +[connection master] +set @@session.sql_log_bin=0; +CREATE USER u1,u2,u3,u4; +set @@session.sql_log_bin=1; +ALTER USER IF EXISTS u1, u2, u3, u4 ACCOUNT LOCK; +CREATE USER IF NOT EXISTS u1, u2, u3, u4; +Warnings: +Note 3163 User 'u1'@'%' already exists. +Note 3163 User 'u2'@'%' already exists. +Note 3163 User 'u3'@'%' already exists. +Note 3163 User 'u4'@'%' already exists. +DROP USER u1, u2, u3, u4; +set @@session.sql_log_bin=0; +CREATE USER u1,u2,u3,u4; +set @@session.sql_log_bin=1; +DROP USER IF EXISTS u1, u2, u3, u4; +include/sync_slave_sql_with_master.inc +# Some users exist on master, others on slave +[connection master] +set @@session.sql_log_bin=0; +CREATE USER u3,u4; +set @@session.sql_log_bin=1; +include/sync_slave_sql_with_master.inc +CREATE USER u1,u2; +[connection master] +ALTER USER IF EXISTS u1, u2, u3, u4 ACCOUNT LOCK; +Warnings: +Note 3162 User 'u1'@'%' does not exist. +Note 3162 User 'u2'@'%' does not exist. +CREATE USER IF NOT EXISTS u1, u2, u3, u4; +Warnings: +Note 3163 User 'u3'@'%' already exists. +Note 3163 User 'u4'@'%' already exists. +set @@session.sql_log_bin=0; +DROP USER u1,u2; +set @@session.sql_log_bin=1; +include/sync_slave_sql_with_master.inc +DROP USER u3,u4; +[connection master] +DROP USER IF EXISTS u1, u2, u3, u4; +Warnings: +Note 3162 User 'u1'@'%' does not exist. +Note 3162 User 'u2'@'%' does not exist. +# Some users exist on master, all on slave +include/sync_slave_sql_with_master.inc +CREATE USER u1,u2; +[connection master] +CREATE USER u3,u4; +ALTER USER IF EXISTS u1, u2, u3, u4 ACCOUNT LOCK; +Warnings: +Note 3162 User 'u1'@'%' does not exist. +Note 3162 User 'u2'@'%' does not exist. +CREATE USER IF NOT EXISTS u1, u2, u3, u4; +Warnings: +Note 3163 User 'u3'@'%' already exists. +Note 3163 User 'u4'@'%' already exists. +set sql_log_bin=0; +DROP USER u1,u2; +set sql_log_bin=1; +DROP USER IF EXISTS u1, u2, u3, u4; +Warnings: +Note 3162 User 'u1'@'%' does not exist. +Note 3162 User 'u2'@'%' does not exist. +include/sync_slave_sql_with_master.inc +# Some users exist on master, none on slave +[connection master] +set @@session.sql_log_bin=0; +CREATE USER u3,u4; +set @@session.sql_log_bin=1; +ALTER USER IF EXISTS u1, u2, u3, u4 ACCOUNT LOCK; +Warnings: +Note 3162 User 'u1'@'%' does not exist. +Note 3162 User 'u2'@'%' does not exist. +CREATE USER IF NOT EXISTS u1, u2, u3, u4; +Warnings: +Note 3163 User 'u3'@'%' already exists. +Note 3163 User 'u4'@'%' already exists. +DROP USER u1, u2, u3, u4; +set @@session.sql_log_bin=0; +CREATE USER u3,u4; +set @@session.sql_log_bin=1; +DROP USER IF EXISTS u1, u2, u3, u4; +Warnings: +Note 3162 User 'u1'@'%' does not exist. +Note 3162 User 'u2'@'%' does not exist. +# No users exist on master, some on slave +include/sync_slave_sql_with_master.inc +CREATE USER u3,u4; +[connection master] +ALTER USER IF EXISTS u1, u2, u3, u4 ACCOUNT LOCK; +Warnings: +Note 3162 User 'u1'@'%' does not exist. +Note 3162 User 'u2'@'%' does not exist. +Note 3162 User 'u3'@'%' does not exist. +Note 3162 User 'u4'@'%' does not exist. +CREATE USER IF NOT EXISTS u1, u2, u3, u4; +DROP USER u1, u2; +set @@session.sql_log_bin=0; +DROP USER u3,u4; +set @@session.sql_log_bin=1; +DROP USER IF EXISTS u1, u2, u3, u4; +Warnings: +Note 3162 User 'u1'@'%' does not exist. +Note 3162 User 'u2'@'%' does not exist. +Note 3162 User 'u3'@'%' does not exist. +Note 3162 User 'u4'@'%' does not exist. +# No users exist on master, all on slave +include/sync_slave_sql_with_master.inc +CREATE USER u1,u2,u3,u4; +[connection master] +ALTER USER IF EXISTS u1, u2, u3, u4 ACCOUNT LOCK; +Warnings: +Note 3162 User 'u1'@'%' does not exist. +Note 3162 User 'u2'@'%' does not exist. +Note 3162 User 'u3'@'%' does not exist. +Note 3162 User 'u4'@'%' does not exist. +CREATE USER IF NOT EXISTS u1, u2, u3, u4; +set @@session.sql_log_bin=0; +DROP USER u1, u2, u3, u4; +set @@session.sql_log_bin=1; +DROP USER IF EXISTS u1, u2, u3, u4; +Warnings: +Note 3162 User 'u1'@'%' does not exist. +Note 3162 User 'u2'@'%' does not exist. +Note 3162 User 'u3'@'%' does not exist. +Note 3162 User 'u4'@'%' does not exist. +CREATE USER IF NOT EXISTS u1 PASSWORD EXPIRE INTERVAL 66666 DAY; +ERROR HY000: Incorrect DAY value: '66666' +ALTER USER IF EXISTS u1 PASSWORD EXPIRE INTERVAL 66666 DAY; +ERROR HY000: Incorrect DAY value: '66666' +CREATE USER IF NOT EXISTS u1 PASSWORD EXPIRE INTERVAL 66666888888888888888 DAY; +ERROR 42000: Only integers allowed as number here near '66666888888888888888 DAY' at line 1 +ALTER USER IF EXISTS u1 PASSWORD EXPIRE INTERVAL 66666888888888888888 DAY; +ERROR 42000: Only integers allowed as number here near '66666888888888888888 DAY' at line 1 +include/assert.inc [assert that the above Event has not been added to binlog] +include/assert.inc [assert that the GTID has not been generated] +CREATE USER u3 IDENTIFIED WITH 'mysql_native_password'; +CREATE USER IF NOT EXISTS u1 IDENTIFIED WITH 'shsh',u2 IDENTIFIED WITH 'sha256_password',u3 IDENTIFIED WITH 'sha256_password'; +ERROR HY000: Plugin 'shsh' is not loaded +include/sync_slave_sql_with_master.inc +include/assert.inc [assert that u3's auth_plugin has not changed] +[connection master] +DROP USER u2; +CREATE USER u1; +CREATE USER IF NOT EXISTS u1 IDENTIFIED WITH 'shsh',u2 IDENTIFIED BY 'pass',u3 IDENTIFIED WITH 'sha256_password'; +ERROR HY000: Plugin 'shsh' is not loaded +include/sync_slave_sql_with_master.inc +include/assert.inc [assert that u3's auth_plugin has not changed] +[connection master] +ALTER USER IF EXISTS u1 IDENTIFIED WITH 'shsh',u2 IDENTIFIED BY 'xyz',u3 IDENTIFIED WITH 'sha256_password'; +ERROR HY000: Plugin 'shsh' is not loaded +include/sync_slave_sql_with_master.inc +include/assert.inc [assert that u3's auth_plugin has been changed by alter] +[connection master] +DROP USER u1,u2,u3; include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_user_if_exists.test b/mysql-test/suite/rpl/t/rpl_user_if_exists.test index 2ecc0dc1710b..c4ac2e87961c 100644 --- a/mysql-test/suite/rpl/t/rpl_user_if_exists.test +++ b/mysql-test/suite/rpl/t/rpl_user_if_exists.test @@ -95,5 +95,216 @@ let SEARCH_FILE= $server_log; --let SEARCH_PATTERN= Following users were specified in CREATE USER IF NOT EXISTS --source include/search_pattern_in_file.inc +--echo WL11144: Check that ALTER/CREATE/DROP USER IF [NOT] EXISTS will succesfully replicate in multi user scenarios + +--source include/rpl_connection_master.inc +--echo # All users exist on master, some on slave + +CREATE USER u1,u2; +set @@session.sql_log_bin=0; +CREATE USER u3,u4; +set @@session.sql_log_bin=1; + +ALTER USER IF EXISTS u1, u2, u3, u4 ACCOUNT LOCK; +CREATE USER IF NOT EXISTS u1, u2, u3, u4; +DROP USER u1, u2, u3, u4; + +CREATE USER u1,u2; +set @@session.sql_log_bin=0; +CREATE USER u3,u4; +set @@session.sql_log_bin=1; + +DROP USER IF EXISTS u1, u2, u3, u4; +--source include/sync_slave_sql_with_master.inc + +--echo # All users exist on master, none on slave + +--source include/rpl_connection_master.inc +set @@session.sql_log_bin=0; +CREATE USER u1,u2,u3,u4; +set @@session.sql_log_bin=1; + +ALTER USER IF EXISTS u1, u2, u3, u4 ACCOUNT LOCK; +CREATE USER IF NOT EXISTS u1, u2, u3, u4; +DROP USER u1, u2, u3, u4; + +set @@session.sql_log_bin=0; +CREATE USER u1,u2,u3,u4; +set @@session.sql_log_bin=1; + +DROP USER IF EXISTS u1, u2, u3, u4; +--source include/sync_slave_sql_with_master.inc + +--echo # Some users exist on master, others on slave + +--source include/rpl_connection_master.inc +set @@session.sql_log_bin=0; +CREATE USER u3,u4; +set @@session.sql_log_bin=1; + +--source include/sync_slave_sql_with_master.inc +CREATE USER u1,u2; + +--source include/rpl_connection_master.inc +ALTER USER IF EXISTS u1, u2, u3, u4 ACCOUNT LOCK; +CREATE USER IF NOT EXISTS u1, u2, u3, u4; + +set @@session.sql_log_bin=0; +DROP USER u1,u2; +set @@session.sql_log_bin=1; + +--source include/sync_slave_sql_with_master.inc +DROP USER u3,u4; + +--source include/rpl_connection_master.inc +DROP USER IF EXISTS u1, u2, u3, u4; + +--echo # Some users exist on master, all on slave + +--source include/sync_slave_sql_with_master.inc +CREATE USER u1,u2; + +--source include/rpl_connection_master.inc +CREATE USER u3,u4; + +ALTER USER IF EXISTS u1, u2, u3, u4 ACCOUNT LOCK; +CREATE USER IF NOT EXISTS u1, u2, u3, u4; + +set sql_log_bin=0; +DROP USER u1,u2; +set sql_log_bin=1; + +DROP USER IF EXISTS u1, u2, u3, u4; +--source include/sync_slave_sql_with_master.inc + +--echo # Some users exist on master, none on slave + +--source include/rpl_connection_master.inc +set @@session.sql_log_bin=0; +CREATE USER u3,u4; +set @@session.sql_log_bin=1; + +ALTER USER IF EXISTS u1, u2, u3, u4 ACCOUNT LOCK; +CREATE USER IF NOT EXISTS u1, u2, u3, u4; +DROP USER u1, u2, u3, u4; + +set @@session.sql_log_bin=0; +CREATE USER u3,u4; +set @@session.sql_log_bin=1; +DROP USER IF EXISTS u1, u2, u3, u4; + +--echo # No users exist on master, some on slave + +--source include/sync_slave_sql_with_master.inc +CREATE USER u3,u4; + +--source include/rpl_connection_master.inc + +ALTER USER IF EXISTS u1, u2, u3, u4 ACCOUNT LOCK; +CREATE USER IF NOT EXISTS u1, u2, u3, u4; +DROP USER u1, u2; + +set @@session.sql_log_bin=0; +DROP USER u3,u4; +set @@session.sql_log_bin=1; + +DROP USER IF EXISTS u1, u2, u3, u4; + +--echo # No users exist on master, all on slave + +--source include/sync_slave_sql_with_master.inc + +CREATE USER u1,u2,u3,u4; + +--source include/rpl_connection_master.inc + +ALTER USER IF EXISTS u1, u2, u3, u4 ACCOUNT LOCK; +CREATE USER IF NOT EXISTS u1, u2, u3, u4; + +set @@session.sql_log_bin=0; +DROP USER u1, u2, u3, u4; +set @@session.sql_log_bin=1; + +DROP USER IF EXISTS u1, u2, u3, u4; + +# Check that if Create/alter user if exists gets ERROR it won't be logged in the binary log. +# If GTID mode is ON check that GTID won't be generated. + +--let $pos_before= query_get_value(show master status,Position,1) +--let $gtid_executed_before= `SELECT @@GLOBAL.GTID_EXECUTED` + +# Gets error due to INCORRECT day value specified. +--error ER_WRONG_VALUE +CREATE USER IF NOT EXISTS u1 PASSWORD EXPIRE INTERVAL 66666 DAY; +--error ER_WRONG_VALUE +ALTER USER IF EXISTS u1 PASSWORD EXPIRE INTERVAL 66666 DAY; + +# Gets error as only INTEGERS are allowed. +--error ER_PARSE_ERROR +CREATE USER IF NOT EXISTS u1 PASSWORD EXPIRE INTERVAL 66666888888888888888 DAY; +--error ER_PARSE_ERROR +ALTER USER IF EXISTS u1 PASSWORD EXPIRE INTERVAL 66666888888888888888 DAY; + +# Check that the above statements have not been logged in binary log +--let $assert_text= assert that the above Event has not been added to binlog +--let $assert_cond= [SHOW MASTER STATUS, Position,1] = $pos_before +--source include/assert.inc + +--let $gtid_executed_after= `SELECT @@GLOBAL.GTID_EXECUTED` +# Check that the GTID has not been generated for the above failed statements +--let $assert_text= assert that the GTID has not been generated +--let $assert_cond= "$gtid_executed_after" = "$gtid_executed_before" +--source include/assert.inc + +# Check that replication works correctly in multi create/alter statements +# where create/alter of some user gets failed. + +# User u1 does not exists + +CREATE USER u3 IDENTIFIED WITH 'mysql_native_password'; +# CREATE gets ERROR since shsh auth_plugin do not exists +--error ER_PLUGIN_IS_NOT_LOADED +CREATE USER IF NOT EXISTS u1 IDENTIFIED WITH 'shsh',u2 IDENTIFIED WITH 'sha256_password',u3 IDENTIFIED WITH 'sha256_password'; +--source include/sync_slave_sql_with_master.inc + +# Check that user u3's auth_plugin has not changed +--let $auth_plugin= query_get_value(select *from mysql.user where User='u3',plugin, 1) +--let $assert_text= assert that u3's auth_plugin has not changed +--let $assert_cond= "mysql_native_password" = "$auth_plugin" +--source include/assert.inc + +--source include/rpl_connection_master.inc +DROP USER u2; + +# User u1 exists + +CREATE USER u1; +# CREATE gets ERROR since shsh auth_plugin do not exists +--error ER_PLUGIN_IS_NOT_LOADED +CREATE USER IF NOT EXISTS u1 IDENTIFIED WITH 'shsh',u2 IDENTIFIED BY 'pass',u3 IDENTIFIED WITH 'sha256_password'; +--source include/sync_slave_sql_with_master.inc + +# Check that user u3's auth_plugin has not changed +--let $auth_plugin= query_get_value(select *from mysql.user where User='u3',plugin, 1) +--let $assert_text= assert that u3's auth_plugin has not changed +--let $assert_cond= "$auth_plugin" = "mysql_native_password" +--source include/assert.inc + +--source include/rpl_connection_master.inc + +# ALTER gets ERROR since shsh auth_plugin do not exists +--error ER_PLUGIN_IS_NOT_LOADED +ALTER USER IF EXISTS u1 IDENTIFIED WITH 'shsh',u2 IDENTIFIED BY 'xyz',u3 IDENTIFIED WITH 'sha256_password'; + +--source include/sync_slave_sql_with_master.inc + +# Check that user u3's auth_plugin has got changed +--let $auth_plugin= query_get_value(select *from mysql.user where User='u3',plugin, 1) +--let $assert_text= assert that u3's auth_plugin has been changed by alter +--let $assert_cond= "$auth_plugin" = "sha256_password" +--source include/assert.inc + +--source include/rpl_connection_master.inc +DROP USER u1,u2,u3; + --source include/rpl_end.inc -# End: From c6998afc928d46babd2842b08c17379483d8616c Mon Sep 17 00:00:00 2001 From: Nuno Carvalho Date: Fri, 3 Nov 2017 18:05:18 +0100 Subject: [PATCH 0161/1221] BUG#27049034: SOMETIMES MEMBERS ENTER IN ERROR STATE AFTER LONG RECOVERY In Group Replication, when a member join a group it goes through the recovery process in order to have the same data as of the group. The recovery process is composed by 3 stages: 1) Apply existent transactions on group_replication_applier, if existent, this happens when this member already was a member of the group and left with transactions to apply. 2) Fetch and apply the data the new member is missing when compared with the group. This happens through a asynchronous replication channel, named group_replication_recovery, which stop condition is apply all data until the moment on which the new member joined, marked by View_change_log_event. While this is ongoing, the concurrent group workload is being queued and will be deal with on the next stage. 3) Apply the queued transactions during stage 2 and then switch the member status to ONLINE. The stop condition is: 5.7: the new member will wait until the queue is empty and group_replication_applier applied all transactions. 8.0: the new member will wait until the number of transactions queued during the 2nd stage are applied. On this bug, at the end of the 3rd stage, the recovery process reached its termination condition, that is, all accounted transactions are applied. On that *exact* moment, a new transaction is being queued. Please remember that transactions are materialized as events on binary and relay logs. When the applier signals that applied all transactions, it is also blindly searching for partial transactions, that will remove to avoid future applier errors, which would happen if the applier did stop at this point. Though, this search and remove does only make sense on applier stop cases. On execution completeness that must not be done, otherwise it can corrupt or purge the applier relay log, which can led to data loss. To solve the above issue, when the applier is waiting for execution completeness, it does not search and remove partial transactions. --- rapid/plugin/group_replication/include/applier.h | 9 +++++++-- rapid/plugin/group_replication/src/applier.cc | 8 +++++--- rapid/plugin/group_replication/src/recovery.cc | 2 +- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/rapid/plugin/group_replication/include/applier.h b/rapid/plugin/group_replication/include/applier.h index 737f06f868a9..3f59c1dc98d0 100644 --- a/rapid/plugin/group_replication/include/applier.h +++ b/rapid/plugin/group_replication/include/applier.h @@ -138,7 +138,8 @@ class Applier_module_interface bool wait_for_execution= true)= 0; virtual void awake_applier_module()= 0; virtual void interrupt_applier_suspension_wait()= 0; - virtual int wait_for_applier_event_execution(double timeout)= 0; + virtual int wait_for_applier_event_execution(double timeout, + bool check_and_purge_partial_transactions)= 0; virtual size_t get_message_queue_size()= 0; virtual Member_applier_state get_applier_status()= 0; virtual void add_suspension_packet()= 0; @@ -432,13 +433,17 @@ class Applier_module: public Applier_module_interface @param timeout the time (seconds) after which the method returns if the above condition was not satisfied + @param check_and_purge_partial_transactions + on successful executions, check and purge partial + transactions in the relay log @return the operation status @retval 0 All transactions were executed @retval -1 A timeout occurred @retval -2 An error occurred */ - virtual int wait_for_applier_event_execution(double timeout); + virtual int wait_for_applier_event_execution(double timeout, + bool check_and_purge_partial_transactions); /** Returns the handler instance in the applier module responsible for diff --git a/rapid/plugin/group_replication/src/applier.cc b/rapid/plugin/group_replication/src/applier.cc index 32428d31b90f..dbab2bf09748 100644 --- a/rapid/plugin/group_replication/src/applier.cc +++ b/rapid/plugin/group_replication/src/applier.cc @@ -786,7 +786,7 @@ Applier_module::wait_for_applier_complete_suspension(bool *abort_flag, { error= APPLIER_GTID_CHECK_TIMEOUT_ERROR; //timeout error while (error == APPLIER_GTID_CHECK_TIMEOUT_ERROR && !(*abort_flag)) - error= wait_for_applier_event_execution(1); //blocking + error= wait_for_applier_event_execution(1, true); //blocking } return (error == APPLIER_RELAY_LOG_NOT_INITED); @@ -816,7 +816,8 @@ Applier_module::is_applier_thread_waiting() } int -Applier_module::wait_for_applier_event_execution(double timeout) +Applier_module::wait_for_applier_event_execution(double timeout, + bool check_and_purge_partial_transactions) { DBUG_ENTER("Applier_module::wait_for_applier_event_execution"); int error= 0; @@ -834,7 +835,8 @@ Applier_module::wait_for_applier_event_execution(double timeout) the applier thread will release the lock and update the applier thread execution position correctly and safely. */ - if (((Applier_handler*)event_applier)->is_partial_transaction_on_relay_log()) + if (check_and_purge_partial_transactions && + ((Applier_handler*)event_applier)->is_partial_transaction_on_relay_log()) { error= purge_applier_queue_and_restart_applier_module(); } diff --git a/rapid/plugin/group_replication/src/recovery.cc b/rapid/plugin/group_replication/src/recovery.cc index 014ec530aa51..5b1359d6f2e5 100644 --- a/rapid/plugin/group_replication/src/recovery.cc +++ b/rapid/plugin/group_replication/src/recovery.cc @@ -513,7 +513,7 @@ int Recovery_module::wait_for_applier_module_recovery() { if (recovery_completion_policy == RECOVERY_POLICY_WAIT_EXECUTED) { - int error= applier_module->wait_for_applier_event_execution(1); + int error= applier_module->wait_for_applier_event_execution(1, false); if (!error) applier_monitoring= false; /* purecov: begin inspected */ From 81753e747324436a91d4e8a4758293978ea7ea30 Mon Sep 17 00:00:00 2001 From: Aakanksha Verma Date: Wed, 8 Nov 2017 17:42:55 +0530 Subject: [PATCH 0162/1221] Bug #26492721 MYSQL/INNODB CRASHES DURING ALTER TABLE PROBLEM While doing an alter table that does multiple change columns , the heap assigned for the particular table increases and corresponding increase to dict_sys->size isn't done because of which the dict_sys->size keeps decreasing with every iteration of set of alter tables provided in the bug page hitting the assertion dict_sys->size > 0 . FIX Fix is to add a check for any table heap size increase during change column and add the increased value of heap size to dict_sys->size to avoid it getting diminished on subsequent runs of alter tables. Reviewed by: Jimmy Yang RB: 17817 --- storage/innobase/dict/dict0mem.cc | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/storage/innobase/dict/dict0mem.cc b/storage/innobase/dict/dict0mem.cc index b39e1e171ee8..f5bfd49e9f6a 100644 --- a/storage/innobase/dict/dict0mem.cc +++ b/storage/innobase/dict/dict0mem.cc @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2017, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2012, Facebook Inc. This program is free software; you can redistribute it and/or modify it under @@ -300,11 +300,20 @@ dict_mem_table_col_rename_low( char* col_names; if (to_len > from_len) { + ulint table_size_before_rename_col + = mem_heap_get_size(table->heap); col_names = static_cast( mem_heap_alloc( table->heap, full_len + to_len - from_len)); - + ulint table_size_after_rename_col + = mem_heap_get_size(table->heap); + if (table_size_before_rename_col + != table_size_after_rename_col) { + dict_sys->size += + table_size_after_rename_col + - table_size_before_rename_col; + } memcpy(col_names, table->col_names, prefix_len); } else { col_names = const_cast(table->col_names); From 29d58e95c006ed1050af2f5d37067fab49b1fd27 Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Thu, 9 Nov 2017 01:17:02 +0530 Subject: [PATCH 0163/1221] From 0ee067229c784df83c8e1d85b232b6252c323b82 Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Thu, 9 Nov 2017 08:36:59 +0100 Subject: [PATCH 0164/1221] Bug#26022865 BUILD FOR WINDOWS-S12-64BIT,ADVANCED IS FAILING ON PB2 MYSQL-5.6 Remove cmake code for signing executables. Automatic signing has always failed anyways. It should be done manually as part of the release process. --- .../build_configurations/mysql_release.cmake | 7 --- cmake/install_macros.cmake | 60 +------------------ 2 files changed, 1 insertion(+), 66 deletions(-) diff --git a/cmake/build_configurations/mysql_release.cmake b/cmake/build_configurations/mysql_release.cmake index 7d54e2aec775..588089431248 100644 --- a/cmake/build_configurations/mysql_release.cmake +++ b/cmake/build_configurations/mysql_release.cmake @@ -100,13 +100,6 @@ IF(NOT COMPILATION_COMMENT) SET(COMPILATION_COMMENT "MySQL Community Server (GPL)") ENDIF() -IF(WIN32) - IF(NOT CMAKE_USING_VC_FREE_TOOLS) - # Sign executables with authenticode certificate - SET(SIGNCODE 1 CACHE BOOL "") - ENDIF() -ENDIF() - IF(UNIX) SET(WITH_EXTRA_CHARSETS all CACHE STRING "") IF(EXISTS "${CMAKE_SOURCE_DIR}/COPYING") diff --git a/cmake/install_macros.cmake b/cmake/install_macros.cmake index be243a429240..5475dbe26861 100644 --- a/cmake/install_macros.cmake +++ b/cmake/install_macros.cmake @@ -1,4 +1,4 @@ -# Copyright (c) 2009, 2014, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2009, 2017, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -151,60 +151,6 @@ IF(UNIX) ENDIF() ENDMACRO() -IF(WIN32) - OPTION(SIGNCODE "Sign executables and dlls with digital certificate" OFF) - MARK_AS_ADVANCED(SIGNCODE) - IF(SIGNCODE) - SET(SIGNTOOL_PARAMETERS - /a /t http://timestamp.verisign.com/scripts/timstamp.dll - CACHE STRING "parameters for signtool (list)") - FIND_PROGRAM(SIGNTOOL_EXECUTABLE signtool) - IF(NOT SIGNTOOL_EXECUTABLE) - MESSAGE(FATAL_ERROR - "signtool is not found. Signing executables not possible") - ENDIF() - IF(NOT DEFINED SIGNCODE_ENABLED) - FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/testsign.c "int main(){return 0;}") - MAKE_DIRECTORY(${CMAKE_CURRENT_BINARY_DIR}/testsign) - TRY_COMPILE(RESULT ${CMAKE_CURRENT_BINARY_DIR}/testsign ${CMAKE_CURRENT_BINARY_DIR}/testsign.c - COPY_FILE ${CMAKE_CURRENT_BINARY_DIR}/testsign.exe - ) - - EXECUTE_PROCESS(COMMAND - ${SIGNTOOL_EXECUTABLE} sign ${SIGNTOOL_PARAMETERS} ${CMAKE_CURRENT_BINARY_DIR}/testsign.exe - RESULT_VARIABLE ERR ERROR_QUIET OUTPUT_QUIET - ) - IF(ERR EQUAL 0) - SET(SIGNCODE_ENABLED 1 CACHE INTERNAL "Can sign executables") - ELSE() - MESSAGE(STATUS "Disable authenticode signing for executables") - SET(SIGNCODE_ENABLED 0 CACHE INTERNAL "Invalid or missing certificate") - ENDIF() - ENDIF() - MARK_AS_ADVANCED(SIGNTOOL_EXECUTABLE SIGNTOOL_PARAMETERS) - ENDIF() -ENDIF() - -MACRO(SIGN_TARGET target) - GET_TARGET_PROPERTY(target_type ${target} TYPE) - IF(target_type AND NOT target_type MATCHES "STATIC") - GET_TARGET_PROPERTY(target_location ${target} LOCATION) - IF(CMAKE_GENERATOR MATCHES "Visual Studio") - STRING(REPLACE "${CMAKE_CFG_INTDIR}" "\${CMAKE_INSTALL_CONFIG_NAME}" - target_location ${target_location}) - ENDIF() - INSTALL(CODE - "EXECUTE_PROCESS(COMMAND - ${SIGNTOOL_EXECUTABLE} sign ${SIGNTOOL_PARAMETERS} ${target_location} - RESULT_VARIABLE ERR) - IF(NOT \${ERR} EQUAL 0) - MESSAGE(FATAL_ERROR \"Error signing ${target_location}\") - ENDIF() - ") - ENDIF() -ENDMACRO() - - # Installs targets, also installs pdbs on Windows. # # @@ -225,10 +171,6 @@ FUNCTION(MYSQL_INSTALL_TARGETS) FOREACH(target ${TARGETS}) - # If signing is required, sign executables before installing - IF(SIGNCODE AND SIGNCODE_ENABLED) - SIGN_TARGET(${target}) - ENDIF() # Install man pages on Unix IF(UNIX) GET_TARGET_PROPERTY(target_location ${target} LOCATION) From 12333385c1f38ca5a5667ca708b3008980251d7e Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Thu, 9 Nov 2017 08:45:45 +0100 Subject: [PATCH 0165/1221] dos2unix cmake/mysql_add_executable.cmake --- cmake/mysql_add_executable.cmake | 96 ++++++++++++++++---------------- 1 file changed, 48 insertions(+), 48 deletions(-) diff --git a/cmake/mysql_add_executable.cmake b/cmake/mysql_add_executable.cmake index b1e1d3129e6c..bcbbe7d4931c 100644 --- a/cmake/mysql_add_executable.cmake +++ b/cmake/mysql_add_executable.cmake @@ -1,48 +1,48 @@ -# Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -# Add executable plus some additional MySQL specific stuff -# Usage (same as for standard CMake's ADD_EXECUTABLE) -# -# MYSQL_ADD_EXECUTABLE(target source1...sourceN) -# -# MySQL specifics: -# - instruct CPack to install executable under ${CMAKE_INSTALL_PREFIX}/bin directory -# On Windows : -# - add version resource -# - instruct CPack to do autenticode signing if SIGNCODE is set - -INCLUDE(cmake_parse_arguments) - -FUNCTION (MYSQL_ADD_EXECUTABLE) - # Pass-through arguments for ADD_EXECUTABLE - MYSQL_PARSE_ARGUMENTS(ARG - "WIN32;MACOSX_BUNDLE;EXCLUDE_FROM_ALL;DESTINATION;COMPONENT" - "" - ${ARGN} - ) - LIST(GET ARG_DEFAULT_ARGS 0 target) - LIST(REMOVE_AT ARG_DEFAULT_ARGS 0) - - SET(sources ${ARG_DEFAULT_ARGS}) - ADD_VERSION_INFO(${target} EXECUTABLE sources) - ADD_EXECUTABLE(${target} ${ARG_WIN32} ${ARG_MACOSX_BUNDLE} ${ARG_EXCLUDE_FROM_ALL} ${sources}) - # tell CPack where to install - IF(NOT ARG_EXCLUDE_FROM_ALL) - IF(NOT ARG_DESTINATION) - SET(ARG_DESTINATION ${INSTALL_BINDIR}) +# Copyright (c) 2009, 2017, Oracle and/or its affiliates. All rights reserved. +# +# 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 + +# Add executable plus some additional MySQL specific stuff +# Usage (same as for standard CMake's ADD_EXECUTABLE) +# +# MYSQL_ADD_EXECUTABLE(target source1...sourceN) +# +# MySQL specifics: +# - instruct CPack to install executable under ${CMAKE_INSTALL_PREFIX}/bin directory +# On Windows : +# - add version resource +# - instruct CPack to do autenticode signing if SIGNCODE is set + +INCLUDE(cmake_parse_arguments) + +FUNCTION (MYSQL_ADD_EXECUTABLE) + # Pass-through arguments for ADD_EXECUTABLE + MYSQL_PARSE_ARGUMENTS(ARG + "WIN32;MACOSX_BUNDLE;EXCLUDE_FROM_ALL;DESTINATION;COMPONENT" + "" + ${ARGN} + ) + LIST(GET ARG_DEFAULT_ARGS 0 target) + LIST(REMOVE_AT ARG_DEFAULT_ARGS 0) + + SET(sources ${ARG_DEFAULT_ARGS}) + ADD_VERSION_INFO(${target} EXECUTABLE sources) + ADD_EXECUTABLE(${target} ${ARG_WIN32} ${ARG_MACOSX_BUNDLE} ${ARG_EXCLUDE_FROM_ALL} ${sources}) + # tell CPack where to install + IF(NOT ARG_EXCLUDE_FROM_ALL) + IF(NOT ARG_DESTINATION) + SET(ARG_DESTINATION ${INSTALL_BINDIR}) ENDIF() IF(ARG_COMPONENT) SET(COMP COMPONENT ${ARG_COMPONENT}) @@ -50,7 +50,7 @@ FUNCTION (MYSQL_ADD_EXECUTABLE) SET(COMP COMPONENT ${MYSQL_INSTALL_COMPONENT}) ELSE() SET(COMP COMPONENT Client) - ENDIF() - MYSQL_INSTALL_TARGETS(${target} DESTINATION ${ARG_DESTINATION} ${COMP}) - ENDIF() + ENDIF() + MYSQL_INSTALL_TARGETS(${target} DESTINATION ${ARG_DESTINATION} ${COMP}) + ENDIF() ENDFUNCTION() From 2daa5b167f0183f672aa8788d156fbdef3106207 Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Thu, 9 Nov 2017 10:53:03 +0100 Subject: [PATCH 0166/1221] From 0fe910d7813d74983314369576bdfc95e3773334 Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Thu, 9 Nov 2017 13:31:38 +0100 Subject: [PATCH 0167/1221] Bug#26022865 BUILD FOR WINDOWS-S12-64BIT,ADVANCED IS FAILING ON PB2 MYSQL-5.6 Remove cmake code for signing executables. Automatic signing has always failed anyways. It should be done manually as part of the release process. --- .../build_configurations/mysql_release.cmake | 9 +-- cmake/install_macros.cmake | 60 +------------------ 2 files changed, 2 insertions(+), 67 deletions(-) diff --git a/cmake/build_configurations/mysql_release.cmake b/cmake/build_configurations/mysql_release.cmake index 87dd43a5650d..219179c3fa82 100644 --- a/cmake/build_configurations/mysql_release.cmake +++ b/cmake/build_configurations/mysql_release.cmake @@ -1,4 +1,4 @@ -# Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2010, 2017, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -25,13 +25,6 @@ IF(NOT COMPILATION_COMMENT) SET(COMPILATION_COMMENT "MySQL Community Server (GPL)") ENDIF() -IF(WIN32) - IF(NOT CMAKE_USING_VC_FREE_TOOLS) - # Sign executables with authenticode certificate - SET(SIGNCODE 1 CACHE BOOL "") - ENDIF() -ENDIF() - IF(UNIX) SET(WITH_EXTRA_CHARSETS all CACHE STRING "") diff --git a/cmake/install_macros.cmake b/cmake/install_macros.cmake index 83bd6bd05956..d1de151f0227 100644 --- a/cmake/install_macros.cmake +++ b/cmake/install_macros.cmake @@ -1,4 +1,4 @@ -# Copyright (c) 2009, 2014, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2009, 2017, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -151,60 +151,6 @@ IF(UNIX) ENDIF() ENDMACRO() -IF(WIN32) - OPTION(SIGNCODE "Sign executables and dlls with digital certificate" OFF) - MARK_AS_ADVANCED(SIGNCODE) - IF(SIGNCODE) - SET(SIGNTOOL_PARAMETERS - /a /t http://timestamp.verisign.com/scripts/timstamp.dll - CACHE STRING "parameters for signtool (list)") - FIND_PROGRAM(SIGNTOOL_EXECUTABLE signtool) - IF(NOT SIGNTOOL_EXECUTABLE) - MESSAGE(FATAL_ERROR - "signtool is not found. Signing executables not possible") - ENDIF() - IF(NOT DEFINED SIGNCODE_ENABLED) - FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/testsign.c "int main(){return 0;}") - MAKE_DIRECTORY(${CMAKE_CURRENT_BINARY_DIR}/testsign) - TRY_COMPILE(RESULT ${CMAKE_CURRENT_BINARY_DIR}/testsign ${CMAKE_CURRENT_BINARY_DIR}/testsign.c - COPY_FILE ${CMAKE_CURRENT_BINARY_DIR}/testsign.exe - ) - - EXECUTE_PROCESS(COMMAND - ${SIGNTOOL_EXECUTABLE} sign ${SIGNTOOL_PARAMETERS} ${CMAKE_CURRENT_BINARY_DIR}/testsign.exe - RESULT_VARIABLE ERR ERROR_QUIET OUTPUT_QUIET - ) - IF(ERR EQUAL 0) - SET(SIGNCODE_ENABLED 1 CACHE INTERNAL "Can sign executables") - ELSE() - MESSAGE(STATUS "Disable authenticode signing for executables") - SET(SIGNCODE_ENABLED 0 CACHE INTERNAL "Invalid or missing certificate") - ENDIF() - ENDIF() - MARK_AS_ADVANCED(SIGNTOOL_EXECUTABLE SIGNTOOL_PARAMETERS) - ENDIF() -ENDIF() - -MACRO(SIGN_TARGET target) - GET_TARGET_PROPERTY(target_type ${target} TYPE) - IF(target_type AND NOT target_type MATCHES "STATIC") - GET_TARGET_PROPERTY(target_location ${target} LOCATION) - IF(CMAKE_GENERATOR MATCHES "Visual Studio") - STRING(REPLACE "${CMAKE_CFG_INTDIR}" "\${CMAKE_INSTALL_CONFIG_NAME}" - target_location ${target_location}) - ENDIF() - INSTALL(CODE - "EXECUTE_PROCESS(COMMAND - ${SIGNTOOL_EXECUTABLE} sign ${SIGNTOOL_PARAMETERS} ${target_location} - RESULT_VARIABLE ERR) - IF(NOT \${ERR} EQUAL 0) - MESSAGE(FATAL_ERROR \"Error signing ${target_location}\") - ENDIF() - ") - ENDIF() -ENDMACRO() - - # Installs targets, also installs pdbs on Windows. # # @@ -225,10 +171,6 @@ FUNCTION(MYSQL_INSTALL_TARGETS) FOREACH(target ${TARGETS}) - # If signing is required, sign executables before installing - IF(SIGNCODE AND SIGNCODE_ENABLED) - SIGN_TARGET(${target}) - ENDIF() # Install man pages on Unix IF(UNIX) GET_TARGET_PROPERTY(target_location ${target} LOCATION) From 86e07a04530ee0d3ffe3b7c1ece7a0a5c125dd53 Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Fri, 10 Nov 2017 11:11:10 +0530 Subject: [PATCH 0168/1221] From 6f9332b3da9f14ff373dfd9a21ff6fa089634c38 Mon Sep 17 00:00:00 2001 From: Jaideep Karande Date: Fri, 10 Nov 2017 08:31:05 +0100 Subject: [PATCH 0169/1221] Bug#27067956: TEST GR_APPLIER_SLAVE_COMMANDS FAILS SPORADICALY ON PB2 STOP START STOP GR Applier is causing additional warnings being logged in error file because of previous pending operations. Test case has been changed to use wait when required. --- .../mtr/r/gr_applier_slave_commands.result | 24 ++++++++++++------- .../mtr/t/gr_applier_slave_commands.test | 20 +++++++++------- 2 files changed, 28 insertions(+), 16 deletions(-) diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_applier_slave_commands.result b/rapid/plugin/group_replication/tests/mtr/r/gr_applier_slave_commands.result index bd19bef94e8f..f19d62255000 100644 --- a/rapid/plugin/group_replication/tests/mtr/r/gr_applier_slave_commands.result +++ b/rapid/plugin/group_replication/tests/mtr/r/gr_applier_slave_commands.result @@ -38,18 +38,22 @@ SHOW SLAVE STATUS FOR CHANNEL 'group_replication_applier'; ERROR HY000: SHOW SLAVE STATUS cannot be performed on channel 'group_replication_applier'. # START SLAVE SQL_THREAD command will work for group_replication_applier -START SLAVE SQL_THREAD FOR CHANNEL 'group_replication_applier'; +include/gr_start_applier_sql_thread.inc +START SLAVE SQL_THREAD FOR CHANNEL "group_replication_applier"; Warnings: Note 3083 Replication thread(s) for channel 'group_replication_applier' are already runnning. # STOP SLAVE SQL_THREAD command will work for group_replication_applier -STOP SLAVE SQL_THREAD FOR CHANNEL 'group_replication_applier'; +include/gr_stop_applier_sql_thread.inc +STOP SLAVE SQL_THREAD FOR CHANNEL "group_replication_applier"; # START SLAVE SQL_THREAD with UNTIL option will work for group_replication_applier START SLAVE SQL_THREAD UNTIL SQL_BEFORE_GTIDS='11111111-1111-1111-1111-111111111111:1-23' FOR CHANNEL 'group_replication_applier'; -STOP SLAVE SQL_THREAD FOR CHANNEL 'group_replication_applier'; +include/gr_stop_applier_sql_thread.inc +STOP SLAVE SQL_THREAD FOR CHANNEL "group_replication_applier"; # START SLAVE SQL_THREAD with UNTIL option will work for group_replication_applier START SLAVE SQL_THREAD UNTIL RELAY_LOG_FILE = 'server-relay-log-group_replication_applier.000002', RELAY_LOG_POS = 10000 FOR CHANNEL 'group_replication_applier'; -STOP SLAVE SQL_THREAD FOR CHANNEL 'group_replication_applier'; +include/gr_stop_applier_sql_thread.inc +STOP SLAVE SQL_THREAD FOR CHANNEL "group_replication_applier"; # SHOW RELAYLOG EVENTS for channel will work for all channels include/assert.inc [Relay log name should not be empty as the command successfully executed.] @@ -85,10 +89,12 @@ SHOW SLAVE STATUS FOR CHANNEL 'group_replication_applier'; ERROR HY000: SHOW SLAVE STATUS cannot be performed on channel 'group_replication_applier'. # START SLAVE SQL_THREAD command will work for group_replication_applier -START SLAVE SQL_THREAD FOR CHANNEL 'group_replication_applier'; +include/gr_start_applier_sql_thread.inc +START SLAVE SQL_THREAD FOR CHANNEL "group_replication_applier"; # STOP SLAVE SQL_THREAD command will work for group_replication_applier -STOP SLAVE SQL_THREAD FOR CHANNEL 'group_replication_applier'; +include/gr_stop_applier_sql_thread.inc +STOP SLAVE SQL_THREAD FOR CHANNEL "group_replication_applier"; # SHOW RELAYLOG EVENTS for channel will work for all channels include/assert.inc [Relay log name should not be empty as the command successfully executed.] @@ -111,7 +117,8 @@ include/start_group_replication.inc include/stop_group_replication.inc RESET SLAVE ALL FOR CHANNEL "group_replication_applier"; include/start_group_replication.inc -STOP SLAVE SQL_THREAD FOR CHANNEL 'group_replication_applier'; +include/gr_stop_applier_sql_thread.inc +STOP SLAVE SQL_THREAD FOR CHANNEL "group_replication_applier"; # RESET SLAVE should not be allowed when GR is ONLINE. # So this command will fail. RESET SLAVE FOR CHANNEL "group_replication_applier"; @@ -120,7 +127,8 @@ ERROR HY000: RESET SLAVE [ALL] FOR CHANNEL cannot be performed on channel 'group # So this command will fail. RESET SLAVE ALL FOR CHANNEL "group_replication_applier"; ERROR HY000: RESET SLAVE [ALL] FOR CHANNEL cannot be performed on channel 'group_replication_applier'. -START SLAVE SQL_THREAD FOR CHANNEL 'group_replication_applier'; +include/gr_start_applier_sql_thread.inc +START SLAVE SQL_THREAD FOR CHANNEL "group_replication_applier"; # stop the channel and try reset slave for channel again. It should work. include/stop_group_replication.inc RESET SLAVE ALL FOR CHANNEL "group_replication_applier"; diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_applier_slave_commands.test b/rapid/plugin/group_replication/tests/mtr/t/gr_applier_slave_commands.test index 209d7909c248..9ac9cc2b6cd7 100644 --- a/rapid/plugin/group_replication/tests/mtr/t/gr_applier_slave_commands.test +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_applier_slave_commands.test @@ -114,28 +114,32 @@ SHOW SLAVE STATUS FOR CHANNEL 'group_replication_applier'; --echo --echo # START SLAVE SQL_THREAD command will work for group_replication_applier -START SLAVE SQL_THREAD FOR CHANNEL 'group_replication_applier'; +--source ../inc/gr_start_applier_sql_thread.inc --echo --echo # STOP SLAVE SQL_THREAD command will work for group_replication_applier -STOP SLAVE SQL_THREAD FOR CHANNEL 'group_replication_applier'; +--source ../inc/gr_stop_applier_sql_thread.inc --echo # START SLAVE SQL_THREAD with UNTIL option will work for group_replication_applier --disable_warnings START SLAVE SQL_THREAD UNTIL SQL_BEFORE_GTIDS='11111111-1111-1111-1111-111111111111:1-23' FOR CHANNEL 'group_replication_applier'; +--let $wait_condition= SELECT service_state="ON" FROM performance_schema.replication_applier_status WHERE channel_name="group_replication_applier" +--source include/wait_condition.inc --enable_warnings --disable_warnings -STOP SLAVE SQL_THREAD FOR CHANNEL 'group_replication_applier'; +--source ../inc/gr_stop_applier_sql_thread.inc --enable_warnings --echo # START SLAVE SQL_THREAD with UNTIL option will work for group_replication_applier --disable_warnings START SLAVE SQL_THREAD UNTIL RELAY_LOG_FILE = 'server-relay-log-group_replication_applier.000002', RELAY_LOG_POS = 10000 FOR CHANNEL 'group_replication_applier'; +--let $wait_condition= SELECT service_state="ON" FROM performance_schema.replication_applier_status WHERE channel_name="group_replication_applier" +--source include/wait_condition.inc --enable_warnings --disable_warnings -STOP SLAVE SQL_THREAD FOR CHANNEL 'group_replication_applier'; +--source ../inc/gr_stop_applier_sql_thread.inc --enable_warnings --echo @@ -188,11 +192,11 @@ SHOW SLAVE STATUS FOR CHANNEL 'group_replication_applier'; --echo --echo # START SLAVE SQL_THREAD command will work for group_replication_applier -START SLAVE SQL_THREAD FOR CHANNEL 'group_replication_applier'; +--source ../inc/gr_start_applier_sql_thread.inc --echo --echo # STOP SLAVE SQL_THREAD command will work for group_replication_applier -STOP SLAVE SQL_THREAD FOR CHANNEL 'group_replication_applier'; +--source ../inc/gr_stop_applier_sql_thread.inc --echo --echo # SHOW RELAYLOG EVENTS for channel will work for all channels @@ -232,7 +236,7 @@ RESET SLAVE ALL FOR CHANNEL "group_replication_applier"; # RESET SLAVE should not be allowed when Group_replication is running. --source include/start_group_replication.inc -STOP SLAVE SQL_THREAD FOR CHANNEL 'group_replication_applier'; +--source ../inc/gr_stop_applier_sql_thread.inc --echo # RESET SLAVE should not be allowed when GR is ONLINE. --echo # So this command will fail. --error ER_SLAVE_CHANNEL_OPERATION_NOT_ALLOWED @@ -242,7 +246,7 @@ RESET SLAVE FOR CHANNEL "group_replication_applier"; --echo # So this command will fail. --error ER_SLAVE_CHANNEL_OPERATION_NOT_ALLOWED RESET SLAVE ALL FOR CHANNEL "group_replication_applier"; -START SLAVE SQL_THREAD FOR CHANNEL 'group_replication_applier'; +--source ../inc/gr_start_applier_sql_thread.inc --echo # stop the channel and try reset slave for channel again. It should work. --source include/stop_group_replication.inc From acad90d206f05d2fedfb92d1febdf239ddb20176 Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Fri, 10 Nov 2017 12:18:02 +0100 Subject: [PATCH 0170/1221] Bug #25643811: MYSQL DOES NOT COMPILE WITH GCC 7 cmd-line-utils/libedit/terminal.c:366:28: warning: comparison between pointer and zero character constant [-Wpointer-compare] --- cmd-line-utils/libedit/terminal.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd-line-utils/libedit/terminal.c b/cmd-line-utils/libedit/terminal.c index e1f45ca14648..cae2e910da16 100644 --- a/cmd-line-utils/libedit/terminal.c +++ b/cmd-line-utils/libedit/terminal.c @@ -363,7 +363,7 @@ terminal_alloc(EditLine *el, const struct termcapstr *t, const char *cap) */ tlen = 0; for (tmp = tlist; tmp < &tlist[T_str]; tmp++) - if (*tmp != NULL && *tmp != '\0' && *tmp != *str) { + if (*tmp != NULL && **tmp != '\0' && *tmp != *str) { char *ptr; for (ptr = *tmp; *ptr != '\0'; termbuf[tlen++] = *ptr++) From 4582a900ab0e5739d0b231f0ffa846d59860487f Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Thu, 9 Nov 2017 09:45:58 +0100 Subject: [PATCH 0171/1221] Bug#27095089 ENABLE -FSANITIZE-ADDRESS-USE-AFTER-SCOPE BY DEFAULT FOR ASAN BUILDS See bug 24343330, which needs -fsanitize=address -fsanitize-address-use-after-scope in order to be detected Add a compiler feature check for -fsanitize=address -fsanitize-address-use-after-scope and enable it if supported for 'cmake -DWITH_ASAN=1' *and* the extra -DWITH_ASAN_SCOPE=1 is enabled. Change-Id: I25100a03c47de74df235360d57297e60c2352b88 (cherry picked from commit e15249418502f61437fa24b9641e9879ba4d3a66) --- CMakeLists.txt | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0afba18cfa29..151af7f435a5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -300,10 +300,25 @@ MACRO(MY_SANITIZER_CHECK SAN_OPT RESULT) ENDMACRO() OPTION(WITH_ASAN "Enable address sanitizer" OFF) +OPTION(WITH_ASAN_SCOPE "Enable -fsanitize-address-use-after-scope" OFF) IF(WITH_ASAN) MY_SANITIZER_CHECK("-fsanitize=address" WITH_ASAN_OK) IF(WITH_ASAN_OK) SET(HAVE_ASAN 1) + # This works with clang, but not gcc it seems. + MY_CHECK_CXX_COMPILER_FLAG( + "-fsanitize=address -fsanitize-address-use-after-scope" + HAVE_SANITIZE_SCOPE) + IF(WITH_ASAN_SCOPE AND HAVE_SANITIZE_SCOPE) + SET(CMAKE_C_FLAGS_DEBUG + "${CMAKE_C_FLAGS_DEBUG} -fsanitize-address-use-after-scope") + SET(CMAKE_C_FLAGS_RELWITHDEBINFO + "${CMAKE_C_FLAGS_RELWITHDEBINFO} -fsanitize-address-use-after-scope") + SET(CMAKE_CXX_FLAGS_DEBUG + "${CMAKE_CXX_FLAGS_DEBUG} -fsanitize-address-use-after-scope") + SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO + "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -fsanitize-address-use-after-scope") + ENDIF() ELSE() MESSAGE(FATAL_ERROR "Do not know how to enable address sanitizer") ENDIF() From e49e52a5de79053ae0bd2371187c2d3cd2a0c429 Mon Sep 17 00:00:00 2001 From: Jon Olav Hauglid Date: Tue, 26 Jul 2016 13:08:15 +0200 Subject: [PATCH 0172/1221] Bug#24343330: READ OF OUT-OF-SCOPE (TEMPFILE) IN MYSQL_UPDATE() The problem was that an IO_CACHE variable used during UPDATE, was allocated on the stack and later copyied into a heap allocated variable. However, the pointers inside this struct was not adjusted, so that they still pointed to the stack. After the stack frame ended, they became invalid. This patch fixes the problem by allocating the IO_CACHE on the heap instead and copying the pointer to this IO_CACHE struct, rather than copying the contents of the struct. Issue identified by the new ASAN option -fsanitize-address-use-after-scope (cherry picked from commit d3bff0c03637119f960c7d3db67a85912bc37e4a) --- sql/sql_update.cc | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/sql/sql_update.cc b/sql/sql_update.cc index 3b3694ce432a..8ebbd8f7f931 100644 --- a/sql/sql_update.cc +++ b/sql/sql_update.cc @@ -644,15 +644,9 @@ bool mysql_update(THD *thd, */ table->prepare_for_position(); - IO_CACHE tempfile; - if (open_cached_file(&tempfile, mysql_tmpdir,TEMP_PREFIX, - DISK_BUFFER_SIZE, MYF(MY_WME))) - goto exit_without_my_ok; - /* If quick select is used, initialize it before retrieving rows. */ if (qep_tab.quick() && (error= qep_tab.quick()->reset())) { - close_cached_file(&tempfile); if (table->file->is_fatal_error(error)) error_flags|= ME_FATALERROR; @@ -678,14 +672,22 @@ bool mysql_update(THD *thd, error= init_read_record_idx(&info, thd, table, 1, used_index, reverse); if (error) - { - close_cached_file(&tempfile); /* purecov: inspected */ goto exit_without_my_ok; - } THD_STAGE_INFO(thd, stage_searching_rows_for_update); ha_rows tmp_limit= limit; + IO_CACHE *tempfile= (IO_CACHE*) my_malloc(key_memory_TABLE_sort_io_cache, + sizeof(IO_CACHE), + MYF(MY_FAE | MY_ZEROFILL)); + + if (open_cached_file(tempfile, mysql_tmpdir,TEMP_PREFIX, + DISK_BUFFER_SIZE, MYF(MY_WME))) + { + my_free(tempfile); + goto exit_without_my_ok; + } + while (!(error=info.read_record(&info)) && !thd->killed) { thd->inc_examined_row_count(1); @@ -705,7 +707,7 @@ bool mysql_update(THD *thd, continue; /* repeat the read of the same row if it still exists */ table->file->position(table->record[0]); - if (my_b_write(&tempfile,table->file->ref, + if (my_b_write(tempfile, table->file->ref, table->file->ref_length)) { error=1; /* purecov: inspected */ @@ -726,19 +728,16 @@ bool mysql_update(THD *thd, table->file->try_semi_consistent_read(0); end_read_record(&info); /* Change select to use tempfile */ - if (reinit_io_cache(&tempfile,READ_CACHE,0L,0,0)) + if (reinit_io_cache(tempfile, READ_CACHE, 0L, 0, 0)) error=1; /* purecov: inspected */ - // Read row ptrs from this file. + DBUG_ASSERT(table->sort.io_cache == NULL); - table->sort.io_cache= (IO_CACHE*) my_malloc(key_memory_TABLE_sort_io_cache, - sizeof(IO_CACHE), - MYF(MY_FAE | MY_ZEROFILL)); /* After this assignment, init_read_record() will run, and decide to read from sort.io_cache. This cache will be freed when qep_tab is destroyed. */ - *table->sort.io_cache= tempfile; + table->sort.io_cache= tempfile; qep_tab.set_quick(NULL); qep_tab.set_condition(NULL); if (error >= 0) From 37b30be37eb88948824a81b60a47ca4ae86b382a Mon Sep 17 00:00:00 2001 From: Balasubramanian Kandasamy Date: Fri, 10 Nov 2017 22:38:36 +0530 Subject: [PATCH 0173/1221] Bug#27079017 - FC27 PKGS FAILURES WHEN MYSQL-CONNECTOR-ODBC INSTALLED ALREADY FROM NATIVE REPO - Due to changes in packages, skip libs-compat and embedded-compat packages --- packaging/rpm-fedora/mysql.spec.in | 36 +++++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/packaging/rpm-fedora/mysql.spec.in b/packaging/rpm-fedora/mysql.spec.in index 8ed503262643..194646625571 100644 --- a/packaging/rpm-fedora/mysql.spec.in +++ b/packaging/rpm-fedora/mysql.spec.in @@ -34,13 +34,14 @@ %{!?compilation_comment_debug: %global compilation_comment_debug MySQL Community Server - Debug (GPL)} %{!?src_base: %global src_base mysql} +%if 0%{?fedora} < 27 %global compatver 5.6.37 %global compatlib 18 %global compatsrc https://cdn.mysql.com/Downloads/MySQL-5.6/mysql-%{compatver}.tar.gz +%endif %global src_dir %{src_base}-%{version} - -# No debuginfo for now, ships /usr/sbin/mysqld-debug and libmysqlcliet-debug.a +# No debuginfo for now %if 0%{?nodebuginfo} %global _enable_debug_package 0 %global debug_package %{nil} @@ -65,7 +66,9 @@ Release: 1%{?dist} License: Copyright (c) 2000, @MYSQL_COPYRIGHT_YEAR@, %{mysql_vendor}. All rights reserved. Under %{?license_type} license as shown in the Description field. Source0: https://cdn.mysql.com/Downloads/MySQL-@MYSQL_BASE_VERSION@/%{src_dir}.tar.gz Source1: http://downloads.sourceforge.net/boost/@BOOST_PACKAGE_NAME@.tar.bz2 +%if 0%{?compatlib} Source2: %{compatsrc} +%endif URL: http://www.mysql.com/ Packager: MySQL Release Engineering Vendor: %{mysql_vendor} @@ -136,6 +139,11 @@ Obsoletes: mariadb-galera-server Obsoletes: mariadb-server-galera Obsoletes: community-mysql-server < %{version}-%{release} Obsoletes: mysql-server < %{version}-%{release} +%if 0%{?compatlib} +%else +Obsoletes: mysql-community-embedded-compat < 5.7.20 +Obsoletes: mysql-community-libs-compat < 5.7.20 +%endif Provides: mysql-server = %{version}-%{release} Provides: mysql-server%{?_isa} = %{version}-%{release} Provides: mysql-compat-server = %{version}-%{release} @@ -190,9 +198,11 @@ Group: Applications/Databases %if 0%{?commercial} Obsoletes: mysql-community-common < %{version}-%{release} %endif +%if 0%{?compatlib} Obsoletes: mariadb-common -Obsoletes: mariadb-config Obsoletes: mariadb-errmsg +%endif # compatlib +Obsoletes: mariadb-config Obsoletes: community-mysql-common < %{version}-%{release} Obsoletes: community-mysql-errmsg < %{version}-%{release} Obsoletes: mysql-common < %{version}-%{release} @@ -252,7 +262,9 @@ Requires: mysql-commercial-common%{?_isa} >= %{min} %else Requires: mysql-community-common%{?_isa} >= %{min} %endif +%if 0%{?compatlib} Obsoletes: mariadb-libs +%endif # compatlib Obsoletes: community-mysql-libs < %{version}-%{release} Obsoletes: mysql-libs < %{version}-%{release} Provides: mysql-libs = %{version}-%{release} @@ -262,6 +274,7 @@ Provides: mysql-libs%{?_isa} = %{version}-%{release} This package contains the shared libraries for MySQL client applications. +%if 0%{?compatlib} %package libs-compat Summary: Shared compat libraries for MySQL %{compatver} database client applications Group: Applications/Databases @@ -279,6 +292,7 @@ Requires: mysql-community-libs%{?_isa} >= %{min} %description libs-compat This package contains the shared compat libraries for MySQL %{compatver} client applications. +%endif # compatlib %package embedded Summary: MySQL embedded library @@ -289,7 +303,9 @@ Requires: mysql-commercial-common%{?_isa} = %{version}-%{release} %else Requires: mysql-community-common%{?_isa} = %{version}-%{release} %endif +%if 0%{?compatlib} Obsoletes: mariadb-embedded +%endif Obsoletes: community-mysql-embedded < %{version}-%{release} Obsoletes: mysql-embedded < %{version}-%{release} Provides: mysql-embedded = %{version}-%{release} @@ -307,6 +323,7 @@ client/server version. For a description of MySQL see the base MySQL RPM or http://www.mysql.com/ +%if 0%{?compatlib} %package embedded-compat Summary: MySQL embedded compat library Group: Applications/Databases @@ -320,6 +337,7 @@ Requires: mysql-community-common%{?_isa} >= %{min} %description embedded-compat This package contains the MySQL server as an embedded library with compatibility for applications using version %{compatlib} of the library. +%endif # compatlib %package embedded-devel Summary: Development header files and libraries for MySQL as an embeddable library @@ -343,7 +361,11 @@ This package contains files needed for developing applications using the embedded version of the MySQL server. %prep +%if 0%{?compatlib} %setup -q -T -a 0 -a 1 -a 2 -c -n %{src_dir} +%else +%setup -q -T -a 0 -a 1 -c -n %{src_dir} +%endif # 0%{?compatlib} %build # Fail quickly and obviously if user tries to build as root @@ -357,6 +379,7 @@ fi %endif # Build compat libs +%if 0%{?compatlib} ( pushd mysql-%{compatver} mkdir build && pushd build @@ -381,6 +404,7 @@ fi echo BEGIN_NORMAL_CONFIG ; egrep '^#define' include/config.h ; echo END_NORMAL_CONFIG make %{?_smp_mflags} VERBOSE=1 ) +%endif # compatlib # Build debug versions of mysqld and libmysqld.a mkdir debug @@ -447,11 +471,13 @@ mkdir release %install # Install compat libs +%if 0%{?compatlib} for dir in libmysql libmysqld ; do pushd mysql-%{compatver}/build/$dir make DESTDIR=%{buildroot} install popd done +%endif # compatlib rm -f %{buildroot}%{_libdir}/mysql/libmysqlclient{,_r}.{a,la,so} rm -f %{buildroot}%{_libdir}/mysql/libmysqld.{a,la,so} @@ -743,6 +769,7 @@ datadir=$(/usr/bin/my_print_defaults server mysqld | grep '^--datadir=' | sed -n %attr(644, root, root) %{_sysconfdir}/ld.so.conf.d/mysql-%{_arch}.conf %{_libdir}/mysql/libmysqlclient.so.20* +%if 0%{?compatlib} %files libs-compat %defattr(-, root, root, -) %doc %{?license_files_server} @@ -752,6 +779,7 @@ datadir=$(/usr/bin/my_print_defaults server mysqld | grep '^--datadir=' | sed -n %{_libdir}/mysql/libmysqlclient.so.%{compatlib}.*.0 %{_libdir}/mysql/libmysqlclient_r.so.%{compatlib} %{_libdir}/mysql/libmysqlclient_r.so.%{compatlib}.*.0 +%endif # compatlib %files test %defattr(-, root, root, -) @@ -832,12 +860,14 @@ datadir=$(/usr/bin/my_print_defaults server mysqld | grep '^--datadir=' | sed -n %attr(644, root, root) %{_sysconfdir}/ld.so.conf.d/mysql-%{_arch}.conf %attr(755, root, root) %{_libdir}/mysql/libmysqld.so.20* +%if 0%{?compatlib} %files embedded-compat %defattr(-, root, root, -) %doc %{?license_files_server} %dir %attr(755, root, root) %{_libdir}/mysql %attr(644, root, root) %{_sysconfdir}/ld.so.conf.d/mysql-%{_arch}.conf %attr(755, root, root) %{_libdir}/mysql/libmysqld.so.18* +%endif # compatlib %files embedded-devel %defattr(-, root, root, -) From cc98465426ff5f9df9f00ef308affe9656ed0893 Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Mon, 13 Nov 2017 09:06:20 +0530 Subject: [PATCH 0174/1221] From 43eadd30f9cfb5a51e44cc32fca9cab06d139243 Mon Sep 17 00:00:00 2001 From: Anibal Pinto Date: Mon, 13 Nov 2017 09:55:22 +0100 Subject: [PATCH 0175/1221] BUG#27091468: CONCURRENCY ISSUE IN GR_FORCE_MEMBER_EXPEL MAKES IT FAIL SPORADICALLY When there is an error in a server, it is moved to an error state and then set to read only mode. The test case expects that a transaction will reach the server after it has been moved to read only mode. However, it reaches the server before it is moved to read only mode sometimes thus generating unexpected messages in the error log and making the test fail. The test was change to confirm that super_read_only is set before execute transaction. --- .../group_replication/tests/mtr/t/gr_force_member_expel.test | 3 +++ 1 file changed, 3 insertions(+) diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_force_member_expel.test b/rapid/plugin/group_replication/tests/mtr/t/gr_force_member_expel.test index a7dd53cb0fd6..b5e65c73e644 100644 --- a/rapid/plugin/group_replication/tests/mtr/t/gr_force_member_expel.test +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_force_member_expel.test @@ -91,6 +91,9 @@ SET SESSION sql_log_bin= 1; --let $group_replication_number_of_members= 1 --source ../inc/gr_wait_for_number_of_members.inc +--let $wait_condition= SELECT @@GLOBAL.super_read_only = '1' +--source include/wait_condition.inc + --error ER_OPTION_PREVENTS_STATEMENT CREATE TABLE te (c1 INT NOT NULL PRIMARY KEY); From d72e199c04a5bec418850699feaaeee3d403532a Mon Sep 17 00:00:00 2001 From: Shishir Jaiswal Date: Mon, 13 Nov 2017 17:08:13 +0530 Subject: [PATCH 0176/1221] Bug#26199978 - WRONG ERROR MESSAGE FOR PARTIAL BACKUPS WITH GTID_MODE = ON POST-PUSH FIX ============= There is a leak in mysqlpump (Bug#23102944) which can be seen after the tests were pushed in patch to this bug. This known issue will be worked upon later. Meanwhile to make the "LeakSanitizer" silent till this leak is fixed, we're moving the pushed tests from "main.mysqlpump_extended.test" to a new file "mysqlpump_partial_bkp.test" and making its entry in "mysql-test/collections/disabled-asan.list" (applicable only in 8.0 and trunk). We've also included "not_valgrind.inc" in the header of this new test file for the same reason. --- mysql-test/r/mysqlpump_extended.result | 20 ----------- mysql-test/r/mysqlpump_partial_bkp.result | 20 +++++++++++ mysql-test/t/mysqlpump_extended.test | 40 ---------------------- mysql-test/t/mysqlpump_partial_bkp.test | 41 +++++++++++++++++++++++ 4 files changed, 61 insertions(+), 60 deletions(-) create mode 100644 mysql-test/r/mysqlpump_partial_bkp.result create mode 100644 mysql-test/t/mysqlpump_partial_bkp.test diff --git a/mysql-test/r/mysqlpump_extended.result b/mysql-test/r/mysqlpump_extended.result index c6a60a83c7ad..191540c5e04c 100644 --- a/mysql-test/r/mysqlpump_extended.result +++ b/mysql-test/r/mysqlpump_extended.result @@ -368,23 +368,3 @@ INSERT INTO t1 VALUES (x) utf8mb4 utf8mb4_general_ci latin1_swedish_ci DROP DATABASE db1_extended; DROP USER u1@localhost; # test for compress-output -# -# Bug#26199978 - WRONG ERROR MESSAGE FOR PARTIAL BACKUPS WITH GTID_MODE = ON -# -# Test 1: Taking backup when --set-gtid-purged is passed as ON -CREATE DATABASE bug26199978; -DROP DATABASE bug26199978; -# Backup file should contain "SET @@GLOBAL.GTID_PURGED=.* ''" -Pattern "SET @@GLOBAL.GTID_PURGED=.* ''" found -# Test 2: Taking backup when --set-gtid-purged is pased as OFF -CREATE DATABASE bug26199978; -DROP DATABASE bug26199978; -# Backup file should NOT contain "SET @@GLOBAL.GTID_PURGED=.* ''" -Matching lines are: -None -Occurrences of 'SET @@GLOBAL.GTID_PURGED=.* ''' in the input file: 0 -# Test 3: Taking backup when --set-gtid-purged is passed as AUTO. Should error out -# asking to pass --set-gtid-purged=[ON|OFF] -CREATE DATABASE bug26199978; -DROP DATABASE bug26199978; -# Cleanup diff --git a/mysql-test/r/mysqlpump_partial_bkp.result b/mysql-test/r/mysqlpump_partial_bkp.result new file mode 100644 index 000000000000..0854f35503b1 --- /dev/null +++ b/mysql-test/r/mysqlpump_partial_bkp.result @@ -0,0 +1,20 @@ +# +# Bug#26199978 - WRONG ERROR MESSAGE FOR PARTIAL BACKUPS WITH GTID_MODE = ON +# +# Test 1: Taking backup when --set-gtid-purged is passed as ON +CREATE DATABASE bug26199978; +DROP DATABASE bug26199978; +# Backup file should contain "SET @@GLOBAL.GTID_PURGED=.* '.*'" +Pattern "SET @@GLOBAL.GTID_PURGED=.* '.*'" found +# Test 2: Taking backup when --set-gtid-purged is pased as OFF +CREATE DATABASE bug26199978; +DROP DATABASE bug26199978; +# Backup file should NOT contain "SET @@GLOBAL.GTID_PURGED=.* '.*'" +Matching lines are: +None +Occurrences of 'SET @@GLOBAL.GTID_PURGED=.* '.*'' in the input file: 0 +# Test 3: Taking backup when --set-gtid-purged is passed as AUTO. Should error out +# asking to pass --set-gtid-purged=[ON|OFF] +CREATE DATABASE bug26199978; +DROP DATABASE bug26199978; +# Cleanup diff --git a/mysql-test/t/mysqlpump_extended.test b/mysql-test/t/mysqlpump_extended.test index 6e80fbddd0db..7b8c2078d47a 100644 --- a/mysql-test/t/mysqlpump_extended.test +++ b/mysql-test/t/mysqlpump_extended.test @@ -427,43 +427,3 @@ DROP USER u1@localhost; #cleanup --remove_file $MYSQLTEST_VARDIR/tmp/db1_extended.zlib --remove_file $MYSQLTEST_VARDIR/tmp/db1_extended.lz4 - --- echo # --- echo # Bug#26199978 - WRONG ERROR MESSAGE FOR PARTIAL BACKUPS WITH GTID_MODE = ON --- echo # - ---exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect ---shutdown_server 10 ---source include/wait_until_disconnected.inc ---enable_reconnect ---exec echo "restart: --enforce-gtid-consistency=ON --gtid-mode=ON" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect ---source include/wait_until_connected_again.inc - -let SEARCH_FILE=$MYSQLTEST_VARDIR/tmp/bug26199978_gtid-purged_ON.sql; -let SEARCH_PATTERN=SET @@GLOBAL.GTID_PURGED=.* ''; -let GREP_FILE=$MYSQLTEST_VARDIR/tmp/bug26199978_gtid-purged_OFF.sql; -let GREP_PATTERN=$SEARCH_PATTERN; - ---echo # Test 1: Taking backup when --set-gtid-purged is passed as ON -CREATE DATABASE bug26199978; ---exec $MYSQL_PUMP --databases bug26199978 --set-gtid-purged=ON > $SEARCH_FILE -DROP DATABASE bug26199978; ---echo # Backup file should contain "$SEARCH_PATTERN" ---source include/search_pattern.inc - ---echo # Test 2: Taking backup when --set-gtid-purged is pased as OFF -CREATE DATABASE bug26199978; ---exec $MYSQL_PUMP --databases bug26199978 --set-gtid-purged=OFF > $GREP_FILE -DROP DATABASE bug26199978; ---echo # Backup file should NOT contain "$GREP_PATTERN" ---source include/grep_pattern.inc - ---echo # Test 3: Taking backup when --set-gtid-purged is passed as AUTO. Should error out ---echo # asking to pass --set-gtid-purged=[ON|OFF] -CREATE DATABASE bug26199978; ---error 1 ---exec $MYSQL_PUMP --databases bug26199978 --set-gtid-purged=AUTO > $MYSQLTEST_VARDIR/tmp/bug26199978_auto.sql -DROP DATABASE bug26199978; - ---echo # Cleanup ---remove_files_wildcard $MYSQLTEST_VARDIR/tmp bug26199978_*.sql diff --git a/mysql-test/t/mysqlpump_partial_bkp.test b/mysql-test/t/mysqlpump_partial_bkp.test new file mode 100644 index 000000000000..0ddc8ff8085a --- /dev/null +++ b/mysql-test/t/mysqlpump_partial_bkp.test @@ -0,0 +1,41 @@ +--source include/not_valgrind.inc + +--echo # +--echo # Bug#26199978 - WRONG ERROR MESSAGE FOR PARTIAL BACKUPS WITH GTID_MODE = ON +--echo # + +--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect +--shutdown_server 10 +--source include/wait_until_disconnected.inc +--enable_reconnect +--exec echo "restart: --enforce-gtid-consistency=ON --gtid-mode=ON" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect +--source include/wait_until_connected_again.inc + +let SEARCH_FILE=$MYSQLTEST_VARDIR/tmp/bug26199978_gtid-purged_ON.sql; +let SEARCH_PATTERN=SET @@GLOBAL.GTID_PURGED=.* '.*'; +let GREP_FILE=$MYSQLTEST_VARDIR/tmp/bug26199978_gtid-purged_OFF.sql; +let GREP_PATTERN=$SEARCH_PATTERN; + +--echo # Test 1: Taking backup when --set-gtid-purged is passed as ON +CREATE DATABASE bug26199978; +--exec $MYSQL_PUMP --databases bug26199978 --set-gtid-purged=ON > $SEARCH_FILE +DROP DATABASE bug26199978; +--echo # Backup file should contain "$SEARCH_PATTERN" +--source include/search_pattern.inc + +--echo # Test 2: Taking backup when --set-gtid-purged is pased as OFF +CREATE DATABASE bug26199978; +--exec $MYSQL_PUMP --databases bug26199978 --set-gtid-purged=OFF > $GREP_FILE +DROP DATABASE bug26199978; +--echo # Backup file should NOT contain "$GREP_PATTERN" +--source include/grep_pattern.inc + +--echo # Test 3: Taking backup when --set-gtid-purged is passed as AUTO. Should error out +--echo # asking to pass --set-gtid-purged=[ON|OFF] +CREATE DATABASE bug26199978; +--error 1 +--exec $MYSQL_PUMP --databases bug26199978 --set-gtid-purged=AUTO > $MYSQLTEST_VARDIR/tmp/bug26199978_auto.sql +DROP DATABASE bug26199978; + +--echo # Cleanup +--remove_files_wildcard $MYSQLTEST_VARDIR/tmp bug26199978_*.sql From 02c12999f9c8621619f61b10deaba36c0df4dbb7 Mon Sep 17 00:00:00 2001 From: Balasubramanian Kandasamy Date: Mon, 13 Nov 2017 19:45:57 +0530 Subject: [PATCH 0177/1221] Bug#27072155 - DEFAULT PLUGIN_DIR SHOULD BE DIFFERENT FOR DEBUG BUILD - Update the default plugin directory for debug builds --- packaging/rpm-oel/mysql.spec.in | 2 +- packaging/rpm-sles/mysql.spec.in | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packaging/rpm-oel/mysql.spec.in b/packaging/rpm-oel/mysql.spec.in index 7aa8cdb5640f..755f922026e8 100644 --- a/packaging/rpm-oel/mysql.spec.in +++ b/packaging/rpm-oel/mysql.spec.in @@ -505,7 +505,7 @@ mkdir debug -DCMAKE_C_FLAGS="$optflags" \ -DCMAKE_CXX_FLAGS="$optflags" \ -DINSTALL_LIBDIR="%{_lib}/mysql" \ - -DINSTALL_PLUGINDIR="%{_lib}/mysql/plugin" \ + -DINSTALL_PLUGINDIR="%{_lib}/mysql/plugin/debug" \ -DINSTALL_SQLBENCHDIR=share \ -DMYSQL_UNIX_ADDR="%{mysqldatadir}/mysql.sock" \ -DFEATURE_SET="%{feature_set}" \ diff --git a/packaging/rpm-sles/mysql.spec.in b/packaging/rpm-sles/mysql.spec.in index 5d0d1a55214a..d5a3ba8deff5 100644 --- a/packaging/rpm-sles/mysql.spec.in +++ b/packaging/rpm-sles/mysql.spec.in @@ -367,7 +367,7 @@ mkdir debug -DCMAKE_C_FLAGS="$optflags" \ -DCMAKE_CXX_FLAGS="$optflags" \ -DINSTALL_LIBDIR="%{_lib}/mysql" \ - -DINSTALL_PLUGINDIR="%{_lib}/mysql/plugin" \ + -DINSTALL_PLUGINDIR="%{_lib}/mysql/plugin/debug" \ -DINSTALL_SQLBENCHDIR=share \ -DMYSQL_UNIX_ADDR="%{mysqldatadir}/mysql.sock" \ -DFEATURE_SET="%{feature_set}" \ From 3a9cef43a06f3aa5353589015114f20cba2e89b7 Mon Sep 17 00:00:00 2001 From: Venkatesh Duggirala Date: Mon, 13 Nov 2017 09:23:39 +0530 Subject: [PATCH 0178/1221] Bug#27103194 SEMISYNC TESTS ARE NOT RUNNING WHEN GTID IS ENABLED Remove not_gtid_enabled.inc from install_semisync_slave.inc to make semisync tests run when gtid is enabled in the run. --- mysql-test/include/install_semisync_slave.inc | 1 - 1 file changed, 1 deletion(-) diff --git a/mysql-test/include/install_semisync_slave.inc b/mysql-test/include/install_semisync_slave.inc index 19df754a4a35..619a57641c6b 100644 --- a/mysql-test/include/install_semisync_slave.inc +++ b/mysql-test/include/install_semisync_slave.inc @@ -6,7 +6,6 @@ --source include/begin_include_file.inc --source include/not_embedded.inc ---source include/not_gtid_enabled.inc --source include/have_semisync_plugin.inc --disable_query_log From b94a44bf6f2fb91b89c9584323a3db1920108139 Mon Sep 17 00:00:00 2001 From: Shishir Jaiswal Date: Tue, 14 Nov 2017 12:25:43 +0530 Subject: [PATCH 0179/1221] Bug#26199978 - WRONG ERROR MESSAGE FOR PARTIAL BACKUPS WITH GTID_MODE = ON POST-PUSH FIX ============= .test file is not supposed to run for embedded. Including the same in header section. --- mysql-test/t/mysqlpump_partial_bkp.test | 1 + 1 file changed, 1 insertion(+) diff --git a/mysql-test/t/mysqlpump_partial_bkp.test b/mysql-test/t/mysqlpump_partial_bkp.test index 0ddc8ff8085a..1568aad14268 100644 --- a/mysql-test/t/mysqlpump_partial_bkp.test +++ b/mysql-test/t/mysqlpump_partial_bkp.test @@ -1,3 +1,4 @@ +--source include/not_embedded.inc --source include/not_valgrind.inc --echo # From fcea53eb6ebf4ef3dedfc925fd0622f855b435f3 Mon Sep 17 00:00:00 2001 From: Laurynas Biveinis Date: Fri, 10 Nov 2017 17:04:29 +0200 Subject: [PATCH 0180/1221] Fix bug 1731483 (MEMORY storage engine incorrectly allows BLOB columns before indexed columns) Dynamic row format feature to support BLOB/VARCHAR in MEMORY tables requires all the key columns to come before any BLOB columns. This requirement however was not enforced, allowing creating MEMORY tables in unsupported column configurations, which then crash or lose data in usage. Fix by - reverting the previous fix for bug 1706356, which shares the root cause; - adding the check in heap_create whether there are any BLOB columns before any key columns, and returning ER_TABLE_CANT_HANDLE_BLOB if so. --- include/heap.h | 1 + mysql-test/r/heap.result | 15 ----- mysql-test/r/percona_heap_blob.result | 5 +- mysql-test/r/percona_heap_var.result | 63 ++++++++++++++++++++ mysql-test/t/heap.test | 20 ------- mysql-test/t/percona_heap_blob.test | 5 +- mysql-test/t/percona_heap_var.test | 82 +++++++++++++++++++++++++++ storage/heap/ha_heap.cc | 12 +++- storage/heap/hp_create.c | 21 +++++-- storage/heap/hp_test1.c | 1 + storage/heap/hp_test2.c | 1 + 11 files changed, 178 insertions(+), 48 deletions(-) diff --git a/include/heap.h b/include/heap.h index 757086e09d73..12bcc896bb64 100644 --- a/include/heap.h +++ b/include/heap.h @@ -251,6 +251,7 @@ typedef struct st_heap_create_info my_bool pin_share; uint columns; HP_COLUMNDEF *columndef; + uint fixed_key_fieldnr; uint fixed_data_size; uint keys_memory_size; uint max_chunk_size; diff --git a/mysql-test/r/heap.result b/mysql-test/r/heap.result index c557843c28c2..1cabb91d1b0c 100644 --- a/mysql-test/r/heap.result +++ b/mysql-test/r/heap.result @@ -738,18 +738,3 @@ SELECT c2 FROM t1; c2 0 DROP TABLE t1; -CREATE TABLE t1 ( -rid bigint(20) NOT NULL AUTO_INCREMENT, -pid bigint(20) NOT NULL, -full_name text NOT NULL, -update_time int(11) NOT NULL DEFAULT '0', -PRIMARY KEY (`rid`) -) ENGINE=MEMORY DEFAULT CHARSET=utf8; -INSERT INTO t1 (rid, pid, full_name, update_time) VALUES ('1170618590', '-2289398025558017', '"People Get Ready" by Jeff Beck and Rod Stewart', 1471513707), -('1170618636', '-2289398025558017', 'Rod Stewart - Da Ya Think I\'m Sexy (Dvj Gee Remix)', 1471513707); -alter table t1 add INDEX idx_update USING BTREE (update_time ASC); -select * from t1; -rid pid full_name update_time -1170618590 -2289398025558017 "People Get Ready" by Jeff Beck and Rod Stewart 1471513707 -1170618636 -2289398025558017 Rod Stewart - Da Ya Think I'm Sexy (Dvj Gee Remix) 1471513707 -DROP TABLE t1; diff --git a/mysql-test/r/percona_heap_blob.result b/mysql-test/r/percona_heap_blob.result index 840c3d68f8c8..f284c1e1a2ed 100644 --- a/mysql-test/r/percona_heap_blob.result +++ b/mysql-test/r/percona_heap_blob.result @@ -400,10 +400,7 @@ _field_148 tinyint(4) DEFAULT '0' NOT NULL, PRIMARY KEY (t3_id), KEY _field_133 (_field_133), KEY _field_135 (_field_135), -KEY _field_139 (_field_139), -KEY _field_142 (_field_142), -KEY _field_145 (_field_145), -KEY _field_148 (_field_148) +KEY _field_139 (_field_139) ); INSERT INTO t3 VALUES (1,'test job 1',0,'0000-00-00 00:00:00',0,'1999-02-25 22:43:32','test\r\njob\r\n1',0,0,0); INSERT INTO t3 VALUES (2,'test job 2',0,'0000-00-00 00:00:00',0,'1999-02-26 21:08:04','',0,0,0); diff --git a/mysql-test/r/percona_heap_var.result b/mysql-test/r/percona_heap_var.result index e11db0543cda..88a3864815d7 100644 --- a/mysql-test/r/percona_heap_var.result +++ b/mysql-test/r/percona_heap_var.result @@ -192,3 +192,66 @@ count(*) 10001 set @@session.max_heap_table_size=default; drop table t1; +# +# Bug 1731483: MEMORY storage engine incorrectly allows BLOB columns before indexed columns +# +CREATE TABLE t1 (a BLOB, b INT PRIMARY KEY) ENGINE=MEMORY; +ERROR 42000: The used table type doesn't support BLOB/TEXT columns +CREATE TABLE t1 (a TEXT, b INT PRIMARY KEY) ENGINE=MEMORY; +ERROR 42000: The used table type doesn't support BLOB/TEXT columns +CREATE TABLE t1 (a INT PRIMARY KEY, b BLOB, c INT, KEY c(c)) ENGINE=MEMORY; +ERROR 42000: The used table type doesn't support BLOB/TEXT columns +CREATE TABLE t1 (a INT PRIMARY KEY, b TEXT, c INT, KEY c(c)) ENGINE=MEMORY; +ERROR 42000: The used table type doesn't support BLOB/TEXT columns +CREATE TABLE t1 (a BLOB, b INT) ENGINE=MEMORY; +ALTER TABLE t1 ADD INDEX idx_b (b); +ERROR 42000: The used table type doesn't support BLOB/TEXT columns +ALTER TABLE t1 ADD PRIMARY KEY (b); +ERROR 42000: The used table type doesn't support BLOB/TEXT columns +DROP TABLE t1; +CREATE TABLE t1 (a TEXT, b INT) ENGINE=MEMORY; +ALTER TABLE t1 ADD INDEX idx_b (b); +ERROR 42000: The used table type doesn't support BLOB/TEXT columns +ALTER TABLE t1 ADD PRIMARY KEY (b); +ERROR 42000: The used table type doesn't support BLOB/TEXT columns +DROP TABLE t1; +CREATE TABLE t1 (a INT PRIMARY KEY, b BLOB, c INT) ENGINE=MEMORY; +ALTER TABLE t1 ADD INDEX c (c); +ERROR 42000: The used table type doesn't support BLOB/TEXT columns +DROP TABLE t1; +CREATE TABLE t1 (a INT PRIMARY KEY, b TEXT, c INT) ENGINE=MEMORY; +ALTER TABLE t1 ADD INDEX c (c); +ERROR 42000: The used table type doesn't support BLOB/TEXT columns +DROP TABLE t1; +CREATE TABLE t1 (a BLOB, b INT PRIMARY KEY) ENGINE=InnoDB; +ALTER TABLE t1 ENGINE=MEMORY; +ERROR 42000: The used table type doesn't support BLOB/TEXT columns +DROP TABLE t1; +CREATE TABLE t1 (a TEXT, b INT PRIMARY KEY) ENGINE=InnoDB; +ALTER TABLE t1 ENGINE=MEMORY; +ERROR 42000: The used table type doesn't support BLOB/TEXT columns +DROP TABLE t1; +CREATE TABLE t1 (a INT PRIMARY KEY, b BLOB, c INT, KEY c(c)) ENGINE=InnoDB; +ALTER TABLE t1 ENGINE=MEMORY; +ERROR 42000: The used table type doesn't support BLOB/TEXT columns +DROP TABLE t1; +CREATE TABLE t1 (a INT PRIMARY KEY, b TEXT, c INT, KEY c(c)) ENGINE=InnoDB; +ALTER TABLE t1 ENGINE=MEMORY; +ERROR 42000: The used table type doesn't support BLOB/TEXT columns +DROP TABLE t1; +CREATE TABLE t1 (a INT PRIMARY KEY, b BLOB, c TEXT) ENGINE=MEMORY; +ALTER TABLE t1 MODIFY b BLOB FIRST; +ERROR 42000: The used table type doesn't support BLOB/TEXT columns +ALTER TABLE t1 MODIFY c TEXT FIRST; +ERROR 42000: The used table type doesn't support BLOB/TEXT columns +DROP TABLE t1; +CREATE TABLE t1 (a INT, b BLOB, c INT, PRIMARY KEY(a, c)) ENGINE=MEMORY; +ERROR 42000: The used table type doesn't support BLOB/TEXT columns +CREATE TABLE t1 (a INT, b TEXT, c INT, PRIMARY KEY(c, a)) ENGINE=MEMORY; +ERROR 42000: The used table type doesn't support BLOB/TEXT columns +CREATE TABLE t1 (a INT, b TEXT, c INT) ENGINE=MEMORY; +ALTER TABLE t1 ADD PRIMARY KEY (a, c); +ERROR 42000: The used table type doesn't support BLOB/TEXT columns +ALTER TABLE t1 ADD INDEX idx (c, a); +ERROR 42000: The used table type doesn't support BLOB/TEXT columns +DROP TABLE t1; diff --git a/mysql-test/t/heap.test b/mysql-test/t/heap.test index 28b06983cea4..1e69b43d79bf 100644 --- a/mysql-test/t/heap.test +++ b/mysql-test/t/heap.test @@ -480,23 +480,3 @@ INSERT INTO t1 VALUES('', 0); ALTER TABLE t1 MODIFY c1 VARCHAR(101); SELECT c2 FROM t1; DROP TABLE t1; - -# -# BUG 1706356: Adding Index corrupts data in memory table -# -CREATE TABLE t1 ( - rid bigint(20) NOT NULL AUTO_INCREMENT, - pid bigint(20) NOT NULL, - full_name text NOT NULL, - update_time int(11) NOT NULL DEFAULT '0', -PRIMARY KEY (`rid`) -) ENGINE=MEMORY DEFAULT CHARSET=utf8; - -INSERT INTO t1 (rid, pid, full_name, update_time) VALUES ('1170618590', '-2289398025558017', '"People Get Ready" by Jeff Beck and Rod Stewart', 1471513707), -('1170618636', '-2289398025558017', 'Rod Stewart - Da Ya Think I\'m Sexy (Dvj Gee Remix)', 1471513707); - -alter table t1 add INDEX idx_update USING BTREE (update_time ASC); - -select * from t1; - -DROP TABLE t1; diff --git a/mysql-test/t/percona_heap_blob.test b/mysql-test/t/percona_heap_blob.test index 60c6288bd0b4..f145d6f1bc5d 100644 --- a/mysql-test/t/percona_heap_blob.test +++ b/mysql-test/t/percona_heap_blob.test @@ -188,10 +188,7 @@ CREATE TABLE t3 ( PRIMARY KEY (t3_id), KEY _field_133 (_field_133), KEY _field_135 (_field_135), - KEY _field_139 (_field_139), - KEY _field_142 (_field_142), - KEY _field_145 (_field_145), - KEY _field_148 (_field_148) + KEY _field_139 (_field_139) ); diff --git a/mysql-test/t/percona_heap_var.test b/mysql-test/t/percona_heap_var.test index af048c29a48b..06c62632eead 100644 --- a/mysql-test/t/percona_heap_var.test +++ b/mysql-test/t/percona_heap_var.test @@ -1,6 +1,7 @@ # # Test heap tables with variable-sized records. # +--source include/have_innodb.inc --disable_warnings drop table if exists t1; @@ -83,3 +84,84 @@ select count(*) from t1; set @@session.max_heap_table_size=default; drop table t1; + +--echo # +--echo # Bug 1731483: MEMORY storage engine incorrectly allows BLOB columns before indexed columns +--echo # + +--error ER_TABLE_CANT_HANDLE_BLOB +CREATE TABLE t1 (a BLOB, b INT PRIMARY KEY) ENGINE=MEMORY; + +--error ER_TABLE_CANT_HANDLE_BLOB +CREATE TABLE t1 (a TEXT, b INT PRIMARY KEY) ENGINE=MEMORY; + +--error ER_TABLE_CANT_HANDLE_BLOB +CREATE TABLE t1 (a INT PRIMARY KEY, b BLOB, c INT, KEY c(c)) ENGINE=MEMORY; + +--error ER_TABLE_CANT_HANDLE_BLOB +CREATE TABLE t1 (a INT PRIMARY KEY, b TEXT, c INT, KEY c(c)) ENGINE=MEMORY; + +CREATE TABLE t1 (a BLOB, b INT) ENGINE=MEMORY; +--error ER_TABLE_CANT_HANDLE_BLOB +ALTER TABLE t1 ADD INDEX idx_b (b); +--error ER_TABLE_CANT_HANDLE_BLOB +ALTER TABLE t1 ADD PRIMARY KEY (b); +DROP TABLE t1; + +CREATE TABLE t1 (a TEXT, b INT) ENGINE=MEMORY; +--error ER_TABLE_CANT_HANDLE_BLOB +ALTER TABLE t1 ADD INDEX idx_b (b); +--error ER_TABLE_CANT_HANDLE_BLOB +ALTER TABLE t1 ADD PRIMARY KEY (b); +DROP TABLE t1; + +CREATE TABLE t1 (a INT PRIMARY KEY, b BLOB, c INT) ENGINE=MEMORY; +--error ER_TABLE_CANT_HANDLE_BLOB +ALTER TABLE t1 ADD INDEX c (c); +DROP TABLE t1; + +CREATE TABLE t1 (a INT PRIMARY KEY, b TEXT, c INT) ENGINE=MEMORY; +--error ER_TABLE_CANT_HANDLE_BLOB +ALTER TABLE t1 ADD INDEX c (c); +DROP TABLE t1; + +CREATE TABLE t1 (a BLOB, b INT PRIMARY KEY) ENGINE=InnoDB; +--error ER_TABLE_CANT_HANDLE_BLOB +ALTER TABLE t1 ENGINE=MEMORY; +DROP TABLE t1; + +CREATE TABLE t1 (a TEXT, b INT PRIMARY KEY) ENGINE=InnoDB; +--error ER_TABLE_CANT_HANDLE_BLOB +ALTER TABLE t1 ENGINE=MEMORY; +DROP TABLE t1; + +CREATE TABLE t1 (a INT PRIMARY KEY, b BLOB, c INT, KEY c(c)) ENGINE=InnoDB; +--error ER_TABLE_CANT_HANDLE_BLOB +ALTER TABLE t1 ENGINE=MEMORY; +DROP TABLE t1; + +CREATE TABLE t1 (a INT PRIMARY KEY, b TEXT, c INT, KEY c(c)) ENGINE=InnoDB; +--error ER_TABLE_CANT_HANDLE_BLOB +ALTER TABLE t1 ENGINE=MEMORY; +DROP TABLE t1; + +CREATE TABLE t1 (a INT PRIMARY KEY, b BLOB, c TEXT) ENGINE=MEMORY; +--error ER_TABLE_CANT_HANDLE_BLOB +ALTER TABLE t1 MODIFY b BLOB FIRST; +--error ER_TABLE_CANT_HANDLE_BLOB +ALTER TABLE t1 MODIFY c TEXT FIRST; + +DROP TABLE t1; + +--error ER_TABLE_CANT_HANDLE_BLOB +CREATE TABLE t1 (a INT, b BLOB, c INT, PRIMARY KEY(a, c)) ENGINE=MEMORY; + +--error ER_TABLE_CANT_HANDLE_BLOB +CREATE TABLE t1 (a INT, b TEXT, c INT, PRIMARY KEY(c, a)) ENGINE=MEMORY; + +CREATE TABLE t1 (a INT, b TEXT, c INT) ENGINE=MEMORY; +--error ER_TABLE_CANT_HANDLE_BLOB +ALTER TABLE t1 ADD PRIMARY KEY (a, c); +--error ER_TABLE_CANT_HANDLE_BLOB +ALTER TABLE t1 ADD INDEX idx (c, a); +DROP TABLE t1; diff --git a/storage/heap/ha_heap.cc b/storage/heap/ha_heap.cc index 618740746299..9e92febd9aec 100644 --- a/storage/heap/ha_heap.cc +++ b/storage/heap/ha_heap.cc @@ -662,7 +662,7 @@ heap_prepare_hp_create_info(TABLE *table_arg, bool internal_table, { uint key, parts, mem_per_row_keys= 0, keys= table_arg->s->keys; uint auto_key= 0, auto_key_type= 0; - uint fixed_data_size = 0, next_field_pos = 0; + uint fixed_key_fieldnr = 0, fixed_data_size = 0, next_field_pos = 0; uint column_idx, column_count= table_arg->s->fields; HP_COLUMNDEF *columndef; HP_KEYDEF *keydef; @@ -854,6 +854,15 @@ heap_prepare_hp_create_info(TABLE *table_arg, bool internal_table, { fixed_data_size= next_field_pos; } + + + if (field->field_index >= fixed_key_fieldnr) + { + /* + Do not use seg->fieldnr as it's not reliable in case of temp tables + */ + fixed_key_fieldnr= field->field_index + 1; + } } } @@ -877,6 +886,7 @@ heap_prepare_hp_create_info(TABLE *table_arg, bool internal_table, hp_create_info->is_dynamic= (share->row_type == ROW_TYPE_DYNAMIC); hp_create_info->columns= column_count; hp_create_info->columndef= columndef; + hp_create_info->fixed_key_fieldnr= fixed_key_fieldnr; hp_create_info->fixed_data_size= fixed_data_size; hp_create_info->max_records= (ulong) share->max_rows; hp_create_info->min_records= (ulong) share->min_rows; diff --git a/storage/heap/hp_create.c b/storage/heap/hp_create.c index ac7586dc4c09..3ec1238877ce 100644 --- a/storage/heap/hp_create.c +++ b/storage/heap/hp_create.c @@ -127,13 +127,26 @@ int heap_create(const char *name, HP_CREATE_INFO *create_info, if (is_variable_size) { - /* Check whether we have any variable size records past key data */ uint has_variable_fields= 0; - fixed_data_length= create_info->fixed_data_size; - fixed_column_count= 0; + fixed_column_count= create_info->fixed_key_fieldnr; + + /* Check whether we have any BLOB columns before key data, as currently + this is not supported */ + for (i= 0; i < fixed_column_count; i++) + { + HP_COLUMNDEF *column= create_info->columndef + i; + if (column->type == MYSQL_TYPE_BLOB) + { + my_error(ER_TABLE_CANT_HANDLE_BLOB, MYF(0)); + goto err; + } + } - for (i= fixed_column_count; i < create_info->columns; i++) + /* Check whether we have any variable size records past key data */ + fixed_data_length= create_info->fixed_data_size; + DBUG_ASSERT(i == create_info->fixed_key_fieldnr); + for (; i < create_info->columns; i++) { HP_COLUMNDEF *column= create_info->columndef + i; if ((column->type == MYSQL_TYPE_VARCHAR && diff --git a/storage/heap/hp_test1.c b/storage/heap/hp_test1.c index 01607d36ac25..3d0cea07e1a7 100644 --- a/storage/heap/hp_test1.c +++ b/storage/heap/hp_test1.c @@ -55,6 +55,7 @@ int main(int argc, char **argv) hp_create_info.min_records= 10UL; hp_create_info.columns= 2; hp_create_info.columndef= columndef; + hp_create_info.fixed_key_fieldnr= 30; hp_create_info.fixed_data_size= sizeof(char*) * 2; keyinfo[0].keysegs=1; diff --git a/storage/heap/hp_test2.c b/storage/heap/hp_test2.c index c0744371dacb..3272f6178da8 100644 --- a/storage/heap/hp_test2.c +++ b/storage/heap/hp_test2.c @@ -75,6 +75,7 @@ int main(int argc, char *argv[]) hp_create_info.min_records= (ulong) recant/2; hp_create_info.columns= 4; hp_create_info.columndef= columndef; + hp_create_info.fixed_key_fieldnr= 4; hp_create_info.fixed_data_size= 39; write_count=update=opt_delete=0; From ed57f31a08fc87eba5b3dd8ab01e05a5918ae85e Mon Sep 17 00:00:00 2001 From: Laurynas Biveinis Date: Fri, 10 Nov 2017 17:04:29 +0200 Subject: [PATCH 0181/1221] Fix bug 1731483 (MEMORY storage engine incorrectly allows BLOB columns before indexed columns) Dynamic row format feature to support BLOB/VARCHAR in MEMORY tables requires all the key columns to come before any BLOB columns. This requirement however was not enforced, allowing creating MEMORY tables in unsupported column configurations, which then crash or lose data in usage. Fix by - reverting the previous fix for bug 1706356, which shares the root cause; - adding the check in heap_create whether there are any BLOB columns before any key columns, and returning ER_TABLE_CANT_HANDLE_BLOB if so. (cherry picked from commit fcea53eb6ebf4ef3dedfc925fd0622f855b435f3) --- include/heap.h | 1 + mysql-test/r/heap.result | 15 ----- mysql-test/r/percona_heap_blob.result | 5 +- mysql-test/r/percona_heap_var.result | 63 ++++++++++++++++++++ mysql-test/t/heap.test | 20 ------- mysql-test/t/percona_heap_blob.test | 5 +- mysql-test/t/percona_heap_var.test | 82 +++++++++++++++++++++++++++ storage/heap/ha_heap.cc | 12 +++- storage/heap/hp_create.c | 21 +++++-- storage/heap/hp_test1.c | 1 + storage/heap/hp_test2.c | 1 + 11 files changed, 178 insertions(+), 48 deletions(-) diff --git a/include/heap.h b/include/heap.h index 757086e09d73..12bcc896bb64 100644 --- a/include/heap.h +++ b/include/heap.h @@ -251,6 +251,7 @@ typedef struct st_heap_create_info my_bool pin_share; uint columns; HP_COLUMNDEF *columndef; + uint fixed_key_fieldnr; uint fixed_data_size; uint keys_memory_size; uint max_chunk_size; diff --git a/mysql-test/r/heap.result b/mysql-test/r/heap.result index e620ceca74a0..546fb6d885d3 100644 --- a/mysql-test/r/heap.result +++ b/mysql-test/r/heap.result @@ -789,18 +789,3 @@ c1 bar2 #should show one tuple! DROP TABLE t1; -CREATE TABLE t1 ( -rid bigint(20) NOT NULL AUTO_INCREMENT, -pid bigint(20) NOT NULL, -full_name text NOT NULL, -update_time int(11) NOT NULL DEFAULT '0', -PRIMARY KEY (`rid`) -) ENGINE=MEMORY DEFAULT CHARSET=utf8; -INSERT INTO t1 (rid, pid, full_name, update_time) VALUES ('1170618590', '-2289398025558017', '"People Get Ready" by Jeff Beck and Rod Stewart', 1471513707), -('1170618636', '-2289398025558017', 'Rod Stewart - Da Ya Think I\'m Sexy (Dvj Gee Remix)', 1471513707); -alter table t1 add INDEX idx_update USING BTREE (update_time ASC); -select * from t1; -rid pid full_name update_time -1170618590 -2289398025558017 "People Get Ready" by Jeff Beck and Rod Stewart 1471513707 -1170618636 -2289398025558017 Rod Stewart - Da Ya Think I'm Sexy (Dvj Gee Remix) 1471513707 -DROP TABLE t1; diff --git a/mysql-test/r/percona_heap_blob.result b/mysql-test/r/percona_heap_blob.result index b0a1b3a67f41..3d4f88bd85db 100644 --- a/mysql-test/r/percona_heap_blob.result +++ b/mysql-test/r/percona_heap_blob.result @@ -363,10 +363,7 @@ _field_148 tinyint(4) DEFAULT '0' NOT NULL, PRIMARY KEY (t3_id), KEY _field_133 (_field_133), KEY _field_135 (_field_135), -KEY _field_139 (_field_139), -KEY _field_142 (_field_142), -KEY _field_145 (_field_145), -KEY _field_148 (_field_148) +KEY _field_139 (_field_139) ); INSERT INTO t3 VALUES (1,'test job 1',0,'0000-00-00 00:00:00',0,'1999-02-25 22:43:32','test\r\njob\r\n1',0,0,0); INSERT INTO t3 VALUES (2,'test job 2',0,'0000-00-00 00:00:00',0,'1999-02-26 21:08:04','',0,0,0); diff --git a/mysql-test/r/percona_heap_var.result b/mysql-test/r/percona_heap_var.result index e11db0543cda..88a3864815d7 100644 --- a/mysql-test/r/percona_heap_var.result +++ b/mysql-test/r/percona_heap_var.result @@ -192,3 +192,66 @@ count(*) 10001 set @@session.max_heap_table_size=default; drop table t1; +# +# Bug 1731483: MEMORY storage engine incorrectly allows BLOB columns before indexed columns +# +CREATE TABLE t1 (a BLOB, b INT PRIMARY KEY) ENGINE=MEMORY; +ERROR 42000: The used table type doesn't support BLOB/TEXT columns +CREATE TABLE t1 (a TEXT, b INT PRIMARY KEY) ENGINE=MEMORY; +ERROR 42000: The used table type doesn't support BLOB/TEXT columns +CREATE TABLE t1 (a INT PRIMARY KEY, b BLOB, c INT, KEY c(c)) ENGINE=MEMORY; +ERROR 42000: The used table type doesn't support BLOB/TEXT columns +CREATE TABLE t1 (a INT PRIMARY KEY, b TEXT, c INT, KEY c(c)) ENGINE=MEMORY; +ERROR 42000: The used table type doesn't support BLOB/TEXT columns +CREATE TABLE t1 (a BLOB, b INT) ENGINE=MEMORY; +ALTER TABLE t1 ADD INDEX idx_b (b); +ERROR 42000: The used table type doesn't support BLOB/TEXT columns +ALTER TABLE t1 ADD PRIMARY KEY (b); +ERROR 42000: The used table type doesn't support BLOB/TEXT columns +DROP TABLE t1; +CREATE TABLE t1 (a TEXT, b INT) ENGINE=MEMORY; +ALTER TABLE t1 ADD INDEX idx_b (b); +ERROR 42000: The used table type doesn't support BLOB/TEXT columns +ALTER TABLE t1 ADD PRIMARY KEY (b); +ERROR 42000: The used table type doesn't support BLOB/TEXT columns +DROP TABLE t1; +CREATE TABLE t1 (a INT PRIMARY KEY, b BLOB, c INT) ENGINE=MEMORY; +ALTER TABLE t1 ADD INDEX c (c); +ERROR 42000: The used table type doesn't support BLOB/TEXT columns +DROP TABLE t1; +CREATE TABLE t1 (a INT PRIMARY KEY, b TEXT, c INT) ENGINE=MEMORY; +ALTER TABLE t1 ADD INDEX c (c); +ERROR 42000: The used table type doesn't support BLOB/TEXT columns +DROP TABLE t1; +CREATE TABLE t1 (a BLOB, b INT PRIMARY KEY) ENGINE=InnoDB; +ALTER TABLE t1 ENGINE=MEMORY; +ERROR 42000: The used table type doesn't support BLOB/TEXT columns +DROP TABLE t1; +CREATE TABLE t1 (a TEXT, b INT PRIMARY KEY) ENGINE=InnoDB; +ALTER TABLE t1 ENGINE=MEMORY; +ERROR 42000: The used table type doesn't support BLOB/TEXT columns +DROP TABLE t1; +CREATE TABLE t1 (a INT PRIMARY KEY, b BLOB, c INT, KEY c(c)) ENGINE=InnoDB; +ALTER TABLE t1 ENGINE=MEMORY; +ERROR 42000: The used table type doesn't support BLOB/TEXT columns +DROP TABLE t1; +CREATE TABLE t1 (a INT PRIMARY KEY, b TEXT, c INT, KEY c(c)) ENGINE=InnoDB; +ALTER TABLE t1 ENGINE=MEMORY; +ERROR 42000: The used table type doesn't support BLOB/TEXT columns +DROP TABLE t1; +CREATE TABLE t1 (a INT PRIMARY KEY, b BLOB, c TEXT) ENGINE=MEMORY; +ALTER TABLE t1 MODIFY b BLOB FIRST; +ERROR 42000: The used table type doesn't support BLOB/TEXT columns +ALTER TABLE t1 MODIFY c TEXT FIRST; +ERROR 42000: The used table type doesn't support BLOB/TEXT columns +DROP TABLE t1; +CREATE TABLE t1 (a INT, b BLOB, c INT, PRIMARY KEY(a, c)) ENGINE=MEMORY; +ERROR 42000: The used table type doesn't support BLOB/TEXT columns +CREATE TABLE t1 (a INT, b TEXT, c INT, PRIMARY KEY(c, a)) ENGINE=MEMORY; +ERROR 42000: The used table type doesn't support BLOB/TEXT columns +CREATE TABLE t1 (a INT, b TEXT, c INT) ENGINE=MEMORY; +ALTER TABLE t1 ADD PRIMARY KEY (a, c); +ERROR 42000: The used table type doesn't support BLOB/TEXT columns +ALTER TABLE t1 ADD INDEX idx (c, a); +ERROR 42000: The used table type doesn't support BLOB/TEXT columns +DROP TABLE t1; diff --git a/mysql-test/t/heap.test b/mysql-test/t/heap.test index 35ac2128f20f..ef88b16a6655 100644 --- a/mysql-test/t/heap.test +++ b/mysql-test/t/heap.test @@ -532,23 +532,3 @@ SELECT * FROM t1 WHERE c1='bar2'; SELECT * FROM t1 IGNORE INDEX (i1) WHERE c1='bar2'; --echo #should show one tuple! DROP TABLE t1; - -# -# BUG 1706356: Adding Index corrupts data in memory table -# -CREATE TABLE t1 ( - rid bigint(20) NOT NULL AUTO_INCREMENT, - pid bigint(20) NOT NULL, - full_name text NOT NULL, - update_time int(11) NOT NULL DEFAULT '0', -PRIMARY KEY (`rid`) -) ENGINE=MEMORY DEFAULT CHARSET=utf8; - -INSERT INTO t1 (rid, pid, full_name, update_time) VALUES ('1170618590', '-2289398025558017', '"People Get Ready" by Jeff Beck and Rod Stewart', 1471513707), -('1170618636', '-2289398025558017', 'Rod Stewart - Da Ya Think I\'m Sexy (Dvj Gee Remix)', 1471513707); - -alter table t1 add INDEX idx_update USING BTREE (update_time ASC); - -select * from t1; - -DROP TABLE t1; diff --git a/mysql-test/t/percona_heap_blob.test b/mysql-test/t/percona_heap_blob.test index 8221ddcaa155..1addf02dd5d5 100644 --- a/mysql-test/t/percona_heap_blob.test +++ b/mysql-test/t/percona_heap_blob.test @@ -181,10 +181,7 @@ CREATE TABLE t3 ( PRIMARY KEY (t3_id), KEY _field_133 (_field_133), KEY _field_135 (_field_135), - KEY _field_139 (_field_139), - KEY _field_142 (_field_142), - KEY _field_145 (_field_145), - KEY _field_148 (_field_148) + KEY _field_139 (_field_139) ); diff --git a/mysql-test/t/percona_heap_var.test b/mysql-test/t/percona_heap_var.test index af048c29a48b..06c62632eead 100644 --- a/mysql-test/t/percona_heap_var.test +++ b/mysql-test/t/percona_heap_var.test @@ -1,6 +1,7 @@ # # Test heap tables with variable-sized records. # +--source include/have_innodb.inc --disable_warnings drop table if exists t1; @@ -83,3 +84,84 @@ select count(*) from t1; set @@session.max_heap_table_size=default; drop table t1; + +--echo # +--echo # Bug 1731483: MEMORY storage engine incorrectly allows BLOB columns before indexed columns +--echo # + +--error ER_TABLE_CANT_HANDLE_BLOB +CREATE TABLE t1 (a BLOB, b INT PRIMARY KEY) ENGINE=MEMORY; + +--error ER_TABLE_CANT_HANDLE_BLOB +CREATE TABLE t1 (a TEXT, b INT PRIMARY KEY) ENGINE=MEMORY; + +--error ER_TABLE_CANT_HANDLE_BLOB +CREATE TABLE t1 (a INT PRIMARY KEY, b BLOB, c INT, KEY c(c)) ENGINE=MEMORY; + +--error ER_TABLE_CANT_HANDLE_BLOB +CREATE TABLE t1 (a INT PRIMARY KEY, b TEXT, c INT, KEY c(c)) ENGINE=MEMORY; + +CREATE TABLE t1 (a BLOB, b INT) ENGINE=MEMORY; +--error ER_TABLE_CANT_HANDLE_BLOB +ALTER TABLE t1 ADD INDEX idx_b (b); +--error ER_TABLE_CANT_HANDLE_BLOB +ALTER TABLE t1 ADD PRIMARY KEY (b); +DROP TABLE t1; + +CREATE TABLE t1 (a TEXT, b INT) ENGINE=MEMORY; +--error ER_TABLE_CANT_HANDLE_BLOB +ALTER TABLE t1 ADD INDEX idx_b (b); +--error ER_TABLE_CANT_HANDLE_BLOB +ALTER TABLE t1 ADD PRIMARY KEY (b); +DROP TABLE t1; + +CREATE TABLE t1 (a INT PRIMARY KEY, b BLOB, c INT) ENGINE=MEMORY; +--error ER_TABLE_CANT_HANDLE_BLOB +ALTER TABLE t1 ADD INDEX c (c); +DROP TABLE t1; + +CREATE TABLE t1 (a INT PRIMARY KEY, b TEXT, c INT) ENGINE=MEMORY; +--error ER_TABLE_CANT_HANDLE_BLOB +ALTER TABLE t1 ADD INDEX c (c); +DROP TABLE t1; + +CREATE TABLE t1 (a BLOB, b INT PRIMARY KEY) ENGINE=InnoDB; +--error ER_TABLE_CANT_HANDLE_BLOB +ALTER TABLE t1 ENGINE=MEMORY; +DROP TABLE t1; + +CREATE TABLE t1 (a TEXT, b INT PRIMARY KEY) ENGINE=InnoDB; +--error ER_TABLE_CANT_HANDLE_BLOB +ALTER TABLE t1 ENGINE=MEMORY; +DROP TABLE t1; + +CREATE TABLE t1 (a INT PRIMARY KEY, b BLOB, c INT, KEY c(c)) ENGINE=InnoDB; +--error ER_TABLE_CANT_HANDLE_BLOB +ALTER TABLE t1 ENGINE=MEMORY; +DROP TABLE t1; + +CREATE TABLE t1 (a INT PRIMARY KEY, b TEXT, c INT, KEY c(c)) ENGINE=InnoDB; +--error ER_TABLE_CANT_HANDLE_BLOB +ALTER TABLE t1 ENGINE=MEMORY; +DROP TABLE t1; + +CREATE TABLE t1 (a INT PRIMARY KEY, b BLOB, c TEXT) ENGINE=MEMORY; +--error ER_TABLE_CANT_HANDLE_BLOB +ALTER TABLE t1 MODIFY b BLOB FIRST; +--error ER_TABLE_CANT_HANDLE_BLOB +ALTER TABLE t1 MODIFY c TEXT FIRST; + +DROP TABLE t1; + +--error ER_TABLE_CANT_HANDLE_BLOB +CREATE TABLE t1 (a INT, b BLOB, c INT, PRIMARY KEY(a, c)) ENGINE=MEMORY; + +--error ER_TABLE_CANT_HANDLE_BLOB +CREATE TABLE t1 (a INT, b TEXT, c INT, PRIMARY KEY(c, a)) ENGINE=MEMORY; + +CREATE TABLE t1 (a INT, b TEXT, c INT) ENGINE=MEMORY; +--error ER_TABLE_CANT_HANDLE_BLOB +ALTER TABLE t1 ADD PRIMARY KEY (a, c); +--error ER_TABLE_CANT_HANDLE_BLOB +ALTER TABLE t1 ADD INDEX idx (c, a); +DROP TABLE t1; diff --git a/storage/heap/ha_heap.cc b/storage/heap/ha_heap.cc index 41730510b0e9..0c46b7036bc6 100644 --- a/storage/heap/ha_heap.cc +++ b/storage/heap/ha_heap.cc @@ -654,7 +654,7 @@ heap_prepare_hp_create_info(TABLE *table_arg, bool internal_table, { uint key, parts, mem_per_row_keys= 0, keys= table_arg->s->keys; uint auto_key= 0, auto_key_type= 0; - uint fixed_data_size = 0, next_field_pos = 0; + uint fixed_key_fieldnr = 0, fixed_data_size = 0, next_field_pos = 0; uint column_idx, column_count= table_arg->s->fields; HP_COLUMNDEF *columndef; HP_KEYDEF *keydef; @@ -845,6 +845,15 @@ heap_prepare_hp_create_info(TABLE *table_arg, bool internal_table, { fixed_data_size= next_field_pos; } + + + if (field->field_index >= fixed_key_fieldnr) + { + /* + Do not use seg->fieldnr as it's not reliable in case of temp tables + */ + fixed_key_fieldnr= field->field_index + 1; + } } } @@ -868,6 +877,7 @@ heap_prepare_hp_create_info(TABLE *table_arg, bool internal_table, hp_create_info->is_dynamic= (share->row_type == ROW_TYPE_DYNAMIC); hp_create_info->columns= column_count; hp_create_info->columndef= columndef; + hp_create_info->fixed_key_fieldnr= fixed_key_fieldnr; hp_create_info->fixed_data_size= fixed_data_size; hp_create_info->max_records= (ulong) share->max_rows; hp_create_info->min_records= (ulong) share->min_rows; diff --git a/storage/heap/hp_create.c b/storage/heap/hp_create.c index 6ca6e4ff0435..0ae493a07a19 100644 --- a/storage/heap/hp_create.c +++ b/storage/heap/hp_create.c @@ -127,13 +127,26 @@ int heap_create(const char *name, HP_CREATE_INFO *create_info, if (is_variable_size) { - /* Check whether we have any variable size records past key data */ uint has_variable_fields= 0; - fixed_data_length= create_info->fixed_data_size; - fixed_column_count= 0; + fixed_column_count= create_info->fixed_key_fieldnr; + + /* Check whether we have any BLOB columns before key data, as currently + this is not supported */ + for (i= 0; i < fixed_column_count; i++) + { + HP_COLUMNDEF *column= create_info->columndef + i; + if (column->type == MYSQL_TYPE_BLOB) + { + my_error(ER_TABLE_CANT_HANDLE_BLOB, MYF(0)); + goto err; + } + } - for (i= fixed_column_count; i < create_info->columns; i++) + /* Check whether we have any variable size records past key data */ + fixed_data_length= create_info->fixed_data_size; + DBUG_ASSERT(i == create_info->fixed_key_fieldnr); + for (; i < create_info->columns; i++) { HP_COLUMNDEF *column= create_info->columndef + i; if ((column->type == MYSQL_TYPE_VARCHAR && diff --git a/storage/heap/hp_test1.c b/storage/heap/hp_test1.c index 0ee183cee275..8bb148dc1387 100644 --- a/storage/heap/hp_test1.c +++ b/storage/heap/hp_test1.c @@ -55,6 +55,7 @@ int main(int argc, char **argv) hp_create_info.min_records= 10UL; hp_create_info.columns= 2; hp_create_info.columndef= columndef; + hp_create_info.fixed_key_fieldnr= 30; hp_create_info.fixed_data_size= sizeof(char*) * 2; keyinfo[0].keysegs=1; diff --git a/storage/heap/hp_test2.c b/storage/heap/hp_test2.c index 6973e2752b55..aa9f9955db59 100644 --- a/storage/heap/hp_test2.c +++ b/storage/heap/hp_test2.c @@ -75,6 +75,7 @@ int main(int argc, char *argv[]) hp_create_info.min_records= (ulong) recant/2; hp_create_info.columns= 4; hp_create_info.columndef= columndef; + hp_create_info.fixed_key_fieldnr= 4; hp_create_info.fixed_data_size= 39; write_count=update=opt_delete=0; From f06443ce5f9ca8a65b60b595b2095f76d8f65206 Mon Sep 17 00:00:00 2001 From: Sreeharsha Ramanavarapu Date: Thu, 16 Nov 2017 09:31:12 +0530 Subject: [PATCH 0182/1221] Bug #26881946: INCORRECT BEHAVIOR WITH "VALUES" Issue: ------ VALUES doesn't have a type() function and is considered a Item_field. Solution for 5.7: ----------------- Add a new type() function for Item_values_insert. On 8.0 and trunk it was fixed by Mithun's Bug#19601973. Solution for 5.6: ----------------- Additionally Bug#17458914 is backported. This will address the problem of using VALUES() in INSERT ... ON DUPLICATE KEY UPDATE. Create a field object only if it is in the UPDATE clause, else return a NULL item. This will also address the problems mentioned in Bug#14789787 and Bug#16756402. Solution for 5.5: ----------------- As mentioned above Bug#17458914 is backported. Additionally Bug#14786324 is also backported. When VALUES() is detected outside its meaningful place, it should be treated as NULL and is thus replaced with a Field_null object, with the same name as the original field. Fields with type NULL are generally not handled well inside the server (e.g Innodb will not accept them and it is impossible to create them in regular tables). So create a new const NULL item instead. --- mysql-test/r/insert_update.result | 6 +++--- sql/item.cc | 27 ++++++++++++++------------- sql/item.h | 2 ++ sql/sql_insert.cc | 8 +++++++- sql/sql_lex.cc | 5 +++-- sql/sql_lex.h | 4 +++- 6 files changed, 32 insertions(+), 20 deletions(-) diff --git a/mysql-test/r/insert_update.result b/mysql-test/r/insert_update.result index a285810b78bf..31e7b253267d 100644 --- a/mysql-test/r/insert_update.result +++ b/mysql-test/r/insert_update.result @@ -60,12 +60,12 @@ explain extended SELECT *, VALUES(a) FROM t1; id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 ALL NULL NULL NULL NULL 5 100.00 Warnings: -Note 1003 select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,values(`test`.`t1`.`a`) AS `VALUES(a)` from `test`.`t1` +Note 1003 select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,NULL AS `VALUES(a)` from `test`.`t1` explain extended select * from t1 where values(a); id select_type table type possible_keys key key_len ref rows filtered Extra -1 SIMPLE t1 ALL NULL NULL NULL NULL 5 100.00 Using where +1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE Warnings: -Note 1003 select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c` from `test`.`t1` where values(`test`.`t1`.`a`) +Note 1003 select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c` from `test`.`t1` where 0 DROP TABLE t1; create table t1(a int primary key, b int); insert into t1 values(1,1),(2,2),(3,3),(4,4),(5,5); diff --git a/sql/item.cc b/sql/item.cc index 6f1fdaae398e..a37a61453e8d 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -7120,7 +7120,7 @@ Item *Item_default_value::transform(Item_transformer transformer, uchar *args) bool Item_insert_value::eq(const Item *item, bool binary_cmp) const { return item->type() == INSERT_VALUE_ITEM && - ((Item_default_value *)item)->arg->eq(arg, binary_cmp); + ((Item_insert_value *)item)->arg->eq(arg, binary_cmp); } @@ -7149,11 +7149,12 @@ bool Item_insert_value::fix_fields(THD *thd, Item **items) Item_field *field_arg= (Item_field *)arg; - if (field_arg->field->table->insert_values) + if (field_arg->field->table->insert_values && + thd->lex->in_update_value_clause) { Field *def_field= (Field*) sql_alloc(field_arg->field->size_of()); if (!def_field) - return TRUE; + return true; memcpy(def_field, field_arg->field, field_arg->field->size_of()); def_field->move_field_offset((my_ptrdiff_t) (def_field->table->insert_values - @@ -7162,17 +7163,17 @@ bool Item_insert_value::fix_fields(THD *thd, Item **items) } else { - Field *tmp_field= field_arg->field; - /* charset doesn't matter here, it's to avoid sigsegv only */ - tmp_field= new Field_null(0, 0, Field::NONE, field_arg->field->field_name, - &my_charset_bin); - if (tmp_field) - { - tmp_field->init(field_arg->field->table); - set_field(tmp_field); - } + // VALUES() is used out-of-scope - its value is always NULL + Query_arena backup; + Query_arena *const arena= thd->activate_stmt_arena_if_needed(&backup); + Item *const item= new Item_null(this->name); + if (arena) + thd->restore_active_arena(arena, &backup); + if (!item) + return TRUE; + *items= item; } - return FALSE; + return false; } void Item_insert_value::print(String *str, enum_query_type query_type) diff --git a/sql/item.h b/sql/item.h index 9f4e1d244241..3556a58ff826 100644 --- a/sql/item.h +++ b/sql/item.h @@ -3150,6 +3150,8 @@ class Item_insert_value : public Item_field :Item_field(context_arg, (const char *)NULL, (const char *)NULL, (const char *)NULL), arg(a) {} + + enum Type type() const { return INSERT_VALUE_ITEM; } bool eq(const Item *item, bool binary_cmp) const; bool fix_fields(THD *, Item **); virtual void print(String *str, enum_query_type query_type); diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index dc7cb6984761..5d1905bf4ba8 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -1393,9 +1393,12 @@ bool mysql_prepare_insert(THD *thd, TABLE_LIST *table_list, thd->abort_on_warning= saved_abort_on_warning; } + thd->lex->in_update_value_clause= true; if (!res) res= setup_fields(thd, 0, update_values, MARK_COLUMNS_READ, 0, 0); + thd->lex->in_update_value_clause= false; + if (!res && duplic == DUP_UPDATE) { select_lex->no_wrap_view_item= TRUE; @@ -3263,8 +3266,11 @@ select_insert::prepare(List &values, SELECT_LEX_UNIT *u) table_list->next_name_resolution_table= ctx_state.get_first_name_resolution_table(); + thd->lex->in_update_value_clause= true; res= res || setup_fields(thd, 0, *info.update_values, MARK_COLUMNS_READ, 0, 0); + + thd->lex->in_update_value_clause= false; if (!res) { /* diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index 50cdabe341a0..f7e9fd8570d1 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -2376,7 +2376,8 @@ void Query_tables_list::destroy_query_tables_list() */ LEX::LEX() - :result(0), option_type(OPT_DEFAULT), is_lex_started(0) + :result(0), option_type(OPT_DEFAULT), is_lex_started(0), + in_update_value_clause(false) { my_init_dynamic_array2(&plugins, sizeof(plugin_ref), diff --git a/sql/sql_lex.h b/sql/sql_lex.h index 867997feb398..3c950ebe1179 100644 --- a/sql/sql_lex.h +++ b/sql/sql_lex.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -2491,6 +2491,8 @@ struct LEX: public Query_tables_list bool escape_used; bool is_lex_started; /* If lex_start() did run. For debugging. */ + /// Set to true while resolving values in ON DUPLICATE KEY UPDATE clause + bool in_update_value_clause; /* The set of those tables whose fields are referenced in all subqueries From ca8facbe7cae0d1a3841fcd25a62e642ec3d8d32 Mon Sep 17 00:00:00 2001 From: Anibal Pinto Date: Thu, 16 Nov 2017 09:15:53 +0100 Subject: [PATCH 0183/1221] BUG#27091520: ERROR MSGS ARE NOT SUPPRESSED IN GR_RECOVERY_PURGED_DONOR_FAILOVER Missing supression to possible messages on recovery failure. --- .../tests/mtr/r/gr_recovery_purged_donor_failover.result | 2 ++ .../tests/mtr/t/gr_recovery_purged_donor_failover.test | 2 ++ 2 files changed, 4 insertions(+) diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_recovery_purged_donor_failover.result b/rapid/plugin/group_replication/tests/mtr/r/gr_recovery_purged_donor_failover.result index 9658ea4f4f93..5f75b6023a05 100644 --- a/rapid/plugin/group_replication/tests/mtr/r/gr_recovery_purged_donor_failover.result +++ b/rapid/plugin/group_replication/tests/mtr/r/gr_recovery_purged_donor_failover.result @@ -34,6 +34,8 @@ call mtr.add_suppression("Error while starting the group replication recovery re call mtr.add_suppression("Slave I/O for channel 'group_replication_recovery': Master command COM_REGISTER_SLAVE failed: Access denied for user 'recovery_user'.*"); call mtr.add_suppression("Slave I/O for channel 'group_replication_recovery': Master command COM_REGISTER_SLAVE failed: failed registering on master, reconnecting to try again.*"); call mtr.add_suppression("Slave I/O thread couldn't register on master"); +call mtr.add_suppression("Error while creating the group replication recovery channel with donor.*"); +call mtr.add_suppression("Error when configuring the group recovery connection to the donor.*"); SET SESSION sql_log_bin= 1; CHANGE MASTER TO MASTER_USER= 'recovery_user', MASTER_PASSWORD= 'recovery_password' FOR CHANNEL 'group_replication_recovery'; SET @debug_save_rec_int= @@GLOBAL.group_replication_recovery_reconnect_interval; diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_recovery_purged_donor_failover.test b/rapid/plugin/group_replication/tests/mtr/t/gr_recovery_purged_donor_failover.test index 11a17b1f0390..a8ca75a89de3 100644 --- a/rapid/plugin/group_replication/tests/mtr/t/gr_recovery_purged_donor_failover.test +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_recovery_purged_donor_failover.test @@ -96,6 +96,8 @@ call mtr.add_suppression("Error while starting the group replication recovery re call mtr.add_suppression("Slave I/O for channel 'group_replication_recovery': Master command COM_REGISTER_SLAVE failed: Access denied for user 'recovery_user'.*"); call mtr.add_suppression("Slave I/O for channel 'group_replication_recovery': Master command COM_REGISTER_SLAVE failed: failed registering on master, reconnecting to try again.*"); call mtr.add_suppression("Slave I/O thread couldn't register on master"); +call mtr.add_suppression("Error while creating the group replication recovery channel with donor.*"); +call mtr.add_suppression("Error when configuring the group recovery connection to the donor.*"); SET SESSION sql_log_bin= 1; --disable_warnings From 5b05cb8d4e96da3e13d14dda4e6b69f7a2da8c27 Mon Sep 17 00:00:00 2001 From: Venkatesh Venugopal Date: Thu, 16 Nov 2017 16:11:10 +0530 Subject: [PATCH 0184/1221] Bug#25695434: MEMORY LEAK IN MULTI-SOURCE REPLICATION WHEN BINLOG_ROWS_QUERY_LOG_EVENTS=1 Problem: -------- 1. In multi source replication, Slave SQL thread leaks memory when replicating using two channels from master-master pair when binlog_rows_query_log_events is enabled. 2. There is also a valgrind issue of invalid memory access assosciated with this bug. i.e, show processlist on slave accesses 'm_rows_query' even after it is deleted. Analysis: --------- For memory leak, Though it may seem that it requires three servers to reproduce the bug, but two servers are enough to reproduce it. 1) When binlog_rows_query_log_event is enabled on master, Rows_query_log_event is created and written into binary log prior to Rows_log_event. 2) On slave, when reading from the relay log and applying it, the event itself is stored in Relay_log_info::rows_query_ev. 3) Usually Relay_log_info::rows_query_ev is deleted after execution of Rows_log_event by the function rows_event_stmt_cleanup() which is called in the end. 4) But whenever the statement must be skipped (because slave has already applied the event from another channel) it does not delete the rows_query_ev instance and leads to memory leak. For valgrind issue, After deleting the rows_query_ev and before resetting the query, if someone gives 'SHOW PROCESSLIST', instead of printing NULL, the original query is printed. Fix: ---- For memory leak, Replace 'DBUG_RETURN(0)' with a 'goto end' so that rows_event_stmt_cleanup() function is called in the end and the memory allocated for that instance is freed. For valgrind issue, The query is reset first and then the rows_query_ev is freed. --- ...k_with_skipped_rows_query_log_event.result | 50 +++++++++++ ...em_access_with_rows_query_log_event.result | 43 ++++++++++ ...eak_with_skipped_rows_query_log_event.test | 83 +++++++++++++++++++ ..._mem_access_with_rows_query_log_event.test | 67 +++++++++++++++ sql/log_event.cc | 2 +- sql/rpl_rli.cc | 12 ++- 6 files changed, 255 insertions(+), 2 deletions(-) create mode 100644 mysql-test/suite/rpl/r/rpl_gtid_mem_leak_with_skipped_rows_query_log_event.result create mode 100644 mysql-test/suite/rpl/r/rpl_invalid_mem_access_with_rows_query_log_event.result create mode 100644 mysql-test/suite/rpl/t/rpl_gtid_mem_leak_with_skipped_rows_query_log_event.test create mode 100644 mysql-test/suite/rpl/t/rpl_invalid_mem_access_with_rows_query_log_event.test diff --git a/mysql-test/suite/rpl/r/rpl_gtid_mem_leak_with_skipped_rows_query_log_event.result b/mysql-test/suite/rpl/r/rpl_gtid_mem_leak_with_skipped_rows_query_log_event.result new file mode 100644 index 000000000000..86256463d7c0 --- /dev/null +++ b/mysql-test/suite/rpl/r/rpl_gtid_mem_leak_with_skipped_rows_query_log_event.result @@ -0,0 +1,50 @@ +# +# Step 1) Create a basic master-slave topology. +# +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +# +# Step 2) On master and slave, Set binlog_rows_query_log_events=on +# +SET @master_binlog_rows_query_log_events= @@session.binlog_rows_query_log_events; +SET @@session.binlog_rows_query_log_events=ON; +[connection slave] +SET @slave_binlog_rows_query_log_events= @@session.binlog_rows_query_log_events; +SET @@session.binlog_rows_query_log_events=ON; +[connection master] +# +# Step 3) Create a sample table on master. +# +CREATE TABLE t1(i INT); +# +# Step 4) Switch to slave and change the slave gtid_next to master_uuid +# and execute two empty transactions so that the next two events +# from master are skipped on slave. +# +include/sync_slave_sql_with_master.inc +SET GTID_NEXT='MASTER_UUID:2'; +BEGIN; +COMMIT; +SET GTID_NEXT='MASTER_UUID:3'; +BEGIN; +COMMIT; +SET GTID_NEXT=AUTOMATIC; +# +# Step 5) Connect to master, insert two rows and wait till slave is in +# sync with master. +# +[connection master] +INSERT INTO t1 VALUES (1); +INSERT INTO t1 VALUES (2); +include/sync_slave_sql_with_master.inc +# +# Step 6) Cleanup +# +SET @@session.binlog_rows_query_log_events= @slave_binlog_rows_query_log_events; +[connection master] +SET @@session.binlog_rows_query_log_events= @master_binlog_rows_query_log_events; +DROP TABLE t1; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl/r/rpl_invalid_mem_access_with_rows_query_log_event.result b/mysql-test/suite/rpl/r/rpl_invalid_mem_access_with_rows_query_log_event.result new file mode 100644 index 000000000000..0f9e9d79cedb --- /dev/null +++ b/mysql-test/suite/rpl/r/rpl_invalid_mem_access_with_rows_query_log_event.result @@ -0,0 +1,43 @@ +# +# Step 1) Create a basic master-slave topology with +# binlog_rows_query_log_events enabled on master. +# +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +SET @old_binlog_rows_query_log_events= @@session.binlog_rows_query_log_events; +SET @@session.binlog_rows_query_log_events=ON; +# +# Step 2) On master, create a table and wait till it is replicated to +# slave. +CREATE TABLE t1(a INT); +include/sync_slave_sql_with_master.inc +# +# Step 3) On slave, set a debug point 'after_deleting_the_rows_query_ev'. +# +SET @old_debug= @@global.debug; +# Adding debug point 'after_deleting_the_rows_query_ev' to @@GLOBAL.debug +# +# Step 4) On master, do an insert. +# +[connection master] +INSERT INTO t1 VALUES(1); +# +# Step 5) SHOW PROCESSLIST on slave should show NULL. +# +[connection slave] +SET DEBUG_SYNC= "now WAIT_FOR deleted_rows_query_ev"; +SELECT state,info FROM information_schema.processlist WHERE state like 'debug%';; +state debug sync point: now +info NULL +SET DEBUG_SYNC = "now SIGNAL go_ahead"; +# +# Step 6) Cleanup +# +SET GLOBAL debug= @old_debug; +[connection master] +DROP TABLE t1; +SET @@session.binlog_rows_query_log_events= @old_binlog_rows_query_log_events; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_gtid_mem_leak_with_skipped_rows_query_log_event.test b/mysql-test/suite/rpl/t/rpl_gtid_mem_leak_with_skipped_rows_query_log_event.test new file mode 100644 index 000000000000..543743958975 --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_gtid_mem_leak_with_skipped_rows_query_log_event.test @@ -0,0 +1,83 @@ +########################################################################### +# Bug#25695434 MEMORY LEAK IN MULTI-SOURCE REPLICATION WHEN +# BINLOG_ROWS_QUERY_LOG_EVENTS=1 +# +# Problem: In multi source replication, Slave SQL Thread leaks memory +# when replicating using two channels from master-master pair +# when binlog_rows_query_log_events is enabled. +# +# Steps to reproduce: +# +# 1) Create a gtid enabled master-slave topology. +# 2) On master, Set binlog_rows_query_log_events=on +# 3) Create a sample table on master. +# +# 4) Switch to slave and change the slave gtid_next to master_uuid and +# execute two empty transactions on slave so that the next two events +# from master are skipped on slave. +# +# 5) Connect to master, insert two rows and wait till slave is in sync with +# master. +# +# 6) Cleanup. +# +########################################################################### + +# This test requires GTIDs to be enabled. +--source include/have_gtid.inc +# This test requires the binlog format to be of 'row' type. +--source include/have_binlog_format_row.inc + +--echo # +--echo # Step 1) Create a basic master-slave topology. +--echo # +--source include/master-slave.inc +--let $master_uuid=`SELECT @@SERVER_UUID` + +--echo # +--echo # Step 2) On master and slave, Set binlog_rows_query_log_events=on +--echo # +SET @master_binlog_rows_query_log_events= @@session.binlog_rows_query_log_events; +SET @@session.binlog_rows_query_log_events=ON; +--source include/rpl_connection_slave.inc +SET @slave_binlog_rows_query_log_events= @@session.binlog_rows_query_log_events; +SET @@session.binlog_rows_query_log_events=ON; +--source include/rpl_connection_master.inc +--echo # +--echo # Step 3) Create a sample table on master. +--echo # +CREATE TABLE t1(i INT); + +--echo # +--echo # Step 4) Switch to slave and change the slave gtid_next to master_uuid +--echo # and execute two empty transactions so that the next two events +--echo # from master are skipped on slave. +--echo # +--source include/sync_slave_sql_with_master.inc +--replace_result $master_uuid MASTER_UUID +--eval SET GTID_NEXT='$master_uuid:2' +BEGIN; +COMMIT; +--replace_result $master_uuid MASTER_UUID +--eval SET GTID_NEXT='$master_uuid:3' +BEGIN; +COMMIT; +SET GTID_NEXT=AUTOMATIC; + +--echo # +--echo # Step 5) Connect to master, insert two rows and wait till slave is in +--echo # sync with master. +--echo # +--source include/rpl_connection_master.inc +INSERT INTO t1 VALUES (1); +INSERT INTO t1 VALUES (2); +--source include/sync_slave_sql_with_master.inc + +--echo # +--echo # Step 6) Cleanup +--echo # +SET @@session.binlog_rows_query_log_events= @slave_binlog_rows_query_log_events; +--source include/rpl_connection_master.inc +SET @@session.binlog_rows_query_log_events= @master_binlog_rows_query_log_events; +DROP TABLE t1; +--source include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_invalid_mem_access_with_rows_query_log_event.test b/mysql-test/suite/rpl/t/rpl_invalid_mem_access_with_rows_query_log_event.test new file mode 100644 index 000000000000..37de5c4b8a04 --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_invalid_mem_access_with_rows_query_log_event.test @@ -0,0 +1,67 @@ +########################################################################### +# Bug#25695434 MEMORY LEAK IN MULTI-SOURCE REPLICATION WHEN +# BINLOG_ROWS_QUERY_LOG_EVENTS=1 +# +# There is a valgrind issue of invalid memory access assosciated with the +# above bug. This issue is fixed as a part of the above mentioned bug. +# +# Problem: show processlist displays the query even after the event is +# deleted (valgrind issue). +# +# Steps to reproduce: +# 1) Create a basic master-slave topology with binlog_rows_query_log_events +# enabled on master. +# 2) On master, create a table and wait till it is replicated to slave. +# 3) On slave, set a debug point 'after_deleting_the_rows_query_ev'. +# 4) On master, do an insert. +# 5) SHOW PROCESSLIST on slave shows the query. +# 6) Cleanup +########################################################################### +--source include/have_debug.inc +--source include/have_debug_sync.inc + +# Since the binlog_rows_query_log_events system variable affects row-based +# logging, row format is used. +--source include/have_binlog_format_row.inc +--echo # +--echo # Step 1) Create a basic master-slave topology with +--echo # binlog_rows_query_log_events enabled on master. +--echo # +--source include/master-slave.inc +SET @old_binlog_rows_query_log_events= @@session.binlog_rows_query_log_events; +SET @@session.binlog_rows_query_log_events=ON; +--echo # +--echo # Step 2) On master, create a table and wait till it is replicated to +--echo # slave. +CREATE TABLE t1(a INT); +--source include/sync_slave_sql_with_master.inc + +--echo # +--echo # Step 3) On slave, set a debug point 'after_deleting_the_rows_query_ev'. +--echo # +SET @old_debug= @@global.debug; +--let $debug_point= after_deleting_the_rows_query_ev +--source include/add_debug_point.inc + +--echo # +--echo # Step 4) On master, do an insert. +--echo # +--source include/rpl_connection_master.inc +INSERT INTO t1 VALUES(1); + +--echo # +--echo # Step 5) SHOW PROCESSLIST on slave should show NULL. +--echo # +--source include/rpl_connection_slave.inc +SET DEBUG_SYNC= "now WAIT_FOR deleted_rows_query_ev"; +--query_vertical SELECT state,info FROM information_schema.processlist WHERE state like 'debug%'; +SET DEBUG_SYNC = "now SIGNAL go_ahead"; + +--echo # +--echo # Step 6) Cleanup +--echo # +SET GLOBAL debug= @old_debug; +--source include/rpl_connection_master.inc +DROP TABLE t1; +SET @@session.binlog_rows_query_log_events= @old_binlog_rows_query_log_events; +--source include/rpl_end.inc diff --git a/sql/log_event.cc b/sql/log_event.cc index 3179dd3a8fe3..e740e2ea586b 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -10808,7 +10808,7 @@ int Rows_log_event::do_apply_event(Relay_log_info const *rli) DBUG_RETURN(-1); } else if (state == GTID_STATEMENT_SKIP) - DBUG_RETURN(0); + goto end; /* The current statement is just about to begin and diff --git a/sql/rpl_rli.cc b/sql/rpl_rli.cc index 5b5b1a8f8abb..d2db5758b990 100644 --- a/sql/rpl_rli.cc +++ b/sql/rpl_rli.cc @@ -1785,9 +1785,19 @@ void Relay_log_info::cleanup_context(THD *thd, bool error) } if (rows_query_ev) { + /* + In order to avoid invalid memory access, THD::reset_query() should be + called before deleting the rows_query event. + */ + info_thd->reset_query(); delete rows_query_ev; rows_query_ev= NULL; - info_thd->reset_query(); + DBUG_EXECUTE_IF("after_deleting_the_rows_query_ev", + { + const char action[]="now SIGNAL deleted_rows_query_ev WAIT_FOR go_ahead"; + DBUG_ASSERT(!debug_sync_set_action(info_thd, + STRING_WITH_LEN(action))); + };); } m_table_map.clear_tables(); slave_close_thread_tables(thd); From a530f4daf6a2aff7b05a41e8b73850443fcb3577 Mon Sep 17 00:00:00 2001 From: Venkatesh Venugopal Date: Thu, 16 Nov 2017 16:48:47 +0530 Subject: [PATCH 0185/1221] Bug#26952994 A DOUBLE-FREE ISSUE Problem: -------- There is a typo error in the code which causes double free of a pointer. Fix: ---- Fixed the typo error and handled the null pointer. --- .../suite/rpl/r/rpl_double_free_bug.result | 35 ++++++++++++ .../suite/rpl/t/rpl_double_free_bug.test | 57 +++++++++++++++++++ sql/log_event.cc | 6 +- sql/rpl_utility.cc | 7 ++- 4 files changed, 101 insertions(+), 4 deletions(-) create mode 100644 mysql-test/suite/rpl/r/rpl_double_free_bug.result create mode 100644 mysql-test/suite/rpl/t/rpl_double_free_bug.test diff --git a/mysql-test/suite/rpl/r/rpl_double_free_bug.result b/mysql-test/suite/rpl/r/rpl_double_free_bug.result new file mode 100644 index 000000000000..8c08e0f02d65 --- /dev/null +++ b/mysql-test/suite/rpl/r/rpl_double_free_bug.result @@ -0,0 +1,35 @@ +#1) Create a master-slave topology with master's binlog_format=row. +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +#2) On slave, set slave_rows_search_algorithms= 'HASH_SCAN' and set a +# simulation point to fake a my_alloc_failure i.e, 'fake_malloc_failure'. +[connection slave] +call mtr.add_suppression("Slave SQL.*Could not execute Update_rows event on table test.t1"); +call mtr.add_suppression("Slave: Got error 1*"); +call mtr.add_suppression("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state"); +SET @saved_slave_rows_search_algorithms= @@global.slave_rows_search_algorithms; +SET GLOBAL slave_rows_search_algorithms= 'HASH_SCAN'; +SET @old_debug= @@global.debug; +SET GLOBAL debug= '+d,fake_myalloc_failure'; +#3) On master, create a table, insert a row and do an update. +[connection master] +CREATE TABLE t1 (a INT); +INSERT INTO t1 VALUES (1); +UPDATE t1 SET a=2 WHERE a=1; +#4) The update on master causes the slave sql thread to stop with Error 1030. +[connection slave] +include/wait_for_slave_sql_error.inc [errno=1030] +#5) Cleanup +SET GLOBAL debug= @old_debug; +SET GLOBAL slave_rows_search_algorithms= @saved_slave_rows_search_algorithms; +DROP TABLE t1; +[connection master] +DROP TABLE t1; +[connection slave] +include/wait_for_slave_sql_error.inc [errno=1030] +include/stop_slave_io.inc +RESET SLAVE; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_double_free_bug.test b/mysql-test/suite/rpl/t/rpl_double_free_bug.test new file mode 100644 index 000000000000..61273700d9d1 --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_double_free_bug.test @@ -0,0 +1,57 @@ +################################################################################ +# Bug#26952994 A DOUBLE-FREE ISSUE +# +# Problem: Slave crashes due to double free when there is an error in +# allocating memory in Hash_slave_rows::make_entry() function. +# +# Steps to reproduce: +# +# 1) Create a master-slave topology with master's binlog_format=row. +# 2) On slave, set slave_rows_search_algorithms= 'HASH_SCAN' and set a +# simulation point to fake a my_alloc_failure i.e, 'fake_myalloc_failure'. +# 3) On master, create a table, insert a row and do an update. +# 4) The update on master causes the slave sql thread to stop with Error 1030. +# 5) Cleanup. +# +################################################################################ +--echo #1) Create a master-slave topology with master's binlog_format=row. +--source include/have_debug.inc +--source include/have_binlog_format_row.inc +--source include/master-slave.inc + +--echo #2) On slave, set slave_rows_search_algorithms= 'HASH_SCAN' and set a +--echo # simulation point to fake a my_alloc_failure i.e, 'fake_malloc_failure'. +--source include/rpl_connection_slave.inc +call mtr.add_suppression("Slave SQL.*Could not execute Update_rows event on table test.t1"); +call mtr.add_suppression("Slave: Got error 1*"); +call mtr.add_suppression("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state"); +SET @saved_slave_rows_search_algorithms= @@global.slave_rows_search_algorithms; +SET GLOBAL slave_rows_search_algorithms= 'HASH_SCAN'; +SET @old_debug= @@global.debug; +SET GLOBAL debug= '+d,fake_myalloc_failure'; + +--echo #3) On master, create a table, insert a row and do an update. +--source include/rpl_connection_master.inc +CREATE TABLE t1 (a INT); +INSERT INTO t1 VALUES (1); +UPDATE t1 SET a=2 WHERE a=1; + +--echo #4) The update on master causes the slave sql thread to stop with Error 1030. +--source include/rpl_connection_slave.inc +--let $slave_sql_errno= convert_error(ER_GET_ERRNO) +--source include/wait_for_slave_sql_error.inc + +--echo #5) Cleanup +SET GLOBAL debug= @old_debug; +SET GLOBAL slave_rows_search_algorithms= @saved_slave_rows_search_algorithms; +DROP TABLE t1; +--source include/rpl_connection_master.inc +DROP TABLE t1; + +# Slave SQL thread has already stopped, stopping the IO trhead. +--source include/rpl_connection_slave.inc +--source include/wait_for_slave_sql_error.inc +--source include/stop_slave_io.inc +RESET SLAVE; +--let $rpl_only_running_threads= 1 +--source include/rpl_end.inc diff --git a/sql/log_event.cc b/sql/log_event.cc index bb152de16e16..b85b5d795030 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -10741,7 +10741,11 @@ int Rows_log_event::do_hash_row(Relay_log_info const *rli) /* create an empty entry to add to the hash table */ HASH_ROW_ENTRY* entry= m_hash.make_entry(); - + if (entry == NULL) + { + error= 1; + goto end; + } /* Prepare the record, unpack and save positions. */ entry->positions->bi_start= m_curr_row; // save the bi start pos prepare_record(m_table, &m_cols, false); diff --git a/sql/rpl_utility.cc b/sql/rpl_utility.cc index a085c4231849..36758205678e 100644 --- a/sql/rpl_utility.cc +++ b/sql/rpl_utility.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2006, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2006, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -1343,7 +1343,8 @@ HASH_ROW_ENTRY* Hash_slave_rows::make_entry(const uchar* bi_start, const uchar* HASH_ROW_PREAMBLE *preamble= (HASH_ROW_PREAMBLE *) my_malloc(sizeof(HASH_ROW_PREAMBLE), MYF(0)); HASH_ROW_POS *pos= (HASH_ROW_POS *) my_malloc(sizeof(HASH_ROW_POS), MYF(0)); - if (!entry || !preamble || !pos) + if (!entry || !preamble || !pos || + DBUG_EVALUATE_IF("fake_myalloc_failure",1, 0)) goto err; /** @@ -1372,7 +1373,7 @@ HASH_ROW_ENTRY* Hash_slave_rows::make_entry(const uchar* bi_start, const uchar* if (entry) my_free(entry); if (preamble) - my_free(entry); + my_free(preamble); if (pos) my_free(pos); DBUG_RETURN(NULL); From cfd94637c7ada0b6e7dcf86622bfe3a6e25f5d40 Mon Sep 17 00:00:00 2001 From: Nuno Carvalho Date: Mon, 13 Nov 2017 20:39:15 +0100 Subject: [PATCH 0186/1221] BUG#27105803: NO CHECK FOR DUPLICATE @@SERVER_UUID WHEN JOINING GROUP On Group Replication, like on asynchronous replication directly connected server, all servers that do belong a group must have unique server_uuid. The above condition was required but not enforced, this patch closes that gap. If a server tries to join a group with a server_uuid already in use by another server, the join does fail. --- .../include/gcs_event_handlers.h | 7 +- .../src/gcs_event_handlers.cc | 37 ++++++- rapid/plugin/group_replication/src/plugin.cc | 6 +- ...rver_uuid_matches_other_server_uuid.result | 46 +++++++++ ...server_uuid_matches_other_server_uuid.test | 98 +++++++++++++++++++ 5 files changed, 187 insertions(+), 7 deletions(-) create mode 100644 rapid/plugin/group_replication/tests/mtr/r/gr_server_uuid_matches_other_server_uuid.result create mode 100644 rapid/plugin/group_replication/tests/mtr/t/gr_server_uuid_matches_other_server_uuid.test diff --git a/rapid/plugin/group_replication/include/gcs_event_handlers.h b/rapid/plugin/group_replication/include/gcs_event_handlers.h index 0ed39e06cc1a..5639099974f0 100644 --- a/rapid/plugin/group_replication/include/gcs_event_handlers.h +++ b/rapid/plugin/group_replication/include/gcs_event_handlers.h @@ -104,8 +104,9 @@ class Plugin_gcs_events_handler: public Gcs_communication_event_listener, /* Methods to act upon members after a on_view_change(...) is called */ - void update_group_info_manager(const Gcs_view& new_view, + int update_group_info_manager(const Gcs_view& new_view, const Exchanged_data &exchanged_data, + bool is_joining, bool is_leaving) const; void handle_joining_members(const Gcs_view& new_view, @@ -173,7 +174,9 @@ class Plugin_gcs_events_handler: public Gcs_communication_event_listener, std::vector* all_members_info) const; int - process_local_exchanged_data(const Exchanged_data &exchanged_data) const; + process_local_exchanged_data(const Exchanged_data &exchanged_data, + bool is_joining) + const; /** Verifies if a certain Vector of Member Ids contains a given member id. diff --git a/rapid/plugin/group_replication/src/gcs_event_handlers.cc b/rapid/plugin/group_replication/src/gcs_event_handlers.cc index 4ed13eaf1271..58e8f89a99ea 100644 --- a/rapid/plugin/group_replication/src/gcs_event_handlers.cc +++ b/rapid/plugin/group_replication/src/gcs_event_handlers.cc @@ -498,7 +498,11 @@ Plugin_gcs_events_handler::on_view_changed(const Gcs_view& new_view, log_members_leaving_message(new_view); //update the Group Manager with all the received states - this->update_group_info_manager(new_view, exchanged_data, is_leaving); + if (update_group_info_manager(new_view, exchanged_data, is_joining, is_leaving)) + { + view_change_notifier->cancel_view_modification(); + return; + } if (!is_joining && new_view.get_joined_members().size() > 0) log_members_joining_message(new_view); @@ -858,18 +862,22 @@ void Plugin_gcs_events_handler::handle_leader_election_if_needed() const delete all_members_info; } -void Plugin_gcs_events_handler:: +int Plugin_gcs_events_handler:: update_group_info_manager(const Gcs_view& new_view, const Exchanged_data &exchanged_data, + bool is_joining, bool is_leaving) const { + int error= 0; + //update the Group Manager with all the received states vector to_update; if(!is_leaving) { //Process local state of exchanged data. - process_local_exchanged_data(exchanged_data); + if ((error= process_local_exchanged_data(exchanged_data, is_joining))) + goto err; to_update.insert(to_update.end(), temporary_states->begin(), @@ -897,7 +905,10 @@ update_group_info_manager(const Gcs_view& new_view, } } group_member_mgr->update(&to_update); + +err: temporary_states->clear(); + return error; } void Plugin_gcs_events_handler::handle_joining_members(const Gcs_view& new_view, @@ -1109,9 +1120,12 @@ is_member_on_vector(const vector& members, int Plugin_gcs_events_handler:: -process_local_exchanged_data(const Exchanged_data &exchanged_data) +process_local_exchanged_data(const Exchanged_data &exchanged_data, + bool is_joining) const { + uint local_uuid_found= 0; + /* For now, we are only carrying Group Member Info on Exchangeable data Since we are receiving the state from all Group members, one shall @@ -1153,6 +1167,12 @@ process_local_exchanged_data(const Exchanged_data &exchanged_data) member_infos_it != member_infos->end(); member_infos_it++) { + if (is_joining && + local_member_info->get_uuid() == (*member_infos_it)->get_uuid()) + { + local_uuid_found++; + } + /* Accept only the information the member has about himself Information received about other members is probably outdated @@ -1169,6 +1189,15 @@ process_local_exchanged_data(const Exchanged_data &exchanged_data) member_infos->clear(); delete member_infos; + + if (is_joining && local_uuid_found > 1) + { + log_message(MY_ERROR_LEVEL, + "There is already a member with server_uuid %s. " + "The member will now exit the group.", + local_member_info->get_uuid().c_str()); + return 1; + } } return 0; diff --git a/rapid/plugin/group_replication/src/plugin.cc b/rapid/plugin/group_replication/src/plugin.cc index 7f7055ba8bbe..c6e3079522f5 100644 --- a/rapid/plugin/group_replication/src/plugin.cc +++ b/rapid/plugin/group_replication/src/plugin.cc @@ -655,8 +655,12 @@ int configure_group_member_manager(char *hostname, char *uuid, local_version= plugin_version + (0x010000); };); Member_version local_member_plugin_version(local_version); - delete local_member_info; + DBUG_EXECUTE_IF("group_replication_force_member_uuid", + { + uuid= const_cast("cccccccc-cccc-cccc-cccc-cccccccccccc"); + };); + delete local_member_info; local_member_info= new Group_member_info(hostname, port, uuid, diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_server_uuid_matches_other_server_uuid.result b/rapid/plugin/group_replication/tests/mtr/r/gr_server_uuid_matches_other_server_uuid.result new file mode 100644 index 000000000000..1a737d407f43 --- /dev/null +++ b/rapid/plugin/group_replication/tests/mtr/r/gr_server_uuid_matches_other_server_uuid.result @@ -0,0 +1,46 @@ +include/group_replication.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection server1] + +############################################################ +# 1. Bootstrap a group on server1, forcing server1 uuid to +# "cccccccc-cccc-cccc-cccc-cccccccccccc". +[connection server1] +SET @debug_save= @@GLOBAL.DEBUG; +SET @@GLOBAL.DEBUG= '+d,group_replication_force_member_uuid'; +SET GLOBAL group_replication_group_name= "GROUP_REPLICATION_GROUP_NAME"; +SET GLOBAL group_replication_bootstrap_group= 1; +START GROUP_REPLICATION; + +############################################################ +# 2. Try to join a second member to the group with the same +# server uuid as server1. The join must fail. +[connection server2] +SET SESSION sql_log_bin= 0; +call mtr.add_suppression("There is already a member with server_uuid cccccccc-cccc-cccc-cccc-cccccccccccc. The member will now exit the group."); +SET SESSION sql_log_bin= 1; +SET @debug_save= @@GLOBAL.DEBUG; +SET @@GLOBAL.DEBUG= '+d,group_replication_force_member_uuid'; +SET GLOBAL group_replication_group_name= "GROUP_REPLICATION_GROUP_NAME"; +START GROUP_REPLICATION; +ERROR HY000: The server is not configured properly to be an active member of the group. Please see more details on error log. + +############################################################ +# 3. Assert that group membership is reported properly on +# both servers. +[connection server2] +include/assert.inc [Member2 only reports one member] +include/assert.inc [Member2 is reported as OFFLINE] +[connection server1] +include/assert.inc [Member1 only reports one member] +include/assert.inc [Member1 is reported as ONLINE] + +############################################################ +# 4. Clean up. +[connection server1] +SET @@GLOBAL.DEBUG= @debug_save; +[connection server2] +SET @@GLOBAL.DEBUG= @debug_save; +include/group_replication_end.inc diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_server_uuid_matches_other_server_uuid.test b/rapid/plugin/group_replication/tests/mtr/t/gr_server_uuid_matches_other_server_uuid.test new file mode 100644 index 000000000000..ca67c3b6f101 --- /dev/null +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_server_uuid_matches_other_server_uuid.test @@ -0,0 +1,98 @@ +################################################################################ +# Validate that Group Replication does allow serves with the same server_uuid on +# a group. The second server that tries to join with the same server_uuid will +# not be allowed to join. +# +# Test: +# 0. The test requires two servers: M1 and M2. +# 1. Bootstrap a group on server1, forcing server1 uuid to +# "cccccccc-cccc-cccc-cccc-cccccccccccc". +# 2. Try to join a second member to the group with the same +# server uuid as server1. The join must fail. +# 3. Assert that group membership is reported properly on +# both servers. +# 4. Clean up. +################################################################################ + +--source include/have_debug.inc +--source ../inc/have_group_replication_plugin.inc +--let $rpl_skip_group_replication_start= 1 +--source ../inc/group_replication.inc + + +--echo +--echo ############################################################ +--echo # 1. Bootstrap a group on server1, forcing server1 uuid to +--echo # "cccccccc-cccc-cccc-cccc-cccccccccccc". +--let $rpl_connection_name= server1 +--source include/rpl_connection.inc +SET @debug_save= @@GLOBAL.DEBUG; +SET @@GLOBAL.DEBUG= '+d,group_replication_force_member_uuid'; + +--replace_result $group_replication_group_name GROUP_REPLICATION_GROUP_NAME +--eval SET GLOBAL group_replication_group_name= "$group_replication_group_name" +SET GLOBAL group_replication_bootstrap_group= 1; +--source include/start_group_replication_command.inc +--source ../inc/gr_clear_bootstrap_group.inc +--let $wait_condition= SELECT COUNT(*)=1 FROM performance_schema.replication_group_members WHERE channel_name="group_replication_applier" AND member_id="cccccccc-cccc-cccc-cccc-cccccccccccc" AND member_state="ONLINE" +--source include/wait_condition.inc + + +--echo +--echo ############################################################ +--echo # 2. Try to join a second member to the group with the same +--echo # server uuid as server1. The join must fail. +--let $rpl_connection_name= server2 +--source include/rpl_connection.inc +SET SESSION sql_log_bin= 0; +call mtr.add_suppression("There is already a member with server_uuid cccccccc-cccc-cccc-cccc-cccccccccccc. The member will now exit the group."); +SET SESSION sql_log_bin= 1; + +SET @debug_save= @@GLOBAL.DEBUG; +SET @@GLOBAL.DEBUG= '+d,group_replication_force_member_uuid'; + +--replace_result $group_replication_group_name GROUP_REPLICATION_GROUP_NAME +--eval SET GLOBAL group_replication_group_name= "$group_replication_group_name" +--error ER_GROUP_REPLICATION_CONFIGURATION +START GROUP_REPLICATION; + + +--echo +--echo ############################################################ +--echo # 3. Assert that group membership is reported properly on +--echo # both servers. +--let $rpl_connection_name= server2 +--source include/rpl_connection.inc +--let $assert_text= Member2 only reports one member +--let $assert_cond= [SELECT COUNT(*) FROM performance_schema.replication_group_members] = 1 +--source include/assert.inc + +--let $server2_port= `SELECT @@GLOBAL.port` +--let $assert_text= Member2 is reported as OFFLINE +--let $assert_cond= [SELECT COUNT(*) FROM performance_schema.replication_group_members WHERE channel_name="group_replication_applier" AND member_id="cccccccc-cccc-cccc-cccc-cccccccccccc" AND member_state="OFFLINE" AND member_port=$server2_port] = 1 +--source include/assert.inc + +--let $rpl_connection_name= server1 +--source include/rpl_connection.inc +--let $assert_text= Member1 only reports one member +--let $assert_cond= [SELECT COUNT(*) FROM performance_schema.replication_group_members] = 1 +--source include/assert.inc + +--let $server1_port= `SELECT @@GLOBAL.port` +--let $assert_text= Member1 is reported as ONLINE +--let $assert_cond= [SELECT COUNT(*) FROM performance_schema.replication_group_members WHERE channel_name="group_replication_applier" AND member_id="cccccccc-cccc-cccc-cccc-cccccccccccc" AND member_state="ONLINE" AND member_port=$server1_port] = 1 +--source include/assert.inc + + +--echo +--echo ############################################################ +--echo # 4. Clean up. +--let $rpl_connection_name= server1 +--source include/rpl_connection.inc +SET @@GLOBAL.DEBUG= @debug_save; + +--let $rpl_connection_name= server2 +--source include/rpl_connection.inc +SET @@GLOBAL.DEBUG= @debug_save; + +--source ../inc/group_replication_end.inc From 128e965b80b29eca01e26ba3371edd0f7f0c28f0 Mon Sep 17 00:00:00 2001 From: Abhishek Ranjan Date: Thu, 16 Nov 2017 03:04:57 +0530 Subject: [PATCH 0187/1221] Bug#26727481 : SEGMENTATION FAULT DURING MYSQL_UPGRADE IN 8.0.3 Problem: --------- A table using pre mysql-5.0 decimal type triggers a segmentation fault during in-place upgrade to mysql-8.0. The segmentation fault is caused during the attempt to access the TABLE object before opening the table in ' Field_decimal::reset().'. Analysis: ---------- Pre 5.0 decimal type is not supported from mysql-5.0. Tables containing such un supported decimal type should be fixed by recreating the table using dump/restore method. CHECK TABLE command does not detect and give warnings for pre mysql-5.0 decimal types. Fix: ----- In mysql-5.7, the fix adds warning for pre mysql-5.0 decimal types. User will get the following message when executing CHECK TABLE command "Table upgrade required for `db_name`.`table_name`. Please dump/reload table to fix it!" mysql-8.0 will not allow in-place upgrade to 8.0 if pre mysql-5.0 decimal type is found in the data directory. Note: mysql_upgrade will report the above error for tables with old decimal. mysql_upgrade will not fix old decimal types in mysql-5.7. 'REPAIR TABLE' OR 'ALTER TABLE ... FORCE' will not fix the old decimal types in mysql-5.7. Tables containing such un supported decimal type should be fixed by recreating the table using dump/restore method. --- client/check/mysqlcheck_core.cc | 22 +++++++- mysql-test/r/check.result | 17 ++++++ mysql-test/r/mysql_upgrade.result | 82 +++++++++++++++++++++++++++++ mysql-test/std_data/41_decimal.MYD | Bin 0 -> 39 bytes mysql-test/std_data/41_decimal.MYI | Bin 0 -> 2048 bytes mysql-test/std_data/41_decimal.frm | Bin 0 -> 8584 bytes mysql-test/t/check.test | 15 ++++++ mysql-test/t/mysql_upgrade.test | 16 ++++++ sql/handler.cc | 19 ++++++- sql/handler.h | 2 + sql/sql_admin.cc | 21 +++++++- 11 files changed, 190 insertions(+), 4 deletions(-) create mode 100644 mysql-test/std_data/41_decimal.MYD create mode 100644 mysql-test/std_data/41_decimal.MYI create mode 100644 mysql-test/std_data/41_decimal.frm diff --git a/client/check/mysqlcheck_core.cc b/client/check/mysqlcheck_core.cc index 7724201ec06a..4a0207cb15a0 100644 --- a/client/check/mysqlcheck_core.cc +++ b/client/check/mysqlcheck_core.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2001, 2016, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2001, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -384,6 +384,7 @@ static void print_result() { const char *alter_txt= strstr(row[3], "ALTER TABLE"); found_error= 1; + if (alter_txt) { table_rebuild= 1; @@ -416,10 +417,29 @@ static void print_result() strcpy(prev_alter, alter_txt); } } + else + { + /* + Search the error message specific to pre 5.0 decimal type. + "REPAIR TABLE" should not be present in the error message and + "dump/reload" should be present in the error message. In this + case, do not add table to the repair list. + */ + const char *repair_txt= strstr(row[3], "REPAIR TABLE"); + const char *dump_txt= strstr(row[3], "dump/reload table"); + if (dump_txt && !repair_txt) + { + found_error= 0; + table_rebuild= 0; + prev_alter[0]= '\0'; + failed_tables.push_back(row[0]); + } + } } } else printf("%-9s: %s", row[2], row[3]); + my_stpcpy(prev, row[0]); putchar('\n'); } diff --git a/mysql-test/r/check.result b/mysql-test/r/check.result index 614cde5d241a..0d73710ec1e3 100644 --- a/mysql-test/r/check.result +++ b/mysql-test/r/check.result @@ -43,3 +43,20 @@ test.t1 check status Operation failed # Connection default UNLOCK TABLES; DROP TABLE t1; +# +# BUG#26727481: SEGMENTATION FAULT DURING MYSQL_UPGRADE IN 8.0.3 +# +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check error Table upgrade required for `test`.`t1`. Please dump/reload table to fix it! +CHECK TABLE t1 FOR UPGRADE; +Table Op Msg_type Msg_text +test.t1 check error Table upgrade required for `test`.`t1`. Please dump/reload table to fix it! +REPAIR TABLE t1; +Table Op Msg_type Msg_text +test.t1 repair status OK +#REPAIR TABLE does not fix pre 5.0 decimal types. +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check error Table upgrade required for `test`.`t1`. Please dump/reload table to fix it! +DROP TABLE t1; diff --git a/mysql-test/r/mysql_upgrade.result b/mysql-test/r/mysql_upgrade.result index 8f65ffa9cb68..33a9236fa84e 100644 --- a/mysql-test/r/mysql_upgrade.result +++ b/mysql-test/r/mysql_upgrade.result @@ -2684,5 +2684,87 @@ proc CREATE TABLE `proc` ( `body_utf8` longblob, PRIMARY KEY (`db`,`name`,`type`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Stored Procedures' +# +# BUG#26727481: SEGMENTATION FAULT DURING MYSQL_UPGRADE IN 8.0.3 +# +#mysql_upgrade will not fix pre 5.0 decimal types. +mysql.columns_priv OK +mysql.db OK +mysql.engine_cost OK +mysql.event OK +mysql.func OK +mysql.general_log OK +mysql.gtid_executed OK +mysql.help_category OK +mysql.help_keyword OK +mysql.help_relation OK +mysql.help_topic OK +mysql.innodb_index_stats OK +mysql.innodb_table_stats OK +mysql.ndb_binlog_index OK +mysql.plugin OK +mysql.proc OK +mysql.procs_priv OK +mysql.proxies_priv OK +mysql.server_cost OK +mysql.servers OK +mysql.slave_master_info OK +mysql.slave_relay_log_info OK +mysql.slave_worker_info OK +mysql.slow_log OK +mysql.tables_priv OK +mysql.time_zone OK +mysql.time_zone_leap_second OK +mysql.time_zone_name OK +mysql.time_zone_transition OK +mysql.time_zone_transition_type OK +mysql.user OK +mtr.global_suppressions OK +mtr.test_suppressions OK +sys.sys_config OK +test.t1 +error : Table upgrade required for `test`.`t1`. Please dump/reload table to fix it! +These tables cannot be automatically upgraded, see the log above: +test.t1 +#re-execute mysql_upgrade to check consistency +mysql.columns_priv OK +mysql.db OK +mysql.engine_cost OK +mysql.event OK +mysql.func OK +mysql.general_log OK +mysql.gtid_executed OK +mysql.help_category OK +mysql.help_keyword OK +mysql.help_relation OK +mysql.help_topic OK +mysql.innodb_index_stats OK +mysql.innodb_table_stats OK +mysql.ndb_binlog_index OK +mysql.plugin OK +mysql.proc OK +mysql.procs_priv OK +mysql.proxies_priv OK +mysql.server_cost OK +mysql.servers OK +mysql.slave_master_info OK +mysql.slave_relay_log_info OK +mysql.slave_worker_info OK +mysql.slow_log OK +mysql.tables_priv OK +mysql.time_zone OK +mysql.time_zone_leap_second OK +mysql.time_zone_name OK +mysql.time_zone_transition OK +mysql.time_zone_transition_type OK +mysql.user OK +mtr.global_suppressions OK +mtr.test_suppressions OK +sys.sys_config OK +test.t1 +error : Table upgrade required for `test`.`t1`. Please dump/reload table to fix it! +These tables cannot be automatically upgraded, see the log above: +test.t1 +DROP TABLE t1; End of tests diff --git a/mysql-test/std_data/41_decimal.MYD b/mysql-test/std_data/41_decimal.MYD new file mode 100644 index 0000000000000000000000000000000000000000..20e590c4c411603696ffb5461b496f3cead58622 GIT binary patch literal 39 mcmey%$iTp$prBx=XJl;pmkGi#(la(O{mTsD80(psngIZl2nQ1Y literal 0 HcmV?d00001 diff --git a/mysql-test/std_data/41_decimal.MYI b/mysql-test/std_data/41_decimal.MYI new file mode 100644 index 0000000000000000000000000000000000000000..e051c5ff77ba1f09453237081f25a5fd1961345c GIT binary patch literal 2048 zcmezOkDZZ$fiaq4149bK5e5*Ofdfb~Fev;7kwCxt54MGYfrSCpJO+ly(=NA>)kK~W(m*y7Ngm`jxH-sb@UVG-a>!T&$Orq8 zjTK@P3j>1yx_(AR21cMb7YK6NgJm6nPKVo$<_ZobbOT2DqaiRDLqGxOC}<7>vLMM8 U#E0bi(PRt^icv5c0>d=~028ktLjV8( literal 0 HcmV?d00001 diff --git a/mysql-test/std_data/41_decimal.frm b/mysql-test/std_data/41_decimal.frm new file mode 100644 index 0000000000000000000000000000000000000000..7e17585f0fc30b6ef06883707e334516a952e5f1 GIT binary patch literal 8584 zcmeI&u?oU46a~nfOjLNING3^=uF{m9mOk=pcG%|i zQ3hQ+k!qHJ1SB8<2}nQ!5|DrdBp`tf2|Nr&9V++lr5adlFy_8PM9uCyOh5e)@Sn4G uvgF16r(o;El?5M71eenpfs14A&yEViRgWoxFyz%A?p|e>@MYn-(&G)>K^z$X literal 0 HcmV?d00001 diff --git a/mysql-test/t/check.test b/mysql-test/t/check.test index 3ff97504c011..7441b7d036a9 100644 --- a/mysql-test/t/check.test +++ b/mysql-test/t/check.test @@ -81,6 +81,21 @@ UNLOCK TABLES; DROP TABLE t1; disconnect con1; +--echo # +--echo # BUG#26727481: SEGMENTATION FAULT DURING MYSQL_UPGRADE IN 8.0.3 +--echo # + +let $MYSQLD_DATADIR= `select @@datadir`; +--copy_file std_data/41_decimal.frm $MYSQLD_DATADIR/test/t1.frm +--copy_file std_data/41_decimal.MYD $MYSQLD_DATADIR/test/t1.MYD +--copy_file std_data/41_decimal.MYI $MYSQLD_DATADIR/test/t1.MYI + +CHECK TABLE t1; +CHECK TABLE t1 FOR UPGRADE; +REPAIR TABLE t1; +--echo #REPAIR TABLE does not fix pre 5.0 decimal types. +CHECK TABLE t1; +DROP TABLE t1; # Wait till we reached the initial number of concurrent sessions --source include/wait_until_count_sessions.inc diff --git a/mysql-test/t/mysql_upgrade.test b/mysql-test/t/mysql_upgrade.test index 058a0e596153..10454cd67887 100644 --- a/mysql-test/t/mysql_upgrade.test +++ b/mysql-test/t/mysql_upgrade.test @@ -1179,6 +1179,22 @@ SET sql_mode= @orig_sql_mode; --echo Check mysql.proc structure SHOW CREATE TABLE mysql.proc; +--echo # +--echo # BUG#26727481: SEGMENTATION FAULT DURING MYSQL_UPGRADE IN 8.0.3 +--echo # + +let $MYSQLD_DATADIR= `select @@datadir`; +--copy_file std_data/41_decimal.frm $MYSQLD_DATADIR/test/t1.frm +--copy_file std_data/41_decimal.MYD $MYSQLD_DATADIR/test/t1.MYD +--copy_file std_data/41_decimal.MYI $MYSQLD_DATADIR/test/t1.MYI + +--echo #mysql_upgrade will not fix pre 5.0 decimal types. +--exec $MYSQL_UPGRADE --skip-verbose --force 2>&1 + +--echo #re-execute mysql_upgrade to check consistency +--exec $MYSQL_UPGRADE --skip-verbose --force 2>&1 + +DROP TABLE t1; --source include/mysql_upgrade_cleanup.inc diff --git a/sql/handler.cc b/sql/handler.cc index 49db0b00ef60..4c57bf54298b 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -4314,7 +4314,7 @@ int handler::check_old_types() if (table->s->mysql_version == 0) // prior to MySQL 5.0 { /* check for bad DECIMAL field */ - if ((*field)->type() == MYSQL_TYPE_NEWDECIMAL) // TODO: error? MYSQL_TYPE_DECIMAL? + if ((*field)->type() == MYSQL_TYPE_NEWDECIMAL) { return HA_ADMIN_NEEDS_ALTER; } @@ -4323,6 +4323,19 @@ int handler::check_old_types() return HA_ADMIN_NEEDS_ALTER; } } + + /* + Check for old DECIMAL field. + + Above check does not take into account for pre 5.0 decimal types which can + be present in the data directory if user did in-place upgrade from + mysql-4.1 to mysql-5.0. + */ + if ((*field)->type() == MYSQL_TYPE_DECIMAL) + { + return HA_ADMIN_NEEDS_DUMP_UPGRADE; + } + if ((*field)->type() == MYSQL_TYPE_YEAR && (*field)->field_length == 2) return HA_ADMIN_NEEDS_ALTER; // obsolete YEAR(2) type @@ -4582,7 +4595,9 @@ int handler::ha_repair(THD* thd, HA_CHECK_OPT* check_opt) DBUG_ASSERT(result == HA_ADMIN_NOT_IMPLEMENTED || ha_table_flags() & HA_CAN_REPAIR); - if (result == HA_ADMIN_OK) + int old_types_error= check_old_types(); + + if (old_types_error != HA_ADMIN_NEEDS_DUMP_UPGRADE && result == HA_ADMIN_OK) result= update_frm_version(table); return result; } diff --git a/sql/handler.h b/sql/handler.h index 0c03a997714f..e787d4c3ebd0 100644 --- a/sql/handler.h +++ b/sql/handler.h @@ -70,6 +70,8 @@ typedef my_bool (*qc_engine_callback)(THD *thd, char *table_key, #define HA_ADMIN_NEEDS_CHECK -12 /** Needs ALTER TABLE t UPGRADE PARTITIONING. */ #define HA_ADMIN_NEEDS_UPG_PART -13 +/** Needs to dump and re-create to fix pre 5.0 decimal types */ +#define HA_ADMIN_NEEDS_DUMP_UPGRADE -14 /** Return values for check_if_supported_inplace_alter(). diff --git a/sql/sql_admin.cc b/sql/sql_admin.cc index 1090ecf7be9c..3fb3ee24b525 100644 --- a/sql/sql_admin.cc +++ b/sql/sql_admin.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2010, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -975,6 +975,25 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables, break; } + case HA_ADMIN_NEEDS_DUMP_UPGRADE: + { + char buf[MYSQL_ERRMSG_SIZE]; + size_t length; + + /* + mysql_upgrade avoids calling REPAIR TABLE for pre 5.0 decimal types + based on the text of following error message. If this error message is + changed, mysql_upgrade code should be fixed accordingly. + */ + protocol->store(STRING_WITH_LEN("error"), system_charset_info); + length= my_snprintf(buf, sizeof(buf), "Table upgrade required for " + "`%-.64s`.`%-.64s`. Please dump/reload table to " + "fix it!", table->db, table->table_name); + protocol->store(buf, length, system_charset_info); + fatal_error=1; + break; + } + default: // Probably HA_ADMIN_INTERNAL_ERROR { char buf[MYSQL_ERRMSG_SIZE]; From 63a540c8c3e93b7f15aec6260c0a85f1cd07f6dc Mon Sep 17 00:00:00 2001 From: Aditya A Date: Fri, 17 Nov 2017 14:46:09 +0530 Subject: [PATCH 0188/1221] Bug #24296076 INNODB REPORTS WARNING WHILE INNODB_UNDO_LOG_TRUNCATE IS ENABLED PROBLEM ------- This warning message is printed when trx_sys->rseg_history_len is greater than some arbitrary magic number (2000000). By seeing the reproducing scenario where we keep a read view open and do a lot of transactions on table which increases the hitsory length it is entirely possible that trx_sys->rseg_history_len can exceed 2000000. So this is not a bug due to corruption of history length.The warning message was just added to test some scenario and not removed. FIX --- 1.Print this warning message only for debug versions. 2.Modified the warning message with more detailed information. 3.Don't crash even in debug versions. [#rb 17929 Reviewed by jimmy and satya] --- storage/innobase/trx/trx0purge.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/storage/innobase/trx/trx0purge.c b/storage/innobase/trx/trx0purge.c index 0b3f389964b2..ae384943c045 100644 --- a/storage/innobase/trx/trx0purge.c +++ b/storage/innobase/trx/trx0purge.c @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2012, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2017, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -721,6 +721,7 @@ trx_purge_rseg_get_next_history_log( mutex_exit(&(rseg->mutex)); mtr_commit(&mtr); +#ifdef UNIV_DEBUG mutex_enter(&kernel_mutex); /* Add debug code to track history list corruption reported @@ -734,18 +735,20 @@ trx_purge_rseg_get_next_history_log( if (trx_sys->rseg_history_len > 2000000) { ut_print_timestamp(stderr); fprintf(stderr, - " InnoDB: Warning: purge reached the" + " InnoDB: Warning: purge reached the" " head of the history list,\n" "InnoDB: but its length is still" - " reported as %lu! Make a detailed bug\n" - "InnoDB: report, and submit it" - " to http://bugs.mysql.com\n", + " reported as %lu!." + " This can happen becasue a long" + " running transaction is withholding" + " purging of undo logs or a read" + " view is open. Please try to commit" + " the long running transaction.", (ulong) trx_sys->rseg_history_len); - ut_ad(0); } mutex_exit(&kernel_mutex); - +#endif return; } From cbf91dffb942a06dd3c473f1eef455b4cdc44e37 Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Tue, 10 Oct 2017 16:58:52 +0200 Subject: [PATCH 0189/1221] Bug#26612465 BUILDING WITH CMAKE 3.9.0 OR NEWER GIVES DEPRECATION WARNINGS [noclose] Backport of 7ee64d795b6adc0493c1aae68858ccc1142b7a8e - Collect all "convenience" libraries in ${CMAKE_BINARY_DIR}/archive_output_directory - Extend the ADD_CONVENIENCE_LIBRARY macro with a POST_BUILD target which will save library location for later merge with other static libraries. - Rewrite all the merge targets, with separate rules for MSVC / APPLE / LINUX / UNIX Additional functionality: - Retry linking on windows if CMAKE_LINKER fails. This handles possible change of toolchain from 32bit to 64bit when running cmake, and then building with devenv. Additional for 5.7 only, because of embedded server: - Add STATIC plugins to known convenience libraries, they may be merged into the embedded server library. - Add ndbclient_static as convenience library, it is needed for embedded. --- cmake/libutils.cmake | 265 ++++++++++++++------------- cmake/merge_archives.cmake.in | 162 ++++++++++++++++ cmake/merge_archives_unix.cmake.in | 63 ------- cmake/plugin.cmake | 21 +++ cmake/save_archive_location.cmake.in | 39 ++++ libmysql/CMakeLists.txt | 4 +- libmysqld/CMakeLists.txt | 8 +- storage/ndb/src/CMakeLists.txt | 20 +- 8 files changed, 383 insertions(+), 199 deletions(-) create mode 100644 cmake/merge_archives.cmake.in delete mode 100644 cmake/merge_archives_unix.cmake.in create mode 100644 cmake/save_archive_location.cmake.in diff --git a/cmake/libutils.cmake b/cmake/libutils.cmake index cbc190b864cf..573a5da03848 100644 --- a/cmake/libutils.cmake +++ b/cmake/libutils.cmake @@ -31,18 +31,6 @@ # libraries (we need it for mysqlclient) and to create shared library out of # convenience libraries(again, for mysqlclient) -# Following macros are exported -# - ADD_CONVENIENCE_LIBRARY(target source1...sourceN) -# This macro creates convenience library. The functionality is similar to -# ADD_LIBRARY(target STATIC source1...sourceN), the difference is that resulting -# library can always be linked to shared library -# -# - MERGE_LIBRARIES(target [STATIC|SHARED|MODULE] [linklib1 .... linklibN] -# [EXPORTS exported_func1 .... exported_func_N] -# [OUTPUT_NAME output_name] -# This macro merges several static libraries into a single one or creates a shared -# library from several convenience libraries - # Important global flags # - WITH_PIC : If set, it is assumed that everything is compiled as position # independent code (that is CFLAGS/CMAKE_C_FLAGS contain -fPIC or equivalent) @@ -79,8 +67,8 @@ MACRO(CREATE_EXPORT_FILE VAR TARGET API_FUNCTIONS) ENDMACRO() -# MYSQL_ADD_CONVENIENCE_LIBRARY(name source1...sourceN) -# Create static library that can be linked to shared library. +# ADD_CONVENIENCE_LIBRARY(name source1...sourceN) +# Create static library that can be merged with other libraries. # On systems that force position-independent code, adds -fPIC or # equivalent flag to compile flags. MACRO(ADD_CONVENIENCE_LIBRARY) @@ -92,9 +80,26 @@ MACRO(ADD_CONVENIENCE_LIBRARY) SET_TARGET_PROPERTIES(${TARGET} PROPERTIES POSITION_INDEPENDENT_CODE ON) ENDIF() + # Collect all static libraries in the same directory + SET_TARGET_PROPERTIES(${TARGET} PROPERTIES + ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/archive_output_directory) + # Keep track of known convenience libraries, in a global scope. SET(KNOWN_CONVENIENCE_LIBRARIES ${KNOWN_CONVENIENCE_LIBRARIES} ${TARGET} CACHE INTERNAL "" FORCE) + + # Generate a cmake file which will save the name of the library. + CONFIGURE_FILE( + ${MYSQL_CMAKE_SCRIPT_DIR}/save_archive_location.cmake.in + ${CMAKE_BINARY_DIR}/archive_output_directory/lib_location_${TARGET}.cmake + @ONLY) + ADD_CUSTOM_COMMAND(TARGET ${TARGET} POST_BUILD + COMMAND ${CMAKE_COMMAND} + -DTARGET_NAME=${TARGET} + -DTARGET_LOC=$ + -DCFG_INTDIR=${CMAKE_CFG_INTDIR} + -P ${CMAKE_BINARY_DIR}/archive_output_directory/lib_location_${TARGET}.cmake + ) ENDMACRO() @@ -104,6 +109,17 @@ MACRO(ADD_IMPORTED_LIBRARY TARGET LOC) SET_TARGET_PROPERTIES(${TARGET} PROPERTIES IMPORTED_LOCATION ${LOC}) SET(KNOWN_CONVENIENCE_LIBRARIES ${KNOWN_CONVENIENCE_LIBRARIES} ${TARGET} CACHE INTERNAL "" FORCE) + CONFIGURE_FILE( + ${MYSQL_CMAKE_SCRIPT_DIR}/save_archive_location.cmake.in + ${CMAKE_BINARY_DIR}/archive_output_directory/lib_location_${TARGET}.cmake + @ONLY) + ADD_CUSTOM_TARGET(${TARGET}_location + COMMAND ${CMAKE_COMMAND} + -DTARGET_NAME=${TARGET} + -DTARGET_LOC=$ + -DCFG_INTDIR=${CMAKE_CFG_INTDIR} + -P ${CMAKE_BINARY_DIR}/archive_output_directory/lib_location_${TARGET}.cmake + ) ENDMACRO() # Write content to file, using CONFIGURE_FILE @@ -118,132 +134,25 @@ MACRO(CONFIGURE_FILE_CONTENT content file) @ONLY) ENDMACRO() -# Merge static libraries into a big static lib. The resulting library -# should not not have dependencies on other static libraries. -# We use it in MySQL to merge mysys,dbug,vio etc into mysqlclient - -MACRO(MERGE_STATIC_LIBS TARGET OUTPUT_NAME LIBS_TO_MERGE) - # To produce a library we need at least one source file. - # It is created by ADD_CUSTOM_COMMAND below and will - # also help to track dependencies. - SET(SOURCE_FILE ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_depends.c) - ADD_LIBRARY(${TARGET} STATIC ${SOURCE_FILE}) - SET_TARGET_PROPERTIES(${TARGET} PROPERTIES OUTPUT_NAME ${OUTPUT_NAME}) - - SET(OSLIBS) - FOREACH(LIB ${LIBS_TO_MERGE}) - GET_TARGET_PROPERTY(LIB_LOCATION ${LIB} LOCATION) - GET_TARGET_PROPERTY(LIB_TYPE ${LIB} TYPE) - IF(NOT LIB_LOCATION) - # 3rd party library like libz.so. Make sure that everything - # that links to our library links to this one as well. - LIST(APPEND OSLIBS ${LIB}) - ELSE() - # This is a target in current project - # (can be a static or shared lib) - IF(LIB_TYPE STREQUAL "STATIC_LIBRARY") - SET(STATIC_LIBS ${STATIC_LIBS} ${LIB_LOCATION}) - ADD_DEPENDENCIES(${TARGET} ${LIB}) - # Extract dependend OS libraries - GET_DEPENDEND_OS_LIBS(${LIB} LIB_OSLIBS) - LIST(APPEND OSLIBS ${LIB_OSLIBS}) - ELSE() - # This is a shared library our static lib depends on. - LIST(APPEND OSLIBS ${LIB}) - ENDIF() - ENDIF() - ENDFOREACH() - - IF(OSLIBS) - LIST(REMOVE_DUPLICATES OSLIBS) - TARGET_LINK_LIBRARIES(${TARGET} ${OSLIBS}) - MESSAGE(STATUS "Library ${TARGET} depends on OSLIBS ${OSLIBS}") - ENDIF() - - IF(STATIC_LIBS) - LIST(REMOVE_DUPLICATES STATIC_LIBS) - ENDIF() - - # Make the generated dummy source file depended on all static input - # libs. If input lib changes,the source file is touched - # which causes the desired effect (relink). - ADD_CUSTOM_COMMAND( - OUTPUT ${SOURCE_FILE} - COMMAND ${CMAKE_COMMAND} -E touch ${SOURCE_FILE} - DEPENDS ${STATIC_LIBS}) - - IF(MSVC) - # To merge libs, just pass them to lib.exe command line. - SET(LINKER_EXTRA_FLAGS "") - FOREACH(LIB ${STATIC_LIBS}) - SET(LINKER_EXTRA_FLAGS "${LINKER_EXTRA_FLAGS} ${LIB}") - ENDFOREACH() - SET_TARGET_PROPERTIES(${TARGET} PROPERTIES STATIC_LIBRARY_FLAGS - "${LINKER_EXTRA_FLAGS}") - ELSE() - GET_TARGET_PROPERTY(TARGET_LOCATION ${TARGET} LOCATION) - IF(APPLE) - # Use OSX's libtool to merge archives (ihandles universal - # binaries properly) - ADD_CUSTOM_COMMAND(TARGET ${TARGET} POST_BUILD - COMMAND rm ${TARGET_LOCATION} - COMMAND /usr/bin/libtool -static -o ${TARGET_LOCATION} - ${STATIC_LIBS} - ) - ELSE() - # Generic Unix or MinGW. In post-build step, call - # script, that extracts objects from archives with "ar x" - # and repacks them with "ar r" - SET(TARGET ${TARGET}) - CONFIGURE_FILE( - ${MYSQL_CMAKE_SCRIPT_DIR}/merge_archives_unix.cmake.in - ${CMAKE_CURRENT_BINARY_DIR}/merge_archives_${TARGET}.cmake - @ONLY - ) - ADD_CUSTOM_COMMAND(TARGET ${TARGET} POST_BUILD - COMMAND rm ${TARGET_LOCATION} - COMMAND ${CMAKE_COMMAND} -P - ${CMAKE_CURRENT_BINARY_DIR}/merge_archives_${TARGET}.cmake - ) - ENDIF() - ENDIF() -ENDMACRO() - # Create libs from libs. # Merges static libraries, creates shared libraries out of convenience libraries. -# MERGE_LIBRARIES(target [STATIC|SHARED|MODULE] -# [linklib1 .... linklibN] -# [EXPORTS exported_func1 .... exportedFuncN] -# [OUTPUT_NAME output_name] -#) -MACRO(MERGE_LIBRARIES) +MACRO(MERGE_LIBRARIES_SHARED) MYSQL_PARSE_ARGUMENTS(ARG "EXPORTS;OUTPUT_NAME;COMPONENT" - "STATIC;SHARED;MODULE;SKIP_INSTALL" + "SKIP_INSTALL" ${ARGN} ) LIST(GET ARG_DEFAULT_ARGS 0 TARGET) SET(LIBS ${ARG_DEFAULT_ARGS}) LIST(REMOVE_AT LIBS 0) - IF(ARG_STATIC) - IF (NOT ARG_OUTPUT_NAME) - SET(ARG_OUTPUT_NAME ${TARGET}) - ENDIF() - MERGE_STATIC_LIBS(${TARGET} ${ARG_OUTPUT_NAME} "${LIBS}") - ELSEIF(ARG_SHARED OR ARG_MODULE) - IF(ARG_SHARED) - SET(LIBTYPE SHARED) - ELSE() - SET(LIBTYPE MODULE) - ENDIF() + + SET(LIBTYPE SHARED) # check for non-PIC libraries IF(NOT _SKIP_PIC) FOREACH(LIB ${LIBS}) GET_TARGET_PROPERTY(${LIB} TYPE LIBTYPE) IF(LIBTYPE STREQUAL "STATIC_LIBRARY") GET_TARGET_PROPERTY(LIB COMPILE_FLAGS LIB_COMPILE_FLAGS) - STRING(REPLACE "${CMAKE_SHARED_LIBRARY_C_FLAGS}" - "" LIB_COMPILE_FLAGS ${LIB_COMPILE_FLAG}) IF(NOT LIB_COMPILE_FLAGS MATCHES "") MESSAGE(FATAL_ERROR "Attempted to link non-PIC static library ${LIB} to shared library ${TARGET}\n" @@ -275,10 +184,9 @@ MACRO(MERGE_LIBRARIES) SET_TARGET_PROPERTIES( ${TARGET} PROPERTIES OUTPUT_NAME "${ARG_OUTPUT_NAME}") ENDIF() - SET_TARGET_PROPERTIES(${TARGET} PROPERTIES LINK_FLAGS "${export_link_flags}") - ELSE() - MESSAGE(FATAL_ERROR "Unknown library type") - ENDIF() + SET_TARGET_PROPERTIES( + ${TARGET} PROPERTIES LINK_FLAGS "${export_link_flags}") + IF(NOT ARG_SKIP_INSTALL) IF(ARG_COMPONENT) SET(COMP COMPONENT ${ARG_COMPONENT}) @@ -308,3 +216,102 @@ FUNCTION(GET_DEPENDEND_OS_LIBS target result) ENDIF() SET(${result} ${ret} PARENT_SCOPE) ENDFUNCTION() + + +MACRO(MERGE_CONVENIENCE_LIBRARIES) + MYSQL_PARSE_ARGUMENTS(ARG + "OUTPUT_NAME;COMPONENT" + "SKIP_INSTALL" + ${ARGN} + ) + LIST(GET ARG_DEFAULT_ARGS 0 TARGET) + SET(LIBS ${ARG_DEFAULT_ARGS}) + LIST(REMOVE_AT LIBS 0) + + MESSAGE(STATUS "MERGE_CONVENIENCE_LIBRARIES TARGET ${TARGET}") + MESSAGE(STATUS "MERGE_CONVENIENCE_LIBRARIES LIBS ${LIBS}") + + SET(SOURCE_FILE + ${CMAKE_BINARY_DIR}/archive_output_directory/${TARGET}_depends.c) + ADD_LIBRARY(${TARGET} STATIC ${SOURCE_FILE}) + IF(ARG_OUTPUT_NAME) + SET_TARGET_PROPERTIES(${TARGET} PROPERTIES OUTPUT_NAME "${ARG_OUTPUT_NAME}") + ENDIF() + + # Collect all static libraries in the same directory + SET_TARGET_PROPERTIES(${TARGET} PROPERTIES + ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/archive_output_directory) + + # Go though the list of libraries. + # Known convenience libraries should have type "STATIC_LIBRARY" + # We assume that that unknown libraries (type "LIB_TYPE-NOTFOUND") + # are operating system libraries, to be linked with TARGET + SET(OSLIBS) + SET(MYLIBS) + FOREACH(LIB ${LIBS}) + GET_TARGET_PROPERTY(LIB_TYPE ${LIB} TYPE) + IF(LIB_TYPE STREQUAL "STATIC_LIBRARY") + LIST(FIND KNOWN_CONVENIENCE_LIBRARIES ${LIB} FOUNDIT) + IF(FOUNDIT LESS 0) + MESSAGE(STATUS "Known libs : ${KNOWN_CONVENIENCE_LIBRARIES}") + MESSAGE(FATAL_ERROR "Unknown static library ${LIB} FOUNDIT ${FOUNDIT}") + ELSE() + ADD_DEPENDENCIES(${TARGET} ${LIB}) + GET_TARGET_PROPERTY(loc ${LIB} IMPORTED_LOCATION) + IF(loc) + ADD_DEPENDENCIES(${TARGET} ${LIB}_location) + ENDIF() + LIST(APPEND MYLIBS ${LIB}) + GET_DEPENDEND_OS_LIBS(${LIB} LIB_OSLIBS) + IF(LIB_OSLIBS) + # MESSAGE(STATUS "GET_DEPENDEND_OS_LIBS ${LIB} : ${LIB_OSLIBS}") + LIST(APPEND OSLIBS ${LIB_OSLIBS}) + ENDIF() + ENDIF() + ELSE() + # 3rd party library like libz.so. Make sure that everything + # that links to our library links to this one as well. + LIST(APPEND OSLIBS ${LIB}) + ENDIF() + # MESSAGE(STATUS "LIB ${LIB} LIB_TYPE ${LIB_TYPE}") + ENDFOREACH() + + IF(OSLIBS) + LIST(REMOVE_DUPLICATES OSLIBS) + TARGET_LINK_LIBRARIES(${TARGET} ${OSLIBS}) + MESSAGE(STATUS "Library ${TARGET} depends on OSLIBS ${OSLIBS}") + ENDIF() + + # Make the generated dummy source file depended on all static input + # libs. If input lib changes,the source file is touched + # which causes the desired effect (relink). + ADD_CUSTOM_COMMAND( + OUTPUT ${SOURCE_FILE} + COMMAND ${CMAKE_COMMAND} -E touch ${SOURCE_FILE} + DEPENDS ${MYLIBS} + ) + + MESSAGE(STATUS "MERGE_CONVENIENCE_LIBRARIES TARGET ${TARGET}") + MESSAGE(STATUS "MERGE_CONVENIENCE_LIBRARIES LIBS ${LIBS}") + MESSAGE(STATUS "MERGE_CONVENIENCE_LIBRARIES MYLIBS ${MYLIBS}") + + CONFIGURE_FILE( + ${MYSQL_CMAKE_SCRIPT_DIR}/merge_archives.cmake.in + ${CMAKE_BINARY_DIR}/archive_output_directory/lib_merge_${TARGET}.cmake + @ONLY) + ADD_CUSTOM_COMMAND(TARGET ${TARGET} POST_BUILD + COMMAND ${CMAKE_COMMAND} + -DTARGET_NAME=${TARGET} + -DTARGET_LOC=$ + -DCFG_INTDIR=${CMAKE_CFG_INTDIR} + -P ${CMAKE_BINARY_DIR}/archive_output_directory/lib_merge_${TARGET}.cmake + COMMENT "Merging library ${TARGET}" + ) + + IF(NOT ARG_SKIP_INSTALL) + IF(ARG_COMPONENT) + SET(COMP COMPONENT ${ARG_COMPONENT}) + ENDIF() + MYSQL_INSTALL_TARGETS(${TARGET} DESTINATION "${INSTALL_LIBDIR}" ${COMP}) + ENDIF() +ENDMACRO() diff --git a/cmake/merge_archives.cmake.in b/cmake/merge_archives.cmake.in new file mode 100644 index 000000000000..d9a9550a8325 --- /dev/null +++ b/cmake/merge_archives.cmake.in @@ -0,0 +1,162 @@ +# Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. +# +# 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 + +# Build TARGET_NAME (a static library) from "convenience libraries" +# -DTARGET_NAME=${TARGET} +# -DTARGET_LOC=$ +# -DCFG_INTDIR=${CMAKE_CFG_INTDIR} + +SET(APPLE "@APPLE@") +SET(LINUX "@LINUX@") +SET(MSVC "@MSVC@") +SET(SOLARIS "@SOLARIS@") +SET(UNIX "@UNIX@") + +SET(MYLIBS "@MYLIBS@") +SET(MYSQL_CMAKE_SCRIPT_DIR "@MYSQL_CMAKE_SCRIPT_DIR@") + +SET(CMAKE_AR "@CMAKE_AR@") +SET(CMAKE_BINARY_DIR "@CMAKE_BINARY_DIR@") +SET(CMAKE_COMMAND "@CMAKE_COMMAND@") +SET(CMAKE_CXX_CREATE_STATIC_LIBRARY "@CMAKE_CXX_CREATE_STATIC_LIBRARY@") +SET(CMAKE_C_CREATE_STATIC_LIBRARY "@CMAKE_C_CREATE_STATIC_LIBRARY@") +SET(CMAKE_LINKER "@CMAKE_LINKER@") +SET(CMAKE_RANLIB "@CMAKE_RANLIB@") +SET(CMAKE_STATIC_LINKER_FLAGS "@CMAKE_STATIC_LINKER_FLAGS@") + +# MESSAGE(STATUS "merge_archives MYLIBS ${MYLIBS}") +# MESSAGE(STATUS "merge_archives TARGET_LINK_FLAGS ${TARGET_LINK_FLAGS}") +# MESSAGE(STATUS "merge_archives TARGET_LOC ${TARGET_LOC}") +# MESSAGE(STATUS "merge_archives TARGET_NAME ${TARGET_NAME}") +# +# MESSAGE(STATUS "merge_archives CMAKE_AR ${CMAKE_AR}") +# MESSAGE(STATUS "merge_archives CMAKE_BINARY_DIR ${CMAKE_BINARY_DIR}") +# MESSAGE(STATUS "merge_archives CMAKE_COMMAND ${CMAKE_COMMAND}") +# MESSAGE(STATUS "merge_archives CMAKE_CXX_CREATE_STATIC_LIBRARY ${CMAKE_CXX_CREATE_STATIC_LIBRARY}") +# MESSAGE(STATUS "merge_archives CMAKE_C_CREATE_STATIC_LIBRARY ${CMAKE_C_CREATE_STATIC_LIBRARY}") +# MESSAGE(STATUS "merge_archives CMAKE_LINKER ${CMAKE_LINKER}") +# MESSAGE(STATUS "merge_archives CMAKE_RANLIB ${CMAKE_RANLIB}") +# MESSAGE(STATUS "merge_archives CMAKE_STATIC_LINKER_FLAGS ${CMAKE_STATIC_LINKER_FLAGS}") + +SET(LIB_LOCATIONS) +FOREACH(LIB ${MYLIBS}) + SET(FILENAME "${CMAKE_BINARY_DIR}/archive_output_directory") + SET(FILENAME "${FILENAME}/${CFG_INTDIR}/lib_location_${LIB}") + FILE(READ ${FILENAME} CONTENT) + STRING(REGEX REPLACE "\n" "" LIB_LOCATION ${CONTENT}) + LIST(APPEND LIB_LOCATIONS ${LIB_LOCATION}) +# MESSAGE(STATUS "LIB ${LIB} LIB_LOCATION ${LIB_LOCATION}") +ENDFOREACH() + +MACRO(CONFIGURE_FILE_CONTENT content file) + SET(CMAKE_CONFIGURABLE_FILE_CONTENT + "${content}") + CONFIGURE_FILE( + ${MYSQL_CMAKE_SCRIPT_DIR}/configurable_file_content.in + ${file} + @ONLY) +ENDMACRO() + +# Remove the "dummy" library, created from the empty ${TARGET}_depends.c +EXECUTE_PROCESS( + COMMAND ${CMAKE_COMMAND} -E remove ${TARGET_LOC} + ) + +IF(MSVC) + # See CMAKE_CXX_CREATE_STATIC_LIBRARY + FIND_PROGRAM(LINK_IN_PATH "link.exe") + MESSAGE(STATUS "merge_archives linker in PATH is ${LINK_IN_PATH}") + + EXECUTE_PROCESS( + COMMAND ${CMAKE_LINKER} "/lib" "/NOLOGO" "${CMAKE_STATIC_LINKER_FLAGS}" + "/OUT:${TARGET_LOC}" ${LIB_LOCATIONS} + RESULT_VARIABLE link_result + OUTPUT_FILE link_output_file + ERROR_FILE link_error_file + ) + MESSAGE(STATUS "link_result is ${link_result}") + IF(link_result) + MESSAGE(WARNING "Retrying link with ${LINK_IN_PATH}") + EXECUTE_PROCESS( + COMMAND ${LINK_IN_PATH} "/lib" "/NOLOGO" "${CMAKE_STATIC_LINKER_FLAGS}" + "/OUT:${TARGET_LOC}" ${LIB_LOCATIONS} + RESULT_VARIABLE link_result + ) + ENDIF() + +ELSEIF(APPLE) + # libtool handles it for us + EXECUTE_PROCESS( + COMMAND /usr/bin/libtool -static -o ${TARGET_LOC} ${LIB_LOCATIONS} + ) +ELSEIF(LINUX) + # First create a "thin" archive, then convert it to a normal one. + SET(CONTENT "create ${TARGET_LOC}\n") + SET(CONTENT "${CONTENT}addlib ${TARGET_LOC}\n") + SET(CONTENT "${CONTENT}save\n") + SET(CONTENT "${CONTENT}end\n") + CONFIGURE_FILE_CONTENT( + ${CONTENT} + "${CMAKE_BINARY_DIR}/archive_output_directory/cmake_ar_m_${TARGET_NAME}") + EXECUTE_PROCESS( + COMMAND ${CMAKE_AR} cqT ${TARGET_LOC} ${LIB_LOCATIONS} + ) + EXECUTE_PROCESS( + COMMAND ${CMAKE_AR} -M + INPUT_FILE + "${CMAKE_BINARY_DIR}/archive_output_directory/cmake_ar_m_${TARGET_NAME}" + ) + EXECUTE_PROCESS( + COMMAND ${CMAKE_RANLIB} ${TARGET_LOC} + ) +ELSEIF(UNIX) + # freebsd and solaris, run 'ar -x' on all libraries, + # followed by 'ar -r' on all .o files + SET(TEMP_DIR + "${CMAKE_BINARY_DIR}/archive_output_directory/merge_archives_${TARGET_NAME}") + MAKE_DIRECTORY(${TEMP_DIR}) + FOREACH(LIB ${LIB_LOCATIONS}) + GET_FILENAME_COMPONENT(NAME_NO_EXT ${LIB} NAME_WE) + SET(TEMP_SUBDIR ${TEMP_DIR}/${NAME_NO_EXT}) + MAKE_DIRECTORY(${TEMP_SUBDIR}) + # Extract files into a sub-directory + EXECUTE_PROCESS( + COMMAND ${CMAKE_AR} -x ${LIB} + WORKING_DIRECTORY ${TEMP_SUBDIR} + ) + FILE(GLOB_RECURSE LIB_OBJECTS "${TEMP_SUBDIR}/*") + SET(OBJECTS ${OBJECTS} ${LIB_OBJECTS}) + ENDFOREACH() + + # Use relative paths, makes command line shorter. + FOREACH(OBJ ${OBJECTS}) + FILE(RELATIVE_PATH OBJ ${TEMP_DIR} ${OBJ}) + FILE(TO_NATIVE_PATH ${OBJ} OBJ) + SET(ALL_OBJECTS ${ALL_OBJECTS} ${OBJ}) + ENDFOREACH() + + EXECUTE_PROCESS( + COMMAND ${CMAKE_AR} -r ${TARGET_LOC} ${ALL_OBJECTS} + WORKING_DIRECTORY ${TEMP_DIR} + ) + EXECUTE_PROCESS( + COMMAND ${CMAKE_RANLIB} ${TARGET_LOC} + ) + + # Cleanup + FILE(REMOVE_RECURSE ${TEMP_DIR}) +ELSE() + MESSAGE(FATAL_ERROR "Don't know how to merge libraries.") +ENDIF() diff --git a/cmake/merge_archives_unix.cmake.in b/cmake/merge_archives_unix.cmake.in deleted file mode 100644 index d05336d6c919..000000000000 --- a/cmake/merge_archives_unix.cmake.in +++ /dev/null @@ -1,63 +0,0 @@ -# Copyright (c) 2009 Sun Microsystems, Inc. -# Use is subject to license terms. -# -# 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 script merges many static libraries into -# one big library on Unix. -SET(TARGET_LOCATION "@TARGET_LOCATION@") -SET(TARGET "@TARGET@") -SET(STATIC_LIBS "@STATIC_LIBS@") -SET(CMAKE_CURRENT_BINARY_DIR "@CMAKE_CURRENT_BINARY_DIR@") -SET(CMAKE_AR "@CMAKE_AR@") -SET(CMAKE_RANLIB "@CMAKE_RANLIB@") - - -SET(TEMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/merge_archives_${TARGET}) -MAKE_DIRECTORY(${TEMP_DIR}) -# Extract each archive to its own subdirectory(avoid object filename clashes) -FOREACH(LIB ${STATIC_LIBS}) - GET_FILENAME_COMPONENT(NAME_NO_EXT ${LIB} NAME_WE) - SET(TEMP_SUBDIR ${TEMP_DIR}/${NAME_NO_EXT}) - MAKE_DIRECTORY(${TEMP_SUBDIR}) - EXECUTE_PROCESS( - COMMAND ${CMAKE_AR} -x ${LIB} - WORKING_DIRECTORY ${TEMP_SUBDIR} - ) - - FILE(GLOB_RECURSE LIB_OBJECTS "${TEMP_SUBDIR}/*") - SET(OBJECTS ${OBJECTS} ${LIB_OBJECTS}) -ENDFOREACH() - -# Use relative paths, makes command line shorter. -GET_FILENAME_COMPONENT(ABS_TEMP_DIR ${TEMP_DIR} ABSOLUTE) -FOREACH(OBJ ${OBJECTS}) - FILE(RELATIVE_PATH OBJ ${ABS_TEMP_DIR} ${OBJ}) - FILE(TO_NATIVE_PATH ${OBJ} OBJ) - SET(ALL_OBJECTS ${ALL_OBJECTS} ${OBJ}) -ENDFOREACH() - -FILE(TO_NATIVE_PATH ${TARGET_LOCATION} ${TARGET_LOCATION}) -# Now pack the objects into library with ar. -EXECUTE_PROCESS( - COMMAND ${CMAKE_AR} -r ${TARGET_LOCATION} ${ALL_OBJECTS} - WORKING_DIRECTORY ${TEMP_DIR} -) -EXECUTE_PROCESS( - COMMAND ${CMAKE_RANLIB} ${TARGET_LOCATION} - WORKING_DIRECTORY ${TEMP_DIR} -) - -# Cleanup -FILE(REMOVE_RECURSE ${TEMP_DIR}) diff --git a/cmake/plugin.cmake b/cmake/plugin.cmake index 51cdc1314f4f..b7a1709b3804 100644 --- a/cmake/plugin.cmake +++ b/cmake/plugin.cmake @@ -124,6 +124,27 @@ MACRO(MYSQL_ADD_PLUGIN) ADD_LIBRARY(${target} STATIC ${SOURCES}) SET_TARGET_PROPERTIES(${target} PROPERTIES COMPILE_DEFINITIONS "MYSQL_SERVER") + # Collect all static libraries in the same directory + SET_TARGET_PROPERTIES(${target} PROPERTIES + ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/archive_output_directory) + + # Keep track of known convenience libraries, in a global scope. + # Static plugins may be linked into the mysqlserver library (embedded) + SET(KNOWN_CONVENIENCE_LIBRARIES + ${KNOWN_CONVENIENCE_LIBRARIES} ${target} CACHE INTERNAL "" FORCE) + + # Generate a cmake file which will save the name of the library. + CONFIGURE_FILE( + ${MYSQL_CMAKE_SCRIPT_DIR}/save_archive_location.cmake.in + ${CMAKE_BINARY_DIR}/archive_output_directory/lib_location_${target}.cmake + @ONLY) + ADD_CUSTOM_COMMAND(TARGET ${target} POST_BUILD + COMMAND ${CMAKE_COMMAND} + -DTARGET_NAME=${target} + -DTARGET_LOC=$ + -DCFG_INTDIR=${CMAKE_CFG_INTDIR} + -P ${CMAKE_BINARY_DIR}/archive_output_directory/lib_location_${target}.cmake + ) DTRACE_INSTRUMENT(${target}) ADD_DEPENDENCIES(${target} GenError ${ARG_DEPENDENCIES}) diff --git a/cmake/save_archive_location.cmake.in b/cmake/save_archive_location.cmake.in new file mode 100644 index 000000000000..079cf3330691 --- /dev/null +++ b/cmake/save_archive_location.cmake.in @@ -0,0 +1,39 @@ +# Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. +# +# 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 + +# Save TARGET_NAME and TARGET_LOC +# -DTARGET_NAME=${TARGET} +# -DTARGET_LOC=$ +# -DCFG_INTDIR=${CMAKE_CFG_INTDIR} +# +# Creates a file lib_location_${TARGET_NAME} which contains +# the target location of TARGET_NAME (a static library) + +SET(CMAKE_BINARY_DIR "@CMAKE_BINARY_DIR@") +SET(MYSQL_CMAKE_SCRIPT_DIR "@MYSQL_CMAKE_SCRIPT_DIR@") + +MACRO(CONFIGURE_FILE_CONTENT content file) + SET(CMAKE_CONFIGURABLE_FILE_CONTENT + "${content}") + CONFIGURE_FILE( + ${MYSQL_CMAKE_SCRIPT_DIR}/configurable_file_content.in + ${file} + @ONLY) +ENDMACRO() + +SET(FILENAME "${CMAKE_BINARY_DIR}/archive_output_directory") +SET(FILENAME "${FILENAME}/${CFG_INTDIR}/lib_location_${TARGET_NAME}") + +CONFIGURE_FILE_CONTENT("${TARGET_LOC}" ${FILENAME}) diff --git a/libmysql/CMakeLists.txt b/libmysql/CMakeLists.txt index 9151237cbb5d..60d3e103c68f 100644 --- a/libmysql/CMakeLists.txt +++ b/libmysql/CMakeLists.txt @@ -235,7 +235,7 @@ MESSAGE(STATUS "Creating LDAP authentication SASL client library.") ADD_SUBDIRECTORY(authentication_ldap) # Merge several convenience libraries into one big mysqlclient -MERGE_LIBRARIES(mysqlclient STATIC ${LIBS} COMPONENT Development) +MERGE_CONVENIENCE_LIBRARIES(mysqlclient ${LIBS} COMPONENT Development) # Visual Studio users need debug static library for debug projects IF(MSVC) @@ -269,7 +269,7 @@ ENDIF() IF(NOT DISABLE_SHARED) # Merge several convenience libraries into one big mysqlclient # and link them together into shared library. - MERGE_LIBRARIES(libmysql SHARED ${LIBS} + MERGE_LIBRARIES_SHARED(libmysql ${LIBS} EXPORTS ${CLIENT_API_FUNCTIONS} ${CLIENT_API_FUNCTIONS_UNDOCUMENTED} COMPONENT SharedLibraries) IF(UNIX) diff --git a/libmysqld/CMakeLists.txt b/libmysqld/CMakeLists.txt index d068ae356c53..9f106302fde8 100644 --- a/libmysqld/CMakeLists.txt +++ b/libmysqld/CMakeLists.txt @@ -282,7 +282,9 @@ FOREACH(LIB ${LIBS}) ENDIF() ENDFOREACH() -MERGE_LIBRARIES(mysqlserver STATIC ${EMBEDDED_LIBS} +LIST(REMOVE_DUPLICATES EMBEDDED_LIBS) + +MERGE_CONVENIENCE_LIBRARIES(mysqlserver ${EMBEDDED_LIBS} OUTPUT_NAME ${MYSQLSERVER_OUTPUT_NAME} COMPONENT Embedded) # Visual Studio users need debug static library @@ -296,7 +298,7 @@ IF(UNIX) ENDIF() IF(MSVC AND NOT DISABLE_SHARED) - MERGE_LIBRARIES(libmysqld SHARED ${LIBS} EXPORTS ${CLIENT_API_FUNCTIONS} + MERGE_LIBRARIES_SHARED(libmysqld ${LIBS} EXPORTS ${CLIENT_API_FUNCTIONS} COMPONENT Embedded) ENDIF() @@ -304,7 +306,7 @@ OPTION(WITH_EMBEDDED_SHARED_LIBRARY "Generate shared version of embedded library (in addition to the static one)" OFF) IF(WITH_EMBEDDED_SHARED_LIBRARY) - MERGE_LIBRARIES(libmysqld SHARED + MERGE_LIBRARIES_SHARED(libmysqld mysqlserver EXPORTS ${CLIENT_API_FUNCTIONS} OUTPUT_NAME "mysqld" diff --git a/storage/ndb/src/CMakeLists.txt b/storage/ndb/src/CMakeLists.txt index 4698b9c460aa..09f84d514d4f 100644 --- a/storage/ndb/src/CMakeLists.txt +++ b/storage/ndb/src/CMakeLists.txt @@ -49,8 +49,24 @@ SET(NDBCLIENT_LIBS ndbgeneral ndbconf) -MERGE_LIBRARIES( - ndbclient_static STATIC ${NDBCLIENT_LIBS} COMPONENT Development) +MERGE_CONVENIENCE_LIBRARIES( + ndbclient_static ${NDBCLIENT_LIBS} COMPONENT Development) + +SET(KNOWN_CONVENIENCE_LIBRARIES + ${KNOWN_CONVENIENCE_LIBRARIES} ndbclient_static CACHE INTERNAL "" FORCE) + +# Generate a cmake file which will save the name of the library. +CONFIGURE_FILE( + ${MYSQL_CMAKE_SCRIPT_DIR}/save_archive_location.cmake.in + ${CMAKE_BINARY_DIR}/archive_output_directory/lib_location_ndbclient_static.cmake + @ONLY) +ADD_CUSTOM_COMMAND(TARGET ndbclient_static POST_BUILD + COMMAND ${CMAKE_COMMAND} + -DTARGET_NAME=ndbclient_static + -DTARGET_LOC=$ + -DCFG_INTDIR=${CMAKE_CFG_INTDIR} + -P ${CMAKE_BINARY_DIR}/archive_output_directory/lib_location_ndbclient_static.cmake + ) # Build test program to check linking against ndclient_static ADD_EXECUTABLE(ndbclient_static_link_test ndbclient_link_test.cpp) From bdb77f2a4ef2276da692d6d747249762106ddb8a Mon Sep 17 00:00:00 2001 From: Balasubramanian Kandasamy Date: Fri, 17 Nov 2017 17:05:00 +0530 Subject: [PATCH 0190/1221] Post-fix Bug#27079017 - FC27 PKGS FAILURES WHEN MYSQL-CONNECTOR-ODBC INSTALLED ALREADY FROM NATIVE REPO - Updated the version for libs-compat packages --- packaging/rpm-fedora/mysql.spec.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/rpm-fedora/mysql.spec.in b/packaging/rpm-fedora/mysql.spec.in index 23801161993d..0631dafbfe4a 100644 --- a/packaging/rpm-fedora/mysql.spec.in +++ b/packaging/rpm-fedora/mysql.spec.in @@ -142,7 +142,7 @@ Obsoletes: mysql-server < %{version}-%{release} %if 0%{?compatlib} %else Obsoletes: mysql-community-embedded-compat < 5.7.20 -Obsoletes: mysql-community-libs-compat < 5.7.20 +Obsoletes: mysql-community-libs-compat < 5.7.21 %endif Provides: mysql-server = %{version}-%{release} Provides: mysql-server%{?_isa} = %{version}-%{release} From 4dfaf39e96f446f62a8c36cd0eef1ed90f4db4f2 Mon Sep 17 00:00:00 2001 From: Nuno Carvalho Date: Fri, 17 Nov 2017 13:30:11 +0100 Subject: [PATCH 0191/1221] BUG#27105803: NO CHECK FOR DUPLICATE @@SERVER_UUID WHEN JOINING GROUP Post-fix: clean temporary states when a server tries to join a group with a server_uuid already in use by another server. --- .../src/gcs_event_handlers.cc | 37 ++++++++++++++----- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/rapid/plugin/group_replication/src/gcs_event_handlers.cc b/rapid/plugin/group_replication/src/gcs_event_handlers.cc index 58e8f89a99ea..98360b4d3081 100644 --- a/rapid/plugin/group_replication/src/gcs_event_handlers.cc +++ b/rapid/plugin/group_replication/src/gcs_event_handlers.cc @@ -498,7 +498,8 @@ Plugin_gcs_events_handler::on_view_changed(const Gcs_view& new_view, log_members_leaving_message(new_view); //update the Group Manager with all the received states - if (update_group_info_manager(new_view, exchanged_data, is_joining, is_leaving)) + if (update_group_info_manager(new_view, exchanged_data, is_joining, is_leaving) && + is_joining) { view_change_notifier->cancel_view_modification(); return; @@ -905,9 +906,10 @@ update_group_info_manager(const Gcs_view& new_view, } } group_member_mgr->update(&to_update); + temporary_states->clear(); err: - temporary_states->clear(); + DBUG_ASSERT(temporary_states->size() == 0); return error; } @@ -1167,8 +1169,7 @@ process_local_exchanged_data(const Exchanged_data &exchanged_data, member_infos_it != member_infos->end(); member_infos_it++) { - if (is_joining && - local_member_info->get_uuid() == (*member_infos_it)->get_uuid()) + if (local_member_info->get_uuid() == (*member_infos_it)->get_uuid()) { local_uuid_found++; } @@ -1177,7 +1178,8 @@ process_local_exchanged_data(const Exchanged_data &exchanged_data, Accept only the information the member has about himself Information received about other members is probably outdated */ - if ((*member_infos_it)->get_gcs_member_id() == *member_id) + if (local_uuid_found < 2 && + (*member_infos_it)->get_gcs_member_id() == *member_id) { this->temporary_states->insert((*member_infos_it)); } @@ -1190,12 +1192,27 @@ process_local_exchanged_data(const Exchanged_data &exchanged_data, member_infos->clear(); delete member_infos; - if (is_joining && local_uuid_found > 1) + if (local_uuid_found > 1) { - log_message(MY_ERROR_LEVEL, - "There is already a member with server_uuid %s. " - "The member will now exit the group.", - local_member_info->get_uuid().c_str()); + if (is_joining) + { + log_message(MY_ERROR_LEVEL, + "There is already a member with server_uuid %s. " + "The member will now exit the group.", + local_member_info->get_uuid().c_str()); + } + + // Clean up temporary states. + std::set::iterator + temporary_states_it; + for (temporary_states_it= temporary_states->begin(); + temporary_states_it != temporary_states->end(); + temporary_states_it++) + { + delete (*temporary_states_it); + } + temporary_states->clear(); + return 1; } } From ade85bccca0f30eea8529a238d902fee99fb99db Mon Sep 17 00:00:00 2001 From: Tiago Jorge Date: Fri, 7 Jul 2017 16:45:13 +0100 Subject: [PATCH 0192/1221] WL#11298 - MySQL GCS: Support name resolution in whitelist in MySQL 5.7 EXECUTIVE SUMMARY ====================== This worklog implements support for hostnames in the GCS/XCom connection whitelisting feature. Therefore, users will be able to configure whitelisting not only with IPs but also with hostmames DESCRIPTION ====================== In Cloud Environments, the following scenarios are quite common: - Machines popping on and off of a group; - IP Address are obtained from a pool that is dedicated to some machines; In this case, it is quite hard to maintain a proper whitelist, since values are in constant mutation. For that, it was requested that, since we already support names in peer addresses and in local addresses, one should also support names in the whitelist parameters, e.g: www.randomname.com/16, as an example. User Story: - As a DBA, i want to be able to configure whitelist parameter using hostnames instead of IP Addresses so that I am able to allow connections from outside hosts that do not have a fixed address - As a DBA, i want to be able to configure whitelist parameter using a mix of hostnames and IP Addresses with netmasks I am able to allow connections from outside hosts that do not have a fixed address and still allow fixed IPs to connect to the group --- mysql-test/include/mtr_warnings.sql | 1 + .../src/bindings/xcom/gcs_xcom_networking.cc | 351 ++++++++++++++---- .../src/bindings/xcom/gcs_xcom_networking.h | 137 ++++++- .../src/bindings/xcom/gcs_xcom_utils.cc | 2 +- .../mtr/r/gr_ip_whitelist_options.result | 16 +- .../tests/mtr/t/gr_ip_whitelist_options.test | 36 +- 6 files changed, 448 insertions(+), 95 deletions(-) diff --git a/mysql-test/include/mtr_warnings.sql b/mysql-test/include/mtr_warnings.sql index 7b964a67b29a..d1cd1c8871d6 100644 --- a/mysql-test/include/mtr_warnings.sql +++ b/mysql-test/include/mtr_warnings.sql @@ -279,6 +279,7 @@ INSERT INTO global_suppressions VALUES ("\\[GCS\\] Error on opening a connection to localhost:.* on local port: .*."), ("\\[GCS\\] Error pushing message into group communication engine."), ("\\[GCS\\] Message cannot be sent because the member does not belong to a group."), + ("\\[GCS\\] Automatically adding IPv4 localhost address to the whitelist. It is mandatory that it is added."), ("Slave SQL for channel 'group_replication_recovery': ... The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state.*"), ("Member with address .* has become unreachable."), ("This server is not able to reach a majority of members in the group.*"), diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_networking.cc b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_networking.cc index b001140ce926..4d1b03283296 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_networking.cc +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_networking.cc @@ -17,10 +17,11 @@ #include "gcs_xcom_utils.h" #include "gcs_group_identifier.h" #include "gcs_logging.h" -#include #include "sock_probe.h" -#include -#include +#include +#include +#include +#include #ifdef WIN32 #include "sock_probe_win32.c" @@ -90,6 +91,24 @@ static std::string get_if_name(sock_probe *s, int count, int *error) } #endif +/** + Determines if a given address is an IP localhost address + + @param[in] address a reference to a string containing the address to test + + @return true if localhost, false otherwise. + */ +static bool is_address_localhost(const std::string &address) +{ + std::string lower_address(address); + + std::transform(lower_address.begin(), lower_address.end(), + lower_address.begin(), ::tolower); + + return (strcmp(lower_address.c_str(), "127.0.0.1/32") == 0) || + (strcmp(lower_address.c_str(), "localhost/32") == 0); +} + bool get_ipv4_local_addresses(std::map& addr_to_cidr_bits, bool filter_out_inactive) @@ -214,39 +233,67 @@ get_ipv4_local_private_addresses(std::map& out, } bool -get_ipv4_addr_from_hostname(const std::string& host, std::string& ip) +resolve_ip_addr_from_hostname(std::string name, std::string& ip) { + int res= true; char cip[INET6_ADDRSTRLEN]; - struct addrinfo *addrinf= NULL; + socklen_t cip_len= static_cast(sizeof(cip)); + struct addrinfo *addrinf= NULL, hints; + struct sockaddr *sa= NULL; + void *in_addr= NULL; + + memset(&hints, 0, sizeof(hints)); + //For now, we will only support IPv4 + hints.ai_family = AF_INET; + + checked_getaddrinfo(name.c_str(), 0, &hints, &addrinf); + if (!addrinf) + goto end; + + sa= (struct sockaddr*) addrinf->ai_addr; - checked_getaddrinfo(host.c_str(), 0, NULL, &addrinf); - if (!inet_ntop(AF_INET, &((struct sockaddr_in *)addrinf->ai_addr)->sin_addr, - cip, sizeof(cip))) + switch(sa->sa_family) { - if (addrinf) - freeaddrinfo(addrinf); - return true; + case AF_INET: + in_addr= &((struct sockaddr_in *)sa)->sin_addr; + break; + // For now, we only support IPv4 + case AF_INET6: + /*in_addr= &((struct sockaddr_in6 *)sa)->sin6_addr; break;*/ + default: + goto end; } + if (!inet_ntop(sa->sa_family, in_addr, cip, cip_len)) + goto end; + ip.assign(cip); + res= false; + + end: if (addrinf) freeaddrinfo(addrinf); - return false; + return res; } - /** Given the address as a string, gets the IP encoded as an integer. */ -static -bool string_to_sockaddr(const std::string& addr, struct sockaddr_storage *sa) +bool +string_to_sockaddr(const std::string& addr, struct sockaddr_storage *sa) { + /** + Try IPv4 first. + */ sa->ss_family= AF_INET; - if (inet_pton(AF_INET, addr.c_str(), &(((struct sockaddr_in *)sa)->sin_addr) ) == 1) + if (inet_pton(AF_INET, addr.c_str(), &(((struct sockaddr_in *)sa)->sin_addr)) == 1) return false; + /** + Try IPv6. + */ sa->ss_family= AF_INET6; if (inet_pton(AF_INET6, addr.c_str(), &(((struct sockaddr_in6 *)sa)->sin6_addr)) == 1) return false; @@ -316,54 +363,154 @@ sock_descriptor_to_string(int fd, std::string &out) const std::string Gcs_ip_whitelist::DEFAULT_WHITELIST= "127.0.0.1/32,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16"; + +Gcs_ip_whitelist_entry::Gcs_ip_whitelist_entry(std::string addr, + std::string mask) : + m_addr(addr), m_mask(mask) +{ +} + +Gcs_ip_whitelist_entry_ip:: +Gcs_ip_whitelist_entry_ip(std::string addr, std::string mask): + Gcs_ip_whitelist_entry(addr, mask) +{ +} + +bool +Gcs_ip_whitelist_entry_ip::init_value() +{ + bool error = get_address_for_whitelist(get_addr(), get_mask(), m_value); + + return error; +} + +std::pair, std::vector >* +Gcs_ip_whitelist_entry_ip::get_value() +{ + return &m_value; +} + +Gcs_ip_whitelist_entry_hostname:: +Gcs_ip_whitelist_entry_hostname(std::string addr, std::string mask): + Gcs_ip_whitelist_entry(addr, mask) +{ +} + +bool +Gcs_ip_whitelist_entry_hostname::init_value() +{ + return false; +} + +std::pair, std::vector >* +Gcs_ip_whitelist_entry_hostname::get_value() +{ + std::string ip; + bool error = false; + std::pair, std::vector > value; + + if(resolve_ip_addr_from_hostname(get_addr(), ip)) + { + MYSQL_GCS_LOG_WARN("Hostname " << get_addr().c_str() << " in Whitelist" << + " configuration was not resolvable. Please check your" << + " Whitelist configuration."); + return NULL; + } + + error = get_address_for_whitelist(ip, get_mask(), value); + + return error? NULL: new std::pair< std::vector, + std::vector > + (value.first, value.second); +} + /* purecov: begin deadcode */ std::string Gcs_ip_whitelist::to_string() const { - std::map< std::vector, std::vector >::const_iterator wl_it; + std::set< Gcs_ip_whitelist_entry* >::const_iterator wl_it; std::stringstream ss; for (wl_it= m_ip_whitelist.begin(); wl_it != m_ip_whitelist.end(); wl_it++) { - char saddr[INET6_ADDRSTRLEN]; - unsigned long netbits= 0; - std::vector vmask= wl_it->second; - std::vector vip= wl_it->first; - const unsigned char *ip= &vip[0]; - const unsigned char *mask= &vmask[0]; - const char *ret; - saddr[0]= '\0'; - - // try IPv6 first - if (vip.size() > 4) - ret= inet_ntop(AF_INET6, (struct in6_addr *) ip, saddr, sizeof(saddr)); - else - ret= inet_ntop(AF_INET, (struct in_addr *) ip, saddr, sizeof(saddr)); - - if (!ret) - continue; - - for(unsigned int i=0 ; i < vmask.size(); i++) - { - unsigned long int tmp= 0; - memcpy(&tmp, mask, 1); // count per octet - std::bitset<8> netmask(tmp); - netbits+= netmask.count(); - mask++; - } - - ss << saddr << "/" << netbits << ","; + ss << (*wl_it)->get_addr() << "/" << (*wl_it)->get_mask() << ","; } std::string res= ss.str(); res.erase(res.end() - 1); return res; +} +/** + Wrapper helper method for getnameinfo. + + Taken from VIO. If VIO ever becomes a server independent library, or we start + using MySQL protocol, this should be removed. + */ +int gcs_getnameinfo(const struct sockaddr *sa, + char *hostname, size_t hostname_size, + char *port, size_t port_size, + int flags) +{ + int sa_length= 0; + + switch (sa->sa_family) + { + case AF_INET: + sa_length= sizeof (struct sockaddr_in); +#ifdef HAVE_SOCKADDR_IN_SIN_LEN + ((struct sockaddr_in *) sa)->sin_len= sa_length; +#endif /* HAVE_SOCKADDR_IN_SIN_LEN */ + break; + + case AF_INET6: + sa_length= sizeof (struct sockaddr_in6); +# ifdef HAVE_SOCKADDR_IN6_SIN6_LEN + ((struct sockaddr_in6 *) sa)->sin6_len= sa_length; +# endif /* HAVE_SOCKADDR_IN6_SIN6_LEN */ + break; + } + + return getnameinfo(sa, sa_length, + hostname, hostname_size, + port, port_size, + flags); } /* purecov: end */ +/** + Check if it contains an attempt of having an IP v4 address. + It does not check for its validity, but only if it contains all authorized + characters: numbers and dots. + + @return true if it exclusively contains all authorized characters. + */ +bool is_ipv4_address(const std::string& possible_ip) +{ + std::string::const_iterator it = possible_ip.begin(); + while (it != possible_ip.end() && + (isdigit(static_cast(*it)) || + (*it) == '.')) + { + ++it; + } + return !possible_ip.empty() && it == possible_ip.end(); +} + +/** + Check if it contains an attempt of having an IP v6 address. + It does not check for its validity, but it checks if it contains : character + + @return true if it contains the : character. + */ +bool is_ipv6_address(const std::string& possible_ip) +{ + return !possible_ip.empty() && + possible_ip.find_first_of(':') != std::string::npos; +} + bool Gcs_ip_whitelist::is_valid(const std::string& the_list) const { @@ -390,8 +537,15 @@ Gcs_ip_whitelist::is_valid(const std::string& the_list) const std::getline(entry_ss, ip, '/'); std::getline(entry_ss, mask, '/'); - // verify that this is a valid IPv4 or IPv6 address - is_valid_ip= !string_to_sockaddr(ip, &sa); + //Verify that this is a valid IPv4 or IPv6 address + if(is_ipv4_address(ip) || is_ipv6_address(ip)) + { + is_valid_ip= !string_to_sockaddr(ip, &sa); + } + else + { //We won't check for hostname validity here. + continue; + } // convert the netbits from the mask to integer imask= (unsigned int) atoi(mask.c_str()); @@ -430,11 +584,21 @@ Gcs_ip_whitelist::configure(const std::string& the_list) std::string list_entry; // parse commas + bool found_localhost_entry= false; while(std::getline(list_ss, list_entry, ',')) { std::stringstream entry_ss(list_entry); std::string ip, mask; + /** + Check if the address is a localhost ipv4 address. + Add it after if necessary. + */ + if(!found_localhost_entry) + { + found_localhost_entry = is_address_localhost(entry_ss.str()); + } + std::getline(entry_ss, ip, '/'); std::getline(entry_ss, mask, '/'); @@ -445,25 +609,35 @@ Gcs_ip_whitelist::configure(const std::string& the_list) // so that we are able to connect to our embedded xcom // add IPv4 localhost addresses if needed - if (!add_address("127.0.0.1", "32")) + if (!found_localhost_entry) { - MYSQL_GCS_LOG_WARN("Automatically adding IPv4 localhost address to the " - "whitelist. It is mandatory that it is added."); + if(!add_address("127.0.0.1", "32")) + { + MYSQL_GCS_LOG_WARN("Automatically adding IPv4 localhost address to the " + "whitelist. It is mandatory that it is added."); + } + else + { + MYSQL_GCS_LOG_ERROR("Error adding IPv4 localhost address automatically" + " to the whitelist"); + } } return false; } bool -Gcs_ip_whitelist::add_address(std::string addr, std::string mask) +get_address_for_whitelist(std::string addr, std::string mask, + std::pair, + std::vector > &out_pair) { struct sockaddr_storage sa; unsigned char *sock; - int netmask_len= 0; + size_t netmask_len= 0; int netbits= 0; std::vector ssock; std::vector smask; - + // zero the memory area memset(&sa, 0, sizeof(struct sockaddr_storage)); smask.insert(smask.begin(), smask.size(), 0); @@ -494,23 +668,59 @@ Gcs_ip_whitelist::add_address(std::string addr, std::string mask) return true; } - if (m_ip_whitelist.find(ssock) == m_ip_whitelist.end()) + // Set the first netbits/8 BYTEs to 255. + smask.resize(static_cast(netbits/8), 0xff); + + if (smask.size() < netmask_len) { + // Set the following netbits%8 BITs to 1. + smask.push_back(static_cast(0xff << (8-netbits%8))); + // Set non-net part to 0 smask.resize(netmask_len, 0); - for(int octet= 0, bits= netbits; octet < netmask_len && bits > 0; octet++, bits -= 8) - { - if (bits > 0) - smask[octet]= static_cast(0xff << (bits > 8 ? 0 : (8-bits))); - else - smask[octet]= 0x00; - } + } - m_ip_whitelist.insert(std::make_pair (ssock, smask)); + out_pair= std::make_pair (ssock, smask); - return false; + return false; +} + +Gcs_ip_whitelist::~Gcs_ip_whitelist() +{ + std::set< Gcs_ip_whitelist_entry* >::const_iterator wl_it= + m_ip_whitelist.begin(); + while(wl_it != m_ip_whitelist.end()) + { + delete (*wl_it); + m_ip_whitelist.erase(wl_it++); } +} - return true; +bool +Gcs_ip_whitelist::add_address(std::string addr, std::string mask) +{ + Gcs_ip_whitelist_entry *addr_for_wl; + struct sockaddr_storage sa; + if(!string_to_sockaddr(addr, &sa)) + { + addr_for_wl = new Gcs_ip_whitelist_entry_ip(addr, mask); + } + else + { + addr_for_wl = new Gcs_ip_whitelist_entry_hostname(addr, mask); + } + bool error = addr_for_wl->init_value(); + + if(!error) + { + std::pair::iterator, + bool> result; + result= m_ip_whitelist.insert(addr_for_wl); + + error= !result.second; + } + + return error; } bool @@ -518,8 +728,10 @@ Gcs_ip_whitelist::do_check_block(struct sockaddr_storage *sa) const { bool block= true; unsigned char *buf; - std::map< std::vector, std::vector >::const_iterator wl_it; + std::set< Gcs_ip_whitelist_entry* >::const_iterator wl_it; + std::pair< std::vector, std::vector > *wl_value; std::vector ip; + /* purecov: begin deadcode */ if (sa->ss_family == AF_INET6) { @@ -551,9 +763,14 @@ Gcs_ip_whitelist::do_check_block(struct sockaddr_storage *sa) const wl_it != m_ip_whitelist.end() && block; wl_it++) { + wl_value= (*wl_it)->get_value(); + + if(wl_value == NULL) + continue; + unsigned int octet; - const std::vector range= (*wl_it).first; - const std::vector netmask= (*wl_it).second; + const std::vector range= (*wl_value).first; + const std::vector netmask= (*wl_value).second; for (octet= 0; octet < range.size(); octet++) { diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_networking.h b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_networking.h index 42ec1943ec71..e052a999afa5 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_networking.h +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_networking.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -16,9 +16,10 @@ #ifndef GCS_XCOM_NETWORKING_H #define GCS_XCOM_NETWORKING_H -#include -#include -#include +#include +#include +#include +#include /** This function gets all network addresses on this host and their @@ -47,12 +48,127 @@ get_ipv4_local_private_addresses(std::map& out, /** This function translates hostnames to IP addresses. - @param[in] host The hostname to translate. + @param[in] name The hostname to translate. @param[out] ip The IP address after translation. + @return false on success, true otherwise. */ bool -get_ipv4_addr_from_hostname(const std::string& host, std::string& ip); +resolve_ip_addr_from_hostname(std::string name, std::string& ip); + +/** + Converts an address in string format (X.X.X.X/XX) into network octet format + + @param[in] addr IP address in X.X.X.X format + @param[in] mask Network mask associated with the address + @param[out] out_pair + + @return false on success, true otherwise. + */ +bool +get_address_for_whitelist(std::string addr, std::string mask, + std::pair, + std::vector > &out_pair); + +/** + @class Gcs_ip_whitelist_entry + @brief Base abstract class for the whitelist entries. + + This is the base class for the Whitelist entries. Any derived class must + implement its two abstract methods: + - init_value(); + - get_value(); + */ +class Gcs_ip_whitelist_entry +{ +public: + /** + Constructor + + @param[in] addr IP address or hostname of this entry + @param[in] mask Network mask of this entry. + */ + Gcs_ip_whitelist_entry(std::string addr, std::string mask); + + virtual ~Gcs_ip_whitelist_entry() {} + + /** + Entry initialization. + + If one needs to initialize internal values, it should be done in this + method. + + @return false on success, true otherwise + */ + virtual bool init_value() = 0; + + /** + Virtual member function that implements value retrieval for this entry. + + The returned value must be an std::pair that contains both the address and the + mask in network octet value. + + @return an std::pair with ip and mask in network octet form + */ + virtual std::pair< std::vector, + std::vector > *get_value() = 0; + + /** Getters */ + std::string get_addr() const {return m_addr;}; + std::string get_mask() const {return m_mask;}; + +private: + std::string m_addr; + std::string m_mask; +}; + +struct Gcs_ip_whitelist_entry_pointer_comparator { + bool operator() (const Gcs_ip_whitelist_entry* lhs, + const Gcs_ip_whitelist_entry* rhs) const { + //Check if addresses are different in content + if(lhs->get_addr() != rhs->get_addr()) + { //Then compare only the addresses + return lhs->get_addr() < rhs->get_addr(); + } + else + { //If addresses are equal, then compare the masks to untie. + return lhs->get_mask() < rhs->get_mask(); + } + } +}; + +/** + @class Gcs_ip_whitelist_entry_ip + @brief Implementation of Gcs_ip_whitelist_entry to use with + raw IP addresses in format X.X.X.X/XX + */ +class Gcs_ip_whitelist_entry_ip: public Gcs_ip_whitelist_entry +{ +public: + Gcs_ip_whitelist_entry_ip(std::string addr, std::string mask); + +public: + bool init_value(); + std::pair, std::vector > *get_value(); + +private: + std::pair, std::vector > m_value; +}; + +/** + @class Gcs_ip_whitelist_entry_hostname + @brief Implementation of Gcs_ip_whitelist_entry to use with + hostnames + */ +class Gcs_ip_whitelist_entry_hostname: public Gcs_ip_whitelist_entry +{ +public: + Gcs_ip_whitelist_entry_hostname(std::string addr, std::string mask); + +public: + bool init_value(); + std::pair, std::vector > *get_value(); +}; class Gcs_ip_whitelist { @@ -67,7 +183,8 @@ class Gcs_ip_whitelist This is for optimization purposes, so that we don't calculate the values each time we want to check. */ - std::map< std::vector, std::vector > m_ip_whitelist; + std::set< Gcs_ip_whitelist_entry*, + Gcs_ip_whitelist_entry_pointer_comparator> m_ip_whitelist; /** This is the list that originally submitted to be parsed and to configure @@ -76,8 +193,10 @@ class Gcs_ip_whitelist std::string m_original_list; public: - Gcs_ip_whitelist() : m_ip_whitelist(), m_original_list() {} - virtual ~Gcs_ip_whitelist() { } + Gcs_ip_whitelist() : + m_ip_whitelist(), + m_original_list() {} + virtual ~Gcs_ip_whitelist(); /** This member function shall be used to configure the whitelist. diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_utils.cc b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_utils.cc index a0d38943ce83..342ee86b32a9 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_utils.cc +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_utils.cc @@ -1149,7 +1149,7 @@ is_parameters_syntax_correct(const Gcs_interface_parameters &interface_params) } // hostname was validated already, lets find the IP - if (get_ipv4_addr_from_hostname(host, ip)) + if (resolve_ip_addr_from_hostname(host, ip)) { MYSQL_GCS_LOG_ERROR("Unable to translate hostname " << host << " to IP address!"); diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_ip_whitelist_options.result b/rapid/plugin/group_replication/tests/mtr/r/gr_ip_whitelist_options.result index 7154d9a38027..ea17e1e424dd 100644 --- a/rapid/plugin/group_replication/tests/mtr/r/gr_ip_whitelist_options.result +++ b/rapid/plugin/group_replication/tests/mtr/r/gr_ip_whitelist_options.result @@ -5,12 +5,8 @@ Note #### Storing MySQL user name or password information in the master info rep [connection server1] [connection server1] SET GLOBAL group_replication_group_name="00000000-1111-2222-3333-444444444444"; -SET GLOBAL group_replication_ip_whitelist="-2"; -START GROUP_REPLICATION; -ERROR HY000: The START GROUP_REPLICATION command failed as there was an error when initializing the group communication layer. -SET GLOBAL group_replication_ip_whitelist="NULL"; -START GROUP_REPLICATION; -ERROR HY000: The START GROUP_REPLICATION command failed as there was an error when initializing the group communication layer. +SET GLOBAL group_replication_ip_whitelist=NULL; +ERROR 42000: Variable 'group_replication_ip_whitelist' can't be set to the value of 'NULL' SET GLOBAL group_replication_ip_whitelist="192.256.1.20"; START GROUP_REPLICATION; ERROR HY000: The START GROUP_REPLICATION command failed as there was an error when initializing the group communication layer. @@ -43,11 +39,15 @@ include/start_and_bootstrap_group_replication.inc include/assert.inc [Assert value changed to 8.9.10.0/20] include/stop_group_replication.inc include/assert_grep.inc [ip_whitelist was successfully logged to the error log] -SET GLOBAL group_replication_ip_whitelist="8.9.10.0/20,192.168.1.1,192.168.2.0/24"; +SET GLOBAL group_replication_ip_whitelist="fe80::f6dd:5a39:661b:b00b/64,8.9.10.0/20,192.168.1.1,192.168.2.0/24"; include/start_and_bootstrap_group_replication.inc -include/assert.inc [Assert value changed to 8.9.10.0/20,192.168.1.1,192.168.2.0/24] +include/assert.inc [Assert value changed to fe80::f6dd:5a39:661b:b00b/64,8.9.10.0/20,192.168.1.1,192.168.2.0/24] include/stop_group_replication.inc include/assert_grep.inc [ip_whitelist was successfully logged to the error log] +SET GLOBAL group_replication_ip_whitelist="CORRECT_HOSTNAME"; +include/start_and_bootstrap_group_replication.inc +include/assert.inc [Assert value with hostname is not empty] +include/stop_group_replication.inc SET GLOBAL group_replication_ip_whitelist=""; include/start_and_bootstrap_group_replication.inc include/assert.inc [Assert value changed to ""] diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_ip_whitelist_options.test b/rapid/plugin/group_replication/tests/mtr/t/gr_ip_whitelist_options.test index 519d3969edbb..221c4ae65b88 100644 --- a/rapid/plugin/group_replication/tests/mtr/t/gr_ip_whitelist_options.test +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_ip_whitelist_options.test @@ -8,6 +8,7 @@ #### to the plugin: #### - incorrectly formatted values: -2, NULL #### - incorrect IPs: 192.256.1.20, 300.168.1.20 +#### - incorrect hostname: random_hostname/16 #### - incorrect subnetmasks: 192.168.1.0/33, 192.168.266.0/24 #### - incorrect lists: 8.9.10.0/20,192.168.1.1,192.168.2.0/44 #### - try to change while the plugin is running @@ -15,6 +16,7 @@ #### Then it does positive testing: #### - correct IPs: 192.168.1.1, 8.9.10.0/20 #### - correct subnetmasks: 192.168.1.0/24 +#### - correct hostname: @@hostname/16 #### - correct lists: 8.9.10.0/20,192.168.1.1,192.168.2.0/24 #### - empty values, DEFAULT #### - assert that the values were logged in the error log @@ -34,9 +36,7 @@ --let $rpl_skip_group_replication_start= 1 --source ../inc/group_replication.inc -# takes a string not numbers ---let $incorrect_input1= -2 ---let $incorrect_input2= NULL +--let $incorrect_input1= NULL --let $incorrect_ip1= 192.256.1.20 --let $incorrect_ip2= 300.168.1.20 --let $incorrect_list1= 8.9.10.0/20,192.168.1.1,192.168.2.0/44 @@ -46,7 +46,8 @@ --let $correct_ip1= 192.168.1.1 --let $correct_ip2= 192.168.1.0/24 --let $correct_ip3= 8.9.10.0/20 ---let $correct_list1= 8.9.10.0/20,192.168.1.1,192.168.2.0/24 +--let $correct_hostname= `SELECT CONCAT((SELECT @@hostname), '/16')` +--let $correct_list1= fe80::f6dd:5a39:661b:b00b/64,8.9.10.0/20,192.168.1.1,192.168.2.0/24 --let $rpl_connection_name= server1 --source include/rpl_connection.inc @@ -61,13 +62,10 @@ # trying to start the plugin # ---eval SET GLOBAL group_replication_ip_whitelist="$incorrect_input1" ---error ER_GROUP_REPLICATION_COMMUNICATION_LAYER_SESSION_ERROR -START GROUP_REPLICATION; +--error ER_WRONG_VALUE_FOR_VAR +--eval SET GLOBAL group_replication_ip_whitelist=$incorrect_input1 ---eval SET GLOBAL group_replication_ip_whitelist="$incorrect_input2" ---error ER_GROUP_REPLICATION_COMMUNICATION_LAYER_SESSION_ERROR -START GROUP_REPLICATION; +#START GROUP_REPLICATION; --eval SET GLOBAL group_replication_ip_whitelist="$incorrect_ip1" --error ER_GROUP_REPLICATION_COMMUNICATION_LAYER_SESSION_ERROR @@ -191,6 +189,24 @@ START GROUP_REPLICATION; --let $assert_count= 1 --source include/assert_grep.inc +# +# Assert that the server successfully starts GR with correct_hostname +# in the whitelist +# Since MTR does not have name resolution, we are going in a best effort +# aproach in which we test that the server started and stopped without errors +# + +--replace_result $correct_hostname CORRECT_HOSTNAME +--eval SET GLOBAL group_replication_ip_whitelist="$correct_hostname" +--source ../inc/start_and_bootstrap_group_replication.inc + +--let $current= `SELECT @@group_replication_ip_whitelist` +--let $assert_cond= [SELECT @@group_replication_ip_whitelist = ""] = 0 +--let $assert_text= Assert value with hostname is not empty +--source include/assert.inc + +--source include/stop_group_replication.inc + # # Assert that the server successfully starts GR with "" # set to the whitelist From bd1c46ad84e0e4155fee33e00ef3d1ec4d0dbdc5 Mon Sep 17 00:00:00 2001 From: Jaideep Karande Date: Sat, 18 Nov 2017 08:14:04 +0100 Subject: [PATCH 0193/1221] Bug#27091493: GR_INJECT_PIPELINE_ERROR_LOCAL_GTID IS FAILING SPORADICALLY IN PB Problem: Missing error supression when GR is unable to kill transaction. The group replication plugin is stopping due to an error. Sees that there is one waiting transactions but when it tries to kill it, it fails, causing error being written to logs. Thread is already killed or not in Wait_ticket map. Resolution: There is already suppressed error message in logs "Due to a plugin error, *". Adding post intermittent message to suppression logs. --- .../tests/mtr/r/gr_inject_pipeline_error_local_gtid.result | 1 + .../tests/mtr/t/gr_inject_pipeline_error_local_gtid.test | 1 + 2 files changed, 2 insertions(+) diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_inject_pipeline_error_local_gtid.result b/rapid/plugin/group_replication/tests/mtr/r/gr_inject_pipeline_error_local_gtid.result index edee3ee9429a..07e04f2108cf 100644 --- a/rapid/plugin/group_replication/tests/mtr/r/gr_inject_pipeline_error_local_gtid.result +++ b/rapid/plugin/group_replication/tests/mtr/r/gr_inject_pipeline_error_local_gtid.result @@ -14,6 +14,7 @@ call mtr.add_suppression("Error. Leaving a group without being on one."); call mtr.add_suppression("The server was automatically set into read only mode after an error was detected."); call mtr.add_suppression("Skipping leave operation: concurrent attempt to leave the group is on-going."); call mtr.add_suppression("Due to a plugin error, some transactions can't be certified and will now rollback."); +call mtr.add_suppression("Error when trying to unblock non certified transactions.*"); SET SESSION sql_log_bin= 1; SET @debug_saved= @@GLOBAL.DEBUG; SET @@GLOBAL.DEBUG= '+d,unable_to_add_specified_gtid_for_local_transaction'; diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_inject_pipeline_error_local_gtid.test b/rapid/plugin/group_replication/tests/mtr/t/gr_inject_pipeline_error_local_gtid.test index 36b7761510e0..7c1350d14a96 100644 --- a/rapid/plugin/group_replication/tests/mtr/t/gr_inject_pipeline_error_local_gtid.test +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_inject_pipeline_error_local_gtid.test @@ -35,6 +35,7 @@ call mtr.add_suppression("Error. Leaving a group without being on one."); call mtr.add_suppression("The server was automatically set into read only mode after an error was detected."); call mtr.add_suppression("Skipping leave operation: concurrent attempt to leave the group is on-going."); call mtr.add_suppression("Due to a plugin error, some transactions can't be certified and will now rollback."); +call mtr.add_suppression("Error when trying to unblock non certified transactions.*"); SET SESSION sql_log_bin= 1; # Add a local transaction for server1 so that the debug point is hit. From 29d37f1b6abf0346c3de6b302650535e4ae9b248 Mon Sep 17 00:00:00 2001 From: Sachin Agarwal Date: Mon, 20 Nov 2017 11:54:48 +0530 Subject: [PATCH 0194/1221] Bug #23590280 NO WARNING WHEN REDUCING INNODB_BUFFER_POOL_SIZE INSIZE THE FIRST CHUNK PROBLEM If we are scaling down innodb_buffer_pool_size inside the first chunk, no resize operation is performed which is the correct behaviour . But no warning is given to the client and no warning is included in the error log . So to the user it looks as though the incorrect value has been used to resize the buffer pool. FIX The above resize operation returns a warning to user. Reviewed by: Jimmy and satya RB: 17812 --- .../r/innodb_buffer_pool_resize_debug.result | 15 ++++++ .../t/innodb_buffer_pool_resize_debug.test | 51 +++++++++++++++++++ storage/innobase/handler/ha_innodb.cc | 11 ++++ 3 files changed, 77 insertions(+) diff --git a/mysql-test/suite/innodb/r/innodb_buffer_pool_resize_debug.result b/mysql-test/suite/innodb/r/innodb_buffer_pool_resize_debug.result index e782e1caee04..a1078dd811a8 100644 --- a/mysql-test/suite/innodb/r/innodb_buffer_pool_resize_debug.result +++ b/mysql-test/suite/innodb/r/innodb_buffer_pool_resize_debug.result @@ -57,3 +57,18 @@ drop table t2; drop table t3; drop table t0; drop table t6; +# +# BUG#23590280 NO WARNING WHEN REDUCING INNODB_BUFFER_POOL_SIZE INSIZE THE FIRST CHUNK +# +SET GLOBAL innodb_fast_shutdown = 0; +# restart: --innodb-buffer-pool-size=24M --innodb-buffer-pool-chunk-size=24M +set @old_innodb_disable_resize = @@innodb_disable_resize_buffer_pool_debug; +set global innodb_disable_resize_buffer_pool_debug = OFF; +set @before_innodb_buffer_pool_size = @@innodb_buffer_pool_size; +set global innodb_buffer_pool_size=@before_innodb_buffer_pool_size div 2; +Warnings: +Warning 1210 InnoDB: Cannot resize buffer pool to lesser than chunk size of 25165824 bytes. +set global innodb_buffer_pool_size=@before_innodb_buffer_pool_size * 2; +set global innodb_buffer_pool_size=@before_innodb_buffer_pool_size; +set global innodb_buffer_pool_size=@before_innodb_buffer_pool_size; +set global innodb_disable_resize_buffer_pool_debug = @old_innodb_disable_resize; diff --git a/mysql-test/suite/innodb/t/innodb_buffer_pool_resize_debug.test b/mysql-test/suite/innodb/t/innodb_buffer_pool_resize_debug.test index 1580b14b99d7..9c8665a78607 100644 --- a/mysql-test/suite/innodb/t/innodb_buffer_pool_resize_debug.test +++ b/mysql-test/suite/innodb/t/innodb_buffer_pool_resize_debug.test @@ -189,3 +189,54 @@ let $wait_condition = # Wait till all disconnects are completed] --source include/wait_until_count_sessions.inc + +--echo # +--echo # BUG#23590280 NO WARNING WHEN REDUCING INNODB_BUFFER_POOL_SIZE INSIZE THE FIRST CHUNK +--echo # + +# Slow shutdown and restart to make sure ibuf merge is finished +SET GLOBAL innodb_fast_shutdown = 0; +let $restart_parameters = restart: --innodb-buffer-pool-size=24M --innodb-buffer-pool-chunk-size=24M; +--source include/restart_mysqld.inc + +set @old_innodb_disable_resize = @@innodb_disable_resize_buffer_pool_debug; +set global innodb_disable_resize_buffer_pool_debug = OFF; +set @before_innodb_buffer_pool_size = @@innodb_buffer_pool_size; + +set global innodb_buffer_pool_size=@before_innodb_buffer_pool_size div 2; + +let $wait_timeout = 60; +let $wait_condition = + SELECT SUBSTR(variable_value, 1, 19) = 'Size did not change' + FROM performance_schema.global_status + WHERE LOWER(variable_name) = 'innodb_buffer_pool_resize_status'; +--source include/wait_condition.inc + +set global innodb_buffer_pool_size=@before_innodb_buffer_pool_size * 2; + +let $wait_timeout = 60; +let $wait_condition = + SELECT SUBSTR(variable_value, 1, 9) = 'Completed' + FROM performance_schema.global_status + WHERE LOWER(variable_name) = 'innodb_buffer_pool_resize_status'; +--source include/wait_condition.inc + +set global innodb_buffer_pool_size=@before_innodb_buffer_pool_size; + +let $wait_timeout = 60; +let $wait_condition = + SELECT SUBSTR(variable_value, 1, 9) = 'Completed' + FROM performance_schema.global_status + WHERE LOWER(variable_name) = 'innodb_buffer_pool_resize_status'; +--source include/wait_condition.inc + +set global innodb_buffer_pool_size=@before_innodb_buffer_pool_size; + +let $wait_timeout = 60; +let $wait_condition = + SELECT SUBSTR(variable_value, 1, 19) = 'Size did not change' + FROM performance_schema.global_status + WHERE LOWER(variable_name) = 'innodb_buffer_pool_resize_status'; +--source include/wait_condition.inc + +set global innodb_disable_resize_buffer_pool_debug = @old_innodb_disable_resize; diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index b946c3478d6c..be78d33fa278 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -21195,6 +21195,7 @@ innodb_buffer_pool_size_validate( "Cannot update innodb_buffer_pool_size," " because innodb_disable_resize_buffer_pool_debug" " is set."); + ib::warn() << "Cannot update innodb_buffer_pool_size," " because innodb_disable_resize_buffer_pool_debug" " is set."; @@ -21222,6 +21223,12 @@ innodb_buffer_pool_size_validate( return(1); } + if (srv_buf_pool_size == static_cast(intbuf)) { + buf_pool_mutex_exit_all(); + /* nothing to do */ + return(0); + } + ulint requested_buf_pool_size = buf_pool_size_align(static_cast(intbuf)); @@ -21229,6 +21236,10 @@ innodb_buffer_pool_size_validate( if (srv_buf_pool_size == requested_buf_pool_size) { buf_pool_mutex_exit_all(); + push_warning_printf(thd, Sql_condition::SL_WARNING, + ER_WRONG_ARGUMENTS, + "InnoDB: Cannot resize buffer pool to lesser than" + " chunk size of %lu bytes.", srv_buf_pool_chunk_unit); /* nothing to do */ return(0); } From 06a8f665a44f4954ea65f4e00ef2328cb7bde485 Mon Sep 17 00:00:00 2001 From: Anibal Pinto Date: Mon, 20 Nov 2017 09:21:03 +0100 Subject: [PATCH 0195/1221] BUG#27091389: RACE IN GR_CONCURRENT_UNINSTALL_START TEST CASE There is a concurrency issue between uninstalling the group replication plugin and starting it. The test case do not expect that UNINSTALL can be executed after START, if that happens the UNINSTALL will return an error. Modified test to expect success or error. --- .../tests/mtr/t/gr_concurrent_uninstall_start.test | 1 + 1 file changed, 1 insertion(+) diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_concurrent_uninstall_start.test b/rapid/plugin/group_replication/tests/mtr/t/gr_concurrent_uninstall_start.test index 0e82c4388df1..9f327922ac26 100644 --- a/rapid/plugin/group_replication/tests/mtr/t/gr_concurrent_uninstall_start.test +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_concurrent_uninstall_start.test @@ -44,6 +44,7 @@ START GROUP_REPLICATION; --let $rpl_connection_name= server1 --source include/rpl_connection.inc --disable_warnings +--error 0, ER_PLUGIN_CANNOT_BE_UNINSTALLED --reap --replace_result $GROUP_REPLICATION GROUP_REPLICATION From 0b2a45b955be7807dd5a73627b46f79be47a6c79 Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Tue, 21 Nov 2017 13:32:51 +0100 Subject: [PATCH 0196/1221] From 9204f92f461e2c4e076e7791b534402a0f6f2110 Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Tue, 21 Nov 2017 15:20:55 +0100 Subject: [PATCH 0197/1221] From ebce2b5293ef410733da44921d5b3ea914d922c9 Mon Sep 17 00:00:00 2001 From: Ajo Robert Date: Wed, 22 Nov 2017 12:03:12 +0530 Subject: [PATCH 0198/1221] Bug#24423143 - WRONG RESULTS FOR AGGREGATE QUERY Optimizer chooses loose index scan (QUICK_GROUP_MIN_MAX_SELECT) for a group by even when there exists a predicate with disjunction. This is due to that either of the below two cases are encountered and not handled properly. 1. A range tree created for index merge scan is not taken into account while checking for the presence of disjuncted conditions in get_best_group_min_max(). 2. A disjunction condition could lead to null tree if an index merge scan is not possible. A NULL tree will cause get_best_group_min_max() to skip many relevent checks like WA2. There are two scenarios here, (a) The WHERE clause is a disjunction of conditions on MIN/MAX column only. => We can use min_max optimization considering all other criteria (eg:SA2) are met. (b) MIN/MAX column is participating in a disjunctive WHERE clause along with other columns. => min_max optimization is not applicable in this scenario. Fix: Skip loose index scan in below scenarios involving disjoint conditions in WHERE clause. 1. When the condition in WHERE clause results in more than one disjoint range trees (when index merge scan is possible). 2. The range tree is null and MIN/MAX column participates in the WHERE clause along with other columns. [There is no range tree if WHERE condition can't be represented in a single range tree and index merge is not possible] Change-Id: I2ec8ef815d9dfa64e0bf60e97d3b6129c070e24b --- mysql-test/r/group_min_max.result | 277 +++++++++++++++++++++++ mysql-test/r/group_min_max_innodb.result | 2 +- mysql-test/t/group_min_max.test | 179 +++++++++++++++ sql/opt_range.cc | 186 ++++++++++++++- 4 files changed, 642 insertions(+), 2 deletions(-) diff --git a/mysql-test/r/group_min_max.result b/mysql-test/r/group_min_max.result index 7de74f29b7fd..44ba9530f2a1 100644 --- a/mysql-test/r/group_min_max.result +++ b/mysql-test/r/group_min_max.result @@ -3794,3 +3794,280 @@ Handler_read_rnd 0 Handler_read_rnd_next 0 DROP TABLE t1; # End of test for Bug#18109609 +# +# Bug#24423143 - WRONG RESULTS FOR AGGREGATE QUERY +# +# Test index merge tree scenario +CREATE TABLE A ( +aggr_col int, +group_by_col int, +KEY aggr_col_key (aggr_col), +KEY group_by_col_key (group_by_col, aggr_col) +) ENGINE=InnoDB; +set optimizer_trace_max_mem_size=1048576; +set @@session.optimizer_trace='enabled=on'; +set end_markers_in_json=on; +INSERT INTO A VALUES (2,3),(5,6),(6,3),(7,NULL),(9,NULL),(10,6); +ANALYZE TABLE A; +Table Op Msg_type Msg_text +test.A analyze status OK +SELECT group_by_col, MIN(aggr_col) FROM A +WHERE (group_by_col IN (70, 9)) OR (aggr_col > 2) GROUP BY group_by_col; +group_by_col MIN(aggr_col) +NULL 7 +3 6 +6 5 +EXPLAIN SELECT group_by_col, MIN(aggr_col) FROM A +WHERE (group_by_col IN (70 ,9)) OR (aggr_col > 2) GROUP BY group_by_col; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE A NULL index aggr_col_key,group_by_col_key group_by_col_key 10 NULL 6 55.55 Using where; Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`A`.`group_by_col` AS `group_by_col`,min(`test`.`A`.`aggr_col`) AS `MIN(aggr_col)` from `test`.`A` where ((`test`.`A`.`group_by_col` in (70,9)) or (`test`.`A`.`aggr_col` > 2)) group by `test`.`A`.`group_by_col` +SELECT TRACE RLIKE 'disjuntive_predicate_present' AS OK +FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; +OK +1 +SELECT group_by_col, MAX(aggr_col) FROM A +WHERE (group_by_col IN (70, 9)) OR (aggr_col < 9) GROUP BY group_by_col; +group_by_col MAX(aggr_col) +NULL 7 +3 6 +6 5 +EXPLAIN SELECT group_by_col, MAX(aggr_col) FROM A +WHERE (group_by_col IN (70 , 9)) OR (aggr_col < 9) GROUP BY group_by_col; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE A NULL index aggr_col_key,group_by_col_key group_by_col_key 10 NULL 6 55.55 Using where; Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`A`.`group_by_col` AS `group_by_col`,max(`test`.`A`.`aggr_col`) AS `MAX(aggr_col)` from `test`.`A` where ((`test`.`A`.`group_by_col` in (70,9)) or (`test`.`A`.`aggr_col` < 9)) group by `test`.`A`.`group_by_col` +SELECT TRACE RLIKE 'disjuntive_predicate_present' AS OK +FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; +OK +1 +# Test IMPOSSIBLE TREE scenario +ALTER TABLE A DROP KEY aggr_col_key; +SELECT group_by_col, MIN(aggr_col) FROM A +WHERE (group_by_col IN (70 ,9)) OR (aggr_col > 2) GROUP BY group_by_col; +group_by_col MIN(aggr_col) +NULL 7 +3 6 +6 5 +EXPLAIN SELECT group_by_col, MIN(aggr_col) FROM A +WHERE (group_by_col IN (70, 9)) OR (aggr_col > 2) GROUP BY group_by_col; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE A NULL index group_by_col_key group_by_col_key 10 NULL 6 55.55 Using where; Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`A`.`group_by_col` AS `group_by_col`,min(`test`.`A`.`aggr_col`) AS `MIN(aggr_col)` from `test`.`A` where ((`test`.`A`.`group_by_col` in (70,9)) or (`test`.`A`.`aggr_col` > 2)) group by `test`.`A`.`group_by_col` +SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK +FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; +OK +1 +SELECT group_by_col, MAX(aggr_col) FROM A +WHERE (group_by_col IN (70, 9)) OR (aggr_col < 9) GROUP BY group_by_col; +group_by_col MAX(aggr_col) +NULL 7 +3 6 +6 5 +EXPLAIN SELECT group_by_col, MAX(aggr_col) FROM A +WHERE (group_by_col IN (70, 9)) OR (aggr_col < 9) GROUP BY group_by_col; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE A NULL index group_by_col_key group_by_col_key 10 NULL 6 55.55 Using where; Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`A`.`group_by_col` AS `group_by_col`,max(`test`.`A`.`aggr_col`) AS `MAX(aggr_col)` from `test`.`A` where ((`test`.`A`.`group_by_col` in (70,9)) or (`test`.`A`.`aggr_col` < 9)) group by `test`.`A`.`group_by_col` +SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK +FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; +OK +1 +# Scenario 3: aggregate field used as equal expression. +SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +WHERE (group_by_col IN (3, 9)) OR (aggr_col = 9) GROUP BY group_by_col; +group_by_col MIN(aggr_col) MAX(aggr_col) +NULL 9 9 +3 2 6 +EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +WHERE (group_by_col IN (3, 9)) OR (aggr_col = 9) GROUP BY group_by_col; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE A NULL index group_by_col_key group_by_col_key 10 NULL 6 44.44 Using where; Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`A`.`group_by_col` AS `group_by_col`,min(`test`.`A`.`aggr_col`) AS `MIN(aggr_col)`,max(`test`.`A`.`aggr_col`) AS `MAX(aggr_col)` from `test`.`A` where ((`test`.`A`.`group_by_col` in (3,9)) or (`test`.`A`.`aggr_col` = 9)) group by `test`.`A`.`group_by_col` +SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK +FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; +OK +1 +# Scenario 4: non aggregate field used as equal expression. +SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +WHERE (group_by_col = 3) OR (aggr_col > 8) GROUP BY group_by_col; +group_by_col MIN(aggr_col) MAX(aggr_col) +NULL 9 9 +3 2 6 +6 10 10 +EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +WHERE (group_by_col = 3) OR (aggr_col > 8) GROUP BY group_by_col; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE A NULL index group_by_col_key group_by_col_key 10 NULL 6 55.55 Using where; Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`A`.`group_by_col` AS `group_by_col`,min(`test`.`A`.`aggr_col`) AS `MIN(aggr_col)`,max(`test`.`A`.`aggr_col`) AS `MAX(aggr_col)` from `test`.`A` where ((`test`.`A`.`group_by_col` = 3) or (`test`.`A`.`aggr_col` > 8)) group by `test`.`A`.`group_by_col` +SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK +FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; +OK +1 +# Scenario 5: aggregate field used as non-zero expression. +INSERT INTO A VALUES(0, 3); +INSERT INTO A VALUES(0, 9); +INSERT INTO A VALUES(8, 0); +ANALYZE TABLE A; +Table Op Msg_type Msg_text +test.A analyze status OK +SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +WHERE (group_by_col = 9) OR aggr_col GROUP BY group_by_col; +group_by_col MIN(aggr_col) MAX(aggr_col) +NULL 7 9 +0 8 8 +3 2 6 +6 5 10 +9 0 0 +EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +WHERE group_by_col = 9 OR aggr_col GROUP BY group_by_col; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE A NULL index group_by_col_key group_by_col_key 10 NULL 9 91.11 Using where; Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`A`.`group_by_col` AS `group_by_col`,min(`test`.`A`.`aggr_col`) AS `MIN(aggr_col)`,max(`test`.`A`.`aggr_col`) AS `MAX(aggr_col)` from `test`.`A` where ((`test`.`A`.`group_by_col` = 9) or `test`.`A`.`aggr_col`) group by `test`.`A`.`group_by_col` +SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK +FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; +OK +1 +# Scenario 6: non aggregate field used as non-zero expression. +SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +WHERE group_by_col OR (aggr_col < 9) GROUP BY group_by_col; +group_by_col MIN(aggr_col) MAX(aggr_col) +NULL 7 7 +0 8 8 +3 0 6 +6 5 10 +9 0 0 +EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +WHERE group_by_col OR (aggr_col < 9) GROUP BY group_by_col; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE A NULL index group_by_col_key group_by_col_key 10 NULL 9 92.59 Using where; Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`A`.`group_by_col` AS `group_by_col`,min(`test`.`A`.`aggr_col`) AS `MIN(aggr_col)`,max(`test`.`A`.`aggr_col`) AS `MAX(aggr_col)` from `test`.`A` where (`test`.`A`.`group_by_col` or (`test`.`A`.`aggr_col` < 9)) group by `test`.`A`.`group_by_col` +SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK +FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; +OK +1 +# Scenario 7: aggregate field used in equal exp without a CONST +INSERT INTO A VALUES(1,1),(1,2),(2,1); +SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +WHERE aggr_col = group_by_col GROUP BY group_by_col; +group_by_col MIN(aggr_col) MAX(aggr_col) +1 1 1 +EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +WHERE aggr_col = group_by_col GROUP BY group_by_col; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE A NULL index group_by_col_key group_by_col_key 10 NULL 12 100.00 Using where; Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`A`.`group_by_col` AS `group_by_col`,min(`test`.`A`.`aggr_col`) AS `MIN(aggr_col)`,max(`test`.`A`.`aggr_col`) AS `MAX(aggr_col)` from `test`.`A` where (`test`.`A`.`group_by_col` = `test`.`A`.`aggr_col`) group by `test`.`A`.`group_by_col` +SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK +FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; +OK +1 +# Scenario 8: aggregate field used in a non-eq exp without a CONST +SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +WHERE aggr_col < group_by_col GROUP BY group_by_col; +group_by_col MIN(aggr_col) MAX(aggr_col) +2 1 1 +3 0 2 +6 5 5 +9 0 0 +EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +WHERE aggr_col < group_by_col GROUP BY group_by_col; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE A NULL index group_by_col_key group_by_col_key 10 NULL 12 33.33 Using where; Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`A`.`group_by_col` AS `group_by_col`,min(`test`.`A`.`aggr_col`) AS `MIN(aggr_col)`,max(`test`.`A`.`aggr_col`) AS `MAX(aggr_col)` from `test`.`A` where (`test`.`A`.`aggr_col` < `test`.`A`.`group_by_col`) group by `test`.`A`.`group_by_col` +SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK +FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; +OK +1 +# Scenario 8 +INSERT INTO A VALUES(0,1),(1,0),(0,0); +SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +WHERE aggr_col OR group_by_col GROUP BY group_by_col; +group_by_col MIN(aggr_col) MAX(aggr_col) +NULL 7 9 +0 1 8 +1 0 2 +2 1 1 +3 0 6 +6 5 10 +9 0 0 +EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +WHERE aggr_col OR group_by_col GROUP BY group_by_col; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE A NULL index group_by_col_key group_by_col_key 10 NULL 15 99.00 Using where; Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`A`.`group_by_col` AS `group_by_col`,min(`test`.`A`.`aggr_col`) AS `MIN(aggr_col)`,max(`test`.`A`.`aggr_col`) AS `MAX(aggr_col)` from `test`.`A` where (`test`.`A`.`aggr_col` or `test`.`A`.`group_by_col`) group by `test`.`A`.`group_by_col` +SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK +FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; +OK +1 +# Scenario 9 +SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +WHERE aggr_col AND group_by_col GROUP BY group_by_col; +group_by_col MIN(aggr_col) MAX(aggr_col) +1 1 2 +2 1 1 +3 2 6 +6 5 10 +EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +WHERE aggr_col AND group_by_col GROUP BY group_by_col; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE A NULL index group_by_col_key group_by_col_key 10 NULL 15 81.00 Using where; Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`A`.`group_by_col` AS `group_by_col`,min(`test`.`A`.`aggr_col`) AS `MIN(aggr_col)`,max(`test`.`A`.`aggr_col`) AS `MAX(aggr_col)` from `test`.`A` where (`test`.`A`.`aggr_col` and `test`.`A`.`group_by_col`) group by `test`.`A`.`group_by_col` +SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK +FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; +OK +1 +# Scenario 10: Added for completion. This fix does not have an impact. +SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +WHERE aggr_col<>0 AND group_by_col<>0 GROUP BY group_by_col; +group_by_col MIN(aggr_col) MAX(aggr_col) +1 1 2 +2 1 1 +3 2 6 +6 5 10 +EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +WHERE aggr_col<>0 AND group_by_col<>0 GROUP BY group_by_col; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE A NULL range group_by_col_key group_by_col_key 10 NULL 7 100.00 Using where; Using index for group-by +Warnings: +Note 1003 /* select#1 */ select `test`.`A`.`group_by_col` AS `group_by_col`,min(`test`.`A`.`aggr_col`) AS `MIN(aggr_col)`,max(`test`.`A`.`aggr_col`) AS `MAX(aggr_col)` from `test`.`A` where ((`test`.`A`.`aggr_col` <> 0) and (`test`.`A`.`group_by_col` <> 0)) group by `test`.`A`.`group_by_col` +SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK +FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; +OK +0 +# Scenario 11: ITEM_FUNC as an argument of ITEM_FUNC +SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +WHERE group_by_col OR (group_by_col < (aggr_col = 1)) GROUP BY group_by_col; +group_by_col MIN(aggr_col) MAX(aggr_col) +0 1 1 +1 0 2 +2 1 1 +3 0 6 +6 5 10 +9 0 0 +EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +WHERE group_by_col OR (group_by_col < (aggr_col = 1)) GROUP BY group_by_col; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE A NULL index group_by_col_key group_by_col_key 10 NULL 15 93.33 Using where; Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`A`.`group_by_col` AS `group_by_col`,min(`test`.`A`.`aggr_col`) AS `MIN(aggr_col)`,max(`test`.`A`.`aggr_col`) AS `MAX(aggr_col)` from `test`.`A` where (`test`.`A`.`group_by_col` or (`test`.`A`.`group_by_col` < (`test`.`A`.`aggr_col` = 1))) group by `test`.`A`.`group_by_col` +SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK +FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; +OK +1 +SET optimizer_trace_max_mem_size=DEFAULT; +SET optimizer_trace=DEFAULT; +SET end_markers_in_json=DEFAULT; +DROP TABLE A; +# End of test for Bug#24423143 diff --git a/mysql-test/r/group_min_max_innodb.result b/mysql-test/r/group_min_max_innodb.result index 73e1adc5e0e6..a50b15f3eaa2 100644 --- a/mysql-test/r/group_min_max_innodb.result +++ b/mysql-test/r/group_min_max_innodb.result @@ -338,7 +338,7 @@ F 30 30 SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; OK -0 +1 SET optimizer_trace_max_mem_size=DEFAULT; SET optimizer_trace=DEFAULT; SET end_markers_in_json=DEFAULT; diff --git a/mysql-test/t/group_min_max.test b/mysql-test/t/group_min_max.test index 12f1804e755b..87d64f13f99d 100644 --- a/mysql-test/t/group_min_max.test +++ b/mysql-test/t/group_min_max.test @@ -1452,3 +1452,182 @@ SHOW SESSION STATUS LIKE 'Handler_read%'; DROP TABLE t1; --echo # End of test for Bug#18109609 + +--echo # +--echo # Bug#24423143 - WRONG RESULTS FOR AGGREGATE QUERY +--echo # + +--echo # Test index merge tree scenario +CREATE TABLE A ( + aggr_col int, + group_by_col int, + KEY aggr_col_key (aggr_col), + KEY group_by_col_key (group_by_col, aggr_col) +) ENGINE=InnoDB; + +let $DEFAULT_TRACE_MEM_SIZE=1048576; # 1MB +eval set optimizer_trace_max_mem_size=$DEFAULT_TRACE_MEM_SIZE; +set @@session.optimizer_trace='enabled=on'; +set end_markers_in_json=on; + +INSERT INTO A VALUES (2,3),(5,6),(6,3),(7,NULL),(9,NULL),(10,6); +ANALYZE TABLE A; + +SELECT group_by_col, MIN(aggr_col) FROM A +WHERE (group_by_col IN (70, 9)) OR (aggr_col > 2) GROUP BY group_by_col; + + +EXPLAIN SELECT group_by_col, MIN(aggr_col) FROM A +WHERE (group_by_col IN (70 ,9)) OR (aggr_col > 2) GROUP BY group_by_col; + +SELECT TRACE RLIKE 'disjuntive_predicate_present' AS OK + FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; + +SELECT group_by_col, MAX(aggr_col) FROM A +WHERE (group_by_col IN (70, 9)) OR (aggr_col < 9) GROUP BY group_by_col; + +EXPLAIN SELECT group_by_col, MAX(aggr_col) FROM A +WHERE (group_by_col IN (70 , 9)) OR (aggr_col < 9) GROUP BY group_by_col; + +SELECT TRACE RLIKE 'disjuntive_predicate_present' AS OK + FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; + +--echo # Test IMPOSSIBLE TREE scenario +ALTER TABLE A DROP KEY aggr_col_key; + +SELECT group_by_col, MIN(aggr_col) FROM A +WHERE (group_by_col IN (70 ,9)) OR (aggr_col > 2) GROUP BY group_by_col; + +EXPLAIN SELECT group_by_col, MIN(aggr_col) FROM A +WHERE (group_by_col IN (70, 9)) OR (aggr_col > 2) GROUP BY group_by_col; + +SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK + FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; + +SELECT group_by_col, MAX(aggr_col) FROM A +WHERE (group_by_col IN (70, 9)) OR (aggr_col < 9) GROUP BY group_by_col; + +EXPLAIN SELECT group_by_col, MAX(aggr_col) FROM A +WHERE (group_by_col IN (70, 9)) OR (aggr_col < 9) GROUP BY group_by_col; + +SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK + FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; + +--echo # Scenario 3: aggregate field used as equal expression. +SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +WHERE (group_by_col IN (3, 9)) OR (aggr_col = 9) GROUP BY group_by_col; + +EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +WHERE (group_by_col IN (3, 9)) OR (aggr_col = 9) GROUP BY group_by_col; + +SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK + FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; + +--echo # Scenario 4: non aggregate field used as equal expression. +SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +WHERE (group_by_col = 3) OR (aggr_col > 8) GROUP BY group_by_col; + +EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +WHERE (group_by_col = 3) OR (aggr_col > 8) GROUP BY group_by_col; + +SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK + FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; + +--echo # Scenario 5: aggregate field used as non-zero expression. +INSERT INTO A VALUES(0, 3); +INSERT INTO A VALUES(0, 9); +INSERT INTO A VALUES(8, 0); +ANALYZE TABLE A; + +SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +WHERE (group_by_col = 9) OR aggr_col GROUP BY group_by_col; + +EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +WHERE group_by_col = 9 OR aggr_col GROUP BY group_by_col; + +SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK + FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; + + +--echo # Scenario 6: non aggregate field used as non-zero expression. +SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +WHERE group_by_col OR (aggr_col < 9) GROUP BY group_by_col; + +EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +WHERE group_by_col OR (aggr_col < 9) GROUP BY group_by_col; + +SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK + FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; + + +--echo # Scenario 7: aggregate field used in equal exp without a CONST +INSERT INTO A VALUES(1,1),(1,2),(2,1); + +SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +WHERE aggr_col = group_by_col GROUP BY group_by_col; + +EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +WHERE aggr_col = group_by_col GROUP BY group_by_col; + +SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK + FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; + +--echo # Scenario 8: aggregate field used in a non-eq exp without a CONST +SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +WHERE aggr_col < group_by_col GROUP BY group_by_col; + +EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +WHERE aggr_col < group_by_col GROUP BY group_by_col; + +SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK + FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; + +--echo # Scenario 8 +INSERT INTO A VALUES(0,1),(1,0),(0,0); + +SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +WHERE aggr_col OR group_by_col GROUP BY group_by_col; + +EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +WHERE aggr_col OR group_by_col GROUP BY group_by_col; + +SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK + FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; + +--echo # Scenario 9 +SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +WHERE aggr_col AND group_by_col GROUP BY group_by_col; + +EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +WHERE aggr_col AND group_by_col GROUP BY group_by_col; + +SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK + FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; + +--echo # Scenario 10: Added for completion. This fix does not have an impact. +SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +WHERE aggr_col<>0 AND group_by_col<>0 GROUP BY group_by_col; + +EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +WHERE aggr_col<>0 AND group_by_col<>0 GROUP BY group_by_col; + +SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK + FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; + +--echo # Scenario 11: ITEM_FUNC as an argument of ITEM_FUNC +SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +WHERE group_by_col OR (group_by_col < (aggr_col = 1)) GROUP BY group_by_col; + +EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +WHERE group_by_col OR (group_by_col < (aggr_col = 1)) GROUP BY group_by_col; + +SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK + FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; + +SET optimizer_trace_max_mem_size=DEFAULT; +SET optimizer_trace=DEFAULT; +SET end_markers_in_json=DEFAULT; + +DROP TABLE A; + +--echo # End of test for Bug#24423143 diff --git a/sql/opt_range.cc b/sql/opt_range.cc index 899853539fce..cbb06273d235 100644 --- a/sql/opt_range.cc +++ b/sql/opt_range.cc @@ -11855,6 +11855,11 @@ static bool check_group_min_max_predicates(Item *cond, Item_field *min_max_arg_item, Field::imagetype image_type); +static bool +min_max_inspect_cond_for_fields(Item *cond, Item_field *min_max_arg_item, + bool *min_max_arg_present, + bool *non_min_max_arg_present); + static void cost_group_min_max(TABLE* table, uint key, uint used_key_parts, uint group_key_parts, SEL_TREE *range_tree, @@ -12110,6 +12115,43 @@ get_best_group_min_max(PARAM *param, SEL_TREE *tree, const Cost_estimate *cost_e } } + /** + Test (Part of WA2): Skip loose index scan on disjunctive WHERE clause which + results in null tree or merge tree. + */ + if (tree && !tree->merges.is_empty()) + { + /** + The tree structure contains multiple disjoint trees. This happens when + the WHERE clause can't be represented in a single range tree due to the + disjunctive nature of it but there exists indexes to perform index + merge scan. + */ + trace_group.add("chosen", false). + add_alnum("cause", "disjuntive_predicate_present"); + DBUG_RETURN(NULL); + } + else if (!tree && join->where_cond && min_max_arg_item) + { + /** + Skip loose index scan if min_max attribute is present along with + at least one other attribute in the WHERE cluse when the tree is null. + There is no range tree if WHERE condition can't be represented in a + single range tree and index merge is not possible. + */ + bool min_max_arg_present= false; + bool non_min_max_arg_present= false; + if (min_max_inspect_cond_for_fields(join->where_cond, + min_max_arg_item, + &min_max_arg_present, + &non_min_max_arg_present)) + { + trace_group.add("chosen", false). + add_alnum("cause", "minmax_keypart_in_disjunctive_query"); + DBUG_RETURN(NULL); + } + } + /* Check (SA7). */ if (is_agg_distinct && (have_max || have_min)) { @@ -12430,7 +12472,7 @@ get_best_group_min_max(PARAM *param, SEL_TREE *tree, const Cost_estimate *cost_e } /** - Test WA2:If there are conditions on a column C participating in + Test Part of WA2:If there are conditions on a column C participating in MIN/MAX, those conditions must be conjunctions to all earlier keyparts. Otherwise, Loose Index Scan cannot be used. */ @@ -12622,6 +12664,8 @@ check_group_min_max_predicates(Item *cond, Item_field *min_max_arg_item, be done, is that here we should analyze whether the subselect references the MIN/MAX argument field, and disallow the optimization only if this is so. + Need to handle subselect in min_max_inspect_cond_for_fields() once this + is fixed. */ if (cond_type == Item::SUBSELECT_ITEM) DBUG_RETURN(FALSE); @@ -12753,6 +12797,146 @@ check_group_min_max_predicates(Item *cond, Item_field *min_max_arg_item, DBUG_RETURN(TRUE); } +/** + Utility function used by min_max_inspect_cond_for_fields() for comparing + FILED item with given MIN/MAX item and setting appropriate out paramater. + +@param[in] cond tree (or subtree) describing all or part of the WHERE + clause being analyzed. +@param[in] min_max_arg_item The field referenced by the MIN/MAX + function(s). +@param[in/out] min_max_arg_present This out parameter is set to true if + MIN/MAX argument is present in cond. +@param[in/out] non_min_max_arg_present This out parameter is set to true if + any field item other than MIN/MAX + argument is present in cond. +*/ +static inline void util_min_max_inspect_item(Item *item_field, + Item_field *min_max_arg_item, + bool *min_max_arg_present, + bool *non_min_max_arg_present) +{ + if (item_field->type() == Item::FIELD_ITEM) + { + if(min_max_arg_item->eq(item_field, 1)) + *min_max_arg_present= true; + else + *non_min_max_arg_present= true; + } +} + +/** + This function detects the presents of MIN/MAX field along with at least + one non MIN/MAX field participation in the given condition. Subqueries + inspection is skipped as of now. + + @param[in] cond tree (or subtree) describing all or part of the WHERE + clause being analyzed. + @param[in] min_max_arg_item The field referenced by the MIN/MAX + function(s). + @param[in/out] min_max_arg_present This out parameter is set to true if + MIN/MAX argument is present in cond. + @param[in/out] non_min_max_arg_present This out parameter is set to true if + any field item other than MIN/MAX + argument is present in cond. + + @return TRUE if both MIN/MAX field and non MIN/MAX field is present in cond. + FALSE o/w. + + @todo: When the hack present in check_group_min_max_predicate() is removed, + subqueries needs to be inspected. +*/ + +static bool +min_max_inspect_cond_for_fields(Item *cond, Item_field *min_max_arg_item, + bool *min_max_arg_present, + bool *non_min_max_arg_present) +{ + DBUG_ENTER("inspect_cond_for_fields"); + DBUG_ASSERT(cond && min_max_arg_item); + + cond= cond->real_item(); + Item::Type cond_type= cond->type(); + + switch (cond_type) { + case Item::COND_ITEM: { + DBUG_PRINT("info", ("Analyzing: %s", ((Item_func*) cond)->func_name())); + List_iterator_fast li(*((Item_cond*) cond)->argument_list()); + Item *and_or_arg; + while ((and_or_arg= li++)) + { + min_max_inspect_cond_for_fields(and_or_arg, min_max_arg_item, + min_max_arg_present, + non_min_max_arg_present); + if (*min_max_arg_present && *non_min_max_arg_present) + DBUG_RETURN(true); + } + + DBUG_RETURN(false); + } + case Item::FUNC_ITEM: { + /* Test if cond references both group-by and non-group fields. */ + Item_func *pred= (Item_func*) cond; + Item *cur_arg; + DBUG_PRINT("info", ("Analyzing: %s", pred->func_name())); + for (uint arg_idx= 0; arg_idx < pred->argument_count(); arg_idx++) + { + Item **arguments= pred->arguments(); + cur_arg= arguments[arg_idx]->real_item(); + DBUG_PRINT("info", ("cur_arg: %s", cur_arg->full_name())); + + if (cur_arg->type() == Item::FUNC_ITEM) + { + min_max_inspect_cond_for_fields(cur_arg, min_max_arg_item, + min_max_arg_present, + non_min_max_arg_present); + } + else + { + util_min_max_inspect_item(cur_arg, + min_max_arg_item, + min_max_arg_present, + non_min_max_arg_present); + } + + if (*min_max_arg_present && *non_min_max_arg_present) + DBUG_RETURN(true); + } + + if (((Item_cond*) cond)->functype() == Item_func::MULT_EQUAL_FUNC) + { + /* + Analyze participating fields in a multiequal condition. + */ + Item_equal_iterator it(*(Item_equal*)cond); + + Item *item_field; + while ((item_field= it++)) + { + util_min_max_inspect_item(item_field, + min_max_arg_item, + min_max_arg_present, + non_min_max_arg_present); + + if (*min_max_arg_present && *non_min_max_arg_present) + DBUG_RETURN(true); + } + } + } + case Item::FIELD_ITEM: { + util_min_max_inspect_item(cond, + min_max_arg_item, + min_max_arg_present, + non_min_max_arg_present); + DBUG_PRINT("info", ("Analyzing: %s", cond->full_name())); + DBUG_RETURN(false); + } + default: + break; + } + + DBUG_RETURN(false); +} /* Get the SEL_ARG tree 'tree' for the keypart covering 'field', if From 07f1691ac9880e18dd565676c6561c81b5524c6d Mon Sep 17 00:00:00 2001 From: Ajo Robert Date: Wed, 22 Nov 2017 16:03:36 +0530 Subject: [PATCH 0199/1221] Bug#24423143 - WRONG RESULTS FOR AGGREGATE QUERY Post push build fix. Change-Id: I282a874f87b7c37502e90dc1b32df8655b726726 --- sql/opt_range.cc | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/sql/opt_range.cc b/sql/opt_range.cc index cbb06273d235..a57732d57b3a 100644 --- a/sql/opt_range.cc +++ b/sql/opt_range.cc @@ -12801,13 +12801,13 @@ check_group_min_max_predicates(Item *cond, Item_field *min_max_arg_item, Utility function used by min_max_inspect_cond_for_fields() for comparing FILED item with given MIN/MAX item and setting appropriate out paramater. -@param[in] cond tree (or subtree) describing all or part of the WHERE - clause being analyzed. -@param[in] min_max_arg_item The field referenced by the MIN/MAX +@param cond Tree (or subtree) describing all or part of + the WHERE clause being analyzed. +@param min_max_arg_item The field referenced by the MIN/MAX function(s). -@param[in/out] min_max_arg_present This out parameter is set to true if +@param [out] min_max_arg_present This out parameter is set to true if MIN/MAX argument is present in cond. -@param[in/out] non_min_max_arg_present This out parameter is set to true if +@param [out] non_min_max_arg_present This out parameter is set to true if any field item other than MIN/MAX argument is present in cond. */ @@ -12830,13 +12830,13 @@ static inline void util_min_max_inspect_item(Item *item_field, one non MIN/MAX field participation in the given condition. Subqueries inspection is skipped as of now. - @param[in] cond tree (or subtree) describing all or part of the WHERE + @param cond tree (or subtree) describing all or part of the WHERE clause being analyzed. - @param[in] min_max_arg_item The field referenced by the MIN/MAX + @param min_max_arg_item The field referenced by the MIN/MAX function(s). - @param[in/out] min_max_arg_present This out parameter is set to true if + @param [out] min_max_arg_present This out parameter is set to true if MIN/MAX argument is present in cond. - @param[in/out] non_min_max_arg_present This out parameter is set to true if + @param [out] non_min_max_arg_present This out parameter is set to true if any field item other than MIN/MAX argument is present in cond. @@ -12922,6 +12922,8 @@ min_max_inspect_cond_for_fields(Item *cond, Item_field *min_max_arg_item, DBUG_RETURN(true); } } + + break; } case Item::FIELD_ITEM: { util_min_max_inspect_item(cond, From e0ad9ea241f038b197a68520336da3be02b3803b Mon Sep 17 00:00:00 2001 From: Sachin Agarwal Date: Wed, 22 Nov 2017 19:46:06 +0530 Subject: [PATCH 0200/1221] Bug #23590280 NO WARNING WHEN REDUCING INNODB_BUFFER_POOL_SIZE INSIZE THE FIRST CHUNK PROBLEM It is a post-push problem. innodb_buffer_pool_size_validate() function was supposed to return updated buffer pool value to the caller function, but due to a check introduced by my fix, it returned before updating the buffer pool value. FIX Ensured that the proper updated value of buffer pool size returns to the caller function. Reviewed by: Aditya RB: 17812 --- storage/innobase/handler/ha_innodb.cc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index be78d33fa278..9b2ef2f234d6 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -21223,17 +21223,17 @@ innodb_buffer_pool_size_validate( return(1); } + ulint requested_buf_pool_size + = buf_pool_size_align(static_cast(intbuf)); + + *static_cast(save) = requested_buf_pool_size; + if (srv_buf_pool_size == static_cast(intbuf)) { buf_pool_mutex_exit_all(); /* nothing to do */ return(0); } - ulint requested_buf_pool_size - = buf_pool_size_align(static_cast(intbuf)); - - *static_cast(save) = requested_buf_pool_size; - if (srv_buf_pool_size == requested_buf_pool_size) { buf_pool_mutex_exit_all(); push_warning_printf(thd, Sql_condition::SL_WARNING, From bd17d9d199bf713b2b2a2b1f3cc176d083d0fc00 Mon Sep 17 00:00:00 2001 From: Hemant Dangi Date: Wed, 22 Nov 2017 21:58:13 +0530 Subject: [PATCH 0201/1221] BUG#26985561: BACKPORT BUG#26277771 TO 5.7 This is backport of Bug#26277771: BAD WRITE SET TRACKING WITH UNIQUE KEY ON A DELETE FOLLOWED BY AN INSERT. Issue: ====== The Writesets generated for keys were not using collation into consideration, and because of that wrong last_committed and sequence_number were getting added to binary log and thus trnsactions were getting applied in wrong order by parallel applier on slave. Solution: ========= The fix uses make_sort_key to transform keys, with different charset and collation, into its binary image, suitable for sorting using binary comparison. --- ...pl_transaction_write_set_extraction.result | 64 ++- .../rpl_transaction_write_set_extraction.test | 82 ++- .../r/gr_certifier_garbage_collection.result | 4 +- .../mtr/r/gr_collations_key_conflict.result | 99 ++++ .../r/gr_perfschema_group_member_stats.result | 2 +- .../t/gr_certifier_garbage_collection.test | 8 +- .../mtr/t/gr_collations_key_conflict.test | 51 ++ .../t/gr_perfschema_group_member_stats.test | 4 +- sql/rpl_transaction_write_set_ctx.cc | 4 +- sql/rpl_write_set_handler.cc | 520 +++++++++++++----- 10 files changed, 689 insertions(+), 149 deletions(-) create mode 100644 rapid/plugin/group_replication/tests/mtr/r/gr_collations_key_conflict.result create mode 100644 rapid/plugin/group_replication/tests/mtr/t/gr_collations_key_conflict.test diff --git a/mysql-test/suite/rpl/r/rpl_transaction_write_set_extraction.result b/mysql-test/suite/rpl/r/rpl_transaction_write_set_extraction.result index 61fa23554888..6851c313364b 100644 --- a/mysql-test/suite/rpl/r/rpl_transaction_write_set_extraction.result +++ b/mysql-test/suite/rpl/r/rpl_transaction_write_set_extraction.result @@ -5,7 +5,7 @@ Note #### Storing MySQL user name or password information in the master info rep [connection master] include/assert.inc [The value for transaction_write_set_extraction shoudl be MURMUR32] CREATE TABLE t1 (a INT PRIMARY KEY); -SET @@GLOBAL.DEBUG= @debug_saved; +SET @debug_saved= @@GLOBAL.DEBUG; SET @@GLOBAL.DEBUG= '+d,PKE_assert_single_primary_key_generated_insert'; INSERT INTO t1 VALUES(1); SET @@GLOBAL.DEBUG= @debug_saved; @@ -15,6 +15,17 @@ SET @@GLOBAL.DEBUG= @debug_saved; include/rpl_sync.inc DROP TABLE t1; include/rpl_sync.inc +CREATE TABLE t1 (a BINARY(1) PRIMARY KEY); +SET @@GLOBAL.DEBUG= @debug_saved; +SET @@GLOBAL.DEBUG= '+d,PKE_assert_single_primary_key_generated_insert_collation'; +INSERT INTO t1 VALUES(1); +SET @@GLOBAL.DEBUG= @debug_saved; +SET @@GLOBAL.DEBUG= '+d,PKE_assert_single_primary_key_generated_update_collation'; +UPDATE t1 SET a=3 WHERE a=1; +SET @@GLOBAL.DEBUG= @debug_saved; +include/rpl_sync.inc +DROP TABLE t1; +include/rpl_sync.inc CREATE TABLE t1(a INT, b INT, PRIMARY KEY(a, b)); SET @@GLOBAL.DEBUG= @debug_saved; SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_primary_key_generated_insert'; @@ -26,6 +37,17 @@ SET @@GLOBAL.DEBUG= @debug_saved; include/rpl_sync.inc DROP TABLE t1; include/rpl_sync.inc +CREATE TABLE t1(a BINARY(1), b BINARY(1), PRIMARY KEY(a, b)); +SET @@GLOBAL.DEBUG= @debug_saved; +SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_primary_key_generated_insert_collation'; +INSERT INTO t1 VALUE(1, 2); +SET @@GLOBAL.DEBUG= @debug_saved; +SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_primary_key_generated_update_collation'; +UPDATE t1 SET a=3 WHERE a=1; +SET @@GLOBAL.DEBUG= @debug_saved; +include/rpl_sync.inc +DROP TABLE t1; +include/rpl_sync.inc CREATE TABLE t1 (c1 INT PRIMARY KEY, c2 INT NOT NULL UNIQUE, c3 INT NOT NULL UNIQUE); SET @@GLOBAL.DEBUG= @debug_saved; SET @@GLOBAL.DEBUG= '+d,PKE_assert_single_primary_unique_key_generated_insert'; @@ -36,6 +58,16 @@ UPDATE t1 SET c1=5 WHERE c1=1; include/rpl_sync.inc DROP TABLE t1; include/rpl_sync.inc +CREATE TABLE t1 (c1 BINARY(1) PRIMARY KEY, c2 BINARY(1) NOT NULL UNIQUE, c3 BINARY(1) NOT NULL UNIQUE); +SET @@GLOBAL.DEBUG= @debug_saved; +SET @@GLOBAL.DEBUG= '+d,PKE_assert_single_primary_unique_key_generated_insert_collation'; +INSERT INTO t1 VALUES (1, 2, 3); +SET @@GLOBAL.DEBUG= @debug_saved; +SET @@GLOBAL.DEBUG= '+d,PKE_assert_single_primary_unique_key_generated_update_collation'; +UPDATE t1 SET c1=5 WHERE c1=1; +include/rpl_sync.inc +DROP TABLE t1; +include/rpl_sync.inc CREATE TABLE t1 (a INT, d INT, b INT NOT NULL UNIQUE, c INT NOT NULL UNIQUE, PRIMARY KEY(a, d)); SET @@GLOBAL.DEBUG= @debug_saved; SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_primary_unique_key_generated_insert'; @@ -47,6 +79,17 @@ SET @@GLOBAL.DEBUG= @debug_saved; include/rpl_sync.inc DROP TABLE t1; include/rpl_sync.inc +CREATE TABLE t1 (a BINARY(1), d BINARY(1), b BINARY(1) NOT NULL UNIQUE, c BINARY(1) NOT NULL UNIQUE, PRIMARY KEY(a, d)); +SET @@GLOBAL.DEBUG= @debug_saved; +SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_primary_unique_key_generated_insert_collation'; +INSERT INTO t1 VALUES(1, 2, 3, 4); +SET @@GLOBAL.DEBUG= @debug_saved; +SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_primary_unique_key_generated_update_collation'; +UPDATE t1 SET a=5 WHERE a=1; +SET @@GLOBAL.DEBUG= @debug_saved; +include/rpl_sync.inc +DROP TABLE t1; +include/rpl_sync.inc CREATE TABLE t1 (a INT PRIMARY KEY); CREATE TABLE t2 (b INT PRIMARY KEY); CREATE TABLE t3 (c1 INT, c2 INT NOT NULL UNIQUE, PRIMARY KEY(c1, c2), FOREIGN KEY(c1) REFERENCES t1(a), FOREIGN KEY(c2) REFERENCES t2(b)); @@ -66,4 +109,23 @@ DROP TABLE t3; DROP TABLE t2; DROP TABLE t1; include/rpl_sync.inc +CREATE TABLE t1 (a BINARY(1) PRIMARY KEY); +CREATE TABLE t2 (b BINARY(1) PRIMARY KEY); +CREATE TABLE t3 (c1 BINARY(1), c2 BINARY(1) NOT NULL UNIQUE, PRIMARY KEY(c1, c2), FOREIGN KEY(c1) REFERENCES t1(a), FOREIGN KEY(c2) REFERENCES t2(b)); +INSERT INTO t1 VALUES (1); +INSERT INTO t2 VALUES (5); +SET @@GLOBAL.DEBUG= @debug_saved; +SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_foreign_key_generated_insert_collation'; +INSERT INTO t3 values(1,5); +SET @@GLOBAL.DEBUG= @debug_saved; +INSERT INTO t1 VALUES (3); +include/rpl_sync.inc +SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_foreign_key_generated_update_collation'; +UPDATE t3 SET c1=3 WHERE c1=1; +include/rpl_sync.inc +SET @@GLOBAL.DEBUG= @debug_saved; +DROP TABLE t3; +DROP TABLE t2; +DROP TABLE t1; +include/rpl_sync.inc include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_transaction_write_set_extraction.test b/mysql-test/suite/rpl/t/rpl_transaction_write_set_extraction.test index e1236fe8cc2a..c8b53b095a79 100644 --- a/mysql-test/suite/rpl/t/rpl_transaction_write_set_extraction.test +++ b/mysql-test/suite/rpl/t/rpl_transaction_write_set_extraction.test @@ -17,7 +17,7 @@ --connection master CREATE TABLE t1 (a INT PRIMARY KEY); -SET @@GLOBAL.DEBUG= @debug_saved; +SET @debug_saved= @@GLOBAL.DEBUG; SET @@GLOBAL.DEBUG= '+d,PKE_assert_single_primary_key_generated_insert'; INSERT INTO t1 VALUES(1); SET @@GLOBAL.DEBUG= @debug_saved; @@ -28,8 +28,23 @@ SET @@GLOBAL.DEBUG= @debug_saved; DROP TABLE t1; --source include/rpl_sync.inc +# tests both writeset algorithm (with and without collation) +--connection master +CREATE TABLE t1 (a BINARY(1) PRIMARY KEY); +SET @@GLOBAL.DEBUG= @debug_saved; +SET @@GLOBAL.DEBUG= '+d,PKE_assert_single_primary_key_generated_insert_collation'; +INSERT INTO t1 VALUES(1); +SET @@GLOBAL.DEBUG= @debug_saved; +SET @@GLOBAL.DEBUG= '+d,PKE_assert_single_primary_key_generated_update_collation'; +UPDATE t1 SET a=3 WHERE a=1; +SET @@GLOBAL.DEBUG= @debug_saved; +--source include/rpl_sync.inc +DROP TABLE t1; +--source include/rpl_sync.inc + # Table with multi values pimary key field with insert and update +--connection master CREATE TABLE t1(a INT, b INT, PRIMARY KEY(a, b)); SET @@GLOBAL.DEBUG= @debug_saved; SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_primary_key_generated_insert'; @@ -42,6 +57,20 @@ SET @@GLOBAL.DEBUG= @debug_saved; DROP TABLE t1; --source include/rpl_sync.inc +# tests both writeset algorithm (with and without collation) +--connection master +CREATE TABLE t1(a BINARY(1), b BINARY(1), PRIMARY KEY(a, b)); +SET @@GLOBAL.DEBUG= @debug_saved; +SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_primary_key_generated_insert_collation'; +INSERT INTO t1 VALUE(1, 2); +SET @@GLOBAL.DEBUG= @debug_saved; +SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_primary_key_generated_update_collation'; +UPDATE t1 SET a=3 WHERE a=1; +SET @@GLOBAL.DEBUG= @debug_saved; +--source include/rpl_sync.inc +DROP TABLE t1; +--source include/rpl_sync.inc + # Table with single primary key and multiple unique key with insert and # updates. @@ -57,9 +86,23 @@ UPDATE t1 SET c1=5 WHERE c1=1; DROP TABLE t1; --source include/rpl_sync.inc +# tests both writeset algorithm (with and without collation) +--connection master +CREATE TABLE t1 (c1 BINARY(1) PRIMARY KEY, c2 BINARY(1) NOT NULL UNIQUE, c3 BINARY(1) NOT NULL UNIQUE); +SET @@GLOBAL.DEBUG= @debug_saved; +SET @@GLOBAL.DEBUG= '+d,PKE_assert_single_primary_unique_key_generated_insert_collation'; +INSERT INTO t1 VALUES (1, 2, 3); +SET @@GLOBAL.DEBUG= @debug_saved; +SET @@GLOBAL.DEBUG= '+d,PKE_assert_single_primary_unique_key_generated_update_collation'; +UPDATE t1 SET c1=5 WHERE c1=1; +--source include/rpl_sync.inc +DROP TABLE t1; +--source include/rpl_sync.inc + # Table with multi valued primary key and multiple unique key with insert and # updates. +--connection master CREATE TABLE t1 (a INT, d INT, b INT NOT NULL UNIQUE, c INT NOT NULL UNIQUE, PRIMARY KEY(a, d)); SET @@GLOBAL.DEBUG= @debug_saved; SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_primary_unique_key_generated_insert'; @@ -72,6 +115,20 @@ SET @@GLOBAL.DEBUG= @debug_saved; DROP TABLE t1; --source include/rpl_sync.inc +# tests both writeset algorithm (with and without collation) +--connection master +CREATE TABLE t1 (a BINARY(1), d BINARY(1), b BINARY(1) NOT NULL UNIQUE, c BINARY(1) NOT NULL UNIQUE, PRIMARY KEY(a, d)); +SET @@GLOBAL.DEBUG= @debug_saved; +SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_primary_unique_key_generated_insert_collation'; +INSERT INTO t1 VALUES(1, 2, 3, 4); +SET @@GLOBAL.DEBUG= @debug_saved; +SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_primary_unique_key_generated_update_collation'; +UPDATE t1 SET a=5 WHERE a=1; +SET @@GLOBAL.DEBUG= @debug_saved; +--source include/rpl_sync.inc +DROP TABLE t1; +--source include/rpl_sync.inc + # Table with Primary Key + Unique Key and Foreign Key --connection master @@ -97,4 +154,27 @@ DROP TABLE t2; DROP TABLE t1; --source include/rpl_sync.inc +# tests both writeset algorithm (with and without collation) +--connection master +CREATE TABLE t1 (a BINARY(1) PRIMARY KEY); +CREATE TABLE t2 (b BINARY(1) PRIMARY KEY); +CREATE TABLE t3 (c1 BINARY(1), c2 BINARY(1) NOT NULL UNIQUE, PRIMARY KEY(c1, c2), FOREIGN KEY(c1) REFERENCES t1(a), FOREIGN KEY(c2) REFERENCES t2(b)); + +INSERT INTO t1 VALUES (1); +INSERT INTO t2 VALUES (5); +SET @@GLOBAL.DEBUG= @debug_saved; +SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_foreign_key_generated_insert_collation'; +INSERT INTO t3 values(1,5); +SET @@GLOBAL.DEBUG= @debug_saved; +INSERT INTO t1 VALUES (3); +--source include/rpl_sync.inc +SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_foreign_key_generated_update_collation'; +UPDATE t3 SET c1=3 WHERE c1=1; +--source include/rpl_sync.inc +SET @@GLOBAL.DEBUG= @debug_saved; +DROP TABLE t3; +DROP TABLE t2; +DROP TABLE t1; +--source include/rpl_sync.inc + --source include/rpl_end.inc diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_certifier_garbage_collection.result b/rapid/plugin/group_replication/tests/mtr/r/gr_certifier_garbage_collection.result index 8e141900de40..e236d631b2c1 100644 --- a/rapid/plugin/group_replication/tests/mtr/r/gr_certifier_garbage_collection.result +++ b/rapid/plugin/group_replication/tests/mtr/r/gr_certifier_garbage_collection.result @@ -38,9 +38,9 @@ UPDATE t1 SET c1=2 WHERE c1=1; # After garbage collection certification info will contain: # WS: t1.c1=1 -> 8a94f357-aab4-11df-86ab-c80aa9422222:1-4 # WS: t1.c1=2 -> 8a94f357-aab4-11df-86ab-c80aa9422222:1-4 -include/assert.inc ['Count_transactions_rows_validating must be 2'] +include/assert.inc ['Count_transactions_rows_validating must be 4'] include/assert.inc ['Transactions_committed_all_members must be equal to 8a94f357-aab4-11df-86ab-c80aa9422222:1-4'] -include/assert.inc ['Count_transactions_rows_validating must be 2'] +include/assert.inc ['Count_transactions_rows_validating must be 4'] include/assert.inc ['Transactions_committed_all_members must be equal to 8a94f357-aab4-11df-86ab-c80aa9422222:1-4'] ############################################################ diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_collations_key_conflict.result b/rapid/plugin/group_replication/tests/mtr/r/gr_collations_key_conflict.result new file mode 100644 index 000000000000..8f5ab65ad471 --- /dev/null +++ b/rapid/plugin/group_replication/tests/mtr/r/gr_collations_key_conflict.result @@ -0,0 +1,99 @@ +include/group_replication.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection server1] + +########################### +# Create a table on server1 +[connection server1] +CREATE TABLE t1 ( +u_str VARCHAR(32) NOT NULL, +value VARCHAR(32) NOT NULL, +PRIMARY KEY (u_str) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +include/rpl_sync.inc + +###################################################################### +# Execute in concurrency transaction with equivalent keys under latin1 + +############################################################ +# 0. Initial setup and checks. +[connection server_1] +SET SESSION sql_log_bin= 0; +include/gtid_utils.inc +SET SESSION sql_log_bin= 1; +include/gtid_step_reset.inc + +############################################################ +# 1. Set a debug sync before broadcast message to group on +# connection local_server_connection1. +[connection server_1] +SET @debug_save= @@GLOBAL.DEBUG; +SET @@GLOBAL.DEBUG='d,group_replication_before_message_broadcast'; + +##################################################################### +# 2. Commit local_transaction that will be blocked before broadcast. +BEGIN; +INSERT INTO t1 (u_str, value) VALUES ('', "A value");; +COMMIT; + +############################################################ +# 3. Wait until local transaction reaches the +# group_replication_before_message_broadcast debug sync point. +[connection server1] + +############################################################ +# 4. Execute a transaction on remote server, that will reach first +# certification, since transaction on the local server +# is blocked before broadcast. +[connection server2] +BEGIN; +INSERT INTO t1 (u_str, value) VALUES ('', "Another value");; +COMMIT; + +############################################################ +# 5. Signal the waiting thread on local server to resume the +# transaction. +[connection server1] +SET DEBUG_SYNC='now SIGNAL waiting'; +SET @@GLOBAL.DEBUG= @debug_save; + +############################################################ +# 6. Wait for remote transaction to be executed succesfully +on local server. +[connection server2] +include/sync_slave_sql_with_master.inc +############################################################ +# 7. If the test case is conflict scenario, local transaction +# will end up in an error stating that it was aborted, +# since transactions are conflicting and transaction on +# remote server was ordered first. If the test case is +# is positive scenario, no error will be seen here. +[connection server_1] +ERROR HY000: Plugin instructed the server to rollback the current transaction. +[connection server_1] +SET @@GLOBAL.DEBUG=@debug_save; +############################################################ +# 8. Sync everything +include/rpl_sync.inc +############################################################ +# 9. Assert that number of certified transactions are the +# expected ones. +include/assert.inc [The value of Count_Transactions_Checked should be 3 after starting group replication] +include/assert.inc [The value of Count_Conflicts_Detected should be 1 after starting group replication] +############################################################ +# 10. Assert that GTID is increased as expected +include/gtid_step_assert.inc [count=1, only_count=1] +[connection server_1] +SET SESSION sql_log_bin= 0; +include/gtid_utils_end.inc +SET SESSION sql_log_bin= 1; +############################################################ +# 11. Cleanup (restore the connection back to original) +[connection server1] + +########### +# Clean up. +DROP TABLE t1; +include/group_replication_end.inc diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_perfschema_group_member_stats.result b/rapid/plugin/group_replication/tests/mtr/r/gr_perfschema_group_member_stats.result index 7f39b0d6f58a..b90552faeaaa 100644 --- a/rapid/plugin/group_replication/tests/mtr/r/gr_perfschema_group_member_stats.result +++ b/rapid/plugin/group_replication/tests/mtr/r/gr_perfschema_group_member_stats.result @@ -53,7 +53,7 @@ server1 include/assert.inc [The value of member_id should be equal to server UUID after starting group replication] include/assert.inc [The value of Count_Transactions_checked should be 6 after starting group replication] include/assert.inc [The value of Count_conflicts_detected should be 0 after starting group replication] -include/assert.inc [The value of Count_Transactions_rows_validating should be 2 after starting group replication] +include/assert.inc [The value of Count_Transactions_rows_validating should be 4 after starting group replication] include/assert.inc [The value of Transactions_committed_all_members should have server 1 GTIDs before server2 start] include/assert.inc [The value of Last_Conflict_free_transaction should be the gtid of the last applied transaction.] SET SESSION sql_log_bin= 0; diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_certifier_garbage_collection.test b/rapid/plugin/group_replication/tests/mtr/t/gr_certifier_garbage_collection.test index b29b629663bc..af2b1ec49d3c 100644 --- a/rapid/plugin/group_replication/tests/mtr/t/gr_certifier_garbage_collection.test +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_certifier_garbage_collection.test @@ -104,8 +104,8 @@ UPDATE t1 SET c1=2 WHERE c1=1; --connection server1 --let $count_transactions_validating= query_get_value(SELECT Count_transactions_rows_validating from performance_schema.replication_group_member_stats, Count_transactions_rows_validating, 1) ---let $assert_text= 'Count_transactions_rows_validating must be 2' ---let $assert_cond= $count_transactions_validating = 2 +--let $assert_text= 'Count_transactions_rows_validating must be 4' +--let $assert_cond= $count_transactions_validating = 4 --source include/assert.inc --let $transactions_committed_all_members= query_get_value(SELECT Transactions_committed_all_members from performance_schema.replication_group_member_stats, Transactions_committed_all_members, 1) @@ -115,8 +115,8 @@ UPDATE t1 SET c1=2 WHERE c1=1; --connection server2 --let $count_transactions_validating= query_get_value(SELECT Count_transactions_rows_validating from performance_schema.replication_group_member_stats, Count_transactions_rows_validating, 1) ---let $assert_text= 'Count_transactions_rows_validating must be 2' ---let $assert_cond= $count_transactions_validating = 2 +--let $assert_text= 'Count_transactions_rows_validating must be 4' +--let $assert_cond= $count_transactions_validating = 4 --source include/assert.inc --let $transactions_committed_all_members= query_get_value(SELECT Transactions_committed_all_members from performance_schema.replication_group_member_stats, Transactions_committed_all_members, 1) diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_collations_key_conflict.test b/rapid/plugin/group_replication/tests/mtr/t/gr_collations_key_conflict.test new file mode 100644 index 000000000000..9be9f37a98d3 --- /dev/null +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_collations_key_conflict.test @@ -0,0 +1,51 @@ +############################################################################## +# This test checks that keys that are considered the same under a collation do +# not pass certification as being different keys. +# +# The default mysql-5.7 collation is latin1, so gr_collations_key_conflict +# test and result files, which were using utf8 encoding, also have been +# converted to latin1 collation, to avoid changing the default server collation +# value. +# +# 0. 2 Server with running GR +# 1. Create a table with collation latin1 +# 2. Execute in concurrency transaction with equivalent keys under latin1 +# 3. Cleanup +############################################################################## + +--source include/have_debug_sync.inc +--source ../inc/have_group_replication_plugin.inc +--source ../inc/group_replication.inc + +--echo +--echo ########################### +--echo # Create a table on server1 +--let $rpl_connection_name= server1 +--source include/rpl_connection.inc + +CREATE TABLE t1 ( + u_str VARCHAR(32) NOT NULL, + value VARCHAR(32) NOT NULL, + PRIMARY KEY (u_str) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +--source include/rpl_sync.inc + +--echo +--echo ###################################################################### +--echo # Execute in concurrency transaction with equivalent keys under latin1 + +--let $local_server_connection1=server_1 +--let $local_server_connection2=server1 +--let $remote_server_connection=server2 +--let $local_transaction= INSERT INTO t1 (u_str, value) VALUES ('', "A value"); +--let $remote_transaction=INSERT INTO t1 (u_str, value) VALUES ('', "Another value"); +--let $conflict_test=1 +--source ../inc/gr_parallel_local_and_remote_transactions.inc + +--echo +--echo ########### +--echo # Clean up. +DROP TABLE t1; + +--source ../inc/group_replication_end.inc diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_perfschema_group_member_stats.test b/rapid/plugin/group_replication/tests/mtr/t/gr_perfschema_group_member_stats.test index 1743f9463f39..54ab4499cf1a 100644 --- a/rapid/plugin/group_replication/tests/mtr/t/gr_perfschema_group_member_stats.test +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_perfschema_group_member_stats.test @@ -182,8 +182,8 @@ START SLAVE SQL_THREAD FOR CHANNEL "group_replication_applier"; --source include/assert.inc --let $certification_db_size= query_get_value(SELECT Count_Transactions_rows_validating from performance_schema.replication_group_member_stats, Count_Transactions_rows_validating, 1) ---let $assert_text= The value of Count_Transactions_rows_validating should be 2 after starting group replication ---let $assert_cond= "$certification_db_size" = 2 +--let $assert_text= The value of Count_Transactions_rows_validating should be 4 after starting group replication +--let $assert_cond= "$certification_db_size" = 4 --source include/assert.inc --let $stable_set= query_get_value(SELECT Transactions_committed_all_members from performance_schema.replication_group_member_stats, Transactions_committed_all_members, 1) diff --git a/sql/rpl_transaction_write_set_ctx.cc b/sql/rpl_transaction_write_set_ctx.cc index 8ad77fc0de29..11f912a6f681 100644 --- a/sql/rpl_transaction_write_set_ctx.cc +++ b/sql/rpl_transaction_write_set_ctx.cc @@ -187,10 +187,10 @@ void Rpl_transaction_write_set_ctx::rollback_to_savepoint(char* name) } DBUG_EXECUTE_IF("transaction_write_set_savepoint_add_savepoint", - DBUG_ASSERT(write_set.size() == 1);); + DBUG_ASSERT(write_set.size() == 2);); DBUG_EXECUTE_IF("transaction_write_set_size_2", - DBUG_ASSERT(write_set.size() == 2);); + DBUG_ASSERT(write_set.size() == 4);); } DBUG_VOID_RETURN; diff --git a/sql/rpl_write_set_handler.cc b/sql/rpl_write_set_handler.cc index 3b2ca97c5ec1..8a39c5b082f1 100644 --- a/sql/rpl_write_set_handler.cc +++ b/sql/rpl_write_set_handler.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -27,11 +27,14 @@ #include #include +#include #include #define NAME_READ_BUFFER_SIZE 1024 #define HASH_STRING_SEPARATOR "½" +#define COLLATION_CONVERSION_ALGORITHM 1 + const char *transaction_write_set_hashing_algorithms[]= { "OFF", @@ -56,12 +59,12 @@ get_write_set_algorithm_string(unsigned int algorithm) } } -template uint64 calc_hash(ulong algorithm, type T) +template uint64 calc_hash(ulong algorithm, type T, size_t len) { if(algorithm == HASH_ALGORITHM_MURMUR32) - return (murmur3_32((const uchar*)T, strlen(T), 0)); + return (murmur3_32((const uchar*)T, len, 0)); else - return (MY_XXH64((const uchar*)T, strlen(T), 0)); + return (MY_XXH64((const uchar*)T, len, 0)); } /** @@ -158,108 +161,266 @@ void check_foreign_key(TABLE *table, THD *thd, } -void debug_check_for_write_sets(std::vector &key_list_to_hash) +void debug_check_for_write_sets(std::vector< std::pair > &key_list_to_hash) { DBUG_EXECUTE_IF("PKE_assert_single_primary_key_generated_insert", - DBUG_ASSERT(key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + DBUG_ASSERT(key_list_to_hash.size() == 2); + DBUG_ASSERT(key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "1");); + DBUG_EXECUTE_IF("PKE_assert_single_primary_key_generated_insert_collation", + DBUG_ASSERT(key_list_to_hash.size() == 2); + DBUG_ASSERT(key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "1" && + key_list_to_hash[1].first == key_list_to_hash[0].first);); + DBUG_EXECUTE_IF("PKE_assert_single_primary_key_generated_update", - DBUG_ASSERT(key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + DBUG_ASSERT(key_list_to_hash.size() == 2); + DBUG_ASSERT(key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1" || - key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "1");); + DBUG_EXECUTE_IF("PKE_assert_single_primary_key_generated_update_collation", + DBUG_ASSERT(key_list_to_hash.size() == 2); + DBUG_ASSERT((key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1" && + key_list_to_hash[1].first == key_list_to_hash[0].first) || + (key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "1" && + key_list_to_hash[1].first == key_list_to_hash[0].first));); + DBUG_EXECUTE_IF("PKE_assert_multi_primary_key_generated_insert", - DBUG_ASSERT(key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + DBUG_ASSERT(key_list_to_hash.size() == 2); + DBUG_ASSERT(key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "12" HASH_STRING_SEPARATOR "1");); + DBUG_EXECUTE_IF("PKE_assert_multi_primary_key_generated_insert_collation", + DBUG_ASSERT(key_list_to_hash.size() == 2); + DBUG_ASSERT(key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "12" + HASH_STRING_SEPARATOR "1" && + key_list_to_hash[1].first == key_list_to_hash[0].first);); + DBUG_EXECUTE_IF("PKE_assert_multi_primary_key_generated_update", - DBUG_ASSERT(key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + DBUG_ASSERT(key_list_to_hash.size() == 2); + DBUG_ASSERT(key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "12" HASH_STRING_SEPARATOR "1" || - key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "12" HASH_STRING_SEPARATOR "1");); + DBUG_EXECUTE_IF("PKE_assert_multi_primary_key_generated_update_collation", + DBUG_ASSERT(key_list_to_hash.size() == 2); + DBUG_ASSERT((key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "12" + HASH_STRING_SEPARATOR "1" && + key_list_to_hash[1].first == key_list_to_hash[0].first) || + (key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "12" + HASH_STRING_SEPARATOR "1" && + key_list_to_hash[1].first == key_list_to_hash[0].first));); + DBUG_EXECUTE_IF("PKE_assert_single_primary_unique_key_generated_insert", - DBUG_ASSERT(key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + DBUG_ASSERT(key_list_to_hash.size() == 6); + DBUG_ASSERT(key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1] == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[1].first == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "22" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[2] == "c3" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[2].first == "c3" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1");); + + DBUG_EXECUTE_IF("PKE_assert_single_primary_unique_key_generated_insert_collation", + DBUG_ASSERT(key_list_to_hash.size() == 6); + DBUG_ASSERT(key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "1" && + key_list_to_hash[1].first == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + HASH_STRING_SEPARATOR "22" HASH_STRING_SEPARATOR "1" && + key_list_to_hash[2].first == "c3" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1" && + key_list_to_hash[3].first == key_list_to_hash[0].first && + key_list_to_hash[4].first == key_list_to_hash[1].first && + key_list_to_hash[5].first == key_list_to_hash[2].first);); + DBUG_EXECUTE_IF("PKE_assert_single_primary_unique_key_generated_update", - DBUG_ASSERT((key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + DBUG_ASSERT(key_list_to_hash.size() == 6); + DBUG_ASSERT((key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1] == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[1].first == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "22" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[2] == "c3" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[2].first == "c3" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1") || - (key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + (key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1] == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[1].first == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "22" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[2] == "c3" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[2].first == "c3" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1"));); + DBUG_EXECUTE_IF("PKE_assert_single_primary_unique_key_generated_update_collation", + DBUG_ASSERT(key_list_to_hash.size() == 6); + DBUG_ASSERT((key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "1" && + key_list_to_hash[1].first == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + HASH_STRING_SEPARATOR "22" HASH_STRING_SEPARATOR "1" && + key_list_to_hash[2].first == "c3" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1" && + key_list_to_hash[3].first == key_list_to_hash[0].first && + key_list_to_hash[4].first == key_list_to_hash[1].first && + key_list_to_hash[5].first == key_list_to_hash[2].first) || + (key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "1" && + key_list_to_hash[1].first == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + HASH_STRING_SEPARATOR "22" HASH_STRING_SEPARATOR "1" && + key_list_to_hash[2].first == "c3" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1" && + key_list_to_hash[3].first == key_list_to_hash[0].first && + key_list_to_hash[4].first == key_list_to_hash[1].first && + key_list_to_hash[5].first == key_list_to_hash[2].first));); + DBUG_EXECUTE_IF("PKE_assert_multi_primary_unique_key_generated_insert", - DBUG_ASSERT(key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + DBUG_ASSERT(key_list_to_hash.size() == 6); + DBUG_ASSERT(key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "12" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1] == "b" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[1].first == "b" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[2] == "c" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[2].first == "c" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "24" HASH_STRING_SEPARATOR "1");); + DBUG_EXECUTE_IF("PKE_assert_multi_primary_unique_key_generated_insert_collation", + DBUG_ASSERT(key_list_to_hash.size() == 6); + DBUG_ASSERT(key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "12" + HASH_STRING_SEPARATOR "1" && + key_list_to_hash[1].first == "b" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1" && + key_list_to_hash[2].first == "c" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + HASH_STRING_SEPARATOR "24" HASH_STRING_SEPARATOR "1" && + key_list_to_hash[3].first == key_list_to_hash[0].first && + key_list_to_hash[4].first == key_list_to_hash[1].first && + key_list_to_hash[5].first == key_list_to_hash[2].first);); + DBUG_EXECUTE_IF("PKE_assert_multi_primary_unique_key_generated_update", - DBUG_ASSERT((key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + DBUG_ASSERT(key_list_to_hash.size() == 6); + DBUG_ASSERT((key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "12" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1] == "b" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[1].first == "b" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[2] == "c" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[2].first == "c" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "24" HASH_STRING_SEPARATOR "1") || - (key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + (key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "12" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1] == "b" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[1].first == "b" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[2] == "c" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[2].first == "c" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "24" HASH_STRING_SEPARATOR "1"));); + DBUG_EXECUTE_IF("PKE_assert_multi_primary_unique_key_generated_update_collation", + DBUG_ASSERT(key_list_to_hash.size() == 6); + DBUG_ASSERT((key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "12" + HASH_STRING_SEPARATOR "1" && + key_list_to_hash[1].first == "b" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1" && + key_list_to_hash[2].first == "c" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + HASH_STRING_SEPARATOR "24" HASH_STRING_SEPARATOR "1" && + key_list_to_hash[3].first == key_list_to_hash[0].first && + key_list_to_hash[4].first == key_list_to_hash[1].first && + key_list_to_hash[5].first == key_list_to_hash[2].first) || + (key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "12" + HASH_STRING_SEPARATOR "1" && + key_list_to_hash[1].first == "b" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1" && + key_list_to_hash[2].first == "c" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + HASH_STRING_SEPARATOR "24" HASH_STRING_SEPARATOR "1" && + key_list_to_hash[3].first == key_list_to_hash[0].first && + key_list_to_hash[4].first == key_list_to_hash[1].first && + key_list_to_hash[5].first == key_list_to_hash[2].first));); + DBUG_EXECUTE_IF("PKE_assert_multi_foreign_key_generated_insert", - DBUG_ASSERT(key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" + DBUG_ASSERT(key_list_to_hash.size() == 8); + DBUG_ASSERT(key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "15" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1] == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" + key_list_to_hash[1].first == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[2] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[2].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[3] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t2" + key_list_to_hash[3].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t2" HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "1");); + DBUG_EXECUTE_IF("PKE_assert_multi_foreign_key_generated_insert_collation", + DBUG_ASSERT(key_list_to_hash.size() == 8); + DBUG_ASSERT(key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" + HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "15" + HASH_STRING_SEPARATOR "1" && + key_list_to_hash[1].first == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" + HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "1" && + key_list_to_hash[2].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "1" && + key_list_to_hash[3].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t2" + HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "1" && + key_list_to_hash[4].first == key_list_to_hash[0].first && + key_list_to_hash[5].first == key_list_to_hash[1].first && + key_list_to_hash[6].first == key_list_to_hash[2].first && + key_list_to_hash[7].first == key_list_to_hash[3].first);); + DBUG_EXECUTE_IF("PKE_assert_multi_foreign_key_generated_update", - DBUG_ASSERT((key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" + DBUG_ASSERT(key_list_to_hash.size() == 8); + DBUG_ASSERT((key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "15" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1] == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" + key_list_to_hash[1].first == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[2] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[2].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[3] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t2" + key_list_to_hash[3].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t2" HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "1") || - (key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" + (key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "15" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1] == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" + key_list_to_hash[1].first == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[2] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[2].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[3] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t2" + key_list_to_hash[3].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t2" HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "1"));); + + DBUG_EXECUTE_IF("PKE_assert_multi_foreign_key_generated_update_collation", + DBUG_ASSERT(key_list_to_hash.size() == 8); + DBUG_ASSERT((key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" + HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "15" + HASH_STRING_SEPARATOR "1" && + key_list_to_hash[1].first == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" + HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "1" && + key_list_to_hash[2].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "1" && + key_list_to_hash[3].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t2" + HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "1" && + key_list_to_hash[4].first == key_list_to_hash[0].first && + key_list_to_hash[5].first == key_list_to_hash[1].first && + key_list_to_hash[6].first == key_list_to_hash[2].first && + key_list_to_hash[7].first == key_list_to_hash[3].first) || + (key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" + HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "15" + HASH_STRING_SEPARATOR "1" && + key_list_to_hash[1].first == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" + HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "1" && + key_list_to_hash[2].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1" && + key_list_to_hash[3].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t2" + HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "1" && + key_list_to_hash[4].first == key_list_to_hash[0].first && + key_list_to_hash[5].first == key_list_to_hash[1].first && + key_list_to_hash[6].first == key_list_to_hash[2].first && + key_list_to_hash[7].first == key_list_to_hash[3].first));); } @@ -267,23 +428,28 @@ void debug_check_for_write_sets(std::vector &key_list_to_hash) Function to generate the hash of the string passed to this function. @param[in] pke - the string to be hashed. + @param[in] collation_conversion_algorithm - algorithm used for the conversion + 0 - converted using without + collation support algorithm + 1 - converted using with collation + support conversion algorithm + @param[in] thd - THD object pointing to current thread. */ -void generate_hash_pke(std::string pke, THD* thd) +static void generate_hash_pke(const std::string &pke, uint collation_conversion_algorithm, THD* thd) { DBUG_ENTER("generate_hash_pke"); DBUG_ASSERT(thd->variables.transaction_write_set_extraction != HASH_ALGORITHM_OFF); - const char* string_pke=NULL; - string_pke= (char *)pke.c_str(); - DBUG_PRINT("info", ("The hashed value is %s for %u", string_pke, - thd->thread_id())); + + size_t length= (COLLATION_CONVERSION_ALGORITHM == collation_conversion_algorithm) ? + pke.size() : strlen(pke.c_str()); uint64 hash= calc_hash(thd->variables.transaction_write_set_extraction, - string_pke); - Rpl_transaction_write_set_ctx *transaction_write_set_ctc= - thd->get_transaction()->get_transaction_write_set_ctx(); - transaction_write_set_ctc->add_write_set(hash); + pke.c_str(), length); + thd->get_transaction()->get_transaction_write_set_ctx()->add_write_set(hash); + + DBUG_PRINT("info", ("pke: %s; hash: %llu", pke.c_str(), hash)); DBUG_VOID_RETURN; } @@ -368,100 +534,181 @@ void add_pke(TABLE *table, THD *thd) Finally these value are hashed using the murmur hash function to prevent sending more for certification algorithm. */ - std::vector key_list_to_hash; + std::vector< std::pair > key_list_to_hash; bitmap_set_all(table->read_set); + if(table->key_info && (table->s->primary_key < MAX_KEY)) { - for (uint key_number=0; key_number < table->s->keys; key_number++) + /* + To handle both members having hash values with and without collation + in the same group, we generate and send both versions (with and without + collation) of the hash in the newer versions. This would mean that a row + change will generate 2 instead of 1 writeset, and 4 instead of 2, when PK + are involved. This will mean that a transaction will be certified against + two writesets instead of just one. + + To generate both versions (with and without collation) of the hash, it + first converts using without collation support algorithm (old algorithm), + and then using with collation support conversion algorithm, and adds + generated value to key_list_to_hash vector, for hash generation later. + */ + for (uint collation_conversion_algorithm= 0; + collation_conversion_algorithm <= COLLATION_CONVERSION_ALGORITHM; + collation_conversion_algorithm++) { - // Skip non unique. - if (!((table->key_info[key_number].flags & (HA_NOSAME )) == HA_NOSAME)) - continue; - - std::string unhashed_string; - unhashed_string.append(table->key_info[key_number].name); - unhashed_string.append(HASH_STRING_SEPARATOR); - unhashed_string.append(pke); - uint i= 0; - for (/*empty*/; i < table->key_info[key_number].user_defined_key_parts; i++) + for (uint key_number=0; key_number < table->s->keys; key_number++) { - // read the primary key field values in str. - int index= table->key_info[key_number].key_part[i].fieldnr; - table->field[index-1]->val_str(&row_data); - - /* Ignore if the value is NULL. */ - if (table->field[index-1]->is_null()) - break; - - char* pk_value= (char*) my_malloc( - key_memory_write_set_extraction, - row_data.length()+1, MYF(0)); - // buffer to be used for my_safe_itoa. - char *buf= (char*) my_malloc( - key_memory_write_set_extraction, - row_data.length(), MYF(0)); + // Skip non unique. + if (!((table->key_info[key_number].flags & (HA_NOSAME )) == HA_NOSAME)) + continue; - strmake(pk_value, row_data.c_ptr_safe(), row_data.length()); - const char *lenStr = my_safe_itoa(10, (row_data.length()), - &buf[row_data.length()-1]); - unhashed_string.append(pk_value); + std::string unhashed_string; + unhashed_string.append(table->key_info[key_number].name); unhashed_string.append(HASH_STRING_SEPARATOR); - unhashed_string.append(lenStr); - my_free(buf); - my_free(pk_value); - } - /* - If any part of the key is NULL, ignore adding it to hash keys. - NULL cannot conflict with any value. - Eg: create table t1(i int primary key not null, j int, k int, - unique key (j, k)); - insert into t1 values (1, 2, NULL); - insert into t1 values (2, 2, NULL); => this is allowed. - */ - if (i == table->key_info[key_number].user_defined_key_parts) - { - key_list_to_hash.push_back(unhashed_string); - } - else - { - /* This is impossible to happen in case of primary keys */ - DBUG_ASSERT(key_number !=0); + unhashed_string.append(pke); + uint i= 0; + for (/*empty*/; i < table->key_info[key_number].user_defined_key_parts; i++) + { + // read the primary key field values in str. + int index= table->key_info[key_number].key_part[i].fieldnr; + size_t length= 0; + + /* Ignore if the value is NULL. */ + if (table->field[index-1]->is_null()) + break; + + // convert using collation support conversion algorithm + if (COLLATION_CONVERSION_ALGORITHM == collation_conversion_algorithm) + { + const CHARSET_INFO* cs= table->field[index-1]->charset(); + length= cs->coll->strnxfrmlen(cs, + table->field[index-1]->pack_length()); + } + // convert using without collation support algorithm + else + { + table->field[index-1]->val_str(&row_data); + length= row_data.length(); + } + + char* pk_value= (char*) my_malloc(key_memory_write_set_extraction, + length+1, MYF(MY_ZEROFILL)); + + // buffer to be used for my_safe_itoa. + char *buf= (char*) my_malloc(key_memory_write_set_extraction, + length, MYF(MY_ZEROFILL)); + + const char *lenStr = my_safe_itoa(10, length, &buf[length-1]); + + // convert using collation support conversion algorithm + if (COLLATION_CONVERSION_ALGORITHM == collation_conversion_algorithm) + { + /* + convert to normalized string and store so that it can be + sorted using binary comparison functions like memcmp. + */ + uint32 pack_length= table->field[index-1]->pack_length(); + set_if_smaller(length, pack_length); + table->field[index-1]->make_sort_key((uchar*)pk_value, length); + pk_value[length]= 0; + unhashed_string.append(pk_value, length); + } + // convert using without collation support algorithm + else + { + strmake(pk_value, row_data.c_ptr_safe(), length); + unhashed_string.append(pk_value); + } + + unhashed_string.append(HASH_STRING_SEPARATOR); + unhashed_string.append(lenStr); + my_free(buf); + my_free(pk_value); + } + /* + If any part of the key is NULL, ignore adding it to hash keys. + NULL cannot conflict with any value. + Eg: create table t1(i int primary key not null, j int, k int, + unique key (j, k)); + insert into t1 values (1, 2, NULL); + insert into t1 values (2, 2, NULL); => this is allowed. + */ + if (i == table->key_info[key_number].user_defined_key_parts) + { + key_list_to_hash.push_back(make_pair(unhashed_string, + collation_conversion_algorithm)); + } + else + { + /* This is impossible to happen in case of primary keys */ + DBUG_ASSERT(key_number !=0); + } + unhashed_string.clear(); } - unhashed_string.clear(); - } - // This part takes care of the previously fetched foreign key values of - // the referenced table adds it to the write set. - for(uint i=0; i < table->s->fields; i++) - { - std::string referenced_FQTN= - foreign_key_map[table->s->field[i]->field_name]; - if (referenced_FQTN.size() > 0) + // This part takes care of the previously fetched foreign key values of + // the referenced table adds it to the write set. + for(uint i=0; i < table->s->fields; i++) { - table->field[i]->val_str(&row_data); - - /* Ignore if the value is NULL. */ - if (table->field[i]->is_null()) - continue; - - char* pk_value= (char*) my_malloc( - key_memory_write_set_extraction, - row_data.length()+1, MYF(0)); - // buffer to be used for my_safe_itoa. - char *buf= (char*) my_malloc( - key_memory_write_set_extraction, - row_data.length(), MYF(0)); - - strmake(pk_value, row_data.c_ptr_safe(), row_data.length()); - const char *lenStr = my_safe_itoa(10, (row_data.length()), - &buf[row_data.length()-1]); - referenced_FQTN.append(pk_value); - referenced_FQTN.append(HASH_STRING_SEPARATOR); - referenced_FQTN.append(lenStr); - - my_free(buf); - my_free(pk_value); - key_list_to_hash.push_back(referenced_FQTN); + std::string referenced_FQTN= + foreign_key_map[table->s->field[i]->field_name]; + if (referenced_FQTN.size() > 0) + { + size_t length= 0; + + /* Ignore if the value is NULL. */ + if (table->field[i]->is_null()) + break; + + // convert using collation support conversion algorithm + if (COLLATION_CONVERSION_ALGORITHM == collation_conversion_algorithm) + { + const CHARSET_INFO* cs= table->field[i]->charset(); + length= cs->coll->strnxfrmlen(cs, + table->field[i]->pack_length()); + } + // convert using without collation support algorithm + else + { + table->field[i]->val_str(&row_data); + length= row_data.length(); + } + + char* pk_value= (char*) my_malloc(key_memory_write_set_extraction, + length+1, MYF(MY_ZEROFILL)); + + // buffer to be used for my_safe_itoa. + char *buf= (char*) my_malloc(key_memory_write_set_extraction, + length, MYF(MY_ZEROFILL)); + + const char *lenStr = my_safe_itoa(10, length, &buf[length-1]); + + // convert using collation support conversion algorithm + if (COLLATION_CONVERSION_ALGORITHM == collation_conversion_algorithm) + { + /* + convert to normalized string and store so that it can be + sorted using binary comparison functions like memcmp. + */ + table->field[i]->make_sort_key((uchar*)pk_value, length); + pk_value[length]= 0; + referenced_FQTN.append(pk_value, length); + } + // convert using without collation support algorithm + else + { + strmake(pk_value, row_data.c_ptr_safe(), length); + referenced_FQTN.append(pk_value); + } + + referenced_FQTN.append(HASH_STRING_SEPARATOR); + referenced_FQTN.append(lenStr); + + my_free(buf); + my_free(pk_value); + key_list_to_hash.push_back(make_pair(referenced_FQTN, + collation_conversion_algorithm)); + } } } @@ -469,10 +716,11 @@ void add_pke(TABLE *table, THD *thd) while(key_list_to_hash.size()) { - std::string prepared_string= key_list_to_hash.back(); + std::pair prepared_string_pair= key_list_to_hash.back(); key_list_to_hash.pop_back(); - generate_hash_pke(prepared_string, thd); + generate_hash_pke(prepared_string_pair.first, prepared_string_pair.second, thd); } + } DBUG_VOID_RETURN; } From 0dab6910f1dde1996c39d8512388e609ec3cd4d0 Mon Sep 17 00:00:00 2001 From: Ajo Robert Date: Thu, 23 Nov 2017 08:26:21 +0530 Subject: [PATCH 0202/1221] Bug #24423143 - WRONG RESULTS FOR AGGREGATE QUERY Doxygen fix. Change-Id: I7402fb1a1088e6cb8f4030b7814718f2d5f415da --- sql/opt_range.cc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/sql/opt_range.cc b/sql/opt_range.cc index a57732d57b3a..628817ec0163 100644 --- a/sql/opt_range.cc +++ b/sql/opt_range.cc @@ -12801,8 +12801,7 @@ check_group_min_max_predicates(Item *cond, Item_field *min_max_arg_item, Utility function used by min_max_inspect_cond_for_fields() for comparing FILED item with given MIN/MAX item and setting appropriate out paramater. -@param cond Tree (or subtree) describing all or part of - the WHERE clause being analyzed. +@param item_field Item field for comparison. @param min_max_arg_item The field referenced by the MIN/MAX function(s). @param [out] min_max_arg_present This out parameter is set to true if From 1a15ecb89794215515350e37ac56d6683d3851ee Mon Sep 17 00:00:00 2001 From: Shivashankar Nagaraj Date: Thu, 23 Nov 2017 14:20:53 +0530 Subject: [PATCH 0203/1221] Bug#14286343: MAIN.STATUS TEST FAILS SPORADICALLY WITH RESULT CONTENT MISMATCH ON PB2 Issue: ------ The test case "Ensure that SHOW STATUS only changes global status variables" expectation itself is wrong. Executing any query, including SHOW STATUS, WILL change the statistics of the server, and this WILL change the result of some status variables, global or per session. Expecting this behavior is un realistic, and trying to observe it in a test case is bound to fail. Fix: ---- Remove the test case "Ensure that SHOW STATUS only changes global status variables" Reviewed-by: Marc Alff Reviewed-by: amit Bhattacharya RB: 17930 --- mysql-test/r/status.result | 24 ------------------------ mysql-test/t/status.test | 23 ----------------------- 2 files changed, 47 deletions(-) diff --git a/mysql-test/r/status.result b/mysql-test/r/status.result index 7c416260150d..5e66b359b665 100644 --- a/mysql-test/r/status.result +++ b/mysql-test/r/status.result @@ -164,30 +164,6 @@ SHOW SESSION STATUS LIKE 'Last_query_cost'; Variable_name Value Last_query_cost 5.205912 DROP TABLE t1; -show status like 'com_show_status'; -Variable_name Value -Com_show_status 3 -show status like 'hand%write%'; -Variable_name Value -Handler_write 0 -show status like '%tmp%'; -Variable_name Value -Created_tmp_disk_tables 0 -Created_tmp_files 0 -Created_tmp_tables 0 -show status like 'hand%write%'; -Variable_name Value -Handler_write 0 -show status like '%tmp%'; -Variable_name Value -Created_tmp_disk_tables 0 -Created_tmp_files 0 -Created_tmp_tables 0 -show status like 'com_show_status'; -Variable_name Value -Com_show_status 8 -rnd_diff tmp_table_diff -20 8 flush status; show status like 'Com%function'; Variable_name Value diff --git a/mysql-test/t/status.test b/mysql-test/t/status.test index aad64532dc5e..1ca584d79375 100644 --- a/mysql-test/t/status.test +++ b/mysql-test/t/status.test @@ -260,29 +260,6 @@ SHOW SESSION STATUS LIKE 'Last_query_cost'; DROP TABLE t1; -# End of 5.0 tests - -# -# Ensure that SHOW STATUS only changes global status variables -# - -connect (con1,localhost,root,,); -let $rnd_next = `show global status like 'handler_read_rnd_next'`; -let $tmp_table = `show global status like 'Created_tmp_tables'`; -show status like 'com_show_status'; -show status like 'hand%write%'; -show status like '%tmp%'; -show status like 'hand%write%'; -show status like '%tmp%'; -show status like 'com_show_status'; -let $rnd_next2 = `show global status like 'handler_read_rnd_next'`; -let $tmp_table2 = `show global status like 'Created_tmp_tables'`; ---disable_query_log -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 -disconnect con1; -connection default; - # # Bug#30252 Com_create_function is not incremented. # From 1fde42d1016ee5703b8111df25b0eb24513cf3bd Mon Sep 17 00:00:00 2001 From: Neha Kumari Date: Fri, 24 Nov 2017 07:58:42 +0530 Subject: [PATCH 0204/1221] Bug#27067082:RPL.RPL_MTS_LOGICAL_CLOCK_APPLIER_ERROR_CONCURRENT_STOP_SLAVE - PB2 FAILURE Problem: A call to an include that issues "STOP SLAVE" may happen when the slave thread are already stopped by errors in slow machines (or testing with valgrind). In such cases, the test case will produce an extra content not recorded into its result: +Warnings: +Note 3084 Replication thread(s) for channel '' are already stopped. Fix: The test case is not 100% deterministic, so to avoid the above warning we can wrap the include that issues "STOP SLAVE" with disable_warnings/enable_warnings. --- ...l_mts_logical_clock_applier_error_concurrent_stop_slave.test | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mysql-test/suite/rpl/t/rpl_mts_logical_clock_applier_error_concurrent_stop_slave.test b/mysql-test/suite/rpl/t/rpl_mts_logical_clock_applier_error_concurrent_stop_slave.test index 1ab0a3c32ba6..45ea922f4bf8 100644 --- a/mysql-test/suite/rpl/t/rpl_mts_logical_clock_applier_error_concurrent_stop_slave.test +++ b/mysql-test/suite/rpl/t/rpl_mts_logical_clock_applier_error_concurrent_stop_slave.test @@ -69,7 +69,9 @@ DELETE FROM parent WHERE a=3; # # Stop slave and cleanup the blocking # +--disable_warnings --source include/stop_slave_sql.inc +--enable_warnings --source include/rpl_connection_slave1.inc ROLLBACK; From 46860239d9c4fbcb92c3a66f4d91b668d275dbb1 Mon Sep 17 00:00:00 2001 From: Nisha Gopalakrishnan Date: Fri, 17 Nov 2017 10:35:15 +0530 Subject: [PATCH 0205/1221] BUG#25846957: MYSQL STARTUP BLOCKED FOR 20 MINUTES ON PARTITION-ENGINE-CHECK. Analysis: ========= From MySQL-5.7.17, during the server start up, a check is performed to list the tables which uses non native paritioning. This helps users to prepare for upgrade to 8.0 where the support for non native partitioning is removed. For large databases with many such tables, this check consumed a lot of time since a SELECT on I_S is performed to fetch the information. By default, the variable 'disable-partition-engine-check' is disabled, which triggers the check for tables using non-native partitioning at startup. Fix: ==== The variable 'disable-partition-engine-check' is enabled by default. Hence the check for non native partitioned tables is skipped during the start up unless it is explicitly disabled. --- mysql-test/r/mysqld--help-notwin.result | 3 +- mysql-test/r/mysqld--help-win.result | 3 +- mysql-test/r/partition_deprecation.result | 10 ++- .../r/test_session_info.result | 76 +++++++++---------- mysql-test/t/partition_deprecation.test | 10 ++- sql/mysqld.cc | 9 +-- 6 files changed, 58 insertions(+), 53 deletions(-) diff --git a/mysql-test/r/mysqld--help-notwin.result b/mysql-test/r/mysqld--help-notwin.result index 8ac71bbf1d4e..07aafeb10053 100644 --- a/mysql-test/r/mysqld--help-notwin.result +++ b/mysql-test/r/mysqld--help-notwin.result @@ -218,6 +218,7 @@ The following options may be given as the first argument: Skip the check for non-natively partitioned tables during bootstrap. This option is deprecated along with the partition engine. + (Defaults to on; use --skip-disable-partition-engine-check to disable.) --disabled-storage-engines=name Limit CREATE TABLE for the storage engines listed --disconnect-on-expired-password @@ -1294,7 +1295,7 @@ delay-key-write ON delayed-insert-limit 100 delayed-insert-timeout 300 delayed-queue-size 1000 -disable-partition-engine-check FALSE +disable-partition-engine-check TRUE disabled-storage-engines disconnect-on-expired-password TRUE disconnect-slave-event-count 0 diff --git a/mysql-test/r/mysqld--help-win.result b/mysql-test/r/mysqld--help-win.result index d959ea52cfa2..732af1a42094 100644 --- a/mysql-test/r/mysqld--help-win.result +++ b/mysql-test/r/mysqld--help-win.result @@ -217,6 +217,7 @@ The following options may be given as the first argument: Skip the check for non-natively partitioned tables during bootstrap. This option is deprecated along with the partition engine. + (Defaults to on; use --skip-disable-partition-engine-check to disable.) --disabled-storage-engines=name Limit CREATE TABLE for the storage engines listed --disconnect-on-expired-password @@ -1292,7 +1293,7 @@ delay-key-write ON delayed-insert-limit 100 delayed-insert-timeout 300 delayed-queue-size 1000 -disable-partition-engine-check FALSE +disable-partition-engine-check TRUE disabled-storage-engines disconnect-on-expired-password TRUE disconnect-slave-event-count 0 diff --git a/mysql-test/r/partition_deprecation.result b/mysql-test/r/partition_deprecation.result index 3e367d3e6031..ff02ce920084 100644 --- a/mysql-test/r/partition_deprecation.result +++ b/mysql-test/r/partition_deprecation.result @@ -92,11 +92,13 @@ TABLE_SCHEMA TABLE_NAME test t1 Warnings: Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. -# Verify that the startup option --disable-partition-engine-check skips the I_S query. -# restart: --disable-partition-engine-check --no-console --log-error=LOG_FILE -# No deprecation warning found. -# Verify that the I_S query on bootstrap prints warnings in the error log. +# Verify that the startup by default skips the I_S query, since the +# option --disable-partition-engine-check defaults to TRUE. # restart: --no-console --log-error=LOG_FILE +# No deprecation warning found. +# Verify that the I_S query on bootstrap prints warnings in the error log +# when '--disable-partition-engine-check=0'. +# restart: --disable-partition-engine-check=0 --no-console --log-error=LOG_FILE # Deprecation warning found. # Restart the server without additional options. # restart: diff --git a/mysql-test/suite/test_service_sql_api/r/test_session_info.result b/mysql-test/suite/test_service_sql_api/r/test_session_info.result index c7fc6162e1f0..71d38aeac819 100644 --- a/mysql-test/suite/test_service_sql_api/r/test_session_info.result +++ b/mysql-test/suite/test_service_sql_api/r/test_session_info.result @@ -30,9 +30,9 @@ Session 2 : srv_session_info_get_thd and srv_session_info_get_session_id ============================================================================================ Thread handler id IS equal to session id returned by srv_session_info_get_session_id(Session_2) -SELECT name,type,processlist_id,processlist_user,processlist_host,processlist_db,processlist_command,processlist_state,processlist_info,role,instrumented,history,connection_type FROM performance_schema.threads WHERE processlist_id = 4 +SELECT name,type,processlist_id,processlist_user,processlist_host,processlist_db,processlist_command,processlist_state,processlist_info,role,instrumented,history,connection_type FROM performance_schema.threads WHERE processlist_id = 3 name type processlist_id processlist_user processlist_host processlist_db processlist_command processlist_state processlist_info role instrumented history connection_type -thread/sql/one_connection FOREGROUND 4 root localhost test Query Sending data SELECT name,type,processlist_id,processlist_user,processlist_host,processlist_db,processlist_command,processlist_state,processlist_info,role,instrumented,history,connection_type FROM performance_schema.threads WHERE processlist_id = 4 [NULL] YES YES Plugin +thread/sql/one_connection FOREGROUND 3 root localhost test Query Sending data SELECT name,type,processlist_id,processlist_user,processlist_host,processlist_db,processlist_command,processlist_state,processlist_info,role,instrumented,history,connection_type FROM performance_schema.threads WHERE processlist_id = 3 [NULL] YES YES Plugin num_cols : 13 nb rows : 1 @@ -40,9 +40,9 @@ affected rows : 0 server status : 34 warn count : 0 -SELECT name,type,processlist_id,processlist_user,processlist_host,processlist_db,processlist_command,processlist_state,processlist_info,role,instrumented,history,connection_type FROM performance_schema.threads WHERE processlist_id = 5 +SELECT name,type,processlist_id,processlist_user,processlist_host,processlist_db,processlist_command,processlist_state,processlist_info,role,instrumented,history,connection_type FROM performance_schema.threads WHERE processlist_id = 4 name type processlist_id processlist_user processlist_host processlist_db processlist_command processlist_state processlist_info role instrumented history connection_type -thread/sql/one_connection FOREGROUND 5 root localhost test Query Sending data SELECT name,type,processlist_id,processlist_user,processlist_host,processlist_db,processlist_command,processlist_state,processlist_info,role,instrumented,history,connection_type FROM performance_schema.threads WHERE processlist_id = 5 [NULL] YES YES Plugin +thread/sql/one_connection FOREGROUND 4 root localhost test Query Sending data SELECT name,type,processlist_id,processlist_user,processlist_host,processlist_db,processlist_command,processlist_state,processlist_info,role,instrumented,history,connection_type FROM performance_schema.threads WHERE processlist_id = 4 [NULL] YES YES Plugin num_cols : 13 nb rows : 1 @@ -201,7 +201,7 @@ warn count : 0 Session 1 : srv_session_info_set_connection_type ============================================================================================ Session 1's view -SELECT CONNECTION_TYPE, CONNECTION_TYPE IS NULL FROM performance_schema.threads WHERE PROCESSLIST_ID = 4 /*session_1_id*/ +SELECT CONNECTION_TYPE, CONNECTION_TYPE IS NULL FROM performance_schema.threads WHERE PROCESSLIST_ID = 3 /*session_1_id*/ CONNECTION_TYPE CONNECTION_TYPE IS NULL Plugin 0 @@ -213,7 +213,7 @@ warn count : 0 Setting NO_VIO_TYPE on session_1 Session 1's view -SELECT CONNECTION_TYPE FROM performance_schema.threads WHERE PROCESSLIST_ID = 4 /*session_1_id*/ +SELECT CONNECTION_TYPE FROM performance_schema.threads WHERE PROCESSLIST_ID = 3 /*session_1_id*/ CONNECTION_TYPE Plugin @@ -225,7 +225,7 @@ warn count : 0 Setting VIO_TYPE_TCPIP on session_1 Session 1's view -SELECT CONNECTION_TYPE FROM performance_schema.threads WHERE PROCESSLIST_ID = 4 /*session_1_id*/ +SELECT CONNECTION_TYPE FROM performance_schema.threads WHERE PROCESSLIST_ID = 3 /*session_1_id*/ CONNECTION_TYPE TCP/IP @@ -237,7 +237,7 @@ warn count : 0 Setting VIO_TYPE_NAMEDPIPE on session_1 Session 1's view -SELECT CONNECTION_TYPE FROM performance_schema.threads WHERE PROCESSLIST_ID = 4 /*session_1_id*/ +SELECT CONNECTION_TYPE FROM performance_schema.threads WHERE PROCESSLIST_ID = 3 /*session_1_id*/ CONNECTION_TYPE Named Pipe @@ -251,7 +251,7 @@ warn count : 0 Session 2 : srv_session_info_set_connection_type ============================================================================================ Session 2's view -SELECT CONNECTION_TYPE FROM performance_schema.threads WHERE PROCESSLIST_ID = 5 /*session_2_id*/ +SELECT CONNECTION_TYPE FROM performance_schema.threads WHERE PROCESSLIST_ID = 4 /*session_2_id*/ CONNECTION_TYPE Plugin @@ -264,7 +264,7 @@ warn count : 0 Setting VIO_TYPE_SSL on session_2 Setting VIO_TYPE_TCPIP on session_1 Session 2's view -SELECT CONNECTION_TYPE FROM performance_schema.threads WHERE PROCESSLIST_ID = 5 /*session_2_id*/ +SELECT CONNECTION_TYPE FROM performance_schema.threads WHERE PROCESSLIST_ID = 4 /*session_2_id*/ CONNECTION_TYPE SSL/TLS @@ -275,7 +275,7 @@ server status : 34 warn count : 0 Session 2's view -SELECT CONNECTION_TYPE FROM performance_schema.threads WHERE PROCESSLIST_ID = 5 /*session_2_id*/ +SELECT CONNECTION_TYPE FROM performance_schema.threads WHERE PROCESSLIST_ID = 4 /*session_2_id*/ CONNECTION_TYPE Shared Memory @@ -290,8 +290,8 @@ BEFORE kill of Session 1 ============================================================================================ SELECT ID, USER, HOST, DB, COMMAND, INFO FROM INFORMATION_SCHEMA.PROCESSLIST WHERE info LIKE 'PLUGIN%' ORDER BY id ID USER HOST DB COMMAND INFO -4 root localhost:100 test Query PLUGIN: SELECT ID, USER, HOST, DB, COMMAND, INFO FROM INFORMATION_SCHEMA.PROCESSLIST WHERE info LIKE 'PLUGIN%' ORDER BY id -5 root localhost:200 test Sleep PLUGIN +3 root localhost:100 test Query PLUGIN: SELECT ID, USER, HOST, DB, COMMAND, INFO FROM INFORMATION_SCHEMA.PROCESSLIST WHERE info LIKE 'PLUGIN%' ORDER BY id +4 root localhost:200 test Sleep PLUGIN num_cols : 6 nb rows : 2 @@ -304,7 +304,7 @@ srv_session_info_killed(Session_1) : 0 srv_session_info_killed(Session_2) : 0 ============================================================================================ Killing Session 1 -KILL CONNECTION 4 /*session_1_id*/ +KILL CONNECTION 3 /*session_1_id*/ affected rows : 0 server status : 2 warn count : 0 @@ -336,15 +336,15 @@ SELECT ID, USER, HOST, DB, COMMAND, INFO FROM INFORMATION_SCHEMA.PROCESSLIST WHE ============================================================================================ Perform KILL QUERY and suicide (KILL CONNECTION) on Session 2 ============================================================================================ -KILL QUERY 5 /*session_2_id*/ +KILL QUERY 4 /*session_2_id*/ srv_session_info_killed(Session 2) : 0 -KILL CONNECTION 5 /*session_2_id*/ +KILL CONNECTION 4 /*session_2_id*/ srv_session_info_killed(Session 2) : 1 ============================================================================================ Get/Set session info with killed session(Session 2) ============================================================================================ srv_session_info_get_thd : 1 -srv_session_info_get_session_id : 5 +srv_session_info_get_session_id : 4 srv_session_info_set_client_port : 0 srv_session_info_get_client_port : 11111 srv_session_info_get_current_db : test @@ -355,8 +355,8 @@ Session 2 got killed but not closed, thus it will appear in the processlist as K ============================================================================================ /*Session 3*/SELECT ID, USER, HOST, DB, COMMAND, INFO FROM INFORMATION_SCHEMA.PROCESSLIST WHERE info LIKE 'PLUGIN%' ORDER BY id ID USER HOST DB COMMAND INFO -5 root localhost:11111 test Killed PLUGIN -6 root localhost [NULL] Query PLUGIN: /*Session 3*/SELECT ID, USER, HOST, DB, COMMAND, INFO FROM INFORMATION_SCHEMA.PROCESSLIST WHERE info LIKE 'PLUGIN%' ORDER BY id +4 root localhost:11111 test Killed PLUGIN +5 root localhost [NULL] Query PLUGIN: /*Session 3*/SELECT ID, USER, HOST, DB, COMMAND, INFO FROM INFORMATION_SCHEMA.PROCESSLIST WHERE info LIKE 'PLUGIN%' ORDER BY id num_cols : 6 nb rows : 2 @@ -381,9 +381,9 @@ Session 2 : srv_session_info_get_thd and srv_session_info_get_session_id ============================================================================================ Thread handler id IS equal to session id returned by srv_session_info_get_session_id(Session_2) -SELECT name,type,processlist_id,processlist_user,processlist_host,processlist_db,processlist_command,processlist_state,processlist_info,role,instrumented,history,connection_type FROM performance_schema.threads WHERE processlist_id = 7 +SELECT name,type,processlist_id,processlist_user,processlist_host,processlist_db,processlist_command,processlist_state,processlist_info,role,instrumented,history,connection_type FROM performance_schema.threads WHERE processlist_id = 6 name type processlist_id processlist_user processlist_host processlist_db processlist_command processlist_state processlist_info role instrumented history connection_type -thread/test_service_sql/session_info FOREGROUND 7 root localhost [NULL] Query Sending data SELECT name,type,processlist_id,processlist_user,processlist_host,processlist_db,processlist_command,processlist_state,processlist_info,role,instrumented,history,connection_type FROM performance_schema.threads WHERE processlist_id = 7 [NULL] YES YES Plugin +thread/test_service_sql/session_info FOREGROUND 6 root localhost [NULL] Query Sending data SELECT name,type,processlist_id,processlist_user,processlist_host,processlist_db,processlist_command,processlist_state,processlist_info,role,instrumented,history,connection_type FROM performance_schema.threads WHERE processlist_id = 6 [NULL] YES YES Plugin num_cols : 13 nb rows : 1 @@ -391,9 +391,9 @@ affected rows : 0 server status : 34 warn count : 0 -SELECT name,type,processlist_id,processlist_user,processlist_host,processlist_db,processlist_command,processlist_state,processlist_info,role,instrumented,history,connection_type FROM performance_schema.threads WHERE processlist_id = 8 +SELECT name,type,processlist_id,processlist_user,processlist_host,processlist_db,processlist_command,processlist_state,processlist_info,role,instrumented,history,connection_type FROM performance_schema.threads WHERE processlist_id = 7 name type processlist_id processlist_user processlist_host processlist_db processlist_command processlist_state processlist_info role instrumented history connection_type -thread/test_service_sql/session_info FOREGROUND 8 root localhost [NULL] Query Sending data SELECT name,type,processlist_id,processlist_user,processlist_host,processlist_db,processlist_command,processlist_state,processlist_info,role,instrumented,history,connection_type FROM performance_schema.threads WHERE processlist_id = 8 [NULL] YES YES Plugin +thread/test_service_sql/session_info FOREGROUND 7 root localhost [NULL] Query Sending data SELECT name,type,processlist_id,processlist_user,processlist_host,processlist_db,processlist_command,processlist_state,processlist_info,role,instrumented,history,connection_type FROM performance_schema.threads WHERE processlist_id = 7 [NULL] YES YES Plugin num_cols : 13 nb rows : 1 @@ -552,7 +552,7 @@ warn count : 0 Session 1 : srv_session_info_set_connection_type ============================================================================================ Session 1's view -SELECT CONNECTION_TYPE, CONNECTION_TYPE IS NULL FROM performance_schema.threads WHERE PROCESSLIST_ID = 7 /*session_1_id*/ +SELECT CONNECTION_TYPE, CONNECTION_TYPE IS NULL FROM performance_schema.threads WHERE PROCESSLIST_ID = 6 /*session_1_id*/ CONNECTION_TYPE CONNECTION_TYPE IS NULL Plugin 0 @@ -564,7 +564,7 @@ warn count : 0 Setting NO_VIO_TYPE on session_1 Session 1's view -SELECT CONNECTION_TYPE FROM performance_schema.threads WHERE PROCESSLIST_ID = 7 /*session_1_id*/ +SELECT CONNECTION_TYPE FROM performance_schema.threads WHERE PROCESSLIST_ID = 6 /*session_1_id*/ CONNECTION_TYPE Plugin @@ -576,7 +576,7 @@ warn count : 0 Setting VIO_TYPE_TCPIP on session_1 Session 1's view -SELECT CONNECTION_TYPE FROM performance_schema.threads WHERE PROCESSLIST_ID = 7 /*session_1_id*/ +SELECT CONNECTION_TYPE FROM performance_schema.threads WHERE PROCESSLIST_ID = 6 /*session_1_id*/ CONNECTION_TYPE TCP/IP @@ -588,7 +588,7 @@ warn count : 0 Setting VIO_TYPE_NAMEDPIPE on session_1 Session 1's view -SELECT CONNECTION_TYPE FROM performance_schema.threads WHERE PROCESSLIST_ID = 7 /*session_1_id*/ +SELECT CONNECTION_TYPE FROM performance_schema.threads WHERE PROCESSLIST_ID = 6 /*session_1_id*/ CONNECTION_TYPE Named Pipe @@ -602,7 +602,7 @@ warn count : 0 Session 2 : srv_session_info_set_connection_type ============================================================================================ Session 2's view -SELECT CONNECTION_TYPE FROM performance_schema.threads WHERE PROCESSLIST_ID = 8 /*session_2_id*/ +SELECT CONNECTION_TYPE FROM performance_schema.threads WHERE PROCESSLIST_ID = 7 /*session_2_id*/ CONNECTION_TYPE Plugin @@ -615,7 +615,7 @@ warn count : 0 Setting VIO_TYPE_SSL on session_2 Setting VIO_TYPE_TCPIP on session_1 Session 2's view -SELECT CONNECTION_TYPE FROM performance_schema.threads WHERE PROCESSLIST_ID = 8 /*session_2_id*/ +SELECT CONNECTION_TYPE FROM performance_schema.threads WHERE PROCESSLIST_ID = 7 /*session_2_id*/ CONNECTION_TYPE SSL/TLS @@ -626,7 +626,7 @@ server status : 34 warn count : 0 Session 2's view -SELECT CONNECTION_TYPE FROM performance_schema.threads WHERE PROCESSLIST_ID = 8 /*session_2_id*/ +SELECT CONNECTION_TYPE FROM performance_schema.threads WHERE PROCESSLIST_ID = 7 /*session_2_id*/ CONNECTION_TYPE Shared Memory @@ -641,8 +641,8 @@ BEFORE kill of Session 1 ============================================================================================ SELECT ID, USER, HOST, DB, COMMAND, INFO FROM INFORMATION_SCHEMA.PROCESSLIST WHERE info LIKE 'PLUGIN%' ORDER BY id ID USER HOST DB COMMAND INFO -7 root localhost:100 test Query PLUGIN: SELECT ID, USER, HOST, DB, COMMAND, INFO FROM INFORMATION_SCHEMA.PROCESSLIST WHERE info LIKE 'PLUGIN%' ORDER BY id -8 root localhost:200 test Sleep PLUGIN +6 root localhost:100 test Query PLUGIN: SELECT ID, USER, HOST, DB, COMMAND, INFO FROM INFORMATION_SCHEMA.PROCESSLIST WHERE info LIKE 'PLUGIN%' ORDER BY id +7 root localhost:200 test Sleep PLUGIN num_cols : 6 nb rows : 2 @@ -655,7 +655,7 @@ srv_session_info_killed(Session_1) : 0 srv_session_info_killed(Session_2) : 0 ============================================================================================ Killing Session 1 -KILL CONNECTION 7 /*session_1_id*/ +KILL CONNECTION 6 /*session_1_id*/ affected rows : 0 server status : 2 warn count : 0 @@ -687,15 +687,15 @@ SELECT ID, USER, HOST, DB, COMMAND, INFO FROM INFORMATION_SCHEMA.PROCESSLIST WHE ============================================================================================ Perform KILL QUERY and suicide (KILL CONNECTION) on Session 2 ============================================================================================ -KILL QUERY 8 /*session_2_id*/ +KILL QUERY 7 /*session_2_id*/ srv_session_info_killed(Session 2) : 0 -KILL CONNECTION 8 /*session_2_id*/ +KILL CONNECTION 7 /*session_2_id*/ srv_session_info_killed(Session 2) : 1 ============================================================================================ Get/Set session info with killed session(Session 2) ============================================================================================ srv_session_info_get_thd : 1 -srv_session_info_get_session_id : 8 +srv_session_info_get_session_id : 7 srv_session_info_set_client_port : 0 srv_session_info_get_client_port : 11111 srv_session_info_get_current_db : test @@ -706,8 +706,8 @@ Session 2 got killed but not closed, thus it will appear in the processlist as K ============================================================================================ /*Session 3*/SELECT ID, USER, HOST, DB, COMMAND, INFO FROM INFORMATION_SCHEMA.PROCESSLIST WHERE info LIKE 'PLUGIN%' ORDER BY id ID USER HOST DB COMMAND INFO -8 root localhost:11111 test Killed PLUGIN -9 root localhost [NULL] Query PLUGIN: /*Session 3*/SELECT ID, USER, HOST, DB, COMMAND, INFO FROM INFORMATION_SCHEMA.PROCESSLIST WHERE info LIKE 'PLUGIN%' ORDER BY id +7 root localhost:11111 test Killed PLUGIN +8 root localhost [NULL] Query PLUGIN: /*Session 3*/SELECT ID, USER, HOST, DB, COMMAND, INFO FROM INFORMATION_SCHEMA.PROCESSLIST WHERE info LIKE 'PLUGIN%' ORDER BY id num_cols : 6 nb rows : 2 diff --git a/mysql-test/t/partition_deprecation.test b/mysql-test/t/partition_deprecation.test index c343c3c473e8..f81857775184 100644 --- a/mysql-test/t/partition_deprecation.test +++ b/mysql-test/t/partition_deprecation.test @@ -67,9 +67,10 @@ SHOW WARNINGS; SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE CREATE_OPTIONS LIKE '%partitioned%'; ---echo # Verify that the startup option --disable-partition-engine-check skips the I_S query. +--echo # Verify that the startup by default skips the I_S query, since the +--echo # option --disable-partition-engine-check defaults to TRUE. --let SEARCH_FILE= $MYSQLTEST_VARDIR/tmp/my_restart.err ---let $restart_parameters= restart: --disable-partition-engine-check --no-console --log-error=$SEARCH_FILE +--let $restart_parameters= restart: --no-console --log-error=$SEARCH_FILE --replace_result $SEARCH_FILE LOG_FILE --source include/restart_mysqld.inc perl; @@ -87,8 +88,9 @@ perl; EOF --remove_file $SEARCH_FILE ---echo # Verify that the I_S query on bootstrap prints warnings in the error log. ---let $restart_parameters= restart: --no-console --log-error=$SEARCH_FILE +--echo # Verify that the I_S query on bootstrap prints warnings in the error log +--echo # when '--disable-partition-engine-check=0'. +--let $restart_parameters= restart: --disable-partition-engine-check=0 --no-console --log-error=$SEARCH_FILE --replace_result $SEARCH_FILE LOG_FILE --source include/restart_mysqld.inc perl; diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 0b3e94d2c4a9..1f9274fef0b2 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -350,7 +350,7 @@ ulong slow_start_timeout; my_bool opt_bootstrap= 0; my_bool opt_initialize= 0; -my_bool opt_disable_partition_check= FALSE; +my_bool opt_disable_partition_check= TRUE; 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; @@ -5008,8 +5008,7 @@ int mysqld_main(int argc, char **argv) sql_print_information( "Executing 'SELECT * FROM INFORMATION_SCHEMA.TABLES;' " "to get a list of tables using the deprecated partition " - "engine. You may use the startup option " - "'--disable-partition-engine-check' to skip this check. "); + "engine."); sql_print_information("Beginning of list of non-natively partitioned tables"); (void) bootstrap_single_query( @@ -5566,8 +5565,8 @@ struct my_option my_long_early_options[]= {"disable-partition-engine-check", 0, "Skip the check for non-natively partitioned tables during bootstrap. " "This option is deprecated along with the partition engine.", - &opt_disable_partition_check, &opt_disable_partition_check, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, - 0, 0}, + &opt_disable_partition_check, &opt_disable_partition_check, 0, GET_BOOL, + NO_ARG, TRUE, 0, 0, 0, 0, 0}, { 0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0 } }; From 21bc723e66d5a82826c01ee77735c88c80aab664 Mon Sep 17 00:00:00 2001 From: Jaideep Karande Date: Fri, 24 Nov 2017 07:16:30 +0100 Subject: [PATCH 0206/1221] Bug#27150732: DOUBLE FREE AT SQL_SERVICE_COMMAND_INTERFACE CLASS Problem: During SQL Thread error (before thread set running variable), spawned SQL thread may block waiting for run while launcher thread will do the cleanup because of error. -------------------------------------------------------------------------------- Launcher thread has this condition: while (m_session_thread_running.to_run() && !m_session_thread_error) POINT 1: m_session_thread_error, during error it will not block. -------------------------------------------------------------------------------- Session_plugin_thread::terminate_session_thread is critical. .. while (m_session_thread_running) POINT 2: Session_plugin_thread::terminate_session_thread is critical, since its makes sure spawned thread is terminated. But terminate_session_thread got tricked because running variable was never set to TRUE. Spawned thread never got mutex to set running=true. -------------------------------------------------------------------------------- Resolution: There is missing *_starting(e.g. recovery has recovery_starting) variable in SQL Service Thread. This variables makes sure spawned thread is terminated even if it never ran. --- .../include/sql_service/sql_service_command.h | 2 + .../src/sql_service/sql_service_command.cc | 15 +++-- .../tests/mtr/r/gr_sql_service_failure.result | 29 ++++++++++ .../tests/mtr/t/gr_sql_service_failure.test | 56 +++++++++++++++++++ 4 files changed, 98 insertions(+), 4 deletions(-) create mode 100644 rapid/plugin/group_replication/tests/mtr/r/gr_sql_service_failure.result create mode 100644 rapid/plugin/group_replication/tests/mtr/t/gr_sql_service_failure.test diff --git a/rapid/plugin/group_replication/include/sql_service/sql_service_command.h b/rapid/plugin/group_replication/include/sql_service/sql_service_command.h index c893bd8b26ea..48a0ee8eab9f 100644 --- a/rapid/plugin/group_replication/include/sql_service/sql_service_command.h +++ b/rapid/plugin/group_replication/include/sql_service/sql_service_command.h @@ -210,6 +210,8 @@ class Session_plugin_thread long m_method_execution_return_value; /** Session thread running flag */ bool m_session_thread_running; + /** Session thread starting flag */ + bool m_session_thread_starting; /** Session termination flag */ bool m_session_thread_terminate; /** Session tread error flag */ diff --git a/rapid/plugin/group_replication/src/sql_service/sql_service_command.cc b/rapid/plugin/group_replication/src/sql_service/sql_service_command.cc index f00bc2085ee6..9ab924675cf7 100644 --- a/rapid/plugin/group_replication/src/sql_service/sql_service_command.cc +++ b/rapid/plugin/group_replication/src/sql_service/sql_service_command.cc @@ -62,7 +62,8 @@ establish_session_connection(enum_plugin_con_isolation isolation_param, case PSESSION_DEDICATED_THREAD: m_plugin_session_thread = new Session_plugin_thread(&sql_service_commands); error = m_plugin_session_thread->launch_session_thread(plugin_pointer); - m_server_interface = m_plugin_session_thread->get_service_interface(); + if (!error) + m_server_interface = m_plugin_session_thread->get_service_interface(); break; } @@ -486,7 +487,8 @@ Session_plugin_thread(Sql_service_commands* command_interface) : command_interface(command_interface), m_server_interface(NULL), incoming_methods(NULL), m_plugin_pointer(NULL), m_method_execution_completed(false), m_method_execution_return_value(0), - m_session_thread_running(false), m_session_thread_terminate(false), + m_session_thread_running(false), m_session_thread_starting(false), + m_session_thread_terminate(false), m_session_thread_error(0) { mysql_mutex_init(key_GR_LOCK_session_thread_run, &m_run_lock, @@ -551,6 +553,7 @@ Session_plugin_thread::launch_session_thread(void* plugin_pointer_var) m_session_thread_error= 0; m_session_thread_terminate= false; + m_session_thread_starting= true; m_plugin_pointer= plugin_pointer_var; if ((mysql_thread_create(key_GR_THD_plugin_session, @@ -559,6 +562,7 @@ Session_plugin_thread::launch_session_thread(void* plugin_pointer_var) launch_handler_thread, (void*)this))) { + m_session_thread_starting= false; mysql_mutex_unlock(&m_run_lock); /* purecov: inspected */ DBUG_RETURN(1); /* purecov: inspected */ } @@ -585,7 +589,7 @@ Session_plugin_thread::terminate_session_thread() int stop_wait_timeout= GR_PLUGIN_SESSION_THREAD_TIMEOUT; - while (m_session_thread_running) + while (m_session_thread_running || m_session_thread_starting) { DBUG_PRINT("loop", ("killing plugin session thread")); @@ -601,7 +605,7 @@ Session_plugin_thread::terminate_session_thread() { stop_wait_timeout= stop_wait_timeout - 1; } - else if (m_session_thread_running) // quit waiting + else if (m_session_thread_running || m_session_thread_starting) // quit waiting { mysql_mutex_unlock(&m_run_lock); DBUG_RETURN(1); @@ -632,8 +636,11 @@ Session_plugin_thread::session_thread_handler() m_server_interface= new Sql_service_interface(); m_session_thread_error= m_server_interface->open_thread_session(m_plugin_pointer); + DBUG_EXECUTE_IF("group_replication_sql_service_force_error", + { m_session_thread_error= 1; }); mysql_mutex_lock(&m_run_lock); + m_session_thread_starting= false; m_session_thread_running= true; mysql_cond_broadcast(&m_run_cond); mysql_mutex_unlock(&m_run_lock); diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_sql_service_failure.result b/rapid/plugin/group_replication/tests/mtr/r/gr_sql_service_failure.result new file mode 100644 index 000000000000..8980a8e40664 --- /dev/null +++ b/rapid/plugin/group_replication/tests/mtr/r/gr_sql_service_failure.result @@ -0,0 +1,29 @@ +include/group_replication.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection server1] +SET SESSION sql_log_bin= 0; +call mtr.add_suppression("Can't establish a internal server connection to execute plugin operations.*"); +call mtr.add_suppression("Error calling group communication interfaces while trying to leave the group"); +SET SESSION sql_log_bin= 1; + +# 1. Start GR. Force SQL Service to return error failing Start GR. + +SET @debug_save= @@GLOBAL.DEBUG; +SET @@GLOBAL.DEBUG= '+d,group_replication_sql_service_force_error'; +START GROUP_REPLICATION; +ERROR HY000: The server is not configured properly to be an active member of the group. Please see more details on error log. + +# 2. Start GR successfully now. + +SET @@GLOBAL.DEBUG= '-d,group_replication_sql_service_force_error'; +include/start_and_bootstrap_group_replication.inc +[connection server2] +include/start_group_replication.inc + +# 3. Clean up. + +[connection server1] +SET @@GLOBAL.DEBUG= @debug_save; +include/group_replication_end.inc diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_sql_service_failure.test b/rapid/plugin/group_replication/tests/mtr/t/gr_sql_service_failure.test new file mode 100644 index 000000000000..5f5dcb5634fe --- /dev/null +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_sql_service_failure.test @@ -0,0 +1,56 @@ +################################################################################ +# Validate that Group Replication behaves properly when SQL service does fail. +# +# Test: +# 0. The test requires one servers: M1. +# 1. Start GR. Force SQL Service to return error failing Start GR. +# 2. Start GR successfully now. +# 3. Clean up. +################################################################################ +--source include/have_debug.inc +--source ../inc/have_group_replication_plugin.inc +--let $rpl_skip_group_replication_start= 1 +--source ../inc/group_replication.inc + +SET SESSION sql_log_bin= 0; +call mtr.add_suppression("Can't establish a internal server connection to execute plugin operations.*"); +call mtr.add_suppression("Error calling group communication interfaces while trying to leave the group"); +SET SESSION sql_log_bin= 1; + +--echo +--echo # 1. Start GR. Force SQL Service to return error failing Start GR. +--echo + +SET @debug_save= @@GLOBAL.DEBUG; +SET @@GLOBAL.DEBUG= '+d,group_replication_sql_service_force_error'; + +--disable_query_log +SET GLOBAL group_replication_bootstrap_group=ON; +--eval SET GLOBAL group_replication_group_name= "$group_replication_group_name" +--enable_query_log + +--error ER_GROUP_REPLICATION_CONFIGURATION +START GROUP_REPLICATION; +--source ../inc/gr_clear_bootstrap_group.inc + +--echo +--echo # 2. Start GR successfully now. +--echo + +SET @@GLOBAL.DEBUG= '-d,group_replication_sql_service_force_error'; +--source ../inc/start_and_bootstrap_group_replication.inc + +--let $rpl_connection_name= server2 +--source include/rpl_connection.inc + +--source include/start_group_replication.inc + +--echo +--echo # 3. Clean up. +--echo + +--let $rpl_connection_name= server1 +--source include/rpl_connection.inc + +SET @@GLOBAL.DEBUG= @debug_save; +--source ../inc/group_replication_end.inc From 32182355705ade2b444470161dfdaefa00db89de Mon Sep 17 00:00:00 2001 From: Ajo Robert Date: Fri, 24 Nov 2017 12:35:41 +0530 Subject: [PATCH 0207/1221] Bug #24423143 - WRONG RESULTS FOR AGGREGATE QUERY Test case fix. Change-Id: I8a3b1e2b6312e927e182b955e5d5850e83e7319f --- mysql-test/r/group_min_max.result | 138 +++++++++++++++--------------- mysql-test/t/group_min_max.test | 79 +++++++++-------- 2 files changed, 108 insertions(+), 109 deletions(-) diff --git a/mysql-test/r/group_min_max.result b/mysql-test/r/group_min_max.result index 44ba9530f2a1..4ac57a7a6528 100644 --- a/mysql-test/r/group_min_max.result +++ b/mysql-test/r/group_min_max.result @@ -3798,7 +3798,7 @@ DROP TABLE t1; # Bug#24423143 - WRONG RESULTS FOR AGGREGATE QUERY # # Test index merge tree scenario -CREATE TABLE A ( +CREATE TABLE a ( aggr_col int, group_by_col int, KEY aggr_col_key (aggr_col), @@ -3807,117 +3807,117 @@ KEY group_by_col_key (group_by_col, aggr_col) set optimizer_trace_max_mem_size=1048576; set @@session.optimizer_trace='enabled=on'; set end_markers_in_json=on; -INSERT INTO A VALUES (2,3),(5,6),(6,3),(7,NULL),(9,NULL),(10,6); -ANALYZE TABLE A; +INSERT INTO a VALUES (2,3),(5,6),(6,3),(7,NULL),(9,NULL),(10,6); +ANALYZE TABLE a; Table Op Msg_type Msg_text -test.A analyze status OK -SELECT group_by_col, MIN(aggr_col) FROM A +test.a analyze status OK +SELECT group_by_col, MIN(aggr_col) FROM a WHERE (group_by_col IN (70, 9)) OR (aggr_col > 2) GROUP BY group_by_col; group_by_col MIN(aggr_col) NULL 7 3 6 6 5 -EXPLAIN SELECT group_by_col, MIN(aggr_col) FROM A +EXPLAIN SELECT group_by_col, MIN(aggr_col) FROM a WHERE (group_by_col IN (70 ,9)) OR (aggr_col > 2) GROUP BY group_by_col; id select_type table partitions type possible_keys key key_len ref rows filtered Extra -1 SIMPLE A NULL index aggr_col_key,group_by_col_key group_by_col_key 10 NULL 6 55.55 Using where; Using index +1 SIMPLE a NULL index aggr_col_key,group_by_col_key group_by_col_key 10 NULL 6 55.55 Using where; Using index Warnings: -Note 1003 /* select#1 */ select `test`.`A`.`group_by_col` AS `group_by_col`,min(`test`.`A`.`aggr_col`) AS `MIN(aggr_col)` from `test`.`A` where ((`test`.`A`.`group_by_col` in (70,9)) or (`test`.`A`.`aggr_col` > 2)) group by `test`.`A`.`group_by_col` +Note 1003 /* select#1 */ select `test`.`a`.`group_by_col` AS `group_by_col`,min(`test`.`a`.`aggr_col`) AS `MIN(aggr_col)` from `test`.`a` where ((`test`.`a`.`group_by_col` in (70,9)) or (`test`.`a`.`aggr_col` > 2)) group by `test`.`a`.`group_by_col` SELECT TRACE RLIKE 'disjuntive_predicate_present' AS OK FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; OK 1 -SELECT group_by_col, MAX(aggr_col) FROM A +SELECT group_by_col, MAX(aggr_col) FROM a WHERE (group_by_col IN (70, 9)) OR (aggr_col < 9) GROUP BY group_by_col; group_by_col MAX(aggr_col) NULL 7 3 6 6 5 -EXPLAIN SELECT group_by_col, MAX(aggr_col) FROM A +EXPLAIN SELECT group_by_col, MAX(aggr_col) FROM a WHERE (group_by_col IN (70 , 9)) OR (aggr_col < 9) GROUP BY group_by_col; id select_type table partitions type possible_keys key key_len ref rows filtered Extra -1 SIMPLE A NULL index aggr_col_key,group_by_col_key group_by_col_key 10 NULL 6 55.55 Using where; Using index +1 SIMPLE a NULL index aggr_col_key,group_by_col_key group_by_col_key 10 NULL 6 55.55 Using where; Using index Warnings: -Note 1003 /* select#1 */ select `test`.`A`.`group_by_col` AS `group_by_col`,max(`test`.`A`.`aggr_col`) AS `MAX(aggr_col)` from `test`.`A` where ((`test`.`A`.`group_by_col` in (70,9)) or (`test`.`A`.`aggr_col` < 9)) group by `test`.`A`.`group_by_col` +Note 1003 /* select#1 */ select `test`.`a`.`group_by_col` AS `group_by_col`,max(`test`.`a`.`aggr_col`) AS `MAX(aggr_col)` from `test`.`a` where ((`test`.`a`.`group_by_col` in (70,9)) or (`test`.`a`.`aggr_col` < 9)) group by `test`.`a`.`group_by_col` SELECT TRACE RLIKE 'disjuntive_predicate_present' AS OK FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; OK 1 # Test IMPOSSIBLE TREE scenario -ALTER TABLE A DROP KEY aggr_col_key; -SELECT group_by_col, MIN(aggr_col) FROM A +ALTER TABLE a DROP KEY aggr_col_key; +SELECT group_by_col, MIN(aggr_col) FROM a WHERE (group_by_col IN (70 ,9)) OR (aggr_col > 2) GROUP BY group_by_col; group_by_col MIN(aggr_col) NULL 7 3 6 6 5 -EXPLAIN SELECT group_by_col, MIN(aggr_col) FROM A +EXPLAIN SELECT group_by_col, MIN(aggr_col) FROM a WHERE (group_by_col IN (70, 9)) OR (aggr_col > 2) GROUP BY group_by_col; id select_type table partitions type possible_keys key key_len ref rows filtered Extra -1 SIMPLE A NULL index group_by_col_key group_by_col_key 10 NULL 6 55.55 Using where; Using index +1 SIMPLE a NULL index group_by_col_key group_by_col_key 10 NULL 6 55.55 Using where; Using index Warnings: -Note 1003 /* select#1 */ select `test`.`A`.`group_by_col` AS `group_by_col`,min(`test`.`A`.`aggr_col`) AS `MIN(aggr_col)` from `test`.`A` where ((`test`.`A`.`group_by_col` in (70,9)) or (`test`.`A`.`aggr_col` > 2)) group by `test`.`A`.`group_by_col` +Note 1003 /* select#1 */ select `test`.`a`.`group_by_col` AS `group_by_col`,min(`test`.`a`.`aggr_col`) AS `MIN(aggr_col)` from `test`.`a` where ((`test`.`a`.`group_by_col` in (70,9)) or (`test`.`a`.`aggr_col` > 2)) group by `test`.`a`.`group_by_col` SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; OK 1 -SELECT group_by_col, MAX(aggr_col) FROM A +SELECT group_by_col, MAX(aggr_col) FROM a WHERE (group_by_col IN (70, 9)) OR (aggr_col < 9) GROUP BY group_by_col; group_by_col MAX(aggr_col) NULL 7 3 6 6 5 -EXPLAIN SELECT group_by_col, MAX(aggr_col) FROM A +EXPLAIN SELECT group_by_col, MAX(aggr_col) FROM a WHERE (group_by_col IN (70, 9)) OR (aggr_col < 9) GROUP BY group_by_col; id select_type table partitions type possible_keys key key_len ref rows filtered Extra -1 SIMPLE A NULL index group_by_col_key group_by_col_key 10 NULL 6 55.55 Using where; Using index +1 SIMPLE a NULL index group_by_col_key group_by_col_key 10 NULL 6 55.55 Using where; Using index Warnings: -Note 1003 /* select#1 */ select `test`.`A`.`group_by_col` AS `group_by_col`,max(`test`.`A`.`aggr_col`) AS `MAX(aggr_col)` from `test`.`A` where ((`test`.`A`.`group_by_col` in (70,9)) or (`test`.`A`.`aggr_col` < 9)) group by `test`.`A`.`group_by_col` +Note 1003 /* select#1 */ select `test`.`a`.`group_by_col` AS `group_by_col`,max(`test`.`a`.`aggr_col`) AS `MAX(aggr_col)` from `test`.`a` where ((`test`.`a`.`group_by_col` in (70,9)) or (`test`.`a`.`aggr_col` < 9)) group by `test`.`a`.`group_by_col` SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; OK 1 # Scenario 3: aggregate field used as equal expression. -SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a WHERE (group_by_col IN (3, 9)) OR (aggr_col = 9) GROUP BY group_by_col; group_by_col MIN(aggr_col) MAX(aggr_col) NULL 9 9 3 2 6 -EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a WHERE (group_by_col IN (3, 9)) OR (aggr_col = 9) GROUP BY group_by_col; id select_type table partitions type possible_keys key key_len ref rows filtered Extra -1 SIMPLE A NULL index group_by_col_key group_by_col_key 10 NULL 6 44.44 Using where; Using index +1 SIMPLE a NULL index group_by_col_key group_by_col_key 10 NULL 6 44.44 Using where; Using index Warnings: -Note 1003 /* select#1 */ select `test`.`A`.`group_by_col` AS `group_by_col`,min(`test`.`A`.`aggr_col`) AS `MIN(aggr_col)`,max(`test`.`A`.`aggr_col`) AS `MAX(aggr_col)` from `test`.`A` where ((`test`.`A`.`group_by_col` in (3,9)) or (`test`.`A`.`aggr_col` = 9)) group by `test`.`A`.`group_by_col` +Note 1003 /* select#1 */ select `test`.`a`.`group_by_col` AS `group_by_col`,min(`test`.`a`.`aggr_col`) AS `MIN(aggr_col)`,max(`test`.`a`.`aggr_col`) AS `MAX(aggr_col)` from `test`.`a` where ((`test`.`a`.`group_by_col` in (3,9)) or (`test`.`a`.`aggr_col` = 9)) group by `test`.`a`.`group_by_col` SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; OK 1 # Scenario 4: non aggregate field used as equal expression. -SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a WHERE (group_by_col = 3) OR (aggr_col > 8) GROUP BY group_by_col; group_by_col MIN(aggr_col) MAX(aggr_col) NULL 9 9 3 2 6 6 10 10 -EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a WHERE (group_by_col = 3) OR (aggr_col > 8) GROUP BY group_by_col; id select_type table partitions type possible_keys key key_len ref rows filtered Extra -1 SIMPLE A NULL index group_by_col_key group_by_col_key 10 NULL 6 55.55 Using where; Using index +1 SIMPLE a NULL index group_by_col_key group_by_col_key 10 NULL 6 55.55 Using where; Using index Warnings: -Note 1003 /* select#1 */ select `test`.`A`.`group_by_col` AS `group_by_col`,min(`test`.`A`.`aggr_col`) AS `MIN(aggr_col)`,max(`test`.`A`.`aggr_col`) AS `MAX(aggr_col)` from `test`.`A` where ((`test`.`A`.`group_by_col` = 3) or (`test`.`A`.`aggr_col` > 8)) group by `test`.`A`.`group_by_col` +Note 1003 /* select#1 */ select `test`.`a`.`group_by_col` AS `group_by_col`,min(`test`.`a`.`aggr_col`) AS `MIN(aggr_col)`,max(`test`.`a`.`aggr_col`) AS `MAX(aggr_col)` from `test`.`a` where ((`test`.`a`.`group_by_col` = 3) or (`test`.`a`.`aggr_col` > 8)) group by `test`.`a`.`group_by_col` SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; OK 1 # Scenario 5: aggregate field used as non-zero expression. -INSERT INTO A VALUES(0, 3); -INSERT INTO A VALUES(0, 9); -INSERT INTO A VALUES(8, 0); -ANALYZE TABLE A; +INSERT INTO a VALUES(0, 3); +INSERT INTO a VALUES(0, 9); +INSERT INTO a VALUES(8, 0); +ANALYZE TABLE a; Table Op Msg_type Msg_text -test.A analyze status OK -SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +test.a analyze status OK +SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a WHERE (group_by_col = 9) OR aggr_col GROUP BY group_by_col; group_by_col MIN(aggr_col) MAX(aggr_col) NULL 7 9 @@ -3925,18 +3925,18 @@ NULL 7 9 3 2 6 6 5 10 9 0 0 -EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a WHERE group_by_col = 9 OR aggr_col GROUP BY group_by_col; id select_type table partitions type possible_keys key key_len ref rows filtered Extra -1 SIMPLE A NULL index group_by_col_key group_by_col_key 10 NULL 9 91.11 Using where; Using index +1 SIMPLE a NULL index group_by_col_key group_by_col_key 10 NULL 9 91.11 Using where; Using index Warnings: -Note 1003 /* select#1 */ select `test`.`A`.`group_by_col` AS `group_by_col`,min(`test`.`A`.`aggr_col`) AS `MIN(aggr_col)`,max(`test`.`A`.`aggr_col`) AS `MAX(aggr_col)` from `test`.`A` where ((`test`.`A`.`group_by_col` = 9) or `test`.`A`.`aggr_col`) group by `test`.`A`.`group_by_col` +Note 1003 /* select#1 */ select `test`.`a`.`group_by_col` AS `group_by_col`,min(`test`.`a`.`aggr_col`) AS `MIN(aggr_col)`,max(`test`.`a`.`aggr_col`) AS `MAX(aggr_col)` from `test`.`a` where ((`test`.`a`.`group_by_col` = 9) or `test`.`a`.`aggr_col`) group by `test`.`a`.`group_by_col` SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; OK 1 # Scenario 6: non aggregate field used as non-zero expression. -SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a WHERE group_by_col OR (aggr_col < 9) GROUP BY group_by_col; group_by_col MIN(aggr_col) MAX(aggr_col) NULL 7 7 @@ -3944,53 +3944,53 @@ NULL 7 7 3 0 6 6 5 10 9 0 0 -EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a WHERE group_by_col OR (aggr_col < 9) GROUP BY group_by_col; id select_type table partitions type possible_keys key key_len ref rows filtered Extra -1 SIMPLE A NULL index group_by_col_key group_by_col_key 10 NULL 9 92.59 Using where; Using index +1 SIMPLE a NULL index group_by_col_key group_by_col_key 10 NULL 9 92.59 Using where; Using index Warnings: -Note 1003 /* select#1 */ select `test`.`A`.`group_by_col` AS `group_by_col`,min(`test`.`A`.`aggr_col`) AS `MIN(aggr_col)`,max(`test`.`A`.`aggr_col`) AS `MAX(aggr_col)` from `test`.`A` where (`test`.`A`.`group_by_col` or (`test`.`A`.`aggr_col` < 9)) group by `test`.`A`.`group_by_col` +Note 1003 /* select#1 */ select `test`.`a`.`group_by_col` AS `group_by_col`,min(`test`.`a`.`aggr_col`) AS `MIN(aggr_col)`,max(`test`.`a`.`aggr_col`) AS `MAX(aggr_col)` from `test`.`a` where (`test`.`a`.`group_by_col` or (`test`.`a`.`aggr_col` < 9)) group by `test`.`a`.`group_by_col` SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; OK 1 # Scenario 7: aggregate field used in equal exp without a CONST -INSERT INTO A VALUES(1,1),(1,2),(2,1); -SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +INSERT INTO a VALUES(1,1),(1,2),(2,1); +SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a WHERE aggr_col = group_by_col GROUP BY group_by_col; group_by_col MIN(aggr_col) MAX(aggr_col) 1 1 1 -EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a WHERE aggr_col = group_by_col GROUP BY group_by_col; id select_type table partitions type possible_keys key key_len ref rows filtered Extra -1 SIMPLE A NULL index group_by_col_key group_by_col_key 10 NULL 12 100.00 Using where; Using index +1 SIMPLE a NULL index group_by_col_key group_by_col_key 10 NULL 12 100.00 Using where; Using index Warnings: -Note 1003 /* select#1 */ select `test`.`A`.`group_by_col` AS `group_by_col`,min(`test`.`A`.`aggr_col`) AS `MIN(aggr_col)`,max(`test`.`A`.`aggr_col`) AS `MAX(aggr_col)` from `test`.`A` where (`test`.`A`.`group_by_col` = `test`.`A`.`aggr_col`) group by `test`.`A`.`group_by_col` +Note 1003 /* select#1 */ select `test`.`a`.`group_by_col` AS `group_by_col`,min(`test`.`a`.`aggr_col`) AS `MIN(aggr_col)`,max(`test`.`a`.`aggr_col`) AS `MAX(aggr_col)` from `test`.`a` where (`test`.`a`.`group_by_col` = `test`.`a`.`aggr_col`) group by `test`.`a`.`group_by_col` SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; OK 1 # Scenario 8: aggregate field used in a non-eq exp without a CONST -SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a WHERE aggr_col < group_by_col GROUP BY group_by_col; group_by_col MIN(aggr_col) MAX(aggr_col) 2 1 1 3 0 2 6 5 5 9 0 0 -EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a WHERE aggr_col < group_by_col GROUP BY group_by_col; id select_type table partitions type possible_keys key key_len ref rows filtered Extra -1 SIMPLE A NULL index group_by_col_key group_by_col_key 10 NULL 12 33.33 Using where; Using index +1 SIMPLE a NULL index group_by_col_key group_by_col_key 10 NULL 12 33.33 Using where; Using index Warnings: -Note 1003 /* select#1 */ select `test`.`A`.`group_by_col` AS `group_by_col`,min(`test`.`A`.`aggr_col`) AS `MIN(aggr_col)`,max(`test`.`A`.`aggr_col`) AS `MAX(aggr_col)` from `test`.`A` where (`test`.`A`.`aggr_col` < `test`.`A`.`group_by_col`) group by `test`.`A`.`group_by_col` +Note 1003 /* select#1 */ select `test`.`a`.`group_by_col` AS `group_by_col`,min(`test`.`a`.`aggr_col`) AS `MIN(aggr_col)`,max(`test`.`a`.`aggr_col`) AS `MAX(aggr_col)` from `test`.`a` where (`test`.`a`.`aggr_col` < `test`.`a`.`group_by_col`) group by `test`.`a`.`group_by_col` SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; OK 1 # Scenario 8 -INSERT INTO A VALUES(0,1),(1,0),(0,0); -SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +INSERT INTO a VALUES(0,1),(1,0),(0,0); +SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a WHERE aggr_col OR group_by_col GROUP BY group_by_col; group_by_col MIN(aggr_col) MAX(aggr_col) NULL 7 9 @@ -4000,54 +4000,54 @@ NULL 7 9 3 0 6 6 5 10 9 0 0 -EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a WHERE aggr_col OR group_by_col GROUP BY group_by_col; id select_type table partitions type possible_keys key key_len ref rows filtered Extra -1 SIMPLE A NULL index group_by_col_key group_by_col_key 10 NULL 15 99.00 Using where; Using index +1 SIMPLE a NULL index group_by_col_key group_by_col_key 10 NULL 15 99.00 Using where; Using index Warnings: -Note 1003 /* select#1 */ select `test`.`A`.`group_by_col` AS `group_by_col`,min(`test`.`A`.`aggr_col`) AS `MIN(aggr_col)`,max(`test`.`A`.`aggr_col`) AS `MAX(aggr_col)` from `test`.`A` where (`test`.`A`.`aggr_col` or `test`.`A`.`group_by_col`) group by `test`.`A`.`group_by_col` +Note 1003 /* select#1 */ select `test`.`a`.`group_by_col` AS `group_by_col`,min(`test`.`a`.`aggr_col`) AS `MIN(aggr_col)`,max(`test`.`a`.`aggr_col`) AS `MAX(aggr_col)` from `test`.`a` where (`test`.`a`.`aggr_col` or `test`.`a`.`group_by_col`) group by `test`.`a`.`group_by_col` SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; OK 1 # Scenario 9 -SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a WHERE aggr_col AND group_by_col GROUP BY group_by_col; group_by_col MIN(aggr_col) MAX(aggr_col) 1 1 2 2 1 1 3 2 6 6 5 10 -EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a WHERE aggr_col AND group_by_col GROUP BY group_by_col; id select_type table partitions type possible_keys key key_len ref rows filtered Extra -1 SIMPLE A NULL index group_by_col_key group_by_col_key 10 NULL 15 81.00 Using where; Using index +1 SIMPLE a NULL index group_by_col_key group_by_col_key 10 NULL 15 81.00 Using where; Using index Warnings: -Note 1003 /* select#1 */ select `test`.`A`.`group_by_col` AS `group_by_col`,min(`test`.`A`.`aggr_col`) AS `MIN(aggr_col)`,max(`test`.`A`.`aggr_col`) AS `MAX(aggr_col)` from `test`.`A` where (`test`.`A`.`aggr_col` and `test`.`A`.`group_by_col`) group by `test`.`A`.`group_by_col` +Note 1003 /* select#1 */ select `test`.`a`.`group_by_col` AS `group_by_col`,min(`test`.`a`.`aggr_col`) AS `MIN(aggr_col)`,max(`test`.`a`.`aggr_col`) AS `MAX(aggr_col)` from `test`.`a` where (`test`.`a`.`aggr_col` and `test`.`a`.`group_by_col`) group by `test`.`a`.`group_by_col` SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; OK 1 # Scenario 10: Added for completion. This fix does not have an impact. -SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a WHERE aggr_col<>0 AND group_by_col<>0 GROUP BY group_by_col; group_by_col MIN(aggr_col) MAX(aggr_col) 1 1 2 2 1 1 3 2 6 6 5 10 -EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a WHERE aggr_col<>0 AND group_by_col<>0 GROUP BY group_by_col; id select_type table partitions type possible_keys key key_len ref rows filtered Extra -1 SIMPLE A NULL range group_by_col_key group_by_col_key 10 NULL 7 100.00 Using where; Using index for group-by +1 SIMPLE a NULL range group_by_col_key group_by_col_key 10 NULL 7 100.00 Using where; Using index for group-by Warnings: -Note 1003 /* select#1 */ select `test`.`A`.`group_by_col` AS `group_by_col`,min(`test`.`A`.`aggr_col`) AS `MIN(aggr_col)`,max(`test`.`A`.`aggr_col`) AS `MAX(aggr_col)` from `test`.`A` where ((`test`.`A`.`aggr_col` <> 0) and (`test`.`A`.`group_by_col` <> 0)) group by `test`.`A`.`group_by_col` +Note 1003 /* select#1 */ select `test`.`a`.`group_by_col` AS `group_by_col`,min(`test`.`a`.`aggr_col`) AS `MIN(aggr_col)`,max(`test`.`a`.`aggr_col`) AS `MAX(aggr_col)` from `test`.`a` where ((`test`.`a`.`aggr_col` <> 0) and (`test`.`a`.`group_by_col` <> 0)) group by `test`.`a`.`group_by_col` SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; OK 0 # Scenario 11: ITEM_FUNC as an argument of ITEM_FUNC -SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a WHERE group_by_col OR (group_by_col < (aggr_col = 1)) GROUP BY group_by_col; group_by_col MIN(aggr_col) MAX(aggr_col) 0 1 1 @@ -4056,12 +4056,12 @@ group_by_col MIN(aggr_col) MAX(aggr_col) 3 0 6 6 5 10 9 0 0 -EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a WHERE group_by_col OR (group_by_col < (aggr_col = 1)) GROUP BY group_by_col; id select_type table partitions type possible_keys key key_len ref rows filtered Extra -1 SIMPLE A NULL index group_by_col_key group_by_col_key 10 NULL 15 93.33 Using where; Using index +1 SIMPLE a NULL index group_by_col_key group_by_col_key 10 NULL 15 93.33 Using where; Using index Warnings: -Note 1003 /* select#1 */ select `test`.`A`.`group_by_col` AS `group_by_col`,min(`test`.`A`.`aggr_col`) AS `MIN(aggr_col)`,max(`test`.`A`.`aggr_col`) AS `MAX(aggr_col)` from `test`.`A` where (`test`.`A`.`group_by_col` or (`test`.`A`.`group_by_col` < (`test`.`A`.`aggr_col` = 1))) group by `test`.`A`.`group_by_col` +Note 1003 /* select#1 */ select `test`.`a`.`group_by_col` AS `group_by_col`,min(`test`.`a`.`aggr_col`) AS `MIN(aggr_col)`,max(`test`.`a`.`aggr_col`) AS `MAX(aggr_col)` from `test`.`a` where (`test`.`a`.`group_by_col` or (`test`.`a`.`group_by_col` < (`test`.`a`.`aggr_col` = 1))) group by `test`.`a`.`group_by_col` SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; OK @@ -4069,5 +4069,5 @@ OK SET optimizer_trace_max_mem_size=DEFAULT; SET optimizer_trace=DEFAULT; SET end_markers_in_json=DEFAULT; -DROP TABLE A; +DROP TABLE a; # End of test for Bug#24423143 diff --git a/mysql-test/t/group_min_max.test b/mysql-test/t/group_min_max.test index 87d64f13f99d..bb1e96a15af6 100644 --- a/mysql-test/t/group_min_max.test +++ b/mysql-test/t/group_min_max.test @@ -1458,7 +1458,7 @@ DROP TABLE t1; --echo # --echo # Test index merge tree scenario -CREATE TABLE A ( +CREATE TABLE a ( aggr_col int, group_by_col int, KEY aggr_col_key (aggr_col), @@ -1470,79 +1470,78 @@ eval set optimizer_trace_max_mem_size=$DEFAULT_TRACE_MEM_SIZE; set @@session.optimizer_trace='enabled=on'; set end_markers_in_json=on; -INSERT INTO A VALUES (2,3),(5,6),(6,3),(7,NULL),(9,NULL),(10,6); -ANALYZE TABLE A; +INSERT INTO a VALUES (2,3),(5,6),(6,3),(7,NULL),(9,NULL),(10,6); +ANALYZE TABLE a; -SELECT group_by_col, MIN(aggr_col) FROM A +SELECT group_by_col, MIN(aggr_col) FROM a WHERE (group_by_col IN (70, 9)) OR (aggr_col > 2) GROUP BY group_by_col; - -EXPLAIN SELECT group_by_col, MIN(aggr_col) FROM A +EXPLAIN SELECT group_by_col, MIN(aggr_col) FROM a WHERE (group_by_col IN (70 ,9)) OR (aggr_col > 2) GROUP BY group_by_col; SELECT TRACE RLIKE 'disjuntive_predicate_present' AS OK FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; -SELECT group_by_col, MAX(aggr_col) FROM A +SELECT group_by_col, MAX(aggr_col) FROM a WHERE (group_by_col IN (70, 9)) OR (aggr_col < 9) GROUP BY group_by_col; -EXPLAIN SELECT group_by_col, MAX(aggr_col) FROM A +EXPLAIN SELECT group_by_col, MAX(aggr_col) FROM a WHERE (group_by_col IN (70 , 9)) OR (aggr_col < 9) GROUP BY group_by_col; SELECT TRACE RLIKE 'disjuntive_predicate_present' AS OK FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; --echo # Test IMPOSSIBLE TREE scenario -ALTER TABLE A DROP KEY aggr_col_key; +ALTER TABLE a DROP KEY aggr_col_key; -SELECT group_by_col, MIN(aggr_col) FROM A +SELECT group_by_col, MIN(aggr_col) FROM a WHERE (group_by_col IN (70 ,9)) OR (aggr_col > 2) GROUP BY group_by_col; -EXPLAIN SELECT group_by_col, MIN(aggr_col) FROM A +EXPLAIN SELECT group_by_col, MIN(aggr_col) FROM a WHERE (group_by_col IN (70, 9)) OR (aggr_col > 2) GROUP BY group_by_col; SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; -SELECT group_by_col, MAX(aggr_col) FROM A +SELECT group_by_col, MAX(aggr_col) FROM a WHERE (group_by_col IN (70, 9)) OR (aggr_col < 9) GROUP BY group_by_col; -EXPLAIN SELECT group_by_col, MAX(aggr_col) FROM A +EXPLAIN SELECT group_by_col, MAX(aggr_col) FROM a WHERE (group_by_col IN (70, 9)) OR (aggr_col < 9) GROUP BY group_by_col; SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; --echo # Scenario 3: aggregate field used as equal expression. -SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a WHERE (group_by_col IN (3, 9)) OR (aggr_col = 9) GROUP BY group_by_col; -EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a WHERE (group_by_col IN (3, 9)) OR (aggr_col = 9) GROUP BY group_by_col; SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; --echo # Scenario 4: non aggregate field used as equal expression. -SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a WHERE (group_by_col = 3) OR (aggr_col > 8) GROUP BY group_by_col; -EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a WHERE (group_by_col = 3) OR (aggr_col > 8) GROUP BY group_by_col; SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; --echo # Scenario 5: aggregate field used as non-zero expression. -INSERT INTO A VALUES(0, 3); -INSERT INTO A VALUES(0, 9); -INSERT INTO A VALUES(8, 0); -ANALYZE TABLE A; +INSERT INTO a VALUES(0, 3); +INSERT INTO a VALUES(0, 9); +INSERT INTO a VALUES(8, 0); +ANALYZE TABLE a; -SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a WHERE (group_by_col = 9) OR aggr_col GROUP BY group_by_col; -EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a WHERE group_by_col = 9 OR aggr_col GROUP BY group_by_col; SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK @@ -1550,10 +1549,10 @@ SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK --echo # Scenario 6: non aggregate field used as non-zero expression. -SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a WHERE group_by_col OR (aggr_col < 9) GROUP BY group_by_col; -EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a WHERE group_by_col OR (aggr_col < 9) GROUP BY group_by_col; SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK @@ -1561,64 +1560,64 @@ SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK --echo # Scenario 7: aggregate field used in equal exp without a CONST -INSERT INTO A VALUES(1,1),(1,2),(2,1); +INSERT INTO a VALUES(1,1),(1,2),(2,1); -SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a WHERE aggr_col = group_by_col GROUP BY group_by_col; -EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a WHERE aggr_col = group_by_col GROUP BY group_by_col; SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; --echo # Scenario 8: aggregate field used in a non-eq exp without a CONST -SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a WHERE aggr_col < group_by_col GROUP BY group_by_col; -EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a WHERE aggr_col < group_by_col GROUP BY group_by_col; SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; --echo # Scenario 8 -INSERT INTO A VALUES(0,1),(1,0),(0,0); +INSERT INTO a VALUES(0,1),(1,0),(0,0); -SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a WHERE aggr_col OR group_by_col GROUP BY group_by_col; -EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a WHERE aggr_col OR group_by_col GROUP BY group_by_col; SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; --echo # Scenario 9 -SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a WHERE aggr_col AND group_by_col GROUP BY group_by_col; -EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a WHERE aggr_col AND group_by_col GROUP BY group_by_col; SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; --echo # Scenario 10: Added for completion. This fix does not have an impact. -SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a WHERE aggr_col<>0 AND group_by_col<>0 GROUP BY group_by_col; -EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a WHERE aggr_col<>0 AND group_by_col<>0 GROUP BY group_by_col; SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; --echo # Scenario 11: ITEM_FUNC as an argument of ITEM_FUNC -SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a WHERE group_by_col OR (group_by_col < (aggr_col = 1)) GROUP BY group_by_col; -EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM A +EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a WHERE group_by_col OR (group_by_col < (aggr_col = 1)) GROUP BY group_by_col; SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK @@ -1628,6 +1627,6 @@ SET optimizer_trace_max_mem_size=DEFAULT; SET optimizer_trace=DEFAULT; SET end_markers_in_json=DEFAULT; -DROP TABLE A; +DROP TABLE a; --echo # End of test for Bug#24423143 From 88301e5adab65f6750f66af284be410c4369d0c1 Mon Sep 17 00:00:00 2001 From: Praveenkumar Hulakund Date: Fri, 24 Nov 2017 10:20:34 +0100 Subject: [PATCH 0208/1221] Bug#25586773 - INCORRECT BEHAVIOR FOR CREATE TABLE SELECT IN A LOOP IN SP For the SQL statements in the stored routine, while resolving the statement (on first execution or on re-parse trigger) memory is allocated on the permanent mem-root. After executing the statement for the first time a state of the statement query arena is changed to STMT_EXECUTED. Subsequent execution uses execution mem-root which is freed at the end of the execution. But for CREATE TABLE ... SELECT(CTS), state of the statement query arena is never changed to the STMT_EXECUTED. Allocation in the subsequent execution goes to the permanent mem-root. Hence the memory growth or leak is observed. Why query arena state is not switched for CTS? ============================================== For the CTS, existence of the table being created is checked while executing the statement. If table already exists then error (or warning with IF TABLE EXISTS clause) is reported. In the subsequent execution allocation(when table does not exists) for items being created goes to permanent mem-root(as statement query arena state is set STMT_INITIALIZED_FOR_SP always). So the next execution will have valid pointers to refer. If state of query arena is set to the STMT_EXECUTED after first execution then state is changed even when table exists error or warning is reported. In this case subsequent execution uses execution mem-root to allocate items. This memory is freed at the end of the execution. So the next execution of routine refers to invalid pointers. To avoid any issues related to invalid pointer reference(e.g. bug19897405) the state of the statement query arena is set to STMT_INITIALIZED_FOR_SP always for CTS by patch for bug25053286. Fix: ============================================== For the CTS in the stored routine, special handling is required for the case of table exists error or warning. In case of table exists error or warning, the statement arena is set to STMT_INITIALIZED_FOR_SP. With this change, next execution uses permanent mem-root while resolving the statement (this change fixes invalid pointer reference issues e.g. bug19897405). If the execution is successful then statement query arena is changed to the STMT_EXECUTED. So on the subsequent execution of the CTS, memory is allocated in the execution mem-root (this change fixes memory growth or leak issue). Additional changes for mysql-8.0 and mysql-trunk: -------------------------------------------------- As part of this patch, code is modified to check the SP statement execution state instead of error codes or flags while setting the statement query arena state. Modification is made so that, SP statement query arena state is not changed when error occurs in the statement parsing, table opening and preparation phase. Query arena state is changed to STMT_EXECUTED when error occurs in the execution phase (or when execution succeeds). If "table exists" error during execution phase of CTS then the state of the statement query arena is set to STMT_INITIALIZED_FOR_SP, as if statement must be reprepared. --- sql/sp_instr.cc | 46 ++++++++++++++++++++++++++++++++++++++++------ sql/table.cc | 6 ++++-- 2 files changed, 44 insertions(+), 8 deletions(-) diff --git a/sql/sp_instr.cc b/sql/sp_instr.cc index 5fc408548099..664426ac1376 100644 --- a/sql/sp_instr.cc +++ b/sql/sp_instr.cc @@ -266,6 +266,35 @@ static bool subst_spvars(THD *thd, sp_instr *instr, LEX_STRING *query_str) // sp_lex_instr implementation. /////////////////////////////////////////////////////////////////////////// +class SP_instr_error_handler : public Internal_error_handler +{ +public: + SP_instr_error_handler() + : cts_table_exists_error(false) + {} + + virtual bool handle_condition(THD *thd, + uint sql_errno, + const char*, + Sql_condition::enum_warning_level, + const char*, + Sql_condition **) + { + /* + Check if the "table exists" error or warning reported for the + CREATE TABLE ... SELECT statement. + */ + if (thd->lex && thd->lex->sql_command == SQLCOM_CREATE_TABLE && + thd->lex->select_lex.item_list.elements > 0 && + sql_errno == ER_TABLE_EXISTS_ERROR) + cts_table_exists_error= true; + + return false; + } + + bool cts_table_exists_error; +}; + bool sp_lex_instr::reset_lex_and_exec_core(THD *thd, uint *nextp, @@ -327,6 +356,9 @@ bool sp_lex_instr::reset_lex_and_exec_core(THD *thd, reinit_stmt_before_use(thd, m_lex); + SP_instr_error_handler sp_instr_error_handler; + thd->push_internal_handler(&sp_instr_error_handler); + /* Open tables if needed. */ if (open_tables) @@ -400,6 +432,9 @@ bool sp_lex_instr::reset_lex_and_exec_core(THD *thd, DBUG_PRINT("info",("exec_core returned: %d", rc)); } + // Pop SP_instr_error_handler error handler. + thd->pop_internal_handler(); + if (m_lex->query_tables_own_last) { /* @@ -438,7 +473,8 @@ bool sp_lex_instr::reset_lex_and_exec_core(THD *thd, See Query_arena->state definition for explanation. Some special handling of CREATE TABLE .... SELECT in an SP is required. The - state is always set to STMT_INITIALIZED_FOR_SP in such a case. + state is set to STMT_INITIALIZED_FOR_SP even in case of "table exists" + error situation. Why is this necessary? A useful pointer would be to note how PREPARE/EXECUTE uses functions like select_like_stmt_test to implement @@ -454,12 +490,10 @@ bool sp_lex_instr::reset_lex_and_exec_core(THD *thd, */ bool reprepare_error= - rc && thd->get_stmt_da()->sql_errno() == ER_NEED_REPREPARE; - bool is_create_table_select= - thd->lex && thd->lex->sql_command == SQLCOM_CREATE_TABLE && - thd->lex->select_lex.item_list.elements > 0; + rc && thd->is_error() && + thd->get_stmt_da()->sql_errno() == ER_NEED_REPREPARE; - if (reprepare_error || is_create_table_select) + if (reprepare_error || sp_instr_error_handler.cts_table_exists_error) thd->stmt_arena->state= Query_arena::STMT_INITIALIZED_FOR_SP; else if (!rc || !thd->is_error() || (thd->get_stmt_da()->sql_errno() != ER_CANT_REOPEN_TABLE && diff --git a/sql/table.cc b/sql/table.cc index f9f533c0563a..fe3c9ea0cbeb 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -4201,7 +4201,9 @@ bool TABLE_LIST::prep_check_option(THD *thd, uint8 check_opt_type) void TABLE_LIST::hide_view_error(THD *thd) { - if (thd->killed || thd->get_internal_handler()) + if (thd->killed || + (thd->lex->sql_command == SQLCOM_SHOW_CREATE && + thd->get_internal_handler())) return; /* Hide "Unknown column" or "Unknown function" error */ DBUG_ASSERT(thd->is_error()); From 4b4dd7a54f430bedb78517ba6e13f12971d0bff4 Mon Sep 17 00:00:00 2001 From: Bharathy Satish Date: Fri, 24 Nov 2017 10:42:08 +0100 Subject: [PATCH 0209/1221] WL#9769: Keyring migration tool and new commercial keyring_encrypted_file plugin. New Keyring plugin called keyring_encrypted_file plugin is introduced which will store keyring data in file local to server host which is encrypted using a password. This plugin when installed must be provided with a password which will be used to decrypt the file to read the contents of file. Similarly this password will be used to encrypt the data which needs to be stored in the data file. This WL also introduces keyring migration tool which is used to migrate keys from one keyring plugin to another. This tool is embedded in mysql server, this when mysqld is invoked with migration specific options, mysql server will ast like a migration tool. --- include/mysql/plugin_keyring.h | 79 +++- include/mysql/plugin_keyring.h.pp | 3 + libmysql/CMakeLists.txt | 2 +- .../include/check_keys_after_migration.inc | 38 ++ .../generate_keys_before_migration.inc | 42 ++ mysql-test/r/mysqld--help-notwin.result | 26 ++ mysql-test/r/mysqld--help-win.result | 26 ++ .../suite/perfschema/r/show_sanity.result | 2 + mysql-test/suite/sys_vars/r/all_vars.result | 2 + packaging/deb-in/CMakeLists.txt | 3 + packaging/rpm-oel/mysql.spec.in | 5 + packaging/rpm-sles/mysql.spec.in | 5 + plugin/keyring/CMakeLists.txt | 1 + plugin/keyring/common/i_keys_container.h | 17 +- plugin/keyring/common/keyring.h | 48 ++ plugin/keyring/common/keyring_impl.cc | 34 ++ plugin/keyring/common/keys_container.cc | 25 + plugin/keyring/common/keys_container.h | 11 + plugin/keyring/common/keys_iterator.cc | 84 ++++ plugin/keyring/common/keys_iterator.h | 44 ++ plugin/keyring/keyring.cc | 27 +- {libmysql => sql-common}/get_password.c | 2 +- sql/CMakeLists.txt | 2 + sql/keyring_service.cc | 10 +- sql/migrate_keyring.cc | 429 ++++++++++++++++++ sql/migrate_keyring.h | 110 +++++ sql/mysqld.cc | 137 +++++- sql/mysqld.h | 27 +- sql/set_var.cc | 22 +- sql/set_var.h | 4 +- sql/share/errmsg-utf8.txt | 9 + sql/sql_plugin.cc | 207 ++++++--- sql/sql_plugin.h | 12 +- sql/sys_vars.cc | 36 ++ unittest/gunit/keyring/CMakeLists.txt | 3 +- 35 files changed, 1456 insertions(+), 78 deletions(-) create mode 100644 mysql-test/include/check_keys_after_migration.inc create mode 100644 mysql-test/include/generate_keys_before_migration.inc create mode 100644 plugin/keyring/common/keys_iterator.cc create mode 100644 plugin/keyring/common/keys_iterator.h rename {libmysql => sql-common}/get_password.c (98%) create mode 100644 sql/migrate_keyring.cc create mode 100644 sql/migrate_keyring.h diff --git a/include/mysql/plugin_keyring.h b/include/mysql/plugin_keyring.h index 2c40507ea19b..2b94b0ad4a81 100644 --- a/include/mysql/plugin_keyring.h +++ b/include/mysql/plugin_keyring.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2016, 2017 Oracle and/or its affiliates. All rights reserved. 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 @@ -21,7 +21,7 @@ */ #include "plugin.h" -#define MYSQL_KEYRING_INTERFACE_VERSION 0x0100 +#define MYSQL_KEYRING_INTERFACE_VERSION 0x0101 /** The descriptor structure for the plugin, that is referred from @@ -105,5 +105,80 @@ struct st_mysql_keyring */ my_bool (*mysql_key_generate)(const char *key_id, const char *key_type, const char *user_id, size_t key_len); + + /** + Keys_iterator object refers to an iterator which is used to iterate + on a list which refers to Key_metadata. Key_metadata hold information + about individual keys keyd_id and user_id. Keys_iterator should be used + in following sequence only. + + void* iterator_ptr; + char key_id[64]= { 0 }; + char user_id[64]= { 0 }; + + plugin_handle->mysql_key_iterator_init(&iterator_ptr); + + if (iterator_ptr == NULL) + report error; + + while (!(plugin_handle->mysql_key_iterator_get_key(iterator_ptr, + key_id, user_id))) + { + Fetch the keys. + Perform operations on the fetched keys. + .. + } + plugin_handle->mysql_key_iterator_deinit(iterator_ptr); + + init() method accepts a void pointer which is the made to point to + Keys_iterator instance. Keys_iterator instance internal pointer points + to Key_metadata list. This list holds information about all keys stored + in the backed end data store of keyring plugin. After call to init() + please check iterator_ptr. + + get_key() method accepts the above iterator_ptr as IN param and then + fills the passes in key_id and user_id with valid values. This can be + used to fetch actual key information. Every call to this method will + change internal pointers to advance to next position, so that the next + call will fetch the next key. + + deinit() method frees all internal pointers along with iterator_ptr. + */ + /** + Initialize an iterator. + + @param[out] key_iterator Iterator used to fetch individual keys + from key_container. + + @return VOID + */ + void (*mysql_key_iterator_init)(void** key_iterator); + + /** + Deinitialize an iterator. + + @param[in] key_iterator Iterator used to fetch individual keys + from key_container. + + @return VOID + */ + void (*mysql_key_iterator_deinit)(void* key_iterator); + + /** + Get details of key. Every call to this service will change + internal pointers to advance to next position, so that the next call + will fetch the next key. In case iterator moves to the end, this service + will return error. + + @param[in] key_iterator Iterator used to fetch individual keys + from key_container. + @param[out] key_id id of the key + @param[out] user_id id of the owner + + @return Operation status + @retval 0 OK + @retval 1 ERROR + */ + bool (*mysql_key_iterator_get_key)(void* key_iterator, char *key_id, char *user_id); }; #endif diff --git a/include/mysql/plugin_keyring.h.pp b/include/mysql/plugin_keyring.h.pp index 96207fa75204..c9753207e9a5 100644 --- a/include/mysql/plugin_keyring.h.pp +++ b/include/mysql/plugin_keyring.h.pp @@ -121,4 +121,7 @@ my_bool (*mysql_key_remove)(const char *key_id, const char *user_id); my_bool (*mysql_key_generate)(const char *key_id, const char *key_type, const char *user_id, size_t key_len); + void (*mysql_key_iterator_init)(void** key_iterator); + void (*mysql_key_iterator_deinit)(void* key_iterator); + bool (*mysql_key_iterator_get_key)(void* key_iterator, char *key_id, char *user_id); }; diff --git a/libmysql/CMakeLists.txt b/libmysql/CMakeLists.txt index 60d3e103c68f..043422b9192c 100644 --- a/libmysql/CMakeLists.txt +++ b/libmysql/CMakeLists.txt @@ -178,13 +178,13 @@ SET(CLIENT_API_FUNCTIONS_UNDOCUMENTED ) SET(CLIENT_SOURCES - get_password.c libmysql.c errmsg.c ../sql-common/client.c ../sql-common/my_time.c ../sql-common/client_plugin.c ../sql-common/client_authentication.cc + ../sql-common/get_password.c ../sql/net_serv.cc ../sql-common/pack.c ../sql/auth/password.c diff --git a/mysql-test/include/check_keys_after_migration.inc b/mysql-test/include/check_keys_after_migration.inc new file mode 100644 index 000000000000..5646ba7ec6b9 --- /dev/null +++ b/mysql-test/include/check_keys_after_migration.inc @@ -0,0 +1,38 @@ +--echo # now master key is migrated +--echo # access to this table should pass +SELECT * FROM T; + +let $wl9769_destination_key1 = `SELECT hex(keyring_key_fetch('$key_name1'))`; +let $wl9769_destination_key2 = `SELECT hex(keyring_key_fetch('$key_name2'))`; +let $wl9769_destination_key3 = `SELECT hex(keyring_key_fetch('$key_name3'))`; + +let $wl9769_destination_key1_type = `SELECT keyring_key_type_fetch('$key_name1')`; +let $wl9769_destination_key2_type = `SELECT keyring_key_type_fetch('$key_name2')`; +let $wl9769_destination_key3_type = `SELECT keyring_key_type_fetch('$key_name3')`; + +let $wl9769_destination_key1_len = `SELECT keyring_key_length_fetch('$key_name1')`; +let $wl9769_destination_key2_len = `SELECT keyring_key_length_fetch('$key_name2')`; +let $wl9769_destination_key3_len = `SELECT keyring_key_length_fetch('$key_name3')`; + +--echo check if migration took place correctly +--replace_result $wl9769_destination_key1 $wl9769_source_key1 +eval SELECT '$wl9769_destination_key1' = '$wl9769_source_key1'; +--replace_result $wl9769_destination_key2 $wl9769_source_key2 +eval SELECT '$wl9769_destination_key2' = '$wl9769_source_key2'; +--replace_result $wl9769_destination_key3 $wl9769_source_key3 +eval SELECT '$wl9769_destination_key3' = '$wl9769_source_key3'; + +eval SELECT '$wl9769_destination_key1_type' = '$wl9769_source_key1_type'; +eval SELECT '$wl9769_destination_key2_type' = '$wl9769_source_key2_type'; +eval SELECT '$wl9769_destination_key3_type' = '$wl9769_source_key3_type'; + +eval SELECT '$wl9769_destination_key1_len' = '$wl9769_source_key1_len'; +eval SELECT '$wl9769_destination_key2_len' = '$wl9769_source_key2_len'; +eval SELECT '$wl9769_destination_key3_len' = '$wl9769_source_key3_len'; + +--replace_regex /[0-9]*-[0-9]*-[0-9]* [0-9]*:[0-9]*:[0-9]*.[0-9]*/key1_timestamp/ +eval SELECT keyring_key_remove('$key_name1'); +--replace_regex /[0-9]*-[0-9]*-[0-9]* [0-9]*:[0-9]*:[0-9]*.[0-9]*/key2_timestamp/ +eval SELECT keyring_key_remove('$key_name2'); +--replace_regex /[0-9]*-[0-9]*-[0-9]* [0-9]*:[0-9]*:[0-9]*.[0-9]*/key3_timestamp/ +eval SELECT keyring_key_remove('$key_name3'); diff --git a/mysql-test/include/generate_keys_before_migration.inc b/mysql-test/include/generate_keys_before_migration.inc new file mode 100644 index 000000000000..1a00e91d592d --- /dev/null +++ b/mysql-test/include/generate_keys_before_migration.inc @@ -0,0 +1,42 @@ + +--echo # create encrypted table with master key generated from source keyring plugin +CREATE TABLE T(i INT) ENCRYPTION='Y'; +INSERT INTO T VALUES (9769); +SELECT * FROM T; + +--replace_regex /\.dll/.so/ +eval INSTALL PLUGIN keyring_udf SONAME '$KEYRING_UDF'; +--replace_regex /\.dll/.so/ +eval CREATE FUNCTION keyring_key_generate RETURNS INTEGER SONAME '$KEYRING_UDF'; +--replace_regex /\.dll/.so/ +eval CREATE FUNCTION keyring_key_store RETURNS INTEGER SONAME '$KEYRING_UDF'; +--replace_regex /\.dll/.so/ +eval CREATE FUNCTION keyring_key_fetch RETURNS STRING SONAME '$KEYRING_UDF'; +--replace_regex /\.dll/.so/ +eval CREATE FUNCTION keyring_key_type_fetch RETURNS STRING SONAME '$KEYRING_UDF'; +--replace_regex /\.dll/.so/ +eval CREATE FUNCTION keyring_key_length_fetch RETURNS INTEGER SONAME '$KEYRING_UDF'; +--replace_regex /\.dll/.so/ +eval CREATE FUNCTION keyring_key_remove RETURNS INTEGER SONAME '$KEYRING_UDF'; + +--let $key_name1=`select concat("key_", current_timestamp(6))` +--replace_regex /[0-9]*-[0-9]*-[0-9]* [0-9]*:[0-9]*:[0-9]*.[0-9]*/key1_timestamp/ +--eval SELECT keyring_key_generate('$key_name1','AES',16) +--let $key_name2=`select concat("key_", current_timestamp(6))` +--replace_regex /[0-9]*-[0-9]*-[0-9]* [0-9]*:[0-9]*:[0-9]*.[0-9]*/key2_timestamp/ +--eval SELECT keyring_key_generate('$key_name2','AES',24) +--let $key_name3=`select concat("key_", current_timestamp(6))` +--replace_regex /[0-9]*-[0-9]*-[0-9]* [0-9]*:[0-9]*:[0-9]*.[0-9]*/key3_timestamp/ +--eval SELECT keyring_key_generate('$key_name3','AES',32) + +let $wl9769_source_key1 = `SELECT hex(keyring_key_fetch('$key_name1'))`; +let $wl9769_source_key2 = `SELECT hex(keyring_key_fetch('$key_name2'))`; +let $wl9769_source_key3 = `SELECT hex(keyring_key_fetch('$key_name3'))`; + +let $wl9769_source_key1_type = `SELECT keyring_key_type_fetch('$key_name1')`; +let $wl9769_source_key2_type = `SELECT keyring_key_type_fetch('$key_name2')`; +let $wl9769_source_key3_type = `SELECT keyring_key_type_fetch('$key_name3')`; + +let $wl9769_source_key1_len = `SELECT keyring_key_length_fetch('$key_name1')`; +let $wl9769_source_key2_len = `SELECT keyring_key_length_fetch('$key_name2')`; +let $wl9769_source_key3_len = `SELECT keyring_key_length_fetch('$key_name3')`; diff --git a/mysql-test/r/mysqld--help-notwin.result b/mysql-test/r/mysqld--help-notwin.result index 07aafeb10053..3df5f5dcb20b 100644 --- a/mysql-test/r/mysqld--help-notwin.result +++ b/mysql-test/r/mysqld--help-notwin.result @@ -361,6 +361,26 @@ The following options may be given as the first argument: The default size of key cache blocks --key-cache-division-limit=# The minimum percentage of warm blocks in key cache + --keyring-migration-destination=name + Keyring plugin to which the keys are migrated to. This + option must be specified along with + --keyring-migration-source. + --keyring-migration-host=name + Connect to host. + --keyring-migration-password[=name] + Password to use when connecting to server during keyring + migration. If password value is not specified then it + will be asked from the tty. + --keyring-migration-port=# + Port number to use for connection. + --keyring-migration-socket=name + The socket file to use for connection. + --keyring-migration-source=name + Keyring plugin from where the keys needs to be migrated + to. This option must be specified along with + --keyring-migration-destination. + --keyring-migration-user=name + User to login to server. -L, --language=name Client error messages in given language. May be given as a full path. Deprecated. Use --lc-messages-dir instead. --large-pages Enable support for large pages @@ -1335,6 +1355,12 @@ key-buffer-size 8388608 key-cache-age-threshold 300 key-cache-block-size 1024 key-cache-division-limit 100 +keyring-migration-destination (No default value) +keyring-migration-host (No default value) +keyring-migration-port 0 +keyring-migration-socket (No default value) +keyring-migration-source (No default value) +keyring-migration-user (No default value) language MYSQL_SHAREDIR/ large-pages FALSE lc-messages en_US diff --git a/mysql-test/r/mysqld--help-win.result b/mysql-test/r/mysqld--help-win.result index 732af1a42094..3ed3d66733f3 100644 --- a/mysql-test/r/mysqld--help-win.result +++ b/mysql-test/r/mysqld--help-win.result @@ -360,6 +360,26 @@ The following options may be given as the first argument: The default size of key cache blocks --key-cache-division-limit=# The minimum percentage of warm blocks in key cache + --keyring-migration-destination=name + Keyring plugin to which the keys are migrated to. This + option must be specified along with + --keyring-migration-source. + --keyring-migration-host=name + Connect to host. + --keyring-migration-password[=name] + Password to use when connecting to server during keyring + migration. If password value is not specified then it + will be asked from the tty. + --keyring-migration-port=# + Port number to use for connection. + --keyring-migration-socket=name + The socket file to use for connection. + --keyring-migration-source=name + Keyring plugin from where the keys needs to be migrated + to. This option must be specified along with + --keyring-migration-destination. + --keyring-migration-user=name + User to login to server. -L, --language=name Client error messages in given language. May be given as a full path. Deprecated. Use --lc-messages-dir instead. --lc-messages=name Set the language used for the error messages. @@ -1333,6 +1353,12 @@ key-buffer-size 8388608 key-cache-age-threshold 300 key-cache-block-size 1024 key-cache-division-limit 100 +keyring-migration-destination (No default value) +keyring-migration-host (No default value) +keyring-migration-port 0 +keyring-migration-socket (No default value) +keyring-migration-source (No default value) +keyring-migration-user (No default value) language MYSQL_SHAREDIR/ lc-messages en_US lc-messages-dir MYSQL_SHAREDIR/ diff --git a/mysql-test/suite/perfschema/r/show_sanity.result b/mysql-test/suite/perfschema/r/show_sanity.result index 6a8021d8e0c5..fa2f2bfa3b9b 100644 --- a/mysql-test/suite/perfschema/r/show_sanity.result +++ b/mysql-test/suite/perfschema/r/show_sanity.result @@ -410,6 +410,7 @@ SHOW_MODE SOURCE VARIABLE_NAME 5.6 I_S.SESSION_VARIABLES GTID_EXECUTED 5.6 I_S.SESSION_VARIABLES INNODB_DEADLOCK_DETECT 5.6 I_S.SESSION_VARIABLES INNODB_STATS_INCLUDE_DELETE_MARKED +5.6 I_S.SESSION_VARIABLES KEYRING_OPERATIONS 5.6 I_S.SESSION_VARIABLES LOG_STATEMENTS_UNSAFE_FOR_BINLOG 5.6 I_S.SESSION_VARIABLES TLS_VERSION @@ -435,6 +436,7 @@ SHOW_MODE SOURCE VARIABLE_NAME 5.6 I_S.SESSION_VARIABLES GTID_EXECUTED 5.6 I_S.SESSION_VARIABLES INNODB_DEADLOCK_DETECT 5.6 I_S.SESSION_VARIABLES INNODB_STATS_INCLUDE_DELETE_MARKED +5.6 I_S.SESSION_VARIABLES KEYRING_OPERATIONS 5.6 I_S.SESSION_VARIABLES LOG_STATEMENTS_UNSAFE_FOR_BINLOG 5.6 I_S.SESSION_VARIABLES TLS_VERSION diff --git a/mysql-test/suite/sys_vars/r/all_vars.result b/mysql-test/suite/sys_vars/r/all_vars.result index 8cd456dcaa6f..5ddc39a3594c 100644 --- a/mysql-test/suite/sys_vars/r/all_vars.result +++ b/mysql-test/suite/sys_vars/r/all_vars.result @@ -15,6 +15,8 @@ left join t1 on variable_name=test_name where test_name is null ORDER BY variabl There should be *no* variables listed below: DISABLED_STORAGE_ENGINES DISABLED_STORAGE_ENGINES +KEYRING_OPERATIONS +KEYRING_OPERATIONS TLS_VERSION TLS_VERSION drop table t1; diff --git a/packaging/deb-in/CMakeLists.txt b/packaging/deb-in/CMakeLists.txt index 753ffbc367e9..6ee1b39d78cb 100644 --- a/packaging/deb-in/CMakeLists.txt +++ b/packaging/deb-in/CMakeLists.txt @@ -65,6 +65,7 @@ debian/extra/authentication_ldap_sasl-plugin debian/extra/authentication_ldap_simple-plugin debian/extra/firewall-plugin debian/extra/keyring_okv-plugin +debian/extra/keyring_encrypted_file-plugin debian/extra/openssl_udf-plugin debian/extra/thread_pool-plugin ") @@ -75,6 +76,7 @@ usr/lib/mysql/plugin/authentication_pam.so usr/lib/mysql/plugin/authentication_ldap_sasl.so usr/lib/mysql/plugin/authentication_ldap_simple.so usr/lib/mysql/plugin/keyring_okv.so +usr/lib/mysql/plugin/keyring_encrypted_file.so usr/lib/mysql/plugin/openssl_udf.so usr/lib/mysql/plugin/thread_pool.so usr/lib/mysql/plugin/firewall.so @@ -87,6 +89,7 @@ usr/lib/mysql/plugin/debug/authentication_pam.so usr/lib/mysql/plugin/debug/authentication_ldap_sasl.so usr/lib/mysql/plugin/debug/authentication_ldap_simple.so usr/lib/mysql/plugin/debug/keyring_okv.so +usr/lib/mysql/plugin/debug/keyring_encrypted_file.so usr/lib/mysql/plugin/debug/openssl_udf.so usr/lib/mysql/plugin/debug/thread_pool.so usr/lib/mysql/plugin/debug/firewall.so diff --git a/packaging/rpm-oel/mysql.spec.in b/packaging/rpm-oel/mysql.spec.in index 0ec1de20982b..3f9d14c6ba96 100644 --- a/packaging/rpm-oel/mysql.spec.in +++ b/packaging/rpm-oel/mysql.spec.in @@ -1016,6 +1016,7 @@ fi %attr(755, root, root) %{_libdir}/mysql/plugin/authentication_ldap_sasl.so %attr(755, root, root) %{_libdir}/mysql/plugin/authentication_ldap_simple.so %attr(755, root, root) %{_libdir}/mysql/plugin/keyring_okv.so +%attr(755, root, root) %{_libdir}/mysql/plugin/keyring_encrypted_file.so %attr(755, root, root) %{_libdir}/mysql/plugin/thread_pool.so %attr(755, root, root) %{_libdir}/mysql/plugin/openssl_udf.so %attr(755, root, root) %{_libdir}/mysql/plugin/firewall.so @@ -1025,6 +1026,7 @@ fi %attr(755, root, root) %{_libdir}/mysql/plugin/debug/authentication_ldap_sasl.so %attr(755, root, root) %{_libdir}/mysql/plugin/debug/authentication_ldap_simple.so %attr(755, root, root) %{_libdir}/mysql/plugin/debug/keyring_okv.so +%attr(755, root, root) %{_libdir}/mysql/plugin/debug/keyring_encrypted_file.so %attr(755, root, root) %{_libdir}/mysql/plugin/debug/thread_pool.so %attr(755, root, root) %{_libdir}/mysql/plugin/debug/openssl_udf.so %attr(755, root, root) %{_libdir}/mysql/plugin/debug/firewall.so @@ -1360,6 +1362,9 @@ fi %endif # cluster %changelog +* Wed Nov 08 2017 Bharathy Satish - 5.7.21-1 - Remove obsoleted mysqltest man pages diff --git a/packaging/rpm-sles/mysql.spec.in b/packaging/rpm-sles/mysql.spec.in index 6a22ee8613ad..7978558909e8 100644 --- a/packaging/rpm-sles/mysql.spec.in +++ b/packaging/rpm-sles/mysql.spec.in @@ -838,6 +838,7 @@ fi %attr(755, root, root) %{_libdir}/mysql/plugin/authentication_ldap_sasl.so %attr(755, root, root) %{_libdir}/mysql/plugin/authentication_ldap_simple.so %attr(755, root, root) %{_libdir}/mysql/plugin/keyring_okv.so +%attr(755, root, root) %{_libdir}/mysql/plugin/keyring_encrypted_file.so %attr(755, root, root) %{_libdir}/mysql/plugin/thread_pool.so %attr(755, root, root) %{_libdir}/mysql/plugin/openssl_udf.so %attr(755, root, root) %{_libdir}/mysql/plugin/firewall.so @@ -847,6 +848,7 @@ fi %attr(755, root, root) %{_libdir}/mysql/plugin/debug/authentication_ldap_sasl.so %attr(755, root, root) %{_libdir}/mysql/plugin/debug/authentication_ldap_simple.so %attr(755, root, root) %{_libdir}/mysql/plugin/debug/keyring_okv.so +%attr(755, root, root) %{_libdir}/mysql/plugin/debug/keyring_encrypted_file.so %attr(755, root, root) %{_libdir}/mysql/plugin/debug/thread_pool.so %attr(755, root, root) %{_libdir}/mysql/plugin/debug/openssl_udf.so %attr(755, root, root) %{_libdir}/mysql/plugin/debug/firewall.so @@ -1165,6 +1167,9 @@ fi %endif # cluster %changelog +* Wed 08 2017 Bharathy Satish - 5.7.21-1 +- Add keyring_encrypted_file.so plugin + * Tue Oct 31 2017 Bjorn Munch - 5.7.21-1 - Remove obsoleted mysqltest man pages diff --git a/plugin/keyring/CMakeLists.txt b/plugin/keyring/CMakeLists.txt index 7e699352c050..2fa64797ffcc 100644 --- a/plugin/keyring/CMakeLists.txt +++ b/plugin/keyring/CMakeLists.txt @@ -22,6 +22,7 @@ SET( KEYRING_FILE_SOURCES common/keyring_key.cc common/keys_container.cc + common/keys_iterator.cc common/keyring_impl.cc keyring.cc hash_to_buffer_serializer.cc diff --git a/plugin/keyring/common/i_keys_container.h b/plugin/keyring/common/i_keys_container.h index f0cef327809e..e1b7128eaf8a 100644 --- a/plugin/keyring/common/i_keys_container.h +++ b/plugin/keyring/common/i_keys_container.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2016, 2017 Oracle and/or its affiliates. All rights reserved. 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 @@ -18,9 +18,23 @@ #include "i_keyring_key.h" #include "i_keyring_io.h" +#include namespace keyring { +struct Key_metadata +{ + std::string *id; + std::string *user; + + Key_metadata() {} + Key_metadata(std::string *id, std::string *user) + { + this->id= id; + this->user= user; + } +}; + class IKeys_container : public Keyring_alloc { public: @@ -29,6 +43,7 @@ class IKeys_container : public Keyring_alloc virtual IKey* fetch_key(IKey *key)= 0; virtual my_bool remove_key(IKey *key)= 0; virtual std::string get_keyring_storage_url()= 0; + virtual std::vector get_keys_metadata()= 0; virtual ~IKeys_container() {}; }; diff --git a/plugin/keyring/common/keyring.h b/plugin/keyring/common/keyring.h index 519163da6428..a6e1598cb5aa 100644 --- a/plugin/keyring/common/keyring.h +++ b/plugin/keyring/common/keyring.h @@ -21,9 +21,11 @@ #include #include #include "keys_container.h" +#include "keys_iterator.h" #include "keyring_memory.h" using keyring::IKeys_container; +using keyring::Keys_iterator; using keyring::IKeyring_io; using keyring::ILogger; using keyring::IKey; @@ -59,6 +61,10 @@ my_bool mysql_key_fetch(boost::movelib::unique_ptr key_to_fetch, char **ke my_bool mysql_key_store(boost::movelib::unique_ptr key_to_store); my_bool mysql_key_remove(boost::movelib::unique_ptr key_to_remove); +my_bool mysql_keyring_iterator_init(Keys_iterator *); +void mysql_keyring_iterator_deinit(Keys_iterator *); +bool mysql_keyring_iterator_get_key(Keys_iterator *, char *key_id, char *user_id); + my_bool check_key_for_writing(IKey* key, std::string error_for); void log_operation_error(const char *failed_operation, const char *plugin_name); @@ -113,4 +119,46 @@ my_bool mysql_key_remove(const char *key_id, const char *user_id, } } +template +bool mysql_key_iterator_init(Keys_iterator *key_iterator, const char *plugin_name) +{ + try + { + return mysql_keyring_iterator_init(key_iterator); + } + catch (...) + { + log_operation_error("iterator init", plugin_name); + return TRUE; + } +} + +template +void mysql_key_iterator_deinit(Keys_iterator *key_iterator, const char *plugin_name) +{ + try + { + mysql_keyring_iterator_deinit(key_iterator); + } + catch (...) + { + log_operation_error("iterator deinit", plugin_name); + } +} + +template +bool mysql_key_iterator_get_key(Keys_iterator *key_iterator, char *key_id, char *user_id, + const char *plugin_name) +{ + try + { + return mysql_keyring_iterator_get_key(key_iterator, key_id, user_id); + } + catch (...) + { + log_operation_error("iterator get_key", plugin_name); + return TRUE; + } +} + #endif //MYSQL_KEYRING_H diff --git a/plugin/keyring/common/keyring_impl.cc b/plugin/keyring/common/keyring_impl.cc index a4003475abcb..a6aa3c71dfab 100644 --- a/plugin/keyring/common/keyring_impl.cc +++ b/plugin/keyring/common/keyring_impl.cc @@ -224,3 +224,37 @@ my_bool mysql_key_remove(boost::movelib::unique_ptr key_to_remove) mysql_rwlock_unlock(&LOCK_keyring); return retval; } + +my_bool mysql_keyring_iterator_init(Keys_iterator *key_iterator) +{ + mysql_rwlock_rdlock(&LOCK_keyring); + key_iterator->init(); + mysql_rwlock_unlock(&LOCK_keyring); + return false; +} + +void mysql_keyring_iterator_deinit(Keys_iterator *key_iterator) +{ + key_iterator->deinit(); +} + +bool mysql_keyring_iterator_get_key(Keys_iterator *key_iterator, + char *key_id, char *user_id) +{ + keyring::Key_metadata *key_loaded= NULL; + bool error= key_iterator->get_key(&key_loaded); + if (error == FALSE && key_loaded != NULL) + { + if (key_id) + strcpy(key_id, key_loaded->id->c_str()); + if (user_id) + strcpy(user_id, key_loaded->user->c_str()); + delete key_loaded; + } + else if (error == FALSE && key_loaded == NULL) + { + /* no keys exists or all keys are read */ + return TRUE; + } + return error; +} diff --git a/plugin/keyring/common/keys_container.cc b/plugin/keyring/common/keys_container.cc index f5250a097a10..c14826f772ad 100644 --- a/plugin/keyring/common/keys_container.cc +++ b/plugin/keyring/common/keys_container.cc @@ -72,10 +72,18 @@ std::string Keys_container::get_keyring_storage_url() return keyring_storage_url; } +void Keys_container::store_keys_metadata(IKey *key) +{ + /* if key metadata not present store it */ + Key_metadata km(key->get_key_id(), key->get_user_id()); + keys_metadata.push_back(km); +} + my_bool Keys_container::store_key_in_hash(IKey *key) { if (my_hash_insert(keys_hash, (uchar *) key)) return TRUE; + store_keys_metadata(key); return FALSE; } @@ -128,12 +136,29 @@ IKey*Keys_container::fetch_key(IKey *key) return key; } +bool Keys_container::remove_keys_metadata(IKey *key) +{ + Key_metadata src(key->get_key_id(), key->get_user_id()); + std::vector::iterator it= keys_metadata.begin(); + while(it != keys_metadata.end()) + { + if (src.id == it->id && src.user == it->user) + { + keys_metadata.erase(it); + return false; + } + ++it; + } + return true; +} + my_bool Keys_container::remove_key_from_hash(IKey *key) { my_bool retVal= TRUE; keys_hash->free= NULL; //Prevent my_hash_delete from removing key from memory retVal= my_hash_delete(keys_hash, reinterpret_cast(key)); keys_hash->free= free_hash_key; + remove_keys_metadata(key); return retVal; } diff --git a/plugin/keyring/common/keys_container.h b/plugin/keyring/common/keys_container.h index 7984c0ee1eec..56cedeffd580 100644 --- a/plugin/keyring/common/keys_container.h +++ b/plugin/keyring/common/keys_container.h @@ -25,12 +25,17 @@ #include "i_keys_container.h" #include "keyring_memory.h" +#include + namespace keyring { extern "C" MYSQL_PLUGIN_IMPORT CHARSET_INFO *system_charset_info; class Keys_container : public IKeys_container { +private: + bool remove_keys_metadata(IKey *key); + void store_keys_metadata(IKey *key); public: Keys_container(ILogger* logger); my_bool init(IKeyring_io* keyring_io, std::string keyring_storage_url); @@ -38,6 +43,11 @@ class Keys_container : public IKeys_container IKey* fetch_key(IKey *key); my_bool remove_key(IKey *key); std::string get_keyring_storage_url(); + std::vector get_keys_metadata() + { + return keys_metadata; + } + ~Keys_container(); @@ -60,6 +70,7 @@ class Keys_container : public IKeys_container virtual my_bool flush_to_storage(IKey *key, Key_operation operation); HASH *keys_hash; + std::vector keys_metadata; ILogger *logger; IKeyring_io *keyring_io; std::string keyring_storage_url; diff --git a/plugin/keyring/common/keys_iterator.cc b/plugin/keyring/common/keys_iterator.cc new file mode 100644 index 000000000000..1c3deff785e2 --- /dev/null +++ b/plugin/keyring/common/keys_iterator.cc @@ -0,0 +1,84 @@ +/* Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + + 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 */ + +#include "keys_iterator.h" +#include "keyring.h" + +namespace keyring { + +/** + Standard Constructor. +*/ +Keys_iterator::Keys_iterator(ILogger* logger) + : logger(logger) +{ +} + +/** + This function initiates the internal pointers to point to + begining of the first element of keys metadata. +*/ +void Keys_iterator::init() +{ + key_metadata_list= keys->get_keys_metadata(); + key_metadata_list_iterator= key_metadata_list.begin(); +} + +/** + Call to this function will advance internal pointers point to correct + key data and return the key information. If there is no more keys to + fetch then this function would return NULL. + + @param [out] km Refers to the fetched key from backend + store. This will be NULL if there is no + key to fetch. + + @return 0 Success + @return 1 Failure + +*/ +bool Keys_iterator::get_key(Key_metadata **km) +{ + /* if list is empty */ + if (key_metadata_list_iterator == key_metadata_list.end()) + { + *km= NULL; + return false; + } + else + { + boost::movelib::unique_ptr key_meta(new Key_metadata()); + key_meta->id= key_metadata_list_iterator->id; + key_meta->user= key_metadata_list_iterator->user; + *km= key_meta.release(); + } + key_metadata_list_iterator++; + return false; +} + +/** + Release all internal pointers. +*/ +void Keys_iterator::deinit() +{ + this->logger= NULL; + this->key_metadata_list.clear(); +} + +Keys_iterator::~Keys_iterator() +{ +} + +} diff --git a/plugin/keyring/common/keys_iterator.h b/plugin/keyring/common/keys_iterator.h new file mode 100644 index 000000000000..6f2ba13b3084 --- /dev/null +++ b/plugin/keyring/common/keys_iterator.h @@ -0,0 +1,44 @@ +/* Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + + 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 */ + +#ifndef MYSQL_KEYS_ITERATOR_H +#define MYSQL_KEYS_ITERATOR_H + +#include "i_keys_container.h" +#include "logger.h" +#include + +namespace keyring { + +class Keys_iterator +{ +public: + Keys_iterator() {}; + Keys_iterator(ILogger* logger); + void init(void); + bool get_key(Key_metadata **km); + void deinit(void); + + ~Keys_iterator(void); +public: + ILogger *logger; + std::vector key_metadata_list; + std::vector::iterator key_metadata_list_iterator; +}; + +}//namespace keyring + +#endif //MYSQL_KEYS_ITERATOR_H + diff --git a/plugin/keyring/keyring.cc b/plugin/keyring/keyring.cc index 093bc2d1348b..c08d7153605c 100644 --- a/plugin/keyring/keyring.cc +++ b/plugin/keyring/keyring.cc @@ -26,6 +26,7 @@ using keyring::Buffered_file_io; using keyring::Keys_container; +using keyring::Keys_iterator; using keyring::Logger; mysql_rwlock_t LOCK_keyring; @@ -184,6 +185,27 @@ my_bool mysql_key_generate(const char *key_id, const char *key_type, } } +static void mysql_key_iterator_init(void **key_iterator) +{ + *key_iterator= new Keys_iterator(logger.get()); + mysql_key_iterator_init(static_cast(*key_iterator), + "keyring_file"); +} + +static void mysql_key_iterator_deinit(void *key_iterator) +{ + mysql_key_iterator_deinit(static_cast(key_iterator), + "keyring_file"); + delete static_cast(key_iterator); +} + +static bool mysql_key_iterator_get_key(void *key_iterator, + char *key_id, char *user_id) +{ + return mysql_key_iterator_get_key(static_cast(key_iterator), + key_id, user_id, "keyring_file"); +} + /* Plugin type-specific descriptor */ static struct st_mysql_keyring keyring_descriptor= { @@ -191,7 +213,10 @@ static struct st_mysql_keyring keyring_descriptor= mysql_key_store, mysql_key_fetch, mysql_key_remove, - mysql_key_generate + mysql_key_generate, + mysql_key_iterator_init, + mysql_key_iterator_deinit, + mysql_key_iterator_get_key }; mysql_declare_plugin(keyring_file) diff --git a/libmysql/get_password.c b/sql-common/get_password.c similarity index 98% rename from libmysql/get_password.c rename to sql-common/get_password.c index d904fbe8922a..ed0d6e8dace2 100644 --- a/libmysql/get_password.c +++ b/sql-common/get_password.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. 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 diff --git a/sql/CMakeLists.txt b/sql/CMakeLists.txt index ba204b6434ab..49d502ae277d 100644 --- a/sql/CMakeLists.txt +++ b/sql/CMakeLists.txt @@ -119,6 +119,7 @@ SET(SQL_SHARED_SOURCES locking_service.cc log.cc mdl.cc + migrate_keyring.cc my_decimal.cc net_serv.cc opt_costconstantcache.cc @@ -258,6 +259,7 @@ SET(SQL_SOURCE ../libmysql/errmsg.c ../sql-common/client.c ../sql-common/client_plugin.c + ../sql-common/get_password.c ../sql-common/my_time.c ../sql-common/my_user.c ../sql-common/pack.c diff --git a/sql/keyring_service.cc b/sql/keyring_service.cc index c5f10b67af30..c145565934db 100644 --- a/sql/keyring_service.cc +++ b/sql/keyring_service.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2016 Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2016, 2017 Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as @@ -16,7 +16,7 @@ #include "m_ctype.h" /* my_charset_utf8_bin */ #include /* keyring plugin */ - +#include "set_var.h" #include "strfunc.h" #include "sql_string.h" #include "sql_plugin.h" @@ -127,6 +127,8 @@ int my_key_store(const char *key_id, const char *key_type, const char *user_id, key_data.user_id= user_id; key_data.key_to_store= key; key_data.key_len_to_store= key_len; + if (keyring_access_test()) + return 1; plugin_foreach(current_thd, key_store, MYSQL_KEYRING_PLUGIN, &key_data); return key_data.result; } @@ -136,6 +138,8 @@ int my_key_remove(const char *key_id, const char *user_id) Key_data key_data; key_data.key_id= key_id; key_data.user_id= user_id; + if (keyring_access_test()) + return 1; plugin_foreach(current_thd, key_remove, MYSQL_KEYRING_PLUGIN, &key_data); return key_data.result; } @@ -149,6 +153,8 @@ int my_key_generate(const char *key_id, const char *key_type, key_data.key_type_to_store= key_type; key_data.user_id= user_id; key_data.key_len_to_store= key_len; + if (keyring_access_test()) + return 1; plugin_foreach(current_thd, key_generate, MYSQL_KEYRING_PLUGIN, &key_data); return key_data.result; } diff --git a/sql/migrate_keyring.cc b/sql/migrate_keyring.cc new file mode 100644 index 000000000000..45b427c7fcdf --- /dev/null +++ b/sql/migrate_keyring.cc @@ -0,0 +1,429 @@ +/* Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + + 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 */ + +#include "log.h" +#include "migrate_keyring.h" +#include "mysqld.h" +#include "mysqld_error.h" +#include "sql_plugin.h" // plugin_early_load_one +#include "violite.h" + +/** + Standard constructor +*/ + +Migrate_keyring::Migrate_keyring() +{ + m_source_plugin_handle= NULL; + m_destination_plugin_handle= NULL; + mysql= NULL; +} + +/** + This function does the following: + 1. Read command line arguments specific to migration operation + 2. Get plugin_dir value. + 3. Get a connection handle by connecting to server. + + @param [in] argc Pointer to argc of original program + @param [in] argv Pointer to argv of original program + @param [in] source_plugin Pointer to source plugin option + @param [in] destination_plugin Pointer to destination plugin option + @param [in] user User to login to server + @param [in] host Host on which to connect to server + @param [in] password Password used to connect to server + @param [in] socket The socket file to use for connection + @param [in] port Port number to use for connection + + @return 0 Success + @return 1 Failure + +*/ +bool Migrate_keyring::init(int argc, + char **argv, + char *source_plugin, + char *destination_plugin, + char *user, char *host, + char *password, char *socket, + ulong port) +{ + DBUG_ENTER("Migrate_keyring::init"); + + my_option migration_options[]= { + {"basedir", 0, "", &mysql_home_ptr, 0, + 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, + {"plugin_dir", 0, "", &opt_plugin_dir_ptr, 0, + 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, + + {0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0} + }; + std::size_t found= std::string::npos; + string equal("="); + string so(".so"); + string dll(".dll"); + + m_argc= argc; + m_argv= argv; + + if (!source_plugin) + { + my_error(ER_KEYRING_MIGRATION_FAILURE, MYF(0), + "Invalid --keyring-migration-source option."); + DBUG_RETURN(true); + } + if (!destination_plugin) + { + my_error(ER_KEYRING_MIGRATION_FAILURE, MYF(0), + "Invalid --keyring-migration-destination option."); + DBUG_RETURN(true); + } + m_source_plugin_option= source_plugin; + m_destination_plugin_option= destination_plugin; + + /* extract plugin name from the specified source plugin option */ + if ((found= m_source_plugin_option.find(equal)) != std::string::npos) + m_source_plugin_name= m_source_plugin_option.substr(0, found); + else if ((found= m_source_plugin_option.find(so)) != std::string::npos) + m_source_plugin_name= m_source_plugin_option.substr(0, found); + else if ((found= m_source_plugin_option.find(dll)) != std::string::npos) + m_source_plugin_name= m_source_plugin_option.substr(0, found); + else + { + my_error(ER_KEYRING_MIGRATION_FAILURE, MYF(0), + "Invalid source plugin option value."); + DBUG_RETURN(true); + } + + /* extract plugin name from the specified destination plugin option */ + if ((found= m_destination_plugin_option.find(equal)) != std::string::npos) + m_destination_plugin_name= m_destination_plugin_option.substr(0, found); + else if ((found= m_destination_plugin_option.find(so)) != std::string::npos) + m_destination_plugin_name= m_destination_plugin_option.substr(0, found); + else if ((found= m_destination_plugin_option.find(dll)) != std::string::npos) + m_destination_plugin_name= m_destination_plugin_option.substr(0, found); + else + { + my_error(ER_KEYRING_MIGRATION_FAILURE, MYF(0), + "Invalid destination plugin option value."); + DBUG_RETURN(true); + } + + if (my_handle_options(&m_argc, &m_argv, migration_options, + NULL, NULL, TRUE)) + DBUG_RETURN(true); + /* Restore program name */ + m_argc++; + m_argv--; + + convert_dirname(opt_plugin_dir, opt_plugin_dir_ptr ? opt_plugin_dir_ptr : + PLUGINDIR, NullS); + opt_plugin_dir_ptr= opt_plugin_dir; + + /* if connect options are provided then initiate connection */ + if (migrate_connect_options) + { + ssl_start(); + /* initiate connection */ + mysql= mysql_init(NULL); + + enum mysql_ssl_mode ssl_mode= SSL_MODE_REQUIRED; + mysql_options(mysql, MYSQL_OPT_SSL_MODE, &ssl_mode); + mysql_options(mysql, MYSQL_OPT_CONNECT_ATTR_RESET, 0); + mysql_options4(mysql, MYSQL_OPT_CONNECT_ATTR_ADD, "program_name", + "mysqld"); + mysql_options4(mysql, MYSQL_OPT_CONNECT_ATTR_ADD, "_client_role", + "keyring_migration_tool"); + + if (!mysql_real_connect(mysql, host, user, password, "", + port, socket, 0)) + { + my_error(ER_KEYRING_MIGRATION_FAILURE, MYF(0), + "Connection to server failed. Please check connection specific " + "option values."); + DBUG_RETURN(true); + } + } + DBUG_RETURN(false); +} + +/** + This function does the following in sequence: + 1. Load source plugin. + 2. Load destination plugin. + 3. Disable access to keyring service APIs. + 4. Fetch all keys from source plugin and upon + sucess store in destination plugin. + 5. Enable access to keyring service APIs. + 6. Unload source plugin. + 7. Unload destination plugin. + + NOTE: In case there is any error while fetching keys from source plugin, + this function would remove all keys stored as part of fetch. + + @return 0 Success + @return 1 Failure +*/ +bool Migrate_keyring::execute() +{ + DBUG_ENTER("Migrate_keyring::execute"); + + /* Load source plugin. */ + if (load_plugin(SOURCE_PLUGIN)) + { + my_error(ER_KEYRING_MIGRATION_FAILURE, MYF(0), + "Failed to initialize source keyring"); + DBUG_RETURN(true); + } + + /* Load destination source plugin. */ + if (load_plugin(DESTINATION_PLUGIN)) + { + my_error(ER_KEYRING_MIGRATION_FAILURE, MYF(0), + "Failed to initialize destination keyring"); + DBUG_RETURN(true); + } + + /* Disable access to keyring service APIs */ + if (migrate_connect_options && disable_keyring_operations()) + goto error; + + /* Fetch all keys from source plugin and store into destination plugin. */ + if (fetch_and_store_keys()) + goto error; + + /* Enable access to keyring service APIs */ + if (migrate_connect_options) + enable_keyring_operations(); + + DBUG_RETURN(false); + +error: + /* + Enable keyring_operations in case of error + */ + if (migrate_connect_options) + enable_keyring_operations(); + DBUG_RETURN(true); +} + +/** + Load plugin. + + @param [in] plugin_type Indicates what plugin to be loaded + + @return 0 Success + @return 1 Failure +*/ +bool Migrate_keyring::load_plugin(enum_plugin_type plugin_type) +{ + DBUG_ENTER("Migrate_keyring::load_plugin"); + + char* keyring_plugin= NULL; + char* plugin_name= NULL; + bool is_source_plugin= 0; + + if (plugin_type == SOURCE_PLUGIN) + is_source_plugin= 1; + + if (is_source_plugin) + { + keyring_plugin= const_cast(m_source_plugin_option.c_str()); + plugin_name= const_cast(m_source_plugin_name.c_str()); + } + else + { + keyring_plugin= const_cast(m_destination_plugin_option.c_str()); + plugin_name= const_cast(m_destination_plugin_name.c_str()); + } + + if (plugin_early_load_one(&m_argc, m_argv, keyring_plugin)) + goto error; + else + { + /* set plugin handle */ + plugin_ref plugin; + plugin= my_plugin_lock_by_name(0, to_lex_cstring(plugin_name), + MYSQL_KEYRING_PLUGIN); + if (plugin == NULL) + goto error; + + if (is_source_plugin) + m_source_plugin_handle= (st_mysql_keyring*)plugin_decl(plugin)->info; + else + m_destination_plugin_handle= (st_mysql_keyring*)plugin_decl(plugin)->info; + + plugin_unlock(0, plugin); + } + DBUG_RETURN(false); + +error: + if (is_source_plugin) + my_error(ER_KEYRING_MIGRATION_FAILURE, MYF(0), + "Failed to load source keyring plugin."); + else + my_error(ER_KEYRING_MIGRATION_FAILURE, MYF(0), + "Failed to load destination keyring plugin."); + DBUG_RETURN(true); +} + +/** + This function does the following in sequence: + 1. Initialize key iterator which will make iterator to position itself + inorder to fetch a key. + 2. Using iterator get key ID and user name. + 3. Fetch the key information using key ID and user name. + 4. Store the fetched key into destination plugin. + 5. In case of errors remove keys from destination plugin. + + @return 0 Success + @return 1 Failure +*/ +bool Migrate_keyring::fetch_and_store_keys() +{ + DBUG_ENTER("Migrate_keyring::fetch_keys"); + + bool error= FALSE; + char key_id[MAX_KEY_LEN]= { 0 }; + char user_id[USERNAME_LENGTH]= { 0 }; + void *key=NULL; + size_t key_len= 0; + char *key_type= NULL; + void *key_iterator= NULL; + + m_source_plugin_handle->mysql_key_iterator_init(&key_iterator); + if (key_iterator == NULL) + { + my_error(ER_KEYRING_MIGRATION_FAILURE, MYF(0), + "Initializing source keyring iterator failed."); + DBUG_RETURN(true); + } + while(!error) + { + if (m_source_plugin_handle-> + mysql_key_iterator_get_key(key_iterator, key_id, user_id)) + break; + + /* using key_info metadata fetch the actual key */ + if (m_source_plugin_handle->mysql_key_fetch(key_id, + &key_type, + user_id, + &key, + &key_len)) + { + /* fetch failed */ + string errmsg= "Fetching key (" + string(key_id) + + ") from source plugin failed."; + my_error(ER_KEYRING_MIGRATION_FAILURE, MYF(0), + errmsg.c_str()); + error= TRUE; + } + else /* store the fetched key into destination plugin */ + { + if (m_destination_plugin_handle->mysql_key_store(key_id, key_type, + user_id, key, key_len)) + { + string errmsg= "Storing key (" + string(key_id) + + ") into destination plugin failed."; + my_error(ER_KEYRING_MIGRATION_FAILURE, MYF(0), + errmsg.c_str()); + error= TRUE; + } + else + { + /* + keep track of keys stored in successfully so that they can be + removed in case of error. + */ + Key_info ki(key_id, user_id); + m_source_keys.push_back(ki); + } + } + if (key) + my_free((char*)key); + if (key_type) + my_free(key_type); + } + if (error) + { + /* something went wrong remove keys from destination plugin. */ + while (m_source_keys.size()) + { + Key_info ki= m_source_keys.back(); + if (m_destination_plugin_handle->mysql_key_remove( + ki.m_key_id, ki.m_user_id)) + { + string errmsg= "Removing key (" + string(ki.m_key_id) + + ") from destination plugin failed."; + my_error(ER_KEYRING_MIGRATION_FAILURE, MYF(0), + errmsg.c_str()); + } + m_source_keys.pop_back(); + } + } + m_source_plugin_handle->mysql_key_iterator_deinit(key_iterator); + DBUG_RETURN(error); +} + +/** + Disable variable @@keyring_operations. + + @return 0 Success + @return 1 Failure +*/ +bool Migrate_keyring::disable_keyring_operations() +{ + DBUG_ENTER("Migrate_keyring::disable_keyring_operations"); + const char query[]= "SET GLOBAL KEYRING_OPERATIONS=0"; + if (mysql && mysql_real_query(mysql, query, strlen(query))) + { + my_error(ER_KEYRING_MIGRATION_FAILURE, MYF(0), + "Failed to disable keyring_operations variable."); + DBUG_RETURN(true); + } + DBUG_RETURN(false); +} + +/** + Enable variable @@keyring_operations. + + @return 0 Success + @return 1 Failure +*/ +bool Migrate_keyring::enable_keyring_operations() +{ + DBUG_ENTER("Migrate_keyring::enable_keyring_operations"); + const char query[]= "SET GLOBAL KEYRING_OPERATIONS=1"; + if (mysql && mysql_real_query(mysql, query, strlen(query))) + { + my_error(ER_KEYRING_MIGRATION_FAILURE, MYF(0), + "Failed to enable keyring_operations variable."); + DBUG_RETURN(true); + } + DBUG_RETURN(false); +} + +/** + Standard destructor to close connection handle. +*/ +Migrate_keyring::~Migrate_keyring() +{ + if (mysql) + { + mysql_close(mysql); + mysql= NULL; + if (migrate_connect_options) + vio_end(); + } +} diff --git a/sql/migrate_keyring.h b/sql/migrate_keyring.h new file mode 100644 index 000000000000..13ef6bdb7723 --- /dev/null +++ b/sql/migrate_keyring.h @@ -0,0 +1,110 @@ +/* Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + + 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 */ + +#ifndef MIGRATE_KEYRING_H_INCLUDED +#define MIGRATE_KEYRING_H_INCLUDED + +#include "mysql/plugin_keyring.h" +#include "mysql.h" +#include +#include + +class THD; + +using std::string; + +#define MAX_KEY_LEN 16384 + +enum enum_plugin_type +{ + SOURCE_PLUGIN= 0, DESTINATION_PLUGIN +}; + +class Key_info +{ +public: + Key_info(char *key_id, + char *user_id) + { + memcpy(m_key_id, key_id, strlen(key_id)); + memcpy(m_user_id, user_id, strlen(user_id)); + } + Key_info(const Key_info &ki) + { + memcpy(this->m_key_id, ki.m_key_id, strlen(ki.m_key_id)); + memcpy(this->m_user_id, ki.m_user_id, strlen(ki.m_user_id)); + } +public: + char m_key_id[MAX_KEY_LEN]; + char m_user_id[USERNAME_LENGTH]; +}; + +class Migrate_keyring +{ +public: + /** + Standard constructor. + */ + Migrate_keyring(); + /** + Initialize all needed parameters to proceed with migration process. + */ + bool init(int argc, + char **argv, + char *source_plugin, + char *destination_plugin, + char *user, char *host, char *password, + char *socket, ulong port); + /** + Migrate keys from source keyring to destination keyring. + */ + bool execute(); + /** + Standard destructor + */ + ~Migrate_keyring(); + +private: + /** + Load source or destination plugin. + */ + bool load_plugin(enum_plugin_type plugin_type); + /** + Fetch keys from source plugin and store in destination plugin. + */ + bool fetch_and_store_keys(); + /** + Disable @@keyring_operations variable. + */ + bool disable_keyring_operations(); + /** + Enable @@keyring_operations variable. + */ + bool enable_keyring_operations(); + +private: + int m_argc; + char **m_argv; + string m_source_plugin_option; + string m_destination_plugin_option; + string m_source_plugin_name; + string m_destination_plugin_name; + st_mysql_keyring *m_source_plugin_handle; + st_mysql_keyring *m_destination_plugin_handle; + std::vector m_source_keys; + MYSQL *mysql; +}; + +#endif /* MIGRATE_KEYRING_H_INCLUDED */ diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 1f9274fef0b2..c1f751e5f013 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -116,6 +116,7 @@ #include #include +#include "migrate_keyring.h" // Migrate_keyring #include "mysql_com_server.h" #include "keycaches.h" #include "../storage/myisam/ha_myisam.h" @@ -320,6 +321,14 @@ static enum_server_operational_state server_operational_state= SERVER_BOOTING; ulong log_warnings; bool opt_log_syslog_enable; char *opt_log_syslog_tag= NULL; +char *opt_keyring_migration_user= NULL; +char *opt_keyring_migration_host= NULL; +char *opt_keyring_migration_password= NULL; +char *opt_keyring_migration_socket= NULL; +char *opt_keyring_migration_source= NULL; +char *opt_keyring_migration_destination= NULL; +ulong opt_keyring_migration_port= 0; +bool migrate_connect_options= 0; #ifndef _WIN32 bool opt_log_syslog_include_pid; char *opt_log_syslog_facility; @@ -484,6 +493,7 @@ bool thread_cache_size_specified= false; bool host_cache_size_specified= false; bool table_definition_cache_specified= false; ulong locked_account_connection_count= 0; +bool opt_keyring_operations= TRUE; /** Limit of the total number of prepared statements in the server. @@ -686,6 +696,12 @@ mysql_cond_t COND_start_signal_handler; bool mysqld_server_started= false; +/* + The below lock protects access to global server variable + keyring_operations. +*/ +mysql_mutex_t LOCK_keyring_operations; + File_parser_dummy_hook file_parser_dummy_hook; /* replication parameters, if master_host is not NULL, we are a slave */ @@ -1432,6 +1448,7 @@ static void clean_up_mutexes() mysql_cond_destroy(&COND_start_signal_handler); mysql_mutex_destroy(&LOCK_start_signal_handler); #endif + mysql_mutex_destroy(&LOCK_keyring_operations); } @@ -2937,6 +2954,50 @@ int init_common_variables() if (init_errmessage()) /* Read error messages from file */ return 1; init_client_errs(); + + /* + initiate key migration if any one of the migration specific + options are provided. + */ + if (opt_keyring_migration_source || + opt_keyring_migration_destination || + migrate_connect_options) + { + Migrate_keyring mk; + my_getopt_skip_unknown= TRUE; + if (mk.init(remaining_argc, remaining_argv, + opt_keyring_migration_source, + opt_keyring_migration_destination, + opt_keyring_migration_user, + opt_keyring_migration_host, + opt_keyring_migration_password, + opt_keyring_migration_socket, + opt_keyring_migration_port)) + { + sql_print_error(ER_DEFAULT(ER_KEYRING_MIGRATION_STATUS), + "failed"); + log_error_dest= "stderr"; + flush_error_log_messages(); + return 1; + } + + if (mk.execute()) + { + sql_print_error(ER_DEFAULT(ER_KEYRING_MIGRATION_STATUS), + "failed"); + log_error_dest= "stderr"; + flush_error_log_messages(); + return 1; + } + + my_getopt_skip_unknown= 0; + sql_print_information(ER_DEFAULT(ER_KEYRING_MIGRATION_STATUS), + "sucessfull"); + log_error_dest= "stderr"; + flush_error_log_messages(); + exit(MYSQLD_SUCCESS_EXIT); + } + mysql_client_plugin_init(); if (item_create_init()) return 1; @@ -3200,6 +3261,8 @@ static int init_thread_environment() mysql_cond_init(key_COND_manager, &COND_manager); mysql_mutex_init(key_LOCK_server_started, &LOCK_server_started, MY_MUTEX_INIT_FAST); + mysql_mutex_init(key_LOCK_keyring_operations, + &LOCK_keyring_operations, MY_MUTEX_INIT_FAST); mysql_cond_init(key_COND_server_started, &COND_server_started); mysql_mutex_init(key_LOCK_reset_gtid_table, &LOCK_reset_gtid_table, MY_MUTEX_INIT_FAST); @@ -4025,6 +4088,21 @@ a file name for --log-bin-index option", opt_binlog_index_name); */ tc_log= &tc_log_dummy; + /*Load early plugins */ + if (plugin_register_early_plugins(&remaining_argc, remaining_argv, + opt_help ? + PLUGIN_INIT_SKIP_INITIALIZATION : 0)) + { + sql_print_error("Failed to initialize early plugins."); + unireg_abort(MYSQLD_ABORT_EXIT); + } + /* Load builtin plugins, initialize MyISAM, CSV and InnoDB */ + if (plugin_register_builtin_and_init_core_se(&remaining_argc, + remaining_argv)) + { + sql_print_error("Failed to initialize builtin plugins."); + unireg_abort(MYSQLD_ABORT_EXIT); + } /* Skip reading the plugin table when starting with --help in order to also skip initializing InnoDB. This provides a simpler and more @@ -4032,12 +4110,12 @@ a file name for --log-bin-index option", opt_binlog_index_name); directory does not exist, exists but is empty, exists with InnoDB system tablespaces present etc. */ - if (plugin_init(&remaining_argc, remaining_argv, + if (plugin_register_dynamic_and_init_all(&remaining_argc, remaining_argv, (opt_noacl ? PLUGIN_INIT_SKIP_PLUGIN_TABLE : 0) | (opt_help ? (PLUGIN_INIT_SKIP_INITIALIZATION | PLUGIN_INIT_SKIP_PLUGIN_TABLE) : 0))) { - sql_print_error("Failed to initialize plugins."); + sql_print_error("Failed to initialize dynamic plugins."); unireg_abort(MYSQLD_ABORT_EXIT); } plugins_are_initialized= TRUE; /* Don't separate from init function */ @@ -5567,6 +5645,37 @@ struct my_option my_long_early_options[]= "This option is deprecated along with the partition engine.", &opt_disable_partition_check, &opt_disable_partition_check, 0, GET_BOOL, NO_ARG, TRUE, 0, 0, 0, 0, 0}, + {"keyring-migration-source", OPT_KEYRING_MIGRATION_SOURCE, + "Keyring plugin from where the keys needs to " + "be migrated to. This option must be specified along with " + "--keyring-migration-destination.", + &opt_keyring_migration_source, &opt_keyring_migration_source, + 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, + {"keyring-migration-destination", OPT_KEYRING_MIGRATION_DESTINATION, + "Keyring plugin to which the keys are " + "migrated to. This option must be specified along with " + "--keyring-migration-source.", + &opt_keyring_migration_destination, &opt_keyring_migration_destination, + 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, + {"keyring-migration-user", OPT_KEYRING_MIGRATION_USER, + "User to login to server.", + &opt_keyring_migration_user, &opt_keyring_migration_user, + 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, + {"keyring-migration-host", OPT_KEYRING_MIGRATION_HOST, "Connect to host.", + &opt_keyring_migration_host, &opt_keyring_migration_host, + 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, + {"keyring-migration-password", OPT_KEYRING_MIGRATION_PASSWORD, + "Password to use when connecting to server during keyring migration. " + "If password value is not specified then it will be asked from the tty.", + 0, 0, 0, GET_PASSWORD, OPT_ARG, 0, 0, 0, 0, 0, 0}, + {"keyring-migration-socket", OPT_KEYRING_MIGRATION_SOCKET, + "The socket file to use for connection.", + &opt_keyring_migration_socket, &opt_keyring_migration_socket, + 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, + {"keyring-migration-port", OPT_KEYRING_MIGRATION_PORT, + "Port number to use for connection.", + &opt_keyring_migration_port, &opt_keyring_migration_port, + 0, GET_ULONG, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, { 0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0 } }; @@ -7557,6 +7666,26 @@ mysqld_get_one_option(int optid, case OPT_SHOW_OLD_TEMPORALS: push_deprecated_warn_no_replacement(NULL, "show_old_temporals"); break; + case OPT_KEYRING_MIGRATION_PASSWORD: + if (argument) + { + char *start= argument; + opt_keyring_migration_password= my_strdup(PSI_NOT_INSTRUMENTED, + argument, MYF(MY_FAE)); + while (*argument) *argument++= 'x'; + if (*start) + start[1]= 0; + } + else + opt_keyring_migration_password= get_tty_password(NullS); + migrate_connect_options= 1; + break; + case OPT_KEYRING_MIGRATION_USER: + case OPT_KEYRING_MIGRATION_HOST: + case OPT_KEYRING_MIGRATION_SOCKET: + case OPT_KEYRING_MIGRATION_PORT: + migrate_connect_options= 1; + break; case OPT_ENFORCE_GTID_CONSISTENCY: { const char *wrong_value= @@ -8503,7 +8632,8 @@ PSI_mutex_key key_structure_guard_mutex, key_TABLE_SHARE_LOCK_ha_data, key_LOCK_error_messages, key_LOCK_log_throttle_qni, key_LOCK_query_plan, key_LOCK_thd_query, - key_LOCK_cost_const, key_LOCK_current_cond; + key_LOCK_cost_const, key_LOCK_current_cond, + key_LOCK_keyring_operations; PSI_mutex_key key_RELAYLOG_LOCK_commit; PSI_mutex_key key_RELAYLOG_LOCK_commit_queue; PSI_mutex_key key_RELAYLOG_LOCK_done; @@ -8570,6 +8700,7 @@ static PSI_mutex_info all_server_mutexes[]= { &key_LOCK_sql_slave_skip_counter, "LOCK_sql_slave_skip_counter", PSI_FLAG_GLOBAL}, { &key_LOCK_slave_net_timeout, "LOCK_slave_net_timeout", PSI_FLAG_GLOBAL}, { &key_LOCK_server_started, "LOCK_server_started", PSI_FLAG_GLOBAL}, + { &key_LOCK_keyring_operations, "LOCK_keyring_operations", PSI_FLAG_GLOBAL}, #if !defined(EMBEDDED_LIBRARY) && !defined(_WIN32) { &key_LOCK_socket_listener_active, "LOCK_socket_listener_active", PSI_FLAG_GLOBAL}, { &key_LOCK_start_signal_handler, "LOCK_start_signal_handler", PSI_FLAG_GLOBAL}, diff --git a/sql/mysqld.h b/sql/mysqld.h index 4639fd3f58d6..360f61eacfdf 100644 --- a/sql/mysqld.h +++ b/sql/mysqld.h @@ -323,6 +323,20 @@ extern char *opt_log_syslog_facility; extern uint host_cache_size; extern ulong log_error_verbosity; +extern bool opt_keyring_operations; +extern char *opt_keyring_migration_user; +extern char *opt_keyring_migration_host; +extern char *opt_keyring_migration_password; +extern char *opt_keyring_migration_socket; +extern char *opt_keyring_migration_source; +extern char *opt_keyring_migration_destination; +extern ulong opt_keyring_migration_port; +/** + Variable to check if connection related options are set + as part of keyring migration. +*/ +extern bool migrate_connect_options; + /** System variable show_compatibility_56. */ extern my_bool show_compatibility_56; @@ -413,7 +427,8 @@ extern PSI_mutex_key key_structure_guard_mutex, key_TABLE_SHARE_LOCK_ha_data, key_LOCK_error_messages, key_LOCK_log_throttle_qni, key_LOCK_query_plan, key_LOCK_thd_query, - key_LOCK_cost_const, key_LOCK_current_cond; + key_LOCK_cost_const, key_LOCK_current_cond, + key_LOCK_keyring_operations; extern PSI_mutex_key key_RELAYLOG_LOCK_commit; extern PSI_mutex_key key_RELAYLOG_LOCK_commit_queue; extern PSI_mutex_key key_RELAYLOG_LOCK_done; @@ -824,6 +839,7 @@ extern mysql_rwlock_t LOCK_system_variables_hash; extern mysql_cond_t COND_manager; extern int32 thread_running; extern mysql_mutex_t LOCK_group_replication_handler; +extern mysql_mutex_t LOCK_keyring_operations; extern char *opt_ssl_ca, *opt_ssl_capath, *opt_ssl_cert, *opt_ssl_cipher, *opt_ssl_key, *opt_ssl_crl, *opt_ssl_crlpath, *opt_tls_version; @@ -902,7 +918,14 @@ enum options_mysqld OPT_SHOW_OLD_TEMPORALS, OPT_ENFORCE_GTID_CONSISTENCY, OPT_TRANSACTION_READ_ONLY, - OPT_TRANSACTION_ISOLATION + OPT_TRANSACTION_ISOLATION, + OPT_KEYRING_MIGRATION_SOURCE, + OPT_KEYRING_MIGRATION_DESTINATION, + OPT_KEYRING_MIGRATION_USER, + OPT_KEYRING_MIGRATION_HOST, + OPT_KEYRING_MIGRATION_PASSWORD, + OPT_KEYRING_MIGRATION_SOCKET, + OPT_KEYRING_MIGRATION_PORT }; diff --git a/sql/set_var.cc b/sql/set_var.cc index 8eb2149a392a..69661b4757f4 100644 --- a/sql/set_var.cc +++ b/sql/set_var.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2002, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -667,6 +667,26 @@ int sql_set_variables(THD *thd, List *var_list) DBUG_RETURN(error); } +/** + This function is used to check if key management UDFs like + keying_key_generate/store/remove should proceed or not. If global + variable @@keyring_operations is OFF then above said udfs will fail. + + @return Operation status + @retval 0 OK + @retval 1 ERROR, keyring operations are not allowed + + @sa Sys_keyring_operations +*/ +bool keyring_access_test() +{ + bool keyring_operations; + mysql_mutex_lock(&LOCK_keyring_operations); + keyring_operations= !opt_keyring_operations; + mysql_mutex_unlock(&LOCK_keyring_operations); + return keyring_operations; +} + /***************************************************************************** Functions to handle SET mysql_internal_variable=const_expr *****************************************************************************/ diff --git a/sql/set_var.h b/sql/set_var.h index 0dc8c88569dc..f75b1001adfb 100644 --- a/sql/set_var.h +++ b/sql/set_var.h @@ -1,6 +1,6 @@ #ifndef SET_VAR_INCLUDED #define SET_VAR_INCLUDED -/* Copyright (c) 2002, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2002, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -360,7 +360,7 @@ sys_var *find_sys_var_ex(THD *thd, const char *str, size_t length=0, int sql_set_variables(THD *thd, List *var_list); bool fix_delay_key_write(sys_var *self, THD *thd, enum_var_type type); - +bool keyring_access_test(); sql_mode_t expand_sql_mode(sql_mode_t sql_mode, THD *thd); bool sql_mode_string_representation(THD *thd, sql_mode_t sql_mode, LEX_STRING *ls); void update_parser_max_mem_size(); diff --git a/sql/share/errmsg-utf8.txt b/sql/share/errmsg-utf8.txt index 3189f874d616..0f7e87267fad 100644 --- a/sql/share/errmsg-utf8.txt +++ b/sql/share/errmsg-utf8.txt @@ -7687,6 +7687,15 @@ ER_BINLOG_UNSAFE_XA ER_UDF_ERROR eng "%s UDF failed; %s" +ER_KEYRING_MIGRATION_FAILURE + eng "Can not perform keyring migration : %s" + +ER_KEYRING_ACCESS_DENIED_ERROR 42000 + eng "Access denied; you need %-.128s privileges for this operation"a + +ER_KEYRING_MIGRATION_STATUS + eng "Keyring migration %s." + # # End of 5.7 error messages. # diff --git a/sql/sql_plugin.cc b/sql/sql_plugin.cc index c663c3272ac0..432b4404cfb3 100644 --- a/sql/sql_plugin.cc +++ b/sql/sql_plugin.cc @@ -1379,55 +1379,24 @@ static bool plugin_init_initialize_and_reap() return false; } +/** + Initialize the internals of the plugin system. Allocate required + resources, initialize mutex, etc. -/* - @brief - Initialize plugin infrastructure and load all plugins. - Plugins are loaded in following sequnce: - - Plugin specified through --early-plugin-load - - Mandatory/Built-in Plugins - - Plugins specified through --plugin-load/--plugin-load-add - - Remaining plugins from mysql.plugin table - - @params argc [in] For parsing plugin options - @params argv [in] For parsing plugin options - @params flags [in] To detect whether to load dynamic plugins or not - - @returns - 0 Success - 1 Failure. Error is raised. - -*/ - -int plugin_init(int *argc, char **argv, int flags) + @return Operation outcome, false means no errors + */ +static bool plugin_init_internals() { - uint i; - st_mysql_plugin **builtins; - st_mysql_plugin *plugin; - st_plugin_int tmp, *plugin_ptr; - MEM_ROOT tmp_root; - bool mandatory= true; - - I_List_iterator iter(opt_early_plugin_load_list); - i_string *item; - - DBUG_ENTER("plugin_init"); - - if (initialized) - DBUG_RETURN(0); - #ifdef HAVE_PSI_INTERFACE init_plugin_psi_keys(); #endif init_alloc_root(key_memory_plugin_mem_root, &plugin_mem_root, 4096, 4096); - init_alloc_root(key_memory_plugin_init_tmp, &tmp_root, 4096, 4096); if (my_hash_init(&bookmark_hash, &my_charset_bin, 16, 0, 0, get_bookmark_hash_key, NULL, HASH_UNIQUE, key_memory_plugin_bookmark)) goto err; - if (my_hash_init(&malloced_string_type_sysvars_bookmark_hash, &my_charset_bin, 16, 0, 0, get_bookmark_hash_key, NULL, HASH_UNIQUE, key_memory_plugin_bookmark)) @@ -1443,7 +1412,7 @@ int plugin_init(int *argc, char **argv, int flags) if (plugin_dl_array == NULL || plugin_array == NULL) goto err; - for (i= 0; i < MYSQL_MAX_PLUGIN_TYPE_NUM; i++) + for (uint i= 0; i < MYSQL_MAX_PLUGIN_TYPE_NUM; i++) { if (my_hash_init(&plugin_hash[i], system_charset_info, 16, 0, 0, get_plugin_hash_key, NULL, HASH_UNIQUE, @@ -1451,31 +1420,80 @@ int plugin_init(int *argc, char **argv, int flags) goto err; } + return false; - /* - First, register early plugins - */ +err: + return true; +} + +/** + Register and initialize early plugins. + + @param argc Command line argument counter + @param argv Command line arguments + @param flags Flags to control whether dynamic loading + and plugin initialization should be skipped + + @return Operation outcome, false if no errors +*/ +bool plugin_register_early_plugins(int *argc, char **argv, int flags) +{ + bool retval= false; + DBUG_ENTER("plugin_register_early_plugins"); + + /* Don't allow initializing twice */ + DBUG_ASSERT(!initialized); + + /* Make sure the internals are initialized */ + if ((retval= plugin_init_internals())) + DBUG_RETURN(retval); + + /* Allocate the temporary mem root, will be freed before returning */ + MEM_ROOT tmp_root; + init_alloc_root(key_memory_plugin_init_tmp, &tmp_root, 4096, 4096); + + I_List_iterator iter(opt_early_plugin_load_list); + i_string *item; while (NULL != (item= iter++)) plugin_load_list(&tmp_root, argc, argv, item->ptr); + /* Temporary mem root not needed anymore, can free it here */ + free_root(&tmp_root, MYF(0)); + if (!(flags & PLUGIN_INIT_SKIP_INITIALIZATION)) - { - if (plugin_init_initialize_and_reap()) - goto err; - } + retval= plugin_init_initialize_and_reap(); - free_root(&tmp_root, MYF(0)); + DBUG_RETURN(retval); +} + +/** + Register the builtin plugins. Some of the plugins (MyISAM, CSV and InnoDB) + are also initialized. + + @param argc number of arguments, propagated to the plugin + @param argv actual arguments, propagated to the plugin + @return Operation outcome, false means no errors + */ +bool plugin_register_builtin_and_init_core_se(int *argc, char **argv) +{ + bool mandatory= true; + DBUG_ENTER("plugin_register_builtin_and_init_core_se"); + + /* Don't allow initializing twice */ + DBUG_ASSERT(!initialized); + + /* Allocate the temporary mem root, will be freed before returning */ + MEM_ROOT tmp_root; init_alloc_root(key_memory_plugin_init_tmp, &tmp_root, 4096, 4096); mysql_mutex_lock(&LOCK_plugin); + initialized= true; - initialized= 1; - - /* - Second, register builtin plugins - */ - for (builtins= mysql_mandatory_plugins; *builtins || mandatory; builtins++) + /* First we register the builtin mandatory and optional plugins */ + for (struct st_mysql_plugin **builtins= mysql_mandatory_plugins; + *builtins || mandatory; builtins++) { + /* Switch to optional plugins when done with the mandatory ones */ if (!*builtins) { builtins= mysql_optional_plugins; @@ -1483,8 +1501,9 @@ int plugin_init(int *argc, char **argv, int flags) if (!*builtins) break; } - for (plugin= *builtins; plugin->info; plugin++) + for (struct st_mysql_plugin *plugin= *builtins; plugin->info; plugin++) { + struct st_plugin_int tmp; memset(&tmp, 0, sizeof(tmp)); tmp.plugin= plugin; tmp.name.str= (char *)plugin->name; @@ -1518,6 +1537,8 @@ int plugin_init(int *argc, char **argv, int flags) tmp.state= PLUGIN_IS_DISABLED; else tmp.state= PLUGIN_IS_UNINITIALIZED; + + struct st_plugin_int *plugin_ptr; // Pointer to registered plugin if (register_builtin(plugin, &tmp, &plugin_ptr)) goto err_unlock; @@ -1540,7 +1561,7 @@ int plugin_init(int *argc, char **argv, int flags) goto err_unlock; /* - initialize the global default storage engine so that it may + Initialize the global default storage engine so that it may not be null in any child thread. */ if (is_myisam) @@ -1556,12 +1577,46 @@ int plugin_init(int *argc, char **argv, int flags) } } - /* should now be set to MyISAM storage engine */ + /* Should now be set to MyISAM storage engine */ DBUG_ASSERT(global_system_variables.table_plugin); DBUG_ASSERT(global_system_variables.temp_table_plugin); mysql_mutex_unlock(&LOCK_plugin); + free_root(&tmp_root, MYF(0)); + DBUG_RETURN(false); + +err_unlock: + mysql_mutex_unlock(&LOCK_plugin); + free_root(&tmp_root, MYF(0)); + DBUG_RETURN(true); +} + +/** + Register and initialize the dynamic plugins. Also initialize + the remaining builtin plugins that are not initialized + already. + + @param argc Command line argument counter + @param argv Command line arguments + @param flags Flags to control whether dynamic loading + and plugin initialization should be skipped + + @return Operation outcome, false if no errors +*/ +bool plugin_register_dynamic_and_init_all(int *argc, + char **argv, int flags) +{ + DBUG_ENTER("plugin_register_dynamic_and_init_all"); + + /* Make sure the internals are initialized and builtins registered */ + if (!initialized) + DBUG_RETURN(true); + + /* Allocate the temporary mem root, will be freed before returning */ + MEM_ROOT tmp_root; + init_alloc_root(key_memory_plugin_init_tmp, &tmp_root, 4096, 4096); + /* Register all dynamic plugins */ if (!(flags & PLUGIN_INIT_SKIP_DYNAMIC_LOADING)) { @@ -1573,7 +1628,6 @@ int plugin_init(int *argc, char **argv, int flags) if (!(flags & PLUGIN_INIT_SKIP_PLUGIN_TABLE)) plugin_load(&tmp_root, argc, argv); } - if (flags & PLUGIN_INIT_SKIP_INITIALIZATION) goto end; @@ -1588,14 +1642,11 @@ int plugin_init(int *argc, char **argv, int flags) DBUG_RETURN(0); -err_unlock: - mysql_mutex_unlock(&LOCK_plugin); err: free_root(&tmp_root, MYF(0)); DBUG_RETURN(1); } - static bool register_builtin(st_mysql_plugin *plugin, st_plugin_int *tmp, st_plugin_int **ptr) @@ -1966,6 +2017,44 @@ void plugin_shutdown(void) DBUG_VOID_RETURN; } +/** + Initialize one plugin. This function is used to early load one single + plugin. This function is used by key migration tool. + + @param[in] argc Command line argument counter + @param[in] argv Command line arguments + @param[in] plugin library file name + + @return Operation status + @retval 0 OK + @retval 1 ERROR +*/ +bool plugin_early_load_one(int *argc, char **argv, const char* plugin) +{ + bool retval= false; + DBUG_ENTER("plugin_early_load_one"); + + /* Make sure the internals are initialized */ + if (!initialized) + { + if ((retval= plugin_init_internals())) + DBUG_RETURN(retval); + else + initialized= true; + } + /* Allocate the temporary mem root, will be freed before returning */ + MEM_ROOT tmp_root; + init_alloc_root(PSI_NOT_INSTRUMENTED, &tmp_root, 4096, 4096); + + plugin_load_list(&tmp_root, argc, argv, plugin); + + /* Temporary mem root not needed anymore, can free it here */ + free_root(&tmp_root, MYF(0)); + + retval= plugin_init_initialize_and_reap(); + + DBUG_RETURN(retval); +} static bool mysql_install_plugin(THD *thd, const LEX_STRING *name, const LEX_STRING *dl) diff --git a/sql/sql_plugin.h b/sql/sql_plugin.h index d941563732f1..9a5e13c1cdd9 100644 --- a/sql/sql_plugin.h +++ b/sql/sql_plugin.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2005, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -149,7 +149,10 @@ extern char *opt_plugin_dir_ptr; extern char opt_plugin_dir[FN_REFLEN]; extern const LEX_STRING plugin_type_names[]; -extern int plugin_init(int *argc, char **argv, int init_flags); +extern bool plugin_register_early_plugins(int *argc, char **argv, int flags); +extern bool plugin_register_builtin_and_init_core_se(int *argc, char **argv); +extern bool plugin_register_dynamic_and_init_all(int *argc, + char **argv, int init_flags); extern void plugin_shutdown(void); extern void memcached_shutdown(void); void add_plugin_options(std::vector *options, MEM_ROOT *mem_root); @@ -181,4 +184,9 @@ extern bool plugin_foreach_with_mask(THD *thd, plugin_foreach_func **funcs, int lock_plugin_data(); int unlock_plugin_data(); +/** + Initialize one plugin. +*/ +bool plugin_early_load_one(int *argc, char **argv, const char *plugin); + #endif diff --git a/sql/sys_vars.cc b/sql/sys_vars.cc index 5ec19f5c8ed2..63e4d959ca93 100644 --- a/sql/sys_vars.cc +++ b/sql/sys_vars.cc @@ -5814,3 +5814,39 @@ static Sys_var_charptr Sys_disabled_storage_engines( READ_ONLY GLOBAL_VAR(opt_disabled_storage_engines), CMD_LINE(REQUIRED_ARG), IN_SYSTEM_CHARSET, DEFAULT("")); + +static bool check_keyring_access(sys_var*, THD* thd, set_var*) +{ + if (!(thd->security_context()->check_access(SUPER_ACL))) + { + my_error(ER_KEYRING_ACCESS_DENIED_ERROR, MYF(0), + "SUPER"); + return true; + } + return false; +} + +/** + This is a mutex used to protect global variable @@keyring_operations. +*/ +static PolyLock_mutex PLock_keyring_operations(&LOCK_keyring_operations); +/** + This variable provides access to keyring service APIs. When this variable + is disabled calls to keyring_key_generate(), keyring_key_store() and + keyring_key_remove() will report error until this variable is enabled. + This variable is protected under a mutex named PLock_keyring_operations. + To access this variable you must first set this mutex. + + @sa PLock_keyring_operations +*/ +static Sys_var_mybool Sys_keyring_operations( + "keyring_operations", + "This variable provides access to keyring service APIs. When this " + "option is disabled calls to keyring_key_generate(), keyring_key_store() " + "and keyring_key_remove() will report error until this variable is enabled.", + GLOBAL_VAR(opt_keyring_operations), + NO_CMD_LINE, DEFAULT(TRUE), + &PLock_keyring_operations, + NOT_IN_BINLOG, + ON_CHECK(check_keyring_access), + ON_UPDATE(0)); diff --git a/unittest/gunit/keyring/CMakeLists.txt b/unittest/gunit/keyring/CMakeLists.txt index 5e5010e9e81f..d2b818552736 100644 --- a/unittest/gunit/keyring/CMakeLists.txt +++ b/unittest/gunit/keyring/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -54,6 +54,7 @@ IF (MERGE_UNITTESTS) LIST(APPEND SRC_FILES ${CMAKE_SOURCE_DIR}/plugin/keyring/common/keyring_key.cc ${CMAKE_SOURCE_DIR}/plugin/keyring/common/keys_container.cc + ${CMAKE_SOURCE_DIR}/plugin/keyring/common/keys_iterator.cc ${CMAKE_SOURCE_DIR}/plugin/keyring/buffered_file_io.cc ${CMAKE_SOURCE_DIR}/plugin/keyring/file_io.cc ${CMAKE_SOURCE_DIR}/plugin/keyring/buffer.cc From 475dcde2c7856dd0050b967099a86c087d94f32f Mon Sep 17 00:00:00 2001 From: Harin Vadodaria Date: Fri, 24 Nov 2017 11:29:30 +0100 Subject: [PATCH 0210/1221] Bug#27099029: UNLIMITED LENGTH OF THE PASSWORD Description: my_crypt_genhash depends on the length of plaintext password. Longer the password, more is the time required to produce the transformation. An unusually large password may consume considerable amount of time. Fix: Fixed length of plaintext password to 256 bytes for SHA256_PASSWORD authentication plugin. Restricted PASSWORD() to accept at max 256 bytes if old_passwords is set to 2. --- include/crypt_genhash_impl.h | 17 +++++++++++++++++ sql/item_strfunc.cc | 16 +++++++++++++--- sql/sql_acl.cc | 10 ++++++++++ 3 files changed, 40 insertions(+), 3 deletions(-) diff --git a/include/crypt_genhash_impl.h b/include/crypt_genhash_impl.h index 828cf1984e84..1057f63e1804 100644 --- a/include/crypt_genhash_impl.h +++ b/include/crypt_genhash_impl.h @@ -1,3 +1,18 @@ +/* Copyright (c) 2012, 2017, Oracle and/or its affiliates. All rights reserved. + + 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 */ + #ifndef CRYPT_HASHGEN_IMPL_H #define CRYPT_HASHGEN_IMPL_H #define ROUNDS_DEFAULT 5000 @@ -13,6 +28,8 @@ CRYPT_MAGIC_LENGTH + \ CRYPT_PARAM_LENGTH) +#define MAX_PLAINTEXT_LENGTH 256 + #include #include diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc index cb7cca424568..81e7b4dbef60 100644 --- a/sql/item_strfunc.cc +++ b/sql/item_strfunc.cc @@ -2192,6 +2192,11 @@ static int calculate_password(String *str, char *buffer) #if defined(HAVE_OPENSSL) if (old_passwords == 2) { + if (str->length() > MAX_PLAINTEXT_LENGTH) + { + my_error(ER_NOT_VALID_PASSWORD, MYF(0)); + return 0; + } my_make_scrambled_password(buffer, str->ptr(), str->length()); buffer_len= (int) strlen(buffer) + 1; @@ -2283,9 +2288,14 @@ char *Item_func_password:: #if defined(HAVE_OPENSSL) else { - /* Allocate memory for the password scramble and one extra byte for \0 */ - buff= (char *) thd->alloc(CRYPT_MAX_PASSWORD_SIZE + 1); - my_make_scrambled_password(buff, password, pass_len); + if (pass_len <= MAX_PLAINTEXT_LENGTH) + { + /* Allocate memory for the password scramble and one extra byte for \0 */ + buff= (char *) thd->alloc(CRYPT_MAX_PASSWORD_SIZE + 1); + my_make_scrambled_password(buff, password, pass_len); + } + else + my_error(ER_NOT_VALID_PASSWORD, MYF(0)); } #endif return buff; diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc index 1f0de9f1d8a8..cbcc0d40c583 100644 --- a/sql/sql_acl.cc +++ b/sql/sql_acl.cc @@ -66,6 +66,10 @@ "$5$BVZy9O>'a+2MH]_?$fpWyabcdiHjfCVqId/quykZzjaA7adpkcen/uiQrtmOK4p4" #endif +#if defined(HAVE_OPENSSL) +#define SHA256_PASSWORD_MAX_PASSWORD_LENGTH MAX_PLAINTEXT_LENGTH +#endif /* HAVE_OPENSSL */ + using std::min; using std::max; @@ -5462,6 +5466,9 @@ int digest_password(THD *thd, LEX_USER *user_record) */ if (user_record->plugin.str == sha256_password_plugin_name.str) { + if (user_record->password.length > SHA256_PASSWORD_MAX_PASSWORD_LENGTH) + return 1; + char *buff= (char *) thd->alloc(CRYPT_MAX_PASSWORD_SIZE+1); if (buff == NULL) return 1; @@ -12621,6 +12628,9 @@ static int sha256_password_authenticate(MYSQL_PLUGIN_VIO *vio, #endif } // if(!my_vio_is_encrypter()) + if (pkt_len > SHA256_PASSWORD_MAX_PASSWORD_LENGTH + 1) + DBUG_RETURN(CR_ERROR); + /* A password was sent to an account without a password */ if (info->auth_string_length == 0) DBUG_RETURN(CR_ERROR); From ee74e3675110f387ce794976e90c8ce0463f2583 Mon Sep 17 00:00:00 2001 From: Yashwant Sahu Date: Fri, 24 Nov 2017 17:29:57 +0100 Subject: [PATCH 0211/1221] Bug #26091340, #26147775, #25989788: LDAP bug fixes. Added group filter search attribute, Added user DN postfix, LDAP pool resize. --- .../auth_ldap_sasl_client.cc | 273 +++++++++++------- .../auth_ldap_sasl_client.h | 14 +- libmysql/authentication_ldap/log_client.cc | 44 +-- libmysql/authentication_ldap/log_client.h | 46 ++- 4 files changed, 230 insertions(+), 147 deletions(-) diff --git a/libmysql/authentication_ldap/auth_ldap_sasl_client.cc b/libmysql/authentication_ldap/auth_ldap_sasl_client.cc index beea7a0d772d..a11c93f48794 100644 --- a/libmysql/authentication_ldap/auth_ldap_sasl_client.cc +++ b/libmysql/authentication_ldap/auth_ldap_sasl_client.cc @@ -26,72 +26,93 @@ Ldap_logger *g_logger_client; -void Sasl_client::interact(sasl_interact_t *ilist) { - while (ilist->id != SASL_CB_LIST_END) { - switch(ilist->id) { +void Sasl_client::interact(sasl_interact_t *ilist) +{ + while (ilist->id != SASL_CB_LIST_END) + { + switch(ilist->id) + { + /* + the name of the user authenticating + */ case SASL_CB_USER: - ilist->result = strdup(m_user_name); - ilist->len = strlen((const char*)ilist->result); + ilist->result= strdup(m_user_name); + ilist->len= strlen((const char*)ilist->result); break; + /* the name of the user acting for. (for example postman delivering mail for + Martin might have an AUTHNAME of postman and a USER of Martin) + */ case SASL_CB_AUTHNAME: - ilist->result = strdup(m_user_name); - ilist->len = strlen((const char*)ilist->result); + ilist->result= strdup(m_user_name); + ilist->len= strlen((const char*)ilist->result); break; case SASL_CB_PASS: - ilist->result = strdup(m_user_pwd); - ilist->len = strlen((const char*)ilist->result); + ilist->result= strdup(m_user_pwd); + ilist->len= strlen((const char*)ilist->result); break; default: - ilist->result = NULL; - ilist->len = 0; + ilist->result= NULL; + ilist->len= 0; } ilist++; } } -void Sasl_client::set_plugin_info(MYSQL_PLUGIN_VIO *vio, MYSQL *mysql) { - m_vio = vio; - m_mysql = mysql; + +void Sasl_client::set_plugin_info(MYSQL_PLUGIN_VIO *vio, MYSQL *mysql) +{ + m_vio= vio; + m_mysql= mysql; } + /** SASL method is send from the Mysql server, and this is set by the client. SASL client and sasl server may support many sasl authentication methods and can negotiate in anyone. We want to enforce the SASL authentication set by the client. */ -int Sasl_client::read_method_name_from_server() { - int rc_server_read = CR_ERROR; - unsigned char* packet = NULL; +int Sasl_client::read_method_name_from_server() +{ + int rc_server_read= CR_ERROR; + unsigned char* packet= NULL; std::stringstream log_stream; - if (m_vio == NULL) { + if (m_vio == NULL) + { return rc_server_read; } /** Get authentication method from the server. */ - rc_server_read = m_vio->read_packet(m_vio, (unsigned char**)&packet); - strncpy(m_mechanism, (const char*)packet, sizeof(m_mechanism)); + rc_server_read= m_vio->read_packet(m_vio, (unsigned char**)&packet); + strncpy(m_mechanism, (const char*)packet, sizeof(m_mechanism)-1); + m_mechanism[sizeof(m_mechanism)-1]= '\0'; log_stream << "Sasl_client::read_method_name_from_server : " << m_mechanism; log_dbg(log_stream.str()); return rc_server_read; } - Sasl_client::Sasl_client() { - m_connection = NULL; + + Sasl_client::Sasl_client() +{ + m_connection= NULL; } -int Sasl_client::initilize() { + +int Sasl_client::initilize() +{ std::stringstream log_stream; - int rc_sasl = SASL_FAIL; - strncpy(m_service_name, SASL_SERVICE_NAME, sizeof(m_service_name)); + int rc_sasl= SASL_FAIL; + strncpy(m_service_name, SASL_SERVICE_NAME, sizeof(m_service_name)-1); + m_service_name[sizeof(m_service_name)-1]= '\0'; /** Initialize client-side of SASL. */ - rc_sasl = sasl_client_init(NULL); - if (rc_sasl != SASL_OK) { + rc_sasl= sasl_client_init(NULL); + if (rc_sasl != SASL_OK) + { goto EXIT; } /** Creating sasl connection. */ - rc_sasl = sasl_client_new(m_service_name, NULL, NULL, NULL, callbacks, - 0, &m_connection); + rc_sasl= sasl_client_new(m_service_name, NULL, NULL, NULL, callbacks, + 0, &m_connection); if (rc_sasl != SASL_OK) goto EXIT; @@ -99,24 +120,28 @@ int Sasl_client::initilize() { sasl_setprop(m_connection, SASL_SEC_PROPS, &security_properties); rc_sasl= SASL_OK; EXIT: - if (rc_sasl != SASL_OK) { + if (rc_sasl != SASL_OK) + { log_stream << "Sasl_client::initilize failed rc: " << rc_sasl; log_error(log_stream.str()); } return rc_sasl; } -int Sasl_client::de_initilize() { - int rc_sasl = SASL_FAIL; - if (m_connection) { + +Sasl_client::~Sasl_client() +{ + if (m_connection) + { sasl_dispose(&m_connection); - m_connection = NULL; + m_connection= NULL; sasl_client_done_wrapper(); } - return rc_sasl; } -void Sasl_client::sasl_client_done_wrapper() { + +void Sasl_client::sasl_client_done_wrapper() +{ #if (SASL_VERSION_MAJOR >= 2) && \ (SASL_VERSION_MINOR >= 1) && \ (SASL_VERSION_STEP >= 24) && \ @@ -127,28 +152,33 @@ void Sasl_client::sasl_client_done_wrapper() { #endif } + int Sasl_client::send_sasl_request_to_server(const unsigned char *request, int request_len, unsigned char** response, - int* response_len) { - int rc_server = CR_ERROR; + int* response_len) +{ + int rc_server= CR_ERROR; std::stringstream log_stream; - if (m_vio == NULL) { + if (m_vio == NULL) + { goto EXIT; } /** Send the request to the MySQL server. */ log_stream << "Sasl_client::SendSaslRequestToServer request:" << request; log_dbg(log_stream.str()); - rc_server = m_vio->write_packet(m_vio, request, request_len); - if (rc_server) { + rc_server= m_vio->write_packet(m_vio, request, request_len); + if (rc_server) + { log_error("Sasl_client::SendSaslRequestToServer: sasl request write failed"); goto EXIT; } /** Get the sasl response from the MySQL server. */ *response_len = m_vio->read_packet(m_vio, response); - if ((*response_len) < 0 || (*response == NULL)) { + if ((*response_len) < 0 || (*response == NULL)) + { log_error("Sasl_client::SendSaslRequestToServer: sasl response read failed"); goto EXIT; } @@ -159,136 +189,161 @@ int Sasl_client::send_sasl_request_to_server(const unsigned char *request, return rc_server; } -int Sasl_client::sasl_start(char **client_output, int* client_output_length) { - int rc_sasl = SASL_FAIL; - const char *mechanisum = NULL; - char* sasl_client_output = NULL; - sasl_interact_t *interactions = NULL; + +int Sasl_client::sasl_start(char **client_output, int* client_output_length) +{ + int rc_sasl= SASL_FAIL; + const char *mechanisum= NULL; + char* sasl_client_output= NULL; + sasl_interact_t *interactions= NULL; std::stringstream log_stream; - if (m_connection == NULL) { + if (m_connection == NULL) + { log_error("Sasl_client::SaslStart: sasl connection is null"); return rc_sasl; } - do { - rc_sasl = sasl_client_start(m_connection, m_mechanism, &interactions, - (const char**)&sasl_client_output, - (unsigned int *)client_output_length, - &mechanisum); - + do + { + rc_sasl= sasl_client_start(m_connection, m_mechanism, &interactions, + (const char**)&sasl_client_output, + (unsigned int *)client_output_length, + &mechanisum); if(rc_sasl == SASL_INTERACT) interact(interactions); } while(rc_sasl == SASL_INTERACT); - - if (client_output != NULL) { - *client_output = sasl_client_output; + if (client_output != NULL) + { + *client_output= sasl_client_output; log_stream << "Sasl_client::SaslStart sasl output: " << sasl_client_output; log_dbg(log_stream.str()); } return rc_sasl; } + int Sasl_client::sasl_step(char* server_in, int server_in_length, - char** client_out, int* client_out_length) { - int rc_sasl = SASL_FAIL; - sasl_interact_t *interactions = NULL; + char** client_out, int* client_out_length) +{ + int rc_sasl= SASL_FAIL; + sasl_interact_t *interactions= NULL; - if (m_connection == NULL) { + if (m_connection == NULL) + { return rc_sasl; } - do { - rc_sasl = sasl_client_step(m_connection, - server_in, server_in_length, - &interactions, - (const char**)client_out, (unsigned int *)client_out_length); - if(rc_sasl == SASL_INTERACT) Sasl_client::interact(interactions); + do + { + rc_sasl= sasl_client_step(m_connection, + server_in, server_in_length, + &interactions, + (const char**)client_out, (unsigned int *)client_out_length); + if(rc_sasl == SASL_INTERACT) + Sasl_client::interact(interactions); } while(rc_sasl == SASL_INTERACT); - return rc_sasl; } -void Sasl_client::set_user_info(std::string name, std::string pwd) { - strncpy(m_user_name, name.c_str(), sizeof(m_user_name)); - strncpy(m_user_pwd, pwd.c_str(), sizeof(m_user_pwd)); + +void Sasl_client::set_user_info(std::string name, std::string pwd) +{ + strncpy(m_user_name, name.c_str(), sizeof(m_user_name)-1); + m_user_name[sizeof(m_user_name)-1]= '\0'; + strncpy(m_user_pwd, pwd.c_str(), sizeof(m_user_pwd)-1); + m_user_pwd[sizeof(m_user_pwd)-1]= '\0'; } -static int sasl_authenticate(MYSQL_PLUGIN_VIO *vio, MYSQL *mysql) { - int rc_sasl = SASL_FAIL; - int rc_auth = CR_ERROR; - unsigned char* server_packet = NULL; - int server_packet_len = 0; - char *sasl_client_output = NULL; - int sasl_client_output_len = 0; + +static int sasl_authenticate(MYSQL_PLUGIN_VIO *vio, MYSQL *mysql) +{ + int rc_sasl= SASL_FAIL; + int rc_auth= CR_ERROR; + unsigned char* server_packet= NULL; + int server_packet_len= 0; + char *sasl_client_output= NULL; + int sasl_client_output_len= 0; + const char *opt= getenv("AUTHENTICATION_LDAP_CLIENT_LOG"); + int opt_val= opt ? atoi(opt) : 0; std::stringstream log_stream; - g_logger_client = new Ldap_logger(); - const char *opt = getenv("AUTHENTICATION_LDAP_CLIENT_LOG"); - int opt_val = opt ? atoi(opt) : 0; - if (opt && opt_val > 0 && opt_val < 6) { + + g_logger_client= new Ldap_logger(); + if (opt && opt_val > 0 && opt_val < 6) + { g_logger_client->set_log_level((ldap_log_level)opt_val); } Sasl_client sasl_client; sasl_client.set_user_info(mysql->user, mysql->passwd); sasl_client.set_plugin_info(vio, mysql); - server_packet_len = sasl_client.read_method_name_from_server(); - if (server_packet_len < 0) { + server_packet_len= sasl_client.read_method_name_from_server(); + if (server_packet_len < 0) + { log_error("sasl_authenticate: method name read from server side plug-in failed"); goto EXIT; } - rc_sasl = sasl_client.initilize(); - if (rc_sasl != SASL_OK) { + rc_sasl= sasl_client.initilize(); + if (rc_sasl != SASL_OK) + { log_error("sasl_authenticate: initialize failed"); goto EXIT; } - rc_sasl = sasl_client.sasl_start(&sasl_client_output, - &sasl_client_output_len); - if ((rc_sasl != SASL_OK) && (rc_sasl != SASL_CONTINUE)) { + rc_sasl= sasl_client.sasl_start(&sasl_client_output, + &sasl_client_output_len); + if ((rc_sasl != SASL_OK) && (rc_sasl != SASL_CONTINUE)) + { log_error("sasl_authenticate: SaslStart failed"); goto EXIT; } - /** Running SASL authentication step till authentication process is concluded - MySQL server plug-in working as proxy for SASL / LDAP server. + /** + Running SASL authentication step till authentication process is concluded + MySQL server plug-in working as proxy for SASL / LDAP server. */ - do { - rc_auth = sasl_client.send_sasl_request_to_server((const unsigned char *)sasl_client_output, - sasl_client_output_len, - &server_packet, - &server_packet_len); - if(rc_auth < 0) { + do + { + rc_auth= sasl_client.send_sasl_request_to_server((const unsigned char *)sasl_client_output, + sasl_client_output_len, + &server_packet, + &server_packet_len); + if(rc_auth < 0) + { goto EXIT; } - server_packet_len = strlen((const char*)server_packet); // To be remove - rc_sasl = sasl_client.sasl_step((char*)server_packet, - server_packet_len, &sasl_client_output, - &sasl_client_output_len); - } while (rc_sasl == SASL_CONTINUE ); + server_packet_len= strlen((const char*)server_packet); + rc_sasl= sasl_client.sasl_step((char*)server_packet, + server_packet_len, &sasl_client_output, + &sasl_client_output_len); + }while (rc_sasl == SASL_CONTINUE); - if (rc_sasl == SASL_OK) { - rc_auth = CR_OK; + if (rc_sasl == SASL_OK) + { + rc_auth= CR_OK; log_dbg("sasl_authenticate authentication successful"); } - else { + else + { log_error("sasl_authenticate client failed"); } EXIT: - if (rc_sasl != SASL_OK) { + if (rc_sasl != SASL_OK) + { log_stream.str(""); log_stream << "sasl_authenticate client failed rc: " << rc_sasl; log_error(log_stream.str()); } - rc_sasl = sasl_client.de_initilize(); - if (g_logger_client) { + if (g_logger_client) + { delete g_logger_client; - g_logger_client = NULL; + g_logger_client= NULL; } return rc_auth; } + mysql_declare_client_plugin(AUTHENTICATION) "authentication_ldap_sasl_client", "Yashwant Sahu", diff --git a/libmysql/authentication_ldap/auth_ldap_sasl_client.h b/libmysql/authentication_ldap/auth_ldap_sasl_client.h index 8e5415c8ad4f..87e41e6f36bf 100644 --- a/libmysql/authentication_ldap/auth_ldap_sasl_client.h +++ b/libmysql/authentication_ldap/auth_ldap_sasl_client.h @@ -30,7 +30,8 @@ #define SASL_BUFFER_SIZE 9000 #define SASL_SERVICE_NAME "ldap" -static const sasl_callback_t callbacks[] = { +static const sasl_callback_t callbacks[]= +{ #ifdef SASL_CB_GETREALM {SASL_CB_GETREALM, NULL, NULL}, #endif @@ -42,7 +43,9 @@ static const sasl_callback_t callbacks[] = { {SASL_CB_LIST_END, NULL, NULL} }; -sasl_security_properties_t security_properties = { + +sasl_security_properties_t security_properties= +{ /** Minimum acceptable final level. */ 0, /** Maximum acceptable final level. */ @@ -57,11 +60,13 @@ sasl_security_properties_t security_properties = { NULL, }; -class Sasl_client { + +class Sasl_client +{ public: Sasl_client(); + ~Sasl_client(); int initilize(); - int de_initilize(); void set_plugin_info(MYSQL_PLUGIN_VIO *vio, MYSQL *mysql); void interact(sasl_interact_t *ilist); int read_method_name_from_server(); @@ -70,6 +75,7 @@ class Sasl_client { int send_sasl_request_to_server(const unsigned char *request, int request_len, unsigned char** reponse, int* response_len); void set_user_info(std::string name, std::string pwd); void sasl_client_done_wrapper(); + protected: char m_user_name[SASL_MAX_STR_SIZE]; char m_user_pwd[SASL_MAX_STR_SIZE]; diff --git a/libmysql/authentication_ldap/log_client.cc b/libmysql/authentication_ldap/log_client.cc index ae5594dddb0d..affd29de54ae 100644 --- a/libmysql/authentication_ldap/log_client.cc +++ b/libmysql/authentication_ldap/log_client.cc @@ -16,38 +16,44 @@ #include #include "log_client.h" -Ldap_logger::Ldap_logger() { - m_log_level = LDAP_LOG_LEVEL_NONE; - m_log_writer = NULL; - m_log_writer = new Ldap_log_writer_error(); - m_log_writer->open(); +Ldap_logger::Ldap_logger() +{ + m_log_level= LDAP_LOG_LEVEL_NONE; + m_log_writer= NULL; + m_log_writer= new Ldap_log_writer_error(); } -Ldap_logger::~Ldap_logger() { - if (m_log_writer) { - m_log_writer->close(); + +Ldap_logger::~Ldap_logger() +{ + if (m_log_writer) + { delete m_log_writer; } } -void Ldap_logger::set_log_level(ldap_log_level level) { - m_log_level = level; -} -int Ldap_log_writer_error::open() { - return 0; -} -int Ldap_log_writer_error::close() { - return 0; +void Ldap_logger::set_log_level(ldap_log_level level) +{ + m_log_level= level; } -void Ldap_log_writer_error::write(std::string data) { +void Ldap_log_writer_error::write(std::string data) +{ std::cerr << data << "\n"; std::cerr.flush(); } -Ldap_log_writer_error::Ldap_log_writer_error() { +/** + This class writes error into default error streams. + We needed this constructor because of template class usage. +*/ +Ldap_log_writer_error::Ldap_log_writer_error() +{ } -Ldap_log_writer_error::~Ldap_log_writer_error() { +/** +*/ +Ldap_log_writer_error::~Ldap_log_writer_error() +{ } diff --git a/libmysql/authentication_ldap/log_client.h b/libmysql/authentication_ldap/log_client.h index 1d8c088450d4..0efc45fe1218 100644 --- a/libmysql/authentication_ldap/log_client.h +++ b/libmysql/authentication_ldap/log_client.h @@ -20,61 +20,75 @@ #include #include -struct ldap_log_type { - typedef enum { +struct ldap_log_type +{ + typedef enum + { LDAP_LOG_DBG, LDAP_LOG_INFO, LDAP_LOG_WARNING, LDAP_LOG_ERROR } ldap_type; }; -enum ldap_log_level { - LDAP_LOG_LEVEL_NONE = 1, LDAP_LOG_LEVEL_ERROR, LDAP_LOG_LEVEL_ERROR_WARNING, LDAP_LOG_LEVEL_ERROR_WARNING_INFO, LDAP_LOG_LEVEL_ALL + +enum ldap_log_level +{ + LDAP_LOG_LEVEL_NONE= 1, LDAP_LOG_LEVEL_ERROR, LDAP_LOG_LEVEL_ERROR_WARNING, LDAP_LOG_LEVEL_ERROR_WARNING_INFO, LDAP_LOG_LEVEL_ALL }; -class Ldap_log_writer_error { + +class Ldap_log_writer_error +{ public: Ldap_log_writer_error(); ~Ldap_log_writer_error(); - int open(); - int close(); void write(std::string data); }; -class Ldap_logger { + +class Ldap_logger +{ public: Ldap_logger(); ~Ldap_logger(); template void log(std::string msg); void set_log_level(ldap_log_level level); + private: Ldap_log_writer_error *m_log_writer; ldap_log_level m_log_level; }; + template -void Ldap_logger::log(std::string msg) { +void Ldap_logger::log(std::string msg) +{ std::stringstream log_stream; - switch (type) { + switch (type) + { case ldap_log_type::LDAP_LOG_DBG: - if (LDAP_LOG_LEVEL_ALL > m_log_level) { + if (LDAP_LOG_LEVEL_ALL > m_log_level) + { return; } log_stream << "[DBG] "; break; case ldap_log_type::LDAP_LOG_INFO: - if (LDAP_LOG_LEVEL_ERROR_WARNING_INFO > m_log_level) { + if (LDAP_LOG_LEVEL_ERROR_WARNING_INFO > m_log_level) + { return; } log_stream << "[Note] "; break; case ldap_log_type::LDAP_LOG_WARNING: - if (LDAP_LOG_LEVEL_ERROR_WARNING > m_log_level) { + if (LDAP_LOG_LEVEL_ERROR_WARNING > m_log_level) + { return; } log_stream << "[Warning] "; break; case ldap_log_type::LDAP_LOG_ERROR: - if (LDAP_LOG_LEVEL_NONE >= m_log_level) { + if (LDAP_LOG_LEVEL_NONE >= m_log_level) + { return; } log_stream << "[Error] "; @@ -83,12 +97,14 @@ void Ldap_logger::log(std::string msg) { /** We can write debug messages also in error log file if logging level is set to debug. For MySQL client this will come from environment variable */ - if (m_log_writer){ + if (m_log_writer) + { log_stream << ": " << msg; m_log_writer->write(log_stream.str()); } } + extern Ldap_logger *g_logger_client; #define log_dbg g_logger_client->log< ldap_log_type::LDAP_LOG_DBG > From 5c649a0a410ccd2c7669f580afa5192869342c67 Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Sat, 25 Nov 2017 00:50:13 +0530 Subject: [PATCH 0212/1221] From 9871dc352bab8a990cd7ab5119661fba10e0f72f Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Sat, 25 Nov 2017 21:44:38 +0530 Subject: [PATCH 0213/1221] From c23557aa11f0ac5554e81cc40aefd37284735cbf Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Mon, 27 Nov 2017 04:36:54 +0100 Subject: [PATCH 0214/1221] From 946d9e4db4896992400cabbd0d1db9a0a10cbfd1 Mon Sep 17 00:00:00 2001 From: Balasubramanian Kandasamy Date: Mon, 27 Nov 2017 14:51:04 +0530 Subject: [PATCH 0215/1221] Updated copyright year in user visible text --- README | 2 +- include/welcome_copyright_notice.h | 2 +- packaging/WiX/custom_ui.wxs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README b/README index 2a3230ac6851..37358f0886c5 100644 --- a/README +++ b/README @@ -5,7 +5,7 @@ For the avoidance of doubt, this particular copy of the software is released under the version 2 of the GNU General Public License. MySQL is brought to you by Oracle. -Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. +Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. License information can be found in the COPYING file. diff --git a/include/welcome_copyright_notice.h b/include/welcome_copyright_notice.h index 0c17b5e650cf..2b304d57f91f 100644 --- a/include/welcome_copyright_notice.h +++ b/include/welcome_copyright_notice.h @@ -16,7 +16,7 @@ #ifndef _welcome_copyright_notice_h_ #define _welcome_copyright_notice_h_ -#define COPYRIGHT_NOTICE_CURRENT_YEAR "2017" +#define COPYRIGHT_NOTICE_CURRENT_YEAR "2018" /* This define specifies copyright notice which is displayed by every MySQL diff --git a/packaging/WiX/custom_ui.wxs b/packaging/WiX/custom_ui.wxs index 9475de92722e..a0dba4b6d3bc 100644 --- a/packaging/WiX/custom_ui.wxs +++ b/packaging/WiX/custom_ui.wxs @@ -30,7 +30,7 @@ - + From 51e049cff6a3110504b67644bf02a037dc8b1c5c Mon Sep 17 00:00:00 2001 From: Balasubramanian Kandasamy Date: Mon, 27 Nov 2017 15:33:02 +0530 Subject: [PATCH 0216/1221] Raise version number after cloning 5.5.59 --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 87b72051a84d..44f719ca0978 100644 --- a/VERSION +++ b/VERSION @@ -1,4 +1,4 @@ MYSQL_VERSION_MAJOR=5 MYSQL_VERSION_MINOR=5 -MYSQL_VERSION_PATCH=59 +MYSQL_VERSION_PATCH=60 MYSQL_VERSION_EXTRA= From 8d4c59803f7e1a612c6276db3d9edbc8c997f87c Mon Sep 17 00:00:00 2001 From: Harin Vadodaria Date: Mon, 27 Nov 2017 11:49:43 +0100 Subject: [PATCH 0217/1221] Bug#27099029: UNLIMITED LENGTH OF THE PASSWORD Post push fix: Handled missing cases of GRANT. --- sql/auth/auth_common.h | 3 ++- sql/auth/sql_authorization.cc | 9 ++++++--- sql/auth/sql_user.cc | 23 +++++++++++++++++++---- 3 files changed, 27 insertions(+), 8 deletions(-) diff --git a/sql/auth/auth_common.h b/sql/auth/auth_common.h index c1d571d2c165..fecc5c286d97 100644 --- a/sql/auth/auth_common.h +++ b/sql/auth/auth_common.h @@ -620,7 +620,8 @@ bool mysql_rename_user(THD *thd, List &list); bool set_and_validate_user_attributes(THD *thd, LEX_USER *Str, ulong &what_to_set, - bool is_privileged_user); + bool is_privileged_user, + const char * cmd); /* sql_auth_cache */ int wild_case_compare(CHARSET_INFO *cs, const char *str,const char *wildstr); diff --git a/sql/auth/sql_authorization.cc b/sql/auth/sql_authorization.cc index ef5aeb33d709..910216d91770 100644 --- a/sql/auth/sql_authorization.cc +++ b/sql/auth/sql_authorization.cc @@ -1321,7 +1321,8 @@ int mysql_table_grant(THD *thd, TABLE_LIST *table_list, } if (set_and_validate_user_attributes(thd, Str, what_to_set, - is_privileged_user)) + is_privileged_user, + revoke_grant?"REVOKE":"GRANT")) { result= TRUE; continue; @@ -1636,7 +1637,8 @@ bool mysql_routine_grant(THD *thd, TABLE_LIST *table_list, bool is_proc, } if (set_and_validate_user_attributes(thd, Str, what_to_set, - is_privileged_user)) + is_privileged_user, + revoke_grant?"REVOKE":"GRANT")) { result= TRUE; continue; @@ -1887,7 +1889,8 @@ bool mysql_grant(THD *thd, const char *db, List &list, } if (set_and_validate_user_attributes(thd, Str, what_to_set, - is_privileged_user)) + is_privileged_user, + revoke_grant?"REVOKE":"GRANT")) { result= TRUE; continue; diff --git a/sql/auth/sql_user.cc b/sql/auth/sql_user.cc index 08d3d113300d..2ad005e12cdb 100644 --- a/sql/auth/sql_user.cc +++ b/sql/auth/sql_user.cc @@ -397,6 +397,7 @@ bool mysql_show_create_user(THD *thd, LEX_USER *user_name) @param what_to_set User attributes @param is_privileged_user Whether caller has CREATE_USER_ACL or UPDATE_ACL over mysql.* + @param cmd Command information @retval 0 ok @retval 1 ERROR; @@ -405,7 +406,8 @@ bool mysql_show_create_user(THD *thd, LEX_USER *user_name) bool set_and_validate_user_attributes(THD *thd, LEX_USER *Str, ulong &what_to_set, - bool is_privileged_user) + bool is_privileged_user, + const char * cmd) { bool user_exists= false; ACL_USER *acl_user; @@ -574,6 +576,17 @@ bool set_and_validate_user_attributes(THD *thd, inbuflen)) { plugin_unlock(0, plugin); + + /* + generate_authentication_string may return error status + without setting actual error. + */ + if (!thd->is_error()) + { + String error_user; + append_user(thd, &error_user, Str, FALSE, FALSE); + my_error(ER_CANNOT_USER, MYF(0), cmd, error_user.c_ptr_safe()); + } return(1); } if (buflen) @@ -759,7 +772,8 @@ bool change_password(THD *thd, const char *host, const char *user, thd->slave_thread) combo->uses_identified_by_clause= false; - if (set_and_validate_user_attributes(thd, combo, what_to_set, true)) + if (set_and_validate_user_attributes(thd, combo, what_to_set, + true, "SET PASSWORD")) { result= 1; mysql_mutex_unlock(&acl_cache->lock); @@ -1390,7 +1404,8 @@ bool mysql_create_user(THD *thd, List &list, bool if_not_exists) result= TRUE; continue; } - if (set_and_validate_user_attributes(thd, user_name, what_to_update, true)) + if (set_and_validate_user_attributes(thd, user_name, what_to_update, + true, "CREATE USER")) { result= TRUE; continue; @@ -1857,7 +1872,7 @@ bool mysql_alter_user(THD *thd, List &list, bool if_exists) user_from->alter_status= thd->lex->alter_password; if (set_and_validate_user_attributes(thd, user_from, what_to_alter, - is_privileged_user)) + is_privileged_user, "ALTER USER")) { result= true; continue; From 207dd7160ee6f7ee69463cbd906ad5208c7d0781 Mon Sep 17 00:00:00 2001 From: Harin Vadodaria Date: Mon, 27 Nov 2017 11:49:43 +0100 Subject: [PATCH 0218/1221] Bug#27099029: UNLIMITED LENGTH OF THE PASSWORD Post push fix: Handled missing cases of GRANT. (cherry picked from commit b7430c02d2e07ae5322c6e5caecc32db76170c2e) --- sql/auth/auth_common.h | 3 ++- sql/auth/sql_authorization.cc | 9 ++++++--- sql/auth/sql_user.cc | 23 +++++++++++++++++++---- 3 files changed, 27 insertions(+), 8 deletions(-) diff --git a/sql/auth/auth_common.h b/sql/auth/auth_common.h index c1d571d2c165..fecc5c286d97 100644 --- a/sql/auth/auth_common.h +++ b/sql/auth/auth_common.h @@ -620,7 +620,8 @@ bool mysql_rename_user(THD *thd, List &list); bool set_and_validate_user_attributes(THD *thd, LEX_USER *Str, ulong &what_to_set, - bool is_privileged_user); + bool is_privileged_user, + const char * cmd); /* sql_auth_cache */ int wild_case_compare(CHARSET_INFO *cs, const char *str,const char *wildstr); diff --git a/sql/auth/sql_authorization.cc b/sql/auth/sql_authorization.cc index ef5aeb33d709..910216d91770 100644 --- a/sql/auth/sql_authorization.cc +++ b/sql/auth/sql_authorization.cc @@ -1321,7 +1321,8 @@ int mysql_table_grant(THD *thd, TABLE_LIST *table_list, } if (set_and_validate_user_attributes(thd, Str, what_to_set, - is_privileged_user)) + is_privileged_user, + revoke_grant?"REVOKE":"GRANT")) { result= TRUE; continue; @@ -1636,7 +1637,8 @@ bool mysql_routine_grant(THD *thd, TABLE_LIST *table_list, bool is_proc, } if (set_and_validate_user_attributes(thd, Str, what_to_set, - is_privileged_user)) + is_privileged_user, + revoke_grant?"REVOKE":"GRANT")) { result= TRUE; continue; @@ -1887,7 +1889,8 @@ bool mysql_grant(THD *thd, const char *db, List &list, } if (set_and_validate_user_attributes(thd, Str, what_to_set, - is_privileged_user)) + is_privileged_user, + revoke_grant?"REVOKE":"GRANT")) { result= TRUE; continue; diff --git a/sql/auth/sql_user.cc b/sql/auth/sql_user.cc index 08d3d113300d..2ad005e12cdb 100644 --- a/sql/auth/sql_user.cc +++ b/sql/auth/sql_user.cc @@ -397,6 +397,7 @@ bool mysql_show_create_user(THD *thd, LEX_USER *user_name) @param what_to_set User attributes @param is_privileged_user Whether caller has CREATE_USER_ACL or UPDATE_ACL over mysql.* + @param cmd Command information @retval 0 ok @retval 1 ERROR; @@ -405,7 +406,8 @@ bool mysql_show_create_user(THD *thd, LEX_USER *user_name) bool set_and_validate_user_attributes(THD *thd, LEX_USER *Str, ulong &what_to_set, - bool is_privileged_user) + bool is_privileged_user, + const char * cmd) { bool user_exists= false; ACL_USER *acl_user; @@ -574,6 +576,17 @@ bool set_and_validate_user_attributes(THD *thd, inbuflen)) { plugin_unlock(0, plugin); + + /* + generate_authentication_string may return error status + without setting actual error. + */ + if (!thd->is_error()) + { + String error_user; + append_user(thd, &error_user, Str, FALSE, FALSE); + my_error(ER_CANNOT_USER, MYF(0), cmd, error_user.c_ptr_safe()); + } return(1); } if (buflen) @@ -759,7 +772,8 @@ bool change_password(THD *thd, const char *host, const char *user, thd->slave_thread) combo->uses_identified_by_clause= false; - if (set_and_validate_user_attributes(thd, combo, what_to_set, true)) + if (set_and_validate_user_attributes(thd, combo, what_to_set, + true, "SET PASSWORD")) { result= 1; mysql_mutex_unlock(&acl_cache->lock); @@ -1390,7 +1404,8 @@ bool mysql_create_user(THD *thd, List &list, bool if_not_exists) result= TRUE; continue; } - if (set_and_validate_user_attributes(thd, user_name, what_to_update, true)) + if (set_and_validate_user_attributes(thd, user_name, what_to_update, + true, "CREATE USER")) { result= TRUE; continue; @@ -1857,7 +1872,7 @@ bool mysql_alter_user(THD *thd, List &list, bool if_exists) user_from->alter_status= thd->lex->alter_password; if (set_and_validate_user_attributes(thd, user_from, what_to_alter, - is_privileged_user)) + is_privileged_user, "ALTER USER")) { result= true; continue; From fa55a59f2e1b422b0302533ad7adf7c53ca564d5 Mon Sep 17 00:00:00 2001 From: Balasubramanian Kandasamy Date: Mon, 27 Nov 2017 19:31:45 +0530 Subject: [PATCH 0219/1221] Postfix : WL#9769: Keyring migration tool and new commercial keyring_encrypted_file plugin. - Fix typo in the changelog for el/sles rpm builds - Added keyring_encrypted_file to docker rpm --- packaging/rpm-docker/mysql.spec.in | 1 + packaging/rpm-oel/mysql.spec.in | 2 +- packaging/rpm-sles/mysql.spec.in | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packaging/rpm-docker/mysql.spec.in b/packaging/rpm-docker/mysql.spec.in index 6a1c417cbfc4..34e6294357b6 100644 --- a/packaging/rpm-docker/mysql.spec.in +++ b/packaging/rpm-docker/mysql.spec.in @@ -323,6 +323,7 @@ rm -r $(readlink var) var %attr(755, root, root) %{_libdir}/mysql/plugin/audit_log.so %attr(644, root, root) %{_datadir}/mysql/audit_log_filter_linux_install.sql %attr(755, root, root) %{_libdir}/mysql/plugin/authentication_pam.so +%attr(755, root, root) %{_libdir}/mysql/plugin/keyring_encrypted_file.so %attr(755, root, root) %{_libdir}/mysql/plugin/keyring_okv.so %attr(755, root, root) %{_libdir}/mysql/plugin/thread_pool.so %attr(755, root, root) %{_libdir}/mysql/plugin/openssl_udf.so diff --git a/packaging/rpm-oel/mysql.spec.in b/packaging/rpm-oel/mysql.spec.in index 3f9d14c6ba96..444f76c6bc03 100644 --- a/packaging/rpm-oel/mysql.spec.in +++ b/packaging/rpm-oel/mysql.spec.in @@ -1362,7 +1362,7 @@ fi %endif # cluster %changelog -* Wed Nov 08 2017 Bharathy Satish - 5.7.21-1 - Add keyring_encrypted_file.so plugin * Tue Oct 31 2017 Bjorn Munch - 5.7.21-1 diff --git a/packaging/rpm-sles/mysql.spec.in b/packaging/rpm-sles/mysql.spec.in index 7978558909e8..06cfb6a5ad8c 100644 --- a/packaging/rpm-sles/mysql.spec.in +++ b/packaging/rpm-sles/mysql.spec.in @@ -1167,7 +1167,7 @@ fi %endif # cluster %changelog -* Wed 08 2017 Bharathy Satish - 5.7.21-1 +* Wed Nov 08 2017 Bharathy Satish - 5.7.21-1 - Add keyring_encrypted_file.so plugin * Tue Oct 31 2017 Bjorn Munch - 5.7.21-1 From 944a330701309e4e9ce032a45f5bff73f484e236 Mon Sep 17 00:00:00 2001 From: Balasubramanian Kandasamy Date: Mon, 27 Nov 2017 19:31:45 +0530 Subject: [PATCH 0220/1221] Postfix : WL#9769: Keyring migration tool and new commercial keyring_encrypted_file plugin. - Fix typo in the changelog for el/sles rpm builds - Added keyring_encrypted_file to docker rpm (cherry picked from commit aacc7f43ce98353e3c2f89273b43ebf1424ee758) --- packaging/rpm-docker/mysql.spec.in | 1 + packaging/rpm-oel/mysql.spec.in | 2 +- packaging/rpm-sles/mysql.spec.in | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packaging/rpm-docker/mysql.spec.in b/packaging/rpm-docker/mysql.spec.in index 6a1c417cbfc4..34e6294357b6 100644 --- a/packaging/rpm-docker/mysql.spec.in +++ b/packaging/rpm-docker/mysql.spec.in @@ -323,6 +323,7 @@ rm -r $(readlink var) var %attr(755, root, root) %{_libdir}/mysql/plugin/audit_log.so %attr(644, root, root) %{_datadir}/mysql/audit_log_filter_linux_install.sql %attr(755, root, root) %{_libdir}/mysql/plugin/authentication_pam.so +%attr(755, root, root) %{_libdir}/mysql/plugin/keyring_encrypted_file.so %attr(755, root, root) %{_libdir}/mysql/plugin/keyring_okv.so %attr(755, root, root) %{_libdir}/mysql/plugin/thread_pool.so %attr(755, root, root) %{_libdir}/mysql/plugin/openssl_udf.so diff --git a/packaging/rpm-oel/mysql.spec.in b/packaging/rpm-oel/mysql.spec.in index 3f9d14c6ba96..444f76c6bc03 100644 --- a/packaging/rpm-oel/mysql.spec.in +++ b/packaging/rpm-oel/mysql.spec.in @@ -1362,7 +1362,7 @@ fi %endif # cluster %changelog -* Wed Nov 08 2017 Bharathy Satish - 5.7.21-1 - Add keyring_encrypted_file.so plugin * Tue Oct 31 2017 Bjorn Munch - 5.7.21-1 diff --git a/packaging/rpm-sles/mysql.spec.in b/packaging/rpm-sles/mysql.spec.in index 7978558909e8..06cfb6a5ad8c 100644 --- a/packaging/rpm-sles/mysql.spec.in +++ b/packaging/rpm-sles/mysql.spec.in @@ -1167,7 +1167,7 @@ fi %endif # cluster %changelog -* Wed 08 2017 Bharathy Satish - 5.7.21-1 +* Wed Nov 08 2017 Bharathy Satish - 5.7.21-1 - Add keyring_encrypted_file.so plugin * Tue Oct 31 2017 Bjorn Munch - 5.7.21-1 From 8bc828b982f678d6b57c1853bbe78080c8f84e84 Mon Sep 17 00:00:00 2001 From: Karthik Kamath Date: Mon, 27 Nov 2017 19:59:29 +0530 Subject: [PATCH 0221/1221] BUG#26502135: MYSQLD SEGFAULTS IN MDL_CONTEXT::TRY_ACQUIRE_LOCK_IMPL ANALYSIS: ========= Server sometimes exited when multiple threads tried to acquire and release metadata locks simultaneously (for example, necessary to access a table). The same problem could have occurred when new objects were registered/ deregistered in Performance Schema. The problem was caused by a bug in LF_HASH - our lock free hash implementation which is used by metadata locking subsystem in 5.7 branch. In 5.5 and 5.6 we only use LF_HASH in Performance Schema Instrumentation implementation. So for these versions, the problem was limited to P_S. The problem was in my_lfind() function, which searches for the specific hash element by going through the elements list. During this search it loads information about element checked such as key pointer and hash value into local variables. Then it confirms that they are not corrupted by concurrent delete operation (which will set pointer to 0) by checking if element is still in the list. The latter check did not take into account that compiler (and processor) can reorder reads in such a way that load of key pointer will happen after it, making result of the check invalid. FIX: ==== This patch fixes the problem by ensuring that no such reordering can take place. This is achieved by using my_atomic_loadptr() which contains compiler and processor memory barriers for the check mentioned above and other similar places. The default (for non-Windows systems) implementation of my_atomic*() relies on old __sync intrisics and implements my_atomic_loadptr() as read-modify operation. To avoid scalability/performance penalty associated with addition of my_atomic_loadptr()'s we change the my_atomic*() to use newer __atomic intrisics when available. This new default implementation doesn't have such a drawback. --- mysys/lf_hash.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/mysys/lf_hash.c b/mysys/lf_hash.c index dc019b07bd98..3a3f665a4f1e 100644 --- a/mysys/lf_hash.c +++ b/mysys/lf_hash.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2006, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2006, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -83,7 +83,8 @@ static int my_lfind(LF_SLIST * volatile *head, CHARSET_INFO *cs, uint32 hashnr, do { /* PTR() isn't necessary below, head is a dummy node */ cursor->curr= (LF_SLIST *)(*cursor->prev); _lf_pin(pins, 1, cursor->curr); - } while (*cursor->prev != (intptr)cursor->curr && LF_BACKOFF); + } while (my_atomic_loadptr((void**)cursor->prev) != cursor->curr && + LF_BACKOFF); for (;;) { if (unlikely(!cursor->curr)) @@ -97,7 +98,7 @@ static int my_lfind(LF_SLIST * volatile *head, CHARSET_INFO *cs, uint32 hashnr, cur_hashnr= cursor->curr->hashnr; cur_key= cursor->curr->key; cur_keylen= cursor->curr->keylen; - if (*cursor->prev != (intptr)cursor->curr) + if (my_atomic_loadptr((void**)cursor->prev) != cursor->curr) { (void)LF_BACKOFF; goto retry; From 888ab39c07b0aba3e9fa37b9a25e596d0a5abb6d Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Fri, 17 Nov 2017 15:30:30 +0100 Subject: [PATCH 0222/1221] Bug#26612465 BUILDING WITH CMAKE 3.9.0 OR NEWER GIVES DEPRECATION WARNINGS [noclose] Remove trailing whitespace, to cherry-pick from 8.0 --- cmake/install_macros.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/install_macros.cmake b/cmake/install_macros.cmake index 2677343097f4..8a3506a25082 100644 --- a/cmake/install_macros.cmake +++ b/cmake/install_macros.cmake @@ -45,7 +45,7 @@ MACRO (INSTALL_DEBUG_SYMBOLS targets) SET(comp Server) ELSE() SET(comp Debuginfo) - ENDIF() + ENDIF() # No .pdb file for static libraries. IF(NOT type MATCHES "STATIC_LIBRARY") INSTALL(FILES ${pdb_location} From 77b7fe23ff0d4e4a5cca5ab45f730c6af665b658 Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Thu, 7 Sep 2017 11:00:49 +0200 Subject: [PATCH 0223/1221] Bug#26612465 BUILDING WITH CMAKE 3.9.0 OR NEWER GIVES DEPRECATION WARNINGS [noclose] Use generator expression rather than LOCATION to find .pdb file. Backport to 5.7 (cherry picked from commit b8ac7656f2157089396800c4c56475f5697aa091) (cherry picked from commit 3e8cfdee941c5247fca5c5dd69eb67047c323890) --- CMakeLists.txt | 3 ++- cmake/install_macros.cmake | 15 ++++----------- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 151af7f435a5..406ab125b79d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,7 +15,8 @@ IF(WIN32) # CMake 2.8.12 is needed for Visual Studio 2013 - CMAKE_MINIMUM_REQUIRED(VERSION 2.8.12) + # CMake 3.1.0 is needed for $ + CMAKE_MINIMUM_REQUIRED(VERSION 3.1.0) ELSE() # There's a bug in unzipping prior to 2.8.2 # Debian 7 has the oldest cmake we need to support diff --git a/cmake/install_macros.cmake b/cmake/install_macros.cmake index 8a3506a25082..e4a7577fa122 100644 --- a/cmake/install_macros.cmake +++ b/cmake/install_macros.cmake @@ -19,7 +19,6 @@ INCLUDE(${MYSQL_CMAKE_SCRIPT_DIR}/cmake_parse_arguments.cmake) MACRO (INSTALL_DEBUG_SYMBOLS targets) IF(MSVC) FOREACH(target ${targets}) - GET_TARGET_PROPERTY(location ${target} LOCATION) GET_TARGET_PROPERTY(type ${target} TYPE) IF(NOT INSTALL_LOCATION) IF(type MATCHES "STATIC_LIBRARY" @@ -33,22 +32,16 @@ MACRO (INSTALL_DEBUG_SYMBOLS targets) "cannot determine type of ${target}. Don't now where to install") ENDIF() ENDIF() - STRING(REPLACE ".exe" ".pdb" pdb_location ${location}) - STRING(REPLACE ".dll" ".pdb" pdb_location ${pdb_location}) - STRING(REPLACE ".lib" ".pdb" pdb_location ${pdb_location}) - IF(CMAKE_GENERATOR MATCHES "Visual Studio") - STRING(REPLACE - "${CMAKE_CFG_INTDIR}" "\${CMAKE_INSTALL_CONFIG_NAME}" - pdb_location ${pdb_location}) - ENDIF() + IF(target STREQUAL "mysqld") - SET(comp Server) + SET(comp Server) ELSE() SET(comp Debuginfo) ENDIF() + # No .pdb file for static libraries. IF(NOT type MATCHES "STATIC_LIBRARY") - INSTALL(FILES ${pdb_location} + INSTALL(FILES $ DESTINATION ${INSTALL_LOCATION} COMPONENT ${comp}) ENDIF() ENDFOREACH() From 82ab7a23c001cef3b9213215d5623ff98bfd685a Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Thu, 23 Nov 2017 08:18:58 +0100 Subject: [PATCH 0224/1221] Bug#26612465 BUILDING WITH CMAKE 3.9.0 OR NEWER GIVES DEPRECATION WARNINGS [noclose] Remove some spurious cmake output/comments from earlier backport. --- cmake/libutils.cmake | 3 --- cmake/mysql_add_executable.cmake | 7 +++---- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/cmake/libutils.cmake b/cmake/libutils.cmake index 573a5da03848..c4b2b9705e7c 100644 --- a/cmake/libutils.cmake +++ b/cmake/libutils.cmake @@ -228,9 +228,6 @@ MACRO(MERGE_CONVENIENCE_LIBRARIES) SET(LIBS ${ARG_DEFAULT_ARGS}) LIST(REMOVE_AT LIBS 0) - MESSAGE(STATUS "MERGE_CONVENIENCE_LIBRARIES TARGET ${TARGET}") - MESSAGE(STATUS "MERGE_CONVENIENCE_LIBRARIES LIBS ${LIBS}") - SET(SOURCE_FILE ${CMAKE_BINARY_DIR}/archive_output_directory/${TARGET}_depends.c) ADD_LIBRARY(${TARGET} STATIC ${SOURCE_FILE}) diff --git a/cmake/mysql_add_executable.cmake b/cmake/mysql_add_executable.cmake index bcbbe7d4931c..828c9a2d7ed5 100644 --- a/cmake/mysql_add_executable.cmake +++ b/cmake/mysql_add_executable.cmake @@ -1,5 +1,5 @@ # Copyright (c) 2009, 2017, Oracle and/or its affiliates. All rights reserved. -# +# # 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. @@ -17,12 +17,11 @@ # Usage (same as for standard CMake's ADD_EXECUTABLE) # # MYSQL_ADD_EXECUTABLE(target source1...sourceN) -# # MySQL specifics: -# - instruct CPack to install executable under ${CMAKE_INSTALL_PREFIX}/bin directory +# - instruct CPack to install executable under +# ${CMAKE_INSTALL_PREFIX}/bin directory # On Windows : # - add version resource -# - instruct CPack to do autenticode signing if SIGNCODE is set INCLUDE(cmake_parse_arguments) From 13fa68cdb2648e3958404999ae32bf53e4c3b7e3 Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Thu, 23 Nov 2017 08:40:28 +0100 Subject: [PATCH 0225/1221] Bug#26612465 BUILDING WITH CMAKE 3.9.0 OR NEWER GIVES DEPRECATION WARNINGS Backport to 5.7 Remove cmake policies no longer in use: CMP0007 was introduced in 2.6.0 and can go away. CMP0011 was introduced in 2.6.3 and can go away. --- scripts/CMakeLists.txt | 8 -------- 1 file changed, 8 deletions(-) diff --git a/scripts/CMakeLists.txt b/scripts/CMakeLists.txt index de48641571ed..beda33bea76b 100644 --- a/scripts/CMakeLists.txt +++ b/scripts/CMakeLists.txt @@ -308,14 +308,6 @@ ENDIF() SET(CLIENT_LIBS "") SET(LIBS "") -# Avoid compatibility warning about lists with empty elements -IF(POLICY CMP0011) - CMAKE_POLICY(SET CMP0011 NEW) -ENDIF() -IF(POLICY CMP0007) - CMAKE_POLICY(SET CMP0007 OLD) -ENDIF() - # Extract dependencies using CMake's internal ${target}_LIB_DEPENDS variable # returned string in ${var} is can be passed to linker's command line MACRO(EXTRACT_LINK_LIBRARIES target var) From efc490f763b48c242f310589a51a6b85e07bdb8d Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Tue, 22 Aug 2017 14:28:03 +0200 Subject: [PATCH 0226/1221] Bug #26666594: SYSCALL WARNINGS IN MACOS Backport to 5.7 Make macOS use pthread_threadid_np() instead of calling the SYS_thread_selfid syscall directly. Change-Id: Ic795195cf6dabd55fe6245b8bf947f35258e61c4 (cherry picked from commit a0d9941b6cd17a275bab23f5e95ffa16b698efd6) --- cmake/os/WindowsCache.cmake | 3 ++- config.h.cmake | 1 + configure.cmake | 11 +++++++++++ include/my_thread_os_id.h | 18 ++++++++++++------ 4 files changed, 26 insertions(+), 7 deletions(-) diff --git a/cmake/os/WindowsCache.cmake b/cmake/os/WindowsCache.cmake index 737d95623a12..54aad3a2c6ee 100644 --- a/cmake/os/WindowsCache.cmake +++ b/cmake/os/WindowsCache.cmake @@ -1,4 +1,4 @@ -# Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2010, 2017, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -209,6 +209,7 @@ SET(HAVE_BUILTIN_STPCPY CACHE INTERNAL "") SET(HAVE_GCC_ATOMIC_BUILTINS CACHE INTERNAL "") SET(HAVE_GCC_SYNC_BUILTINS CACHE INTERNAL "") # Derived result HAVE_VALGRIND +SET(HAVE_PTHREAD_THREADID_NP CACHE INTERNAL "") # IPV6 SET(HAVE_NETINET_IN6_H CACHE INTERNAL "") diff --git a/config.h.cmake b/config.h.cmake index e0abaccec458..46c133e002e5 100644 --- a/config.h.cmake +++ b/config.h.cmake @@ -198,6 +198,7 @@ #cmakedefine HAVE_GCC_ATOMIC_BUILTINS 1 #cmakedefine HAVE_GCC_SYNC_BUILTINS 1 #cmakedefine HAVE_VALGRIND +#cmakedefine HAVE_PTHREAD_THREADID_NP 1 /* IPV6 */ #cmakedefine HAVE_NETINET_IN6_H 1 diff --git a/configure.cmake b/configure.cmake index 4bbfcca658cc..de004f55801f 100644 --- a/configure.cmake +++ b/configure.cmake @@ -922,6 +922,17 @@ CHECK_STRUCT_HAS_MEMBER("struct sockaddr_in" sin_len CHECK_STRUCT_HAS_MEMBER("struct sockaddr_in6" sin6_len "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_SOCKADDR_IN6_SIN6_LEN) +# Check for pthread_threadid_np() +CHECK_C_SOURCE_COMPILES(" +#include +int main(int ac, char **av) +{ + unsigned long long tid64; + pthread_threadid_np(NULL, &tid64); + return (tid64 != 0 ? 0 : 1); +}" +HAVE_PTHREAD_THREADID_NP) + CHECK_CXX_SOURCE_COMPILES( " #include diff --git a/include/my_thread_os_id.h b/include/my_thread_os_id.h index a0a2de31614d..9ee8d482c6f0 100644 --- a/include/my_thread_os_id.h +++ b/include/my_thread_os_id.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -34,6 +34,10 @@ #include /* pthread_getthreadid_np() */ #endif /* HAVE_PTHREAD_GETTHREADID_NP */ +#ifdef HAVE_PTHREAD_THREADID_NP +#include +#endif /* HAVE_PTHREAD_THREADID_NP */ + C_MODE_START typedef unsigned long long my_thread_os_id_t; @@ -48,14 +52,16 @@ typedef unsigned long long my_thread_os_id_t; */ static inline my_thread_os_id_t my_thread_os_id() { -#ifdef HAVE_SYS_THREAD_SELFID +#ifdef HAVE_PTHREAD_THREADID_NP /* - Mac OSX. - Be careful to use SYS_thread_selfid first, - and to not use SYS_gettid on Mac OSX, + macOS. + + Be careful to use this version first, and to not use SYS_gettid on macOS, as SYS_gettid has a different meaning compared to linux gettid(). */ - return syscall(SYS_thread_selfid); + uint64_t tid64; + pthread_threadid_np(nullptr, &tid64); + return (pid_t)tid64; #else #ifdef HAVE_SYS_GETTID /* From 0620870190f546bc5531ee2e2c697d61fa758042 Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Thu, 23 Nov 2017 17:00:23 +0100 Subject: [PATCH 0227/1221] lp1729241, BLD-862: Fixed compilation issues with gcc-7 for the 5.5 branch * Fixed an uninitailized read during debug printing in sql/sql_cache.cc. This change was backported from 5.7. * Fixed an incorrect sprintf buffer size in sql/sp_head.cc. Previous implementation used an incorrectly (under)sized local tmp buffer. * Added a missing break to the pipe option in sql-common/client.c Without this break, it accepted an additional integer parameter as a timeout value, but the documentation doesn't mention it anywhere. * Added a missing break to heap/hp_extra.c This change is backported from 8.0 * Added a break to a case in sql/item_func.cc. Based on the code around this block, it looks logical that we do not wish to raise assertions for every string result - maybe only on error? * Fixed an incorrect nullptr assignment in client/mysql.cc. This change was backported from 5.7. * Enlarged the size of an internal percona specific file name buffer so it always fits the result of an sprintf operation. Note that this is a hack, and do not change file name truncation at general: most of the times, filenames are still truncated at 511 characters. We are just a bit more inconsistent now, because at this location, they are truncated to 572 characters. * Added a missing break to sql/log_event.cc. This change was backported from 5.6. * Corrected the length of a local sprintf buffer in storage/myisam/myisamchk.c. * Null initialized a local pointer in sql/sql_partition.cc. As it otherwise could result in uninitailized reads in release builds. On debug builds, this case is guarded by an assert. * Returning the success status in tests/bug25714.c. This way the variable is also used in the release build, and the correctness of the execution can also be checked using the exit status of the program. Previously this variable was only used in debug assertions. * Changed bool conversion to be more explict in some assertions. These do not result in any behaviour change. * Added or changed fallthrough comments at many places so GCC's parser will be able to identify them. These do not result in any behaviour change. * Moved a few breaks to different locations so GCC's parser will correctly identify them. These do not result in any behaviour change. --- client/mysql.cc | 2 +- client/mysqlbinlog.cc | 3 +- client/mysqldump.c | 1 + extra/replace.c | 1 + plugin/percona-udf/murmur_udf.cc | 4 +- .../tokudb-backup-plugin/Percona-TokuBackup | 1 + sql-common/client.c | 1 + sql/events.cc | 1 + sql/field.cc | 2 +- sql/ha_partition.cc | 1 + sql/item.cc | 3 +- sql/item_func.cc | 2 + sql/log.cc | 5 +++ sql/log_event.cc | 1 + sql/opt_sum.cc | 1 + sql/sp_head.cc | 7 ++-- sql/sql_cache.cc | 2 +- sql/sql_lex.cc | 4 ++ sql/sql_parse.cc | 5 ++- sql/sql_partition.cc | 2 +- sql/sql_plugin.cc | 5 ++- sql/sql_prepare.cc | 2 + sql/sql_repl.cc | 1 + sql/sql_show.cc | 1 + sql/sql_table.cc | 14 ++++--- sql/sql_yacc.yy | 2 + storage/federated/ha_federated.cc | 4 +- storage/heap/hp_extra.c | 1 + storage/innobase/handler/ha_innodb.cc | 7 +++- storage/innobase/include/data0type.ic | 3 +- storage/innobase/include/log0online.h | 6 ++- storage/innobase/include/page0zip.ic | 2 +- storage/innobase/log/log0online.c | 6 +-- storage/innobase/row/row0mysql.c | 6 ++- storage/innobase/row/row0purge.c | 3 +- storage/innobase/row/row0sel.c | 2 +- storage/myisam/mi_extra.c | 1 + storage/myisam/mi_panic.c | 1 + storage/myisam/myisamchk.c | 2 +- strings/ctype-utf8.c | 26 ++++++------ strings/decimal.c | 42 +++++++++---------- strings/dtoa.c | 7 ++-- tests/bug25714.c | 2 +- 43 files changed, 123 insertions(+), 72 deletions(-) create mode 160000 plugin/tokudb-backup-plugin/Percona-TokuBackup diff --git a/client/mysql.cc b/client/mysql.cc index d32df16b8c57..30da02e79716 100644 --- a/client/mysql.cc +++ b/client/mysql.cc @@ -2717,7 +2717,7 @@ You can turn off this feature to get a quicker startup with -A\n\n"); mysql_free_result(fields); break; } - field_names[i][num_fields*2]= '\0'; + field_names[i][num_fields*2]= NULL; j=0; while ((sql_field=mysql_fetch_field(fields))) { diff --git a/client/mysqlbinlog.cc b/client/mysqlbinlog.cc index f2d6a2c9394e..72af64c2a1de 100644 --- a/client/mysqlbinlog.cc +++ b/client/mysqlbinlog.cc @@ -1026,6 +1026,7 @@ Exit_status process_event(PRINT_EVENT_INFO *print_event_info, Log_event *ev, goto end; } } + // fallthrough case WRITE_ROWS_EVENT: case DELETE_ROWS_EVENT: case UPDATE_ROWS_EVENT: @@ -1123,8 +1124,8 @@ Exit_status process_event(PRINT_EVENT_INFO *print_event_info, Log_event *ev, type_str); goto err; } - /* FALL THROUGH */ } + // fallthrough default: ev->print(result_file, print_event_info); if (head->error == -1) diff --git a/client/mysqldump.c b/client/mysqldump.c index 42bc1227819b..8244729f9864 100644 --- a/client/mysqldump.c +++ b/client/mysqldump.c @@ -1979,6 +1979,7 @@ static void print_xml_comment(FILE *xml_file, size_t len, case '-': if (*(comment_string + 1) == '-') /* Only one hyphen allowed. */ break; + // fallthrough default: fputc(*comment_string, xml_file); break; diff --git a/extra/replace.c b/extra/replace.c index 53d9830ad408..edf62aa51042 100644 --- a/extra/replace.c +++ b/extra/replace.c @@ -173,6 +173,7 @@ register char **argv[]; break; case 'V': version=1; + // fallthrough case 'I': case '?': help=1; /* Help text written */ diff --git a/plugin/percona-udf/murmur_udf.cc b/plugin/percona-udf/murmur_udf.cc index b56edaf869e7..347cc62c3e22 100644 --- a/plugin/percona-udf/murmur_udf.cc +++ b/plugin/percona-udf/murmur_udf.cc @@ -97,8 +97,8 @@ MurmurHash2( const void *key, int len, unsigned int seed ) { } switch (len) { - case 3: h2 ^= ((unsigned char*)data)[2] << 16; - case 2: h2 ^= ((unsigned char*)data)[1] << 8; + case 3: h2 ^= ((unsigned char*)data)[2] << 16; // fallthrough + case 2: h2 ^= ((unsigned char*)data)[1] << 8; // fallthrough case 1: h2 ^= ((unsigned char*)data)[0]; h2 *= m; }; diff --git a/plugin/tokudb-backup-plugin/Percona-TokuBackup b/plugin/tokudb-backup-plugin/Percona-TokuBackup new file mode 160000 index 000000000000..16707e12b323 --- /dev/null +++ b/plugin/tokudb-backup-plugin/Percona-TokuBackup @@ -0,0 +1 @@ +Subproject commit 16707e12b32371451e73091da54a82ce0faa0ecc diff --git a/sql-common/client.c b/sql-common/client.c index 17b083f79c7e..5e56fd48a80c 100644 --- a/sql-common/client.c +++ b/sql-common/client.c @@ -1280,6 +1280,7 @@ void mysql_read_default_options(struct st_mysql_options *options, break; case OPT_pipe: options->protocol = MYSQL_PROTOCOL_PIPE; + break; case OPT_connect_timeout: case OPT_timeout: if (opt_arg) diff --git a/sql/events.cc b/sql/events.cc index 25de503300bd..27beec22cfc3 100644 --- a/sql/events.cc +++ b/sql/events.cc @@ -241,6 +241,7 @@ Events::reconstruct_interval_expression(String *buf, interval_type interval, break; case INTERVAL_WEEK: expr/= 7; + // fallthrough default: close_quote= FALSE; break; diff --git a/sql/field.cc b/sql/field.cc index 30aa5dd15cb5..1a238e2121db 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -9528,7 +9528,7 @@ bool Create_field::init(THD *thd, char *fld_name, enum_field_types fld_type, case MYSQL_TYPE_DATE: /* Old date type. */ sql_type= MYSQL_TYPE_NEWDATE; - /* fall trough */ + // fallthrough case MYSQL_TYPE_NEWDATE: length= MAX_DATE_WIDTH; break; diff --git a/sql/ha_partition.cc b/sql/ha_partition.cc index 414f9d525364..e4723691aff2 100644 --- a/sql/ha_partition.cc +++ b/sql/ha_partition.cc @@ -7072,6 +7072,7 @@ void ha_partition::print_error(int error, myf errflag) m_err_rec= NULL; DBUG_VOID_RETURN; } + // fallthrough default: { if (!(thd->lex->alter_info.flags & ALTER_TRUNCATE_PARTITION)) diff --git a/sql/item.cc b/sql/item.cc index 2a8f84bf6afa..9afdfbe36540 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -5416,7 +5416,8 @@ Field *Item::tmp_table_field_from_field_type(TABLE *table, bool fixed_length) collation.collation); break; } - /* Fall through to make_string_field() */ + // fallthrough + // to make_string_field() case MYSQL_TYPE_ENUM: case MYSQL_TYPE_SET: case MYSQL_TYPE_VAR_STRING: diff --git a/sql/item_func.cc b/sql/item_func.cc index f6611739b7df..e04b9eee7c7e 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -1724,6 +1724,7 @@ my_decimal *Item_func_mod::decimal_op(my_decimal *decimal_value) return decimal_value; case E_DEC_DIV_ZERO: signal_divide_by_null(); + // fallthrough default: null_value= 1; return 0; @@ -4511,6 +4512,7 @@ String *user_var_entry::val_str(my_bool *null_value, String *str, case STRING_RESULT: if (str->copy(value, length, collation.collation)) str= 0; // EOM error + break; case ROW_RESULT: DBUG_ASSERT(1); // Impossible break; diff --git a/sql/log.cc b/sql/log.cc index 05925522f51d..567ef183f62e 100644 --- a/sql/log.cc +++ b/sql/log.cc @@ -7097,8 +7097,10 @@ void TC_LOG_MMAP::close() mysql_cond_destroy(&COND_active); mysql_cond_destroy(&COND_pool); mysql_cond_destroy(&COND_queue_busy); + // fallthrough case 5: data[0]='A'; // garble the first (signature) byte, in case mysql_file_delete fails + // fallthrough case 4: for (i=0; i < npages; i++) { @@ -7107,10 +7109,13 @@ void TC_LOG_MMAP::close() mysql_mutex_destroy(&pages[i].lock); mysql_cond_destroy(&pages[i].cond); } + // fallthrough case 3: my_free(pages); + // fallthrough case 2: my_munmap((char*)data, (size_t)file_length); + // fallthrough case 1: mysql_file_close(fd, MYF(0)); } diff --git a/sql/log_event.cc b/sql/log_event.cc index 51405142c2a5..249a351aa019 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -2953,6 +2953,7 @@ Query_log_event::Query_log_event(const char* buf, uint event_len, CHECK_SPACE(pos, end, host.length); host.str= (char *)pos; pos+= host.length; + break; } default: /* That's why you must write status vars in growing order of code */ diff --git a/sql/opt_sum.cc b/sql/opt_sum.cc index aaf279395dc6..daa6c1458b6e 100644 --- a/sql/opt_sum.cc +++ b/sql/opt_sum.cc @@ -994,6 +994,7 @@ static int maxmin_in_range(bool max_fl, Field* field, COND *cond) case Item_func::LT_FUNC: case Item_func::LE_FUNC: less_fl= 1; + // fallthrough case Item_func::GT_FUNC: case Item_func::GE_FUNC: { diff --git a/sql/sp_head.cc b/sql/sp_head.cc index 1ac06a6e2563..a452a4ae5969 100644 --- a/sql/sp_head.cc +++ b/sql/sp_head.cc @@ -150,7 +150,8 @@ sp_get_item_value(THD *thd, Item *item, String *str) case DECIMAL_RESULT: if (item->field_type() != MYSQL_TYPE_BIT) return item->val_str(str); - else {/* Bit type is handled as binary string */} + // fallthrough + /* Bit type is handled as binary string */ case STRING_RESULT: { String *result= item->val_str(str); @@ -2888,10 +2889,10 @@ sp_head::show_routine_code(THD *thd) */ if (ip != i->m_ip) { - const char *format= "Instruction at position %u has m_ip=%u"; + const char format[] = "Instruction at position %u has m_ip=%u"; char tmp[sizeof(format) + 2*SP_INSTR_UINT_MAXLEN + 1]; - sprintf(tmp, format, ip, i->m_ip); + snprintf(tmp, sizeof(tmp), format, ip, i->m_ip); /* Since this is for debugging purposes only, we don't bother to introduce a special error code for it. diff --git a/sql/sql_cache.cc b/sql/sql_cache.cc index c3db051a99af..d186567ce923 100644 --- a/sql/sql_cache.cc +++ b/sql/sql_cache.cc @@ -1974,7 +1974,7 @@ def_week_frmt: %lu, in_trans: %d, autocommit: %d", { DBUG_PRINT("qcache", ("Temporary table detected: '%s.%s'", - table_list.db, table_list.alias)); + tmptable->s->db.str, tmptable->s->table_name.str)); unlock(); /* We should not store result of this query because it contain diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index 5a7589e8debb..6e99806f6b4b 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -969,6 +969,7 @@ static int lex_one_token(YYSTYPE *yylval, THD *thd) yylval->lex_str.length=2; return NULL_SYM; } + // fallthrough case MY_LEX_CHAR: // Unknown or single char token case MY_LEX_SKIP: // This should not happen if (c == '-' && lip->yyPeek() == '-' && @@ -1032,12 +1033,14 @@ static int lex_one_token(YYSTYPE *yylval, THD *thd) state= MY_LEX_HEX_NUMBER; break; } + // fallthrough case MY_LEX_IDENT_OR_BIN: if (lip->yyPeek() == '\'') { // Found b'bin-number' state= MY_LEX_BIN_NUMBER; break; } + // fallthrough case MY_LEX_IDENT: const char *start; #if defined(USE_MB) && defined(USE_MB_IDENT) @@ -1373,6 +1376,7 @@ static int lex_one_token(YYSTYPE *yylval, THD *thd) state= MY_LEX_USER_VARIABLE_DELIMITER; break; } + // fallthrough /* " used for strings */ case MY_LEX_STRING: // Incomplete text string if (!(yylval->lex_str.str = get_text(lip, 1, 1))) diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index d57908a5d282..2353d5a369fe 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -2468,6 +2468,7 @@ case SQLCOM_PREPARE: break; } } + // fallthrough case SQLCOM_PURGE_BEFORE: { Item *it; @@ -3107,8 +3108,8 @@ case SQLCOM_PREPARE: /* mysql_update return 2 if we need to switch to multi-update */ if (up_result != 2) break; - /* Fall through */ } + // fallthrough case SQLCOM_UPDATE_MULTI: { DBUG_ASSERT(first_table == all_tables && first_table != 0); @@ -3218,6 +3219,7 @@ case SQLCOM_PREPARE: DBUG_PRINT("debug", ("Just after generate_incident()")); } #endif + // fallthrough case SQLCOM_INSERT: { DBUG_ASSERT(first_table == all_tables && first_table != 0); @@ -3944,6 +3946,7 @@ case SQLCOM_PREPARE: initialize this variable because RESET shares the same code as FLUSH */ lex->no_write_to_binlog= 1; + // fallthrough case SQLCOM_FLUSH: { int write_to_binlog; diff --git a/sql/sql_partition.cc b/sql/sql_partition.cc index 0395e611f8e1..0b8a1e0d836d 100644 --- a/sql/sql_partition.cc +++ b/sql/sql_partition.cc @@ -7637,7 +7637,7 @@ int get_part_iter_for_interval_cols_via_map(partition_info *part_info, PARTITION_ITERATOR *part_iter) { uint32 nparts; - get_col_endpoint_func get_col_endpoint; + get_col_endpoint_func get_col_endpoint= NULL; DBUG_ENTER("get_part_iter_for_interval_cols_via_map"); if (part_info->part_type == RANGE_PARTITION) diff --git a/sql/sql_plugin.cc b/sql/sql_plugin.cc index 90a9ac6dfdd0..3e4d49c35698 100644 --- a/sql/sql_plugin.cc +++ b/sql/sql_plugin.cc @@ -1570,10 +1570,12 @@ static bool plugin_load_list(MEM_ROOT *tmp_root, int *argc, char **argv, switch ((*(p++)= *(list++))) { case '\0': list= NULL; /* terminate the loop */ - /* fall through */ + // fallthrough - the later 2 comments are required by GCC #ifndef __WIN__ + // fallthrough case ':': /* can't use this as delimiter as it may be drive letter */ #endif + // fallthrough case ';': str->str[str->length]= '\0'; if (str == &name) // load all plugins in named module @@ -1621,6 +1623,7 @@ static bool plugin_load_list(MEM_ROOT *tmp_root, int *argc, char **argv, str->str= p; continue; } + // fallthrough default: str->length++; continue; diff --git a/sql/sql_prepare.cc b/sql/sql_prepare.cc index fee7c170f65b..f711c14d35af 100644 --- a/sql/sql_prepare.cc +++ b/sql/sql_prepare.cc @@ -1991,6 +1991,8 @@ static bool check_prepared_statement(Prepared_statement *stmt) if (res != 2) break; + // fallthrough + case SQLCOM_UPDATE_MULTI: res= mysql_test_multiupdate(stmt, tables, res == 2); break; diff --git a/sql/sql_repl.cc b/sql/sql_repl.cc index 169f36ec879b..ce73e24cd628 100644 --- a/sql/sql_repl.cc +++ b/sql/sql_repl.cc @@ -963,6 +963,7 @@ impossible position"; loop_breaker = (flags & BINLOG_DUMP_NON_BLOCK); break; } + // fallthrough default: errmsg = "could not find next log"; my_errno= ER_MASTER_FATAL_ERROR_READING_BINLOG; diff --git a/sql/sql_show.cc b/sql/sql_show.cc index dea7757df99b..fa229f2c1838 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -675,6 +675,7 @@ class Show_create_error_handler : public Internal_error_handler { is_handled= FALSE; break; } + // fallthrough case ER_COLUMNACCESS_DENIED_ERROR: case ER_VIEW_NO_EXPLAIN: /* Error was anonymized, ignore all the same. */ case ER_PROCACCESS_DENIED_ERROR: diff --git a/sql/sql_table.cc b/sql/sql_table.cc index c4b7f4523819..97f7e46cc785 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -1007,12 +1007,13 @@ static int execute_ddl_log_action(THD *thd, DDL_LOG_ENTRY *ddl_log_entry) break; } DBUG_ASSERT(ddl_log_entry->action_type == DDL_LOG_REPLACE_ACTION); - /* - Fall through and perform the rename action of the replace - action. We have already indicated the success of the delete - action in the log entry by stepping up the phase. - */ } + // fallthrough + /* + and perform the rename action of the replace + action. We have already indicated the success of the delete + action in the log entry by stepping up the phase. + */ case DDL_LOG_RENAME_ACTION: { error= TRUE; @@ -5437,7 +5438,8 @@ bool alter_table_manage_keys(TABLE *table, int indexes_were_disabled, case LEAVE_AS_IS: if (!indexes_were_disabled) break; - /* fall-through: disabled indexes */ + // fallthrough + // disabled indexes case DISABLE: error= table->file->ha_disable_indexes(HA_KEY_SWITCH_NONUNIQ_SAVE); } diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 3116f69e0556..3bacd474d695 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -4210,9 +4210,11 @@ size_number: case 'g': case 'G': text_shift_number+=10; + // fallthrough case 'm': case 'M': text_shift_number+=10; + // fallthrough case 'k': case 'K': text_shift_number+=10; diff --git a/storage/federated/ha_federated.cc b/storage/federated/ha_federated.cc index fa25875d7ec9..d392d05d1a92 100644 --- a/storage/federated/ha_federated.cc +++ b/storage/federated/ha_federated.cc @@ -1418,8 +1418,8 @@ bool ha_federated::create_where_from_key(String *to, { goto err; } - break; } + break; case HA_READ_KEY_OR_NEXT: DBUG_PRINT("info", ("federated HA_READ_KEY_OR_NEXT %d", i)); if (emit_key_part_name(&tmp, key_part) || @@ -1437,8 +1437,8 @@ bool ha_federated::create_where_from_key(String *to, emit_key_part_element(&tmp, key_part, needs_quotes, 0, ptr, part_length)) goto err; - break; } + break; case HA_READ_KEY_OR_PREV: DBUG_PRINT("info", ("federated HA_READ_KEY_OR_PREV %d", i)); if (emit_key_part_name(&tmp, key_part) || diff --git a/storage/heap/hp_extra.c b/storage/heap/hp_extra.c index da282c4c257a..367b9eb25570 100644 --- a/storage/heap/hp_extra.c +++ b/storage/heap/hp_extra.c @@ -34,6 +34,7 @@ int heap_extra(register HP_INFO *info, enum ha_extra_function function) switch (function) { case HA_EXTRA_RESET_STATE: heap_reset(info); + break; case HA_EXTRA_NO_READCHECK: info->opt_flag&= ~READ_CHECK_USED; /* No readcheck */ break; diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index 010aec1ea0db..3850b4a12e8f 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -5976,7 +5976,8 @@ ha_innobase::innobase_lock_autoinc(void) break; } } - /* Fall through to old style locking. */ + // fallthrough + // to old style locking. case AUTOINC_OLD_STYLE_LOCKING: error = row_lock_table_autoinc_for_mysql(prebuilt); @@ -7995,7 +7996,8 @@ create_options_are_valid( case ROW_TYPE_DYNAMIC: CHECK_ERROR_ROW_TYPE_NEEDS_FILE_PER_TABLE; CHECK_ERROR_ROW_TYPE_NEEDS_GT_ANTELOPE; - /* fall through since dynamic also shuns KBS */ + // fallthrough + // since dynamic also shuns KBS case ROW_TYPE_COMPACT: case ROW_TYPE_REDUNDANT: if (kbs_specified) { @@ -8241,6 +8243,7 @@ ha_innobase::create( thd, MYSQL_ERROR::WARN_LEVEL_WARN, ER_ILLEGAL_HA_CREATE_OPTION, "InnoDB: assuming ROW_FORMAT=COMPACT."); + // fallthrough case ROW_TYPE_DEFAULT: case ROW_TYPE_COMPACT: flags = DICT_TF_COMPACT; diff --git a/storage/innobase/include/data0type.ic b/storage/innobase/include/data0type.ic index 410970ac50ed..a04fa632886b 100644 --- a/storage/innobase/include/data0type.ic +++ b/storage/innobase/include/data0type.ic @@ -477,7 +477,8 @@ dtype_get_fixed_size_low( #else /* !UNIV_HOTBACKUP */ return(len); #endif /* !UNIV_HOTBACKUP */ - /* fall through for variable-length charsets */ + // fallthrough + // for variable-length charsets case DATA_VARCHAR: case DATA_BINARY: case DATA_DECIMAL: diff --git a/storage/innobase/include/log0online.h b/storage/innobase/include/log0online.h index 2462263dec25..ee06ec1951ec 100644 --- a/storage/innobase/include/log0online.h +++ b/storage/innobase/include/log0online.h @@ -141,7 +141,11 @@ log_online_bitmap_iterator_next( /** Struct for single bitmap file information */ struct log_online_bitmap_file_struct { - char name[FN_REFLEN]; /*!< Name with full path */ + /** Name with full path + 61 is a nice magic constant for the extra space needed for the sprintf + template in the cc file + */ + char name[FN_REFLEN+61]; /*!< Name with full path */ os_file_t file; /*!< Handle to opened file */ ib_uint64_t size; /*!< Size of the file */ ib_uint64_t offset; /*!< Offset of the next read, diff --git a/storage/innobase/include/page0zip.ic b/storage/innobase/include/page0zip.ic index e26fa3e3d946..a2fa13c94dfb 100644 --- a/storage/innobase/include/page0zip.ic +++ b/storage/innobase/include/page0zip.ic @@ -170,7 +170,7 @@ page_zip_rec_needs_ext( ignored if zip_size == 0 */ ulint zip_size) /*!< in: compressed page size in bytes, or 0 */ { - ut_ad(rec_size > comp ? REC_N_NEW_EXTRA_BYTES : REC_N_OLD_EXTRA_BYTES); + ut_ad(rec_size > (comp ? REC_N_NEW_EXTRA_BYTES : REC_N_OLD_EXTRA_BYTES)); ut_ad(ut_is_2pow(zip_size)); ut_ad(comp || !zip_size); diff --git a/storage/innobase/log/log0online.c b/storage/innobase/log/log0online.c index 45739dffa5d3..0354ef29ea8b 100644 --- a/storage/innobase/log/log0online.c +++ b/storage/innobase/log/log0online.c @@ -501,9 +501,9 @@ log_online_make_bitmap_name( /*=========================*/ ib_uint64_t start_lsn) /*!< in: the start LSN name part */ { - ut_snprintf(log_bmp_sys->out.name, FN_REFLEN, bmp_file_name_template, - log_bmp_sys->bmp_file_home, bmp_file_name_stem, - log_bmp_sys->out_seq_num, start_lsn); + ut_snprintf(log_bmp_sys->out.name, sizeof(log_bmp_sys->out.name), + bmp_file_name_template, log_bmp_sys->bmp_file_home, + bmp_file_name_stem, log_bmp_sys->out_seq_num, start_lsn); } /*********************************************************************//** diff --git a/storage/innobase/row/row0mysql.c b/storage/innobase/row/row0mysql.c index 2e89ab64504f..4e6d0df36846 100644 --- a/storage/innobase/row/row0mysql.c +++ b/storage/innobase/row/row0mysql.c @@ -3627,7 +3627,8 @@ row_drop_table_for_mysql( row_mysql_handle_errors(&err, trx, NULL, NULL); - /* Fall through to raise error */ + // fallthrough + // to raise error default: /* No other possible error returns */ @@ -4398,7 +4399,8 @@ row_check_index_for_mysql( fputs(" InnoDB: Warning: CHECK TABLE on ", stderr); dict_index_name_print(stderr, prebuilt->trx, index); fprintf(stderr, " returned %lu\n", ret); - /* fall through (this error is ignored by CHECK TABLE) */ + // fallthrough + // (this error is ignored by CHECK TABLE) case DB_END_OF_INDEX: func_exit: mem_free(buf); diff --git a/storage/innobase/row/row0purge.c b/storage/innobase/row/row0purge.c index 0187199f4f59..1178604f7585 100644 --- a/storage/innobase/row/row0purge.c +++ b/storage/innobase/row/row0purge.c @@ -407,7 +407,8 @@ row_purge_remove_sec_if_poss_leaf( goto func_exit; } } - /* fall through (the index entry is still needed, + // fallthrough + /* (the index entry is still needed, or the deletion succeeded) */ case ROW_NOT_DELETED_REF: /* The index entry is still needed. */ diff --git a/storage/innobase/row/row0sel.c b/storage/innobase/row/row0sel.c index 91af615a5435..140cfc61383a 100644 --- a/storage/innobase/row/row0sel.c +++ b/storage/innobase/row/row0sel.c @@ -2681,7 +2681,7 @@ row_sel_field_store_in_mysql_format( case DATA_SYS: /* These column types should never be shipped to MySQL. */ ut_ad(0); - + break; case DATA_CHAR: case DATA_FIXBINARY: case DATA_FLOAT: diff --git a/storage/myisam/mi_extra.c b/storage/myisam/mi_extra.c index abd6f00e673f..7f50db3eb199 100644 --- a/storage/myisam/mi_extra.c +++ b/storage/myisam/mi_extra.c @@ -148,6 +148,7 @@ int mi_extra(MI_INFO *info, enum ha_extra_function function, void *extra_arg) case HA_EXTRA_PREPARE_FOR_UPDATE: if (info->s->data_file_type != DYNAMIC_RECORD) break; + // fallthrough /* Remove read/write cache if dynamic rows */ case HA_EXTRA_NO_CACHE: if (info->opt_flag & (READ_CACHE_USED | WRITE_CACHE_USED)) diff --git a/storage/myisam/mi_panic.c b/storage/myisam/mi_panic.c index 221b41e8a92b..4204d1ecf904 100644 --- a/storage/myisam/mi_panic.c +++ b/storage/myisam/mi_panic.c @@ -74,6 +74,7 @@ int mi_panic(enum ha_panic_function flag) info->s->kfile=info->dfile= -1; /* Files aren't open anymore */ break; #endif + // fallthrough case HA_PANIC_READ: /* Restore to before WRITE */ #ifdef CANT_OPEN_FILES_TWICE { /* Open closed files */ diff --git a/storage/myisam/myisamchk.c b/storage/myisam/myisamchk.c index 9360a0548726..aece419de250 100644 --- a/storage/myisam/myisamchk.c +++ b/storage/myisam/myisamchk.c @@ -1365,7 +1365,7 @@ static void descript(MI_CHECK *param, register MI_INFO *info, char * name) key < share->state.header.uniques; key++, uniqueinfo++) { my_bool new_row=0; - char null_bit[8],null_pos[8]; + char null_bit[8],null_pos[11]; printf("%-8d%-5d",key+1,uniqueinfo->key+1); for (keyseg=uniqueinfo->seg ; keyseg->type != HA_KEYTYPE_END ; keyseg++) { diff --git a/strings/ctype-utf8.c b/strings/ctype-utf8.c index e27a6a6925e9..8d64fcdaab31 100644 --- a/strings/ctype-utf8.c +++ b/strings/ctype-utf8.c @@ -2666,12 +2666,12 @@ static int my_uni_utf8 (CHARSET_INFO *cs __attribute__((unused)), switch (count) { /* Fall through all cases!!! */ #ifdef UNICODE_32BIT - case 6: r[5] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0x4000000; - case 5: r[4] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0x200000; - case 4: r[3] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0x10000; + case 6: r[5] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0x4000000; // fallthrough + case 5: r[4] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0x200000; // fallthrough + case 4: r[3] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0x10000; // fallthrough #endif - case 3: r[2] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0x800; - case 2: r[1] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0xc0; + case 3: r[2] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0x800; // fallthrough + case 2: r[1] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0xc0; // fallthrough case 1: r[0] = (uchar) wc; } return count; @@ -2698,8 +2698,8 @@ static int my_uni_utf8_no_range(CHARSET_INFO *cs __attribute__((unused)), switch (count) { /* Fall through all cases!!! */ - case 3: r[2]= (uchar) (0x80 | (wc & 0x3f)); wc= wc >> 6; wc |= 0x800; - case 2: r[1]= (uchar) (0x80 | (wc & 0x3f)); wc= wc >> 6; wc |= 0xc0; + case 3: r[2]= (uchar) (0x80 | (wc & 0x3f)); wc= wc >> 6; wc |= 0x800; // fallthrough + case 2: r[1]= (uchar) (0x80 | (wc & 0x3f)); wc= wc >> 6; wc |= 0xc0; // fallthrough case 1: r[0]= (uchar) wc; } return count; @@ -5185,9 +5185,9 @@ my_wc_mb_utf8mb4(CHARSET_INFO *cs __attribute__((unused)), switch (count) { /* Fall through all cases!!! */ - case 4: r[3] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0x10000; - case 3: r[2] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0x800; - case 2: r[1] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0xc0; + case 4: r[3] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0x10000; // fallthrough + case 3: r[2] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0x800; // fallthrough + case 2: r[1] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0xc0; // fallthrough case 1: r[0] = (uchar) wc; } return count; @@ -5217,9 +5217,9 @@ my_wc_mb_utf8mb4_no_range(CHARSET_INFO *cs __attribute__((unused)), switch (count) { /* Fall through all cases!!! */ - case 4: r[3]= (uchar) (0x80 | (wc & 0x3f)); wc= wc >> 6; wc |= 0x10000; - case 3: r[2]= (uchar) (0x80 | (wc & 0x3f)); wc= wc >> 6; wc |= 0x800; - case 2: r[1]= (uchar) (0x80 | (wc & 0x3f)); wc= wc >> 6; wc |= 0xc0; + case 4: r[3]= (uchar) (0x80 | (wc & 0x3f)); wc= wc >> 6; wc |= 0x10000; // fallthrough + case 3: r[2]= (uchar) (0x80 | (wc & 0x3f)); wc= wc >> 6; wc |= 0x800; // fallthrough + case 2: r[1]= (uchar) (0x80 | (wc & 0x3f)); wc= wc >> 6; wc |= 0xc0; // fallthrough case 1: r[0]= (uchar) wc; } return count; diff --git a/strings/decimal.c b/strings/decimal.c index 91e96a1f40f3..b52f0ad53a58 100644 --- a/strings/decimal.c +++ b/strings/decimal.c @@ -230,17 +230,17 @@ static inline int count_leading_zeroes(int i, dec1 val) switch (i) { /* @note Intentional fallthrough in all case labels */ - case 9: if (val >= 1000000000) break; ++ret; - case 8: if (val >= 100000000) break; ++ret; - case 7: if (val >= 10000000) break; ++ret; - case 6: if (val >= 1000000) break; ++ret; - case 5: if (val >= 100000) break; ++ret; - case 4: if (val >= 10000) break; ++ret; - case 3: if (val >= 1000) break; ++ret; - case 2: if (val >= 100) break; ++ret; - case 1: if (val >= 10) break; ++ret; - case 0: if (val >= 1) break; ++ret; - default: { DBUG_ASSERT(FALSE); } + case 9: if (val >= 1000000000) break; ++ret; // fallthrough + case 8: if (val >= 100000000) break; ++ret; // fallthrough + case 7: if (val >= 10000000) break; ++ret; // fallthrough + case 6: if (val >= 1000000) break; ++ret; // fallthrough + case 5: if (val >= 100000) break; ++ret; // fallthrough + case 4: if (val >= 10000) break; ++ret; // fallthrough + case 3: if (val >= 1000) break; ++ret; // fallthrough + case 2: if (val >= 100) break; ++ret; // fallthrough + case 1: if (val >= 10) break; ++ret; // fallthrough + case 0: if (val >= 1) break; ++ret; // fallthrough + default: { DBUG_ASSERT(FALSE); } // fallthrough } return ret; } @@ -263,16 +263,16 @@ static inline int count_trailing_zeroes(int i, dec1 val) switch(i) { /* @note Intentional fallthrough in all case labels */ - case 0: if ((val % 1) != 0) break; ++ret; - case 1: if ((val % 10) != 0) break; ++ret; - case 2: if ((val % 100) != 0) break; ++ret; - case 3: if ((val % 1000) != 0) break; ++ret; - case 4: if ((val % 10000) != 0) break; ++ret; - case 5: if ((val % 100000) != 0) break; ++ret; - case 6: if ((val % 1000000) != 0) break; ++ret; - case 7: if ((val % 10000000) != 0) break; ++ret; - case 8: if ((val % 100000000) != 0) break; ++ret; - case 9: if ((val % 1000000000) != 0) break; ++ret; + case 0: if ((val % 1) != 0) break; ++ret; // fallthrough + case 1: if ((val % 10) != 0) break; ++ret; // fallthrough + case 2: if ((val % 100) != 0) break; ++ret; // fallthrough + case 3: if ((val % 1000) != 0) break; ++ret; // fallthrough + case 4: if ((val % 10000) != 0) break; ++ret; // fallthrough + case 5: if ((val % 100000) != 0) break; ++ret; // fallthrough + case 6: if ((val % 1000000) != 0) break; ++ret; // fallthrough + case 7: if ((val % 10000000) != 0) break; ++ret; // fallthrough + case 8: if ((val % 100000000) != 0) break; ++ret; // fallthrough + case 9: if ((val % 1000000000) != 0) break; ++ret; // fallthrough default: { DBUG_ASSERT(FALSE); } } return ret; diff --git a/strings/dtoa.c b/strings/dtoa.c index 4086bf412fe5..13ae8dd52718 100644 --- a/strings/dtoa.c +++ b/strings/dtoa.c @@ -1378,7 +1378,7 @@ static double my_strtod_int(const char *s00, char **se, int *error, char *buf, s switch (*s) { case '-': sign= 1; - /* no break */ + // fallthrough case '+': s++; goto break2; @@ -1475,6 +1475,7 @@ static double my_strtod_int(const char *s00, char **se, int *error, char *buf, s switch (c= *s) { case '-': esign= 1; + // fallthrough case '+': c= *++s; } @@ -2368,7 +2369,7 @@ static char *dtoa(double dd, int mode, int ndigits, int *decpt, int *sign, break; case 2: leftright= 0; - /* no break */ + // fallthrough case 4: if (ndigits <= 0) ndigits= 1; @@ -2376,7 +2377,7 @@ static char *dtoa(double dd, int mode, int ndigits, int *decpt, int *sign, break; case 3: leftright= 0; - /* no break */ + // fallthrough case 5: i= ndigits + k + 1; ilim= i; diff --git a/tests/bug25714.c b/tests/bug25714.c index 40c631d76a56..57c69f9413db 100644 --- a/tests/bug25714.c +++ b/tests/bug25714.c @@ -72,6 +72,6 @@ int main (int argc, char **argv) mysql_close(&conn); my_end(0); - return 0; + return OK; } From 251c82a4f46ff718aed410fd49a8b355acc5024b Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Tue, 28 Nov 2017 15:29:42 +0530 Subject: [PATCH 0228/1221] From c19fb06c96462d3c4d57f271dd179b57f3de1a2a Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Tue, 28 Nov 2017 15:42:31 +0530 Subject: [PATCH 0229/1221] From 817fe7a73e811b33e963b9dcd9c77608e68dfcfd Mon Sep 17 00:00:00 2001 From: Shivashankar Nagaraj Date: Tue, 28 Nov 2017 17:15:06 +0530 Subject: [PATCH 0230/1221] Bug#11761520: MYSQLSLAP FAILS SPORADICALLY STARTING FROM DAHLIA Fix: ---- non-reproducible, Hence remove the test from default.experimental file Reviewed-by: Umesh Shastry --- mysql-test/collections/default.experimental | 1 - 1 file changed, 1 deletion(-) diff --git a/mysql-test/collections/default.experimental b/mysql-test/collections/default.experimental index 1cfa4c5d0de2..c7ddc33b7ccd 100644 --- a/mysql-test/collections/default.experimental +++ b/mysql-test/collections/default.experimental @@ -6,7 +6,6 @@ binlog.binlog_multi_engine # joro : NDB tests marked as experiment funcs_1.charset_collation_1 # depends on compile-time decisions main.func_math @freebsd # Bug#11751977 2010-05-04 alik main.func_math fails on FreeBSD in PB2 -main.mysqlslap @windows # Bug#11761520 2010-08-10 alik mysqlslap fails sporadically starting from Dahlia main.index_merge_innodb # BUG#11754168 2012-05-08 jorgen Doing an attempt at reenabling tests disabled by bug. EXPLAIN's row estimates varies for innodb so marked experimental for a while From 30edd79bd1c78ddc128f78756e204aaea038ccea Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Wed, 29 Nov 2017 11:04:28 +0530 Subject: [PATCH 0231/1221] From 6139f4314f89d979f6cd847b715cf80c3c971830 Mon Sep 17 00:00:00 2001 From: Ajo Robert Date: Wed, 29 Nov 2017 20:33:05 +0530 Subject: [PATCH 0232/1221] Bug#24423143 - WRONG RESULTS FOR AGGREGATE QUERY Fixing ASAN issue. Change-Id: Idde55f2c1e49d98564abcfe2513b1f53729bddcc --- sql/opt_range.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/opt_range.cc b/sql/opt_range.cc index 628817ec0163..433ba0f2fd61 100644 --- a/sql/opt_range.cc +++ b/sql/opt_range.cc @@ -12902,7 +12902,7 @@ min_max_inspect_cond_for_fields(Item *cond, Item_field *min_max_arg_item, DBUG_RETURN(true); } - if (((Item_cond*) cond)->functype() == Item_func::MULT_EQUAL_FUNC) + if (pred->functype() == Item_func::MULT_EQUAL_FUNC) { /* Analyze participating fields in a multiequal condition. From c5136f7885cd73a91e196cee2ce439f79e473b16 Mon Sep 17 00:00:00 2001 From: Bharathy Satish Date: Thu, 30 Nov 2017 07:13:05 +0100 Subject: [PATCH 0233/1221] Bug #27175716: KEYRING MIGRATION TOOL GENERATING THE KEYS WHICH CAN'T BE READ BY SERVER Problem: Keyring migration tool creates backed file for destination plugin if the file is not present. This file is created with OS user as owner for this file. After migration when server is started with destination keyring plugin, plugin will reject this file from reading. Fix: Moved the migration specific code after calls to setgid and setuid so that backend files for destination plugin is created with correct user. --- sql/migrate_keyring.cc | 21 ++------- sql/migrate_keyring.h | 22 +++++++-- sql/mysqld.cc | 102 ++++++++++++++++++++--------------------- 3 files changed, 71 insertions(+), 74 deletions(-) diff --git a/sql/migrate_keyring.cc b/sql/migrate_keyring.cc index 45b427c7fcdf..7b7cd68e557b 100644 --- a/sql/migrate_keyring.cc +++ b/sql/migrate_keyring.cc @@ -33,9 +33,9 @@ Migrate_keyring::Migrate_keyring() /** This function does the following: - 1. Read command line arguments specific to migration operation - 2. Get plugin_dir value. - 3. Get a connection handle by connecting to server. + 1. Validate all keyring migration specific options. + 2. Get a connection handle by connecting to server if connection + specific options are set. @param [in] argc Pointer to argc of original program @param [in] argv Pointer to argv of original program @@ -61,14 +61,6 @@ bool Migrate_keyring::init(int argc, { DBUG_ENTER("Migrate_keyring::init"); - my_option migration_options[]= { - {"basedir", 0, "", &mysql_home_ptr, 0, - 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, - {"plugin_dir", 0, "", &opt_plugin_dir_ptr, 0, - 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, - - {0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0} - }; std::size_t found= std::string::npos; string equal("="); string so(".so"); @@ -120,17 +112,10 @@ bool Migrate_keyring::init(int argc, DBUG_RETURN(true); } - if (my_handle_options(&m_argc, &m_argv, migration_options, - NULL, NULL, TRUE)) - DBUG_RETURN(true); /* Restore program name */ m_argc++; m_argv--; - convert_dirname(opt_plugin_dir, opt_plugin_dir_ptr ? opt_plugin_dir_ptr : - PLUGINDIR, NullS); - opt_plugin_dir_ptr= opt_plugin_dir; - /* if connect options are provided then initiate connection */ if (migrate_connect_options) { diff --git a/sql/migrate_keyring.h b/sql/migrate_keyring.h index 13ef6bdb7723..e7f3c2521c98 100644 --- a/sql/migrate_keyring.h +++ b/sql/migrate_keyring.h @@ -35,20 +35,34 @@ enum enum_plugin_type class Key_info { public: + Key_info() + : m_key_id_len(0), + m_user_id_len(0) + {} Key_info(char *key_id, char *user_id) { - memcpy(m_key_id, key_id, strlen(key_id)); - memcpy(m_user_id, user_id, strlen(user_id)); + m_key_id_len= strlen(key_id); + memcpy(m_key_id, key_id, m_key_id_len); + m_key_id[m_key_id_len]= '\0'; + m_user_id_len= strlen(user_id); + memcpy(m_user_id, user_id, m_user_id_len); + m_user_id[m_user_id_len]= '\0'; } Key_info(const Key_info &ki) { - memcpy(this->m_key_id, ki.m_key_id, strlen(ki.m_key_id)); - memcpy(this->m_user_id, ki.m_user_id, strlen(ki.m_user_id)); + this->m_key_id_len= ki.m_key_id_len; + memcpy(this->m_key_id, ki.m_key_id, this->m_key_id_len); + this->m_key_id[this->m_key_id_len]= '\0'; + this->m_user_id_len= ki.m_user_id_len; + memcpy(this->m_user_id, ki.m_user_id, this->m_user_id_len); + this->m_user_id[this->m_user_id_len]= '\0'; } public: char m_key_id[MAX_KEY_LEN]; + int m_key_id_len; char m_user_id[USERNAME_LENGTH]; + int m_user_id_len; }; class Migrate_keyring diff --git a/sql/mysqld.cc b/sql/mysqld.cc index c1f751e5f013..c70468b61be8 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -2955,49 +2955,6 @@ int init_common_variables() return 1; init_client_errs(); - /* - initiate key migration if any one of the migration specific - options are provided. - */ - if (opt_keyring_migration_source || - opt_keyring_migration_destination || - migrate_connect_options) - { - Migrate_keyring mk; - my_getopt_skip_unknown= TRUE; - if (mk.init(remaining_argc, remaining_argv, - opt_keyring_migration_source, - opt_keyring_migration_destination, - opt_keyring_migration_user, - opt_keyring_migration_host, - opt_keyring_migration_password, - opt_keyring_migration_socket, - opt_keyring_migration_port)) - { - sql_print_error(ER_DEFAULT(ER_KEYRING_MIGRATION_STATUS), - "failed"); - log_error_dest= "stderr"; - flush_error_log_messages(); - return 1; - } - - if (mk.execute()) - { - sql_print_error(ER_DEFAULT(ER_KEYRING_MIGRATION_STATUS), - "failed"); - log_error_dest= "stderr"; - flush_error_log_messages(); - return 1; - } - - my_getopt_skip_unknown= 0; - sql_print_information(ER_DEFAULT(ER_KEYRING_MIGRATION_STATUS), - "sucessfull"); - log_error_dest= "stderr"; - flush_error_log_messages(); - exit(MYSQLD_SUCCESS_EXIT); - } - mysql_client_plugin_init(); if (item_create_init()) return 1; @@ -4680,15 +4637,6 @@ int mysqld_main(int argc, char **argv) srand(static_cast(time(NULL))); #endif - /* - We have enough space for fiddling with the argv, continue - */ - if (my_setwd(mysql_real_data_home,MYF(MY_WME)) && !opt_help) - { - sql_print_error("failed to set datadir to %s", mysql_real_data_home); - unireg_abort(MYSQLD_ABORT_EXIT); /* purecov: inspected */ - } - #ifndef _WIN32 if ((user_info= check_user(mysqld_user))) { @@ -4733,6 +4681,56 @@ int mysqld_main(int argc, char **argv) } #endif // !_WIN32 + /* + initiate key migration if any one of the migration specific + options are provided. + */ + if (opt_keyring_migration_source || + opt_keyring_migration_destination || + migrate_connect_options) + { + Migrate_keyring mk; + if (mk.init(remaining_argc, remaining_argv, + opt_keyring_migration_source, + opt_keyring_migration_destination, + opt_keyring_migration_user, + opt_keyring_migration_host, + opt_keyring_migration_password, + opt_keyring_migration_socket, + opt_keyring_migration_port)) + { + sql_print_error(ER_DEFAULT(ER_KEYRING_MIGRATION_STATUS), + "failed"); + log_error_dest= "stderr"; + flush_error_log_messages(); + unireg_abort(MYSQLD_ABORT_EXIT); + } + + if (mk.execute()) + { + sql_print_error(ER_DEFAULT(ER_KEYRING_MIGRATION_STATUS), + "failed"); + log_error_dest= "stderr"; + flush_error_log_messages(); + unireg_abort(MYSQLD_ABORT_EXIT); + } + + sql_print_information(ER_DEFAULT(ER_KEYRING_MIGRATION_STATUS), + "successfull"); + log_error_dest= "stderr"; + flush_error_log_messages(); + unireg_abort(MYSQLD_SUCCESS_EXIT); + } + + /* + We have enough space for fiddling with the argv, continue + */ + if (my_setwd(mysql_real_data_home,MYF(MY_WME)) && !opt_help) + { + sql_print_error("failed to set datadir to %s", mysql_real_data_home); + unireg_abort(MYSQLD_ABORT_EXIT); /* purecov: inspected */ + } + //If the binlog is enabled, one needs to provide a server-id if (opt_bin_log && !(server_id_supplied) ) { From 4465143b64b6a6dbb398dd5b64c20318a96cd687 Mon Sep 17 00:00:00 2001 From: Lars Tangvald Date: Thu, 16 Nov 2017 08:21:07 +0100 Subject: [PATCH 0234/1221] Deb packaging: Added support for Debian Unstable and Ubuntu 18.04 --- packaging/deb-in/CMakeLists.txt | 35 +++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/packaging/deb-in/CMakeLists.txt b/packaging/deb-in/CMakeLists.txt index c607ee333d76..7825271796d2 100644 --- a/packaging/deb-in/CMakeLists.txt +++ b/packaging/deb-in/CMakeLists.txt @@ -136,6 +136,24 @@ ELSEIF(DEB_CODENAME STREQUAL "stretch") SET (DEB_SERVICE_SERVER_EXECPRE "ExecStartPre=/usr/share/mysql/mysql-systemd-start pre") SET (DEB_INIT_APPARMOR "") +ELSEIF(DEB_CODENAME STREQUAL "sid") + IF (DEFINED DEB_GCC_SNAPSHOT) + SET (DEB_CMAKE_EXTRAS "${DEB_CMAKE_EXTRAS} -DCMAKE_C_COMPILER=/usr/lib/gcc-snapshot/bin/gcc -DCMAKE_CXX_COMPILER=/usr/lib/gcc-snapshot/bin/g++ -DMYSQL_MAINTAINER_MODE=0 -DCMAKE_CXX_COMPILER_LAUNCHER=ccache") + ENDIF() + SET (DEB_PLATFORMRELEASE "debianunstable") + SET (DEB_CONTROL_BDEPS "dh-systemd") + SET (DEB_INSTALL_SOURCE_XZ "../*.tar.xz usr/src/mysql/") + SET (DEB_RULES_INSTALL_SYSTEMD + "install -m 0755 debian/extra/mysql-systemd-start debian/tmp/usr/share/mysql/") + SET (DEB_RULES_INSTALL_APPARMOR "") + SET (DEB_RULES_APPARMOR_LOAD "") + SET (DEB_RULES_SYSTEMD_ENABLE "dh_systemd_enable --name=mysql") + SET (DEB_RULES_SYSTEMD_START "dh_systemd_start --restart-after-upgrade") + SET (DEB_INSTALL_SERVER_SYSTEMD "usr/share/mysql/mysql-systemd-start") + SET (DEB_INSTALL_SERVER_APPARMOR "") + SET (DEB_SERVICE_SERVER_EXECPRE + "ExecStartPre=/usr/share/mysql/mysql-systemd-start pre") + SET (DEB_INIT_APPARMOR "") ELSEIF(DEB_CODENAME STREQUAL "trusty") SET (DEB_PLATFORMRELEASE "ubuntu14.04") SET (DEB_CONTROL_BDEPS "dh-apparmor") @@ -202,6 +220,23 @@ ELSEIF(DEB_CODENAME STREQUAL "artful") SET (DEB_SERVICE_SERVER_EXECPRE "ExecStartPre=/usr/share/mysql/mysql-systemd-start pre") SET (DEB_INIT_APPARMOR "/lib/apparmor/profile-load usr.sbin.mysqld") +ELSEIF(DEB_CODENAME STREQUAL "bionic") + SET (DEB_PLATFORMRELEASE "ubuntu18.04") + SET (DEB_CONTROL_BDEPS "dh-apparmor, dh-systemd (>=1.5)") + SET (DEB_INSTALL_SOURCE_XZ "../*.tar.xz usr/src/mysql/") + SET (DEB_RULES_INSTALL_SYSTEMD + "install -m 0755 debian/extra/mysql-systemd-start debian/tmp/usr/share/mysql/") + SET (DEB_RULES_INSTALL_APPARMOR + "install -g root -o root -m 0644 -D debian/extra/apparmor-profile debian/tmp/etc/apparmor.d/usr.sbin.mysqld") + SET (DEB_RULES_APPARMOR_LOAD + "dh_apparmor -pmysql-${DEB_PRODUCTNAME}-server --profile-name=usr.sbin.mysqld") + SET (DEB_RULES_SYSTEMD_ENABLE "dh_systemd_enable --name=mysql") + SET (DEB_RULES_SYSTEMD_START "dh_systemd_start --restart-after-upgrade") + SET (DEB_INSTALL_SERVER_SYSTEMD "usr/share/mysql/mysql-systemd-start") + SET (DEB_INSTALL_SERVER_APPARMOR "etc/apparmor.d/usr.sbin.mysqld") + SET (DEB_SERVICE_SERVER_EXECPRE + "ExecStartPre=/usr/share/mysql/mysql-systemd-start pre") + SET (DEB_INIT_APPARMOR "/lib/apparmor/profile-load usr.sbin.mysqld") ELSE() MESSAGE(STATUS "Skipping deb packaging on unsupported platform ${DEB_CODENAME}.") From 6e6a0e619c1eeeb32b11a1132aeb6fbbe3327a2a Mon Sep 17 00:00:00 2001 From: Harin Vadodaria Date: Thu, 30 Nov 2017 09:17:35 +0100 Subject: [PATCH 0235/1221] Bug#25483593: HANDLE THE CASE WHEN --SSL-CIPHER IS LARGER THAN 4096 BYTES Description: Appending an exceptionally larges --ssl-cipher value without validating destination buffer's size causes client to exit. Solution: Append cipher value according to destination buffer's size. --- vio/viosslfactories.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/vio/viosslfactories.c b/vio/viosslfactories.c index da5449aefdbd..f50678a37b32 100644 --- a/vio/viosslfactories.c +++ b/vio/viosslfactories.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -543,15 +543,22 @@ new_VioSSLFd(const char *key_file, const char *cert_file, SSL_CTX_set_options(ssl_fd->ssl_context, ssl_ctx_options); /* - Set the ciphers that can be used + We explicitly prohibit weak ciphers. NOTE: SSL_CTX_set_cipher_list will return 0 if none of the provided ciphers could be selected */ - strcat(cipher_list, tls_cipher_blocked); - if (cipher) - strcat(cipher_list, cipher); - else - strcat(cipher_list, tls_ciphers_list); + strncpy(cipher_list, tls_cipher_blocked, SSL_CIPHER_LIST_SIZE - 1); + + /* + If ciphers are specified explicitly by caller, use them. + Otherwise, fallback to the default list. + + In either case, we make sure we stay within the valid bounds. + Note that we have already consumed tls_cipher_blocked + worth of space. + */ + strncat(cipher_list, cipher == 0 ? tls_ciphers_list : cipher, + SSL_CIPHER_LIST_SIZE - strlen(cipher_list) - 1); if (ret_set_cipherlist == SSL_CTX_set_cipher_list(ssl_fd->ssl_context, cipher_list)) { From 9aa9941939be2fe819d13564797d5a5138372673 Mon Sep 17 00:00:00 2001 From: Balasubramanian Kandasamy Date: Thu, 30 Nov 2017 15:45:38 +0530 Subject: [PATCH 0236/1221] Post-fix: Bug#26742748 - 8.0 DOCKER IMAGE RPM GENERATES 5.7 DOC URL IN /ETC/MY.CNF - Fix the cmake for docker rpm builds --- packaging/rpm-docker/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packaging/rpm-docker/CMakeLists.txt b/packaging/rpm-docker/CMakeLists.txt index 2f9441005df7..85d583be0577 100644 --- a/packaging/rpm-docker/CMakeLists.txt +++ b/packaging/rpm-docker/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2012, 2017, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -31,7 +31,7 @@ IF(UNIX) CONFIGURE_FILE(mysql.spec.in ${CMAKE_CURRENT_BINARY_DIR}/${SPECFILENAME} @ONLY) FOREACH(fedfile my.cnf) - CONFIGURE_FILE(${fedfile}.in ${CMAKE_CURRENT_BINARY_DIR}/${fedfile} COPYONLY) + CONFIGURE_FILE(${fedfile}.in ${CMAKE_CURRENT_BINARY_DIR}/${fedfile} @ONLY) ENDFOREACH() ENDIF() From ca527fd6ba4bfc492351c9b8ea404330709dd8be Mon Sep 17 00:00:00 2001 From: Harin Vadodaria Date: Thu, 30 Nov 2017 12:18:46 +0100 Subject: [PATCH 0237/1221] Bug#27194270: LIMIT PASSWORD HASH ROUNDS IN SHA256-CRYPT ALGORITHM Description: Authentication string for sha256_password can contain an optional part specifying number of hash rounds to be performed. Though default is 5000, an authentication_string directly inserted in mysql.user table can contain different value. This may cause extra computations and may introduce unnecessary delay. Solution: Fixed the maximum number of rounds allowed. --- include/crypt_genhash_impl.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/crypt_genhash_impl.h b/include/crypt_genhash_impl.h index 1057f63e1804..0e629b44bd18 100644 --- a/include/crypt_genhash_impl.h +++ b/include/crypt_genhash_impl.h @@ -17,7 +17,7 @@ #define CRYPT_HASHGEN_IMPL_H #define ROUNDS_DEFAULT 5000 #define ROUNDS_MIN 1000 -#define ROUNDS_MAX 999999999 +#define ROUNDS_MAX ROUNDS_DEFAULT #define MIXCHARS 32 #define CRYPT_SALT_LENGTH 20 #define CRYPT_MAGIC_LENGTH 3 From be62153e5f4ee6547912046aad9089bacb8aa079 Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Tue, 28 Nov 2017 18:25:13 +0200 Subject: [PATCH 0238/1221] From 29b23db462bda27883352473abfa1e88bb5ae819 Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Thu, 30 Nov 2017 00:41:51 +0100 Subject: [PATCH 0239/1221] From 3d6e395f9b7cd64447e5d691c8afa8c5b9b8f185 Mon Sep 17 00:00:00 2001 From: Georgi Kodinov Date: Thu, 23 Nov 2017 12:33:06 +0200 Subject: [PATCH 0240/1221] Bug #26946491: INSTALL COMMAND FOR CLONE PLUGIN HANGS WHEN HEAVY DMLS ARE IN PROGRESS Backport to 5.7 * Fixed plugin_add so it does not re-acquire the LOCK_plugin mutex after reporting an error * Fixed the callers of the plugin_add() to expect the above behavior and react accordingly (not release LOCK_plugin when reacting to the eror or re-aqcuire it when ignoring the error). * Fixed plugin_load and plugin_load_list to take the same locks into the same order as mysql_install_plugin does. * Added doxygen comments for some key functons and locks. * Fixed plugin_dl_add to not be keeping the lock while calling report_error(). --- sql/sql_plugin.cc | 155 ++++++++++++++++++++++++++++++++++++---------- 1 file changed, 122 insertions(+), 33 deletions(-) diff --git a/sql/sql_plugin.cc b/sql/sql_plugin.cc index 432b4404cfb3..6d4e36ffab8c 100644 --- a/sql/sql_plugin.cc +++ b/sql/sql_plugin.cc @@ -180,14 +180,18 @@ static int cur_plugin_info_interface_version[MYSQL_MAX_PLUGIN_TYPE_NUM]= /* A mutex LOCK_plugin_delete must be acquired before calling plugin_del - function. + function. */ mysql_mutex_t LOCK_plugin_delete; -/* - A mutex LOCK_plugin must be acquired before accessing the - following variables/structures. +/** + Serializes access to the global plugin memory list. + + LOCK_plugin must be acquired before accessing + plugin_dl_array, plugin_array and plugin_hash. We are always manipulating ref count, so a rwlock here is unneccessary. + If it must be taken together with the LOCK_system_variables_hash then + LOCK_plugin must be taken before LOCK_system_variables_hash. */ mysql_mutex_t LOCK_plugin; static Prealloced_array *plugin_dl_array; @@ -491,6 +495,17 @@ static inline void free_plugin_mem(st_plugin_dl *p) } +/** + Loads a dynamic plugin + + Fills in a ::st_plugin_dl structure. + Initializes the plugin services pointer inside the plugin. + Does not initialize the individual plugins. + Must have LOCK_plugin locked. On error releases LOCK_plugin. + + @arg dl The path to the plugin binary to load + @arg report a bitmask that's passed down to report_error() +*/ static st_plugin_dl *plugin_dl_add(const LEX_STRING *dl, int report) { #ifdef HAVE_DLOPEN @@ -514,6 +529,7 @@ static st_plugin_dl *plugin_dl_add(const LEX_STRING *dl, int report) system_charset_info, 1) || plugin_dir_len + dl->length + 1 >= FN_REFLEN) { + mysql_mutex_unlock(&LOCK_plugin); report_error(report, ER_UDF_NO_PATHS); DBUG_RETURN(NULL); } @@ -548,6 +564,7 @@ static st_plugin_dl *plugin_dl_add(const LEX_STRING *dl, int report) if (*errmsg == ':') errmsg++; if (*errmsg == ' ') errmsg++; } + mysql_mutex_unlock(&LOCK_plugin); report_error(report, ER_CANT_OPEN_LIBRARY, dlpath, error_number, errmsg); /* @@ -568,6 +585,7 @@ static st_plugin_dl *plugin_dl_add(const LEX_STRING *dl, int report) if (!(sym= dlsym(plugin_dl.handle, plugin_interface_version_sym))) { free_plugin_mem(&plugin_dl); + mysql_mutex_unlock(&LOCK_plugin); report_error(report, ER_CANT_FIND_DL_ENTRY, plugin_interface_version_sym); DBUG_RETURN(NULL); } @@ -577,6 +595,7 @@ static st_plugin_dl *plugin_dl_add(const LEX_STRING *dl, int report) (plugin_dl.version >> 8) > (MYSQL_PLUGIN_INTERFACE_VERSION >> 8)) { free_plugin_mem(&plugin_dl); + mysql_mutex_unlock(&LOCK_plugin); report_error(report, ER_CANT_OPEN_LIBRARY, dlpath, 0, "plugin interface version mismatch"); DBUG_RETURN(NULL); @@ -596,6 +615,7 @@ static st_plugin_dl *plugin_dl_add(const LEX_STRING *dl, int report) my_snprintf(buf, sizeof(buf), "service '%s' interface version mismatch", list_of_services[i].name); + mysql_mutex_unlock(&LOCK_plugin); report_error(report, ER_CANT_OPEN_LIBRARY, dlpath, 0, buf); DBUG_RETURN(NULL); } @@ -607,6 +627,7 @@ static st_plugin_dl *plugin_dl_add(const LEX_STRING *dl, int report) if (!(sym= dlsym(plugin_dl.handle, plugin_declarations_sym))) { free_plugin_mem(&plugin_dl); + mysql_mutex_unlock(&LOCK_plugin); report_error(report, ER_CANT_FIND_DL_ENTRY, plugin_declarations_sym); DBUG_RETURN(NULL); } @@ -645,6 +666,7 @@ static st_plugin_dl *plugin_dl_add(const LEX_STRING *dl, int report) if (!cur) { free_plugin_mem(&plugin_dl); + mysql_mutex_unlock(&LOCK_plugin); report_error(report, ER_OUTOFMEMORY, static_cast(plugin_dl.dl.length)); DBUG_RETURN(NULL); @@ -674,6 +696,7 @@ static st_plugin_dl *plugin_dl_add(const LEX_STRING *dl, int report) for ( ; plugin->info ; ++plugin) if (plugin->flags & PLUGIN_OPT_NO_INSTALL) { + mysql_mutex_unlock(&LOCK_plugin); report_error(report, ER_PLUGIN_NO_INSTALL, plugin->name); free_plugin_mem(&plugin_dl); DBUG_RETURN(NULL); @@ -685,6 +708,7 @@ static st_plugin_dl *plugin_dl_add(const LEX_STRING *dl, int report) if (! (plugin_dl.dl.str= (char*) my_malloc(key_memory_mysql_plugin_dl, plugin_dl.dl.length, MYF(0)))) { + mysql_mutex_unlock(&LOCK_plugin); free_plugin_mem(&plugin_dl); report_error(report, ER_OUTOFMEMORY, static_cast(plugin_dl.dl.length)); @@ -697,6 +721,7 @@ static st_plugin_dl *plugin_dl_add(const LEX_STRING *dl, int report) /* Add this dll to array */ if (! (tmp= plugin_dl_insert_or_reuse(&plugin_dl))) { + mysql_mutex_unlock(&LOCK_plugin); free_plugin_mem(&plugin_dl); report_error(report, ER_OUTOFMEMORY, static_cast(sizeof(st_plugin_dl))); @@ -892,9 +917,12 @@ static st_plugin_int *plugin_insert_or_reuse(st_plugin_int *plugin) } -/* - NOTE - Requires that a write-lock is held on LOCK_system_variables_hash +/** + Adds a plugin to the global plugin list. + + Also installs the plugin variables. + In case of error releases ::LOCK_plugin and reports the error + @note Requires that a write-lock is held on ::LOCK_system_variables_hash */ static bool plugin_add(MEM_ROOT *tmp_root, const LEX_STRING *name, const LEX_STRING *dl, @@ -910,13 +938,14 @@ static bool plugin_add(MEM_ROOT *tmp_root, { mysql_mutex_unlock(&LOCK_plugin); report_error(report, ER_UDF_EXISTS, name->str); - mysql_mutex_lock(&LOCK_plugin); - DBUG_RETURN(TRUE); + DBUG_RETURN(true); } /* Clear the whole struct to catch future extensions. */ memset(&tmp, 0, sizeof(tmp)); - if (! (tmp.plugin_dl= plugin_dl_add(dl, report))) - DBUG_RETURN(TRUE); + if (!(tmp.plugin_dl = plugin_dl_add(dl, report))) + { + DBUG_RETURN(true); + } /* Find plugin by name */ for (plugin= tmp.plugin_dl->plugins; plugin->info; plugin++) { @@ -933,14 +962,17 @@ static bool plugin_add(MEM_ROOT *tmp_root, ((*(int*)plugin->info) >> 8) > (cur_plugin_info_interface_version[plugin->type] >> 8)) { - char buf[256]; + char buf[256], dl_name[FN_REFLEN]; strxnmov(buf, sizeof(buf) - 1, "API version for ", plugin_type_names[plugin->type].str, " plugin is too different", NullS); + /* copy the library name so we can release the mutex */ + strncpy(dl_name, dl->str, sizeof(dl_name) - 1); + dl_name[sizeof(dl_name) - 1] = 0; + plugin_dl_del(dl); mysql_mutex_unlock(&LOCK_plugin); - report_error(report, ER_CANT_OPEN_LIBRARY, dl->str, 0, buf); - mysql_mutex_lock(&LOCK_plugin); - goto err; + report_error(report, ER_CANT_OPEN_LIBRARY, dl_name, 0, buf); + DBUG_RETURN(true); } tmp.plugin= plugin; tmp.name.str= (char *)plugin->name; @@ -958,25 +990,21 @@ static bool plugin_add(MEM_ROOT *tmp_root, { init_alloc_root(key_memory_plugin_int_mem_root, &tmp_plugin_ptr->mem_root, 4096, 4096); - DBUG_RETURN(FALSE); + DBUG_RETURN(false); } tmp_plugin_ptr->state= PLUGIN_IS_FREED; } mysql_del_sys_var_chain(tmp.system_vars); restore_pluginvar_names(tmp.system_vars); - goto err; - - /* plugin was disabled */ plugin_dl_del(dl); - DBUG_RETURN(FALSE); + mysql_mutex_unlock(&LOCK_plugin); + DBUG_RETURN(true); } } + plugin_dl_del(dl); mysql_mutex_unlock(&LOCK_plugin); report_error(report, ER_CANT_FIND_DL_ENTRY, name->str); - mysql_mutex_lock(&LOCK_plugin); -err: - plugin_dl_del(dl); - DBUG_RETURN(TRUE); + DBUG_RETURN(true); } @@ -1669,8 +1697,17 @@ static bool register_builtin(st_mysql_plugin *plugin, } -/* - called only by plugin_init() +/** + Reads the plugins from mysql.plugin and loads them + + Called only by plugin_init() + a.k.a. the bootstrap sequence. + + @arg tmp_root memory root to use for plugin_add() + @arg argc number of command line arguments to process + @arg argv array of command line argument to read values from + @retval true failure + @retval false success */ static void plugin_load(MEM_ROOT *tmp_root, int *argc, char **argv) { @@ -1729,7 +1766,6 @@ static void plugin_load(MEM_ROOT *tmp_root, int *argc, char **argv) environment, and it uses mysql_mutex_assert_owner(), so we lock the mutex here to satisfy the assert */ - mysql_mutex_lock(&LOCK_plugin); while (!(error= read_record_info.read_record(&read_record_info))) { DBUG_PRINT("info", ("init plugin record")); @@ -1740,12 +1776,25 @@ static void plugin_load(MEM_ROOT *tmp_root, int *argc, char **argv) LEX_STRING name= {(char *)str_name.ptr(), str_name.length()}; LEX_STRING dl= {(char *)str_dl.ptr(), str_dl.length()}; + /* + The whole locking sequence is not strictly speaking needed since this + is a function that's executed only during server bootstrap, but we do + it properly for uniformity of the environment for plugin_add. + Note that it must be done for each iteration since, unlike INSTALL PLUGIN + the bootstrap process just reports the error and goes on. + So to ensure the right sequence of lock and unlock we need to take and + release both the wlock and the mutex. + */ + mysql_mutex_lock(&LOCK_plugin); + mysql_rwlock_wrlock(&LOCK_system_variables_hash); if (plugin_add(tmp_root, &name, &dl, argc, argv, REPORT_TO_LOG)) sql_print_warning("Couldn't load plugin named '%s' with soname '%s'.", str_name.c_ptr(), str_dl.c_ptr()); + else + mysql_mutex_unlock(&LOCK_plugin); + mysql_rwlock_unlock(&LOCK_system_variables_hash); free_root(tmp_root, MYF(MY_MARK_BLOCKS_FREE)); } - mysql_mutex_unlock(&LOCK_plugin); if (error > 0) sql_print_error(ER(ER_GET_ERRNO), my_errno); end_read_record(&read_record_info); @@ -1757,8 +1806,18 @@ static void plugin_load(MEM_ROOT *tmp_root, int *argc, char **argv) } -/* - called only by plugin_init() +/** + Load a list of plugins + + Called by plugin_register_early_plugins() and + plugin_register_dynamic_and_init_all(), a.k.a. the bootstrap sequence. + + @arg tmp_root memory root to use for plugin_add() + @arg argc number of command line arguments to process + @arg argv array of command line argument to read values from + @arg list list of plugins to load. Ends with a NULL pointer + @retval true failure + @retval false success */ static bool plugin_load_list(MEM_ROOT *tmp_root, int *argc, char **argv, const char *list) @@ -1795,7 +1854,13 @@ static bool plugin_load_list(MEM_ROOT *tmp_root, int *argc, char **argv, } dl= name; + /* + The whole locking sequence is not strictly speaking needed since this + is a function that's executed only during server bootstrap, but we do + it properly for uniformity of the environment for plugin_add. + */ mysql_mutex_lock(&LOCK_plugin); + mysql_rwlock_wrlock(&LOCK_system_variables_hash); if ((plugin_dl= plugin_dl_add(&dl, REPORT_TO_LOG))) { for (plugin= plugin_dl->plugins; plugin->info; plugin++) @@ -1805,19 +1870,37 @@ static bool plugin_load_list(MEM_ROOT *tmp_root, int *argc, char **argv, free_root(tmp_root, MYF(MY_MARK_BLOCKS_FREE)); if (plugin_add(tmp_root, &name, &dl, argc, argv, REPORT_TO_LOG)) + { + mysql_rwlock_unlock(&LOCK_system_variables_hash); goto error; + } } plugin_dl_del(&dl); // reduce ref count } + else + { + mysql_rwlock_unlock(&LOCK_system_variables_hash); + goto error; + } } else { free_root(tmp_root, MYF(MY_MARK_BLOCKS_FREE)); + /* + The whole locking sequence is not strictly speaking needed since this + is a function that's executed only during server bootstrap, but we do + it properly for uniformity of the environment for plugin_add. + */ mysql_mutex_lock(&LOCK_plugin); + mysql_rwlock_wrlock(&LOCK_system_variables_hash); if (plugin_add(tmp_root, &name, &dl, argc, argv, REPORT_TO_LOG)) + { + mysql_rwlock_unlock(&LOCK_system_variables_hash); goto error; + } } mysql_mutex_unlock(&LOCK_plugin); + mysql_rwlock_unlock(&LOCK_system_variables_hash); name.length= dl.length= 0; dl.str= NULL; name.str= p= buffer; str= &name; @@ -1839,7 +1922,6 @@ static bool plugin_load_list(MEM_ROOT *tmp_root, int *argc, char **argv, } DBUG_RETURN(FALSE); error: - mysql_mutex_unlock(&LOCK_plugin); sql_print_error("Couldn't load plugin named '%s' with soname '%s'.", name.str, dl.str); DBUG_RETURN(TRUE); @@ -2111,6 +2193,7 @@ static bool mysql_install_plugin(THD *thd, const LEX_STRING *name, if (my_load_defaults(MYSQL_CONFIG_NAME, load_default_groups, &argc, &argv, NULL)) { + mysql_mutex_unlock(&LOCK_plugin); mysql_rwlock_unlock(&LOCK_system_variables_hash); report_error(REPORT_TO_USER, ER_PLUGIN_IS_NOT_LOADED, name->str); goto err; @@ -2120,8 +2203,15 @@ static bool mysql_install_plugin(THD *thd, const LEX_STRING *name, free_defaults(argv); mysql_rwlock_unlock(&LOCK_system_variables_hash); - if (error || !(tmp= plugin_find_internal(name_cstr, MYSQL_ANY_PLUGIN))) + /* LOCK_plugin already unlocked by plugin_add() if error */ + if (error) + goto err; + + if (!(tmp = plugin_find_internal(name_cstr, MYSQL_ANY_PLUGIN))) + { + mysql_mutex_unlock(&LOCK_plugin); goto err; + } if (tmp->state == PLUGIN_IS_DISABLED) { @@ -2170,7 +2260,6 @@ static bool mysql_install_plugin(THD *thd, const LEX_STRING *name, reap_needed= true; reap_plugins(); err: - mysql_mutex_unlock(&LOCK_plugin); trans_rollback_stmt(thd); close_mysql_tables(thd); From 59eff2e4e870f3a87ade9d4b55dea5d47a2ba62b Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Thu, 23 Nov 2017 17:00:23 +0100 Subject: [PATCH 0241/1221] lp1729241, BLD-861: Fixed compilation issues with gcc-7 for the 5.6 branch This commit is based on 0620870, which contains the comilation fixes for the 5.5 branch. * Updated the PerconaFT and Percona-TokuBackup submodules with newer versions The new version contain compilation fixes for those submodules. * Removed a statement from client/mysqlbinlog.cc which was never executed * Corrected an empty string check in sql-common/client_authentication.cc * Added a break to a case in sql/item_func.cc. Based on the code around this block, it looks logical that we do not wish to raise assertions for every string result - maybe only on error? * Added overridden new and delete operators for Relay_log_info and Slave_worker because they require 64 byte alignment. These implementation currently only work on Linux, and they do contain a few lines of duplicated code. * Added a missing break to sql/rpl_slave.cc. Based on the code around it, that's what makes sense. * Fixed an uninitailized read during debug printing in sql/sql_cache.cc. This change was backported from 5.7. * Added a missing break to heap/hp_extra.c This change is backported from 8.0 * Null initialized a local pointer in sql/sql_partition.cc. As it otherwise could result in uninitailized reads in release builds. On debug builds, this case is guarded by an assert. * Added a missing return to storage/innobase/row/row0log.cc This change was backported from 5.7. * Corrected the length of a local sprintf buffer in storage/myisam/myisamchk.c. * Returning the success status in tests/bug25714.c. This way the variable is also used in the release build, and the correctness of the execution can also be checked using the exit status of the program. * Fixed two sprintf local buffer overflow in regex/debug.c. * Default initialzied a local variable in storage/innobase/page/page0page.cc. As it otherwise could result in uninitailized reads in release builds. On debug builds, this case is guarded by an assert. * Fixed some unused result or non-null warnings. These do not result in any behaviour change. * Changed bool conversion to be more explict in some assertions. These do not result in any behaviour change. * Added or changed fallthrough comments at many places so GCC's parser will be able to identify them. These do not result in any behaviour change. * Moved a few breaks to different locations so GCC's parser will correctly identify them. These do not result in any behaviour change. --- client/mysqlbinlog.cc | 3 +- client/mysqldump.c | 1 + client/mysqltest.cc | 2 +- extra/replace.c | 1 + plugin/percona-udf/murmur_udf.cc | 4 +- .../tokudb-backup-plugin/Percona-TokuBackup | 2 +- plugin/tokudb-backup-plugin/tokudb_backup.cc | 4 +- regex/debug.c | 4 +- regex/main.c | 2 +- sql-common/client.c | 1 + sql-common/client_authentication.cc | 2 +- sql/events.cc | 1 + sql/field.cc | 2 +- sql/item.cc | 3 +- sql/item_func.cc | 2 + sql/log.cc | 5 ++ sql/log_event.cc | 10 ++-- sql/mysqld.cc | 2 +- sql/opt_sum.cc | 1 + sql/rpl_info_factory.cc | 17 +++++-- sql/rpl_rli.cc | 14 ++++++ sql/rpl_rli.h | 5 ++ sql/rpl_rli_pdb.cc | 14 ++++++ sql/rpl_rli_pdb.h | 4 ++ sql/rpl_slave.cc | 1 + sql/sp.cc | 3 +- sql/sql_acl.cc | 16 +++++-- sql/sql_cache.cc | 4 +- sql/sql_digest.cc | 3 +- sql/sql_handler.cc | 4 +- sql/sql_lex.cc | 4 ++ sql/sql_optimizer.cc | 3 +- sql/sql_parse.cc | 5 +- sql/sql_partition.cc | 2 +- sql/sql_plugin.cc | 5 +- sql/sql_prepare.cc | 2 + sql/sql_show.cc | 1 + sql/sql_table.cc | 14 +++--- sql/sql_yacc.yy | 2 + storage/federated/ha_federated.cc | 4 +- storage/heap/hp_extra.c | 1 + storage/innobase/handler/ha_innodb.cc | 11 +++-- storage/innobase/include/data0type.ic | 3 +- storage/innobase/include/fil0fil.h | 2 +- storage/innobase/include/log0online.h | 6 ++- storage/innobase/include/mach0data.ic | 14 +++--- storage/innobase/include/page0zip.ic | 2 +- storage/innobase/include/ut0rnd.ic | 12 ++--- storage/innobase/log/log0online.cc | 2 +- storage/innobase/page/page0page.cc | 2 +- storage/innobase/row/row0import.cc | 1 + storage/innobase/row/row0log.cc | 1 + storage/innobase/row/row0mysql.cc | 3 +- storage/innobase/row/row0purge.cc | 4 +- storage/innobase/sync/sync0sync.cc | 3 +- storage/myisam/mi_extra.c | 1 + storage/myisam/mi_panic.c | 1 + storage/myisam/myisamchk.c | 2 +- storage/tokudb/PerconaFT | 2 +- storage/tokudb/hatoku_cmp.cc | 1 + storage/tokudb/tokudb_thread.h | 46 +++++++++---------- strings/ctype-utf8.c | 26 +++++------ strings/decimal.c | 42 ++++++++--------- strings/dtoa.c | 7 +-- tests/bug25714.c | 2 +- 65 files changed, 241 insertions(+), 135 deletions(-) diff --git a/client/mysqlbinlog.cc b/client/mysqlbinlog.cc index 5a9d12be7b55..453fc272dbf7 100644 --- a/client/mysqlbinlog.cc +++ b/client/mysqlbinlog.cc @@ -1036,8 +1036,6 @@ Exit_status process_event(PRINT_EVENT_INFO *print_event_info, Log_event *ev, if (head->error == -1) goto err; break; - - destroy_evt= TRUE; } case INTVAR_EVENT: @@ -1317,6 +1315,7 @@ Exit_status process_event(PRINT_EVENT_INFO *print_event_info, Log_event *ev, goto end; } } + // fallthrough case ROWS_QUERY_LOG_EVENT: case WRITE_ROWS_EVENT: case DELETE_ROWS_EVENT: diff --git a/client/mysqldump.c b/client/mysqldump.c index 4011b57b8eef..93e4b5fab59b 100644 --- a/client/mysqldump.c +++ b/client/mysqldump.c @@ -2156,6 +2156,7 @@ static void print_xml_comment(FILE *xml_file, size_t len, case '-': if (*(comment_string + 1) == '-') /* Only one hyphen allowed. */ break; + // fallthrough default: fputc(*comment_string, xml_file); break; diff --git a/client/mysqltest.cc b/client/mysqltest.cc index 145bb2f95979..37edb8c04a66 100644 --- a/client/mysqltest.cc +++ b/client/mysqltest.cc @@ -8295,7 +8295,7 @@ void run_explain(struct st_connection *cn, struct st_command *command, char *re_eprint(int err) { static char epbuf[100]; - size_t len= my_regerror(MY_REG_ITOA | err, NULL, epbuf, sizeof(epbuf)); + size_t len MY_ATTRIBUTE((unused))= my_regerror(MY_REG_ITOA | err, NULL, epbuf, sizeof(epbuf)); assert(len <= sizeof(epbuf)); return(epbuf); } diff --git a/extra/replace.c b/extra/replace.c index 591e8d009b72..9e19a0a42f07 100644 --- a/extra/replace.c +++ b/extra/replace.c @@ -173,6 +173,7 @@ register char **argv[]; break; case 'V': version=1; + // fallthrough case 'I': case '?': help=1; /* Help text written */ diff --git a/plugin/percona-udf/murmur_udf.cc b/plugin/percona-udf/murmur_udf.cc index b56edaf869e7..347cc62c3e22 100644 --- a/plugin/percona-udf/murmur_udf.cc +++ b/plugin/percona-udf/murmur_udf.cc @@ -97,8 +97,8 @@ MurmurHash2( const void *key, int len, unsigned int seed ) { } switch (len) { - case 3: h2 ^= ((unsigned char*)data)[2] << 16; - case 2: h2 ^= ((unsigned char*)data)[1] << 8; + case 3: h2 ^= ((unsigned char*)data)[2] << 16; // fallthrough + case 2: h2 ^= ((unsigned char*)data)[1] << 8; // fallthrough case 1: h2 ^= ((unsigned char*)data)[0]; h2 *= m; }; diff --git a/plugin/tokudb-backup-plugin/Percona-TokuBackup b/plugin/tokudb-backup-plugin/Percona-TokuBackup index 16707e12b323..ae727091e02b 160000 --- a/plugin/tokudb-backup-plugin/Percona-TokuBackup +++ b/plugin/tokudb-backup-plugin/Percona-TokuBackup @@ -1 +1 @@ -Subproject commit 16707e12b32371451e73091da54a82ce0faa0ecc +Subproject commit ae727091e02bdc2e5e440dea9d2343c47670db1a diff --git a/plugin/tokudb-backup-plugin/tokudb_backup.cc b/plugin/tokudb-backup-plugin/tokudb_backup.cc index d1ec33644c12..ef98c3f5757b 100644 --- a/plugin/tokudb-backup-plugin/tokudb_backup.cc +++ b/plugin/tokudb-backup-plugin/tokudb_backup.cc @@ -240,7 +240,7 @@ static int tokudb_backup_progress_fun(float progress, const char *progress_strin size_t len = 100 + strlen(progress_string); be->_the_string = (char *) my_realloc(be->_the_string, len, MYF(MY_FAE+MY_ALLOW_ZERO_PTR)); float percentage = progress * 100; - int r = snprintf(be->_the_string, len, "tokudb backup about %.0f%% done: %s", percentage, progress_string); + int r MY_ATTRIBUTE((unused)) = snprintf(be->_the_string, len, "tokudb backup about %.0f%% done: %s", percentage, progress_string); assert(0 < r && (size_t)r <= len); thd_proc_info(be->_thd, be->_the_string); @@ -260,7 +260,7 @@ static void tokudb_backup_set_error(THD *thd, static void tokudb_backup_set_error_string(THD *thd, int error, const char *error_fmt, const char *s1, const char *s2, const char *s3) { size_t n = strlen(error_fmt) + (s1 ? strlen(s1) : 0) + (s2 ? strlen(s2) : 0) + (s3 ? strlen(s3) : 0); char *error_string = static_cast(my_malloc(n+1, MYF(MY_FAE))); - int r = snprintf(error_string, n+1, error_fmt, s1, s2, s3); + int r MY_ATTRIBUTE((unused)) = snprintf(error_string, n+1, error_fmt, s1, s2, s3); assert(0 < r && (size_t)r <= n); tokudb_backup_set_error(thd, error, error_string); my_free(error_string); diff --git a/regex/debug.c b/regex/debug.c index 0e052d604499..e61002827290 100644 --- a/regex/debug.c +++ b/regex/debug.c @@ -24,7 +24,7 @@ FILE *d; register int c; register int last; int nincat[NC]; - char buf[10]; + char buf[11]; fprintf(d, "%ld states, %d categories", (long)g->nstates, g->ncategories); @@ -102,7 +102,7 @@ FILE *d; register int col = 0; register int last; register sopno offset = 2; - char buf[10]; + char buf[13]; # define GAP() { if (offset % 5 == 0) { \ if (col > 40) { \ fprintf(d, "\n\t"); \ diff --git a/regex/main.c b/regex/main.c index 8eb11fbeccc7..c20de35c80a8 100644 --- a/regex/main.c +++ b/regex/main.c @@ -561,7 +561,7 @@ eprint(err) int err; { static char epbuf[100]; - size_t len; + size_t MY_ATTRIBUTE((unused)) len; len = my_regerror(MY_REG_ITOA|err, (my_regex_t *)NULL, epbuf, sizeof(epbuf)); assert(len <= sizeof(epbuf)); diff --git a/sql-common/client.c b/sql-common/client.c index d9196f2d6ad0..1f41c12e2d08 100644 --- a/sql-common/client.c +++ b/sql-common/client.c @@ -1207,6 +1207,7 @@ void mysql_read_default_options(struct st_mysql_options *options, break; case OPT_pipe: options->protocol = MYSQL_PROTOCOL_PIPE; + break; case OPT_connect_timeout: case OPT_timeout: if (opt_arg) diff --git a/sql-common/client_authentication.cc b/sql-common/client_authentication.cc index d0d03971f5d7..d36e24239498 100644 --- a/sql-common/client_authentication.cc +++ b/sql-common/client_authentication.cc @@ -84,7 +84,7 @@ RSA *rsa_init(MYSQL *mysql) if (mysql->options.extension != NULL && mysql->options.extension->server_public_key_path != NULL && - mysql->options.extension->server_public_key_path != '\0') + mysql->options.extension->server_public_key_path[0] != '\0') { pub_key_file= fopen(mysql->options.extension->server_public_key_path, "r"); diff --git a/sql/events.cc b/sql/events.cc index 14575d358afc..94e23f48badd 100644 --- a/sql/events.cc +++ b/sql/events.cc @@ -241,6 +241,7 @@ Events::reconstruct_interval_expression(String *buf, interval_type interval, break; case INTERVAL_WEEK: expr/= 7; + // fallthrough default: close_quote= FALSE; break; diff --git a/sql/field.cc b/sql/field.cc index 69385337d723..d993714036cf 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -10036,7 +10036,7 @@ bool Create_field::init(THD *thd, const char *fld_name, case MYSQL_TYPE_DATE: /* Old date type. */ sql_type= MYSQL_TYPE_NEWDATE; - /* fall trough */ + // fallthrough case MYSQL_TYPE_NEWDATE: length= MAX_DATE_WIDTH; break; diff --git a/sql/item.cc b/sql/item.cc index ab742879017c..6428e361e62a 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -6201,7 +6201,8 @@ Field *Item::tmp_table_field_from_field_type(TABLE *table, bool fixed_length) collation.collation); break; } - /* Fall through to make_string_field() */ + // fallthrough + // to make_string_field() case MYSQL_TYPE_ENUM: case MYSQL_TYPE_SET: case MYSQL_TYPE_VAR_STRING: diff --git a/sql/item_func.cc b/sql/item_func.cc index 6da1d2fee0bf..d0204b64f575 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -1911,6 +1911,7 @@ my_decimal *Item_func_mod::decimal_op(my_decimal *decimal_value) return decimal_value; case E_DEC_DIV_ZERO: signal_divide_by_null(); + // fallthrough default: null_value= 1; return 0; @@ -5035,6 +5036,7 @@ String *user_var_entry::val_str(my_bool *null_value, String *str, case STRING_RESULT: if (str->copy(m_ptr, m_length, collation.collation)) str= 0; // EOM error + break; case ROW_RESULT: DBUG_ASSERT(1); // Impossible break; diff --git a/sql/log.cc b/sql/log.cc index 480b06988519..53a0383f327c 100644 --- a/sql/log.cc +++ b/sql/log.cc @@ -3241,8 +3241,10 @@ void TC_LOG_MMAP::close() mysql_mutex_destroy(&LOCK_active); mysql_mutex_destroy(&LOCK_pool); mysql_cond_destroy(&COND_pool); + // fallthrough case 5: data[0]='A'; // garble the first (signature) byte, in case mysql_file_delete fails + // fallthrough case 4: for (i=0; i < npages; i++) { @@ -3251,10 +3253,13 @@ void TC_LOG_MMAP::close() mysql_mutex_destroy(&pages[i].lock); mysql_cond_destroy(&pages[i].cond); } + // fallthrough case 3: my_free(pages); + // fallthrough case 2: my_munmap((char*)data, (size_t)file_length); + // fallthrough case 1: mysql_file_close(fd, MYF(0)); } diff --git a/sql/log_event.cc b/sql/log_event.cc index 0cdbcdbcd89d..fa56154c3f22 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -7839,17 +7839,17 @@ User_var_log_event(const char* buf, uint event_len, #ifndef DBUG_OFF bool old_pre_checksum_fd= description_event->is_version_before_checksum(); #endif - DBUG_ASSERT((bytes_read == data_written - - (old_pre_checksum_fd || + DBUG_ASSERT((bytes_read == (data_written - + ((old_pre_checksum_fd || (description_event->checksum_alg == BINLOG_CHECKSUM_ALG_OFF)) ? - 0 : BINLOG_CHECKSUM_LEN) + 0 : BINLOG_CHECKSUM_LEN))) || - (bytes_read == data_written -1 - + ((bytes_read == (data_written -1 - (old_pre_checksum_fd || (description_event->checksum_alg == BINLOG_CHECKSUM_ALG_OFF)) ? - 0 : BINLOG_CHECKSUM_LEN)); + 0 : BINLOG_CHECKSUM_LEN)))); if ((data_written - bytes_read) > 0) { flags= (uint) *(buf + UV_VAL_IS_NULL + UV_VAL_TYPE_SIZE + diff --git a/sql/mysqld.cc b/sql/mysqld.cc index cdc7873c02fb..981f2ae0c914 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -8927,7 +8927,7 @@ mysqld_get_one_option(int optid, break; case 'L': WARN_DEPRECATED(NULL, "--language/-l", "'--lc-messages-dir'"); - /* Note: fall-through */ + // fallthrough case OPT_LC_MESSAGES_DIRECTORY: strmake(lc_messages_dir, argument, sizeof(lc_messages_dir)-1); lc_messages_dir_ptr= lc_messages_dir; diff --git a/sql/opt_sum.cc b/sql/opt_sum.cc index 2a5ee6c719dc..0e289bd055c3 100644 --- a/sql/opt_sum.cc +++ b/sql/opt_sum.cc @@ -1037,6 +1037,7 @@ static int maxmin_in_range(bool max_fl, Field* field, Item *cond) case Item_func::LT_FUNC: case Item_func::LE_FUNC: less_fl= 1; + // fallthrough case Item_func::GT_FUNC: case Item_func::GE_FUNC: { diff --git a/sql/rpl_info_factory.cc b/sql/rpl_info_factory.cc index 815fbbe99c15..562efae53cbb 100644 --- a/sql/rpl_info_factory.cc +++ b/sql/rpl_info_factory.cc @@ -213,7 +213,9 @@ Relay_log_info *Rpl_info_factory::create_rli(uint rli_option, bool is_slave_reco worker_table_data, worker_file_data, &msg)) goto err; - if (!(rli= new Relay_log_info(is_slave_recovery + try + { + rli= new Relay_log_info(is_slave_recovery #ifdef HAVE_PSI_INTERFACE ,&key_relay_log_info_run_lock, &key_relay_log_info_data_lock, @@ -224,7 +226,8 @@ Relay_log_info *Rpl_info_factory::create_rli(uint rli_option, bool is_slave_reco &key_relay_log_info_sleep_cond #endif , instances - ))) + ); + } catch (std::bad_alloc&) { msg= msg_alloc; goto err; @@ -386,7 +389,9 @@ Slave_worker *Rpl_info_factory::create_worker(uint rli_option, uint worker_id, char *pos= strmov(worker_file_data.name, worker_file_data.pattern); sprintf(pos, "%u", worker_id + 1); - if (!(worker= new Slave_worker(rli + try + { + worker= new Slave_worker(rli #ifdef HAVE_PSI_INTERFACE ,&key_relay_log_info_run_lock, &key_relay_log_info_data_lock, @@ -397,9 +402,11 @@ Slave_worker *Rpl_info_factory::create_worker(uint rli_option, uint worker_id, &key_relay_log_info_sleep_cond #endif , worker_id - ))) + ); + } catch (std::bad_alloc&) + { goto err; - + } if(init_repositories(worker_table_data, worker_file_data, rli_option, worker_id + 1, &handler_src, &handler_dest, &msg)) diff --git a/sql/rpl_rli.cc b/sql/rpl_rli.cc index cf9666a17c24..0e8ca4b890d4 100644 --- a/sql/rpl_rli.cc +++ b/sql/rpl_rli.cc @@ -2493,3 +2493,17 @@ void Relay_log_info::adapt_to_master_version(Format_description_log_event *fdle) } } } + +void* Relay_log_info::operator new(size_t request) +{ + void* ptr; + if (posix_memalign(&ptr, __alignof__(Relay_log_info), sizeof(Relay_log_info))) { + throw std::bad_alloc(); + } + return ptr; +} + +void Relay_log_info::operator delete(void * ptr) { + free(ptr); +} + diff --git a/sql/rpl_rli.h b/sql/rpl_rli.h index 28886dd2bec0..d6da23fba83d 100644 --- a/sql/rpl_rli.h +++ b/sql/rpl_rli.h @@ -211,6 +211,11 @@ class Relay_log_info : public Rpl_info happen when, for example, the relay log gets rotated because of max_binlog_size. */ + + // overridden new and delete operators for 64 byte alignment + static void* operator new(size_t request); + static void operator delete(void * ptr); + protected: char group_relay_log_name[FN_REFLEN]; ulonglong group_relay_log_pos; diff --git a/sql/rpl_rli_pdb.cc b/sql/rpl_rli_pdb.cc index db1ea1096dee..8eded3d0f64f 100644 --- a/sql/rpl_rli_pdb.cc +++ b/sql/rpl_rli_pdb.cc @@ -1668,6 +1668,20 @@ void Slave_worker::do_report(loglevel level, int err_code, const char *msg, c_rli->va_report(level, err_code, buff_coord, msg, args); } +void* Slave_worker::operator new(size_t request) +{ + void* ptr; + if (posix_memalign(&ptr, __alignof__(Slave_worker), sizeof(Slave_worker))) { + throw std::bad_alloc(); + } + return ptr; +} + +void Slave_worker::operator delete(void * ptr) +{ + free(ptr); +} + /** Function is called by Coordinator when it identified an event requiring sequential execution. diff --git a/sql/rpl_rli_pdb.h b/sql/rpl_rli_pdb.h index 1aa826153c34..5647ba98a6b2 100644 --- a/sql/rpl_rli_pdb.h +++ b/sql/rpl_rli_pdb.h @@ -437,6 +437,10 @@ class Slave_worker : public Relay_log_info gaq_index= val; }; + // overridden new and delete operators for 64 byte alignment + static void* operator new(size_t request); + static void operator delete(void * ptr); + protected: virtual void do_report(loglevel level, int err_code, diff --git a/sql/rpl_slave.cc b/sql/rpl_slave.cc index a3e2a6dfa7d9..8907773be047 100644 --- a/sql/rpl_slave.cc +++ b/sql/rpl_slave.cc @@ -3232,6 +3232,7 @@ bool show_slave_status(THD* thd, Master_info* mi) break; case Relay_log_info::UNTIL_SQL_AFTER_MTS_GAPS: until_type= "SQL_AFTER_MTS_GAPS"; + break; case Relay_log_info::UNTIL_DONE: until_type= "DONE"; break; diff --git a/sql/sp.cc b/sql/sp.cc index 54eda70a53f1..68e868598a50 100644 --- a/sql/sp.cc +++ b/sql/sp.cc @@ -2713,7 +2713,8 @@ String *sp_get_item_value(THD *thd, Item *item, String *str) case DECIMAL_RESULT: if (item->field_type() != MYSQL_TYPE_BIT) return item->val_str(str); - else {/* Bit type is handled as binary string */} + // fallthrough + /* Bit type is handled as binary string */ case STRING_RESULT: { String *result= item->val_str(str); diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc index 2ec74b48f1c8..f015d35751e8 100644 --- a/sql/sql_acl.cc +++ b/sql/sql_acl.cc @@ -2987,7 +2987,7 @@ bool change_password(THD *thd, const char *host, const char *user, mysql_mutex_assert_owner(&acl_cache->lock); table->use_all_columns(); - DBUG_ASSERT(host != '\0'); + DBUG_ASSERT(host != NULL && host[0] != '\0'); table->field[MYSQL_USER_FIELD_HOST]->store(host, strlen(host), system_charset_info); table->field[MYSQL_USER_FIELD_USER]->store(user, strlen(user), @@ -3424,7 +3424,7 @@ update_user_table(THD *thd, TABLE *table, if (!is_user_table_positioned) { table->use_all_columns(); - DBUG_ASSERT(host != '\0'); + DBUG_ASSERT(host != NULL && host[0] != '\0'); table->field[MYSQL_USER_FIELD_HOST]->store(host, (uint) strlen(host), system_charset_info); table->field[MYSQL_USER_FIELD_USER]->store(user, (uint) strlen(user), @@ -3573,7 +3573,7 @@ static int replace_user_table(THD *thd, TABLE *table, LEX_USER *combo, } table->use_all_columns(); - DBUG_ASSERT(combo->host.str != '\0'); + DBUG_ASSERT(combo->host.str != NULL && combo->host.str[0] != '\0'); table->field[MYSQL_USER_FIELD_HOST]->store(combo->host.str,combo->host.length, system_charset_info); table->field[MYSQL_USER_FIELD_USER]->store(combo->user.str,combo->user.length, @@ -3664,7 +3664,7 @@ static int replace_user_table(THD *thd, TABLE *table, LEX_USER *combo, old_row_exists = 0; restore_record(table,s->default_values); - DBUG_ASSERT(combo->host.str != '\0'); + DBUG_ASSERT(combo->host.str != NULL && combo->host.str[0] != '\0'); table->field[MYSQL_USER_FIELD_HOST]->store(combo->host.str,combo->host.length, system_charset_info); table->field[MYSQL_USER_FIELD_USER]->store(combo->user.str,combo->user.length, @@ -12602,7 +12602,13 @@ class Rsa_authentication_keys filesize= ftell(key_file); fseek(key_file, 0, SEEK_SET); *key_text_buffer= new char[filesize+1]; - (void) fread(*key_text_buffer, filesize, 1, key_file); + const size_t read_size = fread(*key_text_buffer, filesize, 1, key_file); + if (read_size != 1) + { + delete[] key_text_buffer; + key_text_buffer= NULL; + return true; + } (*key_text_buffer)[filesize]= '\0'; } fclose(key_file); diff --git a/sql/sql_cache.cc b/sql/sql_cache.cc index 13ca4483b181..da902d11fa1e 100644 --- a/sql/sql_cache.cc +++ b/sql/sql_cache.cc @@ -453,6 +453,7 @@ void QueryStripComments::set(const char* query, uint query_length, uint addition break; } } + // fallthrough case '#': { do @@ -1754,6 +1755,7 @@ Query_cache::send_result_to_client(THD *thd, char *sql, uint query_length) { break; } + // fallthrough case '#': do { @@ -2007,7 +2009,7 @@ def_week_frmt: %lu, in_trans: %d, autocommit: %d", { DBUG_PRINT("qcache", ("Temporary table detected: '%s.%s'", - table_list.db, table_list.alias)); + tmptable->s->db.str, tmptable->s->table_name.str)); unlock(); /* We should not store result of this query because it contain diff --git a/sql/sql_digest.cc b/sql/sql_digest.cc index daa2eae54823..083c41fbc5dd 100644 --- a/sql/sql_digest.cc +++ b/sql/sql_digest.cc @@ -460,7 +460,8 @@ sql_digest_state* digest_add_token(sql_digest_state *state, } } while (found_unary); } - /* fall through, for case NULL_SYM below */ + // fallthrough + // for case NULL_SYM below case LEX_HOSTNAME: case TEXT_STRING: case NCHAR_STRING: diff --git a/sql/sql_handler.cc b/sql/sql_handler.cc index 5387eee9b619..5b79d1e72351 100644 --- a/sql/sql_handler.cc +++ b/sql/sql_handler.cc @@ -694,6 +694,7 @@ bool Sql_cmd_handler_read::execute(THD *thd) error= table->file->ha_rnd_next(table->record[0]); break; } + // fallthrough /* Fall through to HANDLER ... READ ... FIRST case if we are trying to read next row in index order after starting reading rows in @@ -724,7 +725,8 @@ bool Sql_cmd_handler_read::execute(THD *thd) error= table->file->ha_index_prev(table->record[0]); break; } - /* else fall through, for more info, see comment before 'case RFIRST'. */ + // fallthrough + // for more info, see comment before 'case RFIRST'. case RLAST: DBUG_ASSERT(m_key_name != 0); if (!(error= table->file->ha_index_or_rnd_end()) && diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index 680ad89f0c75..044014e65688 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -1033,6 +1033,7 @@ static int lex_one_token(YYSTYPE *yylval, THD *thd) yylval->lex_str.length=2; return NULL_SYM; } + // fallthrough case MY_LEX_CHAR: // Unknown or single char token case MY_LEX_SKIP: // This should not happen if (c == '-' && lip->yyPeek() == '-' && @@ -1096,12 +1097,14 @@ static int lex_one_token(YYSTYPE *yylval, THD *thd) state= MY_LEX_HEX_NUMBER; break; } + // fallthrough case MY_LEX_IDENT_OR_BIN: if (lip->yyPeek() == '\'') { // Found b'bin-number' state= MY_LEX_BIN_NUMBER; break; } + // fallthrough case MY_LEX_IDENT: const char *start; #if defined(USE_MB) && defined(USE_MB_IDENT) @@ -1444,6 +1447,7 @@ static int lex_one_token(YYSTYPE *yylval, THD *thd) state= MY_LEX_USER_VARIABLE_DELIMITER; break; } + // fallthrough /* " used for strings */ case MY_LEX_STRING: // Incomplete text string if (!(yylval->lex_str.str = get_text(lip, 1, 1))) diff --git a/sql/sql_optimizer.cc b/sql/sql_optimizer.cc index 783de828a9c1..c895cb0659ef 100644 --- a/sql/sql_optimizer.cc +++ b/sql/sql_optimizer.cc @@ -9414,7 +9414,8 @@ void JOIN::optimize_fts_query() if (fts_item->eq(fts_result, true)) break; } - // Fall-through when not an equivalent MATCH expression + // fallthrough + // when not an equivalent MATCH expression default: covering= false; } diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index b616a0ff544d..50f4fe9114bf 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -3132,6 +3132,7 @@ case SQLCOM_PREPARE: break; } } + // fallthrough case SQLCOM_PURGE_BEFORE: { Item *it; @@ -3833,8 +3834,8 @@ case SQLCOM_PREPARE: /* mysql_update return 2 if we need to switch to multi-update */ if (up_result != 2) break; - /* Fall through */ } + // fallthrough case SQLCOM_UPDATE_MULTI: { DBUG_ASSERT(first_table == all_tables && first_table != 0); @@ -3947,6 +3948,7 @@ case SQLCOM_PREPARE: DBUG_PRINT("debug", ("Just after generate_incident()")); } #endif + // fallthrough case SQLCOM_INSERT: { DBUG_ASSERT(first_table == all_tables && first_table != 0); @@ -4757,6 +4759,7 @@ case SQLCOM_PREPARE: initialize this variable because RESET shares the same code as FLUSH */ lex->no_write_to_binlog= 1; + // fallthrough case SQLCOM_FLUSH: { int write_to_binlog; diff --git a/sql/sql_partition.cc b/sql/sql_partition.cc index 47106c93dc4c..eae6b2c7434a 100644 --- a/sql/sql_partition.cc +++ b/sql/sql_partition.cc @@ -7810,7 +7810,7 @@ int get_part_iter_for_interval_cols_via_map(partition_info *part_info, PARTITION_ITERATOR *part_iter) { uint32 nparts; - get_col_endpoint_func get_col_endpoint; + get_col_endpoint_func get_col_endpoint= NULL; DBUG_ENTER("get_part_iter_for_interval_cols_via_map"); if (part_info->part_type == RANGE_PARTITION) diff --git a/sql/sql_plugin.cc b/sql/sql_plugin.cc index cae75e7110a1..8ede16d9d22d 100644 --- a/sql/sql_plugin.cc +++ b/sql/sql_plugin.cc @@ -1634,10 +1634,12 @@ static bool plugin_load_list(MEM_ROOT *tmp_root, int *argc, char **argv, switch ((*(p++)= *(list++))) { case '\0': list= NULL; /* terminate the loop */ - /* fall through */ + // fallthrough - the later 2 comments are required by GCC #ifndef __WIN__ + // fallthrough case ':': /* can't use this as delimiter as it may be drive letter */ #endif + // fallthrough case ';': str->str[str->length]= '\0'; if (str == &name) // load all plugins in named module @@ -1691,6 +1693,7 @@ static bool plugin_load_list(MEM_ROOT *tmp_root, int *argc, char **argv, str->str= p; continue; } + // fallthrough default: str->length++; continue; diff --git a/sql/sql_prepare.cc b/sql/sql_prepare.cc index 6ecc97fb0105..3485edc12816 100644 --- a/sql/sql_prepare.cc +++ b/sql/sql_prepare.cc @@ -2091,6 +2091,8 @@ static bool check_prepared_statement(Prepared_statement *stmt) if (res != 2) break; + // fallthrough + case SQLCOM_UPDATE_MULTI: res= mysql_test_multiupdate(stmt, tables, res == 2); break; diff --git a/sql/sql_show.cc b/sql/sql_show.cc index e33cf8a3d274..b5b63ff7f5e5 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -805,6 +805,7 @@ class Show_create_error_handler : public Internal_error_handler { is_handled= FALSE; break; } + // fallthrough case ER_COLUMNACCESS_DENIED_ERROR: case ER_VIEW_NO_EXPLAIN: /* Error was anonymized, ignore all the same. */ case ER_PROCACCESS_DENIED_ERROR: diff --git a/sql/sql_table.cc b/sql/sql_table.cc index 3fb16d6b4a6f..f521716fd454 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -1233,12 +1233,13 @@ static int execute_ddl_log_action(THD *thd, DDL_LOG_ENTRY *ddl_log_entry) break; } DBUG_ASSERT(ddl_log_entry->action_type == DDL_LOG_REPLACE_ACTION); - /* - Fall through and perform the rename action of the replace - action. We have already indicated the success of the delete - action in the log entry by stepping up the phase. - */ } + // fallthrough + /* + and perform the rename action of the replace + action. We have already indicated the success of the delete + action in the log entry by stepping up the phase. + */ case DDL_LOG_RENAME_ACTION: { error= TRUE; @@ -6712,7 +6713,8 @@ bool alter_table_manage_keys(TABLE *table, int indexes_were_disabled, case Alter_info::LEAVE_AS_IS: if (!indexes_were_disabled) break; - /* fall-through: disabled indexes */ + // fallthrough + // disabled indexes case Alter_info::DISABLE: error= table->file->ha_disable_indexes(HA_KEY_SWITCH_NONUNIQ_SAVE); } diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 2e2f0768b955..071da98d291d 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -5167,9 +5167,11 @@ size_number: case 'g': case 'G': text_shift_number+=10; + // fallthrough case 'm': case 'M': text_shift_number+=10; + // fallthrough case 'k': case 'K': text_shift_number+=10; diff --git a/storage/federated/ha_federated.cc b/storage/federated/ha_federated.cc index 5aa115e2141c..6f0ca88bea5c 100644 --- a/storage/federated/ha_federated.cc +++ b/storage/federated/ha_federated.cc @@ -1415,8 +1415,8 @@ bool ha_federated::create_where_from_key(String *to, { goto err; } - break; } + break; case HA_READ_KEY_OR_NEXT: DBUG_PRINT("info", ("federated HA_READ_KEY_OR_NEXT %d", i)); if (emit_key_part_name(&tmp, key_part) || @@ -1434,8 +1434,8 @@ bool ha_federated::create_where_from_key(String *to, emit_key_part_element(&tmp, key_part, needs_quotes, 0, ptr, part_length)) goto err; - break; } + break; case HA_READ_KEY_OR_PREV: DBUG_PRINT("info", ("federated HA_READ_KEY_OR_PREV %d", i)); if (emit_key_part_name(&tmp, key_part) || diff --git a/storage/heap/hp_extra.c b/storage/heap/hp_extra.c index 927a973a68e1..1bc39b454319 100644 --- a/storage/heap/hp_extra.c +++ b/storage/heap/hp_extra.c @@ -34,6 +34,7 @@ int heap_extra(register HP_INFO *info, enum ha_extra_function function) switch (function) { case HA_EXTRA_RESET_STATE: heap_reset(info); + break; case HA_EXTRA_NO_READCHECK: info->opt_flag&= ~READ_CHECK_USED; /* No readcheck */ break; diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index 74f4b9c25505..7b695fd4c5aa 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -7626,7 +7626,8 @@ ha_innobase::innobase_lock_autoinc(void) break; } } - /* Fall through to old style locking. */ + // fallthrough + // to old style locking. case AUTOINC_OLD_STYLE_LOCKING: DBUG_EXECUTE_IF("die_if_autoinc_old_lock_style_used", @@ -10330,7 +10331,8 @@ create_options_are_invalid( case ROW_TYPE_DYNAMIC: CHECK_ERROR_ROW_TYPE_NEEDS_FILE_PER_TABLE(use_tablespace); CHECK_ERROR_ROW_TYPE_NEEDS_GT_ANTELOPE; - /* fall through since dynamic also shuns KBS */ + // fallthrough + // since dynamic also shuns KBS case ROW_TYPE_COMPACT: case ROW_TYPE_REDUNDANT: if (kbs_specified) { @@ -10718,7 +10720,8 @@ innobase_table_flags( break; } zip_allowed = FALSE; - /* fall through to set row_format = COMPACT */ + // fallthrough + // to set row_format = COMPACT case ROW_TYPE_NOT_USED: case ROW_TYPE_FIXED: case ROW_TYPE_PAGE: @@ -10727,9 +10730,11 @@ innobase_table_flags( thd, Sql_condition::WARN_LEVEL_WARN, ER_ILLEGAL_HA_CREATE_OPTION, "InnoDB: assuming ROW_FORMAT=COMPACT."); + // fallthrough case ROW_TYPE_DEFAULT: /* If we fell through, set row format to Compact. */ row_format = ROW_TYPE_COMPACT; + // fallthrough case ROW_TYPE_COMPACT: break; } diff --git a/storage/innobase/include/data0type.ic b/storage/innobase/include/data0type.ic index 29dc480a19c3..552d62eef003 100644 --- a/storage/innobase/include/data0type.ic +++ b/storage/innobase/include/data0type.ic @@ -575,7 +575,8 @@ dtype_get_fixed_size_low( #else /* !UNIV_HOTBACKUP */ return(len); #endif /* !UNIV_HOTBACKUP */ - /* fall through for variable-length charsets */ + // fallthrough + // for variable-length charsets case DATA_VARCHAR: case DATA_BINARY: case DATA_DECIMAL: diff --git a/storage/innobase/include/fil0fil.h b/storage/innobase/include/fil0fil.h index 75cc60f37b99..a9593cc4decc 100644 --- a/storage/innobase/include/fil0fil.h +++ b/storage/innobase/include/fil0fil.h @@ -597,7 +597,7 @@ fil_create_new_single_table_tablespace( ulint size) /*!< in: the initial size of the tablespace file in pages, must be >= FIL_IBD_FILE_INITIAL_SIZE */ - MY_ATTRIBUTE((nonnull, warn_unused_result)); + MY_ATTRIBUTE((nonnull(2), warn_unused_result)); #ifndef UNIV_HOTBACKUP /********************************************************************//** Tries to open a single-table tablespace and optionally checks the space id is diff --git a/storage/innobase/include/log0online.h b/storage/innobase/include/log0online.h index 5c3e7d07fd91..2d05c827545f 100644 --- a/storage/innobase/include/log0online.h +++ b/storage/innobase/include/log0online.h @@ -129,7 +129,11 @@ log_online_bitmap_iterator_next( /** Struct for single bitmap file information */ struct log_online_bitmap_file_struct { - char name[FN_REFLEN]; /*!< Name with full path */ + /** Name with full path + 61 is a nice magic constant for the extra space needed for the sprintf + template in the cc file + */ + char name[FN_REFLEN+61]; pfs_os_file_t file; /*!< Handle to opened file */ ib_uint64_t size; /*!< Size of the file */ os_offset_t offset; /*!< Offset of the next read, diff --git a/storage/innobase/include/mach0data.ic b/storage/innobase/include/mach0data.ic index 27b9f62b5523..10fc6fe119bb 100644 --- a/storage/innobase/include/mach0data.ic +++ b/storage/innobase/include/mach0data.ic @@ -792,13 +792,13 @@ mach_swap_byte_order( dest += len; switch (len & 0x7) { - case 0: *--dest = *from++; - case 7: *--dest = *from++; - case 6: *--dest = *from++; - case 5: *--dest = *from++; - case 4: *--dest = *from++; - case 3: *--dest = *from++; - case 2: *--dest = *from++; + case 0: *--dest = *from++; // fallthrough + case 7: *--dest = *from++; // fallthrough + case 6: *--dest = *from++; // fallthrough + case 5: *--dest = *from++; // fallthrough + case 4: *--dest = *from++; // fallthrough + case 3: *--dest = *from++; // fallthrough + case 2: *--dest = *from++; // fallthrough case 1: *--dest = *from; } } diff --git a/storage/innobase/include/page0zip.ic b/storage/innobase/include/page0zip.ic index 6c7d8cd32c73..61e6f37c6122 100644 --- a/storage/innobase/include/page0zip.ic +++ b/storage/innobase/include/page0zip.ic @@ -172,7 +172,7 @@ page_zip_rec_needs_ext( ignored if zip_size == 0 */ ulint zip_size) /*!< in: compressed page size in bytes, or 0 */ { - ut_ad(rec_size > comp ? REC_N_NEW_EXTRA_BYTES : REC_N_OLD_EXTRA_BYTES); + ut_ad(rec_size > (comp ? REC_N_NEW_EXTRA_BYTES : REC_N_OLD_EXTRA_BYTES)); ut_ad(ut_is_2pow(zip_size)); ut_ad(comp || !zip_size); diff --git a/storage/innobase/include/ut0rnd.ic b/storage/innobase/include/ut0rnd.ic index 024c59e553b9..5351c8d9d5ab 100644 --- a/storage/innobase/include/ut0rnd.ic +++ b/storage/innobase/include/ut0rnd.ic @@ -236,17 +236,17 @@ ut_fold_binary( switch (len & 0x7) { case 7: - fold = ut_fold_ulint_pair(fold, (ulint)(*str++)); + fold = ut_fold_ulint_pair(fold, (ulint)(*str++)); // fallthrough case 6: - fold = ut_fold_ulint_pair(fold, (ulint)(*str++)); + fold = ut_fold_ulint_pair(fold, (ulint)(*str++)); // fallthrough case 5: - fold = ut_fold_ulint_pair(fold, (ulint)(*str++)); + fold = ut_fold_ulint_pair(fold, (ulint)(*str++)); // fallthrough case 4: - fold = ut_fold_ulint_pair(fold, (ulint)(*str++)); + fold = ut_fold_ulint_pair(fold, (ulint)(*str++)); // fallthrough case 3: - fold = ut_fold_ulint_pair(fold, (ulint)(*str++)); + fold = ut_fold_ulint_pair(fold, (ulint)(*str++)); // fallthrough case 2: - fold = ut_fold_ulint_pair(fold, (ulint)(*str++)); + fold = ut_fold_ulint_pair(fold, (ulint)(*str++)); // fallthrough case 1: fold = ut_fold_ulint_pair(fold, (ulint)(*str++)); } diff --git a/storage/innobase/log/log0online.cc b/storage/innobase/log/log0online.cc index 99762c00a081..9e9e3a4c2848 100644 --- a/storage/innobase/log/log0online.cc +++ b/storage/innobase/log/log0online.cc @@ -489,7 +489,7 @@ log_online_make_bitmap_name( /*=========================*/ lsn_t start_lsn) /*!< in: the start LSN name part */ { - ut_snprintf(log_bmp_sys->out.name, FN_REFLEN, bmp_file_name_template, + ut_snprintf(log_bmp_sys->out.name, sizeof(log_bmp_sys->out.name), bmp_file_name_template, log_bmp_sys->bmp_file_home, bmp_file_name_stem, log_bmp_sys->out_seq_num, start_lsn); } diff --git a/storage/innobase/page/page0page.cc b/storage/innobase/page/page0page.cc index 48c4b53aaa40..a340c04913a7 100644 --- a/storage/innobase/page/page0page.cc +++ b/storage/innobase/page/page0page.cc @@ -2832,7 +2832,7 @@ page_warn_strict_checksum( ulint space_id, ulint page_no) { - srv_checksum_algorithm_t curr_algo_nonstrict; + srv_checksum_algorithm_t curr_algo_nonstrict = srv_checksum_algorithm_t(); switch (curr_algo) { case SRV_CHECKSUM_ALGORITHM_STRICT_CRC32: curr_algo_nonstrict = SRV_CHECKSUM_ALGORITHM_CRC32; diff --git a/storage/innobase/row/row0import.cc b/storage/innobase/row/row0import.cc index 11c4333577e5..ac26c318cb22 100644 --- a/storage/innobase/row/row0import.cc +++ b/storage/innobase/row/row0import.cc @@ -2025,6 +2025,7 @@ PageConverter::update_page( case FIL_PAGE_TYPE_XDES: err = set_current_xdes( buf_block_get_page_no(block), get_frame(block)); + // fallthrough case FIL_PAGE_INODE: case FIL_PAGE_TYPE_TRX_SYS: case FIL_PAGE_IBUF_FREE_LIST: diff --git a/storage/innobase/row/row0log.cc b/storage/innobase/row/row0log.cc index 4596e2fb9513..4fa2ed5cf560 100644 --- a/storage/innobase/row/row0log.cc +++ b/storage/innobase/row/row0log.cc @@ -1872,6 +1872,7 @@ row_log_table_apply_update( When applying the subsequent ROW_T_DELETE, no matching record will be found. */ + return(DB_SUCCESS); case DB_SUCCESS: ut_ad(row != NULL); break; diff --git a/storage/innobase/row/row0mysql.cc b/storage/innobase/row/row0mysql.cc index 2c5dfd102376..9d1fcfc0393e 100644 --- a/storage/innobase/row/row0mysql.cc +++ b/storage/innobase/row/row0mysql.cc @@ -5903,7 +5903,8 @@ row_check_index_for_mysql( fputs(" InnoDB: Warning: CHECK TABLE on ", stderr); dict_index_name_print(stderr, prebuilt->trx, index); fprintf(stderr, " returned %lu\n", ret); - /* fall through (this error is ignored by CHECK TABLE) */ + // fallthrough + // (this error is ignored by CHECK TABLE) case DB_END_OF_INDEX: func_exit: mem_free(buf); diff --git a/storage/innobase/row/row0purge.cc b/storage/innobase/row/row0purge.cc index 35b3520749b5..45a8ae4102c4 100644 --- a/storage/innobase/row/row0purge.cc +++ b/storage/innobase/row/row0purge.cc @@ -488,8 +488,8 @@ row_purge_remove_sec_if_poss_leaf( success = false; } } - /* fall through (the index entry is still needed, - or the deletion succeeded) */ + // fallthrough + // (the index entry is still needed, or the deletion succeeded) case ROW_NOT_DELETED_REF: /* The index entry is still needed. */ case ROW_BUFFERED: diff --git a/storage/innobase/sync/sync0sync.cc b/storage/innobase/sync/sync0sync.cc index b795100972c2..7d0314c1ef61 100644 --- a/storage/innobase/sync/sync0sync.cc +++ b/storage/innobase/sync/sync0sync.cc @@ -1230,6 +1230,7 @@ sync_thread_add_level( upgrading in innobase_start_or_create_for_mysql(). */ break; } + // fallthrough case SYNC_MEM_POOL: case SYNC_MEM_HASH: case SYNC_RECV: @@ -1293,8 +1294,8 @@ sync_thread_add_level( } ut_ad(found_current); - /* fallthrough */ } + // fallthrough case SYNC_BUF_FLUSH_LIST: case SYNC_BUF_LRU_LIST: case SYNC_BUF_FREE_LIST: diff --git a/storage/myisam/mi_extra.c b/storage/myisam/mi_extra.c index 074ff10aecf7..38dd04a1259d 100644 --- a/storage/myisam/mi_extra.c +++ b/storage/myisam/mi_extra.c @@ -148,6 +148,7 @@ int mi_extra(MI_INFO *info, enum ha_extra_function function, void *extra_arg) case HA_EXTRA_PREPARE_FOR_UPDATE: if (info->s->data_file_type != DYNAMIC_RECORD) break; + // fallthrough /* Remove read/write cache if dynamic rows */ case HA_EXTRA_NO_CACHE: if (info->opt_flag & (READ_CACHE_USED | WRITE_CACHE_USED)) diff --git a/storage/myisam/mi_panic.c b/storage/myisam/mi_panic.c index 221b41e8a92b..4204d1ecf904 100644 --- a/storage/myisam/mi_panic.c +++ b/storage/myisam/mi_panic.c @@ -74,6 +74,7 @@ int mi_panic(enum ha_panic_function flag) info->s->kfile=info->dfile= -1; /* Files aren't open anymore */ break; #endif + // fallthrough case HA_PANIC_READ: /* Restore to before WRITE */ #ifdef CANT_OPEN_FILES_TWICE { /* Open closed files */ diff --git a/storage/myisam/myisamchk.c b/storage/myisam/myisamchk.c index f32d830eb8c4..b2c966ac9e2b 100644 --- a/storage/myisam/myisamchk.c +++ b/storage/myisam/myisamchk.c @@ -1366,7 +1366,7 @@ static void descript(MI_CHECK *param, register MI_INFO *info, char * name) key < share->state.header.uniques; key++, uniqueinfo++) { my_bool new_row=0; - char null_bit[8],null_pos[8]; + char null_bit[8],null_pos[11]; printf("%-8d%-5d",key+1,uniqueinfo->key+1); for (keyseg=uniqueinfo->seg ; keyseg->type != HA_KEYTYPE_END ; keyseg++) { diff --git a/storage/tokudb/PerconaFT b/storage/tokudb/PerconaFT index 871ee738913c..416a28e514dd 160000 --- a/storage/tokudb/PerconaFT +++ b/storage/tokudb/PerconaFT @@ -1 +1 @@ -Subproject commit 871ee738913cde6d79df10dee08888f9c00e1556 +Subproject commit 416a28e514ddd8918465d186c44b408f426f621c diff --git a/storage/tokudb/hatoku_cmp.cc b/storage/tokudb/hatoku_cmp.cc index d400c3f7bd3a..0c4b5be7eb78 100644 --- a/storage/tokudb/hatoku_cmp.cc +++ b/storage/tokudb/hatoku_cmp.cc @@ -1984,6 +1984,7 @@ static uint32_t pack_desc_key_length_info(uchar* buf, KEY_AND_COL_INFO* kc_info, case (toku_type_fixstring): field_length = field->pack_length(); set_if_smaller(key_part_length, field_length); + // fallthrough case (toku_type_varbinary): case (toku_type_varstring): case (toku_type_blob): diff --git a/storage/tokudb/tokudb_thread.h b/storage/tokudb/tokudb_thread.h index 25b746e8fc4a..dec58f3fd355 100644 --- a/storage/tokudb/tokudb_thread.h +++ b/storage/tokudb/tokudb_thread.h @@ -204,21 +204,21 @@ inline mutex_t::mutex_t(pfs_key_t key) { _owners = 0; _owner = _null_owner; #endif - int r = mysql_mutex_init(key, &_mutex, MY_MUTEX_INIT_FAST); + int r MY_ATTRIBUTE((unused)) = mysql_mutex_init(key, &_mutex, MY_MUTEX_INIT_FAST); assert_debug(r == 0); } inline mutex_t::~mutex_t(void) { #ifdef TOKUDB_DEBUG assert_debug(_owners == 0); #endif - int r = mysql_mutex_destroy(&_mutex); + int r MY_ATTRIBUTE((unused)) = mysql_mutex_destroy(&_mutex); assert_debug(r == 0); } inline void mutex_t::reinit(pfs_key_t key) { #ifdef TOKUDB_DEBUG assert_debug(_owners == 0); #endif - int r; + int r MY_ATTRIBUTE((unused)); r = mysql_mutex_destroy(&_mutex); assert_debug(r == 0); r = mysql_mutex_init(key, &_mutex, MY_MUTEX_INIT_FAST); @@ -231,7 +231,7 @@ inline void mutex_t::lock( #endif // HAVE_PSI_MUTEX_INTERFACE ) { assert_debug(is_owned_by_me() == false); - int r = inline_mysql_mutex_lock(&_mutex + int r MY_ATTRIBUTE((unused)) = inline_mysql_mutex_lock(&_mutex #ifdef HAVE_PSI_MUTEX_INTERFACE , src_file, @@ -260,7 +260,7 @@ inline void mutex_t::unlock( _owners--; _owner = _null_owner; #endif - int r = inline_mysql_mutex_unlock(&_mutex + int r MY_ATTRIBUTE((unused)) = inline_mysql_mutex_unlock(&_mutex #ifdef SAFE_MUTEX , src_file, @@ -276,11 +276,11 @@ inline bool mutex_t::is_owned_by_me(void) const { #endif inline rwlock_t::rwlock_t(pfs_key_t key) { - int r = mysql_rwlock_init(key, &_rwlock); + int r MY_ATTRIBUTE((unused)) = mysql_rwlock_init(key, &_rwlock); assert_debug(r == 0); } inline rwlock_t::~rwlock_t(void) { - int r = mysql_rwlock_destroy(&_rwlock); + int r MY_ATTRIBUTE((unused)) = mysql_rwlock_destroy(&_rwlock); assert_debug(r == 0); } inline void rwlock_t::lock_read( @@ -328,7 +328,7 @@ inline void rwlock_t::lock_write( assert_debug(r == 0); } inline void rwlock_t::unlock(void) { - int r = mysql_rwlock_unlock(&_rwlock); + int r MY_ATTRIBUTE((unused)) = mysql_rwlock_unlock(&_rwlock); assert_debug(r == 0); } inline rwlock_t::rwlock_t(const rwlock_t&) {} @@ -340,7 +340,7 @@ inline rwlock_t& rwlock_t::operator=(const rwlock_t&) { inline event_t::event_t(bool create_signalled, bool manual_reset) : _manual_reset(manual_reset) { - int r = pthread_mutex_init(&_mutex, NULL); + int r MY_ATTRIBUTE((unused)) = pthread_mutex_init(&_mutex, NULL); assert_debug(r == 0); r = pthread_cond_init(&_cond, NULL); assert_debug(r == 0); @@ -352,13 +352,13 @@ inline event_t::event_t(bool create_signalled, bool manual_reset) : _pulsed = false; } inline event_t::~event_t(void) { - int r = pthread_mutex_destroy(&_mutex); + int r MY_ATTRIBUTE((unused)) = pthread_mutex_destroy(&_mutex); assert_debug(r == 0); r = pthread_cond_destroy(&_cond); assert_debug(r == 0); } inline void event_t::wait(void) { - int r = pthread_mutex_lock(&_mutex); + int r MY_ATTRIBUTE((unused)) = pthread_mutex_lock(&_mutex); assert_debug(r == 0); while (_signalled == false && _pulsed == false) { r = pthread_cond_wait(&_cond, &_mutex); @@ -395,7 +395,7 @@ inline int event_t::wait(ulonglong microseconds) { return 0; } inline void event_t::signal(void) { - int r = pthread_mutex_lock(&_mutex); + int r MY_ATTRIBUTE((unused)) = pthread_mutex_lock(&_mutex); assert_debug(r == 0); _signalled = true; if (_manual_reset) { @@ -409,7 +409,7 @@ inline void event_t::signal(void) { assert_debug(r == 0); } inline void event_t::pulse(void) { - int r = pthread_mutex_lock(&_mutex); + int r MY_ATTRIBUTE((unused)) = pthread_mutex_lock(&_mutex); assert_debug(r == 0); _pulsed = true; r = pthread_cond_signal(&_cond); @@ -419,7 +419,7 @@ inline void event_t::pulse(void) { } inline bool event_t::signalled(void) { bool ret = false; - int r = pthread_mutex_lock(&_mutex); + int r MY_ATTRIBUTE((unused)) = pthread_mutex_lock(&_mutex); assert_debug(r == 0); ret = _signalled; r = pthread_mutex_unlock(&_mutex); @@ -427,7 +427,7 @@ inline bool event_t::signalled(void) { return ret; } inline void event_t::reset(void) { - int r = pthread_mutex_lock(&_mutex); + int r MY_ATTRIBUTE((unused)) = pthread_mutex_lock(&_mutex); assert_debug(r == 0); _signalled = false; _pulsed = false; @@ -449,21 +449,21 @@ inline semaphore_t::semaphore_t( _initial_count(initial_count), _max_count(max_count) { - int r = pthread_mutex_init(&_mutex, NULL); + int r MY_ATTRIBUTE((unused)) = pthread_mutex_init(&_mutex, NULL); assert_debug(r == 0); r = pthread_cond_init(&_cond, NULL); assert_debug(r == 0); _signalled = _initial_count; } inline semaphore_t::~semaphore_t(void) { - int r = pthread_mutex_destroy(&_mutex); + int r MY_ATTRIBUTE((unused)) = pthread_mutex_destroy(&_mutex); assert_debug(r == 0); r = pthread_cond_destroy(&_cond); assert_debug(r == 0); } inline semaphore_t::E_WAIT semaphore_t::wait(void) { E_WAIT ret; - int r = pthread_mutex_lock(&_mutex); + int r MY_ATTRIBUTE((unused)) = pthread_mutex_lock(&_mutex); assert_debug(r == 0); while (_signalled == 0 && _interrupted == false) { r = pthread_cond_wait(&_cond, &_mutex); @@ -506,7 +506,7 @@ inline semaphore_t::E_WAIT semaphore_t::wait(ulonglong microseconds) { } inline bool semaphore_t::signal(void) { bool ret = false; - int r = pthread_mutex_lock(&_mutex); + int r MY_ATTRIBUTE((unused)) = pthread_mutex_lock(&_mutex); assert_debug(r == 0); if (_signalled < _max_count) { _signalled++; @@ -520,7 +520,7 @@ inline bool semaphore_t::signal(void) { } inline int semaphore_t::signalled(void) { int ret = 0; - int r = pthread_mutex_lock(&_mutex); + int r MY_ATTRIBUTE((unused)) = pthread_mutex_lock(&_mutex); assert_debug(r == 0); ret = _signalled; r = pthread_mutex_unlock(&_mutex); @@ -528,7 +528,7 @@ inline int semaphore_t::signalled(void) { return ret; } inline void semaphore_t::reset(void) { - int r = pthread_mutex_lock(&_mutex); + int r MY_ATTRIBUTE((unused)) = pthread_mutex_lock(&_mutex); assert_debug(r == 0); _signalled = 0; r = pthread_mutex_unlock(&_mutex); @@ -536,7 +536,7 @@ inline void semaphore_t::reset(void) { return; } inline void semaphore_t::set_interrupt(void) { - int r = pthread_mutex_lock(&_mutex); + int r MY_ATTRIBUTE((unused)) = pthread_mutex_lock(&_mutex); assert_debug(r == 0); _interrupted = true; r = pthread_cond_broadcast(&_cond); @@ -545,7 +545,7 @@ inline void semaphore_t::set_interrupt(void) { assert_debug(r == 0); } inline void semaphore_t::clear_interrupt(void) { - int r = pthread_mutex_lock(&_mutex); + int r MY_ATTRIBUTE((unused)) = pthread_mutex_lock(&_mutex); assert_debug(r == 0); _interrupted = false; r = pthread_mutex_unlock(&_mutex); diff --git a/strings/ctype-utf8.c b/strings/ctype-utf8.c index 9862e6de39ef..aef515a17eab 100644 --- a/strings/ctype-utf8.c +++ b/strings/ctype-utf8.c @@ -5555,12 +5555,12 @@ static int my_uni_utf8 (const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), switch (count) { /* Fall through all cases!!! */ #ifdef UNICODE_32BIT - case 6: r[5] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0x4000000; - case 5: r[4] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0x200000; - case 4: r[3] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0x10000; + case 6: r[5] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0x4000000; // fallthrough + case 5: r[4] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0x200000; // fallthrough + case 4: r[3] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0x10000; // fallthrough #endif - case 3: r[2] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0x800; - case 2: r[1] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0xc0; + case 3: r[2] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0x800; // fallthrough + case 2: r[1] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0xc0; // fallthrough case 1: r[0] = (uchar) wc; } return count; @@ -5588,8 +5588,8 @@ static int my_uni_utf8_no_range(const CHARSET_INFO *cs switch (count) { /* Fall through all cases!!! */ - case 3: r[2]= (uchar) (0x80 | (wc & 0x3f)); wc= wc >> 6; wc |= 0x800; - case 2: r[1]= (uchar) (0x80 | (wc & 0x3f)); wc= wc >> 6; wc |= 0xc0; + case 3: r[2]= (uchar) (0x80 | (wc & 0x3f)); wc= wc >> 6; wc |= 0x800; // fallthrough + case 2: r[1]= (uchar) (0x80 | (wc & 0x3f)); wc= wc >> 6; wc |= 0xc0; // fallthrough case 1: r[0]= (uchar) wc; } return count; @@ -8104,9 +8104,9 @@ my_wc_mb_utf8mb4(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), switch (count) { /* Fall through all cases!!! */ - case 4: r[3] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0x10000; - case 3: r[2] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0x800; - case 2: r[1] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0xc0; + case 4: r[3] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0x10000; // fallthrough + case 3: r[2] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0x800; // fallthrough + case 2: r[1] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0xc0; // fallthrough case 1: r[0] = (uchar) wc; } return count; @@ -8136,9 +8136,9 @@ my_wc_mb_utf8mb4_no_range(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), switch (count) { /* Fall through all cases!!! */ - case 4: r[3]= (uchar) (0x80 | (wc & 0x3f)); wc= wc >> 6; wc |= 0x10000; - case 3: r[2]= (uchar) (0x80 | (wc & 0x3f)); wc= wc >> 6; wc |= 0x800; - case 2: r[1]= (uchar) (0x80 | (wc & 0x3f)); wc= wc >> 6; wc |= 0xc0; + case 4: r[3]= (uchar) (0x80 | (wc & 0x3f)); wc= wc >> 6; wc |= 0x10000; // fallthrough + case 3: r[2]= (uchar) (0x80 | (wc & 0x3f)); wc= wc >> 6; wc |= 0x800; // fallthrough + case 2: r[1]= (uchar) (0x80 | (wc & 0x3f)); wc= wc >> 6; wc |= 0xc0; // fallthrough case 1: r[0]= (uchar) wc; } return count; diff --git a/strings/decimal.c b/strings/decimal.c index ccb4a6b9f3c1..8982b1eff440 100644 --- a/strings/decimal.c +++ b/strings/decimal.c @@ -230,17 +230,17 @@ static inline int count_leading_zeroes(int i, dec1 val) switch (i) { /* @note Intentional fallthrough in all case labels */ - case 9: if (val >= 1000000000) break; ++ret; - case 8: if (val >= 100000000) break; ++ret; - case 7: if (val >= 10000000) break; ++ret; - case 6: if (val >= 1000000) break; ++ret; - case 5: if (val >= 100000) break; ++ret; - case 4: if (val >= 10000) break; ++ret; - case 3: if (val >= 1000) break; ++ret; - case 2: if (val >= 100) break; ++ret; - case 1: if (val >= 10) break; ++ret; - case 0: if (val >= 1) break; ++ret; - default: { DBUG_ASSERT(FALSE); } + case 9: if (val >= 1000000000) break; ++ret; // fallthrough + case 8: if (val >= 100000000) break; ++ret; // fallthrough + case 7: if (val >= 10000000) break; ++ret; // fallthrough + case 6: if (val >= 1000000) break; ++ret; // fallthrough + case 5: if (val >= 100000) break; ++ret; // fallthrough + case 4: if (val >= 10000) break; ++ret; // fallthrough + case 3: if (val >= 1000) break; ++ret; // fallthrough + case 2: if (val >= 100) break; ++ret; // fallthrough + case 1: if (val >= 10) break; ++ret; // fallthrough + case 0: if (val >= 1) break; ++ret; // fallthrough + default: { DBUG_ASSERT(FALSE); } // fallthrough } return ret; } @@ -263,16 +263,16 @@ static inline int count_trailing_zeroes(int i, dec1 val) switch(i) { /* @note Intentional fallthrough in all case labels */ - case 0: if ((val % 1) != 0) break; ++ret; - case 1: if ((val % 10) != 0) break; ++ret; - case 2: if ((val % 100) != 0) break; ++ret; - case 3: if ((val % 1000) != 0) break; ++ret; - case 4: if ((val % 10000) != 0) break; ++ret; - case 5: if ((val % 100000) != 0) break; ++ret; - case 6: if ((val % 1000000) != 0) break; ++ret; - case 7: if ((val % 10000000) != 0) break; ++ret; - case 8: if ((val % 100000000) != 0) break; ++ret; - case 9: if ((val % 1000000000) != 0) break; ++ret; + case 0: if ((val % 1) != 0) break; ++ret; // fallthrough + case 1: if ((val % 10) != 0) break; ++ret; // fallthrough + case 2: if ((val % 100) != 0) break; ++ret; // fallthrough + case 3: if ((val % 1000) != 0) break; ++ret; // fallthrough + case 4: if ((val % 10000) != 0) break; ++ret; // fallthrough + case 5: if ((val % 100000) != 0) break; ++ret; // fallthrough + case 6: if ((val % 1000000) != 0) break; ++ret; // fallthrough + case 7: if ((val % 10000000) != 0) break; ++ret; // fallthrough + case 8: if ((val % 100000000) != 0) break; ++ret; // fallthrough + case 9: if ((val % 1000000000) != 0) break; ++ret; // fallthrough default: { DBUG_ASSERT(FALSE); } } return ret; diff --git a/strings/dtoa.c b/strings/dtoa.c index 7d9e6931e67c..a7e9693f2841 100644 --- a/strings/dtoa.c +++ b/strings/dtoa.c @@ -1378,7 +1378,7 @@ static double my_strtod_int(const char *s00, char **se, int *error, char *buf, s switch (*s) { case '-': sign= 1; - /* no break */ + // fallthrough case '+': s++; goto break2; @@ -1475,6 +1475,7 @@ static double my_strtod_int(const char *s00, char **se, int *error, char *buf, s switch (c= *s) { case '-': esign= 1; + // fallthrough case '+': c= *++s; } @@ -2368,7 +2369,7 @@ static char *dtoa(double dd, int mode, int ndigits, int *decpt, int *sign, break; case 2: leftright= 0; - /* no break */ + // fallthrough case 4: if (ndigits <= 0) ndigits= 1; @@ -2376,7 +2377,7 @@ static char *dtoa(double dd, int mode, int ndigits, int *decpt, int *sign, break; case 3: leftright= 0; - /* no break */ + // fallthrough case 5: i= ndigits + k + 1; ilim= i; diff --git a/tests/bug25714.c b/tests/bug25714.c index 40c631d76a56..57c69f9413db 100644 --- a/tests/bug25714.c +++ b/tests/bug25714.c @@ -72,6 +72,6 @@ int main (int argc, char **argv) mysql_close(&conn); my_end(0); - return 0; + return OK; } From 3314a526c64e4da5ec2f440aebdc5460e44a63b4 Mon Sep 17 00:00:00 2001 From: Robert Golebiowski Date: Wed, 20 Sep 2017 17:12:07 +0200 Subject: [PATCH 0242/1221] Binlog encryption Based on MariaDB commits: commit b85a00161e91080cb82b99e812c18eafb6467737 MDEV-8264 encryption for binlog * Start_encryption_log_event * --encrypt-binlog command line option based on google patches. commit 7bd2f20e880a5871635260c0a96448631c28b2c5 make encrypt-binlog and encrypt-tmp-files to fail if no encryption commit b5aa0f437fc595d508b9eb5d36185fd8cbaa62eb MDEV-11319 mysqlbinlog crashes or fails with out of memory while reading some encrypted binlogs support encrypted binlogs. Not decryption, but at least recognizing that event are encrypted and prining them as such Server sends additional heartbeat event to slave after reading Start_encryption_event to notify slave to update its master log position. This is needed as Start_encryption event is never send to slave. Also this commit fixes BUG#1634932: Tokudb does not build when WITH_VALGRIND=1 --- CMakeLists.txt | 3 + client/CMakeLists.txt | 1 + client/mysqlbinlog.cc | 20 +- include/my_crypt.h | 60 + include/my_sys.h | 3 + libbinlogevents/include/binlog_event.h | 25 +- libbinlogevents/src/binlog_event.cpp | 17 +- libbinlogevents/src/control_events.cpp | 8 +- libmysqld/CMakeLists.txt | 1 + mysql-test/include/search_pattern_in_file.inc | 29 +- mysql-test/mysql-test-run.pl | 3 +- mysql-test/r/mysqld--help-notwin.result | 2 + .../suite/binlog/t/binlog_incident.test | 9 +- .../suite/binlog_encryption/combinations | 8 + mysql-test/suite/binlog_encryption/my.cnf | 29 + .../r/binlog_incident.result | 13 + .../binlog_encryption/r/binlog_index.result | 396 ++ .../r/binlog_write_error.result | 79 + .../r/encryption_init_error.result | 13 + .../binlog_encryption/r/mysqlbinlog.result | 6 + .../binlog_encryption/rpl_1slave_base.cnf | 48 + .../t/binlog_incident-master.opt | 1 + .../binlog_encryption/t/binlog_incident.test | 2 + .../t/binlog_index-master.opt | 1 + .../binlog_encryption/t/binlog_index.test | 1 + .../t/binlog_write_error.test | 1 + .../t/binlog_xa_recover-master.opt | 1 + .../t/encryption_init_error.test | 20 + .../binlog_encryption/t/mysqlbinlog.test | 21 + .../suite/perfschema/r/show_sanity.result | 2 + mysql-test/suite/rpl/t/rpl_gtid_events.test | 9 +- ...rpl_mts_logical_clock_wrong_start_pos.test | 10 +- .../rpl/t/rpl_sbm_previous_gtid_event.test | 23 +- mysql-test/suite/rpl_encryption/combinations | 8 + mysql-test/suite/rpl_encryption/my.cnf | 29 + .../rpl_encryption/r/encrypted_master.result | 481 ++ .../r/encrypted_master_lost_key.result | 164 + ...rypted_master_switch_to_unencrypted.result | 134 + .../r/encrypted_master_unload_keyring.result | 83 + .../rpl_encryption/r/encrypted_slave.result | 196 + .../rpl_encryption/r/encryption_combo.result | 117 + .../rpl_encryption/r/rpl_binlog_errors.result | 307 + .../rpl_encryption/r/rpl_corruption.result | 50 + .../r/rpl_crash_safe_master.result | 133 + .../rpl_encryption/r/rpl_gtid_events.result | 97 + .../r/rpl_gtid_execution.result | 1661 +++++ .../rpl_encryption/r/rpl_gtid_failover.result | 31 + .../r/rpl_gtid_loaddata_s.result | 22 + ..._relay_log_recovery_auto_pos_on_off.result | 151 + .../r/rpl_gtid_spanned_trx.result | 47 + .../r/rpl_gtid_sql_until_before_after.result | 100 + ...rpl_gtid_table_repository_split_trx.result | 17 + .../r/rpl_gtid_temp_table.result | 854 +++ ...transaction_split_across_relay_logs.result | 28 + .../r/rpl_gtid_validate_slave_gtids.result | 40 + ...rpl_gtids_restart_slave_io_lost_trx.result | 74 + .../r/rpl_init_slave_errors.result | 30 + .../rpl_encryption/r/rpl_loaddatalocal.result | 143 + .../rpl_encryption/r/rpl_loadfile.result | 244 + .../r/rpl_lost_events_on_rotate.result | 18 + .../r/rpl_mixed_binlog_max_cache_size.result | 200 + .../rpl_mts_database_transaction_retry.result | 137 + ...ecute_partial_trx_with_auto_pos_off.result | 26 + ...xecute_partial_trx_with_auto_pos_on.result | 26 + ...mts_gtids_restart_slave_io_lost_trx.result | 74 + ...mts_logical_clock_transaction_retry.result | 138 + ...l_mts_logical_clock_wrong_start_pos.result | 34 + .../r/rpl_multi_source_basic.result | 246 + .../r/rpl_no_gtid_split_statements.result | 336 ++ .../rpl_encryption/r/rpl_parallel.result | 101 + ...allel_show_binlog_events_purge_logs.result | 16 + ...llowed_by_anonymous_trx_by_receiver.result | 54 + ...gtid_trx_followed_by_trx_at_startup.result | 46 + .../rpl_encryption/r/rpl_relayrotate.result | 18 + .../rpl_encryption/r/rpl_rotate_gtid.result | 39 + .../r/rpl_sbm_previous_gtid_event.result | 61 + .../rpl_encryption/r/rpl_semi_sync.result | 498 ++ ...d_mode_on_after_implicit_pre_commit.result | 11 + .../r/rpl_special_charset.result | 10 + .../r/rpl_sporadic_master.result | 29 + .../suite/rpl_encryption/r/rpl_ssl.result | 94 + .../rpl_stm_mix_rollback_to_savepoint.result | 422 ++ ...m_mixed_mts_rec_crash_safe_checksum.result | 5372 +++++++++++++++++ .../r/rpl_stm_multi_query.result | 42 + .../r/rpl_stm_relay_ign_space.result | 29 + .../r/rpl_stm_until_pos_middle_gtid.result | 27 + .../r/rpl_switch_stm_row_mixed.result | 453 ++ .../suite/rpl_encryption/r/rpl_sync.result | 46 + ...l_transaction_before_commit_failure.result | 31 + ..._boundary_parser_relay_log_recovery.result | 20 + .../r/rpl_trx_boundary_parser_row.result | 1080 ++++ .../r/rpl_trx_boundary_parser_stmt.result | 1077 ++++ .../rpl_encryption/r/rpl_typeconv.result | 545 ++ .../r/rpl_unknown_ignorable_event.result | 28 + .../r/rpl_upgrade_slave_master_info.result | 143 + .../r/rpl_wait_for_executed_gtid_set.result | 597 ++ ...it_for_executed_gtid_set_with_sleep.result | 21 + ...wait_for_gtid_executed_unknown_uuid.result | 15 + .../rpl_encryption/r/rpl_xa_prepare.result | 57 + .../r/rpl_xa_survive_crash_debug.result | 46 + .../r/rpl_xa_survive_disconnect.result | 234 + .../rpl_xa_survive_disconnect_lsu_off.result | 234 + ...xa_survive_disconnect_mixed_engines.result | 100 + .../r/rpl_xa_survive_disconnect_table.result | 234 + .../suite/rpl_encryption/rpl_1slave_base.cnf | 48 + .../suite/rpl_encryption/t/disabled.def | 12 + .../rpl_encryption/t/encrypted_master.cnf | 6 + .../rpl_encryption/t/encrypted_master.test | 166 + .../t/encrypted_master_lost_key-master.opt | 1 + .../t/encrypted_master_lost_key.test | 214 + ...encrypted_master_switch_to_unencrypted.cnf | 5 + ...ncrypted_master_switch_to_unencrypted.test | 166 + .../t/encrypted_master_unload_keyring.cnf | 24 + .../t/encrypted_master_unload_keyring.test | 207 + .../rpl_encryption/t/encrypted_slave.cnf | 11 + .../rpl_encryption/t/encrypted_slave.test | 122 + .../rpl_encryption/t/encryption_combo.cnf | 5 + .../rpl_encryption/t/encryption_combo.test | 138 + .../rpl_encryption/t/rpl_binlog_errors.cnf | 7 + .../rpl_encryption/t/rpl_binlog_errors.test | 1 + .../suite/rpl_encryption/t/rpl_corruption.cnf | 9 + .../rpl_encryption/t/rpl_corruption.test | 1 + .../t/rpl_crash_safe_master.test | 1 + .../rpl_encryption/t/rpl_gtid_events.cnf | 11 + .../rpl_encryption/t/rpl_gtid_events.test | 1 + .../rpl_encryption/t/rpl_gtid_execution.cnf | 11 + .../rpl_encryption/t/rpl_gtid_execution.test | 1 + .../rpl_encryption/t/rpl_gtid_failover.cnf | 21 + .../rpl_encryption/t/rpl_gtid_failover.test | 1 + .../rpl_encryption/t/rpl_gtid_loaddata_s.cnf | 15 + .../rpl_encryption/t/rpl_gtid_loaddata_s.test | 1 + ...mts_relay_log_recovery_auto_pos_on_off.cnf | 17 + ...ts_relay_log_recovery_auto_pos_on_off.test | 1 + .../rpl_encryption/t/rpl_gtid_spanned_trx.cnf | 18 + .../t/rpl_gtid_spanned_trx.test | 1 + .../t/rpl_gtid_split_statements.cnf | 9 + .../t/rpl_gtid_split_statements.test | 2 + .../t/rpl_gtid_sql_until_before_after.cnf | 9 + .../t/rpl_gtid_sql_until_before_after.test | 1 + .../t/rpl_gtid_table_repository_split_trx.cnf | 13 + .../rpl_gtid_table_repository_split_trx.test | 1 + .../rpl_encryption/t/rpl_gtid_temp_table.cnf | 14 + .../rpl_encryption/t/rpl_gtid_temp_table.test | 1 + ...id_transaction_split_across_relay_logs.cnf | 37 + ...d_transaction_split_across_relay_logs.test | 1 + .../t/rpl_gtid_validate_slave_gtids.cnf | 14 + .../t/rpl_gtid_validate_slave_gtids.test | 1 + .../t/rpl_gtids_restart_slave_io_lost_trx.cnf | 17 + .../rpl_gtids_restart_slave_io_lost_trx.test | 1 + .../t/rpl_init_slave_errors.test | 1 + .../rpl_encryption/t/rpl_loaddatalocal.test | 1 + .../suite/rpl_encryption/t/rpl_loadfile.test | 1 + .../t/rpl_lost_events_on_rotate.test | 1 + .../t/rpl_mixed_binlog_max_cache_size.cnf | 5 + .../t/rpl_mixed_binlog_max_cache_size.test | 1 + .../t/rpl_mts_database_transaction_retry.test | 1 + ..._execute_partial_trx_with_auto_pos_off.cnf | 9 + ...execute_partial_trx_with_auto_pos_off.test | 1 + ...s_execute_partial_trx_with_auto_pos_on.cnf | 9 + ..._execute_partial_trx_with_auto_pos_on.test | 1 + ...pl_mts_gtids_restart_slave_io_lost_trx.cnf | 16 + ...l_mts_gtids_restart_slave_io_lost_trx.test | 1 + ...l_mts_logical_clock_transaction_retry.test | 1 + .../rpl_mts_logical_clock_wrong_start_pos.cnf | 9 + ...rpl_mts_logical_clock_wrong_start_pos.test | 2 + .../t/rpl_multi_source_basic.cnf | 23 + .../t/rpl_multi_source_basic.test | 1 + .../rpl_encryption/t/rpl_parallel-master.opt | 1 + .../rpl_encryption/t/rpl_parallel-slave.opt | 1 + .../suite/rpl_encryption/t/rpl_parallel.test | 1 + ...parallel_show_binlog_events_purge_logs.cnf | 8 + ...arallel_show_binlog_events_purge_logs.test | 1 + ..._followed_by_anonymous_trx_by_receiver.cnf | 9 + ...followed_by_anonymous_trx_by_receiver.test | 1 + ...al_gtid_trx_followed_by_trx_at_startup.cnf | 12 + ...l_gtid_trx_followed_by_trx_at_startup.test | 1 + .../t/rpl_relayrotate-slave.opt | 1 + .../rpl_encryption/t/rpl_relayrotate.test | 1 + .../rpl_encryption/t/rpl_rotate_gtid.cnf | 17 + .../rpl_encryption/t/rpl_rotate_gtid.test | 1 + .../t/rpl_sbm_previous_gtid_event.cnf | 15 + .../t/rpl_sbm_previous_gtid_event.test | 2 + .../rpl_encryption/t/rpl_semi_sync-master.opt | 1 + .../rpl_encryption/t/rpl_semi_sync-slave.opt | 1 + .../suite/rpl_encryption/t/rpl_semi_sync.test | 1 + ...tid_mode_on_after_implicit_pre_commit.test | 1 + .../t/rpl_special_charset-slave.opt | 1 + .../rpl_encryption/t/rpl_special_charset.test | 1 + .../t/rpl_sporadic_master-master.opt | 1 + .../rpl_encryption/t/rpl_sporadic_master.test | 1 + .../suite/rpl_encryption/t/rpl_ssl.test | 1 + .../t/rpl_stm_mix_rollback_to_savepoint.cnf | 13 + .../t/rpl_stm_mix_rollback_to_savepoint.test | 1 + ...xed_mts_rec_crash_safe_checksum-master.opt | 1 + ...ixed_mts_rec_crash_safe_checksum-slave.opt | 1 + ...stm_mixed_mts_rec_crash_safe_checksum.test | 1 + .../rpl_encryption/t/rpl_stm_multi_query.test | 1 + .../t/rpl_stm_relay_ign_space.cnf | 9 + .../t/rpl_stm_relay_ign_space.test | 1 + .../t/rpl_stm_until_pos_middle_gtid.cnf | 9 + .../t/rpl_stm_until_pos_middle_gtid.test | 1 + .../t/rpl_switch_stm_row_mixed.test | 1 + .../rpl_encryption/t/rpl_sync-master.opt | 2 + .../suite/rpl_encryption/t/rpl_sync-slave.opt | 1 + .../suite/rpl_encryption/t/rpl_sync.test | 1 + ...ansaction_before_commit_failure-master.opt | 2 + ...ransaction_before_commit_failure-slave.opt | 2 + ...rpl_transaction_before_commit_failure.test | 1 + ...rx_boundary_parser_relay_log_recovery.test | 1 + .../t/rpl_trx_boundary_parser_row.cnf | 9 + .../t/rpl_trx_boundary_parser_row.test | 1 + .../t/rpl_trx_boundary_parser_stmt.cnf | 10 + .../t/rpl_trx_boundary_parser_stmt.test | 1 + .../suite/rpl_encryption/t/rpl_typeconv.test | 1 + .../t/rpl_unknown_ignorable_event.cnf | 12 + .../t/rpl_unknown_ignorable_event.test | 1 + .../rpl_upgrade_slave_master_info-master.opt | 5 + .../t/rpl_upgrade_slave_master_info.test | 1 + .../t/rpl_wait_for_executed_gtid_set.cnf | 21 + .../t/rpl_wait_for_executed_gtid_set.test | 1 + ..._wait_for_executed_gtid_set_with_sleep.cnf | 9 + ...wait_for_executed_gtid_set_with_sleep.test | 1 + ...pl_wait_for_gtid_executed_unknown_uuid.cnf | 9 + ...l_wait_for_gtid_executed_unknown_uuid.test | 1 + .../suite/rpl_encryption/t/rpl_xa_prepare.cnf | 15 + .../rpl_encryption/t/rpl_xa_prepare.test | 1 + .../t/rpl_xa_survive_crash_debug.cnf | 4 + .../t/rpl_xa_survive_crash_debug.test | 1 + .../t/rpl_xa_survive_disconnect.test | 1 + ...pl_xa_survive_disconnect_lsu_off-slave.opt | 1 + .../t/rpl_xa_survive_disconnect_lsu_off.test | 1 + ...l_xa_survive_disconnect_mixed_engines.test | 1 + .../rpl_xa_survive_disconnect_table-slave.opt | 1 + .../t/rpl_xa_survive_disconnect_table.test | 1 + .../suite/rpl_encryption/t/testdata.inc | 201 + .../sys_vars/r/encrypt_binlog_basic.result | 48 + .../sys_vars/t/encrypt_binlog_basic.test | 84 + mysys/my_malloc.c | 14 + mysys_ssl/CMakeLists.txt | 4 +- mysys_ssl/my_crypt.cc | 393 ++ mysys_ssl/yassl.cc | 194 + plugin/keyring_vault/vault_memory.h | 14 - .../include/pipeline_interfaces.h | 2 +- sql/CMakeLists.txt | 6 +- sql/binlog.cc | 230 +- sql/binlog.h | 14 +- sql/binlog_crypt_data.cc | 120 + sql/binlog_crypt_data.h | 56 + sql/event_crypt.cc | 124 + sql/event_crypt.h | 60 + sql/log_event.cc | 234 +- sql/log_event.h | 109 +- sql/mysqld.cc | 15 + sql/mysqld.h | 1 + sql/rpl_binlog_sender.cc | 89 +- sql/rpl_binlog_sender.h | 4 +- sql/rpl_rli.cc | 16 +- sql/rpl_rli_pdb.cc | 20 + sql/rpl_slave.cc | 71 +- sql/rpl_trx_boundary_parser.cc | 3 +- sql/sys_vars.cc | 5 + 261 files changed, 22822 insertions(+), 168 deletions(-) create mode 100644 include/my_crypt.h create mode 100644 mysql-test/suite/binlog_encryption/combinations create mode 100644 mysql-test/suite/binlog_encryption/my.cnf create mode 100644 mysql-test/suite/binlog_encryption/r/binlog_incident.result create mode 100644 mysql-test/suite/binlog_encryption/r/binlog_index.result create mode 100644 mysql-test/suite/binlog_encryption/r/binlog_write_error.result create mode 100644 mysql-test/suite/binlog_encryption/r/encryption_init_error.result create mode 100644 mysql-test/suite/binlog_encryption/r/mysqlbinlog.result create mode 100644 mysql-test/suite/binlog_encryption/rpl_1slave_base.cnf create mode 100644 mysql-test/suite/binlog_encryption/t/binlog_incident-master.opt create mode 100644 mysql-test/suite/binlog_encryption/t/binlog_incident.test create mode 100644 mysql-test/suite/binlog_encryption/t/binlog_index-master.opt create mode 100644 mysql-test/suite/binlog_encryption/t/binlog_index.test create mode 100644 mysql-test/suite/binlog_encryption/t/binlog_write_error.test create mode 100644 mysql-test/suite/binlog_encryption/t/binlog_xa_recover-master.opt create mode 100644 mysql-test/suite/binlog_encryption/t/encryption_init_error.test create mode 100644 mysql-test/suite/binlog_encryption/t/mysqlbinlog.test create mode 100644 mysql-test/suite/rpl_encryption/combinations create mode 100644 mysql-test/suite/rpl_encryption/my.cnf create mode 100644 mysql-test/suite/rpl_encryption/r/encrypted_master.result create mode 100644 mysql-test/suite/rpl_encryption/r/encrypted_master_lost_key.result create mode 100644 mysql-test/suite/rpl_encryption/r/encrypted_master_switch_to_unencrypted.result create mode 100644 mysql-test/suite/rpl_encryption/r/encrypted_master_unload_keyring.result create mode 100644 mysql-test/suite/rpl_encryption/r/encrypted_slave.result create mode 100644 mysql-test/suite/rpl_encryption/r/encryption_combo.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_binlog_errors.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_corruption.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_crash_safe_master.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_gtid_events.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_gtid_execution.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_gtid_failover.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_gtid_loaddata_s.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_gtid_mts_relay_log_recovery_auto_pos_on_off.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_gtid_spanned_trx.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_gtid_sql_until_before_after.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_gtid_table_repository_split_trx.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_gtid_temp_table.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_gtid_transaction_split_across_relay_logs.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_gtid_validate_slave_gtids.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_gtids_restart_slave_io_lost_trx.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_init_slave_errors.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_loaddatalocal.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_loadfile.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_lost_events_on_rotate.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_mixed_binlog_max_cache_size.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_mts_database_transaction_retry.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_mts_execute_partial_trx_with_auto_pos_off.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_mts_execute_partial_trx_with_auto_pos_on.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_mts_gtids_restart_slave_io_lost_trx.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_mts_logical_clock_transaction_retry.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_mts_logical_clock_wrong_start_pos.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_multi_source_basic.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_no_gtid_split_statements.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_parallel.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_parallel_show_binlog_events_purge_logs.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_partial_gtid_trx_followed_by_anonymous_trx_by_receiver.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_partial_gtid_trx_followed_by_trx_at_startup.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_relayrotate.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_rotate_gtid.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_sbm_previous_gtid_event.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_semi_sync.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_set_gtid_mode_on_after_implicit_pre_commit.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_special_charset.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_sporadic_master.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_ssl.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_stm_mix_rollback_to_savepoint.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_stm_mixed_mts_rec_crash_safe_checksum.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_stm_multi_query.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_stm_relay_ign_space.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_stm_until_pos_middle_gtid.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_switch_stm_row_mixed.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_sync.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_transaction_before_commit_failure.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_trx_boundary_parser_relay_log_recovery.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_trx_boundary_parser_row.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_trx_boundary_parser_stmt.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_typeconv.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_unknown_ignorable_event.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_upgrade_slave_master_info.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_wait_for_executed_gtid_set.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_wait_for_executed_gtid_set_with_sleep.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_wait_for_gtid_executed_unknown_uuid.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_xa_prepare.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_xa_survive_crash_debug.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_xa_survive_disconnect.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_xa_survive_disconnect_lsu_off.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_xa_survive_disconnect_mixed_engines.result create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_xa_survive_disconnect_table.result create mode 100644 mysql-test/suite/rpl_encryption/rpl_1slave_base.cnf create mode 100644 mysql-test/suite/rpl_encryption/t/disabled.def create mode 100644 mysql-test/suite/rpl_encryption/t/encrypted_master.cnf create mode 100644 mysql-test/suite/rpl_encryption/t/encrypted_master.test create mode 100644 mysql-test/suite/rpl_encryption/t/encrypted_master_lost_key-master.opt create mode 100644 mysql-test/suite/rpl_encryption/t/encrypted_master_lost_key.test create mode 100644 mysql-test/suite/rpl_encryption/t/encrypted_master_switch_to_unencrypted.cnf create mode 100644 mysql-test/suite/rpl_encryption/t/encrypted_master_switch_to_unencrypted.test create mode 100644 mysql-test/suite/rpl_encryption/t/encrypted_master_unload_keyring.cnf create mode 100644 mysql-test/suite/rpl_encryption/t/encrypted_master_unload_keyring.test create mode 100644 mysql-test/suite/rpl_encryption/t/encrypted_slave.cnf create mode 100644 mysql-test/suite/rpl_encryption/t/encrypted_slave.test create mode 100644 mysql-test/suite/rpl_encryption/t/encryption_combo.cnf create mode 100644 mysql-test/suite/rpl_encryption/t/encryption_combo.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_binlog_errors.cnf create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_binlog_errors.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_corruption.cnf create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_corruption.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_crash_safe_master.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_gtid_events.cnf create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_gtid_events.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_gtid_execution.cnf create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_gtid_execution.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_gtid_failover.cnf create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_gtid_failover.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_gtid_loaddata_s.cnf create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_gtid_loaddata_s.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_gtid_mts_relay_log_recovery_auto_pos_on_off.cnf create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_gtid_mts_relay_log_recovery_auto_pos_on_off.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_gtid_spanned_trx.cnf create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_gtid_spanned_trx.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_gtid_split_statements.cnf create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_gtid_split_statements.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_gtid_sql_until_before_after.cnf create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_gtid_sql_until_before_after.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_gtid_table_repository_split_trx.cnf create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_gtid_table_repository_split_trx.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_gtid_temp_table.cnf create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_gtid_temp_table.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_gtid_transaction_split_across_relay_logs.cnf create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_gtid_transaction_split_across_relay_logs.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_gtid_validate_slave_gtids.cnf create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_gtid_validate_slave_gtids.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_gtids_restart_slave_io_lost_trx.cnf create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_gtids_restart_slave_io_lost_trx.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_init_slave_errors.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_loaddatalocal.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_loadfile.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_lost_events_on_rotate.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_mixed_binlog_max_cache_size.cnf create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_mixed_binlog_max_cache_size.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_mts_database_transaction_retry.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_mts_execute_partial_trx_with_auto_pos_off.cnf create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_mts_execute_partial_trx_with_auto_pos_off.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_mts_execute_partial_trx_with_auto_pos_on.cnf create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_mts_execute_partial_trx_with_auto_pos_on.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_mts_gtids_restart_slave_io_lost_trx.cnf create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_mts_gtids_restart_slave_io_lost_trx.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_mts_logical_clock_transaction_retry.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_mts_logical_clock_wrong_start_pos.cnf create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_mts_logical_clock_wrong_start_pos.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_multi_source_basic.cnf create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_multi_source_basic.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_parallel-master.opt create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_parallel-slave.opt create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_parallel.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_parallel_show_binlog_events_purge_logs.cnf create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_parallel_show_binlog_events_purge_logs.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_partial_gtid_trx_followed_by_anonymous_trx_by_receiver.cnf create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_partial_gtid_trx_followed_by_anonymous_trx_by_receiver.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_partial_gtid_trx_followed_by_trx_at_startup.cnf create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_partial_gtid_trx_followed_by_trx_at_startup.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_relayrotate-slave.opt create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_relayrotate.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_rotate_gtid.cnf create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_rotate_gtid.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_sbm_previous_gtid_event.cnf create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_sbm_previous_gtid_event.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_semi_sync-master.opt create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_semi_sync-slave.opt create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_semi_sync.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_set_gtid_mode_on_after_implicit_pre_commit.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_special_charset-slave.opt create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_special_charset.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_sporadic_master-master.opt create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_sporadic_master.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_ssl.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_stm_mix_rollback_to_savepoint.cnf create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_stm_mix_rollback_to_savepoint.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_stm_mixed_mts_rec_crash_safe_checksum-master.opt create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_stm_mixed_mts_rec_crash_safe_checksum-slave.opt create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_stm_mixed_mts_rec_crash_safe_checksum.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_stm_multi_query.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_stm_relay_ign_space.cnf create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_stm_relay_ign_space.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_stm_until_pos_middle_gtid.cnf create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_stm_until_pos_middle_gtid.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_switch_stm_row_mixed.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_sync-master.opt create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_sync-slave.opt create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_sync.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_transaction_before_commit_failure-master.opt create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_transaction_before_commit_failure-slave.opt create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_transaction_before_commit_failure.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_trx_boundary_parser_relay_log_recovery.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_trx_boundary_parser_row.cnf create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_trx_boundary_parser_row.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_trx_boundary_parser_stmt.cnf create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_trx_boundary_parser_stmt.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_typeconv.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_unknown_ignorable_event.cnf create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_unknown_ignorable_event.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_upgrade_slave_master_info-master.opt create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_upgrade_slave_master_info.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_wait_for_executed_gtid_set.cnf create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_wait_for_executed_gtid_set.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_wait_for_executed_gtid_set_with_sleep.cnf create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_wait_for_executed_gtid_set_with_sleep.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_wait_for_gtid_executed_unknown_uuid.cnf create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_wait_for_gtid_executed_unknown_uuid.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_xa_prepare.cnf create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_xa_prepare.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_xa_survive_crash_debug.cnf create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_xa_survive_crash_debug.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_xa_survive_disconnect.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_xa_survive_disconnect_lsu_off-slave.opt create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_xa_survive_disconnect_lsu_off.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_xa_survive_disconnect_mixed_engines.test create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_xa_survive_disconnect_table-slave.opt create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_xa_survive_disconnect_table.test create mode 100644 mysql-test/suite/rpl_encryption/t/testdata.inc create mode 100644 mysql-test/suite/sys_vars/r/encrypt_binlog_basic.result create mode 100644 mysql-test/suite/sys_vars/t/encrypt_binlog_basic.test create mode 100644 mysys_ssl/my_crypt.cc create mode 100644 mysys_ssl/yassl.cc create mode 100644 sql/binlog_crypt_data.cc create mode 100644 sql/binlog_crypt_data.h create mode 100644 sql/event_crypt.cc create mode 100644 sql/event_crypt.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 641649676d03..a8728a1fd375 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -236,6 +236,9 @@ OPTION(ENABLE_DTRACE "Include support for DTrace probes" OFF) OPTION(WITHOUT_SERVER OFF) IF(UNIX) OPTION(WITH_VALGRIND "Valgrind instrumentation" OFF) + IF (WITH_VALGRIND) + ADD_DEFINITIONS(-DUSE_VALGRIND) + ENDIF() ENDIF() IF(WIN32) OPTION(WITH_MSCRT_DEBUG "MS Visual Studio Debug CRT instrumentation" OFF) diff --git a/client/CMakeLists.txt b/client/CMakeLists.txt index 8a36b1da31ef..a3b431efe581 100644 --- a/client/CMakeLists.txt +++ b/client/CMakeLists.txt @@ -26,6 +26,7 @@ INCLUDE_DIRECTORIES( ${CMAKE_SOURCE_DIR}/strings ${MY_READLINE_INCLUDE_DIR} ${CMAKE_CURRENT_BINARY_DIR} + SYSTEM ${BOOST_INCLUDE_DIR} ) INCLUDE(${MYSQL_CMAKE_SCRIPT_DIR}/compile_flags.cmake) diff --git a/client/mysqlbinlog.cc b/client/mysqlbinlog.cc index 58adc530bdfe..9ae92d720f3a 100644 --- a/client/mysqlbinlog.cc +++ b/client/mysqlbinlog.cc @@ -1197,14 +1197,16 @@ Exit_status process_event(PRINT_EVENT_INFO *print_event_info, Log_event *ev, IO_CACHE *const head= &print_event_info->head_cache; /* - Format events are not concerned by --offset and such, we always need to - read them to be able to process the wanted events. + Format and Start encryptions events are not concerned by --offset and such, + we always need to read them to be able to process the wanted events. */ if (((rec_count >= offset) && ((my_time_t) (ev->common_header->when.tv_sec) >= start_datetime)) || - (ev_type == binary_log::FORMAT_DESCRIPTION_EVENT)) + (ev_type == binary_log::FORMAT_DESCRIPTION_EVENT) || + (ev_type == binary_log::START_ENCRYPTION_EVENT)) { - if (ev_type != binary_log::FORMAT_DESCRIPTION_EVENT) + if (ev_type != binary_log::FORMAT_DESCRIPTION_EVENT && + ev_type != binary_log::START_ENCRYPTION_EVENT) { /* We have found an event after start_datetime, from now on print @@ -1697,6 +1699,14 @@ Exit_status process_event(PRINT_EVENT_INFO *print_event_info, Log_event *ev, goto err; break; } + case binary_log::START_ENCRYPTION_EVENT: + { + glob_description_event->start_decryption(static_cast(ev)); + ev->print(result_file, print_event_info); + if (head->error == -1) + goto err; + break; + } case binary_log::PREVIOUS_GTIDS_LOG_EVENT: if (one_database && !opt_skip_gtids) warning("The option --database has been used. It may filter " @@ -3513,6 +3523,7 @@ int main(int argc, char** argv) #include "decimal.c" #include "my_decimal.cc" +#include "event_crypt.cc" #include "log_event.cc" #include "log_event_old.cc" #include "rpl_utility.cc" @@ -3521,3 +3532,4 @@ int main(int argc, char** argv) #include "rpl_gtid_set.cc" #include "rpl_gtid_specification.cc" #include "rpl_tblmap.cc" +#include "binlog_crypt_data.cc" diff --git a/include/my_crypt.h b/include/my_crypt.h new file mode 100644 index 000000000000..74f84eaa81e1 --- /dev/null +++ b/include/my_crypt.h @@ -0,0 +1,60 @@ +/* + Copyright (c) 2017 Percona + Copyright (c) 2014 Google Inc. + Copyright (c) 2014, 2015 MariaDB Corporation + + 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 */ + +#ifndef MY_CRYPT_INCLUDED +#define MY_CRYPT_INCLUDED + +#include +#include "my_aes.h" + +#define MY_AES_OK 0 +#define MY_AES_OPENSSL_ERROR -101 +#define MY_AES_BAD_KEYSIZE -102 + +#define ENCRYPTION_FLAG_DECRYPT 0 +#define ENCRYPTION_FLAG_ENCRYPT 1 +#define ENCRYPTION_FLAG_NOPAD 2 + +enum my_aes_mode { + MY_AES_ECB, MY_AES_CBC +#ifdef HAVE_EncryptAes128Ctr + , MY_AES_CTR +#endif +#ifdef HAVE_EncryptAes128Gcm + , MY_AES_GCM +#endif +}; + +class MyEncryptionCTX; + +int my_aes_crypt_init(MyEncryptionCTX* &ctx, enum my_aes_mode mode, int flags, + const unsigned char* key, size_t klen, + const unsigned char* iv, size_t ivlen) MY_ATTRIBUTE((warn_unused_result)); +int my_aes_crypt_update(MyEncryptionCTX *ctx, const unsigned char *src, size_t slen, + unsigned char *dst, size_t *dlen) MY_ATTRIBUTE((warn_unused_result)); +int my_aes_crypt_finish(MyEncryptionCTX* &ctx, uchar *dst, size_t *dlen) MY_ATTRIBUTE((warn_unused_result)); +void my_aes_crypt_free_ctx(MyEncryptionCTX* ctx); + +int my_aes_crypt(enum my_aes_mode mode, int flags, + const unsigned char *src, size_t slen, unsigned char *dst, size_t *dlen, + const unsigned char *key, size_t klen, const unsigned char *iv, size_t ivlen) MY_ATTRIBUTE((warn_unused_result)); + +int my_random_bytes(unsigned char* buf, int num) MY_ATTRIBUTE((warn_unused_result)); +size_t my_aes_crypt_get_size(enum my_aes_mode mode, size_t source_length) MY_ATTRIBUTE((warn_unused_result)); + +#endif /* MY_CRYPT_INCLUDED */ diff --git a/include/my_sys.h b/include/my_sys.h index 18c7a089662b..dffe40bc6013 100644 --- a/include/my_sys.h +++ b/include/my_sys.h @@ -578,6 +578,9 @@ extern size_t my_fwrite(FILE *stream,const uchar *Buffer,size_t Count, myf MyFlags); extern my_off_t my_fseek(FILE *stream,my_off_t pos,int whence,myf MyFlags); extern my_off_t my_ftell(FILE *stream,myf MyFlags); +#if !defined(HAVE_MEMSET_S) +void memset_s(void *dest, size_t dest_max, int c, size_t n); +#endif /* implemented in my_syslog.c */ diff --git a/libbinlogevents/include/binlog_event.h b/libbinlogevents/include/binlog_event.h index bb4219f14cd0..cba62cbf1320 100644 --- a/libbinlogevents/include/binlog_event.h +++ b/libbinlogevents/include/binlog_event.h @@ -326,10 +326,18 @@ enum Log_event_type /* Prepared XA transaction terminal event similar to Xid */ XA_PREPARE_LOG_EVENT= 38, - /** - Add new events here - right above this comment! - Existing events (except ENUM_END_EVENT) should never change their numbers - */ + + /* New MySQL events are to be added right above this comment */ + MYSQL_END_EVENT, + + /* Add new Percona Server events here - its ids should go downwards + * starting from MARIA_EVENTS_BEGIN, i.e. 159, 158 .. + * till MYSQL_END_EVENT */ + + START_ENCRYPTION_EVENT= 159, + + MARIA_EVENTS_BEGIN= 160, + ENUM_END_EVENT /* end marker */ }; @@ -746,9 +754,11 @@ class Binary_log_event /* The number of types we handle in Format_description_event (UNKNOWN_EVENT is not to be handled, it does not exist in binlogs, it does not have a - format). + format - unless it's START_ENCRYPTION_EVENT - then Format_description_event + is not aware of it. That's OK as this event never leaves the server - + it's not sent to slave). */ - static const int LOG_EVENT_TYPES= (ENUM_END_EVENT - 1); + static const int LOG_EVENT_TYPES= (MYSQL_END_EVENT - 1); /** The lengths for the fixed data part of each event. @@ -786,7 +796,8 @@ class Binary_log_event ROWS_HEADER_LEN_V2= 10, TRANSACTION_CONTEXT_HEADER_LEN= 18, VIEW_CHANGE_HEADER_LEN= 52, - XA_PREPARE_HEADER_LEN= 0 + XA_PREPARE_HEADER_LEN= 0, + START_ENCRYPTION_HEADER_LEN= 0 }; // end enum_post_header_length protected: /** diff --git a/libbinlogevents/src/binlog_event.cpp b/libbinlogevents/src/binlog_event.cpp index 65f2af35c210..8264e6302f62 100644 --- a/libbinlogevents/src/binlog_event.cpp +++ b/libbinlogevents/src/binlog_event.cpp @@ -55,7 +55,7 @@ Log_event_footer::get_checksum_alg(const char* buf, unsigned long len) enum_binlog_checksum_alg ret; char version[ST_SERVER_VER_LEN]; unsigned char version_split[3]; - BAPI_ASSERT(buf[EVENT_TYPE_OFFSET] == FORMAT_DESCRIPTION_EVENT); + BAPI_ASSERT(static_cast(buf[EVENT_TYPE_OFFSET]) == FORMAT_DESCRIPTION_EVENT); memcpy(version, buf + buf[LOG_EVENT_MINIMAL_HEADER_LEN + ST_COMMON_HEADER_LEN_OFFSET] + ST_SERVER_VER_OFFSET, ST_SERVER_VER_LEN); @@ -91,7 +91,7 @@ Log_event_header(const char* buf, uint16_t binlog_version) memcpy(&tmp_sec, buf, sizeof(tmp_sec)); when.tv_sec= le32toh(tmp_sec); when.tv_usec= 0; - type_code= static_cast(buf[EVENT_TYPE_OFFSET]); + type_code= static_cast(static_cast(buf[EVENT_TYPE_OFFSET])); memcpy(&unmasked_server_id, buf + SERVER_ID_OFFSET, sizeof(unmasked_server_id)); @@ -137,7 +137,7 @@ Log_event_header(const char* buf, uint16_t binlog_version) Format_desc (remember that mysqlbinlog starts by assuming that 5.0 logs are in 4.0 format, until it finds a Format_desc). */ - if (buf[EVENT_TYPE_OFFSET] < FORMAT_DESCRIPTION_EVENT && log_pos) + if (static_cast(buf[EVENT_TYPE_OFFSET]) < FORMAT_DESCRIPTION_EVENT && log_pos) { /* If log_pos=0, don't change it. log_pos==0 is a marker to mean @@ -174,8 +174,8 @@ Log_event_header(const char* buf, uint16_t binlog_version) memcpy(&flags, buf + FLAGS_OFFSET, sizeof(flags)); flags= le16toh(flags); - if ((buf[EVENT_TYPE_OFFSET] == FORMAT_DESCRIPTION_EVENT) || - (buf[EVENT_TYPE_OFFSET] == ROTATE_EVENT)) + if ((static_cast(buf[EVENT_TYPE_OFFSET]) == FORMAT_DESCRIPTION_EVENT) || + (static_cast(buf[EVENT_TYPE_OFFSET]) == ROTATE_EVENT)) { /* These events always have a header which stops here (i.e. their @@ -224,10 +224,6 @@ bool Log_event_footer::event_checksum_test(unsigned char *event_buf, if (event_buf[EVENT_TYPE_OFFSET] == FORMAT_DESCRIPTION_EVENT) { - #ifndef DBUG_OFF - unsigned char fd_alg= event_buf[event_len - BINLOG_CHECKSUM_LEN - - BINLOG_CHECKSUM_ALG_DESC_LEN]; - #endif /* FD event is checksummed and therefore verified w/o the binlog-in-use flag. @@ -240,9 +236,6 @@ bool Log_event_footer::event_checksum_test(unsigned char *event_buf, The only algorithm currently is CRC32. Zero indicates the binlog file is checksum-free *except* the FD-event. */ - #ifndef DBUG_OFF - BAPI_ASSERT(fd_alg == BINLOG_CHECKSUM_ALG_CRC32 || fd_alg == 0); - #endif BAPI_ASSERT(alg == BINLOG_CHECKSUM_ALG_CRC32); /* Complile time guard to watch over the max number of alg diff --git a/libbinlogevents/src/control_events.cpp b/libbinlogevents/src/control_events.cpp index 15d9ab4d8e1b..7b5cbeccf5f9 100644 --- a/libbinlogevents/src/control_events.cpp +++ b/libbinlogevents/src/control_events.cpp @@ -507,7 +507,13 @@ Incident_event::Incident_event(const char *buf, unsigned int event_len, char const *const str_end= buf - common_header_len + event_len; uint8_t len= 0; // Assignment to keep compiler happy const char *str= NULL; // Assignment to keep compiler happy - read_str_at_most_255_bytes(&ptr, str_end, &str, &len); + if (read_str_at_most_255_bytes(&ptr, str_end, &str, &len)) + { + /* Mark this event invalid */ + incident= INCIDENT_NONE; + return; + } + if (!(message= static_cast(bapi_malloc(len + 1, 16)))) { /* Mark this event invalid */ diff --git a/libmysqld/CMakeLists.txt b/libmysqld/CMakeLists.txt index 44c79e57e7c8..37e8cb24b87f 100644 --- a/libmysqld/CMakeLists.txt +++ b/libmysqld/CMakeLists.txt @@ -32,6 +32,7 @@ INCLUDE_DIRECTORIES( ${SSL_INTERNAL_INCLUDE_DIRS} ${CMAKE_SOURCE_DIR}/sql/backup ${LZ4_INCLUDE_DIR} + SYSTEM ${BOOST_INCLUDE_DIR} ) # We should generate these separately for libmysqld to avoid diff --git a/mysql-test/include/search_pattern_in_file.inc b/mysql-test/include/search_pattern_in_file.inc index 9e9c78c2f3ea..2e7e5c44d45a 100644 --- a/mysql-test/include/search_pattern_in_file.inc +++ b/mysql-test/include/search_pattern_in_file.inc @@ -13,8 +13,8 @@ # In case of # - SEARCH_FILE and/or SEARCH_PATTERN is not set # - SEARCH_FILE cannot be opened -# - SEARCH_FILE does not contain SEARCH_PATTERN -# the test will abort immediate. +# - SEARCH_FILE does not contain SEARCH_PATTERN and PRINT_SEARCH_RESULT +# is not set the test will abort immediate. # MTR will report something like # .... # worker[1] Using MTR_BUILD_THREAD 300, with reserved ports 13000..13009 @@ -33,6 +33,9 @@ # - saving '' to '' # main.1st [ pass ] 2 # +# - PRINT_SEARCH_RESULT is set - the result of the search will +# get printed. +# # Typical use case (check invalid server startup options): # let $error_log= $MYSQLTEST_VARDIR/log/my_restart.err; # --error 0,1 @@ -52,23 +55,33 @@ # # Created: 2011-11-11 mleich # Modified: 2014-04-26 hvadodar +# Modified: 2017-11-10 rgolebiowski # perl; use strict; - my $search_file= $ENV{'SEARCH_FILE'} or die "SEARCH_FILE not set"; + die "SEARCH_FILE not set" unless $ENV{'SEARCH_FILE'}; + my $print_search_result= $ENV{PRINT_SEARCH_RESULT} or 0; + my @search_files= glob($ENV{'SEARCH_FILE'}); my $search_pattern= $ENV{'SEARCH_PATTERN'} or die "SEARCH_PATTERN not set"; my $file_content= ""; my $found= 0; - open(FILE, "$search_file") or die("Unable to open '$search_file': $!\n"); - while ( read(FILE, $file_content, 50000, 0) ) { + foreach my $search_file (@search_files) { + open(FILE, "$search_file") or die("Unable to open '$search_file': $!\n"); + while ( read(FILE, $file_content, 50000, 0) ) { if ( $file_content =~ m{$search_pattern} ) { $found= 1; last; } + } + close(FILE); + } + if ( $print_search_result ) { + my $res=$found ? "FOUND" : "NOT FOUND"; + $ENV{SEARCH_FILE} =~ s{^.*?([^/\\]+)$}{$1}; + print "$res /$search_pattern/ in $ENV{SEARCH_FILE}\n"; } - close(FILE); - if ( ($found == 0) && (not $file_content =~ m{$search_pattern}) ) { - die("# ERROR: The file '$search_file' does not contain the expected pattern $search_pattern\n->$file_content<-\n"); + elsif ( $found == 0 ) { + die("# ERROR: Non of the files do not contain the expected pattern $search_pattern\n"); } EOF diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index 0765ca0bb89e..9a68d74b5d14 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -169,7 +169,8 @@ END # If you add a new suite, please check TEST_DIRS in Makefile.am. # -my $DEFAULT_SUITES= "main,sys_vars,binlog,federated,gis,rpl,innodb,innodb_gis," +my $DEFAULT_SUITES= "main,sys_vars,binlog,binlog_encryption,rpl_encryption," + ."federated,gis,rpl,innodb,innodb_gis," ."innodb_fts,innodb_zip,innodb_undo,innodb_stress,perfschema,funcs_1," ."funcs_2,opt_trace,parts,auth_sec,query_rewrite_plugins,gcol,sysschema," ."test_service_sql_api,jp,stress,engines/iuds,engines/funcs," diff --git a/mysql-test/r/mysqld--help-notwin.result b/mysql-test/r/mysqld--help-notwin.result index d0458ab32b0b..d507a88552a2 100644 --- a/mysql-test/r/mysqld--help-notwin.result +++ b/mysql-test/r/mysqld--help-notwin.result @@ -238,6 +238,7 @@ The following options may be given as the first argument: before storage engine initialization, where each plugin is identified as name=library, where name is the plugin name and library is the plugin library in plugin_dir. + --encrypt-binlog Encrypt binary logs (including relay logs) --end-markers-in-json In JSON output ("EXPLAIN FORMAT=JSON" and optimizer trace), if variable is set to 1, repeats the structure's @@ -1391,6 +1392,7 @@ disabled-storage-engines disconnect-on-expired-password TRUE disconnect-slave-event-count 0 div-precision-increment 4 +encrypt-binlog FALSE end-markers-in-json FALSE enforce-gtid-consistency FALSE enforce-storage-engine (No default value) diff --git a/mysql-test/suite/binlog/t/binlog_incident.test b/mysql-test/suite/binlog/t/binlog_incident.test index a43e5c6833b2..ead3dec20a5d 100644 --- a/mysql-test/suite/binlog/t/binlog_incident.test +++ b/mysql-test/suite/binlog/t/binlog_incident.test @@ -27,7 +27,14 @@ GRANT SELECT(a) ON t1 TO u1@h, u2@h; DROP USER u1@h; DROP TABLE t1; -exec $MYSQL_BINLOG --start-position=$start_pos $MYSQLD_DATADIR/$master_binlog >$MYSQLTEST_VARDIR/tmp/binlog_incident-bug44442.sql; +--let $mysqlbinlog_args= $MYSQLD_DATADIR/$master_binlog +if ($use_remote_mysqlbinlog) +{ + --let $mysqlbinlog_args= --read-from-remote-server --protocol=tcp --host=127.0.0.1 --port=$MASTER_MYPORT -uroot $master_binlog + --let $use_remote_mysqlbinlog= 0 +} + +exec $MYSQL_BINLOG --start-position=$start_pos $mysqlbinlog_args >$MYSQLTEST_VARDIR/tmp/binlog_incident-bug44442.sql; --disable_query_log eval SELECT cont LIKE '%RELOAD DATABASE; # Shall generate syntax error%' AS `Contain RELOAD DATABASE` FROM (SELECT load_file('$MYSQLTEST_VARDIR/tmp/binlog_incident-bug44442.sql') AS cont) AS tbl; --enable_query_log diff --git a/mysql-test/suite/binlog_encryption/combinations b/mysql-test/suite/binlog_encryption/combinations new file mode 100644 index 000000000000..07042c2cbecd --- /dev/null +++ b/mysql-test/suite/binlog_encryption/combinations @@ -0,0 +1,8 @@ +[row] +binlog-format=row + +[stmt] +binlog-format=statement + +[mix] +binlog-format=mixed diff --git a/mysql-test/suite/binlog_encryption/my.cnf b/mysql-test/suite/binlog_encryption/my.cnf new file mode 100644 index 000000000000..d9d9f63cd145 --- /dev/null +++ b/mysql-test/suite/binlog_encryption/my.cnf @@ -0,0 +1,29 @@ +!include include/default_mysqld.cnf +!include include/default_client.cnf + +!include rpl_1slave_base.cnf + +[mysqld.1] +encrypt-binlog=1 +master-verify-checksum=1 +log-bin=master-bin +plugin_dir=@env.KEYRING_PLUGIN_DIR +early-plugin-load=@env.KEYRING_PLUGIN +keyring_file_data=../../tmp/keyring1 + +[mysqld.2] +log-slave-updates +log-bin=slave-bin +relay-log=slave-relay-bin + +[ENV] + +# We will adopt tests with master-slave setup as well as rpl_init setup, +# so need both sets of variables +MASTER_MYPORT= @mysqld.1.port +SERVER_MYPORT_1= @mysqld.1.port +SERVER_MYSOCK_1= @mysqld.1.socket + +SLAVE_MYPORT= @mysqld.2.port +SERVER_MYPORT_2= @mysqld.2.port +SERVER_MYSOCK_2= @mysqld.2.socket diff --git a/mysql-test/suite/binlog_encryption/r/binlog_incident.result b/mysql-test/suite/binlog_encryption/r/binlog_incident.result new file mode 100644 index 000000000000..feaf83a1c9a8 --- /dev/null +++ b/mysql-test/suite/binlog_encryption/r/binlog_incident.result @@ -0,0 +1,13 @@ +call mtr.add_suppression("REVOKE/GRANT failed while storing table level and column level grants in the privilege tables. An incident event has been written to the binary log which will stop the slaves."); +RESET MASTER; +CREATE TABLE t1(a INT, b INT); +CREATE USER u1@h; +# +# The partially failed GRANT statement causes to log an incident event. +# +GRANT SELECT(a) ON t1 TO u1@h, u2@h; +ERROR 42000: Can't find any matching row in the user table +DROP USER u1@h; +DROP TABLE t1; +Contain RELOAD DATABASE +1 diff --git a/mysql-test/suite/binlog_encryption/r/binlog_index.result b/mysql-test/suite/binlog_encryption/r/binlog_index.result new file mode 100644 index 000000000000..cc705e389762 --- /dev/null +++ b/mysql-test/suite/binlog_encryption/r/binlog_index.result @@ -0,0 +1,396 @@ +call mtr.add_suppression('Attempting backtrace'); +call mtr.add_suppression('MYSQL_BIN_LOG::purge_logs failed to process registered files that would be purged.'); +call mtr.add_suppression('MYSQL_BIN_LOG::open failed to sync the index file'); +call mtr.add_suppression('Turning logging off for the whole duration of the MySQL server process.'); +call mtr.add_suppression('Could not open .*'); +call mtr.add_suppression('MYSQL_BIN_LOG::purge_logs failed to clean registers before purging logs.'); +RESET MASTER; +flush logs; +flush logs; +flush logs; +show binary logs; +Log_name File_size +master-bin.000001 # +master-bin.000002 # +master-bin.000003 # +master-bin.000004 # +purge binary logs TO 'master-bin.000004'; +Warnings: +Warning 1612 Being purged log master-bin.000001 was not found +*** must show a list starting from the 'TO' argument of PURGE *** +show binary logs; +Log_name File_size +master-bin.000004 # +reset master; +flush logs; +flush logs; +flush logs; +*** must be a warning master-bin.000001 was not found *** +Warnings: +Warning 1868 file master-bin.000004 was not purged because it is the active log file. +Warning 1612 Being purged log master-bin.000001 was not found +*** must show one record, of the active binlog, left in the index file after PURGE *** +show binary logs; +Log_name File_size +master-bin.000004 # +reset master; +flush logs; +flush logs; +flush logs; +purge binary logs TO 'master-bin.000002'; +ERROR HY000: Fatal error during log purge +show warnings; +Level Code Message +Warning 1377 a problem with deleting master-bin.000001; consider examining correspondence of your binlog index file to the actual binlog files +Error 1377 Fatal error during log purge +reset master; +# crash_purge_before_update_index +flush logs; +SET SESSION debug="+d,crash_purge_before_update_index"; +purge binary logs TO 'master-bin.000002'; +ERROR HY000: Lost connection to MySQL server during query +SET @index=LOAD_FILE('MYSQLTEST_VARDIR/mysqld.1/data//master-bin.index'); +SELECT @index; +@index +master-bin.000001 +master-bin.000002 +master-bin.000003 + +# crash_purge_non_critical_after_update_index +flush logs; +SET SESSION debug="+d,crash_purge_non_critical_after_update_index"; +purge binary logs TO 'master-bin.000004'; +ERROR HY000: Lost connection to MySQL server during query +SET @index=LOAD_FILE('MYSQLTEST_VARDIR/mysqld.1/data//master-bin.index'); +SELECT @index; +@index +master-bin.000004 +master-bin.000005 + +# crash_purge_critical_after_update_index +flush logs; +SET SESSION debug="+d,crash_purge_critical_after_update_index"; +purge binary logs TO 'master-bin.000006'; +ERROR HY000: Lost connection to MySQL server during query +SET @index=LOAD_FILE('MYSQLTEST_VARDIR/mysqld.1/data//master-bin.index'); +SELECT @index; +@index +master-bin.000006 +master-bin.000007 + +# crash_create_non_critical_before_update_index +SET SESSION debug="+d,crash_create_non_critical_before_update_index"; +flush logs; +ERROR HY000: Lost connection to MySQL server during query +SET @index=LOAD_FILE('MYSQLTEST_VARDIR/mysqld.1/data//master-bin.index'); +SELECT @index; +@index +master-bin.000006 +master-bin.000007 +master-bin.000008 + +# crash_create_critical_before_update_index +SET SESSION debug="+d,crash_create_critical_before_update_index"; +flush logs; +ERROR HY000: Lost connection to MySQL server during query +SET @index=LOAD_FILE('MYSQLTEST_VARDIR/mysqld.1/data//master-bin.index'); +SELECT @index; +@index +master-bin.000006 +master-bin.000007 +master-bin.000008 +master-bin.000009 + +# crash_create_after_update_index +SET SESSION debug="+d,crash_create_after_update_index"; +flush logs; +ERROR HY000: Lost connection to MySQL server during query +SET @index=LOAD_FILE('MYSQLTEST_VARDIR/mysqld.1/data//master-bin.index'); +SELECT @index; +@index +master-bin.000006 +master-bin.000007 +master-bin.000008 +master-bin.000009 +master-bin.000010 +master-bin.000011 + +# +# This should put the server in unsafe state and stop +# accepting any command. If we inject a fault at this +# point and continue the execution the server crashes. +# +SET @index=LOAD_FILE('MYSQLTEST_VARDIR/mysqld.1/data//master-bin.index'); +SELECT @index; +@index +master-bin.000006 +master-bin.000007 +master-bin.000008 +master-bin.000009 +master-bin.000010 +master-bin.000011 + +# fault_injection_registering_index +SET SESSION debug="+d,fault_injection_registering_index"; +SET GLOBAL binlog_error_action= IGNORE_ERROR; +flush logs; +ERROR HY000: Can't open file: 'master-bin.000012' (errno: 1 - Operation not permitted) +SET @index=LOAD_FILE('MYSQLTEST_VARDIR/mysqld.1/data//master-bin.index'); +SELECT @index; +@index +master-bin.000006 +master-bin.000007 +master-bin.000008 +master-bin.000009 +master-bin.000010 +master-bin.000011 + +# restart +SET @index=LOAD_FILE('MYSQLTEST_VARDIR/mysqld.1/data//master-bin.index'); +SELECT @index; +@index +master-bin.000006 +master-bin.000007 +master-bin.000008 +master-bin.000009 +master-bin.000010 +master-bin.000011 +master-bin.000012 + +# fault_injection_updating_index +SET SESSION debug="+d,fault_injection_updating_index"; +SET GLOBAL binlog_error_action= IGNORE_ERROR; +flush logs; +ERROR HY000: Can't open file: 'master-bin.000013' (errno: 1 - Operation not permitted) +SET @index=LOAD_FILE('MYSQLTEST_VARDIR/mysqld.1/data//master-bin.index'); +SELECT @index; +@index +master-bin.000006 +master-bin.000007 +master-bin.000008 +master-bin.000009 +master-bin.000010 +master-bin.000011 +master-bin.000012 + +# restart +SET @index=LOAD_FILE('MYSQLTEST_VARDIR/mysqld.1/data//master-bin.index'); +SELECT @index; +@index +master-bin.000006 +master-bin.000007 +master-bin.000008 +master-bin.000009 +master-bin.000010 +master-bin.000011 +master-bin.000012 +master-bin.000013 + +# Test case6: Set DEBUG POINT before rename index file when +# appending a binlog file name to index file. +show binary logs; +Log_name File_size +master-bin.000006 # +master-bin.000007 # +master-bin.000008 # +master-bin.000009 # +master-bin.000010 # +master-bin.000011 # +master-bin.000012 # +master-bin.000013 # +SET SESSION debug="+d,crash_create_before_rename_index_file"; +flush logs; +ERROR HY000: Lost connection to MySQL server during query +# Restart the master server +# Test if the index file has the correct data, +# i.e. binlog file name is added. +show binary logs; +Log_name File_size +master-bin.000006 # +master-bin.000007 # +master-bin.000008 # +master-bin.000009 # +master-bin.000010 # +master-bin.000011 # +master-bin.000012 # +master-bin.000013 # +master-bin.000014 # +master-bin.000015 # +# Test case7: Set DEBUG POINT after rename index file when +# appending a binlog file name to index file. +SET SESSION debug="+d,crash_create_after_rename_index_file"; +flush logs; +ERROR HY000: Lost connection to MySQL server during query +# Restart the master server +# Test if the index file has the correct data, +# i.e. binlog file name is added. +show binary logs; +Log_name File_size +master-bin.000006 # +master-bin.000007 # +master-bin.000008 # +master-bin.000009 # +master-bin.000010 # +master-bin.000011 # +master-bin.000012 # +master-bin.000013 # +master-bin.000014 # +master-bin.000015 # +master-bin.000016 # +master-bin.000017 # +# Test case8: Set DEBUG POINT after rename index file when +# purging the index file. +show binary logs; +Log_name File_size +master-bin.000006 # +master-bin.000007 # +master-bin.000008 # +master-bin.000009 # +master-bin.000010 # +master-bin.000011 # +master-bin.000012 # +master-bin.000013 # +master-bin.000014 # +master-bin.000015 # +master-bin.000016 # +master-bin.000017 # +SET SESSION debug="+d,crash_create_after_rename_index_file"; +purge binary logs TO 'master-bin.000010'; +ERROR HY000: Lost connection to MySQL server during query +# Restart the master server +# Test if the index file has the correct data, +# i.e. requested binlog file names are removed. +show binary logs; +Log_name File_size +master-bin.000010 # +master-bin.000011 # +master-bin.000012 # +master-bin.000013 # +master-bin.000014 # +master-bin.000015 # +master-bin.000016 # +master-bin.000017 # +master-bin.000018 # +# Test case9: Set DEBUG POINT befor rename index file when +# purging the index file. +show binary logs; +Log_name File_size +master-bin.000010 # +master-bin.000011 # +master-bin.000012 # +master-bin.000013 # +master-bin.000014 # +master-bin.000015 # +master-bin.000016 # +master-bin.000017 # +master-bin.000018 # +SET SESSION debug="+d,crash_create_before_rename_index_file"; +purge binary logs TO 'master-bin.000012'; +ERROR HY000: Lost connection to MySQL server during query +# Restart the master server +# Test if the index file has the correct data, +# i.e. requested binlog file names are removed. +show binary logs; +Log_name File_size +master-bin.000012 # +master-bin.000013 # +master-bin.000014 # +master-bin.000015 # +master-bin.000016 # +master-bin.000017 # +master-bin.000018 # +master-bin.000019 # +# Test case10: Inject a fault to copy part content to the temp file +# when purging the index file. +show binary logs; +Log_name File_size +master-bin.000012 # +master-bin.000013 # +master-bin.000014 # +master-bin.000015 # +master-bin.000016 # +master-bin.000017 # +master-bin.000018 # +master-bin.000019 # +SET SESSION debug="+d,fault_injection_copy_part_file"; +purge binary logs TO 'master-bin.000014'; +ERROR HY000: Lost connection to MySQL server during query +# Restart the master server +# Test the index file is complete, although is not purged successfully. +show binary logs; +Log_name File_size +master-bin.000012 # +master-bin.000013 # +master-bin.000014 # +master-bin.000015 # +master-bin.000016 # +master-bin.000017 # +master-bin.000018 # +master-bin.000019 # +master-bin.000020 # +# Test case11: Bug #20381055SERVER CRASHES IF INDEX FILE IS OPENED BY +SET SESSION debug="d,force_index_file_delete_failure"; +call mtr.add_suppression("Failed to delete the existing index file"); +call mtr.add_suppression("failed to move crash safe index file to index file"); +call mtr.add_suppression("failed to update the index file"); +PURGE BINARY LOGS TO 'master-bin.000014';; +ERROR HY000: I/O error reading log index file +# Test the index file is complete, although is not purged successfully. +# Also this will indicate that binary logging is not disabled. +show binary logs; +Log_name File_size +master-bin.000012 # +master-bin.000013 # +master-bin.000014 # +master-bin.000015 # +master-bin.000016 # +master-bin.000017 # +master-bin.000018 # +master-bin.000019 # +master-bin.000020 # +SET GLOBAL binlog_error_action='IGNORE_ERROR'; +FLUSH LOGS; +ERROR HY000: Can't open file: 'master-bin.000021' (errno: 1 - Operation not permitted) +SHOW BINARY LOGS; +ERROR HY000: You are not using binary logging +# restart +show binary logs; +Log_name File_size +master-bin.000012 # +master-bin.000013 # +master-bin.000014 # +master-bin.000015 # +master-bin.000016 # +master-bin.000017 # +master-bin.000018 # +master-bin.000019 # +master-bin.000020 # +master-bin.000021 # +CREATE TABLE t1(i INT); +SET GLOBAL binlog_error_action='IGNORE_ERROR'; +SET SESSION debug="+d,force_index_file_delete_failure"; +SET SESSION debug="+d,force_rotate"; +INSERT INTO t1 VALUES (12); +ERROR HY000: Can't open file: 'master-bin.000022' (errno: 1 - Operation not permitted) +SHOW BINARY LOGS; +ERROR HY000: You are not using binary logging +# restart +show binary logs; +Log_name File_size +master-bin.000012 # +master-bin.000013 # +master-bin.000014 # +master-bin.000015 # +master-bin.000016 # +master-bin.000017 # +master-bin.000018 # +master-bin.000019 # +master-bin.000020 # +master-bin.000021 # +master-bin.000022 # +DROP TABLE t1; +# Test case11: Ends +SET SESSION debug=""; +SET GLOBAL binlog_error_action= ABORT_SERVER; +RESET MASTER; +End of tests diff --git a/mysql-test/suite/binlog_encryption/r/binlog_write_error.result b/mysql-test/suite/binlog_encryption/r/binlog_write_error.result new file mode 100644 index 000000000000..6f54a168920f --- /dev/null +++ b/mysql-test/suite/binlog_encryption/r/binlog_write_error.result @@ -0,0 +1,79 @@ +CALL mtr.add_suppression("The content of the statement cache is corrupted " + "while writing a rollback record of the transaction " + "to the binary log. An incident event has been " + "written to the binary log which will stop the " + "slaves."); +# +# Initialization +# +DROP TABLE IF EXISTS t1, t2; +DROP FUNCTION IF EXISTS f1; +DROP FUNCTION IF EXISTS f2; +DROP PROCEDURE IF EXISTS p1; +DROP PROCEDURE IF EXISTS p2; +DROP TRIGGER IF EXISTS tr1; +DROP TRIGGER IF EXISTS tr2; +DROP VIEW IF EXISTS v1, v2; +# +# Test injecting binlog write error when executing queries +# +CREATE TABLE t1 (a INT); +CREATE TABLE t1 (a INT); +ERROR HY000: Error writing file 'master-bin' ((errno: #) +INSERT INTO t1 VALUES (1),(2),(3); +INSERT INTO t1 VALUES (4),(5),(6); +INSERT INTO t1 VALUES (4),(5),(6); +ERROR HY000: Error writing file 'master-bin' ((errno: #) +UPDATE t1 set a=a+1; +UPDATE t1 set a=a+1; +ERROR HY000: Error writing file 'master-bin' ((errno: #) +DELETE FROM t1; +DELETE FROM t1; +ERROR HY000: Error writing file 'master-bin' ((errno: #) +CREATE TRIGGER tr1 AFTER INSERT ON t1 FOR EACH ROW INSERT INTO t1 VALUES (new.a + 100); +CREATE TRIGGER tr1 AFTER INSERT ON t1 FOR EACH ROW INSERT INTO t1 VALUES (new.a + 100); +ERROR HY000: Error writing file 'master-bin' ((errno: #) +DROP TRIGGER tr1; +DROP TRIGGER tr1; +ERROR HY000: Error writing file 'master-bin' ((errno: #) +ALTER TABLE t1 ADD (b INT); +ALTER TABLE t1 ADD (b INT); +ERROR HY000: Error writing file 'master-bin' ((errno: #) +CREATE VIEW v1 AS SELECT a FROM t1; +CREATE VIEW v1 AS SELECT a FROM t1; +ERROR HY000: Error writing file 'master-bin' ((errno: #) +DROP VIEW v1; +DROP VIEW v1; +ERROR HY000: Error writing file 'master-bin' ((errno: #) +CREATE PROCEDURE p1(OUT rows INT) SELECT count(*) INTO rows FROM t1; +CREATE PROCEDURE p1(OUT rows INT) SELECT count(*) INTO rows FROM t1; +ERROR HY000: Error writing file 'master-bin' ((errno: #) +DROP PROCEDURE p1; +DROP PROCEDURE p1; +ERROR HY000: Error writing file 'master-bin' ((errno: #) +DROP TABLE t1; +DROP TABLE t1; +ERROR HY000: Error writing file 'master-bin' ((errno: #) +CREATE FUNCTION f1() RETURNS INT return 1; +CREATE FUNCTION f1() RETURNS INT return 1; +ERROR HY000: Error writing file 'master-bin' ((errno: #) +DROP FUNCTION f1; +DROP FUNCTION f1; +ERROR HY000: Error writing file 'master-bin' ((errno: #) +CREATE USER user1; +CREATE USER user1; +ERROR HY000: Error writing file 'master-bin' ((errno: #) +REVOKE ALL PRIVILEGES, GRANT OPTION FROM user1; +REVOKE ALL PRIVILEGES, GRANT OPTION FROM user1; +ERROR HY000: Error writing file 'master-bin' ((errno: #) +DROP USER user1; +DROP USER user1; +ERROR HY000: Error writing file 'master-bin' ((errno: #) +# +# Cleanup +# +DROP TABLE IF EXISTS t1, t2; +DROP FUNCTION IF EXISTS f1; +DROP PROCEDURE IF EXISTS p1; +DROP TRIGGER IF EXISTS tr1; +DROP VIEW IF EXISTS v1, v2; diff --git a/mysql-test/suite/binlog_encryption/r/encryption_init_error.result b/mysql-test/suite/binlog_encryption/r/encryption_init_error.result new file mode 100644 index 000000000000..103c46c61a3d --- /dev/null +++ b/mysql-test/suite/binlog_encryption/r/encryption_init_error.result @@ -0,0 +1,13 @@ +call mtr.add_suppression("Failed to fetch percona_binlog key from keyring and thus failed to initialize binlog encryption."); +call mtr.add_suppression("Could not use ./master-bin.000002 for logging"); +call mtr.add_suppression("Could not open ./master-bin.000002 for logging"); +SET debug="+d,binlog_encryption_error_on_key_fetch"; +SELECT 1; +1 +1 +SET GLOBAL binlog_error_action= IGNORE_ERROR; +FLUSH LOGS; +ERROR HY000: Can't open file: './master-bin.000002' (errno: 1 - Operation not permitted) +SET debug="-d,binlog_encryption_error_on_key_fetch"; +SET GLOBAL binlog_error_action= ABORT_SERVER; +# restart diff --git a/mysql-test/suite/binlog_encryption/r/mysqlbinlog.result b/mysql-test/suite/binlog_encryption/r/mysqlbinlog.result new file mode 100644 index 000000000000..71758f7d6e71 --- /dev/null +++ b/mysql-test/suite/binlog_encryption/r/mysqlbinlog.result @@ -0,0 +1,6 @@ +RESET MASTER; +CREATE TABLE t1 (a INT); +INSERT INTO t1 VALUES (1),(2),(3); +REPLACE INTO t1 VALUES (4); +DROP TABLE t1; +FLUSH LOGS; diff --git a/mysql-test/suite/binlog_encryption/rpl_1slave_base.cnf b/mysql-test/suite/binlog_encryption/rpl_1slave_base.cnf new file mode 100644 index 000000000000..c9897f3d4946 --- /dev/null +++ b/mysql-test/suite/binlog_encryption/rpl_1slave_base.cnf @@ -0,0 +1,48 @@ +# Use default setting for mysqld processes +!include include/default_mysqld.cnf +!include include/default_client.cnf + +[mysqld.1] + +# Run the master.sh script before starting this process +#!run-master-sh + +log-bin= master-bin + +[mysqld.2] +# Run the slave.sh script before starting this process +#!run-slave-sh + +# Append -slave.opt file to the list of argument used when +# starting the mysqld +#!use-slave-opt + +log-bin= slave-bin +relay-log= slave-relay-bin + +log-slave-updates +master-retry-count= 10 + +# Values reported by slave when it connect to master +# and shows up in SHOW SLAVE STATUS; +report-host= 127.0.0.1 +report-port= @mysqld.2.port +report-user= root + +skip-slave-start + +# Directory where slaves find the dumps generated by "load data" +# on the server. The path need to have constant length otherwise +# test results will vary, thus a relative path is used. +slave-load-tmpdir= ../../tmp + + +[ENV] +MASTER_MYPORT= @mysqld.1.port +MASTER_MYSOCK= @mysqld.1.socket +MASTER_X_MYSOCK= @mysqld.1.loose-mysqlx-socket + +SLAVE_MYPORT= @mysqld.2.port +SLAVE_MYSOCK= @mysqld.2.socket +SLAVE_X_MYSOCK= @mysqld.2.loose-mysqlx-socket + diff --git a/mysql-test/suite/binlog_encryption/t/binlog_incident-master.opt b/mysql-test/suite/binlog_encryption/t/binlog_incident-master.opt new file mode 100644 index 000000000000..912801debc40 --- /dev/null +++ b/mysql-test/suite/binlog_encryption/t/binlog_incident-master.opt @@ -0,0 +1 @@ +--loose-debug=+d,incident_database_resync_on_replace diff --git a/mysql-test/suite/binlog_encryption/t/binlog_incident.test b/mysql-test/suite/binlog_encryption/t/binlog_incident.test new file mode 100644 index 000000000000..be44d2ddfec9 --- /dev/null +++ b/mysql-test/suite/binlog_encryption/t/binlog_incident.test @@ -0,0 +1,2 @@ +--let $use_remote_mysqlbinlog= 1 +--source suite/binlog/t/binlog_incident.test diff --git a/mysql-test/suite/binlog_encryption/t/binlog_index-master.opt b/mysql-test/suite/binlog_encryption/t/binlog_index-master.opt new file mode 100644 index 000000000000..cef79bc8585a --- /dev/null +++ b/mysql-test/suite/binlog_encryption/t/binlog_index-master.opt @@ -0,0 +1 @@ +--force-restart diff --git a/mysql-test/suite/binlog_encryption/t/binlog_index.test b/mysql-test/suite/binlog_encryption/t/binlog_index.test new file mode 100644 index 000000000000..a709bbffd53c --- /dev/null +++ b/mysql-test/suite/binlog_encryption/t/binlog_index.test @@ -0,0 +1 @@ +--source suite/binlog/t/binlog_index.test diff --git a/mysql-test/suite/binlog_encryption/t/binlog_write_error.test b/mysql-test/suite/binlog_encryption/t/binlog_write_error.test new file mode 100644 index 000000000000..8add24da984d --- /dev/null +++ b/mysql-test/suite/binlog_encryption/t/binlog_write_error.test @@ -0,0 +1 @@ +--source suite/binlog/t/binlog_write_error.test diff --git a/mysql-test/suite/binlog_encryption/t/binlog_xa_recover-master.opt b/mysql-test/suite/binlog_encryption/t/binlog_xa_recover-master.opt new file mode 100644 index 000000000000..3c44f9fad10a --- /dev/null +++ b/mysql-test/suite/binlog_encryption/t/binlog_xa_recover-master.opt @@ -0,0 +1 @@ +--skip-stack-trace --skip-core-file --loose-debug-dbug=+d,xa_recover_expect_master_bin_000004 diff --git a/mysql-test/suite/binlog_encryption/t/encryption_init_error.test b/mysql-test/suite/binlog_encryption/t/encryption_init_error.test new file mode 100644 index 000000000000..74f256062997 --- /dev/null +++ b/mysql-test/suite/binlog_encryption/t/encryption_init_error.test @@ -0,0 +1,20 @@ +source include/have_log_bin.inc; +source include/have_debug.inc; + +call mtr.add_suppression("Failed to fetch percona_binlog key from keyring and thus failed to initialize binlog encryption."); +call mtr.add_suppression("Could not use ./master-bin.000002 for logging"); +call mtr.add_suppression("Could not open ./master-bin.000002 for logging"); + +let $saved_binlog_error_action=`SELECT @@GLOBAL.binlog_error_action`; + +SET debug="+d,binlog_encryption_error_on_key_fetch"; +SELECT 1; +SET GLOBAL binlog_error_action= IGNORE_ERROR; +--error ER_CANT_OPEN_FILE +FLUSH LOGS; + +SET debug="-d,binlog_encryption_error_on_key_fetch"; +eval SET GLOBAL binlog_error_action= $saved_binlog_error_action; + +# binlog was turned off, thus need to restart server to switch it back on +--source include/restart_mysqld.inc diff --git a/mysql-test/suite/binlog_encryption/t/mysqlbinlog.test b/mysql-test/suite/binlog_encryption/t/mysqlbinlog.test new file mode 100644 index 000000000000..de1b20903f84 --- /dev/null +++ b/mysql-test/suite/binlog_encryption/t/mysqlbinlog.test @@ -0,0 +1,21 @@ +source include/have_log_bin.inc; +source include/have_debug.inc; + +let datadir=`select @@datadir`; +RESET MASTER; +CREATE TABLE t1 (a INT); +INSERT INTO t1 VALUES (1),(2),(3); +REPLACE INTO t1 VALUES (4); +DROP TABLE t1; +FLUSH LOGS; + +let filename= master-bin.000001; +let local=$datadir/$filename; +let remote=--read-from-remote-server --protocol=tcp --host=127.0.0.1 --port=$MASTER_MYPORT -uroot $filename; +let outfile=$MYSQLTEST_VARDIR/tmp/binlog_enc.sql; +--error 1 +exec $MYSQL_BINLOG $local > $outfile; +exec $MYSQL_BINLOG $local --force-read >> $outfile; +exec $MYSQL_BINLOG $local --force-read --offset=3 >> $outfile; +exec $MYSQL_BINLOG $remote >> $outfile; +remove_file $outfile; diff --git a/mysql-test/suite/perfschema/r/show_sanity.result b/mysql-test/suite/perfschema/r/show_sanity.result index cf6d59ff6096..60244360e1c0 100644 --- a/mysql-test/suite/perfschema/r/show_sanity.result +++ b/mysql-test/suite/perfschema/r/show_sanity.result @@ -407,6 +407,7 @@ where show_mode = "JUNK: GLOBAL-ONLY" and source = "I_S.SESSION_VARIABLES") order by show_mode, source, variable_name; SHOW_MODE SOURCE VARIABLE_NAME +5.6 I_S.SESSION_VARIABLES ENCRYPT_BINLOG 5.6 I_S.SESSION_VARIABLES GTID_EXECUTED 5.6 I_S.SESSION_VARIABLES INNODB_COMPRESSED_COLUMNS_THRESHOLD 5.6 I_S.SESSION_VARIABLES INNODB_COMPRESSED_COLUMNS_ZIP_LEVEL @@ -435,6 +436,7 @@ where show_mode = "JUNK: GLOBAL-ONLY" and source = "I_S.SESSION_VARIABLES") order by show_mode, source, variable_name; SHOW_MODE SOURCE VARIABLE_NAME +5.6 I_S.SESSION_VARIABLES ENCRYPT_BINLOG 5.6 I_S.SESSION_VARIABLES GTID_EXECUTED 5.6 I_S.SESSION_VARIABLES INNODB_COMPRESSED_COLUMNS_THRESHOLD 5.6 I_S.SESSION_VARIABLES INNODB_COMPRESSED_COLUMNS_ZIP_LEVEL diff --git a/mysql-test/suite/rpl/t/rpl_gtid_events.test b/mysql-test/suite/rpl/t/rpl_gtid_events.test index 1555d675362d..34e35105a324 100644 --- a/mysql-test/suite/rpl/t/rpl_gtid_events.test +++ b/mysql-test/suite/rpl/t/rpl_gtid_events.test @@ -194,6 +194,13 @@ CREATE TEMPORARY TABLE binlogs --let $table= binlogs --source include/rpl_read_binlog_index_into_table.inc +--let $encrypt_binlog= `SELECT @@GLOBAL.ENCRYPT_BINLOG` + +--let $event_sequence= Format_desc # Previous_gtids(.|#)* +if ($encrypt_binlog) +{ + --let $event_sequence= Format_desc # Start_encryption # Previous_gtids(.|#)* +} # Verify that each binlog contains the events. --let $count= `SELECT COUNT(*) FROM binlogs` --let $i= 0 @@ -201,7 +208,6 @@ while ($i < $count) { --let $binlog_file= `SELECT filename FROM binlogs LIMIT $i, 1` --echo $binlog_file - --let $event_sequence= Format_desc # Previous_gtids(.|#)* --source include/assert_binlog_events.inc --inc $i } @@ -228,7 +234,6 @@ CREATE TEMPORARY TABLE relay_logs while ($i < $count) { --let $binlog_file= `SELECT filename FROM relay_logs LIMIT $i, 1` - --let $event_sequence= Format_desc # Previous_gtids(.|#)* --source include/assert_binlog_events.inc --inc $i diff --git a/mysql-test/suite/rpl/t/rpl_mts_logical_clock_wrong_start_pos.test b/mysql-test/suite/rpl/t/rpl_mts_logical_clock_wrong_start_pos.test index e489e04b265f..a337bc7052de 100644 --- a/mysql-test/suite/rpl/t/rpl_mts_logical_clock_wrong_start_pos.test +++ b/mysql-test/suite/rpl/t/rpl_mts_logical_clock_wrong_start_pos.test @@ -41,8 +41,14 @@ SET GLOBAL slave_transaction_retries = 0; CREATE TABLE t1(a INT); INSERT INTO t1 SET a=1; --let $binlog_file= query_get_value("SHOW MASTER STATUS", File, 1) ---let $logged_query= query_get_value(SHOW BINLOG EVENTS IN "$binlog_file" FROM 4, Info, 7) ---let $query_pos= query_get_value(SHOW BINLOG EVENTS IN "$binlog_file" FROM 4, End_log_pos,7) +--let $show_events_from_row= 7 +if ($skip_start_encryption_event) +{ + --let $show_events_from_row= 8 +} + +--let $logged_query= query_get_value(SHOW BINLOG EVENTS IN "$binlog_file" FROM 4, Info, $show_events_from_row) +--let $query_pos= query_get_value(SHOW BINLOG EVENTS IN "$binlog_file" FROM 4, End_log_pos, $show_events_from_row) --source include/sync_slave_sql_with_master.inc --source include/stop_slave.inc diff --git a/mysql-test/suite/rpl/t/rpl_sbm_previous_gtid_event.test b/mysql-test/suite/rpl/t/rpl_sbm_previous_gtid_event.test index 359fa7c98f4d..35bb1cf9d895 100644 --- a/mysql-test/suite/rpl/t/rpl_sbm_previous_gtid_event.test +++ b/mysql-test/suite/rpl/t/rpl_sbm_previous_gtid_event.test @@ -15,6 +15,12 @@ --source include/master-slave.inc --source include/have_binlog_format_statement.inc +if (!$idle) +{ + let $idle=180; +} + +--let $encrypt_binlog= `SELECT @@GLOBAL.ENCRYPT_BINLOG` # Set sync debug point to calculate sbm exactly after every # previous_gtid_log_event. --connection slave @@ -83,12 +89,12 @@ FLUSH LOGS; # Just to fake that I/O thread started 3 mints ago, # the server changes the I/O thread start time to -# now() - 180 seconds (3 mints ago) instead of now() +# now() - 180 seconds (3 mints ago) or 200 seconds +# when using encryption instead of now() # using debug point 'calculate_sbm_after_previous_gtid_log_event'. # But that 3 mints delay should not be seen when # some one asks for SBM after Previous_gtid_log_event and # this test script try to test that below. ---let $idle=180 --let $i=0 while ($i < 7) @@ -97,8 +103,17 @@ SET DEBUG_SYNC="now wait_for signal.reached"; # Calcualte SBM let $sbm= query_get_value("SHOW SLAVE STATUS", Seconds_Behind_Master, 1); ---let $assert_text= Seconds Behind Master should be less than $idle seconds. ---let $assert_cond= $sbm < $idle + +--let $assert_text= Seconds Behind Master should be less than 180 seconds. +--let $assert_cond= $sbm < 180 + +# In case of encrypted binlog SBM might be slightly higher due to encryption +# overhead +if ($encrypt_binlog) +{ + --let $assert_text= Seconds Behind Master should be less than 200 seconds. + --let $assert_cond= $sbm < 200 +} --source include/assert.inc SET DEBUG_SYNC="now signal signal.done_sbm_calculation"; diff --git a/mysql-test/suite/rpl_encryption/combinations b/mysql-test/suite/rpl_encryption/combinations new file mode 100644 index 000000000000..07042c2cbecd --- /dev/null +++ b/mysql-test/suite/rpl_encryption/combinations @@ -0,0 +1,8 @@ +[row] +binlog-format=row + +[stmt] +binlog-format=statement + +[mix] +binlog-format=mixed diff --git a/mysql-test/suite/rpl_encryption/my.cnf b/mysql-test/suite/rpl_encryption/my.cnf new file mode 100644 index 000000000000..d9d9f63cd145 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/my.cnf @@ -0,0 +1,29 @@ +!include include/default_mysqld.cnf +!include include/default_client.cnf + +!include rpl_1slave_base.cnf + +[mysqld.1] +encrypt-binlog=1 +master-verify-checksum=1 +log-bin=master-bin +plugin_dir=@env.KEYRING_PLUGIN_DIR +early-plugin-load=@env.KEYRING_PLUGIN +keyring_file_data=../../tmp/keyring1 + +[mysqld.2] +log-slave-updates +log-bin=slave-bin +relay-log=slave-relay-bin + +[ENV] + +# We will adopt tests with master-slave setup as well as rpl_init setup, +# so need both sets of variables +MASTER_MYPORT= @mysqld.1.port +SERVER_MYPORT_1= @mysqld.1.port +SERVER_MYSOCK_1= @mysqld.1.socket + +SLAVE_MYPORT= @mysqld.2.port +SERVER_MYPORT_2= @mysqld.2.port +SERVER_MYSOCK_2= @mysqld.2.socket diff --git a/mysql-test/suite/rpl_encryption/r/encrypted_master.result b/mysql-test/suite/rpl_encryption/r/encrypted_master.result new file mode 100644 index 000000000000..82e648d6d368 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/encrypted_master.result @@ -0,0 +1,481 @@ +################# +# Initialization +################# +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +connection server_2; +include/stop_slave_sql.inc +connection server_1; +SET @binlog_checksum.save= @@global.binlog_checksum; +SET @master_verify_checksum.save= @@global.master_verify_checksum; +SET @binlog_row_image.save= @@global.binlog_row_image; +#################################################### +# Test 1: simple binlog, no checksum +#################################################### +connection server_1; +SET GLOBAL binlog_checksum= NONE; +SET GLOBAL master_verify_checksum= 0; +call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT"); +CREATE DATABASE database_name_to_encrypt; +USE database_name_to_encrypt; +CREATE USER user_name_to_encrypt; +GRANT ALL ON database_name_to_encrypt.* TO user_name_to_encrypt; +SET PASSWORD FOR user_name_to_encrypt = PASSWORD('password_to_encrypt'); +Warnings: +Warning 1287 'SET PASSWORD FOR = PASSWORD('')' is deprecated and will be removed in a future release. Please use SET PASSWORD FOR = '' instead +CREATE TABLE innodb_table_name_to_encrypt ( +int_column_name_to_encrypt INT PRIMARY KEY, +timestamp_column_name_to_encrypt TIMESTAMP(6) NULL, +blob_column_name_to_encrypt BLOB, +virt_column_name_to_encrypt INT AS (int_column_name_to_encrypt % 10) VIRTUAL, +pers_column_name_to_encrypt INT AS (int_column_name_to_encrypt) STORED, +varchar_column_name_to_encrypt VARCHAR(1024), +INDEX `index_name_to_encrypt`(`timestamp_column_name_to_encrypt`) +) ENGINE=InnoDB +PARTITION BY RANGE (int_column_name_to_encrypt) +SUBPARTITION BY KEY (int_column_name_to_encrypt) +SUBPARTITIONS 2 ( +PARTITION partition0_name_to_encrypt VALUES LESS THAN (100), +PARTITION partition1_name_to_encrypt VALUES LESS THAN (MAXVALUE) +) +; +CREATE TABLE myisam_table_name_to_encrypt ( +int_column_name_to_encrypt INT AUTO_INCREMENT PRIMARY KEY, +char_column_name_to_encrypt VARCHAR(255), +datetime_column_name_to_encrypt DATETIME, +text_column_name_to_encrypt TEXT +) ENGINE=MyISAM; +CREATE TABLE innodb_table_name_to_encrypt_2 ( +int_column_name_to_encrypt INT AUTO_INCREMENT PRIMARY KEY, +varchar_column_name_to_encrypt VARCHAR(1024), +enum_column_name_to_encrypt ENUM( +'enum_value1_to_encrypt', +'enum_value2_to_encrypt' + ), +timestamp_column_name_to_encrypt TIMESTAMP(6) NULL, +blob_column_name_to_encrypt BLOB +); +CREATE TRIGGER trigger_name_to_encrypt +AFTER INSERT ON myisam_table_name_to_encrypt FOR EACH ROW +INSERT INTO innodb_table_name_to_encrypt_2 (varchar_column_name_to_encrypt) +VALUES (NEW.char_column_name_to_encrypt); +CREATE DEFINER=user_name_to_encrypt VIEW view_name_to_encrypt +AS SELECT * FROM innodb_table_name_to_encrypt; +CREATE FUNCTION func_name_to_encrypt (func_parameter_to_encrypt INT) +RETURNS VARCHAR(64) +RETURN 'func_result_to_encrypt'; +CREATE PROCEDURE proc_name_to_encrypt ( +IN proc_in_parameter_to_encrypt CHAR(32), +OUT proc_out_parameter_to_encrypt INT +) +BEGIN +DECLARE procvar_name_to_encrypt CHAR(64) DEFAULT 'procvar_val_to_encrypt'; +DECLARE cursor_name_to_encrypt CURSOR FOR +SELECT virt_column_name_to_encrypt FROM innodb_table_name_to_encrypt; +DECLARE EXIT HANDLER FOR NOT FOUND +BEGIN +SET @stmt_var_to_encrypt = CONCAT( +"SELECT + IF (RAND()>0.5,'enum_value2_to_encrypt','enum_value1_to_encrypt') + FROM innodb_table_name_to_encrypt + INTO OUTFILE '", proc_in_parameter_to_encrypt, "'"); +PREPARE stmt_to_encrypt FROM @stmt_var_to_encrypt; +EXECUTE stmt_to_encrypt; +DEALLOCATE PREPARE stmt_to_encrypt; +END; +OPEN cursor_name_to_encrypt; +proc_label_to_encrypt: LOOP +FETCH cursor_name_to_encrypt INTO procvar_name_to_encrypt; +END LOOP; +CLOSE cursor_name_to_encrypt; +END $$ +CREATE SERVER server_name_to_encrypt +FOREIGN DATA WRAPPER mysql +OPTIONS (HOST 'host_name_to_encrypt'); +connect con1,localhost,user_name_to_encrypt,password_to_encrypt,database_name_to_encrypt; +CREATE TEMPORARY TABLE tmp_table_name_to_encrypt ( +float_column_name_to_encrypt FLOAT, +binary_column_name_to_encrypt BINARY(64) +); +disconnect con1; +connection server_1; +CREATE INDEX index_name_to_encrypt +ON myisam_table_name_to_encrypt (datetime_column_name_to_encrypt); +ALTER DATABASE database_name_to_encrypt CHARACTER SET utf8; +ALTER TABLE innodb_table_name_to_encrypt +MODIFY timestamp_column_name_to_encrypt TIMESTAMP NOT NULL +DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP +; +ALTER ALGORITHM=MERGE VIEW view_name_to_encrypt +AS SELECT * FROM innodb_table_name_to_encrypt; +RENAME TABLE innodb_table_name_to_encrypt TO new_table_name_to_encrypt; +ALTER TABLE new_table_name_to_encrypt RENAME TO innodb_table_name_to_encrypt; +set @user_var1_to_encrypt= 'dyncol1_val_to_encrypt'; +set @user_var2_to_encrypt= 'dyncol2_name_to_encrypt'; +INSERT INTO view_name_to_encrypt (int_column_name_to_encrypt, timestamp_column_name_to_encrypt, blob_column_name_to_encrypt) VALUES +(1, NOW(6), x'ABCABCABCABCABCABCABCABCABCABC'), +(2, NOW(6), x'DEFDEFDEFDEFDEFDEFDEFDEFDEFDEF') +; +CREATE PROCEDURE init_table() +BEGIN +DECLARE counter_name_to_encrypt INT DEFAULT 0; +select @id:=max(int_column_name_to_encrypt) from view_name_to_encrypt; +START TRANSACTION; +WHILE counter_name_to_encrypt<12 DO +INSERT INTO innodb_table_name_to_encrypt (int_column_name_to_encrypt, timestamp_column_name_to_encrypt, blob_column_name_to_encrypt) +SELECT @id := @id + 1, NOW(6), blob_column_name_to_encrypt +FROM innodb_table_name_to_encrypt +ORDER BY int_column_name_to_encrypt; +SET counter_name_to_encrypt = counter_name_to_encrypt+1; +END WHILE; +COMMIT; +END +$$ +CALL init_table(); +@id:=max(int_column_name_to_encrypt) +2 +INSERT INTO myisam_table_name_to_encrypt +SELECT NULL, 'char_literal_to_encrypt', NULL, 'text_to_encrypt'; +INSERT INTO myisam_table_name_to_encrypt (char_column_name_to_encrypt) +SELECT char_column_name_to_encrypt FROM myisam_table_name_to_encrypt; +INSERT INTO myisam_table_name_to_encrypt (char_column_name_to_encrypt) +SELECT char_column_name_to_encrypt FROM myisam_table_name_to_encrypt; +INSERT INTO myisam_table_name_to_encrypt (char_column_name_to_encrypt) +SELECT char_column_name_to_encrypt FROM myisam_table_name_to_encrypt; +CALL proc_name_to_encrypt('file_name_to_encrypt',@useless_var_to_encrypt); +UPDATE view_name_to_encrypt SET blob_column_name_to_encrypt = +func_name_to_encrypt(0) +; +ANALYZE TABLE myisam_table_name_to_encrypt; +CHECK TABLE innodb_table_name_to_encrypt_2; +CHECKSUM TABLE innodb_table_name_to_encrypt, myisam_table_name_to_encrypt; +RENAME USER user_name_to_encrypt to new_user_name_to_encrypt; +REVOKE ALL PRIVILEGES, GRANT OPTION FROM new_user_name_to_encrypt; +DROP DATABASE database_name_to_encrypt; +DROP USER new_user_name_to_encrypt; +DROP SERVER server_name_to_encrypt; +#################################################### +# Test 2: binlog with checksum +#################################################### +connection server_1; +SET GLOBAL binlog_checksum= CRC32; +SET GLOBAL master_verify_checksum= 1; +call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT"); +CREATE DATABASE database_name_to_encrypt; +USE database_name_to_encrypt; +CREATE USER user_name_to_encrypt; +GRANT ALL ON database_name_to_encrypt.* TO user_name_to_encrypt; +SET PASSWORD FOR user_name_to_encrypt = PASSWORD('password_to_encrypt'); +Warnings: +Warning 1287 'SET PASSWORD FOR = PASSWORD('')' is deprecated and will be removed in a future release. Please use SET PASSWORD FOR = '' instead +CREATE TABLE innodb_table_name_to_encrypt ( +int_column_name_to_encrypt INT PRIMARY KEY, +timestamp_column_name_to_encrypt TIMESTAMP(6) NULL, +blob_column_name_to_encrypt BLOB, +virt_column_name_to_encrypt INT AS (int_column_name_to_encrypt % 10) VIRTUAL, +pers_column_name_to_encrypt INT AS (int_column_name_to_encrypt) STORED, +varchar_column_name_to_encrypt VARCHAR(1024), +INDEX `index_name_to_encrypt`(`timestamp_column_name_to_encrypt`) +) ENGINE=InnoDB +PARTITION BY RANGE (int_column_name_to_encrypt) +SUBPARTITION BY KEY (int_column_name_to_encrypt) +SUBPARTITIONS 2 ( +PARTITION partition0_name_to_encrypt VALUES LESS THAN (100), +PARTITION partition1_name_to_encrypt VALUES LESS THAN (MAXVALUE) +) +; +CREATE TABLE myisam_table_name_to_encrypt ( +int_column_name_to_encrypt INT AUTO_INCREMENT PRIMARY KEY, +char_column_name_to_encrypt VARCHAR(255), +datetime_column_name_to_encrypt DATETIME, +text_column_name_to_encrypt TEXT +) ENGINE=MyISAM; +CREATE TABLE innodb_table_name_to_encrypt_2 ( +int_column_name_to_encrypt INT AUTO_INCREMENT PRIMARY KEY, +varchar_column_name_to_encrypt VARCHAR(1024), +enum_column_name_to_encrypt ENUM( +'enum_value1_to_encrypt', +'enum_value2_to_encrypt' + ), +timestamp_column_name_to_encrypt TIMESTAMP(6) NULL, +blob_column_name_to_encrypt BLOB +); +CREATE TRIGGER trigger_name_to_encrypt +AFTER INSERT ON myisam_table_name_to_encrypt FOR EACH ROW +INSERT INTO innodb_table_name_to_encrypt_2 (varchar_column_name_to_encrypt) +VALUES (NEW.char_column_name_to_encrypt); +CREATE DEFINER=user_name_to_encrypt VIEW view_name_to_encrypt +AS SELECT * FROM innodb_table_name_to_encrypt; +CREATE FUNCTION func_name_to_encrypt (func_parameter_to_encrypt INT) +RETURNS VARCHAR(64) +RETURN 'func_result_to_encrypt'; +CREATE PROCEDURE proc_name_to_encrypt ( +IN proc_in_parameter_to_encrypt CHAR(32), +OUT proc_out_parameter_to_encrypt INT +) +BEGIN +DECLARE procvar_name_to_encrypt CHAR(64) DEFAULT 'procvar_val_to_encrypt'; +DECLARE cursor_name_to_encrypt CURSOR FOR +SELECT virt_column_name_to_encrypt FROM innodb_table_name_to_encrypt; +DECLARE EXIT HANDLER FOR NOT FOUND +BEGIN +SET @stmt_var_to_encrypt = CONCAT( +"SELECT + IF (RAND()>0.5,'enum_value2_to_encrypt','enum_value1_to_encrypt') + FROM innodb_table_name_to_encrypt + INTO OUTFILE '", proc_in_parameter_to_encrypt, "'"); +PREPARE stmt_to_encrypt FROM @stmt_var_to_encrypt; +EXECUTE stmt_to_encrypt; +DEALLOCATE PREPARE stmt_to_encrypt; +END; +OPEN cursor_name_to_encrypt; +proc_label_to_encrypt: LOOP +FETCH cursor_name_to_encrypt INTO procvar_name_to_encrypt; +END LOOP; +CLOSE cursor_name_to_encrypt; +END $$ +CREATE SERVER server_name_to_encrypt +FOREIGN DATA WRAPPER mysql +OPTIONS (HOST 'host_name_to_encrypt'); +connect con1,localhost,user_name_to_encrypt,password_to_encrypt,database_name_to_encrypt; +CREATE TEMPORARY TABLE tmp_table_name_to_encrypt ( +float_column_name_to_encrypt FLOAT, +binary_column_name_to_encrypt BINARY(64) +); +disconnect con1; +connection server_1; +CREATE INDEX index_name_to_encrypt +ON myisam_table_name_to_encrypt (datetime_column_name_to_encrypt); +ALTER DATABASE database_name_to_encrypt CHARACTER SET utf8; +ALTER TABLE innodb_table_name_to_encrypt +MODIFY timestamp_column_name_to_encrypt TIMESTAMP NOT NULL +DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP +; +ALTER ALGORITHM=MERGE VIEW view_name_to_encrypt +AS SELECT * FROM innodb_table_name_to_encrypt; +RENAME TABLE innodb_table_name_to_encrypt TO new_table_name_to_encrypt; +ALTER TABLE new_table_name_to_encrypt RENAME TO innodb_table_name_to_encrypt; +set @user_var1_to_encrypt= 'dyncol1_val_to_encrypt'; +set @user_var2_to_encrypt= 'dyncol2_name_to_encrypt'; +INSERT INTO view_name_to_encrypt (int_column_name_to_encrypt, timestamp_column_name_to_encrypt, blob_column_name_to_encrypt) VALUES +(1, NOW(6), x'ABCABCABCABCABCABCABCABCABCABC'), +(2, NOW(6), x'DEFDEFDEFDEFDEFDEFDEFDEFDEFDEF') +; +CREATE PROCEDURE init_table() +BEGIN +DECLARE counter_name_to_encrypt INT DEFAULT 0; +select @id:=max(int_column_name_to_encrypt) from view_name_to_encrypt; +START TRANSACTION; +WHILE counter_name_to_encrypt<12 DO +INSERT INTO innodb_table_name_to_encrypt (int_column_name_to_encrypt, timestamp_column_name_to_encrypt, blob_column_name_to_encrypt) +SELECT @id := @id + 1, NOW(6), blob_column_name_to_encrypt +FROM innodb_table_name_to_encrypt +ORDER BY int_column_name_to_encrypt; +SET counter_name_to_encrypt = counter_name_to_encrypt+1; +END WHILE; +COMMIT; +END +$$ +CALL init_table(); +@id:=max(int_column_name_to_encrypt) +2 +INSERT INTO myisam_table_name_to_encrypt +SELECT NULL, 'char_literal_to_encrypt', NULL, 'text_to_encrypt'; +INSERT INTO myisam_table_name_to_encrypt (char_column_name_to_encrypt) +SELECT char_column_name_to_encrypt FROM myisam_table_name_to_encrypt; +INSERT INTO myisam_table_name_to_encrypt (char_column_name_to_encrypt) +SELECT char_column_name_to_encrypt FROM myisam_table_name_to_encrypt; +INSERT INTO myisam_table_name_to_encrypt (char_column_name_to_encrypt) +SELECT char_column_name_to_encrypt FROM myisam_table_name_to_encrypt; +CALL proc_name_to_encrypt('file_name_to_encrypt',@useless_var_to_encrypt); +UPDATE view_name_to_encrypt SET blob_column_name_to_encrypt = +func_name_to_encrypt(0) +; +ANALYZE TABLE myisam_table_name_to_encrypt; +CHECK TABLE innodb_table_name_to_encrypt_2; +CHECKSUM TABLE innodb_table_name_to_encrypt, myisam_table_name_to_encrypt; +RENAME USER user_name_to_encrypt to new_user_name_to_encrypt; +REVOKE ALL PRIVILEGES, GRANT OPTION FROM new_user_name_to_encrypt; +DROP DATABASE database_name_to_encrypt; +DROP USER new_user_name_to_encrypt; +DROP SERVER server_name_to_encrypt; +#################################################### +# Test 3: binlog with binlog_row_image=minimal +#################################################### +connection server_1; +SET GLOBAL binlog_checksum= NONE; +SET GLOBAL master_verify_checksum= 0; +SET GLOBAL binlog_row_image= MINIMAL; +SET binlog_row_image= MINIMAL; +call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT"); +CREATE DATABASE database_name_to_encrypt; +USE database_name_to_encrypt; +CREATE USER user_name_to_encrypt; +GRANT ALL ON database_name_to_encrypt.* TO user_name_to_encrypt; +SET PASSWORD FOR user_name_to_encrypt = PASSWORD('password_to_encrypt'); +Warnings: +Warning 1287 'SET PASSWORD FOR = PASSWORD('')' is deprecated and will be removed in a future release. Please use SET PASSWORD FOR = '' instead +CREATE TABLE innodb_table_name_to_encrypt ( +int_column_name_to_encrypt INT PRIMARY KEY, +timestamp_column_name_to_encrypt TIMESTAMP(6) NULL, +blob_column_name_to_encrypt BLOB, +virt_column_name_to_encrypt INT AS (int_column_name_to_encrypt % 10) VIRTUAL, +pers_column_name_to_encrypt INT AS (int_column_name_to_encrypt) STORED, +varchar_column_name_to_encrypt VARCHAR(1024), +INDEX `index_name_to_encrypt`(`timestamp_column_name_to_encrypt`) +) ENGINE=InnoDB +PARTITION BY RANGE (int_column_name_to_encrypt) +SUBPARTITION BY KEY (int_column_name_to_encrypt) +SUBPARTITIONS 2 ( +PARTITION partition0_name_to_encrypt VALUES LESS THAN (100), +PARTITION partition1_name_to_encrypt VALUES LESS THAN (MAXVALUE) +) +; +CREATE TABLE myisam_table_name_to_encrypt ( +int_column_name_to_encrypt INT AUTO_INCREMENT PRIMARY KEY, +char_column_name_to_encrypt VARCHAR(255), +datetime_column_name_to_encrypt DATETIME, +text_column_name_to_encrypt TEXT +) ENGINE=MyISAM; +CREATE TABLE innodb_table_name_to_encrypt_2 ( +int_column_name_to_encrypt INT AUTO_INCREMENT PRIMARY KEY, +varchar_column_name_to_encrypt VARCHAR(1024), +enum_column_name_to_encrypt ENUM( +'enum_value1_to_encrypt', +'enum_value2_to_encrypt' + ), +timestamp_column_name_to_encrypt TIMESTAMP(6) NULL, +blob_column_name_to_encrypt BLOB +); +CREATE TRIGGER trigger_name_to_encrypt +AFTER INSERT ON myisam_table_name_to_encrypt FOR EACH ROW +INSERT INTO innodb_table_name_to_encrypt_2 (varchar_column_name_to_encrypt) +VALUES (NEW.char_column_name_to_encrypt); +CREATE DEFINER=user_name_to_encrypt VIEW view_name_to_encrypt +AS SELECT * FROM innodb_table_name_to_encrypt; +CREATE FUNCTION func_name_to_encrypt (func_parameter_to_encrypt INT) +RETURNS VARCHAR(64) +RETURN 'func_result_to_encrypt'; +CREATE PROCEDURE proc_name_to_encrypt ( +IN proc_in_parameter_to_encrypt CHAR(32), +OUT proc_out_parameter_to_encrypt INT +) +BEGIN +DECLARE procvar_name_to_encrypt CHAR(64) DEFAULT 'procvar_val_to_encrypt'; +DECLARE cursor_name_to_encrypt CURSOR FOR +SELECT virt_column_name_to_encrypt FROM innodb_table_name_to_encrypt; +DECLARE EXIT HANDLER FOR NOT FOUND +BEGIN +SET @stmt_var_to_encrypt = CONCAT( +"SELECT + IF (RAND()>0.5,'enum_value2_to_encrypt','enum_value1_to_encrypt') + FROM innodb_table_name_to_encrypt + INTO OUTFILE '", proc_in_parameter_to_encrypt, "'"); +PREPARE stmt_to_encrypt FROM @stmt_var_to_encrypt; +EXECUTE stmt_to_encrypt; +DEALLOCATE PREPARE stmt_to_encrypt; +END; +OPEN cursor_name_to_encrypt; +proc_label_to_encrypt: LOOP +FETCH cursor_name_to_encrypt INTO procvar_name_to_encrypt; +END LOOP; +CLOSE cursor_name_to_encrypt; +END $$ +CREATE SERVER server_name_to_encrypt +FOREIGN DATA WRAPPER mysql +OPTIONS (HOST 'host_name_to_encrypt'); +connect con1,localhost,user_name_to_encrypt,password_to_encrypt,database_name_to_encrypt; +CREATE TEMPORARY TABLE tmp_table_name_to_encrypt ( +float_column_name_to_encrypt FLOAT, +binary_column_name_to_encrypt BINARY(64) +); +disconnect con1; +connection server_1; +CREATE INDEX index_name_to_encrypt +ON myisam_table_name_to_encrypt (datetime_column_name_to_encrypt); +ALTER DATABASE database_name_to_encrypt CHARACTER SET utf8; +ALTER TABLE innodb_table_name_to_encrypt +MODIFY timestamp_column_name_to_encrypt TIMESTAMP NOT NULL +DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP +; +ALTER ALGORITHM=MERGE VIEW view_name_to_encrypt +AS SELECT * FROM innodb_table_name_to_encrypt; +RENAME TABLE innodb_table_name_to_encrypt TO new_table_name_to_encrypt; +ALTER TABLE new_table_name_to_encrypt RENAME TO innodb_table_name_to_encrypt; +set @user_var1_to_encrypt= 'dyncol1_val_to_encrypt'; +set @user_var2_to_encrypt= 'dyncol2_name_to_encrypt'; +INSERT INTO view_name_to_encrypt (int_column_name_to_encrypt, timestamp_column_name_to_encrypt, blob_column_name_to_encrypt) VALUES +(1, NOW(6), x'ABCABCABCABCABCABCABCABCABCABC'), +(2, NOW(6), x'DEFDEFDEFDEFDEFDEFDEFDEFDEFDEF') +; +CREATE PROCEDURE init_table() +BEGIN +DECLARE counter_name_to_encrypt INT DEFAULT 0; +select @id:=max(int_column_name_to_encrypt) from view_name_to_encrypt; +START TRANSACTION; +WHILE counter_name_to_encrypt<12 DO +INSERT INTO innodb_table_name_to_encrypt (int_column_name_to_encrypt, timestamp_column_name_to_encrypt, blob_column_name_to_encrypt) +SELECT @id := @id + 1, NOW(6), blob_column_name_to_encrypt +FROM innodb_table_name_to_encrypt +ORDER BY int_column_name_to_encrypt; +SET counter_name_to_encrypt = counter_name_to_encrypt+1; +END WHILE; +COMMIT; +END +$$ +CALL init_table(); +@id:=max(int_column_name_to_encrypt) +2 +INSERT INTO myisam_table_name_to_encrypt +SELECT NULL, 'char_literal_to_encrypt', NULL, 'text_to_encrypt'; +INSERT INTO myisam_table_name_to_encrypt (char_column_name_to_encrypt) +SELECT char_column_name_to_encrypt FROM myisam_table_name_to_encrypt; +INSERT INTO myisam_table_name_to_encrypt (char_column_name_to_encrypt) +SELECT char_column_name_to_encrypt FROM myisam_table_name_to_encrypt; +INSERT INTO myisam_table_name_to_encrypt (char_column_name_to_encrypt) +SELECT char_column_name_to_encrypt FROM myisam_table_name_to_encrypt; +CALL proc_name_to_encrypt('file_name_to_encrypt',@useless_var_to_encrypt); +UPDATE view_name_to_encrypt SET blob_column_name_to_encrypt = +func_name_to_encrypt(0) +; +ANALYZE TABLE myisam_table_name_to_encrypt; +CHECK TABLE innodb_table_name_to_encrypt_2; +CHECKSUM TABLE innodb_table_name_to_encrypt, myisam_table_name_to_encrypt; +RENAME USER user_name_to_encrypt to new_user_name_to_encrypt; +REVOKE ALL PRIVILEGES, GRANT OPTION FROM new_user_name_to_encrypt; +DROP DATABASE database_name_to_encrypt; +DROP USER new_user_name_to_encrypt; +DROP SERVER server_name_to_encrypt; +############################# +# Final checks for the master +############################# +# Here we try to find several plain texts that would appear in not encrypted binlog files. +# The searches should fail as we expect the binlog files to be encrypted. +NOT FOUND /_to_encrypt/ in master-bin.0* +NOT FOUND /COMMIT/ in master-bin.0* +NOT FOUND /TIMESTAMP/ in master-bin.0* +include/save_master_pos.inc +############################# +# Final checks for the slave +############################# +connection server_2; +include/sync_slave_io.inc +FOUND /_to_encrypt/ in slave-relay-bin.0* +FOUND /COMMIT/ in slave-relay-bin.0* +FOUND /TIMESTAMP/ in slave-relay-bin.0* +include/start_slave.inc +include/sync_slave_sql_with_io.inc +FOUND /_to_encrypt/ in slave-bin.0* +FOUND /COMMIT/ in slave-bin.0* +FOUND /TIMESTAMP/ in slave-bin.0* +########## +# Cleanup +########## +connection server_1; +SET GLOBAL binlog_checksum= @binlog_checksum.save; +SET GLOBAL master_verify_checksum= @master_verify_checksum.save; +SET GLOBAL binlog_row_image= @binlog_row_image.save; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/encrypted_master_lost_key.result b/mysql-test/suite/rpl_encryption/r/encrypted_master_lost_key.result new file mode 100644 index 000000000000..414e1f513a9f --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/encrypted_master_lost_key.result @@ -0,0 +1,164 @@ +call mtr.add_suppression('event read from binlog did not pass crc check'); +call mtr.add_suppression('Event crc check failed! Most likely there is event corruption'); +call mtr.add_suppression("Error reading GTIDs from binary log"); +call mtr.add_suppression('Found invalid event in binary log'); +################# +# Initialization +################# +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +call mtr.add_suppression('event read from binlog did not pass crc check'); +##################################################### +# Pre-test 1: Initial key value +##################################################### +CREATE TABLE table1_to_encrypt ( +pk INT AUTO_INCREMENT PRIMARY KEY, +ts TIMESTAMP NULL, +b BLOB +); +INSERT INTO table1_to_encrypt VALUES (NULL,NOW(),'data_to_encrypt'); +INSERT INTO table1_to_encrypt SELECT NULL,NOW(),b FROM table1_to_encrypt; +SET binlog_format=ROW; +INSERT INTO table1_to_encrypt SELECT NULL,NOW(),b FROM table1_to_encrypt; +INSERT INTO table1_to_encrypt SELECT NULL,NOW(),b FROM table1_to_encrypt; +NOT FOUND /table1_to_encrypt/ in master-bin.0* +################################################################ +# Pre-test 2: restart master with a different keys' storage file +################################################################ +UNINSTALL PLUGIN keyring_file; +include/rpl_restart_server.inc [server_number=1] +connection server_1; +connection master; +connection server_1; +connection default; +connection master; +connection master1; +connection server_1; +connection server_1_1; +connection default; +connection master; +connection master1; +connection server_1; +connection server_1_1; +connection server_1; +connection master; +connection master; +CREATE TABLE table2_to_encrypt ( +pk INT AUTO_INCREMENT PRIMARY KEY, +ts TIMESTAMP NULL, +b BLOB +); +INSERT INTO table2_to_encrypt VALUES (NULL,NOW(),'data_to_encrypt'); +INSERT INTO table2_to_encrypt SELECT NULL,NOW(),b FROM table2_to_encrypt; +SET binlog_format=ROW; +INSERT INTO table2_to_encrypt SELECT NULL,NOW(),b FROM table2_to_encrypt; +INSERT INTO table2_to_encrypt SELECT NULL,NOW(),b FROM table2_to_encrypt; +# Make sure that binary logs are encrypted by making sure that plain text +# table name is not present in the binary log +NOT FOUND /table2_to_encrypt/ in master-bin.0* +UNINSTALL PLUGIN keyring_file; +##################################################### +# Pre-test 3: restart master again with the right key +##################################################### +include/rpl_restart_server.inc [server_number=1] +connection server_1; +connection master; +connection server_1; +connection default; +connection master; +connection master1; +connection server_1; +connection server_1_1; +connection default; +connection master; +connection master1; +connection server_1; +connection server_1_1; +connection server_1; +connection master; +connection master; +CREATE TABLE table3_to_encrypt ( +pk INT AUTO_INCREMENT PRIMARY KEY, +ts TIMESTAMP NULL, +b BLOB +); +INSERT INTO table3_to_encrypt VALUES (NULL,NOW(),'data_to_encrypt'); +INSERT INTO table3_to_encrypt SELECT NULL,NOW(),b FROM table3_to_encrypt; +INSERT INTO table3_to_encrypt SELECT NULL,NOW(),b FROM table3_to_encrypt; +FLUSH BINARY LOGS; +INSERT INTO table3_to_encrypt SELECT NULL,NOW(),b FROM table3_to_encrypt; +include/save_master_pos.inc +connection master; +##################################################### +# Test 1: Check that if master has an encrypted +# binary log which it cannot decrypt, it +# still feeds events to the slave, and SQL +# thread produces an expected error upon +# receiving these unreadable events . +# This behavior is confirmed in MDEV-11323 +##################################################### +connection server_2; +START SLAVE SQL_THREAD; +START SLAVE IO_THREAD; +include/wait_for_slave_io_error.inc [errno=1236] +SHOW TABLES; +Tables_in_test +table1_to_encrypt +##################################################### +# Test 2: check that replication works if it starts +# from a good binary log +##################################################### +connection server_2; +include/stop_slave.inc +RESET SLAVE ALL; +DROP DATABASE test; +CREATE DATABASE test; +USE test; +CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=, MASTER_USER='root', MASTER_LOG_FILE='master-bin.000003'; +Warnings: +Warning 3023 CHANGE MASTER TO with a MASTER_LOG_FILE clause but no MASTER_LOG_POS clause may not be safe. The old position value may not be valid for the new binary log file. +Note 1759 Sending passwords in plain text without SSL/TLS is extremely insecure. +Note 1760 Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +include/start_slave.inc +include/sync_slave_sql.inc +connection server_2; +SHOW TABLES; +Tables_in_test +table3_to_encrypt +##################################################### +# Test 3: check that replication works if we purge +# master logs up to the good one +##################################################### +connection server_2; +connection server_1; +PURGE BINARY LOGS TO 'master-bin.000003'; +connection server_2; +include/stop_slave.inc +RESET SLAVE ALL; +DROP DATABASE test; +CREATE DATABASE test; +USE test; +CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=, MASTER_USER='root'; +Warnings: +Note 1759 Sending passwords in plain text without SSL/TLS is extremely insecure. +Note 1760 Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +include/start_slave.inc +include/sync_slave_sql.inc +connection server_2; +SHOW TABLES; +Tables_in_test +table3_to_encrypt +########## +# Cleanup +########## +connection server_2; +# Recreate table_1_to_encrypt and table_2_to_encrypt on slave so the master-slave sync would +# finished OK. +CREATE TABLE table1_to_encrypt LIKE table3_to_encrypt; +CREATE TABLE table2_to_encrypt LIKE table3_to_encrypt; +connection server_1; +DROP TABLE table1_to_encrypt, table2_to_encrypt, table3_to_encrypt; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/encrypted_master_switch_to_unencrypted.result b/mysql-test/suite/rpl_encryption/r/encrypted_master_switch_to_unencrypted.result new file mode 100644 index 000000000000..c5df2c288248 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/encrypted_master_switch_to_unencrypted.result @@ -0,0 +1,134 @@ +################# +# Initialization +################# +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +connection slave; +call mtr.add_suppression("Event crc check failed! Most likely there is event corruption"); +include/stop_slave.inc +##################################################### +# Part 1: unencrypted master +##################################################### +connection master; +call mtr.add_suppression("Got fatal error 1236 from master when reading data from binary log: 'event read from binlog did not pass crc check"); +call mtr.add_suppression("Event crc check failed! Most likely there is event corruption"); +call mtr.add_suppression("Error reading GTIDs from binary log"); +CREATE TABLE table1_no_encryption ( +pk INT AUTO_INCREMENT PRIMARY KEY, +ts TIMESTAMP NULL, +b BLOB +); +INSERT INTO table1_no_encryption VALUES (NULL,NOW(),'data_no_encryption'); +INSERT INTO table1_no_encryption SELECT NULL,NOW(),b FROM table1_no_encryption; +FLUSH BINARY LOGS; +SET binlog_format=ROW; +INSERT INTO table1_no_encryption SELECT NULL,NOW(),b FROM table1_no_encryption; +INSERT INTO table1_no_encryption SELECT NULL,NOW(),b FROM table1_no_encryption; +# Make sure that binary logs are not encrypted +FOUND /table1_no_encryption/ in master-bin.0* +include/save_master_pos.inc +connection master; +##################################################### +# Part 2: restart master, now with binlog encryption +##################################################### +include/rpl_restart_server.inc [server_number=1] +connection server_1; +connection master; +connection server_1; +connection default; +connection master; +connection master1; +connection server_1; +connection server_1_1; +connection default; +connection master; +connection master1; +connection server_1; +connection server_1_1; +connection server_1; +connection master; +connection master; +CREATE TABLE table2_to_encrypt ( +pk INT AUTO_INCREMENT PRIMARY KEY, +ts TIMESTAMP NULL, +b BLOB +); +INSERT INTO table2_to_encrypt VALUES (NULL,NOW(),'data_to_encrypt'); +INSERT INTO table2_to_encrypt SELECT NULL,NOW(),b FROM table2_to_encrypt; +FLUSH BINARY LOGS; +SET binlog_format=ROW; +INSERT INTO table2_to_encrypt SELECT NULL,NOW(),b FROM table2_to_encrypt; +INSERT INTO table2_to_encrypt SELECT NULL,NOW(),b FROM table2_to_encrypt; +# Make sure that binary logs are encrypted +NOT FOUND /table2_to_encrypt/ in master-bin.0* +##################################################### +# Part 3: restart master again without encryption +##################################################### +call mtr.add_suppression("Found invalid Format description event in binary log"); +include/rpl_restart_server.inc [server_number=1] +connection server_1; +connection master; +connection server_1; +connection default; +connection master; +connection master1; +connection server_1; +connection server_1_1; +connection default; +connection master; +connection master1; +connection server_1; +connection server_1_1; +connection server_1; +connection master; +connection master; +CREATE TABLE table3_no_encryption ( +pk INT AUTO_INCREMENT PRIMARY KEY, +ts TIMESTAMP NULL, +b BLOB +); +INSERT INTO table3_no_encryption VALUES (NULL,NOW(),'data_no_encryption'); +INSERT INTO table3_no_encryption SELECT NULL,NOW(),b FROM table3_no_encryption; +INSERT INTO table3_no_encryption SELECT NULL,NOW(),b FROM table3_no_encryption; +##################################################### +# Check: resume replication and check how it goes +##################################################### +connection slave; +start slave; +include/sync_slave_sql.inc +connection slave; +connection master; +include/save_master_pos.inc +connection master; +connection slave; +include/wait_for_slave_io_error.inc [errno=1236] +connection slave; +connection slave; +connection slave; +SHOW TABLES; +Tables_in_test +table1_no_encryption +include/stop_slave.inc +RESET SLAVE; +########## +# Cleanup +########## +connection master; +SELECT COUNT(*) FROM table1_no_encryption; +COUNT(*) +8 +SELECT COUNT(*) FROM table2_to_encrypt; +COUNT(*) +8 +SELECT COUNT(*) FROM table3_no_encryption; +COUNT(*) +4 +DROP TABLE table1_no_encryption, table2_to_encrypt, table3_no_encryption; +RESET MASTER; +connection slave; +include/start_slave.inc +DROP TABLE table1_no_encryption; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/encrypted_master_unload_keyring.result b/mysql-test/suite/rpl_encryption/r/encrypted_master_unload_keyring.result new file mode 100644 index 000000000000..204a85a1fb00 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/encrypted_master_unload_keyring.result @@ -0,0 +1,83 @@ +################# +# Initialization +################# +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +call mtr.add_suppression("Event crc check failed! Most likely there is event corruption"); +include/rpl_restart_server.inc [server_number=1] +##################################################### +# Part 1: encrypted master +##################################################### +call mtr.add_suppression("Event crc check failed! Most likely there is event corruption"); +CREATE TABLE table1_encryption ( +pk INT AUTO_INCREMENT PRIMARY KEY, +ts TIMESTAMP NULL, +b BLOB +); +INSERT INTO table1_encryption VALUES (NULL,NOW(),'data_encryption'); +INSERT INTO table1_encryption SELECT NULL,NOW(),b FROM table1_encryption; +FLUSH BINARY LOGS; +SET binlog_format=ROW; +INSERT INTO table1_encryption SELECT NULL,NOW(),b FROM table1_encryption; +INSERT INTO table1_encryption SELECT NULL,NOW(),b FROM table1_encryption; +NOT FOUND /table1_encryption/ in master-bin.0* +################################################################################# +# Part 2: restart master, without binlog encryption and without keyring plugin +################################################################################# +call mtr.add_suppression("Error reading GTIDs from binary log"); +call mtr.add_suppression("Error initializing decryption while reading GTIDs from binary log"); +include/rpl_restart_server.inc [server_number=1] +# Check that plugin is not installed +SELECT PLUGIN_NAME,PLUGIN_VERSION,PLUGIN_STATUS +FROM INFORMATION_SCHEMA.PLUGINS WHERE plugin_name='keyring_file'; +CREATE TABLE table2_no_encryption ( +pk INT AUTO_INCREMENT PRIMARY KEY, +ts TIMESTAMP NULL, +b BLOB +); +INSERT INTO table2_no_encryption VALUES (NULL,NOW(),'data_to_encrypt'); +INSERT INTO table2_no_encryption SELECT NULL,NOW(),b FROM table2_no_encryption; +FLUSH BINARY LOGS; +SET binlog_format=ROW; +INSERT INTO table2_no_encryption SELECT NULL,NOW(),b FROM table2_no_encryption; +INSERT INTO table2_no_encryption SELECT NULL,NOW(),b FROM table2_no_encryption; +FOUND /table2_no_encryption/ in master-bin.0* +include/assert_grep.inc [Found the expected warning "Error reading GTIDs from binary log: -1" in master's error log.] +include/assert_grep.inc [Found the expected warning "Error initializing decryption while reading GTIDs from binary log" in slave's error log.] +################################################ +# Part 3: restart master again with encryption +################################################ +include/rpl_restart_server.inc [server_number=1] +##################################################### +# Part 4: restart slave with encryption +##################################################### +include/rpl_restart_server.inc [server_number=2] +include/start_slave.inc +include/sync_slave_sql_with_master.inc +################################################################################# +# Part 5: restart slave, without binlog encryption and without keyring plugin +################################################################################# +call mtr.add_suppression("Found invalid Format description event in binary log"); +call mtr.add_suppression("Error reading GTIDs from relaylog"); +call mtr.add_suppression("Error initializing decryption while reading GTIDs from relaylog"); +include/rpl_restart_server.inc [server_number=2] +# Check that plugin is not installed +SELECT PLUGIN_NAME,PLUGIN_VERSION,PLUGIN_STATUS +FROM INFORMATION_SCHEMA.PLUGINS WHERE plugin_name='keyring_file'; +include/assert_grep.inc [Found the expected warning "Error reading GTIDs from relaylog: -1" in slave's error log.] +include/assert_grep.inc [Error initializing decryption while reading GTIDs from relaylog] +################################################################################# +# Part 6: restart slave with keyring plugin +################################################################################# +include/rpl_restart_server.inc [server_number=2] +include/start_slave.inc +include/sync_slave_sql_with_master.inc +########## +# Cleanup +########## +DROP TABLE table1_encryption; +DROP TABLE table2_no_encryption; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/encrypted_slave.result b/mysql-test/suite/rpl_encryption/r/encrypted_slave.result new file mode 100644 index 000000000000..c966c4baff79 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/encrypted_slave.result @@ -0,0 +1,196 @@ +################# +# Initialization +################# +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +connection server_2; +include/stop_slave_sql.inc +################# +# Test flow +################# +connection server_1; +call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT"); +CREATE DATABASE database_name_to_encrypt; +USE database_name_to_encrypt; +CREATE USER user_name_to_encrypt; +GRANT ALL ON database_name_to_encrypt.* TO user_name_to_encrypt; +SET PASSWORD FOR user_name_to_encrypt = PASSWORD('password_to_encrypt'); +Warnings: +Warning 1287 'SET PASSWORD FOR = PASSWORD('')' is deprecated and will be removed in a future release. Please use SET PASSWORD FOR = '' instead +CREATE TABLE innodb_table_name_to_encrypt ( +int_column_name_to_encrypt INT PRIMARY KEY, +timestamp_column_name_to_encrypt TIMESTAMP(6) NULL, +blob_column_name_to_encrypt BLOB, +virt_column_name_to_encrypt INT AS (int_column_name_to_encrypt % 10) VIRTUAL, +pers_column_name_to_encrypt INT AS (int_column_name_to_encrypt) STORED, +varchar_column_name_to_encrypt VARCHAR(1024), +INDEX `index_name_to_encrypt`(`timestamp_column_name_to_encrypt`) +) ENGINE=InnoDB +PARTITION BY RANGE (int_column_name_to_encrypt) +SUBPARTITION BY KEY (int_column_name_to_encrypt) +SUBPARTITIONS 2 ( +PARTITION partition0_name_to_encrypt VALUES LESS THAN (100), +PARTITION partition1_name_to_encrypt VALUES LESS THAN (MAXVALUE) +) +; +CREATE TABLE myisam_table_name_to_encrypt ( +int_column_name_to_encrypt INT AUTO_INCREMENT PRIMARY KEY, +char_column_name_to_encrypt VARCHAR(255), +datetime_column_name_to_encrypt DATETIME, +text_column_name_to_encrypt TEXT +) ENGINE=MyISAM; +CREATE TABLE innodb_table_name_to_encrypt_2 ( +int_column_name_to_encrypt INT AUTO_INCREMENT PRIMARY KEY, +varchar_column_name_to_encrypt VARCHAR(1024), +enum_column_name_to_encrypt ENUM( +'enum_value1_to_encrypt', +'enum_value2_to_encrypt' + ), +timestamp_column_name_to_encrypt TIMESTAMP(6) NULL, +blob_column_name_to_encrypt BLOB +); +CREATE TRIGGER trigger_name_to_encrypt +AFTER INSERT ON myisam_table_name_to_encrypt FOR EACH ROW +INSERT INTO innodb_table_name_to_encrypt_2 (varchar_column_name_to_encrypt) +VALUES (NEW.char_column_name_to_encrypt); +CREATE DEFINER=user_name_to_encrypt VIEW view_name_to_encrypt +AS SELECT * FROM innodb_table_name_to_encrypt; +CREATE FUNCTION func_name_to_encrypt (func_parameter_to_encrypt INT) +RETURNS VARCHAR(64) +RETURN 'func_result_to_encrypt'; +CREATE PROCEDURE proc_name_to_encrypt ( +IN proc_in_parameter_to_encrypt CHAR(32), +OUT proc_out_parameter_to_encrypt INT +) +BEGIN +DECLARE procvar_name_to_encrypt CHAR(64) DEFAULT 'procvar_val_to_encrypt'; +DECLARE cursor_name_to_encrypt CURSOR FOR +SELECT virt_column_name_to_encrypt FROM innodb_table_name_to_encrypt; +DECLARE EXIT HANDLER FOR NOT FOUND +BEGIN +SET @stmt_var_to_encrypt = CONCAT( +"SELECT + IF (RAND()>0.5,'enum_value2_to_encrypt','enum_value1_to_encrypt') + FROM innodb_table_name_to_encrypt + INTO OUTFILE '", proc_in_parameter_to_encrypt, "'"); +PREPARE stmt_to_encrypt FROM @stmt_var_to_encrypt; +EXECUTE stmt_to_encrypt; +DEALLOCATE PREPARE stmt_to_encrypt; +END; +OPEN cursor_name_to_encrypt; +proc_label_to_encrypt: LOOP +FETCH cursor_name_to_encrypt INTO procvar_name_to_encrypt; +END LOOP; +CLOSE cursor_name_to_encrypt; +END $$ +CREATE SERVER server_name_to_encrypt +FOREIGN DATA WRAPPER mysql +OPTIONS (HOST 'host_name_to_encrypt'); +connect con1,localhost,user_name_to_encrypt,password_to_encrypt,database_name_to_encrypt; +CREATE TEMPORARY TABLE tmp_table_name_to_encrypt ( +float_column_name_to_encrypt FLOAT, +binary_column_name_to_encrypt BINARY(64) +); +disconnect con1; +connection server_1; +CREATE INDEX index_name_to_encrypt +ON myisam_table_name_to_encrypt (datetime_column_name_to_encrypt); +ALTER DATABASE database_name_to_encrypt CHARACTER SET utf8; +ALTER TABLE innodb_table_name_to_encrypt +MODIFY timestamp_column_name_to_encrypt TIMESTAMP NOT NULL +DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP +; +ALTER ALGORITHM=MERGE VIEW view_name_to_encrypt +AS SELECT * FROM innodb_table_name_to_encrypt; +RENAME TABLE innodb_table_name_to_encrypt TO new_table_name_to_encrypt; +ALTER TABLE new_table_name_to_encrypt RENAME TO innodb_table_name_to_encrypt; +set @user_var1_to_encrypt= 'dyncol1_val_to_encrypt'; +set @user_var2_to_encrypt= 'dyncol2_name_to_encrypt'; +INSERT INTO view_name_to_encrypt (int_column_name_to_encrypt, timestamp_column_name_to_encrypt, blob_column_name_to_encrypt) VALUES +(1, NOW(6), x'ABCABCABCABCABCABCABCABCABCABC'), +(2, NOW(6), x'DEFDEFDEFDEFDEFDEFDEFDEFDEFDEF') +; +CREATE PROCEDURE init_table() +BEGIN +DECLARE counter_name_to_encrypt INT DEFAULT 0; +select @id:=max(int_column_name_to_encrypt) from view_name_to_encrypt; +START TRANSACTION; +WHILE counter_name_to_encrypt<12 DO +INSERT INTO innodb_table_name_to_encrypt (int_column_name_to_encrypt, timestamp_column_name_to_encrypt, blob_column_name_to_encrypt) +SELECT @id := @id + 1, NOW(6), blob_column_name_to_encrypt +FROM innodb_table_name_to_encrypt +ORDER BY int_column_name_to_encrypt; +SET counter_name_to_encrypt = counter_name_to_encrypt+1; +END WHILE; +COMMIT; +END +$$ +CALL init_table(); +@id:=max(int_column_name_to_encrypt) +2 +INSERT INTO myisam_table_name_to_encrypt +SELECT NULL, 'char_literal_to_encrypt', NULL, 'text_to_encrypt'; +INSERT INTO myisam_table_name_to_encrypt (char_column_name_to_encrypt) +SELECT char_column_name_to_encrypt FROM myisam_table_name_to_encrypt; +INSERT INTO myisam_table_name_to_encrypt (char_column_name_to_encrypt) +SELECT char_column_name_to_encrypt FROM myisam_table_name_to_encrypt; +INSERT INTO myisam_table_name_to_encrypt (char_column_name_to_encrypt) +SELECT char_column_name_to_encrypt FROM myisam_table_name_to_encrypt; +CALL proc_name_to_encrypt('file_name_to_encrypt',@useless_var_to_encrypt); +UPDATE view_name_to_encrypt SET blob_column_name_to_encrypt = +func_name_to_encrypt(0) +; +ANALYZE TABLE myisam_table_name_to_encrypt; +CHECK TABLE innodb_table_name_to_encrypt_2; +CHECKSUM TABLE innodb_table_name_to_encrypt, myisam_table_name_to_encrypt; +RENAME USER user_name_to_encrypt to new_user_name_to_encrypt; +REVOKE ALL PRIVILEGES, GRANT OPTION FROM new_user_name_to_encrypt; +DROP DATABASE database_name_to_encrypt; +DROP USER new_user_name_to_encrypt; +DROP SERVER server_name_to_encrypt; +################# +# Master binlog checks +################# +# Let's make sure that master binlog files are not encrypted by finding some +# plain texts that we know would appear in not encrypted binary log files. +FOUND /_to_encrypt/ in master-bin.0* +FOUND /COMMIT/ in master-bin.0* +FOUND /TIMESTAMP/ in master-bin.0* +include/sync_slave_io_with_master.inc +connection server_1; +connection server_2; +connection server_2; +connection server_2; +connection server_2; +################# +# Relay log checks +################# +connection server_2; +# Here we try to find several plain texts that would appear in not encrypted binlog files. +# The searches should fail as we expect the binlog files to be encrypted. +NOT FOUND /_to_encrypt/ in slave-relay-bin.0* +NOT FOUND /COMMIT/ in slave-relay-bin.0* +NOT FOUND /TIMESTAMP/ in slave-relay-bin.0* +################# +# Slave binlog checks +################# +include/start_slave.inc +include/sync_slave_sql_with_io.inc +connection server_1; +include/sync_slave_io_with_master.inc +connection server_1; +connection server_2; +connection server_2; +connection server_2; +connection server_2; +connection server_2; +NOT FOUND /_to_encrypt/ in slave-bin.0* +NOT FOUND /COMMIT/ in slave-bin.0* +NOT FOUND /TIMESTAMP/ in slave-bin.0* +########## +# Cleanup +########## +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/encryption_combo.result b/mysql-test/suite/rpl_encryption/r/encryption_combo.result new file mode 100644 index 000000000000..5698b3b37639 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/encryption_combo.result @@ -0,0 +1,117 @@ +################# +# Initialization +################# +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +connection server_2; +include/stop_slave.inc +##################################################### +# Part 1: unencrypted master +##################################################### +connection server_1; +CREATE TABLE table1_no_encryption ( +pk INT AUTO_INCREMENT PRIMARY KEY, +ts TIMESTAMP NULL, +b BLOB +); +INSERT INTO table1_no_encryption VALUES (NULL,NOW(),'data_no_encryption'); +INSERT INTO table1_no_encryption SELECT NULL,NOW(),b FROM table1_no_encryption; +FLUSH BINARY LOGS; +SET binlog_format=ROW; +INSERT INTO table1_no_encryption SELECT NULL,NOW(),b FROM table1_no_encryption; +INSERT INTO table1_no_encryption SELECT NULL,NOW(),b FROM table1_no_encryption; +FOUND /table1_no_encryption/ in master-bin.0* +##################################################### +# Part 2: restart master, now with binlog encryption +##################################################### +UNINSTALL PLUGIN keyring_file; +include/rpl_restart_server.inc [server_number=1 parameters: --encrypt-binlog=1] +connection server_1; +connection server_1; +connection server_1; +connection default; +connection master; +connection master1; +connection server_1; +connection server_1_1; +connection default; +connection master; +connection master1; +connection server_1; +connection server_1_1; +connection server_1; +connection server_1; +connection server_1; +CREATE TABLE table2_to_encrypt ( +pk INT AUTO_INCREMENT PRIMARY KEY, +ts TIMESTAMP NULL, +b BLOB +); +INSERT INTO table2_to_encrypt VALUES (NULL,NOW(),'data_to_encrypt'); +INSERT INTO table2_to_encrypt SELECT NULL,NOW(),b FROM table2_to_encrypt; +FLUSH BINARY LOGS; +SET binlog_format=ROW; +INSERT INTO table2_to_encrypt SELECT NULL,NOW(),b FROM table2_to_encrypt; +INSERT INTO table2_to_encrypt SELECT NULL,NOW(),b FROM table2_to_encrypt; +# Here we try to find several plain texts that would appear in not encrypted binlog files. +# The searches should fail as we expect the binlog files to be encrypted. +NOT FOUND /table2_to_encrypt/ in master-bin.0* +##################################################### +# Part 3: restart master again without encryption +##################################################### +UNINSTALL PLUGIN keyring_file; +include/rpl_restart_server.inc [server_number=1 parameters: --encrypt-binlog=0] +connection server_1; +connection server_1; +connection server_1; +connection default; +connection master; +connection master1; +connection server_1; +connection server_1_1; +connection default; +connection master; +connection master1; +connection server_1; +connection server_1_1; +connection server_1; +connection server_1; +connection server_1; +CREATE TABLE table3_no_encryption ( +pk INT AUTO_INCREMENT PRIMARY KEY, +ts TIMESTAMP NULL, +b BLOB +); +INSERT INTO table3_no_encryption VALUES (NULL,NOW(),'data_no_encryption'); +INSERT INTO table3_no_encryption SELECT NULL,NOW(),b FROM table3_no_encryption; +INSERT INTO table3_no_encryption SELECT NULL,NOW(),b FROM table3_no_encryption; +##################################################### +# Check: resume replication and check that it works +##################################################### +connection server_2; +include/start_slave.inc +SHOW TABLES; +Tables_in_test +table1_no_encryption +table2_to_encrypt +table3_no_encryption +########## +# Cleanup +########## +connection server_1; +SELECT COUNT(*) FROM table1_no_encryption; +COUNT(*) +8 +SELECT COUNT(*) FROM table2_to_encrypt; +COUNT(*) +8 +SELECT COUNT(*) FROM table3_no_encryption; +COUNT(*) +4 +DROP TABLE table1_no_encryption, table2_to_encrypt, table3_no_encryption; +UNINSTALL PLUGIN keyring_file; +include/sync_slave_sql_with_master.inc +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/rpl_binlog_errors.result b/mysql-test/suite/rpl_encryption/r/rpl_binlog_errors.result new file mode 100644 index 000000000000..01d0f279a93a --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_binlog_errors.result @@ -0,0 +1,307 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +####################################################################### +####################### PART 1: MASTER TESTS ########################## +####################################################################### +include/stop_slave.inc +SELECT repeat('x',8192) INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/bug_46166.data'; +SELECT repeat('x',10) INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/bug_46166-2.data'; +RESET MASTER; +###################### TEST #1 +FLUSH LOGS; +# assert: must show two binlogs +show binary logs; +Log_name File_size +master-bin.000001 # +master-bin.000002 # +###################### TEST #2 +RESET MASTER; +SET GLOBAL binlog_error_action= IGNORE_ERROR; +FLUSH LOGS; +ERROR HY000: Can't generate a unique log-filename master-bin.(1-999) + +# assert: must show one binlog +master-bin.000001 +include/rpl_restart_server.inc [server_number=1] +RESET MASTER; +###################### TEST #3 +CREATE TABLE t1 (a INT); +CREATE TABLE t2 (a VARCHAR(16384)) Engine=InnoDB; +CREATE TABLE t4 (a VARCHAR(16384)) Engine=MyISAM; +INSERT INTO t1 VALUES (1); +RESET MASTER; +LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/bug_46166.data' INTO TABLE t2; +# assert: must show three binlog +show binary logs; +Log_name File_size +master-bin.000001 # +master-bin.000002 # +DELETE FROM t2; +RESET MASTER; +###################### TEST #4 +SET GLOBAL binlog_error_action= IGNORE_ERROR; +SELECT count(*) FROM t2; +count(*) +0 +LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/bug_46166.data' INTO TABLE t2; +ERROR HY000: Can't generate a unique log-filename master-bin.(1-999) + +# assert: must still be empty since the LOAD DATA INFILE failed +SELECT count(*) FROM t2; +count(*) +1 +DELETE FROM t2; +include/rpl_restart_server.inc [server_number=1] +RESET MASTER; +###################### TEST #5 +LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/bug_46166-2.data' INTO TABLE t2; +# assert: must show one entry +SELECT count(*) FROM t2; +count(*) +1 +DELETE FROM t2; +RESET MASTER; +###################### TEST #6 +SET GLOBAL binlog_error_action= IGNORE_ERROR; +# Table should be empty +SELECT count(*) FROM t2; +count(*) +0 +SET AUTOCOMMIT=0; +INSERT INTO t2 VALUES ('muse'); +LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/bug_46166.data' INTO TABLE t2; +INSERT INTO t2 VALUES ('muse'); +COMMIT; +ERROR HY000: Can't generate a unique log-filename master-bin.(1-999) + +# Table should still be empty since the commit failed. +SELECT count(*) FROM t2; +count(*) +3 +SET AUTOCOMMIT= 1; +DELETE FROM t2; +include/rpl_restart_server.inc [server_number=1] +RESET MASTER; +###################### TEST #7 +SET GLOBAL binlog_error_action= IGNORE_ERROR; +SELECT count(*) FROM t4; +count(*) +0 +LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/bug_46166.data' INTO TABLE t4; +ERROR HY000: Can't generate a unique log-filename master-bin.(1-999) + +# assert: must show 1 entry +SELECT count(*) FROM t4; +count(*) +1 +DELETE FROM t4; +include/rpl_restart_server.inc [server_number=1] +RESET MASTER; +###################### TEST #8 +SET GLOBAL binlog_error_action= IGNORE_ERROR; +SET @xxx = REPEAT('xxx', 1000); +SET @yyy = REPEAT('yyy', 1000); +INSERT INTO t2 VALUES (@xxx),(@yyy); +# must show 0 entries +SELECT count(*) FROM t4; +count(*) +0 +# must show 2 entries +SELECT count(*) FROM t2; +count(*) +2 +LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/bug_46166.data' INTO TABLE t4; +ERROR HY000: Can't generate a unique log-filename master-bin.(1-999) + +include/rpl_restart_server.inc [server_number=1] +SET GLOBAL binlog_error_action= IGNORE_ERROR; +LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/bug_46166.data' INTO TABLE t2; +ERROR HY000: Can't generate a unique log-filename master-bin.(1-999) + +include/rpl_restart_server.inc [server_number=1] +SET GLOBAL binlog_error_action= IGNORE_ERROR; +set @aaa = repeat('aaa',1000); +set @bbb = repeat('bbb',1000); +set @ccc = repeat('ccc',1000); +INSERT INTO t2 VALUES (@aaa), (@bbb), (@ccc); +ERROR HY000: Can't generate a unique log-filename master-bin.(1-999) + +# INFO: Count(*) Before Offending DELETEs +# assert: must show 1 entry +SELECT count(*) FROM t4; +count(*) +1 +# assert: must show 2 entries since the LOAD DATA INFILE and +# INSERT INTO above was rolled back due to error. Only the +# original rows remain +SELECT count(*) FROM t2; +count(*) +6 +include/rpl_restart_server.inc [server_number=1] +SET GLOBAL binlog_error_action= IGNORE_ERROR; +SET @xxx = REPEAT('xxx', 1000); +SET @yyy = REPEAT('yyy', 1000); +DELETE FROM t4 WHERE a IN (@xxx, @yyy) OR 1; +ERROR HY000: Can't generate a unique log-filename master-bin.(1-999) + +include/rpl_restart_server.inc [server_number=1] +SET GLOBAL binlog_error_action= IGNORE_ERROR; +set @aaa = repeat('aaa',1000); +set @bbb = repeat('bbb',1000); +set @ccc = repeat('ccc',1000); +DELETE FROM t2 WHERE a IN (@aaa, @bbb, @ccc) OR 1; +ERROR HY000: Can't generate a unique log-filename master-bin.(1-999) + +# INFO: Count(*) After Offending DELETEs +# assert: must show zero entries +SELECT count(*) FROM t4; +count(*) +0 +# assert: must show 2 entries: the original two rows +SELECT count(*) FROM t2; +count(*) +0 +DELETE FROM t2; +###################### TEST #9 +SET GLOBAL binlog_error_action= IGNORE_ERROR; +SET SQL_LOG_BIN=0; +INSERT INTO t2 VALUES ('aaa'), ('bbb'), ('ccc'), ('ddd'); +INSERT INTO t4 VALUES ('eee'), ('fff'), ('ggg'), ('hhh'); +# assert: must show four entries +SELECT count(*) FROM t2; +count(*) +4 +SELECT count(*) FROM t4; +count(*) +4 +DELETE FROM t2; +DELETE FROM t4; +# assert: must show zero entries +SELECT count(*) FROM t2; +count(*) +0 +SELECT count(*) FROM t4; +count(*) +0 +SET SQL_LOG_BIN=1; +###################### TEST #10 +call mtr.add_suppression("MYSQL_BIN_LOG::open failed to sync the index file."); +call mtr.add_suppression("Could not open .*"); +include/rpl_restart_server.inc [server_number=1] +RESET MASTER; +SHOW WARNINGS; +Level Code Message +FLUSH LOGS; +ERROR HY000: Can't open file: 'master-bin.000002' (errno: 1 - Operation not permitted) +SHOW BINARY LOGS; +ERROR HY000: You are not using binary logging +CREATE TABLE t5 (a INT); +INSERT INTO t4 VALUES ('bbbbb'); +INSERT INTO t2 VALUES ('aaaaa'); +DELETE FROM t4; +DELETE FROM t2; +DROP TABLE t5; +###################### TEST #11 +include/rpl_restart_server.inc [server_number=1] +FLUSH LOGS; +ERROR HY000: Can't open file: 'master-bin.index' (errno: 1 - Operation not permitted) +RESET MASTER; +CREATE TABLE t5 (a INT); +INSERT INTO t4 VALUES ('bbbbb'); +INSERT INTO t2 VALUES ('aaaaa'); +DELETE FROM t4; +DELETE FROM t2; +DROP TABLE t5; +include/rpl_restart_server.inc [server_number=1] +###################### TEST #12 +FLUSH LOGS; +ERROR HY000: Can't open file: 'master-bin' (errno: 2 - No such file or directory) +RESET MASTER; +CREATE TABLE t5 (a INT); +INSERT INTO t4 VALUES ('bbbbb'); +INSERT INTO t2 VALUES ('aaaaa'); +DELETE FROM t4; +DELETE FROM t2; +DROP TABLE t5; +include/rpl_restart_server.inc [server_number=1] +DROP TABLE t1, t2, t4; +RESET MASTER; +include/start_slave.inc +####################################################################### +####################### PART 2: SLAVE TESTS ########################### +####################################################################### +include/rpl_reset.inc +call mtr.add_suppression("Slave I/O for channel '': Relay log write failure: could not queue event from master.*"); +call mtr.add_suppression("Error writing file .*"); +call mtr.add_suppression("Could not open .*"); +call mtr.add_suppression("MYSQL_BIN_LOG::open failed to sync the index file."); +call mtr.add_suppression("Can't generate a unique log-filename .*"); +###################### TEST #13 +SET GLOBAL binlog_error_action= IGNORE_ERROR; +SET @old_debug=@@global.debug; +include/stop_slave.inc +SET GLOBAL debug="+d,error_unique_log_filename"; +START SLAVE io_thread; +include/wait_for_slave_io_error.inc [errno=1595] +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +Last_IO_Error = 'Relay log write failure: could not queue event from master' +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET GLOBAL debug="-d,error_unique_log_filename"; +SET GLOBAL debug=@old_debug; +include/rpl_restart_server.inc [server_number=2] +###################### TEST #14 +SET GLOBAL binlog_error_action= IGNORE_ERROR; +SET @old_debug=@@global.debug; +include/stop_slave.inc +SET GLOBAL debug="+d,fault_injection_new_file_rotate_event"; +START SLAVE io_thread; +include/wait_for_slave_io_error.inc [errno=1595] +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +Last_IO_Error = 'Relay log write failure: could not queue event from master' +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET GLOBAL debug="-d,fault_injection_new_file_rotate_event"; +SET GLOBAL debug=@old_debug; +include/rpl_restart_server.inc [server_number=2] +###################### TEST #15 +SET GLOBAL binlog_error_action= IGNORE_ERROR; +SET @old_debug=@@global.debug; +include/stop_slave.inc +SET GLOBAL debug="+d,fault_injection_registering_index"; +START SLAVE io_thread; +include/wait_for_slave_io_error.inc [errno=1595] +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +Last_IO_Error = 'Relay log write failure: could not queue event from master' +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET GLOBAL debug="-d,fault_injection_registering_index"; +SET GLOBAL debug=@old_debug; +include/rpl_restart_server.inc [server_number=2] +###################### TEST #16 +SET GLOBAL binlog_error_action= IGNORE_ERROR; +SET @old_debug=@@global.debug; +include/stop_slave.inc +SET GLOBAL debug="+d,fault_injection_openning_index"; +START SLAVE io_thread; +include/wait_for_slave_io_error.inc [errno=1595] +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +Last_IO_Error = 'Relay log write failure: could not queue event from master' +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET GLOBAL debug="-d,fault_injection_openning_index"; +SET GLOBAL debug=@old_debug; +include/rpl_restart_server.inc [server_number=2] +include/stop_slave_sql.inc +Warnings: +Note 3084 Replication thread(s) for channel '' are already stopped. +RESET SLAVE; +RESET MASTER; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/rpl_corruption.result b/mysql-test/suite/rpl_encryption/r/rpl_corruption.result new file mode 100644 index 000000000000..88887966faea --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_corruption.result @@ -0,0 +1,50 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +call mtr.add_suppression('Found invalid event in binary log'); +call mtr.add_suppression("Slave I/O for channel '': Relay log write failure: could not queue event from master"); +call mtr.add_suppression('event read from binlog did not pass crc check'); +call mtr.add_suppression('Replication event checksum verification failed'); +call mtr.add_suppression('Event crc check failed! Most likely there is event corruption'); +call mtr.add_suppression("Slave SQL for channel '': Error initializing relay log position: I/O error reading event at position .*, Error_code: 1593"); +SET @old_master_verify_checksum = @@master_verify_checksum; +# 1. Creating test table/data and set corruption position for testing +* insert/update/delete rows in table t1 * +CREATE TABLE t1 (a INT NOT NULL PRIMARY KEY, b VARCHAR(10), c VARCHAR(100)); +include/sync_slave_sql_with_master.inc +include/stop_slave.inc +# 2. Corruption in master binlog and SHOW BINLOG EVENTS +SET GLOBAL debug="d,corrupt_read_log_event_char"; +SHOW BINLOG EVENTS; +ERROR HY000: Error when executing command SHOW BINLOG EVENTS: Wrong offset or I/O error +# 3. Master read a corrupted event from binlog and send the error to slave +SET GLOBAL debug="d,corrupt_read_log_event"; +START SLAVE IO_THREAD; +include/wait_for_slave_io_error.inc [errno=1236] +# 4. Master read a corrupted event from binlog and send it to slave +SET GLOBAL master_verify_checksum=0; +SET GLOBAL debug="d,corrupt_read_log_event"; +START SLAVE IO_THREAD; +include/wait_for_slave_io_error.inc [errno=1595,1743] +SET GLOBAL debug=""; +SET GLOBAL master_verify_checksum=1; +# 5. Slave. Corruption in network +SET GLOBAL debug="d,corrupt_queue_event"; +START SLAVE IO_THREAD; +include/wait_for_slave_io_error.inc [errno=1595,1743] +# 6. Slave. Corruption in relay log +SET GLOBAL debug="d,corrupt_read_log_event_char"; +START SLAVE SQL_THREAD; +include/wait_for_slave_sql_error.inc [errno=1593] +# 7. Seek diff for tables on master and slave +SET GLOBAL debug= ""; +include/start_slave.inc +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:t1, slave:t1] +# 8. Clean up +SET GLOBAL master_verify_checksum = @old_master_verify_checksum; +DROP TABLE t1; +include/sync_slave_sql_with_master.inc +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/rpl_crash_safe_master.result b/mysql-test/suite/rpl_encryption/r/rpl_crash_safe_master.result new file mode 100644 index 000000000000..bca622152565 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_crash_safe_master.result @@ -0,0 +1,133 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +include/stop_slave.inc +RESET MASTER; +include/start_slave.inc +call mtr.add_suppression("Attempting backtrace"); +call mtr.add_suppression("allocated tablespace *., old maximum was 0"); +call mtr.add_suppression("Error in Log_event::read_log_event()"); +call mtr.add_suppression("Buffered warning: Performance schema disabled"); +CREATE TABLE t1(a LONGBLOB) ENGINE=INNODB; +# Test case1: Set DEBUG POINT before binlog to make +# the master crash for transaction +# Lets stop the slave IO thread first, so that it does not timeout on +# reconnection while the master is down (it happened before on some +# slow hosts). +include/sync_slave_sql_with_master.inc +include/stop_slave_io.inc +BEGIN; +INSERT INTO t1 (a) VALUES (REPEAT('a',2)); +INSERT INTO t1 (a) VALUES (REPEAT('a',2)); +INSERT INTO t1 (a) VALUES (REPEAT('a',2)); +COMMIT; +ERROR HY000: Lost connection to MySQL server during query +# Restart the master server +# Test the transaction statements will not be binlogged +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Query # # use `test`; CREATE TABLE t1(a LONGBLOB) ENGINE=INNODB +include/assert.inc [On master, test the data will be rolled back after restart.] +# lets restart the slave io thread and check that +# the slave gets synchronized again +include/start_slave_io.inc +include/sync_slave_sql_with_master.inc +# On slave, test replication will work fine, and the data +# is not replicated +include/diff_tables.inc [master:test.t1, slave:test.t1] +# Test case2: Set DEBUG POINT after binlog, and before the date +# is committed to make crash for transaction +# Lets stop the slave IO thread first, so that it does not timeout on +# reconnection while the master is down (it happened before on some +# slow hosts). +include/sync_slave_sql_with_master.inc +include/stop_slave_io.inc +BEGIN; +INSERT INTO t1 (a) VALUES (REPEAT('a',2)); +INSERT INTO t1 (a) VALUES (REPEAT('a',2)); +INSERT INTO t1 (a) VALUES (REPEAT('a',2)); +COMMIT; +ERROR HY000: Lost connection to MySQL server during query +# Restart the master server +# Test the transaction statements will be binlogged +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000002 # Query # # BEGIN +master-bin.000002 # Table_map # # table_id: # (test.t1) +master-bin.000002 # Write_rows # # table_id: # flags: STMT_END_F +master-bin.000002 # Table_map # # table_id: # (test.t1) +master-bin.000002 # Write_rows # # table_id: # flags: STMT_END_F +master-bin.000002 # Table_map # # table_id: # (test.t1) +master-bin.000002 # Write_rows # # table_id: # flags: STMT_END_F +master-bin.000002 # Xid # # COMMIT /* XID */ +include/assert.inc [On master, test the data will be recovered after the master restart.] +# lets restart the slave io thread and check that +# the slave gets synchronized again +include/start_slave_io.inc +include/sync_slave_sql_with_master.inc +# On slave, test replication will work fine, and the data is replicated +include/diff_tables.inc [master:test.t1, slave:test.t1] +DROP TABLE t1; +include/sync_slave_sql_with_master.inc +include/stop_slave.inc +CREATE TABLE t1(a LONGBLOB) ENGINE=INNODB; +# Test case3: Set DEBUG POINT in the middle of binlog to +# make the master crash for transaction. +BEGIN; +INSERT INTO t1 (a) VALUES (REPEAT('a',6144)); +INSERT INTO t1 (a) VALUES (REPEAT('a',6144)); +INSERT INTO t1 (a) VALUES (REPEAT('a',6144)); +INSERT INTO t1 (a) VALUES (REPEAT('a',6144)); +INSERT INTO t1 (a) VALUES (REPEAT('a',6144)); +INSERT INTO t1 (a) VALUES (REPEAT('a',6144)); +INSERT INTO t1 (a) VALUES (REPEAT('a',6144)); +INSERT INTO t1 (a) VALUES (REPEAT('a',6144)); +INSERT INTO t1 (a) VALUES (REPEAT('a',6144)); +INSERT INTO t1 (a) VALUES (REPEAT('a',6144)); +INSERT INTO t1 (a) VALUES (REPEAT('a',6144)); +INSERT INTO t1 (a) VALUES (REPEAT('a',6144)); +INSERT INTO t1 (a) VALUES (REPEAT('a',6144)); +INSERT INTO t1 (a) VALUES (REPEAT('a',6144)); +INSERT INTO t1 (a) VALUES (REPEAT('a',6144)); +INSERT INTO t1 (a) VALUES (REPEAT('a',6144)); +INSERT INTO t1 (a) VALUES (REPEAT('a',6144)); +INSERT INTO t1 (a) VALUES (REPEAT('a',6144)); +INSERT INTO t1 (a) VALUES (REPEAT('a',6144)); +INSERT INTO t1 (a) VALUES (REPEAT('a',6144)); +INSERT INTO t1 (a) VALUES (REPEAT('a',6144)); +INSERT INTO t1 (a) VALUES (REPEAT('a',6144)); +INSERT INTO t1 (a) VALUES (REPEAT('a',6144)); +INSERT INTO t1 (a) VALUES (REPEAT('a',6144)); +COMMIT; +ERROR HY000: Lost connection to MySQL server during query +# Restart the master server +# Test the halfly binlogged transaction will be trimmed +# from the crashed binlog file +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000003 # Query # # use `test`; CREATE TABLE t1(a LONGBLOB) ENGINE=INNODB +# Test the data will not be recovered successfully +# after the master restart. +SELECT COUNT(*) FROM t1; +COUNT(*) +0 +# Test case4: Set DEBUG POINT in the middle of binlog to +# make the master crash for non-transaction. +CREATE TABLE t2(a LONGBLOB) ENGINE=MYISAM; +INSERT INTO t2 (a) VALUES (REPEAT('a',16384)); +ERROR HY000: Lost connection to MySQL server during query +# Restart the master server +# Test the halfly binlogged non-transaction statement will be trimmed +# from the crashed binlog file +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000004 # Query # # use `test`; CREATE TABLE t2(a LONGBLOB) ENGINE=MYISAM +# Test the data will not be recovered successfully +# after the master restart. +SELECT COUNT(*) FROM t2; +COUNT(*) +0 +DROP TABLE t1, t2; +CHANGE MASTER TO MASTER_AUTO_POSITION= 0; diff --git a/mysql-test/suite/rpl_encryption/r/rpl_gtid_events.result b/mysql-test/suite/rpl_encryption/r/rpl_gtid_events.result new file mode 100644 index 000000000000..ec3b43497092 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_gtid_events.result @@ -0,0 +1,97 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +==== Initialize ==== +==== Test presence of transaction events ==== +include/save_binlog_position.inc +CREATE TABLE t1 (a VARCHAR(10000)); +include/assert_binlog_events.inc +include/save_binlog_position.inc +INSERT INTO t1 VALUES ('1'); +include/assert_binlog_events.inc +==== Generate new binary logs in many ways ==== +---- RESET MASTER ---- +include/stop_slave.inc +RESET SLAVE; +RESET MASTER; +RESET MASTER; +INSERT INTO t1 VALUES ('2'); +include/start_slave_io.inc +---- FLUSH LOGS ---- +FLUSH LOGS; +INSERT INTO t1 VALUES ('3'); +---- Grow over the limit ---- +SET @@GLOBAL.MAX_BINLOG_SIZE= 4096; +INSERT INTO t1 VALUES (''); +SET @@GLOBAL.MAX_BINLOG_SIZE= 1073741824; +INSERT INTO t1 VALUES ('4'); +---- Restart server ---- +include/sync_slave_io_with_master.inc +include/stop_slave_io.inc +include/rpl_restart_server.inc [server_number=1] +INSERT INTO t1 VALUES ('5'); +==== Generate new relay logs in many ways ==== +---- Reconnect receiver thread ---- +include/save_master_pos.inc +include/start_slave_io.inc +include/sync_slave_io.inc +include/stop_slave_io.inc +SET @@GLOBAL.MAX_RELAY_LOG_SIZE= 4096; +include/start_slave_io.inc +INSERT INTO t1 VALUES ('6'); +include/sync_slave_io_with_master.inc +---- FLUSH RELAY LOGS ---- +FLUSH RELAY LOGS; +INSERT INTO t1 VALUES ('7'); +include/sync_slave_io_with_master.inc +---- Grow over the limit ---- +INSERT INTO t1 VALUES (''); +INSERT INTO t1 VALUES ('8'); +include/sync_slave_io_with_master.inc +---- Restart slave server ---- +include/rpl_restart_server.inc [server_number=2] +include/start_slave_io.inc +INSERT INTO t1 VALUES ('9'); +include/sync_slave_io_with_master.inc +==== Test that binary logs contain Previous_gtids ==== +SET SQL_LOG_BIN= 0; +CREATE TEMPORARY TABLE binlogs +(id INT PRIMARY KEY AUTO_INCREMENT, filename VARCHAR(512)); +include/rpl_read_binlog_index_into_table.inc +master-bin.000001 +include/assert_binlog_events.inc [Format_desc # Start_encryption # Previous_gtids(.|#)*] +master-bin.000002 +include/assert_binlog_events.inc [Format_desc # Start_encryption # Previous_gtids(.|#)*] +master-bin.000003 +include/assert_binlog_events.inc [Format_desc # Start_encryption # Previous_gtids(.|#)*] +master-bin.000004 +include/assert_binlog_events.inc [Format_desc # Start_encryption # Previous_gtids(.|#)*] +DROP TEMPORARY TABLE binlogs; +SET SQL_LOG_BIN= 1; +==== Test that relay logs contain Previous_gtids ==== +SET SQL_LOG_BIN= 0; +CREATE TEMPORARY TABLE relay_logs +(id INT PRIMARY KEY AUTO_INCREMENT, filename VARCHAR(512)); +include/rpl_read_binlog_index_into_table.inc +include/assert_binlog_events.inc [Format_desc # Start_encryption # Previous_gtids(.|#)*] +include/assert_binlog_events.inc [Format_desc # Start_encryption # Previous_gtids(.|#)*] +include/assert_binlog_events.inc [Format_desc # Start_encryption # Previous_gtids(.|#)*] +include/assert_binlog_events.inc [Format_desc # Start_encryption # Previous_gtids(.|#)*] +include/assert_binlog_events.inc [Format_desc # Start_encryption # Previous_gtids(.|#)*] +include/assert_binlog_events.inc [Format_desc # Start_encryption # Previous_gtids(.|#)*] +include/assert_binlog_events.inc [Format_desc # Start_encryption # Previous_gtids(.|#)*] +include/assert_binlog_events.inc [Format_desc # Start_encryption # Previous_gtids(.|#)*] +include/assert_binlog_events.inc [Format_desc # Start_encryption # Previous_gtids(.|#)*] +include/assert_binlog_events.inc [Format_desc # Start_encryption # Previous_gtids(.|#)*] +include/assert_binlog_events.inc [Format_desc # Start_encryption # Previous_gtids(.|#)*] +include/assert_binlog_events.inc [Format_desc # Start_encryption # Previous_gtids(.|#)*] +include/assert_binlog_events.inc [Format_desc # Start_encryption # Previous_gtids(.|#)*] +include/assert_binlog_events.inc [Format_desc # Start_encryption # Previous_gtids(.|#)*] +DROP TEMPORARY TABLE relay_logs; +SET SQL_LOG_BIN= 1; +==== Clean up ==== +include/start_slave_sql.inc +DROP TABLE t1; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/rpl_gtid_execution.result b/mysql-test/suite/rpl_encryption/r/rpl_gtid_execution.result new file mode 100644 index 000000000000..e3ed6cb13079 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_gtid_execution.result @@ -0,0 +1,1661 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +#### Initialize #### +CREATE table t (a INT PRIMARY KEY) ENGINE = InnoDB; +INSERT INTO t VALUES (1); +#### Specify test cases #### +CREATE TABLE stmts ( +id INT PRIMARY KEY NOT NULL, +connection INT NOT NULL, +stmt_type TEXT(100) NOT NULL, +global_gtid_executed TEXT(10000) NOT NULL, +session_gtid_executed TEXT(10000) NOT NULL, +session_gtid_owned TEXT(10000) NOT NULL, +global_gtid_owned TEXT(10000) NOT NULL, +error INT NOT NULL) +ENGINE = InnoDB; +INSERT INTO stmts VALUES +# ID CON STATEMENT_TYPE G.DONE S.DONE S.OWNED G.OWNED ERROR +# DML statements +(1000, 1, '1:1', '', '', '1:1', '1:1', 0) +,(1001, 1, 'AUTOCOMMIT=1', '', '', '', '', 0) +,(1002, 1, 'INSERT', '1:1', '', '~1:1', '~1:1', 0) +,(1003, 1, '1:3', '', '', '1:3', '1:3', 0) +,(1004, 1, 'INSERT', '1:3', '', '~1:3', '~1:3', 0) +# skipped DML statements +,(1010, 1, '1:3', '', '', '', '', 0) +,(1011, 1, 'INSERT', '', '', '', '', 0) +,(1012, 1, '1:1', '', '', '', '', 0) +,(1013, 1, 'INSERT', '', '', '', '', 0) +# DDL statements +,(1020, 1, '2:3', '', '', '2:3', '2:3', 0) +,(1021, 1, 'CREATE', '2:3', '', '~2:3', '~2:3', 0) +,(1022, 1, '2:4', '', '', '2:4', '2:4', 0) +,(1023, 1, 'CREATE', '2:4', '', '~2:4', '~2:4', 0) +# skipped DDL statements +,(1030, 1, '2:3', '', '', '', '', 0) +,(1031, 1, 'CREATE-NODROP', '', '', '', '', 0) +,(1032, 1, '2:4', '', '', '', '', 0) +,(1033, 1, 'CREATE-NODROP', '', '', '', '', 0) +# simple transaction +,(1040, 1, '4:1', '', '', '4:1', '4:1', 0) +,(1041, 1, 'BEGIN', '', '', '', '', 0) +,(1042, 1, 'INSERT', '', '4:1', '', '', 0) +,(1043, 1, 'INSERT', '', '', '', '', 0) +,(1044, 1, 'COMMIT', '4:1', '~4:1', '~4:1', '~4:1', 0) +# skipped simple transaction +,(1050, 1, '4:1', '', '', '', '', 0) +,(1051, 1, 'BEGIN', '', '', '', '', 0) +,(1052, 1, 'INSERT', '', '', '', '', 0) +,(1053, 1, 'INSERT', '', '', '', '', 0) +,(1054, 1, 'COMMIT', '', '', '', '', 0) +# rollback transaction +,(1060, 1, '6:1', '', '', '6:1', '6:1', 0) +,(1061, 1, 'BEGIN', '', '', '', '', 0) +,(1062, 1, 'INSERT', '', '6:1', '', '', 0) +,(1063, 1, 'INSERT', '', '', '', '', 0) +,(1064, 1, 'ROLLBACK', '', '~6:1', '~6:1', '~6:1', 0) +# rollback to savepoint, then rollback +,(1070, 1, '6:1', '', '', '6:1', '6:1', 0) +,(1071, 1, 'BEGIN', '', '', '', '', 0) +,(1072, 1, 'SAVEPOINT 1', '', '', '', '', 0) +,(1073, 1, 'SAVEPOINT 2', '', '', '', '', 0) +,(1074, 1, 'INSERT', '', '6:1', '', '', 0) +,(1075, 1, 'INSERT', '', '', '', '', 0) +,(1076, 1, 'ROLLBACK 2', '', '~6:1', '', '', 0) +,(1077, 1, 'SAVEPOINT 3', '', '', '', '', 0) +,(1078, 1, 'INSERT', '', '6:1', '', '', 0) +,(1079, 1, 'SAVEPOINT 4','', '', '', '', 0) +,(1080, 1, 'ROLLBACK 3', '', '~6:1', '', '', 0) +,(1081, 1, 'INSERT', '', '6:1', '', '', 0) +,(1082, 1, 'SAVEPOINT 2', '', '', '', '', 0) +,(1083, 1, 'ROLLBACK 2', '', '', '', '', 0) +,(1084, 1, 'ROLLBACK 1', '', '~6:1', '', '', 0) +,(1085, 1, 'ROLLBACK', '', '', '~6:1', '~6:1', 0) +# empty group +,(1090, 1, '9:1', '', '', '9:1', '9:1', 0) +,(1091, 1, 'COMMIT', '9:1', '', '~9:1', '~9:1', 0) +# skipped empty group +,(1100, 1, '9:1', '', '', '', '', 0) +,(1101, 1, 'COMMIT', '', '', '', '', 0) +# rollback 'empty' group +,(1110, 1, '11:1', '', '', '11:1', '11:1', 0) +,(1111, 1, 'ROLLBACK', '', '', '~11:1', '~11:1', 0) +# concurrent group: committed and skipped +,(1120, 1, '12:1', '', '', '12:1', '12:1', 0) +,(1121, 2, 'send 12:1', '', '', '', '', 0) +,(1122, 1, 'BEGIN', '', '', '', '', 0) +,(1123, 1, 'INSERT', '', '12:1', '', '', 0) +,(1124, 2, 'running', '', '', '', '', 0) +,(1125, 1, 'COMMIT', '12:1', '~12:1', '~12:1', '~12:1', 0) +,(1126, 2, 'reap', '12:1', '', '', '~12:1', 0) +# concurrent group: rolled back, other thread takes over +,(1130, 1, '13:1', '', '', '13:1', '13:1', 0) +,(1131, 2, 'send 13:1', '', '', '', '', 0) +,(1132, 1, 'BEGIN', '', '', '', '', 0) +,(1133, 1, 'INSERT', '', '13:1', '', '', 0) +,(1134, 2, 'running', '', '', '', '', 0) +,(1135, 1, 'ROLLBACK', '', '~13:1', '~13:1', '', 0) +,(1136, 2, 'reap', '', '', '13:1', '', 0) +,(1137, 2, 'BEGIN', '', '', '', '', 0) +,(1138, 2, 'INSERT', '', '13:1', '', '', 0) +,(1139, 2, 'COMMIT', '13:1', '~13:1', '~13:1', '~13:1', 0) +# concurrent group: rolled back, ownership transferred from 1->2->3->1 +,(1140, 1, '14:1', '', '', '14:1', '14:1', 0) +,(1141, 2, 'send 14:1', '', '', '', '', 0) +,(1142, 1, 'BEGIN', '', '', '', '', 0) +,(1143, 1, 'INSERT', '', '14:1', '', '', 0) +,(1144, 2, 'running', '', '', '', '', 0) +,(1145, 1, 'ROLLBACK', '', '~14:1', '~14:1', '', 0) +,(1146, 2, 'reap', '', '', '14:1', '', 0) +,(1147, 2, 'BEGIN', '', '', '', '', 0) +,(1148, 2, 'INSERT', '', '14:1', '', '', 0) +,(1149, 3, 'send 14:1', '', '', '', '', 0) +,(1150, 3, 'running', '', '', '', '', 0) +,(1151, 2, 'ROLLBACK', '', '~14:1', '~14:1', '', 0) +,(1152, 3, 'reap', '', '', '14:1', '', 0) +,(1153, 1, 'send 14:1', '', '', '', '', 0) +,(1154, 3, 'BEGIN', '', '', '', '', 0) +,(1155, 3, 'INSERT', '', '14:1', '', '', 0) +,(1156, 1, 'running', '', '', '', '', 0) +,(1157, 3, 'ROLLBACK', '', '~14:1', '~14:1', '', 0) +,(1158, 1, 'reap', '', '', '14:1', '', 0) +,(1159, 1, 'BEGIN', '', '', '', '', 0) +,(1160, 1, 'INSERT', '', '14:1', '', '', 0) +,(1161, 1, 'COMMIT', '14:1', '~14:1', '~14:1', '~14:1', 0) +# concurrent group and rollback to savepoint +,(1170, 1, '17:1', '', '', '17:1', '17:1', 0) +,(1171, 2, 'send 17:1', '', '', '', '', 0) +,(1172, 1, 'BEGIN', '', '', '', '', 0) +,(1173, 1, 'SAVEPOINT 1', '', '', '', '', 0) +,(1174, 1, 'INSERT', '', '17:1', '', '', 0) +,(1175, 1, 'ROLLBACK 1', '', '~17:1', '', '', 0) +,(1176, 1, 'INSERT', '', '17:1', '', '', 0) +,(1177, 2, 'running', '', '', '', '', 0) +,(1178, 1, 'ROLLBACK', '', '~17:1', '~17:1', '', 0) +,(1179, 2, 'reap', '', '', '17:1', '', 0) +,(1180, 2, 'BEGIN', '', '', '', '', 0) +,(1181, 2, 'INSERT', '', '17:1', '', '', 0) +,(1182, 2, 'COMMIT', '17:1', '~17:1', '~17:1', '~17:1', 0) +# rollback to savepoint, then commit +,(1190, 1, '19:1', '', '', '19:1', '19:1', 0) +,(1191, 1, 'BEGIN', '', '', '', '', 0) +,(1192, 1, 'SAVEPOINT 1', '', '', '', '', 0) +,(1193, 1, 'SAVEPOINT 2', '', '', '', '', 0) +,(1194, 1, 'INSERT', '', '19:1', '', '', 0) +,(1195, 1, 'INSERT', '', '', '', '', 0) +,(1196, 1, 'ROLLBACK 2', '', '~19:1', '', '', 0) +,(1197, 1, 'SAVEPOINT 3', '', '', '', '', 0) +,(1198, 1, 'INSERT', '', '19:1', '', '', 0) +,(1199, 1, 'SAVEPOINT 4','', '', '', '', 0) +,(1200, 1, 'ROLLBACK 3', '', '~19:1', '', '', 0) +,(1201, 1, 'INSERT', '', '19:1', '', '', 0) +,(1202, 1, 'SAVEPOINT 2', '', '', '', '', 0) +,(1203, 1, 'ROLLBACK 2', '', '', '', '', 0) +,(1204, 1, 'ROLLBACK 1', '', '~19:1', '', '', 0) +,(1205, 1, 'COMMIT', '19:1', '', '~19:1', '~19:1', 0) +# +# The following is waiting for BUG#13687542 +# +# # failing DML in transaction +# ,(1190, 1, '19:1', '', '', '19:1', '19:1', 0) +# ,(1191, 1, 'INSERT-ERROR', '', '', '', '', 1062)#dup +# ,(1192, 1, 'ROLLBACK', '', '', '~19:1', '~19:1', 0) +# # failing DDL in transaction +# ,(1200, 1, '20:1', '', '', '20:1', '20:1', 0) +# ,(1201, 1, 'CREATE-ERROR', '', '', '', '', 1062)#dup +# ,(1202, 1, 'ROLLBACK', '', '', '~20:1', '~20:1', 0) +; +include/rpl_reset.inc +#### Test #### +==== row-id = 1000 ==== +[connection server_1_1] +1:1 +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1000 @@GLOBAL.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1000 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1000 @@SESSION.GTID_OWNED: '' + '1:1' = '1:1'] +include/assert.inc [#1000 @@GLOBAL.GTID_OWNED: '' + '1:1' = '1:1'] +include/assert.inc [#1000 slave:@@GLOBAL.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1001 ==== +[connection server_1_1] +AUTOCOMMIT=1 +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1001 @@GLOBAL.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1001 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1001 @@SESSION.GTID_OWNED: '1:1' + '' = '1:1'] +include/assert.inc [#1001 @@GLOBAL.GTID_OWNED: '1:1' + '' = '1:1'] +include/assert.inc [#1001 slave:@@GLOBAL.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1002 ==== +[connection server_1_1] +INSERT +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1002 @@GLOBAL.GTID_EXECUTED: '' + '1:1' = '1:1'] +include/assert.inc [#1002 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1002 @@SESSION.GTID_OWNED: '1:1' + '~1:1' = ''] +include/assert.inc [#1002 @@GLOBAL.GTID_OWNED: '1:1' + '~1:1' = ''] +include/assert.inc [#1002 slave:@@GLOBAL.GTID_EXECUTED: '' + '1:1' = '1:1'] +include/assert.inc [Something was written to the binlog] +include/assert.inc [The first added event in the binlog should be a Gtid_log_event] +==== row-id = 1003 ==== +[connection server_1_1] +1:3 +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1003 @@GLOBAL.GTID_EXECUTED: '1:1' + '' = '1:1'] +include/assert.inc [#1003 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1003 @@SESSION.GTID_OWNED: '' + '1:3' = '1:3'] +include/assert.inc [#1003 @@GLOBAL.GTID_OWNED: '' + '1:3' = '1:3'] +include/assert.inc [#1003 slave:@@GLOBAL.GTID_EXECUTED: '1:1' + '' = '1:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1004 ==== +[connection server_1_1] +INSERT +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1004 @@GLOBAL.GTID_EXECUTED: '1:1' + '1:3' = '1:1:3'] +include/assert.inc [#1004 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1004 @@SESSION.GTID_OWNED: '1:3' + '~1:3' = ''] +include/assert.inc [#1004 @@GLOBAL.GTID_OWNED: '1:3' + '~1:3' = ''] +include/assert.inc [#1004 slave:@@GLOBAL.GTID_EXECUTED: '1:1' + '1:3' = '1:1:3'] +include/assert.inc [Something was written to the binlog] +include/assert.inc [The first added event in the binlog should be a Gtid_log_event] +==== row-id = 1010 ==== +[connection server_1_1] +1:3 +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1010 @@GLOBAL.GTID_EXECUTED: '1:1:3' + '' = '1:1:3'] +include/assert.inc [#1010 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1010 @@SESSION.GTID_OWNED: '' + '' = ''] +include/assert.inc [#1010 @@GLOBAL.GTID_OWNED: '' + '' = ''] +include/assert.inc [#1010 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3' + '' = '1:1:3'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1011 ==== +[connection server_1_1] +INSERT +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1011 @@GLOBAL.GTID_EXECUTED: '1:1:3' + '' = '1:1:3'] +include/assert.inc [#1011 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1011 @@SESSION.GTID_OWNED: '' + '' = ''] +include/assert.inc [#1011 @@GLOBAL.GTID_OWNED: '' + '' = ''] +include/assert.inc [#1011 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3' + '' = '1:1:3'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1012 ==== +[connection server_1_1] +1:1 +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1012 @@GLOBAL.GTID_EXECUTED: '1:1:3' + '' = '1:1:3'] +include/assert.inc [#1012 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1012 @@SESSION.GTID_OWNED: '' + '' = ''] +include/assert.inc [#1012 @@GLOBAL.GTID_OWNED: '' + '' = ''] +include/assert.inc [#1012 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3' + '' = '1:1:3'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1013 ==== +[connection server_1_1] +INSERT +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1013 @@GLOBAL.GTID_EXECUTED: '1:1:3' + '' = '1:1:3'] +include/assert.inc [#1013 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1013 @@SESSION.GTID_OWNED: '' + '' = ''] +include/assert.inc [#1013 @@GLOBAL.GTID_OWNED: '' + '' = ''] +include/assert.inc [#1013 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3' + '' = '1:1:3'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1020 ==== +[connection server_1_1] +2:3 +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1020 @@GLOBAL.GTID_EXECUTED: '1:1:3' + '' = '1:1:3'] +include/assert.inc [#1020 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1020 @@SESSION.GTID_OWNED: '' + '2:3' = '2:3'] +include/assert.inc [#1020 @@GLOBAL.GTID_OWNED: '' + '2:3' = '2:3'] +include/assert.inc [#1020 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3' + '' = '1:1:3'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1021 ==== +[connection server_1_1] +CREATE +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1021 @@GLOBAL.GTID_EXECUTED: '1:1:3' + '2:3' = '1:1:3,2:3'] +include/assert.inc [#1021 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1021 @@SESSION.GTID_OWNED: '2:3' + '~2:3' = ''] +include/assert.inc [#1021 @@GLOBAL.GTID_OWNED: '2:3' + '~2:3' = ''] +include/assert.inc [#1021 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3' + '2:3' = '1:1:3,2:3'] +include/assert.inc [Something was written to the binlog] +include/assert.inc [The first added event in the binlog should be a Gtid_log_event] +==== row-id = 1022 ==== +[connection server_1_1] +2:4 +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1022 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3' + '' = '1:1:3,2:3'] +include/assert.inc [#1022 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1022 @@SESSION.GTID_OWNED: '' + '2:4' = '2:4'] +include/assert.inc [#1022 @@GLOBAL.GTID_OWNED: '' + '2:4' = '2:4'] +include/assert.inc [#1022 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3' + '' = '1:1:3,2:3'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1023 ==== +[connection server_1_1] +CREATE +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1023 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3' + '2:4' = '1:1:3,2:3-4'] +include/assert.inc [#1023 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1023 @@SESSION.GTID_OWNED: '2:4' + '~2:4' = ''] +include/assert.inc [#1023 @@GLOBAL.GTID_OWNED: '2:4' + '~2:4' = ''] +include/assert.inc [#1023 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3' + '2:4' = '1:1:3,2:3-4'] +include/assert.inc [Something was written to the binlog] +include/assert.inc [The first added event in the binlog should be a Gtid_log_event] +==== row-id = 1030 ==== +[connection server_1_1] +2:3 +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1030 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4' + '' = '1:1:3,2:3-4'] +include/assert.inc [#1030 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1030 @@SESSION.GTID_OWNED: '' + '' = ''] +include/assert.inc [#1030 @@GLOBAL.GTID_OWNED: '' + '' = ''] +include/assert.inc [#1030 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4' + '' = '1:1:3,2:3-4'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1031 ==== +[connection server_1_1] +CREATE-NODROP +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1031 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4' + '' = '1:1:3,2:3-4'] +include/assert.inc [#1031 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1031 @@SESSION.GTID_OWNED: '' + '' = ''] +include/assert.inc [#1031 @@GLOBAL.GTID_OWNED: '' + '' = ''] +include/assert.inc [#1031 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4' + '' = '1:1:3,2:3-4'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1032 ==== +[connection server_1_1] +2:4 +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1032 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4' + '' = '1:1:3,2:3-4'] +include/assert.inc [#1032 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1032 @@SESSION.GTID_OWNED: '' + '' = ''] +include/assert.inc [#1032 @@GLOBAL.GTID_OWNED: '' + '' = ''] +include/assert.inc [#1032 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4' + '' = '1:1:3,2:3-4'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1033 ==== +[connection server_1_1] +CREATE-NODROP +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1033 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4' + '' = '1:1:3,2:3-4'] +include/assert.inc [#1033 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1033 @@SESSION.GTID_OWNED: '' + '' = ''] +include/assert.inc [#1033 @@GLOBAL.GTID_OWNED: '' + '' = ''] +include/assert.inc [#1033 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4' + '' = '1:1:3,2:3-4'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1040 ==== +[connection server_1_1] +4:1 +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1040 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4' + '' = '1:1:3,2:3-4'] +include/assert.inc [#1040 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1040 @@SESSION.GTID_OWNED: '' + '4:1' = '4:1'] +include/assert.inc [#1040 @@GLOBAL.GTID_OWNED: '' + '4:1' = '4:1'] +include/assert.inc [#1040 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4' + '' = '1:1:3,2:3-4'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1041 ==== +[connection server_1_1] +BEGIN +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1041 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4' + '' = '1:1:3,2:3-4'] +include/assert.inc [#1041 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1041 @@SESSION.GTID_OWNED: '4:1' + '' = '4:1'] +include/assert.inc [#1041 @@GLOBAL.GTID_OWNED: '4:1' + '' = '4:1'] +include/assert.inc [#1041 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4' + '' = '1:1:3,2:3-4'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1042 ==== +[connection server_1_1] +INSERT +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1042 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4' + '' = '1:1:3,2:3-4'] +include/assert.inc [#1042 @@SESSION.GTID_EXECUTED: '' + '4:1' = '4:1'] +include/assert.inc [#1042 @@SESSION.GTID_OWNED: '4:1' + '' = '4:1'] +include/assert.inc [#1042 @@GLOBAL.GTID_OWNED: '4:1' + '' = '4:1'] +include/assert.inc [#1042 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4' + '' = '1:1:3,2:3-4'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1043 ==== +[connection server_1_1] +INSERT +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1043 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4' + '' = '1:1:3,2:3-4'] +include/assert.inc [#1043 @@SESSION.GTID_EXECUTED: '4:1' + '' = '4:1'] +include/assert.inc [#1043 @@SESSION.GTID_OWNED: '4:1' + '' = '4:1'] +include/assert.inc [#1043 @@GLOBAL.GTID_OWNED: '4:1' + '' = '4:1'] +include/assert.inc [#1043 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4' + '' = '1:1:3,2:3-4'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1044 ==== +[connection server_1_1] +COMMIT +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1044 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4' + '4:1' = '1:1:3,2:3-4,4:1'] +include/assert.inc [#1044 @@SESSION.GTID_EXECUTED: '4:1' + '~4:1' = ''] +include/assert.inc [#1044 @@SESSION.GTID_OWNED: '4:1' + '~4:1' = ''] +include/assert.inc [#1044 @@GLOBAL.GTID_OWNED: '4:1' + '~4:1' = ''] +include/assert.inc [#1044 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4' + '4:1' = '1:1:3,2:3-4,4:1'] +include/assert.inc [Something was written to the binlog] +include/assert.inc [The first added event in the binlog should be a Gtid_log_event] +==== row-id = 1050 ==== +[connection server_1_1] +4:1 +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1050 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1' + '' = '1:1:3,2:3-4,4:1'] +include/assert.inc [#1050 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1050 @@SESSION.GTID_OWNED: '' + '' = ''] +include/assert.inc [#1050 @@GLOBAL.GTID_OWNED: '' + '' = ''] +include/assert.inc [#1050 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1' + '' = '1:1:3,2:3-4,4:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1051 ==== +[connection server_1_1] +BEGIN +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1051 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1' + '' = '1:1:3,2:3-4,4:1'] +include/assert.inc [#1051 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1051 @@SESSION.GTID_OWNED: '' + '' = ''] +include/assert.inc [#1051 @@GLOBAL.GTID_OWNED: '' + '' = ''] +include/assert.inc [#1051 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1' + '' = '1:1:3,2:3-4,4:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1052 ==== +[connection server_1_1] +INSERT +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1052 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1' + '' = '1:1:3,2:3-4,4:1'] +include/assert.inc [#1052 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1052 @@SESSION.GTID_OWNED: '' + '' = ''] +include/assert.inc [#1052 @@GLOBAL.GTID_OWNED: '' + '' = ''] +include/assert.inc [#1052 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1' + '' = '1:1:3,2:3-4,4:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1053 ==== +[connection server_1_1] +INSERT +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1053 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1' + '' = '1:1:3,2:3-4,4:1'] +include/assert.inc [#1053 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1053 @@SESSION.GTID_OWNED: '' + '' = ''] +include/assert.inc [#1053 @@GLOBAL.GTID_OWNED: '' + '' = ''] +include/assert.inc [#1053 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1' + '' = '1:1:3,2:3-4,4:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1054 ==== +[connection server_1_1] +COMMIT +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1054 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1' + '' = '1:1:3,2:3-4,4:1'] +include/assert.inc [#1054 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1054 @@SESSION.GTID_OWNED: '' + '' = ''] +include/assert.inc [#1054 @@GLOBAL.GTID_OWNED: '' + '' = ''] +include/assert.inc [#1054 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1' + '' = '1:1:3,2:3-4,4:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1060 ==== +[connection server_1_1] +6:1 +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1060 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1' + '' = '1:1:3,2:3-4,4:1'] +include/assert.inc [#1060 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1060 @@SESSION.GTID_OWNED: '' + '6:1' = '6:1'] +include/assert.inc [#1060 @@GLOBAL.GTID_OWNED: '' + '6:1' = '6:1'] +include/assert.inc [#1060 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1' + '' = '1:1:3,2:3-4,4:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1061 ==== +[connection server_1_1] +BEGIN +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1061 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1' + '' = '1:1:3,2:3-4,4:1'] +include/assert.inc [#1061 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1061 @@SESSION.GTID_OWNED: '6:1' + '' = '6:1'] +include/assert.inc [#1061 @@GLOBAL.GTID_OWNED: '6:1' + '' = '6:1'] +include/assert.inc [#1061 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1' + '' = '1:1:3,2:3-4,4:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1062 ==== +[connection server_1_1] +INSERT +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1062 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1' + '' = '1:1:3,2:3-4,4:1'] +include/assert.inc [#1062 @@SESSION.GTID_EXECUTED: '' + '6:1' = '6:1'] +include/assert.inc [#1062 @@SESSION.GTID_OWNED: '6:1' + '' = '6:1'] +include/assert.inc [#1062 @@GLOBAL.GTID_OWNED: '6:1' + '' = '6:1'] +include/assert.inc [#1062 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1' + '' = '1:1:3,2:3-4,4:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1063 ==== +[connection server_1_1] +INSERT +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1063 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1' + '' = '1:1:3,2:3-4,4:1'] +include/assert.inc [#1063 @@SESSION.GTID_EXECUTED: '6:1' + '' = '6:1'] +include/assert.inc [#1063 @@SESSION.GTID_OWNED: '6:1' + '' = '6:1'] +include/assert.inc [#1063 @@GLOBAL.GTID_OWNED: '6:1' + '' = '6:1'] +include/assert.inc [#1063 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1' + '' = '1:1:3,2:3-4,4:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1064 ==== +[connection server_1_1] +ROLLBACK +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1064 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1' + '' = '1:1:3,2:3-4,4:1'] +include/assert.inc [#1064 @@SESSION.GTID_EXECUTED: '6:1' + '~6:1' = ''] +include/assert.inc [#1064 @@SESSION.GTID_OWNED: '6:1' + '~6:1' = ''] +include/assert.inc [#1064 @@GLOBAL.GTID_OWNED: '6:1' + '~6:1' = ''] +include/assert.inc [#1064 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1' + '' = '1:1:3,2:3-4,4:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1070 ==== +[connection server_1_1] +6:1 +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1070 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1' + '' = '1:1:3,2:3-4,4:1'] +include/assert.inc [#1070 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1070 @@SESSION.GTID_OWNED: '' + '6:1' = '6:1'] +include/assert.inc [#1070 @@GLOBAL.GTID_OWNED: '' + '6:1' = '6:1'] +include/assert.inc [#1070 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1' + '' = '1:1:3,2:3-4,4:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1071 ==== +[connection server_1_1] +BEGIN +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1071 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1' + '' = '1:1:3,2:3-4,4:1'] +include/assert.inc [#1071 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1071 @@SESSION.GTID_OWNED: '6:1' + '' = '6:1'] +include/assert.inc [#1071 @@GLOBAL.GTID_OWNED: '6:1' + '' = '6:1'] +include/assert.inc [#1071 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1' + '' = '1:1:3,2:3-4,4:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1072 ==== +[connection server_1_1] +SAVEPOINT 1 +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1072 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1' + '' = '1:1:3,2:3-4,4:1'] +include/assert.inc [#1072 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1072 @@SESSION.GTID_OWNED: '6:1' + '' = '6:1'] +include/assert.inc [#1072 @@GLOBAL.GTID_OWNED: '6:1' + '' = '6:1'] +include/assert.inc [#1072 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1' + '' = '1:1:3,2:3-4,4:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1073 ==== +[connection server_1_1] +SAVEPOINT 2 +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1073 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1' + '' = '1:1:3,2:3-4,4:1'] +include/assert.inc [#1073 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1073 @@SESSION.GTID_OWNED: '6:1' + '' = '6:1'] +include/assert.inc [#1073 @@GLOBAL.GTID_OWNED: '6:1' + '' = '6:1'] +include/assert.inc [#1073 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1' + '' = '1:1:3,2:3-4,4:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1074 ==== +[connection server_1_1] +INSERT +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1074 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1' + '' = '1:1:3,2:3-4,4:1'] +include/assert.inc [#1074 @@SESSION.GTID_EXECUTED: '' + '6:1' = '6:1'] +include/assert.inc [#1074 @@SESSION.GTID_OWNED: '6:1' + '' = '6:1'] +include/assert.inc [#1074 @@GLOBAL.GTID_OWNED: '6:1' + '' = '6:1'] +include/assert.inc [#1074 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1' + '' = '1:1:3,2:3-4,4:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1075 ==== +[connection server_1_1] +INSERT +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1075 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1' + '' = '1:1:3,2:3-4,4:1'] +include/assert.inc [#1075 @@SESSION.GTID_EXECUTED: '6:1' + '' = '6:1'] +include/assert.inc [#1075 @@SESSION.GTID_OWNED: '6:1' + '' = '6:1'] +include/assert.inc [#1075 @@GLOBAL.GTID_OWNED: '6:1' + '' = '6:1'] +include/assert.inc [#1075 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1' + '' = '1:1:3,2:3-4,4:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1076 ==== +[connection server_1_1] +ROLLBACK 2 +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1076 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1' + '' = '1:1:3,2:3-4,4:1'] +include/assert.inc [#1076 @@SESSION.GTID_EXECUTED: '6:1' + '~6:1' = ''] +include/assert.inc [#1076 @@SESSION.GTID_OWNED: '6:1' + '' = '6:1'] +include/assert.inc [#1076 @@GLOBAL.GTID_OWNED: '6:1' + '' = '6:1'] +include/assert.inc [#1076 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1' + '' = '1:1:3,2:3-4,4:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1077 ==== +[connection server_1_1] +SAVEPOINT 3 +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1077 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1' + '' = '1:1:3,2:3-4,4:1'] +include/assert.inc [#1077 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1077 @@SESSION.GTID_OWNED: '6:1' + '' = '6:1'] +include/assert.inc [#1077 @@GLOBAL.GTID_OWNED: '6:1' + '' = '6:1'] +include/assert.inc [#1077 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1' + '' = '1:1:3,2:3-4,4:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1078 ==== +[connection server_1_1] +INSERT +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1078 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1' + '' = '1:1:3,2:3-4,4:1'] +include/assert.inc [#1078 @@SESSION.GTID_EXECUTED: '' + '6:1' = '6:1'] +include/assert.inc [#1078 @@SESSION.GTID_OWNED: '6:1' + '' = '6:1'] +include/assert.inc [#1078 @@GLOBAL.GTID_OWNED: '6:1' + '' = '6:1'] +include/assert.inc [#1078 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1' + '' = '1:1:3,2:3-4,4:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1079 ==== +[connection server_1_1] +SAVEPOINT 4 +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1079 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1' + '' = '1:1:3,2:3-4,4:1'] +include/assert.inc [#1079 @@SESSION.GTID_EXECUTED: '6:1' + '' = '6:1'] +include/assert.inc [#1079 @@SESSION.GTID_OWNED: '6:1' + '' = '6:1'] +include/assert.inc [#1079 @@GLOBAL.GTID_OWNED: '6:1' + '' = '6:1'] +include/assert.inc [#1079 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1' + '' = '1:1:3,2:3-4,4:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1080 ==== +[connection server_1_1] +ROLLBACK 3 +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1080 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1' + '' = '1:1:3,2:3-4,4:1'] +include/assert.inc [#1080 @@SESSION.GTID_EXECUTED: '6:1' + '~6:1' = ''] +include/assert.inc [#1080 @@SESSION.GTID_OWNED: '6:1' + '' = '6:1'] +include/assert.inc [#1080 @@GLOBAL.GTID_OWNED: '6:1' + '' = '6:1'] +include/assert.inc [#1080 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1' + '' = '1:1:3,2:3-4,4:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1081 ==== +[connection server_1_1] +INSERT +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1081 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1' + '' = '1:1:3,2:3-4,4:1'] +include/assert.inc [#1081 @@SESSION.GTID_EXECUTED: '' + '6:1' = '6:1'] +include/assert.inc [#1081 @@SESSION.GTID_OWNED: '6:1' + '' = '6:1'] +include/assert.inc [#1081 @@GLOBAL.GTID_OWNED: '6:1' + '' = '6:1'] +include/assert.inc [#1081 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1' + '' = '1:1:3,2:3-4,4:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1082 ==== +[connection server_1_1] +SAVEPOINT 2 +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1082 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1' + '' = '1:1:3,2:3-4,4:1'] +include/assert.inc [#1082 @@SESSION.GTID_EXECUTED: '6:1' + '' = '6:1'] +include/assert.inc [#1082 @@SESSION.GTID_OWNED: '6:1' + '' = '6:1'] +include/assert.inc [#1082 @@GLOBAL.GTID_OWNED: '6:1' + '' = '6:1'] +include/assert.inc [#1082 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1' + '' = '1:1:3,2:3-4,4:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1083 ==== +[connection server_1_1] +ROLLBACK 2 +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1083 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1' + '' = '1:1:3,2:3-4,4:1'] +include/assert.inc [#1083 @@SESSION.GTID_EXECUTED: '6:1' + '' = '6:1'] +include/assert.inc [#1083 @@SESSION.GTID_OWNED: '6:1' + '' = '6:1'] +include/assert.inc [#1083 @@GLOBAL.GTID_OWNED: '6:1' + '' = '6:1'] +include/assert.inc [#1083 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1' + '' = '1:1:3,2:3-4,4:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1084 ==== +[connection server_1_1] +ROLLBACK 1 +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1084 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1' + '' = '1:1:3,2:3-4,4:1'] +include/assert.inc [#1084 @@SESSION.GTID_EXECUTED: '6:1' + '~6:1' = ''] +include/assert.inc [#1084 @@SESSION.GTID_OWNED: '6:1' + '' = '6:1'] +include/assert.inc [#1084 @@GLOBAL.GTID_OWNED: '6:1' + '' = '6:1'] +include/assert.inc [#1084 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1' + '' = '1:1:3,2:3-4,4:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1085 ==== +[connection server_1_1] +ROLLBACK +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1085 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1' + '' = '1:1:3,2:3-4,4:1'] +include/assert.inc [#1085 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1085 @@SESSION.GTID_OWNED: '6:1' + '~6:1' = ''] +include/assert.inc [#1085 @@GLOBAL.GTID_OWNED: '6:1' + '~6:1' = ''] +include/assert.inc [#1085 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1' + '' = '1:1:3,2:3-4,4:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1090 ==== +[connection server_1_1] +9:1 +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1090 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1' + '' = '1:1:3,2:3-4,4:1'] +include/assert.inc [#1090 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1090 @@SESSION.GTID_OWNED: '' + '9:1' = '9:1'] +include/assert.inc [#1090 @@GLOBAL.GTID_OWNED: '' + '9:1' = '9:1'] +include/assert.inc [#1090 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1' + '' = '1:1:3,2:3-4,4:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1091 ==== +[connection server_1_1] +COMMIT +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1091 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1' + '9:1' = '1:1:3,2:3-4,4:1,9:1'] +include/assert.inc [#1091 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1091 @@SESSION.GTID_OWNED: '9:1' + '~9:1' = ''] +include/assert.inc [#1091 @@GLOBAL.GTID_OWNED: '9:1' + '~9:1' = ''] +include/assert.inc [#1091 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1' + '9:1' = '1:1:3,2:3-4,4:1,9:1'] +include/assert.inc [Something was written to the binlog] +include/assert.inc [The first added event in the binlog should be a Gtid_log_event] +==== row-id = 1100 ==== +[connection server_1_1] +9:1 +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1100 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1' + '' = '1:1:3,2:3-4,4:1,9:1'] +include/assert.inc [#1100 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1100 @@SESSION.GTID_OWNED: '' + '' = ''] +include/assert.inc [#1100 @@GLOBAL.GTID_OWNED: '' + '' = ''] +include/assert.inc [#1100 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1' + '' = '1:1:3,2:3-4,4:1,9:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1101 ==== +[connection server_1_1] +COMMIT +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1101 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1' + '' = '1:1:3,2:3-4,4:1,9:1'] +include/assert.inc [#1101 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1101 @@SESSION.GTID_OWNED: '' + '' = ''] +include/assert.inc [#1101 @@GLOBAL.GTID_OWNED: '' + '' = ''] +include/assert.inc [#1101 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1' + '' = '1:1:3,2:3-4,4:1,9:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1110 ==== +[connection server_1_1] +11:1 +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1110 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1' + '' = '1:1:3,2:3-4,4:1,9:1'] +include/assert.inc [#1110 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1110 @@SESSION.GTID_OWNED: '' + '11:1' = '11:1'] +include/assert.inc [#1110 @@GLOBAL.GTID_OWNED: '' + '11:1' = '11:1'] +include/assert.inc [#1110 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1' + '' = '1:1:3,2:3-4,4:1,9:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1111 ==== +[connection server_1_1] +ROLLBACK +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1111 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1' + '' = '1:1:3,2:3-4,4:1,9:1'] +include/assert.inc [#1111 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1111 @@SESSION.GTID_OWNED: '11:1' + '~11:1' = ''] +include/assert.inc [#1111 @@GLOBAL.GTID_OWNED: '11:1' + '~11:1' = ''] +include/assert.inc [#1111 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1' + '' = '1:1:3,2:3-4,4:1,9:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1120 ==== +[connection server_1_1] +12:1 +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1120 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1' + '' = '1:1:3,2:3-4,4:1,9:1'] +include/assert.inc [#1120 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1120 @@SESSION.GTID_OWNED: '' + '12:1' = '12:1'] +include/assert.inc [#1120 @@GLOBAL.GTID_OWNED: '' + '12:1' = '12:1'] +include/assert.inc [#1120 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1' + '' = '1:1:3,2:3-4,4:1,9:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1121 ==== +[connection server_1_2] +send 12:1 +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +==== row-id = 1122 ==== +[connection server_1_1] +BEGIN +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1122 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1' + '' = '1:1:3,2:3-4,4:1,9:1'] +include/assert.inc [#1122 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1122 @@SESSION.GTID_OWNED: '12:1' + '' = '12:1'] +include/assert.inc [#1122 @@GLOBAL.GTID_OWNED: '12:1' + '' = '12:1'] +include/assert.inc [#1122 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1' + '' = '1:1:3,2:3-4,4:1,9:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1123 ==== +[connection server_1_1] +INSERT +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1123 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1' + '' = '1:1:3,2:3-4,4:1,9:1'] +include/assert.inc [#1123 @@SESSION.GTID_EXECUTED: '' + '12:1' = '12:1'] +include/assert.inc [#1123 @@SESSION.GTID_OWNED: '12:1' + '' = '12:1'] +include/assert.inc [#1123 @@GLOBAL.GTID_OWNED: '12:1' + '' = '12:1'] +include/assert.inc [#1123 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1' + '' = '1:1:3,2:3-4,4:1,9:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1124 ==== +[connection server_1_2] +running +Checking that thread is still running query +==== row-id = 1125 ==== +[connection server_1_1] +COMMIT +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1125 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1' + '12:1' = '1:1:3,2:3-4,4:1,9:1,12:1'] +include/assert.inc [#1125 @@SESSION.GTID_EXECUTED: '12:1' + '~12:1' = ''] +include/assert.inc [#1125 @@SESSION.GTID_OWNED: '12:1' + '~12:1' = ''] +include/assert.inc [#1125 @@GLOBAL.GTID_OWNED: '12:1' + '~12:1' = ''] +include/assert.inc [#1125 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1' + '12:1' = '1:1:3,2:3-4,4:1,9:1,12:1'] +include/assert.inc [Something was written to the binlog] +include/assert.inc [The first added event in the binlog should be a Gtid_log_event] +==== row-id = 1126 ==== +[connection server_1_2] +reap +include/sync_slave_sql_with_master.inc +include/assert.inc [#1126 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1' + '12:1' = '1:1:3,2:3-4,4:1,9:1,12:1'] +include/assert.inc [#1126 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1126 @@SESSION.GTID_OWNED: '' + '' = ''] +include/assert.inc [#1126 @@GLOBAL.GTID_OWNED: '12:1' + '~12:1' = ''] +include/assert.inc [#1126 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1' + '12:1' = '1:1:3,2:3-4,4:1,9:1,12:1'] +include/assert.inc [Something was written to the binlog] +include/assert.inc [The first added event in the binlog should be a Gtid_log_event] +==== row-id = 1130 ==== +[connection server_1_1] +13:1 +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1130 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1'] +include/assert.inc [#1130 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1130 @@SESSION.GTID_OWNED: '' + '13:1' = '13:1'] +include/assert.inc [#1130 @@GLOBAL.GTID_OWNED: '' + '13:1' = '13:1'] +include/assert.inc [#1130 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1131 ==== +[connection server_1_2] +send 13:1 +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +==== row-id = 1132 ==== +[connection server_1_1] +BEGIN +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1132 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1'] +include/assert.inc [#1132 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1132 @@SESSION.GTID_OWNED: '13:1' + '' = '13:1'] +include/assert.inc [#1132 @@GLOBAL.GTID_OWNED: '13:1' + '' = '13:1'] +include/assert.inc [#1132 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1133 ==== +[connection server_1_1] +INSERT +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1133 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1'] +include/assert.inc [#1133 @@SESSION.GTID_EXECUTED: '' + '13:1' = '13:1'] +include/assert.inc [#1133 @@SESSION.GTID_OWNED: '13:1' + '' = '13:1'] +include/assert.inc [#1133 @@GLOBAL.GTID_OWNED: '13:1' + '' = '13:1'] +include/assert.inc [#1133 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1134 ==== +[connection server_1_2] +running +Checking that thread is still running query +==== row-id = 1135 ==== +[connection server_1_1] +ROLLBACK +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1135 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1'] +include/assert.inc [#1135 @@SESSION.GTID_EXECUTED: '13:1' + '~13:1' = ''] +include/assert.inc [#1135 @@SESSION.GTID_OWNED: '13:1' + '~13:1' = ''] +include/assert.inc [#1135 @@GLOBAL.GTID_OWNED: '13:1' + '' = '13:1'] +include/assert.inc [#1135 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1136 ==== +[connection server_1_2] +reap +include/sync_slave_sql_with_master.inc +include/assert.inc [#1136 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1'] +include/assert.inc [#1136 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1136 @@SESSION.GTID_OWNED: '' + '13:1' = '13:1'] +include/assert.inc [#1136 @@GLOBAL.GTID_OWNED: '13:1' + '' = '13:1'] +include/assert.inc [#1136 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1137 ==== +[connection server_1_2] +BEGIN +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1137 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1'] +include/assert.inc [#1137 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1137 @@SESSION.GTID_OWNED: '13:1' + '' = '13:1'] +include/assert.inc [#1137 @@GLOBAL.GTID_OWNED: '13:1' + '' = '13:1'] +include/assert.inc [#1137 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1138 ==== +[connection server_1_2] +INSERT +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1138 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1'] +include/assert.inc [#1138 @@SESSION.GTID_EXECUTED: '' + '13:1' = '13:1'] +include/assert.inc [#1138 @@SESSION.GTID_OWNED: '13:1' + '' = '13:1'] +include/assert.inc [#1138 @@GLOBAL.GTID_OWNED: '13:1' + '' = '13:1'] +include/assert.inc [#1138 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1139 ==== +[connection server_1_2] +COMMIT +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1139 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1' + '13:1' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1'] +include/assert.inc [#1139 @@SESSION.GTID_EXECUTED: '13:1' + '~13:1' = ''] +include/assert.inc [#1139 @@SESSION.GTID_OWNED: '13:1' + '~13:1' = ''] +include/assert.inc [#1139 @@GLOBAL.GTID_OWNED: '13:1' + '~13:1' = ''] +include/assert.inc [#1139 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1' + '13:1' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1'] +include/assert.inc [Something was written to the binlog] +include/assert.inc [The first added event in the binlog should be a Gtid_log_event] +==== row-id = 1140 ==== +[connection server_1_1] +14:1 +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1140 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1'] +include/assert.inc [#1140 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1140 @@SESSION.GTID_OWNED: '' + '14:1' = '14:1'] +include/assert.inc [#1140 @@GLOBAL.GTID_OWNED: '' + '14:1' = '14:1'] +include/assert.inc [#1140 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1141 ==== +[connection server_1_2] +send 14:1 +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +==== row-id = 1142 ==== +[connection server_1_1] +BEGIN +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1142 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1'] +include/assert.inc [#1142 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1142 @@SESSION.GTID_OWNED: '14:1' + '' = '14:1'] +include/assert.inc [#1142 @@GLOBAL.GTID_OWNED: '14:1' + '' = '14:1'] +include/assert.inc [#1142 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1143 ==== +[connection server_1_1] +INSERT +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1143 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1'] +include/assert.inc [#1143 @@SESSION.GTID_EXECUTED: '' + '14:1' = '14:1'] +include/assert.inc [#1143 @@SESSION.GTID_OWNED: '14:1' + '' = '14:1'] +include/assert.inc [#1143 @@GLOBAL.GTID_OWNED: '14:1' + '' = '14:1'] +include/assert.inc [#1143 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1144 ==== +[connection server_1_2] +running +Checking that thread is still running query +==== row-id = 1145 ==== +[connection server_1_1] +ROLLBACK +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1145 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1'] +include/assert.inc [#1145 @@SESSION.GTID_EXECUTED: '14:1' + '~14:1' = ''] +include/assert.inc [#1145 @@SESSION.GTID_OWNED: '14:1' + '~14:1' = ''] +include/assert.inc [#1145 @@GLOBAL.GTID_OWNED: '14:1' + '' = '14:1'] +include/assert.inc [#1145 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1146 ==== +[connection server_1_2] +reap +include/sync_slave_sql_with_master.inc +include/assert.inc [#1146 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1'] +include/assert.inc [#1146 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1146 @@SESSION.GTID_OWNED: '' + '14:1' = '14:1'] +include/assert.inc [#1146 @@GLOBAL.GTID_OWNED: '14:1' + '' = '14:1'] +include/assert.inc [#1146 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1147 ==== +[connection server_1_2] +BEGIN +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1147 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1'] +include/assert.inc [#1147 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1147 @@SESSION.GTID_OWNED: '14:1' + '' = '14:1'] +include/assert.inc [#1147 @@GLOBAL.GTID_OWNED: '14:1' + '' = '14:1'] +include/assert.inc [#1147 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1148 ==== +[connection server_1_2] +INSERT +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1148 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1'] +include/assert.inc [#1148 @@SESSION.GTID_EXECUTED: '' + '14:1' = '14:1'] +include/assert.inc [#1148 @@SESSION.GTID_OWNED: '14:1' + '' = '14:1'] +include/assert.inc [#1148 @@GLOBAL.GTID_OWNED: '14:1' + '' = '14:1'] +include/assert.inc [#1148 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1149 ==== +[connection server_1_3] +send 14:1 +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +==== row-id = 1150 ==== +[connection server_1_3] +running +Checking that thread is still running query +==== row-id = 1151 ==== +[connection server_1_2] +ROLLBACK +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1151 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1'] +include/assert.inc [#1151 @@SESSION.GTID_EXECUTED: '14:1' + '~14:1' = ''] +include/assert.inc [#1151 @@SESSION.GTID_OWNED: '14:1' + '~14:1' = ''] +include/assert.inc [#1151 @@GLOBAL.GTID_OWNED: '14:1' + '' = '14:1'] +include/assert.inc [#1151 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1152 ==== +[connection server_1_3] +reap +include/sync_slave_sql_with_master.inc +include/assert.inc [#1152 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1'] +include/assert.inc [#1152 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1152 @@SESSION.GTID_OWNED: '' + '14:1' = '14:1'] +include/assert.inc [#1152 @@GLOBAL.GTID_OWNED: '14:1' + '' = '14:1'] +include/assert.inc [#1152 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1153 ==== +[connection server_1_1] +send 14:1 +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +==== row-id = 1154 ==== +[connection server_1_3] +BEGIN +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1154 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1'] +include/assert.inc [#1154 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1154 @@SESSION.GTID_OWNED: '14:1' + '' = '14:1'] +include/assert.inc [#1154 @@GLOBAL.GTID_OWNED: '14:1' + '' = '14:1'] +include/assert.inc [#1154 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1155 ==== +[connection server_1_3] +INSERT +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1155 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1'] +include/assert.inc [#1155 @@SESSION.GTID_EXECUTED: '' + '14:1' = '14:1'] +include/assert.inc [#1155 @@SESSION.GTID_OWNED: '14:1' + '' = '14:1'] +include/assert.inc [#1155 @@GLOBAL.GTID_OWNED: '14:1' + '' = '14:1'] +include/assert.inc [#1155 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1156 ==== +[connection server_1_1] +running +Checking that thread is still running query +==== row-id = 1157 ==== +[connection server_1_3] +ROLLBACK +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1157 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1'] +include/assert.inc [#1157 @@SESSION.GTID_EXECUTED: '14:1' + '~14:1' = ''] +include/assert.inc [#1157 @@SESSION.GTID_OWNED: '14:1' + '~14:1' = ''] +include/assert.inc [#1157 @@GLOBAL.GTID_OWNED: '14:1' + '' = '14:1'] +include/assert.inc [#1157 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1158 ==== +[connection server_1_1] +reap +include/sync_slave_sql_with_master.inc +include/assert.inc [#1158 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1'] +include/assert.inc [#1158 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1158 @@SESSION.GTID_OWNED: '' + '14:1' = '14:1'] +include/assert.inc [#1158 @@GLOBAL.GTID_OWNED: '14:1' + '' = '14:1'] +include/assert.inc [#1158 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1159 ==== +[connection server_1_1] +BEGIN +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1159 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1'] +include/assert.inc [#1159 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1159 @@SESSION.GTID_OWNED: '14:1' + '' = '14:1'] +include/assert.inc [#1159 @@GLOBAL.GTID_OWNED: '14:1' + '' = '14:1'] +include/assert.inc [#1159 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1160 ==== +[connection server_1_1] +INSERT +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1160 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1'] +include/assert.inc [#1160 @@SESSION.GTID_EXECUTED: '' + '14:1' = '14:1'] +include/assert.inc [#1160 @@SESSION.GTID_OWNED: '14:1' + '' = '14:1'] +include/assert.inc [#1160 @@GLOBAL.GTID_OWNED: '14:1' + '' = '14:1'] +include/assert.inc [#1160 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1161 ==== +[connection server_1_1] +COMMIT +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1161 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1' + '14:1' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1'] +include/assert.inc [#1161 @@SESSION.GTID_EXECUTED: '14:1' + '~14:1' = ''] +include/assert.inc [#1161 @@SESSION.GTID_OWNED: '14:1' + '~14:1' = ''] +include/assert.inc [#1161 @@GLOBAL.GTID_OWNED: '14:1' + '~14:1' = ''] +include/assert.inc [#1161 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1' + '14:1' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1'] +include/assert.inc [Something was written to the binlog] +include/assert.inc [The first added event in the binlog should be a Gtid_log_event] +==== row-id = 1170 ==== +[connection server_1_1] +17:1 +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1170 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1'] +include/assert.inc [#1170 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1170 @@SESSION.GTID_OWNED: '' + '17:1' = '17:1'] +include/assert.inc [#1170 @@GLOBAL.GTID_OWNED: '' + '17:1' = '17:1'] +include/assert.inc [#1170 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1171 ==== +[connection server_1_2] +send 17:1 +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +==== row-id = 1172 ==== +[connection server_1_1] +BEGIN +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1172 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1'] +include/assert.inc [#1172 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1172 @@SESSION.GTID_OWNED: '17:1' + '' = '17:1'] +include/assert.inc [#1172 @@GLOBAL.GTID_OWNED: '17:1' + '' = '17:1'] +include/assert.inc [#1172 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1173 ==== +[connection server_1_1] +SAVEPOINT 1 +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1173 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1'] +include/assert.inc [#1173 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1173 @@SESSION.GTID_OWNED: '17:1' + '' = '17:1'] +include/assert.inc [#1173 @@GLOBAL.GTID_OWNED: '17:1' + '' = '17:1'] +include/assert.inc [#1173 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1174 ==== +[connection server_1_1] +INSERT +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1174 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1'] +include/assert.inc [#1174 @@SESSION.GTID_EXECUTED: '' + '17:1' = '17:1'] +include/assert.inc [#1174 @@SESSION.GTID_OWNED: '17:1' + '' = '17:1'] +include/assert.inc [#1174 @@GLOBAL.GTID_OWNED: '17:1' + '' = '17:1'] +include/assert.inc [#1174 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1175 ==== +[connection server_1_1] +ROLLBACK 1 +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1175 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1'] +include/assert.inc [#1175 @@SESSION.GTID_EXECUTED: '17:1' + '~17:1' = ''] +include/assert.inc [#1175 @@SESSION.GTID_OWNED: '17:1' + '' = '17:1'] +include/assert.inc [#1175 @@GLOBAL.GTID_OWNED: '17:1' + '' = '17:1'] +include/assert.inc [#1175 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1176 ==== +[connection server_1_1] +INSERT +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1176 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1'] +include/assert.inc [#1176 @@SESSION.GTID_EXECUTED: '' + '17:1' = '17:1'] +include/assert.inc [#1176 @@SESSION.GTID_OWNED: '17:1' + '' = '17:1'] +include/assert.inc [#1176 @@GLOBAL.GTID_OWNED: '17:1' + '' = '17:1'] +include/assert.inc [#1176 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1177 ==== +[connection server_1_2] +running +Checking that thread is still running query +==== row-id = 1178 ==== +[connection server_1_1] +ROLLBACK +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1178 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1'] +include/assert.inc [#1178 @@SESSION.GTID_EXECUTED: '17:1' + '~17:1' = ''] +include/assert.inc [#1178 @@SESSION.GTID_OWNED: '17:1' + '~17:1' = ''] +include/assert.inc [#1178 @@GLOBAL.GTID_OWNED: '17:1' + '' = '17:1'] +include/assert.inc [#1178 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1179 ==== +[connection server_1_2] +reap +include/sync_slave_sql_with_master.inc +include/assert.inc [#1179 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1'] +include/assert.inc [#1179 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1179 @@SESSION.GTID_OWNED: '' + '17:1' = '17:1'] +include/assert.inc [#1179 @@GLOBAL.GTID_OWNED: '17:1' + '' = '17:1'] +include/assert.inc [#1179 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1180 ==== +[connection server_1_2] +BEGIN +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1180 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1'] +include/assert.inc [#1180 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1180 @@SESSION.GTID_OWNED: '17:1' + '' = '17:1'] +include/assert.inc [#1180 @@GLOBAL.GTID_OWNED: '17:1' + '' = '17:1'] +include/assert.inc [#1180 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1181 ==== +[connection server_1_2] +INSERT +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1181 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1'] +include/assert.inc [#1181 @@SESSION.GTID_EXECUTED: '' + '17:1' = '17:1'] +include/assert.inc [#1181 @@SESSION.GTID_OWNED: '17:1' + '' = '17:1'] +include/assert.inc [#1181 @@GLOBAL.GTID_OWNED: '17:1' + '' = '17:1'] +include/assert.inc [#1181 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1182 ==== +[connection server_1_2] +COMMIT +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1182 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1' + '17:1' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1'] +include/assert.inc [#1182 @@SESSION.GTID_EXECUTED: '17:1' + '~17:1' = ''] +include/assert.inc [#1182 @@SESSION.GTID_OWNED: '17:1' + '~17:1' = ''] +include/assert.inc [#1182 @@GLOBAL.GTID_OWNED: '17:1' + '~17:1' = ''] +include/assert.inc [#1182 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1' + '17:1' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1'] +include/assert.inc [Something was written to the binlog] +include/assert.inc [The first added event in the binlog should be a Gtid_log_event] +==== row-id = 1190 ==== +[connection server_1_1] +19:1 +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1190 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1'] +include/assert.inc [#1190 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1190 @@SESSION.GTID_OWNED: '' + '19:1' = '19:1'] +include/assert.inc [#1190 @@GLOBAL.GTID_OWNED: '' + '19:1' = '19:1'] +include/assert.inc [#1190 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1191 ==== +[connection server_1_1] +BEGIN +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1191 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1'] +include/assert.inc [#1191 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1191 @@SESSION.GTID_OWNED: '19:1' + '' = '19:1'] +include/assert.inc [#1191 @@GLOBAL.GTID_OWNED: '19:1' + '' = '19:1'] +include/assert.inc [#1191 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1192 ==== +[connection server_1_1] +SAVEPOINT 1 +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1192 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1'] +include/assert.inc [#1192 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1192 @@SESSION.GTID_OWNED: '19:1' + '' = '19:1'] +include/assert.inc [#1192 @@GLOBAL.GTID_OWNED: '19:1' + '' = '19:1'] +include/assert.inc [#1192 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1193 ==== +[connection server_1_1] +SAVEPOINT 2 +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1193 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1'] +include/assert.inc [#1193 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1193 @@SESSION.GTID_OWNED: '19:1' + '' = '19:1'] +include/assert.inc [#1193 @@GLOBAL.GTID_OWNED: '19:1' + '' = '19:1'] +include/assert.inc [#1193 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1194 ==== +[connection server_1_1] +INSERT +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1194 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1'] +include/assert.inc [#1194 @@SESSION.GTID_EXECUTED: '' + '19:1' = '19:1'] +include/assert.inc [#1194 @@SESSION.GTID_OWNED: '19:1' + '' = '19:1'] +include/assert.inc [#1194 @@GLOBAL.GTID_OWNED: '19:1' + '' = '19:1'] +include/assert.inc [#1194 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1195 ==== +[connection server_1_1] +INSERT +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1195 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1'] +include/assert.inc [#1195 @@SESSION.GTID_EXECUTED: '19:1' + '' = '19:1'] +include/assert.inc [#1195 @@SESSION.GTID_OWNED: '19:1' + '' = '19:1'] +include/assert.inc [#1195 @@GLOBAL.GTID_OWNED: '19:1' + '' = '19:1'] +include/assert.inc [#1195 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1196 ==== +[connection server_1_1] +ROLLBACK 2 +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1196 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1'] +include/assert.inc [#1196 @@SESSION.GTID_EXECUTED: '19:1' + '~19:1' = ''] +include/assert.inc [#1196 @@SESSION.GTID_OWNED: '19:1' + '' = '19:1'] +include/assert.inc [#1196 @@GLOBAL.GTID_OWNED: '19:1' + '' = '19:1'] +include/assert.inc [#1196 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1197 ==== +[connection server_1_1] +SAVEPOINT 3 +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1197 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1'] +include/assert.inc [#1197 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1197 @@SESSION.GTID_OWNED: '19:1' + '' = '19:1'] +include/assert.inc [#1197 @@GLOBAL.GTID_OWNED: '19:1' + '' = '19:1'] +include/assert.inc [#1197 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1198 ==== +[connection server_1_1] +INSERT +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1198 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1'] +include/assert.inc [#1198 @@SESSION.GTID_EXECUTED: '' + '19:1' = '19:1'] +include/assert.inc [#1198 @@SESSION.GTID_OWNED: '19:1' + '' = '19:1'] +include/assert.inc [#1198 @@GLOBAL.GTID_OWNED: '19:1' + '' = '19:1'] +include/assert.inc [#1198 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1199 ==== +[connection server_1_1] +SAVEPOINT 4 +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1199 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1'] +include/assert.inc [#1199 @@SESSION.GTID_EXECUTED: '19:1' + '' = '19:1'] +include/assert.inc [#1199 @@SESSION.GTID_OWNED: '19:1' + '' = '19:1'] +include/assert.inc [#1199 @@GLOBAL.GTID_OWNED: '19:1' + '' = '19:1'] +include/assert.inc [#1199 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1200 ==== +[connection server_1_1] +ROLLBACK 3 +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1200 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1'] +include/assert.inc [#1200 @@SESSION.GTID_EXECUTED: '19:1' + '~19:1' = ''] +include/assert.inc [#1200 @@SESSION.GTID_OWNED: '19:1' + '' = '19:1'] +include/assert.inc [#1200 @@GLOBAL.GTID_OWNED: '19:1' + '' = '19:1'] +include/assert.inc [#1200 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1201 ==== +[connection server_1_1] +INSERT +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1201 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1'] +include/assert.inc [#1201 @@SESSION.GTID_EXECUTED: '' + '19:1' = '19:1'] +include/assert.inc [#1201 @@SESSION.GTID_OWNED: '19:1' + '' = '19:1'] +include/assert.inc [#1201 @@GLOBAL.GTID_OWNED: '19:1' + '' = '19:1'] +include/assert.inc [#1201 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1202 ==== +[connection server_1_1] +SAVEPOINT 2 +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1202 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1'] +include/assert.inc [#1202 @@SESSION.GTID_EXECUTED: '19:1' + '' = '19:1'] +include/assert.inc [#1202 @@SESSION.GTID_OWNED: '19:1' + '' = '19:1'] +include/assert.inc [#1202 @@GLOBAL.GTID_OWNED: '19:1' + '' = '19:1'] +include/assert.inc [#1202 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1203 ==== +[connection server_1_1] +ROLLBACK 2 +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1203 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1'] +include/assert.inc [#1203 @@SESSION.GTID_EXECUTED: '19:1' + '' = '19:1'] +include/assert.inc [#1203 @@SESSION.GTID_OWNED: '19:1' + '' = '19:1'] +include/assert.inc [#1203 @@GLOBAL.GTID_OWNED: '19:1' + '' = '19:1'] +include/assert.inc [#1203 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1204 ==== +[connection server_1_1] +ROLLBACK 1 +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1204 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1'] +include/assert.inc [#1204 @@SESSION.GTID_EXECUTED: '19:1' + '~19:1' = ''] +include/assert.inc [#1204 @@SESSION.GTID_OWNED: '19:1' + '' = '19:1'] +include/assert.inc [#1204 @@GLOBAL.GTID_OWNED: '19:1' + '' = '19:1'] +include/assert.inc [#1204 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1' + '' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1'] +include/assert.inc [Binlog was not rotated] +include/assert.inc [Binlog position was not updated] +==== row-id = 1205 ==== +[connection server_1_1] +COMMIT +Warnings: +Warning 1681 '@@SESSION.GTID_EXECUTED' is deprecated and will be removed in a future release. +include/sync_slave_sql_with_master.inc +include/assert.inc [#1205 @@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1' + '19:1' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1,19:1'] +include/assert.inc [#1205 @@SESSION.GTID_EXECUTED: '' + '' = ''] +include/assert.inc [#1205 @@SESSION.GTID_OWNED: '19:1' + '~19:1' = ''] +include/assert.inc [#1205 @@GLOBAL.GTID_OWNED: '19:1' + '~19:1' = ''] +include/assert.inc [#1205 slave:@@GLOBAL.GTID_EXECUTED: '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1' + '19:1' = '1:1:3,2:3-4,4:1,9:1,12:1,13:1,14:1,17:1,19:1'] +include/assert.inc [Something was written to the binlog] +include/assert.inc [The first added event in the binlog should be a Gtid_log_event] +SET GTID_NEXT = 'AUTOMATIC'; +CREATE TABLE t1 (a INT); +SET GTID_NEXT = 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1'; +CREATE TABLE t1 (a INT); +ERROR 42S01: Table 't1' already exists +SET GTID_NEXT = 'AUTOMATIC'; +SET GTID_NEXT = 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1'; +INSERT INTO t VALUES (1); +ERROR 23000: Duplicate entry '1' for key 'PRIMARY' +SET GTID_NEXT = 'AUTOMATIC'; +DROP TABLE t1; +#### Clean up #### + DROP TABLE t_1021; DROP TABLE t_1023;; +DROP TABLE stmts; +DROP TABLE t; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/rpl_gtid_failover.result b/mysql-test/suite/rpl_encryption/r/rpl_gtid_failover.result new file mode 100644 index 000000000000..0c3016386a59 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_gtid_failover.result @@ -0,0 +1,31 @@ +include/rpl_init.inc [topology=1->2->3] +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. + +create table t1 (a int not null auto_increment, b int not null, primary key(a)) engine=innodb; +include/rpl_sync.inc +include/stop_slave.inc +change master to master_port=SERVER_MYPORT_1;; +include/start_slave.inc +insert into t1 values (NULL, 1); +include/sync_slave_sql_with_master.inc +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [server_1:test.t1, server_2:test.t1, server_3:test.t1] +include/stop_slave.inc +insert into t1 values (NULL, 2); +include/sync_slave_sql_with_master.inc +include/stop_slave.inc +change master to master_port=SERVER_MYPORT_2; +include/start_slave.inc +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [server_1:test.t1, server_2:test.t1, server_3:test.t1] +change master to master_port=SERVER_MYPORT_1; +include/start_slave.inc +*** Clean up *** +DROP TABLE t1; +include/rpl_sync.inc +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/rpl_gtid_loaddata_s.result b/mysql-test/suite/rpl_encryption/r/rpl_gtid_loaddata_s.result new file mode 100644 index 000000000000..93ad627bdd5e --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_gtid_loaddata_s.result @@ -0,0 +1,22 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +reset master; +create table test.t1(a int, b int, unique(b)); +load data infile '../../std_data/rpl_loaddata.dat' into table test.t1; +include/sync_slave_sql_with_master.inc +select count(*) from test.t1; +count(*) +2 +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +slave-bin.000001 # Start_encryption # # +slave-bin.000001 # Query # # BEGIN +slave-bin.000001 # Query # # COMMIT +slave-bin.000001 # Query # # BEGIN +slave-bin.000001 # Query # # COMMIT +drop table test.t1; +include/sync_slave_sql_with_master.inc +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/rpl_gtid_mts_relay_log_recovery_auto_pos_on_off.result b/mysql-test/suite/rpl_encryption/r/rpl_gtid_mts_relay_log_recovery_auto_pos_on_off.result new file mode 100644 index 000000000000..7a182d9fed8d --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_gtid_mts_relay_log_recovery_auto_pos_on_off.result @@ -0,0 +1,151 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +[connection slave] +CALL mtr.add_suppression("Recovery from master pos*"); +CALL mtr.add_suppression("Slave SQL.*Duplicate entry.* Error_code: 1062"); +CALL mtr.add_suppression("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state"); +include/stop_slave.inc +CHANGE MASTER TO MASTER_AUTO_POSITION=0; +SET @@global.slave_parallel_workers=4; +SET @@global.relay_log_info_repository='TABLE'; +SET @@global.master_info_repository='TABLE'; +include/start_slave.inc +[connection master] +CREATE DATABASE d1; +CREATE DATABASE d2; +CREATE DATABASE d3; +CREATE DATABASE d4; +CREATE TABLE d1.t1 (a int unique) ENGINE=INNODB; +CREATE TABLE d2.t1 (a int unique) ENGINE=INNODB; +CREATE TABLE d3.t1 (a int unique) ENGINE=INNODB; +CREATE TABLE d4.t1 (a int unique) ENGINE=INNODB; +include/sync_slave_sql_with_master.inc +STOP SLAVE SQL_THREAD; +SET GLOBAL DEBUG='d,flush_after_reading_user_var_event'; +BEGIN; +INSERT INTO d1.t1 VALUES (1); +INSERT INTO d2.t1 VALUES (2); +INSERT INTO d3.t1 VALUES (3); +[connection master] +INSERT INTO d1.t1 VALUES (4); +INSERT INTO d2.t1 VALUES (5); +INSERT INTO d3.t1 VALUES (6); +INSERT INTO d4.t1 VALUES (7); +[connection master1] +BEGIN; +INSERT INTO d1.t1 VALUES (1); +SET @v= 100; +INSERT INTO d1.t1 VALUES (@v); +INSERT INTO d2.t1 VALUES (2); +INSERT INTO d3.t1 VALUES (3); +[connection master] +BEGIN; +INSERT INTO d4.t1 VALUES (8); +[connection master1] +COMMIT; +[connection slave1] +SET DEBUG_SYNC='now WAIT_FOR Reached'; +FLUSH LOGS; +# Let IO thread continue splitting has been done now. +SET DEBUG_SYNC= 'now SIGNAL signal.flush_complete_continue'; +[connection master] +COMMIT; +INSERT INTO d4.t1 VALUES (9); +include/sync_slave_io_with_master.inc +[connection slave1] +START SLAVE SQL_THREAD; +[connection slave] +COMMIT; +include/wait_for_slave_sql_error.inc [errno=1062] +include/stop_slave_io.inc +DELETE FROM d1.t1 where a=1; +DELETE FROM d2.t1 where a=2; +DELETE FROM d3.t1 where a=3; +include/rpl_restart_server.inc [server_number=2 gtids=on parameters: --skip_slave_start=FALSE --relay_log_info_repository=TABLE --master_info_repository=TABLE --sync_master_info=1 --relay-log-recovery=1] +[connection master] +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:d4.t1, slave:d4.t1] +include/diff_tables.inc [master:d3.t1, slave:d3.t1] +include/diff_tables.inc [master:d2.t1, slave:d2.t1] +include/diff_tables.inc [master:d1.t1, slave:d1.t1] +[connection master] +DROP DATABASE d1; +DROP DATABASE d2; +DROP DATABASE d3; +DROP DATABASE d4; +include/sync_slave_sql_with_master.inc +include/rpl_reset.inc +include/stop_slave.inc +CHANGE MASTER TO MASTER_AUTO_POSITION=1; +SET @@global.slave_parallel_workers=4; +SET @@global.relay_log_info_repository='TABLE'; +SET @@global.master_info_repository='TABLE'; +include/start_slave.inc +[connection master] +CREATE DATABASE d1; +CREATE DATABASE d2; +CREATE DATABASE d3; +CREATE DATABASE d4; +CREATE TABLE d1.t1 (a int unique) ENGINE=INNODB; +CREATE TABLE d2.t1 (a int unique) ENGINE=INNODB; +CREATE TABLE d3.t1 (a int unique) ENGINE=INNODB; +CREATE TABLE d4.t1 (a int unique) ENGINE=INNODB; +include/sync_slave_sql_with_master.inc +STOP SLAVE SQL_THREAD; +SET GLOBAL DEBUG='d,flush_after_reading_user_var_event'; +BEGIN; +INSERT INTO d1.t1 VALUES (1); +INSERT INTO d2.t1 VALUES (2); +INSERT INTO d3.t1 VALUES (3); +[connection master] +INSERT INTO d1.t1 VALUES (4); +INSERT INTO d2.t1 VALUES (5); +INSERT INTO d3.t1 VALUES (6); +INSERT INTO d4.t1 VALUES (7); +[connection master1] +BEGIN; +INSERT INTO d1.t1 VALUES (1); +SET @v= 100; +INSERT INTO d1.t1 VALUES (@v); +INSERT INTO d2.t1 VALUES (2); +INSERT INTO d3.t1 VALUES (3); +[connection master] +BEGIN; +INSERT INTO d4.t1 VALUES (8); +[connection master1] +COMMIT; +[connection slave1] +SET DEBUG_SYNC='now WAIT_FOR Reached'; +FLUSH LOGS; +# Let IO thread continue splitting has been done now. +SET DEBUG_SYNC= 'now SIGNAL signal.flush_complete_continue'; +[connection master] +COMMIT; +INSERT INTO d4.t1 VALUES (9); +include/sync_slave_io_with_master.inc +[connection slave1] +START SLAVE SQL_THREAD; +[connection slave] +COMMIT; +include/wait_for_slave_sql_error.inc [errno=1062] +include/stop_slave_io.inc +DELETE FROM d1.t1 where a=1; +DELETE FROM d2.t1 where a=2; +DELETE FROM d3.t1 where a=3; +include/rpl_restart_server.inc [server_number=2 gtids=on parameters: --skip_slave_start=FALSE --relay_log_info_repository=TABLE --master_info_repository=TABLE --sync_master_info=1 --relay-log-recovery=1] +[connection master] +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:d4.t1, slave:d4.t1] +include/diff_tables.inc [master:d3.t1, slave:d3.t1] +include/diff_tables.inc [master:d2.t1, slave:d2.t1] +include/diff_tables.inc [master:d1.t1, slave:d1.t1] +[connection master] +DROP DATABASE d1; +DROP DATABASE d2; +DROP DATABASE d3; +DROP DATABASE d4; +include/sync_slave_sql_with_master.inc +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/rpl_gtid_spanned_trx.result b/mysql-test/suite/rpl_encryption/r/rpl_gtid_spanned_trx.result new file mode 100644 index 000000000000..ac37c343a3fe --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_gtid_spanned_trx.result @@ -0,0 +1,47 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +[connection slave] +include/stop_slave.inc +CHANGE MASTER TO MASTER_AUTO_POSITION= 0; +include/start_slave.inc +[connection master] +CREATE TABLE t1 (c1 INT) ENGINE= InnoDB; +include/sync_slave_sql_with_master.inc +include/stop_slave_sql.inc +# Adding debug point 'stop_io_after_reading_query_log_event' to @@GLOBAL.debug +[connection master] +BEGIN; +INSERT INTO t1 VALUES (1); +INSERT INTO t1 VALUES (2); +INSERT INTO t1 VALUES (3); +COMMIT; +INSERT INTO t1 VALUES (3 + 1); +[connection slave] +include/wait_for_slave_io_to_stop.inc +include/assert.inc [Exactly one GTID should have been retrieved before having all the transaction] +START SLAVE IO_THREAD; +include/wait_for_slave_io_to_stop.inc +include/assert.inc [Exactly one GTID should have been retrieved before having all the transaction] +START SLAVE IO_THREAD; +include/wait_for_slave_io_to_stop.inc +include/assert.inc [Exactly one GTID should have been retrieved before having all the transaction] +START SLAVE IO_THREAD; +include/wait_for_slave_io_to_stop.inc +include/assert.inc [Exactly one GTID should have been retrieved before having all the transaction] +# Removing debug point 'stop_io_after_reading_query_log_event' from @@GLOBAL.debug +START SLAVE IO_THREAD; +[connection master] +include/sync_slave_io_with_master.inc +include/assert.inc [Exactly three GTIDs should have been retrieved from master before restarting] +include/rpl_stop_server.inc [server_number=2] +include/rpl_start_server.inc [server_number=2] +include/start_slave.inc +[connection master] +include/sync_slave_io_with_master.inc +include/assert.inc [Exactly two GTIDs should have been retrieved from master after restarting] +[connection master] +DROP TABLE t1; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/rpl_gtid_sql_until_before_after.result b/mysql-test/suite/rpl_encryption/r/rpl_gtid_sql_until_before_after.result new file mode 100644 index 000000000000..4b5e53d1a18e --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_gtid_sql_until_before_after.result @@ -0,0 +1,100 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +CREATE TABLE t1(c1 INTEGER) ENGINE= Innodb; +include/sync_slave_sql_with_master.inc +[connection slave] +include/stop_slave.inc +[connection master] +INSERT INTO t1 VALUES(2); +INSERT INTO t1 VALUES(3); +INSERT INTO t1 VALUES(4); +INSERT INTO t1 VALUES(5); +INSERT INTO t1 VALUES(6); +INSERT INTO t1 VALUES(7); +INSERT INTO t1 VALUES(8); +INSERT INTO t1 VALUES(9); +INSERT INTO t1 VALUES(10); +[connection slave] +START SLAVE UNTIL SQL_BEFORE_GTIDS= "MASTER_UUID:4-5", MASTER_LOG_FILE= 'foo.bin', MASTER_LOG_POS= 100; +ERROR HY000: Incorrect parameter or combination of parameters for START SLAVE UNTIL +START SLAVE SQL_THREAD UNTIL SQL_BEFORE_GTIDS= "MASTER_UUID:4-5", MASTER_LOG_FILE= 'foo.bin', MASTER_LOG_POS= 100; +ERROR HY000: Incorrect parameter or combination of parameters for START SLAVE UNTIL +START SLAVE IO_THREAD UNTIL SQL_BEFORE_GTIDS= "MASTER_UUID:4-5", MASTER_LOG_FILE= 'foo.bin', MASTER_LOG_POS= 100; +ERROR HY000: Incorrect parameter or combination of parameters for START SLAVE UNTIL +START SLAVE FOO UNTIL SQL_BEFORE_GTIDS= "MASTER_UUID:4-5"; +ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FOO UNTIL SQL_BEFORE_GTIDS= "MASTER_UUID:4-5"' at line 1 +Check that START SLAVE IO_THREAD UNTIL ... maintains old behaviour, condition is ignored. +START SLAVE IO_THREAD UNTIL SQL_BEFORE_GTIDS= "MASTER_UUID:4-5"; +Warnings: +Note 1279 SQL thread is not to be started so UNTIL options are ignored +Wait until IO Thread reads all master binlog and stop slave. +include/wait_for_slave_param.inc [Retrieved_Gtid_Set] +include/stop_slave_io.inc +SQL thread must stop *before* INSERT 4 +START SLAVE SQL_THREAD UNTIL SQL_BEFORE_GTIDS= "MASTER_UUID:4-5"; +include/wait_for_slave_sql_to_stop.inc +include/assert.inc [Rows until 3 in t1 must be replicated now] +SQL thread must stop *after* INSERT 5 +START SLAVE SQL_THREAD UNTIL SQL_AFTER_GTIDS= "MASTER_UUID:4-5"; +include/wait_for_slave_sql_to_stop.inc +include/assert.inc [Rows until 5 in t1 must be replicated now] +SQL thread must stop *before* INSERT 6 +START SLAVE SQL_THREAD, IO_THREAD UNTIL SQL_BEFORE_GTIDS= "MASTER_UUID:2-7"; +include/wait_for_slave_sql_to_stop.inc +include/assert.inc [Rows until 5 in t1 must be replicated now] +SQL thread must stop *after* INSERT 5 +1-5 are already applied so it will stop immediately +START SLAVE SQL_THREAD, IO_THREAD UNTIL SQL_AFTER_GTIDS= "MASTER_UUID:1-5"; +include/wait_for_slave_sql_to_stop.inc +include/assert.inc [Rows until 5 in t1 must be replicated now] +SQL thread must stop *before* INSERT 10 +START SLAVE UNTIL SQL_BEFORE_GTIDS= "MASTER_UUID:10"; +include/wait_for_slave_sql_to_stop.inc +include/assert.inc [Rows until 9 in t1 must be replicated now] +SQL thread must stop *before* INSERT 3-6 +3-6 is already applied so it will stop immediately +START SLAVE UNTIL SQL_BEFORE_GTIDS= "MASTER_UUID:3-6"; +include/wait_for_slave_sql_to_stop.inc +include/assert.inc [Rows until 9 in t1 must be replicated now] +SQL thread must stop *before* INSERT 9 +9 is already applied so it will stop immediately +START SLAVE UNTIL SQL_BEFORE_GTIDS= "MASTER_UUID:9"; +include/wait_for_slave_sql_to_stop.inc +include/assert.inc [Rows until 9 in t1 must be replicated now] +Sync slave with master +include/start_slave.inc +SELECT WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS('MASTER_UUID:10'); +include/assert.inc [Rows until 10 in t1 must be replicated now] +Test WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS function with negative timeout +value. When SQL_MODE is strict, then it will throw +WRONG_ARGUMENTS error. +SET @save_sql_mode=@@SESSION.SQL_MODE; +SET @@SESSION.SQL_MODE="STRICT_ALL_TABLES"; +Warnings: +Warning 3135 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release. +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS('MASTER_UUID:100', -1);; +ERROR HY000: Incorrect arguments to WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS. +When SQL_MODE is non-strict mode, then it will return NULL immediately +without doing any work and generates WRONG_ARGUMENTS warning. +SET @@SESSION.SQL_MODE=""; +SELECT WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS('MASTER_UUID:100', -1);; +WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS('MASTER_UUID:100', -1) +NULL +Warnings: +Warning 1210 Incorrect arguments to WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS. +SET @@SESSION.SQL_MODE=@save_sql_mode; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +Test WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS function with fractional timeout +value. Earlier(before fix), 0.4 is read as integer value '0' and +the function hanged forever (or till all the specified gtids are +executed). Now(after fix) 0.4 will be read as double 0.4 and will waitfor +atleast 0.4 seconds (or till all the specified gtids are executed). +Also check that function returns -1 if the timeout has been exceeded. +include/assert.inc [WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS returns -1 if the timeout has been exceeded.] +DROP TABLE t1; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/rpl_gtid_table_repository_split_trx.result b/mysql-test/suite/rpl_encryption/r/rpl_gtid_table_repository_split_trx.result new file mode 100644 index 000000000000..856df5a2de2f --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_gtid_table_repository_split_trx.result @@ -0,0 +1,17 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +CREATE TABLE t1 (c1 INT) ENGINE= InnoDB; +INSERT INTO t1 VALUES (1); +[connection slave] +include/rpl_receive_event_count.inc [flush after 2 Gtid events] +[connection master] +include/sync_slave_io_with_master.inc +include/start_slave_sql.inc +[connection master] +include/sync_slave_sql_with_master.inc +[connection master] +DROP TABLE t1; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/rpl_gtid_temp_table.result b/mysql-test/suite/rpl_encryption/r/rpl_gtid_temp_table.result new file mode 100644 index 000000000000..4bece5dd9971 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_gtid_temp_table.result @@ -0,0 +1,854 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +CREATE TABLE trans_table1 (i INT) ENGINE=INNODB; +INSERT INTO trans_table1 VALUES (1); +CREATE TABLE trans_table2 (i INT) ENGINE=INNODB; +INSERT INTO trans_table2 VALUES (1); +CREATE TABLE non_trans_table1 (i INT) ENGINE=MYISAM; +INSERT INTO non_trans_table1 VALUES (1); +CREATE TABLE non_trans_table2 (i INT) ENGINE=MYISAM; +INSERT INTO non_trans_table2 VALUES (1); +CREATE FUNCTION func1 () RETURNS varchar(30) CHARSET utf8 +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; +RETURN 0; +END; +SELECT func1(); +func1() +0 +START TRANSACTION; +SELECT func1(); +func1() +0 +COMMIT; +INSERT INTO trans_table2 VALUES (func1()); +UPDATE trans_table2 SET i=func1(); +DELETE FROM trans_table2 WHERE i=func1(); +INSERT INTO non_trans_table2 VALUES (func1()); +UPDATE non_trans_table2 SET i=func1(); +DELETE FROM non_trans_table2 WHERE i=func1(); +DROP FUNCTION func1; +CREATE TRIGGER trigger1 +BEFORE INSERT ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +INSERT INTO trans_table2 VALUES (10); +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER INSERT ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +INSERT INTO trans_table2 VALUES (10); +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE UPDATE ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +UPDATE trans_table2 SET i=12; +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER UPDATE ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +UPDATE trans_table2 SET i=12; +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE DELETE ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +DELETE FROM trans_table2; +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER DELETE ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +DELETE FROM trans_table2; +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE INSERT ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +INSERT INTO non_trans_table2 VALUES (10); +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER INSERT ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +INSERT INTO non_trans_table2 VALUES (10); +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE UPDATE ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +UPDATE non_trans_table2 SET i=12; +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER UPDATE ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +UPDATE non_trans_table2 SET i=12; +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE DELETE ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +DELETE FROM non_trans_table2; +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER DELETE ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +DELETE FROM non_trans_table2; +DROP TRIGGER trigger1; +CREATE FUNCTION func1 () RETURNS varchar(30) CHARSET utf8 +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; +RETURN 0; +END; +SELECT func1(); +func1() +0 +START TRANSACTION; +SELECT func1(); +func1() +0 +COMMIT; +INSERT INTO trans_table2 VALUES (func1()); +UPDATE trans_table2 SET i=func1(); +DELETE FROM trans_table2 WHERE i=func1(); +INSERT INTO non_trans_table2 VALUES (func1()); +UPDATE non_trans_table2 SET i=func1(); +DELETE FROM non_trans_table2 WHERE i=func1(); +DROP FUNCTION func1; +CREATE TRIGGER trigger1 +BEFORE INSERT ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +INSERT INTO trans_table2 VALUES (10); +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER INSERT ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +INSERT INTO trans_table2 VALUES (10); +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE UPDATE ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +UPDATE trans_table2 SET i=12; +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER UPDATE ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +UPDATE trans_table2 SET i=12; +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE DELETE ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +DELETE FROM trans_table2; +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER DELETE ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +DELETE FROM trans_table2; +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE INSERT ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +INSERT INTO non_trans_table2 VALUES (10); +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER INSERT ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +INSERT INTO non_trans_table2 VALUES (10); +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE UPDATE ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +UPDATE non_trans_table2 SET i=12; +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER UPDATE ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +UPDATE non_trans_table2 SET i=12; +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE DELETE ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +DELETE FROM non_trans_table2; +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER DELETE ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +DELETE FROM non_trans_table2; +DROP TRIGGER trigger1; +CREATE FUNCTION func1 () RETURNS varchar(30) CHARSET utf8 +BEGIN +DROP TEMPORARY TABLE IF EXISTS tt1; +RETURN 0; +END; +SELECT func1(); +func1() +0 +START TRANSACTION; +SELECT func1(); +func1() +0 +COMMIT; +INSERT INTO trans_table2 VALUES (func1()); +UPDATE trans_table2 SET i=func1(); +DELETE FROM trans_table2 WHERE i=func1(); +INSERT INTO non_trans_table2 VALUES (func1()); +UPDATE non_trans_table2 SET i=func1(); +DELETE FROM non_trans_table2 WHERE i=func1(); +DROP FUNCTION func1; +CREATE TRIGGER trigger1 +BEFORE INSERT ON trans_table2 FOR EACH ROW +BEGIN +DROP TEMPORARY TABLE IF EXISTS tt1; +END; +INSERT INTO trans_table2 VALUES (10); +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER INSERT ON trans_table2 FOR EACH ROW +BEGIN +DROP TEMPORARY TABLE IF EXISTS tt1; +END; +INSERT INTO trans_table2 VALUES (10); +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE UPDATE ON trans_table2 FOR EACH ROW +BEGIN +DROP TEMPORARY TABLE IF EXISTS tt1; +END; +UPDATE trans_table2 SET i=12; +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER UPDATE ON trans_table2 FOR EACH ROW +BEGIN +DROP TEMPORARY TABLE IF EXISTS tt1; +END; +UPDATE trans_table2 SET i=12; +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE DELETE ON trans_table2 FOR EACH ROW +BEGIN +DROP TEMPORARY TABLE IF EXISTS tt1; +END; +DELETE FROM trans_table2; +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER DELETE ON trans_table2 FOR EACH ROW +BEGIN +DROP TEMPORARY TABLE IF EXISTS tt1; +END; +DELETE FROM trans_table2; +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE INSERT ON non_trans_table2 FOR EACH ROW +BEGIN +DROP TEMPORARY TABLE IF EXISTS tt1; +END; +INSERT INTO non_trans_table2 VALUES (10); +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER INSERT ON non_trans_table2 FOR EACH ROW +BEGIN +DROP TEMPORARY TABLE IF EXISTS tt1; +END; +INSERT INTO non_trans_table2 VALUES (10); +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE UPDATE ON non_trans_table2 FOR EACH ROW +BEGIN +DROP TEMPORARY TABLE IF EXISTS tt1; +END; +UPDATE non_trans_table2 SET i=12; +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER UPDATE ON non_trans_table2 FOR EACH ROW +BEGIN +DROP TEMPORARY TABLE IF EXISTS tt1; +END; +UPDATE non_trans_table2 SET i=12; +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE DELETE ON non_trans_table2 FOR EACH ROW +BEGIN +DROP TEMPORARY TABLE IF EXISTS tt1; +END; +DELETE FROM non_trans_table2; +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER DELETE ON non_trans_table2 FOR EACH ROW +BEGIN +DROP TEMPORARY TABLE IF EXISTS tt1; +END; +DELETE FROM non_trans_table2; +DROP TRIGGER trigger1; +CREATE FUNCTION func1 () RETURNS varchar(30) CHARSET utf8 +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; CREATE TEMPORARY TABLE tt2(i INT) ENGINE=Innodb; DROP TEMPORARY TABLE IF EXISTS tt1; DROP TEMPORARY TABLE IF EXISTS tt2; +RETURN 0; +END; +SELECT func1(); +func1() +0 +START TRANSACTION; +SELECT func1(); +func1() +0 +COMMIT; +INSERT INTO trans_table2 VALUES (func1()); +UPDATE trans_table2 SET i=func1(); +DELETE FROM trans_table2 WHERE i=func1(); +INSERT INTO non_trans_table2 VALUES (func1()); +UPDATE non_trans_table2 SET i=func1(); +DELETE FROM non_trans_table2 WHERE i=func1(); +DROP FUNCTION func1; +CREATE TRIGGER trigger1 +BEFORE INSERT ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; CREATE TEMPORARY TABLE tt2(i INT) ENGINE=Innodb; DROP TEMPORARY TABLE IF EXISTS tt1; DROP TEMPORARY TABLE IF EXISTS tt2; +END; +INSERT INTO trans_table2 VALUES (10); +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER INSERT ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; CREATE TEMPORARY TABLE tt2(i INT) ENGINE=Innodb; DROP TEMPORARY TABLE IF EXISTS tt1; DROP TEMPORARY TABLE IF EXISTS tt2; +END; +INSERT INTO trans_table2 VALUES (10); +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE UPDATE ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; CREATE TEMPORARY TABLE tt2(i INT) ENGINE=Innodb; DROP TEMPORARY TABLE IF EXISTS tt1; DROP TEMPORARY TABLE IF EXISTS tt2; +END; +UPDATE trans_table2 SET i=12; +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER UPDATE ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; CREATE TEMPORARY TABLE tt2(i INT) ENGINE=Innodb; DROP TEMPORARY TABLE IF EXISTS tt1; DROP TEMPORARY TABLE IF EXISTS tt2; +END; +UPDATE trans_table2 SET i=12; +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE DELETE ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; CREATE TEMPORARY TABLE tt2(i INT) ENGINE=Innodb; DROP TEMPORARY TABLE IF EXISTS tt1; DROP TEMPORARY TABLE IF EXISTS tt2; +END; +DELETE FROM trans_table2; +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER DELETE ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; CREATE TEMPORARY TABLE tt2(i INT) ENGINE=Innodb; DROP TEMPORARY TABLE IF EXISTS tt1; DROP TEMPORARY TABLE IF EXISTS tt2; +END; +DELETE FROM trans_table2; +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE INSERT ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; CREATE TEMPORARY TABLE tt2(i INT) ENGINE=Innodb; DROP TEMPORARY TABLE IF EXISTS tt1; DROP TEMPORARY TABLE IF EXISTS tt2; +END; +INSERT INTO non_trans_table2 VALUES (10); +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER INSERT ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; CREATE TEMPORARY TABLE tt2(i INT) ENGINE=Innodb; DROP TEMPORARY TABLE IF EXISTS tt1; DROP TEMPORARY TABLE IF EXISTS tt2; +END; +INSERT INTO non_trans_table2 VALUES (10); +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE UPDATE ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; CREATE TEMPORARY TABLE tt2(i INT) ENGINE=Innodb; DROP TEMPORARY TABLE IF EXISTS tt1; DROP TEMPORARY TABLE IF EXISTS tt2; +END; +UPDATE non_trans_table2 SET i=12; +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER UPDATE ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; CREATE TEMPORARY TABLE tt2(i INT) ENGINE=Innodb; DROP TEMPORARY TABLE IF EXISTS tt1; DROP TEMPORARY TABLE IF EXISTS tt2; +END; +UPDATE non_trans_table2 SET i=12; +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE DELETE ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; CREATE TEMPORARY TABLE tt2(i INT) ENGINE=Innodb; DROP TEMPORARY TABLE IF EXISTS tt1; DROP TEMPORARY TABLE IF EXISTS tt2; +END; +DELETE FROM non_trans_table2; +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER DELETE ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; CREATE TEMPORARY TABLE tt2(i INT) ENGINE=Innodb; DROP TEMPORARY TABLE IF EXISTS tt1; DROP TEMPORARY TABLE IF EXISTS tt2; +END; +DELETE FROM non_trans_table2; +DROP TRIGGER trigger1; +CREATE FUNCTION func1 () RETURNS varchar(30) CHARSET utf8 +BEGIN +INSERT INTO trans_table1 VALUES (12); CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; +RETURN 0; +END; +SELECT func1(); +func1() +0 +START TRANSACTION; +SELECT func1(); +func1() +0 +COMMIT; +INSERT INTO trans_table2 VALUES (func1()); +UPDATE trans_table2 SET i=func1(); +DELETE FROM trans_table2 WHERE i=func1(); +INSERT INTO non_trans_table2 VALUES (func1()); +UPDATE non_trans_table2 SET i=func1(); +DELETE FROM non_trans_table2 WHERE i=func1(); +DROP FUNCTION func1; +CREATE TRIGGER trigger1 +BEFORE INSERT ON trans_table2 FOR EACH ROW +BEGIN +INSERT INTO trans_table1 VALUES (12); CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +INSERT INTO trans_table2 VALUES (10); +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER INSERT ON trans_table2 FOR EACH ROW +BEGIN +INSERT INTO trans_table1 VALUES (12); CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +INSERT INTO trans_table2 VALUES (10); +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE UPDATE ON trans_table2 FOR EACH ROW +BEGIN +INSERT INTO trans_table1 VALUES (12); CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +UPDATE trans_table2 SET i=12; +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER UPDATE ON trans_table2 FOR EACH ROW +BEGIN +INSERT INTO trans_table1 VALUES (12); CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +UPDATE trans_table2 SET i=12; +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE DELETE ON trans_table2 FOR EACH ROW +BEGIN +INSERT INTO trans_table1 VALUES (12); CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +DELETE FROM trans_table2; +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER DELETE ON trans_table2 FOR EACH ROW +BEGIN +INSERT INTO trans_table1 VALUES (12); CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +DELETE FROM trans_table2; +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE INSERT ON non_trans_table2 FOR EACH ROW +BEGIN +INSERT INTO trans_table1 VALUES (12); CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +INSERT INTO non_trans_table2 VALUES (10); +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER INSERT ON non_trans_table2 FOR EACH ROW +BEGIN +INSERT INTO trans_table1 VALUES (12); CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +INSERT INTO non_trans_table2 VALUES (10); +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE UPDATE ON non_trans_table2 FOR EACH ROW +BEGIN +INSERT INTO trans_table1 VALUES (12); CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +UPDATE non_trans_table2 SET i=12; +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER UPDATE ON non_trans_table2 FOR EACH ROW +BEGIN +INSERT INTO trans_table1 VALUES (12); CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +UPDATE non_trans_table2 SET i=12; +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE DELETE ON non_trans_table2 FOR EACH ROW +BEGIN +INSERT INTO trans_table1 VALUES (12); CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +DELETE FROM non_trans_table2; +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER DELETE ON non_trans_table2 FOR EACH ROW +BEGIN +INSERT INTO trans_table1 VALUES (12); CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +DELETE FROM non_trans_table2; +DROP TRIGGER trigger1; +CREATE FUNCTION func1 () RETURNS varchar(30) CHARSET utf8 +BEGIN +INSERT INTO non_trans_table1 VALUES (12); CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; +RETURN 0; +END; +SELECT func1(); +func1() +0 +START TRANSACTION; +SELECT func1(); +func1() +0 +COMMIT; +INSERT INTO trans_table2 VALUES (func1()); +UPDATE trans_table2 SET i=func1(); +DELETE FROM trans_table2 WHERE i=func1(); +INSERT INTO non_trans_table2 VALUES (func1()); +UPDATE non_trans_table2 SET i=func1(); +DELETE FROM non_trans_table2 WHERE i=func1(); +DROP FUNCTION func1; +CREATE TRIGGER trigger1 +BEFORE INSERT ON trans_table2 FOR EACH ROW +BEGIN +INSERT INTO non_trans_table1 VALUES (12); CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +INSERT INTO trans_table2 VALUES (10); +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER INSERT ON trans_table2 FOR EACH ROW +BEGIN +INSERT INTO non_trans_table1 VALUES (12); CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +INSERT INTO trans_table2 VALUES (10); +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE UPDATE ON trans_table2 FOR EACH ROW +BEGIN +INSERT INTO non_trans_table1 VALUES (12); CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +UPDATE trans_table2 SET i=12; +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER UPDATE ON trans_table2 FOR EACH ROW +BEGIN +INSERT INTO non_trans_table1 VALUES (12); CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +UPDATE trans_table2 SET i=12; +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE DELETE ON trans_table2 FOR EACH ROW +BEGIN +INSERT INTO non_trans_table1 VALUES (12); CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +DELETE FROM trans_table2; +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER DELETE ON trans_table2 FOR EACH ROW +BEGIN +INSERT INTO non_trans_table1 VALUES (12); CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +DELETE FROM trans_table2; +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE INSERT ON non_trans_table2 FOR EACH ROW +BEGIN +INSERT INTO non_trans_table1 VALUES (12); CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +INSERT INTO non_trans_table2 VALUES (10); +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER INSERT ON non_trans_table2 FOR EACH ROW +BEGIN +INSERT INTO non_trans_table1 VALUES (12); CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +INSERT INTO non_trans_table2 VALUES (10); +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE UPDATE ON non_trans_table2 FOR EACH ROW +BEGIN +INSERT INTO non_trans_table1 VALUES (12); CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +UPDATE non_trans_table2 SET i=12; +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER UPDATE ON non_trans_table2 FOR EACH ROW +BEGIN +INSERT INTO non_trans_table1 VALUES (12); CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +UPDATE non_trans_table2 SET i=12; +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE DELETE ON non_trans_table2 FOR EACH ROW +BEGIN +INSERT INTO non_trans_table1 VALUES (12); CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +DELETE FROM non_trans_table2; +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER DELETE ON non_trans_table2 FOR EACH ROW +BEGIN +INSERT INTO non_trans_table1 VALUES (12); CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; +END; +DELETE FROM non_trans_table2; +DROP TRIGGER trigger1; +CREATE FUNCTION func1 () RETURNS varchar(30) CHARSET utf8 +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; INSERT INTO non_trans_table1 VALUES (12); +RETURN 0; +END; +SELECT func1(); +func1() +0 +START TRANSACTION; +SELECT func1(); +func1() +0 +COMMIT; +INSERT INTO trans_table2 VALUES (func1()); +UPDATE trans_table2 SET i=func1(); +DELETE FROM trans_table2 WHERE i=func1(); +INSERT INTO non_trans_table2 VALUES (func1()); +UPDATE non_trans_table2 SET i=func1(); +DELETE FROM non_trans_table2 WHERE i=func1(); +DROP FUNCTION func1; +CREATE TRIGGER trigger1 +BEFORE INSERT ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; INSERT INTO non_trans_table1 VALUES (12); +END; +INSERT INTO trans_table2 VALUES (10); +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER INSERT ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; INSERT INTO non_trans_table1 VALUES (12); +END; +INSERT INTO trans_table2 VALUES (10); +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE UPDATE ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; INSERT INTO non_trans_table1 VALUES (12); +END; +UPDATE trans_table2 SET i=12; +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER UPDATE ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; INSERT INTO non_trans_table1 VALUES (12); +END; +UPDATE trans_table2 SET i=12; +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE DELETE ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; INSERT INTO non_trans_table1 VALUES (12); +END; +DELETE FROM trans_table2; +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER DELETE ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; INSERT INTO non_trans_table1 VALUES (12); +END; +DELETE FROM trans_table2; +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE INSERT ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; INSERT INTO non_trans_table1 VALUES (12); +END; +INSERT INTO non_trans_table2 VALUES (10); +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER INSERT ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; INSERT INTO non_trans_table1 VALUES (12); +END; +INSERT INTO non_trans_table2 VALUES (10); +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE UPDATE ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; INSERT INTO non_trans_table1 VALUES (12); +END; +UPDATE non_trans_table2 SET i=12; +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER UPDATE ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; INSERT INTO non_trans_table1 VALUES (12); +END; +UPDATE non_trans_table2 SET i=12; +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE DELETE ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; INSERT INTO non_trans_table1 VALUES (12); +END; +DELETE FROM non_trans_table2; +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER DELETE ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=INNODB; DROP TEMPORARY TABLE IF EXISTS tt1; INSERT INTO non_trans_table1 VALUES (12); +END; +DELETE FROM non_trans_table2; +DROP TRIGGER trigger1; +CREATE FUNCTION func1 () RETURNS varchar(30) CHARSET utf8 +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; INSERT INTO trans_table1 VALUES (12); +RETURN 0; +END; +SELECT func1(); +func1() +0 +START TRANSACTION; +SELECT func1(); +func1() +0 +COMMIT; +INSERT INTO trans_table2 VALUES (func1()); +UPDATE trans_table2 SET i=func1(); +DELETE FROM trans_table2 WHERE i=func1(); +INSERT INTO non_trans_table2 VALUES (func1()); +UPDATE non_trans_table2 SET i=func1(); +DELETE FROM non_trans_table2 WHERE i=func1(); +DROP FUNCTION func1; +CREATE TRIGGER trigger1 +BEFORE INSERT ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; INSERT INTO trans_table1 VALUES (12); +END; +INSERT INTO trans_table2 VALUES (10); +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER INSERT ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; INSERT INTO trans_table1 VALUES (12); +END; +INSERT INTO trans_table2 VALUES (10); +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE UPDATE ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; INSERT INTO trans_table1 VALUES (12); +END; +UPDATE trans_table2 SET i=12; +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER UPDATE ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; INSERT INTO trans_table1 VALUES (12); +END; +UPDATE trans_table2 SET i=12; +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE DELETE ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; INSERT INTO trans_table1 VALUES (12); +END; +DELETE FROM trans_table2; +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER DELETE ON trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; INSERT INTO trans_table1 VALUES (12); +END; +DELETE FROM trans_table2; +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE INSERT ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; INSERT INTO trans_table1 VALUES (12); +END; +INSERT INTO non_trans_table2 VALUES (10); +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER INSERT ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; INSERT INTO trans_table1 VALUES (12); +END; +INSERT INTO non_trans_table2 VALUES (10); +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE UPDATE ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; INSERT INTO trans_table1 VALUES (12); +END; +UPDATE non_trans_table2 SET i=12; +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER UPDATE ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; INSERT INTO trans_table1 VALUES (12); +END; +UPDATE non_trans_table2 SET i=12; +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +BEFORE DELETE ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; INSERT INTO trans_table1 VALUES (12); +END; +DELETE FROM non_trans_table2; +DROP TRIGGER trigger1; +CREATE TRIGGER trigger1 +AFTER DELETE ON non_trans_table2 FOR EACH ROW +BEGIN +CREATE TEMPORARY TABLE tt1(i INT) ENGINE=MyISAM; DROP TEMPORARY TABLE IF EXISTS tt1; INSERT INTO trans_table1 VALUES (12); +END; +DELETE FROM non_trans_table2; +DROP TRIGGER trigger1; +include/sync_slave_sql_with_master.inc +[connection master] +include/diff_tables.inc [master:trans_table1, slave:trans_table1] +include/diff_tables.inc [master:trans_table2, slave:trans_table2] +include/diff_tables.inc [master:non_trans_table1, slave:non_trans_table1] +include/diff_tables.inc [master:non_trans_table2, slave:non_trans_table2] +DROP TABLE trans_table1, trans_table2; +DROP TABLE non_trans_table1, non_trans_table2; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/rpl_gtid_transaction_split_across_relay_logs.result b/mysql-test/suite/rpl_encryption/r/rpl_gtid_transaction_split_across_relay_logs.result new file mode 100644 index 000000000000..b66dd6030c23 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_gtid_transaction_split_across_relay_logs.result @@ -0,0 +1,28 @@ +include/rpl_init.inc [topology=1->2->3] +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection server_1] +CREATE TABLE t1 (i VARCHAR(8192)) ENGINE=MyISAM; +INSERT INTO t1 VALUES(repeat('a',8192)), (repeat('b', 8192)); +[connection server_2] +SET @saved_debug=@@GLOBAL.debug; +SET GLOBAL debug="d,stop_io_after_reading_write_rows_log_event"; +START SLAVE IO_THREAD; +include/wait_for_slave_io_to_stop.inc +SET GLOBAL debug=@saved_debug; +START SLAVE; +[connection server_3] +START SLAVE; +[connection server_1] +include/rpl_sync.inc +include/diff_tables.inc [server_1:t1, server_2:t1, server_3:t1] +[connection server_2] +include/assert.inc [SQL thread position should be updated to after the split transaction] +include/assert.inc [SQL thread file should be updated to after the split transaction] +[connection server_1] +DROP TABLE t1; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/rpl_gtid_validate_slave_gtids.result b/mysql-test/suite/rpl_encryption/r/rpl_gtid_validate_slave_gtids.result new file mode 100644 index 000000000000..6608176ff53f --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_gtid_validate_slave_gtids.result @@ -0,0 +1,40 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +SET GLOBAL GTID_PURGED= "master_uuid:1-2"; +CREATE TABLE t1(i INT); +DROP TABLE t1; +START SLAVE IO_THREAD; +include/wait_for_slave_io_error.inc [errno=1236] +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +Last_IO_Error = 'Got fatal error 1236 from master when reading data from binary log: 'The slave is connecting using CHANGE MASTER TO MASTER_AUTO_POSITION = 1, but the master has purged binary logs containing GTIDs that the slave requires.'' +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET GLOBAL GTID_PURGED= "master_uuid:1-2"; +include/start_slave.inc +include/sync_slave_sql_with_master.inc +include/assert.inc [Slave should be able to get GTID-3 and 4 now.] +call mtr.add_suppression(".*Master has purged binary logs containing GTIDs that the slave requires.*"); +include/rpl_reset.inc +CREATE TABLE t1(i INT); +DROP TABLE t1; +include/stop_slave.inc +FLUSH LOGS; +DELETE FROM mysql.gtid_executed; +Warnings: +Warning 3129 Please do not modify the gtid_executed table. This is a mysql internal system table to store GTIDs for committed transactions. Modifying it can lead to an inconsistent GTID state. +include/rpl_restart_server.inc [server_number=1] +START SLAVE IO_THREAD; +include/wait_for_slave_io_error.inc [errno=1236] +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +Last_IO_Error = 'Got fatal error 1236 from master when reading data from binary log: 'Slave has more GTIDs than the master has, using the master's SERVER_UUID. This may indicate that the end of the binary log was truncated or that the last binary log file was lost, e.g., after a power or disk failure when sync_binlog != 1. The master may or may not have rolled back transactions that were already replica'' +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +call mtr.add_suppression(".*Slave has more GTIDs than the master has.*"); +SET GLOBAL GTID_PURGED= "master_uuid:1-2"; +include/start_slave.inc +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/rpl_gtids_restart_slave_io_lost_trx.result b/mysql-test/suite/rpl_encryption/r/rpl_gtids_restart_slave_io_lost_trx.result new file mode 100644 index 000000000000..6ad5c4cc8706 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_gtids_restart_slave_io_lost_trx.result @@ -0,0 +1,74 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +CREATE TABLE t1(i INT) ENGINE=InnoDB; +FLUSH LOGS; +include/sync_slave_sql_with_master.inc +SET @save_debug=@@global.debug; +SET GLOBAL DEBUG='d,stop_io_after_reading_gtid_log_event'; +BEGIN; +INSERT INTO t1 VALUES (1); +SET @v= 1 * 100; +INSERT INTO t1 VALUES (@v); +COMMIT; +include/wait_for_slave_io_to_stop.inc +SET GLOBAL DEBUG= @save_debug; +include/start_slave_io.inc +INSERT INTO t1 VALUES (1); +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:t1, slave:t1] +SET GLOBAL DEBUG='d,stop_io_after_reading_query_log_event'; +BEGIN; +INSERT INTO t1 VALUES (2); +SET @v= 2 * 100; +INSERT INTO t1 VALUES (@v); +COMMIT; +include/wait_for_slave_io_to_stop.inc +SET GLOBAL DEBUG= @save_debug; +include/start_slave_io.inc +INSERT INTO t1 VALUES (2); +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:t1, slave:t1] +include/stop_slave_sql.inc +SET GLOBAL DEBUG='d,stop_io_after_reading_xid_log_event'; +BEGIN; +INSERT INTO t1 VALUES (3); +SET @v= 3 * 100; +INSERT INTO t1 VALUES (@v); +COMMIT; +include/wait_for_slave_io_to_stop.inc +SET GLOBAL DEBUG= @save_debug; +include/start_slave_io.inc +include/start_slave_sql.inc +INSERT INTO t1 VALUES (3); +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:t1, slave:t1] +BEGIN; +INSERT INTO t1 VALUES (4); +SET @v= 4 * 100; +INSERT INTO t1 VALUES (@v); +COMMIT; +include/sync_slave_sql_with_master.inc +include/stop_slave_io.inc +include/wait_for_slave_io_to_stop.inc +SET GLOBAL DEBUG= @save_debug; +include/start_slave_io.inc +INSERT INTO t1 VALUES (4); +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:t1, slave:t1] +SET GLOBAL DEBUG='d,stop_io_after_reading_user_var_log_event'; +BEGIN; +INSERT INTO t1 VALUES (5); +SET @v= 5 * 100; +INSERT INTO t1 VALUES (@v); +COMMIT; +include/wait_for_slave_io_to_stop.inc +SET GLOBAL DEBUG= @save_debug; +include/start_slave_io.inc +INSERT INTO t1 VALUES (5); +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:t1, slave:t1] +DROP TABLE t1; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/rpl_init_slave_errors.result b/mysql-test/suite/rpl_encryption/r/rpl_init_slave_errors.result new file mode 100644 index 000000000000..eb3ba3c07136 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_init_slave_errors.result @@ -0,0 +1,30 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +stop slave; +reset slave; +SET GLOBAL debug= "d,simulate_io_slave_error_on_init,simulate_sql_slave_error_on_init"; +start slave; +include/wait_for_slave_sql_error.inc [errno=1593] +Last_SQL_Error = 'Fatal error: Failed during slave thread initialization' +SET SESSION sql_log_bin= 0; +call mtr.add_suppression("Failed during slave.* thread initialization"); +SET SESSION sql_log_bin= 1; +include/wait_for_slave_io_error.inc [errno=1593] +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +Last_IO_Error = 'Fatal error: Failed during slave I/O thread initialization ' +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET GLOBAL debug= ""; +reset slave; +SET GLOBAL init_slave= "garbage"; +start slave; +include/wait_for_slave_sql_error.inc [errno=1064] +Last_SQL_Error = 'Slave SQL thread aborted. Can't execute init_slave query,'You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'garbage' at line 1'' +SET GLOBAL init_slave= ""; +include/stop_slave_io.inc +RESET SLAVE; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/rpl_loaddatalocal.result b/mysql-test/suite/rpl_encryption/r/rpl_loaddatalocal.result new file mode 100644 index 000000000000..a949e3de344f --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_loaddatalocal.result @@ -0,0 +1,143 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +create table t1(a int); +select * into outfile 'MYSQLD_DATADIR/rpl_loaddatalocal.select_outfile' from t1; +truncate table t1; +load data local infile 'MYSQLD_DATADIR/rpl_loaddatalocal.select_outfile' into table t1; +include/sync_slave_sql_with_master.inc +select a,count(*) from t1 group by a; +a count(*) +1 10000 +drop table t1; +include/sync_slave_sql_with_master.inc +create table t1(a int); +insert into t1 values (1), (2), (2), (3); +select * into outfile 'MYSQLD_DATADIR/rpl_loaddatalocal.select_outfile' from t1; +drop table t1; +create table t1(a int primary key); +load data local infile 'MYSQLD_DATADIR/rpl_loaddatalocal.select_outfile' into table t1; +Warnings: +Warning 1062 Duplicate entry '2' for key 'PRIMARY' +SELECT * FROM t1 ORDER BY a; +a +1 +2 +3 +SELECT * FROM t1 ORDER BY a; +a +1 +2 +3 +drop table t1; +==== Bug22504 Initialize ==== +[on master] +SET sql_mode='ignore_space'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +CREATE TABLE t1(a int); +insert into t1 values (1), (2), (3), (4); +select * into outfile 'MYSQLD_DATADIR/rpl_loaddatalocal.select_outfile' from t1; +truncate table t1; +load data local infile 'MYSQLD_DATADIR/rpl_loaddatalocal.select_outfile' into table t1; +SELECT * FROM t1 ORDER BY a; +a +1 +2 +3 +4 +[on slave] +include/sync_slave_sql_with_master.inc +SELECT * FROM t1 ORDER BY a; +a +1 +2 +3 +4 +==== Clean up ==== +[on master] +DROP TABLE t1; +[on slave] +include/sync_slave_sql_with_master.inc + +Bug #43746: +"return wrong query string when parse 'load data infile' sql statement" + +[master] +SELECT @@SESSION.sql_mode INTO @old_mode; +SET sql_mode='ignore_space'; +CREATE TABLE t1(a int); +INSERT INTO t1 VALUES (1), (2), (3), (4); +SELECT * INTO OUTFILE 'MYSQLD_DATADIR/bug43746.sql' FROM t1; +TRUNCATE TABLE t1; +LOAD DATA LOCAL INFILE 'MYSQLD_DATADIR/bug43746.sql' INTO TABLE t1; +LOAD/* look mum, with comments in weird places! */DATA/* oh hai */LOCAL INFILE 'MYSQLD_DATADIR/bug43746.sql'/* we are */INTO/* from the internets */TABLE t1; +LOAD DATA/*!10000 LOCAL */INFILE 'MYSQLD_DATADIR/bug43746.sql' INTO TABLE t1; +LOAD DATA LOCAL INFILE 'MYSQLD_DATADIR/bug43746.sql' /*!10000 INTO */ TABLE t1; +LOAD DATA LOCAL INFILE 'MYSQLD_DATADIR/bug43746.sql' /*!10000 INTO TABLE */ t1; +LOAD DATA /*!10000 LOCAL INFILE 'MYSQLD_DATADIR/bug43746.sql' INTO TABLE */ t1; +LOAD DATA/*!10000 LOCAL */INFILE 'MYSQLD_DATADIR/bug43746.sql'/*!10000 INTO*/TABLE t1; +LOAD DATA/*!10000 LOCAL */INFILE 'MYSQLD_DATADIR/bug43746.sql'/* empty */INTO TABLE t1; +LOAD DATA/*!10000 LOCAL */INFILE 'MYSQLD_DATADIR/bug43746.sql' INTO/* empty */TABLE t1; +LOAD/*!99999 special comments that do not expand */DATA/*!99999 code from the future */LOCAL INFILE 'MYSQLD_DATADIR/bug43746.sql'/*!99999 have flux capacitor */INTO/*!99999 will travel */TABLE t1; +SET sql_mode='PIPES_AS_CONCAT,ANSI_QUOTES,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS,STRICT_TRANS_TABLES,STRICT_ALL_TABLES,TRADITIONAL,NO_AUTO_CREATE_USER'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +LOAD DATA LOCAL INFILE 'MYSQLD_DATADIR/bug43746.sql' INTO TABLE t1; +[slave] +include/sync_slave_sql_with_master.inc + +Bug #59267: +"LOAD DATA LOCAL INFILE not executed on slave with SBR" + +[master] +SELECT * INTO OUTFILE 'MYSQLD_DATADIR/bug59267.sql' FROM t1; +TRUNCATE TABLE t1; +LOAD DATA LOCAL INFILE 'MYSQLD_DATADIR/bug59267.sql' INTO TABLE t1; +SELECT 'Master', COUNT(*) FROM t1; +Master COUNT(*) +Master 44 +[slave] +include/sync_slave_sql_with_master.inc +SELECT 'Slave', COUNT(*) FROM t1; +Slave COUNT(*) +Slave 44 +[master] +DROP TABLE t1; +SET SESSION sql_mode=@old_mode; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +[slave] +include/sync_slave_sql_with_master.inc + +Bug #60580/#11902767: +"statement improperly replicated crashes slave sql thread" + +[master] +CREATE TABLE t1(f1 INT, f2 INT); +CREATE TABLE t2(f1 INT, f2 TIMESTAMP); +INSERT INTO t2 VALUES(1, '2011-03-22 21:01:28'); +INSERT INTO t2 VALUES(2, '2011-03-21 21:01:28'); +INSERT INTO t2 VALUES(3, '2011-03-20 21:01:28'); +CREATE TABLE t3 AS SELECT * FROM t2; +CREATE VIEW v1 AS SELECT * FROM t2 +WHERE f1 IN (SELECT f1 FROM t3 WHERE (t3.f2 IS NULL)); +SELECT 1 INTO OUTFILE 'MYSQLD_DATADIR/bug60580.csv' FROM DUAL; +LOAD DATA LOCAL INFILE 'MYSQLD_DATADIR/bug60580.csv' INTO TABLE t1 (@f1) SET f2 = (SELECT f1 FROM v1 WHERE f1=@f1); +SELECT * FROM t1; +f1 f2 +NULL NULL +[slave] +include/sync_slave_sql_with_master.inc +SELECT * FROM t1; +f1 f2 +NULL NULL +[master] +DROP VIEW v1; +DROP TABLE t1, t2, t3; +[slave] +include/sync_slave_sql_with_master.inc +include/rpl_end.inc +# End of 5.1 tests diff --git a/mysql-test/suite/rpl_encryption/r/rpl_loadfile.result b/mysql-test/suite/rpl_encryption/r/rpl_loadfile.result new file mode 100644 index 000000000000..b370ee2b68cf --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_loadfile.result @@ -0,0 +1,244 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +DROP PROCEDURE IF EXISTS test.p1; +DROP TABLE IF EXISTS test.t1; +CREATE TABLE test.t1 (a INT, blob_column LONGBLOB, PRIMARY KEY(a)); +INSERT INTO test.t1 VALUES(1,'test'); +UPDATE test.t1 SET blob_column=LOAD_FILE('../../std_data/words2.dat') WHERE a=1; +create procedure test.p1() +begin +INSERT INTO test.t1 VALUES(2,'test'); +UPDATE test.t1 SET blob_column=LOAD_FILE('../../std_data/words2.dat') WHERE a=2; +end| +CALL test.p1(); +SELECT * FROM test.t1 ORDER BY blob_column; +a blob_column +1 abase +abased +abasement +abasements +abases +abash +abashed +abashes +abashing +abasing +abate +abated +abatement +abatements +abater +abates +abating +Abba +abbe +abbey +abbeys +abbot +abbots +Abbott +abbreviate +abbreviated +abbreviates +abbreviating +abbreviation +abbreviations +Abby +abdomen +abdomens +abdominal +abduct +abducted +abduction +abductions +abductor +abductors +abducts +Abe +abed +Abel +Abelian +Abelson +Aberdeen +Abernathy +aberrant +aberration + +2 abase +abased +abasement +abasements +abases +abash +abashed +abashes +abashing +abasing +abate +abated +abatement +abatements +abater +abates +abating +Abba +abbe +abbey +abbeys +abbot +abbots +Abbott +abbreviate +abbreviated +abbreviates +abbreviating +abbreviation +abbreviations +Abby +abdomen +abdomens +abdominal +abduct +abducted +abduction +abductions +abductor +abductors +abducts +Abe +abed +Abel +Abelian +Abelson +Aberdeen +Abernathy +aberrant +aberration + +include/sync_slave_sql_with_master.inc +SELECT * FROM test.t1 ORDER BY blob_column; +a blob_column +1 abase +abased +abasement +abasements +abases +abash +abashed +abashes +abashing +abasing +abate +abated +abatement +abatements +abater +abates +abating +Abba +abbe +abbey +abbeys +abbot +abbots +Abbott +abbreviate +abbreviated +abbreviates +abbreviating +abbreviation +abbreviations +Abby +abdomen +abdomens +abdominal +abduct +abducted +abduction +abductions +abductor +abductors +abducts +Abe +abed +Abel +Abelian +Abelson +Aberdeen +Abernathy +aberrant +aberration + +2 abase +abased +abasement +abasements +abases +abash +abashed +abashes +abashing +abasing +abate +abated +abatement +abatements +abater +abates +abating +Abba +abbe +abbey +abbeys +abbot +abbots +Abbott +abbreviate +abbreviated +abbreviates +abbreviating +abbreviation +abbreviations +Abby +abdomen +abdomens +abdominal +abduct +abducted +abduction +abductions +abductor +abductors +abducts +Abe +abed +Abel +Abelian +Abelson +Aberdeen +Abernathy +aberrant +aberration + +DROP PROCEDURE IF EXISTS test.p1; +DROP TABLE test.t1; +include/sync_slave_sql_with_master.inc +include/rpl_reset.inc +SELECT repeat('x',20) INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/bug_39701.data'; +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 (t text); +CREATE PROCEDURE p(file varchar(4096)) +BEGIN +INSERT INTO t1 VALUES (LOAD_FILE(file)); +END| +include/stop_slave.inc +CALL p('MYSQLTEST_VARDIR/tmp/bug_39701.data'); +include/start_slave.inc +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:t1, slave:t1] +DROP TABLE t1; +DROP PROCEDURE p; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/rpl_lost_events_on_rotate.result b/mysql-test/suite/rpl_encryption/r/rpl_lost_events_on_rotate.result new file mode 100644 index 000000000000..1dbc990089d7 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_lost_events_on_rotate.result @@ -0,0 +1,18 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +SET @debug_saved= @@GLOBAL.DEBUG; +CREATE TABLE t (i INT); +SET GLOBAL DEBUG= "d,wait_after_binlog_EOF"; +INSERT INTO t VALUES (1); +INSERT INTO t VALUES (2); +FLUSH LOGS; +SET DEBUG_SYNC= 'now SIGNAL signal.rotate_finished'; +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:t,slave:t] +SET @@GLOBAL.DEBUG= @debug_saved; +SET DEBUG_SYNC= 'RESET'; +DROP TABLE t; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/rpl_mixed_binlog_max_cache_size.result b/mysql-test/suite/rpl_encryption/r/rpl_mixed_binlog_max_cache_size.result new file mode 100644 index 000000000000..1e162f01f1ed --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_mixed_binlog_max_cache_size.result @@ -0,0 +1,200 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT"); +call mtr.add_suppression("Option binlog_cache_size "); +call mtr.add_suppression("Slave SQL for channel '': The incident LOST_EVENTS occured on the master."); +call mtr.add_suppression("The content of the statement cache is corrupted " + "while writing a rollback record of the transaction " + "to the binary log. An incident event has been " + "written to the binary log which will stop the " + "slaves."); +call mtr.add_suppression("Error happend while resetting the transaction " + "cache for a rolled back transaction or a single " + "statement not inside a transaction. An incident " + "event has been written to the binary log which " + "will stop the slaves."); +SET GLOBAL max_binlog_cache_size = 4096; +Warnings: +Warning 1738 Option binlog_cache_size (32768) is greater than max_binlog_cache_size (4096); setting binlog_cache_size equal to max_binlog_cache_size. +SET GLOBAL binlog_cache_size = 4096; +SET GLOBAL max_binlog_stmt_cache_size = 4096; +Warnings: +Warning 1745 Option binlog_stmt_cache_size (32768) is greater than max_binlog_stmt_cache_size (4096); setting binlog_stmt_cache_size equal to max_binlog_stmt_cache_size. +SET GLOBAL binlog_stmt_cache_size = 4096; +CREATE TABLE t1(a INT PRIMARY KEY, data VARCHAR(30000)) ENGINE=Innodb; +CREATE TABLE t2(a INT PRIMARY KEY, data VARCHAR(30000)) ENGINE=MyIsam; +CREATE TABLE t3(a INT PRIMARY KEY, data VARCHAR(30000)) ENGINE=Innodb; +###### 1 - SINGLE STATEMENT ###### +*** Single statement on transactional table *** +Got one of the listed errors +*** Single statement on non-transactional table *** +Got one of the listed errors +include/wait_for_slave_sql_error_and_skip.inc [errno=1590] +*** Single statement on both transactional and non-transactional tables. *** +Got one of the listed errors +include/wait_for_slave_sql_error_and_skip.inc [errno=1590] +include/diff_tables.inc [master:t1,slave:t1] +######### 2 - BEGIN - IMPLICIT COMMIT by DDL ######### +TRUNCATE TABLE t1; +TRUNCATE TABLE t2; +TRUNCATE TABLE t3; +BEGIN; +Got one of the listed errors +Got one of the listed errors +Got one of the listed errors +BEGIN; +Got one of the listed errors +Got one of the listed errors +BEGIN; +Got one of the listed errors +Got one of the listed errors +include/diff_tables.inc [master:t1,slave:t1] +###### 3 - BEGIN - COMMIT ###### +TRUNCATE TABLE t1; +TRUNCATE TABLE t2; +TRUNCATE TABLE t3; +BEGIN; +Got one of the listed errors +Got one of the listed errors +Got one of the listed errors +COMMIT; +include/diff_tables.inc [master:t1,slave:t1] +####### 4 - BEGIN - ROLLBACK ####### +TRUNCATE TABLE t1; +TRUNCATE TABLE t2; +TRUNCATE TABLE t3; +BEGIN; +Got one of the listed errors +Got one of the listed errors +Got one of the listed errors +ROLLBACK; +Warnings: +Warning 1196 Some non-transactional changed tables couldn't be rolled back +include/diff_tables.inc [master:t1,slave:t1] +###### 5 - PROCEDURE ####### +TRUNCATE TABLE t1; +TRUNCATE TABLE t2; +TRUNCATE TABLE t3; +CREATE PROCEDURE p1(pd VARCHAR(30000)) +BEGIN +INSERT INTO t1 (a, data) VALUES (1, pd); +INSERT INTO t1 (a, data) VALUES (2, pd); +INSERT INTO t1 (a, data) VALUES (3, pd); +INSERT INTO t1 (a, data) VALUES (4, pd); +INSERT INTO t1 (a, data) VALUES (5, 's'); +END// +TRUNCATE TABLE t1; +TRUNCATE TABLE t1; +BEGIN; +Got one of the listed errors +COMMIT; +TRUNCATE TABLE t1; +BEGIN; +Got one of the listed errors +ROLLBACK; +include/diff_tables.inc [master:t1,slave:t1] +####### 6 - XID ###### +TRUNCATE TABLE t1; +TRUNCATE TABLE t2; +TRUNCATE TABLE t3; +BEGIN; +Got one of the listed errors +Got one of the listed errors +Got one of the listed errors +ROLLBACK TO sv; +Warnings: +Warning 1196 Some non-transactional changed tables couldn't be rolled back +COMMIT; +include/diff_tables.inc [master:t1,slave:t1] +####### 7 - NON-TRANS TABLE ####### +TRUNCATE TABLE t1; +TRUNCATE TABLE t2; +TRUNCATE TABLE t3; +BEGIN; +Got one of the listed errors +Got one of the listed errors +Got one of the listed errors +COMMIT; +BEGIN; +Got one of the listed errors +COMMIT; +include/diff_tables.inc [master:t1,slave:t1] +######### 8 - Bug#55375(Regression Bug) Transaction bigger than ########## +######### max_binlog_cache_size crashes slave ########## +# [ On Slave ] +SET GLOBAL max_binlog_cache_size = 4096; +Warnings: +Warning 1738 Option binlog_cache_size (32768) is greater than max_binlog_cache_size (4096); setting binlog_cache_size equal to max_binlog_cache_size. +SET GLOBAL binlog_cache_size = 4096; +SET GLOBAL max_binlog_stmt_cache_size = 4096; +Warnings: +Warning 1745 Option binlog_stmt_cache_size (32768) is greater than max_binlog_stmt_cache_size (4096); setting binlog_stmt_cache_size equal to max_binlog_stmt_cache_size. +SET GLOBAL binlog_stmt_cache_size = 4096; +include/stop_slave.inc +include/start_slave.inc +CALL mtr.add_suppression("Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage.*"); +CALL mtr.add_suppression("Multi-statement transaction required more than 'max_binlog_stmt_cache_size' bytes of storage.*"); +CALL mtr.add_suppression("Writing one row to the row-based binary log failed.*"); +CALL mtr.add_suppression("Slave SQL.*The incident LOST_EVENTS occured on the master. Message: error writing to the binary log"); +call mtr.add_suppression("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state"); +TRUNCATE t1; +SET GLOBAL max_binlog_cache_size= ORIGINAL_VALUE; +SET GLOBAL binlog_cache_size= ORIGINAL_VALUE; +SET GLOBAL max_binlog_stmt_cache_size= ORIGINAL_VALUE; +SET GLOBAL binlog_stmt_cache_size= ORIGINAL_VALUE; +BEGIN; +Repeat statement 'INSERT INTO t1 VALUES($n, repeat("a", 32))' 128 times +COMMIT; +include/wait_for_slave_sql_error.inc [errno=1534,1197] +SELECT count(*) FROM t1; +count(*) +0 +include/show_binlog_events.inc +SET GLOBAL max_binlog_cache_size= ORIGINAL_VALUE; +SET GLOBAL binlog_cache_size= ORIGINAL_VALUE; +SET GLOBAL max_binlog_stmt_cache_size= ORIGINAL_VALUE; +SET GLOBAL binlog_stmt_cache_size= ORIGINAL_VALUE; +include/stop_slave.inc +include/start_slave.inc +SELECT count(*) FROM t1; +count(*) +128 +######## CHECK MAX_BINLOG_CACHE_SIZE and BINLOG_CACHE_SIZE ######### +SET @@GLOBAL.MAX_BINLOG_CACHE_SIZE= 8192; +Warnings: +Warning 1738 Option binlog_cache_size (32768) is greater than max_binlog_cache_size (8192); setting binlog_cache_size equal to max_binlog_cache_size. +SHOW VARIABLES LIKE 'MAX_BINLOG_CACHE_SIZE'; +Variable_name Value +max_binlog_cache_size 8192 +SHOW VARIABLES LIKE 'BINLOG_CACHE_SIZE'; +Variable_name Value +binlog_cache_size 8192 +SET @@GLOBAL.BINLOG_CACHE_SIZE= 16384; +Warnings: +Warning 1738 Option binlog_cache_size (16384) is greater than max_binlog_cache_size (8192); setting binlog_cache_size equal to max_binlog_cache_size. +SHOW VARIABLES LIKE 'MAX_BINLOG_CACHE_SIZE'; +Variable_name Value +max_binlog_cache_size 8192 +SHOW VARIABLES LIKE 'BINLOG_CACHE_SIZE'; +Variable_name Value +binlog_cache_size 8192 +SET @@GLOBAL.MAX_BINLOG_CACHE_SIZE= 4096; +Warnings: +Warning 1738 Option binlog_cache_size (8192) is greater than max_binlog_cache_size (4096); setting binlog_cache_size equal to max_binlog_cache_size. +SHOW VARIABLES LIKE 'MAX_BINLOG_CACHE_SIZE'; +Variable_name Value +max_binlog_cache_size 4096 +SHOW VARIABLES LIKE 'BINLOG_CACHE_SIZE'; +Variable_name Value +binlog_cache_size 4096 +######### CLEAN ######### +DROP TABLE t1; +DROP TABLE t2; +DROP TABLE t3; +DROP TABLE IF EXISTS t4; +DROP TABLE t5; +DROP PROCEDURE p1; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/rpl_mts_database_transaction_retry.result b/mysql-test/suite/rpl_encryption/r/rpl_mts_database_transaction_retry.result new file mode 100644 index 000000000000..52042f1148cb --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_mts_database_transaction_retry.result @@ -0,0 +1,137 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +# +# Initialization the test +# +CREATE DATABASE db1; +CREATE DATABASE db2; +CREATE TABLE db1.t1(c1 INT PRIMARY KEY, c2 VARCHAR(4096)) ENGINE=InnoDB; +CREATE TABLE db1.t2(c1 INT PRIMARY KEY, c2 VARCHAR(4096)) ENGINE=InnoDB; +CREATE TABLE db2.t1(c1 INT PRIMARY KEY, c2 VARCHAR(4096)) ENGINE=InnoDB; +INSERT INTO db1.t1 VALUES(1, NULL), (10, NULL), (100, NULL); +INSERT INTO db1.t2 VALUES(1, NULL), (10, NULL), (100, NULL); +INSERT INTO db2.t1 VALUES(1, NULL), (10, NULL), (100, NULL); +include/sync_slave_sql_with_master.inc +CALL mtr.add_suppression("Slave SQL for channel '':.*Lock wait timeout exceeded.*"); +CALL mtr.add_suppression("Slave SQL for channel '': Worker . failed executing transaction.*"); +CALL mtr.add_suppression("Slave SQL for channel '': .*Error_code: 1756"); +CALL mtr.add_suppression("Slave SQL for channel '': worker thread retried transaction.*"); +SET @saved_innodb_lock_wait_timeout = @@GLOBAL.innodb_lock_wait_timeout; +SET @saved_slave_parallel_workers = @@GLOBAL.slave_parallel_workers; +SET @saved_slave_parallel_type = @@GLOBAL.slave_parallel_type; +SET @saved_max_relay_log_size = @@GLOBAL.max_relay_log_size; +SET @saved_slave_transaction_retries = @@GLOBAL.slave_transaction_retries; +SET GLOBAL innodb_lock_wait_timeout = 1; +SET GLOBAL slave_parallel_workers = 2; +SET GLOBAL max_relay_log_size = 4096; +include/stop_slave_sql.inc +SET GLOBAL slave_parallel_type = "DATABASE"; +include/start_slave_sql.inc +# +# Case 1: slave will stop if slave_transaction_retries is 0 +# +SET GLOBAL slave_transaction_retries = 0; +BEGIN; +SELECT c1 FROM db1.t1 FOR UPDATE; +c1 +1 +10 +100 +[connection master] +INSERT INTO db1.t1 VALUES(2, NULL); +INSERT INTO db2.t1 VALUES(2, NULL); +include/save_master_pos.inc +[connection slave] +include/wait_for_slave_sql_error.inc [errno=1205] +include/assert.inc [Value 2 is not in db1.t1.] +ROLLBACK; +# +# Case 2: Slave will stop after retrying a transaction +# slave_transaction_retries times. +# +SET GLOBAL slave_transaction_retries = 2; +include/start_slave_sql.inc +include/sync_slave_sql.inc +BEGIN; +SELECT c1 FROM db1.t2 FOR UPDATE; +c1 +1 +10 +100 +[connection master] +BEGIN; +INSERT INTO db1.t1 VALUES(20, NULL); +INSERT INTO db1.t2 VALUES(20, NULL); +COMMIT; +INSERT INTO db2.t1 VALUES(20, NULL); +include/save_master_pos.inc +[connection slave] +include/wait_for_slave_sql_error.inc [errno=1205] +include/assert.inc [Value 20 is not in db1.t1.] +ROLLBACK; +# +# Case 3: Slave worker will not stop after retring a transaction +# sucessfully. +# +SET GLOBAL slave_transaction_retries = 10; +include/start_slave_sql.inc +include/sync_slave_sql.inc +include/check_slave_no_error.inc +BEGIN; +SELECT c1 FROM db1.t2 FOR UPDATE; +c1 +1 +10 +20 +100 +[connection master] +BEGIN; +# INSERT INTO db1.t1 VALUES(30, 4096'a') +# INSERT INTO db1.t1 VALUES(31, 4096'a') +SET @str= 'abc'; +INSERT INTO db1.t2 VALUES(30, @str); +COMMIT; +INSERT INTO db2.t1 VALUES(30, NULL); +include/save_master_pos.inc +[connection slave] +include/check_slave_no_error.inc +ROLLBACK; +include/sync_slave_sql.inc +include/check_slave_no_error.inc +include/rpl_diff.inc +include/rpl_diff.inc +include/rpl_diff.inc +[connection master] +INSERT INTO db1.t1 VALUES(40, NULL); +INSERT INTO db2.t1 VALUES(40, NULL); +include/sync_slave_sql_with_master.inc +# +# Case 4: Non-temporary error will stop slave workers without retrying +# +INSERT INTO db1.t1 VALUES(50, NULL); +[connection master] +INSERT INTO db1.t1 VALUES(50, NULL); +include/save_master_pos.inc +[connection slave] +include/wait_for_slave_sql_error.inc [errno=1062] +include/assert.inc [slave_retried_transactions should not increase] +DELETE FROM db1.t1 WHERE c1 = 50; +include/start_slave_sql.inc +include/sync_slave_sql.inc +# +# Cleanup +# +SET GLOBAL innodb_lock_wait_timeout = @saved_innodb_lock_wait_timeout; +SET GLOBAL slave_parallel_workers = @saved_slave_parallel_workers; +SET GLOBAL max_relay_log_size = @saved_max_relay_log_size; +SET GLOBAL slave_transaction_retries = @saved_slave_transaction_retries; +include/stop_slave_sql.inc +SET GLOBAL slave_parallel_type= @saved_slave_parallel_type; +include/start_slave_sql.inc +[connection master] +DROP DATABASE db1; +DROP DATABASE db2; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/rpl_mts_execute_partial_trx_with_auto_pos_off.result b/mysql-test/suite/rpl_encryption/r/rpl_mts_execute_partial_trx_with_auto_pos_off.result new file mode 100644 index 000000000000..53f4fa1bc3d0 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_mts_execute_partial_trx_with_auto_pos_off.result @@ -0,0 +1,26 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +[connection slave] +include/stop_slave.inc +change master to master_auto_position=0; +include/start_slave.inc +[connection master] +CREATE TABLE t1(i INT) ENGINE=InnoDB; +FLUSH LOGS; +include/sync_slave_sql_with_master.inc +SET @save_debug=@@global.debug; +SET GLOBAL DEBUG='d,stop_io_after_reading_table_map_event'; +[connection master] +INSERT INTO t1 VALUES (1); +[connection slave] +include/wait_for_slave_io_to_stop.inc +SET GLOBAL DEBUG= @save_debug; +include/start_slave_io.inc +[connection master] +include/sync_slave_sql_with_master.inc +[connection master] +DROP TABLE t1; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/rpl_mts_execute_partial_trx_with_auto_pos_on.result b/mysql-test/suite/rpl_encryption/r/rpl_mts_execute_partial_trx_with_auto_pos_on.result new file mode 100644 index 000000000000..3f20f7685bff --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_mts_execute_partial_trx_with_auto_pos_on.result @@ -0,0 +1,26 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +[connection slave] +include/stop_slave.inc +change master to master_auto_position=1; +include/start_slave.inc +[connection master] +CREATE TABLE t1(i INT) ENGINE=InnoDB; +FLUSH LOGS; +include/sync_slave_sql_with_master.inc +SET @save_debug=@@global.debug; +SET GLOBAL DEBUG='d,stop_io_after_reading_table_map_event'; +[connection master] +INSERT INTO t1 VALUES (1); +[connection slave] +include/wait_for_slave_io_to_stop.inc +SET GLOBAL DEBUG= @save_debug; +include/start_slave_io.inc +[connection master] +include/sync_slave_sql_with_master.inc +[connection master] +DROP TABLE t1; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/rpl_mts_gtids_restart_slave_io_lost_trx.result b/mysql-test/suite/rpl_encryption/r/rpl_mts_gtids_restart_slave_io_lost_trx.result new file mode 100644 index 000000000000..6ad5c4cc8706 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_mts_gtids_restart_slave_io_lost_trx.result @@ -0,0 +1,74 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +CREATE TABLE t1(i INT) ENGINE=InnoDB; +FLUSH LOGS; +include/sync_slave_sql_with_master.inc +SET @save_debug=@@global.debug; +SET GLOBAL DEBUG='d,stop_io_after_reading_gtid_log_event'; +BEGIN; +INSERT INTO t1 VALUES (1); +SET @v= 1 * 100; +INSERT INTO t1 VALUES (@v); +COMMIT; +include/wait_for_slave_io_to_stop.inc +SET GLOBAL DEBUG= @save_debug; +include/start_slave_io.inc +INSERT INTO t1 VALUES (1); +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:t1, slave:t1] +SET GLOBAL DEBUG='d,stop_io_after_reading_query_log_event'; +BEGIN; +INSERT INTO t1 VALUES (2); +SET @v= 2 * 100; +INSERT INTO t1 VALUES (@v); +COMMIT; +include/wait_for_slave_io_to_stop.inc +SET GLOBAL DEBUG= @save_debug; +include/start_slave_io.inc +INSERT INTO t1 VALUES (2); +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:t1, slave:t1] +include/stop_slave_sql.inc +SET GLOBAL DEBUG='d,stop_io_after_reading_xid_log_event'; +BEGIN; +INSERT INTO t1 VALUES (3); +SET @v= 3 * 100; +INSERT INTO t1 VALUES (@v); +COMMIT; +include/wait_for_slave_io_to_stop.inc +SET GLOBAL DEBUG= @save_debug; +include/start_slave_io.inc +include/start_slave_sql.inc +INSERT INTO t1 VALUES (3); +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:t1, slave:t1] +BEGIN; +INSERT INTO t1 VALUES (4); +SET @v= 4 * 100; +INSERT INTO t1 VALUES (@v); +COMMIT; +include/sync_slave_sql_with_master.inc +include/stop_slave_io.inc +include/wait_for_slave_io_to_stop.inc +SET GLOBAL DEBUG= @save_debug; +include/start_slave_io.inc +INSERT INTO t1 VALUES (4); +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:t1, slave:t1] +SET GLOBAL DEBUG='d,stop_io_after_reading_user_var_log_event'; +BEGIN; +INSERT INTO t1 VALUES (5); +SET @v= 5 * 100; +INSERT INTO t1 VALUES (@v); +COMMIT; +include/wait_for_slave_io_to_stop.inc +SET GLOBAL DEBUG= @save_debug; +include/start_slave_io.inc +INSERT INTO t1 VALUES (5); +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:t1, slave:t1] +DROP TABLE t1; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/rpl_mts_logical_clock_transaction_retry.result b/mysql-test/suite/rpl_encryption/r/rpl_mts_logical_clock_transaction_retry.result new file mode 100644 index 000000000000..2e5d0ae8a82a --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_mts_logical_clock_transaction_retry.result @@ -0,0 +1,138 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +SET DEBUG = "d,set_commit_parent_100"; +# +# Initialization the test +# +CREATE DATABASE db1; +CREATE DATABASE db2; +CREATE TABLE db1.t1(c1 INT PRIMARY KEY, c2 VARCHAR(4096)) ENGINE=InnoDB; +CREATE TABLE db1.t2(c1 INT PRIMARY KEY, c2 VARCHAR(4096)) ENGINE=InnoDB; +CREATE TABLE db2.t1(c1 INT PRIMARY KEY, c2 VARCHAR(4096)) ENGINE=InnoDB; +INSERT INTO db1.t1 VALUES(1, NULL), (10, NULL), (100, NULL); +INSERT INTO db1.t2 VALUES(1, NULL), (10, NULL), (100, NULL); +INSERT INTO db2.t1 VALUES(1, NULL), (10, NULL), (100, NULL); +include/sync_slave_sql_with_master.inc +CALL mtr.add_suppression("Slave SQL for channel '':.*Lock wait timeout exceeded.*"); +CALL mtr.add_suppression("Slave SQL for channel '': Worker . failed executing transaction.*"); +CALL mtr.add_suppression("Slave SQL for channel '': .*Error_code: 1756"); +CALL mtr.add_suppression("Slave SQL for channel '': worker thread retried transaction.*"); +SET @saved_innodb_lock_wait_timeout = @@GLOBAL.innodb_lock_wait_timeout; +SET @saved_slave_parallel_workers = @@GLOBAL.slave_parallel_workers; +SET @saved_slave_parallel_type = @@GLOBAL.slave_parallel_type; +SET @saved_max_relay_log_size = @@GLOBAL.max_relay_log_size; +SET @saved_slave_transaction_retries = @@GLOBAL.slave_transaction_retries; +SET GLOBAL innodb_lock_wait_timeout = 1; +SET GLOBAL slave_parallel_workers = 2; +SET GLOBAL max_relay_log_size = 4096; +include/stop_slave_sql.inc +SET GLOBAL slave_parallel_type = "LOGICAL_CLOCK"; +include/start_slave_sql.inc +# +# Case 1: slave will stop if slave_transaction_retries is 0 +# +SET GLOBAL slave_transaction_retries = 0; +BEGIN; +SELECT c1 FROM db1.t1 FOR UPDATE; +c1 +1 +10 +100 +[connection master] +INSERT INTO db1.t1 VALUES(2, NULL); +INSERT INTO db2.t1 VALUES(2, NULL); +include/save_master_pos.inc +[connection slave] +include/wait_for_slave_sql_error.inc [errno=1205] +include/assert.inc [Value 2 is not in db1.t1.] +ROLLBACK; +# +# Case 2: Slave will stop after retrying a transaction +# slave_transaction_retries times. +# +SET GLOBAL slave_transaction_retries = 2; +include/start_slave_sql.inc +include/sync_slave_sql.inc +BEGIN; +SELECT c1 FROM db1.t2 FOR UPDATE; +c1 +1 +10 +100 +[connection master] +BEGIN; +INSERT INTO db1.t1 VALUES(20, NULL); +INSERT INTO db1.t2 VALUES(20, NULL); +COMMIT; +INSERT INTO db2.t1 VALUES(20, NULL); +include/save_master_pos.inc +[connection slave] +include/wait_for_slave_sql_error.inc [errno=1205] +include/assert.inc [Value 20 is not in db1.t1.] +ROLLBACK; +# +# Case 3: Slave worker will not stop after retring a transaction +# sucessfully. +# +SET GLOBAL slave_transaction_retries = 10; +include/start_slave_sql.inc +include/sync_slave_sql.inc +include/check_slave_no_error.inc +BEGIN; +SELECT c1 FROM db1.t2 FOR UPDATE; +c1 +1 +10 +20 +100 +[connection master] +BEGIN; +# INSERT INTO db1.t1 VALUES(30, 4096'a') +# INSERT INTO db1.t1 VALUES(31, 4096'a') +SET @str= 'abc'; +INSERT INTO db1.t2 VALUES(30, @str); +COMMIT; +INSERT INTO db2.t1 VALUES(30, NULL); +include/save_master_pos.inc +[connection slave] +include/check_slave_no_error.inc +ROLLBACK; +include/sync_slave_sql.inc +include/check_slave_no_error.inc +include/rpl_diff.inc +include/rpl_diff.inc +include/rpl_diff.inc +[connection master] +INSERT INTO db1.t1 VALUES(40, NULL); +INSERT INTO db2.t1 VALUES(40, NULL); +include/sync_slave_sql_with_master.inc +# +# Case 4: Non-temporary error will stop slave workers without retrying +# +INSERT INTO db1.t1 VALUES(50, NULL); +[connection master] +INSERT INTO db1.t1 VALUES(50, NULL); +include/save_master_pos.inc +[connection slave] +include/wait_for_slave_sql_error.inc [errno=1062] +include/assert.inc [slave_retried_transactions should not increase] +DELETE FROM db1.t1 WHERE c1 = 50; +include/start_slave_sql.inc +include/sync_slave_sql.inc +# +# Cleanup +# +SET GLOBAL innodb_lock_wait_timeout = @saved_innodb_lock_wait_timeout; +SET GLOBAL slave_parallel_workers = @saved_slave_parallel_workers; +SET GLOBAL max_relay_log_size = @saved_max_relay_log_size; +SET GLOBAL slave_transaction_retries = @saved_slave_transaction_retries; +include/stop_slave_sql.inc +SET GLOBAL slave_parallel_type= @saved_slave_parallel_type; +include/start_slave_sql.inc +[connection master] +DROP DATABASE db1; +DROP DATABASE db2; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/rpl_mts_logical_clock_wrong_start_pos.result b/mysql-test/suite/rpl_encryption/r/rpl_mts_logical_clock_wrong_start_pos.result new file mode 100644 index 000000000000..36f904d359dc --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_mts_logical_clock_wrong_start_pos.result @@ -0,0 +1,34 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +[connection slave] +call mtr.add_suppression("Either event.*is from an old master"); +call mtr.add_suppression("An unexpected event sequence was detected by the IO thread"); +call mtr.add_suppression("QUERY.* is not expected in an event stream"); +include/stop_slave.inc +SET @save_slave_parallel_type = @@GLOBAL.slave_parallel_type; +SET @save_slave_parallel_workers = @@GLOBAL.slave_parallel_workers; +SET @save_slave_transaction_retries = @@GLOBAL.slave_transaction_retries; +SET GLOBAL slave_parallel_type = LOGICAL_CLOCK; +SET GLOBAL slave_parallel_workers = 2; +SET GLOBAL slave_transaction_retries = 0; +include/start_slave.inc +[connection master] +CREATE TABLE t1(a INT); +INSERT INTO t1 SET a=1; +include/sync_slave_sql_with_master.inc +include/stop_slave.inc +CHANGE MASTER TO MASTER_LOG_POS=QUERY_POS, MASTER_AUTO_POSITION=0; +include/start_slave_io.inc +START SLAVE SQL_THREAD; +[connection master] +DROP TABLE t1; +include/sync_slave_sql_with_master.inc +include/stop_slave.inc +SET GLOBAL slave_parallel_workers = @save_slave_parallel_workers; +SET GLOBAL slave_parallel_type = @save_slave_parallel_type; +SET GLOBAL slave_transaction_retries = @save_slave_transaction_retries; +include/start_slave.inc +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/rpl_multi_source_basic.result b/mysql-test/suite/rpl_encryption/r/rpl_multi_source_basic.result new file mode 100644 index 000000000000..12552f9e908c --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_multi_source_basic.result @@ -0,0 +1,246 @@ +# +# set up masters server_1 and server_3 with server_2 being a slave. +#. +include/rpl_init.inc [topology=1->2,3->2] +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +# +# Test case 1: 1.a) create a database and table db1.t1 on server_1 +# and insert values in the table. +[connection server_1] +CREATE DATABASE db1; +CREATE TABLE db1.t1 ( a int); +INSERT INTO db1.t1 VALUES (10); +INSERT INTO db1.t1 VALUES (9); +INSERT INTO db1.t1 VALUES (8); +INSERT INTO db1.t1 VALUES (7); +INSERT INTO db1.t1 VALUES (6); +INSERT INTO db1.t1 VALUES (5); +INSERT INTO db1.t1 VALUES (4); +INSERT INTO db1.t1 VALUES (3); +INSERT INTO db1.t1 VALUES (2); +INSERT INTO db1.t1 VALUES (1); +SHOW DATABASES; +Database +information_schema +db1 +mtr +mysql +performance_schema +sys +test +# +# 1.b create database and table db3.t1 on server_3 +# and insert values in db3.t1 +[connection server_3] +CREATE DATABASE db3; +CREATE TABLE db3.t1 (a int); +INSERT INTO db3.t1 VALUES (3*10); +INSERT INTO db3.t1 VALUES (3*9); +INSERT INTO db3.t1 VALUES (3*8); +INSERT INTO db3.t1 VALUES (3*7); +INSERT INTO db3.t1 VALUES (3*6); +INSERT INTO db3.t1 VALUES (3*5); +INSERT INTO db3.t1 VALUES (3*4); +INSERT INTO db3.t1 VALUES (3*3); +INSERT INTO db3.t1 VALUES (3*2); +INSERT INTO db3.t1 VALUES (3*1); +SHOW DATABASES; +Database +information_schema +db3 +mtr +mysql +performance_schema +sys +test +# +# 1.c sync the slave (server_2) with both masters (server_1 and server_3) +# +[connection server_1] +include/sync_slave_sql_with_master.inc +[connection server_3] +include/sync_slave_sql_with_master.inc +# +# 1.d Check that slave has replicated from both masters. +# Slave should have databases db1 and db3 and tables. +SHOW DATABASES; +Database +information_schema +db1 +db3 +mtr +mysql +performance_schema +sys +test +include/assert.inc [Slave should have 10 rows in db1.t1] +include/assert.inc [Slave should have 10 rows in db3.t1] +# +# Stop slave (on server_2) for test case 2. +# +include/rpl_stop_slaves.inc +# +# Test case 2: 2.a) Test that different tables in the same database +# are replicated to the slave +[connection server_1] +CREATE DATABASE dbcommon; +[connection server_2] +include/start_slave.inc +[connection server_1] +include/sync_slave_sql_with_master.inc +include/stop_slave.inc +[connection server_1] +CREATE TABLE dbcommon.t11(a int); +INSERT INTO dbcommon.t11 values (11*10); +INSERT INTO dbcommon.t11 values (11*9); +INSERT INTO dbcommon.t11 values (11*8); +INSERT INTO dbcommon.t11 values (11*7); +INSERT INTO dbcommon.t11 values (11*6); +INSERT INTO dbcommon.t11 values (11*5); +INSERT INTO dbcommon.t11 values (11*4); +INSERT INTO dbcommon.t11 values (11*3); +INSERT INTO dbcommon.t11 values (11*2); +INSERT INTO dbcommon.t11 values (11*1); +[connection server_3] +CREATE DATABASE IF NOT EXISTS dbcommon; +CREATE TABLE dbcommon.t33(a int); +INSERT INTO dbcommon.t33 values(33*10); +INSERT INTO dbcommon.t33 values(33*9); +INSERT INTO dbcommon.t33 values(33*8); +INSERT INTO dbcommon.t33 values(33*7); +INSERT INTO dbcommon.t33 values(33*6); +INSERT INTO dbcommon.t33 values(33*5); +INSERT INTO dbcommon.t33 values(33*4); +INSERT INTO dbcommon.t33 values(33*3); +INSERT INTO dbcommon.t33 values(33*2); +INSERT INTO dbcommon.t33 values(33*1); +# +# 2.b Start replication from the masters +# +[connection server_2] +include/rpl_start_slaves.inc +# +# 2.c sync the slave with both masters +# +[connection server_1] +include/sync_slave_sql_with_master.inc +[connection server_3] +include/sync_slave_sql_with_master.inc +# +# 2.d Now check the data +# +SHOW DATABASES; +Database +information_schema +db1 +db3 +dbcommon +mtr +mysql +performance_schema +sys +test +USE dbcommon; +SHOW TABLES; +Tables_in_dbcommon +t11 +t33 +include/assert.inc [Slave should have 10 rows in dbcommon.t11] +include/assert.inc [Slave should have 10 rows in dbcommon.t33] +# +# Test case 3: 3.a) Update nonconflicting data on the same table +# and see if they are replicated to the slave. +[connection server_1] +CREATE TABLE dbcommon.t101(a int, PRIMARY KEY (a)); +[connection server_1] +include/sync_slave_sql_with_master.inc +# +# Stop slave (on server_2) for test case 3. +# +include/rpl_stop_slaves.inc +[connection server_1] +INSERT INTO dbcommon.t101 values (101*10); +INSERT INTO dbcommon.t101 values (101*9); +INSERT INTO dbcommon.t101 values (101*8); +INSERT INTO dbcommon.t101 values (101*7); +INSERT INTO dbcommon.t101 values (101*6); +INSERT INTO dbcommon.t101 values (101*5); +INSERT INTO dbcommon.t101 values (101*4); +INSERT INTO dbcommon.t101 values (101*3); +INSERT INTO dbcommon.t101 values (101*2); +INSERT INTO dbcommon.t101 values (101*1); +[connection server_3] +CREATE TABLE IF NOT EXISTS dbcommon.t101(a int, PRIMARY KEY (a)); +INSERT INTO dbcommon.t101 values(33*10); +INSERT INTO dbcommon.t101 values(33*9); +INSERT INTO dbcommon.t101 values(33*8); +INSERT INTO dbcommon.t101 values(33*7); +INSERT INTO dbcommon.t101 values(33*6); +INSERT INTO dbcommon.t101 values(33*5); +INSERT INTO dbcommon.t101 values(33*4); +INSERT INTO dbcommon.t101 values(33*3); +INSERT INTO dbcommon.t101 values(33*2); +INSERT INTO dbcommon.t101 values(33*1); +# +# 3.b Start replication from the masters +# +[connection server_2] +include/rpl_start_slaves.inc +# +# 3.c sync slave server with all the masters. +# +[connection server_1] +include/sync_slave_sql_with_master.inc +[connection server_3] +include/sync_slave_sql_with_master.inc +# +# check that data has been replicated to the slave. +# +USE dbcommon; +SHOW TABLES; +Tables_in_dbcommon +t101 +t11 +t33 +include/assert.inc [Slave should have 20 rows in dbcommon.t101] +# +# Test case 4: Update tables on both masters with conflicting data +# In this case, slave shall stop on a SQL thread. +# 4.a) Do an update on server_1 and sync with the slave. +[connection server_1] +INSERT INTO dbcommon.t101 values(1729); +include/sync_slave_sql_with_master.inc +# 4.b) Do a conflicting update on server_3 and check for conflicting error +[connection server_3] +INSERT INTO dbcommon.t101 values (1729); +[connection server_2] +call mtr.add_suppression("Slave SQL.*:.* 'Duplicate entry '1729' for key 'PRIMARY'' on query.*"); +call mtr.add_suppression("Slave SQL.*: Could not execute Write_rows event on table dbcommon.t101; Duplicate entry '1729' for key 'PRIMARY'*"); +call mtr.add_suppression("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state"); +call mtr.add_suppression("Slave SQL.*:.* Duplicate entry '1729' for key 'PRIMARY', Error_code: 1062; handler error HA_ERR_FOUND_DUPP_KEY.*"); +include/wait_for_slave_sql_error.inc [errno=1062] +include/assert.inc [Value returned by SSS and PS table for Last_Error_Number should be same.] +DELETE FROM dbcommon.t101 where a=1729; +include/start_slave.inc +# channel 1 +[connection server_1] +include/sync_slave_sql_with_master.inc +# channel 3 +[connection server_3] +include/sync_slave_sql_with_master.inc +connection_server_1 +DROP DATABASE db1; +DROP DATABASE dbcommon; +include/sync_slave_sql_with_master.inc +connection_server_3 +DROP DATABASE db3; +DROP DATABASE IF EXISTS dbcommon; +include/sync_slave_sql_with_master.inc +include/rpl_end.inc +RESET SLAVE ALL FOR CHANNEL 'channel_1'; +RESET SLAVE ALL FOR CHANNEL 'channel_3'; diff --git a/mysql-test/suite/rpl_encryption/r/rpl_no_gtid_split_statements.result b/mysql-test/suite/rpl_encryption/r/rpl_no_gtid_split_statements.result new file mode 100644 index 000000000000..fff070289152 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_no_gtid_split_statements.result @@ -0,0 +1,336 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +CALL mtr.add_suppression('Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT.'); +CALL mtr.add_suppression("Error dropping database"); +CALL mtr.add_suppression("Can't drop database '.*'; database doesn't exist"); +CALL mtr.add_suppression("Slave SQL for channel '': ... The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state. .* Error_code: 1756"); +==== Case 1: CALL is split on master ==== +---- Initialize ---- +CREATE TABLE t (a INT); +CREATE PROCEDURE proc () +BEGIN +INSERT INTO t VALUES (1); +INSERT INTO t VALUES (2); +END| +---- GTID_NEXT=AUTOMATIC ---- +include/gtid_step_reset.inc +CALL proc(); +include/gtid_step_assert.inc [count=2, only_count=0] +include/assert.inc [Both rows were inserted] +DELETE FROM t; +---- GTID_NEXT=non-automatic ---- +include/gtid_step_reset.inc +SET GTID_NEXT = '#'; +CALL proc(); +SET GTID_NEXT= 'AUTOMATIC'; +include/gtid_step_assert.inc [count=1, only_count=0] +include/assert.inc [One row inserted if GTID_MODE=ON, two if GTID_MODE=OFF] +DROP TABLE t; +DROP PROCEDURE proc; +==== Case 2A: DROP TABLE is split on master ==== +---- Initialize ---- +CREATE PROCEDURE create_tables() +BEGIN +CREATE TABLE base (a INT) ENGINE = InnoDB; +CREATE TEMPORARY TABLE temp_t (a INT) ENGINE = InnoDB; +CREATE TEMPORARY TABLE temp_n (a INT) ENGINE = MyISAM; +END| +CREATE PROCEDURE drop_tables() +BEGIN +DROP TABLE IF EXISTS base; +DROP TABLE IF EXISTS temp_t; +DROP TABLE IF EXISTS temp_n; +END| +include/rpl_sync.inc +---- GTID_MODE=AUTOMATIC ---- +CALL create_tables(); +include/gtid_step_reset.inc +DROP TABLE base, temp_t; +include/gtid_step_assert.inc [count=2, only_count=0] +include/assert_binlog_events.inc +DROP TABLE temp_n; +include/rpl_sync.inc +include/rpl_reset.inc +CALL create_tables(); +include/gtid_step_reset.inc +DROP TABLE base, temp_n; +include/gtid_step_assert.inc [count=2, only_count=0] +include/assert_binlog_events.inc +DROP TABLE temp_t; +include/rpl_sync.inc +include/rpl_reset.inc +CALL create_tables(); +include/gtid_step_reset.inc +DROP TABLE temp_t, temp_n; +include/gtid_step_assert.inc [count=2, only_count=0] +include/assert_binlog_events.inc +DROP TABLE base; +include/rpl_sync.inc +include/rpl_reset.inc +CALL create_tables(); +include/gtid_step_reset.inc +DROP TABLE base, temp_t, temp_n; +include/gtid_step_assert.inc [count=3, only_count=0] +include/assert_binlog_events.inc +include/rpl_sync.inc +include/rpl_reset.inc +---- GTID_MODE=non-automatic ---- +CALL create_tables(); +include/gtid_step_reset.inc +SET GTID_NEXT = '#'; +DROP TABLE base, temp_t; +SET GTID_NEXT = 'AUTOMATIC'; +include/gtid_step_assert.inc [count=2, only_count=0] +include/assert_binlog_events.inc +DROP TABLE temp_n; +include/rpl_sync.inc +include/rpl_reset.inc +CALL create_tables(); +include/gtid_step_reset.inc +SET GTID_NEXT = '#'; +DROP TABLE base, temp_n; +SET GTID_NEXT = 'AUTOMATIC'; +include/gtid_step_assert.inc [count=2, only_count=0] +include/assert_binlog_events.inc +DROP TABLE temp_t; +include/rpl_sync.inc +include/rpl_reset.inc +CALL create_tables(); +include/gtid_step_reset.inc +SET GTID_NEXT = '#'; +DROP TABLE temp_t, temp_n; +SET GTID_NEXT = 'AUTOMATIC'; +include/gtid_step_assert.inc [count=2, only_count=0] +include/assert_binlog_events.inc +DROP TABLE base; +include/rpl_sync.inc +include/rpl_reset.inc +CALL create_tables(); +include/gtid_step_reset.inc +SET GTID_NEXT = '#'; +DROP TABLE base, temp_t, temp_n; +SET GTID_NEXT = 'AUTOMATIC'; +include/gtid_step_assert.inc [count=3, only_count=0] +include/assert_binlog_events.inc +include/rpl_sync.inc +include/rpl_reset.inc +==== Case 2B: DROP TABLE is split on slave ==== +---- Initialize ---- +CREATE TABLE dummy (a INT); +DROP PROCEDURE create_tables; +CREATE FUNCTION create_tables_func() RETURNS INT +BEGIN +IF @@GLOBAL.SERVER_ID = 2 THEN +CREATE TEMPORARY TABLE temp_t (a INT) ENGINE = InnoDB; +CREATE TEMPORARY TABLE temp_n (a INT) ENGINE = MyISAM; +END IF; +RETURN 0; +END| +CREATE PROCEDURE create_tables() +BEGIN +CREATE TABLE base (a INT); +SET @@SESSION.SQL_LOG_BIN = 0; +CREATE TABLE temp_t (a INT); +CREATE TABLE temp_n (a INT); +SET @@SESSION.SQL_LOG_BIN = 1; +INSERT INTO dummy VALUES (create_tables_func()); +END| +include/rpl_sync.inc +---- GTID_MODE=AUTOMATIC ---- +CALL create_tables(); +Warnings: +Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a system variable that may have a different value on the slave. +include/gtid_step_reset.inc +DROP TABLE base, temp_t; +include/gtid_step_assert.inc [count=1, only_count=0] +include/assert_binlog_events.inc +DROP TABLE temp_n; +include/rpl_sync.inc +include/rpl_reset.inc +CALL create_tables(); +Warnings: +Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a system variable that may have a different value on the slave. +include/gtid_step_reset.inc +DROP TABLE base, temp_n; +include/gtid_step_assert.inc [count=1, only_count=0] +include/assert_binlog_events.inc +DROP TABLE temp_t; +include/rpl_sync.inc +include/rpl_reset.inc +CALL create_tables(); +Warnings: +Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a system variable that may have a different value on the slave. +include/gtid_step_reset.inc +DROP TABLE temp_t, temp_n; +include/gtid_step_assert.inc [count=1, only_count=0] +include/assert_binlog_events.inc +DROP TABLE base; +include/rpl_sync.inc +include/rpl_reset.inc +CALL create_tables(); +Warnings: +Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a system variable that may have a different value on the slave. +include/gtid_step_reset.inc +DROP TABLE base, temp_t, temp_n; +include/gtid_step_assert.inc [count=1, only_count=0] +include/assert_binlog_events.inc +include/rpl_sync.inc +include/rpl_reset.inc +---- Clean up ---- +DROP FUNCTION create_tables_func; +DROP PROCEDURE create_tables; +DROP PROCEDURE drop_tables; +DROP TABLE dummy; +==== Case 3: DROP DATABASE ==== +---- Initialize ---- +# db1, db2, db3: no tables. +CREATE DATABASE db1; +CREATE DATABASE db2; +CREATE DATABASE db3; +include/rpl_sync.inc +# db4, db5, db6: one table. +CREATE DATABASE db4; +CREATE DATABASE db5; +CREATE DATABASE db6; +CREATE TABLE db4.t1 (a INT); +CREATE TABLE db5.t1 (a INT); +CREATE TABLE db6.t1 (a INT); +include/rpl_sync.inc +# db7, db8, db9: many tables with long names. +CREATE DATABASE db7; +CREATE DATABASE db8; +CREATE DATABASE db9; +include/rpl_sync.inc +# db10, db11, db12: not a database, but the directory exists. +# db13, db14, db15: not a database. db15 is a database on master. +include/rpl_sync.inc +---- DROP DATABASE is split on master; GTID_NEXT=AUTOMATIC ---- +# db1: no table. +include/save_binlog_position.inc +SET GTID_NEXT = 'AUTOMATIC'; +DROP DATABASE db1; +ERROR HY000: Error dropping database (can't rmdir './db1/', errno: 17) +include/assert_binlog_events.inc +# db4: one table. +include/save_binlog_position.inc +SET GTID_NEXT = 'AUTOMATIC'; +DROP DATABASE db4; +ERROR HY000: Error dropping database (can't rmdir './db4/', errno: 17) +include/assert_binlog_events.inc +# db7: many tables with long names. +include/save_binlog_position.inc +SET GTID_NEXT = 'AUTOMATIC'; +DROP DATABASE db7; +ERROR HY000: Error dropping database (can't rmdir './db7/', errno: 17) +include/assert_binlog_events.inc +# db10: not a database, but directory exists. +include/save_binlog_position.inc +SET GTID_NEXT = 'AUTOMATIC'; +DROP DATABASE db10; +ERROR HY000: Error dropping database (can't rmdir './db10/', errno: 17) +include/assert_binlog_events.inc +# db13: not a database. +include/save_binlog_position.inc +SET GTID_NEXT = 'AUTOMATIC'; +DROP DATABASE db13; +ERROR HY000: Can't drop database 'db13'; database doesn't exist +include/assert_binlog_events.inc +---- DROP DATABASE is split on master; GTID_NEXT=non-automatic ---- +# db2: no table. +include/save_binlog_position.inc +SET GTID_NEXT = '#'; +DROP DATABASE db2; +ERROR HY000: Error dropping database (can't rmdir './db2/', errno: 17) +include/assert_binlog_events.inc +SET GTID_NEXT = 'AUTOMATIC'; +# db5: one table. +include/save_binlog_position.inc +SET GTID_NEXT = '#'; +DROP DATABASE db5; +ERROR HY000: Error dropping database (can't rmdir './db5/', errno: 17) +include/assert_binlog_events.inc +SET GTID_NEXT = 'AUTOMATIC'; +# db8: many tables with long names. +include/save_binlog_position.inc +SET GTID_NEXT = '#'; +DROP DATABASE db8; +ERROR HY000: Error dropping database (can't rmdir './db8/', errno: 17) +include/assert_binlog_events.inc +SET GTID_NEXT = 'AUTOMATIC'; +# db11: not a database, but directory exists. +include/save_binlog_position.inc +SET GTID_NEXT = '#'; +DROP DATABASE db11; +ERROR HY000: Error dropping database (can't rmdir './db11/', errno: 17) +include/assert_binlog_events.inc +SET GTID_NEXT = 'AUTOMATIC'; +# db14: not a database. +include/save_binlog_position.inc +SET GTID_NEXT = '#'; +DROP DATABASE db14; +ERROR HY000: Can't drop database 'db14'; database doesn't exist +include/assert_binlog_events.inc +SET GTID_NEXT = 'AUTOMATIC'; +---- DROP DATABASE is split on slave ---- +SET GTID_NEXT = 'AUTOMATIC'; +# db3: no table. +DROP DATABASE db3; +include/sync_slave_io_with_master.inc +include/wait_for_slave_sql_error.inc [errno=1010] +include/include/rpl_skip_to_end_of_relay_log.inc +[connection master] +# db6: one table. +DROP DATABASE db6; +include/sync_slave_io_with_master.inc +include/wait_for_slave_sql_error.inc [errno=1010] +include/include/rpl_skip_to_end_of_relay_log.inc +[connection master] +# db9: many tables with long names. +DROP DATABASE db9; +include/sync_slave_io_with_master.inc +include/wait_for_slave_sql_error.inc [errno=1010] +include/include/rpl_skip_to_end_of_relay_log.inc +[connection master] +# db12: not a database, but directory exists. +DROP DATABASE db12; +include/sync_slave_io_with_master.inc +include/wait_for_slave_sql_error.inc [errno=1010] +include/include/rpl_skip_to_end_of_relay_log.inc +[connection master] +# db15: not a database (on slave). +DROP DATABASE db15; +include/sync_slave_io_with_master.inc +include/wait_for_slave_sql_error.inc [errno=1008] +include/include/rpl_skip_to_end_of_relay_log.inc +[connection master] +---- Clean up ---- +DROP DATABASE db1; +DROP DATABASE db2; +DROP DATABASE IF EXISTS db3; +Warnings: +Note 1008 Can't drop database 'db3'; database doesn't exist +DROP DATABASE db4; +DROP DATABASE db5; +DROP DATABASE IF EXISTS db6; +Warnings: +Note 1008 Can't drop database 'db6'; database doesn't exist +DROP DATABASE db7; +DROP DATABASE db8; +DROP DATABASE IF EXISTS db9; +Warnings: +Note 1008 Can't drop database 'db9'; database doesn't exist +DROP DATABASE IF EXISTS db10; +DROP DATABASE IF EXISTS db11; +DROP DATABASE IF EXISTS db12; +Warnings: +Note 1008 Can't drop database 'db12'; database doesn't exist +DROP DATABASE IF EXISTS db15; +Warnings: +Note 1008 Can't drop database 'db15'; database doesn't exist +include/rpl_sync.inc +==== Case 4: CREATE TABLE ... SELECT ==== +See rpl_gtid_create_select.test +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/rpl_parallel.result b/mysql-test/suite/rpl_encryption/r/rpl_parallel.result new file mode 100644 index 000000000000..ba7884c25d3f --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_parallel.result @@ -0,0 +1,101 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +call mtr.add_suppression('Slave: Error dropping database'); +include/stop_slave.inc +start slave; +include/sync_slave_sql_with_master.inc +stop slave sql_thread; +insert into test0.benchmark set state='slave is processing load'; +start slave sql_thread; +use test; +select * from test0.benchmark into outfile 'benchmark.out'; +select ts from test0.benchmark where state like 'master started load' into @m_0; +select ts from test0.benchmark where state like 'master ends load' into @m_1; +select ts from test0.benchmark where state like 'slave takes on load' into @s_0; +select ts from test0.benchmark where state like 'slave ends load' into @s_1; +select time_to_sec(@m_1) - time_to_sec(@m_0) as 'delta.out'; +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:test15.tm_nk, slave:test15.tm_nk] +include/diff_tables.inc [master:test15.ti_nk, slave:test15.ti_nk] +include/diff_tables.inc [master:test15.tm_wk, slave:test15.tm_wk] +include/diff_tables.inc [master:test15.ti_wk, slave:test15.ti_wk] +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:test14.tm_nk, slave:test14.tm_nk] +include/diff_tables.inc [master:test14.ti_nk, slave:test14.ti_nk] +include/diff_tables.inc [master:test14.tm_wk, slave:test14.tm_wk] +include/diff_tables.inc [master:test14.ti_wk, slave:test14.ti_wk] +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:test13.tm_nk, slave:test13.tm_nk] +include/diff_tables.inc [master:test13.ti_nk, slave:test13.ti_nk] +include/diff_tables.inc [master:test13.tm_wk, slave:test13.tm_wk] +include/diff_tables.inc [master:test13.ti_wk, slave:test13.ti_wk] +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:test12.tm_nk, slave:test12.tm_nk] +include/diff_tables.inc [master:test12.ti_nk, slave:test12.ti_nk] +include/diff_tables.inc [master:test12.tm_wk, slave:test12.tm_wk] +include/diff_tables.inc [master:test12.ti_wk, slave:test12.ti_wk] +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:test11.tm_nk, slave:test11.tm_nk] +include/diff_tables.inc [master:test11.ti_nk, slave:test11.ti_nk] +include/diff_tables.inc [master:test11.tm_wk, slave:test11.tm_wk] +include/diff_tables.inc [master:test11.ti_wk, slave:test11.ti_wk] +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:test10.tm_nk, slave:test10.tm_nk] +include/diff_tables.inc [master:test10.ti_nk, slave:test10.ti_nk] +include/diff_tables.inc [master:test10.tm_wk, slave:test10.tm_wk] +include/diff_tables.inc [master:test10.ti_wk, slave:test10.ti_wk] +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:test9.tm_nk, slave:test9.tm_nk] +include/diff_tables.inc [master:test9.ti_nk, slave:test9.ti_nk] +include/diff_tables.inc [master:test9.tm_wk, slave:test9.tm_wk] +include/diff_tables.inc [master:test9.ti_wk, slave:test9.ti_wk] +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:test8.tm_nk, slave:test8.tm_nk] +include/diff_tables.inc [master:test8.ti_nk, slave:test8.ti_nk] +include/diff_tables.inc [master:test8.tm_wk, slave:test8.tm_wk] +include/diff_tables.inc [master:test8.ti_wk, slave:test8.ti_wk] +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:test7.tm_nk, slave:test7.tm_nk] +include/diff_tables.inc [master:test7.ti_nk, slave:test7.ti_nk] +include/diff_tables.inc [master:test7.tm_wk, slave:test7.tm_wk] +include/diff_tables.inc [master:test7.ti_wk, slave:test7.ti_wk] +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:test6.tm_nk, slave:test6.tm_nk] +include/diff_tables.inc [master:test6.ti_nk, slave:test6.ti_nk] +include/diff_tables.inc [master:test6.tm_wk, slave:test6.tm_wk] +include/diff_tables.inc [master:test6.ti_wk, slave:test6.ti_wk] +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:test5.tm_nk, slave:test5.tm_nk] +include/diff_tables.inc [master:test5.ti_nk, slave:test5.ti_nk] +include/diff_tables.inc [master:test5.tm_wk, slave:test5.tm_wk] +include/diff_tables.inc [master:test5.ti_wk, slave:test5.ti_wk] +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:test4.tm_nk, slave:test4.tm_nk] +include/diff_tables.inc [master:test4.ti_nk, slave:test4.ti_nk] +include/diff_tables.inc [master:test4.tm_wk, slave:test4.tm_wk] +include/diff_tables.inc [master:test4.ti_wk, slave:test4.ti_wk] +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:test3.tm_nk, slave:test3.tm_nk] +include/diff_tables.inc [master:test3.ti_nk, slave:test3.ti_nk] +include/diff_tables.inc [master:test3.tm_wk, slave:test3.tm_wk] +include/diff_tables.inc [master:test3.ti_wk, slave:test3.ti_wk] +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:test2.tm_nk, slave:test2.tm_nk] +include/diff_tables.inc [master:test2.ti_nk, slave:test2.ti_nk] +include/diff_tables.inc [master:test2.tm_wk, slave:test2.tm_wk] +include/diff_tables.inc [master:test2.ti_wk, slave:test2.ti_wk] +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:test1.tm_nk, slave:test1.tm_nk] +include/diff_tables.inc [master:test1.ti_nk, slave:test1.ti_nk] +include/diff_tables.inc [master:test1.tm_wk, slave:test1.tm_wk] +include/diff_tables.inc [master:test1.ti_wk, slave:test1.ti_wk] +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:test0.tm_nk, slave:test0.tm_nk] +include/diff_tables.inc [master:test0.ti_nk, slave:test0.ti_nk] +include/diff_tables.inc [master:test0.tm_wk, slave:test0.tm_wk] +include/diff_tables.inc [master:test0.ti_wk, slave:test0.ti_wk] +include/sync_slave_sql_with_master.inc +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/rpl_parallel_show_binlog_events_purge_logs.result b/mysql-test/suite/rpl_encryption/r/rpl_parallel_show_binlog_events_purge_logs.result new file mode 100644 index 000000000000..c81fe4ed8721 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_parallel_show_binlog_events_purge_logs.result @@ -0,0 +1,16 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +[connection slave] +SET DEBUG_SYNC= 'after_show_binlog_events SIGNAL on_show_binlog_events WAIT_FOR end'; +SHOW BINLOG EVENTS; +[connection slave1] +SET DEBUG_SYNC= 'now WAIT_FOR on_show_binlog_events'; +FLUSH LOGS; +SET DEBUG_SYNC= 'now SIGNAL end'; +SET DEBUG_SYNC= 'RESET'; +[connection slave] +SET DEBUG_SYNC= 'RESET'; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/rpl_partial_gtid_trx_followed_by_anonymous_trx_by_receiver.result b/mysql-test/suite/rpl_encryption/r/rpl_partial_gtid_trx_followed_by_anonymous_trx_by_receiver.result new file mode 100644 index 000000000000..53811776e5d2 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_partial_gtid_trx_followed_by_anonymous_trx_by_receiver.result @@ -0,0 +1,54 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +[connection slave] +include/stop_slave.inc +CHANGE MASTER TO MASTER_AUTO_POSITION=0; +SET GLOBAL GTID_MODE = ON_PERMISSIVE; +call mtr.add_suppression("An unexpected event sequence was detected by the IO thread"); +call mtr.add_suppression("GTID_LOG_EVENT .* is not expected in an event stream"); +include/start_slave_io.inc +include/gtid_step_reset_on_retrieved.inc +# Adding debug point 'stop_io_after_reading_unknown_event' to @@GLOBAL.debug +# Adding debug point 'simulate_unknown_ignorable_log_event_with_xid' to @@GLOBAL.debug +[connection master] +# This should be MASTER_UUID:1 +CREATE TABLE t1 (c1 INT) ENGINE= InnoDB; +include/sync_slave_io_with_master.inc +[connection master] +# This should be MASTER_UUID:2, +# but it will not be fully retrieved nor applied on slave +INSERT INTO t1 VALUES (1); +[connection slave] +include/wait_for_slave_io_to_stop.inc +# Removing debug point 'simulate_unknown_ignorable_log_event_with_xid' from @@GLOBAL.debug +# Removing debug point 'stop_io_after_reading_unknown_event' from @@GLOBAL.debug +[connection master] +include/rpl_restart_server.inc [server_number=1 gtids=off] +# This should be ANONYMOUS +INSERT INTO t1 VALUES (2); +[connection master] +include/rpl_restart_server.inc [server_number=1 gtids=on] +SET GLOBAL GTID_MODE = ON_PERMISSIVE; +# This should be MASTER_UUID:3 +INSERT INTO t1 VALUES (3); +[connection slave] +include/start_slave_io.inc +[connection master] +include/sync_slave_io_with_master.inc +include/gtid_step_assert_on_retrieved.inc [count=2, only_count=1] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +include/stop_slave_io.inc +SET GLOBAL GTID_MODE = ON; +RESET SLAVE; +RESET MASTER; +CHANGE MASTER TO MASTER_AUTO_POSITION= 1; +[connection master] +SET GLOBAL GTID_MODE = ON; +DROP TABLE t1; +RESET MASTER; +[connection slave] +include/start_slave.inc +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/rpl_partial_gtid_trx_followed_by_trx_at_startup.result b/mysql-test/suite/rpl_encryption/r/rpl_partial_gtid_trx_followed_by_trx_at_startup.result new file mode 100644 index 000000000000..36cc37d98d5e --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_partial_gtid_trx_followed_by_trx_at_startup.result @@ -0,0 +1,46 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +[connection slave] +include/stop_slave.inc +CHANGE MASTER TO MASTER_AUTO_POSITION=0; +call mtr.add_suppression("An unexpected event sequence was detected by the IO thread"); +call mtr.add_suppression("GTID_LOG_EVENT .* is not expected in an event stream"); +include/start_slave_io.inc +include/gtid_step_reset_on_retrieved.inc +# Adding debug point 'simulate_unknown_ignorable_log_event_with_xid' to @@GLOBAL.debug +[connection master] +# This should be MASTER_UUID:1 +CREATE TABLE t1 (c1 INT) ENGINE= InnoDB; +include/sync_slave_io_with_master.inc +[connection master] +# This should be MASTER_UUID:2, +# but it will not be fully retrieved nor applied on slave +INSERT INTO t1 VALUES (1); +# This should be MASTER_UUID:3, +CREATE TABLE t2 (c1 INT) ENGINE=InnoDB; +include/sync_slave_io_with_master.inc +include/stop_slave_io.inc +# Removing debug point 'simulate_unknown_ignorable_log_event_with_xid' from @@GLOBAL.debug +[connection master] +# This should be MASTER_UUID:4 +INSERT INTO t1 VALUES (3); +[connection slave] +include/rpl_restart_server.inc [server_number=2] +include/start_slave_io.inc +[connection master] +include/sync_slave_io_with_master.inc +include/gtid_step_assert_on_retrieved.inc [count=3, only_count=1] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +include/stop_slave_io.inc +RESET SLAVE; +RESET MASTER; +CHANGE MASTER TO MASTER_AUTO_POSITION= 1; +[connection master] +DROP TABLE t1,t2; +RESET MASTER; +[connection slave] +include/start_slave.inc +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/rpl_relayrotate.result b/mysql-test/suite/rpl_encryption/r/rpl_relayrotate.result new file mode 100644 index 000000000000..cab3523ec9d9 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_relayrotate.result @@ -0,0 +1,18 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +call mtr.add_suppression("Slave SQL for channel '': Request to stop slave SQL Thread received while applying a group that has non-transactional changes; waiting for completion of the group"); +include/sync_slave_sql_with_master.inc +stop slave; +create table t1 (a int) engine=innodb; +reset slave; +start slave; +stop slave; +start slave; +select max(a) from t1; +max(a) +loop_max +drop table t1; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/rpl_rotate_gtid.result b/mysql-test/suite/rpl_encryption/r/rpl_rotate_gtid.result new file mode 100644 index 000000000000..13e083cf9916 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_rotate_gtid.result @@ -0,0 +1,39 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +# Preparing the relaylog +[connection slave] +include/stop_slave.inc +CHANGE MASTER TO MASTER_AUTO_POSITION=0; +include/start_slave_io.inc +SET @save_debug=@@global.debug; +SET GLOBAL DEBUG='d,stop_io_after_reading_gtid_log_event'; +# Create a transaction on the master +# that will have it's GTID and other events in separated relay log files +[connection master] +CREATE TABLE t1 (c1 INT) ENGINE=InnoDB; +[connection slave] +include/wait_for_slave_io_to_stop.inc +SET GLOBAL DEBUG=@save_debug; +include/start_slave_io.inc +# Create other transaction on the master +[connection master] +CREATE TABLE t2 (c1 INT) ENGINE=InnoDB; +include/sync_slave_io_with_master.inc +# Restart the SQL thread until the beginning of the last relay log file +[connection slave] +START SLAVE SQL_THREAD UNTIL +RELAY_LOG_FILE= 'slave-relay-bin.000003', +RELAY_LOG_POS= 4; +include/wait_for_slave_sql_to_stop.inc +# Restart the SQL thread +include/start_slave_sql.inc +[connection master] +include/sync_slave_sql_with_master.inc +include/assert.inc [t1 should be replicated] +# Cleanup +[connection master] +DROP TABLE t1, t2; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/rpl_sbm_previous_gtid_event.result b/mysql-test/suite/rpl_encryption/r/rpl_sbm_previous_gtid_event.result new file mode 100644 index 000000000000..ee58f5a3e219 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_sbm_previous_gtid_event.result @@ -0,0 +1,61 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +SET @save_global_debug=@@GLOBAL.DEBUG; +SET @@GLOBAL.DEBUG= '+d,dbug.calculate_sbm_after_previous_gtid_log_event'; +SET @saved_slave_transaction_retries=@@global.slave_transaction_retries; +SET @@global.slave_transaction_retries=0; +include/start_slave_io.inc +include/stop_slave_io.inc +include/start_slave_io.inc +CREATE TABLE t1(i INT); +INSERT INTO t1 VALUES (20); +INSERT INTO t1 VALUES (19); +INSERT INTO t1 VALUES (18); +INSERT INTO t1 VALUES (17); +INSERT INTO t1 VALUES (16); +INSERT INTO t1 VALUES (15); +INSERT INTO t1 VALUES (14); +INSERT INTO t1 VALUES (13); +INSERT INTO t1 VALUES (12); +INSERT INTO t1 VALUES (11); +INSERT INTO t1 VALUES (10); +INSERT INTO t1 VALUES (9); +INSERT INTO t1 VALUES (8); +INSERT INTO t1 VALUES (7); +INSERT INTO t1 VALUES (6); +INSERT INTO t1 VALUES (5); +INSERT INTO t1 VALUES (4); +INSERT INTO t1 VALUES (3); +INSERT INTO t1 VALUES (2); +DROP TABLE t1; +FLUSH LOGS; +FLUSH LOGS; +include/sync_slave_io_with_master.inc +include/start_slave_sql.inc +SET DEBUG_SYNC="now wait_for signal.reached"; +include/assert.inc [Seconds Behind Master should be less than 200 seconds.] +SET DEBUG_SYNC="now signal signal.done_sbm_calculation"; +SET DEBUG_SYNC="now wait_for signal.reached"; +include/assert.inc [Seconds Behind Master should be less than 200 seconds.] +SET DEBUG_SYNC="now signal signal.done_sbm_calculation"; +SET DEBUG_SYNC="now wait_for signal.reached"; +include/assert.inc [Seconds Behind Master should be less than 200 seconds.] +SET DEBUG_SYNC="now signal signal.done_sbm_calculation"; +SET DEBUG_SYNC="now wait_for signal.reached"; +include/assert.inc [Seconds Behind Master should be less than 200 seconds.] +SET DEBUG_SYNC="now signal signal.done_sbm_calculation"; +SET DEBUG_SYNC="now wait_for signal.reached"; +include/assert.inc [Seconds Behind Master should be less than 200 seconds.] +SET DEBUG_SYNC="now signal signal.done_sbm_calculation"; +SET DEBUG_SYNC="now wait_for signal.reached"; +include/assert.inc [Seconds Behind Master should be less than 200 seconds.] +SET DEBUG_SYNC="now signal signal.done_sbm_calculation"; +SET DEBUG_SYNC="now wait_for signal.reached"; +include/assert.inc [Seconds Behind Master should be less than 200 seconds.] +SET DEBUG_SYNC="now signal signal.done_sbm_calculation"; +SET @@GLOBAL.DEBUG=@save_global_debug; +SET @@global.slave_transaction_retries=@saved_slave_transaction_retries; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/rpl_semi_sync.result b/mysql-test/suite/rpl_encryption/r/rpl_semi_sync.result new file mode 100644 index 000000000000..78303618e302 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_semi_sync.result @@ -0,0 +1,498 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +include/sync_slave_sql_with_master.inc +# +# Uninstall semi-sync plugins on master and slave +# +include/stop_slave.inc +UNINSTALL PLUGIN rpl_semi_sync_slave; +UNINSTALL PLUGIN rpl_semi_sync_master; +UNINSTALL PLUGIN rpl_semi_sync_slave; +UNINSTALL PLUGIN rpl_semi_sync_master; +include/rpl_reset.inc +# +# Main test of semi-sync replication starts here +# +[connection master] +[ default state of semi-sync on master should be OFF ] +show variables like 'rpl_semi_sync_master_enabled'; +Variable_name Value +rpl_semi_sync_master_enabled OFF +[ enable semi-sync on master ] +set global rpl_semi_sync_master_enabled = 1; +show variables like 'rpl_semi_sync_master_enabled'; +Variable_name Value +rpl_semi_sync_master_enabled ON +[ status of semi-sync on master should be ON even without any semi-sync slaves ] +show status like 'Rpl_semi_sync_master_clients'; +Variable_name Value +Rpl_semi_sync_master_clients 0 +show status like 'Rpl_semi_sync_master_status'; +Variable_name Value +Rpl_semi_sync_master_status ON +show status like 'Rpl_semi_sync_master_yes_tx'; +Variable_name Value +Rpl_semi_sync_master_yes_tx 0 +# +# BUG#45672 Semisync repl: ActiveTranx:insert_tranx_node: transaction node allocation failed +# BUG#45673 Semisync reports correct operation even if no slave is connected +# +[ status of semi-sync on master should be OFF ] +show status like 'Rpl_semi_sync_master_clients'; +Variable_name Value +Rpl_semi_sync_master_clients 0 +show status like 'Rpl_semi_sync_master_status'; +Variable_name Value +Rpl_semi_sync_master_status OFF +show status like 'Rpl_semi_sync_master_yes_tx'; +Variable_name Value +Rpl_semi_sync_master_yes_tx 0 +include/rpl_reset.inc +# +# INSTALL PLUGIN semi-sync on slave +# +[connection slave] +[ default state of semi-sync on slave should be OFF ] +show variables like 'rpl_semi_sync_slave_enabled'; +Variable_name Value +rpl_semi_sync_slave_enabled OFF +[ enable semi-sync on slave ] +set global rpl_semi_sync_slave_enabled = 1; +show variables like 'rpl_semi_sync_slave_enabled'; +Variable_name Value +rpl_semi_sync_slave_enabled ON +include/start_slave.inc +[connection master] +[ initial master state after the semi-sync slave connected ] +show status like 'Rpl_semi_sync_master_clients'; +Variable_name Value +Rpl_semi_sync_master_clients 1 +show status like 'Rpl_semi_sync_master_status'; +Variable_name Value +Rpl_semi_sync_master_status ON +show status like 'Rpl_semi_sync_master_no_tx'; +Variable_name Value +Rpl_semi_sync_master_no_tx 0 +show status like 'Rpl_semi_sync_master_yes_tx'; +Variable_name Value +Rpl_semi_sync_master_yes_tx 0 +create table t1(a int) engine = ENGINE_TYPE; +[ master state after CREATE TABLE statement ] +show status like 'Rpl_semi_sync_master_status'; +Variable_name Value +Rpl_semi_sync_master_status ON +show status like 'Rpl_semi_sync_master_no_tx'; +Variable_name Value +Rpl_semi_sync_master_no_tx 0 +show status like 'Rpl_semi_sync_master_yes_tx'; +Variable_name Value +Rpl_semi_sync_master_yes_tx 1 +select CONNECTIONS_NORMAL_SLAVE - CONNECTIONS_NORMAL_SLAVE as 'Should be 0'; +Should be 0 +0 +[ insert records to table ] +[ master status after inserts ] +show status like 'Rpl_semi_sync_master_status'; +Variable_name Value +Rpl_semi_sync_master_status ON +show status like 'Rpl_semi_sync_master_no_tx'; +Variable_name Value +Rpl_semi_sync_master_no_tx 0 +show status like 'Rpl_semi_sync_master_yes_tx'; +Variable_name Value +Rpl_semi_sync_master_yes_tx 11 +include/sync_slave_sql_with_master.inc +[ on slave ] +[ slave status after replicated inserts ] +show status like 'Rpl_semi_sync_slave_status'; +Variable_name Value +Rpl_semi_sync_slave_status ON +select count(distinct a) from t1; +count(distinct a) +10 +select min(a) from t1; +min(a) +1 +select max(a) from t1; +max(a) +10 + +# BUG#50157 +# semi-sync replication crashes when replicating a transaction which +# include 'CREATE TEMPORARY TABLE `MyISAM_t` SELECT * FROM `Innodb_t` ; +[connection master] +SET SESSION AUTOCOMMIT= 0; +CREATE TABLE t2(c1 INT) ENGINE=innodb; +include/sync_slave_sql_with_master.inc +BEGIN; + +# Even though it is in a transaction, this statement is binlogged into binlog +# file immediately. +CREATE TEMPORARY TABLE t3 SELECT c1 FROM t2 where 1=1; + +# These statements will not be binlogged until the transaction is committed +INSERT INTO t2 VALUES(11); +INSERT INTO t2 VALUES(22); +COMMIT; +DROP TABLE t2, t3; +SET SESSION AUTOCOMMIT= 1; +FLUSH STATUS; +include/sync_slave_sql_with_master.inc +# +# Test semi-sync master will switch OFF after one transaction +# timeout waiting for slave reply. +# +include/stop_slave.inc +[connection master] +include/stop_dump_threads.inc +[ master status should be ON ] +show status like 'Rpl_semi_sync_master_status'; +Variable_name Value +Rpl_semi_sync_master_status ON +show status like 'Rpl_semi_sync_master_no_tx'; +Variable_name Value +Rpl_semi_sync_master_no_tx 0 +show status like 'Rpl_semi_sync_master_yes_tx'; +Variable_name Value +Rpl_semi_sync_master_yes_tx 1 +show status like 'Rpl_semi_sync_master_clients'; +Variable_name Value +Rpl_semi_sync_master_clients 0 +[ semi-sync replication of these transactions will fail ] +insert into t1 values (500); +[ master status should be OFF ] +show status like 'Rpl_semi_sync_master_status'; +Variable_name Value +Rpl_semi_sync_master_status OFF +show status like 'Rpl_semi_sync_master_no_tx'; +Variable_name Value +Rpl_semi_sync_master_no_tx 1 +show status like 'Rpl_semi_sync_master_yes_tx'; +Variable_name Value +Rpl_semi_sync_master_yes_tx 1 +insert into t1 values (100); +[ master status should be OFF ] +show status like 'Rpl_semi_sync_master_status'; +Variable_name Value +Rpl_semi_sync_master_status OFF +show status like 'Rpl_semi_sync_master_no_tx'; +Variable_name Value +Rpl_semi_sync_master_no_tx 12 +show status like 'Rpl_semi_sync_master_yes_tx'; +Variable_name Value +Rpl_semi_sync_master_yes_tx 1 +# +# Test semi-sync status on master will be ON again when slave catches up +# +[connection slave] +[ slave status should be OFF ] +show status like 'Rpl_semi_sync_slave_status'; +Variable_name Value +Rpl_semi_sync_slave_status OFF +include/start_slave.inc +[ slave status should be ON ] +show status like 'Rpl_semi_sync_slave_status'; +Variable_name Value +Rpl_semi_sync_slave_status ON +select count(distinct a) from t1; +count(distinct a) +2 +select min(a) from t1; +min(a) +100 +select max(a) from t1; +max(a) +500 +[connection master] +[ master status should be ON again after slave catches up ] +show status like 'Rpl_semi_sync_master_status'; +Variable_name Value +Rpl_semi_sync_master_status ON +show status like 'Rpl_semi_sync_master_no_tx'; +Variable_name Value +Rpl_semi_sync_master_no_tx 12 +show status like 'Rpl_semi_sync_master_yes_tx'; +Variable_name Value +Rpl_semi_sync_master_yes_tx 1 +show status like 'Rpl_semi_sync_master_clients'; +Variable_name Value +Rpl_semi_sync_master_clients 1 +# +# Test disable/enable master semi-sync on the fly. +# +drop table t1; +include/sync_slave_sql_with_master.inc +[ on slave ] +include/stop_slave.inc +# +# Flush status +# +[ Semi-sync master status variables before FLUSH STATUS ] +SHOW STATUS LIKE 'Rpl_semi_sync_master_no_tx'; +Variable_name Value +Rpl_semi_sync_master_no_tx 12 +SHOW STATUS LIKE 'Rpl_semi_sync_master_yes_tx'; +Variable_name Value +Rpl_semi_sync_master_yes_tx 2 +FLUSH NO_WRITE_TO_BINLOG STATUS; +[ Semi-sync master status variables after FLUSH STATUS ] +SHOW STATUS LIKE 'Rpl_semi_sync_master_no_tx'; +Variable_name Value +Rpl_semi_sync_master_no_tx 0 +SHOW STATUS LIKE 'Rpl_semi_sync_master_yes_tx'; +Variable_name Value +Rpl_semi_sync_master_yes_tx 0 +[connection master] +show master logs; +Log_name master-bin.000001 +File_size # +show variables like 'rpl_semi_sync_master_enabled'; +Variable_name Value +rpl_semi_sync_master_enabled ON +[ disable semi-sync on the fly ] +set global rpl_semi_sync_master_enabled=0; +show variables like 'rpl_semi_sync_master_enabled'; +Variable_name Value +rpl_semi_sync_master_enabled OFF +show status like 'Rpl_semi_sync_master_status'; +Variable_name Value +Rpl_semi_sync_master_status OFF +[ enable semi-sync on the fly ] +set global rpl_semi_sync_master_enabled=1; +show variables like 'rpl_semi_sync_master_enabled'; +Variable_name Value +rpl_semi_sync_master_enabled ON +show status like 'Rpl_semi_sync_master_status'; +Variable_name Value +Rpl_semi_sync_master_status ON +# +# Test RESET MASTER/SLAVE +# +[connection slave] +include/start_slave.inc +[connection master] +create table t1 (a int) engine = ENGINE_TYPE; +drop table t1; +include/sync_slave_sql_with_master.inc +show status like 'Rpl_relay%'; +Variable_name Value +[ test reset master ] +[connection master] +reset master; +show status like 'Rpl_semi_sync_master_status'; +Variable_name Value +Rpl_semi_sync_master_status ON +show status like 'Rpl_semi_sync_master_no_tx'; +Variable_name Value +Rpl_semi_sync_master_no_tx 0 +show status like 'Rpl_semi_sync_master_yes_tx'; +Variable_name Value +Rpl_semi_sync_master_yes_tx 0 +[connection slave] +include/stop_slave.inc +reset slave; +reset master; +[connection master] +include/stop_dump_threads.inc +include/start_slave.inc +[connection master] +create table t1 (a int) engine = ENGINE_TYPE; +insert into t1 values (1); +insert into t1 values (2), (3); +include/sync_slave_sql_with_master.inc +[ on slave ] +select * from t1; +a +1 +2 +3 +[connection master] +[ master semi-sync status should be ON ] +show status like 'Rpl_semi_sync_master_status'; +Variable_name Value +Rpl_semi_sync_master_status ON +show status like 'Rpl_semi_sync_master_no_tx'; +Variable_name Value +Rpl_semi_sync_master_no_tx 0 +show status like 'Rpl_semi_sync_master_yes_tx'; +Variable_name Value +Rpl_semi_sync_master_yes_tx 3 +# +# Start semi-sync replication without SUPER privilege +# +include/rpl_reset.inc +[connection master] +include/stop_dump_threads.inc +set sql_log_bin=0; +create user rpl@127.0.0.1 identified by 'rpl'; +grant replication slave on *.* to rpl@127.0.0.1; +flush privileges; +set sql_log_bin=1; +SET @save_show_compatibility_56=@@global.show_compatibility_56; +SET @@global.show_compatibility_56=OFF; +[connection slave] +create user rpl@127.0.0.1 identified by 'rpl'; +grant replication slave on *.* to rpl@127.0.0.1; +flush privileges; +change master to master_user='rpl',master_password='rpl'; +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +include/start_slave.inc +show status like 'Rpl_semi_sync_slave_status'; +Variable_name Value +Rpl_semi_sync_slave_status ON +[connection master] +SET @@global.show_compatibility_56=ON; +[connection slave] +include/stop_slave.inc +[connection master] +Insert into t1 values (4); +show status like 'Rpl_semi_sync_master_status'; +Variable_name Value +Rpl_semi_sync_master_status OFF +show status like 'Rpl_semi_sync_master_clients'; +Variable_name Value +Rpl_semi_sync_master_clients 0 +[connection slave] +include/start_slave.inc +show status like 'Rpl_semi_sync_slave_status'; +Variable_name Value +Rpl_semi_sync_slave_status ON +[connection master] +SET @@global.show_compatibility_56=@save_show_compatibility_56; +show status like 'Rpl_semi_sync_master_status'; +Variable_name Value +Rpl_semi_sync_master_status ON +[ master semi-sync should be ON ] +show status like 'Rpl_semi_sync_master_clients'; +Variable_name Value +Rpl_semi_sync_master_clients 1 +show status like 'Rpl_semi_sync_master_no_tx'; +Variable_name Value +Rpl_semi_sync_master_no_tx 1 +show status like 'Rpl_semi_sync_master_yes_tx'; +Variable_name Value +Rpl_semi_sync_master_yes_tx 0 +insert into t1 values (5); +insert into t1 values (6); +[ master semi-sync should be ON ] +show status like 'Rpl_semi_sync_master_clients'; +Variable_name Value +Rpl_semi_sync_master_clients 1 +show status like 'Rpl_semi_sync_master_status'; +Variable_name Value +Rpl_semi_sync_master_status ON +show status like 'Rpl_semi_sync_master_no_tx'; +Variable_name Value +Rpl_semi_sync_master_no_tx 1 +show status like 'Rpl_semi_sync_master_yes_tx'; +Variable_name Value +Rpl_semi_sync_master_yes_tx 2 +# +# Test semi-sync slave connect to non-semi-sync master +# +include/sync_slave_sql_with_master.inc +[ on slave ] +include/stop_slave.inc +SHOW STATUS LIKE 'Rpl_semi_sync_slave_status'; +Variable_name Value +Rpl_semi_sync_slave_status OFF +[connection master] +include/stop_dump_threads.inc +[ Semi-sync status on master should be ON ] +show status like 'Rpl_semi_sync_master_clients'; +Variable_name Value +Rpl_semi_sync_master_clients 0 +show status like 'Rpl_semi_sync_master_status'; +Variable_name Value +Rpl_semi_sync_master_status ON +set global rpl_semi_sync_master_enabled= 0; +[connection slave] +SHOW VARIABLES LIKE 'rpl_semi_sync_slave_enabled'; +Variable_name Value +rpl_semi_sync_slave_enabled ON +include/start_slave.inc +[connection master] +insert into t1 values (8); +[ master semi-sync clients should be 1, status should be OFF ] +show status like 'Rpl_semi_sync_master_clients'; +Variable_name Value +Rpl_semi_sync_master_clients 1 +show status like 'Rpl_semi_sync_master_status'; +Variable_name Value +Rpl_semi_sync_master_status OFF +include/sync_slave_sql_with_master.inc +[ on slave ] +show status like 'Rpl_semi_sync_slave_status'; +Variable_name Value +Rpl_semi_sync_slave_status ON +include/stop_slave.inc +[ on master ] +include/stop_dump_threads.inc +UNINSTALL PLUGIN rpl_semi_sync_master; +SHOW VARIABLES LIKE 'rpl_semi_sync_master_enabled'; +Variable_name Value +[connection slave] +SHOW VARIABLES LIKE 'rpl_semi_sync_slave_enabled'; +Variable_name Value +rpl_semi_sync_slave_enabled ON +include/start_slave.inc +[connection master] +insert into t1 values (10); +include/sync_slave_sql_with_master.inc +[ on slave ] +SHOW STATUS LIKE 'Rpl_semi_sync_slave_status'; +Variable_name Value +Rpl_semi_sync_slave_status OFF +# +# Test non-semi-sync slave connect to semi-sync master +# +INSTALL PLUGIN rpl_semi_sync_master SONAME 'SEMISYNC_MASTER_PLUGIN'; +set global rpl_semi_sync_master_timeout= 60000; +/* 60s */ +set global rpl_semi_sync_master_enabled= 1; +[connection slave] +include/stop_slave.inc +SHOW STATUS LIKE 'Rpl_semi_sync_slave_status'; +Variable_name Value +Rpl_semi_sync_slave_status OFF +[ uninstall semi-sync slave plugin ] +UNINSTALL PLUGIN rpl_semi_sync_slave; +SHOW VARIABLES LIKE 'rpl_semi_sync_slave_enabled'; +Variable_name Value +include/start_slave.inc +SHOW STATUS LIKE 'Rpl_semi_sync_slave_status'; +Variable_name Value +include/stop_slave.inc +[ reinstall semi-sync slave plugin and disable semi-sync ] +INSTALL PLUGIN rpl_semi_sync_slave SONAME 'SEMISYNC_SLAVE_PLUGIN'; +set global rpl_semi_sync_slave_enabled= 0; +SHOW VARIABLES LIKE 'rpl_semi_sync_slave_enabled'; +Variable_name Value +rpl_semi_sync_slave_enabled OFF +SHOW STATUS LIKE 'Rpl_semi_sync_slave_status'; +Variable_name Value +Rpl_semi_sync_slave_status OFF +include/start_slave.inc +SHOW STATUS LIKE 'Rpl_semi_sync_slave_status'; +Variable_name Value +Rpl_semi_sync_slave_status OFF +# +# Clean up +# +include/uninstall_semisync.inc +include/stop_slave.inc +change master to master_user='root',master_password=''; +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +include/start_slave.inc +drop table t1; +include/sync_slave_sql_with_master.inc +drop user rpl@127.0.0.1; +flush privileges; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/rpl_set_gtid_mode_on_after_implicit_pre_commit.result b/mysql-test/suite/rpl_encryption/r/rpl_set_gtid_mode_on_after_implicit_pre_commit.result new file mode 100644 index 000000000000..6f322df795d7 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_set_gtid_mode_on_after_implicit_pre_commit.result @@ -0,0 +1,11 @@ +include/rpl_init.inc [topology=none] +include/rpl_default_connections.inc +SET GLOBAL GTID_MODE= OFF_PERMISSIVE; +[START] CREATE TABLE t1 (a INT) SELECT 1; +SET GLOBAL ENFORCE_GTID_CONSISTENCY= ON; +SET GLOBAL GTID_MODE= ON_PERMISSIVE; +[END] CREATE TABLE t1 (a INT) SELECT 1; +ERROR HY000: Statement violates GTID consistency: CREATE TABLE ... SELECT. +SET GLOBAL GTID_MODE= OFF_PERMISSIVE; +SET GLOBAL ENFORCE_GTID_CONSISTENCY= OFF; +SET GLOBAL GTID_MODE= OFF; diff --git a/mysql-test/suite/rpl_encryption/r/rpl_special_charset.result b/mysql-test/suite/rpl_encryption/r/rpl_special_charset.result new file mode 100644 index 000000000000..55690c5d3708 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_special_charset.result @@ -0,0 +1,10 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +CREATE TABLE t1(i VARCHAR(20)); +INSERT INTO t1 VALUES (0xFFFF); +include/diff_tables.inc [master:t1, slave:t1] +DROP TABLE t1; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/rpl_sporadic_master.result b/mysql-test/suite/rpl_encryption/r/rpl_sporadic_master.result new file mode 100644 index 000000000000..2b3bf8ccee7a --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_sporadic_master.result @@ -0,0 +1,29 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +create table t2(n int); +create table t1(n int not null auto_increment primary key); +insert into t1 values (NULL),(NULL); +truncate table t1; +insert into t1 values (4),(NULL); +include/sync_slave_sql_with_master.inc +include/stop_slave.inc +include/start_slave.inc +insert into t1 values (NULL),(NULL); +flush logs; +truncate table t1; +insert into t1 values (10),(NULL),(NULL),(NULL),(NULL),(NULL); +include/sync_slave_sql_with_master.inc +select * from t1 ORDER BY n; +n +10 +11 +12 +13 +14 +15 +drop table t1,t2; +include/sync_slave_sql_with_master.inc +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/rpl_ssl.result b/mysql-test/suite/rpl_encryption/r/rpl_ssl.result new file mode 100644 index 000000000000..9f18c69e9fc6 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_ssl.result @@ -0,0 +1,94 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +include/assert.inc [Master_SSL_Allowed should be NO by default] +include/assert.inc [Without MASTER_SSL, the slave should be connected to the master without SSL/TLS] +set @orig_sql_mode= @@sql_mode; +set sql_mode= (select replace(@@sql_mode,'NO_AUTO_CREATE_USER','')); +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +grant replication slave on *.* to replssl@localhost require ssl; +Warnings: +Warning 1287 Using GRANT for creating new user is deprecated and will be removed in future release. Create new user with CREATE USER statement. +set sql_mode= @orig_sql_mode; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +create table t1 (t int auto_increment, KEY(t)); +include/sync_slave_sql_with_master.inc +stop slave; +change master to +master_user='replssl', +master_password='', +master_ssl=1, +master_ssl_ca ='MYSQL_TEST_DIR/std_data/cacert.pem', +master_ssl_cert='MYSQL_TEST_DIR/std_data/client-cert.pem', +master_ssl_key='MYSQL_TEST_DIR/std_data/client-key.pem'; +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +start slave; +insert into t1 values(1); +include/sync_slave_sql_with_master.inc +select * from t1; +t +1 +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +Master_SSL_Allowed = 'Yes' +Master_SSL_CA_Path = '' +Master_SSL_CA_File = 'MYSQL_TEST_DIR/std_data/cacert.pem' +Master_SSL_Cert = 'MYSQL_TEST_DIR/std_data/client-cert.pem' +Master_SSL_Key = 'MYSQL_TEST_DIR/std_data/client-key.pem' +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +include/check_slave_is_running.inc +STOP SLAVE; +select * from t1; +t +1 +insert into t1 values (NULL); +include/sync_slave_sql_with_master.inc +include/wait_for_slave_to_start.inc +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +Master_SSL_Allowed = 'Yes' +Master_SSL_CA_Path = '' +Master_SSL_CA_File = 'MYSQL_TEST_DIR/std_data/cacert.pem' +Master_SSL_Cert = 'MYSQL_TEST_DIR/std_data/client-cert.pem' +Master_SSL_Key = 'MYSQL_TEST_DIR/std_data/client-key.pem' +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +include/check_slave_is_running.inc +drop user replssl@localhost; +drop table t1; +include/sync_slave_sql_with_master.inc +include/stop_slave.inc +CHANGE MASTER TO +master_user = 'root', +master_ssl = 0, +master_ssl_ca = '', +master_ssl_cert = '', +master_ssl_key = '', +master_ssl_crl='', +master_ssl_crlpath=''; +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +CHANGE MASTER TO MASTER_SSL= 1, MASTER_SSL_CRL='MYSQL_TEST_DIR/std_data/crl-client-revoked.crl', MASTER_SSL_CRLPATH='MYSQL_TEST_DIR/std_data/crldir'; +include/start_slave.inc +include/stop_slave.inc +CHANGE MASTER TO +master_user = 'root', +master_ssl = 0, +master_ssl_ca = '', +master_ssl_cert = '', +master_ssl_key = '', +master_ssl_crl='', +master_ssl_crlpath=''; +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +End of 5.0 tests +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/rpl_stm_mix_rollback_to_savepoint.result b/mysql-test/suite/rpl_encryption/r/rpl_stm_mix_rollback_to_savepoint.result new file mode 100644 index 000000000000..2dd9a0730ec0 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_stm_mix_rollback_to_savepoint.result @@ -0,0 +1,422 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +#Test case 1: +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY); +CREATE TABLE t2 (f1 INTEGER PRIMARY KEY); +CREATE TABLE t3 (f1 INTEGER PRIMARY KEY); +CREATE TRIGGER tr1 AFTER INSERT ON t1 FOR EACH ROW +BEGIN +DECLARE EXIT HANDLER FOR SQLEXCEPTION +BEGIN +ROLLBACK TO event_logging_1; +INSERT t3 VALUES (1); +END; +SAVEPOINT event_logging_1; +INSERT INTO t2 VALUES (1); +RELEASE SAVEPOINT event_logging_1; +END| +INSERT INTO t2 VALUES (1); +INSERT INTO t1 VALUES (1); +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Start_encryption # # +master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) +master-bin.000001 # Query # # use `test`; CREATE TABLE t2 (f1 INTEGER PRIMARY KEY) +master-bin.000001 # Query # # use `test`; CREATE TABLE t3 (f1 INTEGER PRIMARY KEY) +master-bin.000001 # Query # # use `test`; CREATE DEFINER=`root`@`localhost` TRIGGER tr1 AFTER INSERT ON t1 FOR EACH ROW +BEGIN +DECLARE EXIT HANDLER FOR SQLEXCEPTION +BEGIN +ROLLBACK TO event_logging_1; +INSERT t3 VALUES (1); +END; +SAVEPOINT event_logging_1; +INSERT INTO t2 VALUES (1); +RELEASE SAVEPOINT event_logging_1; +END +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test`; INSERT INTO t2 VALUES (1) +master-bin.000001 # Xid # # COMMIT /* XID */ +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (1) +master-bin.000001 # Xid # # COMMIT /* XID */ +[connection master] +DROP TRIGGER tr1; +DELETE FROM t1; +DELETE FROM t2; +DELETE FROM t3; +# Test case 2: +CREATE PROCEDURE p1() +BEGIN +DECLARE EXIT HANDLER FOR SQLEXCEPTION +BEGIN +ROLLBACK TO event_logging_2; +INSERT t3 VALUES (3); +END; +SAVEPOINT event_logging_2; +INSERT INTO t2 VALUES (1); +RELEASE SAVEPOINT event_logging_2; +END| +CREATE TRIGGER tr1 AFTER INSERT ON t1 FOR EACH ROW CALL p1()| +INSERT INTO t2 VALUES (1); +INSERT INTO t1 VALUES (1); +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Start_encryption # # +master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) +master-bin.000001 # Query # # use `test`; CREATE TABLE t2 (f1 INTEGER PRIMARY KEY) +master-bin.000001 # Query # # use `test`; CREATE TABLE t3 (f1 INTEGER PRIMARY KEY) +master-bin.000001 # Query # # use `test`; CREATE DEFINER=`root`@`localhost` TRIGGER tr1 AFTER INSERT ON t1 FOR EACH ROW +BEGIN +DECLARE EXIT HANDLER FOR SQLEXCEPTION +BEGIN +ROLLBACK TO event_logging_1; +INSERT t3 VALUES (1); +END; +SAVEPOINT event_logging_1; +INSERT INTO t2 VALUES (1); +RELEASE SAVEPOINT event_logging_1; +END +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test`; INSERT INTO t2 VALUES (1) +master-bin.000001 # Xid # # COMMIT /* XID */ +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (1) +master-bin.000001 # Xid # # COMMIT /* XID */ +master-bin.000001 # Query # # use `test`; DROP TRIGGER tr1 +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test`; DELETE FROM t1 +master-bin.000001 # Xid # # COMMIT /* XID */ +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test`; DELETE FROM t2 +master-bin.000001 # Xid # # COMMIT /* XID */ +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test`; DELETE FROM t3 +master-bin.000001 # Xid # # COMMIT /* XID */ +master-bin.000001 # Query # # use `test`; CREATE DEFINER=`root`@`localhost` PROCEDURE `p1`() +BEGIN +DECLARE EXIT HANDLER FOR SQLEXCEPTION +BEGIN +ROLLBACK TO event_logging_2; +INSERT t3 VALUES (3); +END; +SAVEPOINT event_logging_2; +INSERT INTO t2 VALUES (1); +RELEASE SAVEPOINT event_logging_2; +END +master-bin.000001 # Query # # use `test`; CREATE DEFINER=`root`@`localhost` TRIGGER tr1 AFTER INSERT ON t1 FOR EACH ROW CALL p1() +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test`; INSERT INTO t2 VALUES (1) +master-bin.000001 # Xid # # COMMIT /* XID */ +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (1) +master-bin.000001 # Xid # # COMMIT /* XID */ +[connection master] +DROP TABLE t1; +DROP TABLE t2; +DROP TABLE t3; +DROP PROCEDURE p1; +# Test case 3: +include/rpl_reset.inc +[connection master] +CREATE TABLE t (f1 int(10) unsigned NOT NULL, PRIMARY KEY (f1)) ENGINE=InnoDB; +CREATE TRIGGER t_insert_trig AFTER INSERT ON t +FOR EACH ROW +BEGIN +SAVEPOINT savepoint_1; +ROLLBACK TO savepoint_1; +END | +INSERT INTO t VALUES (2); +INSERT INTO t VALUES (3); +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Start_encryption # # +master-bin.000001 # Query # # use `test`; CREATE TABLE t (f1 int(10) unsigned NOT NULL, PRIMARY KEY (f1)) ENGINE=InnoDB +master-bin.000001 # Query # # use `test`; CREATE DEFINER=`root`@`localhost` TRIGGER t_insert_trig AFTER INSERT ON t +FOR EACH ROW +BEGIN +SAVEPOINT savepoint_1; +ROLLBACK TO savepoint_1; +END +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test`; INSERT INTO t VALUES (2) +master-bin.000001 # Xid # # COMMIT /* XID */ +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test`; INSERT INTO t VALUES (3) +master-bin.000001 # Xid # # COMMIT /* XID */ +SELECT * FROM t; +f1 +2 +3 +include/sync_slave_sql_with_master.inc +SELECT * FROM t; +f1 +2 +3 +[connection master] +DROP TABLE t; +# Test case 4: +include/rpl_reset.inc +[connection master] +CREATE TABLE t (f1 int(10) unsigned NOT NULL) ENGINE=InnoDB; +CREATE TABLE t1 (f1 int(10) unsigned NOT NULL) ENGINE=InnoDB; +CREATE TRIGGER t_insert_trig BEFORE INSERT ON t +FOR EACH ROW +BEGIN +SAVEPOINT savepoint_1; +INSERT INTO t1 VALUES (5); +END | +INSERT INTO t VALUES (2), (3); +INSERT INTO t1 VALUES (30); +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Start_encryption # # +master-bin.000001 # Query # # use `test`; CREATE TABLE t (f1 int(10) unsigned NOT NULL) ENGINE=InnoDB +master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (f1 int(10) unsigned NOT NULL) ENGINE=InnoDB +master-bin.000001 # Query # # use `test`; CREATE DEFINER=`root`@`localhost` TRIGGER t_insert_trig BEFORE INSERT ON t +FOR EACH ROW +BEGIN +SAVEPOINT savepoint_1; +INSERT INTO t1 VALUES (5); +END +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test`; INSERT INTO t VALUES (2), (3) +master-bin.000001 # Xid # # COMMIT /* XID */ +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (30) +master-bin.000001 # Xid # # COMMIT /* XID */ +SELECT * FROM t; +f1 +2 +3 +SELECT * FROM t1; +f1 +5 +5 +30 +include/sync_slave_sql_with_master.inc +SELECT * FROM t; +f1 +2 +3 +SELECT * FROM t1; +f1 +5 +5 +30 +[connection master] +DROP TABLE t; +DROP TABLE t1; +# Test case 5: +include/rpl_reset.inc +[connection master] +CREATE TABLE t (f1 int(10) unsigned NOT NULL) ENGINE=InnoDB; +CREATE TABLE t1 (f1 int(10) unsigned NOT NULL) ENGINE=InnoDB; +CREATE TRIGGER t_insert_trig BEFORE INSERT ON t +FOR EACH ROW +BEGIN +SAVEPOINT savepoint_1; +END | +INSERT INTO t VALUES (2), (3); +INSERT INTO t1 VALUES (30); +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Start_encryption # # +master-bin.000001 # Query # # use `test`; CREATE TABLE t (f1 int(10) unsigned NOT NULL) ENGINE=InnoDB +master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (f1 int(10) unsigned NOT NULL) ENGINE=InnoDB +master-bin.000001 # Query # # use `test`; CREATE DEFINER=`root`@`localhost` TRIGGER t_insert_trig BEFORE INSERT ON t +FOR EACH ROW +BEGIN +SAVEPOINT savepoint_1; +END +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test`; INSERT INTO t VALUES (2), (3) +master-bin.000001 # Xid # # COMMIT /* XID */ +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (30) +master-bin.000001 # Xid # # COMMIT /* XID */ +SELECT * FROM t; +f1 +2 +3 +SELECT * FROM t1; +f1 +30 +include/sync_slave_sql_with_master.inc +SELECT * FROM t; +f1 +2 +3 +SELECT * FROM t1; +f1 +30 +[connection master] +DROP TABLE t; +DROP TABLE t1; +# Test case 6: +include/rpl_reset.inc +[connection master] +CREATE TABLE t1 (f1 INTEGER ) ENGINE=INNODB; +CREATE TABLE t2 (f1 INTEGER ) ENGINE=INNODB; +CREATE FUNCTION f1() RETURNS INT +BEGIN +SAVEPOINT event_logging_2; +INSERT INTO t1 VALUES (1); +ROLLBACK TO event_logging_2; +RETURN 0; +END| +BEGIN; +INSERT INTO t2 VALUES (1), (f1()), (2), (4); +COMMIT; +INSERT INTO t2 VALUES (10); +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Start_encryption # # +master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (f1 INTEGER ) ENGINE=INNODB +master-bin.000001 # Query # # use `test`; CREATE TABLE t2 (f1 INTEGER ) ENGINE=INNODB +master-bin.000001 # Query # # use `test`; CREATE DEFINER=`root`@`localhost` FUNCTION `f1`() RETURNS int(11) +BEGIN +SAVEPOINT event_logging_2; +INSERT INTO t1 VALUES (1); +ROLLBACK TO event_logging_2; +RETURN 0; +END +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test`; INSERT INTO t2 VALUES (1), (f1()), (2), (4) +master-bin.000001 # Xid # # COMMIT /* XID */ +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test`; INSERT INTO t2 VALUES (10) +master-bin.000001 # Xid # # COMMIT /* XID */ +[connection master] +SELECT * FROM t2; +f1 +1 +0 +2 +4 +10 +SELECT * FROM t1; +f1 +include/sync_slave_sql_with_master.inc +SELECT * FROM t2; +f1 +1 +0 +2 +4 +10 +SELECT * FROM t1; +f1 +[connection master] +DROP TABLE t1; +DROP TABLE t2; +DROP FUNCTION f1; +# Test case 7: +include/rpl_reset.inc +[connection master] +CREATE TABLE t1 (f1 INTEGER ) ENGINE=INNODB; +CREATE TABLE t2 (f1 INTEGER ) ENGINE=INNODB; +CREATE FUNCTION f1() RETURNS INT +BEGIN +SAVEPOINT event_logging_2; +INSERT INTO t1 VALUES (1); +RETURN 0; +END| +BEGIN; +INSERT INTO t2 VALUES (1), (f1()), (2), (4); +COMMIT; +INSERT INTO t2 VALUES (10); +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Start_encryption # # +master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (f1 INTEGER ) ENGINE=INNODB +master-bin.000001 # Query # # use `test`; CREATE TABLE t2 (f1 INTEGER ) ENGINE=INNODB +master-bin.000001 # Query # # use `test`; CREATE DEFINER=`root`@`localhost` FUNCTION `f1`() RETURNS int(11) +BEGIN +SAVEPOINT event_logging_2; +INSERT INTO t1 VALUES (1); +RETURN 0; +END +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test`; INSERT INTO t2 VALUES (1), (f1()), (2), (4) +master-bin.000001 # Xid # # COMMIT /* XID */ +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test`; INSERT INTO t2 VALUES (10) +master-bin.000001 # Xid # # COMMIT /* XID */ +[connection master] +SELECT * FROM t2; +f1 +1 +0 +2 +4 +10 +SELECT * FROM t1; +f1 +1 +include/sync_slave_sql_with_master.inc +SELECT * FROM t2; +f1 +1 +0 +2 +4 +10 +SELECT * FROM t1; +f1 +1 +[connection master] +DROP TABLE t1; +DROP TABLE t2; +DROP FUNCTION f1; +# Test case 8: +include/rpl_reset.inc +[connection master] +CREATE TABLE t1 (f1 INTEGER ) ENGINE=INNODB; +CREATE FUNCTION f1() RETURNS INT +BEGIN +SAVEPOINT event_logging_2; +RETURN 0; +END| +BEGIN; +INSERT INTO t1 VALUES (1), (f1()), (2), (4); +COMMIT; +INSERT INTO t1 VALUES (10); +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Start_encryption # # +master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (f1 INTEGER ) ENGINE=INNODB +master-bin.000001 # Query # # use `test`; CREATE DEFINER=`root`@`localhost` FUNCTION `f1`() RETURNS int(11) +BEGIN +SAVEPOINT event_logging_2; +RETURN 0; +END +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (1), (f1()), (2), (4) +master-bin.000001 # Xid # # COMMIT /* XID */ +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (10) +master-bin.000001 # Xid # # COMMIT /* XID */ +[connection master] +SELECT * FROM t1; +f1 +1 +0 +2 +4 +10 +include/sync_slave_sql_with_master.inc +SELECT * FROM t1; +f1 +1 +0 +2 +4 +10 +[connection master] +DROP TABLE t1; +DROP FUNCTION f1; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/rpl_stm_mixed_mts_rec_crash_safe_checksum.result b/mysql-test/suite/rpl_encryption/r/rpl_stm_mixed_mts_rec_crash_safe_checksum.result new file mode 100644 index 000000000000..42ba1bff5a26 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_stm_mixed_mts_rec_crash_safe_checksum.result @@ -0,0 +1,5372 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +call mtr.add_suppression('Attempting backtrace'); +call mtr.add_suppression("Recovery from master pos .*"); +call mtr.add_suppression(".* InnoDB: Warning: allocated tablespace .*, old maximum was .*"); +######################################################################## +# SET UP +######################################################################## +'Big rpl_mts_crash_safe' +==== begin rpl_mts_crash_safe.inc:configure ==== +---- begin configure database test_1 ---- +rpl_mixing_engines.inc [commands=configure] +CREATE TABLE nt_1 (trans_id INT, stmt_id INT, info VARCHAR(64), PRIMARY KEY(trans_id, stmt_id)) ENGINE = MyISAM; +CREATE TABLE nt_2 (trans_id INT, stmt_id INT, info VARCHAR(64), PRIMARY KEY(trans_id, stmt_id)) ENGINE = MyISAM; +CREATE TABLE nt_3 (trans_id INT, stmt_id INT, info VARCHAR(64), PRIMARY KEY(trans_id, stmt_id)) ENGINE = MyISAM; +CREATE TABLE nt_4 (trans_id INT, stmt_id INT, info VARCHAR(64), PRIMARY KEY(trans_id, stmt_id)) ENGINE = MyISAM; +CREATE TABLE nt_5 (trans_id INT, stmt_id INT, info VARCHAR(64), PRIMARY KEY(trans_id, stmt_id)) ENGINE = MyISAM; +CREATE TABLE nt_6 (trans_id INT, stmt_id INT, info VARCHAR(64), PRIMARY KEY(trans_id, stmt_id)) ENGINE = MyISAM; +CREATE TABLE tt_1 (trans_id INT, stmt_id INT, info VARCHAR(64), PRIMARY KEY(trans_id, stmt_id)) ENGINE = "Innodb"; +CREATE TABLE tt_2 (trans_id INT, stmt_id INT, info VARCHAR(64), PRIMARY KEY(trans_id, stmt_id)) ENGINE = "Innodb"; +CREATE TABLE tt_3 (trans_id INT, stmt_id INT, info VARCHAR(64), PRIMARY KEY(trans_id, stmt_id)) ENGINE = "Innodb"; +CREATE TABLE tt_4 (trans_id INT, stmt_id INT, info VARCHAR(64), PRIMARY KEY(trans_id, stmt_id)) ENGINE = "Innodb"; +CREATE TABLE tt_5 (trans_id INT, stmt_id INT, info VARCHAR(64), PRIMARY KEY(trans_id, stmt_id)) ENGINE = "Innodb"; +CREATE TABLE tt_6 (trans_id INT, stmt_id INT, info VARCHAR(64), PRIMARY KEY(trans_id, stmt_id)) ENGINE = "Innodb"; +INSERT INTO nt_1(trans_id, stmt_id) VALUES(1,1); +INSERT INTO nt_2(trans_id, stmt_id) VALUES(1,1); +INSERT INTO nt_3(trans_id, stmt_id) VALUES(1,1); +INSERT INTO nt_4(trans_id, stmt_id) VALUES(1,1); +INSERT INTO nt_5(trans_id, stmt_id) VALUES(1,1); +INSERT INTO nt_6(trans_id, stmt_id) VALUES(1,1); +INSERT INTO tt_1(trans_id, stmt_id) VALUES(1,1); +INSERT INTO tt_2(trans_id, stmt_id) VALUES(1,1); +INSERT INTO tt_3(trans_id, stmt_id) VALUES(1,1); +INSERT INTO tt_4(trans_id, stmt_id) VALUES(1,1); +INSERT INTO tt_5(trans_id, stmt_id) VALUES(1,1); +INSERT INTO tt_6(trans_id, stmt_id) VALUES(1,1); +CREATE PROCEDURE pc_i_tt_5_suc (IN p_trans_id INTEGER, IN p_stmt_id INTEGER) +BEGIN +DECLARE in_stmt_id INTEGER; +SELECT max(stmt_id) INTO in_stmt_id FROM tt_5 WHERE trans_id= p_trans_id; +SELECT COALESCE(greatest(in_stmt_id + 1, p_stmt_id), 1) INTO in_stmt_id; +INSERT INTO tt_5(trans_id, stmt_id) VALUES (p_trans_id, in_stmt_id); +INSERT INTO tt_5(trans_id, stmt_id) VALUES (p_trans_id, in_stmt_id + 1); +END| +CREATE PROCEDURE pc_i_nt_5_suc (IN p_trans_id INTEGER, IN p_stmt_id INTEGER) +BEGIN +DECLARE in_stmt_id INTEGER; +SELECT max(stmt_id) INTO in_stmt_id FROM nt_5 WHERE trans_id= p_trans_id; +SELECT COALESCE(greatest(in_stmt_id + 1, p_stmt_id), 1) INTO in_stmt_id; +INSERT INTO nt_5(trans_id, stmt_id) VALUES (p_trans_id, in_stmt_id); +INSERT INTO nt_5(trans_id, stmt_id) VALUES (p_trans_id, in_stmt_id + 1); +END| +CREATE FUNCTION fc_i_tt_5_suc (p_trans_id INTEGER, p_stmt_id INTEGER) RETURNS VARCHAR(64) +BEGIN +DECLARE in_stmt_id INTEGER; +SELECT max(stmt_id) INTO in_stmt_id FROM tt_5 WHERE trans_id= p_trans_id; +SELECT COALESCE(greatest(in_stmt_id + 1, p_stmt_id), 1) INTO in_stmt_id; +INSERT INTO tt_5(trans_id, stmt_id) VALUES (p_trans_id, in_stmt_id); +INSERT INTO tt_5(trans_id, stmt_id) VALUES (p_trans_id, in_stmt_id + 1); +RETURN "fc_i_tt_5_suc"; +END| +CREATE FUNCTION fc_i_nt_5_suc (p_trans_id INTEGER, p_stmt_id INTEGER) RETURNS VARCHAR(64) +BEGIN +DECLARE in_stmt_id INTEGER; +SELECT max(stmt_id) INTO in_stmt_id FROM nt_5 WHERE trans_id= p_trans_id; +SELECT COALESCE(greatest(in_stmt_id + 1, p_stmt_id), 1) INTO in_stmt_id; +INSERT INTO nt_5(trans_id, stmt_id) VALUES (p_trans_id, in_stmt_id); +INSERT INTO nt_5(trans_id, stmt_id) VALUES (p_trans_id, in_stmt_id + 1); +RETURN "fc_i_nt_5_suc"; +END| +CREATE FUNCTION fc_i_nt_3_tt_3_suc (p_trans_id INTEGER, p_stmt_id INTEGER) RETURNS VARCHAR(64) +BEGIN +DECLARE in_stmt_id INTEGER; +SELECT max(stmt_id) INTO in_stmt_id FROM nt_3 WHERE trans_id= p_trans_id; +SELECT COALESCE(greatest(in_stmt_id + 1, p_stmt_id), 1) INTO in_stmt_id; +INSERT INTO nt_3(trans_id, stmt_id) VALUES (p_trans_id, in_stmt_id); +SELECT max(stmt_id) INTO in_stmt_id FROM tt_3 WHERE trans_id= p_trans_id; +SELECT COALESCE(greatest(in_stmt_id + 1, p_stmt_id), 1) INTO in_stmt_id; +INSERT INTO tt_3(trans_id, stmt_id) VALUES (p_trans_id, in_stmt_id); +RETURN "fc_i_nt_3_tt_3_suc"; +END| +CREATE TRIGGER tr_i_tt_3_to_nt_3 AFTER INSERT ON tt_3 FOR EACH ROW +BEGIN +DECLARE in_stmt_id INTEGER; +SELECT max(stmt_id) INTO in_stmt_id FROM nt_3 WHERE trans_id= NEW.trans_id; +SELECT COALESCE(greatest(in_stmt_id + 1, NEW.stmt_id), 1) INTO in_stmt_id; +INSERT INTO nt_3(trans_id, stmt_id) VALUES (NEW.trans_id, in_stmt_id); +INSERT INTO nt_3(trans_id, stmt_id) VALUES (NEW.trans_id, in_stmt_id + 1); +END| +CREATE TRIGGER tr_i_nt_4_to_tt_4 AFTER INSERT ON nt_4 FOR EACH ROW +BEGIN +DECLARE in_stmt_id INTEGER; +SELECT max(stmt_id) INTO in_stmt_id FROM tt_4 WHERE trans_id= NEW.trans_id; +SELECT COALESCE(greatest(in_stmt_id + 1, NEW.stmt_id), 1) INTO in_stmt_id; +INSERT INTO tt_4(trans_id, stmt_id) VALUES (NEW.trans_id, in_stmt_id); +INSERT INTO tt_4(trans_id, stmt_id) VALUES (NEW.trans_id, in_stmt_id + 1); +END| +CREATE TRIGGER tr_i_tt_5_to_tt_6 AFTER INSERT ON tt_5 FOR EACH ROW +BEGIN +DECLARE in_stmt_id INTEGER; +SELECT max(stmt_id) INTO in_stmt_id FROM tt_6 WHERE trans_id= NEW.trans_id; +SELECT COALESCE(greatest(in_stmt_id + 1, NEW.stmt_id, 1), 1) INTO in_stmt_id; +INSERT INTO tt_6(trans_id, stmt_id) VALUES (NEW.trans_id, in_stmt_id); +INSERT INTO tt_6(trans_id, stmt_id) VALUES (NEW.trans_id, in_stmt_id + 1); +END| +CREATE TRIGGER tr_i_nt_5_to_nt_6 AFTER INSERT ON nt_5 FOR EACH ROW +BEGIN +DECLARE in_stmt_id INTEGER; +SELECT max(stmt_id) INTO in_stmt_id FROM nt_6 WHERE trans_id= NEW.trans_id; +SELECT COALESCE(greatest(in_stmt_id + 1, NEW.stmt_id), 1) INTO in_stmt_id; +INSERT INTO nt_6(trans_id, stmt_id) VALUES (NEW.trans_id, in_stmt_id); +INSERT INTO nt_6(trans_id, stmt_id) VALUES (NEW.trans_id, in_stmt_id + 1); +END| +---- end configure database test_1 ---- +---- begin configure database test_2 ---- +rpl_mixing_engines.inc [commands=configure] +CREATE TABLE nt_1 (trans_id INT, stmt_id INT, info VARCHAR(64), PRIMARY KEY(trans_id, stmt_id)) ENGINE = MyISAM; +CREATE TABLE nt_2 (trans_id INT, stmt_id INT, info VARCHAR(64), PRIMARY KEY(trans_id, stmt_id)) ENGINE = MyISAM; +CREATE TABLE nt_3 (trans_id INT, stmt_id INT, info VARCHAR(64), PRIMARY KEY(trans_id, stmt_id)) ENGINE = MyISAM; +CREATE TABLE nt_4 (trans_id INT, stmt_id INT, info VARCHAR(64), PRIMARY KEY(trans_id, stmt_id)) ENGINE = MyISAM; +CREATE TABLE nt_5 (trans_id INT, stmt_id INT, info VARCHAR(64), PRIMARY KEY(trans_id, stmt_id)) ENGINE = MyISAM; +CREATE TABLE nt_6 (trans_id INT, stmt_id INT, info VARCHAR(64), PRIMARY KEY(trans_id, stmt_id)) ENGINE = MyISAM; +CREATE TABLE tt_1 (trans_id INT, stmt_id INT, info VARCHAR(64), PRIMARY KEY(trans_id, stmt_id)) ENGINE = "Innodb"; +CREATE TABLE tt_2 (trans_id INT, stmt_id INT, info VARCHAR(64), PRIMARY KEY(trans_id, stmt_id)) ENGINE = "Innodb"; +CREATE TABLE tt_3 (trans_id INT, stmt_id INT, info VARCHAR(64), PRIMARY KEY(trans_id, stmt_id)) ENGINE = "Innodb"; +CREATE TABLE tt_4 (trans_id INT, stmt_id INT, info VARCHAR(64), PRIMARY KEY(trans_id, stmt_id)) ENGINE = "Innodb"; +CREATE TABLE tt_5 (trans_id INT, stmt_id INT, info VARCHAR(64), PRIMARY KEY(trans_id, stmt_id)) ENGINE = "Innodb"; +CREATE TABLE tt_6 (trans_id INT, stmt_id INT, info VARCHAR(64), PRIMARY KEY(trans_id, stmt_id)) ENGINE = "Innodb"; +INSERT INTO nt_1(trans_id, stmt_id) VALUES(1,1); +INSERT INTO nt_2(trans_id, stmt_id) VALUES(1,1); +INSERT INTO nt_3(trans_id, stmt_id) VALUES(1,1); +INSERT INTO nt_4(trans_id, stmt_id) VALUES(1,1); +INSERT INTO nt_5(trans_id, stmt_id) VALUES(1,1); +INSERT INTO nt_6(trans_id, stmt_id) VALUES(1,1); +INSERT INTO tt_1(trans_id, stmt_id) VALUES(1,1); +INSERT INTO tt_2(trans_id, stmt_id) VALUES(1,1); +INSERT INTO tt_3(trans_id, stmt_id) VALUES(1,1); +INSERT INTO tt_4(trans_id, stmt_id) VALUES(1,1); +INSERT INTO tt_5(trans_id, stmt_id) VALUES(1,1); +INSERT INTO tt_6(trans_id, stmt_id) VALUES(1,1); +CREATE PROCEDURE pc_i_tt_5_suc (IN p_trans_id INTEGER, IN p_stmt_id INTEGER) +BEGIN +DECLARE in_stmt_id INTEGER; +SELECT max(stmt_id) INTO in_stmt_id FROM tt_5 WHERE trans_id= p_trans_id; +SELECT COALESCE(greatest(in_stmt_id + 1, p_stmt_id), 1) INTO in_stmt_id; +INSERT INTO tt_5(trans_id, stmt_id) VALUES (p_trans_id, in_stmt_id); +INSERT INTO tt_5(trans_id, stmt_id) VALUES (p_trans_id, in_stmt_id + 1); +END| +CREATE PROCEDURE pc_i_nt_5_suc (IN p_trans_id INTEGER, IN p_stmt_id INTEGER) +BEGIN +DECLARE in_stmt_id INTEGER; +SELECT max(stmt_id) INTO in_stmt_id FROM nt_5 WHERE trans_id= p_trans_id; +SELECT COALESCE(greatest(in_stmt_id + 1, p_stmt_id), 1) INTO in_stmt_id; +INSERT INTO nt_5(trans_id, stmt_id) VALUES (p_trans_id, in_stmt_id); +INSERT INTO nt_5(trans_id, stmt_id) VALUES (p_trans_id, in_stmt_id + 1); +END| +CREATE FUNCTION fc_i_tt_5_suc (p_trans_id INTEGER, p_stmt_id INTEGER) RETURNS VARCHAR(64) +BEGIN +DECLARE in_stmt_id INTEGER; +SELECT max(stmt_id) INTO in_stmt_id FROM tt_5 WHERE trans_id= p_trans_id; +SELECT COALESCE(greatest(in_stmt_id + 1, p_stmt_id), 1) INTO in_stmt_id; +INSERT INTO tt_5(trans_id, stmt_id) VALUES (p_trans_id, in_stmt_id); +INSERT INTO tt_5(trans_id, stmt_id) VALUES (p_trans_id, in_stmt_id + 1); +RETURN "fc_i_tt_5_suc"; +END| +CREATE FUNCTION fc_i_nt_5_suc (p_trans_id INTEGER, p_stmt_id INTEGER) RETURNS VARCHAR(64) +BEGIN +DECLARE in_stmt_id INTEGER; +SELECT max(stmt_id) INTO in_stmt_id FROM nt_5 WHERE trans_id= p_trans_id; +SELECT COALESCE(greatest(in_stmt_id + 1, p_stmt_id), 1) INTO in_stmt_id; +INSERT INTO nt_5(trans_id, stmt_id) VALUES (p_trans_id, in_stmt_id); +INSERT INTO nt_5(trans_id, stmt_id) VALUES (p_trans_id, in_stmt_id + 1); +RETURN "fc_i_nt_5_suc"; +END| +CREATE FUNCTION fc_i_nt_3_tt_3_suc (p_trans_id INTEGER, p_stmt_id INTEGER) RETURNS VARCHAR(64) +BEGIN +DECLARE in_stmt_id INTEGER; +SELECT max(stmt_id) INTO in_stmt_id FROM nt_3 WHERE trans_id= p_trans_id; +SELECT COALESCE(greatest(in_stmt_id + 1, p_stmt_id), 1) INTO in_stmt_id; +INSERT INTO nt_3(trans_id, stmt_id) VALUES (p_trans_id, in_stmt_id); +SELECT max(stmt_id) INTO in_stmt_id FROM tt_3 WHERE trans_id= p_trans_id; +SELECT COALESCE(greatest(in_stmt_id + 1, p_stmt_id), 1) INTO in_stmt_id; +INSERT INTO tt_3(trans_id, stmt_id) VALUES (p_trans_id, in_stmt_id); +RETURN "fc_i_nt_3_tt_3_suc"; +END| +CREATE TRIGGER tr_i_tt_3_to_nt_3 AFTER INSERT ON tt_3 FOR EACH ROW +BEGIN +DECLARE in_stmt_id INTEGER; +SELECT max(stmt_id) INTO in_stmt_id FROM nt_3 WHERE trans_id= NEW.trans_id; +SELECT COALESCE(greatest(in_stmt_id + 1, NEW.stmt_id), 1) INTO in_stmt_id; +INSERT INTO nt_3(trans_id, stmt_id) VALUES (NEW.trans_id, in_stmt_id); +INSERT INTO nt_3(trans_id, stmt_id) VALUES (NEW.trans_id, in_stmt_id + 1); +END| +CREATE TRIGGER tr_i_nt_4_to_tt_4 AFTER INSERT ON nt_4 FOR EACH ROW +BEGIN +DECLARE in_stmt_id INTEGER; +SELECT max(stmt_id) INTO in_stmt_id FROM tt_4 WHERE trans_id= NEW.trans_id; +SELECT COALESCE(greatest(in_stmt_id + 1, NEW.stmt_id), 1) INTO in_stmt_id; +INSERT INTO tt_4(trans_id, stmt_id) VALUES (NEW.trans_id, in_stmt_id); +INSERT INTO tt_4(trans_id, stmt_id) VALUES (NEW.trans_id, in_stmt_id + 1); +END| +CREATE TRIGGER tr_i_tt_5_to_tt_6 AFTER INSERT ON tt_5 FOR EACH ROW +BEGIN +DECLARE in_stmt_id INTEGER; +SELECT max(stmt_id) INTO in_stmt_id FROM tt_6 WHERE trans_id= NEW.trans_id; +SELECT COALESCE(greatest(in_stmt_id + 1, NEW.stmt_id, 1), 1) INTO in_stmt_id; +INSERT INTO tt_6(trans_id, stmt_id) VALUES (NEW.trans_id, in_stmt_id); +INSERT INTO tt_6(trans_id, stmt_id) VALUES (NEW.trans_id, in_stmt_id + 1); +END| +CREATE TRIGGER tr_i_nt_5_to_nt_6 AFTER INSERT ON nt_5 FOR EACH ROW +BEGIN +DECLARE in_stmt_id INTEGER; +SELECT max(stmt_id) INTO in_stmt_id FROM nt_6 WHERE trans_id= NEW.trans_id; +SELECT COALESCE(greatest(in_stmt_id + 1, NEW.stmt_id), 1) INTO in_stmt_id; +INSERT INTO nt_6(trans_id, stmt_id) VALUES (NEW.trans_id, in_stmt_id); +INSERT INTO nt_6(trans_id, stmt_id) VALUES (NEW.trans_id, in_stmt_id + 1); +END| +---- end configure database test_2 ---- +---- begin configure database test_3 ---- +rpl_mixing_engines.inc [commands=configure] +CREATE TABLE nt_1 (trans_id INT, stmt_id INT, info VARCHAR(64), PRIMARY KEY(trans_id, stmt_id)) ENGINE = MyISAM; +CREATE TABLE nt_2 (trans_id INT, stmt_id INT, info VARCHAR(64), PRIMARY KEY(trans_id, stmt_id)) ENGINE = MyISAM; +CREATE TABLE nt_3 (trans_id INT, stmt_id INT, info VARCHAR(64), PRIMARY KEY(trans_id, stmt_id)) ENGINE = MyISAM; +CREATE TABLE nt_4 (trans_id INT, stmt_id INT, info VARCHAR(64), PRIMARY KEY(trans_id, stmt_id)) ENGINE = MyISAM; +CREATE TABLE nt_5 (trans_id INT, stmt_id INT, info VARCHAR(64), PRIMARY KEY(trans_id, stmt_id)) ENGINE = MyISAM; +CREATE TABLE nt_6 (trans_id INT, stmt_id INT, info VARCHAR(64), PRIMARY KEY(trans_id, stmt_id)) ENGINE = MyISAM; +CREATE TABLE tt_1 (trans_id INT, stmt_id INT, info VARCHAR(64), PRIMARY KEY(trans_id, stmt_id)) ENGINE = "Innodb"; +CREATE TABLE tt_2 (trans_id INT, stmt_id INT, info VARCHAR(64), PRIMARY KEY(trans_id, stmt_id)) ENGINE = "Innodb"; +CREATE TABLE tt_3 (trans_id INT, stmt_id INT, info VARCHAR(64), PRIMARY KEY(trans_id, stmt_id)) ENGINE = "Innodb"; +CREATE TABLE tt_4 (trans_id INT, stmt_id INT, info VARCHAR(64), PRIMARY KEY(trans_id, stmt_id)) ENGINE = "Innodb"; +CREATE TABLE tt_5 (trans_id INT, stmt_id INT, info VARCHAR(64), PRIMARY KEY(trans_id, stmt_id)) ENGINE = "Innodb"; +CREATE TABLE tt_6 (trans_id INT, stmt_id INT, info VARCHAR(64), PRIMARY KEY(trans_id, stmt_id)) ENGINE = "Innodb"; +INSERT INTO nt_1(trans_id, stmt_id) VALUES(1,1); +INSERT INTO nt_2(trans_id, stmt_id) VALUES(1,1); +INSERT INTO nt_3(trans_id, stmt_id) VALUES(1,1); +INSERT INTO nt_4(trans_id, stmt_id) VALUES(1,1); +INSERT INTO nt_5(trans_id, stmt_id) VALUES(1,1); +INSERT INTO nt_6(trans_id, stmt_id) VALUES(1,1); +INSERT INTO tt_1(trans_id, stmt_id) VALUES(1,1); +INSERT INTO tt_2(trans_id, stmt_id) VALUES(1,1); +INSERT INTO tt_3(trans_id, stmt_id) VALUES(1,1); +INSERT INTO tt_4(trans_id, stmt_id) VALUES(1,1); +INSERT INTO tt_5(trans_id, stmt_id) VALUES(1,1); +INSERT INTO tt_6(trans_id, stmt_id) VALUES(1,1); +CREATE PROCEDURE pc_i_tt_5_suc (IN p_trans_id INTEGER, IN p_stmt_id INTEGER) +BEGIN +DECLARE in_stmt_id INTEGER; +SELECT max(stmt_id) INTO in_stmt_id FROM tt_5 WHERE trans_id= p_trans_id; +SELECT COALESCE(greatest(in_stmt_id + 1, p_stmt_id), 1) INTO in_stmt_id; +INSERT INTO tt_5(trans_id, stmt_id) VALUES (p_trans_id, in_stmt_id); +INSERT INTO tt_5(trans_id, stmt_id) VALUES (p_trans_id, in_stmt_id + 1); +END| +CREATE PROCEDURE pc_i_nt_5_suc (IN p_trans_id INTEGER, IN p_stmt_id INTEGER) +BEGIN +DECLARE in_stmt_id INTEGER; +SELECT max(stmt_id) INTO in_stmt_id FROM nt_5 WHERE trans_id= p_trans_id; +SELECT COALESCE(greatest(in_stmt_id + 1, p_stmt_id), 1) INTO in_stmt_id; +INSERT INTO nt_5(trans_id, stmt_id) VALUES (p_trans_id, in_stmt_id); +INSERT INTO nt_5(trans_id, stmt_id) VALUES (p_trans_id, in_stmt_id + 1); +END| +CREATE FUNCTION fc_i_tt_5_suc (p_trans_id INTEGER, p_stmt_id INTEGER) RETURNS VARCHAR(64) +BEGIN +DECLARE in_stmt_id INTEGER; +SELECT max(stmt_id) INTO in_stmt_id FROM tt_5 WHERE trans_id= p_trans_id; +SELECT COALESCE(greatest(in_stmt_id + 1, p_stmt_id), 1) INTO in_stmt_id; +INSERT INTO tt_5(trans_id, stmt_id) VALUES (p_trans_id, in_stmt_id); +INSERT INTO tt_5(trans_id, stmt_id) VALUES (p_trans_id, in_stmt_id + 1); +RETURN "fc_i_tt_5_suc"; +END| +CREATE FUNCTION fc_i_nt_5_suc (p_trans_id INTEGER, p_stmt_id INTEGER) RETURNS VARCHAR(64) +BEGIN +DECLARE in_stmt_id INTEGER; +SELECT max(stmt_id) INTO in_stmt_id FROM nt_5 WHERE trans_id= p_trans_id; +SELECT COALESCE(greatest(in_stmt_id + 1, p_stmt_id), 1) INTO in_stmt_id; +INSERT INTO nt_5(trans_id, stmt_id) VALUES (p_trans_id, in_stmt_id); +INSERT INTO nt_5(trans_id, stmt_id) VALUES (p_trans_id, in_stmt_id + 1); +RETURN "fc_i_nt_5_suc"; +END| +CREATE FUNCTION fc_i_nt_3_tt_3_suc (p_trans_id INTEGER, p_stmt_id INTEGER) RETURNS VARCHAR(64) +BEGIN +DECLARE in_stmt_id INTEGER; +SELECT max(stmt_id) INTO in_stmt_id FROM nt_3 WHERE trans_id= p_trans_id; +SELECT COALESCE(greatest(in_stmt_id + 1, p_stmt_id), 1) INTO in_stmt_id; +INSERT INTO nt_3(trans_id, stmt_id) VALUES (p_trans_id, in_stmt_id); +SELECT max(stmt_id) INTO in_stmt_id FROM tt_3 WHERE trans_id= p_trans_id; +SELECT COALESCE(greatest(in_stmt_id + 1, p_stmt_id), 1) INTO in_stmt_id; +INSERT INTO tt_3(trans_id, stmt_id) VALUES (p_trans_id, in_stmt_id); +RETURN "fc_i_nt_3_tt_3_suc"; +END| +CREATE TRIGGER tr_i_tt_3_to_nt_3 AFTER INSERT ON tt_3 FOR EACH ROW +BEGIN +DECLARE in_stmt_id INTEGER; +SELECT max(stmt_id) INTO in_stmt_id FROM nt_3 WHERE trans_id= NEW.trans_id; +SELECT COALESCE(greatest(in_stmt_id + 1, NEW.stmt_id), 1) INTO in_stmt_id; +INSERT INTO nt_3(trans_id, stmt_id) VALUES (NEW.trans_id, in_stmt_id); +INSERT INTO nt_3(trans_id, stmt_id) VALUES (NEW.trans_id, in_stmt_id + 1); +END| +CREATE TRIGGER tr_i_nt_4_to_tt_4 AFTER INSERT ON nt_4 FOR EACH ROW +BEGIN +DECLARE in_stmt_id INTEGER; +SELECT max(stmt_id) INTO in_stmt_id FROM tt_4 WHERE trans_id= NEW.trans_id; +SELECT COALESCE(greatest(in_stmt_id + 1, NEW.stmt_id), 1) INTO in_stmt_id; +INSERT INTO tt_4(trans_id, stmt_id) VALUES (NEW.trans_id, in_stmt_id); +INSERT INTO tt_4(trans_id, stmt_id) VALUES (NEW.trans_id, in_stmt_id + 1); +END| +CREATE TRIGGER tr_i_tt_5_to_tt_6 AFTER INSERT ON tt_5 FOR EACH ROW +BEGIN +DECLARE in_stmt_id INTEGER; +SELECT max(stmt_id) INTO in_stmt_id FROM tt_6 WHERE trans_id= NEW.trans_id; +SELECT COALESCE(greatest(in_stmt_id + 1, NEW.stmt_id, 1), 1) INTO in_stmt_id; +INSERT INTO tt_6(trans_id, stmt_id) VALUES (NEW.trans_id, in_stmt_id); +INSERT INTO tt_6(trans_id, stmt_id) VALUES (NEW.trans_id, in_stmt_id + 1); +END| +CREATE TRIGGER tr_i_nt_5_to_nt_6 AFTER INSERT ON nt_5 FOR EACH ROW +BEGIN +DECLARE in_stmt_id INTEGER; +SELECT max(stmt_id) INTO in_stmt_id FROM nt_6 WHERE trans_id= NEW.trans_id; +SELECT COALESCE(greatest(in_stmt_id + 1, NEW.stmt_id), 1) INTO in_stmt_id; +INSERT INTO nt_6(trans_id, stmt_id) VALUES (NEW.trans_id, in_stmt_id); +INSERT INTO nt_6(trans_id, stmt_id) VALUES (NEW.trans_id, in_stmt_id + 1); +END| +---- end configure database test_3 ---- +include/stop_slave.inc +SHOW CREATE TABLE mysql.slave_master_info; +Table Create Table +slave_master_info CREATE TABLE `slave_master_info` ( + `Number_of_lines` int(10) unsigned NOT NULL COMMENT 'Number of lines in the file.', + `Master_log_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'The name of the master binary log currently being read from the master.', + `Master_log_pos` bigint(20) unsigned NOT NULL COMMENT 'The master log position of the last read event.', + `Host` char(64) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT 'The host name of the master.', + `User_name` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The user name used to connect to the master.', + `User_password` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The password used to connect to the master.', + `Port` int(10) unsigned NOT NULL COMMENT 'The network port used to connect to the master.', + `Connect_retry` int(10) unsigned NOT NULL COMMENT 'The period (in seconds) that the slave will wait before trying to reconnect to the master.', + `Enabled_ssl` tinyint(1) NOT NULL COMMENT 'Indicates whether the server supports SSL connections.', + `Ssl_ca` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The file used for the Certificate Authority (CA) certificate.', + `Ssl_capath` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The path to the Certificate Authority (CA) certificates.', + `Ssl_cert` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The name of the SSL certificate file.', + `Ssl_cipher` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The name of the cipher in use for the SSL connection.', + `Ssl_key` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The name of the SSL key file.', + `Ssl_verify_server_cert` tinyint(1) NOT NULL COMMENT 'Whether to verify the server certificate.', + `Heartbeat` float NOT NULL, + `Bind` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'Displays which interface is employed when connecting to the MySQL server', + `Ignored_server_ids` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The number of server IDs to be ignored, followed by the actual server IDs', + `Uuid` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The master server uuid.', + `Retry_count` bigint(20) unsigned NOT NULL COMMENT 'Number of reconnect attempts, to the master, before giving up.', + `Ssl_crl` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The file used for the Certificate Revocation List (CRL)', + `Ssl_crlpath` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The path used for Certificate Revocation List (CRL) files', + `Enabled_auto_position` tinyint(1) NOT NULL COMMENT 'Indicates whether GTIDs will be used to retrieve events from the master.', + `Channel_name` char(64) NOT NULL COMMENT 'The channel on which the slave is connected to a source. Used in Multisource Replication', + `Tls_version` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'Tls version', + PRIMARY KEY (`Channel_name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 COMMENT='Master Information' +SHOW CREATE TABLE mysql.slave_relay_log_info; +Table Create Table +slave_relay_log_info CREATE TABLE `slave_relay_log_info` ( + `Number_of_lines` int(10) unsigned NOT NULL COMMENT 'Number of lines in the file or rows in the table. Used to version table definitions.', + `Relay_log_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'The name of the current relay log file.', + `Relay_log_pos` bigint(20) unsigned NOT NULL COMMENT 'The relay log position of the last executed event.', + `Master_log_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'The name of the master binary log file from which the events in the relay log file were read.', + `Master_log_pos` bigint(20) unsigned NOT NULL COMMENT 'The master log position of the last executed event.', + `Sql_delay` int(11) NOT NULL COMMENT 'The number of seconds that the slave must lag behind the master.', + `Number_of_workers` int(10) unsigned NOT NULL, + `Id` int(10) unsigned NOT NULL COMMENT 'Internal Id that uniquely identifies this record.', + `Channel_name` char(64) NOT NULL COMMENT 'The channel on which the slave is connected to a source. Used in Multisource Replication', + PRIMARY KEY (`Channel_name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 COMMENT='Relay Log Information' +SHOW CREATE TABLE mysql.slave_worker_info; +Table Create Table +slave_worker_info CREATE TABLE `slave_worker_info` ( + `Id` int(10) unsigned NOT NULL, + `Relay_log_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `Relay_log_pos` bigint(20) unsigned NOT NULL, + `Master_log_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `Master_log_pos` bigint(20) unsigned NOT NULL, + `Checkpoint_relay_log_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `Checkpoint_relay_log_pos` bigint(20) unsigned NOT NULL, + `Checkpoint_master_log_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `Checkpoint_master_log_pos` bigint(20) unsigned NOT NULL, + `Checkpoint_seqno` int(10) unsigned NOT NULL, + `Checkpoint_group_size` int(10) unsigned NOT NULL, + `Checkpoint_group_bitmap` blob NOT NULL, + `Channel_name` char(64) NOT NULL COMMENT 'The channel on which the slave is connected to a source. Used in Multisource Replication', + PRIMARY KEY (`Channel_name`,`Id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 COMMENT='Worker Information' +ALTER TABLE mysql.slave_master_info ENGINE= Innodb; +ALTER TABLE mysql.slave_relay_log_info ENGINE= Innodb; +ALTER TABLE mysql.slave_worker_info ENGINE= Innodb; +SHOW CREATE TABLE mysql.slave_master_info; +Table Create Table +slave_master_info CREATE TABLE `slave_master_info` ( + `Number_of_lines` int(10) unsigned NOT NULL COMMENT 'Number of lines in the file.', + `Master_log_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'The name of the master binary log currently being read from the master.', + `Master_log_pos` bigint(20) unsigned NOT NULL COMMENT 'The master log position of the last read event.', + `Host` char(64) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT 'The host name of the master.', + `User_name` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The user name used to connect to the master.', + `User_password` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The password used to connect to the master.', + `Port` int(10) unsigned NOT NULL COMMENT 'The network port used to connect to the master.', + `Connect_retry` int(10) unsigned NOT NULL COMMENT 'The period (in seconds) that the slave will wait before trying to reconnect to the master.', + `Enabled_ssl` tinyint(1) NOT NULL COMMENT 'Indicates whether the server supports SSL connections.', + `Ssl_ca` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The file used for the Certificate Authority (CA) certificate.', + `Ssl_capath` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The path to the Certificate Authority (CA) certificates.', + `Ssl_cert` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The name of the SSL certificate file.', + `Ssl_cipher` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The name of the cipher in use for the SSL connection.', + `Ssl_key` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The name of the SSL key file.', + `Ssl_verify_server_cert` tinyint(1) NOT NULL COMMENT 'Whether to verify the server certificate.', + `Heartbeat` float NOT NULL, + `Bind` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'Displays which interface is employed when connecting to the MySQL server', + `Ignored_server_ids` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The number of server IDs to be ignored, followed by the actual server IDs', + `Uuid` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The master server uuid.', + `Retry_count` bigint(20) unsigned NOT NULL COMMENT 'Number of reconnect attempts, to the master, before giving up.', + `Ssl_crl` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The file used for the Certificate Revocation List (CRL)', + `Ssl_crlpath` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The path used for Certificate Revocation List (CRL) files', + `Enabled_auto_position` tinyint(1) NOT NULL COMMENT 'Indicates whether GTIDs will be used to retrieve events from the master.', + `Channel_name` char(64) NOT NULL COMMENT 'The channel on which the slave is connected to a source. Used in Multisource Replication', + `Tls_version` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'Tls version', + PRIMARY KEY (`Channel_name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 COMMENT='Master Information' +SHOW CREATE TABLE mysql.slave_relay_log_info; +Table Create Table +slave_relay_log_info CREATE TABLE `slave_relay_log_info` ( + `Number_of_lines` int(10) unsigned NOT NULL COMMENT 'Number of lines in the file or rows in the table. Used to version table definitions.', + `Relay_log_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'The name of the current relay log file.', + `Relay_log_pos` bigint(20) unsigned NOT NULL COMMENT 'The relay log position of the last executed event.', + `Master_log_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'The name of the master binary log file from which the events in the relay log file were read.', + `Master_log_pos` bigint(20) unsigned NOT NULL COMMENT 'The master log position of the last executed event.', + `Sql_delay` int(11) NOT NULL COMMENT 'The number of seconds that the slave must lag behind the master.', + `Number_of_workers` int(10) unsigned NOT NULL, + `Id` int(10) unsigned NOT NULL COMMENT 'Internal Id that uniquely identifies this record.', + `Channel_name` char(64) NOT NULL COMMENT 'The channel on which the slave is connected to a source. Used in Multisource Replication', + PRIMARY KEY (`Channel_name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 COMMENT='Relay Log Information' +SHOW CREATE TABLE mysql.slave_worker_info; +Table Create Table +slave_worker_info CREATE TABLE `slave_worker_info` ( + `Id` int(10) unsigned NOT NULL, + `Relay_log_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `Relay_log_pos` bigint(20) unsigned NOT NULL, + `Master_log_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `Master_log_pos` bigint(20) unsigned NOT NULL, + `Checkpoint_relay_log_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `Checkpoint_relay_log_pos` bigint(20) unsigned NOT NULL, + `Checkpoint_master_log_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `Checkpoint_master_log_pos` bigint(20) unsigned NOT NULL, + `Checkpoint_seqno` int(10) unsigned NOT NULL, + `Checkpoint_group_size` int(10) unsigned NOT NULL, + `Checkpoint_group_bitmap` blob NOT NULL, + `Channel_name` char(64) NOT NULL COMMENT 'The channel on which the slave is connected to a source. Used in Multisource Replication', + PRIMARY KEY (`Channel_name`,`Id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 COMMENT='Worker Information' +==== end rpl_mts_crash_safe.inc:configure ==== +######################################################################## +# TEST +######################################################################## +SET @@global.slave_parallel_workers= 1; +SET @@global.slave_checkpoint_period= 0; +Generating Number of Workers 1 --- Number of Groups per worker 1 --- Debugging Groups 1 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (7, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (7, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (7, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (7, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +----Executing---- +==== begin rpl_mts_crash_safe.inc:recovery ==== +include/start_slave_io.inc +** fixing gaps ** +include/rpl_start_server.inc [server_number=2 parameters: --skip-slave-start --relay-log-recovery=0 --slave-parallel-workers=0] +START SLAVE UNTIL SQL_AFTER_MTS_GAPS; +include/wait_for_slave_param.inc [Until_Condition] +include/wait_for_slave_sql_to_stop.inc +** regular restart ** +include/rpl_restart_server.inc [server_number=2 parameters: --skip-slave-start --slave-transaction-retries=0 --relay-log-info-repository=TABLE --master-info-repository=TABLE --sync-master-info=1] +include/start_slave_io.inc +include/start_slave_sql.inc +include/stop_slave.inc +SET @@global.slave_parallel_workers= 1; +SET @@global.slave_checkpoint_period= 0; +==== end rpl_mts_crash_safe.inc:recovery ==== +SET @@global.slave_parallel_workers= 1; +SET @@global.slave_checkpoint_period= 0; +Generating Number of Workers 1 --- Number of Groups per worker 2 --- Debugging Groups 1 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (8, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (8, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (8, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (8, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 1 --- Number of Groups per worker 2 --- Debugging Groups 1 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (9, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (9, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (9, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (9, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +----Executing---- +==== begin rpl_mts_crash_safe.inc:recovery ==== +include/start_slave_io.inc +** fixing gaps ** +include/rpl_start_server.inc [server_number=2 parameters: --skip-slave-start --relay-log-recovery=0 --slave-parallel-workers=0] +START SLAVE UNTIL SQL_AFTER_MTS_GAPS; +include/wait_for_slave_param.inc [Until_Condition] +include/wait_for_slave_sql_to_stop.inc +** regular restart ** +include/rpl_restart_server.inc [server_number=2 parameters: --skip-slave-start --slave-transaction-retries=0 --relay-log-info-repository=TABLE --master-info-repository=TABLE --sync-master-info=1] +include/start_slave_io.inc +include/start_slave_sql.inc +include/stop_slave.inc +SET @@global.slave_parallel_workers= 1; +SET @@global.slave_checkpoint_period= 0; +==== end rpl_mts_crash_safe.inc:recovery ==== +SET @@global.slave_parallel_workers= 1; +SET @@global.slave_checkpoint_period= 0; +Generating Number of Workers 1 --- Number of Groups per worker 3 --- Debugging Groups 1 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (10, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (10, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (10, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (10, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 1 --- Number of Groups per worker 3 --- Debugging Groups 1 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (11, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (11, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (11, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (11, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 1 --- Number of Groups per worker 3 --- Debugging Groups 1 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (12, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (12, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (12, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (12, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +----Executing---- +==== begin rpl_mts_crash_safe.inc:recovery ==== +include/start_slave_io.inc +** fixing gaps ** +include/rpl_start_server.inc [server_number=2 parameters: --skip-slave-start --relay-log-recovery=0 --slave-parallel-workers=0] +START SLAVE UNTIL SQL_AFTER_MTS_GAPS; +include/wait_for_slave_param.inc [Until_Condition] +include/wait_for_slave_sql_to_stop.inc +** regular restart ** +include/rpl_restart_server.inc [server_number=2 parameters: --skip-slave-start --slave-transaction-retries=0 --relay-log-info-repository=TABLE --master-info-repository=TABLE --sync-master-info=1] +include/start_slave_io.inc +include/start_slave_sql.inc +include/stop_slave.inc +SET @@global.slave_parallel_workers= 1; +SET @@global.slave_checkpoint_period= 0; +==== end rpl_mts_crash_safe.inc:recovery ==== +SET @@global.slave_parallel_workers= 1; +SET @@global.slave_checkpoint_period= 1; +Generating Number of Workers 1 --- Number of Groups per worker 1 --- Debugging Groups 1 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (13, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (13, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (13, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (13, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +----Executing---- +==== begin rpl_mts_crash_safe.inc:recovery ==== +include/start_slave_io.inc +** fixing gaps ** +include/rpl_start_server.inc [server_number=2 parameters: --skip-slave-start --relay-log-recovery=0 --slave-parallel-workers=0] +START SLAVE UNTIL SQL_AFTER_MTS_GAPS; +include/wait_for_slave_param.inc [Until_Condition] +include/wait_for_slave_sql_to_stop.inc +** regular restart ** +include/rpl_restart_server.inc [server_number=2 parameters: --skip-slave-start --slave-transaction-retries=0 --relay-log-info-repository=TABLE --master-info-repository=TABLE --sync-master-info=1] +include/start_slave_io.inc +include/start_slave_sql.inc +include/stop_slave.inc +SET @@global.slave_parallel_workers= 1; +SET @@global.slave_checkpoint_period= 1; +==== end rpl_mts_crash_safe.inc:recovery ==== +SET @@global.slave_parallel_workers= 1; +SET @@global.slave_checkpoint_period= 1; +Generating Number of Workers 1 --- Number of Groups per worker 2 --- Debugging Groups 1 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (14, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (14, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (14, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (14, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 1 --- Number of Groups per worker 2 --- Debugging Groups 1 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (15, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (15, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (15, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (15, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +----Executing---- +==== begin rpl_mts_crash_safe.inc:recovery ==== +include/start_slave_io.inc +** fixing gaps ** +include/rpl_start_server.inc [server_number=2 parameters: --skip-slave-start --relay-log-recovery=0 --slave-parallel-workers=0] +START SLAVE UNTIL SQL_AFTER_MTS_GAPS; +include/wait_for_slave_param.inc [Until_Condition] +include/wait_for_slave_sql_to_stop.inc +** regular restart ** +include/rpl_restart_server.inc [server_number=2 parameters: --skip-slave-start --slave-transaction-retries=0 --relay-log-info-repository=TABLE --master-info-repository=TABLE --sync-master-info=1] +include/start_slave_io.inc +include/start_slave_sql.inc +include/stop_slave.inc +SET @@global.slave_parallel_workers= 1; +SET @@global.slave_checkpoint_period= 1; +==== end rpl_mts_crash_safe.inc:recovery ==== +SET @@global.slave_parallel_workers= 1; +SET @@global.slave_checkpoint_period= 1; +Generating Number of Workers 1 --- Number of Groups per worker 3 --- Debugging Groups 1 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (16, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (16, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (16, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (16, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 1 --- Number of Groups per worker 3 --- Debugging Groups 1 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (17, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (17, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (17, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (17, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 1 --- Number of Groups per worker 3 --- Debugging Groups 1 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (18, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (18, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (18, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (18, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +----Executing---- +==== begin rpl_mts_crash_safe.inc:recovery ==== +include/start_slave_io.inc +** fixing gaps ** +include/rpl_start_server.inc [server_number=2 parameters: --skip-slave-start --relay-log-recovery=0 --slave-parallel-workers=0] +START SLAVE UNTIL SQL_AFTER_MTS_GAPS; +include/wait_for_slave_param.inc [Until_Condition] +include/wait_for_slave_sql_to_stop.inc +** regular restart ** +include/rpl_restart_server.inc [server_number=2 parameters: --skip-slave-start --slave-transaction-retries=0 --relay-log-info-repository=TABLE --master-info-repository=TABLE --sync-master-info=1] +include/start_slave_io.inc +include/start_slave_sql.inc +include/stop_slave.inc +SET @@global.slave_parallel_workers= 1; +SET @@global.slave_checkpoint_period= 1; +==== end rpl_mts_crash_safe.inc:recovery ==== +SET @@global.slave_parallel_workers= 2; +SET @@global.slave_checkpoint_period= 0; +Generating Number of Workers 2 --- Number of Groups per worker 1 --- Debugging Groups 1 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (19, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (19, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (19, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (19, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 1 --- Debugging Groups 1 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (20, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (20, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (20, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (20, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +----Executing---- +==== begin rpl_mts_crash_safe.inc:recovery ==== +include/start_slave_io.inc +** fixing gaps ** +include/rpl_start_server.inc [server_number=2 parameters: --skip-slave-start --relay-log-recovery=0 --slave-parallel-workers=0] +START SLAVE UNTIL SQL_AFTER_MTS_GAPS; +include/wait_for_slave_param.inc [Until_Condition] +include/wait_for_slave_sql_to_stop.inc +** regular restart ** +include/rpl_restart_server.inc [server_number=2 parameters: --skip-slave-start --slave-transaction-retries=0 --relay-log-info-repository=TABLE --master-info-repository=TABLE --sync-master-info=1] +include/start_slave_io.inc +include/start_slave_sql.inc +include/stop_slave.inc +SET @@global.slave_parallel_workers= 2; +SET @@global.slave_checkpoint_period= 0; +==== end rpl_mts_crash_safe.inc:recovery ==== +SET @@global.slave_parallel_workers= 2; +SET @@global.slave_checkpoint_period= 0; +Generating Number of Workers 2 --- Number of Groups per worker 2 --- Debugging Groups 1 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (21, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (21, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (21, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (21, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 2 --- Debugging Groups 1 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (22, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (22, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (22, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (22, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 2 --- Debugging Groups 1 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (23, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (23, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (23, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (23, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 2 --- Debugging Groups 1 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (24, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (24, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (24, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (24, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +----Executing---- +==== begin rpl_mts_crash_safe.inc:recovery ==== +include/start_slave_io.inc +** fixing gaps ** +include/rpl_start_server.inc [server_number=2 parameters: --skip-slave-start --relay-log-recovery=0 --slave-parallel-workers=0] +START SLAVE UNTIL SQL_AFTER_MTS_GAPS; +include/wait_for_slave_param.inc [Until_Condition] +include/wait_for_slave_sql_to_stop.inc +** regular restart ** +include/rpl_restart_server.inc [server_number=2 parameters: --skip-slave-start --slave-transaction-retries=0 --relay-log-info-repository=TABLE --master-info-repository=TABLE --sync-master-info=1] +include/start_slave_io.inc +include/start_slave_sql.inc +include/stop_slave.inc +SET @@global.slave_parallel_workers= 2; +SET @@global.slave_checkpoint_period= 0; +==== end rpl_mts_crash_safe.inc:recovery ==== +SET @@global.slave_parallel_workers= 2; +SET @@global.slave_checkpoint_period= 0; +Generating Number of Workers 2 --- Number of Groups per worker 3 --- Debugging Groups 1 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (25, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (25, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (25, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (25, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 3 --- Debugging Groups 1 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (26, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (26, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (26, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (26, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 3 --- Debugging Groups 1 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (27, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (27, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (27, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (27, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 3 --- Debugging Groups 1 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (28, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (28, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (28, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (28, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 3 --- Debugging Groups 1 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (29, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (29, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (29, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (29, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 3 --- Debugging Groups 1 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (30, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (30, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (30, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (30, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +----Executing---- +==== begin rpl_mts_crash_safe.inc:recovery ==== +include/start_slave_io.inc +** fixing gaps ** +include/rpl_start_server.inc [server_number=2 parameters: --skip-slave-start --relay-log-recovery=0 --slave-parallel-workers=0] +START SLAVE UNTIL SQL_AFTER_MTS_GAPS; +include/wait_for_slave_param.inc [Until_Condition] +include/wait_for_slave_sql_to_stop.inc +** regular restart ** +include/rpl_restart_server.inc [server_number=2 parameters: --skip-slave-start --slave-transaction-retries=0 --relay-log-info-repository=TABLE --master-info-repository=TABLE --sync-master-info=1] +include/start_slave_io.inc +include/start_slave_sql.inc +include/stop_slave.inc +SET @@global.slave_parallel_workers= 2; +SET @@global.slave_checkpoint_period= 0; +==== end rpl_mts_crash_safe.inc:recovery ==== +SET @@global.slave_parallel_workers= 2; +SET @@global.slave_checkpoint_period= 1; +Generating Number of Workers 2 --- Number of Groups per worker 1 --- Debugging Groups 1 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (31, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (31, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (31, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (31, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 1 --- Debugging Groups 1 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (32, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (32, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (32, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (32, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +----Executing---- +==== begin rpl_mts_crash_safe.inc:recovery ==== +include/start_slave_io.inc +** fixing gaps ** +include/rpl_start_server.inc [server_number=2 parameters: --skip-slave-start --relay-log-recovery=0 --slave-parallel-workers=0] +START SLAVE UNTIL SQL_AFTER_MTS_GAPS; +include/wait_for_slave_param.inc [Until_Condition] +include/wait_for_slave_sql_to_stop.inc +** regular restart ** +include/rpl_restart_server.inc [server_number=2 parameters: --skip-slave-start --slave-transaction-retries=0 --relay-log-info-repository=TABLE --master-info-repository=TABLE --sync-master-info=1] +include/start_slave_io.inc +include/start_slave_sql.inc +include/stop_slave.inc +SET @@global.slave_parallel_workers= 2; +SET @@global.slave_checkpoint_period= 1; +==== end rpl_mts_crash_safe.inc:recovery ==== +SET @@global.slave_parallel_workers= 2; +SET @@global.slave_checkpoint_period= 1; +Generating Number of Workers 2 --- Number of Groups per worker 2 --- Debugging Groups 1 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (33, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (33, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (33, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (33, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 2 --- Debugging Groups 1 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (34, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (34, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (34, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (34, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 2 --- Debugging Groups 1 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (35, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (35, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (35, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (35, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 2 --- Debugging Groups 1 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (36, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (36, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (36, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (36, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +----Executing---- +==== begin rpl_mts_crash_safe.inc:recovery ==== +include/start_slave_io.inc +** fixing gaps ** +include/rpl_start_server.inc [server_number=2 parameters: --skip-slave-start --relay-log-recovery=0 --slave-parallel-workers=0] +START SLAVE UNTIL SQL_AFTER_MTS_GAPS; +include/wait_for_slave_param.inc [Until_Condition] +include/wait_for_slave_sql_to_stop.inc +** regular restart ** +include/rpl_restart_server.inc [server_number=2 parameters: --skip-slave-start --slave-transaction-retries=0 --relay-log-info-repository=TABLE --master-info-repository=TABLE --sync-master-info=1] +include/start_slave_io.inc +include/start_slave_sql.inc +include/stop_slave.inc +SET @@global.slave_parallel_workers= 2; +SET @@global.slave_checkpoint_period= 1; +==== end rpl_mts_crash_safe.inc:recovery ==== +SET @@global.slave_parallel_workers= 2; +SET @@global.slave_checkpoint_period= 1; +Generating Number of Workers 2 --- Number of Groups per worker 3 --- Debugging Groups 1 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (37, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (37, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (37, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (37, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 3 --- Debugging Groups 1 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (38, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (38, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (38, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (38, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 3 --- Debugging Groups 1 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (39, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (39, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (39, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (39, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 3 --- Debugging Groups 1 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (40, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (40, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (40, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (40, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 3 --- Debugging Groups 1 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (41, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (41, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (41, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (41, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 3 --- Debugging Groups 1 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (42, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (42, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (42, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (42, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +----Executing---- +==== begin rpl_mts_crash_safe.inc:recovery ==== +include/start_slave_io.inc +** fixing gaps ** +include/rpl_start_server.inc [server_number=2 parameters: --skip-slave-start --relay-log-recovery=0 --slave-parallel-workers=0] +START SLAVE UNTIL SQL_AFTER_MTS_GAPS; +include/wait_for_slave_param.inc [Until_Condition] +include/wait_for_slave_sql_to_stop.inc +** regular restart ** +include/rpl_restart_server.inc [server_number=2 parameters: --skip-slave-start --slave-transaction-retries=0 --relay-log-info-repository=TABLE --master-info-repository=TABLE --sync-master-info=1] +include/start_slave_io.inc +include/start_slave_sql.inc +include/stop_slave.inc +SET @@global.slave_parallel_workers= 2; +SET @@global.slave_checkpoint_period= 1; +==== end rpl_mts_crash_safe.inc:recovery ==== +SET @@global.slave_parallel_workers= 3; +SET @@global.slave_checkpoint_period= 0; +Generating Number of Workers 3 --- Number of Groups per worker 1 --- Debugging Groups 1 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (43, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (43, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (43, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (43, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 1 --- Debugging Groups 1 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (44, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (44, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (44, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (44, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 1 --- Debugging Groups 1 --- Database test_3 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (45, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (45, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (45, 2) +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (45, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +----Executing---- +==== begin rpl_mts_crash_safe.inc:recovery ==== +include/start_slave_io.inc +** fixing gaps ** +include/rpl_start_server.inc [server_number=2 parameters: --skip-slave-start --relay-log-recovery=0 --slave-parallel-workers=0] +START SLAVE UNTIL SQL_AFTER_MTS_GAPS; +include/wait_for_slave_param.inc [Until_Condition] +include/wait_for_slave_sql_to_stop.inc +** regular restart ** +include/rpl_restart_server.inc [server_number=2 parameters: --skip-slave-start --slave-transaction-retries=0 --relay-log-info-repository=TABLE --master-info-repository=TABLE --sync-master-info=1] +include/start_slave_io.inc +include/start_slave_sql.inc +include/stop_slave.inc +SET @@global.slave_parallel_workers= 3; +SET @@global.slave_checkpoint_period= 0; +==== end rpl_mts_crash_safe.inc:recovery ==== +SET @@global.slave_parallel_workers= 3; +SET @@global.slave_checkpoint_period= 0; +Generating Number of Workers 3 --- Number of Groups per worker 2 --- Debugging Groups 1 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (46, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (46, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (46, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (46, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 2 --- Debugging Groups 1 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (47, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (47, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (47, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (47, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 2 --- Debugging Groups 1 --- Database test_3 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (48, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (48, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (48, 2) +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (48, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 2 --- Debugging Groups 1 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (49, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (49, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (49, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (49, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 2 --- Debugging Groups 1 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (50, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (50, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (50, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (50, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 2 --- Debugging Groups 1 --- Database test_3 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (51, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (51, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (51, 2) +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (51, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +----Executing---- +==== begin rpl_mts_crash_safe.inc:recovery ==== +include/start_slave_io.inc +** fixing gaps ** +include/rpl_start_server.inc [server_number=2 parameters: --skip-slave-start --relay-log-recovery=0 --slave-parallel-workers=0] +START SLAVE UNTIL SQL_AFTER_MTS_GAPS; +include/wait_for_slave_param.inc [Until_Condition] +include/wait_for_slave_sql_to_stop.inc +** regular restart ** +include/rpl_restart_server.inc [server_number=2 parameters: --skip-slave-start --slave-transaction-retries=0 --relay-log-info-repository=TABLE --master-info-repository=TABLE --sync-master-info=1] +include/start_slave_io.inc +include/start_slave_sql.inc +include/stop_slave.inc +SET @@global.slave_parallel_workers= 3; +SET @@global.slave_checkpoint_period= 0; +==== end rpl_mts_crash_safe.inc:recovery ==== +SET @@global.slave_parallel_workers= 3; +SET @@global.slave_checkpoint_period= 0; +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 1 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (52, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (52, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (52, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (52, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 1 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (53, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (53, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (53, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (53, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 1 --- Database test_3 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (54, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (54, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (54, 2) +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (54, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 1 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (55, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (55, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (55, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (55, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 1 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (56, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (56, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (56, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (56, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 1 --- Database test_3 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (57, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (57, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (57, 2) +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (57, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 1 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (58, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (58, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (58, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (58, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 1 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (59, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (59, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (59, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (59, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 1 --- Database test_3 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (60, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (60, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (60, 2) +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (60, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +----Executing---- +==== begin rpl_mts_crash_safe.inc:recovery ==== +include/start_slave_io.inc +** fixing gaps ** +include/rpl_start_server.inc [server_number=2 parameters: --skip-slave-start --relay-log-recovery=0 --slave-parallel-workers=0] +START SLAVE UNTIL SQL_AFTER_MTS_GAPS; +include/wait_for_slave_param.inc [Until_Condition] +include/wait_for_slave_sql_to_stop.inc +** regular restart ** +include/rpl_restart_server.inc [server_number=2 parameters: --skip-slave-start --slave-transaction-retries=0 --relay-log-info-repository=TABLE --master-info-repository=TABLE --sync-master-info=1] +include/start_slave_io.inc +include/start_slave_sql.inc +include/stop_slave.inc +SET @@global.slave_parallel_workers= 3; +SET @@global.slave_checkpoint_period= 0; +==== end rpl_mts_crash_safe.inc:recovery ==== +SET @@global.slave_parallel_workers= 3; +SET @@global.slave_checkpoint_period= 1; +Generating Number of Workers 3 --- Number of Groups per worker 1 --- Debugging Groups 1 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (61, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (61, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (61, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (61, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 1 --- Debugging Groups 1 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (62, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (62, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (62, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (62, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 1 --- Debugging Groups 1 --- Database test_3 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (63, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (63, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (63, 2) +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (63, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +----Executing---- +==== begin rpl_mts_crash_safe.inc:recovery ==== +include/start_slave_io.inc +** fixing gaps ** +include/rpl_start_server.inc [server_number=2 parameters: --skip-slave-start --relay-log-recovery=0 --slave-parallel-workers=0] +START SLAVE UNTIL SQL_AFTER_MTS_GAPS; +include/wait_for_slave_param.inc [Until_Condition] +include/wait_for_slave_sql_to_stop.inc +** regular restart ** +include/rpl_restart_server.inc [server_number=2 parameters: --skip-slave-start --slave-transaction-retries=0 --relay-log-info-repository=TABLE --master-info-repository=TABLE --sync-master-info=1] +include/start_slave_io.inc +include/start_slave_sql.inc +include/stop_slave.inc +SET @@global.slave_parallel_workers= 3; +SET @@global.slave_checkpoint_period= 1; +==== end rpl_mts_crash_safe.inc:recovery ==== +SET @@global.slave_parallel_workers= 3; +SET @@global.slave_checkpoint_period= 1; +Generating Number of Workers 3 --- Number of Groups per worker 2 --- Debugging Groups 1 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (64, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (64, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (64, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (64, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 2 --- Debugging Groups 1 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (65, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (65, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (65, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (65, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 2 --- Debugging Groups 1 --- Database test_3 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (66, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (66, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (66, 2) +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (66, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 2 --- Debugging Groups 1 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (67, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (67, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (67, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (67, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 2 --- Debugging Groups 1 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (68, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (68, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (68, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (68, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 2 --- Debugging Groups 1 --- Database test_3 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (69, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (69, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (69, 2) +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (69, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +----Executing---- +==== begin rpl_mts_crash_safe.inc:recovery ==== +include/start_slave_io.inc +** fixing gaps ** +include/rpl_start_server.inc [server_number=2 parameters: --skip-slave-start --relay-log-recovery=0 --slave-parallel-workers=0] +START SLAVE UNTIL SQL_AFTER_MTS_GAPS; +include/wait_for_slave_param.inc [Until_Condition] +include/wait_for_slave_sql_to_stop.inc +** regular restart ** +include/rpl_restart_server.inc [server_number=2 parameters: --skip-slave-start --slave-transaction-retries=0 --relay-log-info-repository=TABLE --master-info-repository=TABLE --sync-master-info=1] +include/start_slave_io.inc +include/start_slave_sql.inc +include/stop_slave.inc +SET @@global.slave_parallel_workers= 3; +SET @@global.slave_checkpoint_period= 1; +==== end rpl_mts_crash_safe.inc:recovery ==== +SET @@global.slave_parallel_workers= 3; +SET @@global.slave_checkpoint_period= 1; +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 1 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (70, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (70, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (70, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (70, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 1 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (71, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (71, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (71, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (71, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 1 --- Database test_3 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (72, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (72, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (72, 2) +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (72, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 1 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (73, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (73, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (73, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (73, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 1 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (74, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (74, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (74, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (74, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 1 --- Database test_3 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (75, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (75, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (75, 2) +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (75, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 1 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (76, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (76, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (76, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (76, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 1 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (77, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (77, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (77, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (77, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 1 --- Database test_3 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (78, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (78, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (78, 2) +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (78, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +----Executing---- +==== begin rpl_mts_crash_safe.inc:recovery ==== +include/start_slave_io.inc +** fixing gaps ** +include/rpl_start_server.inc [server_number=2 parameters: --skip-slave-start --relay-log-recovery=0 --slave-parallel-workers=0] +START SLAVE UNTIL SQL_AFTER_MTS_GAPS; +include/wait_for_slave_param.inc [Until_Condition] +include/wait_for_slave_sql_to_stop.inc +** regular restart ** +include/rpl_restart_server.inc [server_number=2 parameters: --skip-slave-start --slave-transaction-retries=0 --relay-log-info-repository=TABLE --master-info-repository=TABLE --sync-master-info=1] +include/start_slave_io.inc +include/start_slave_sql.inc +include/stop_slave.inc +SET @@global.slave_parallel_workers= 3; +SET @@global.slave_checkpoint_period= 1; +==== end rpl_mts_crash_safe.inc:recovery ==== +SET @@global.slave_parallel_workers= 1; +SET @@global.slave_checkpoint_period= 0; +Generating Number of Workers 1 --- Number of Groups per worker 2 --- Debugging Groups 2 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (79, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (79, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (79, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (79, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 1 --- Number of Groups per worker 2 --- Debugging Groups 2 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (80, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (80, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (80, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (80, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +----Executing---- +==== begin rpl_mts_crash_safe.inc:recovery ==== +include/start_slave_io.inc +** fixing gaps ** +include/rpl_start_server.inc [server_number=2 parameters: --skip-slave-start --relay-log-recovery=0 --slave-parallel-workers=0] +START SLAVE UNTIL SQL_AFTER_MTS_GAPS; +include/wait_for_slave_param.inc [Until_Condition] +include/wait_for_slave_sql_to_stop.inc +** regular restart ** +include/rpl_restart_server.inc [server_number=2 parameters: --skip-slave-start --slave-transaction-retries=0 --relay-log-info-repository=TABLE --master-info-repository=TABLE --sync-master-info=1] +include/start_slave_io.inc +include/start_slave_sql.inc +include/stop_slave.inc +SET @@global.slave_parallel_workers= 1; +SET @@global.slave_checkpoint_period= 0; +==== end rpl_mts_crash_safe.inc:recovery ==== +SET @@global.slave_parallel_workers= 1; +SET @@global.slave_checkpoint_period= 0; +Generating Number of Workers 1 --- Number of Groups per worker 3 --- Debugging Groups 2 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (81, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (81, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (81, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (81, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 1 --- Number of Groups per worker 3 --- Debugging Groups 2 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (82, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (82, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (82, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (82, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 1 --- Number of Groups per worker 3 --- Debugging Groups 2 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (83, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (83, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (83, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (83, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +----Executing---- +==== begin rpl_mts_crash_safe.inc:recovery ==== +include/start_slave_io.inc +** fixing gaps ** +include/rpl_start_server.inc [server_number=2 parameters: --skip-slave-start --relay-log-recovery=0 --slave-parallel-workers=0] +START SLAVE UNTIL SQL_AFTER_MTS_GAPS; +include/wait_for_slave_param.inc [Until_Condition] +include/wait_for_slave_sql_to_stop.inc +** regular restart ** +include/rpl_restart_server.inc [server_number=2 parameters: --skip-slave-start --slave-transaction-retries=0 --relay-log-info-repository=TABLE --master-info-repository=TABLE --sync-master-info=1] +include/start_slave_io.inc +include/start_slave_sql.inc +include/stop_slave.inc +SET @@global.slave_parallel_workers= 1; +SET @@global.slave_checkpoint_period= 0; +==== end rpl_mts_crash_safe.inc:recovery ==== +SET @@global.slave_parallel_workers= 1; +SET @@global.slave_checkpoint_period= 1; +Generating Number of Workers 1 --- Number of Groups per worker 2 --- Debugging Groups 2 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (84, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (84, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (84, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (84, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 1 --- Number of Groups per worker 2 --- Debugging Groups 2 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (85, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (85, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (85, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (85, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +----Executing---- +==== begin rpl_mts_crash_safe.inc:recovery ==== +include/start_slave_io.inc +** fixing gaps ** +include/rpl_start_server.inc [server_number=2 parameters: --skip-slave-start --relay-log-recovery=0 --slave-parallel-workers=0] +START SLAVE UNTIL SQL_AFTER_MTS_GAPS; +include/wait_for_slave_param.inc [Until_Condition] +include/wait_for_slave_sql_to_stop.inc +** regular restart ** +include/rpl_restart_server.inc [server_number=2 parameters: --skip-slave-start --slave-transaction-retries=0 --relay-log-info-repository=TABLE --master-info-repository=TABLE --sync-master-info=1] +include/start_slave_io.inc +include/start_slave_sql.inc +include/stop_slave.inc +SET @@global.slave_parallel_workers= 1; +SET @@global.slave_checkpoint_period= 1; +==== end rpl_mts_crash_safe.inc:recovery ==== +SET @@global.slave_parallel_workers= 1; +SET @@global.slave_checkpoint_period= 1; +Generating Number of Workers 1 --- Number of Groups per worker 3 --- Debugging Groups 2 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (86, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (86, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (86, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (86, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 1 --- Number of Groups per worker 3 --- Debugging Groups 2 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (87, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (87, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (87, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (87, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 1 --- Number of Groups per worker 3 --- Debugging Groups 2 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (88, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (88, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (88, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (88, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +----Executing---- +==== begin rpl_mts_crash_safe.inc:recovery ==== +include/start_slave_io.inc +** fixing gaps ** +include/rpl_start_server.inc [server_number=2 parameters: --skip-slave-start --relay-log-recovery=0 --slave-parallel-workers=0] +START SLAVE UNTIL SQL_AFTER_MTS_GAPS; +include/wait_for_slave_param.inc [Until_Condition] +include/wait_for_slave_sql_to_stop.inc +** regular restart ** +include/rpl_restart_server.inc [server_number=2 parameters: --skip-slave-start --slave-transaction-retries=0 --relay-log-info-repository=TABLE --master-info-repository=TABLE --sync-master-info=1] +include/start_slave_io.inc +include/start_slave_sql.inc +include/stop_slave.inc +SET @@global.slave_parallel_workers= 1; +SET @@global.slave_checkpoint_period= 1; +==== end rpl_mts_crash_safe.inc:recovery ==== +SET @@global.slave_parallel_workers= 1; +SET @@global.slave_checkpoint_period= 2; +Generating Number of Workers 1 --- Number of Groups per worker 2 --- Debugging Groups 2 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (89, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (89, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (89, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (89, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 1 --- Number of Groups per worker 2 --- Debugging Groups 2 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (90, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (90, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (90, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (90, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +----Executing---- +==== begin rpl_mts_crash_safe.inc:recovery ==== +include/start_slave_io.inc +** fixing gaps ** +include/rpl_start_server.inc [server_number=2 parameters: --skip-slave-start --relay-log-recovery=0 --slave-parallel-workers=0] +START SLAVE UNTIL SQL_AFTER_MTS_GAPS; +include/wait_for_slave_param.inc [Until_Condition] +include/wait_for_slave_sql_to_stop.inc +** regular restart ** +include/rpl_restart_server.inc [server_number=2 parameters: --skip-slave-start --slave-transaction-retries=0 --relay-log-info-repository=TABLE --master-info-repository=TABLE --sync-master-info=1] +include/start_slave_io.inc +include/start_slave_sql.inc +include/stop_slave.inc +SET @@global.slave_parallel_workers= 1; +SET @@global.slave_checkpoint_period= 2; +==== end rpl_mts_crash_safe.inc:recovery ==== +SET @@global.slave_parallel_workers= 1; +SET @@global.slave_checkpoint_period= 2; +Generating Number of Workers 1 --- Number of Groups per worker 3 --- Debugging Groups 2 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (91, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (91, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (91, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (91, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 1 --- Number of Groups per worker 3 --- Debugging Groups 2 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (92, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (92, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (92, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (92, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 1 --- Number of Groups per worker 3 --- Debugging Groups 2 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (93, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (93, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (93, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (93, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +----Executing---- +==== begin rpl_mts_crash_safe.inc:recovery ==== +include/start_slave_io.inc +** fixing gaps ** +include/rpl_start_server.inc [server_number=2 parameters: --skip-slave-start --relay-log-recovery=0 --slave-parallel-workers=0] +START SLAVE UNTIL SQL_AFTER_MTS_GAPS; +include/wait_for_slave_param.inc [Until_Condition] +include/wait_for_slave_sql_to_stop.inc +** regular restart ** +include/rpl_restart_server.inc [server_number=2 parameters: --skip-slave-start --slave-transaction-retries=0 --relay-log-info-repository=TABLE --master-info-repository=TABLE --sync-master-info=1] +include/start_slave_io.inc +include/start_slave_sql.inc +include/stop_slave.inc +SET @@global.slave_parallel_workers= 1; +SET @@global.slave_checkpoint_period= 2; +==== end rpl_mts_crash_safe.inc:recovery ==== +SET @@global.slave_parallel_workers= 2; +SET @@global.slave_checkpoint_period= 0; +Generating Number of Workers 2 --- Number of Groups per worker 2 --- Debugging Groups 2 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (94, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (94, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (94, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (94, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 2 --- Debugging Groups 2 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (95, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (95, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (95, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (95, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 2 --- Debugging Groups 2 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (96, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (96, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (96, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (96, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 2 --- Debugging Groups 2 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (97, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (97, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (97, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (97, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +----Executing---- +==== begin rpl_mts_crash_safe.inc:recovery ==== +include/start_slave_io.inc +** fixing gaps ** +include/rpl_start_server.inc [server_number=2 parameters: --skip-slave-start --relay-log-recovery=0 --slave-parallel-workers=0] +START SLAVE UNTIL SQL_AFTER_MTS_GAPS; +include/wait_for_slave_param.inc [Until_Condition] +include/wait_for_slave_sql_to_stop.inc +** regular restart ** +include/rpl_restart_server.inc [server_number=2 parameters: --skip-slave-start --slave-transaction-retries=0 --relay-log-info-repository=TABLE --master-info-repository=TABLE --sync-master-info=1] +include/start_slave_io.inc +include/start_slave_sql.inc +include/stop_slave.inc +SET @@global.slave_parallel_workers= 2; +SET @@global.slave_checkpoint_period= 0; +==== end rpl_mts_crash_safe.inc:recovery ==== +SET @@global.slave_parallel_workers= 2; +SET @@global.slave_checkpoint_period= 0; +Generating Number of Workers 2 --- Number of Groups per worker 3 --- Debugging Groups 2 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (98, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (98, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (98, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (98, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 3 --- Debugging Groups 2 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (99, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (99, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (99, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (99, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 3 --- Debugging Groups 2 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (100, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (100, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (100, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (100, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 3 --- Debugging Groups 2 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (101, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (101, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (101, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (101, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 3 --- Debugging Groups 2 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (102, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (102, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (102, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (102, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 3 --- Debugging Groups 2 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (103, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (103, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (103, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (103, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +----Executing---- +==== begin rpl_mts_crash_safe.inc:recovery ==== +include/start_slave_io.inc +** fixing gaps ** +include/rpl_start_server.inc [server_number=2 parameters: --skip-slave-start --relay-log-recovery=0 --slave-parallel-workers=0] +START SLAVE UNTIL SQL_AFTER_MTS_GAPS; +include/wait_for_slave_param.inc [Until_Condition] +include/wait_for_slave_sql_to_stop.inc +** regular restart ** +include/rpl_restart_server.inc [server_number=2 parameters: --skip-slave-start --slave-transaction-retries=0 --relay-log-info-repository=TABLE --master-info-repository=TABLE --sync-master-info=1] +include/start_slave_io.inc +include/start_slave_sql.inc +include/stop_slave.inc +SET @@global.slave_parallel_workers= 2; +SET @@global.slave_checkpoint_period= 0; +==== end rpl_mts_crash_safe.inc:recovery ==== +SET @@global.slave_parallel_workers= 2; +SET @@global.slave_checkpoint_period= 1; +Generating Number of Workers 2 --- Number of Groups per worker 2 --- Debugging Groups 2 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (104, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (104, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (104, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (104, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 2 --- Debugging Groups 2 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (105, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (105, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (105, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (105, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 2 --- Debugging Groups 2 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (106, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (106, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (106, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (106, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 2 --- Debugging Groups 2 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (107, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (107, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (107, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (107, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +----Executing---- +==== begin rpl_mts_crash_safe.inc:recovery ==== +include/start_slave_io.inc +** fixing gaps ** +include/rpl_start_server.inc [server_number=2 parameters: --skip-slave-start --relay-log-recovery=0 --slave-parallel-workers=0] +START SLAVE UNTIL SQL_AFTER_MTS_GAPS; +include/wait_for_slave_param.inc [Until_Condition] +include/wait_for_slave_sql_to_stop.inc +** regular restart ** +include/rpl_restart_server.inc [server_number=2 parameters: --skip-slave-start --slave-transaction-retries=0 --relay-log-info-repository=TABLE --master-info-repository=TABLE --sync-master-info=1] +include/start_slave_io.inc +include/start_slave_sql.inc +include/stop_slave.inc +SET @@global.slave_parallel_workers= 2; +SET @@global.slave_checkpoint_period= 1; +==== end rpl_mts_crash_safe.inc:recovery ==== +SET @@global.slave_parallel_workers= 2; +SET @@global.slave_checkpoint_period= 1; +Generating Number of Workers 2 --- Number of Groups per worker 3 --- Debugging Groups 2 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (108, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (108, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (108, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (108, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 3 --- Debugging Groups 2 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (109, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (109, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (109, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (109, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 3 --- Debugging Groups 2 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (110, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (110, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (110, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (110, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 3 --- Debugging Groups 2 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (111, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (111, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (111, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (111, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 3 --- Debugging Groups 2 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (112, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (112, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (112, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (112, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 3 --- Debugging Groups 2 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (113, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (113, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (113, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (113, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +----Executing---- +==== begin rpl_mts_crash_safe.inc:recovery ==== +include/start_slave_io.inc +** fixing gaps ** +include/rpl_start_server.inc [server_number=2 parameters: --skip-slave-start --relay-log-recovery=0 --slave-parallel-workers=0] +START SLAVE UNTIL SQL_AFTER_MTS_GAPS; +include/wait_for_slave_param.inc [Until_Condition] +include/wait_for_slave_sql_to_stop.inc +** regular restart ** +include/rpl_restart_server.inc [server_number=2 parameters: --skip-slave-start --slave-transaction-retries=0 --relay-log-info-repository=TABLE --master-info-repository=TABLE --sync-master-info=1] +include/start_slave_io.inc +include/start_slave_sql.inc +include/stop_slave.inc +SET @@global.slave_parallel_workers= 2; +SET @@global.slave_checkpoint_period= 1; +==== end rpl_mts_crash_safe.inc:recovery ==== +SET @@global.slave_parallel_workers= 2; +SET @@global.slave_checkpoint_period= 2; +Generating Number of Workers 2 --- Number of Groups per worker 2 --- Debugging Groups 2 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (114, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (114, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (114, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (114, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 2 --- Debugging Groups 2 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (115, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (115, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (115, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (115, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 2 --- Debugging Groups 2 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (116, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (116, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (116, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (116, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 2 --- Debugging Groups 2 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (117, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (117, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (117, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (117, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +----Executing---- +==== begin rpl_mts_crash_safe.inc:recovery ==== +include/start_slave_io.inc +** fixing gaps ** +include/rpl_start_server.inc [server_number=2 parameters: --skip-slave-start --relay-log-recovery=0 --slave-parallel-workers=0] +START SLAVE UNTIL SQL_AFTER_MTS_GAPS; +include/wait_for_slave_param.inc [Until_Condition] +include/wait_for_slave_sql_to_stop.inc +** regular restart ** +include/rpl_restart_server.inc [server_number=2 parameters: --skip-slave-start --slave-transaction-retries=0 --relay-log-info-repository=TABLE --master-info-repository=TABLE --sync-master-info=1] +include/start_slave_io.inc +include/start_slave_sql.inc +include/stop_slave.inc +SET @@global.slave_parallel_workers= 2; +SET @@global.slave_checkpoint_period= 2; +==== end rpl_mts_crash_safe.inc:recovery ==== +SET @@global.slave_parallel_workers= 2; +SET @@global.slave_checkpoint_period= 2; +Generating Number of Workers 2 --- Number of Groups per worker 3 --- Debugging Groups 2 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (118, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (118, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (118, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (118, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 3 --- Debugging Groups 2 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (119, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (119, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (119, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (119, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 3 --- Debugging Groups 2 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (120, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (120, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (120, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (120, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 3 --- Debugging Groups 2 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (121, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (121, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (121, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (121, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 3 --- Debugging Groups 2 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (122, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (122, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (122, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (122, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 3 --- Debugging Groups 2 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (123, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (123, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (123, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (123, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +----Executing---- +==== begin rpl_mts_crash_safe.inc:recovery ==== +include/start_slave_io.inc +** fixing gaps ** +include/rpl_start_server.inc [server_number=2 parameters: --skip-slave-start --relay-log-recovery=0 --slave-parallel-workers=0] +START SLAVE UNTIL SQL_AFTER_MTS_GAPS; +include/wait_for_slave_param.inc [Until_Condition] +include/wait_for_slave_sql_to_stop.inc +** regular restart ** +include/rpl_restart_server.inc [server_number=2 parameters: --skip-slave-start --slave-transaction-retries=0 --relay-log-info-repository=TABLE --master-info-repository=TABLE --sync-master-info=1] +include/start_slave_io.inc +include/start_slave_sql.inc +include/stop_slave.inc +SET @@global.slave_parallel_workers= 2; +SET @@global.slave_checkpoint_period= 2; +==== end rpl_mts_crash_safe.inc:recovery ==== +SET @@global.slave_parallel_workers= 3; +SET @@global.slave_checkpoint_period= 0; +Generating Number of Workers 3 --- Number of Groups per worker 2 --- Debugging Groups 2 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (124, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (124, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (124, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (124, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 2 --- Debugging Groups 2 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (125, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (125, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (125, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (125, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 2 --- Debugging Groups 2 --- Database test_3 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (126, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (126, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (126, 2) +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (126, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 2 --- Debugging Groups 2 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (127, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (127, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (127, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (127, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 2 --- Debugging Groups 2 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (128, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (128, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (128, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (128, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 2 --- Debugging Groups 2 --- Database test_3 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (129, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (129, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (129, 2) +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (129, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +----Executing---- +==== begin rpl_mts_crash_safe.inc:recovery ==== +include/start_slave_io.inc +** fixing gaps ** +include/rpl_start_server.inc [server_number=2 parameters: --skip-slave-start --relay-log-recovery=0 --slave-parallel-workers=0] +START SLAVE UNTIL SQL_AFTER_MTS_GAPS; +include/wait_for_slave_param.inc [Until_Condition] +include/wait_for_slave_sql_to_stop.inc +** regular restart ** +include/rpl_restart_server.inc [server_number=2 parameters: --skip-slave-start --slave-transaction-retries=0 --relay-log-info-repository=TABLE --master-info-repository=TABLE --sync-master-info=1] +include/start_slave_io.inc +include/start_slave_sql.inc +include/stop_slave.inc +SET @@global.slave_parallel_workers= 3; +SET @@global.slave_checkpoint_period= 0; +==== end rpl_mts_crash_safe.inc:recovery ==== +SET @@global.slave_parallel_workers= 3; +SET @@global.slave_checkpoint_period= 0; +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 2 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (130, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (130, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (130, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (130, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 2 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (131, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (131, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (131, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (131, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 2 --- Database test_3 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (132, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (132, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (132, 2) +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (132, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 2 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (133, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (133, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (133, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (133, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 2 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (134, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (134, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (134, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (134, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 2 --- Database test_3 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (135, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (135, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (135, 2) +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (135, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 2 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (136, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (136, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (136, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (136, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 2 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (137, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (137, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (137, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (137, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 2 --- Database test_3 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (138, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (138, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (138, 2) +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (138, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +----Executing---- +==== begin rpl_mts_crash_safe.inc:recovery ==== +include/start_slave_io.inc +** fixing gaps ** +include/rpl_start_server.inc [server_number=2 parameters: --skip-slave-start --relay-log-recovery=0 --slave-parallel-workers=0] +START SLAVE UNTIL SQL_AFTER_MTS_GAPS; +include/wait_for_slave_param.inc [Until_Condition] +include/wait_for_slave_sql_to_stop.inc +** regular restart ** +include/rpl_restart_server.inc [server_number=2 parameters: --skip-slave-start --slave-transaction-retries=0 --relay-log-info-repository=TABLE --master-info-repository=TABLE --sync-master-info=1] +include/start_slave_io.inc +include/start_slave_sql.inc +include/stop_slave.inc +SET @@global.slave_parallel_workers= 3; +SET @@global.slave_checkpoint_period= 0; +==== end rpl_mts_crash_safe.inc:recovery ==== +SET @@global.slave_parallel_workers= 3; +SET @@global.slave_checkpoint_period= 1; +Generating Number of Workers 3 --- Number of Groups per worker 2 --- Debugging Groups 2 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (139, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (139, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (139, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (139, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 2 --- Debugging Groups 2 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (140, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (140, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (140, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (140, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 2 --- Debugging Groups 2 --- Database test_3 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (141, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (141, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (141, 2) +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (141, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 2 --- Debugging Groups 2 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (142, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (142, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (142, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (142, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 2 --- Debugging Groups 2 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (143, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (143, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (143, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (143, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 2 --- Debugging Groups 2 --- Database test_3 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (144, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (144, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (144, 2) +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (144, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +----Executing---- +==== begin rpl_mts_crash_safe.inc:recovery ==== +include/start_slave_io.inc +** fixing gaps ** +include/rpl_start_server.inc [server_number=2 parameters: --skip-slave-start --relay-log-recovery=0 --slave-parallel-workers=0] +START SLAVE UNTIL SQL_AFTER_MTS_GAPS; +include/wait_for_slave_param.inc [Until_Condition] +include/wait_for_slave_sql_to_stop.inc +** regular restart ** +include/rpl_restart_server.inc [server_number=2 parameters: --skip-slave-start --slave-transaction-retries=0 --relay-log-info-repository=TABLE --master-info-repository=TABLE --sync-master-info=1] +include/start_slave_io.inc +include/start_slave_sql.inc +include/stop_slave.inc +SET @@global.slave_parallel_workers= 3; +SET @@global.slave_checkpoint_period= 1; +==== end rpl_mts_crash_safe.inc:recovery ==== +SET @@global.slave_parallel_workers= 3; +SET @@global.slave_checkpoint_period= 1; +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 2 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (145, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (145, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (145, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (145, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 2 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (146, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (146, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (146, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (146, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 2 --- Database test_3 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (147, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (147, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (147, 2) +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (147, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 2 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (148, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (148, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (148, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (148, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 2 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (149, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (149, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (149, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (149, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 2 --- Database test_3 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (150, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (150, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (150, 2) +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (150, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 2 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (151, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (151, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (151, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (151, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 2 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (152, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (152, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (152, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (152, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 2 --- Database test_3 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (153, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (153, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (153, 2) +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (153, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +----Executing---- +==== begin rpl_mts_crash_safe.inc:recovery ==== +include/start_slave_io.inc +** fixing gaps ** +include/rpl_start_server.inc [server_number=2 parameters: --skip-slave-start --relay-log-recovery=0 --slave-parallel-workers=0] +START SLAVE UNTIL SQL_AFTER_MTS_GAPS; +include/wait_for_slave_param.inc [Until_Condition] +include/wait_for_slave_sql_to_stop.inc +** regular restart ** +include/rpl_restart_server.inc [server_number=2 parameters: --skip-slave-start --slave-transaction-retries=0 --relay-log-info-repository=TABLE --master-info-repository=TABLE --sync-master-info=1] +include/start_slave_io.inc +include/start_slave_sql.inc +include/stop_slave.inc +SET @@global.slave_parallel_workers= 3; +SET @@global.slave_checkpoint_period= 1; +==== end rpl_mts_crash_safe.inc:recovery ==== +SET @@global.slave_parallel_workers= 3; +SET @@global.slave_checkpoint_period= 2; +Generating Number of Workers 3 --- Number of Groups per worker 2 --- Debugging Groups 2 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (154, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (154, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (154, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (154, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 2 --- Debugging Groups 2 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (155, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (155, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (155, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (155, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 2 --- Debugging Groups 2 --- Database test_3 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (156, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (156, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (156, 2) +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (156, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 2 --- Debugging Groups 2 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (157, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (157, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (157, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (157, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 2 --- Debugging Groups 2 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (158, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (158, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (158, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (158, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 2 --- Debugging Groups 2 --- Database test_3 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (159, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (159, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (159, 2) +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (159, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +----Executing---- +==== begin rpl_mts_crash_safe.inc:recovery ==== +include/start_slave_io.inc +** fixing gaps ** +include/rpl_start_server.inc [server_number=2 parameters: --skip-slave-start --relay-log-recovery=0 --slave-parallel-workers=0] +START SLAVE UNTIL SQL_AFTER_MTS_GAPS; +include/wait_for_slave_param.inc [Until_Condition] +include/wait_for_slave_sql_to_stop.inc +** regular restart ** +include/rpl_restart_server.inc [server_number=2 parameters: --skip-slave-start --slave-transaction-retries=0 --relay-log-info-repository=TABLE --master-info-repository=TABLE --sync-master-info=1] +include/start_slave_io.inc +include/start_slave_sql.inc +include/stop_slave.inc +SET @@global.slave_parallel_workers= 3; +SET @@global.slave_checkpoint_period= 2; +==== end rpl_mts_crash_safe.inc:recovery ==== +SET @@global.slave_parallel_workers= 3; +SET @@global.slave_checkpoint_period= 2; +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 2 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (160, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (160, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (160, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (160, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 2 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (161, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (161, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (161, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (161, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 2 --- Database test_3 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (162, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (162, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (162, 2) +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (162, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 2 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (163, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (163, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (163, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (163, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 2 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (164, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (164, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (164, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (164, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 2 --- Database test_3 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (165, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (165, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (165, 2) +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (165, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 2 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (166, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (166, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (166, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (166, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 2 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (167, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (167, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (167, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (167, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 2 --- Database test_3 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (168, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (168, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (168, 2) +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (168, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +----Executing---- +==== begin rpl_mts_crash_safe.inc:recovery ==== +include/start_slave_io.inc +** fixing gaps ** +include/rpl_start_server.inc [server_number=2 parameters: --skip-slave-start --relay-log-recovery=0 --slave-parallel-workers=0] +START SLAVE UNTIL SQL_AFTER_MTS_GAPS; +include/wait_for_slave_param.inc [Until_Condition] +include/wait_for_slave_sql_to_stop.inc +** regular restart ** +include/rpl_restart_server.inc [server_number=2 parameters: --skip-slave-start --slave-transaction-retries=0 --relay-log-info-repository=TABLE --master-info-repository=TABLE --sync-master-info=1] +include/start_slave_io.inc +include/start_slave_sql.inc +include/stop_slave.inc +SET @@global.slave_parallel_workers= 3; +SET @@global.slave_checkpoint_period= 2; +==== end rpl_mts_crash_safe.inc:recovery ==== +SET @@global.slave_parallel_workers= 1; +SET @@global.slave_checkpoint_period= 0; +Generating Number of Workers 1 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (169, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (169, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (169, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (169, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 1 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (170, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (170, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (170, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (170, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 1 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (171, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (171, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (171, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (171, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +----Executing---- +==== begin rpl_mts_crash_safe.inc:recovery ==== +include/start_slave_io.inc +** fixing gaps ** +include/rpl_start_server.inc [server_number=2 parameters: --skip-slave-start --relay-log-recovery=0 --slave-parallel-workers=0] +START SLAVE UNTIL SQL_AFTER_MTS_GAPS; +include/wait_for_slave_param.inc [Until_Condition] +include/wait_for_slave_sql_to_stop.inc +** regular restart ** +include/rpl_restart_server.inc [server_number=2 parameters: --skip-slave-start --slave-transaction-retries=0 --relay-log-info-repository=TABLE --master-info-repository=TABLE --sync-master-info=1] +include/start_slave_io.inc +include/start_slave_sql.inc +include/stop_slave.inc +SET @@global.slave_parallel_workers= 1; +SET @@global.slave_checkpoint_period= 0; +==== end rpl_mts_crash_safe.inc:recovery ==== +SET @@global.slave_parallel_workers= 1; +SET @@global.slave_checkpoint_period= 1; +Generating Number of Workers 1 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (172, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (172, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (172, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (172, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 1 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (173, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (173, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (173, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (173, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 1 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (174, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (174, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (174, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (174, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +----Executing---- +==== begin rpl_mts_crash_safe.inc:recovery ==== +include/start_slave_io.inc +** fixing gaps ** +include/rpl_start_server.inc [server_number=2 parameters: --skip-slave-start --relay-log-recovery=0 --slave-parallel-workers=0] +START SLAVE UNTIL SQL_AFTER_MTS_GAPS; +include/wait_for_slave_param.inc [Until_Condition] +include/wait_for_slave_sql_to_stop.inc +** regular restart ** +include/rpl_restart_server.inc [server_number=2 parameters: --skip-slave-start --slave-transaction-retries=0 --relay-log-info-repository=TABLE --master-info-repository=TABLE --sync-master-info=1] +include/start_slave_io.inc +include/start_slave_sql.inc +include/stop_slave.inc +SET @@global.slave_parallel_workers= 1; +SET @@global.slave_checkpoint_period= 1; +==== end rpl_mts_crash_safe.inc:recovery ==== +SET @@global.slave_parallel_workers= 1; +SET @@global.slave_checkpoint_period= 2; +Generating Number of Workers 1 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (175, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (175, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (175, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (175, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 1 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (176, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (176, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (176, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (176, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 1 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (177, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (177, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (177, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (177, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +----Executing---- +==== begin rpl_mts_crash_safe.inc:recovery ==== +include/start_slave_io.inc +** fixing gaps ** +include/rpl_start_server.inc [server_number=2 parameters: --skip-slave-start --relay-log-recovery=0 --slave-parallel-workers=0] +START SLAVE UNTIL SQL_AFTER_MTS_GAPS; +include/wait_for_slave_param.inc [Until_Condition] +include/wait_for_slave_sql_to_stop.inc +** regular restart ** +include/rpl_restart_server.inc [server_number=2 parameters: --skip-slave-start --slave-transaction-retries=0 --relay-log-info-repository=TABLE --master-info-repository=TABLE --sync-master-info=1] +include/start_slave_io.inc +include/start_slave_sql.inc +include/stop_slave.inc +SET @@global.slave_parallel_workers= 1; +SET @@global.slave_checkpoint_period= 2; +==== end rpl_mts_crash_safe.inc:recovery ==== +SET @@global.slave_parallel_workers= 1; +SET @@global.slave_checkpoint_period= 3; +Generating Number of Workers 1 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (178, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (178, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (178, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (178, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 1 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (179, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (179, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (179, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (179, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 1 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (180, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (180, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (180, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (180, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +----Executing---- +==== begin rpl_mts_crash_safe.inc:recovery ==== +include/start_slave_io.inc +** fixing gaps ** +include/rpl_start_server.inc [server_number=2 parameters: --skip-slave-start --relay-log-recovery=0 --slave-parallel-workers=0] +START SLAVE UNTIL SQL_AFTER_MTS_GAPS; +include/wait_for_slave_param.inc [Until_Condition] +include/wait_for_slave_sql_to_stop.inc +** regular restart ** +include/rpl_restart_server.inc [server_number=2 parameters: --skip-slave-start --slave-transaction-retries=0 --relay-log-info-repository=TABLE --master-info-repository=TABLE --sync-master-info=1] +include/start_slave_io.inc +include/start_slave_sql.inc +include/stop_slave.inc +SET @@global.slave_parallel_workers= 1; +SET @@global.slave_checkpoint_period= 3; +==== end rpl_mts_crash_safe.inc:recovery ==== +SET @@global.slave_parallel_workers= 2; +SET @@global.slave_checkpoint_period= 0; +Generating Number of Workers 2 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (181, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (181, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (181, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (181, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (182, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (182, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (182, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (182, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (183, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (183, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (183, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (183, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (184, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (184, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (184, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (184, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (185, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (185, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (185, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (185, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (186, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (186, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (186, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (186, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +----Executing---- +==== begin rpl_mts_crash_safe.inc:recovery ==== +include/start_slave_io.inc +** fixing gaps ** +include/rpl_start_server.inc [server_number=2 parameters: --skip-slave-start --relay-log-recovery=0 --slave-parallel-workers=0] +START SLAVE UNTIL SQL_AFTER_MTS_GAPS; +include/wait_for_slave_param.inc [Until_Condition] +include/wait_for_slave_sql_to_stop.inc +** regular restart ** +include/rpl_restart_server.inc [server_number=2 parameters: --skip-slave-start --slave-transaction-retries=0 --relay-log-info-repository=TABLE --master-info-repository=TABLE --sync-master-info=1] +include/start_slave_io.inc +include/start_slave_sql.inc +include/stop_slave.inc +SET @@global.slave_parallel_workers= 2; +SET @@global.slave_checkpoint_period= 0; +==== end rpl_mts_crash_safe.inc:recovery ==== +SET @@global.slave_parallel_workers= 2; +SET @@global.slave_checkpoint_period= 1; +Generating Number of Workers 2 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (187, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (187, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (187, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (187, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (188, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (188, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (188, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (188, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (189, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (189, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (189, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (189, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (190, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (190, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (190, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (190, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (191, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (191, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (191, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (191, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (192, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (192, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (192, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (192, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +----Executing---- +==== begin rpl_mts_crash_safe.inc:recovery ==== +include/start_slave_io.inc +** fixing gaps ** +include/rpl_start_server.inc [server_number=2 parameters: --skip-slave-start --relay-log-recovery=0 --slave-parallel-workers=0] +START SLAVE UNTIL SQL_AFTER_MTS_GAPS; +include/wait_for_slave_param.inc [Until_Condition] +include/wait_for_slave_sql_to_stop.inc +** regular restart ** +include/rpl_restart_server.inc [server_number=2 parameters: --skip-slave-start --slave-transaction-retries=0 --relay-log-info-repository=TABLE --master-info-repository=TABLE --sync-master-info=1] +include/start_slave_io.inc +include/start_slave_sql.inc +include/stop_slave.inc +SET @@global.slave_parallel_workers= 2; +SET @@global.slave_checkpoint_period= 1; +==== end rpl_mts_crash_safe.inc:recovery ==== +SET @@global.slave_parallel_workers= 2; +SET @@global.slave_checkpoint_period= 2; +Generating Number of Workers 2 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (193, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (193, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (193, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (193, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (194, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (194, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (194, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (194, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (195, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (195, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (195, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (195, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (196, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (196, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (196, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (196, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (197, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (197, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (197, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (197, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (198, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (198, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (198, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (198, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +----Executing---- +==== begin rpl_mts_crash_safe.inc:recovery ==== +include/start_slave_io.inc +** fixing gaps ** +include/rpl_start_server.inc [server_number=2 parameters: --skip-slave-start --relay-log-recovery=0 --slave-parallel-workers=0] +START SLAVE UNTIL SQL_AFTER_MTS_GAPS; +include/wait_for_slave_param.inc [Until_Condition] +include/wait_for_slave_sql_to_stop.inc +** regular restart ** +include/rpl_restart_server.inc [server_number=2 parameters: --skip-slave-start --slave-transaction-retries=0 --relay-log-info-repository=TABLE --master-info-repository=TABLE --sync-master-info=1] +include/start_slave_io.inc +include/start_slave_sql.inc +include/stop_slave.inc +SET @@global.slave_parallel_workers= 2; +SET @@global.slave_checkpoint_period= 2; +==== end rpl_mts_crash_safe.inc:recovery ==== +SET @@global.slave_parallel_workers= 2; +SET @@global.slave_checkpoint_period= 3; +Generating Number of Workers 2 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (199, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (199, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (199, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (199, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (200, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (200, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (200, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (200, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (201, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (201, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (201, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (201, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (202, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (202, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (202, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (202, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (203, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (203, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (203, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (203, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 2 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (204, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (204, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (204, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (204, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +----Executing---- +==== begin rpl_mts_crash_safe.inc:recovery ==== +include/start_slave_io.inc +** fixing gaps ** +include/rpl_start_server.inc [server_number=2 parameters: --skip-slave-start --relay-log-recovery=0 --slave-parallel-workers=0] +START SLAVE UNTIL SQL_AFTER_MTS_GAPS; +include/wait_for_slave_param.inc [Until_Condition] +include/wait_for_slave_sql_to_stop.inc +** regular restart ** +include/rpl_restart_server.inc [server_number=2 parameters: --skip-slave-start --slave-transaction-retries=0 --relay-log-info-repository=TABLE --master-info-repository=TABLE --sync-master-info=1] +include/start_slave_io.inc +include/start_slave_sql.inc +include/stop_slave.inc +SET @@global.slave_parallel_workers= 2; +SET @@global.slave_checkpoint_period= 3; +==== end rpl_mts_crash_safe.inc:recovery ==== +SET @@global.slave_parallel_workers= 3; +SET @@global.slave_checkpoint_period= 0; +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (205, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (205, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (205, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (205, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (206, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (206, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (206, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (206, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_3 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (207, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (207, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (207, 2) +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (207, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (208, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (208, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (208, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (208, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (209, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (209, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (209, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (209, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_3 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (210, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (210, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (210, 2) +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (210, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (211, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (211, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (211, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (211, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (212, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (212, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (212, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (212, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_3 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (213, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (213, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (213, 2) +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (213, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +----Executing---- +==== begin rpl_mts_crash_safe.inc:recovery ==== +include/start_slave_io.inc +** fixing gaps ** +include/rpl_start_server.inc [server_number=2 parameters: --skip-slave-start --relay-log-recovery=0 --slave-parallel-workers=0] +START SLAVE UNTIL SQL_AFTER_MTS_GAPS; +include/wait_for_slave_param.inc [Until_Condition] +include/wait_for_slave_sql_to_stop.inc +** regular restart ** +include/rpl_restart_server.inc [server_number=2 parameters: --skip-slave-start --slave-transaction-retries=0 --relay-log-info-repository=TABLE --master-info-repository=TABLE --sync-master-info=1] +include/start_slave_io.inc +include/start_slave_sql.inc +include/stop_slave.inc +SET @@global.slave_parallel_workers= 3; +SET @@global.slave_checkpoint_period= 0; +==== end rpl_mts_crash_safe.inc:recovery ==== +SET @@global.slave_parallel_workers= 3; +SET @@global.slave_checkpoint_period= 1; +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (214, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (214, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (214, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (214, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (215, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (215, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (215, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (215, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_3 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (216, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (216, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (216, 2) +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (216, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (217, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (217, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (217, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (217, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (218, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (218, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (218, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (218, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_3 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (219, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (219, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (219, 2) +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (219, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (220, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (220, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (220, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (220, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (221, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (221, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (221, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (221, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_3 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (222, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (222, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (222, 2) +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (222, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +----Executing---- +==== begin rpl_mts_crash_safe.inc:recovery ==== +include/start_slave_io.inc +** fixing gaps ** +include/rpl_start_server.inc [server_number=2 parameters: --skip-slave-start --relay-log-recovery=0 --slave-parallel-workers=0] +START SLAVE UNTIL SQL_AFTER_MTS_GAPS; +include/wait_for_slave_param.inc [Until_Condition] +include/wait_for_slave_sql_to_stop.inc +** regular restart ** +include/rpl_restart_server.inc [server_number=2 parameters: --skip-slave-start --slave-transaction-retries=0 --relay-log-info-repository=TABLE --master-info-repository=TABLE --sync-master-info=1] +include/start_slave_io.inc +include/start_slave_sql.inc +include/stop_slave.inc +SET @@global.slave_parallel_workers= 3; +SET @@global.slave_checkpoint_period= 1; +==== end rpl_mts_crash_safe.inc:recovery ==== +SET @@global.slave_parallel_workers= 3; +SET @@global.slave_checkpoint_period= 2; +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (223, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (223, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (223, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (223, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (224, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (224, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (224, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (224, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_3 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (225, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (225, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (225, 2) +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (225, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (226, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (226, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (226, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (226, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (227, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (227, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (227, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (227, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_3 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (228, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (228, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (228, 2) +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (228, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (229, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (229, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (229, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (229, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (230, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (230, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (230, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (230, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_3 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (231, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (231, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (231, 2) +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (231, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +----Executing---- +==== begin rpl_mts_crash_safe.inc:recovery ==== +include/start_slave_io.inc +** fixing gaps ** +include/rpl_start_server.inc [server_number=2 parameters: --skip-slave-start --relay-log-recovery=0 --slave-parallel-workers=0] +START SLAVE UNTIL SQL_AFTER_MTS_GAPS; +include/wait_for_slave_param.inc [Until_Condition] +include/wait_for_slave_sql_to_stop.inc +** regular restart ** +include/rpl_restart_server.inc [server_number=2 parameters: --skip-slave-start --slave-transaction-retries=0 --relay-log-info-repository=TABLE --master-info-repository=TABLE --sync-master-info=1] +include/start_slave_io.inc +include/start_slave_sql.inc +include/stop_slave.inc +SET @@global.slave_parallel_workers= 3; +SET @@global.slave_checkpoint_period= 2; +==== end rpl_mts_crash_safe.inc:recovery ==== +SET @@global.slave_parallel_workers= 3; +SET @@global.slave_checkpoint_period= 3; +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (232, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (232, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (232, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (232, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (233, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (233, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (233, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (233, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_3 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (234, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (234, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (234, 2) +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (234, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (235, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (235, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (235, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (235, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (236, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (236, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (236, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (236, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_3 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (237, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (237, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (237, 2) +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (237, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_1 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (238, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (238, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (238, 2) +master-bin.000001 # Query # # use `test_1`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (238, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_2 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (239, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (239, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (239, 2) +master-bin.000001 # Query # # use `test_2`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (239, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +Generating Number of Workers 3 --- Number of Groups per worker 3 --- Debugging Groups 3 --- Database test_3 +==== begin rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +rpl_mixing_engines.inc [commands=B T T C] +BEGIN; +INSERT INTO tt_1(trans_id, stmt_id) VALUES (240, 2); +INSERT INTO tt_1(trans_id, stmt_id) VALUES (240, 4); +COMMIT; +-b-b-b-b-b-b-b-b-b-b-b- >> B T T C << -b-b-b-b-b-b-b-b-b-b-b- +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # SET @@SESSION.GTID_NEXT= Gtid_set +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (240, 2) +master-bin.000001 # Query # # use `test_3`; INSERT INTO tt_1(trans_id, stmt_id) VALUES (240, 4) +master-bin.000001 # Xid # # COMMIT /* XID */ +-e-e-e-e-e-e-e-e-e-e-e- >> B T T C << -e-e-e-e-e-e-e-e-e-e-e- + +==== end rpl_mts_crash_safe.inc:rpl_mixing_engines.inc ==== +----Executing---- +==== begin rpl_mts_crash_safe.inc:recovery ==== +include/start_slave_io.inc +** fixing gaps ** +include/rpl_start_server.inc [server_number=2 parameters: --skip-slave-start --relay-log-recovery=0 --slave-parallel-workers=0] +START SLAVE UNTIL SQL_AFTER_MTS_GAPS; +include/wait_for_slave_param.inc [Until_Condition] +include/wait_for_slave_sql_to_stop.inc +** regular restart ** +include/rpl_restart_server.inc [server_number=2 parameters: --skip-slave-start --slave-transaction-retries=0 --relay-log-info-repository=TABLE --master-info-repository=TABLE --sync-master-info=1] +include/start_slave_io.inc +include/start_slave_sql.inc +include/stop_slave.inc +SET @@global.slave_parallel_workers= 3; +SET @@global.slave_checkpoint_period= 3; +==== end rpl_mts_crash_safe.inc:recovery ==== +######################################################################## +# CHECK CONSISTENCY +######################################################################## +include/start_slave.inc +include/sync_slave_sql_with_master.inc +######################################################################## +# CLEAN UP +######################################################################## +==== begin rpl_mts_crash_safe.inc:clean ==== +include/stop_slave.inc +include/start_slave.inc +---- begin clean database test_1 ---- +rpl_mixing_engines.inc [commands=clean] +DROP TABLE tt_1; +DROP TABLE tt_2; +DROP TABLE tt_3; +DROP TABLE tt_4; +DROP TABLE tt_5; +DROP TABLE tt_6; +DROP TABLE nt_1; +DROP TABLE nt_2; +DROP TABLE nt_3; +DROP TABLE nt_4; +DROP TABLE nt_5; +DROP TABLE nt_6; +DROP PROCEDURE pc_i_tt_5_suc; +DROP PROCEDURE pc_i_nt_5_suc; +DROP FUNCTION fc_i_tt_5_suc; +DROP FUNCTION fc_i_nt_5_suc; +DROP FUNCTION fc_i_nt_3_tt_3_suc; +---- end clean database test_1 ---- +---- begin clean database test_2 ---- +rpl_mixing_engines.inc [commands=clean] +DROP TABLE tt_1; +DROP TABLE tt_2; +DROP TABLE tt_3; +DROP TABLE tt_4; +DROP TABLE tt_5; +DROP TABLE tt_6; +DROP TABLE nt_1; +DROP TABLE nt_2; +DROP TABLE nt_3; +DROP TABLE nt_4; +DROP TABLE nt_5; +DROP TABLE nt_6; +DROP PROCEDURE pc_i_tt_5_suc; +DROP PROCEDURE pc_i_nt_5_suc; +DROP FUNCTION fc_i_tt_5_suc; +DROP FUNCTION fc_i_nt_5_suc; +DROP FUNCTION fc_i_nt_3_tt_3_suc; +---- end clean database test_2 ---- +---- begin clean database test_3 ---- +rpl_mixing_engines.inc [commands=clean] +DROP TABLE tt_1; +DROP TABLE tt_2; +DROP TABLE tt_3; +DROP TABLE tt_4; +DROP TABLE tt_5; +DROP TABLE tt_6; +DROP TABLE nt_1; +DROP TABLE nt_2; +DROP TABLE nt_3; +DROP TABLE nt_4; +DROP TABLE nt_5; +DROP TABLE nt_6; +DROP PROCEDURE pc_i_tt_5_suc; +DROP PROCEDURE pc_i_nt_5_suc; +DROP FUNCTION fc_i_tt_5_suc; +DROP FUNCTION fc_i_nt_5_suc; +DROP FUNCTION fc_i_nt_3_tt_3_suc; +---- end clean database test_3 ---- +==== end rpl_mts_crash_safe.inc:clean ==== +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/rpl_stm_multi_query.result b/mysql-test/suite/rpl_encryption/r/rpl_stm_multi_query.result new file mode 100644 index 000000000000..774f2c97a756 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_stm_multi_query.result @@ -0,0 +1,42 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +create database mysqltest; +create table mysqltest.t1 ( n int); +insert into mysqltest.t1 values(1)/ +insert into mysqltest.t1 values(2); +insert into mysqltest.t1 values(3); +insert into mysqltest.t1 values(4); +insert into mysqltest.t1 values(5)/ +include/sync_slave_sql_with_master.inc +select * from mysqltest.t1; +n +1 +2 +3 +4 +5 +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Start_encryption # # +master-bin.000001 # Query # # create database mysqltest +master-bin.000001 # Query # # use `test`; create table mysqltest.t1 ( n int) +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test`; insert into mysqltest.t1 values(1) +master-bin.000001 # Query # # COMMIT +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test`; insert into mysqltest.t1 values(2) +master-bin.000001 # Query # # COMMIT +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test`; insert into mysqltest.t1 values(3) +master-bin.000001 # Query # # COMMIT +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test`; insert into mysqltest.t1 values(4) +master-bin.000001 # Query # # COMMIT +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `test`; insert into mysqltest.t1 values(5) +master-bin.000001 # Query # # COMMIT +drop database mysqltest; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/rpl_stm_relay_ign_space.result b/mysql-test/suite/rpl_encryption/r/rpl_stm_relay_ign_space.result new file mode 100644 index 000000000000..579fee5a11e0 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_stm_relay_ign_space.result @@ -0,0 +1,29 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +CREATE TABLE t1 (c1 TEXT) engine=InnoDB; +INSERT INTO t1 VALUES ('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'); +INSERT INTO t1 VALUES ('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'); +INSERT INTO t1 VALUES ('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'); +INSERT INTO t1 VALUES ('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'); +include/sync_slave_sql_with_master.inc +LOCK TABLE t1 WRITE; +INSERT INTO t1 VALUES ('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'); +INSERT INTO t1 VALUES ('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'); +INSERT INTO t1 VALUES ('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'); +INSERT INTO t1 VALUES ('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'); +INSERT INTO t1 VALUES ('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'); +INSERT INTO t1 VALUES ('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'); +INSERT INTO t1 VALUES ('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'); +INSERT INTO t1 VALUES ('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'); +INSERT INTO t1 VALUES ('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'); +INSERT INTO t1 VALUES ('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'); +UNLOCK TABLES; +FLUSH LOGS; +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:test.t1,slave:test.t1] +DROP TABLE t1; +include/sync_slave_sql_with_master.inc +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/rpl_stm_until_pos_middle_gtid.result b/mysql-test/suite/rpl_encryption/r/rpl_stm_until_pos_middle_gtid.result new file mode 100644 index 000000000000..715457bd55fc --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_stm_until_pos_middle_gtid.result @@ -0,0 +1,27 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +[connection slave] +include/stop_slave_sql.inc +# Saving master position to use on UNTIL clause of START SLAVE +[connection master] +CREATE TABLE t1 (a INT) ENGINE=InnoDB; +BEGIN; +INSERT INTO t1 VALUES (1); +COMMIT; +include/sync_slave_io_with_master.inc +# Start SQL thread until it executed the CREATE TABLE +START SLAVE SQL_THREAD UNTIL MASTER_LOG_FILE = "MASTER_FILE", MASTER_LOG_POS = MASTER_POS; +# Wait until SQL thread reaches last master binlog file +include/wait_for_slave_param.inc [Relay_Master_Log_File] +# Wait until SQL thread reaches desired master binlog position +include/wait_for_slave_param.inc [Exec_Master_Log_Pos] +# If the desired position was reached, SQL thread should stop. +include/wait_for_slave_sql_to_stop.inc +include/assert.inc [t1 should be replicated] +include/start_slave_sql.inc +[connection master] +DROP TABLE t1; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/rpl_switch_stm_row_mixed.result b/mysql-test/suite/rpl_encryption/r/rpl_switch_stm_row_mixed.result new file mode 100644 index 000000000000..b6c609f26ef5 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_switch_stm_row_mixed.result @@ -0,0 +1,453 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +drop database if exists mysqltest1; +create database mysqltest1; +use mysqltest1; +set @my_binlog_format= @@global.binlog_format; +set session binlog_format=mixed; +show session variables like "binlog_format%"; +Variable_name Value +binlog_format MIXED +set session binlog_format=statement; +show session variables like "binlog_format%"; +Variable_name Value +binlog_format STATEMENT +set session binlog_format=row; +show session variables like "binlog_format%"; +Variable_name Value +binlog_format ROW +set global binlog_format=DEFAULT; +show global variables like "binlog_format%"; +Variable_name Value +binlog_format ROW +set global binlog_format=MIXED; +show global variables like "binlog_format%"; +Variable_name Value +binlog_format MIXED +set global binlog_format=STATEMENT; +show global variables like "binlog_format%"; +Variable_name Value +binlog_format STATEMENT +set global binlog_format=ROW; +show global variables like "binlog_format%"; +Variable_name Value +binlog_format ROW +show session variables like "binlog_format%"; +Variable_name Value +binlog_format ROW +select @@global.binlog_format, @@session.binlog_format; +@@global.binlog_format @@session.binlog_format +ROW ROW +CREATE TABLE t1 (a varchar(100)); +prepare stmt1 from 'insert into t1 select concat(UUID(),?)'; +set @string="emergency_1_"; +insert into t1 values("work_2_"); +execute stmt1 using @string; +deallocate prepare stmt1; +prepare stmt1 from 'insert into t1 select ?'; +insert into t1 values(concat(UUID(),"work_3_")); +execute stmt1 using @string; +deallocate prepare stmt1; +insert into t1 values(concat("for_4_",UUID())); +insert into t1 select "yesterday_5_"; +create temporary table tmp(a char(100)); +insert into tmp values("see_6_"); +set binlog_format=statement; +ERROR HY000: Cannot switch out of the row-based binary log format when the session has open temporary tables +insert into t1 select * from tmp; +drop temporary table tmp; +set binlog_format=statement; +show global variables like "binlog_format%"; +Variable_name Value +binlog_format ROW +show session variables like "binlog_format%"; +Variable_name Value +binlog_format STATEMENT +select @@global.binlog_format, @@session.binlog_format; +@@global.binlog_format @@session.binlog_format +ROW STATEMENT +set global binlog_format=statement; +show global variables like "binlog_format%"; +Variable_name Value +binlog_format STATEMENT +show session variables like "binlog_format%"; +Variable_name Value +binlog_format STATEMENT +select @@global.binlog_format, @@session.binlog_format; +@@global.binlog_format @@session.binlog_format +STATEMENT STATEMENT +prepare stmt1 from 'insert into t1 select ?'; +set @string="emergency_7_"; +insert into t1 values("work_8_"); +execute stmt1 using @string; +deallocate prepare stmt1; +prepare stmt1 from 'insert into t1 select ?'; +insert into t1 values("work_9_"); +execute stmt1 using @string; +deallocate prepare stmt1; +insert into t1 values("for_10_"); +insert into t1 select "yesterday_11_"; +set binlog_format=statement; +select @@global.binlog_format, @@session.binlog_format; +@@global.binlog_format @@session.binlog_format +STATEMENT STATEMENT +set global binlog_format=statement; +select @@global.binlog_format, @@session.binlog_format; +@@global.binlog_format @@session.binlog_format +STATEMENT STATEMENT +prepare stmt1 from 'insert into t1 select ?'; +set @string="emergency_12_"; +insert into t1 values("work_13_"); +execute stmt1 using @string; +deallocate prepare stmt1; +prepare stmt1 from 'insert into t1 select ?'; +insert into t1 values("work_14_"); +execute stmt1 using @string; +deallocate prepare stmt1; +insert into t1 values("for_15_"); +insert into t1 select "yesterday_16_"; +set global binlog_format=mixed; +select @@global.binlog_format, @@session.binlog_format; +@@global.binlog_format @@session.binlog_format +MIXED STATEMENT +set binlog_format=default; +select @@global.binlog_format, @@session.binlog_format; +@@global.binlog_format @@session.binlog_format +MIXED MIXED +prepare stmt1 from 'insert into t1 select concat(UUID(),?)'; +set @string="emergency_17_"; +insert into t1 values("work_18_"); +execute stmt1 using @string; +deallocate prepare stmt1; +prepare stmt1 from 'insert into t1 select ?'; +insert into t1 values(concat(UUID(),"work_19_")); +execute stmt1 using @string; +deallocate prepare stmt1; +insert into t1 values(concat("for_20_",UUID())); +insert into t1 select "yesterday_21_"; +prepare stmt1 from 'insert into t1 select ?'; +insert into t1 values(concat(UUID(),"work_22_")); +execute stmt1 using @string; +deallocate prepare stmt1; +insert into t1 values(concat("for_23_",UUID())); +insert into t1 select "yesterday_24_"; +create table t2 select rpad(UUID(),100,' '); +create table t3 select 1 union select UUID(); +create table t4 select * from t1 where 3 in (select 1 union select 2 union select UUID() union select 3); +create table t5 select * from t1 where 3 in (select 1 union select 2 union select curdate() union select 3); +insert ignore into t5 select UUID() from t1 where 3 in (select 1 union select 2 union select 3 union select * from t4); +create procedure foo() +begin +insert into t1 values("work_25_"); +insert into t1 values(concat("for_26_",UUID())); +insert into t1 select "yesterday_27_"; +end| +create procedure foo2() +begin +insert into t1 values(concat("emergency_28_",UUID())); +insert into t1 values("work_29_"); +insert into t1 values(concat("for_30_",UUID())); +set session binlog_format=row; # accepted for stored procs +insert into t1 values("more work_31_"); +set session binlog_format=mixed; +end| +create function foo3() returns bigint unsigned +begin +set session binlog_format=row; # rejected for stored funcs +insert into t1 values("alarm"); +return 100; +end| +create procedure foo4(x varchar(100)) +begin +insert into t1 values(concat("work_250_",x)); +insert into t1 select "yesterday_270_"; +end| +call foo(); +call foo2(); +call foo4("hello"); +call foo4(UUID()); +call foo4("world"); +select foo3(); +ERROR HY000: Cannot change the binary logging format inside a stored function or trigger +select * from t1 where a="alarm"; +a +drop function foo3; +create function foo3() returns bigint unsigned +begin +insert into t1 values("foo3_32_"); +call foo(); +return 100; +end| +insert into t2 select foo3(); +prepare stmt1 from 'insert into t2 select foo3()'; +execute stmt1; +execute stmt1; +deallocate prepare stmt1; +create function foo4() returns bigint unsigned +begin +insert into t2 select foo3(); +return 100; +end| +select foo4(); +foo4() +100 +prepare stmt1 from 'select foo4()'; +execute stmt1; +foo4() +100 +execute stmt1; +foo4() +100 +deallocate prepare stmt1; +create function foo5() returns bigint unsigned +begin +insert into t2 select UUID(); +return 100; +end| +select foo5(); +foo5() +100 +prepare stmt1 from 'select foo5()'; +execute stmt1; +foo5() +100 +execute stmt1; +foo5() +100 +deallocate prepare stmt1; +create function foo6(x varchar(100)) returns bigint unsigned +begin +insert into t2 select x; +return 100; +end| +select foo6("foo6_1_"); +foo6("foo6_1_") +100 +select foo6(concat("foo6_2_",UUID())); +foo6(concat("foo6_2_",UUID())) +100 +prepare stmt1 from 'select foo6(concat("foo6_3_",UUID()))'; +execute stmt1; +foo6(concat("foo6_3_",UUID())) +100 +execute stmt1; +foo6(concat("foo6_3_",UUID())) +100 +deallocate prepare stmt1; +create view v1 as select uuid(); +create table t11 (data varchar(255)); +insert into t11 select * from v1; +insert into t11 select TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA='mysqltest1' and TABLE_NAME IN ('v1','t11'); +prepare stmt1 from "insert into t11 select TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA='mysqltest1' and TABLE_NAME IN ('v1','t11')"; +execute stmt1; +execute stmt1; +deallocate prepare stmt1; +create trigger t11_bi before insert on t11 for each row +begin +set NEW.data = concat(NEW.data,UUID()); +end| +insert into t11 values("try_560_"); +insert delayed into t2 values("delay_1_"); +Warnings: +Warning 3005 INSERT DELAYED is no longer supported. The statement was converted to INSERT. +insert delayed into t2 values(concat("delay_2_",UUID())); +Warnings: +Warning 3005 INSERT DELAYED is no longer supported. The statement was converted to INSERT. +insert delayed into t2 values("delay_6_"); +Warnings: +Warning 3005 INSERT DELAYED is no longer supported. The statement was converted to INSERT. +insert delayed into t2 values(rand()); +Warnings: +Warning 3005 INSERT DELAYED is no longer supported. The statement was converted to INSERT. +set @a=2.345; +insert delayed into t2 values(@a); +Warnings: +Warning 3005 INSERT DELAYED is no longer supported. The statement was converted to INSERT. +include/sync_slave_sql_with_master.inc +create table t20 select * from t1; +create table t21 select * from t2; +create table t22 select * from t3; +drop table t1,t2,t3; +create table t1 (a int primary key auto_increment, b varchar(100)); +create table t2 (a int primary key auto_increment, b varchar(100)); +create table t3 (b varchar(100)); +create function f (x varchar(100)) returns int deterministic +begin +insert into t1 values(null,x); +insert into t2 values(null,x); +return 1; +end| +select f("try_41_"); +f("try_41_") +1 +include/sync_slave_sql_with_master.inc +use mysqltest1; +insert into t2 values(2,null),(3,null),(4,null); +delete from t2 where a>=2; +select f("try_42_"); +f("try_42_") +1 +include/sync_slave_sql_with_master.inc +insert into t2 values(3,null),(4,null); +delete from t2 where a>=3; +prepare stmt1 from 'select f(?)'; +set @string="try_43_"; +insert into t1 values(null,"try_44_"); +execute stmt1 using @string; +f(?) +1 +deallocate prepare stmt1; +include/sync_slave_sql_with_master.inc +create table t12 select * from t1; +drop table t1; +create table t1 (a int, b varchar(100), key(a)); +select f("try_45_"); +f("try_45_") +1 +create table t13 select * from t1; +drop table t1; +create table t1 (a int primary key auto_increment, b varchar(100)); +drop function f; +create table t14 (unique (a)) select * from t2; +truncate table t2; +create function f1 (x varchar(100)) returns int deterministic +begin +insert into t1 values(null,x); +return 1; +end| +create function f2 (x varchar(100)) returns int deterministic +begin +insert into t2 values(null,x); +return 1; +end| +select f1("try_46_"),f2("try_47_"); +f1("try_46_") f2("try_47_") +1 1 +include/sync_slave_sql_with_master.inc +insert into t2 values(2,null),(3,null),(4,null); +delete from t2 where a>=2; +select f1("try_48_"),f2("try_49_"); +f1("try_48_") f2("try_49_") +1 1 +insert into t3 values(concat("try_50_",f1("try_51_"),f2("try_52_"))); +include/sync_slave_sql_with_master.inc +drop function f2; +create function f2 (x varchar(100)) returns int deterministic +begin +declare y int; +insert into t1 values(null,x); +set y = (select count(*) from t2); +return y; +end| +select f1("try_53_"),f2("try_54_"); +f1("try_53_") f2("try_54_") +1 3 +include/sync_slave_sql_with_master.inc +drop function f2; +create trigger t1_bi before insert on t1 for each row +begin +insert into t2 values(null,"try_55_"); +end| +insert into t1 values(null,"try_56_"); +alter table t1 modify a int, drop primary key; +insert into t1 values(null,"try_57_"); +include/sync_slave_sql_with_master.inc +CREATE TEMPORARY TABLE t15 SELECT UUID(); +create table t16 like t15; +INSERT INTO t16 SELECT * FROM t15; +insert into t16 values("try_65_"); +drop table t15; +insert into t16 values("try_66_"); +include/sync_slave_sql_with_master.inc +select count(*) from t1; +count(*) +7 +select count(*) from t2; +count(*) +5 +select count(*) from t3; +count(*) +1 +select count(*) from t4; +count(*) +29 +select count(*) from t5; +count(*) +58 +select count(*) from t11; +count(*) +8 +select count(*) from t20; +count(*) +66 +select count(*) from t21; +count(*) +19 +select count(*) from t22; +count(*) +2 +select count(*) from t12; +count(*) +4 +select count(*) from t13; +count(*) +1 +select count(*) from t14; +count(*) +4 +select count(*) from t16; +count(*) +3 +include/sync_slave_sql_with_master.inc +DROP TABLE IF EXISTS t11; +SET SESSION BINLOG_FORMAT=STATEMENT; +CREATE TABLE t11 (song VARCHAR(255)); +LOCK TABLES t11 WRITE; +SET SESSION BINLOG_FORMAT=ROW; +INSERT INTO t11 VALUES('Several Species of Small Furry Animals Gathered Together in a Cave and Grooving With a Pict'); +SET SESSION BINLOG_FORMAT=STATEMENT; +INSERT INTO t11 VALUES('Careful With That Axe, Eugene'); +UNLOCK TABLES; +SELECT * FROM t11; +song Several Species of Small Furry Animals Gathered Together in a Cave and Grooving With a Pict +song Careful With That Axe, Eugene +include/sync_slave_sql_with_master.inc +USE mysqltest1; +SELECT * FROM t11; +song Several Species of Small Furry Animals Gathered Together in a Cave and Grooving With a Pict +song Careful With That Axe, Eugene +DROP TABLE IF EXISTS t12; +SET SESSION BINLOG_FORMAT=MIXED; +CREATE TABLE t12 (data LONG); +LOCK TABLES t12 WRITE; +INSERT INTO t12 VALUES(UUID()); +UNLOCK TABLES; +include/sync_slave_sql_with_master.inc +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()); +include/sync_slave_sql_with_master.inc +drop database mysqltest1; +include/sync_slave_sql_with_master.inc +set global binlog_format =@my_binlog_format; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/rpl_sync.result b/mysql-test/suite/rpl_encryption/r/rpl_sync.result new file mode 100644 index 000000000000..2ecb880a46f4 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_sync.result @@ -0,0 +1,46 @@ +=====Configuring the enviroment=======; +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +call mtr.add_suppression('Attempting backtrace'); +call mtr.add_suppression("Recovery from master pos .* and file master-bin.000001"); +call mtr.add_suppression("Binlog has bad magic number; It's not a binary log file that can be used by this version of MySQL"); +CREATE TABLE t1(a INT, PRIMARY KEY(a)) engine=innodb; +insert into t1(a) values(1); +insert into t1(a) values(2); +insert into t1(a) values(3); +=====Inserting data on the master but without the SQL Thread being running=======; +include/sync_slave_sql_with_master.inc +include/stop_slave_sql.inc +insert into t1(a) values(4); +insert into t1(a) values(5); +insert into t1(a) values(6); +=====Removing relay log files and crashing/recoverying the slave=======; +include/stop_slave_io.inc +SET SESSION debug="d,crash_before_rotate_relaylog"; +FLUSH LOGS; +ERROR HY000: Lost connection to MySQL server during query +include/rpl_reconnect.inc +=====Dumping and comparing tables=======; +include/start_slave.inc +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:t1,slave:t1] +=====Corrupting the master.info=======; +include/stop_slave.inc +FLUSH LOGS; +insert into t1(a) values(7); +insert into t1(a) values(8); +insert into t1(a) values(9); +SET SESSION debug="d,crash_before_rotate_relaylog"; +FLUSH LOGS; +ERROR HY000: Lost connection to MySQL server during query +include/rpl_reconnect.inc +=====Dumping and comparing tables=======; +include/start_slave.inc +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:t1,slave:t1] +=====Clean up=======; +drop table t1; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/rpl_transaction_before_commit_failure.result b/mysql-test/suite/rpl_encryption/r/rpl_transaction_before_commit_failure.result new file mode 100644 index 000000000000..0c0f67efe62d --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_transaction_before_commit_failure.result @@ -0,0 +1,31 @@ +include/install_replication_observers_example.inc +# +# Phase 1: The before commit hook fails. +# Set a GTID in an empty transaction and watch it fail +# +SET SESSION sql_log_bin= 0; +call mtr.add_suppression("Run function 'before_commit' in plugin"); +SET SESSION sql_log_bin= 1; +SET @debug_saved= @@GLOBAL.DEBUG; +SET @@GLOBAL.DEBUG= '+d,force_error_on_before_commit_listener'; +SET gtid_next='aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1'; +COMMIT; +ERROR HY000: Error on observer while running replication hook 'before_commit'. +SET @@GLOBAL.DEBUG= @debug_saved; +ROLLBACK; +SET gtid_next='automatic'; +# +# Phase 2: The before commit hook makes the transaction rollback +# Set a GTID in an empty transaction and watch it fail +# +SET @@GLOBAL.DEBUG= '+d,force_negative_certification_outcome'; +SET gtid_next='aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:2'; +COMMIT; +ERROR HY000: Plugin instructed the server to rollback the current transaction. +SET @@GLOBAL.DEBUG= @debug_saved; +ROLLBACK; +SET gtid_next='automatic'; +# +# Clean up +# +include/uninstall_replication_observers_example.inc diff --git a/mysql-test/suite/rpl_encryption/r/rpl_trx_boundary_parser_relay_log_recovery.result b/mysql-test/suite/rpl_encryption/r/rpl_trx_boundary_parser_relay_log_recovery.result new file mode 100644 index 000000000000..382e9fdcf145 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_trx_boundary_parser_relay_log_recovery.result @@ -0,0 +1,20 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +CALL mtr.add_suppression('Recovery from master pos'); +CREATE TABLE t1 (c1 INT); +INSERT INTO t1 VALUES (1); +FLUSH LOCAL BINARY LOGS; +INSERT INTO t1 VALUES (1); +DROP TABLE t1; +[connection slave] +include/start_slave_io.inc +[connection master] +include/sync_slave_io_with_master.inc +include/rpl_restart_server.inc [server_number=2 parameters: --relay_log_recovery=ON] +include/assert_grep.inc [Found no lines about reading events on the relay log.] +[connection slave] +include/start_slave.inc +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/rpl_trx_boundary_parser_row.result b/mysql-test/suite/rpl_encryption/r/rpl_trx_boundary_parser_row.result new file mode 100644 index 000000000000..72e47892495f --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_trx_boundary_parser_row.result @@ -0,0 +1,1080 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +# Using MyISAM storage engine +## Running the test with the SQL thread stopped +[connection slave] +include/stop_slave_sql.inc +[connection slave] +[connection master] +[connection slave] +include/gtid_step_reset_on_retrieved.inc +[connection master] +CREATE TABLE t1 (i INT NOT NULL AUTO_INCREMENT PRIMARY KEY, info VARCHAR(64)) ENGINE=MYISAM; +CREATE TABLE t2 (i INT) ENGINE=MYISAM; +INSERT INTO t1 (info) VALUE ('Insert data without splitting transactions in the relay log'); +BEGIN; +INSERT INTO t2 (i) VALUES (-6); +INSERT INTO t2 (i) VALUES (-5); +INSERT INTO t2 (i) VALUES (-4); +COMMIT; +[connection master] +include/sync_slave_io_with_master.inc +[connection slave] +include/stop_slave_io.inc +include/start_slave_io.inc +[connection slave] +include/gtid_step_assert_on_retrieved.inc [count=6, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection master] +INSERT INTO t1 (info) VALUE ('Insert data rotating master binlog between two transactions'); +BEGIN; +INSERT INTO t2 (i) VALUES (-3); +INSERT INTO t2 (i) VALUES (-2); +COMMIT; +FLUSH LOGS; +INSERT INTO t1 (info) VALUE ('After FLUSH LOGS at master'); +BEGIN; +INSERT INTO t2 (i) VALUES (-1); +INSERT INTO t2 (i) VALUES (0); +COMMIT; +[connection master] +include/sync_slave_io_with_master.inc +[connection slave] +include/stop_slave_io.inc +include/start_slave_io.inc +[connection slave] +include/gtid_step_assert_on_retrieved.inc [count=6, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection slave] +[connection master] +INSERT INTO t1 (info) VALUES ('stop_io_after_reading_gtid_log_event'); +include/sync_slave_io_with_master.inc +# Adding debug point 'stop_io_after_reading_gtid_log_event' to @@GLOBAL.debug +[connection master] +BEGIN; +INSERT INTO t2 VALUES (100 * 1 + 1); +SET @val= 100 * 1 + 2; +INSERT INTO t2 VALUES (@val); +COMMIT; +[connection slave] +include/wait_for_slave_io_to_stop.inc +# Removing debug point 'stop_io_after_reading_gtid_log_event' from @@GLOBAL.debug +include/gtid_step_assert_on_retrieved.inc [count=1, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection master] +INSERT INTO t2 VALUES (100 * 1 + 3); +[connection slave] +include/start_slave_io.inc +[connection master] +include/sync_slave_io_with_master.inc +include/gtid_step_assert_on_retrieved.inc [count=3, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection slave] +[connection master] +INSERT INTO t1 (info) VALUES ('stop_io_after_reading_query_log_event'); +include/sync_slave_io_with_master.inc +# Adding debug point 'stop_io_after_reading_query_log_event' to @@GLOBAL.debug +[connection master] +BEGIN; +INSERT INTO t2 VALUES (100 * 2 + 1); +SET @val= 100 * 2 + 2; +INSERT INTO t2 VALUES (@val); +COMMIT; +[connection slave] +include/wait_for_slave_io_to_stop.inc +# Removing debug point 'stop_io_after_reading_query_log_event' from @@GLOBAL.debug +include/gtid_step_assert_on_retrieved.inc [count=1, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection master] +INSERT INTO t2 VALUES (100 * 2 + 3); +[connection slave] +include/start_slave_io.inc +[connection master] +include/sync_slave_io_with_master.inc +include/gtid_step_assert_on_retrieved.inc [count=3, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection slave] +[connection master] +INSERT INTO t1 (info) VALUES ('stop_io_after_reading_table_map_event'); +include/sync_slave_io_with_master.inc +# Adding debug point 'stop_io_after_reading_table_map_event' to @@GLOBAL.debug +[connection master] +BEGIN; +INSERT INTO t2 VALUES (100 * 3 + 1); +SET @val= 100 * 3 + 2; +INSERT INTO t2 VALUES (@val); +COMMIT; +[connection slave] +include/wait_for_slave_io_to_stop.inc +# Removing debug point 'stop_io_after_reading_table_map_event' from @@GLOBAL.debug +include/gtid_step_assert_on_retrieved.inc [count=1, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection master] +INSERT INTO t2 VALUES (100 * 3 + 3); +[connection slave] +include/start_slave_io.inc +[connection master] +include/sync_slave_io_with_master.inc +include/gtid_step_assert_on_retrieved.inc [count=3, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection master] +DROP TABLE t1,t2; +## Starting and syncing the SQL thread before next round +[connection slave] +include/start_slave_sql.inc +[connection master] +include/sync_slave_sql_with_master.inc +## Running the test with the SQL thread started +[connection slave] +[connection master] +[connection slave] +include/gtid_step_reset.inc +[connection master] +CREATE TABLE t1 (i INT NOT NULL AUTO_INCREMENT PRIMARY KEY, info VARCHAR(64)) ENGINE=MYISAM; +CREATE TABLE t2 (i INT) ENGINE=MYISAM; +INSERT INTO t1 (info) VALUE ('Insert data without splitting transactions in the relay log'); +BEGIN; +INSERT INTO t2 (i) VALUES (-6); +INSERT INTO t2 (i) VALUES (-5); +INSERT INTO t2 (i) VALUES (-4); +COMMIT; +[connection master] +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:t1, slave:t1] +[connection slave] +include/stop_slave_io.inc +include/start_slave_io.inc +[connection slave] +include/gtid_step_assert.inc [count=6, only_count=0] +[connection master] +INSERT INTO t1 (info) VALUE ('Insert data rotating master binlog between two transactions'); +BEGIN; +INSERT INTO t2 (i) VALUES (-3); +INSERT INTO t2 (i) VALUES (-2); +COMMIT; +FLUSH LOGS; +INSERT INTO t1 (info) VALUE ('After FLUSH LOGS at master'); +BEGIN; +INSERT INTO t2 (i) VALUES (-1); +INSERT INTO t2 (i) VALUES (0); +COMMIT; +[connection master] +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:t1, slave:t1] +[connection slave] +include/stop_slave_io.inc +include/start_slave_io.inc +[connection slave] +include/gtid_step_assert.inc [count=6, only_count=0] +[connection slave] +[connection master] +INSERT INTO t1 (info) VALUES ('stop_io_after_reading_gtid_log_event'); +include/sync_slave_io_with_master.inc +# Adding debug point 'stop_io_after_reading_gtid_log_event' to @@GLOBAL.debug +[connection master] +BEGIN; +INSERT INTO t2 VALUES (100 * 1 + 1); +SET @val= 100 * 1 + 2; +INSERT INTO t2 VALUES (@val); +COMMIT; +[connection slave] +include/wait_for_slave_io_to_stop.inc +# Removing debug point 'stop_io_after_reading_gtid_log_event' from @@GLOBAL.debug +include/sync_slave_sql_with_io.inc +include/gtid_step_assert.inc [count=1, only_count=0] +[connection master] +INSERT INTO t2 VALUES (100 * 1 + 3); +[connection slave] +include/start_slave_io.inc +[connection master] +include/sync_slave_sql_with_master.inc +include/gtid_step_assert.inc [count=3, only_count=0] +[connection slave] +[connection master] +INSERT INTO t1 (info) VALUES ('stop_io_after_reading_query_log_event'); +include/sync_slave_io_with_master.inc +# Adding debug point 'stop_io_after_reading_query_log_event' to @@GLOBAL.debug +[connection master] +BEGIN; +INSERT INTO t2 VALUES (100 * 2 + 1); +SET @val= 100 * 2 + 2; +INSERT INTO t2 VALUES (@val); +COMMIT; +[connection slave] +include/wait_for_slave_io_to_stop.inc +# Removing debug point 'stop_io_after_reading_query_log_event' from @@GLOBAL.debug +include/sync_slave_sql_with_io.inc +include/gtid_step_assert.inc [count=1, only_count=0] +[connection master] +INSERT INTO t2 VALUES (100 * 2 + 3); +[connection slave] +include/start_slave_io.inc +[connection master] +include/sync_slave_sql_with_master.inc +include/gtid_step_assert.inc [count=3, only_count=0] +[connection slave] +[connection master] +INSERT INTO t1 (info) VALUES ('stop_io_after_reading_table_map_event'); +include/sync_slave_io_with_master.inc +# Adding debug point 'stop_io_after_reading_table_map_event' to @@GLOBAL.debug +[connection master] +BEGIN; +INSERT INTO t2 VALUES (100 * 3 + 1); +SET @val= 100 * 3 + 2; +INSERT INTO t2 VALUES (@val); +COMMIT; +[connection slave] +include/wait_for_slave_io_to_stop.inc +# Removing debug point 'stop_io_after_reading_table_map_event' from @@GLOBAL.debug +include/sync_slave_sql_with_io.inc +include/gtid_step_assert.inc [count=1, only_count=0] +[connection master] +INSERT INTO t2 VALUES (100 * 3 + 3); +[connection slave] +include/start_slave_io.inc +[connection master] +include/sync_slave_sql_with_master.inc +include/gtid_step_assert.inc [count=3, only_count=0] +[connection master] +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:t1, slave:t1] +[connection master] +DROP TABLE t1,t2; +include/sync_slave_sql_with_master.inc +# Using InnoDB storage engine +## Running the test with the SQL thread stopped +[connection slave] +include/stop_slave_sql.inc +[connection slave] +[connection master] +[connection slave] +include/gtid_step_reset_on_retrieved.inc +[connection master] +CREATE TABLE t1 (i INT NOT NULL AUTO_INCREMENT PRIMARY KEY, info VARCHAR(64)) ENGINE=INNODB; +CREATE TABLE t2 (i INT) ENGINE=INNODB; +INSERT INTO t1 (info) VALUE ('Insert data without splitting transactions in the relay log'); +BEGIN; +INSERT INTO t2 (i) VALUES (-6); +INSERT INTO t2 (i) VALUES (-5); +INSERT INTO t2 (i) VALUES (-4); +COMMIT; +[connection master] +include/sync_slave_io_with_master.inc +[connection slave] +include/stop_slave_io.inc +include/start_slave_io.inc +[connection slave] +include/gtid_step_assert_on_retrieved.inc [count=4, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection master] +INSERT INTO t1 (info) VALUE ('Insert data rotating master binlog between two transactions'); +BEGIN; +INSERT INTO t2 (i) VALUES (-3); +INSERT INTO t2 (i) VALUES (-2); +COMMIT; +FLUSH LOGS; +INSERT INTO t1 (info) VALUE ('After FLUSH LOGS at master'); +BEGIN; +INSERT INTO t2 (i) VALUES (-1); +INSERT INTO t2 (i) VALUES (0); +COMMIT; +[connection master] +include/sync_slave_io_with_master.inc +[connection slave] +include/stop_slave_io.inc +include/start_slave_io.inc +[connection slave] +include/gtid_step_assert_on_retrieved.inc [count=4, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection slave] +[connection master] +INSERT INTO t1 (info) VALUES ('stop_io_after_reading_gtid_log_event'); +include/sync_slave_io_with_master.inc +# Adding debug point 'stop_io_after_reading_gtid_log_event' to @@GLOBAL.debug +[connection master] +BEGIN; +INSERT INTO t2 VALUES (100 * 1 + 1); +SET @val= 100 * 1 + 2; +INSERT INTO t2 VALUES (@val); +COMMIT; +[connection slave] +include/wait_for_slave_io_to_stop.inc +# Removing debug point 'stop_io_after_reading_gtid_log_event' from @@GLOBAL.debug +include/gtid_step_assert_on_retrieved.inc [count=1, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection master] +INSERT INTO t2 VALUES (100 * 1 + 3); +[connection slave] +include/start_slave_io.inc +[connection master] +include/sync_slave_io_with_master.inc +include/gtid_step_assert_on_retrieved.inc [count=2, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection slave] +[connection master] +INSERT INTO t1 (info) VALUES ('stop_io_after_reading_query_log_event'); +include/sync_slave_io_with_master.inc +# Adding debug point 'stop_io_after_reading_query_log_event' to @@GLOBAL.debug +[connection master] +BEGIN; +INSERT INTO t2 VALUES (100 * 2 + 1); +SET @val= 100 * 2 + 2; +INSERT INTO t2 VALUES (@val); +COMMIT; +[connection slave] +include/wait_for_slave_io_to_stop.inc +# Removing debug point 'stop_io_after_reading_query_log_event' from @@GLOBAL.debug +include/gtid_step_assert_on_retrieved.inc [count=1, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection master] +INSERT INTO t2 VALUES (100 * 2 + 3); +[connection slave] +include/start_slave_io.inc +[connection master] +include/sync_slave_io_with_master.inc +include/gtid_step_assert_on_retrieved.inc [count=2, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection slave] +[connection master] +INSERT INTO t1 (info) VALUES ('stop_io_after_reading_table_map_event'); +include/sync_slave_io_with_master.inc +# Adding debug point 'stop_io_after_reading_table_map_event' to @@GLOBAL.debug +[connection master] +BEGIN; +INSERT INTO t2 VALUES (100 * 3 + 1); +SET @val= 100 * 3 + 2; +INSERT INTO t2 VALUES (@val); +COMMIT; +[connection slave] +include/wait_for_slave_io_to_stop.inc +# Removing debug point 'stop_io_after_reading_table_map_event' from @@GLOBAL.debug +include/gtid_step_assert_on_retrieved.inc [count=1, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection master] +INSERT INTO t2 VALUES (100 * 3 + 3); +[connection slave] +include/start_slave_io.inc +[connection master] +include/sync_slave_io_with_master.inc +include/gtid_step_assert_on_retrieved.inc [count=2, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection slave] +[connection master] +INSERT INTO t1 (info) VALUES ('stop_io_after_reading_xid_log_event'); +include/sync_slave_io_with_master.inc +# Adding debug point 'stop_io_after_reading_xid_log_event' to @@GLOBAL.debug +[connection master] +BEGIN; +INSERT INTO t2 VALUES (100 * 4 + 1); +SET @val= 100 * 4 + 2; +INSERT INTO t2 VALUES (@val); +COMMIT; +[connection slave] +include/wait_for_slave_io_to_stop.inc +# Removing debug point 'stop_io_after_reading_xid_log_event' from @@GLOBAL.debug +include/gtid_step_assert_on_retrieved.inc [count=2, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection master] +INSERT INTO t2 VALUES (100 * 4 + 3); +[connection slave] +include/start_slave_io.inc +[connection master] +include/sync_slave_io_with_master.inc +include/gtid_step_assert_on_retrieved.inc [count=1, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection master] +DROP TABLE t1,t2; +## Starting and syncing the SQL thread before next round +[connection slave] +include/start_slave_sql.inc +[connection master] +include/sync_slave_sql_with_master.inc +## Running the test with the SQL thread started +[connection slave] +[connection master] +[connection slave] +include/gtid_step_reset.inc +[connection master] +CREATE TABLE t1 (i INT NOT NULL AUTO_INCREMENT PRIMARY KEY, info VARCHAR(64)) ENGINE=INNODB; +CREATE TABLE t2 (i INT) ENGINE=INNODB; +INSERT INTO t1 (info) VALUE ('Insert data without splitting transactions in the relay log'); +BEGIN; +INSERT INTO t2 (i) VALUES (-6); +INSERT INTO t2 (i) VALUES (-5); +INSERT INTO t2 (i) VALUES (-4); +COMMIT; +[connection master] +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:t1, slave:t1] +[connection slave] +include/stop_slave_io.inc +include/start_slave_io.inc +[connection slave] +include/gtid_step_assert.inc [count=4, only_count=0] +[connection master] +INSERT INTO t1 (info) VALUE ('Insert data rotating master binlog between two transactions'); +BEGIN; +INSERT INTO t2 (i) VALUES (-3); +INSERT INTO t2 (i) VALUES (-2); +COMMIT; +FLUSH LOGS; +INSERT INTO t1 (info) VALUE ('After FLUSH LOGS at master'); +BEGIN; +INSERT INTO t2 (i) VALUES (-1); +INSERT INTO t2 (i) VALUES (0); +COMMIT; +[connection master] +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:t1, slave:t1] +[connection slave] +include/stop_slave_io.inc +include/start_slave_io.inc +[connection slave] +include/gtid_step_assert.inc [count=4, only_count=0] +[connection slave] +[connection master] +INSERT INTO t1 (info) VALUES ('stop_io_after_reading_gtid_log_event'); +include/sync_slave_io_with_master.inc +# Adding debug point 'stop_io_after_reading_gtid_log_event' to @@GLOBAL.debug +[connection master] +BEGIN; +INSERT INTO t2 VALUES (100 * 1 + 1); +SET @val= 100 * 1 + 2; +INSERT INTO t2 VALUES (@val); +COMMIT; +[connection slave] +include/wait_for_slave_io_to_stop.inc +# Removing debug point 'stop_io_after_reading_gtid_log_event' from @@GLOBAL.debug +include/sync_slave_sql_with_io.inc +include/gtid_step_assert.inc [count=1, only_count=0] +[connection master] +INSERT INTO t2 VALUES (100 * 1 + 3); +[connection slave] +include/start_slave_io.inc +[connection master] +include/sync_slave_sql_with_master.inc +include/gtid_step_assert.inc [count=2, only_count=0] +[connection slave] +[connection master] +INSERT INTO t1 (info) VALUES ('stop_io_after_reading_query_log_event'); +include/sync_slave_io_with_master.inc +# Adding debug point 'stop_io_after_reading_query_log_event' to @@GLOBAL.debug +[connection master] +BEGIN; +INSERT INTO t2 VALUES (100 * 2 + 1); +SET @val= 100 * 2 + 2; +INSERT INTO t2 VALUES (@val); +COMMIT; +[connection slave] +include/wait_for_slave_io_to_stop.inc +# Removing debug point 'stop_io_after_reading_query_log_event' from @@GLOBAL.debug +include/sync_slave_sql_with_io.inc +include/gtid_step_assert.inc [count=1, only_count=0] +[connection master] +INSERT INTO t2 VALUES (100 * 2 + 3); +[connection slave] +include/start_slave_io.inc +[connection master] +include/sync_slave_sql_with_master.inc +include/gtid_step_assert.inc [count=2, only_count=0] +[connection slave] +[connection master] +INSERT INTO t1 (info) VALUES ('stop_io_after_reading_table_map_event'); +include/sync_slave_io_with_master.inc +# Adding debug point 'stop_io_after_reading_table_map_event' to @@GLOBAL.debug +[connection master] +BEGIN; +INSERT INTO t2 VALUES (100 * 3 + 1); +SET @val= 100 * 3 + 2; +INSERT INTO t2 VALUES (@val); +COMMIT; +[connection slave] +include/wait_for_slave_io_to_stop.inc +# Removing debug point 'stop_io_after_reading_table_map_event' from @@GLOBAL.debug +include/sync_slave_sql_with_io.inc +include/gtid_step_assert.inc [count=1, only_count=0] +[connection master] +INSERT INTO t2 VALUES (100 * 3 + 3); +[connection slave] +include/start_slave_io.inc +[connection master] +include/sync_slave_sql_with_master.inc +include/gtid_step_assert.inc [count=2, only_count=0] +[connection slave] +[connection master] +INSERT INTO t1 (info) VALUES ('stop_io_after_reading_xid_log_event'); +include/sync_slave_io_with_master.inc +# Adding debug point 'stop_io_after_reading_xid_log_event' to @@GLOBAL.debug +[connection master] +BEGIN; +INSERT INTO t2 VALUES (100 * 4 + 1); +SET @val= 100 * 4 + 2; +INSERT INTO t2 VALUES (@val); +COMMIT; +[connection slave] +include/wait_for_slave_io_to_stop.inc +# Removing debug point 'stop_io_after_reading_xid_log_event' from @@GLOBAL.debug +include/sync_slave_sql_with_io.inc +include/gtid_step_assert.inc [count=2, only_count=0] +[connection master] +INSERT INTO t2 VALUES (100 * 4 + 3); +[connection slave] +include/start_slave_io.inc +[connection master] +include/sync_slave_sql_with_master.inc +include/gtid_step_assert.inc [count=1, only_count=0] +[connection master] +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:t1, slave:t1] +[connection master] +DROP TABLE t1,t2; +include/sync_slave_sql_with_master.inc +[connection slave] +include/stop_slave.inc +RESET MASTER; +RESET SLAVE; +[connection master] +RESET MASTER; +[connection slave] +include/stop_slave.inc +Warnings: +Note 3084 Replication thread(s) for channel '' are already stopped. +CHANGE MASTER TO MASTER_AUTO_POSITION= 0; +include/start_slave.inc +# Using MyISAM storage engine without auto positioning +## Running the test with the SQL thread stopped +[connection slave] +include/stop_slave_sql.inc +[connection slave] +[connection master] +[connection slave] +include/gtid_step_reset_on_retrieved.inc +[connection master] +CREATE TABLE t1 (i INT NOT NULL AUTO_INCREMENT PRIMARY KEY, info VARCHAR(64)) ENGINE=MYISAM; +CREATE TABLE t2 (i INT) ENGINE=MYISAM; +INSERT INTO t1 (info) VALUE ('Insert data without splitting transactions in the relay log'); +BEGIN; +INSERT INTO t2 (i) VALUES (-6); +INSERT INTO t2 (i) VALUES (-5); +INSERT INTO t2 (i) VALUES (-4); +COMMIT; +[connection master] +include/sync_slave_io_with_master.inc +[connection slave] +include/stop_slave_io.inc +include/start_slave_io.inc +[connection slave] +include/gtid_step_assert_on_retrieved.inc [count=6, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection master] +INSERT INTO t1 (info) VALUE ('Insert data rotating master binlog between two transactions'); +BEGIN; +INSERT INTO t2 (i) VALUES (-3); +INSERT INTO t2 (i) VALUES (-2); +COMMIT; +FLUSH LOGS; +INSERT INTO t1 (info) VALUE ('After FLUSH LOGS at master'); +BEGIN; +INSERT INTO t2 (i) VALUES (-1); +INSERT INTO t2 (i) VALUES (0); +COMMIT; +[connection master] +include/sync_slave_io_with_master.inc +[connection slave] +include/stop_slave_io.inc +include/start_slave_io.inc +[connection slave] +include/gtid_step_assert_on_retrieved.inc [count=6, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection slave] +[connection master] +INSERT INTO t1 (info) VALUES ('stop_io_after_reading_gtid_log_event'); +include/sync_slave_io_with_master.inc +# Adding debug point 'stop_io_after_reading_gtid_log_event' to @@GLOBAL.debug +[connection master] +BEGIN; +INSERT INTO t2 VALUES (100 * 1 + 1); +SET @val= 100 * 1 + 2; +INSERT INTO t2 VALUES (@val); +COMMIT; +[connection slave] +include/wait_for_slave_io_to_stop.inc +# Removing debug point 'stop_io_after_reading_gtid_log_event' from @@GLOBAL.debug +include/gtid_step_assert_on_retrieved.inc [count=1, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection master] +INSERT INTO t2 VALUES (100 * 1 + 3); +[connection slave] +include/start_slave_io.inc +[connection master] +include/sync_slave_io_with_master.inc +include/gtid_step_assert_on_retrieved.inc [count=3, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection slave] +[connection master] +INSERT INTO t1 (info) VALUES ('stop_io_after_reading_query_log_event'); +include/sync_slave_io_with_master.inc +# Adding debug point 'stop_io_after_reading_query_log_event' to @@GLOBAL.debug +[connection master] +BEGIN; +INSERT INTO t2 VALUES (100 * 2 + 1); +SET @val= 100 * 2 + 2; +INSERT INTO t2 VALUES (@val); +COMMIT; +[connection slave] +include/wait_for_slave_io_to_stop.inc +# Removing debug point 'stop_io_after_reading_query_log_event' from @@GLOBAL.debug +include/gtid_step_assert_on_retrieved.inc [count=1, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection master] +INSERT INTO t2 VALUES (100 * 2 + 3); +[connection slave] +include/start_slave_io.inc +[connection master] +include/sync_slave_io_with_master.inc +include/gtid_step_assert_on_retrieved.inc [count=3, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection slave] +[connection master] +INSERT INTO t1 (info) VALUES ('stop_io_after_reading_table_map_event'); +include/sync_slave_io_with_master.inc +# Adding debug point 'stop_io_after_reading_table_map_event' to @@GLOBAL.debug +[connection master] +BEGIN; +INSERT INTO t2 VALUES (100 * 3 + 1); +SET @val= 100 * 3 + 2; +INSERT INTO t2 VALUES (@val); +COMMIT; +[connection slave] +include/wait_for_slave_io_to_stop.inc +# Removing debug point 'stop_io_after_reading_table_map_event' from @@GLOBAL.debug +include/gtid_step_assert_on_retrieved.inc [count=1, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection master] +INSERT INTO t2 VALUES (100 * 3 + 3); +[connection slave] +include/start_slave_io.inc +[connection master] +include/sync_slave_io_with_master.inc +include/gtid_step_assert_on_retrieved.inc [count=3, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection master] +DROP TABLE t1,t2; +## Starting and syncing the SQL thread before next round +[connection slave] +include/start_slave_sql.inc +[connection master] +include/sync_slave_sql_with_master.inc +## Running the test with the SQL thread started +[connection slave] +[connection master] +[connection slave] +include/gtid_step_reset.inc +[connection master] +CREATE TABLE t1 (i INT NOT NULL AUTO_INCREMENT PRIMARY KEY, info VARCHAR(64)) ENGINE=MYISAM; +CREATE TABLE t2 (i INT) ENGINE=MYISAM; +INSERT INTO t1 (info) VALUE ('Insert data without splitting transactions in the relay log'); +BEGIN; +INSERT INTO t2 (i) VALUES (-6); +INSERT INTO t2 (i) VALUES (-5); +INSERT INTO t2 (i) VALUES (-4); +COMMIT; +[connection master] +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:t1, slave:t1] +[connection slave] +include/stop_slave_io.inc +include/start_slave_io.inc +[connection slave] +include/gtid_step_assert.inc [count=6, only_count=0] +[connection master] +INSERT INTO t1 (info) VALUE ('Insert data rotating master binlog between two transactions'); +BEGIN; +INSERT INTO t2 (i) VALUES (-3); +INSERT INTO t2 (i) VALUES (-2); +COMMIT; +FLUSH LOGS; +INSERT INTO t1 (info) VALUE ('After FLUSH LOGS at master'); +BEGIN; +INSERT INTO t2 (i) VALUES (-1); +INSERT INTO t2 (i) VALUES (0); +COMMIT; +[connection master] +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:t1, slave:t1] +[connection slave] +include/stop_slave_io.inc +include/start_slave_io.inc +[connection slave] +include/gtid_step_assert.inc [count=6, only_count=0] +[connection slave] +[connection master] +INSERT INTO t1 (info) VALUES ('stop_io_after_reading_gtid_log_event'); +include/sync_slave_io_with_master.inc +# Adding debug point 'stop_io_after_reading_gtid_log_event' to @@GLOBAL.debug +[connection master] +BEGIN; +INSERT INTO t2 VALUES (100 * 1 + 1); +SET @val= 100 * 1 + 2; +INSERT INTO t2 VALUES (@val); +COMMIT; +[connection slave] +include/wait_for_slave_io_to_stop.inc +# Removing debug point 'stop_io_after_reading_gtid_log_event' from @@GLOBAL.debug +include/sync_slave_sql_with_io.inc +include/gtid_step_assert.inc [count=1, only_count=0] +[connection master] +INSERT INTO t2 VALUES (100 * 1 + 3); +[connection slave] +include/start_slave_io.inc +[connection master] +include/sync_slave_sql_with_master.inc +include/gtid_step_assert.inc [count=3, only_count=0] +[connection slave] +[connection master] +INSERT INTO t1 (info) VALUES ('stop_io_after_reading_query_log_event'); +include/sync_slave_io_with_master.inc +# Adding debug point 'stop_io_after_reading_query_log_event' to @@GLOBAL.debug +[connection master] +BEGIN; +INSERT INTO t2 VALUES (100 * 2 + 1); +SET @val= 100 * 2 + 2; +INSERT INTO t2 VALUES (@val); +COMMIT; +[connection slave] +include/wait_for_slave_io_to_stop.inc +# Removing debug point 'stop_io_after_reading_query_log_event' from @@GLOBAL.debug +include/sync_slave_sql_with_io.inc +include/gtid_step_assert.inc [count=1, only_count=0] +[connection master] +INSERT INTO t2 VALUES (100 * 2 + 3); +[connection slave] +include/start_slave_io.inc +[connection master] +include/sync_slave_sql_with_master.inc +include/gtid_step_assert.inc [count=3, only_count=0] +[connection slave] +[connection master] +INSERT INTO t1 (info) VALUES ('stop_io_after_reading_table_map_event'); +include/sync_slave_io_with_master.inc +# Adding debug point 'stop_io_after_reading_table_map_event' to @@GLOBAL.debug +[connection master] +BEGIN; +INSERT INTO t2 VALUES (100 * 3 + 1); +SET @val= 100 * 3 + 2; +INSERT INTO t2 VALUES (@val); +COMMIT; +[connection slave] +include/wait_for_slave_io_to_stop.inc +# Removing debug point 'stop_io_after_reading_table_map_event' from @@GLOBAL.debug +include/sync_slave_sql_with_io.inc +include/gtid_step_assert.inc [count=1, only_count=0] +[connection master] +INSERT INTO t2 VALUES (100 * 3 + 3); +[connection slave] +include/start_slave_io.inc +[connection master] +include/sync_slave_sql_with_master.inc +include/gtid_step_assert.inc [count=3, only_count=0] +[connection master] +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:t1, slave:t1] +[connection master] +DROP TABLE t1,t2; +include/sync_slave_sql_with_master.inc +# Using InnoDB storage engine without auto positioning +## Running the test with the SQL thread stopped +[connection slave] +include/stop_slave_sql.inc +[connection slave] +[connection master] +[connection slave] +include/gtid_step_reset_on_retrieved.inc +[connection master] +CREATE TABLE t1 (i INT NOT NULL AUTO_INCREMENT PRIMARY KEY, info VARCHAR(64)) ENGINE=INNODB; +CREATE TABLE t2 (i INT) ENGINE=INNODB; +INSERT INTO t1 (info) VALUE ('Insert data without splitting transactions in the relay log'); +BEGIN; +INSERT INTO t2 (i) VALUES (-6); +INSERT INTO t2 (i) VALUES (-5); +INSERT INTO t2 (i) VALUES (-4); +COMMIT; +[connection master] +include/sync_slave_io_with_master.inc +[connection slave] +include/stop_slave_io.inc +include/start_slave_io.inc +[connection slave] +include/gtid_step_assert_on_retrieved.inc [count=4, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection master] +INSERT INTO t1 (info) VALUE ('Insert data rotating master binlog between two transactions'); +BEGIN; +INSERT INTO t2 (i) VALUES (-3); +INSERT INTO t2 (i) VALUES (-2); +COMMIT; +FLUSH LOGS; +INSERT INTO t1 (info) VALUE ('After FLUSH LOGS at master'); +BEGIN; +INSERT INTO t2 (i) VALUES (-1); +INSERT INTO t2 (i) VALUES (0); +COMMIT; +[connection master] +include/sync_slave_io_with_master.inc +[connection slave] +include/stop_slave_io.inc +include/start_slave_io.inc +[connection slave] +include/gtid_step_assert_on_retrieved.inc [count=4, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection slave] +[connection master] +INSERT INTO t1 (info) VALUES ('stop_io_after_reading_gtid_log_event'); +include/sync_slave_io_with_master.inc +# Adding debug point 'stop_io_after_reading_gtid_log_event' to @@GLOBAL.debug +[connection master] +BEGIN; +INSERT INTO t2 VALUES (100 * 1 + 1); +SET @val= 100 * 1 + 2; +INSERT INTO t2 VALUES (@val); +COMMIT; +[connection slave] +include/wait_for_slave_io_to_stop.inc +# Removing debug point 'stop_io_after_reading_gtid_log_event' from @@GLOBAL.debug +include/gtid_step_assert_on_retrieved.inc [count=1, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection master] +INSERT INTO t2 VALUES (100 * 1 + 3); +[connection slave] +include/start_slave_io.inc +[connection master] +include/sync_slave_io_with_master.inc +include/gtid_step_assert_on_retrieved.inc [count=2, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection slave] +[connection master] +INSERT INTO t1 (info) VALUES ('stop_io_after_reading_query_log_event'); +include/sync_slave_io_with_master.inc +# Adding debug point 'stop_io_after_reading_query_log_event' to @@GLOBAL.debug +[connection master] +BEGIN; +INSERT INTO t2 VALUES (100 * 2 + 1); +SET @val= 100 * 2 + 2; +INSERT INTO t2 VALUES (@val); +COMMIT; +[connection slave] +include/wait_for_slave_io_to_stop.inc +# Removing debug point 'stop_io_after_reading_query_log_event' from @@GLOBAL.debug +include/gtid_step_assert_on_retrieved.inc [count=1, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection master] +INSERT INTO t2 VALUES (100 * 2 + 3); +[connection slave] +include/start_slave_io.inc +[connection master] +include/sync_slave_io_with_master.inc +include/gtid_step_assert_on_retrieved.inc [count=2, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection slave] +[connection master] +INSERT INTO t1 (info) VALUES ('stop_io_after_reading_table_map_event'); +include/sync_slave_io_with_master.inc +# Adding debug point 'stop_io_after_reading_table_map_event' to @@GLOBAL.debug +[connection master] +BEGIN; +INSERT INTO t2 VALUES (100 * 3 + 1); +SET @val= 100 * 3 + 2; +INSERT INTO t2 VALUES (@val); +COMMIT; +[connection slave] +include/wait_for_slave_io_to_stop.inc +# Removing debug point 'stop_io_after_reading_table_map_event' from @@GLOBAL.debug +include/gtid_step_assert_on_retrieved.inc [count=1, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection master] +INSERT INTO t2 VALUES (100 * 3 + 3); +[connection slave] +include/start_slave_io.inc +[connection master] +include/sync_slave_io_with_master.inc +include/gtid_step_assert_on_retrieved.inc [count=2, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection slave] +[connection master] +INSERT INTO t1 (info) VALUES ('stop_io_after_reading_xid_log_event'); +include/sync_slave_io_with_master.inc +# Adding debug point 'stop_io_after_reading_xid_log_event' to @@GLOBAL.debug +[connection master] +BEGIN; +INSERT INTO t2 VALUES (100 * 4 + 1); +SET @val= 100 * 4 + 2; +INSERT INTO t2 VALUES (@val); +COMMIT; +[connection slave] +include/wait_for_slave_io_to_stop.inc +# Removing debug point 'stop_io_after_reading_xid_log_event' from @@GLOBAL.debug +include/gtid_step_assert_on_retrieved.inc [count=2, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection master] +INSERT INTO t2 VALUES (100 * 4 + 3); +[connection slave] +include/start_slave_io.inc +[connection master] +include/sync_slave_io_with_master.inc +include/gtid_step_assert_on_retrieved.inc [count=1, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection master] +DROP TABLE t1,t2; +## Starting and syncing the SQL thread before next round +[connection slave] +include/start_slave_sql.inc +[connection master] +include/sync_slave_sql_with_master.inc +## Running the test with the SQL thread started +[connection slave] +[connection master] +[connection slave] +include/gtid_step_reset.inc +[connection master] +CREATE TABLE t1 (i INT NOT NULL AUTO_INCREMENT PRIMARY KEY, info VARCHAR(64)) ENGINE=INNODB; +CREATE TABLE t2 (i INT) ENGINE=INNODB; +INSERT INTO t1 (info) VALUE ('Insert data without splitting transactions in the relay log'); +BEGIN; +INSERT INTO t2 (i) VALUES (-6); +INSERT INTO t2 (i) VALUES (-5); +INSERT INTO t2 (i) VALUES (-4); +COMMIT; +[connection master] +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:t1, slave:t1] +[connection slave] +include/stop_slave_io.inc +include/start_slave_io.inc +[connection slave] +include/gtid_step_assert.inc [count=4, only_count=0] +[connection master] +INSERT INTO t1 (info) VALUE ('Insert data rotating master binlog between two transactions'); +BEGIN; +INSERT INTO t2 (i) VALUES (-3); +INSERT INTO t2 (i) VALUES (-2); +COMMIT; +FLUSH LOGS; +INSERT INTO t1 (info) VALUE ('After FLUSH LOGS at master'); +BEGIN; +INSERT INTO t2 (i) VALUES (-1); +INSERT INTO t2 (i) VALUES (0); +COMMIT; +[connection master] +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:t1, slave:t1] +[connection slave] +include/stop_slave_io.inc +include/start_slave_io.inc +[connection slave] +include/gtid_step_assert.inc [count=4, only_count=0] +[connection slave] +[connection master] +INSERT INTO t1 (info) VALUES ('stop_io_after_reading_gtid_log_event'); +include/sync_slave_io_with_master.inc +# Adding debug point 'stop_io_after_reading_gtid_log_event' to @@GLOBAL.debug +[connection master] +BEGIN; +INSERT INTO t2 VALUES (100 * 1 + 1); +SET @val= 100 * 1 + 2; +INSERT INTO t2 VALUES (@val); +COMMIT; +[connection slave] +include/wait_for_slave_io_to_stop.inc +# Removing debug point 'stop_io_after_reading_gtid_log_event' from @@GLOBAL.debug +include/sync_slave_sql_with_io.inc +include/gtid_step_assert.inc [count=1, only_count=0] +[connection master] +INSERT INTO t2 VALUES (100 * 1 + 3); +[connection slave] +include/start_slave_io.inc +[connection master] +include/sync_slave_sql_with_master.inc +include/gtid_step_assert.inc [count=2, only_count=0] +[connection slave] +[connection master] +INSERT INTO t1 (info) VALUES ('stop_io_after_reading_query_log_event'); +include/sync_slave_io_with_master.inc +# Adding debug point 'stop_io_after_reading_query_log_event' to @@GLOBAL.debug +[connection master] +BEGIN; +INSERT INTO t2 VALUES (100 * 2 + 1); +SET @val= 100 * 2 + 2; +INSERT INTO t2 VALUES (@val); +COMMIT; +[connection slave] +include/wait_for_slave_io_to_stop.inc +# Removing debug point 'stop_io_after_reading_query_log_event' from @@GLOBAL.debug +include/sync_slave_sql_with_io.inc +include/gtid_step_assert.inc [count=1, only_count=0] +[connection master] +INSERT INTO t2 VALUES (100 * 2 + 3); +[connection slave] +include/start_slave_io.inc +[connection master] +include/sync_slave_sql_with_master.inc +include/gtid_step_assert.inc [count=2, only_count=0] +[connection slave] +[connection master] +INSERT INTO t1 (info) VALUES ('stop_io_after_reading_table_map_event'); +include/sync_slave_io_with_master.inc +# Adding debug point 'stop_io_after_reading_table_map_event' to @@GLOBAL.debug +[connection master] +BEGIN; +INSERT INTO t2 VALUES (100 * 3 + 1); +SET @val= 100 * 3 + 2; +INSERT INTO t2 VALUES (@val); +COMMIT; +[connection slave] +include/wait_for_slave_io_to_stop.inc +# Removing debug point 'stop_io_after_reading_table_map_event' from @@GLOBAL.debug +include/sync_slave_sql_with_io.inc +include/gtid_step_assert.inc [count=1, only_count=0] +[connection master] +INSERT INTO t2 VALUES (100 * 3 + 3); +[connection slave] +include/start_slave_io.inc +[connection master] +include/sync_slave_sql_with_master.inc +include/gtid_step_assert.inc [count=2, only_count=0] +[connection slave] +[connection master] +INSERT INTO t1 (info) VALUES ('stop_io_after_reading_xid_log_event'); +include/sync_slave_io_with_master.inc +# Adding debug point 'stop_io_after_reading_xid_log_event' to @@GLOBAL.debug +[connection master] +BEGIN; +INSERT INTO t2 VALUES (100 * 4 + 1); +SET @val= 100 * 4 + 2; +INSERT INTO t2 VALUES (@val); +COMMIT; +[connection slave] +include/wait_for_slave_io_to_stop.inc +# Removing debug point 'stop_io_after_reading_xid_log_event' from @@GLOBAL.debug +include/sync_slave_sql_with_io.inc +include/gtid_step_assert.inc [count=2, only_count=0] +[connection master] +INSERT INTO t2 VALUES (100 * 4 + 3); +[connection slave] +include/start_slave_io.inc +[connection master] +include/sync_slave_sql_with_master.inc +include/gtid_step_assert.inc [count=1, only_count=0] +[connection master] +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:t1, slave:t1] +[connection master] +DROP TABLE t1,t2; +include/sync_slave_sql_with_master.inc +[connection slave] +include/stop_slave.inc +CHANGE MASTER TO MASTER_AUTO_POSITION= 1; +include/start_slave.inc +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/rpl_trx_boundary_parser_stmt.result b/mysql-test/suite/rpl_encryption/r/rpl_trx_boundary_parser_stmt.result new file mode 100644 index 000000000000..70d7e3cae002 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_trx_boundary_parser_stmt.result @@ -0,0 +1,1077 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +# Using MyISAM storage engine +## Running the test with the SQL thread stopped +[connection slave] +include/stop_slave_sql.inc +[connection slave] +[connection master] +[connection slave] +include/gtid_step_reset_on_retrieved.inc +[connection master] +CREATE TABLE t1 (i INT NOT NULL AUTO_INCREMENT PRIMARY KEY, info VARCHAR(64)) ENGINE=MYISAM; +CREATE TABLE t2 (i INT) ENGINE=MYISAM; +INSERT INTO t1 (info) VALUE ('Insert data without splitting transactions in the relay log'); +BEGIN; +INSERT INTO t2 (i) VALUES (-6); +INSERT INTO t2 (i) VALUES (-5); +INSERT INTO t2 (i) VALUES (-4); +COMMIT; +[connection master] +include/sync_slave_io_with_master.inc +[connection slave] +include/stop_slave_io.inc +include/start_slave_io.inc +[connection slave] +include/gtid_step_assert_on_retrieved.inc [count=6, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection master] +INSERT INTO t1 (info) VALUE ('Insert data rotating master binlog between two transactions'); +BEGIN; +INSERT INTO t2 (i) VALUES (-3); +INSERT INTO t2 (i) VALUES (-2); +COMMIT; +FLUSH LOGS; +INSERT INTO t1 (info) VALUE ('After FLUSH LOGS at master'); +BEGIN; +INSERT INTO t2 (i) VALUES (-1); +INSERT INTO t2 (i) VALUES (0); +COMMIT; +[connection master] +include/sync_slave_io_with_master.inc +[connection slave] +include/stop_slave_io.inc +include/start_slave_io.inc +[connection slave] +include/gtid_step_assert_on_retrieved.inc [count=6, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection slave] +[connection master] +INSERT INTO t1 (info) VALUES ('stop_io_after_reading_gtid_log_event'); +include/sync_slave_io_with_master.inc +# Adding debug point 'stop_io_after_reading_gtid_log_event' to @@GLOBAL.debug +[connection master] +BEGIN; +INSERT INTO t2 VALUES (100 * 1 + 1); +SET @val= 100 * 1 + 2; +INSERT INTO t2 VALUES (@val); +COMMIT; +[connection slave] +include/wait_for_slave_io_to_stop.inc +# Removing debug point 'stop_io_after_reading_gtid_log_event' from @@GLOBAL.debug +include/gtid_step_assert_on_retrieved.inc [count=1, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection master] +INSERT INTO t2 VALUES (100 * 1 + 3); +[connection slave] +include/start_slave_io.inc +[connection master] +include/sync_slave_io_with_master.inc +include/gtid_step_assert_on_retrieved.inc [count=3, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection slave] +[connection master] +INSERT INTO t1 (info) VALUES ('stop_io_after_reading_query_log_event'); +include/sync_slave_io_with_master.inc +# Adding debug point 'stop_io_after_reading_query_log_event' to @@GLOBAL.debug +[connection master] +BEGIN; +INSERT INTO t2 VALUES (100 * 2 + 1); +SET @val= 100 * 2 + 2; +INSERT INTO t2 VALUES (@val); +COMMIT; +[connection slave] +include/wait_for_slave_io_to_stop.inc +# Removing debug point 'stop_io_after_reading_query_log_event' from @@GLOBAL.debug +include/gtid_step_assert_on_retrieved.inc [count=1, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection master] +INSERT INTO t2 VALUES (100 * 2 + 3); +[connection slave] +include/start_slave_io.inc +[connection master] +include/sync_slave_io_with_master.inc +include/gtid_step_assert_on_retrieved.inc [count=3, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection slave] +[connection master] +INSERT INTO t1 (info) VALUES ('stop_io_after_reading_user_var_log_event'); +include/sync_slave_io_with_master.inc +# Adding debug point 'stop_io_after_reading_user_var_log_event' to @@GLOBAL.debug +[connection master] +BEGIN; +INSERT INTO t2 VALUES (100 * 3 + 1); +SET @val= 100 * 3 + 2; +INSERT INTO t2 VALUES (@val); +COMMIT; +[connection slave] +include/wait_for_slave_io_to_stop.inc +# Removing debug point 'stop_io_after_reading_user_var_log_event' from @@GLOBAL.debug +include/gtid_step_assert_on_retrieved.inc [count=2, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection master] +INSERT INTO t2 VALUES (100 * 3 + 3); +[connection slave] +include/start_slave_io.inc +[connection master] +include/sync_slave_io_with_master.inc +include/gtid_step_assert_on_retrieved.inc [count=2, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection master] +DROP TABLE t1,t2; +## Starting and syncing the SQL thread before next round +[connection slave] +include/start_slave_sql.inc +[connection master] +include/sync_slave_sql_with_master.inc +## Running the test with the SQL thread started +[connection slave] +[connection master] +[connection slave] +include/gtid_step_reset.inc +[connection master] +CREATE TABLE t1 (i INT NOT NULL AUTO_INCREMENT PRIMARY KEY, info VARCHAR(64)) ENGINE=MYISAM; +CREATE TABLE t2 (i INT) ENGINE=MYISAM; +INSERT INTO t1 (info) VALUE ('Insert data without splitting transactions in the relay log'); +BEGIN; +INSERT INTO t2 (i) VALUES (-6); +INSERT INTO t2 (i) VALUES (-5); +INSERT INTO t2 (i) VALUES (-4); +COMMIT; +[connection master] +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:t1, slave:t1] +[connection slave] +include/stop_slave_io.inc +include/start_slave_io.inc +[connection slave] +include/gtid_step_assert.inc [count=6, only_count=0] +[connection master] +INSERT INTO t1 (info) VALUE ('Insert data rotating master binlog between two transactions'); +BEGIN; +INSERT INTO t2 (i) VALUES (-3); +INSERT INTO t2 (i) VALUES (-2); +COMMIT; +FLUSH LOGS; +INSERT INTO t1 (info) VALUE ('After FLUSH LOGS at master'); +BEGIN; +INSERT INTO t2 (i) VALUES (-1); +INSERT INTO t2 (i) VALUES (0); +COMMIT; +[connection master] +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:t1, slave:t1] +[connection slave] +include/stop_slave_io.inc +include/start_slave_io.inc +[connection slave] +include/gtid_step_assert.inc [count=6, only_count=0] +[connection slave] +[connection master] +INSERT INTO t1 (info) VALUES ('stop_io_after_reading_gtid_log_event'); +include/sync_slave_io_with_master.inc +# Adding debug point 'stop_io_after_reading_gtid_log_event' to @@GLOBAL.debug +[connection master] +BEGIN; +INSERT INTO t2 VALUES (100 * 1 + 1); +SET @val= 100 * 1 + 2; +INSERT INTO t2 VALUES (@val); +COMMIT; +[connection slave] +include/wait_for_slave_io_to_stop.inc +# Removing debug point 'stop_io_after_reading_gtid_log_event' from @@GLOBAL.debug +include/sync_slave_sql_with_io.inc +include/gtid_step_assert.inc [count=1, only_count=0] +[connection master] +INSERT INTO t2 VALUES (100 * 1 + 3); +[connection slave] +include/start_slave_io.inc +[connection master] +include/sync_slave_sql_with_master.inc +include/gtid_step_assert.inc [count=3, only_count=0] +[connection slave] +[connection master] +INSERT INTO t1 (info) VALUES ('stop_io_after_reading_query_log_event'); +include/sync_slave_io_with_master.inc +# Adding debug point 'stop_io_after_reading_query_log_event' to @@GLOBAL.debug +[connection master] +BEGIN; +INSERT INTO t2 VALUES (100 * 2 + 1); +SET @val= 100 * 2 + 2; +INSERT INTO t2 VALUES (@val); +COMMIT; +[connection slave] +include/wait_for_slave_io_to_stop.inc +# Removing debug point 'stop_io_after_reading_query_log_event' from @@GLOBAL.debug +include/sync_slave_sql_with_io.inc +include/gtid_step_assert.inc [count=1, only_count=0] +[connection master] +INSERT INTO t2 VALUES (100 * 2 + 3); +[connection slave] +include/start_slave_io.inc +[connection master] +include/sync_slave_sql_with_master.inc +include/gtid_step_assert.inc [count=3, only_count=0] +[connection slave] +[connection master] +INSERT INTO t1 (info) VALUES ('stop_io_after_reading_user_var_log_event'); +include/sync_slave_io_with_master.inc +# Adding debug point 'stop_io_after_reading_user_var_log_event' to @@GLOBAL.debug +[connection master] +BEGIN; +INSERT INTO t2 VALUES (100 * 3 + 1); +SET @val= 100 * 3 + 2; +INSERT INTO t2 VALUES (@val); +COMMIT; +[connection slave] +include/wait_for_slave_io_to_stop.inc +# Removing debug point 'stop_io_after_reading_user_var_log_event' from @@GLOBAL.debug +include/sync_slave_sql_with_io.inc +include/gtid_step_assert.inc [count=2, only_count=0] +[connection master] +INSERT INTO t2 VALUES (100 * 3 + 3); +[connection slave] +include/start_slave_io.inc +[connection master] +include/sync_slave_sql_with_master.inc +include/gtid_step_assert.inc [count=2, only_count=0] +[connection master] +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:t1, slave:t1] +[connection master] +DROP TABLE t1,t2; +include/sync_slave_sql_with_master.inc +# Using InnoDB storage engine +## Running the test with the SQL thread stopped +[connection slave] +include/stop_slave_sql.inc +[connection slave] +[connection master] +[connection slave] +include/gtid_step_reset_on_retrieved.inc +[connection master] +CREATE TABLE t1 (i INT NOT NULL AUTO_INCREMENT PRIMARY KEY, info VARCHAR(64)) ENGINE=INNODB; +CREATE TABLE t2 (i INT) ENGINE=INNODB; +INSERT INTO t1 (info) VALUE ('Insert data without splitting transactions in the relay log'); +BEGIN; +INSERT INTO t2 (i) VALUES (-6); +INSERT INTO t2 (i) VALUES (-5); +INSERT INTO t2 (i) VALUES (-4); +COMMIT; +[connection master] +include/sync_slave_io_with_master.inc +[connection slave] +include/stop_slave_io.inc +include/start_slave_io.inc +[connection slave] +include/gtid_step_assert_on_retrieved.inc [count=4, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection master] +INSERT INTO t1 (info) VALUE ('Insert data rotating master binlog between two transactions'); +BEGIN; +INSERT INTO t2 (i) VALUES (-3); +INSERT INTO t2 (i) VALUES (-2); +COMMIT; +FLUSH LOGS; +INSERT INTO t1 (info) VALUE ('After FLUSH LOGS at master'); +BEGIN; +INSERT INTO t2 (i) VALUES (-1); +INSERT INTO t2 (i) VALUES (0); +COMMIT; +[connection master] +include/sync_slave_io_with_master.inc +[connection slave] +include/stop_slave_io.inc +include/start_slave_io.inc +[connection slave] +include/gtid_step_assert_on_retrieved.inc [count=4, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection slave] +[connection master] +INSERT INTO t1 (info) VALUES ('stop_io_after_reading_gtid_log_event'); +include/sync_slave_io_with_master.inc +# Adding debug point 'stop_io_after_reading_gtid_log_event' to @@GLOBAL.debug +[connection master] +BEGIN; +INSERT INTO t2 VALUES (100 * 1 + 1); +SET @val= 100 * 1 + 2; +INSERT INTO t2 VALUES (@val); +COMMIT; +[connection slave] +include/wait_for_slave_io_to_stop.inc +# Removing debug point 'stop_io_after_reading_gtid_log_event' from @@GLOBAL.debug +include/gtid_step_assert_on_retrieved.inc [count=1, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection master] +INSERT INTO t2 VALUES (100 * 1 + 3); +[connection slave] +include/start_slave_io.inc +[connection master] +include/sync_slave_io_with_master.inc +include/gtid_step_assert_on_retrieved.inc [count=2, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection slave] +[connection master] +INSERT INTO t1 (info) VALUES ('stop_io_after_reading_query_log_event'); +include/sync_slave_io_with_master.inc +# Adding debug point 'stop_io_after_reading_query_log_event' to @@GLOBAL.debug +[connection master] +BEGIN; +INSERT INTO t2 VALUES (100 * 2 + 1); +SET @val= 100 * 2 + 2; +INSERT INTO t2 VALUES (@val); +COMMIT; +[connection slave] +include/wait_for_slave_io_to_stop.inc +# Removing debug point 'stop_io_after_reading_query_log_event' from @@GLOBAL.debug +include/gtid_step_assert_on_retrieved.inc [count=1, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection master] +INSERT INTO t2 VALUES (100 * 2 + 3); +[connection slave] +include/start_slave_io.inc +[connection master] +include/sync_slave_io_with_master.inc +include/gtid_step_assert_on_retrieved.inc [count=2, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection slave] +[connection master] +INSERT INTO t1 (info) VALUES ('stop_io_after_reading_user_var_log_event'); +include/sync_slave_io_with_master.inc +# Adding debug point 'stop_io_after_reading_user_var_log_event' to @@GLOBAL.debug +[connection master] +BEGIN; +INSERT INTO t2 VALUES (100 * 3 + 1); +SET @val= 100 * 3 + 2; +INSERT INTO t2 VALUES (@val); +COMMIT; +[connection slave] +include/wait_for_slave_io_to_stop.inc +# Removing debug point 'stop_io_after_reading_user_var_log_event' from @@GLOBAL.debug +include/gtid_step_assert_on_retrieved.inc [count=1, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection master] +INSERT INTO t2 VALUES (100 * 3 + 3); +[connection slave] +include/start_slave_io.inc +[connection master] +include/sync_slave_io_with_master.inc +include/gtid_step_assert_on_retrieved.inc [count=2, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection slave] +[connection master] +INSERT INTO t1 (info) VALUES ('stop_io_after_reading_xid_log_event'); +include/sync_slave_io_with_master.inc +# Adding debug point 'stop_io_after_reading_xid_log_event' to @@GLOBAL.debug +[connection master] +BEGIN; +INSERT INTO t2 VALUES (100 * 4 + 1); +SET @val= 100 * 4 + 2; +INSERT INTO t2 VALUES (@val); +COMMIT; +[connection slave] +include/wait_for_slave_io_to_stop.inc +# Removing debug point 'stop_io_after_reading_xid_log_event' from @@GLOBAL.debug +include/gtid_step_assert_on_retrieved.inc [count=2, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection master] +INSERT INTO t2 VALUES (100 * 4 + 3); +[connection slave] +include/start_slave_io.inc +[connection master] +include/sync_slave_io_with_master.inc +include/gtid_step_assert_on_retrieved.inc [count=1, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection master] +DROP TABLE t1,t2; +## Starting and syncing the SQL thread before next round +[connection slave] +include/start_slave_sql.inc +[connection master] +include/sync_slave_sql_with_master.inc +## Running the test with the SQL thread started +[connection slave] +[connection master] +[connection slave] +include/gtid_step_reset.inc +[connection master] +CREATE TABLE t1 (i INT NOT NULL AUTO_INCREMENT PRIMARY KEY, info VARCHAR(64)) ENGINE=INNODB; +CREATE TABLE t2 (i INT) ENGINE=INNODB; +INSERT INTO t1 (info) VALUE ('Insert data without splitting transactions in the relay log'); +BEGIN; +INSERT INTO t2 (i) VALUES (-6); +INSERT INTO t2 (i) VALUES (-5); +INSERT INTO t2 (i) VALUES (-4); +COMMIT; +[connection master] +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:t1, slave:t1] +[connection slave] +include/stop_slave_io.inc +include/start_slave_io.inc +[connection slave] +include/gtid_step_assert.inc [count=4, only_count=0] +[connection master] +INSERT INTO t1 (info) VALUE ('Insert data rotating master binlog between two transactions'); +BEGIN; +INSERT INTO t2 (i) VALUES (-3); +INSERT INTO t2 (i) VALUES (-2); +COMMIT; +FLUSH LOGS; +INSERT INTO t1 (info) VALUE ('After FLUSH LOGS at master'); +BEGIN; +INSERT INTO t2 (i) VALUES (-1); +INSERT INTO t2 (i) VALUES (0); +COMMIT; +[connection master] +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:t1, slave:t1] +[connection slave] +include/stop_slave_io.inc +include/start_slave_io.inc +[connection slave] +include/gtid_step_assert.inc [count=4, only_count=0] +[connection slave] +[connection master] +INSERT INTO t1 (info) VALUES ('stop_io_after_reading_gtid_log_event'); +include/sync_slave_io_with_master.inc +# Adding debug point 'stop_io_after_reading_gtid_log_event' to @@GLOBAL.debug +[connection master] +BEGIN; +INSERT INTO t2 VALUES (100 * 1 + 1); +SET @val= 100 * 1 + 2; +INSERT INTO t2 VALUES (@val); +COMMIT; +[connection slave] +include/wait_for_slave_io_to_stop.inc +# Removing debug point 'stop_io_after_reading_gtid_log_event' from @@GLOBAL.debug +include/sync_slave_sql_with_io.inc +include/gtid_step_assert.inc [count=1, only_count=0] +[connection master] +INSERT INTO t2 VALUES (100 * 1 + 3); +[connection slave] +include/start_slave_io.inc +[connection master] +include/sync_slave_sql_with_master.inc +include/gtid_step_assert.inc [count=2, only_count=0] +[connection slave] +[connection master] +INSERT INTO t1 (info) VALUES ('stop_io_after_reading_query_log_event'); +include/sync_slave_io_with_master.inc +# Adding debug point 'stop_io_after_reading_query_log_event' to @@GLOBAL.debug +[connection master] +BEGIN; +INSERT INTO t2 VALUES (100 * 2 + 1); +SET @val= 100 * 2 + 2; +INSERT INTO t2 VALUES (@val); +COMMIT; +[connection slave] +include/wait_for_slave_io_to_stop.inc +# Removing debug point 'stop_io_after_reading_query_log_event' from @@GLOBAL.debug +include/sync_slave_sql_with_io.inc +include/gtid_step_assert.inc [count=1, only_count=0] +[connection master] +INSERT INTO t2 VALUES (100 * 2 + 3); +[connection slave] +include/start_slave_io.inc +[connection master] +include/sync_slave_sql_with_master.inc +include/gtid_step_assert.inc [count=2, only_count=0] +[connection slave] +[connection master] +INSERT INTO t1 (info) VALUES ('stop_io_after_reading_user_var_log_event'); +include/sync_slave_io_with_master.inc +# Adding debug point 'stop_io_after_reading_user_var_log_event' to @@GLOBAL.debug +[connection master] +BEGIN; +INSERT INTO t2 VALUES (100 * 3 + 1); +SET @val= 100 * 3 + 2; +INSERT INTO t2 VALUES (@val); +COMMIT; +[connection slave] +include/wait_for_slave_io_to_stop.inc +# Removing debug point 'stop_io_after_reading_user_var_log_event' from @@GLOBAL.debug +include/sync_slave_sql_with_io.inc +include/gtid_step_assert.inc [count=1, only_count=0] +[connection master] +INSERT INTO t2 VALUES (100 * 3 + 3); +[connection slave] +include/start_slave_io.inc +[connection master] +include/sync_slave_sql_with_master.inc +include/gtid_step_assert.inc [count=2, only_count=0] +[connection slave] +[connection master] +INSERT INTO t1 (info) VALUES ('stop_io_after_reading_xid_log_event'); +include/sync_slave_io_with_master.inc +# Adding debug point 'stop_io_after_reading_xid_log_event' to @@GLOBAL.debug +[connection master] +BEGIN; +INSERT INTO t2 VALUES (100 * 4 + 1); +SET @val= 100 * 4 + 2; +INSERT INTO t2 VALUES (@val); +COMMIT; +[connection slave] +include/wait_for_slave_io_to_stop.inc +# Removing debug point 'stop_io_after_reading_xid_log_event' from @@GLOBAL.debug +include/sync_slave_sql_with_io.inc +include/gtid_step_assert.inc [count=2, only_count=0] +[connection master] +INSERT INTO t2 VALUES (100 * 4 + 3); +[connection slave] +include/start_slave_io.inc +[connection master] +include/sync_slave_sql_with_master.inc +include/gtid_step_assert.inc [count=1, only_count=0] +[connection master] +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:t1, slave:t1] +[connection master] +DROP TABLE t1,t2; +include/sync_slave_sql_with_master.inc +[connection slave] +include/stop_slave.inc +RESET MASTER; +RESET SLAVE; +[connection master] +RESET MASTER; +[connection slave] +CHANGE MASTER TO MASTER_AUTO_POSITION= 0; +include/start_slave.inc +# Using MyISAM storage engine without auto positioning +## Running the test with the SQL thread stopped +[connection slave] +include/stop_slave_sql.inc +[connection slave] +[connection master] +[connection slave] +include/gtid_step_reset_on_retrieved.inc +[connection master] +CREATE TABLE t1 (i INT NOT NULL AUTO_INCREMENT PRIMARY KEY, info VARCHAR(64)) ENGINE=MYISAM; +CREATE TABLE t2 (i INT) ENGINE=MYISAM; +INSERT INTO t1 (info) VALUE ('Insert data without splitting transactions in the relay log'); +BEGIN; +INSERT INTO t2 (i) VALUES (-6); +INSERT INTO t2 (i) VALUES (-5); +INSERT INTO t2 (i) VALUES (-4); +COMMIT; +[connection master] +include/sync_slave_io_with_master.inc +[connection slave] +include/stop_slave_io.inc +include/start_slave_io.inc +[connection slave] +include/gtid_step_assert_on_retrieved.inc [count=6, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection master] +INSERT INTO t1 (info) VALUE ('Insert data rotating master binlog between two transactions'); +BEGIN; +INSERT INTO t2 (i) VALUES (-3); +INSERT INTO t2 (i) VALUES (-2); +COMMIT; +FLUSH LOGS; +INSERT INTO t1 (info) VALUE ('After FLUSH LOGS at master'); +BEGIN; +INSERT INTO t2 (i) VALUES (-1); +INSERT INTO t2 (i) VALUES (0); +COMMIT; +[connection master] +include/sync_slave_io_with_master.inc +[connection slave] +include/stop_slave_io.inc +include/start_slave_io.inc +[connection slave] +include/gtid_step_assert_on_retrieved.inc [count=6, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection slave] +[connection master] +INSERT INTO t1 (info) VALUES ('stop_io_after_reading_gtid_log_event'); +include/sync_slave_io_with_master.inc +# Adding debug point 'stop_io_after_reading_gtid_log_event' to @@GLOBAL.debug +[connection master] +BEGIN; +INSERT INTO t2 VALUES (100 * 1 + 1); +SET @val= 100 * 1 + 2; +INSERT INTO t2 VALUES (@val); +COMMIT; +[connection slave] +include/wait_for_slave_io_to_stop.inc +# Removing debug point 'stop_io_after_reading_gtid_log_event' from @@GLOBAL.debug +include/gtid_step_assert_on_retrieved.inc [count=1, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection master] +INSERT INTO t2 VALUES (100 * 1 + 3); +[connection slave] +include/start_slave_io.inc +[connection master] +include/sync_slave_io_with_master.inc +include/gtid_step_assert_on_retrieved.inc [count=3, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection slave] +[connection master] +INSERT INTO t1 (info) VALUES ('stop_io_after_reading_query_log_event'); +include/sync_slave_io_with_master.inc +# Adding debug point 'stop_io_after_reading_query_log_event' to @@GLOBAL.debug +[connection master] +BEGIN; +INSERT INTO t2 VALUES (100 * 2 + 1); +SET @val= 100 * 2 + 2; +INSERT INTO t2 VALUES (@val); +COMMIT; +[connection slave] +include/wait_for_slave_io_to_stop.inc +# Removing debug point 'stop_io_after_reading_query_log_event' from @@GLOBAL.debug +include/gtid_step_assert_on_retrieved.inc [count=1, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection master] +INSERT INTO t2 VALUES (100 * 2 + 3); +[connection slave] +include/start_slave_io.inc +[connection master] +include/sync_slave_io_with_master.inc +include/gtid_step_assert_on_retrieved.inc [count=3, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection slave] +[connection master] +INSERT INTO t1 (info) VALUES ('stop_io_after_reading_user_var_log_event'); +include/sync_slave_io_with_master.inc +# Adding debug point 'stop_io_after_reading_user_var_log_event' to @@GLOBAL.debug +[connection master] +BEGIN; +INSERT INTO t2 VALUES (100 * 3 + 1); +SET @val= 100 * 3 + 2; +INSERT INTO t2 VALUES (@val); +COMMIT; +[connection slave] +include/wait_for_slave_io_to_stop.inc +# Removing debug point 'stop_io_after_reading_user_var_log_event' from @@GLOBAL.debug +include/gtid_step_assert_on_retrieved.inc [count=2, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection master] +INSERT INTO t2 VALUES (100 * 3 + 3); +[connection slave] +include/start_slave_io.inc +[connection master] +include/sync_slave_io_with_master.inc +include/gtid_step_assert_on_retrieved.inc [count=2, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection master] +DROP TABLE t1,t2; +## Starting and syncing the SQL thread before next round +[connection slave] +include/start_slave_sql.inc +[connection master] +include/sync_slave_sql_with_master.inc +## Running the test with the SQL thread started +[connection slave] +[connection master] +[connection slave] +include/gtid_step_reset.inc +[connection master] +CREATE TABLE t1 (i INT NOT NULL AUTO_INCREMENT PRIMARY KEY, info VARCHAR(64)) ENGINE=MYISAM; +CREATE TABLE t2 (i INT) ENGINE=MYISAM; +INSERT INTO t1 (info) VALUE ('Insert data without splitting transactions in the relay log'); +BEGIN; +INSERT INTO t2 (i) VALUES (-6); +INSERT INTO t2 (i) VALUES (-5); +INSERT INTO t2 (i) VALUES (-4); +COMMIT; +[connection master] +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:t1, slave:t1] +[connection slave] +include/stop_slave_io.inc +include/start_slave_io.inc +[connection slave] +include/gtid_step_assert.inc [count=6, only_count=0] +[connection master] +INSERT INTO t1 (info) VALUE ('Insert data rotating master binlog between two transactions'); +BEGIN; +INSERT INTO t2 (i) VALUES (-3); +INSERT INTO t2 (i) VALUES (-2); +COMMIT; +FLUSH LOGS; +INSERT INTO t1 (info) VALUE ('After FLUSH LOGS at master'); +BEGIN; +INSERT INTO t2 (i) VALUES (-1); +INSERT INTO t2 (i) VALUES (0); +COMMIT; +[connection master] +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:t1, slave:t1] +[connection slave] +include/stop_slave_io.inc +include/start_slave_io.inc +[connection slave] +include/gtid_step_assert.inc [count=6, only_count=0] +[connection slave] +[connection master] +INSERT INTO t1 (info) VALUES ('stop_io_after_reading_gtid_log_event'); +include/sync_slave_io_with_master.inc +# Adding debug point 'stop_io_after_reading_gtid_log_event' to @@GLOBAL.debug +[connection master] +BEGIN; +INSERT INTO t2 VALUES (100 * 1 + 1); +SET @val= 100 * 1 + 2; +INSERT INTO t2 VALUES (@val); +COMMIT; +[connection slave] +include/wait_for_slave_io_to_stop.inc +# Removing debug point 'stop_io_after_reading_gtid_log_event' from @@GLOBAL.debug +include/sync_slave_sql_with_io.inc +include/gtid_step_assert.inc [count=1, only_count=0] +[connection master] +INSERT INTO t2 VALUES (100 * 1 + 3); +[connection slave] +include/start_slave_io.inc +[connection master] +include/sync_slave_sql_with_master.inc +include/gtid_step_assert.inc [count=3, only_count=0] +[connection slave] +[connection master] +INSERT INTO t1 (info) VALUES ('stop_io_after_reading_query_log_event'); +include/sync_slave_io_with_master.inc +# Adding debug point 'stop_io_after_reading_query_log_event' to @@GLOBAL.debug +[connection master] +BEGIN; +INSERT INTO t2 VALUES (100 * 2 + 1); +SET @val= 100 * 2 + 2; +INSERT INTO t2 VALUES (@val); +COMMIT; +[connection slave] +include/wait_for_slave_io_to_stop.inc +# Removing debug point 'stop_io_after_reading_query_log_event' from @@GLOBAL.debug +include/sync_slave_sql_with_io.inc +include/gtid_step_assert.inc [count=1, only_count=0] +[connection master] +INSERT INTO t2 VALUES (100 * 2 + 3); +[connection slave] +include/start_slave_io.inc +[connection master] +include/sync_slave_sql_with_master.inc +include/gtid_step_assert.inc [count=3, only_count=0] +[connection slave] +[connection master] +INSERT INTO t1 (info) VALUES ('stop_io_after_reading_user_var_log_event'); +include/sync_slave_io_with_master.inc +# Adding debug point 'stop_io_after_reading_user_var_log_event' to @@GLOBAL.debug +[connection master] +BEGIN; +INSERT INTO t2 VALUES (100 * 3 + 1); +SET @val= 100 * 3 + 2; +INSERT INTO t2 VALUES (@val); +COMMIT; +[connection slave] +include/wait_for_slave_io_to_stop.inc +# Removing debug point 'stop_io_after_reading_user_var_log_event' from @@GLOBAL.debug +include/sync_slave_sql_with_io.inc +include/gtid_step_assert.inc [count=2, only_count=0] +[connection master] +INSERT INTO t2 VALUES (100 * 3 + 3); +[connection slave] +include/start_slave_io.inc +[connection master] +include/sync_slave_sql_with_master.inc +include/gtid_step_assert.inc [count=2, only_count=0] +[connection master] +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:t1, slave:t1] +[connection master] +DROP TABLE t1,t2; +include/sync_slave_sql_with_master.inc +# Using InnoDB storage engine without auto positioning +## Running the test with the SQL thread stopped +[connection slave] +include/stop_slave_sql.inc +[connection slave] +[connection master] +[connection slave] +include/gtid_step_reset_on_retrieved.inc +[connection master] +CREATE TABLE t1 (i INT NOT NULL AUTO_INCREMENT PRIMARY KEY, info VARCHAR(64)) ENGINE=INNODB; +CREATE TABLE t2 (i INT) ENGINE=INNODB; +INSERT INTO t1 (info) VALUE ('Insert data without splitting transactions in the relay log'); +BEGIN; +INSERT INTO t2 (i) VALUES (-6); +INSERT INTO t2 (i) VALUES (-5); +INSERT INTO t2 (i) VALUES (-4); +COMMIT; +[connection master] +include/sync_slave_io_with_master.inc +[connection slave] +include/stop_slave_io.inc +include/start_slave_io.inc +[connection slave] +include/gtid_step_assert_on_retrieved.inc [count=4, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection master] +INSERT INTO t1 (info) VALUE ('Insert data rotating master binlog between two transactions'); +BEGIN; +INSERT INTO t2 (i) VALUES (-3); +INSERT INTO t2 (i) VALUES (-2); +COMMIT; +FLUSH LOGS; +INSERT INTO t1 (info) VALUE ('After FLUSH LOGS at master'); +BEGIN; +INSERT INTO t2 (i) VALUES (-1); +INSERT INTO t2 (i) VALUES (0); +COMMIT; +[connection master] +include/sync_slave_io_with_master.inc +[connection slave] +include/stop_slave_io.inc +include/start_slave_io.inc +[connection slave] +include/gtid_step_assert_on_retrieved.inc [count=4, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection slave] +[connection master] +INSERT INTO t1 (info) VALUES ('stop_io_after_reading_gtid_log_event'); +include/sync_slave_io_with_master.inc +# Adding debug point 'stop_io_after_reading_gtid_log_event' to @@GLOBAL.debug +[connection master] +BEGIN; +INSERT INTO t2 VALUES (100 * 1 + 1); +SET @val= 100 * 1 + 2; +INSERT INTO t2 VALUES (@val); +COMMIT; +[connection slave] +include/wait_for_slave_io_to_stop.inc +# Removing debug point 'stop_io_after_reading_gtid_log_event' from @@GLOBAL.debug +include/gtid_step_assert_on_retrieved.inc [count=1, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection master] +INSERT INTO t2 VALUES (100 * 1 + 3); +[connection slave] +include/start_slave_io.inc +[connection master] +include/sync_slave_io_with_master.inc +include/gtid_step_assert_on_retrieved.inc [count=2, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection slave] +[connection master] +INSERT INTO t1 (info) VALUES ('stop_io_after_reading_query_log_event'); +include/sync_slave_io_with_master.inc +# Adding debug point 'stop_io_after_reading_query_log_event' to @@GLOBAL.debug +[connection master] +BEGIN; +INSERT INTO t2 VALUES (100 * 2 + 1); +SET @val= 100 * 2 + 2; +INSERT INTO t2 VALUES (@val); +COMMIT; +[connection slave] +include/wait_for_slave_io_to_stop.inc +# Removing debug point 'stop_io_after_reading_query_log_event' from @@GLOBAL.debug +include/gtid_step_assert_on_retrieved.inc [count=1, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection master] +INSERT INTO t2 VALUES (100 * 2 + 3); +[connection slave] +include/start_slave_io.inc +[connection master] +include/sync_slave_io_with_master.inc +include/gtid_step_assert_on_retrieved.inc [count=2, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection slave] +[connection master] +INSERT INTO t1 (info) VALUES ('stop_io_after_reading_user_var_log_event'); +include/sync_slave_io_with_master.inc +# Adding debug point 'stop_io_after_reading_user_var_log_event' to @@GLOBAL.debug +[connection master] +BEGIN; +INSERT INTO t2 VALUES (100 * 3 + 1); +SET @val= 100 * 3 + 2; +INSERT INTO t2 VALUES (@val); +COMMIT; +[connection slave] +include/wait_for_slave_io_to_stop.inc +# Removing debug point 'stop_io_after_reading_user_var_log_event' from @@GLOBAL.debug +include/gtid_step_assert_on_retrieved.inc [count=1, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection master] +INSERT INTO t2 VALUES (100 * 3 + 3); +[connection slave] +include/start_slave_io.inc +[connection master] +include/sync_slave_io_with_master.inc +include/gtid_step_assert_on_retrieved.inc [count=2, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection slave] +[connection master] +INSERT INTO t1 (info) VALUES ('stop_io_after_reading_xid_log_event'); +include/sync_slave_io_with_master.inc +# Adding debug point 'stop_io_after_reading_xid_log_event' to @@GLOBAL.debug +[connection master] +BEGIN; +INSERT INTO t2 VALUES (100 * 4 + 1); +SET @val= 100 * 4 + 2; +INSERT INTO t2 VALUES (@val); +COMMIT; +[connection slave] +include/wait_for_slave_io_to_stop.inc +# Removing debug point 'stop_io_after_reading_xid_log_event' from @@GLOBAL.debug +include/gtid_step_assert_on_retrieved.inc [count=2, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection master] +INSERT INTO t2 VALUES (100 * 4 + 3); +[connection slave] +include/start_slave_io.inc +[connection master] +include/sync_slave_io_with_master.inc +include/gtid_step_assert_on_retrieved.inc [count=1, only_count=0] +Asserting based on SHOW SLAVE STATUS(Retrieved_Gtid_Set) +[connection master] +DROP TABLE t1,t2; +## Starting and syncing the SQL thread before next round +[connection slave] +include/start_slave_sql.inc +[connection master] +include/sync_slave_sql_with_master.inc +## Running the test with the SQL thread started +[connection slave] +[connection master] +[connection slave] +include/gtid_step_reset.inc +[connection master] +CREATE TABLE t1 (i INT NOT NULL AUTO_INCREMENT PRIMARY KEY, info VARCHAR(64)) ENGINE=INNODB; +CREATE TABLE t2 (i INT) ENGINE=INNODB; +INSERT INTO t1 (info) VALUE ('Insert data without splitting transactions in the relay log'); +BEGIN; +INSERT INTO t2 (i) VALUES (-6); +INSERT INTO t2 (i) VALUES (-5); +INSERT INTO t2 (i) VALUES (-4); +COMMIT; +[connection master] +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:t1, slave:t1] +[connection slave] +include/stop_slave_io.inc +include/start_slave_io.inc +[connection slave] +include/gtid_step_assert.inc [count=4, only_count=0] +[connection master] +INSERT INTO t1 (info) VALUE ('Insert data rotating master binlog between two transactions'); +BEGIN; +INSERT INTO t2 (i) VALUES (-3); +INSERT INTO t2 (i) VALUES (-2); +COMMIT; +FLUSH LOGS; +INSERT INTO t1 (info) VALUE ('After FLUSH LOGS at master'); +BEGIN; +INSERT INTO t2 (i) VALUES (-1); +INSERT INTO t2 (i) VALUES (0); +COMMIT; +[connection master] +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:t1, slave:t1] +[connection slave] +include/stop_slave_io.inc +include/start_slave_io.inc +[connection slave] +include/gtid_step_assert.inc [count=4, only_count=0] +[connection slave] +[connection master] +INSERT INTO t1 (info) VALUES ('stop_io_after_reading_gtid_log_event'); +include/sync_slave_io_with_master.inc +# Adding debug point 'stop_io_after_reading_gtid_log_event' to @@GLOBAL.debug +[connection master] +BEGIN; +INSERT INTO t2 VALUES (100 * 1 + 1); +SET @val= 100 * 1 + 2; +INSERT INTO t2 VALUES (@val); +COMMIT; +[connection slave] +include/wait_for_slave_io_to_stop.inc +# Removing debug point 'stop_io_after_reading_gtid_log_event' from @@GLOBAL.debug +include/sync_slave_sql_with_io.inc +include/gtid_step_assert.inc [count=1, only_count=0] +[connection master] +INSERT INTO t2 VALUES (100 * 1 + 3); +[connection slave] +include/start_slave_io.inc +[connection master] +include/sync_slave_sql_with_master.inc +include/gtid_step_assert.inc [count=2, only_count=0] +[connection slave] +[connection master] +INSERT INTO t1 (info) VALUES ('stop_io_after_reading_query_log_event'); +include/sync_slave_io_with_master.inc +# Adding debug point 'stop_io_after_reading_query_log_event' to @@GLOBAL.debug +[connection master] +BEGIN; +INSERT INTO t2 VALUES (100 * 2 + 1); +SET @val= 100 * 2 + 2; +INSERT INTO t2 VALUES (@val); +COMMIT; +[connection slave] +include/wait_for_slave_io_to_stop.inc +# Removing debug point 'stop_io_after_reading_query_log_event' from @@GLOBAL.debug +include/sync_slave_sql_with_io.inc +include/gtid_step_assert.inc [count=1, only_count=0] +[connection master] +INSERT INTO t2 VALUES (100 * 2 + 3); +[connection slave] +include/start_slave_io.inc +[connection master] +include/sync_slave_sql_with_master.inc +include/gtid_step_assert.inc [count=2, only_count=0] +[connection slave] +[connection master] +INSERT INTO t1 (info) VALUES ('stop_io_after_reading_user_var_log_event'); +include/sync_slave_io_with_master.inc +# Adding debug point 'stop_io_after_reading_user_var_log_event' to @@GLOBAL.debug +[connection master] +BEGIN; +INSERT INTO t2 VALUES (100 * 3 + 1); +SET @val= 100 * 3 + 2; +INSERT INTO t2 VALUES (@val); +COMMIT; +[connection slave] +include/wait_for_slave_io_to_stop.inc +# Removing debug point 'stop_io_after_reading_user_var_log_event' from @@GLOBAL.debug +include/sync_slave_sql_with_io.inc +include/gtid_step_assert.inc [count=1, only_count=0] +[connection master] +INSERT INTO t2 VALUES (100 * 3 + 3); +[connection slave] +include/start_slave_io.inc +[connection master] +include/sync_slave_sql_with_master.inc +include/gtid_step_assert.inc [count=2, only_count=0] +[connection slave] +[connection master] +INSERT INTO t1 (info) VALUES ('stop_io_after_reading_xid_log_event'); +include/sync_slave_io_with_master.inc +# Adding debug point 'stop_io_after_reading_xid_log_event' to @@GLOBAL.debug +[connection master] +BEGIN; +INSERT INTO t2 VALUES (100 * 4 + 1); +SET @val= 100 * 4 + 2; +INSERT INTO t2 VALUES (@val); +COMMIT; +[connection slave] +include/wait_for_slave_io_to_stop.inc +# Removing debug point 'stop_io_after_reading_xid_log_event' from @@GLOBAL.debug +include/sync_slave_sql_with_io.inc +include/gtid_step_assert.inc [count=2, only_count=0] +[connection master] +INSERT INTO t2 VALUES (100 * 4 + 3); +[connection slave] +include/start_slave_io.inc +[connection master] +include/sync_slave_sql_with_master.inc +include/gtid_step_assert.inc [count=1, only_count=0] +[connection master] +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:t1, slave:t1] +[connection master] +DROP TABLE t1,t2; +include/sync_slave_sql_with_master.inc +[connection slave] +include/stop_slave.inc +CHANGE MASTER TO MASTER_AUTO_POSITION= 1; +include/start_slave.inc +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/rpl_typeconv.result b/mysql-test/suite/rpl_encryption/r/rpl_typeconv.result new file mode 100644 index 000000000000..8caf1f98889d --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_typeconv.result @@ -0,0 +1,545 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +set @saved_slave_type_conversions = @@global.slave_type_conversions; +CREATE TABLE type_conversions ( +TestNo INT AUTO_INCREMENT PRIMARY KEY, +Source TEXT, +Target TEXT, +Flags TEXT, +On_Master TEXT, +On_Slave TEXT, +Expected TEXT, +Compare INT, +Error TEXT); +SELECT @@global.slave_type_conversions; +@@global.slave_type_conversions + +SET GLOBAL SLAVE_TYPE_CONVERSIONS=''; +SELECT @@global.slave_type_conversions; +@@global.slave_type_conversions + +SET GLOBAL SLAVE_TYPE_CONVERSIONS='ALL_NON_LOSSY'; +SELECT @@global.slave_type_conversions; +@@global.slave_type_conversions +ALL_NON_LOSSY +SET GLOBAL SLAVE_TYPE_CONVERSIONS='ALL_LOSSY'; +SELECT @@global.slave_type_conversions; +@@global.slave_type_conversions +ALL_LOSSY +SET GLOBAL SLAVE_TYPE_CONVERSIONS='ALL_LOSSY,ALL_NON_LOSSY'; +SELECT @@global.slave_type_conversions; +@@global.slave_type_conversions +ALL_LOSSY,ALL_NON_LOSSY +SET GLOBAL SLAVE_TYPE_CONVERSIONS='ALL_LOSSY,ALL_NON_LOSSY,NONEXISTING_BIT'; +ERROR 42000: Variable 'slave_type_conversions' can't be set to the value of 'NONEXISTING_BIT' +SELECT @@global.slave_type_conversions; +@@global.slave_type_conversions +ALL_LOSSY,ALL_NON_LOSSY +SET @@global.log_error_verbosity=1; +include/stop_slave.inc +include/start_slave.inc +SET GLOBAL SLAVE_TYPE_CONVERSIONS=''; +**** Running tests with @@SLAVE_TYPE_CONVERSIONS = '' **** +SET GLOBAL SLAVE_TYPE_CONVERSIONS='ALL_NON_LOSSY'; +**** Running tests with @@SLAVE_TYPE_CONVERSIONS = 'ALL_NON_LOSSY' **** +SET GLOBAL SLAVE_TYPE_CONVERSIONS='ALL_LOSSY'; +**** Running tests with @@SLAVE_TYPE_CONVERSIONS = 'ALL_LOSSY' **** +SET GLOBAL SLAVE_TYPE_CONVERSIONS='ALL_LOSSY,ALL_NON_LOSSY'; +**** Running tests with @@SLAVE_TYPE_CONVERSIONS = 'ALL_LOSSY,ALL_NON_LOSSY' **** +SET @@global.log_error_verbosity= SAVED_LOG_ERROR_VERBOSITY; +**** Result of conversions **** +Source_Type Target_Type All_Type_Conversion_Flags Value_On_Slave +TINYBLOB TINYBLOB +TINYBLOB BLOB +TINYBLOB MEDIUMBLOB +TINYBLOB LONGBLOB +BLOB TINYBLOB +BLOB BLOB +BLOB MEDIUMBLOB +BLOB LONGBLOB +MEDIUMBLOB TINYBLOB +MEDIUMBLOB BLOB +MEDIUMBLOB MEDIUMBLOB +MEDIUMBLOB LONGBLOB +LONGBLOB TINYBLOB +LONGBLOB BLOB +LONGBLOB MEDIUMBLOB +LONGBLOB LONGBLOB +GEOMETRY BLOB +BLOB GEOMETRY +GEOMETRY GEOMETRY +BIT(1) BIT(1) +DATE DATE +ENUM('master',' ENUM('master',' +CHAR(10) ENUM('master',' +CHAR(10) SET('master','s +ENUM('master',' CHAR(10) +SET('master','s CHAR(10) +SET('master','s SET('master','s +SET('master','s SET('master','s +SET('0','1','2' SET('0','1','2' +SET('0','1','2' SET('0','1','2' +SET('0','1','2' SET('0','1','2' +SET('0','1','2' SET('0','1','2' +TINYINT TINYINT +TINYINT SMALLINT +TINYINT MEDIUMINT +TINYINT INT +TINYINT BIGINT +SMALLINT TINYINT +SMALLINT TINYINT +SMALLINT TINYINT UNSIGNE +SMALLINT SMALLINT +SMALLINT MEDIUMINT +SMALLINT INT +SMALLINT BIGINT +MEDIUMINT TINYINT +MEDIUMINT TINYINT +MEDIUMINT TINYINT UNSIGNE +MEDIUMINT SMALLINT +MEDIUMINT MEDIUMINT +MEDIUMINT INT +MEDIUMINT BIGINT +INT TINYINT +INT TINYINT +INT TINYINT UNSIGNE +INT SMALLINT +INT MEDIUMINT +INT INT +INT BIGINT +BIGINT TINYINT +BIGINT SMALLINT +BIGINT MEDIUMINT +BIGINT INT +BIGINT BIGINT +CHAR(20) CHAR(20) +CHAR(20) CHAR(30) +CHAR(20) CHAR(10) +CHAR(20) VARCHAR(20) +CHAR(20) VARCHAR(30) +CHAR(20) VARCHAR(10) +CHAR(20) TINYTEXT +CHAR(20) TEXT +CHAR(20) MEDIUMTEXT +CHAR(20) LONGTEXT +VARCHAR(20) VARCHAR(20) +VARCHAR(20) VARCHAR(30) +VARCHAR(20) VARCHAR(10) +VARCHAR(20) CHAR(30) +VARCHAR(20) CHAR(10) +VARCHAR(20) TINYTEXT +VARCHAR(20) TEXT +VARCHAR(20) MEDIUMTEXT +VARCHAR(20) LONGTEXT +VARCHAR(500) VARCHAR(500) +VARCHAR(500) VARCHAR(510) +VARCHAR(500) VARCHAR(255) +VARCHAR(500) TINYTEXT +VARCHAR(500) TEXT +VARCHAR(500) MEDIUMTEXT +VARCHAR(500) LONGTEXT +TINYTEXT VARCHAR(500) +TEXT VARCHAR(500) +MEDIUMTEXT VARCHAR(500) +LONGTEXT VARCHAR(500) +TINYTEXT CHAR(255) +TINYTEXT CHAR(250) +TEXT CHAR(255) +MEDIUMTEXT CHAR(255) +LONGTEXT CHAR(255) +TINYTEXT TINYTEXT +TINYTEXT TEXT +TEXT TINYTEXT +DECIMAL(10,5) DECIMAL(10,5) +DECIMAL(10,5) DECIMAL(10,6) +DECIMAL(10,5) DECIMAL(11,5) +DECIMAL(10,5) DECIMAL(11,6) +DECIMAL(10,5) DECIMAL(10,4) +DECIMAL(10,5) DECIMAL(9,5) +DECIMAL(10,5) DECIMAL(9,4) +FLOAT DECIMAL(10,5) +DOUBLE DECIMAL(10,5) +DECIMAL(10,5) FLOAT +DECIMAL(10,5) DOUBLE +FLOAT FLOAT +DOUBLE DOUBLE +FLOAT DOUBLE +DOUBLE FLOAT +BIT(5) BIT(5) +BIT(5) BIT(6) +BIT(6) BIT(5) +BIT(5) BIT(12) +BIT(12) BIT(5) +TINYBLOB TINYBLOB ALL_NON_LOSSY +TINYBLOB BLOB ALL_NON_LOSSY +TINYBLOB MEDIUMBLOB ALL_NON_LOSSY +TINYBLOB LONGBLOB ALL_NON_LOSSY +BLOB TINYBLOB ALL_NON_LOSSY +BLOB BLOB ALL_NON_LOSSY +BLOB MEDIUMBLOB ALL_NON_LOSSY +BLOB LONGBLOB ALL_NON_LOSSY +MEDIUMBLOB TINYBLOB ALL_NON_LOSSY +MEDIUMBLOB BLOB ALL_NON_LOSSY +MEDIUMBLOB MEDIUMBLOB ALL_NON_LOSSY +MEDIUMBLOB LONGBLOB ALL_NON_LOSSY +LONGBLOB TINYBLOB ALL_NON_LOSSY +LONGBLOB BLOB ALL_NON_LOSSY +LONGBLOB MEDIUMBLOB ALL_NON_LOSSY +LONGBLOB LONGBLOB ALL_NON_LOSSY +GEOMETRY BLOB ALL_NON_LOSSY +BLOB GEOMETRY ALL_NON_LOSSY +GEOMETRY GEOMETRY ALL_NON_LOSSY +BIT(1) BIT(1) ALL_NON_LOSSY +DATE DATE ALL_NON_LOSSY +ENUM('master',' ENUM('master',' ALL_NON_LOSSY +CHAR(10) ENUM('master',' ALL_NON_LOSSY +CHAR(10) SET('master','s ALL_NON_LOSSY +ENUM('master',' CHAR(10) ALL_NON_LOSSY +SET('master','s CHAR(10) ALL_NON_LOSSY +SET('master','s SET('master','s ALL_NON_LOSSY +SET('master','s SET('master','s ALL_NON_LOSSY +SET('0','1','2' SET('0','1','2' ALL_NON_LOSSY +SET('0','1','2' SET('0','1','2' ALL_NON_LOSSY +SET('0','1','2' SET('0','1','2' ALL_NON_LOSSY +SET('0','1','2' SET('0','1','2' ALL_NON_LOSSY +TINYINT TINYINT ALL_NON_LOSSY +TINYINT SMALLINT ALL_NON_LOSSY +TINYINT MEDIUMINT ALL_NON_LOSSY +TINYINT INT ALL_NON_LOSSY +TINYINT BIGINT ALL_NON_LOSSY +SMALLINT TINYINT ALL_NON_LOSSY +SMALLINT TINYINT ALL_NON_LOSSY +SMALLINT TINYINT UNSIGNE ALL_NON_LOSSY +SMALLINT SMALLINT ALL_NON_LOSSY +SMALLINT MEDIUMINT ALL_NON_LOSSY +SMALLINT INT ALL_NON_LOSSY +SMALLINT BIGINT ALL_NON_LOSSY +MEDIUMINT TINYINT ALL_NON_LOSSY +MEDIUMINT TINYINT ALL_NON_LOSSY +MEDIUMINT TINYINT UNSIGNE ALL_NON_LOSSY +MEDIUMINT SMALLINT ALL_NON_LOSSY +MEDIUMINT MEDIUMINT ALL_NON_LOSSY +MEDIUMINT INT ALL_NON_LOSSY +MEDIUMINT BIGINT ALL_NON_LOSSY +INT TINYINT ALL_NON_LOSSY +INT TINYINT ALL_NON_LOSSY +INT TINYINT UNSIGNE ALL_NON_LOSSY +INT SMALLINT ALL_NON_LOSSY +INT MEDIUMINT ALL_NON_LOSSY +INT INT ALL_NON_LOSSY +INT BIGINT ALL_NON_LOSSY +BIGINT TINYINT ALL_NON_LOSSY +BIGINT SMALLINT ALL_NON_LOSSY +BIGINT MEDIUMINT ALL_NON_LOSSY +BIGINT INT ALL_NON_LOSSY +BIGINT BIGINT ALL_NON_LOSSY +CHAR(20) CHAR(20) ALL_NON_LOSSY +CHAR(20) CHAR(30) ALL_NON_LOSSY +CHAR(20) CHAR(10) ALL_NON_LOSSY +CHAR(20) VARCHAR(20) ALL_NON_LOSSY +CHAR(20) VARCHAR(30) ALL_NON_LOSSY +CHAR(20) VARCHAR(10) ALL_NON_LOSSY +CHAR(20) TINYTEXT ALL_NON_LOSSY +CHAR(20) TEXT ALL_NON_LOSSY +CHAR(20) MEDIUMTEXT ALL_NON_LOSSY +CHAR(20) LONGTEXT ALL_NON_LOSSY +VARCHAR(20) VARCHAR(20) ALL_NON_LOSSY +VARCHAR(20) VARCHAR(30) ALL_NON_LOSSY +VARCHAR(20) VARCHAR(10) ALL_NON_LOSSY +VARCHAR(20) CHAR(30) ALL_NON_LOSSY +VARCHAR(20) CHAR(10) ALL_NON_LOSSY +VARCHAR(20) TINYTEXT ALL_NON_LOSSY +VARCHAR(20) TEXT ALL_NON_LOSSY +VARCHAR(20) MEDIUMTEXT ALL_NON_LOSSY +VARCHAR(20) LONGTEXT ALL_NON_LOSSY +VARCHAR(500) VARCHAR(500) ALL_NON_LOSSY +VARCHAR(500) VARCHAR(510) ALL_NON_LOSSY +VARCHAR(500) VARCHAR(255) ALL_NON_LOSSY +VARCHAR(500) TINYTEXT ALL_NON_LOSSY +VARCHAR(500) TEXT ALL_NON_LOSSY +VARCHAR(500) MEDIUMTEXT ALL_NON_LOSSY +VARCHAR(500) LONGTEXT ALL_NON_LOSSY +TINYTEXT VARCHAR(500) ALL_NON_LOSSY +TEXT VARCHAR(500) ALL_NON_LOSSY +MEDIUMTEXT VARCHAR(500) ALL_NON_LOSSY +LONGTEXT VARCHAR(500) ALL_NON_LOSSY +TINYTEXT CHAR(255) ALL_NON_LOSSY +TINYTEXT CHAR(250) ALL_NON_LOSSY +TEXT CHAR(255) ALL_NON_LOSSY +MEDIUMTEXT CHAR(255) ALL_NON_LOSSY +LONGTEXT CHAR(255) ALL_NON_LOSSY +TINYTEXT TINYTEXT ALL_NON_LOSSY +TINYTEXT TEXT ALL_NON_LOSSY +TEXT TINYTEXT ALL_NON_LOSSY +DECIMAL(10,5) DECIMAL(10,5) ALL_NON_LOSSY +DECIMAL(10,5) DECIMAL(10,6) ALL_NON_LOSSY +DECIMAL(10,5) DECIMAL(11,5) ALL_NON_LOSSY +DECIMAL(10,5) DECIMAL(11,6) ALL_NON_LOSSY +DECIMAL(10,5) DECIMAL(10,4) ALL_NON_LOSSY +DECIMAL(10,5) DECIMAL(9,5) ALL_NON_LOSSY +DECIMAL(10,5) DECIMAL(9,4) ALL_NON_LOSSY +FLOAT DECIMAL(10,5) ALL_NON_LOSSY +DOUBLE DECIMAL(10,5) ALL_NON_LOSSY +DECIMAL(10,5) FLOAT ALL_NON_LOSSY +DECIMAL(10,5) DOUBLE ALL_NON_LOSSY +FLOAT FLOAT ALL_NON_LOSSY +DOUBLE DOUBLE ALL_NON_LOSSY +FLOAT DOUBLE ALL_NON_LOSSY +DOUBLE FLOAT ALL_NON_LOSSY +BIT(5) BIT(5) ALL_NON_LOSSY +BIT(5) BIT(6) ALL_NON_LOSSY +BIT(6) BIT(5) ALL_NON_LOSSY +BIT(5) BIT(12) ALL_NON_LOSSY +BIT(12) BIT(5) ALL_NON_LOSSY +TINYBLOB TINYBLOB ALL_LOSSY +TINYBLOB BLOB ALL_LOSSY +TINYBLOB MEDIUMBLOB ALL_LOSSY +TINYBLOB LONGBLOB ALL_LOSSY +BLOB TINYBLOB ALL_LOSSY +BLOB BLOB ALL_LOSSY +BLOB MEDIUMBLOB ALL_LOSSY +BLOB LONGBLOB ALL_LOSSY +MEDIUMBLOB TINYBLOB ALL_LOSSY +MEDIUMBLOB BLOB ALL_LOSSY +MEDIUMBLOB MEDIUMBLOB ALL_LOSSY +MEDIUMBLOB LONGBLOB ALL_LOSSY +LONGBLOB TINYBLOB ALL_LOSSY +LONGBLOB BLOB ALL_LOSSY +LONGBLOB MEDIUMBLOB ALL_LOSSY +LONGBLOB LONGBLOB ALL_LOSSY +GEOMETRY BLOB ALL_LOSSY +BLOB GEOMETRY ALL_LOSSY +GEOMETRY GEOMETRY ALL_LOSSY +BIT(1) BIT(1) ALL_LOSSY +DATE DATE ALL_LOSSY +ENUM('master',' ENUM('master',' ALL_LOSSY +CHAR(10) ENUM('master',' ALL_LOSSY +CHAR(10) SET('master','s ALL_LOSSY +ENUM('master',' CHAR(10) ALL_LOSSY +SET('master','s CHAR(10) ALL_LOSSY +SET('master','s SET('master','s ALL_LOSSY +SET('master','s SET('master','s ALL_LOSSY +SET('0','1','2' SET('0','1','2' ALL_LOSSY +SET('0','1','2' SET('0','1','2' ALL_LOSSY +SET('0','1','2' SET('0','1','2' ALL_LOSSY +SET('0','1','2' SET('0','1','2' ALL_LOSSY +TINYINT TINYINT ALL_LOSSY +TINYINT SMALLINT ALL_LOSSY +TINYINT MEDIUMINT ALL_LOSSY +TINYINT INT ALL_LOSSY +TINYINT BIGINT ALL_LOSSY +SMALLINT TINYINT ALL_LOSSY +SMALLINT TINYINT ALL_LOSSY +SMALLINT TINYINT UNSIGNE ALL_LOSSY +SMALLINT SMALLINT ALL_LOSSY +SMALLINT MEDIUMINT ALL_LOSSY +SMALLINT INT ALL_LOSSY +SMALLINT BIGINT ALL_LOSSY +MEDIUMINT TINYINT ALL_LOSSY +MEDIUMINT TINYINT ALL_LOSSY +MEDIUMINT TINYINT UNSIGNE ALL_LOSSY +MEDIUMINT SMALLINT ALL_LOSSY +MEDIUMINT MEDIUMINT ALL_LOSSY +MEDIUMINT INT ALL_LOSSY +MEDIUMINT BIGINT ALL_LOSSY +INT TINYINT ALL_LOSSY +INT TINYINT ALL_LOSSY +INT TINYINT UNSIGNE ALL_LOSSY +INT SMALLINT ALL_LOSSY +INT MEDIUMINT ALL_LOSSY +INT INT ALL_LOSSY +INT BIGINT ALL_LOSSY +BIGINT TINYINT ALL_LOSSY +BIGINT SMALLINT ALL_LOSSY +BIGINT MEDIUMINT ALL_LOSSY +BIGINT INT ALL_LOSSY +BIGINT BIGINT ALL_LOSSY +CHAR(20) CHAR(20) ALL_LOSSY +CHAR(20) CHAR(30) ALL_LOSSY +CHAR(20) CHAR(10) ALL_LOSSY +CHAR(20) VARCHAR(20) ALL_LOSSY +CHAR(20) VARCHAR(30) ALL_LOSSY +CHAR(20) VARCHAR(10) ALL_LOSSY +CHAR(20) TINYTEXT ALL_LOSSY +CHAR(20) TEXT ALL_LOSSY +CHAR(20) MEDIUMTEXT ALL_LOSSY +CHAR(20) LONGTEXT ALL_LOSSY +VARCHAR(20) VARCHAR(20) ALL_LOSSY +VARCHAR(20) VARCHAR(30) ALL_LOSSY +VARCHAR(20) VARCHAR(10) ALL_LOSSY +VARCHAR(20) CHAR(30) ALL_LOSSY +VARCHAR(20) CHAR(10) ALL_LOSSY +VARCHAR(20) TINYTEXT ALL_LOSSY +VARCHAR(20) TEXT ALL_LOSSY +VARCHAR(20) MEDIUMTEXT ALL_LOSSY +VARCHAR(20) LONGTEXT ALL_LOSSY +VARCHAR(500) VARCHAR(500) ALL_LOSSY +VARCHAR(500) VARCHAR(510) ALL_LOSSY +VARCHAR(500) VARCHAR(255) ALL_LOSSY +VARCHAR(500) TINYTEXT ALL_LOSSY +VARCHAR(500) TEXT ALL_LOSSY +VARCHAR(500) MEDIUMTEXT ALL_LOSSY +VARCHAR(500) LONGTEXT ALL_LOSSY +TINYTEXT VARCHAR(500) ALL_LOSSY +TEXT VARCHAR(500) ALL_LOSSY +MEDIUMTEXT VARCHAR(500) ALL_LOSSY +LONGTEXT VARCHAR(500) ALL_LOSSY +TINYTEXT CHAR(255) ALL_LOSSY +TINYTEXT CHAR(250) ALL_LOSSY +TEXT CHAR(255) ALL_LOSSY +MEDIUMTEXT CHAR(255) ALL_LOSSY +LONGTEXT CHAR(255) ALL_LOSSY +TINYTEXT TINYTEXT ALL_LOSSY +TINYTEXT TEXT ALL_LOSSY +TEXT TINYTEXT ALL_LOSSY +DECIMAL(10,5) DECIMAL(10,5) ALL_LOSSY +DECIMAL(10,5) DECIMAL(10,6) ALL_LOSSY +DECIMAL(10,5) DECIMAL(11,5) ALL_LOSSY +DECIMAL(10,5) DECIMAL(11,6) ALL_LOSSY +DECIMAL(10,5) DECIMAL(10,4) ALL_LOSSY +DECIMAL(10,5) DECIMAL(9,5) ALL_LOSSY +DECIMAL(10,5) DECIMAL(9,4) ALL_LOSSY +FLOAT DECIMAL(10,5) ALL_LOSSY +DOUBLE DECIMAL(10,5) ALL_LOSSY +DECIMAL(10,5) FLOAT ALL_LOSSY +DECIMAL(10,5) DOUBLE ALL_LOSSY +FLOAT FLOAT ALL_LOSSY +DOUBLE DOUBLE ALL_LOSSY +FLOAT DOUBLE ALL_LOSSY +DOUBLE FLOAT ALL_LOSSY +BIT(5) BIT(5) ALL_LOSSY +BIT(5) BIT(6) ALL_LOSSY +BIT(6) BIT(5) ALL_LOSSY +BIT(5) BIT(12) ALL_LOSSY +BIT(12) BIT(5) ALL_LOSSY +TINYBLOB TINYBLOB ALL_LOSSY,ALL_NON_LOSSY +TINYBLOB BLOB ALL_LOSSY,ALL_NON_LOSSY +TINYBLOB MEDIUMBLOB ALL_LOSSY,ALL_NON_LOSSY +TINYBLOB LONGBLOB ALL_LOSSY,ALL_NON_LOSSY +BLOB TINYBLOB ALL_LOSSY,ALL_NON_LOSSY +BLOB BLOB ALL_LOSSY,ALL_NON_LOSSY +BLOB MEDIUMBLOB ALL_LOSSY,ALL_NON_LOSSY +BLOB LONGBLOB ALL_LOSSY,ALL_NON_LOSSY +MEDIUMBLOB TINYBLOB ALL_LOSSY,ALL_NON_LOSSY +MEDIUMBLOB BLOB ALL_LOSSY,ALL_NON_LOSSY +MEDIUMBLOB MEDIUMBLOB ALL_LOSSY,ALL_NON_LOSSY +MEDIUMBLOB LONGBLOB ALL_LOSSY,ALL_NON_LOSSY +LONGBLOB TINYBLOB ALL_LOSSY,ALL_NON_LOSSY +LONGBLOB BLOB ALL_LOSSY,ALL_NON_LOSSY +LONGBLOB MEDIUMBLOB ALL_LOSSY,ALL_NON_LOSSY +LONGBLOB LONGBLOB ALL_LOSSY,ALL_NON_LOSSY +GEOMETRY BLOB ALL_LOSSY,ALL_NON_LOSSY +BLOB GEOMETRY ALL_LOSSY,ALL_NON_LOSSY +GEOMETRY GEOMETRY ALL_LOSSY,ALL_NON_LOSSY +BIT(1) BIT(1) ALL_LOSSY,ALL_NON_LOSSY +DATE DATE ALL_LOSSY,ALL_NON_LOSSY +ENUM('master',' ENUM('master',' ALL_LOSSY,ALL_NON_LOSSY +CHAR(10) ENUM('master',' ALL_LOSSY,ALL_NON_LOSSY +CHAR(10) SET('master','s ALL_LOSSY,ALL_NON_LOSSY +ENUM('master',' CHAR(10) ALL_LOSSY,ALL_NON_LOSSY +SET('master','s CHAR(10) ALL_LOSSY,ALL_NON_LOSSY +SET('master','s SET('master','s ALL_LOSSY,ALL_NON_LOSSY +SET('master','s SET('master','s ALL_LOSSY,ALL_NON_LOSSY +SET('0','1','2' SET('0','1','2' ALL_LOSSY,ALL_NON_LOSSY +SET('0','1','2' SET('0','1','2' ALL_LOSSY,ALL_NON_LOSSY +SET('0','1','2' SET('0','1','2' ALL_LOSSY,ALL_NON_LOSSY +SET('0','1','2' SET('0','1','2' ALL_LOSSY,ALL_NON_LOSSY +TINYINT TINYINT ALL_LOSSY,ALL_NON_LOSSY +TINYINT SMALLINT ALL_LOSSY,ALL_NON_LOSSY +TINYINT MEDIUMINT ALL_LOSSY,ALL_NON_LOSSY +TINYINT INT ALL_LOSSY,ALL_NON_LOSSY +TINYINT BIGINT ALL_LOSSY,ALL_NON_LOSSY +SMALLINT TINYINT ALL_LOSSY,ALL_NON_LOSSY +SMALLINT TINYINT ALL_LOSSY,ALL_NON_LOSSY +SMALLINT TINYINT UNSIGNE ALL_LOSSY,ALL_NON_LOSSY +SMALLINT SMALLINT ALL_LOSSY,ALL_NON_LOSSY +SMALLINT MEDIUMINT ALL_LOSSY,ALL_NON_LOSSY +SMALLINT INT ALL_LOSSY,ALL_NON_LOSSY +SMALLINT BIGINT ALL_LOSSY,ALL_NON_LOSSY +MEDIUMINT TINYINT ALL_LOSSY,ALL_NON_LOSSY +MEDIUMINT TINYINT ALL_LOSSY,ALL_NON_LOSSY +MEDIUMINT TINYINT UNSIGNE ALL_LOSSY,ALL_NON_LOSSY +MEDIUMINT SMALLINT ALL_LOSSY,ALL_NON_LOSSY +MEDIUMINT MEDIUMINT ALL_LOSSY,ALL_NON_LOSSY +MEDIUMINT INT ALL_LOSSY,ALL_NON_LOSSY +MEDIUMINT BIGINT ALL_LOSSY,ALL_NON_LOSSY +INT TINYINT ALL_LOSSY,ALL_NON_LOSSY +INT TINYINT ALL_LOSSY,ALL_NON_LOSSY +INT TINYINT UNSIGNE ALL_LOSSY,ALL_NON_LOSSY +INT SMALLINT ALL_LOSSY,ALL_NON_LOSSY +INT MEDIUMINT ALL_LOSSY,ALL_NON_LOSSY +INT INT ALL_LOSSY,ALL_NON_LOSSY +INT BIGINT ALL_LOSSY,ALL_NON_LOSSY +BIGINT TINYINT ALL_LOSSY,ALL_NON_LOSSY +BIGINT SMALLINT ALL_LOSSY,ALL_NON_LOSSY +BIGINT MEDIUMINT ALL_LOSSY,ALL_NON_LOSSY +BIGINT INT ALL_LOSSY,ALL_NON_LOSSY +BIGINT BIGINT ALL_LOSSY,ALL_NON_LOSSY +CHAR(20) CHAR(20) ALL_LOSSY,ALL_NON_LOSSY +CHAR(20) CHAR(30) ALL_LOSSY,ALL_NON_LOSSY +CHAR(20) CHAR(10) ALL_LOSSY,ALL_NON_LOSSY +CHAR(20) VARCHAR(20) ALL_LOSSY,ALL_NON_LOSSY +CHAR(20) VARCHAR(30) ALL_LOSSY,ALL_NON_LOSSY +CHAR(20) VARCHAR(10) ALL_LOSSY,ALL_NON_LOSSY +CHAR(20) TINYTEXT ALL_LOSSY,ALL_NON_LOSSY +CHAR(20) TEXT ALL_LOSSY,ALL_NON_LOSSY +CHAR(20) MEDIUMTEXT ALL_LOSSY,ALL_NON_LOSSY +CHAR(20) LONGTEXT ALL_LOSSY,ALL_NON_LOSSY +VARCHAR(20) VARCHAR(20) ALL_LOSSY,ALL_NON_LOSSY +VARCHAR(20) VARCHAR(30) ALL_LOSSY,ALL_NON_LOSSY +VARCHAR(20) VARCHAR(10) ALL_LOSSY,ALL_NON_LOSSY +VARCHAR(20) CHAR(30) ALL_LOSSY,ALL_NON_LOSSY +VARCHAR(20) CHAR(10) ALL_LOSSY,ALL_NON_LOSSY +VARCHAR(20) TINYTEXT ALL_LOSSY,ALL_NON_LOSSY +VARCHAR(20) TEXT ALL_LOSSY,ALL_NON_LOSSY +VARCHAR(20) MEDIUMTEXT ALL_LOSSY,ALL_NON_LOSSY +VARCHAR(20) LONGTEXT ALL_LOSSY,ALL_NON_LOSSY +VARCHAR(500) VARCHAR(500) ALL_LOSSY,ALL_NON_LOSSY +VARCHAR(500) VARCHAR(510) ALL_LOSSY,ALL_NON_LOSSY +VARCHAR(500) VARCHAR(255) ALL_LOSSY,ALL_NON_LOSSY +VARCHAR(500) TINYTEXT ALL_LOSSY,ALL_NON_LOSSY +VARCHAR(500) TEXT ALL_LOSSY,ALL_NON_LOSSY +VARCHAR(500) MEDIUMTEXT ALL_LOSSY,ALL_NON_LOSSY +VARCHAR(500) LONGTEXT ALL_LOSSY,ALL_NON_LOSSY +TINYTEXT VARCHAR(500) ALL_LOSSY,ALL_NON_LOSSY +TEXT VARCHAR(500) ALL_LOSSY,ALL_NON_LOSSY +MEDIUMTEXT VARCHAR(500) ALL_LOSSY,ALL_NON_LOSSY +LONGTEXT VARCHAR(500) ALL_LOSSY,ALL_NON_LOSSY +TINYTEXT CHAR(255) ALL_LOSSY,ALL_NON_LOSSY +TINYTEXT CHAR(250) ALL_LOSSY,ALL_NON_LOSSY +TEXT CHAR(255) ALL_LOSSY,ALL_NON_LOSSY +MEDIUMTEXT CHAR(255) ALL_LOSSY,ALL_NON_LOSSY +LONGTEXT CHAR(255) ALL_LOSSY,ALL_NON_LOSSY +TINYTEXT TINYTEXT ALL_LOSSY,ALL_NON_LOSSY +TINYTEXT TEXT ALL_LOSSY,ALL_NON_LOSSY +TEXT TINYTEXT ALL_LOSSY,ALL_NON_LOSSY +DECIMAL(10,5) DECIMAL(10,5) ALL_LOSSY,ALL_NON_LOSSY +DECIMAL(10,5) DECIMAL(10,6) ALL_LOSSY,ALL_NON_LOSSY +DECIMAL(10,5) DECIMAL(11,5) ALL_LOSSY,ALL_NON_LOSSY +DECIMAL(10,5) DECIMAL(11,6) ALL_LOSSY,ALL_NON_LOSSY +DECIMAL(10,5) DECIMAL(10,4) ALL_LOSSY,ALL_NON_LOSSY +DECIMAL(10,5) DECIMAL(9,5) ALL_LOSSY,ALL_NON_LOSSY +DECIMAL(10,5) DECIMAL(9,4) ALL_LOSSY,ALL_NON_LOSSY +FLOAT DECIMAL(10,5) ALL_LOSSY,ALL_NON_LOSSY +DOUBLE DECIMAL(10,5) ALL_LOSSY,ALL_NON_LOSSY +DECIMAL(10,5) FLOAT ALL_LOSSY,ALL_NON_LOSSY +DECIMAL(10,5) DOUBLE ALL_LOSSY,ALL_NON_LOSSY +FLOAT FLOAT ALL_LOSSY,ALL_NON_LOSSY +DOUBLE DOUBLE ALL_LOSSY,ALL_NON_LOSSY +FLOAT DOUBLE ALL_LOSSY,ALL_NON_LOSSY +DOUBLE FLOAT ALL_LOSSY,ALL_NON_LOSSY +BIT(5) BIT(5) ALL_LOSSY,ALL_NON_LOSSY +BIT(5) BIT(6) ALL_LOSSY,ALL_NON_LOSSY +BIT(6) BIT(5) ALL_LOSSY,ALL_NON_LOSSY +BIT(5) BIT(12) ALL_LOSSY,ALL_NON_LOSSY +BIT(12) BIT(5) ALL_LOSSY,ALL_NON_LOSSY +DROP TABLE type_conversions; +call mtr.add_suppression("Slave SQL.*Column 1 of table .test.t1. cannot be converted from type.* Error_code: 1677"); +call mtr.add_suppression("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state"); +DROP TABLE t1; +include/sync_slave_sql_with_master.inc +set global slave_type_conversions = @saved_slave_type_conversions; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/rpl_unknown_ignorable_event.result b/mysql-test/suite/rpl_encryption/r/rpl_unknown_ignorable_event.result new file mode 100644 index 000000000000..615bee79ef5c --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_unknown_ignorable_event.result @@ -0,0 +1,28 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +CREATE TABLE t1 (c1 INT) ENGINE=InnoDB; +include/sync_slave_sql_with_master.inc +# Set a debug point on slave to simulate unknown ignorable log events. +SET @save_debug=@@global.debug; +SET GLOBAL DEBUG='d,simulate_unknown_ignorable_log_event'; +[connection master] +# Write a previous_gtids log event to binlog +# on master if gtid mode is on. +FLUSH LOGS; +# Write a write_rows log event to binlog on master. +INSERT INTO t1 VALUES (1); +# The slave receiver thread simulates an unknown ignorable +# log event by rewriting the write_rows log event and +# previous_gtids log event if gtid mode is on before +# writing it(them) in relay log. +include/sync_slave_sql_with_master.inc +# Verify that the slave applier thread skips these unknown ignorable +# log event. +include/assert.inc [Table t1 must not contain 1] +SET GLOBAL DEBUG= @save_debug; +[connection master] +DROP TABLE t1; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/rpl_upgrade_slave_master_info.result b/mysql-test/suite/rpl_encryption/r/rpl_upgrade_slave_master_info.result new file mode 100644 index 000000000000..ded51243ed5d --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_upgrade_slave_master_info.result @@ -0,0 +1,143 @@ +include/rpl_init.inc [topology=2->1] +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +# DROP slave_master_info table and re-create it as of MySQL 5.6.30 +[connection server_1] +CALL mtr.add_suppression('A slave with the same server_uuid/server_id as this slave has connected to the master'); +include/stop_slave.inc +USE mysql; +DROP TABLE `slave_master_info`; +CREATE TABLE `slave_master_info` ( +`Number_of_lines` INT(10) UNSIGNED NOT NULL COMMENT 'Number of lines in the file.', +`Master_log_name` TEXT CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'The name of the master binary log currently being read from the master.', +`Master_log_pos` bigint(20) UNSIGNED NOT NULL COMMENT 'The master log position of the last read event.', +`Host` CHAR(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT 'The host name of the master.', +`User_name` TEXT CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The user name used to connect to the master.', +`User_password` TEXT CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The password used to connect to the master.', +`Port` INT(10) UNSIGNED NOT NULL COMMENT 'The network port used to connect to the master.', +`Connect_retry` INT(10) UNSIGNED NOT NULL COMMENT 'The period (in seconds) that the slave will wait before trying to reconnect to the master.', +`Enabled_ssl` TINYINT(1) NOT NULL COMMENT 'Indicates whether the server supports SSL connections.', +`Ssl_ca` TEXT CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The file used for the Certificate Authority (CA) certificate.', +`Ssl_capath` TEXT CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The path to the Certificate Authority (CA) certificates.', +`Ssl_cert` TEXT CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The name of the SSL certificate file.', +`Ssl_cipher` TEXT CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The name of the cipher in use for the SSL connection.', +`Ssl_key` TEXT CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The name of the SSL key file.', +`Ssl_verify_server_cert` TINYINT(1) NOT NULL COMMENT 'Whether to verify the server certificate.', +`Heartbeat` FLOAT NOT NULL, +`Bind` TEXT CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'Displays which interface is employed when connecting to the MySQL server', +`Ignored_server_ids` TEXT CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The number of server IDs to be ignored, followed by the actual server IDs', +`Uuid` TEXT CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The master server uuid.', +`Retry_count` BIGINT(20) UNSIGNED NOT NULL COMMENT 'Number of reconnect attempts, to the master, before giving up.', +`Ssl_crl` TEXT CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The file used for the Certificate Revocation List (CRL)', +`Ssl_crlpath` TEXT CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The path used for Certificate Revocation List (CRL) files', +`Enabled_auto_position` TINYINT(1) NOT NULL COMMENT 'Indicates whether GTIDs will be used to retrieve events from the master.', +PRIMARY KEY (`Host`,`Port`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 COMMENT='Master Information'; +# Running mysql_upgrade to update slave_master_info table +include/rpl_restart_server.inc [server_number=1] +[connection server_1] +CHANGE MASTER TO MASTER_USER='root', MASTER_HOST='127.0.0.1', MASTER_PORT=MASTER_PORT FOR CHANNEL 'channel_1'; +Warnings: +Note 1759 Sending passwords in plain text without SSL/TLS is extremely insecure. +Note 1760 Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +CHANGE MASTER TO MASTER_USER='root', MASTER_HOST='127.0.0.1', MASTER_PORT=MASTER_PORT FOR CHANNEL 'channel_2'; +Warnings: +Note 1759 Sending passwords in plain text without SSL/TLS is extremely insecure. +Note 1760 Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +include/assert.inc [Default channel name is ''] +include/assert.inc [Second channel name is 'channel_1'] +include/assert.inc [Third channel name is 'channel_2'] +include/stop_slave.inc +Warnings: +Note 3084 Replication thread(s) for channel 'channel_1' are already stopped. +Note 3084 Replication thread(s) for channel 'channel_2' are already stopped. +RESET SLAVE ALL; +CHANGE MASTER TO MASTER_USER='root', MASTER_HOST='127.0.0.1', MASTER_PORT=MASTER_PORT; +Warnings: +Note 1759 Sending passwords in plain text without SSL/TLS is extremely insecure. +Note 1760 Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +include/start_slave.inc +[connection server_2] +CREATE TABLE t1 (c1 INT); +INSERT INTO t1 VALUES (1); +include/save_master_pos.inc +[connection server_1] +include/sync_slave_sql.inc +ALTER TABLE slave_master_info +MODIFY Host CHAR(64) CHARACTER SET utf8 COLLATE utf8_bin NULL COMMENT 'The host name of the master.', +ALTER COLUMN Channel_name DROP DEFAULT; +include/stop_slave.inc +CALL mtr.add_suppression('Info table has a problem with its key field.*slave_master_info'); +CALL mtr.add_suppression('Error in checking mysql.slave_master_info repository info type of TABLE'); +CALL mtr.add_suppression('Error creating master info'); +ALTER TABLE slave_master_info +MODIFY Channel_name CHAR(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL +COMMENT 'The channel on which the slave is connected to a source. Used in Multisource Replication' + AFTER Tls_version; +RESET SLAVE ALL; +ERROR HY000: Could not initialize master info structure; more error messages can be found in the MySQL error log +include/assert_grep.inc [Found the expected error line in the error log.] +CHANGE MASTER TO MASTER_USER='root', MASTER_HOST='127.0.0.1', MASTER_PORT=MASTER_PORT; +ERROR HY000: Slave is not configured or failed to initialize properly. You must at least set --server-id to enable either a master or a slave. Additional error messages can be found in the MySQL error log. +START SLAVE; +ERROR HY000: Slave is not configured or failed to initialize properly. You must at least set --server-id to enable either a master or a slave. Additional error messages can be found in the MySQL error log. +ALTER TABLE slave_master_info +MODIFY Channel_name CHAR(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL +COMMENT 'The channel on which the slave is connected to a source. Used in Multisource Replication' + AFTER Enabled_auto_position; +include/rpl_restart_server.inc [server_number=1] +RESET SLAVE ALL; +CHANGE MASTER TO MASTER_USER='root', MASTER_HOST='127.0.0.1', MASTER_PORT=MASTER_PORT, MASTER_LOG_FILE='FILE', MASTER_LOG_POS=POS; +Warnings: +Note 1759 Sending passwords in plain text without SSL/TLS is extremely insecure. +Note 1760 Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +include/start_slave.inc +CALL mtr.add_suppression('Failed to create a channel from master info table repository'); +CALL mtr.add_suppression('Could not create channel list'); +CALL mtr.add_suppression('Failed to create or recover replication info repositories'); +[connection server_2] +INSERT INTO t1 VALUES (2); +include/sync_slave_sql_with_master.inc +include/stop_slave.inc +CHANGE MASTER TO MASTER_USER='root', MASTER_HOST='127.0.0.1', MASTER_PORT=MASTER_PORT, MASTER_LOG_FILE='FILE', MASTER_LOG_POS=POS FOR CHANNEL 'channel_1'; +Warnings: +Note 1759 Sending passwords in plain text without SSL/TLS is extremely insecure. +Note 1760 Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +include/start_slave.inc +[connection server_2] +INSERT INTO t1 VALUES (3); +include/sync_slave_sql_with_master.inc +include/stop_slave.inc +CHANGE MASTER TO MASTER_USER='root', MASTER_HOST='127.0.0.1', MASTER_PORT=MASTER_PORT, MASTER_LOG_FILE='FILE', MASTER_LOG_POS=POS FOR CHANNEL 'channel_2'; +Warnings: +Note 1759 Sending passwords in plain text without SSL/TLS is extremely insecure. +Note 1760 Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +include/start_slave.inc +[connection server_2] +INSERT INTO t1 VALUES (4); +include/sync_slave_sql_with_master.inc +include/stop_slave.inc +ALTER TABLE slave_master_info +MODIFY Channel_name CHAR(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL +COMMENT 'The channel on which the slave is connected to a source. Used in Multisource Replication' + AFTER Tls_version; +include/rpl_restart_server.inc [server_number=1] +RESET SLAVE ALL; +ERROR HY000: Slave is not configured or failed to initialize properly. You must at least set --server-id to enable either a master or a slave. Additional error messages can be found in the MySQL error log. +include/assert_grep.inc [Found the expected error line in the error log generated on server startup.] +ALTER TABLE slave_master_info +MODIFY Channel_name CHAR(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL +COMMENT 'The channel on which the slave is connected to a source. Used in Multisource Replication' + AFTER Enabled_auto_position; +include/rpl_restart_server.inc [server_number=1] +include/stop_slave.inc +RESET SLAVE ALL; +CHANGE MASTER TO MASTER_USER='root', MASTER_HOST='127.0.0.1', MASTER_PORT=MASTER_PORT, MASTER_LOG_FILE='FILE', MASTER_LOG_POS=POS; +Warnings: +Note 1759 Sending passwords in plain text without SSL/TLS is extremely insecure. +Note 1760 Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +include/start_slave.inc +[connection server_2] +DROP TABLE t1; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/rpl_wait_for_executed_gtid_set.result b/mysql-test/suite/rpl_encryption/r/rpl_wait_for_executed_gtid_set.result new file mode 100644 index 000000000000..b1d73571e6fe --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_wait_for_executed_gtid_set.result @@ -0,0 +1,597 @@ +include/rpl_init.inc [topology=1->2, 1->3] +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +include/rpl_group_replication_plugin_installed.inc +include/rpl_default_connections.inc +==== 0. Initialize ==== +[connection server_1] +SET GLOBAL GTID_PURGED = 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1-3,bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb:1-3,ffffffff-ffff-ffff-ffff-ffffffffffff:1-1234567890'; +[connection server_2] +SET GLOBAL GTID_PURGED = 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1-3,bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb:1-3,ffffffff-ffff-ffff-ffff-ffffffffffff:1-1234567890'; +[connection server_3] +SET GLOBAL GTID_PURGED = 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1-3,bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb:1-3,ffffffff-ffff-ffff-ffff-ffffffffffff:1-1234567890'; +CALL mtr.add_suppression('You need to use --log-bin to make --binlog-format work.'); +CALL mtr.add_suppression('You need to use --log-bin to make --log-slave-updates work.'); +[connection master] +CALL mtr.add_suppression('Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a system function that may return a different value on the slave.'); +include/rpl_sync.inc +include/rpl_sync.inc +CREATE TABLE t1 (a INT); +==== 1. Error conditions ==== +---- 1.1. NULL or invalid string ---- +SELECT WAIT_FOR_EXECUTED_GTID_SET(NULL, 5); +ERROR HY000: Malformed GTID set specification 'NULL'. +SELECT WAIT_FOR_EXECUTED_GTID_SET(NULL); +ERROR HY000: Malformed GTID set specification 'NULL'. +SELECT WAIT_FOR_EXECUTED_GTID_SET('Incorrect_value'); +ERROR HY000: Malformed GTID set specification 'Incorrect_value'. +SELECT WAIT_FOR_EXECUTED_GTID_SET('Incorrect_value', 5); +ERROR HY000: Malformed GTID set specification 'Incorrect_value'. +SELECT WAIT_FOR_EXECUTED_GTID_SET(); +ERROR 42000: Incorrect parameter count in the call to native function 'WAIT_FOR_EXECUTED_GTID_SET' +SELECT WAIT_FOR_EXECUTED_GTID_SET('NULL', 5, 5); +ERROR 42000: Incorrect parameter count in the call to native function 'WAIT_FOR_EXECUTED_GTID_SET' +---- 1.2. Wait for GTID owned by the waiting client ---- +SET @@SESSION.GTID_NEXT = 'cccccccc-cccc-cccc-cccc-cccccccccccc:1'; +SELECT WAIT_FOR_EXECUTED_GTID_SET('bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb:1'); +WAIT_FOR_EXECUTED_GTID_SET('bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb:1') +0 +SELECT WAIT_FOR_EXECUTED_GTID_SET('cccccccc-cccc-cccc-cccc-cccccccccccc:1'); +ERROR HY000: The client holds ownership of the GTID cccccccc-cccc-cccc-cccc-cccccccccccc:1. Therefore, WAIT_FOR_EXECUTED_GTID_SET cannot wait for this GTID. +ROLLBACK; +SELECT WAIT_FOR_EXECUTED_GTID_SET('cccccccc-cccc-cccc-cccc-cccccccccccc:1', 1); +WAIT_FOR_EXECUTED_GTID_SET('cccccccc-cccc-cccc-cccc-cccccccccccc:1', 1) +1 +SET @@SESSION.GTID_NEXT = 'AUTOMATIC'; +---- 1.3. Function should return NULL in a replication thread ---- +INSERT INTO t1 VALUES (WAIT_FOR_EXECUTED_GTID_SET('aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1')); +Warnings: +Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a system function that may return a different value on the slave. +include/assert.inc [t1 should contain 0] +include/sync_slave_sql_with_master.inc +include/assert.inc [t1 should contain NULL] +[connection master] +---- 1.4. Function should generate error if GTID_MODE = OFF ---- +include/rpl_set_gtid_mode.inc [off on servers 1,2,3] +SELECT WAIT_FOR_EXECUTED_GTID_SET('aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1'); +ERROR HY000: Cannot use WAIT_FOR_EXECUTED_GTID_SET when GTID_MODE = OFF. +SELECT WAIT_FOR_EXECUTED_GTID_SET('aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:9999'); +ERROR HY000: Cannot use WAIT_FOR_EXECUTED_GTID_SET when GTID_MODE = OFF. +include/rpl_set_gtid_mode.inc [on on servers 1,2,3] +---- 1.5. Function should stop fast if client is killed ---- +include/rpl_connect.inc [creating con1] +[connection con1] +SELECT WAIT_FOR_EXECUTED_GTID_SET('aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:9999'); +[connection master] +include/wait_for_wait_for_executed_gtid_set.inc +KILL ; +[connection con1] +ERROR HY000: Lost connection to MySQL server during query +[connection master] +---- 1.6. Function should return error if query is killed ---- +[connection master1] +SELECT WAIT_FOR_EXECUTED_GTID_SET('aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:9999'); +[connection master] +include/wait_for_wait_for_executed_gtid_set.inc +include/kill_wait_for_executed_gtid_set.inc +[connection master] +==== 2. Wait set is already part of GTID_EXECUTED ==== +---- 2.1. No GTID ---- +SELECT WAIT_FOR_EXECUTED_GTID_SET(''); +WAIT_FOR_EXECUTED_GTID_SET('') +0 +SELECT WAIT_FOR_EXECUTED_GTID_SET('', 999999); +WAIT_FOR_EXECUTED_GTID_SET('', 999999) +0 +---- 2.2. Single GTID ---- +SELECT WAIT_FOR_EXECUTED_GTID_SET('aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1'); +WAIT_FOR_EXECUTED_GTID_SET('aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1') +0 +SELECT WAIT_FOR_EXECUTED_GTID_SET('aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1', 999999); +WAIT_FOR_EXECUTED_GTID_SET('aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1', 999999) +0 +---- 2.3. Multiple GTIDs, all having the same UUID ---- +SELECT WAIT_FOR_EXECUTED_GTID_SET('aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1-3'); +WAIT_FOR_EXECUTED_GTID_SET('aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1-3') +0 +SELECT WAIT_FOR_EXECUTED_GTID_SET('aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1-3', 999999); +WAIT_FOR_EXECUTED_GTID_SET('aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1-3', 999999) +0 +---- 2.4. Multiple GTIDs using different UUIDs ---- +SELECT WAIT_FOR_EXECUTED_GTID_SET('aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1-3,bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb:1-3'); +WAIT_FOR_EXECUTED_GTID_SET('aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1-3,bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb:1-3') +0 +SELECT WAIT_FOR_EXECUTED_GTID_SET('aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1-3,bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb:1-3', 999999); +WAIT_FOR_EXECUTED_GTID_SET('aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1-3,bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb:1-3', 999999) +0 +---- 2.5. Huge GTID set ---- +SELECT WAIT_FOR_EXECUTED_GTID_SET('ffffffff-ffff-ffff-ffff-ffffffffffff:1-1234567890'); +WAIT_FOR_EXECUTED_GTID_SET('ffffffff-ffff-ffff-ffff-ffffffffffff:1-1234567890') +0 +SELECT WAIT_FOR_EXECUTED_GTID_SET('ffffffff-ffff-ffff-ffff-ffffffffffff:1-1234567890', 999999); +WAIT_FOR_EXECUTED_GTID_SET('ffffffff-ffff-ffff-ffff-ffffffffffff:1-1234567890', 999999) +0 +==== 3. Still waiting after 1 second, if GTIDs not committed ==== +---- 3.1. Big timeout ---- +[connection master1] +SELECT WAIT_FOR_EXECUTED_GTID_SET('cccccccc-cccc-cccc-cccc-cccccccccccc:1', 999999); +[connection master] +include/wait_for_wait_for_executed_gtid_set.inc +include/kill_wait_for_executed_gtid_set.inc +---- 3.2. No timeout ---- +[connection master1] +SELECT WAIT_FOR_EXECUTED_GTID_SET('cccccccc-cccc-cccc-cccc-cccccccccccc:1'); +[connection master] +include/wait_for_wait_for_executed_gtid_set.inc +include/kill_wait_for_executed_gtid_set.inc +==== 4. Still waiting after 1 second, even if GTID included in GTID_OWNED ==== +[connection server_1] +SET GTID_NEXT = 'cccccccc-cccc-cccc-cccc-cccccccccccc:1'; +---- 4.1. Big timeout ---- +[connection master1] +SELECT WAIT_FOR_EXECUTED_GTID_SET('cccccccc-cccc-cccc-cccc-cccccccccccc:1', 999999); +[connection master] +include/wait_for_wait_for_executed_gtid_set.inc +include/kill_wait_for_executed_gtid_set.inc +---- 4.2. No timeout ---- +[connection master1] +SELECT WAIT_FOR_EXECUTED_GTID_SET('cccccccc-cccc-cccc-cccc-cccccccccccc:1'); +[connection master] +include/wait_for_wait_for_executed_gtid_set.inc +include/kill_wait_for_executed_gtid_set.inc +[connection server_1] +ROLLBACK; +SET GTID_NEXT = 'AUTOMATIC'; +==== 5. Still waiting if anonymous transaction committed ==== +include/rpl_set_gtid_mode.inc [on_permissive on servers 1,2,3] +---- 5.1. Big timeout ---- +[connection master1] +SELECT WAIT_FOR_EXECUTED_GTID_SET('cccccccc-cccc-cccc-cccc-cccccccccccc:1', 999999); +[connection master] +include/wait_for_wait_for_executed_gtid_set.inc +SET GTID_NEXT = 'ANONYMOUS'; +INSERT INTO t1 VALUES (1); +SET GTID_NEXT = 'AUTOMATIC'; +include/kill_wait_for_executed_gtid_set.inc +---- 5.2. No timeout ---- +[connection master1] +SELECT WAIT_FOR_EXECUTED_GTID_SET('cccccccc-cccc-cccc-cccc-cccccccccccc:1'); +[connection master] +include/wait_for_wait_for_executed_gtid_set.inc +SET GTID_NEXT = 'ANONYMOUS'; +INSERT INTO t1 VALUES (1); +SET GTID_NEXT = 'AUTOMATIC'; +include/kill_wait_for_executed_gtid_set.inc +include/rpl_set_gtid_mode.inc [on on servers 1,2,3] +==== 6. Stop after the timeout is reached ==== +SELECT WAIT_FOR_EXECUTED_GTID_SET('cccccccc-cccc-cccc-cccc-cccccccccccc:1', 1); +WAIT_FOR_EXECUTED_GTID_SET('cccccccc-cccc-cccc-cccc-cccccccccccc:1', 1) +1 +[connection server_1] +SET GTID_NEXT = 'cccccccc-cccc-cccc-cccc-cccccccccccc:1'; +[connection master] +SELECT WAIT_FOR_EXECUTED_GTID_SET('cccccccc-cccc-cccc-cccc-cccccccccccc:1', 1); +WAIT_FOR_EXECUTED_GTID_SET('cccccccc-cccc-cccc-cccc-cccccccccccc:1', 1) +1 +[connection server_1] +ROLLBACK; +SET GTID_NEXT = 'AUTOMATIC'; +[connection master] +==== 7. ==== +---- 7.1 (1) ---- +[connection server_1] +SELECT WAIT_FOR_EXECUTED_GTID_SET('SERVER_UUID:6'); +[connection server_1_1] +include/wait_for_wait_for_executed_gtid_set.inc +[connection master] +SET GTID_NEXT = 'SERVER_UUID:6'; +COMMIT; +SET GTID_NEXT = 'AUTOMATIC'; +[connection server_1] +WAIT_FOR_EXECUTED_GTID_SET('SERVER_UUID:6') +0 +[connection master] +---- 7.2 (1) ---- +[connection server_1] +SELECT WAIT_FOR_EXECUTED_GTID_SET('SERVER_UUID:7,SERVER_UUID:8'); +[connection server_1_1] +include/wait_for_wait_for_executed_gtid_set.inc +[connection master] +SET GTID_NEXT = 'SERVER_UUID:7'; +COMMIT; +SET GTID_NEXT = 'AUTOMATIC'; +[connection server_1_1] +include/wait_for_wait_for_executed_gtid_set.inc +[connection master] +SET GTID_NEXT = 'SERVER_UUID:8'; +COMMIT; +SET GTID_NEXT = 'AUTOMATIC'; +[connection server_1] +WAIT_FOR_EXECUTED_GTID_SET('SERVER_UUID:7,SERVER_UUID:8') +0 +[connection master] +---- 7.3 (1) ---- +[connection server_1] +SELECT WAIT_FOR_EXECUTED_GTID_SET('SERVER_UUID:9,dddddddd-dddd-dddd-dddd-dddddddddddd:1'); +[connection server_1_1] +include/wait_for_wait_for_executed_gtid_set.inc +[connection master] +SET GTID_NEXT = 'SERVER_UUID:9'; +COMMIT; +SET GTID_NEXT = 'AUTOMATIC'; +[connection server_1_1] +include/wait_for_wait_for_executed_gtid_set.inc +[connection master] +SET GTID_NEXT = 'dddddddd-dddd-dddd-dddd-dddddddddddd:1'; +COMMIT; +SET GTID_NEXT = 'AUTOMATIC'; +[connection server_1] +WAIT_FOR_EXECUTED_GTID_SET('SERVER_UUID:9,dddddddd-dddd-dddd-dddd-dddddddddddd:1') +0 +[connection master] +---- 7.4 (1) ---- +[connection server_1] +SELECT WAIT_FOR_EXECUTED_GTID_SET('SERVER_UUID:1,SERVER_UUID:10,dddddddd-dddd-dddd-dddd-dddddddddddd:2'); +[connection server_1_1] +include/wait_for_wait_for_executed_gtid_set.inc +[connection master] +SET GTID_NEXT = 'SERVER_UUID:10'; +COMMIT; +SET GTID_NEXT = 'AUTOMATIC'; +[connection server_1_1] +include/wait_for_wait_for_executed_gtid_set.inc +[connection master] +SET GTID_NEXT = 'dddddddd-dddd-dddd-dddd-dddddddddddd:2'; +COMMIT; +SET GTID_NEXT = 'AUTOMATIC'; +[connection server_1] +WAIT_FOR_EXECUTED_GTID_SET('SERVER_UUID:1,SERVER_UUID:10,dddddddd-dddd-dddd-dddd-dddddddddddd:2') +0 +[connection master] +---- 7.5 (1) ---- +[connection server_1] +SELECT WAIT_FOR_EXECUTED_GTID_SET('SERVER_UUID:11,bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb:1-3'); +[connection server_1_1] +include/wait_for_wait_for_executed_gtid_set.inc +[connection master] +SET GTID_NEXT = 'SERVER_UUID:11'; +COMMIT; +SET GTID_NEXT = 'AUTOMATIC'; +[connection server_1] +WAIT_FOR_EXECUTED_GTID_SET('SERVER_UUID:11,bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb:1-3') +0 +[connection master] +---- 7.6 (1) ---- +---- 7.1 (2) ---- +[connection server_1] +SELECT WAIT_FOR_EXECUTED_GTID_SET('cccccccc-cccc-cccc-cccc-cccccccccccc:1'); +[connection server_1_1] +include/wait_for_wait_for_executed_gtid_set.inc +[connection master] +SET GTID_NEXT = 'cccccccc-cccc-cccc-cccc-cccccccccccc:1'; +COMMIT; +SET GTID_NEXT = 'AUTOMATIC'; +[connection server_1] +WAIT_FOR_EXECUTED_GTID_SET('cccccccc-cccc-cccc-cccc-cccccccccccc:1') +0 +[connection master] +---- 7.2 (2) ---- +[connection server_1] +SELECT WAIT_FOR_EXECUTED_GTID_SET('cccccccc-cccc-cccc-cccc-cccccccccccc:2,cccccccc-cccc-cccc-cccc-cccccccccccc:3'); +[connection server_1_1] +include/wait_for_wait_for_executed_gtid_set.inc +[connection master] +SET GTID_NEXT = 'cccccccc-cccc-cccc-cccc-cccccccccccc:2'; +COMMIT; +SET GTID_NEXT = 'AUTOMATIC'; +[connection server_1_1] +include/wait_for_wait_for_executed_gtid_set.inc +[connection master] +SET GTID_NEXT = 'cccccccc-cccc-cccc-cccc-cccccccccccc:3'; +COMMIT; +SET GTID_NEXT = 'AUTOMATIC'; +[connection server_1] +WAIT_FOR_EXECUTED_GTID_SET('cccccccc-cccc-cccc-cccc-cccccccccccc:2,cccccccc-cccc-cccc-cccc-cccccccccccc:3') +0 +[connection master] +---- 7.3 (2) ---- +[connection server_1] +SELECT WAIT_FOR_EXECUTED_GTID_SET('cccccccc-cccc-cccc-cccc-cccccccccccc:4,dddddddd-dddd-dddd-dddd-dddddddddddd:3'); +[connection server_1_1] +include/wait_for_wait_for_executed_gtid_set.inc +[connection master] +SET GTID_NEXT = 'cccccccc-cccc-cccc-cccc-cccccccccccc:4'; +COMMIT; +SET GTID_NEXT = 'AUTOMATIC'; +[connection server_1_1] +include/wait_for_wait_for_executed_gtid_set.inc +[connection master] +SET GTID_NEXT = 'dddddddd-dddd-dddd-dddd-dddddddddddd:3'; +COMMIT; +SET GTID_NEXT = 'AUTOMATIC'; +[connection server_1] +WAIT_FOR_EXECUTED_GTID_SET('cccccccc-cccc-cccc-cccc-cccccccccccc:4,dddddddd-dddd-dddd-dddd-dddddddddddd:3') +0 +[connection master] +---- 7.4 (2) ---- +[connection server_1] +SELECT WAIT_FOR_EXECUTED_GTID_SET('cccccccc-cccc-cccc-cccc-cccccccccccc:1,cccccccc-cccc-cccc-cccc-cccccccccccc:5,dddddddd-dddd-dddd-dddd-dddddddddddd:4'); +[connection server_1_1] +include/wait_for_wait_for_executed_gtid_set.inc +[connection master] +SET GTID_NEXT = 'cccccccc-cccc-cccc-cccc-cccccccccccc:5'; +COMMIT; +SET GTID_NEXT = 'AUTOMATIC'; +[connection server_1_1] +include/wait_for_wait_for_executed_gtid_set.inc +[connection master] +SET GTID_NEXT = 'dddddddd-dddd-dddd-dddd-dddddddddddd:4'; +COMMIT; +SET GTID_NEXT = 'AUTOMATIC'; +[connection server_1] +WAIT_FOR_EXECUTED_GTID_SET('cccccccc-cccc-cccc-cccc-cccccccccccc:1,cccccccc-cccc-cccc-cccc-cccccccccccc:5,dddddddd-dddd-dddd-dddd-dddddddddddd:4') +0 +[connection master] +---- 7.5 (2) ---- +[connection server_1] +SELECT WAIT_FOR_EXECUTED_GTID_SET('cccccccc-cccc-cccc-cccc-cccccccccccc:6,bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb:1-3'); +[connection server_1_1] +include/wait_for_wait_for_executed_gtid_set.inc +[connection master] +SET GTID_NEXT = 'cccccccc-cccc-cccc-cccc-cccccccccccc:6'; +COMMIT; +SET GTID_NEXT = 'AUTOMATIC'; +[connection server_1] +WAIT_FOR_EXECUTED_GTID_SET('cccccccc-cccc-cccc-cccc-cccccccccccc:6,bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb:1-3') +0 +[connection master] +---- 7.6 (2) ---- +[connection server_1] +SELECT WAIT_FOR_EXECUTED_GTID_SET('UUID:1'); +[connection server_1_1] +include/wait_for_wait_for_executed_gtid_set.inc +[connection master] +SET GTID_NEXT = 'UUID:1'; +COMMIT; +SET GTID_NEXT = 'AUTOMATIC'; +[connection server_1] +WAIT_FOR_EXECUTED_GTID_SET('UUID:1') +0 +[connection master] +---- 7.1 (3) ---- +[connection server_2] +SELECT WAIT_FOR_EXECUTED_GTID_SET('cccccccc-cccc-cccc-cccc-cccccccccccc:7'); +[connection server_2_1] +include/wait_for_wait_for_executed_gtid_set.inc +[connection master] +SET GTID_NEXT = 'cccccccc-cccc-cccc-cccc-cccccccccccc:7'; +COMMIT; +SET GTID_NEXT = 'AUTOMATIC'; +[connection server_2] +WAIT_FOR_EXECUTED_GTID_SET('cccccccc-cccc-cccc-cccc-cccccccccccc:7') +0 +[connection master] +---- 7.2 (3) ---- +[connection server_2] +SELECT WAIT_FOR_EXECUTED_GTID_SET('cccccccc-cccc-cccc-cccc-cccccccccccc:8,cccccccc-cccc-cccc-cccc-cccccccccccc:9'); +[connection server_2_1] +include/wait_for_wait_for_executed_gtid_set.inc +[connection master] +SET GTID_NEXT = 'cccccccc-cccc-cccc-cccc-cccccccccccc:8'; +COMMIT; +SET GTID_NEXT = 'AUTOMATIC'; +[connection server_2_1] +include/wait_for_wait_for_executed_gtid_set.inc +[connection master] +SET GTID_NEXT = 'cccccccc-cccc-cccc-cccc-cccccccccccc:9'; +COMMIT; +SET GTID_NEXT = 'AUTOMATIC'; +[connection server_2] +WAIT_FOR_EXECUTED_GTID_SET('cccccccc-cccc-cccc-cccc-cccccccccccc:8,cccccccc-cccc-cccc-cccc-cccccccccccc:9') +0 +[connection master] +---- 7.3 (3) ---- +[connection server_2] +SELECT WAIT_FOR_EXECUTED_GTID_SET('cccccccc-cccc-cccc-cccc-cccccccccccc:10,dddddddd-dddd-dddd-dddd-dddddddddddd:5'); +[connection server_2_1] +include/wait_for_wait_for_executed_gtid_set.inc +[connection master] +SET GTID_NEXT = 'cccccccc-cccc-cccc-cccc-cccccccccccc:10'; +COMMIT; +SET GTID_NEXT = 'AUTOMATIC'; +[connection server_2_1] +include/wait_for_wait_for_executed_gtid_set.inc +[connection master] +SET GTID_NEXT = 'dddddddd-dddd-dddd-dddd-dddddddddddd:5'; +COMMIT; +SET GTID_NEXT = 'AUTOMATIC'; +[connection server_2] +WAIT_FOR_EXECUTED_GTID_SET('cccccccc-cccc-cccc-cccc-cccccccccccc:10,dddddddd-dddd-dddd-dddd-dddddddddddd:5') +0 +[connection master] +---- 7.4 (3) ---- +[connection server_2] +SELECT WAIT_FOR_EXECUTED_GTID_SET('cccccccc-cccc-cccc-cccc-cccccccccccc:1,cccccccc-cccc-cccc-cccc-cccccccccccc:11,dddddddd-dddd-dddd-dddd-dddddddddddd:6'); +[connection server_2_1] +include/wait_for_wait_for_executed_gtid_set.inc +[connection master] +SET GTID_NEXT = 'cccccccc-cccc-cccc-cccc-cccccccccccc:11'; +COMMIT; +SET GTID_NEXT = 'AUTOMATIC'; +[connection server_2_1] +include/wait_for_wait_for_executed_gtid_set.inc +[connection master] +SET GTID_NEXT = 'dddddddd-dddd-dddd-dddd-dddddddddddd:6'; +COMMIT; +SET GTID_NEXT = 'AUTOMATIC'; +[connection server_2] +WAIT_FOR_EXECUTED_GTID_SET('cccccccc-cccc-cccc-cccc-cccccccccccc:1,cccccccc-cccc-cccc-cccc-cccccccccccc:11,dddddddd-dddd-dddd-dddd-dddddddddddd:6') +0 +[connection master] +---- 7.5 (3) ---- +[connection server_2] +SELECT WAIT_FOR_EXECUTED_GTID_SET('cccccccc-cccc-cccc-cccc-cccccccccccc:12,bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb:1-3'); +[connection server_2_1] +include/wait_for_wait_for_executed_gtid_set.inc +[connection master] +SET GTID_NEXT = 'cccccccc-cccc-cccc-cccc-cccccccccccc:12'; +COMMIT; +SET GTID_NEXT = 'AUTOMATIC'; +[connection server_2] +WAIT_FOR_EXECUTED_GTID_SET('cccccccc-cccc-cccc-cccc-cccccccccccc:12,bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb:1-3') +0 +[connection master] +---- 7.6 (3) ---- +[connection server_2] +SELECT WAIT_FOR_EXECUTED_GTID_SET('UUID:1'); +[connection server_2_1] +include/wait_for_wait_for_executed_gtid_set.inc +[connection master] +SET GTID_NEXT = 'UUID:1'; +COMMIT; +SET GTID_NEXT = 'AUTOMATIC'; +[connection server_2] +WAIT_FOR_EXECUTED_GTID_SET('UUID:1') +0 +[connection master] +---- 7.1 (4) ---- +[connection server_3] +SELECT WAIT_FOR_EXECUTED_GTID_SET('cccccccc-cccc-cccc-cccc-cccccccccccc:13'); +[connection server_3_1] +include/wait_for_wait_for_executed_gtid_set.inc +[connection master] +SET GTID_NEXT = 'cccccccc-cccc-cccc-cccc-cccccccccccc:13'; +COMMIT; +SET GTID_NEXT = 'AUTOMATIC'; +[connection server_3] +WAIT_FOR_EXECUTED_GTID_SET('cccccccc-cccc-cccc-cccc-cccccccccccc:13') +0 +[connection master] +---- 7.2 (4) ---- +[connection server_3] +SELECT WAIT_FOR_EXECUTED_GTID_SET('cccccccc-cccc-cccc-cccc-cccccccccccc:14,cccccccc-cccc-cccc-cccc-cccccccccccc:15'); +[connection server_3_1] +include/wait_for_wait_for_executed_gtid_set.inc +[connection master] +SET GTID_NEXT = 'cccccccc-cccc-cccc-cccc-cccccccccccc:14'; +COMMIT; +SET GTID_NEXT = 'AUTOMATIC'; +[connection server_3_1] +include/wait_for_wait_for_executed_gtid_set.inc +[connection master] +SET GTID_NEXT = 'cccccccc-cccc-cccc-cccc-cccccccccccc:15'; +COMMIT; +SET GTID_NEXT = 'AUTOMATIC'; +[connection server_3] +WAIT_FOR_EXECUTED_GTID_SET('cccccccc-cccc-cccc-cccc-cccccccccccc:14,cccccccc-cccc-cccc-cccc-cccccccccccc:15') +0 +[connection master] +---- 7.3 (4) ---- +[connection server_3] +SELECT WAIT_FOR_EXECUTED_GTID_SET('cccccccc-cccc-cccc-cccc-cccccccccccc:16,dddddddd-dddd-dddd-dddd-dddddddddddd:7'); +[connection server_3_1] +include/wait_for_wait_for_executed_gtid_set.inc +[connection master] +SET GTID_NEXT = 'cccccccc-cccc-cccc-cccc-cccccccccccc:16'; +COMMIT; +SET GTID_NEXT = 'AUTOMATIC'; +[connection server_3_1] +include/wait_for_wait_for_executed_gtid_set.inc +[connection master] +SET GTID_NEXT = 'dddddddd-dddd-dddd-dddd-dddddddddddd:7'; +COMMIT; +SET GTID_NEXT = 'AUTOMATIC'; +[connection server_3] +WAIT_FOR_EXECUTED_GTID_SET('cccccccc-cccc-cccc-cccc-cccccccccccc:16,dddddddd-dddd-dddd-dddd-dddddddddddd:7') +0 +[connection master] +---- 7.4 (4) ---- +[connection server_3] +SELECT WAIT_FOR_EXECUTED_GTID_SET('cccccccc-cccc-cccc-cccc-cccccccccccc:1,cccccccc-cccc-cccc-cccc-cccccccccccc:17,dddddddd-dddd-dddd-dddd-dddddddddddd:8'); +[connection server_3_1] +include/wait_for_wait_for_executed_gtid_set.inc +[connection master] +SET GTID_NEXT = 'cccccccc-cccc-cccc-cccc-cccccccccccc:17'; +COMMIT; +SET GTID_NEXT = 'AUTOMATIC'; +[connection server_3_1] +include/wait_for_wait_for_executed_gtid_set.inc +[connection master] +SET GTID_NEXT = 'dddddddd-dddd-dddd-dddd-dddddddddddd:8'; +COMMIT; +SET GTID_NEXT = 'AUTOMATIC'; +[connection server_3] +WAIT_FOR_EXECUTED_GTID_SET('cccccccc-cccc-cccc-cccc-cccccccccccc:1,cccccccc-cccc-cccc-cccc-cccccccccccc:17,dddddddd-dddd-dddd-dddd-dddddddddddd:8') +0 +[connection master] +---- 7.5 (4) ---- +[connection server_3] +SELECT WAIT_FOR_EXECUTED_GTID_SET('cccccccc-cccc-cccc-cccc-cccccccccccc:18,bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb:1-3'); +[connection server_3_1] +include/wait_for_wait_for_executed_gtid_set.inc +[connection master] +SET GTID_NEXT = 'cccccccc-cccc-cccc-cccc-cccccccccccc:18'; +COMMIT; +SET GTID_NEXT = 'AUTOMATIC'; +[connection server_3] +WAIT_FOR_EXECUTED_GTID_SET('cccccccc-cccc-cccc-cccc-cccccccccccc:18,bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb:1-3') +0 +[connection master] +---- 7.6 (4) ---- +[connection server_3] +SELECT WAIT_FOR_EXECUTED_GTID_SET('UUID:1'); +[connection server_3_1] +include/wait_for_wait_for_executed_gtid_set.inc +[connection master] +SET GTID_NEXT = 'UUID:1'; +COMMIT; +SET GTID_NEXT = 'AUTOMATIC'; +[connection server_3] +WAIT_FOR_EXECUTED_GTID_SET('UUID:1') +0 +[connection master] +==== 8.1 SET GTID_PURGED ==== +DROP TABLE t1; +include/rpl_sync.inc +include/rpl_stop_slaves.inc +RESET MASTER; +[connection master1] +SELECT WAIT_FOR_EXECUTED_GTID_SET('aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1-1234567890'); +[connection master] +include/wait_for_wait_for_executed_gtid_set.inc +SET GLOBAL GTID_PURGED = 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1-1234567890'; +[connection master1] +WAIT_FOR_EXECUTED_GTID_SET('aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1-1234567890') +0 +[connection master] +==== 9. RESET MASTER ==== +RESET MASTER; +[connection master1] +SELECT WAIT_FOR_EXECUTED_GTID_SET('aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1,bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb:1,cccccccc-cccc-cccc-cccc-cccccccccccc:1'); +[connection master] +include/wait_for_wait_for_executed_gtid_set.inc +SET GLOBAL GTID_PURGED = 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1'; +SET GTID_NEXT = 'bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb:1'; +COMMIT; +SET GTID_NEXT = 'AUTOMATIC'; +RESET MASTER; +SET SESSION GTID_NEXT = 'cccccccc-cccc-cccc-cccc-cccccccccccc:1'; +COMMIT; +SET GTID_NEXT = 'AUTOMATIC'; +SET SESSION GTID_NEXT = 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1'; +COMMIT; +SET GTID_NEXT = 'AUTOMATIC'; +include/wait_for_wait_for_executed_gtid_set.inc +SET SESSION GTID_NEXT = 'bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb:1'; +COMMIT; +SET GTID_NEXT = 'AUTOMATIC'; +[connection master1] +WAIT_FOR_EXECUTED_GTID_SET('aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1,bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb:1,cccccccc-cccc-cccc-cccc-cccccccccccc:1') +0 +[connection master] +==== 10. Clean up ==== +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/rpl_wait_for_executed_gtid_set_with_sleep.result b/mysql-test/suite/rpl_encryption/r/rpl_wait_for_executed_gtid_set_with_sleep.result new file mode 100644 index 000000000000..297511a4d6ef --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_wait_for_executed_gtid_set_with_sleep.result @@ -0,0 +1,21 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +CREATE TABLE t1 (c1 INT NOT NULL PRIMARY KEY) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); +SELECT WAIT_FOR_EXECUTED_GTID_SET('MASTER_UUID:3-4', 10000); +INSERT INTO t1 VALUES (2); +The connection master1 should be waiting for the WAIT_FOR_EXECUTED_GTID_SET here +INSERT INTO t1 VALUES (3); +WAIT_FOR_EXECUTED_GTID_SET('MASTER_UUID:3-4', 10000) +0 +SELECT WAIT_FOR_EXECUTED_GTID_SET('MASTER_UUID:1-6', 10000); +The connection master1 should be waiting for the WAIT_FOR_EXECUTED_GTID_SET here +INSERT INTO t1 VALUES (4); +DROP TABLE t1; +WAIT_FOR_EXECUTED_GTID_SET('MASTER_UUID:1-6', 10000) +0 +include/sync_slave_sql_with_master.inc +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/rpl_wait_for_gtid_executed_unknown_uuid.result b/mysql-test/suite/rpl_encryption/r/rpl_wait_for_gtid_executed_unknown_uuid.result new file mode 100644 index 000000000000..31299f01c804 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_wait_for_gtid_executed_unknown_uuid.result @@ -0,0 +1,15 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +CREATE TABLE t1 (i int); +SELECT WAIT_FOR_EXECUTED_GTID_SET('UNKNOWN_UUID:42', 9999); +The connection master should be waiting for the WAIT_FOR_EXECUTED_GTID_SET here +SET GTID_NEXT = 'UNKNOWN_UUID:42'; +INSERT INTO t1 VALUES (1); +COMMIT; +WAIT_FOR_EXECUTED_GTID_SET('UNKNOWN_UUID:42', 9999) +0 +DROP TABLE t1; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/rpl_xa_prepare.result b/mysql-test/suite/rpl_encryption/r/rpl_xa_prepare.result new file mode 100644 index 000000000000..808c7be1d38d --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_xa_prepare.result @@ -0,0 +1,57 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +CREATE TABLE t1 (c1 INT); +CREATE TABLE t2 (c1 INT); +include/sync_slave_sql_with_master.inc +FLUSH RELAY LOGS; +CALL mtr.add_suppression("@@SESSION.GTID_NEXT cannot be set to ANONYMOUS when @@GLOBAL.GTID_MODE = ON"); +CALL mtr.add_suppression("When @@SESSION.GTID_NEXT is set to a GTID, you must explicitly set it to a different value after a COMMIT or ROLLBACK"); +CALL mtr.add_suppression("Cannot execute the current event group"); +CALL mtr.add_suppression("The slave coordinator and worker threads are stopped"); +include/stop_slave.inc +[connection master] +XA START 'trx1'; +INSERT INTO t1 VALUES (1); +INSERT INTO t2 VALUES (1); +XA END 'trx1'; +XA PREPARE 'trx1'; +XA COMMIT 'trx1'; +[connection slave] +include/rpl_receive_event_count.inc +include/show_relaylog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +slave-relay-bin.000005 # Format_desc # # SERVER_VERSION, BINLOG_VERSION +slave-relay-bin.000005 # XA_prepare # # XA PREPARE X'74727831',X'',1 +[connection master] +include/sync_slave_io_with_master.inc +include/stop_slave_io.inc +CHANGE MASTER TO RELAY_LOG_FILE='slave-relay-bin.000005', RELAY_LOG_POS=4; +START SLAVE SQL_THREAD; +include/wait_for_slave_sql_error.inc [errno=1782, 1755] +ALTER TABLE t1 engine=MyISAM; +CHANGE MASTER TO RELAY_LOG_FILE='slave-relay-bin.000004', RELAY_LOG_POS=4; +START SLAVE SQL_THREAD; +include/wait_for_slave_sql_error.inc [errno=1837] +ALTER TABLE t1 engine=Innodb; +DELETE FROM t1; +RESET MASTER; +CHANGE MASTER TO RELAY_LOG_FILE='slave-relay-bin.000004', RELAY_LOG_POS=4; +include/start_slave_sql.inc +[connection master] +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:t1, slave:t1] +include/diff_tables.inc [master:t2, slave:t2] +include/stop_slave_sql.inc +CHANGE MASTER TO RELAY_LOG_FILE='slave-relay-bin.000004', RELAY_LOG_POS=4; +include/start_slave_sql.inc +include/sync_slave_sql_with_io.inc +include/diff_tables.inc [master:t1, slave:t1] +include/diff_tables.inc [master:t2, slave:t2] +include/start_slave_io.inc +[connection master] +DROP TABLE t1, t2; +CALL mtr.add_suppression("Statement is unsafe because it is being used inside a XA transaction"); +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/rpl_xa_survive_crash_debug.result b/mysql-test/suite/rpl_encryption/r/rpl_xa_survive_crash_debug.result new file mode 100644 index 000000000000..29c3553cd8eb --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_xa_survive_crash_debug.result @@ -0,0 +1,46 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +[connection slave] +include/stop_slave.inc +[connection master] +call mtr.add_suppression("Found 1 prepared XA transactions"); +CREATE TABLE t1 (a INT); +XA START 'xid_partly_rolled_back'; +INSERT INTO t1 VALUES(1); +XA END 'xid_partly_rolled_back'; +XA PREPARE 'xid_partly_rolled_back'; +SET @@session.debug="+d,crash_after_xa_rollback"; +XA ROLLBACK 'xid_partly_rolled_back'; +ERROR HY000: Lost connection to MySQL server during query +include/rpl_start_server.inc [server_number=1] +[connection master] +include/assert.inc [Zero records in t1 is expected at master] +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Start_encryption # # +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `mtr`; INSERT INTO test_suppressions (pattern) VALUES ( NAME_CONST('pattern',_latin1'Found 1 prepared XA transactions' COLLATE 'latin1_swedish_ci')) +master-bin.000001 # Query # # COMMIT +master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a INT) +master-bin.000001 # Query # # XA START X'7869645f706172746c795f726f6c6c65645f6261636b',X'',1 +master-bin.000001 # Table_map # # table_id: # (test.t1) +master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F +master-bin.000001 # Query # # XA END X'7869645f706172746c795f726f6c6c65645f6261636b',X'',1 +master-bin.000001 # XA_prepare # # XA PREPARE X'7869645f706172746c795f726f6c6c65645f6261636b',X'',1 +master-bin.000001 # Query # # XA ROLLBACK X'7869645f706172746c795f726f6c6c65645f6261636b',X'',1 +SET @save.sql_log_bin = @@session.sql_log_bin; +SET @@session.sql_log_bin = 0; +XA ROLLBACK 'xid_partly_rolled_back'; +SET @@session.sql_log_bin = @save.sql_log_bin; +[connection slave] +include/start_slave.inc +[connection master] +include/sync_slave_sql_with_master.inc +include/assert.inc [Zero records in t1 is expected at slave] +[connection master] +DROP TABLE t1; +include/sync_slave_sql_with_master.inc +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/rpl_xa_survive_disconnect.result b/mysql-test/suite/rpl_encryption/r/rpl_xa_survive_disconnect.result new file mode 100644 index 000000000000..350fdb7f9abe --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_xa_survive_disconnect.result @@ -0,0 +1,234 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +call mtr.add_suppression("Found 2 prepared XA transactions"); +CALL mtr.add_suppression("Statement is unsafe because it is being used inside a XA transaction"); +CREATE VIEW v_processlist as SELECT * FROM performance_schema.threads where type = 'FOREGROUND'; +CREATE DATABASE d1; +CREATE DATABASE d2; +CREATE TABLE d1.t (a INT) ENGINE=innodb; +CREATE TABLE d2.t (a INT) ENGINE=innodb; +SET @@session.binlog_format= statement; +XA START '1-stmt'; +INSERT INTO d1.t VALUES (1); +Warnings: +Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it is being used inside a XA transaction. Concurrent XA transactions may deadlock on slaves when replicated using statements. +XA END '1-stmt'; +XA PREPARE '1-stmt'; +SET @@session.binlog_format= row; +XA START '1-row'; +INSERT INTO d2.t VALUES (1); +XA END '1-row'; +XA PREPARE '1-row'; +XA START '2'; +INSERT INTO d1.t VALUES (2); +XA END '2'; +XA PREPARE '2'; +XA COMMIT '2'; +XA COMMIT '1-row'; +XA COMMIT '1-stmt'; +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Start_encryption # # +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `mtr`; INSERT INTO test_suppressions (pattern) VALUES ( NAME_CONST('pattern',_latin1'Found 2 prepared XA transactions' COLLATE 'latin1_swedish_ci')) +master-bin.000001 # Query # # COMMIT +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `mtr`; INSERT INTO test_suppressions (pattern) VALUES ( NAME_CONST('pattern',_latin1'Statement is unsafe because it is being used inside a XA transaction' COLLATE 'latin1_swedish_ci')) +master-bin.000001 # Query # # COMMIT +master-bin.000001 # Query # # use `test`; CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v_processlist` AS SELECT * FROM performance_schema.threads where type = 'FOREGROUND' +master-bin.000001 # Query # # CREATE DATABASE d1 +master-bin.000001 # Query # # CREATE DATABASE d2 +master-bin.000001 # Query # # use `test`; CREATE TABLE d1.t (a INT) ENGINE=innodb +master-bin.000001 # Query # # use `test`; CREATE TABLE d2.t (a INT) ENGINE=innodb +master-bin.000001 # Query # # XA START X'312d73746d74',X'',1 +master-bin.000001 # Query # # use `test`; INSERT INTO d1.t VALUES (1) +master-bin.000001 # Query # # XA END X'312d73746d74',X'',1 +master-bin.000001 # XA_prepare # # XA PREPARE X'312d73746d74',X'',1 +master-bin.000001 # Query # # XA START X'312d726f77',X'',1 +master-bin.000001 # Table_map # # table_id: # (d2.t) +master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F +master-bin.000001 # Query # # XA END X'312d726f77',X'',1 +master-bin.000001 # XA_prepare # # XA PREPARE X'312d726f77',X'',1 +master-bin.000001 # Query # # XA START X'32',X'',1 +master-bin.000001 # Table_map # # table_id: # (d1.t) +master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F +master-bin.000001 # Query # # XA END X'32',X'',1 +master-bin.000001 # XA_prepare # # XA PREPARE X'32',X'',1 +master-bin.000001 # Query # # XA COMMIT X'32',X'',1 +master-bin.000001 # Query # # XA COMMIT X'312d726f77',X'',1 +master-bin.000001 # Query # # XA COMMIT X'312d73746d74',X'',1 +include/sync_slave_sql_with_master.inc +include/stop_slave.inc +SET @@session.binlog_format= statement; +XA START '3-stmt'; +INSERT INTO d1.t VALUES (3); +Warnings: +Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it is being used inside a XA transaction. Concurrent XA transactions may deadlock on slaves when replicated using statements. +XA END '3-stmt'; +XA PREPARE '3-stmt'; +SET @@session.binlog_format= row; +XA START '3-row'; +INSERT INTO d2.t VALUES (4); +XA END '3-row'; +XA PREPARE '3-row'; +XA START '4'; +SELECT * FROM d1.t; +a +1 +2 +XA END '4'; +XA PREPARE '4'; +XA START 'bulk_trx_10'; +INSERT INTO d1.t VALUES (10); +INSERT INTO d2.t VALUES (10); +XA END 'bulk_trx_10'; +XA PREPARE 'bulk_trx_10'; +XA START 'bulk_trx_9'; +INSERT INTO d1.t VALUES (9); +INSERT INTO d2.t VALUES (9); +XA END 'bulk_trx_9'; +XA PREPARE 'bulk_trx_9'; +XA START 'bulk_trx_8'; +INSERT INTO d1.t VALUES (8); +INSERT INTO d2.t VALUES (8); +XA END 'bulk_trx_8'; +XA PREPARE 'bulk_trx_8'; +XA START 'bulk_trx_7'; +INSERT INTO d1.t VALUES (7); +INSERT INTO d2.t VALUES (7); +XA END 'bulk_trx_7'; +XA PREPARE 'bulk_trx_7'; +XA START 'bulk_trx_6'; +INSERT INTO d1.t VALUES (6); +INSERT INTO d2.t VALUES (6); +XA END 'bulk_trx_6'; +XA PREPARE 'bulk_trx_6'; +XA START 'bulk_trx_5'; +INSERT INTO d1.t VALUES (5); +INSERT INTO d2.t VALUES (5); +XA END 'bulk_trx_5'; +XA PREPARE 'bulk_trx_5'; +XA START 'bulk_trx_4'; +INSERT INTO d1.t VALUES (4); +INSERT INTO d2.t VALUES (4); +XA END 'bulk_trx_4'; +XA PREPARE 'bulk_trx_4'; +XA START 'bulk_trx_3'; +INSERT INTO d1.t VALUES (3); +INSERT INTO d2.t VALUES (3); +XA END 'bulk_trx_3'; +XA PREPARE 'bulk_trx_3'; +XA START 'bulk_trx_2'; +INSERT INTO d1.t VALUES (2); +INSERT INTO d2.t VALUES (2); +XA END 'bulk_trx_2'; +XA PREPARE 'bulk_trx_2'; +XA START 'bulk_trx_1'; +INSERT INTO d1.t VALUES (1); +INSERT INTO d2.t VALUES (1); +XA END 'bulk_trx_1'; +XA PREPARE 'bulk_trx_1'; +include/start_slave.inc +include/sync_slave_sql_with_master.inc +include/stop_slave.inc +XA COMMIT 'bulk_trx_10'; +XA ROLLBACK 'bulk_trx_9'; +XA COMMIT 'bulk_trx_8'; +XA ROLLBACK 'bulk_trx_7'; +XA COMMIT 'bulk_trx_6'; +XA ROLLBACK 'bulk_trx_5'; +XA COMMIT 'bulk_trx_4'; +XA ROLLBACK 'bulk_trx_3'; +XA COMMIT 'bulk_trx_2'; +XA ROLLBACK 'bulk_trx_1'; +include/rpl_restart_server.inc [server_number=1] +include/start_slave.inc +*** '3-stmt','3-row' xa-transactions must be in the list *** +XA RECOVER; +formatID gtrid_length bqual_length data +1 6 0 3-stmt +1 5 0 3-row +XA COMMIT '3-stmt'; +XA ROLLBACK '3-row'; +include/sync_slave_sql_with_master.inc +XA START ''; +INSERT INTO d1.t VALUES (4); +XA END ''; +XA PREPARE ''; +XA START '0123456789012345678901234567890123456789012345678901234567890124','0123456789012345678901234567890123456789012345678901234567890124',64; +INSERT INTO d1.t VALUES (64); +XA END '0123456789012345678901234567890123456789012345678901234567890124','0123456789012345678901234567890123456789012345678901234567890124',64; +XA PREPARE '0123456789012345678901234567890123456789012345678901234567890124','0123456789012345678901234567890123456789012345678901234567890124',64; +XA START X'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF',X'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',0; +INSERT INTO d1.t VALUES (0); +XA END X'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF',X'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',0; +XA PREPARE X'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF',X'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',0; +XA COMMIT ''; +XA COMMIT '0123456789012345678901234567890123456789012345678901234567890124','0123456789012345678901234567890123456789012345678901234567890124',64; +XA COMMIT X'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF',X'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',0; +XA COMMIT 'RANDOM XID' +include/sync_slave_sql_with_master.inc +XA START 'one_phase_10'; +INSERT INTO d1.t VALUES (10); +INSERT INTO d2.t VALUES (10); +XA END 'one_phase_10'; +XA COMMIT 'one_phase_10' ONE PHASE; +XA START 'one_phase_9'; +INSERT INTO d1.t VALUES (9); +INSERT INTO d2.t VALUES (9); +XA END 'one_phase_9'; +XA COMMIT 'one_phase_9' ONE PHASE; +XA START 'one_phase_8'; +INSERT INTO d1.t VALUES (8); +INSERT INTO d2.t VALUES (8); +XA END 'one_phase_8'; +XA COMMIT 'one_phase_8' ONE PHASE; +XA START 'one_phase_7'; +INSERT INTO d1.t VALUES (7); +INSERT INTO d2.t VALUES (7); +XA END 'one_phase_7'; +XA COMMIT 'one_phase_7' ONE PHASE; +XA START 'one_phase_6'; +INSERT INTO d1.t VALUES (6); +INSERT INTO d2.t VALUES (6); +XA END 'one_phase_6'; +XA COMMIT 'one_phase_6' ONE PHASE; +XA START 'one_phase_5'; +INSERT INTO d1.t VALUES (5); +INSERT INTO d2.t VALUES (5); +XA END 'one_phase_5'; +XA COMMIT 'one_phase_5' ONE PHASE; +XA START 'one_phase_4'; +INSERT INTO d1.t VALUES (4); +INSERT INTO d2.t VALUES (4); +XA END 'one_phase_4'; +XA COMMIT 'one_phase_4' ONE PHASE; +XA START 'one_phase_3'; +INSERT INTO d1.t VALUES (3); +INSERT INTO d2.t VALUES (3); +XA END 'one_phase_3'; +XA COMMIT 'one_phase_3' ONE PHASE; +XA START 'one_phase_2'; +INSERT INTO d1.t VALUES (2); +INSERT INTO d2.t VALUES (2); +XA END 'one_phase_2'; +XA COMMIT 'one_phase_2' ONE PHASE; +XA START 'one_phase_1'; +INSERT INTO d1.t VALUES (1); +INSERT INTO d2.t VALUES (1); +XA END 'one_phase_1'; +XA COMMIT 'one_phase_1' ONE PHASE; +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:d1.t, slave:d1.t] +include/diff_tables.inc [master:d2.t, slave:d2.t] +DELETE FROM d1.t; +DELETE FROM d2.t; +DROP TABLE d1.t, d2.t; +DROP DATABASE d1; +DROP DATABASE d2; +DROP VIEW v_processlist; +include/sync_slave_sql_with_master.inc +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/rpl_xa_survive_disconnect_lsu_off.result b/mysql-test/suite/rpl_encryption/r/rpl_xa_survive_disconnect_lsu_off.result new file mode 100644 index 000000000000..350fdb7f9abe --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_xa_survive_disconnect_lsu_off.result @@ -0,0 +1,234 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +call mtr.add_suppression("Found 2 prepared XA transactions"); +CALL mtr.add_suppression("Statement is unsafe because it is being used inside a XA transaction"); +CREATE VIEW v_processlist as SELECT * FROM performance_schema.threads where type = 'FOREGROUND'; +CREATE DATABASE d1; +CREATE DATABASE d2; +CREATE TABLE d1.t (a INT) ENGINE=innodb; +CREATE TABLE d2.t (a INT) ENGINE=innodb; +SET @@session.binlog_format= statement; +XA START '1-stmt'; +INSERT INTO d1.t VALUES (1); +Warnings: +Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it is being used inside a XA transaction. Concurrent XA transactions may deadlock on slaves when replicated using statements. +XA END '1-stmt'; +XA PREPARE '1-stmt'; +SET @@session.binlog_format= row; +XA START '1-row'; +INSERT INTO d2.t VALUES (1); +XA END '1-row'; +XA PREPARE '1-row'; +XA START '2'; +INSERT INTO d1.t VALUES (2); +XA END '2'; +XA PREPARE '2'; +XA COMMIT '2'; +XA COMMIT '1-row'; +XA COMMIT '1-stmt'; +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Start_encryption # # +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `mtr`; INSERT INTO test_suppressions (pattern) VALUES ( NAME_CONST('pattern',_latin1'Found 2 prepared XA transactions' COLLATE 'latin1_swedish_ci')) +master-bin.000001 # Query # # COMMIT +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `mtr`; INSERT INTO test_suppressions (pattern) VALUES ( NAME_CONST('pattern',_latin1'Statement is unsafe because it is being used inside a XA transaction' COLLATE 'latin1_swedish_ci')) +master-bin.000001 # Query # # COMMIT +master-bin.000001 # Query # # use `test`; CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v_processlist` AS SELECT * FROM performance_schema.threads where type = 'FOREGROUND' +master-bin.000001 # Query # # CREATE DATABASE d1 +master-bin.000001 # Query # # CREATE DATABASE d2 +master-bin.000001 # Query # # use `test`; CREATE TABLE d1.t (a INT) ENGINE=innodb +master-bin.000001 # Query # # use `test`; CREATE TABLE d2.t (a INT) ENGINE=innodb +master-bin.000001 # Query # # XA START X'312d73746d74',X'',1 +master-bin.000001 # Query # # use `test`; INSERT INTO d1.t VALUES (1) +master-bin.000001 # Query # # XA END X'312d73746d74',X'',1 +master-bin.000001 # XA_prepare # # XA PREPARE X'312d73746d74',X'',1 +master-bin.000001 # Query # # XA START X'312d726f77',X'',1 +master-bin.000001 # Table_map # # table_id: # (d2.t) +master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F +master-bin.000001 # Query # # XA END X'312d726f77',X'',1 +master-bin.000001 # XA_prepare # # XA PREPARE X'312d726f77',X'',1 +master-bin.000001 # Query # # XA START X'32',X'',1 +master-bin.000001 # Table_map # # table_id: # (d1.t) +master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F +master-bin.000001 # Query # # XA END X'32',X'',1 +master-bin.000001 # XA_prepare # # XA PREPARE X'32',X'',1 +master-bin.000001 # Query # # XA COMMIT X'32',X'',1 +master-bin.000001 # Query # # XA COMMIT X'312d726f77',X'',1 +master-bin.000001 # Query # # XA COMMIT X'312d73746d74',X'',1 +include/sync_slave_sql_with_master.inc +include/stop_slave.inc +SET @@session.binlog_format= statement; +XA START '3-stmt'; +INSERT INTO d1.t VALUES (3); +Warnings: +Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it is being used inside a XA transaction. Concurrent XA transactions may deadlock on slaves when replicated using statements. +XA END '3-stmt'; +XA PREPARE '3-stmt'; +SET @@session.binlog_format= row; +XA START '3-row'; +INSERT INTO d2.t VALUES (4); +XA END '3-row'; +XA PREPARE '3-row'; +XA START '4'; +SELECT * FROM d1.t; +a +1 +2 +XA END '4'; +XA PREPARE '4'; +XA START 'bulk_trx_10'; +INSERT INTO d1.t VALUES (10); +INSERT INTO d2.t VALUES (10); +XA END 'bulk_trx_10'; +XA PREPARE 'bulk_trx_10'; +XA START 'bulk_trx_9'; +INSERT INTO d1.t VALUES (9); +INSERT INTO d2.t VALUES (9); +XA END 'bulk_trx_9'; +XA PREPARE 'bulk_trx_9'; +XA START 'bulk_trx_8'; +INSERT INTO d1.t VALUES (8); +INSERT INTO d2.t VALUES (8); +XA END 'bulk_trx_8'; +XA PREPARE 'bulk_trx_8'; +XA START 'bulk_trx_7'; +INSERT INTO d1.t VALUES (7); +INSERT INTO d2.t VALUES (7); +XA END 'bulk_trx_7'; +XA PREPARE 'bulk_trx_7'; +XA START 'bulk_trx_6'; +INSERT INTO d1.t VALUES (6); +INSERT INTO d2.t VALUES (6); +XA END 'bulk_trx_6'; +XA PREPARE 'bulk_trx_6'; +XA START 'bulk_trx_5'; +INSERT INTO d1.t VALUES (5); +INSERT INTO d2.t VALUES (5); +XA END 'bulk_trx_5'; +XA PREPARE 'bulk_trx_5'; +XA START 'bulk_trx_4'; +INSERT INTO d1.t VALUES (4); +INSERT INTO d2.t VALUES (4); +XA END 'bulk_trx_4'; +XA PREPARE 'bulk_trx_4'; +XA START 'bulk_trx_3'; +INSERT INTO d1.t VALUES (3); +INSERT INTO d2.t VALUES (3); +XA END 'bulk_trx_3'; +XA PREPARE 'bulk_trx_3'; +XA START 'bulk_trx_2'; +INSERT INTO d1.t VALUES (2); +INSERT INTO d2.t VALUES (2); +XA END 'bulk_trx_2'; +XA PREPARE 'bulk_trx_2'; +XA START 'bulk_trx_1'; +INSERT INTO d1.t VALUES (1); +INSERT INTO d2.t VALUES (1); +XA END 'bulk_trx_1'; +XA PREPARE 'bulk_trx_1'; +include/start_slave.inc +include/sync_slave_sql_with_master.inc +include/stop_slave.inc +XA COMMIT 'bulk_trx_10'; +XA ROLLBACK 'bulk_trx_9'; +XA COMMIT 'bulk_trx_8'; +XA ROLLBACK 'bulk_trx_7'; +XA COMMIT 'bulk_trx_6'; +XA ROLLBACK 'bulk_trx_5'; +XA COMMIT 'bulk_trx_4'; +XA ROLLBACK 'bulk_trx_3'; +XA COMMIT 'bulk_trx_2'; +XA ROLLBACK 'bulk_trx_1'; +include/rpl_restart_server.inc [server_number=1] +include/start_slave.inc +*** '3-stmt','3-row' xa-transactions must be in the list *** +XA RECOVER; +formatID gtrid_length bqual_length data +1 6 0 3-stmt +1 5 0 3-row +XA COMMIT '3-stmt'; +XA ROLLBACK '3-row'; +include/sync_slave_sql_with_master.inc +XA START ''; +INSERT INTO d1.t VALUES (4); +XA END ''; +XA PREPARE ''; +XA START '0123456789012345678901234567890123456789012345678901234567890124','0123456789012345678901234567890123456789012345678901234567890124',64; +INSERT INTO d1.t VALUES (64); +XA END '0123456789012345678901234567890123456789012345678901234567890124','0123456789012345678901234567890123456789012345678901234567890124',64; +XA PREPARE '0123456789012345678901234567890123456789012345678901234567890124','0123456789012345678901234567890123456789012345678901234567890124',64; +XA START X'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF',X'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',0; +INSERT INTO d1.t VALUES (0); +XA END X'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF',X'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',0; +XA PREPARE X'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF',X'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',0; +XA COMMIT ''; +XA COMMIT '0123456789012345678901234567890123456789012345678901234567890124','0123456789012345678901234567890123456789012345678901234567890124',64; +XA COMMIT X'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF',X'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',0; +XA COMMIT 'RANDOM XID' +include/sync_slave_sql_with_master.inc +XA START 'one_phase_10'; +INSERT INTO d1.t VALUES (10); +INSERT INTO d2.t VALUES (10); +XA END 'one_phase_10'; +XA COMMIT 'one_phase_10' ONE PHASE; +XA START 'one_phase_9'; +INSERT INTO d1.t VALUES (9); +INSERT INTO d2.t VALUES (9); +XA END 'one_phase_9'; +XA COMMIT 'one_phase_9' ONE PHASE; +XA START 'one_phase_8'; +INSERT INTO d1.t VALUES (8); +INSERT INTO d2.t VALUES (8); +XA END 'one_phase_8'; +XA COMMIT 'one_phase_8' ONE PHASE; +XA START 'one_phase_7'; +INSERT INTO d1.t VALUES (7); +INSERT INTO d2.t VALUES (7); +XA END 'one_phase_7'; +XA COMMIT 'one_phase_7' ONE PHASE; +XA START 'one_phase_6'; +INSERT INTO d1.t VALUES (6); +INSERT INTO d2.t VALUES (6); +XA END 'one_phase_6'; +XA COMMIT 'one_phase_6' ONE PHASE; +XA START 'one_phase_5'; +INSERT INTO d1.t VALUES (5); +INSERT INTO d2.t VALUES (5); +XA END 'one_phase_5'; +XA COMMIT 'one_phase_5' ONE PHASE; +XA START 'one_phase_4'; +INSERT INTO d1.t VALUES (4); +INSERT INTO d2.t VALUES (4); +XA END 'one_phase_4'; +XA COMMIT 'one_phase_4' ONE PHASE; +XA START 'one_phase_3'; +INSERT INTO d1.t VALUES (3); +INSERT INTO d2.t VALUES (3); +XA END 'one_phase_3'; +XA COMMIT 'one_phase_3' ONE PHASE; +XA START 'one_phase_2'; +INSERT INTO d1.t VALUES (2); +INSERT INTO d2.t VALUES (2); +XA END 'one_phase_2'; +XA COMMIT 'one_phase_2' ONE PHASE; +XA START 'one_phase_1'; +INSERT INTO d1.t VALUES (1); +INSERT INTO d2.t VALUES (1); +XA END 'one_phase_1'; +XA COMMIT 'one_phase_1' ONE PHASE; +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:d1.t, slave:d1.t] +include/diff_tables.inc [master:d2.t, slave:d2.t] +DELETE FROM d1.t; +DELETE FROM d2.t; +DROP TABLE d1.t, d2.t; +DROP DATABASE d1; +DROP DATABASE d2; +DROP VIEW v_processlist; +include/sync_slave_sql_with_master.inc +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/rpl_xa_survive_disconnect_mixed_engines.result b/mysql-test/suite/rpl_encryption/r/rpl_xa_survive_disconnect_mixed_engines.result new file mode 100644 index 000000000000..e905ee9b6b62 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_xa_survive_disconnect_mixed_engines.result @@ -0,0 +1,100 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +[connection master] +CALL mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT"); +SET @@session.binlog_direct_non_transactional_updates := if(floor(rand()*10)%2,'ON','OFF'); +CREATE TABLE t (a INT) ENGINE=innodb; +CREATE TABLE tm (a INT) ENGINE=myisam; +=== COMMIT === +XA START 'xa_trx'; +INSERT INTO tm VALUES (1); +INSERT INTO t VALUES (1); +XA END 'xa_trx'; +XA PREPARE 'xa_trx'; +XA COMMIT 'xa_trx' ; +XA START 'xa_trx'; +INSERT INTO t VALUES (2); +INSERT INTO tm VALUES (2); +XA END 'xa_trx'; +XA PREPARE 'xa_trx'; +XA COMMIT 'xa_trx' ; +XA START 'xa_trx'; +INSERT INTO tm VALUES (3); +XA END 'xa_trx'; +XA PREPARE 'xa_trx'; +XA COMMIT 'xa_trx' ; +include/sync_slave_sql_with_master.inc +[connection master] +=== COMMIT ONE PHASE === +XA START 'xa_trx'; +INSERT INTO tm VALUES (1); +INSERT INTO t VALUES (1); +XA END 'xa_trx'; +XA COMMIT 'xa_trx' ONE PHASE; +XA START 'xa_trx'; +INSERT INTO t VALUES (2); +INSERT INTO tm VALUES (2); +XA END 'xa_trx'; +XA COMMIT 'xa_trx' ONE PHASE; +XA START 'xa_trx'; +INSERT INTO tm VALUES (3); +XA END 'xa_trx'; +XA COMMIT 'xa_trx' ONE PHASE; +include/sync_slave_sql_with_master.inc +[connection master] +=== ROLLBACK with PREPARE === +XA START 'xa_trx'; +INSERT INTO tm VALUES (1); +INSERT INTO t VALUES (1); +XA END 'xa_trx'; +XA PREPARE 'xa_trx'; +xa rollback 'xa_trx' ; +Warnings: +Warning 1196 Some non-transactional changed tables couldn't be rolled back +XA START 'xa_trx'; +INSERT INTO t VALUES (2); +INSERT INTO tm VALUES (2); +XA END 'xa_trx'; +XA PREPARE 'xa_trx'; +xa rollback 'xa_trx' ; +Warnings: +Warning 1196 Some non-transactional changed tables couldn't be rolled back +XA START 'xa_trx'; +INSERT INTO tm VALUES (3); +XA END 'xa_trx'; +XA PREPARE 'xa_trx'; +xa rollback 'xa_trx' ; +Warnings: +Warning 1196 Some non-transactional changed tables couldn't be rolled back +include/sync_slave_sql_with_master.inc +[connection master] +=== ROLLBACK with no PREPARE === +XA START 'xa_trx'; +INSERT INTO tm VALUES (1); +INSERT INTO t VALUES (1); +XA END 'xa_trx'; +xa rollback 'xa_trx' ; +Warnings: +Warning 1196 Some non-transactional changed tables couldn't be rolled back +XA START 'xa_trx'; +INSERT INTO t VALUES (2); +INSERT INTO tm VALUES (2); +XA END 'xa_trx'; +xa rollback 'xa_trx' ; +Warnings: +Warning 1196 Some non-transactional changed tables couldn't be rolled back +XA START 'xa_trx'; +INSERT INTO tm VALUES (3); +XA END 'xa_trx'; +xa rollback 'xa_trx' ; +Warnings: +Warning 1196 Some non-transactional changed tables couldn't be rolled back +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:tm, slave:tm] +[connection master] +DROP TABLE t, tm; +include/sync_slave_sql_with_master.inc +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/r/rpl_xa_survive_disconnect_table.result b/mysql-test/suite/rpl_encryption/r/rpl_xa_survive_disconnect_table.result new file mode 100644 index 000000000000..350fdb7f9abe --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_xa_survive_disconnect_table.result @@ -0,0 +1,234 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +call mtr.add_suppression("Found 2 prepared XA transactions"); +CALL mtr.add_suppression("Statement is unsafe because it is being used inside a XA transaction"); +CREATE VIEW v_processlist as SELECT * FROM performance_schema.threads where type = 'FOREGROUND'; +CREATE DATABASE d1; +CREATE DATABASE d2; +CREATE TABLE d1.t (a INT) ENGINE=innodb; +CREATE TABLE d2.t (a INT) ENGINE=innodb; +SET @@session.binlog_format= statement; +XA START '1-stmt'; +INSERT INTO d1.t VALUES (1); +Warnings: +Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it is being used inside a XA transaction. Concurrent XA transactions may deadlock on slaves when replicated using statements. +XA END '1-stmt'; +XA PREPARE '1-stmt'; +SET @@session.binlog_format= row; +XA START '1-row'; +INSERT INTO d2.t VALUES (1); +XA END '1-row'; +XA PREPARE '1-row'; +XA START '2'; +INSERT INTO d1.t VALUES (2); +XA END '2'; +XA PREPARE '2'; +XA COMMIT '2'; +XA COMMIT '1-row'; +XA COMMIT '1-stmt'; +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Start_encryption # # +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `mtr`; INSERT INTO test_suppressions (pattern) VALUES ( NAME_CONST('pattern',_latin1'Found 2 prepared XA transactions' COLLATE 'latin1_swedish_ci')) +master-bin.000001 # Query # # COMMIT +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Query # # use `mtr`; INSERT INTO test_suppressions (pattern) VALUES ( NAME_CONST('pattern',_latin1'Statement is unsafe because it is being used inside a XA transaction' COLLATE 'latin1_swedish_ci')) +master-bin.000001 # Query # # COMMIT +master-bin.000001 # Query # # use `test`; CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v_processlist` AS SELECT * FROM performance_schema.threads where type = 'FOREGROUND' +master-bin.000001 # Query # # CREATE DATABASE d1 +master-bin.000001 # Query # # CREATE DATABASE d2 +master-bin.000001 # Query # # use `test`; CREATE TABLE d1.t (a INT) ENGINE=innodb +master-bin.000001 # Query # # use `test`; CREATE TABLE d2.t (a INT) ENGINE=innodb +master-bin.000001 # Query # # XA START X'312d73746d74',X'',1 +master-bin.000001 # Query # # use `test`; INSERT INTO d1.t VALUES (1) +master-bin.000001 # Query # # XA END X'312d73746d74',X'',1 +master-bin.000001 # XA_prepare # # XA PREPARE X'312d73746d74',X'',1 +master-bin.000001 # Query # # XA START X'312d726f77',X'',1 +master-bin.000001 # Table_map # # table_id: # (d2.t) +master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F +master-bin.000001 # Query # # XA END X'312d726f77',X'',1 +master-bin.000001 # XA_prepare # # XA PREPARE X'312d726f77',X'',1 +master-bin.000001 # Query # # XA START X'32',X'',1 +master-bin.000001 # Table_map # # table_id: # (d1.t) +master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F +master-bin.000001 # Query # # XA END X'32',X'',1 +master-bin.000001 # XA_prepare # # XA PREPARE X'32',X'',1 +master-bin.000001 # Query # # XA COMMIT X'32',X'',1 +master-bin.000001 # Query # # XA COMMIT X'312d726f77',X'',1 +master-bin.000001 # Query # # XA COMMIT X'312d73746d74',X'',1 +include/sync_slave_sql_with_master.inc +include/stop_slave.inc +SET @@session.binlog_format= statement; +XA START '3-stmt'; +INSERT INTO d1.t VALUES (3); +Warnings: +Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it is being used inside a XA transaction. Concurrent XA transactions may deadlock on slaves when replicated using statements. +XA END '3-stmt'; +XA PREPARE '3-stmt'; +SET @@session.binlog_format= row; +XA START '3-row'; +INSERT INTO d2.t VALUES (4); +XA END '3-row'; +XA PREPARE '3-row'; +XA START '4'; +SELECT * FROM d1.t; +a +1 +2 +XA END '4'; +XA PREPARE '4'; +XA START 'bulk_trx_10'; +INSERT INTO d1.t VALUES (10); +INSERT INTO d2.t VALUES (10); +XA END 'bulk_trx_10'; +XA PREPARE 'bulk_trx_10'; +XA START 'bulk_trx_9'; +INSERT INTO d1.t VALUES (9); +INSERT INTO d2.t VALUES (9); +XA END 'bulk_trx_9'; +XA PREPARE 'bulk_trx_9'; +XA START 'bulk_trx_8'; +INSERT INTO d1.t VALUES (8); +INSERT INTO d2.t VALUES (8); +XA END 'bulk_trx_8'; +XA PREPARE 'bulk_trx_8'; +XA START 'bulk_trx_7'; +INSERT INTO d1.t VALUES (7); +INSERT INTO d2.t VALUES (7); +XA END 'bulk_trx_7'; +XA PREPARE 'bulk_trx_7'; +XA START 'bulk_trx_6'; +INSERT INTO d1.t VALUES (6); +INSERT INTO d2.t VALUES (6); +XA END 'bulk_trx_6'; +XA PREPARE 'bulk_trx_6'; +XA START 'bulk_trx_5'; +INSERT INTO d1.t VALUES (5); +INSERT INTO d2.t VALUES (5); +XA END 'bulk_trx_5'; +XA PREPARE 'bulk_trx_5'; +XA START 'bulk_trx_4'; +INSERT INTO d1.t VALUES (4); +INSERT INTO d2.t VALUES (4); +XA END 'bulk_trx_4'; +XA PREPARE 'bulk_trx_4'; +XA START 'bulk_trx_3'; +INSERT INTO d1.t VALUES (3); +INSERT INTO d2.t VALUES (3); +XA END 'bulk_trx_3'; +XA PREPARE 'bulk_trx_3'; +XA START 'bulk_trx_2'; +INSERT INTO d1.t VALUES (2); +INSERT INTO d2.t VALUES (2); +XA END 'bulk_trx_2'; +XA PREPARE 'bulk_trx_2'; +XA START 'bulk_trx_1'; +INSERT INTO d1.t VALUES (1); +INSERT INTO d2.t VALUES (1); +XA END 'bulk_trx_1'; +XA PREPARE 'bulk_trx_1'; +include/start_slave.inc +include/sync_slave_sql_with_master.inc +include/stop_slave.inc +XA COMMIT 'bulk_trx_10'; +XA ROLLBACK 'bulk_trx_9'; +XA COMMIT 'bulk_trx_8'; +XA ROLLBACK 'bulk_trx_7'; +XA COMMIT 'bulk_trx_6'; +XA ROLLBACK 'bulk_trx_5'; +XA COMMIT 'bulk_trx_4'; +XA ROLLBACK 'bulk_trx_3'; +XA COMMIT 'bulk_trx_2'; +XA ROLLBACK 'bulk_trx_1'; +include/rpl_restart_server.inc [server_number=1] +include/start_slave.inc +*** '3-stmt','3-row' xa-transactions must be in the list *** +XA RECOVER; +formatID gtrid_length bqual_length data +1 6 0 3-stmt +1 5 0 3-row +XA COMMIT '3-stmt'; +XA ROLLBACK '3-row'; +include/sync_slave_sql_with_master.inc +XA START ''; +INSERT INTO d1.t VALUES (4); +XA END ''; +XA PREPARE ''; +XA START '0123456789012345678901234567890123456789012345678901234567890124','0123456789012345678901234567890123456789012345678901234567890124',64; +INSERT INTO d1.t VALUES (64); +XA END '0123456789012345678901234567890123456789012345678901234567890124','0123456789012345678901234567890123456789012345678901234567890124',64; +XA PREPARE '0123456789012345678901234567890123456789012345678901234567890124','0123456789012345678901234567890123456789012345678901234567890124',64; +XA START X'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF',X'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',0; +INSERT INTO d1.t VALUES (0); +XA END X'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF',X'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',0; +XA PREPARE X'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF',X'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',0; +XA COMMIT ''; +XA COMMIT '0123456789012345678901234567890123456789012345678901234567890124','0123456789012345678901234567890123456789012345678901234567890124',64; +XA COMMIT X'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF',X'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',0; +XA COMMIT 'RANDOM XID' +include/sync_slave_sql_with_master.inc +XA START 'one_phase_10'; +INSERT INTO d1.t VALUES (10); +INSERT INTO d2.t VALUES (10); +XA END 'one_phase_10'; +XA COMMIT 'one_phase_10' ONE PHASE; +XA START 'one_phase_9'; +INSERT INTO d1.t VALUES (9); +INSERT INTO d2.t VALUES (9); +XA END 'one_phase_9'; +XA COMMIT 'one_phase_9' ONE PHASE; +XA START 'one_phase_8'; +INSERT INTO d1.t VALUES (8); +INSERT INTO d2.t VALUES (8); +XA END 'one_phase_8'; +XA COMMIT 'one_phase_8' ONE PHASE; +XA START 'one_phase_7'; +INSERT INTO d1.t VALUES (7); +INSERT INTO d2.t VALUES (7); +XA END 'one_phase_7'; +XA COMMIT 'one_phase_7' ONE PHASE; +XA START 'one_phase_6'; +INSERT INTO d1.t VALUES (6); +INSERT INTO d2.t VALUES (6); +XA END 'one_phase_6'; +XA COMMIT 'one_phase_6' ONE PHASE; +XA START 'one_phase_5'; +INSERT INTO d1.t VALUES (5); +INSERT INTO d2.t VALUES (5); +XA END 'one_phase_5'; +XA COMMIT 'one_phase_5' ONE PHASE; +XA START 'one_phase_4'; +INSERT INTO d1.t VALUES (4); +INSERT INTO d2.t VALUES (4); +XA END 'one_phase_4'; +XA COMMIT 'one_phase_4' ONE PHASE; +XA START 'one_phase_3'; +INSERT INTO d1.t VALUES (3); +INSERT INTO d2.t VALUES (3); +XA END 'one_phase_3'; +XA COMMIT 'one_phase_3' ONE PHASE; +XA START 'one_phase_2'; +INSERT INTO d1.t VALUES (2); +INSERT INTO d2.t VALUES (2); +XA END 'one_phase_2'; +XA COMMIT 'one_phase_2' ONE PHASE; +XA START 'one_phase_1'; +INSERT INTO d1.t VALUES (1); +INSERT INTO d2.t VALUES (1); +XA END 'one_phase_1'; +XA COMMIT 'one_phase_1' ONE PHASE; +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:d1.t, slave:d1.t] +include/diff_tables.inc [master:d2.t, slave:d2.t] +DELETE FROM d1.t; +DELETE FROM d2.t; +DROP TABLE d1.t, d2.t; +DROP DATABASE d1; +DROP DATABASE d2; +DROP VIEW v_processlist; +include/sync_slave_sql_with_master.inc +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/rpl_1slave_base.cnf b/mysql-test/suite/rpl_encryption/rpl_1slave_base.cnf new file mode 100644 index 000000000000..c9897f3d4946 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/rpl_1slave_base.cnf @@ -0,0 +1,48 @@ +# Use default setting for mysqld processes +!include include/default_mysqld.cnf +!include include/default_client.cnf + +[mysqld.1] + +# Run the master.sh script before starting this process +#!run-master-sh + +log-bin= master-bin + +[mysqld.2] +# Run the slave.sh script before starting this process +#!run-slave-sh + +# Append -slave.opt file to the list of argument used when +# starting the mysqld +#!use-slave-opt + +log-bin= slave-bin +relay-log= slave-relay-bin + +log-slave-updates +master-retry-count= 10 + +# Values reported by slave when it connect to master +# and shows up in SHOW SLAVE STATUS; +report-host= 127.0.0.1 +report-port= @mysqld.2.port +report-user= root + +skip-slave-start + +# Directory where slaves find the dumps generated by "load data" +# on the server. The path need to have constant length otherwise +# test results will vary, thus a relative path is used. +slave-load-tmpdir= ../../tmp + + +[ENV] +MASTER_MYPORT= @mysqld.1.port +MASTER_MYSOCK= @mysqld.1.socket +MASTER_X_MYSOCK= @mysqld.1.loose-mysqlx-socket + +SLAVE_MYPORT= @mysqld.2.port +SLAVE_MYSOCK= @mysqld.2.socket +SLAVE_X_MYSOCK= @mysqld.2.loose-mysqlx-socket + diff --git a/mysql-test/suite/rpl_encryption/t/disabled.def b/mysql-test/suite/rpl_encryption/t/disabled.def new file mode 100644 index 000000000000..fa7b4e1ca0b4 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/disabled.def @@ -0,0 +1,12 @@ +############################################################################## +# +# List the test cases that are to be disabled temporarily. +# +# Separate the test case name and the comment with ':'. +# +# : BUG# +# +# Do not use any TAB characters for whitespace. +# +############################################################################## +rpl_gtid_split_statements: Bug #1731959 testcase rpl_gtid_split_statements is failing on trunk diff --git a/mysql-test/suite/rpl_encryption/t/encrypted_master.cnf b/mysql-test/suite/rpl_encryption/t/encrypted_master.cnf new file mode 100644 index 000000000000..c31fe72f74e9 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/encrypted_master.cnf @@ -0,0 +1,6 @@ +!include ../my.cnf + +[mysqld.2] +log-slave-updates +log-bin=slave-bin +relay-log=slave-relay-bin diff --git a/mysql-test/suite/rpl_encryption/t/encrypted_master.test b/mysql-test/suite/rpl_encryption/t/encrypted_master.test new file mode 100644 index 000000000000..6e09f2333f3f --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/encrypted_master.test @@ -0,0 +1,166 @@ +# +# The test checks that basic DDL and DML events are encrypted +# in the binary log on master. +# The test is to be run with all binlog formats +# (combinations for rpl_init.inc take care of that). +# +# +# The test runs with the encrypted master and non-encrypted slave. +# It generates a sequence of events on master, and checks that +# - all events are encrypted on master; +# - slave is able to replicate from the master; +# - relay logs and binary logs are not encrypted on slave. +# +# The same exercise is repeated +# - with binlog checksums; +# - with default checksums and minimal binlog row image +# + +--source include/have_innodb.inc +--source include/have_myisam.inc +--source include/not_gtid_enabled.inc +# This test fails for binlog-format='row' due to Bug#1735185: +# Assert fail in field.cc. The below check should be removed once +# this bug gets fixed. +--source include/not_binlog_format_row.inc + +--echo ################# +--echo # Initialization +--echo ################# + +--source include/master-slave.inc +--enable_connect_log + +# We stop SQL thread because we want to have +# all relay logs at the end of the test flow + +--connection server_2 +--disable_connect_log +--source include/stop_slave_sql.inc +--enable_connect_log + +--connection server_1 + +SET @binlog_checksum.save= @@global.binlog_checksum; +SET @master_verify_checksum.save= @@global.master_verify_checksum; +SET @binlog_row_image.save= @@global.binlog_row_image; + +--echo #################################################### +--echo # Test 1: simple binlog, no checksum +--echo #################################################### + +--connection server_1 + +SET GLOBAL binlog_checksum= NONE; +SET GLOBAL master_verify_checksum= 0; + +--source testdata.inc + +--echo #################################################### +--echo # Test 2: binlog with checksum +--echo #################################################### + +--connection server_1 + +SET GLOBAL binlog_checksum= CRC32; +SET GLOBAL master_verify_checksum= 1; + +--source testdata.inc + +--echo #################################################### +--echo # Test 3: binlog with binlog_row_image=minimal +--echo #################################################### + +--connection server_1 + +SET GLOBAL binlog_checksum= NONE; +SET GLOBAL master_verify_checksum= 0; +SET GLOBAL binlog_row_image= MINIMAL; +SET binlog_row_image= MINIMAL; + +--source testdata.inc + +--echo ############################# +--echo # Final checks for the master +--echo ############################# + +--let $master_datadir= `SELECT @@datadir` + +--echo # Here we try to find several plain texts that would appear in not encrypted binlog files. +--echo # The searches should fail as we expect the binlog files to be encrypted. + +--let PRINT_SEARCH_RESULT=1 +--let SEARCH_FILE= $master_datadir/master-bin.0* +--let SEARCH_PATTERN= _to_encrypt +--source include/search_pattern_in_file.inc + +--let SEARCH_FILE= $master_datadir/master-bin.0* +--let SEARCH_PATTERN= COMMIT +--source include/search_pattern_in_file.inc + +--let SEARCH_FILE= $master_datadir/master-bin.0* +--let SEARCH_PATTERN= TIMESTAMP +--source include/search_pattern_in_file.inc + +--disable_connect_log +--source include/save_master_pos.inc +--enable_connect_log + +--echo ############################# +--echo # Final checks for the slave +--echo ############################# + +# Wait for the IO thread to write everything to relay logs + +--connection server_2 + +--let $slave_datadir= `SELECT @@datadir` + +--disable_connect_log +--source include/sync_slave_io.inc + +# Check that relay logs are unencrypted + +--let SEARCH_FILE= $slave_datadir/slave-relay-bin.0* +--let SEARCH_PATTERN= _to_encrypt +--source include/search_pattern_in_file.inc + +--let SEARCH_FILE= $slave_datadir/slave-relay-bin.0* +--let SEARCH_PATTERN= COMMIT +--source include/search_pattern_in_file.inc + +--let SEARCH_FILE= $slave_datadir/slave-relay-bin.0* +--let SEARCH_PATTERN= TIMESTAMP +--source include/search_pattern_in_file.inc + + +# Re-enable SQL thread, let it catch up with IO thread +# and check slave binary logs + +--source include/start_slave.inc +--source include/sync_slave_sql_with_io.inc +--enable_connect_log + +--let SEARCH_FILE= $slave_datadir/slave-bin.0* +--let SEARCH_PATTERN= _to_encrypt +--source include/search_pattern_in_file.inc + +--let SEARCH_FILE= $slave_datadir/slave-bin.0* +--let SEARCH_PATTERN= COMMIT +--source include/search_pattern_in_file.inc + +--let SEARCH_FILE= $slave_datadir/slave-bin.0* +--let SEARCH_PATTERN= TIMESTAMP +--source include/search_pattern_in_file.inc + +--echo ########## +--echo # Cleanup +--echo ########## + +--connection server_1 +SET GLOBAL binlog_checksum= @binlog_checksum.save; +SET GLOBAL master_verify_checksum= @master_verify_checksum.save; +SET GLOBAL binlog_row_image= @binlog_row_image.save; + +--disable_connect_log +--source include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/t/encrypted_master_lost_key-master.opt b/mysql-test/suite/rpl_encryption/t/encrypted_master_lost_key-master.opt new file mode 100644 index 000000000000..876a7ce1de59 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/encrypted_master_lost_key-master.opt @@ -0,0 +1 @@ +--master-verify-checksum=1 diff --git a/mysql-test/suite/rpl_encryption/t/encrypted_master_lost_key.test b/mysql-test/suite/rpl_encryption/t/encrypted_master_lost_key.test new file mode 100644 index 000000000000..ccb577b4316b --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/encrypted_master_lost_key.test @@ -0,0 +1,214 @@ +# +# The test checks effects and workarounds for the situation when +# the key used to encrypt previous binary logs on master has been lost, +# and master runs with a different one. +# +# The test starts with encrypted binlogs on master. +# It stops replication, generates a few statement and row events +# on the master, then restarts the server with encrypted binlog, +# but with different key storage file. +# +# Then it resumes replication and checks what happens when the master +# feed the encrypted logs to the slave (slave SQL thread should +# produce and error). +# +# Then the test resets the slave, configures it to start from a "good" +# master binlog log, for which the master has a key, starts replication +# and checks that it works. +# +# Then it resets the slave again, purges binary logs on master up +# to the "good" one, starts replication and checks that it works. +# + +call mtr.add_suppression('event read from binlog did not pass crc check'); +call mtr.add_suppression('Event crc check failed! Most likely there is event corruption'); +call mtr.add_suppression("Error reading GTIDs from binary log"); +call mtr.add_suppression('Found invalid event in binary log'); + +--source include/have_binlog_format_mixed.inc +--source include/not_gtid_enabled.inc + +--echo ################# +--echo # Initialization +--echo ################# + +# We stop replication because we want it to happen after the switch +--let $rpl_skip_start_slave= 1 +--source include/master-slave.inc +--enable_connect_log + +call mtr.add_suppression('event read from binlog did not pass crc check'); + +--echo ##################################################### +--echo # Pre-test 1: Initial key value +--echo ##################################################### + +CREATE TABLE table1_to_encrypt ( + pk INT AUTO_INCREMENT PRIMARY KEY, + ts TIMESTAMP NULL, + b BLOB +); + +INSERT INTO table1_to_encrypt VALUES (NULL,NOW(),'data_to_encrypt'); +INSERT INTO table1_to_encrypt SELECT NULL,NOW(),b FROM table1_to_encrypt; +SET binlog_format=ROW; +INSERT INTO table1_to_encrypt SELECT NULL,NOW(),b FROM table1_to_encrypt; +INSERT INTO table1_to_encrypt SELECT NULL,NOW(),b FROM table1_to_encrypt; + +# Make sure that binary logs are encrypted by making sure that plain text +# table name is not present in the binary log + +--let $master_datadir= `SELECT @@datadir` +--let PRINT_SEARCH_RESULT=1 +--let SEARCH_FILE= $master_datadir/master-bin.0* +--let SEARCH_PATTERN= table1_to_encrypt +--source include/search_pattern_in_file.inc + +--echo ################################################################ +--echo # Pre-test 2: restart master with a different keys' storage file +--echo ################################################################ + +UNINSTALL PLUGIN keyring_file; + +--let $rpl_server_parameters= --loose-keyring-file-data=$MYSQL_TMP_DIR/master_lose_key + +--let $rpl_server_number= 1 +--let $rpl_omit_print_server_parameters= 1 +--source include/rpl_restart_server.inc + +CREATE TABLE table2_to_encrypt ( + pk INT AUTO_INCREMENT PRIMARY KEY, + ts TIMESTAMP NULL, + b BLOB +); + +INSERT INTO table2_to_encrypt VALUES (NULL,NOW(),'data_to_encrypt'); +INSERT INTO table2_to_encrypt SELECT NULL,NOW(),b FROM table2_to_encrypt; +SET binlog_format=ROW; +INSERT INTO table2_to_encrypt SELECT NULL,NOW(),b FROM table2_to_encrypt; +INSERT INTO table2_to_encrypt SELECT NULL,NOW(),b FROM table2_to_encrypt; + +--echo # Make sure that binary logs are encrypted by making sure that plain text +--echo # table name is not present in the binary log + +--let PRINT_SEARCH_RESULT=1 +--let SEARCH_FILE= $master_datadir/master-bin.0* +--let SEARCH_PATTERN= table2_to_encrypt +--source include/search_pattern_in_file.inc + +UNINSTALL PLUGIN keyring_file; + +--echo ##################################################### +--echo # Pre-test 3: restart master again with the right key +--echo ##################################################### + +--let $rpl_server_parameters= +--let $rpl_server_number= 1 +--source include/rpl_restart_server.inc + +--let $good_master_binlog= query_get_value(SHOW MASTER STATUS,File,1) + +CREATE TABLE table3_to_encrypt ( + pk INT AUTO_INCREMENT PRIMARY KEY, + ts TIMESTAMP NULL, + b BLOB +); + +INSERT INTO table3_to_encrypt VALUES (NULL,NOW(),'data_to_encrypt'); +INSERT INTO table3_to_encrypt SELECT NULL,NOW(),b FROM table3_to_encrypt; +INSERT INTO table3_to_encrypt SELECT NULL,NOW(),b FROM table3_to_encrypt; +FLUSH BINARY LOGS; +INSERT INTO table3_to_encrypt SELECT NULL,NOW(),b FROM table3_to_encrypt; + +--source include/save_master_pos.inc + +--echo ##################################################### +--echo # Test 1: Check that if master has an encrypted +--echo # binary log which it cannot decrypt, it +--echo # still feeds events to the slave, and SQL +--echo # thread produces an expected error upon +--echo # receiving these unreadable events . +--echo # This behavior is confirmed in MDEV-11323 +--echo ##################################################### +--connection server_2 + +--disable_connect_log +START SLAVE SQL_THREAD; +START SLAVE IO_THREAD; +--let $slave_io_errno= 1236 +--source include/wait_for_slave_io_error.inc +--enable_connect_log + +# Here we should see only table1_to_encrypt and its contents, +# because it was logged with the initial key +--sorted_result +SHOW TABLES; +--let $wait_condition=SELECT COUNT(*)=1 FROM information_schema.tables WHERE table_name = "table1_to_encrypt" +--source include/wait_condition.inc +--let $wait_condition=SELECT COUNT(*)=8 FROM table1_to_encrypt +--source include/wait_condition.inc + +--echo ##################################################### +--echo # Test 2: check that replication works if it starts +--echo # from a good binary log +--echo ##################################################### +--connection server_2 + +--disable_connect_log +--source include/stop_slave.inc +RESET SLAVE ALL; +DROP DATABASE test; +CREATE DATABASE test; +USE test; +--replace_result $SERVER_MYPORT_1 +eval CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=$SERVER_MYPORT_1, MASTER_USER='root', MASTER_LOG_FILE='$good_master_binlog'; +--source include/start_slave.inc +--enable_connect_log +--source include/sync_slave_sql.inc + +--sorted_result +SHOW TABLES; + +--echo ##################################################### +--echo # Test 3: check that replication works if we purge +--echo # master logs up to the good one +--echo ##################################################### +--connection server_2 + +--connection server_1 +eval PURGE BINARY LOGS TO '$good_master_binlog'; + +--connection server_2 +--disable_connect_log +--source include/stop_slave.inc +RESET SLAVE ALL; +DROP DATABASE test; +CREATE DATABASE test; +USE test; +--replace_result $SERVER_MYPORT_1 +eval CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=$SERVER_MYPORT_1, MASTER_USER='root'; +--source include/start_slave.inc +--enable_connect_log +--source include/sync_slave_sql.inc + +--sorted_result +SHOW TABLES; + +--echo ########## +--echo # Cleanup +--echo ########## + +--connection server_2 + +--echo # Recreate table_1_to_encrypt and table_2_to_encrypt on slave so the master-slave sync would +--echo # finished OK. + +CREATE TABLE table1_to_encrypt LIKE table3_to_encrypt; +CREATE TABLE table2_to_encrypt LIKE table3_to_encrypt; + +--connection server_1 + +DROP TABLE table1_to_encrypt, table2_to_encrypt, table3_to_encrypt; + +--disable_connect_log +--source include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/t/encrypted_master_switch_to_unencrypted.cnf b/mysql-test/suite/rpl_encryption/t/encrypted_master_switch_to_unencrypted.cnf new file mode 100644 index 000000000000..0e5a9ecde7de --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/encrypted_master_switch_to_unencrypted.cnf @@ -0,0 +1,5 @@ +!include ../my.cnf + +[mysqld.1] +encrypt-binlog=0 +binlog-format='MIXED' diff --git a/mysql-test/suite/rpl_encryption/t/encrypted_master_switch_to_unencrypted.test b/mysql-test/suite/rpl_encryption/t/encrypted_master_switch_to_unencrypted.test new file mode 100644 index 000000000000..e6a8f15642d5 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/encrypted_master_switch_to_unencrypted.test @@ -0,0 +1,166 @@ +# The test starts with unencrypted master. +# It stops replication, generates a few statement and row events +# on the master, then restarts the server with encrypted binlog, +# generates some more events and restarts it back without encryption +# (no encryption plugin). +# Then it resumes replication and checks what happens when the server +# tries to feed the binary logs (included the encrypted ones) +# to the slave. +# + +--source include/have_binlog_format_mixed.inc + +--echo ################# +--echo # Initialization +--echo ################# + +--source include/master-slave.inc +--enable_connect_log + +# We stop replication because we want it to happen after the switch + +--connection slave +call mtr.add_suppression("Event crc check failed! Most likely there is event corruption"); + +--disable_connect_log +--source include/stop_slave.inc +--enable_connect_log + +--echo ##################################################### +--echo # Part 1: unencrypted master +--echo ##################################################### + +--connection master +call mtr.add_suppression("Got fatal error 1236 from master when reading data from binary log: 'event read from binlog did not pass crc check"); +call mtr.add_suppression("Event crc check failed! Most likely there is event corruption"); +call mtr.add_suppression("Error reading GTIDs from binary log"); + +--let $master_datadir= `SELECT @@datadir` + +CREATE TABLE table1_no_encryption ( + pk INT AUTO_INCREMENT PRIMARY KEY, + ts TIMESTAMP NULL, + b BLOB +); + +INSERT INTO table1_no_encryption VALUES (NULL,NOW(),'data_no_encryption'); +INSERT INTO table1_no_encryption SELECT NULL,NOW(),b FROM table1_no_encryption; +FLUSH BINARY LOGS; +SET binlog_format=ROW; +INSERT INTO table1_no_encryption SELECT NULL,NOW(),b FROM table1_no_encryption; +INSERT INTO table1_no_encryption SELECT NULL,NOW(),b FROM table1_no_encryption; + +--echo # Make sure that binary logs are not encrypted + +--let PRINT_SEARCH_RESULT=1 +--let SEARCH_RANGE = 500000 +--let SEARCH_FILE= $master_datadir/master-bin.0* +--let SEARCH_PATTERN= table1_no_encryption +--source include/search_pattern_in_file.inc + +# We are storing the position now, because up to this point the slave +# should be able to synchronize with master +--source include/save_master_pos.inc + +--echo ##################################################### +--echo # Part 2: restart master, now with binlog encryption +--echo ##################################################### + +--let $rpl_server_parameters= --encrypt-binlog=1 --early-plugin-load=$KEYRING_PLUGIN --keyring_file_data=$MYSQL_TMP_DIR/keyring/keys.txt +--let $rpl_server_number= 1 +--let $rpl_omit_print_server_parameters= 1 +--source include/rpl_restart_server.inc + +CREATE TABLE table2_to_encrypt ( + pk INT AUTO_INCREMENT PRIMARY KEY, + ts TIMESTAMP NULL, + b BLOB +); + +INSERT INTO table2_to_encrypt VALUES (NULL,NOW(),'data_to_encrypt'); +INSERT INTO table2_to_encrypt SELECT NULL,NOW(),b FROM table2_to_encrypt; +FLUSH BINARY LOGS; +SET binlog_format=ROW; +INSERT INTO table2_to_encrypt SELECT NULL,NOW(),b FROM table2_to_encrypt; +INSERT INTO table2_to_encrypt SELECT NULL,NOW(),b FROM table2_to_encrypt; + +--echo # Make sure that binary logs are encrypted + +--let SEARCH_FILE= $master_datadir/master-bin.0* +--let SEARCH_PATTERN= table2_to_encrypt +--source include/search_pattern_in_file.inc + +--echo ##################################################### +--echo # Part 3: restart master again without encryption +--echo ##################################################### + +# After the restart master will look for Previous GTIDs in previous binlog files. +# We are using incorrect key as we are fetching percona binlog key from different keyring than +# before the restart. master-verify-checksum should help us detect that the encrypted events +# are incorrect as checksum will not be correct. + +# Legit Format description events is never encrypted - as it comes before Start encryption event and is the +# first event in binlog. However garbage data can get interpreted as Format description event - in case of this event +# there are additional checks before checking its checksum thus we can get error related to it: +call mtr.add_suppression("Found invalid Format description event in binary log"); + +--let $rpl_server_parameters= --encrypt-binlog=0 +--let $rpl_server_number= 1 +--source include/rpl_restart_server.inc + +CREATE TABLE table3_no_encryption ( + pk INT AUTO_INCREMENT PRIMARY KEY, + ts TIMESTAMP NULL, + b BLOB +); + +INSERT INTO table3_no_encryption VALUES (NULL,NOW(),'data_no_encryption'); +INSERT INTO table3_no_encryption SELECT NULL,NOW(),b FROM table3_no_encryption; +INSERT INTO table3_no_encryption SELECT NULL,NOW(),b FROM table3_no_encryption; + +--echo ##################################################### +--echo # Check: resume replication and check how it goes +--echo ##################################################### + +--connection slave +start slave; +# The slave should be able to synchronize with master up to +# the previously saved position (when the log was still unencrypted) +--source include/sync_slave_sql.inc + +--connection master +# Now save the current position and make slave to try to syncrhonize. +# It shouldn't work, the slave IO thread is expected to abort with an error +--source include/save_master_pos.inc + +--connection slave +--let slave_io_errno=1236 +--source include/wait_for_slave_io_error.inc + +--sorted_result +SHOW TABLES; + +--disable_connect_log +--source include/stop_slave.inc +--enable_connect_log +RESET SLAVE; + +--echo ########## +--echo # Cleanup +--echo ########## + +--connection master + +SELECT COUNT(*) FROM table1_no_encryption; +SELECT COUNT(*) FROM table2_to_encrypt; +SELECT COUNT(*) FROM table3_no_encryption; +DROP TABLE table1_no_encryption, table2_to_encrypt, table3_no_encryption; +RESET MASTER; + +--connection slave +--disable_connect_log +--source include/start_slave.inc +DROP TABLE table1_no_encryption; + +--connection master +--source include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/t/encrypted_master_unload_keyring.cnf b/mysql-test/suite/rpl_encryption/t/encrypted_master_unload_keyring.cnf new file mode 100644 index 000000000000..4f0af1e6d06b --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/encrypted_master_unload_keyring.cnf @@ -0,0 +1,24 @@ +!include include/default_mysqld.cnf +!include include/default_client.cnf + +!include ../rpl_1slave_base.cnf + +[mysqld.1] +master-verify-checksum=1 + +[mysqld.2] +log-slave-updates +log-bin=slave-bin +relay-log=slave-relay-bin + +[ENV] + +# We will adopt tests with master-slave setup as well as rpl_init setup, +# so need both sets of variables +MASTER_MYPORT= @mysqld.1.port +SERVER_MYPORT_1= @mysqld.1.port +SERVER_MYSOCK_1= @mysqld.1.socket + +SLAVE_MYPORT= @mysqld.2.port +SERVER_MYPORT_2= @mysqld.2.port +SERVER_MYSOCK_2= @mysqld.2.socket diff --git a/mysql-test/suite/rpl_encryption/t/encrypted_master_unload_keyring.test b/mysql-test/suite/rpl_encryption/t/encrypted_master_unload_keyring.test new file mode 100644 index 000000000000..30fe8bf662bc --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/encrypted_master_unload_keyring.test @@ -0,0 +1,207 @@ +# This test checks whether master and slave servers can be restarted without keyring and cope +# with encrypted binary log/relaylog. In both cases server will look for previous gtids in previous +# binary logs/relaylogs - even when server cannot decrypt previous binary logs/relaylogs. + +--source include/not_gtid_enabled.inc +# Different binlog formats can generate different number of binlog files. When we try to decrypt an encrypted binlog file +# with invalid key we check if we got expected warning, expected number of times. For each binlog file we get a warning, +# so the number of binlog files must be constant and thus we limit the test to mix format only. +--source include/have_binlog_format_mixed.inc + +--echo ################# +--echo # Initialization +--echo ################# + +--let $rpl_skip_start_slave= 1 +--source include/master-slave.inc + +--connection slave +call mtr.add_suppression("Event crc check failed! Most likely there is event corruption"); + +--connection master +--let $master_datadir= `SELECT @@datadir` + +--let $rpl_server_parameters= $KEYRING_PLUGIN_OPT --encrypt-binlog=1 --early-plugin-load=$KEYRING_PLUGIN --keyring_file_data=$MYSQL_TMP_DIR/keyring/keys.txt +--let $rpl_server_number= 1 +--let $rpl_omit_print_server_parameters= 1 +--source include/rpl_restart_server.inc + +--echo ##################################################### +--echo # Part 1: encrypted master +--echo ##################################################### + +--connection master +call mtr.add_suppression("Event crc check failed! Most likely there is event corruption"); + +CREATE TABLE table1_encryption ( + pk INT AUTO_INCREMENT PRIMARY KEY, + ts TIMESTAMP NULL, + b BLOB +); + +INSERT INTO table1_encryption VALUES (NULL,NOW(),'data_encryption'); +INSERT INTO table1_encryption SELECT NULL,NOW(),b FROM table1_encryption; +FLUSH BINARY LOGS; +SET binlog_format=ROW; +INSERT INTO table1_encryption SELECT NULL,NOW(),b FROM table1_encryption; +INSERT INTO table1_encryption SELECT NULL,NOW(),b FROM table1_encryption; + +# Make sure that binary logs are encrypted + +--let PRINT_SEARCH_RESULT=1 +--let SEARCH_FILE= $master_datadir/master-bin.0* +--let SEARCH_PATTERN= table1_encryption +--source include/search_pattern_in_file.inc + +--echo ################################################################################# +--echo # Part 2: restart master, without binlog encryption and without keyring plugin +--echo ################################################################################# + +# Since keyring is now unavailable the master will not be able to decrypt previously +# encrypted binlogs. It will try to read Previous_gtid from encrypted binlog and will +# fail to do that. However, this is not a fatal error, only a warning. + +call mtr.add_suppression("Error reading GTIDs from binary log"); +call mtr.add_suppression("Error initializing decryption while reading GTIDs from binary log"); + +--let $rpl_server_parameters= --encrypt-binlog=0 --log-error=$MYSQLTEST_VARDIR/tmp/mysqld_master.err +--let $rpl_server_number= 1 +--let $rpl_omit_print_server_parameters= 1 +--source include/rpl_restart_server.inc + +--echo # Check that plugin is not installed +query_vertical SELECT PLUGIN_NAME,PLUGIN_VERSION,PLUGIN_STATUS +FROM INFORMATION_SCHEMA.PLUGINS WHERE plugin_name='keyring_file'; + +CREATE TABLE table2_no_encryption ( + pk INT AUTO_INCREMENT PRIMARY KEY, + ts TIMESTAMP NULL, + b BLOB +); + +INSERT INTO table2_no_encryption VALUES (NULL,NOW(),'data_to_encrypt'); +INSERT INTO table2_no_encryption SELECT NULL,NOW(),b FROM table2_no_encryption; +FLUSH BINARY LOGS; +SET binlog_format=ROW; +INSERT INTO table2_no_encryption SELECT NULL,NOW(),b FROM table2_no_encryption; +INSERT INTO table2_no_encryption SELECT NULL,NOW(),b FROM table2_no_encryption; + +# Make sure that binary logs are not encrypted + +--let SEARCH_FILE= $master_datadir/master-bin.0* +--let SEARCH_PATTERN= table2_no_encryption +--source include/search_pattern_in_file.inc + +# Makes sure we got the expected warnings + +--let $assert_file= $MYSQLTEST_VARDIR/tmp/mysqld_master.err +--let $assert_count = 1 +--let $assert_select = Error reading GTIDs from binary log: -1 +--let $assert_text = Found the expected warning "Error reading GTIDs from binary log: -1" in master's error log. +--source include/assert_grep.inc + +--let $assert_file= $MYSQLTEST_VARDIR/tmp/mysqld_master.err +--let $assert_count = 1 +--let $assert_select = Error initializing decryption while reading GTIDs from binary log +--let $assert_text = Found the expected warning "Error initializing decryption while reading GTIDs from binary log" in slave's error log. +--source include/assert_grep.inc + + +--echo ################################################ +--echo # Part 3: restart master again with encryption +--echo ################################################ + +--let $rpl_server_parameters= $KEYRING_PLUGIN_OPT --encrypt-binlog=1 --early-plugin-load=$KEYRING_PLUGIN --keyring_file_data=$MYSQL_TMP_DIR/keyring/keys.txt +--let $rpl_server_number= 1 +--source include/rpl_restart_server.inc + +--echo ##################################################### +--echo # Part 4: restart slave with encryption +--echo ##################################################### + +--connection slave + +--let $rpl_server_parameters= $KEYRING_PLUGIN_OPT --encrypt-binlog=1 --early-plugin-load=$KEYRING_PLUGIN --keyring_file_data=$MYSQL_TMP_DIR/keyring/keys2.txt --master-verify-checksum=1 +--let $rpl_server_number= 2 +--source include/rpl_restart_server.inc + +# With encryption turned on again *on master* - master should be able to read both encrypted and unencrypted binlogs +# thus allowing slave to synchronize + +--source include/start_slave.inc + +--connection master +--source include/sync_slave_sql_with_master.inc + +# Now the slave is in sync with master and is encrypted + +--echo ################################################################################# +--echo # Part 5: restart slave, without binlog encryption and without keyring plugin +--echo ################################################################################# + +# Since keyring is now unavailable slave will not be able to decrypt previously +# encrypted relay logs. It will try to read Previous_gtid from encrypted relay log and will +# fail to do that. However, this is not a fatal error, only a warning. + +# Legit Format description events is never encrypted - as it comes before Start encryption event and is the +# first event in binlog. However garbage data can get interpreted as Format description event - in case of this event +# there are additional checks before checking its checksum thus we can get error related to it: +call mtr.add_suppression("Found invalid Format description event in binary log"); +call mtr.add_suppression("Error reading GTIDs from relaylog"); +call mtr.add_suppression("Error initializing decryption while reading GTIDs from relaylog"); + +--let $rpl_server_parameters= --encrypt-binlog=0 --master_verify_checksum=1 --log-error=$MYSQLTEST_VARDIR/tmp/mysqld_slave.err +--let $rpl_server_number= 2 +--let $rpl_omit_print_server_parameters= 1 +--source include/rpl_restart_server.inc + +--connection slave + +--echo # Check that plugin is not installed +query_vertical SELECT PLUGIN_NAME,PLUGIN_VERSION,PLUGIN_STATUS +FROM INFORMATION_SCHEMA.PLUGINS WHERE plugin_name='keyring_file'; + +# Makes sure we got the expected warnings + +--let $assert_file= $MYSQLTEST_VARDIR/tmp/mysqld_slave.err +--let $assert_count = 2 +--let $assert_select = Error reading GTIDs from relaylog: -1 +--let $assert_text = Found the expected warning "Error reading GTIDs from relaylog: -1" in slave's error log. +--source include/assert_grep.inc + +--let $assert_file= $MYSQLTEST_VARDIR/tmp/mysqld_slave.err +--let $assert_count = 2 +--let $assert_select = Error initializing decryption while reading GTIDs from relaylog +--let $assert_text = Error initializing decryption while reading GTIDs from relaylog +--source include/assert_grep.inc + +--echo ################################################################################# +--echo # Part 6: restart slave with keyring plugin +--echo ################################################################################# + +# In order to synchronize slave with master, slave needs to be able to decrypt +# relay logs, thus we restart the slave with keyring plugin (however, without encrypt_binlog +# turned out as having access to the correct key is enough to decrypt relaylog/binarylog) + +--let $rpl_server_parameters= $KEYRING_PLUGIN_OPT --encrypt-binlog=0 --early-plugin-load=$KEYRING_PLUGIN --keyring_file_data=$MYSQL_TMP_DIR/keyring/keys2.txt +--let $rpl_server_number= 2 +--source include/rpl_restart_server.inc + +--source include/start_slave.inc + +--connection master +--source include/sync_slave_sql_with_master.inc + +--echo ########## +--echo # Cleanup +--echo ########## + +--connection master + +DROP TABLE table1_encryption; +DROP TABLE table2_no_encryption; + +--remove_file $MYSQLTEST_VARDIR/tmp/mysqld_master.err +--remove_file $MYSQLTEST_VARDIR/tmp/mysqld_slave.err + +--source include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/t/encrypted_slave.cnf b/mysql-test/suite/rpl_encryption/t/encrypted_slave.cnf new file mode 100644 index 000000000000..02fc3d783bf3 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/encrypted_slave.cnf @@ -0,0 +1,11 @@ +!include ../my.cnf + +[mysqld.1] +encrypt-binlog=0 + +[mysqld.2] +encrypt-binlog +master-verify-checksum=1 +plugin_dir=@env.KEYRING_PLUGIN_DIR +early-plugin-load=@env.KEYRING_PLUGIN +keyring_file_data=../../tmp/keyring2 diff --git a/mysql-test/suite/rpl_encryption/t/encrypted_slave.test b/mysql-test/suite/rpl_encryption/t/encrypted_slave.test new file mode 100644 index 000000000000..593e817723e0 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/encrypted_slave.test @@ -0,0 +1,122 @@ +# +# The test checks that basic DDL and DML events are encrypted +# in the relay and binary logs on slave. +# The test is to be run with all binlog formats +# (combinations for rpl_init.inc take care of that). +# +# The test runs with the non-encrypted master and encrypted slave. +# It generates a sequence of events on master and checks that +# relay logs and binary logs are encrypted on slave. +# + +--source include/have_innodb.inc +--source include/have_myisam.inc +--source include/not_gtid_enabled.inc + +--echo ################# +--echo # Initialization +--echo ################# + +--source include/master-slave.inc + +--enable_connect_log +--connection server_2 + +# We stop SQL thread because we want to have +# all relay logs at the end of the test flow + +--disable_connect_log +--source include/stop_slave_sql.inc +--enable_connect_log + +--echo ################# +--echo # Test flow +--echo ################# + +--connection server_1 +--source testdata.inc + +--echo ################# +--echo # Master binlog checks +--echo ################# + +--let $master_datadir= `SELECT @@datadir` + +--echo # Let's make sure that master binlog files are not encrypted by finding some +--echo # plain texts that we know would appear in not encrypted binary log files. + +--let PRINT_SEARCH_RESULT=1 +--let SEARCH_FILE= $master_datadir/master-bin.0* +--let SEARCH_PATTERN= _to_encrypt +--source include/search_pattern_in_file.inc + +--let SEARCH_FILE= $master_datadir/master-bin.0* +--let SEARCH_PATTERN= COMMIT +--source include/search_pattern_in_file.inc + +--let SEARCH_FILE= $master_datadir/master-bin.0* +--let SEARCH_PATTERN= TIMESTAMP +--source include/search_pattern_in_file.inc + +--let $sync_slave_connection=server_2 +--source include/sync_slave_io_with_master.inc + +--echo ################# +--echo # Relay log checks +--echo ################# + +--connection server_2 + +--let $slave_datadir= `SELECT @@datadir` + +--echo # Here we try to find several plain texts that would appear in not encrypted binlog files. +--echo # The searches should fail as we expect the binlog files to be encrypted. + +--let SEARCH_FILE= $slave_datadir/slave-relay-bin.0* +--let SEARCH_PATTERN= _to_encrypt +--source include/search_pattern_in_file.inc + +--let SEARCH_FILE= $slave_datadir/slave-relay-bin.0* +--let SEARCH_PATTERN= COMMIT +--source include/search_pattern_in_file.inc + +--let SEARCH_FILE= $slave_datadir/slave-relay-bin.0* +--let SEARCH_PATTERN= TIMESTAMP +--source include/search_pattern_in_file.inc + +--echo ################# +--echo # Slave binlog checks +--echo ################# + +# Re-enable SQL thread, let it catch up with IO thread +# and check slave binary logs + +--disable_connect_log +--source include/start_slave.inc +--source include/sync_slave_sql_with_io.inc +--enable_connect_log + +--connection server_1 +--let $sync_slave_connection=server_2 +--source include/sync_slave_io_with_master.inc + +--connection server_2 + +--let SEARCH_FILE= $slave_datadir/slave-bin.0* +--let SEARCH_PATTERN= _to_encrypt +--source include/search_pattern_in_file.inc + +--let SEARCH_FILE= $slave_datadir/slave-bin.0* +--let SEARCH_PATTERN= COMMIT +--source include/search_pattern_in_file.inc + +--let SEARCH_FILE= $slave_datadir/slave-bin.0* +--let SEARCH_PATTERN= TIMESTAMP +--source include/search_pattern_in_file.inc + +--echo ########## +--echo # Cleanup +--echo ########## + +--disable_connect_log +--source include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/t/encryption_combo.cnf b/mysql-test/suite/rpl_encryption/t/encryption_combo.cnf new file mode 100644 index 000000000000..0e5a9ecde7de --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/encryption_combo.cnf @@ -0,0 +1,5 @@ +!include ../my.cnf + +[mysqld.1] +encrypt-binlog=0 +binlog-format='MIXED' diff --git a/mysql-test/suite/rpl_encryption/t/encryption_combo.test b/mysql-test/suite/rpl_encryption/t/encryption_combo.test new file mode 100644 index 000000000000..28399efc329b --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/encryption_combo.test @@ -0,0 +1,138 @@ +# +# The test checks that master with decryption capabilities can switch +# between encrypted and unencrypted logs (with server restart), +# and can feed the mix of encrypted/unencrypted logs to a slave. +# +# The test starts with unencrypted master. +# It stops replication, generates a few statement and row events +# generates some more events and restarts it back with unencrypted binlog. +# Then it resumes replication and checks that all events +# are replicated successfully. +# + +--source include/have_binlog_format_mixed.inc + +--echo ################# +--echo # Initialization +--echo ################# + +--source include/master-slave.inc + +--enable_connect_log + +# We stop replication because we want it to happen after the switch + +--connection server_2 +--disable_connect_log +--source include/stop_slave.inc +--enable_connect_log + +--echo ##################################################### +--echo # Part 1: unencrypted master +--echo ##################################################### + +--connection server_1 + +CREATE TABLE table1_no_encryption ( + pk INT AUTO_INCREMENT PRIMARY KEY, + ts TIMESTAMP NULL, + b BLOB +); + +INSERT INTO table1_no_encryption VALUES (NULL,NOW(),'data_no_encryption'); +INSERT INTO table1_no_encryption SELECT NULL,NOW(),b FROM table1_no_encryption; +FLUSH BINARY LOGS; +SET binlog_format=ROW; +INSERT INTO table1_no_encryption SELECT NULL,NOW(),b FROM table1_no_encryption; +INSERT INTO table1_no_encryption SELECT NULL,NOW(),b FROM table1_no_encryption; + +# Make sure that binary logs are not encrypted + +--let $master_datadir= `SELECT @@datadir` + +--let PRINT_SEARCH_RESULT=1 +--let SEARCH_FILE= $master_datadir/master-bin.0* +--let SEARCH_PATTERN= table1_no_encryption +--source include/search_pattern_in_file.inc + +--echo ##################################################### +--echo # Part 2: restart master, now with binlog encryption +--echo ##################################################### + +UNINSTALL PLUGIN keyring_file; + +--let $rpl_server_parameters= --encrypt-binlog=1 +--let $rpl_server_number= 1 +--source include/rpl_restart_server.inc + +CREATE TABLE table2_to_encrypt ( + pk INT AUTO_INCREMENT PRIMARY KEY, + ts TIMESTAMP NULL, + b BLOB +); + +INSERT INTO table2_to_encrypt VALUES (NULL,NOW(),'data_to_encrypt'); +INSERT INTO table2_to_encrypt SELECT NULL,NOW(),b FROM table2_to_encrypt; +FLUSH BINARY LOGS; +SET binlog_format=ROW; +INSERT INTO table2_to_encrypt SELECT NULL,NOW(),b FROM table2_to_encrypt; +INSERT INTO table2_to_encrypt SELECT NULL,NOW(),b FROM table2_to_encrypt; + +--echo # Here we try to find several plain texts that would appear in not encrypted binlog files. +--echo # The searches should fail as we expect the binlog files to be encrypted. + +--let SEARCH_FILE= $master_datadir/master-bin.0* +--let SEARCH_PATTERN= table2_to_encrypt +--source include/search_pattern_in_file.inc + +--echo ##################################################### +--echo # Part 3: restart master again without encryption +--echo ##################################################### + +UNINSTALL PLUGIN keyring_file; + +--let $rpl_server_parameters= --encrypt-binlog=0 +--let $rpl_server_number= 1 +--source include/rpl_restart_server.inc + +CREATE TABLE table3_no_encryption ( + pk INT AUTO_INCREMENT PRIMARY KEY, + ts TIMESTAMP NULL, + b BLOB +); + +INSERT INTO table3_no_encryption VALUES (NULL,NOW(),'data_no_encryption'); +INSERT INTO table3_no_encryption SELECT NULL,NOW(),b FROM table3_no_encryption; +INSERT INTO table3_no_encryption SELECT NULL,NOW(),b FROM table3_no_encryption; + +--save_master_pos + +--echo ##################################################### +--echo # Check: resume replication and check that it works +--echo ##################################################### +--connection server_2 + +--disable_connect_log +--source include/start_slave.inc +--enable_connect_log +--sync_with_master + +--sorted_result +SHOW TABLES; + +--echo ########## +--echo # Cleanup +--echo ########## + +--connection server_1 + +SELECT COUNT(*) FROM table1_no_encryption; +SELECT COUNT(*) FROM table2_to_encrypt; +SELECT COUNT(*) FROM table3_no_encryption; +DROP TABLE table1_no_encryption, table2_to_encrypt, table3_no_encryption; + +UNINSTALL PLUGIN keyring_file; + +--disable_connect_log +--source include/sync_slave_sql_with_master.inc +--source include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/t/rpl_binlog_errors.cnf b/mysql-test/suite/rpl_encryption/t/rpl_binlog_errors.cnf new file mode 100644 index 000000000000..9018559b4867 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_binlog_errors.cnf @@ -0,0 +1,7 @@ +!include ../my.cnf + +[mysqld.1] +max_binlog_size=4096 + +[mysqld.2] +skip-slave-start diff --git a/mysql-test/suite/rpl_encryption/t/rpl_binlog_errors.test b/mysql-test/suite/rpl_encryption/t/rpl_binlog_errors.test new file mode 100644 index 000000000000..0a2fb482bb35 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_binlog_errors.test @@ -0,0 +1 @@ +--source suite/rpl/t/rpl_binlog_errors.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_corruption.cnf b/mysql-test/suite/rpl_encryption/t/rpl_corruption.cnf new file mode 100644 index 000000000000..ec106ca189fa --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_corruption.cnf @@ -0,0 +1,9 @@ +!include ../my.cnf + +[mysqld.1] +binlog-checksum=CRC32 +master-verify-checksum=1 + +[mysqld.2] +binlog-checksum=CRC32 +slave-sql-verify-checksum=1 diff --git a/mysql-test/suite/rpl_encryption/t/rpl_corruption.test b/mysql-test/suite/rpl_encryption/t/rpl_corruption.test new file mode 100644 index 000000000000..f6ba29443987 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_corruption.test @@ -0,0 +1 @@ +--source suite/rpl/t/rpl_corruption.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_crash_safe_master.test b/mysql-test/suite/rpl_encryption/t/rpl_crash_safe_master.test new file mode 100644 index 000000000000..95c5442a30e4 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_crash_safe_master.test @@ -0,0 +1 @@ +--source suite/rpl/t/rpl_crash_safe_master.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_gtid_events.cnf b/mysql-test/suite/rpl_encryption/t/rpl_gtid_events.cnf new file mode 100644 index 000000000000..bcdc845ba157 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_gtid_events.cnf @@ -0,0 +1,11 @@ +!include ../my.cnf + +[mysqld.2] +plugin_dir=@env.KEYRING_PLUGIN_DIR +early-plugin-load=@env.KEYRING_PLUGIN +keyring_file_data=../../tmp/keyring2 +log-slave-updates +log-bin=slave-bin +relay-log=slave-relay-bin +encrypt-binlog=1 +master-verify-checksum=1 diff --git a/mysql-test/suite/rpl_encryption/t/rpl_gtid_events.test b/mysql-test/suite/rpl_encryption/t/rpl_gtid_events.test new file mode 100644 index 000000000000..ecbdf470c3e8 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_gtid_events.test @@ -0,0 +1 @@ +--source suite/rpl/t/rpl_gtid_events.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_gtid_execution.cnf b/mysql-test/suite/rpl_encryption/t/rpl_gtid_execution.cnf new file mode 100644 index 000000000000..8167c1c6edfc --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_gtid_execution.cnf @@ -0,0 +1,11 @@ +!include ../my.cnf + +[mysqld.1] +gtid-mode=ON +enforce-gtid-consistency=ON +debug=d,+allow_gtid_unsafe_non_transactional_updates + +[mysqld.2] +gtid-mode=ON +enforce-gtid-consistency=ON +debug=d,+allow_gtid_unsafe_non_transactional_updates diff --git a/mysql-test/suite/rpl_encryption/t/rpl_gtid_execution.test b/mysql-test/suite/rpl_encryption/t/rpl_gtid_execution.test new file mode 100644 index 000000000000..2de1ac2b6cc8 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_gtid_execution.test @@ -0,0 +1 @@ +--source suite/rpl/t/rpl_gtid_execution.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_gtid_failover.cnf b/mysql-test/suite/rpl_encryption/t/rpl_gtid_failover.cnf new file mode 100644 index 000000000000..6d0e3b354624 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_gtid_failover.cnf @@ -0,0 +1,21 @@ +!include ../my.cnf + +[mysqld.1] +gtid-mode=on +enforce-gtid-consistency +log-slave-updates + +[mysqld.2] +gtid-mode=on +enforce-gtid-consistency +log-slave-updates + +[mysqld.3] +gtid-mode=on +enforce-gtid-consistency +log-slave-updates + +[ENV] +SERVER_MYPORT_3= @mysqld.3.port +SERVER_MYSOCK_3= @mysqld.3.socket + diff --git a/mysql-test/suite/rpl_encryption/t/rpl_gtid_failover.test b/mysql-test/suite/rpl_encryption/t/rpl_gtid_failover.test new file mode 100644 index 000000000000..fe6664da525a --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_gtid_failover.test @@ -0,0 +1 @@ +--source suite/rpl/t/rpl_gtid_failover.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_gtid_loaddata_s.cnf b/mysql-test/suite/rpl_encryption/t/rpl_gtid_loaddata_s.cnf new file mode 100644 index 000000000000..f2dc22b6563f --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_gtid_loaddata_s.cnf @@ -0,0 +1,15 @@ +!include ../my.cnf + +[mysqld.1] +gtid-mode=ON +enforce-gtid-consistency=ON + +[mysqld.2] +gtid-mode=ON +enforce-gtid-consistency=ON +binlog-ignore-db=test +plugin_dir=@env.KEYRING_PLUGIN_DIR +early-plugin-load=@env.KEYRING_PLUGIN +keyring_file_data=../../tmp/keyring2 +encrypt-binlog=1 +master-verify-checksum=1 diff --git a/mysql-test/suite/rpl_encryption/t/rpl_gtid_loaddata_s.test b/mysql-test/suite/rpl_encryption/t/rpl_gtid_loaddata_s.test new file mode 100644 index 000000000000..67d802751dca --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_gtid_loaddata_s.test @@ -0,0 +1 @@ +--source suite/rpl/t/rpl_gtid_loaddata_s.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_gtid_mts_relay_log_recovery_auto_pos_on_off.cnf b/mysql-test/suite/rpl_encryption/t/rpl_gtid_mts_relay_log_recovery_auto_pos_on_off.cnf new file mode 100644 index 000000000000..f1cfaef82da0 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_gtid_mts_relay_log_recovery_auto_pos_on_off.cnf @@ -0,0 +1,17 @@ +!include ../my.cnf + +[mysqld.1] +binlog-format='MIXED' +gtid-mode=on +enforce-gtid-consistency=on +log-slave-updates=on + +[mysqld.2] +gtid-mode=on +enforce-gtid-consistency=on +log-slave-updates=on +relay_log_info_repository=TABLE +master_info_repository=TABLE +sync_master_info=1 +relay-log-recovery=1 +slave-transaction-retries=0 diff --git a/mysql-test/suite/rpl_encryption/t/rpl_gtid_mts_relay_log_recovery_auto_pos_on_off.test b/mysql-test/suite/rpl_encryption/t/rpl_gtid_mts_relay_log_recovery_auto_pos_on_off.test new file mode 100644 index 000000000000..9b84af7664f3 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_gtid_mts_relay_log_recovery_auto_pos_on_off.test @@ -0,0 +1 @@ +--source suite/rpl/t/rpl_gtid_mts_relay_log_recovery_auto_pos_on_off.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_gtid_spanned_trx.cnf b/mysql-test/suite/rpl_encryption/t/rpl_gtid_spanned_trx.cnf new file mode 100644 index 000000000000..e35649a8dab6 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_gtid_spanned_trx.cnf @@ -0,0 +1,18 @@ +!include ../my.cnf + +[mysqld.1] +gtid-mode=on +enforce-gtid-consistency +encrypt_binlog=1 +binlog-format='STATEMENT' + +[mysqld.2] +plugin_dir=@env.KEYRING_PLUGIN_DIR +early-plugin-load=@env.KEYRING_PLUGIN +keyring_file_data=../../tmp/keyring2 +gtid-mode=on +enforce-gtid-consistency +encrypt_binlog=1 +slave-sql-verify-checksum=1 +master-verify-checksum=1 + diff --git a/mysql-test/suite/rpl_encryption/t/rpl_gtid_spanned_trx.test b/mysql-test/suite/rpl_encryption/t/rpl_gtid_spanned_trx.test new file mode 100644 index 000000000000..316b3bd89cc2 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_gtid_spanned_trx.test @@ -0,0 +1 @@ +--source suite/rpl/t/rpl_gtid_spanned_trx.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_gtid_split_statements.cnf b/mysql-test/suite/rpl_encryption/t/rpl_gtid_split_statements.cnf new file mode 100644 index 000000000000..8c064e3cec2b --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_gtid_split_statements.cnf @@ -0,0 +1,9 @@ +!include ../my.cnf + +[mysqld.1] +gtid-mode=ON +enforce-gtid-consistency=ON + +[mysqld.2] +gtid-mode=ON +enforce-gtid-consistency=ON diff --git a/mysql-test/suite/rpl_encryption/t/rpl_gtid_split_statements.test b/mysql-test/suite/rpl_encryption/t/rpl_gtid_split_statements.test new file mode 100644 index 000000000000..c292df2f4141 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_gtid_split_statements.test @@ -0,0 +1,2 @@ +--source include/have_gtid.inc +--source extra/rpl_tests/rpl_split_statements.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_gtid_sql_until_before_after.cnf b/mysql-test/suite/rpl_encryption/t/rpl_gtid_sql_until_before_after.cnf new file mode 100644 index 000000000000..8c064e3cec2b --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_gtid_sql_until_before_after.cnf @@ -0,0 +1,9 @@ +!include ../my.cnf + +[mysqld.1] +gtid-mode=ON +enforce-gtid-consistency=ON + +[mysqld.2] +gtid-mode=ON +enforce-gtid-consistency=ON diff --git a/mysql-test/suite/rpl_encryption/t/rpl_gtid_sql_until_before_after.test b/mysql-test/suite/rpl_encryption/t/rpl_gtid_sql_until_before_after.test new file mode 100644 index 000000000000..aaedc199381b --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_gtid_sql_until_before_after.test @@ -0,0 +1 @@ +--source suite/rpl/t/rpl_gtid_sql_until_before_after.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_gtid_table_repository_split_trx.cnf b/mysql-test/suite/rpl_encryption/t/rpl_gtid_table_repository_split_trx.cnf new file mode 100644 index 000000000000..30a4d27d90f6 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_gtid_table_repository_split_trx.cnf @@ -0,0 +1,13 @@ +!include ../my.cnf + +[mysqld.1] +gtid-mode=ON +enforce-gtid-consistency=ON +binlog-format='STATEMENT' + +[mysqld.2] +gtid-mode=ON +enforce-gtid-consistency=ON +binlog-format='STATEMENT' +log-slave-updates=off +relay_log_info_repository=TABLE diff --git a/mysql-test/suite/rpl_encryption/t/rpl_gtid_table_repository_split_trx.test b/mysql-test/suite/rpl_encryption/t/rpl_gtid_table_repository_split_trx.test new file mode 100644 index 000000000000..56785b43f256 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_gtid_table_repository_split_trx.test @@ -0,0 +1 @@ +--source suite/rpl/t/rpl_gtid_table_repository_split_trx.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_gtid_temp_table.cnf b/mysql-test/suite/rpl_encryption/t/rpl_gtid_temp_table.cnf new file mode 100644 index 000000000000..0659657f8a12 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_gtid_temp_table.cnf @@ -0,0 +1,14 @@ +!include ../my.cnf + +[mysqld.1] +gtid-mode=ON +enforce-gtid-consistency=ON + +[mysqld.2] +gtid-mode=ON +enforce-gtid-consistency=ON +plugin_dir=@env.KEYRING_PLUGIN_DIR +early-plugin-load=@env.KEYRING_PLUGIN +keyring_file_data=../../tmp/keyring2 +encrypt-binlog=1 +master-verify-checksum=1 diff --git a/mysql-test/suite/rpl_encryption/t/rpl_gtid_temp_table.test b/mysql-test/suite/rpl_encryption/t/rpl_gtid_temp_table.test new file mode 100644 index 000000000000..622ec75465bd --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_gtid_temp_table.test @@ -0,0 +1 @@ +--source suite/rpl/t/rpl_gtid_temp_table.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_gtid_transaction_split_across_relay_logs.cnf b/mysql-test/suite/rpl_encryption/t/rpl_gtid_transaction_split_across_relay_logs.cnf new file mode 100644 index 000000000000..be7442aeec86 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_gtid_transaction_split_across_relay_logs.cnf @@ -0,0 +1,37 @@ +!include include/default_mysqld.cnf + +[mysqld.1] +plugin_dir=@env.KEYRING_PLUGIN_DIR +early-plugin-load=@env.KEYRING_PLUGIN +keyring_file_data=../../tmp/keyring1 +gtid-mode=ON +enforce-gtid-consistency=ON +encrypt-binlog=1 +master-verify-checksum=1 + +[mysqld.2] +plugin_dir=@env.KEYRING_PLUGIN_DIR +early-plugin-load=@env.KEYRING_PLUGIN +keyring_file_data=../../tmp/keyring2 +log-slave-updates +relay-log-info-repository=table +gtid-mode=ON +enforce-gtid-consistency=ON +encrypt-binlog=1 +master-verify-checksum=1 + +[mysqld.3] +plugin_dir=@env.KEYRING_PLUGIN_DIR +early-plugin-load=@env.KEYRING_PLUGIN +keyring_file_data=../../tmp/keyring3 +log-slave-updates +relay-log-info-repository=table +gtid-mode=ON +enforce-gtid-consistency=ON +encrypt-binlog=1 +master-verify-checksum=1 + +[ENV] +SERVER_MYPORT_1= @mysqld.1.port +SERVER_MYPORT_2= @mysqld.2.port +SERVER_MYPORT_3= @mysqld.3.port diff --git a/mysql-test/suite/rpl_encryption/t/rpl_gtid_transaction_split_across_relay_logs.test b/mysql-test/suite/rpl_encryption/t/rpl_gtid_transaction_split_across_relay_logs.test new file mode 100644 index 000000000000..8526a4b0e791 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_gtid_transaction_split_across_relay_logs.test @@ -0,0 +1 @@ +--source suite/rpl/t/rpl_gtid_transaction_split_across_relay_logs.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_gtid_validate_slave_gtids.cnf b/mysql-test/suite/rpl_encryption/t/rpl_gtid_validate_slave_gtids.cnf new file mode 100644 index 000000000000..790cd8381e83 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_gtid_validate_slave_gtids.cnf @@ -0,0 +1,14 @@ +!include ../my.cnf + +[mysqld.1] +gtid-mode=ON +enforce-gtid-consistency=ON + +[mysqld.2] +gtid-mode=ON +enforce-gtid-consistency=ON +encrypt-binlog=1 +plugin_dir=@env.KEYRING_PLUGIN_DIR +early-plugin-load=@env.KEYRING_PLUGIN +keyring_file_data=../../tmp/keyring2 +master-verify-checksum=1 diff --git a/mysql-test/suite/rpl_encryption/t/rpl_gtid_validate_slave_gtids.test b/mysql-test/suite/rpl_encryption/t/rpl_gtid_validate_slave_gtids.test new file mode 100644 index 000000000000..20efb0450f08 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_gtid_validate_slave_gtids.test @@ -0,0 +1 @@ +--source suite/rpl/t/rpl_gtid_validate_slave_gtids.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_gtids_restart_slave_io_lost_trx.cnf b/mysql-test/suite/rpl_encryption/t/rpl_gtids_restart_slave_io_lost_trx.cnf new file mode 100644 index 000000000000..1cf19808dff9 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_gtids_restart_slave_io_lost_trx.cnf @@ -0,0 +1,17 @@ +!include ../my.cnf + +[mysqld.1] +gtid-mode=ON +enforce-gtid-consistency=ON +binlog-format='STATEMENT' +encrypt_binlog=1 + +[mysqld.2] +gtid-mode=ON +enforce-gtid-consistency=ON +binlog-format='STATEMENT' +plugin_dir=@env.KEYRING_PLUGIN_DIR +early-plugin-load=@env.KEYRING_PLUGIN +keyring_file_data=../../tmp/keyring2 +encrypt_binlog=1 +master-verify-checksum=1 diff --git a/mysql-test/suite/rpl_encryption/t/rpl_gtids_restart_slave_io_lost_trx.test b/mysql-test/suite/rpl_encryption/t/rpl_gtids_restart_slave_io_lost_trx.test new file mode 100644 index 000000000000..d9c6d4d66fac --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_gtids_restart_slave_io_lost_trx.test @@ -0,0 +1 @@ +--source suite/rpl/t/rpl_gtids_restart_slave_io_lost_trx.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_init_slave_errors.test b/mysql-test/suite/rpl_encryption/t/rpl_init_slave_errors.test new file mode 100644 index 000000000000..532db963e63c --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_init_slave_errors.test @@ -0,0 +1 @@ +--source suite/rpl/t/rpl_init_slave_errors.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_loaddatalocal.test b/mysql-test/suite/rpl_encryption/t/rpl_loaddatalocal.test new file mode 100644 index 000000000000..84b59d47b93f --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_loaddatalocal.test @@ -0,0 +1 @@ +--source suite/rpl/t/rpl_loaddatalocal.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_loadfile.test b/mysql-test/suite/rpl_encryption/t/rpl_loadfile.test new file mode 100644 index 000000000000..86c4d03f8bd6 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_loadfile.test @@ -0,0 +1 @@ +--source suite/rpl/t/rpl_loadfile.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_lost_events_on_rotate.test b/mysql-test/suite/rpl_encryption/t/rpl_lost_events_on_rotate.test new file mode 100644 index 000000000000..9444cb17fba8 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_lost_events_on_rotate.test @@ -0,0 +1 @@ +--source suite/rpl/t/rpl_lost_events_on_rotate.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_mixed_binlog_max_cache_size.cnf b/mysql-test/suite/rpl_encryption/t/rpl_mixed_binlog_max_cache_size.cnf new file mode 100644 index 000000000000..e55f92dbd6af --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_mixed_binlog_max_cache_size.cnf @@ -0,0 +1,5 @@ +!include ../my.cnf + +[mysqld.1] +binlog-format='MIXED' +encrypt-binlog=1 diff --git a/mysql-test/suite/rpl_encryption/t/rpl_mixed_binlog_max_cache_size.test b/mysql-test/suite/rpl_encryption/t/rpl_mixed_binlog_max_cache_size.test new file mode 100644 index 000000000000..525ce4a18966 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_mixed_binlog_max_cache_size.test @@ -0,0 +1 @@ +--source suite/rpl/t/rpl_mixed_binlog_max_cache_size.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_mts_database_transaction_retry.test b/mysql-test/suite/rpl_encryption/t/rpl_mts_database_transaction_retry.test new file mode 100644 index 000000000000..1b5f962c39d8 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_mts_database_transaction_retry.test @@ -0,0 +1 @@ +--source suite/rpl/t/rpl_mts_database_transaction_retry.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_mts_execute_partial_trx_with_auto_pos_off.cnf b/mysql-test/suite/rpl_encryption/t/rpl_mts_execute_partial_trx_with_auto_pos_off.cnf new file mode 100644 index 000000000000..8c064e3cec2b --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_mts_execute_partial_trx_with_auto_pos_off.cnf @@ -0,0 +1,9 @@ +!include ../my.cnf + +[mysqld.1] +gtid-mode=ON +enforce-gtid-consistency=ON + +[mysqld.2] +gtid-mode=ON +enforce-gtid-consistency=ON diff --git a/mysql-test/suite/rpl_encryption/t/rpl_mts_execute_partial_trx_with_auto_pos_off.test b/mysql-test/suite/rpl_encryption/t/rpl_mts_execute_partial_trx_with_auto_pos_off.test new file mode 100644 index 000000000000..9f8519b7171f --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_mts_execute_partial_trx_with_auto_pos_off.test @@ -0,0 +1 @@ +--source suite/rpl/t/rpl_mts_execute_partial_trx_with_auto_pos_off.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_mts_execute_partial_trx_with_auto_pos_on.cnf b/mysql-test/suite/rpl_encryption/t/rpl_mts_execute_partial_trx_with_auto_pos_on.cnf new file mode 100644 index 000000000000..8c064e3cec2b --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_mts_execute_partial_trx_with_auto_pos_on.cnf @@ -0,0 +1,9 @@ +!include ../my.cnf + +[mysqld.1] +gtid-mode=ON +enforce-gtid-consistency=ON + +[mysqld.2] +gtid-mode=ON +enforce-gtid-consistency=ON diff --git a/mysql-test/suite/rpl_encryption/t/rpl_mts_execute_partial_trx_with_auto_pos_on.test b/mysql-test/suite/rpl_encryption/t/rpl_mts_execute_partial_trx_with_auto_pos_on.test new file mode 100644 index 000000000000..38645a5bbaa7 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_mts_execute_partial_trx_with_auto_pos_on.test @@ -0,0 +1 @@ +--source suite/rpl/t/rpl_mts_execute_partial_trx_with_auto_pos_on.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_mts_gtids_restart_slave_io_lost_trx.cnf b/mysql-test/suite/rpl_encryption/t/rpl_mts_gtids_restart_slave_io_lost_trx.cnf new file mode 100644 index 000000000000..b7c9ca02d8a0 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_mts_gtids_restart_slave_io_lost_trx.cnf @@ -0,0 +1,16 @@ +!include ../my.cnf + +[mysqld.1] +gtid-mode=ON +enforce-gtid-consistency=ON + +[mysqld.2] +gtid-mode=ON +enforce-gtid-consistency=ON +plugin_dir=@env.KEYRING_PLUGIN_DIR +early-plugin-load=@env.KEYRING_PLUGIN +keyring_file_data=../../tmp/keyring2 +encrypt-binlog=1 +master-verify-checksum=1 +slave-parallel-workers=2 +slave-transaction-retries=0 diff --git a/mysql-test/suite/rpl_encryption/t/rpl_mts_gtids_restart_slave_io_lost_trx.test b/mysql-test/suite/rpl_encryption/t/rpl_mts_gtids_restart_slave_io_lost_trx.test new file mode 100644 index 000000000000..74753962e5e2 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_mts_gtids_restart_slave_io_lost_trx.test @@ -0,0 +1 @@ +--source suite/rpl/t/rpl_mts_gtids_restart_slave_io_lost_trx.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_mts_logical_clock_transaction_retry.test b/mysql-test/suite/rpl_encryption/t/rpl_mts_logical_clock_transaction_retry.test new file mode 100644 index 000000000000..fd41b3207fb6 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_mts_logical_clock_transaction_retry.test @@ -0,0 +1 @@ +--source suite/rpl/t/rpl_mts_logical_clock_transaction_retry.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_mts_logical_clock_wrong_start_pos.cnf b/mysql-test/suite/rpl_encryption/t/rpl_mts_logical_clock_wrong_start_pos.cnf new file mode 100644 index 000000000000..8c064e3cec2b --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_mts_logical_clock_wrong_start_pos.cnf @@ -0,0 +1,9 @@ +!include ../my.cnf + +[mysqld.1] +gtid-mode=ON +enforce-gtid-consistency=ON + +[mysqld.2] +gtid-mode=ON +enforce-gtid-consistency=ON diff --git a/mysql-test/suite/rpl_encryption/t/rpl_mts_logical_clock_wrong_start_pos.test b/mysql-test/suite/rpl_encryption/t/rpl_mts_logical_clock_wrong_start_pos.test new file mode 100644 index 000000000000..1bea96a93654 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_mts_logical_clock_wrong_start_pos.test @@ -0,0 +1,2 @@ +--let $skip_start_encryption_event=1 +--source suite/rpl/t/rpl_mts_logical_clock_wrong_start_pos.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_multi_source_basic.cnf b/mysql-test/suite/rpl_encryption/t/rpl_multi_source_basic.cnf new file mode 100644 index 000000000000..e4db699170b4 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_multi_source_basic.cnf @@ -0,0 +1,23 @@ +!include ../my.cnf + +[mysqld.1] +log-slave-updates + +[mysqld.2] +plugin_dir=@env.KEYRING_PLUGIN_DIR +early-plugin-load=@env.KEYRING_PLUGIN +loose-keyring_file_data=../../tmp/keyring2 +master-info-repository=TABLE +relay-log-info-repository=TABLE +log-slave-updates +encrypt-binlog=1 +master-verify-checksum=1 + +[mysqld.3] + +log-slave-updates + +[ENV] +SERVER_MYPORT_3= @mysqld.3.port +SERVER_MYSOCK_3= @mysqld.3.socket + diff --git a/mysql-test/suite/rpl_encryption/t/rpl_multi_source_basic.test b/mysql-test/suite/rpl_encryption/t/rpl_multi_source_basic.test new file mode 100644 index 000000000000..73e0006944d0 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_multi_source_basic.test @@ -0,0 +1 @@ +--source suite/rpl/t/rpl_multi_source_basic.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_parallel-master.opt b/mysql-test/suite/rpl_encryption/t/rpl_parallel-master.opt new file mode 100644 index 000000000000..4426a9c97469 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_parallel-master.opt @@ -0,0 +1 @@ +--log-warnings=0 diff --git a/mysql-test/suite/rpl_encryption/t/rpl_parallel-slave.opt b/mysql-test/suite/rpl_encryption/t/rpl_parallel-slave.opt new file mode 100644 index 000000000000..e6d66bc783cc --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_parallel-slave.opt @@ -0,0 +1 @@ + --log-warnings=0 --slave-transaction-retries=0 diff --git a/mysql-test/suite/rpl_encryption/t/rpl_parallel.test b/mysql-test/suite/rpl_encryption/t/rpl_parallel.test new file mode 100644 index 000000000000..36954a5a0afb --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_parallel.test @@ -0,0 +1 @@ +source suite/rpl/t/rpl_parallel.test; diff --git a/mysql-test/suite/rpl_encryption/t/rpl_parallel_show_binlog_events_purge_logs.cnf b/mysql-test/suite/rpl_encryption/t/rpl_parallel_show_binlog_events_purge_logs.cnf new file mode 100644 index 000000000000..4f7eec46e9a6 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_parallel_show_binlog_events_purge_logs.cnf @@ -0,0 +1,8 @@ +!include ../my.cnf + +[mysqld.2] +plugin_dir=@env.KEYRING_PLUGIN_DIR +early-plugin-load=@env.KEYRING_PLUGIN +keyring_file_data=../../tmp/keyring2 +encrypt-binlog +master-verify-checksum=1 diff --git a/mysql-test/suite/rpl_encryption/t/rpl_parallel_show_binlog_events_purge_logs.test b/mysql-test/suite/rpl_encryption/t/rpl_parallel_show_binlog_events_purge_logs.test new file mode 100644 index 000000000000..e342e4d61ffa --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_parallel_show_binlog_events_purge_logs.test @@ -0,0 +1 @@ +--source suite/rpl/t/rpl_parallel_show_binlog_events_purge_logs.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_partial_gtid_trx_followed_by_anonymous_trx_by_receiver.cnf b/mysql-test/suite/rpl_encryption/t/rpl_partial_gtid_trx_followed_by_anonymous_trx_by_receiver.cnf new file mode 100644 index 000000000000..8c064e3cec2b --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_partial_gtid_trx_followed_by_anonymous_trx_by_receiver.cnf @@ -0,0 +1,9 @@ +!include ../my.cnf + +[mysqld.1] +gtid-mode=ON +enforce-gtid-consistency=ON + +[mysqld.2] +gtid-mode=ON +enforce-gtid-consistency=ON diff --git a/mysql-test/suite/rpl_encryption/t/rpl_partial_gtid_trx_followed_by_anonymous_trx_by_receiver.test b/mysql-test/suite/rpl_encryption/t/rpl_partial_gtid_trx_followed_by_anonymous_trx_by_receiver.test new file mode 100644 index 000000000000..2ff4292b1c1a --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_partial_gtid_trx_followed_by_anonymous_trx_by_receiver.test @@ -0,0 +1 @@ +--source suite/rpl/t/rpl_partial_gtid_trx_followed_by_anonymous_trx_by_receiver.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_partial_gtid_trx_followed_by_trx_at_startup.cnf b/mysql-test/suite/rpl_encryption/t/rpl_partial_gtid_trx_followed_by_trx_at_startup.cnf new file mode 100644 index 000000000000..ce62a545bd32 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_partial_gtid_trx_followed_by_trx_at_startup.cnf @@ -0,0 +1,12 @@ +!include ../my.cnf + +[mysqld.1] +gtid-mode=ON +enforce-gtid-consistency=ON +binlog-format='ROW' +encrypt-binlog=0 + +[mysqld.2] +gtid-mode=ON +enforce-gtid-consistency=ON +encrypt-binlog=0 diff --git a/mysql-test/suite/rpl_encryption/t/rpl_partial_gtid_trx_followed_by_trx_at_startup.test b/mysql-test/suite/rpl_encryption/t/rpl_partial_gtid_trx_followed_by_trx_at_startup.test new file mode 100644 index 000000000000..371d9d5ec12a --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_partial_gtid_trx_followed_by_trx_at_startup.test @@ -0,0 +1 @@ +--source suite/rpl/t/rpl_partial_gtid_trx_followed_by_trx_at_startup.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_relayrotate-slave.opt b/mysql-test/suite/rpl_encryption/t/rpl_relayrotate-slave.opt new file mode 100644 index 000000000000..b55cae290485 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_relayrotate-slave.opt @@ -0,0 +1 @@ +--max_relay_log_size=16384 --log-warnings $KEYRING_PLUGIN_OPT $KEYRING_PLUGIN_LOAD --loose-keyring_file_data=$MYSQL_TMP_DIR/keyring/keyring2 --encrypt-binlog --master-verify-checksum=1 diff --git a/mysql-test/suite/rpl_encryption/t/rpl_relayrotate.test b/mysql-test/suite/rpl_encryption/t/rpl_relayrotate.test new file mode 100644 index 000000000000..a8dabdc3e8dc --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_relayrotate.test @@ -0,0 +1 @@ +--source suite/rpl/t/rpl_relayrotate.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_rotate_gtid.cnf b/mysql-test/suite/rpl_encryption/t/rpl_rotate_gtid.cnf new file mode 100644 index 000000000000..2112ee6f1a99 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_rotate_gtid.cnf @@ -0,0 +1,17 @@ +!include ../my.cnf + +[mysqld.1] +gtid-mode=ON +enforce-gtid-consistency=ON +encrypt-binlog=1 +binlog-format='STATEMENT' + +[mysqld.2] +plugin_dir=@env.KEYRING_PLUGIN_DIR +early-plugin-load=@env.KEYRING_PLUGIN +keyring_file_data=../../tmp/keyring2 +gtid-mode=ON +enforce-gtid-consistency=ON +encrypt-binlog=1 +master-verify-checksum=1 +binlog-format='STATEMENT' diff --git a/mysql-test/suite/rpl_encryption/t/rpl_rotate_gtid.test b/mysql-test/suite/rpl_encryption/t/rpl_rotate_gtid.test new file mode 100644 index 000000000000..5f255cb5b1a3 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_rotate_gtid.test @@ -0,0 +1 @@ +--source suite/rpl/t/rpl_rotate_gtid.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_sbm_previous_gtid_event.cnf b/mysql-test/suite/rpl_encryption/t/rpl_sbm_previous_gtid_event.cnf new file mode 100644 index 000000000000..4526075b9937 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_sbm_previous_gtid_event.cnf @@ -0,0 +1,15 @@ +!include ../my.cnf + +[mysqld.1] +gtid-mode=ON +enforce-gtid-consistency=ON +binlog-format='STATEMENT' + +[mysqld.2] +plugin_dir=@env.KEYRING_PLUGIN_DIR +early-plugin-load=@env.KEYRING_PLUGIN +keyring_file_data=../../tmp/keyring2 +gtid-mode=ON +enforce-gtid-consistency=ON +binlog-format='STATEMENT' +max_relay_log_size=4096 diff --git a/mysql-test/suite/rpl_encryption/t/rpl_sbm_previous_gtid_event.test b/mysql-test/suite/rpl_encryption/t/rpl_sbm_previous_gtid_event.test new file mode 100644 index 000000000000..19282c007bd3 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_sbm_previous_gtid_event.test @@ -0,0 +1,2 @@ +--let $idle=200 +--source suite/rpl/t/rpl_sbm_previous_gtid_event.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_semi_sync-master.opt b/mysql-test/suite/rpl_encryption/t/rpl_semi_sync-master.opt new file mode 100644 index 000000000000..746bb02524df --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_semi_sync-master.opt @@ -0,0 +1 @@ +$SEMISYNC_PLUGIN_OPT --early-plugin-load=$KEYRING_PLUGIN_DIR/$KEYRING_PLUGIN --keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring --force-restart diff --git a/mysql-test/suite/rpl_encryption/t/rpl_semi_sync-slave.opt b/mysql-test/suite/rpl_encryption/t/rpl_semi_sync-slave.opt new file mode 100644 index 000000000000..58029d28acec --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_semi_sync-slave.opt @@ -0,0 +1 @@ +$SEMISYNC_PLUGIN_OPT diff --git a/mysql-test/suite/rpl_encryption/t/rpl_semi_sync.test b/mysql-test/suite/rpl_encryption/t/rpl_semi_sync.test new file mode 100644 index 000000000000..2e0907cce303 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_semi_sync.test @@ -0,0 +1 @@ +--source suite/rpl/t/rpl_semi_sync.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_set_gtid_mode_on_after_implicit_pre_commit.test b/mysql-test/suite/rpl_encryption/t/rpl_set_gtid_mode_on_after_implicit_pre_commit.test new file mode 100644 index 000000000000..ae16d681d718 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_set_gtid_mode_on_after_implicit_pre_commit.test @@ -0,0 +1 @@ +--source suite/rpl/t/rpl_set_gtid_mode_on_after_implicit_pre_commit.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_special_charset-slave.opt b/mysql-test/suite/rpl_encryption/t/rpl_special_charset-slave.opt new file mode 100644 index 000000000000..b071fb20845f --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_special_charset-slave.opt @@ -0,0 +1 @@ +--character-set-server=utf16 diff --git a/mysql-test/suite/rpl_encryption/t/rpl_special_charset.test b/mysql-test/suite/rpl_encryption/t/rpl_special_charset.test new file mode 100644 index 000000000000..c74f8915798e --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_special_charset.test @@ -0,0 +1 @@ +--source suite/rpl/t/rpl_special_charset.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_sporadic_master-master.opt b/mysql-test/suite/rpl_encryption/t/rpl_sporadic_master-master.opt new file mode 100644 index 000000000000..f74062c461db --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_sporadic_master-master.opt @@ -0,0 +1 @@ +--sporadic-binlog-dump-fail --max-binlog-dump-events=3 diff --git a/mysql-test/suite/rpl_encryption/t/rpl_sporadic_master.test b/mysql-test/suite/rpl_encryption/t/rpl_sporadic_master.test new file mode 100644 index 000000000000..1e3992dc5d9e --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_sporadic_master.test @@ -0,0 +1 @@ +--source suite/rpl/t/rpl_sporadic_master.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_ssl.test b/mysql-test/suite/rpl_encryption/t/rpl_ssl.test new file mode 100644 index 000000000000..fb30d83ab5e2 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_ssl.test @@ -0,0 +1 @@ +--source suite/rpl/t/rpl_ssl.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_stm_mix_rollback_to_savepoint.cnf b/mysql-test/suite/rpl_encryption/t/rpl_stm_mix_rollback_to_savepoint.cnf new file mode 100644 index 000000000000..2a4004f8d261 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_stm_mix_rollback_to_savepoint.cnf @@ -0,0 +1,13 @@ +!include ../my.cnf + +[mysqld.1] +encrypt-binlog=1 +binlog-format='STATEMENT' + +[mysqld.2] +plugin_dir=@env.KEYRING_PLUGIN_DIR +early-plugin-load=@env.KEYRING_PLUGIN +keyring_file_data=../../tmp/keyring2 +encrypt-binlog=1 +master-verify-checksum=1 +binlog-format='STATEMENT' diff --git a/mysql-test/suite/rpl_encryption/t/rpl_stm_mix_rollback_to_savepoint.test b/mysql-test/suite/rpl_encryption/t/rpl_stm_mix_rollback_to_savepoint.test new file mode 100644 index 000000000000..76d9d8ec0e31 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_stm_mix_rollback_to_savepoint.test @@ -0,0 +1 @@ +--source suite/rpl/t/rpl_stm_mix_rollback_to_savepoint.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_stm_mixed_mts_rec_crash_safe_checksum-master.opt b/mysql-test/suite/rpl_encryption/t/rpl_stm_mixed_mts_rec_crash_safe_checksum-master.opt new file mode 100644 index 000000000000..a6e99a9fd5a9 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_stm_mixed_mts_rec_crash_safe_checksum-master.opt @@ -0,0 +1 @@ +--binlog-checksum=CRC32 diff --git a/mysql-test/suite/rpl_encryption/t/rpl_stm_mixed_mts_rec_crash_safe_checksum-slave.opt b/mysql-test/suite/rpl_encryption/t/rpl_stm_mixed_mts_rec_crash_safe_checksum-slave.opt new file mode 100644 index 000000000000..42dc94faae80 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_stm_mixed_mts_rec_crash_safe_checksum-slave.opt @@ -0,0 +1 @@ +--slave-transaction-retries=0 --relay-log-info-repository=TABLE --master-info-repository=TABLE --sync-master-info=1 --relay-log-recovery=1 --binlog-checksum=NONE diff --git a/mysql-test/suite/rpl_encryption/t/rpl_stm_mixed_mts_rec_crash_safe_checksum.test b/mysql-test/suite/rpl_encryption/t/rpl_stm_mixed_mts_rec_crash_safe_checksum.test new file mode 100644 index 000000000000..91ad3676e582 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_stm_mixed_mts_rec_crash_safe_checksum.test @@ -0,0 +1 @@ +--source suite/rpl/t/rpl_stm_mixed_mts_rec_crash_safe_checksum.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_stm_multi_query.test b/mysql-test/suite/rpl_encryption/t/rpl_stm_multi_query.test new file mode 100644 index 000000000000..f9d797f8ac32 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_stm_multi_query.test @@ -0,0 +1 @@ +--source suite/rpl/t/rpl_stm_multi_query.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_stm_relay_ign_space.cnf b/mysql-test/suite/rpl_encryption/t/rpl_stm_relay_ign_space.cnf new file mode 100644 index 000000000000..5c4ab26bd843 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_stm_relay_ign_space.cnf @@ -0,0 +1,9 @@ +!include ../my.cnf + +[mysqld.1] +binlog-format='STATEMENT' + +[mysqld.2] +relay-log-space-limit=8192 +relay-log-purge=on +max-relay-log-size=4096 diff --git a/mysql-test/suite/rpl_encryption/t/rpl_stm_relay_ign_space.test b/mysql-test/suite/rpl_encryption/t/rpl_stm_relay_ign_space.test new file mode 100644 index 000000000000..d5a08bde9690 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_stm_relay_ign_space.test @@ -0,0 +1 @@ +--source suite/rpl/t/rpl_stm_relay_ign_space.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_stm_until_pos_middle_gtid.cnf b/mysql-test/suite/rpl_encryption/t/rpl_stm_until_pos_middle_gtid.cnf new file mode 100644 index 000000000000..8c064e3cec2b --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_stm_until_pos_middle_gtid.cnf @@ -0,0 +1,9 @@ +!include ../my.cnf + +[mysqld.1] +gtid-mode=ON +enforce-gtid-consistency=ON + +[mysqld.2] +gtid-mode=ON +enforce-gtid-consistency=ON diff --git a/mysql-test/suite/rpl_encryption/t/rpl_stm_until_pos_middle_gtid.test b/mysql-test/suite/rpl_encryption/t/rpl_stm_until_pos_middle_gtid.test new file mode 100644 index 000000000000..41755f3f937a --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_stm_until_pos_middle_gtid.test @@ -0,0 +1 @@ +--source suite/rpl/t/rpl_stm_until_pos_middle_gtid.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_switch_stm_row_mixed.test b/mysql-test/suite/rpl_encryption/t/rpl_switch_stm_row_mixed.test new file mode 100644 index 000000000000..c65cc202ba24 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_switch_stm_row_mixed.test @@ -0,0 +1 @@ +--source suite/rpl/t/rpl_switch_stm_row_mixed.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_sync-master.opt b/mysql-test/suite/rpl_encryption/t/rpl_sync-master.opt new file mode 100644 index 000000000000..04b06bfa0f22 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_sync-master.opt @@ -0,0 +1,2 @@ +--default-storage-engine=MyISAM +--loose-innodb-file-per-table=0 diff --git a/mysql-test/suite/rpl_encryption/t/rpl_sync-slave.opt b/mysql-test/suite/rpl_encryption/t/rpl_sync-slave.opt new file mode 100644 index 000000000000..69765185f7a2 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_sync-slave.opt @@ -0,0 +1 @@ +--sync-relay-log-info=1 --relay-log-recovery=1 --default-storage-engine=MyISAM --innodb-file-per-table=0 diff --git a/mysql-test/suite/rpl_encryption/t/rpl_sync.test b/mysql-test/suite/rpl_encryption/t/rpl_sync.test new file mode 100644 index 000000000000..1ff722285656 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_sync.test @@ -0,0 +1 @@ +--source suite/rpl/t/rpl_sync.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_transaction_before_commit_failure-master.opt b/mysql-test/suite/rpl_encryption/t/rpl_transaction_before_commit_failure-master.opt new file mode 100644 index 000000000000..b0fe8fe5a48c --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_transaction_before_commit_failure-master.opt @@ -0,0 +1,2 @@ +$RPL_OBS_EXAMPLE_OPT --early-plugin-load=$KEYRING_PLUGIN_DIR/$KEYRING_PLUGIN --keyring_file_data=$MYSQL_TMP_DIR/keyring_1 --gtid-mode=ON --enforce-gtid-consistency=ON + diff --git a/mysql-test/suite/rpl_encryption/t/rpl_transaction_before_commit_failure-slave.opt b/mysql-test/suite/rpl_encryption/t/rpl_transaction_before_commit_failure-slave.opt new file mode 100644 index 000000000000..80ad92b124a0 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_transaction_before_commit_failure-slave.opt @@ -0,0 +1,2 @@ +$RPL_OBS_EXAMPLE_OPT --early-plugin-load=$KEYRING_PLUGIN_DIR/$KEYRING_PLUGIN --keyring_file_data=$MYSQL_TMP_DIR/keyring_2 --gtid-mode=ON --enforce-gtid-consistency=ON --binlog-format='MIXED' + diff --git a/mysql-test/suite/rpl_encryption/t/rpl_transaction_before_commit_failure.test b/mysql-test/suite/rpl_encryption/t/rpl_transaction_before_commit_failure.test new file mode 100644 index 000000000000..7544c1a61e22 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_transaction_before_commit_failure.test @@ -0,0 +1 @@ +--source suite/rpl/t/rpl_transaction_before_commit_failure.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_trx_boundary_parser_relay_log_recovery.test b/mysql-test/suite/rpl_encryption/t/rpl_trx_boundary_parser_relay_log_recovery.test new file mode 100644 index 000000000000..889da14141f0 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_trx_boundary_parser_relay_log_recovery.test @@ -0,0 +1 @@ +--source suite/rpl/t/rpl_trx_boundary_parser_relay_log_recovery.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_trx_boundary_parser_row.cnf b/mysql-test/suite/rpl_encryption/t/rpl_trx_boundary_parser_row.cnf new file mode 100644 index 000000000000..8c064e3cec2b --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_trx_boundary_parser_row.cnf @@ -0,0 +1,9 @@ +!include ../my.cnf + +[mysqld.1] +gtid-mode=ON +enforce-gtid-consistency=ON + +[mysqld.2] +gtid-mode=ON +enforce-gtid-consistency=ON diff --git a/mysql-test/suite/rpl_encryption/t/rpl_trx_boundary_parser_row.test b/mysql-test/suite/rpl_encryption/t/rpl_trx_boundary_parser_row.test new file mode 100644 index 000000000000..b036b8e23013 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_trx_boundary_parser_row.test @@ -0,0 +1 @@ +--source suite/rpl/t/rpl_trx_boundary_parser_row.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_trx_boundary_parser_stmt.cnf b/mysql-test/suite/rpl_encryption/t/rpl_trx_boundary_parser_stmt.cnf new file mode 100644 index 000000000000..3532b9f501f6 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_trx_boundary_parser_stmt.cnf @@ -0,0 +1,10 @@ +!include ../my.cnf + +[mysqld.1] +gtid-mode=ON +enforce-gtid-consistency=ON +binlog-format='STATEMENT' + +[mysqld.2] +gtid-mode=ON +enforce-gtid-consistency=ON diff --git a/mysql-test/suite/rpl_encryption/t/rpl_trx_boundary_parser_stmt.test b/mysql-test/suite/rpl_encryption/t/rpl_trx_boundary_parser_stmt.test new file mode 100644 index 000000000000..788f8594fa0c --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_trx_boundary_parser_stmt.test @@ -0,0 +1 @@ +--source suite/rpl/t/rpl_trx_boundary_parser_stmt.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_typeconv.test b/mysql-test/suite/rpl_encryption/t/rpl_typeconv.test new file mode 100644 index 000000000000..6761cddfb87f --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_typeconv.test @@ -0,0 +1 @@ +--source suite/rpl/t/rpl_typeconv.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_unknown_ignorable_event.cnf b/mysql-test/suite/rpl_encryption/t/rpl_unknown_ignorable_event.cnf new file mode 100644 index 000000000000..464de55cc2c4 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_unknown_ignorable_event.cnf @@ -0,0 +1,12 @@ +!include ../my.cnf + +[mysqld.1] +binlog-format='ROW' +encrypt-binlog=1 + +[mysqld.2] +plugin_dir=@env.KEYRING_PLUGIN_DIR +early-plugin-load=@env.KEYRING_PLUGIN +keyring_file_data=../../tmp/keyring2 +encrypt-binlog=1 +master-verify-checksum=1 diff --git a/mysql-test/suite/rpl_encryption/t/rpl_unknown_ignorable_event.test b/mysql-test/suite/rpl_encryption/t/rpl_unknown_ignorable_event.test new file mode 100644 index 000000000000..a2b536db3a92 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_unknown_ignorable_event.test @@ -0,0 +1 @@ +--source suite/rpl/t/rpl_unknown_ignorable_event.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_upgrade_slave_master_info-master.opt b/mysql-test/suite/rpl_encryption/t/rpl_upgrade_slave_master_info-master.opt new file mode 100644 index 000000000000..4cfb3a03e613 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_upgrade_slave_master_info-master.opt @@ -0,0 +1,5 @@ +--binlog-format='MIXED' +--master-info-repository=TABLE +--relay-log-info-repository=TABLE +--log_error=$MYSQLTEST_VARDIR/tmp/slave.err +--no-console diff --git a/mysql-test/suite/rpl_encryption/t/rpl_upgrade_slave_master_info.test b/mysql-test/suite/rpl_encryption/t/rpl_upgrade_slave_master_info.test new file mode 100644 index 000000000000..2958fd69ef25 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_upgrade_slave_master_info.test @@ -0,0 +1 @@ +--source suite/rpl/t/rpl_upgrade_slave_master_info.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_wait_for_executed_gtid_set.cnf b/mysql-test/suite/rpl_encryption/t/rpl_wait_for_executed_gtid_set.cnf new file mode 100644 index 000000000000..54ba70f11a62 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_wait_for_executed_gtid_set.cnf @@ -0,0 +1,21 @@ +!include ../rpl_1slave_base.cnf +!include include/default_client.cnf + +[mysqld.1] +gtid-mode=ON +enforce-gtid-consistency=ON +log-bin + +[mysqld.2] +gtid-mode=ON +enforce-gtid-consistency=ON +log-bin +log-slave-updates + +[mysqld.3] +gtid-mode=ON +enforce-gtid-consistency=ON +skip-log-bin + +[ENV] +SERVER_MYPORT_3= @mysqld.3.port diff --git a/mysql-test/suite/rpl_encryption/t/rpl_wait_for_executed_gtid_set.test b/mysql-test/suite/rpl_encryption/t/rpl_wait_for_executed_gtid_set.test new file mode 100644 index 000000000000..08b962b348c3 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_wait_for_executed_gtid_set.test @@ -0,0 +1 @@ +--source suite/rpl/t/rpl_wait_for_executed_gtid_set.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_wait_for_executed_gtid_set_with_sleep.cnf b/mysql-test/suite/rpl_encryption/t/rpl_wait_for_executed_gtid_set_with_sleep.cnf new file mode 100644 index 000000000000..8c064e3cec2b --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_wait_for_executed_gtid_set_with_sleep.cnf @@ -0,0 +1,9 @@ +!include ../my.cnf + +[mysqld.1] +gtid-mode=ON +enforce-gtid-consistency=ON + +[mysqld.2] +gtid-mode=ON +enforce-gtid-consistency=ON diff --git a/mysql-test/suite/rpl_encryption/t/rpl_wait_for_executed_gtid_set_with_sleep.test b/mysql-test/suite/rpl_encryption/t/rpl_wait_for_executed_gtid_set_with_sleep.test new file mode 100644 index 000000000000..69f688c8e983 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_wait_for_executed_gtid_set_with_sleep.test @@ -0,0 +1 @@ +--source suite/rpl/t/rpl_wait_for_executed_gtid_set_with_sleep.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_wait_for_gtid_executed_unknown_uuid.cnf b/mysql-test/suite/rpl_encryption/t/rpl_wait_for_gtid_executed_unknown_uuid.cnf new file mode 100644 index 000000000000..8c064e3cec2b --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_wait_for_gtid_executed_unknown_uuid.cnf @@ -0,0 +1,9 @@ +!include ../my.cnf + +[mysqld.1] +gtid-mode=ON +enforce-gtid-consistency=ON + +[mysqld.2] +gtid-mode=ON +enforce-gtid-consistency=ON diff --git a/mysql-test/suite/rpl_encryption/t/rpl_wait_for_gtid_executed_unknown_uuid.test b/mysql-test/suite/rpl_encryption/t/rpl_wait_for_gtid_executed_unknown_uuid.test new file mode 100644 index 000000000000..a4037f60289f --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_wait_for_gtid_executed_unknown_uuid.test @@ -0,0 +1 @@ +--source suite/rpl/t/rpl_wait_for_gtid_executed_unknown_uuid.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_xa_prepare.cnf b/mysql-test/suite/rpl_encryption/t/rpl_xa_prepare.cnf new file mode 100644 index 000000000000..d8218dd0afc5 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_xa_prepare.cnf @@ -0,0 +1,15 @@ +!include ../my.cnf + +[mysqld.1] +gtid-mode=ON +enforce-gtid-consistency=ON +encrypt-binlog=1 + +[mysqld.2] +plugin_dir=@env.KEYRING_PLUGIN_DIR +early-plugin-load=@env.KEYRING_PLUGIN +keyring_file_data=../../tmp/keyring2 +gtid-mode=ON +enforce-gtid-consistency=ON +encrypt-binlog=1 +master-verify-checksum=1 diff --git a/mysql-test/suite/rpl_encryption/t/rpl_xa_prepare.test b/mysql-test/suite/rpl_encryption/t/rpl_xa_prepare.test new file mode 100644 index 000000000000..42a67cff4b32 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_xa_prepare.test @@ -0,0 +1 @@ +--source suite/rpl/t/rpl_xa_prepare.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_xa_survive_crash_debug.cnf b/mysql-test/suite/rpl_encryption/t/rpl_xa_survive_crash_debug.cnf new file mode 100644 index 000000000000..7c5c47fd2e55 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_xa_survive_crash_debug.cnf @@ -0,0 +1,4 @@ +!include ../my.cnf + +[mysqld.1] +binlog-format='MIXED' diff --git a/mysql-test/suite/rpl_encryption/t/rpl_xa_survive_crash_debug.test b/mysql-test/suite/rpl_encryption/t/rpl_xa_survive_crash_debug.test new file mode 100644 index 000000000000..a87f2201fe55 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_xa_survive_crash_debug.test @@ -0,0 +1 @@ +--source suite/rpl/t/rpl_xa_survive_crash_debug.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_xa_survive_disconnect.test b/mysql-test/suite/rpl_encryption/t/rpl_xa_survive_disconnect.test new file mode 100644 index 000000000000..b482df66989e --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_xa_survive_disconnect.test @@ -0,0 +1 @@ +--source suite/rpl/t/rpl_xa_survive_disconnect.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_xa_survive_disconnect_lsu_off-slave.opt b/mysql-test/suite/rpl_encryption/t/rpl_xa_survive_disconnect_lsu_off-slave.opt new file mode 100644 index 000000000000..8860a9f27874 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_xa_survive_disconnect_lsu_off-slave.opt @@ -0,0 +1 @@ +--binlog-format='MIXED' --log-slave-updates=off diff --git a/mysql-test/suite/rpl_encryption/t/rpl_xa_survive_disconnect_lsu_off.test b/mysql-test/suite/rpl_encryption/t/rpl_xa_survive_disconnect_lsu_off.test new file mode 100644 index 000000000000..c6aad0f71034 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_xa_survive_disconnect_lsu_off.test @@ -0,0 +1 @@ +--source suite/rpl/t/rpl_xa_survive_disconnect_lsu_off.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_xa_survive_disconnect_mixed_engines.test b/mysql-test/suite/rpl_encryption/t/rpl_xa_survive_disconnect_mixed_engines.test new file mode 100644 index 000000000000..3f24da52bfb5 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_xa_survive_disconnect_mixed_engines.test @@ -0,0 +1 @@ +--source suite/rpl/t/rpl_xa_survive_disconnect_mixed_engines.test diff --git a/mysql-test/suite/rpl_encryption/t/rpl_xa_survive_disconnect_table-slave.opt b/mysql-test/suite/rpl_encryption/t/rpl_xa_survive_disconnect_table-slave.opt new file mode 100644 index 000000000000..73c30c37d5e4 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_xa_survive_disconnect_table-slave.opt @@ -0,0 +1 @@ +--binlog-format='MIXED' --relay-log-info-repository=table --sync-relay-log-info=1 diff --git a/mysql-test/suite/rpl_encryption/t/rpl_xa_survive_disconnect_table.test b/mysql-test/suite/rpl_encryption/t/rpl_xa_survive_disconnect_table.test new file mode 100644 index 000000000000..06f56918c61e --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_xa_survive_disconnect_table.test @@ -0,0 +1 @@ +--source suite/rpl/t/rpl_xa_survive_disconnect_table.test diff --git a/mysql-test/suite/rpl_encryption/t/testdata.inc b/mysql-test/suite/rpl_encryption/t/testdata.inc new file mode 100644 index 000000000000..48307396526c --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/testdata.inc @@ -0,0 +1,201 @@ +# This include file creates some basic events which should go to the binary log. +# What happens to the binary log depends on the test which calls the file, +# and should be checked from the test. +# +# Names are intentionally long and ugly, to make grepping more reliable. +# +# Some of events are considered unsafe for SBR (not necessarily correctly, +# but here isn't the place to check the logic), so we just suppress the warning. +# +# For those few queries which produce result sets (e.g. ANALYZE, CHECKSUM etc.), +# we don't care about the result, so it will not be printed to the output. + +call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT"); + +# +# Some DDL +# + +CREATE DATABASE database_name_to_encrypt; +USE database_name_to_encrypt; + +CREATE USER user_name_to_encrypt; +GRANT ALL ON database_name_to_encrypt.* TO user_name_to_encrypt; +SET PASSWORD FOR user_name_to_encrypt = PASSWORD('password_to_encrypt'); + +CREATE TABLE innodb_table_name_to_encrypt ( + int_column_name_to_encrypt INT PRIMARY KEY, + timestamp_column_name_to_encrypt TIMESTAMP(6) NULL, + blob_column_name_to_encrypt BLOB, + virt_column_name_to_encrypt INT AS (int_column_name_to_encrypt % 10) VIRTUAL, + pers_column_name_to_encrypt INT AS (int_column_name_to_encrypt) STORED, + varchar_column_name_to_encrypt VARCHAR(1024), + INDEX `index_name_to_encrypt`(`timestamp_column_name_to_encrypt`) +) ENGINE=InnoDB + PARTITION BY RANGE (int_column_name_to_encrypt) + SUBPARTITION BY KEY (int_column_name_to_encrypt) + SUBPARTITIONS 2 ( + PARTITION partition0_name_to_encrypt VALUES LESS THAN (100), + PARTITION partition1_name_to_encrypt VALUES LESS THAN (MAXVALUE) + ) +; + +CREATE TABLE myisam_table_name_to_encrypt ( + int_column_name_to_encrypt INT AUTO_INCREMENT PRIMARY KEY, + char_column_name_to_encrypt VARCHAR(255), + datetime_column_name_to_encrypt DATETIME, + text_column_name_to_encrypt TEXT +) ENGINE=MyISAM; + +CREATE TABLE innodb_table_name_to_encrypt_2 ( + int_column_name_to_encrypt INT AUTO_INCREMENT PRIMARY KEY, + varchar_column_name_to_encrypt VARCHAR(1024), + enum_column_name_to_encrypt ENUM( + 'enum_value1_to_encrypt', + 'enum_value2_to_encrypt' + ), + timestamp_column_name_to_encrypt TIMESTAMP(6) NULL, + blob_column_name_to_encrypt BLOB +); + +CREATE TRIGGER trigger_name_to_encrypt + AFTER INSERT ON myisam_table_name_to_encrypt FOR EACH ROW + INSERT INTO innodb_table_name_to_encrypt_2 (varchar_column_name_to_encrypt) + VALUES (NEW.char_column_name_to_encrypt); + +CREATE DEFINER=user_name_to_encrypt VIEW view_name_to_encrypt + AS SELECT * FROM innodb_table_name_to_encrypt; + +CREATE FUNCTION func_name_to_encrypt (func_parameter_to_encrypt INT) + RETURNS VARCHAR(64) + RETURN 'func_result_to_encrypt'; + +--delimiter $$ +CREATE PROCEDURE proc_name_to_encrypt ( + IN proc_in_parameter_to_encrypt CHAR(32), + OUT proc_out_parameter_to_encrypt INT +) +BEGIN + DECLARE procvar_name_to_encrypt CHAR(64) DEFAULT 'procvar_val_to_encrypt'; + DECLARE cursor_name_to_encrypt CURSOR FOR + SELECT virt_column_name_to_encrypt FROM innodb_table_name_to_encrypt; + DECLARE EXIT HANDLER FOR NOT FOUND + BEGIN + SET @stmt_var_to_encrypt = CONCAT( + "SELECT + IF (RAND()>0.5,'enum_value2_to_encrypt','enum_value1_to_encrypt') + FROM innodb_table_name_to_encrypt + INTO OUTFILE '", proc_in_parameter_to_encrypt, "'"); + PREPARE stmt_to_encrypt FROM @stmt_var_to_encrypt; + EXECUTE stmt_to_encrypt; + DEALLOCATE PREPARE stmt_to_encrypt; + END; + OPEN cursor_name_to_encrypt; + proc_label_to_encrypt: LOOP + FETCH cursor_name_to_encrypt INTO procvar_name_to_encrypt; + END LOOP; + CLOSE cursor_name_to_encrypt; +END $$ +--delimiter ; + +CREATE SERVER server_name_to_encrypt + FOREIGN DATA WRAPPER mysql + OPTIONS (HOST 'host_name_to_encrypt'); + +--let $_cur_con= $CURRENT_CONNECTION +--connect (con1,localhost,user_name_to_encrypt,password_to_encrypt,database_name_to_encrypt) +CREATE TEMPORARY TABLE tmp_table_name_to_encrypt ( + float_column_name_to_encrypt FLOAT, + binary_column_name_to_encrypt BINARY(64) +); +--disconnect con1 +--connection $_cur_con + +CREATE INDEX index_name_to_encrypt + ON myisam_table_name_to_encrypt (datetime_column_name_to_encrypt); + +ALTER DATABASE database_name_to_encrypt CHARACTER SET utf8; + +ALTER TABLE innodb_table_name_to_encrypt + MODIFY timestamp_column_name_to_encrypt TIMESTAMP NOT NULL + DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP +; + +ALTER ALGORITHM=MERGE VIEW view_name_to_encrypt + AS SELECT * FROM innodb_table_name_to_encrypt; + +RENAME TABLE innodb_table_name_to_encrypt TO new_table_name_to_encrypt; +ALTER TABLE new_table_name_to_encrypt RENAME TO innodb_table_name_to_encrypt; + +# +# Some DML +# + +--disable_warnings + +set @user_var1_to_encrypt= 'dyncol1_val_to_encrypt'; +set @user_var2_to_encrypt= 'dyncol2_name_to_encrypt'; + +INSERT INTO view_name_to_encrypt (int_column_name_to_encrypt, timestamp_column_name_to_encrypt, blob_column_name_to_encrypt) VALUES + (1, NOW(6), x'ABCABCABCABCABCABCABCABCABCABC'), + (2, NOW(6), x'DEFDEFDEFDEFDEFDEFDEFDEFDEFDEF') +; + +--delimiter $$ +CREATE PROCEDURE init_table() +BEGIN + DECLARE counter_name_to_encrypt INT DEFAULT 0; + select @id:=max(int_column_name_to_encrypt) from view_name_to_encrypt; + START TRANSACTION; + WHILE counter_name_to_encrypt<12 DO + INSERT INTO innodb_table_name_to_encrypt (int_column_name_to_encrypt, timestamp_column_name_to_encrypt, blob_column_name_to_encrypt) + SELECT @id := @id + 1, NOW(6), blob_column_name_to_encrypt + FROM innodb_table_name_to_encrypt + ORDER BY int_column_name_to_encrypt; + SET counter_name_to_encrypt = counter_name_to_encrypt+1; + END WHILE; + COMMIT; + END +$$ +--delimiter ; + +CALL init_table(); + +INSERT INTO myisam_table_name_to_encrypt + SELECT NULL, 'char_literal_to_encrypt', NULL, 'text_to_encrypt'; +INSERT INTO myisam_table_name_to_encrypt (char_column_name_to_encrypt) + SELECT char_column_name_to_encrypt FROM myisam_table_name_to_encrypt; +INSERT INTO myisam_table_name_to_encrypt (char_column_name_to_encrypt) + SELECT char_column_name_to_encrypt FROM myisam_table_name_to_encrypt; +INSERT INTO myisam_table_name_to_encrypt (char_column_name_to_encrypt) + SELECT char_column_name_to_encrypt FROM myisam_table_name_to_encrypt; + +CALL proc_name_to_encrypt('file_name_to_encrypt',@useless_var_to_encrypt); + +UPDATE view_name_to_encrypt SET blob_column_name_to_encrypt = + func_name_to_encrypt(0) +; + +--enable_warnings + +# +# Other statements +# + +--disable_result_log +ANALYZE TABLE myisam_table_name_to_encrypt; +CHECK TABLE innodb_table_name_to_encrypt_2; +CHECKSUM TABLE innodb_table_name_to_encrypt, myisam_table_name_to_encrypt; +--enable_result_log +RENAME USER user_name_to_encrypt to new_user_name_to_encrypt; +REVOKE ALL PRIVILEGES, GRANT OPTION FROM new_user_name_to_encrypt; + +# +# Cleanup +# +let $MYSQLD_DATADIR= `select @@datadir`; +--replace_result $MYSQLD_DATADIR MYSQLD_DATADIR +--remove_file $MYSQLD_DATADIR/database_name_to_encrypt/file_name_to_encrypt +DROP DATABASE database_name_to_encrypt; +DROP USER new_user_name_to_encrypt; +DROP SERVER server_name_to_encrypt; diff --git a/mysql-test/suite/sys_vars/r/encrypt_binlog_basic.result b/mysql-test/suite/sys_vars/r/encrypt_binlog_basic.result new file mode 100644 index 000000000000..325f4d20b3bb --- /dev/null +++ b/mysql-test/suite/sys_vars/r/encrypt_binlog_basic.result @@ -0,0 +1,48 @@ +SELECT COUNT(@@GLOBAL.encrypt_binlog); +COUNT(@@GLOBAL.encrypt_binlog) +1 +1 Expected +SELECT @@GLOBAL.encrypt_binlog; +@@GLOBAL.encrypt_binlog +0 +0 Expected +SET @@GLOBAL.encrypt_binlog=1; +ERROR HY000: Variable 'encrypt_binlog' is a read only variable +Expected error 'Read only variable' +SELECT COUNT(@@GLOBAL.encrypt_binlog); +COUNT(@@GLOBAL.encrypt_binlog) +1 +1 Expected +SELECT @@GLOBAL.encrypt_binlog= VARIABLE_VALUE +FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES +WHERE VARIABLE_NAME='encrypt_binlog'; +@@GLOBAL.encrypt_binlog= VARIABLE_VALUE +1 +1 Expected +SELECT COUNT(@@GLOBAL.encrypt_binlog); +COUNT(@@GLOBAL.encrypt_binlog) +1 +1 Expected +SELECT COUNT(VARIABLE_VALUE) +FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES +WHERE VARIABLE_NAME='encrypt_binlog'; +COUNT(VARIABLE_VALUE) +1 +1 Expected +SELECT @@encrypt_binlog= @@GLOBAL.encrypt_binlog; +@@encrypt_binlog= @@GLOBAL.encrypt_binlog +1 +1 Expected +SELECT COUNT(@@encrypt_binlog); +COUNT(@@encrypt_binlog) +1 +1 Expected +SELECT COUNT(@@local.encrypt_binlog); +ERROR HY000: Variable 'encrypt_binlog' is a GLOBAL variable +Expected error 'Variable is a GLOBAL variable' +SELECT COUNT(@@SESSION.encrypt_binlog); +ERROR HY000: Variable 'encrypt_binlog' is a GLOBAL variable +Expected error 'Variable is a GLOBAL variable' +SELECT encrypt_binlog= @@SESSION.encrypt_binlog; +ERROR 42S22: Unknown column 'encrypt_binlog' in 'field list' +Expected error 'Readonly variable' diff --git a/mysql-test/suite/sys_vars/t/encrypt_binlog_basic.test b/mysql-test/suite/sys_vars/t/encrypt_binlog_basic.test new file mode 100644 index 000000000000..3ab1883ecc90 --- /dev/null +++ b/mysql-test/suite/sys_vars/t/encrypt_binlog_basic.test @@ -0,0 +1,84 @@ +############################################################################### +# # +# Variable Name: encrypt_binlog # +# Scope: Global # +# Access Type: Static # +# Data Type: boolean # +# # +# # +# Creation Date: 2017-11-08 # +# Author : Robert Golebiowski # +# # +# # +# Description:Test Cases of Static System Variable encrypt_binlog # +# that checks the behavior of this variable in the following ways # +# * Value Check # +# * Scope Check # +# # +############################################################################### + +#################################################################### +# Displaying default value # +#################################################################### +SELECT COUNT(@@GLOBAL.encrypt_binlog); +--echo 1 Expected + +SELECT @@GLOBAL.encrypt_binlog; +--echo 0 Expected + +#################################################################### +# Check if Value cannot be set # +#################################################################### + +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +SET @@GLOBAL.encrypt_binlog=1; +--echo Expected error 'Read only variable' + +SELECT COUNT(@@GLOBAL.encrypt_binlog); +--echo 1 Expected + +################################################################# +# Check if the value in GLOBAL Table matches value in variable # +################################################################# + +--disable_warnings +SELECT @@GLOBAL.encrypt_binlog= VARIABLE_VALUE +FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES +WHERE VARIABLE_NAME='encrypt_binlog'; +--enable_warnings +--echo 1 Expected + +SELECT COUNT(@@GLOBAL.encrypt_binlog); +--echo 1 Expected + +--disable_warnings +SELECT COUNT(VARIABLE_VALUE) +FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES +WHERE VARIABLE_NAME='encrypt_binlog'; +--enable_warnings +--echo 1 Expected + +################################################################################ +# Check if accessing variable with and without GLOBAL point to same variable # +################################################################################ +SELECT @@encrypt_binlog= @@GLOBAL.encrypt_binlog; +--echo 1 Expected + +################################################################################ +# Check if encrypt_binlog can be accessed with and without @@ sign # +################################################################################ + +SELECT COUNT(@@encrypt_binlog); +--echo 1 Expected + +--Error ER_INCORRECT_GLOBAL_LOCAL_VAR +SELECT COUNT(@@local.encrypt_binlog); +--echo Expected error 'Variable is a GLOBAL variable' + +--Error ER_INCORRECT_GLOBAL_LOCAL_VAR +SELECT COUNT(@@SESSION.encrypt_binlog); +--echo Expected error 'Variable is a GLOBAL variable' + +--Error ER_BAD_FIELD_ERROR +SELECT encrypt_binlog= @@SESSION.encrypt_binlog; +--echo Expected error 'Readonly variable' diff --git a/mysys/my_malloc.c b/mysys/my_malloc.c index 230ee5b4f1ee..b64c2ce27447 100644 --- a/mysys/my_malloc.c +++ b/mysys/my_malloc.c @@ -323,3 +323,17 @@ char *my_strndup(PSI_memory_key key, const char *from, size_t length, myf my_fla return ptr; } +#if !defined(HAVE_MEMSET_S) +void memset_s(void *dest, size_t dest_max, int c, size_t n) +{ +#if defined(WIN32) + SecureZeroMemory(dest, n); +#else + volatile unsigned char *p = (unsigned char*)(dest); + while (dest_max-- && n--) { + *p++ = c; + } +#endif +} +#endif + diff --git a/mysys_ssl/CMakeLists.txt b/mysys_ssl/CMakeLists.txt index eec1be7127ad..ad76b11531ae 100644 --- a/mysys_ssl/CMakeLists.txt +++ b/mysys_ssl/CMakeLists.txt @@ -16,7 +16,8 @@ INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/mysys_ssl ${CMAKE_SOURCE_DIR}/mysys - ${SSL_INCLUDE_DIRS}) + ${SSL_INCLUDE_DIRS} + SYSTEM ${BOOST_INCLUDE_DIR}) IF(SSL_DEFINES) ADD_DEFINITIONS(${SSL_DEFINES}) @@ -39,6 +40,7 @@ SET(MYSYS_SSL_SOURCES my_md5.cc my_rnd.cc my_murmur3.cc + my_crypt.cc ${MYSYS_AES_IMPLEMENTATION} ) diff --git a/mysys_ssl/my_crypt.cc b/mysys_ssl/my_crypt.cc new file mode 100644 index 000000000000..124ca04f9ef5 --- /dev/null +++ b/mysys_ssl/my_crypt.cc @@ -0,0 +1,393 @@ +/* + Copyright (c) 2014 Google Inc. + Copyright (c) 2014, 2017 MariaDB Corporation + + 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 */ + +#include +#include + +#ifdef HAVE_YASSL +#include "yassl.cc" +#else +#include +#include +#include +#include +#endif +#include +#include +#include + +#if OPENSSL_VERSION_NUMBER >= 0x10100000L +#define ERR_remove_state(X) ERR_clear_error() +#else +#define EVP_CIPHER_CTX_buf_noconst(ctx) ((ctx)->buf) +#define RAND_OpenSSL() RAND_SSLeay() +#endif + +#define MAKE_AES_DISPATCHER(MODE) \ + static inline const EVP_CIPHER *aes_ ## MODE(uint klen) \ + { \ + switch (klen) { \ + case 16: return EVP_aes_128_ ## MODE(); \ + case 24: return EVP_aes_192_ ## MODE(); \ + case 32: return EVP_aes_256_ ## MODE(); \ + default: return 0; \ + } \ + } + +MAKE_AES_DISPATCHER(ecb) +MAKE_AES_DISPATCHER(cbc) +#ifdef HAVE_EncryptAes128Ctr +MAKE_AES_DISPATCHER(ctr) +#endif /* HAVE_EncryptAes128Ctr */ +#ifdef HAVE_EncryptAes128Gcm +MAKE_AES_DISPATCHER(gcm) +#endif + +typedef const EVP_CIPHER* (*cipher_function)(uint); + +static const cipher_function ciphers[]= { + aes_ecb, aes_cbc +#ifdef HAVE_EncryptAes128Ctr + , aes_ctr +#ifdef HAVE_EncryptAes128Gcm + , aes_gcm +#endif +#endif +}; + +class MyEncryptionCTX : private boost::noncopyable +{ +public: + MyEncryptionCTX(); + virtual ~MyEncryptionCTX(); + + virtual int init(const my_aes_mode mode, int encrypt, const uchar *key, size_t klen, + const uchar *iv, size_t ivlen); + virtual int update(const uchar *src, size_t slen, uchar *dst, size_t *dlen); + virtual int finish(uchar *dst, size_t *dlen); + +protected: + EVP_CIPHER_CTX *ctx; +}; + +MyEncryptionCTX::MyEncryptionCTX() +{ +#if OPENSSL_VERSION_NUMBER < 0x10100000L + ctx= new EVP_CIPHER_CTX(); + EVP_CIPHER_CTX_init(ctx); +#else + ctx= EVP_CIPHER_CTX_new(); +#endif +} + +MyEncryptionCTX::~MyEncryptionCTX() +{ + +#if OPENSSL_VERSION_NUMBER < 0x10100000L + EVP_CIPHER_CTX_cleanup(ctx); + delete ctx; +#else + EVP_CIPHER_CTX_reset(ctx); + EVP_CIPHER_CTX_free(ctx); +#endif + ERR_remove_state(0); +} + +int MyEncryptionCTX::init(const my_aes_mode mode, int encrypt, const uchar *key, + size_t klen, const uchar *iv, size_t ivlen) +{ + if (unlikely(!ciphers[mode](klen))) + return MY_AES_BAD_KEYSIZE; + + if (!EVP_CipherInit_ex(ctx, ciphers[mode](klen), NULL, + key, iv, encrypt)) + return MY_AES_OPENSSL_ERROR; + + DBUG_ASSERT(EVP_CIPHER_CTX_key_length(ctx) == (int)klen); + DBUG_ASSERT(EVP_CIPHER_CTX_iv_length(ctx) <= (int)ivlen); + + return MY_AES_OK; +} + +int MyEncryptionCTX::update(const uchar *src, size_t slen, uchar *dst, size_t *dlen) +{ + if (!EVP_CipherUpdate(ctx, dst, (int*)dlen, src, slen)) + return MY_AES_OPENSSL_ERROR; + return MY_AES_OK; +} + +int MyEncryptionCTX::finish(uchar *dst, size_t *dlen) +{ + if (!EVP_CipherFinal_ex(ctx, dst, (int*)dlen)) + return MY_AES_BAD_DATA; + return MY_AES_OK; +} + +typedef MyEncryptionCTX MyEncryptionCTX_ctr; + +class MyEncryptionCTX_nopad : public MyEncryptionCTX +{ +public: + MyEncryptionCTX_nopad() : MyEncryptionCTX() { } + virtual ~MyEncryptionCTX_nopad() { } + + int init(const my_aes_mode mode, int encrypt, const uchar *key, size_t klen, + const uchar *iv, size_t ivlen) + { + this->key= key; + this->klen= klen; + this->buf_len= 0; + memcpy(oiv, iv, ivlen); + DBUG_ASSERT(ivlen == 0 || ivlen == sizeof(oiv)); + + int res= MyEncryptionCTX::init(mode, encrypt, key, klen, iv, ivlen); + if (res == MY_AES_OK) + EVP_CIPHER_CTX_set_padding(ctx, 0); + return res; + } + + int update(const uchar *src, size_t slen, uchar *dst, size_t *dlen) + { + buf_len+= slen; + return MyEncryptionCTX::update(src, slen, dst, dlen); + } + + int finish(uchar *dst, size_t *dlen) + { + buf_len %= MY_AES_BLOCK_SIZE; + if (buf_len) + { + uchar *buf= EVP_CIPHER_CTX_buf_noconst(ctx); + /* + Not much we can do, block ciphers cannot encrypt data that aren't + a multiple of the block length. At least not without padding. + Let's do something CTR-like for the last partial block. + + NOTE this assumes that there are only buf_len bytes in the buf. + If OpenSSL will change that, we'll need to change the implementation + of this class too. + */ + uchar mask[MY_AES_BLOCK_SIZE]; + size_t mlen; + + int result= my_aes_crypt(MY_AES_ECB, ENCRYPTION_FLAG_ENCRYPT | ENCRYPTION_FLAG_NOPAD, + oiv, sizeof(mask), mask, &mlen, key, klen, 0, 0); + if (result != MY_AES_OK) + return result; + DBUG_ASSERT(mlen == sizeof(mask)); + + for (uint i=0; i < buf_len; i++) + dst[i]= buf[i] ^ mask[i]; + } + *dlen= buf_len; + return MY_AES_OK; + } + +private: + const uchar *key; + uint klen, buf_len; + uchar oiv[MY_AES_BLOCK_SIZE]; +}; + + +/* + special implementation for GCM; to fit OpenSSL AES-GCM into the + existing my_aes_* API it does the following: + - IV tail (over 12 bytes) goes to AAD + - the tag is appended to the ciphertext +*/ +#ifdef HAVE_EncryptAes128Gcm + +class MyEncryptionCTX_gcm : public MyEncryptionCTX +{ +public: + MyEncryptionCTX_gcm() : MyEncryptionCTX() { } + virtual ~MyEncryptionCTX_gcm() { } + + int init(const my_aes_mode mode, int encrypt, const uchar *key, size_t klen, + const uchar *iv, size_t ivlen) + { + int res= MyEncryptionCTX::init(mode, encrypt, key, klen, iv, ivlen); + int real_ivlen= EVP_CIPHER_CTX_iv_length(ctx); + aad= iv + real_ivlen; + aadlen= ivlen - real_ivlen; + return res; + } + + int update(const uchar *src, size_t slen, uchar *dst, size_t *dlen) + { + /* + note that this GCM class cannot do streaming decryption, because + it needs the tag (which is located at the end of encrypted data) + before decrypting the data. it can encrypt data piecewise, like, first + half, then the second half, but it must decrypt all at once + */ + if (!EVP_CIPHER_CTX_encrypting(ctx)) + { + /* encrypted string must contain authenticaton tag (see MDEV-11174) */ + if (slen < MY_AES_BLOCK_SIZE) + return MY_AES_BAD_DATA; + slen-= MY_AES_BLOCK_SIZE; + if(!EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_SET_TAG, MY_AES_BLOCK_SIZE, + (void*)(src + slen))) + return MY_AES_OPENSSL_ERROR; + } + int unused; + if (aadlen && !EVP_CipherUpdate(ctx, NULL, &unused, aad, aadlen)) + return MY_AES_OPENSSL_ERROR; + aadlen= 0; + return MyEncryptionCTX::update(src, slen, dst, dlen); + } + + int finish(uchar *dst, size_t *dlen) + { + int fin; + if (!EVP_CipherFinal_ex(ctx, dst, &fin)) + return MY_AES_BAD_DATA; + DBUG_ASSERT(fin == 0); + + if (EVP_CIPHER_CTX_encrypting(ctx)) + { + if(!EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_GET_TAG, MY_AES_BLOCK_SIZE, dst)) + return MY_AES_OPENSSL_ERROR; + *dlen= MY_AES_BLOCK_SIZE; + } + else + *dlen= 0; + return MY_AES_OK; + } +private: + const uchar *aad; + int aadlen; +}; + +#endif + +int my_aes_crypt_init(MyEncryptionCTX* &ctx, const my_aes_mode mode, int flags, + const unsigned char* key, size_t klen, + const unsigned char* iv, size_t ivlen) +{ +#ifdef HAVE_EncryptAes128Ctr +#ifdef HAVE_EncryptAes128Gcm + if (mode == MY_AES_GCM) + if (flags & ENCRYPTION_FLAG_NOPAD) + return MY_AES_OPENSSL_ERROR; + else + ctx= new MyEncryptionCTX_gcm(); + else +#endif + if (mode == MY_AES_CTR) + ctx= new MyEncryptionCTX_ctr(); + else +#endif + ctx= (flags & ENCRYPTION_FLAG_NOPAD) ? new MyEncryptionCTX_nopad() + : new MyEncryptionCTX(); + + int ctx_init_result= ctx->init(mode, flags & 1, key, klen, iv, ivlen); + if (ctx_init_result != MY_AES_OK) + { + delete ctx; + ctx= NULL; + } + return ctx_init_result; +} + +int my_aes_crypt_update(MyEncryptionCTX *ctx, const uchar *src, size_t slen, + uchar *dst, size_t *dlen) +{ + return ctx->update(src, slen, dst, dlen); +} + +void my_aes_crypt_free_ctx(MyEncryptionCTX* ctx) +{ + delete ctx; +} + +int my_aes_crypt_finish(MyEncryptionCTX* &ctx, uchar *dst, size_t *dlen) +{ + int res= ctx->finish(dst, dlen); + delete ctx; + ctx= NULL; + return res; +} + +int my_aes_crypt(const my_aes_mode mode, int flags, + const uchar *src, size_t slen, uchar *dst, size_t *dlen, + const uchar *key, size_t klen, const uchar *iv, size_t ivlen) +{ + int res1, res2; + size_t d1= 0, d2; + MyEncryptionCTX *ctx = NULL; + if ((res1= my_aes_crypt_init(ctx, mode, flags, key, klen, iv, ivlen))) + { + if (ctx != NULL) + delete ctx; + return res1; + } + res1= my_aes_crypt_update(ctx, src, slen, dst, &d1); + res2= my_aes_crypt_finish(ctx, dst + d1, &d2); + if (res1 || res2) + ERR_remove_state(0); /* in case of failure clear error queue */ + else + *dlen= d1 + d2; + return res1 ? res1 : res2; +} + + +/* + calculate the length of the cyphertext from the length of the plaintext + for different AES encryption modes with padding enabled. + Without padding (ENCRYPTION_FLAG_NOPAD) cyphertext has the same length + as the plaintext +*/ +size_t my_aes_crypt_get_size(enum my_aes_mode mode MY_ATTRIBUTE((unused)), size_t source_length) +{ +#ifdef HAVE_EncryptAes128Ctr + if (mode == MY_AES_CTR) + return source_length; +#ifdef HAVE_EncryptAes128Gcm + if (mode == MY_AES_GCM) + return source_length + MY_AES_BLOCK_SIZE; +#endif +#endif + return (source_length / MY_AES_BLOCK_SIZE + 1) * MY_AES_BLOCK_SIZE; +} + +#ifdef HAVE_YASSL +#include +int my_random_bytes(uchar* buf, int num) +{ + TaoCrypt::RandomNumberGenerator rand; + rand.GenerateBlock((TaoCrypt::byte*) buf, num); + return MY_AES_OK; +} +#else + +int my_random_bytes(uchar *buf, int num) +{ + /* + Unfortunately RAND_bytes manual page does not provide any guarantees + in relation to blocking behavior. Here we explicitly use SSLeay random + instead of whatever random engine is currently set in OpenSSL. That way + we are guaranteed to have a non-blocking random. + */ + RAND_METHOD *rand = RAND_OpenSSL(); + if (rand == NULL || rand->bytes(buf, num) != 1) + return MY_AES_OPENSSL_ERROR; + return MY_AES_OK; +} +#endif diff --git a/mysys_ssl/yassl.cc b/mysys_ssl/yassl.cc new file mode 100644 index 000000000000..9c440b15199d --- /dev/null +++ b/mysys_ssl/yassl.cc @@ -0,0 +1,194 @@ +/* + Copyright (c) 2015 MariaDB Corporation + + 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 */ + +/* + The very minimal subset of OpenSSL's EVP* functions. + Just enough for my_crypt.cc to work. + + On the other hand, where it has to implement OpenSSL functionality, + it tries to be compatible (e.g. same flags and struct member names). +*/ + +#include +#include "aes.hpp" + +using yaSSL::yaERR_remove_state; + +#define EVP_CIPH_ECB_MODE 0x1 +#define EVP_CIPH_CBC_MODE 0x2 +#define EVP_CIPH_NO_PADDING 0x100 + +/* + note that TaoCrypt::AES object is not explicitly put into EVP_CIPHER_CTX. + That's because we need to control when TaoCrypt::AES constructor and + destructor are called. +*/ +typedef struct +{ + ulong flags; + int encrypt; + int key_len; + int buf_len; + int final_used; + uchar tao_buf[sizeof(TaoCrypt::AES)]; // TaoCrypt::AES object + uchar oiv[TaoCrypt::AES::BLOCK_SIZE]; // original IV + uchar buf[TaoCrypt::AES::BLOCK_SIZE]; // last partial input block + uchar final[TaoCrypt::AES::BLOCK_SIZE]; // last decrypted (output) block +} EVP_CIPHER_CTX; + +typedef struct { + TaoCrypt::Mode mode; + TaoCrypt::word32 key_len; +} EVP_CIPHER; + +#define GEN_CIPHER(MODE_LC, MODE_UC, LEN) \ + static const EVP_CIPHER *EVP_aes_ ## LEN ## _ ## MODE_LC() \ + { static const EVP_CIPHER c={TaoCrypt::MODE_UC, LEN/8}; return &c; } + +GEN_CIPHER(ecb,ECB,128) +GEN_CIPHER(ecb,ECB,192) +GEN_CIPHER(ecb,ECB,256) +GEN_CIPHER(cbc,CBC,128) +GEN_CIPHER(cbc,CBC,192) +GEN_CIPHER(cbc,CBC,256) + +static inline TaoCrypt::AES *TAO(EVP_CIPHER_CTX *ctx) +{ + return (TaoCrypt::AES *)(ctx->tao_buf); +} + +static void EVP_CIPHER_CTX_init(EVP_CIPHER_CTX *ctx) +{ + ctx->final_used= ctx->buf_len= ctx->flags= 0; +} + +static int EVP_CIPHER_CTX_cleanup(EVP_CIPHER_CTX *ctx) +{ + TAO(ctx)->~AES(); + return 1; +} + +static int EVP_CIPHER_CTX_set_padding(EVP_CIPHER_CTX *ctx, int pad) +{ + if (pad) + ctx->flags&= ~EVP_CIPH_NO_PADDING; + else + ctx->flags|= EVP_CIPH_NO_PADDING; + return 1; +} + +static int EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, + void *, const uchar *key, const uchar *iv, int enc) +{ + new (ctx->tao_buf) TaoCrypt::AES(enc ? TaoCrypt::ENCRYPTION + : TaoCrypt::DECRYPTION, cipher->mode); + TAO(ctx)->SetKey(key, cipher->key_len); + if (iv) + { + TAO(ctx)->SetIV(iv); + memcpy(ctx->oiv, iv, TaoCrypt::AES::BLOCK_SIZE); + } + ctx->encrypt= enc; + ctx->key_len= cipher->key_len; + ctx->flags|= cipher->mode == TaoCrypt::CBC ? EVP_CIPH_CBC_MODE : EVP_CIPH_ECB_MODE; + return 1; +} + +static int EVP_CIPHER_CTX_key_length(const EVP_CIPHER_CTX *ctx) +{ + return ctx->key_len; +} + +static int EVP_CIPHER_CTX_iv_length(const EVP_CIPHER_CTX *ctx) +{ + return ctx->flags & EVP_CIPH_ECB_MODE ? 0 : TaoCrypt::AES::BLOCK_SIZE; +} + +static void do_whole_blocks(EVP_CIPHER_CTX *ctx, uchar *out, int *outl, + const uchar *in, int inl) +{ + DBUG_ASSERT(inl); + DBUG_ASSERT(inl % TaoCrypt::AES::BLOCK_SIZE == 0); + if (ctx->encrypt || (ctx->flags & EVP_CIPH_NO_PADDING)) + { + TAO(ctx)->Process(out, in, inl); + *outl+= inl; + return; + } + /* 'final' is only needed when decrypting with padding */ + if (ctx->final_used) + { + memcpy(out, ctx->final, TaoCrypt::AES::BLOCK_SIZE); + *outl+= TaoCrypt::AES::BLOCK_SIZE; + out+= TaoCrypt::AES::BLOCK_SIZE; + } + inl-= TaoCrypt::AES::BLOCK_SIZE; + TAO(ctx)->Process(out, in, inl); + *outl+= inl; + TAO(ctx)->Process(ctx->final, in + inl, TaoCrypt::AES::BLOCK_SIZE); + ctx->final_used= 1; +} + +static int EVP_CipherUpdate(EVP_CIPHER_CTX *ctx, uchar *out, int *outl, + const uchar *in, int inl) +{ + *outl= 0; + if (ctx->buf_len) + { + int prefixl= TaoCrypt::AES::BLOCK_SIZE - ctx->buf_len; + if (prefixl > inl) + { + memcpy(ctx->buf + ctx->buf_len, in, inl); + ctx->buf_len+= inl; + return 1; + } + memcpy(ctx->buf + ctx->buf_len, in, prefixl); + do_whole_blocks(ctx, out, outl, ctx->buf, TaoCrypt::AES::BLOCK_SIZE); + in+= prefixl; + inl-= prefixl; + out+= *outl; + } + ctx->buf_len= inl % TaoCrypt::AES::BLOCK_SIZE; + inl-= ctx->buf_len; + memcpy(ctx->buf, in + inl, ctx->buf_len); + if (inl) + do_whole_blocks(ctx, out, outl, in, inl); + return 1; +} + +static int EVP_CipherFinal_ex(EVP_CIPHER_CTX *ctx, uchar *out, int *outl) +{ + if (ctx->flags & EVP_CIPH_NO_PADDING) + return ctx->buf_len == 0; + + // PKCS#7 padding + *outl= 0; + if (ctx->encrypt) + { + int v= TaoCrypt::AES::BLOCK_SIZE - ctx->buf_len; + memset(ctx->buf + ctx->buf_len, v, v); + do_whole_blocks(ctx, out, outl, ctx->buf, TaoCrypt::AES::BLOCK_SIZE); + return 1; + } + int n= ctx->final[TaoCrypt::AES::BLOCK_SIZE - 1]; + if (ctx->buf_len || !ctx->final_used || + n < 1 || n > TaoCrypt::AES::BLOCK_SIZE) + return 0; + *outl= TaoCrypt::AES::BLOCK_SIZE - n; + memcpy(out, ctx->final, *outl); + return 1; +} + diff --git a/plugin/keyring_vault/vault_memory.h b/plugin/keyring_vault/vault_memory.h index 61c743165580..a1dfab312669 100644 --- a/plugin/keyring_vault/vault_memory.h +++ b/plugin/keyring_vault/vault_memory.h @@ -6,20 +6,6 @@ namespace keyring { -#if !defined(HAVE_MEMSET_S) - inline void memset_s(void *dest, size_t dest_max, int c, size_t n) - { -#if defined(WIN32) - SecureZeroMemory(dest, n); -#else - volatile unsigned char *p = reinterpret_cast(dest); - while (dest_max-- && n--) { - *p++ = c; - } -#endif - } -#endif - template class Secure_allocator : public std::allocator { public: diff --git a/rapid/plugin/group_replication/include/pipeline_interfaces.h b/rapid/plugin/group_replication/include/pipeline_interfaces.h index 5b88da4dba8d..051e44d0201b 100644 --- a/rapid/plugin/group_replication/include/pipeline_interfaces.h +++ b/rapid/plugin/group_replication/include/pipeline_interfaces.h @@ -411,7 +411,7 @@ class Pipeline_event return error; /* purecov: inspected */ } - if ((error= Log_event::read_log_event(cache, &packet_data, 0, + if ((error= Log_event::read_log_event(cache, &packet_data, 0, NULL, binary_log::BINLOG_CHECKSUM_ALG_OFF))) { log_message(MY_ERROR_LEVEL, diff --git a/sql/CMakeLists.txt b/sql/CMakeLists.txt index 0b40ce7e0817..5781650e2bd6 100644 --- a/sql/CMakeLists.txt +++ b/sql/CMakeLists.txt @@ -25,6 +25,7 @@ INCLUDE_DIRECTORIES( ${SSL_INCLUDE_DIRS} ${CMAKE_BINARY_DIR}/sql ${LZ4_INCLUDE_DIR} + SYSTEM ${BOOST_INCLUDE_DIR} ) SET(CONF_SOURCES @@ -118,6 +119,7 @@ SET(SQL_SHARED_SOURCES lock.cc locking_service.cc log.cc + event_crypt.cc mdl.cc my_decimal.cc net_serv.cc @@ -247,6 +249,7 @@ SET(SQL_SHARED_SOURCES uniques.cc unireg.cc xa.cc + binlog_crypt_data.cc ) IF(WIN32) @@ -409,7 +412,8 @@ SET (BINLOG_SOURCE rpl_gtid_misc.cc rpl_gtid_mutex_cond_array.cc rpl_gtid_persist.cc log_event.cc log_event_old.cc binlog.cc sql_binlog.cc rpl_filter.cc rpl_record.cc rpl_record_old.cc - rpl_utility.cc rpl_injector.cc rpl_table_access.cc) + rpl_utility.cc rpl_injector.cc rpl_table_access.cc event_crypt.cc + binlog_crypt_data.cc) ADD_CONVENIENCE_LIBRARY(binlog ${BINLOG_SOURCE}) TARGET_LINK_LIBRARIES(binlog binlogevents_static) diff --git a/sql/binlog.cc b/sql/binlog.cc index 97e35e0404f3..1f784ebb12d8 100644 --- a/sql/binlog.cc +++ b/sql/binlog.cc @@ -40,6 +40,7 @@ #include #include +#include "my_rnd.h" using std::max; using std::min; @@ -1032,6 +1033,8 @@ class Binlog_event_writer checksum--; } + Event_encrypter event_encrypter; + /** Write part of an event to disk. @@ -1068,6 +1071,11 @@ class Binlog_event_writer if (*buf_len_p == 0) DBUG_RETURN(false); + size_t len= *event_len_p; + uchar *pos= *buf_p; + + bool is_header= (*event_len_p == 0); + // This is the beginning of an event if (*event_len_p == 0) { @@ -1092,16 +1100,34 @@ class Binlog_event_writer // Store end_log_pos int4store(*buf_p + LOG_POS_OFFSET, end_log_pos); - } + DBUG_ASSERT(output_cache == mysql_bin_log.get_log_file()); + + len= *event_len_p; + if (event_encrypter.is_encryption_enabled()) + { + uint32 write_bytes= std::min(*buf_len_p, *event_len_p); + len= write_bytes; + DBUG_ASSERT(write_bytes > 0); + + // update the checksum + if (have_checksum) + checksum= my_checksum(checksum, *buf_p, write_bytes); + + if (event_encrypter.init(output_cache, pos, len)) + DBUG_RETURN(true); + } + } + // write the buffer - uint32 write_bytes= std::min(*buf_len_p, *event_len_p); + uint32 write_bytes= std::min(*buf_len_p, len); DBUG_ASSERT(write_bytes > 0); - if (my_b_write(output_cache, *buf_p, write_bytes)) + if (event_encrypter.encrypt_and_write(output_cache, pos, write_bytes)) DBUG_RETURN(true); - // update the checksum - if (have_checksum) + if (event_encrypter.is_encryption_enabled() && is_header) + write_bytes+=4; + else if (have_checksum) checksum= my_checksum(checksum, *buf_p, write_bytes); // Step positions. @@ -1110,18 +1136,20 @@ class Binlog_event_writer *event_len_p-= write_bytes; thd->binlog_bytes_written+= write_bytes; - if (have_checksum) + if (*event_len_p == 0) { // store checksum - if (*event_len_p == 0) + if (have_checksum) { - char checksum_buf[BINLOG_CHECKSUM_LEN]; + uchar checksum_buf[BINLOG_CHECKSUM_LEN]; int4store(checksum_buf, checksum); - if (my_b_write(output_cache, checksum_buf, BINLOG_CHECKSUM_LEN)) + if (event_encrypter.encrypt_and_write(output_cache, checksum_buf, BINLOG_CHECKSUM_LEN)) DBUG_RETURN(true); thd->binlog_bytes_written+= BINLOG_CHECKSUM_LEN; checksum= initial_checksum; } + if (event_encrypter.is_encryption_enabled() && event_encrypter.finish(output_cache)) + DBUG_RETURN(true); } DBUG_RETURN(false); @@ -1577,6 +1605,9 @@ binlog_cache_data::flush(THD *thd, my_off_t *bytes_written, bool *wrote_xid) */ Binlog_event_writer writer(mysql_bin_log.get_log_file(), thd); + if (mysql_bin_log.get_crypto_data()->is_enabled()) + writer.event_encrypter.enable_encryption(mysql_bin_log.get_crypto_data()); + /* The GTID ownership process might set the commit_error */ error= (thd->commit_error == THD::CE_FLUSH_ERROR); @@ -3223,39 +3254,57 @@ bool show_binlog_events(THD *thd, MYSQL_BIN_LOG *binary_log) Read the first event in case it's a Format_description_log_event, to know the format. If there's no such event, we are 3.23 or 4.x. This code, like before, can't read 3.23 binlogs. + Also read the second event, in case it's a Start_encryption_log_event. 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, (mysql_mutex_t*)0, description_event, - opt_master_verify_checksum); - if (ev) + + my_off_t scan_pos= BIN_LOG_HEADER_SIZE; + while (scan_pos < pos) { + ev= Log_event::read_log_event(&log, (mysql_mutex_t*)0, description_event, + opt_master_verify_checksum); + scan_pos= my_b_tell(&log); + if (ev == NULL || (ev->get_type_code() != binary_log::FORMAT_DESCRIPTION_EVENT && + !ev->is_valid())) + { + errmsg = "Wrong offset or I/O error"; + goto err; + } if (ev->get_type_code() == binary_log::FORMAT_DESCRIPTION_EVENT) { delete description_event; description_event= (Format_description_log_event*) ev; + if (!description_event->is_valid()) + { + errmsg="Invalid Format_description event; could be out of memory"; + goto err; + } } else + { + if (ev->get_type_code() == binary_log::START_ENCRYPTION_EVENT) + { + if (description_event->start_decryption(static_cast(ev))) + { + delete ev; + errmsg= "Could not initialize decryption of binlog."; + goto err; + } + } delete ev; + break; + } } my_b_seek(&log, pos); - if (!description_event->is_valid()) - { - errmsg="Invalid Format_description event; could be out of memory"; - goto err; - } - for (event_count = 0; (ev = Log_event::read_log_event(&log, (mysql_mutex_t*) 0, description_event, opt_master_verify_checksum)); ) { DEBUG_SYNC(thd, "wait_in_show_binlog_events_loop"); - if (ev->get_type_code() == binary_log::FORMAT_DESCRIPTION_EVENT) - description_event->common_footer->checksum_alg= - ev->common_footer->checksum_alg; if (event_count >= limit_start && ev->net_send(protocol, linfo.log_file_name, pos)) { @@ -3264,8 +3313,29 @@ bool show_binlog_events(THD *thd, MYSQL_BIN_LOG *binary_log) goto err; } + if (ev->get_type_code() == binary_log::FORMAT_DESCRIPTION_EVENT) + { + Format_description_log_event* new_fdle= + static_cast(ev); + new_fdle->copy_crypto_data(*description_event); + delete description_event; + description_event= new_fdle; + } + else + { + if (ev->get_type_code() == binary_log::START_ENCRYPTION_EVENT) + { + if (description_event->start_decryption(static_cast(ev))) + { + errmsg= "Error starting decryption"; + delete ev; + goto err; + } + } + delete ev; + } + pos = my_b_tell(&log); - delete ev; if (++event_count >= limit_end || pos >= end_pos) break; @@ -3892,6 +3962,8 @@ read_gtids_and_update_trx_parser_from_relaylog( DBUG_RETURN(false); } + fd_ev_p->reset_crypto(); + /* Seek for Previous_gtids_log_event and Gtid_log_event events to gather information what has been processed so far. @@ -3989,12 +4061,15 @@ read_gtids_and_update_trx_parser_from_relaylog( } } + Format_description_log_event *new_fd_ev_p= NULL; switch (ev->get_type_code()) { case binary_log::FORMAT_DESCRIPTION_EVENT: + new_fd_ev_p= static_cast(ev); + new_fd_ev_p->copy_crypto_data(*fd_ev_p); if (fd_ev_p != &fd_ev) delete fd_ev_p; - fd_ev_p= (Format_description_log_event *)ev; + fd_ev_p= new_fd_ev_p; break; case binary_log::ROTATE_EVENT: // do nothing; just accept this event and go to next @@ -4059,6 +4134,10 @@ read_gtids_and_update_trx_parser_from_relaylog( } break; } + case binary_log::START_ENCRYPTION_EVENT: + if (fd_ev_p->start_decryption((Start_encryption_log_event*) ev)) + sql_print_warning("Error initializing decryption while reading GTIDs from relaylog"); + break; case binary_log::ANONYMOUS_GTID_LOG_EVENT: default: /* @@ -4194,6 +4273,8 @@ read_gtids_from_binlog(const char *filename, Gtid_set *all_gtids, DBUG_RETURN(TRUNCATED); } + fd_ev_p->reset_crypto(); + /* Seek for Previous_gtids_log_event and Gtid_log_event events to gather information what has been processed so far. @@ -4211,12 +4292,15 @@ read_gtids_from_binlog(const char *filename, Gtid_set *all_gtids, event_counter++; #endif DBUG_PRINT("info", ("Read event of type %s", ev->get_type_str())); + Format_description_log_event *new_fd_ev_p= NULL; switch (ev->get_type_code()) { case binary_log::FORMAT_DESCRIPTION_EVENT: + new_fd_ev_p= static_cast(ev); + new_fd_ev_p->copy_crypto_data(*fd_ev_p); if (fd_ev_p != &fd_ev) delete fd_ev_p; - fd_ev_p= (Format_description_log_event *)ev; + fd_ev_p= new_fd_ev_p; break; case binary_log::ROTATE_EVENT: // do nothing; just accept this event and go to next @@ -4324,6 +4408,15 @@ read_gtids_from_binlog(const char *filename, Gtid_set *all_gtids, } break; } + case binary_log::START_ENCRYPTION_EVENT: + { + if (fd_ev_p->start_decryption(static_cast(ev))) + sql_print_warning("Error initializing decryption while reading GTIDs from binary log"); + // in case start_decryption fails next call to read_log_event will fail too + // this failure will be handled outside the loop + break; + } + case binary_log::ANONYMOUS_GTID_LOG_EVENT: { /* @@ -4995,6 +5088,7 @@ bool MYSQL_BIN_LOG::open_binlog(const char *log_name, s.common_footer->checksum_alg= static_cast (binlog_checksum_options); + crypto.disable(); DBUG_ASSERT((s.common_footer)->checksum_alg != binary_log::BINLOG_CHECKSUM_ALG_UNDEF); if (!s.is_valid()) @@ -5006,6 +5100,31 @@ bool MYSQL_BIN_LOG::open_binlog(const char *log_name, if (s.write(&log_file)) goto err; bytes_written+= s.common_header->data_written; + + if (encrypt_binlog) + { + uchar nonce[Binlog_crypt_data::BINLOG_NONCE_LENGTH]; + if (my_rand_buffer(nonce, sizeof(nonce))) + goto err; + + Start_encryption_log_event sele(1, 0, nonce); + sele.common_footer->checksum_alg= s.common_footer->checksum_alg; + if (write_to_file(&sele)) + { + sql_print_error("Failed to write Start_encryption event to binary log and thus " + "failed to initialize binlog encryption."); + goto err; + } + bytes_written+= sele.common_header->data_written; + + if (crypto.init(sele.crypto_scheme, 0, nonce)) + { + sql_print_error("Failed to fetch percona_binlog key from keyring and thus " + "failed to initialize binlog encryption."); + goto err; + } + } + /* We need to revisit this code and improve it. See further comments in the mysqld. @@ -5050,7 +5169,7 @@ bool MYSQL_BIN_LOG::open_binlog(const char *log_name, global_sid_lock->unlock(); prev_gtids_ev.common_footer->checksum_alg= (s.common_footer)->checksum_alg; - if (prev_gtids_ev.write(&log_file)) + if (write_to_file(&prev_gtids_ev)) goto err; bytes_written+= prev_gtids_ev.common_header->data_written; } @@ -5091,7 +5210,7 @@ bool MYSQL_BIN_LOG::open_binlog(const char *log_name, prev_gtids_ev.common_footer->checksum_alg= (s.common_footer)->checksum_alg; - if (prev_gtids_ev.write(&log_file)) + if (write_to_file(&prev_gtids_ev)) goto err; bytes_written+= prev_gtids_ev.common_header->data_written; } @@ -5123,7 +5242,7 @@ bool MYSQL_BIN_LOG::open_binlog(const char *log_name, /* Don't set log_pos in event header */ extra_description_event->set_artificial_event(); - if (extra_description_event->write(&log_file)) + if (write_to_file(extra_description_event)) goto err; bytes_written+= extra_description_event->common_header->data_written; } @@ -6823,6 +6942,12 @@ void MYSQL_BIN_LOG::dec_prep_xids(THD *thd) DBUG_VOID_RETURN; } +int MYSQL_BIN_LOG::write_to_file(Log_event* event) +{ + if (crypto.is_enabled()) + event->event_encrypter.enable_encryption(&crypto); + return event->write(&log_file); +} /* Wrappers around new_file_impl to avoid using argument @@ -6948,7 +7073,7 @@ int MYSQL_BIN_LOG::new_file_impl(bool need_lock_log, Format_description_log_even binary_log::BINLOG_CHECKSUM_ALG_UNDEF); if(DBUG_EVALUATE_IF("fault_injection_new_file_rotate_event", (error=1), FALSE) || - (error= r.write(&log_file))) + (error= write_to_file(&r))) { char errbuf[MYSYS_STRERROR_SIZE]; DBUG_EXECUTE_IF("fault_injection_new_file_rotate_event", errno=2;); @@ -7159,7 +7284,7 @@ bool MYSQL_BIN_LOG::append_event(Log_event* ev, Master_info *mi) // write data bool error = false; - if (ev->write(&log_file) == 0) + if (write_to_file(ev) == 0) { bytes_written+= ev->common_header->data_written; error= after_append_to_relay_log(mi); @@ -7171,8 +7296,7 @@ bool MYSQL_BIN_LOG::append_event(Log_event* ev, Master_info *mi) DBUG_RETURN(error); } - -bool MYSQL_BIN_LOG::append_buffer(const char* buf, uint len, Master_info *mi) +bool MYSQL_BIN_LOG::append_buffer(uchar* buf, size_t len, Master_info *mi) { DBUG_ENTER("MYSQL_BIN_LOG::append_buffer"); @@ -7182,16 +7306,34 @@ bool MYSQL_BIN_LOG::append_buffer(const char* buf, uint len, Master_info *mi) mysql_mutex_assert_owner(&LOCK_log); // write data - bool error= false; - if (my_b_append(&log_file,(uchar*) buf,len) == 0) + uchar *ebuf= NULL; + + if (crypto.is_enabled()) { - bytes_written += len; - error= after_append_to_relay_log(mi); + ebuf= reinterpret_cast(my_malloc(PSI_NOT_INSTRUMENTED, len, MYF(MY_WME))); + if (!ebuf || + encrypt_event(my_b_append_tell(&log_file), crypto, buf, ebuf, len)) + { + if (ebuf != NULL) + my_free(ebuf); + DBUG_RETURN(true); + } + + buf= ebuf; } - else - error= true; - DBUG_RETURN(error); + if (my_b_append(&log_file,(uchar*) buf,len)) + { + if (ebuf != NULL) + my_free(ebuf); + DBUG_RETURN(true); + } + + if (ebuf != NULL) + my_free(ebuf); + + bytes_written += len; + DBUG_RETURN(after_append_to_relay_log(mi)); } #endif // ifdef HAVE_REPLICATION @@ -7812,7 +7954,7 @@ bool MYSQL_BIN_LOG::write_incident(Incident_log_event *ev, THD *thd, else mysql_mutex_assert_owner(&LOCK_log); /* Write an incident event into binlog directly. */ - error= ev->write(&log_file); + error= write_to_file(ev); /* Write an error to log. So that user might have a chance to be alerted and explore incident details. @@ -8144,7 +8286,7 @@ void MYSQL_BIN_LOG::close(uint exiting, bool need_lock_log, (binlog_checksum_options); DBUG_ASSERT(!is_relay_log || relay_log_checksum_alg != binary_log::BINLOG_CHECKSUM_ALG_UNDEF); - s.write(&log_file); + write_to_file(&s); bytes_written+= s.common_header->data_written; flush_io_cache(&log_file); update_binlog_end_pos(); @@ -9777,7 +9919,13 @@ int MYSQL_BIN_LOG::recover(IO_CACHE *log, Format_description_log_event *fdle, if (!x || my_hash_insert(&xids, x)) goto err2; } - + else if (ev->get_type_code() == binary_log::START_ENCRYPTION_EVENT && + fdle->start_decryption(static_cast(ev))) + { + sql_print_warning("Error initializing decryption while crash_recovery."); + goto err2; + } + /* Recorded valid position for the crashed binlog file which did not contain incorrect events. The following diff --git a/sql/binlog.h b/sql/binlog.h index 2c4ed7c2e1b1..46f138b5454e 100644 --- a/sql/binlog.h +++ b/sql/binlog.h @@ -24,6 +24,8 @@ #include "tc_log.h" // TC_LOG #include "atomic_class.h" #include "rpl_gtid.h" // Gtid_set, Sid_map +#include "rpl_constants.h" +#include "binlog_crypt_data.h" class Relay_log_info; class Master_info; @@ -437,6 +439,9 @@ class MYSQL_BIN_LOG: public TC_LOG uint open_count; // For replication int readers_count; + /* binlog encryption data */ + Binlog_crypt_data crypto; + /* pointer to the sync period variable, for binlog this will be sync_binlog_period, for relay log this will be sync_relay_log_period @@ -469,6 +474,8 @@ class MYSQL_BIN_LOG: public TC_LOG return *sync_period_ptr; } + int write_to_file(Log_event* event); + int write_to_file(IO_CACHE *cache); /* This is used to start writing to a new log file. The difference from @@ -858,7 +865,7 @@ class MYSQL_BIN_LOG: public TC_LOG bool is_query_in_union(THD *thd, query_id_t query_id_param); #ifdef HAVE_REPLICATION - bool append_buffer(const char* buf, uint len, Master_info *mi); + bool append_buffer(uchar* buf, size_t len, Master_info *mi); bool append_event(Log_event* ev, Master_info *mi); private: bool after_append_to_relay_log(Master_info *mi); @@ -966,6 +973,11 @@ class MYSQL_BIN_LOG: public TC_LOG True while rotating binlog, which is caused by logging Incident_log_event. */ bool is_rotating_caused_by_incident; + + Binlog_crypt_data* get_crypto_data() + { + return &crypto; + } private: void publish_coordinates_for_global_status(void) const; }; diff --git a/sql/binlog_crypt_data.cc b/sql/binlog_crypt_data.cc new file mode 100644 index 000000000000..ec0ef2552c20 --- /dev/null +++ b/sql/binlog_crypt_data.cc @@ -0,0 +1,120 @@ +#include "binlog_crypt_data.h" + +#include "my_global.h" +#include "my_sys.h" +#ifdef MYSQL_SERVER +#include +#endif +#include +#include + +Binlog_crypt_data::Binlog_crypt_data() + : key_length(0) + , key(NULL) + , enabled(false) + , scheme(0) +{} + +Binlog_crypt_data::~Binlog_crypt_data() +{ + free_key(); +} + +Binlog_crypt_data::Binlog_crypt_data(const Binlog_crypt_data &b) +{ + enabled = b.enabled; + key_version = b.key_version; + if (b.key_length && b.key != NULL) + { + key= reinterpret_cast(my_malloc(PSI_NOT_INSTRUMENTED, b.key_length, MYF(MY_WME))); + memcpy(key, b.key, b.key_length); + } + else + key= NULL; + + key_length= b.key_length; + memcpy(iv, b.iv, BINLOG_IV_LENGTH); + memcpy(nonce, b.nonce, BINLOG_NONCE_LENGTH); +} + +void Binlog_crypt_data::free_key() +{ + if (key != NULL) + { + DBUG_ASSERT(key_length == 16); + memset_s(key, 512, 0, key_length); + my_free(key); + key= NULL; + key_length= 0; + } +} + +Binlog_crypt_data& Binlog_crypt_data::operator=(Binlog_crypt_data b) +{ + enabled= b.enabled; + key_version= b.key_version; + key_length= b.key_length; + std::swap(this->key, b.key); + key_length= b.key_length; + memcpy(iv, b.iv, BINLOG_IV_LENGTH); + memcpy(nonce, b.nonce, BINLOG_NONCE_LENGTH); + return *this; +} + +bool Binlog_crypt_data::init(uint sch, uint kv, const uchar* nonce) +{ + scheme= sch; + key_version= kv; + free_key(); + key_length= 16; + +#ifdef MYSQL_SERVER + DBUG_ASSERT(nonce != NULL); + memcpy(this->nonce, nonce, BINLOG_NONCE_LENGTH); + + boost::movelib::unique_ptr key_type(NULL, my_free); + char *key_type_raw = NULL; + size_t key_len; + + DBUG_EXECUTE_IF("binlog_encryption_error_on_key_fetch", + { return true; } ); + + int fetch_result = my_key_fetch("percona_binlog", &key_type_raw, NULL, + reinterpret_cast(&key), &key_len); + key_type.reset(key_type_raw); + if (fetch_result || (key != NULL && key_len != 16)) + { + free_key(); + return true; + } + key_type.reset(); + + if (key == NULL) + { + my_key_generate("percona_binlog", "AES", NULL, 16); + fetch_result = my_key_fetch("percona_binlog", &key_type_raw, NULL, + reinterpret_cast(&key), &key_len); + key_type.reset(key_type_raw); + if (fetch_result || key_len != 16) + { + free_key(); + return true; + } + DBUG_ASSERT(strncmp(key_type.get(), "AES", 3) == 0); + } +#endif + enabled= true; + return false; +} + +void Binlog_crypt_data::set_iv(uchar* iv, uint32 offs) const +{ + DBUG_ASSERT(key != NULL && key_length == 16); + + uchar iv_plain[BINLOG_IV_LENGTH]; + memcpy(iv_plain, nonce, BINLOG_NONCE_LENGTH); + int4store(iv_plain + BINLOG_NONCE_LENGTH, offs); + + my_aes_encrypt(iv_plain, BINLOG_IV_LENGTH, iv, + key, key_length, my_aes_128_ecb, NULL, false); +} diff --git a/sql/binlog_crypt_data.h b/sql/binlog_crypt_data.h new file mode 100644 index 000000000000..c9a4b714c307 --- /dev/null +++ b/sql/binlog_crypt_data.h @@ -0,0 +1,56 @@ +#ifndef BINLOG_CRYPT_DATA_H +#define BINLOG_CRYPT_DATA_H + +#include "my_global.h" +#include "my_crypt.h" + +class Binlog_crypt_data +{ +public: + enum Binlog_crypt_consts + { + BINLOG_CRYPTO_SCHEME_LENGTH= 1, + BINLOG_KEY_VERSION_LENGTH= 4, + BINLOG_IV_LENGTH= MY_AES_BLOCK_SIZE, + BINLOG_IV_OFFS_LENGTH= 4, + BINLOG_NONCE_LENGTH= BINLOG_IV_LENGTH - BINLOG_IV_OFFS_LENGTH + }; + + Binlog_crypt_data(); + ~Binlog_crypt_data(); + Binlog_crypt_data(const Binlog_crypt_data &b); + Binlog_crypt_data& operator=(Binlog_crypt_data b); + + bool is_enabled() const + { + return enabled; + } + void disable() + { + enabled= false; + } + uchar* get_key() const + { + return key; + } + size_t get_keys_length() const + { + return key_length; + } + + void free_key(); + bool init(uint sch, uint kv, const uchar* nonce); + void set_iv(uchar* iv, uint32 offs) const; + +private: + uint key_version; + size_t key_length; + uchar *key; + uchar nonce[BINLOG_NONCE_LENGTH]; + uint dst_len; + uchar iv[BINLOG_IV_LENGTH]; + bool enabled; + uint scheme; +}; + +#endif //BINLOG_CRYPT_DATA_H diff --git a/sql/event_crypt.cc b/sql/event_crypt.cc new file mode 100644 index 000000000000..c59b6f12e9a3 --- /dev/null +++ b/sql/event_crypt.cc @@ -0,0 +1,124 @@ +#include +#include "event_crypt.h" + +static bool encrypt_event(uint32 offs, int flags, const Binlog_crypt_data &crypto, uchar* buf, uchar *ebuf, size_t buf_len) +{ + DBUG_ASSERT(crypto.is_enabled() && crypto.get_key() != NULL); + + size_t elen; + uchar iv[Binlog_crypt_data::BINLOG_IV_LENGTH]; + + crypto.set_iv(iv, offs); + memcpy(buf + EVENT_LEN_OFFSET, buf, 4); + + if (my_aes_crypt(MY_AES_CBC, flags | ENCRYPTION_FLAG_NOPAD, + buf + 4, buf_len - 4, ebuf + 4, &elen, + crypto.get_key(), crypto.get_keys_length(), iv, sizeof(iv))) + { + memcpy(buf, buf + EVENT_LEN_OFFSET, 4); + return true; + } + DBUG_ASSERT(elen == buf_len - 4); + + memcpy(ebuf, ebuf + EVENT_LEN_OFFSET, 4); + int4store(ebuf + EVENT_LEN_OFFSET, buf_len); + + return false; +} + +bool encrypt_event(uint32 offs, const Binlog_crypt_data &crypto, uchar* buf, uchar *ebuf, size_t buf_len) +{ + return encrypt_event(offs, ENCRYPTION_FLAG_ENCRYPT, crypto, buf, ebuf, buf_len); +} + +bool decrypt_event(uint32 offs, const Binlog_crypt_data &crypto, uchar* buf, uchar *ebuf, size_t buf_len) +{ + return encrypt_event(offs, ENCRYPTION_FLAG_DECRYPT, crypto, buf, ebuf, buf_len); +} + + +bool Event_encrypter::init(IO_CACHE *output_cache, uchar* &header, size_t &buf_len) +{ + uchar iv[Binlog_crypt_data::BINLOG_IV_LENGTH]; + crypto->set_iv(iv, my_b_safe_tell(output_cache)); + if (ctx != NULL) + { + my_aes_crypt_free_ctx(ctx); + ctx = NULL; + } + if (my_aes_crypt_init(ctx, MY_AES_CBC, ENCRYPTION_FLAG_ENCRYPT | ENCRYPTION_FLAG_NOPAD, + crypto->get_key(), crypto->get_keys_length(), iv, sizeof(iv))) + return true; + + DBUG_ASSERT(buf_len >= LOG_EVENT_HEADER_LEN); + event_len = uint4korr(header + EVENT_LEN_OFFSET); + DBUG_ASSERT(event_len >= buf_len); + memcpy(header + EVENT_LEN_OFFSET, header, 4); + header += 4; + buf_len -= 4; + + return false; +} + +bool Event_encrypter::maybe_write_event_len(IO_CACHE *output_cache, uchar *pos, size_t len) +{ + if (len && event_len) + { + DBUG_ASSERT(len >= EVENT_LEN_OFFSET); + if (my_b_safe_write(output_cache, pos + EVENT_LEN_OFFSET - 4, 4)) + return true; + int4store(pos + EVENT_LEN_OFFSET - 4, event_len); + event_len = 0; + } + return false; +} + +bool Event_encrypter::encrypt_and_write(IO_CACHE *output_cache, const uchar *pos, size_t len) +{ + DBUG_ASSERT(output_cache != NULL); + + uchar *dst = NULL; + size_t dstsize = 0; + + if (crypto) + { + dstsize = my_aes_crypt_get_size(MY_AES_ECB, len); + if (!(dst = reinterpret_cast(my_safe_alloca(dstsize, 512)))) + return true; + + uint dstlen; + if (my_aes_crypt_update(ctx, pos, len, dst, (size_t*)&dstlen)) + goto err; + + if (maybe_write_event_len(output_cache, dst, dstlen)) + return true; + pos = dst; + len = dstlen; + } + else + { + dst = 0; + } + + if (my_b_safe_write(output_cache, pos, len)) + goto err; + + my_safe_afree(dst, dstsize, 512); + return false; +err: + my_safe_afree(dst, dstsize, 512); + return true; +} + +bool Event_encrypter::finish(IO_CACHE *output_cache) +{ + DBUG_ASSERT(output_cache != NULL && ctx != NULL); + + size_t dstlen; + uchar dst[MY_AES_BLOCK_SIZE*2]; + if (my_aes_crypt_finish(ctx, dst, &dstlen) || + maybe_write_event_len(output_cache, dst, dstlen) || + my_b_safe_write(output_cache, dst, dstlen)) + return true; + return false; +} diff --git a/sql/event_crypt.h b/sql/event_crypt.h new file mode 100644 index 000000000000..a33614074bfa --- /dev/null +++ b/sql/event_crypt.h @@ -0,0 +1,60 @@ +#ifndef EVENT_ENCRYPTER_H +#define EVENT_ENCRYPTER_H + +#include "my_global.h" +#include "my_crypt.h" +#include "rpl_constants.h" +#include "binlog_event.h" +#include "binlog_crypt_data.h" + +bool encrypt_event(uint32 offs, const Binlog_crypt_data &crypto, uchar* buf, uchar *ebuf, size_t buf_len); +bool decrypt_event(uint32 offs, const Binlog_crypt_data &crypto, uchar* buf, uchar *ebuf, size_t buf_len); + +class Event_encrypter +{ +public: + Event_encrypter() + : event_len(0) + , ctx(NULL) + , crypto(NULL) + {} + + ~Event_encrypter() + { + if (ctx != NULL) + { + my_aes_crypt_free_ctx(ctx); + ctx = NULL; + } + } + + bool init(IO_CACHE *output_cache, uchar* &header, size_t &buf_len); + bool encrypt_and_write(IO_CACHE *output_cache, const uchar *pos, size_t len); + bool finish(IO_CACHE *output_cache); + + void enable_encryption(Binlog_crypt_data* crypto) + { + DBUG_ASSERT(crypto != NULL); + this->crypto = crypto; + } + + bool is_encryption_enabled() const + { + return crypto != NULL; + } + +private: + bool maybe_write_event_len(IO_CACHE *output_cache, uchar *pos, size_t len); + uint event_len; + + MyEncryptionCTX *ctx; + /** + Encryption data (key, nonce). Only used if ctx != 0. + */ + Binlog_crypt_data *crypto; + + Event_encrypter(const Event_encrypter&); + Event_encrypter& operator=(const Event_encrypter&); +}; + +#endif //EVENT_ENCRYPTER_H diff --git a/sql/log_event.cc b/sql/log_event.cc index 1a7739d7d7b3..73d1c5efd8b3 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -514,13 +514,13 @@ static void cleanup_load_tmpdir() 2. Stores complete str. */ -static bool write_str_at_most_255_bytes(IO_CACHE *file, const char *str, - uint length) +static bool write_str_at_most_255_bytes(IO_CACHE *file, const char *str, uint length, + Event_encrypter *event_encrypter) { uchar tmp[1]; tmp[0]= (uchar) length; - return (my_b_safe_write(file, tmp, sizeof(tmp)) || - my_b_safe_write(file, (uchar*) str, length)); + return (event_encrypter->encrypt_and_write(file, tmp, sizeof(tmp)) || + event_encrypter->encrypt_and_write(file, (uchar*) str, length)); } /** @@ -660,6 +660,7 @@ const char* Log_event::get_type_str(Log_event_type type) case binary_log::TRANSACTION_CONTEXT_EVENT: return "Transaction_context"; case binary_log::VIEW_CHANGE_EVENT: return "View_change"; case binary_log::XA_PREPARE_LOG_EVENT: return "XA_prepare"; + case binary_log::START_ENCRYPTION_EVENT: return "Start_encryption"; default: return "Unknown"; /* impossible */ } } @@ -957,6 +958,7 @@ my_bool Log_event::need_checksum() which IO thread instantiates via queue_binlog_ver_3_event. */ get_type_code() == binary_log::ROTATE_EVENT || + get_type_code() == binary_log::START_ENCRYPTION_EVENT || /* The previous event has its checksum option defined according to the format description event. @@ -980,7 +982,7 @@ bool Log_event::wrapper_my_b_safe_write(IO_CACHE* file, const uchar* buf, size_t if (need_checksum() && size != 0) crc= checksum_crc32(crc, buf, size); - return my_b_safe_write(file, buf, size); + return event_encrypter.encrypt_and_write(file, buf, size); } bool Log_event::write_footer(IO_CACHE* file) @@ -993,9 +995,13 @@ bool Log_event::write_footer(IO_CACHE* file) { uchar buf[BINLOG_CHECKSUM_LEN]; int4store(buf, crc); - return (my_b_safe_write(file, (uchar*) buf, sizeof(buf))); + if (event_encrypter.encrypt_and_write(file, buf, BINLOG_CHECKSUM_LEN)) + return true; } - return 0; + if (event_encrypter.is_encryption_enabled() && + event_encrypter.finish(file)) + return true; + return false; } @@ -1044,7 +1050,6 @@ uint32 Log_event::write_header_to_memory(uchar *buf) bool Log_event::write_header(IO_CACHE* file, size_t event_data_length) { uchar header[LOG_EVENT_HEADER_LEN]; - bool ret; DBUG_ENTER("Log_event::write_header"); /* Store number of bytes that will be written by this event */ @@ -1102,7 +1107,8 @@ bool Log_event::write_header(IO_CACHE* file, size_t event_data_length) write_header_to_memory(header); - ret= my_b_safe_write(file, header, LOG_EVENT_HEADER_LEN); + bool is_format_decription_and_need_checksum= need_checksum() && + ((common_header->flags & LOG_EVENT_BINLOG_IN_USE_F) != 0); /* Update the checksum. @@ -1111,19 +1117,33 @@ bool Log_event::write_header(IO_CACHE* file, size_t event_data_length) the LOG_EVENT_BINLOG_IN_USE_F flag before computing the checksum, since the flag will be cleared when the binlog is closed. On verification, the flag is dropped before computing the checksum - too. + too. We need to compute the checksum before we encrypt the header, + in case binlog encryption is turned on. */ - if (need_checksum() && - (common_header->flags & LOG_EVENT_BINLOG_IN_USE_F) != 0) + + if (is_format_decription_and_need_checksum) { - common_header->flags &= ~LOG_EVENT_BINLOG_IN_USE_F; + common_header->flags&= ~LOG_EVENT_BINLOG_IN_USE_F; int2store(header + FLAGS_OFFSET, common_header->flags); } crc= my_checksum(crc, header, LOG_EVENT_HEADER_LEN); - DBUG_RETURN( ret); -} + // restore IN_USE flag after calculating the checksum + if (is_format_decription_and_need_checksum) + { + common_header->flags|= LOG_EVENT_BINLOG_IN_USE_F; + int2store(header + FLAGS_OFFSET, common_header->flags); + } + uchar *pos= header; + size_t len= sizeof(header); + + if (event_encrypter.is_encryption_enabled() && + event_encrypter.init(file, pos, len)) + DBUG_RETURN(true); + + DBUG_RETURN(event_encrypter.encrypt_and_write(file, pos, len)); +} /** This needn't be format-tolerant, because we only read @@ -1133,6 +1153,7 @@ bool Log_event::write_header(IO_CACHE* file, size_t event_data_length) */ int Log_event::read_log_event(IO_CACHE* file, String* packet, + const Format_description_log_event *fdle, mysql_mutex_t* log_lock, enum_binlog_checksum_alg checksum_alg_arg, const char *log_file_name_arg, @@ -1144,7 +1165,7 @@ int Log_event::read_log_event(IO_CACHE* file, String* packet, int result=0; char local_buf[LOG_EVENT_MINIMAL_HEADER_LEN]; char *buf= event_header != NULL ? event_header : local_buf; - uchar ev_offset= packet->length(); + size_t ev_offset= packet->length(); DBUG_ENTER("Log_event::read_log_event(IO_CACHE *, String *, mysql_mutex_t, uint8)"); if (log_lock) @@ -1250,6 +1271,32 @@ int Log_event::read_log_event(IO_CACHE* file, String* packet, else { packet->length(packet->length() + data_len); + + if (fdle != NULL && fdle->crypto_data.is_enabled()) + { + size_t true_data_len= data_len + LOG_EVENT_MINIMAL_HEADER_LEN; + + char *decrypted_packet= + reinterpret_cast(my_malloc(key_memory_log_event, true_data_len + ev_offset + 1, + MYF(MY_WME))); + if (!decrypted_packet) + DBUG_RETURN(LOG_READ_MEM); + memcpy(decrypted_packet, packet->ptr(), ev_offset); + + uchar *src= (uchar*)packet->ptr() + ev_offset; + uchar *dst= (uchar*)decrypted_packet + ev_offset; + memcpy(src + EVENT_LEN_OFFSET, src, 4); + + if (decrypt_event(my_b_tell(file) - true_data_len, fdle->crypto_data, src, dst, true_data_len)) + { + my_free(decrypted_packet); + DBUG_RETURN(LOG_READ_DECRYPT); + } + + packet->length(0); // size of the content + packet->append(decrypted_packet, true_data_len + ev_offset); + my_free(decrypted_packet); + } /* Corrupt the event for Dump thread. We also need to exclude Previous_gtids_log_event and Gtid_log_event @@ -1261,7 +1308,8 @@ int Log_event::read_log_event(IO_CACHE* file, String* packet, uchar *debug_event_buf_c = (uchar*) packet->ptr() + ev_offset; if (debug_event_buf_c[EVENT_TYPE_OFFSET] != binary_log::FORMAT_DESCRIPTION_EVENT && debug_event_buf_c[EVENT_TYPE_OFFSET] != binary_log::PREVIOUS_GTIDS_LOG_EVENT && - debug_event_buf_c[EVENT_TYPE_OFFSET] != binary_log::GTID_LOG_EVENT) + debug_event_buf_c[EVENT_TYPE_OFFSET] != binary_log::GTID_LOG_EVENT && + debug_event_buf_c[EVENT_TYPE_OFFSET] != binary_log::START_ENCRYPTION_EVENT) { int debug_cor_pos = rand() % (data_len + LOG_EVENT_MINIMAL_HEADER_LEN - BINLOG_CHECKSUM_LEN); @@ -1373,7 +1421,7 @@ Log_event* Log_event::read_log_event(IO_CACHE* file, if (data_len < header_size) { - error = "Event too small"; + error = "Event invalid"; goto err; } @@ -1392,6 +1440,31 @@ Log_event* Log_event::read_log_event(IO_CACHE* file, goto err; } + if (description_event->crypto_data.is_enabled()) + { +#if defined(MYSQL_CLIENT) + // Clients do not have access to keyring and thus cannot decrypt + // binlog events + error= "Decryption error as clients do not have access to keyring and thus " + "cannot decrypt binlog events."; + goto err; +#endif + char *dst_buf= + reinterpret_cast(my_malloc(key_memory_log_event, data_len + 1, MYF(MY_WME))); + dst_buf[data_len]=0; + memcpy(dst_buf, buf, data_len); + + if (decrypt_event(my_b_tell(file) - data_len, description_event->crypto_data, (uchar*)buf, (uchar*)dst_buf, data_len)) + { + my_free(dst_buf); + error= "decryption error"; + goto err; + } + + my_free(buf); + buf= dst_buf; + } + #if defined(MYSQL_CLIENT) if (f && f(&buf, &data_len, description_event)) { @@ -1408,6 +1481,10 @@ Log_event* Log_event::read_log_event(IO_CACHE* file, { DBUG_ASSERT(error != 0); /* Don't log error if read_log_event invoked from SHOW BINLOG EVENTS */ +#ifdef MYSQL_CLIENT + if (force_opt) + DBUG_RETURN(new Unknown_log_event()); +#endif #ifdef MYSQL_SERVER THD *thd= current_thd; if (!(thd && thd->lex && @@ -1467,10 +1544,10 @@ 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 } - uint event_type= buf[EVENT_TYPE_OFFSET]; + uint event_type= static_cast(buf[EVENT_TYPE_OFFSET]); // all following START events in the current file are without checksum if (event_type == binary_log::START_EVENT_V3) - (const_cast< Format_description_log_event *>(description_event))-> + (const_cast(description_event))-> common_footer->checksum_alg= binary_log::BINLOG_CHECKSUM_ALG_OFF; // Sanity check for Format description event if (event_type == binary_log::FORMAT_DESCRIPTION_EVENT) @@ -1512,7 +1589,8 @@ Log_event* Log_event::read_log_event(const char* buf, uint event_len, Log_event_footer::get_checksum_alg(buf, event_len); // Emulate the corruption during reading an event DBUG_EXECUTE_IF("corrupt_read_log_event_char", - if (event_type != binary_log::FORMAT_DESCRIPTION_EVENT) + if (event_type != binary_log::FORMAT_DESCRIPTION_EVENT && + event_type != binary_log::START_ENCRYPTION_EVENT) { char *debug_event_buf_c = (char *)buf; int debug_cor_pos = rand() % (event_len - BINLOG_CHECKSUM_LEN); @@ -1544,6 +1622,7 @@ Log_event* Log_event::read_log_event(const char* buf, uint event_len, if (event_type > description_event->number_of_event_types && event_type != binary_log::FORMAT_DESCRIPTION_EVENT && + event_type != binary_log::START_ENCRYPTION_EVENT && /* Skip the event type check when simulating an unknown ignorable log event. @@ -1685,6 +1764,9 @@ Log_event* Log_event::read_log_event(const char* buf, uint event_len, case binary_log::INCIDENT_EVENT: ev = new Incident_log_event(buf, event_len, description_event); break; + case binary_log::START_ENCRYPTION_EVENT: + ev = new Start_encryption_log_event(buf, event_len, description_event); + break; case binary_log::ROWS_QUERY_LOG_EVENT: ev= new Rows_query_log_event(buf, event_len, description_event); break; @@ -5342,6 +5424,66 @@ int Start_log_event_v3::do_apply_event(Relay_log_info const *rli) } #endif /* defined(HAVE_REPLICATION) && !defined(MYSQL_CLIENT) */ +Start_encryption_log_event::Start_encryption_log_event( + const char* buf, uint event_len, + const Format_description_log_event* description_event) + : Binary_log_event(&buf, description_event->binlog_version, + description_event->server_version), + Log_event(header(), footer()) +{ + if ((int)event_len == + (int)LOG_EVENT_MINIMAL_HEADER_LEN + (int)Start_encryption_log_event::get_data_size()) + { + crypto_scheme = *(uchar*)buf; + key_version = uint4korr(buf + Binlog_crypt_data::BINLOG_CRYPTO_SCHEME_LENGTH); + memcpy(nonce, + buf + Binlog_crypt_data::BINLOG_CRYPTO_SCHEME_LENGTH + Binlog_crypt_data::BINLOG_KEY_VERSION_LENGTH, + Binlog_crypt_data::BINLOG_NONCE_LENGTH); + } + else + crypto_scheme= ~0; // invalid + + is_valid_param= crypto_scheme == 1; +} + +#if defined(HAVE_REPLICATION) && !defined(MYSQL_CLIENT) +int Start_encryption_log_event::do_apply_event(Relay_log_info const *rli) +{ + return rli->get_rli_description_event()->start_decryption(this); +} + +int Start_encryption_log_event::do_update_pos(Relay_log_info *rli) +{ + /* + Master never sends Start_encryption_log_event, any SELE that a slave + might see was created locally in MYSQL_BIN_LOG::open() on the slave + */ + rli->inc_event_relay_log_pos(); + return 0; +} + +#endif + +#ifndef MYSQL_SERVER +void Start_encryption_log_event::print(FILE* file, + PRINT_EVENT_INFO* print_event_info) +{ + // Need 2 characters per one hex + 2 for 0x + 1 for \0 + char nonce_buf[Binlog_crypt_data::BINLOG_NONCE_LENGTH * 2 + 2 + 1]; + str_to_hex(nonce_buf, reinterpret_cast(nonce), + Binlog_crypt_data::BINLOG_NONCE_LENGTH); + + IO_CACHE *const head= &print_event_info->head_cache; + print_header(head, print_event_info, FALSE); + my_b_printf(head,"Encryption scheme: %d", crypto_scheme); + my_b_printf(head,", key_version: %d", key_version); + my_b_printf(head,", nonce: %s ", nonce_buf); + my_b_printf(head,"\n# The rest of the binlog is encrypted!\n"); +} +#endif + + + /*************************************************************************** Format_description_log_event methods ****************************************************************************/ @@ -5386,6 +5528,7 @@ Format_description_log_event(uint8_t binlog_ver, const char* server_ver) post_header_len[binary_log::WRITE_ROWS_EVENT_V1-1]= post_header_len[binary_log::UPDATE_ROWS_EVENT_V1-1]= post_header_len[binary_log::DELETE_ROWS_EVENT_V1-1]= 6;); + reset_crypto(); } @@ -5429,6 +5572,7 @@ Format_description_log_event(const char* buf, uint event_len, post_header_len[binary_log::WRITE_ROWS_EVENT_V1-1]= post_header_len[binary_log::UPDATE_ROWS_EVENT_V1-1]= post_header_len[binary_log::DELETE_ROWS_EVENT_V1-1]= 6;); + reset_crypto(); } #ifndef MYSQL_CLIENT @@ -5545,6 +5689,7 @@ int Format_description_log_event::do_apply_event(Relay_log_info const *rli) if (!ret) { /* Save the information describing this binlog */ + copy_crypto_data(*rli->get_rli_description_event()); const_cast(rli)->set_rli_description_event(this); } @@ -5768,7 +5913,7 @@ bool Load_log_event::write_data_header(IO_CACHE* file) buf[L_TBL_LEN_OFFSET] = (char)table_name_len; buf[L_DB_LEN_OFFSET] = (char)db_len; int4store(buf + L_NUM_FIELDS_OFFSET, num_fields); - return my_b_safe_write(file, (uchar*)buf, Binary_log_event::LOAD_HEADER_LEN) != 0; + return event_encrypter.encrypt_and_write(file, (uchar*)buf, Binary_log_event::LOAD_HEADER_LEN) != 0; } @@ -5778,17 +5923,18 @@ bool Load_log_event::write_data_header(IO_CACHE* file) bool Load_log_event::write_data_body(IO_CACHE* file) { + sql_ex.event_encrypter= &event_encrypter; if (sql_ex.write_data(file)) return 1; if (num_fields && fields && field_lens) { - if (my_b_safe_write(file, (uchar*)field_lens, num_fields) || - my_b_safe_write(file, (uchar*)fields, field_block_len)) + if (event_encrypter.encrypt_and_write(file, (uchar*)field_lens, num_fields) || + event_encrypter.encrypt_and_write(file, (uchar*)fields, field_block_len)) return 1; } - return (my_b_safe_write(file, (uchar*)table_name, table_name_len + 1) || - my_b_safe_write(file, (uchar*)db, db_len + 1) || - my_b_safe_write(file, (uchar*)fname, fname_len)); + return (event_encrypter.encrypt_and_write(file, (uchar*)table_name, table_name_len + 1) || + event_encrypter.encrypt_and_write(file, (uchar*)db, db_len + 1) || + event_encrypter.encrypt_and_write(file, (uchar*)fname, fname_len)); } @@ -7882,8 +8028,14 @@ void Unknown_log_event::print(FILE* file_arg, PRINT_EVENT_INFO* print_event_info { if (print_event_info->short_form) return; - print_header(&print_event_info->head_cache, print_event_info, FALSE); - my_b_printf(&print_event_info->head_cache, "\n# %s", "Unknown event\n"); + + if (what != ENCRYPTED) + { + print_header(&print_event_info->head_cache, print_event_info, FALSE); + my_b_printf(&print_event_info->head_cache, "\n# %s", "Unknown event\n"); + } + else + my_b_printf(&print_event_info->head_cache, "\n# %s", "Encrypted event\n"); } #endif @@ -7963,8 +8115,8 @@ bool Create_file_log_event::write_data_body(IO_CACHE* file) bool res; if ((res= Load_log_event::write_data_body(file)) || fake_base) return res; - return (my_b_safe_write(file, (uchar*) "", 1) || - my_b_safe_write(file, block, block_len)); + return (event_encrypter.encrypt_and_write(file, (uchar*) "", 1) || + event_encrypter.encrypt_and_write(file, block, block_len)); } @@ -7979,7 +8131,7 @@ bool Create_file_log_event::write_data_header(IO_CACHE* file) if ((res= Load_log_event::write_data_header(file)) || fake_base) return res; int4store(buf + CF_FILE_ID_OFFSET, file_id); - return my_b_safe_write(file, buf, Binary_log_event::CREATE_FILE_HEADER_LEN) != 0; + return event_encrypter.encrypt_and_write(file, buf, Binary_log_event::CREATE_FILE_HEADER_LEN) != 0; } @@ -8980,16 +9132,16 @@ bool sql_ex_info::write_data(IO_CACHE* file) if (data_info.new_format()) { return (write_str_at_most_255_bytes(file, data_info.field_term, - (uint) data_info.field_term_len) || + (uint) data_info.field_term_len, event_encrypter) || write_str_at_most_255_bytes(file, data_info.enclosed, - (uint) data_info.enclosed_len) || + (uint) data_info.enclosed_len, event_encrypter) || write_str_at_most_255_bytes(file, data_info.line_term, - (uint) data_info.line_term_len) || + (uint) data_info.line_term_len, event_encrypter) || write_str_at_most_255_bytes(file, data_info.line_start, - (uint) data_info.line_start_len) || + (uint) data_info.line_start_len, event_encrypter) || write_str_at_most_255_bytes(file, data_info.escaped, - (uint) data_info.escaped_len) || - my_b_safe_write(file,(uchar*) &(data_info.opt_flags), 1)); + (uint) data_info.escaped_len, event_encrypter) || + event_encrypter->encrypt_and_write(file,(uchar*) &(data_info.opt_flags), 1)); } else { @@ -9005,7 +9157,7 @@ bool sql_ex_info::write_data(IO_CACHE* file) old_ex.escaped= *(data_info.escaped); old_ex.opt_flags= data_info.opt_flags; old_ex.empty_flags= data_info.empty_flags; - return my_b_safe_write(file, (uchar*) &old_ex, sizeof(old_ex)) != 0; + return event_encrypter->encrypt_and_write(file, (uchar*) &old_ex, sizeof(old_ex)) != 0; } } @@ -13128,7 +13280,7 @@ Incident_log_event::write_data_body(IO_CACHE *file) crc= checksum_crc32(crc, (uchar*) message, message_length); // todo: report a bug on write_str accepts uint but treats it as uchar } - DBUG_RETURN(write_str_at_most_255_bytes(file, message, (uint) message_length)); + DBUG_RETURN(write_str_at_most_255_bytes(file, message, (uint) message_length, &event_encrypter)); } @@ -13241,7 +13393,7 @@ Rows_query_log_event::write_data_body(IO_CACHE *file) that length will be ignored and the complete query will be read. */ DBUG_RETURN(write_str_at_most_255_bytes(file, m_rows_query, - strlen(m_rows_query))); + strlen(m_rows_query), &event_encrypter)); } #if defined(MYSQL_SERVER) && defined(HAVE_REPLICATION) diff --git a/sql/log_event.h b/sql/log_event.h index 3b832649ccd9..32111f4246f5 100644 --- a/sql/log_event.h +++ b/sql/log_event.h @@ -49,6 +49,7 @@ #include #include #include +#include "event_crypt.h" #ifdef MYSQL_CLIENT class Format_description_log_event; @@ -114,6 +115,7 @@ int ignored_error_code(int err_code); #define LOG_READ_TRUNC -6 #define LOG_READ_TOO_LARGE -7 #define LOG_READ_CHECKSUM_FAILURE -8 +#define LOG_READ_DECRYPT -9 #define LOG_EVENT_OFFSET 4 @@ -132,6 +134,7 @@ struct sql_ex_info { sql_ex_info() {} /* Remove gcc warning */ binary_log::sql_ex_data_info data_info; + Event_encrypter *event_encrypter; bool write_data(IO_CACHE* file); const char* init(const char* buf, const char* buf_end, bool use_new_format); @@ -613,6 +616,9 @@ class Log_event Placeholder for event checksum while writing to binlog. */ ha_checksum crc; + + Event_encrypter event_encrypter; + /** Index in @c rli->gaq array to indicate a group that this event is purging. The index is set by Coordinator to a group terminator @@ -728,6 +734,7 @@ class Log_event given binlog is still active. @param[in] file log file to be read + @param[in] fdle format description log event @param[out] packet packet to hold the event @param[in] lock the lock to be used upon read @param[in] checksum_alg_arg the checksum algorithm @@ -746,6 +753,7 @@ class Log_event @retval LOG_READ_TOO_LARGE event too large */ static int read_log_event(IO_CACHE* file, String* packet, + const Format_description_log_event *fdle, mysql_mutex_t* log_lock, binary_log::enum_binlog_checksum_alg checksum_alg_arg, const char *log_file_name_arg= NULL, @@ -1080,7 +1088,8 @@ class Log_event */ (get_type_code() == binary_log::ROTATE_EVENT && ((server_id == (uint32) ::server_id) || - (common_header->log_pos == 0 && mts_in_group)))) + (common_header->log_pos == 0 && mts_in_group))) || + (get_type_code() == binary_log::START_ENCRYPTION_EVENT)) return EVENT_EXEC_ASYNC; else if (is_mts_sequential_exec(is_dbname_type)) return EVENT_EXEC_SYNC; @@ -1720,6 +1729,72 @@ class Start_log_event_v3: public virtual binary_log::Start_event_v3, public Log_ #endif }; +/** + @class Start_encryption_log_event + + Start_encryption_log_event marks the beginning of encrypted data (all events + after this event are encrypted). + + It contains the cryptographic scheme used for the encryption as well as any + data required to decrypt (except the actual key). + + For binlog cryptoscheme 1: key version, and nonce for iv generation. +*/ +class Start_encryption_log_event : public Binary_log_event, public Log_event +{ +public: +#ifdef MYSQL_SERVER + Start_encryption_log_event(uint crypto_scheme_arg, uint key_version_arg, + const uchar* nonce_arg) + : Binary_log_event(binary_log::START_ENCRYPTION_EVENT), + Log_event(header(), footer(), Log_event::EVENT_NO_CACHE, Log_event::EVENT_IMMEDIATE_LOGGING), + crypto_scheme(crypto_scheme_arg), key_version(key_version_arg) + { + DBUG_ASSERT(crypto_scheme == 1); + is_valid_param= crypto_scheme == 1; + memcpy(nonce, nonce_arg, Binlog_crypt_data::BINLOG_NONCE_LENGTH); + } + + bool write_data_body(IO_CACHE* file) + { + uchar scheme_buf= crypto_scheme; + uchar key_version_buf[Binlog_crypt_data::BINLOG_KEY_VERSION_LENGTH]; + int4store(key_version_buf, key_version); + return wrapper_my_b_safe_write(file, (uchar*)&scheme_buf, sizeof(scheme_buf)) || + wrapper_my_b_safe_write(file, (uchar*)key_version_buf, sizeof(key_version_buf)) || + wrapper_my_b_safe_write(file, (uchar*)nonce, Binlog_crypt_data::BINLOG_NONCE_LENGTH); + } +#else + void print(FILE* file, PRINT_EVENT_INFO* print_event_info); +#endif + + Start_encryption_log_event( + const char* buf, uint event_len, + const Format_description_log_event* description_event); + + Log_event_type get_type_code() { return binary_log::START_ENCRYPTION_EVENT; } + + size_t get_data_size() + { + return Binlog_crypt_data::BINLOG_CRYPTO_SCHEME_LENGTH + + Binlog_crypt_data::BINLOG_KEY_VERSION_LENGTH + + Binlog_crypt_data::BINLOG_NONCE_LENGTH; + } + + uint crypto_scheme; + uint key_version; + uchar nonce[Binlog_crypt_data::BINLOG_NONCE_LENGTH]; + +protected: +#if defined(MYSQL_SERVER) && 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) + { + return Log_event::EVENT_SKIP_NOT; + } +#endif +}; /** @class Format_description_log_event @@ -1809,6 +1884,28 @@ class Format_description_log_event: public Format_description_event, */ return Binary_log_event::FORMAT_DESCRIPTION_HEADER_LEN; } + + Binlog_crypt_data crypto_data; + bool start_decryption(Start_encryption_log_event* sele) + { + DBUG_ASSERT(!crypto_data.is_enabled()); + + if (!sele->is_valid()) + return true; + return crypto_data.init(sele->crypto_scheme, sele->key_version, sele->nonce); + } + + void copy_crypto_data(const Format_description_log_event& o) + { + DBUG_PRINT("info", ("Copying crypto data")); + crypto_data= o.crypto_data; + } + + void reset_crypto() + { + crypto_data.disable(); + } + protected: #if defined(MYSQL_SERVER) && defined(HAVE_REPLICATION) virtual int do_apply_event(Relay_log_info const *rli); @@ -2698,6 +2795,7 @@ class Execute_load_query_log_event: public Query_log_event, class Unknown_log_event: public binary_log::Unknown_event , public Log_event { public: + enum { UNKNOWN, ENCRYPTED } what; /** Even if this is an unknown event, we still pass description_event to Log_event's ctor, this way we can extract maximum information from the @@ -2706,11 +2804,18 @@ class Unknown_log_event: public binary_log::Unknown_event , public Log_event Unknown_log_event(const char* buf, const Format_description_event *description_event) : binary_log::Unknown_event(buf, description_event), - Log_event(header(), footer()) + Log_event(header(), footer()), what(UNKNOWN) { is_valid_param= true; } + /* There is no way of differentiate between hopelessly corrupted events + * and encrypted events. Because of that we assume that corrupted events + * that lands here are just encrypted events. + * */ + Unknown_log_event() : Log_event(header(), footer()), what(ENCRYPTED) + {} + ~Unknown_log_event() {} void print(FILE* file, PRINT_EVENT_INFO* print_event_info); Log_event_type get_type_code() { return binary_log::UNKNOWN_EVENT;} diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 8075972a79e1..844abc74a7d8 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -595,6 +595,7 @@ char *mysql_data_home= const_cast("."); const char *mysql_real_data_home_ptr= mysql_real_data_home; char server_version[SERVER_VERSION_LENGTH]; char *mysqld_unix_port, *opt_mysql_tmpdir; +my_bool encrypt_binlog; /** name of reference on left expression in rewritten IN subquery */ const char *in_left_expr_name= ""; @@ -4499,6 +4500,15 @@ a file name for --log-bin-index option", opt_binlog_index_name); unireg_abort(MYSQLD_ABORT_EXIT); } + if (encrypt_binlog && (!opt_master_verify_checksum || + binlog_checksum_options == binary_log::BINLOG_CHECKSUM_ALG_OFF || + binlog_checksum_options == binary_log::BINLOG_CHECKSUM_ALG_UNDEF)) + { + sql_print_error("BINLOG_ENCRYPTION requires MASTER_VERIFY_CHECKSUM = ON and " + "BINLOG_CHECKSUM to be turned ON."); + unireg_abort(MYSQLD_ABORT_EXIT); + } + /// @todo: this looks suspicious, revisit this /sven enum_gtid_mode gtid_mode= get_gtid_mode(GTID_MODE_LOCK_NONE); @@ -5145,6 +5155,11 @@ int mysqld_main(int argc, char **argv) (prev_gtids_ev.common_footer)->checksum_alg= static_cast(binlog_checksum_options); + Binlog_crypt_data *crypto_data= mysql_bin_log.get_crypto_data(); + + if (crypto_data->is_enabled()) + prev_gtids_ev.event_encrypter.enable_encryption(crypto_data); + if (prev_gtids_ev.write(mysql_bin_log.get_log_file())) unireg_abort(MYSQLD_ABORT_EXIT); mysql_bin_log.add_bytes_written( diff --git a/sql/mysqld.h b/sql/mysqld.h index cc4075b8c290..502bab991d88 100644 --- a/sql/mysqld.h +++ b/sql/mysqld.h @@ -331,6 +331,7 @@ extern ulong connection_errors_internal; extern ulong connection_errors_peer_addr; #endif extern ulong log_warnings; +extern my_bool encrypt_binlog; extern bool opt_log_syslog_enable; extern char *opt_log_syslog_tag; #ifndef _WIN32 diff --git a/sql/rpl_binlog_sender.cc b/sql/rpl_binlog_sender.cc index 3b469a159ffa..be6f74b9c32d 100644 --- a/sql/rpl_binlog_sender.cc +++ b/sql/rpl_binlog_sender.cc @@ -52,7 +52,8 @@ Binlog_sender::Binlog_sender(THD *thd, const char *start_file, m_diag_area(false), m_errmsg(NULL), m_errno(0), m_last_file(NULL), m_last_pos(0), m_half_buffer_size_req_counter(0), m_new_shrink_size(PACKET_MIN_SIZE), - m_flag(flag), m_observe_transmission(false), m_transmit_started(false) + m_fdle(NULL), m_flag(flag), m_observe_transmission(false), + m_transmit_started(false) {} void Binlog_sender::init() @@ -957,6 +958,13 @@ int Binlog_sender::send_format_description_event(IO_CACHE *log_cache, uchar* event_ptr; uint32 event_len; + m_fdle.reset(new Format_description_log_event(4)); + if (m_fdle == NULL) + { + set_fatal_error("Out-of-memory"); + DBUG_RETURN(1); + } + if (read_event(log_cache, binary_log::BINLOG_CHECKSUM_ALG_OFF, &event_ptr, &event_len)) DBUG_RETURN(1); @@ -1030,7 +1038,71 @@ int Binlog_sender::send_format_description_event(IO_CACHE *log_cache, if (event_checksum_on() && event_updated) calc_event_checksum(event_ptr, event_len); - DBUG_RETURN(send_packet()); + if (m_event_checksum_alg != binary_log::BINLOG_CHECKSUM_ALG_UNDEF && + m_event_checksum_alg != binary_log::BINLOG_CHECKSUM_ALG_OFF) + event_len-= BINLOG_CHECKSUM_LEN; + + Format_description_log_event *new_fdle= NULL; + + new_fdle= new Format_description_log_event(reinterpret_cast(event_ptr), event_len, m_fdle.get()); + + if (new_fdle == NULL) + { + set_fatal_error("Out-of-memory"); + DBUG_RETURN(1); + } + m_fdle.reset(new_fdle); + + if (send_packet()) + DBUG_RETURN(1); + + char header_buffer[LOG_EVENT_MINIMAL_HEADER_LEN]; + // Let's check if next event is Start encryption event + if (Log_event::peek_event_header(header_buffer, log_cache)) + DBUG_RETURN(1); + + // peek_event_header actually moves the log_cache->read_pos, thus we need to rewind + log_cache->read_pos-= LOG_EVENT_MINIMAL_HEADER_LEN; + + if (static_cast(header_buffer[EVENT_TYPE_OFFSET]) == binary_log::START_ENCRYPTION_EVENT) + { + event_ptr= NULL; + my_off_t log_pos= my_b_tell(log_cache); + + if (read_event(log_cache, m_event_checksum_alg, &event_ptr, + &event_len)) + DBUG_RETURN(1); + + if (m_event_checksum_alg != binary_log::BINLOG_CHECKSUM_ALG_UNDEF && + m_event_checksum_alg != binary_log::BINLOG_CHECKSUM_ALG_OFF) + event_len-= BINLOG_CHECKSUM_LEN; + + DBUG_ASSERT(event_ptr[EVENT_TYPE_OFFSET] == binary_log::START_ENCRYPTION_EVENT); + Start_encryption_log_event sele(reinterpret_cast(event_ptr), event_len, m_fdle.get()); + + if (!sele.is_valid()) + { + set_fatal_error("Start encryption log event is invalid"); + DBUG_RETURN(1); + } + + if (m_fdle->start_decryption(&sele)) + { + set_fatal_error("Could not decrypt binlog: encryption key error"); + DBUG_RETURN(1); + } + + if (start_pos <= BIN_LOG_HEADER_SIZE) + { + log_pos= my_b_tell(log_cache); + // We have read start encryption event from master binlog, but we have + // not sent it to slave. We need to inform slave that master position + // has advanced. + if (unlikely(send_heartbeat_event(log_pos))) + DBUG_RETURN(1); + } + } + DBUG_RETURN(0); } int Binlog_sender::has_previous_gtid_log_event(IO_CACHE *log_cache, @@ -1068,6 +1140,8 @@ const char* Binlog_sender::log_read_error_msg(int error) return "binlog truncated in the middle of event; consider out of disk space on master"; case LOG_READ_CHECKSUM_FAILURE: return "event read from binlog did not pass crc check"; + case LOG_READ_DECRYPT: + return "Event decryption failure"; default: return "unknown error reading log event on the master"; } @@ -1107,7 +1181,7 @@ inline int Binlog_sender::read_event(IO_CACHE *log_cache, enum_binlog_checksum_a packet is big enough to read the event, since we have reallocated based on the length stated in the event header. */ - if ((error= Log_event::read_log_event(log_cache, &m_packet, NULL, checksum_alg, + if ((error= Log_event::read_log_event(log_cache, &m_packet, m_fdle.get(), NULL, checksum_alg, NULL, NULL, header))) goto read_error; @@ -1115,11 +1189,12 @@ inline int Binlog_sender::read_event(IO_CACHE *log_cache, enum_binlog_checksum_a /* As we pre-allocate the buffer to store the event at reset_transmit_packet, - the buffer should not be changed while calling read_log_event, even knowing - that it might call functions to replace the buffer by one with the size to - fit the event. + the buffer should not be changed while calling read_log_event (unless binlog + encryption is on), even knowing that it might call functions to replace the + buffer by one with the size to fit the event. When encryption is on - the buffer + will be replaced with memory allocated for storing decrypted data. */ - DBUG_ASSERT(packet_buffer == m_packet.ptr()); + DBUG_ASSERT(encrypt_binlog || packet_buffer == m_packet.ptr()); *event_ptr= (uchar *)m_packet.ptr() + event_offset; DBUG_PRINT("info", diff --git a/sql/rpl_binlog_sender.h b/sql/rpl_binlog_sender.h index 23ace68bbf41..181bfa9954d5 100644 --- a/sql/rpl_binlog_sender.h +++ b/sql/rpl_binlog_sender.h @@ -22,7 +22,7 @@ #include "binlog_event.h" // enum_binlog_checksum_alg, Log_event_type #include "mysqld_error.h" // ER_* #include "sql_error.h" // Diagnostics_area - +#include /** The major logic of dump thread is implemented in this class. It sends @@ -141,6 +141,8 @@ class Binlog_sender */ const static float PACKET_SHRINK_FACTOR; + boost::movelib::unique_ptr m_fdle; + uint32 m_flag; /* It is true if any plugin requires to observe the transmission for each event. diff --git a/sql/rpl_rli.cc b/sql/rpl_rli.cc index 22c508529208..8a9e973fd7a3 100644 --- a/sql/rpl_rli.cc +++ b/sql/rpl_rli.cc @@ -602,8 +602,12 @@ int Relay_log_info::init_relay_log_pos(const char* log, } else if (ev->get_type_code() == binary_log::FORMAT_DESCRIPTION_EVENT) { + Format_description_log_event *old= rli_description_event; DBUG_PRINT("info",("found Format_description_log_event")); - set_rli_description_event((Format_description_log_event *)ev); + Format_description_log_event *new_fdev= + static_cast(ev); + new_fdev->copy_crypto_data(*old); + set_rli_description_event(new_fdev); /* As ev was returned by read_log_event, it has passed is_valid(), so my_malloc() in ctor worked, no need to check again. @@ -627,6 +631,16 @@ int Relay_log_info::init_relay_log_pos(const char* log, Previous-GTIDs, Rotate or Format_desc. */ } + else if (ev->get_type_code() == binary_log::START_ENCRYPTION_EVENT) + { + if (rli_description_event->start_decryption(static_cast(ev))) + { + *errmsg= "Unable to set up decryption of binlog."; + delete ev; + goto err; + } + delete ev; + } else { DBUG_PRINT("info",("found event of another type=%d", diff --git a/sql/rpl_rli_pdb.cc b/sql/rpl_rli_pdb.cc index 40d830674109..5f2fb51c13be 100644 --- a/sql/rpl_rli_pdb.cc +++ b/sql/rpl_rli_pdb.cc @@ -2024,6 +2024,26 @@ bool Slave_worker::read_and_apply_events(uint start_relay_number, errmsg); goto end; } + // Search for Start_encryption_event. When relay log is encrypted the second + // event (after Format_description_event) will be Start_encryption_event. + for (uint i= 0; i < 2; i++) + { + ev= Log_event::read_log_event(&relay_io, NULL, + rli->get_rli_description_event(), + opt_slave_sql_verify_checksum); + + if (ev != NULL) + { + if (ev->get_type_code() == binary_log::START_ENCRYPTION_EVENT && + !rli->get_rli_description_event()->start_decryption(static_cast(ev))) + { + delete ev; + goto end; + error= true; + } + delete ev; + } + } my_b_seek(&relay_io, start_relay_pos); } diff --git a/sql/rpl_slave.cc b/sql/rpl_slave.cc index 551478883069..8f99dca0fe90 100644 --- a/sql/rpl_slave.cc +++ b/sql/rpl_slave.cc @@ -855,6 +855,7 @@ read_rotate_from_relay_log(char *filename, char *master_log_file, Log_event *ev= NULL; bool done= false; enum_read_rotate_from_relay_log_status ret= NOT_FOUND_ROTATE; + Format_description_log_event* new_fdle; while (!done && (ev= Log_event::read_log_event(&log, 0, fd_ev_p, opt_slave_sql_verify_checksum)) != NULL) @@ -863,9 +864,19 @@ read_rotate_from_relay_log(char *filename, char *master_log_file, switch (ev->get_type_code()) { case binary_log::FORMAT_DESCRIPTION_EVENT: + new_fdle= static_cast(ev); + new_fdle->copy_crypto_data(*fd_ev_p); if (fd_ev_p != &fd_ev) delete fd_ev_p; - fd_ev_p= (Format_description_log_event *)ev; + fd_ev_p= new_fdle; + break; + case binary_log::START_ENCRYPTION_EVENT: + if (fd_ev_p->start_decryption(static_cast(ev))) + { + sql_print_error("Could not initialize decryption of binlog."); + done= true; + ret= ERROR; + } break; case binary_log::ROTATE_EVENT: /* @@ -4582,7 +4593,8 @@ static int sql_delay_event(Log_event *ev, THD *thd, Relay_log_info *rli) int type= ev->get_type_code(); if (sql_delay && type != binary_log::ROTATE_EVENT && type != binary_log::FORMAT_DESCRIPTION_EVENT && - type != binary_log::START_EVENT_V3) + type != binary_log::START_EVENT_V3 && + type != binary_log::START_ENCRYPTION_EVENT) { // The time when we should execute the event. time_t sql_delay_end= @@ -4950,7 +4962,8 @@ apply_event_and_update_pos(Log_event** ptr_ev, THD* thd, Relay_log_info* rli) if (!error && rli->is_mts_recovery() && ev->get_type_code() != binary_log::ROTATE_EVENT && ev->get_type_code() != binary_log::FORMAT_DESCRIPTION_EVENT && - ev->get_type_code() != binary_log::PREVIOUS_GTIDS_LOG_EVENT) + ev->get_type_code() != binary_log::PREVIOUS_GTIDS_LOG_EVENT && + ev->get_type_code() != binary_log::START_ENCRYPTION_EVENT) { if (ev->starts_group()) { @@ -5779,7 +5792,7 @@ requesting master dump") || DBUG_EXECUTE_IF("relay_xid_trigger", if (event_len != packet_error) { - const char* event_buf= (const char*)mysql->net.read_pos + 1; + const uchar* event_buf= (const uchar*)mysql->net.read_pos + 1; Log_event_type event_type= (Log_event_type) event_buf[EVENT_TYPE_OFFSET]; if (event_type == binary_log::XID_EVENT) @@ -5965,7 +5978,7 @@ ignore_log_space_limit=%d", thd->killed= THD::KILLED_NO_VALUE; ); DBUG_EXECUTE_IF("stop_io_after_reading_unknown_event", - if (event_buf[EVENT_TYPE_OFFSET] >= binary_log::ENUM_END_EVENT) + if (static_cast(event_buf[EVENT_TYPE_OFFSET]) >= binary_log::MYSQL_END_EVENT) thd->killed= THD::KILLED_NO_VALUE; ); DBUG_EXECUTE_IF("stop_io_after_queuing_event", @@ -6504,14 +6517,16 @@ bool mts_recovery_groups(Relay_log_info *rli) sql_print_error("%s", errmsg); goto err; } + p_fdle->reset_crypto(); /* Looking for the actual relay checksum algorithm that is present in - a FD at head events of the relay log. + a FD at head events of the relay log. We also check if relay log is + encrypted by checking for the presence of START_ENCRYPTION_EVENT. */ if (!checksum_detected) { int i= 0; - while (i < 4 && (ev= Log_event::read_log_event(&log, + while (i < 5 && (ev= Log_event::read_log_event(&log, (mysql_mutex_t*) 0, p_fdle, 0))) { if (ev->get_type_code() == binary_log::FORMAT_DESCRIPTION_EVENT) @@ -6520,6 +6535,14 @@ bool mts_recovery_groups(Relay_log_info *rli) ev->common_footer->checksum_alg; checksum_detected= TRUE; } + if (ev->get_type_code() == binary_log::START_ENCRYPTION_EVENT) + { + if (p_fdle->start_decryption((Start_encryption_log_event*) ev)) + { + delete ev; + goto err; + } + } delete ev; i++; } @@ -6542,9 +6565,19 @@ bool mts_recovery_groups(Relay_log_info *rli) if (ev->get_type_code() == binary_log::FORMAT_DESCRIPTION_EVENT) p_fdle->common_footer->checksum_alg= ev->common_footer->checksum_alg; + if (ev->get_type_code() == binary_log::START_ENCRYPTION_EVENT) + { + if (p_fdle->start_decryption((Start_encryption_log_event*) ev)) + { + delete ev; + goto err; + } + } + if (ev->get_type_code() == binary_log::ROTATE_EVENT || ev->get_type_code() == binary_log::FORMAT_DESCRIPTION_EVENT || - ev->get_type_code() == binary_log::PREVIOUS_GTIDS_LOG_EVENT) + ev->get_type_code() == binary_log::PREVIOUS_GTIDS_LOG_EVENT || + ev->get_type_code() == binary_log::START_ENCRYPTION_EVENT) { delete ev; ev= NULL; @@ -8113,7 +8146,7 @@ bool queue_event(Master_info* mi,const char* buf, ulong event_len) char *save_buf= NULL; // needed for checksumming the fake Rotate event char rot_buf[LOG_EVENT_HEADER_LEN + Binary_log_event::ROTATE_HEADER_LEN + FN_REFLEN]; Gtid gtid= { 0, 0 }; - Log_event_type event_type= (Log_event_type)buf[EVENT_TYPE_OFFSET]; + Log_event_type event_type= (Log_event_type)static_cast(buf[EVENT_TYPE_OFFSET]); DBUG_ASSERT(checksum_alg == binary_log::BINLOG_CHECKSUM_ALG_OFF || checksum_alg == binary_log::BINLOG_CHECKSUM_ALG_UNDEF || @@ -8162,7 +8195,8 @@ bool queue_event(Master_info* mi,const char* buf, ulong event_len) // Emulate the network corruption DBUG_EXECUTE_IF("corrupt_queue_event", - if (event_type != binary_log::FORMAT_DESCRIPTION_EVENT) + if (event_type != binary_log::FORMAT_DESCRIPTION_EVENT && + event_type != binary_log::START_ENCRYPTION_EVENT) { char *debug_event_buf_c = (char*) buf; int debug_cor_pos = rand() % (event_len - BINLOG_CHECKSUM_LEN); @@ -8386,6 +8420,8 @@ bool queue_event(Master_info* mi,const char* buf, ulong event_len) "could not queue event from master"); goto err; } + new_fdle->copy_crypto_data(*(mi->get_mi_description_event())); + if (new_fdle->common_footer->checksum_alg == binary_log::BINLOG_CHECKSUM_ALG_UNDEF) new_fdle->common_footer->checksum_alg= binary_log::BINLOG_CHECKSUM_ALG_OFF; @@ -8448,9 +8484,15 @@ bool queue_event(Master_info* mi,const char* buf, ulong event_len) to the last skipped transaction. Note that, we update only the positions and not the file names, as a ROTATE EVENT from the master prior to this will update the file name. + + When master's binlog is encrypted it will also sent heartbeat + event after reading Start_encryption_event from the binlog. + As Start_encryption_event is not sent to slave, the master + informs the slave to update it's master_log_pos by sending + heartbeat event. */ - if (mi->is_auto_position() && mi->get_master_log_pos() < - hb.common_header->log_pos && mi->get_master_log_name() != NULL) + if (mi->get_master_log_pos() < hb.common_header->log_pos && + mi->get_master_log_name() != NULL) { DBUG_ASSERT(memcmp(const_cast(mi->get_master_log_name()), @@ -8604,7 +8646,7 @@ bool queue_event(Master_info* mi,const char* buf, ulong event_len) if (event_type == binary_log::WRITE_ROWS_EVENT || event_type == binary_log::PREVIOUS_GTIDS_LOG_EVENT) { - char *event_buf= const_cast(buf); + uchar *event_buf= const_cast(reinterpret_cast(buf)); /* Overwrite the log event type with an unknown type. */ event_buf[EVENT_TYPE_OFFSET]= binary_log::ENUM_END_EVENT + 1; /* Set LOG_EVENT_IGNORABLE_F for the log event. */ @@ -8688,7 +8730,7 @@ bool queue_event(Master_info* mi,const char* buf, ulong event_len) { bool is_error= false; /* write the event to the relay log */ - if (likely(rli->relay_log.append_buffer(buf, event_len, mi) == 0)) + if (likely(rli->relay_log.append_buffer(reinterpret_cast(const_cast(buf)), event_len, mi) == 0)) { mi->set_master_log_pos(mi->get_master_log_pos() + inc_pos); DBUG_PRINT("info", ("master_log_pos: %lu", (ulong) mi->get_master_log_pos())); @@ -9400,6 +9442,7 @@ static Log_event* next_event(Relay_log_info* rli) DBUG_ASSERT(rli->cur_log_fd >= 0); mysql_file_close(rli->cur_log_fd, MYF(MY_WME)); rli->cur_log_fd = -1; + rli->get_rli_description_event()->reset_crypto(); if (relay_log_purge) { diff --git a/sql/rpl_trx_boundary_parser.cc b/sql/rpl_trx_boundary_parser.cc index cb634ae3ed20..66aa1ebb0630 100644 --- a/sql/rpl_trx_boundary_parser.cc +++ b/sql/rpl_trx_boundary_parser.cc @@ -110,7 +110,7 @@ Transaction_boundary_parser::get_event_boundary_type( if (length < header_size) goto end; - event_type= (Log_event_type)buf[EVENT_TYPE_OFFSET]; + event_type= (Log_event_type)static_cast(buf[EVENT_TYPE_OFFSET]); DBUG_PRINT("info",("trx boundary parser was fed with an event of type %s", Log_event::get_type_str(event_type))); @@ -235,6 +235,7 @@ Transaction_boundary_parser::get_event_boundary_type( case binary_log::NEW_LOAD_EVENT: case binary_log::EXEC_LOAD_EVENT: case binary_log::TRANSACTION_CONTEXT_EVENT: + case binary_log::START_ENCRYPTION_EVENT: boundary_type= EVENT_BOUNDARY_TYPE_IGNORE; break; diff --git a/sql/sys_vars.cc b/sql/sys_vars.cc index 7bc03d43b031..a991b1c3075a 100644 --- a/sql/sys_vars.cc +++ b/sql/sys_vars.cc @@ -988,6 +988,11 @@ static Sys_var_enum rbr_exec_mode( ON_CHECK(prevent_global_rbr_exec_mode_idempotent), ON_UPDATE(NULL)); +static Sys_var_mybool Sys_binlog_encryption( + "encrypt_binlog", "Encrypt binary logs (including relay logs)", + READ_ONLY GLOBAL_VAR(encrypt_binlog), CMD_LINE(OPT_ARG), + DEFAULT(FALSE)); + static const char *binlog_row_image_names[]= {"MINIMAL", "NOBLOB", "FULL", NullS}; static Sys_var_enum Sys_binlog_row_image( "binlog_row_image", From 89fba39fac841540fc29cf616bd08f04caeb39c0 Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Thu, 30 Nov 2017 16:47:49 +0100 Subject: [PATCH 0243/1221] From b063e52a8367dc9d5ed418e7f6d96400867e9f43 Mon Sep 17 00:00:00 2001 From: Debarun Banerjee Date: Fri, 1 Dec 2017 10:44:29 +0530 Subject: [PATCH 0244/1221] BUG#27189701 INNODB: EARLY RELEASE GAP LOCKS FOR RC ISOLATION Problem : --------- 1. XA prepared transactions are replayed in slave before they are committed in the order they are prepared. 2. Two concurrent transactions run successfully to "XA Prepare" stage in master without conflict. 3. The same transactions conflicts in slave when run serially till "XA Prepare". Innodb doesn't provide such no-conflict guarantee. It happens because GAP locks are not exact i.e. the locking range could be different when the same statement is run again. Solution : ---------- 1. Release GAP locks at transaction Prepare for READ COMMITTED isolation. - It doesn't break 2PL. - It can be extended to release all read locks - It can even be enabled for higher level of isolation in future as it doesn't break serializability. 2. Don't inherit GAP locks after transaction has reached "Prepared" state. Reviewed-by: Sunny Bains RB: 16492 --- storage/innobase/include/lock0lock.h | 12 ++- storage/innobase/include/lock0priv.h | 33 +++++- storage/innobase/include/trx0trx.h | 9 +- storage/innobase/lock/lock0lock.cc | 144 +++++++++++++++++++++++---- storage/innobase/trx/trx0trx.cc | 13 +++ 5 files changed, 191 insertions(+), 20 deletions(-) diff --git a/storage/innobase/include/lock0lock.h b/storage/innobase/include/lock0lock.h index 8db09e50f48c..90593d791a7a 100644 --- a/storage/innobase/include/lock0lock.h +++ b/storage/innobase/include/lock0lock.h @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2017, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -563,6 +563,16 @@ void lock_trx_release_locks( /*===================*/ trx_t* trx); /*!< in/out: transaction */ + +/** Release read locks of a transacion. It is called during XA +prepare to release locks early. +@param[in,out] trx transaction +@param[in] only_gap release only GAP locks */ +void +lock_trx_release_read_locks( + trx_t* trx, + bool only_gap); + /*********************************************************************//** Removes locks on a table to be dropped or truncated. If remove_also_table_sx_locks is TRUE then table-level S and X locks are diff --git a/storage/innobase/include/lock0priv.h b/storage/innobase/include/lock0priv.h index d148c305d7d3..beba8cb87168 100644 --- a/storage/innobase/include/lock0priv.h +++ b/storage/innobase/include/lock0priv.h @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2007, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2007, 2017, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -130,6 +130,16 @@ struct lock_t { LOCK_INSERT_INTENTION, wait flag, ORed */ + /** Remove GAP lock from a next Key Lock */ + void remove_gap_lock() + { + ut_ad(!is_gap()); + ut_ad(!is_insert_intention()); + ut_ad(is_record_lock()); + + type_mode |= LOCK_REC_NOT_GAP; + } + /** Determine if the lock object is a record lock. @return true if record lock, false otherwise. */ bool is_record_lock() const @@ -166,6 +176,27 @@ struct lock_t { return(static_cast(type_mode & LOCK_MODE_MASK)); } + /** Get lock hash table + @return lock hash table */ + hash_table_t* hash_table() const + { + return(lock_hash_get(type_mode)); + } + + /** Get tablespace ID for the lock + @return space ID */ + ulint space() const + { + return(un_member.rec_lock.space); + } + + /** Get page number of the lock + @return page number */ + ulint page_number() const + { + return(un_member.rec_lock.page_no); + } + /** Print the lock object into the given output stream. @param[in,out] out the output stream @return the given output stream. */ diff --git a/storage/innobase/include/trx0trx.h b/storage/innobase/include/trx0trx.h index 1a5f5b168554..5edfa35246f3 100644 --- a/storage/innobase/include/trx0trx.h +++ b/storage/innobase/include/trx0trx.h @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2017, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -988,6 +988,13 @@ struct trx_t { trx_state_t state; + /* If set, this transaction should stop inheriting (GAP)locks. + Generally set to true during transaction prepare for RC or lower + isolation, if requested. Needed for replication replay where + we don't want to get blocked on GAP locks taken for protecting + concurrent unique insert or replace operation. */ + bool skip_lock_inheritance; + ReadView* read_view; /*!< consistent read view used in the transaction, or NULL if not yet set */ diff --git a/storage/innobase/lock/lock0lock.cc b/storage/innobase/lock/lock0lock.cc index 77f388774a59..48e1cfbd26e9 100644 --- a/storage/innobase/lock/lock0lock.cc +++ b/storage/innobase/lock/lock0lock.cc @@ -2426,6 +2426,37 @@ lock_rec_cancel( trx_mutex_exit(lock->trx); } +/** Grant lock to waiting requests that no longer conflicts +@param[in] in_lock record lock object: grant all non-conflicting + locks waiting behind this lock object */ +static +void +lock_rec_grant(lock_t* in_lock) +{ + lock_t* lock; + + ulint space = in_lock->space(); + ulint page_no = in_lock->page_number(); + hash_table_t* lock_hash = in_lock->hash_table(); + + /* Check if waiting locks in the queue can now be granted: grant + locks if there are no conflicting locks ahead. Stop at the first + X lock that is waiting or has been granted. */ + + for (lock = lock_rec_get_first_on_page_addr(lock_hash, space, page_no); + lock != NULL; + lock = lock_rec_get_next_on_page(lock)) { + + if (lock_get_wait(lock) + && !lock_rec_has_to_wait_in_queue(lock)) { + + /* Grant the lock */ + ut_ad(lock->trx != in_lock->trx); + lock_grant(lock); + } + } +} + /*************************************************************//** Removes a record lock request, waiting or granted, from the queue and grants locks to other transactions in the queue if they now are entitled @@ -2442,7 +2473,6 @@ lock_rec_dequeue_from_page( { ulint space; ulint page_no; - lock_t* lock; trx_lock_t* trx_lock; hash_table_t* lock_hash; @@ -2468,22 +2498,7 @@ lock_rec_dequeue_from_page( MONITOR_INC(MONITOR_RECLOCK_REMOVED); MONITOR_DEC(MONITOR_NUM_RECLOCK); - /* Check if waiting locks in the queue can now be granted: grant - locks if there are no conflicting locks ahead. Stop at the first - X lock that is waiting or has been granted. */ - - for (lock = lock_rec_get_first_on_page_addr(lock_hash, space, page_no); - lock != NULL; - lock = lock_rec_get_next_on_page(lock)) { - - if (lock_get_wait(lock) - && !lock_rec_has_to_wait_in_queue(lock)) { - - /* Grant the lock */ - ut_ad(lock->trx != in_lock->trx); - lock_grant(lock); - } - } + lock_rec_grant(in_lock); } /*************************************************************//** @@ -2657,6 +2672,12 @@ lock_rec_inherit_to_gap( lock != NULL; lock = lock_rec_get_next(heap_no, lock)) { + /* Skip inheriting lock if set */ + if (lock->trx->skip_lock_inheritance) { + + continue; + } + if (!lock_rec_get_insert_intention(lock) && !((srv_locks_unsafe_for_binlog || lock->trx->isolation_level @@ -2695,6 +2716,12 @@ lock_rec_inherit_to_gap_if_gap_lock( lock != NULL; lock = lock_rec_get_next(heap_no, lock)) { + /* Skip inheriting lock if set */ + if (lock->trx->skip_lock_inheritance) { + + continue; + } + if (!lock_rec_get_insert_intention(lock) && (heap_no == PAGE_HEAP_NO_SUPREMUM || !lock_rec_get_rec_not_gap(lock))) { @@ -4330,6 +4357,89 @@ lock_check_dict_lock( } #endif /* UNIV_DEBUG */ +/** Release read locks of a transacion. It is called during XA +prepare to release locks early. +@param[in,out] trx transaction +@param[in] only_gap release only GAP locks */ +void +lock_trx_release_read_locks( + trx_t* trx, + bool only_gap) +{ + lock_t* lock; + lock_t* next_lock; + ulint count = 0; + + /* Avoid taking lock_sys if trx didn't acquire any lock */ + if (UT_LIST_GET_LEN(trx->lock.trx_locks) == 0) { + + return; + } + + lock_mutex_enter(); + + lock = UT_LIST_GET_FIRST(trx->lock.trx_locks); + + while (lock != NULL) { + + next_lock = UT_LIST_GET_NEXT(trx_locks, lock); + + /* Check only for record lock */ + if (!lock->is_record_lock() + || lock->is_insert_intention()) { + + lock = next_lock; + continue; + } + + /* Release any GAP only lock. */ + if (lock->is_gap()) { + + lock_rec_dequeue_from_page(lock); + lock = next_lock; + continue; + } + + /* Don't release any non-GAP lock if not asked. */ + if (lock->is_record_not_gap() && only_gap) { + + lock = next_lock; + continue; + } + + /* Release Shared Next Key Lock(SH + GAP) if asked for */ + if (lock->mode() == LOCK_S && !only_gap) { + + lock_rec_dequeue_from_page(lock); + lock = next_lock; + continue; + } + + /* Release GAP lock from Next Key lock */ + lock->remove_gap_lock(); + + /* Grant locks */ + lock_rec_grant(lock); + + lock = next_lock; + + ++count; + + if (count == LOCK_RELEASE_INTERVAL) { + /* Release the mutex for a while, so that we + do not monopolize it */ + + lock_mutex_exit(); + + lock_mutex_enter(); + + count = 0; + } + } + + lock_mutex_exit(); +} + /*********************************************************************//** Releases transaction locks, and releases possible other transactions waiting because of these locks. */ diff --git a/storage/innobase/trx/trx0trx.cc b/storage/innobase/trx/trx0trx.cc index 8dedb0d04d3d..89c384af8dfb 100644 --- a/storage/innobase/trx/trx0trx.cc +++ b/storage/innobase/trx/trx0trx.cc @@ -127,6 +127,8 @@ trx_init( trx->no = TRX_ID_MAX; + trx->skip_lock_inheritance = false; + trx->is_recovered = false; trx->op_info = ""; @@ -2834,6 +2836,17 @@ trx_prepare( trx_sys_mutex_exit(); /*--------------------------------------*/ + /* Release read locks after PREAPARE for READ COMMITTED + and lower isolation. */ + if (trx->isolation_level <= TRX_ISO_READ_COMMITTED) { + + /* Stop inherting GAP locks. */ + trx->skip_lock_inheritance = true; + + /* Release only GAP locks for now. */ + lock_trx_release_read_locks(trx, true); + } + switch (thd_requested_durability(trx->mysql_thd)) { case HA_IGNORE_DURABILITY: /* We set the HA_IGNORE_DURABILITY during prepare phase of From ecc5a07874d44307b835ff5dbd091343961fbc93 Mon Sep 17 00:00:00 2001 From: Shishir Jaiswal Date: Sat, 2 Dec 2017 15:12:32 +0530 Subject: [PATCH 0245/1221] Bug#26585560 - MYSQL DAEMON SHOULD CREATE ITS PID FILE AS ROOT DESCRIPTION =========== If the .pid file is created at a world-writable location, it can be compromised by replacing the server's pid with another running server's (or some other non-mysql process) PID causing abnormal behaviour. ANALYSIS ======== In such a case, user should be warned that .pid file is being created at a world-writable location. FIX === A new function is_file_or_dir_world_writable() is defined and it is called in create_pid_file() before .pid file creation. If the location is world-writable, a relevant warning is thrown. NOTE ==== 1. PID file is always created with permission bit 0664, so for outside world its read-only. 2. Ignoring the case when permission is denied to get the dir stats since the .pid file creation would fail anyway in such a case. --- include/sql_common.h | 1 + mysql-test/include/mtr_warnings.sql | 8 ++++- sql-common/my_path_permissions.cc | 54 +++++++++++++++++++++++++++++ sql/CMakeLists.txt | 2 +- sql/mysqld.cc | 36 ++++++++++++++++++- 5 files changed, 98 insertions(+), 3 deletions(-) create mode 100644 sql-common/my_path_permissions.cc diff --git a/include/sql_common.h b/include/sql_common.h index 05bbb5a4f537..45e90d438fb4 100644 --- a/include/sql_common.h +++ b/include/sql_common.h @@ -107,6 +107,7 @@ void mysql_client_plugin_deinit(); struct st_mysql_client_plugin; extern struct st_mysql_client_plugin *mysql_client_builtins[]; extern my_bool libmysql_cleartext_plugin_enabled; +int is_file_or_dir_world_writable(const char *filepath); #ifdef __cplusplus } diff --git a/mysql-test/include/mtr_warnings.sql b/mysql-test/include/mtr_warnings.sql index 0a3c3bc60b3e..fb6d24c03e98 100644 --- a/mysql-test/include/mtr_warnings.sql +++ b/mysql-test/include/mtr_warnings.sql @@ -1,4 +1,4 @@ --- Copyright (c) 2008, 2016, Oracle and/or its affiliates. All rights reserved. +-- Copyright (c) 2008, 2017, Oracle and/or its affiliates. All rights reserved. -- -- 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 @@ -209,6 +209,12 @@ INSERT INTO global_suppressions VALUES */ ("Insecure configuration for --secure-file-priv:*"), + /* + Bug#26585560, warning related to --pid-file + */ + ("Insecure configuration for --pid-file:*"), + ("Few location(s) are inaccessible while checking PID filepath"), + ("THE_LAST_SUPPRESSION")|| diff --git a/sql-common/my_path_permissions.cc b/sql-common/my_path_permissions.cc new file mode 100644 index 000000000000..22cd748ff03f --- /dev/null +++ b/sql-common/my_path_permissions.cc @@ -0,0 +1,54 @@ +/* Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + + 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 Street, Fifth Floor, Boston, MA + 02110-1301, USA */ + +#include "my_dir.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + Check if a file/dir is world-writable (only on non-Windows platforms) + + @param [in] Path of the file/dir to be checked + + @returns Status of the file/dir check + @retval -2 Permission denied to check attributes of file/dir + @retval -1 Error in reading file/dir + @retval 0 File/dir is not world-writable + @retval 1 File/dir is world-writable + */ + +int is_file_or_dir_world_writable(const char *path) +{ + MY_STAT stat_info; + (void)path; // avoid unused param warning when built on Windows +#ifndef _WIN32 + if (!my_stat(path, &stat_info, MYF(0))) + { + return (errno == EACCES) ? -2 : -1; + } + if ((stat_info.st_mode & S_IWOTH) && + ((stat_info.st_mode & S_IFMT) == S_IFREG || /* file */ + (stat_info.st_mode & S_IFMT) == S_IFDIR)) /* or dir */ + return 1; +#endif + return 0; +} + +#ifdef __cplusplus +} +#endif diff --git a/sql/CMakeLists.txt b/sql/CMakeLists.txt index 531561ac36d7..aa7e0312e055 100644 --- a/sql/CMakeLists.txt +++ b/sql/CMakeLists.txt @@ -78,7 +78,7 @@ SET (SQL_SOURCE sql_profile.cc event_parse_data.cc sql_alter.cc sql_signal.cc rpl_handler.cc mdl.cc sql_admin.cc transaction.cc sys_vars.cc sql_truncate.cc datadict.cc - sql_reload.cc + sql_reload.cc ../sql-common/my_path_permissions.cc ${GEN_SOURCES} ${CONF_SOURCES} ${MYSYS_LIBWRAP_SOURCE}) diff --git a/sql/mysqld.cc b/sql/mysqld.cc index c969fd8a62a3..fd39e252c266 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights +/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify @@ -7996,6 +7996,40 @@ static int test_if_case_insensitive(const char *dir_name) static void create_pid_file() { File file; + bool check_parent_path= 1, is_path_accessible= 1; + char pid_filepath[FN_REFLEN], *pos= NULL; + /* Copy pid file name to get pid file path */ + strcpy(pid_filepath, pidfile_name); + + /* Iterate through the entire path to check if even one of the sub-dirs + is world-writable */ + while (check_parent_path && (pos= strrchr(pid_filepath, FN_LIBCHAR)) + && (pos != pid_filepath)) /* shouldn't check root */ + { + *pos= '\0'; /* Trim the inner-most dir */ + switch (is_file_or_dir_world_writable(pid_filepath)) + { + case -2: + is_path_accessible= 0; + break; + case -1: + sql_perror("Can't start server: can't check PID filepath"); + exit(1); + case 1: + sql_print_warning("Insecure configuration for --pid-file: Location " + "'%s' in the path is accessible to all OS users. " + "Consider choosing a different directory.", + pid_filepath); + check_parent_path= 0; + break; + case 0: + continue; /* Keep checking the parent dir */ + } + } + if (!is_path_accessible) + { + sql_print_warning("Few location(s) are inaccessible while checking PID filepath."); + } if ((file= mysql_file_create(key_file_pid, pidfile_name, 0664, O_WRONLY | O_TRUNC, MYF(MY_WME))) >= 0) { From 8ecaedb22009063567963892b236da8a327e476f Mon Sep 17 00:00:00 2001 From: Evgeniy Patlan Date: Mon, 4 Dec 2017 10:49:34 +0200 Subject: [PATCH 0246/1221] Update version --- VERSION | 2 +- storage/innobase/include/univ.i | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/VERSION b/VERSION index 02f89777e0d0..b143a0175a1a 100644 --- a/VERSION +++ b/VERSION @@ -1,4 +1,4 @@ MYSQL_VERSION_MAJOR=5 MYSQL_VERSION_MINOR=6 MYSQL_VERSION_PATCH=38 -MYSQL_VERSION_EXTRA=-82.3 +MYSQL_VERSION_EXTRA=-83.0 diff --git a/storage/innobase/include/univ.i b/storage/innobase/include/univ.i index 3db800cce25c..ce2de004dd4f 100644 --- a/storage/innobase/include/univ.i +++ b/storage/innobase/include/univ.i @@ -47,7 +47,7 @@ Created 1/20/1994 Heikki Tuuri #define INNODB_VERSION_BUGFIX MYSQL_VERSION_PATCH #ifndef PERCONA_INNODB_VERSION -#define PERCONA_INNODB_VERSION 82.3 +#define PERCONA_INNODB_VERSION 83.0 #endif /* Enable UNIV_LOG_ARCHIVE in XtraDB */ From 3d47f60b86f5331e13ac0e75ef6e2ad9221996cf Mon Sep 17 00:00:00 2001 From: Sachin Agarwal Date: Tue, 5 Dec 2017 19:13:12 +0530 Subject: [PATCH 0247/1221] Bug #26731689 FK ON TABLE WITH GENERATED COLS: ASSERTION POS < N_DEF Problem: During ALTER, when filling stored column info, wrong column number is used. This is because we ignored virtual column when iterating over columns in table and lead to debug assertion. Fix: In InnoDB table cache object, vcols are on stored on one list, stored and normal columns are stored in another list. When looking for stored column, ignore the virtual columns to get the right column number of stored column. Reviewed by: Thiru , Satya RB: 17939 --- mysql-test/suite/innodb/r/stored_fk.result | 34 +++++++++++ mysql-test/suite/innodb/t/stored_fk.test | 65 ++++++++++++++++++++++ storage/innobase/handler/handler0alter.cc | 10 +++- 3 files changed, 107 insertions(+), 2 deletions(-) diff --git a/mysql-test/suite/innodb/r/stored_fk.result b/mysql-test/suite/innodb/r/stored_fk.result index 17de0d03b95f..6fb1684497f8 100644 --- a/mysql-test/suite/innodb/r/stored_fk.result +++ b/mysql-test/suite/innodb/r/stored_fk.result @@ -30,3 +30,37 @@ alter table t2 add column f2 int as (f1) stored, algorithm=inplace; ERROR 0A000: ALGORITHM=INPLACE is not supported for this operation. Try ALGORITHM=COPY. drop table t2, t1; set foreign_key_checks = 1; +# +# BUG#26731689 FK ON TABLE WITH GENERATED COLS: ASSERTION POS < N_DEF +# +SET @foreign_key_checks_saved = @@foreign_key_checks; +SET foreign_key_checks=0; +DROP TABLE IF EXISTS s,t; +CREATE TABLE s (a INT, b INT GENERATED ALWAYS AS (0) STORED, c INT, +d INT GENERATED ALWAYS AS (0) VIRTUAL, e INT) ENGINE=innodb; +CREATE TABLE t (a INT) ENGINE=innodb; +ALTER TABLE s ADD CONSTRAINT c FOREIGN KEY (e) REFERENCES t(a) ON UPDATE SET null; +ERROR HY000: Failed to add the foreign key constaint. Missing index for constraint 'c' in the referenced table 't' +ALTER TABLE t ADD PRIMARY KEY(a); +ALTER TABLE s ADD CONSTRAINT c FOREIGN KEY (e) REFERENCES t(a) ON UPDATE SET null; +DROP TABLE s,t; +CREATE TABLE s (a INT GENERATED ALWAYS AS (0) VIRTUAL, +b INT GENERATED ALWAYS AS (0) STORED, c INT) ENGINE=innodb; +CREATE TABLE t (a INT) ENGINE=innodb; +ALTER TABLE s ADD CONSTRAINT c FOREIGN KEY (c) REFERENCES t(a) ON UPDATE SET null; +ERROR HY000: Failed to add the foreign key constaint. Missing index for constraint 'c' in the referenced table 't' +ALTER TABLE t ADD PRIMARY KEY(a); +ALTER TABLE s ADD CONSTRAINT c FOREIGN KEY (c) REFERENCES t(a) ON UPDATE SET null; +DROP TABLE s,t; +CREATE TABLE s (a INT, b INT GENERATED ALWAYS AS (0) STORED) ENGINE=innodb; +CREATE TABLE t (a INT PRIMARY KEY) ENGINE=innodb; +ALTER TABLE s ADD CONSTRAINT c FOREIGN KEY (a) REFERENCES t(a) ON UPDATE SET null; +DROP TABLE s,t; +CREATE TABLE s (a INT, b INT) ENGINE=innodb; +CREATE TABLE t (a INT) ENGINE=innodb; +ALTER TABLE s ADD CONSTRAINT c FOREIGN KEY (a) REFERENCES t(a) ON UPDATE SET null; +ERROR HY000: Failed to add the foreign key constaint. Missing index for constraint 'c' in the referenced table 't' +ALTER TABLE t ADD PRIMARY KEY(a); +ALTER TABLE s ADD CONSTRAINT c FOREIGN KEY (a) REFERENCES t(a) ON UPDATE SET null; +DROP TABLE s,t; +SET @@foreign_key_checks = @foreign_key_checks_saved; diff --git a/mysql-test/suite/innodb/t/stored_fk.test b/mysql-test/suite/innodb/t/stored_fk.test index 90e1c318f3fa..da8df775523e 100644 --- a/mysql-test/suite/innodb/t/stored_fk.test +++ b/mysql-test/suite/innodb/t/stored_fk.test @@ -38,3 +38,68 @@ create table t2(f1 int not null, alter table t2 add column f2 int as (f1) stored, algorithm=inplace; drop table t2, t1; set foreign_key_checks = 1; + +--echo # +--echo # BUG#26731689 FK ON TABLE WITH GENERATED COLS: ASSERTION POS < N_DEF +--echo # + +SET @foreign_key_checks_saved = @@foreign_key_checks; +SET foreign_key_checks=0; + +--disable_warnings +DROP TABLE IF EXISTS s,t; +--enable_warnings + +CREATE TABLE s (a INT, b INT GENERATED ALWAYS AS (0) STORED, c INT, + d INT GENERATED ALWAYS AS (0) VIRTUAL, e INT) ENGINE=innodb; + +CREATE TABLE t (a INT) ENGINE=innodb; + +# This would fail. No corresponding index +--error ER_FK_NO_INDEX_PARENT +ALTER TABLE s ADD CONSTRAINT c FOREIGN KEY (e) REFERENCES t(a) ON UPDATE SET null; + +ALTER TABLE t ADD PRIMARY KEY(a); + +ALTER TABLE s ADD CONSTRAINT c FOREIGN KEY (e) REFERENCES t(a) ON UPDATE SET null; + +DROP TABLE s,t; + +CREATE TABLE s (a INT GENERATED ALWAYS AS (0) VIRTUAL, + b INT GENERATED ALWAYS AS (0) STORED, c INT) ENGINE=innodb; + +CREATE TABLE t (a INT) ENGINE=innodb; + +# This would fail. No corresponding index +--error ER_FK_NO_INDEX_PARENT +ALTER TABLE s ADD CONSTRAINT c FOREIGN KEY (c) REFERENCES t(a) ON UPDATE SET null; + +ALTER TABLE t ADD PRIMARY KEY(a); + +ALTER TABLE s ADD CONSTRAINT c FOREIGN KEY (c) REFERENCES t(a) ON UPDATE SET null; + +DROP TABLE s,t; + +CREATE TABLE s (a INT, b INT GENERATED ALWAYS AS (0) STORED) ENGINE=innodb; + +CREATE TABLE t (a INT PRIMARY KEY) ENGINE=innodb; + +ALTER TABLE s ADD CONSTRAINT c FOREIGN KEY (a) REFERENCES t(a) ON UPDATE SET null; + +DROP TABLE s,t; + +CREATE TABLE s (a INT, b INT) ENGINE=innodb; + +CREATE TABLE t (a INT) ENGINE=innodb; + +# This would fail. No corresponding index +--error ER_FK_NO_INDEX_PARENT +ALTER TABLE s ADD CONSTRAINT c FOREIGN KEY (a) REFERENCES t(a) ON UPDATE SET null; + +ALTER TABLE t ADD PRIMARY KEY(a); + +ALTER TABLE s ADD CONSTRAINT c FOREIGN KEY (a) REFERENCES t(a) ON UPDATE SET null; + +DROP TABLE s,t; + +SET @@foreign_key_checks = @foreign_key_checks_saved; diff --git a/storage/innobase/handler/handler0alter.cc b/storage/innobase/handler/handler0alter.cc index 8728b8a7067f..e1b44bdb7636 100644 --- a/storage/innobase/handler/handler0alter.cc +++ b/storage/innobase/handler/handler0alter.cc @@ -5321,18 +5321,24 @@ alter_fill_stored_column( dict_s_col_list** s_cols, mem_heap_t** s_heap) { - ulint n_cols = altered_table->s->fields; + ulint n_cols = altered_table->s->fields; + ulint stored_col_no = 0; for (ulint i = 0; i < n_cols; i++) { Field* field = altered_table->field[i]; dict_s_col_t s_col; + if (!innobase_is_v_fld(field)) { + stored_col_no++; + } + if (!innobase_is_s_fld(field)) { continue; } ulint num_base = field->gcol_info->non_virtual_base_columns(); - dict_col_t* col = dict_table_get_nth_col(table, i); + dict_col_t* col + = dict_table_get_nth_col(table, stored_col_no); s_col.m_col = col; s_col.s_pos = i; From 9e1035c64f2db233995082397921f553810bdfbc Mon Sep 17 00:00:00 2001 From: Karthik Kamath Date: Tue, 5 Dec 2017 19:49:59 +0530 Subject: [PATCH 0248/1221] BUG#26881798: SERVER EXITS WHEN PRIMARY KEY IN MYSQL.PROC IS DROPPED ANALYSIS: ========= It is advised not to tamper with the system tables. When primary key is dropped from a system table, certain operations on the table which tries to access the table key information may lead to server exit. FIX: ==== An appropriate error is now reported in such a case. --- sql/event_db_repository.cc | 4 +++- sql/sp.cc | 4 ++-- sql/sql_acl.cc | 4 +++- sql/sql_plugin.cc | 12 +++++++++++- sql/table.cc | 16 ++++++++++++++-- sql/table.h | 5 +++-- 6 files changed, 36 insertions(+), 9 deletions(-) diff --git a/sql/event_db_repository.cc b/sql/event_db_repository.cc index 74da4d8f5876..96d1279573d2 100644 --- a/sql/event_db_repository.cc +++ b/sql/event_db_repository.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2006, 2011, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2006, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -174,6 +174,8 @@ class Event_db_intact : public Table_check_intact error_log_print(ERROR_LEVEL, fmt, args); va_end(args); } +public: + Event_db_intact() { has_keys= TRUE; } }; /** In case of an error, a message is printed to the error log. */ diff --git a/sql/sp.cc b/sql/sp.cc index 56a439481f5c..82d258801681 100644 --- a/sql/sp.cc +++ b/sql/sp.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2002, 2016, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2002, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -351,7 +351,7 @@ class Proc_table_intact : public Table_check_intact bool m_print_once; public: - Proc_table_intact() : m_print_once(TRUE) {} + Proc_table_intact() : m_print_once(TRUE) { has_keys= TRUE; } protected: void report_error(uint code, const char *fmt, ...); diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc index b48b85626790..385484f2b011 100644 --- a/sql/sql_acl.cc +++ b/sql/sql_acl.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -949,6 +949,8 @@ class Acl_table_intact : public Table_check_intact va_end(args); } } +public: + Acl_table_intact() { has_keys= TRUE; } }; #define IP_ADDR_STRLEN (3 + 1 + 3 + 1 + 3 + 1 + 3) diff --git a/sql/sql_plugin.cc b/sql/sql_plugin.cc index 9ec0390483a7..3af9136d37f8 100644 --- a/sql/sql_plugin.cc +++ b/sql/sql_plugin.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2005, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -1899,6 +1899,16 @@ bool mysql_uninstall_plugin(THD *thd, const LEX_STRING *name) if (! (table= open_ltable(thd, &tables, TL_WRITE, MYSQL_LOCK_IGNORE_TIMEOUT))) DBUG_RETURN(TRUE); + if (!table->key_info) + { + my_printf_error(ER_UNKNOWN_ERROR, + "The table '%s.%s' does not have the necessary key(s) " + "defined on it. Please check the table definition and " + "create index(s) accordingly.", MYF(0), + table->s->db.str, table->s->table_name.str); + DBUG_RETURN(TRUE); + } + /* Pre-acquire audit plugins for events that may potentially occur during [UN]INSTALL PLUGIN. diff --git a/sql/table.cc b/sql/table.cc index 5bc3ccdbf39c..46397b794ee1 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -3013,7 +3013,7 @@ Table_check_intact::check(TABLE *table, const TABLE_FIELD_DEF *table_def) /* Whether the table definition has already been validated. */ if (table->s->table_field_def_cache == table_def) - DBUG_RETURN(FALSE); + goto end; if (table->s->fields != table_def->count) { @@ -3129,6 +3129,18 @@ Table_check_intact::check(TABLE *table, const TABLE_FIELD_DEF *table_def) if (! error) table->s->table_field_def_cache= table_def; +end: + + if (has_keys && !error && !table->key_info) + { + my_printf_error(ER_UNKNOWN_ERROR, + "The table '%s.%s' does not have the necessary key(s) " + "defined on it. Please check the table definition and " + "create index(s) accordingly.", MYF(0), + table->s->db.str, table->s->table_name.str); + error= TRUE; + } + DBUG_RETURN(error); } diff --git a/sql/table.h b/sql/table.h index ac3533dc5d7e..31cd385ef357 100644 --- a/sql/table.h +++ b/sql/table.h @@ -1,7 +1,7 @@ #ifndef TABLE_INCLUDED #define TABLE_INCLUDED -/* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -484,10 +484,11 @@ typedef struct st_ha_data_partition class Table_check_intact { protected: + bool has_keys; virtual void report_error(uint code, const char *fmt, ...)= 0; public: - Table_check_intact() {} + Table_check_intact() : has_keys(FALSE) {} virtual ~Table_check_intact() {} /** Checks whether a table is intact. */ From efb4087cfe12134e1541b39ee9a4305f7cd225f5 Mon Sep 17 00:00:00 2001 From: Harin Vadodaria Date: Thu, 30 Nov 2017 12:18:46 +0100 Subject: [PATCH 0249/1221] Bug#27194270: LIMIT PASSWORD HASH ROUNDS IN SHA256-CRYPT ALGORITHM Description: Authentication string for sha256_password can contain an optional part specifying number of hash rounds to be performed. Though default is 5000, an authentication_string directly inserted in mysql.user table can contain different value. This may cause extra computations and may introduce unnecessary delay. Solution: Fixed the maximum number of rounds allowed. (cherry picked from commit b9e85dc240a1fce3e57c3d9a3be25eab7f9be606) --- include/crypt_genhash_impl.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/crypt_genhash_impl.h b/include/crypt_genhash_impl.h index 1057f63e1804..0e629b44bd18 100644 --- a/include/crypt_genhash_impl.h +++ b/include/crypt_genhash_impl.h @@ -17,7 +17,7 @@ #define CRYPT_HASHGEN_IMPL_H #define ROUNDS_DEFAULT 5000 #define ROUNDS_MIN 1000 -#define ROUNDS_MAX 999999999 +#define ROUNDS_MAX ROUNDS_DEFAULT #define MIXCHARS 32 #define CRYPT_SALT_LENGTH 20 #define CRYPT_MAGIC_LENGTH 3 From cb4b980b81aa6a874ab2037b9a722449dc7ea7fe Mon Sep 17 00:00:00 2001 From: Georgi Kodinov Date: Wed, 6 Dec 2017 13:55:12 +0100 Subject: [PATCH 0250/1221] Bug #22980871: UNCLEAR ERROR MESSAGE WHILE USING ENCRYPTION IF THERE IS A PERMISSION ISSUE Added a better wording for the error message. Test results updated to match the new message. --- .../suite/auth_sec/r/key_rotation_qa.result | 22 ++++++++--------- .../suite/innodb/r/table_encrypt_1.result | 6 ++--- .../suite/innodb/r/table_encrypt_3.result | 4 ++-- .../suite/innodb/r/table_encrypt_5.result | 24 +++++++++---------- .../suite/rpl/r/rpl_key_rotation.result | 6 ++--- mysql-test/suite/rpl/t/rpl_key_rotation.test | 4 ++-- .../tests/mtr/r/gr_key_rotation.result | 12 +++++----- .../tests/mtr/t/gr_key_rotation.test | 4 ++-- sql/share/errmsg-utf8.txt | 2 +- 9 files changed, 42 insertions(+), 42 deletions(-) diff --git a/mysql-test/suite/auth_sec/r/key_rotation_qa.result b/mysql-test/suite/auth_sec/r/key_rotation_qa.result index e3e22e38c6e6..8eb35121e7bb 100644 --- a/mysql-test/suite/auth_sec/r/key_rotation_qa.result +++ b/mysql-test/suite/auth_sec/r/key_rotation_qa.result @@ -24,7 +24,7 @@ ERROR 42000: You have an error in your SQL syntax; check the manual that corresp ALTER INSTANCE ROTATE INNODB SLAVE KEY; ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SLAVE KEY' at line 1 ALTER INSTANCE ROTATE INNODB MASTER KEY; -ERROR HY000: Can't find master key from keyring, please check keyring plugin is loaded. +ERROR HY000: Can't find master key from keyring, please check in the server log if a keyring plugin is loaded and initialized successfully. INSTALL PLUGIN keyring_file SONAME 'keyring_file.so'; ERROR HY000: Function 'keyring_file' already exists @@ -70,7 +70,7 @@ INSERT INTO t3 VALUES(2, "ccccc"); keyring_tmp ALTER INSTANCE ROTATE INNODB MASTER KEY; -ERROR HY000: Can't find master key from keyring, please check keyring plugin is loaded. +ERROR HY000: Can't find master key from keyring, please check in the server log if a keyring plugin is loaded and initialized successfully. # Check for keyring file. keyring_tmp @@ -103,7 +103,7 @@ c1 c2 2 ccccc # restart: --early-plugin-load=keyring_file=keyring_file.so --keyring_file_data=MYSQL_TMP_DIR/keyring/keyring_new SELECT * FROM t1; -ERROR HY000: Can't find master key from keyring, please check keyring plugin is loaded. +ERROR HY000: Can't find master key from keyring, please check in the server log if a keyring plugin is loaded and initialized successfully. CREATE TABLE t12(c1 INT, c2 char(20)) ENCRYPTION="Y" ENGINE = InnoDB; INSERT INTO t12 VALUES(2, "ccccchfc"); ALTER INSTANCE ROTATE INNODB MASTER KEY; @@ -116,21 +116,21 @@ PLUGIN_NAME keyring_file PLUGIN_VERSION 1.0 PLUGIN_STATUS ACTIVE SELECT * FROM t2; -ERROR HY000: Can't find master key from keyring, please check keyring plugin is loaded. +ERROR HY000: Can't find master key from keyring, please check in the server log if a keyring plugin is loaded and initialized successfully. CREATE TABLE t11(c1 INT, c2 char(20)) ENCRYPTION="Y" ENGINE = InnoDB; SELECT * FROM t2; -ERROR HY000: Can't find master key from keyring, please check keyring plugin is loaded. +ERROR HY000: Can't find master key from keyring, please check in the server log if a keyring plugin is loaded and initialized successfully. UNINSTALL PLUGIN keyring_file; SELECT PLUGIN_NAME,PLUGIN_VERSION,PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE plugin_name='keyring_file'; SELECT * FROM t11; c1 c2 SELECT COUNT(*) FROM t1; -ERROR HY000: Can't find master key from keyring, please check keyring plugin is loaded. +ERROR HY000: Can't find master key from keyring, please check in the server log if a keyring plugin is loaded and initialized successfully. CREATE TABLE t4(c1 INT, c2 char(20)) ENCRYPTION="Y" ENGINE = InnoDB; -ERROR HY000: Can't find master key from keyring, please check keyring plugin is loaded. +ERROR HY000: Can't find master key from keyring, please check in the server log if a keyring plugin is loaded and initialized successfully. ALTER INSTANCE ROTATE INNODB MASTER KEY; -ERROR HY000: Can't find master key from keyring, please check keyring plugin is loaded. +ERROR HY000: Can't find master key from keyring, please check in the server log if a keyring plugin is loaded and initialized successfully. CREATE TABLE t5(c1 INT, c2 char(20)) ENGINE = InnoDB; INSERT INTO t5 VALUES(100, "without_enc"); keyring @@ -143,11 +143,11 @@ PLUGIN_NAME keyring_file PLUGIN_VERSION 1.0 PLUGIN_STATUS ACTIVE CREATE TABLE t6(c1 INT, c2 char(20)) ENCRYPTION="Y" ENGINE = InnoDB; -ERROR HY000: Can't find master key from keyring, please check keyring plugin is loaded. +ERROR HY000: Can't find master key from keyring, please check in the server log if a keyring plugin is loaded and initialized successfully. ALTER INSTANCE ROTATE INNODB MASTER KEY; -ERROR HY000: Can't find master key from keyring, please check keyring plugin is loaded. +ERROR HY000: Can't find master key from keyring, please check in the server log if a keyring plugin is loaded and initialized successfully. SELECT * FROM t3; -ERROR HY000: Can't find master key from keyring, please check keyring plugin is loaded. +ERROR HY000: Can't find master key from keyring, please check in the server log if a keyring plugin is loaded and initialized successfully. SELECT * FROM t5; c1 c2 diff --git a/mysql-test/suite/innodb/r/table_encrypt_1.result b/mysql-test/suite/innodb/r/table_encrypt_1.result index aabf9240c9bc..898666d924e4 100644 --- a/mysql-test/suite/innodb/r/table_encrypt_1.result +++ b/mysql-test/suite/innodb/r/table_encrypt_1.result @@ -7,10 +7,10 @@ call mtr.add_suppression("ibd can't be decrypted , please confirm the keyfile is call mtr.add_suppression("\\[Warning\\] InnoDB: Ignoring tablespace .* because it could not be opened"); call mtr.add_suppression("\\[ERROR\\] InnoDB: If you are installing InnoDB, remember that you must create directories yourself, InnoDB does not create them."); CREATE TABLE t1(c1 INT, c2 char(20)) ENCRYPTION="Y" ENGINE = InnoDB; -ERROR HY000: Can't find master key from keyring, please check keyring plugin is loaded. +ERROR HY000: Can't find master key from keyring, please check in the server log if a keyring plugin is loaded and initialized successfully. CREATE TABLE t1(c1 INT, c2 char(20)) ENGINE = InnoDB; ALTER TABLE t1 ENCRYPTION="Y", algorithm=copy; -ERROR HY000: Can't find master key from keyring, please check keyring plugin is loaded. +ERROR HY000: Can't find master key from keyring, please check in the server log if a keyring plugin is loaded and initialized successfully. DROP TABLE IF EXISTS t1; SET GLOBAL innodb_file_per_table = 0; SELECT @@innodb_file_per_table; @@ -69,7 +69,7 @@ c1 c2 0 aaaaa # restart SELECT * FROM t1 ORDER BY c1 LIMIT 10; -ERROR HY000: Can't find master key from keyring, please check keyring plugin is loaded. +ERROR HY000: Can't find master key from keyring, please check in the server log if a keyring plugin is loaded and initialized successfully. SELECT * FROM t1 ORDER BY c1 LIMIT 10; c1 c2 0 aaaaa diff --git a/mysql-test/suite/innodb/r/table_encrypt_3.result b/mysql-test/suite/innodb/r/table_encrypt_3.result index 72c29a97a4f6..136ed686d13c 100644 --- a/mysql-test/suite/innodb/r/table_encrypt_3.result +++ b/mysql-test/suite/innodb/r/table_encrypt_3.result @@ -10,11 +10,11 @@ SELECT @@innodb_file_per_table; 1 DROP TABLE IF EXISTS t_encrypt; CREATE TABLE t_encrypt(c1 INT, c2 char(20)) ENCRYPTION="Y" ENGINE = InnoDB; -ERROR HY000: Can't find master key from keyring, please check keyring plugin is loaded. +ERROR HY000: Can't find master key from keyring, please check in the server log if a keyring plugin is loaded and initialized successfully. UNINSTALL PLUGIN keyring_file; ERROR 42000: PLUGIN keyring_file does not exist ALTER INSTANCE ROTATE INNODB MASTER KEY; -ERROR HY000: Can't find master key from keyring, please check keyring plugin is loaded. +ERROR HY000: Can't find master key from keyring, please check in the server log if a keyring plugin is loaded and initialized successfully. # Starting server with keyring plugin # restart: --early-plugin-load=keyring_file=keyring_file.so --loose-keyring_file_data=MYSQL_TMP_DIR/mysecret_keyring --plugin-dir=KEYRING_PLUGIN_PATH DROP DATABASE IF EXISTS tde_db; diff --git a/mysql-test/suite/innodb/r/table_encrypt_5.result b/mysql-test/suite/innodb/r/table_encrypt_5.result index bee34cef86c7..d03c03271b3b 100644 --- a/mysql-test/suite/innodb/r/table_encrypt_5.result +++ b/mysql-test/suite/innodb/r/table_encrypt_5.result @@ -202,7 +202,7 @@ COUNT(*) 64 # Error on "ALTER INSTANCE ..." after UNINSTALL PLUGIN ALTER INSTANCE ROTATE INNODB MASTER KEY; -ERROR HY000: Can't find master key from keyring, please check keyring plugin is loaded. +ERROR HY000: Can't find master key from keyring, please check in the server log if a keyring plugin is loaded and initialized successfully. # new encrypt table creation is blocked after uninstall CREATE TABLE tde_db.t_encrypt_3(c2 INT NOT NULL AUTO_INCREMENT PRIMARY KEY, c3 CHAR(255) Default 'No text', @@ -212,7 +212,7 @@ c6 INT GENERATED ALWAYS AS (JSON_EXTRACT(c4,'$.key_b')) VIRTUAL, c7 POINT NOT NULL, spatial INDEX idx2 (c7) ) ENCRYPTION="Y" ENGINE = InnoDB; -ERROR HY000: Can't find master key from keyring, please check keyring plugin is loaded. +ERROR HY000: Can't find master key from keyring, please check in the server log if a keyring plugin is loaded and initialized successfully. # new non encrypt table CREATE TABLE tde_db.t_non_encrypt_3(c2 INT NOT NULL AUTO_INCREMENT PRIMARY KEY, c3 CHAR(255) Default 'No text', @@ -537,9 +537,9 @@ c2 right(c3,20) c4 c5 c6 ST_AsText(c7) # restart: # encrypt table not accessible SELECT COUNT(*) FROM tde_db.t_encrypt; -ERROR HY000: Can't find master key from keyring, please check keyring plugin is loaded. +ERROR HY000: Can't find master key from keyring, please check in the server log if a keyring plugin is loaded and initialized successfully. SELECT COUNT(*) FROM tde_db.t_encrypt_2; -ERROR HY000: Can't find master key from keyring, please check keyring plugin is loaded. +ERROR HY000: Can't find master key from keyring, please check in the server log if a keyring plugin is loaded and initialized successfully. # NON encrypt table are accessible SELECT COUNT(*) FROM tde_db.t_non_encrypt; COUNT(*) @@ -556,7 +556,7 @@ c6 INT GENERATED ALWAYS AS (JSON_EXTRACT(c4,'$.key_b')) VIRTUAL, c7 POINT NOT NULL, spatial INDEX idx2 (c7) ) ENCRYPTION="Y" ENGINE = InnoDB; -ERROR HY000: Can't find master key from keyring, please check keyring plugin is loaded. +ERROR HY000: Can't find master key from keyring, please check in the server log if a keyring plugin is loaded and initialized successfully. # non encrypt table possible CREATE TABLE tde_db.t_non_encrypt_4(c2 INT NOT NULL AUTO_INCREMENT PRIMARY KEY, c3 CHAR(255) Default 'No text', @@ -571,12 +571,12 @@ SELECT COUNT(*) FROM tde_db.t_non_encrypt_4; COUNT(*) 64 ALTER INSTANCE ROTATE INNODB MASTER KEY; -ERROR HY000: Can't find master key from keyring, please check keyring plugin is loaded. +ERROR HY000: Can't find master key from keyring, please check in the server log if a keyring plugin is loaded and initialized successfully. # encrypt table not accessible SELECT COUNT(*) FROM tde_db.t_encrypt; -ERROR HY000: Can't find master key from keyring, please check keyring plugin is loaded. +ERROR HY000: Can't find master key from keyring, please check in the server log if a keyring plugin is loaded and initialized successfully. SELECT COUNT(*) FROM tde_db.t_encrypt_2; -ERROR HY000: Can't find master key from keyring, please check keyring plugin is loaded. +ERROR HY000: Can't find master key from keyring, please check in the server log if a keyring plugin is loaded and initialized successfully. DROP TABLE tde_db.t_encrypt , tde_db.t_encrypt_2; DROP TABLE tde_db.t_non_encrypt , tde_db.t_non_encrypt_2 ,tde_db.t_non_encrypt_4; DROP DATABASE tde_db; @@ -910,9 +910,9 @@ c6 INT GENERATED ALWAYS AS (JSON_EXTRACT(c4,'$.key_b')) VIRTUAL, c7 POINT NOT NULL, spatial INDEX idx2 (c7) ) ENCRYPTION="Y" ENGINE = InnoDB; -ERROR HY000: Can't find master key from keyring, please check keyring plugin is loaded. +ERROR HY000: Can't find master key from keyring, please check in the server log if a keyring plugin is loaded and initialized successfully. ALTER INSTANCE ROTATE INNODB MASTER KEY; -ERROR HY000: Can't find master key from keyring, please check keyring plugin is loaded. +ERROR HY000: Can't find master key from keyring, please check in the server log if a keyring plugin is loaded and initialized successfully. #----------------------------------------------------------------------- # Test 4 : Restart with new keyring_data_file # Old encrypt table not accessible , non encrypt tables accessible @@ -988,9 +988,9 @@ c2 right(c3,20) c4 c5 c6 ST_AsText(c7) # restart: --early-plugin-load=keyring_file=keyring_file.so --loose-keyring_file_data=MYSQL_TMP_DIR/mysecret_keyring_new --plugin-dir=KEYRING_PLUGIN_PATH # encrypt table not accessible SELECT COUNT(*) FROM tde_db.t_encrypt; -ERROR HY000: Can't find master key from keyring, please check keyring plugin is loaded. +ERROR HY000: Can't find master key from keyring, please check in the server log if a keyring plugin is loaded and initialized successfully. SELECT COUNT(*) FROM tde_db.t_encrypt_2; -ERROR HY000: Can't find master key from keyring, please check keyring plugin is loaded. +ERROR HY000: Can't find master key from keyring, please check in the server log if a keyring plugin is loaded and initialized successfully. # NON encrypt table are accessible SELECT COUNT(*) FROM tde_db.t_non_encrypt; COUNT(*) diff --git a/mysql-test/suite/rpl/r/rpl_key_rotation.result b/mysql-test/suite/rpl/r/rpl_key_rotation.result index 5edde8833f59..7782fdb122e9 100644 --- a/mysql-test/suite/rpl/r/rpl_key_rotation.result +++ b/mysql-test/suite/rpl/r/rpl_key_rotation.result @@ -7,8 +7,8 @@ call mtr.add_suppression("\\[Error\\] Function 'keyring_file' already exists"); call mtr.add_suppression("\\[Error\\] Couldn't load plugin named 'keyring_file' with soname 'keyring_file.so'."); call mtr.add_suppression("\\[Error\\] InnoDB: Can't generate new master key, please check the keyring plugin is loaded."); call mtr.add_suppression("\\[Error\\] InnoDB: Encryption can't find master key, please check the keyring plugin is loaded."); -call mtr.add_suppression("Error 'Can't find master key from keyring, please check keyring plugin is loaded."); -call mtr.add_suppression("\\[Warning\\] Slave: Can't find master key from keyring, please check keyring plugin is loaded."); +call mtr.add_suppression("Error 'Can't find master key from keyring, please check in the server log if a keyring plugin is loaded and initialized successfully."); +call mtr.add_suppression("\\[Warning\\] Slave: Can't find master key from keyring, please check in the server log if a keyring plugin is loaded and initialized successfully."); call mtr.add_suppression("\\[Error\\] InnoDB: Can't generate new master key for tablespace encryption, please check the keyring plugin is loaded."); call mtr.add_suppression("The slave coordinator and worker threads are stopped"); [On Master] @@ -115,7 +115,7 @@ c1 c2 2 ccccc ALTER INSTANCE ROTATE INNODB MASTER KEY; -ERROR HY000: Can't find master key from keyring, please check keyring plugin is loaded. +ERROR HY000: Can't find master key from keyring, please check in the server log if a keyring plugin is loaded and initialized successfully. # Installing keyring_file plugin on master. INSTALL PLUGIN keyring_file SONAME 'keyring_file.so'; # Cleanup diff --git a/mysql-test/suite/rpl/t/rpl_key_rotation.test b/mysql-test/suite/rpl/t/rpl_key_rotation.test index af4d4b4195c5..06f260e1610e 100644 --- a/mysql-test/suite/rpl/t/rpl_key_rotation.test +++ b/mysql-test/suite/rpl/t/rpl_key_rotation.test @@ -8,8 +8,8 @@ call mtr.add_suppression("\\[Error\\] Function 'keyring_file' already exists"); call mtr.add_suppression("\\[Error\\] Couldn't load plugin named 'keyring_file' with soname 'keyring_file.so'."); call mtr.add_suppression("\\[Error\\] InnoDB: Can't generate new master key, please check the keyring plugin is loaded."); call mtr.add_suppression("\\[Error\\] InnoDB: Encryption can't find master key, please check the keyring plugin is loaded."); -call mtr.add_suppression("Error 'Can't find master key from keyring, please check keyring plugin is loaded."); -call mtr.add_suppression("\\[Warning\\] Slave: Can't find master key from keyring, please check keyring plugin is loaded."); +call mtr.add_suppression("Error 'Can't find master key from keyring, please check in the server log if a keyring plugin is loaded and initialized successfully."); +call mtr.add_suppression("\\[Warning\\] Slave: Can't find master key from keyring, please check in the server log if a keyring plugin is loaded and initialized successfully."); call mtr.add_suppression("\\[Error\\] InnoDB: Can't generate new master key for tablespace encryption, please check the keyring plugin is loaded."); call mtr.add_suppression("The slave coordinator and worker threads are stopped"); diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_key_rotation.result b/rapid/plugin/group_replication/tests/mtr/r/gr_key_rotation.result index 6485c58274c7..c41c2896ac8f 100644 --- a/rapid/plugin/group_replication/tests/mtr/r/gr_key_rotation.result +++ b/rapid/plugin/group_replication/tests/mtr/r/gr_key_rotation.result @@ -10,7 +10,7 @@ call mtr.add_suppression("\\[ERROR\\] Plugin keyring_file reported: 'keyring_fil call mtr.add_suppression("\\[ERROR\\] Plugin keyring_file reported: 'File .*keyring' not found .*"); set sql_log_bin=1; ALTER INSTANCE ROTATE INNODB MASTER KEY; -ERROR HY000: Can't find master key from keyring, please check keyring plugin is loaded. +ERROR HY000: Can't find master key from keyring, please check in the server log if a keyring plugin is loaded and initialized successfully. INSTALL PLUGIN keyring_file SONAME 'keyring_file.so'; SET @@global.keyring_file_data='MYSQL_TMP_DIR/keyring_server1/keyring_server1'; SELECT PLUGIN_NAME,PLUGIN_VERSION,PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE plugin_name='keyring_file'; @@ -29,8 +29,8 @@ INSERT INTO t2 VALUEs(2,2); [connection server2] set sql_log_bin=0; call mtr.add_suppression("\\[ERROR\\] InnoDB: Encryption can't find master key, please check the keyring plugin is loaded*"); -call mtr.add_suppression(".*Can't find master key from keyring, please check keyring plugin is loaded*"); -call mtr.add_suppression(".*Slave SQL for channel 'group_replication_applier': Error 'Can't find master key from keyring, please check keyring plugin is loaded.' on query*"); +call mtr.add_suppression(".*Can't find master key from keyring, please check in the server log if a keyring plugin is loaded and initialized successfully."); +call mtr.add_suppression(".*Slave SQL for channel 'group_replication_applier': Error 'Can't find master key from keyring, please check in the server log if a keyring plugin is loaded and initialized successfully.' on query*"); call mtr.add_suppression(".*Slave SQL for channel 'group_replication_applier': ... The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state*"); call mtr.add_suppression("\\[Error\\] Plugin group_replication reported: 'The applier thread execution was aborted. Unable to process more transactions, this member will now leave the group.'"); call mtr.add_suppression("\\[Error\\] Plugin group_replication reported: 'Fatal error during execution on the Applier process of Group Replication. The server will now leave the group.'"); @@ -43,7 +43,7 @@ call mtr.add_suppression("\\[ERROR\\] Plugin keyring_file reported: 'File .*keyr call mtr.add_suppression("\\[Error\\] Plugin group_replication reported: 'Message received while the plugin is not ready, message discarded'*"); set sql_log_bin=1; ALTER INSTANCE ROTATE INNODB MASTER KEY; -ERROR HY000: Can't find master key from keyring, please check keyring plugin is loaded. +ERROR HY000: Can't find master key from keyring, please check in the server log if a keyring plugin is loaded and initialized successfully. INSTALL PLUGIN keyring_file SONAME 'keyring_file.so'; SET @@global.keyring_file_data='MYSQL_TMP_DIR/keyring_server2/keyring_server2'; SELECT PLUGIN_NAME,PLUGIN_VERSION,PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE plugin_name='keyring_file'; @@ -63,9 +63,9 @@ UNINSTALL PLUGIN keyring_file; SELECT PLUGIN_NAME,PLUGIN_VERSION,PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE plugin_name='keyring_file'; INSERT INTO t1 VALUES(7,'seventh'); CREATE TABLE t3(c1 INT PRIMARY KEY, c2 char(20)) ENCRYPTION="Y" ENGINE = InnoDB; -ERROR HY000: Can't find master key from keyring, please check keyring plugin is loaded. +ERROR HY000: Can't find master key from keyring, please check in the server log if a keyring plugin is loaded and initialized successfully. ALTER INSTANCE ROTATE INNODB MASTER KEY; -ERROR HY000: Can't find master key from keyring, please check keyring plugin is loaded. +ERROR HY000: Can't find master key from keyring, please check in the server log if a keyring plugin is loaded and initialized successfully. [connection server1] CREATE TABLE t3(c1 INT PRIMARY KEY) ENCRYPTION="Y" ENGINE = InnoDB; INSERT INTO t3 VALUES(1); diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_key_rotation.test b/rapid/plugin/group_replication/tests/mtr/t/gr_key_rotation.test index 0e89e81e0553..77542046030e 100644 --- a/rapid/plugin/group_replication/tests/mtr/t/gr_key_rotation.test +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_key_rotation.test @@ -70,8 +70,8 @@ INSERT INTO t2 VALUEs(2,2); set sql_log_bin=0; call mtr.add_suppression("\\[ERROR\\] InnoDB: Encryption can't find master key, please check the keyring plugin is loaded*"); -call mtr.add_suppression(".*Can't find master key from keyring, please check keyring plugin is loaded*"); -call mtr.add_suppression(".*Slave SQL for channel 'group_replication_applier': Error 'Can't find master key from keyring, please check keyring plugin is loaded.' on query*"); +call mtr.add_suppression(".*Can't find master key from keyring, please check in the server log if a keyring plugin is loaded and initialized successfully."); +call mtr.add_suppression(".*Slave SQL for channel 'group_replication_applier': Error 'Can't find master key from keyring, please check in the server log if a keyring plugin is loaded and initialized successfully.' on query*"); call mtr.add_suppression(".*Slave SQL for channel 'group_replication_applier': ... The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state*"); call mtr.add_suppression("\\[Error\\] Plugin group_replication reported: 'The applier thread execution was aborted. Unable to process more transactions, this member will now leave the group.'"); call mtr.add_suppression("\\[Error\\] Plugin group_replication reported: 'Fatal error during execution on the Applier process of Group Replication. The server will now leave the group.'"); diff --git a/sql/share/errmsg-utf8.txt b/sql/share/errmsg-utf8.txt index b0691119dc7e..ddee7f83a00c 100644 --- a/sql/share/errmsg-utf8.txt +++ b/sql/share/errmsg-utf8.txt @@ -7643,7 +7643,7 @@ ER_INVALID_ENCRYPTION_OPTION eng "Invalid encryption option." ER_CANNOT_FIND_KEY_IN_KEYRING - eng "Can't find master key from keyring, please check keyring plugin is loaded." + eng "Can't find master key from keyring, please check in the server log if a keyring plugin is loaded and initialized successfully." ER_CAPACITY_EXCEEDED_IN_PARSER eng "Parser bailed out for this query." From 95e117ecfb202611a2a08053f3eec750b9895595 Mon Sep 17 00:00:00 2001 From: Evgeniy Patlan Date: Wed, 6 Dec 2017 17:57:26 +0200 Subject: [PATCH 0251/1221] [BLD-902] restart fails on xenial/zesty/stretch --- scripts/mysqld_safe.sh | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/scripts/mysqld_safe.sh b/scripts/mysqld_safe.sh index be0ca790b9e4..43de18fe91a1 100644 --- a/scripts/mysqld_safe.sh +++ b/scripts/mysqld_safe.sh @@ -26,9 +26,7 @@ want_syslog=0 syslog_tag= user='@MYSQLD_USER@' pid_file= -pid_file_append= err_log= -err_log_append= syslog_tag_mysqld=mysqld syslog_tag_mysqld_safe=mysqld_safe @@ -603,17 +601,15 @@ then err_log="$err_log".err fi - err_log_append="$err_log" case "$err_log" in /* ) ;; * ) err_log="$DATADIR/$err_log" ;; esac else err_log=$DATADIR/`@HOSTNAME@`.err - err_log_append=`@HOSTNAME@`.err fi - append_arg_to_args "--log-error=$err_log_append" + append_arg_to_args "--log-error=$err_log" if [ $want_syslog -eq 1 ] then @@ -728,15 +724,13 @@ fi if test -z "$pid_file" then pid_file="$DATADIR/`@HOSTNAME@`.pid" - pid_file_append="`@HOSTNAME@`.pid" else - pid_file_append="$pid_file" case "$pid_file" in /* ) ;; * ) pid_file="$DATADIR/$pid_file" ;; esac fi -append_arg_to_args "--pid-file=$pid_file_append" +append_arg_to_args "--pid-file=$pid_file" if test -n "$mysql_unix_port" then From 14a9a68b4cbce224c0c3a89b13f7198208cc060d Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Wed, 6 Dec 2017 11:44:55 -0700 Subject: [PATCH 0252/1221] MYR-212 : fix rocksdb_block_cachecompressed_* names to be rocksdb_block_cache_compressed_* - Did just as title says, also fixed getupdatessince to get_updates_since and re-recorded rocksdb.rocksdb.test --- mysql-test/suite/rocksdb/r/rocksdb.result | 18 +++++++++--------- storage/rocksdb/ha_rocksdb.cc | 18 +++++++++--------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/mysql-test/suite/rocksdb/r/rocksdb.result b/mysql-test/suite/rocksdb/r/rocksdb.result index 23e8c6973149..cd84093eb737 100644 --- a/mysql-test/suite/rocksdb/r/rocksdb.result +++ b/mysql-test/suite/rocksdb/r/rocksdb.result @@ -1521,6 +1521,8 @@ rocksdb_block_cache_add # rocksdb_block_cache_add_failures # rocksdb_block_cache_bytes_read # rocksdb_block_cache_bytes_write # +rocksdb_block_cache_compressed_hit # +rocksdb_block_cache_compressed_miss # rocksdb_block_cache_data_add # rocksdb_block_cache_data_bytes_insert # rocksdb_block_cache_data_hit # @@ -1537,8 +1539,6 @@ rocksdb_block_cache_index_bytes_insert # rocksdb_block_cache_index_hit # rocksdb_block_cache_index_miss # rocksdb_block_cache_miss # -rocksdb_block_cachecompressed_hit # -rocksdb_block_cachecompressed_miss # rocksdb_bloom_filter_prefix_checked # rocksdb_bloom_filter_prefix_useful # rocksdb_bloom_filter_useful # @@ -1553,7 +1553,7 @@ rocksdb_flush_write_bytes # rocksdb_get_hit_l0 # rocksdb_get_hit_l1 # rocksdb_get_hit_l2_and_up # -rocksdb_getupdatessince_calls # +rocksdb_get_updates_since_calls # rocksdb_iter_bytes_read # rocksdb_memtable_hit # rocksdb_memtable_miss # @@ -1626,6 +1626,8 @@ rocksdb_block_cache_add rocksdb_block_cache_add_failures rocksdb_block_cache_bytes_read rocksdb_block_cache_bytes_write +rocksdb_block_cache_compressed_hit +rocksdb_block_cache_compressed_miss rocksdb_block_cache_data_add rocksdb_block_cache_data_bytes_insert rocksdb_block_cache_data_hit @@ -1642,8 +1644,6 @@ rocksdb_block_cache_index_bytes_insert rocksdb_block_cache_index_hit rocksdb_block_cache_index_miss rocksdb_block_cache_miss -rocksdb_block_cachecompressed_hit -rocksdb_block_cachecompressed_miss rocksdb_bloom_filter_prefix_checked rocksdb_bloom_filter_prefix_useful rocksdb_bloom_filter_useful @@ -1658,7 +1658,7 @@ rocksdb_flush_write_bytes rocksdb_get_hit_l0 rocksdb_get_hit_l1 rocksdb_get_hit_l2_and_up -rocksdb_getupdatessince_calls +rocksdb_get_updates_since_calls rocksdb_iter_bytes_read rocksdb_memtable_hit rocksdb_memtable_miss @@ -1733,6 +1733,8 @@ rocksdb_block_cache_add rocksdb_block_cache_add_failures rocksdb_block_cache_bytes_read rocksdb_block_cache_bytes_write +rocksdb_block_cache_compressed_hit +rocksdb_block_cache_compressed_miss rocksdb_block_cache_data_add rocksdb_block_cache_data_bytes_insert rocksdb_block_cache_data_hit @@ -1749,8 +1751,6 @@ rocksdb_block_cache_index_bytes_insert rocksdb_block_cache_index_hit rocksdb_block_cache_index_miss rocksdb_block_cache_miss -rocksdb_block_cachecompressed_hit -rocksdb_block_cachecompressed_miss rocksdb_bloom_filter_prefix_checked rocksdb_bloom_filter_prefix_useful rocksdb_bloom_filter_useful @@ -1765,7 +1765,7 @@ rocksdb_flush_write_bytes rocksdb_get_hit_l0 rocksdb_get_hit_l1 rocksdb_get_hit_l2_and_up -rocksdb_getupdatessince_calls +rocksdb_get_updates_since_calls rocksdb_iter_bytes_read rocksdb_memtable_hit rocksdb_memtable_miss diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index 90698a3517ac..eef89d5b8c2c 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -10897,9 +10897,9 @@ struct rocksdb_status_counters_t { uint64_t bloom_filter_prefix_checked; uint64_t bloom_filter_prefix_useful; uint64_t number_reseeks_iteration; - uint64_t getupdatessince_calls; - uint64_t block_cachecompressed_miss; - uint64_t block_cachecompressed_hit; + uint64_t get_updates_since_calls; + uint64_t block_cache_compressed_miss; + uint64_t block_cache_compressed_hit; uint64_t wal_synced; uint64_t wal_bytes; uint64_t write_self; @@ -10972,9 +10972,9 @@ DEF_SHOW_FUNC(number_merge_failures, NUMBER_MERGE_FAILURES) DEF_SHOW_FUNC(bloom_filter_prefix_checked, BLOOM_FILTER_PREFIX_CHECKED) DEF_SHOW_FUNC(bloom_filter_prefix_useful, BLOOM_FILTER_PREFIX_USEFUL) DEF_SHOW_FUNC(number_reseeks_iteration, NUMBER_OF_RESEEKS_IN_ITERATION) -DEF_SHOW_FUNC(getupdatessince_calls, GET_UPDATES_SINCE_CALLS) -DEF_SHOW_FUNC(block_cachecompressed_miss, BLOCK_CACHE_COMPRESSED_MISS) -DEF_SHOW_FUNC(block_cachecompressed_hit, BLOCK_CACHE_COMPRESSED_HIT) +DEF_SHOW_FUNC(get_updates_since_calls, GET_UPDATES_SINCE_CALLS) +DEF_SHOW_FUNC(block_cache_compressed_miss, BLOCK_CACHE_COMPRESSED_MISS) +DEF_SHOW_FUNC(block_cache_compressed_hit, BLOCK_CACHE_COMPRESSED_HIT) DEF_SHOW_FUNC(wal_synced, WAL_FILE_SYNCED) DEF_SHOW_FUNC(wal_bytes, WAL_FILE_BYTES) DEF_SHOW_FUNC(write_self, WRITE_DONE_BY_SELF) @@ -11201,9 +11201,9 @@ static SHOW_VAR rocksdb_status_vars[] = { DEF_STATUS_VAR(bloom_filter_prefix_checked), DEF_STATUS_VAR(bloom_filter_prefix_useful), DEF_STATUS_VAR(number_reseeks_iteration), - DEF_STATUS_VAR(getupdatessince_calls), - DEF_STATUS_VAR(block_cachecompressed_miss), - DEF_STATUS_VAR(block_cachecompressed_hit), + DEF_STATUS_VAR(get_updates_since_calls), + DEF_STATUS_VAR(block_cache_compressed_miss), + DEF_STATUS_VAR(block_cache_compressed_hit), DEF_STATUS_VAR(wal_synced), DEF_STATUS_VAR(wal_bytes), DEF_STATUS_VAR(write_self), From c70305ee867c6c4b6219c50dd59043c941f79472 Mon Sep 17 00:00:00 2001 From: Terje Rosten Date: Thu, 7 Dec 2017 11:56:47 +0100 Subject: [PATCH 0253/1221] Bug#27232163 RPM-OEL.SPEC.IN INCORRECTLY MARKS OPENLDAP-DEVEL AS COMMERCIAL-ONLY DEPENDENCY OpenLDAP development package is required to build community plugin authentication_ldap_sasl_client. --- packaging/rpm-fedora/mysql.spec.in | 1 + packaging/rpm-oel/mysql.spec.in | 2 -- packaging/rpm-sles/mysql.spec.in | 2 -- 3 files changed, 1 insertion(+), 4 deletions(-) diff --git a/packaging/rpm-fedora/mysql.spec.in b/packaging/rpm-fedora/mysql.spec.in index 0631dafbfe4a..26a212cc5530 100644 --- a/packaging/rpm-fedora/mysql.spec.in +++ b/packaging/rpm-fedora/mysql.spec.in @@ -84,6 +84,7 @@ BuildRequires: mecab-devel BuildRequires: multilib-rpm-config BuildRequires: ncurses-devel BuildRequires: numactl-devel +BuildRequires: openldap-devel BuildRequires: openssl-devel BuildRequires: zlib-devel BuildRequires: systemd diff --git a/packaging/rpm-oel/mysql.spec.in b/packaging/rpm-oel/mysql.spec.in index 444f76c6bc03..9d6aa69c3779 100644 --- a/packaging/rpm-oel/mysql.spec.in +++ b/packaging/rpm-oel/mysql.spec.in @@ -142,9 +142,7 @@ BuildRequires: systemd BuildRequires: pkgconfig(systemd) %endif BuildRequires: cyrus-sasl-devel -%if 0%{?commercial} BuildRequires: openldap-devel -%endif BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX) %if 0%{?rhel} > 6 diff --git a/packaging/rpm-sles/mysql.spec.in b/packaging/rpm-sles/mysql.spec.in index 06cfb6a5ad8c..abe6d6575713 100644 --- a/packaging/rpm-sles/mysql.spec.in +++ b/packaging/rpm-sles/mysql.spec.in @@ -108,9 +108,7 @@ BuildRequires: pkgconfig(systemd) BuildRequires: systemd-rpm-macros %endif BuildRequires: cyrus-sasl-devel -%if 0%{?commercial} BuildRequires: openldap2-devel -%endif BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX) %if 0%{?rhel} > 6 From 3f4564387cc1229c5321d7f55b89c6e52f9b6c38 Mon Sep 17 00:00:00 2001 From: Georgi Kodinov Date: Thu, 7 Dec 2017 11:15:06 +0100 Subject: [PATCH 0254/1221] Addendum for backport of bug #26946491 This is for the 5.7 backport of the bug. Added a mising mutex release. --- sql/sql_plugin.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/sql/sql_plugin.cc b/sql/sql_plugin.cc index 877e4d81fac5..a1bfcd8c5547 100644 --- a/sql/sql_plugin.cc +++ b/sql/sql_plugin.cc @@ -2259,6 +2259,7 @@ static bool mysql_install_plugin(THD *thd, const LEX_STRING *name, tmp->state= PLUGIN_IS_DELETED; reap_needed= true; reap_plugins(); + mysql_mutex_unlock(&LOCK_plugin); err: trans_rollback_stmt(thd); close_mysql_tables(thd); From 410b42fcbde359d611fa305c7634906313548e72 Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Thu, 7 Dec 2017 11:03:03 +0100 Subject: [PATCH 0255/1221] lp1736905: Fixing assertions modified during the artful compilation fix During the artful compilation fixes, an assertion checking that some pointers aren't equal to an empty string were corrected in sql_acl.cc: these asserts now checked that the pointers aren't NULL pointers and that they do not point to an empty string. This more restrictive address caused assertation violations where it shouldn't be. This commit changes them back to the more relaxed behaviors of the original code: it only checks that the pointers aren't NULL pointers. Another assertion in log_event.cc had a similar issue, where the changed assertion didn't generate any warnings, but resulted in assertion errors. Here the original assert always evaluated to true, and as such, had no function. Additional brackets were required to resolve the evaluation order, butt he original solution resulted in assertion failures. This improved version correctly checks the original intention of the assertion. --- sql/log_event.cc | 13 ++----------- sql/sql_acl.cc | 8 ++++---- 2 files changed, 6 insertions(+), 15 deletions(-) diff --git a/sql/log_event.cc b/sql/log_event.cc index fa56154c3f22..6d7e67028f4b 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -7838,18 +7838,9 @@ User_var_log_event(const char* buf, uint event_len, uint bytes_read= ((val + val_len) - start); #ifndef DBUG_OFF bool old_pre_checksum_fd= description_event->is_version_before_checksum(); + const int checksum_length = (old_pre_checksum_fd || description_event->checksum_alg == BINLOG_CHECKSUM_ALG_OFF) ? 0 : BINLOG_CHECKSUM_LEN; #endif - DBUG_ASSERT((bytes_read == (data_written - - ((old_pre_checksum_fd || - (description_event->checksum_alg == - BINLOG_CHECKSUM_ALG_OFF)) ? - 0 : BINLOG_CHECKSUM_LEN))) - || - ((bytes_read == (data_written -1 - - (old_pre_checksum_fd || - (description_event->checksum_alg == - BINLOG_CHECKSUM_ALG_OFF)) ? - 0 : BINLOG_CHECKSUM_LEN)))); + DBUG_ASSERT(bytes_read == data_written - checksum_length || bytes_read == data_written - checksum_length - 1); if ((data_written - bytes_read) > 0) { flags= (uint) *(buf + UV_VAL_IS_NULL + UV_VAL_TYPE_SIZE + diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc index f015d35751e8..8173a0b1ef8d 100644 --- a/sql/sql_acl.cc +++ b/sql/sql_acl.cc @@ -2987,7 +2987,7 @@ bool change_password(THD *thd, const char *host, const char *user, mysql_mutex_assert_owner(&acl_cache->lock); table->use_all_columns(); - DBUG_ASSERT(host != NULL && host[0] != '\0'); + DBUG_ASSERT(host != NULL); table->field[MYSQL_USER_FIELD_HOST]->store(host, strlen(host), system_charset_info); table->field[MYSQL_USER_FIELD_USER]->store(user, strlen(user), @@ -3424,7 +3424,7 @@ update_user_table(THD *thd, TABLE *table, if (!is_user_table_positioned) { table->use_all_columns(); - DBUG_ASSERT(host != NULL && host[0] != '\0'); + DBUG_ASSERT(host != NULL); table->field[MYSQL_USER_FIELD_HOST]->store(host, (uint) strlen(host), system_charset_info); table->field[MYSQL_USER_FIELD_USER]->store(user, (uint) strlen(user), @@ -3573,7 +3573,7 @@ static int replace_user_table(THD *thd, TABLE *table, LEX_USER *combo, } table->use_all_columns(); - DBUG_ASSERT(combo->host.str != NULL && combo->host.str[0] != '\0'); + DBUG_ASSERT(combo->host.str != NULL); table->field[MYSQL_USER_FIELD_HOST]->store(combo->host.str,combo->host.length, system_charset_info); table->field[MYSQL_USER_FIELD_USER]->store(combo->user.str,combo->user.length, @@ -3664,7 +3664,7 @@ static int replace_user_table(THD *thd, TABLE *table, LEX_USER *combo, old_row_exists = 0; restore_record(table,s->default_values); - DBUG_ASSERT(combo->host.str != NULL && combo->host.str[0] != '\0'); + DBUG_ASSERT(combo->host.str != NULL); table->field[MYSQL_USER_FIELD_HOST]->store(combo->host.str,combo->host.length, system_charset_info); table->field[MYSQL_USER_FIELD_USER]->store(combo->user.str,combo->user.length, From 00d8777434d0ef641dbcec84f5af15934c5160be Mon Sep 17 00:00:00 2001 From: Srikanth B R Date: Fri, 8 Dec 2017 08:04:26 +0530 Subject: [PATCH 0256/1221] Bug#18702857 RPL.RPL_GRANT FAILS WITH WARNINGS/ERRORS IN SERVER LOG FILE Added missing error log suppressions. Reviewed-by: Deepthi E S RB: 18129 --- mysql-test/suite/rpl/r/rpl_grant.result | 3 +++ mysql-test/suite/rpl/t/rpl_grant.test | 6 +++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/mysql-test/suite/rpl/r/rpl_grant.result b/mysql-test/suite/rpl/r/rpl_grant.result index 2fc7dc8aa63a..75ca9d98d65c 100644 --- a/mysql-test/suite/rpl/r/rpl_grant.result +++ b/mysql-test/suite/rpl/r/rpl_grant.result @@ -54,6 +54,7 @@ CREATE TABLE t1 ( c1 INT, c2 INT, c3 INT ); ########## CREATE USER 'b54866_user'@'localhost'; GRANT ALL ON b54866.* TO 'b54866_user'@'localhost'; +call mtr.add_suppression("\\[ERROR\\] REVOKE/GRANT failed while granting/revoking privileges in databases"); REVOKE ALL ON b54866.* FROM 'b54866_user'@'localhost', 'b54866_fake_user'; ERROR 42000: There is no such grant defined for user 'b54866_fake_user' on host '%' call mtr.add_suppression("Slave SQL.*The incident LOST_EVENTS occured on the master.*"); @@ -91,6 +92,7 @@ GRANT USAGE ON *.* TO 'b54866_user'@'localhost' GRANT ALL PRIVILEGES ON `b54866`.* TO 'b54866_user'@'localhost' GRANT CREATE, DROP, ALTER ON `b54866`.`t1` TO 'b54866_user'@'localhost' ************************************************************* +call mtr.add_suppression("\\[ERROR\\] REVOKE/GRANT failed while storing table level and column level grants in the privilege tables."); REVOKE ALTER ON TABLE b54866.t1 FROM 'b54866_user'@'localhost', 'b54866_fake_user'; ERROR 42000: There is no such grant defined for user 'b54866_fake_user' on host '%' ****** Checking grants on the master for user: b54866_user ****** @@ -113,6 +115,7 @@ GRANT CREATE, DROP, ALTER ON `b54866`.`t1` TO 'b54866_user'@'localhost' ########## ########## setup (PART II) ########## +call mtr.add_suppression("\\[ERROR\\] REVOKE/GRANT failed while storing routine level grants in the privilege tables"); CREATE PROCEDURE b54866_p() BEGIN SELECT 1; END| CREATE FUNCTION b54866_f() RETURNS INT BEGIN RETURN 1; END| GRANT EXECUTE ON PROCEDURE b54866.b54866_p TO 'b54866_user'@'localhost'; diff --git a/mysql-test/suite/rpl/t/rpl_grant.test b/mysql-test/suite/rpl/t/rpl_grant.test index 40d222ceeffe..c304bba27676 100644 --- a/mysql-test/suite/rpl/t/rpl_grant.test +++ b/mysql-test/suite/rpl/t/rpl_grant.test @@ -66,6 +66,8 @@ CREATE TABLE t1 ( c1 INT, c2 INT, c3 INT ); ## create user, grant and revoke (the last command fails partially) --eval CREATE USER '$dbuser'@'localhost' --eval GRANT ALL ON $dbname.* TO '$dbuser'@'localhost' + +call mtr.add_suppression("\\[ERROR\\] REVOKE/GRANT failed while granting/revoking privileges in databases"); --error ER_NONEXISTING_GRANT --eval REVOKE ALL ON $dbname.* FROM '$dbuser'@'localhost', 'b54866_fake_user' @@ -107,6 +109,8 @@ SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; ## revoke should now fail and log a incident event --connection master + +call mtr.add_suppression("\\[ERROR\\] REVOKE/GRANT failed while storing table level and column level grants in the privilege tables."); --error ER_NONEXISTING_GRANT --eval REVOKE ALTER ON TABLE $dbname.t1 FROM '$dbuser'@'localhost', 'b54866_fake_user' @@ -134,6 +138,7 @@ SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; --echo ########## -- connection master +call mtr.add_suppression("\\[ERROR\\] REVOKE/GRANT failed while storing routine level grants in the privilege tables"); DELIMITER |; CREATE PROCEDURE b54866_p() BEGIN SELECT 1; END| CREATE FUNCTION b54866_f() RETURNS INT BEGIN RETURN 1; END| @@ -156,7 +161,6 @@ DELIMITER ;| --echo ########## -- connection master - -- echo #### PROCEDURE ASSERTION --error ER_NONEXISTING_GRANT --eval REVOKE EXECUTE ON PROCEDURE $dbname.b54866_p FROM '$dbuser'@'localhost', 'b54866_fake_user' From a6a67f116194c63258d5df12210c3fdd7e9dc9ce Mon Sep 17 00:00:00 2001 From: Srikanth B R Date: Fri, 8 Dec 2017 08:27:15 +0530 Subject: [PATCH 0257/1221] Bug#26709230 MTR UNABLE TO DETECT ERRORS IN ERROR LOG GENERATED BY TEST SCRIPT Issue: ----- MTR scans error logs of all servers it spawns one by one on test completion to check if their error logs contain un-suppressed warnings or errors using using the check_warnings setup. The flag set when there is a check_warnings failure is being overwritten if subsequent iterations of check_warnings on other servers are successful. This masks few failures as MTR reports the test run passed. Fix: --- - MTR altered to report a check_warnings() failure as soon as it finds one i.e., it does not proceed to scan the error log of the next server. - Some rpl tests are fixed with updated/added suppressions Reviewed-by: Pavan Naik Reviewed-by: Parveez Baig RB: 18033 --- mysql-test/mysql-test-run.pl | 2 +- mysql-test/suite/rpl/r/rpl_master_errors.result | 1 + mysql-test/suite/rpl/r/rpl_trx_boundary_parser_warning.result | 1 + mysql-test/suite/rpl/t/rpl_master_errors.test | 1 + mysql-test/suite/rpl/t/rpl_trx_boundary_parser_warning.test | 3 ++- 5 files changed, 6 insertions(+), 2 deletions(-) diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index 9b49e29381a6..c985e00ed7e4 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -5380,7 +5380,7 @@ ($) return $result; } # Wait for next process to exit - next; + next if not $result; } else { diff --git a/mysql-test/suite/rpl/r/rpl_master_errors.result b/mysql-test/suite/rpl/r/rpl_master_errors.result index 3b784c005fdb..91be5fdec913 100644 --- a/mysql-test/suite/rpl/r/rpl_master_errors.result +++ b/mysql-test/suite/rpl/r/rpl_master_errors.result @@ -40,6 +40,7 @@ FLUSH BINARY LOGS; include/stop_slave.inc SET GLOBAL debug= 'd,request_master_log_pos_3'; START SLAVE IO_THREAD; +call mtr.add_suppression(".* Got fatal error 1236 from master when reading data from binary log"); include/wait_for_slave_io_error.inc [errno=1236] SET GLOBAL debug= '$slave_debug'; # diff --git a/mysql-test/suite/rpl/r/rpl_trx_boundary_parser_warning.result b/mysql-test/suite/rpl/r/rpl_trx_boundary_parser_warning.result index 3a826fddc3a7..85548319861d 100644 --- a/mysql-test/suite/rpl/r/rpl_trx_boundary_parser_warning.result +++ b/mysql-test/suite/rpl/r/rpl_trx_boundary_parser_warning.result @@ -1,3 +1,4 @@ +call mtr.add_suppression("Statement is unsafe because it is being used inside a XA transaction"); include/master-slave.inc Warnings: Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. diff --git a/mysql-test/suite/rpl/t/rpl_master_errors.test b/mysql-test/suite/rpl/t/rpl_master_errors.test index 9f85fa19d14a..3cc3fef5d508 100644 --- a/mysql-test/suite/rpl/t/rpl_master_errors.test +++ b/mysql-test/suite/rpl/t/rpl_master_errors.test @@ -88,6 +88,7 @@ SET GLOBAL debug= 'd,request_master_log_pos_3'; START SLAVE IO_THREAD; --let $slave_io_errno= 1236 +call mtr.add_suppression(".* Got fatal error 1236 from master when reading data from binary log"); --source include/wait_for_slave_io_error.inc SET GLOBAL debug= '$slave_debug'; diff --git a/mysql-test/suite/rpl/t/rpl_trx_boundary_parser_warning.test b/mysql-test/suite/rpl/t/rpl_trx_boundary_parser_warning.test index 3c114f0d8a4f..80767c0036f7 100644 --- a/mysql-test/suite/rpl/t/rpl_trx_boundary_parser_warning.test +++ b/mysql-test/suite/rpl/t/rpl_trx_boundary_parser_warning.test @@ -17,6 +17,7 @@ --source include/no_valgrind_without_big.inc # This test uses debug sync to stop the IO thread in the middle of a transaction --source include/have_debug_sync.inc +call mtr.add_suppression("Statement is unsafe because it is being used inside a XA transaction"); --source include/have_innodb.inc --source include/have_myisam.inc @@ -25,7 +26,7 @@ --source include/master-slave.inc --source include/rpl_connection_slave.inc -# Error messages suppression +# Error messages suppression on slave call mtr.add_suppression("An unexpected event sequence was detected by the IO thread"); call mtr.add_suppression("GTID_LOG_EVENT .* is not expected in an event stream"); call mtr.add_suppression("QUERY.* is not expected in an event stream"); From 946f7c8d9bd74bd00ceee723bdc68a4b506e2148 Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Fri, 8 Dec 2017 09:32:49 +0100 Subject: [PATCH 0258/1221] PS-260: The mysqld release build crashed when loading the world database. btr_cur_optimistic_insert called btr_cur_ins_lock_and_undo which called trx_undo_report_row_operation Because these calls had no conditions on the thr variable, and trx_undo_report_row_operation marked thr as non null, the optimizer assumed it to be non null in other conditions too. Based on this, the compiler optimized out some thr && conditions, resulting in null pointer crashes. trx_undo_report_row_operation can handle null thr values with the correct flags, and this attribute was already removed in the 5.7 branch. --- storage/innobase/include/trx0rec.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage/innobase/include/trx0rec.h b/storage/innobase/include/trx0rec.h index 359937e35839..c7820480fe0f 100644 --- a/storage/innobase/include/trx0rec.h +++ b/storage/innobase/include/trx0rec.h @@ -233,7 +233,7 @@ trx_undo_report_row_operation( inserted undo log record, 0 if BTR_NO_UNDO_LOG flag was specified */ - MY_ATTRIBUTE((nonnull(3,4,10), warn_unused_result)); + MY_ATTRIBUTE((nonnull(4,10), warn_unused_result)); /******************************************************************//** Copies an undo record to heap. This function can be called if we know that the undo log record exists. From e99add9b084e81d93ab58345945f859b9db626cb Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Fri, 8 Dec 2017 09:32:49 +0100 Subject: [PATCH 0259/1221] PS-260: The mysqld release build crashed when loading the world database. btr_cur_optimistic_insert called btr_cur_ins_lock_and_undo which called trx_undo_report_row_operation Because these calls had no conditions on the thr variable, and trx_undo_report_row_operation marked thr as non null, the optimizer assumed it to be non null in other conditions too. Based on this, the compiler optimized out some thr && conditions, resulting in null pointer crashes. trx_undo_report_row_operation can handle null thr values with the correct flags, and this attribute was already removed in the 5.7 branch. (cherry picked from commit 946f7c8d9bd74bd00ceee723bdc68a4b506e2148) --- storage/innobase/include/trx0rec.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage/innobase/include/trx0rec.h b/storage/innobase/include/trx0rec.h index 359937e35839..c7820480fe0f 100644 --- a/storage/innobase/include/trx0rec.h +++ b/storage/innobase/include/trx0rec.h @@ -233,7 +233,7 @@ trx_undo_report_row_operation( inserted undo log record, 0 if BTR_NO_UNDO_LOG flag was specified */ - MY_ATTRIBUTE((nonnull(3,4,10), warn_unused_result)); + MY_ATTRIBUTE((nonnull(4,10), warn_unused_result)); /******************************************************************//** Copies an undo record to heap. This function can be called if we know that the undo log record exists. From dc97471bd40b3ef3d29745ac0f484ad57fdea4a3 Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Thu, 7 Dec 2017 11:03:03 +0100 Subject: [PATCH 0260/1221] lp1736905: Fixing assertions modified during the artful compilation fix During the artful compilation fixes, an assertion checking that some pointers aren't equal to an empty string were corrected in sql_acl.cc: these asserts now checked that the pointers aren't NULL pointers and that they do not point to an empty string. This more restrictive address caused assertation violations where it shouldn't be. This commit changes them back to the more relaxed behaviors of the original code: it only checks that the pointers aren't NULL pointers. Another assertion in log_event.cc had a similar issue, where the changed assertion didn't generate any warnings, but resulted in assertion errors. Here the original assert always evaluated to true, and as such, had no function. Additional brackets were required to resolve the evaluation order, butt he original solution resulted in assertion failures. This improved version correctly checks the original intention of the assertion. (cherry picked from commit 410b42fcbde359d611fa305c7634906313548e72) --- sql/log_event.cc | 13 ++----------- sql/sql_acl.cc | 8 ++++---- 2 files changed, 6 insertions(+), 15 deletions(-) diff --git a/sql/log_event.cc b/sql/log_event.cc index fa56154c3f22..6d7e67028f4b 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -7838,18 +7838,9 @@ User_var_log_event(const char* buf, uint event_len, uint bytes_read= ((val + val_len) - start); #ifndef DBUG_OFF bool old_pre_checksum_fd= description_event->is_version_before_checksum(); + const int checksum_length = (old_pre_checksum_fd || description_event->checksum_alg == BINLOG_CHECKSUM_ALG_OFF) ? 0 : BINLOG_CHECKSUM_LEN; #endif - DBUG_ASSERT((bytes_read == (data_written - - ((old_pre_checksum_fd || - (description_event->checksum_alg == - BINLOG_CHECKSUM_ALG_OFF)) ? - 0 : BINLOG_CHECKSUM_LEN))) - || - ((bytes_read == (data_written -1 - - (old_pre_checksum_fd || - (description_event->checksum_alg == - BINLOG_CHECKSUM_ALG_OFF)) ? - 0 : BINLOG_CHECKSUM_LEN)))); + DBUG_ASSERT(bytes_read == data_written - checksum_length || bytes_read == data_written - checksum_length - 1); if ((data_written - bytes_read) > 0) { flags= (uint) *(buf + UV_VAL_IS_NULL + UV_VAL_TYPE_SIZE + diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc index f015d35751e8..8173a0b1ef8d 100644 --- a/sql/sql_acl.cc +++ b/sql/sql_acl.cc @@ -2987,7 +2987,7 @@ bool change_password(THD *thd, const char *host, const char *user, mysql_mutex_assert_owner(&acl_cache->lock); table->use_all_columns(); - DBUG_ASSERT(host != NULL && host[0] != '\0'); + DBUG_ASSERT(host != NULL); table->field[MYSQL_USER_FIELD_HOST]->store(host, strlen(host), system_charset_info); table->field[MYSQL_USER_FIELD_USER]->store(user, strlen(user), @@ -3424,7 +3424,7 @@ update_user_table(THD *thd, TABLE *table, if (!is_user_table_positioned) { table->use_all_columns(); - DBUG_ASSERT(host != NULL && host[0] != '\0'); + DBUG_ASSERT(host != NULL); table->field[MYSQL_USER_FIELD_HOST]->store(host, (uint) strlen(host), system_charset_info); table->field[MYSQL_USER_FIELD_USER]->store(user, (uint) strlen(user), @@ -3573,7 +3573,7 @@ static int replace_user_table(THD *thd, TABLE *table, LEX_USER *combo, } table->use_all_columns(); - DBUG_ASSERT(combo->host.str != NULL && combo->host.str[0] != '\0'); + DBUG_ASSERT(combo->host.str != NULL); table->field[MYSQL_USER_FIELD_HOST]->store(combo->host.str,combo->host.length, system_charset_info); table->field[MYSQL_USER_FIELD_USER]->store(combo->user.str,combo->user.length, @@ -3664,7 +3664,7 @@ static int replace_user_table(THD *thd, TABLE *table, LEX_USER *combo, old_row_exists = 0; restore_record(table,s->default_values); - DBUG_ASSERT(combo->host.str != NULL && combo->host.str[0] != '\0'); + DBUG_ASSERT(combo->host.str != NULL); table->field[MYSQL_USER_FIELD_HOST]->store(combo->host.str,combo->host.length, system_charset_info); table->field[MYSQL_USER_FIELD_USER]->store(combo->user.str,combo->user.length, From 1219727a36e8a1ab7237d563c59f98595d50a33b Mon Sep 17 00:00:00 2001 From: hrvojem Date: Thu, 7 Dec 2017 23:17:42 +0100 Subject: [PATCH 0261/1221] Release notes for Percona Server 5.6.38-83.0 (5.6) Fixed broken upstream-bug-fixes table Fixed DOC-428 - Document PSI TokuDB --- doc/source/conf.py | 2 +- .../innodb_fragmentation_count.rst | 77 +++++++++++ doc/source/index.rst | 3 + doc/source/performance/aio_page_requests.rst | 46 +++++++ .../Percona-Server-5.6.38-83.0.rst | 69 ++++++++++ .../release-notes/release-notes_index.rst | 1 + .../tokudb/tokudb_performance_schema.rst | 122 ++++++++++++++++ doc/source/upstream-bug-fixes.rst | 130 ++++++++++-------- 8 files changed, 390 insertions(+), 60 deletions(-) create mode 100644 doc/source/diagnostics/innodb_fragmentation_count.rst create mode 100644 doc/source/performance/aio_page_requests.rst create mode 100644 doc/source/release-notes/Percona-Server-5.6.38-83.0.rst create mode 100644 doc/source/tokudb/tokudb_performance_schema.rst diff --git a/doc/source/conf.py b/doc/source/conf.py index 331e9731db1d..1561bdf11f3a 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -54,7 +54,7 @@ # The short X.Y version. version = '5.6' # The full version, including alpha/beta/rc tags. -release = '5.6.36-82.1' +release = '5.6.38-83.0' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/doc/source/diagnostics/innodb_fragmentation_count.rst b/doc/source/diagnostics/innodb_fragmentation_count.rst new file mode 100644 index 000000000000..0e566ac197eb --- /dev/null +++ b/doc/source/diagnostics/innodb_fragmentation_count.rst @@ -0,0 +1,77 @@ +.. _innodb_fragmentation_count: + +==================================== +|InnoDB| Page Fragmentation Counters +==================================== + +|InnoDB| page fragmentation is caused by random insertion or deletion from a +secondary index. This means that the physical ordering of the index pages on +the disk is not same as the index ordering of the records on the pages. As a +consequence this means that some pages take a lot more space and that queries +which require a full table scan can take a long time to finish. + +To provide more information about the |InnoDB| page fragmentation |Percona +Server| now provides the following counters as status variables: +:variable:`Innodb_scan_pages_contiguous`, +:variable:`Innodb_scan_pages_disjointed`, :variable:`Innodb_scan_data_size`, +:variable:`Innodb_scan_deleted_recs_size`, and +:variable:`Innodb_scan_pages_total_seek_distance`. + + +Version Specific Information +============================ + + * :rn:`5.6.38-83.0`: + Feature Implemented + +Status Variables +================ + +.. variable:: Innodb_scan_pages_contiguous + + :vartype: Numeric + :scope: Session + +This variable shows the number of contiguous page reads inside a query. + +.. variable:: Innodb_scan_pages_disjointed + + :vartype: Numeric + :scope: Session + +This variable shows the number of disjointed page reads inside a query. + +.. variable:: Innodb_scan_data_size + + :vartype: Numeric + :scope: Session + +This variable shows the size of data in all |InnoDB| pages read inside a +query (in bytes) - calculated as the sum of ``page_get_data_size(page)`` for +every page scanned. + +.. variable:: Innodb_scan_deleted_recs_size + + :vartype: Numeric + :scope: Session + +This variable shows the size of deleted records (marked as ``deleted`` in +``page_delete_rec_list_end()``) in all |InnoDB| pages read inside a query +(in bytes) - calculated as the sum of ``page_header_get_field(page, +PAGE_GARBAGE)`` for every page scanned. + +.. variable:: Innodb_scan_pages_total_seek_distance + + :vartype: Numeric + :scope: Session + +This variable shows the total seek distance when moving between pages. + +Related Reading +=============== + + * `InnoDB: look after fragmentation + `_ + + * `Defragmenting a Table + `_ diff --git a/doc/source/index.rst b/doc/source/index.rst index 0399c63d2da9..3c8b40a08cdc 100644 --- a/doc/source/index.rst +++ b/doc/source/index.rst @@ -68,6 +68,7 @@ Performance Improvements :maxdepth: 1 :glob: + performance/aio_page_requests performance/atomic_fio performance/query_cache_enhance performance/innodb_numa_support @@ -156,6 +157,7 @@ Diagnostics Improvements diagnostics/thread_based_profiling diagnostics/scalability_metrics_plugin diagnostics/response_time_distribution + diagnostics/innodb_fragmentation_count TokuDB ====== @@ -173,6 +175,7 @@ TokuDB tokudb/tokudb_variables tokudb/tokudb_status_variables tokudb/tokudb_troubleshooting + tokudb/tokudb_performance_schema tokudb/toku_backup tokudb/tokudb_faq tokudb/removing_tokudb diff --git a/doc/source/performance/aio_page_requests.rst b/doc/source/performance/aio_page_requests.rst new file mode 100644 index 000000000000..926017a3b0e8 --- /dev/null +++ b/doc/source/performance/aio_page_requests.rst @@ -0,0 +1,46 @@ +.. _aio_page_requests: + +======================================= +Multiple page asynchronous I/O requests +======================================= + +I/O unit size in |InnoDB| is only one page, even if doing read ahead. 16KB +I/O unit size is too small for sequential reads, and much less efficient than +larger I/O unit size. + +|InnoDB| uses Linux asynchronous I/O (``aio``) by default. By submitting multiple +consecutive 16KB read requests at once, Linux internally can merge requests and +reads can be done more efficiently. + +`On a HDD RAID 1+0 environment +`_, +more than 1000MB/s disk reads can be achieved by submitting 64 consecutive pages +requests at once, while only +160MB/s disk reads is shown by submitting single page request. + +With this feature |InnoDB| submits multiple page I/O requests. + +Version Specific Information +============================ + + * :rn:`5.6.38-83.0`- Feature ported from the *Facebook MySQL* patch. + +Status Variables +================ + +.. variable:: Innodb_buffered_aio_submitted + + :version 5.6.38-83.0: Implemented + :vartype: Numeric + :scope: Global + +This variable shows the number of submitted buffered asynchronous I/O requests. + +Other Reading +============= + + * `Making full table scan 10x faster in InnoDB + `_ + + * `Bug #68659 InnoDB Linux native aio should submit more i/o requests at once + `_ diff --git a/doc/source/release-notes/Percona-Server-5.6.38-83.0.rst b/doc/source/release-notes/Percona-Server-5.6.38-83.0.rst new file mode 100644 index 000000000000..4648b12de21e --- /dev/null +++ b/doc/source/release-notes/Percona-Server-5.6.38-83.0.rst @@ -0,0 +1,69 @@ +.. rn:: 5.6.38-83.0 + +============================ +|Percona Server| 5.6.38-83.0 +============================ + +Percona is glad to announce the release of |Percona Server| 5.6.38-83.0 on +December 8, 2017 (Downloads are available `here +`_ +and from the :doc:`Percona Software Repositories `). + +Based on `MySQL 5.6.38 +`_, including +all the bug fixes in it, |Percona Server| 5.6.38-83.0 is the current GA release +in the |Percona Server| 5.6 series. All of |Percona|'s software is open-source +and free, all the details of the release can be found in the `5.6.38-83.0 +milestone at Launchpad +`_. + +New Features +============ + + |Percona Server| has implemented :ref:`innodb_fragmentation_count`. + + |Percona Server| has implemented support for :ref:`aio_page_requests`. + This feature was ported from a *Facebook MySQL* patch. + + |Percona Server| has implemented |TokuDB| :ref:`integration + ` with ``PERFORMANCE_SCHEMA``. + + |Percona Server| packages are now available for *Ubuntu 17.10 (Artful)*. + +Bugs Fixed +========== + + Dynamic row format feature to support ``BLOB/VARCHAR`` in ``MEMORY`` tables + requires all the key columns to come before any ``BLOB`` columns. This + requirement however was not enforced, allowing creating MEMORY tables in + unsupported column configurations, which then crashed or lose data in usage. + Bug fixed :bug:`1731483`. + + If an I/O syscall returned an error during the server shutdown with + :ref:`threadpool` enabled, a mutex could be left locked. Bug fixed + :bug:`1702330` (*Daniel Black*). + + After fixing bug :bug:`1668602`, bug :bug:`1539504`, and bug :bug:`1313901`, + ``CREATE/DROP TEMPORARY TABLE`` statements were forbidden incorrectly in + transactional contexts, including function and trigger calls, even when + they required no binary logging at all. Bug fixed :bug:`1711781`. + + Running ``ANALYZE TABLE`` while a long-running query is accessing the same + table in parallel could lead to a situation where new queries on the same + table are blocked in a ``Waiting for table flush`` state. + Fixed by stopping ``ANALYZE TABLE`` flushing affected |InnoDB| and |TokuDB| + tables from the table definition cache. Bug fixed :bug:`1704195` + (upstream :mysqlbug:`87065`). + + MyRocks additions to the 5.6 *mysqldump* output have `been removed + `_. + + ``CREATE TABLE ... LIKE ...`` did not use source ``row_format`` on target + |TokuDB| table. Bug fixed :tdbbug:`76`. + + |TokuDB| would encode already encoded database name for a directory name. Bug + fixed :tdbbug:`74`. + +Other bugs fixed: :bug:`1670902` (upstream :mysqlbug:`85352`), :bug:`1670902` +(upstream :mysqlbug:`85352`), :bug:`1729241`, :tdbbug:`83`, :tdbbug:`80`, and +:tdbbug:`75`. diff --git a/doc/source/release-notes/release-notes_index.rst b/doc/source/release-notes/release-notes_index.rst index b02acee4e324..4248d9020251 100644 --- a/doc/source/release-notes/release-notes_index.rst +++ b/doc/source/release-notes/release-notes_index.rst @@ -6,6 +6,7 @@ :maxdepth: 1 :glob: + Percona-Server-5.6.38-83.0 Percona-Server-5.6.36-82.1 Percona-Server-5.6.36-82.0 Percona-Server-5.6.35-81.0 diff --git a/doc/source/tokudb/tokudb_performance_schema.rst b/doc/source/tokudb/tokudb_performance_schema.rst new file mode 100644 index 000000000000..146f2779d14d --- /dev/null +++ b/doc/source/tokudb/tokudb_performance_schema.rst @@ -0,0 +1,122 @@ +.. _tokudb_performance_schema: + +======================================= +|TokuDB| Performance Schema Integration +======================================= + +In |Percona Server| :rn:`5.6.38-83.0` has implemented |TokuDB| integration +with `Performance Schema +`_ + +This integration can be used for profiling additional |TokuDB| operations. + +|TokuDB| instruments available in Performance Schema can be seen in +:table:`PERFORMANCE_SCHEMA.SETUP_INSTRUMENTS` table: + +.. code-block:: mysql + + mysql> SELECT * FROM performance_schema.setup_instruments WHERE NAME LIKE "%/fti/%"; + +------------------------------------------------------------+---------+-------+ + | NAME | ENABLED | TIMED | + +------------------------------------------------------------+---------+-------+ + | wait/synch/mutex/fti/kibbutz_mutex | NO | NO | + | wait/synch/mutex/fti/minicron_p_mutex | NO | NO | + | wait/synch/mutex/fti/queue_result_mutex | NO | NO | + | wait/synch/mutex/fti/tpool_lock_mutex | NO | NO | + | wait/synch/mutex/fti/workset_lock_mutex | NO | NO | + | wait/synch/mutex/fti/bjm_jobs_lock_mutex | NO | NO | + | wait/synch/mutex/fti/log_internal_lock_mutex | NO | NO | + | wait/synch/mutex/fti/cachetable_ev_thread_lock_mutex | NO | NO | + | wait/synch/mutex/fti/cachetable_disk_nb_mutex | NO | NO | + | wait/synch/mutex/fti/safe_file_size_lock_mutex | NO | NO | + | wait/synch/mutex/fti/cachetable_m_mutex_key | NO | NO | + | wait/synch/mutex/fti/checkpoint_safe_mutex | NO | NO | + | wait/synch/mutex/fti/ft_ref_lock_mutex | NO | NO | + | wait/synch/mutex/fti/ft_open_close_lock_mutex | NO | NO | + | wait/synch/mutex/fti/loader_error_mutex | NO | NO | + | wait/synch/mutex/fti/bfs_mutex | NO | NO | + | wait/synch/mutex/fti/loader_bl_mutex | NO | NO | + | wait/synch/mutex/fti/loader_fi_lock_mutex | NO | NO | + | wait/synch/mutex/fti/loader_out_mutex | NO | NO | + | wait/synch/mutex/fti/result_output_condition_lock_mutex | NO | NO | + | wait/synch/mutex/fti/block_table_mutex | NO | NO | + | wait/synch/mutex/fti/rollback_log_node_cache_mutex | NO | NO | + | wait/synch/mutex/fti/txn_lock_mutex | NO | NO | + | wait/synch/mutex/fti/txn_state_lock_mutex | NO | NO | + | wait/synch/mutex/fti/txn_child_manager_mutex | NO | NO | + | wait/synch/mutex/fti/txn_manager_lock_mutex | NO | NO | + | wait/synch/mutex/fti/treenode_mutex | NO | NO | + | wait/synch/mutex/fti/locktree_request_info_mutex | NO | NO | + | wait/synch/mutex/fti/locktree_request_info_retry_mutex_key | NO | NO | + | wait/synch/mutex/fti/manager_mutex | NO | NO | + | wait/synch/mutex/fti/manager_escalation_mutex | NO | NO | + | wait/synch/mutex/fti/db_txn_struct_i_txn_mutex | NO | NO | + | wait/synch/mutex/fti/manager_escalator_mutex | NO | NO | + | wait/synch/mutex/fti/indexer_i_indexer_lock_mutex | NO | NO | + | wait/synch/mutex/fti/indexer_i_indexer_estimate_lock_mutex | NO | NO | + | wait/synch/mutex/fti/fti_probe_1 | NO | NO | + | wait/synch/rwlock/fti/multi_operation_lock | NO | NO | + | wait/synch/rwlock/fti/low_priority_multi_operation_lock | NO | NO | + | wait/synch/rwlock/fti/cachetable_m_list_lock | NO | NO | + | wait/synch/rwlock/fti/cachetable_m_pending_lock_expensive | NO | NO | + | wait/synch/rwlock/fti/cachetable_m_pending_lock_cheap | NO | NO | + | wait/synch/rwlock/fti/cachetable_m_lock | NO | NO | + | wait/synch/rwlock/fti/result_i_open_dbs_rwlock | NO | NO | + | wait/synch/rwlock/fti/checkpoint_safe_rwlock | NO | NO | + | wait/synch/rwlock/fti/cachetable_value | NO | NO | + | wait/synch/rwlock/fti/safe_file_size_lock_rwlock | NO | NO | + | wait/synch/rwlock/fti/cachetable_disk_nb_rwlock | NO | NO | + | wait/synch/cond/fti/result_state_cond | NO | NO | + | wait/synch/cond/fti/bjm_jobs_wait | NO | NO | + | wait/synch/cond/fti/cachetable_p_refcount_wait | NO | NO | + | wait/synch/cond/fti/cachetable_m_flow_control_cond | NO | NO | + | wait/synch/cond/fti/cachetable_m_ev_thread_cond | NO | NO | + | wait/synch/cond/fti/bfs_cond | NO | NO | + | wait/synch/cond/fti/result_output_condition | NO | NO | + | wait/synch/cond/fti/manager_m_escalator_done | NO | NO | + | wait/synch/cond/fti/lock_request_m_wait_cond | NO | NO | + | wait/synch/cond/fti/queue_result_cond | NO | NO | + | wait/synch/cond/fti/ws_worker_wait | NO | NO | + | wait/synch/cond/fti/rwlock_wait_read | NO | NO | + | wait/synch/cond/fti/rwlock_wait_write | NO | NO | + | wait/synch/cond/fti/rwlock_cond | NO | NO | + | wait/synch/cond/fti/tp_thread_wait | NO | NO | + | wait/synch/cond/fti/tp_pool_wait_free | NO | NO | + | wait/synch/cond/fti/frwlock_m_wait_read | NO | NO | + | wait/synch/cond/fti/kibbutz_k_cond | NO | NO | + | wait/synch/cond/fti/minicron_p_condvar | NO | NO | + | wait/synch/cond/fti/locktree_request_info_retry_cv_key | NO | NO | + | wait/io/file/fti/tokudb_data_file | YES | YES | + | wait/io/file/fti/tokudb_load_file | YES | YES | + | wait/io/file/fti/tokudb_tmp_file | YES | YES | + | wait/io/file/fti/tokudb_log_file | YES | YES | + +------------------------------------------------------------+---------+-------+ + +For |TokuDB|-related objects, following clauses can be used when querying +Performance Schema tables: + + * ``WHERE EVENT_NAME LIKE '%fti%'`` or + * ``WHERE NAME LIKE '%fti%'`` + +For example, to get the information about |TokuDB| related events you can query +:table:`PERFORMANCE_SCHEMA.events_waits_summary_global_by_event_name` like: + +.. code-block:: mysql + + mysql> SELECT * FROM performance_schema.events_waits_summary_global_by_event_name WHERE EVENT_NAME LIKE '%fti%'; + + +-----------------------------------------+------------+----------------+----------------+----------------+----------------+ + | EVENT_NAME | COUNT_STAR | SUM_TIMER_WAIT | MIN_TIMER_WAIT | AVG_TIMER_WAIT | MAX_TIMER_WAIT | + +-----------------------------------------+------------+----------------+----------------+----------------+----------------+ + | wait/synch/mutex/fti/kibbutz_mutex | 0 | 0 | 0 | 0 | 0 | + | wait/synch/mutex/fti/minicron_p_mutex | 0 | 0 | 0 | 0 | 0 | + | wait/synch/mutex/fti/queue_result_mutex | 0 | 0 | 0 | 0 | 0 | + | wait/synch/mutex/fti/tpool_lock_mutex | 0 | 0 | 0 | 0 | 0 | + | wait/synch/mutex/fti/workset_lock_mutex | 0 | 0 | 0 | 0 | 0 | + ... + | wait/io/file/fti/tokudb_data_file | 30 | 179862410 | 0 | 5995080 | 68488420 | + | wait/io/file/fti/tokudb_load_file | 0 | 0 | 0 | 0 | 0 | + | wait/io/file/fti/tokudb_tmp_file | 0 | 0 | 0 | 0 | 0 | + | wait/io/file/fti/tokudb_log_file | 1367 | 2925647870145 | 0 | 2140195785 | 12013357720 | + +-----------------------------------------+------------+----------------+----------------+----------------+----------------+ + 71 rows in set (0.02 sec) diff --git a/doc/source/upstream-bug-fixes.rst b/doc/source/upstream-bug-fixes.rst index 252077ac35e4..da206a3104fc 100644 --- a/doc/source/upstream-bug-fixes.rst +++ b/doc/source/upstream-bug-fixes.rst @@ -4,22 +4,34 @@ List of upstream |MySQL| bugs fixed in |Percona Server| 5.6 ============================================================= ++-------------------------------------------------------------------------------------------------------------+ +|:Upstream bug: :mysqlbug:`87065` - Release lock on table statistics after query plan created | +|:Launchpad bug: :bug:`1704195` | +|:Upstream state: Open (checked on 2017-12-08) | +|:Fix Released: :rn:`5.6.38-83.0` | +|:Upstream fix: N/A | ++-------------------------------------------------------------------------------------------------------------+ +|:Upstream bug: :mysqlbug:`68659` - InnoDB Linux native aio should submit more i/o requests at once | +|:Launchpad bug: :ref:`aio_page_requests` | +|:Upstream state: Analyzing (checked on 2017-12-08) | +|:Fix Released: :rn:`5.6.38-83.0` | +|:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`83814` - Add support for OpenSSL 1.1 | |:Launchpad bug: :bug:`1702903` | -|:Upstream state: Verified (checked on 2017-07-28) | +|:Upstream state: Verified (checked on 2017-12-08) | |:Fix Released: :rn:`5.6.36-82.1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`86260` - Assert on KILL'ing a stored routine invocation | |:Launchpad bug: :bug:`1689736` | -|:Upstream state: Verified (checked on 2017-07-28) | +|:Upstream state: Verified (checked on 2017-12-08) | |:Fix Released: :rn:`5.6.36-82.1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`68052` - SSL Certificate Subject ALT Names with IPs not respected with --ssl-ver...| |:Launchpad bug: :bug:`1673656` | -|:Upstream state: Verified (checked on 2017-07-28) | +|:Upstream state: Verified (checked on 2017-12-08) | |:Fix Released: :rn:`5.6.36-82.1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -43,13 +55,13 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`85258` - DROP TEMPORARY TABLE creates a transaction in binary log on read only... | |:Launchpad bug: :bug:`1668602` | -|:Upstream state: Verified (checked on 2017-07-28) | +|:Upstream state: Closed | |:Fix Released: :rn:`5.6.36-82.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`84415` - slave don't report Seconds_Behind_Master when running ... | |:Launchpad bug: :bug:`1654091` | -|:Upstream state: Verified (checked on 2017-07-28) | +|:Upstream state: Verified (checked on 2017-12-08) | |:Fix Released: :rn:`5.6.36-82.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -61,13 +73,13 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`81467` - innodb_fts.sync_block test unstable due to slow query log nondeterminism | |:Launchpad bug: :bug:`1662163` | -|:Upstream state: Verified (checked on 2017-07-28) | +|:Upstream state: Verified (checked on 2017-12-08) | |:Fix Released: :rn:`5.6.35-80.1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`75311` - Error for SSL cipher is unhelpful | |:Launchpad bug: :bug:`1660339` | -|:Upstream state: Verified (checked on 2017-07-28) | +|:Upstream state: Verified (checked on 2017-12-08) | |:Fix Released: :rn:`5.6.35-80.1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -79,13 +91,13 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`84366` - InnoDB index dives do not detect concurrent tree changes, return bogus... | |:Launchpad bug: :bug:`1625151` | -|:Upstream state: Verified (checked on 2017-07-28) | +|:Upstream state: Verified (checked on 2017-12-08) | |:Fix Released: :rn:`5.6.35-80.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`83003` - Using temporary tables on slaves increases GTID sequence number | |:Launchpad bug: :bug:`1539504` | -|:Upstream state: Verified (checked on 2017-07-28) | +|:Upstream state: Closed | |:Fix Released: :rn:`5.6.35-80.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -109,7 +121,7 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`82935` - Cipher ECDHE-RSA-AES128-GCM-SHA256 listed in man/Ssl_cipher_list, not ... | |:Launchpad bug: :bug:`1622034` | -|:Upstream state: Verified (checked on 2017-07-28) | +|:Upstream state: Verified (checked on 2017-12-08) | |:Fix Released: :rn:`5.6.33-79.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -127,7 +139,7 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`71761` - ANALYZE TABLE should remove its table from background stat processing ... | |:Launchpad bug: :bug:`1626441` | -|:Upstream state: Verified (checked on 2017-07-28) | +|:Upstream state: Verified (checked on 2017-12-08) | |:Fix Released: :rn:`5.6.33-79.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -157,13 +169,13 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`82798` - Small buffer pools might be too small for rseg init during crash recovery | |:Launchpad bug: :bug:`1616392` | -|:Upstream state: Verified (checked on 2017-07-28) | +|:Upstream state: Verified (checked on 2017-12-08) | |:Fix Released: :rn:`5.6.33-79.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`81674` - LeakSanitizer-enabled build fails to bootstrap server for MTR | |:Launchpad bug: :bug:`1603978` | -|:Upstream state: Verified (checked on 2017-07-28) | +|:Upstream state: Verified (checked on 2017-12-08) | |:Fix Released: :rn:`5.6.32-78.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -175,19 +187,19 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`79610` - Failed DROP DATABASE due FK constraint on master breaks slave | |:Launchpad bug: :bug:`1525407` | -|:Upstream state: Verified (checked on 2017-07-28) | +|:Upstream state: Verified (checked on 2017-12-08) | |:Fix Released: :rn:`5.6.32-78.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`77399` - Deadlocks missed by INFORMATION_SCHEMA.INNODB_METRICS lock_deadlocks ... | |:Launchpad bug: :bug:`1466414` | -|:Upstream state: Verified (checked on 2017-07-28) | +|:Upstream state: Verified (checked on 2017-12-08) | |:Fix Released: :rn:`5.6.31-77.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`76142` - InnoDB tablespace import fails when importing table w/ different datadir | |:Launchpad bug: :bug:`1548597` | -|:Upstream state: Verified (checked on 2017-07-28) | +|:Upstream state: Verified (checked on 2017-12-08) | |:Fix Released: :rn:`5.6.31-77.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -207,7 +219,7 @@ |:Launchpad bug: :bug:`1588845` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.31-77.0` | -|:Upstream fix: 5.6.38 | +|:Upstream fix: 5.6.38 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`81657` - DBUG_PRINT in THD::decide_logging_format prints incorrectly, access ... | |:Launchpad bug: :bug:`1587426` | @@ -223,7 +235,7 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`72466` - More memory overhead per page in the InnoDB buffer pool | |:Launchpad bug: :bug:`1536693` | -|:Upstream state: Verified (checked on 2017-07-28) | +|:Upstream state: Verified (checked on 2017-12-08) | |:Fix Released: :rn:`5.6.30-76.3` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -247,13 +259,13 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`77591` - ALTER TABLE does not allow to change NULL/NOT NULL if foreign key exists | |:Launchpad bug: :bug:`1470677` | -|:Upstream state: Verified (checked on 2017-07-28) | +|:Upstream state: Verified (checked on 2017-12-08) | |:Fix Released: :rn:`5.6.26-74.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`35125` - Allow the ability to set the server_id for a connection for logging to... | |:Launchpad bug: `Blueprint `_ | -|:Upstream state: Verified (checked on 2017-07-28) | +|:Upstream state: Verified (checked on 2017-12-08) | |:Fix Released: :rn:`5.6.26-74.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -295,25 +307,25 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`72108` - Hard to read history file | |:Launchpad bug: :bug:`1296192` | -|:Upstream state: Verified (checked on 2017-07-28) | +|:Upstream state: Verified (checked on 2017-12-08) | |:Fix Released: :rn:`5.6.24-72.2` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`69991` - MySQL client is broken without readline | |:Launchpad bug: :bug:`1266386` | -|:Upstream state: Verified (checked on 2017-07-28) | +|:Upstream state: Verified (checked on 2017-12-08) | |:Fix Released: :rn:`5.6.24-72.2` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`63130` - CMake-based check for the presence of a system readline library is not... | |:Launchpad bug: :bug:`1266386` | -|:Upstream state: Can't repeat (checked on 2017-07-28) | +|:Upstream state: Can't repeat (checked on 2017-12-08) | |:Fix Released: :rn:`5.6.24-72.2` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`53645` - SHOW GRANTS not displaying all the applicable grants | |:Launchpad bug: :bug:`1354988` | -|:Upstream state: Verified (checked on 2017-07-28) | +|:Upstream state: Verified (checked on 2017-12-08) | |:Fix Released: :rn:`5.6.23-72.1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -349,25 +361,25 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`74987` - mtr failure on Ubuntu Utopic, mysqlhotcopy fails with wrong error(255) | |:Launchpad bug: :bug:`1396330` | -|:Upstream state: Verified (checked on 2017-07-28) | +|:Upstream state: Verified (checked on 2017-12-08) | |:Fix Released: :rn:`5.6.22-71.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`75189` - engines suite tests depending on InnoDB implementation details | |:Launchpad bug: :bug:`1401776` | -|:Upstream state: Verified (checked on 2017-07-28) | +|:Upstream state: Verified (checked on 2017-12-08) | |:Fix Released: :rn:`5.6.22-71.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`72475` - Binlog events with binlog_format=MIXED are unconditionally logged in ROW..| |:Launchpad bug: :bug:`1313901` | -|:Upstream state: Verified (checked on 2017-07-28) | +|:Upstream state: Closed | |:Fix Released: :rn:`5.6.21-70.1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`74842` - Incorrect attribute((nonnull)) for btr_cur_ins_lock_and_undo callees | |:Launchpad bug: :bug:`1390695` | -|:Upstream state: Verified (checked on 2017-07-28) | +|:Upstream state: Verified (checked on 2017-12-08) | |:Fix Released: :rn:`5.6.21-70.1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -379,13 +391,13 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`73066` - Replication stall with multi-threaded replication | |:Launchpad bug: :bug:`1331586` | -|:Upstream state: Verified (checked on 2017-07-28) | +|:Upstream state: Verified (checked on 2017-12-08) | |:Fix Released: :rn:`5.6.21-70.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`71091` - CSV engine does not properly process ``""``, in quotes | |:Launchpad bug: :bug:`1316042` | -|:Upstream state: Verified (checked on 2017-07-28) | +|:Upstream state: Verified (checked on 2017-12-08) | |:Fix Released: :rn:`5.6.21-70.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -403,7 +415,7 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`73418` - Add --manual-lldb option to mysql-test-run.pl | |:Launchpad bug: :bug:`1328482` | -|:Upstream state: Verified (checked on 2017-07-28) | +|:Upstream state: Verified (checked on 2017-12-08) | |:Fix Released: :rn:`5.6.20-68.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -421,13 +433,13 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`72615` - MTR --mysqld=--default-storage-engine=foo incompatible w/ dynamically... | |:Launchpad bug: :bug:`1318537` | -|:Upstream state: Verified (checked on 2017-07-28) | +|:Upstream state: Verified (checked on 2017-12-08) | |:Fix Released: :rn:`5.6.17-66.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`72163` - Rev 5774 broke rpl_plugin_load | |:Launchpad bug: :bug:`1299688` | -|:Upstream state: Verified (checked on 2017-07-28) | +|:Upstream state: Verified (checked on 2017-12-08) | |:Fix Released: :rn:`5.6.17-65.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -451,19 +463,19 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`74637` - make dirty page flushing more adaptive | |:Launchpad BP: `Split LRU ... `_ | -|:Upstream state: Verified (checked on 2017-07-28) | +|:Upstream state: Verified (checked on 2017-12-08) | |:Fix Released: :rn:`5.6.16-64.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`71988` - page_cleaner: aggressive background flushing | |:Launchpad bug: :bug:`1238039` | -|:Upstream state: Verified (checked on 2017-07-28) | +|:Upstream state: Verified (checked on 2017-12-08) | |:Fix Released: :rn:`5.6.16-64.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`71624` - printf size_t results in a fatal warning in 32-bit debug builds | |:Launchpad bug: :bug:`1277505` | -|:Upstream state: Can't repeat (checked on 2017-07-28) | +|:Upstream state: Can't repeat (checked on 2017-12-08) | |:Fix Released: :rn:`5.6.16-64.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -499,7 +511,7 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`78050` - Crash on when XA functions activated by a storage engine | |:Launchpad bug: :bug:`1255549` | -|:Upstream state: Verified (checked on 2017-07-28) | +|:Upstream state: Verified (checked on 2017-12-08) | |:Fix Released: :rn:`5.6.16-64.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -511,13 +523,13 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`71270` - Failures to end bulk insert for partitioned tables handled incorrectly | |:Launchpad bug: :bug:`1204871` | -|:Upstream state: Verified (checked on 2017-07-28) | +|:Upstream state: Verified (checked on 2017-12-08) | |:Fix Released: :rn:`5.6.16-64.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`71217` - Threadpool - add thd_wait_begin/thd_wait_end to the network IO functions | |:Launchpad bug: :bug:`1159743` | -|:Upstream state: Open (checked on 2017-07-28) | +|:Upstream state: Open (checked on 2017-12-08) | |:Fix Released: :rn:`5.6.15-63.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -541,7 +553,7 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`71411` - buf_flush_LRU() does not return correct number in case of compressed pages| |:Launchpad bug: :bug:`1231918` | -|:Upstream state: Verified (checked on 2017-07-28) | +|:Upstream state: Verified (checked on 2017-12-08) | |:Fix Released: :rn:`5.6.13-61.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -565,7 +577,7 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`70500` - Page cleaner should perform LRU flushing regardless of server activity | |:Launchpad bug: :bug:`1234562` | -|:Upstream state: Verified (checked on 2017-07-28) | +|:Upstream state: Verified (checked on 2017-12-08) | |:Fix Released: :rn:`5.6.13-61.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -583,25 +595,25 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`68481` - InnoDB LRU flushing for MySQL 5.6 needs work | |:Launchpad bug: :bug:`1232406` | -|:Upstream state: Verified (checked on 2017-07-28) | +|:Upstream state: Verified (checked on 2017-12-08) | |:Fix Released: :rn:`5.6.13-61.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`70453` - Add hard timeouts to page cleaner flushes | |:Launchpad bug: :bug:`1232101` | -|:Upstream state: Verified (checked on 2017-07-28) | +|:Upstream state: Verified (checked on 2017-12-08) | |:Fix Released: :rn:`5.6.13-61.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`69170` - buf_flush_LRU is lazy | |:Launchpad bug: :bug:`1231918` | -|:Upstream state: Verified (checked on 2017-07-28) | +|:Upstream state: Verified (checked on 2017-12-08) | |:Fix Released: :rn:`5.6.13-61.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`68555` - thread convoys from log_checkpoint_margin with innodb_buffer_pool_inst... | |:Launchpad bug: :bug:`1236884` | -|:Upstream state: Verified (checked on 2017-07-28) | +|:Upstream state: Verified (checked on 2017-12-08) | |:Fix Released: :rn:`5.6.13-61.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -637,7 +649,7 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`62018` - innodb adaptive hash index mutex contention | |:Launchpad bug: :bug:`1216804` | -|:Upstream state: Verified (checked on 2017-07-28) | +|:Upstream state: Verified (checked on 2017-12-08) | |:Fix Released: :rn:`5.6.13-60.6` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -655,13 +667,13 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`42415` - UPDATE/DELETE with LIMIT clause unsafe for SBL even with ORDER BY PK ... | |:Launchpad bug: :bug:`1132194` | -|:Upstream state: Verified (checked on 2017-07-28) | +|:Upstream state: Verified (checked on 2017-12-08) | |:Fix Released: :rn:`5.6.13-60.5` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`69639` - mysql failed to build with dtrace Sun D 1.11 | |:Launchpad bug: :bug:`1196460` | -|:Upstream state: Open (checked on 2017-07-28) | +|:Upstream state: Open (checked on 2017-12-08) | |:Fix Released: :rn:`5.6.13-60.5` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -709,7 +721,7 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`71183` - os_file_fsync() should handle fsync() returning EINTR | |:Launchpad bug: :bug:`1262651` | -|:Upstream state: Verified (checked on 2017-07-28) | +|:Upstream state: Verified (checked on 2017-12-08) | |:Fix Released: :rn:`5.6.11-60.3` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -787,7 +799,7 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`68845` - Unnecessary log_sys->mutex reacquisition in mtr_log_reserve_and_write() | |:Launchpad bug: :bug:`1163439` | -|:Upstream state: Verified (checked on 2017-07-28) | +|:Upstream state: Verified (checked on 2017-12-08) | |:Fix Released: :rn:`5.6.11-60.3` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -877,7 +889,7 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`61178` - Incorrect implementation of intersect(ulonglong) in non-optimized Bitmap..| |:Launchpad bug: :bug:`1042517` | -|:Upstream state: Verified (checked on 2017-07-28) | +|:Upstream state: Verified (checked on 2017-12-08) | |:Fix Released: :rn:`5.6.11-60.3` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -889,7 +901,7 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`64800` - mysqldump with --include-master-host-port putting quotes around port no. | |:Launchpad bug: :bug:`1013432` | -|:Upstream state: Verified (checked on 2017-07-28) | +|:Upstream state: Verified (checked on 2017-12-08) | |:Fix Released: :rn:`5.6.11-60.3` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -919,13 +931,13 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`25007` - memory tables with dynamic rows format | |:Launchpad bug: :bug:`1148822` | -|:Upstream state: Verified (checked on 2017-07-28) | +|:Upstream state: Verified (checked on 2017-12-08) | |:Fix Released: :rn:`5.6.11-60.3` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`61595` - mysql-test/include/wait_for_slave_param.inc timeout logic is incorrect | |:Launchpad bug: :bug:`800035` | -|:Upstream state: Verified (checked on 2017-07-28) | +|:Upstream state: Verified (checked on 2017-12-08) | |:Fix Released: :rn:`5.6.11-60.3` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -937,7 +949,7 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`39833` - CREATE INDEX does full table copy on TEMPORARY table | |:Launchpad bug: N/A | -|:Upstream state: Verified (checked on 2017-07-28) | +|:Upstream state: Verified (checked on 2017-12-08) | |:Fix Released: :rn:`5.6.10-60.2` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -955,25 +967,25 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`20001` - Support for temp-tables in INFORMATION_SCHEMA | |:Launchpad bug: :ref:`temp_tables` | -|:Upstream state: Verified (checked on 2017-07-28) | +|:Upstream state: Verified (checked on 2017-12-08) | |:Fix Released: :rn:`5.6.5-60.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`49120` - mysqldump should have flag to delay creating indexes for innodb plugin | |:Launchpad bug: :bug:`744103` | -|:Upstream state: Verified (checked on 2017-07-28) | +|:Upstream state: Verified (checked on 2017-12-08) | |:Fix Released: :rn:`5.6.5-60.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`57583` - fast index create not used during "alter table foo engine=innodb" | |:Launchpad bug: :bug:`744103` | -|:Upstream state: Verified (checked on 2017-07-28) | +|:Upstream state: Verified (checked on 2017-12-08) | |:Fix Released: :rn:`5.6.5-60.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`69146` - Optimization in buf_pool_get_oldest_modification if srv_buf_pool_instances| |:Launchpad bug: :bug:`1176496` | -|:Upstream state: Verified (checked on 2017-07-28) | +|:Upstream state: Verified (checked on 2017-12-08) | |:Fix Released: :rn:`5.6.5-60.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ From 49bfff77534ab79ea47574574436774961fcc11e Mon Sep 17 00:00:00 2001 From: Bharathy Satish Date: Thu, 30 Nov 2017 07:13:05 +0100 Subject: [PATCH 0262/1221] Bug #27175716: KEYRING MIGRATION TOOL GENERATING THE KEYS WHICH CAN'T BE READ BY SERVER Problem: Keyring migration tool creates backed file for destination plugin if the file is not present. This file is created with OS user as owner for this file. After migration when server is started with destination keyring plugin, plugin will reject this file from reading. Fix: Moved the migration specific code after calls to setgid and setuid so that backend files for destination plugin is created with correct user. (cherry picked from commit 46e91ea8a292f0fcbb9f193514f29375c5335205) --- sql/migrate_keyring.cc | 21 ++------- sql/migrate_keyring.h | 22 +++++++-- sql/mysqld.cc | 102 ++++++++++++++++++++--------------------- 3 files changed, 71 insertions(+), 74 deletions(-) diff --git a/sql/migrate_keyring.cc b/sql/migrate_keyring.cc index 45b427c7fcdf..7b7cd68e557b 100644 --- a/sql/migrate_keyring.cc +++ b/sql/migrate_keyring.cc @@ -33,9 +33,9 @@ Migrate_keyring::Migrate_keyring() /** This function does the following: - 1. Read command line arguments specific to migration operation - 2. Get plugin_dir value. - 3. Get a connection handle by connecting to server. + 1. Validate all keyring migration specific options. + 2. Get a connection handle by connecting to server if connection + specific options are set. @param [in] argc Pointer to argc of original program @param [in] argv Pointer to argv of original program @@ -61,14 +61,6 @@ bool Migrate_keyring::init(int argc, { DBUG_ENTER("Migrate_keyring::init"); - my_option migration_options[]= { - {"basedir", 0, "", &mysql_home_ptr, 0, - 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, - {"plugin_dir", 0, "", &opt_plugin_dir_ptr, 0, - 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, - - {0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0} - }; std::size_t found= std::string::npos; string equal("="); string so(".so"); @@ -120,17 +112,10 @@ bool Migrate_keyring::init(int argc, DBUG_RETURN(true); } - if (my_handle_options(&m_argc, &m_argv, migration_options, - NULL, NULL, TRUE)) - DBUG_RETURN(true); /* Restore program name */ m_argc++; m_argv--; - convert_dirname(opt_plugin_dir, opt_plugin_dir_ptr ? opt_plugin_dir_ptr : - PLUGINDIR, NullS); - opt_plugin_dir_ptr= opt_plugin_dir; - /* if connect options are provided then initiate connection */ if (migrate_connect_options) { diff --git a/sql/migrate_keyring.h b/sql/migrate_keyring.h index 13ef6bdb7723..e7f3c2521c98 100644 --- a/sql/migrate_keyring.h +++ b/sql/migrate_keyring.h @@ -35,20 +35,34 @@ enum enum_plugin_type class Key_info { public: + Key_info() + : m_key_id_len(0), + m_user_id_len(0) + {} Key_info(char *key_id, char *user_id) { - memcpy(m_key_id, key_id, strlen(key_id)); - memcpy(m_user_id, user_id, strlen(user_id)); + m_key_id_len= strlen(key_id); + memcpy(m_key_id, key_id, m_key_id_len); + m_key_id[m_key_id_len]= '\0'; + m_user_id_len= strlen(user_id); + memcpy(m_user_id, user_id, m_user_id_len); + m_user_id[m_user_id_len]= '\0'; } Key_info(const Key_info &ki) { - memcpy(this->m_key_id, ki.m_key_id, strlen(ki.m_key_id)); - memcpy(this->m_user_id, ki.m_user_id, strlen(ki.m_user_id)); + this->m_key_id_len= ki.m_key_id_len; + memcpy(this->m_key_id, ki.m_key_id, this->m_key_id_len); + this->m_key_id[this->m_key_id_len]= '\0'; + this->m_user_id_len= ki.m_user_id_len; + memcpy(this->m_user_id, ki.m_user_id, this->m_user_id_len); + this->m_user_id[this->m_user_id_len]= '\0'; } public: char m_key_id[MAX_KEY_LEN]; + int m_key_id_len; char m_user_id[USERNAME_LENGTH]; + int m_user_id_len; }; class Migrate_keyring diff --git a/sql/mysqld.cc b/sql/mysqld.cc index c1f751e5f013..c70468b61be8 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -2955,49 +2955,6 @@ int init_common_variables() return 1; init_client_errs(); - /* - initiate key migration if any one of the migration specific - options are provided. - */ - if (opt_keyring_migration_source || - opt_keyring_migration_destination || - migrate_connect_options) - { - Migrate_keyring mk; - my_getopt_skip_unknown= TRUE; - if (mk.init(remaining_argc, remaining_argv, - opt_keyring_migration_source, - opt_keyring_migration_destination, - opt_keyring_migration_user, - opt_keyring_migration_host, - opt_keyring_migration_password, - opt_keyring_migration_socket, - opt_keyring_migration_port)) - { - sql_print_error(ER_DEFAULT(ER_KEYRING_MIGRATION_STATUS), - "failed"); - log_error_dest= "stderr"; - flush_error_log_messages(); - return 1; - } - - if (mk.execute()) - { - sql_print_error(ER_DEFAULT(ER_KEYRING_MIGRATION_STATUS), - "failed"); - log_error_dest= "stderr"; - flush_error_log_messages(); - return 1; - } - - my_getopt_skip_unknown= 0; - sql_print_information(ER_DEFAULT(ER_KEYRING_MIGRATION_STATUS), - "sucessfull"); - log_error_dest= "stderr"; - flush_error_log_messages(); - exit(MYSQLD_SUCCESS_EXIT); - } - mysql_client_plugin_init(); if (item_create_init()) return 1; @@ -4680,15 +4637,6 @@ int mysqld_main(int argc, char **argv) srand(static_cast(time(NULL))); #endif - /* - We have enough space for fiddling with the argv, continue - */ - if (my_setwd(mysql_real_data_home,MYF(MY_WME)) && !opt_help) - { - sql_print_error("failed to set datadir to %s", mysql_real_data_home); - unireg_abort(MYSQLD_ABORT_EXIT); /* purecov: inspected */ - } - #ifndef _WIN32 if ((user_info= check_user(mysqld_user))) { @@ -4733,6 +4681,56 @@ int mysqld_main(int argc, char **argv) } #endif // !_WIN32 + /* + initiate key migration if any one of the migration specific + options are provided. + */ + if (opt_keyring_migration_source || + opt_keyring_migration_destination || + migrate_connect_options) + { + Migrate_keyring mk; + if (mk.init(remaining_argc, remaining_argv, + opt_keyring_migration_source, + opt_keyring_migration_destination, + opt_keyring_migration_user, + opt_keyring_migration_host, + opt_keyring_migration_password, + opt_keyring_migration_socket, + opt_keyring_migration_port)) + { + sql_print_error(ER_DEFAULT(ER_KEYRING_MIGRATION_STATUS), + "failed"); + log_error_dest= "stderr"; + flush_error_log_messages(); + unireg_abort(MYSQLD_ABORT_EXIT); + } + + if (mk.execute()) + { + sql_print_error(ER_DEFAULT(ER_KEYRING_MIGRATION_STATUS), + "failed"); + log_error_dest= "stderr"; + flush_error_log_messages(); + unireg_abort(MYSQLD_ABORT_EXIT); + } + + sql_print_information(ER_DEFAULT(ER_KEYRING_MIGRATION_STATUS), + "successfull"); + log_error_dest= "stderr"; + flush_error_log_messages(); + unireg_abort(MYSQLD_SUCCESS_EXIT); + } + + /* + We have enough space for fiddling with the argv, continue + */ + if (my_setwd(mysql_real_data_home,MYF(MY_WME)) && !opt_help) + { + sql_print_error("failed to set datadir to %s", mysql_real_data_home); + unireg_abort(MYSQLD_ABORT_EXIT); /* purecov: inspected */ + } + //If the binlog is enabled, one needs to provide a server-id if (opt_bin_log && !(server_id_supplied) ) { From dd3621cbce97a44b143c7ada4f9481e5da84325c Mon Sep 17 00:00:00 2001 From: Balasubramanian Kandasamy Date: Thu, 30 Nov 2017 15:45:38 +0530 Subject: [PATCH 0263/1221] Post-fix: Bug#26742748 - 8.0 DOCKER IMAGE RPM GENERATES 5.7 DOC URL IN /ETC/MY.CNF - Fix the cmake for docker rpm builds (cherry picked from commit 70f9efc1b7a291fbf693dbc4827acba4961ddc62) --- packaging/rpm-docker/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packaging/rpm-docker/CMakeLists.txt b/packaging/rpm-docker/CMakeLists.txt index 2f9441005df7..85d583be0577 100644 --- a/packaging/rpm-docker/CMakeLists.txt +++ b/packaging/rpm-docker/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2012, 2017, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -31,7 +31,7 @@ IF(UNIX) CONFIGURE_FILE(mysql.spec.in ${CMAKE_CURRENT_BINARY_DIR}/${SPECFILENAME} @ONLY) FOREACH(fedfile my.cnf) - CONFIGURE_FILE(${fedfile}.in ${CMAKE_CURRENT_BINARY_DIR}/${fedfile} COPYONLY) + CONFIGURE_FILE(${fedfile}.in ${CMAKE_CURRENT_BINARY_DIR}/${fedfile} @ONLY) ENDFOREACH() ENDIF() From d93b7b8f871c2ae785af820c836ff1a9a5ab00d4 Mon Sep 17 00:00:00 2001 From: Harin Vadodaria Date: Thu, 30 Nov 2017 12:20:54 +0100 Subject: [PATCH 0264/1221] Merge branch 'mysql-5.6' into mysql-5.7 (cherry picked from commit 0147646416c97d883ec7c22ef9173f0e166922fa) --- include/crypt_genhash_impl.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/crypt_genhash_impl.h b/include/crypt_genhash_impl.h index e78a9158d62b..9cffd2e4ab9a 100644 --- a/include/crypt_genhash_impl.h +++ b/include/crypt_genhash_impl.h @@ -17,7 +17,7 @@ #define CRYPT_HASHGEN_IMPL_H #define ROUNDS_DEFAULT 5000 #define ROUNDS_MIN 1000 -#define ROUNDS_MAX 999999999 +#define ROUNDS_MAX ROUNDS_DEFAULT #define MIXCHARS 32 #define CRYPT_SALT_LENGTH 20 #define CRYPT_MAGIC_LENGTH 3 From 10adc15d0e5ec2d3152f84ba784522bdfa75b7ee Mon Sep 17 00:00:00 2001 From: Evgeniy Patlan Date: Mon, 11 Dec 2017 09:48:58 +0200 Subject: [PATCH 0265/1221] [BLD-908] Add libcurl deps to ps-57 --- build-ps/debian/control | 1 + build-ps/percona-server.spec | 1 + build-ps/ubuntu/control | 1 + 3 files changed, 3 insertions(+) diff --git a/build-ps/debian/control b/build-ps/debian/control index 17c3e1f6aadf..a810e557d662 100644 --- a/build-ps/debian/control +++ b/build-ps/debian/control @@ -23,6 +23,7 @@ Build-Depends: bison, gcc (>= 4.4), g++ (>= 4.4), libwrap0-dev, + libcurl4-openssl-dev, libldap2-dev Standards-Version: 3.9.4 Homepage: http://www.percona.com/software/percona-server/ diff --git a/build-ps/percona-server.spec b/build-ps/percona-server.spec index 67fee8e8bced..759652885da0 100644 --- a/build-ps/percona-server.spec +++ b/build-ps/percona-server.spec @@ -158,6 +158,7 @@ BuildRequires: openssl-devel BuildRequires: zlib-devel BuildRequires: bison BuildRequires: openldap-devel +BuildRequires: libcurl-devel %if 0%{?systemd} BuildRequires: systemd BuildRequires: pkgconfig(systemd) diff --git a/build-ps/ubuntu/control b/build-ps/ubuntu/control index 4a916ec68754..e5f83c637b52 100644 --- a/build-ps/ubuntu/control +++ b/build-ps/ubuntu/control @@ -24,6 +24,7 @@ Build-Depends: bison, g++ (>= 4.4), libwrap0-dev, libldap2-dev, + libcurl4-openssl-dev, dh-systemd Standards-Version: 3.9.4 Homepage: http://www.percona.com/software/percona-server/ From 9bbbbd7b182f412b48b802e30d0f98c4848cace1 Mon Sep 17 00:00:00 2001 From: Catalin Besleaga Date: Thu, 28 Sep 2017 18:00:47 +0200 Subject: [PATCH 0266/1221] WL#11065: Backport JSON functions from 8.0 to 5.7 (part 1) Backported JSON_ARRAYAGG and JSON_OBJECTAGG functions from trunk. The following changes were backported: WL#7987: JSON aggregation functions Bug#22017454: REPLACE JSON CATCH_ALL MACRO WITH FUNCTION Change-Id: I49d49f27d04cb1cbf2d721e1b667de4cb55dcf43 --- mysql-test/r/opt_hints_pfs.result | 16 +- mysql-test/suite/json/r/json_agg.result | 1168 +++++++++++++++++ mysql-test/suite/json/t/json_agg.test | 494 +++++++ .../perfschema/r/digest_table_full.result | 2 +- .../suite/perfschema/r/rpl_gtid_func.result | 4 +- .../r/start_server_low_digest.result | 2 +- .../start_server_low_digest_sql_length.result | 2 +- .../perfschema/r/statement_digest.result | 68 +- .../r/statement_digest_consumers.result | 68 +- .../r/statement_digest_long_query.result | 4 +- .../r/digest_collision.result | 2 +- .../r/optional_columns.result | 18 +- .../query_rewrite_plugins/r/verbose.result | 2 +- mysql-test/suite/rpl/r/rpl_json.result | 76 ++ mysql-test/suite/rpl/t/rpl_json.test | 81 ++ .../x/tests/mtr/r/performance_schema.result | 4 +- sql/CMakeLists.txt | 1 + sql/item_json_func.cc | 319 ++--- sql/item_json_func.h | 47 +- sql/item_sum.cc | 299 +++++ sql/item_sum.h | 104 +- sql/lex.h | 4 +- sql/sql_exception_handler.cc | 89 ++ sql/sql_exception_handler.h | 58 + sql/sql_lex.cc | 1 + sql/sql_lex.h | 3 + sql/sql_optimizer.cc | 2 +- sql/sql_optimizer.h | 12 +- sql/sql_select.cc | 6 +- sql/sql_tmp_table.cc | 8 +- sql/sql_yacc.yy | 15 + 31 files changed, 2725 insertions(+), 254 deletions(-) create mode 100644 mysql-test/suite/json/r/json_agg.result create mode 100644 mysql-test/suite/json/t/json_agg.test create mode 100644 sql/sql_exception_handler.cc create mode 100644 sql/sql_exception_handler.h diff --git a/mysql-test/r/opt_hints_pfs.result b/mysql-test/r/opt_hints_pfs.result index 8a7f2b2a392a..20d56b83a42a 100644 --- a/mysql-test/r/opt_hints_pfs.result +++ b/mysql-test/r/opt_hints_pfs.result @@ -8,8 +8,8 @@ SELECT * FROM t1; SELECT /*+ */ * FROM t1; SELECT digest, digest_text FROM performance_schema.events_statements_history ORDER BY timer_start DESC LIMIT 2; digest digest_text -52efb366ff07b747f41a99d625b6169e SELECT * FROM `t1` -52efb366ff07b747f41a99d625b6169e SELECT * FROM `t1` +23a2bd5d5f00f61920a837cbec0340c8 SELECT * FROM `t1` +23a2bd5d5f00f61920a837cbec0340c8 SELECT * FROM `t1` # Digests should be different: SELECT * FROM t1, t2; SELECT /*+ @@ -33,19 +33,19 @@ SUBQUERY(t1) */ * FROM t1, t2; SELECT digest, digest_text FROM performance_schema.events_statements_history ORDER BY timer_start DESC LIMIT 2; digest digest_text -fec6917f393db4a4ab0aa807a5571b5a SELECT /*+ BKA ( `t1`@`qb1` ) BNL ( @`qb1` `t1` ) DUPSWEEDOUT FIRSTMATCH INTOEXISTS LOOSESCAN MATERIALIZATION MRR ( `t1` ) NO_BKA ( `t2` ) NO_BNL ( `t2` ) NO_ICP ( `t2` ) NO_MRR ( `t2` ) NO_RANGE_OPTIMIZATION ( `t2` ) NO_SEMIJOIN ( `t2` ) QB_NAME ( `qb1` ) SEMIJOIN ( `t1` ) SUBQUERY ( `t1` ) */ * FROM `t1` , `t2` -3a823be8a3decc4895780d814f38c6cb SELECT * FROM `t1` , `t2` +b5dcadc964d9c74aeaafbc7422843058 SELECT /*+ BKA ( `t1`@`qb1` ) BNL ( @`qb1` `t1` ) DUPSWEEDOUT FIRSTMATCH INTOEXISTS LOOSESCAN MATERIALIZATION MRR ( `t1` ) NO_BKA ( `t2` ) NO_BNL ( `t2` ) NO_ICP ( `t2` ) NO_MRR ( `t2` ) NO_RANGE_OPTIMIZATION ( `t2` ) NO_SEMIJOIN ( `t2` ) QB_NAME ( `qb1` ) SEMIJOIN ( `t1` ) SUBQUERY ( `t1` ) */ * FROM `t1` , `t2` +b52b5a0d94d733e8e605cd1152080d8a SELECT * FROM `t1` , `t2` SELECT * FROM t2, t1; SELECT /*+ MAX_EXECUTION_TIME(10) */ * FROM t2, t1; SELECT digest, digest_text FROM performance_schema.events_statements_history ORDER BY timer_start DESC LIMIT 2; digest digest_text -636155394b2f53391a970c2c8c13ed9f SELECT /*+ MAX_EXECUTION_TIME (?) */ * FROM `t2` , `t1` -17ba1f25fb5e2b957bbd51689455864f SELECT * FROM `t2` , `t1` +def05dbaf5e5ab9af48b70c27c603de2 SELECT /*+ MAX_EXECUTION_TIME (?) */ * FROM `t2` , `t1` +1613448fc70feba2d3302a92ea1cc139 SELECT * FROM `t2` , `t1` SELECT 1; SELECT /*+ bad_hint_also_goes_to_digest */ 1; SELECT digest, digest_text FROM performance_schema.events_statements_history ORDER BY timer_start DESC LIMIT 2; digest digest_text -11f1f8f16ba99049bfabf724f29a195a SELECT /*+ `bad_hint_also_goes_to_digest` */ ? -f29eded39dd5fa102f18987679dd0c14 SELECT ? +7936911d8f35e950c5c3bbc98eee3c4f SELECT /*+ `bad_hint_also_goes_to_digest` */ ? +3d4fc22e33e10d7235eced3c75a84c2c SELECT ? DROP TABLE t1, t2; # diff --git a/mysql-test/suite/json/r/json_agg.result b/mysql-test/suite/json/r/json_agg.result new file mode 100644 index 000000000000..2c7ec6ea8162 --- /dev/null +++ b/mysql-test/suite/json/r/json_agg.result @@ -0,0 +1,1168 @@ +# +# Setup test. +# +CREATE TABLE t1 (a int, k int, b VARCHAR(10)); +INSERT INTO t1 VALUES +(1, 1, "alfa"), +(1, 2, null), +(2, 3, "doi"), +(1, 4, "unu"), +(3, 5, "trei"), +(4, 6, null), +(4, 7, null), +(1, 8, "one"); +# +# Test JSON_ARRAYAGG. +# +FLUSH STATUS; +SELECT a, JSON_ARRAYAGG(b) FROM t1 GROUP BY a; +a JSON_ARRAYAGG(b) +1 ["alfa", null, "unu", "one"] +2 ["doi"] +3 ["trei"] +4 [null, null] +SHOW SESSION STATUS LIKE 'Handler_update%'; +Variable_name Value +Handler_update 0 +SELECT SQL_BIG_RESULT a, JSON_ARRAYAGG(b) FROM t1 GROUP BY a; +a JSON_ARRAYAGG(b) +1 ["alfa", null, "unu", "one"] +2 ["doi"] +3 ["trei"] +4 [null, null] +SELECT SQL_SMALL_RESULT a, JSON_ARRAYAGG(b) FROM t1 GROUP BY a; +a JSON_ARRAYAGG(b) +1 ["alfa", null, "unu", "one"] +2 ["doi"] +3 ["trei"] +4 [null, null] +SHOW SESSION STATUS LIKE 'Handler_update%'; +Variable_name Value +Handler_update 0 +SELECT SQL_BUFFER_RESULT a, JSON_ARRAYAGG(b) FROM t1 GROUP BY a; +a JSON_ARRAYAGG(b) +1 ["alfa", null, "unu", "one"] +2 ["doi"] +3 ["trei"] +4 [null, null] +SHOW SESSION STATUS LIKE 'Handler_update%'; +Variable_name Value +Handler_update 0 +SELECT JSON_ARRAYAGG(b) FROM t1; +JSON_ARRAYAGG(b) +["alfa", null, "doi", "unu", "trei", null, null, "one"] +SELECT SQL_BIG_RESULT JSON_ARRAYAGG(b) FROM t1; +JSON_ARRAYAGG(b) +["alfa", null, "doi", "unu", "trei", null, null, "one"] +SELECT SQL_SMALL_RESULT JSON_ARRAYAGG(b) FROM t1; +JSON_ARRAYAGG(b) +["alfa", null, "doi", "unu", "trei", null, null, "one"] +SELECT SQL_BUFFER_RESULT JSON_ARRAYAGG(b) FROM t1; +JSON_ARRAYAGG(b) +["alfa", null, "doi", "unu", "trei", null, null, "one"] +PREPARE p1 FROM "SELECT a, JSON_ARRAYAGG(b) FROM t1 GROUP BY a"; +EXECUTE p1; +a JSON_ARRAYAGG(b) +1 ["alfa", null, "unu", "one"] +2 ["doi"] +3 ["trei"] +4 [null, null] +EXECUTE p1; +a JSON_ARRAYAGG(b) +1 ["alfa", null, "unu", "one"] +2 ["doi"] +3 ["trei"] +4 [null, null] +deallocate prepare p1; +PREPARE p3 FROM +"SELECT SQL_BUFFER_RESULT a, JSON_ARRAYAGG(b) FROM t1 GROUP BY a"; +EXECUTE p3; +a JSON_ARRAYAGG(b) +1 ["alfa", null, "unu", "one"] +2 ["doi"] +3 ["trei"] +4 [null, null] +EXECUTE p3; +a JSON_ARRAYAGG(b) +1 ["alfa", null, "unu", "one"] +2 ["doi"] +3 ["trei"] +4 [null, null] +deallocate prepare p3; +PREPARE p4 FROM "SELECT JSON_ARRAYAGG(b) FROM t1"; +EXECUTE p4; +JSON_ARRAYAGG(b) +["alfa", null, "doi", "unu", "trei", null, null, "one"] +EXECUTE p4; +JSON_ARRAYAGG(b) +["alfa", null, "doi", "unu", "trei", null, null, "one"] +deallocate prepare p4; +SELECT JSON_MERGE(JSON_ARRAYAGG(b), '[true, false]') FROM t1; +JSON_MERGE(JSON_ARRAYAGG(b), '[true, false]') +["alfa", null, "doi", "unu", "trei", null, null, "one", true, false] +PREPARE p1 FROM +"SELECT a, JSON_MERGE(JSON_ARRAYAGG(b), '[true, false]') FROM t1 GROUP BY a"; +EXECUTE p1; +a JSON_MERGE(JSON_ARRAYAGG(b), '[true, false]') +1 ["alfa", null, "unu", "one", true, false] +2 ["doi", true, false] +3 ["trei", true, false] +4 [null, null, true, false] +EXECUTE p1; +a JSON_MERGE(JSON_ARRAYAGG(b), '[true, false]') +1 ["alfa", null, "unu", "one", true, false] +2 ["doi", true, false] +3 ["trei", true, false] +4 [null, null, true, false] +deallocate prepare p1; +PREPARE p4 FROM +"SELECT JSON_MERGE(JSON_ARRAYAGG(b), '[true, false]') FROM t1"; +EXECUTE p4; +JSON_MERGE(JSON_ARRAYAGG(b), '[true, false]') +["alfa", null, "doi", "unu", "trei", null, null, "one", true, false] +EXECUTE p4; +JSON_MERGE(JSON_ARRAYAGG(b), '[true, false]') +["alfa", null, "doi", "unu", "trei", null, null, "one", true, false] +deallocate prepare p4; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +EXPLAIN SELECT a, JSON_ARRAYAGG(b) FROM t1 GROUP BY a; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 8 100.00 Using filesort +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,json_arrayagg(`test`.`t1`.`b`) AS `JSON_ARRAYAGG(b)` from `test`.`t1` group by `test`.`t1`.`a` +EXPLAIN SELECT JSON_ARRAYAGG(b) FROM t1; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 8 100.00 NULL +Warnings: +Note 1003 /* select#1 */ select json_arrayagg(`test`.`t1`.`b`) AS `JSON_ARRAYAGG(b)` from `test`.`t1` +EXPLAIN FORMAT=json SELECT a, JSON_ARRAYAGG(b) FROM t1 GROUP BY a; +EXPLAIN +{ + "query_block": { + "select_id": 1, + "cost_info": { + "query_cost": "10.60" + }, + "grouping_operation": { + "using_filesort": true, + "cost_info": { + "sort_cost": "8.00" + }, + "table": { + "table_name": "t1", + "access_type": "ALL", + "rows_examined_per_scan": 8, + "rows_produced_per_join": 8, + "filtered": "100.00", + "cost_info": { + "read_cost": "1.00", + "eval_cost": "1.60", + "prefix_cost": "2.60", + "data_read_per_join": "192" + }, + "used_columns": [ + "a", + "b" + ] + } + } + } +} +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,json_arrayagg(`test`.`t1`.`b`) AS `JSON_ARRAYAGG(b)` from `test`.`t1` group by `test`.`t1`.`a` +EXPLAIN FORMAT=json SELECT SQL_BIG_RESULT a, JSON_ARRAYAGG(b) +FROM t1 +GROUP BY a; +EXPLAIN +{ + "query_block": { + "select_id": 1, + "cost_info": { + "query_cost": "10.60" + }, + "grouping_operation": { + "using_filesort": true, + "cost_info": { + "sort_cost": "8.00" + }, + "table": { + "table_name": "t1", + "access_type": "ALL", + "rows_examined_per_scan": 8, + "rows_produced_per_join": 8, + "filtered": "100.00", + "cost_info": { + "read_cost": "1.00", + "eval_cost": "1.60", + "prefix_cost": "2.60", + "data_read_per_join": "192" + }, + "used_columns": [ + "a", + "b" + ] + } + } + } +} +Warnings: +Note 1003 /* select#1 */ select sql_big_result `test`.`t1`.`a` AS `a`,json_arrayagg(`test`.`t1`.`b`) AS `JSON_ARRAYAGG(b)` from `test`.`t1` group by `test`.`t1`.`a` +EXPLAIN FORMAT=json SELECT SQL_SMALL_RESULT a, JSON_ARRAYAGG(b) +FROM t1 +GROUP BY a; +EXPLAIN +{ + "query_block": { + "select_id": 1, + "cost_info": { + "query_cost": "10.60" + }, + "grouping_operation": { + "using_filesort": true, + "cost_info": { + "sort_cost": "8.00" + }, + "table": { + "table_name": "t1", + "access_type": "ALL", + "rows_examined_per_scan": 8, + "rows_produced_per_join": 8, + "filtered": "100.00", + "cost_info": { + "read_cost": "1.00", + "eval_cost": "1.60", + "prefix_cost": "2.60", + "data_read_per_join": "192" + }, + "used_columns": [ + "a", + "b" + ] + } + } + } +} +Warnings: +Note 1003 /* select#1 */ select sql_small_result `test`.`t1`.`a` AS `a`,json_arrayagg(`test`.`t1`.`b`) AS `JSON_ARRAYAGG(b)` from `test`.`t1` group by `test`.`t1`.`a` +EXPLAIN FORMAT=json SELECT SQL_BUFFER_RESULT a, JSON_ARRAYAGG(b) +FROM t1 +GROUP BY a; +EXPLAIN +{ + "query_block": { + "select_id": 1, + "cost_info": { + "query_cost": "10.60" + }, + "grouping_operation": { + "using_filesort": true, + "cost_info": { + "sort_cost": "8.00" + }, + "buffer_result": { + "using_temporary_table": true, + "table": { + "table_name": "t1", + "access_type": "ALL", + "rows_examined_per_scan": 8, + "rows_produced_per_join": 8, + "filtered": "100.00", + "cost_info": { + "read_cost": "1.00", + "eval_cost": "1.60", + "prefix_cost": "2.60", + "data_read_per_join": "192" + }, + "used_columns": [ + "a", + "b" + ] + } + } + } + } +} +Warnings: +Note 1003 /* select#1 */ select sql_buffer_result `test`.`t1`.`a` AS `a`,json_arrayagg(`test`.`t1`.`b`) AS `JSON_ARRAYAGG(b)` from `test`.`t1` group by `test`.`t1`.`a` +EXPLAIN FORMAT=json SELECT JSON_ARRAYAGG(b) FROM t1; +EXPLAIN +{ + "query_block": { + "select_id": 1, + "cost_info": { + "query_cost": "2.60" + }, + "table": { + "table_name": "t1", + "access_type": "ALL", + "rows_examined_per_scan": 8, + "rows_produced_per_join": 8, + "filtered": "100.00", + "cost_info": { + "read_cost": "1.00", + "eval_cost": "1.60", + "prefix_cost": "2.60", + "data_read_per_join": "192" + }, + "used_columns": [ + "b" + ] + } + } +} +Warnings: +Note 1003 /* select#1 */ select json_arrayagg(`test`.`t1`.`b`) AS `JSON_ARRAYAGG(b)` from `test`.`t1` +EXPLAIN FORMAT=json SELECT SQL_BIG_RESULT JSON_ARRAYAGG(b) FROM t1; +EXPLAIN +{ + "query_block": { + "select_id": 1, + "cost_info": { + "query_cost": "2.60" + }, + "table": { + "table_name": "t1", + "access_type": "ALL", + "rows_examined_per_scan": 8, + "rows_produced_per_join": 8, + "filtered": "100.00", + "cost_info": { + "read_cost": "1.00", + "eval_cost": "1.60", + "prefix_cost": "2.60", + "data_read_per_join": "192" + }, + "used_columns": [ + "b" + ] + } + } +} +Warnings: +Note 1003 /* select#1 */ select sql_big_result json_arrayagg(`test`.`t1`.`b`) AS `JSON_ARRAYAGG(b)` from `test`.`t1` +EXPLAIN FORMAT=json SELECT SQL_SMALL_RESULT JSON_ARRAYAGG(b) FROM t1; +EXPLAIN +{ + "query_block": { + "select_id": 1, + "cost_info": { + "query_cost": "2.60" + }, + "table": { + "table_name": "t1", + "access_type": "ALL", + "rows_examined_per_scan": 8, + "rows_produced_per_join": 8, + "filtered": "100.00", + "cost_info": { + "read_cost": "1.00", + "eval_cost": "1.60", + "prefix_cost": "2.60", + "data_read_per_join": "192" + }, + "used_columns": [ + "b" + ] + } + } +} +Warnings: +Note 1003 /* select#1 */ select sql_small_result json_arrayagg(`test`.`t1`.`b`) AS `JSON_ARRAYAGG(b)` from `test`.`t1` +EXPLAIN FORMAT=json SELECT SQL_BUFFER_RESULT JSON_ARRAYAGG(b) FROM t1; +EXPLAIN +{ + "query_block": { + "select_id": 1, + "cost_info": { + "query_cost": "2.60" + }, + "buffer_result": { + "using_temporary_table": true, + "table": { + "table_name": "t1", + "access_type": "ALL", + "rows_examined_per_scan": 8, + "rows_produced_per_join": 8, + "filtered": "100.00", + "cost_info": { + "read_cost": "1.00", + "eval_cost": "1.60", + "prefix_cost": "2.60", + "data_read_per_join": "192" + }, + "used_columns": [ + "b" + ] + } + } + } +} +Warnings: +Note 1003 /* select#1 */ select sql_buffer_result json_arrayagg(`test`.`t1`.`b`) AS `JSON_ARRAYAGG(b)` from `test`.`t1` +SELECT a, JSON_ARRAYAGG(b) FROM t1 GROUP BY a WITH ROLLUP; +a JSON_ARRAYAGG(b) +1 ["alfa", null, "unu", "one"] +2 ["doi"] +3 ["trei"] +4 [null, null] +NULL ["alfa", null, "unu", "one", "doi", "trei", null, null] +SELECT a, JSON_ARRAYAGG(b) as jarray +FROM t1 +GROUP BY a +HAVING jarray= JSON_ARRAY("trei"); +a jarray +3 ["trei"] +# +# Test JSON_OBJECTAGG. +# +FLUSH STATUS; +SELECT a, JSON_OBJECTAGG(k, b) FROM t1 GROUP BY a; +a JSON_OBJECTAGG(k, b) +1 {"1": "alfa", "2": null, "4": "unu", "8": "one"} +2 {"3": "doi"} +3 {"5": "trei"} +4 {"6": null, "7": null} +SHOW SESSION STATUS LIKE 'Handler_update%'; +Variable_name Value +Handler_update 0 +SELECT JSON_OBJECTAGG(k, b) FROM t1; +JSON_OBJECTAGG(k, b) +{"1": "alfa", "2": null, "3": "doi", "4": "unu", "5": "trei", "6": null, "7": null, "8": "one"} +SHOW SESSION STATUS LIKE 'Handler_update%'; +Variable_name Value +Handler_update 0 +PREPARE p1 FROM "SELECT a, JSON_OBJECTAGG(k, b) FROM t1 GROUP BY a"; +EXECUTE p1; +a JSON_OBJECTAGG(k, b) +1 {"1": "alfa", "2": null, "4": "unu", "8": "one"} +2 {"3": "doi"} +3 {"5": "trei"} +4 {"6": null, "7": null} +EXECUTE p1; +a JSON_OBJECTAGG(k, b) +1 {"1": "alfa", "2": null, "4": "unu", "8": "one"} +2 {"3": "doi"} +3 {"5": "trei"} +4 {"6": null, "7": null} +deallocate prepare p1; +PREPARE p4 FROM "SELECT JSON_OBJECTAGG(k, b) FROM t1"; +EXECUTE p4; +JSON_OBJECTAGG(k, b) +{"1": "alfa", "2": null, "3": "doi", "4": "unu", "5": "trei", "6": null, "7": null, "8": "one"} +EXECUTE p4; +JSON_OBJECTAGG(k, b) +{"1": "alfa", "2": null, "3": "doi", "4": "unu", "5": "trei", "6": null, "7": null, "8": "one"} +deallocate prepare p4; +SELECT a, JSON_MERGE(JSON_OBJECTAGG(k, b), '[true, false]') FROM t1 GROUP BY a; +a JSON_MERGE(JSON_OBJECTAGG(k, b), '[true, false]') +1 [{"1": "alfa", "2": null, "4": "unu", "8": "one"}, true, false] +2 [{"3": "doi"}, true, false] +3 [{"5": "trei"}, true, false] +4 [{"6": null, "7": null}, true, false] +SELECT JSON_MERGE(JSON_OBJECTAGG(k, b), '[true, false]') FROM t1; +JSON_MERGE(JSON_OBJECTAGG(k, b), '[true, false]') +[{"1": "alfa", "2": null, "3": "doi", "4": "unu", "5": "trei", "6": null, "7": null, "8": "one"}, true, false] +PREPARE p1 FROM +"SELECT a, JSON_MERGE(JSON_OBJECTAGG(k, b), '[true, false]') +FROM t1 +GROUP BY a"; +EXECUTE p1; +a JSON_MERGE(JSON_OBJECTAGG(k, b), '[true, false]') +1 [{"1": "alfa", "2": null, "4": "unu", "8": "one"}, true, false] +2 [{"3": "doi"}, true, false] +3 [{"5": "trei"}, true, false] +4 [{"6": null, "7": null}, true, false] +EXECUTE p1; +a JSON_MERGE(JSON_OBJECTAGG(k, b), '[true, false]') +1 [{"1": "alfa", "2": null, "4": "unu", "8": "one"}, true, false] +2 [{"3": "doi"}, true, false] +3 [{"5": "trei"}, true, false] +4 [{"6": null, "7": null}, true, false] +deallocate prepare p1; +PREPARE p4 FROM +"SELECT JSON_MERGE(JSON_OBJECTAGG(k, b), '[true, false]') FROM t1"; +EXECUTE p4; +JSON_MERGE(JSON_OBJECTAGG(k, b), '[true, false]') +[{"1": "alfa", "2": null, "3": "doi", "4": "unu", "5": "trei", "6": null, "7": null, "8": "one"}, true, false] +EXECUTE p4; +JSON_MERGE(JSON_OBJECTAGG(k, b), '[true, false]') +[{"1": "alfa", "2": null, "3": "doi", "4": "unu", "5": "trei", "6": null, "7": null, "8": "one"}, true, false] +deallocate prepare p4; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +EXPLAIN SELECT a, JSON_OBJECTAGG(k, b) FROM t1 GROUP BY a; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 8 100.00 Using filesort +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,json_objectagg(`test`.`t1`.`k`,`test`.`t1`.`b`) AS `JSON_OBJECTAGG(k, b)` from `test`.`t1` group by `test`.`t1`.`a` +EXPLAIN SELECT JSON_OBJECTAGG(k, b) FROM t1; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 8 100.00 NULL +Warnings: +Note 1003 /* select#1 */ select json_objectagg(`test`.`t1`.`k`,`test`.`t1`.`b`) AS `JSON_OBJECTAGG(k, b)` from `test`.`t1` +EXPLAIN FORMAT=json SELECT a, JSON_OBJECTAGG(k, b) FROM t1 GROUP BY a; +EXPLAIN +{ + "query_block": { + "select_id": 1, + "cost_info": { + "query_cost": "10.60" + }, + "grouping_operation": { + "using_filesort": true, + "cost_info": { + "sort_cost": "8.00" + }, + "table": { + "table_name": "t1", + "access_type": "ALL", + "rows_examined_per_scan": 8, + "rows_produced_per_join": 8, + "filtered": "100.00", + "cost_info": { + "read_cost": "1.00", + "eval_cost": "1.60", + "prefix_cost": "2.60", + "data_read_per_join": "192" + }, + "used_columns": [ + "a", + "k", + "b" + ] + } + } + } +} +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,json_objectagg(`test`.`t1`.`k`,`test`.`t1`.`b`) AS `JSON_OBJECTAGG(k, b)` from `test`.`t1` group by `test`.`t1`.`a` +EXPLAIN FORMAT=json SELECT JSON_OBJECTAGG(k, b) FROM t1; +EXPLAIN +{ + "query_block": { + "select_id": 1, + "cost_info": { + "query_cost": "2.60" + }, + "table": { + "table_name": "t1", + "access_type": "ALL", + "rows_examined_per_scan": 8, + "rows_produced_per_join": 8, + "filtered": "100.00", + "cost_info": { + "read_cost": "1.00", + "eval_cost": "1.60", + "prefix_cost": "2.60", + "data_read_per_join": "192" + }, + "used_columns": [ + "k", + "b" + ] + } + } +} +Warnings: +Note 1003 /* select#1 */ select json_objectagg(`test`.`t1`.`k`,`test`.`t1`.`b`) AS `JSON_OBJECTAGG(k, b)` from `test`.`t1` +SELECT a, JSON_OBJECTAGG(k, b) FROM t1 GROUP BY a WITH ROLLUP; +a JSON_OBJECTAGG(k, b) +1 {"1": "alfa", "2": null, "4": "unu", "8": "one"} +2 {"3": "doi"} +3 {"5": "trei"} +4 {"6": null, "7": null} +NULL {"1": "alfa", "2": null, "3": "doi", "4": "unu", "5": "trei", "6": null, "7": null, "8": "one"} +SELECT a, JSON_OBJECTAGG(k, b) as jobject +FROM t1 +GROUP BY a +HAVING jobject = JSON_OBJECT(3, "doi"); +a jobject +2 {"3": "doi"} +# +# NULL values. +# +SELECT a, JSON_ARRAYAGG(null) FROM t1 GROUP BY a; +a JSON_ARRAYAGG(null) +1 [null, null, null, null] +2 [null] +3 [null] +4 [null, null] +SELECT JSON_ARRAYAGG(null) FROM t1; +JSON_ARRAYAGG(null) +[null, null, null, null, null, null, null, null] +SELECT a, JSON_OBJECTAGG(k, null) FROM t1 GROUP BY a; +a JSON_OBJECTAGG(k, null) +1 {"1": null, "2": null, "4": null, "8": null} +2 {"3": null} +3 {"5": null} +4 {"6": null, "7": null} +SELECT JSON_OBJECTAGG(k, null) FROM t1; +JSON_OBJECTAGG(k, null) +{"1": null, "2": null, "3": null, "4": null, "5": null, "6": null, "7": null, "8": null} +SELECT a, JSON_OBJECTAGG(null, b) FROM t1 GROUP BY a; +ERROR 22032: JSON documents may not contain NULL member names. +SELECT JSON_OBJECTAGG(null, b) FROM t1; +ERROR 22032: JSON documents may not contain NULL member names. +# +# Coverage test for fix_fields: Disable_semijoin_flattening. +# +CREATE TABLE t(a INT); +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +EXPLAIN format=json SELECT (SELECT 1 FROM t WHERE JSON_ARRAYAGG(1 IN (SELECT 1 FROM t))); +EXPLAIN +{ + "query_block": { + "select_id": 1, + "message": "No tables used", + "optimized_away_subqueries": [ + { + "dependent": true, + "cacheable": false, + "query_block": { + "select_id": 2, + "cost_info": { + "query_cost": "1.20" + }, + "table": { + "table_name": "t", + "access_type": "ALL", + "rows_examined_per_scan": 1, + "rows_produced_per_join": 1, + "filtered": "100.00", + "cost_info": { + "read_cost": "1.00", + "eval_cost": "0.20", + "prefix_cost": "1.20", + "data_read_per_join": "8" + }, + "attached_condition": "json_arrayagg((1,(/* select#3 */ select 1 from `test`.`t` where 1)))" + }, + "optimized_away_subqueries": [ + { + "dependent": false, + "cacheable": true, + "query_block": { + "select_id": 3, + "cost_info": { + "query_cost": "1.20" + }, + "table": { + "table_name": "t", + "access_type": "ALL", + "rows_examined_per_scan": 1, + "rows_produced_per_join": 1, + "filtered": "100.00", + "cost_info": { + "read_cost": "1.00", + "eval_cost": "0.20", + "prefix_cost": "1.20", + "data_read_per_join": "8" + } + } + } + } + ] + } + } + ] + } +} +Warnings: +Note 1003 /* select#1 */ select (/* select#2 */ select 1 from `test`.`t` where json_arrayagg((1,(/* select#3 */ select 1 from `test`.`t` where 1)))) AS `(SELECT 1 FROM t WHERE JSON_ARRAYAGG(1 IN (SELECT 1 FROM t)))` +SELECT (SELECT 1 FROM t WHERE JSON_ARRAYAGG(1 IN (SELECT 1 FROM t))); +(SELECT 1 FROM t WHERE JSON_ARRAYAGG(1 IN (SELECT 1 FROM t))) +NULL +DROP TABLE t; +# +# Coverage test for fix_fields: check_cols. +# +SELECT JSON_ARRAYAGG((SELECT 1, 1)); +ERROR 21000: Operand should contain 1 column(s) +# +# Coverage test for fix_fields: resolve_type. +# +CREATE TABLE t2(gid int, a int); +SELECT JSON_ARRAYAGG(ST_PointFromText('POINT(10 10)')) FROM t2; +ERROR HY000: Incorrect arguments to json_arrayagg( +# +# Coverage test for fix_fields: check_sum_func. +# +SELECT (SELECT JSON_ARRAYAGG(COUNT(a)) FROM t2) FROM t1; +ERROR HY000: Invalid use of group function +DROP TABLE t2; +# +# Empty table. +# +TRUNCATE TABLE t1; +SELECT a, JSON_ARRAYAGG(b) FROM t1 GROUP BY a; +a JSON_ARRAYAGG(b) +SELECT JSON_ARRAYAGG(b) FROM t1; +JSON_ARRAYAGG(b) +NULL +SELECT a, JSON_OBJECTAGG(k, b) FROM t1 GROUP BY a; +a JSON_OBJECTAGG(k, b) +SELECT JSON_OBJECTAGG(k, b) FROM t1; +JSON_OBJECTAGG(k, b) +NULL +# +# Tests for max_allowed_packet. +# +CREATE TABLE t(id INT PRIMARY KEY AUTO_INCREMENT, x INT); +INSERT INTO t(x) VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10); +INSERT INTO t(x) SELECT t1.x from t t1, t t2, t t3; +SET GLOBAL net_buffer_length = 1024; +SET GLOBAL max_allowed_packet = 1024; +SELECT JSON_ARRAYAGG(x) FROM t; +JSON_ARRAYAGG(x) +NULL +Warnings: +Warning 1301 Result of json_arrayagg(() was larger than max_allowed_packet (1024) - truncated +SELECT JSON_OBJECTAGG(id, x) FROM t; +JSON_OBJECTAGG(id, x) +NULL +Warnings: +Warning 1301 Result of json_objectagg(() was larger than max_allowed_packet (1024) - truncated +SELECT id % 2 AS i, JSON_ARRAYAGG(x) FROM t GROUP BY i; +i JSON_ARRAYAGG(x) +0 NULL +1 NULL +Warnings: +Warning 1301 Result of json_arrayagg(() was larger than max_allowed_packet (1024) - truncated +Warning 1301 Result of json_arrayagg(() was larger than max_allowed_packet (1024) - truncated +SELECT id % 2 AS i, JSON_OBJECTAGG(id, x) FROM t GROUP BY i; +i JSON_OBJECTAGG(id, x) +0 NULL +1 NULL +Warnings: +Warning 1301 Result of json_objectagg(() was larger than max_allowed_packet (1024) - truncated +Warning 1301 Result of json_objectagg(() was larger than max_allowed_packet (1024) - truncated +SET GLOBAL max_allowed_packet = default; +SET GLOBAL net_buffer_length = default; +DROP TABLE t; +# +# Cleanup test. +# +DROP TABLE t1; +# +# Bug #24368053 +# WL#7987: ASSERTION `!TABLE || (!TABLE->WRITE_SET || BITMAP_IS_SET(TABLE-> ... +# +CREATE TABLE C(col_int int); +CREATE TABLE CC(col_int int); +INSERT INTO CC VALUES (1),(2),(3); +SELECT JSON_OBJECTAGG(table1.`col_int` ,table1.`col_int`) AS field2, +(SELECT JSON_ARRAYAGG(SUBQUERY2_t1.`col_int`) +FROM CC AS SUBQUERY2_t1 +WHERE SUBQUERY2_t1.`col_int` <> table1.`col_int`) AS field5 +FROM (CC AS table1) +WHERE (table1.`col_int` <> ALL (SELECT SUBQUERY4_t1.`col_int` + FROM (CC AS SUBQUERY4_t1 STRAIGHT_JOIN C))) +GROUP BY +field5; +field2 field5 +{"3": 3} [1, 2] +{"2": 2} [1, 3] +{"1": 1} [2, 3] +Warnings: +Warning 1235 This version of MySQL doesn't yet support 'sorting of non-scalar JSON values' +DROP TABLE C; +DROP TABLE CC; +# +# Bug #24367384 +# WL#7987: INNODB: ASSERTION FAILURE: ROW0SEL.CC:2558:FIELD->PREFIX_LEN > 0 ... +# +CREATE TABLE BB (pk INT AUTO_INCREMENT PRIMARY KEY, col_varchar_key VARCHAR(1)); +INSERT INTO BB VALUES(1,'a'); +SELECT (SELECT JSON_ARRAYAGG(`pk`) FROM BB as t1 +WHERE t1.`col_varchar_key` <> t2.`col_varchar_key`) AS field2 +FROM BB as t2 +GROUP BY field2; +field2 +NULL +SELECT (SELECT JSON_ARRAYAGG(`pk`) FROM BB as t1 +WHERE t1.`col_varchar_key` = t2.`col_varchar_key`) AS field2 +FROM BB as t2 +GROUP BY field2; +field2 +[1] +Warnings: +Warning 1235 This version of MySQL doesn't yet support 'sorting of non-scalar JSON values' +DROP TABLE BB; +# +# Bug #24365264 +# WL#7987: SIG 11 IN ITEM::MARK_FIELD_IN_MAP|SQL/ITEM.H +# +CREATE TABLE C (col_int int); +INSERT INTO C VALUES (1); +SELECT * +FROM C WHERE col_int < (SELECT JSON_ARRAYAGG(col_int) FROM C ) +ORDER BY col_int ; +col_int +1 +DROP TABLE C; +# +# Bug #24366341 +# WL#7987: SIG 6 IN JSON_WRAPPER::TYPE|SQL/JSON_DOM.CC +# +CREATE TABLE CC(col_varchar_key varchar(1)); +INSERT INTO CC VALUES ('a'); +SELECT JSON_ARRAYAGG(col_varchar_key) AS field1 FROM CC HAVING field1 > 9; +field1 +["a"] +SELECT JSON_OBJECTAGG(col_varchar_key, col_varchar_key) AS field1 FROM CC +HAVING (field1 <> 'a' AND field1 != 'e'); +field1 +{"a": "a"} +DROP TABLE CC; +# +# with ROLLUP + two/three groups +# +CREATE TABLE tg (g1 int, g2 int, k int, b VARCHAR(10)); +INSERT INTO tg VALUES +(1, 1, 1, "alfa"), +(1, 2, 2, null), +(2, 3, 3, "doi"), +(1, 1, 4, "unu"), +(3, 2, 5, "trei"), +(4, 3, 6, null), +(4, 1, 7, null), +(1, 2, 8, "one"); +SELECT g1, g2, JSON_ARRAYAGG(g2) FROM tg GROUP BY g1, g2 with rollup; +g1 g2 JSON_ARRAYAGG(g2) +1 1 [1, 1] +1 2 [2, 2] +1 NULL [1, 1, 2, 2] +2 3 [3] +2 NULL [3] +3 2 [2] +3 NULL [2] +4 1 [1] +4 3 [3] +4 NULL [1, 3] +NULL NULL [1, 1, 2, 2, 3, 2, 1, 3] +SELECT g1, g2, JSON_OBJECTAGG(k, g1) FROM tg GROUP BY g1, g2 with rollup; +g1 g2 JSON_OBJECTAGG(k, g1) +1 1 {"1": 1, "4": 1} +1 2 {"2": 1, "8": 1} +1 NULL {"1": 1, "2": 1, "4": 1, "8": 1} +2 3 {"3": 2} +2 NULL {"3": 2} +3 2 {"5": 3} +3 NULL {"5": 3} +4 1 {"7": 4} +4 3 {"6": 4} +4 NULL {"6": 4, "7": 4} +NULL NULL {"1": 1, "2": 1, "3": 2, "4": 1, "5": 3, "6": 4, "7": 4, "8": 1} +CREATE TABLE tg3 (g1 int, g2 int, g3 int, k int, b VARCHAR(10)); +INSERT INTO tg3 VALUES +(1, 1, 1, 1, "1.1.1"), +(1, 1, 2, 2, "1.1.2"), +(1, 1, 3, 3, "1.1.3"), +(1, 2, 1, 4, "1.2.1"), +(1, 2, 2, 5, "1.2.2"), +(1, 2, 3, 6, "1.2.3"), +(1, 3, 1, 7, "1.3.1"), +(1, 3, 2, 8, "1.3.2"), +(1, 3, 3, 9, "1.3.3"), +(2, 1, 1, 10, "2.1.1"), +(2, 1, 2, 11, "2.1.2"), +(2, 1, 3, 12, "2.1.3"), +(2, 2, 1, 13, "2.2.1"), +(2, 2, 2, 14, "2.2.2"), +(2, 2, 3, 15, "2.2.3"), +(2, 3, 1, 16, "2.3.1"), +(2, 3, 2, 17, "2.3.2"), +(2, 3, 3, 18, "2.3.3"), +(3, 1, 1, 19, "3.1.1"), +(3, 1, 2, 20, "3.1.2"), +(3, 1, 3, 21, "3.1.3"), +(3, 2, 1, 22, "3.2.1"), +(3, 2, 2, 23, "3.2.2"), +(3, 2, 3, 24, "3.2.3"), +(3, 3, 1, 25, "3.3.1"), +(3, 3, 2, 26, "3.3.2"), +(3, 3, 3, 27, "3.3.3"); +SELECT g1, g2, g3, JSON_ARRAYAGG(b) FROM tg3 GROUP BY g1, g2, g3 with rollup; +g1 g2 g3 JSON_ARRAYAGG(b) +1 1 1 ["1.1.1"] +1 1 2 ["1.1.2"] +1 1 3 ["1.1.3"] +1 1 NULL ["1.1.1", "1.1.2", "1.1.3"] +1 2 1 ["1.2.1"] +1 2 2 ["1.2.2"] +1 2 3 ["1.2.3"] +1 2 NULL ["1.2.1", "1.2.2", "1.2.3"] +1 3 1 ["1.3.1"] +1 3 2 ["1.3.2"] +1 3 3 ["1.3.3"] +1 3 NULL ["1.3.1", "1.3.2", "1.3.3"] +1 NULL NULL ["1.1.1", "1.1.2", "1.1.3", "1.2.1", "1.2.2", "1.2.3", "1.3.1", "1.3.2", "1.3.3"] +2 1 1 ["2.1.1"] +2 1 2 ["2.1.2"] +2 1 3 ["2.1.3"] +2 1 NULL ["2.1.1", "2.1.2", "2.1.3"] +2 2 1 ["2.2.1"] +2 2 2 ["2.2.2"] +2 2 3 ["2.2.3"] +2 2 NULL ["2.2.1", "2.2.2", "2.2.3"] +2 3 1 ["2.3.1"] +2 3 2 ["2.3.2"] +2 3 3 ["2.3.3"] +2 3 NULL ["2.3.1", "2.3.2", "2.3.3"] +2 NULL NULL ["2.1.1", "2.1.2", "2.1.3", "2.2.1", "2.2.2", "2.2.3", "2.3.1", "2.3.2", "2.3.3"] +3 1 1 ["3.1.1"] +3 1 2 ["3.1.2"] +3 1 3 ["3.1.3"] +3 1 NULL ["3.1.1", "3.1.2", "3.1.3"] +3 2 1 ["3.2.1"] +3 2 2 ["3.2.2"] +3 2 3 ["3.2.3"] +3 2 NULL ["3.2.1", "3.2.2", "3.2.3"] +3 3 1 ["3.3.1"] +3 3 2 ["3.3.2"] +3 3 3 ["3.3.3"] +3 3 NULL ["3.3.1", "3.3.2", "3.3.3"] +3 NULL NULL ["3.1.1", "3.1.2", "3.1.3", "3.2.1", "3.2.2", "3.2.3", "3.3.1", "3.3.2", "3.3.3"] +NULL NULL NULL ["1.1.1", "1.1.2", "1.1.3", "1.2.1", "1.2.2", "1.2.3", "1.3.1", "1.3.2", "1.3.3", "2.1.1", "2.1.2", "2.1.3", "2.2.1", "2.2.2", "2.2.3", "2.3.1", "2.3.2", "2.3.3", "3.1.1", "3.1.2", "3.1.3", "3.2.1", "3.2.2", "3.2.3", "3.3.1", "3.3.2", "3.3.3"] +SELECT g1, g2, g3, JSON_OBJECTAGG(k, b) FROM tg3 GROUP BY g1, g2, g3 with rollup; +g1 g2 g3 JSON_OBJECTAGG(k, b) +1 1 1 {"1": "1.1.1"} +1 1 2 {"2": "1.1.2"} +1 1 3 {"3": "1.1.3"} +1 1 NULL {"1": "1.1.1", "2": "1.1.2", "3": "1.1.3"} +1 2 1 {"4": "1.2.1"} +1 2 2 {"5": "1.2.2"} +1 2 3 {"6": "1.2.3"} +1 2 NULL {"4": "1.2.1", "5": "1.2.2", "6": "1.2.3"} +1 3 1 {"7": "1.3.1"} +1 3 2 {"8": "1.3.2"} +1 3 3 {"9": "1.3.3"} +1 3 NULL {"7": "1.3.1", "8": "1.3.2", "9": "1.3.3"} +1 NULL NULL {"1": "1.1.1", "2": "1.1.2", "3": "1.1.3", "4": "1.2.1", "5": "1.2.2", "6": "1.2.3", "7": "1.3.1", "8": "1.3.2", "9": "1.3.3"} +2 1 1 {"10": "2.1.1"} +2 1 2 {"11": "2.1.2"} +2 1 3 {"12": "2.1.3"} +2 1 NULL {"10": "2.1.1", "11": "2.1.2", "12": "2.1.3"} +2 2 1 {"13": "2.2.1"} +2 2 2 {"14": "2.2.2"} +2 2 3 {"15": "2.2.3"} +2 2 NULL {"13": "2.2.1", "14": "2.2.2", "15": "2.2.3"} +2 3 1 {"16": "2.3.1"} +2 3 2 {"17": "2.3.2"} +2 3 3 {"18": "2.3.3"} +2 3 NULL {"16": "2.3.1", "17": "2.3.2", "18": "2.3.3"} +2 NULL NULL {"10": "2.1.1", "11": "2.1.2", "12": "2.1.3", "13": "2.2.1", "14": "2.2.2", "15": "2.2.3", "16": "2.3.1", "17": "2.3.2", "18": "2.3.3"} +3 1 1 {"19": "3.1.1"} +3 1 2 {"20": "3.1.2"} +3 1 3 {"21": "3.1.3"} +3 1 NULL {"19": "3.1.1", "20": "3.1.2", "21": "3.1.3"} +3 2 1 {"22": "3.2.1"} +3 2 2 {"23": "3.2.2"} +3 2 3 {"24": "3.2.3"} +3 2 NULL {"22": "3.2.1", "23": "3.2.2", "24": "3.2.3"} +3 3 1 {"25": "3.3.1"} +3 3 2 {"26": "3.3.2"} +3 3 3 {"27": "3.3.3"} +3 3 NULL {"25": "3.3.1", "26": "3.3.2", "27": "3.3.3"} +3 NULL NULL {"19": "3.1.1", "20": "3.1.2", "21": "3.1.3", "22": "3.2.1", "23": "3.2.2", "24": "3.2.3", "25": "3.3.1", "26": "3.3.2", "27": "3.3.3"} +NULL NULL NULL {"1": "1.1.1", "2": "1.1.2", "3": "1.1.3", "4": "1.2.1", "5": "1.2.2", "6": "1.2.3", "7": "1.3.1", "8": "1.3.2", "9": "1.3.3", "10": "2.1.1", "11": "2.1.2", "12": "2.1.3", "13": "2.2.1", "14": "2.2.2", "15": "2.2.3", "16": "2.3.1", "17": "2.3.2", "18": "2.3.3", "19": "3.1.1", "20": "3.1.2", "21": "3.1.3", "22": "3.2.1", "23": "3.2.2", "24": "3.2.3", "25": "3.3.1", "26": "3.3.2", "27": "3.3.3"} +DROP TABLE tg; +DROP TABLE tg3; +# +# Tests duplicates for JSON_OBJECTAGG +# +CREATE TABLE t1 (a int, k int, b VARCHAR(10)); +INSERT INTO t1 VALUES +(1, 1, "1.1"), +(1, 1, "1.2"), +(1, 1, "1.3"), +(2, 2, "2.1"), +(2, 2, "2.2"), +(2, 2, "2.3"); +SELECT a, JSON_OBJECTAGG(k, b) FROM t1 GROUP BY a; +a JSON_OBJECTAGG(k, b) +1 {"1": "1.1"} +2 {"2": "2.1"} +SELECT a, JSON_ARRAYAGG(b) FROM t1 GROUP BY a; +a JSON_ARRAYAGG(b) +1 ["1.1", "1.2", "1.3"] +2 ["2.1", "2.2", "2.3"] +DROP TABLE t1; +# +# Tests with ORDER BY, DISTINCT +# +CREATE TABLE t1 (a int, k int, b VARCHAR(10)); +INSERT INTO t1 VALUES +(2, 8, "2.3"), +(1, 7, "1.1"), +(3, 6, "3.2"), +(2, 5, "2.2"), +(3, 9, "3.1"), +(1, 4, "1.2"), +(3, 3, "3.3"), +(2, 2, "2.1"), +(1, 1, "1.3"); +SELECT a, JSON_ARRAYAGG(b) FROM t1 GROUP BY a; +a JSON_ARRAYAGG(b) +1 ["1.1", "1.2", "1.3"] +2 ["2.3", "2.2", "2.1"] +3 ["3.2", "3.1", "3.3"] +SELECT DISTINCT a, JSON_ARRAYAGG(b) FROM t1 GROUP BY a; +a JSON_ARRAYAGG(b) +1 ["1.1", "1.2", "1.3"] +2 ["2.3", "2.2", "2.1"] +3 ["3.2", "3.1", "3.3"] +SELECT DISTINCT a, JSON_ARRAYAGG(b) FROM t1 GROUP BY a ORDER BY a ASC; +a JSON_ARRAYAGG(b) +1 ["1.1", "1.2", "1.3"] +2 ["2.3", "2.2", "2.1"] +3 ["3.2", "3.1", "3.3"] +SELECT DISTINCT a, JSON_ARRAYAGG(b) FROM t1 GROUP BY a ORDER BY a DESC; +a JSON_ARRAYAGG(b) +3 ["3.2", "3.1", "3.3"] +2 ["2.3", "2.2", "2.1"] +1 ["1.1", "1.2", "1.3"] +SELECT a, JSON_OBJECTAGG(k, b) FROM t1 GROUP BY a; +a JSON_OBJECTAGG(k, b) +1 {"1": "1.3", "4": "1.2", "7": "1.1"} +2 {"2": "2.1", "5": "2.2", "8": "2.3"} +3 {"3": "3.3", "6": "3.2", "9": "3.1"} +SELECT DISTINCT a, JSON_OBJECTAGG(k, b) FROM t1 GROUP BY a; +a JSON_OBJECTAGG(k, b) +1 {"1": "1.3", "4": "1.2", "7": "1.1"} +2 {"2": "2.1", "5": "2.2", "8": "2.3"} +3 {"3": "3.3", "6": "3.2", "9": "3.1"} +SELECT DISTINCT a, JSON_OBJECTAGG(k, b) FROM t1 GROUP BY a ORDER BY a ASC; +a JSON_OBJECTAGG(k, b) +1 {"1": "1.3", "4": "1.2", "7": "1.1"} +2 {"2": "2.1", "5": "2.2", "8": "2.3"} +3 {"3": "3.3", "6": "3.2", "9": "3.1"} +SELECT DISTINCT a, JSON_OBJECTAGG(k, b) FROM t1 GROUP BY a ORDER BY a DESC; +a JSON_OBJECTAGG(k, b) +3 {"3": "3.3", "6": "3.2", "9": "3.1"} +2 {"2": "2.1", "5": "2.2", "8": "2.3"} +1 {"1": "1.3", "4": "1.2", "7": "1.1"} +DROP TABLE t1; +# +# Tests with joins +# +CREATE TABLE t(id INT PRIMARY KEY AUTO_INCREMENT, t1 INT, t2 INT); +CREATE TABLE p(id INT PRIMARY KEY AUTO_INCREMENT, p1 INT, p2 INT); +INSERT INTO t(t1, t2) VALUES (1, 1), (2, 1), (3,3), (1, 4); +INSERT INTO p(p1, p2) VALUES (2, 1), (1, 1), (3,3), (2, 4); +FLUSH STATUS; +SHOW SESSION STATUS LIKE 'Handler_update%'; +Variable_name Value +Handler_update 0 +SELECT JSON_ARRAYAGG(t2) FROM t join p on t.t1=p.p1; +SHOW SESSION STATUS LIKE 'Handler_update%'; +Variable_name Value +Handler_update 0 +SELECT t1, JSON_ARRAYAGG(t2) FROM t join p on t.t1=p.p1 group by t1; +SHOW SESSION STATUS LIKE 'Handler_update%'; +Variable_name Value +Handler_update 0 +SELECT (SELECT 1 AS foo ORDER BY JSON_ARRAYAGG(t2)) AS x FROM t; +x +1 +SELECT t1 FROM t ORDER BY (SELECT JSON_ARRAYAGG(t1) FROM t AS t2); +t1 +1 +2 +3 +1 +SELECT JSON_ARRAYAGG(t1) FROM t +ORDER BY (SELECT JSON_ARRAYAGG(t1) FROM t AS t2); +JSON_ARRAYAGG(t1) +[1, 2, 3, 1] +SELECT (SELECT JSON_ARRAYAGG(t1_outer.t1) FROM t AS t1_inner LIMIT 1) as f +FROM t AS t1_outer GROUP BY t1_outer.t2; +f +[1, 2] +[3] +[1] +DROP TABLE t; +DROP TABLE p; +# +# Tests with JSON +# +CREATE TABLE t(id INT PRIMARY KEY AUTO_INCREMENT, k INT, j JSON); +INSERT INTO t(k, j) VALUES +(1, '[1,2,3,4]'), +(2, '{"prop1": 1}'), +(1, '[3]'), +(2, '{"prop2": 2, "prop10": 10}'), +(1, '[99]'); +SELECT k, JSON_ARRAYAGG(j) FROM t GROUP BY k; +k JSON_ARRAYAGG(j) +1 [[1, 2, 3, 4], [3], [99]] +2 [{"prop1": 1}, {"prop2": 2, "prop10": 10}] +SELECT k, JSON_OBJECTAGG(id, j) FROM t GROUP BY k; +k JSON_OBJECTAGG(id, j) +1 {"1": [1, 2, 3, 4], "3": [3], "5": [99]} +2 {"2": {"prop1": 1}, "4": {"prop2": 2, "prop10": 10}} +DROP TABLE t; +# +# Coverage tests for val_* functions +# +CREATE TABLE t2(gid int, a int); +INSERT INTO t2(gid, a) VALUES (1, 1), (1, 2), (2, 4), (2, 8); +SELECT gid, 1.0 * JSON_ARRAYAGG(a) FROM t2 GROUP BY gid; +gid 1.0 * JSON_ARRAYAGG(a) +1 0.0 +2 0.0 +Warnings: +Warning 3156 Invalid JSON value for CAST to DOUBLE from column json_arrayagg( at row 3 +Warning 3156 Invalid JSON value for CAST to DOUBLE from column json_arrayagg( at row 5 +SELECT gid, 0x30 << JSON_ARRAYAGG(a) FROM t2 GROUP BY gid; +gid 0x30 << JSON_ARRAYAGG(a) +1 48 +2 48 +Warnings: +Warning 3156 Invalid JSON value for CAST to INTEGER from column json_arrayagg( at row 3 +Warning 3156 Invalid JSON value for CAST to INTEGER from column json_arrayagg( at row 5 +SELECT gid, DATE_ADD(JSON_ARRAYAGG(a), INTERVAL 31 DAY) +FROM t2 GROUP BY gid; +gid DATE_ADD(JSON_ARRAYAGG(a), INTERVAL 31 DAY) +1 NULL +2 NULL +Warnings: +Warning 3156 Invalid JSON value for CAST to DATE/TIME/DATETIME/TIMESTAMP from column json_arrayagg( at row 3 +Warning 3156 Invalid JSON value for CAST to DATE/TIME/DATETIME/TIMESTAMP from column json_arrayagg( at row 5 +SELECT gid, ADDTIME(JSON_ARRAYAGG(a), '02:00:00.999998') +FROM t2 GROUP BY gid; +gid ADDTIME(JSON_ARRAYAGG(a), '02:00:00.999998') +1 NULL +2 NULL +Warnings: +Warning 3156 Invalid JSON value for CAST to DATE/TIME/DATETIME/TIMESTAMP from column json_arrayagg( at row 3 +Warning 3156 Invalid JSON value for CAST to DATE/TIME/DATETIME/TIMESTAMP from column json_arrayagg( at row 5 +SELECT gid, SEC_TO_TIME(JSON_ARRAYAGG(a)) FROM t2 GROUP BY gid; +gid SEC_TO_TIME(JSON_ARRAYAGG(a)) +1 00:00:00 +2 00:00:00 +Warnings: +Warning 3156 Invalid JSON value for CAST to DECIMAL from column json_arrayagg( at row 3 +Warning 3156 Invalid JSON value for CAST to DECIMAL from column json_arrayagg( at row 5 +TRUNCATE TABLE t2; +SELECT 1.0 * JSON_ARRAYAGG(a) FROM t2; +1.0 * JSON_ARRAYAGG(a) +NULL +SELECT 0x30 << JSON_ARRAYAGG(a) FROM t2; +0x30 << JSON_ARRAYAGG(a) +NULL +SELECT DATE_ADD(JSON_ARRAYAGG(a), INTERVAL 31 DAY) FROM t2; +DATE_ADD(JSON_ARRAYAGG(a), INTERVAL 31 DAY) +NULL +SELECT ADDTIME(JSON_ARRAYAGG(a), '02:00:00.999998') FROM t2; +ADDTIME(JSON_ARRAYAGG(a), '02:00:00.999998') +NULL +SELECT SEC_TO_TIME(JSON_ARRAYAGG(a)) FROM t2; +SEC_TO_TIME(JSON_ARRAYAGG(a)) +NULL +DROP TABLE t2; diff --git a/mysql-test/suite/json/t/json_agg.test b/mysql-test/suite/json/t/json_agg.test new file mode 100644 index 000000000000..84c4b4eb3f1a --- /dev/null +++ b/mysql-test/suite/json/t/json_agg.test @@ -0,0 +1,494 @@ +############################################################################### +# # +# Tests JSON aggregation functions added in WL#7987 # +# # +############################################################################### + + +--echo # +--echo # Setup test. +--echo # + +CREATE TABLE t1 (a int, k int, b VARCHAR(10)); +INSERT INTO t1 VALUES +(1, 1, "alfa"), +(1, 2, null), +(2, 3, "doi"), +(1, 4, "unu"), +(3, 5, "trei"), +(4, 6, null), +(4, 7, null), +(1, 8, "one"); + +--echo # +--echo # Test JSON_ARRAYAGG. +--echo # + +FLUSH STATUS; +SELECT a, JSON_ARRAYAGG(b) FROM t1 GROUP BY a; +SHOW SESSION STATUS LIKE 'Handler_update%'; +SELECT SQL_BIG_RESULT a, JSON_ARRAYAGG(b) FROM t1 GROUP BY a; +SELECT SQL_SMALL_RESULT a, JSON_ARRAYAGG(b) FROM t1 GROUP BY a; +SHOW SESSION STATUS LIKE 'Handler_update%'; +SELECT SQL_BUFFER_RESULT a, JSON_ARRAYAGG(b) FROM t1 GROUP BY a; +SHOW SESSION STATUS LIKE 'Handler_update%'; + +SELECT JSON_ARRAYAGG(b) FROM t1; +SELECT SQL_BIG_RESULT JSON_ARRAYAGG(b) FROM t1; +SELECT SQL_SMALL_RESULT JSON_ARRAYAGG(b) FROM t1; +SELECT SQL_BUFFER_RESULT JSON_ARRAYAGG(b) FROM t1; + +PREPARE p1 FROM "SELECT a, JSON_ARRAYAGG(b) FROM t1 GROUP BY a"; +EXECUTE p1; +EXECUTE p1; +deallocate prepare p1; + +PREPARE p3 FROM +"SELECT SQL_BUFFER_RESULT a, JSON_ARRAYAGG(b) FROM t1 GROUP BY a"; +EXECUTE p3; +EXECUTE p3; +deallocate prepare p3; + +PREPARE p4 FROM "SELECT JSON_ARRAYAGG(b) FROM t1"; +EXECUTE p4; +EXECUTE p4; +deallocate prepare p4; + + +SELECT JSON_MERGE(JSON_ARRAYAGG(b), '[true, false]') FROM t1; + +PREPARE p1 FROM +"SELECT a, JSON_MERGE(JSON_ARRAYAGG(b), '[true, false]') FROM t1 GROUP BY a"; +EXECUTE p1; +EXECUTE p1; +deallocate prepare p1; + + +PREPARE p4 FROM +"SELECT JSON_MERGE(JSON_ARRAYAGG(b), '[true, false]') FROM t1"; +EXECUTE p4; +EXECUTE p4; +deallocate prepare p4; + + +ANALYZE TABLE t1; + +EXPLAIN SELECT a, JSON_ARRAYAGG(b) FROM t1 GROUP BY a; +EXPLAIN SELECT JSON_ARRAYAGG(b) FROM t1; + +EXPLAIN FORMAT=json SELECT a, JSON_ARRAYAGG(b) FROM t1 GROUP BY a; +EXPLAIN FORMAT=json SELECT SQL_BIG_RESULT a, JSON_ARRAYAGG(b) +FROM t1 +GROUP BY a; +EXPLAIN FORMAT=json SELECT SQL_SMALL_RESULT a, JSON_ARRAYAGG(b) +FROM t1 +GROUP BY a; +EXPLAIN FORMAT=json SELECT SQL_BUFFER_RESULT a, JSON_ARRAYAGG(b) +FROM t1 +GROUP BY a; + +EXPLAIN FORMAT=json SELECT JSON_ARRAYAGG(b) FROM t1; +EXPLAIN FORMAT=json SELECT SQL_BIG_RESULT JSON_ARRAYAGG(b) FROM t1; +EXPLAIN FORMAT=json SELECT SQL_SMALL_RESULT JSON_ARRAYAGG(b) FROM t1; +EXPLAIN FORMAT=json SELECT SQL_BUFFER_RESULT JSON_ARRAYAGG(b) FROM t1; + +SELECT a, JSON_ARRAYAGG(b) FROM t1 GROUP BY a WITH ROLLUP; +SELECT a, JSON_ARRAYAGG(b) as jarray +FROM t1 +GROUP BY a +HAVING jarray= JSON_ARRAY("trei"); + +--echo # +--echo # Test JSON_OBJECTAGG. +--echo # + +FLUSH STATUS; +SELECT a, JSON_OBJECTAGG(k, b) FROM t1 GROUP BY a; +SHOW SESSION STATUS LIKE 'Handler_update%'; +SELECT JSON_OBJECTAGG(k, b) FROM t1; +SHOW SESSION STATUS LIKE 'Handler_update%'; + +PREPARE p1 FROM "SELECT a, JSON_OBJECTAGG(k, b) FROM t1 GROUP BY a"; +EXECUTE p1; +EXECUTE p1; +deallocate prepare p1; + +PREPARE p4 FROM "SELECT JSON_OBJECTAGG(k, b) FROM t1"; +EXECUTE p4; +EXECUTE p4; +deallocate prepare p4; + +SELECT a, JSON_MERGE(JSON_OBJECTAGG(k, b), '[true, false]') FROM t1 GROUP BY a; +SELECT JSON_MERGE(JSON_OBJECTAGG(k, b), '[true, false]') FROM t1; + +PREPARE p1 FROM +"SELECT a, JSON_MERGE(JSON_OBJECTAGG(k, b), '[true, false]') +FROM t1 +GROUP BY a"; +EXECUTE p1; +EXECUTE p1; +deallocate prepare p1; + + +PREPARE p4 FROM +"SELECT JSON_MERGE(JSON_OBJECTAGG(k, b), '[true, false]') FROM t1"; +EXECUTE p4; +EXECUTE p4; +deallocate prepare p4; + +ANALYZE TABLE t1; + +EXPLAIN SELECT a, JSON_OBJECTAGG(k, b) FROM t1 GROUP BY a; +EXPLAIN SELECT JSON_OBJECTAGG(k, b) FROM t1; + +EXPLAIN FORMAT=json SELECT a, JSON_OBJECTAGG(k, b) FROM t1 GROUP BY a; +EXPLAIN FORMAT=json SELECT JSON_OBJECTAGG(k, b) FROM t1; + +SELECT a, JSON_OBJECTAGG(k, b) FROM t1 GROUP BY a WITH ROLLUP; +SELECT a, JSON_OBJECTAGG(k, b) as jobject +FROM t1 +GROUP BY a +HAVING jobject = JSON_OBJECT(3, "doi"); + +--echo # +--echo # NULL values. +--echo # + +SELECT a, JSON_ARRAYAGG(null) FROM t1 GROUP BY a; +SELECT JSON_ARRAYAGG(null) FROM t1; + +SELECT a, JSON_OBJECTAGG(k, null) FROM t1 GROUP BY a; +SELECT JSON_OBJECTAGG(k, null) FROM t1; + + +--error ER_JSON_DOCUMENT_NULL_KEY +SELECT a, JSON_OBJECTAGG(null, b) FROM t1 GROUP BY a; + +--error ER_JSON_DOCUMENT_NULL_KEY +SELECT JSON_OBJECTAGG(null, b) FROM t1; + +--echo # +--echo # Coverage test for fix_fields: Disable_semijoin_flattening. +--echo # + +CREATE TABLE t(a INT); +ANALYZE TABLE t1; +EXPLAIN format=json SELECT (SELECT 1 FROM t WHERE JSON_ARRAYAGG(1 IN (SELECT 1 FROM t))); +SELECT (SELECT 1 FROM t WHERE JSON_ARRAYAGG(1 IN (SELECT 1 FROM t))); +DROP TABLE t; + +--echo # +--echo # Coverage test for fix_fields: check_cols. +--echo # + +--error ER_OPERAND_COLUMNS +SELECT JSON_ARRAYAGG((SELECT 1, 1)); + +--echo # +--echo # Coverage test for fix_fields: resolve_type. +--echo # + +CREATE TABLE t2(gid int, a int); +--error ER_WRONG_ARGUMENTS +SELECT JSON_ARRAYAGG(ST_PointFromText('POINT(10 10)')) FROM t2; + +--echo # +--echo # Coverage test for fix_fields: check_sum_func. +--echo # + +--error ER_INVALID_GROUP_FUNC_USE +SELECT (SELECT JSON_ARRAYAGG(COUNT(a)) FROM t2) FROM t1; + +DROP TABLE t2; + +--echo # +--echo # Empty table. +--echo # + +TRUNCATE TABLE t1; + +SELECT a, JSON_ARRAYAGG(b) FROM t1 GROUP BY a; +SELECT JSON_ARRAYAGG(b) FROM t1; +SELECT a, JSON_OBJECTAGG(k, b) FROM t1 GROUP BY a; +SELECT JSON_OBJECTAGG(k, b) FROM t1; + +--echo # +--echo # Tests for max_allowed_packet. +--echo # + +CREATE TABLE t(id INT PRIMARY KEY AUTO_INCREMENT, x INT); +INSERT INTO t(x) VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10); +INSERT INTO t(x) SELECT t1.x from t t1, t t2, t t3; + +SET GLOBAL net_buffer_length = 1024; +SET GLOBAL max_allowed_packet = 1024; +CONNECT (con1,localhost,root,,); +SELECT JSON_ARRAYAGG(x) FROM t; +SELECT JSON_OBJECTAGG(id, x) FROM t; +SELECT id % 2 AS i, JSON_ARRAYAGG(x) FROM t GROUP BY i; +SELECT id % 2 AS i, JSON_OBJECTAGG(id, x) FROM t GROUP BY i; +CONNECTION default; +DISCONNECT con1; +SET GLOBAL max_allowed_packet = default; +SET GLOBAL net_buffer_length = default; + +DROP TABLE t; + +--echo # +--echo # Cleanup test. +--echo # + +DROP TABLE t1; + + +--echo # +--echo # Bug #24368053 +--echo # WL#7987: ASSERTION `!TABLE || (!TABLE->WRITE_SET || BITMAP_IS_SET(TABLE-> ... +--echo # + +CREATE TABLE C(col_int int); +CREATE TABLE CC(col_int int); +INSERT INTO CC VALUES (1),(2),(3); + +SELECT JSON_OBJECTAGG(table1.`col_int` ,table1.`col_int`) AS field2, +(SELECT JSON_ARRAYAGG(SUBQUERY2_t1.`col_int`) + FROM CC AS SUBQUERY2_t1 + WHERE SUBQUERY2_t1.`col_int` <> table1.`col_int`) AS field5 +FROM (CC AS table1) +WHERE (table1.`col_int` <> ALL (SELECT SUBQUERY4_t1.`col_int` + FROM (CC AS SUBQUERY4_t1 STRAIGHT_JOIN C))) +GROUP BY +field5; + +DROP TABLE C; +DROP TABLE CC; + +--echo # +--echo # Bug #24367384 +--echo # WL#7987: INNODB: ASSERTION FAILURE: ROW0SEL.CC:2558:FIELD->PREFIX_LEN > 0 ... +--echo # +CREATE TABLE BB (pk INT AUTO_INCREMENT PRIMARY KEY, col_varchar_key VARCHAR(1)); +INSERT INTO BB VALUES(1,'a'); + +SELECT (SELECT JSON_ARRAYAGG(`pk`) FROM BB as t1 + WHERE t1.`col_varchar_key` <> t2.`col_varchar_key`) AS field2 +FROM BB as t2 +GROUP BY field2; + +SELECT (SELECT JSON_ARRAYAGG(`pk`) FROM BB as t1 + WHERE t1.`col_varchar_key` = t2.`col_varchar_key`) AS field2 +FROM BB as t2 +GROUP BY field2; + +DROP TABLE BB; + +--echo # +--echo # Bug #24365264 +--echo # WL#7987: SIG 11 IN ITEM::MARK_FIELD_IN_MAP|SQL/ITEM.H +--echo # + +CREATE TABLE C (col_int int); +INSERT INTO C VALUES (1); + +SELECT * +FROM C WHERE col_int < (SELECT JSON_ARRAYAGG(col_int) FROM C ) +ORDER BY col_int ; + +DROP TABLE C; + + +--echo # +--echo # Bug #24366341 +--echo # WL#7987: SIG 6 IN JSON_WRAPPER::TYPE|SQL/JSON_DOM.CC +--echo # + +CREATE TABLE CC(col_varchar_key varchar(1)); +INSERT INTO CC VALUES ('a'); + +SELECT JSON_ARRAYAGG(col_varchar_key) AS field1 FROM CC HAVING field1 > 9; + +SELECT JSON_OBJECTAGG(col_varchar_key, col_varchar_key) AS field1 FROM CC +HAVING (field1 <> 'a' AND field1 != 'e'); + +DROP TABLE CC; + +--echo # +--echo # with ROLLUP + two/three groups +--echo # + +CREATE TABLE tg (g1 int, g2 int, k int, b VARCHAR(10)); +INSERT INTO tg VALUES +(1, 1, 1, "alfa"), +(1, 2, 2, null), +(2, 3, 3, "doi"), +(1, 1, 4, "unu"), +(3, 2, 5, "trei"), +(4, 3, 6, null), +(4, 1, 7, null), +(1, 2, 8, "one"); + + +SELECT g1, g2, JSON_ARRAYAGG(g2) FROM tg GROUP BY g1, g2 with rollup; +SELECT g1, g2, JSON_OBJECTAGG(k, g1) FROM tg GROUP BY g1, g2 with rollup; + + +CREATE TABLE tg3 (g1 int, g2 int, g3 int, k int, b VARCHAR(10)); +INSERT INTO tg3 VALUES +(1, 1, 1, 1, "1.1.1"), +(1, 1, 2, 2, "1.1.2"), +(1, 1, 3, 3, "1.1.3"), +(1, 2, 1, 4, "1.2.1"), +(1, 2, 2, 5, "1.2.2"), +(1, 2, 3, 6, "1.2.3"), +(1, 3, 1, 7, "1.3.1"), +(1, 3, 2, 8, "1.3.2"), +(1, 3, 3, 9, "1.3.3"), +(2, 1, 1, 10, "2.1.1"), +(2, 1, 2, 11, "2.1.2"), +(2, 1, 3, 12, "2.1.3"), +(2, 2, 1, 13, "2.2.1"), +(2, 2, 2, 14, "2.2.2"), +(2, 2, 3, 15, "2.2.3"), +(2, 3, 1, 16, "2.3.1"), +(2, 3, 2, 17, "2.3.2"), +(2, 3, 3, 18, "2.3.3"), +(3, 1, 1, 19, "3.1.1"), +(3, 1, 2, 20, "3.1.2"), +(3, 1, 3, 21, "3.1.3"), +(3, 2, 1, 22, "3.2.1"), +(3, 2, 2, 23, "3.2.2"), +(3, 2, 3, 24, "3.2.3"), +(3, 3, 1, 25, "3.3.1"), +(3, 3, 2, 26, "3.3.2"), +(3, 3, 3, 27, "3.3.3"); + + +SELECT g1, g2, g3, JSON_ARRAYAGG(b) FROM tg3 GROUP BY g1, g2, g3 with rollup; +SELECT g1, g2, g3, JSON_OBJECTAGG(k, b) FROM tg3 GROUP BY g1, g2, g3 with rollup; + + +DROP TABLE tg; +DROP TABLE tg3; + +--echo # +--echo # Tests duplicates for JSON_OBJECTAGG +--echo # + +CREATE TABLE t1 (a int, k int, b VARCHAR(10)); +INSERT INTO t1 VALUES +(1, 1, "1.1"), +(1, 1, "1.2"), +(1, 1, "1.3"), +(2, 2, "2.1"), +(2, 2, "2.2"), +(2, 2, "2.3"); + +SELECT a, JSON_OBJECTAGG(k, b) FROM t1 GROUP BY a; +SELECT a, JSON_ARRAYAGG(b) FROM t1 GROUP BY a; + +DROP TABLE t1; + +--echo # +--echo # Tests with ORDER BY, DISTINCT +--echo # + +CREATE TABLE t1 (a int, k int, b VARCHAR(10)); +INSERT INTO t1 VALUES +(2, 8, "2.3"), +(1, 7, "1.1"), +(3, 6, "3.2"), +(2, 5, "2.2"), +(3, 9, "3.1"), +(1, 4, "1.2"), +(3, 3, "3.3"), +(2, 2, "2.1"), +(1, 1, "1.3"); + +SELECT a, JSON_ARRAYAGG(b) FROM t1 GROUP BY a; +SELECT DISTINCT a, JSON_ARRAYAGG(b) FROM t1 GROUP BY a; +SELECT DISTINCT a, JSON_ARRAYAGG(b) FROM t1 GROUP BY a ORDER BY a ASC; +SELECT DISTINCT a, JSON_ARRAYAGG(b) FROM t1 GROUP BY a ORDER BY a DESC; + +SELECT a, JSON_OBJECTAGG(k, b) FROM t1 GROUP BY a; +SELECT DISTINCT a, JSON_OBJECTAGG(k, b) FROM t1 GROUP BY a; +SELECT DISTINCT a, JSON_OBJECTAGG(k, b) FROM t1 GROUP BY a ORDER BY a ASC; +SELECT DISTINCT a, JSON_OBJECTAGG(k, b) FROM t1 GROUP BY a ORDER BY a DESC; + +DROP TABLE t1; + +--echo # +--echo # Tests with joins +--echo # + +CREATE TABLE t(id INT PRIMARY KEY AUTO_INCREMENT, t1 INT, t2 INT); +CREATE TABLE p(id INT PRIMARY KEY AUTO_INCREMENT, p1 INT, p2 INT); + +INSERT INTO t(t1, t2) VALUES (1, 1), (2, 1), (3,3), (1, 4); +INSERT INTO p(p1, p2) VALUES (2, 1), (1, 1), (3,3), (2, 4); + +FLUSH STATUS; +SHOW SESSION STATUS LIKE 'Handler_update%'; +#Since the JSON_*AGG does not have the ORDER BY clause order is not predictable +disable_result_log; +SELECT JSON_ARRAYAGG(t2) FROM t join p on t.t1=p.p1; +enable_result_log; +SHOW SESSION STATUS LIKE 'Handler_update%'; +disable_result_log; +SELECT t1, JSON_ARRAYAGG(t2) FROM t join p on t.t1=p.p1 group by t1; +enable_result_log; +SHOW SESSION STATUS LIKE 'Handler_update%'; + +# Subquery in ORDER BY with outer reference +SELECT (SELECT 1 AS foo ORDER BY JSON_ARRAYAGG(t2)) AS x FROM t; +SELECT t1 FROM t ORDER BY (SELECT JSON_ARRAYAGG(t1) FROM t AS t2); +SELECT JSON_ARRAYAGG(t1) FROM t +ORDER BY (SELECT JSON_ARRAYAGG(t1) FROM t AS t2); + +SELECT (SELECT JSON_ARRAYAGG(t1_outer.t1) FROM t AS t1_inner LIMIT 1) as f +FROM t AS t1_outer GROUP BY t1_outer.t2; + +DROP TABLE t; +DROP TABLE p; + +--echo # +--echo # Tests with JSON +--echo # + +CREATE TABLE t(id INT PRIMARY KEY AUTO_INCREMENT, k INT, j JSON); +INSERT INTO t(k, j) VALUES +(1, '[1,2,3,4]'), +(2, '{"prop1": 1}'), +(1, '[3]'), +(2, '{"prop2": 2, "prop10": 10}'), +(1, '[99]'); + + +SELECT k, JSON_ARRAYAGG(j) FROM t GROUP BY k; +SELECT k, JSON_OBJECTAGG(id, j) FROM t GROUP BY k; + +DROP TABLE t; + +--echo # +--echo # Coverage tests for val_* functions +--echo # + +CREATE TABLE t2(gid int, a int); +INSERT INTO t2(gid, a) VALUES (1, 1), (1, 2), (2, 4), (2, 8); + +SELECT gid, 1.0 * JSON_ARRAYAGG(a) FROM t2 GROUP BY gid; +SELECT gid, 0x30 << JSON_ARRAYAGG(a) FROM t2 GROUP BY gid; +SELECT gid, DATE_ADD(JSON_ARRAYAGG(a), INTERVAL 31 DAY) +FROM t2 GROUP BY gid; +SELECT gid, ADDTIME(JSON_ARRAYAGG(a), '02:00:00.999998') +FROM t2 GROUP BY gid; +SELECT gid, SEC_TO_TIME(JSON_ARRAYAGG(a)) FROM t2 GROUP BY gid; + +TRUNCATE TABLE t2; + +SELECT 1.0 * JSON_ARRAYAGG(a) FROM t2; +SELECT 0x30 << JSON_ARRAYAGG(a) FROM t2; +SELECT DATE_ADD(JSON_ARRAYAGG(a), INTERVAL 31 DAY) FROM t2; +SELECT ADDTIME(JSON_ARRAYAGG(a), '02:00:00.999998') FROM t2; +SELECT SEC_TO_TIME(JSON_ARRAYAGG(a)) FROM t2; + +DROP TABLE t2; diff --git a/mysql-test/suite/perfschema/r/digest_table_full.result b/mysql-test/suite/perfschema/r/digest_table_full.result index cc2bc0a79c7b..99da7acd9719 100644 --- a/mysql-test/suite/perfschema/r/digest_table_full.result +++ b/mysql-test/suite/perfschema/r/digest_table_full.result @@ -113,7 +113,7 @@ SELECT SCHEMA_NAME, DIGEST, DIGEST_TEXT, COUNT_STAR, SUM_ROWS_AFFECTED, SUM_WARN SUM_ERRORS FROM performance_schema.events_statements_summary_by_digest; SCHEMA_NAME DIGEST DIGEST_TEXT COUNT_STAR SUM_ROWS_AFFECTED SUM_WARNINGS SUM_ERRORS NULL NULL NULL 55 32 1 2 -statements_digest 21b6affb55f3e69c598b47257f4d0ec6 TRUNCATE TABLE `performance_schema` . `events_statements_summary_by_digest` 1 0 0 0 +statements_digest d24da32343f2b799f8a7ba1bdc45f83b TRUNCATE TABLE `performance_schema` . `events_statements_summary_by_digest` 1 0 0 0 SHOW GLOBAL VARIABLES LIKE "performance_schema_digests_size"; Variable_name Value performance_schema_digests_size 2 diff --git a/mysql-test/suite/perfschema/r/rpl_gtid_func.result b/mysql-test/suite/perfschema/r/rpl_gtid_func.result index 73e9525a271d..3edbae26e31b 100644 --- a/mysql-test/suite/perfschema/r/rpl_gtid_func.result +++ b/mysql-test/suite/perfschema/r/rpl_gtid_func.result @@ -56,7 +56,7 @@ select digest, digest_text, count_star from performance_schema.events_statements_summary_by_digest where digest_text like "%in_%_digest%"; digest digest_text count_star -dc3177eb15d923e08c09eef29cecd9a4 SELECT ? AS `in_master_digest` 1 +43677368d37ba0831ecd2322086c9cf5 SELECT ? AS `in_master_digest` 1 insert into test.marker values (2); **** On Slave **** select * from test.marker; @@ -99,7 +99,7 @@ select digest, digest_text, count_star from performance_schema.events_statements_summary_by_digest where digest_text like "%in_%_digest%"; digest digest_text count_star -d506c623d393ce3079467945b10cc01e SELECT ? AS `in_slave_digest` 1 +01f5f7c4c65eb61bb9a6afb7172c4a54 SELECT ? AS `in_slave_digest` 1 **** On Master **** delete from performance_schema.setup_objects where object_schema='master'; diff --git a/mysql-test/suite/perfschema/r/start_server_low_digest.result b/mysql-test/suite/perfschema/r/start_server_low_digest.result index 3dff3c092eb9..3911ae063b74 100644 --- a/mysql-test/suite/perfschema/r/start_server_low_digest.result +++ b/mysql-test/suite/perfschema/r/start_server_low_digest.result @@ -9,4 +9,4 @@ SELECT 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 SELECT event_name, digest, digest_text, sql_text FROM events_statements_history_long; event_name digest digest_text sql_text statement/sql/truncate de142fd9a2507cb67f197230081a2682 TRUNCATE TABLE truncate table events_statements_history_long -statement/sql/select 9c2f57893fb6bcec2ace71ddb389b46f SELECT ? + ? + SELECT 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 +statement/sql/select 4eaf50b33b47c3d02ab230606f197063 SELECT ? + ? + SELECT 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 diff --git a/mysql-test/suite/perfschema/r/start_server_low_digest_sql_length.result b/mysql-test/suite/perfschema/r/start_server_low_digest_sql_length.result index 69ec6c9cf351..906700ba2737 100644 --- a/mysql-test/suite/perfschema/r/start_server_low_digest_sql_length.result +++ b/mysql-test/suite/perfschema/r/start_server_low_digest_sql_length.result @@ -9,4 +9,4 @@ SELECT 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 SELECT event_name, digest, digest_text, sql_text FROM events_statements_history_long; event_name digest digest_text sql_text statement/sql/truncate de142fd9a2507cb67f197230081a2682 TRUNCATE TABLE truncat... -statement/sql/select 9c2f57893fb6bcec2ace71ddb389b46f SELECT ? + ? + SELECT ... +statement/sql/select 4eaf50b33b47c3d02ab230606f197063 SELECT ? + ? + SELECT ... diff --git a/mysql-test/suite/perfschema/r/statement_digest.result b/mysql-test/suite/perfschema/r/statement_digest.result index f4deac546e3d..65631bd85ca5 100644 --- a/mysql-test/suite/perfschema/r/statement_digest.result +++ b/mysql-test/suite/perfschema/r/statement_digest.result @@ -115,41 +115,41 @@ DROP TRIGGER trg; SELECT SCHEMA_NAME, DIGEST, DIGEST_TEXT, COUNT_STAR, SUM_ROWS_AFFECTED, SUM_WARNINGS, SUM_ERRORS FROM performance_schema.events_statements_summary_by_digest; SCHEMA_NAME DIGEST DIGEST_TEXT COUNT_STAR SUM_ROWS_AFFECTED SUM_WARNINGS SUM_ERRORS -statements_digest 21b6affb55f3e69c598b47257f4d0ec6 TRUNCATE TABLE `performance_schema` . `events_statements_summary_by_digest` 1 0 0 0 -statements_digest 2ebcc6539c5c79b27a33707fbd4d70b0 SELECT ? FROM `t1` 2 0 0 0 -statements_digest 811c314bb8f68f4fdef9e30fa64acb0b SELECT ?, ... FROM `t1` 2 0 0 0 -statements_digest bc458c25be72e6f386b5c646bfd2a4ac SELECT ? FROM `t2` 1 0 0 0 -statements_digest ca8daaee4f2bac8419836ba3b57a945c SELECT ?, ... FROM `t2` 2 0 0 0 -statements_digest 15dbcb0276d0a32884e54f872e7550de INSERT INTO `t1` VALUES (?) 2 2 0 0 -statements_digest 69ed8a7ce05b795006d86cbbd31e0caa INSERT INTO `t2` VALUES (?) 1 1 0 0 -statements_digest a33fb1d856859fc46057c7dc869ce164 INSERT INTO `t3` VALUES (...) 4 4 0 0 -statements_digest a77bacee82e346244fbd5d405e9acf7d INSERT INTO `t4` VALUES (...) 1 1 0 0 -statements_digest 5546a45fece520aaa0140e6ac7a554ca INSERT INTO `t5` VALUES (...) 1 1 0 0 -statements_digest 45552b7cbc35f439bb0b2cc12b4d7004 INSERT INTO `t1` VALUES (?) /* , ... */ 2 7 0 0 -statements_digest 5e2ca7e5378a50395344cf8fb33c1289 INSERT INTO `t3` VALUES (...) /* , ... */ 1 3 0 0 -statements_digest 5a2455a3ad5daf8ad20bad0e1ba489d8 INSERT INTO `t5` VALUES (...) /* , ... */ 1 3 0 0 -statements_digest db2e552003c59f77b27e8a43513fa6df INSERT INTO `t6` VALUES (...) 5 5 0 0 -statements_digest 6d48e7bf6ebe1075c954ca4440c313f5 SELECT ? + ? 3 0 0 0 -statements_digest f29eded39dd5fa102f18987679dd0c14 SELECT ? 1 0 0 0 -statements_digest 3aeae35a7cad6d77a59795daa475ec95 CREATE SCHEMA `statements_digest_temp` 2 2 0 0 -statements_digest 853fcddb9ccd2b9bc89b2b9ebb86b63a DROP SCHEMA `statements_digest_temp` 2 0 0 0 -statements_digest 35c43fea9b2c2899c5ae8576b1b00879 SELECT ? FROM `no_such_table` 1 0 0 1 -statements_digest 0d6c1e5ce78bfc10f8f9d1c34883e431 CREATE TABLE `dup_table` ( `c` CHARACTER (?) ) 2 0 0 1 -statements_digest fba453490c48b500dc5497587ac52232 DROP TABLE `dup_table` 1 0 0 0 -statements_digest 8da8c367b38b366598c96c1f573b06ff INSERT IGNORE INTO `t11` VALUES (?) 1 1 1 0 +statements_digest d24da32343f2b799f8a7ba1bdc45f83b TRUNCATE TABLE `performance_schema` . `events_statements_summary_by_digest` 1 0 0 0 +statements_digest 2470c53bba1de70e17dee0ffecf92c73 SELECT ? FROM `t1` 2 0 0 0 +statements_digest 7aaf73121c2dc1961757af496028610b SELECT ?, ... FROM `t1` 2 0 0 0 +statements_digest 57175aac3e410f4a0df5900bf998b181 SELECT ? FROM `t2` 1 0 0 0 +statements_digest 7595674dce5accccec6d0a9c0918b689 SELECT ?, ... FROM `t2` 2 0 0 0 +statements_digest 02b23366d1c2eb07f271b27a92261850 INSERT INTO `t1` VALUES (?) 2 2 0 0 +statements_digest d6935b92b93f59d1d8580d71345bf785 INSERT INTO `t2` VALUES (?) 1 1 0 0 +statements_digest 0bed9d67f8f0eed70e23d8d652f850f1 INSERT INTO `t3` VALUES (...) 4 4 0 0 +statements_digest 5a4288f864ee631ce51c9a2250ee05f4 INSERT INTO `t4` VALUES (...) 1 1 0 0 +statements_digest 2f3f80af62a9a0bc3e65ade97b7d9b91 INSERT INTO `t5` VALUES (...) 1 1 0 0 +statements_digest 9282eb80534dd560d422f0ad3e2ef79e INSERT INTO `t1` VALUES (?) /* , ... */ 2 7 0 0 +statements_digest 84fd494f2106df4a7b68a7d64c38390c INSERT INTO `t3` VALUES (...) /* , ... */ 1 3 0 0 +statements_digest 8d8c2006b523c427db1f4a64d2a3071c INSERT INTO `t5` VALUES (...) /* , ... */ 1 3 0 0 +statements_digest 119634570de383d4e24bb246f9aa5093 INSERT INTO `t6` VALUES (...) 5 5 0 0 +statements_digest d8492e72ce015b008b8a29347b1574f0 SELECT ? + ? 3 0 0 0 +statements_digest 3d4fc22e33e10d7235eced3c75a84c2c SELECT ? 1 0 0 0 +statements_digest 228bd1e66dfaad7a93a08eec7cfdf840 CREATE SCHEMA `statements_digest_temp` 2 2 0 0 +statements_digest a1b8dbf6a71e58af1c93dbdb27f2979c DROP SCHEMA `statements_digest_temp` 2 0 0 0 +statements_digest 80ef2cc343a9725239f4d9d88e3ed77b SELECT ? FROM `no_such_table` 1 0 0 1 +statements_digest 66bbd419c604f474fe5a769c3d8f091c CREATE TABLE `dup_table` ( `c` CHARACTER (?) ) 2 0 0 1 +statements_digest ae27efa5e1da98d54b2bf2af9a492780 DROP TABLE `dup_table` 1 0 0 0 +statements_digest 164476310fd2576cb913120166b2f2b0 INSERT IGNORE INTO `t11` VALUES (?) 1 1 1 0 statements_digest feaff321c54a9c8e1e9508628f7a5a05 SHOW WARNINGS 1 0 0 0 -statements_digest da3836703213b71919f6583391fb7de4 PREPARE `stmt` FROM ? 1 0 0 0 -statements_digest b5243e9f1b9b0bbcc8cafd6e5acc78f7 EXECUTE `stmt` 2 0 0 0 -statements_digest 1943fb11508045f36626b11b1c2311b4 DEALLOCATE PREPARE `stmt` 1 0 0 0 -statements_digest 25794340d6b31e52b8a65f672acd1a02 CREATE PROCEDURE `p1` ( ) BEGIN SELECT * FROM `t12` ; END 1 0 0 0 -statements_digest 89b975550f7e8236ee7cc9dc1662cd04 CALL `p1` ( ) 2 0 0 0 -statements_digest c5ab254ec788be45b08ba6f3b41008b4 DROP PROCEDURE `p1` 1 0 0 0 -statements_digest 85e6b42a2024f757b5e43dd231827068 CREATE FUNCTION `func` ( `a` INTEGER , `b` INTEGER ) RETURNS INTEGER (?) RETURN `a` + `b` 1 0 0 0 -statements_digest 6de36a178c9394679a4b8d8d1113a65d SELECT `func` (...) 2 0 0 0 -statements_digest 98683f018cbb76cd482f47a48921513c DROP FUNCTION `func` 1 0 0 0 -statements_digest 3e0d38357bc7322944bdd51b4281f144 CREATE TRIGGER `trg` BEFORE INSERT ON `t12` FOR EACH ROW SET @? := ? 1 0 0 0 -statements_digest 2ea818b323d4449e3474db5f70e1bdea INSERT INTO `t12` VALUES (?) 2 2 0 0 -statements_digest 4dd34f225aced9cd2f50dafe64e01f1b DROP TRIGGER `trg` 1 0 0 0 +statements_digest ba5e1127c88c3b8737000ac83579c15b PREPARE `stmt` FROM ? 1 0 0 0 +statements_digest 9e1c48512fdded3c4e64f3ac9a786096 EXECUTE `stmt` 2 0 0 0 +statements_digest 26b3d4dd928dd5321d2a0e1e63d926f7 DEALLOCATE PREPARE `stmt` 1 0 0 0 +statements_digest 179e0cb3ea4542473dc88fd24b209049 CREATE PROCEDURE `p1` ( ) BEGIN SELECT * FROM `t12` ; END 1 0 0 0 +statements_digest cde8f1053b3b4a4d67658c9c8572e765 CALL `p1` ( ) 2 0 0 0 +statements_digest ff2582be3f542ec89d41ffc8ef018c2f DROP PROCEDURE `p1` 1 0 0 0 +statements_digest bae719145a0d1e65cbbdec759665bd79 CREATE FUNCTION `func` ( `a` INTEGER , `b` INTEGER ) RETURNS INTEGER (?) RETURN `a` + `b` 1 0 0 0 +statements_digest 27b8b33b381b70df85aa39ae223baa19 SELECT `func` (...) 2 0 0 0 +statements_digest a1686531a64227fc7d1e96f090462d7b DROP FUNCTION `func` 1 0 0 0 +statements_digest 3a668f739568e34b3ae67491f7938639 CREATE TRIGGER `trg` BEFORE INSERT ON `t12` FOR EACH ROW SET @? := ? 1 0 0 0 +statements_digest 5c24333d11c3e873088d2911f4589883 INSERT INTO `t12` VALUES (?) 2 2 0 0 +statements_digest e1ea7222497e0e50f3ee08a17ebd2542 DROP TRIGGER `trg` 1 0 0 0 #################################### # CLEANUP #################################### diff --git a/mysql-test/suite/perfschema/r/statement_digest_consumers.result b/mysql-test/suite/perfschema/r/statement_digest_consumers.result index e980940e8bc6..1f66c5aa8b57 100644 --- a/mysql-test/suite/perfschema/r/statement_digest_consumers.result +++ b/mysql-test/suite/perfschema/r/statement_digest_consumers.result @@ -128,41 +128,41 @@ DROP TRIGGER trg; #################################### SELECT schema_name, digest, digest_text, count_star FROM performance_schema.events_statements_summary_by_digest; schema_name digest digest_text count_star -statements_digest 21b6affb55f3e69c598b47257f4d0ec6 TRUNCATE TABLE `performance_schema` . `events_statements_summary_by_digest` 1 -statements_digest 2ebcc6539c5c79b27a33707fbd4d70b0 SELECT ? FROM `t1` 2 -statements_digest 811c314bb8f68f4fdef9e30fa64acb0b SELECT ?, ... FROM `t1` 2 -statements_digest bc458c25be72e6f386b5c646bfd2a4ac SELECT ? FROM `t2` 1 -statements_digest ca8daaee4f2bac8419836ba3b57a945c SELECT ?, ... FROM `t2` 2 -statements_digest 15dbcb0276d0a32884e54f872e7550de INSERT INTO `t1` VALUES (?) 2 -statements_digest 69ed8a7ce05b795006d86cbbd31e0caa INSERT INTO `t2` VALUES (?) 1 -statements_digest a33fb1d856859fc46057c7dc869ce164 INSERT INTO `t3` VALUES (...) 4 -statements_digest a77bacee82e346244fbd5d405e9acf7d INSERT INTO `t4` VALUES (...) 1 -statements_digest 5546a45fece520aaa0140e6ac7a554ca INSERT INTO `t5` VALUES (...) 1 -statements_digest 45552b7cbc35f439bb0b2cc12b4d7004 INSERT INTO `t1` VALUES (?) /* , ... */ 2 -statements_digest 5e2ca7e5378a50395344cf8fb33c1289 INSERT INTO `t3` VALUES (...) /* , ... */ 1 -statements_digest 5a2455a3ad5daf8ad20bad0e1ba489d8 INSERT INTO `t5` VALUES (...) /* , ... */ 1 -statements_digest db2e552003c59f77b27e8a43513fa6df INSERT INTO `t6` VALUES (...) 5 -statements_digest 6d48e7bf6ebe1075c954ca4440c313f5 SELECT ? + ? 3 -statements_digest f29eded39dd5fa102f18987679dd0c14 SELECT ? 1 -statements_digest 3aeae35a7cad6d77a59795daa475ec95 CREATE SCHEMA `statements_digest_temp` 2 -statements_digest 853fcddb9ccd2b9bc89b2b9ebb86b63a DROP SCHEMA `statements_digest_temp` 2 -statements_digest 35c43fea9b2c2899c5ae8576b1b00879 SELECT ? FROM `no_such_table` 1 -statements_digest 0d6c1e5ce78bfc10f8f9d1c34883e431 CREATE TABLE `dup_table` ( `c` CHARACTER (?) ) 2 -statements_digest fba453490c48b500dc5497587ac52232 DROP TABLE `dup_table` 1 -statements_digest 8da8c367b38b366598c96c1f573b06ff INSERT IGNORE INTO `t11` VALUES (?) 1 +statements_digest d24da32343f2b799f8a7ba1bdc45f83b TRUNCATE TABLE `performance_schema` . `events_statements_summary_by_digest` 1 +statements_digest 2470c53bba1de70e17dee0ffecf92c73 SELECT ? FROM `t1` 2 +statements_digest 7aaf73121c2dc1961757af496028610b SELECT ?, ... FROM `t1` 2 +statements_digest 57175aac3e410f4a0df5900bf998b181 SELECT ? FROM `t2` 1 +statements_digest 7595674dce5accccec6d0a9c0918b689 SELECT ?, ... FROM `t2` 2 +statements_digest 02b23366d1c2eb07f271b27a92261850 INSERT INTO `t1` VALUES (?) 2 +statements_digest d6935b92b93f59d1d8580d71345bf785 INSERT INTO `t2` VALUES (?) 1 +statements_digest 0bed9d67f8f0eed70e23d8d652f850f1 INSERT INTO `t3` VALUES (...) 4 +statements_digest 5a4288f864ee631ce51c9a2250ee05f4 INSERT INTO `t4` VALUES (...) 1 +statements_digest 2f3f80af62a9a0bc3e65ade97b7d9b91 INSERT INTO `t5` VALUES (...) 1 +statements_digest 9282eb80534dd560d422f0ad3e2ef79e INSERT INTO `t1` VALUES (?) /* , ... */ 2 +statements_digest 84fd494f2106df4a7b68a7d64c38390c INSERT INTO `t3` VALUES (...) /* , ... */ 1 +statements_digest 8d8c2006b523c427db1f4a64d2a3071c INSERT INTO `t5` VALUES (...) /* , ... */ 1 +statements_digest 119634570de383d4e24bb246f9aa5093 INSERT INTO `t6` VALUES (...) 5 +statements_digest d8492e72ce015b008b8a29347b1574f0 SELECT ? + ? 3 +statements_digest 3d4fc22e33e10d7235eced3c75a84c2c SELECT ? 1 +statements_digest 228bd1e66dfaad7a93a08eec7cfdf840 CREATE SCHEMA `statements_digest_temp` 2 +statements_digest a1b8dbf6a71e58af1c93dbdb27f2979c DROP SCHEMA `statements_digest_temp` 2 +statements_digest 80ef2cc343a9725239f4d9d88e3ed77b SELECT ? FROM `no_such_table` 1 +statements_digest 66bbd419c604f474fe5a769c3d8f091c CREATE TABLE `dup_table` ( `c` CHARACTER (?) ) 2 +statements_digest ae27efa5e1da98d54b2bf2af9a492780 DROP TABLE `dup_table` 1 +statements_digest 164476310fd2576cb913120166b2f2b0 INSERT IGNORE INTO `t11` VALUES (?) 1 statements_digest feaff321c54a9c8e1e9508628f7a5a05 SHOW WARNINGS 1 -statements_digest da3836703213b71919f6583391fb7de4 PREPARE `stmt` FROM ? 1 -statements_digest b5243e9f1b9b0bbcc8cafd6e5acc78f7 EXECUTE `stmt` 2 -statements_digest 1943fb11508045f36626b11b1c2311b4 DEALLOCATE PREPARE `stmt` 1 -statements_digest 25794340d6b31e52b8a65f672acd1a02 CREATE PROCEDURE `p1` ( ) BEGIN SELECT * FROM `t12` ; END 1 -statements_digest 89b975550f7e8236ee7cc9dc1662cd04 CALL `p1` ( ) 2 -statements_digest c5ab254ec788be45b08ba6f3b41008b4 DROP PROCEDURE `p1` 1 -statements_digest 85e6b42a2024f757b5e43dd231827068 CREATE FUNCTION `func` ( `a` INTEGER , `b` INTEGER ) RETURNS INTEGER (?) RETURN `a` + `b` 1 -statements_digest 6de36a178c9394679a4b8d8d1113a65d SELECT `func` (...) 2 -statements_digest 98683f018cbb76cd482f47a48921513c DROP FUNCTION `func` 1 -statements_digest 3e0d38357bc7322944bdd51b4281f144 CREATE TRIGGER `trg` BEFORE INSERT ON `t12` FOR EACH ROW SET @? := ? 1 -statements_digest 2ea818b323d4449e3474db5f70e1bdea INSERT INTO `t12` VALUES (?) 2 -statements_digest 4dd34f225aced9cd2f50dafe64e01f1b DROP TRIGGER `trg` 1 +statements_digest ba5e1127c88c3b8737000ac83579c15b PREPARE `stmt` FROM ? 1 +statements_digest 9e1c48512fdded3c4e64f3ac9a786096 EXECUTE `stmt` 2 +statements_digest 26b3d4dd928dd5321d2a0e1e63d926f7 DEALLOCATE PREPARE `stmt` 1 +statements_digest 179e0cb3ea4542473dc88fd24b209049 CREATE PROCEDURE `p1` ( ) BEGIN SELECT * FROM `t12` ; END 1 +statements_digest cde8f1053b3b4a4d67658c9c8572e765 CALL `p1` ( ) 2 +statements_digest ff2582be3f542ec89d41ffc8ef018c2f DROP PROCEDURE `p1` 1 +statements_digest bae719145a0d1e65cbbdec759665bd79 CREATE FUNCTION `func` ( `a` INTEGER , `b` INTEGER ) RETURNS INTEGER (?) RETURN `a` + `b` 1 +statements_digest 27b8b33b381b70df85aa39ae223baa19 SELECT `func` (...) 2 +statements_digest a1686531a64227fc7d1e96f090462d7b DROP FUNCTION `func` 1 +statements_digest 3a668f739568e34b3ae67491f7938639 CREATE TRIGGER `trg` BEFORE INSERT ON `t12` FOR EACH ROW SET @? := ? 1 +statements_digest 5c24333d11c3e873088d2911f4589883 INSERT INTO `t12` VALUES (?) 2 +statements_digest e1ea7222497e0e50f3ee08a17ebd2542 DROP TRIGGER `trg` 1 SELECT digest, digest_text FROM performance_schema.events_statements_current; digest digest_text #################################### diff --git a/mysql-test/suite/perfschema/r/statement_digest_long_query.result b/mysql-test/suite/perfschema/r/statement_digest_long_query.result index e7496a19743f..74f407b61bed 100644 --- a/mysql-test/suite/perfschema/r/statement_digest_long_query.result +++ b/mysql-test/suite/perfschema/r/statement_digest_long_query.result @@ -8,5 +8,5 @@ SELECT 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 #################################### SELECT schema_name, digest, digest_text, count_star FROM events_statements_summary_by_digest; schema_name digest digest_text count_star -performance_schema 7b21132f2eb5d27abf79d6f1cb853171 TRUNCATE TABLE `events_statements_summary_by_digest` 1 -performance_schema 13388524411c28030c7bbdc499ca3a3b SELECT ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? 1 +performance_schema cf0f15f15c6aa949ce95632095d6a2f5 TRUNCATE TABLE `events_statements_summary_by_digest` 1 +performance_schema 03e6b6726da02f6cde506ac276a61c08 SELECT ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? + ? 1 diff --git a/mysql-test/suite/query_rewrite_plugins/r/digest_collision.result b/mysql-test/suite/query_rewrite_plugins/r/digest_collision.result index 81e4c36bcea5..93d0af474409 100644 --- a/mysql-test/suite/query_rewrite_plugins/r/digest_collision.result +++ b/mysql-test/suite/query_rewrite_plugins/r/digest_collision.result @@ -62,7 +62,7 @@ SELECT search_error_log( '[Note]', '%Plugin Rewriter reported: ''Statement "SELE 'WHERE a = "digest_collision.test"%' ); search_error_log( '[Note]', '%Plugin Rewriter reported: ''Statement "SELECT * FROM test.t1 ' || 'WHERE a = "digest_collision.test"%' ) -[Note] Plugin Rewriter reported: 'Statement "SELECT * FROM test.t1 WHERE a = "digest_collision.test" UNION SELECT * FROM test.t1 WHERE a = "diges..." with digest "fa0ba9dd420bd6aaeea4ebb0f26f47d2" matched some rule but had different parse tree and/or literals.' +[Note] Plugin Rewriter reported: 'Statement "SELECT * FROM test.t1 WHERE a = "digest_collision.test" UNION SELECT * FROM test.t1 WHERE a = "diges..." with digest "a791200aa1f826531b128ea5f7ca3b99" matched some rule but had different parse tree and/or literals.' DROP TABLE t1; Warnings: Warning 1620 Plugin is busy and will be uninstalled on shutdown diff --git a/mysql-test/suite/query_rewrite_plugins/r/optional_columns.result b/mysql-test/suite/query_rewrite_plugins/r/optional_columns.result index e49b108a3403..34f55ce35d10 100644 --- a/mysql-test/suite/query_rewrite_plugins/r/optional_columns.result +++ b/mysql-test/suite/query_rewrite_plugins/r/optional_columns.result @@ -27,7 +27,7 @@ Warnings: Warning 1681 'RESET QUERY CACHE' is deprecated and will be removed in a future release. SELECT * FROM query_rewrite.rewrite_rules; id pattern pattern_database replacement enabled message pattern_digest normalized_pattern -1 SELECT ? NULL SELECT "literal" YES NULL f29eded39dd5fa102f18987679dd0c14 select ? +1 SELECT ? NULL SELECT "literal" YES NULL 3d4fc22e33e10d7235eced3c75a84c2c select ? SELECT NULL; literal literal @@ -82,11 +82,11 @@ id pattern pattern_database replacement enabled message pattern_digest normalize CALL query_rewrite.flush_rewrite_rules(); SELECT * FROM query_rewrite.rewrite_rules; id pattern pattern_database replacement enabled message pattern_digest normalized_pattern -2 SELECT * FROM test.t1 WHERE ( a = ? AND TRUE ) OR b = ? NULL SELECT a FROM test.t1 WHERE a = ? YES NULL b6020d860228520c135044894575f127 select `*` from `test`.`t1` where (((`a` = ?) and ?) or (`b` = ?)) -3 SELECT a FROM test.t1 NULL SELECT * FROM test.t1 WHERE a = 'abc' YES NULL bbb42999787762141baeef34e2039a8b select `a` from `test`.`t1` -4 SELECT a FROM test.t1 WHERE b = ? NULL SELECT * FROM test.t1 WHERE b = ? YES NULL e9cacff38075dbb20dc50fb3815b5f9c select `a` from `test`.`t1` where (`b` = ?) -5 SELECT * FROM test.t2 NULL SELECT * FROM test.t1 JOIN test.t2 ON t1.a = t2.a YES NULL 99a508083023390fd952abcf5dc51ab6 select `*` from `test`.`t2` -6 SELECT * FROM test.t1 WHERE a = ? OR b = ? NULL SELECT * FROM test.t1 WHERE b = ? OR a = ? YES NULL df65bbce43bf5bf712ed734db35be048 select `*` from `test`.`t1` where ((`a` = ?) or (`b` = ?)) +2 SELECT * FROM test.t1 WHERE ( a = ? AND TRUE ) OR b = ? NULL SELECT a FROM test.t1 WHERE a = ? YES NULL abcc8e5c0ca2b1bd493606aeadb23a78 select `*` from `test`.`t1` where (((`a` = ?) and ?) or (`b` = ?)) +3 SELECT a FROM test.t1 NULL SELECT * FROM test.t1 WHERE a = 'abc' YES NULL a68f8405e383726e9a41295fe1ce5460 select `a` from `test`.`t1` +4 SELECT a FROM test.t1 WHERE b = ? NULL SELECT * FROM test.t1 WHERE b = ? YES NULL 2500f673a570ddb20ab448b717c49ee4 select `a` from `test`.`t1` where (`b` = ?) +5 SELECT * FROM test.t2 NULL SELECT * FROM test.t1 JOIN test.t2 ON t1.a = t2.a YES NULL 938f59280d6ad2fa2f500aeeae6a5232 select `*` from `test`.`t2` +6 SELECT * FROM test.t1 WHERE a = ? OR b = ? NULL SELECT * FROM test.t1 WHERE b = ? OR a = ? YES NULL 629ae8152128638e35ea25458b38c94e select `*` from `test`.`t1` where ((`a` = ?) or (`b` = ?)) # Check a query that doesn't have a rewrite rule doesn't get rewritten. SELECT b FROM test.t1; b @@ -187,9 +187,9 @@ id pattern pattern_database replacement enabled message pattern_digest normalize CALL query_rewrite.flush_rewrite_rules(); SELECT * FROM query_rewrite.rewrite_rules; id pattern pattern_database replacement enabled message pattern_digest normalized_pattern -7 SELECT 1, ? NULL SELECT "rewritten w/rule 1" YES NULL 83ef7ed240106f12b4730d6980da9ab7 select ?,? -8 SELECT 2, ? NULL SELECT "rewritten w/rule 2" YES NULL 83ef7ed240106f12b4730d6980da9ab7 select ?,? -9 SELECT "The_original_query" NULL SELECT "The_rewritten_query" YES NULL f29eded39dd5fa102f18987679dd0c14 select ? +7 SELECT 1, ? NULL SELECT "rewritten w/rule 1" YES NULL c99d4aa0a93768bd2b9f1ba0f551af7a select ?,? +8 SELECT 2, ? NULL SELECT "rewritten w/rule 2" YES NULL c99d4aa0a93768bd2b9f1ba0f551af7a select ?,? +9 SELECT "The_original_query" NULL SELECT "The_rewritten_query" YES NULL 3d4fc22e33e10d7235eced3c75a84c2c select ? SELECT 1, 1; rewritten w/rule 1 rewritten w/rule 1 diff --git a/mysql-test/suite/query_rewrite_plugins/r/verbose.result b/mysql-test/suite/query_rewrite_plugins/r/verbose.result index f86660e847ac..ce35d73456b0 100644 --- a/mysql-test/suite/query_rewrite_plugins/r/verbose.result +++ b/mysql-test/suite/query_rewrite_plugins/r/verbose.result @@ -43,7 +43,7 @@ SELECT search_error_log( '[Note]', "%Plugin Rewriter reported: " || "'Statement \"SELECT 'nonrewritten'\"%" ) INTO @line; SELECT @line; @line -[Note] Plugin Rewriter reported: 'Statement "SELECT 'nonrewritten'" with digest "f29eded39dd5fa102f18987679dd0c14" did not match any rule.' +[Note] Plugin Rewriter reported: 'Statement "SELECT 'nonrewritten'" with digest "3d4fc22e33e10d7235eced3c75a84c2c" did not match any rule.' SELECT digest INTO @pfs_digest FROM performance_schema.events_statements_history_long WHERE sql_text = "SELECT 'nonrewritten'" diff --git a/mysql-test/suite/rpl/r/rpl_json.result b/mysql-test/suite/rpl/r/rpl_json.result index a88a82cc8291..114cb8c2deb3 100644 --- a/mysql-test/suite/rpl/r/rpl_json.result +++ b/mysql-test/suite/rpl/r/rpl_json.result @@ -1146,4 +1146,80 @@ Warning 1235 This version of MySQL doesn't yet support 'sorting of non-scalar JS [Connection Master] DROP TABLE t1, t2, t3, t4, t5; include/sync_slave_sql_with_master.inc +# +# WL#7987: JSON AGGREGATION FUNCTIONS +# +# Create tables of various data types +CREATE TABLE data_table (pkey INT PRIMARY KEY AUTO_INCREMENT, +txt TEXT, vcol VARCHAR(20), num INT, +gcol INT AS (num * 2) VIRTUAL); +CREATE TABLE json_data (nkey INT PRIMARY KEY AUTO_INCREMENT, jcol JSON); +# Insert values into the tables using the aggregation functions +INSERT INTO data_table(txt, vcol, num) VALUES ('ailemac', 'namor', 15), +('nielk', 'uciov', 12), +('nuicarc', 'ierdna', 13), +('ihcseruj', 'elisav', 14), +('qweasdas', 'jugcvb', 16); +INSERT INTO json_data(jcol) SELECT JSON_OBJECTAGG(pkey, gcol) FROM data_table; +INSERT INTO json_data(jcol) SELECT JSON_ARRAYAGG(txt) FROM data_table; +INSERT INTO json_data(jcol) SELECT JSON_ARRAYAGG(gcol) FROM data_table; +INSERT INTO json_data(jcol) SELECT JSON_OBJECTAGG(num , vcol) FROM data_table; +INSERT INTO json_data(jcol) SELECT JSON_OBJECTAGG(pkey , txt) FROM data_table; +INSERT INTO json_data(jcol) SELECT JSON_ARRAYAGG(pkey) FROM data_table; +include/sync_slave_sql_with_master.inc +[Connection Slave] +# Check whether tables were created on the slave +SELECT * FROM json_data; +nkey jcol +1 {"1": 30, "2": 24, "3": 26, "4": 28, "5": 32} +2 ["ailemac", "nielk", "nuicarc", "ihcseruj", "qweasdas"] +3 [30, 24, 26, 28, 32] +4 {"12": "uciov", "13": "ierdna", "14": "elisav", "15": "namor", "16": "jugcvb"} +5 {"1": "ailemac", "2": "nielk", "3": "nuicarc", "4": "ihcseruj", "5": "qweasdas"} +6 [1, 2, 3, 4, 5] +SELECT JSON_OBJECTAGG(t1.pkey, t2.jcol) FROM data_table AS t1, json_data AS t2; +JSON_OBJECTAGG(t1.pkey, t2.jcol) +{"1": {"1": 30, "2": 24, "3": 26, "4": 28, "5": 32}, "2": {"1": 30, "2": 24, "3": 26, "4": 28, "5": 32}, "3": {"1": 30, "2": 24, "3": 26, "4": 28, "5": 32}, "4": {"1": 30, "2": 24, "3": 26, "4": 28, "5": 32}, "5": {"1": 30, "2": 24, "3": 26, "4": 28, "5": 32}} +SELECT JSON_ARRAYAGG(jcol) FROM json_data; +JSON_ARRAYAGG(jcol) +[{"1": 30, "2": 24, "3": 26, "4": 28, "5": 32}, ["ailemac", "nielk", "nuicarc", "ihcseruj", "qweasdas"], [30, 24, 26, 28, 32], {"12": "uciov", "13": "ierdna", "14": "elisav", "15": "namor", "16": "jugcvb"}, {"1": "ailemac", "2": "nielk", "3": "nuicarc", "4": "ihcseruj", "5": "qweasdas"}, [1, 2, 3, 4, 5]] +include/diff_tables.inc [master:json_data, slave:json_data] +Warnings: +Warning 1235 This version of MySQL doesn't yet support 'sorting of non-scalar JSON values' +Warnings: +Warning 1235 This version of MySQL doesn't yet support 'sorting of non-scalar JSON values' +[Connection Master] +# Update values in the table +UPDATE json_data SET jcol= (SELECT JSON_ARRAYAGG(vcol) FROM data_table) WHERE nkey = 1; +include/sync_slave_sql_with_master.inc +[Connection Slave] +SELECT * FROM json_data WHERE nkey = 1; +nkey jcol +1 ["namor", "uciov", "ierdna", "elisav", "jugcvb"] +include/diff_tables.inc [master:json_data, slave:json_data] +Warnings: +Warning 1235 This version of MySQL doesn't yet support 'sorting of non-scalar JSON values' +Warnings: +Warning 1235 This version of MySQL doesn't yet support 'sorting of non-scalar JSON values' +[Connection Master] +# Delete values from the table +DELETE FROM json_data WHERE jcol = (SELECT JSON_ARRAYAGG(pkey) FROM data_table); +include/sync_slave_sql_with_master.inc +[Connection Slave] +SELECT * FROM json_data; +nkey jcol +1 ["namor", "uciov", "ierdna", "elisav", "jugcvb"] +2 ["ailemac", "nielk", "nuicarc", "ihcseruj", "qweasdas"] +3 [30, 24, 26, 28, 32] +4 {"12": "uciov", "13": "ierdna", "14": "elisav", "15": "namor", "16": "jugcvb"} +5 {"1": "ailemac", "2": "nielk", "3": "nuicarc", "4": "ihcseruj", "5": "qweasdas"} +include/diff_tables.inc [master:json_data, slave:json_data] +Warnings: +Warning 1235 This version of MySQL doesn't yet support 'sorting of non-scalar JSON values' +Warnings: +Warning 1235 This version of MySQL doesn't yet support 'sorting of non-scalar JSON values' +[Connection Master] +DROP TABLE data_table; +DROP TABLE json_data; +include/sync_slave_sql_with_master.inc include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_json.test b/mysql-test/suite/rpl/t/rpl_json.test index 435c7a913003..b209b3799945 100644 --- a/mysql-test/suite/rpl/t/rpl_json.test +++ b/mysql-test/suite/rpl/t/rpl_json.test @@ -226,6 +226,87 @@ SELECT * FROM t1 ORDER BY i; --connection master DROP TABLE t1, t2, t3, t4, t5; +--source include/sync_slave_sql_with_master.inc + +--echo # +--echo # WL#7987: JSON AGGREGATION FUNCTIONS +--echo # + +--connection master + +--echo # Create tables of various data types +CREATE TABLE data_table (pkey INT PRIMARY KEY AUTO_INCREMENT, + txt TEXT, vcol VARCHAR(20), num INT, + gcol INT AS (num * 2) VIRTUAL); + +CREATE TABLE json_data (nkey INT PRIMARY KEY AUTO_INCREMENT, jcol JSON); + +--echo # Insert values into the tables using the aggregation functions +INSERT INTO data_table(txt, vcol, num) VALUES ('ailemac', 'namor', 15), + ('nielk', 'uciov', 12), + ('nuicarc', 'ierdna', 13), + ('ihcseruj', 'elisav', 14), + ('qweasdas', 'jugcvb', 16); + +--disable_warnings +INSERT INTO json_data(jcol) SELECT JSON_OBJECTAGG(pkey, gcol) FROM data_table; +INSERT INTO json_data(jcol) SELECT JSON_ARRAYAGG(txt) FROM data_table; +INSERT INTO json_data(jcol) SELECT JSON_ARRAYAGG(gcol) FROM data_table; +INSERT INTO json_data(jcol) SELECT JSON_OBJECTAGG(num , vcol) FROM data_table; +INSERT INTO json_data(jcol) SELECT JSON_OBJECTAGG(pkey , txt) FROM data_table; +INSERT INTO json_data(jcol) SELECT JSON_ARRAYAGG(pkey) FROM data_table; +--enable_warnings + +--source include/sync_slave_sql_with_master.inc +--echo [Connection Slave] + +--echo # Check whether tables were created on the slave + +SELECT * FROM json_data; +SELECT JSON_OBJECTAGG(t1.pkey, t2.jcol) FROM data_table AS t1, json_data AS t2; +SELECT JSON_ARRAYAGG(jcol) FROM json_data; + +--let $diff_tables = master:json_data, slave:json_data +--source include/diff_tables.inc + +--echo [Connection Master] +--connection master + +--echo # Update values in the table +--disable_warnings +UPDATE json_data SET jcol= (SELECT JSON_ARRAYAGG(vcol) FROM data_table) WHERE nkey = 1; +--enable_warnings + +--source include/sync_slave_sql_with_master.inc +--echo [Connection Slave] + +SELECT * FROM json_data WHERE nkey = 1; + +--let $diff_tables = master:json_data, slave:json_data +--source include/diff_tables.inc + +--echo [Connection Master] +--connection master + +--echo # Delete values from the table +--disable_warnings +DELETE FROM json_data WHERE jcol = (SELECT JSON_ARRAYAGG(pkey) FROM data_table); +--enable_warnings + +--source include/sync_slave_sql_with_master.inc +--echo [Connection Slave] + +SELECT * FROM json_data; + +--let $diff_tables = master:json_data, slave:json_data +--source include/diff_tables.inc + +--echo [Connection Master] +--connection master + +DROP TABLE data_table; +DROP TABLE json_data; + --source include/sync_slave_sql_with_master.inc --source include/rpl_end.inc # End: diff --git a/rapid/plugin/x/tests/mtr/r/performance_schema.result b/rapid/plugin/x/tests/mtr/r/performance_schema.result index 91b24448da41..fa6b899c87df 100644 --- a/rapid/plugin/x/tests/mtr/r/performance_schema.result +++ b/rapid/plugin/x/tests/mtr/r/performance_schema.result @@ -301,8 +301,8 @@ command ok 1 0 rows affected SCHEMA_NAME DIGEST DIGEST_TEXT COUNT_STAR -null 21b6affb55f3e69c598b47257f4d0ec6 TRUNCATE TABLE `performance_schema` . `events_statements_summary_by_digest` 1 -null f29eded39dd5fa102f18987679dd0c14 SELECT ? 1 +null 3d4fc22e33e10d7235eced3c75a84c2c SELECT ? 1 +null d24da32343f2b799f8a7ba1bdc45f83b TRUNCATE TABLE `performance_schema` . `events_statements_summary_by_digest` 1 0 rows affected Mysqlx.Ok { msg: "bye!" diff --git a/sql/CMakeLists.txt b/sql/CMakeLists.txt index 3da1111a57ee..8cde51d86521 100644 --- a/sql/CMakeLists.txt +++ b/sql/CMakeLists.txt @@ -183,6 +183,7 @@ SET(SQL_SHARED_SOURCES sql_digest.cc sql_do.cc sql_error.cc + sql_exception_handler.cc sql_executor.cc sql_get_diagnostics.cc sql_handler.cc diff --git a/sql/item_json_func.cc b/sql/item_json_func.cc index 49de04d65e35..380566adcbc5 100644 --- a/sql/item_json_func.cc +++ b/sql/item_json_func.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -20,6 +20,7 @@ #include "derror.h" // ER_THD #include "mysqld.h" // key_memory_JSON, current_thd #include "sql_class.h" // THD +#include "sql_exception_handler.h" // handle_std_exception #include "item_cmpfunc.h" // Item_func_like #include "json_dom.h" #include "json_path.h" @@ -204,25 +205,12 @@ static enum_field_types get_normalized_field_type(Item *arg) } -/** - Helper method for Item_func_json_* methods. Check whether an argument - can be converted to a utf8mb4 string. - - @param[in] arg_item An argument Item - @param[out] value Where to materialize the arg_item's string value - @param[out] utf8_res Buffer for use by ensure_utf8mb4. - @param[in] func_name Name of the user-invoked JSON_ function - @param[out] safep String pointer after any relevant conversion - @param[out] safe_length Corresponding string length - - @returns true if the Item is not a utf8mb4 string -*/ -static bool get_json_string(Item *arg_item, - String *value, - String *utf8_res, - const char *func_name, - const char **safep, - size_t *safe_length) +bool get_json_string(Item *arg_item, + String *value, + String *utf8_res, + const char *func_name, + const char **safep, + size_t *safe_length) { String *const res= arg_item->val_str(value); @@ -336,69 +324,6 @@ static bool json_is_valid(Item **args, } - -#define CATCH_ALL(funcname, expr) \ - catch (const std::bad_alloc &e)\ - {\ - my_error(ER_STD_BAD_ALLOC_ERROR, MYF(0), e.what(), (funcname));\ - expr;\ - }\ - catch (const std::domain_error &e)\ - {\ - my_error(ER_STD_DOMAIN_ERROR, MYF(0), e.what(), (funcname));\ - expr;\ - }\ - catch (const std::length_error &e)\ - {\ - my_error(ER_STD_LENGTH_ERROR, MYF(0), e.what(), (funcname));\ - expr;\ - }\ - catch (const std::invalid_argument &e)\ - {\ - my_error(ER_STD_INVALID_ARGUMENT, MYF(0), e.what(), (funcname));\ - expr;\ - }\ - catch (const std::out_of_range &e)\ - {\ - my_error(ER_STD_OUT_OF_RANGE_ERROR, MYF(0), e.what(), (funcname));\ - expr;\ - }\ - catch (const std::overflow_error &e)\ - {\ - my_error(ER_STD_OVERFLOW_ERROR, MYF(0), e.what(), (funcname));\ - expr;\ - }\ - catch (const std::range_error &e)\ - {\ - my_error(ER_STD_RANGE_ERROR, MYF(0), e.what(), (funcname));\ - expr;\ - }\ - catch (const std::underflow_error &e)\ - {\ - my_error(ER_STD_UNDERFLOW_ERROR, MYF(0), e.what(), (funcname));\ - expr;\ - }\ - catch (const std::logic_error &e)\ - {\ - my_error(ER_STD_LOGIC_ERROR, MYF(0), e.what(), (funcname));\ - expr;\ - }\ - catch (const std::runtime_error &e)\ - {\ - my_error(ER_STD_RUNTIME_ERROR, MYF(0), e.what(), (funcname));\ - expr;\ - }\ - catch (const std::exception &e)\ - {\ - my_error(ER_STD_UNKNOWN_EXCEPTION, MYF(0), e.what(), (funcname));\ - expr;\ - }\ - catch (...)\ - {\ - my_error(ER_STD_UNKNOWN_EXCEPTION, MYF(0), (funcname));\ - expr;\ - } - /** Helper method for Item_func_json_* methods. Assumes that the caller has already verified that the path expression is not null. Raises an @@ -630,9 +555,6 @@ Item_json_func::save_in_field_inner(Field *field, bool no_conversions) longlong Item_func_json_valid::val_int() { DBUG_ASSERT(fixed == 1); - bool result= 1; - null_value= false; - try { bool ok; @@ -641,21 +563,20 @@ longlong Item_func_json_valid::val_int() return error_int(); } - if (!ok) - { - null_value= false; - return 0; - } + null_value= args[0]->null_value; - if (args[0]->null_value) - { - null_value= true; + if (null_value || !ok) return 0; - } - } CATCH_ALL("json_valid", result= 0) /* purecov: inspected */ - - return result; + return 1; + } + catch (...) + { + /* purecov: begin inspected */ + handle_std_exception(func_name()); + return error_int(); + /* purecov: end */ + } } @@ -947,7 +868,14 @@ longlong Item_func_json_contains::val_int() null_value= false; return ret; } - } CATCH_ALL("json_contains", return error_int()) /* purecov: inspected */ + } + catch (...) + { + /* purecov: begin inspected */ + handle_std_exception(func_name()); + return error_int(); + /* purecov: end */ + } } @@ -1035,7 +963,14 @@ longlong Item_func_json_contains_path::val_int() } } - } CATCH_ALL("json_contains_path", return error_int()) /* purecov: inspected */ + } + catch (...) + { + /* purecov: begin inspected */ + handle_std_exception(func_name()); + return error_int(); + /* purecov: end */ + } return result; } @@ -1175,7 +1110,7 @@ static uint opaque_index(enum_field_types field_type) return 1 + static_cast(Json_dom::J_ERROR) + offset; } -String *Item_func_json_type::val_str(String *str) +String *Item_func_json_type::val_str(String*) { DBUG_ASSERT(fixed == 1); @@ -1200,7 +1135,14 @@ String *Item_func_json_type::val_str(String *str) if (m_value.append(Json_dom::json_type_string_map[typename_idx])) return error_str(); /* purecov: inspected */ - } CATCH_ALL("json_type", return error_str()) /* purecov: inspected */ + } + catch (...) + { + /* purecov: begin inspected */ + handle_std_exception(func_name()); + return error_str(); + /* purecov: end */ + } null_value= false; return &m_value; @@ -1268,8 +1210,6 @@ longlong Item_json_func::val_int() double Item_json_func::val_real() { - char buff[MAX_FIELD_WIDTH]; - String str(buff, sizeof(buff), &my_charset_utf8mb4_bin); Json_wrapper wr; if (val_json(&wr)) return 0.0; @@ -1282,10 +1222,7 @@ double Item_json_func::val_real() my_decimal *Item_json_func::val_decimal(my_decimal *decimal_value) { - char buff[MAX_FIELD_WIDTH]; - String str(buff, sizeof(buff), &my_charset_utf8mb4_bin); Json_wrapper wr; - if (val_json(&wr)) { my_decimal_set_zero(decimal_value); @@ -1741,30 +1678,19 @@ bool get_json_atom_wrapper(Item **args, result= val_json_func_field_subselect(arg, calling_function, value, tmp, wr, scalar, accept_string); - } CATCH_ALL("CAST(... AS JSON)", result= true) /* purecov: inspected */ + } + catch (...) + { + /* purecov: begin inspected */ + handle_std_exception(calling_function); + return true; + /* purecov: end */ + } return result; } -/** - Convert JSON values or MySQL values to JSON. Converts SQL NULL - to the JSON null literal. - - @param[in] args arguments to function - @param[in] arg_idx the index of the argument to process - @param[in] calling_function name of the calling function - @param[in,out] value working area (if the returned Json_wrapper points - to a binary value rather than a DOM, this string - will end up holding the binary representation, and - it must stay alive until the wrapper is destroyed - or converted from binary to DOM) - @param[in,out] tmp temporary scratch space for converting strings to - the correct charset; only used if accept_string is - true and conversion is needed - @param[in,out] wr the result wrapper - @returns false if we found a value or NULL, true otherwise -*/ bool get_atom_null_as_null(Item **args, uint arg_idx, const char *calling_function, String *value, String *tmp, Json_wrapper *wr) @@ -1870,7 +1796,14 @@ longlong Item_func_json_length::val_int() null_value= true; return 0; } - } CATCH_ALL("json_length", return 0) /* purecov: inspected */ + } + catch (...) + { + /* purecov: begin inspected */ + handle_std_exception(func_name()); + return error_int(); + /* purecov: end */ + } if (arg_count > 1) { @@ -1920,7 +1853,14 @@ longlong Item_func_json_depth::val_int() null_value= true; return 0; } - } CATCH_ALL("json_depth", return error_int()) /* purecov: inspected */ + } + catch (...) + { + /* purecov: begin inspected */ + handle_std_exception(func_name()); + return error_int(); + /* purecov: end */ + } result= wrapper.depth(); @@ -1990,7 +1930,14 @@ bool Item_func_json_keys::val_json(Json_wrapper *wr) Json_wrapper resw(res); wr->steal(&resw); - } CATCH_ALL("json_keys", return error_json()) /* purecov: inspected */ + } + catch (...) + { + /* purecov: begin inspected */ + handle_std_exception(func_name()); + return error_json(); + /* purecov: end */ + } null_value= false; return false; @@ -2065,8 +2012,14 @@ bool Item_func_json_extract::val_json(Json_wrapper *wr) DBUG_ASSERT(v.size() == 1); wr->steal(&v[0]); } - - } CATCH_ALL("json_extract", return error_json()) /* purecov: inspected */ + } + catch (...) + { + /* purecov: begin inspected */ + handle_std_exception(func_name()); + return error_json(); + /* purecov: end */ + } null_value= false; return false; @@ -2198,8 +2151,14 @@ bool Item_func_json_array_append::val_json(Json_wrapper *wr) // docw still owns the augmented doc, so hand it over to result wr->steal(&docw); - - } CATCH_ALL("json_array_append", return error_json()) /* purecov: inspected */ + } + catch (...) + { + /* purecov: begin inspected */ + handle_std_exception(func_name()); + return error_json(); + /* purecov: end */ + } null_value= false; return false; @@ -2358,7 +2317,14 @@ bool Item_func_json_insert::val_json(Json_wrapper *wr) // docw still owns the augmented doc, so hand it over to result wr->steal(&docw); - } CATCH_ALL("json_insert", return error_json()) /* purecov: inspected */ + } + catch (...) + { + /* purecov: begin inspected */ + handle_std_exception(func_name()); + return error_json(); + /* purecov: end */ + } null_value= false; return false; @@ -2465,7 +2431,14 @@ bool Item_func_json_array_insert::val_json(Json_wrapper *wr) // docw still owns the augmented doc, so hand it over to result wr->steal(&docw); - } CATCH_ALL("json_array_insert", return error_json()) /* purecov: inspected */ + } + catch (...) + { + /* purecov: begin inspected */ + handle_std_exception(func_name()); + return error_json(); + /* purecov: end */ + } null_value= false; return false; @@ -2726,7 +2699,14 @@ bool Item_func_json_set_replace::val_json(Json_wrapper *wr) // docw still owns the augmented doc, so hand it over to result wr->steal(&docw); - } CATCH_ALL(func_name(), return error_json()) /* purecov: inspected */ + } + catch (...) + { + /* purecov: begin inspected */ + handle_std_exception(func_name()); + return error_json(); + /* purecov: end */ + } null_value= false; return false; @@ -2762,7 +2742,14 @@ bool Item_func_json_array::val_json(Json_wrapper *wr) // docw still owns the augmented doc, so hand it over to result wr->steal(&docw); - } CATCH_ALL("json_array", return error_json()) /* purecov: inspected */ + } + catch (...) + { + /* purecov: begin inspected */ + handle_std_exception(func_name()); + return error_json(); + /* purecov: end */ + } null_value= false; return false; @@ -2820,7 +2807,14 @@ bool Item_func_json_row_object::val_json(Json_wrapper *wr) // docw still owns the augmented doc, so hand it over to result wr->steal(&docw); - } CATCH_ALL("json_object", return error_json()) /* purecov: inspected */ + } + catch (...) + { + /* purecov: begin inspected */ + handle_std_exception(func_name()); + return error_json(); + /* purecov: end */ + } null_value= false; return false; @@ -3161,7 +3155,14 @@ bool Item_func_json_search::val_json(Json_wrapper *wr) } // end of loop through user-supplied path expressions } // end if there are user-supplied path expressions - } CATCH_ALL("json_search", return error_json()) /* purecov: inspected */ + } + catch (...) + { + /* purecov: begin inspected */ + handle_std_exception(func_name()); + return error_json(); + /* purecov: end */ + } if (matches.size() == 0) { @@ -3209,7 +3210,6 @@ bool Item_func_json_remove::val_json(Json_wrapper *wr) Json_wrapper wrapper; uint32 path_count= arg_count - 1; - bool had_error= false; null_value= false; try @@ -3227,15 +3227,17 @@ bool Item_func_json_remove::val_json(Json_wrapper *wr) if (m_path_cache.parse_and_cache_path(args, path_idx + 1, true)) { null_value= true; - break; + return false; } } - } CATCH_ALL("json_remove", (had_error= true)) /* purecov: inspected */ - - if (had_error || null_value) + } + catch (...) { - return had_error ? error_json() : false; + /* purecov: begin inspected */ + handle_std_exception(func_name()); + return error_json(); + /* purecov: end */ } for (uint path_idx= 0; path_idx < path_count; ++path_idx) @@ -3337,7 +3339,14 @@ bool Item_func_json_merge::val_json(Json_wrapper *wr) next_wrapper.set_alias(); result_dom= (idx == 0) ? next_dom : merge_doms(result_dom, next_dom); } - } CATCH_ALL("json_merge", (had_error= true)) /* purecov: inspected */ + } + catch (...) + { + /* purecov: begin inspected */ + handle_std_exception(func_name()); + had_error= true; + /* purecov: end */ + } if (had_error || null_value) { @@ -3407,7 +3416,14 @@ String *Item_func_json_quote::val_str(String *str) res->set_charset(&my_charset_utf8mb4_bin); if (double_quote(safep, safep_size, res)) return error_str(); /* purecov: inspected */ - } CATCH_ALL("json_quote", return error_str()) /* purecov: inspected */ + } + catch (...) + { + /* purecov: begin inspected */ + handle_std_exception(func_name()); + return error_str(); + /* purecov: end */ + } null_value= false; return res; @@ -3495,7 +3511,14 @@ String *Item_func_json_unquote::val_str(String *str) Json_wrapper wr(dom); if (str->copy(wr.get_data(), wr.get_data_length(), collation.collation)) return error_str(); /* purecov: inspected */ - } CATCH_ALL("json_unquote", return error_str()) /* purecov: inspected */ + } + catch (...) + { + /* purecov: begin inspected */ + handle_std_exception(func_name()); + return error_str(); + /* purecov: end */ + } null_value= false; diff --git a/sql/item_json_func.h b/sql/item_json_func.h index 9204ba54e045..0de76ff6f645 100644 --- a/sql/item_json_func.h +++ b/sql/item_json_func.h @@ -1,7 +1,7 @@ #ifndef ITEM_JSON_FUNC_INCLUDED #define ITEM_JSON_FUNC_INCLUDED -/* Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -22,6 +22,7 @@ #include "item_strfunc.h" // Item_str_func #include "mem_root_array.h" // Mem_root_array #include "prealloced_array.h" // Prealloced_array +#include "sql_exception_handler.h" // handle_std_exception class Item_func_like; struct Json_scalar_holder; @@ -822,4 +823,48 @@ bool geometry_to_json(Json_wrapper *wr, Item *geometry_arg, bool add_long_crs_urn, uint32 *geometry_srid); + +/** + Convert JSON values or MySQL values to JSON. Converts SQL NULL + to the JSON null literal. + + @param[in] args arguments to function + @param[in] arg_idx the index of the argument to process + @param[in] calling_function name of the calling function + @param[in,out] value working area (if the returned Json_wrapper points + to a binary value rather than a DOM, this string + will end up holding the binary representation, and + it must stay alive until the wrapper is destroyed + or converted from binary to DOM) + @param[in,out] tmp temporary scratch space for converting strings to + the correct charset; only used if accept_string is + true and conversion is needed + @param[in,out] wr the result wrapper + @returns false if we found a value or NULL, true otherwise +*/ +bool get_atom_null_as_null(Item **args, uint arg_idx, + const char *calling_function, String *value, + String *tmp, Json_wrapper *wr); + +/** + Helper method for Item_func_json_* methods. Check whether an argument + can be converted to a utf8mb4 string. + + @param[in] arg_item An argument Item + @param[out] value Where to materialize the arg_item's string value + @param[out] utf8_res Buffer for use by ensure_utf8mb4. + @param[in] func_name Name of the user-invoked JSON_ function + @param[out] safep String pointer after any relevant conversion + @param[out] safe_length Corresponding string length + + @returns true if the Item is not a utf8mb4 string +*/ +bool get_json_string(Item *arg_item, + String *value, + String *utf8_res, + const char *func_name, + const char **safep, + size_t *safe_length); + + #endif /* ITEM_JSON_FUNC_INCLUDED */ diff --git a/sql/item_sum.cc b/sql/item_sum.cc index ae98c8b1c22f..6b52c0023a52 100644 --- a/sql/item_sum.cc +++ b/sql/item_sum.cc @@ -21,6 +21,9 @@ Sum functions (COUNT, MIN...) */ +#include "item_json_func.h" // get_atom_null_as_null .. +#include "json_dom.h" +#include "sql_exception_handler.h" // handle_std_exception #include "sql_select.h" #include "sql_tmp_table.h" // create_tmp_table #include "sql_resolver.h" // setup_order, fix_inner_refs @@ -241,6 +244,8 @@ bool Item_sum::check_sum_func(THD *thd, Item **ref) } aggr_sel->set_agg_func_used(true); + if (sum_func() == JSON_AGG_FUNC) + aggr_sel->set_json_agg_func_used(true); update_used_tables(); thd->lex->in_sum_func= in_sum_func; return FALSE; @@ -3815,3 +3820,297 @@ Item_func_group_concat::~Item_func_group_concat() if (!original && unique_filter) delete unique_filter; } + + +bool Item_sum_json::fix_fields(THD *thd, Item **ref) +{ + DBUG_ASSERT(!fixed); + result_field= NULL; + + if (init_sum_func_check(thd)) + return true; + + Disable_semijoin_flattening DSF(thd->lex->current_select(), true); + + for (uint i= 0; i < arg_count; i++) + { + if ((!args[i]->fixed && args[i]->fix_fields(thd, args + i)) || + args[i]->check_cols(1)) + return true; + } + fix_length_and_dec(); + + if (check_sum_func(thd, ref)) + return true; + + max_length= MAX_BLOB_WIDTH; + maybe_null= true; + null_value= true; + fixed= true; + return false; +} + +String *Item_sum_json::val_str(String *str) +{ + DBUG_ASSERT(fixed == 1); + if (null_value || m_wrapper.empty()) + return NULL; + str->length(0); + if (m_wrapper.to_string(str, true, func_name())) + return error_str(); + + return str; +} + + +bool Item_sum_json::val_json(Json_wrapper *wr) +{ + if (null_value || m_wrapper.empty()) + return true; + + /* + val_* functions are called more than once in aggregates and + by passing the dom some function will destroy it so a clone is needed. + */ + Json_dom *dom= m_wrapper.clone_dom(); + Json_wrapper tmp(dom); + wr->steal(&tmp); + + return false; +} + + +double Item_sum_json::val_real() +{ + if (null_value || m_wrapper.empty()) + return 0.0; + + return m_wrapper.coerce_real(func_name()); +} + + +longlong Item_sum_json::val_int() +{ + if (null_value || m_wrapper.empty()) + return 0; + + return m_wrapper.coerce_int(func_name()); +} + + +my_decimal *Item_sum_json::val_decimal(my_decimal *decimal_value) +{ + if (null_value || m_wrapper.empty()) + { + my_decimal_set_zero(decimal_value); + return decimal_value; + } + + return m_wrapper.coerce_decimal(decimal_value, func_name()); +} + + +bool Item_sum_json::get_date(MYSQL_TIME *ltime, my_time_flags_t fuzzydate) +{ + if (null_value || m_wrapper.empty()) + return true; + + return m_wrapper.coerce_date(ltime, fuzzydate, func_name()); +} + + +bool Item_sum_json::get_time(MYSQL_TIME *ltime) +{ + if (null_value || m_wrapper.empty()) + return true; + + return m_wrapper.coerce_time(ltime, func_name()); +} + + +void Item_sum_json::reset_field() +{ + /* purecov: begin inspected */ + DBUG_ASSERT(0); // Check JOIN::with_json_agg for more details. + // Create the container + clear(); + // Append element to the container. + add(); + + /* + field_type is MYSQL_TYPE_JSON so Item::make_string_field will always + create a Field_json(in Item_sum::create_tmp_field). + The cast is need since Field does not expose store_json function. + */ + Field_json *json_result_field= down_cast(result_field); + json_result_field->set_notnull(); + // Store the container inside the field. + json_result_field->store_json(&m_wrapper); + /* purecov: end */ +} + + +void Item_sum_json::update_field() +{ + /* purecov: begin inspected */ + DBUG_ASSERT(0); // Check JOIN::with_json_agg for more details. + /* + field_type is MYSQL_TYPE_JSON so Item::make_string_field will always + create a Field_json(in Item_sum::create_tmp_field). + The cast is need since Field does not expose store_json function. + */ + Field_json *json_result_field= down_cast(result_field); + // Restore the container(m_wrapper) from the field + json_result_field->val_json(&m_wrapper); + + // Append elements to the container. + add(); + // Store the container inside the field. + json_result_field->store_json(&m_wrapper); + json_result_field->set_notnull(); + /* purecov: end */ +} + + +void Item_sum_json_array::clear() +{ + null_value= true; + m_json_array.clear(); + + Json_wrapper tmp(&m_json_array); + // Set the array to the m_wrapper. + m_wrapper.steal(&tmp); + // But let Item_sum_json_array keep the ownership. + m_wrapper.set_alias(); +} + + +void Item_sum_json_object::clear() +{ + null_value= true; + m_json_object.clear(); + + Json_wrapper tmp(&m_json_object); + // Set the object to the m_wrapper. + m_wrapper.steal(&tmp); + // But let Item_sum_json_object keep the ownership. + m_wrapper.set_alias(); +} + + +bool Item_sum_json_array::add() +{ + DBUG_ASSERT(fixed == 1); + DBUG_ASSERT(arg_count == 1); + + const THD *thd= current_thd; + /* + Checking if an error happened inside one of the functions that have no + way of returning an error status. (reset_field(), update_field() or + clear()) + */ + if (thd->is_error()) + return error_json(); + + try + { + Json_wrapper value_wrapper; + // Get the value. + if (get_atom_null_as_null(args, 0, func_name(), &m_value, + &m_conversion_buffer, + &value_wrapper)) + return error_json(); + + /* + The m_wrapper always points to m_json_array or the result of + deserializing the result_field in reset/update_field. + */ + Json_array *arr= down_cast(m_wrapper.to_dom()); + if (arr->append_alias(value_wrapper.to_dom())) + return error_json(); /* purecov: inspected */ + + null_value= false; + value_wrapper.set_alias(); // release the DOM + } + catch (...) + { + /* purecov: begin inspected */ + handle_std_exception(func_name()); + return error_json(); + /* purecov: end */ + } + + return false; +} + + +Item *Item_sum_json_array::copy_or_same(THD *thd) +{ + return new (thd->mem_root) Item_sum_json_array(thd, this); +} + + +bool Item_sum_json_object::add() +{ + DBUG_ASSERT(fixed == 1); + DBUG_ASSERT(arg_count == 2); + + const THD *thd= current_thd; + /* + Checking if an error happened inside one of the functions that have no + way of returning an error status. (reset_field(), update_field() or + clear()) + */ + if (thd->is_error()) + return error_json(); + + try + { + // key + Item *key_item= args[0]; + const char *safep; // contents of key_item, possibly converted + size_t safe_length; // length of safep + + if (get_json_string(key_item, &m_tmp_key_value, &m_conversion_buffer, + func_name(), &safep, &safe_length)) + { + my_error(ER_JSON_DOCUMENT_NULL_KEY, MYF(0)); + return error_json(); + } + + std::string key(safep, safe_length); + + // value + Json_wrapper value_wrapper; + if (get_atom_null_as_null(args, 1, func_name(), &m_value, + &m_conversion_buffer, &value_wrapper)) + return error_json(); + + /* + The m_wrapper always points to m_json_object or the result of + deserializing the result_field in reset/update_field. + */ + Json_object *object= down_cast(m_wrapper.to_dom()); + if (object->add_alias(key, value_wrapper.to_dom())) + return error_json(); /* purecov: inspected */ + + null_value= false; + // object will take ownership of the value + value_wrapper.set_alias(); + } + catch (...) + { + /* purecov: begin inspected */ + handle_std_exception(func_name()); + return error_json(); + /* purecov: end */ + } + + return false; +} + + +Item *Item_sum_json_object::copy_or_same(THD *thd) +{ + return new (thd->mem_root) Item_sum_json_object(thd, this); +} diff --git a/sql/item_sum.h b/sql/item_sum.h index b2d266748b61..a3b44d781100 100644 --- a/sql/item_sum.h +++ b/sql/item_sum.h @@ -21,6 +21,7 @@ #include "my_tree.h" // TREE #include "item.h" // Item_result_field +#include "json_dom.h" // Json_wrapper #include "sql_alloc.h" // Sql_alloc #include "sql_udf.h" // udf_handler #include "mem_root_array.h" @@ -342,9 +343,21 @@ class Item_sum :public Item_result_field bool has_with_distinct() const { return with_distinct; } enum Sumfunctype - { COUNT_FUNC, COUNT_DISTINCT_FUNC, SUM_FUNC, SUM_DISTINCT_FUNC, AVG_FUNC, - AVG_DISTINCT_FUNC, MIN_FUNC, MAX_FUNC, STD_FUNC, - VARIANCE_FUNC, SUM_BIT_FUNC, UDF_SUM_FUNC, GROUP_CONCAT_FUNC + { + COUNT_FUNC, // COUNT + COUNT_DISTINCT_FUNC, // COUNT (DISTINCT) + SUM_FUNC, // SUM + SUM_DISTINCT_FUNC, // SUM (DISTINCT) + AVG_FUNC, // AVG + AVG_DISTINCT_FUNC, // AVG (DISTINCT) + MIN_FUNC, // MIN + MAX_FUNC, // MAX + STD_FUNC, // STD/STDDEV/STDDEV_POP + VARIANCE_FUNC, // VARIANCE/VAR_POP and VAR_SAMP + SUM_BIT_FUNC, // BIT_AND, BIT_OR and BIT_XOR + UDF_SUM_FUNC, // user defined functions + GROUP_CONCAT_FUNC, // GROUP_CONCAT + JSON_AGG_FUNC, // JSON_ARRAYAGG and JSON_OBJECTAGG }; Item **ref_by; /* pointer to a ref to the object used to register it */ @@ -391,6 +404,15 @@ class Item_sum :public Item_result_field init_aggregator(); } + Item_sum(const POS &pos, Item *a, Item *b) + :super(pos), next(NULL), quick_group(true), arg_count(2), args(tmp_args), + forced_const(false) + { + args[0]= a; + args[1]= b; + init_aggregator(); + } + Item_sum(const POS &pos, PT_item_list *opt_list); //Copy constructor, need to perform subselects with temporary tables @@ -882,6 +904,82 @@ class Item_avg_field :public Item_sum_num_field }; +/// Common abstraction for Item_sum_json_array and Item_sum_json_object +class Item_sum_json : public Item_sum +{ +protected: + /// String used when reading JSON binary values or JSON text values. + String m_value; + /// String used for converting JSON text values to utf8mb4 charset. + String m_conversion_buffer; + /// Wrapper around the container (object/array) which accumulates the value. + Json_wrapper m_wrapper; + +public: + Item_sum_json(THD *thd, Item_sum *item) + : Item_sum(thd, item) + {} + Item_sum_json(const POS &pos, Item *a) + : Item_sum(pos, a) + {} + Item_sum_json(const POS &pos, Item *a, Item *b) + : Item_sum(pos, a, b) + {} + + virtual bool fix_fields(THD *thd, Item **pItem); + enum_field_types field_type() const { return MYSQL_TYPE_JSON; } + virtual enum Sumfunctype sum_func() const { return JSON_AGG_FUNC; } + virtual Item_result result_type() const { return STRING_RESULT; } + + virtual double val_real(); + virtual longlong val_int(); + virtual String *val_str(String *str); + virtual bool val_json(Json_wrapper *wr); + virtual my_decimal *val_decimal(my_decimal *decimal_buffer); + virtual bool get_date(MYSQL_TIME *ltime, my_time_flags_t fuzzydate); + virtual bool get_time(MYSQL_TIME *ltime); + + virtual void reset_field(); + virtual void update_field(); +}; + + +/// Implements aggregation of values into an array. +class Item_sum_json_array : public Item_sum_json +{ + /// Accumulates the final value. + Json_array m_json_array; +public: + Item_sum_json_array(THD *thd, Item_sum *item) + : Item_sum_json(thd, item) { } + Item_sum_json_array(const POS &pos, Item *a) + : Item_sum_json(pos, a) { } + virtual const char *func_name() const { return "json_arrayagg("; } + virtual void clear(); + virtual bool add(); + virtual Item *copy_or_same(THD* thd); +}; + + +/// Implements aggregation of values into an object. +class Item_sum_json_object : public Item_sum_json +{ + /// Accumulates the final value. + Json_object m_json_object; + /// Buffer used to get the value of the key. + String m_tmp_key_value; +public: + Item_sum_json_object(THD *thd, Item_sum *item) + : Item_sum_json(thd, item) { } + Item_sum_json_object(const POS &pos, Item *a, Item *b) + : Item_sum_json(pos, a, b) { } + virtual const char *func_name() const { return "json_objectagg("; } + virtual void clear(); + virtual bool add(); + virtual Item *copy_or_same(THD* thd); +}; + + class Item_sum_avg :public Item_sum_sum { public: diff --git a/sql/lex.h b/sql/lex.h index 652188e823d3..464cad7093f0 100644 --- a/sql/lex.h +++ b/sql/lex.h @@ -1,7 +1,7 @@ #ifndef LEX_INCLUDED #define LEX_INCLUDED -/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -704,6 +704,8 @@ static const SYMBOL symbols[] = { { SYM_FN("DATE_SUB", DATE_SUB_INTERVAL)}, { SYM_FN("EXTRACT", EXTRACT_SYM)}, { SYM_FN("GROUP_CONCAT", GROUP_CONCAT_SYM)}, + { SYM_FN("JSON_OBJECTAGG", JSON_OBJECTAGG)}, + { SYM_FN("JSON_ARRAYAGG", JSON_ARRAYAGG)}, { SYM_FN("MAX", MAX_SYM)}, { SYM_FN("MID", SUBSTRING)}, /* unireg function */ { SYM_FN("MIN", MIN_SYM)}, diff --git a/sql/sql_exception_handler.cc b/sql/sql_exception_handler.cc new file mode 100644 index 000000000000..7defcc4ac817 --- /dev/null +++ b/sql/sql_exception_handler.cc @@ -0,0 +1,89 @@ +/* + Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + + 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, + 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA +*/ + +/** + @file + + @brief + This file defines functions to convert exceptions to MySQL error messages. +*/ + +#include "sql_exception_handler.h" + +#include // std::bad_alloc +#include // Other std exceptions + +#include "my_global.h" // MYF +#include "my_sys.h" // my_error +#include "mysqld_error.h" // Error codes + +void handle_std_exception(const char *funcname) +{ + try + { + throw; + } + catch (const std::bad_alloc &e) + { + my_error(ER_STD_BAD_ALLOC_ERROR, MYF(0), e.what(), funcname); + } + catch (const std::domain_error &e) + { + my_error(ER_STD_DOMAIN_ERROR, MYF(0), e.what(), funcname); + } + catch (const std::length_error &e) + { + my_error(ER_STD_LENGTH_ERROR, MYF(0), e.what(), funcname); + } + catch (const std::invalid_argument &e) + { + my_error(ER_STD_INVALID_ARGUMENT, MYF(0), e.what(), funcname); + } + catch (const std::out_of_range &e) + { + my_error(ER_STD_OUT_OF_RANGE_ERROR, MYF(0), e.what(), funcname); + } + catch (const std::overflow_error &e) + { + my_error(ER_STD_OVERFLOW_ERROR, MYF(0), e.what(), funcname); + } + catch (const std::range_error &e) + { + my_error(ER_STD_RANGE_ERROR, MYF(0), e.what(), funcname); + } + catch (const std::underflow_error &e) + { + my_error(ER_STD_UNDERFLOW_ERROR, MYF(0), e.what(), funcname); + } + catch (const std::logic_error &e) + { + my_error(ER_STD_LOGIC_ERROR, MYF(0), e.what(), funcname); + } + catch (const std::runtime_error &e) + { + my_error(ER_STD_RUNTIME_ERROR, MYF(0), e.what(), funcname); + } + catch (const std::exception &e) + { + my_error(ER_STD_UNKNOWN_EXCEPTION, MYF(0), e.what(), funcname); + } + catch (...) + { + my_error(ER_UNKNOWN_ERROR, MYF(0)); + } +} + diff --git a/sql/sql_exception_handler.h b/sql/sql_exception_handler.h new file mode 100644 index 000000000000..39985ccc89c4 --- /dev/null +++ b/sql/sql_exception_handler.h @@ -0,0 +1,58 @@ +#ifndef SQL_EXCEPTION_HANDLER_H_INCLUDED +#define SQL_EXCEPTION_HANDLER_H_INCLUDED + +/* + Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + + 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, + 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA +*/ + +/** + @file + + @brief This file declares functions to convert exceptions to MySQL + error messages. + + The pattern for use in other functions is: + + @code + try + { + something_that_throws(); + } + catch (...) + { + handle_foo_exception("function_name"); + } + @endcode + + There are different handlers for different use cases. +*/ + +/** + Handle an exception of any type. + + Code that could throw exceptions should be wrapped in try/catch, and + the catch block should raise a corresponding MySQL error. If this + function is called from the catch block, it will raise a specialized + error message for many of the std::exception subclasses, or a more + generic error message if it is not a std::exception. + + @param funcname the name of the function that caught an exception + + @see handle_gis_exception +*/ +void handle_std_exception(const char *funcname); + +#endif // SQL_EXCEPTION_HANDLER_H_INCLUDED diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index 141eebe63540..6e6d679b8ad0 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -2278,6 +2278,7 @@ st_select_lex::st_select_lex outer_join(0), opt_hints_qb(NULL), m_agg_func_used(false), + m_json_agg_func_used(false), sj_candidates(NULL) { } diff --git a/sql/sql_lex.h b/sql/sql_lex.h index a64943c23da7..db7ce4b65787 100644 --- a/sql/sql_lex.h +++ b/sql/sql_lex.h @@ -1296,9 +1296,11 @@ class st_select_lex: public Sql_alloc function. */ bool agg_func_used() const { return m_agg_func_used; } + bool json_agg_func_used() const { return m_json_agg_func_used; } void set_agg_func_used(bool val) { m_agg_func_used= val; } + void set_json_agg_func_used(bool val) { m_json_agg_func_used= val; } /// Lookup for SELECT_LEX type type_enum type(); @@ -1353,6 +1355,7 @@ class st_select_lex: public Sql_alloc void delete_unused_merged_columns(List *tables); bool m_agg_func_used; + bool m_json_agg_func_used; /// Helper for fix_prepare_information() void fix_prepare_information_for_order(THD *thd, diff --git a/sql/sql_optimizer.cc b/sql/sql_optimizer.cc index 8a5e9b33b3b0..c0a8b4363410 100644 --- a/sql/sql_optimizer.cc +++ b/sql/sql_optimizer.cc @@ -1321,7 +1321,7 @@ void JOIN::test_skip_sort() is going to be used as it is applied now only for one table queries with covering indexes. */ - if (!(select_lex->active_options() & SELECT_BIG_RESULT) || + if (!(select_lex->active_options() & SELECT_BIG_RESULT || with_json_agg) || (tab->quick() && tab->quick()->get_type() == QUICK_SELECT_I::QS_TYPE_GROUP_MIN_MAX)) diff --git a/sql/sql_optimizer.h b/sql/sql_optimizer.h index 4568a4e61d43..c86320a95c19 100644 --- a/sql/sql_optimizer.h +++ b/sql/sql_optimizer.h @@ -1,7 +1,7 @@ #ifndef SQL_OPTIMIZER_INCLUDED #define SQL_OPTIMIZER_INCLUDED -/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -141,6 +141,7 @@ class JOIN :public Sql_alloc set_group_rpa(false), group_sent(false), calc_found_rows(false), + with_json_agg(select->json_agg_func_used()), optimized(false), executed(false), plan_state(NO_PLAN) @@ -528,6 +529,15 @@ class JOIN :public Sql_alloc /// If true, calculate found rows for this query block bool calc_found_rows; + /** + This will force tmp table to NOT use index + update for group + operation as it'll cause [de]serialization for each json aggregated + value and is very ineffective (times worse). + Server should use filesort, or tmp table + filesort to resolve GROUP BY + with JSON aggregate functions. + */ + bool with_json_agg; + /// True if plan is const, ie it will return zero or one rows. bool plan_is_const() const { return const_tables == primary_tables; } diff --git a/sql/sql_select.cc b/sql/sql_select.cc index b7385caabcca..e4761c964901 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -3550,11 +3550,13 @@ bool JOIN::make_tmp_tables_info() /* Create temporary table on first execution of this join. (Will be reused if this is a subquery that is executed several times.) + Don't use tmp table grouping for json aggregate funcs as it's + very ineffective. */ init_items_ref_array(); ORDER_with_src tmp_group; - if (!simple_group && !(test_flags & TEST_NO_KEY_GROUP)) + if (!simple_group && !(test_flags & TEST_NO_KEY_GROUP) && !with_json_agg) tmp_group= group_list; tmp_table_param.hidden_field_count= diff --git a/sql/sql_tmp_table.cc b/sql/sql_tmp_table.cc index 7838f5b7d8f0..c895588ac8ef 100644 --- a/sql/sql_tmp_table.cc +++ b/sql/sql_tmp_table.cc @@ -664,6 +664,12 @@ create_tmp_table(THD *thd, Temp_table_param *param, List &fields, uint temp_pool_slot=MY_BIT_NONE; uint fieldnr= 0; ulong reclength, string_total_length, distinct_key_length= 0; + /** + When true, enforces unique constraint (by adding a hidden hash_field and + creating a key over this field) when: + (1) unique key is too long or + (2) number of key parts in distinct key is too big. + */ bool using_unique_constraint= false; bool use_packed_rows= false; bool not_all_columns= !(select_options & TMP_TABLE_ALL_COLUMNS); @@ -1005,7 +1011,7 @@ create_tmp_table(THD *thd, Temp_table_param *param, List &fields, /* Calculate length of distinct key. The goal is to decide what to use - key or unique constraint. As blobs force unique constraint on their - own, they aren't taken into account. + own due to their length, they aren't taken into account. */ if (distinct && !using_unique_constraint && hidden_field_count <= 0 && new_field) diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 2275de122f46..34145a791cd2 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -463,6 +463,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, YYLTYPE **c, ulong *yystacksize); Comments for TOKENS. For each token, please include in the same line a comment that contains the following tags: + SQL-2015-R : Reserved keyword as per SQL-2015 draft SQL-2003-R : Reserved keyword as per SQL-2003 SQL-2003-N : Non Reserved keyword as per SQL-2003 SQL-1999-R : Reserved keyword as per SQL-1999 @@ -1127,6 +1128,12 @@ bool my_yyoverflow(short **a, YYSTYPE **b, YYLTYPE **c, ulong *yystacksize); %token YEAR_SYM /* SQL-2003-R */ %token ZEROFILL +/* + Tokens from MySQL 8.0 +*/ +%token JSON_OBJECTAGG /* SQL-2015-R */ +%token JSON_ARRAYAGG /* SQL-2015-R */ + /* Resolve column attribute ambiguity -- force precedence of "UNIQUE KEY" against simple "UNIQUE" and "KEY" attributes: @@ -10051,6 +10058,14 @@ sum_expr: { $$= NEW_PTN Item_sum_or(@$, $3); } + | JSON_ARRAYAGG '(' in_sum_expr ')' + { + $$= NEW_PTN Item_sum_json_array(@$, $3); + } + | JSON_OBJECTAGG '(' in_sum_expr ',' in_sum_expr ')' + { + $$= NEW_PTN Item_sum_json_object(@$, $3, $5); + } | BIT_XOR '(' in_sum_expr ')' { $$= NEW_PTN Item_sum_xor(@$, $3); From a118a87659e789e0f6d297d8f6ffe7c5f7fe4fcb Mon Sep 17 00:00:00 2001 From: Knut Anders Hatlen Date: Thu, 12 Oct 2017 14:16:07 +0200 Subject: [PATCH 0267/1221] WL#11065: Backport JSON functions from 8.0 to 5.7 (part 2) Add a new function, JSON_PRETTY, which transforms a JSON document into a more human-readable form with newlines and indentation. The following changes are backported from trunk: WL#9191: Add JSON_PRETTY function Bug#22284168: REMOVE NOW REDUNDANT SPACE RESERVATION IN JSON_DOM.CC Bug#24586888: SELECT LENGTH(JSON) Change-Id: I3a79f987e7c4a0a8c94fb685273909669ae3310c --- .../inc/gcol_supported_sql_funcs_main.inc | 11 +- .../r/gcol_supported_sql_funcs_innodb.result | 20 +- .../r/gcol_supported_sql_funcs_myisam.result | 20 +- mysql-test/suite/json/inc/json_functions.inc | 41 +- .../suite/json/r/json_functions_innodb.result | 210 ++++++++- .../suite/json/r/json_functions_ndb.result | 210 ++++++++- mysql-test/suite/rpl/r/rpl_json.result | 414 ++++++++++++++++++ mysql-test/suite/rpl/t/rpl_json.test | 88 ++++ sql-common/sql_string.cc | 4 +- sql/item_create.cc | 14 +- sql/item_json_func.cc | 29 ++ sql/item_json_func.h | 19 + sql/json_dom.cc | 162 +++---- sql/json_dom.h | 16 +- 14 files changed, 1144 insertions(+), 114 deletions(-) diff --git a/mysql-test/suite/gcol/inc/gcol_supported_sql_funcs_main.inc b/mysql-test/suite/gcol/inc/gcol_supported_sql_funcs_main.inc index 12f9bc38bc8e..cb22f9b31d5c 100644 --- a/mysql-test/suite/gcol/inc/gcol_supported_sql_funcs_main.inc +++ b/mysql-test/suite/gcol/inc/gcol_supported_sql_funcs_main.inc @@ -486,7 +486,7 @@ let $rows = 1; --echo # QUOTE() let $cols = a varchar(10), b varchar(10) generated always as (quote(a)) virtual; -let $values1 = 'Don\'t',default; +let $values1 = 'Don''t',default; let $rows = 1; --source suite/gcol/inc/gcol_supported_sql_funcs.inc @@ -1136,6 +1136,15 @@ let $rows = 1; --echo # None. +--echo # +--echo # JSON functions +--echo # + +--echo # JSON_PRETTY() +let $cols = a varchar(1024), b varchar(1024) generated always as (JSON_PRETTY(a)) virtual; +let $values1 = '{}', default; +let $rows = 1; +--source suite/gcol/inc/gcol_supported_sql_funcs.inc --echo # --echo # OTHER FUNCTIONS diff --git a/mysql-test/suite/gcol/r/gcol_supported_sql_funcs_innodb.result b/mysql-test/suite/gcol/r/gcol_supported_sql_funcs_innodb.result index ac940e6dd9f1..acd58fe4aac7 100644 --- a/mysql-test/suite/gcol/r/gcol_supported_sql_funcs_innodb.result +++ b/mysql-test/suite/gcol/r/gcol_supported_sql_funcs_innodb.result @@ -1163,7 +1163,7 @@ t1 CREATE TABLE `t1` ( `a` varchar(10) DEFAULT NULL, `b` varchar(10) GENERATED ALWAYS AS (quote(`a`)) VIRTUAL ) ENGINE=InnoDB DEFAULT CHARSET=latin1 -insert into t1 values ('Don\'t',default); +insert into t1 values ('Don''t',default); select * from t1; a b Don't 'Don\'t' @@ -2730,6 +2730,24 @@ drop table t1; set sql_warnings = 0; # None. # +# JSON functions +# +# JSON_PRETTY() +set sql_warnings = 1; +create table t1 (a varchar(1024), b varchar(1024) generated always as (JSON_PRETTY(a)) virtual); +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` varchar(1024) DEFAULT NULL, + `b` varchar(1024) GENERATED ALWAYS AS (json_pretty(`a`)) VIRTUAL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +insert into t1 values ('{}', default); +select * from t1; +a b +{} {} +drop table t1; +set sql_warnings = 0; +# # OTHER FUNCTIONS # # AES_DECRYPT(), AES_ENCRYPT() diff --git a/mysql-test/suite/gcol/r/gcol_supported_sql_funcs_myisam.result b/mysql-test/suite/gcol/r/gcol_supported_sql_funcs_myisam.result index 53436c2fa9d0..8abab0889eb6 100644 --- a/mysql-test/suite/gcol/r/gcol_supported_sql_funcs_myisam.result +++ b/mysql-test/suite/gcol/r/gcol_supported_sql_funcs_myisam.result @@ -1163,7 +1163,7 @@ t1 CREATE TABLE `t1` ( `a` varchar(10) DEFAULT NULL, `b` varchar(10) GENERATED ALWAYS AS (quote(`a`)) VIRTUAL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 -insert into t1 values ('Don\'t',default); +insert into t1 values ('Don''t',default); select * from t1; a b Don't 'Don\'t' @@ -2730,6 +2730,24 @@ drop table t1; set sql_warnings = 0; # None. # +# JSON functions +# +# JSON_PRETTY() +set sql_warnings = 1; +create table t1 (a varchar(1024), b varchar(1024) generated always as (JSON_PRETTY(a)) virtual); +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` varchar(1024) DEFAULT NULL, + `b` varchar(1024) GENERATED ALWAYS AS (json_pretty(`a`)) VIRTUAL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +insert into t1 values ('{}', default); +select * from t1; +a b +{} {} +drop table t1; +set sql_warnings = 0; +# # OTHER FUNCTIONS # # AES_DECRYPT(), AES_ENCRYPT() diff --git a/mysql-test/suite/json/inc/json_functions.inc b/mysql-test/suite/json/inc/json_functions.inc index 90bc001c507d..af2b22940b9b 100644 --- a/mysql-test/suite/json/inc/json_functions.inc +++ b/mysql-test/suite/json/inc/json_functions.inc @@ -1967,7 +1967,8 @@ JSON_DEPTH(j), JSON_ARRAY(j, j), JSON_OBJECT('k', j), JSON_UNQUOTE(CAST(j AS CHAR)), -JSON_QUOTE(CAST(j AS CHAR)) +JSON_QUOTE(CAST(j AS CHAR)), +JSON_PRETTY(j) FROM T_WITH_NULLS ORDER BY i; eval $query; @@ -3350,6 +3351,44 @@ SELECT * FROM t; DROP TABLE t; +--echo # +--echo # WL#9191: JSON_PRETTY function +--echo # +CREATE TABLE t(id INT PRIMARY KEY AUTO_INCREMENT, + uc VARCHAR(128) CHARACTER SET utf8mb4, + lc VARCHAR(128) CHARACTER SET latin1, + j JSON); +INSERT INTO t(uc) VALUES +(NULL), +('{}'), +('[]'), +('[1,2,3]'), +('{"a":1,"b":2}'), +('{"a":[1,{}],"b":[]}'), +('{"a":{"b":{"c":{"d":{"e":{"f":null}}}}}}'), +('true'), +('false'), +('null'), +('1'), +('1.1'), +('"hello"'), +(JSON_ARRAY('abc +def', '"abc"')); +UPDATE t SET lc = uc, j = uc; +SELECT JSON_PRETTY(uc) AS c1 FROM t ORDER BY id; +SELECT JSON_PRETTY(lc) AS c1 FROM t ORDER BY id; +SELECT JSON_PRETTY(j) AS c1 FROM t ORDER BY id; +SELECT DISTINCT CHARSET(JSON_PRETTY(uc)) AS c1, + CHARSET(JSON_PRETTY(lc)) AS c2, + CHARSET(JSON_PRETTY(j)) AS c3 FROM t; +DROP TABLE t; +--error ER_INVALID_JSON_TEXT_IN_PARAM +SELECT JSON_PRETTY('this is not JSON') AS j; +--error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT +SELECT JSON_PRETTY(); +--error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT +SELECT JSON_PRETTY('{}', 2); + # Local Variables: # mode: sql # sql-product: mysql diff --git a/mysql-test/suite/json/r/json_functions_innodb.result b/mysql-test/suite/json/r/json_functions_innodb.result index f34733e058e6..4175cc39f6da 100644 --- a/mysql-test/suite/json/r/json_functions_innodb.result +++ b/mysql-test/suite/json/r/json_functions_innodb.result @@ -6472,16 +6472,21 @@ JSON_DEPTH(j), JSON_ARRAY(j, j), JSON_OBJECT('k', j), JSON_UNQUOTE(CAST(j AS CHAR)), -JSON_QUOTE(CAST(j AS CHAR)) +JSON_QUOTE(CAST(j AS CHAR)), +JSON_PRETTY(j) FROM T_WITH_NULLS ORDER BY i; -JSON_VALID(j) JSON_TYPE(j) JSON_KEYS(j) JSON_EXTRACT(j, '$') JSON_REMOVE(j, '$.a.b.c') JSON_ARRAY_APPEND(j, '$', 2) JSON_SET(j, '$[0]', 2) JSON_INSERT(j, '$[0]', 2) JSON_REPLACE(j, '$[0]', 2) JSON_MERGE(j, j) JSON_SEARCH(j, 'one', 'abc') JSON_CONTAINS(j, '[1]') JSON_CONTAINS_PATH(j, 'all', '$.a') JSON_LENGTH(j) JSON_DEPTH(j) JSON_ARRAY(j, j) JSON_OBJECT('k', j) JSON_UNQUOTE(CAST(j AS CHAR)) JSON_QUOTE(CAST(j AS CHAR)) -NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL [null, null] {"k": null} NULL NULL -1 ARRAY NULL [1] [1] [1, 2] [2] [1] [2] [1, 1] NULL 1 0 1 2 [[1], [1]] {"k": [1]} [1] "[1]" -NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL [null, null] {"k": null} NULL NULL -1 OBJECT ["a"] {"a": "b"} {"a": "b"} [{"a": "b"}, 2] 2 {"a": "b"} 2 {"a": ["b", "b"]} NULL 0 1 1 2 [{"a": "b"}, {"a": "b"}] {"k": {"a": "b"}} {"a": "b"} "{\"a\": \"b\"}" -NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL [null, null] {"k": null} NULL NULL -1 STRING NULL "abc" "abc" ["abc", 2] 2 "abc" 2 ["abc", "abc"] "$" 0 0 1 1 ["abc", "abc"] {"k": "abc"} abc "\"abc\"" +JSON_VALID(j) JSON_TYPE(j) JSON_KEYS(j) JSON_EXTRACT(j, '$') JSON_REMOVE(j, '$.a.b.c') JSON_ARRAY_APPEND(j, '$', 2) JSON_SET(j, '$[0]', 2) JSON_INSERT(j, '$[0]', 2) JSON_REPLACE(j, '$[0]', 2) JSON_MERGE(j, j) JSON_SEARCH(j, 'one', 'abc') JSON_CONTAINS(j, '[1]') JSON_CONTAINS_PATH(j, 'all', '$.a') JSON_LENGTH(j) JSON_DEPTH(j) JSON_ARRAY(j, j) JSON_OBJECT('k', j) JSON_UNQUOTE(CAST(j AS CHAR)) JSON_QUOTE(CAST(j AS CHAR)) JSON_PRETTY(j) +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL [null, null] {"k": null} NULL NULL NULL +1 ARRAY NULL [1] [1] [1, 2] [2] [1] [2] [1, 1] NULL 1 0 1 2 [[1], [1]] {"k": [1]} [1] "[1]" [ + 1 +] +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL [null, null] {"k": null} NULL NULL NULL +1 OBJECT ["a"] {"a": "b"} {"a": "b"} [{"a": "b"}, 2] 2 {"a": "b"} 2 {"a": ["b", "b"]} NULL 0 1 1 2 [{"a": "b"}, {"a": "b"}] {"k": {"a": "b"}} {"a": "b"} "{\"a\": \"b\"}" { + "a": "b" +} +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL [null, null] {"k": null} NULL NULL NULL +1 STRING NULL "abc" "abc" ["abc", 2] 2 "abc" 2 ["abc", "abc"] "$" 0 0 1 1 ["abc", "abc"] {"k": "abc"} abc "\"abc\"" "abc" ALTER TABLE T_WITH_NULLS MODIFY COLUMN j TEXT; SELECT JSON_VALID(j), @@ -6502,16 +6507,21 @@ JSON_DEPTH(j), JSON_ARRAY(j, j), JSON_OBJECT('k', j), JSON_UNQUOTE(CAST(j AS CHAR)), -JSON_QUOTE(CAST(j AS CHAR)) +JSON_QUOTE(CAST(j AS CHAR)), +JSON_PRETTY(j) FROM T_WITH_NULLS ORDER BY i; -JSON_VALID(j) JSON_TYPE(j) JSON_KEYS(j) JSON_EXTRACT(j, '$') JSON_REMOVE(j, '$.a.b.c') JSON_ARRAY_APPEND(j, '$', 2) JSON_SET(j, '$[0]', 2) JSON_INSERT(j, '$[0]', 2) JSON_REPLACE(j, '$[0]', 2) JSON_MERGE(j, j) JSON_SEARCH(j, 'one', 'abc') JSON_CONTAINS(j, '[1]') JSON_CONTAINS_PATH(j, 'all', '$.a') JSON_LENGTH(j) JSON_DEPTH(j) JSON_ARRAY(j, j) JSON_OBJECT('k', j) JSON_UNQUOTE(CAST(j AS CHAR)) JSON_QUOTE(CAST(j AS CHAR)) -NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL [null, null] {"k": null} NULL NULL -1 ARRAY NULL [1] [1] [1, 2] [2] [1] [2] [1, 1] NULL 1 0 1 2 ["[1]", "[1]"] {"k": "[1]"} [1] "[1]" -NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL [null, null] {"k": null} NULL NULL -1 OBJECT ["a"] {"a": "b"} {"a": "b"} [{"a": "b"}, 2] 2 {"a": "b"} 2 {"a": ["b", "b"]} NULL 0 1 1 2 ["{\"a\": \"b\"}", "{\"a\": \"b\"}"] {"k": "{\"a\": \"b\"}"} {"a": "b"} "{\"a\": \"b\"}" -NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL [null, null] {"k": null} NULL NULL -1 STRING NULL "abc" "abc" ["abc", 2] 2 "abc" 2 ["abc", "abc"] "$" 0 0 1 1 ["\"abc\"", "\"abc\""] {"k": "\"abc\""} abc "\"abc\"" +JSON_VALID(j) JSON_TYPE(j) JSON_KEYS(j) JSON_EXTRACT(j, '$') JSON_REMOVE(j, '$.a.b.c') JSON_ARRAY_APPEND(j, '$', 2) JSON_SET(j, '$[0]', 2) JSON_INSERT(j, '$[0]', 2) JSON_REPLACE(j, '$[0]', 2) JSON_MERGE(j, j) JSON_SEARCH(j, 'one', 'abc') JSON_CONTAINS(j, '[1]') JSON_CONTAINS_PATH(j, 'all', '$.a') JSON_LENGTH(j) JSON_DEPTH(j) JSON_ARRAY(j, j) JSON_OBJECT('k', j) JSON_UNQUOTE(CAST(j AS CHAR)) JSON_QUOTE(CAST(j AS CHAR)) JSON_PRETTY(j) +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL [null, null] {"k": null} NULL NULL NULL +1 ARRAY NULL [1] [1] [1, 2] [2] [1] [2] [1, 1] NULL 1 0 1 2 ["[1]", "[1]"] {"k": "[1]"} [1] "[1]" [ + 1 +] +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL [null, null] {"k": null} NULL NULL NULL +1 OBJECT ["a"] {"a": "b"} {"a": "b"} [{"a": "b"}, 2] 2 {"a": "b"} 2 {"a": ["b", "b"]} NULL 0 1 1 2 ["{\"a\": \"b\"}", "{\"a\": \"b\"}"] {"k": "{\"a\": \"b\"}"} {"a": "b"} "{\"a\": \"b\"}" { + "a": "b" +} +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL [null, null] {"k": null} NULL NULL NULL +1 STRING NULL "abc" "abc" ["abc", 2] 2 "abc" 2 ["abc", "abc"] "$" 0 0 1 1 ["\"abc\"", "\"abc\""] {"k": "\"abc\""} abc "\"abc\"" "abc" DROP TABLE T_WITH_NULLS; CREATE TABLE t_latin1(id INT PRIMARY KEY AUTO_INCREMENT, json_text VARCHAR(20), @@ -9488,3 +9498,171 @@ j {"a": "b"} {"a": "b"} DROP TABLE t; +# +# WL#9191: JSON_PRETTY function +# +CREATE TABLE t(id INT PRIMARY KEY AUTO_INCREMENT, +uc VARCHAR(128) CHARACTER SET utf8mb4, +lc VARCHAR(128) CHARACTER SET latin1, +j JSON); +INSERT INTO t(uc) VALUES +(NULL), +('{}'), +('[]'), +('[1,2,3]'), +('{"a":1,"b":2}'), +('{"a":[1,{}],"b":[]}'), +('{"a":{"b":{"c":{"d":{"e":{"f":null}}}}}}'), +('true'), +('false'), +('null'), +('1'), +('1.1'), +('"hello"'), +(JSON_ARRAY('abc +def', '"abc"')); +UPDATE t SET lc = uc, j = uc; +SELECT JSON_PRETTY(uc) AS c1 FROM t ORDER BY id; +c1 +NULL +{} +[] +[ + 1, + 2, + 3 +] +{ + "a": 1, + "b": 2 +} +{ + "a": [ + 1, + {} + ], + "b": [] +} +{ + "a": { + "b": { + "c": { + "d": { + "e": { + "f": null + } + } + } + } + } +} +true +false +null +1 +1.1 +"hello" +[ + "abc\ndef", + "\"abc\"" +] +SELECT JSON_PRETTY(lc) AS c1 FROM t ORDER BY id; +c1 +NULL +{} +[] +[ + 1, + 2, + 3 +] +{ + "a": 1, + "b": 2 +} +{ + "a": [ + 1, + {} + ], + "b": [] +} +{ + "a": { + "b": { + "c": { + "d": { + "e": { + "f": null + } + } + } + } + } +} +true +false +null +1 +1.1 +"hello" +[ + "abc\ndef", + "\"abc\"" +] +SELECT JSON_PRETTY(j) AS c1 FROM t ORDER BY id; +c1 +NULL +{} +[] +[ + 1, + 2, + 3 +] +{ + "a": 1, + "b": 2 +} +{ + "a": [ + 1, + {} + ], + "b": [] +} +{ + "a": { + "b": { + "c": { + "d": { + "e": { + "f": null + } + } + } + } + } +} +true +false +null +1 +1.1 +"hello" +[ + "abc\ndef", + "\"abc\"" +] +SELECT DISTINCT CHARSET(JSON_PRETTY(uc)) AS c1, +CHARSET(JSON_PRETTY(lc)) AS c2, +CHARSET(JSON_PRETTY(j)) AS c3 FROM t; +c1 c2 c3 +utf8mb4 utf8mb4 utf8mb4 +DROP TABLE t; +SELECT JSON_PRETTY('this is not JSON') AS j; +ERROR 22032: Invalid JSON text in argument 1 to function json_pretty: "Invalid value." at position 1. +SELECT JSON_PRETTY(); +ERROR 42000: Incorrect parameter count in the call to native function 'JSON_PRETTY' +SELECT JSON_PRETTY('{}', 2); +ERROR 42000: Incorrect parameter count in the call to native function 'JSON_PRETTY' diff --git a/mysql-test/suite/json/r/json_functions_ndb.result b/mysql-test/suite/json/r/json_functions_ndb.result index 9c580899085c..e888d13b11b1 100644 --- a/mysql-test/suite/json/r/json_functions_ndb.result +++ b/mysql-test/suite/json/r/json_functions_ndb.result @@ -6548,16 +6548,21 @@ JSON_DEPTH(j), JSON_ARRAY(j, j), JSON_OBJECT('k', j), JSON_UNQUOTE(CAST(j AS CHAR)), -JSON_QUOTE(CAST(j AS CHAR)) +JSON_QUOTE(CAST(j AS CHAR)), +JSON_PRETTY(j) FROM T_WITH_NULLS ORDER BY i; -JSON_VALID(j) JSON_TYPE(j) JSON_KEYS(j) JSON_EXTRACT(j, '$') JSON_REMOVE(j, '$.a.b.c') JSON_ARRAY_APPEND(j, '$', 2) JSON_SET(j, '$[0]', 2) JSON_INSERT(j, '$[0]', 2) JSON_REPLACE(j, '$[0]', 2) JSON_MERGE(j, j) JSON_SEARCH(j, 'one', 'abc') JSON_CONTAINS(j, '[1]') JSON_CONTAINS_PATH(j, 'all', '$.a') JSON_LENGTH(j) JSON_DEPTH(j) JSON_ARRAY(j, j) JSON_OBJECT('k', j) JSON_UNQUOTE(CAST(j AS CHAR)) JSON_QUOTE(CAST(j AS CHAR)) -NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL [null, null] {"k": null} NULL NULL -1 ARRAY NULL [1] [1] [1, 2] [2] [1] [2] [1, 1] NULL 1 0 1 2 [[1], [1]] {"k": [1]} [1] "[1]" -NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL [null, null] {"k": null} NULL NULL -1 OBJECT ["a"] {"a": "b"} {"a": "b"} [{"a": "b"}, 2] 2 {"a": "b"} 2 {"a": ["b", "b"]} NULL 0 1 1 2 [{"a": "b"}, {"a": "b"}] {"k": {"a": "b"}} {"a": "b"} "{\"a\": \"b\"}" -NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL [null, null] {"k": null} NULL NULL -1 STRING NULL "abc" "abc" ["abc", 2] 2 "abc" 2 ["abc", "abc"] "$" 0 0 1 1 ["abc", "abc"] {"k": "abc"} abc "\"abc\"" +JSON_VALID(j) JSON_TYPE(j) JSON_KEYS(j) JSON_EXTRACT(j, '$') JSON_REMOVE(j, '$.a.b.c') JSON_ARRAY_APPEND(j, '$', 2) JSON_SET(j, '$[0]', 2) JSON_INSERT(j, '$[0]', 2) JSON_REPLACE(j, '$[0]', 2) JSON_MERGE(j, j) JSON_SEARCH(j, 'one', 'abc') JSON_CONTAINS(j, '[1]') JSON_CONTAINS_PATH(j, 'all', '$.a') JSON_LENGTH(j) JSON_DEPTH(j) JSON_ARRAY(j, j) JSON_OBJECT('k', j) JSON_UNQUOTE(CAST(j AS CHAR)) JSON_QUOTE(CAST(j AS CHAR)) JSON_PRETTY(j) +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL [null, null] {"k": null} NULL NULL NULL +1 ARRAY NULL [1] [1] [1, 2] [2] [1] [2] [1, 1] NULL 1 0 1 2 [[1], [1]] {"k": [1]} [1] "[1]" [ + 1 +] +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL [null, null] {"k": null} NULL NULL NULL +1 OBJECT ["a"] {"a": "b"} {"a": "b"} [{"a": "b"}, 2] 2 {"a": "b"} 2 {"a": ["b", "b"]} NULL 0 1 1 2 [{"a": "b"}, {"a": "b"}] {"k": {"a": "b"}} {"a": "b"} "{\"a\": \"b\"}" { + "a": "b" +} +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL [null, null] {"k": null} NULL NULL NULL +1 STRING NULL "abc" "abc" ["abc", 2] 2 "abc" 2 ["abc", "abc"] "$" 0 0 1 1 ["abc", "abc"] {"k": "abc"} abc "\"abc\"" "abc" ALTER TABLE T_WITH_NULLS MODIFY COLUMN j TEXT; Warnings: Warning 1478 Table storage engine 'ndbcluster' does not support the create option 'Binlog of table with BLOB attribute and no PK' @@ -6580,16 +6585,21 @@ JSON_DEPTH(j), JSON_ARRAY(j, j), JSON_OBJECT('k', j), JSON_UNQUOTE(CAST(j AS CHAR)), -JSON_QUOTE(CAST(j AS CHAR)) +JSON_QUOTE(CAST(j AS CHAR)), +JSON_PRETTY(j) FROM T_WITH_NULLS ORDER BY i; -JSON_VALID(j) JSON_TYPE(j) JSON_KEYS(j) JSON_EXTRACT(j, '$') JSON_REMOVE(j, '$.a.b.c') JSON_ARRAY_APPEND(j, '$', 2) JSON_SET(j, '$[0]', 2) JSON_INSERT(j, '$[0]', 2) JSON_REPLACE(j, '$[0]', 2) JSON_MERGE(j, j) JSON_SEARCH(j, 'one', 'abc') JSON_CONTAINS(j, '[1]') JSON_CONTAINS_PATH(j, 'all', '$.a') JSON_LENGTH(j) JSON_DEPTH(j) JSON_ARRAY(j, j) JSON_OBJECT('k', j) JSON_UNQUOTE(CAST(j AS CHAR)) JSON_QUOTE(CAST(j AS CHAR)) -NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL [null, null] {"k": null} NULL NULL -1 ARRAY NULL [1] [1] [1, 2] [2] [1] [2] [1, 1] NULL 1 0 1 2 ["[1]", "[1]"] {"k": "[1]"} [1] "[1]" -NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL [null, null] {"k": null} NULL NULL -1 OBJECT ["a"] {"a": "b"} {"a": "b"} [{"a": "b"}, 2] 2 {"a": "b"} 2 {"a": ["b", "b"]} NULL 0 1 1 2 ["{\"a\": \"b\"}", "{\"a\": \"b\"}"] {"k": "{\"a\": \"b\"}"} {"a": "b"} "{\"a\": \"b\"}" -NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL [null, null] {"k": null} NULL NULL -1 STRING NULL "abc" "abc" ["abc", 2] 2 "abc" 2 ["abc", "abc"] "$" 0 0 1 1 ["\"abc\"", "\"abc\""] {"k": "\"abc\""} abc "\"abc\"" +JSON_VALID(j) JSON_TYPE(j) JSON_KEYS(j) JSON_EXTRACT(j, '$') JSON_REMOVE(j, '$.a.b.c') JSON_ARRAY_APPEND(j, '$', 2) JSON_SET(j, '$[0]', 2) JSON_INSERT(j, '$[0]', 2) JSON_REPLACE(j, '$[0]', 2) JSON_MERGE(j, j) JSON_SEARCH(j, 'one', 'abc') JSON_CONTAINS(j, '[1]') JSON_CONTAINS_PATH(j, 'all', '$.a') JSON_LENGTH(j) JSON_DEPTH(j) JSON_ARRAY(j, j) JSON_OBJECT('k', j) JSON_UNQUOTE(CAST(j AS CHAR)) JSON_QUOTE(CAST(j AS CHAR)) JSON_PRETTY(j) +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL [null, null] {"k": null} NULL NULL NULL +1 ARRAY NULL [1] [1] [1, 2] [2] [1] [2] [1, 1] NULL 1 0 1 2 ["[1]", "[1]"] {"k": "[1]"} [1] "[1]" [ + 1 +] +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL [null, null] {"k": null} NULL NULL NULL +1 OBJECT ["a"] {"a": "b"} {"a": "b"} [{"a": "b"}, 2] 2 {"a": "b"} 2 {"a": ["b", "b"]} NULL 0 1 1 2 ["{\"a\": \"b\"}", "{\"a\": \"b\"}"] {"k": "{\"a\": \"b\"}"} {"a": "b"} "{\"a\": \"b\"}" { + "a": "b" +} +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL [null, null] {"k": null} NULL NULL NULL +1 STRING NULL "abc" "abc" ["abc", 2] 2 "abc" 2 ["abc", "abc"] "$" 0 0 1 1 ["\"abc\"", "\"abc\""] {"k": "\"abc\""} abc "\"abc\"" "abc" DROP TABLE T_WITH_NULLS; CREATE TABLE t_latin1(id INT PRIMARY KEY AUTO_INCREMENT, json_text VARCHAR(20), @@ -9651,3 +9661,171 @@ j {"a": "b"} {"a": "b"} DROP TABLE t; +# +# WL#9191: JSON_PRETTY function +# +CREATE TABLE t(id INT PRIMARY KEY AUTO_INCREMENT, +uc VARCHAR(128) CHARACTER SET utf8mb4, +lc VARCHAR(128) CHARACTER SET latin1, +j JSON); +INSERT INTO t(uc) VALUES +(NULL), +('{}'), +('[]'), +('[1,2,3]'), +('{"a":1,"b":2}'), +('{"a":[1,{}],"b":[]}'), +('{"a":{"b":{"c":{"d":{"e":{"f":null}}}}}}'), +('true'), +('false'), +('null'), +('1'), +('1.1'), +('"hello"'), +(JSON_ARRAY('abc +def', '"abc"')); +UPDATE t SET lc = uc, j = uc; +SELECT JSON_PRETTY(uc) AS c1 FROM t ORDER BY id; +c1 +NULL +{} +[] +[ + 1, + 2, + 3 +] +{ + "a": 1, + "b": 2 +} +{ + "a": [ + 1, + {} + ], + "b": [] +} +{ + "a": { + "b": { + "c": { + "d": { + "e": { + "f": null + } + } + } + } + } +} +true +false +null +1 +1.1 +"hello" +[ + "abc\ndef", + "\"abc\"" +] +SELECT JSON_PRETTY(lc) AS c1 FROM t ORDER BY id; +c1 +NULL +{} +[] +[ + 1, + 2, + 3 +] +{ + "a": 1, + "b": 2 +} +{ + "a": [ + 1, + {} + ], + "b": [] +} +{ + "a": { + "b": { + "c": { + "d": { + "e": { + "f": null + } + } + } + } + } +} +true +false +null +1 +1.1 +"hello" +[ + "abc\ndef", + "\"abc\"" +] +SELECT JSON_PRETTY(j) AS c1 FROM t ORDER BY id; +c1 +NULL +{} +[] +[ + 1, + 2, + 3 +] +{ + "a": 1, + "b": 2 +} +{ + "a": [ + 1, + {} + ], + "b": [] +} +{ + "a": { + "b": { + "c": { + "d": { + "e": { + "f": null + } + } + } + } + } +} +true +false +null +1 +1.1 +"hello" +[ + "abc\ndef", + "\"abc\"" +] +SELECT DISTINCT CHARSET(JSON_PRETTY(uc)) AS c1, +CHARSET(JSON_PRETTY(lc)) AS c2, +CHARSET(JSON_PRETTY(j)) AS c3 FROM t; +c1 c2 c3 +utf8mb4 utf8mb4 utf8mb4 +DROP TABLE t; +SELECT JSON_PRETTY('this is not JSON') AS j; +ERROR 22032: Invalid JSON text in argument 1 to function json_pretty: "Invalid value." at position 1. +SELECT JSON_PRETTY(); +ERROR 42000: Incorrect parameter count in the call to native function 'JSON_PRETTY' +SELECT JSON_PRETTY('{}', 2); +ERROR 42000: Incorrect parameter count in the call to native function 'JSON_PRETTY' diff --git a/mysql-test/suite/rpl/r/rpl_json.result b/mysql-test/suite/rpl/r/rpl_json.result index 114cb8c2deb3..292026673b85 100644 --- a/mysql-test/suite/rpl/r/rpl_json.result +++ b/mysql-test/suite/rpl/r/rpl_json.result @@ -1222,4 +1222,418 @@ Warning 1235 This version of MySQL doesn't yet support 'sorting of non-scalar JS DROP TABLE data_table; DROP TABLE json_data; include/sync_slave_sql_with_master.inc +# +# WL#9191: ADD JSON_PRETTY FUNCTION +# +[Connection Master] +# Create tables of various data types +CREATE TABLE data (pkey INT PRIMARY KEY AUTO_INCREMENT, +txt TEXT, vcol VARCHAR(20), num INT, +gcol INT AS (num * 2) VIRTUAL, +gcol2 JSON AS (JSON_PRETTY(JSON_OBJECT(num,gcol)))); +CREATE TABLE json_data(pk INT PRIMARY KEY AUTO_INCREMENT, jcol TEXT, jgcol TEXT AS (JSON_PRETTY(jcol))); +# Insert values into the tables using the pretty function +INSERT INTO data (txt, vcol, num) VALUES ('abc', 'namotgr', 150), +('fwjh4', 'ucierov', 142), +('8942rhkjh', 'roiu3r', 913), +('imfmf', 'r3jr2', 15), +('32rj2jr', 'r2ihrhr', 32); +INSERT INTO json_data(jcol) SELECT JSON_PRETTY(JSON_OBJECTAGG(pkey, gcol)) FROM data; +INSERT INTO json_data(jcol) SELECT JSON_PRETTY(JSON_ARRAYAGG(txt)) FROM data; +INSERT INTO json_data(jcol) SELECT JSON_PRETTY(JSON_PRETTY(gcol2)) FROM data; +INSERT INTO json_data(jcol) SELECT JSON_PRETTY(JSON_OBJECT(num , vcol)) FROM data; +INSERT INTO json_data(jcol) SELECT JSON_PRETTY(JSON_OBJECTAGG(pkey , txt)) FROM data; +INSERT INTO json_data(jcol) SELECT JSON_PRETTY(JSON_ARRAY(gcol)) FROM data; +include/sync_slave_sql_with_master.inc +[Connection Slave] +# Check whether tables were created on the slave +SELECT * FROM json_data; +pk jcol jgcol +1 { + "1": 300, + "2": 284, + "3": 1826, + "4": 30, + "5": 64 +} { + "1": 300, + "2": 284, + "3": 1826, + "4": 30, + "5": 64 +} +2 [ + "abc", + "fwjh4", + "8942rhkjh", + "imfmf", + "32rj2jr" +] [ + "abc", + "fwjh4", + "8942rhkjh", + "imfmf", + "32rj2jr" +] +3 { + "150": 300 +} { + "150": 300 +} +4 { + "142": 284 +} { + "142": 284 +} +5 { + "913": 1826 +} { + "913": 1826 +} +6 { + "15": 30 +} { + "15": 30 +} +7 { + "32": 64 +} { + "32": 64 +} +10 { + "150": "namotgr" +} { + "150": "namotgr" +} +11 { + "142": "ucierov" +} { + "142": "ucierov" +} +12 { + "913": "roiu3r" +} { + "913": "roiu3r" +} +13 { + "15": "r3jr2" +} { + "15": "r3jr2" +} +14 { + "32": "r2ihrhr" +} { + "32": "r2ihrhr" +} +17 { + "1": "abc", + "2": "fwjh4", + "3": "8942rhkjh", + "4": "imfmf", + "5": "32rj2jr" +} { + "1": "abc", + "2": "fwjh4", + "3": "8942rhkjh", + "4": "imfmf", + "5": "32rj2jr" +} +18 [ + 300 +] [ + 300 +] +19 [ + 284 +] [ + 284 +] +20 [ + 1826 +] [ + 1826 +] +21 [ + 30 +] [ + 30 +] +22 [ + 64 +] [ + 64 +] +SELECT gcol2 FROM data; +gcol2 +{"150": 300} +{"142": 284} +{"913": 1826} +{"15": 30} +{"32": 64} +include/diff_tables.inc [master:json_data, slave:json_data] +include/diff_tables.inc [master:data, slave:data] +Warnings: +Warning 1235 This version of MySQL doesn't yet support 'sorting of non-scalar JSON values' +Warnings: +Warning 1235 This version of MySQL doesn't yet support 'sorting of non-scalar JSON values' +[Connection Master] +# Update values in the table +UPDATE json_data SET jcol= (SELECT JSON_PRETTY(JSON_ARRAYAGG(gcol2)) FROM data) WHERE pk= 2; +UPDATE json_data SET jcol= (SELECT JSON_PRETTY(JSON_OBJECTAGG(pk,gcol)) FROM data) WHERE pk = 1; +include/sync_slave_sql_with_master.inc +[Connection Slave] +SELECT * FROM json_data; +pk jcol jgcol +1 { + "1": 300 +} { + "1": 300 +} +2 [ + { + "150": 300 + }, + { + "142": 284 + }, + { + "913": 1826 + }, + { + "15": 30 + }, + { + "32": 64 + } +] [ + { + "150": 300 + }, + { + "142": 284 + }, + { + "913": 1826 + }, + { + "15": 30 + }, + { + "32": 64 + } +] +3 { + "150": 300 +} { + "150": 300 +} +4 { + "142": 284 +} { + "142": 284 +} +5 { + "913": 1826 +} { + "913": 1826 +} +6 { + "15": 30 +} { + "15": 30 +} +7 { + "32": 64 +} { + "32": 64 +} +10 { + "150": "namotgr" +} { + "150": "namotgr" +} +11 { + "142": "ucierov" +} { + "142": "ucierov" +} +12 { + "913": "roiu3r" +} { + "913": "roiu3r" +} +13 { + "15": "r3jr2" +} { + "15": "r3jr2" +} +14 { + "32": "r2ihrhr" +} { + "32": "r2ihrhr" +} +17 { + "1": "abc", + "2": "fwjh4", + "3": "8942rhkjh", + "4": "imfmf", + "5": "32rj2jr" +} { + "1": "abc", + "2": "fwjh4", + "3": "8942rhkjh", + "4": "imfmf", + "5": "32rj2jr" +} +18 [ + 300 +] [ + 300 +] +19 [ + 284 +] [ + 284 +] +20 [ + 1826 +] [ + 1826 +] +21 [ + 30 +] [ + 30 +] +22 [ + 64 +] [ + 64 +] +include/diff_tables.inc [master:json_data, slave:json_data] +[Connection Master] +# Delete values from the table +DELETE FROM json_data WHERE JSON_PRETTY(jgcol) = (SELECT JSON_PRETTY(JSON_OBJECTAGG(pkey,txt)) FROM data); +include/sync_slave_sql_with_master.inc +[Connection Slave] +SELECT * FROM json_data; +pk jcol jgcol +1 { + "1": 300 +} { + "1": 300 +} +2 [ + { + "150": 300 + }, + { + "142": 284 + }, + { + "913": 1826 + }, + { + "15": 30 + }, + { + "32": 64 + } +] [ + { + "150": 300 + }, + { + "142": 284 + }, + { + "913": 1826 + }, + { + "15": 30 + }, + { + "32": 64 + } +] +3 { + "150": 300 +} { + "150": 300 +} +4 { + "142": 284 +} { + "142": 284 +} +5 { + "913": 1826 +} { + "913": 1826 +} +6 { + "15": 30 +} { + "15": 30 +} +7 { + "32": 64 +} { + "32": 64 +} +10 { + "150": "namotgr" +} { + "150": "namotgr" +} +11 { + "142": "ucierov" +} { + "142": "ucierov" +} +12 { + "913": "roiu3r" +} { + "913": "roiu3r" +} +13 { + "15": "r3jr2" +} { + "15": "r3jr2" +} +14 { + "32": "r2ihrhr" +} { + "32": "r2ihrhr" +} +18 [ + 300 +] [ + 300 +] +19 [ + 284 +] [ + 284 +] +20 [ + 1826 +] [ + 1826 +] +21 [ + 30 +] [ + 30 +] +22 [ + 64 +] [ + 64 +] +include/diff_tables.inc [master:json_data, slave:json_data] +[Connection Master] +DROP TABLE data; +DROP TABLE json_data; +include/sync_slave_sql_with_master.inc include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_json.test b/mysql-test/suite/rpl/t/rpl_json.test index b209b3799945..dbb32d13b1ff 100644 --- a/mysql-test/suite/rpl/t/rpl_json.test +++ b/mysql-test/suite/rpl/t/rpl_json.test @@ -307,6 +307,94 @@ SELECT * FROM json_data; DROP TABLE data_table; DROP TABLE json_data; +--source include/sync_slave_sql_with_master.inc + +--echo # +--echo # WL#9191: ADD JSON_PRETTY FUNCTION +--echo # + +--echo [Connection Master] +--connection master + +--echo # Create tables of various data types +CREATE TABLE data (pkey INT PRIMARY KEY AUTO_INCREMENT, + txt TEXT, vcol VARCHAR(20), num INT, + gcol INT AS (num * 2) VIRTUAL, + gcol2 JSON AS (JSON_PRETTY(JSON_OBJECT(num,gcol)))); + +CREATE TABLE json_data(pk INT PRIMARY KEY AUTO_INCREMENT, jcol TEXT, jgcol TEXT AS (JSON_PRETTY(jcol))); + +--echo # Insert values into the tables using the pretty function +INSERT INTO data (txt, vcol, num) VALUES ('abc', 'namotgr', 150), + ('fwjh4', 'ucierov', 142), + ('8942rhkjh', 'roiu3r', 913), + ('imfmf', 'r3jr2', 15), + ('32rj2jr', 'r2ihrhr', 32); + +--disable_warnings +INSERT INTO json_data(jcol) SELECT JSON_PRETTY(JSON_OBJECTAGG(pkey, gcol)) FROM data; +INSERT INTO json_data(jcol) SELECT JSON_PRETTY(JSON_ARRAYAGG(txt)) FROM data; +INSERT INTO json_data(jcol) SELECT JSON_PRETTY(JSON_PRETTY(gcol2)) FROM data; +INSERT INTO json_data(jcol) SELECT JSON_PRETTY(JSON_OBJECT(num , vcol)) FROM data; +INSERT INTO json_data(jcol) SELECT JSON_PRETTY(JSON_OBJECTAGG(pkey , txt)) FROM data; +INSERT INTO json_data(jcol) SELECT JSON_PRETTY(JSON_ARRAY(gcol)) FROM data; +--enable_warnings + + +--source include/sync_slave_sql_with_master.inc +--echo [Connection Slave] + +--echo # Check whether tables were created on the slave +SELECT * FROM json_data; +SELECT gcol2 FROM data; + +--let $diff_tables = master:json_data, slave:json_data +--source include/diff_tables.inc + +--let $diff_tables = master:data, slave:data +--source include/diff_tables.inc + +--echo [Connection Master] +--connection master + +--echo # Update values in the table +--disable_warnings +UPDATE json_data SET jcol= (SELECT JSON_PRETTY(JSON_ARRAYAGG(gcol2)) FROM data) WHERE pk= 2; +UPDATE json_data SET jcol= (SELECT JSON_PRETTY(JSON_OBJECTAGG(pk,gcol)) FROM data) WHERE pk = 1; +--enable_warnings + +--source include/sync_slave_sql_with_master.inc +--echo [Connection Slave] + +SELECT * FROM json_data; + +--let $diff_tables = master:json_data, slave:json_data +--source include/diff_tables.inc + +--echo [Connection Master] +--connection master + + +--echo # Delete values from the table +--disable_warnings +DELETE FROM json_data WHERE JSON_PRETTY(jgcol) = (SELECT JSON_PRETTY(JSON_OBJECTAGG(pkey,txt)) FROM data); +--enable_warnings + +--source include/sync_slave_sql_with_master.inc +--echo [Connection Slave] + +SELECT * FROM json_data; + +--let $diff_tables = master:json_data, slave:json_data +--source include/diff_tables.inc + +--echo [Connection Master] +--connection master + +DROP TABLE data; +DROP TABLE json_data; + --source include/sync_slave_sql_with_master.inc --source include/rpl_end.inc + # End: diff --git a/sql-common/sql_string.cc b/sql-common/sql_string.cc index cc55fdae5104..46f5b2f9b7fc 100644 --- a/sql-common/sql_string.cc +++ b/sql-common/sql_string.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -575,7 +575,7 @@ bool String::append_ulonglong(ulonglong val) */ bool String::append_longlong(longlong val) { - if (mem_realloc(m_length + MAX_BIGINT_WIDTH + 2)) + if (mem_realloc_exp(m_length + MAX_BIGINT_WIDTH + 2)) return true; /* purecov: inspected */ char *end= longlong10_to_str(val, m_ptr + m_length, -10); m_length= end - m_ptr; diff --git a/sql/item_create.cc b/sql/item_create.cc index 653715f590d3..be344d46a822 100644 --- a/sql/item_create.cc +++ b/sql/item_create.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -2483,6 +2483,17 @@ class Create_func_json_depth : public Create_native_func virtual ~Create_func_json_depth() {} }; +class Create_func_json_pretty : public Create_func_arg1 +{ +public: + static Create_func_json_pretty s_singleton; + virtual Item *create(THD *thd, Item *arg1) + { + return new (thd->mem_root) Item_func_json_pretty(POS(), arg1); + } +}; +Create_func_json_pretty Create_func_json_pretty::s_singleton; + class Create_func_json_type : public Create_func_arg1 { public: @@ -7526,6 +7537,7 @@ static Native_func_registry func_array[] = { { C_STRING_WITH_LEN("JSON_CONTAINS_PATH") }, BUILDER(Create_func_json_contains_path)}, { { C_STRING_WITH_LEN("JSON_LENGTH") }, BUILDER(Create_func_json_length)}, { { C_STRING_WITH_LEN("JSON_DEPTH") }, BUILDER(Create_func_json_depth)}, + { { C_STRING_WITH_LEN("JSON_PRETTY") }, BUILDER(Create_func_json_pretty)}, { { C_STRING_WITH_LEN("JSON_TYPE") }, BUILDER(Create_func_json_type)}, { { C_STRING_WITH_LEN("JSON_KEYS") }, BUILDER(Create_func_json_keys)}, { { C_STRING_WITH_LEN("JSON_EXTRACT") }, BUILDER(Create_func_json_extract)}, diff --git a/sql/item_json_func.cc b/sql/item_json_func.cc index 380566adcbc5..b91dd5d627d3 100644 --- a/sql/item_json_func.cc +++ b/sql/item_json_func.cc @@ -3542,3 +3542,32 @@ Json_scalar *get_json_scalar_from_holder(Json_scalar_holder *holder) { return boost::polymorphic_get(&holder->m_val); } + + +String *Item_func_json_pretty::val_str(String *str) +{ + DBUG_ASSERT(fixed); + try + { + Json_wrapper wr; + if (get_json_wrapper(args, 0, str, func_name(), &wr)) + return error_str(); + + null_value= args[0]->null_value; + if (null_value) + return NULL; + + str->length(0); + if (wr.to_pretty_string(str, func_name())) + return error_str(); /* purecov: inspected */ + + return str; + } + /* purecov: begin inspected */ + catch (...) + { + handle_std_exception(func_name()); + return error_str(); + } + /* purecov: end */ +} diff --git a/sql/item_json_func.h b/sql/item_json_func.h index 0de76ff6f645..fd0a383b3c6b 100644 --- a/sql/item_json_func.h +++ b/sql/item_json_func.h @@ -800,6 +800,25 @@ class Item_func_json_unquote :public Item_str_func String *val_str(String *str); }; +/** + Represents the JSON_PRETTY function. +*/ +class Item_func_json_pretty :public Item_str_func +{ +public: + Item_func_json_pretty(const POS &pos, Item *a) : Item_str_func(pos, a) + {} + + const char *func_name() const { return "json_pretty"; } + + void fix_length_and_dec() + { + fix_length_and_charset(MAX_BLOB_WIDTH, &my_charset_utf8mb4_bin); + } + + String *val_str(String *str); +}; + /** Turn a GEOMETRY value into a JSON value per the GeoJSON specification revison 1.0. This method is implemented in item_geofunc.cc. diff --git a/sql/json_dom.cc b/sql/json_dom.cc index 29507891a09c..15b2b7085394 100644 --- a/sql/json_dom.cc +++ b/sql/json_dom.cc @@ -1485,21 +1485,6 @@ void Json_array::clear() } -/** - Reserve space in a buffer. In order to avoid frequent reallocations, - allocate a new buffer at least as twice as large as the current - buffer if there is not enough space. - - @param[in, out] buffer the buffer in which to reserve space - @param[in] needed the number of bytes to reserve - @return false if successful, true if memory could not be allocated -*/ -static bool reserve(String *buffer, size_t needed) -{ - return buffer->reserve(needed, buffer->alloced_length()); -} - - /** Perform quoting on a JSON string to make an external representation of it. it wraps double quotes (text quotes) around the string (cptr) @@ -1534,7 +1519,7 @@ static bool reserve(String *buffer, size_t needed) */ bool double_quote(const char *cptr, size_t length, String *buf) { - if (reserve(buf, 2 + length) || buf->append('"')) + if (buf->append('"')) return true; /* purecov: inspected */ for (size_t i= 0; i < length; i++) @@ -1567,7 +1552,7 @@ bool double_quote(const char *cptr, size_t length, String *buf) if (done) { - if (reserve(buf, 2) || buf->append(esc[0]) || buf->append(esc[1])) + if (buf->append(esc[0]) || buf->append(esc[1])) return true; /* purecov: inspected */ } else if (((cptr[i] & ~0x7f) == 0) && // bit 8 not set @@ -1577,17 +1562,17 @@ bool double_quote(const char *cptr, size_t length, String *buf) Unprintable control character, use hex a hexadecimal number. The meaning of such a number determined by ISO/IEC 10646. */ - if (reserve(buf, 5) || buf->append("\\u00") || + if (buf->append("\\u00") || buf->append(_dig_vec_lower[(cptr[i] & 0xf0) >> 4]) || buf->append(_dig_vec_lower[(cptr[i] & 0x0f)])) return true; /* purecov: inspected */ } - else if (reserve(buf, 1) || buf->append(cptr[i])) + else if (buf->append(cptr[i])) { return true; /* purecov: inspected */ } } - return reserve(buf, 1) || buf->append('"'); + return buf->append('"'); } @@ -1927,7 +1912,24 @@ static int print_string(String *buffer, bool json_quoted, { return json_quoted ? double_quote(data, length, buffer) : - (reserve(buffer, length) || buffer->append(data, length)); + buffer->append(data, length); +} + + +/** + Helper function for wrapper_to_string() which adds a newline and indentation + up to the specified level. + + @param[in,out] buffer the buffer to write to + @param[in] level how many nesting levels to add indentation for + @retval false on success + @retval true on error +*/ +static bool newline_and_indent(String *buffer, size_t level) +{ + // Append newline and two spaces per indentation level. + return buffer->append('\n') || + buffer->fill(buffer->length() + level * 2, ' '); } @@ -1937,10 +1939,20 @@ static int print_string(String *buffer, bool json_quoted, recursively. The depth parameter keeps track of the current nesting level. When it reaches JSON_DOCUMENT_MAX_DEPTH, it gives up in order to avoid running out of stack space. + + @param[in] wr the value to convert to a string + @param[in,out] buffer the buffer to write to + @param[in] json_quoted quote strings if true + @param[in] pretty add newlines and indentation if true + @param[in] func_name the name of the calling function + @param[in] depth the nesting level of @a wr + + @retval false on success + @retval true on error */ static bool wrapper_to_string(const Json_wrapper &wr, String *buffer, - bool json_quoted, const char *func_name, - size_t depth) + bool json_quoted, bool pretty, + const char *func_name, size_t depth) { if (check_json_depth(++depth)) return true; @@ -1953,7 +1965,7 @@ static bool wrapper_to_string(const Json_wrapper &wr, String *buffer, case Json_dom::J_TIMESTAMP: { // Make sure the buffer has space for the datetime and the quotes. - if (reserve(buffer, MAX_DATE_STRING_REP_LENGTH + 2)) + if (buffer->reserve(MAX_DATE_STRING_REP_LENGTH + 2)) return true; /* purecov: inspected */ MYSQL_TIME t; wr.get_datetime(&t); @@ -1968,39 +1980,38 @@ static bool wrapper_to_string(const Json_wrapper &wr, String *buffer, } case Json_dom::J_ARRAY: { - /* - Reserve some space up front. We know we need at least 3 bytes - per array element (at least one byte for the element, one byte - for the comma, and one byte for the space). - */ - size_t array_len= wr.length(); - if (reserve(buffer, 3 * array_len) || buffer->append('[')) + if (buffer->append('[')) return true; /* purecov: inspected */ + size_t array_len= wr.length(); for (uint32 i= 0; i < array_len; ++i) { - if (i > 0 && (reserve(buffer, 2) || buffer->append(", "))) + if (i > 0 && buffer->append(pretty ? "," : ", ")) + return true; /* purecov: inspected */ + + if (pretty && newline_and_indent(buffer, depth)) return true; /* purecov: inspected */ - if (wrapper_to_string(wr[i], buffer, true, func_name, depth)) + if (wrapper_to_string(wr[i], buffer, true, pretty, func_name, depth)) return true; /* purecov: inspected */ } - if (reserve(buffer, 1) || buffer->append(']')) + + if (pretty && array_len > 0 && newline_and_indent(buffer, depth - 1)) + return true; /* purecov: inspected */ + + if (buffer->append(']')) return true; /* purecov: inspected */ + break; } case Json_dom::J_BOOLEAN: - { - const char *str= wr.get_boolean() ? "true" : "false"; - size_t str_len= std::strlen(str); - if (reserve(buffer, str_len) || buffer->append(str, str_len)) - return true; /* purecov: inspected */ - break; - } + if (buffer->append(wr.get_boolean() ? "true" : "false")) + return true; /* purecov: inspected */ + break; case Json_dom::J_DECIMAL: { int length= DECIMAL_MAX_STR_LENGTH + 1; - if (reserve(buffer, length)) + if (buffer->reserve(length)) return true; /* purecov: inspected */ char *ptr= const_cast(buffer->ptr()) + buffer->length(); my_decimal m; @@ -2012,7 +2023,7 @@ static bool wrapper_to_string(const Json_wrapper &wr, String *buffer, } case Json_dom::J_DOUBLE: { - if (reserve(buffer, MY_GCVT_MAX_FIELD_WIDTH + 1)) + if (buffer->reserve(MY_GCVT_MAX_FIELD_WIDTH + 1)) return true; /* purecov: inspected */ double d= wr.get_double(); size_t len= my_gcvt(d, MY_GCVT_ARG_DOUBLE, MY_GCVT_MAX_FIELD_WIDTH, @@ -2023,48 +2034,47 @@ static bool wrapper_to_string(const Json_wrapper &wr, String *buffer, } case Json_dom::J_INT: { - if (reserve(buffer, MAX_BIGINT_WIDTH + 1) || - buffer->append_longlong(wr.get_int())) + if (buffer->append_longlong(wr.get_int())) return true; /* purecov: inspected */ break; } case Json_dom::J_NULL: - if (reserve(buffer, 4) || buffer->append("null")) + if (buffer->append("null")) return true; /* purecov: inspected */ break; case Json_dom::J_OBJECT: { - /* - Reserve some space up front to reduce the number of - reallocations needed. We know we need at least seven bytes per - member in the object. Two bytes for the quotes around the key - name, two bytes for the colon and space between the key and - the value, one byte for the value, and two bytes for the comma - and space between members. We're generous and assume at least - one byte in the key name as well, so we reserve eight bytes per - member. - */ - if (reserve(buffer, 2 + 8 * wr.length()) || buffer->append('{')) + if (buffer->append('{')) return true; /* purecov: inspected */ - uint32 i= 0; + + bool first= true; for (Json_wrapper_object_iterator iter= wr.object_iterator(); !iter.empty(); iter.next()) { - if (i++ > 0 && (reserve(buffer, 2) || buffer->append(", "))) + if (!first && buffer->append(pretty ? "," : ", ")) + return true; /* purecov: inspected */ + + first= false; + + if (pretty && newline_and_indent(buffer, depth)) return true; /* purecov: inspected */ const std::string &key= iter.elt().first; const char *key_data= key.c_str(); size_t key_length= key.length(); - if (reserve(buffer, key_length + 4) || - print_string(buffer, true, key_data, key_length) || - reserve(buffer, 2) || buffer->append(": ") || - wrapper_to_string(iter.elt().second, buffer, true, func_name, - depth)) + if (print_string(buffer, true, key_data, key_length) || + buffer->append(": ") || + wrapper_to_string(iter.elt().second, buffer, true, pretty, + func_name, depth)) return true; /* purecov: inspected */ } - if (reserve(buffer, 1) || buffer->append('}')) + + if (pretty && wr.length() > 0 && newline_and_indent(buffer, depth - 1)) return true; /* purecov: inspected */ + + if (buffer->append('}')) + return true; /* purecov: inspected */ + break; } case Json_dom::J_OPAQUE: @@ -2082,18 +2092,15 @@ static bool wrapper_to_string(const Json_wrapper &wr, String *buffer, const size_t needed= static_cast(base64_needed_encoded_length(wr.get_data_length())); - const char *prefix= "base64:type"; - const size_t prefix_len= std::strlen(prefix); - if (reserve(buffer, prefix_len + MAX_INT_WIDTH + 3 + needed) || - single_quote(buffer, json_quoted) || - buffer->append(prefix, prefix_len) || + if (single_quote(buffer, json_quoted) || + buffer->append("base64:type") || buffer->append_ulonglong(wr.field_type()) || buffer->append(':')) return true; /* purecov: inspected */ // "base64:typeXX:" size_t pos= buffer->length(); - if (reserve(buffer, needed) || + if (buffer->reserve(needed) || base64_encode(wr.get_data(), wr.get_data_length(), const_cast(buffer->ptr() + pos))) return true; /* purecov: inspected */ @@ -2113,8 +2120,7 @@ static bool wrapper_to_string(const Json_wrapper &wr, String *buffer, } case Json_dom::J_UINT: { - if (reserve(buffer, MAX_BIGINT_WIDTH) || - buffer->append_ulonglong(wr.get_uint())) + if (buffer->append_ulonglong(wr.get_uint())) return true; /* purecov: inspected */ break; } @@ -2143,9 +2149,17 @@ bool Json_wrapper::to_string(String *buffer, bool json_quoted, const char *func_name) const { buffer->set_charset(&my_charset_utf8mb4_bin); - return wrapper_to_string(*this, buffer, json_quoted, func_name, 0); + return wrapper_to_string(*this, buffer, json_quoted, false, func_name, 0); } + +bool Json_wrapper::to_pretty_string(String *buffer, const char *func_name) const +{ + buffer->set_charset(&my_charset_utf8mb4_bin); + return wrapper_to_string(*this, buffer, true, true, func_name, 0); +} + + Json_dom::enum_json_type Json_wrapper::type() const { if (empty()) diff --git a/sql/json_dom.h b/sql/json_dom.h index af5d4c6be863..a871884d8420 100644 --- a/sql/json_dom.h +++ b/sql/json_dom.h @@ -1,7 +1,7 @@ #ifndef JSON_DOM_INCLUDED #define JSON_DOM_INCLUDED -/* Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -1244,6 +1244,20 @@ class Json_wrapper : Sql_alloc */ bool to_string(String *buffer, bool json_quoted, const char *func_name) const; + /** + Format the JSON value to an external JSON string in buffer in the format of + ISO/IEC 10646. Add newlines and indentation for readability. + + @param[in,out] buffer the buffer that receives the formatted string + (the string is appended, so make sure the length + is set correctly before calling) + @param[in] func_name the name of the calling function + + @retval false on success + @retval true on error + */ + bool to_pretty_string(String *buffer, const char *func_name) const; + // Accessors /** From 9ebd54feceb1184550bc312c9752d197d5e224cf Mon Sep 17 00:00:00 2001 From: Knut Anders Hatlen Date: Fri, 3 Feb 2017 13:53:55 +0100 Subject: [PATCH 0268/1221] WL#11065: Backport JSON functions from 8.0 to 5.7 (part 3) Backport of the JSON_STORAGE_SIZE function added in WL#9192. Also contains parts of the following bug fix: Bug#22384569: REDUCE THE SIZE OF THE JSON_WRAPPER CLASS Change-Id: Id5831cc561283179662d6db6bf4f3996d857fac5 --- .../inc/gcol_supported_sql_funcs_main.inc | 6 + .../r/gcol_supported_sql_funcs_innodb.result | 15 + .../r/gcol_supported_sql_funcs_myisam.result | 15 + mysql-test/suite/json/inc/json_functions.inc | 181 ++++++++- .../suite/json/r/json_functions_innodb.result | 354 +++++++++++++++++- .../suite/json/r/json_functions_ndb.result | 354 +++++++++++++++++- sql/field.cc | 4 +- sql/item_create.cc | 12 + sql/item_json_func.cc | 45 +++ sql/item_json_func.h | 13 + sql/json_dom.cc | 38 +- sql/json_dom.h | 22 +- 12 files changed, 981 insertions(+), 78 deletions(-) diff --git a/mysql-test/suite/gcol/inc/gcol_supported_sql_funcs_main.inc b/mysql-test/suite/gcol/inc/gcol_supported_sql_funcs_main.inc index cb22f9b31d5c..645755d671d6 100644 --- a/mysql-test/suite/gcol/inc/gcol_supported_sql_funcs_main.inc +++ b/mysql-test/suite/gcol/inc/gcol_supported_sql_funcs_main.inc @@ -1146,6 +1146,12 @@ let $values1 = '{}', default; let $rows = 1; --source suite/gcol/inc/gcol_supported_sql_funcs.inc +--echo # JSON_STORAGE_SIZE() +let $cols = a varchar(1024), b varchar(1024) generated always as (JSON_STORAGE_SIZE(a)) virtual; +let $values1 = '{}', default; +let $rows = 1; +--source suite/gcol/inc/gcol_supported_sql_funcs.inc + --echo # --echo # OTHER FUNCTIONS --echo # diff --git a/mysql-test/suite/gcol/r/gcol_supported_sql_funcs_innodb.result b/mysql-test/suite/gcol/r/gcol_supported_sql_funcs_innodb.result index acd58fe4aac7..7274009c9890 100644 --- a/mysql-test/suite/gcol/r/gcol_supported_sql_funcs_innodb.result +++ b/mysql-test/suite/gcol/r/gcol_supported_sql_funcs_innodb.result @@ -2747,6 +2747,21 @@ a b {} {} drop table t1; set sql_warnings = 0; +# JSON_STORAGE_SIZE() +set sql_warnings = 1; +create table t1 (a varchar(1024), b varchar(1024) generated always as (JSON_STORAGE_SIZE(a)) virtual); +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` varchar(1024) DEFAULT NULL, + `b` varchar(1024) GENERATED ALWAYS AS (json_storage_size(`a`)) VIRTUAL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +insert into t1 values ('{}', default); +select * from t1; +a b +{} 5 +drop table t1; +set sql_warnings = 0; # # OTHER FUNCTIONS # diff --git a/mysql-test/suite/gcol/r/gcol_supported_sql_funcs_myisam.result b/mysql-test/suite/gcol/r/gcol_supported_sql_funcs_myisam.result index 8abab0889eb6..8be693e2e6ed 100644 --- a/mysql-test/suite/gcol/r/gcol_supported_sql_funcs_myisam.result +++ b/mysql-test/suite/gcol/r/gcol_supported_sql_funcs_myisam.result @@ -2747,6 +2747,21 @@ a b {} {} drop table t1; set sql_warnings = 0; +# JSON_STORAGE_SIZE() +set sql_warnings = 1; +create table t1 (a varchar(1024), b varchar(1024) generated always as (JSON_STORAGE_SIZE(a)) virtual); +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` varchar(1024) DEFAULT NULL, + `b` varchar(1024) GENERATED ALWAYS AS (json_storage_size(`a`)) VIRTUAL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +insert into t1 values ('{}', default); +select * from t1; +a b +{} 5 +drop table t1; +set sql_warnings = 0; # # OTHER FUNCTIONS # diff --git a/mysql-test/suite/json/inc/json_functions.inc b/mysql-test/suite/json/inc/json_functions.inc index af2b22940b9b..9870906d37bd 100644 --- a/mysql-test/suite/json/inc/json_functions.inc +++ b/mysql-test/suite/json/inc/json_functions.inc @@ -1968,7 +1968,8 @@ JSON_ARRAY(j, j), JSON_OBJECT('k', j), JSON_UNQUOTE(CAST(j AS CHAR)), JSON_QUOTE(CAST(j AS CHAR)), -JSON_PRETTY(j) +JSON_PRETTY(j), +JSON_STORAGE_SIZE(j) FROM T_WITH_NULLS ORDER BY i; eval $query; @@ -3389,6 +3390,184 @@ SELECT JSON_PRETTY(); --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT JSON_PRETTY('{}', 2); +--echo # +--echo # WL#9192: Add JSON_STORAGE_SIZE / JSON_STORAGE_FREE functions +--echo # +--error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT +SELECT JSON_STORAGE_SIZE(); +--error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT +SELECT JSON_STORAGE_SIZE('{}', '[]'); +--error ER_INVALID_JSON_TEXT_IN_PARAM +SELECT JSON_STORAGE_SIZE('this is not JSON') AS j; +SELECT JSON_STORAGE_SIZE(NULL); +SELECT JSON_STORAGE_SIZE(JSON_ARRAY(1,2,3)); +CREATE TABLE t(id INT PRIMARY KEY, j JSON, v VARCHAR(100)); +INSERT INTO t(id, j) VALUES (0, NULL), (1, '[["abc", "def", "ghi", "jkl"]]'); +UPDATE t SET v = j; +let $dump_table= +SELECT *, + JSON_STORAGE_SIZE(j), JSON_STORAGE_SIZE(v), + JSON_STORAGE_SIZE(j->'\$[0]'), JSON_STORAGE_SIZE(v->'\$[0]') + FROM t ORDER BY id; +--eval $dump_table +UPDATE t SET j = JSON_SET(j, '$[0][1]', NULL, '$[0][3]', 'X'), + v = JSON_SET(v, '$[0][1]', NULL, '$[0][3]', 'X'); +--eval $dump_table +DROP TABLE t; + +--echo # +--echo # Get some extra coverage for partial update of JSON, WL#8963. +--echo # Partial update will not happen in MySQL 5.7, since WL#8963 has not +--echo # been backported. The test cases are kept in order to exercise +--echo # the JSON_STORAGE_SIZE function. +--echo # + +CREATE TABLE t(id INT PRIMARY KEY, j JSON); +INSERT INTO t VALUES +(1, '{"a":"a"}'), (2, '{"a":"b", "b":"b"}'), (3, '{"a":"c", "c":"c"}'); +--let $dump_table= SELECT *, JSON_STORAGE_SIZE(j) ss FROM t ORDER BY id +--eval $dump_table +UPDATE t SET j = JSON_SET(j, '$.a', 'x'); +--eval $dump_table +UPDATE t SET j = JSON_SET(j, '$.a', 'y', '$.b', j->'$.a'); +--eval $dump_table +UPDATE t SET j = JSON_SET(j, '$.a', 'z'), j = JSON_SET(j, '$.b', j->'$.a'); +--eval $dump_table +UPDATE t SET j = JSON_SET(j, '$.a', 'w'), + j = JSON_SET(j, '$.a', 'v', '$.b', j->'$.a'); +--eval $dump_table +UPDATE t SET j = JSON_REPLACE(j, '$.a', '1', '$.c', '2', '$.a', '3'); +--eval $dump_table +UPDATE t SET j = JSON_REPLACE(j, '$.a', '4'), j = JSON_REPLACE(j, '$.c', '5'), + j = JSON_REPLACE(j, '$.a', '6'); +--eval $dump_table +UPDATE t SET j = JSON_REPLACE(j, '$.a', ''); +--eval $dump_table +UPDATE t SET j = JSON_REPLACE(j, '$.a', 'a'); +--eval $dump_table +UPDATE t SET j = JSON_REPLACE(j, '$.a', 'ab'); +--eval $dump_table +DROP TABLE t; + +CREATE TABLE t(id INT PRIMARY KEY, j1 JSON, j2 JSON); +INSERT INTO t VALUES +(1, '{"a":"a","b":"b"}', '{"a":"a","b":"b"}'), +(2, NULL, NULL), +(3, '{"a":"a","b":"b"}', '{"a":"a","b":"b"}'); +let $dump_table= SELECT *, JSON_STORAGE_SIZE(j1) ss1, + JSON_STORAGE_SIZE(j2) ss2 FROM t ORDER BY id; +--eval $dump_table +UPDATE t SET j1 = JSON_SET(j1, '$.a', 'x'), + j2 = JSON_SET(j2, '$.a', 'y'), + j1 = JSON_SET(j1, '$.b', 'z'); +--eval $dump_table +UPDATE t SET j1 = JSON_SET(j1, '$.a', 's'), + j2 = JSON_SET(j2, '$.a', 'abcdefghi'), + j1 = JSON_SET(j1, '$.b', 't'); +--eval $dump_table +UPDATE t SET j1 = JSON_SET(j1, '$.x.y.z', 'abc', '$.b', 'X'); +--eval $dump_table +UPDATE t SET j1 = JSON_REPLACE(j1, '$.x', 'abc', '$.b', 'Y'); +--eval $dump_table +UPDATE t SET j1 = JSON_SET(j1, '$.x', 'abc', '$.b', 'Z'); +--eval $dump_table +DROP TABLE t; + +CREATE TABLE t(j JSON, + i INT DEFAULT 42, + db DOUBLE DEFAULT 2.34e-10, + dc DECIMAL(5, 3) DEFAULT 98.765, + ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + gc JSON GENERATED ALWAYS AS (JSON_ARRAY(i, db, dc, ts))) +ENGINE=InnoDB; # Generated columns are not supported in NDB. +INSERT INTO t(j, ts) VALUES +('[null, "abc", true, "def", false]', '2017-01-02 14:15:16'); +--let $dump_table= SELECT j, JSON_TYPE(j) jt, JSON_STORAGE_SIZE(j) ss FROM t +--eval $dump_table +# The update of $[3] to a longer value should be able to reuse the space freed +# by the update of $[1] to a shorter value. +UPDATE t SET j = JSON_SET(j, '$[1]', 'xy', '$[3]', 'xyzw'); +--eval $dump_table +# Again, increasing the size of $[3] is OK as long as $[1] shrinks first, also +# when done in two separate operations. +UPDATE t SET j = JSON_SET(j, '$[1]', 'a'); +--eval $dump_table +UPDATE t SET j = JSON_SET(j, '$[3]', 'abcde'); +--eval $dump_table +# Test update to some other data types. +UPDATE t SET j = JSON_ARRAY('abcdefghijklmnopqrstuvwxyz'); +--eval $dump_table +UPDATE t SET j = JSON_SET(j, '$[0]', 3.14e0); +--eval $dump_table +UPDATE t SET j = JSON_SET(j, '$[0]', CAST(10000000000 AS UNSIGNED)); +--eval $dump_table +UPDATE t SET j = JSON_SET(j, '$[0]', CAST(4000000000 AS SIGNED)); +--eval $dump_table +UPDATE t SET j = JSON_SET(j, '$[0]', CAST(123 AS UNSIGNED)); +--eval $dump_table +UPDATE t SET j = JSON_SET(j, '$[0]', CAST(456 AS SIGNED)); +--eval $dump_table +UPDATE t SET j = JSON_SET(j, '$[0]', -123); +--eval $dump_table +UPDATE t SET j = JSON_SET(j, '$[0]', -4000000000); +--eval $dump_table +UPDATE t SET j = JSON_SET(j, '$[0]', TRUE); +--eval $dump_table +UPDATE t SET j = JSON_SET(j, '$[0]', NULL); +--eval $dump_table +UPDATE t SET j = JSON_SET(j, '$[0]', CAST('abc' AS BINARY)); +--eval $dump_table +UPDATE t SET j = JSON_SET(j, '$[0]', CAST('2016-12-23 13:16:40' AS DATETIME)); +--eval $dump_table +UPDATE t SET j = JSON_SET(j, '$[0]', CAST('2016-12-24' AS DATE)); +--eval $dump_table +UPDATE t SET j = JSON_SET(j, '$[0]', CAST('14:17:41' AS TIME)); +--eval $dump_table +UPDATE t SET j = JSON_SET(j, '$[0]', 1.23); +--eval $dump_table +UPDATE t SET j = JSON_SET(j, '$[0]', i); +--eval $dump_table +UPDATE t SET j = JSON_SET(j, '$[0]', db); +--eval $dump_table +UPDATE t SET j = JSON_SET(j, '$[0]', dc); +--eval $dump_table +UPDATE t SET j = JSON_SET(j, '$[0]', ts); +--eval $dump_table +UPDATE t SET j = JSON_SET(j, '$[0]', gc->'$[0]'); +--eval $dump_table +UPDATE t SET j = JSON_SET(j, '$[0]', gc->'$[1]'); +--eval $dump_table +UPDATE t SET j = JSON_SET(j, '$[0]', gc->'$[2]'); +--eval $dump_table +UPDATE t SET j = JSON_SET(j, '$[0]', gc->'$[3]'); +--eval $dump_table +UPDATE t SET j = JSON_SET(j, '$[0]', gc->'$[4]'); +--eval $dump_table +DROP TABLE t; + +# Some multi-table updates which perform partial updates. +CREATE TABLE t1(id INT PRIMARY KEY, j JSON, x INT); +INSERT INTO t1 VALUES (1, '{"a":11}', 1), (2, '{"a":22}', 2); +--let $dump_t1= SELECT *, JSON_STORAGE_SIZE(j) ss FROM t1 ORDER BY id +--eval $dump_t1 +CREATE TABLE t2(id INT PRIMARY KEY, j JSON, x INT); +INSERT INTO t2 VALUES (1, '{"b":33}', 3), (2, '{"b":44}', 4); +--let $dump_t2= SELECT *, JSON_STORAGE_SIZE(j) ss FROM t2 ORDER BY id +--eval $dump_t2 +UPDATE t1, t2 SET t1.j = JSON_SET(t1.j, '$.a', t2.j->'$.b') WHERE t1.id = t2.id; +--eval $dump_t1 +--eval $dump_t2 +UPDATE t1, t2 SET t1.j = JSON_SET(t1.j, '$.a', t2.x), + t2.j = JSON_SET(t2.j, '$.b', t1.x) + WHERE t1.id = t2.id; +--eval $dump_t1 +--eval $dump_t2 +UPDATE t1, t2 SET t1.j = '[123]', t2.j = JSON_SET(t2.j, '$.b', 99); +--eval $dump_t1 +--eval $dump_t2 +DROP TABLE t1, t2; + + # Local Variables: # mode: sql # sql-product: mysql diff --git a/mysql-test/suite/json/r/json_functions_innodb.result b/mysql-test/suite/json/r/json_functions_innodb.result index 4175cc39f6da..5a6558b9c873 100644 --- a/mysql-test/suite/json/r/json_functions_innodb.result +++ b/mysql-test/suite/json/r/json_functions_innodb.result @@ -6473,20 +6473,21 @@ JSON_ARRAY(j, j), JSON_OBJECT('k', j), JSON_UNQUOTE(CAST(j AS CHAR)), JSON_QUOTE(CAST(j AS CHAR)), -JSON_PRETTY(j) +JSON_PRETTY(j), +JSON_STORAGE_SIZE(j) FROM T_WITH_NULLS ORDER BY i; -JSON_VALID(j) JSON_TYPE(j) JSON_KEYS(j) JSON_EXTRACT(j, '$') JSON_REMOVE(j, '$.a.b.c') JSON_ARRAY_APPEND(j, '$', 2) JSON_SET(j, '$[0]', 2) JSON_INSERT(j, '$[0]', 2) JSON_REPLACE(j, '$[0]', 2) JSON_MERGE(j, j) JSON_SEARCH(j, 'one', 'abc') JSON_CONTAINS(j, '[1]') JSON_CONTAINS_PATH(j, 'all', '$.a') JSON_LENGTH(j) JSON_DEPTH(j) JSON_ARRAY(j, j) JSON_OBJECT('k', j) JSON_UNQUOTE(CAST(j AS CHAR)) JSON_QUOTE(CAST(j AS CHAR)) JSON_PRETTY(j) -NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL [null, null] {"k": null} NULL NULL NULL +JSON_VALID(j) JSON_TYPE(j) JSON_KEYS(j) JSON_EXTRACT(j, '$') JSON_REMOVE(j, '$.a.b.c') JSON_ARRAY_APPEND(j, '$', 2) JSON_SET(j, '$[0]', 2) JSON_INSERT(j, '$[0]', 2) JSON_REPLACE(j, '$[0]', 2) JSON_MERGE(j, j) JSON_SEARCH(j, 'one', 'abc') JSON_CONTAINS(j, '[1]') JSON_CONTAINS_PATH(j, 'all', '$.a') JSON_LENGTH(j) JSON_DEPTH(j) JSON_ARRAY(j, j) JSON_OBJECT('k', j) JSON_UNQUOTE(CAST(j AS CHAR)) JSON_QUOTE(CAST(j AS CHAR)) JSON_PRETTY(j) JSON_STORAGE_SIZE(j) +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL [null, null] {"k": null} NULL NULL NULL NULL 1 ARRAY NULL [1] [1] [1, 2] [2] [1] [2] [1, 1] NULL 1 0 1 2 [[1], [1]] {"k": [1]} [1] "[1]" [ 1 -] -NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL [null, null] {"k": null} NULL NULL NULL +] 8 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL [null, null] {"k": null} NULL NULL NULL NULL 1 OBJECT ["a"] {"a": "b"} {"a": "b"} [{"a": "b"}, 2] 2 {"a": "b"} 2 {"a": ["b", "b"]} NULL 0 1 1 2 [{"a": "b"}, {"a": "b"}] {"k": {"a": "b"}} {"a": "b"} "{\"a\": \"b\"}" { "a": "b" -} -NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL [null, null] {"k": null} NULL NULL NULL -1 STRING NULL "abc" "abc" ["abc", 2] 2 "abc" 2 ["abc", "abc"] "$" 0 0 1 1 ["abc", "abc"] {"k": "abc"} abc "\"abc\"" "abc" +} 15 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL [null, null] {"k": null} NULL NULL NULL NULL +1 STRING NULL "abc" "abc" ["abc", 2] 2 "abc" 2 ["abc", "abc"] "$" 0 0 1 1 ["abc", "abc"] {"k": "abc"} abc "\"abc\"" "abc" 5 ALTER TABLE T_WITH_NULLS MODIFY COLUMN j TEXT; SELECT JSON_VALID(j), @@ -6508,20 +6509,21 @@ JSON_ARRAY(j, j), JSON_OBJECT('k', j), JSON_UNQUOTE(CAST(j AS CHAR)), JSON_QUOTE(CAST(j AS CHAR)), -JSON_PRETTY(j) +JSON_PRETTY(j), +JSON_STORAGE_SIZE(j) FROM T_WITH_NULLS ORDER BY i; -JSON_VALID(j) JSON_TYPE(j) JSON_KEYS(j) JSON_EXTRACT(j, '$') JSON_REMOVE(j, '$.a.b.c') JSON_ARRAY_APPEND(j, '$', 2) JSON_SET(j, '$[0]', 2) JSON_INSERT(j, '$[0]', 2) JSON_REPLACE(j, '$[0]', 2) JSON_MERGE(j, j) JSON_SEARCH(j, 'one', 'abc') JSON_CONTAINS(j, '[1]') JSON_CONTAINS_PATH(j, 'all', '$.a') JSON_LENGTH(j) JSON_DEPTH(j) JSON_ARRAY(j, j) JSON_OBJECT('k', j) JSON_UNQUOTE(CAST(j AS CHAR)) JSON_QUOTE(CAST(j AS CHAR)) JSON_PRETTY(j) -NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL [null, null] {"k": null} NULL NULL NULL +JSON_VALID(j) JSON_TYPE(j) JSON_KEYS(j) JSON_EXTRACT(j, '$') JSON_REMOVE(j, '$.a.b.c') JSON_ARRAY_APPEND(j, '$', 2) JSON_SET(j, '$[0]', 2) JSON_INSERT(j, '$[0]', 2) JSON_REPLACE(j, '$[0]', 2) JSON_MERGE(j, j) JSON_SEARCH(j, 'one', 'abc') JSON_CONTAINS(j, '[1]') JSON_CONTAINS_PATH(j, 'all', '$.a') JSON_LENGTH(j) JSON_DEPTH(j) JSON_ARRAY(j, j) JSON_OBJECT('k', j) JSON_UNQUOTE(CAST(j AS CHAR)) JSON_QUOTE(CAST(j AS CHAR)) JSON_PRETTY(j) JSON_STORAGE_SIZE(j) +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL [null, null] {"k": null} NULL NULL NULL NULL 1 ARRAY NULL [1] [1] [1, 2] [2] [1] [2] [1, 1] NULL 1 0 1 2 ["[1]", "[1]"] {"k": "[1]"} [1] "[1]" [ 1 -] -NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL [null, null] {"k": null} NULL NULL NULL +] 8 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL [null, null] {"k": null} NULL NULL NULL NULL 1 OBJECT ["a"] {"a": "b"} {"a": "b"} [{"a": "b"}, 2] 2 {"a": "b"} 2 {"a": ["b", "b"]} NULL 0 1 1 2 ["{\"a\": \"b\"}", "{\"a\": \"b\"}"] {"k": "{\"a\": \"b\"}"} {"a": "b"} "{\"a\": \"b\"}" { "a": "b" -} -NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL [null, null] {"k": null} NULL NULL NULL -1 STRING NULL "abc" "abc" ["abc", 2] 2 "abc" 2 ["abc", "abc"] "$" 0 0 1 1 ["\"abc\"", "\"abc\""] {"k": "\"abc\""} abc "\"abc\"" "abc" +} 15 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL [null, null] {"k": null} NULL NULL NULL NULL +1 STRING NULL "abc" "abc" ["abc", 2] 2 "abc" 2 ["abc", "abc"] "$" 0 0 1 1 ["\"abc\"", "\"abc\""] {"k": "\"abc\""} abc "\"abc\"" "abc" 5 DROP TABLE T_WITH_NULLS; CREATE TABLE t_latin1(id INT PRIMARY KEY AUTO_INCREMENT, json_text VARCHAR(20), @@ -9666,3 +9668,323 @@ SELECT JSON_PRETTY(); ERROR 42000: Incorrect parameter count in the call to native function 'JSON_PRETTY' SELECT JSON_PRETTY('{}', 2); ERROR 42000: Incorrect parameter count in the call to native function 'JSON_PRETTY' +# +# WL#9192: Add JSON_STORAGE_SIZE / JSON_STORAGE_FREE functions +# +SELECT JSON_STORAGE_SIZE(); +ERROR 42000: Incorrect parameter count in the call to native function 'JSON_STORAGE_SIZE' +SELECT JSON_STORAGE_SIZE('{}', '[]'); +ERROR 42000: Incorrect parameter count in the call to native function 'JSON_STORAGE_SIZE' +SELECT JSON_STORAGE_SIZE('this is not JSON') AS j; +ERROR 22032: Invalid JSON text in argument 1 to function json_storage_size: "Invalid value." at position 1. +SELECT JSON_STORAGE_SIZE(NULL); +JSON_STORAGE_SIZE(NULL) +NULL +SELECT JSON_STORAGE_SIZE(JSON_ARRAY(1,2,3)); +JSON_STORAGE_SIZE(JSON_ARRAY(1,2,3)) +14 +CREATE TABLE t(id INT PRIMARY KEY, j JSON, v VARCHAR(100)); +INSERT INTO t(id, j) VALUES (0, NULL), (1, '[["abc", "def", "ghi", "jkl"]]'); +UPDATE t SET v = j; +SELECT *, +JSON_STORAGE_SIZE(j), JSON_STORAGE_SIZE(v), +JSON_STORAGE_SIZE(j->'$[0]'), JSON_STORAGE_SIZE(v->'$[0]') +FROM t ORDER BY id; +id j v JSON_STORAGE_SIZE(j) JSON_STORAGE_SIZE(v) JSON_STORAGE_SIZE(j->'$[0]') JSON_STORAGE_SIZE(v->'$[0]') +0 NULL NULL NULL NULL NULL NULL +1 [["abc", "def", "ghi", "jkl"]] [["abc", "def", "ghi", "jkl"]] 40 40 33 33 +UPDATE t SET j = JSON_SET(j, '$[0][1]', NULL, '$[0][3]', 'X'), +v = JSON_SET(v, '$[0][1]', NULL, '$[0][3]', 'X'); +SELECT *, +JSON_STORAGE_SIZE(j), JSON_STORAGE_SIZE(v), +JSON_STORAGE_SIZE(j->'$[0]'), JSON_STORAGE_SIZE(v->'$[0]') +FROM t ORDER BY id; +id j v JSON_STORAGE_SIZE(j) JSON_STORAGE_SIZE(v) JSON_STORAGE_SIZE(j->'$[0]') JSON_STORAGE_SIZE(v->'$[0]') +0 NULL NULL NULL NULL NULL NULL +1 [["abc", null, "ghi", "X"]] [["abc", null, "ghi", "X"]] 34 34 27 27 +DROP TABLE t; +# +# Get some extra coverage for partial update of JSON, WL#8963. +# Partial update will not happen in MySQL 5.7, since WL#8963 has not +# been backported. The test cases are kept in order to exercise +# the JSON_STORAGE_SIZE function. +# +CREATE TABLE t(id INT PRIMARY KEY, j JSON); +INSERT INTO t VALUES +(1, '{"a":"a"}'), (2, '{"a":"b", "b":"b"}'), (3, '{"a":"c", "c":"c"}'); +SELECT *, JSON_STORAGE_SIZE(j) ss FROM t ORDER BY id; +id j ss +1 {"a": "a"} 15 +2 {"a": "b", "b": "b"} 25 +3 {"a": "c", "c": "c"} 25 +UPDATE t SET j = JSON_SET(j, '$.a', 'x'); +SELECT *, JSON_STORAGE_SIZE(j) ss FROM t ORDER BY id; +id j ss +1 {"a": "x"} 15 +2 {"a": "x", "b": "b"} 25 +3 {"a": "x", "c": "c"} 25 +UPDATE t SET j = JSON_SET(j, '$.a', 'y', '$.b', j->'$.a'); +SELECT *, JSON_STORAGE_SIZE(j) ss FROM t ORDER BY id; +id j ss +1 {"a": "y", "b": "x"} 25 +2 {"a": "y", "b": "x"} 25 +3 {"a": "y", "b": "x", "c": "c"} 35 +UPDATE t SET j = JSON_SET(j, '$.a', 'z'), j = JSON_SET(j, '$.b', j->'$.a'); +SELECT *, JSON_STORAGE_SIZE(j) ss FROM t ORDER BY id; +id j ss +1 {"a": "z", "b": "z"} 25 +2 {"a": "z", "b": "z"} 25 +3 {"a": "z", "b": "z", "c": "c"} 35 +UPDATE t SET j = JSON_SET(j, '$.a', 'w'), +j = JSON_SET(j, '$.a', 'v', '$.b', j->'$.a'); +SELECT *, JSON_STORAGE_SIZE(j) ss FROM t ORDER BY id; +id j ss +1 {"a": "v", "b": "w"} 25 +2 {"a": "v", "b": "w"} 25 +3 {"a": "v", "b": "w", "c": "c"} 35 +UPDATE t SET j = JSON_REPLACE(j, '$.a', '1', '$.c', '2', '$.a', '3'); +SELECT *, JSON_STORAGE_SIZE(j) ss FROM t ORDER BY id; +id j ss +1 {"a": "3", "b": "w"} 25 +2 {"a": "3", "b": "w"} 25 +3 {"a": "3", "b": "w", "c": "2"} 35 +UPDATE t SET j = JSON_REPLACE(j, '$.a', '4'), j = JSON_REPLACE(j, '$.c', '5'), +j = JSON_REPLACE(j, '$.a', '6'); +SELECT *, JSON_STORAGE_SIZE(j) ss FROM t ORDER BY id; +id j ss +1 {"a": "6", "b": "w"} 25 +2 {"a": "6", "b": "w"} 25 +3 {"a": "6", "b": "w", "c": "5"} 35 +UPDATE t SET j = JSON_REPLACE(j, '$.a', ''); +SELECT *, JSON_STORAGE_SIZE(j) ss FROM t ORDER BY id; +id j ss +1 {"a": "", "b": "w"} 24 +2 {"a": "", "b": "w"} 24 +3 {"a": "", "b": "w", "c": "5"} 34 +UPDATE t SET j = JSON_REPLACE(j, '$.a', 'a'); +SELECT *, JSON_STORAGE_SIZE(j) ss FROM t ORDER BY id; +id j ss +1 {"a": "a", "b": "w"} 25 +2 {"a": "a", "b": "w"} 25 +3 {"a": "a", "b": "w", "c": "5"} 35 +UPDATE t SET j = JSON_REPLACE(j, '$.a', 'ab'); +SELECT *, JSON_STORAGE_SIZE(j) ss FROM t ORDER BY id; +id j ss +1 {"a": "ab", "b": "w"} 26 +2 {"a": "ab", "b": "w"} 26 +3 {"a": "ab", "b": "w", "c": "5"} 36 +DROP TABLE t; +CREATE TABLE t(id INT PRIMARY KEY, j1 JSON, j2 JSON); +INSERT INTO t VALUES +(1, '{"a":"a","b":"b"}', '{"a":"a","b":"b"}'), +(2, NULL, NULL), +(3, '{"a":"a","b":"b"}', '{"a":"a","b":"b"}'); +SELECT *, JSON_STORAGE_SIZE(j1) ss1, +JSON_STORAGE_SIZE(j2) ss2 FROM t ORDER BY id; +id j1 j2 ss1 ss2 +1 {"a": "a", "b": "b"} {"a": "a", "b": "b"} 25 25 +2 NULL NULL NULL NULL +3 {"a": "a", "b": "b"} {"a": "a", "b": "b"} 25 25 +UPDATE t SET j1 = JSON_SET(j1, '$.a', 'x'), +j2 = JSON_SET(j2, '$.a', 'y'), +j1 = JSON_SET(j1, '$.b', 'z'); +SELECT *, JSON_STORAGE_SIZE(j1) ss1, +JSON_STORAGE_SIZE(j2) ss2 FROM t ORDER BY id; +id j1 j2 ss1 ss2 +1 {"a": "x", "b": "z"} {"a": "y", "b": "b"} 25 25 +2 NULL NULL NULL NULL +3 {"a": "x", "b": "z"} {"a": "y", "b": "b"} 25 25 +UPDATE t SET j1 = JSON_SET(j1, '$.a', 's'), +j2 = JSON_SET(j2, '$.a', 'abcdefghi'), +j1 = JSON_SET(j1, '$.b', 't'); +SELECT *, JSON_STORAGE_SIZE(j1) ss1, +JSON_STORAGE_SIZE(j2) ss2 FROM t ORDER BY id; +id j1 j2 ss1 ss2 +1 {"a": "s", "b": "t"} {"a": "abcdefghi", "b": "b"} 25 33 +2 NULL NULL NULL NULL +3 {"a": "s", "b": "t"} {"a": "abcdefghi", "b": "b"} 25 33 +UPDATE t SET j1 = JSON_SET(j1, '$.x.y.z', 'abc', '$.b', 'X'); +SELECT *, JSON_STORAGE_SIZE(j1) ss1, +JSON_STORAGE_SIZE(j2) ss2 FROM t ORDER BY id; +id j1 j2 ss1 ss2 +1 {"a": "s", "b": "X"} {"a": "abcdefghi", "b": "b"} 25 33 +2 NULL NULL NULL NULL +3 {"a": "s", "b": "X"} {"a": "abcdefghi", "b": "b"} 25 33 +UPDATE t SET j1 = JSON_REPLACE(j1, '$.x', 'abc', '$.b', 'Y'); +SELECT *, JSON_STORAGE_SIZE(j1) ss1, +JSON_STORAGE_SIZE(j2) ss2 FROM t ORDER BY id; +id j1 j2 ss1 ss2 +1 {"a": "s", "b": "Y"} {"a": "abcdefghi", "b": "b"} 25 33 +2 NULL NULL NULL NULL +3 {"a": "s", "b": "Y"} {"a": "abcdefghi", "b": "b"} 25 33 +UPDATE t SET j1 = JSON_SET(j1, '$.x', 'abc', '$.b', 'Z'); +SELECT *, JSON_STORAGE_SIZE(j1) ss1, +JSON_STORAGE_SIZE(j2) ss2 FROM t ORDER BY id; +id j1 j2 ss1 ss2 +1 {"a": "s", "b": "Z", "x": "abc"} {"a": "abcdefghi", "b": "b"} 37 33 +2 NULL NULL NULL NULL +3 {"a": "s", "b": "Z", "x": "abc"} {"a": "abcdefghi", "b": "b"} 37 33 +DROP TABLE t; +CREATE TABLE t(j JSON, +i INT DEFAULT 42, +db DOUBLE DEFAULT 2.34e-10, +dc DECIMAL(5, 3) DEFAULT 98.765, +ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP, +gc JSON GENERATED ALWAYS AS (JSON_ARRAY(i, db, dc, ts))) +ENGINE=InnoDB; +INSERT INTO t(j, ts) VALUES +('[null, "abc", true, "def", false]', '2017-01-02 14:15:16'); +SELECT j, JSON_TYPE(j) jt, JSON_STORAGE_SIZE(j) ss FROM t; +j jt ss +[null, "abc", true, "def", false] ARRAY 28 +UPDATE t SET j = JSON_SET(j, '$[1]', 'xy', '$[3]', 'xyzw'); +SELECT j, JSON_TYPE(j) jt, JSON_STORAGE_SIZE(j) ss FROM t; +j jt ss +[null, "xy", true, "xyzw", false] ARRAY 28 +UPDATE t SET j = JSON_SET(j, '$[1]', 'a'); +SELECT j, JSON_TYPE(j) jt, JSON_STORAGE_SIZE(j) ss FROM t; +j jt ss +[null, "a", true, "xyzw", false] ARRAY 27 +UPDATE t SET j = JSON_SET(j, '$[3]', 'abcde'); +SELECT j, JSON_TYPE(j) jt, JSON_STORAGE_SIZE(j) ss FROM t; +j jt ss +[null, "a", true, "abcde", false] ARRAY 28 +UPDATE t SET j = JSON_ARRAY('abcdefghijklmnopqrstuvwxyz'); +SELECT j, JSON_TYPE(j) jt, JSON_STORAGE_SIZE(j) ss FROM t; +j jt ss +["abcdefghijklmnopqrstuvwxyz"] ARRAY 35 +UPDATE t SET j = JSON_SET(j, '$[0]', 3.14e0); +SELECT j, JSON_TYPE(j) jt, JSON_STORAGE_SIZE(j) ss FROM t; +j jt ss +[3.14] ARRAY 16 +UPDATE t SET j = JSON_SET(j, '$[0]', CAST(10000000000 AS UNSIGNED)); +SELECT j, JSON_TYPE(j) jt, JSON_STORAGE_SIZE(j) ss FROM t; +j jt ss +[10000000000] ARRAY 16 +UPDATE t SET j = JSON_SET(j, '$[0]', CAST(4000000000 AS SIGNED)); +SELECT j, JSON_TYPE(j) jt, JSON_STORAGE_SIZE(j) ss FROM t; +j jt ss +[4000000000] ARRAY 16 +UPDATE t SET j = JSON_SET(j, '$[0]', CAST(123 AS UNSIGNED)); +SELECT j, JSON_TYPE(j) jt, JSON_STORAGE_SIZE(j) ss FROM t; +j jt ss +[123] ARRAY 8 +UPDATE t SET j = JSON_SET(j, '$[0]', CAST(456 AS SIGNED)); +SELECT j, JSON_TYPE(j) jt, JSON_STORAGE_SIZE(j) ss FROM t; +j jt ss +[456] ARRAY 8 +UPDATE t SET j = JSON_SET(j, '$[0]', -123); +SELECT j, JSON_TYPE(j) jt, JSON_STORAGE_SIZE(j) ss FROM t; +j jt ss +[-123] ARRAY 8 +UPDATE t SET j = JSON_SET(j, '$[0]', -4000000000); +SELECT j, JSON_TYPE(j) jt, JSON_STORAGE_SIZE(j) ss FROM t; +j jt ss +[-4000000000] ARRAY 16 +UPDATE t SET j = JSON_SET(j, '$[0]', TRUE); +SELECT j, JSON_TYPE(j) jt, JSON_STORAGE_SIZE(j) ss FROM t; +j jt ss +[true] ARRAY 8 +UPDATE t SET j = JSON_SET(j, '$[0]', NULL); +SELECT j, JSON_TYPE(j) jt, JSON_STORAGE_SIZE(j) ss FROM t; +j jt ss +[null] ARRAY 8 +UPDATE t SET j = JSON_SET(j, '$[0]', CAST('abc' AS BINARY)); +SELECT j, JSON_TYPE(j) jt, JSON_STORAGE_SIZE(j) ss FROM t; +j jt ss +["base64:type253:YWJj"] ARRAY 13 +UPDATE t SET j = JSON_SET(j, '$[0]', CAST('2016-12-23 13:16:40' AS DATETIME)); +SELECT j, JSON_TYPE(j) jt, JSON_STORAGE_SIZE(j) ss FROM t; +j jt ss +["2016-12-23 13:16:40.000000"] ARRAY 18 +UPDATE t SET j = JSON_SET(j, '$[0]', CAST('2016-12-24' AS DATE)); +SELECT j, JSON_TYPE(j) jt, JSON_STORAGE_SIZE(j) ss FROM t; +j jt ss +["2016-12-24"] ARRAY 18 +UPDATE t SET j = JSON_SET(j, '$[0]', CAST('14:17:41' AS TIME)); +SELECT j, JSON_TYPE(j) jt, JSON_STORAGE_SIZE(j) ss FROM t; +j jt ss +["14:17:41.000000"] ARRAY 18 +UPDATE t SET j = JSON_SET(j, '$[0]', 1.23); +SELECT j, JSON_TYPE(j) jt, JSON_STORAGE_SIZE(j) ss FROM t; +j jt ss +[1.23] ARRAY 14 +UPDATE t SET j = JSON_SET(j, '$[0]', i); +SELECT j, JSON_TYPE(j) jt, JSON_STORAGE_SIZE(j) ss FROM t; +j jt ss +[42] ARRAY 8 +UPDATE t SET j = JSON_SET(j, '$[0]', db); +SELECT j, JSON_TYPE(j) jt, JSON_STORAGE_SIZE(j) ss FROM t; +j jt ss +[0.000000000234] ARRAY 16 +UPDATE t SET j = JSON_SET(j, '$[0]', dc); +SELECT j, JSON_TYPE(j) jt, JSON_STORAGE_SIZE(j) ss FROM t; +j jt ss +[98.765] ARRAY 15 +UPDATE t SET j = JSON_SET(j, '$[0]', ts); +SELECT j, JSON_TYPE(j) jt, JSON_STORAGE_SIZE(j) ss FROM t; +j jt ss +["2017-01-02 14:15:16.000000"] ARRAY 18 +UPDATE t SET j = JSON_SET(j, '$[0]', gc->'$[0]'); +SELECT j, JSON_TYPE(j) jt, JSON_STORAGE_SIZE(j) ss FROM t; +j jt ss +[42] ARRAY 8 +UPDATE t SET j = JSON_SET(j, '$[0]', gc->'$[1]'); +SELECT j, JSON_TYPE(j) jt, JSON_STORAGE_SIZE(j) ss FROM t; +j jt ss +[0.000000000234] ARRAY 16 +UPDATE t SET j = JSON_SET(j, '$[0]', gc->'$[2]'); +SELECT j, JSON_TYPE(j) jt, JSON_STORAGE_SIZE(j) ss FROM t; +j jt ss +[98.765] ARRAY 15 +UPDATE t SET j = JSON_SET(j, '$[0]', gc->'$[3]'); +SELECT j, JSON_TYPE(j) jt, JSON_STORAGE_SIZE(j) ss FROM t; +j jt ss +["2017-01-02 14:15:16.000000"] ARRAY 18 +UPDATE t SET j = JSON_SET(j, '$[0]', gc->'$[4]'); +SELECT j, JSON_TYPE(j) jt, JSON_STORAGE_SIZE(j) ss FROM t; +j jt ss +[null] ARRAY 8 +DROP TABLE t; +CREATE TABLE t1(id INT PRIMARY KEY, j JSON, x INT); +INSERT INTO t1 VALUES (1, '{"a":11}', 1), (2, '{"a":22}', 2); +SELECT *, JSON_STORAGE_SIZE(j) ss FROM t1 ORDER BY id; +id j x ss +1 {"a": 11} 1 13 +2 {"a": 22} 2 13 +CREATE TABLE t2(id INT PRIMARY KEY, j JSON, x INT); +INSERT INTO t2 VALUES (1, '{"b":33}', 3), (2, '{"b":44}', 4); +SELECT *, JSON_STORAGE_SIZE(j) ss FROM t2 ORDER BY id; +id j x ss +1 {"b": 33} 3 13 +2 {"b": 44} 4 13 +UPDATE t1, t2 SET t1.j = JSON_SET(t1.j, '$.a', t2.j->'$.b') WHERE t1.id = t2.id; +SELECT *, JSON_STORAGE_SIZE(j) ss FROM t1 ORDER BY id; +id j x ss +1 {"a": 33} 1 13 +2 {"a": 44} 2 13 +SELECT *, JSON_STORAGE_SIZE(j) ss FROM t2 ORDER BY id; +id j x ss +1 {"b": 33} 3 13 +2 {"b": 44} 4 13 +UPDATE t1, t2 SET t1.j = JSON_SET(t1.j, '$.a', t2.x), +t2.j = JSON_SET(t2.j, '$.b', t1.x) +WHERE t1.id = t2.id; +SELECT *, JSON_STORAGE_SIZE(j) ss FROM t1 ORDER BY id; +id j x ss +1 {"a": 3} 1 13 +2 {"a": 4} 2 13 +SELECT *, JSON_STORAGE_SIZE(j) ss FROM t2 ORDER BY id; +id j x ss +1 {"b": 1} 3 13 +2 {"b": 2} 4 13 +UPDATE t1, t2 SET t1.j = '[123]', t2.j = JSON_SET(t2.j, '$.b', 99); +SELECT *, JSON_STORAGE_SIZE(j) ss FROM t1 ORDER BY id; +id j x ss +1 [123] 1 8 +2 [123] 2 8 +SELECT *, JSON_STORAGE_SIZE(j) ss FROM t2 ORDER BY id; +id j x ss +1 {"b": 99} 3 13 +2 {"b": 99} 4 13 +DROP TABLE t1, t2; diff --git a/mysql-test/suite/json/r/json_functions_ndb.result b/mysql-test/suite/json/r/json_functions_ndb.result index e888d13b11b1..ac68f3f50297 100644 --- a/mysql-test/suite/json/r/json_functions_ndb.result +++ b/mysql-test/suite/json/r/json_functions_ndb.result @@ -6549,20 +6549,21 @@ JSON_ARRAY(j, j), JSON_OBJECT('k', j), JSON_UNQUOTE(CAST(j AS CHAR)), JSON_QUOTE(CAST(j AS CHAR)), -JSON_PRETTY(j) +JSON_PRETTY(j), +JSON_STORAGE_SIZE(j) FROM T_WITH_NULLS ORDER BY i; -JSON_VALID(j) JSON_TYPE(j) JSON_KEYS(j) JSON_EXTRACT(j, '$') JSON_REMOVE(j, '$.a.b.c') JSON_ARRAY_APPEND(j, '$', 2) JSON_SET(j, '$[0]', 2) JSON_INSERT(j, '$[0]', 2) JSON_REPLACE(j, '$[0]', 2) JSON_MERGE(j, j) JSON_SEARCH(j, 'one', 'abc') JSON_CONTAINS(j, '[1]') JSON_CONTAINS_PATH(j, 'all', '$.a') JSON_LENGTH(j) JSON_DEPTH(j) JSON_ARRAY(j, j) JSON_OBJECT('k', j) JSON_UNQUOTE(CAST(j AS CHAR)) JSON_QUOTE(CAST(j AS CHAR)) JSON_PRETTY(j) -NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL [null, null] {"k": null} NULL NULL NULL +JSON_VALID(j) JSON_TYPE(j) JSON_KEYS(j) JSON_EXTRACT(j, '$') JSON_REMOVE(j, '$.a.b.c') JSON_ARRAY_APPEND(j, '$', 2) JSON_SET(j, '$[0]', 2) JSON_INSERT(j, '$[0]', 2) JSON_REPLACE(j, '$[0]', 2) JSON_MERGE(j, j) JSON_SEARCH(j, 'one', 'abc') JSON_CONTAINS(j, '[1]') JSON_CONTAINS_PATH(j, 'all', '$.a') JSON_LENGTH(j) JSON_DEPTH(j) JSON_ARRAY(j, j) JSON_OBJECT('k', j) JSON_UNQUOTE(CAST(j AS CHAR)) JSON_QUOTE(CAST(j AS CHAR)) JSON_PRETTY(j) JSON_STORAGE_SIZE(j) +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL [null, null] {"k": null} NULL NULL NULL NULL 1 ARRAY NULL [1] [1] [1, 2] [2] [1] [2] [1, 1] NULL 1 0 1 2 [[1], [1]] {"k": [1]} [1] "[1]" [ 1 -] -NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL [null, null] {"k": null} NULL NULL NULL +] 8 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL [null, null] {"k": null} NULL NULL NULL NULL 1 OBJECT ["a"] {"a": "b"} {"a": "b"} [{"a": "b"}, 2] 2 {"a": "b"} 2 {"a": ["b", "b"]} NULL 0 1 1 2 [{"a": "b"}, {"a": "b"}] {"k": {"a": "b"}} {"a": "b"} "{\"a\": \"b\"}" { "a": "b" -} -NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL [null, null] {"k": null} NULL NULL NULL -1 STRING NULL "abc" "abc" ["abc", 2] 2 "abc" 2 ["abc", "abc"] "$" 0 0 1 1 ["abc", "abc"] {"k": "abc"} abc "\"abc\"" "abc" +} 15 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL [null, null] {"k": null} NULL NULL NULL NULL +1 STRING NULL "abc" "abc" ["abc", 2] 2 "abc" 2 ["abc", "abc"] "$" 0 0 1 1 ["abc", "abc"] {"k": "abc"} abc "\"abc\"" "abc" 5 ALTER TABLE T_WITH_NULLS MODIFY COLUMN j TEXT; Warnings: Warning 1478 Table storage engine 'ndbcluster' does not support the create option 'Binlog of table with BLOB attribute and no PK' @@ -6586,20 +6587,21 @@ JSON_ARRAY(j, j), JSON_OBJECT('k', j), JSON_UNQUOTE(CAST(j AS CHAR)), JSON_QUOTE(CAST(j AS CHAR)), -JSON_PRETTY(j) +JSON_PRETTY(j), +JSON_STORAGE_SIZE(j) FROM T_WITH_NULLS ORDER BY i; -JSON_VALID(j) JSON_TYPE(j) JSON_KEYS(j) JSON_EXTRACT(j, '$') JSON_REMOVE(j, '$.a.b.c') JSON_ARRAY_APPEND(j, '$', 2) JSON_SET(j, '$[0]', 2) JSON_INSERT(j, '$[0]', 2) JSON_REPLACE(j, '$[0]', 2) JSON_MERGE(j, j) JSON_SEARCH(j, 'one', 'abc') JSON_CONTAINS(j, '[1]') JSON_CONTAINS_PATH(j, 'all', '$.a') JSON_LENGTH(j) JSON_DEPTH(j) JSON_ARRAY(j, j) JSON_OBJECT('k', j) JSON_UNQUOTE(CAST(j AS CHAR)) JSON_QUOTE(CAST(j AS CHAR)) JSON_PRETTY(j) -NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL [null, null] {"k": null} NULL NULL NULL +JSON_VALID(j) JSON_TYPE(j) JSON_KEYS(j) JSON_EXTRACT(j, '$') JSON_REMOVE(j, '$.a.b.c') JSON_ARRAY_APPEND(j, '$', 2) JSON_SET(j, '$[0]', 2) JSON_INSERT(j, '$[0]', 2) JSON_REPLACE(j, '$[0]', 2) JSON_MERGE(j, j) JSON_SEARCH(j, 'one', 'abc') JSON_CONTAINS(j, '[1]') JSON_CONTAINS_PATH(j, 'all', '$.a') JSON_LENGTH(j) JSON_DEPTH(j) JSON_ARRAY(j, j) JSON_OBJECT('k', j) JSON_UNQUOTE(CAST(j AS CHAR)) JSON_QUOTE(CAST(j AS CHAR)) JSON_PRETTY(j) JSON_STORAGE_SIZE(j) +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL [null, null] {"k": null} NULL NULL NULL NULL 1 ARRAY NULL [1] [1] [1, 2] [2] [1] [2] [1, 1] NULL 1 0 1 2 ["[1]", "[1]"] {"k": "[1]"} [1] "[1]" [ 1 -] -NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL [null, null] {"k": null} NULL NULL NULL +] 8 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL [null, null] {"k": null} NULL NULL NULL NULL 1 OBJECT ["a"] {"a": "b"} {"a": "b"} [{"a": "b"}, 2] 2 {"a": "b"} 2 {"a": ["b", "b"]} NULL 0 1 1 2 ["{\"a\": \"b\"}", "{\"a\": \"b\"}"] {"k": "{\"a\": \"b\"}"} {"a": "b"} "{\"a\": \"b\"}" { "a": "b" -} -NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL [null, null] {"k": null} NULL NULL NULL -1 STRING NULL "abc" "abc" ["abc", 2] 2 "abc" 2 ["abc", "abc"] "$" 0 0 1 1 ["\"abc\"", "\"abc\""] {"k": "\"abc\""} abc "\"abc\"" "abc" +} 15 +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL [null, null] {"k": null} NULL NULL NULL NULL +1 STRING NULL "abc" "abc" ["abc", 2] 2 "abc" 2 ["abc", "abc"] "$" 0 0 1 1 ["\"abc\"", "\"abc\""] {"k": "\"abc\""} abc "\"abc\"" "abc" 5 DROP TABLE T_WITH_NULLS; CREATE TABLE t_latin1(id INT PRIMARY KEY AUTO_INCREMENT, json_text VARCHAR(20), @@ -9829,3 +9831,323 @@ SELECT JSON_PRETTY(); ERROR 42000: Incorrect parameter count in the call to native function 'JSON_PRETTY' SELECT JSON_PRETTY('{}', 2); ERROR 42000: Incorrect parameter count in the call to native function 'JSON_PRETTY' +# +# WL#9192: Add JSON_STORAGE_SIZE / JSON_STORAGE_FREE functions +# +SELECT JSON_STORAGE_SIZE(); +ERROR 42000: Incorrect parameter count in the call to native function 'JSON_STORAGE_SIZE' +SELECT JSON_STORAGE_SIZE('{}', '[]'); +ERROR 42000: Incorrect parameter count in the call to native function 'JSON_STORAGE_SIZE' +SELECT JSON_STORAGE_SIZE('this is not JSON') AS j; +ERROR 22032: Invalid JSON text in argument 1 to function json_storage_size: "Invalid value." at position 1. +SELECT JSON_STORAGE_SIZE(NULL); +JSON_STORAGE_SIZE(NULL) +NULL +SELECT JSON_STORAGE_SIZE(JSON_ARRAY(1,2,3)); +JSON_STORAGE_SIZE(JSON_ARRAY(1,2,3)) +14 +CREATE TABLE t(id INT PRIMARY KEY, j JSON, v VARCHAR(100)); +INSERT INTO t(id, j) VALUES (0, NULL), (1, '[["abc", "def", "ghi", "jkl"]]'); +UPDATE t SET v = j; +SELECT *, +JSON_STORAGE_SIZE(j), JSON_STORAGE_SIZE(v), +JSON_STORAGE_SIZE(j->'$[0]'), JSON_STORAGE_SIZE(v->'$[0]') +FROM t ORDER BY id; +id j v JSON_STORAGE_SIZE(j) JSON_STORAGE_SIZE(v) JSON_STORAGE_SIZE(j->'$[0]') JSON_STORAGE_SIZE(v->'$[0]') +0 NULL NULL NULL NULL NULL NULL +1 [["abc", "def", "ghi", "jkl"]] [["abc", "def", "ghi", "jkl"]] 40 40 33 33 +UPDATE t SET j = JSON_SET(j, '$[0][1]', NULL, '$[0][3]', 'X'), +v = JSON_SET(v, '$[0][1]', NULL, '$[0][3]', 'X'); +SELECT *, +JSON_STORAGE_SIZE(j), JSON_STORAGE_SIZE(v), +JSON_STORAGE_SIZE(j->'$[0]'), JSON_STORAGE_SIZE(v->'$[0]') +FROM t ORDER BY id; +id j v JSON_STORAGE_SIZE(j) JSON_STORAGE_SIZE(v) JSON_STORAGE_SIZE(j->'$[0]') JSON_STORAGE_SIZE(v->'$[0]') +0 NULL NULL NULL NULL NULL NULL +1 [["abc", null, "ghi", "X"]] [["abc", null, "ghi", "X"]] 34 34 27 27 +DROP TABLE t; +# +# Get some extra coverage for partial update of JSON, WL#8963. +# Partial update will not happen in MySQL 5.7, since WL#8963 has not +# been backported. The test cases are kept in order to exercise +# the JSON_STORAGE_SIZE function. +# +CREATE TABLE t(id INT PRIMARY KEY, j JSON); +INSERT INTO t VALUES +(1, '{"a":"a"}'), (2, '{"a":"b", "b":"b"}'), (3, '{"a":"c", "c":"c"}'); +SELECT *, JSON_STORAGE_SIZE(j) ss FROM t ORDER BY id; +id j ss +1 {"a": "a"} 15 +2 {"a": "b", "b": "b"} 25 +3 {"a": "c", "c": "c"} 25 +UPDATE t SET j = JSON_SET(j, '$.a', 'x'); +SELECT *, JSON_STORAGE_SIZE(j) ss FROM t ORDER BY id; +id j ss +1 {"a": "x"} 15 +2 {"a": "x", "b": "b"} 25 +3 {"a": "x", "c": "c"} 25 +UPDATE t SET j = JSON_SET(j, '$.a', 'y', '$.b', j->'$.a'); +SELECT *, JSON_STORAGE_SIZE(j) ss FROM t ORDER BY id; +id j ss +1 {"a": "y", "b": "x"} 25 +2 {"a": "y", "b": "x"} 25 +3 {"a": "y", "b": "x", "c": "c"} 35 +UPDATE t SET j = JSON_SET(j, '$.a', 'z'), j = JSON_SET(j, '$.b', j->'$.a'); +SELECT *, JSON_STORAGE_SIZE(j) ss FROM t ORDER BY id; +id j ss +1 {"a": "z", "b": "z"} 25 +2 {"a": "z", "b": "z"} 25 +3 {"a": "z", "b": "z", "c": "c"} 35 +UPDATE t SET j = JSON_SET(j, '$.a', 'w'), +j = JSON_SET(j, '$.a', 'v', '$.b', j->'$.a'); +SELECT *, JSON_STORAGE_SIZE(j) ss FROM t ORDER BY id; +id j ss +1 {"a": "v", "b": "w"} 25 +2 {"a": "v", "b": "w"} 25 +3 {"a": "v", "b": "w", "c": "c"} 35 +UPDATE t SET j = JSON_REPLACE(j, '$.a', '1', '$.c', '2', '$.a', '3'); +SELECT *, JSON_STORAGE_SIZE(j) ss FROM t ORDER BY id; +id j ss +1 {"a": "3", "b": "w"} 25 +2 {"a": "3", "b": "w"} 25 +3 {"a": "3", "b": "w", "c": "2"} 35 +UPDATE t SET j = JSON_REPLACE(j, '$.a', '4'), j = JSON_REPLACE(j, '$.c', '5'), +j = JSON_REPLACE(j, '$.a', '6'); +SELECT *, JSON_STORAGE_SIZE(j) ss FROM t ORDER BY id; +id j ss +1 {"a": "6", "b": "w"} 25 +2 {"a": "6", "b": "w"} 25 +3 {"a": "6", "b": "w", "c": "5"} 35 +UPDATE t SET j = JSON_REPLACE(j, '$.a', ''); +SELECT *, JSON_STORAGE_SIZE(j) ss FROM t ORDER BY id; +id j ss +1 {"a": "", "b": "w"} 24 +2 {"a": "", "b": "w"} 24 +3 {"a": "", "b": "w", "c": "5"} 34 +UPDATE t SET j = JSON_REPLACE(j, '$.a', 'a'); +SELECT *, JSON_STORAGE_SIZE(j) ss FROM t ORDER BY id; +id j ss +1 {"a": "a", "b": "w"} 25 +2 {"a": "a", "b": "w"} 25 +3 {"a": "a", "b": "w", "c": "5"} 35 +UPDATE t SET j = JSON_REPLACE(j, '$.a', 'ab'); +SELECT *, JSON_STORAGE_SIZE(j) ss FROM t ORDER BY id; +id j ss +1 {"a": "ab", "b": "w"} 26 +2 {"a": "ab", "b": "w"} 26 +3 {"a": "ab", "b": "w", "c": "5"} 36 +DROP TABLE t; +CREATE TABLE t(id INT PRIMARY KEY, j1 JSON, j2 JSON); +INSERT INTO t VALUES +(1, '{"a":"a","b":"b"}', '{"a":"a","b":"b"}'), +(2, NULL, NULL), +(3, '{"a":"a","b":"b"}', '{"a":"a","b":"b"}'); +SELECT *, JSON_STORAGE_SIZE(j1) ss1, +JSON_STORAGE_SIZE(j2) ss2 FROM t ORDER BY id; +id j1 j2 ss1 ss2 +1 {"a": "a", "b": "b"} {"a": "a", "b": "b"} 25 25 +2 NULL NULL NULL NULL +3 {"a": "a", "b": "b"} {"a": "a", "b": "b"} 25 25 +UPDATE t SET j1 = JSON_SET(j1, '$.a', 'x'), +j2 = JSON_SET(j2, '$.a', 'y'), +j1 = JSON_SET(j1, '$.b', 'z'); +SELECT *, JSON_STORAGE_SIZE(j1) ss1, +JSON_STORAGE_SIZE(j2) ss2 FROM t ORDER BY id; +id j1 j2 ss1 ss2 +1 {"a": "x", "b": "z"} {"a": "y", "b": "b"} 25 25 +2 NULL NULL NULL NULL +3 {"a": "x", "b": "z"} {"a": "y", "b": "b"} 25 25 +UPDATE t SET j1 = JSON_SET(j1, '$.a', 's'), +j2 = JSON_SET(j2, '$.a', 'abcdefghi'), +j1 = JSON_SET(j1, '$.b', 't'); +SELECT *, JSON_STORAGE_SIZE(j1) ss1, +JSON_STORAGE_SIZE(j2) ss2 FROM t ORDER BY id; +id j1 j2 ss1 ss2 +1 {"a": "s", "b": "t"} {"a": "abcdefghi", "b": "b"} 25 33 +2 NULL NULL NULL NULL +3 {"a": "s", "b": "t"} {"a": "abcdefghi", "b": "b"} 25 33 +UPDATE t SET j1 = JSON_SET(j1, '$.x.y.z', 'abc', '$.b', 'X'); +SELECT *, JSON_STORAGE_SIZE(j1) ss1, +JSON_STORAGE_SIZE(j2) ss2 FROM t ORDER BY id; +id j1 j2 ss1 ss2 +1 {"a": "s", "b": "X"} {"a": "abcdefghi", "b": "b"} 25 33 +2 NULL NULL NULL NULL +3 {"a": "s", "b": "X"} {"a": "abcdefghi", "b": "b"} 25 33 +UPDATE t SET j1 = JSON_REPLACE(j1, '$.x', 'abc', '$.b', 'Y'); +SELECT *, JSON_STORAGE_SIZE(j1) ss1, +JSON_STORAGE_SIZE(j2) ss2 FROM t ORDER BY id; +id j1 j2 ss1 ss2 +1 {"a": "s", "b": "Y"} {"a": "abcdefghi", "b": "b"} 25 33 +2 NULL NULL NULL NULL +3 {"a": "s", "b": "Y"} {"a": "abcdefghi", "b": "b"} 25 33 +UPDATE t SET j1 = JSON_SET(j1, '$.x', 'abc', '$.b', 'Z'); +SELECT *, JSON_STORAGE_SIZE(j1) ss1, +JSON_STORAGE_SIZE(j2) ss2 FROM t ORDER BY id; +id j1 j2 ss1 ss2 +1 {"a": "s", "b": "Z", "x": "abc"} {"a": "abcdefghi", "b": "b"} 37 33 +2 NULL NULL NULL NULL +3 {"a": "s", "b": "Z", "x": "abc"} {"a": "abcdefghi", "b": "b"} 37 33 +DROP TABLE t; +CREATE TABLE t(j JSON, +i INT DEFAULT 42, +db DOUBLE DEFAULT 2.34e-10, +dc DECIMAL(5, 3) DEFAULT 98.765, +ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP, +gc JSON GENERATED ALWAYS AS (JSON_ARRAY(i, db, dc, ts))) +ENGINE=InnoDB; +INSERT INTO t(j, ts) VALUES +('[null, "abc", true, "def", false]', '2017-01-02 14:15:16'); +SELECT j, JSON_TYPE(j) jt, JSON_STORAGE_SIZE(j) ss FROM t; +j jt ss +[null, "abc", true, "def", false] ARRAY 28 +UPDATE t SET j = JSON_SET(j, '$[1]', 'xy', '$[3]', 'xyzw'); +SELECT j, JSON_TYPE(j) jt, JSON_STORAGE_SIZE(j) ss FROM t; +j jt ss +[null, "xy", true, "xyzw", false] ARRAY 28 +UPDATE t SET j = JSON_SET(j, '$[1]', 'a'); +SELECT j, JSON_TYPE(j) jt, JSON_STORAGE_SIZE(j) ss FROM t; +j jt ss +[null, "a", true, "xyzw", false] ARRAY 27 +UPDATE t SET j = JSON_SET(j, '$[3]', 'abcde'); +SELECT j, JSON_TYPE(j) jt, JSON_STORAGE_SIZE(j) ss FROM t; +j jt ss +[null, "a", true, "abcde", false] ARRAY 28 +UPDATE t SET j = JSON_ARRAY('abcdefghijklmnopqrstuvwxyz'); +SELECT j, JSON_TYPE(j) jt, JSON_STORAGE_SIZE(j) ss FROM t; +j jt ss +["abcdefghijklmnopqrstuvwxyz"] ARRAY 35 +UPDATE t SET j = JSON_SET(j, '$[0]', 3.14e0); +SELECT j, JSON_TYPE(j) jt, JSON_STORAGE_SIZE(j) ss FROM t; +j jt ss +[3.14] ARRAY 16 +UPDATE t SET j = JSON_SET(j, '$[0]', CAST(10000000000 AS UNSIGNED)); +SELECT j, JSON_TYPE(j) jt, JSON_STORAGE_SIZE(j) ss FROM t; +j jt ss +[10000000000] ARRAY 16 +UPDATE t SET j = JSON_SET(j, '$[0]', CAST(4000000000 AS SIGNED)); +SELECT j, JSON_TYPE(j) jt, JSON_STORAGE_SIZE(j) ss FROM t; +j jt ss +[4000000000] ARRAY 16 +UPDATE t SET j = JSON_SET(j, '$[0]', CAST(123 AS UNSIGNED)); +SELECT j, JSON_TYPE(j) jt, JSON_STORAGE_SIZE(j) ss FROM t; +j jt ss +[123] ARRAY 8 +UPDATE t SET j = JSON_SET(j, '$[0]', CAST(456 AS SIGNED)); +SELECT j, JSON_TYPE(j) jt, JSON_STORAGE_SIZE(j) ss FROM t; +j jt ss +[456] ARRAY 8 +UPDATE t SET j = JSON_SET(j, '$[0]', -123); +SELECT j, JSON_TYPE(j) jt, JSON_STORAGE_SIZE(j) ss FROM t; +j jt ss +[-123] ARRAY 8 +UPDATE t SET j = JSON_SET(j, '$[0]', -4000000000); +SELECT j, JSON_TYPE(j) jt, JSON_STORAGE_SIZE(j) ss FROM t; +j jt ss +[-4000000000] ARRAY 16 +UPDATE t SET j = JSON_SET(j, '$[0]', TRUE); +SELECT j, JSON_TYPE(j) jt, JSON_STORAGE_SIZE(j) ss FROM t; +j jt ss +[true] ARRAY 8 +UPDATE t SET j = JSON_SET(j, '$[0]', NULL); +SELECT j, JSON_TYPE(j) jt, JSON_STORAGE_SIZE(j) ss FROM t; +j jt ss +[null] ARRAY 8 +UPDATE t SET j = JSON_SET(j, '$[0]', CAST('abc' AS BINARY)); +SELECT j, JSON_TYPE(j) jt, JSON_STORAGE_SIZE(j) ss FROM t; +j jt ss +["base64:type253:YWJj"] ARRAY 13 +UPDATE t SET j = JSON_SET(j, '$[0]', CAST('2016-12-23 13:16:40' AS DATETIME)); +SELECT j, JSON_TYPE(j) jt, JSON_STORAGE_SIZE(j) ss FROM t; +j jt ss +["2016-12-23 13:16:40.000000"] ARRAY 18 +UPDATE t SET j = JSON_SET(j, '$[0]', CAST('2016-12-24' AS DATE)); +SELECT j, JSON_TYPE(j) jt, JSON_STORAGE_SIZE(j) ss FROM t; +j jt ss +["2016-12-24"] ARRAY 18 +UPDATE t SET j = JSON_SET(j, '$[0]', CAST('14:17:41' AS TIME)); +SELECT j, JSON_TYPE(j) jt, JSON_STORAGE_SIZE(j) ss FROM t; +j jt ss +["14:17:41.000000"] ARRAY 18 +UPDATE t SET j = JSON_SET(j, '$[0]', 1.23); +SELECT j, JSON_TYPE(j) jt, JSON_STORAGE_SIZE(j) ss FROM t; +j jt ss +[1.23] ARRAY 14 +UPDATE t SET j = JSON_SET(j, '$[0]', i); +SELECT j, JSON_TYPE(j) jt, JSON_STORAGE_SIZE(j) ss FROM t; +j jt ss +[42] ARRAY 8 +UPDATE t SET j = JSON_SET(j, '$[0]', db); +SELECT j, JSON_TYPE(j) jt, JSON_STORAGE_SIZE(j) ss FROM t; +j jt ss +[0.000000000234] ARRAY 16 +UPDATE t SET j = JSON_SET(j, '$[0]', dc); +SELECT j, JSON_TYPE(j) jt, JSON_STORAGE_SIZE(j) ss FROM t; +j jt ss +[98.765] ARRAY 15 +UPDATE t SET j = JSON_SET(j, '$[0]', ts); +SELECT j, JSON_TYPE(j) jt, JSON_STORAGE_SIZE(j) ss FROM t; +j jt ss +["2017-01-02 14:15:16.000000"] ARRAY 18 +UPDATE t SET j = JSON_SET(j, '$[0]', gc->'$[0]'); +SELECT j, JSON_TYPE(j) jt, JSON_STORAGE_SIZE(j) ss FROM t; +j jt ss +[42] ARRAY 8 +UPDATE t SET j = JSON_SET(j, '$[0]', gc->'$[1]'); +SELECT j, JSON_TYPE(j) jt, JSON_STORAGE_SIZE(j) ss FROM t; +j jt ss +[0.000000000234] ARRAY 16 +UPDATE t SET j = JSON_SET(j, '$[0]', gc->'$[2]'); +SELECT j, JSON_TYPE(j) jt, JSON_STORAGE_SIZE(j) ss FROM t; +j jt ss +[98.765] ARRAY 15 +UPDATE t SET j = JSON_SET(j, '$[0]', gc->'$[3]'); +SELECT j, JSON_TYPE(j) jt, JSON_STORAGE_SIZE(j) ss FROM t; +j jt ss +["2017-01-02 14:15:16.000000"] ARRAY 18 +UPDATE t SET j = JSON_SET(j, '$[0]', gc->'$[4]'); +SELECT j, JSON_TYPE(j) jt, JSON_STORAGE_SIZE(j) ss FROM t; +j jt ss +[null] ARRAY 8 +DROP TABLE t; +CREATE TABLE t1(id INT PRIMARY KEY, j JSON, x INT); +INSERT INTO t1 VALUES (1, '{"a":11}', 1), (2, '{"a":22}', 2); +SELECT *, JSON_STORAGE_SIZE(j) ss FROM t1 ORDER BY id; +id j x ss +1 {"a": 11} 1 13 +2 {"a": 22} 2 13 +CREATE TABLE t2(id INT PRIMARY KEY, j JSON, x INT); +INSERT INTO t2 VALUES (1, '{"b":33}', 3), (2, '{"b":44}', 4); +SELECT *, JSON_STORAGE_SIZE(j) ss FROM t2 ORDER BY id; +id j x ss +1 {"b": 33} 3 13 +2 {"b": 44} 4 13 +UPDATE t1, t2 SET t1.j = JSON_SET(t1.j, '$.a', t2.j->'$.b') WHERE t1.id = t2.id; +SELECT *, JSON_STORAGE_SIZE(j) ss FROM t1 ORDER BY id; +id j x ss +1 {"a": 33} 1 13 +2 {"a": 44} 2 13 +SELECT *, JSON_STORAGE_SIZE(j) ss FROM t2 ORDER BY id; +id j x ss +1 {"b": 33} 3 13 +2 {"b": 44} 4 13 +UPDATE t1, t2 SET t1.j = JSON_SET(t1.j, '$.a', t2.x), +t2.j = JSON_SET(t2.j, '$.b', t1.x) +WHERE t1.id = t2.id; +SELECT *, JSON_STORAGE_SIZE(j) ss FROM t1 ORDER BY id; +id j x ss +1 {"a": 3} 1 13 +2 {"a": 4} 2 13 +SELECT *, JSON_STORAGE_SIZE(j) ss FROM t2 ORDER BY id; +id j x ss +1 {"b": 1} 3 13 +2 {"b": 2} 4 13 +UPDATE t1, t2 SET t1.j = '[123]', t2.j = JSON_SET(t2.j, '$.b', 99); +SELECT *, JSON_STORAGE_SIZE(j) ss FROM t1 ORDER BY id; +id j x ss +1 [123] 1 8 +2 [123] 2 8 +SELECT *, JSON_STORAGE_SIZE(j) ss FROM t2 ORDER BY id; +id j x ss +1 {"b": 99} 3 13 +2 {"b": 99} 4 13 +DROP TABLE t1, t2; diff --git a/sql/field.cc b/sql/field.cc index 4427bb92cae7..2776517be908 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -8966,9 +8966,7 @@ type_conversion_status Field_json::store_json(Json_wrapper *json) { ASSERT_COLUMN_MARKED_FOR_WRITE; - json_binary::Value json_val= json->to_value(); - if (json_val.type() == json_binary::Value::ERROR || - json_val.raw_binary(&value)) + if (json->to_binary(&value)) return TYPE_ERR_BAD_VALUE; return store_binary(value.ptr(), value.length()); diff --git a/sql/item_create.cc b/sql/item_create.cc index be344d46a822..1c3f13fbe43e 100644 --- a/sql/item_create.cc +++ b/sql/item_create.cc @@ -2720,6 +2720,17 @@ class Create_func_json_quote : public Create_native_func virtual ~Create_func_json_quote() {} }; +class Create_func_json_storage_size : public Create_func_arg1 +{ +public: + static Create_func_json_storage_size s_singleton; + virtual Item *create(THD *thd, Item *arg1) + { + return new (thd->mem_root) Item_func_json_storage_size(POS(), arg1); + } +}; +Create_func_json_storage_size Create_func_json_storage_size::s_singleton; + class Create_func_json_unquote : public Create_native_func { public: @@ -7552,6 +7563,7 @@ static Native_func_registry func_array[] = { { C_STRING_WITH_LEN("JSON_REMOVE") }, BUILDER(Create_func_json_remove)}, { { C_STRING_WITH_LEN("JSON_MERGE") }, BUILDER(Create_func_json_merge)}, { { C_STRING_WITH_LEN("JSON_QUOTE") }, BUILDER(Create_func_json_quote)}, + { { C_STRING_WITH_LEN("JSON_STORAGE_SIZE") }, BUILDER(Create_func_json_storage_size)}, { { C_STRING_WITH_LEN("JSON_UNQUOTE") }, BUILDER(Create_func_json_unquote)}, { { C_STRING_WITH_LEN("IS_FREE_LOCK") }, BUILDER(Create_func_is_free_lock)}, { { C_STRING_WITH_LEN("IS_USED_LOCK") }, BUILDER(Create_func_is_used_lock)}, diff --git a/sql/item_json_func.cc b/sql/item_json_func.cc index b91dd5d627d3..8fe90c99852f 100644 --- a/sql/item_json_func.cc +++ b/sql/item_json_func.cc @@ -3571,3 +3571,48 @@ String *Item_func_json_pretty::val_str(String *str) } /* purecov: end */ } + + +longlong Item_func_json_storage_size::val_int() +{ + DBUG_ASSERT(fixed); + + /* + If the input is a reference to a JSON column, return the actual storage + size of the value in the table. + */ + if (args[0]->type() == FIELD_ITEM && args[0]->field_type() == MYSQL_TYPE_JSON) + { + null_value= args[0]->is_null(); + if (null_value) + return 0; + return down_cast(args[0])->field->data_length(); + } + + /* + Otherwise, return the size required to store the argument if it were + serialized to the binary JSON format. + */ + Json_wrapper wrapper; + StringBuffer buffer; + try + { + if (get_json_wrapper(args, 0, &buffer, func_name(), &wrapper)) + return error_int(); + } + /* purecov: begin inspected */ + catch (...) + { + handle_std_exception(func_name()); + return error_int(); + } + /* purecov: end */ + + null_value= args[0]->null_value; + if (null_value) + return 0; + + if (wrapper.to_binary(&buffer)) + return error_int(); /* purecov: inspected */ + return buffer.length(); +} diff --git a/sql/item_json_func.h b/sql/item_json_func.h index fd0a383b3c6b..0a441842bfa7 100644 --- a/sql/item_json_func.h +++ b/sql/item_json_func.h @@ -819,6 +819,19 @@ class Item_func_json_pretty :public Item_str_func String *val_str(String *str); }; +/** + Class that represents the function JSON_STORAGE_SIZE. +*/ +class Item_func_json_storage_size : public Item_int_func +{ +public: + Item_func_json_storage_size(const POS &pos, Item *a) + : Item_int_func(pos, a) + {} + const char *func_name() const { return "json_storage_size"; } + longlong val_int(); +}; + /** Turn a GEOMETRY value into a JSON value per the GeoJSON specification revison 1.0. This method is implemented in item_geofunc.cc. diff --git a/sql/json_dom.cc b/sql/json_dom.cc index 15b2b7085394..c238363a59a2 100644 --- a/sql/json_dom.cc +++ b/sql/json_dom.cc @@ -1739,9 +1739,8 @@ Json_wrapper_object_iterator::elt() const } -Json_wrapper::Json_wrapper(Json_dom *dom_value) : - m_is_dom(true), m_dom_alias(false), m_value(), - m_id(NULL), m_dom_value(dom_value) +Json_wrapper::Json_wrapper(Json_dom *dom_value) + : m_is_dom(true), m_dom_alias(false), m_value(), m_dom_value(dom_value) { if (!dom_value) { @@ -1767,15 +1766,8 @@ void Json_wrapper::steal(Json_wrapper *old) } } -Json_wrapper::Json_wrapper(const json_binary::Value &value) : - m_is_dom(false), m_dom_alias(false), m_value(value), - m_id(NULL), m_dom_value(NULL) -{} - - -Json_wrapper::Json_wrapper(const json_binary::Value &value, const char *id) : - m_is_dom(false), m_dom_alias(false), m_value(value), - m_id(id), m_dom_value(NULL) +Json_wrapper::Json_wrapper(const json_binary::Value &value) + : m_is_dom(false), m_dom_alias(false), m_value(value), m_dom_value(NULL) {} @@ -1783,11 +1775,9 @@ Json_wrapper::Json_wrapper(const Json_wrapper &old) : m_is_dom(old.m_is_dom), m_dom_alias(old.m_dom_alias), m_value(old.m_value), - m_id(old.m_id), m_dom_value(old.m_is_dom ? (m_dom_alias? old.m_dom_value : old.m_dom_value->clone()) : - NULL), - m_tmp(old.m_tmp) + NULL) {} @@ -1833,10 +1823,8 @@ Json_wrapper &Json_wrapper::operator=(const Json_wrapper& from) { m_dom_value= NULL; m_value= from.m_value; - m_id= from.m_id; } - m_tmp= from.m_tmp; return *this; } @@ -1867,22 +1855,20 @@ Json_dom *Json_wrapper::clone_dom() } -json_binary::Value Json_wrapper::to_value() +bool Json_wrapper::to_binary(String *str) const { if (empty()) { - return json_binary::Value(); + /* purecov: begin inspected */ + my_error(ER_INVALID_JSON_BINARY_DATA, MYF(0)); + return true; + /* purecov: end */ } if (m_is_dom) - { - if (json_binary::serialize(m_dom_value, &m_tmp)) - return json_binary::Value(json_binary::Value::ERROR); - - return json_binary::parse_binary(m_tmp.ptr(), m_tmp.length()); - } + return json_binary::serialize(m_dom_value, str); - return m_value; + return m_value.raw_binary(str); } diff --git a/sql/json_dom.h b/sql/json_dom.h index a871884d8420..f36402025cd3 100644 --- a/sql/json_dom.h +++ b/sql/json_dom.h @@ -1106,9 +1106,7 @@ class Json_wrapper : Sql_alloc bool m_is_dom; //!< Wraps a DOM iff true bool m_dom_alias; //!< If true, don't deallocate in destructor json_binary::Value m_value; - const char *m_id; //!< Unused for now Json_dom *m_dom_value; - String m_tmp; //!< Area for building binary value from DOM /** Get the wrapped datetime value in the packed format. @@ -1124,8 +1122,8 @@ class Json_wrapper : Sql_alloc /** Create an empty wrapper. Cf ::empty(). */ - Json_wrapper() : m_is_dom(true), m_dom_alias(true), m_value(), - m_id(NULL), m_dom_value(NULL) + Json_wrapper() + : m_is_dom(true), m_dom_alias(true), m_value(), m_dom_value(NULL) {} using Sql_alloc::operator new; @@ -1185,13 +1183,6 @@ class Json_wrapper : Sql_alloc */ Json_wrapper &operator=(const Json_wrapper &old); - /** - @param[in] value the binary JSON value to wrap - @param[in] id the pointer into the original field containing the - binary JSON value. This allows caching any DOMs - built for the query, to avoid rebuilding it. - */ - Json_wrapper(const json_binary::Value &value, const char *id); ~Json_wrapper(); /** @@ -1221,13 +1212,12 @@ class Json_wrapper : Sql_alloc /** Get the wrapped contents in binary value form. - The lifetime is same as that of the wrapped value iff the wrapper - wraps a binary value. If it is a DOM, the lifetime is the - same as that of the wrapper. - @return the binary value. + @param[in,out] str a string that will be filled with the binary value + @retval false on success + @retval true on error */ - json_binary::Value to_value(); + bool to_binary(String *str) const; /** Format the JSON value to an external JSON string in buffer in From 1c1f0e0748cf849f7df4d27fada541c07d2107ba Mon Sep 17 00:00:00 2001 From: Knut Anders Hatlen Date: Mon, 21 Mar 2016 08:14:26 +0100 Subject: [PATCH 0269/1221] WL#11065: Backport JSON functions from 8.0 to 5.7 (part 4) The following bug fix is backported to 5.7 from trunk: Bug#22961128: WRONG RESULT WHEN MANIPULATING RESULT OF JSON_MERGE The DOM structure returned by JSON_MERGE could sometimes have inconsistencies which confused functions such as JSON_SET and made them return wrong results. The problem was that Json_object::consume() didn't always set the parent pointer of the merged nodes, so that some of the merged nodes appeared to be root nodes even though they were not. The fix is to make Json_object::consume() set the parent pointer of the merged node when it has merged two object members. Change-Id: I8fcfd53e32cfce73d429e3dc7012acb6c78a604f --- mysql-test/suite/json/r/json_no_table.result | 6 ++++++ mysql-test/suite/json/t/json_no_table.test | 4 ++++ sql/json_dom.cc | 4 ++++ sql/json_dom.h | 1 + 4 files changed, 15 insertions(+) diff --git a/mysql-test/suite/json/r/json_no_table.result b/mysql-test/suite/json/r/json_no_table.result index f39febc23f7e..e7e1ac0cffaf 100644 --- a/mysql-test/suite/json/r/json_no_table.result +++ b/mysql-test/suite/json/r/json_no_table.result @@ -3283,3 +3283,9 @@ Warning 1235 This version of MySQL doesn't yet support 'comparison of JSON in th Warning 1235 This version of MySQL doesn't yet support 'comparison of JSON in the LEAST and GREATEST operators' Warning 1235 This version of MySQL doesn't yet support 'comparison of JSON in the LEAST and GREATEST operators' Warning 1235 This version of MySQL doesn't yet support 'comparison of JSON in the LEAST and GREATEST operators' +# +# Bug#22961128: WRONG RESULT WHEN MANIPULATING RESULT OF JSON_MERGE +# +SELECT JSON_SET(JSON_ARRAY(JSON_MERGE('{"a":1}', '{"a":2}')), '$[0].a', 123); +JSON_SET(JSON_ARRAY(JSON_MERGE('{"a":1}', '{"a":2}')), '$[0].a', 123) +[{"a": 123}] diff --git a/mysql-test/suite/json/t/json_no_table.test b/mysql-test/suite/json/t/json_no_table.test index ad65125140ec..d170f66bf4f0 100644 --- a/mysql-test/suite/json/t/json_no_table.test +++ b/mysql-test/suite/json/t/json_no_table.test @@ -2287,3 +2287,7 @@ SELECT JSON_ARRAY(LEAST(NULL, NULL), GREATEST(NULL, NULL), LEAST(j1, NULL), GREATEST(NULL, j2), LEAST(j1, j2), GREATEST(j1, j2)) AS j FROM (SELECT CAST('1' AS JSON) AS j1, CAST('2' AS JSON) AS j2) t; +--echo # +--echo # Bug#22961128: WRONG RESULT WHEN MANIPULATING RESULT OF JSON_MERGE +--echo # +SELECT JSON_SET(JSON_ARRAY(JSON_MERGE('{"a":1}', '{"a":2}')), '$[0].a', 123); diff --git a/sql/json_dom.cc b/sql/json_dom.cc index c238363a59a2..31932d98e7f0 100644 --- a/sql/json_dom.cc +++ b/sql/json_dom.cc @@ -1225,6 +1225,7 @@ bool Json_object::consume(Json_object *other) this_iter->second= merge_doms(this_iter->second, value); if (this_iter->second == NULL) return true; /* purecov: inspected */ + this_iter->second->set_parent(this); } } @@ -1236,7 +1237,10 @@ Json_dom *Json_object::get(const std::string &key) const const Json_object_map::const_iterator iter= m_map.find(key); if (iter != m_map.end()) + { + DBUG_ASSERT(iter->second->parent() == this); return iter->second; + } return NULL; } diff --git a/sql/json_dom.h b/sql/json_dom.h index f36402025cd3..8733ff9785d3 100644 --- a/sql/json_dom.h +++ b/sql/json_dom.h @@ -592,6 +592,7 @@ class Json_array : public Json_dom */ Json_dom *operator[](size_t index) const { + DBUG_ASSERT(m_v[index]->parent() == this); return m_v[index]; } From 378653d4d73004b7bc02ba9ab5ea00f7134ee523 Mon Sep 17 00:00:00 2001 From: Knut Anders Hatlen Date: Wed, 21 Jun 2017 17:43:22 +0200 Subject: [PATCH 0270/1221] WL#11065: Backport JSON functions from 8.0 to 5.7 (part 5) WL#9692: Rename JSON_MERGE to JSON_MERGE_PRESERVE Rename the JSON_MERGE function to JSON_MERGE_PRESERVE and make JSON_MERGE a deprecated alias to JSON_MERGE_PRESERVE. Change-Id: Ic7275500e5bac9f66abfd801a385962bf5e1e0ef --- mysql-test/suite/json/inc/json_functions.inc | 14 +- mysql-test/suite/json/r/json_agg.result | 36 ++-- .../suite/json/r/json_functions_innodb.result | 24 +-- .../suite/json/r/json_functions_ndb.result | 24 +-- mysql-test/suite/json/r/json_no_table.result | 185 +++++++++++------- mysql-test/suite/json/t/json_agg.test | 14 +- mysql-test/suite/json/t/json_no_table.test | 103 ++++++---- mysql-test/suite/rpl/r/rpl_json.result | 2 +- mysql-test/suite/rpl/t/rpl_json.test | 2 +- .../tests/mtr/r/crud_doc_criteria_args.result | 4 +- .../mtr/r/crud_table_criteria_args.result | 4 +- .../tests/mtr/r/crud_update_table_json.result | 4 +- .../mtr/r/update_crud_itemmerge_o.result | 62 ++++-- rapid/plugin/x/tests/mtr/r/update_doc.result | 12 +- sql/item_create.cc | 42 +++- sql/item_json_func.cc | 2 +- sql/item_json_func.h | 11 +- 17 files changed, 336 insertions(+), 209 deletions(-) diff --git a/mysql-test/suite/json/inc/json_functions.inc b/mysql-test/suite/json/inc/json_functions.inc index 9870906d37bd..8fb3108f8568 100644 --- a/mysql-test/suite/json/inc/json_functions.inc +++ b/mysql-test/suite/json/inc/json_functions.inc @@ -570,7 +570,9 @@ INSERT INTO json_merge_t VALUES (3, '[1,2]'), (4, '{"a":["x", "y"]}'), (5, '{"a":"b","c":"d"}'); -SELECT t1.j, t2.j, json_merge(t1.j, t2.j), json_merge(t2.j, t1.j) +SELECT t1.j, t2.j, + JSON_MERGE_PRESERVE(t1.j, t2.j) AS m1, + JSON_MERGE_PRESERVE(t2.j, t1.j) AS m2 FROM json_merge_t t1, json_merge_t t2 ORDER BY t1.i, t2.i; DROP TABLE json_merge_t; @@ -1409,7 +1411,7 @@ create procedure merge_docs ) language sql deterministic contains sql begin - set out_value = json_merge( in_value, inout_value ); + set out_value = json_merge_preserve(in_value, inout_value); set inout_value = in_value; end// delimiter ;// @@ -1958,7 +1960,7 @@ JSON_ARRAY_APPEND(j, '\$', 2), JSON_SET(j, '\$[0]', 2), JSON_INSERT(j, '\$[0]', 2), JSON_REPLACE(j, '\$[0]', 2), -JSON_MERGE(j, j), +JSON_MERGE_PRESERVE(j, j), JSON_SEARCH(j, 'one', 'abc'), JSON_CONTAINS(j, '[1]'), JSON_CONTAINS_PATH(j, 'all', '\$.a'), @@ -2008,7 +2010,7 @@ SELECT JSON_INSERT(json_text, json_path, json_atom_text) FROM t_latin1 ORDER BY id; SELECT JSON_REPLACE(json_text, json_path, json_atom_text) FROM t_latin1 ORDER BY id; -SELECT JSON_MERGE(json_text, json_text) FROM t_latin1 ORDER BY id; +SELECT JSON_MERGE_PRESERVE(json_text, json_text) FROM t_latin1 ORDER BY id; SELECT JSON_SEARCH(json_text, CONVERT('one' USING latin1), json_atom_text, CONVERT(X'F8' USING latin1), json_path) FROM t_latin1 ORDER BY id; @@ -2984,8 +2986,8 @@ drop table t1; CREATE TABLE t (doc json); INSERT INTO t VALUES('{"array":[1,2,3,4]}'); -UPDATE t SET doc=JSON_MERGE(doc,doc); -UPDATE t SET doc=JSON_MERGE(doc,doc); +UPDATE t SET doc=JSON_MERGE_PRESERVE(doc, doc); +UPDATE t SET doc=JSON_MERGE_PRESERVE(doc, doc); drop table t; --echo # diff --git a/mysql-test/suite/json/r/json_agg.result b/mysql-test/suite/json/r/json_agg.result index 2c7ec6ea8162..7ad8983349de 100644 --- a/mysql-test/suite/json/r/json_agg.result +++ b/mysql-test/suite/json/r/json_agg.result @@ -97,31 +97,31 @@ EXECUTE p4; JSON_ARRAYAGG(b) ["alfa", null, "doi", "unu", "trei", null, null, "one"] deallocate prepare p4; -SELECT JSON_MERGE(JSON_ARRAYAGG(b), '[true, false]') FROM t1; -JSON_MERGE(JSON_ARRAYAGG(b), '[true, false]') +SELECT JSON_MERGE_PRESERVE(JSON_ARRAYAGG(b), '[true, false]') FROM t1; +JSON_MERGE_PRESERVE(JSON_ARRAYAGG(b), '[true, false]') ["alfa", null, "doi", "unu", "trei", null, null, "one", true, false] PREPARE p1 FROM -"SELECT a, JSON_MERGE(JSON_ARRAYAGG(b), '[true, false]') FROM t1 GROUP BY a"; +"SELECT a, JSON_MERGE_PRESERVE(JSON_ARRAYAGG(b), '[true, false]') FROM t1 GROUP BY a"; EXECUTE p1; -a JSON_MERGE(JSON_ARRAYAGG(b), '[true, false]') +a JSON_MERGE_PRESERVE(JSON_ARRAYAGG(b), '[true, false]') 1 ["alfa", null, "unu", "one", true, false] 2 ["doi", true, false] 3 ["trei", true, false] 4 [null, null, true, false] EXECUTE p1; -a JSON_MERGE(JSON_ARRAYAGG(b), '[true, false]') +a JSON_MERGE_PRESERVE(JSON_ARRAYAGG(b), '[true, false]') 1 ["alfa", null, "unu", "one", true, false] 2 ["doi", true, false] 3 ["trei", true, false] 4 [null, null, true, false] deallocate prepare p1; PREPARE p4 FROM -"SELECT JSON_MERGE(JSON_ARRAYAGG(b), '[true, false]') FROM t1"; +"SELECT JSON_MERGE_PRESERVE(JSON_ARRAYAGG(b), '[true, false]') FROM t1"; EXECUTE p4; -JSON_MERGE(JSON_ARRAYAGG(b), '[true, false]') +JSON_MERGE_PRESERVE(JSON_ARRAYAGG(b), '[true, false]') ["alfa", null, "doi", "unu", "trei", null, null, "one", true, false] EXECUTE p4; -JSON_MERGE(JSON_ARRAYAGG(b), '[true, false]') +JSON_MERGE_PRESERVE(JSON_ARRAYAGG(b), '[true, false]') ["alfa", null, "doi", "unu", "trei", null, null, "one", true, false] deallocate prepare p4; ANALYZE TABLE t1; @@ -455,39 +455,39 @@ EXECUTE p4; JSON_OBJECTAGG(k, b) {"1": "alfa", "2": null, "3": "doi", "4": "unu", "5": "trei", "6": null, "7": null, "8": "one"} deallocate prepare p4; -SELECT a, JSON_MERGE(JSON_OBJECTAGG(k, b), '[true, false]') FROM t1 GROUP BY a; -a JSON_MERGE(JSON_OBJECTAGG(k, b), '[true, false]') +SELECT a, JSON_MERGE_PRESERVE(JSON_OBJECTAGG(k, b), '[true, false]') FROM t1 GROUP BY a; +a JSON_MERGE_PRESERVE(JSON_OBJECTAGG(k, b), '[true, false]') 1 [{"1": "alfa", "2": null, "4": "unu", "8": "one"}, true, false] 2 [{"3": "doi"}, true, false] 3 [{"5": "trei"}, true, false] 4 [{"6": null, "7": null}, true, false] -SELECT JSON_MERGE(JSON_OBJECTAGG(k, b), '[true, false]') FROM t1; -JSON_MERGE(JSON_OBJECTAGG(k, b), '[true, false]') +SELECT JSON_MERGE_PRESERVE(JSON_OBJECTAGG(k, b), '[true, false]') FROM t1; +JSON_MERGE_PRESERVE(JSON_OBJECTAGG(k, b), '[true, false]') [{"1": "alfa", "2": null, "3": "doi", "4": "unu", "5": "trei", "6": null, "7": null, "8": "one"}, true, false] PREPARE p1 FROM -"SELECT a, JSON_MERGE(JSON_OBJECTAGG(k, b), '[true, false]') +"SELECT a, JSON_MERGE_PRESERVE(JSON_OBJECTAGG(k, b), '[true, false]') FROM t1 GROUP BY a"; EXECUTE p1; -a JSON_MERGE(JSON_OBJECTAGG(k, b), '[true, false]') +a JSON_MERGE_PRESERVE(JSON_OBJECTAGG(k, b), '[true, false]') 1 [{"1": "alfa", "2": null, "4": "unu", "8": "one"}, true, false] 2 [{"3": "doi"}, true, false] 3 [{"5": "trei"}, true, false] 4 [{"6": null, "7": null}, true, false] EXECUTE p1; -a JSON_MERGE(JSON_OBJECTAGG(k, b), '[true, false]') +a JSON_MERGE_PRESERVE(JSON_OBJECTAGG(k, b), '[true, false]') 1 [{"1": "alfa", "2": null, "4": "unu", "8": "one"}, true, false] 2 [{"3": "doi"}, true, false] 3 [{"5": "trei"}, true, false] 4 [{"6": null, "7": null}, true, false] deallocate prepare p1; PREPARE p4 FROM -"SELECT JSON_MERGE(JSON_OBJECTAGG(k, b), '[true, false]') FROM t1"; +"SELECT JSON_MERGE_PRESERVE(JSON_OBJECTAGG(k, b), '[true, false]') FROM t1"; EXECUTE p4; -JSON_MERGE(JSON_OBJECTAGG(k, b), '[true, false]') +JSON_MERGE_PRESERVE(JSON_OBJECTAGG(k, b), '[true, false]') [{"1": "alfa", "2": null, "3": "doi", "4": "unu", "5": "trei", "6": null, "7": null, "8": "one"}, true, false] EXECUTE p4; -JSON_MERGE(JSON_OBJECTAGG(k, b), '[true, false]') +JSON_MERGE_PRESERVE(JSON_OBJECTAGG(k, b), '[true, false]') [{"1": "alfa", "2": null, "3": "doi", "4": "unu", "5": "trei", "6": null, "7": null, "8": "one"}, true, false] deallocate prepare p4; ANALYZE TABLE t1; diff --git a/mysql-test/suite/json/r/json_functions_innodb.result b/mysql-test/suite/json/r/json_functions_innodb.result index 5a6558b9c873..00f02a370320 100644 --- a/mysql-test/suite/json/r/json_functions_innodb.result +++ b/mysql-test/suite/json/r/json_functions_innodb.result @@ -4714,9 +4714,11 @@ INSERT INTO json_merge_t VALUES (3, '[1,2]'), (4, '{"a":["x", "y"]}'), (5, '{"a":"b","c":"d"}'); -SELECT t1.j, t2.j, json_merge(t1.j, t2.j), json_merge(t2.j, t1.j) +SELECT t1.j, t2.j, +JSON_MERGE_PRESERVE(t1.j, t2.j) AS m1, +JSON_MERGE_PRESERVE(t2.j, t1.j) AS m2 FROM json_merge_t t1, json_merge_t t2 ORDER BY t1.i, t2.i; -j j json_merge(t1.j, t2.j) json_merge(t2.j, t1.j) +j j m1 m2 NULL NULL NULL NULL NULL true NULL NULL NULL 5 NULL NULL @@ -5801,7 +5803,7 @@ out out_value json ) language sql deterministic contains sql begin -set out_value = json_merge( in_value, inout_value ); +set out_value = json_merge_preserve(in_value, inout_value); set inout_value = in_value; end// create procedure merge_doc_types @@ -6463,7 +6465,7 @@ JSON_ARRAY_APPEND(j, '$', 2), JSON_SET(j, '$[0]', 2), JSON_INSERT(j, '$[0]', 2), JSON_REPLACE(j, '$[0]', 2), -JSON_MERGE(j, j), +JSON_MERGE_PRESERVE(j, j), JSON_SEARCH(j, 'one', 'abc'), JSON_CONTAINS(j, '[1]'), JSON_CONTAINS_PATH(j, 'all', '$.a'), @@ -6477,7 +6479,7 @@ JSON_PRETTY(j), JSON_STORAGE_SIZE(j) FROM T_WITH_NULLS ORDER BY i; -JSON_VALID(j) JSON_TYPE(j) JSON_KEYS(j) JSON_EXTRACT(j, '$') JSON_REMOVE(j, '$.a.b.c') JSON_ARRAY_APPEND(j, '$', 2) JSON_SET(j, '$[0]', 2) JSON_INSERT(j, '$[0]', 2) JSON_REPLACE(j, '$[0]', 2) JSON_MERGE(j, j) JSON_SEARCH(j, 'one', 'abc') JSON_CONTAINS(j, '[1]') JSON_CONTAINS_PATH(j, 'all', '$.a') JSON_LENGTH(j) JSON_DEPTH(j) JSON_ARRAY(j, j) JSON_OBJECT('k', j) JSON_UNQUOTE(CAST(j AS CHAR)) JSON_QUOTE(CAST(j AS CHAR)) JSON_PRETTY(j) JSON_STORAGE_SIZE(j) +JSON_VALID(j) JSON_TYPE(j) JSON_KEYS(j) JSON_EXTRACT(j, '$') JSON_REMOVE(j, '$.a.b.c') JSON_ARRAY_APPEND(j, '$', 2) JSON_SET(j, '$[0]', 2) JSON_INSERT(j, '$[0]', 2) JSON_REPLACE(j, '$[0]', 2) JSON_MERGE_PRESERVE(j, j) JSON_SEARCH(j, 'one', 'abc') JSON_CONTAINS(j, '[1]') JSON_CONTAINS_PATH(j, 'all', '$.a') JSON_LENGTH(j) JSON_DEPTH(j) JSON_ARRAY(j, j) JSON_OBJECT('k', j) JSON_UNQUOTE(CAST(j AS CHAR)) JSON_QUOTE(CAST(j AS CHAR)) JSON_PRETTY(j) JSON_STORAGE_SIZE(j) NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL [null, null] {"k": null} NULL NULL NULL NULL 1 ARRAY NULL [1] [1] [1, 2] [2] [1] [2] [1, 1] NULL 1 0 1 2 [[1], [1]] {"k": [1]} [1] "[1]" [ 1 @@ -6499,7 +6501,7 @@ JSON_ARRAY_APPEND(j, '$', 2), JSON_SET(j, '$[0]', 2), JSON_INSERT(j, '$[0]', 2), JSON_REPLACE(j, '$[0]', 2), -JSON_MERGE(j, j), +JSON_MERGE_PRESERVE(j, j), JSON_SEARCH(j, 'one', 'abc'), JSON_CONTAINS(j, '[1]'), JSON_CONTAINS_PATH(j, 'all', '$.a'), @@ -6513,7 +6515,7 @@ JSON_PRETTY(j), JSON_STORAGE_SIZE(j) FROM T_WITH_NULLS ORDER BY i; -JSON_VALID(j) JSON_TYPE(j) JSON_KEYS(j) JSON_EXTRACT(j, '$') JSON_REMOVE(j, '$.a.b.c') JSON_ARRAY_APPEND(j, '$', 2) JSON_SET(j, '$[0]', 2) JSON_INSERT(j, '$[0]', 2) JSON_REPLACE(j, '$[0]', 2) JSON_MERGE(j, j) JSON_SEARCH(j, 'one', 'abc') JSON_CONTAINS(j, '[1]') JSON_CONTAINS_PATH(j, 'all', '$.a') JSON_LENGTH(j) JSON_DEPTH(j) JSON_ARRAY(j, j) JSON_OBJECT('k', j) JSON_UNQUOTE(CAST(j AS CHAR)) JSON_QUOTE(CAST(j AS CHAR)) JSON_PRETTY(j) JSON_STORAGE_SIZE(j) +JSON_VALID(j) JSON_TYPE(j) JSON_KEYS(j) JSON_EXTRACT(j, '$') JSON_REMOVE(j, '$.a.b.c') JSON_ARRAY_APPEND(j, '$', 2) JSON_SET(j, '$[0]', 2) JSON_INSERT(j, '$[0]', 2) JSON_REPLACE(j, '$[0]', 2) JSON_MERGE_PRESERVE(j, j) JSON_SEARCH(j, 'one', 'abc') JSON_CONTAINS(j, '[1]') JSON_CONTAINS_PATH(j, 'all', '$.a') JSON_LENGTH(j) JSON_DEPTH(j) JSON_ARRAY(j, j) JSON_OBJECT('k', j) JSON_UNQUOTE(CAST(j AS CHAR)) JSON_QUOTE(CAST(j AS CHAR)) JSON_PRETTY(j) JSON_STORAGE_SIZE(j) NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL [null, null] {"k": null} NULL NULL NULL NULL 1 ARRAY NULL [1] [1] [1, 2] [2] [1] [2] [1, 1] NULL 1 0 1 2 ["[1]", "[1]"] {"k": "[1]"} [1] "[1]" [ 1 @@ -6585,8 +6587,8 @@ FROM t_latin1 ORDER BY id; JSON_REPLACE(json_text, json_path, json_atom_text) ["åøæ"] {"æøå": "åøæ"} -SELECT JSON_MERGE(json_text, json_text) FROM t_latin1 ORDER BY id; -JSON_MERGE(json_text, json_text) +SELECT JSON_MERGE_PRESERVE(json_text, json_text) FROM t_latin1 ORDER BY id; +JSON_MERGE_PRESERVE(json_text, json_text) ["æøå", "æøå"] {"æøå": ["æøå", "æøå"]} SELECT JSON_SEARCH(json_text, CONVERT('one' USING latin1), json_atom_text, @@ -8852,8 +8854,8 @@ drop table t1; # CREATE TABLE t (doc json); INSERT INTO t VALUES('{"array":[1,2,3,4]}'); -UPDATE t SET doc=JSON_MERGE(doc,doc); -UPDATE t SET doc=JSON_MERGE(doc,doc); +UPDATE t SET doc=JSON_MERGE_PRESERVE(doc, doc); +UPDATE t SET doc=JSON_MERGE_PRESERVE(doc, doc); drop table t; # # Bug#21224267 DEEPLY NESTED JSON OBJECTS MAY CAUSE CRASH diff --git a/mysql-test/suite/json/r/json_functions_ndb.result b/mysql-test/suite/json/r/json_functions_ndb.result index ac68f3f50297..0bce3f25505e 100644 --- a/mysql-test/suite/json/r/json_functions_ndb.result +++ b/mysql-test/suite/json/r/json_functions_ndb.result @@ -4734,9 +4734,11 @@ INSERT INTO json_merge_t VALUES (3, '[1,2]'), (4, '{"a":["x", "y"]}'), (5, '{"a":"b","c":"d"}'); -SELECT t1.j, t2.j, json_merge(t1.j, t2.j), json_merge(t2.j, t1.j) +SELECT t1.j, t2.j, +JSON_MERGE_PRESERVE(t1.j, t2.j) AS m1, +JSON_MERGE_PRESERVE(t2.j, t1.j) AS m2 FROM json_merge_t t1, json_merge_t t2 ORDER BY t1.i, t2.i; -j j json_merge(t1.j, t2.j) json_merge(t2.j, t1.j) +j j m1 m2 NULL NULL NULL NULL NULL true NULL NULL NULL 5 NULL NULL @@ -5857,7 +5859,7 @@ out out_value json ) language sql deterministic contains sql begin -set out_value = json_merge( in_value, inout_value ); +set out_value = json_merge_preserve(in_value, inout_value); set inout_value = in_value; end// create procedure merge_doc_types @@ -6539,7 +6541,7 @@ JSON_ARRAY_APPEND(j, '$', 2), JSON_SET(j, '$[0]', 2), JSON_INSERT(j, '$[0]', 2), JSON_REPLACE(j, '$[0]', 2), -JSON_MERGE(j, j), +JSON_MERGE_PRESERVE(j, j), JSON_SEARCH(j, 'one', 'abc'), JSON_CONTAINS(j, '[1]'), JSON_CONTAINS_PATH(j, 'all', '$.a'), @@ -6553,7 +6555,7 @@ JSON_PRETTY(j), JSON_STORAGE_SIZE(j) FROM T_WITH_NULLS ORDER BY i; -JSON_VALID(j) JSON_TYPE(j) JSON_KEYS(j) JSON_EXTRACT(j, '$') JSON_REMOVE(j, '$.a.b.c') JSON_ARRAY_APPEND(j, '$', 2) JSON_SET(j, '$[0]', 2) JSON_INSERT(j, '$[0]', 2) JSON_REPLACE(j, '$[0]', 2) JSON_MERGE(j, j) JSON_SEARCH(j, 'one', 'abc') JSON_CONTAINS(j, '[1]') JSON_CONTAINS_PATH(j, 'all', '$.a') JSON_LENGTH(j) JSON_DEPTH(j) JSON_ARRAY(j, j) JSON_OBJECT('k', j) JSON_UNQUOTE(CAST(j AS CHAR)) JSON_QUOTE(CAST(j AS CHAR)) JSON_PRETTY(j) JSON_STORAGE_SIZE(j) +JSON_VALID(j) JSON_TYPE(j) JSON_KEYS(j) JSON_EXTRACT(j, '$') JSON_REMOVE(j, '$.a.b.c') JSON_ARRAY_APPEND(j, '$', 2) JSON_SET(j, '$[0]', 2) JSON_INSERT(j, '$[0]', 2) JSON_REPLACE(j, '$[0]', 2) JSON_MERGE_PRESERVE(j, j) JSON_SEARCH(j, 'one', 'abc') JSON_CONTAINS(j, '[1]') JSON_CONTAINS_PATH(j, 'all', '$.a') JSON_LENGTH(j) JSON_DEPTH(j) JSON_ARRAY(j, j) JSON_OBJECT('k', j) JSON_UNQUOTE(CAST(j AS CHAR)) JSON_QUOTE(CAST(j AS CHAR)) JSON_PRETTY(j) JSON_STORAGE_SIZE(j) NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL [null, null] {"k": null} NULL NULL NULL NULL 1 ARRAY NULL [1] [1] [1, 2] [2] [1] [2] [1, 1] NULL 1 0 1 2 [[1], [1]] {"k": [1]} [1] "[1]" [ 1 @@ -6577,7 +6579,7 @@ JSON_ARRAY_APPEND(j, '$', 2), JSON_SET(j, '$[0]', 2), JSON_INSERT(j, '$[0]', 2), JSON_REPLACE(j, '$[0]', 2), -JSON_MERGE(j, j), +JSON_MERGE_PRESERVE(j, j), JSON_SEARCH(j, 'one', 'abc'), JSON_CONTAINS(j, '[1]'), JSON_CONTAINS_PATH(j, 'all', '$.a'), @@ -6591,7 +6593,7 @@ JSON_PRETTY(j), JSON_STORAGE_SIZE(j) FROM T_WITH_NULLS ORDER BY i; -JSON_VALID(j) JSON_TYPE(j) JSON_KEYS(j) JSON_EXTRACT(j, '$') JSON_REMOVE(j, '$.a.b.c') JSON_ARRAY_APPEND(j, '$', 2) JSON_SET(j, '$[0]', 2) JSON_INSERT(j, '$[0]', 2) JSON_REPLACE(j, '$[0]', 2) JSON_MERGE(j, j) JSON_SEARCH(j, 'one', 'abc') JSON_CONTAINS(j, '[1]') JSON_CONTAINS_PATH(j, 'all', '$.a') JSON_LENGTH(j) JSON_DEPTH(j) JSON_ARRAY(j, j) JSON_OBJECT('k', j) JSON_UNQUOTE(CAST(j AS CHAR)) JSON_QUOTE(CAST(j AS CHAR)) JSON_PRETTY(j) JSON_STORAGE_SIZE(j) +JSON_VALID(j) JSON_TYPE(j) JSON_KEYS(j) JSON_EXTRACT(j, '$') JSON_REMOVE(j, '$.a.b.c') JSON_ARRAY_APPEND(j, '$', 2) JSON_SET(j, '$[0]', 2) JSON_INSERT(j, '$[0]', 2) JSON_REPLACE(j, '$[0]', 2) JSON_MERGE_PRESERVE(j, j) JSON_SEARCH(j, 'one', 'abc') JSON_CONTAINS(j, '[1]') JSON_CONTAINS_PATH(j, 'all', '$.a') JSON_LENGTH(j) JSON_DEPTH(j) JSON_ARRAY(j, j) JSON_OBJECT('k', j) JSON_UNQUOTE(CAST(j AS CHAR)) JSON_QUOTE(CAST(j AS CHAR)) JSON_PRETTY(j) JSON_STORAGE_SIZE(j) NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL [null, null] {"k": null} NULL NULL NULL NULL 1 ARRAY NULL [1] [1] [1, 2] [2] [1] [2] [1, 1] NULL 1 0 1 2 ["[1]", "[1]"] {"k": "[1]"} [1] "[1]" [ 1 @@ -6663,8 +6665,8 @@ FROM t_latin1 ORDER BY id; JSON_REPLACE(json_text, json_path, json_atom_text) ["åøæ"] {"æøå": "åøæ"} -SELECT JSON_MERGE(json_text, json_text) FROM t_latin1 ORDER BY id; -JSON_MERGE(json_text, json_text) +SELECT JSON_MERGE_PRESERVE(json_text, json_text) FROM t_latin1 ORDER BY id; +JSON_MERGE_PRESERVE(json_text, json_text) ["æøå", "æøå"] {"æøå": ["æøå", "æøå"]} SELECT JSON_SEARCH(json_text, CONVERT('one' USING latin1), json_atom_text, @@ -8993,8 +8995,8 @@ CREATE TABLE t (doc json); Warnings: Warning 1478 Table storage engine 'ndbcluster' does not support the create option 'Binlog of table with BLOB attribute and no PK' INSERT INTO t VALUES('{"array":[1,2,3,4]}'); -UPDATE t SET doc=JSON_MERGE(doc,doc); -UPDATE t SET doc=JSON_MERGE(doc,doc); +UPDATE t SET doc=JSON_MERGE_PRESERVE(doc, doc); +UPDATE t SET doc=JSON_MERGE_PRESERVE(doc, doc); drop table t; # # Bug#21224267 DEEPLY NESTED JSON OBJECTS MAY CAUSE CRASH diff --git a/mysql-test/suite/json/r/json_no_table.result b/mysql-test/suite/json/r/json_no_table.result index e7e1ac0cffaf..ba986b513110 100644 --- a/mysql-test/suite/json/r/json_no_table.result +++ b/mysql-test/suite/json/r/json_no_table.result @@ -685,150 +685,166 @@ JSON_REMOVE ) {"a": "foo", "b": [true, {"c": 123, "d": 456}]} # ---------------------------------------------------------------------- -# Test of JSON_MERGE function. +# Test of JSON_MERGE_PRESERVE function. # ---------------------------------------------------------------------- # not enough args -select json_merge(); -ERROR 42000: Incorrect parameter count in the call to native function 'json_merge' +SELECT JSON_MERGE_PRESERVE(); +ERROR 42000: Incorrect parameter count in the call to native function 'JSON_MERGE_PRESERVE' # not enough args -select json_merge( '[ 1, 2, 3 ]' ); -ERROR 42000: Incorrect parameter count in the call to native function 'json_merge' -select json_merge( null, null ); -json_merge( null, null ) +SELECT JSON_MERGE_PRESERVE('[ 1, 2, 3 ]'); +ERROR 42000: Incorrect parameter count in the call to native function 'JSON_MERGE_PRESERVE' +SELECT JSON_MERGE_PRESERVE(NULL, NULL); +JSON_MERGE_PRESERVE(NULL, NULL) NULL -select json_merge( null, '[ 1, 2, 3 ]' ); -json_merge( null, '[ 1, 2, 3 ]' ) +SELECT JSON_MERGE_PRESERVE(NULL, '[ 1, 2, 3 ]'); +JSON_MERGE_PRESERVE(NULL, '[ 1, 2, 3 ]') NULL -select json_merge( '[ 1, 2, 3 ]', null ); -json_merge( '[ 1, 2, 3 ]', null ) +SELECT JSON_MERGE_PRESERVE('[ 1, 2, 3 ]', NULL); +JSON_MERGE_PRESERVE('[ 1, 2, 3 ]', NULL) NULL -select json_merge( null, '[ 1, 2, 3 ]', '[ 4, 5, 6 ]' ); -json_merge( null, '[ 1, 2, 3 ]', '[ 4, 5, 6 ]' ) +SELECT JSON_MERGE_PRESERVE(NULL, '[ 1, 2, 3 ]', '[ 4, 5, 6 ]'); +JSON_MERGE_PRESERVE(NULL, '[ 1, 2, 3 ]', '[ 4, 5, 6 ]') NULL -select json_merge( '[ 1, 2, 3 ]', null, '[ 4, 5, 6 ]' ); -json_merge( '[ 1, 2, 3 ]', null, '[ 4, 5, 6 ]' ) +SELECT JSON_MERGE_PRESERVE('[ 1, 2, 3 ]', NULL, '[ 4, 5, 6 ]'); +JSON_MERGE_PRESERVE('[ 1, 2, 3 ]', NULL, '[ 4, 5, 6 ]') NULL -select json_merge( '[ 1, 2, 3 ]', '[ 4, 5, 6 ]', null ); -json_merge( '[ 1, 2, 3 ]', '[ 4, 5, 6 ]', null ) +SELECT JSON_MERGE_PRESERVE('[ 1, 2, 3 ]', '[ 4, 5, 6 ]', NULL); +JSON_MERGE_PRESERVE('[ 1, 2, 3 ]', '[ 4, 5, 6 ]', NULL) NULL -select json_merge( '[1, 2]', '[3, 4' ); -ERROR 22032: Invalid JSON text in argument 2 to function json_merge: "Missing a comma or ']' after an array element." at position 5. -select json_merge( '[1, 2', '[3, 4]' ); -ERROR 22032: Invalid JSON text in argument 1 to function json_merge: "Missing a comma or ']' after an array element." at position 5. -select json_merge( '1', '2' ); -json_merge( '1', '2' ) +SELECT JSON_MERGE_PRESERVE('[1, 2]', '[3, 4'); +ERROR 22032: Invalid JSON text in argument 2 to function json_merge_preserve: "Missing a comma or ']' after an array element." at position 5. +SELECT JSON_MERGE_PRESERVE('[1, 2', '[3, 4]'); +ERROR 22032: Invalid JSON text in argument 1 to function json_merge_preserve: "Missing a comma or ']' after an array element." at position 5. +SELECT JSON_MERGE_PRESERVE('1', '2'); +JSON_MERGE_PRESERVE('1', '2') [1, 2] -select json_merge( '1', '[2, 3]' ); -json_merge( '1', '[2, 3]' ) +SELECT JSON_MERGE_PRESERVE('1', '[2, 3]'); +JSON_MERGE_PRESERVE('1', '[2, 3]') [1, 2, 3] -select json_merge( '[1, 2]', '3' ); -json_merge( '[1, 2]', '3' ) +SELECT JSON_MERGE_PRESERVE('[1, 2]', '3'); +JSON_MERGE_PRESERVE('[1, 2]', '3') [1, 2, 3] -select json_merge( '1', '{ "a": 2 }' ); -json_merge( '1', '{ "a": 2 }' ) +SELECT JSON_MERGE_PRESERVE('1', '{ "a": 2 }'); +JSON_MERGE_PRESERVE('1', '{ "a": 2 }') [1, {"a": 2}] -select json_merge( '{ "a": 2 }', '1' ); -json_merge( '{ "a": 2 }', '1' ) +SELECT JSON_MERGE_PRESERVE('{ "a": 2 }', '1'); +JSON_MERGE_PRESERVE('{ "a": 2 }', '1') [{"a": 2}, 1] -select json_merge( '[1, 2]', '[3, 4]' ); -json_merge( '[1, 2]', '[3, 4]' ) +SELECT JSON_MERGE_PRESERVE('[1, 2]', '[3, 4]'); +JSON_MERGE_PRESERVE('[1, 2]', '[3, 4]') [1, 2, 3, 4] -select json_merge( '{ "a": 2 }', '{ "b": 3}' ); -json_merge( '{ "a": 2 }', '{ "b": 3}' ) +SELECT JSON_MERGE_PRESERVE('{ "a": 2 }', '{ "b": 3}'); +JSON_MERGE_PRESERVE('{ "a": 2 }', '{ "b": 3}') {"a": 2, "b": 3} -select json_merge( '[1, 2]', '{ "a": 2 }' ); -json_merge( '[1, 2]', '{ "a": 2 }' ) +SELECT JSON_MERGE_PRESERVE('[1, 2]', '{ "a": 2 }'); +JSON_MERGE_PRESERVE('[1, 2]', '{ "a": 2 }') [1, 2, {"a": 2}] -select json_merge( '{ "a": 2 }', '[1, 2]' ); -json_merge( '{ "a": 2 }', '[1, 2]' ) +SELECT JSON_MERGE_PRESERVE('{ "a": 2 }', '[1, 2]'); +JSON_MERGE_PRESERVE('{ "a": 2 }', '[1, 2]') [{"a": 2}, 1, 2] -select json_merge( '{"a": 1, "b": 2 }', '{"b": 3, "d": 4 }' ); -json_merge( '{"a": 1, "b": 2 }', '{"b": 3, "d": 4 }' ) +SELECT JSON_MERGE_PRESERVE('{"a": 1, "b": 2 }', +'{"b": 3, "d": 4 }'); +JSON_MERGE_PRESERVE('{"a": 1, "b": 2 }', +'{"b": 3, "d": 4 }') {"a": 1, "b": [2, 3], "d": 4} -select json_merge( '{"a": 1, "b": 2 }', '{"b": [3, 4], "d": 4 }' ); -json_merge( '{"a": 1, "b": 2 }', '{"b": [3, 4], "d": 4 }' ) +SELECT JSON_MERGE_PRESERVE('{"a": 1, "b": 2 }', +'{"b": [3, 4], "d": 4 }'); +JSON_MERGE_PRESERVE('{"a": 1, "b": 2 }', +'{"b": [3, 4], "d": 4 }') {"a": 1, "b": [2, 3, 4], "d": 4} -select json_merge( '{"a": 1, "b": [2, 3] }', '{"b": 4, "d": 4 }' ); -json_merge( '{"a": 1, "b": [2, 3] }', '{"b": 4, "d": 4 }' ) +SELECT JSON_MERGE_PRESERVE('{"a": 1, "b": [2, 3] }', '{"b": 4, "d": 4 }'); +JSON_MERGE_PRESERVE('{"a": 1, "b": [2, 3] }', '{"b": 4, "d": 4 }') {"a": 1, "b": [2, 3, 4], "d": 4} -select json_merge( '{"a": 1, "b": 2 }', '{"b": {"e": 7, "f": 8}, "d": 4 }' ); -json_merge( '{"a": 1, "b": 2 }', '{"b": {"e": 7, "f": 8}, "d": 4 }' ) +SELECT JSON_MERGE_PRESERVE('{"a": 1, "b": 2 }', +'{"b": {"e": 7, "f": 8}, "d": 4 }'); +JSON_MERGE_PRESERVE('{"a": 1, "b": 2 }', +'{"b": {"e": 7, "f": 8}, "d": 4 }') {"a": 1, "b": [2, {"e": 7, "f": 8}], "d": 4} -select json_merge( '{"b": {"e": 7, "f": 8}, "d": 4 }', '{"a": 1, "b": 2 }' ); -json_merge( '{"b": {"e": 7, "f": 8}, "d": 4 }', '{"a": 1, "b": 2 }' ) +SELECT JSON_MERGE_PRESERVE('{"b": {"e": 7, "f": 8}, "d": 4 }', +'{"a": 1, "b": 2 }'); +JSON_MERGE_PRESERVE('{"b": {"e": 7, "f": 8}, "d": 4 }', +'{"a": 1, "b": 2 }') {"a": 1, "b": [{"e": 7, "f": 8}, 2], "d": 4} -select json_merge( '{"a": 1, "b": [2, 9] }', '{"b": [10, 11], "d": 4 }' ); -json_merge( '{"a": 1, "b": [2, 9] }', '{"b": [10, 11], "d": 4 }' ) +SELECT JSON_MERGE_PRESERVE('{"a": 1, "b": [2, 9] }', +'{"b": [10, 11], "d": 4 }'); +JSON_MERGE_PRESERVE('{"a": 1, "b": [2, 9] }', +'{"b": [10, 11], "d": 4 }') {"a": 1, "b": [2, 9, 10, 11], "d": 4} -select json_merge( '{"a": 1, "b": [2, 9] }', '{"b": {"e": 7, "f": 8}, "d": 4 }' ); -json_merge( '{"a": 1, "b": [2, 9] }', '{"b": {"e": 7, "f": 8}, "d": 4 }' ) +SELECT JSON_MERGE_PRESERVE('{"a": 1, "b": [2, 9] }', +'{"b": {"e": 7, "f": 8}, "d": 4 }'); +JSON_MERGE_PRESERVE('{"a": 1, "b": [2, 9] }', +'{"b": {"e": 7, "f": 8}, "d": 4 }') {"a": 1, "b": [2, 9, {"e": 7, "f": 8}], "d": 4} -select json_merge( '{"b": {"e": 7, "f": 8}, "d": 4 }', '{"a": 1, "b": [2, 9] }' ); -json_merge( '{"b": {"e": 7, "f": 8}, "d": 4 }', '{"a": 1, "b": [2, 9] }' ) +SELECT JSON_MERGE_PRESERVE('{"b": {"e": 7, "f": 8}, "d": 4 }', +'{"a": 1, "b": [2, 9] }'); +JSON_MERGE_PRESERVE('{"b": {"e": 7, "f": 8}, "d": 4 }', +'{"a": 1, "b": [2, 9] }') {"a": 1, "b": [{"e": 7, "f": 8}, 2, 9], "d": 4} -select json_merge( '{"b": {"e": 7, "f": 8}, "d": 4 }', '{ "a": 1, "b": {"e": 20, "g": 21 } }' ); -json_merge( '{"b": {"e": 7, "f": 8}, "d": 4 }', '{ "a": 1, "b": {"e": 20, "g": 21 } }' ) +SELECT JSON_MERGE_PRESERVE('{"b": {"e": 7, "f": 8}, "d": 4 }', +'{ "a": 1, "b": {"e": 20, "g": 21 } }'); +JSON_MERGE_PRESERVE('{"b": {"e": 7, "f": 8}, "d": 4 }', +'{ "a": 1, "b": {"e": 20, "g": 21 } }') {"a": 1, "b": {"e": [7, 20], "f": 8, "g": 21}, "d": 4} -select json_merge( '1', '2', '3' ); -json_merge( '1', '2', '3' ) +SELECT JSON_MERGE_PRESERVE('1', '2', '3'); +JSON_MERGE_PRESERVE('1', '2', '3') [1, 2, 3] -select json_merge( '[1, 2 ]', '3', '[4, 5]' ); -json_merge( '[1, 2 ]', '3', '[4, 5]' ) +SELECT JSON_MERGE_PRESERVE('[1, 2 ]', '3', '[4, 5]'); +JSON_MERGE_PRESERVE('[1, 2 ]', '3', '[4, 5]') [1, 2, 3, 4, 5] -select json_merge +SELECT JSON_MERGE_PRESERVE ( '{ "a": true, "b": { "c": 3, "d": 4 }, "e": [ 1, 2 ] }', '{ "d": false, "b": { "g": 3, "d": 5 }, "f": [ 1, 2 ] }', '{ "m": true, "b": { "h": 8, "d": 4 }, "e": [ 3, 4 ] }' ); -json_merge +JSON_MERGE_PRESERVE ( '{ "a": true, "b": { "c": 3, "d": 4 }, "e": [ 1, 2 ] }', '{ "d": false, "b": { "g": 3, "d": 5 }, "f": [ 1, 2 ] }', '{ "m": true, "b": { "h": 8, "d": 4 }, "e": [ 3, 4 ] }' ) {"a": true, "b": {"c": 3, "d": [4, 5, 4], "g": 3, "h": 8}, "d": false, "e": [1, 2, 3, 4], "f": [1, 2], "m": true} -SELECT JSON_MERGE +SELECT JSON_MERGE_PRESERVE ( '{ "a" : "foo", "b" : [ true, { "c" : 123 } ] }', '[ 5, 6]' ); -JSON_MERGE +JSON_MERGE_PRESERVE ( '{ "a" : "foo", "b" : [ true, { "c" : 123 } ] }', '[ 5, 6]' ) [{"a": "foo", "b": [true, {"c": 123}]}, 5, 6] -SELECT JSON_MERGE +SELECT JSON_MERGE_PRESERVE ( '{ "a" : "foo", "b" : [ true, { "c" : 123 } ] }', '{ "b": [ false, 34 ] }' ); -JSON_MERGE +JSON_MERGE_PRESERVE ( '{ "a" : "foo", "b" : [ true, { "c" : 123 } ] }', '{ "b": [ false, 34 ] }' ) {"a": "foo", "b": [true, {"c": 123}, false, 34]} -SELECT JSON_MERGE +SELECT JSON_MERGE_PRESERVE ( '{ "a" : "foo", "b" : [ true, { "c" : 123 } ] }', '{ "b": "bar" }' ); -JSON_MERGE +JSON_MERGE_PRESERVE ( '{ "a" : "foo", "b" : [ true, { "c" : 123 } ] }', '{ "b": "bar" }' ) {"a": "foo", "b": [true, {"c": 123}, "bar"]} -SELECT JSON_MERGE +SELECT JSON_MERGE_PRESERVE ( '{ "a" : { "b" : 1 } }', '{ "a" : { "c" : 1 } }' ); -JSON_MERGE +JSON_MERGE_PRESERVE ( '{ "a" : { "b" : 1 } }', '{ "a" : { "c" : 1 } }' @@ -3286,6 +3302,29 @@ Warning 1235 This version of MySQL doesn't yet support 'comparison of JSON in th # # Bug#22961128: WRONG RESULT WHEN MANIPULATING RESULT OF JSON_MERGE # -SELECT JSON_SET(JSON_ARRAY(JSON_MERGE('{"a":1}', '{"a":2}')), '$[0].a', 123); -JSON_SET(JSON_ARRAY(JSON_MERGE('{"a":1}', '{"a":2}')), '$[0].a', 123) +SELECT JSON_SET(JSON_ARRAY(JSON_MERGE_PRESERVE('{"a":1}', '{"a":2}')), +'$[0].a', 123); +JSON_SET(JSON_ARRAY(JSON_MERGE_PRESERVE('{"a":1}', '{"a":2}')), +'$[0].a', 123) [{"a": 123}] +# +# WL#9692: Deprecate the JSON_MERGE function +# +# Expect a deprecation warning. +SELECT JSON_MERGE('{}', '{}'); +JSON_MERGE('{}', '{}') +{} +Warnings: +Warning 1287 'JSON_MERGE' is deprecated and will be removed in a future release. Please use JSON_MERGE_PRESERVE/JSON_MERGE_PATCH instead +# Expect a deprecation warning when creating the view. +CREATE VIEW v AS SELECT JSON_MERGE('{}', '{}') AS col; +Warnings: +Warning 1287 'JSON_MERGE' is deprecated and will be removed in a future release. Please use JSON_MERGE_PRESERVE/JSON_MERGE_PATCH instead +# The view uses the non-deprecated variant of the function. +SHOW CREATE VIEW v; +View Create View character_set_client collation_connection +v CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v` AS select json_merge_preserve('{}','{}') AS `col` utf8 utf8_general_ci +SELECT * FROM v; +col +{} +DROP VIEW v; diff --git a/mysql-test/suite/json/t/json_agg.test b/mysql-test/suite/json/t/json_agg.test index 84c4b4eb3f1a..ac018dc40f71 100644 --- a/mysql-test/suite/json/t/json_agg.test +++ b/mysql-test/suite/json/t/json_agg.test @@ -55,17 +55,17 @@ EXECUTE p4; deallocate prepare p4; -SELECT JSON_MERGE(JSON_ARRAYAGG(b), '[true, false]') FROM t1; +SELECT JSON_MERGE_PRESERVE(JSON_ARRAYAGG(b), '[true, false]') FROM t1; PREPARE p1 FROM -"SELECT a, JSON_MERGE(JSON_ARRAYAGG(b), '[true, false]') FROM t1 GROUP BY a"; +"SELECT a, JSON_MERGE_PRESERVE(JSON_ARRAYAGG(b), '[true, false]') FROM t1 GROUP BY a"; EXECUTE p1; EXECUTE p1; deallocate prepare p1; PREPARE p4 FROM -"SELECT JSON_MERGE(JSON_ARRAYAGG(b), '[true, false]') FROM t1"; +"SELECT JSON_MERGE_PRESERVE(JSON_ARRAYAGG(b), '[true, false]') FROM t1"; EXECUTE p4; EXECUTE p4; deallocate prepare p4; @@ -118,11 +118,11 @@ EXECUTE p4; EXECUTE p4; deallocate prepare p4; -SELECT a, JSON_MERGE(JSON_OBJECTAGG(k, b), '[true, false]') FROM t1 GROUP BY a; -SELECT JSON_MERGE(JSON_OBJECTAGG(k, b), '[true, false]') FROM t1; +SELECT a, JSON_MERGE_PRESERVE(JSON_OBJECTAGG(k, b), '[true, false]') FROM t1 GROUP BY a; +SELECT JSON_MERGE_PRESERVE(JSON_OBJECTAGG(k, b), '[true, false]') FROM t1; PREPARE p1 FROM -"SELECT a, JSON_MERGE(JSON_OBJECTAGG(k, b), '[true, false]') +"SELECT a, JSON_MERGE_PRESERVE(JSON_OBJECTAGG(k, b), '[true, false]') FROM t1 GROUP BY a"; EXECUTE p1; @@ -131,7 +131,7 @@ deallocate prepare p1; PREPARE p4 FROM -"SELECT JSON_MERGE(JSON_OBJECTAGG(k, b), '[true, false]') FROM t1"; +"SELECT JSON_MERGE_PRESERVE(JSON_OBJECTAGG(k, b), '[true, false]') FROM t1"; EXECUTE p4; EXECUTE p4; deallocate prepare p4; diff --git a/mysql-test/suite/json/t/json_no_table.test b/mysql-test/suite/json/t/json_no_table.test index d170f66bf4f0..1a886e04c0a5 100644 --- a/mysql-test/suite/json/t/json_no_table.test +++ b/mysql-test/suite/json/t/json_no_table.test @@ -493,55 +493,63 @@ SELECT JSON_REMOVE ); --echo # ---------------------------------------------------------------------- ---echo # Test of JSON_MERGE function. +--echo # Test of JSON_MERGE_PRESERVE function. --echo # ---------------------------------------------------------------------- --echo --echo # not enough args --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT -select json_merge(); +SELECT JSON_MERGE_PRESERVE(); --echo --echo # not enough args --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT -select json_merge( '[ 1, 2, 3 ]' ); +SELECT JSON_MERGE_PRESERVE('[ 1, 2, 3 ]'); # null args result in NULL value -select json_merge( null, null ); -select json_merge( null, '[ 1, 2, 3 ]' ); -select json_merge( '[ 1, 2, 3 ]', null ); -select json_merge( null, '[ 1, 2, 3 ]', '[ 4, 5, 6 ]' ); -select json_merge( '[ 1, 2, 3 ]', null, '[ 4, 5, 6 ]' ); -select json_merge( '[ 1, 2, 3 ]', '[ 4, 5, 6 ]', null ); +SELECT JSON_MERGE_PRESERVE(NULL, NULL); +SELECT JSON_MERGE_PRESERVE(NULL, '[ 1, 2, 3 ]'); +SELECT JSON_MERGE_PRESERVE('[ 1, 2, 3 ]', NULL); +SELECT JSON_MERGE_PRESERVE(NULL, '[ 1, 2, 3 ]', '[ 4, 5, 6 ]'); +SELECT JSON_MERGE_PRESERVE('[ 1, 2, 3 ]', NULL, '[ 4, 5, 6 ]'); +SELECT JSON_MERGE_PRESERVE('[ 1, 2, 3 ]', '[ 4, 5, 6 ]', NULL); --error ER_INVALID_JSON_TEXT_IN_PARAM -select json_merge( '[1, 2]', '[3, 4' ); +SELECT JSON_MERGE_PRESERVE('[1, 2]', '[3, 4'); --error ER_INVALID_JSON_TEXT_IN_PARAM -select json_merge( '[1, 2', '[3, 4]' ); - -# good json_merge() expressions -select json_merge( '1', '2' ); -select json_merge( '1', '[2, 3]' ); -select json_merge( '[1, 2]', '3' ); -select json_merge( '1', '{ "a": 2 }' ); -select json_merge( '{ "a": 2 }', '1' ); -select json_merge( '[1, 2]', '[3, 4]' ); -select json_merge( '{ "a": 2 }', '{ "b": 3}' ); -select json_merge( '[1, 2]', '{ "a": 2 }' ); -select json_merge( '{ "a": 2 }', '[1, 2]' ); - -select json_merge( '{"a": 1, "b": 2 }', '{"b": 3, "d": 4 }' ); -select json_merge( '{"a": 1, "b": 2 }', '{"b": [3, 4], "d": 4 }' ); -select json_merge( '{"a": 1, "b": [2, 3] }', '{"b": 4, "d": 4 }' ); -select json_merge( '{"a": 1, "b": 2 }', '{"b": {"e": 7, "f": 8}, "d": 4 }' ); -select json_merge( '{"b": {"e": 7, "f": 8}, "d": 4 }', '{"a": 1, "b": 2 }' ); -select json_merge( '{"a": 1, "b": [2, 9] }', '{"b": [10, 11], "d": 4 }' ); -select json_merge( '{"a": 1, "b": [2, 9] }', '{"b": {"e": 7, "f": 8}, "d": 4 }' ); -select json_merge( '{"b": {"e": 7, "f": 8}, "d": 4 }', '{"a": 1, "b": [2, 9] }' ); -select json_merge( '{"b": {"e": 7, "f": 8}, "d": 4 }', '{ "a": 1, "b": {"e": 20, "g": 21 } }' ); - -select json_merge( '1', '2', '3' ); -select json_merge( '[1, 2 ]', '3', '[4, 5]' ); -select json_merge +SELECT JSON_MERGE_PRESERVE('[1, 2', '[3, 4]'); + +# good json_merge_preserve() expressions +SELECT JSON_MERGE_PRESERVE('1', '2'); +SELECT JSON_MERGE_PRESERVE('1', '[2, 3]'); +SELECT JSON_MERGE_PRESERVE('[1, 2]', '3'); +SELECT JSON_MERGE_PRESERVE('1', '{ "a": 2 }'); +SELECT JSON_MERGE_PRESERVE('{ "a": 2 }', '1'); +SELECT JSON_MERGE_PRESERVE('[1, 2]', '[3, 4]'); +SELECT JSON_MERGE_PRESERVE('{ "a": 2 }', '{ "b": 3}'); +SELECT JSON_MERGE_PRESERVE('[1, 2]', '{ "a": 2 }'); +SELECT JSON_MERGE_PRESERVE('{ "a": 2 }', '[1, 2]'); + +SELECT JSON_MERGE_PRESERVE('{"a": 1, "b": 2 }', + '{"b": 3, "d": 4 }'); +SELECT JSON_MERGE_PRESERVE('{"a": 1, "b": 2 }', + '{"b": [3, 4], "d": 4 }'); +SELECT JSON_MERGE_PRESERVE('{"a": 1, "b": [2, 3] }', '{"b": 4, "d": 4 }'); +SELECT JSON_MERGE_PRESERVE('{"a": 1, "b": 2 }', + '{"b": {"e": 7, "f": 8}, "d": 4 }'); +SELECT JSON_MERGE_PRESERVE('{"b": {"e": 7, "f": 8}, "d": 4 }', + '{"a": 1, "b": 2 }'); +SELECT JSON_MERGE_PRESERVE('{"a": 1, "b": [2, 9] }', + '{"b": [10, 11], "d": 4 }'); +SELECT JSON_MERGE_PRESERVE('{"a": 1, "b": [2, 9] }', + '{"b": {"e": 7, "f": 8}, "d": 4 }'); +SELECT JSON_MERGE_PRESERVE('{"b": {"e": 7, "f": 8}, "d": 4 }', + '{"a": 1, "b": [2, 9] }'); +SELECT JSON_MERGE_PRESERVE('{"b": {"e": 7, "f": 8}, "d": 4 }', + '{ "a": 1, "b": {"e": 20, "g": 21 } }'); + +SELECT JSON_MERGE_PRESERVE('1', '2', '3'); +SELECT JSON_MERGE_PRESERVE('[1, 2 ]', '3', '[4, 5]'); +SELECT JSON_MERGE_PRESERVE ( '{ "a": true, "b": { "c": 3, "d": 4 }, "e": [ 1, 2 ] }', '{ "d": false, "b": { "g": 3, "d": 5 }, "f": [ 1, 2 ] }', @@ -550,28 +558,28 @@ select json_merge # examples from the wl7909 spec # returns [{"a": "foo", "b": [true, {"c": 123}]}, 5, 6] -SELECT JSON_MERGE +SELECT JSON_MERGE_PRESERVE ( '{ "a" : "foo", "b" : [ true, { "c" : 123 } ] }', '[ 5, 6]' ); # returns {"a": "foo", "b": [true, {"c": 123}, false, 34]} -SELECT JSON_MERGE +SELECT JSON_MERGE_PRESERVE ( '{ "a" : "foo", "b" : [ true, { "c" : 123 } ] }', '{ "b": [ false, 34 ] }' ); # returns {"a": "foo", "b": [true, {"c": 123}, "bar"]} -SELECT JSON_MERGE +SELECT JSON_MERGE_PRESERVE ( '{ "a" : "foo", "b" : [ true, { "c" : 123 } ] }', '{ "b": "bar" }' ); # returns {"a": {"b": 1, "c": 1}} -SELECT JSON_MERGE +SELECT JSON_MERGE_PRESERVE ( '{ "a" : { "b" : 1 } }', '{ "a" : { "c" : 1 } }' @@ -2290,4 +2298,17 @@ FROM (SELECT CAST('1' AS JSON) AS j1, CAST('2' AS JSON) AS j2) t; --echo # --echo # Bug#22961128: WRONG RESULT WHEN MANIPULATING RESULT OF JSON_MERGE --echo # -SELECT JSON_SET(JSON_ARRAY(JSON_MERGE('{"a":1}', '{"a":2}')), '$[0].a', 123); +SELECT JSON_SET(JSON_ARRAY(JSON_MERGE_PRESERVE('{"a":1}', '{"a":2}')), + '$[0].a', 123); + +--echo # +--echo # WL#9692: Deprecate the JSON_MERGE function +--echo # +--echo # Expect a deprecation warning. +SELECT JSON_MERGE('{}', '{}'); +--echo # Expect a deprecation warning when creating the view. +CREATE VIEW v AS SELECT JSON_MERGE('{}', '{}') AS col; +--echo # The view uses the non-deprecated variant of the function. +SHOW CREATE VIEW v; +SELECT * FROM v; +DROP VIEW v; diff --git a/mysql-test/suite/rpl/r/rpl_json.result b/mysql-test/suite/rpl/r/rpl_json.result index 292026673b85..a1f4e9cdd18a 100644 --- a/mysql-test/suite/rpl/r/rpl_json.result +++ b/mysql-test/suite/rpl/r/rpl_json.result @@ -762,7 +762,7 @@ i j j2 28 {"type": "Point", "coordinates": [1, 1]} {"type": "Point", "coordinates": [1, 1]} 29 [] [] 30 "base64:type16:yv66vg==" "base64:type16:yv66vg==" -UPDATE t1 SET j2 = JSON_MERGE(j, j); +UPDATE t1 SET j2 = JSON_MERGE_PRESERVE(j, j); SELECT * FROM t1 ORDER BY i; i j j2 0 NULL NULL diff --git a/mysql-test/suite/rpl/t/rpl_json.test b/mysql-test/suite/rpl/t/rpl_json.test index dbb32d13b1ff..3c5ae8e21754 100644 --- a/mysql-test/suite/rpl/t/rpl_json.test +++ b/mysql-test/suite/rpl/t/rpl_json.test @@ -180,7 +180,7 @@ SELECT * FROM t1 ORDER BY i; UPDATE t1 SET j2 = JSON_REPLACE(j, '$[1]', 'abc'); SELECT * FROM t1 ORDER BY i; -UPDATE t1 SET j2 = JSON_MERGE(j, j); +UPDATE t1 SET j2 = JSON_MERGE_PRESERVE(j, j); SELECT * FROM t1 ORDER BY i; UPDATE t1 SET j2 = JSON_SEARCH(j, 'one', 'abc'); diff --git a/rapid/plugin/x/tests/mtr/r/crud_doc_criteria_args.result b/rapid/plugin/x/tests/mtr/r/crud_doc_criteria_args.result index 921f543fe028..3a06a21899a4 100644 --- a/rapid/plugin/x/tests/mtr/r/crud_doc_criteria_args.result +++ b/rapid/plugin/x/tests/mtr/r/crud_doc_criteria_args.result @@ -1145,7 +1145,9 @@ send Mysqlx.Crud.Update { 1 rows affected -Rows matched: 1 Changed: 1 Warnings: 0 +Rows matched: 1 Changed: 1 Warnings: 1 +Warnings generated: +WARNING | 1287 | 'JSON_MERGE' is deprecated and will be removed in a future release. Please use JSON_MERGE_PRESERVE/JSON_MERGE_PATCH instead RUN SELECT * FROM xtest.mycoll doc _id {"_id": "1", "name": "watermelon_replace", "amount": null} 1 diff --git a/rapid/plugin/x/tests/mtr/r/crud_table_criteria_args.result b/rapid/plugin/x/tests/mtr/r/crud_table_criteria_args.result index 8dd39b0d552d..e142b55b3d91 100644 --- a/rapid/plugin/x/tests/mtr/r/crud_table_criteria_args.result +++ b/rapid/plugin/x/tests/mtr/r/crud_table_criteria_args.result @@ -911,7 +911,9 @@ send Mysqlx.Crud.Update { 1 rows affected -Rows matched: 1 Changed: 1 Warnings: 0 +Rows matched: 1 Changed: 1 Warnings: 1 +Warnings generated: +WARNING | 1287 | 'JSON_MERGE' is deprecated and will be removed in a future release. Please use JSON_MERGE_PRESERVE/JSON_MERGE_PATCH instead RUN SELECT * FROM xtest.mytable ORDER BY price id name price info 1 banana null {"color": "yellow", "third": 3, "fourth": "four"} diff --git a/rapid/plugin/x/tests/mtr/r/crud_update_table_json.result b/rapid/plugin/x/tests/mtr/r/crud_update_table_json.result index ee279e447914..cf1fa02f1bdc 100644 --- a/rapid/plugin/x/tests/mtr/r/crud_update_table_json.result +++ b/rapid/plugin/x/tests/mtr/r/crud_update_table_json.result @@ -259,7 +259,9 @@ send Mysqlx.Crud.Update { 1 rows affected -Rows matched: 1 Changed: 1 Warnings: 0 +Rows matched: 1 Changed: 1 Warnings: 1 +Warnings generated: +WARNING | 1287 | 'JSON_MERGE' is deprecated and will be removed in a future release. Please use JSON_MERGE_PRESERVE/JSON_MERGE_PATCH instead RUN SELECT * FROM xtest.xtable xfield {"first": 1, "third": 3, "fourth": "four", "second": "two"} diff --git a/rapid/plugin/x/tests/mtr/r/update_crud_itemmerge_o.result b/rapid/plugin/x/tests/mtr/r/update_crud_itemmerge_o.result index 68c6b55ac27f..a76fbf30b1af 100644 --- a/rapid/plugin/x/tests/mtr/r/update_crud_itemmerge_o.result +++ b/rapid/plugin/x/tests/mtr/r/update_crud_itemmerge_o.result @@ -90,7 +90,9 @@ send Mysqlx.Crud.Update { 1 rows affected -Rows matched: 1 Changed: 1 Warnings: 0 +Rows matched: 1 Changed: 1 Warnings: 1 +Warnings generated: +WARNING | 1287 | 'JSON_MERGE' is deprecated and will be removed in a future release. Please use JSON_MERGE_PRESERVE/JSON_MERGE_PATCH instead RUN select * from maincoll doc _id {"_id": "1", "name": ["Victor", "Vic"], "amount": [4.99], "last_name": ["Otero", "Ote"]} 1 @@ -146,7 +148,9 @@ send Mysqlx.Crud.Update { 1 rows affected -Rows matched: 1 Changed: 1 Warnings: 0 +Rows matched: 1 Changed: 1 Warnings: 1 +Warnings generated: +WARNING | 1287 | 'JSON_MERGE' is deprecated and will be removed in a future release. Please use JSON_MERGE_PRESERVE/JSON_MERGE_PATCH instead RUN select * from maincoll doc _id {"_id": "1", "name": ["Victor", "Vic"], "amount": [4.99], "last_name": ["Otero", "Ote"], "reference": "from Mexico"} 1 @@ -202,7 +206,9 @@ send Mysqlx.Crud.Update { 2 rows affected -Rows matched: 2 Changed: 2 Warnings: 0 +Rows matched: 2 Changed: 2 Warnings: 1 +Warnings generated: +WARNING | 1287 | 'JSON_MERGE' is deprecated and will be removed in a future release. Please use JSON_MERGE_PRESERVE/JSON_MERGE_PATCH instead RUN select * from maincoll doc _id {"_id": "1", "name": ["Victor", "Vic"], "amount": [4.99], "last_name": ["Otero", "Ote"], "reference": "from Mexico"} 1 @@ -258,7 +264,9 @@ send Mysqlx.Crud.Update { 1 rows affected -Rows matched: 1 Changed: 1 Warnings: 0 +Rows matched: 1 Changed: 1 Warnings: 1 +Warnings generated: +WARNING | 1287 | 'JSON_MERGE' is deprecated and will be removed in a future release. Please use JSON_MERGE_PRESERVE/JSON_MERGE_PATCH instead RUN select * from maincoll doc _id {"_id": "1", "name": ["Victor", "Vic", "< with id 2"], "amount": [4.99], "last_name": ["Otero", "Ote"], "reference": "from Mexico", "applied_operator": "< with id 2"} 1 @@ -314,7 +322,9 @@ send Mysqlx.Crud.Update { 2 rows affected -Rows matched: 2 Changed: 2 Warnings: 0 +Rows matched: 2 Changed: 2 Warnings: 1 +Warnings generated: +WARNING | 1287 | 'JSON_MERGE' is deprecated and will be removed in a future release. Please use JSON_MERGE_PRESERVE/JSON_MERGE_PATCH instead RUN select * from maincoll doc _id {"_id": "1", "name": ["Victor", "Vic", "< with id 2", "<= with id 2"], "amount": [4.99], "last_name": ["Otero", "Ote"], "reference": "from Mexico", "applied_operator": ["< with id 2", "<= with id 2"]} 1 @@ -370,7 +380,9 @@ send Mysqlx.Crud.Update { 3 rows affected -Rows matched: 3 Changed: 3 Warnings: 0 +Rows matched: 3 Changed: 3 Warnings: 1 +Warnings generated: +WARNING | 1287 | 'JSON_MERGE' is deprecated and will be removed in a future release. Please use JSON_MERGE_PRESERVE/JSON_MERGE_PATCH instead RUN select * from maincoll doc _id {"_id": "1", "name": ["Victor", "Vic", "< with id 2", "<= with id 2"], "amount": [4.99], "last_name": ["Otero", "Ote"], "reference": "from Mexico", "applied_operator": ["< with id 2", "<= with id 2"]} 1 @@ -426,7 +438,9 @@ send Mysqlx.Crud.Update { 4 rows affected -Rows matched: 4 Changed: 4 Warnings: 0 +Rows matched: 4 Changed: 4 Warnings: 1 +Warnings generated: +WARNING | 1287 | 'JSON_MERGE' is deprecated and will be removed in a future release. Please use JSON_MERGE_PRESERVE/JSON_MERGE_PATCH instead RUN select * from maincoll doc _id {"_id": "1", "name": ["Victor", "Vic", "< with id 2", "<= with id 2"], "amount": [4.99, 24.8752643], "last_name": ["Otero", "Ote", "!= 4"], "reference": "from Mexico", "applied_operator": ["< with id 2", "<= with id 2"]} 1 @@ -482,7 +496,9 @@ send Mysqlx.Crud.Update { 1 rows affected -Rows matched: 1 Changed: 1 Warnings: 0 +Rows matched: 1 Changed: 1 Warnings: 1 +Warnings generated: +WARNING | 1287 | 'JSON_MERGE' is deprecated and will be removed in a future release. Please use JSON_MERGE_PRESERVE/JSON_MERGE_PATCH instead RUN select * from maincoll doc _id {"_id": "1", "name": ["Victor", "Vic", "< with id 2", "<= with id 2"], "amount": [4.99, 24.8752643], "last_name": ["Otero", "Ote", "!= 4"], "reference": "from Mexico", "applied_operator": ["< with id 2", "<= with id 2"]} 1 @@ -538,7 +554,9 @@ send Mysqlx.Crud.Update { 1 rows affected -Rows matched: 1 Changed: 1 Warnings: 0 +Rows matched: 1 Changed: 1 Warnings: 1 +Warnings generated: +WARNING | 1287 | 'JSON_MERGE' is deprecated and will be removed in a future release. Please use JSON_MERGE_PRESERVE/JSON_MERGE_PATCH instead RUN select * from maincoll doc _id {"_id": "1", "name": ["Victor", "Vic", "< with id 2", "<= with id 2"], "amount": [4.99, 24.8752643], "last_name": ["Otero", "Ote", "!= 4"], "reference": "from Mexico", "applied_operator": ["< with id 2", "<= with id 2"]} 1 @@ -606,7 +624,9 @@ send Mysqlx.Crud.Update { 1 rows affected -Rows matched: 1 Changed: 1 Warnings: 0 +Rows matched: 1 Changed: 1 Warnings: 1 +Warnings generated: +WARNING | 1287 | 'JSON_MERGE' is deprecated and will be removed in a future release. Please use JSON_MERGE_PRESERVE/JSON_MERGE_PATCH instead RUN select * from maincoll doc _id {"_id": "1", "name": ["Victor", "Vic", "< with id 2", "<= with id 2"], "amount": [4.99, 24.8752643], "last_name": ["Otero", "Ote", "!= 4"], "reference": "from Mexico", "applied_operator": ["< with id 2", "<= with id 2"]} 1 @@ -674,7 +694,9 @@ send Mysqlx.Crud.Update { 2 rows affected -Rows matched: 2 Changed: 2 Warnings: 0 +Rows matched: 2 Changed: 2 Warnings: 1 +Warnings generated: +WARNING | 1287 | 'JSON_MERGE' is deprecated and will be removed in a future release. Please use JSON_MERGE_PRESERVE/JSON_MERGE_PATCH instead RUN select * from maincoll doc _id {"_id": "1", "name": ["Victor", "Vic", "< with id 2", "<= with id 2"], "amount": [4.99, 24.8752643, 9876.543], "last_name": ["Otero", "Ote", "!= 4"], "reference": "from Mexico", "applied_operator": ["< with id 2", "<= with id 2"]} 1 @@ -730,7 +752,9 @@ send Mysqlx.Crud.Update { 1 rows affected -Rows matched: 1 Changed: 1 Warnings: 0 +Rows matched: 1 Changed: 1 Warnings: 1 +Warnings generated: +WARNING | 1287 | 'JSON_MERGE' is deprecated and will be removed in a future release. Please use JSON_MERGE_PRESERVE/JSON_MERGE_PATCH instead RUN select * from maincoll doc _id {"_id": "1", "name": ["Victor", "Vic", "< with id 2", "<= with id 2", 199896], "amount": [4.99, 24.8752643, 9876.543], "last_name": ["Otero", "Ote", "!= 4"], "reference": "from Mexico", "applied_operator": ["< with id 2", "<= with id 2"]} 1 @@ -789,7 +813,9 @@ send Mysqlx.Crud.Update { 1 rows affected -Rows matched: 1 Changed: 1 Warnings: 0 +Rows matched: 1 Changed: 1 Warnings: 1 +Warnings generated: +WARNING | 1287 | 'JSON_MERGE' is deprecated and will be removed in a future release. Please use JSON_MERGE_PRESERVE/JSON_MERGE_PATCH instead RUN select * from maincoll doc _id {"_id": "1", "name": ["Victor", "Vic", "< with id 2", "<= with id 2", 199896], "amount": [4.99, 24.8752643, 9876.543, 452.253], "last_name": ["Otero", "Ote", "!= 4"], "reference": "from Mexico", "applied_operator": ["< with id 2", "<= with id 2"]} 1 @@ -856,7 +882,9 @@ send Mysqlx.Crud.Update { 1 rows affected -Rows matched: 1 Changed: 1 Warnings: 0 +Rows matched: 1 Changed: 1 Warnings: 1 +Warnings generated: +WARNING | 1287 | 'JSON_MERGE' is deprecated and will be removed in a future release. Please use JSON_MERGE_PRESERVE/JSON_MERGE_PATCH instead RUN COMMIT 0 rows affected @@ -967,7 +995,7 @@ send Mysqlx.Crud.Update { } } -Got expected error: Invalid JSON text in argument 2 to function json_merge: "Missing a comma or '}' after an object member." at position 26. (code 3141) +Got expected error: Invalid JSON text in argument 2 to function json_merge_preserve: "Missing a comma or '}' after an object member." at position 26. (code 3141) Update with item_merge with } missing at the start send Mysqlx.Crud.Update { collection { @@ -1013,7 +1041,7 @@ send Mysqlx.Crud.Update { } } -Got expected error: Invalid JSON text in argument 2 to function json_merge: "The document root must not follow by other values." at position 11. (code 3141) +Got expected error: Invalid JSON text in argument 2 to function json_merge_preserve: "The document root must not follow by other values." at position 11. (code 3141) Update with missing comma send Mysqlx.Crud.Update { collection { @@ -1059,7 +1087,7 @@ send Mysqlx.Crud.Update { } } -Got expected error: Invalid JSON text in argument 2 to function json_merge: "Missing a comma or '}' after an object member." at position 19. (code 3141) +Got expected error: Invalid JSON text in argument 2 to function json_merge_preserve: "Missing a comma or '}' after an object member." at position 19. (code 3141) ================================================================================ CLEAN UP ================================================================================ diff --git a/rapid/plugin/x/tests/mtr/r/update_doc.result b/rapid/plugin/x/tests/mtr/r/update_doc.result index 7a0acc74f9e5..cc0f39874775 100644 --- a/rapid/plugin/x/tests/mtr/r/update_doc.result +++ b/rapid/plugin/x/tests/mtr/r/update_doc.result @@ -1369,7 +1369,9 @@ send Mysqlx.Crud.Update { 1 rows affected -Rows matched: 1 Changed: 1 Warnings: 0 +Rows matched: 1 Changed: 1 Warnings: 1 +Warnings generated: +WARNING | 1287 | 'JSON_MERGE' is deprecated and will be removed in a future release. Please use JSON_MERGE_PRESERVE/JSON_MERGE_PATCH instead Doc: Set item and merge with another document send Mysqlx.Crud.Update { collection { @@ -1434,7 +1436,9 @@ send Mysqlx.Crud.Update { 1 rows affected -Rows matched: 1 Changed: 1 Warnings: 0 +Rows matched: 1 Changed: 1 Warnings: 1 +Warnings generated: +WARNING | 1287 | 'JSON_MERGE' is deprecated and will be removed in a future release. Please use JSON_MERGE_PRESERVE/JSON_MERGE_PATCH instead Doc: Merge with another document and set item send Mysqlx.Crud.Update { collection { @@ -1499,7 +1503,9 @@ send Mysqlx.Crud.Update { 1 rows affected -Rows matched: 1 Changed: 1 Warnings: 0 +Rows matched: 1 Changed: 1 Warnings: 1 +Warnings generated: +WARNING | 1287 | 'JSON_MERGE' is deprecated and will be removed in a future release. Please use JSON_MERGE_PRESERVE/JSON_MERGE_PATCH instead Doc: merge with NULL send Mysqlx.Crud.Update { collection { diff --git a/sql/item_create.cc b/sql/item_create.cc index 1c3f13fbe43e..90ae9e9753ad 100644 --- a/sql/item_create.cc +++ b/sql/item_create.cc @@ -2694,18 +2694,42 @@ class Create_func_issimple_deprecated : public Create_func_issimple Create_func_issimple_deprecated Create_func_issimple_deprecated::s_singleton; -class Create_func_json_merge : public Create_native_func +class Create_func_json_merge_preserve : public Create_native_func { public: virtual Item *create_native(THD *thd, LEX_STRING name, PT_item_list *item_list); - static Create_func_json_merge s_singleton; + static Create_func_json_merge_preserve s_singleton; protected: - Create_func_json_merge() {} - virtual ~Create_func_json_merge() {} + Create_func_json_merge_preserve() {} + virtual ~Create_func_json_merge_preserve() {} +}; +Create_func_json_merge_preserve Create_func_json_merge_preserve::s_singleton; + +class Create_func_json_merge : public Create_func_json_merge_preserve +{ +public: + static Create_func_json_merge s_singleton; + virtual Item *create_native(THD *thd, LEX_STRING name, + PT_item_list *item_list) + { + Item *func= Create_func_json_merge_preserve::create_native(thd, name, + item_list); + /* + JSON_MERGE is a deprecated alias for JSON_MERGE_PRESERVE. Warn + the users and recommend that they specify explicitly what kind + of merge operation they want. + */ + if (func != NULL) + push_deprecated_warn(thd, "JSON_MERGE", + "JSON_MERGE_PRESERVE/JSON_MERGE_PATCH"); + + return func; + } }; +Create_func_json_merge Create_func_json_merge::s_singleton; class Create_func_json_quote : public Create_native_func { @@ -6151,11 +6175,9 @@ Create_func_validate::create(THD *thd, Item *arg1) } -Create_func_json_merge Create_func_json_merge::s_singleton; - Item* -Create_func_json_merge::create_native(THD *thd, LEX_STRING name, - PT_item_list *item_list) +Create_func_json_merge_preserve::create_native(THD *thd, LEX_STRING name, + PT_item_list *item_list) { Item* func= NULL; int arg_count= 0; @@ -6171,7 +6193,8 @@ Create_func_json_merge::create_native(THD *thd, LEX_STRING name, } else { - func= new (thd->mem_root) Item_func_json_merge(thd, POS(), item_list); + func= new (thd->mem_root) Item_func_json_merge_preserve(thd, POS(), + item_list); } return func; @@ -7562,6 +7585,7 @@ static Native_func_registry func_array[] = { { C_STRING_WITH_LEN("JSON_ARRAY") }, BUILDER(Create_func_json_array)}, { { C_STRING_WITH_LEN("JSON_REMOVE") }, BUILDER(Create_func_json_remove)}, { { C_STRING_WITH_LEN("JSON_MERGE") }, BUILDER(Create_func_json_merge)}, + { { C_STRING_WITH_LEN("JSON_MERGE_PRESERVE") }, BUILDER(Create_func_json_merge_preserve)}, { { C_STRING_WITH_LEN("JSON_QUOTE") }, BUILDER(Create_func_json_quote)}, { { C_STRING_WITH_LEN("JSON_STORAGE_SIZE") }, BUILDER(Create_func_json_storage_size)}, { { C_STRING_WITH_LEN("JSON_UNQUOTE") }, BUILDER(Create_func_json_unquote)}, diff --git a/sql/item_json_func.cc b/sql/item_json_func.cc index 8fe90c99852f..9f3bf9cceebc 100644 --- a/sql/item_json_func.cc +++ b/sql/item_json_func.cc @@ -3301,7 +3301,7 @@ bool Item_func_json_remove::val_json(Json_wrapper *wr) } -bool Item_func_json_merge::val_json(Json_wrapper *wr) +bool Item_func_json_merge_preserve::val_json(Json_wrapper *wr) { DBUG_ASSERT(fixed == 1); diff --git a/sql/item_json_func.h b/sql/item_json_func.h index 0a441842bfa7..9e205359baeb 100644 --- a/sql/item_json_func.h +++ b/sql/item_json_func.h @@ -723,19 +723,16 @@ class Item_func_json_remove :public Item_json_func }; /** - Represents the JSON function JSON_MERGE() + Represents the JSON function JSON_MERGE_PRESERVE. */ -class Item_func_json_merge :public Item_json_func +class Item_func_json_merge_preserve :public Item_json_func { public: - Item_func_json_merge(THD *thd, const POS &pos, PT_item_list *a) + Item_func_json_merge_preserve(THD *thd, const POS &pos, PT_item_list *a) : Item_json_func(thd, pos, a) {} - const char *func_name() const - { - return "json_merge"; - } + const char *func_name() const { return "json_merge_preserve"; } bool val_json(Json_wrapper *wr); }; From f18d80b79d2fa5ebd8778d898ae79530fde28835 Mon Sep 17 00:00:00 2001 From: Knut Anders Hatlen Date: Thu, 22 Jun 2017 17:20:29 +0200 Subject: [PATCH 0271/1221] WL#11065: Backport JSON functions from 8.0 to 5.7 (part 6) WL#9692: Add JSON_MERGE_PATCH Add a new function called JSON_MERGE_PATCH, which implements the JSON Merge Patch algorithm described in RFC 7396. Change-Id: I3d17e3ccade97a722be492f3aa6833da502353d5 --- mysql-test/suite/json/inc/json_functions.inc | 44 ++++++ .../suite/json/r/json_functions_innodb.result | 65 +++++++++ .../suite/json/r/json_functions_ndb.result | 65 +++++++++ mysql-test/suite/rpl/r/rpl_json.result | 128 ++++++++++++++++++ mysql-test/suite/rpl/t/rpl_json.test | 96 +++++++++++++ sql/item_create.cc | 19 +++ sql/item_json_func.cc | 97 +++++++++++++ sql/item_json_func.h | 15 ++ sql/json_dom.cc | 74 ++++++++++ sql/json_dom.h | 33 +++++ 10 files changed, 636 insertions(+) diff --git a/mysql-test/suite/json/inc/json_functions.inc b/mysql-test/suite/json/inc/json_functions.inc index 8fb3108f8568..e87b9d82ea5f 100644 --- a/mysql-test/suite/json/inc/json_functions.inc +++ b/mysql-test/suite/json/inc/json_functions.inc @@ -3569,6 +3569,50 @@ UPDATE t1, t2 SET t1.j = '[123]', t2.j = JSON_SET(t2.j, '$.b', 99); --eval $dump_t2 DROP TABLE t1, t2; +--echo # +--echo # WL#9692: Add JSON_MERGE_PATCH +--echo # + +CREATE TABLE merge_t( +id INT PRIMARY KEY AUTO_INCREMENT, +target VARCHAR(100), patch VARCHAR(100) +); +INSERT INTO merge_t(target, patch) VALUES +('{"a":"b"}', '{"a":"c"}'), +('{"a":"b"}', '{"b":"c"}'), +('{"a":"b"}', '{"a":null}'), +('{"a":"b", "b":"c"}', '{"a":null}'), +('{"a":["b"]}', '{"a":"c"}'), +('{"a":"c"}', '{"a":["b"]}'), +('{"a": {"b":"c"}}', '{"a": {"b":"d", "c":null}}'), +('{"a":[{"b":"c"}]}', '{"a": [1]}'), +('["a","b"]', '["c","d"]'), +('{"a":"b"}', '["c"]'), +('{"a":"foo"}', 'null'), +('{"a":"foo"}', '"bar"'), +('{"e":null}', '{"a":1}'), +('[1,2]', '{"a":"b", "c":null}'), +('{}', '{"a":{"bb":{"ccc":null}}}'), +(NULL, '{}'), +('{}', NULL); +SELECT id, target, patch, + JSON_MERGE_PATCH(target, patch) AS merged, + JSON_EXTRACT(JSON_MERGE_PATCH(target, patch), '$.a') AS a +FROM merge_t ORDER BY id; +DROP TABLE merge_t; + +SELECT JSON_MERGE_PATCH('{"a":"b"}', NULL, '{"c":"d"}'); +SELECT JSON_MERGE_PATCH(NULL, '[1,2,3]'); +SELECT JSON_MERGE_PATCH('{"a":"b"}', NULL, '[1,2,3]', '{"c":null,"d":"e"}'); + +--error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT +SELECT JSON_MERGE_PATCH(); +--error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT +SELECT JSON_MERGE_PATCH('{}'); +--error ER_INVALID_JSON_TEXT_IN_PARAM +SELECT JSON_MERGE_PATCH('{', '[1,2,3]'); +--error ER_INVALID_JSON_TEXT_IN_PARAM +SELECT JSON_MERGE_PATCH('{"a":"b"}', '[1,'); # Local Variables: # mode: sql diff --git a/mysql-test/suite/json/r/json_functions_innodb.result b/mysql-test/suite/json/r/json_functions_innodb.result index 00f02a370320..566d144f45d2 100644 --- a/mysql-test/suite/json/r/json_functions_innodb.result +++ b/mysql-test/suite/json/r/json_functions_innodb.result @@ -9990,3 +9990,68 @@ id j x ss 1 {"b": 99} 3 13 2 {"b": 99} 4 13 DROP TABLE t1, t2; +# +# WL#9692: Add JSON_MERGE_PATCH +# +CREATE TABLE merge_t( +id INT PRIMARY KEY AUTO_INCREMENT, +target VARCHAR(100), patch VARCHAR(100) +); +INSERT INTO merge_t(target, patch) VALUES +('{"a":"b"}', '{"a":"c"}'), +('{"a":"b"}', '{"b":"c"}'), +('{"a":"b"}', '{"a":null}'), +('{"a":"b", "b":"c"}', '{"a":null}'), +('{"a":["b"]}', '{"a":"c"}'), +('{"a":"c"}', '{"a":["b"]}'), +('{"a": {"b":"c"}}', '{"a": {"b":"d", "c":null}}'), +('{"a":[{"b":"c"}]}', '{"a": [1]}'), +('["a","b"]', '["c","d"]'), +('{"a":"b"}', '["c"]'), +('{"a":"foo"}', 'null'), +('{"a":"foo"}', '"bar"'), +('{"e":null}', '{"a":1}'), +('[1,2]', '{"a":"b", "c":null}'), +('{}', '{"a":{"bb":{"ccc":null}}}'), +(NULL, '{}'), +('{}', NULL); +SELECT id, target, patch, +JSON_MERGE_PATCH(target, patch) AS merged, +JSON_EXTRACT(JSON_MERGE_PATCH(target, patch), '$.a') AS a +FROM merge_t ORDER BY id; +id target patch merged a +1 {"a":"b"} {"a":"c"} {"a": "c"} "c" +2 {"a":"b"} {"b":"c"} {"a": "b", "b": "c"} "b" +3 {"a":"b"} {"a":null} {} NULL +4 {"a":"b", "b":"c"} {"a":null} {"b": "c"} NULL +5 {"a":["b"]} {"a":"c"} {"a": "c"} "c" +6 {"a":"c"} {"a":["b"]} {"a": ["b"]} ["b"] +7 {"a": {"b":"c"}} {"a": {"b":"d", "c":null}} {"a": {"b": "d"}} {"b": "d"} +8 {"a":[{"b":"c"}]} {"a": [1]} {"a": [1]} [1] +9 ["a","b"] ["c","d"] ["c", "d"] NULL +10 {"a":"b"} ["c"] ["c"] NULL +11 {"a":"foo"} null null NULL +12 {"a":"foo"} "bar" "bar" NULL +13 {"e":null} {"a":1} {"a": 1, "e": null} 1 +14 [1,2] {"a":"b", "c":null} {"a": "b"} "b" +15 {} {"a":{"bb":{"ccc":null}}} {"a": {"bb": {}}} {"bb": {}} +16 NULL {} NULL NULL +17 {} NULL NULL NULL +DROP TABLE merge_t; +SELECT JSON_MERGE_PATCH('{"a":"b"}', NULL, '{"c":"d"}'); +JSON_MERGE_PATCH('{"a":"b"}', NULL, '{"c":"d"}') +NULL +SELECT JSON_MERGE_PATCH(NULL, '[1,2,3]'); +JSON_MERGE_PATCH(NULL, '[1,2,3]') +[1, 2, 3] +SELECT JSON_MERGE_PATCH('{"a":"b"}', NULL, '[1,2,3]', '{"c":null,"d":"e"}'); +JSON_MERGE_PATCH('{"a":"b"}', NULL, '[1,2,3]', '{"c":null,"d":"e"}') +{"d": "e"} +SELECT JSON_MERGE_PATCH(); +ERROR 42000: Incorrect parameter count in the call to native function 'JSON_MERGE_PATCH' +SELECT JSON_MERGE_PATCH('{}'); +ERROR 42000: Incorrect parameter count in the call to native function 'JSON_MERGE_PATCH' +SELECT JSON_MERGE_PATCH('{', '[1,2,3]'); +ERROR 22032: Invalid JSON text in argument 1 to function json_merge_patch: "Missing a name for object member." at position 1. +SELECT JSON_MERGE_PATCH('{"a":"b"}', '[1,'); +ERROR 22032: Invalid JSON text in argument 2 to function json_merge_patch: "Invalid value." at position 3. diff --git a/mysql-test/suite/json/r/json_functions_ndb.result b/mysql-test/suite/json/r/json_functions_ndb.result index 0bce3f25505e..a68a89cf8e68 100644 --- a/mysql-test/suite/json/r/json_functions_ndb.result +++ b/mysql-test/suite/json/r/json_functions_ndb.result @@ -10153,3 +10153,68 @@ id j x ss 1 {"b": 99} 3 13 2 {"b": 99} 4 13 DROP TABLE t1, t2; +# +# WL#9692: Add JSON_MERGE_PATCH +# +CREATE TABLE merge_t( +id INT PRIMARY KEY AUTO_INCREMENT, +target VARCHAR(100), patch VARCHAR(100) +); +INSERT INTO merge_t(target, patch) VALUES +('{"a":"b"}', '{"a":"c"}'), +('{"a":"b"}', '{"b":"c"}'), +('{"a":"b"}', '{"a":null}'), +('{"a":"b", "b":"c"}', '{"a":null}'), +('{"a":["b"]}', '{"a":"c"}'), +('{"a":"c"}', '{"a":["b"]}'), +('{"a": {"b":"c"}}', '{"a": {"b":"d", "c":null}}'), +('{"a":[{"b":"c"}]}', '{"a": [1]}'), +('["a","b"]', '["c","d"]'), +('{"a":"b"}', '["c"]'), +('{"a":"foo"}', 'null'), +('{"a":"foo"}', '"bar"'), +('{"e":null}', '{"a":1}'), +('[1,2]', '{"a":"b", "c":null}'), +('{}', '{"a":{"bb":{"ccc":null}}}'), +(NULL, '{}'), +('{}', NULL); +SELECT id, target, patch, +JSON_MERGE_PATCH(target, patch) AS merged, +JSON_EXTRACT(JSON_MERGE_PATCH(target, patch), '$.a') AS a +FROM merge_t ORDER BY id; +id target patch merged a +1 {"a":"b"} {"a":"c"} {"a": "c"} "c" +2 {"a":"b"} {"b":"c"} {"a": "b", "b": "c"} "b" +3 {"a":"b"} {"a":null} {} NULL +4 {"a":"b", "b":"c"} {"a":null} {"b": "c"} NULL +5 {"a":["b"]} {"a":"c"} {"a": "c"} "c" +6 {"a":"c"} {"a":["b"]} {"a": ["b"]} ["b"] +7 {"a": {"b":"c"}} {"a": {"b":"d", "c":null}} {"a": {"b": "d"}} {"b": "d"} +8 {"a":[{"b":"c"}]} {"a": [1]} {"a": [1]} [1] +9 ["a","b"] ["c","d"] ["c", "d"] NULL +10 {"a":"b"} ["c"] ["c"] NULL +11 {"a":"foo"} null null NULL +12 {"a":"foo"} "bar" "bar" NULL +13 {"e":null} {"a":1} {"a": 1, "e": null} 1 +14 [1,2] {"a":"b", "c":null} {"a": "b"} "b" +15 {} {"a":{"bb":{"ccc":null}}} {"a": {"bb": {}}} {"bb": {}} +16 NULL {} NULL NULL +17 {} NULL NULL NULL +DROP TABLE merge_t; +SELECT JSON_MERGE_PATCH('{"a":"b"}', NULL, '{"c":"d"}'); +JSON_MERGE_PATCH('{"a":"b"}', NULL, '{"c":"d"}') +NULL +SELECT JSON_MERGE_PATCH(NULL, '[1,2,3]'); +JSON_MERGE_PATCH(NULL, '[1,2,3]') +[1, 2, 3] +SELECT JSON_MERGE_PATCH('{"a":"b"}', NULL, '[1,2,3]', '{"c":null,"d":"e"}'); +JSON_MERGE_PATCH('{"a":"b"}', NULL, '[1,2,3]', '{"c":null,"d":"e"}') +{"d": "e"} +SELECT JSON_MERGE_PATCH(); +ERROR 42000: Incorrect parameter count in the call to native function 'JSON_MERGE_PATCH' +SELECT JSON_MERGE_PATCH('{}'); +ERROR 42000: Incorrect parameter count in the call to native function 'JSON_MERGE_PATCH' +SELECT JSON_MERGE_PATCH('{', '[1,2,3]'); +ERROR 22032: Invalid JSON text in argument 1 to function json_merge_patch: "Missing a name for object member." at position 1. +SELECT JSON_MERGE_PATCH('{"a":"b"}', '[1,'); +ERROR 22032: Invalid JSON text in argument 2 to function json_merge_patch: "Invalid value." at position 3. diff --git a/mysql-test/suite/rpl/r/rpl_json.result b/mysql-test/suite/rpl/r/rpl_json.result index a1f4e9cdd18a..ff0a589587fb 100644 --- a/mysql-test/suite/rpl/r/rpl_json.result +++ b/mysql-test/suite/rpl/r/rpl_json.result @@ -762,6 +762,40 @@ i j j2 28 {"type": "Point", "coordinates": [1, 1]} {"type": "Point", "coordinates": [1, 1]} 29 [] [] 30 "base64:type16:yv66vg==" "base64:type16:yv66vg==" +UPDATE t1 SET j2 = JSON_MERGE_PATCH(j, '{"a": "patched", "c": null}'); +SELECT * FROM t1 ORDER BY i; +i j j2 +0 NULL NULL +1 {"a": 2} {"a": "patched"} +2 [1, 2] {"a": "patched"} +3 {"a": "b", "c": "d", "ab": "abc", "bc": ["x", "y"]} {"a": "patched", "ab": "abc", "bc": ["x", "y"]} +4 ["here", ["I", "am"], "!!!"] {"a": "patched"} +5 "scalar string" {"a": "patched"} +6 true {"a": "patched"} +7 false {"a": "patched"} +8 null {"a": "patched"} +9 -1 {"a": "patched"} +10 1 {"a": "patched"} +11 32767 {"a": "patched"} +12 32768 {"a": "patched"} +13 -32768 {"a": "patched"} +14 -32769 {"a": "patched"} +15 2147483647 {"a": "patched"} +16 2147483648 {"a": "patched"} +17 -2147483648 {"a": "patched"} +18 -2147483649 {"a": "patched"} +19 18446744073709551615 {"a": "patched"} +20 1.8446744073709552e19 {"a": "patched"} +21 3.14 {"a": "patched"} +22 {} {"a": "patched"} +23 [] {"a": "patched"} +24 "2015-01-15 23:24:25.000000" {"a": "patched"} +25 "23:24:25.000000" {"a": "patched"} +26 "2015-01-15" {"a": "patched"} +27 "2015-01-15 23:24:25.000000" {"a": "patched"} +28 {"type": "Point", "coordinates": [1, 1]} {"a": "patched", "type": "Point", "coordinates": [1, 1]} +29 [] {"a": "patched"} +30 "base64:type16:yv66vg==" {"a": "patched"} UPDATE t1 SET j2 = JSON_MERGE_PRESERVE(j, j); SELECT * FROM t1 ORDER BY i; i j j2 @@ -1636,4 +1670,98 @@ include/diff_tables.inc [master:json_data, slave:json_data] DROP TABLE data; DROP TABLE json_data; include/sync_slave_sql_with_master.inc +# +# WL#9692: ADD JSON_MERGE_PATCH, RENAME JSON_MERGE TO JSON_MERGE_PRESERVE +# +[Connection Master] +# Create table with JSON data +CREATE TABLE json_data(pk INT PRIMARY KEY AUTO_INCREMENT, +id INT, +jd JSON, +td TEXT, +gcol VARCHAR(30) AS (JSON_EXTRACT(JSON_MERGE_PATCH(jd,JSON_OBJECT(id,td)), '$.a')) VIRTUAL, +KEY(gcol)); +# Insert data into the table +INSERT INTO json_data(id,jd,td) VALUES(10,'["a","b","c","d","e"]', "pink"), +(20,'{"a":[1,2,6,7,9]}', "floyd"), +(30,'{"a":["ears","nose","eyes"]}', "megadeth"), +(40,'[null,null,"null",0,1]', "def"), +(50,'{"a":null}', "leppard"); +include/sync_slave_sql_with_master.inc +[Connection Slave] +# Check whether table was created on the slave +SELECT * FROM json_data; +pk id jd td gcol +1 10 ["a", "b", "c", "d", "e"] pink NULL +2 20 {"a": [1, 2, 6, 7, 9]} floyd [1, 2, 6, 7, 9] +3 30 {"a": ["ears", "nose", "eyes"]} megadeth ["ears", "nose", "eyes"] +4 40 [null, null, "null", 0, 1] def NULL +5 50 {"a": null} leppard null +include/diff_tables.inc [master:json_data, slave:json_data] +Warnings: +Warning 1235 This version of MySQL doesn't yet support 'sorting of non-scalar JSON values' +Warnings: +Warning 1235 This version of MySQL doesn't yet support 'sorting of non-scalar JSON values' +[Connection Master] +# Create tables using the JSON_MERGE_PATCH function +CREATE TABLE json_data2(field1 JSON); +INSERT INTO json_data2 +SELECT JSON_MERGE_PATCH(JSON_ARRAYAGG(jd), JSON_OBJECTAGG(pk, jd)) +FROM json_data; +CREATE TABLE json_data3(field1 JSON); +INSERT INTO json_data3 +SELECT JSON_MERGE_PATCH(JSON_OBJECTAGG(id, gcol), JSON_ARRAYAGG(td)) +FROM json_data; +CREATE TABLE json_data4(field1 JSON); +INSERT INTO json_data4 +SELECT JSON_MERGE_PATCH(JSON_OBJECT(id, jd), JSON_ARRAY(gcol)) +FROM json_data; +include/sync_slave_sql_with_master.inc +[Connection Slave] +# Check whether the tables were created on the slave +SELECT * FROM json_data2; +field1 +{"1": ["a", "b", "c", "d", "e"], "2": {"a": [1, 2, 6, 7, 9]}, "3": {"a": ["ears", "nose", "eyes"]}, "4": [null, null, "null", 0, 1], "5": {}} +SELECT * FROM json_data3; +field1 +["pink", "floyd", "megadeth", "def", "leppard"] +SELECT * FROM json_data4; +field1 +[null] +["[1, 2, 6, 7, 9]"] +["[\"ears\", \"nose\", \"eyes\"]"] +[null] +["null"] +SELECT JSON_MERGE_PATCH(t1.field1, t2.field1) FROM json_data2 as t1, json_data3 as t2; +JSON_MERGE_PATCH(t1.field1, t2.field1) +["pink", "floyd", "megadeth", "def", "leppard"] +SELECT JSON_MERGE_PRESERVE(t1.field1, t2.field1) FROM json_data3 as t1, json_data4 as t2; +JSON_MERGE_PRESERVE(t1.field1, t2.field1) +["pink", "floyd", "megadeth", "def", "leppard", null] +["pink", "floyd", "megadeth", "def", "leppard", "[1, 2, 6, 7, 9]"] +["pink", "floyd", "megadeth", "def", "leppard", "[\"ears\", \"nose\", \"eyes\"]"] +["pink", "floyd", "megadeth", "def", "leppard", null] +["pink", "floyd", "megadeth", "def", "leppard", "null"] +[Connection Master] +# Update values in the table +UPDATE json_data SET jd = JSON_SET(jd, '$[1]', JSON_MERGE_PATCH(JSON_ARRAY(pk),JSON_ARRAY(td))) WHERE id IN (10,40); +include/sync_slave_sql_with_master.inc +[Connection Slave] +include/diff_tables.inc [master:json_data, slave:json_data] +Warnings: +Warning 1235 This version of MySQL doesn't yet support 'sorting of non-scalar JSON values' +Warnings: +Warning 1235 This version of MySQL doesn't yet support 'sorting of non-scalar JSON values' +# Check whether values were updated +SELECT * FROM json_data; +pk id jd td gcol +1 10 ["a", ["pink"], "c", "d", "e"] pink NULL +2 20 {"a": [1, 2, 6, 7, 9]} floyd [1, 2, 6, 7, 9] +3 30 {"a": ["ears", "nose", "eyes"]} megadeth ["ears", "nose", "eyes"] +4 40 [null, ["def"], "null", 0, 1] def NULL +5 50 {"a": null} leppard null +[Connection Master] +# Clean up +DROP TABLE json_data, json_data2, json_data3, json_data4; +include/sync_slave_sql_with_master.inc include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_json.test b/mysql-test/suite/rpl/t/rpl_json.test index 3c5ae8e21754..11a80cd0dcde 100644 --- a/mysql-test/suite/rpl/t/rpl_json.test +++ b/mysql-test/suite/rpl/t/rpl_json.test @@ -180,6 +180,9 @@ SELECT * FROM t1 ORDER BY i; UPDATE t1 SET j2 = JSON_REPLACE(j, '$[1]', 'abc'); SELECT * FROM t1 ORDER BY i; +UPDATE t1 SET j2 = JSON_MERGE_PATCH(j, '{"a": "patched", "c": null}'); +SELECT * FROM t1 ORDER BY i; + UPDATE t1 SET j2 = JSON_MERGE_PRESERVE(j, j); SELECT * FROM t1 ORDER BY i; @@ -394,6 +397,99 @@ SELECT * FROM json_data; DROP TABLE data; DROP TABLE json_data; +--source include/sync_slave_sql_with_master.inc + +--echo # +--echo # WL#9692: ADD JSON_MERGE_PATCH, RENAME JSON_MERGE TO JSON_MERGE_PRESERVE +--echo # + +--echo [Connection Master] +--connection master + +--echo # Create table with JSON data + +CREATE TABLE json_data(pk INT PRIMARY KEY AUTO_INCREMENT, + id INT, + jd JSON, + td TEXT, + gcol VARCHAR(30) AS (JSON_EXTRACT(JSON_MERGE_PATCH(jd,JSON_OBJECT(id,td)), '$.a')) VIRTUAL, + KEY(gcol)); + +--echo # Insert data into the table + +INSERT INTO json_data(id,jd,td) VALUES(10,'["a","b","c","d","e"]', "pink"), + (20,'{"a":[1,2,6,7,9]}', "floyd"), + (30,'{"a":["ears","nose","eyes"]}', "megadeth"), + (40,'[null,null,"null",0,1]', "def"), + (50,'{"a":null}', "leppard"); + +--source include/sync_slave_sql_with_master.inc +--echo [Connection Slave] + +--echo # Check whether table was created on the slave + +SELECT * FROM json_data; + +--let $diff_tables = master:json_data, slave:json_data +--source include/diff_tables.inc + +--echo [Connection Master] +--connection master + +--echo # Create tables using the JSON_MERGE_PATCH function + +CREATE TABLE json_data2(field1 JSON); +INSERT INTO json_data2 +SELECT JSON_MERGE_PATCH(JSON_ARRAYAGG(jd), JSON_OBJECTAGG(pk, jd)) +FROM json_data; + +CREATE TABLE json_data3(field1 JSON); +INSERT INTO json_data3 +SELECT JSON_MERGE_PATCH(JSON_OBJECTAGG(id, gcol), JSON_ARRAYAGG(td)) +FROM json_data; + +CREATE TABLE json_data4(field1 JSON); +INSERT INTO json_data4 +SELECT JSON_MERGE_PATCH(JSON_OBJECT(id, jd), JSON_ARRAY(gcol)) +FROM json_data; + +--source include/sync_slave_sql_with_master.inc +--echo [Connection Slave] + +--echo # Check whether the tables were created on the slave + +SELECT * FROM json_data2; +SELECT * FROM json_data3; +SELECT * FROM json_data4; + +SELECT JSON_MERGE_PATCH(t1.field1, t2.field1) FROM json_data2 as t1, json_data3 as t2; + +SELECT JSON_MERGE_PRESERVE(t1.field1, t2.field1) FROM json_data3 as t1, json_data4 as t2; + +--echo [Connection Master] +--connection master + +--echo # Update values in the table + +UPDATE json_data SET jd = JSON_SET(jd, '$[1]', JSON_MERGE_PATCH(JSON_ARRAY(pk),JSON_ARRAY(td))) WHERE id IN (10,40); + +--source include/sync_slave_sql_with_master.inc +--echo [Connection Slave] + +--let $diff_tables = master:json_data, slave:json_data +--source include/diff_tables.inc + +--echo # Check whether values were updated + +SELECT * FROM json_data; + +--echo [Connection Master] +--connection master + +--echo # Clean up + +DROP TABLE json_data, json_data2, json_data3, json_data4; + --source include/sync_slave_sql_with_master.inc --source include/rpl_end.inc diff --git a/sql/item_create.cc b/sql/item_create.cc index 90ae9e9753ad..dbba41266be1 100644 --- a/sql/item_create.cc +++ b/sql/item_create.cc @@ -2693,6 +2693,15 @@ class Create_func_issimple_deprecated : public Create_func_issimple }; Create_func_issimple_deprecated Create_func_issimple_deprecated::s_singleton; +class Create_func_json_merge_patch : public Create_native_func +{ +public: + virtual Item *create_native(THD *thd, LEX_STRING name, + PT_item_list *item_list); + + static Create_func_json_merge_patch s_singleton; +}; +Create_func_json_merge_patch Create_func_json_merge_patch::s_singleton; class Create_func_json_merge_preserve : public Create_native_func { @@ -6174,6 +6183,15 @@ Create_func_validate::create(THD *thd, Item *arg1) return new (thd->mem_root) Item_func_validate(POS(), arg1); } +Item* +Create_func_json_merge_patch::create_native(THD *thd, LEX_STRING name, + PT_item_list *item_list) +{ + int arg_count= item_list ? item_list->elements() : 0; + if (arg_count < 2) + my_error(ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT, MYF(0), name.str); + return new (thd->mem_root) Item_func_json_merge_patch(thd, POS(), item_list); +} Item* Create_func_json_merge_preserve::create_native(THD *thd, LEX_STRING name, @@ -7585,6 +7603,7 @@ static Native_func_registry func_array[] = { { C_STRING_WITH_LEN("JSON_ARRAY") }, BUILDER(Create_func_json_array)}, { { C_STRING_WITH_LEN("JSON_REMOVE") }, BUILDER(Create_func_json_remove)}, { { C_STRING_WITH_LEN("JSON_MERGE") }, BUILDER(Create_func_json_merge)}, + { { C_STRING_WITH_LEN("JSON_MERGE_PATCH") }, BUILDER(Create_func_json_merge_patch)}, { { C_STRING_WITH_LEN("JSON_MERGE_PRESERVE") }, BUILDER(Create_func_json_merge_preserve)}, { { C_STRING_WITH_LEN("JSON_QUOTE") }, BUILDER(Create_func_json_quote)}, { { C_STRING_WITH_LEN("JSON_STORAGE_SIZE") }, BUILDER(Create_func_json_storage_size)}, diff --git a/sql/item_json_func.cc b/sql/item_json_func.cc index 9f3bf9cceebc..cc3bbba38963 100644 --- a/sql/item_json_func.cc +++ b/sql/item_json_func.cc @@ -17,6 +17,9 @@ /* JSON Function items used by mysql */ #include "item_json_func.h" + +#include // std::auto_ptr + #include "derror.h" // ER_THD #include "mysqld.h" // key_memory_JSON, current_thd #include "sql_class.h" // THD @@ -3616,3 +3619,97 @@ longlong Item_func_json_storage_size::val_int() return error_int(); /* purecov: inspected */ return buffer.length(); } + + +bool Item_func_json_merge_patch::val_json(Json_wrapper *wr) +{ + DBUG_ASSERT(fixed); + + try + { + if (get_json_wrapper(args, 0, &m_value, func_name(), wr)) + return error_json(); + + null_value= args[0]->null_value; + + Json_wrapper patch_wr; + for (uint i= 1; i < arg_count; ++i) + { + if (get_json_wrapper(args, i, &m_value, func_name(), &patch_wr)) + return error_json(); + + if (args[i]->null_value) + { + /* + The patch is unknown, so the result so far is unknown. We + cannot return NULL immediately, since a later patch can give + a known result. This is because the result of a merge + operation is the patch itself if the patch is not an object, + regardless of what the target document is. + */ + null_value= true; + continue; + } + + /* + If a patch is not an object, the result of the merge operation + is the patch itself. So just set the result to this patch and + go on to the next patch. + */ + if (patch_wr.type() != Json_dom::J_OBJECT) + { + wr->steal(&patch_wr); + null_value= false; + continue; + } + + /* + The target document is unknown, and we cannot tell the result + from the patch alone when the patch is an object, so go on to + the next patch. + */ + if (null_value) + continue; + + /* + Get the DOM representation of the target document. It should + be an object, and we will use an empty object if it is not. + */ + std::auto_ptr target_dom; + if (wr->type() == Json_dom::J_OBJECT) + { + target_dom.reset(down_cast(wr->to_dom())); + wr->set_alias(); + } + else + { + target_dom.reset(new (std::nothrow) Json_object()); + } + + if (target_dom.get() == NULL) + return error_json(); /* purecov: inspected */ + + // Get the DOM representation of the patch object. + Json_object *patch_dom= down_cast(patch_wr.to_dom()); + patch_wr.set_alias(); // target_dom will take over the ownership + + // Apply the patch on the target document. + if (patch_dom == NULL || target_dom->merge_patch(patch_dom)) + return error_json(); /* purecov: inspected */ + + // Move the result of the merge operation into the result wrapper. + Json_wrapper res(target_dom.release()); + wr->steal(&res); + null_value= false; + } + + return false; + } + /* purecov: begin inspected */ + catch (...) + { + handle_std_exception(func_name()); + return error_json(); + } + /* purecov: end */ +} diff --git a/sql/item_json_func.h b/sql/item_json_func.h index 9e205359baeb..87bd019048d9 100644 --- a/sql/item_json_func.h +++ b/sql/item_json_func.h @@ -737,6 +737,21 @@ class Item_func_json_merge_preserve :public Item_json_func bool val_json(Json_wrapper *wr); }; +/** + Represents the JSON function JSON_MERGE_PATCH. +*/ +class Item_func_json_merge_patch :public Item_json_func +{ +public: + Item_func_json_merge_patch(THD *thd, const POS &pos, PT_item_list *a) + : Item_json_func(thd, pos, a) + {} + + const char *func_name() const { return "json_merge_patch"; } + + bool val_json(Json_wrapper *wr); +}; + /** Represents the JSON function JSON_QUOTE() */ diff --git a/sql/json_dom.cc b/sql/json_dom.cc index 31932d98e7f0..fd4c916c222f 100644 --- a/sql/json_dom.cc +++ b/sql/json_dom.cc @@ -1265,6 +1265,18 @@ bool Json_object::remove(const Json_dom *child) } +bool Json_object::remove(const std::string &key) +{ + Json_object_map::iterator it= m_map.find(key); + if (it == m_map.end()) + return false; + + delete it->second; + m_map.erase(it); + return true; +} + + size_t Json_object::cardinality() const { return m_map.size(); @@ -1314,6 +1326,68 @@ void Json_object::clear() } +bool Json_object::merge_patch(Json_object *patch) +{ + std::auto_ptr aptr(patch); // We own it, and must make sure + // to delete it. + + for (Json_object_map::iterator it= patch->m_map.begin(); + it != patch->m_map.end(); ++it) + { + const std::string &patch_key= it->first; + std::auto_ptr patch_value(it->second); + it->second= NULL; + + // Remove the member if the value in the patch is the null literal. + if (patch_value->json_type() == Json_dom::J_NULL) + { + remove(patch_key); + continue; + } + + // See if the target has this member, add it if not. + std::pair + target_pair= m_map.insert(std::make_pair(patch_key, + static_cast(NULL))); + + std::auto_ptr target_value(target_pair.first->second); + target_pair.first->second= NULL; + + /* + If the value in the patch is not an object and not the null + literal, the new value is the patch. + */ + if (patch_value->json_type() != Json_dom::J_OBJECT) + { + patch_value->set_parent(this); + target_pair.first->second= patch_value.release(); + continue; + } + + /* + If there is no target value, or if the target value is not an + object, use an empty object as the target value. + */ + if (target_value.get() == NULL || + target_value->json_type() != Json_dom::J_OBJECT) + { + target_value.reset(new (std::nothrow) Json_object()); + } + + // Recursively merge the target value with the patch. + Json_object *target_obj= down_cast(target_value.get()); + if (target_obj == NULL || + target_obj->merge_patch(down_cast(patch_value.release()))) + return true; /* purecov: inspected */ + + target_value->set_parent(this); + target_pair.first->second= target_value.release(); + } + + return false; +} + + /** Compare two keys from a JSON object and determine whether or not the first key is less than the second key. key1 is considered less than diff --git a/sql/json_dom.h b/sql/json_dom.h index 8733ff9785d3..d2d0790a7fc1 100644 --- a/sql/json_dom.h +++ b/sql/json_dom.h @@ -441,6 +441,15 @@ class Json_object : public Json_dom */ bool remove(const Json_dom *child); + /** + Remove the child element addressed by key. The removed child is deleted. + + @param key the key of the element to remove + @retval true if an element was removed + @retval false if there was no element with that key + */ + bool remove(const std::string &key); + /** @return The number of elements in the JSON object. */ @@ -473,6 +482,30 @@ class Json_object : public Json_dom /// Returns a const_iterator that refers past the last element. const_iterator end() const { return m_map.end(); } + + /** + Implementation of the MergePatch function specified in RFC 7396: + + define MergePatch(Target, Patch): + if Patch is an Object: + if Target is not an Object: + Target = {} # Ignore the contents and set it to an empty Object + for each Key/Value pair in Patch: + if Value is null: + if Key exists in Target: + remove the Key/Value pair from Target + else: + Target[Key] = MergePatch(Target[Key], Value) + return Target + else: + return Patch + + @param patch The object that describes the patch. The ownership of the + patch object is transferred to the target object. + @retval false on success + @retval true on memory allocation error + */ + bool merge_patch(Json_object *patch); }; From 6b2d6207f440b65489cc298b88937856ad211a1d Mon Sep 17 00:00:00 2001 From: Knut Anders Hatlen Date: Thu, 17 Dec 2015 10:15:14 +0100 Subject: [PATCH 0272/1221] WL#11065: Backport JSON functions from 8.0 to 5.7 (part 7) The following bug fix is backported to 5.7 from trunk: Bug#22253965: UPDATE CRASHES IN SORTCMP Problem: A query that executed a JSON function which raised an error, caused the server to exit. Analysis: If an error happens when Item_cache_json::cache_value() evaluates the expression that should be cached, it immediately returns false to indicate that it could not cache the expression. It does not touch the null_value flag, so it will still tell the nullability of the previous value that was cached. Item_cache_json::val_str() returns NULL if the cache couldn't get populated. It does not touch the null_value flag either. Because of this, we could get in a situation where Item_cache_json::val_str() returns NULL because an error happened during evaluation of the expression to cache, but the null_value flag indicates that a non-NULL value was returned. This inconsistency could confuse callers of Item_cache_json::val_str(). For example: Query_result_max_min_subquery::cmp_str() uses the null_value flag to determine if val_str() returned a NULL value. If null_value is false, it believes that it is safe to dereference the pointer returned by val_str(). Because of the inconsistency, the returned pointer could be NULL even though null_value is false, and this would cause cmp_str() to dereference the NULL pointer and the server would exit. Solution: Make Item_cache_json::cache_json() update the null_value flag also in the situations where an error is raised during evaluation of the expression. Change-Id: Ie02c538913d565327a76879da628c18aa648912c --- sql/item.cc | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/sql/item.cc b/sql/item.cc index 243d82920459..1731c82dcb14 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -9965,18 +9965,15 @@ bool Item_cache_json::cache_value() if (!example || !m_value) return false; - if (json_value(&example, 0, m_value)) - return false; - + value_cached= !json_value(&example, 0, m_value); null_value= example->null_value; - value_cached= true; - if (!null_value) + if (value_cached && !null_value) { m_value->to_dom(); // the row buffer might change, so need own copy } - return true; + return value_cached; } From 731b1bcceaf4076735255dd65746ff76e46557d4 Mon Sep 17 00:00:00 2001 From: Roy Lyseng Date: Fri, 15 Jan 2016 08:34:43 +0100 Subject: [PATCH 0273/1221] WL#11065: Backport JSON functions from 8.0 to 5.7 (part 8) The following bug fix is backported to 5.7 from trunk: Bug#22522073: Assertion failed: !thd->is_error() in optimize_cond() Another issue of missing error propagation: - Added return on error after calling val_json() in resolve_const_item(). - Missing error check in Item_singlerow_subselect::val_json() caused wrong function result. Change-Id: Iaa269b5d0347057d745507f5f6e95c70854e1ca3 --- mysql-test/suite/json/inc/json_functions.inc | 14 ++++++++++++++ .../suite/json/r/json_functions_innodb.result | 10 ++++++++++ mysql-test/suite/json/r/json_functions_ndb.result | 12 ++++++++++++ sql/item.cc | 2 +- sql/item_subselect.cc | 2 +- 5 files changed, 38 insertions(+), 2 deletions(-) diff --git a/mysql-test/suite/json/inc/json_functions.inc b/mysql-test/suite/json/inc/json_functions.inc index e87b9d82ea5f..c0cec7b5fe3f 100644 --- a/mysql-test/suite/json/inc/json_functions.inc +++ b/mysql-test/suite/json/inc/json_functions.inc @@ -3353,6 +3353,20 @@ DELETE FROM t WHERE j IN (SELECT CAST('not json' AS JSON) FROM DUAL WHERE 1); SELECT * FROM t; DROP TABLE t; +--echo # Bug#22522073: Assertion failed: !thd->is_error() in optimize_cond() + +CREATE TABLE s(a INTEGER, b CHAR(1)); +INSERT INTO s VALUES (1,0), (1,0), (1,0); + +CREATE TABLE t(c JSON); +INSERT INTO t VALUES (), (), (); + +--error ER_SUBQUERY_NO_1_ROW +SELECT 1 +FROM s WHERE a NOT IN (SELECT 1 + FROM s WHERE (SELECT c FROM t) = b); + +DROP TABLE s, t; --echo # --echo # WL#9191: JSON_PRETTY function diff --git a/mysql-test/suite/json/r/json_functions_innodb.result b/mysql-test/suite/json/r/json_functions_innodb.result index 566d144f45d2..f0cdcb7a6656 100644 --- a/mysql-test/suite/json/r/json_functions_innodb.result +++ b/mysql-test/suite/json/r/json_functions_innodb.result @@ -9502,6 +9502,16 @@ j {"a": "b"} {"a": "b"} DROP TABLE t; +# Bug#22522073: Assertion failed: !thd->is_error() in optimize_cond() +CREATE TABLE s(a INTEGER, b CHAR(1)); +INSERT INTO s VALUES (1,0), (1,0), (1,0); +CREATE TABLE t(c JSON); +INSERT INTO t VALUES (), (), (); +SELECT 1 +FROM s WHERE a NOT IN (SELECT 1 +FROM s WHERE (SELECT c FROM t) = b); +ERROR 21000: Subquery returns more than 1 row +DROP TABLE s, t; # # WL#9191: JSON_PRETTY function # diff --git a/mysql-test/suite/json/r/json_functions_ndb.result b/mysql-test/suite/json/r/json_functions_ndb.result index a68a89cf8e68..14ff3019aa2a 100644 --- a/mysql-test/suite/json/r/json_functions_ndb.result +++ b/mysql-test/suite/json/r/json_functions_ndb.result @@ -9665,6 +9665,18 @@ j {"a": "b"} {"a": "b"} DROP TABLE t; +# Bug#22522073: Assertion failed: !thd->is_error() in optimize_cond() +CREATE TABLE s(a INTEGER, b CHAR(1)); +INSERT INTO s VALUES (1,0), (1,0), (1,0); +CREATE TABLE t(c JSON); +Warnings: +Warning 1478 Table storage engine 'ndbcluster' does not support the create option 'Binlog of table with BLOB attribute and no PK' +INSERT INTO t VALUES (), (), (); +SELECT 1 +FROM s WHERE a NOT IN (SELECT 1 +FROM s WHERE (SELECT c FROM t) = b); +ERROR 21000: Subquery returns more than 1 row +DROP TABLE s, t; # # WL#9191: JSON_PRETTY function # diff --git a/sql/item.cc b/sql/item.cc index 1731c82dcb14..d2c98d6595c5 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -9371,7 +9371,7 @@ bool resolve_const_item(THD *thd, Item **ref, Item *comp_item) { Json_wrapper wr; if (item->val_json(&wr)) - break; + return true; if (item->null_value) new_item= new Item_null(item->item_name); else diff --git a/sql/item_subselect.cc b/sql/item_subselect.cc index b4bbf1159976..fb0929dd7373 100644 --- a/sql/item_subselect.cc +++ b/sql/item_subselect.cc @@ -1317,7 +1317,7 @@ bool Item_singlerow_subselect::val_json(Json_wrapper *result) else { reset(); - return false; + return current_thd->is_error(); } } From 4082f6b5d9b9878b0cd7a534601bdb10bbc64b4e Mon Sep 17 00:00:00 2001 From: Bjorn Munch Date: Mon, 11 Dec 2017 14:44:35 +0100 Subject: [PATCH 0274/1221] Corrected copyright years in deb packaging --- packaging/deb-in/copyright.com.in | 2 +- packaging/deb-in/copyright.gpl.in | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packaging/deb-in/copyright.com.in b/packaging/deb-in/copyright.com.in index ddc639c1506c..4a2bcd76aa68 100644 --- a/packaging/deb-in/copyright.com.in +++ b/packaging/deb-in/copyright.com.in @@ -4,7 +4,7 @@ Upstream-Contact: MySQL Release Engineering Source: http://dev.mysql.com/ Files: * -Copyright: 2000, 2016, Oracle and/or its affiliates. All rights reserved. +Copyright: 2000, 2018, Oracle and/or its affiliates. All rights reserved. License: Commercial This is a release of MySQL, a dual-license SQL database server. For the avoidance of doubt, this particular copy of the software diff --git a/packaging/deb-in/copyright.gpl.in b/packaging/deb-in/copyright.gpl.in index 50e29be3be65..45563622359f 100644 --- a/packaging/deb-in/copyright.gpl.in +++ b/packaging/deb-in/copyright.gpl.in @@ -3,7 +3,7 @@ Upstream-Name: @DEB_COPYRIGHT_UPSTREAMNAME@ Upstream-Contact: MySQL Release Engineering Source: http://dev.mysql.com/ -Copyright: 2015, 2016, Oracle and/or its affiliates. All rights reserved. +Copyright: 2000, 2018, Oracle and/or its affiliates. All rights reserved. License: This is a release of MySQL, a dual-license SQL database server. For the avoidance of doubt, this particular copy of the software From 76b4b0bd6a8b5adc99cc47aa1d749fadf945de3d Mon Sep 17 00:00:00 2001 From: hrvojem Date: Mon, 11 Dec 2017 11:57:10 +0100 Subject: [PATCH 0275/1221] Fixed DOC-654 by documenting innodb_ft_ignore_stopwords (5.7) fixed dep8 issues in older RNs and a build warning --- .../flexibility/innodb_fts_improvements.rst | 56 +++++++++++++++++++ doc/source/index.rst | 1 + doc/source/myrocks/variables.rst | 2 +- .../Percona-Server-5.7.18-16.rst | 24 ++++---- .../Percona-Server-5.7.20-18.rst | 5 ++ 5 files changed, 75 insertions(+), 13 deletions(-) create mode 100644 doc/source/flexibility/innodb_fts_improvements.rst diff --git a/doc/source/flexibility/innodb_fts_improvements.rst b/doc/source/flexibility/innodb_fts_improvements.rst new file mode 100644 index 000000000000..468ec95e9469 --- /dev/null +++ b/doc/source/flexibility/innodb_fts_improvements.rst @@ -0,0 +1,56 @@ +.. _innodb_fts_improvements: + +==================================== +InnoDB Full-Text Search improvements +==================================== + +.. contents:: + :local: + +.. _ignoring_stopword_list: + +====================== +Ignoring Stopword list +====================== + +By default all Full-Text Search indexes check the `stopwords list +`_, +to see if any indexed elements *contain* one of the words on that list. + +Using this list for n-gram indexes isn't always suitable, as an example, any +item that contains ``a`` or ``i`` will be ignored. Another word that can't be +searched is ``east``, this one will find no matches because ``a`` is on the +FTS stopword list. + +To resolve this issue, in |Percona Server| :rn:`5.7.20-18` a new +:variable:`innodb_ft_ignore_stopwords` variable has been implemented +which controls whether |InnoDB| Full-Text Search should ignore stopword list. + +Although this variable is introduced to resolve n-gram issues, it affects +all Full-Text Search indexes as well. + +Being a stopword doesn't just mean to be a one of the predefined +words from the list. Tokens shorter than `innodb_ft_min_token_size +`_ +or longer than `innodb_ft_max_token_size +`_ +are also considered stopwords. Therefore, when +:variable:`innodb_ft_ignore_stopwords` is set to ``ON`` even for non-ngram +FTS, ``innodb_ft_min_token_size`` / ``innodb_ft_max_token_size`` will be +ignored meaning that in this case very short and very long words will +also be indexed. + +System Variables +================ + +.. variable:: innodb_ft_ignore_stopwords + + :cli: Yes + :conf: Yes + :scope: Session, Global + :dyn: Yes + :vartype: Boolean + :default: ``OFF`` + +When enabled, this variable will instruct |InnoDB| Full Text Search +parser to ignore the stopword list when building/updating an FTS index. diff --git a/doc/source/index.rst b/doc/source/index.rst index 5734f1e61897..a96b366a39b8 100644 --- a/doc/source/index.rst +++ b/doc/source/index.rst @@ -92,6 +92,7 @@ Flexibility Improvements flexibility/proxy_protocol_support flexibility/per_session_server-id flexibility/compressed_columns + flexibility/innodb_fts_improvements Reliability Improvements ======================== diff --git a/doc/source/myrocks/variables.rst b/doc/source/myrocks/variables.rst index 476b9bd51bf2..2cd816f5dbc2 100644 --- a/doc/source/myrocks/variables.rst +++ b/doc/source/myrocks/variables.rst @@ -1748,7 +1748,7 @@ Signals the MyRocks drop index thread to wake up. .. variable:: rocksdb_sim_cache_size :version 5.7.20-18: Implemented - :cli: ``--rocksdb-sim-cache-size + :cli: ``--rocksdb-sim-cache-size`` :dyn: No :scope: Global :vartype: Numeric diff --git a/doc/source/release-notes/Percona-Server-5.7.18-16.rst b/doc/source/release-notes/Percona-Server-5.7.18-16.rst index b9a48a0ab29f..4ecf0b0a849a 100644 --- a/doc/source/release-notes/Percona-Server-5.7.18-16.rst +++ b/doc/source/release-notes/Percona-Server-5.7.18-16.rst @@ -24,8 +24,8 @@ added for these distributions. New Feature =========== -|Percona Server| is now available on Debian 9 (stretch). The support only covers -the ``amd64`` architecture. +|Percona Server| is now available on Debian 9 (stretch). The support only +covers the ``amd64`` architecture. |Percona Server| can now be built with support of OpenSSL 1.1. @@ -49,11 +49,11 @@ unnecessarily waiting for an available lock. Bug fixed :tdbbug:`3`. |Percona FT| could assert when opening a dictionary with no useful information to error log. Bug fixed :tdbbug:`23`. -|Percona FT| could assert for various reasons deserializing nodes with no useful -error output. Bug fixed :tdbbug:`24`. +|Percona FT| could assert for various reasons deserializing nodes with no +useful error output. Bug fixed :tdbbug:`24`. It was not possible to build |Percona Server| on Debian 9 (stretch) due to -issues with OpenSSL 1.1. Bug fixed :bug:`1702903` (upstream :mysqlbug:`83814`). +issues with OpenSSL 1.1. Bug fixed :bug:`1702903` (upstream :mysqlbug:`83814`). Packaging was using the ``dpkg --verify`` command which is not available on wheezy/precise. Bug fixed :bug:`1694907`. @@ -81,13 +81,13 @@ also :ref:`compatibility-matrix`. Note that the Killing a stored procedure execution could result in an assert failure on a debug server build. Bug fixed :bug:`1689736` (upstream :mysqlbug:`86260`). -The ``SET STATEMENT .. FOR`` statement changed the global instead of the session -value of a variable if the statement occurred immediately after the ``SET -GLOBAL`` or ``SHOW GLOBAL STATUS`` command. Bug fixed :bug:`1385352`. +The ``SET STATEMENT .. FOR`` statement changed the global instead of the +session value of a variable if the statement occurred immediately after the +``SET GLOBAL`` or ``SHOW GLOBAL STATUS`` command. Bug fixed :bug:`1385352`. When running ``SHOW ENGINE INNODB STATUS``, the ``Buffer pool size, bytes`` entry contained **0**. BUg fixed :bug:`1586262`. - + The synchronization between the LRU manager and page cleaner threads was not done at shutdown. Bug fixed :bug:`1689552`. @@ -124,7 +124,7 @@ Compatibility Matrix ======================= ======= ================== ==================== Feature YaSSL OpenSSL < 1.0.2 OpenSSL >= 1.0.2 ======================= ======= ================== ==================== -'commonName' validation Yes Yes Yes -SAN validation No Yes Yes -Wildcards support No No Yes +'commonName' validation Yes Yes Yes +SAN validation No Yes Yes +Wildcards support No No Yes ======================= ======= ================== ==================== diff --git a/doc/source/release-notes/Percona-Server-5.7.20-18.rst b/doc/source/release-notes/Percona-Server-5.7.20-18.rst index 5ed3ee90b8b6..b7bd727a06c4 100644 --- a/doc/source/release-notes/Percona-Server-5.7.20-18.rst +++ b/doc/source/release-notes/Percona-Server-5.7.20-18.rst @@ -24,6 +24,11 @@ New Features * |Percona Server| packages are now available for *Ubuntu 17.10 (Artful)*. + * As part of :ref:`innodb_fts_improvements` a new + :variable:`innodb_ft_ignore_stopwords` variable has been implemented which + controls whether |InnoDB| Full-Text Search should ignore stopword list + when building/updating an FTS index. + Bugs Fixed ========== From 5d5534261f0a90635b026e8ec8839589139488f2 Mon Sep 17 00:00:00 2001 From: Tiago Vale Date: Tue, 21 Nov 2017 16:20:17 +0000 Subject: [PATCH 0276/1221] Bug#26422857 GCS CAN USE SOME VERBOSITY IN THE ERROR LOG PROBLEM ------- As part of the fix of Bug#25495393: (a) We identify several low-level log messages; and (b) We identify desired, unexistant, log messages. We should remove or modify the messages in (a) because they are unhelpful to users. We should include the messages in (b) because they are helpful. ANALYSIS -------- We performed the majority of the analysis as part of the fix of Bug#25495393. FIX --- Only log the unhelpful messages in (a) when GCS is built for debug. Specifically, swap the usage of G_MESSAGE for G_DEBUG. Modify the message informing that XCom is ready to accept connections. Log the messages in (b). Specifically, the highest known XCom protocol version. Reviewed-by: Tiago Jorge Reviewed-by: Filipe Campos Reviewed-by: Pedro Gomes RB: 18038 --- .../src/bindings/xcom/gcs_xcom_networking.cc | 34 +++++++- .../libmysqlgcs/src/bindings/xcom/xcom/task.c | 9 +- .../src/bindings/xcom/xcom/task_net.c | 4 +- .../src/bindings/xcom/xcom/xcom_base.c | 87 ++++++++++--------- .../src/bindings/xcom/xcom/xcom_base.h | 6 +- .../src/bindings/xcom/xcom/xcom_cache.c | 12 ++- .../bindings/xcom/xcom/xcom_ssl_transport.c | 16 ++-- .../src/bindings/xcom/xcom/xcom_transport.c | 8 +- 8 files changed, 108 insertions(+), 68 deletions(-) diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_networking.cc b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_networking.cc index 4d1b03283296..95e19bcc4822 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_networking.cc +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_networking.cc @@ -314,15 +314,43 @@ sock_descriptor_to_sockaddr(int fd, struct sockaddr_storage *sa) { if (sa->ss_family != AF_INET && sa->ss_family != AF_INET6) { - MYSQL_GCS_LOG_WARN("Connection is not from an IPv4 nor IPv6 address. " + MYSQL_GCS_LOG_DEBUG("Connection is not from an IPv4 nor IPv6 address. " "This is not supported. Refusing the connection!"); res= 1; } } else { - MYSQL_GCS_LOG_WARN("Unable to handle socket descriptor, therefore " - "refusing connection."); + int err = errno; + switch (err) { + case EBADF: + MYSQL_GCS_LOG_DEBUG("The file descriptor fd=" << fd << " is not valid"); + break; + case EFAULT: + MYSQL_GCS_LOG_DEBUG("The sockaddr_storage pointer sa=" + << sa << " points to memory not in a valid part of " + "the process address space"); + break; + case EINVAL: + MYSQL_GCS_LOG_DEBUG("The value of addr_size=" << addr_size + << " is invalid"); + break; + case ENOBUFS: + MYSQL_GCS_LOG_DEBUG("Insufficient resources were available in the " + "system to perform the getpeername operation"); + break; + case ENOTCONN: + MYSQL_GCS_LOG_DEBUG("The socket fd=" << fd << " is not connected"); + break; + case ENOTSOCK: + MYSQL_GCS_LOG_DEBUG( + "The file descriptor fd=" << fd << " does not refer to a socket"); + break; + default: + MYSQL_GCS_LOG_DEBUG( + "Unable to perform getpeername, therefore refusing connection."); + break; + } } return res ? true: false; } diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/task.c b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/task.c index ced4231c1bcf..accb1e12e420 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/task.c +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/task.c @@ -1490,7 +1490,7 @@ result announce_tcp(xcom_port port) "0.0.0.0", port, fd.val, err); goto err; } - G_MESSAGE("Successfully bound to %s:%d (socket=%d).", + G_DEBUG("Successfully bound to %s:%d (socket=%d).", "0.0.0.0", port, fd.val); if (listen(fd.val, 32) < 0) { int err = to_errno(GET_OS_ERR); @@ -1498,7 +1498,7 @@ result announce_tcp(xcom_port port) "(socket=%d, errno=%d)!", fd.val, err); goto err; } - G_MESSAGE("Successfully set listen backlog to 32 " + G_DEBUG("Successfully set listen backlog to 32 " "(socket=%d)!", fd.val); /* Make socket non-blocking */ unblock_fd(fd.val); @@ -1509,8 +1509,9 @@ result announce_tcp(xcom_port port) fd.val, err); } else - G_MESSAGE("Successfully unblocked socket (socket=%d)!", - fd.val); + { + G_DEBUG("Successfully unblocked socket (socket=%d)!", fd.val); + } return fd; err: diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/task_net.c b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/task_net.c index 4f84f87de2ed..914d77faf0c8 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/task_net.c +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/task_net.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -223,7 +223,7 @@ int init_net() g_critical("Could not find a usable version of Winsock.dll"); return 1; } else { - G_MESSAGE("The Winsock 2.2 dll was found okay"); + G_DEBUG("The Winsock 2.2 dll was found okay"); return 0; } } diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.c b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.c index 3b843d31480a..c5d6622bd212 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.c +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.c @@ -1427,7 +1427,7 @@ uint32_t new_id() static synode_no getstart(app_data_ptr a) { synode_no retval = null_synode; - G_MESSAGE("getstart group_id %x", a->group_id); + G_DEBUG("getstart group_id %x", a->group_id); if (!a || a->group_id == null_id) { retval.group_id = new_id(); } else { @@ -4281,7 +4281,7 @@ const char *xcom_actions_name[] = { xcom_state xcom_fsm(xcom_actions action, task_arg fsmargs) { static int state = 0; - G_MESSAGE("state %d action %s", state, xcom_actions_name[action]); + G_DEBUG("state %d action %s", state, xcom_actions_name[action]); switch (state) { default: assert(state == 0); @@ -4333,7 +4333,7 @@ xcom_state xcom_fsm(xcom_actions action, task_arg fsmargs) xcom_shutdown = 1; if(xcom_exit_cb) xcom_exit_cb(get_int_arg(fsmargs)); - G_MESSAGE("Exiting xcom thread"); + G_DEBUG("Exiting xcom thread"); } CO_RETURN(x_start); } @@ -4629,7 +4629,9 @@ static int timed_connect(int fd, sockaddr *sock_addr, socklen_t sock_size) struct timeval timeout; fd_set rfds, wfds, efds; int res; +#ifdef WITH_LOG_DEBUG char buf[SYS_STRERROR_SIZE]; +#endif timeout.tv_sec= 10; timeout.tv_usec= 0; @@ -4667,24 +4669,23 @@ static int timed_connect(int fd, sockaddr *sock_addr, socklen_t sock_size) MAY_DBG(FN; STRLIT("select - Finished. "); NEXP(res, d)); if (res == 0) { - G_MESSAGE("Timed out while waiting for connection to be established! " - "Cancelling connection attempt. (socket= %d, error=%d)", - fd, res); - G_WARNING("select - Timeout! Cancelling connection..."); + G_DEBUG("Timed out while waiting for connection to be established! " + "Cancelling connection attempt. (socket= %d, error=%d)", + fd, res); + G_DEBUG("select - Timeout! Cancelling connection..."); return -1; } #if defined (WIN32) || defined (WIN64) else if (res == SOCKET_ERROR) { - G_WARNING("select - Error while connecting! " - "(socket= %d, error=%d)", - fd, WSAGetLastError()); + G_DEBUG("select - Error while connecting! (socket= %d, error=%d)", fd, + WSAGetLastError()); #else else if (res < 0) { - G_WARNING("select - Error while connecting! " - "(socket= %d, error=%d, error msg='%s')", - fd, errno, strerror(errno)); + G_DEBUG("select - Error while connecting! (socket= %d, error=%d, error " + "msg='%s')", + fd, errno, strerror(errno)); #endif return -1; } @@ -4706,13 +4707,14 @@ static int timed_connect(int fd, sockaddr *sock_addr, socklen_t sock_size) if (getsockopt(fd, SOL_SOCKET, SO_ERROR, &socket_errno, &socket_errno_len)) { - G_WARNING("Connection to socket %d failed. Unable to sort out the " - "connection error!", fd); + G_DEBUG("Connection to socket %d failed. Unable to sort out the " + "connection error!", + fd); } else { - G_WARNING("Connection to socket %d failed with error %d - %s.", - fd, socket_errno, strerr_msg(buf, sizeof(buf), socket_errno)); + G_DEBUG("Connection to socket %d failed with error %d - %s.", fd, + socket_errno, strerr_msg(buf, sizeof(buf), socket_errno)); } return -1; } @@ -4721,13 +4723,12 @@ static int timed_connect(int fd, sockaddr *sock_addr, socklen_t sock_size) else { #if defined (WIN32) || defined (WIN64) - G_WARNING("connect - Error connecting " - "(socket=%d, error=%d).", - fd, WSAGetLastError()); + G_DEBUG("connect - Error connecting (socket=%d, error=%d).", fd, + WSAGetLastError()); #else - G_WARNING("connect - Error connecting " - "(socket=%d, error=%d, error message='%s').", - fd, errno, strerror(errno)); + G_DEBUG("connect - Error connecting (socket=%d, error=%d, error " + "message='%s').", + fd, errno, strerror(errno)); #endif return -1; } @@ -4741,13 +4742,13 @@ static int timed_connect(int fd, sockaddr *sock_addr, socklen_t sock_size) if(block_fd(fd) < 0) { #if defined (WIN32) || defined (WIN64) - G_WARNING("Unable to set socket back to blocking state. " - "(socket=%d, error=%d).", - fd, WSAGetLastError()); + G_DEBUG( + "Unable to set socket back to blocking state. (socket=%d, error=%d).", + fd, WSAGetLastError()); #else - G_WARNING("Unable to set socket back to blocking state. " - "(socket=%d, error=%d, error message='%s').", - fd, errno, strerror(errno)); + G_DEBUG("Unable to set socket back to blocking state. (socket=%d, " + "error=%d, error message='%s').", + fd, errno, strerror(errno)); #endif return -1; } @@ -4763,20 +4764,22 @@ static connection_descriptor* connect_xcom(char *server, xcom_port port) result ret = {0,0}; struct sockaddr_in sock_addr; socklen_t sock_size; +#ifdef WITH_LOG_DEBUG char buf[SYS_STRERROR_SIZE]; +#endif DBGOUT(FN; STREXP(server); NEXP(port, d)); - G_MESSAGE("connecting to %s %d", server, port); + G_DEBUG("connecting to %s %d", server, port); /* Create socket */ if ((fd = checked_create_socket(AF_INET, SOCK_STREAM, 0)).val < 0) { - G_MESSAGE("Error creating sockets."); + G_DEBUG("Error creating sockets."); return NULL; } /* Get address of server */ if (!init_sockaddr(server, &sock_addr, &sock_size, port)) { xcom_close_socket(&fd.val); - G_MESSAGE("Error initializing socket addresses."); + G_DEBUG("Error initializing socket addresses."); return NULL; } @@ -4785,7 +4788,7 @@ static connection_descriptor* connect_xcom(char *server, xcom_port port) SET_OS_ERR(0); if (timed_connect(fd.val, (struct sockaddr *)&sock_addr, sock_size) == -1) { fd.funerr = to_errno(GET_OS_ERR); - G_MESSAGE("Connecting socket to address %s in port %d failed with error %d - %s.", + G_DEBUG("Connecting socket to address %s in port %d failed with error %d - %s.", server, port, fd.funerr, strerr_msg(buf, sizeof(buf), fd.funerr)); xcom_close_socket(&fd.val); return NULL; @@ -4804,15 +4807,15 @@ static connection_descriptor* connect_xcom(char *server, xcom_port port) task_dump_err(ret.funerr); xcom_shut_close_socket(&fd.val); #if defined (WIN32) || defined (WIN64) - G_MESSAGE("Setting node delay failed while connecting to %s with error %d.", + G_DEBUG("Setting node delay failed while connecting to %s with error %d.", server, ret.funerr); #else - G_MESSAGE("Setting node delay failed while connecting to %s with error %d - %s.", + G_DEBUG("Setting node delay failed while connecting to %s with error %d - %s.", server, ret.funerr, strerror(ret.funerr)); #endif return NULL; } - G_MESSAGE("client connected to %s %d fd %d", server, port, fd.val); + G_DEBUG("client connected to %s %d fd %d", server, port, fd.val); } else { /* Something is wrong */ socklen_t errlen = sizeof(ret.funerr); @@ -4827,10 +4830,10 @@ static connection_descriptor* connect_xcom(char *server, xcom_port port) } xcom_shut_close_socket(&fd.val); #if defined (WIN32) || defined (WIN64) - G_MESSAGE("Getting the peer name failed while connecting to server %s with error %d.", + G_DEBUG("Getting the peer name failed while connecting to server %s with error %d.", server, ret.funerr); #else - G_MESSAGE("Getting the peer name failed while connecting to server %s with error %d -%s.", + G_DEBUG("Getting the peer name failed while connecting to server %s with error %d -%s.", server, ret.funerr, strerror(ret.funerr)); #endif return NULL; @@ -4840,7 +4843,7 @@ static connection_descriptor* connect_xcom(char *server, xcom_port port) if (xcom_use_ssl()) { connection_descriptor *cd = 0; SSL * ssl = SSL_new(client_ctx); - G_MESSAGE("Trying to connect using SSL.") + G_DEBUG("Trying to connect using SSL.") SSL_set_fd(ssl, fd.val); ERR_clear_error(); @@ -4870,7 +4873,7 @@ static connection_descriptor* connect_xcom(char *server, xcom_port port) cd = new_connection(fd.val, ssl); set_connected(cd, CON_FD); - G_MESSAGE("Success connecting using SSL.") + G_DEBUG("Success connecting using SSL.") return cd; } else { connection_descriptor *cd = new_connection(fd.val, 0); @@ -5109,10 +5112,10 @@ int xcom_send_app_wait(connection_descriptor *fd, app_data *a, int force) case REQUEST_OK: return 1; case REQUEST_FAIL: - G_MESSAGE("cli_err %d",cli_err); + G_DEBUG("cli_err %d",cli_err); return 0; case REQUEST_RETRY: - G_MESSAGE("cli_err %d",cli_err); + G_DEBUG("cli_err %d",cli_err); xcom_sleep(1); break; default: diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.h b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.h index 86258e594a35..8a6529e6efe8 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.h +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.h @@ -233,7 +233,11 @@ void set_xcom_comms_cb(xcom_state_change_cb x); synode_no get_delivered_msg(); -#define XCOM_FSM(action, arg) do {const char *s = xcom_state_name[xcom_fsm(action,arg)]; G_TRACE("%f %s:%d", seconds(), __FILE__, __LINE__); G_MESSAGE("new state %s",s);} while(0) +#ifdef WITH_LOG_DEBUG +#define XCOM_FSM(action, arg) do {const char *s = xcom_state_name[xcom_fsm(action,arg)]; G_TRACE("%f %s:%d", seconds(), __FILE__, __LINE__); G_DEBUG("new state %s",s);} while(0) +#else +#define XCOM_FSM(action, arg) do {xcom_fsm(action,arg);} while(0) +#endif #ifdef __cplusplus } diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_cache.c b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_cache.c index aaf1b6d98dba..e3bf33f498b9 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_cache.c +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_cache.c @@ -465,8 +465,10 @@ size_t add_cache_size(size_t x) { cache_size += x; if (DBG_CACHE_SIZE && x) - G_MESSAGE("%f %s:%d cache_size %lu x %lu", seconds(), __FILE__, __LINE__, - (long unsigned int)cache_size, (long unsigned int)x); + { + G_DEBUG("%f %s:%d cache_size %lu x %lu", seconds(), __FILE__, __LINE__, + (long unsigned int)cache_size, (long unsigned int)x); + } return cache_size; } @@ -475,8 +477,10 @@ size_t sub_cache_size(size_t x) { cache_size -= x; if (DBG_CACHE_SIZE && x) - G_MESSAGE("%f %s:%d cache_size %lu x %lu", seconds(), __FILE__, __LINE__, - (long unsigned int)cache_size, (long unsigned int)x); + { + G_DEBUG("%f %s:%d cache_size %lu x %lu", seconds(), __FILE__, __LINE__, + (long unsigned int)cache_size, (long unsigned int)x); + } return cache_size; } diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_ssl_transport.c b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_ssl_transport.c index 919a23b9550b..24f6e1c76989 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_ssl_transport.c +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_ssl_transport.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -413,14 +413,14 @@ static int init_ssl(const char *key_file, const char *cert_file, const char *cipher, const char *tls_version, SSL_CTX* ssl_ctx) { - G_MESSAGE("Initializing SSL with key_file: '%s' cert_file: '%s' " + G_DEBUG("Initializing SSL with key_file: '%s' cert_file: '%s' " "ca_file: '%s' ca_path: '%s'", key_file ? key_file : "NULL", cert_file ? cert_file : "NULL", ca_file ? ca_file : "NULL", ca_path ? ca_path : "NULL"); - G_MESSAGE("Additional SSL configuration is " + G_DEBUG("Additional SSL configuration is " "cipher: '%s' crl_file: '%s' crl_path: '%s'", cipher ? cipher : "NULL", crl_file ? crl_file : "NULL", @@ -438,7 +438,7 @@ static int init_ssl(const char *key_file, const char *cert_file, if (configure_ssl_keys(ssl_ctx, key_file, cert_file)) goto error; - G_MESSAGE("Success initializing SSL"); + G_DEBUG("Success initializing SSL"); return 0; @@ -519,7 +519,7 @@ int xcom_init_ssl(const char *server_key_file, const char *server_cert_file, return ssl_init_done; } - G_MESSAGE("Configuring SSL for the server") + G_DEBUG("Configuring SSL for the server") server_ctx= SSL_CTX_new(SSLv23_server_method()); if (!server_ctx) { @@ -535,7 +535,7 @@ int xcom_init_ssl(const char *server_key_file, const char *server_cert_file, verify_server= SSL_VERIFY_PEER | SSL_VERIFY_CLIENT_ONCE; SSL_CTX_set_verify(server_ctx, verify_server, NULL); - G_MESSAGE("Configuring SSL for the client") + G_DEBUG("Configuring SSL for the client") client_ctx= SSL_CTX_new(SSLv23_client_method()); if (!client_ctx) { @@ -575,7 +575,7 @@ void xcom_destroy_ssl() if(!xcom_use_ssl()) return; - G_MESSAGE("Destroying SSL"); + G_DEBUG("Destroying SSL"); ssl_init_done = 0; @@ -600,7 +600,7 @@ void xcom_destroy_ssl() xcom_cleanup_ssl(); - G_MESSAGE("Success destroying SSL"); + G_DEBUG("Success destroying SSL"); } diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_transport.c b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_transport.c index 17725bee2c64..245dda0b9b20 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_transport.c +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_transport.c @@ -903,10 +903,10 @@ int tcp_server(task_arg arg) { ep->refused = 0; unblock_fd(ep->fd); DBGOUT(FN; NDBG(ep->fd, d);); + G_MESSAGE("XCom protocol version: %d", my_xcom_version); G_MESSAGE( - "Ready to accept incoming connections on %s:%d " - "(socket=%d)!", - "0.0.0.0", xcom_listen_port, ep->fd); + "XCom initialized and ready to accept incoming connections on port %d", + xcom_listen_port); do { TASK_CALL(accept_tcp(ep->fd, &ep->cfd)); /* Callback to check that the file descriptor is accepted. */ @@ -915,7 +915,7 @@ int tcp_server(task_arg arg) { ep->cfd = -1; } if(ep->cfd == -1){ - G_MESSAGE("accept failed"); + G_DEBUG("accept failed"); ep->refused = 1; TASK_DELAY(0.1); } else { From ba01814af79b24f7bd313923f769f0a21eff6378 Mon Sep 17 00:00:00 2001 From: Sreeharsha Ramanavarapu Date: Tue, 12 Dec 2017 09:18:06 +0530 Subject: [PATCH 0277/1221] Bug #27214153: GCOL: INCORRECT BEHAVIOR WHILE INSERTING INTO A VIEW Issue: ------ Before inserting into a table or view, validate_gc_assignment checks if any generated columns are being inserted into. Then it will raise the appropriate error. At this stage columns from a view are of the class Item_direct_view_ref (instead of Item_field if it were a table), so extracting the field object might cause issues. Solution: --------- Use the real_item() function to avoid this problem. It will always give the underlying object being referred to by a view. This problem was fixed in trunk by Bug#22376872. --- sql/sql_resolver.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sql/sql_resolver.cc b/sql/sql_resolver.cc index b0b111d71550..5492382657bb 100644 --- a/sql/sql_resolver.cc +++ b/sql/sql_resolver.cc @@ -33,6 +33,7 @@ #include "opt_explain_format.h" #include "sql_test.h" // print_where #include "aggregate_check.h" +#include "template_utils.h" static void propagate_nullability(List *tables, bool nullable); @@ -3610,7 +3611,7 @@ validate_gc_assignment(THD * thd, List *fields, Field *rfield; if (!use_table_field) - rfield= ((Item_field *)f++)->field; + rfield= (down_cast((f++)->real_item()))->field; else rfield= *(fld++); if (rfield->table != table) From 08f679b797bd7854df9e5711164ca8b2c1e88086 Mon Sep 17 00:00:00 2001 From: Sreeharsha Ramanavarapu Date: Tue, 12 Dec 2017 14:42:56 +0530 Subject: [PATCH 0278/1221] Bug #26864199: INCORRECT BEHAVIOR WITH VIEWS IN SP Issue: ------ This problem occurs when an SP contains a statement that refers to a VIEW, which in turn refers to another VIEW. For views, a LEX object is created and retained in "parent_lex" when handling the view definition which is a query expression. While testing whether a derived-table / view should be merged (in SELECT_LEX::merge_derived), due to this LEX object it incorrectly assumes that the current SELECT_LEX object is the outer-most in the query and doesn't proceed further. It would eventually result in not creating a field for the view using create_view_field. This causes incorrect behavior with second execution of the stored procedure. Solution: --------- On 5.7: Fix is a backport of Bug #26627136 (pushed to 8.0.3 as part of WL#6526). A new function has also been added to restore the default LEX object and remove any reference to the previous LEX object created while parsing a view. On trunk and 8.0: Chaning the name of the function restore_parent_lex to merge_query_blocks. And the parameter name from old_lex to parent_lex. --- sql/sql_view.cc | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/sql/sql_view.cc b/sql/sql_view.cc index d9605a294dac..5018a022753e 100644 --- a/sql/sql_view.cc +++ b/sql/sql_view.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2004, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2004, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -1251,6 +1251,19 @@ bool open_and_read_view(THD *thd, TABLE_SHARE *share, DBUG_RETURN(false); } +/** + Merge a view query expression into the parent expression. + Update all LEX pointers inside the view expression to point to the parent LEX. + + @param view_lex View's LEX object. + @param parent_lex Original LEX object. +*/ +void merge_query_blocks(LEX *view_lex, LEX *parent_lex) +{ + for (SELECT_LEX *select= view_lex->all_selects_list; + select != NULL; select= select->next_select_in_list()) + select->parent_lex= parent_lex; +} /** Parse a view definition. @@ -1681,6 +1694,8 @@ bool parse_view_definition(THD *thd, TABLE_LIST *view_ref) sl->context.view_error_handler_arg= view_ref; } + merge_query_blocks(thd->lex, old_lex); + view_select->linkage= DERIVED_TABLE_TYPE; // Updatability is not decided yet From 0eaacc5418c27551d0df911ca6b0f08f67d05a48 Mon Sep 17 00:00:00 2001 From: Marek Szymczak Date: Tue, 12 Dec 2017 17:56:39 +0100 Subject: [PATCH 0279/1221] Bug#27008133 MY_MESSAGE CAUSES SERVER CRASH WHEN HANDLING MYSQL_AUDIT_GENERAL_RESULT EVENT Problem: ======== Audit plugin can abort execution of the command by returning non zero value from the audit handling function, or by calling my_message function. Some events cannot be aborted, such as MYSQL_AUDIT_GENERAL_RESULT. Calling my_message, when the result of the command execution is already set, causes server crash. Analysis: ========= Error reporting using my_message function, during MYSQL_AUDIT_GENERAL_RESULT event handling should be disabled. Fix: ==== Error reporting using the my_message function is disabled, when handling MYSQL_AUDIT_GENERAL_RESULT event by the audit plugin. Reviewed-by: ============ Harin Vadodaria Marc Alff --- mysql-test/r/audit_plugin_2.result | 142 +++++++++++++++++++++++++++++ mysql-test/t/audit_plugin_2.test | 141 ++++++++++++++++++++++++++++ sql/sql_audit.cc | 10 +- 3 files changed, 290 insertions(+), 3 deletions(-) diff --git a/mysql-test/r/audit_plugin_2.result b/mysql-test/r/audit_plugin_2.result index d1b0fdf86fae..3bb4c717913b 100644 --- a/mysql-test/r/audit_plugin_2.result +++ b/mysql-test/r/audit_plugin_2.result @@ -1,5 +1,8 @@ call mtr.add_suppression("Event 'MYSQL_AUDIT_COMMAND_END' cannot be aborted."); call mtr.add_suppression("Event 'MYSQL_AUDIT_CONNECTION_DISCONNECT' cannot be aborted."); +call mtr.add_suppression("Event 'MYSQL_AUDIT_GENERAL_RESULT' cannot be aborted."); +call mtr.add_suppression("Event 'MYSQL_AUDIT_GENERAL_STATUS' cannot be aborted."); +call mtr.add_suppression("Event 'MYSQL_AUDIT_GENERAL_ERROR' cannot be aborted."); call mtr.add_suppression("Command 'Ping' cannot be aborted."); INSTALL PLUGIN null_audit SONAME 'adt_null.'; ################ @@ -34,6 +37,145 @@ SELECT 1; SET @@GLOBAL.null_audit_event_order_check = 'MYSQL_AUDIT_COMMAND_START;command_id="14";ABORT_RET'; mysqld is alive SET @@GLOBAL.null_audit_event_order_check = NULL; +############# +## GENERAL ## +############# +####################### +## ABORT GENERAL LOG ## +####################### +SET @@null_audit_event_order_check_exact = ; +SET @@null_audit_event_order_check = 'MYSQL_AUDIT_COMMAND_START;command_id="";;' + 'MYSQL_AUDIT_PARSE_PREPARSE;;;' + 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' + 'MYSQL_AUDIT_GENERAL_LOG;;ABORT_RET'; +SELECT 1; +ERROR HY000: Aborted by Audit API ('MYSQL_AUDIT_GENERAL_LOG';1). +SELECT @@null_audit_event_order_check; +@@null_audit_event_order_check +EVENT-ORDER-ABORT +SELECT 1; +1 +1 +####################################### +## ABORT GENERAL LOG WITH MY_MESSAGE ## +####################################### +SET @@null_audit_abort_message = "Abort with my_message."; +SET @@null_audit_event_order_check_exact = ; +SET @@null_audit_event_order_check = 'MYSQL_AUDIT_COMMAND_START;command_id="";;' + 'MYSQL_AUDIT_PARSE_PREPARSE;;;' + 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' + 'MYSQL_AUDIT_GENERAL_LOG;;ABORT_RET'; +SELECT 1; +ERROR HY000: Abort with my_message. +SELECT @@null_audit_event_order_check; +@@null_audit_event_order_check +EVENT-ORDER-ABORT +SELECT 1; +1 +1 +########################## +## ABORT GENERAL RESULT ## +########################## +SET @@null_audit_event_order_check_exact = ; +SET @@null_audit_event_order_check = 'MYSQL_AUDIT_COMMAND_START;command_id="";;' + 'MYSQL_AUDIT_PARSE_PREPARSE;;;' + 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' + 'MYSQL_AUDIT_GENERAL_LOG;;;' + 'MYSQL_AUDIT_QUERY_START;sql_command_id="0";;' + 'MYSQL_AUDIT_QUERY_STATUS_END;sql_command_id="0";;' + 'MYSQL_AUDIT_GENERAL_RESULT;;ABORT_RET'; +SELECT 1; +1 +1 +SELECT @@null_audit_event_order_check; +@@null_audit_event_order_check +EVENT-ORDER-ABORT +########################################## +## ABORT GENERAL RESULT WITH MY_MESSAGE ## +########################################## +SET @@null_audit_abort_message = "Abort with my_message."; +SET @@null_audit_event_order_check_exact = ; +SET @@null_audit_event_order_check = 'MYSQL_AUDIT_COMMAND_START;command_id="";;' + 'MYSQL_AUDIT_PARSE_PREPARSE;;;' + 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' + 'MYSQL_AUDIT_GENERAL_LOG;;;' + 'MYSQL_AUDIT_QUERY_START;sql_command_id="0";;' + 'MYSQL_AUDIT_QUERY_STATUS_END;sql_command_id="0";;' + 'MYSQL_AUDIT_GENERAL_RESULT;;ABORT_RET'; +SELECT 1; +1 +1 +SELECT @@null_audit_event_order_check; +@@null_audit_event_order_check +EVENT-ORDER-ABORT +########################## +## ABORT GENERAL STATUS ## +########################## +SET @@null_audit_event_order_check_exact = ; +SET @@null_audit_event_order_check = 'MYSQL_AUDIT_COMMAND_START;command_id="";;' + 'MYSQL_AUDIT_PARSE_PREPARSE;;;' + 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' + 'MYSQL_AUDIT_GENERAL_LOG;;;' + 'MYSQL_AUDIT_QUERY_START;sql_command_id="0";;' + 'MYSQL_AUDIT_QUERY_STATUS_END;sql_command_id="0";;' + 'MYSQL_AUDIT_GENERAL_RESULT;;;' + 'MYSQL_AUDIT_GENERAL_STATUS;;ABORT_RET'; +SELECT 1; +1 +1 +SELECT @@null_audit_event_order_check; +@@null_audit_event_order_check +EVENT-ORDER-ABORT +########################################## +## ABORT GENERAL STATUS WITH MY_MESSAGE ## +########################################## +SET @@null_audit_abort_message = "Abort with my_message."; +SET @@null_audit_event_order_check_exact = ; +SET @@null_audit_event_order_check = 'MYSQL_AUDIT_COMMAND_START;command_id="";;' + 'MYSQL_AUDIT_PARSE_PREPARSE;;;' + 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' + 'MYSQL_AUDIT_GENERAL_LOG;;;' + 'MYSQL_AUDIT_QUERY_START;sql_command_id="0";;' + 'MYSQL_AUDIT_QUERY_STATUS_END;sql_command_id="0";;' + 'MYSQL_AUDIT_GENERAL_RESULT;;;' + 'MYSQL_AUDIT_GENERAL_STATUS;;ABORT_RET'; +SELECT 1; +1 +1 +SELECT @@null_audit_event_order_check; +@@null_audit_event_order_check +EVENT-ORDER-ABORT +######################### +## ABORT GENERAL ERROR ## +######################### +SET @@null_audit_event_order_check_exact = ; +SET @@null_audit_event_order_check = 'MYSQL_AUDIT_COMMAND_START;command_id="";;' + 'MYSQL_AUDIT_PARSE_PREPARSE;;;' + 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' + 'MYSQL_AUDIT_GENERAL_LOG;;;' + 'MYSQL_AUDIT_QUERY_START;sql_command_id="0";;' + 'MYSQL_AUDIT_GENERAL_ERROR;;ABORT_RET'; +SELECT * FROM mysql.non_existing_table; +ERROR 42S02: Table 'mysql.non_existing_table' doesn't exist +SELECT @@null_audit_event_order_check; +@@null_audit_event_order_check +EVENT-ORDER-ABORT +######################################### +## ABORT GENERAL ERROR WITH MY_MESSAGE ## +######################################### +SET @@null_audit_abort_message = "Abort with my_message."; +SET @@null_audit_event_order_check_exact = ; +SET @@null_audit_event_order_check = 'MYSQL_AUDIT_COMMAND_START;command_id="";;' + 'MYSQL_AUDIT_PARSE_PREPARSE;;;' + 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' + 'MYSQL_AUDIT_GENERAL_LOG;;;' + 'MYSQL_AUDIT_QUERY_START;sql_command_id="0";;' + 'MYSQL_AUDIT_GENERAL_ERROR;;ABORT_RET'; +SELECT * FROM mysql.non_existing_table; +ERROR 42S02: Table 'mysql.non_existing_table' doesn't exist +SELECT @@null_audit_event_order_check; +@@null_audit_event_order_check +EVENT-ORDER-ABORT ########### ## QUERY ## ########### diff --git a/mysql-test/t/audit_plugin_2.test b/mysql-test/t/audit_plugin_2.test index 187634c0c612..19e5c8b99857 100644 --- a/mysql-test/t/audit_plugin_2.test +++ b/mysql-test/t/audit_plugin_2.test @@ -3,6 +3,9 @@ call mtr.add_suppression("Event 'MYSQL_AUDIT_COMMAND_END' cannot be aborted."); call mtr.add_suppression("Event 'MYSQL_AUDIT_CONNECTION_DISCONNECT' cannot be aborted."); +call mtr.add_suppression("Event 'MYSQL_AUDIT_GENERAL_RESULT' cannot be aborted."); +call mtr.add_suppression("Event 'MYSQL_AUDIT_GENERAL_STATUS' cannot be aborted."); +call mtr.add_suppression("Event 'MYSQL_AUDIT_GENERAL_ERROR' cannot be aborted."); call mtr.add_suppression("Command 'Ping' cannot be aborted."); connection default; @@ -76,6 +79,144 @@ SET @@GLOBAL.null_audit_event_order_check = 'MYSQL_AUDIT_COMMAND_START;command_i --exec $MYSQLADMIN --no-defaults --default-character-set=latin1 -S $MASTER_MYSOCK -P $MASTER_MYPORT -u root ping 2>&1 SET @@GLOBAL.null_audit_event_order_check = NULL; +--echo ############# +--echo ## GENERAL ## +--echo ############# + +--echo ####################### +--echo ## ABORT GENERAL LOG ## +--echo ####################### +--replace_result $event_order_exact +eval SET @@null_audit_event_order_check_exact = $event_order_exact; +--replace_result $command_start_id +eval SET @@null_audit_event_order_check = 'MYSQL_AUDIT_COMMAND_START;command_id="$command_start_id";;' + 'MYSQL_AUDIT_PARSE_PREPARSE;;;' + 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' + 'MYSQL_AUDIT_GENERAL_LOG;;ABORT_RET'; +--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT +--error ER_AUDIT_API_ABORT +SELECT 1; +SELECT @@null_audit_event_order_check; +SELECT 1; + +--echo ####################################### +--echo ## ABORT GENERAL LOG WITH MY_MESSAGE ## +--echo ####################################### +SET @@null_audit_abort_message = "Abort with my_message."; +--replace_result $event_order_exact +eval SET @@null_audit_event_order_check_exact = $event_order_exact; +--replace_result $command_start_id +eval SET @@null_audit_event_order_check = 'MYSQL_AUDIT_COMMAND_START;command_id="$command_start_id";;' + 'MYSQL_AUDIT_PARSE_PREPARSE;;;' + 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' + 'MYSQL_AUDIT_GENERAL_LOG;;ABORT_RET'; +--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT +--error ER_AUDIT_API_ABORT +SELECT 1; +SELECT @@null_audit_event_order_check; +SELECT 1; + +--echo ########################## +--echo ## ABORT GENERAL RESULT ## +--echo ########################## +--replace_result $event_order_exact +eval SET @@null_audit_event_order_check_exact = $event_order_exact; +--replace_result $command_start_id +eval SET @@null_audit_event_order_check = 'MYSQL_AUDIT_COMMAND_START;command_id="$command_start_id";;' + 'MYSQL_AUDIT_PARSE_PREPARSE;;;' + 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' + 'MYSQL_AUDIT_GENERAL_LOG;;;' + 'MYSQL_AUDIT_QUERY_START;sql_command_id="0";;' + 'MYSQL_AUDIT_QUERY_STATUS_END;sql_command_id="0";;' + 'MYSQL_AUDIT_GENERAL_RESULT;;ABORT_RET'; +SELECT 1; +SELECT @@null_audit_event_order_check; + +--echo ########################################## +--echo ## ABORT GENERAL RESULT WITH MY_MESSAGE ## +--echo ########################################## +SET @@null_audit_abort_message = "Abort with my_message."; +--replace_result $event_order_exact +eval SET @@null_audit_event_order_check_exact = $event_order_exact; +--replace_result $command_start_id +eval SET @@null_audit_event_order_check = 'MYSQL_AUDIT_COMMAND_START;command_id="$command_start_id";;' + 'MYSQL_AUDIT_PARSE_PREPARSE;;;' + 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' + 'MYSQL_AUDIT_GENERAL_LOG;;;' + 'MYSQL_AUDIT_QUERY_START;sql_command_id="0";;' + 'MYSQL_AUDIT_QUERY_STATUS_END;sql_command_id="0";;' + 'MYSQL_AUDIT_GENERAL_RESULT;;ABORT_RET'; +SELECT 1; +SELECT @@null_audit_event_order_check; + +--echo ########################## +--echo ## ABORT GENERAL STATUS ## +--echo ########################## +--replace_result $event_order_exact +eval SET @@null_audit_event_order_check_exact = $event_order_exact; +--replace_result $command_start_id +eval SET @@null_audit_event_order_check = 'MYSQL_AUDIT_COMMAND_START;command_id="$command_start_id";;' + 'MYSQL_AUDIT_PARSE_PREPARSE;;;' + 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' + 'MYSQL_AUDIT_GENERAL_LOG;;;' + 'MYSQL_AUDIT_QUERY_START;sql_command_id="0";;' + 'MYSQL_AUDIT_QUERY_STATUS_END;sql_command_id="0";;' + 'MYSQL_AUDIT_GENERAL_RESULT;;;' + 'MYSQL_AUDIT_GENERAL_STATUS;;ABORT_RET'; +SELECT 1; +SELECT @@null_audit_event_order_check; + +--echo ########################################## +--echo ## ABORT GENERAL STATUS WITH MY_MESSAGE ## +--echo ########################################## +SET @@null_audit_abort_message = "Abort with my_message."; +--replace_result $event_order_exact +eval SET @@null_audit_event_order_check_exact = $event_order_exact; +--replace_result $command_start_id +eval SET @@null_audit_event_order_check = 'MYSQL_AUDIT_COMMAND_START;command_id="$command_start_id";;' + 'MYSQL_AUDIT_PARSE_PREPARSE;;;' + 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' + 'MYSQL_AUDIT_GENERAL_LOG;;;' + 'MYSQL_AUDIT_QUERY_START;sql_command_id="0";;' + 'MYSQL_AUDIT_QUERY_STATUS_END;sql_command_id="0";;' + 'MYSQL_AUDIT_GENERAL_RESULT;;;' + 'MYSQL_AUDIT_GENERAL_STATUS;;ABORT_RET'; +SELECT 1; +SELECT @@null_audit_event_order_check; + +--echo ######################### +--echo ## ABORT GENERAL ERROR ## +--echo ######################### +--replace_result $event_order_exact +eval SET @@null_audit_event_order_check_exact = $event_order_exact; +--replace_result $command_start_id +eval SET @@null_audit_event_order_check = 'MYSQL_AUDIT_COMMAND_START;command_id="3";;' + 'MYSQL_AUDIT_PARSE_PREPARSE;;;' + 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' + 'MYSQL_AUDIT_GENERAL_LOG;;;' + 'MYSQL_AUDIT_QUERY_START;sql_command_id="0";;' + 'MYSQL_AUDIT_GENERAL_ERROR;;ABORT_RET'; +--error ER_NO_SUCH_TABLE +SELECT * FROM mysql.non_existing_table; +SELECT @@null_audit_event_order_check; + +--echo ######################################### +--echo ## ABORT GENERAL ERROR WITH MY_MESSAGE ## +--echo ######################################### +SET @@null_audit_abort_message = "Abort with my_message."; +--replace_result $event_order_exact +eval SET @@null_audit_event_order_check_exact = $event_order_exact; +--replace_result $command_start_id +eval SET @@null_audit_event_order_check = 'MYSQL_AUDIT_COMMAND_START;command_id="3";;' + 'MYSQL_AUDIT_PARSE_PREPARSE;;;' + 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' + 'MYSQL_AUDIT_GENERAL_LOG;;;' + 'MYSQL_AUDIT_QUERY_START;sql_command_id="0";;' + 'MYSQL_AUDIT_GENERAL_ERROR;;ABORT_RET'; +--error ER_NO_SUCH_TABLE +SELECT * FROM mysql.non_existing_table; +SELECT @@null_audit_event_order_check; + --echo ########### --echo ## QUERY ## --echo ########### diff --git a/sql/sql_audit.cc b/sql/sql_audit.cc index 325cb9bdb33b..4a48ade2f47c 100644 --- a/sql/sql_audit.cc +++ b/sql/sql_audit.cc @@ -451,14 +451,18 @@ int mysql_audit_notify(THD *thd, mysql_event_general_subclass_t subclass, event.general_command.length= msg_len; if (subclass == MYSQL_AUDIT_GENERAL_ERROR || - subclass == MYSQL_AUDIT_GENERAL_STATUS) + subclass == MYSQL_AUDIT_GENERAL_STATUS || + subclass == MYSQL_AUDIT_GENERAL_RESULT) { Ignore_event_error_handler handler(thd, subclass_name); - return event_class_dispatch(thd, MYSQL_AUDIT_GENERAL_CLASS, &event); + return handler.get_result(event_class_dispatch(thd, + MYSQL_AUDIT_GENERAL_CLASS, + &event)); } - return event_class_dispatch(thd, MYSQL_AUDIT_GENERAL_CLASS, &event); + return event_class_dispatch_error(thd, MYSQL_AUDIT_GENERAL_CLASS, + subclass_name, &event); } int mysql_audit_notify(THD *thd, mysql_event_connection_subclass_t subclass, From 7c6ac5bf2f2402e23ef269c7fd9b22d6562d314b Mon Sep 17 00:00:00 2001 From: Jaideep Karande Date: Tue, 12 Dec 2017 18:48:34 +0100 Subject: [PATCH 0280/1221] Bug#27191586: GROUP REPLICATION CHANNEL OBSERVERS MAY USE NULL POINTERS ON UNINSTALL Issue: Order of Unregister and delete observation manager should be different Description: Test cases are not failing, but cleanup sequence should be as suggested i.e. delete happens post un-register. Resolution: Corrected code cleanup part, unregister followed by delete observation manager. NOTE: This bug was found through code anaylsis under development. No issue seen in production. --- rapid/plugin/group_replication/src/plugin.cc | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/rapid/plugin/group_replication/src/plugin.cc b/rapid/plugin/group_replication/src/plugin.cc index c6e3079522f5..54cecc5b481a 100644 --- a/rapid/plugin/group_replication/src/plugin.cc +++ b/rapid/plugin/group_replication/src/plugin.cc @@ -1073,12 +1073,6 @@ int plugin_group_replication_deinit(void *p) compatibility_mgr= NULL; } - if (channel_observation_manager != NULL) - { - delete channel_observation_manager; - channel_observation_manager= NULL; - } - if (unregister_server_state_observer(&server_state_observer, p)) { log_message(MY_ERROR_LEVEL, @@ -1105,6 +1099,12 @@ int plugin_group_replication_deinit(void *p) "All Group Replication server observers" " have been successfully unregistered"); + if (channel_observation_manager != NULL) + { + delete channel_observation_manager; + channel_observation_manager= NULL; + } + delete gcs_module; gcs_module= NULL; From b3d342f6e1a1678f8f53098bcaa3816a4110efaf Mon Sep 17 00:00:00 2001 From: Shivashankar Nagaraj Date: Wed, 13 Dec 2017 09:41:34 +0530 Subject: [PATCH 0281/1221] Bug#26736915: MTR TESTS USING MYSQLADMIN SHOULD USE --NO-DEFAULTS Issue: ------ mysqladmin reads .my.cnf and uses $host from the config file. This makes the test try to connect the server defined in .my.cnf, which fails. Fix: ---- add --no-defaults option to mysqladmin. Reviewed-by: Anitha Gopi Reviewed-by: Deepa Dixit Reviewed-by: Eivin Ottar Hatvik RB: 18069 --- mysql-test/r/mysqladmin.result | 1 + mysql-test/t/bug12368203.test | 22 +++++++++---------- mysql-test/t/connect.test | 4 ++-- ...isconnect_on_expired_password_default.test | 4 ++-- .../t/disconnect_on_expired_password_off.test | 4 ++-- mysql-test/t/grant_alter_user_qa.test | 4 ++-- mysql-test/t/mysql_config_editor.test | 12 +++++----- mysql-test/t/mysqladmin.test | 6 ++--- mysql-test/t/mysqld_daemon.test | 2 +- mysql-test/t/mysqld_safe.test | 2 +- mysql-test/t/plugin_auth.test | 2 +- mysql-test/t/shutdown.test | 2 +- mysql-test/t/utility_warnings.test | 6 ++--- 13 files changed, 36 insertions(+), 35 deletions(-) diff --git a/mysql-test/r/mysqladmin.result b/mysql-test/r/mysqladmin.result index 281c7ee9d4f4..4d3c66ba7d65 100644 --- a/mysql-test/r/mysqladmin.result +++ b/mysql-test/r/mysqladmin.result @@ -19,6 +19,7 @@ mysqld is alive # # Creating an empty file 'cnf_file' # Using --defaults-extra-file option with 'cnf_file'. +mysqladmin: [Warning] Using a password on the command line interface can be insecure. mysqld is alive # # Bug#12688860 : SECURITY RECOMMENDATION: PASSWORDS ON CLI diff --git a/mysql-test/t/bug12368203.test b/mysql-test/t/bug12368203.test index 313d3c3072ae..f0c0fb4ded44 100644 --- a/mysql-test/t/bug12368203.test +++ b/mysql-test/t/bug12368203.test @@ -12,7 +12,7 @@ connection master; # Test 'flush-logs error' command. # --echo # Test if mysqladmin supports 'flush-logs error' command. ---exec $MYSQLADMIN -u root -S $MASTER_MYSOCK -P $MASTER_MYPORT flush-logs error +--exec $MYSQLADMIN --no-defaults -u root -S $MASTER_MYSOCK -P $MASTER_MYPORT flush-logs error file_exists $MYSQLTEST_VARDIR/tmp/master_log.err; @@ -32,7 +32,7 @@ connection master; # Test 'flush-logs relay' command. # --echo # Test if mysqladmin supports 'flush-logs relay' command. ---exec $MYSQLADMIN -u root -S $MASTER_MYSOCK -P $MASTER_MYPORT flush-logs relay +--exec $MYSQLADMIN --no-defaults -u root -S $MASTER_MYSOCK -P $MASTER_MYPORT flush-logs relay --source include/sync_slave_sql_with_master.inc --echo # Check if 'slave-relay-bin.000003' file is created @@ -49,7 +49,7 @@ file_exists $MYSQLTEST_VARDIR/mysqld.1/data/master-bin.000002; # Test 'flush-logs slow' command. # --echo # Test if mysqladmin supports 'flush-logs slow' command. ---exec $MYSQLADMIN -u root -S $MASTER_MYSOCK -P $MASTER_MYPORT flush-logs slow +--exec $MYSQLADMIN --no-defaults -u root -S $MASTER_MYSOCK -P $MASTER_MYPORT flush-logs slow --echo # Make sure binary logs were not be flushed --echo # after executing 'flush-logs slow' command. @@ -60,7 +60,7 @@ file_exists $MYSQLTEST_VARDIR/mysqld.1/data/master-bin.000002; # Test 'flush-logs general' command. # --echo # Test if mysqladmin supports 'flush-logs general' command. ---exec $MYSQLADMIN -u root -S $MASTER_MYSOCK -P $MASTER_MYPORT flush-logs general +--exec $MYSQLADMIN --no-defaults -u root -S $MASTER_MYSOCK -P $MASTER_MYPORT flush-logs general --echo # Make sure binary logs were not flushed --echo # after execute 'flush-logs general' command. @@ -71,7 +71,7 @@ file_exists $MYSQLTEST_VARDIR/mysqld.1/data/master-bin.000002; # Test 'flush-logs engine' command. # --echo # Test if mysqladmin supports 'flush-logs engine' command. ---exec $MYSQLADMIN -u root -S $MASTER_MYSOCK -P $MASTER_MYPORT flush-logs engine +--exec $MYSQLADMIN --no-defaults -u root -S $MASTER_MYSOCK -P $MASTER_MYPORT flush-logs engine --echo # Make sure binary logs were not flushed --echo # after execute 'flush-logs engine' statement. @@ -87,7 +87,7 @@ file_exists $MYSQLTEST_VARDIR/mysqld.1/data/master-bin.000002; file_exists $MYSQLTEST_VARDIR/mysqld.1/data/master-bin.000002; --echo # Test if mysqladmin supports 'flush-logs binary' command. ---exec $MYSQLADMIN -u root -S $MASTER_MYSOCK -P $MASTER_MYPORT flush-logs binary +--exec $MYSQLADMIN --no-defaults -u root -S $MASTER_MYSOCK -P $MASTER_MYPORT flush-logs binary --echo # Check if 'master-bin.000002' file is created --echo # after execution of 'flush-logs binary' statement. @@ -104,7 +104,7 @@ file_exists $MYSQLTEST_VARDIR/mysqld.2/data/slave-relay-bin.000006; connection master; --echo # Test if mysqladmin support combining multiple kinds of logs into one statement. ---exec $MYSQLADMIN -u root -S $MASTER_MYSOCK -P $MASTER_MYPORT flush-logs error relay +--exec $MYSQLADMIN --no-defaults -u root -S $MASTER_MYSOCK -P $MASTER_MYPORT flush-logs error relay file_exists $MYSQLTEST_VARDIR/tmp/master_log.err; @@ -136,7 +136,7 @@ connection master; --echo # Test if 'flush-logs' command works fine and flush all the logs. ---exec $MYSQLADMIN -u root -S $MASTER_MYSOCK -P $MASTER_MYPORT flush-logs +--exec $MYSQLADMIN --no-defaults -u root -S $MASTER_MYSOCK -P $MASTER_MYPORT flush-logs file_exists $MYSQLTEST_VARDIR/tmp/master_log.err; @@ -156,10 +156,10 @@ file_exists $MYSQLTEST_VARDIR/mysqld.2/data/slave-relay-bin.000008; --echo # Test multiple options to flush-logs --echo # Must work ---exec $MYSQLADMIN -u root -S $MASTER_MYSOCK -P $MASTER_MYPORT flush-logs binary error ping +--exec $MYSQLADMIN --no-defaults -u root -S $MASTER_MYSOCK -P $MASTER_MYPORT flush-logs binary error ping --echo # Must work ---exec $MYSQLADMIN -u root -S $MASTER_MYSOCK -P $MASTER_MYPORT flush-logs ping +--exec $MYSQLADMIN --no-defaults -u root -S $MASTER_MYSOCK -P $MASTER_MYPORT flush-logs ping --error 1 ---exec $MYSQLADMIN -u root -S $MASTER_MYSOCK -P $MASTER_MYPORT flush-logs pong 2>&1 +--exec $MYSQLADMIN --no-defaults -u root -S $MASTER_MYSOCK -P $MASTER_MYPORT flush-logs pong 2>&1 diff --git a/mysql-test/t/connect.test b/mysql-test/t/connect.test index fcfb944492d2..0bf6cd314944 100644 --- a/mysql-test/t/connect.test +++ b/mysql-test/t/connect.test @@ -438,10 +438,10 @@ ALTER USER wl6587@localhost PASSWORD EXPIRE; --echo # mysqladmin non-password should fail --replace_regex /.*mysqladmin.*: connect/mysqladmin: connect/ --error 1 ---exec $MYSQLADMIN -S $MASTER_MYSOCK -P $MASTER_MYPORT -uwl6587 --password=wl6587 status 2>&1 +--exec $MYSQLADMIN --no-defaults -S $MASTER_MYSOCK -P $MASTER_MYPORT -uwl6587 --password=wl6587 status 2>&1 --echo # mysqladmin password should work ---exec $MYSQLADMIN -S $MASTER_MYSOCK -P $MASTER_MYPORT -uwl6587 --password=wl6587 password wl6587-2 --ssl-mode=REQUIRED 2>&1 +--exec $MYSQLADMIN --no-defaults -S $MASTER_MYSOCK -P $MASTER_MYPORT -uwl6587 --password=wl6587 password wl6587-2 --ssl-mode=REQUIRED 2>&1 DROP USER wl6587@localhost; diff --git a/mysql-test/t/disconnect_on_expired_password_default.test b/mysql-test/t/disconnect_on_expired_password_default.test index d73c0ec124e8..3a048d462cca 100644 --- a/mysql-test/t/disconnect_on_expired_password_default.test +++ b/mysql-test/t/disconnect_on_expired_password_default.test @@ -44,8 +44,8 @@ ALTER USER 'bernt' PASSWORD EXPIRE; --echo # Doing something should not connect --replace_result $MYSQLADMIN MYSQLADMIN --error 1 ---exec $MYSQLADMIN -S $MASTER_MYSOCK -P $MASTER_MYPORT --user=bernt --password=secret reload 2>&1 +--exec $MYSQLADMIN --no-defaults -S $MASTER_MYSOCK -P $MASTER_MYPORT --user=bernt --password=secret reload 2>&1 --echo # Setting password should succeed ---exec $MYSQLADMIN --user=bernt --password=secret -S $MASTER_MYSOCK -P $MASTER_MYPORT password newsecret --ssl-mode=REQUIRED 2>&1 +--exec $MYSQLADMIN --no-defaults --user=bernt --password=secret -S $MASTER_MYSOCK -P $MASTER_MYPORT password newsecret --ssl-mode=REQUIRED 2>&1 DROP USER 'bernt'; diff --git a/mysql-test/t/disconnect_on_expired_password_off.test b/mysql-test/t/disconnect_on_expired_password_off.test index 64a5bb6c4a21..9d700cae4300 100644 --- a/mysql-test/t/disconnect_on_expired_password_off.test +++ b/mysql-test/t/disconnect_on_expired_password_off.test @@ -42,8 +42,8 @@ ALTER USER 'bernt' PASSWORD EXPIRE; --echo # Doing something should connect but fail --replace_result $MYSQLADMIN MYSQLADMIN --error 1 ---exec $MYSQLADMIN --user=bernt --password=secret -S $MASTER_MYSOCK -P $MASTER_MYPORT reload 2>&1 +--exec $MYSQLADMIN --no-defaults --user=bernt --password=secret -S $MASTER_MYSOCK -P $MASTER_MYPORT reload 2>&1 --echo # Setting password should succeed ---exec $MYSQLADMIN --user=bernt --password=secret -S $MASTER_MYSOCK -P $MASTER_MYPORT password newsecret --ssl-mode=REQUIRED 2>&1 +--exec $MYSQLADMIN --no-defaults --user=bernt --password=secret -S $MASTER_MYSOCK -P $MASTER_MYPORT password newsecret --ssl-mode=REQUIRED 2>&1 DROP USER 'bernt'; diff --git a/mysql-test/t/grant_alter_user_qa.test b/mysql-test/t/grant_alter_user_qa.test index f93449bf130e..07d4fdf66189 100644 --- a/mysql-test/t/grant_alter_user_qa.test +++ b/mysql-test/t/grant_alter_user_qa.test @@ -957,7 +957,7 @@ password_expired,password_lifetime FROM mysql.user where user='user5'; # Resetting password with a non-ssl connection using mysqladmin,it should throw warning. GRANT ALL ON *.* TO user4@localhost; ---exec $MYSQLADMIN -S $MASTER_MYSOCK -P $MASTER_MYPORT -uuser4 --password=auth_xyz password new_auth 2>&1 +--exec $MYSQLADMIN --no-defaults -S $MASTER_MYSOCK -P $MASTER_MYPORT -uuser4 --password=auth_xyz password new_auth 2>&1 # Testing connection --connect(con1, localhost, user4, new_auth) SELECT USER(); @@ -965,7 +965,7 @@ connection default; disconnect con1; # With ssl connection ---exec $MYSQLADMIN -S $MASTER_MYSOCK -P $MASTER_MYPORT -uuser4 --password=new_auth password new_auth_ssl --ssl-mode=REQUIRED 2>&1 +--exec $MYSQLADMIN --no-defaults -S $MASTER_MYSOCK -P $MASTER_MYPORT -uuser4 --password=new_auth password new_auth_ssl --ssl-mode=REQUIRED 2>&1 # Testing connection --connect(con1, localhost, user4, new_auth_ssl) diff --git a/mysql-test/t/mysql_config_editor.test b/mysql-test/t/mysql_config_editor.test index dfe3b01b688c..142f47f9e469 100644 --- a/mysql-test/t/mysql_config_editor.test +++ b/mysql-test/t/mysql_config_editor.test @@ -125,12 +125,12 @@ FLUSH PRIVILEGES; --echo # Now trying to connect again.. --echo # Connecting using 'test_user1' --echo # ---exec $MYSQLADMIN -S $MASTER_MYSOCK -P $MASTER_MYPORT ping 2>&1 +--exec $MYSQLADMIN --no-defaults -S $MASTER_MYSOCK -P $MASTER_MYPORT ping 2>&1 --exec $MYSQLADMIN --no-defaults -S $MASTER_MYSOCK -P $MASTER_MYPORT ping 2>&1 --echo --echo # Connecting using 'test_user2' --echo # ---exec $MYSQLADMIN --login-path=test-login-path1 --port=$MASTER_MYPORT ping 2>&1 +--exec $MYSQLADMIN --no-defaults --login-path=test-login-path1 --port=$MASTER_MYPORT ping 2>&1 --exec $MYSQLADMIN --no-defaults --login-path=test-login-path1 --port=$MASTER_MYPORT ping 2>&1 --echo # @@ -187,7 +187,7 @@ DROP USER test_user1, test_user2; --echo # The 'invalid' login file should not cause --echo # any problem. --echo # ---exec $MYSQLADMIN -S $MASTER_MYSOCK -P $MASTER_MYPORT -uroot ping 2> /dev/null +--exec $MYSQLADMIN --no-defaults -S $MASTER_MYSOCK -P $MASTER_MYPORT -uroot ping 2> /dev/null --echo ############################### --echo # Dropping the test login file @@ -200,7 +200,7 @@ DROP USER test_user1, test_user2; --echo # Even if login file does not exist, the --echo # tools should be able to continue --echo # normally. ---exec $MYSQLADMIN -S $MASTER_MYSOCK -P $MASTER_MYPORT -uroot ping 2>&1 +--exec $MYSQLADMIN --no-defaults -S $MASTER_MYSOCK -P $MASTER_MYPORT -uroot ping 2>&1 --echo --echo ###################### @@ -218,12 +218,12 @@ CREATE USER user_name_len_26_012345678@localhost; --echo # Connecting using 'user_name_len_25_01234567' --echo # ---exec $MYSQLADMIN -S $MASTER_MYSOCK -P $MASTER_MYPORT ping 2>&1 +--exec $MYSQLADMIN --no-defaults -S $MASTER_MYSOCK -P $MASTER_MYPORT ping 2>&1 --exec $MYSQLADMIN --no-defaults -S $MASTER_MYSOCK -P $MASTER_MYPORT ping 2>&1 --echo --echo # Connecting using 'user_name_len_26_012345678' --echo # ---exec $MYSQLADMIN --login-path=test-login-path_user_26 --port=$MASTER_MYPORT ping 2>&1 +--exec $MYSQLADMIN --no-defaults --login-path=test-login-path_user_26 --port=$MASTER_MYPORT ping 2>&1 --exec $MYSQLADMIN --no-defaults --login-path=test-login-path_user_26 --port=$MASTER_MYPORT ping 2>&1 # Cleanup diff --git a/mysql-test/t/mysqladmin.test b/mysql-test/t/mysqladmin.test index 500929e5242e..b1a74c79a63b 100644 --- a/mysql-test/t/mysqladmin.test +++ b/mysql-test/t/mysqladmin.test @@ -45,7 +45,7 @@ remove_file $MYSQLTEST_VARDIR/tmp/bug10608.cnf; --echo # --echo # Executing mysqladmin with --sleep=1 and --count=2. ---exec $MYSQLADMIN -u root -S $MASTER_MYSOCK -P $MASTER_MYPORT --sleep=1 --count=2 ping > $MYSQLTEST_VARDIR/tmp/mysqladmin.tmp +--exec $MYSQLADMIN --no-defaults -u root -S $MASTER_MYSOCK -P $MASTER_MYPORT --sleep=1 --count=2 ping > $MYSQLTEST_VARDIR/tmp/mysqladmin.tmp --echo # Done. --echo # Displaying the output : --cat_file $MYSQLTEST_VARDIR/tmp/mysqladmin.tmp @@ -62,7 +62,7 @@ remove_file $MYSQLTEST_VARDIR/tmp/bug10608.cnf; EOF --echo # Using --defaults-extra-file option with 'cnf_file'. ---exec $MYSQLADMIN --defaults-extra-file=$MYSQLTEST_VARDIR/tmp/cnf_file -uroot -S $MASTER_MYSOCK -P $MASTER_MYPORT ping 2>&1 +--exec $MYSQLADMIN --defaults-extra-file=$MYSQLTEST_VARDIR/tmp/cnf_file -uroot -h localhost --password="" -S $MASTER_MYSOCK -P $MASTER_MYPORT ping 2>&1 --remove_file $MYSQLTEST_VARDIR/tmp/cnf_file @@ -70,7 +70,7 @@ EOF --echo # Bug#12688860 : SECURITY RECOMMENDATION: PASSWORDS ON CLI --echo # ---exec $MYSQLADMIN -uroot --password="" -S $MASTER_MYSOCK -P $MASTER_MYPORT ping 2>&1 +--exec $MYSQLADMIN --no-defaults -uroot --password="" -S $MASTER_MYSOCK -P $MASTER_MYPORT ping 2>&1 --echo # diff --git a/mysql-test/t/mysqld_daemon.test b/mysql-test/t/mysqld_daemon.test index da7e67fb77ae..acf0e6c329ce 100644 --- a/mysql-test/t/mysqld_daemon.test +++ b/mysql-test/t/mysqld_daemon.test @@ -37,7 +37,7 @@ let $other_page_size_nk= `SELECT CONCAT($other_page_size_k,'k')`; --exec $MYSQL -h localhost -S $MYSQL_SOCKET -P $MYSQL_PORT -u root -e "SHOW DATABASES" 2>&1 # Shutdown mysqld with mysqladmin ---exec $MYSQLADMIN -h localhost -S $MYSQL_SOCKET -P $MYSQL_PORT -u root shutdown 2>&1 +--exec $MYSQLADMIN --no-defaults -h localhost -S $MYSQL_SOCKET -P $MYSQL_PORT -u root shutdown 2>&1 # Delay introduced - mysqld_safe takes some time to restart mysqld --source include/wait_until_disconnected.inc diff --git a/mysql-test/t/mysqld_safe.test b/mysql-test/t/mysqld_safe.test index 1f7f052164da..dc45d969f5a9 100644 --- a/mysql-test/t/mysqld_safe.test +++ b/mysql-test/t/mysqld_safe.test @@ -65,7 +65,7 @@ connection default; --exec $MYSQL -h localhost -S $MYSQL_SOCKET -P $MYSQL_PORT -u root -e "SHOW DATABASES" 2>&1 # 8) Shutdown mysqld with mysqladmin ---exec $MYSQLADMIN -h localhost -S $MYSQL_SOCKET -P $MYSQL_PORT -u root shutdown 2>&1 +--exec $MYSQLADMIN --no-defaults -h localhost -S $MYSQL_SOCKET -P $MYSQL_PORT -u root shutdown 2>&1 # Delay introduced - mysqld_safe takes some time to restart mysqld --source include/wait_until_disconnected.inc diff --git a/mysql-test/t/plugin_auth.test b/mysql-test/t/plugin_auth.test index 3c4478bd360d..76775eae63e7 100644 --- a/mysql-test/t/plugin_auth.test +++ b/mysql-test/t/plugin_auth.test @@ -434,7 +434,7 @@ FLUSH PRIVILEGES; --exec $MYSQL -u root -S $MASTER_MYSOCK -P $MASTER_MYPORT --default-auth=auth_test_plugin $PLUGIN_AUTH_OPT -e "SELECT 1" --echo # Executing 'mysqladmin' ---exec $MYSQLADMIN -u root -S $MASTER_MYSOCK -P $MASTER_MYPORT --default-auth=auth_test_plugin $PLUGIN_AUTH_OPT ping +--exec $MYSQLADMIN --no-defaults -u root -S $MASTER_MYSOCK -P $MASTER_MYPORT --default-auth=auth_test_plugin $PLUGIN_AUTH_OPT ping --echo # Executing 'mysqldump' --exec $MYSQL_DUMP -u root -S $MASTER_MYSOCK -P $MASTER_MYPORT --compact --default-auth=auth_test_plugin $PLUGIN_AUTH_OPT test diff --git a/mysql-test/t/shutdown.test b/mysql-test/t/shutdown.test index 9efe5de6a835..dd4eea1d09e7 100644 --- a/mysql-test/t/shutdown.test +++ b/mysql-test/t/shutdown.test @@ -39,7 +39,7 @@ let $DDIR= `select @@datadir`; --echo # start mysqladmin with shutdown option. --exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect ---exec $MYSQLADMIN -S $MASTER_MYSOCK -P $MASTER_MYPORT -u root shutdown 2>&1 +--exec $MYSQLADMIN --no-defaults -S $MASTER_MYSOCK -P $MASTER_MYPORT -u root shutdown 2>&1 --source include/wait_until_disconnected.inc --echo # start the mysql server with init file and shutdown command. diff --git a/mysql-test/t/utility_warnings.test b/mysql-test/t/utility_warnings.test index f91ebd810836..c6d8c0121928 100644 --- a/mysql-test/t/utility_warnings.test +++ b/mysql-test/t/utility_warnings.test @@ -143,7 +143,7 @@ INSERT INTO t_25380000 VALUES(1); --echo #MYSQLADMIN --echo #Scenario 1 ---exec $MYSQLADMIN --ssl-mode=DISABLED --ssl-ca=$MYSQL_TEST_DIR/std_data/cacert.pem --ssl-key=$MYSQL_TEST_DIR/std_data/client-key.pem --ssl-cert=$MYSQL_TEST_DIR/std_data/client-cert.pem -S $MASTER_MYSOCK -P $MASTER_MYPORT -uroot ping > $MYSQLTEST_VARDIR/tmp/25380000_mysqladmin_result 2> $MYSQLTEST_VARDIR/tmp/25380000_stderr +--exec $MYSQLADMIN --no-defaults --ssl-mode=DISABLED --ssl-ca=$MYSQL_TEST_DIR/std_data/cacert.pem --ssl-key=$MYSQL_TEST_DIR/std_data/client-key.pem --ssl-cert=$MYSQL_TEST_DIR/std_data/client-cert.pem -S $MASTER_MYSOCK -P $MASTER_MYPORT -uroot ping > $MYSQLTEST_VARDIR/tmp/25380000_mysqladmin_result 2> $MYSQLTEST_VARDIR/tmp/25380000_stderr --cat_file $MYSQLTEST_VARDIR/tmp/25380000_stderr # Search for warning message in the result file @@ -152,7 +152,7 @@ INSERT INTO t_25380000 VALUES(1); --source include/search_pattern.inc --echo #Scenario 2 ---exec $MYSQLADMIN --ssl --ssl-ca=$MYSQL_TEST_DIR/std_data/cacert.pem --ssl-key=$MYSQL_TEST_DIR/std_data/client-key.pem --ssl-cert=$MYSQL_TEST_DIR/std_data/client-cert.pem -S $MASTER_MYSOCK -P $MASTER_MYPORT -uroot ping > $MYSQLTEST_VARDIR/tmp/25380000_mysqladmin_result 2> $MYSQLTEST_VARDIR/tmp/25380000_stderr +--exec $MYSQLADMIN --no-defaults --ssl --ssl-ca=$MYSQL_TEST_DIR/std_data/cacert.pem --ssl-key=$MYSQL_TEST_DIR/std_data/client-key.pem --ssl-cert=$MYSQL_TEST_DIR/std_data/client-cert.pem -S $MASTER_MYSOCK -P $MASTER_MYPORT -uroot ping > $MYSQLTEST_VARDIR/tmp/25380000_mysqladmin_result 2> $MYSQLTEST_VARDIR/tmp/25380000_stderr --cat_file $MYSQLTEST_VARDIR/tmp/25380000_stderr # Search for warning message in the result file @@ -160,7 +160,7 @@ INSERT INTO t_25380000 VALUES(1); --source include/search_pattern.inc --echo #Scenario 3 ---exec $MYSQLADMIN --ssl-verify-server-cert --ssl-ca=$MYSQL_TEST_DIR/std_data/cacert.pem --ssl-key=$MYSQL_TEST_DIR/std_data/client-key.pem --ssl-cert=$MYSQL_TEST_DIR/std_data/client-cert.pem -S $MASTER_MYSOCK -P $MASTER_MYPORT -uroot ping > $MYSQLTEST_VARDIR/tmp/25380000_mysqladmin_result 2> $MYSQLTEST_VARDIR/tmp/25380000_stderr +--exec $MYSQLADMIN --no-defaults --ssl-verify-server-cert --ssl-ca=$MYSQL_TEST_DIR/std_data/cacert.pem --ssl-key=$MYSQL_TEST_DIR/std_data/client-key.pem --ssl-cert=$MYSQL_TEST_DIR/std_data/client-cert.pem -S $MASTER_MYSOCK -P $MASTER_MYPORT -uroot ping > $MYSQLTEST_VARDIR/tmp/25380000_mysqladmin_result 2> $MYSQLTEST_VARDIR/tmp/25380000_stderr --cat_file $MYSQLTEST_VARDIR/tmp/25380000_stderr # Search for warning message in the result file From a669684aa2cb2c0d1357c033b8fc815513c757d5 Mon Sep 17 00:00:00 2001 From: hrvojem Date: Wed, 13 Dec 2017 10:31:31 +0100 Subject: [PATCH 0282/1221] Fixed DOC-621, DOC-618, DOC-616, DOC-634, DOC-635, DOC-638, DOC-639, DOC-643, DOC-604, DOC-606, DOC-619, DOC-636 Added missing status and server variables descriptions --- doc/source/myrocks/variables.rst | 270 +++++++++++++++++- .../Percona-Server-5.7.20-18.rst | 8 +- 2 files changed, 268 insertions(+), 10 deletions(-) diff --git a/doc/source/myrocks/variables.rst b/doc/source/myrocks/variables.rst index 2cd816f5dbc2..f93e953bb158 100644 --- a/doc/source/myrocks/variables.rst +++ b/doc/source/myrocks/variables.rst @@ -171,10 +171,30 @@ Also, all variables can exist in one or both of the following scopes: - Yes - Yes - Global, Session + * - :variable:`rocksdb_deadlock_detect_depth` + - Yes + - Yes + - Global, Session * - :variable:`rocksdb_debug_optimizer_no_zero_cardinality` - Yes - Yes - Global, Session + * - :variable:`rocksdb_debug_ttl_ignore_pk` + - Yes + - Yes + - Global + * - :variable:`rocksdb_debug_ttl_read_filter_ts` + - Yes + - Yes + - Global + * - :variable:`rocksdb_debug_ttl_rec_ts` + - Yes + - Yes + - Global + * - :variable:`rocksdb_debug_ttl_snapshot_ts` + - Yes + - Yes + - Global * - :variable:`rocksdb_default_cf_options` - Yes - No @@ -195,6 +215,10 @@ Also, all variables can exist in one or both of the following scopes: - Yes - No - Global + * - :variable:`rocksdb_enable_ttl_read_filtering` + - Yes + - Yes + - Global * - :variable:`rocksdb_enable_thread_tracking` - Yes - No @@ -239,6 +263,10 @@ Also, all variables can exist in one or both of the following scopes: - Yes - No - Global + * - :variable:`rocksdb_ignore_unknown_options` + - Yes + - No + - Global * - :variable:`rocksdb_index_type` - Yes - No @@ -291,6 +319,10 @@ Also, all variables can exist in one or both of the following scopes: - Yes - Yes - Global + * - :variable:`rocksdb_max_latest_deadlocks` + - Yes + - Yes + - Global * - :variable:`rocksdb_max_log_file_size` - Yes - No @@ -323,6 +355,10 @@ Also, all variables can exist in one or both of the following scopes: - Yes - Yes - Global, Session + * - :variable:`rocksdb_merge_tmp_file_removal_delay_ms` + - Yes + - Yes + - Global, Session * - :variable:`rocksdb_new_table_reader_for_compaction_inputs` - Yes - No @@ -635,6 +671,7 @@ Allowed range is from ``1`` to ``2147483647``. .. variable:: rocksdb_block_size :version 5.7.19-17: Implemented + :version 5.7.20-18: Minimum value has chaned from ``0`` to ``1024`` :cli: ``--rocksdb-block-size`` :dyn: No :scope: Global @@ -643,7 +680,7 @@ Allowed range is from ``1`` to ``2147483647``. Specifies the size of the data block for reading RocksDB data files. Default value is ``4096``. -Allowed range is from ``1`` to ``18446744073709551615``. +Allowed range is from ``1024`` to ``18446744073709551615``. .. variable:: rocksdb_block_size_deviation @@ -888,6 +925,8 @@ Allowed range is up to ``2000000`` (two million). :vartype: Boolean :default: ``ON`` +When enabled this variable allows/encourages threads that are using +two-phase commit to ``prepare`` in parallel. .. variable:: rocksdb_create_checkpoint @@ -965,6 +1004,18 @@ Allowed range is up to ``18446744073709551615``. Specifies whether MyRocks should detect deadlocks. Disabled by default. +.. variable:: rocksdb_deadlock_detect_depth + + :version 5.7.20-18: Implemented + :cli: ``--rocksdb-deadlock-detect-depth`` + :dyn: Yes + :scope: Global, Session + :vartype: Numeric + :default: ``50`` + +Specifies the number of transactions deadlock detection will traverse +through before assuming deadlock. + .. variable:: rocksdb_debug_optimizer_no_zero_cardinality :version 5.7.19-17: Implemented @@ -977,6 +1028,64 @@ Disabled by default. Specifies whether MyRocks should prevent zero cardinality by always overriding it with some value. +.. variable:: rocksdb_debug_ttl_ignore_pk + + :version 5.7.20-18: Implemented + :cli: ``--rocksdb-debug-ttl-ignore-pk`` + :dyn: Yes + :scope: Global + :vartype: Boolean + :default: ``OFF`` + +For debugging purposes only. If true, compaction filtering will not occur +on Primary Key TTL data. This variable is a no-op in non-debug builds. + +.. variable:: rocksdb_debug_ttl_read_filter_ts + + :version 5.7.20-18: Implemented + :cli: ``--rocksdb_debug-ttl-read-filter-ts`` + :dyn: Yes + :scope: Global + :vartype: Numeric + :default: ``0`` + +For debugging purposes only. Overrides the TTL read +filtering time to time + :variable:`debug_ttl_read_filter_ts`. +A value of ``0`` denotes that the variable is not set. +This variable is a no-op in non-debug builds. + +.. variable:: rocksdb_debug_ttl_rec_ts + + :version 5.7.20-18: Implemented + :cli: ``--rocksdb-debug-ttl-rec-ts`` + :dyn: Yes + :scope: Global + :vartype: Numeric + :default: ``0`` + +For debugging purposes only. Overrides the TTL of +records to ``now()`` + :variable:`debug_ttl_rec_ts`. +The value can be +/- to simulate a record inserted in the past vs a record +inserted in the "future". A value of ``0`` denotes that the +variable is not set. +This variable is a no-op in non-debug builds. + +.. variable:: rocksdb_debug_ttl_snapshot_ts + + :version 5.7.20-18: Implemented + :cli: ``--rocksdb_debug_ttl_ignore_pk`` + :dyn: Yes + :scope: Global + :vartype: Numeric + :default: ``0`` + +For debugging purposes only. Sets the snapshot during +compaction to ``now()`` + :variable:`rocksdb_debug_set_ttl_snapshot_ts`. +The value can be +/- to simulate a snapshot in the past vs a +snapshot created in the "future". A value of ``0`` denotes +that the variable is not set. This variable is a no-op in +non-debug builds. + .. variable:: rocksdb_default_cf_options :version 5.7.19-17: Implemented @@ -1047,6 +1156,21 @@ Specifies whether to keep expired TTL records during compaction. Enabled by default. If disabled, expired TTL records will be dropped during compaction. +.. variable:: rocksdb_enable_ttl_read_filtering + + :version 5.7.20-18: Implemented + :cli: ``--rocksdb-enable-ttl-read-filtering`` + :dyn: Yes + :scope: Global + :vartype: Boolean + :default: ``ON`` + +For tables with TTL, expired records are skipped/filtered +out during processing and in query results. Disabling +this will allow these records to be seen, but as a result +rows may disappear in the middle of transactions as they +are dropped during compaction. **Use with caution.** + .. variable:: rocksdb_enable_thread_tracking :version 5.7.19-17: Implemented @@ -1212,6 +1336,17 @@ Specifies whether hash collisions are allowed. Enabled by default, which uses less memory. If disabled, full prefix is stored to prevent hash collisions. +.. variable:: rocksdb_ignore_unknown_options + + :version 5.7.20-18: Implemented + :cli: ``--rocksdb-ignore-unknown-options`` + :dyn: No + :scope: Global + :vartype: Boolean + :default: ``ON`` + +When enabled, it allows RocksDB to receive unknown options and not exit. + .. variable:: rocksdb_index_type :version 5.7.19-17: Implemented @@ -1353,6 +1488,8 @@ Allowed range is up to ``18446744073709551615``. :vartype: Boolean :default: ``ON`` +This variable can be used to disable automatic/timed WAL flushing and instead +rely on the application to do the flushing. .. variable:: rocksdb_max_background_compactions @@ -1406,6 +1543,17 @@ how many threads to allocate towards flush/compaction. It was implemented to reduce the number of (confusing) options users and can tweak and push the responsibility down to RocksDB level. +.. variable:: rocksdb_max_latest_deadlocks + + :version 5.7.20-18: Implemented + :cli: ``--rocksdb-max-latest-deadlocks`` + :dyn: Yes + :scope: Global + :vartype: Numeric + :default: ``5`` + +Specifies the maximum number of recent deadlocks to store. + .. variable:: rocksdb_max_log_file_size :version 5.7.19-17: Implemented @@ -1439,15 +1587,18 @@ only one manifest file is used. .. variable:: rocksdb_max_open_files :version 5.7.19-17: Implemented + :version 5.7.19-17: Default value changed to ``1000`` :cli: ``--rocksdb-max-open-files`` :dyn: No :scope: Global :vartype: Numeric - :default: ``4294967295`` + :default: ``1000`` Specifies the maximum number of file handles opened by MyRocks. Default value is also the maximum, making it practically unlimited: -all opened files remain open. +all opened files remain open. If :variable:`rocksdb_max_open_files` +value is greater than ``open_files_limit``, it will be reset +to ``open_files_limit``. .. variable:: rocksdb_max_row_locks @@ -1522,6 +1673,21 @@ as described in :variable:`rocksdb_merge_buf_size`. Default size is 1 GB (``1073741824``). Allowed range is from ``100`` to ``18446744073709551615``. +.. variable:: rocksdb_merge_tmp_file_removal_delay_ms + + :version 5.7.20-18: Implemented + :cli: ``--rocksdb_merge_tmp_file_removal_delay_ms`` + :dyn: Yes + :scope: Global, Session + :vartype: Numeric + :default: ``0`` + +Fast secondary index creation creates merge files when needed. After finishing +secondary index creation, merge files are removed. By default, the file removal +is done without any sleep, so removing GBs of merge files within <1s may +happen, which will cause trim stalls on Flash. This variable can be used to +rate limit the delay in milliseconds. + .. variable:: rocksdb_new_table_reader_for_compaction_inputs :version 5.7.19-17: Implemented @@ -1586,7 +1752,17 @@ Enabled by default. :default: ``OFF`` Specifies whether MyRocks should pause all background operations. -Disabled by default. +Disabled by default. There is no practical reason for a user to ever +use this variable because it is intended as a test synchronization tool +for the MyRocks MTR test suites. + +.. warning:: + + If someone were to set a :variable:`rocksdb_force_flush_memtable_now` to + ``1`` while :variable:`rocksdb_pause_background_work` is set to ``1``, + the client that issued the ``rocksdb_force_flush_memtable_now=1`` will be + blocked indefinitely until :variable:`rocksdb_pause_background_work` + is set to ``0``. .. variable:: rocksdb_perf_context_level @@ -1784,14 +1960,15 @@ Disabled by default (caching is not skipped). .. variable:: rocksdb_sst_mgr_rate_bytes_per_sec :version 5.7.19-17: Implemented + :version 5.7.20-18: Default value changed from ``67108864`` to ``0`` :cli: ``--rocksdb-sst-mgr-rate-bytes-per-sec`` :dyn: Yes :scope: Global, Session :vartype: Numeric - :default: ``67108864`` + :default: ``0`` Specifies the maximum rate for writing to data files. -Default value is ``67108864`` (64 MB/sec). +Default value is ``0``. This option is not effective on HDD. Allowed range is from ``0`` to ``18446744073709551615``. .. variable:: rocksdb_stats_dump_period_sec @@ -1850,6 +2027,7 @@ Empty by default. .. variable:: rocksdb_table_cache_numshardbits :version 5.7.19-17: Implemented + :version 5.7.20-18: Max value changed from ``2147483647`` to ``19`` :cli: ``--rocksdb-table-cache-numshardbits`` :dyn: No :scope: Global @@ -1858,7 +2036,7 @@ Empty by default. Specifies the number if table caches. Default value is ``6``. -Allowed range is from ``0`` to ``2147483647``. +Allowed range is from ``0`` to ``19``. .. variable:: rocksdb_table_stats_sampling_pct @@ -2397,14 +2575,27 @@ in MyRocks system tables. .. variable:: rocksdb_memtable_total +This variable shows the memory usage, in bytes, of all memtables. + .. variable:: rocksdb_memtable_unflushed +This variable shows the memory usage, in bytes, of all unflushed memtables. + .. variable:: rocksdb_queries_point +This variable shows the number of single row queries. + .. variable:: rocksdb_queries_range +This variable shows the number of multi/range row queries. + .. variable:: rocksdb_covered_secondary_key_lookups +This variable shows the number of lookups via secondary index that were able to +return all fields requested directly from the secondary index when the +secondary index contained a field that is only a prefix of the +``varchar`` column. + .. variable:: rocksdb_block_cache_add This variable shows the number of blocks added to block cache. @@ -2586,6 +2777,8 @@ This variable shows the number of time file were closed. .. variable:: rocksdb_no_file_errors +This variable shows number of errors trying to read in data from an sst file. + .. variable:: rocksdb_no_file_opens This variable shows the number of time file were opened. @@ -2641,12 +2834,22 @@ This variable shows the number of keys written to the database. .. variable:: rocksdb_number_merge_failures +This variable shows the number of failures performing merge operator actions +in RocksDB. + .. variable:: rocksdb_number_multiget_bytes_read +This variable shows the number of bytes read during RocksDB +``MultiGet()`` calls. + .. variable:: rocksdb_number_multiget_get +This variable shows the number ``MultiGet()`` requests to RocksDB. + .. variable:: rocksdb_number_multiget_keys_read +This variable shows the keys read via ``MultiGet()``. + .. variable:: rocksdb_number_reseeks_iteration This variable shows the number of times reseek happened inside an iteration to @@ -2654,46 +2857,94 @@ skip over large number of keys with same userkey. .. variable:: rocksdb_number_sst_entry_delete +This variable shows the total number of delete markers written by MyRocks. + .. variable:: rocksdb_number_sst_entry_merge +This variable shows the total number of merge keys written by MyRocks. + .. variable:: rocksdb_number_sst_entry_other +This variable shows the total number of non-delete, non-merge, non-put keys +written by MyRocks. + .. variable:: rocksdb_number_sst_entry_put +This variable shows the total number of put keys written by MyRocks. + .. variable:: rocksdb_number_sst_entry_singledelete +This variable shows the total number of single delete keys written by MyRocks. + .. variable:: rocksdb_number_stat_computes +This variable isn't used anymore and will be removed in future releases. + .. variable:: rocksdb_number_superversion_acquires +This variable shows the number of times the superversion structure has been +acquired in RocksDB, this is used for tracking all of the files for the +database. + .. variable:: rocksdb_number_superversion_cleanups .. variable:: rocksdb_number_superversion_releases .. variable:: rocksdb_rate_limit_delay_millis +This variable isn't used anymore and will be removed in future releases. + .. variable:: rocksdb_snapshot_conflict_errors +This variable shows the number of snapshot conflict errors occurring during +write transactions that forces the transaction to rollback. + .. variable:: rocksdb_stall_l0_file_count_limit_slowdowns +This variable shows the slowdowns in write due to L0 being close to full. + .. variable:: rocksdb_stall_locked_l0_file_count_limit_slowdowns +This variable shows the slowdowns in write due to L0 being close to full and +compaction for L0 is already in progress. + .. variable:: rocksdb_stall_l0_file_count_limit_stops +This variable shows the stalls in write due to L0 being full. + .. variable:: rocksdb_stall_locked_l0_file_count_limit_stops +This variable shows the stalls in write due to L0 being full and compaction +for L0 is already in progress. + .. variable:: rocksdb_stall_pending_compaction_limit_stops +This variable shows the stalls in write due to hitting limits set for max +number of pending compaction bytes. + .. variable:: rocksdb_stall_pending_compaction_limit_slowdowns +This variable shows the slowdowns in write due to getting close to limits set +for max number of pending compaction bytes. + .. variable:: rocksdb_stall_memtable_limit_stops +This variable shows the stalls in write due to hitting max number of +``memTables`` allowed. + .. variable:: rocksdb_stall_memtable_limit_slowdowns +This variable shows the slowdowns in writes due to getting close to +max number of memtables allowed. + .. variable:: rocksdb_stall_total_stops +This variable shows the total number of write stalls. + .. variable:: rocksdb_stall_total_slowdowns +This variable shows the total number of write slowdowns. + .. variable:: rocksdb_stall_micros This variable shows how long (in microseconds) the writer had to wait for @@ -2705,6 +2956,9 @@ This variables shows the number of bytes written to WAL. .. variable:: rocksdb_wal_group_syncs +This variable shows the number of group commit WAL file syncs +that have occurred. + .. variable:: rocksdb_wal_synced This variable shows the number of times WAL sync was done. @@ -2724,4 +2978,4 @@ This variable shows the number of writes ending up with timed-out. .. variable:: rocksdb_write_wal -This variable shows the number of Write calls that request WAL +This variable shows the number of Write calls that request WAL. diff --git a/doc/source/release-notes/Percona-Server-5.7.20-18.rst b/doc/source/release-notes/Percona-Server-5.7.20-18.rst index b7bd727a06c4..f810e2dc869b 100644 --- a/doc/source/release-notes/Percona-Server-5.7.20-18.rst +++ b/doc/source/release-notes/Percona-Server-5.7.20-18.rst @@ -64,9 +64,13 @@ MyRocks Changes reduce the number of (confusing) options users and can tweak and push the responsibility down to RocksDB level. -* New :variable:`rocksdb_sim_cache_size` has been implemented to enable the - simulated cache. This can be used to figure out the hit/miss rate +* New :variable:`rocksdb_sim_cache_size` variable has been implemented to + enable the simulated cache. This can be used to figure out the hit/miss rate with a specific cache size without changing the real block cache. * Input can be now sorted by the Primary Key during the bulkload by enababling the :variable:`rocksdb_bulk_load_allow_unsorted` variable. + +* New :variable:`rocksdb_ignore_unknown_options` variable has been implemented, + which when enabled (default) allows RocksDB to receive unknown options and + not exit. From 3c5e72a36af1f65939afebcc20858272ca438f8b Mon Sep 17 00:00:00 2001 From: Pavan Naik Date: Wed, 13 Dec 2017 21:29:17 +0530 Subject: [PATCH 0283/1221] BUG#26135313: MTR IS NOT COPYING .LOG FILE TO FAILURE DIRECTORY Issue: ------ In MySQL-5.6, when a test case fails, MTR creates a failure specific directory under 'var/log' and copies all the test specific contents like data directory, .cnf file, 'tmp' directory etc to that location, but it doesn't copy the log file created. From MySQL-5.7, the log file created is also copied to failure specific directory and then the correct location of it is printed on the console. Fix: ---- - Copy the log file created to the test failure specific directory and then print the path to it on the console. - Removed the uneccessary code creating testname.log.failed file which is the copy of the log file, since the log file is now copied to the failure specific directory when there is a test failure. Change-Id: I2b9c3964f693f3857c3e47ef62d7aebc559b9d03 --- client/mysqltest.cc | 6 ------ mysql-test/mysql-test-run.pl | 27 +++++++++++++++------------ 2 files changed, 15 insertions(+), 18 deletions(-) diff --git a/client/mysqltest.cc b/client/mysqltest.cc index 1ac2ea3f3955..1db8da0ca760 100644 --- a/client/mysqltest.cc +++ b/client/mysqltest.cc @@ -768,12 +768,6 @@ class LogFile { while ((bytes= fread(buf, 1, sizeof(buf), m_file)) > 0) fwrite(buf, 1, bytes, stderr); - if (!lines) - { - fprintf(stderr, - "\nMore results from queries before failure can be found in %s\n", - m_file_name); - } fflush(stderr); DBUG_VOID_RETURN; diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index f41204ddf5b2..4e4cba5b8d7d 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -628,9 +628,16 @@ ($$$) mtr_report(" - skipping '$worker_savedir/'"); rmtree($worker_savedir); } - else { - mtr_report(" - saving '$worker_savedir/' to '$savedir/'"); - rename($worker_savedir, $savedir); + else + { + rename($worker_savedir, $savedir) if $worker_savedir ne $savedir; + + # Look for the test log file and put that in savedir location + my $logfile= "$result->{shortname}" . ".log"; + my $logfilepath= dirname($worker_savedir) . "/" . $logfile; + move($logfilepath, $savedir); + mtr_report(" - the logfile can be found in '$savedir/$logfile'"); + # Move any core files from e.g. mysqltest foreach my $coref (glob("core*"), glob("*.dmp")) { @@ -699,21 +706,17 @@ ($$$) # too many times already my $tname= $result->{name}; my $failures= $result->{failures}; - if ($opt_retry > 1 and $failures >= $opt_retry_failure){ + if ($opt_retry > 1 and $failures >= $opt_retry_failure) + { mtr_report("\nTest $tname has failed $failures times,", "no more retries!\n"); } - else { + else + { mtr_report("\nRetrying test $tname, ". "attempt($retries/$opt_retry)...\n"); - #saving the log file as filename.failed in case of retry - if ( $result->is_failed() ) { - my $worker_logdir= $result->{savedir}; - my $log_file_name=dirname($worker_logdir)."/".$result->{shortname}.".log"; - rename $log_file_name,$log_file_name.".failed"; - } delete($result->{result}); - $result->{retries}= $retries+1; + $result->{retries}= $retries + 1; $result->write_test($sock, 'TESTCASE'); next; } From 175b2ffe7cc1619cdf96cba13137ebd577f82f8f Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Wed, 13 Dec 2017 12:52:39 -0700 Subject: [PATCH 0284/1221] MYR-47 : Investigate how to take in Facebook MySQL rpl writebatch - Removed option rocksdb_rpl_skip_tx_api so unsafe rpl writebatches can not be used until server support is added to ensure safety. - Removed tests that test rpl writebatch option and functionality. - Commit can easily be git revert'ed when ready to re-introduce functionality with safety. --- .../r/rocksdb_rpl_skip_tx_api_basic.result | 68 ------------------- .../t/rocksdb_rpl_skip_tx_api_basic.test | 19 ------ mysql-test/suite/rocksdb/r/i_s_trx_rpl.result | 14 ---- mysql-test/suite/rocksdb/r/rocksdb.result | 1 - .../suite/rocksdb/t/i_s_trx_rpl-master.opt | 1 - .../suite/rocksdb/t/i_s_trx_rpl-slave.opt | 1 - mysql-test/suite/rocksdb/t/i_s_trx_rpl.test | 42 ------------ storage/rocksdb/ha_rocksdb.cc | 6 -- 8 files changed, 152 deletions(-) delete mode 100644 mysql-test/suite/rocksdb.sys_vars/r/rocksdb_rpl_skip_tx_api_basic.result delete mode 100644 mysql-test/suite/rocksdb.sys_vars/t/rocksdb_rpl_skip_tx_api_basic.test delete mode 100644 mysql-test/suite/rocksdb/r/i_s_trx_rpl.result delete mode 100644 mysql-test/suite/rocksdb/t/i_s_trx_rpl-master.opt delete mode 100644 mysql-test/suite/rocksdb/t/i_s_trx_rpl-slave.opt delete mode 100644 mysql-test/suite/rocksdb/t/i_s_trx_rpl.test diff --git a/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_rpl_skip_tx_api_basic.result b/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_rpl_skip_tx_api_basic.result deleted file mode 100644 index 919abdd3e2ae..000000000000 --- a/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_rpl_skip_tx_api_basic.result +++ /dev/null @@ -1,68 +0,0 @@ -CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam; -INSERT INTO valid_values VALUES(1); -INSERT INTO valid_values VALUES(0); -INSERT INTO valid_values VALUES('on'); -INSERT INTO valid_values VALUES('off'); -CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam; -INSERT INTO invalid_values VALUES('\'aaa\''); -SET @start_global_value = @@global.ROCKSDB_RPL_SKIP_TX_API; -SELECT @start_global_value; -@start_global_value -0 -'# Setting to valid values in global scope#' -"Trying to set variable @@global.ROCKSDB_RPL_SKIP_TX_API to 1" -SET @@global.ROCKSDB_RPL_SKIP_TX_API = 1; -SELECT @@global.ROCKSDB_RPL_SKIP_TX_API; -@@global.ROCKSDB_RPL_SKIP_TX_API -1 -"Setting the global scope variable back to default" -SET @@global.ROCKSDB_RPL_SKIP_TX_API = DEFAULT; -SELECT @@global.ROCKSDB_RPL_SKIP_TX_API; -@@global.ROCKSDB_RPL_SKIP_TX_API -0 -"Trying to set variable @@global.ROCKSDB_RPL_SKIP_TX_API to 0" -SET @@global.ROCKSDB_RPL_SKIP_TX_API = 0; -SELECT @@global.ROCKSDB_RPL_SKIP_TX_API; -@@global.ROCKSDB_RPL_SKIP_TX_API -0 -"Setting the global scope variable back to default" -SET @@global.ROCKSDB_RPL_SKIP_TX_API = DEFAULT; -SELECT @@global.ROCKSDB_RPL_SKIP_TX_API; -@@global.ROCKSDB_RPL_SKIP_TX_API -0 -"Trying to set variable @@global.ROCKSDB_RPL_SKIP_TX_API to on" -SET @@global.ROCKSDB_RPL_SKIP_TX_API = on; -SELECT @@global.ROCKSDB_RPL_SKIP_TX_API; -@@global.ROCKSDB_RPL_SKIP_TX_API -1 -"Setting the global scope variable back to default" -SET @@global.ROCKSDB_RPL_SKIP_TX_API = DEFAULT; -SELECT @@global.ROCKSDB_RPL_SKIP_TX_API; -@@global.ROCKSDB_RPL_SKIP_TX_API -0 -"Trying to set variable @@global.ROCKSDB_RPL_SKIP_TX_API to off" -SET @@global.ROCKSDB_RPL_SKIP_TX_API = off; -SELECT @@global.ROCKSDB_RPL_SKIP_TX_API; -@@global.ROCKSDB_RPL_SKIP_TX_API -0 -"Setting the global scope variable back to default" -SET @@global.ROCKSDB_RPL_SKIP_TX_API = DEFAULT; -SELECT @@global.ROCKSDB_RPL_SKIP_TX_API; -@@global.ROCKSDB_RPL_SKIP_TX_API -0 -"Trying to set variable @@session.ROCKSDB_RPL_SKIP_TX_API to 444. It should fail because it is not session." -SET @@session.ROCKSDB_RPL_SKIP_TX_API = 444; -ERROR HY000: Variable 'rocksdb_rpl_skip_tx_api' is a GLOBAL variable and should be set with SET GLOBAL -'# Testing with invalid values in global scope #' -"Trying to set variable @@global.ROCKSDB_RPL_SKIP_TX_API to 'aaa'" -SET @@global.ROCKSDB_RPL_SKIP_TX_API = 'aaa'; -Got one of the listed errors -SELECT @@global.ROCKSDB_RPL_SKIP_TX_API; -@@global.ROCKSDB_RPL_SKIP_TX_API -0 -SET @@global.ROCKSDB_RPL_SKIP_TX_API = @start_global_value; -SELECT @@global.ROCKSDB_RPL_SKIP_TX_API; -@@global.ROCKSDB_RPL_SKIP_TX_API -0 -DROP TABLE valid_values; -DROP TABLE invalid_values; diff --git a/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_rpl_skip_tx_api_basic.test b/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_rpl_skip_tx_api_basic.test deleted file mode 100644 index 32c758d151c7..000000000000 --- a/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_rpl_skip_tx_api_basic.test +++ /dev/null @@ -1,19 +0,0 @@ ---source include/have_rocksdb.inc ---source include/have_myisam.inc - -CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam; -INSERT INTO valid_values VALUES(1); -INSERT INTO valid_values VALUES(0); -INSERT INTO valid_values VALUES('on'); -INSERT INTO valid_values VALUES('off'); - -CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam; -INSERT INTO invalid_values VALUES('\'aaa\''); - ---let $sys_var=ROCKSDB_RPL_SKIP_TX_API ---let $read_only=0 ---let $session=0 ---source ../include/rocksdb_sys_var.inc - -DROP TABLE valid_values; -DROP TABLE invalid_values; diff --git a/mysql-test/suite/rocksdb/r/i_s_trx_rpl.result b/mysql-test/suite/rocksdb/r/i_s_trx_rpl.result deleted file mode 100644 index b7747a662c3a..000000000000 --- a/mysql-test/suite/rocksdb/r/i_s_trx_rpl.result +++ /dev/null @@ -1,14 +0,0 @@ -include/master-slave.inc -Warnings: -Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. -Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. -[connection master] -include/stop_slave.inc -create table t1 (a int) engine=rocksdb; -show variables like 'rocksdb_rpl_skip_tx_api'; -Variable_name Value -rocksdb_rpl_skip_tx_api ON -include/start_slave.inc -found -DROP TABLE t1; -include/rpl_end.inc diff --git a/mysql-test/suite/rocksdb/r/rocksdb.result b/mysql-test/suite/rocksdb/r/rocksdb.result index 23e8c6973149..ff2b009c48dd 100644 --- a/mysql-test/suite/rocksdb/r/rocksdb.result +++ b/mysql-test/suite/rocksdb/r/rocksdb.result @@ -980,7 +980,6 @@ rocksdb_rate_limiter_bytes_per_sec 0 rocksdb_read_free_rpl_tables rocksdb_records_in_range 50 rocksdb_reset_stats OFF -rocksdb_rpl_skip_tx_api OFF rocksdb_seconds_between_stat_computes 3600 rocksdb_signal_drop_index_thread OFF rocksdb_sim_cache_size 0 diff --git a/mysql-test/suite/rocksdb/t/i_s_trx_rpl-master.opt b/mysql-test/suite/rocksdb/t/i_s_trx_rpl-master.opt deleted file mode 100644 index 2672d4ff35e0..000000000000 --- a/mysql-test/suite/rocksdb/t/i_s_trx_rpl-master.opt +++ /dev/null @@ -1 +0,0 @@ ---binlog_format=row diff --git a/mysql-test/suite/rocksdb/t/i_s_trx_rpl-slave.opt b/mysql-test/suite/rocksdb/t/i_s_trx_rpl-slave.opt deleted file mode 100644 index 26543da6804d..000000000000 --- a/mysql-test/suite/rocksdb/t/i_s_trx_rpl-slave.opt +++ /dev/null @@ -1 +0,0 @@ ---binlog_format=row --slave_parallel_workers=1 --loose-rocksdb_rpl_skip_tx_api=ON diff --git a/mysql-test/suite/rocksdb/t/i_s_trx_rpl.test b/mysql-test/suite/rocksdb/t/i_s_trx_rpl.test deleted file mode 100644 index 08e0ccc8c978..000000000000 --- a/mysql-test/suite/rocksdb/t/i_s_trx_rpl.test +++ /dev/null @@ -1,42 +0,0 @@ ---source include/have_rocksdb.inc ---source include/master-slave.inc - ---disable_warnings -connection slave; ---source include/stop_slave.inc ---enable_warnings - -connection master; -create table t1 (a int) engine=rocksdb; ---disable_query_log ---let $aa= 0 -while ($aa < 1000) { - eval insert into t1 values ($aa); - --inc $aa -} ---enable_query_log - -connection slave; -show variables like 'rocksdb_rpl_skip_tx_api'; ---source include/start_slave.inc - ---let $it=0 ---let $stop=0 -while ($stop != 1) { -let $count= query_get_value(select count(*) as Value from information_schema.rocksdb_trx, Value, 1); - if ($count) { - --echo found - --let $stop=1 - } - - if ($it > 1000) { - --echo not found - --let $stop=1 - } - - --inc $it -} - -connection master; -DROP TABLE t1; ---source include/rpl_end.inc diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index 90698a3517ac..fbd81260dd30 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -657,11 +657,6 @@ static MYSQL_THDVAR_STR( "on the slave (i.e. not lookup a row during replication)", nullptr, nullptr, ""); -static MYSQL_SYSVAR_BOOL( - rpl_skip_tx_api, rpl_skip_tx_api_var, PLUGIN_VAR_RQCMDARG, - "Use write batches for replication thread instead of tx api", nullptr, - nullptr, FALSE); - static MYSQL_THDVAR_BOOL(skip_bloom_filter_on_read, PLUGIN_VAR_RQCMDARG, "Skip using bloom filter for reads", nullptr, nullptr, FALSE); @@ -1461,7 +1456,6 @@ static struct st_mysql_sys_var *rocksdb_system_variables[] = { MYSQL_SYSVAR(trace_sst_api), MYSQL_SYSVAR(commit_in_the_middle), MYSQL_SYSVAR(read_free_rpl_tables), - MYSQL_SYSVAR(rpl_skip_tx_api), MYSQL_SYSVAR(bulk_load_size), MYSQL_SYSVAR(merge_buf_size), MYSQL_SYSVAR(enable_bulk_load_api), From 8ef61ba2c2d0aeaa22997c8d63810c321b1d21cf Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Wed, 13 Jul 2016 14:27:10 +0200 Subject: [PATCH 0285/1221] Bug#23228287 LINKING ERROR ON OS X: XPLUGIN NEEDS UNBUILT LIBEVENT.A Move the flag EXCLUDE_FROM_ALL to the libevent target. Remove the SHARED version of libevent, since it is not in use. Change-Id: I5bd6466516a0e4ea5f711cad8c21348dc039a6db (cherry picked from commit 1f27b6a6608bc8ac84074483013c2423dd3d9677) --- cmake/libevent.cmake | 4 +--- libevent/CMakeLists.txt | 5 ++++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/cmake/libevent.cmake b/cmake/libevent.cmake index f311243588fd..6e949e59b669 100644 --- a/cmake/libevent.cmake +++ b/cmake/libevent.cmake @@ -19,9 +19,7 @@ MACRO (MYSQL_USE_BUNDLED_LIBEVENT) SET(LIBEVENT_FOUND TRUE) ADD_DEFINITIONS("-DHAVE_LIBEVENT1") SET(WITH_LIBEVENT "bundled" CACHE STRING "Use bundled libevent") - # Use EXCLUDE_FROM_ALL to build only if another component - # which dependens on libevent is built - ADD_SUBDIRECTORY(libevent EXCLUDE_FROM_ALL) + ADD_SUBDIRECTORY(libevent) GET_TARGET_PROPERTY(src libevent SOURCES) FOREACH(file ${src}) SET(LIBEVENT_SOURCES ${LIBEVENT_SOURCES} ${CMAKE_SOURCE_DIR}/libevent/${file}) diff --git a/libevent/CMakeLists.txt b/libevent/CMakeLists.txt index 03f69f238371..6d2b81104e7d 100644 --- a/libevent/CMakeLists.txt +++ b/libevent/CMakeLists.txt @@ -89,5 +89,8 @@ IF(MSVC) ADD_COMPILE_FLAGS(${LIBEVENT_ALL_SRC} COMPILE_FLAGS "/wd4005 /wd4267 /wd4244") ENDIF() -ADD_LIBRARY(event_share SHARED ${LIBEVENT_ALL_SRC}) ADD_LIBRARY(event STATIC ${LIBEVENT_ALL_SRC}) + +# Use EXCLUDE_FROM_ALL to build only if another component +# which dependens on libevent is built +SET_PROPERTY(TARGET event PROPERTY EXCLUDE_FROM_ALL TRUE) From 4bae6fe90b3d2514ffc3386442db73af613bedc1 Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Fri, 8 Dec 2017 16:22:57 +0100 Subject: [PATCH 0286/1221] Bug#27238252 LDAP AUTHENTICATION PLUGIN(S) ARE NOT BUILT ON FREEBSD PLATFORM On FreeBSD, look in /usr/local for ldap stuff. This patch is for 5.7 --- libmysql/authentication_ldap/CMakeLists.txt | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/libmysql/authentication_ldap/CMakeLists.txt b/libmysql/authentication_ldap/CMakeLists.txt index 5ae3b15d4be9..40ad785b4383 100644 --- a/libmysql/authentication_ldap/CMakeLists.txt +++ b/libmysql/authentication_ldap/CMakeLists.txt @@ -19,6 +19,11 @@ INCLUDE(CheckIncludeFiles) +IF(CMAKE_SYSTEM_NAME MATCHES "FreeBSD") + INCLUDE_DIRECTORIES(SYSTEM /usr/local/include) + LIST(APPEND CMAKE_REQUIRED_INCLUDES "/usr/local/include") +ENDIF() + CHECK_INCLUDE_FILES(sasl/sasl.h HAVE_SASL_H) CHECK_INCLUDE_FILES(lber.h HAVE_LBER_H) @@ -48,7 +53,9 @@ ENDIF() # IF someone like can build the cyrus sasl library on windows and build LDAP authentication sasl client as well. IF (CMAKE_SYSTEM_NAME MATCHES "SunOS") SET(SASL_LIBRARY "sasl") -ELSE () +ELSEIF(CMAKE_SYSTEM_NAME MATCHES "FreeBSD") + SET(SASL_LIBRARY "-L/usr/local/lib -R/usr/local/lib -lsasl2") +ELSE() SET(SASL_LIBRARY "sasl2") ENDIF () From 291b965aa0b19448dadaf43e5b32c8eeaee24a72 Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Mon, 11 Dec 2017 16:35:58 +0100 Subject: [PATCH 0287/1221] From 0690dabc7e7e0642aee284a296c9931222abf1ec Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Wed, 29 Nov 2017 16:37:26 +0100 Subject: [PATCH 0288/1221] Bug#26612465 BUILDING WITH CMAKE 3.9.0 OR NEWER GIVES DEPRECATION WARNINGS [noclose] Remove cmake policies no longer in use: CMP0026 can go away, we no longer use the LOCATION property. Simplify INSTALL_DEBUG_TARGET. Now that we know the location of executables, plugins and convenience libraries we don't need the LOCATION property. Calls to INSTALL_DEBUG_TARGET were spread out over misc. cmake files. Collect them in one place for static libraries. This is a manual/partial backport of commit f16f089d3c17c22a44274383976218f9b6a58d08 Author: Tor Didriksen Date: Wed Sep 13 10:42:00 2017 +0200 --- CMakeLists.txt | 4 +- cmake/install_macros.cmake | 130 ++++++++++++++++----- cmake/plugin.cmake | 6 + extra/yassl/CMakeLists.txt | 6 +- extra/yassl/taocrypt/CMakeLists.txt | 6 +- libmysql/CMakeLists.txt | 17 ++- libmysql/authentication_win/CMakeLists.txt | 6 +- libmysqld/CMakeLists.txt | 2 +- mysys/CMakeLists.txt | 6 +- mysys_ssl/CMakeLists.txt | 7 +- sql/CMakeLists.txt | 22 ++-- strings/CMakeLists.txt | 6 +- vio/CMakeLists.txt | 6 +- zlib/CMakeLists.txt | 6 +- 14 files changed, 141 insertions(+), 89 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 406ab125b79d..4951a86b9169 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -34,12 +34,10 @@ IF(CMAKE_VERSION VERSION_EQUAL "2.8.12" OR CMAKE_POLICY(SET CMP0022 OLD) ENDIF() -# We use the LOCATION target property (CMP0026) -# and get_target_property() for non-existent targets (CMP0045) +# We use get_target_property() for non-existent targets (CMP0045) # and INSTALL_NAME_DIR (CMP0042) IF(CMAKE_VERSION VERSION_EQUAL "3.0.0" OR CMAKE_VERSION VERSION_GREATER "3.0.0") - CMAKE_POLICY(SET CMP0026 OLD) CMAKE_POLICY(SET CMP0045 OLD) CMAKE_POLICY(SET CMP0042 OLD) ENDIF() diff --git a/cmake/install_macros.cmake b/cmake/install_macros.cmake index e4a7577fa122..32858cf15ce0 100644 --- a/cmake/install_macros.cmake +++ b/cmake/install_macros.cmake @@ -16,6 +16,7 @@ GET_FILENAME_COMPONENT(MYSQL_CMAKE_SCRIPT_DIR ${CMAKE_CURRENT_LIST_FILE} PATH) INCLUDE(${MYSQL_CMAKE_SCRIPT_DIR}/cmake_parse_arguments.cmake) +# For windows: install .pdf file for each target. MACRO (INSTALL_DEBUG_SYMBOLS targets) IF(MSVC) FOREACH(target ${targets}) @@ -103,41 +104,112 @@ FUNCTION(MYSQL_INSTALL_TARGETS) SET(INSTALL_LOCATION) ENDFUNCTION() -# Optionally install mysqld/client/embedded from debug build run. outside of the current build dir +# Optionally install mysqld/client/embedded from debug build run. +# outside of the current build dir # (unless multi-config generator is used like Visual Studio or Xcode). # For single-config generators like Makefile generators we default Debug # build directory to ${buildroot}/../debug. GET_FILENAME_COMPONENT(BINARY_PARENTDIR ${CMAKE_BINARY_DIR} PATH) -SET(DEBUGBUILDDIR "${BINARY_PARENTDIR}/debug" CACHE INTERNAL "Directory of debug build") +SET(DEBUGBUILDDIR "${BINARY_PARENTDIR}/debug" CACHE INTERNAL + "Directory of debug build") FUNCTION(INSTALL_DEBUG_TARGET target) - MYSQL_PARSE_ARGUMENTS(ARG - "DESTINATION;RENAME;PDB_DESTINATION;COMPONENT;SUFFIX" - "" - ${ARGN} - ) + MYSQL_PARSE_ARGUMENTS(ARG + "DESTINATION;RENAME;COMPONENT" + "" + ${ARGN} + ) + + # Relevant only for RelWithDebInfo builds + IF(BUILD_IS_SINGLE_CONFIG AND CMAKE_BUILD_TYPE STREQUAL "Debug") + RETURN() + ENDIF() + GET_TARGET_PROPERTY(target_type ${target} TYPE) + GET_TARGET_PROPERTY(target_name ${target} DEBUG_OUTPUT_NAME) + IF(NOT target_name) + GET_TARGET_PROPERTY(target_name ${target} OUTPUT_NAME) + IF(NOT target_name) + SET(target_name "${target}") + ENDIF() + ENDIF() + + # On windows we install client libraries + IF(target_type STREQUAL "STATIC_LIBRARY") + SET(debug_target_location + "${CMAKE_BINARY_DIR}/archive_output_directory/Debug/${target_name}.lib") + # On UNIX we install mysqlserver which has name libmysqld.a + IF(UNIX) + IF(BUILD_IS_SINGLE_CONFIG) + SET(debug_target_location + "${DEBUGBUILDDIR}/archive_output_directory/lib${target_name}.a") + ELSE() + SET(debug_target_location + "${CMAKE_BINARY_DIR}/archive_output_directory/Debug/lib${target_name}.a") + ENDIF() + MESSAGE(STATUS + "library target ${target} debug_target ${debug_target_location}") + ENDIF() + # mysqld or mysqld-debug + ELSEIF(target_type STREQUAL "EXECUTABLE") + GET_TARGET_PROPERTY(runtime_output_directory ${target} + RUNTIME_OUTPUT_DIRECTORY) + IF(NOT runtime_output_directory) + MESSAGE(FATAL_ERROR "unknown executable!!") + ENDIF() + + STRING(REPLACE + "${CMAKE_BINARY_DIR}/" "" RELATIVE_DIR ${runtime_output_directory}) + + SET(EXE_SUFFIX "${CMAKE_EXECUTABLE_SUFFIX}") + IF(BUILD_IS_SINGLE_CONFIG) + SET(debug_target_location + "${DEBUGBUILDDIR}/${RELATIVE_DIR}/${target_name}${EXE_SUFFIX}") + ELSE() + SET(debug_target_location + "${CMAKE_BINARY_DIR}/${RELATIVE_DIR}/Debug/${target_name}${EXE_SUFFIX}") + ENDIF() + MESSAGE(STATUS + "executable target ${target} debug_target ${debug_target_location}") + + # Plugins and components + ELSEIF(target_type STREQUAL "MODULE_LIBRARY") + SET(DLL_SUFFIX "${CMAKE_SHARED_LIBRARY_SUFFIX}") + IF(APPLE) + SET(DLL_SUFFIX ".so") # we do not use .dylib + ENDIF() + GET_TARGET_PROPERTY( + target_output_directory ${target} LIBRARY_OUTPUT_DIRECTORY) + IF(NOT target_output_directory) + MESSAGE(FATAL_ERROR "unknown module!!") + ENDIF() + + STRING(REPLACE + "${CMAKE_BINARY_DIR}/" "" RELATIVE_DIR ${target_output_directory}) + + IF(BUILD_IS_SINGLE_CONFIG) + SET(debug_target_location + "${DEBUGBUILDDIR}/${RELATIVE_DIR}/${target_name}${DLL_SUFFIX}") + ELSE() + SET(debug_target_location + "${CMAKE_BINARY_DIR}/${RELATIVE_DIR}/Debug/${target_name}${DLL_SUFFIX}") + ENDIF() + # MESSAGE(STATUS + # "module target ${target} debug_target ${debug_target_location}") + ENDIF() + + # This is only used for mysqld / mysqld-debug / libmysqlserver.a IF(ARG_RENAME) - SET(RENAME_PARAM RENAME ${ARG_RENAME}${CMAKE_${target_type}_SUFFIX}) + SET(RENAME_PARAM RENAME ${ARG_RENAME}) ELSE() SET(RENAME_PARAM) ENDIF() + IF(NOT ARG_DESTINATION) MESSAGE(FATAL_ERROR "Need DESTINATION parameter for INSTALL_DEBUG_TARGET") ENDIF() - GET_TARGET_PROPERTY(target_location ${target} LOCATION) - IF(BUILD_IS_SINGLE_CONFIG) - STRING(REPLACE "${CMAKE_BINARY_DIR}" "${DEBUGBUILDDIR}" debug_target_location "${target_location}") - ELSE() - STRING(REPLACE "${CMAKE_CFG_INTDIR}" "Debug" debug_target_location "${target_location}" ) - ENDIF() - IF(ARG_SUFFIX) - GET_FILENAME_COMPONENT(ext ${debug_target_location} EXT) - GET_FILENAME_COMPONENT(fn ${debug_target_location} NAME_WE) - STRING(REPLACE "${fn}${ext}" "${fn}${ARG_SUFFIX}${ext}" - debug_target_location "${debug_target_location}" ) - ENDIF() + IF(NOT ARG_COMPONENT) SET(ARG_COMPONENT DebugBinaries) ENDIF() @@ -180,20 +252,18 @@ FUNCTION(INSTALL_DEBUG_TARGET target) COMPONENT ${ARG_COMPONENT} OPTIONAL) - IF(MSVC) + # For windows, install .pdb files for .exe and .dll files. + IF(MSVC AND NOT target_type STREQUAL "STATIC_LIBRARY") GET_FILENAME_COMPONENT(ext ${debug_target_location} EXT) - STRING(REPLACE "${ext}" ".pdb" debug_pdb_target_location "${debug_target_location}" ) + STRING(REPLACE "${ext}" ".pdb" + debug_pdb_target_location "${debug_target_location}" ) IF (RENAME_PARAM) - IF(NOT ARG_PDB_DESTINATION) - STRING(REPLACE "${ext}" ".pdb" "${ARG_RENAME}" pdb_rename) - SET(PDB_RENAME_PARAM RENAME "${pdb_rename}") - ENDIF() - ENDIF() - IF(NOT ARG_PDB_DESTINATION) - SET(ARG_PDB_DESTINATION "${ARG_DESTINATION}") + STRING(REPLACE "${ext}" ".pdb" pdb_rename "${ARG_RENAME}") + SET(PDB_RENAME_PARAM RENAME "${pdb_rename}") ENDIF() + INSTALL(FILES ${debug_pdb_target_location} - DESTINATION ${ARG_PDB_DESTINATION} + DESTINATION ${ARG_DESTINATION} ${PDB_RENAME_PARAM} CONFIGURATIONS Release RelWithDebInfo COMPONENT ${ARG_COMPONENT} diff --git a/cmake/plugin.cmake b/cmake/plugin.cmake index b7a1709b3804..d31968d46be9 100644 --- a/cmake/plugin.cmake +++ b/cmake/plugin.cmake @@ -256,6 +256,12 @@ MACRO(MYSQL_ADD_PLUGIN) ENDIF() SET_TARGET_PROPERTIES(${target} PROPERTIES OUTPUT_NAME "${ARG_MODULE_OUTPUT_NAME}") + + # Help INSTALL_DEBUG_TARGET to locate the plugin + SET_TARGET_PROPERTIES(${target} PROPERTIES + LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + ) + # Install dynamic library SET(INSTALL_COMPONENT Server) IF(ARG_TEST_ONLY) diff --git a/extra/yassl/CMakeLists.txt b/extra/yassl/CMakeLists.txt index 742014308f37..f0339962404a 100644 --- a/extra/yassl/CMakeLists.txt +++ b/extra/yassl/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2006, 2016, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 2017, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -42,7 +42,3 @@ SET(YASSL_SOURCES src/buffer.cpp src/cert_wrapper.cpp src/crypto_wrapper.cpp sr ../../client/get_password.c ) ADD_CONVENIENCE_LIBRARY(yassl ${YASSL_SOURCES}) - -IF(MSVC) - INSTALL_DEBUG_TARGET(yassl DESTINATION ${INSTALL_LIBDIR}/debug) -ENDIF() diff --git a/extra/yassl/taocrypt/CMakeLists.txt b/extra/yassl/taocrypt/CMakeLists.txt index 3d3d1d5575cd..c8571a807b37 100644 --- a/extra/yassl/taocrypt/CMakeLists.txt +++ b/extra/yassl/taocrypt/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2006, 2016, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 2017, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -34,7 +34,3 @@ IF(HAVE_EXPLICIT_TEMPLATE_INSTANTIATION) ENDIF() ADD_CONVENIENCE_LIBRARY(taocrypt ${TAOCRYPT_SOURCES}) - -IF(MSVC) - INSTALL_DEBUG_TARGET(taocrypt DESTINATION ${INSTALL_LIBDIR}/debug) -ENDIF() diff --git a/libmysql/CMakeLists.txt b/libmysql/CMakeLists.txt index 043422b9192c..79fe2f8bb3b2 100644 --- a/libmysql/CMakeLists.txt +++ b/libmysql/CMakeLists.txt @@ -239,8 +239,21 @@ MERGE_CONVENIENCE_LIBRARIES(mysqlclient ${LIBS} COMPONENT Development) # Visual Studio users need debug static library for debug projects IF(MSVC) - INSTALL_DEBUG_TARGET(mysqlclient DESTINATION ${INSTALL_LIBDIR}/debug) - INSTALL_DEBUG_TARGET(clientlib DESTINATION ${INSTALL_LIBDIR}/debug) + INSTALL_DEBUG_TARGET(mysqlclient DESTINATION ${INSTALL_LIBDIR}/debug) + + INSTALL_DEBUG_TARGET(auth_win_client DESTINATION ${INSTALL_LIBDIR}/debug) + INSTALL_DEBUG_TARGET(clientlib DESTINATION ${INSTALL_LIBDIR}/debug) + INSTALL_DEBUG_TARGET(mysys DESTINATION ${INSTALL_LIBDIR}/debug) + INSTALL_DEBUG_TARGET(mysys_ssl DESTINATION ${INSTALL_LIBDIR}/debug) + INSTALL_DEBUG_TARGET(strings DESTINATION ${INSTALL_LIBDIR}/debug) + INSTALL_DEBUG_TARGET(vio DESTINATION ${INSTALL_LIBDIR}/debug) + IF(WITH_SSL STREQUAL "bundled") + INSTALL_DEBUG_TARGET(taocrypt DESTINATION ${INSTALL_LIBDIR}/debug) + INSTALL_DEBUG_TARGET(yassl DESTINATION ${INSTALL_LIBDIR}/debug) + ENDIF() + IF(WITH_ZLIB STREQUAL "bundled") + INSTALL_DEBUG_TARGET(zlib DESTINATION ${INSTALL_LIBDIR}/debug) + ENDIF() ENDIF() IF(UNIX) diff --git a/libmysql/authentication_win/CMakeLists.txt b/libmysql/authentication_win/CMakeLists.txt index 447a69bae242..5c96b442c601 100644 --- a/libmysql/authentication_win/CMakeLists.txt +++ b/libmysql/authentication_win/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -31,7 +31,3 @@ TARGET_LINK_LIBRARIES(auth_win_client Secur32) # In IDE, group headers in a separate folder. SOURCE_GROUP(Headers REGULAR_EXPRESSION ".*h$") - -IF(MSVC) - INSTALL_DEBUG_TARGET(auth_win_client DESTINATION ${INSTALL_LIBDIR}/debug) -ENDIF() diff --git a/libmysqld/CMakeLists.txt b/libmysqld/CMakeLists.txt index 9f106302fde8..179fdf85d3c3 100644 --- a/libmysqld/CMakeLists.txt +++ b/libmysqld/CMakeLists.txt @@ -294,7 +294,7 @@ ENDIF() IF(UNIX) INSTALL_DEBUG_TARGET(mysqlserver DESTINATION ${INSTALL_LIBDIR} RENAME - ${CMAKE_STATIC_LIBRARY_PREFIX}mysqld-debug) + libmysqld-debug.a) ENDIF() IF(MSVC AND NOT DISABLE_SHARED) diff --git a/mysys/CMakeLists.txt b/mysys/CMakeLists.txt index 7ed7ef2313d6..146bc799e511 100644 --- a/mysys/CMakeLists.txt +++ b/mysys/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2006, 2016, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 2017, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -85,7 +85,3 @@ ADD_TEST(queues_test queues) ADD_EXECUTABLE(base64_test base64.c) SET_TARGET_PROPERTIES(base64_test PROPERTIES COMPILE_FLAGS "-DMAIN") TARGET_LINK_LIBRARIES(base64_test mysys) - -IF(MSVC) - INSTALL_DEBUG_TARGET(mysys DESTINATION ${INSTALL_LIBDIR}/debug) -ENDIF() diff --git a/mysys_ssl/CMakeLists.txt b/mysys_ssl/CMakeLists.txt index eec1be7127ad..552029fca130 100644 --- a/mysys_ssl/CMakeLists.txt +++ b/mysys_ssl/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2012, 2016, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2012, 2017, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -49,8 +49,3 @@ IF(WIN32 AND NOT WITH_SSL STREQUAL "bundled") TARGET_LINK_LIBRARIES(mysys_ssl crypt32) ENDIF() DTRACE_INSTRUMENT(mysys_ssl) - -IF(MSVC) - INSTALL_DEBUG_TARGET(mysys_ssl DESTINATION ${INSTALL_LIBDIR}/debug) -ENDIF() - diff --git a/sql/CMakeLists.txt b/sql/CMakeLists.txt index 3da1111a57ee..c9ebfb25f88e 100644 --- a/sql/CMakeLists.txt +++ b/sql/CMakeLists.txt @@ -553,18 +553,16 @@ IF(WITH_MYSQLD_LDFLAGS) "${MYSQLD_LINK_FLAGS} ${WITH_MYSQLD_LDFLAGS}") ENDIF() -IF(DEBUG_EXTNAME) - INSTALL_DEBUG_TARGET(mysqld - DESTINATION ${INSTALL_SBINDIR} - PDB_DESTINATION ${INSTALL_SBINDIR} - SUFFIX "-debug") -ELSE() - INSTALL_DEBUG_TARGET(mysqld - DESTINATION ${INSTALL_SBINDIR} - PDB_DESTINATION ${INSTALL_SBINDIR}/debug - RENAME mysqld-debug) -ENDIF() - +# Help INSTALL_DEBUG_TARGET to locate it +SET_TARGET_PROPERTIES(mysqld PROPERTIES + RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + +# See DEBUG_EXTNAME above: mysqld may already have name mysqld-debug, +# and the rename is a no-op. If it is called 'mysqld' we rename it. +INSTALL_DEBUG_TARGET(mysqld + DESTINATION ${INSTALL_SBINDIR} + RENAME mysqld-debug${CMAKE_EXECUTABLE_SUFFIX} +) # Handle out-of-source build from source package with possibly broken # bison. Copy bison output to from source to build directory, if not already diff --git a/strings/CMakeLists.txt b/strings/CMakeLists.txt index c0ce839d81ab..06658a7f2fcb 100644 --- a/strings/CMakeLists.txt +++ b/strings/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2006, 2014, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 2017, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -35,7 +35,3 @@ ADD_CONVENIENCE_LIBRARY(strings ${STRINGS_SOURCES}) ADD_EXECUTABLE(conf_to_src EXCLUDE_FROM_ALL conf_to_src.c) TARGET_LINK_LIBRARIES(conf_to_src strings) - -IF(MSVC) - INSTALL_DEBUG_TARGET(strings DESTINATION ${INSTALL_LIBDIR}/debug) -ENDIF() diff --git a/vio/CMakeLists.txt b/vio/CMakeLists.txt index 903b91709dc5..7dbadaafc3a4 100644 --- a/vio/CMakeLists.txt +++ b/vio/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2006, 2014, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 2017, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -33,7 +33,3 @@ ENDIF() ADD_CONVENIENCE_LIBRARY(vio ${VIO_SOURCES}) TARGET_LINK_LIBRARIES(vio ${LIBSOCKET}) - -IF(MSVC) - INSTALL_DEBUG_TARGET(vio DESTINATION ${INSTALL_LIBDIR}/debug) -ENDIF() diff --git a/zlib/CMakeLists.txt b/zlib/CMakeLists.txt index 405d7e8c5df9..ed21a4039f68 100644 --- a/zlib/CMakeLists.txt +++ b/zlib/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2006, 2016, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 2017, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -33,7 +33,3 @@ SET(ZLIB_SOURCES ) ADD_CONVENIENCE_LIBRARY(zlib ${ZLIB_SOURCES}) - -IF(MSVC) - INSTALL_DEBUG_TARGET(zlib DESTINATION ${INSTALL_LIBDIR}/debug) -ENDIF() From e36b9d93524c2883df0c5acebcec65fffd4211fe Mon Sep 17 00:00:00 2001 From: hrvojem Date: Wed, 13 Dec 2017 14:42:23 +0100 Subject: [PATCH 0289/1221] Documentation for General InnoDB Tablespace encryption and keyring_vault plugin --- doc/source/index.rst | 1 + .../management/data_at_rest_encryption.rst | 192 ++++++++++++++++++ 2 files changed, 193 insertions(+) create mode 100644 doc/source/management/data_at_rest_encryption.rst diff --git a/doc/source/index.rst b/doc/source/index.rst index a96b366a39b8..44a17973347e 100644 --- a/doc/source/index.rst +++ b/doc/source/index.rst @@ -123,6 +123,7 @@ Management Improvements management/audit_log_plugin management/start_transaction_with_consistent_snapshot management/extended_show_grants + management/data_at_rest_encryption Diagnostics Improvements ======================== diff --git a/doc/source/management/data_at_rest_encryption.rst b/doc/source/management/data_at_rest_encryption.rst new file mode 100644 index 000000000000..42f22ffcab63 --- /dev/null +++ b/doc/source/management/data_at_rest_encryption.rst @@ -0,0 +1,192 @@ +.. _data_at_rest_encryption: + +======================= +Data at Rest Encryption +======================= + +This feature is considered **BETA** quality. + +.. contents:: + :local: + +.. _innodb_general_tablespace_encryption: + +InnoDB general tablespace encryption +==================================== + +In |Percona Server| :rn:`5.7.20-18` existing tablespace encryption support +has been extended to handle general tablespaces. A general tablespace is either +fully encrypted, covering all the tables inside, either not encrypted at all. +It is not possible to have only some of the tables in the general tablespace +encrypted. + +This feature extends the `CREATE TABLESPACE +`_ +statement to accept the ``ENCRYPTION='Y/N'`` option. + +Prerequisites +------------- + +This feature requires a keyring plugin, for example `keyring_file +`_ or +:ref:`keyring_vault_plugin` to be loaded before it can be used. + +.. warning:: + + Only one keyring plugin should be enabled at a time. Enabling multiple + keyring plugins is unsupported and may result in data loss. + +Usage +----- + +General tablespace encryption is enabled by the following syntax extension: + +.. code-block:: mysql + + mysql> CREATE TABLESPACE tablespace_name ... ENCRYPTION='Y' + +Attempts to create or to move tables, including partitioned ones, to a general +tablespace with an incompatible encryption setting are diagnosed and aborted. + +As you cannot move tables between encrypted and unencrypted tablespaces, +you will need to create another table, add it to a specific tablespace and run +``INSERT INTO SELECT`` from the table you want to move from, and then you will +get encrypted or decrypted table with your desired content. + +Example +------- + +To create an encrypted tablespace run: + +.. code-block:: mysql + + mysql> CREATE TABLESPACE foo ADD DATAFILE 'foo.ibd' ENCRYPTION='Y'; + +To add an encrypted table to that table space run: + +.. code-block:: mysql + + mysql> CREATE TABLE t1 (a INT, b TEXT) TABLESPACE foo ENCRYPTION="Y"; + +Trying to add unencrypted table to this table space will result in an error: + +.. code-block:: mysql + + mysql> CREATE TABLE t3 (a INT, b TEXT) TABLESPACE foo ENCRYPTION="N"; + ERROR 1478 (HY000): InnoDB: Tablespace `foo` can contain only an ENCRYPTED tables. + +.. note:: + + |Percona XtraBackup| currently doesn't support backup of encrypted general + tablespaces. + +.. _keyring_vault_plugin: + +Keyring Vault plugin +==================== + +In |Percona Server| :rn:`5.7.20-18` a ``keyring_vault`` plugin has been +implemented that can be used to store the encryption keys inside the +`Hashicorp Vault server `_. + +Installation +------------ + +The safest way to load the plugin is to do it on the server startup by +using `--early-plugin-load variable +`_ +option: + +.. code-block:: bash + + --early-plugin-load="keyring_vault=keyring_vault.so" \ + --loose-keyring_vault_config="/home/mysql/keyring_vault.conf" + +It should be loaded this way to be able to facilitate recovery for encrypted +tables. + +Apart from installing plugin you also need to set the +:variable:`keyring_vault_config` variable. This variable should point to the +keyring_vault configuration file, whose contents are discussed below. + +This plugin supports the SQL interface for keyring key management described in +`General-Purpose Keyring Key-Management Functions +`_ +manual. + +To enable the functions you'll need to install the ``keyring_udf`` plugin: + +.. code-block:: mysql + + mysql> INSTALL PLUGIN keyring_udf SONAME 'keyring_udf.so'; + +Usage +----- + +On plugin initialization ``keyring_vault`` connects to the Vault server using +credentials stored in the credentials file. Location of this file is specified +in by :variable:`keyring_vault_config`. On successful initialization it +retrieves keys signatures and stores them inside an in-memory hash map. + +Configuration file should contain following information: + +* ``vault_url`` - the address of the server where Vault is running. It can be a + named address – like in example or ip address. The important part is that + it should start with ``https://`` + +* ``secret_mount_point`` - the name of the mount point where ``keyring_vault`` + will store keys + +* ``token`` - the token that ``keyring_vault`` should use when connecting to + the Vault. When ``keyring_vault`` is to used only for transparent data + encryption and not for ``keyring_udf`` plugin, the token allows for storing + new keys in secret mount point. However if ``keyring_udf`` plugin is used + with ``keyring_vault`` plugin this token also allows removing keys from + vault. This is due to the fact that ``keyring_udf`` also supports + ``keyring_key_remove`` operation. + +* ``vault_ca [optional]`` - this variable needs to be specified only when + Vault's CA certificate is not trusted by the machine that is going to connect + to the Vault server. In this case this variable should point to CA + certificate that was used to signed Vault's certificates. + +An example of the configuration file looks like this: :: + + vault_url = https://vault.public.com:8202 + secret_mount_point = secret + token = 58a20c08-8001-fd5f-5192-7498a48eaf20 + vault_ca = /data/keyring_vault_confs/vault_ca.crt + +When a key is fetched from a ``keyring`` for the first time ``keyring_vault`` +goes to the Vault server and retrieves key's type and data. Next it queries +the Vault server for the key type and data and caches it locally. + +Key deletion will permanently delete key from in-memory hash map and the Vault +server. + +.. note:: + + |Percona XtraBackup| currently doesn't support backup of tables encrypted + with :ref:`keyring_vault_plugin`. + +System Variables +---------------- + +.. variable:: keyring_vault_config + + :version 5.7.20-18: Implemented + :cli: ``--keyring-vault-config`` + :dyn: Yes + :scope: Global + :vartype: Text + :default: + +This variable is used to define the location of the +:ref:`keyring_vault_plugin` configuration file. + +Other reading +------------- + +* `Vault Documentation `_ +* `General-Purpose Keyring Key-Management Functions + `_ From 63d4f7fa3b2eed8457498482732489bc7899fb30 Mon Sep 17 00:00:00 2001 From: Vlad Lesin Date: Fri, 15 Sep 2017 16:52:56 +0300 Subject: [PATCH 0290/1221] lp-1708033: heartbeats/fakerotate cause a forced sync_master_info See also mysql-85158. Description: lp-1708033: heartbeats/fakerotate cause a forced sync_master_info See also mysql-85158. Description: 1) When slave connects to master, it sends COM_BINLOG_DUMP_GTID command with executed gtids set, see: 0 Binlog_sender::Binlog_sender (this=0x7ffff1179560, thd=0x7fff94000b70, start_file=0x7ffff117a1c0 "", start_pos=4, exclude_gtids=0x7ffff1179f90, flag=0) at ./sql/rpl_binlog_sender.cc:55 1 0x0000000001936fcf in mysql_binlog_send (thd=0x7fff94000b70, log_ident=0x7ffff117a1c0 "", pos=4, slave_gtid_executed=0x7ffff1179f90, flags=0) at ./sql/rpl_master.cc:410 2 0x0000000001936e75 in com_binlog_dump_gtid (thd=0x7fff94000b70, packet=0x7fff9400a761 "", packet_length=30) at ./sql/rpl_master.cc:396 3 0x0000000001646634 in dispatch_command (thd=0x7fff94000b70, com_data=0x7ffff117ade0, command=COM_BINLOG_DUMP_GTID) at ./sql/sql_parse.cc:1709 4 0x00000000016448d6 in do_command (thd=0x7fff94000b70) at ./sql/sql_parse.cc:1021 5 0x0000000001796a22 in handle_connection (arg=0x34bd880) at ./sql/conn_handler/connection_handler_per_thread.cc:312 6 0x0000000001e7cd03 in pfs_spawn_thread (arg=0x3902460) at ./storage/perfschema/pfs.cc:2188 7 0x00007ffff6f5e6ba in start_thread (arg=0x7ffff117b700) at pthread_create.c:333 8 0x00007ffff63f33dd in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109 2) Then master starts sending events, if it reads binary logs, and if gtid of some event belongs to already executed slaves gtids set, then HEARTBEAT is sent. See: 0 Binlog_sender::send_heartbeat_event (this=0x7ffff11fb560, log_pos=39340) at ./sql/rpl_binlog_sender.cc:1145 1 0x000000000193a362 in Binlog_sender::send_events (this=0x7ffff11fb560, log_cache=0x7ffff11fafa0, end_pos=39340) at ./sql/rpl_binlog_sender.cc:517 2 0x0000000001939b41 in Binlog_sender::send_binlog (this=0x7ffff11fb560, log_cache=0x7ffff11fafa0, start_pos=123) at ./sql/rpl_binlog_sender.cc:348 3 0x000000000193944a in Binlog_sender::run (this=0x7ffff11fb560) at ./sql/rpl_binlog_sender.cc:225 4 0x0000000001936fde in mysql_binlog_send (thd=0x7fff9c027e10, log_ident=0x7ffff11fc1c0 "", pos=4, slave_gtid_executed=0x7ffff11fbf90, flags=0) at ./sql/rpl_master.cc:412 5 0x0000000001936e75 in com_binlog_dump_gtid (thd=0x7fff9c027e10, packet=0x7fff9c0110d1 "", packet_length=86) at ./sql/rpl_master.cc:396 6 0x0000000001646634 in dispatch_command (thd=0x7fff9c027e10, com_data=0x7ffff11fcde0, command=COM_BINLOG_DUMP_GTID) at ./sql/sql_parse.cc:1709 7 0x00000000016448d6 in do_command (thd=0x7fff9c027e10) at ./sql/sql_parse.cc:1021 8 0x0000000001796a22 in handle_connection (arg=0x34bd880) at ./sql/conn_handler/connection_handler_per_thread.cc:312 9 0x0000000001e7cd03 in pfs_spawn_thread (arg=0x3902460) at ./storage/perfschema/pfs.cc:2188 10 0x00007ffff6f5e6ba in start_thread (arg=0x7ffff11fd700) at pthread_create.c:333 11 0x00007ffff63f33dd in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109 If we look into: int Binlog_sender::send_events(IO_CACHE *log_cache, my_off_t end_pos) { ... if (m_exclude_gtid && (in_exclude_group= skip_event(event_ptr, event_len, in_exclude_group))) { ... } ... if (unlikely(in_exclude_group)) { if (send_heartbeat_event(log_pos)) DBUG_RETURN(1); } ... } we will see how hearbeat is being sent. See also Binlog_sender::skip_event() to understand how event is treated to be skipped and Binlog_sender::send_heartbeat_event() to see how hearbeat is sent. 3) Slave receives the heartbeat, see bool queue_event(Master_info* mi,const char* buf, ulong event_len) { ... case binary_log::HEARTBEAT_LOG_EVENT: ... } and writes 'rotate log' event into relay log, see write_ignored_events_info_to_relay_log() from which flush_master_info() is invoked with 'force' parameter equal to true, what means mi repository will be updated ignoring sync_master_info server option. See also the following backtrace: 0 Rpl_info_table::do_flush_info (this=0x7fffa0f39950, force=true) at ./sql/rpl_info_table.cc:201 1 0x000000000196537c in Rpl_info_handler::flush_info (this=0x7fffa0f39950, force=true) at ./sql/rpl_info_handler.h:94 2 0x0000000001964182 in Master_info::flush_info (this=0x7fffa007a2c0, force=true) at ./sql/rpl_mi.cc:263 3 0x0000000001940f32 in flush_master_info (mi=0x7fffa007a2c0, force=true) at ./sql/rpl_slave.cc:1444 4 0x0000000001946a1f in write_ignored_events_info_to_relay_log (thd=0x7fff9c027e70, mi=0x7fffa007a2c0) at ./sql/rpl_slave.cc:3428 5 0x0000000001957203 in queue_event (mi=0x7fffa007a2c0, buf=0x7fff9c00a9f1 "", event_len=40) at ./sql/rpl_slave.cc:8467 6 0x000000000194ef74 in handle_slave_io (arg=0x7fffa007a2c0) at ./sql/rpl_slave.cc:5861 7 0x0000000001e7cd03 in pfs_spawn_thread (arg=0x7fffa0013800) at ./storage/perfschema/pfs.cc:2188 8 0x00007ffff6f5e6ba in start_thread (arg=0x7ffff11fd700) at pthread_create.c:333 9 0x00007ffff63f33dd in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109 So if we have the following topology 1->2, 2->3, 1->3 and then stop slave 1->2, generate events on 1, then sync 1->3, and start 1->2, we will see a lot of hearbeats(greater or equal to the number of events, generated on 1) on 3, and a lot of writes(greater or equal to the number of hearbeats) in master info reposirory. Solution: The solution is not to force mi repository flush if hearbeat is received. --- mysql-test/suite/rpl/r/bug85158.result | 59 ++++++++++++++ mysql-test/suite/rpl/t/bug85158.cnf | 24 ++++++ mysql-test/suite/rpl/t/bug85158.test | 108 +++++++++++++++++++++++++ sql/rpl_slave.cc | 13 +-- 4 files changed, 199 insertions(+), 5 deletions(-) create mode 100644 mysql-test/suite/rpl/r/bug85158.result create mode 100644 mysql-test/suite/rpl/t/bug85158.cnf create mode 100644 mysql-test/suite/rpl/t/bug85158.test diff --git a/mysql-test/suite/rpl/r/bug85158.result b/mysql-test/suite/rpl/r/bug85158.result new file mode 100644 index 000000000000..ec7eb584487f --- /dev/null +++ b/mysql-test/suite/rpl/r/bug85158.result @@ -0,0 +1,59 @@ +include/rpl_init.inc [topology=1->2,2->3,1->3] +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +### +# STOP SLAVE ON 2 +###### +[connection server_2] +STOP SLAVE; +### +# CREATE TABLE AND INSERTS ON 1 +###### +[connection server_1] +CREATE TABLE t1(f1 INT, f2 BLOB); +### +# SYNC 1->3 +###### +include/sync_slave_sql_with_master.inc +### +# MEASURE 3 +###### +STOP SLAVE; +UPDATE performance_schema.setup_objects +SET enabled='yes', timed='yes' + WHERE object_schema='mysql'; +START SLAVE; +### +# START SLAVES 2 +###### +[connection server_2] +START SLAVE; +### +# SYNC 1->2,2->3 +###### +[connection server_1] +include/sync_slave_sql_with_master.inc +include/sync_slave_sql_with_master.inc +### +# MEASURE 3 +###### +### +# COMPARE THE MEASUREMENT RESULTS +###### +include/assert.inc [No more than 5 writes should have happened to slave_master_info] +### +# CLEANUP +###### +UPDATE performance_schema.setup_objects +SET enabled='no', timed='no' + WHERE object_schema='mysql'; +[connection server_1] +DROP TABLE t1; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/bug85158.cnf b/mysql-test/suite/rpl/t/bug85158.cnf new file mode 100644 index 000000000000..07da38de6005 --- /dev/null +++ b/mysql-test/suite/rpl/t/bug85158.cnf @@ -0,0 +1,24 @@ +!include ../my.cnf + +[mysqld.1] +gtid_mode=ON +enforce-gtid-consistency +master-info-repository=TABLE +relay-log-info-repository=TABLE + +[mysqld.2] +gtid_mode=ON +enforce-gtid-consistency +master-info-repository=TABLE +relay-log-info-repository=TABLE + +[mysqld.3] +gtid_mode=ON +enforce-gtid-consistency +master-info-repository=TABLE +relay-log-info-repository=TABLE +sync_master_info=0 + +[ENV] +SERVER_MYPORT_3=@mysqld.3.port +SERVER_MYSOCK_3=@mysqld.3.socket diff --git a/mysql-test/suite/rpl/t/bug85158.test b/mysql-test/suite/rpl/t/bug85158.test new file mode 100644 index 000000000000..15319cdcfd37 --- /dev/null +++ b/mysql-test/suite/rpl/t/bug85158.test @@ -0,0 +1,108 @@ +# +# Testcase for bug 85158. +# +--source include/not_group_replication_plugin.inc +--source include/have_gtid.inc +--source include/have_perfschema.inc + +--let $rpl_multi_source= 1 +--let $rpl_topology= 1->2,2->3,1->3 +--source include/rpl_init.inc + +# MI writes threshold, if the difference between the count of writes to +# the MI repository before and after the actions is greater than the +# threshold, the test failed +--let $threshold=5 + +# The number of inserts on server_1, if the bug is not fixed the amount +# of the MI repository writes will be greater or equal to this value +--let $inserts_number=50 + +--echo ### +--echo # STOP SLAVE ON 2 +--echo ###### +--let $rpl_connection_name= server_2 +--source include/rpl_connection.inc +STOP SLAVE; + +--echo ### +--echo # CREATE TABLE AND INSERTS ON 1 +--echo ###### +--let $rpl_connection_name= server_1 +--source include/rpl_connection.inc +CREATE TABLE t1(f1 INT, f2 BLOB); +--disable_query_log +--let $j=$inserts_number +while($j) +{ +--eval INSERT INTO t1(f1) VALUES($j) +--dec $j +} +--enable_query_log + +--echo ### +--echo # SYNC 1->3 +--echo ###### +--let $sync_slave_connection= server_3 +--source include/sync_slave_sql_with_master.inc + +--echo ### +--echo # MEASURE 3 +--echo ###### +STOP SLAVE; +UPDATE performance_schema.setup_objects + SET enabled='yes', timed='yes' + WHERE object_schema='mysql'; +START SLAVE; + +let $before= +`SELECT count_write + FROM performance_schema.table_io_waits_summary_by_table + WHERE object_schema='mysql' AND object_name ='slave_master_info'`; + +--echo ### +--echo # START SLAVES 2 +--echo ###### +--let $rpl_connection_name= server_2 +--source include/rpl_connection.inc +START SLAVE; + +--echo ### +--echo # SYNC 1->2,2->3 +--echo ###### +--let $rpl_connection_name= server_1 +--source include/rpl_connection.inc +--let $sync_slave_connection= server_2 +--source include/sync_slave_sql_with_master.inc +--let $sync_slave_connection= server_3 +--source include/sync_slave_sql_with_master.inc + +--echo ### +--echo # MEASURE 3 +--echo ###### +let $after= +`SELECT count_write + FROM performance_schema.table_io_waits_summary_by_table + WHERE object_schema='mysql' AND object_name ='slave_master_info'`; + +--echo ### +--echo # COMPARE THE MEASUREMENT RESULTS +--echo ###### +--let $result=`SELECT (($after - $before) < $threshold)` +--let $assert_text= No more than $threshold writes should have happened to slave_master_info +--let $assert_cond= $result = 1 +--source include/assert.inc + +--echo ### +--echo # CLEANUP +--echo ###### +UPDATE performance_schema.setup_objects + SET enabled='no', timed='no' + WHERE object_schema='mysql'; +--let $rpl_connection_name= server_1 +--source include/rpl_connection.inc +DROP TABLE t1; +--disable_query_log +--let $rpl_skip_sync= 1 +--source include/rpl_end.inc +--enable_query_log diff --git a/sql/rpl_slave.cc b/sql/rpl_slave.cc index ee1d11db565f..b5e47edf9957 100644 --- a/sql/rpl_slave.cc +++ b/sql/rpl_slave.cc @@ -3389,10 +3389,13 @@ static bool wait_for_relay_log_space(Relay_log_info* rli) @param thd pointer to I/O Thread's Thd. @param mi point to I/O Thread metadata class. + @param force_mi_flush force mi flush independent of sync_master_info setting @return 0 if everything went fine, 1 otherwise. */ -static int write_ignored_events_info_to_relay_log(THD *thd, Master_info *mi) +static int write_ignored_events_info_to_relay_log(THD *thd, + Master_info *mi, + bool force_mi_flush) { Relay_log_info *rli= mi->rli; mysql_mutex_t *log_lock= rli->relay_log.get_log_lock(); @@ -3425,7 +3428,7 @@ static int write_ignored_events_info_to_relay_log(THD *thd, Master_info *mi) " to the relay log, SHOW SLAVE STATUS may be" " inaccurate"); rli->relay_log.harvest_bytes_written(&rli->log_space_total); - if (flush_master_info(mi, TRUE)) + if (flush_master_info(mi, force_mi_flush)) { error= 1; sql_print_error("Failed to flush master info file."); @@ -6021,7 +6024,7 @@ ignore_log_space_limit=%d", mi->mysql=0; } mysql_mutex_lock(&mi->data_lock); - write_ignored_events_info_to_relay_log(thd, mi); + write_ignored_events_info_to_relay_log(thd, mi, true); mysql_mutex_unlock(&mi->data_lock); THD_STAGE_INFO(thd, stage_waiting_for_slave_mutex_on_exit); mysql_mutex_lock(&mi->run_lock); @@ -8464,7 +8467,7 @@ bool queue_event(Master_info* mi,const char* buf, ulong event_len) FN_REFLEN); rli->ign_master_log_pos_end = mi->get_master_log_pos(); - if (write_ignored_events_info_to_relay_log(mi->info_thd, mi)) + if (write_ignored_events_info_to_relay_log(mi->info_thd, mi, false)) goto end; } @@ -8513,7 +8516,7 @@ bool queue_event(Master_info* mi,const char* buf, ulong event_len) memcpy(rli->ign_master_log_name_end, mi->get_master_log_name(), FN_REFLEN); rli->ign_master_log_pos_end= mi->get_master_log_pos(); - if (write_ignored_events_info_to_relay_log(mi->info_thd, mi)) + if (write_ignored_events_info_to_relay_log(mi->info_thd, mi, true)) goto err; goto end; From 2c895481464d85fcc2debe586aedb4cb20ec52c7 Mon Sep 17 00:00:00 2001 From: Vlad Lesin Date: Tue, 28 Nov 2017 18:53:10 +0300 Subject: [PATCH 0291/1221] lp:1722789 Intermediary slave does not log master changes with binlog_rows_query_log_events Let's consider the following function: int ha_blackhole::update_row(const uchar *old_data, uchar *new_data) { DBUG_ENTER("ha_blackhole::update_row"); THD *thd= ha_thd(); if (is_slave_applier(thd) && thd->query().str == NULL) DBUG_RETURN(0); DBUG_RETURN(HA_ERR_WRONG_COMMAND); } In the case if this function is invoked from slave thread and it's query string is empty, then it's supposed the function finishes successfully, otherwise some error is returned. The same logic exists in some other blackhole engine functions. If "binlog_rows_query_log_events = 1" binary log contains events with queries. The queries are ignored, but during "Rows_query_log_event" event execution (see Rows_query_log_event::do_apply_event()) thread query string is filled with the query from the event. And when then Update_rows_log_event::do_exec_row() is executed, sql thread has query in thd->m_query_string, and this condition: is_slave_applier(thd) && thd->query().str == NULL becomes false, what leads to errors during execution of blackhole engine functions such as ha_blackhole::update_row(). Such errors are output to error log and sql thread stops, as a result is't binary log is not filling. The question is what does this "is_slave_applier(thd) && thd->query().str == NULL" condition mean? I suppose the condition means that the currently processed relay log event type is not QUERY_ITEM. That is why I would propose the following fix: replace "thd->query().str == NULL" with "thd->rli_slave->rows_query_ev || thd->query() == NULL". --- mysql-test/suite/rpl/r/bug88057.result | 89 ++++++++++++++++++++++++++ mysql-test/suite/rpl/t/bug88057.cnf | 29 +++++++++ mysql-test/suite/rpl/t/bug88057.test | 66 +++++++++++++++++++ storage/blackhole/ha_blackhole.cc | 25 +++++--- 4 files changed, 200 insertions(+), 9 deletions(-) create mode 100644 mysql-test/suite/rpl/r/bug88057.result create mode 100644 mysql-test/suite/rpl/t/bug88057.cnf create mode 100644 mysql-test/suite/rpl/t/bug88057.test diff --git a/mysql-test/suite/rpl/r/bug88057.result b/mysql-test/suite/rpl/r/bug88057.result new file mode 100644 index 000000000000..c2782639d9ae --- /dev/null +++ b/mysql-test/suite/rpl/r/bug88057.result @@ -0,0 +1,89 @@ +include/rpl_init.inc [topology=1->2->3] +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +### +# Create table on server 1 +##### +[connection server_1] +CREATE TABLE t1(a INT NOT NULL) ENGINE=innodb; +### +# Turn table into black hole on server 2 +##### +include/sync_slave_sql_with_master.inc +SET sql_log_bin = 0; +ALTER TABLE t1 ENGINE = blackhole; +SET sql_log_bin = 1; +### +# Generate insert, update, delete on server 1 +##### +[connection server_1] +INSERT INTO t1 (a) values (1), (2), (3); +ALTER TABLE t1 ADD PRIMARY KEY pk_t1 (a); +UPDATE t1 SET a = 22 WHERE a = 2; +DELETE FROM t1 WHERE a = 3; +SELECT * FROM t1; +a +1 +22 +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Query # # use `test`; CREATE TABLE t1(a INT NOT NULL) ENGINE=innodb +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Rows_query # # # INSERT INTO t1 (a) values (1), (2), (3) +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`; ALTER TABLE t1 ADD PRIMARY KEY pk_t1 (a) +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Rows_query # # # UPDATE t1 SET a = 22 WHERE a = 2 +master-bin.000001 # Table_map # # table_id: # (test.t1) +master-bin.000001 # Update_rows # # table_id: # flags: STMT_END_F +master-bin.000001 # Xid # # COMMIT /* XID */ +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Rows_query # # # DELETE FROM t1 WHERE a = 3 +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 */ +### +# Sync server 2 with server 1 +##### +include/sync_slave_sql_with_master.inc +SELECT * FROM t1; +a +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +slave-bin.000001 # Query # # use `test`; CREATE TABLE t1(a INT NOT NULL) ENGINE=innodb +slave-bin.000001 # Query # # BEGIN +slave-bin.000001 # Rows_query # # # INSERT INTO t1 (a) values (1), (2), (3) +slave-bin.000001 # Table_map # # table_id: # (test.t1) +slave-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F +slave-bin.000001 # Xid # # COMMIT /* XID */ +slave-bin.000001 # Query # # use `test`; ALTER TABLE t1 ADD PRIMARY KEY pk_t1 (a) +slave-bin.000001 # Query # # BEGIN +slave-bin.000001 # Rows_query # # # UPDATE t1 SET a = 22 WHERE a = 2 +slave-bin.000001 # Table_map # # table_id: # (test.t1) +slave-bin.000001 # Update_rows # # table_id: # flags: STMT_END_F +slave-bin.000001 # Xid # # COMMIT /* XID */ +slave-bin.000001 # Query # # BEGIN +slave-bin.000001 # Rows_query # # # DELETE FROM t1 WHERE a = 3 +slave-bin.000001 # Table_map # # table_id: # (test.t1) +slave-bin.000001 # Delete_rows # # table_id: # flags: STMT_END_F +slave-bin.000001 # Xid # # COMMIT /* XID */ +### +# Sync server 3 with server 2 +##### +include/sync_slave_sql_with_master.inc +SELECT * FROM t1; +a +1 +22 +### +# Cleanup +##### +[connection server_1] +DROP TABLE t1; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/bug88057.cnf b/mysql-test/suite/rpl/t/bug88057.cnf new file mode 100644 index 000000000000..1934f5ca0bd7 --- /dev/null +++ b/mysql-test/suite/rpl/t/bug88057.cnf @@ -0,0 +1,29 @@ +!include ../my.cnf + +[mysqld.1] +enforce-gtid-consistency=ON +gtid-mode=ON +master-info-repository=TABLE +relay-log-info-repository=TABLE +binlog-rows-query-log-events= ON +log-slave-updates + +[mysqld.2] +enforce-gtid-consistency=ON +gtid-mode=ON +master-info-repository=TABLE +relay-log-info-repository=TABLE +binlog-rows-query-log-events= ON +log-slave-updates + +[mysqld.3] +enforce-gtid-consistency=ON +gtid-mode=ON +master-info-repository=TABLE +relay-log-info-repository=TABLE +binlog-rows-query-log-events= ON +log-slave-updates + +[ENV] +SERVER_MYPORT_3= @mysqld.3.port +SERVER_MYSOCK_3= @mysqld.3.socket diff --git a/mysql-test/suite/rpl/t/bug88057.test b/mysql-test/suite/rpl/t/bug88057.test new file mode 100644 index 000000000000..1bb07ff69531 --- /dev/null +++ b/mysql-test/suite/rpl/t/bug88057.test @@ -0,0 +1,66 @@ +# +# Bug 88057 test case. +# +# Test if some_engine->blackhole->some_engine topology works good if +# binlog-rows-query-log-events = ON +# +--source include/have_binlog_format_row.inc +--source include/have_gtid.inc +--source include/have_innodb.inc +--source include/have_blackhole.inc + +--let $rpl_topology = 1->2->3 +--let $use_gtids = 1 +--source include/rpl_init.inc + +--echo ### +--echo # Create table on server 1 +--echo ##### +--let $rpl_connection_name = server_1 +--source include/rpl_connection.inc +CREATE TABLE t1(a INT NOT NULL) ENGINE=innodb; + +--echo ### +--echo # Turn table into black hole on server 2 +--echo ##### +--let $sync_slave_connection = server_2 +--source include/sync_slave_sql_with_master.inc +SET sql_log_bin = 0; +ALTER TABLE t1 ENGINE = blackhole; +SET sql_log_bin = 1; + +--echo ### +--echo # Generate insert, update, delete on server 1 +--echo ##### +--let $rpl_connection_name = server_1 +--source include/rpl_connection.inc +INSERT INTO t1 (a) values (1), (2), (3); +ALTER TABLE t1 ADD PRIMARY KEY pk_t1 (a); +UPDATE t1 SET a = 22 WHERE a = 2; +DELETE FROM t1 WHERE a = 3; +SELECT * FROM t1; +--source include/show_binlog_events.inc + +--echo ### +--echo # Sync server 2 with server 1 +--echo ##### +--let $sync_slave_connection = server_2 +--source include/sync_slave_sql_with_master.inc +SELECT * FROM t1; +--source include/show_binlog_events.inc + +--echo ### +--echo # Sync server 3 with server 2 +--echo ##### +--let $sync_slave_connection = server_3 +--source include/sync_slave_sql_with_master.inc +SELECT * FROM t1; + +--echo ### +--echo # Cleanup +--echo ##### +--let $rpl_connection_name = server_1 +--source include/rpl_connection.inc +DROP TABLE t1; + +--source include/rpl_end.inc diff --git a/storage/blackhole/ha_blackhole.cc b/storage/blackhole/ha_blackhole.cc index e5c0f7e31d27..a5cd03cf8c72 100644 --- a/storage/blackhole/ha_blackhole.cc +++ b/storage/blackhole/ha_blackhole.cc @@ -20,11 +20,18 @@ #include "probes_mysql.h" #include "ha_blackhole.h" #include "sql_class.h" // THD, SYSTEM_THREAD_SLAVE_* +#include "rpl_rli.h" // THD::rli_slave::rows_query_ev -static bool is_slave_applier(THD *thd) +static inline bool is_slave_applier(const THD &thd) { - return thd->system_thread == SYSTEM_THREAD_SLAVE_SQL || - thd->system_thread == SYSTEM_THREAD_SLAVE_WORKER; + return thd.system_thread == SYSTEM_THREAD_SLAVE_SQL || + thd.system_thread == SYSTEM_THREAD_SLAVE_WORKER; +} + +static inline bool pretend_for_slave(const THD &thd) +{ + return is_slave_applier(thd) && + (thd.rli_slave->rows_query_ev || thd.query() == NULL); } /* Static declarations for handlerton */ @@ -120,7 +127,7 @@ int ha_blackhole::update_row(const uchar *old_data, uchar *new_data) { DBUG_ENTER("ha_blackhole::update_row"); THD *thd= ha_thd(); - if (is_slave_applier(thd) && thd->query() == NULL) + if (pretend_for_slave(*thd)) DBUG_RETURN(0); DBUG_RETURN(HA_ERR_WRONG_COMMAND); } @@ -129,7 +136,7 @@ int ha_blackhole::delete_row(const uchar *buf) { DBUG_ENTER("ha_blackhole::delete_row"); THD *thd= ha_thd(); - if (is_slave_applier(thd) && thd->query() == NULL) + if (pretend_for_slave(*thd)) DBUG_RETURN(0); DBUG_RETURN(HA_ERR_WRONG_COMMAND); } @@ -148,7 +155,7 @@ int ha_blackhole::rnd_next(uchar *buf) MYSQL_READ_ROW_START(table_share->db.str, table_share->table_name.str, TRUE); THD *thd= ha_thd(); - if (is_slave_applier(thd) && thd->query() == NULL) + if (pretend_for_slave(*thd)) rc= 0; else rc= HA_ERR_END_OF_FILE; @@ -239,7 +246,7 @@ int ha_blackhole::index_read_map(uchar * buf, const uchar * key, DBUG_ENTER("ha_blackhole::index_read"); MYSQL_INDEX_READ_ROW_START(table_share->db.str, table_share->table_name.str); THD *thd= ha_thd(); - if (is_slave_applier(thd) && thd->query() == NULL) + if (pretend_for_slave(*thd)) rc= 0; else rc= HA_ERR_END_OF_FILE; @@ -257,7 +264,7 @@ int ha_blackhole::index_read_idx_map(uchar * buf, uint idx, const uchar * key, DBUG_ENTER("ha_blackhole::index_read_idx"); MYSQL_INDEX_READ_ROW_START(table_share->db.str, table_share->table_name.str); THD *thd= ha_thd(); - if (is_slave_applier(thd) && thd->query() == NULL) + if (pretend_for_slave(*thd)) rc= 0; else rc= HA_ERR_END_OF_FILE; @@ -274,7 +281,7 @@ int ha_blackhole::index_read_last_map(uchar * buf, const uchar * key, DBUG_ENTER("ha_blackhole::index_read_last"); MYSQL_INDEX_READ_ROW_START(table_share->db.str, table_share->table_name.str); THD *thd= ha_thd(); - if (is_slave_applier(thd) && thd->query() == NULL) + if (pretend_for_slave(*thd)) rc= 0; else rc= HA_ERR_END_OF_FILE; From a6588391ec7b054e3dfc4fb0a1380978c3b6e0c5 Mon Sep 17 00:00:00 2001 From: hrvojem Date: Thu, 14 Dec 2017 13:55:25 +0100 Subject: [PATCH 0292/1221] Release notes for Percona Server 5.7.20-18 (5.7) --- doc/source/myrocks/variables.rst | 4 +- .../Percona-Server-5.7.20-18.rst | 45 ++++++- doc/source/upstream-bug-fixes.rst | 126 ++++++++++-------- 3 files changed, 114 insertions(+), 61 deletions(-) diff --git a/doc/source/myrocks/variables.rst b/doc/source/myrocks/variables.rst index f93e953bb158..3dc5283eea7a 100644 --- a/doc/source/myrocks/variables.rst +++ b/doc/source/myrocks/variables.rst @@ -848,7 +848,7 @@ to ensure sequential reads instead of random. Maximum allowed value is ``18446744073709551615``. .. note:: If you set this variable to a non-zero value, - :variable:`new_table_reader_for_compaction_inputs` is enabled. + :variable:`rocksdb_new_table_reader_for_compaction_inputs` is enabled. .. variable:: rocksdb_compaction_sequential_deletes @@ -2266,7 +2266,7 @@ Make sure that lookups use the whole key for matching. .. variable:: rocksdb_write_batch_max_bytes :version 5.7.20-18: Implemented - :cli: ``--rocksdb-write_batch_max_bytes`` + :cli: ``--rocksdb-write-batch-max-bytes`` :dyn: Yes :scope: Global, Session :vartype: Numeric diff --git a/doc/source/release-notes/Percona-Server-5.7.20-18.rst b/doc/source/release-notes/Percona-Server-5.7.20-18.rst index f810e2dc869b..1853dd72c158 100644 --- a/doc/source/release-notes/Percona-Server-5.7.20-18.rst +++ b/doc/source/release-notes/Percona-Server-5.7.20-18.rst @@ -5,7 +5,7 @@ Percona Server 5.7.20-18 ======================== Percona is glad to announce the release of Percona Server 5.7.20-18 -on $release_date +on December 14. Downloads are available `here `_ and from the :doc:`Percona Software Repositories `. @@ -27,11 +27,52 @@ New Features * As part of :ref:`innodb_fts_improvements` a new :variable:`innodb_ft_ignore_stopwords` variable has been implemented which controls whether |InnoDB| Full-Text Search should ignore stopword list - when building/updating an FTS index. + when building/updating an FTS index. This feature is also fixing bug + :bug:`1679135` (upstream :mysqlbug:`84420`). + + * |Percona Server| has implemented :ref:`innodb_fragmentation_count`. + + * |Percona Server| has implemented support for :ref:`aio_page_requests`. + This feature was ported from a *Facebook MySQL* patch. + + * |Percona Server| has implemented |TokuDB| :ref:`integration + ` with ``PERFORMANCE_SCHEMA``. Bugs Fixed ========== + * |Percona Server| 5.7 docker images did not include |TokuDB|. Bugs fixed + :bug:`1682419` and :bug:`1699241`. + + * If an I/O syscall returned an error during the server shutdown with + :ref:`threadpool` enabled, a mutex could be left locked. Bug fixed + :bug:`1702330` (*Daniel Black*). + + * Dynamic row format feature to support ``BLOB/VARCHAR`` in ``MEMORY`` tables + requires all the key columns to come before any ``BLOB`` columns. This + requirement however was not enforced, allowing creating MEMORY tables in + unsupported column configurations, which then crashed or lose data in usage. + Bug fixed :bug:`1731483`. + + * After fixing bug :bug:`1668602`, bug :bug:`1539504`, and bug :bug:`1313901`, + ``CREATE/DROP TEMPORARY TABLE`` statements were forbidden incorrectly in + transactional contexts, including function and trigger calls, even when + they required no binary logging at all. Bug fixed :bug:`1711781`. + + * Running ``ANALYZE TABLE`` while a long-running query is accessing the same + table in parallel could lead to a situation where new queries on the same + table are blocked in a ``Waiting for table flush`` state. + Fixed by stopping ``ANALYZE TABLE`` flushing affected |InnoDB| and |TokuDB| + tables from the table definition cache. Bug fixed :bug:`1704195` + (upstream :mysqlbug:`87065`). + + * ``CREATE TABLE ... LIKE ...`` did not use source ``row_format`` on target + |TokuDB| table. Bug fixed :tdbbug:`76`. + + * |TokuDB| would encode already encoded database name for a directory name. + Bug fixed :tdbbug:`74`. + +Other bugs fixed: :bug:`1720810`, :tdbbug:`83`, :tdbbug:`80`, and :tdbbug:`75`. MyRocks Changes =============== diff --git a/doc/source/upstream-bug-fixes.rst b/doc/source/upstream-bug-fixes.rst index b7861969cc08..43177881fce9 100644 --- a/doc/source/upstream-bug-fixes.rst +++ b/doc/source/upstream-bug-fixes.rst @@ -4,10 +4,16 @@ List of upstream |MySQL| bugs fixed in |Percona Server| 5.7 ============================================================= ++-------------------------------------------------------------------------------------------------------------+ +|:Upstream bug: :mysqlbug:`87065` - Release lock on table statistics after query plan created | +|:Launchpad bug: :bug:`1689736` | +|:Upstream state: Open (checked on 2017-12-14) | +|:Fix Released: :rn:`5.7.20-18` | +|:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`86260` - Assert on KILL'ing a stored routine invocation | |:Launchpad bug: :bug:`1689736` | -|:Upstream state: Verified (checked on 2017-08-31) | +|:Upstream state: Verified (checked on 2017-12-14) | |:Fix Released: :rn:`5.7.18-16` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -19,7 +25,7 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`86016` - Make MTR show core dump stacktraces from unit tests too | |:Launchpad bug: :bug:`1684601` | -|:Upstream state: Verified (checked on 2017-08-31) | +|:Upstream state: Verified (checked on 2017-12-14) | |:Fix Released: :rn:`5.7.18-16` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -49,13 +55,13 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`85258` - DROP TEMPORARY TABLE creates a transaction in binary log on read only... | |:Launchpad bug: :bug:`1668602` | -|:Upstream state: Verified (checked on 2017-08-31) | +|:Upstream state: Closed | |:Fix Released: :rn:`5.7.18-14` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`85141` - Write/fsync amplification w/ duplicate GTIDs | |:Launchpad bug: :bug:`1669928` | -|:Upstream state: Verified (checked on 2017-08-31) | +|:Upstream state: Verified (checked on 2017-12-14) | |:Fix Released: :rn:`5.7.18-14` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -67,31 +73,37 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`84437` - super-read-only does not allow FLUSH LOGS on 5.7 | |:Launchpad bug: :bug:`1654682` | -|:Upstream state: Verified (checked on 2017-08-31) | +|:Upstream state: Verified (checked on 2017-12-14) | |:Fix Released: :rn:`5.7.17-12` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ +|:Upstream bug: :mysqlbug:`84420` - stopwords and ngram indexes | +|:Launchpad bug: :bug:`1679135` | +|:Upstream state: Verified (checked on 2017-12-14) | +|:Fix Released: :rn:`5.7.20-18` | +|:Upstream fix: N/A | ++-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`84415` - slave don't report Seconds_Behind_Master when running ... | |:Launchpad bug: :bug:`1654091` | -|:Upstream state: Verified (checked on 2017-08-31) | +|:Upstream state: Verified (checked on 2017-12-14) | |:Fix Released: :rn:`5.7.18-14` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`84366` - InnoDB index dives do not detect concurrent tree changes, return bogus... | |:Launchpad bug: :bug:`1625151` | -|:Upstream state: Verified (checked on 2017-08-31) | +|:Upstream state: Verified (checked on 2017-12-14) | |:Fix Released: :rn:`5.7.17-11` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`84350` - Error 1290 executing flush logs in read-only slave | |:Launchpad bug: :bug:`1652852` | -|:Upstream state: Verified (checked on 2017-08-31) | +|:Upstream state: Verified (checked on 2017-12-14) | |:Fix Released: :rn:`5.7.17-12` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`83814` - Add support for OpenSSL 1.1 | |:Launchpad bug: :bug:`1702903` | -|:Upstream state: Verified (checked on 2017-08-31) | +|:Upstream state: Closed | |:Fix Released: :rn:`5.7.18-16` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -115,7 +127,7 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`83003` - Using temporary tables on slaves increases GTID sequence number | |:Launchpad bug: :bug:`1539504` | -|:Upstream state: Verified (checked on 2017-08-31) | +|:Upstream state: Closed | |:Fix Released: :rn:`5.7.17-11` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -127,7 +139,7 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`82935` - Cipher ECDHE-RSA-AES128-GCM-SHA256 listed in man/Ssl_cipher_list, not... | |:Launchpad bug: :bug:`1622034` | -|:Upstream state: Verified (checked on 2017-08-31) | +|:Upstream state: Verified (checked on 2017-12-14) | |:Fix Released: :rn:`5.7.15-9` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -151,7 +163,7 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`82026` - Stack buffer overflow with --ssl-cipher= | |:Launchpad bug: :bug:`1596845` | -|:Upstream state: Verified (checked on 2017-08-31) | +|:Upstream state: Verified (checked on 2017-12-14) | |:Fix Released: :rn:`5.7.14-7` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -163,13 +175,13 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`81814` - InnoDB adaptive hash index uses a bad partitioning algorithm for the ... | |:Launchpad bug: :bug:`1679155` | -|:Upstream state: Verified (checked on 2017-08-31) | +|:Upstream state: Verified (checked on 2017-12-14) | |:Fix Released: :rn:`5.7.18-14` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`81810` - Inconsistent sort order for blob/text between InnoDB and filesort | |:Launchpad bug: :bug:`1674867` | -|:Upstream state: Verified (checked on 2017-08-31) | +|:Upstream state: Verified (checked on 2017-12-14) | |:Fix Released: :rn:`5.7.18-14` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -193,7 +205,7 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`81467` - innodb_fts.sync_block test unstable due to slow query log nondeterminism | |:Launchpad bug: :bug:`1662163` | -|:Upstream state: Verified (checked on 2017-08-31) | +|:Upstream state: Verified (checked on 2017-12-14) | |:Fix Released: :rn:`5.7.17-12` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -217,7 +229,7 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`80496` - buf_dblwr_init_or_load_pages now returns an error code, but caller not... | |:Launchpad bug: :bug:`1549301` | -|:Upstream state: Verified (checked on 2017-08-31) | +|:Upstream state: Verified (checked on 2017-12-14) | |:Fix Released: :rn:`5.7.11-4` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -229,13 +241,13 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`80053` - Assertion in binlog coordinator on slave with 2 2pc handler log_slave ... | |:Launchpad bug: :bug:`1534249` | -|:Upstream state: Verified (checked on 2017-08-31) | +|:Upstream state: Verified (checked on 2017-12-14) | |:Fix Released: :rn:`5.7.10-2` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`79894` - Page cleaner worker threads are not instrumented for performance schema | |:Launchpad bug: :bug:`1532747` | -|:Upstream state: Verified (checked on 2017-08-31) | +|:Upstream state: Verified (checked on 2017-12-14) | |:Fix Released: :rn:`5.7.10-2` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -247,7 +259,7 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`79610` - Failed DROP DATABASE due FK constraint on master breaks slave | |:Launchpad bug: :bug:`1525407` | -|:Upstream state: Verified (checked on 2017-08-31) | +|:Upstream state: Verified (checked on 2017-12-14) | |:Fix Released: :rn:`5.7.14-7` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -265,7 +277,7 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`78894` - buf_pool_resize can lock less in checking whether AHI is on or off | |:Launchpad bug: :bug:`1525215` | -|:Upstream state: Verified (checked on 2017-08-31) | +|:Upstream state: Verified (checked on 2017-12-14) | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -277,13 +289,13 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`77591` - ALTER TABLE does not allow to change NULL/NOT NULL if foreign key exists | |:Launchpad bug: :bug:`1466414` | -|:Upstream state: Verified (checked on 2017-08-31) | +|:Upstream state: Verified (checked on 2017-12-14) | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`77399` - Deadlocks missed by INFORMATION_SCHEMA.INNODB_METRICS lock_deadlocks ... | |:Launchpad bug: :bug:`1466414` | -|:Upstream state: Verified (checked on 2017-08-31) | +|:Upstream state: Verified (checked on 2017-12-14) | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -295,7 +307,7 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`76142` - InnoDB tablespace import fails when importing table w/ different data ... | |:Launchpad bug: :bug:`1548597` | -|:Upstream state: Verified (checked on 2017-08-31) | +|:Upstream state: Verified (checked on 2017-12-14) | |:Fix Released: :rn:`5.7.13-6` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -307,7 +319,7 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`75504` - btr_search_guess_on_hash makes found block young twice? | |:Launchpad bug: :bug:`1411694` | -|:Upstream state: Verified (checked on 2017-08-31) | +|:Upstream state: Verified (checked on 2017-12-14) | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -319,61 +331,61 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`75311` - Error for SSL cipher is unhelpful | |:Launchpad bug: :bug:`1660339` | -|:Upstream state: Verified (checked on 2017-08-31) | +|:Upstream state: Verified (checked on 2017-12-14) | |:Fix Released: :rn:`5.7.17-12` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`75189` - engines suite tests depending on InnoDB implementation details | |:Launchpad bug: :bug:`1401776` | -|:Upstream state: Verified (checked on 2017-08-31) | +|:Upstream state: Verified (checked on 2017-12-14) | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`74637` - make dirty page flushing more adaptive | |:Launchpad bug: :ref:`Multi-threaded asynchronous LRU flusher ` | -|:Upstream state: Verified (checked on 2017-08-31) | +|:Upstream state: Verified (checked on 2017-12-14) | |:Fix Released: :rn:`5.7.10-3` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`73418` - Add --manual-lldb option to mysql-test-run.pl | |:Launchpad bug: :bug:`1328482` | -|:Upstream state: Verified (checked on 2017-08-31) | +|:Upstream state: Verified (checked on 2017-12-14) | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`72615` - MTR --mysqld=--default-storage-engine=foo incompatible w/ dynamically... | |:Launchpad bug: :bug:`1318537` | -|:Upstream state: Verified (checked on 2017-08-31) | +|:Upstream state: Verified (checked on 2017-12-14) | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`72475` - Binlog events with binlog_format=MIXED are unconditionally logged in ... | |:Launchpad bug: :bug:`1313901` | -|:Upstream state: Verified (checked on 2017-08-31) | +|:Upstream state: Closed | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`72466` - More memory overhead per page in the InnoDB buffer pool | |:Launchpad bug: :bug:`1536693` | -|:Upstream state: Verified (checked on 2017-08-31) | +|:Upstream state: Verified (checked on 2017-12-14) | |:Fix Released: :rn:`5.7.12-5` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`72123` - Spurious lock_wait_timeout_thread wakeup in lock_wait_suspend_thread() | |:Launchpad bug: :bug:`1704267` | -|:Upstream state: Verified (checked on 2017-08-31) | +|:Upstream state: Verified (checked on 2017-12-14) | |:Fix Released: :rn:`5.7.18-16` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`72108` - Hard to read history file | |:Launchpad bug: :bug:`1296192` | -|:Upstream state: Verified (checked on 2017-08-31) | +|:Upstream state: Verified (checked on 2017-12-14) | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`71761` - ANALYZE TABLE should remove its table from background stat processing... | |:Launchpad bug: :bug:`1626441` | -|:Upstream state: Verified (checked on 2017-08-31) | +|:Upstream state: Verified (checked on 2017-12-14) | |:Fix Released: :rn:`5.7.15-9` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -385,37 +397,37 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`71411` - buf_flush_LRU() does not return correct number in case of compressed ... | |:Launchpad bug: :bug:`1262651` | -|:Upstream state: Verified (checked on 2017-08-31) | +|:Upstream state: Verified (checked on 2017-12-14) | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`71270` - Failures to end bulk insert for partitioned tables handled incorrectly | |:Launchpad bug: :bug:`1204871` | -|:Upstream state: Verified (checked on 2017-08-31) | +|:Upstream state: Verified (checked on 2017-12-14) | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`71217` - Threadpool - add thd_wait_begin/thd_wait_end to the network IO functions | |:Launchpad bug: :bug:`1159743` | -|:Upstream state: Open (checked on 2017-08-31) | +|:Upstream state: Open (checked on 2017-12-14) | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`71183` - os_file_fsync() should handle fsync() returning EINTR | |:Launchpad bug: :bug:`1262651` | -|:Upstream state: Verified (checked on 2017-08-31) | +|:Upstream state: Verified (checked on 2017-12-14) | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`71091` - CSV engine does not properly process "", in quotes | |:Launchpad bug: :bug:`1316042` | -|:Upstream state: Verified (checked on 2017-08-31) | +|:Upstream state: Verified (checked on 2017-12-14) | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`70500` - Page cleaner should perform LRU flushing regardless of server activity | |:Launchpad bug: :bug:`1234562` | -|:Upstream state: Verified (checked on 2017-08-31) | +|:Upstream state: Verified (checked on 2017-12-14) | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -427,13 +439,13 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`69991` - MySQL client is broken without readline | |:Launchpad bug: :bug:`1266386` | -|:Upstream state: Verified (checked on 2017-08-31) | +|:Upstream state: Verified (checked on 2017-12-14) | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`69639` - mysql failed to build with dtrace Sun D 1.11 | |:Launchpad bug: :bug:`1196460` | -|:Upstream state: Open (checked on 2017-08-31) | +|:Upstream state: Open (checked on 2017-12-14) | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -445,19 +457,19 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`69232` - buf_dblwr->mutex can be splited into two | |:Launchpad bug: :ref:`parallel_doublewrite_buffer` | -|:Upstream state: Need Feedback (checked on 2017-08-31) | +|:Upstream state: No Feedback (checked on 2017-12-14) | |:Fix Released: :rn:`5.7.11-4` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`69170` - buf_flush_LRU is lazy | |:Launchpad bug: :bug:`1231918` | -|:Upstream state: Verified (checked on 2017-08-31) | +|:Upstream state: Verified (checked on 2017-12-14) | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`69146` - Needless log flush order mutex acquisition in buf_pool_get_oldest_mod... | |:Launchpad bug: :bug:`1176496` | -|:Upstream state: Verified (checked on 2017-08-31) | +|:Upstream state: Verified (checked on 2017-12-14) | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -469,73 +481,73 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`68481` - InnoDB LRU flushing for MySQL 5.6 needs work | |:Launchpad bug: :bug:`1232406` | -|:Upstream state: Verified (checked on 2017-08-31) | +|:Upstream state: Verified (checked on 2017-12-14) | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`68052` - SSL Certificate Subject ALT Names with IPs not respected with --ssl-ver...| |:Launchpad bug: :bug:`1673656` | -|:Upstream state: Verified (checked on 2017-08-31) | +|:Upstream state: Verified (checked on 2017-12-14) | |:Fix Released: :rn:`5.7.18-16` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`67808` - in innodb engine, double write and multi-buffer pool instance reduce ... | |:Launchpad bug: :ref:`parallel_doublewrite_buffer` | -|:Upstream state: Verified (checked on 2017-08-31) | +|:Upstream state: Verified (checked on 2017-12-14) | |:Fix Released: :rn:`5.7.11-4` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`63130` - CMake-based check for the presence of a system readline library is not... | |:Launchpad bug: :bug:`1266386` | -|:Upstream state: Can't Repeat (checked on 2017-08-31) | +|:Upstream state: Can't Repeat (checked on 2017-12-14) | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`57583` - fast index create not used during "alter table foo engine=innodb" | |:Launchpad bug: :bug:`1451351` | -|:Upstream state: Verified (checked on 2017-08-31) | +|:Upstream state: Verified (checked on 2017-12-14) | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`53645` - SHOW GRANTS not displaying all the applicable grants | |:Launchpad bug: :bug:`1354988` | -|:Upstream state: Verified (checked on 2017-08-31) | +|:Upstream state: Verified (checked on 2017-12-14) | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`49120` - mysqldump should have flag to delay creating indexes for innodb plugin... | |:Launchpad bug: :bug:`744103` | -|:Upstream state: Verified (checked on 2017-08-31) | +|:Upstream state: Verified (checked on 2017-12-14) | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`42415` - UPDATE/DELETE with LIMIT clause unsafe for SBL even with ORDER BY PK ... | |:Launchpad bug: N/A | -|:Upstream state: Verified (checked on 2017-08-31) | +|:Upstream state: Verified (checked on 2017-12-14) | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`39833` - CREATE INDEX does full table copy on TEMPORARY table | |:Launchpad bug: N/A | -|:Upstream state: Verified (checked on 2017-08-31) | +|:Upstream state: Verified (checked on 2017-12-14) | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`35125` - Allow the ability to set the server_id for a connection for logging to... | |:Launchpad BP: `Blueprint `_ | -|:Upstream state: Verified (checked on 2017-08-31) | +|:Upstream state: Verified (checked on 2017-12-14) | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`25007` - memory tables with dynamic rows format | |:Launchpad BP: :bug:`1148822` | -|:Upstream state: Verified (checked on 2017-08-31) | +|:Upstream state: Verified (checked on 2017-12-14) | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`20001` - Support for temp-tables in INFORMATION_SCHEMA | |:Launchpad bug: :ref:`temp_tables` | -|:Upstream state: Verified (checked on 2017-08-31) | +|:Upstream state: Verified (checked on 2017-12-14) | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ From 0d90d81c3c507a6b1476246a405504f6e4ef9d4d Mon Sep 17 00:00:00 2001 From: Vlad Lesin Date: Thu, 30 Nov 2017 00:41:43 +0300 Subject: [PATCH 0293/1221] lp-1733049: Blackhole : Specified key was too long; max key length is 1000 bytes The maximum innodb key length is 3500 what is hardcoded in ha_innobase::max_supported_key_length()). The maximum number of innodb indexes is configured with MAX_INDEXES macro (see also MAX_KEY definition). The same is currently implemented for blackhole storage engine. --- mysql-test/r/bug53588.result | 5 +++++ mysql-test/t/bug53588.test | 15 +++++++++++++++ storage/blackhole/ha_blackhole.h | 5 +++-- 3 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 mysql-test/r/bug53588.result create mode 100644 mysql-test/t/bug53588.test diff --git a/mysql-test/r/bug53588.result b/mysql-test/r/bug53588.result new file mode 100644 index 000000000000..c64d53dec715 --- /dev/null +++ b/mysql-test/r/bug53588.result @@ -0,0 +1,5 @@ +CREATE TABLE `t` ( +`a` varchar(3000) NOT NULL default '', +PRIMARY KEY (`a`) +) ENGINE=BLACKHOLE; +DROP TABLE `t`; diff --git a/mysql-test/t/bug53588.test b/mysql-test/t/bug53588.test new file mode 100644 index 000000000000..aaee55c82c4f --- /dev/null +++ b/mysql-test/t/bug53588.test @@ -0,0 +1,15 @@ +# +# Bug 53588 test case. +# +# Create long enough index (between 1000 and 3500). 1000 is the old value, +# 3500 is innodb value (see ha_innobase::max_supported_key_length()). Without +# the fix the test will fail with "Specified key was too long" error. +# +--source include/have_blackhole.inc + +CREATE TABLE `t` ( + `a` varchar(3000) NOT NULL default '', + PRIMARY KEY (`a`) +) ENGINE=BLACKHOLE; + +DROP TABLE `t`; diff --git a/storage/blackhole/ha_blackhole.h b/storage/blackhole/ha_blackhole.h index a7efd261ddb5..06b300995371 100644 --- a/storage/blackhole/ha_blackhole.h +++ b/storage/blackhole/ha_blackhole.h @@ -20,6 +20,7 @@ #include "thr_lock.h" /* THR_LOCK */ #include "handler.h" /* handler */ #include "table.h" /* TABLE_SHARE */ +#include "sql_const.h" /* MAX_KEY */ /* Shared structure for correct LOCK operation @@ -68,9 +69,9 @@ class ha_blackhole: public handler HA_READ_ORDER | HA_KEYREAD_ONLY); } /* The following defines can be increased if necessary */ -#define BLACKHOLE_MAX_KEY 64 /* Max allowed keys */ +#define BLACKHOLE_MAX_KEY MAX_KEY /* Max allowed keys */ #define BLACKHOLE_MAX_KEY_SEG 16 /* Max segments for key */ -#define BLACKHOLE_MAX_KEY_LENGTH 1000 +#define BLACKHOLE_MAX_KEY_LENGTH 3500 /* Like in InnoDB */ uint max_supported_keys() const { return BLACKHOLE_MAX_KEY; } uint max_supported_key_length() const { return BLACKHOLE_MAX_KEY_LENGTH; } uint max_supported_key_part_length() const { return BLACKHOLE_MAX_KEY_LENGTH; } From e946db6e35dad9aadfbfaad72a2de858f7804381 Mon Sep 17 00:00:00 2001 From: hrvojem Date: Thu, 14 Dec 2017 16:49:56 +0100 Subject: [PATCH 0294/1221] Fixed indentation on the release notes Fixed missing links to encryption docs from release notes Had split MyRocks variables docs as it was too big for Drupal to import --- doc/source/index.rst | 3 +- doc/source/myrocks/status_variables.rst | 679 +++++++++++++++++ doc/source/myrocks/variables.rst | 694 +----------------- doc/source/performance/aio_page_requests.rst | 2 +- .../Percona-Server-5.7.20-18.rst | 74 +- 5 files changed, 723 insertions(+), 729 deletions(-) create mode 100644 doc/source/myrocks/status_variables.rst diff --git a/doc/source/index.rst b/doc/source/index.rst index 44a17973347e..ba1bd54010bc 100644 --- a/doc/source/index.rst +++ b/doc/source/index.rst @@ -175,7 +175,8 @@ Percona MyRocks Installation Limitations Differences - Variables + Server Variables + Status Variables myrocks/gap_locks_detection Reference diff --git a/doc/source/myrocks/status_variables.rst b/doc/source/myrocks/status_variables.rst new file mode 100644 index 000000000000..eae44b9217fb --- /dev/null +++ b/doc/source/myrocks/status_variables.rst @@ -0,0 +1,679 @@ +.. _myrocks_status_variables: + +======================== +MyRocks Status Variables +======================== + +MyRocks status variables provide details +about the inner workings of the storage engine +and they can be useful in tuning the storage engine +to a particular environment. + +You can view these variables and their values by running: + +.. code-block:: mysql + + mysql> SHOW STATUS LIKE 'rocksdb%'; + +The following global status variables are available: + +.. tabularcolumns:: |p{9cm}|p{6cm}| + +.. list-table:: + :header-rows: 1 + + * - Name + - Var Type + * - :variable:`rocksdb_rows_deleted` + - Numeric + * - :variable:`rocksdb_rows_inserted` + - Numeric + * - :variable:`rocksdb_rows_read` + - Numeric + * - :variable:`rocksdb_rows_updated` + - Numeric + * - :variable:`rocksdb_rows_expired` + - Numeric + * - :variable:`rocksdb_system_rows_deleted` + - Numeric + * - :variable:`rocksdb_system_rows_inserted` + - Numeric + * - :variable:`rocksdb_system_rows_read` + - Numeric + * - :variable:`rocksdb_system_rows_updated` + - Numeric + * - :variable:`rocksdb_memtable_total` + - Numeric + * - :variable:`rocksdb_memtable_unflushed` + - Numeric + * - :variable:`rocksdb_queries_point` + - Numeric + * - :variable:`rocksdb_queries_range` + - Numeric + * - :variable:`rocksdb_covered_secondary_key_lookups` + - Numeric + * - :variable:`rocksdb_block_cache_add` + - Numeric + * - :variable:`rocksdb_block_cache_add_failures` + - Numeric + * - :variable:`rocksdb_block_cache_bytes_read` + - Numeric + * - :variable:`rocksdb_block_cache_bytes_write` + - Numeric + * - :variable:`rocksdb_block_cache_data_add` + - Numeric + * - :variable:`rocksdb_block_cache_data_bytes_insert` + - Numeric + * - :variable:`rocksdb_block_cache_data_hit` + - Numeric + * - :variable:`rocksdb_block_cache_data_miss` + - Numeric + * - :variable:`rocksdb_block_cache_filter_add` + - Numeric + * - :variable:`rocksdb_block_cache_filter_bytes_evict` + - Numeric + * - :variable:`rocksdb_block_cache_filter_bytes_insert` + - Numeric + * - :variable:`rocksdb_block_cache_filter_hit` + - Numeric + * - :variable:`rocksdb_block_cache_filter_miss` + - Numeric + * - :variable:`rocksdb_block_cache_hit` + - Numeric + * - :variable:`rocksdb_block_cache_index_add` + - Numeric + * - :variable:`rocksdb_block_cache_index_bytes_evict` + - Numeric + * - :variable:`rocksdb_block_cache_index_bytes_insert` + - Numeric + * - :variable:`rocksdb_block_cache_index_hit` + - Numeric + * - :variable:`rocksdb_block_cache_index_miss` + - Numeric + * - :variable:`rocksdb_block_cache_miss` + - Numeric + * - :variable:`rocksdb_block_cachecompressed_hit` + - Numeric + * - :variable:`rocksdb_block_cachecompressed_miss` + - Numeric + * - :variable:`rocksdb_bloom_filter_prefix_checked` + - Numeric + * - :variable:`rocksdb_bloom_filter_prefix_useful` + - Numeric + * - :variable:`rocksdb_bloom_filter_useful` + - Numeric + * - :variable:`rocksdb_bytes_read` + - Numeric + * - :variable:`rocksdb_bytes_written` + - Numeric + * - :variable:`rocksdb_compact_read_bytes` + - Numeric + * - :variable:`rocksdb_compact_write_bytes` + - Numeric + * - :variable:`rocksdb_compaction_key_drop_new` + - Numeric + * - :variable:`rocksdb_compaction_key_drop_obsolete` + - Numeric + * - :variable:`rocksdb_compaction_key_drop_user` + - Numeric + * - :variable:`rocksdb_flush_write_bytes` + - Numeric + * - :variable:`rocksdb_get_hit_l0` + - Numeric + * - :variable:`rocksdb_get_hit_l1` + - Numeric + * - :variable:`rocksdb_get_hit_l2_and_up` + - Numeric + * - :variable:`rocksdb_getupdatessince_calls` + - Numeric + * - :variable:`rocksdb_iter_bytes_read` + - Numeric + * - :variable:`rocksdb_memtable_hit` + - Numeric + * - :variable:`rocksdb_memtable_miss` + - Numeric + * - :variable:`rocksdb_no_file_closes` + - Numeric + * - :variable:`rocksdb_no_file_errors` + - Numeric + * - :variable:`rocksdb_no_file_opens` + - Numeric + * - :variable:`rocksdb_num_iterators` + - Numeric + * - :variable:`rocksdb_number_block_not_compressed` + - Numeric + * - :variable:`rocksdb_number_db_next` + - Numeric + * - :variable:`rocksdb_number_db_next_found` + - Numeric + * - :variable:`rocksdb_number_db_prev` + - Numeric + * - :variable:`rocksdb_number_db_prev_found` + - Numeric + * - :variable:`rocksdb_number_db_seek` + - Numeric + * - :variable:`rocksdb_number_db_seek_found` + - Numeric + * - :variable:`rocksdb_number_deletes_filtered` + - Numeric + * - :variable:`rocksdb_number_keys_read` + - Numeric + * - :variable:`rocksdb_number_keys_updated` + - Numeric + * - :variable:`rocksdb_number_keys_written` + - Numeric + * - :variable:`rocksdb_number_merge_failures` + - Numeric + * - :variable:`rocksdb_number_multiget_bytes_read` + - Numeric + * - :variable:`rocksdb_number_multiget_get` + - Numeric + * - :variable:`rocksdb_number_multiget_keys_read` + - Numeric + * - :variable:`rocksdb_number_reseeks_iteration` + - Numeric + * - :variable:`rocksdb_number_sst_entry_delete` + - Numeric + * - :variable:`rocksdb_number_sst_entry_merge` + - Numeric + * - :variable:`rocksdb_number_sst_entry_other` + - Numeric + * - :variable:`rocksdb_number_sst_entry_put` + - Numeric + * - :variable:`rocksdb_number_sst_entry_singledelete` + - Numeric + * - :variable:`rocksdb_number_stat_computes` + - Numeric + * - :variable:`rocksdb_number_superversion_acquires` + - Numeric + * - :variable:`rocksdb_number_superversion_cleanups` + - Numeric + * - :variable:`rocksdb_number_superversion_releases` + - Numeric + * - :variable:`rocksdb_rate_limit_delay_millis` + - Numeric + * - :variable:`rocksdb_snapshot_conflict_errors` + - Numeric + * - :variable:`rocksdb_stall_l0_file_count_limit_slowdowns` + - Numeric + * - :variable:`rocksdb_stall_locked_l0_file_count_limit_slowdowns` + - Numeric + * - :variable:`rocksdb_stall_l0_file_count_limit_stops` + - Numeric + * - :variable:`rocksdb_stall_locked_l0_file_count_limit_stops` + - Numeric + * - :variable:`rocksdb_stall_pending_compaction_limit_stops` + - Numeric + * - :variable:`rocksdb_stall_pending_compaction_limit_slowdowns` + - Numeric + * - :variable:`rocksdb_stall_memtable_limit_stops` + - Numeric + * - :variable:`rocksdb_stall_memtable_limit_slowdowns` + - Numeric + * - :variable:`rocksdb_stall_total_stops` + - Numeric + * - :variable:`rocksdb_stall_total_slowdowns` + - Numeric + * - :variable:`rocksdb_stall_micros` + - Numeric + * - :variable:`rocksdb_wal_bytes` + - Numeric + * - :variable:`rocksdb_wal_group_syncs` + - Numeric + * - :variable:`rocksdb_wal_synced` + - Numeric + * - :variable:`rocksdb_write_other` + - Numeric + * - :variable:`rocksdb_write_self` + - Numeric + * - :variable:`rocksdb_write_timedout` + - Numeric + * - :variable:`rocksdb_write_wal` + - Numeric + +.. variable:: rocksdb_rows_deleted + +This variable shows the number of rows that were deleted from MyRocks tables. + +.. variable:: rocksdb_rows_inserted + +This variable shows the number of rows that were inserted into MyRocks tables. + +.. variable:: rocksdb_rows_read + +This variable shows the number of rows that were read from MyRocks tables. + +.. variable:: rocksdb_rows_updated + +This variable shows the number of rows that were updated in MyRocks tables. + +.. variable:: rocksdb_rows_expired + +This variable shows the number of expired rows in MyRocks tables. + +.. variable:: rocksdb_system_rows_deleted + +This variable shows the number of rows that were deleted +from MyRocks system tables. + +.. variable:: rocksdb_system_rows_inserted + +This variable shows the number of rows that were inserted +into MyRocks system tables. + +.. variable:: rocksdb_system_rows_read + +This variable shows the number of rows that were read +from MyRocks system tables. + +.. variable:: rocksdb_system_rows_updated + +This variable shows the number of rows that were updated +in MyRocks system tables. + +.. variable:: rocksdb_memtable_total + +This variable shows the memory usage, in bytes, of all memtables. + +.. variable:: rocksdb_memtable_unflushed + +This variable shows the memory usage, in bytes, of all unflushed memtables. + +.. variable:: rocksdb_queries_point + +This variable shows the number of single row queries. + +.. variable:: rocksdb_queries_range + +This variable shows the number of multi/range row queries. + +.. variable:: rocksdb_covered_secondary_key_lookups + +This variable shows the number of lookups via secondary index that were able to +return all fields requested directly from the secondary index when the +secondary index contained a field that is only a prefix of the +``varchar`` column. + +.. variable:: rocksdb_block_cache_add + +This variable shows the number of blocks added to block cache. + +.. variable:: rocksdb_block_cache_add_failures + +This variable shows the number of failures when adding blocks to block cache. + +.. variable:: rocksdb_block_cache_bytes_read + +This variable shows the number of bytes read from cache. + +.. variable:: rocksdb_block_cache_bytes_write + +This variable shows the number of bytes written into cache. + +.. variable:: rocksdb_block_cache_data_add + +This variable shows the number of data blocks added to block cache. + +.. variable:: rocksdb_block_cache_data_bytes_insert + +This variable shows the number of bytes of data blocks inserted into cache. + +.. variable:: rocksdb_block_cache_data_hit + +This variable shows the number of cache hits when accessing the +data block from the block cache. + +.. variable:: rocksdb_block_cache_data_miss + +This variable shows the number of cache misses when accessing the +data block from the block cache. + +.. variable:: rocksdb_block_cache_filter_add + +This variable shows the number of filter blocks added to block cache. + +.. variable:: rocksdb_block_cache_filter_bytes_evict + +This variable shows the number of bytes of bloom filter blocks +removed from cache. + +.. variable:: rocksdb_block_cache_filter_bytes_insert + +This variable shows the number of bytes of bloom filter blocks +inserted into cache. + +.. variable:: rocksdb_block_cache_filter_hit + +This variable shows the number of times cache hit when accessing filter block +from block cache. + +.. variable:: rocksdb_block_cache_filter_miss + +This variable shows the number of times cache miss when accessing filter +block from block cache. + +.. variable:: rocksdb_block_cache_hit + +This variable shows the total number of block cache hits. + +.. variable:: rocksdb_block_cache_index_add + +This variable shows the number of index blocks added to block cache. + +.. variable:: rocksdb_block_cache_index_bytes_evict + +This variable shows the number of bytes of index block erased from cache. + +.. variable:: rocksdb_block_cache_index_bytes_insert + +This variable shows the number of bytes of index blocks inserted into cache. + +.. variable:: rocksdb_block_cache_index_hit + +This variable shows the total number of block cache index hits. + +.. variable:: rocksdb_block_cache_index_miss + +This variable shows the number of times cache hit when accessing index +block from block cache. + +.. variable:: rocksdb_block_cache_miss + +This variable shows the total number of block cache misses. + +.. variable:: rocksdb_block_cachecompressed_hit + +This variable shows the number of hits in the compressed block cache. + +.. variable:: rocksdb_block_cachecompressed_miss + +This variable shows the number of misses in the compressed block cache. + +.. variable:: rocksdb_bloom_filter_prefix_checked + +This variable shows the number of times bloom was checked before +creating iterator on a file. + +.. variable:: rocksdb_bloom_filter_prefix_useful + +This variable shows the number of times the check was useful in avoiding +iterator creation (and thus likely IOPs). + +.. variable:: rocksdb_bloom_filter_useful + +This variable shows the number of times bloom filter has avoided file reads. + +.. variable:: rocksdb_bytes_read + +This variable shows the total number of uncompressed bytes read. It could be +either from memtables, cache, or table files. + +.. variable:: rocksdb_bytes_written + +This variable shows the total number of uncompressed bytes written. + +.. variable:: rocksdb_compact_read_bytes + +This variable shows the number of bytes read during compaction + +.. variable:: rocksdb_compact_write_bytes + +This variable shows the number of bytes written during compaction. + +.. variable:: rocksdb_compaction_key_drop_new + +This variable shows the number of key drops during compaction because +it was overwritten with a newer value. + +.. variable:: rocksdb_compaction_key_drop_obsolete + +This variable shows the number of key drops during compaction because +it was obsolete. + +.. variable:: rocksdb_compaction_key_drop_user + +This variable shows the number of key drops during compaction because +user compaction function has dropped the key. + +.. variable:: rocksdb_flush_write_bytes + +This variable shows the number of bytes written during flush. + +.. variable:: rocksdb_get_hit_l0 + +This variable shows the number of ``Get()`` queries served by L0. + +.. variable:: rocksdb_get_hit_l1 + +This variable shows the number of ``Get()`` queries served by L1. + +.. variable:: rocksdb_get_hit_l2_and_up + +This variable shows the number of ``Get()`` queries served by L2 and up. + +.. variable:: rocksdb_getupdatessince_calls + +This variable shows the number of calls to ``GetUpdatesSince`` function. +Useful to keep track of transaction log iterator refreshes + +.. variable:: rocksdb_iter_bytes_read + +This variable shows the number of uncompressed bytes read from an iterator. +It includes size of key and value. + +.. variable:: rocksdb_memtable_hit + +This variable shows the number of memtable hits. + +.. variable:: rocksdb_memtable_miss + +This variable shows the number of memtable misses. + +.. variable:: rocksdb_no_file_closes + +This variable shows the number of time file were closed. + +.. variable:: rocksdb_no_file_errors + +This variable shows number of errors trying to read in data from an sst file. + +.. variable:: rocksdb_no_file_opens + +This variable shows the number of time file were opened. + +.. variable:: rocksdb_num_iterators + +This variable shows the number of currently open iterators. + +.. variable:: rocksdb_number_block_not_compressed + +This variable shows the number of uncompressed blocks. + +.. variable:: rocksdb_number_db_next + +This variable shows the number of calls to ``next``. + +.. variable:: rocksdb_number_db_next_found + +This variable shows the number of calls to ``next`` that returned data. + +.. variable:: rocksdb_number_db_prev + +This variable shows the number of calls to ``prev``. + +.. variable:: rocksdb_number_db_prev_found + +This variable shows the number of calls to ``prev`` that returned data. + +.. variable:: rocksdb_number_db_seek + +This variable shows the number of calls to ``seek``. + +.. variable:: rocksdb_number_db_seek_found + +This variable shows the number of calls to ``seek`` that returned data. + +.. variable:: rocksdb_number_deletes_filtered + +This variable shows the number of deleted records that were not required to be +written to storage because key did not exist. + +.. variable:: rocksdb_number_keys_read + +This variable shows the number of keys read. + +.. variable:: rocksdb_number_keys_updated + +This variable shows the number of keys updated, if inplace update is enabled. + +.. variable:: rocksdb_number_keys_written + +This variable shows the number of keys written to the database. + +.. variable:: rocksdb_number_merge_failures + +This variable shows the number of failures performing merge operator actions +in RocksDB. + +.. variable:: rocksdb_number_multiget_bytes_read + +This variable shows the number of bytes read during RocksDB +``MultiGet()`` calls. + +.. variable:: rocksdb_number_multiget_get + +This variable shows the number ``MultiGet()`` requests to RocksDB. + +.. variable:: rocksdb_number_multiget_keys_read + +This variable shows the keys read via ``MultiGet()``. + +.. variable:: rocksdb_number_reseeks_iteration + +This variable shows the number of times reseek happened inside an iteration to +skip over large number of keys with same userkey. + +.. variable:: rocksdb_number_sst_entry_delete + +This variable shows the total number of delete markers written by MyRocks. + +.. variable:: rocksdb_number_sst_entry_merge + +This variable shows the total number of merge keys written by MyRocks. + +.. variable:: rocksdb_number_sst_entry_other + +This variable shows the total number of non-delete, non-merge, non-put keys +written by MyRocks. + +.. variable:: rocksdb_number_sst_entry_put + +This variable shows the total number of put keys written by MyRocks. + +.. variable:: rocksdb_number_sst_entry_singledelete + +This variable shows the total number of single delete keys written by MyRocks. + +.. variable:: rocksdb_number_stat_computes + +This variable isn't used anymore and will be removed in future releases. + +.. variable:: rocksdb_number_superversion_acquires + +This variable shows the number of times the superversion structure has been +acquired in RocksDB, this is used for tracking all of the files for the +database. + +.. variable:: rocksdb_number_superversion_cleanups + +.. variable:: rocksdb_number_superversion_releases + +.. variable:: rocksdb_rate_limit_delay_millis + +This variable isn't used anymore and will be removed in future releases. + +.. variable:: rocksdb_snapshot_conflict_errors + +This variable shows the number of snapshot conflict errors occurring during +write transactions that forces the transaction to rollback. + +.. variable:: rocksdb_stall_l0_file_count_limit_slowdowns + +This variable shows the slowdowns in write due to L0 being close to full. + +.. variable:: rocksdb_stall_locked_l0_file_count_limit_slowdowns + +This variable shows the slowdowns in write due to L0 being close to full and +compaction for L0 is already in progress. + +.. variable:: rocksdb_stall_l0_file_count_limit_stops + +This variable shows the stalls in write due to L0 being full. + +.. variable:: rocksdb_stall_locked_l0_file_count_limit_stops + +This variable shows the stalls in write due to L0 being full and compaction +for L0 is already in progress. + +.. variable:: rocksdb_stall_pending_compaction_limit_stops + +This variable shows the stalls in write due to hitting limits set for max +number of pending compaction bytes. + +.. variable:: rocksdb_stall_pending_compaction_limit_slowdowns + +This variable shows the slowdowns in write due to getting close to limits set +for max number of pending compaction bytes. + +.. variable:: rocksdb_stall_memtable_limit_stops + +This variable shows the stalls in write due to hitting max number of +``memTables`` allowed. + +.. variable:: rocksdb_stall_memtable_limit_slowdowns + +This variable shows the slowdowns in writes due to getting close to +max number of memtables allowed. + +.. variable:: rocksdb_stall_total_stops + +This variable shows the total number of write stalls. + +.. variable:: rocksdb_stall_total_slowdowns + +This variable shows the total number of write slowdowns. + +.. variable:: rocksdb_stall_micros + +This variable shows how long (in microseconds) the writer had to wait for +compaction or flush to finish. + +.. variable:: rocksdb_wal_bytes + +This variables shows the number of bytes written to WAL. + +.. variable:: rocksdb_wal_group_syncs + +This variable shows the number of group commit WAL file syncs +that have occurred. + +.. variable:: rocksdb_wal_synced + +This variable shows the number of times WAL sync was done. + +.. variable:: rocksdb_write_other + +This variable shows the number of writes processed by another thread. + +.. variable:: rocksdb_write_self + +This variable shows the number of writes that were processed +by a requesting thread. + +.. variable:: rocksdb_write_timedout + +This variable shows the number of writes ending up with timed-out. + +.. variable:: rocksdb_write_wal + +This variable shows the number of Write calls that request WAL. diff --git a/doc/source/myrocks/variables.rst b/doc/source/myrocks/variables.rst index 3dc5283eea7a..6825d08adf1f 100644 --- a/doc/source/myrocks/variables.rst +++ b/doc/source/myrocks/variables.rst @@ -1,19 +1,8 @@ -.. _myrocks_variables: - -================= -MyRocks Variables -================= - -MyRocks provides variables to tune performance -and manage the behavior of the storage engine. - -.. contents:: - :local: - .. _myrocks_server_variables: +======================== MyRocks Server Variables ------------------------- +======================== The MyRocks server variables expose configuration of the underlying RocksDB engine. @@ -2300,682 +2289,3 @@ which can be useful for bulk loading. Specifies whether to ignore writes to column families that do not exist. Disabled by default (writes to non-existent column families are not ignored). - -.. _myrocks_status_variables: - -MyRocks Status Variables -------------------------- - -MyRocks status variables provide details -about the inner workings of the storage engine -and they can be useful in tuning the storage engine -to a particular environment. - -You can view these variables and their values by running: - -.. code-block:: mysql - - mysql> SHOW STATUS LIKE 'rocksdb%'; - -The following global status variables are available: - -.. tabularcolumns:: |p{9cm}|p{6cm}| - -.. list-table:: - :header-rows: 1 - - * - Name - - Var Type - * - :variable:`rocksdb_rows_deleted` - - Numeric - * - :variable:`rocksdb_rows_inserted` - - Numeric - * - :variable:`rocksdb_rows_read` - - Numeric - * - :variable:`rocksdb_rows_updated` - - Numeric - * - :variable:`rocksdb_rows_expired` - - Numeric - * - :variable:`rocksdb_system_rows_deleted` - - Numeric - * - :variable:`rocksdb_system_rows_inserted` - - Numeric - * - :variable:`rocksdb_system_rows_read` - - Numeric - * - :variable:`rocksdb_system_rows_updated` - - Numeric - * - :variable:`rocksdb_memtable_total` - - Numeric - * - :variable:`rocksdb_memtable_unflushed` - - Numeric - * - :variable:`rocksdb_queries_point` - - Numeric - * - :variable:`rocksdb_queries_range` - - Numeric - * - :variable:`rocksdb_covered_secondary_key_lookups` - - Numeric - * - :variable:`rocksdb_block_cache_add` - - Numeric - * - :variable:`rocksdb_block_cache_add_failures` - - Numeric - * - :variable:`rocksdb_block_cache_bytes_read` - - Numeric - * - :variable:`rocksdb_block_cache_bytes_write` - - Numeric - * - :variable:`rocksdb_block_cache_data_add` - - Numeric - * - :variable:`rocksdb_block_cache_data_bytes_insert` - - Numeric - * - :variable:`rocksdb_block_cache_data_hit` - - Numeric - * - :variable:`rocksdb_block_cache_data_miss` - - Numeric - * - :variable:`rocksdb_block_cache_filter_add` - - Numeric - * - :variable:`rocksdb_block_cache_filter_bytes_evict` - - Numeric - * - :variable:`rocksdb_block_cache_filter_bytes_insert` - - Numeric - * - :variable:`rocksdb_block_cache_filter_hit` - - Numeric - * - :variable:`rocksdb_block_cache_filter_miss` - - Numeric - * - :variable:`rocksdb_block_cache_hit` - - Numeric - * - :variable:`rocksdb_block_cache_index_add` - - Numeric - * - :variable:`rocksdb_block_cache_index_bytes_evict` - - Numeric - * - :variable:`rocksdb_block_cache_index_bytes_insert` - - Numeric - * - :variable:`rocksdb_block_cache_index_hit` - - Numeric - * - :variable:`rocksdb_block_cache_index_miss` - - Numeric - * - :variable:`rocksdb_block_cache_miss` - - Numeric - * - :variable:`rocksdb_block_cachecompressed_hit` - - Numeric - * - :variable:`rocksdb_block_cachecompressed_miss` - - Numeric - * - :variable:`rocksdb_bloom_filter_prefix_checked` - - Numeric - * - :variable:`rocksdb_bloom_filter_prefix_useful` - - Numeric - * - :variable:`rocksdb_bloom_filter_useful` - - Numeric - * - :variable:`rocksdb_bytes_read` - - Numeric - * - :variable:`rocksdb_bytes_written` - - Numeric - * - :variable:`rocksdb_compact_read_bytes` - - Numeric - * - :variable:`rocksdb_compact_write_bytes` - - Numeric - * - :variable:`rocksdb_compaction_key_drop_new` - - Numeric - * - :variable:`rocksdb_compaction_key_drop_obsolete` - - Numeric - * - :variable:`rocksdb_compaction_key_drop_user` - - Numeric - * - :variable:`rocksdb_flush_write_bytes` - - Numeric - * - :variable:`rocksdb_get_hit_l0` - - Numeric - * - :variable:`rocksdb_get_hit_l1` - - Numeric - * - :variable:`rocksdb_get_hit_l2_and_up` - - Numeric - * - :variable:`rocksdb_getupdatessince_calls` - - Numeric - * - :variable:`rocksdb_iter_bytes_read` - - Numeric - * - :variable:`rocksdb_memtable_hit` - - Numeric - * - :variable:`rocksdb_memtable_miss` - - Numeric - * - :variable:`rocksdb_no_file_closes` - - Numeric - * - :variable:`rocksdb_no_file_errors` - - Numeric - * - :variable:`rocksdb_no_file_opens` - - Numeric - * - :variable:`rocksdb_num_iterators` - - Numeric - * - :variable:`rocksdb_number_block_not_compressed` - - Numeric - * - :variable:`rocksdb_number_db_next` - - Numeric - * - :variable:`rocksdb_number_db_next_found` - - Numeric - * - :variable:`rocksdb_number_db_prev` - - Numeric - * - :variable:`rocksdb_number_db_prev_found` - - Numeric - * - :variable:`rocksdb_number_db_seek` - - Numeric - * - :variable:`rocksdb_number_db_seek_found` - - Numeric - * - :variable:`rocksdb_number_deletes_filtered` - - Numeric - * - :variable:`rocksdb_number_keys_read` - - Numeric - * - :variable:`rocksdb_number_keys_updated` - - Numeric - * - :variable:`rocksdb_number_keys_written` - - Numeric - * - :variable:`rocksdb_number_merge_failures` - - Numeric - * - :variable:`rocksdb_number_multiget_bytes_read` - - Numeric - * - :variable:`rocksdb_number_multiget_get` - - Numeric - * - :variable:`rocksdb_number_multiget_keys_read` - - Numeric - * - :variable:`rocksdb_number_reseeks_iteration` - - Numeric - * - :variable:`rocksdb_number_sst_entry_delete` - - Numeric - * - :variable:`rocksdb_number_sst_entry_merge` - - Numeric - * - :variable:`rocksdb_number_sst_entry_other` - - Numeric - * - :variable:`rocksdb_number_sst_entry_put` - - Numeric - * - :variable:`rocksdb_number_sst_entry_singledelete` - - Numeric - * - :variable:`rocksdb_number_stat_computes` - - Numeric - * - :variable:`rocksdb_number_superversion_acquires` - - Numeric - * - :variable:`rocksdb_number_superversion_cleanups` - - Numeric - * - :variable:`rocksdb_number_superversion_releases` - - Numeric - * - :variable:`rocksdb_rate_limit_delay_millis` - - Numeric - * - :variable:`rocksdb_snapshot_conflict_errors` - - Numeric - * - :variable:`rocksdb_stall_l0_file_count_limit_slowdowns` - - Numeric - * - :variable:`rocksdb_stall_locked_l0_file_count_limit_slowdowns` - - Numeric - * - :variable:`rocksdb_stall_l0_file_count_limit_stops` - - Numeric - * - :variable:`rocksdb_stall_locked_l0_file_count_limit_stops` - - Numeric - * - :variable:`rocksdb_stall_pending_compaction_limit_stops` - - Numeric - * - :variable:`rocksdb_stall_pending_compaction_limit_slowdowns` - - Numeric - * - :variable:`rocksdb_stall_memtable_limit_stops` - - Numeric - * - :variable:`rocksdb_stall_memtable_limit_slowdowns` - - Numeric - * - :variable:`rocksdb_stall_total_stops` - - Numeric - * - :variable:`rocksdb_stall_total_slowdowns` - - Numeric - * - :variable:`rocksdb_stall_micros` - - Numeric - * - :variable:`rocksdb_wal_bytes` - - Numeric - * - :variable:`rocksdb_wal_group_syncs` - - Numeric - * - :variable:`rocksdb_wal_synced` - - Numeric - * - :variable:`rocksdb_write_other` - - Numeric - * - :variable:`rocksdb_write_self` - - Numeric - * - :variable:`rocksdb_write_timedout` - - Numeric - * - :variable:`rocksdb_write_wal` - - Numeric - -.. variable:: rocksdb_rows_deleted - -This variable shows the number of rows that were deleted from MyRocks tables. - -.. variable:: rocksdb_rows_inserted - -This variable shows the number of rows that were inserted into MyRocks tables. - -.. variable:: rocksdb_rows_read - -This variable shows the number of rows that were read from MyRocks tables. - -.. variable:: rocksdb_rows_updated - -This variable shows the number of rows that were updated in MyRocks tables. - -.. variable:: rocksdb_rows_expired - -This variable shows the number of expired rows in MyRocks tables. - -.. variable:: rocksdb_system_rows_deleted - -This variable shows the number of rows that were deleted -from MyRocks system tables. - -.. variable:: rocksdb_system_rows_inserted - -This variable shows the number of rows that were inserted -into MyRocks system tables. - -.. variable:: rocksdb_system_rows_read - -This variable shows the number of rows that were read -from MyRocks system tables. - -.. variable:: rocksdb_system_rows_updated - -This variable shows the number of rows that were updated -in MyRocks system tables. - -.. variable:: rocksdb_memtable_total - -This variable shows the memory usage, in bytes, of all memtables. - -.. variable:: rocksdb_memtable_unflushed - -This variable shows the memory usage, in bytes, of all unflushed memtables. - -.. variable:: rocksdb_queries_point - -This variable shows the number of single row queries. - -.. variable:: rocksdb_queries_range - -This variable shows the number of multi/range row queries. - -.. variable:: rocksdb_covered_secondary_key_lookups - -This variable shows the number of lookups via secondary index that were able to -return all fields requested directly from the secondary index when the -secondary index contained a field that is only a prefix of the -``varchar`` column. - -.. variable:: rocksdb_block_cache_add - -This variable shows the number of blocks added to block cache. - -.. variable:: rocksdb_block_cache_add_failures - -This variable shows the number of failures when adding blocks to block cache. - -.. variable:: rocksdb_block_cache_bytes_read - -This variable shows the number of bytes read from cache. - -.. variable:: rocksdb_block_cache_bytes_write - -This variable shows the number of bytes written into cache. - -.. variable:: rocksdb_block_cache_data_add - -This variable shows the number of data blocks added to block cache. - -.. variable:: rocksdb_block_cache_data_bytes_insert - -This variable shows the number of bytes of data blocks inserted into cache. - -.. variable:: rocksdb_block_cache_data_hit - -This variable shows the number of cache hits when accessing the -data block from the block cache. - -.. variable:: rocksdb_block_cache_data_miss - -This variable shows the number of cache misses when accessing the -data block from the block cache. - -.. variable:: rocksdb_block_cache_filter_add - -This variable shows the number of filter blocks added to block cache. - -.. variable:: rocksdb_block_cache_filter_bytes_evict - -This variable shows the number of bytes of bloom filter blocks -removed from cache. - -.. variable:: rocksdb_block_cache_filter_bytes_insert - -This variable shows the number of bytes of bloom filter blocks -inserted into cache. - -.. variable:: rocksdb_block_cache_filter_hit - -This variable shows the number of times cache hit when accessing filter block -from block cache. - -.. variable:: rocksdb_block_cache_filter_miss - -This variable shows the number of times cache miss when accessing filter -block from block cache. - -.. variable:: rocksdb_block_cache_hit - -This variable shows the total number of block cache hits. - -.. variable:: rocksdb_block_cache_index_add - -This variable shows the number of index blocks added to block cache. - -.. variable:: rocksdb_block_cache_index_bytes_evict - -This variable shows the number of bytes of index block erased from cache. - -.. variable:: rocksdb_block_cache_index_bytes_insert - -This variable shows the number of bytes of index blocks inserted into cache. - -.. variable:: rocksdb_block_cache_index_hit - -This variable shows the total number of block cache index hits. - -.. variable:: rocksdb_block_cache_index_miss - -This variable shows the number of times cache hit when accessing index -block from block cache. - -.. variable:: rocksdb_block_cache_miss - -This variable shows the total number of block cache misses. - -.. variable:: rocksdb_block_cachecompressed_hit - -This variable shows the number of hits in the compressed block cache. - -.. variable:: rocksdb_block_cachecompressed_miss - -This variable shows the number of misses in the compressed block cache. - -.. variable:: rocksdb_bloom_filter_prefix_checked - -This variable shows the number of times bloom was checked before -creating iterator on a file. - -.. variable:: rocksdb_bloom_filter_prefix_useful - -This variable shows the number of times the check was useful in avoiding -iterator creation (and thus likely IOPs). - -.. variable:: rocksdb_bloom_filter_useful - -This variable shows the number of times bloom filter has avoided file reads. - -.. variable:: rocksdb_bytes_read - -This variable shows the total number of uncompressed bytes read. It could be -either from memtables, cache, or table files. - -.. variable:: rocksdb_bytes_written - -This variable shows the total number of uncompressed bytes written. - -.. variable:: rocksdb_compact_read_bytes - -This variable shows the number of bytes read during compaction - -.. variable:: rocksdb_compact_write_bytes - -This variable shows the number of bytes written during compaction. - -.. variable:: rocksdb_compaction_key_drop_new - -This variable shows the number of key drops during compaction because -it was overwritten with a newer value. - -.. variable:: rocksdb_compaction_key_drop_obsolete - -This variable shows the number of key drops during compaction because -it was obsolete. - -.. variable:: rocksdb_compaction_key_drop_user - -This variable shows the number of key drops during compaction because -user compaction function has dropped the key. - -.. variable:: rocksdb_flush_write_bytes - -This variable shows the number of bytes written during flush. - -.. variable:: rocksdb_get_hit_l0 - -This variable shows the number of ``Get()`` queries served by L0. - -.. variable:: rocksdb_get_hit_l1 - -This variable shows the number of ``Get()`` queries served by L1. - -.. variable:: rocksdb_get_hit_l2_and_up - -This variable shows the number of ``Get()`` queries served by L2 and up. - -.. variable:: rocksdb_getupdatessince_calls - -This variable shows the number of calls to ``GetUpdatesSince`` function. -Useful to keep track of transaction log iterator refreshes - -.. variable:: rocksdb_iter_bytes_read - -This variable shows the number of uncompressed bytes read from an iterator. -It includes size of key and value. - -.. variable:: rocksdb_memtable_hit - -This variable shows the number of memtable hits. - -.. variable:: rocksdb_memtable_miss - -This variable shows the number of memtable misses. - -.. variable:: rocksdb_no_file_closes - -This variable shows the number of time file were closed. - -.. variable:: rocksdb_no_file_errors - -This variable shows number of errors trying to read in data from an sst file. - -.. variable:: rocksdb_no_file_opens - -This variable shows the number of time file were opened. - -.. variable:: rocksdb_num_iterators - -This variable shows the number of currently open iterators. - -.. variable:: rocksdb_number_block_not_compressed - -This variable shows the number of uncompressed blocks. - -.. variable:: rocksdb_number_db_next - -This variable shows the number of calls to ``next``. - -.. variable:: rocksdb_number_db_next_found - -This variable shows the number of calls to ``next`` that returned data. - -.. variable:: rocksdb_number_db_prev - -This variable shows the number of calls to ``prev``. - -.. variable:: rocksdb_number_db_prev_found - -This variable shows the number of calls to ``prev`` that returned data. - -.. variable:: rocksdb_number_db_seek - -This variable shows the number of calls to ``seek``. - -.. variable:: rocksdb_number_db_seek_found - -This variable shows the number of calls to ``seek`` that returned data. - -.. variable:: rocksdb_number_deletes_filtered - -This variable shows the number of deleted records that were not required to be -written to storage because key did not exist. - -.. variable:: rocksdb_number_keys_read - -This variable shows the number of keys read. - -.. variable:: rocksdb_number_keys_updated - -This variable shows the number of keys updated, if inplace update is enabled. - -.. variable:: rocksdb_number_keys_written - -This variable shows the number of keys written to the database. - -.. variable:: rocksdb_number_merge_failures - -This variable shows the number of failures performing merge operator actions -in RocksDB. - -.. variable:: rocksdb_number_multiget_bytes_read - -This variable shows the number of bytes read during RocksDB -``MultiGet()`` calls. - -.. variable:: rocksdb_number_multiget_get - -This variable shows the number ``MultiGet()`` requests to RocksDB. - -.. variable:: rocksdb_number_multiget_keys_read - -This variable shows the keys read via ``MultiGet()``. - -.. variable:: rocksdb_number_reseeks_iteration - -This variable shows the number of times reseek happened inside an iteration to -skip over large number of keys with same userkey. - -.. variable:: rocksdb_number_sst_entry_delete - -This variable shows the total number of delete markers written by MyRocks. - -.. variable:: rocksdb_number_sst_entry_merge - -This variable shows the total number of merge keys written by MyRocks. - -.. variable:: rocksdb_number_sst_entry_other - -This variable shows the total number of non-delete, non-merge, non-put keys -written by MyRocks. - -.. variable:: rocksdb_number_sst_entry_put - -This variable shows the total number of put keys written by MyRocks. - -.. variable:: rocksdb_number_sst_entry_singledelete - -This variable shows the total number of single delete keys written by MyRocks. - -.. variable:: rocksdb_number_stat_computes - -This variable isn't used anymore and will be removed in future releases. - -.. variable:: rocksdb_number_superversion_acquires - -This variable shows the number of times the superversion structure has been -acquired in RocksDB, this is used for tracking all of the files for the -database. - -.. variable:: rocksdb_number_superversion_cleanups - -.. variable:: rocksdb_number_superversion_releases - -.. variable:: rocksdb_rate_limit_delay_millis - -This variable isn't used anymore and will be removed in future releases. - -.. variable:: rocksdb_snapshot_conflict_errors - -This variable shows the number of snapshot conflict errors occurring during -write transactions that forces the transaction to rollback. - -.. variable:: rocksdb_stall_l0_file_count_limit_slowdowns - -This variable shows the slowdowns in write due to L0 being close to full. - -.. variable:: rocksdb_stall_locked_l0_file_count_limit_slowdowns - -This variable shows the slowdowns in write due to L0 being close to full and -compaction for L0 is already in progress. - -.. variable:: rocksdb_stall_l0_file_count_limit_stops - -This variable shows the stalls in write due to L0 being full. - -.. variable:: rocksdb_stall_locked_l0_file_count_limit_stops - -This variable shows the stalls in write due to L0 being full and compaction -for L0 is already in progress. - -.. variable:: rocksdb_stall_pending_compaction_limit_stops - -This variable shows the stalls in write due to hitting limits set for max -number of pending compaction bytes. - -.. variable:: rocksdb_stall_pending_compaction_limit_slowdowns - -This variable shows the slowdowns in write due to getting close to limits set -for max number of pending compaction bytes. - -.. variable:: rocksdb_stall_memtable_limit_stops - -This variable shows the stalls in write due to hitting max number of -``memTables`` allowed. - -.. variable:: rocksdb_stall_memtable_limit_slowdowns - -This variable shows the slowdowns in writes due to getting close to -max number of memtables allowed. - -.. variable:: rocksdb_stall_total_stops - -This variable shows the total number of write stalls. - -.. variable:: rocksdb_stall_total_slowdowns - -This variable shows the total number of write slowdowns. - -.. variable:: rocksdb_stall_micros - -This variable shows how long (in microseconds) the writer had to wait for -compaction or flush to finish. - -.. variable:: rocksdb_wal_bytes - -This variables shows the number of bytes written to WAL. - -.. variable:: rocksdb_wal_group_syncs - -This variable shows the number of group commit WAL file syncs -that have occurred. - -.. variable:: rocksdb_wal_synced - -This variable shows the number of times WAL sync was done. - -.. variable:: rocksdb_write_other - -This variable shows the number of writes processed by another thread. - -.. variable:: rocksdb_write_self - -This variable shows the number of writes that were processed -by a requesting thread. - -.. variable:: rocksdb_write_timedout - -This variable shows the number of writes ending up with timed-out. - -.. variable:: rocksdb_write_wal - -This variable shows the number of Write calls that request WAL. diff --git a/doc/source/performance/aio_page_requests.rst b/doc/source/performance/aio_page_requests.rst index c56f075ba80e..88e6293d4dda 100644 --- a/doc/source/performance/aio_page_requests.rst +++ b/doc/source/performance/aio_page_requests.rst @@ -30,7 +30,7 @@ Status Variables .. variable:: Innodb_buffered_aio_submitted - :version 5.6.38-83.0: Implemented + :version 5.7.20-18: Implemented :vartype: Numeric :scope: Global diff --git a/doc/source/release-notes/Percona-Server-5.7.20-18.rst b/doc/source/release-notes/Percona-Server-5.7.20-18.rst index 1853dd72c158..5826504f53d0 100644 --- a/doc/source/release-notes/Percona-Server-5.7.20-18.rst +++ b/doc/source/release-notes/Percona-Server-5.7.20-18.rst @@ -22,55 +22,59 @@ Details of this release can be found in the `5.7.20-18 milestone on Launchpad New Features ============ - * |Percona Server| packages are now available for *Ubuntu 17.10 (Artful)*. +* |Percona Server| packages are now available for *Ubuntu 17.10 (Artful)*. - * As part of :ref:`innodb_fts_improvements` a new - :variable:`innodb_ft_ignore_stopwords` variable has been implemented which - controls whether |InnoDB| Full-Text Search should ignore stopword list - when building/updating an FTS index. This feature is also fixing bug - :bug:`1679135` (upstream :mysqlbug:`84420`). +* As part of :ref:`innodb_fts_improvements` a new + :variable:`innodb_ft_ignore_stopwords` variable has been implemented which + controls whether |InnoDB| Full-Text Search should ignore stopword list + when building/updating an FTS index. This feature is also fixing bug + :bug:`1679135` (upstream :mysqlbug:`84420`). - * |Percona Server| has implemented :ref:`innodb_fragmentation_count`. +* |Percona Server| has implemented :ref:`innodb_fragmentation_count`. - * |Percona Server| has implemented support for :ref:`aio_page_requests`. - This feature was ported from a *Facebook MySQL* patch. +* |Percona Server| has implemented support for :ref:`aio_page_requests`. + This feature was ported from a *Facebook MySQL* patch. - * |Percona Server| has implemented |TokuDB| :ref:`integration - ` with ``PERFORMANCE_SCHEMA``. +* |Percona Server| has implemented |TokuDB| :ref:`integration + ` with ``PERFORMANCE_SCHEMA``. + +* As part of :ref:`data_at_rest_encryption`, |Percona Server| has implemented + support for :ref:`innodb_general_tablespace_encryption` and + :ref:`keyring_vault_plugin`. This feature is considered **BETA** quality. Bugs Fixed ========== - * |Percona Server| 5.7 docker images did not include |TokuDB|. Bugs fixed - :bug:`1682419` and :bug:`1699241`. +* |Percona Server| 5.7 docker images did not include |TokuDB|. Bugs fixed + :bug:`1682419` and :bug:`1699241`. - * If an I/O syscall returned an error during the server shutdown with - :ref:`threadpool` enabled, a mutex could be left locked. Bug fixed - :bug:`1702330` (*Daniel Black*). +* If an I/O syscall returned an error during the server shutdown with + :ref:`threadpool` enabled, a mutex could be left locked. Bug fixed + :bug:`1702330` (*Daniel Black*). - * Dynamic row format feature to support ``BLOB/VARCHAR`` in ``MEMORY`` tables - requires all the key columns to come before any ``BLOB`` columns. This - requirement however was not enforced, allowing creating MEMORY tables in - unsupported column configurations, which then crashed or lose data in usage. - Bug fixed :bug:`1731483`. +* Dynamic row format feature to support ``BLOB/VARCHAR`` in ``MEMORY`` tables + requires all the key columns to come before any ``BLOB`` columns. This + requirement however was not enforced, allowing creating MEMORY tables in + unsupported column configurations, which then crashed or lose data in usage. + Bug fixed :bug:`1731483`. - * After fixing bug :bug:`1668602`, bug :bug:`1539504`, and bug :bug:`1313901`, - ``CREATE/DROP TEMPORARY TABLE`` statements were forbidden incorrectly in - transactional contexts, including function and trigger calls, even when - they required no binary logging at all. Bug fixed :bug:`1711781`. +* After fixing bug :bug:`1668602`, bug :bug:`1539504`, and bug :bug:`1313901`, + ``CREATE/DROP TEMPORARY TABLE`` statements were forbidden incorrectly in + transactional contexts, including function and trigger calls, even when + they required no binary logging at all. Bug fixed :bug:`1711781`. - * Running ``ANALYZE TABLE`` while a long-running query is accessing the same - table in parallel could lead to a situation where new queries on the same - table are blocked in a ``Waiting for table flush`` state. - Fixed by stopping ``ANALYZE TABLE`` flushing affected |InnoDB| and |TokuDB| - tables from the table definition cache. Bug fixed :bug:`1704195` - (upstream :mysqlbug:`87065`). +* Running ``ANALYZE TABLE`` while a long-running query is accessing the same + table in parallel could lead to a situation where new queries on the same + table are blocked in a ``Waiting for table flush`` state. + Fixed by stopping ``ANALYZE TABLE`` flushing affected |InnoDB| and |TokuDB| + tables from the table definition cache. Bug fixed :bug:`1704195` + (upstream :mysqlbug:`87065`). - * ``CREATE TABLE ... LIKE ...`` did not use source ``row_format`` on target - |TokuDB| table. Bug fixed :tdbbug:`76`. +* ``CREATE TABLE ... LIKE ...`` did not use source ``row_format`` on target + |TokuDB| table. Bug fixed :tdbbug:`76`. - * |TokuDB| would encode already encoded database name for a directory name. - Bug fixed :tdbbug:`74`. +* |TokuDB| would encode already encoded database name for a directory name. + Bug fixed :tdbbug:`74`. Other bugs fixed: :bug:`1720810`, :tdbbug:`83`, :tdbbug:`80`, and :tdbbug:`75`. From 3fe3f83fa0d8bdad6d42def5ba9ba61a2a5a5972 Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Thu, 14 Dec 2017 12:58:56 -0700 Subject: [PATCH 0295/1221] MYR-179 : Basic Sysbench run fails with basic MyROCKS install due to lack of open files - Discussed behavior changes with upstream, previous attempts to fix this uncovered a 'need' to be able to pass '-1' through to rocksdb for those users that want to or can do extreme tuning of their environment. - New behavior is as follows: * -2 : 'auto-tune', silently set rocksdb_max_open_files to 1/2 of mysql open_files_limit * -1 : infinite, pass -1 to rocksdb * >= 0 and <= open_files_limit : take value as-is * > open_files_lmit : set rocksdb_max_open_files to 1/2 of mysql open_files_limit and emit a warning to the mysqld error log. --- .../r/rocksdb_max_open_files_basic.result | 10 +++------- .../t/rocksdb_max_open_files_basic.test | 10 ++++++---- .../suite/rocksdb/r/max_open_files.result | 8 ++++++++ mysql-test/suite/rocksdb/r/rocksdb.result | 3 +-- mysql-test/suite/rocksdb/t/max_open_files.test | 18 ++++++++++++++++-- mysql-test/suite/rocksdb/t/rocksdb.test | 5 ++++- storage/rocksdb/ha_rocksdb.cc | 10 +++++++--- 7 files changed, 45 insertions(+), 19 deletions(-) diff --git a/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_max_open_files_basic.result b/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_max_open_files_basic.result index b78d3635cf1c..60f505310c68 100644 --- a/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_max_open_files_basic.result +++ b/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_max_open_files_basic.result @@ -1,7 +1,3 @@ -SET @start_global_value = @@global.ROCKSDB_MAX_OPEN_FILES; -SELECT @start_global_value; -@start_global_value -1000 -"Trying to set variable @@global.ROCKSDB_MAX_OPEN_FILES to 444. It should fail because it is readonly." -SET @@global.ROCKSDB_MAX_OPEN_FILES = 444; -ERROR HY000: Variable 'rocksdb_max_open_files' is a read only variable +show variables like 'rocksdb_max_open_files'; +Variable_name Value +rocksdb_max_open_files # diff --git a/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_max_open_files_basic.test b/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_max_open_files_basic.test index 47155b15137a..36996761507b 100644 --- a/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_max_open_files_basic.test +++ b/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_max_open_files_basic.test @@ -1,6 +1,8 @@ --source include/have_rocksdb.inc ---let $sys_var=ROCKSDB_MAX_OPEN_FILES ---let $read_only=1 ---let $session=0 ---source ../include/rocksdb_sys_var.inc +# We can not use rocksdb_sys_var.inc here as this is a global, read only option +# whose value is dependent on the servers open_files_limit. It is more fully +# tested in the rocksdb.max_open_files test. + +--replace_column 2 # +show variables like 'rocksdb_max_open_files'; diff --git a/mysql-test/suite/rocksdb/r/max_open_files.result b/mysql-test/suite/rocksdb/r/max_open_files.result index 6f6fe3ee406f..fb0121a728e8 100644 --- a/mysql-test/suite/rocksdb/r/max_open_files.result +++ b/mysql-test/suite/rocksdb/r/max_open_files.result @@ -1,5 +1,9 @@ CALL mtr.add_suppression("RocksDB: rocksdb_max_open_files should not be greater than the open_files_limit*"); # restart:--log-error=MYSQLTEST_VARDIR/tmp/rocksdb.max_open_files.err --rocksdb_max_open_files=over_rocksdb_max_open_files +# restart:--rocksdb_max_open_files=under_rocksdb_max_open_files +SELECT @@global.open_files_limit - 1 = @@global.rocksdb_max_open_files; +@@global.open_files_limit - 1 = @@global.rocksdb_max_open_files +1 # restart:--rocksdb_max_open_files=0 SELECT @@global.rocksdb_max_open_files; @@global.rocksdb_max_open_files @@ -12,4 +16,8 @@ DROP TABLE t1; SELECT @@global.rocksdb_max_open_files; @@global.rocksdb_max_open_files -1 +# restart:--rocksdb_max_open_files=-2 +SELECT FLOOR(@@global.open_files_limit / 2) = @@global.rocksdb_max_open_files; +FLOOR(@@global.open_files_limit / 2) = @@global.rocksdb_max_open_files +1 # restart diff --git a/mysql-test/suite/rocksdb/r/rocksdb.result b/mysql-test/suite/rocksdb/r/rocksdb.result index 622c52174269..2892167467b2 100644 --- a/mysql-test/suite/rocksdb/r/rocksdb.result +++ b/mysql-test/suite/rocksdb/r/rocksdb.result @@ -889,7 +889,7 @@ ERROR 42S02: Unknown table 'test.t45' # Now it fails if there is data overlap with what # already exists # -show variables like 'rocksdb%'; +show variables where variable_name like 'rocksdb%' and variable_name not like 'rocksdb_max_open_files'; Variable_name Value rocksdb_access_hint_on_compaction_start 1 rocksdb_advise_random_on_open ON @@ -959,7 +959,6 @@ rocksdb_max_background_jobs 2 rocksdb_max_latest_deadlocks 5 rocksdb_max_log_file_size 0 rocksdb_max_manifest_file_size 18446744073709551615 -rocksdb_max_open_files 1000 rocksdb_max_row_locks 1073741824 rocksdb_max_subcompactions 1 rocksdb_max_total_wal_size 0 diff --git a/mysql-test/suite/rocksdb/t/max_open_files.test b/mysql-test/suite/rocksdb/t/max_open_files.test index 99454c9f9fc3..6f761f730854 100644 --- a/mysql-test/suite/rocksdb/t/max_open_files.test +++ b/mysql-test/suite/rocksdb/t/max_open_files.test @@ -5,7 +5,8 @@ # test for over limit CALL mtr.add_suppression("RocksDB: rocksdb_max_open_files should not be greater than the open_files_limit*"); ---let $over_rocksdb_max_open_files=`SELECT @@global.open_files_limit + 2000000` +--let $over_rocksdb_max_open_files=`SELECT @@global.open_files_limit + 100` +--let $under_rocksdb_max_open_files=`SELECT @@global.open_files_limit -1` --let SEARCH_FILE=$MYSQLTEST_VARDIR/tmp/rocksdb.max_open_files.err --let SEARCH_PATTERN=RocksDB: rocksdb_max_open_files should not be greater than the open_files_limit @@ -14,6 +15,13 @@ CALL mtr.add_suppression("RocksDB: rocksdb_max_open_files should not be greater --source include/restart_mysqld.inc --source include/search_pattern_in_file.inc +# test for within limit +--replace_result $under_rocksdb_max_open_files under_rocksdb_max_open_files +--let $restart_parameters=restart:--rocksdb_max_open_files=$under_rocksdb_max_open_files +--source include/restart_mysqld.inc + +SELECT @@global.open_files_limit - 1 = @@global.rocksdb_max_open_files; + # test for minimal value --let $restart_parameters=restart:--rocksdb_max_open_files=0 --source include/restart_mysqld.inc @@ -26,12 +34,18 @@ INSERT INTO t1 VALUES(0),(1),(2),(3),(4); SET GLOBAL rocksdb_force_flush_memtable_and_lzero_now=1; DROP TABLE t1; -# test for unlimited (former default) +# test for unlimited --let $restart_parameters=restart:--rocksdb_max_open_files=-1 --source include/restart_mysqld.inc SELECT @@global.rocksdb_max_open_files; +# test for auto-tune +--let $restart_parameters=restart:--rocksdb_max_open_files=-2 +--source include/restart_mysqld.inc + +SELECT FLOOR(@@global.open_files_limit / 2) = @@global.rocksdb_max_open_files; + # cleanup --let $restart_parameters= --source include/restart_mysqld.inc diff --git a/mysql-test/suite/rocksdb/t/rocksdb.test b/mysql-test/suite/rocksdb/t/rocksdb.test index 257f545f48d1..b284b5db3f96 100644 --- a/mysql-test/suite/rocksdb/t/rocksdb.test +++ b/mysql-test/suite/rocksdb/t/rocksdb.test @@ -790,7 +790,10 @@ drop table t45; --echo # Now it fails if there is data overlap with what --echo # already exists --echo # -show variables like 'rocksdb%'; +# We exclude rocksdb_max_open_files here because it value is dependent on +# the value of the servers open_file_limit and is expected to be different +# across distros and installs +show variables where variable_name like 'rocksdb%' and variable_name not like 'rocksdb_max_open_files'; create table t47 (pk int primary key, col1 varchar(12)) engine=rocksdb; insert into t47 values (1, 'row1'); insert into t47 values (2, 'row2'); diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index e1d283cae662..39d39cdb85a4 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -508,6 +508,7 @@ static std::unique_ptr rdb_init_rocksdb_db_options(void) { o->listeners.push_back(std::make_shared(&ddl_manager)); o->info_log_level = rocksdb::InfoLogLevel::INFO_LEVEL; o->max_subcompactions = DEFAULT_SUBCOMPACTIONS; + o->max_open_files = -2; // auto-tune to 50% open_files_limit o->concurrent_prepare = true; o->manual_wal_flush = true; @@ -854,7 +855,8 @@ static MYSQL_SYSVAR_BOOL( static MYSQL_SYSVAR_INT(max_open_files, rocksdb_db_options->max_open_files, PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY, "DBOptions::max_open_files for RocksDB", nullptr, - nullptr, 1000, /* min */ -1, /* max */ INT_MAX, 0); + nullptr, rocksdb_db_options->max_open_files, + /* min */ -2, /* max */ INT_MAX, 0); static MYSQL_SYSVAR_ULONG(max_total_wal_size, rocksdb_db_options->max_total_wal_size, @@ -3581,8 +3583,10 @@ static int rocksdb_init_func(void *const p) { sql_print_information("RocksDB: rocksdb_max_open_files should not be " "greater than the open_files_limit, effective value " "of rocksdb_max_open_files is being set to " - "open_files_limit."); - rocksdb_db_options->max_open_files = open_files_limit; + "open_files_limit / 2."); + rocksdb_db_options->max_open_files = open_files_limit / 2; + } else if (rocksdb_db_options->max_open_files == -2) { + rocksdb_db_options->max_open_files = open_files_limit / 2; } rocksdb_stats = rocksdb::CreateDBStatistics(); From fde057f1f69fcc688d6b4b2b4c27f92041380b04 Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Tue, 12 Dec 2017 12:52:16 +0100 Subject: [PATCH 0296/1221] lp1716844: Escaping control characters in the audit log Implemented escaping for the JSON output format, and updated the test suite. The other output formats are left unchanged, as they do not have a well defined method for escaping these characters. XML does support control characters in version 1.1, but most tools only understand 1.0, and our output is 1.0. --- mysql-test/include/audit_log_events.inc | 36 +++++ mysql-test/r/audit_log_json.result | 66 +++++++++ mysql-test/t/audit_log_json.test | 30 ++++- plugin/audit_log/audit_log.c | 170 ++++++++++++++++++++---- 4 files changed, 271 insertions(+), 31 deletions(-) diff --git a/mysql-test/include/audit_log_events.inc b/mysql-test/include/audit_log_events.inc index 4202b21989b7..ec5794fdfabe 100644 --- a/mysql-test/include/audit_log_events.inc +++ b/mysql-test/include/audit_log_events.inc @@ -6,6 +6,42 @@ CREATE TABLE t1 (c1 INT, c2 CHAR(20)); INSERT INTO t1 VALUES (1,'a'),(2,'b'),(3,'c'); +-- if ($test_control_chars) { +INSERT INTO `t1` VALUES (4,NULL); +# can't add the zero ascii character, as that's a syntax error in MySQL +INSERT INTO `t1` VALUES (6,''); +INSERT INTO `t1` VALUES (7,''); +INSERT INTO `t1` VALUES (8,''); +INSERT INTO `t1` VALUES (9,''); +INSERT INTO `t1` VALUES (10,''); +INSERT INTO `t1` VALUES (11,''); +INSERT INTO `t1` VALUES (12,''); +INSERT INTO `t1` VALUES (13,''); +INSERT INTO `t1` VALUES (14,' '); +INSERT INTO `t1` VALUES (15,' +'); +INSERT INTO `t1` VALUES (16,' '); +INSERT INTO `t1` VALUES (17,' '); +INSERT INTO `t1` VALUES (18,' '); +INSERT INTO `t1` VALUES (19,''); +INSERT INTO `t1` VALUES (20,''); +INSERT INTO `t1` VALUES (21,''); +INSERT INTO `t1` VALUES (22,''); +INSERT INTO `t1` VALUES (23,''); +INSERT INTO `t1` VALUES (24,''); +INSERT INTO `t1` VALUES (25,''); +INSERT INTO `t1` VALUES (26,''); +INSERT INTO `t1` VALUES (27,''); +INSERT INTO `t1` VALUES (28,''); +INSERT INTO `t1` VALUES (29,''); +INSERT INTO `t1` VALUES (30,''); +INSERT INTO `t1` VALUES (31,''); +INSERT INTO `t1` VALUES (32,''); +INSERT INTO `t1` VALUES (33,''); +INSERT INTO `t1` VALUES (34,''); +INSERT INTO `t1` VALUES (35,''); +INSERT INTO `t1` VALUES (36,''); +-- } SELECT * FROM t1; --error ER_NO_SUCH_TABLE SELECT * FROM t2; diff --git a/mysql-test/r/audit_log_json.result b/mysql-test/r/audit_log_json.result index e1f7c408e669..1bb922e9bcb6 100644 --- a/mysql-test/r/audit_log_json.result +++ b/mysql-test/r/audit_log_json.result @@ -6,11 +6,77 @@ CREATE TABLE t1 c2 CHAR(20)); ERROR 42S01: Table 't1' already exists INSERT INTO t1 VALUES (1,'a'),(2,'b'),(3,'c'); +INSERT INTO `t1` VALUES (4,NULL); +INSERT INTO `t1` VALUES (6,''); +INSERT INTO `t1` VALUES (7,''); +INSERT INTO `t1` VALUES (8,''); +INSERT INTO `t1` VALUES (9,''); +INSERT INTO `t1` VALUES (10,''); +INSERT INTO `t1` VALUES (11,''); +INSERT INTO `t1` VALUES (12,''); +INSERT INTO `t1` VALUES (13,''); +INSERT INTO `t1` VALUES (14,' '); +INSERT INTO `t1` VALUES (15,' +'); +INSERT INTO `t1` VALUES (16,' '); +INSERT INTO `t1` VALUES (17,' '); +INSERT INTO `t1` VALUES (18,' '); +INSERT INTO `t1` VALUES (19,''); +INSERT INTO `t1` VALUES (20,''); +INSERT INTO `t1` VALUES (21,''); +INSERT INTO `t1` VALUES (22,''); +INSERT INTO `t1` VALUES (23,''); +INSERT INTO `t1` VALUES (24,''); +INSERT INTO `t1` VALUES (25,''); +INSERT INTO `t1` VALUES (26,''); +INSERT INTO `t1` VALUES (27,''); +INSERT INTO `t1` VALUES (28,''); +INSERT INTO `t1` VALUES (29,''); +INSERT INTO `t1` VALUES (30,''); +INSERT INTO `t1` VALUES (31,''); +INSERT INTO `t1` VALUES (32,''); +INSERT INTO `t1` VALUES (33,''); +INSERT INTO `t1` VALUES (34,''); +INSERT INTO `t1` VALUES (35,''); +INSERT INTO `t1` VALUES (36,''); SELECT * FROM t1; c1 c2 1 a 2 b 3 c +4 NULL +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  SELECT * FROM t2; ERROR 42S02: Table 'test.t2' doesn't exist DROP TABLE t1; diff --git a/mysql-test/t/audit_log_json.test b/mysql-test/t/audit_log_json.test index bd862336a6fb..945b76830a4f 100644 --- a/mysql-test/t/audit_log_json.test +++ b/mysql-test/t/audit_log_json.test @@ -7,6 +7,7 @@ SET GLOBAL audit_log_flush=ON; --remove_file $MYSQLD_DATADIR/test_audit.log SET GLOBAL audit_log_flush=ON; +--let $test_control_chars=1; --source include/audit_log_events.inc --move_file $MYSQLD_DATADIR/test_audit.log $MYSQLD_DATADIR/test_audit_json.log @@ -14,10 +15,33 @@ set global audit_log_flush= ON; perl; eval "use JSON qw(decode_json); 1" or exit 0; open my $file, $ENV{'MYSQLD_DATADIR'} . '/test_audit_json.log' or die "Could not open log: $!"; + my $found_1st_control_char = 0; + my $last_control_char = 0; + my $control_char_count = 0; while (my $line = <$file>) { - decode_json($line); + my $json = decode_json($line); + my $entry_type = $json->{audit_record}->{name}; + if($entry_type eq "Query") { + my $query = $json->{audit_record}->{sqltext}; + my @query_chars = sort($query =~ /./sg); + my $minimum_character = ord($query_chars[0]); + if ($minimum_character == 1) { + $found_1st_control_char = 1; + } + if ($found_1st_control_char && $control_char_count < 31) { + $control_char_count = $control_char_count + 1; + my $expected = $last_control_char + 1; + if ($expected != $minimum_character) { + print "Incorrect control character in output: Expected $expected, got $minimum_character\n"; + exit l; + } + $last_control_char = $minimum_character; + } + } + } + if ($control_char_count != 31) { + print "Missing control characters from the output. Expected 31, got $control_char_count\n"; + exit 2; } close $file; EOF ---remove_file $MYSQLD_DATADIR/test_audit.log ---remove_file $MYSQLD_DATADIR/test_audit_json.log diff --git a/plugin/audit_log/audit_log.c b/plugin/audit_log/audit_log.c index 561c8856e09c..f82dcd162777 100644 --- a/plugin/audit_log/audit_log.c +++ b/plugin/audit_log/audit_log.c @@ -172,37 +172,48 @@ typedef struct static void escape_buf(const char *in, size_t *inlen, char *out, size_t *outlen, - const escape_rule_t *escape_rules) + const escape_rule_t *control_escape_rules, + const escape_rule_t *other_escape_rules) { char* outstart = out; const char* base = in; char* outend = out + *outlen; const char* inend; - const escape_rule_t *rule; - my_bool replaced; + const escape_rule_t *replace_rule = NULL; inend = in + (*inlen); while ((in < inend) && (out < outend)) { - replaced= FALSE; - for (rule= escape_rules; rule->character; rule++) + replace_rule = NULL; + if ((unsigned char)(*in) < 32) { + if (control_escape_rules[(unsigned int)*in].character) { + replace_rule = &control_escape_rules[(unsigned int)*in]; + } + } else { - if (*in == rule->character) + const escape_rule_t *rule = NULL; + for (rule= other_escape_rules; rule->character; rule++) { - if ((outend - out) < (int) rule->length) - goto end_of_buffer; - memcpy(out, rule->replacement, rule->length); - out += rule->length; - replaced= TRUE; - break; + if (*in == rule->character) + { + replace_rule = rule; + break; + } } } - if (!replaced) + if (replace_rule) + { + if ((outend - out) < (ptrdiff_t) replace_rule->length) + break; + memcpy(out, replace_rule->replacement, replace_rule->length); + out += replace_rule->length; + } else + { *out++ = *in; + } ++in; } -end_of_buffer: *outlen = out - outstart; *inlen = in - base; } @@ -210,50 +221,153 @@ void escape_buf(const char *in, size_t *inlen, char *out, size_t *outlen, static void xml_escape(const char *in, size_t *inlen, char *out, size_t *outlen) { - const escape_rule_t rules[]= + // Most control sequences aren't supported before XML 1.1, and most + // tools only support 1.0. Our output is 1.0. Escaping them wouldn't make + // the output more valid. + static const escape_rule_t control_rules[]= + { + { 0, 0, NULL }, + { 0, 0, NULL }, + { 0, 0, NULL }, + { 0, 0, NULL }, + { 0, 0, NULL }, + { 0, 0, NULL }, + { 0, 0, NULL }, + { 0, 0, NULL }, + { 0, 0, NULL }, + { '\t', 5, " " }, + { '\n', 6, " " }, + { 0, 0, NULL }, + { 0, 0, NULL }, + { '\r', 6, " " }, + { 0, 0, NULL }, + { 0, 0, NULL }, + { 0, 0, NULL }, + { 0, 0, NULL }, + { 0, 0, NULL }, + { 0, 0, NULL }, + { 0, 0, NULL }, + { 0, 0, NULL }, + { 0, 0, NULL }, + { 0, 0, NULL }, + { 0, 0, NULL }, + { 0, 0, NULL }, + { 0, 0, NULL }, + { 0, 0, NULL }, + { 0, 0, NULL }, + { 0, 0, NULL }, + { 0, 0, NULL }, + { 0, 0, NULL }, + }; + static const escape_rule_t other_rules[]= { { '<', 4, "<" }, { '>', 4, ">" }, { '&', 5, "&" }, - { '\r', 5, " " }, - { '\n', 5, " " }, - { '\t', 5, " " }, { '"', 6, """ }, { 0, 0, NULL } }; - escape_buf(in, inlen, out, outlen, rules); + escape_buf(in, inlen, out, outlen, control_rules, other_rules); } static void json_escape(const char *in, size_t *inlen, char *out, size_t *outlen) { - const escape_rule_t rules[]= + static const escape_rule_t control_rules[]= + { + { 0, 6, "\\u0000" }, + { 1, 6, "\\u0001" }, + { 2, 6, "\\u0002" }, + { 3, 6, "\\u0003" }, + { 4, 6, "\\u0004" }, + { 5, 6, "\\u0005" }, + { 6, 6, "\\u0006" }, + { 7, 6, "\\u0007" }, + { '\b', 2, "\\b" }, + { '\t', 2, "\\t" }, + { '\n', 2, "\\n" }, + { 11, 6, "\\u000B" }, + { '\f', 2, "\\f" }, + { '\r', 2, "\\r" }, + { 14, 6, "\\u000E" }, + { 15, 6, "\\u000F" }, + { 16, 6, "\\u0010" }, + { 17, 6, "\\u0011" }, + { 18, 6, "\\u0012" }, + { 19, 6, "\\u0013" }, + { 20, 6, "\\u0014" }, + { 21, 6, "\\u0015" }, + { 22, 6, "\\u0016" }, + { 23, 6, "\\u0017" }, + { 24, 6, "\\u0018" }, + { 25, 6, "\\u0019" }, + { 26, 6, "\\u001A" }, + { 27, 6, "\\u001B" }, + { 28, 6, "\\u001C" }, + { 29, 6, "\\u001D" }, + { 30, 6, "\\u001E" }, + { 31, 6, "\\u001F" }, + }; + + static const escape_rule_t other_rules[]= { { '\\', 2, "\\\\" }, { '"', 2, "\\\"" }, - { '\r', 2, "\\r" }, - { '\n', 2, "\\n" }, { '/', 2, "\\/" }, - { '\b', 2, "\\b" }, - { '\f', 2, "\\f" }, - { '\t', 2, "\\t" }, { 0, 0, NULL } }; - escape_buf(in, inlen, out, outlen, rules); + escape_buf(in, inlen, out, outlen, control_rules, other_rules); } static void csv_escape(const char *in, size_t *inlen, char *out, size_t *outlen) { - const escape_rule_t rules[]= + // We do not have any standard control escape rules for CSVs + static const escape_rule_t control_rules[]= + { + { 0, 0, NULL }, + { 0, 0, NULL }, + { 0, 0, NULL }, + { 0, 0, NULL }, + { 0, 0, NULL }, + { 0, 0, NULL }, + { 0, 0, NULL }, + { 0, 0, NULL }, + { 0, 0, NULL }, + { 0, 0, NULL }, + { 0, 0, NULL }, + { 0, 0, NULL }, + { 0, 0, NULL }, + { 0, 0, NULL }, + { 0, 0, NULL }, + { 0, 0, NULL }, + { 0, 0, NULL }, + { 0, 0, NULL }, + { 0, 0, NULL }, + { 0, 0, NULL }, + { 0, 0, NULL }, + { 0, 0, NULL }, + { 0, 0, NULL }, + { 0, 0, NULL }, + { 0, 0, NULL }, + { 0, 0, NULL }, + { 0, 0, NULL }, + { 0, 0, NULL }, + { 0, 0, NULL }, + { 0, 0, NULL }, + { 0, 0, NULL }, + { 0, 0, NULL }, + }; + + static const escape_rule_t other_rules[]= { { '"', 2, "\"\"" }, { 0, 0, NULL } }; - escape_buf(in, inlen, out, outlen, rules); + escape_buf(in, inlen, out, outlen, control_rules, other_rules); } static const escape_buf_func_t format_escape_func[]= From ab8058441ec1b2bae67abaa6cd048967eb48d033 Mon Sep 17 00:00:00 2001 From: Aakanksha Verma Date: Fri, 15 Dec 2017 16:01:18 +0530 Subject: [PATCH 0297/1221] Bug #27212129 [ERROR] INNODB: A RECORD LOCK WAIT HAPPENS IN A DICTIONARY OPERATION. INDEX `ID_ PROBLEM This bug is a regression of bug#26390658. When two transactions try to do alter table partition by (and are trying to do rename table essentially),one of the transactions ends up in a lock wait trying to take a lock on record of innodb stats table as the other is holding a lock on the same record of the stats table as this transaction hasn't committed yet. A situation like this where in a transaction is made to wait for record lock of system table and is dictionary operation, innodb crashes the server.The problem is that the transaction that is done with rename table and is holding onto record locks that can be released is not able to do so because it is not yet committed .Therefore causing the lock wait and crash. FIX Solution is to let all the partitions rename to finish and commit transaction, then proceed with updating of stats table after rename. Reviewed by: bin su RB: 18205 --- storage/innobase/dict/dict0stats.cc | 7 ++++++ storage/innobase/row/row0mysql.cc | 38 +++++++++++++++++++++-------- 2 files changed, 35 insertions(+), 10 deletions(-) diff --git a/storage/innobase/dict/dict0stats.cc b/storage/innobase/dict/dict0stats.cc index 42abe221a778..5a9f34624c55 100644 --- a/storage/innobase/dict/dict0stats.cc +++ b/storage/innobase/dict/dict0stats.cc @@ -3645,6 +3645,13 @@ dict_stats_rename_table( if (ret == DB_STATS_DO_NOT_EXIST) { ret = DB_SUCCESS; } + DBUG_EXECUTE_IF("rename_stats", + mutex_exit(&dict_sys->mutex); + rw_lock_x_unlock(dict_operation_lock); + os_thread_sleep(20000000); + DEBUG_SYNC_C("rename_stats"); + rw_lock_x_lock(dict_operation_lock); + mutex_enter(&dict_sys->mutex);); if (ret != DB_SUCCESS) { mutex_exit(&dict_sys->mutex); diff --git a/storage/innobase/row/row0mysql.cc b/storage/innobase/row/row0mysql.cc index e95a3805e4c4..a7cdce94e2c5 100644 --- a/storage/innobase/row/row0mysql.cc +++ b/storage/innobase/row/row0mysql.cc @@ -31,6 +31,7 @@ Created 9/17/2000 Heikki Tuuri #include #include #include +#include #include "row0mysql.h" @@ -5327,6 +5328,7 @@ row_rename_table_for_mysql( pars_info_add_str_literal(info, "new_table_name", new_name); pars_info_add_str_literal(info, "old_table_name", old_name); + DEBUG_SYNC_C("rename_table"); err = que_eval_sql(info, "PROCEDURE RENAME_TABLE () IS\n" "BEGIN\n" @@ -5697,6 +5699,10 @@ row_rename_partitions_for_mysql( memcpy(from_name, old_name, from_len); from_name[from_len] = '#'; from_name[from_len + 1] = 0; + typedef std::vector > partition_names; + partition_names store_name; + partition_names::iterator it; + while ((table_name = dict_get_first_table_name_in_db(from_name))) { ut_a(memcmp(table_name, from_name, from_len) == 0); /* Must match #[Pp]# */ @@ -5716,16 +5722,12 @@ row_rename_partitions_for_mysql( error = row_rename_table_for_mysql(table_name, to_name, trx, false); if (error == DB_SUCCESS) { - char errstr[512]; - error = dict_stats_rename_table(true, table_name, to_name, - errstr, sizeof(errstr)); - if (error != DB_SUCCESS) { - ib::error() << errstr; - push_warning(thd, Sql_condition::SL_WARNING, - ER_LOCK_WAIT_TIMEOUT, errstr); - } - } - if (error != DB_SUCCESS) { + std::pair pair_names; + pair_names.first = table_name; + pair_names.second = to_name; + store_name.push_back(pair_names); + } else { + store_name.clear(); /* Rollback and return. */ trx_rollback_for_mysql(trx); ut_free(table_name); @@ -5734,6 +5736,22 @@ row_rename_partitions_for_mysql( ut_free(table_name); } trx_commit_for_mysql(trx); + + char errstr[512]; + for (it = store_name.begin(); it != store_name.end(); ++it) { + error = dict_stats_rename_table( + true, it->first.c_str(), it->second.c_str(), + errstr, sizeof(errstr)); + + if (error != DB_SUCCESS) { + ib::error() << errstr; + push_warning(thd, Sql_condition::SL_WARNING, + ER_LOCK_WAIT_TIMEOUT, errstr); + break; + } + } + + store_name.clear(); return(error); } From 0cab896ba4c1a02b3e46514e768fab0a04c9c08c Mon Sep 17 00:00:00 2001 From: "inikep@gmail.com" Date: Thu, 14 Dec 2017 12:20:20 +0100 Subject: [PATCH 0298/1221] lp1708073: Fix client help showing a 5.6 link --- client/mysql.cc | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/client/mysql.cc b/client/mysql.cc index 674b1a92af09..8709fb6d0442 100644 --- a/client/mysql.cc +++ b/client/mysql.cc @@ -3499,12 +3499,15 @@ com_help(String *buffer MY_ATTRIBUTE((unused)), return com_server_help(buffer,line,help_arg); } - put_info("\nFor information about Percona products and services, visit:\n" + my_snprintf(const_cast(glob_buffer.ptr()), glob_buffer.alloced_length(), + "\nFor information about Percona products and services, visit:\n" " http://www.percona.com/\n" - "Percona Server manual: http://www.percona.com/doc/percona-server/5.6\n" + "Percona Server manual: http://www.percona.com/doc/percona-server/%d.%d\n" "For the MySQL Reference Manual: http://dev.mysql.com/\n" "To buy Percona support, training, or other products, visit:\n" - " https://www.percona.com/\n", INFO_INFO); + " https://www.percona.com/\n", + MYSQL_VERSION_ID / 10000, (MYSQL_VERSION_ID / 100) % 100); + put_info(glob_buffer.ptr(), INFO_INFO); put_info("List of all MySQL commands:", INFO_INFO); if (!named_cmds) put_info("Note that all text commands must be first on line and end with ';'",INFO_INFO); From 3ef0a700ce897ad065c41542e98a83d34a947308 Mon Sep 17 00:00:00 2001 From: Oliver Tappin Date: Fri, 15 Dec 2017 14:15:18 +0000 Subject: [PATCH 0299/1221] Added a missing 'a' in sentence --- doc/source/performance/threadpool.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/source/performance/threadpool.rst b/doc/source/performance/threadpool.rst index 812a648e08ee..38bc971a70fa 100644 --- a/doc/source/performance/threadpool.rst +++ b/doc/source/performance/threadpool.rst @@ -6,7 +6,7 @@ |MySQL| executes statements using one thread per client connection. Once the number of connections increases past a certain point performance will degrade. -This feature enables the server to keep the top performance even with large number of client connections by introducing a dynamic thread pool. By using the thread pool server would decrease the number of threads, which will then reduce the context switching and hot locks contentions. Using the thread pool will have the most effect with ``OLTP`` workloads (relatively short CPU-bound queries). +This feature enables the server to keep the top performance even with a large number of client connections by introducing a dynamic thread pool. By using the thread pool server would decrease the number of threads, which will then reduce the context switching and hot locks contentions. Using the thread pool will have the most effect with ``OLTP`` workloads (relatively short CPU-bound queries). In order to enable the thread pool variable :variable:`thread_handling` should be set up to ``pool-of-threads`` value. This can be done by adding: :: From cf3e608fe5888e78121a4559f5edab4feb367546 Mon Sep 17 00:00:00 2001 From: Aakanksha Verma Date: Fri, 15 Dec 2017 16:01:18 +0530 Subject: [PATCH 0300/1221] Bug #27212129 [ERROR] INNODB: A RECORD LOCK WAIT HAPPENS IN A DICTIONARY OPERATION. INDEX `ID_ PROBLEM This bug is a regression of bug#26390658. When two transactions try to do alter table partition by (and are trying to do rename table essentially),one of the transactions ends up in a lock wait trying to take a lock on record of innodb stats table as the other is holding a lock on the same record of the stats table as this transaction hasn't committed yet. A situation like this where in a transaction is made to wait for record lock of system table and is dictionary operation, innodb crashes the server.The problem is that the transaction that is done with rename table and is holding onto record locks that can be released is not able to do so because it is not yet committed .Therefore causing the lock wait and crash. FIX Solution is to let all the partitions rename to finish and commit transaction, then proceed with updating of stats table after rename. Reviewed by: bin su RB: 18205 (cherry picked from commit 3b9ab1b0a3bd24151e74e73bcdfb098b969ca747) --- storage/innobase/dict/dict0stats.cc | 7 ++++++ storage/innobase/row/row0mysql.cc | 38 +++++++++++++++++++++-------- 2 files changed, 35 insertions(+), 10 deletions(-) diff --git a/storage/innobase/dict/dict0stats.cc b/storage/innobase/dict/dict0stats.cc index 42abe221a778..5a9f34624c55 100644 --- a/storage/innobase/dict/dict0stats.cc +++ b/storage/innobase/dict/dict0stats.cc @@ -3645,6 +3645,13 @@ dict_stats_rename_table( if (ret == DB_STATS_DO_NOT_EXIST) { ret = DB_SUCCESS; } + DBUG_EXECUTE_IF("rename_stats", + mutex_exit(&dict_sys->mutex); + rw_lock_x_unlock(dict_operation_lock); + os_thread_sleep(20000000); + DEBUG_SYNC_C("rename_stats"); + rw_lock_x_lock(dict_operation_lock); + mutex_enter(&dict_sys->mutex);); if (ret != DB_SUCCESS) { mutex_exit(&dict_sys->mutex); diff --git a/storage/innobase/row/row0mysql.cc b/storage/innobase/row/row0mysql.cc index e95a3805e4c4..a7cdce94e2c5 100644 --- a/storage/innobase/row/row0mysql.cc +++ b/storage/innobase/row/row0mysql.cc @@ -31,6 +31,7 @@ Created 9/17/2000 Heikki Tuuri #include #include #include +#include #include "row0mysql.h" @@ -5327,6 +5328,7 @@ row_rename_table_for_mysql( pars_info_add_str_literal(info, "new_table_name", new_name); pars_info_add_str_literal(info, "old_table_name", old_name); + DEBUG_SYNC_C("rename_table"); err = que_eval_sql(info, "PROCEDURE RENAME_TABLE () IS\n" "BEGIN\n" @@ -5697,6 +5699,10 @@ row_rename_partitions_for_mysql( memcpy(from_name, old_name, from_len); from_name[from_len] = '#'; from_name[from_len + 1] = 0; + typedef std::vector > partition_names; + partition_names store_name; + partition_names::iterator it; + while ((table_name = dict_get_first_table_name_in_db(from_name))) { ut_a(memcmp(table_name, from_name, from_len) == 0); /* Must match #[Pp]# */ @@ -5716,16 +5722,12 @@ row_rename_partitions_for_mysql( error = row_rename_table_for_mysql(table_name, to_name, trx, false); if (error == DB_SUCCESS) { - char errstr[512]; - error = dict_stats_rename_table(true, table_name, to_name, - errstr, sizeof(errstr)); - if (error != DB_SUCCESS) { - ib::error() << errstr; - push_warning(thd, Sql_condition::SL_WARNING, - ER_LOCK_WAIT_TIMEOUT, errstr); - } - } - if (error != DB_SUCCESS) { + std::pair pair_names; + pair_names.first = table_name; + pair_names.second = to_name; + store_name.push_back(pair_names); + } else { + store_name.clear(); /* Rollback and return. */ trx_rollback_for_mysql(trx); ut_free(table_name); @@ -5734,6 +5736,22 @@ row_rename_partitions_for_mysql( ut_free(table_name); } trx_commit_for_mysql(trx); + + char errstr[512]; + for (it = store_name.begin(); it != store_name.end(); ++it) { + error = dict_stats_rename_table( + true, it->first.c_str(), it->second.c_str(), + errstr, sizeof(errstr)); + + if (error != DB_SUCCESS) { + ib::error() << errstr; + push_warning(thd, Sql_condition::SL_WARNING, + ER_LOCK_WAIT_TIMEOUT, errstr); + break; + } + } + + store_name.clear(); return(error); } From a90e7eb4ebadd21cd75b0ee994015b0a458e5e9e Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Tue, 28 Nov 2017 15:29:42 +0530 Subject: [PATCH 0301/1221] From afa2e009609e95eb036b352b5acbd818dae9ba53 Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Tue, 28 Nov 2017 15:42:31 +0530 Subject: [PATCH 0302/1221] From f78d626c2f735ed0373e993c042b7189dba2837f Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Thu, 30 Nov 2017 00:41:51 +0100 Subject: [PATCH 0303/1221] From ddf4fc0a29e6687a373d92eec8d21b6b291701b7 Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Thu, 30 Nov 2017 16:47:49 +0100 Subject: [PATCH 0304/1221] From baa86f31ee7b5021391b1e9e811ddefa55cbb91c Mon Sep 17 00:00:00 2001 From: Harin Vadodaria Date: Mon, 18 Dec 2017 06:37:58 +0100 Subject: [PATCH 0305/1221] Bug#25052009: CONNECTION_CONTROL: CRASH/ ERROR LOG, FAILED TO DELETE CONNECTION DELAY HASH E Fix : Removed error because it was not required. --- plugin/connection_control/connection_delay.cc | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/plugin/connection_control/connection_delay.cc b/plugin/connection_control/connection_delay.cc index 365812d32234..986992576233 100644 --- a/plugin/connection_control/connection_delay.cc +++ b/plugin/connection_control/connection_delay.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2016, 2017 Oracle and/or its affiliates. All rights reserved. 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 @@ -689,16 +689,9 @@ namespace connection_control Successful connection. delete entry for given account from the hash */ - if (user_present && m_userhost_hash.remove_entry(userhost)) + if (user_present) { - char error_buffer[512]; - memset(error_buffer, 0, sizeof(error_buffer)); - my_snprintf(error_buffer, sizeof(error_buffer) - 1, - "Failed to delete connection delay hash entry for acount : %s." - " It might have been deleted already.", - userhost.c_str()); - error_handler->handle_error(error_buffer); - error= true; + (void) m_userhost_hash.remove_entry(userhost); } } From c2755866d041899b8b96ff4f9047f8a3711c850e Mon Sep 17 00:00:00 2001 From: Lukasz Kotula Date: Thu, 23 Nov 2017 10:47:54 +0100 Subject: [PATCH 0306/1221] Bug#26911878 - USE AFTER FREE IN RAPID/PLUGIN/X/MYSQLXTEST_SRC/MYSQLX_PROTOCOL.CC Description =========== "Mysqlxtest" uses a protobuf message pointer after deletion. It tries to build error string using it. Fix === Changed the sequence of calls to: * create the error string, * deletes the protobuf message. RB: 18037 Reviewed-by: Grzegorz Szwarc Reviewed-by: Tomasz Stepniak --- .../x/mysqlxtest_src/mysqlx_protocol.cc | 6 ++- rapid/unittest/gunit/xplugin/CMakeLists.txt | 16 +++++-- .../gunit/xplugin/mysqlx_protocol_t.cc | 47 +++++++++++++++++++ 3 files changed, 64 insertions(+), 5 deletions(-) create mode 100644 rapid/unittest/gunit/xplugin/mysqlx_protocol_t.cc diff --git a/rapid/plugin/x/mysqlxtest_src/mysqlx_protocol.cc b/rapid/plugin/x/mysqlxtest_src/mysqlx_protocol.cc index 53bed6a8a21d..dd2270b3f7e1 100644 --- a/rapid/plugin/x/mysqlxtest_src/mysqlx_protocol.cc +++ b/rapid/plugin/x/mysqlxtest_src/mysqlx_protocol.cc @@ -836,10 +836,12 @@ Message *XProtocol::recv_payload(const int mid, const std::size_t msglen) if (!ret_val->IsInitialized()) { - delete[] mbuf; - delete ret_val; std::string err("Message is not properly initialized: "); err += ret_val->InitializationErrorString(); + + delete[] mbuf; + delete ret_val; + throw Error(CR_MALFORMED_PACKET, err); } } diff --git a/rapid/unittest/gunit/xplugin/CMakeLists.txt b/rapid/unittest/gunit/xplugin/CMakeLists.txt index 3980a86892ce..7b53f68124d5 100644 --- a/rapid/unittest/gunit/xplugin/CMakeLists.txt +++ b/rapid/unittest/gunit/xplugin/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -60,8 +60,13 @@ IF(HAVE_NO_IGNORED_QUALIFIERS) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-ignored-qualifiers") ENDIF() - -ADD_DEFINITIONS(${GMOCK_CFLAGS} -DBOOST_ALL_NO_LIB -DBOOST_NO_AUTO_PTR -DUSE_MYSQLX_FULL_PROTO -DXPLUGIN_UNIT_TESTS) +ADD_DEFINITIONS( + ${GMOCK_CFLAGS} + -DBOOST_ALL_NO_LIB + -DBOOST_NO_AUTO_PTR + -DUSE_MYSQLX_FULL_PROTO + -DXPLUGIN_UNIT_TESTS +) INCLUDE_DIRECTORIES(SYSTEM ${BOOST_INCLUDE_DIR} @@ -100,6 +105,11 @@ FILE( "${CMAKE_CURRENT_SOURCE_DIR}/mysqlx_pb_wrapper.cc" "${PROJECT_SOURCE_DIR}/rapid/plugin/x/src/mysql_function_names.cc" "${PROJECT_SOURCE_DIR}/rapid/plugin/x/mysqlxtest_src/mysqlx_row.cc" + "${PROJECT_SOURCE_DIR}/rapid/plugin/x/mysqlxtest_src/mysqlx_protocol.cc" + "${PROJECT_SOURCE_DIR}/rapid/plugin/x/mysqlxtest_src/mysqlx_connection.cc" + "${PROJECT_SOURCE_DIR}/rapid/plugin/x/mysqlxtest_src/mysqlx_resultset.cc" + "${PROJECT_SOURCE_DIR}/rapid/plugin/x/mysqlxtest_src/password_hasher.cc" + "${PROJECT_SOURCE_DIR}/rapid/plugin/x/mysqlxtest_src/mysql41_hash.cc" ) # boost::shared_ptr depends on scoped_lock diff --git a/rapid/unittest/gunit/xplugin/mysqlx_protocol_t.cc b/rapid/unittest/gunit/xplugin/mysqlx_protocol_t.cc new file mode 100644 index 000000000000..a700280f7902 --- /dev/null +++ b/rapid/unittest/gunit/xplugin/mysqlx_protocol_t.cc @@ -0,0 +1,47 @@ +/* Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + + 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 */ + + +#include + +#include "mysqlx_protocol.h" + + +namespace test +{ + +TEST(mysqlx_protocol, receive_invalid_message) +{ + const std::size_t empty_payload_length = 0; + + mysqlx::XProtocol protocol( + mysqlx::Ssl_config(), + 0, // timeout + false, // dont_wait_for_disconnect + mysqlx::IP_any); + + /* + Mysqlx::Notice::Frame message has one or more required fields. + Reception of message with empty payload, fails the check for + required fields which is thrown below as mysqlx::Error. + */ + EXPECT_THROW( + protocol.recv_payload( + Mysqlx::ServerMessages_Type_NOTICE, + empty_payload_length), + mysqlx::Error); +} + +} // namespace test From fc31820e86e49461b0f8602dfdc86e6b6f7befb6 Mon Sep 17 00:00:00 2001 From: Robert Golebiowski Date: Wed, 22 Nov 2017 17:23:24 +0100 Subject: [PATCH 0307/1221] PS-256: keys created by keyring_vault MTR tests are not removed from Vault server This fix changes how keys are removed from Vault. Instead of removing one key after another, test: 1) creates a mount point before running the tests. 2) run actual test (which creates/removes keys in/from mount point created in step 1 3) removes the mount point created in step 1 --- ...ring_vault_mtr_invalid_token_template.conf | 2 +- .../keyring_vault_mtr_template1.conf | 2 +- .../keyring_vault_mtr_template2.conf | 2 +- .../tests/mtr/generate_conf_file.inc | 3 + .../tests/mtr/key_rotation_qa.test | 14 +++- .../keyring_vault/tests/mtr/keyring_udf.test | 14 ++++ .../tests/mtr/keyring_vault_config_qa.test | 10 ++- .../tests/mtr/keyring_vault_thd_wait.test | 11 ++- .../tests/mtr/mount_point_service.inc | 68 +++++++++++++++++ .../tests/mtr/rpl_key_rotation.test | 17 ++++- .../tests/mtr/table_encrypt_1.test | 10 ++- .../tests/mtr/table_encrypt_2.test | 14 +++- .../tests/mtr/table_encrypt_3.test | 9 ++- .../tests/mtr/table_encrypt_4.test | 9 ++- .../tests/mtr/table_encrypt_5.test | 13 +++- .../tests/mtr/table_encrypt_debug.test | 11 ++- .../tests/mtr/table_encrypt_kill.test | 11 ++- .../keyring_vault/tests/mtr/vault_cleanup.inc | 73 ------------------- storage/rocksdb/rocksdb | 2 +- 19 files changed, 201 insertions(+), 94 deletions(-) create mode 100644 plugin/keyring_vault/tests/mtr/mount_point_service.inc delete mode 100644 plugin/keyring_vault/tests/mtr/vault_cleanup.inc diff --git a/mysql-test/std_data/keyring_vault_confs/keyring_vault_mtr_invalid_token_template.conf b/mysql-test/std_data/keyring_vault_confs/keyring_vault_mtr_invalid_token_template.conf index 8f0d12733e76..9ddbb623db09 100644 --- a/mysql-test/std_data/keyring_vault_confs/keyring_vault_mtr_invalid_token_template.conf +++ b/mysql-test/std_data/keyring_vault_confs/keyring_vault_mtr_invalid_token_template.conf @@ -1,4 +1,4 @@ vault_url = https://vault.public-ci.percona.com:8200 -secret_mount_point = secret +secret_mount_point = SECRET_MOUNT_POINT_TAG token = 58a90c08-8001-fd5f-6192-7498a48eaf20 vault_ca = MYSQL_TEST_DIR/std_data/keyring_vault_confs/vault_ca.crt diff --git a/mysql-test/std_data/keyring_vault_confs/keyring_vault_mtr_template1.conf b/mysql-test/std_data/keyring_vault_confs/keyring_vault_mtr_template1.conf index 8943161d7813..ec07eb5d323e 100644 --- a/mysql-test/std_data/keyring_vault_confs/keyring_vault_mtr_template1.conf +++ b/mysql-test/std_data/keyring_vault_confs/keyring_vault_mtr_template1.conf @@ -1,4 +1,4 @@ vault_url = https://vault.public-ci.percona.com:8200 -secret_mount_point = secret +secret_mount_point = SECRET_MOUNT_POINT_TAG token = 58a90c08-8001-fd5f-6192-7498a48eaf2a vault_ca = MYSQL_TEST_DIR/std_data/keyring_vault_confs/vault_ca.crt diff --git a/mysql-test/std_data/keyring_vault_confs/keyring_vault_mtr_template2.conf b/mysql-test/std_data/keyring_vault_confs/keyring_vault_mtr_template2.conf index 8b519affc82f..d601b3d887ae 100644 --- a/mysql-test/std_data/keyring_vault_confs/keyring_vault_mtr_template2.conf +++ b/mysql-test/std_data/keyring_vault_confs/keyring_vault_mtr_template2.conf @@ -1,4 +1,4 @@ vault_url = https://vault.public-ci.percona.com:8400 -secret_mount_point = secret +secret_mount_point = SECRET_MOUNT_POINT_TAG token = 25cc5351-f5a7-a2c0-335b-065d6424f1b3 vault_ca = MYSQL_TEST_DIR/std_data/keyring_vault_confs/vault_ca.crt diff --git a/plugin/keyring_vault/tests/mtr/generate_conf_file.inc b/plugin/keyring_vault/tests/mtr/generate_conf_file.inc index 7f089db4e164..7255daf25224 100644 --- a/plugin/keyring_vault/tests/mtr/generate_conf_file.inc +++ b/plugin/keyring_vault/tests/mtr/generate_conf_file.inc @@ -1,10 +1,12 @@ let KEYRING_CONF_FILE_TO_GENERATE=$KEYRING_CONF_FILE_TO_GENERATE; let KEYRING_CONF_TEMPLATE_FILE=$KEYRING_CONF_TEMPLATE_FILE; let MYSQL_TEST_DIR=$MYSQL_TEST_DIR; +let SERVER_UUID= query_get_value(SELECT @@SERVER_UUID, @@SERVER_UUID, 1); --perl use strict; my $mysql_test_dir= $ENV{MYSQL_TEST_DIR} or die "Need MYSQL_TEST_DIR"; + my $server_uuid= $ENV{SERVER_UUID} or die "Server uuid not set"; my $keyring_conf_template_file= $ENV{KEYRING_CONF_TEMPLATE_FILE} or die "Need KEYRING_CONF_TEMPLATE_FILE"; my $keyring_conf_file_to_generate= $ENV{'KEYRING_CONF_FILE_TO_GENERATE'} or die("KEYRING_CONF_FILE_TO_GENERATE not set\n"); open CONF_FILE, ">", "$keyring_conf_file_to_generate" or die "Could not open configuration file: ${keyring_conf_file_to_generate}.\n"; @@ -12,6 +14,7 @@ let MYSQL_TEST_DIR=$MYSQL_TEST_DIR; while (my $row = ) { $row =~ s/MYSQL_TEST_DIR/$mysql_test_dir/g; + $row =~ s/SECRET_MOUNT_POINT_TAG/$server_uuid/g; print CONF_FILE $row; } close(CONF_FILE); diff --git a/plugin/keyring_vault/tests/mtr/key_rotation_qa.test b/plugin/keyring_vault/tests/mtr/key_rotation_qa.test index 6c429e762952..4579ad7a1462 100644 --- a/plugin/keyring_vault/tests/mtr/key_rotation_qa.test +++ b/plugin/keyring_vault/tests/mtr/key_rotation_qa.test @@ -27,6 +27,13 @@ call mtr.add_suppression("\\[ERROR\\] InnoDB: Failed to decrpt encryption inform --source generate_default_conf_files.inc +# Create mount points +--let MOUNT_POINT_SERVICE_OP=CREATE +--let $KEYRING_CONF_FILE=$KEYRING_CONF_FILE_1 +--source mount_point_service.inc +--let $KEYRING_CONF_FILE=$KEYRING_CONF_FILE_2 +--source mount_point_service.inc + # Invalid syntax --error ER_PARSE_ERROR ALTER INSTANCE ROTATE MYISAM MASTER KEY; @@ -182,8 +189,11 @@ SELECT * FROM t5; # Cleanup DROP TABLE t1,t2,t5,t12,t10; + +# Delete mount points +--let MOUNT_POINT_SERVICE_OP=DELETE --let $KEYRING_CONF_FILE=$KEYRING_CONF_FILE_1 ---source vault_cleanup.inc +--source mount_point_service.inc --let $KEYRING_CONF_FILE=$KEYRING_CONF_FILE_2 ---source vault_cleanup.inc +--source mount_point_service.inc --echo #End: diff --git a/plugin/keyring_vault/tests/mtr/keyring_udf.test b/plugin/keyring_vault/tests/mtr/keyring_udf.test index bbc8327a172f..e68435125c9f 100644 --- a/plugin/keyring_vault/tests/mtr/keyring_udf.test +++ b/plugin/keyring_vault/tests/mtr/keyring_udf.test @@ -11,6 +11,13 @@ call mtr.add_suppression("Error while storing key: key_id cannot be empty"); --source generate_default_conf_files.inc +# Create mount points +--let MOUNT_POINT_SERVICE_OP=CREATE +--let $KEYRING_CONF_FILE=$KEYRING_CONF_FILE_1 +--source mount_point_service.inc +--let $KEYRING_CONF_FILE=$KEYRING_CONF_FILE_2 +--source mount_point_service.inc + let server_uuid = query_get_value(SELECT @@SERVER_UUID, @@SERVER_UUID, 1); --echo # Check what happens when we have not yet loaded keyring_udf or keyring_vault @@ -161,3 +168,10 @@ drop function keyring_key_remove; drop function keyring_key_generate; drop function keyring_key_type_fetch; drop function keyring_key_length_fetch; + +# Delete mount points +--let MOUNT_POINT_SERVICE_OP=DELETE +--let $KEYRING_CONF_FILE=$KEYRING_CONF_FILE_1 +--source mount_point_service.inc +--let $KEYRING_CONF_FILE=$KEYRING_CONF_FILE_2 +--source mount_point_service.inc diff --git a/plugin/keyring_vault/tests/mtr/keyring_vault_config_qa.test b/plugin/keyring_vault/tests/mtr/keyring_vault_config_qa.test index b6283f2c98b0..7968230b905f 100644 --- a/plugin/keyring_vault/tests/mtr/keyring_vault_config_qa.test +++ b/plugin/keyring_vault/tests/mtr/keyring_vault_config_qa.test @@ -15,6 +15,11 @@ call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'Error whil --source generate_default_conf_files.inc +# Create mount points +--let MOUNT_POINT_SERVICE_OP=CREATE +--let $KEYRING_CONF_FILE=$KEYRING_CONF_FILE_1 +--source mount_point_service.inc + # Installing keyring plugin. --replace_regex /\.dll/.so/ eval INSTALL PLUGIN keyring_vault SONAME '$KEYRING_VAULT_PLUGIN'; @@ -76,7 +81,10 @@ FROM INFORMATION_SCHEMA.PLUGINS WHERE plugin_name='keyring_vault'; # Cleanup DROP TABLE t1; + +# Delete mount points +--let MOUNT_POINT_SERVICE_OP=DELETE --let $KEYRING_CONF_FILE=$KEYRING_CONF_FILE_1 ---source vault_cleanup.inc +--source mount_point_service.inc --echo --echo #End: diff --git a/plugin/keyring_vault/tests/mtr/keyring_vault_thd_wait.test b/plugin/keyring_vault/tests/mtr/keyring_vault_thd_wait.test index b78a9cd6bd1b..f5aaff0faef4 100644 --- a/plugin/keyring_vault/tests/mtr/keyring_vault_thd_wait.test +++ b/plugin/keyring_vault/tests/mtr/keyring_vault_thd_wait.test @@ -4,6 +4,12 @@ --source include/have_debug.inc --source generate_default_conf_files.inc + +# Create mount points +--let MOUNT_POINT_SERVICE_OP=CREATE +--let $KEYRING_CONF_FILE=$KEYRING_CONF_FILE_1 +--source mount_point_service.inc + let $restart_parameters = restart: --early-plugin-load="keyring_vault=$KEYRING_VAULT_PLUGIN" --keyring_vault_config=$KEYRING_CONF_FILE_1 $KEYRING_VAULT_PLUGIN_OPT; --replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR $KEYRING_PLUGIN keyring_vault.so $KEYRING_VAULT_PLUGIN_OPT KEYRING_VAULT_PLUGIN_OPT --source include/restart_mysqld.inc @@ -24,5 +30,8 @@ SELECT * FROM t1; # cleanup SET SESSION debug="-d,vault_network_lag"; DROP TABLE t1; + +# Delete mount points +--let MOUNT_POINT_SERVICE_OP=DELETE --let $KEYRING_CONF_FILE=$KEYRING_CONF_FILE_1 ---source vault_cleanup.inc +--source mount_point_service.inc diff --git a/plugin/keyring_vault/tests/mtr/mount_point_service.inc b/plugin/keyring_vault/tests/mtr/mount_point_service.inc new file mode 100644 index 000000000000..1f72a05f96e5 --- /dev/null +++ b/plugin/keyring_vault/tests/mtr/mount_point_service.inc @@ -0,0 +1,68 @@ +# Creates or deletes secret mount point specified in keyring_vault configuration file +# Mount point is : +# - created when MOUNT_POINT_SERVICE_OP is set to CREATE +# - deleted when MOUNT_POINT_SERVICE_OP is set to DELETE + +# The sourcing test needs to set $KEYRING_CONF_FILE variable to +# the location of keyring_vault configuration file and +# MOUNT_POINT_SERVICE_OP variable to CREATE or DELETE +let KEYRING_CONF_FILE=$KEYRING_CONF_FILE; +let SERVER_UUID= query_get_value(SELECT @@SERVER_UUID, @@SERVER_UUID, 1); +let MOUNT_POINT_SERVICE_OP=$MOUNT_POINT_SERVICE_OP; + +--perl + use strict; + use MIME::Base64 qw( decode_base64 ); + my $keyring_conf_file= $ENV{'KEYRING_CONF_FILE'} or die("KEYRING_CONF_FILE not set\n"); + my $server_uuid= $ENV{'SERVER_UUID'} or die("SERVER_UUID not set\n"); + my $mount_point_service_op=$ENV{'MOUNT_POINT_SERVICE_OP'}; + my $token; + my $vault_url; + my $secret_mount_point; + my $vault_ca; + my $CONF_FILE; + open(CONF_FILE, "$keyring_conf_file") or die("Could not open configuration file.\n"); + while (my $row = ) + { + if ($row =~ m/token[ ]*=[ ]*(.*)/) + { + $token=$1; + } + elsif ($row =~ m/vault_url[ ]*=[ ]*(.*)/) + { + $vault_url=$1; + } + elsif ($row =~ m/secret_mount_point[ ]*= [ ]*(.*)/) + { + $secret_mount_point=$1; + } + elsif ($row =~ m/vault_ca[ ]*= [ ]*(.*)/) + { + $vault_ca=$1; + } + } + close(CONF_FILE); + if ($token eq "" || $vault_url eq "" || $secret_mount_point eq "") + { + die("Could not read vault credentials from configuration file.\n"); + } + + my $vault_ca_cert_opt= ""; + if ($vault_ca) + { + $vault_ca_cert_opt= "--cacert $vault_ca"; + } + + if ($mount_point_service_op eq 'CREATE') + { + system(qq#curl -H "X-Vault-Token: $token" $vault_ca_cert_opt --data '{"type":"generic"}' --request POST $vault_url/v1/sys/mounts/$secret_mount_point#); + } + elsif ($mount_point_service_op eq 'DELETE') + { + system(qq#curl -H "X-Vault-Token: $token" $vault_ca_cert_opt -X DELETE $vault_url/v1/sys/mounts/$secret_mount_point#); + } + else + { + die("Mount point should be either created or deleted. The resulting operation is no-op"); + } +EOF diff --git a/plugin/keyring_vault/tests/mtr/rpl_key_rotation.test b/plugin/keyring_vault/tests/mtr/rpl_key_rotation.test index edf19cfc82fa..41571cec54a8 100644 --- a/plugin/keyring_vault/tests/mtr/rpl_key_rotation.test +++ b/plugin/keyring_vault/tests/mtr/rpl_key_rotation.test @@ -16,6 +16,13 @@ call mtr.add_suppression("The slave coordinator and worker threads are stopped") --source generate_default_conf_files.inc +# Create mount points +--let MOUNT_POINT_SERVICE_OP=CREATE +--let $KEYRING_CONF_FILE=$KEYRING_CONF_FILE_1 +--source mount_point_service.inc +--let $KEYRING_CONF_FILE=$KEYRING_CONF_FILE_2 +--source mount_point_service.inc + --connection slave --replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR eval SET @@global.keyring_vault_config='$KEYRING_CONF_FILE_2'; @@ -116,16 +123,18 @@ DROP TABLE t1,t2,t3,t4; --source include/sync_slave_sql_with_master.inc --source include/rpl_end.inc +# Delete mount points +--let MOUNT_POINT_SERVICE_OP=DELETE --let $KEYRING_CONF_FILE=$KEYRING_CONF_FILE_1 --connection master ---source vault_cleanup.inc +--source mount_point_service.inc --connection slave ---source vault_cleanup.inc +--source mount_point_service.inc --let $KEYRING_CONF_FILE=$KEYRING_CONF_FILE_2 --connection master ---source vault_cleanup.inc +--source mount_point_service.inc --connection slave ---source vault_cleanup.inc +--source mount_point_service.inc #reset keyring_vault_config variable to null UNINSTALL PLUGIN keyring_vault; diff --git a/plugin/keyring_vault/tests/mtr/table_encrypt_1.test b/plugin/keyring_vault/tests/mtr/table_encrypt_1.test index 9f68065d7ccf..8e2edb66782b 100644 --- a/plugin/keyring_vault/tests/mtr/table_encrypt_1.test +++ b/plugin/keyring_vault/tests/mtr/table_encrypt_1.test @@ -1,7 +1,15 @@ --source include/have_keyring_vault_plugin.inc --source generate_default_conf_files.inc + +# Create mount points +--let MOUNT_POINT_SERVICE_OP=CREATE +--let $KEYRING_CONF_FILE=$KEYRING_CONF_FILE_1 +--source mount_point_service.inc + --let $keyring_restart_param=restart:--early-plugin-load="keyring_vault=$KEYRING_VAULT_PLUGIN" --loose-keyring_vault_config=$KEYRING_CONF_FILE_1 $KEYRING_VAULT_PLUGIN_OPT --source include/table_encrypt_1.inc +# Delete mount points +--let MOUNT_POINT_SERVICE_OP=DELETE --let $KEYRING_CONF_FILE=$KEYRING_CONF_FILE_1 ---source vault_cleanup.inc +--source mount_point_service.inc diff --git a/plugin/keyring_vault/tests/mtr/table_encrypt_2.test b/plugin/keyring_vault/tests/mtr/table_encrypt_2.test index 8ca12f906a66..29ba9b7b2e97 100644 --- a/plugin/keyring_vault/tests/mtr/table_encrypt_2.test +++ b/plugin/keyring_vault/tests/mtr/table_encrypt_2.test @@ -7,6 +7,14 @@ --source include/not_embedded.inc --source generate_default_conf_files.inc + +# Create mount points +--let MOUNT_POINT_SERVICE_OP=CREATE +--let $KEYRING_CONF_FILE=$KEYRING_CONF_FILE_1 +--source mount_point_service.inc +--let $KEYRING_CONF_FILE=$KEYRING_CONF_FILE_2 +--source mount_point_service.inc + --let $keyring1_restart_param=restart:--early-plugin-load="keyring_vault=$KEYRING_VAULT_PLUGIN" --loose-keyring_vault_config=$KEYRING_CONF_FILE_1 $KEYRING_VAULT_PLUGIN_OPT --let $keyring2_restart_param=restart:--early-plugin-load="keyring_vault=$KEYRING_VAULT_PLUGIN" --loose-keyring_vault_config=$KEYRING_CONF_FILE_2 $KEYRING_VAULT_PLUGIN_OPT @@ -19,7 +27,9 @@ eval SET @@global.keyring_vault_config="$KEYRING_CONF_FILE_1"; --source include/table_encrypt_2.inc +# Delete mount points +--let MOUNT_POINT_SERVICE_OP=DELETE --let $KEYRING_CONF_FILE=$KEYRING_CONF_FILE_1 ---source vault_cleanup.inc +--source mount_point_service.inc --let $KEYRING_CONF_FILE=$KEYRING_CONF_FILE_2 ---source vault_cleanup.inc +--source mount_point_service.inc diff --git a/plugin/keyring_vault/tests/mtr/table_encrypt_3.test b/plugin/keyring_vault/tests/mtr/table_encrypt_3.test index 8b1ad7328570..6be4b446329b 100644 --- a/plugin/keyring_vault/tests/mtr/table_encrypt_3.test +++ b/plugin/keyring_vault/tests/mtr/table_encrypt_3.test @@ -1,9 +1,16 @@ --source include/have_keyring_vault_plugin.inc --source generate_default_conf_files.inc +# Create mount points +--let MOUNT_POINT_SERVICE_OP=CREATE +--let $KEYRING_CONF_FILE=$KEYRING_CONF_FILE_1 +--source mount_point_service.inc + --let $keyring_plugin_name=keyring_vault --let $keyring_restart_param=restart: --early-plugin-load="keyring_vault=$KEYRING_VAULT_PLUGIN" --loose-keyring_vault_config=$KEYRING_CONF_FILE_1 $KEYRING_VAULT_PLUGIN_OPT --source include/table_encrypt_3.inc +# Delete mount points +--let MOUNT_POINT_SERVICE_OP=DELETE --let $KEYRING_CONF_FILE=$KEYRING_CONF_FILE_1 ---source vault_cleanup.inc +--source mount_point_service.inc diff --git a/plugin/keyring_vault/tests/mtr/table_encrypt_4.test b/plugin/keyring_vault/tests/mtr/table_encrypt_4.test index f782116df7dd..1a8a68bbea61 100644 --- a/plugin/keyring_vault/tests/mtr/table_encrypt_4.test +++ b/plugin/keyring_vault/tests/mtr/table_encrypt_4.test @@ -1,8 +1,15 @@ --source include/have_keyring_vault_plugin.inc --source generate_default_conf_files.inc +# Create mount points +--let MOUNT_POINT_SERVICE_OP=CREATE +--let $KEYRING_CONF_FILE=$KEYRING_CONF_FILE_2 +--source mount_point_service.inc + --let $keyring_restart_param=restart:--early-plugin-load="keyring_vault=$KEYRING_VAULT_PLUGIN" --loose-keyring_vault_config=$KEYRING_CONF_FILE_2 $KEYRING_VAULT_PLUGIN_OPT --source include/table_encrypt_4.inc +# Delete mount points +--let MOUNT_POINT_SERVICE_OP=DELETE --let $KEYRING_CONF_FILE=$KEYRING_CONF_FILE_2 ---source vault_cleanup.inc +--source mount_point_service.inc diff --git a/plugin/keyring_vault/tests/mtr/table_encrypt_5.test b/plugin/keyring_vault/tests/mtr/table_encrypt_5.test index 6ca43157b771..dd5bc896fa6b 100644 --- a/plugin/keyring_vault/tests/mtr/table_encrypt_5.test +++ b/plugin/keyring_vault/tests/mtr/table_encrypt_5.test @@ -4,6 +4,13 @@ call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'keyring_va --source include/have_keyring_vault_plugin.inc --source generate_default_conf_files.inc +# Create mount points +--let MOUNT_POINT_SERVICE_OP=CREATE +--let $KEYRING_CONF_FILE=$KEYRING_CONF_FILE_1 +--source mount_point_service.inc +--let $KEYRING_CONF_FILE=$KEYRING_CONF_FILE_2 +--source mount_point_service.inc + --let $keyring_plugin_name=keyring_vault --let $keyring1_restart_param= restart: --early-plugin-load="keyring_vault=$KEYRING_VAULT_PLUGIN" --loose-keyring_vault_config=$KEYRING_CONF_FILE_1 $KEYRING_VAULT_PLUGIN_OPT --let $keyring2_restart_param= restart: --early-plugin-load="keyring_vault=$KEYRING_VAULT_PLUGIN" --loose-keyring_vault_config=$KEYRING_CONF_FILE_2 $KEYRING_VAULT_PLUGIN_OPT @@ -12,7 +19,9 @@ call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'keyring_va --let $set_keyring_variable_to_keyring1=SET @@global.keyring_vault_config='$KEYRING_CONF_FILE_1' --source include/table_encrypt_5.inc +# Delete mount points +--let MOUNT_POINT_SERVICE_OP=DELETE --let $KEYRING_CONF_FILE=$KEYRING_CONF_FILE_1 ---source vault_cleanup.inc +--source mount_point_service.inc --let $KEYRING_CONF_FILE=$KEYRING_CONF_FILE_2 ---source vault_cleanup.inc +--source mount_point_service.inc diff --git a/plugin/keyring_vault/tests/mtr/table_encrypt_debug.test b/plugin/keyring_vault/tests/mtr/table_encrypt_debug.test index dd6830e462fb..858e61a91d7e 100644 --- a/plugin/keyring_vault/tests/mtr/table_encrypt_debug.test +++ b/plugin/keyring_vault/tests/mtr/table_encrypt_debug.test @@ -1,7 +1,16 @@ --source include/have_keyring_vault_plugin.inc --source generate_default_conf_files.inc +# Create mount points +--let MOUNT_POINT_SERVICE_OP=CREATE +--let $KEYRING_CONF_FILE=$KEYRING_CONF_FILE_1 +--source mount_point_service.inc + --let $KEYRING_CONF_FILE=$KEYRING_CONF_FILE_1 --let $keyring_restart_param=restart: --early-plugin-load="keyring_vault=$KEYRING_VAULT_PLUGIN" --loose-keyring_vault_config=$KEYRING_CONF_FILE $KEYRING_VAULT_PLUGIN_OPT --source include/table_encrypt_debug.inc ---source vault_cleanup.inc + +# Delete mount points +--let MOUNT_POINT_SERVICE_OP=DELETE +--let $KEYRING_CONF_FILE=$KEYRING_CONF_FILE_1 +--source mount_point_service.inc diff --git a/plugin/keyring_vault/tests/mtr/table_encrypt_kill.test b/plugin/keyring_vault/tests/mtr/table_encrypt_kill.test index 7d9459f37712..db94e721a902 100644 --- a/plugin/keyring_vault/tests/mtr/table_encrypt_kill.test +++ b/plugin/keyring_vault/tests/mtr/table_encrypt_kill.test @@ -1,7 +1,16 @@ --source include/have_keyring_vault_plugin.inc --source generate_default_conf_files.inc +# Create mount points +--let MOUNT_POINT_SERVICE_OP=CREATE +--let $KEYRING_CONF_FILE=$KEYRING_CONF_FILE_1 +--source mount_point_service.inc + --let $KEYRING_CONF_FILE=$KEYRING_CONF_FILE_1 --let $keyring_restart_param=restart: --early-plugin-load="keyring_vault=$KEYRING_VAULT_PLUGIN" --loose-keyring_vault_config=$KEYRING_CONF_FILE $KEYRING_VAULT_PLUGIN_OPT --source include/table_encrypt_kill.inc ---source vault_cleanup.inc + +# Delete mount points +--let MOUNT_POINT_SERVICE_OP=DELETE +--let $KEYRING_CONF_FILE=$KEYRING_CONF_FILE_1 +--source mount_point_service.inc diff --git a/plugin/keyring_vault/tests/mtr/vault_cleanup.inc b/plugin/keyring_vault/tests/mtr/vault_cleanup.inc deleted file mode 100644 index 1599eb64cbbd..000000000000 --- a/plugin/keyring_vault/tests/mtr/vault_cleanup.inc +++ /dev/null @@ -1,73 +0,0 @@ -# Deletes from Vault all keys created by a server sourcing this file. -# The sourcing test needs to set $KEYRING_CONF_FILE variable to -# the location of keyring_vault configuration file. -let KEYRING_CONF_FILE=$KEYRING_CONF_FILE; -let CURL_OUTPUT_FILE=$MYSQL_TMP_DIR/curl_output.txt; -let SERVER_UUID= query_get_value(SELECT @@SERVER_UUID, @@SERVER_UUID, 1); - ---perl - use strict; - use MIME::Base64 qw( decode_base64 ); - my $keyring_conf_file= $ENV{'KEYRING_CONF_FILE'} or die("KEYRING_CONF_FILE not set\n"); - my $curl_output_file= $ENV{'CURL_OUTPUT_FILE'} or die("CURL_OUTPUT_FILE not set\n"); - my $server_uuid= $ENV{'SERVER_UUID'} or die("SERVER_UUID not set\n"); - my $token; - my $vault_url; - my $secret_mount_point; - my $vault_ca; - my $CONF_FILE; - open(CONF_FILE, "$keyring_conf_file") or die("Could not open configuration file.\n"); - while (my $row = ) - { - if ($row =~ m/token[ ]*=[ ]*(.*)/) - { - $token=$1; - } - elsif ($row =~ m/vault_url[ ]*=[ ]*(.*)/) - { - $vault_url=$1; - } - elsif ($row =~ m/secret_mount_point[ ]*= [ ]*(.*)/) - { - $secret_mount_point=$1; - } - elsif ($row =~ m/vault_ca[ ]*= [ ]*(.*)/) - { - $vault_ca=$1; - } - } - close(CONF_FILE); - if ($token eq "" || $vault_url eq "" || $secret_mount_point eq "") - { - die("Could not read vault credentials from configuration file.\n"); - } - - system(qq#curl -H "X-Vault-Token: $token" --cacert $vault_ca -X GET $vault_url/v1/$secret_mount_point/?list=true > $curl_output_file#); - - my $CURL_OUTPUT_FILE; - open(CURL_OUTPUT_FILE, "$curl_output_file") or die("Could not open file with output from curl.\n"); - my $curl_output = ; - close(CURL_OUTPUT_FILE); - my $keys_list_tag = "keys\":["; - my $keys_pos = index($curl_output, $keys_list_tag); - if ($keys_pos != -1) - { - $keys_pos += length($keys_list_tag); - my $keys_end_pos = index($curl_output, "]", $keys_pos); - if ($keys_pos == -1) - { - die("Unable to parse keys list retrieved from Vault.\n"); - } - my $keys_tags = substr($curl_output, $keys_pos, $keys_end_pos - $keys_pos); - $keys_tags =~ tr/\"//d; - my @keys = split(',', $keys_tags); - foreach(@keys) - { - my $decoded_key_sign = decode_base64($_); - if ($decoded_key_sign =~ m/.*$server_uuid.*/) - { - system(qq#curl -H "X-Vault-Token: $token" --cacert $vault_ca -X DELETE $vault_url/v1/$secret_mount_point/$_ &#); - } - } - } -EOF diff --git a/storage/rocksdb/rocksdb b/storage/rocksdb/rocksdb index ab0542f5ec6e..50a969131f69 160000 --- a/storage/rocksdb/rocksdb +++ b/storage/rocksdb/rocksdb @@ -1 +1 @@ -Subproject commit ab0542f5ec6e7c7e405267eaa2e2a603a77d570b +Subproject commit 50a969131f69ffab6f7a694b3b897a7235e899fa From 9925ad7f4be6c641afaf6a09302b12a0d62d67f5 Mon Sep 17 00:00:00 2001 From: Sachin Agarwal Date: Mon, 18 Dec 2017 18:40:08 +0530 Subject: [PATCH 0308/1221] Bug #26805833 INNODB COMPLAINS OF SYNTAX ERROR, BUT DOES NOT SAY WHICH OPTION Problem: when incorrect value is assigned to innodb_data_file_path or innodb_temp_data_file_path parameter, Innodb returns error and logs error message in mysqlds.err file but there is no information in error message about the parameter which causes Innodb initialization is failed. Fix: Added error message with parameter name and value, which causes Innodb initialization is failed. Reviewed by: Jimmy RB: 18206 --- storage/innobase/handler/ha_innodb.cc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index 9b2ef2f234d6..0168759b7587 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -3646,6 +3646,8 @@ innobase_init( /* Supports raw devices */ if (!srv_sys_space.parse_params(innobase_data_file_path, true)) { + ib::error() << "Unable to parse innodb_data_file_path=" + << innobase_data_file_path; DBUG_RETURN(innobase_init_abort()); } @@ -3668,6 +3670,8 @@ innobase_init( srv_tmp_space.set_flags(fsp_flags); if (!srv_tmp_space.parse_params(innobase_temp_data_file_path, false)) { + ib::error() << "Unable to parse innodb_temp_data_file_path=" + << innobase_temp_data_file_path; DBUG_RETURN(innobase_init_abort()); } From e50b869d1130aaa27644b0b4703402f90638cdcf Mon Sep 17 00:00:00 2001 From: Sreeharsha Ramanavarapu Date: Tue, 19 Dec 2017 09:14:23 +0530 Subject: [PATCH 0309/1221] Bug #25949639: DATE FORMAT 'YYYYMMDD' ISN'T RECOGNIZED IN LEFT JOIN Issue: ------ This problem occurs when DATE (or related) column / value is compared to a string in the format 'YYYYMMDD'. When a DATETIME column is involved, values shouldn't be compared as strings since it won't take the format into account. Similar problems were found in CASE and IN statements. Solution: --------- If DATE (or related) values are involved, use "cmp_item_datetime" for comparision. This will take the relevant format into account. To handle TIME values "cmp_item_datetime" has a new flag to call "get_time_value" for that case. Also making warn_item into a const to make sure the object isn't modified. --- mysql-test/r/date_formats.result | 64 ++++++++++++++++++++++++++++++++ mysql-test/t/date_formats.test | 41 ++++++++++++++++++++ sql/item_cmpfunc.cc | 50 ++++++++++++++++++------- sql/item_cmpfunc.h | 34 ++++++++++++----- 4 files changed, 165 insertions(+), 24 deletions(-) diff --git a/mysql-test/r/date_formats.result b/mysql-test/r/date_formats.result index 4da1acf58c04..20b279216a32 100644 --- a/mysql-test/r/date_formats.result +++ b/mysql-test/r/date_formats.result @@ -618,3 +618,67 @@ Warning 1411 Incorrect datetime value: '1' for function str_to_date do timestamp(date_format('2011-11-11', right("12345" + 1, 3))); Warnings: Warning 1292 Incorrect datetime value: '346' +# +# Bug #25949639: DATE FORMAT 'YYYYMMDD' ISN'T RECOGNIZED IN LEFT JOIN +# +CREATE TABLE t1 (a varchar(10), PRIMARY KEY (a)); +CREATE TABLE t2 (a varchar(10), b date, PRIMARY KEY(a,b)); +CREATE TABLE t3 (a varchar(10), b TIME, PRIMARY KEY(a,b)); +INSERT INTO t1 VALUES ('test1'); +INSERT INTO t2 VALUES +('test1','2016-12-13'),('test1','2016-12-14'),('test1','2016-12-15'); +INSERT INTO t3 VALUES +('test1','11:13:14'), ('test1','12:13:14'), ('test1','10:13:14'); +EXPLAIN SELECT * +FROM t1 LEFT JOIN t2 +ON t2.a = 'test1' AND t2.b = '20161213' +WHERE t1.a = 'test1'; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 NULL const PRIMARY PRIMARY 12 const 1 100.00 Using index +1 SIMPLE t2 NULL const PRIMARY PRIMARY 15 const,const 1 100.00 Using index +Warnings: +Note 1003 /* select#1 */ select 'test1' AS `a`,'test1' AS `a`,'2016-12-13' AS `b` from `test`.`t1` left join `test`.`t2` on((multiple equal('test1', 'test1') and multiple equal('20161213', '2016-12-13'))) where 1 +EXPLAIN SELECT * +FROM t1 LEFT JOIN t2 IGNORE INDEX(PRIMARY) +ON t2.a = 'test1' AND t2.b = '20161213' +WHERE t1.a = 'test1'; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 NULL const PRIMARY PRIMARY 12 const 1 100.00 Using index +1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 3 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select 'test1' AS `a`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b` from `test`.`t1` left join `test`.`t2` IGNORE INDEX (PRIMARY) on(((`test`.`t2`.`b` = '20161213') and (`test`.`t2`.`a` = 'test1'))) where 1 +SELECT * +FROM t1 LEFT JOIN t2 +ON t2.a = 'test1' AND t2.b = '20161213' +WHERE t1.a = 'test1'; +a a b +test1 test1 2016-12-13 +SELECT * +FROM t1 LEFT JOIN t2 IGNORE INDEX(PRIMARY) +ON t2.a = 'test1' AND t2.b = '20161213' +WHERE t1.a = 'test1'; +a a b +test1 test1 2016-12-13 +SELECT b, b = '20161213', +CASE b WHEN '20161213' then 'found' ELSE 'not found' END FROM t2; +b b = '20161213' CASE b WHEN '20161213' then 'found' ELSE 'not found' END +2016-12-13 1 found +2016-12-14 0 not found +2016-12-15 0 not found +SELECT b, b IN ('20161213'), b in ('20161213', 0) FROM t2; +b b IN ('20161213') b in ('20161213', 0) +2016-12-13 1 1 +2016-12-14 0 0 +2016-12-15 0 0 +SELECT b, b = '121314', +CASE b WHEN '121314' then 'found' ELSE 'not found' END FROM t3; +b b = '121314' CASE b WHEN '121314' then 'found' ELSE 'not found' END +10:13:14 0 not found +11:13:14 0 not found +12:13:14 1 found +SELECT b, b in ('121314'), b in ('121314', 0) FROM t3; +b b in ('121314') b in ('121314', 0) +10:13:14 0 0 +11:13:14 0 0 +12:13:14 1 1 +DROP TABLE t1, t2, t3; diff --git a/mysql-test/t/date_formats.test b/mysql-test/t/date_formats.test index 7ca0dbc9fc6f..fb48d962c5c0 100644 --- a/mysql-test/t/date_formats.test +++ b/mysql-test/t/date_formats.test @@ -411,3 +411,44 @@ do str_to_date(1, "%#"); --echo # do timestamp(date_format('2011-11-11', right("12345" + 1, 3))); + +--echo # +--echo # Bug #25949639: DATE FORMAT 'YYYYMMDD' ISN'T RECOGNIZED IN LEFT JOIN +--echo # + +CREATE TABLE t1 (a varchar(10), PRIMARY KEY (a)); +CREATE TABLE t2 (a varchar(10), b date, PRIMARY KEY(a,b)); +CREATE TABLE t3 (a varchar(10), b TIME, PRIMARY KEY(a,b)); +INSERT INTO t1 VALUES ('test1'); +INSERT INTO t2 VALUES +('test1','2016-12-13'),('test1','2016-12-14'),('test1','2016-12-15'); +INSERT INTO t3 VALUES +('test1','11:13:14'), ('test1','12:13:14'), ('test1','10:13:14'); + +let query1= +SELECT * +FROM t1 LEFT JOIN t2 + ON t2.a = 'test1' AND t2.b = '20161213' +WHERE t1.a = 'test1'; + +let query2= +SELECT * +FROM t1 LEFT JOIN t2 IGNORE INDEX(PRIMARY) + ON t2.a = 'test1' AND t2.b = '20161213' +WHERE t1.a = 'test1'; + +eval EXPLAIN $query1; +eval EXPLAIN $query2; +eval $query1; +eval $query2; + +SELECT b, b = '20161213', + CASE b WHEN '20161213' then 'found' ELSE 'not found' END FROM t2; +SELECT b, b IN ('20161213'), b in ('20161213', 0) FROM t2; + +#Uses datatype TIME +SELECT b, b = '121314', + CASE b WHEN '121314' then 'found' ELSE 'not found' END FROM t3; +SELECT b, b in ('121314'), b in ('121314', 0) FROM t3; + +DROP TABLE t1, t2, t3; diff --git a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc index 405126765f7c..abb27e4f02e9 100644 --- a/sql/item_cmpfunc.cc +++ b/sql/item_cmpfunc.cc @@ -39,7 +39,7 @@ using std::max; static bool convert_constant_item(THD *, Item_field *, Item **); static longlong get_year_value(THD *thd, Item ***item_arg, Item **cache_arg, - Item *warn_item, bool *is_null); + const Item *warn_item, bool *is_null); static Item_result item_store_type(Item_result a, Item *item, my_bool unsigned_flag) @@ -1068,7 +1068,7 @@ Arg_comparator::can_compare_as_dates(Item *a, Item *b, ulonglong *const_value) longlong get_time_value(THD *thd, Item ***item_arg, Item **cache_arg, - Item *warn_item, bool *is_null) + const Item *warn_item, bool *is_null) { longlong value; Item *item= **item_arg; @@ -1371,7 +1371,7 @@ void Arg_comparator::set_datetime_cmp_func(Item_result_field *owner_arg, longlong get_datetime_value(THD *thd, Item ***item_arg, Item **cache_arg, - Item *warn_item, bool *is_null) + const Item *warn_item, bool *is_null) { longlong value= 0; String buf, *str= 0; @@ -1452,7 +1452,7 @@ get_datetime_value(THD *thd, Item ***item_arg, Item **cache_arg, static longlong get_year_value(THD *thd, Item ***item_arg, Item **cache_arg, - Item *warn_item, bool *is_null) + const Item *warn_item, bool *is_null) { longlong value= 0; Item *item= **item_arg; @@ -4152,7 +4152,7 @@ void Item_func_case::fix_length_and_dec() { DBUG_ASSERT((Item_result)i != ROW_RESULT); if (!(cmp_items[i]= - cmp_item::get_comparator((Item_result)i, + cmp_item::get_comparator((Item_result)i, args[first_expr_num], cmp_collation.collation))) return; } @@ -4813,12 +4813,19 @@ bool in_decimal::compare_elems(uint pos1, uint pos2) const } -cmp_item* cmp_item::get_comparator(Item_result type, +cmp_item* cmp_item::get_comparator(Item_result result_type, const Item *item, const CHARSET_INFO *cs) { - switch (type) { + switch (result_type) { case STRING_RESULT: - return new cmp_item_string(cs); + /* + Temporal types shouldn't be compared as strings. Since date/time formats + may be different, e.g. '20000102' == '2000-01-02'." + */ + if (item->is_temporal()) + return new cmp_item_datetime(item); + else + return new cmp_item_string(cs); case INT_RESULT: return new cmp_item_int; case REAL_RESULT: @@ -4885,7 +4892,7 @@ void cmp_item_row::alloc_comparators(Item *item) DBUG_ASSERT(comparators[i] == NULL); Item *item_i= item->element_index(i); if (!(comparators[i]= - cmp_item::get_comparator(item_i->result_type(), + cmp_item::get_comparator(item_i->result_type(), item_i, item_i->collation.collation))) break; // new failed if (item_i->result_type() == ROW_RESULT) @@ -5011,11 +5018,21 @@ cmp_item* cmp_item_decimal::make_same() } +cmp_item_datetime::cmp_item_datetime(const Item *warn_item_arg) + :warn_item(warn_item_arg), lval_cache(0), + has_date(warn_item_arg->is_temporal_with_date()) +{} + void cmp_item_datetime::store_value(Item *item) { bool is_null; Item **tmp_item= lval_cache ? &lval_cache : &item; - value= get_datetime_value(current_thd, &tmp_item, &lval_cache, warn_item, &is_null); + if (has_date) + value= get_datetime_value(current_thd, &tmp_item, &lval_cache, warn_item, + &is_null); + else + value= get_time_value(current_thd, &tmp_item, &lval_cache, warn_item, + &is_null); set_null_value(item->null_value); } @@ -5024,8 +5041,13 @@ int cmp_item_datetime::cmp(Item *arg) { bool is_null; Item **tmp_item= &arg; - const bool rc= value != - get_datetime_value(current_thd, &tmp_item, 0, warn_item, &is_null); + longlong value2= 0; + if (has_date) + value2= get_datetime_value(current_thd, &tmp_item, 0, warn_item, &is_null); + else + value2= get_time_value(current_thd, &tmp_item, 0, warn_item, &is_null); + + const bool rc= (value != value2); return (m_null_value || arg->null_value) ? UNKNOWN : rc; } @@ -5533,7 +5555,7 @@ void Item_func_in::fix_length_and_dec() agg_arg_charsets_for_comparison(cmp_collation, args, arg_count)) return; if (!cmp_items[i] && !(cmp_items[i]= - cmp_item::get_comparator((Item_result)i, + cmp_item::get_comparator((Item_result)i, args[0], cmp_collation.collation))) return; } @@ -7584,7 +7606,7 @@ longlong Item_equal::val_int() void Item_equal::fix_length_and_dec() { Item *item= get_first(); - eval_item= cmp_item::get_comparator(item->result_type(), + eval_item= cmp_item::get_comparator(item->result_type(), item, item->collation.collation); } diff --git a/sql/item_cmpfunc.h b/sql/item_cmpfunc.h index a0958a8d6d3e..01a1cbd95a49 100644 --- a/sql/item_cmpfunc.h +++ b/sql/item_cmpfunc.h @@ -1,7 +1,7 @@ #ifndef ITEM_CMPFUNC_INCLUDED #define ITEM_CMPFUNC_INCLUDED -/* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -48,9 +48,9 @@ class Arg_comparator: public Sql_alloc bool set_null; // TRUE <=> set owner->null_value // when one of arguments is NULL. longlong (*get_value_a_func)(THD *thd, Item ***item_arg, Item **cache_arg, - Item *warn_item, bool *is_null); + const Item *warn_item, bool *is_null); longlong (*get_value_b_func)(THD *thd, Item ***item_arg, Item **cache_arg, - Item *warn_item, bool *is_null); + const Item *warn_item, bool *is_null); bool try_year_cmp_func(Item_result type); static bool get_date_from_const(Item *date_arg, Item *str_arg, ulonglong *value); @@ -1393,7 +1393,19 @@ class cmp_item :public Sql_alloc virtual int cmp(Item *item)= 0; // for optimized IN with row virtual int compare(const cmp_item *item) const= 0; - static cmp_item* get_comparator(Item_result type, const CHARSET_INFO *cs); + + /** + Find the appropriate comparator for the given type. + + @param result_type Used to find the appropriate comparator. + @param item Item object used to distinguish temporal types. + @param cs Charset + + @return + New cmp_item_xxx object. + */ + static cmp_item* get_comparator(Item_result type, const Item *item, + const CHARSET_INFO *cs); virtual cmp_item *make_same()= 0; virtual void store_value_by_template(cmp_item *tmpl, Item *item) { @@ -1481,8 +1493,9 @@ class cmp_item_int : public cmp_item_scalar }; /* - Compare items in the DATETIME context. - Values are obtained with help of the get_datetime_value() function. + Compare items of temporal type. + Values are obtained with: get_datetime_value() (DATE/DATETIME/TIMESTAMP) and + get_time_value() (TIME). If the left item is a constant one then its value is cached in the lval_cache variable. */ @@ -1491,12 +1504,13 @@ class cmp_item_datetime : public cmp_item_scalar longlong value; public: /* Item used for issuing warnings. */ - Item *warn_item; + const Item *warn_item; /* Cache for the left item. */ Item *lval_cache; + /// Distinguish between DATE/DATETIME/TIMESTAMP and TIME + bool has_date; - cmp_item_datetime(Item *warn_item_arg) - :warn_item(warn_item_arg), lval_cache(0) {} + cmp_item_datetime(const Item *warn_item_arg); void store_value(Item *item); int cmp(Item *arg); int compare(const cmp_item *ci) const; @@ -2301,7 +2315,7 @@ inline Item *and_conds(Item *a, Item *b) Item *and_expressions(Item *a, Item *b, Item **org_item); longlong get_datetime_value(THD *thd, Item ***item_arg, Item **cache_arg, - Item *warn_item, bool *is_null); + const Item *warn_item, bool *is_null); bool get_mysql_time_from_str(THD *thd, String *str, timestamp_type warn_type, From 41e9da88183aac85d6fec93c3a8866ac37c271eb Mon Sep 17 00:00:00 2001 From: Ajo Robert Date: Tue, 19 Dec 2017 10:45:53 +0530 Subject: [PATCH 0310/1221] Bug#27081349 UNEXPECTED BEHAVIOUR WHEN DELETE WITH SPATIAL FUNCTION Fixed missing null pointer check. Change-Id: I4be3ed1274a87af0c802dacc9345affb8185eb90 --- sql/gcalc_slicescan.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sql/gcalc_slicescan.h b/sql/gcalc_slicescan.h index 10362c4bedc8..22c939442b0d 100644 --- a/sql/gcalc_slicescan.h +++ b/sql/gcalc_slicescan.h @@ -144,6 +144,8 @@ class Gcalc_heap : public Gcalc_dyn_list Info *result= (Info *)new_item(); if (!result) return NULL; + if (!m_hook) + return NULL; *m_hook= result; m_hook= &result->next; m_n_points++; From 7f95ec4dd61232af7afa72f3becac91d94fb8468 Mon Sep 17 00:00:00 2001 From: Kailasnath Nagarkar Date: Tue, 19 Dec 2017 14:08:48 +0530 Subject: [PATCH 0311/1221] Bug #27156820: SERVER CRASHES ON ASSERTION `INITED == INDEX' WHEN EXCEEDING TMP_TABLE_SIZE ISSUE: When an on-disk temporary table is created from in-memory temporary table, index remains uninitialized for the new on-disk table resulting in server exiting abnormally. SOLUTION: Added initialization of index after creating on disk table from in-memory table. --- sql/sql_executor.cc | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/sql/sql_executor.cc b/sql/sql_executor.cc index 56ad01caf635..a3508a9d8e1d 100644 --- a/sql/sql_executor.cc +++ b/sql/sql_executor.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -624,12 +624,18 @@ end_sj_materialize(JOIN *join, QEP_TAB *qep_tab, bool end_of_records) if ((error= table->file->ha_write_row(table->record[0]))) { /* create_ondisk_from_heap will generate error if needed */ - if (!table->file->is_ignorable_error(error) && - create_ondisk_from_heap(thd, table, + if (!table->file->is_ignorable_error(error)) + { + if (create_ondisk_from_heap(thd, table, sjm->table_param.start_recinfo, &sjm->table_param.recinfo, error, TRUE, NULL)) - DBUG_RETURN(NESTED_LOOP_ERROR); /* purecov: inspected */ + DBUG_RETURN(NESTED_LOOP_ERROR); /* purecov: inspected */ + /* Initialize the index, since create_ondisk_from_heap does + not replicate the earlier index initialization */ + if (table->hash_field) + table->file->ha_index_init(0, false); + } } } DBUG_RETURN(NESTED_LOOP_OK); From 0d22a68ae17e6d96efb2fabd6df8bd5e1e0f788a Mon Sep 17 00:00:00 2001 From: Sreeharsha Ramanavarapu Date: Tue, 19 Dec 2017 18:04:16 +0530 Subject: [PATCH 0312/1221] Bug #25949639: DATE FORMAT 'YYYYMMDD' ISN'T RECOGNIZED IN LEFT JOIN Post-push fix: -------------- 1) Unittest ItemEqual fails because two junk values were compared as strings earlier and considered unequal. Now they are compared as dates (since the field is a TIMESTAMP) and both are zero-dates. 2) Doxygen: Parameter name corrected. --- sql/item_cmpfunc.h | 2 +- unittest/gunit/item-t.cc | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sql/item_cmpfunc.h b/sql/item_cmpfunc.h index 01a1cbd95a49..f32f6b13f5aa 100644 --- a/sql/item_cmpfunc.h +++ b/sql/item_cmpfunc.h @@ -1404,7 +1404,7 @@ class cmp_item :public Sql_alloc @return New cmp_item_xxx object. */ - static cmp_item* get_comparator(Item_result type, const Item *item, + static cmp_item* get_comparator(Item_result result_type, const Item *item, const CHARSET_INFO *cs); virtual cmp_item *make_same()= 0; virtual void store_value_by_template(cmp_item *tmpl, Item *item) diff --git a/unittest/gunit/item-t.cc b/unittest/gunit/item-t.cc index b7c7ca2f458a..0c8f8097ca16 100644 --- a/unittest/gunit/item-t.cc +++ b/unittest/gunit/item-t.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -355,7 +355,7 @@ TEST_F(ItemTest, ItemEqual) new Item_field(&mft)); EXPECT_FALSE(item_equal->fix_fields(thd(), NULL)); - EXPECT_EQ(0, item_equal->val_int()); + EXPECT_EQ(1, item_equal->val_int()); } From 60853b6bb9f864b919602ab35095a3c874896d5b Mon Sep 17 00:00:00 2001 From: Andre Negrao Date: Mon, 18 Dec 2017 20:48:35 +0000 Subject: [PATCH 0313/1221] Bug#27146054 - BACKPORT BUG#26695357 TO 5.7 Description ----------- Backport of Bug#26695357 - SOME SELECTS STILL PRESENT IN XCOM CODE (already pushed to mysql-trunk and mysql-8.0) to mysql-5.7. Issue ----- After fixing parent issue BUG#25892493, one noticed that selects are still present in XCom client code, which is used to connect from GR/GCS to the XCom running thread. Fix --- This patch removes the two 'select()' calls that were still present in XCom: - In timed_connect(), the select is replaced by a poll function; - All code enclosed by '#ifdef USE_SELECT' has been removed, including a select() call contained inside one function implemented within one such conditional block. Fixed coding style issues --- .../libmysqlgcs/src/bindings/xcom/xcom/task.c | 176 +---------------- .../libmysqlgcs/src/bindings/xcom/xcom/task.h | 2 - .../src/bindings/xcom/xcom/task_os.h | 16 +- .../src/bindings/xcom/xcom/xcom_base.c | 183 ++++++++---------- 4 files changed, 95 insertions(+), 282 deletions(-) diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/task.c b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/task.c index accb1e12e420..c0d865d94f5b 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/task.c +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/task.c @@ -62,10 +62,8 @@ #include "task.h" #include "xcom_cfg.h" #ifndef _WIN32 -#ifndef USE_SELECT #include #endif -#endif #include "retry.h" #include "xdr_utils.h" @@ -77,15 +75,6 @@ task_arg null_arg = {a_end,{0}}; struct iotasks ; typedef struct iotasks iotasks; -#ifdef USE_SELECT -struct iotasks { - int maxfd; - fd_set read_set; - fd_set write_set; - fd_set err_set; - linkage tasks; /* OHKFIX Should be one each for read and write */ -}; -#else typedef struct { u_int pollfd_array_len; pollfd *pollfd_array_val; @@ -106,7 +95,7 @@ struct iotasks { pollfd_array fd; task_env_p_array tasks; }; -#endif + int task_errno = 0; static task_env *extract_first_delayed(); static task_env *task_ref(task_env *t); @@ -663,169 +652,7 @@ static task_env *extract_first_delayed() static iotasks iot; -#ifdef USE_SELECT -static void iotasks_init(iotasks *iot) -{ - iot->maxfd = 0; - FD_ZERO(&iot->read_set); - FD_ZERO(&iot->write_set); - FD_ZERO(&iot->err_set); - link_init(&iot->tasks, type_hash("task_env")); -} - -static void iotasks_deinit(iotasks *iot) -{ - DBGOUT(FN); -} - -#if TASK_DBUG_ON -static void poll_debug() MY_ATTRIBUTE((unused)); -static void poll_debug() -{ - GET_GOUT; -#if 0 - NDBG(FD_SETSIZE, d); - PTREXP(&iot.tasks); - NDBG(iot.tasks.type, u); - NDBG(cardinal(&iot.tasks), d); - PTREXP(iot.tasks.suc); - PTREXP(iot.tasks.pred); -#endif - FWD_ITER(&iot.tasks, task_env, - STRLIT("->"); - PTREXP(link_iter); PTREXP(link_iter->l.suc); PTREXP(link_iter->l.pred); NDBG(link_iter->waitfd, d); - NDBG(FD_ISSET(link_iter->waitfd, &iot.read_set), d); - NDBG(FD_ISSET(link_iter->waitfd, &iot.write_set), d); - NDBG(FD_ISSET(link_iter->waitfd, &iot.err_set), d); - ); - PRINT_GOUT; - FREE_GOUT; -} -#endif - - -static int check_completion(task_env *t, fd_set *r, fd_set *w, fd_set *e) -{ - int interrupt = 0; - assert(&t->l != &iot.tasks); - /* MAY_DBG(FN; - STREXP(t->name); - NDBG(t->waitfd,d); - NDBG(FD_ISSET(t->waitfd,r),d); - NDBG(FD_ISSET(t->waitfd,w),d); - NDBG(FD_ISSET(t->waitfd,e),d); - ); */ - if (FD_ISSET(t->waitfd, e)) - abort(); /* Close file here instead? */ - interrupt = (t->time != 0.0 && t->time < task_now()); - if (interrupt || /* timeout ? */ - FD_ISSET(t->waitfd, r) || FD_ISSET(t->waitfd, w)) { - FD_CLR(t->waitfd, &iot.read_set); - FD_CLR(t->waitfd, &iot.write_set); - FD_CLR(t->waitfd, &iot.err_set); - t->interrupt = interrupt; - activate(t); - if (iot.maxfd - 1 == t->waitfd) - iot.maxfd = t->waitfd; /* Shrink set of watched files */ - return 1; - } else { - return 0; - } -} - -static int poll_wait(int ms) -{ - /* Wait at most ms milliseconds */ - int wake= 0; - struct timeval select_timeout; - MAY_DBG(FN; NDBG(ms,d)); - if (ms < 0 || ms > 1000) - ms = 1000; /* Wait at most 1000 ms */ - /* convert milliseconds to seconds and microseconds */ - select_timeout.tv_sec = ms / 1000; - select_timeout.tv_usec = (ms % 1000) * 1000; - { - result nfds = {0,0}; - fd_set r = iot.read_set; - fd_set w = iot.write_set; - fd_set e = iot.err_set; - MAY_DBG(FN; poll_debug()); - SET_OS_ERR(0); - while ((nfds.val = select(iot.maxfd, &r, &w, &e, &select_timeout)) == -1 ) { - nfds.funerr = to_errno(GET_OS_ERR); - if (hard_select_err(nfds.funerr)) { - task_dump_err(nfds.funerr); - DBGOUT(STRLIT("select failed"); NDBG(iot.maxfd, d)); - return 0; - } - SET_OS_ERR(0); - r = iot.read_set; - w = iot.write_set; - e = iot.err_set; - } - /* MAY_DBG(FN; poll_debug()); */ - /* Wake up ready tasks */ - /* if (nfds.val > 0) { */ - /* FWD_ITER(&iot.tasks, task_env, */ - /* nfds.val -= check_completion(link_iter, &r, &w, &e); */ - /* if (nfds.val == 0) break); */ - /* } */ - FWD_ITER(&iot.tasks, task_env, - if(check_completion(link_iter, &r, &w, &e)) wake=1); - } - return wake; -} - - -static void add_fd(task_env *t, int fd, int op) -{ - MAY_DBG(FN; PTREXP(t); STREXP(t->name); NDBG(fd, d); NDBG(op, c)); - assert(fd >= 0); - t->waitfd = fd; - if (fd >= iot.maxfd) - iot.maxfd = fd + 1; - FD_CLR(fd, &iot.err_set); - if ('r' == op) - FD_SET(fd, &iot.read_set); - else - FD_SET(fd, &iot.write_set); - task_wait(t, &iot.tasks); - /* MAY_DBG(FN; poll_debug()); */ -} - - -static void unpoll(int i) -{ - FD_CLR(i, &iot.read_set); - FD_CLR(i, &iot.write_set); - FD_CLR(i, &iot.err_set); -} - - -static void wake_all_io() -{ - FWD_ITER(&iot.tasks, task_env, - unpoll(link_iter->waitfd); - activate(link_iter); - ); -} - - -void remove_and_wakeup(int fd) -{ - MAY_DBG(FN; NDBG(fd, d)); - FWD_ITER(&iot.tasks, task_env, - if (fd == link_iter->waitfd) { - unpoll(link_iter->waitfd); - activate(link_iter); - if (iot.maxfd - 1 == link_iter->waitfd) - iot.maxfd = link_iter->waitfd; /* Shrink set of watched files */ - } - ); -} - -#else static void iotasks_init(iotasks *iot) { DBGOUT(FN); @@ -951,7 +778,6 @@ void remove_and_wakeup(int fd) { } } -#endif task_env *stack = NULL; task_env *wait_io(task_env *t, int fd, int op) diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/task.h b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/task.h index 899239297e88..9263146d5154 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/task.h +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/task.h @@ -36,8 +36,6 @@ extern "C" { Nonblocking IO and event handling need to be rewritten for each new OS. */ -/* #define USE_SELECT */ - #if 0 void add_base_event(double when, char const *file, int state); #define ADD_BASE_EVENT { add_base_event(seconds(),__FILE__, __LINE__); add_event(string_arg(__func__));} diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/task_os.h b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/task_os.h index 6a7d3bb2f8c2..ce24f88ed498 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/task_os.h +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/task_os.h @@ -34,11 +34,12 @@ extern "C" { #define SOCK_EAGAIN WSAEINPROGRESS #define SOCK_EWOULDBLOCK WSAEWOULDBLOCK #define SOCK_EINPROGRESS WSAEINPROGRESS +#define SOCK_EALREADY WSAEALREADY +#define SOCK_ECONNREFUSED WSAECONNREFUSED #define SOCK_ERRNO task_errno #define SOCK_OPT_REUSEADDR SO_EXCLUSIVEADDRUSE #define GET_OS_ERR WSAGetLastError() #define SET_OS_ERR(x) WSASetLastError(x) -#define SOCK_ECONNREFUSED WSAECONNREFUSED #define CLOSESOCKET(x) closesocket(x) static inline int hard_connect_err(int err) @@ -63,6 +64,11 @@ static inline int poll(pollfd * fds, nfds_t nfds, int timeout) { return WSAPoll(fds, nfds, timeout); } +static inline int is_socket_error(int x) +{ + return x == SOCKET_ERROR || x < 0; +} + #else #include #include @@ -81,11 +87,12 @@ static inline int poll(pollfd * fds, nfds_t nfds, int timeout) { #define SOCK_EAGAIN EAGAIN #define SOCK_EWOULDBLOCK EWOULDBLOCK #define SOCK_EINPROGRESS EINPROGRESS +#define SOCK_EALREADY EALREADY +#define SOCK_ECONNREFUSED ECONNREFUSED #define SOCK_ERRNO task_errno #define SOCK_OPT_REUSEADDR SO_REUSEADDR #define GET_OS_ERR errno #define SET_OS_ERR(x) errno = (x) -#define SOCK_ECONNREFUSED ECONNREFUSED #define CLOSESOCKET(x) close(x) static inline int hard_connect_err(int err) @@ -100,6 +107,11 @@ static inline int poll(pollfd * fds, nfds_t nfds, int timeout) { typedef struct pollfd pollfd; +static inline int is_socket_error(int x) +{ + return x < 0; +} + #endif extern void remove_and_wakeup(int fd); diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.c b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.c index c5d6622bd212..4c78c604130a 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.c +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.c @@ -258,6 +258,10 @@ #include #endif +#ifndef _WIN32 +#include +#endif + #include "xdr_utils.h" #include "xcom_common.h" @@ -4624,136 +4628,109 @@ static inline result xcom_shut_close_socket(int *sock) return res; } +#define CONNECT_FAIL ret_fd = -1; goto end + static int timed_connect(int fd, sockaddr *sock_addr, socklen_t sock_size) { - struct timeval timeout; - fd_set rfds, wfds, efds; - int res; + int timeout = 10000; + int ret_fd = fd; + int syserr; + int sysret; + struct pollfd fds; #ifdef WITH_LOG_DEBUG char buf[SYS_STRERROR_SIZE]; #endif - timeout.tv_sec= 10; - timeout.tv_usec= 0; - - FD_ZERO(&rfds); - FD_ZERO(&wfds); - FD_ZERO(&efds); - FD_SET(fd, &rfds); - FD_SET(fd, &wfds); - FD_SET(fd, &efds); + fds.fd = fd; + fds.events = POLLOUT; + fds.revents = 0; /* Set non-blocking */ - if(unblock_fd(fd) < 0) + if (unblock_fd(fd) < 0) return -1; /* Trying to connect with timeout */ - res= connect(fd, sock_addr, sock_size); + SET_OS_ERR(0); + sysret = connect(fd, sock_addr, sock_size); + + if (is_socket_error(sysret)) { + syserr = GET_OS_ERR; + /* If the error is SOCK_EWOULDBLOCK or SOCK_EINPROGRESS or SOCK_EALREADY, + * wait. */ + switch (syserr) { + case SOCK_EWOULDBLOCK: + case SOCK_EINPROGRESS: + case SOCK_EALREADY: + break; + default: + G_DEBUG("connect - Error connecting (socket=%d, error=%d).", + fd, GET_OS_ERR); + CONNECT_FAIL; + } + + SET_OS_ERR(0); + while ((sysret = poll(&fds, 1, timeout)) < 0) { + syserr = GET_OS_ERR; + if (syserr != SOCK_EINTR && syserr != SOCK_EINPROGRESS) break; + SET_OS_ERR(0); + } + MAY_DBG(FN; STRLIT("poll - Finished. "); NEXP(sysret, d)); + + if (sysret == 0) { + G_DEBUG( + "Timed out while waiting for connection to be established! " + "Cancelling connection attempt. (socket= %d, error=%d)", + fd, res); + /*G_WARNING("poll - Timeout! Cancelling connection...");*/ + CONNECT_FAIL; + } + + if (is_socket_error(sysret)) { + G_DEBUG("poll - Error while connecting! (socket= %d, error=%d)" + fd, GET_OS_ERR); + CONNECT_FAIL; + } -#if defined (WIN32) || defined (WIN64) - if (res == SOCKET_ERROR) - { - res= WSAGetLastError(); - /* If the error is WSAEWOULDBLOCK, wait. */ - if (res == WSAEWOULDBLOCK) - { - MAY_DBG(FN; STRLIT("connect - error=WSAEWOULDBLOCK. Invoking select..."); ); -#else - if (res < 0) - { - if (errno == EINPROGRESS) { - MAY_DBG(FN; STRLIT("connect - errno=EINPROGRESS. Invoking select..."); ); -#endif - res= select(fd + 1, &rfds, &wfds, &efds, &timeout); - MAY_DBG(FN; STRLIT("select - Finished. "); NEXP(res, d)); - if (res == 0) - { - G_DEBUG("Timed out while waiting for connection to be established! " - "Cancelling connection attempt. (socket= %d, error=%d)", - fd, res); - G_DEBUG("select - Timeout! Cancelling connection..."); - return -1; + int socket_errno = 0; + socklen_t socket_errno_len = sizeof(socket_errno); + + if ((fds.revents & POLLOUT) == 0) { + MAY_DBG(FN; STRLIT("POLLOUT not set - Socket failure!");); + ret_fd = -1; } -#if defined (WIN32) || defined (WIN64) - else if (res == SOCKET_ERROR) - { - G_DEBUG("select - Error while connecting! (socket= %d, error=%d)", fd, - WSAGetLastError()); -#else - else if (res < 0) - { - G_DEBUG("select - Error while connecting! (socket= %d, error=%d, error " - "msg='%s')", - fd, errno, strerror(errno)); -#endif - return -1; + + if (fds.revents & (POLLERR | POLLHUP | POLLNVAL)) { + MAY_DBG(FN; + STRLIT("POLLERR | POLLHUP | POLLNVAL set - Socket failure!");); + ret_fd = -1; } - else - { - if (FD_ISSET(fd, &wfds) || FD_ISSET(fd, &rfds)) - { - MAY_DBG(FN; STRLIT("select - Socket ready!"); ); - } - if (FD_ISSET(fd, &efds)) - { - /* - This is a non-blocking socket, so one needs to - find the issue that triggered the exception. - */ - int socket_errno= 0; - socklen_t socket_errno_len= sizeof(errno); - if (getsockopt(fd, SOL_SOCKET, SO_ERROR, &socket_errno, - &socket_errno_len)) - { - G_DEBUG("Connection to socket %d failed. Unable to sort out the " - "connection error!", - fd); - } - else - { - G_DEBUG("Connection to socket %d failed with error %d - %s.", fd, - socket_errno, strerr_msg(buf, sizeof(buf), socket_errno)); - } - return -1; + if (getsockopt(fd, SOL_SOCKET, SO_ERROR, &socket_errno, + &socket_errno_len) != 0) { + G_DEBUG("getsockopt socket %d failed.", fd); + ret_fd = -1; + } else { + if (socket_errno != 0) { + G_DEBUG("Connection to socket %d failed with error %d - %s.", fd, + socket_errno, strerr_msg(buf, sizeof(buf), socket_errno)); + ret_fd = -1; } } } - else - { -#if defined (WIN32) || defined (WIN64) - G_DEBUG("connect - Error connecting (socket=%d, error=%d).", fd, - WSAGetLastError()); -#else - G_DEBUG("connect - Error connecting (socket=%d, error=%d, error " - "message='%s').", - fd, errno, strerror(errno)); -#endif - return -1; - } - } - else - { - MAY_DBG(FN; STRLIT("connect - Connected to socket without waiting!"); ); } +end: /* Set blocking */ - if(block_fd(fd) < 0) - { -#if defined (WIN32) || defined (WIN64) + SET_OS_ERR(0); + if(block_fd(fd) < 0) { G_DEBUG( "Unable to set socket back to blocking state. (socket=%d, error=%d).", - fd, WSAGetLastError()); -#else - G_DEBUG("Unable to set socket back to blocking state. (socket=%d, " - "error=%d, error message='%s').", - fd, errno, strerror(errno)); -#endif + fd, GET_OS_ERR); return -1; } - return fd; + return ret_fd; } From af2b83bedfd5f4f99ab585b6dd1bd695699ac99d Mon Sep 17 00:00:00 2001 From: Robert Golebiowski Date: Mon, 11 Sep 2017 14:52:40 +0200 Subject: [PATCH 0314/1221] Bug: PS-247 - keyring_vault mtr tests should be skipped if Vault server is unavailable Added check file is_vault_server_up.inc. This script checks if Hashicorp Vault server that is to be used in a test is available. In case it is not the test will be skipped. This test file was included in all keyring_vault's MTR tests. --- .../tests/mtr/install_keyring_vault.test | 1 + .../tests/mtr/is_vault_server_up.inc | 94 +++++++++++++++++++ .../tests/mtr/key_rotation_qa.test | 1 + .../keyring_vault/tests/mtr/keyring_udf.test | 1 + .../tests/mtr/keyring_vault_config.test | 2 + .../tests/mtr/keyring_vault_config_qa.test | 1 + .../tests/mtr/keyring_vault_thd_wait.test | 1 + .../tests/mtr/rpl_key_rotation.test | 1 + .../tests/mtr/table_encrypt_1.test | 3 + .../tests/mtr/table_encrypt_2.test | 1 + .../tests/mtr/table_encrypt_3.test | 1 + .../tests/mtr/table_encrypt_4.test | 1 + .../tests/mtr/table_encrypt_5.test | 1 + .../tests/mtr/table_encrypt_debug.test | 1 + .../tests/mtr/table_encrypt_kill.test | 1 + 15 files changed, 111 insertions(+) create mode 100644 plugin/keyring_vault/tests/mtr/is_vault_server_up.inc diff --git a/plugin/keyring_vault/tests/mtr/install_keyring_vault.test b/plugin/keyring_vault/tests/mtr/install_keyring_vault.test index 699c17ae0353..b3315b1b5229 100644 --- a/plugin/keyring_vault/tests/mtr/install_keyring_vault.test +++ b/plugin/keyring_vault/tests/mtr/install_keyring_vault.test @@ -5,6 +5,7 @@ call mtr.add_suppression("\\[Error\\] Plugin keyring_vault reported: 'keyring_va call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'Could not open file with credentials.'"); --source generate_default_conf_files.inc +--source is_vault_server_up.inc --replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR --error ER_UNKNOWN_SYSTEM_VARIABLE diff --git a/plugin/keyring_vault/tests/mtr/is_vault_server_up.inc b/plugin/keyring_vault/tests/mtr/is_vault_server_up.inc new file mode 100644 index 000000000000..9ac31c20cc72 --- /dev/null +++ b/plugin/keyring_vault/tests/mtr/is_vault_server_up.inc @@ -0,0 +1,94 @@ +# In order to check whether Vault server is accessible we try to get list +# of server backends. This list should be short. + +let KEYRING_CONF_FILE=$KEYRING_CONF_FILE_1; +let SERVER_UUID= query_get_value(SELECT @@SERVER_UUID, @@SERVER_UUID, 1); +if (!$CURL_TIMEOUT) +{ + --let CURL_TIMEOUT=4 +} +--perl + use strict; + use IO::File; + my $curl_timeout= $ENV{CURL_TIMEOUT} or die "Need CURL_TIMEOUT"; + my $keyring_conf_file= $ENV{'KEYRING_CONF_FILE'} or die("KEYRING_CONF_FILE not set\n"); + my $server_uuid= $ENV{'SERVER_UUID'} or die("SERVER_UUID not set\n"); + my $token; + my $vault_url; + my $secret_mount_point; + my $vault_ca; + my $CONF_FILE; + open(CONF_FILE, "$keyring_conf_file") or die("Could not open configuration file.\n"); + while (my $row = ) + { + if ($row =~ m/token[ ]*=[ ]*(.*)/) + { + $token=$1; + } + elsif ($row =~ m/vault_url[ ]*=[ ]*(.*)/) + { + $vault_url=$1; + } + elsif ($row =~ m/secret_mount_point[ ]*= [ ]*(.*)/) + { + $secret_mount_point=$1; + } + elsif ($row =~ m/vault_ca[ ]*= [ ]*(.*)/) + { + $vault_ca=$1; + } + } + close(CONF_FILE); + + my $vardir= $ENV{MYSQLTEST_VARDIR} or die "Need MYSQLTEST_VARDIR"; + + if ($token eq "" || $vault_url eq "" || $secret_mount_point eq "") + { + die("Could not read vault credentials from configuration file.\n"); + } + + my $vault_ca_cert_opt= ""; + if ($vault_ca) + { + $vault_ca_cert_opt= "--cacert $vault_ca"; + } + + system(qq#curl -H "X-Vault-Token: $token" --max-time $curl_timeout $vault_ca_cert_opt $vault_url/v1/sys/mounts > $vardir/tmp/curl_result#); + + my $curl_conn_successful = 1; + my $curl_response = 0; + + if (!-s "$vardir/tmp/curl_result") + { + # result file is empty, thus connection could not be established + $curl_conn_successful = 0; + } + else + { + # Vault server has returned errors + open my $file, '<', "$vardir/tmp/curl_result"; + $curl_response = <$file>; + if (index($curl_response, "\"errors\":[\"") != -1) + { + $curl_conn_successful = 0; + } + close $file; + } + + my $file_name = "$vardir/tmp/mount_list_result.inc"; + my $F = IO::File->new($file_name, 'w') or die "Could not open '$file_name' for writing"; + if (!$curl_conn_successful) + { + if ($curl_response) + { + print $F "--skip Cannot connect to Hashicorp Vault due to : $curl_response"; + } + else + { + print $F "--skip Seems that Hashicorp Vault testing server is down"; + } + } + $F->close(); +EOF + +--source $MYSQLTEST_VARDIR/tmp/mount_list_result.inc diff --git a/plugin/keyring_vault/tests/mtr/key_rotation_qa.test b/plugin/keyring_vault/tests/mtr/key_rotation_qa.test index 4579ad7a1462..91cd41406426 100644 --- a/plugin/keyring_vault/tests/mtr/key_rotation_qa.test +++ b/plugin/keyring_vault/tests/mtr/key_rotation_qa.test @@ -26,6 +26,7 @@ call mtr.add_suppression("\\[Warning\\] InnoDB: Cannot open table .* from the in call mtr.add_suppression("\\[ERROR\\] InnoDB: Failed to decrpt encryption information, please check key file is not changed!"); --source generate_default_conf_files.inc +--source is_vault_server_up.inc # Create mount points --let MOUNT_POINT_SERVICE_OP=CREATE diff --git a/plugin/keyring_vault/tests/mtr/keyring_udf.test b/plugin/keyring_vault/tests/mtr/keyring_udf.test index e68435125c9f..ed9a9324a47e 100644 --- a/plugin/keyring_vault/tests/mtr/keyring_udf.test +++ b/plugin/keyring_vault/tests/mtr/keyring_udf.test @@ -10,6 +10,7 @@ call mtr.add_suppression("Error while storing key: invalid key_type"); call mtr.add_suppression("Error while storing key: key_id cannot be empty"); --source generate_default_conf_files.inc +--source is_vault_server_up.inc # Create mount points --let MOUNT_POINT_SERVICE_OP=CREATE diff --git a/plugin/keyring_vault/tests/mtr/keyring_vault_config.test b/plugin/keyring_vault/tests/mtr/keyring_vault_config.test index e970c837218a..93e296b46ec6 100644 --- a/plugin/keyring_vault/tests/mtr/keyring_vault_config.test +++ b/plugin/keyring_vault/tests/mtr/keyring_vault_config.test @@ -4,6 +4,8 @@ call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'Could not open file with credentials.'"); --source generate_default_conf_files.inc +--source is_vault_server_up.inc + --replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR $KEYRING_PLUGIN keyring_vault.so $KEYRING_VAULT_PLUGIN_OPT KEYRING_VAULT_PLUGIN_OPT --let $restart_parameters="restart:$KEYRING_VAULT_PLUGIN_LOAD --loose-keyring_vault_config=$KEYRING_CONF_FILE_1 $KEYRING_VAULT_PLUGIN_OPT" --source include/restart_mysqld.inc diff --git a/plugin/keyring_vault/tests/mtr/keyring_vault_config_qa.test b/plugin/keyring_vault/tests/mtr/keyring_vault_config_qa.test index 7968230b905f..b0e662534d38 100644 --- a/plugin/keyring_vault/tests/mtr/keyring_vault_config_qa.test +++ b/plugin/keyring_vault/tests/mtr/keyring_vault_config_qa.test @@ -14,6 +14,7 @@ call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'Could not call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'Error while loading keyring content. The keyring might be malformed'"); --source generate_default_conf_files.inc +--source is_vault_server_up.inc # Create mount points --let MOUNT_POINT_SERVICE_OP=CREATE diff --git a/plugin/keyring_vault/tests/mtr/keyring_vault_thd_wait.test b/plugin/keyring_vault/tests/mtr/keyring_vault_thd_wait.test index f5aaff0faef4..ae28b90735a8 100644 --- a/plugin/keyring_vault/tests/mtr/keyring_vault_thd_wait.test +++ b/plugin/keyring_vault/tests/mtr/keyring_vault_thd_wait.test @@ -4,6 +4,7 @@ --source include/have_debug.inc --source generate_default_conf_files.inc +--source is_vault_server_up.inc # Create mount points --let MOUNT_POINT_SERVICE_OP=CREATE diff --git a/plugin/keyring_vault/tests/mtr/rpl_key_rotation.test b/plugin/keyring_vault/tests/mtr/rpl_key_rotation.test index 41571cec54a8..798975df58c2 100644 --- a/plugin/keyring_vault/tests/mtr/rpl_key_rotation.test +++ b/plugin/keyring_vault/tests/mtr/rpl_key_rotation.test @@ -15,6 +15,7 @@ call mtr.add_suppression("\\[Error\\] InnoDB: Can't generate new master key for call mtr.add_suppression("The slave coordinator and worker threads are stopped"); --source generate_default_conf_files.inc +--source is_vault_server_up.inc # Create mount points --let MOUNT_POINT_SERVICE_OP=CREATE diff --git a/plugin/keyring_vault/tests/mtr/table_encrypt_1.test b/plugin/keyring_vault/tests/mtr/table_encrypt_1.test index 8e2edb66782b..2785f069705d 100644 --- a/plugin/keyring_vault/tests/mtr/table_encrypt_1.test +++ b/plugin/keyring_vault/tests/mtr/table_encrypt_1.test @@ -1,5 +1,8 @@ --source include/have_keyring_vault_plugin.inc + +--let $KEYRING_CONF_FILE_1=$MYSQLTEST_VARDIR/std_data/keyring_vault_confs/keyring_vault1.conf --source generate_default_conf_files.inc +--source is_vault_server_up.inc # Create mount points --let MOUNT_POINT_SERVICE_OP=CREATE diff --git a/plugin/keyring_vault/tests/mtr/table_encrypt_2.test b/plugin/keyring_vault/tests/mtr/table_encrypt_2.test index 29ba9b7b2e97..6df7a8a4b17a 100644 --- a/plugin/keyring_vault/tests/mtr/table_encrypt_2.test +++ b/plugin/keyring_vault/tests/mtr/table_encrypt_2.test @@ -7,6 +7,7 @@ --source include/not_embedded.inc --source generate_default_conf_files.inc +--source is_vault_server_up.inc # Create mount points --let MOUNT_POINT_SERVICE_OP=CREATE diff --git a/plugin/keyring_vault/tests/mtr/table_encrypt_3.test b/plugin/keyring_vault/tests/mtr/table_encrypt_3.test index 6be4b446329b..e95c6bf19ba6 100644 --- a/plugin/keyring_vault/tests/mtr/table_encrypt_3.test +++ b/plugin/keyring_vault/tests/mtr/table_encrypt_3.test @@ -1,5 +1,6 @@ --source include/have_keyring_vault_plugin.inc --source generate_default_conf_files.inc +--source is_vault_server_up.inc # Create mount points --let MOUNT_POINT_SERVICE_OP=CREATE diff --git a/plugin/keyring_vault/tests/mtr/table_encrypt_4.test b/plugin/keyring_vault/tests/mtr/table_encrypt_4.test index 1a8a68bbea61..d8a45114f568 100644 --- a/plugin/keyring_vault/tests/mtr/table_encrypt_4.test +++ b/plugin/keyring_vault/tests/mtr/table_encrypt_4.test @@ -1,5 +1,6 @@ --source include/have_keyring_vault_plugin.inc --source generate_default_conf_files.inc +--source is_vault_server_up.inc # Create mount points --let MOUNT_POINT_SERVICE_OP=CREATE diff --git a/plugin/keyring_vault/tests/mtr/table_encrypt_5.test b/plugin/keyring_vault/tests/mtr/table_encrypt_5.test index dd5bc896fa6b..df3492c8c152 100644 --- a/plugin/keyring_vault/tests/mtr/table_encrypt_5.test +++ b/plugin/keyring_vault/tests/mtr/table_encrypt_5.test @@ -3,6 +3,7 @@ call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'keyring_va --source include/have_keyring_vault_plugin.inc --source generate_default_conf_files.inc +--source is_vault_server_up.inc # Create mount points --let MOUNT_POINT_SERVICE_OP=CREATE diff --git a/plugin/keyring_vault/tests/mtr/table_encrypt_debug.test b/plugin/keyring_vault/tests/mtr/table_encrypt_debug.test index 858e61a91d7e..a9547c678828 100644 --- a/plugin/keyring_vault/tests/mtr/table_encrypt_debug.test +++ b/plugin/keyring_vault/tests/mtr/table_encrypt_debug.test @@ -1,5 +1,6 @@ --source include/have_keyring_vault_plugin.inc --source generate_default_conf_files.inc +--source is_vault_server_up.inc # Create mount points --let MOUNT_POINT_SERVICE_OP=CREATE diff --git a/plugin/keyring_vault/tests/mtr/table_encrypt_kill.test b/plugin/keyring_vault/tests/mtr/table_encrypt_kill.test index db94e721a902..d75511cede5c 100644 --- a/plugin/keyring_vault/tests/mtr/table_encrypt_kill.test +++ b/plugin/keyring_vault/tests/mtr/table_encrypt_kill.test @@ -1,5 +1,6 @@ --source include/have_keyring_vault_plugin.inc --source generate_default_conf_files.inc +--source is_vault_server_up.inc # Create mount points --let MOUNT_POINT_SERVICE_OP=CREATE From c33a7905db84256452a46530f4234eb376420827 Mon Sep 17 00:00:00 2001 From: Anushree Prakash B Date: Wed, 20 Dec 2017 14:19:11 +0530 Subject: [PATCH 0315/1221] Bug#25701141 - INSERT WITH CURSOR_TYPE_READ_ONLY HANGS DESCRIPTION: ============ When trying to execute an INSERT prepared statement with CURSOR_TYPE_READ_ONLY set, libmysqlclient will hang forever. ANALYSIS: ========= When INSERT prepared statement is executed and COM_STMT_EXECUTE is sent to the server, the server just sends an OK packet in this case. This packet is read by the client while reading the query result. However, after this, since CURSOR_TYPE_READ_ONLY is set, the client attempts to read additional packet although there is no packet left to be read. This causes libmysqlclient to hang. When the CURSOR_TYPE_READ_ONLY is set, we can expect an additional data or OK packet mainly for Prepared statements having SELECT queries or when we are expecting a result set as a part of query output. The SELECT query output could be in the form of or . Since the metadata packet will be read while reading the query result and mysql->field_count would be populated by then, we can decide based on that whether to expect more packets or not. FIX: ==== The fix is to make sure that we perform appropriate checks before performing additional packet reads in cases where a read-only cursor is set. This would make sure that the client does not hang waiting for a packet from the server. --- libmysql/libmysql.c | 14 ++++++++-- testclients/mysql_client_test.c | 49 +++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 2 deletions(-) diff --git a/libmysql/libmysql.c b/libmysql/libmysql.c index 51aab623a24d..f309077636f7 100644 --- a/libmysql/libmysql.c +++ b/libmysql/libmysql.c @@ -2155,8 +2155,18 @@ static my_bool execute(MYSQL_STMT *stmt, char *packet, ulong length) { if (mysql->server_status & SERVER_STATUS_CURSOR_EXISTS) mysql->server_status&= ~SERVER_STATUS_CURSOR_EXISTS; - - if (!res && (stmt->flags & CURSOR_TYPE_READ_ONLY)) + /* + After having read the query result, we need to make sure that the client + does not end up into a hang waiting for the server to send a packet. + If the CURSOR_TYPE_READ_ONLY flag is set, we would want to perform the + additional packet read mainly for prepared statements involving SELECT + queries. For SELECT queries, the result format would either be + or . We would have read the metadata + by now and have the field_count populated. The check for field_count will + help determine if we can expect an additional packet from the server. + */ + if (!res && (stmt->flags & CURSOR_TYPE_READ_ONLY) && + mysql->field_count != 0) { /* server can now respond with a cursor - then the respond will be diff --git a/testclients/mysql_client_test.c b/testclients/mysql_client_test.c index af880c626073..2bc178dfa25f 100644 --- a/testclients/mysql_client_test.c +++ b/testclients/mysql_client_test.c @@ -20943,6 +20943,54 @@ static void test_bug19894382() mysql_stmt_close(stmt1); } +static void test_bug25701141() +{ + MYSQL_STMT *stmt; + int rc; + MYSQL_BIND my_bind[2]; + char query[MAX_TEST_QUERY_LENGTH]; + const char* input1= "abcdefgh"; + const char* input2= "mnopqrst"; + const ulong type = CURSOR_TYPE_READ_ONLY; + + myheader("test_bug25701141"); + + rc= mysql_query(mysql, "DROP TABLE IF EXISTS t1"); + myquery(rc); + + rc= mysql_query(mysql, "CREATE TABLE t1( " + "id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY," + "serial CHAR(10) NOT NULL," + "pretty CHAR(20) DEFAULT NULL," + "CONSTRAINT UNIQUE KEY unique_serial (serial) USING HASH," + "INDEX pretty_index USING HASH (pretty)" + ") ENGINE = InnoDB CHARSET = utf8 COLLATE = utf8_bin"); + myquery(rc); + + my_stpcpy(query, "INSERT IGNORE INTO t1 SET `serial`=?, `pretty`=?"); + stmt= mysql_simple_prepare(mysql, query); + check_stmt(stmt); + + memset(my_bind, 0, sizeof(my_bind)); + my_bind[0].buffer_type = MYSQL_TYPE_STRING; + my_bind[0].buffer = (char*)input1; + my_bind[0].buffer_length = (ulong)strlen(input1); + + my_bind[1].buffer_type = MYSQL_TYPE_STRING; + my_bind[1].buffer = (char*)input2; + my_bind[1].buffer_length = (ulong)strlen(input2); + + rc= mysql_stmt_bind_param(stmt, my_bind); + check_execute(stmt, rc); + mysql_stmt_attr_set(stmt, STMT_ATTR_CURSOR_TYPE, &type); + + /* Execute */ + rc= mysql_stmt_execute(stmt); + check_execute(stmt, rc); + mysql_stmt_close(stmt); + + myquery(mysql_query(mysql, "DROP TABLE t1")); +} static struct my_tests_st my_tests[]= { { "disable_query_logs", disable_query_logs }, @@ -21235,6 +21283,7 @@ static struct my_tests_st my_tests[]= { { "test_bug22559575", test_bug22559575 }, { "test_bug19894382", test_bug19894382 }, { "test_bug22028117", test_bug22028117 }, + { "test_bug25701141", test_bug25701141 }, { 0, 0 } }; From e0dd21bb5a278eaffb0c24f28e24480d70b9e5c4 Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Wed, 20 Dec 2017 15:37:14 +0530 Subject: [PATCH 0316/1221] From 02900ac21ee7e2a19ed8acd3b3945efa84ce504e Mon Sep 17 00:00:00 2001 From: Sreeharsha Ramanavarapu Date: Thu, 21 Dec 2017 07:04:58 +0530 Subject: [PATCH 0317/1221] Bug #25949639: DATE FORMAT 'YYYYMMDD' ISN'T RECOGNIZED IN LEFT JOIN Post-push fix: -------------- Record changes to engines/iuds.delete_time and engines/iuds.update_time . --- mysql-test/suite/engines/iuds/r/delete_time.result | 4 ++-- mysql-test/suite/engines/iuds/r/update_time.result | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/mysql-test/suite/engines/iuds/r/delete_time.result b/mysql-test/suite/engines/iuds/r/delete_time.result index 9ece7d7e1499..948d34017c8f 100644 --- a/mysql-test/suite/engines/iuds/r/delete_time.result +++ b/mysql-test/suite/engines/iuds/r/delete_time.result @@ -497,10 +497,10 @@ c2 00:13:13 00:51:51 01:01:01 -02:02:02 03:03:00 08:08:08 100:04:04 +11:11:11 11:11:27 125:00:00 125:05:00 @@ -644,7 +644,7 @@ c1 c2 -838:59:59 -838:59:59 00:04:00 00:04:00 00:54:54 00:54:54 -11:11:11 11:11:11 +02:02:02 02:02:02 12:34:56 NULL SELECT * FROM t2; c1 c2 diff --git a/mysql-test/suite/engines/iuds/r/update_time.result b/mysql-test/suite/engines/iuds/r/update_time.result index a1276f1c30d5..734e3e84e79a 100644 --- a/mysql-test/suite/engines/iuds/r/update_time.result +++ b/mysql-test/suite/engines/iuds/r/update_time.result @@ -796,10 +796,10 @@ c2 00:09:09 00:11:11 00:11:11 +00:11:11 00:13:13 00:51:51 01:01:01 -02:02:02 03:03:00 08:08:08 100:04:04 @@ -1337,7 +1337,7 @@ c1 c2 00:51:51 02:22:22 00:54:54 00:54:54 01:01:01 02:22:22 -02:02:02 02:22:22 +02:02:02 02:02:02 03:03:00 02:22:22 08:08:08 00:00:00 100:04:04 100:04:04 @@ -1379,7 +1379,7 @@ c1 c2 00:51:51 00:51:51 00:54:54 00:11:11 01:01:01 01:01:01 -02:02:02 02:02:02 +02:02:02 00:11:11 03:03:00 03:03:00 08:08:08 08:08:08 11:11:11 00:11:11 From 7cf10132cb83a04f6e0f59a7266fd54c03e2ade2 Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Thu, 21 Dec 2017 10:11:49 +0530 Subject: [PATCH 0318/1221] From 3a83f265513513ab703b3461b4075ca71c53d606 Mon Sep 17 00:00:00 2001 From: Evgeniy Patlan Date: Thu, 21 Dec 2017 11:50:32 +0200 Subject: [PATCH 0319/1221] [BLD-911] No automatcal support of jemalloc --- scripts/ps_mysqld_helper.sh | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/scripts/ps_mysqld_helper.sh b/scripts/ps_mysqld_helper.sh index 13143201b295..d3f10e9b7991 100755 --- a/scripts/ps_mysqld_helper.sh +++ b/scripts/ps_mysqld_helper.sh @@ -1,11 +1,11 @@ #!/bin/bash +if [ -f /etc/redhat-release ] +then + SYSTEMD_ENV_FILE="/etc/sysconfig/mysql" +else + SYSTEMD_ENV_FILE="/etc/default/mysql" +fi enable_thp() { - if [ -f /etc/redhat-release ] - then - SYSTEMD_ENV_FILE="/etc/sysconfig/mysql" - else - SYSTEMD_ENV_FILE="/etc/default/mysql" - fi if [ -f /sys/kernel/mm/transparent_hugepage/enabled ]; then CONTENT_TRANSHP=$(> ${SYSTEMD_ENV_FILE} + fi + fi +} + #main enable_thp +enable_jemalloc From 41d1c5095b5d0d32af94c9eb6f15b1693b73771c Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Thu, 21 Dec 2017 17:29:59 +0530 Subject: [PATCH 0320/1221] From 3f37697c8f79c665ad9b680357db16440fbbce8c Mon Sep 17 00:00:00 2001 From: Evgeniy Patlan Date: Thu, 21 Dec 2017 14:39:25 +0200 Subject: [PATCH 0321/1221] [LP-1738742] error while stoping mysql using mysqld_safe --- scripts/mysqld_safe.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/mysqld_safe.sh b/scripts/mysqld_safe.sh index 2b48412d94aa..57834284ea53 100644 --- a/scripts/mysqld_safe.sh +++ b/scripts/mysqld_safe.sh @@ -215,6 +215,7 @@ eval_log_error () { #echo "Running mysqld: [$cmd]" eval "$cmd" + ret=$? if [ $ret -gt 0 ] && [ $ret -lt 128 ]; then exit $ret fi From 2b1fe48504cb91eb6d18ec2188a5cc1737f3003e Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Thu, 21 Dec 2017 18:12:26 +0530 Subject: [PATCH 0322/1221] From f934744985f8a83c9f87cf0d1627c48ce66ed6e7 Mon Sep 17 00:00:00 2001 From: Parveez Baig Date: Tue, 26 Dec 2017 10:50:44 +0530 Subject: [PATCH 0323/1221] Bug#27015112: RPL.RPL_MTS_LOGICAL_CLOCK_APPLIER_ERROR_CONCURRENT_STOP_SLAVE UNSTABLE ON PB2 The test was failing with Timeout in include/wait_for_slave_param.inc. The test syncs the IO thread and then checks that the Slave_SQL_Running_State is 'waiting for dependent transaction to commit'. But before the test checks it on slow platforms the lock_wait will timeout as a result SQL_THREAD will be stopped hence status will not match. Fix. Stopped the SQL_THREAD before doing the transaction which will cause SQL status on slave as 'waiting for dependent transaction to commit'.Started the SQL_THREAD just before checking for Slave_SQL_Running_State. --- ...mts_logical_clock_applier_error_concurrent_stop_slave.result | 2 ++ ...l_mts_logical_clock_applier_error_concurrent_stop_slave.test | 2 ++ 2 files changed, 4 insertions(+) diff --git a/mysql-test/suite/rpl/r/rpl_mts_logical_clock_applier_error_concurrent_stop_slave.result b/mysql-test/suite/rpl/r/rpl_mts_logical_clock_applier_error_concurrent_stop_slave.result index dfa10f2fe6bd..19a601aef619 100644 --- a/mysql-test/suite/rpl/r/rpl_mts_logical_clock_applier_error_concurrent_stop_slave.result +++ b/mysql-test/suite/rpl/r/rpl_mts_logical_clock_applier_error_concurrent_stop_slave.result @@ -27,6 +27,7 @@ INSERT INTO child VALUES (2,1); INSERT INTO child VALUES (3,1); INSERT INTO child VALUES (4,1); include/sync_slave_sql_with_master.inc +include/stop_slave_sql.inc [connection slave1] BEGIN; DELETE FROM child WHERE a=3; @@ -34,6 +35,7 @@ DELETE FROM child WHERE a=3; DELETE FROM child WHERE a=3; DELETE FROM parent WHERE a=3; include/sync_slave_io_with_master.inc +include/start_slave_sql.inc include/wait_for_slave_param.inc [Slave_SQL_Running_State] include/stop_slave_sql.inc [connection slave1] diff --git a/mysql-test/suite/rpl/t/rpl_mts_logical_clock_applier_error_concurrent_stop_slave.test b/mysql-test/suite/rpl/t/rpl_mts_logical_clock_applier_error_concurrent_stop_slave.test index 45ea922f4bf8..132442632379 100644 --- a/mysql-test/suite/rpl/t/rpl_mts_logical_clock_applier_error_concurrent_stop_slave.test +++ b/mysql-test/suite/rpl/t/rpl_mts_logical_clock_applier_error_concurrent_stop_slave.test @@ -47,6 +47,7 @@ INSERT INTO child VALUES (3,1); INSERT INTO child VALUES (4,1); --source include/sync_slave_sql_with_master.inc +--source include/stop_slave_sql.inc # # Block MTS worker and put coordinator to wait on logical clock @@ -63,6 +64,7 @@ DELETE FROM parent WHERE a=3; # Wait until coordinator is waiting to schedule transactions # --source include/sync_slave_io_with_master.inc +--source include/start_slave_sql.inc --let $slave_param= Slave_SQL_Running_State --let $slave_param_value= Waiting for dependent transaction to commit --source include/wait_for_slave_param.inc From bc2aa0e65f7443f58e3b1404734ee592ab8032c9 Mon Sep 17 00:00:00 2001 From: Thirunarayanan Balathandayuthapani Date: Tue, 26 Dec 2017 19:18:38 +0530 Subject: [PATCH 0324/1221] Bug #25076416 VIRTUAL COLUMN IS NOT CONSIDERED WHILE FETCHING THE AUTOINC COLUMN Analysis: While fetching the auto-increment value from the table, InnoDB tries to find the index which has the first column as autoincrement column. While searching the index, InnoDB uses column offset of the table to fetch the auto_increment column but virtual column is not considered while searching the column and it leads to wrong column. Fix: Consider the virtual column of the table while fetching the auto_increment column from the table using column offset. Reviewed-by: Jimmy Yang RB: 16281 --- storage/innobase/include/dict0dict.ic | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/storage/innobase/include/dict0dict.ic b/storage/innobase/include/dict0dict.ic index 927aa84094ab..0087ff6bb949 100644 --- a/storage/innobase/include/dict0dict.ic +++ b/storage/innobase/include/dict0dict.ic @@ -1800,7 +1800,23 @@ dict_table_get_index_on_first_col( { ut_ad(col_index < table->n_cols); - dict_col_t* column = dict_table_get_nth_col(table, col_index); + ulint non_v_col_index = col_index; + dict_col_t* column = NULL; + + /** Decrement the col_index if the virtual column encountered + before the col_index of the table. */ + for (ulint i = 0; i < table->n_v_cols; i++) { + column = reinterpret_cast( + dict_table_get_nth_v_col(table, i)); + + if (column->ind >= col_index) { + break; + } + + non_v_col_index--; + } + + column = dict_table_get_nth_col(table, non_v_col_index); for (dict_index_t* index = dict_table_get_first_index(table); index != NULL; index = dict_table_get_next_index(index)) { From f7eeb2362347779894da3aaef9af0152eba426ff Mon Sep 17 00:00:00 2001 From: Thirunarayanan Balathandayuthapani Date: Wed, 27 Dec 2017 11:56:11 +0530 Subject: [PATCH 0325/1221] Bug #27041445 SERVER ABORTS IF FTS_DOC_ID EXCEEDS FTS_DOC_ID_MAX_STEP Problem: ======= Multiple insert statement in table contains FULLTEXT KEY and a FTS_DOC_ID column aborts the server if the FTS_DOC_ID exceeds FTS_DOC_ID_MAX_STEP. Solution: ======== Remove the exception for first committed insert statement. Reviewed-by: Jimmy Yang RB: 18023 --- .../suite/innodb_fts/r/innodb-fts-basic.result | 12 +++++++++--- mysql-test/suite/innodb_fts/t/innodb-fts-basic.test | 9 ++++++++- storage/innobase/row/row0mysql.cc | 3 +-- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/mysql-test/suite/innodb_fts/r/innodb-fts-basic.result b/mysql-test/suite/innodb_fts/r/innodb-fts-basic.result index 435ef2c8e6ab..ae23b93dc847 100644 --- a/mysql-test/suite/innodb_fts/r/innodb-fts-basic.result +++ b/mysql-test/suite/innodb_fts/r/innodb-fts-basic.result @@ -274,14 +274,20 @@ drop table t1; create table t1 (f1 int not null primary key, f2 varchar(100), FTS_DOC_ID bigint(20) unsigned not null auto_increment, unique key `FTS_DOC_ID_INDEX` (`FTS_DOC_ID`), -fulltext key (f2))engine=innodb, auto_increment=100000; +fulltext key (f2))engine=innodb; set auto_increment_increment = 65535; insert into t1(f1, f2) values(1, "This is the first record"); insert into t1(f1, f2) values(2, "This is the second record"); insert into t1(f1, f2) values(3, "This is the third record"); select FTS_DOC_ID from t1; FTS_DOC_ID +1 +65536 131071 -196606 -262141 drop table t1; +call mtr.add_suppression("\\[ERROR\\] InnoDB: Doc ID 20030101000000 is too big. Its difference with largest used Doc ID 0 cannot exceed or equal to 65535"); +CREATE TABLE t1 (FTS_DOC_ID BIGINT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, +title VARCHAR(200), FULLTEXT(title)) ENGINE=InnoDB; +INSERT INTO t1 VALUES (NULL, NULL), (20030101000000, 20030102000000); +ERROR HY000: Invalid InnoDB FTS Doc ID +DROP TABLE t1; diff --git a/mysql-test/suite/innodb_fts/t/innodb-fts-basic.test b/mysql-test/suite/innodb_fts/t/innodb-fts-basic.test index af1e089098d8..58f36be08a52 100644 --- a/mysql-test/suite/innodb_fts/t/innodb-fts-basic.test +++ b/mysql-test/suite/innodb_fts/t/innodb-fts-basic.test @@ -240,7 +240,7 @@ drop table t1; create table t1 (f1 int not null primary key, f2 varchar(100), FTS_DOC_ID bigint(20) unsigned not null auto_increment, unique key `FTS_DOC_ID_INDEX` (`FTS_DOC_ID`), - fulltext key (f2))engine=innodb, auto_increment=100000; + fulltext key (f2))engine=innodb; set auto_increment_increment = 65535; insert into t1(f1, f2) values(1, "This is the first record"); @@ -248,3 +248,10 @@ insert into t1(f1, f2) values(2, "This is the second record"); insert into t1(f1, f2) values(3, "This is the third record"); select FTS_DOC_ID from t1; drop table t1; + +call mtr.add_suppression("\\[ERROR\\] InnoDB: Doc ID 20030101000000 is too big. Its difference with largest used Doc ID 0 cannot exceed or equal to 65535"); +CREATE TABLE t1 (FTS_DOC_ID BIGINT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, + title VARCHAR(200), FULLTEXT(title)) ENGINE=InnoDB; +--error 182 +INSERT INTO t1 VALUES (NULL, NULL), (20030101000000, 20030102000000); +DROP TABLE t1; diff --git a/storage/innobase/row/row0mysql.cc b/storage/innobase/row/row0mysql.cc index 8d2d9e1c76b7..e346200b6e4c 100644 --- a/storage/innobase/row/row0mysql.cc +++ b/storage/innobase/row/row0mysql.cc @@ -1426,8 +1426,7 @@ row_insert_for_mysql( doc_ids difference should not exceed FTS_DOC_ID_MAX_STEP value. */ - if (next_doc_id > 1 - && doc_id - next_doc_id >= FTS_DOC_ID_MAX_STEP) { + if (doc_id - next_doc_id >= FTS_DOC_ID_MAX_STEP) { fprintf(stderr, "InnoDB: Doc ID " UINT64PF " is too" " big. Its difference with largest" From 4f0b6930320f5151981c7cb49739a15f32615948 Mon Sep 17 00:00:00 2001 From: Hemant Dangi Date: Wed, 27 Dec 2017 16:22:26 +0530 Subject: [PATCH 0326/1221] Revert "BUG#26985561: BACKPORT BUG#26277771 TO 5.7" This reverts commit fce1c96b65005c78b3016e855a3e4790bd5c6449. --- ...pl_transaction_write_set_extraction.result | 64 +-- .../rpl_transaction_write_set_extraction.test | 82 +-- .../r/gr_certifier_garbage_collection.result | 4 +- .../mtr/r/gr_collations_key_conflict.result | 99 ---- .../r/gr_perfschema_group_member_stats.result | 2 +- .../t/gr_certifier_garbage_collection.test | 8 +- .../mtr/t/gr_collations_key_conflict.test | 51 -- .../t/gr_perfschema_group_member_stats.test | 4 +- sql/rpl_transaction_write_set_ctx.cc | 4 +- sql/rpl_write_set_handler.cc | 518 +++++------------- 10 files changed, 148 insertions(+), 688 deletions(-) delete mode 100644 rapid/plugin/group_replication/tests/mtr/r/gr_collations_key_conflict.result delete mode 100644 rapid/plugin/group_replication/tests/mtr/t/gr_collations_key_conflict.test diff --git a/mysql-test/suite/rpl/r/rpl_transaction_write_set_extraction.result b/mysql-test/suite/rpl/r/rpl_transaction_write_set_extraction.result index 6851c313364b..61fa23554888 100644 --- a/mysql-test/suite/rpl/r/rpl_transaction_write_set_extraction.result +++ b/mysql-test/suite/rpl/r/rpl_transaction_write_set_extraction.result @@ -5,7 +5,7 @@ Note #### Storing MySQL user name or password information in the master info rep [connection master] include/assert.inc [The value for transaction_write_set_extraction shoudl be MURMUR32] CREATE TABLE t1 (a INT PRIMARY KEY); -SET @debug_saved= @@GLOBAL.DEBUG; +SET @@GLOBAL.DEBUG= @debug_saved; SET @@GLOBAL.DEBUG= '+d,PKE_assert_single_primary_key_generated_insert'; INSERT INTO t1 VALUES(1); SET @@GLOBAL.DEBUG= @debug_saved; @@ -15,17 +15,6 @@ SET @@GLOBAL.DEBUG= @debug_saved; include/rpl_sync.inc DROP TABLE t1; include/rpl_sync.inc -CREATE TABLE t1 (a BINARY(1) PRIMARY KEY); -SET @@GLOBAL.DEBUG= @debug_saved; -SET @@GLOBAL.DEBUG= '+d,PKE_assert_single_primary_key_generated_insert_collation'; -INSERT INTO t1 VALUES(1); -SET @@GLOBAL.DEBUG= @debug_saved; -SET @@GLOBAL.DEBUG= '+d,PKE_assert_single_primary_key_generated_update_collation'; -UPDATE t1 SET a=3 WHERE a=1; -SET @@GLOBAL.DEBUG= @debug_saved; -include/rpl_sync.inc -DROP TABLE t1; -include/rpl_sync.inc CREATE TABLE t1(a INT, b INT, PRIMARY KEY(a, b)); SET @@GLOBAL.DEBUG= @debug_saved; SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_primary_key_generated_insert'; @@ -37,17 +26,6 @@ SET @@GLOBAL.DEBUG= @debug_saved; include/rpl_sync.inc DROP TABLE t1; include/rpl_sync.inc -CREATE TABLE t1(a BINARY(1), b BINARY(1), PRIMARY KEY(a, b)); -SET @@GLOBAL.DEBUG= @debug_saved; -SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_primary_key_generated_insert_collation'; -INSERT INTO t1 VALUE(1, 2); -SET @@GLOBAL.DEBUG= @debug_saved; -SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_primary_key_generated_update_collation'; -UPDATE t1 SET a=3 WHERE a=1; -SET @@GLOBAL.DEBUG= @debug_saved; -include/rpl_sync.inc -DROP TABLE t1; -include/rpl_sync.inc CREATE TABLE t1 (c1 INT PRIMARY KEY, c2 INT NOT NULL UNIQUE, c3 INT NOT NULL UNIQUE); SET @@GLOBAL.DEBUG= @debug_saved; SET @@GLOBAL.DEBUG= '+d,PKE_assert_single_primary_unique_key_generated_insert'; @@ -58,16 +36,6 @@ UPDATE t1 SET c1=5 WHERE c1=1; include/rpl_sync.inc DROP TABLE t1; include/rpl_sync.inc -CREATE TABLE t1 (c1 BINARY(1) PRIMARY KEY, c2 BINARY(1) NOT NULL UNIQUE, c3 BINARY(1) NOT NULL UNIQUE); -SET @@GLOBAL.DEBUG= @debug_saved; -SET @@GLOBAL.DEBUG= '+d,PKE_assert_single_primary_unique_key_generated_insert_collation'; -INSERT INTO t1 VALUES (1, 2, 3); -SET @@GLOBAL.DEBUG= @debug_saved; -SET @@GLOBAL.DEBUG= '+d,PKE_assert_single_primary_unique_key_generated_update_collation'; -UPDATE t1 SET c1=5 WHERE c1=1; -include/rpl_sync.inc -DROP TABLE t1; -include/rpl_sync.inc CREATE TABLE t1 (a INT, d INT, b INT NOT NULL UNIQUE, c INT NOT NULL UNIQUE, PRIMARY KEY(a, d)); SET @@GLOBAL.DEBUG= @debug_saved; SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_primary_unique_key_generated_insert'; @@ -79,17 +47,6 @@ SET @@GLOBAL.DEBUG= @debug_saved; include/rpl_sync.inc DROP TABLE t1; include/rpl_sync.inc -CREATE TABLE t1 (a BINARY(1), d BINARY(1), b BINARY(1) NOT NULL UNIQUE, c BINARY(1) NOT NULL UNIQUE, PRIMARY KEY(a, d)); -SET @@GLOBAL.DEBUG= @debug_saved; -SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_primary_unique_key_generated_insert_collation'; -INSERT INTO t1 VALUES(1, 2, 3, 4); -SET @@GLOBAL.DEBUG= @debug_saved; -SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_primary_unique_key_generated_update_collation'; -UPDATE t1 SET a=5 WHERE a=1; -SET @@GLOBAL.DEBUG= @debug_saved; -include/rpl_sync.inc -DROP TABLE t1; -include/rpl_sync.inc CREATE TABLE t1 (a INT PRIMARY KEY); CREATE TABLE t2 (b INT PRIMARY KEY); CREATE TABLE t3 (c1 INT, c2 INT NOT NULL UNIQUE, PRIMARY KEY(c1, c2), FOREIGN KEY(c1) REFERENCES t1(a), FOREIGN KEY(c2) REFERENCES t2(b)); @@ -109,23 +66,4 @@ DROP TABLE t3; DROP TABLE t2; DROP TABLE t1; include/rpl_sync.inc -CREATE TABLE t1 (a BINARY(1) PRIMARY KEY); -CREATE TABLE t2 (b BINARY(1) PRIMARY KEY); -CREATE TABLE t3 (c1 BINARY(1), c2 BINARY(1) NOT NULL UNIQUE, PRIMARY KEY(c1, c2), FOREIGN KEY(c1) REFERENCES t1(a), FOREIGN KEY(c2) REFERENCES t2(b)); -INSERT INTO t1 VALUES (1); -INSERT INTO t2 VALUES (5); -SET @@GLOBAL.DEBUG= @debug_saved; -SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_foreign_key_generated_insert_collation'; -INSERT INTO t3 values(1,5); -SET @@GLOBAL.DEBUG= @debug_saved; -INSERT INTO t1 VALUES (3); -include/rpl_sync.inc -SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_foreign_key_generated_update_collation'; -UPDATE t3 SET c1=3 WHERE c1=1; -include/rpl_sync.inc -SET @@GLOBAL.DEBUG= @debug_saved; -DROP TABLE t3; -DROP TABLE t2; -DROP TABLE t1; -include/rpl_sync.inc include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_transaction_write_set_extraction.test b/mysql-test/suite/rpl/t/rpl_transaction_write_set_extraction.test index c8b53b095a79..e1236fe8cc2a 100644 --- a/mysql-test/suite/rpl/t/rpl_transaction_write_set_extraction.test +++ b/mysql-test/suite/rpl/t/rpl_transaction_write_set_extraction.test @@ -17,7 +17,7 @@ --connection master CREATE TABLE t1 (a INT PRIMARY KEY); -SET @debug_saved= @@GLOBAL.DEBUG; +SET @@GLOBAL.DEBUG= @debug_saved; SET @@GLOBAL.DEBUG= '+d,PKE_assert_single_primary_key_generated_insert'; INSERT INTO t1 VALUES(1); SET @@GLOBAL.DEBUG= @debug_saved; @@ -28,23 +28,8 @@ SET @@GLOBAL.DEBUG= @debug_saved; DROP TABLE t1; --source include/rpl_sync.inc -# tests both writeset algorithm (with and without collation) ---connection master -CREATE TABLE t1 (a BINARY(1) PRIMARY KEY); -SET @@GLOBAL.DEBUG= @debug_saved; -SET @@GLOBAL.DEBUG= '+d,PKE_assert_single_primary_key_generated_insert_collation'; -INSERT INTO t1 VALUES(1); -SET @@GLOBAL.DEBUG= @debug_saved; -SET @@GLOBAL.DEBUG= '+d,PKE_assert_single_primary_key_generated_update_collation'; -UPDATE t1 SET a=3 WHERE a=1; -SET @@GLOBAL.DEBUG= @debug_saved; ---source include/rpl_sync.inc -DROP TABLE t1; ---source include/rpl_sync.inc - # Table with multi values pimary key field with insert and update ---connection master CREATE TABLE t1(a INT, b INT, PRIMARY KEY(a, b)); SET @@GLOBAL.DEBUG= @debug_saved; SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_primary_key_generated_insert'; @@ -57,20 +42,6 @@ SET @@GLOBAL.DEBUG= @debug_saved; DROP TABLE t1; --source include/rpl_sync.inc -# tests both writeset algorithm (with and without collation) ---connection master -CREATE TABLE t1(a BINARY(1), b BINARY(1), PRIMARY KEY(a, b)); -SET @@GLOBAL.DEBUG= @debug_saved; -SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_primary_key_generated_insert_collation'; -INSERT INTO t1 VALUE(1, 2); -SET @@GLOBAL.DEBUG= @debug_saved; -SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_primary_key_generated_update_collation'; -UPDATE t1 SET a=3 WHERE a=1; -SET @@GLOBAL.DEBUG= @debug_saved; ---source include/rpl_sync.inc -DROP TABLE t1; ---source include/rpl_sync.inc - # Table with single primary key and multiple unique key with insert and # updates. @@ -86,23 +57,9 @@ UPDATE t1 SET c1=5 WHERE c1=1; DROP TABLE t1; --source include/rpl_sync.inc -# tests both writeset algorithm (with and without collation) ---connection master -CREATE TABLE t1 (c1 BINARY(1) PRIMARY KEY, c2 BINARY(1) NOT NULL UNIQUE, c3 BINARY(1) NOT NULL UNIQUE); -SET @@GLOBAL.DEBUG= @debug_saved; -SET @@GLOBAL.DEBUG= '+d,PKE_assert_single_primary_unique_key_generated_insert_collation'; -INSERT INTO t1 VALUES (1, 2, 3); -SET @@GLOBAL.DEBUG= @debug_saved; -SET @@GLOBAL.DEBUG= '+d,PKE_assert_single_primary_unique_key_generated_update_collation'; -UPDATE t1 SET c1=5 WHERE c1=1; ---source include/rpl_sync.inc -DROP TABLE t1; ---source include/rpl_sync.inc - # Table with multi valued primary key and multiple unique key with insert and # updates. ---connection master CREATE TABLE t1 (a INT, d INT, b INT NOT NULL UNIQUE, c INT NOT NULL UNIQUE, PRIMARY KEY(a, d)); SET @@GLOBAL.DEBUG= @debug_saved; SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_primary_unique_key_generated_insert'; @@ -115,20 +72,6 @@ SET @@GLOBAL.DEBUG= @debug_saved; DROP TABLE t1; --source include/rpl_sync.inc -# tests both writeset algorithm (with and without collation) ---connection master -CREATE TABLE t1 (a BINARY(1), d BINARY(1), b BINARY(1) NOT NULL UNIQUE, c BINARY(1) NOT NULL UNIQUE, PRIMARY KEY(a, d)); -SET @@GLOBAL.DEBUG= @debug_saved; -SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_primary_unique_key_generated_insert_collation'; -INSERT INTO t1 VALUES(1, 2, 3, 4); -SET @@GLOBAL.DEBUG= @debug_saved; -SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_primary_unique_key_generated_update_collation'; -UPDATE t1 SET a=5 WHERE a=1; -SET @@GLOBAL.DEBUG= @debug_saved; ---source include/rpl_sync.inc -DROP TABLE t1; ---source include/rpl_sync.inc - # Table with Primary Key + Unique Key and Foreign Key --connection master @@ -154,27 +97,4 @@ DROP TABLE t2; DROP TABLE t1; --source include/rpl_sync.inc -# tests both writeset algorithm (with and without collation) ---connection master -CREATE TABLE t1 (a BINARY(1) PRIMARY KEY); -CREATE TABLE t2 (b BINARY(1) PRIMARY KEY); -CREATE TABLE t3 (c1 BINARY(1), c2 BINARY(1) NOT NULL UNIQUE, PRIMARY KEY(c1, c2), FOREIGN KEY(c1) REFERENCES t1(a), FOREIGN KEY(c2) REFERENCES t2(b)); - -INSERT INTO t1 VALUES (1); -INSERT INTO t2 VALUES (5); -SET @@GLOBAL.DEBUG= @debug_saved; -SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_foreign_key_generated_insert_collation'; -INSERT INTO t3 values(1,5); -SET @@GLOBAL.DEBUG= @debug_saved; -INSERT INTO t1 VALUES (3); ---source include/rpl_sync.inc -SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_foreign_key_generated_update_collation'; -UPDATE t3 SET c1=3 WHERE c1=1; ---source include/rpl_sync.inc -SET @@GLOBAL.DEBUG= @debug_saved; -DROP TABLE t3; -DROP TABLE t2; -DROP TABLE t1; ---source include/rpl_sync.inc - --source include/rpl_end.inc diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_certifier_garbage_collection.result b/rapid/plugin/group_replication/tests/mtr/r/gr_certifier_garbage_collection.result index e236d631b2c1..8e141900de40 100644 --- a/rapid/plugin/group_replication/tests/mtr/r/gr_certifier_garbage_collection.result +++ b/rapid/plugin/group_replication/tests/mtr/r/gr_certifier_garbage_collection.result @@ -38,9 +38,9 @@ UPDATE t1 SET c1=2 WHERE c1=1; # After garbage collection certification info will contain: # WS: t1.c1=1 -> 8a94f357-aab4-11df-86ab-c80aa9422222:1-4 # WS: t1.c1=2 -> 8a94f357-aab4-11df-86ab-c80aa9422222:1-4 -include/assert.inc ['Count_transactions_rows_validating must be 4'] +include/assert.inc ['Count_transactions_rows_validating must be 2'] include/assert.inc ['Transactions_committed_all_members must be equal to 8a94f357-aab4-11df-86ab-c80aa9422222:1-4'] -include/assert.inc ['Count_transactions_rows_validating must be 4'] +include/assert.inc ['Count_transactions_rows_validating must be 2'] include/assert.inc ['Transactions_committed_all_members must be equal to 8a94f357-aab4-11df-86ab-c80aa9422222:1-4'] ############################################################ diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_collations_key_conflict.result b/rapid/plugin/group_replication/tests/mtr/r/gr_collations_key_conflict.result deleted file mode 100644 index 8f5ab65ad471..000000000000 --- a/rapid/plugin/group_replication/tests/mtr/r/gr_collations_key_conflict.result +++ /dev/null @@ -1,99 +0,0 @@ -include/group_replication.inc -Warnings: -Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. -Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. -[connection server1] - -########################### -# Create a table on server1 -[connection server1] -CREATE TABLE t1 ( -u_str VARCHAR(32) NOT NULL, -value VARCHAR(32) NOT NULL, -PRIMARY KEY (u_str) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; -include/rpl_sync.inc - -###################################################################### -# Execute in concurrency transaction with equivalent keys under latin1 - -############################################################ -# 0. Initial setup and checks. -[connection server_1] -SET SESSION sql_log_bin= 0; -include/gtid_utils.inc -SET SESSION sql_log_bin= 1; -include/gtid_step_reset.inc - -############################################################ -# 1. Set a debug sync before broadcast message to group on -# connection local_server_connection1. -[connection server_1] -SET @debug_save= @@GLOBAL.DEBUG; -SET @@GLOBAL.DEBUG='d,group_replication_before_message_broadcast'; - -##################################################################### -# 2. Commit local_transaction that will be blocked before broadcast. -BEGIN; -INSERT INTO t1 (u_str, value) VALUES ('', "A value");; -COMMIT; - -############################################################ -# 3. Wait until local transaction reaches the -# group_replication_before_message_broadcast debug sync point. -[connection server1] - -############################################################ -# 4. Execute a transaction on remote server, that will reach first -# certification, since transaction on the local server -# is blocked before broadcast. -[connection server2] -BEGIN; -INSERT INTO t1 (u_str, value) VALUES ('', "Another value");; -COMMIT; - -############################################################ -# 5. Signal the waiting thread on local server to resume the -# transaction. -[connection server1] -SET DEBUG_SYNC='now SIGNAL waiting'; -SET @@GLOBAL.DEBUG= @debug_save; - -############################################################ -# 6. Wait for remote transaction to be executed succesfully -on local server. -[connection server2] -include/sync_slave_sql_with_master.inc -############################################################ -# 7. If the test case is conflict scenario, local transaction -# will end up in an error stating that it was aborted, -# since transactions are conflicting and transaction on -# remote server was ordered first. If the test case is -# is positive scenario, no error will be seen here. -[connection server_1] -ERROR HY000: Plugin instructed the server to rollback the current transaction. -[connection server_1] -SET @@GLOBAL.DEBUG=@debug_save; -############################################################ -# 8. Sync everything -include/rpl_sync.inc -############################################################ -# 9. Assert that number of certified transactions are the -# expected ones. -include/assert.inc [The value of Count_Transactions_Checked should be 3 after starting group replication] -include/assert.inc [The value of Count_Conflicts_Detected should be 1 after starting group replication] -############################################################ -# 10. Assert that GTID is increased as expected -include/gtid_step_assert.inc [count=1, only_count=1] -[connection server_1] -SET SESSION sql_log_bin= 0; -include/gtid_utils_end.inc -SET SESSION sql_log_bin= 1; -############################################################ -# 11. Cleanup (restore the connection back to original) -[connection server1] - -########### -# Clean up. -DROP TABLE t1; -include/group_replication_end.inc diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_perfschema_group_member_stats.result b/rapid/plugin/group_replication/tests/mtr/r/gr_perfschema_group_member_stats.result index b90552faeaaa..7f39b0d6f58a 100644 --- a/rapid/plugin/group_replication/tests/mtr/r/gr_perfschema_group_member_stats.result +++ b/rapid/plugin/group_replication/tests/mtr/r/gr_perfschema_group_member_stats.result @@ -53,7 +53,7 @@ server1 include/assert.inc [The value of member_id should be equal to server UUID after starting group replication] include/assert.inc [The value of Count_Transactions_checked should be 6 after starting group replication] include/assert.inc [The value of Count_conflicts_detected should be 0 after starting group replication] -include/assert.inc [The value of Count_Transactions_rows_validating should be 4 after starting group replication] +include/assert.inc [The value of Count_Transactions_rows_validating should be 2 after starting group replication] include/assert.inc [The value of Transactions_committed_all_members should have server 1 GTIDs before server2 start] include/assert.inc [The value of Last_Conflict_free_transaction should be the gtid of the last applied transaction.] SET SESSION sql_log_bin= 0; diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_certifier_garbage_collection.test b/rapid/plugin/group_replication/tests/mtr/t/gr_certifier_garbage_collection.test index af2b1ec49d3c..b29b629663bc 100644 --- a/rapid/plugin/group_replication/tests/mtr/t/gr_certifier_garbage_collection.test +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_certifier_garbage_collection.test @@ -104,8 +104,8 @@ UPDATE t1 SET c1=2 WHERE c1=1; --connection server1 --let $count_transactions_validating= query_get_value(SELECT Count_transactions_rows_validating from performance_schema.replication_group_member_stats, Count_transactions_rows_validating, 1) ---let $assert_text= 'Count_transactions_rows_validating must be 4' ---let $assert_cond= $count_transactions_validating = 4 +--let $assert_text= 'Count_transactions_rows_validating must be 2' +--let $assert_cond= $count_transactions_validating = 2 --source include/assert.inc --let $transactions_committed_all_members= query_get_value(SELECT Transactions_committed_all_members from performance_schema.replication_group_member_stats, Transactions_committed_all_members, 1) @@ -115,8 +115,8 @@ UPDATE t1 SET c1=2 WHERE c1=1; --connection server2 --let $count_transactions_validating= query_get_value(SELECT Count_transactions_rows_validating from performance_schema.replication_group_member_stats, Count_transactions_rows_validating, 1) ---let $assert_text= 'Count_transactions_rows_validating must be 4' ---let $assert_cond= $count_transactions_validating = 4 +--let $assert_text= 'Count_transactions_rows_validating must be 2' +--let $assert_cond= $count_transactions_validating = 2 --source include/assert.inc --let $transactions_committed_all_members= query_get_value(SELECT Transactions_committed_all_members from performance_schema.replication_group_member_stats, Transactions_committed_all_members, 1) diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_collations_key_conflict.test b/rapid/plugin/group_replication/tests/mtr/t/gr_collations_key_conflict.test deleted file mode 100644 index 9be9f37a98d3..000000000000 --- a/rapid/plugin/group_replication/tests/mtr/t/gr_collations_key_conflict.test +++ /dev/null @@ -1,51 +0,0 @@ -############################################################################## -# This test checks that keys that are considered the same under a collation do -# not pass certification as being different keys. -# -# The default mysql-5.7 collation is latin1, so gr_collations_key_conflict -# test and result files, which were using utf8 encoding, also have been -# converted to latin1 collation, to avoid changing the default server collation -# value. -# -# 0. 2 Server with running GR -# 1. Create a table with collation latin1 -# 2. Execute in concurrency transaction with equivalent keys under latin1 -# 3. Cleanup -############################################################################## - ---source include/have_debug_sync.inc ---source ../inc/have_group_replication_plugin.inc ---source ../inc/group_replication.inc - ---echo ---echo ########################### ---echo # Create a table on server1 ---let $rpl_connection_name= server1 ---source include/rpl_connection.inc - -CREATE TABLE t1 ( - u_str VARCHAR(32) NOT NULL, - value VARCHAR(32) NOT NULL, - PRIMARY KEY (u_str) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; - ---source include/rpl_sync.inc - ---echo ---echo ###################################################################### ---echo # Execute in concurrency transaction with equivalent keys under latin1 - ---let $local_server_connection1=server_1 ---let $local_server_connection2=server1 ---let $remote_server_connection=server2 ---let $local_transaction= INSERT INTO t1 (u_str, value) VALUES ('', "A value"); ---let $remote_transaction=INSERT INTO t1 (u_str, value) VALUES ('', "Another value"); ---let $conflict_test=1 ---source ../inc/gr_parallel_local_and_remote_transactions.inc - ---echo ---echo ########### ---echo # Clean up. -DROP TABLE t1; - ---source ../inc/group_replication_end.inc diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_perfschema_group_member_stats.test b/rapid/plugin/group_replication/tests/mtr/t/gr_perfschema_group_member_stats.test index 54ab4499cf1a..1743f9463f39 100644 --- a/rapid/plugin/group_replication/tests/mtr/t/gr_perfschema_group_member_stats.test +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_perfschema_group_member_stats.test @@ -182,8 +182,8 @@ START SLAVE SQL_THREAD FOR CHANNEL "group_replication_applier"; --source include/assert.inc --let $certification_db_size= query_get_value(SELECT Count_Transactions_rows_validating from performance_schema.replication_group_member_stats, Count_Transactions_rows_validating, 1) ---let $assert_text= The value of Count_Transactions_rows_validating should be 4 after starting group replication ---let $assert_cond= "$certification_db_size" = 4 +--let $assert_text= The value of Count_Transactions_rows_validating should be 2 after starting group replication +--let $assert_cond= "$certification_db_size" = 2 --source include/assert.inc --let $stable_set= query_get_value(SELECT Transactions_committed_all_members from performance_schema.replication_group_member_stats, Transactions_committed_all_members, 1) diff --git a/sql/rpl_transaction_write_set_ctx.cc b/sql/rpl_transaction_write_set_ctx.cc index 11f912a6f681..8ad77fc0de29 100644 --- a/sql/rpl_transaction_write_set_ctx.cc +++ b/sql/rpl_transaction_write_set_ctx.cc @@ -187,10 +187,10 @@ void Rpl_transaction_write_set_ctx::rollback_to_savepoint(char* name) } DBUG_EXECUTE_IF("transaction_write_set_savepoint_add_savepoint", - DBUG_ASSERT(write_set.size() == 2);); + DBUG_ASSERT(write_set.size() == 1);); DBUG_EXECUTE_IF("transaction_write_set_size_2", - DBUG_ASSERT(write_set.size() == 4);); + DBUG_ASSERT(write_set.size() == 2);); } DBUG_VOID_RETURN; diff --git a/sql/rpl_write_set_handler.cc b/sql/rpl_write_set_handler.cc index 8a39c5b082f1..134343b7fad3 100644 --- a/sql/rpl_write_set_handler.cc +++ b/sql/rpl_write_set_handler.cc @@ -27,14 +27,11 @@ #include #include -#include #include #define NAME_READ_BUFFER_SIZE 1024 #define HASH_STRING_SEPARATOR "½" -#define COLLATION_CONVERSION_ALGORITHM 1 - const char *transaction_write_set_hashing_algorithms[]= { "OFF", @@ -59,12 +56,12 @@ get_write_set_algorithm_string(unsigned int algorithm) } } -template uint64 calc_hash(ulong algorithm, type T, size_t len) +template uint64 calc_hash(ulong algorithm, type T) { if(algorithm == HASH_ALGORITHM_MURMUR32) - return (murmur3_32((const uchar*)T, len, 0)); + return (murmur3_32((const uchar*)T, strlen(T), 0)); else - return (MY_XXH64((const uchar*)T, len, 0)); + return (MY_XXH64((const uchar*)T, strlen(T), 0)); } /** @@ -161,266 +158,108 @@ void check_foreign_key(TABLE *table, THD *thd, } -void debug_check_for_write_sets(std::vector< std::pair > &key_list_to_hash) +void debug_check_for_write_sets(std::vector &key_list_to_hash) { DBUG_EXECUTE_IF("PKE_assert_single_primary_key_generated_insert", - DBUG_ASSERT(key_list_to_hash.size() == 2); - DBUG_ASSERT(key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + DBUG_ASSERT(key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "1");); - DBUG_EXECUTE_IF("PKE_assert_single_primary_key_generated_insert_collation", - DBUG_ASSERT(key_list_to_hash.size() == 2); - DBUG_ASSERT(key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" - HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1].first == key_list_to_hash[0].first);); - DBUG_EXECUTE_IF("PKE_assert_single_primary_key_generated_update", - DBUG_ASSERT(key_list_to_hash.size() == 2); - DBUG_ASSERT(key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + DBUG_ASSERT(key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1" || - key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "1");); - DBUG_EXECUTE_IF("PKE_assert_single_primary_key_generated_update_collation", - DBUG_ASSERT(key_list_to_hash.size() == 2); - DBUG_ASSERT((key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" - HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1].first == key_list_to_hash[0].first) || - (key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" - HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1].first == key_list_to_hash[0].first));); - DBUG_EXECUTE_IF("PKE_assert_multi_primary_key_generated_insert", - DBUG_ASSERT(key_list_to_hash.size() == 2); - DBUG_ASSERT(key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + DBUG_ASSERT(key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "12" HASH_STRING_SEPARATOR "1");); - DBUG_EXECUTE_IF("PKE_assert_multi_primary_key_generated_insert_collation", - DBUG_ASSERT(key_list_to_hash.size() == 2); - DBUG_ASSERT(key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" - HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "12" - HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1].first == key_list_to_hash[0].first);); - DBUG_EXECUTE_IF("PKE_assert_multi_primary_key_generated_update", - DBUG_ASSERT(key_list_to_hash.size() == 2); - DBUG_ASSERT(key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + DBUG_ASSERT(key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "12" HASH_STRING_SEPARATOR "1" || - key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "12" HASH_STRING_SEPARATOR "1");); - DBUG_EXECUTE_IF("PKE_assert_multi_primary_key_generated_update_collation", - DBUG_ASSERT(key_list_to_hash.size() == 2); - DBUG_ASSERT((key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" - HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "12" - HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1].first == key_list_to_hash[0].first) || - (key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" - HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "12" - HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1].first == key_list_to_hash[0].first));); - DBUG_EXECUTE_IF("PKE_assert_single_primary_unique_key_generated_insert", - DBUG_ASSERT(key_list_to_hash.size() == 6); - DBUG_ASSERT(key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + DBUG_ASSERT(key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1].first == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[1] == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "22" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[2].first == "c3" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[2] == "c3" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1");); - - DBUG_EXECUTE_IF("PKE_assert_single_primary_unique_key_generated_insert_collation", - DBUG_ASSERT(key_list_to_hash.size() == 6); - DBUG_ASSERT(key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" - HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1].first == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" - HASH_STRING_SEPARATOR "22" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[2].first == "c3" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" - HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[3].first == key_list_to_hash[0].first && - key_list_to_hash[4].first == key_list_to_hash[1].first && - key_list_to_hash[5].first == key_list_to_hash[2].first);); - DBUG_EXECUTE_IF("PKE_assert_single_primary_unique_key_generated_update", - DBUG_ASSERT(key_list_to_hash.size() == 6); - DBUG_ASSERT((key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + DBUG_ASSERT((key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1].first == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[1] == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "22" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[2].first == "c3" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[2] == "c3" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1") || - (key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + (key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1].first == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[1] == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "22" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[2].first == "c3" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[2] == "c3" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1"));); - DBUG_EXECUTE_IF("PKE_assert_single_primary_unique_key_generated_update_collation", - DBUG_ASSERT(key_list_to_hash.size() == 6); - DBUG_ASSERT((key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" - HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1].first == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" - HASH_STRING_SEPARATOR "22" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[2].first == "c3" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" - HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[3].first == key_list_to_hash[0].first && - key_list_to_hash[4].first == key_list_to_hash[1].first && - key_list_to_hash[5].first == key_list_to_hash[2].first) || - (key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" - HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1].first == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" - HASH_STRING_SEPARATOR "22" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[2].first == "c3" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" - HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[3].first == key_list_to_hash[0].first && - key_list_to_hash[4].first == key_list_to_hash[1].first && - key_list_to_hash[5].first == key_list_to_hash[2].first));); - DBUG_EXECUTE_IF("PKE_assert_multi_primary_unique_key_generated_insert", - DBUG_ASSERT(key_list_to_hash.size() == 6); - DBUG_ASSERT(key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + DBUG_ASSERT(key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "12" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1].first == "b" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[1] == "b" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[2].first == "c" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[2] == "c" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "24" HASH_STRING_SEPARATOR "1");); - DBUG_EXECUTE_IF("PKE_assert_multi_primary_unique_key_generated_insert_collation", - DBUG_ASSERT(key_list_to_hash.size() == 6); - DBUG_ASSERT(key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" - HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "12" - HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1].first == "b" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" - HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[2].first == "c" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" - HASH_STRING_SEPARATOR "24" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[3].first == key_list_to_hash[0].first && - key_list_to_hash[4].first == key_list_to_hash[1].first && - key_list_to_hash[5].first == key_list_to_hash[2].first);); - DBUG_EXECUTE_IF("PKE_assert_multi_primary_unique_key_generated_update", - DBUG_ASSERT(key_list_to_hash.size() == 6); - DBUG_ASSERT((key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + DBUG_ASSERT((key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "12" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1].first == "b" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[1] == "b" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[2].first == "c" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[2] == "c" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "24" HASH_STRING_SEPARATOR "1") || - (key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + (key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "12" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1].first == "b" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[1] == "b" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[2].first == "c" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[2] == "c" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "24" HASH_STRING_SEPARATOR "1"));); - DBUG_EXECUTE_IF("PKE_assert_multi_primary_unique_key_generated_update_collation", - DBUG_ASSERT(key_list_to_hash.size() == 6); - DBUG_ASSERT((key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" - HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "12" - HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1].first == "b" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" - HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[2].first == "c" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" - HASH_STRING_SEPARATOR "24" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[3].first == key_list_to_hash[0].first && - key_list_to_hash[4].first == key_list_to_hash[1].first && - key_list_to_hash[5].first == key_list_to_hash[2].first) || - (key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" - HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "12" - HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1].first == "b" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" - HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[2].first == "c" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" - HASH_STRING_SEPARATOR "24" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[3].first == key_list_to_hash[0].first && - key_list_to_hash[4].first == key_list_to_hash[1].first && - key_list_to_hash[5].first == key_list_to_hash[2].first));); - DBUG_EXECUTE_IF("PKE_assert_multi_foreign_key_generated_insert", - DBUG_ASSERT(key_list_to_hash.size() == 8); - DBUG_ASSERT(key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" + DBUG_ASSERT(key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "15" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1].first == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" + key_list_to_hash[1] == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[2].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[2] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[3].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t2" + key_list_to_hash[3] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t2" HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "1");); - DBUG_EXECUTE_IF("PKE_assert_multi_foreign_key_generated_insert_collation", - DBUG_ASSERT(key_list_to_hash.size() == 8); - DBUG_ASSERT(key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" - HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "15" - HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1].first == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" - HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[2].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" - HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[3].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t2" - HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[4].first == key_list_to_hash[0].first && - key_list_to_hash[5].first == key_list_to_hash[1].first && - key_list_to_hash[6].first == key_list_to_hash[2].first && - key_list_to_hash[7].first == key_list_to_hash[3].first);); - DBUG_EXECUTE_IF("PKE_assert_multi_foreign_key_generated_update", - DBUG_ASSERT(key_list_to_hash.size() == 8); - DBUG_ASSERT((key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" + DBUG_ASSERT((key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "15" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1].first == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" + key_list_to_hash[1] == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[2].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[2] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[3].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t2" + key_list_to_hash[3] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t2" HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "1") || - (key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" + (key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "15" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1].first == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" + key_list_to_hash[1] == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[2].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[2] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[3].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t2" + key_list_to_hash[3] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t2" HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "1"));); - - DBUG_EXECUTE_IF("PKE_assert_multi_foreign_key_generated_update_collation", - DBUG_ASSERT(key_list_to_hash.size() == 8); - DBUG_ASSERT((key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" - HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "15" - HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1].first == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" - HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[2].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" - HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[3].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t2" - HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[4].first == key_list_to_hash[0].first && - key_list_to_hash[5].first == key_list_to_hash[1].first && - key_list_to_hash[6].first == key_list_to_hash[2].first && - key_list_to_hash[7].first == key_list_to_hash[3].first) || - (key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" - HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "15" - HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1].first == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" - HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[2].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" - HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[3].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t2" - HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[4].first == key_list_to_hash[0].first && - key_list_to_hash[5].first == key_list_to_hash[1].first && - key_list_to_hash[6].first == key_list_to_hash[2].first && - key_list_to_hash[7].first == key_list_to_hash[3].first));); } @@ -428,28 +267,23 @@ void debug_check_for_write_sets(std::vector< std::pair > &ke Function to generate the hash of the string passed to this function. @param[in] pke - the string to be hashed. - @param[in] collation_conversion_algorithm - algorithm used for the conversion - 0 - converted using without - collation support algorithm - 1 - converted using with collation - support conversion algorithm - @param[in] thd - THD object pointing to current thread. */ -static void generate_hash_pke(const std::string &pke, uint collation_conversion_algorithm, THD* thd) +void generate_hash_pke(std::string pke, THD* thd) { DBUG_ENTER("generate_hash_pke"); DBUG_ASSERT(thd->variables.transaction_write_set_extraction != HASH_ALGORITHM_OFF); - - size_t length= (COLLATION_CONVERSION_ALGORITHM == collation_conversion_algorithm) ? - pke.size() : strlen(pke.c_str()); + const char* string_pke=NULL; + string_pke= (char *)pke.c_str(); + DBUG_PRINT("info", ("The hashed value is %s for %u", string_pke, + thd->thread_id())); uint64 hash= calc_hash(thd->variables.transaction_write_set_extraction, - pke.c_str(), length); - thd->get_transaction()->get_transaction_write_set_ctx()->add_write_set(hash); - - DBUG_PRINT("info", ("pke: %s; hash: %llu", pke.c_str(), hash)); + string_pke); + Rpl_transaction_write_set_ctx *transaction_write_set_ctc= + thd->get_transaction()->get_transaction_write_set_ctx(); + transaction_write_set_ctc->add_write_set(hash); DBUG_VOID_RETURN; } @@ -534,181 +368,100 @@ void add_pke(TABLE *table, THD *thd) Finally these value are hashed using the murmur hash function to prevent sending more for certification algorithm. */ - std::vector< std::pair > key_list_to_hash; + std::vector key_list_to_hash; bitmap_set_all(table->read_set); - if(table->key_info && (table->s->primary_key < MAX_KEY)) { - /* - To handle both members having hash values with and without collation - in the same group, we generate and send both versions (with and without - collation) of the hash in the newer versions. This would mean that a row - change will generate 2 instead of 1 writeset, and 4 instead of 2, when PK - are involved. This will mean that a transaction will be certified against - two writesets instead of just one. - - To generate both versions (with and without collation) of the hash, it - first converts using without collation support algorithm (old algorithm), - and then using with collation support conversion algorithm, and adds - generated value to key_list_to_hash vector, for hash generation later. - */ - for (uint collation_conversion_algorithm= 0; - collation_conversion_algorithm <= COLLATION_CONVERSION_ALGORITHM; - collation_conversion_algorithm++) + for (uint key_number=0; key_number < table->s->keys; key_number++) { - for (uint key_number=0; key_number < table->s->keys; key_number++) + // Skip non unique. + if (!((table->key_info[key_number].flags & (HA_NOSAME )) == HA_NOSAME)) + continue; + + std::string unhashed_string; + unhashed_string.append(table->key_info[key_number].name); + unhashed_string.append(HASH_STRING_SEPARATOR); + unhashed_string.append(pke); + uint i= 0; + for (/*empty*/; i < table->key_info[key_number].user_defined_key_parts; i++) { - // Skip non unique. - if (!((table->key_info[key_number].flags & (HA_NOSAME )) == HA_NOSAME)) - continue; + // read the primary key field values in str. + int index= table->key_info[key_number].key_part[i].fieldnr; + table->field[index-1]->val_str(&row_data); + + /* Ignore if the value is NULL. */ + if (table->field[index-1]->is_null()) + break; - std::string unhashed_string; - unhashed_string.append(table->key_info[key_number].name); + char* pk_value= (char*) my_malloc( + key_memory_write_set_extraction, + row_data.length()+1, MYF(0)); + // buffer to be used for my_safe_itoa. + char *buf= (char*) my_malloc( + key_memory_write_set_extraction, + row_data.length(), MYF(0)); + + strmake(pk_value, row_data.c_ptr_safe(), row_data.length()); + const char *lenStr = my_safe_itoa(10, (row_data.length()), + &buf[row_data.length()-1]); + unhashed_string.append(pk_value); unhashed_string.append(HASH_STRING_SEPARATOR); - unhashed_string.append(pke); - uint i= 0; - for (/*empty*/; i < table->key_info[key_number].user_defined_key_parts; i++) - { - // read the primary key field values in str. - int index= table->key_info[key_number].key_part[i].fieldnr; - size_t length= 0; - - /* Ignore if the value is NULL. */ - if (table->field[index-1]->is_null()) - break; - - // convert using collation support conversion algorithm - if (COLLATION_CONVERSION_ALGORITHM == collation_conversion_algorithm) - { - const CHARSET_INFO* cs= table->field[index-1]->charset(); - length= cs->coll->strnxfrmlen(cs, - table->field[index-1]->pack_length()); - } - // convert using without collation support algorithm - else - { - table->field[index-1]->val_str(&row_data); - length= row_data.length(); - } - - char* pk_value= (char*) my_malloc(key_memory_write_set_extraction, - length+1, MYF(MY_ZEROFILL)); - - // buffer to be used for my_safe_itoa. - char *buf= (char*) my_malloc(key_memory_write_set_extraction, - length, MYF(MY_ZEROFILL)); - - const char *lenStr = my_safe_itoa(10, length, &buf[length-1]); - - // convert using collation support conversion algorithm - if (COLLATION_CONVERSION_ALGORITHM == collation_conversion_algorithm) - { - /* - convert to normalized string and store so that it can be - sorted using binary comparison functions like memcmp. - */ - uint32 pack_length= table->field[index-1]->pack_length(); - set_if_smaller(length, pack_length); - table->field[index-1]->make_sort_key((uchar*)pk_value, length); - pk_value[length]= 0; - unhashed_string.append(pk_value, length); - } - // convert using without collation support algorithm - else - { - strmake(pk_value, row_data.c_ptr_safe(), length); - unhashed_string.append(pk_value); - } - - unhashed_string.append(HASH_STRING_SEPARATOR); - unhashed_string.append(lenStr); - my_free(buf); - my_free(pk_value); - } - /* - If any part of the key is NULL, ignore adding it to hash keys. - NULL cannot conflict with any value. - Eg: create table t1(i int primary key not null, j int, k int, - unique key (j, k)); - insert into t1 values (1, 2, NULL); - insert into t1 values (2, 2, NULL); => this is allowed. - */ - if (i == table->key_info[key_number].user_defined_key_parts) - { - key_list_to_hash.push_back(make_pair(unhashed_string, - collation_conversion_algorithm)); - } - else - { - /* This is impossible to happen in case of primary keys */ - DBUG_ASSERT(key_number !=0); - } - unhashed_string.clear(); + unhashed_string.append(lenStr); + my_free(buf); + my_free(pk_value); + } + /* + If any part of the key is NULL, ignore adding it to hash keys. + NULL cannot conflict with any value. + Eg: create table t1(i int primary key not null, j int, k int, + unique key (j, k)); + insert into t1 values (1, 2, NULL); + insert into t1 values (2, 2, NULL); => this is allowed. + */ + if (i == table->key_info[key_number].user_defined_key_parts) + { + key_list_to_hash.push_back(unhashed_string); + } + else + { + /* This is impossible to happen in case of primary keys */ + DBUG_ASSERT(key_number !=0); } + unhashed_string.clear(); + } - // This part takes care of the previously fetched foreign key values of - // the referenced table adds it to the write set. - for(uint i=0; i < table->s->fields; i++) + // This part takes care of the previously fetched foreign key values of + // the referenced table adds it to the write set. + for(uint i=0; i < table->s->fields; i++) + { + std::string referenced_FQTN= + foreign_key_map[table->s->field[i]->field_name]; + if (referenced_FQTN.size() > 0) { - std::string referenced_FQTN= - foreign_key_map[table->s->field[i]->field_name]; - if (referenced_FQTN.size() > 0) - { - size_t length= 0; - - /* Ignore if the value is NULL. */ - if (table->field[i]->is_null()) - break; - - // convert using collation support conversion algorithm - if (COLLATION_CONVERSION_ALGORITHM == collation_conversion_algorithm) - { - const CHARSET_INFO* cs= table->field[i]->charset(); - length= cs->coll->strnxfrmlen(cs, - table->field[i]->pack_length()); - } - // convert using without collation support algorithm - else - { - table->field[i]->val_str(&row_data); - length= row_data.length(); - } - - char* pk_value= (char*) my_malloc(key_memory_write_set_extraction, - length+1, MYF(MY_ZEROFILL)); - - // buffer to be used for my_safe_itoa. - char *buf= (char*) my_malloc(key_memory_write_set_extraction, - length, MYF(MY_ZEROFILL)); - - const char *lenStr = my_safe_itoa(10, length, &buf[length-1]); - - // convert using collation support conversion algorithm - if (COLLATION_CONVERSION_ALGORITHM == collation_conversion_algorithm) - { - /* - convert to normalized string and store so that it can be - sorted using binary comparison functions like memcmp. - */ - table->field[i]->make_sort_key((uchar*)pk_value, length); - pk_value[length]= 0; - referenced_FQTN.append(pk_value, length); - } - // convert using without collation support algorithm - else - { - strmake(pk_value, row_data.c_ptr_safe(), length); - referenced_FQTN.append(pk_value); - } - - referenced_FQTN.append(HASH_STRING_SEPARATOR); - referenced_FQTN.append(lenStr); - - my_free(buf); - my_free(pk_value); - key_list_to_hash.push_back(make_pair(referenced_FQTN, - collation_conversion_algorithm)); - } + table->field[i]->val_str(&row_data); + + /* Ignore if the value is NULL. */ + if (table->field[i]->is_null()) + continue; + + char* pk_value= (char*) my_malloc( + key_memory_write_set_extraction, + row_data.length()+1, MYF(0)); + // buffer to be used for my_safe_itoa. + char *buf= (char*) my_malloc( + key_memory_write_set_extraction, + row_data.length(), MYF(0)); + + strmake(pk_value, row_data.c_ptr_safe(), row_data.length()); + const char *lenStr = my_safe_itoa(10, (row_data.length()), + &buf[row_data.length()-1]); + referenced_FQTN.append(pk_value); + referenced_FQTN.append(HASH_STRING_SEPARATOR); + referenced_FQTN.append(lenStr); + + my_free(buf); + my_free(pk_value); + key_list_to_hash.push_back(referenced_FQTN); } } @@ -716,11 +469,10 @@ void add_pke(TABLE *table, THD *thd) while(key_list_to_hash.size()) { - std::pair prepared_string_pair= key_list_to_hash.back(); + std::string prepared_string= key_list_to_hash.back(); key_list_to_hash.pop_back(); - generate_hash_pke(prepared_string_pair.first, prepared_string_pair.second, thd); + generate_hash_pke(prepared_string, thd); } - } DBUG_VOID_RETURN; } From 3e9d418716fdb0fca21c193a18f9eee45840c9f9 Mon Sep 17 00:00:00 2001 From: Dima Date: Wed, 27 Dec 2017 02:26:27 +0300 Subject: [PATCH 0327/1221] Fixed DOC-661 by documenting the rocksdb_max_open_files magic values --- doc/source/myrocks/variables.rst | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/doc/source/myrocks/variables.rst b/doc/source/myrocks/variables.rst index 6825d08adf1f..319d154f3b7b 100644 --- a/doc/source/myrocks/variables.rst +++ b/doc/source/myrocks/variables.rst @@ -1584,10 +1584,18 @@ only one manifest file is used. :default: ``1000`` Specifies the maximum number of file handles opened by MyRocks. -Default value is also the maximum, making it practically unlimited: -all opened files remain open. If :variable:`rocksdb_max_open_files` -value is greater than ``open_files_limit``, it will be reset -to ``open_files_limit``. +Values in the range between ``0`` and ``open_files_limit`` +are taken as they are. If :variable:`rocksdb_max_open_files` value is +greater than ``open_files_limit``, it will be reset to 1/2 of +``open_files_limit``, and a warning will be emitted to the ``mysqld`` +error log. A value of ``-2`` denotes auto tuning: just sets +:variable:`rocksdb_max_open_files` value to 1/2 of ``open_files_limit``. +Finally, ``-1`` means no limit, i.e. an infinite number of file handles. + +.. warning:: + + Setting :variable:`rocksdb_max_open_files` to ``-1`` is dangerous, + as server may quickly run out of file handles in this case. .. variable:: rocksdb_max_row_locks From f5ed5d58ffae0ff4c668830376faa411987915a1 Mon Sep 17 00:00:00 2001 From: Hemant Dangi Date: Wed, 27 Dec 2017 16:22:26 +0530 Subject: [PATCH 0328/1221] Revert "BUG#26985561: BACKPORT BUG#26277771 TO 5.7" This reverts commit fce1c96b65005c78b3016e855a3e4790bd5c6449. (cherry picked from commit a38611468f4b1c6fcb7ceace231bb097d89f0226) --- ...pl_transaction_write_set_extraction.result | 64 +-- .../rpl_transaction_write_set_extraction.test | 82 +-- .../r/gr_certifier_garbage_collection.result | 4 +- .../mtr/r/gr_collations_key_conflict.result | 99 ---- .../r/gr_perfschema_group_member_stats.result | 2 +- .../t/gr_certifier_garbage_collection.test | 8 +- .../mtr/t/gr_collations_key_conflict.test | 51 -- .../t/gr_perfschema_group_member_stats.test | 4 +- sql/rpl_transaction_write_set_ctx.cc | 4 +- sql/rpl_write_set_handler.cc | 518 +++++------------- 10 files changed, 148 insertions(+), 688 deletions(-) delete mode 100644 rapid/plugin/group_replication/tests/mtr/r/gr_collations_key_conflict.result delete mode 100644 rapid/plugin/group_replication/tests/mtr/t/gr_collations_key_conflict.test diff --git a/mysql-test/suite/rpl/r/rpl_transaction_write_set_extraction.result b/mysql-test/suite/rpl/r/rpl_transaction_write_set_extraction.result index 6851c313364b..61fa23554888 100644 --- a/mysql-test/suite/rpl/r/rpl_transaction_write_set_extraction.result +++ b/mysql-test/suite/rpl/r/rpl_transaction_write_set_extraction.result @@ -5,7 +5,7 @@ Note #### Storing MySQL user name or password information in the master info rep [connection master] include/assert.inc [The value for transaction_write_set_extraction shoudl be MURMUR32] CREATE TABLE t1 (a INT PRIMARY KEY); -SET @debug_saved= @@GLOBAL.DEBUG; +SET @@GLOBAL.DEBUG= @debug_saved; SET @@GLOBAL.DEBUG= '+d,PKE_assert_single_primary_key_generated_insert'; INSERT INTO t1 VALUES(1); SET @@GLOBAL.DEBUG= @debug_saved; @@ -15,17 +15,6 @@ SET @@GLOBAL.DEBUG= @debug_saved; include/rpl_sync.inc DROP TABLE t1; include/rpl_sync.inc -CREATE TABLE t1 (a BINARY(1) PRIMARY KEY); -SET @@GLOBAL.DEBUG= @debug_saved; -SET @@GLOBAL.DEBUG= '+d,PKE_assert_single_primary_key_generated_insert_collation'; -INSERT INTO t1 VALUES(1); -SET @@GLOBAL.DEBUG= @debug_saved; -SET @@GLOBAL.DEBUG= '+d,PKE_assert_single_primary_key_generated_update_collation'; -UPDATE t1 SET a=3 WHERE a=1; -SET @@GLOBAL.DEBUG= @debug_saved; -include/rpl_sync.inc -DROP TABLE t1; -include/rpl_sync.inc CREATE TABLE t1(a INT, b INT, PRIMARY KEY(a, b)); SET @@GLOBAL.DEBUG= @debug_saved; SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_primary_key_generated_insert'; @@ -37,17 +26,6 @@ SET @@GLOBAL.DEBUG= @debug_saved; include/rpl_sync.inc DROP TABLE t1; include/rpl_sync.inc -CREATE TABLE t1(a BINARY(1), b BINARY(1), PRIMARY KEY(a, b)); -SET @@GLOBAL.DEBUG= @debug_saved; -SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_primary_key_generated_insert_collation'; -INSERT INTO t1 VALUE(1, 2); -SET @@GLOBAL.DEBUG= @debug_saved; -SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_primary_key_generated_update_collation'; -UPDATE t1 SET a=3 WHERE a=1; -SET @@GLOBAL.DEBUG= @debug_saved; -include/rpl_sync.inc -DROP TABLE t1; -include/rpl_sync.inc CREATE TABLE t1 (c1 INT PRIMARY KEY, c2 INT NOT NULL UNIQUE, c3 INT NOT NULL UNIQUE); SET @@GLOBAL.DEBUG= @debug_saved; SET @@GLOBAL.DEBUG= '+d,PKE_assert_single_primary_unique_key_generated_insert'; @@ -58,16 +36,6 @@ UPDATE t1 SET c1=5 WHERE c1=1; include/rpl_sync.inc DROP TABLE t1; include/rpl_sync.inc -CREATE TABLE t1 (c1 BINARY(1) PRIMARY KEY, c2 BINARY(1) NOT NULL UNIQUE, c3 BINARY(1) NOT NULL UNIQUE); -SET @@GLOBAL.DEBUG= @debug_saved; -SET @@GLOBAL.DEBUG= '+d,PKE_assert_single_primary_unique_key_generated_insert_collation'; -INSERT INTO t1 VALUES (1, 2, 3); -SET @@GLOBAL.DEBUG= @debug_saved; -SET @@GLOBAL.DEBUG= '+d,PKE_assert_single_primary_unique_key_generated_update_collation'; -UPDATE t1 SET c1=5 WHERE c1=1; -include/rpl_sync.inc -DROP TABLE t1; -include/rpl_sync.inc CREATE TABLE t1 (a INT, d INT, b INT NOT NULL UNIQUE, c INT NOT NULL UNIQUE, PRIMARY KEY(a, d)); SET @@GLOBAL.DEBUG= @debug_saved; SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_primary_unique_key_generated_insert'; @@ -79,17 +47,6 @@ SET @@GLOBAL.DEBUG= @debug_saved; include/rpl_sync.inc DROP TABLE t1; include/rpl_sync.inc -CREATE TABLE t1 (a BINARY(1), d BINARY(1), b BINARY(1) NOT NULL UNIQUE, c BINARY(1) NOT NULL UNIQUE, PRIMARY KEY(a, d)); -SET @@GLOBAL.DEBUG= @debug_saved; -SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_primary_unique_key_generated_insert_collation'; -INSERT INTO t1 VALUES(1, 2, 3, 4); -SET @@GLOBAL.DEBUG= @debug_saved; -SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_primary_unique_key_generated_update_collation'; -UPDATE t1 SET a=5 WHERE a=1; -SET @@GLOBAL.DEBUG= @debug_saved; -include/rpl_sync.inc -DROP TABLE t1; -include/rpl_sync.inc CREATE TABLE t1 (a INT PRIMARY KEY); CREATE TABLE t2 (b INT PRIMARY KEY); CREATE TABLE t3 (c1 INT, c2 INT NOT NULL UNIQUE, PRIMARY KEY(c1, c2), FOREIGN KEY(c1) REFERENCES t1(a), FOREIGN KEY(c2) REFERENCES t2(b)); @@ -109,23 +66,4 @@ DROP TABLE t3; DROP TABLE t2; DROP TABLE t1; include/rpl_sync.inc -CREATE TABLE t1 (a BINARY(1) PRIMARY KEY); -CREATE TABLE t2 (b BINARY(1) PRIMARY KEY); -CREATE TABLE t3 (c1 BINARY(1), c2 BINARY(1) NOT NULL UNIQUE, PRIMARY KEY(c1, c2), FOREIGN KEY(c1) REFERENCES t1(a), FOREIGN KEY(c2) REFERENCES t2(b)); -INSERT INTO t1 VALUES (1); -INSERT INTO t2 VALUES (5); -SET @@GLOBAL.DEBUG= @debug_saved; -SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_foreign_key_generated_insert_collation'; -INSERT INTO t3 values(1,5); -SET @@GLOBAL.DEBUG= @debug_saved; -INSERT INTO t1 VALUES (3); -include/rpl_sync.inc -SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_foreign_key_generated_update_collation'; -UPDATE t3 SET c1=3 WHERE c1=1; -include/rpl_sync.inc -SET @@GLOBAL.DEBUG= @debug_saved; -DROP TABLE t3; -DROP TABLE t2; -DROP TABLE t1; -include/rpl_sync.inc include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_transaction_write_set_extraction.test b/mysql-test/suite/rpl/t/rpl_transaction_write_set_extraction.test index c8b53b095a79..e1236fe8cc2a 100644 --- a/mysql-test/suite/rpl/t/rpl_transaction_write_set_extraction.test +++ b/mysql-test/suite/rpl/t/rpl_transaction_write_set_extraction.test @@ -17,7 +17,7 @@ --connection master CREATE TABLE t1 (a INT PRIMARY KEY); -SET @debug_saved= @@GLOBAL.DEBUG; +SET @@GLOBAL.DEBUG= @debug_saved; SET @@GLOBAL.DEBUG= '+d,PKE_assert_single_primary_key_generated_insert'; INSERT INTO t1 VALUES(1); SET @@GLOBAL.DEBUG= @debug_saved; @@ -28,23 +28,8 @@ SET @@GLOBAL.DEBUG= @debug_saved; DROP TABLE t1; --source include/rpl_sync.inc -# tests both writeset algorithm (with and without collation) ---connection master -CREATE TABLE t1 (a BINARY(1) PRIMARY KEY); -SET @@GLOBAL.DEBUG= @debug_saved; -SET @@GLOBAL.DEBUG= '+d,PKE_assert_single_primary_key_generated_insert_collation'; -INSERT INTO t1 VALUES(1); -SET @@GLOBAL.DEBUG= @debug_saved; -SET @@GLOBAL.DEBUG= '+d,PKE_assert_single_primary_key_generated_update_collation'; -UPDATE t1 SET a=3 WHERE a=1; -SET @@GLOBAL.DEBUG= @debug_saved; ---source include/rpl_sync.inc -DROP TABLE t1; ---source include/rpl_sync.inc - # Table with multi values pimary key field with insert and update ---connection master CREATE TABLE t1(a INT, b INT, PRIMARY KEY(a, b)); SET @@GLOBAL.DEBUG= @debug_saved; SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_primary_key_generated_insert'; @@ -57,20 +42,6 @@ SET @@GLOBAL.DEBUG= @debug_saved; DROP TABLE t1; --source include/rpl_sync.inc -# tests both writeset algorithm (with and without collation) ---connection master -CREATE TABLE t1(a BINARY(1), b BINARY(1), PRIMARY KEY(a, b)); -SET @@GLOBAL.DEBUG= @debug_saved; -SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_primary_key_generated_insert_collation'; -INSERT INTO t1 VALUE(1, 2); -SET @@GLOBAL.DEBUG= @debug_saved; -SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_primary_key_generated_update_collation'; -UPDATE t1 SET a=3 WHERE a=1; -SET @@GLOBAL.DEBUG= @debug_saved; ---source include/rpl_sync.inc -DROP TABLE t1; ---source include/rpl_sync.inc - # Table with single primary key and multiple unique key with insert and # updates. @@ -86,23 +57,9 @@ UPDATE t1 SET c1=5 WHERE c1=1; DROP TABLE t1; --source include/rpl_sync.inc -# tests both writeset algorithm (with and without collation) ---connection master -CREATE TABLE t1 (c1 BINARY(1) PRIMARY KEY, c2 BINARY(1) NOT NULL UNIQUE, c3 BINARY(1) NOT NULL UNIQUE); -SET @@GLOBAL.DEBUG= @debug_saved; -SET @@GLOBAL.DEBUG= '+d,PKE_assert_single_primary_unique_key_generated_insert_collation'; -INSERT INTO t1 VALUES (1, 2, 3); -SET @@GLOBAL.DEBUG= @debug_saved; -SET @@GLOBAL.DEBUG= '+d,PKE_assert_single_primary_unique_key_generated_update_collation'; -UPDATE t1 SET c1=5 WHERE c1=1; ---source include/rpl_sync.inc -DROP TABLE t1; ---source include/rpl_sync.inc - # Table with multi valued primary key and multiple unique key with insert and # updates. ---connection master CREATE TABLE t1 (a INT, d INT, b INT NOT NULL UNIQUE, c INT NOT NULL UNIQUE, PRIMARY KEY(a, d)); SET @@GLOBAL.DEBUG= @debug_saved; SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_primary_unique_key_generated_insert'; @@ -115,20 +72,6 @@ SET @@GLOBAL.DEBUG= @debug_saved; DROP TABLE t1; --source include/rpl_sync.inc -# tests both writeset algorithm (with and without collation) ---connection master -CREATE TABLE t1 (a BINARY(1), d BINARY(1), b BINARY(1) NOT NULL UNIQUE, c BINARY(1) NOT NULL UNIQUE, PRIMARY KEY(a, d)); -SET @@GLOBAL.DEBUG= @debug_saved; -SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_primary_unique_key_generated_insert_collation'; -INSERT INTO t1 VALUES(1, 2, 3, 4); -SET @@GLOBAL.DEBUG= @debug_saved; -SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_primary_unique_key_generated_update_collation'; -UPDATE t1 SET a=5 WHERE a=1; -SET @@GLOBAL.DEBUG= @debug_saved; ---source include/rpl_sync.inc -DROP TABLE t1; ---source include/rpl_sync.inc - # Table with Primary Key + Unique Key and Foreign Key --connection master @@ -154,27 +97,4 @@ DROP TABLE t2; DROP TABLE t1; --source include/rpl_sync.inc -# tests both writeset algorithm (with and without collation) ---connection master -CREATE TABLE t1 (a BINARY(1) PRIMARY KEY); -CREATE TABLE t2 (b BINARY(1) PRIMARY KEY); -CREATE TABLE t3 (c1 BINARY(1), c2 BINARY(1) NOT NULL UNIQUE, PRIMARY KEY(c1, c2), FOREIGN KEY(c1) REFERENCES t1(a), FOREIGN KEY(c2) REFERENCES t2(b)); - -INSERT INTO t1 VALUES (1); -INSERT INTO t2 VALUES (5); -SET @@GLOBAL.DEBUG= @debug_saved; -SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_foreign_key_generated_insert_collation'; -INSERT INTO t3 values(1,5); -SET @@GLOBAL.DEBUG= @debug_saved; -INSERT INTO t1 VALUES (3); ---source include/rpl_sync.inc -SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_foreign_key_generated_update_collation'; -UPDATE t3 SET c1=3 WHERE c1=1; ---source include/rpl_sync.inc -SET @@GLOBAL.DEBUG= @debug_saved; -DROP TABLE t3; -DROP TABLE t2; -DROP TABLE t1; ---source include/rpl_sync.inc - --source include/rpl_end.inc diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_certifier_garbage_collection.result b/rapid/plugin/group_replication/tests/mtr/r/gr_certifier_garbage_collection.result index e236d631b2c1..8e141900de40 100644 --- a/rapid/plugin/group_replication/tests/mtr/r/gr_certifier_garbage_collection.result +++ b/rapid/plugin/group_replication/tests/mtr/r/gr_certifier_garbage_collection.result @@ -38,9 +38,9 @@ UPDATE t1 SET c1=2 WHERE c1=1; # After garbage collection certification info will contain: # WS: t1.c1=1 -> 8a94f357-aab4-11df-86ab-c80aa9422222:1-4 # WS: t1.c1=2 -> 8a94f357-aab4-11df-86ab-c80aa9422222:1-4 -include/assert.inc ['Count_transactions_rows_validating must be 4'] +include/assert.inc ['Count_transactions_rows_validating must be 2'] include/assert.inc ['Transactions_committed_all_members must be equal to 8a94f357-aab4-11df-86ab-c80aa9422222:1-4'] -include/assert.inc ['Count_transactions_rows_validating must be 4'] +include/assert.inc ['Count_transactions_rows_validating must be 2'] include/assert.inc ['Transactions_committed_all_members must be equal to 8a94f357-aab4-11df-86ab-c80aa9422222:1-4'] ############################################################ diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_collations_key_conflict.result b/rapid/plugin/group_replication/tests/mtr/r/gr_collations_key_conflict.result deleted file mode 100644 index 8f5ab65ad471..000000000000 --- a/rapid/plugin/group_replication/tests/mtr/r/gr_collations_key_conflict.result +++ /dev/null @@ -1,99 +0,0 @@ -include/group_replication.inc -Warnings: -Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. -Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. -[connection server1] - -########################### -# Create a table on server1 -[connection server1] -CREATE TABLE t1 ( -u_str VARCHAR(32) NOT NULL, -value VARCHAR(32) NOT NULL, -PRIMARY KEY (u_str) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; -include/rpl_sync.inc - -###################################################################### -# Execute in concurrency transaction with equivalent keys under latin1 - -############################################################ -# 0. Initial setup and checks. -[connection server_1] -SET SESSION sql_log_bin= 0; -include/gtid_utils.inc -SET SESSION sql_log_bin= 1; -include/gtid_step_reset.inc - -############################################################ -# 1. Set a debug sync before broadcast message to group on -# connection local_server_connection1. -[connection server_1] -SET @debug_save= @@GLOBAL.DEBUG; -SET @@GLOBAL.DEBUG='d,group_replication_before_message_broadcast'; - -##################################################################### -# 2. Commit local_transaction that will be blocked before broadcast. -BEGIN; -INSERT INTO t1 (u_str, value) VALUES ('', "A value");; -COMMIT; - -############################################################ -# 3. Wait until local transaction reaches the -# group_replication_before_message_broadcast debug sync point. -[connection server1] - -############################################################ -# 4. Execute a transaction on remote server, that will reach first -# certification, since transaction on the local server -# is blocked before broadcast. -[connection server2] -BEGIN; -INSERT INTO t1 (u_str, value) VALUES ('', "Another value");; -COMMIT; - -############################################################ -# 5. Signal the waiting thread on local server to resume the -# transaction. -[connection server1] -SET DEBUG_SYNC='now SIGNAL waiting'; -SET @@GLOBAL.DEBUG= @debug_save; - -############################################################ -# 6. Wait for remote transaction to be executed succesfully -on local server. -[connection server2] -include/sync_slave_sql_with_master.inc -############################################################ -# 7. If the test case is conflict scenario, local transaction -# will end up in an error stating that it was aborted, -# since transactions are conflicting and transaction on -# remote server was ordered first. If the test case is -# is positive scenario, no error will be seen here. -[connection server_1] -ERROR HY000: Plugin instructed the server to rollback the current transaction. -[connection server_1] -SET @@GLOBAL.DEBUG=@debug_save; -############################################################ -# 8. Sync everything -include/rpl_sync.inc -############################################################ -# 9. Assert that number of certified transactions are the -# expected ones. -include/assert.inc [The value of Count_Transactions_Checked should be 3 after starting group replication] -include/assert.inc [The value of Count_Conflicts_Detected should be 1 after starting group replication] -############################################################ -# 10. Assert that GTID is increased as expected -include/gtid_step_assert.inc [count=1, only_count=1] -[connection server_1] -SET SESSION sql_log_bin= 0; -include/gtid_utils_end.inc -SET SESSION sql_log_bin= 1; -############################################################ -# 11. Cleanup (restore the connection back to original) -[connection server1] - -########### -# Clean up. -DROP TABLE t1; -include/group_replication_end.inc diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_perfschema_group_member_stats.result b/rapid/plugin/group_replication/tests/mtr/r/gr_perfschema_group_member_stats.result index b90552faeaaa..7f39b0d6f58a 100644 --- a/rapid/plugin/group_replication/tests/mtr/r/gr_perfschema_group_member_stats.result +++ b/rapid/plugin/group_replication/tests/mtr/r/gr_perfschema_group_member_stats.result @@ -53,7 +53,7 @@ server1 include/assert.inc [The value of member_id should be equal to server UUID after starting group replication] include/assert.inc [The value of Count_Transactions_checked should be 6 after starting group replication] include/assert.inc [The value of Count_conflicts_detected should be 0 after starting group replication] -include/assert.inc [The value of Count_Transactions_rows_validating should be 4 after starting group replication] +include/assert.inc [The value of Count_Transactions_rows_validating should be 2 after starting group replication] include/assert.inc [The value of Transactions_committed_all_members should have server 1 GTIDs before server2 start] include/assert.inc [The value of Last_Conflict_free_transaction should be the gtid of the last applied transaction.] SET SESSION sql_log_bin= 0; diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_certifier_garbage_collection.test b/rapid/plugin/group_replication/tests/mtr/t/gr_certifier_garbage_collection.test index af2b1ec49d3c..b29b629663bc 100644 --- a/rapid/plugin/group_replication/tests/mtr/t/gr_certifier_garbage_collection.test +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_certifier_garbage_collection.test @@ -104,8 +104,8 @@ UPDATE t1 SET c1=2 WHERE c1=1; --connection server1 --let $count_transactions_validating= query_get_value(SELECT Count_transactions_rows_validating from performance_schema.replication_group_member_stats, Count_transactions_rows_validating, 1) ---let $assert_text= 'Count_transactions_rows_validating must be 4' ---let $assert_cond= $count_transactions_validating = 4 +--let $assert_text= 'Count_transactions_rows_validating must be 2' +--let $assert_cond= $count_transactions_validating = 2 --source include/assert.inc --let $transactions_committed_all_members= query_get_value(SELECT Transactions_committed_all_members from performance_schema.replication_group_member_stats, Transactions_committed_all_members, 1) @@ -115,8 +115,8 @@ UPDATE t1 SET c1=2 WHERE c1=1; --connection server2 --let $count_transactions_validating= query_get_value(SELECT Count_transactions_rows_validating from performance_schema.replication_group_member_stats, Count_transactions_rows_validating, 1) ---let $assert_text= 'Count_transactions_rows_validating must be 4' ---let $assert_cond= $count_transactions_validating = 4 +--let $assert_text= 'Count_transactions_rows_validating must be 2' +--let $assert_cond= $count_transactions_validating = 2 --source include/assert.inc --let $transactions_committed_all_members= query_get_value(SELECT Transactions_committed_all_members from performance_schema.replication_group_member_stats, Transactions_committed_all_members, 1) diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_collations_key_conflict.test b/rapid/plugin/group_replication/tests/mtr/t/gr_collations_key_conflict.test deleted file mode 100644 index 9be9f37a98d3..000000000000 --- a/rapid/plugin/group_replication/tests/mtr/t/gr_collations_key_conflict.test +++ /dev/null @@ -1,51 +0,0 @@ -############################################################################## -# This test checks that keys that are considered the same under a collation do -# not pass certification as being different keys. -# -# The default mysql-5.7 collation is latin1, so gr_collations_key_conflict -# test and result files, which were using utf8 encoding, also have been -# converted to latin1 collation, to avoid changing the default server collation -# value. -# -# 0. 2 Server with running GR -# 1. Create a table with collation latin1 -# 2. Execute in concurrency transaction with equivalent keys under latin1 -# 3. Cleanup -############################################################################## - ---source include/have_debug_sync.inc ---source ../inc/have_group_replication_plugin.inc ---source ../inc/group_replication.inc - ---echo ---echo ########################### ---echo # Create a table on server1 ---let $rpl_connection_name= server1 ---source include/rpl_connection.inc - -CREATE TABLE t1 ( - u_str VARCHAR(32) NOT NULL, - value VARCHAR(32) NOT NULL, - PRIMARY KEY (u_str) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; - ---source include/rpl_sync.inc - ---echo ---echo ###################################################################### ---echo # Execute in concurrency transaction with equivalent keys under latin1 - ---let $local_server_connection1=server_1 ---let $local_server_connection2=server1 ---let $remote_server_connection=server2 ---let $local_transaction= INSERT INTO t1 (u_str, value) VALUES ('', "A value"); ---let $remote_transaction=INSERT INTO t1 (u_str, value) VALUES ('', "Another value"); ---let $conflict_test=1 ---source ../inc/gr_parallel_local_and_remote_transactions.inc - ---echo ---echo ########### ---echo # Clean up. -DROP TABLE t1; - ---source ../inc/group_replication_end.inc diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_perfschema_group_member_stats.test b/rapid/plugin/group_replication/tests/mtr/t/gr_perfschema_group_member_stats.test index 54ab4499cf1a..1743f9463f39 100644 --- a/rapid/plugin/group_replication/tests/mtr/t/gr_perfschema_group_member_stats.test +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_perfschema_group_member_stats.test @@ -182,8 +182,8 @@ START SLAVE SQL_THREAD FOR CHANNEL "group_replication_applier"; --source include/assert.inc --let $certification_db_size= query_get_value(SELECT Count_Transactions_rows_validating from performance_schema.replication_group_member_stats, Count_Transactions_rows_validating, 1) ---let $assert_text= The value of Count_Transactions_rows_validating should be 4 after starting group replication ---let $assert_cond= "$certification_db_size" = 4 +--let $assert_text= The value of Count_Transactions_rows_validating should be 2 after starting group replication +--let $assert_cond= "$certification_db_size" = 2 --source include/assert.inc --let $stable_set= query_get_value(SELECT Transactions_committed_all_members from performance_schema.replication_group_member_stats, Transactions_committed_all_members, 1) diff --git a/sql/rpl_transaction_write_set_ctx.cc b/sql/rpl_transaction_write_set_ctx.cc index 11f912a6f681..8ad77fc0de29 100644 --- a/sql/rpl_transaction_write_set_ctx.cc +++ b/sql/rpl_transaction_write_set_ctx.cc @@ -187,10 +187,10 @@ void Rpl_transaction_write_set_ctx::rollback_to_savepoint(char* name) } DBUG_EXECUTE_IF("transaction_write_set_savepoint_add_savepoint", - DBUG_ASSERT(write_set.size() == 2);); + DBUG_ASSERT(write_set.size() == 1);); DBUG_EXECUTE_IF("transaction_write_set_size_2", - DBUG_ASSERT(write_set.size() == 4);); + DBUG_ASSERT(write_set.size() == 2);); } DBUG_VOID_RETURN; diff --git a/sql/rpl_write_set_handler.cc b/sql/rpl_write_set_handler.cc index 8a39c5b082f1..134343b7fad3 100644 --- a/sql/rpl_write_set_handler.cc +++ b/sql/rpl_write_set_handler.cc @@ -27,14 +27,11 @@ #include #include -#include #include #define NAME_READ_BUFFER_SIZE 1024 #define HASH_STRING_SEPARATOR "½" -#define COLLATION_CONVERSION_ALGORITHM 1 - const char *transaction_write_set_hashing_algorithms[]= { "OFF", @@ -59,12 +56,12 @@ get_write_set_algorithm_string(unsigned int algorithm) } } -template uint64 calc_hash(ulong algorithm, type T, size_t len) +template uint64 calc_hash(ulong algorithm, type T) { if(algorithm == HASH_ALGORITHM_MURMUR32) - return (murmur3_32((const uchar*)T, len, 0)); + return (murmur3_32((const uchar*)T, strlen(T), 0)); else - return (MY_XXH64((const uchar*)T, len, 0)); + return (MY_XXH64((const uchar*)T, strlen(T), 0)); } /** @@ -161,266 +158,108 @@ void check_foreign_key(TABLE *table, THD *thd, } -void debug_check_for_write_sets(std::vector< std::pair > &key_list_to_hash) +void debug_check_for_write_sets(std::vector &key_list_to_hash) { DBUG_EXECUTE_IF("PKE_assert_single_primary_key_generated_insert", - DBUG_ASSERT(key_list_to_hash.size() == 2); - DBUG_ASSERT(key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + DBUG_ASSERT(key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "1");); - DBUG_EXECUTE_IF("PKE_assert_single_primary_key_generated_insert_collation", - DBUG_ASSERT(key_list_to_hash.size() == 2); - DBUG_ASSERT(key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" - HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1].first == key_list_to_hash[0].first);); - DBUG_EXECUTE_IF("PKE_assert_single_primary_key_generated_update", - DBUG_ASSERT(key_list_to_hash.size() == 2); - DBUG_ASSERT(key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + DBUG_ASSERT(key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1" || - key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "1");); - DBUG_EXECUTE_IF("PKE_assert_single_primary_key_generated_update_collation", - DBUG_ASSERT(key_list_to_hash.size() == 2); - DBUG_ASSERT((key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" - HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1].first == key_list_to_hash[0].first) || - (key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" - HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1].first == key_list_to_hash[0].first));); - DBUG_EXECUTE_IF("PKE_assert_multi_primary_key_generated_insert", - DBUG_ASSERT(key_list_to_hash.size() == 2); - DBUG_ASSERT(key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + DBUG_ASSERT(key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "12" HASH_STRING_SEPARATOR "1");); - DBUG_EXECUTE_IF("PKE_assert_multi_primary_key_generated_insert_collation", - DBUG_ASSERT(key_list_to_hash.size() == 2); - DBUG_ASSERT(key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" - HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "12" - HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1].first == key_list_to_hash[0].first);); - DBUG_EXECUTE_IF("PKE_assert_multi_primary_key_generated_update", - DBUG_ASSERT(key_list_to_hash.size() == 2); - DBUG_ASSERT(key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + DBUG_ASSERT(key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "12" HASH_STRING_SEPARATOR "1" || - key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "12" HASH_STRING_SEPARATOR "1");); - DBUG_EXECUTE_IF("PKE_assert_multi_primary_key_generated_update_collation", - DBUG_ASSERT(key_list_to_hash.size() == 2); - DBUG_ASSERT((key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" - HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "12" - HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1].first == key_list_to_hash[0].first) || - (key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" - HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "12" - HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1].first == key_list_to_hash[0].first));); - DBUG_EXECUTE_IF("PKE_assert_single_primary_unique_key_generated_insert", - DBUG_ASSERT(key_list_to_hash.size() == 6); - DBUG_ASSERT(key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + DBUG_ASSERT(key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1].first == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[1] == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "22" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[2].first == "c3" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[2] == "c3" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1");); - - DBUG_EXECUTE_IF("PKE_assert_single_primary_unique_key_generated_insert_collation", - DBUG_ASSERT(key_list_to_hash.size() == 6); - DBUG_ASSERT(key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" - HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1].first == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" - HASH_STRING_SEPARATOR "22" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[2].first == "c3" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" - HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[3].first == key_list_to_hash[0].first && - key_list_to_hash[4].first == key_list_to_hash[1].first && - key_list_to_hash[5].first == key_list_to_hash[2].first);); - DBUG_EXECUTE_IF("PKE_assert_single_primary_unique_key_generated_update", - DBUG_ASSERT(key_list_to_hash.size() == 6); - DBUG_ASSERT((key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + DBUG_ASSERT((key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1].first == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[1] == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "22" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[2].first == "c3" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[2] == "c3" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1") || - (key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + (key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1].first == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[1] == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "22" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[2].first == "c3" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[2] == "c3" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1"));); - DBUG_EXECUTE_IF("PKE_assert_single_primary_unique_key_generated_update_collation", - DBUG_ASSERT(key_list_to_hash.size() == 6); - DBUG_ASSERT((key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" - HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1].first == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" - HASH_STRING_SEPARATOR "22" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[2].first == "c3" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" - HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[3].first == key_list_to_hash[0].first && - key_list_to_hash[4].first == key_list_to_hash[1].first && - key_list_to_hash[5].first == key_list_to_hash[2].first) || - (key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" - HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1].first == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" - HASH_STRING_SEPARATOR "22" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[2].first == "c3" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" - HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[3].first == key_list_to_hash[0].first && - key_list_to_hash[4].first == key_list_to_hash[1].first && - key_list_to_hash[5].first == key_list_to_hash[2].first));); - DBUG_EXECUTE_IF("PKE_assert_multi_primary_unique_key_generated_insert", - DBUG_ASSERT(key_list_to_hash.size() == 6); - DBUG_ASSERT(key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + DBUG_ASSERT(key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "12" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1].first == "b" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[1] == "b" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[2].first == "c" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[2] == "c" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "24" HASH_STRING_SEPARATOR "1");); - DBUG_EXECUTE_IF("PKE_assert_multi_primary_unique_key_generated_insert_collation", - DBUG_ASSERT(key_list_to_hash.size() == 6); - DBUG_ASSERT(key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" - HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "12" - HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1].first == "b" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" - HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[2].first == "c" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" - HASH_STRING_SEPARATOR "24" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[3].first == key_list_to_hash[0].first && - key_list_to_hash[4].first == key_list_to_hash[1].first && - key_list_to_hash[5].first == key_list_to_hash[2].first);); - DBUG_EXECUTE_IF("PKE_assert_multi_primary_unique_key_generated_update", - DBUG_ASSERT(key_list_to_hash.size() == 6); - DBUG_ASSERT((key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + DBUG_ASSERT((key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "12" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1].first == "b" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[1] == "b" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[2].first == "c" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[2] == "c" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "24" HASH_STRING_SEPARATOR "1") || - (key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + (key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "12" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1].first == "b" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[1] == "b" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[2].first == "c" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[2] == "c" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "24" HASH_STRING_SEPARATOR "1"));); - DBUG_EXECUTE_IF("PKE_assert_multi_primary_unique_key_generated_update_collation", - DBUG_ASSERT(key_list_to_hash.size() == 6); - DBUG_ASSERT((key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" - HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "12" - HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1].first == "b" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" - HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[2].first == "c" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" - HASH_STRING_SEPARATOR "24" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[3].first == key_list_to_hash[0].first && - key_list_to_hash[4].first == key_list_to_hash[1].first && - key_list_to_hash[5].first == key_list_to_hash[2].first) || - (key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" - HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "12" - HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1].first == "b" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" - HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[2].first == "c" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" - HASH_STRING_SEPARATOR "24" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[3].first == key_list_to_hash[0].first && - key_list_to_hash[4].first == key_list_to_hash[1].first && - key_list_to_hash[5].first == key_list_to_hash[2].first));); - DBUG_EXECUTE_IF("PKE_assert_multi_foreign_key_generated_insert", - DBUG_ASSERT(key_list_to_hash.size() == 8); - DBUG_ASSERT(key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" + DBUG_ASSERT(key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "15" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1].first == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" + key_list_to_hash[1] == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[2].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[2] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[3].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t2" + key_list_to_hash[3] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t2" HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "1");); - DBUG_EXECUTE_IF("PKE_assert_multi_foreign_key_generated_insert_collation", - DBUG_ASSERT(key_list_to_hash.size() == 8); - DBUG_ASSERT(key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" - HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "15" - HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1].first == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" - HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[2].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" - HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[3].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t2" - HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[4].first == key_list_to_hash[0].first && - key_list_to_hash[5].first == key_list_to_hash[1].first && - key_list_to_hash[6].first == key_list_to_hash[2].first && - key_list_to_hash[7].first == key_list_to_hash[3].first);); - DBUG_EXECUTE_IF("PKE_assert_multi_foreign_key_generated_update", - DBUG_ASSERT(key_list_to_hash.size() == 8); - DBUG_ASSERT((key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" + DBUG_ASSERT((key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "15" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1].first == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" + key_list_to_hash[1] == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[2].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[2] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[3].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t2" + key_list_to_hash[3] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t2" HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "1") || - (key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" + (key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "15" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1].first == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" + key_list_to_hash[1] == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[2].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[2] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[3].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t2" + key_list_to_hash[3] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t2" HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "1"));); - - DBUG_EXECUTE_IF("PKE_assert_multi_foreign_key_generated_update_collation", - DBUG_ASSERT(key_list_to_hash.size() == 8); - DBUG_ASSERT((key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" - HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "15" - HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1].first == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" - HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[2].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" - HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[3].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t2" - HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[4].first == key_list_to_hash[0].first && - key_list_to_hash[5].first == key_list_to_hash[1].first && - key_list_to_hash[6].first == key_list_to_hash[2].first && - key_list_to_hash[7].first == key_list_to_hash[3].first) || - (key_list_to_hash[0].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" - HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "15" - HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1].first == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" - HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[2].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" - HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[3].first == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t2" - HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[4].first == key_list_to_hash[0].first && - key_list_to_hash[5].first == key_list_to_hash[1].first && - key_list_to_hash[6].first == key_list_to_hash[2].first && - key_list_to_hash[7].first == key_list_to_hash[3].first));); } @@ -428,28 +267,23 @@ void debug_check_for_write_sets(std::vector< std::pair > &ke Function to generate the hash of the string passed to this function. @param[in] pke - the string to be hashed. - @param[in] collation_conversion_algorithm - algorithm used for the conversion - 0 - converted using without - collation support algorithm - 1 - converted using with collation - support conversion algorithm - @param[in] thd - THD object pointing to current thread. */ -static void generate_hash_pke(const std::string &pke, uint collation_conversion_algorithm, THD* thd) +void generate_hash_pke(std::string pke, THD* thd) { DBUG_ENTER("generate_hash_pke"); DBUG_ASSERT(thd->variables.transaction_write_set_extraction != HASH_ALGORITHM_OFF); - - size_t length= (COLLATION_CONVERSION_ALGORITHM == collation_conversion_algorithm) ? - pke.size() : strlen(pke.c_str()); + const char* string_pke=NULL; + string_pke= (char *)pke.c_str(); + DBUG_PRINT("info", ("The hashed value is %s for %u", string_pke, + thd->thread_id())); uint64 hash= calc_hash(thd->variables.transaction_write_set_extraction, - pke.c_str(), length); - thd->get_transaction()->get_transaction_write_set_ctx()->add_write_set(hash); - - DBUG_PRINT("info", ("pke: %s; hash: %llu", pke.c_str(), hash)); + string_pke); + Rpl_transaction_write_set_ctx *transaction_write_set_ctc= + thd->get_transaction()->get_transaction_write_set_ctx(); + transaction_write_set_ctc->add_write_set(hash); DBUG_VOID_RETURN; } @@ -534,181 +368,100 @@ void add_pke(TABLE *table, THD *thd) Finally these value are hashed using the murmur hash function to prevent sending more for certification algorithm. */ - std::vector< std::pair > key_list_to_hash; + std::vector key_list_to_hash; bitmap_set_all(table->read_set); - if(table->key_info && (table->s->primary_key < MAX_KEY)) { - /* - To handle both members having hash values with and without collation - in the same group, we generate and send both versions (with and without - collation) of the hash in the newer versions. This would mean that a row - change will generate 2 instead of 1 writeset, and 4 instead of 2, when PK - are involved. This will mean that a transaction will be certified against - two writesets instead of just one. - - To generate both versions (with and without collation) of the hash, it - first converts using without collation support algorithm (old algorithm), - and then using with collation support conversion algorithm, and adds - generated value to key_list_to_hash vector, for hash generation later. - */ - for (uint collation_conversion_algorithm= 0; - collation_conversion_algorithm <= COLLATION_CONVERSION_ALGORITHM; - collation_conversion_algorithm++) + for (uint key_number=0; key_number < table->s->keys; key_number++) { - for (uint key_number=0; key_number < table->s->keys; key_number++) + // Skip non unique. + if (!((table->key_info[key_number].flags & (HA_NOSAME )) == HA_NOSAME)) + continue; + + std::string unhashed_string; + unhashed_string.append(table->key_info[key_number].name); + unhashed_string.append(HASH_STRING_SEPARATOR); + unhashed_string.append(pke); + uint i= 0; + for (/*empty*/; i < table->key_info[key_number].user_defined_key_parts; i++) { - // Skip non unique. - if (!((table->key_info[key_number].flags & (HA_NOSAME )) == HA_NOSAME)) - continue; + // read the primary key field values in str. + int index= table->key_info[key_number].key_part[i].fieldnr; + table->field[index-1]->val_str(&row_data); + + /* Ignore if the value is NULL. */ + if (table->field[index-1]->is_null()) + break; - std::string unhashed_string; - unhashed_string.append(table->key_info[key_number].name); + char* pk_value= (char*) my_malloc( + key_memory_write_set_extraction, + row_data.length()+1, MYF(0)); + // buffer to be used for my_safe_itoa. + char *buf= (char*) my_malloc( + key_memory_write_set_extraction, + row_data.length(), MYF(0)); + + strmake(pk_value, row_data.c_ptr_safe(), row_data.length()); + const char *lenStr = my_safe_itoa(10, (row_data.length()), + &buf[row_data.length()-1]); + unhashed_string.append(pk_value); unhashed_string.append(HASH_STRING_SEPARATOR); - unhashed_string.append(pke); - uint i= 0; - for (/*empty*/; i < table->key_info[key_number].user_defined_key_parts; i++) - { - // read the primary key field values in str. - int index= table->key_info[key_number].key_part[i].fieldnr; - size_t length= 0; - - /* Ignore if the value is NULL. */ - if (table->field[index-1]->is_null()) - break; - - // convert using collation support conversion algorithm - if (COLLATION_CONVERSION_ALGORITHM == collation_conversion_algorithm) - { - const CHARSET_INFO* cs= table->field[index-1]->charset(); - length= cs->coll->strnxfrmlen(cs, - table->field[index-1]->pack_length()); - } - // convert using without collation support algorithm - else - { - table->field[index-1]->val_str(&row_data); - length= row_data.length(); - } - - char* pk_value= (char*) my_malloc(key_memory_write_set_extraction, - length+1, MYF(MY_ZEROFILL)); - - // buffer to be used for my_safe_itoa. - char *buf= (char*) my_malloc(key_memory_write_set_extraction, - length, MYF(MY_ZEROFILL)); - - const char *lenStr = my_safe_itoa(10, length, &buf[length-1]); - - // convert using collation support conversion algorithm - if (COLLATION_CONVERSION_ALGORITHM == collation_conversion_algorithm) - { - /* - convert to normalized string and store so that it can be - sorted using binary comparison functions like memcmp. - */ - uint32 pack_length= table->field[index-1]->pack_length(); - set_if_smaller(length, pack_length); - table->field[index-1]->make_sort_key((uchar*)pk_value, length); - pk_value[length]= 0; - unhashed_string.append(pk_value, length); - } - // convert using without collation support algorithm - else - { - strmake(pk_value, row_data.c_ptr_safe(), length); - unhashed_string.append(pk_value); - } - - unhashed_string.append(HASH_STRING_SEPARATOR); - unhashed_string.append(lenStr); - my_free(buf); - my_free(pk_value); - } - /* - If any part of the key is NULL, ignore adding it to hash keys. - NULL cannot conflict with any value. - Eg: create table t1(i int primary key not null, j int, k int, - unique key (j, k)); - insert into t1 values (1, 2, NULL); - insert into t1 values (2, 2, NULL); => this is allowed. - */ - if (i == table->key_info[key_number].user_defined_key_parts) - { - key_list_to_hash.push_back(make_pair(unhashed_string, - collation_conversion_algorithm)); - } - else - { - /* This is impossible to happen in case of primary keys */ - DBUG_ASSERT(key_number !=0); - } - unhashed_string.clear(); + unhashed_string.append(lenStr); + my_free(buf); + my_free(pk_value); + } + /* + If any part of the key is NULL, ignore adding it to hash keys. + NULL cannot conflict with any value. + Eg: create table t1(i int primary key not null, j int, k int, + unique key (j, k)); + insert into t1 values (1, 2, NULL); + insert into t1 values (2, 2, NULL); => this is allowed. + */ + if (i == table->key_info[key_number].user_defined_key_parts) + { + key_list_to_hash.push_back(unhashed_string); + } + else + { + /* This is impossible to happen in case of primary keys */ + DBUG_ASSERT(key_number !=0); } + unhashed_string.clear(); + } - // This part takes care of the previously fetched foreign key values of - // the referenced table adds it to the write set. - for(uint i=0; i < table->s->fields; i++) + // This part takes care of the previously fetched foreign key values of + // the referenced table adds it to the write set. + for(uint i=0; i < table->s->fields; i++) + { + std::string referenced_FQTN= + foreign_key_map[table->s->field[i]->field_name]; + if (referenced_FQTN.size() > 0) { - std::string referenced_FQTN= - foreign_key_map[table->s->field[i]->field_name]; - if (referenced_FQTN.size() > 0) - { - size_t length= 0; - - /* Ignore if the value is NULL. */ - if (table->field[i]->is_null()) - break; - - // convert using collation support conversion algorithm - if (COLLATION_CONVERSION_ALGORITHM == collation_conversion_algorithm) - { - const CHARSET_INFO* cs= table->field[i]->charset(); - length= cs->coll->strnxfrmlen(cs, - table->field[i]->pack_length()); - } - // convert using without collation support algorithm - else - { - table->field[i]->val_str(&row_data); - length= row_data.length(); - } - - char* pk_value= (char*) my_malloc(key_memory_write_set_extraction, - length+1, MYF(MY_ZEROFILL)); - - // buffer to be used for my_safe_itoa. - char *buf= (char*) my_malloc(key_memory_write_set_extraction, - length, MYF(MY_ZEROFILL)); - - const char *lenStr = my_safe_itoa(10, length, &buf[length-1]); - - // convert using collation support conversion algorithm - if (COLLATION_CONVERSION_ALGORITHM == collation_conversion_algorithm) - { - /* - convert to normalized string and store so that it can be - sorted using binary comparison functions like memcmp. - */ - table->field[i]->make_sort_key((uchar*)pk_value, length); - pk_value[length]= 0; - referenced_FQTN.append(pk_value, length); - } - // convert using without collation support algorithm - else - { - strmake(pk_value, row_data.c_ptr_safe(), length); - referenced_FQTN.append(pk_value); - } - - referenced_FQTN.append(HASH_STRING_SEPARATOR); - referenced_FQTN.append(lenStr); - - my_free(buf); - my_free(pk_value); - key_list_to_hash.push_back(make_pair(referenced_FQTN, - collation_conversion_algorithm)); - } + table->field[i]->val_str(&row_data); + + /* Ignore if the value is NULL. */ + if (table->field[i]->is_null()) + continue; + + char* pk_value= (char*) my_malloc( + key_memory_write_set_extraction, + row_data.length()+1, MYF(0)); + // buffer to be used for my_safe_itoa. + char *buf= (char*) my_malloc( + key_memory_write_set_extraction, + row_data.length(), MYF(0)); + + strmake(pk_value, row_data.c_ptr_safe(), row_data.length()); + const char *lenStr = my_safe_itoa(10, (row_data.length()), + &buf[row_data.length()-1]); + referenced_FQTN.append(pk_value); + referenced_FQTN.append(HASH_STRING_SEPARATOR); + referenced_FQTN.append(lenStr); + + my_free(buf); + my_free(pk_value); + key_list_to_hash.push_back(referenced_FQTN); } } @@ -716,11 +469,10 @@ void add_pke(TABLE *table, THD *thd) while(key_list_to_hash.size()) { - std::pair prepared_string_pair= key_list_to_hash.back(); + std::string prepared_string= key_list_to_hash.back(); key_list_to_hash.pop_back(); - generate_hash_pke(prepared_string_pair.first, prepared_string_pair.second, thd); + generate_hash_pke(prepared_string, thd); } - } DBUG_VOID_RETURN; } From 0f8e59d37b78a4c00cc1c683c57d874a1e99af7e Mon Sep 17 00:00:00 2001 From: Laurynas Biveinis Date: Thu, 28 Dec 2017 10:13:28 +0200 Subject: [PATCH 0329/1221] Fix bug 1740350 (Regression - ha_rocksdb.cc.o build error in PS 5.7) This was caused by d402c5c37b8a7c74314e261d8f8eeeecce5b4125 changing the RocksDB submodule pointer by mistake. Revert that change. --- storage/rocksdb/rocksdb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage/rocksdb/rocksdb b/storage/rocksdb/rocksdb index 50a969131f69..ab0542f5ec6e 160000 --- a/storage/rocksdb/rocksdb +++ b/storage/rocksdb/rocksdb @@ -1 +1 @@ -Subproject commit 50a969131f69ffab6f7a694b3b897a7235e899fa +Subproject commit ab0542f5ec6e7c7e405267eaa2e2a603a77d570b From 878131402294f698a50fc640c75ad70c2f8459a2 Mon Sep 17 00:00:00 2001 From: Evgeniy Patlan Date: Thu, 28 Dec 2017 11:22:26 +0200 Subject: [PATCH 0330/1221] Update version --- VERSION | 2 +- storage/innobase/include/univ.i | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/VERSION b/VERSION index 02f5e867c0f1..c30f991861be 100644 --- a/VERSION +++ b/VERSION @@ -1,4 +1,4 @@ MYSQL_VERSION_MAJOR=5 MYSQL_VERSION_MINOR=7 MYSQL_VERSION_PATCH=20 -MYSQL_VERSION_EXTRA=-18 +MYSQL_VERSION_EXTRA=-19 diff --git a/storage/innobase/include/univ.i b/storage/innobase/include/univ.i index 73359eb96051..10654a73fca8 100644 --- a/storage/innobase/include/univ.i +++ b/storage/innobase/include/univ.i @@ -47,7 +47,7 @@ Created 1/20/1994 Heikki Tuuri #define INNODB_VERSION_BUGFIX MYSQL_VERSION_PATCH #ifndef PERCONA_INNODB_VERSION -#define PERCONA_INNODB_VERSION 18 +#define PERCONA_INNODB_VERSION 19 #endif /* The following is the InnoDB version as shown in From 5765ce498355d7fc4b2f3c0bbdacff7fe3551fc9 Mon Sep 17 00:00:00 2001 From: Evgeniy Patlan Date: Thu, 28 Dec 2017 11:25:53 +0200 Subject: [PATCH 0331/1221] [BLD-918] Remove message about experimental status --- build-ps/debian/percona-server-rocksdb-5.7.postinst | 1 - build-ps/percona-server.spec | 1 - build-ps/ubuntu/percona-server-rocksdb-5.7.postinst | 1 - 3 files changed, 3 deletions(-) diff --git a/build-ps/debian/percona-server-rocksdb-5.7.postinst b/build-ps/debian/percona-server-rocksdb-5.7.postinst index e7c7ccb4eee6..665ec3d951bf 100644 --- a/build-ps/debian/percona-server-rocksdb-5.7.postinst +++ b/build-ps/debian/percona-server-rocksdb-5.7.postinst @@ -2,7 +2,6 @@ # Some postinstall info about RocksDB if [ -z "$2" ]; then - echo -e "\n\n * This is _EXPERIMENTAL_ build so it is not for production systems." echo -e "\n\n * This release of Percona Server is distributed with RocksDB storage engine." echo -e " * Run the following script to enable the RocksDB storage engine in Percona Server:\n" echo -e "\tps-admin --enable-rocksdb -u -p[mysql_admin_pass] [-S ] [-h -P ]\n\n" diff --git a/build-ps/percona-server.spec b/build-ps/percona-server.spec index 759652885da0..d8a13a643284 100644 --- a/build-ps/percona-server.spec +++ b/build-ps/percona-server.spec @@ -629,7 +629,6 @@ fi %if 0%{?rocksdb} %post -n Percona-Server-rocksdb%{product_suffix} if [ $1 -eq 1 ] ; then - echo -e "\n\n * This is _EXPERIMENTAL_ build so it is not for production systems." echo -e "\n\n * This release of Percona Server is distributed with RocksDB storage engine." echo -e " * Run the following script to enable the RocksDB storage engine in Percona Server:\n" echo -e "\tps-admin --enable-rocksdb -u -p[mysql_admin_pass] [-S ] [-h -P ]\n" diff --git a/build-ps/ubuntu/percona-server-rocksdb-5.7.postinst b/build-ps/ubuntu/percona-server-rocksdb-5.7.postinst index e7c7ccb4eee6..665ec3d951bf 100644 --- a/build-ps/ubuntu/percona-server-rocksdb-5.7.postinst +++ b/build-ps/ubuntu/percona-server-rocksdb-5.7.postinst @@ -2,7 +2,6 @@ # Some postinstall info about RocksDB if [ -z "$2" ]; then - echo -e "\n\n * This is _EXPERIMENTAL_ build so it is not for production systems." echo -e "\n\n * This release of Percona Server is distributed with RocksDB storage engine." echo -e " * Run the following script to enable the RocksDB storage engine in Percona Server:\n" echo -e "\tps-admin --enable-rocksdb -u -p[mysql_admin_pass] [-S ] [-h -P ]\n\n" From a63b34811be4dbe812933ee04ba93306567ae684 Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Fri, 22 Dec 2017 16:32:28 +0100 Subject: [PATCH 0332/1221] lp1739734: Fixed federated SE regression introduced in the gcc7 fixes. Also added a related test. --- .../suite/federated/percona_bug1739734.result | 44 ++++++++++++++++ .../suite/federated/percona_bug1739734.test | 50 +++++++++++++++++++ storage/federated/ha_federated.cc | 6 ++- 3 files changed, 98 insertions(+), 2 deletions(-) create mode 100644 mysql-test/suite/federated/percona_bug1739734.result create mode 100644 mysql-test/suite/federated/percona_bug1739734.test diff --git a/mysql-test/suite/federated/percona_bug1739734.result b/mysql-test/suite/federated/percona_bug1739734.result new file mode 100644 index 000000000000..5f4bdd9a1318 --- /dev/null +++ b/mysql-test/suite/federated/percona_bug1739734.result @@ -0,0 +1,44 @@ +# +# Bug lp1739734 "Federated table returns error 1430 from storage engine" +# +# This is a bug introduced in the artful/gcc7 compilation fixes, caused by +# a moved break statement. +CREATE DATABASE federated; +CREATE DATABASE federated; +CREATE DATABASE lp1739734; +use lp1739734; +CREATE SERVER local_server +FOREIGN DATA WRAPPER mysql +OPTIONS ( +HOST '127.0.0.1', +PORT MASTER_PORT, +USER 'root', +PASSWORD '', +DATABASE 'lp1739734' +); +CREATE TABLE remote_table ( +a INT, +b INT, +KEY ab (a,b), +KEY ba (b,a) +); +CREATE TABLE local_table ( +a INT, +b INT, +KEY ab (a,b), +KEY ba (b,a) +) ENGINE=federated CONNECTION='local_server/remote_table'; +SELECT * FROM local_table; +a b +SELECT * FROM local_table USE INDEX (ab) +WHERE a<1 AND b=0; +a b +SELECT * FROM local_table USE INDEX (ba) +WHERE a<1 AND b=0; +a b +DROP DATABASE lp1739734; +DROP SERVER local_server; +DROP TABLE IF EXISTS federated.t1; +DROP DATABASE federated; +DROP TABLE IF EXISTS federated.t1; +DROP DATABASE federated; diff --git a/mysql-test/suite/federated/percona_bug1739734.test b/mysql-test/suite/federated/percona_bug1739734.test new file mode 100644 index 000000000000..cbb4c90dd756 --- /dev/null +++ b/mysql-test/suite/federated/percona_bug1739734.test @@ -0,0 +1,50 @@ +--echo # +--echo # Bug lp1739734 "Federated table returns error 1430 from storage engine" +--echo # +--echo # This is a bug introduced in the artful/gcc7 compilation fixes, caused by +--echo # a moved break statement. + +--source suite/federated/include/federated.inc + +connection master; +CREATE DATABASE lp1739734; +use lp1739734; + +--replace_result $MASTER_MYPORT MASTER_PORT +eval CREATE SERVER local_server +FOREIGN DATA WRAPPER mysql +OPTIONS ( + HOST '127.0.0.1', + PORT $MASTER_MYPORT, + USER 'root', + PASSWORD '', + DATABASE 'lp1739734' +); + +CREATE TABLE remote_table ( + a INT, + b INT, + KEY ab (a,b), + KEY ba (b,a) +); + + +CREATE TABLE local_table ( + a INT, + b INT, + KEY ab (a,b), + KEY ba (b,a) +) ENGINE=federated CONNECTION='local_server/remote_table'; + +SELECT * FROM local_table; + +SELECT * FROM local_table USE INDEX (ab) +WHERE a<1 AND b=0; + +SELECT * FROM local_table USE INDEX (ba) +WHERE a<1 AND b=0; + +DROP DATABASE lp1739734; +DROP SERVER local_server; + +--source suite/federated/include/federated_cleanup.inc diff --git a/storage/federated/ha_federated.cc b/storage/federated/ha_federated.cc index d392d05d1a92..81005a6621ed 100644 --- a/storage/federated/ha_federated.cc +++ b/storage/federated/ha_federated.cc @@ -1418,8 +1418,9 @@ bool ha_federated::create_where_from_key(String *to, { goto err; } + break; } - break; + // fallthrough case HA_READ_KEY_OR_NEXT: DBUG_PRINT("info", ("federated HA_READ_KEY_OR_NEXT %d", i)); if (emit_key_part_name(&tmp, key_part) || @@ -1437,8 +1438,9 @@ bool ha_federated::create_where_from_key(String *to, emit_key_part_element(&tmp, key_part, needs_quotes, 0, ptr, part_length)) goto err; + break; } - break; + // fallthrough case HA_READ_KEY_OR_PREV: DBUG_PRINT("info", ("federated HA_READ_KEY_OR_PREV %d", i)); if (emit_key_part_name(&tmp, key_part) || From 4a9bc48ba581c986c15271247f0432acecb931db Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Fri, 22 Dec 2017 16:32:28 +0100 Subject: [PATCH 0333/1221] lp1739734: Fixed federated SE regression introduced in the gcc7 fixes. Also added a related test. (cherry picked from commit a63b34811be4dbe812933ee04ba93306567ae684) --- .../suite/federated/percona_bug1739734.result | 44 ++++++++++++++++ .../suite/federated/percona_bug1739734.test | 50 +++++++++++++++++++ storage/federated/ha_federated.cc | 6 ++- 3 files changed, 98 insertions(+), 2 deletions(-) create mode 100644 mysql-test/suite/federated/percona_bug1739734.result create mode 100644 mysql-test/suite/federated/percona_bug1739734.test diff --git a/mysql-test/suite/federated/percona_bug1739734.result b/mysql-test/suite/federated/percona_bug1739734.result new file mode 100644 index 000000000000..5f4bdd9a1318 --- /dev/null +++ b/mysql-test/suite/federated/percona_bug1739734.result @@ -0,0 +1,44 @@ +# +# Bug lp1739734 "Federated table returns error 1430 from storage engine" +# +# This is a bug introduced in the artful/gcc7 compilation fixes, caused by +# a moved break statement. +CREATE DATABASE federated; +CREATE DATABASE federated; +CREATE DATABASE lp1739734; +use lp1739734; +CREATE SERVER local_server +FOREIGN DATA WRAPPER mysql +OPTIONS ( +HOST '127.0.0.1', +PORT MASTER_PORT, +USER 'root', +PASSWORD '', +DATABASE 'lp1739734' +); +CREATE TABLE remote_table ( +a INT, +b INT, +KEY ab (a,b), +KEY ba (b,a) +); +CREATE TABLE local_table ( +a INT, +b INT, +KEY ab (a,b), +KEY ba (b,a) +) ENGINE=federated CONNECTION='local_server/remote_table'; +SELECT * FROM local_table; +a b +SELECT * FROM local_table USE INDEX (ab) +WHERE a<1 AND b=0; +a b +SELECT * FROM local_table USE INDEX (ba) +WHERE a<1 AND b=0; +a b +DROP DATABASE lp1739734; +DROP SERVER local_server; +DROP TABLE IF EXISTS federated.t1; +DROP DATABASE federated; +DROP TABLE IF EXISTS federated.t1; +DROP DATABASE federated; diff --git a/mysql-test/suite/federated/percona_bug1739734.test b/mysql-test/suite/federated/percona_bug1739734.test new file mode 100644 index 000000000000..cbb4c90dd756 --- /dev/null +++ b/mysql-test/suite/federated/percona_bug1739734.test @@ -0,0 +1,50 @@ +--echo # +--echo # Bug lp1739734 "Federated table returns error 1430 from storage engine" +--echo # +--echo # This is a bug introduced in the artful/gcc7 compilation fixes, caused by +--echo # a moved break statement. + +--source suite/federated/include/federated.inc + +connection master; +CREATE DATABASE lp1739734; +use lp1739734; + +--replace_result $MASTER_MYPORT MASTER_PORT +eval CREATE SERVER local_server +FOREIGN DATA WRAPPER mysql +OPTIONS ( + HOST '127.0.0.1', + PORT $MASTER_MYPORT, + USER 'root', + PASSWORD '', + DATABASE 'lp1739734' +); + +CREATE TABLE remote_table ( + a INT, + b INT, + KEY ab (a,b), + KEY ba (b,a) +); + + +CREATE TABLE local_table ( + a INT, + b INT, + KEY ab (a,b), + KEY ba (b,a) +) ENGINE=federated CONNECTION='local_server/remote_table'; + +SELECT * FROM local_table; + +SELECT * FROM local_table USE INDEX (ab) +WHERE a<1 AND b=0; + +SELECT * FROM local_table USE INDEX (ba) +WHERE a<1 AND b=0; + +DROP DATABASE lp1739734; +DROP SERVER local_server; + +--source suite/federated/include/federated_cleanup.inc diff --git a/storage/federated/ha_federated.cc b/storage/federated/ha_federated.cc index 6f0ca88bea5c..427bcdd20cfb 100644 --- a/storage/federated/ha_federated.cc +++ b/storage/federated/ha_federated.cc @@ -1415,8 +1415,9 @@ bool ha_federated::create_where_from_key(String *to, { goto err; } + break; } - break; + // fallthrough case HA_READ_KEY_OR_NEXT: DBUG_PRINT("info", ("federated HA_READ_KEY_OR_NEXT %d", i)); if (emit_key_part_name(&tmp, key_part) || @@ -1434,8 +1435,9 @@ bool ha_federated::create_where_from_key(String *to, emit_key_part_element(&tmp, key_part, needs_quotes, 0, ptr, part_length)) goto err; + break; } - break; + // fallthrough case HA_READ_KEY_OR_PREV: DBUG_PRINT("info", ("federated HA_READ_KEY_OR_PREV %d", i)); if (emit_key_part_name(&tmp, key_part) || From 78a728f0d52f3d0be0c9db223c0b86d3e5ac5982 Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Fri, 22 Dec 2017 16:32:28 +0100 Subject: [PATCH 0334/1221] lp1739734: Fixed federated SE regression introduced in the gcc7 fixes. Also added a related test. (cherry picked from commit a63b34811be4dbe812933ee04ba93306567ae684) (cherry picked from commit 4a9bc48ba581c986c15271247f0432acecb931db) --- .../suite/federated/percona_bug1739734.result | 44 ++++++++++++++++ .../suite/federated/percona_bug1739734.test | 50 +++++++++++++++++++ storage/federated/ha_federated.cc | 6 ++- 3 files changed, 98 insertions(+), 2 deletions(-) create mode 100644 mysql-test/suite/federated/percona_bug1739734.result create mode 100644 mysql-test/suite/federated/percona_bug1739734.test diff --git a/mysql-test/suite/federated/percona_bug1739734.result b/mysql-test/suite/federated/percona_bug1739734.result new file mode 100644 index 000000000000..5f4bdd9a1318 --- /dev/null +++ b/mysql-test/suite/federated/percona_bug1739734.result @@ -0,0 +1,44 @@ +# +# Bug lp1739734 "Federated table returns error 1430 from storage engine" +# +# This is a bug introduced in the artful/gcc7 compilation fixes, caused by +# a moved break statement. +CREATE DATABASE federated; +CREATE DATABASE federated; +CREATE DATABASE lp1739734; +use lp1739734; +CREATE SERVER local_server +FOREIGN DATA WRAPPER mysql +OPTIONS ( +HOST '127.0.0.1', +PORT MASTER_PORT, +USER 'root', +PASSWORD '', +DATABASE 'lp1739734' +); +CREATE TABLE remote_table ( +a INT, +b INT, +KEY ab (a,b), +KEY ba (b,a) +); +CREATE TABLE local_table ( +a INT, +b INT, +KEY ab (a,b), +KEY ba (b,a) +) ENGINE=federated CONNECTION='local_server/remote_table'; +SELECT * FROM local_table; +a b +SELECT * FROM local_table USE INDEX (ab) +WHERE a<1 AND b=0; +a b +SELECT * FROM local_table USE INDEX (ba) +WHERE a<1 AND b=0; +a b +DROP DATABASE lp1739734; +DROP SERVER local_server; +DROP TABLE IF EXISTS federated.t1; +DROP DATABASE federated; +DROP TABLE IF EXISTS federated.t1; +DROP DATABASE federated; diff --git a/mysql-test/suite/federated/percona_bug1739734.test b/mysql-test/suite/federated/percona_bug1739734.test new file mode 100644 index 000000000000..cbb4c90dd756 --- /dev/null +++ b/mysql-test/suite/federated/percona_bug1739734.test @@ -0,0 +1,50 @@ +--echo # +--echo # Bug lp1739734 "Federated table returns error 1430 from storage engine" +--echo # +--echo # This is a bug introduced in the artful/gcc7 compilation fixes, caused by +--echo # a moved break statement. + +--source suite/federated/include/federated.inc + +connection master; +CREATE DATABASE lp1739734; +use lp1739734; + +--replace_result $MASTER_MYPORT MASTER_PORT +eval CREATE SERVER local_server +FOREIGN DATA WRAPPER mysql +OPTIONS ( + HOST '127.0.0.1', + PORT $MASTER_MYPORT, + USER 'root', + PASSWORD '', + DATABASE 'lp1739734' +); + +CREATE TABLE remote_table ( + a INT, + b INT, + KEY ab (a,b), + KEY ba (b,a) +); + + +CREATE TABLE local_table ( + a INT, + b INT, + KEY ab (a,b), + KEY ba (b,a) +) ENGINE=federated CONNECTION='local_server/remote_table'; + +SELECT * FROM local_table; + +SELECT * FROM local_table USE INDEX (ab) +WHERE a<1 AND b=0; + +SELECT * FROM local_table USE INDEX (ba) +WHERE a<1 AND b=0; + +DROP DATABASE lp1739734; +DROP SERVER local_server; + +--source suite/federated/include/federated_cleanup.inc diff --git a/storage/federated/ha_federated.cc b/storage/federated/ha_federated.cc index 4cd6ab46fac2..052da000d1a4 100644 --- a/storage/federated/ha_federated.cc +++ b/storage/federated/ha_federated.cc @@ -1426,8 +1426,9 @@ bool ha_federated::create_where_from_key(String *to, { goto err; } + break; } - break; + // fallthrough case HA_READ_KEY_OR_NEXT: DBUG_PRINT("info", ("federated HA_READ_KEY_OR_NEXT %d", i)); if (emit_key_part_name(&tmp, key_part) || @@ -1445,8 +1446,9 @@ bool ha_federated::create_where_from_key(String *to, emit_key_part_element(&tmp, key_part, needs_quotes, 0, ptr, part_length)) goto err; + break; } - break; + // fallthrough case HA_READ_KEY_OR_PREV: DBUG_PRINT("info", ("federated HA_READ_KEY_OR_PREV %d", i)); if (emit_key_part_name(&tmp, key_part) || From 5a914e8197b360fcffc6d28df4f358e7aec888e8 Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Fri, 29 Dec 2017 10:25:20 +0530 Subject: [PATCH 0335/1221] From f3fdc09e8dcaecd4d8c9bbad5485bca2b7606953 Mon Sep 17 00:00:00 2001 From: Aditya A Date: Mon, 1 Jan 2018 14:47:28 +0530 Subject: [PATCH 0336/1221] Bug #26935001 ALTER TABLE AUTO_INCREMENT TRIES TO READ INDEX FROM DISCARDED TABLESPACE PROBLEM ------- Alter table was trying to get the autoinc value from the table before setting the new autoinc value ,but since the table is discarded ,it was causing a crash. FIX --- Don't allow alter operation to set the auto increment value when table is discarded. [#rb18176 reviwed by Jimmy ] --- storage/innobase/handler/handler0alter.cc | 51 +++++++++++++++-------- 1 file changed, 33 insertions(+), 18 deletions(-) diff --git a/storage/innobase/handler/handler0alter.cc b/storage/innobase/handler/handler0alter.cc index 437d38e29def..f945f40fc40b 100644 --- a/storage/innobase/handler/handler0alter.cc +++ b/storage/innobase/handler/handler0alter.cc @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2005, 2017, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2005, 2018, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -4604,13 +4604,15 @@ innobase_rename_columns_cache( } /** Get the auto-increment value of the table on commit. -@param ha_alter_info Data used during in-place alter -@param ctx In-place ALTER TABLE context -@param altered_table MySQL table that is being altered -@param old_table MySQL table as it is before the ALTER operation -@return the next auto-increment value (0 if not present) */ +@param[in] ha_alter_info Data used during in-place alter +@param[in,out] ctx In-place ALTER TABLE context + return autoinc value in ctx->max_autoinc +@param altered_table[in] MySQL table that is being altered +@param old_table[in] MySQL table as it is before the ALTER operation +retval true Failure +@retval false Success*/ static MY_ATTRIBUTE((nonnull, warn_unused_result)) -ulonglong +bool commit_get_autoinc( /*===============*/ Alter_inplace_info* ha_alter_info, @@ -4618,23 +4620,28 @@ commit_get_autoinc( const TABLE* altered_table, const TABLE* old_table) { - ulonglong max_autoinc; DBUG_ENTER("commit_get_autoinc"); if (!altered_table->found_next_number_field) { /* There is no AUTO_INCREMENT column in the table after the ALTER operation. */ - max_autoinc = 0; + ctx->max_autoinc = 0; } else if (ctx->add_autoinc != ULINT_UNDEFINED) { /* An AUTO_INCREMENT column was added. Get the last value from the sequence, which may be based on a supplied AUTO_INCREMENT value. */ - max_autoinc = ctx->sequence.last(); + ctx->max_autoinc = ctx->sequence.last(); } else if ((ha_alter_info->handler_flags & Alter_inplace_info::CHANGE_CREATE_OPTION) && (ha_alter_info->create_info->used_fields & HA_CREATE_USED_AUTO)) { + + /* Check if the table is discarded */ + if(dict_table_is_discarded(ctx->old_table)) { + DBUG_RETURN(true); + } + /* An AUTO_INCREMENT value was supplied, but the table was not rebuilt. Get the user-supplied value or the last value from the sequence. */ @@ -4647,7 +4654,8 @@ commit_get_autoinc( dict_index_t* index = dict_table_get_index_on_first_col( ctx->old_table, autoinc_field->field_index); - max_autoinc = ha_alter_info->create_info->auto_increment_value; + ctx->max_autoinc = + ha_alter_info->create_info->auto_increment_value; dict_table_autoinc_lock(ctx->old_table); @@ -4656,8 +4664,8 @@ commit_get_autoinc( if (err != DB_SUCCESS) { ut_ad(0); - max_autoinc = 0; - } else if (max_autoinc <= max_value_table) { + ctx->max_autoinc = 0; + } else if (ctx->max_autoinc <= max_value_table) { ulonglong col_max_value; ulonglong offset; @@ -4665,7 +4673,7 @@ commit_get_autoinc( old_table->found_next_number_field); offset = ctx->prebuilt->autoinc_offset; - max_autoinc = innobase_next_autoinc( + ctx->max_autoinc = innobase_next_autoinc( max_value_table, 1, 1, offset, col_max_value); } @@ -4675,11 +4683,11 @@ commit_get_autoinc( Read the old counter value from the table. */ ut_ad(old_table->found_next_number_field); dict_table_autoinc_lock(ctx->old_table); - max_autoinc = ctx->old_table->autoinc; + ctx->max_autoinc = ctx->old_table->autoinc; dict_table_autoinc_unlock(ctx->old_table); } - DBUG_RETURN(max_autoinc); + DBUG_RETURN(false); } /** Add or drop foreign key constraints to the data dictionary tables, @@ -5660,8 +5668,13 @@ ha_innobase::commit_inplace_alter_table( DBUG_ASSERT(new_clustered == ctx->need_rebuild()); - ctx->max_autoinc = commit_get_autoinc( - ha_alter_info, ctx, altered_table, table); + if (commit_get_autoinc(ha_alter_info, ctx, altered_table, + table)) { + fail = true; + my_error(ER_TABLESPACE_DISCARDED, MYF(0), + table->s->table_name.str); + goto rollback_trx; + } if (ctx->need_rebuild()) { ctx->tmp_name = dict_mem_create_temporary_tablename( @@ -5693,6 +5706,8 @@ ha_innobase::commit_inplace_alter_table( #endif } +rollback_trx: + /* Commit or roll back the changes to the data dictionary. */ if (fail) { From c0938dbc0d67bd5b7a99fec853aadac258b2524d Mon Sep 17 00:00:00 2001 From: Praveenkumar Hulakund Date: Mon, 1 Jan 2018 13:56:50 +0100 Subject: [PATCH 0337/1221] Bug#26040870 - ASSERT ON KILL'ING A STORED ROUTINE INVOCATION Issue here is, execution of the stored routine statement's is interrupted by the KILL operation. In this case diagnostics area is not set but it is accessed to check the error reported by mistake. Hence assert condition to check if error is reported in the diagnostics area is hit. Patch for the Bug25586773, fixes this issue in all the reported versions by adding check to verify if diagnostics area is set before accessing it. As part of this patch, only test case is added for the coverage. Thanks to Laurynas Biveinis for reporting a bug and contributing patch for it. Change-Id: I52d724154be5bfab2f0769915142fb441d61c174 --- mysql-test/r/sp_debug.result | 23 ++++++++++++++++++++ mysql-test/t/sp_debug.test | 42 ++++++++++++++++++++++++++++++++++++ sql/sp_instr.cc | 4 +++- 3 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 mysql-test/r/sp_debug.result create mode 100644 mysql-test/t/sp_debug.test diff --git a/mysql-test/r/sp_debug.result b/mysql-test/r/sp_debug.result new file mode 100644 index 000000000000..89dd34f09f9f --- /dev/null +++ b/mysql-test/r/sp_debug.result @@ -0,0 +1,23 @@ +# +# Bug#26040870 - ASSERT ON KILL'ING A STORED ROUTINE INVOCATION. +# +CREATE TABLE t1 (a INT); +CREATE FUNCTION f1() RETURNS INT +BEGIN +INSERT INTO t1 VALUES (1); +RETURN 1; +END| +SET DEBUG_SYNC= "sp_lex_instr_before_exec_core SIGNAL sp_ready WAIT_FOR sp_finish"; +SELECT f1(); +SET DEBUG_SYNC="now WAIT_FOR sp_ready"; +KILL QUERY sp_con_id; +SET DEBUG_SYNC="now SIGNAL sp_finish"; +# Diagnostics area is not set if routine statement execution is +# interrupted by the KILL operation. Accessing diagnostics area in such +# case results in the issue reported. +# Patch for the bug25586773, checks if diagnostics area is set before +# accessing it. +ERROR 70100: Query execution was interrupted +SET DEBUG_SYNC='RESET'; +DROP TABLE t1; +DROP FUNCTION f1; diff --git a/mysql-test/t/sp_debug.test b/mysql-test/t/sp_debug.test new file mode 100644 index 000000000000..a6d6e9f28b3b --- /dev/null +++ b/mysql-test/t/sp_debug.test @@ -0,0 +1,42 @@ +# +--source include/have_debug.inc + + +--echo # +--echo # Bug#26040870 - ASSERT ON KILL'ING A STORED ROUTINE INVOCATION. +--echo # + +CREATE TABLE t1 (a INT); +DELIMITER |; +CREATE FUNCTION f1() RETURNS INT +BEGIN + INSERT INTO t1 VALUES (1); + RETURN 1; +END| +DELIMITER ;| + +--connect(con1,localhost,root) +--let $sp_con_id= `SELECT CONNECTION_ID()` +SET DEBUG_SYNC= "sp_lex_instr_before_exec_core SIGNAL sp_ready WAIT_FOR sp_finish"; +send SELECT f1(); + +--connection default +SET DEBUG_SYNC="now WAIT_FOR sp_ready"; +--replace_result $sp_con_id sp_con_id +--eval KILL QUERY $sp_con_id +SET DEBUG_SYNC="now SIGNAL sp_finish"; + +--connection con1 +--echo # Diagnostics area is not set if routine statement execution is +--echo # interrupted by the KILL operation. Accessing diagnostics area in such +--echo # case results in the issue reported. +--echo # Patch for the bug25586773, checks if diagnostics area is set before +--echo # accessing it. +--error ER_QUERY_INTERRUPTED +reap; + +--connection default +SET DEBUG_SYNC='RESET'; +DROP TABLE t1; +DROP FUNCTION f1; +disconnect con1; diff --git a/sql/sp_instr.cc b/sql/sp_instr.cc index 664426ac1376..3a9636a056de 100644 --- a/sql/sp_instr.cc +++ b/sql/sp_instr.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2012, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -27,6 +27,7 @@ #include "sql_parse.h" // check_table_access #include "sql_prepare.h" // reinit_stmt_before_use #include "transaction.h" // trans_commit_stmt +#include "debug_sync.h" // DEBUG_SYNC #include @@ -428,6 +429,7 @@ bool sp_lex_instr::reset_lex_and_exec_core(THD *thd, } else { + DEBUG_SYNC(thd, "sp_lex_instr_before_exec_core"); rc= exec_core(thd, nextp); DBUG_PRINT("info",("exec_core returned: %d", rc)); } From 59efd98fc12a80a7d7e900b85d02dd6c452ce759 Mon Sep 17 00:00:00 2001 From: Rahul Sisondia Date: Tue, 2 Jan 2018 12:03:44 +0100 Subject: [PATCH 0338/1221] Bug#26844713 MYSQL CALLS LDAP PLUGIN AUTHENTICATION TWICE Description ----------- Since server option default_authentication_plugin does not allow to set the ldap authentication plugin therefore, server must be using some other plugin (e.g. mysql_native_password) as the option value. When the user tries to connect the server with client that has --default-auth=authentication_ldap_sasl_client set, client calls the authentication plugin twice in order to negotiate with the server during during client-server handshake phase. Therefore, the reported issue is actually not a bug but it works as expected. However, the debug messages which are printed by the client misleads users believing that there happened some problem. Fix --- - Refined the error messages. - Fixed the tpyo error in the variable names. - Added the max method name length threshold of 256 chars as pointed out during review. Testing ------- - Verified the scenarios manually on loki01 with igher debug traces. - Existing test case is sufficient. While troubleshooting this issue, I noticed a few problems with the tests and created two follow up bugs to fix them. Bug#27238252 LDAP authentication plugins are not built on FreeBSD platform. Bug#27238475 IMPROVE A FEW LDAP AUTHENTICATION PLUGIN MTR TESTS COVERAGE ON OTHER PLATFORMS. Bug#27245915 ADD THE LDAP AUTHENTICATION PLUGINS TO THE DEFAULT_AUTHENTICATION_PLUGIN OPTION Branch - mysql-trunk-itch push id: 12267459 Timestamp: 2017-12-08 05:56:01 Branch- mysql-5.7-itch push id: 12276832 Timestamp: 2017-12-09 12:24:00 review: ------- RB#18202 --- .../auth_ldap_sasl_client.cc | 45 +++++++++++++++---- 1 file changed, 36 insertions(+), 9 deletions(-) diff --git a/libmysql/authentication_ldap/auth_ldap_sasl_client.cc b/libmysql/authentication_ldap/auth_ldap_sasl_client.cc index a11c93f48794..7b1793946f70 100644 --- a/libmysql/authentication_ldap/auth_ldap_sasl_client.cc +++ b/libmysql/authentication_ldap/auth_ldap_sasl_client.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -74,19 +74,46 @@ void Sasl_client::set_plugin_info(MYSQL_PLUGIN_VIO *vio, MYSQL *mysql) */ int Sasl_client::read_method_name_from_server() { - int rc_server_read= CR_ERROR; + int rc_server_read= -1; unsigned char* packet= NULL; std::stringstream log_stream; + /* + We are assuming that there will be only one method name passed by + server, and length of the method name will not exceed 256 chars. + */ + const int max_method_name_len= 256; + if (m_vio == NULL) { return rc_server_read; } /** Get authentication method from the server. */ rc_server_read= m_vio->read_packet(m_vio, (unsigned char**)&packet); - strncpy(m_mechanism, (const char*)packet, sizeof(m_mechanism)-1); - m_mechanism[sizeof(m_mechanism)-1]= '\0'; - log_stream << "Sasl_client::read_method_name_from_server : " << m_mechanism; - log_dbg(log_stream.str()); + if (rc_server_read >= 0 && rc_server_read <= max_method_name_len) + { + strncpy(m_mechanism, (const char*)packet, rc_server_read); + m_mechanism[sizeof(m_mechanism) - 1]= '\0'; + log_stream << "Sasl_client::read_method_name_from_server : " + << m_mechanism; + log_dbg(log_stream.str()); + } + else if (rc_server_read > max_method_name_len) + { + rc_server_read= -1; + m_mechanism[0]= '\0'; + log_stream << "Sasl_client::read_method_name_from_server : Method name " + << "is greater then allowed limit of 256 characters."; + log_error(log_stream.str()); + } + else + { + m_mechanism[0]= '\0'; + log_stream << "Sasl_client::read_method_name_from_server : Plugin has " + << "failed to read the method name, make sure that default " + << "authentication plugin and method name specified at " + << "server are correct."; + log_error(log_stream.str()); + } return rc_server_read; } @@ -193,7 +220,7 @@ int Sasl_client::send_sasl_request_to_server(const unsigned char *request, int Sasl_client::sasl_start(char **client_output, int* client_output_length) { int rc_sasl= SASL_FAIL; - const char *mechanisum= NULL; + const char *mechanism= NULL; char* sasl_client_output= NULL; sasl_interact_t *interactions= NULL; std::stringstream log_stream; @@ -208,7 +235,7 @@ int Sasl_client::sasl_start(char **client_output, int* client_output_length) rc_sasl= sasl_client_start(m_connection, m_mechanism, &interactions, (const char**)&sasl_client_output, (unsigned int *)client_output_length, - &mechanisum); + &mechanism); if(rc_sasl == SASL_INTERACT) interact(interactions); } while(rc_sasl == SASL_INTERACT); @@ -278,7 +305,7 @@ static int sasl_authenticate(MYSQL_PLUGIN_VIO *vio, MYSQL *mysql) server_packet_len= sasl_client.read_method_name_from_server(); if (server_packet_len < 0) { - log_error("sasl_authenticate: method name read from server side plug-in failed"); + // Callee has already logged the messages. goto EXIT; } From 8632264c5fbe0e355cecb18629cd31ece278fc23 Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Tue, 2 Jan 2018 12:54:38 +0100 Subject: [PATCH 0339/1221] remove unused variable [Wunused-const-variable] --- rapid/plugin/x/mysqlxtest_src/mysqlxtest.cc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/rapid/plugin/x/mysqlxtest_src/mysqlxtest.cc b/rapid/plugin/x/mysqlxtest_src/mysqlxtest.cc index ed534db4ed07..39e66f243e98 100644 --- a/rapid/plugin/x/mysqlxtest_src/mysqlxtest.cc +++ b/rapid/plugin/x/mysqlxtest_src/mysqlxtest.cc @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -57,7 +57,6 @@ const char * const CMD_ARG_BE_QUIET = "be-quiet"; const char * const MYSQLXTEST_VERSION = "1.0"; const char CMD_ARG_SEPARATOR = '\t'; -const unsigned short MYSQLX_PORT = 33060; #include #include From f0a559b700a644a8b2814678aa6347f0ca22cbec Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Tue, 2 Jan 2018 15:52:35 +0100 Subject: [PATCH 0340/1221] Bug#26105334 WARNINGS WHEN BUILD WITH GCC 7.1.1. Extra warnings when building with DEBUG and -O1 row0sel.cc:5483:8: warning: this statement may fall through sp_head.cc:3355:14: note: 'sprintf' output between 37 and 55 bytes into a destination of size 17 Change-Id: Ibaf01a1ffde1191999273c843d6088082ccaa58d (cherry picked from commit b046b9490b08116381a1d35e1815d7803a5169e2) --- sql/item_geofunc.cc | 4 ++-- sql/sp_head.cc | 5 ++--- storage/innobase/row/row0sel.cc | 3 ++- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/sql/item_geofunc.cc b/sql/item_geofunc.cc index 6d244abce74e..d2f0c6efa186 100644 --- a/sql/item_geofunc.cc +++ b/sql/item_geofunc.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -1867,7 +1867,7 @@ append_geometry(Geometry::wkb_parser *parser, Json_object *geometry, } else { - bool result; + bool result= false; Json_array *points= new (std::nothrow) Json_array(); if (points == NULL || collection->append_alias(points)) return true; diff --git a/sql/sp_head.cc b/sql/sp_head.cc index 5fd460b536df..ee2fa9d9cb23 100644 --- a/sql/sp_head.cc +++ b/sql/sp_head.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2002, 2016, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2002, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -1970,8 +1970,7 @@ bool sp_head::show_routine_code(THD *thd) if (ip != i->get_ip()) { const char *format= "Instruction at position %u has m_ip=%u"; - char tmp[sizeof(format) + 2 * sizeof(uint) + 1]; - + char tmp[64 + 2 * MY_INT32_NUM_DECIMAL_DIGITS]; sprintf(tmp, format, ip, i->get_ip()); /* Since this is for debugging purposes only, we don't bother to diff --git a/storage/innobase/row/row0sel.cc b/storage/innobase/row/row0sel.cc index 4e740d84ac6c..be9089a4c893 100644 --- a/storage/innobase/row/row0sel.cc +++ b/storage/innobase/row/row0sel.cc @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1997, 2017, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1997, 2018, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2008, Google Inc. Portions of this file contain modifications contributed and copyrighted by @@ -5525,6 +5525,7 @@ row_search_mvcc( prebuilt->new_rec_locks = 1; } err = DB_SUCCESS; + // Fall through case DB_SUCCESS: break; case DB_LOCK_WAIT: From 7ae5ad3cba65dbf53d99847711dfff822733b393 Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Tue, 2 Jan 2018 15:53:55 +0100 Subject: [PATCH 0341/1221] INCLUDE_DIRECTORIES(SYSTEM BOOST...) to silence compiler warnings. --- rapid/plugin/keyring_udf/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rapid/plugin/keyring_udf/CMakeLists.txt b/rapid/plugin/keyring_udf/CMakeLists.txt index 6adbaa9d6657..83672bbd1a87 100644 --- a/rapid/plugin/keyring_udf/CMakeLists.txt +++ b/rapid/plugin/keyring_udf/CMakeLists.txt @@ -1,4 +1,4 @@ -## Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. +## Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -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 -INCLUDE_DIRECTORIES(${BOOST_PATCHES_DIR} ${BOOST_INCLUDE_DIR}) +INCLUDE_DIRECTORIES(SYSTEM ${BOOST_PATCHES_DIR} ${BOOST_INCLUDE_DIR}) MYSQL_ADD_PLUGIN(keyring_udf keyring_udf.cc From 0076979d0eae766d1a0a9c02b87a6899383fa003 Mon Sep 17 00:00:00 2001 From: Jon Olav Hauglid Date: Tue, 2 Jan 2018 15:54:17 +0100 Subject: [PATCH 0342/1221] Bug#23106060: FIX COMPILE WARNINGS REPORTED BY CLANG 3.8 Fix new compile warnings reported by Clang 3.8. Initialize variables that can be used uninitialized otherwise. (cherry picked from commit 8eb3edfe73f327d37caa29e05aad69a1a8014d29) --- client/mysqladmin.cc | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/client/mysqladmin.cc b/client/mysqladmin.cc index 9a44f5bafe54..d8082f7e24e1 100644 --- a/client/mysqladmin.cc +++ b/client/mysqladmin.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -1092,12 +1092,14 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv) /* Warn about password being set in non ssl connection */ #if defined(HAVE_OPENSSL) && !defined(EMBEDDED_LIBRARY) - uint ssl_mode; - if (!mysql_get_option(mysql, MYSQL_OPT_SSL_MODE, &ssl_mode) && - ssl_mode <= SSL_MODE_PREFERRED) { - fprintf(stderr, "Warning: Since password will be sent to server in " - "plain text, use ssl connection to ensure password safety.\n"); + uint ssl_mode= 0; + if (!mysql_get_option(mysql, MYSQL_OPT_SSL_MODE, &ssl_mode) && + ssl_mode <= SSL_MODE_PREFERRED) + { + fprintf(stderr, "Warning: Since password will be sent to server in " + "plain text, use ssl connection to ensure password safety.\n"); + } } #endif memset(buff, 0, sizeof(buff)); From 9289606b59ff60057b394419d65303ec2ec3aca0 Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Tue, 2 Jan 2018 15:54:39 +0100 Subject: [PATCH 0343/1221] Fix clang warning equality comparison with extraneous parentheses [-Wparentheses-equality] --- sql/partitioning/partition_handler.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sql/partitioning/partition_handler.cc b/sql/partitioning/partition_handler.cc index cb00dc301582..f5be5d8b6e4e 100644 --- a/sql/partitioning/partition_handler.cc +++ b/sql/partitioning/partition_handler.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2005, 2017, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2005, 2018, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -3051,7 +3051,7 @@ int Partition_helper::handle_unordered_next(uchar *buf, bool is_next_same) m_start_key.key, m_start_key.length); } - else if ((m_index_scan_type == PARTITION_READ_RANGE)) + else if (m_index_scan_type == PARTITION_READ_RANGE) { DBUG_ASSERT(buf == m_table->record[0]); error= read_range_next_in_part(m_part_spec.start_part, NULL); From 1e938c0df869108eb31898c8f7007de02b6df2f5 Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Tue, 2 Jan 2018 15:55:08 +0100 Subject: [PATCH 0344/1221] Bug#27294753 FIX POSSIBLE LEAKS REPORTED BY RUNNING UNIT TESTS WITH VALGRIND Backport to 5.7 In teardown_server_for_unit_tests(), copy-paste cleanup/shutdown code from mysqld.cc in order to remove global data structures reported as still reachable by valgrind. --- unittest/gunit/test_utils.cc | 53 ++++++++++++++++++++++++++++++++---- 1 file changed, 48 insertions(+), 5 deletions(-) diff --git a/unittest/gunit/test_utils.cc b/unittest/gunit/test_utils.cc index d83dcf50efa2..c435081df14b 100644 --- a/unittest/gunit/test_utils.cc +++ b/unittest/gunit/test_utils.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -18,10 +18,28 @@ #include #include "test_utils.h" -#include "rpl_handler.h" // delegates_init() + +#include "binlog.h" +#include "conn_handler/connection_handler_manager.h" +#include "debug_sync.h" +#include "derror.h" +#include "item_create.h" +#include "item_func.h" +#include "keycache.h" +#include "keycaches.h" +#include "log.h" // query_logger +#include "my_sys.h" +#include "mysqld.h" #include "mysqld_thd_manager.h" // Global_THD_manager #include "opt_costconstantcache.h" // optimizer cost constant cache -#include "log.h" // query_logger +#include "my_regex.h" +#include "rpl_handler.h" // delegates_init() +#include "rpl_filter.h" +#include "sql_db.h" +#include "sql_common.h" +#include "sql_locale.h" +#include "sql_plugin.h" +#include "sql_show.h" namespace my_testing { @@ -43,8 +61,8 @@ extern "C" void test_error_handler_hook(uint err, const char *str, myf MyFlags) void setup_server_for_unit_tests() { - static char *my_name= strdup(my_progname); - char *argv[] = { my_name, + std::string my_name(my_progname); + char *argv[] = { const_cast(my_name.c_str()), const_cast("--secure-file-priv=NULL"), const_cast("--early_plugin_load=\"\""), const_cast("--log_syslog=0"), @@ -68,12 +86,37 @@ void setup_server_for_unit_tests() void teardown_server_for_unit_tests() { + flush_error_log_messages(); + mysql_bin_log.cleanup(); + my_dboptions_cache_free(); + ignore_db_dirs_free(); sys_var_end(); delegates_destroy(); transaction_cache_free(); gtid_server_cleanup(); query_logger.cleanup(); + item_func_sleep_free(); + item_create_cleanup(); delete_optimizer_cost_module(); + key_caches.delete_elements((void (*)(const char*, uchar*)) free_key_cache); + multi_keycache_free(); + free_tmpdir(&mysql_tmpdir_list); + bitmap_free(&temp_pool); + delete binlog_filter; + delete rpl_filter; + my_regex_end(); +#if defined(ENABLED_DEBUG_SYNC) + /* End the debug sync facility. See debug_sync.cc. */ + debug_sync_end(); +#endif /* defined(ENABLED_DEBUG_SYNC) */ + cleanup_errmsgs(); + Connection_handler_manager::destroy_instance(); + mysql_client_plugin_deinit(); + free_list(opt_early_plugin_load_list_ptr); + free_list(opt_plugin_load_list_ptr); + deinit_errmessage(); // finish server errs + Global_THD_manager::destroy_instance(); + my_end(0); } void Server_initializer::set_expected_error(uint val) From 7ff6a932c929fa4772cc6c4acf86403908654b3c Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Tue, 2 Jan 2018 15:55:29 +0100 Subject: [PATCH 0345/1221] Bug#26911878 - USE AFTER FREE IN RAPID/PLUGIN/X/MYSQLXTEST_SRC/MYSQLX_PROTOCOL.CC Temporary post-push fix: community build is broken on windows, only links OK for cmake -DLINK_STATIC_RUNTIME_LIBRARIES=ON --- rapid/unittest/gunit/xplugin/CMakeLists.txt | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/rapid/unittest/gunit/xplugin/CMakeLists.txt b/rapid/unittest/gunit/xplugin/CMakeLists.txt index 7b53f68124d5..7ef856800da4 100644 --- a/rapid/unittest/gunit/xplugin/CMakeLists.txt +++ b/rapid/unittest/gunit/xplugin/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -17,6 +17,13 @@ IF(NOT GMOCK_FOUND) RETURN() ENDIF() +IF(WIN32 AND NOT LINK_STATIC_RUNTIME_LIBRARIES) + MESSAGE(WARNING + "This unit test can only be built with " + "cmake -DLINK_STATIC_RUNTIME_LIBRARIES=ON") + RETURN() +ENDIF() + IF(SSL_DEFINES) ADD_DEFINITIONS(${SSL_DEFINES}) ENDIF() From 7ac361bcbfda6623090ffb2cf37a96296865b30f Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Tue, 2 Jan 2018 11:54:07 -0700 Subject: [PATCH 0346/1221] MYR-219 : rocksdb.bulk_load_unsorted_errors missing its .result file - Recorded missing result file and reviewed for proper content. --- mysql-test/suite/rocksdb/r/bulk_load_unsorted_errors.result | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 mysql-test/suite/rocksdb/r/bulk_load_unsorted_errors.result diff --git a/mysql-test/suite/rocksdb/r/bulk_load_unsorted_errors.result b/mysql-test/suite/rocksdb/r/bulk_load_unsorted_errors.result new file mode 100644 index 000000000000..d8e5b92e8975 --- /dev/null +++ b/mysql-test/suite/rocksdb/r/bulk_load_unsorted_errors.result @@ -0,0 +1,4 @@ +SET rocksdb_bulk_load=1; +SET rocksdb_bulk_load_allow_unsorted=1; +ERROR HY000: Error when executing command SET: Cannot change this setting while bulk load is enabled +SET rocksdb_bulk_load=0; From e455cd5ed05d6db3c2232d1b60ef0ac3e5e0cd5e Mon Sep 17 00:00:00 2001 From: Dima Date: Fri, 29 Dec 2017 23:28:08 +0300 Subject: [PATCH 0347/1221] Fixed DOC-660 by specifying rocksdb_rpl_skip_tx_api variable as removed one --- doc/source/myrocks/variables.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/source/myrocks/variables.rst b/doc/source/myrocks/variables.rst index 6825d08adf1f..95bb577a58ae 100644 --- a/doc/source/myrocks/variables.rst +++ b/doc/source/myrocks/variables.rst @@ -1874,6 +1874,7 @@ Resets MyRocks internal statistics dynamically .. variable:: rocksdb_rpl_skip_tx_api :version 5.7.19-17: Implemented + :version 5.7.20-19: Variable removed :cli: ``--rocksdb-rpl-skip-tx-api`` :dyn: No :scope: Global From 5a663ba08cfae7c064012b95a27f1ec6a64160e6 Mon Sep 17 00:00:00 2001 From: Przemek Skibinski Date: Thu, 28 Dec 2017 13:09:41 +0100 Subject: [PATCH 0348/1221] lp1126242: Fix embedded server build in PS 5.5 - don't use global stats if `EMBEDDED_LIBRARY` is defined - move `init_strvar_from_file()` outside of `ifdef HAVE_REPLICATION` - define empty `acl_is_utility_user()` and `refresh_concurrent_conn_stats()` if `NO_EMBEDDED_ACCESS_CHECKS` is defined --- libmysqld/CMakeLists.txt | 3 ++- sql/mysqld.cc | 6 ++++++ sql/slave.cc | 10 ++++++++++ sql/sql_acl.cc | 13 +++++++++++++ sql/sql_connect.cc | 4 ++++ sql/sql_load.cc | 7 ++++--- sql/sql_parse.cc | 2 ++ sql/sql_prepare.cc | 8 ++++++++ sql/sql_reload.cc | 2 ++ 9 files changed, 51 insertions(+), 4 deletions(-) diff --git a/libmysqld/CMakeLists.txt b/libmysqld/CMakeLists.txt index abbf887e1e62..fd7b2552c34c 100644 --- a/libmysqld/CMakeLists.txt +++ b/libmysqld/CMakeLists.txt @@ -69,7 +69,8 @@ SET(SQL_EMBEDDED_SOURCES emb_qcache.cc libmysqld.c lib_sql.cc ../sql/sql_lex.cc ../sql/keycaches.cc ../sql/sql_list.cc ../sql/sql_load.cc ../sql/sql_locale.cc ../sql/sql_binlog.cc ../sql/sql_manager.cc - ../sql/sql_parse.cc ../sql/sql_partition.cc ../sql/sql_plugin.cc + ../sql/sql_parse.cc ../sql/query_response_time.cc ../sql/slave.cc + ../sql/sql_partition.cc ../sql/sql_plugin.cc ../sql/debug_sync.cc ../sql/sql_prepare.cc ../sql/sql_rename.cc ../sql/sql_repl.cc ../sql/sql_select.cc ../sql/sql_servers.cc diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 7c512401d04a..3054d872727d 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -1578,11 +1578,13 @@ void clean_up(bool print_message) #ifdef HAVE_RESPONSE_TIME_DISTRIBUTION query_response_time_free(); #endif // HAVE_RESPONSE_TIME_DISTRIBUTION +#ifndef EMBEDDED_LIBRARY free_global_user_stats(); free_global_client_stats(); free_global_thread_stats(); free_global_table_stats(); free_global_index_stats(); +#endif #ifdef HAVE_REPLICATION end_slave_list(); #endif @@ -3909,8 +3911,10 @@ static int init_server_components() init_slave_list(); #endif +#ifndef EMBEDDED_LIBRARY init_global_table_stats(); init_global_index_stats(); +#endif /* Setup logs */ @@ -4306,9 +4310,11 @@ a file name for --log-bin-index option", opt_binlog_index_name); init_max_user_conn(); init_update_queries(); +#ifndef EMBEDDED_LIBRARY init_global_user_stats(); init_global_client_stats(); init_global_thread_stats(); +#endif DBUG_RETURN(0); } diff --git a/sql/slave.cc b/sql/slave.cc index 270f26aaf49e..1ed24bb0cfbf 100644 --- a/sql/slave.cc +++ b/sql/slave.cc @@ -69,7 +69,12 @@ MY_BITMAP slave_error_mask; char slave_skip_error_names[SHOW_VAR_FUNC_BUFF_SIZE]; char* slave_load_tmpdir = 0; +#endif /* HAVE_REPLICATION */ + Master_info *active_mi= 0; + +#ifdef HAVE_REPLICATION + my_bool replicate_same_server_id; ulonglong relay_log_space_limit = 0; @@ -1034,6 +1039,9 @@ const char *print_slave_db_safe(const char* db) DBUG_RETURN((db ? db : "")); } +#endif /* HAVE_REPLICATION */ + + int init_strvar_from_file(char *var, int max_size, IO_CACHE *f, const char *default_val) { @@ -1106,6 +1114,8 @@ int init_floatvar_from_file(float* var, IO_CACHE* f, float default_val) } +#ifdef HAVE_REPLICATION + /** A master info read method diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc index 745d6f7e6690..bfbd9a6a0125 100644 --- a/sql/sql_acl.cc +++ b/sql/sql_acl.cc @@ -5954,6 +5954,9 @@ static void add_user_option(String *grant, ulong value, const char *name) } } +#endif /*NO_EMBEDDED_ACCESS_CHECKS */ + + const char *command_array[]= { "SELECT", "INSERT", "UPDATE", "DELETE", "CREATE", "DROP", "RELOAD", @@ -5972,6 +5975,9 @@ TYPELIB utility_user_privileges_typelib= NULL }; + +#ifndef NO_EMBEDDED_ACCESS_CHECKS + uint command_lengths[]= { 6, 6, 6, 6, 6, 4, 6, 8, 7, 4, 5, 10, 5, 5, 14, 5, 23, 11, 7, 17, 18, 11, 9, @@ -8195,6 +8201,13 @@ show_proxy_grants(THD *thd, LEX_USER *user, char *buff, size_t buffsize) return error; } +#else + +my_bool acl_is_utility_user(const char *user, const char *host, + const char *ip) +{ + return FALSE; +} #endif /*NO_EMBEDDED_ACCESS_CHECKS */ diff --git a/sql/sql_connect.cc b/sql/sql_connect.cc index 7d875fa134cc..fe260c3b04fe 100644 --- a/sql/sql_connect.cc +++ b/sql/sql_connect.cc @@ -902,6 +902,10 @@ void release_user_connection(THD *thd) DBUG_VOID_RETURN; } +void refresh_concurrent_conn_stats() +{ +} + #endif /* NO_EMBEDDED_ACCESS_CHECKS */ /* diff --git a/sql/sql_load.cc b/sql/sql_load.cc index f28f78a9e1b0..c06a61058352 100644 --- a/sql/sql_load.cc +++ b/sql/sql_load.cc @@ -192,6 +192,7 @@ int mysql_load(THD *thd,sql_exchange *ex,TABLE_LIST *table_list, LOAD_FILE_INFO lf_info; THD::killed_state killed_status= THD::NOT_KILLED; bool is_concurrent; + bool transactional_table; #endif char *db = table_list->db; // This is never null /* @@ -201,7 +202,6 @@ int 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; DBUG_ENTER("mysql_load"); /* @@ -270,8 +270,8 @@ int mysql_load(THD *thd,sql_exchange *ex,TABLE_LIST *table_list, } table= table_list->table; - transactional_table= table->file->has_transactions(); #ifndef EMBEDDED_LIBRARY + transactional_table= table->file->has_transactions(); is_concurrent= (table_list->lock_type == TL_WRITE_CONCURRENT_INSERT); #endif @@ -676,7 +676,8 @@ int mysql_load(THD *thd,sql_exchange *ex,TABLE_LIST *table_list, /* ok to client sent only after binlog write and engine commit */ my_ok(thd, info.copied + info.deleted, 0L, name); err: - DBUG_ASSERT(transactional_table || !(info.copied || info.deleted) || + DBUG_ASSERT(table->file->has_transactions() || + !(info.copied || info.deleted) || thd->transaction.stmt.modified_non_trans_table); table->file->ha_release_auto_increment(); table->auto_increment_field_not_null= FALSE; diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index c5fc551be460..ca1e0c857bcc 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -6174,7 +6174,9 @@ void mysql_parse(THD *thd, char *rawbuf, uint length, if (unlikely(opt_userstat)) { thd->update_stats(true); +#ifndef EMBEDDED_LIBRARY update_global_user_stats(thd, true, time(NULL)); +#endif } DBUG_VOID_RETURN; diff --git a/sql/sql_prepare.cc b/sql/sql_prepare.cc index fee7c170f65b..3ea1fb0e1234 100644 --- a/sql/sql_prepare.cc +++ b/sql/sql_prepare.cc @@ -2288,7 +2288,9 @@ void mysqld_stmt_prepare(THD *thd, const char *packet, uint packet_length) if (unlikely(opt_userstat)) { thd->update_stats(true); +#ifndef EMBEDDED_LIBRARY update_global_user_stats(thd, true, time(NULL)); +#endif } DBUG_VOID_RETURN; @@ -2745,7 +2747,9 @@ void mysqld_stmt_execute(THD *thd, char *packet_arg, uint packet_length) if (unlikely(opt_userstat)) { thd->update_stats(true); +#ifndef EMBEDDED_LIBRARY update_global_user_stats(thd, true, time(NULL)); +#endif } DBUG_VOID_RETURN; @@ -2926,7 +2930,9 @@ void mysqld_stmt_fetch(THD *thd, char *packet, uint packet_length) if (unlikely(opt_userstat)) { thd->update_stats(true); +#ifndef EMBEDDED_LIBRARY update_global_user_stats(thd, true, time(NULL)); +#endif } DBUG_VOID_RETURN; @@ -3058,7 +3064,9 @@ void mysqld_stmt_reset(THD *thd, char *packet) if (unlikely(opt_userstat)) { thd->update_stats(true); +#ifndef EMBEDDED_LIBRARY update_global_user_stats(thd, true, time(NULL)); +#endif } DBUG_VOID_RETURN; diff --git a/sql/sql_reload.cc b/sql/sql_reload.cc index f4fc585acf32..b548a2e5c68e 100644 --- a/sql/sql_reload.cc +++ b/sql/sql_reload.cc @@ -329,6 +329,7 @@ bool reload_acl_and_cache(THD *thd, unsigned long options, #endif // HAVE_RESPONSE_TIME_DISTRIBUTION if (options & REFRESH_USER_RESOURCES) reset_mqh((LEX_USER *) NULL, 0); /* purecov: inspected */ +#ifndef EMBEDDED_LIBRARY if (options & REFRESH_TABLE_STATS) { mysql_mutex_lock(&LOCK_global_table_stats); @@ -363,6 +364,7 @@ bool reload_acl_and_cache(THD *thd, unsigned long options, } mysql_mutex_unlock(&LOCK_global_user_client_stats); } +#endif if (options & REFRESH_FLUSH_PAGE_BITMAPS) { result= ha_flush_changed_page_bitmaps(); From ec4ed1d52fbd0fc60f81235695dfecd232145180 Mon Sep 17 00:00:00 2001 From: Marek Szymczak Date: Wed, 3 Jan 2018 15:27:35 +0100 Subject: [PATCH 0349/1221] Bug#27302151 MEMORY LEAK IN TEST MAIN.AUDIT_PLUGIN_2 Problem: ======== audit_null plugin has ability to record audit events. Buffer containing recorded events is assigned to client THD, which is not freed later. Fix: ==== audit_null plugin keeps track of the buffer that is assigned to the client THD. The plugin releases the buffer, when the client THD will not do it by itself. Reviewed-by: ============ Marc Alff --- plugin/audit_null/audit_null.c | 58 ++++++++++++++++++++++++++++------ 1 file changed, 49 insertions(+), 9 deletions(-) diff --git a/plugin/audit_null/audit_null.c b/plugin/audit_null/audit_null.c index 6eecb34a1818..435508c2e645 100644 --- a/plugin/audit_null/audit_null.c +++ b/plugin/audit_null/audit_null.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as @@ -88,6 +88,16 @@ LEX_CSTRING event_names[][6] = { static volatile int number_of_calls; +/* + Record buffer mutex. +*/ +static mysql_mutex_t g_record_buffer_mutex; + +/* + Event recording buffer. +*/ +static char *g_record_buffer; + #define AUDIT_NULL_VAR(x) static volatile int number_of_calls_ ## x; #include "audit_null_variables.h" #undef AUDIT_NULL_VAR @@ -174,6 +184,12 @@ static int audit_null_plugin_init(void *arg MY_ATTRIBUTE((unused))) *((int*)var->value) = 0; } + mysql_mutex_init(PSI_NOT_INSTRUMENTED, + &g_record_buffer_mutex, + MY_MUTEX_INIT_FAST); + + g_record_buffer= NULL; + return(0); } @@ -193,6 +209,12 @@ static int audit_null_plugin_init(void *arg MY_ATTRIBUTE((unused))) static int audit_null_plugin_deinit(void *arg MY_ATTRIBUTE((unused))) { + my_free((void *)(g_record_buffer)); + + g_record_buffer= NULL; + + mysql_mutex_destroy(&g_record_buffer_mutex); + return(0); } @@ -244,8 +266,8 @@ static LEX_CSTRING get_token(const char **str) return ret; } -static void add_event(MYSQL_THD thd, const char *var, LEX_CSTRING event, - const char *data, size_t data_length) +static char *add_event(MYSQL_THD thd, const char *var, LEX_CSTRING event, + const char *data, size_t data_length) { LEX_CSTRING str; size_t size; @@ -261,7 +283,7 @@ static void add_event(MYSQL_THD thd, const char *var, LEX_CSTRING event, buffer[size - (str.length == 0 ? 2 : 1)] = '\0'; - THDVAR(thd, event_record)= buffer; + return buffer; } static void process_event_record(MYSQL_THD thd, LEX_CSTRING event_name, @@ -282,11 +304,22 @@ static void process_event_record(MYSQL_THD thd, LEX_CSTRING event_name, a record variable */ const char *buffer= THDVAR(thd, event_record); + char *new_buffer= NULL; /* Add event. */ - add_event(thd, buffer, event_name, data, data_length); + mysql_mutex_lock(&g_record_buffer_mutex); + + /* Only one THD is capable of adding events into the buffer. */ + if (buffer == g_record_buffer) + { + new_buffer= add_event(thd, buffer, event_name, data, data_length); + g_record_buffer= new_buffer; + my_free((void *)(buffer)); + } + + mysql_mutex_unlock(&g_record_buffer_mutex); - my_free((void *)(buffer)); + THDVAR(thd, event_record)= new_buffer; if (!my_charset_latin1.coll->strnncoll(&my_charset_latin1, (const uchar *)record_begin.str, @@ -315,11 +348,18 @@ static void process_event_record(MYSQL_THD thd, LEX_CSTRING event_name, buffer= THDVAR(thd, event_record); - my_free((void *)(buffer)); + mysql_mutex_lock(&g_record_buffer_mutex); - THDVAR(thd, event_record)= 0; + if (buffer == g_record_buffer) + { + my_free((void *)(buffer)); + + g_record_buffer= add_event(thd, "", event_name, data, data_length); + + THDVAR(thd, event_record)= g_record_buffer; + } - add_event(thd, "", event_name, data, data_length); + mysql_mutex_unlock(&g_record_buffer_mutex); /* Add event. */ From e7d6b1523f704632b08ab2a959dd060b4909df6d Mon Sep 17 00:00:00 2001 From: Erlend Dahl Date: Thu, 4 Jan 2018 06:34:05 +0100 Subject: [PATCH 0350/1221] Revert "Bug#27302151 MEMORY LEAK IN TEST MAIN.AUDIT_PLUGIN_2" --- plugin/audit_null/audit_null.c | 56 +++++----------------------------- 1 file changed, 8 insertions(+), 48 deletions(-) diff --git a/plugin/audit_null/audit_null.c b/plugin/audit_null/audit_null.c index 435508c2e645..741fccebd524 100644 --- a/plugin/audit_null/audit_null.c +++ b/plugin/audit_null/audit_null.c @@ -88,16 +88,6 @@ LEX_CSTRING event_names[][6] = { static volatile int number_of_calls; -/* - Record buffer mutex. -*/ -static mysql_mutex_t g_record_buffer_mutex; - -/* - Event recording buffer. -*/ -static char *g_record_buffer; - #define AUDIT_NULL_VAR(x) static volatile int number_of_calls_ ## x; #include "audit_null_variables.h" #undef AUDIT_NULL_VAR @@ -184,12 +174,6 @@ static int audit_null_plugin_init(void *arg MY_ATTRIBUTE((unused))) *((int*)var->value) = 0; } - mysql_mutex_init(PSI_NOT_INSTRUMENTED, - &g_record_buffer_mutex, - MY_MUTEX_INIT_FAST); - - g_record_buffer= NULL; - return(0); } @@ -209,12 +193,6 @@ static int audit_null_plugin_init(void *arg MY_ATTRIBUTE((unused))) static int audit_null_plugin_deinit(void *arg MY_ATTRIBUTE((unused))) { - my_free((void *)(g_record_buffer)); - - g_record_buffer= NULL; - - mysql_mutex_destroy(&g_record_buffer_mutex); - return(0); } @@ -266,8 +244,8 @@ static LEX_CSTRING get_token(const char **str) return ret; } -static char *add_event(MYSQL_THD thd, const char *var, LEX_CSTRING event, - const char *data, size_t data_length) +static void add_event(MYSQL_THD thd, const char *var, LEX_CSTRING event, + const char *data, size_t data_length) { LEX_CSTRING str; size_t size; @@ -283,7 +261,7 @@ static char *add_event(MYSQL_THD thd, const char *var, LEX_CSTRING event, buffer[size - (str.length == 0 ? 2 : 1)] = '\0'; - return buffer; + THDVAR(thd, event_record)= buffer; } static void process_event_record(MYSQL_THD thd, LEX_CSTRING event_name, @@ -304,22 +282,11 @@ static void process_event_record(MYSQL_THD thd, LEX_CSTRING event_name, a record variable */ const char *buffer= THDVAR(thd, event_record); - char *new_buffer= NULL; /* Add event. */ - mysql_mutex_lock(&g_record_buffer_mutex); - - /* Only one THD is capable of adding events into the buffer. */ - if (buffer == g_record_buffer) - { - new_buffer= add_event(thd, buffer, event_name, data, data_length); - g_record_buffer= new_buffer; - my_free((void *)(buffer)); - } - - mysql_mutex_unlock(&g_record_buffer_mutex); + add_event(thd, buffer, event_name, data, data_length); - THDVAR(thd, event_record)= new_buffer; + my_free((void *)(buffer)); if (!my_charset_latin1.coll->strnncoll(&my_charset_latin1, (const uchar *)record_begin.str, @@ -348,18 +315,11 @@ static void process_event_record(MYSQL_THD thd, LEX_CSTRING event_name, buffer= THDVAR(thd, event_record); - mysql_mutex_lock(&g_record_buffer_mutex); + my_free((void *)(buffer)); - if (buffer == g_record_buffer) - { - my_free((void *)(buffer)); - - g_record_buffer= add_event(thd, "", event_name, data, data_length); - - THDVAR(thd, event_record)= g_record_buffer; - } + THDVAR(thd, event_record)= 0; - mysql_mutex_unlock(&g_record_buffer_mutex); + add_event(thd, "", event_name, data, data_length); /* Add event. */ From 94a01583fd81848b3eb8f1605b460f57eb228dc1 Mon Sep 17 00:00:00 2001 From: Thirunarayanan Balathandayuthapani Date: Thu, 4 Jan 2018 11:31:09 +0530 Subject: [PATCH 0351/1221] Bug #26958695 INNODB NESTED STORED FIELD WITH CONSTRAINT KEY PRODUCE BROKEN TABLE Problem: ====== Combination of stored field on another stored field and constraint Foreign key produces broken table. Solution: ===== If the stored column is based on another stored/virtual column then base column information can have NULL. Ignore the above condition while checking the FK is present in stored column. Reviewed-by: Jimmy Yang --- storage/innobase/dict/dict0crea.cc | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/storage/innobase/dict/dict0crea.cc b/storage/innobase/dict/dict0crea.cc index 63e44366fe15..dbe5690bd4f0 100644 --- a/storage/innobase/dict/dict0crea.cc +++ b/storage/innobase/dict/dict0crea.cc @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2018, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -2245,6 +2245,13 @@ dict_foreign_base_for_stored( dict_s_col_t s_col = *it; for (ulint j = 0; j < s_col.num_base; j++) { + /** If the stored column can refer to virtual column + or another stored column then it can points to NULL. */ + + if (s_col.base_col[j] == NULL) { + continue; + } + if (strcmp(col_name, dict_table_get_col_name( table, s_col.base_col[j]->ind)) == 0) { From 823cab4f9eef149599c5a4264d04ea0c9f3a8561 Mon Sep 17 00:00:00 2001 From: Harin Vadodaria Date: Thu, 4 Jan 2018 07:17:48 +0100 Subject: [PATCH 0352/1221] Bug#27302151 MEMORY LEAK IN TEST MAIN.AUDIT_PLUGIN_2 Problem: ======== audit_null plugin has ability to record audit events. Buffer containing recorded events is assigned to client THD, which is not freed later. Fix: ==== audit_null plugin keeps track of the buffer that is assigned to the client THD. The plugin releases the buffer, when the client THD will not do it by itself. Reviewed-by: ============ Marc Alff --- plugin/audit_null/audit_null.c | 56 +++++++++++++++++++++++++++++----- 1 file changed, 48 insertions(+), 8 deletions(-) diff --git a/plugin/audit_null/audit_null.c b/plugin/audit_null/audit_null.c index 741fccebd524..f4780e679dc6 100644 --- a/plugin/audit_null/audit_null.c +++ b/plugin/audit_null/audit_null.c @@ -88,6 +88,16 @@ LEX_CSTRING event_names[][6] = { static volatile int number_of_calls; +/* + Record buffer mutex. +*/ +static mysql_mutex_t g_record_buffer_mutex; + +/* + Event recording buffer. +*/ +static char *g_record_buffer; + #define AUDIT_NULL_VAR(x) static volatile int number_of_calls_ ## x; #include "audit_null_variables.h" #undef AUDIT_NULL_VAR @@ -174,6 +184,12 @@ static int audit_null_plugin_init(void *arg MY_ATTRIBUTE((unused))) *((int*)var->value) = 0; } + mysql_mutex_init(PSI_NOT_INSTRUMENTED, + &g_record_buffer_mutex, + MY_MUTEX_INIT_FAST); + + g_record_buffer= NULL; + return(0); } @@ -193,6 +209,12 @@ static int audit_null_plugin_init(void *arg MY_ATTRIBUTE((unused))) static int audit_null_plugin_deinit(void *arg MY_ATTRIBUTE((unused))) { + my_free((void *)(g_record_buffer)); + + g_record_buffer= NULL; + + mysql_mutex_destroy(&g_record_buffer_mutex); + return(0); } @@ -244,8 +266,8 @@ static LEX_CSTRING get_token(const char **str) return ret; } -static void add_event(MYSQL_THD thd, const char *var, LEX_CSTRING event, - const char *data, size_t data_length) +static char *add_event(const char *var, LEX_CSTRING event, + const char *data, size_t data_length) { LEX_CSTRING str; size_t size; @@ -261,7 +283,7 @@ static void add_event(MYSQL_THD thd, const char *var, LEX_CSTRING event, buffer[size - (str.length == 0 ? 2 : 1)] = '\0'; - THDVAR(thd, event_record)= buffer; + return buffer; } static void process_event_record(MYSQL_THD thd, LEX_CSTRING event_name, @@ -282,11 +304,22 @@ static void process_event_record(MYSQL_THD thd, LEX_CSTRING event_name, a record variable */ const char *buffer= THDVAR(thd, event_record); + char *new_buffer= NULL; /* Add event. */ - add_event(thd, buffer, event_name, data, data_length); + mysql_mutex_lock(&g_record_buffer_mutex); + + /* Only one THD is capable of adding events into the buffer. */ + if (buffer == g_record_buffer) + { + new_buffer= add_event(buffer, event_name, data, data_length); + g_record_buffer= new_buffer; + my_free((void *)(buffer)); + } + + mysql_mutex_unlock(&g_record_buffer_mutex); - my_free((void *)(buffer)); + THDVAR(thd, event_record)= new_buffer; if (!my_charset_latin1.coll->strnncoll(&my_charset_latin1, (const uchar *)record_begin.str, @@ -315,11 +348,18 @@ static void process_event_record(MYSQL_THD thd, LEX_CSTRING event_name, buffer= THDVAR(thd, event_record); - my_free((void *)(buffer)); + mysql_mutex_lock(&g_record_buffer_mutex); - THDVAR(thd, event_record)= 0; + if (buffer == g_record_buffer) + { + my_free((void *)(buffer)); + + g_record_buffer= add_event("", event_name, data, data_length); + + THDVAR(thd, event_record)= g_record_buffer; + } - add_event(thd, "", event_name, data, data_length); + mysql_mutex_unlock(&g_record_buffer_mutex); /* Add event. */ From e23c4ab4271d47de20eba81388a6b49148983988 Mon Sep 17 00:00:00 2001 From: Lukasz Kotula Date: Wed, 3 Jan 2018 12:52:37 +0100 Subject: [PATCH 0353/1221] Bug#26911878 - USE AFTER FREE IN RAPID/PLUGIN/X/MYSQLXTEST_SRC/MYSQLX_PROTOCOL.CC Post-pish fix: Classes are marked with "__declspec(dllimport)", still they are statically linked into the test executable. --- rapid/plugin/x/CMakeLists.txt | 6 +-- rapid/plugin/x/mysqlxtest_src/mysqlx_common.h | 45 ------------------- .../plugin/x/mysqlxtest_src/mysqlx_protocol.h | 5 +-- .../x/mysqlxtest_src/mysqlx_resultset.h | 11 +++-- rapid/unittest/gunit/xplugin/CMakeLists.txt | 7 --- 5 files changed, 8 insertions(+), 66 deletions(-) delete mode 100644 rapid/plugin/x/mysqlxtest_src/mysqlx_common.h diff --git a/rapid/plugin/x/CMakeLists.txt b/rapid/plugin/x/CMakeLists.txt index f6d480aa56e2..d236c08dc1db 100644 --- a/rapid/plugin/x/CMakeLists.txt +++ b/rapid/plugin/x/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -217,10 +217,6 @@ ELSE() TARGET_LINK_LIBRARIES(mysqlxtest mysys strings mysqlclient) TARGET_LINK_LIBRARIES(mysqlxtest ${PROTOBUF_LIBRARY}) - IF( WIN32 ) - ADD_DEFINITIONS(-DMYSQLXTEST_EXPORTS) - ENDIF() - IF(INSTALL_MYSQLTESTDIR) INSTALL( FILES tests/mtr/plugin.defs diff --git a/rapid/plugin/x/mysqlxtest_src/mysqlx_common.h b/rapid/plugin/x/mysqlxtest_src/mysqlx_common.h deleted file mode 100644 index deb23f4cd492..000000000000 --- a/rapid/plugin/x/mysqlxtest_src/mysqlx_common.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. - * - * 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 - */ - - -#ifndef _MYSQLXTEST_COMMON_H_ - #define _MYSQLXTEST_COMMON_H_ - - -#ifdef _WIN32 - # ifdef _DLL - # ifdef MYSQLXTEST_EXPORTS - # define MYSQLXTEST_PUBLIC __declspec(dllexport) - # else - # define MYSQLXTEST_PUBLIC __declspec(dllimport) - # endif - # else - # define MYSQLXTEST_PUBLIC - # endif - #else - # define MYSQLXTEST_PUBLIC - #endif - -#ifdef NO_MYSQLXTEST - # undef MYSQLXTEST_PUBLIC - # define MYSQLXTEST_PUBLIC SHCORE_PUBLIC - #endif - -#endif - diff --git a/rapid/plugin/x/mysqlxtest_src/mysqlx_protocol.h b/rapid/plugin/x/mysqlxtest_src/mysqlx_protocol.h index 72ca452a6412..946969d91a32 100644 --- a/rapid/plugin/x/mysqlxtest_src/mysqlx_protocol.h +++ b/rapid/plugin/x/mysqlxtest_src/mysqlx_protocol.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -45,7 +45,6 @@ #include "ngs_common/protocol_protobuf.h" #include "mysqlx_connection.h" -#include "mysqlx_common.h" namespace mysqlx @@ -223,7 +222,7 @@ namespace mysqlx IPv6, }; - class MYSQLXTEST_PUBLIC XProtocol : public ngs::enable_shared_from_this + class XProtocol : public ngs::enable_shared_from_this { public: XProtocol(const Ssl_config &ssl_config, const std::size_t timeout, const bool dont_wait_for_disconnect = true, const Internet_protocol ip_mode = IPv4); diff --git a/rapid/plugin/x/mysqlxtest_src/mysqlx_resultset.h b/rapid/plugin/x/mysqlxtest_src/mysqlx_resultset.h index c73983213ebd..c496066ef3e8 100644 --- a/rapid/plugin/x/mysqlxtest_src/mysqlx_resultset.h +++ b/rapid/plugin/x/mysqlxtest_src/mysqlx_resultset.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -30,7 +30,6 @@ #include "ngs_common/xdatetime.h" #include "mysqlx_protocol.h" -#include "mysqlx_common.h" namespace Mysqlx @@ -61,7 +60,7 @@ namespace mysqlx DECIMAL }; - struct MYSQLXTEST_PUBLIC ColumnMetadata + struct ColumnMetadata { FieldType type; std::string name; @@ -83,7 +82,7 @@ namespace mysqlx uint32_t content_type; }; - class MYSQLXTEST_PUBLIC Row + class Row { public: ~Row(); @@ -117,7 +116,7 @@ namespace mysqlx Mysqlx::Resultset::Row *m_data; }; - class MYSQLXTEST_PUBLIC ResultData + class ResultData { public: ResultData(ngs::shared_ptr > columns); @@ -133,7 +132,7 @@ namespace mysqlx size_t m_row_index; }; - class MYSQLXTEST_PUBLIC Result + class Result { public: ~Result(); diff --git a/rapid/unittest/gunit/xplugin/CMakeLists.txt b/rapid/unittest/gunit/xplugin/CMakeLists.txt index 7ef856800da4..9a43d6078d56 100644 --- a/rapid/unittest/gunit/xplugin/CMakeLists.txt +++ b/rapid/unittest/gunit/xplugin/CMakeLists.txt @@ -17,13 +17,6 @@ IF(NOT GMOCK_FOUND) RETURN() ENDIF() -IF(WIN32 AND NOT LINK_STATIC_RUNTIME_LIBRARIES) - MESSAGE(WARNING - "This unit test can only be built with " - "cmake -DLINK_STATIC_RUNTIME_LIBRARIES=ON") - RETURN() -ENDIF() - IF(SSL_DEFINES) ADD_DEFINITIONS(${SSL_DEFINES}) ENDIF() From ee25bc94445717e463a01c2b36ceb3d7cd51e9cf Mon Sep 17 00:00:00 2001 From: Sujatha Sivakumar Date: Thu, 4 Jan 2018 17:26:39 +0530 Subject: [PATCH 0354/1221] Bug#26324852: THERE IS NO LOCAL IP ADDRESS MATCHING THE ONE CONFIGURED FOR THE LOCAL NODE Post push fix to address a compilation issue. --- .../libmysqlgcs/src/bindings/xcom/xcom/sock_probe_ix.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/sock_probe_ix.c b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/sock_probe_ix.c index fc6636b981d4..bb995a4e08f7 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/sock_probe_ix.c +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/sock_probe_ix.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -42,7 +42,7 @@ #include "x_platform.h" /* Buffer size should be always a multiple of 'struct ifreq' size */ -#define IF_INIT_BUF_SIZE (sizeof(struct ifreq) * 10) +#define IF_INIT_BUF_SIZE ((int)sizeof(struct ifreq) * 10) #define IFRP_INIT_ARR_SIZE 64 struct sock_probe From 4cb4ab830e7a681832d54a366e2a33a58e3b6957 Mon Sep 17 00:00:00 2001 From: Dima Date: Wed, 3 Jan 2018 19:47:06 +0300 Subject: [PATCH 0355/1221] release notes for the 5.7.20-19 release also removed two warnings because MyRocks is now GA, and updated docs about binlog encryption --- doc/source/conf.py | 2 +- .../management/data_at_rest_encryption.rst | 18 +++++ doc/source/myrocks/index.rst | 3 - doc/source/myrocks/install.rst | 2 - doc/source/myrocks/status_variables.rst | 12 ++-- .../Percona-Server-5.7.20-19.rst | 65 +++++++++++++++++++ .../release-notes/release-notes_index.rst | 1 + doc/source/upstream-bug-fixes.rst | 18 +++++ 8 files changed, 109 insertions(+), 12 deletions(-) create mode 100644 doc/source/release-notes/Percona-Server-5.7.20-19.rst diff --git a/doc/source/conf.py b/doc/source/conf.py index 9ad3eed8cbcb..29e377d01ba3 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -54,7 +54,7 @@ # The short X.Y version. version = '5.7' # The full version, including alpha/beta/rc tags. -release = '5.7.20-18' +release = '5.7.20-19' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/doc/source/management/data_at_rest_encryption.rst b/doc/source/management/data_at_rest_encryption.rst index 42f22ffcab63..69697c8082ae 100644 --- a/doc/source/management/data_at_rest_encryption.rst +++ b/doc/source/management/data_at_rest_encryption.rst @@ -184,6 +184,24 @@ System Variables This variable is used to define the location of the :ref:`keyring_vault_plugin` configuration file. +.. variable:: encrypt_binlog + + :version 5.7.20-19: Implemented + :cli: ``--encrypt-binlog`` + :dyn: No + :scope: Global + :vartype: Boolean + :default: ``OFF`` + +This variable turns on binary and relay logs +encryption. It requires both +`master_verify_checksum +`_ +and `binlog_checksum +`_ +variables to be turned ``ON``. + + Other reading ------------- diff --git a/doc/source/myrocks/index.rst b/doc/source/myrocks/index.rst index 7dbb98ac46f2..05c4bf7f4543 100644 --- a/doc/source/myrocks/index.rst +++ b/doc/source/myrocks/index.rst @@ -22,9 +22,6 @@ if your workload uses fast storage, such as SSD: * Provides more storage endurance * Ensures better IO capacity -.. warning:: Percona MyRocks is currently experimental - and not recommended for production. - .. toctree:: :maxdepth: 1 diff --git a/doc/source/myrocks/install.rst b/doc/source/myrocks/install.rst index 389bfffd285c..76e9dd33e814 100644 --- a/doc/source/myrocks/install.rst +++ b/doc/source/myrocks/install.rst @@ -4,8 +4,6 @@ Percona MyRocks Installation Guide ================================== -.. warning:: Percona MyRocks is currently experimental - and not recommended for production. Percona MyRocks is distributed as a separate package that can be enabled as a plugin for Percona Server 5.7 and later versions. diff --git a/doc/source/myrocks/status_variables.rst b/doc/source/myrocks/status_variables.rst index eae44b9217fb..5d821bb9a226 100644 --- a/doc/source/myrocks/status_variables.rst +++ b/doc/source/myrocks/status_variables.rst @@ -92,9 +92,9 @@ The following global status variables are available: - Numeric * - :variable:`rocksdb_block_cache_miss` - Numeric - * - :variable:`rocksdb_block_cachecompressed_hit` + * - :variable:`rocksdb_block_cache_compressed_hit` - Numeric - * - :variable:`rocksdb_block_cachecompressed_miss` + * - :variable:`rocksdb_block_cache_compressed_miss` - Numeric * - :variable:`rocksdb_bloom_filter_prefix_checked` - Numeric @@ -124,7 +124,7 @@ The following global status variables are available: - Numeric * - :variable:`rocksdb_get_hit_l2_and_up` - Numeric - * - :variable:`rocksdb_getupdatessince_calls` + * - :variable:`rocksdb_get_updates_since_calls` - Numeric * - :variable:`rocksdb_iter_bytes_read` - Numeric @@ -381,11 +381,11 @@ block from block cache. This variable shows the total number of block cache misses. -.. variable:: rocksdb_block_cachecompressed_hit +.. variable:: rocksdb_block_cache_compressed_hit This variable shows the number of hits in the compressed block cache. -.. variable:: rocksdb_block_cachecompressed_miss +.. variable:: rocksdb_block_cache_compressed_miss This variable shows the number of misses in the compressed block cache. @@ -451,7 +451,7 @@ This variable shows the number of ``Get()`` queries served by L1. This variable shows the number of ``Get()`` queries served by L2 and up. -.. variable:: rocksdb_getupdatessince_calls +.. variable:: rocksdb_get_updates_since_calls This variable shows the number of calls to ``GetUpdatesSince`` function. Useful to keep track of transaction log iterator refreshes diff --git a/doc/source/release-notes/Percona-Server-5.7.20-19.rst b/doc/source/release-notes/Percona-Server-5.7.20-19.rst new file mode 100644 index 000000000000..c72797be7dc4 --- /dev/null +++ b/doc/source/release-notes/Percona-Server-5.7.20-19.rst @@ -0,0 +1,65 @@ +.. rn:: 5.7.20-19 + +======================== +Percona Server 5.7.20-19 +======================== + +Percona is glad to announce the release of Percona Server 5.7.20-19 +on January 3, 2018. Downloads are available `here +`_ +and from the :doc:`Percona Software Repositories `. + +This release is based on `MySQL 5.7.20 +`_ +and includes all the bug fixes in it. +Percona Server 5.7.20-19 is now the current GA (Generally Available) release +in the 5.7 series. All software developed by Percona is open-source and free. +Details of this release can be found in the `5.7.20-19 milestone on Launchpad +`_. + +New Features +============ + +* Now MyRocks Storage Engine has *General Availability* status. + +* Binary log encryption has been implemented and can be now switched on using + the :variable:`encrypt_binlog` variable. + +* :variable:`innodb_print_lock_wait_timeout_info` variable, introduced in previous + release, but undocumented, allows to log information about all lock wait + timeout errors. + +Bugs Fixed +========== + +* Intermediary slave with Blackhole storage engine couldn't record updates + from master to its own binary log in case master has + :variable:`binlog_rows_query_log_events` option enabled. Bug fixed :bug:`1722789` + (upstream :mysqlbug:`88057`). + +* Help command command in the mysql command line client provided a link to an older + version of the |Percona Server| manual. Bug fixed :bug:`1708073`. + +* A regression in the ``mysqld_safe`` script forced it to print an extra error when + stopping the MySQL service. Bugs fixed :bug:`1738742`. + +* Blackhole storage engine was incompatible with newer length limit of the + |InnoDB| index key prefixes. Bug fixed :bug:`1733049` (upstream :mysqlbug:`53588`). + +* Heartbeats received by slave were reacted with :table:`mysql.slave_master_info` table + sync on each of them even with :variable:`sync_master_info` set to zero, causing huge + increase in write load. Bug fixed :bug:`1708033` (upstream :mysqlbug:`85158`). + +MyRocks Changes +=============== + +* The replication writebatch functionality has been removed from + |Percona Server| 5.7 due to unsafety of the current implementation. + +* Variables :variable:`rocksdb_block_cachecompressed_hit`, + :variable:`rocksdb_block_cachecompressed_miss`, and + :variable:`rocksdb_getupdatessince_calls` were renamed to + :variable:`rocksdb_block_cache_compressed_hit`, + :variable:`rocksdb_block_cache_compressed_miss`, and + :variable:`rocksdb_get_updates_since_calls` respectively. + diff --git a/doc/source/release-notes/release-notes_index.rst b/doc/source/release-notes/release-notes_index.rst index 7e501406e7fe..2ffc5231733a 100644 --- a/doc/source/release-notes/release-notes_index.rst +++ b/doc/source/release-notes/release-notes_index.rst @@ -6,6 +6,7 @@ :maxdepth: 1 :glob: + Percona-Server-5.7.20-19 Percona-Server-5.7.20-18 Percona-Server-5.7.19-17 Percona-Server-5.7.18-16 diff --git a/doc/source/upstream-bug-fixes.rst b/doc/source/upstream-bug-fixes.rst index 43177881fce9..9f5794e47a86 100644 --- a/doc/source/upstream-bug-fixes.rst +++ b/doc/source/upstream-bug-fixes.rst @@ -4,6 +4,12 @@ List of upstream |MySQL| bugs fixed in |Percona Server| 5.7 ============================================================= ++-------------------------------------------------------------------------------------------------------------+ +|:Upstream bug: :mysqlbug:`88057` - Intermediary slave does not log master changes with... | +|:Launchpad bug: :bug:`1722789` | +|:Upstream state: Verified (checked on 2018-01-04) | +|:Fix Released: :rn:`5.7.20-19` | +|:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`87065` - Release lock on table statistics after query plan created | |:Launchpad bug: :bug:`1689736` | @@ -59,6 +65,12 @@ |:Fix Released: :rn:`5.7.18-14` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ +|:Upstream bug: :mysqlbug:`85158` - heartbeats/fakerotate cause a forced sync_master_info | +|:Launchpad bug: :bug:`1708033` | +|:Upstream state: Open (checked on 2018-01-04) | +|:Fix Released: :rn:`5.7.20-19` | +|:Upstream fix: N/A | ++-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`85141` - Write/fsync amplification w/ duplicate GTIDs | |:Launchpad bug: :bug:`1669928` | |:Upstream state: Verified (checked on 2017-12-14) | @@ -515,6 +527,12 @@ |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ +|:Upstream bug: :mysqlbug:`53588` - Blackhole : Specified key was too long; max key length is 1000 bytes | +|:Launchpad bug: :bug:`1733049` | +|:Upstream state: No Feedback (checked on 2018-01-04) | +|:Fix Released: :rn:`5.7.20-19` | +|:Upstream fix: N/A | ++-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`49120` - mysqldump should have flag to delay creating indexes for innodb plugin... | |:Launchpad bug: :bug:`744103` | |:Upstream state: Verified (checked on 2017-12-14) | From 53002c55e405a37a03d0f065ca5fd3fc474f09a7 Mon Sep 17 00:00:00 2001 From: hrvojem Date: Thu, 4 Jan 2018 16:29:07 +0100 Subject: [PATCH 0356/1221] Fixed DOC-673 by porting docs from FB wiki with some changes Added info to limitations Fixed broken links in changed_in_5.7 docs --- doc/source/changed_in_57.rst | 4 +- doc/source/index.rst | 1 + doc/source/myrocks/data_loading.rst | 148 ++++++++++++++++++++++++++++ doc/source/myrocks/limitations.rst | 22 ++++- 4 files changed, 172 insertions(+), 3 deletions(-) create mode 100644 doc/source/myrocks/data_loading.rst diff --git a/doc/source/changed_in_57.rst b/doc/source/changed_in_57.rst index 415b6052835d..3d2d21e55b28 100644 --- a/doc/source/changed_in_57.rst +++ b/doc/source/changed_in_57.rst @@ -48,8 +48,8 @@ Some |Percona Server| 5.6 features have been replaced by similar or equivalent | * `Lock-Free SHOW SLAVE STATUS NONBLOCKING `_ has been replaced by a regular ``SHOW SLAVE STATUS`` `implementation `_. Oracle implementation forbids calling it from a stored function. * Behavior corresponding to :variable:`slow_query_log_timestamp_precision` set to ``microsecond`` is now the default, the variable itself and the behavior corresponding to the variable's ``second`` value is removed. * Behavior corresponding to :variable:`slow_query_log_timestamp_always` set to ``TRUE`` is now the default, the variable itself and the behavior corresponding to the variable's ``FALSE`` value is removed. - * `Statement timeout feature `_ has been replaced by Oracle `Server-side SELECT statement timeouts `_ implementation. Differences: the Oracle variable is named `max_execution_time `_ instead of :variable:`max_statement_time`; variable :variable:`have_statement_timeout` variable has been removed removed; the timeouts only apply for `read-only SELECTs `_. - * `Atomic write support on fusionIO devices `_ with NVMFS has been replaced by Oracle implementation. It is no longer required to enable :variable:`innodb_use_atomic_writes` variable, and this variable has been removed. The atomic write support will be enabled, and the doublewrite buffer disabled, on supporting devices automatically. The Oracle implementation does not silently adjust :variable:`innodb_flush_method` to ``O_DIRECT`` if it has a different value. The user must set it to ``O_DIRECT`` explicitly, or atomic writes will not be enabled. + * `Statement timeout feature `_ has been replaced by Oracle `Server-side SELECT statement timeouts `_ implementation. Differences: the Oracle variable is named `max_statement_time `_ instead of :variable:`max_statement_time`; variable :variable:`have_statement_timeout` variable has been removed removed; the timeouts only apply for `read-only SELECTs `_. + * `Atomic write support on fusionIO devices `_ with NVMFS has been replaced by Oracle implementation. It is no longer required to enable :variable:`innodb_use_atomic_writes` variable, and this variable has been removed. The atomic write support will be enabled, and the doublewrite buffer disabled, on supporting devices automatically. The Oracle implementation does not silently adjust :variable:`innodb_flush_method` to ``O_DIRECT`` if it has a different value. The user must set it to ``O_DIRECT`` explicitly, or atomic writes will not be enabled. * `Online GTID migration patch `_ has been replaced by an upstream variable `gtid_mode `_ made dynamic. * The `Error Code Compatibility `_ has been replaced by the multiple start-error-number directive in :file:`sql/share/errmsg-utf8.txt` support. * `Ignoring missing tables in mysqldump `_ with ``--ignore-create-error`` option has been replaced by the more general upstream option `--ignore-error `_ option. diff --git a/doc/source/index.rst b/doc/source/index.rst index ba1bd54010bc..045eaa8324aa 100644 --- a/doc/source/index.rst +++ b/doc/source/index.rst @@ -178,6 +178,7 @@ Percona MyRocks Server Variables Status Variables myrocks/gap_locks_detection + myrocks/data_loading Reference ========= diff --git a/doc/source/myrocks/data_loading.rst b/doc/source/myrocks/data_loading.rst new file mode 100644 index 000000000000..ec21e3b51f80 --- /dev/null +++ b/doc/source/myrocks/data_loading.rst @@ -0,0 +1,148 @@ +.. _data-loading: + +============ +Data Loading +============ + +By default, MyRocks configurations are optimized for short transactions, +and not for data loading. MyRocks has a couple of special session variables +to speed up data loading dramatically. + +Sorted bulk loading +=================== + +If your data is guaranteed to be loaded in primary key order, then this method +is recommended. This method works by dropping any secondary keys first, loading +data into your table in primary key order, and then restoring the secondary +keys via Fast Secondary Index Creation. + +Creating Secondary Indexes +-------------------------- + +When loading data into empty tables, it is highly recommended to drop all +secondary indexes first, then loading data, and adding all secondary indexes +after finishing loading data. MyRocks has a feature called ``Fast Secondary +Index Creation``. Fast Secondary Index Creation is automatically used when +executing ``CREATE INDEX`` or ``ALTER TABLE ... ADD INDEX``. With Fast +Secondary Index Creation, the secondary index entries are directly written +to bottommost RocksDB levels and bypassing compaction. This significantly +reduces total write volume and CPU time for decompressing and compressing +data on higher levels. + +.. _myrocks_data_loading: + +Loading Data +------------ + +As described above, loading data is highly recommended for tables with primary +key only (no secondary keys), with all secondary indexes added after loading +data. + +When loading data into MyRocks tables, there are two recommended session +variables: + +.. code-block:: mysql + + SET session sql_log_bin=0; + SET session rocksdb_bulk_load=1; + +When converting from large MyISAM/InnoDB tables, either by using the ``ALTER`` +or ``INSERT INTO SELECT`` statements it's recommended that you +create MyRocks tables as below (in case the table is sufficiently big it will +cause the server to consume all the memory and then be terminated by the OOM +killer): + +.. code-block:: mysql + + SET session sql_log_bin=0; + SET session rocksdb_bulk_load=1; + ALTER TABLE large_myisam_table ENGINE=RocksDB; + SET session rocksdb_bulk_load=0; + +Using sql_log_bin=0 avoids writing to binary logs. + +With :variable:`rocksdb_bulk_load` set to ``1``, MyRocks enters special mode to +write all inserts into bottommost RocksDB levels, and skips writing data into +MemTable and the following compactions. This is very efficient way to load +data. + +The :variable:`rocksdb_bulk_load` mode operates with a few conditions: + +* None of the data being bulk loaded can overlap with existing data in the + table. The easiest way to ensure this is to always bulk load into an empty + table, but the mode will allow loading some data into the table, doing other + operations, and then returning and bulk loading addition data if there is no + overlap between what is being loaded and what already exists. + +* The data may not be visible until bulk load mode is ended (i.e. the + :variable:`rocksdb_bulk_load` is set to zero again). The method that is used + is building up SST files which will later be added as-is to the database. + Until a particular SST has been added the data will not be visible to the + rest of the system, thus issuing a ``SELECT`` on the table currently being + bulk loaded will only show older data and will likely not show the most + recently added rows. Ending the bulk load mode will cause the most recent SST + file to be added. When bulk loading multiple tables, starting a new table + will trigger the code to add the most recent SST file to the system -- as a + result, it is inadvisable to interleave ``INSERT`` statements to two or more + tables during bulk load mode. + +By default, the :variable:`rocksdb_bulk_load` mode expects all data be inserted +in primary key order (or reversed order). If the data is in the reverse order +(i.e. the data is descending on a normally ordered primary key or is ascending +on a reverse ordered primary key), the rows are cached in chunks to switch the +order to match the expected order. + +Inserting one or more rows out of order will result in an error and may result +in some of the data being inserted in the table and some not. To resolve the +problem, one can either fix the data order of the insert, truncate the table, +and restart. + +Unsorted bulk loading +===================== + +If your data is not ordered in primary key order, then this method is +recommended. With this method, secondary keys do not need to be dropped and +restored. However, writing to the primary key no longer goes directly to SST +files, and are written to temporary files for sorted first, so there is extra +cost to this method. + +To allow for loading unsorted data: + +.. code-block:: mysql + + SET session sql_log_bin=0; + SET session rocksdb_bulk_load_allow_unsorted=1; + SET session rocksdb_bulk_load=1; + ... + SET session rocksdb_bulk_load=0; + SET session rocksdb_bulk_load_allow_unsorted=0; + +Note that :variable:`rocksdb_bulk_load_allow_unsorted` can only be changed when +:variable:`rocksdb_bulk_load` is disabled (set to ``0``). In this case, all +input data will go through an intermediate step that writes the rows to +temporary SST files, sorts them rows in the primary key order, and then writes +to final SST files in the correct order. + +Other Approaches +================ + +If :variable:`rocksdb_commit_in_the_middle` is enabled, MyRocks implicitly +commits every :variable:`rocksdb_bulk_load_size records` (default is ``1,000``) +in the middle of your transaction. If your data loading fails in the middle of +the statement (``LOAD DATA`` or bulk ``INSERT``), rows are not entirely rolled +back, but some of rows are stored in the table. To restart data loading, you'll +need to truncate the table and loading data again. + +.. warning:: + + If you are loading large data without enabling :variable:`rocksdb_bulk_load` + or :variable:`rocksdb_commit_in_the_middle`, please make sure transaction + size is small enough. All modifications of the ongoing transactions are kept + in memory. + +Other Reading +============= +* `Data Loading `_ - + this document has been used as a source for writing this documentation +* `ALTER TABLE ... ENGINE=ROCKSDB uses too much memory + `_ diff --git a/doc/source/myrocks/limitations.rst b/doc/source/myrocks/limitations.rst index 3a4abb07d94d..480cf3f6ed1a 100644 --- a/doc/source/myrocks/limitations.rst +++ b/doc/source/myrocks/limitations.rst @@ -23,7 +23,7 @@ The MyRocks storage engine lacks the following features compared to InnoDB: * `Gap locks `_ -* `Group Replication `_ +* `Group Replication `_ You should also consider the following: @@ -53,3 +53,23 @@ You should also consider the following: For more information, see `Replication Formats `_. +* When converting from large MyISAM/InnoDB tables, either by using the + ``ALTER`` or ``INSERT INTO SELECT`` statements it's recommended that you + check the :ref:`Data loading ` documentation and + create MyRocks tables as below (in case the table is sufficiently big it will + cause the server to consume all the memory and then be terminated by the OOM + killer): + + .. code-block:: mysql + + SET session sql_log_bin=0; + SET session rocksdb_bulk_load=1; + ALTER TABLE large_myisam_table ENGINE=RocksDB; + SET session rocksdb_bulk_load=0; + + .. warning:: + + If you are loading large data without enabling :variable:`rocksdb_bulk_load` + or :variable:`rocksdb_commit_in_the_middle`, please make sure transaction + size is small enough. All modifications of the ongoing transactions are + kept in memory. From 5b36e711d5a1feef8554cf25675b941be60848fc Mon Sep 17 00:00:00 2001 From: Balasubramanian Kandasamy Date: Fri, 5 Jan 2018 13:08:45 +0530 Subject: [PATCH 0357/1221] Bug#27343289 - FETCH BOOST LIBRARY OVER A SECURE CONNECTION - Updated the source url to fetch boost library over a secure connection --- packaging/rpm-docker/mysql.spec.in | 4 ++-- packaging/rpm-fedora/mysql.spec.in | 4 ++-- packaging/rpm-oel/mysql.spec.in | 4 ++-- packaging/rpm-sles/mysql.spec.in | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/packaging/rpm-docker/mysql.spec.in b/packaging/rpm-docker/mysql.spec.in index 34e6294357b6..d4502fdd737a 100644 --- a/packaging/rpm-docker/mysql.spec.in +++ b/packaging/rpm-docker/mysql.spec.in @@ -1,4 +1,4 @@ -# Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -50,7 +50,7 @@ URL: http://www.mysql.com/ Packager: MySQL Release Engineering Vendor: %{mysql_vendor} Source0: https://cdn.mysql.com/Downloads/MySQL-@MYSQL_BASE_VERSION@/%{src_dir}.tar.gz -Source1: http://downloads.sourceforge.net/boost/@BOOST_PACKAGE_NAME@.tar.bz2 +Source1: https://downloads.sourceforge.net/boost/@BOOST_PACKAGE_NAME@.tar.bz2 BuildRequires: cmake >= 2.8.2 BuildRequires: perl BuildRequires: perl(Time::HiRes) diff --git a/packaging/rpm-fedora/mysql.spec.in b/packaging/rpm-fedora/mysql.spec.in index 26a212cc5530..961bc9f8918a 100644 --- a/packaging/rpm-fedora/mysql.spec.in +++ b/packaging/rpm-fedora/mysql.spec.in @@ -1,4 +1,4 @@ -# Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -65,7 +65,7 @@ Version: @MYSQL_NO_DASH_VERSION@ Release: 1%{?dist} License: Copyright (c) 2000, @MYSQL_COPYRIGHT_YEAR@, %{mysql_vendor}. All rights reserved. Under %{?license_type} license as shown in the Description field. Source0: https://cdn.mysql.com/Downloads/MySQL-@MYSQL_BASE_VERSION@/%{src_dir}.tar.gz -Source1: http://downloads.sourceforge.net/boost/@BOOST_PACKAGE_NAME@.tar.bz2 +Source1: https://downloads.sourceforge.net/boost/@BOOST_PACKAGE_NAME@.tar.bz2 %if 0%{?compatlib} Source2: %{compatsrc} %endif diff --git a/packaging/rpm-oel/mysql.spec.in b/packaging/rpm-oel/mysql.spec.in index 9d6aa69c3779..9334187874c2 100644 --- a/packaging/rpm-oel/mysql.spec.in +++ b/packaging/rpm-oel/mysql.spec.in @@ -1,4 +1,4 @@ -# Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -118,7 +118,7 @@ Vendor: %{mysql_vendor} %if 0%{?compatlib} Source7: %{compatsrc} %endif -Source10: http://downloads.sourceforge.net/boost/@BOOST_PACKAGE_NAME@.tar.bz2 +Source10: https://downloads.sourceforge.net/boost/@BOOST_PACKAGE_NAME@.tar.bz2 Source90: filter-provides.sh Source91: filter-requires.sh %{?el5:BuildRequires: cmake28 >= 2.8.2} diff --git a/packaging/rpm-sles/mysql.spec.in b/packaging/rpm-sles/mysql.spec.in index abe6d6575713..133f7aa57b19 100644 --- a/packaging/rpm-sles/mysql.spec.in +++ b/packaging/rpm-sles/mysql.spec.in @@ -1,4 +1,4 @@ -# Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -91,7 +91,7 @@ Source0: https://cdn.mysql.com/Downloads/MySQL-@MYSQL_BASE_VERSION@/%{src URL: http://www.mysql.com/ Packager: MySQL Release Engineering Vendor: %{mysql_vendor} -Source10: http://downloads.sourceforge.net/boost/@BOOST_PACKAGE_NAME@.tar.bz2 +Source10: https://downloads.sourceforge.net/boost/@BOOST_PACKAGE_NAME@.tar.bz2 Source90: filter-provides.sh Source91: filter-requires.sh BuildRequires: cmake >= 2.8.2 From 4a1bf03fdd3a4dbe7b30706c651b09e123f2daa6 Mon Sep 17 00:00:00 2001 From: Marek Szymczak Date: Fri, 5 Jan 2018 12:15:26 +0100 Subject: [PATCH 0358/1221] Bug#27302151 MEMORY LEAK IN TEST MAIN.AUDIT_PLUGIN_2 Post-push fix: Fix after i_main.audit_plugin_debug failing. --- plugin/audit_null/audit_null.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/plugin/audit_null/audit_null.c b/plugin/audit_null/audit_null.c index f4780e679dc6..a4ec62ffadb5 100644 --- a/plugin/audit_null/audit_null.c +++ b/plugin/audit_null/audit_null.c @@ -88,6 +88,11 @@ LEX_CSTRING event_names[][6] = { static volatile int number_of_calls; +/* + Plugin has been installed. +*/ +static my_bool g_plugin_installed= FALSE; + /* Record buffer mutex. */ @@ -189,6 +194,7 @@ static int audit_null_plugin_init(void *arg MY_ATTRIBUTE((unused))) MY_MUTEX_INIT_FAST); g_record_buffer= NULL; + g_plugin_installed= TRUE; return(0); } @@ -209,11 +215,16 @@ static int audit_null_plugin_init(void *arg MY_ATTRIBUTE((unused))) static int audit_null_plugin_deinit(void *arg MY_ATTRIBUTE((unused))) { - my_free((void *)(g_record_buffer)); + if (g_plugin_installed == TRUE) + { + my_free((void *)(g_record_buffer)); - g_record_buffer= NULL; + g_record_buffer= NULL; + + mysql_mutex_destroy(&g_record_buffer_mutex); - mysql_mutex_destroy(&g_record_buffer_mutex); + g_plugin_installed= FALSE; + } return(0); } From c9383d615bd50787973518cc8929db4d4fc57086 Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Wed, 3 Jan 2018 12:28:18 -0700 Subject: [PATCH 0359/1221] MYR-221 : handle_fatal_signal (sig=11) in myrocks::Rdb_dict_manager::get_value when querying I_S when MyRocks is not loaded, but rocksdb_global_info is - Core issue is that rocksdb i_s plugins were not aware of initialized status of the engine plugin and always assumed that the engine or parts of it were available. - Fix was to adapt similar construct as TokuDB that maintains a protected flag to indicate if/when the engine is fully initialized and able to respond to whatever the i_s plugins need. Synchronization is important here to prevent race conditions where one session may be installing/uninstalling the engine and others may be accessing the i_s plugins. - Created a new basic i_s plugin test that includes the MYR-221 test sequence. - For all i_s plugins that had an existing test, include the new basic i_s test first. - For all i_s plugins that were missing tests, created new basic tests that included the new i_s basic test. - Added some missing cleanup to the rocksdb_init_func that would have left some resources behind in the case of an initialization error. --- .../suite/rocksdb/include/i_s_basic.inc | 30 ++++++ .../suite/rocksdb/r/i_s_cfoptions.result | 11 +++ mysql-test/suite/rocksdb/r/i_s_cfstats.result | 11 +++ .../rocksdb/r/i_s_compaction_stats.result | 12 +++ mysql-test/suite/rocksdb/r/i_s_dbstats.result | 10 ++ mysql-test/suite/rocksdb/r/i_s_ddl.result | 19 ++++ .../suite/rocksdb/r/i_s_deadlock.result | 23 +++-- .../suite/rocksdb/r/i_s_global_info.result | 11 +++ .../suite/rocksdb/r/i_s_index_file_map.result | 18 ++++ mysql-test/suite/rocksdb/r/i_s_locks.result | 18 +++- .../suite/rocksdb/r/i_s_perf_context.result | 23 +++++ mysql-test/suite/rocksdb/r/i_s_trx.result | Bin 584 -> 1586 bytes mysql-test/suite/rocksdb/t/i_s_cfoptions.test | 7 ++ mysql-test/suite/rocksdb/t/i_s_cfstats.test | 7 ++ .../suite/rocksdb/t/i_s_compaction_stats.test | 7 ++ mysql-test/suite/rocksdb/t/i_s_dbstats.test | 7 ++ mysql-test/suite/rocksdb/t/i_s_ddl.test | 5 +- mysql-test/suite/rocksdb/t/i_s_deadlock.test | 7 +- .../suite/rocksdb/t/i_s_global_info.test | 7 ++ .../suite/rocksdb/t/i_s_index_file_map.test | 2 + mysql-test/suite/rocksdb/t/i_s_locks.test | 8 +- .../suite/rocksdb/t/i_s_perf_context.test | 8 +- mysql-test/suite/rocksdb/t/i_s_trx.test | 6 ++ storage/rocksdb/ha_rocksdb.cc | 25 +++++ storage/rocksdb/ha_rocksdb.h | 71 ++++++++++++++ storage/rocksdb/ha_rocksdb_proto.h | 4 + storage/rocksdb/rdb_i_s.cc | 90 ++++++++++++++++++ 27 files changed, 427 insertions(+), 20 deletions(-) create mode 100644 mysql-test/suite/rocksdb/include/i_s_basic.inc create mode 100644 mysql-test/suite/rocksdb/r/i_s_cfoptions.result create mode 100644 mysql-test/suite/rocksdb/r/i_s_cfstats.result create mode 100644 mysql-test/suite/rocksdb/r/i_s_compaction_stats.result create mode 100644 mysql-test/suite/rocksdb/r/i_s_dbstats.result create mode 100644 mysql-test/suite/rocksdb/r/i_s_global_info.result create mode 100644 mysql-test/suite/rocksdb/t/i_s_cfoptions.test create mode 100644 mysql-test/suite/rocksdb/t/i_s_cfstats.test create mode 100644 mysql-test/suite/rocksdb/t/i_s_compaction_stats.test create mode 100644 mysql-test/suite/rocksdb/t/i_s_dbstats.test create mode 100644 mysql-test/suite/rocksdb/t/i_s_global_info.test diff --git a/mysql-test/suite/rocksdb/include/i_s_basic.inc b/mysql-test/suite/rocksdb/include/i_s_basic.inc new file mode 100644 index 000000000000..7d562721e517 --- /dev/null +++ b/mysql-test/suite/rocksdb/include/i_s_basic.inc @@ -0,0 +1,30 @@ +# suite/rocksdb/include/i_s_basic.inc +# +# SUMMARY +# +# Basic MyRocks information_schema test that covers issues and sequences that +# are common to all of the MyRocks information_schema plugins. +# +# USAGE +# +# let $i_s_plugin= + +if (!$i_s_plugin) +{ + --die i_s_plugin not specified to suite/rocksdb/include/i_s_basic.inc +} + +--eval show create table information_schema.$i_s_plugin + +# +# Test that MYR-221 is addressed and that proper error is returned instead of +# a crash when the SE is unloaded but the I_S plugin is still present +# +uninstall plugin rocksdb; + +--error ER_PLUGIN_IS_NOT_LOADED +--eval select * from information_schema.$i_s_plugin + +# Restart the server to get the SE plugin loaded again, currently MyRocks does +# not do well with unload/load sequences. +--source include/restart_mysqld.inc diff --git a/mysql-test/suite/rocksdb/r/i_s_cfoptions.result b/mysql-test/suite/rocksdb/r/i_s_cfoptions.result new file mode 100644 index 000000000000..18b8cf6318dd --- /dev/null +++ b/mysql-test/suite/rocksdb/r/i_s_cfoptions.result @@ -0,0 +1,11 @@ +show create table information_schema.rocksdb_cf_options; +Table Create Table +ROCKSDB_CF_OPTIONS CREATE TEMPORARY TABLE `ROCKSDB_CF_OPTIONS` ( + `CF_NAME` varchar(193) NOT NULL DEFAULT '', + `OPTION_TYPE` varchar(193) NOT NULL DEFAULT '', + `VALUE` varchar(193) NOT NULL DEFAULT '' +) ENGINE=MEMORY DEFAULT CHARSET=utf8 +uninstall plugin rocksdb; +select * from information_schema.rocksdb_cf_options; +ERROR HY000: Plugin 'ROCKSDB' is not loaded +# restart diff --git a/mysql-test/suite/rocksdb/r/i_s_cfstats.result b/mysql-test/suite/rocksdb/r/i_s_cfstats.result new file mode 100644 index 000000000000..0bac4eefce63 --- /dev/null +++ b/mysql-test/suite/rocksdb/r/i_s_cfstats.result @@ -0,0 +1,11 @@ +show create table information_schema.rocksdb_cfstats; +Table Create Table +ROCKSDB_CFSTATS CREATE TEMPORARY TABLE `ROCKSDB_CFSTATS` ( + `CF_NAME` varchar(193) NOT NULL DEFAULT '', + `STAT_TYPE` varchar(193) NOT NULL DEFAULT '', + `VALUE` bigint(8) NOT NULL DEFAULT '0' +) ENGINE=MEMORY DEFAULT CHARSET=utf8 +uninstall plugin rocksdb; +select * from information_schema.rocksdb_cfstats; +ERROR HY000: Plugin 'ROCKSDB' is not loaded +# restart diff --git a/mysql-test/suite/rocksdb/r/i_s_compaction_stats.result b/mysql-test/suite/rocksdb/r/i_s_compaction_stats.result new file mode 100644 index 000000000000..3fdd8e427cb4 --- /dev/null +++ b/mysql-test/suite/rocksdb/r/i_s_compaction_stats.result @@ -0,0 +1,12 @@ +show create table information_schema.rocksdb_compaction_stats; +Table Create Table +ROCKSDB_COMPACTION_STATS CREATE TEMPORARY TABLE `ROCKSDB_COMPACTION_STATS` ( + `CF_NAME` varchar(193) NOT NULL DEFAULT '', + `LEVEL` varchar(513) NOT NULL DEFAULT '', + `TYPE` varchar(513) NOT NULL DEFAULT '', + `VALUE` double NOT NULL DEFAULT '0' +) ENGINE=MEMORY DEFAULT CHARSET=utf8 +uninstall plugin rocksdb; +select * from information_schema.rocksdb_compaction_stats; +ERROR HY000: Plugin 'ROCKSDB' is not loaded +# restart diff --git a/mysql-test/suite/rocksdb/r/i_s_dbstats.result b/mysql-test/suite/rocksdb/r/i_s_dbstats.result new file mode 100644 index 000000000000..ebb6d1002484 --- /dev/null +++ b/mysql-test/suite/rocksdb/r/i_s_dbstats.result @@ -0,0 +1,10 @@ +show create table information_schema.rocksdb_dbstats; +Table Create Table +ROCKSDB_DBSTATS CREATE TEMPORARY TABLE `ROCKSDB_DBSTATS` ( + `STAT_TYPE` varchar(193) NOT NULL DEFAULT '', + `VALUE` bigint(8) NOT NULL DEFAULT '0' +) ENGINE=MEMORY DEFAULT CHARSET=utf8 +uninstall plugin rocksdb; +select * from information_schema.rocksdb_dbstats; +ERROR HY000: Plugin 'ROCKSDB' is not loaded +# restart diff --git a/mysql-test/suite/rocksdb/r/i_s_ddl.result b/mysql-test/suite/rocksdb/r/i_s_ddl.result index cfe134331e46..afbc3a679958 100644 --- a/mysql-test/suite/rocksdb/r/i_s_ddl.result +++ b/mysql-test/suite/rocksdb/r/i_s_ddl.result @@ -1,3 +1,22 @@ +show create table information_schema.rocksdb_ddl; +Table Create Table +ROCKSDB_DDL CREATE TEMPORARY TABLE `ROCKSDB_DDL` ( + `TABLE_SCHEMA` varchar(193) NOT NULL DEFAULT '', + `TABLE_NAME` varchar(193) NOT NULL DEFAULT '', + `PARTITION_NAME` varchar(193) DEFAULT NULL, + `INDEX_NAME` varchar(193) NOT NULL DEFAULT '', + `COLUMN_FAMILY` int(4) NOT NULL DEFAULT '0', + `INDEX_NUMBER` int(4) NOT NULL DEFAULT '0', + `INDEX_TYPE` smallint(2) NOT NULL DEFAULT '0', + `KV_FORMAT_VERSION` smallint(2) NOT NULL DEFAULT '0', + `TTL_DURATION` bigint(8) NOT NULL DEFAULT '0', + `INDEX_FLAGS` bigint(8) NOT NULL DEFAULT '0', + `CF` varchar(193) NOT NULL DEFAULT '' +) ENGINE=MEMORY DEFAULT CHARSET=utf8 +uninstall plugin rocksdb; +select * from information_schema.rocksdb_ddl; +ERROR HY000: Plugin 'ROCKSDB' is not loaded +# restart CREATE TABLE is_ddl_t1 (i INT, j INT, k INT, l INT, PRIMARY KEY (i), KEY (j), KEY (k, l) COMMENT 'kl_cf') ENGINE = ROCKSDB; diff --git a/mysql-test/suite/rocksdb/r/i_s_deadlock.result b/mysql-test/suite/rocksdb/r/i_s_deadlock.result index 1c67387bcdc1..9686dd8b12f7 100644 --- a/mysql-test/suite/rocksdb/r/i_s_deadlock.result +++ b/mysql-test/suite/rocksdb/r/i_s_deadlock.result @@ -1,3 +1,14 @@ +show create table information_schema.rocksdb_cfstats; +Table Create Table +ROCKSDB_CFSTATS CREATE TEMPORARY TABLE `ROCKSDB_CFSTATS` ( + `CF_NAME` varchar(193) NOT NULL DEFAULT '', + `STAT_TYPE` varchar(193) NOT NULL DEFAULT '', + `VALUE` bigint(8) NOT NULL DEFAULT '0' +) ENGINE=MEMORY DEFAULT CHARSET=utf8 +uninstall plugin rocksdb; +select * from information_schema.rocksdb_cfstats; +ERROR HY000: Plugin 'ROCKSDB' is not loaded +# restart set @prior_lock_wait_timeout = @@rocksdb_lock_wait_timeout; set @prior_deadlock_detect = @@rocksdb_deadlock_detect; set @prior_max_latest_deadlocks = @@rocksdb_max_latest_deadlocks; @@ -6,18 +17,6 @@ set global rocksdb_lock_wait_timeout = 10000; # Clears deadlock buffer of any prior deadlocks. set global rocksdb_max_latest_deadlocks = 0; set global rocksdb_max_latest_deadlocks = @prior_max_latest_deadlocks; -show create table information_schema.rocksdb_deadlock; -Table Create Table -ROCKSDB_DEADLOCK CREATE TEMPORARY TABLE `ROCKSDB_DEADLOCK` ( - `DEADLOCK_ID` bigint(8) NOT NULL DEFAULT '0', - `TRANSACTION_ID` bigint(8) NOT NULL DEFAULT '0', - `CF_NAME` varchar(193) NOT NULL DEFAULT '', - `WAITING_KEY` varchar(513) NOT NULL DEFAULT '', - `LOCK_TYPE` varchar(193) NOT NULL DEFAULT '', - `INDEX_NAME` varchar(193) NOT NULL DEFAULT '', - `TABLE_NAME` varchar(193) NOT NULL DEFAULT '', - `ROLLED_BACK` bigint(8) NOT NULL DEFAULT '0' -) ENGINE=MEMORY DEFAULT CHARSET=utf8 create table t (i int primary key) engine=rocksdb; insert into t values (1), (2), (3); select * from information_schema.rocksdb_deadlock; diff --git a/mysql-test/suite/rocksdb/r/i_s_global_info.result b/mysql-test/suite/rocksdb/r/i_s_global_info.result new file mode 100644 index 000000000000..60cff7318601 --- /dev/null +++ b/mysql-test/suite/rocksdb/r/i_s_global_info.result @@ -0,0 +1,11 @@ +show create table information_schema.rocksdb_global_info; +Table Create Table +ROCKSDB_GLOBAL_INFO CREATE TEMPORARY TABLE `ROCKSDB_GLOBAL_INFO` ( + `TYPE` varchar(513) NOT NULL DEFAULT '', + `NAME` varchar(513) NOT NULL DEFAULT '', + `VALUE` varchar(513) NOT NULL DEFAULT '' +) ENGINE=MEMORY DEFAULT CHARSET=utf8 +uninstall plugin rocksdb; +select * from information_schema.rocksdb_global_info; +ERROR HY000: Plugin 'ROCKSDB' is not loaded +# restart diff --git a/mysql-test/suite/rocksdb/r/i_s_index_file_map.result b/mysql-test/suite/rocksdb/r/i_s_index_file_map.result index e995567997a9..e81dae511eb9 100644 --- a/mysql-test/suite/rocksdb/r/i_s_index_file_map.result +++ b/mysql-test/suite/rocksdb/r/i_s_index_file_map.result @@ -1,3 +1,21 @@ +show create table information_schema.rocksdb_index_file_map; +Table Create Table +ROCKSDB_INDEX_FILE_MAP CREATE TEMPORARY TABLE `ROCKSDB_INDEX_FILE_MAP` ( + `COLUMN_FAMILY` int(4) NOT NULL DEFAULT '0', + `INDEX_NUMBER` int(4) NOT NULL DEFAULT '0', + `SST_NAME` varchar(193) NOT NULL DEFAULT '', + `NUM_ROWS` bigint(8) NOT NULL DEFAULT '0', + `DATA_SIZE` bigint(8) NOT NULL DEFAULT '0', + `ENTRY_DELETES` bigint(8) NOT NULL DEFAULT '0', + `ENTRY_SINGLEDELETES` bigint(8) NOT NULL DEFAULT '0', + `ENTRY_MERGES` bigint(8) NOT NULL DEFAULT '0', + `ENTRY_OTHERS` bigint(8) NOT NULL DEFAULT '0', + `DISTINCT_KEYS_PREFIX` varchar(400) NOT NULL DEFAULT '' +) ENGINE=MEMORY DEFAULT CHARSET=utf8 +uninstall plugin rocksdb; +select * from information_schema.rocksdb_index_file_map; +ERROR HY000: Plugin 'ROCKSDB' is not loaded +# restart CREATE TABLE t1 (i INT PRIMARY KEY, j INT, INDEX(j)) ENGINE = ROCKSDB; CREATE TABLE t2 (k INT PRIMARY KEY, l INT REFERENCES t1.i) ENGINE = ROCKSDB; INSERT INTO t1 VALUES (1,2), (2,4), (3,6), (4,8), (5,10); diff --git a/mysql-test/suite/rocksdb/r/i_s_locks.result b/mysql-test/suite/rocksdb/r/i_s_locks.result index 38037c9ab80d..d5a9b18d1a26 100644 --- a/mysql-test/suite/rocksdb/r/i_s_locks.result +++ b/mysql-test/suite/rocksdb/r/i_s_locks.result @@ -1,5 +1,17 @@ +show create table information_schema.rocksdb_locks; +Table Create Table +ROCKSDB_LOCKS CREATE TEMPORARY TABLE `ROCKSDB_LOCKS` ( + `COLUMN_FAMILY_ID` int(4) NOT NULL DEFAULT '0', + `TRANSACTION_ID` int(4) NOT NULL DEFAULT '0', + `KEY` varchar(513) NOT NULL DEFAULT '', + `MODE` varchar(32) NOT NULL DEFAULT '' +) ENGINE=MEMORY DEFAULT CHARSET=utf8 +uninstall plugin rocksdb; +select * from information_schema.rocksdb_locks; +ERROR HY000: Plugin 'ROCKSDB' is not loaded +# restart set session transaction isolation level read committed; -create table t1 (a int, primary key(a) comment 'lock_into_cf1') engine=rocksdb; +create table t1 (a int, primary key(a) comment 'lock_info_cf1') engine=rocksdb; insert into t1 values (1); insert into t1 values (2); create table t2 (a int, primary key(a) comment 'lock_info_cf2') engine=rocksdb; @@ -21,10 +33,10 @@ left join rocksdb_ddl on rocksdb_locks.column_family_id=rocksdb_ddl.column_family order by rocksdb_ddl.cf; cf transaction_id key +lock_info_cf1 _txn_id_ _key_ +lock_info_cf1 _txn_id_ _key_ lock_info_cf2 _txn_id_ _key_ lock_info_cf2 _txn_id_ _key_ -lock_into_cf1 _txn_id_ _key_ -lock_into_cf1 _txn_id_ _key_ use test; DROP TABLE t1; DROP TABLE t2; diff --git a/mysql-test/suite/rocksdb/r/i_s_perf_context.result b/mysql-test/suite/rocksdb/r/i_s_perf_context.result index 2c22a8164491..bb39c89a2c15 100644 --- a/mysql-test/suite/rocksdb/r/i_s_perf_context.result +++ b/mysql-test/suite/rocksdb/r/i_s_perf_context.result @@ -1,3 +1,26 @@ +show create table information_schema.rocksdb_perf_context; +Table Create Table +ROCKSDB_PERF_CONTEXT CREATE TEMPORARY TABLE `ROCKSDB_PERF_CONTEXT` ( + `TABLE_SCHEMA` varchar(193) NOT NULL DEFAULT '', + `TABLE_NAME` varchar(193) NOT NULL DEFAULT '', + `PARTITION_NAME` varchar(193) DEFAULT NULL, + `STAT_TYPE` varchar(193) NOT NULL DEFAULT '', + `VALUE` bigint(8) NOT NULL DEFAULT '0' +) ENGINE=MEMORY DEFAULT CHARSET=utf8 +uninstall plugin rocksdb; +select * from information_schema.rocksdb_perf_context; +ERROR HY000: Plugin 'ROCKSDB' is not loaded +# restart +show create table information_schema.rocksdb_perf_context_global; +Table Create Table +ROCKSDB_PERF_CONTEXT_GLOBAL CREATE TEMPORARY TABLE `ROCKSDB_PERF_CONTEXT_GLOBAL` ( + `STAT_TYPE` varchar(193) NOT NULL DEFAULT '', + `VALUE` bigint(8) NOT NULL DEFAULT '0' +) ENGINE=MEMORY DEFAULT CHARSET=utf8 +uninstall plugin rocksdb; +select * from information_schema.rocksdb_perf_context_global; +ERROR HY000: Plugin 'ROCKSDB' is not loaded +# restart SET @prior_rocksdb_perf_context_level = @@rocksdb_perf_context_level; SET GLOBAL rocksdb_perf_context_level=3; CREATE TABLE t1 (i INT, j INT, PRIMARY KEY (i)) ENGINE = ROCKSDB; diff --git a/mysql-test/suite/rocksdb/r/i_s_trx.result b/mysql-test/suite/rocksdb/r/i_s_trx.result index a4bd485300c6f157330692bc6538e959c792e89e..bcd78cf39757c72eeee551e0a75fcb57129fa019 100644 GIT binary patch literal 1586 zcmb7EU2obj6y2-+E3UK$V45cAHmMup!A;x}k;Ke#)beE9;I7d^QYD7%=g$rwr4=o0 z@{-8MzUN$@bDR6>FJ!e=MuSneg@(MmtLmjPc~#0LyVpzgrLM9+&Ei&?`ri->heF1IP{A4(o z0d$q?S`Tz-CFs#!gVm;MZ3CxcYKlDu@yINq`KwDSMJZ0=)*f6>~l8VPH{6B F;{UBS!TA6H delta 9 QcmdnQbAn~_D`pQS02BQKbpQYW diff --git a/mysql-test/suite/rocksdb/t/i_s_cfoptions.test b/mysql-test/suite/rocksdb/t/i_s_cfoptions.test new file mode 100644 index 000000000000..737c6fdac81e --- /dev/null +++ b/mysql-test/suite/rocksdb/t/i_s_cfoptions.test @@ -0,0 +1,7 @@ +--source include/have_rocksdb.inc + +# +# Information Schema column family options +# +--let i_s_plugin=rocksdb_cf_options +--source suite/rocksdb/include/i_s_basic.inc diff --git a/mysql-test/suite/rocksdb/t/i_s_cfstats.test b/mysql-test/suite/rocksdb/t/i_s_cfstats.test new file mode 100644 index 000000000000..40bec5115365 --- /dev/null +++ b/mysql-test/suite/rocksdb/t/i_s_cfstats.test @@ -0,0 +1,7 @@ +--source include/have_rocksdb.inc + +# +# Information Schema column family statistics +# +--let i_s_plugin=rocksdb_cfstats +--source suite/rocksdb/include/i_s_basic.inc diff --git a/mysql-test/suite/rocksdb/t/i_s_compaction_stats.test b/mysql-test/suite/rocksdb/t/i_s_compaction_stats.test new file mode 100644 index 000000000000..30e4173b43cd --- /dev/null +++ b/mysql-test/suite/rocksdb/t/i_s_compaction_stats.test @@ -0,0 +1,7 @@ +--source include/have_rocksdb.inc + +# +# Information Schema compaction statistics +# +--let i_s_plugin=rocksdb_compaction_stats +--source suite/rocksdb/include/i_s_basic.inc diff --git a/mysql-test/suite/rocksdb/t/i_s_dbstats.test b/mysql-test/suite/rocksdb/t/i_s_dbstats.test new file mode 100644 index 000000000000..124592c7ffdf --- /dev/null +++ b/mysql-test/suite/rocksdb/t/i_s_dbstats.test @@ -0,0 +1,7 @@ +--source include/have_rocksdb.inc + +# +# Information Schema database statistics +# +--let i_s_plugin=rocksdb_dbstats +--source suite/rocksdb/include/i_s_basic.inc diff --git a/mysql-test/suite/rocksdb/t/i_s_ddl.test b/mysql-test/suite/rocksdb/t/i_s_ddl.test index ff173f20ad54..48ed7e279d94 100644 --- a/mysql-test/suite/rocksdb/t/i_s_ddl.test +++ b/mysql-test/suite/rocksdb/t/i_s_ddl.test @@ -1,9 +1,10 @@ --source include/have_rocksdb.inc # -# Information Schema DDL +# Information Schema Data Dictionary/DDL information # - +--let i_s_plugin=rocksdb_ddl +--source suite/rocksdb/include/i_s_basic.inc CREATE TABLE is_ddl_t1 (i INT, j INT, k INT, l INT, PRIMARY KEY (i), KEY (j), KEY (k, l) COMMENT 'kl_cf') diff --git a/mysql-test/suite/rocksdb/t/i_s_deadlock.test b/mysql-test/suite/rocksdb/t/i_s_deadlock.test index 6ef8268b4bbe..f7ffe3e3804a 100644 --- a/mysql-test/suite/rocksdb/t/i_s_deadlock.test +++ b/mysql-test/suite/rocksdb/t/i_s_deadlock.test @@ -1,5 +1,11 @@ --source include/have_rocksdb.inc +# +# Information Schema deadlock information +# +--let i_s_plugin=rocksdb_cfstats +--source suite/rocksdb/include/i_s_basic.inc + set @prior_lock_wait_timeout = @@rocksdb_lock_wait_timeout; set @prior_deadlock_detect = @@rocksdb_deadlock_detect; set @prior_max_latest_deadlocks = @@rocksdb_max_latest_deadlocks; @@ -23,7 +29,6 @@ connect (con3,localhost,root,,); let $con3= `SELECT CONNECTION_ID()`; connection default; -show create table information_schema.rocksdb_deadlock; create table t (i int primary key) engine=rocksdb; insert into t values (1), (2), (3); diff --git a/mysql-test/suite/rocksdb/t/i_s_global_info.test b/mysql-test/suite/rocksdb/t/i_s_global_info.test new file mode 100644 index 000000000000..794286648218 --- /dev/null +++ b/mysql-test/suite/rocksdb/t/i_s_global_info.test @@ -0,0 +1,7 @@ +--source include/have_rocksdb.inc + +# +# Information Schema global information +# +--let i_s_plugin=rocksdb_global_info +--source suite/rocksdb/include/i_s_basic.inc diff --git a/mysql-test/suite/rocksdb/t/i_s_index_file_map.test b/mysql-test/suite/rocksdb/t/i_s_index_file_map.test index ae5d3674c4dc..0f542617cea7 100644 --- a/mysql-test/suite/rocksdb/t/i_s_index_file_map.test +++ b/mysql-test/suite/rocksdb/t/i_s_index_file_map.test @@ -3,6 +3,8 @@ # # Information Schema index file map # +--let i_s_plugin=rocksdb_index_file_map +--source suite/rocksdb/include/i_s_basic.inc CREATE TABLE t1 (i INT PRIMARY KEY, j INT, INDEX(j)) ENGINE = ROCKSDB; CREATE TABLE t2 (k INT PRIMARY KEY, l INT REFERENCES t1.i) ENGINE = ROCKSDB; diff --git a/mysql-test/suite/rocksdb/t/i_s_locks.test b/mysql-test/suite/rocksdb/t/i_s_locks.test index a9b8667250c4..4054aa03b59f 100644 --- a/mysql-test/suite/rocksdb/t/i_s_locks.test +++ b/mysql-test/suite/rocksdb/t/i_s_locks.test @@ -1,8 +1,14 @@ --source include/have_rocksdb.inc +# +# Information Schema lock information +# +--let i_s_plugin=rocksdb_locks +--source suite/rocksdb/include/i_s_basic.inc + set session transaction isolation level read committed; -create table t1 (a int, primary key(a) comment 'lock_into_cf1') engine=rocksdb; +create table t1 (a int, primary key(a) comment 'lock_info_cf1') engine=rocksdb; insert into t1 values (1); insert into t1 values (2); diff --git a/mysql-test/suite/rocksdb/t/i_s_perf_context.test b/mysql-test/suite/rocksdb/t/i_s_perf_context.test index 4bff196aaf23..455e51acf921 100644 --- a/mysql-test/suite/rocksdb/t/i_s_perf_context.test +++ b/mysql-test/suite/rocksdb/t/i_s_perf_context.test @@ -1,8 +1,14 @@ --source include/have_rocksdb.inc # -# Information Schema perf context +# Information Schema performance context statistics and performance context +# global statictocs # +--let i_s_plugin=rocksdb_perf_context +--source suite/rocksdb/include/i_s_basic.inc + +--let i_s_plugin=rocksdb_perf_context_global +--source suite/rocksdb/include/i_s_basic.inc SET @prior_rocksdb_perf_context_level = @@rocksdb_perf_context_level; SET GLOBAL rocksdb_perf_context_level=3; diff --git a/mysql-test/suite/rocksdb/t/i_s_trx.test b/mysql-test/suite/rocksdb/t/i_s_trx.test index 68fa0c39d77f..cf9a65028968 100644 --- a/mysql-test/suite/rocksdb/t/i_s_trx.test +++ b/mysql-test/suite/rocksdb/t/i_s_trx.test @@ -1,5 +1,11 @@ --source include/have_rocksdb.inc +# +# Information Schema transaction information +# +--let i_s_plugin=rocksdb_trx +--source suite/rocksdb/include/i_s_basic.inc + set session transaction isolation level read committed; create table t1 (a int) engine=rocksdb; insert into t1 values (1); diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index 39d39cdb85a4..f484f4315df5 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -152,6 +152,7 @@ static std::shared_ptr properties_collector_factory; Rdb_dict_manager dict_manager; Rdb_cf_manager cf_manager; Rdb_ddl_manager ddl_manager; +Rdb_hton_init_state hton_init_state; /** MyRocks background thread control @@ -3526,6 +3527,10 @@ static int rocksdb_init_func(void *const p) { // Validate the assumption about the size of ROCKSDB_SIZEOF_HIDDEN_PK_COLUMN. static_assert(sizeof(longlong) == 8, "Assuming that longlong is 8 bytes."); + // Lock the handlertons initialized status flag for writing + Rdb_hton_init_state::Scoped_lock state_lock(*rdb_get_hton_init_state(), true); + SHIP_ASSERT(!rdb_get_hton_init_state()->initialized()); + init_rocksdb_psi_keys(); rocksdb_hton = (handlerton *)p; @@ -3644,6 +3649,7 @@ static int rocksdb_init_func(void *const p) { // NO_LINT_DEBUG sql_print_error("RocksDB: rocksdb_flush_log_at_trx_commit needs to be 0 " "to use allow_mmap_writes"); + rdb_open_tables.free_hash(); DBUG_RETURN(HA_EXIT_FAILURE); } @@ -3671,6 +3677,7 @@ static int rocksdb_init_func(void *const p) { } else { rdb_open_tables.free_hash(); rdb_log_status_error(status, "Error listing column families"); + rdb_open_tables.free_hash(); DBUG_RETURN(HA_EXIT_FAILURE); } } else @@ -3728,11 +3735,13 @@ static int rocksdb_init_func(void *const p) { // NO_LINT_DEBUG sql_print_error("RocksDB: Persistent cache returned error: (%s)", status.getState()); + rdb_open_tables.free_hash(); DBUG_RETURN(HA_EXIT_FAILURE); } rocksdb_tbl_options->persistent_cache = pcache; } else if (strlen(rocksdb_persistent_cache_path)) { sql_print_error("RocksDB: Must specify rocksdb_persistent_cache_size_mb"); + rdb_open_tables.free_hash(); DBUG_RETURN(HA_EXIT_FAILURE); } @@ -3894,6 +3903,9 @@ static int rocksdb_init_func(void *const p) { // has been successfully initialized. commit_latency_stats = new rocksdb::HistogramImpl(); + // succeeded, set the init status flag + rdb_get_hton_init_state()->set_initialized(true); + sql_print_information("RocksDB instance opened"); DBUG_RETURN(HA_EXIT_SUCCESS); } @@ -3907,6 +3919,12 @@ static int rocksdb_done_func(void *const p) { int error = 0; + // If we finalize the storage engine plugin, it is no longer initialized. + // Grab a writer lock for the duration of the call, so we can clear the flag + // and destroy the handlerton and global state in isolation. + Rdb_hton_init_state::Scoped_lock state_lock(*rdb_get_hton_init_state(), true); + SHIP_ASSERT(rdb_get_hton_init_state()->initialized()); + // signal the drop index thread to stop rdb_drop_idx_thread.signal(true); @@ -3986,6 +4004,9 @@ static int rocksdb_done_func(void *const p) { my_error_unregister(HA_ERR_ROCKSDB_FIRST, HA_ERR_ROCKSDB_LAST); + // clear the initialized flag and unlock + rdb_get_hton_init_state()->set_initialized(false); + DBUG_RETURN(error); } @@ -11506,6 +11527,10 @@ Rdb_dict_manager *rdb_get_dict_manager(void) { return &dict_manager; } Rdb_ddl_manager *rdb_get_ddl_manager(void) { return &ddl_manager; } +Rdb_hton_init_state *rdb_get_hton_init_state(void) { + return &hton_init_state; +} + void rocksdb_set_compaction_options(my_core::THD *const thd MY_ATTRIBUTE((__unused__)), my_core::st_mysql_sys_var *const var diff --git a/storage/rocksdb/ha_rocksdb.h b/storage/rocksdb/ha_rocksdb.h index 686692a2d57e..6389c20b85de 100644 --- a/storage/rocksdb/ha_rocksdb.h +++ b/storage/rocksdb/ha_rocksdb.h @@ -1386,4 +1386,75 @@ struct Rdb_inplace_alter_ctx : public my_core::inplace_alter_handler_ctx { Rdb_inplace_alter_ctx(const Rdb_inplace_alter_ctx &); Rdb_inplace_alter_ctx &operator=(const Rdb_inplace_alter_ctx &); }; + +/* + Helper class to control access/init to handlerton instance. + Contains a flag that is set if the handlerton is in an initialized, usable + state, plus a reader-writer lock to protect it without serializing reads. + Since we don't have static initializers for the opaque mysql_rwlock type, + use constructor and destructor functions to create and destroy + the lock before and after main(), respectively. +*/ +struct Rdb_hton_init_state { + struct Scoped_lock { + Scoped_lock(Rdb_hton_init_state& state, bool write) : m_state(state) { + if (write) + m_state.lock_write(); + else + m_state.lock_read(); + } + ~Scoped_lock() { + m_state.unlock(); + } + private: + Scoped_lock(const Scoped_lock& sl) : m_state(sl.m_state) {} + void operator=(const Scoped_lock&) {} + + Rdb_hton_init_state& m_state; + }; + + Rdb_hton_init_state() : m_initialized(false) { + /* + m_rwlock can not be instrumented as it must be initialized before + mysql_mutex_register() call to protect some globals from race condition. + */ + mysql_rwlock_init(0, &m_rwlock); + } + + ~Rdb_hton_init_state() { + mysql_rwlock_destroy(&m_rwlock); + } + + void lock_read() { + mysql_rwlock_rdlock(&m_rwlock); + } + + void lock_write() { + mysql_rwlock_wrlock(&m_rwlock); + } + + void unlock() { + mysql_rwlock_unlock(&m_rwlock); + } + + /* + Must be called with either a read or write lock held, unable to enforce + behavior as mysql_rwlock has no means of determining if a thread has a lock + */ + bool initialized() const { + return m_initialized; + } + + /* + Must be called with only a write lock held, unable to enforce behavior as + mysql_rwlock has no means of determining if a thread has a lock + */ + void set_initialized(bool init) { + m_initialized = init; + } + +private: + mysql_rwlock_t m_rwlock; + bool m_initialized; +}; } // namespace myrocks diff --git a/storage/rocksdb/ha_rocksdb_proto.h b/storage/rocksdb/ha_rocksdb_proto.h index 092f25995dad..349d9690aa93 100644 --- a/storage/rocksdb/ha_rocksdb_proto.h +++ b/storage/rocksdb/ha_rocksdb_proto.h @@ -90,4 +90,8 @@ Rdb_dict_manager *rdb_get_dict_manager(void) class Rdb_ddl_manager; Rdb_ddl_manager *rdb_get_ddl_manager(void) MY_ATTRIBUTE((__warn_unused_result__)); + +struct Rdb_hton_init_state; +Rdb_hton_init_state *rdb_get_hton_init_state(void) + MY_ATTRIBUTE((__warn_unused_result__)); } // namespace myrocks diff --git a/storage/rocksdb/rdb_i_s.cc b/storage/rocksdb/rdb_i_s.cc index 95c432a40f27..47b843f2a873 100644 --- a/storage/rocksdb/rdb_i_s.cc +++ b/storage/rocksdb/rdb_i_s.cc @@ -78,6 +78,13 @@ static int rdb_i_s_cfstats_fill_table(my_core::THD *const thd, DBUG_ASSERT(tables->table->field != nullptr); int ret = 0; + Rdb_hton_init_state::Scoped_lock state_lock(*rdb_get_hton_init_state(), + false); + if (!rdb_get_hton_init_state()->initialized()) { + ret = ER_PLUGIN_IS_NOT_LOADED; + my_error(ret, MYF(0), rocksdb_hton_name); + DBUG_RETURN(ret); + } uint64_t val; const std::vector> cf_properties = { @@ -174,6 +181,13 @@ static int rdb_i_s_dbstats_fill_table(my_core::THD *const thd, DBUG_ASSERT(tables->table->field != nullptr); int ret = 0; + Rdb_hton_init_state::Scoped_lock state_lock(*rdb_get_hton_init_state(), + false); + if (!rdb_get_hton_init_state()->initialized()) { + ret = ER_PLUGIN_IS_NOT_LOADED; + my_error(ret, MYF(0), rocksdb_hton_name); + DBUG_RETURN(ret); + } uint64_t val; const std::vector> db_properties = { @@ -272,6 +286,14 @@ static int rdb_i_s_perf_context_fill_table(my_core::THD *const thd, DBUG_ASSERT(tables->table != nullptr); int ret = 0; + Rdb_hton_init_state::Scoped_lock state_lock(*rdb_get_hton_init_state(), + false); + if (!rdb_get_hton_init_state()->initialized()) { + ret = ER_PLUGIN_IS_NOT_LOADED; + my_error(ret, MYF(0), rocksdb_hton_name); + DBUG_RETURN(ret); + } + Field **field = tables->table->field; DBUG_ASSERT(field != nullptr); @@ -370,6 +392,13 @@ static int rdb_i_s_perf_context_global_fill_table( DBUG_ASSERT(tables->table->field != nullptr); int ret = 0; + Rdb_hton_init_state::Scoped_lock state_lock(*rdb_get_hton_init_state(), + false); + if (!rdb_get_hton_init_state()->initialized()) { + ret = ER_PLUGIN_IS_NOT_LOADED; + my_error(ret, MYF(0), rocksdb_hton_name); + DBUG_RETURN(ret); + } rocksdb::DB *const rdb = rdb_get_rocksdb_db(); @@ -437,6 +466,13 @@ static int rdb_i_s_cfoptions_fill_table(my_core::THD *const thd, DBUG_ASSERT(tables != nullptr); int ret = 0; + Rdb_hton_init_state::Scoped_lock state_lock(*rdb_get_hton_init_state(), + false); + if (!rdb_get_hton_init_state()->initialized()) { + ret = ER_PLUGIN_IS_NOT_LOADED; + my_error(ret, MYF(0), rocksdb_hton_name); + DBUG_RETURN(ret); + } rocksdb::DB *const rdb = rdb_get_rocksdb_db(); @@ -733,6 +769,13 @@ static int rdb_i_s_global_info_fill_table(my_core::THD *const thd, static const uint32_t CF_ID_INDEX_BUF_LEN = 60; int ret = 0; + Rdb_hton_init_state::Scoped_lock state_lock(*rdb_get_hton_init_state(), + false); + if (!rdb_get_hton_init_state()->initialized()) { + ret = ER_PLUGIN_IS_NOT_LOADED; + my_error(ret, MYF(0), rocksdb_hton_name); + DBUG_RETURN(ret); + } /* max index info */ const Rdb_dict_manager *const dict_manager = rdb_get_dict_manager(); @@ -813,6 +856,14 @@ static int rdb_i_s_compact_stats_fill_table(my_core::THD *thd, DBUG_ENTER_FUNC(); int ret = 0; + Rdb_hton_init_state::Scoped_lock state_lock(*rdb_get_hton_init_state(), + false); + if (!rdb_get_hton_init_state()->initialized()) { + ret = ER_PLUGIN_IS_NOT_LOADED; + my_error(ret, MYF(0), rocksdb_hton_name); + DBUG_RETURN(ret); + } + rocksdb::DB *rdb = rdb_get_rocksdb_db(); if (!rdb) { @@ -980,6 +1031,14 @@ static int rdb_i_s_ddl_fill_table(my_core::THD *const thd, DBUG_ASSERT(tables->table != nullptr); int ret = 0; + Rdb_hton_init_state::Scoped_lock state_lock(*rdb_get_hton_init_state(), + false); + if (!rdb_get_hton_init_state()->initialized()) { + ret = ER_PLUGIN_IS_NOT_LOADED; + my_error(ret, MYF(0), rocksdb_hton_name); + DBUG_RETURN(ret); + } + rocksdb::DB *const rdb = rdb_get_rocksdb_db(); if (!rdb) { @@ -1125,6 +1184,14 @@ static int rdb_i_s_index_file_map_fill_table(my_core::THD *const thd, DBUG_ASSERT(tables->table != nullptr); int ret = 0; + Rdb_hton_init_state::Scoped_lock state_lock(*rdb_get_hton_init_state(), + false); + if (!rdb_get_hton_init_state()->initialized()) { + ret = ER_PLUGIN_IS_NOT_LOADED; + my_error(ret, MYF(0), rocksdb_hton_name); + DBUG_RETURN(ret); + } + Field **field = tables->table->field; DBUG_ASSERT(field != nullptr); @@ -1263,6 +1330,13 @@ static int rdb_i_s_lock_info_fill_table(my_core::THD *const thd, DBUG_ASSERT(tables->table->field != nullptr); int ret = 0; + Rdb_hton_init_state::Scoped_lock state_lock(*rdb_get_hton_init_state(), + false); + if (!rdb_get_hton_init_state()->initialized()) { + ret = ER_PLUGIN_IS_NOT_LOADED; + my_error(ret, MYF(0), rocksdb_hton_name); + DBUG_RETURN(ret); + } rocksdb::TransactionDB *const rdb = rdb_get_rocksdb_db(); @@ -1378,6 +1452,14 @@ static int rdb_i_s_trx_info_fill_table(my_core::THD *const thd, DBUG_ASSERT(tables->table->field != nullptr); int ret = 0; + Rdb_hton_init_state::Scoped_lock state_lock(*rdb_get_hton_init_state(), + false); + if (!rdb_get_hton_init_state()->initialized()) { + ret = ER_PLUGIN_IS_NOT_LOADED; + my_error(ret, MYF(0), rocksdb_hton_name); + DBUG_RETURN(ret); + } + rocksdb::DB *const rdb = rdb_get_rocksdb_db(); if (!rdb) { @@ -1495,6 +1577,14 @@ static int rdb_i_s_deadlock_info_fill_table( static const std::string str_shared("SHARED"); int ret = 0; + Rdb_hton_init_state::Scoped_lock state_lock(*rdb_get_hton_init_state(), + false); + if (!rdb_get_hton_init_state()->initialized()) { + ret = ER_PLUGIN_IS_NOT_LOADED; + my_error(ret, MYF(0), rocksdb_hton_name); + DBUG_RETURN(ret); + } + rocksdb::DB *const rdb = rdb_get_rocksdb_db(); if (!rdb) { From 2bd7a4d9b8a6603beeee05152e9501c30808b717 Mon Sep 17 00:00:00 2001 From: hrvojem Date: Fri, 5 Jan 2018 21:06:46 +0100 Subject: [PATCH 0360/1221] Adding missing TDB-35 description to the release notes (5.7) --- doc/source/release-notes/Percona-Server-5.7.20-18.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/doc/source/release-notes/Percona-Server-5.7.20-18.rst b/doc/source/release-notes/Percona-Server-5.7.20-18.rst index 5826504f53d0..c286fdd44ba6 100644 --- a/doc/source/release-notes/Percona-Server-5.7.20-18.rst +++ b/doc/source/release-notes/Percona-Server-5.7.20-18.rst @@ -76,6 +76,9 @@ Bugs Fixed * |TokuDB| would encode already encoded database name for a directory name. Bug fixed :tdbbug:`74`. +* Optimizer would pick wrong index for |TokuDB| tables having a hot created + index, unless ``ALTER TABLE`` was run. Bug fixed :tdbbug:`35`. + Other bugs fixed: :bug:`1720810`, :tdbbug:`83`, :tdbbug:`80`, and :tdbbug:`75`. MyRocks Changes From 76b7e4989b4766fc0e015d6d6e90a54e1d4b2fb0 Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Mon, 8 Jan 2018 14:24:49 +0530 Subject: [PATCH 0361/1221] From ffa41b0524829bf38d324e3190c8825ce136f8ec Mon Sep 17 00:00:00 2001 From: Przemek Skibinski Date: Thu, 21 Dec 2017 16:44:28 +0100 Subject: [PATCH 0362/1221] Added .travis.yml for Travis CI This script adds an option of using free TravisCI.org services as additional tests for percona-server. To use the script each GitHub user have to create a Travis account and enable testing for his/her fork of percona-server. Tests are performed on Ubuntu 14.04 LTS (Trusty Tahr). This script starts 9 Travis jobs. A job number 1 checks if the last commit is valid with clang-format. The rest of jobs builds precona-server using the latest versions of gcc-4.8, gcc-5, gcc-6, gcc-7, clang-4.0, clang-5.0 with both "RelWithDebInfo" and "Debug" compilation. There are 2 additional jobs for gcc-7 and clang-5.0 that use -DWITH_SSL=bundled instead of -DWITH_SSL=system Jobs with a number >= 6 are done only for a pull request to speed up testing. --- .travis.yml | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 000000000000..4e724a793322 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,77 @@ +# Ubuntu 14.04 +dist: trusty +sudo: required +language: c +matrix: + include: + - env: COMMAND=clang-test + script: + - wget https://llvm.org/svn/llvm-project/cfe/trunk/tools/clang-format/clang-format-diff.py + - chmod a+x clang-format-diff.py + - git diff -U0 --no-color HEAD^1 | ./clang-format-diff.py -p1 >_GIT_DIFF + - '[ ! -s _GIT_DIFF ] && echo The last git commit is clang-formatted || cat _GIT_DIFF' + + - env: GCC=gcc-4.8 CXX=g++-4.8 LIBTYPE=system + - env: GCC=gcc-7 CXX=g++-7 LIBTYPE=system PACKAGES=g++-7 PPA=ubuntu-toolchain-r/test + - env: GCC=gcc-7 CXX=g++-7 LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" PACKAGES=g++-7 PPA=ubuntu-toolchain-r/test + - env: GCC=clang-5.0 CXX=clang++-5.0 LIBTYPE=system PACKAGES=clang-5.0 LLVM=llvm-toolchain-trusty-5.0 + # only for pull requests + - env: GCC=gcc-5 CXX=g++-5 LIBTYPE=system PACKAGES=g++-5 PPA=ubuntu-toolchain-r/test + - env: GCC=gcc-6 CXX=g++-6 LIBTYPE=system PACKAGES=g++-6 PPA=ubuntu-toolchain-r/test + - env: GCC=clang-4.0 CXX=clang++-4.0 LIBTYPE=system PACKAGES=clang-4.0 PPA=ubuntu-toolchain-r/test LLVM=llvm-toolchain-trusty-4.0 + - env: GCC=clang-5.0 CXX=clang++-5.0 LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" PACKAGES=clang-5.0 LLVM=llvm-toolchain-trusty-5.0 + +script: + - export CC=$GCC + - JOB_NUMBER=$(echo $TRAVIS_JOB_NUMBER | sed -e 's:[0-9][0-9]*\.\(.*\):\1:') + - echo PACKAGES=$PACKAGES PPA=$PPA LLVM=$LLVM JOB_NUMBER=$JOB_NUMBER TRAVIS_BRANCH=$TRAVIS_BRANCH TRAVIS_EVENT_TYPE=$TRAVIS_EVENT_TYPE TRAVIS_PULL_REQUEST=$TRAVIS_PULL_REQUEST + + # Jobs with a number >= 6 are done only for a pull request + - if [ $JOB_NUMBER -ge 6 ] && [ "$TRAVIS_EVENT_TYPE" != "pull_request" ]; then + echo Finishing as this is not a pull request; + travis_terminate 0; + fi + + # Update required LLVM and Ubuntu Toolchain repositories + - if [ "$LLVM" != "" ]; then + curl -sSL "http://apt.llvm.org/llvm-snapshot.gpg.key" | sudo -E apt-key add -; + echo "deb http://apt.llvm.org/trusty/ $LLVM main" | sudo tee -a /etc/apt/sources.list > /dev/null; + fi + - if [ "$PPA" != "" ]; then + sudo -E apt-add-repository -y "ppa:$PPA"; + fi + - if [ "$LLVM" != "" ] || [ "$PPA" != "" ]; then + sudo -E apt-get -yq update &>> ~/apt-get-update.log; + fi + + # Download dependencies + - PACKAGES="$PACKAGES cmake cmake-curses-gui libaio-dev libssl-dev libncurses5-dev bison" + - sudo -E apt-get -yq --no-install-suggests --no-install-recommends install $PACKAGES + - mkdir bin; cd bin + - $CC -v + - $CXX -v + + # Test "RelWithDebInfo" compilation + - cmake .. + -DCMAKE_BUILD_TYPE=RelWithDebInfo + -DMYSQL_MAINTAINER_MODE=ON + -DBUILD_CONFIG=mysql_release + -DFEATURE_SET=community + -DENABLE_DTRACE=OFF + -DWITH_SSL=$LIBTYPE + -DWITH_ZLIB=$LIBTYPE + $CMAKE_OPT + - make -j2 + + # Test "Debug" compilation + - rm -rf * + - cmake .. + -DCMAKE_BUILD_TYPE=Debug + -DMYSQL_MAINTAINER_MODE=ON + -DBUILD_CONFIG=mysql_release + -DFEATURE_SET=community + -DENABLE_DTRACE=OFF + -DWITH_SSL=$LIBTYPE + -DWITH_ZLIB=$LIBTYPE + $CMAKE_OPT + - make -j2 From 61e9608cb966e1a2f586caf1a41e6e8bc5b7aac1 Mon Sep 17 00:00:00 2001 From: Dima Date: Fri, 5 Jan 2018 23:22:23 +0300 Subject: [PATCH 0363/1221] Fixed DOC-669 by adding variable description and details from FAQ written by Vlad Lesin --- doc/source/diagnostics/innodb_show_status.rst | 35 +++++++++++++++++++ doc/source/ps-variables.rst | 5 +++ 2 files changed, 40 insertions(+) diff --git a/doc/source/diagnostics/innodb_show_status.rst b/doc/source/diagnostics/innodb_show_status.rst index 62ff157df62e..7fa4fb8f7918 100644 --- a/doc/source/diagnostics/innodb_show_status.rst +++ b/doc/source/diagnostics/innodb_show_status.rst @@ -71,6 +71,41 @@ output. Specifies the number of locks held to print for each |InnoDB| transaction in ``SHOW ENGINE INNODB STATUS``. +.. variable:: innodb_print_lock_wait_timeout_info + + :version 5.7.20-18: Implemented + :cli: Yes + :conf: Yes + :scope: Global + :dyn: Yes + :vartype: Boolean + :default: ``OFF`` + +Makes |InnoDB| to write information about all lock wait timeout errors +into the log file. + +This allows to find out details about the failed transaction, and, most +importantly, the blocking transaction. Query string can be obtained from +:table:`performance_schema.events_statements_current` table, based on the +``PROCESSLIST_ID`` field, which corresponds to ``thread_id`` from the log +output. + +Taking into account that blocking transaction is often a multiple statement +one, folowing query can be used to obtain blocking thread statements history: + +.. code-block:: mysql + + SELECT s.SQL_TEXT FROM performance_schema.events_statements_history s + INNER JOIN performance_schema.threads t ON t.THREAD_ID = s.THREAD_ID + WHERE t.PROCESSLIST_ID = %d + UNION + SELECT s.SQL_TEXT FROM performance_schema.events_statements_current s + INNER JOIN performance_schema.threads t ON t.THREAD_ID = s.THREAD_ID + WHERE t.PROCESSLIST_ID = %d; + +(PROCESSLIST_ID in this example is exactly the thread id from error log +output). + Status Variables ================ diff --git a/doc/source/ps-variables.rst b/doc/source/ps-variables.rst index 8c6c800cc6a3..c7cacf668c77 100644 --- a/doc/source/ps-variables.rst +++ b/doc/source/ps-variables.rst @@ -147,6 +147,11 @@ System Variables - Yes - Global - Yes + * - :variable:`innodb_print_lock_wait_timeout_info` + - Yes + - Yes + - Global + - Yes * - :variable:`innodb_show_locks_held` - Yes - Yes From be831a3cdaef4ced96f7de5fd57f4c2c814933fb Mon Sep 17 00:00:00 2001 From: Lukasz Kotula Date: Mon, 8 Jan 2018 17:41:18 +0100 Subject: [PATCH 0364/1221] Bug#26965020 - CONNECTING WITH INVALID DEFAULT SCHEMA DOES NOT PRODUCE AN ERROR Description =========== X Plugin ignores an error after setting the default schema, thus authentication with invalid schema is successful. RB: 18043 Reviewed-by: Grzegorz Szwarc Reviewed-by: Tomasz Stepniak --- rapid/plugin/x/mysqlxtest_src/mysqlxtest.cc | 13 ++- .../plugin/x/ngs/include/ngs/client_session.h | 4 +- rapid/plugin/x/ngs/src/client_session.cc | 21 +++- rapid/plugin/x/src/sql_data_context.cc | 5 +- .../mtr/include/connection_default_schema.inc | 19 +++ .../mtr/r/connection_default_schema.result | 88 ++++++++++++++ .../x/tests/mtr/r/mysqlxtest_help.result | 3 +- .../mtr/t/connection_default_schema.test | 110 ++++++++++++++++++ 8 files changed, 254 insertions(+), 9 deletions(-) create mode 100644 rapid/plugin/x/tests/mtr/include/connection_default_schema.inc create mode 100644 rapid/plugin/x/tests/mtr/r/connection_default_schema.result create mode 100644 rapid/plugin/x/tests/mtr/t/connection_default_schema.test diff --git a/rapid/plugin/x/mysqlxtest_src/mysqlxtest.cc b/rapid/plugin/x/mysqlxtest_src/mysqlxtest.cc index 39e66f243e98..31ebd6f01860 100644 --- a/rapid/plugin/x/mysqlxtest_src/mysqlxtest.cc +++ b/rapid/plugin/x/mysqlxtest_src/mysqlxtest.cc @@ -2978,11 +2978,12 @@ class My_command_line_options : public Command_line_options void print_help() { - std::cout << "mysqlxtest \n"; + std::cout << "mysqlxtest [SCHEMA]\n"; std::cout << "Options:\n"; std::cout << "-f, --file= Reads input from file\n"; std::cout << "-I, --import= Reads macro files from dir; required by -->import\n"; std::cout << "--sql= Use SQL as input and execute it like in -->sql block\n"; + std::cout << "-e=, --execute= Aliases for \"--sql\" option\n"; std::cout << "-n, --no-auth Skip authentication which is required by -->sql block (run mode)\n"; std::cout << "--plain-auth Use PLAIN text authentication mechanism\n"; std::cout << "-u, --user= Connection user\n"; @@ -3185,6 +3186,10 @@ class My_command_line_options : public Command_line_options { sql = value; } + else if (check_arg_with_value(argv, i, "--execute", "-e", value)) + { + sql = value; + } else if (check_arg_with_value(argv, i, "--password", "-p", value)) connection.password = value; else if (check_arg_with_value(argv, i, "--ssl-key", NULL, value)) @@ -3264,6 +3269,12 @@ class My_command_line_options : public Command_line_options } else if (exit_code == 0) { + if (argc -1 == i && std::isalnum(argv[i][0])) + { + connection.schema = argv[i]; + break; + } + std::cerr << argv[0] << ": unknown option " << argv[i] << "\n"; exit_code = 1; break; diff --git a/rapid/plugin/x/ngs/include/ngs/client_session.h b/rapid/plugin/x/ngs/include/ngs/client_session.h index dae453598df8..968b69004c76 100644 --- a/rapid/plugin/x/ngs/include/ngs/client_session.h +++ b/rapid/plugin/x/ngs/include/ngs/client_session.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -60,6 +60,8 @@ namespace ngs void stop_auth(); + static bool can_forward_error_code_to_client(const int error_code); + public: State state() const { return m_state; } State state_before_close() const { return m_state_before_close; } diff --git a/rapid/plugin/x/ngs/src/client_session.cc b/rapid/plugin/x/ngs/src/client_session.cc index 376fcb40f65e..5b0ba406e7f8 100644 --- a/rapid/plugin/x/ngs/src/client_session.cc +++ b/rapid/plugin/x/ngs/src/client_session.cc @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2016 Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -212,9 +212,22 @@ void Session::on_auth_success(const Authentication_handler::Response &response) } -void Session::on_auth_failure(const Authentication_handler::Response &responce) +void Session::on_auth_failure(const Authentication_handler::Response &response) { - log_error("%s.%u: Unsuccessful login attempt: %s", m_client.client_id(), m_id, responce.data.c_str()); - m_encoder->send_init_error(ngs::Fatal(ER_ACCESS_DENIED_ERROR, "%s", responce.data.c_str())); + int error_code = ER_ACCESS_DENIED_ERROR; + + log_error("%s.%u: Unsuccessful login attempt: %s", m_client.client_id(), m_id, response.data.c_str()); + + if (can_forward_error_code_to_client(response.error_code)) + { + error_code = response.error_code; + } + + m_encoder->send_init_error(ngs::Fatal(error_code, "%s", response.data.c_str())); stop_auth(); } + +bool Session::can_forward_error_code_to_client(const int error_code) +{ + return ER_DBACCESS_DENIED_ERROR == error_code; +} diff --git a/rapid/plugin/x/src/sql_data_context.cc b/rapid/plugin/x/src/sql_data_context.cc index 898f6b075ba9..39acdec311f4 100644 --- a/rapid/plugin/x/src/sql_data_context.cc +++ b/rapid/plugin/x/src/sql_data_context.cc @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -250,6 +250,7 @@ ngs::Error_code Sql_data_context::authenticate(const char *user, const char *hos data.com_init_db.length = static_cast(strlen(db)); m_callback_delegate.reset(); + if (command_service_run_command(m_mysql_session, COM_INIT_DB, &data, mysqld::get_charset_utf8mb4_general_ci(), m_callback_delegate.callbacks(), m_callback_delegate.representation(), &m_callback_delegate)) return ngs::Error_code(ER_NO_DB_ERROR, "Could not set database"); @@ -265,7 +266,7 @@ ngs::Error_code Sql_data_context::authenticate(const char *user, const char *hos host_or_ip.c_str(), host_or_ip.length()); #endif // HAVE_PSI_THREAD_INTERFACE - return ngs::Error_code(); + return error; } log_error("Unable to switch context to user %s", user); diff --git a/rapid/plugin/x/tests/mtr/include/connection_default_schema.inc b/rapid/plugin/x/tests/mtr/include/connection_default_schema.inc new file mode 100644 index 000000000000..bafaffedc008 --- /dev/null +++ b/rapid/plugin/x/tests/mtr/include/connection_default_schema.inc @@ -0,0 +1,19 @@ + +echo # Checking if requested schema was selected.; + +if ($expect_error != '') +{ + --replace_result $expect_error EXPECTED_ERROR_CODE + --error 1 +} +exec $execute_command + --user=$user + --host=127.0.0.1 + -e "SELECT IF(DATABASE()='$schema','Success','Failure');" + $schema 2>&1; + +--let $expect_error= +--let $user= +--let $schema= +--let $execute_command= +--let $expect_error= diff --git a/rapid/plugin/x/tests/mtr/r/connection_default_schema.result b/rapid/plugin/x/tests/mtr/r/connection_default_schema.result new file mode 100644 index 000000000000..e0d891f9c92f --- /dev/null +++ b/rapid/plugin/x/tests/mtr/r/connection_default_schema.result @@ -0,0 +1,88 @@ +# +## Preamble +# +install plugin mysqlx soname "mysqlx.so"; +call mtr.add_suppression("Plugin mysqlx reported: .Failed at SSL configuration: .SSL context is not usable without certificate and private key.."); +call mtr.add_suppression("Plugin mysqlx reported: .SSL_CTX_load_verify_locations failed."); +# +## Testcase prepare +# +call mtr.add_suppression("Plugin mysqlx reported: '.*: Unsuccessful login attempt"); +CREATE DATABASE xdb; +CREATE DATABASE ydb; +CREATE USER 'user_with_access_to_xdb'@'%'; +CREATE USER 'user_with_access_to_ydb'@'%'; +GRANT SELECT ON xdb.* TO 'user_with_access_to_xdb'@'%'; +GRANT SELECT ON ydb.* TO 'user_with_access_to_ydb'@'%'; +# +## Testcase execute +# +# +## Test group 1. +## +## Authenticate using an account which has permissions +## to selected schema. +# + +# Using MySQL client +# Checking if requested schema was selected. +IF(DATABASE()='xdb','Success','Failure') +Success + +# Using mysqlxtest +# Checking if requested schema was selected. +RUN SELECT IF(DATABASE()='xdb','Success','Failure') +IF(DATABASE()='xdb','Success','Failure') +Success +0 rows affected +Mysqlx.Ok { + msg: "bye!" +} +ok +# +## Test group 2. +## +## Authenticate using an account which has not permissions +## to selected schema. +# + +# Using MySQL client +# Checking if requested schema was selected. +EXPECTED_ERROR_CODE(42000): Access denied for user 'user_with_access_to_xdb'@'%' to database 'ydb' + +# Using mysqlxtest +# Checking if requested schema was selected. +in main, line 0:ERROR: Access denied for user 'user_with_access_to_xdb'@'%' to database 'ydb' (EXPECTED_ERROR_CODE) +not ok +# +## Test group 3. +## +## Authenticate using plain X Protocol flows to schame that: +## +## * account has permissions +## * account has not permissions +# +connecting... +active session is now 'non_roo_user' +Login OK +closing session non_roo_user +Mysqlx.Ok { + msg: "bye!" +} +switched to session default +connecting... +active session is now 'non_roo_user' +Got expected error: Access denied for user 'user_with_access_to_ydb'@'%' to database 'xdb' (code 1044) +aborting session non_roo_user +switched to session default +Mysqlx.Ok { + msg: "bye!" +} +# +## Cleanup +# +DROP USER 'user_with_access_to_xdb'@'%'; +DROP USER 'user_with_access_to_ydb'@'%'; +DROP DATABASE xdb; +DROP DATABASE ydb; +UNINSTALL PLUGIN mysqlx; diff --git a/rapid/plugin/x/tests/mtr/r/mysqlxtest_help.result b/rapid/plugin/x/tests/mtr/r/mysqlxtest_help.result index cfd022b42302..6e1f718eb215 100644 --- a/rapid/plugin/x/tests/mtr/r/mysqlxtest_help.result +++ b/rapid/plugin/x/tests/mtr/r/mysqlxtest_help.result @@ -2,11 +2,12 @@ ############################################################ ## Test mysqlxtest executable help printout ## -mysqlxtest +mysqlxtest [SCHEMA] Options: -f, --file= Reads input from file -I, --import= Reads macro files from dir; required by -->import --sql= Use SQL as input and execute it like in -->sql block +-e=, --execute= Aliases for "--sql" option -n, --no-auth Skip authentication which is required by -->sql block (run mode) --plain-auth Use PLAIN text authentication mechanism -u, --user= Connection user diff --git a/rapid/plugin/x/tests/mtr/t/connection_default_schema.test b/rapid/plugin/x/tests/mtr/t/connection_default_schema.test new file mode 100644 index 000000000000..6bcead71bc23 --- /dev/null +++ b/rapid/plugin/x/tests/mtr/t/connection_default_schema.test @@ -0,0 +1,110 @@ +--echo # +--echo ## Preamble +--echo # +--source ../include/xplugin_preamble.inc + +--echo # +--echo ## Testcase prepare +--echo # + +--write_file $MYSQL_TMP_DIR/connection_default_schema_manual.tmp + +-->newsession non_roo_user - +-->login user_with_access_to_ydb ydb +-->closesession + +-->newsession non_roo_user - +-->expecterror ER_DBACCESS_DENIED_ERROR +-->login user_with_access_to_ydb xdb +-->closesession abort + +EOF + +call mtr.add_suppression("Plugin mysqlx reported: '.*: Unsuccessful login attempt"); + +CREATE DATABASE xdb; +CREATE DATABASE ydb; + +CREATE USER 'user_with_access_to_xdb'@'%'; +CREATE USER 'user_with_access_to_ydb'@'%'; + +GRANT SELECT ON xdb.* TO 'user_with_access_to_xdb'@'%'; +GRANT SELECT ON ydb.* TO 'user_with_access_to_ydb'@'%'; + + +--echo # +--echo ## Testcase execute +--echo # + +--echo # +--echo ## Test group 1. +--echo ## +--echo ## Authenticate using an account which has permissions +--echo ## to selected schema. +--echo # +--echo +--echo # Using MySQL client +let $execute_command=$MYSQL; +let $user=user_with_access_to_xdb; +let $schema=xdb; +--source ../include/connection_default_schema.inc + +--echo +--echo # Using mysqlxtest +let $execute_command=$MYSQLXTEST; +let $user=user_with_access_to_xdb; +let $schema=xdb; +--source ../include/connection_default_schema.inc + + +--echo # +--echo ## Test group 2. +--echo ## +--echo ## Authenticate using an account which has not permissions +--echo ## to selected schema. +--echo # + +--echo +--echo # Using MySQL client +let $execute_command=$MYSQL; +let $user=user_with_access_to_xdb; +let $schema=ydb; +let $expect_error=ERROR 1044 ; +--source ../include/connection_default_schema.inc + +--echo +--echo # Using mysqlxtest +let $execute_command=$MYSQLXTEST; +let $user=user_with_access_to_xdb; +let $schema=ydb; +let $expect_error=code 1044; +--source ../include/connection_default_schema.inc + + +--echo # +--echo ## Test group 3. +--echo ## +--echo ## Authenticate using plain X Protocol flows to schame that: +--echo ## +--echo ## * account has permissions +--echo ## * account has not permissions +--echo # + +exec $MYSQLXTEST + -uroot + -f $MYSQL_TMP_DIR/connection_default_schema_manual.tmp; + + +--echo # +--echo ## Cleanup +--echo # + +--remove_file $MYSQL_TMP_DIR/connection_default_schema_manual.tmp + +DROP USER 'user_with_access_to_xdb'@'%'; +DROP USER 'user_with_access_to_ydb'@'%'; + +DROP DATABASE xdb; +DROP DATABASE ydb; + +UNINSTALL PLUGIN mysqlx; From 693d018283998723ee4007ebf92a132b94d41514 Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Fri, 5 Jan 2018 10:58:31 -0700 Subject: [PATCH 0365/1221] MYR-207 : Provide a way to force build MyRocks without FastCRC32 if host doesn't support it - Added new cmake flag ALLOW_NO_SSE42 that can be specified via -DALLOW_NO_SSE42=1 which will allow MyRocks to compile if SSE 4.2 is not detected. - Changed warning to error if SSE 4.2 is not detected and no ALLOW_NO_SSE42 is specified. - Fixed logic for debug builds in HAVE_SSE42 CHECK_CXX_SOURCE_COMPILES where debug builds emit a warning as error "x is unused" --- storage/rocksdb/CMakeLists.txt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/storage/rocksdb/CMakeLists.txt b/storage/rocksdb/CMakeLists.txt index c281c57b4123..e5f7c413b6ef 100644 --- a/storage/rocksdb/CMakeLists.txt +++ b/storage/rocksdb/CMakeLists.txt @@ -66,13 +66,17 @@ CHECK_CXX_SOURCE_COMPILES(" #include #include int main() { - volatile uint32_t x = _mm_crc32_u32(0, 0); + volatile uint32_t x __attribute__((unused)) = _mm_crc32_u32(0, 0); } " HAVE_SSE42) IF (HAVE_SSE42) ADD_DEFINITIONS(-DHAVE_SSE42) ELSE () - MESSAGE(${MYROCKS_STATUS_MODE} "No SSE42 support found. Not building MyRocks") + IF (ALLOW_NO_SSE42) + MESSAGE(WARNING "No SSE42 support found and ALLOW_NO_SSE42 specified, building MyRocks but without SSE42/FastCRC32 support") + ELSE () + MESSAGE(FATAL_ERROR "No SSE42 support found. Not building MyRocks") + ENDIF () ENDIF () IF(UNIX) From e12f7e4802afbd3aa8703c1f04069dabfdde00cb Mon Sep 17 00:00:00 2001 From: Evgeniy Patlan Date: Tue, 9 Jan 2018 09:52:17 +0200 Subject: [PATCH 0366/1221] [PS-285] mysqld.log is not being created --- build-ps/percona-server.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build-ps/percona-server.spec b/build-ps/percona-server.spec index d8a13a643284..5efb5109f159 100644 --- a/build-ps/percona-server.spec +++ b/build-ps/percona-server.spec @@ -525,7 +525,7 @@ rm -rf %{buildroot}%{_bindir}/mysql_embedded datadir=$(/usr/bin/my_print_defaults server mysqld | grep '^--datadir=' | sed -n 's/--datadir=//p' | tail -n 1) /bin/chmod 0751 "$datadir" >/dev/null 2>&1 || : if [ ! -e /var/log/mysqld.log ]; then - /bin/install -m0640 -omysql -gmysql /dev/null /var/log/mysqld.log + /usr/bin/install -m0640 -omysql -gmysql /dev/null /var/log/mysqld.log fi #/bin/touch /var/log/mysqld.log >/dev/null 2>&1 || : %if 0%{?systemd} From c9850a5328f6eba3706e9be65781961343e406b6 Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Wed, 10 Jan 2018 17:21:01 +0530 Subject: [PATCH 0367/1221] From 5e22e73162caebc73fb2bc13d52e4d3f2373405c Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Fri, 5 Jan 2018 12:05:12 -0700 Subject: [PATCH 0368/1221] MYR-223 : MyRocks alter table with string indexed column to non-binary collation works - Imported patch from MariaDB MDEV-14293 and touched up to use MySQL/Percona push_warning_printf. Patch changes error of using inefficient collation to a warning. - Re-worked impacted tests to remove expected error and re-recorded to capture new SQL warnings. --- mysql-test/suite/rocksdb/r/collation.result | 88 +++++++++++-------- .../r/collation_exceptions_lctn_0.result | 28 ++++-- .../r/collation_exceptions_lctn_1.result | 16 +++- mysql-test/suite/rocksdb/t/collation.test | 68 +++++++------- .../t/collation_exceptions_lctn_0.test | 14 +-- .../t/collation_exceptions_lctn_1.test | 8 +- storage/rocksdb/ha_rocksdb.cc | 24 +++-- storage/rocksdb/rdb_datadic.cc | 2 +- storage/rocksdb/rdb_datadic.h | 2 + 9 files changed, 143 insertions(+), 107 deletions(-) diff --git a/mysql-test/suite/rocksdb/r/collation.result b/mysql-test/suite/rocksdb/r/collation.result index 0443cd6bf92c..54e04f388b6e 100644 --- a/mysql-test/suite/rocksdb/r/collation.result +++ b/mysql-test/suite/rocksdb/r/collation.result @@ -1,63 +1,81 @@ -CREATE TABLE t1 (id INT primary key, value varchar(50), value2 varbinary(50), value3 text) engine=rocksdb charset utf8; +CREATE TABLE t1 (id INT PRIMARY KEY, value VARCHAR(50), value2 VARBINARY(50), value3 TEXT) ENGINE=ROCKSDB CHARSET UTF8; +DROP TABLE t1; +CREATE TABLE t1 (id INT PRIMARY KEY, value VARCHAR(50), value2 VARBINARY(50), value3 TEXT, INDEX(value)) ENGINE=ROCKSDB CHARSET UTF8; +Warnings: +Warning 122 Indexed column test.t1.value uses a collation that does not allow index-only access in secondary key and has reduced disk space efficiency in primary key. +DROP TABLE t1; +CREATE TABLE t1 (id INT PRIMARY KEY, value VARCHAR(50), value2 VARBINARY(50), value3 TEXT, INDEX(value3(50))) ENGINE=ROCKSDB CHARSET UTF8; +Warnings: +Warning 122 Indexed column test.t1.value3 uses a collation that does not allow index-only access in secondary key and has reduced disk space efficiency in primary key. DROP TABLE t1; -CREATE TABLE t1 (id INT primary key, value varchar(50), value2 varbinary(50), value3 text, index(value)) engine=rocksdb charset utf8; -ERROR HY000: Unsupported collation on string indexed column test.t1.value Use binary collation (binary, latin1_bin, utf8_bin). -CREATE TABLE t1 (id INT primary key, value varchar(50), value2 varbinary(50), value3 text, index(value3(50))) engine=rocksdb charset utf8; -ERROR HY000: Unsupported collation on string indexed column test.t1.value3 Use binary collation (binary, latin1_bin, utf8_bin). SET GLOBAL rocksdb_strict_collation_check=0; -CREATE TABLE t1 (id INT primary key, value varchar(50), value2 varbinary(50), value3 text, index(value3(50))) engine=rocksdb charset utf8; +CREATE TABLE t1 (id INT PRIMARY KEY, value VARCHAR(50), value2 VARBINARY(50), value3 TEXT, INDEX(value3(50))) ENGINE=ROCKSDB CHARSET UTF8; DROP TABLE t1; SET GLOBAL rocksdb_strict_collation_check=1; -CREATE TABLE t1 (id INT primary key, value varchar(50), value2 varbinary(50), value3 text, index(value2)) engine=rocksdb charset utf8; +CREATE TABLE t1 (id INT PRIMARY KEY, value VARCHAR(50), value2 VARBINARY(50), value3 TEXT, INDEX(value2)) ENGINE=ROCKSDB CHARSET UTF8; DROP TABLE t1; -CREATE TABLE t1 (id varchar(20), value varchar(50), value2 varchar(50), value3 text, primary key (id), index(value, value2)) engine=rocksdb charset latin1 collate latin1_bin; +CREATE TABLE t1 (id VARCHAR(20), value VARCHAR(50), value2 VARCHAR(50), value3 TEXT, PRIMARY KEY (id), INDEX(value, value2)) ENGINE=ROCKSDB CHARSET LATIN1 COLLATE LATIN1_BIN; DROP TABLE t1; -CREATE TABLE t1 (id varchar(20), value varchar(50), value2 varchar(50), value3 text, primary key (id), index(value, value2)) engine=rocksdb charset utf8 collate utf8_bin; +CREATE TABLE t1 (id VARCHAR(20), value VARCHAR(50), value2 VARCHAR(50), value3 TEXT, PRIMARY KEY (id), INDEX(value, value2)) ENGINE=ROCKSDB CHARSET UTF8 COLLATE UTF8_BIN; DROP TABLE t1; -CREATE TABLE t1 (id varchar(20) collate latin1_bin, value varchar(50) collate utf8_bin, value2 varchar(50) collate latin1_bin, value3 text, primary key (id), index(value, value2)) engine=rocksdb; +CREATE TABLE t1 (id VARCHAR(20) COLLATE LATIN1_BIN, value VARCHAR(50) COLLATE UTF8_BIN, value2 VARCHAR(50) COLLATE LATIN1_BIN, value3 TEXT, PRIMARY KEY (id), INDEX(value, value2)) ENGINE=ROCKSDB CHARSET UTF8; DROP TABLE t1; SET GLOBAL rocksdb_strict_collation_exceptions=t1; -CREATE TABLE t1 (id INT primary key, value varchar(50), index(value)) engine=rocksdb charset utf8; +CREATE TABLE t1 (id INT PRIMARY KEY, value VARCHAR(50), INDEX(value)) ENGINE=ROCKSDB CHARSET UTF8; DROP TABLE t1; -CREATE TABLE t2 (id INT primary key, value varchar(50), index(value)) engine=rocksdb charset utf8; -ERROR HY000: Unsupported collation on string indexed column test.t2.value Use binary collation (binary, latin1_bin, utf8_bin). +CREATE TABLE t2 (id INT PRIMARY KEY, value VARCHAR(50), INDEX(value)) ENGINE=ROCKSDB CHARSET UTF8; +Warnings: +Warning 122 Indexed column test.t2.value uses a collation that does not allow index-only access in secondary key and has reduced disk space efficiency in primary key. +DROP TABLE t2; SET GLOBAL rocksdb_strict_collation_exceptions="t.*"; -CREATE TABLE t123 (id INT primary key, value varchar(50), index(value)) engine=rocksdb charset utf8; +CREATE TABLE t123 (id INT PRIMARY KEY, value VARCHAR(50), INDEX(value)) ENGINE=ROCKSDB CHARSET UTF8; DROP TABLE t123; -CREATE TABLE s123 (id INT primary key, value varchar(50), index(value)) engine=rocksdb charset utf8; -ERROR HY000: Unsupported collation on string indexed column test.s123.value Use binary collation (binary, latin1_bin, utf8_bin). +CREATE TABLE s123 (id INT PRIMARY KEY, value VARCHAR(50), INDEX(value)) ENGINE=ROCKSDB CHARSET UTF8; +Warnings: +Warning 122 Indexed column test.s123.value uses a collation that does not allow index-only access in secondary key and has reduced disk space efficiency in primary key. +DROP TABLE s123; SET GLOBAL rocksdb_strict_collation_exceptions=".t.*"; -CREATE TABLE xt123 (id INT primary key, value varchar(50), index(value)) engine=rocksdb charset utf8; +CREATE TABLE xt123 (id INT PRIMARY KEY, value VARCHAR(50), INDEX(value)) ENGINE=ROCKSDB CHARSET UTF8; DROP TABLE xt123; -CREATE TABLE t123 (id INT primary key, value varchar(50), index(value)) engine=rocksdb charset utf8; -ERROR HY000: Unsupported collation on string indexed column test.t123.value Use binary collation (binary, latin1_bin, utf8_bin). +CREATE TABLE t123 (id INT PRIMARY KEY, value VARCHAR(50), INDEX(value)) ENGINE=ROCKSDB CHARSET UTF8; +Warnings: +Warning 122 Indexed column test.t123.value uses a collation that does not allow index-only access in secondary key and has reduced disk space efficiency in primary key. +DROP TABLE t123; SET GLOBAL rocksdb_strict_collation_exceptions="s.*|t.*"; -CREATE TABLE s1 (id INT primary key, value varchar(50), index(value)) engine=rocksdb charset utf8; +CREATE TABLE s1 (id INT PRIMARY KEY, value VARCHAR(50), INDEX(value)) ENGINE=ROCKSDB CHARSET UTF8; DROP TABLE s1; -CREATE TABLE t1 (id INT primary key, value varchar(50), index(value)) engine=rocksdb charset utf8; +CREATE TABLE t1 (id INT PRIMARY KEY, value VARCHAR(50), INDEX(value)) ENGINE=ROCKSDB CHARSET UTF8; DROP TABLE t1; -CREATE TABLE u1 (id INT primary key, value varchar(50), index(value)) engine=rocksdb charset utf8; -ERROR HY000: Unsupported collation on string indexed column test.u1.value Use binary collation (binary, latin1_bin, utf8_bin). +CREATE TABLE u1 (id INT PRIMARY KEY, value VARCHAR(50), INDEX(value)) ENGINE=ROCKSDB CHARSET UTF8; +Warnings: +Warning 122 Indexed column test.u1.value uses a collation that does not allow index-only access in secondary key and has reduced disk space efficiency in primary key. +DROP TABLE u1; SET GLOBAL rocksdb_strict_collation_exceptions='t1'; -CREATE TABLE t1 (id INT primary key, value varchar(50), index(value)) engine=rocksdb; +CREATE TABLE t1 (id INT PRIMARY KEY, value VARCHAR(50), INDEX(value)) ENGINE=ROCKSDB CHARSET UTF8; ALTER TABLE t1 AUTO_INCREMENT=1; DROP TABLE t1; -CREATE TABLE t2 (id INT primary key, value varchar(50), index(value)) engine=rocksdb; -ERROR HY000: Unsupported collation on string indexed column test.t2.value Use binary collation (binary, latin1_bin, utf8_bin). -CREATE TABLE t2 (id INT primary key, value varchar(50)) engine=rocksdb; +CREATE TABLE t2 (id INT PRIMARY KEY, value VARCHAR(50), INDEX(value)) ENGINE=ROCKSDB CHARSET UTF8; +Warnings: +Warning 122 Indexed column test.t2.value uses a collation that does not allow index-only access in secondary key and has reduced disk space efficiency in primary key. +DROP TABLE t2; +CREATE TABLE t2 (id INT PRIMARY KEY, value VARCHAR(50)) ENGINE=ROCKSDB CHARSET UTF8; ALTER TABLE t2 ADD INDEX(value); -ERROR HY000: Unsupported collation on string indexed column test.t2.value Use binary collation (binary, latin1_bin, utf8_bin). +Warnings: +Warning 122 Indexed column test.t2.value uses a collation that does not allow index-only access in secondary key and has reduced disk space efficiency in primary key. DROP TABLE t2; # restart:--log-error=LOG_FILE SET GLOBAL rocksdb_strict_collation_exceptions="[a-b"; -CREATE TABLE a (id INT PRIMARY KEY, value varchar(50), index(value)) engine=rocksdb charset utf8; -ERROR HY000: Unsupported collation on string indexed column test.a.value Use binary collation (binary, latin1_bin, utf8_bin). +CREATE TABLE a (id INT PRIMARY KEY, value VARCHAR(50), INDEX(value)) ENGINE=ROCKSDB CHARSET UTF8; +Warnings: +Warning 122 Indexed column test.a.value uses a collation that does not allow index-only access in secondary key and has reduced disk space efficiency in primary key. +DROP TABLE a; SET GLOBAL rocksdb_strict_collation_exceptions="[a-b]"; -CREATE TABLE a (id INT PRIMARY KEY, value varchar(50), index(value)) engine=rocksdb charset utf8; -CREATE TABLE b (id INT PRIMARY KEY, value varchar(50), index(value)) engine=rocksdb charset utf8; -CREATE TABLE c (id INT PRIMARY KEY, value varchar(50), index(value)) engine=rocksdb charset utf8; -ERROR HY000: Unsupported collation on string indexed column test.c.value Use binary collation (binary, latin1_bin, utf8_bin). -DROP TABLE a, b; +CREATE TABLE a (id INT PRIMARY KEY, value VARCHAR(50), INDEX(value)) ENGINE=ROCKSDB CHARSET UTF8; +CREATE TABLE b (id INT PRIMARY KEY, value VARCHAR(50), INDEX(value)) ENGINE=ROCKSDB CHARSET UTF8; +CREATE TABLE c (id INT PRIMARY KEY, value VARCHAR(50), INDEX(value)) ENGINE=ROCKSDB CHARSET UTF8; +Warnings: +Warning 122 Indexed column test.c.value uses a collation that does not allow index-only access in secondary key and has reduced disk space efficiency in primary key. +DROP TABLE a, b, c; SET GLOBAL rocksdb_strict_collation_exceptions="abc\\"; SET GLOBAL rocksdb_strict_collation_exceptions=null; # restart diff --git a/mysql-test/suite/rocksdb/r/collation_exceptions_lctn_0.result b/mysql-test/suite/rocksdb/r/collation_exceptions_lctn_0.result index 1ee471b8f584..d49e823ddefe 100644 --- a/mysql-test/suite/rocksdb/r/collation_exceptions_lctn_0.result +++ b/mysql-test/suite/rocksdb/r/collation_exceptions_lctn_0.result @@ -1,25 +1,39 @@ SET @old_rocksdb_strict_collation_exceptions = @@global.rocksdb_strict_collation_exceptions; CREATE TABLE abc (id INT PRIMARY KEY, value varchar(50), index(value)) engine=rocksdb charset utf8; -ERROR HY000: Unsupported collation on string indexed column test.abc.value Use binary collation (binary, latin1_bin, utf8_bin). +Warnings: +Warning 122 Indexed column test.abc.value uses a collation that does not allow index-only access in secondary key and has reduced disk space efficiency in primary key. +DROP TABLE abc; CREATE TABLE ABC (id INT PRIMARY KEY, value varchar(50), index(value)) engine=rocksdb charset utf8; -ERROR HY000: Unsupported collation on string indexed column test.ABC.value Use binary collation (binary, latin1_bin, utf8_bin). +Warnings: +Warning 122 Indexed column test.ABC.value uses a collation that does not allow index-only access in secondary key and has reduced disk space efficiency in primary key. +DROP TABLE ABC; SET GLOBAL rocksdb_strict_collation_exceptions="abc"; CREATE TABLE abc (id INT PRIMARY KEY, value varchar(50), index(value)) engine=rocksdb charset utf8; DROP TABLE abc; CREATE TABLE ABC (id INT PRIMARY KEY, value varchar(50), index(value)) engine=rocksdb charset utf8; -ERROR HY000: Unsupported collation on string indexed column test.ABC.value Use binary collation (binary, latin1_bin, utf8_bin). +Warnings: +Warning 122 Indexed column test.ABC.value uses a collation that does not allow index-only access in secondary key and has reduced disk space efficiency in primary key. +DROP TABLE ABC; SET GLOBAL rocksdb_strict_collation_exceptions="ABC"; CREATE TABLE abc (id INT PRIMARY KEY, value varchar(50), index(value)) engine=rocksdb charset utf8; -ERROR HY000: Unsupported collation on string indexed column test.abc.value Use binary collation (binary, latin1_bin, utf8_bin). +Warnings: +Warning 122 Indexed column test.abc.value uses a collation that does not allow index-only access in secondary key and has reduced disk space efficiency in primary key. +DROP TABLE abc; CREATE TABLE ABC (id INT PRIMARY KEY, value varchar(50), index(value)) engine=rocksdb charset utf8; DROP TABLE ABC; CREATE TABLE bcd (id INT PRIMARY KEY, value varchar(50), index(value)) engine=rocksdb charset utf8; -ERROR HY000: Unsupported collation on string indexed column test.bcd.value Use binary collation (binary, latin1_bin, utf8_bin). +Warnings: +Warning 122 Indexed column test.bcd.value uses a collation that does not allow index-only access in secondary key and has reduced disk space efficiency in primary key. +DROP TABLE bcd; SET GLOBAL rocksdb_strict_collation_exceptions="^ABC"; CREATE TABLE abcd (id INT PRIMARY KEY, value varchar(50), index(value)) engine=rocksdb charset utf8; -ERROR HY000: Unsupported collation on string indexed column test.abcd.value Use binary collation (binary, latin1_bin, utf8_bin). +Warnings: +Warning 122 Indexed column test.abcd.value uses a collation that does not allow index-only access in secondary key and has reduced disk space efficiency in primary key. +DROP TABLE abcd; CREATE TABLE ABCD (id INT PRIMARY KEY, value varchar(50), index(value)) engine=rocksdb charset utf8; DROP TABLE ABCD; CREATE TABLE ZABC (id INT PRIMARY KEY, value varchar(50), index(value)) engine=rocksdb charset utf8; -ERROR HY000: Unsupported collation on string indexed column test.ZABC.value Use binary collation (binary, latin1_bin, utf8_bin). +Warnings: +Warning 122 Indexed column test.ZABC.value uses a collation that does not allow index-only access in secondary key and has reduced disk space efficiency in primary key. +DROP TABLE ZABC; SET GLOBAL rocksdb_strict_collation_exceptions=@old_rocksdb_strict_collation_exceptions; diff --git a/mysql-test/suite/rocksdb/r/collation_exceptions_lctn_1.result b/mysql-test/suite/rocksdb/r/collation_exceptions_lctn_1.result index 39100a038414..4881eb31ad8b 100644 --- a/mysql-test/suite/rocksdb/r/collation_exceptions_lctn_1.result +++ b/mysql-test/suite/rocksdb/r/collation_exceptions_lctn_1.result @@ -1,15 +1,21 @@ SET @old_rocksdb_strict_collation_exceptions = @@global.rocksdb_strict_collation_exceptions; CREATE TABLE abc (id INT PRIMARY KEY, value varchar(50), index(value)) engine=rocksdb charset utf8; -ERROR HY000: Unsupported collation on string indexed column test.abc.value Use binary collation (binary, latin1_bin, utf8_bin). +Warnings: +Warning 122 Indexed column test.abc.value uses a collation that does not allow index-only access in secondary key and has reduced disk space efficiency in primary key. +DROP TABLE abc; CREATE TABLE ABC (id INT PRIMARY KEY, value varchar(50), index(value)) engine=rocksdb charset utf8; -ERROR HY000: Unsupported collation on string indexed column test.abc.value Use binary collation (binary, latin1_bin, utf8_bin). +Warnings: +Warning 122 Indexed column test.abc.value uses a collation that does not allow index-only access in secondary key and has reduced disk space efficiency in primary key. +DROP TABLE ABC; SET GLOBAL rocksdb_strict_collation_exceptions="abc"; CREATE TABLE abc (id INT PRIMARY KEY, value varchar(50), index(value)) engine=rocksdb charset utf8; DROP TABLE abc; CREATE TABLE ABC (id INT PRIMARY KEY, value varchar(50), index(value)) engine=rocksdb charset utf8; DROP TABLE ABC; CREATE TABLE bcd (id INT PRIMARY KEY, value varchar(50), index(value)) engine=rocksdb charset utf8; -ERROR HY000: Unsupported collation on string indexed column test.bcd.value Use binary collation (binary, latin1_bin, utf8_bin). +Warnings: +Warning 122 Indexed column test.bcd.value uses a collation that does not allow index-only access in secondary key and has reduced disk space efficiency in primary key. +DROP TABLE bcd; SET GLOBAL rocksdb_strict_collation_exceptions="ABC"; CREATE TABLE abc (id INT PRIMARY KEY, value varchar(50), index(value)) engine=rocksdb charset utf8; DROP TABLE abc; @@ -21,5 +27,7 @@ DROP TABLE abcd; CREATE TABLE ABCD (id INT PRIMARY KEY, value varchar(50), index(value)) engine=rocksdb charset utf8; DROP TABLE ABCD; CREATE TABLE ZABC (id INT PRIMARY KEY, value varchar(50), index(value)) engine=rocksdb charset utf8; -ERROR HY000: Unsupported collation on string indexed column test.zabc.value Use binary collation (binary, latin1_bin, utf8_bin). +Warnings: +Warning 122 Indexed column test.zabc.value uses a collation that does not allow index-only access in secondary key and has reduced disk space efficiency in primary key. +DROP TABLE ZABC; SET GLOBAL rocksdb_strict_collation_exceptions=@old_rocksdb_strict_collation_exceptions; diff --git a/mysql-test/suite/rocksdb/t/collation.test b/mysql-test/suite/rocksdb/t/collation.test index c085897eacf8..e9c39b8868c3 100644 --- a/mysql-test/suite/rocksdb/t/collation.test +++ b/mysql-test/suite/rocksdb/t/collation.test @@ -4,74 +4,73 @@ --source include/have_rocksdb.inc # ci non-indexed column is allowed -CREATE TABLE t1 (id INT primary key, value varchar(50), value2 varbinary(50), value3 text) engine=rocksdb charset utf8; +CREATE TABLE t1 (id INT PRIMARY KEY, value VARCHAR(50), value2 VARBINARY(50), value3 TEXT) ENGINE=ROCKSDB CHARSET UTF8; DROP TABLE t1; # ci indexed column is not allowed ---error ER_UNSUPPORTED_COLLATION -CREATE TABLE t1 (id INT primary key, value varchar(50), value2 varbinary(50), value3 text, index(value)) engine=rocksdb charset utf8; ---error ER_UNSUPPORTED_COLLATION -CREATE TABLE t1 (id INT primary key, value varchar(50), value2 varbinary(50), value3 text, index(value3(50))) engine=rocksdb charset utf8; +CREATE TABLE t1 (id INT PRIMARY KEY, value VARCHAR(50), value2 VARBINARY(50), value3 TEXT, INDEX(value)) ENGINE=ROCKSDB CHARSET UTF8; +DROP TABLE t1; +CREATE TABLE t1 (id INT PRIMARY KEY, value VARCHAR(50), value2 VARBINARY(50), value3 TEXT, INDEX(value3(50))) ENGINE=ROCKSDB CHARSET UTF8; +DROP TABLE t1; # ci indexed column with rocksdb_strict_collation_check=OFF is allowed. SET GLOBAL rocksdb_strict_collation_check=0; -CREATE TABLE t1 (id INT primary key, value varchar(50), value2 varbinary(50), value3 text, index(value3(50))) engine=rocksdb charset utf8; +CREATE TABLE t1 (id INT PRIMARY KEY, value VARCHAR(50), value2 VARBINARY(50), value3 TEXT, INDEX(value3(50))) ENGINE=ROCKSDB CHARSET UTF8; DROP TABLE t1; SET GLOBAL rocksdb_strict_collation_check=1; # cs indexed column is allowed -CREATE TABLE t1 (id INT primary key, value varchar(50), value2 varbinary(50), value3 text, index(value2)) engine=rocksdb charset utf8; +CREATE TABLE t1 (id INT PRIMARY KEY, value VARCHAR(50), value2 VARBINARY(50), value3 TEXT, INDEX(value2)) ENGINE=ROCKSDB CHARSET UTF8; DROP TABLE t1; # cs latin1_bin is allowed -CREATE TABLE t1 (id varchar(20), value varchar(50), value2 varchar(50), value3 text, primary key (id), index(value, value2)) engine=rocksdb charset latin1 collate latin1_bin; +CREATE TABLE t1 (id VARCHAR(20), value VARCHAR(50), value2 VARCHAR(50), value3 TEXT, PRIMARY KEY (id), INDEX(value, value2)) ENGINE=ROCKSDB CHARSET LATIN1 COLLATE LATIN1_BIN; DROP TABLE t1; # cs utf8_bin is allowed -CREATE TABLE t1 (id varchar(20), value varchar(50), value2 varchar(50), value3 text, primary key (id), index(value, value2)) engine=rocksdb charset utf8 collate utf8_bin; +CREATE TABLE t1 (id VARCHAR(20), value VARCHAR(50), value2 VARCHAR(50), value3 TEXT, PRIMARY KEY (id), INDEX(value, value2)) ENGINE=ROCKSDB CHARSET UTF8 COLLATE UTF8_BIN; DROP TABLE t1; # cs mixed latin1_bin and utf8_bin is allowed -CREATE TABLE t1 (id varchar(20) collate latin1_bin, value varchar(50) collate utf8_bin, value2 varchar(50) collate latin1_bin, value3 text, primary key (id), index(value, value2)) engine=rocksdb; +CREATE TABLE t1 (id VARCHAR(20) COLLATE LATIN1_BIN, value VARCHAR(50) COLLATE UTF8_BIN, value2 VARCHAR(50) COLLATE LATIN1_BIN, value3 TEXT, PRIMARY KEY (id), INDEX(value, value2)) ENGINE=ROCKSDB CHARSET UTF8; DROP TABLE t1; # ci indexed column is not allowed unless table name is in exception list SET GLOBAL rocksdb_strict_collation_exceptions=t1; -CREATE TABLE t1 (id INT primary key, value varchar(50), index(value)) engine=rocksdb charset utf8; +CREATE TABLE t1 (id INT PRIMARY KEY, value VARCHAR(50), INDEX(value)) ENGINE=ROCKSDB CHARSET UTF8; DROP TABLE t1; ---error ER_UNSUPPORTED_COLLATION -CREATE TABLE t2 (id INT primary key, value varchar(50), index(value)) engine=rocksdb charset utf8; +CREATE TABLE t2 (id INT PRIMARY KEY, value VARCHAR(50), INDEX(value)) ENGINE=ROCKSDB CHARSET UTF8; +DROP TABLE t2; # test regex for exception list SET GLOBAL rocksdb_strict_collation_exceptions="t.*"; -CREATE TABLE t123 (id INT primary key, value varchar(50), index(value)) engine=rocksdb charset utf8; +CREATE TABLE t123 (id INT PRIMARY KEY, value VARCHAR(50), INDEX(value)) ENGINE=ROCKSDB CHARSET UTF8; DROP TABLE t123; ---error ER_UNSUPPORTED_COLLATION -CREATE TABLE s123 (id INT primary key, value varchar(50), index(value)) engine=rocksdb charset utf8; +CREATE TABLE s123 (id INT PRIMARY KEY, value VARCHAR(50), INDEX(value)) ENGINE=ROCKSDB CHARSET UTF8; +DROP TABLE s123; SET GLOBAL rocksdb_strict_collation_exceptions=".t.*"; -CREATE TABLE xt123 (id INT primary key, value varchar(50), index(value)) engine=rocksdb charset utf8; +CREATE TABLE xt123 (id INT PRIMARY KEY, value VARCHAR(50), INDEX(value)) ENGINE=ROCKSDB CHARSET UTF8; DROP TABLE xt123; ---error ER_UNSUPPORTED_COLLATION -CREATE TABLE t123 (id INT primary key, value varchar(50), index(value)) engine=rocksdb charset utf8; +CREATE TABLE t123 (id INT PRIMARY KEY, value VARCHAR(50), INDEX(value)) ENGINE=ROCKSDB CHARSET UTF8; +DROP TABLE t123; # test multiple entries in the list with vertical bar SET GLOBAL rocksdb_strict_collation_exceptions="s.*|t.*"; -CREATE TABLE s1 (id INT primary key, value varchar(50), index(value)) engine=rocksdb charset utf8; +CREATE TABLE s1 (id INT PRIMARY KEY, value VARCHAR(50), INDEX(value)) ENGINE=ROCKSDB CHARSET UTF8; DROP TABLE s1; -CREATE TABLE t1 (id INT primary key, value varchar(50), index(value)) engine=rocksdb charset utf8; +CREATE TABLE t1 (id INT PRIMARY KEY, value VARCHAR(50), INDEX(value)) ENGINE=ROCKSDB CHARSET UTF8; DROP TABLE t1; ---error ER_UNSUPPORTED_COLLATION -CREATE TABLE u1 (id INT primary key, value varchar(50), index(value)) engine=rocksdb charset utf8; +CREATE TABLE u1 (id INT PRIMARY KEY, value VARCHAR(50), INDEX(value)) ENGINE=ROCKSDB CHARSET UTF8; +DROP TABLE u1; # test allowing alters to create temporary tables SET GLOBAL rocksdb_strict_collation_exceptions='t1'; -CREATE TABLE t1 (id INT primary key, value varchar(50), index(value)) engine=rocksdb; +CREATE TABLE t1 (id INT PRIMARY KEY, value VARCHAR(50), INDEX(value)) ENGINE=ROCKSDB CHARSET UTF8; ALTER TABLE t1 AUTO_INCREMENT=1; DROP TABLE t1; ---error ER_UNSUPPORTED_COLLATION -CREATE TABLE t2 (id INT primary key, value varchar(50), index(value)) engine=rocksdb; -CREATE TABLE t2 (id INT primary key, value varchar(50)) engine=rocksdb; ---error ER_UNSUPPORTED_COLLATION +CREATE TABLE t2 (id INT PRIMARY KEY, value VARCHAR(50), INDEX(value)) ENGINE=ROCKSDB CHARSET UTF8; +DROP TABLE t2; +CREATE TABLE t2 (id INT PRIMARY KEY, value VARCHAR(50)) ENGINE=ROCKSDB CHARSET UTF8; ALTER TABLE t2 ADD INDEX(value); DROP TABLE t2; @@ -85,14 +84,13 @@ SET GLOBAL rocksdb_strict_collation_exceptions="[a-b"; --let SEARCH_PATTERN=RocksDB: Invalid pattern in strict_collation_exceptions: \[a-b --source include/search_pattern_in_file.inc ---error ER_UNSUPPORTED_COLLATION -CREATE TABLE a (id INT PRIMARY KEY, value varchar(50), index(value)) engine=rocksdb charset utf8; +CREATE TABLE a (id INT PRIMARY KEY, value VARCHAR(50), INDEX(value)) ENGINE=ROCKSDB CHARSET UTF8; +DROP TABLE a; SET GLOBAL rocksdb_strict_collation_exceptions="[a-b]"; -CREATE TABLE a (id INT PRIMARY KEY, value varchar(50), index(value)) engine=rocksdb charset utf8; -CREATE TABLE b (id INT PRIMARY KEY, value varchar(50), index(value)) engine=rocksdb charset utf8; ---error ER_UNSUPPORTED_COLLATION -CREATE TABLE c (id INT PRIMARY KEY, value varchar(50), index(value)) engine=rocksdb charset utf8; -DROP TABLE a, b; +CREATE TABLE a (id INT PRIMARY KEY, value VARCHAR(50), INDEX(value)) ENGINE=ROCKSDB CHARSET UTF8; +CREATE TABLE b (id INT PRIMARY KEY, value VARCHAR(50), INDEX(value)) ENGINE=ROCKSDB CHARSET UTF8; +CREATE TABLE c (id INT PRIMARY KEY, value VARCHAR(50), INDEX(value)) ENGINE=ROCKSDB CHARSET UTF8; +DROP TABLE a, b, c; # test invalid regex (trailing escape) SET GLOBAL rocksdb_strict_collation_exceptions="abc\\"; diff --git a/mysql-test/suite/rocksdb/t/collation_exceptions_lctn_0.test b/mysql-test/suite/rocksdb/t/collation_exceptions_lctn_0.test index 6400b328a03e..6270e5c50ba5 100644 --- a/mysql-test/suite/rocksdb/t/collation_exceptions_lctn_0.test +++ b/mysql-test/suite/rocksdb/t/collation_exceptions_lctn_0.test @@ -5,33 +5,33 @@ SET @old_rocksdb_strict_collation_exceptions = @@global.rocksdb_strict_collation_exceptions; ---error ER_UNSUPPORTED_COLLATION CREATE TABLE abc (id INT PRIMARY KEY, value varchar(50), index(value)) engine=rocksdb charset utf8; ---error ER_UNSUPPORTED_COLLATION +DROP TABLE abc; CREATE TABLE ABC (id INT PRIMARY KEY, value varchar(50), index(value)) engine=rocksdb charset utf8; +DROP TABLE ABC; SET GLOBAL rocksdb_strict_collation_exceptions="abc"; CREATE TABLE abc (id INT PRIMARY KEY, value varchar(50), index(value)) engine=rocksdb charset utf8; DROP TABLE abc; ---error ER_UNSUPPORTED_COLLATION CREATE TABLE ABC (id INT PRIMARY KEY, value varchar(50), index(value)) engine=rocksdb charset utf8; +DROP TABLE ABC; SET GLOBAL rocksdb_strict_collation_exceptions="ABC"; ---error ER_UNSUPPORTED_COLLATION CREATE TABLE abc (id INT PRIMARY KEY, value varchar(50), index(value)) engine=rocksdb charset utf8; +DROP TABLE abc; CREATE TABLE ABC (id INT PRIMARY KEY, value varchar(50), index(value)) engine=rocksdb charset utf8; DROP TABLE ABC; ---error ER_UNSUPPORTED_COLLATION CREATE TABLE bcd (id INT PRIMARY KEY, value varchar(50), index(value)) engine=rocksdb charset utf8; +DROP TABLE bcd; SET GLOBAL rocksdb_strict_collation_exceptions="^ABC"; ---error ER_UNSUPPORTED_COLLATION CREATE TABLE abcd (id INT PRIMARY KEY, value varchar(50), index(value)) engine=rocksdb charset utf8; +DROP TABLE abcd; CREATE TABLE ABCD (id INT PRIMARY KEY, value varchar(50), index(value)) engine=rocksdb charset utf8; DROP TABLE ABCD; ---error ER_UNSUPPORTED_COLLATION CREATE TABLE ZABC (id INT PRIMARY KEY, value varchar(50), index(value)) engine=rocksdb charset utf8; +DROP TABLE ZABC; SET GLOBAL rocksdb_strict_collation_exceptions=@old_rocksdb_strict_collation_exceptions; diff --git a/mysql-test/suite/rocksdb/t/collation_exceptions_lctn_1.test b/mysql-test/suite/rocksdb/t/collation_exceptions_lctn_1.test index e09b5538514d..f0ad3ac71e95 100644 --- a/mysql-test/suite/rocksdb/t/collation_exceptions_lctn_1.test +++ b/mysql-test/suite/rocksdb/t/collation_exceptions_lctn_1.test @@ -4,18 +4,18 @@ SET @old_rocksdb_strict_collation_exceptions = @@global.rocksdb_strict_collation_exceptions; ---error ER_UNSUPPORTED_COLLATION CREATE TABLE abc (id INT PRIMARY KEY, value varchar(50), index(value)) engine=rocksdb charset utf8; ---error ER_UNSUPPORTED_COLLATION +DROP TABLE abc; CREATE TABLE ABC (id INT PRIMARY KEY, value varchar(50), index(value)) engine=rocksdb charset utf8; +DROP TABLE ABC; SET GLOBAL rocksdb_strict_collation_exceptions="abc"; CREATE TABLE abc (id INT PRIMARY KEY, value varchar(50), index(value)) engine=rocksdb charset utf8; DROP TABLE abc; CREATE TABLE ABC (id INT PRIMARY KEY, value varchar(50), index(value)) engine=rocksdb charset utf8; DROP TABLE ABC; ---error ER_UNSUPPORTED_COLLATION CREATE TABLE bcd (id INT PRIMARY KEY, value varchar(50), index(value)) engine=rocksdb charset utf8; +DROP TABLE bcd; SET GLOBAL rocksdb_strict_collation_exceptions="ABC"; CREATE TABLE abc (id INT PRIMARY KEY, value varchar(50), index(value)) engine=rocksdb charset utf8; @@ -29,7 +29,7 @@ DROP TABLE abcd; CREATE TABLE ABCD (id INT PRIMARY KEY, value varchar(50), index(value)) engine=rocksdb charset utf8; DROP TABLE ABCD; ---error ER_UNSUPPORTED_COLLATION CREATE TABLE ZABC (id INT PRIMARY KEY, value varchar(50), index(value)) engine=rocksdb charset utf8; +DROP TABLE ZABC; SET GLOBAL rocksdb_strict_collation_exceptions=@old_rocksdb_strict_collation_exceptions; diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index f484f4315df5..8aaeb97d819a 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -5524,8 +5524,9 @@ rdb_is_index_collation_supported(const my_core::Field *const field) { /* Handle [VAR](CHAR|BINARY) or TEXT|BLOB */ if (type == MYSQL_TYPE_VARCHAR || type == MYSQL_TYPE_STRING || type == MYSQL_TYPE_BLOB || type == MYSQL_TYPE_JSON) { - return RDB_INDEX_COLLATIONS.find(field->charset()) != - RDB_INDEX_COLLATIONS.end(); + return (RDB_INDEX_COLLATIONS.find(field->charset()) != + RDB_INDEX_COLLATIONS.end()) || + rdb_is_collation_supported(field->charset()); } return true; } @@ -5648,18 +5649,13 @@ int ha_rocksdb::create_cfs( if (!rdb_is_index_collation_supported( table_arg->key_info[i].key_part[part].field) && !rdb_collation_exceptions->match(tablename_sys)) { - std::string collation_err; - for (const auto &coll : RDB_INDEX_COLLATIONS) { - if (collation_err != "") { - collation_err += ", "; - } - collation_err += coll->name; - } - my_error(ER_UNSUPPORTED_COLLATION, MYF(0), - tbl_def_arg->full_tablename().c_str(), - table_arg->key_info[i].key_part[part].field->field_name, - collation_err.c_str()); - DBUG_RETURN(HA_EXIT_FAILURE); + push_warning_printf( + ha_thd(), Sql_condition::SL_WARNING, HA_ERR_INTERNAL_ERROR, + "Indexed column %s.%s uses a collation that does not allow " + "index-only access in secondary key and has reduced disk space " + "efficiency in primary key.", + tbl_def_arg->full_tablename().c_str(), + table_arg->key_info[i].key_part[part].field->field_name); } } } diff --git a/storage/rocksdb/rdb_datadic.cc b/storage/rocksdb/rdb_datadic.cc index d9a45a79d567..da80855763a0 100644 --- a/storage/rocksdb/rdb_datadic.cc +++ b/storage/rocksdb/rdb_datadic.cc @@ -2921,7 +2921,7 @@ std::array rdb_collation_data; mysql_mutex_t rdb_collation_data_mutex; -static bool rdb_is_collation_supported(const my_core::CHARSET_INFO *const cs) { +bool rdb_is_collation_supported(const my_core::CHARSET_INFO *const cs) { return (cs->coll == &my_collation_8bit_simple_ci_handler); } diff --git a/storage/rocksdb/rdb_datadic.h b/storage/rocksdb/rdb_datadic.h index 1fb11f47a0ef..007a1770bb3b 100644 --- a/storage/rocksdb/rdb_datadic.h +++ b/storage/rocksdb/rdb_datadic.h @@ -1310,4 +1310,6 @@ struct Rdb_index_info { uint64 m_ttl_duration = 0; }; +bool rdb_is_collation_supported(const my_core::CHARSET_INFO *const cs); + } // namespace myrocks From b3e69b46b7f3451c5429774eaaf8dfdb0675b865 Mon Sep 17 00:00:00 2001 From: Robert Golebiowski Date: Tue, 2 Jan 2018 15:35:44 +0100 Subject: [PATCH 0369/1221] Bug: PS-264 handle_fatal_signal (sig=11) in keyring::Vault_curl::write_key | plugin/keyring_vault/vault_curl.cc:256 The problem itself was in CURL library, sometimes it fails to re-initialize CURL session properly. The CURL documentation is vague in describing the issue. The fix was to reinitialize curl session per every operation and do not try to reuse the existing curl session. Also both keyrings (keyring_file and keyring_vault) export a lot of variables. Scope of those variables were limited to library scope. This should guard against any dynamic linking problems when both keyrings get installed on PS. --- plugin/keyring/CMakeLists.txt | 3 + plugin/keyring/keyring_file.version | 8 ++ plugin/keyring_vault/CMakeLists.txt | 3 + plugin/keyring_vault/keyring_vault.version | 8 ++ .../tests/mtr/table_encrypt_3.test | 1 + plugin/keyring_vault/vault_curl.cc | 75 +++++++++++++------ plugin/keyring_vault/vault_curl.h | 6 +- plugin/keyring_vault/vault_keyring.cc | 35 ++------- unittest/gunit/keyring_vault/vault_io-t.cc | 26 ++++--- .../keyring_vault/vault_keyring-api-t.cc | 12 ++- .../keyring_vault/vault_keys_container-t.cc | 19 +++-- 11 files changed, 123 insertions(+), 73 deletions(-) create mode 100644 plugin/keyring/keyring_file.version create mode 100644 plugin/keyring_vault/keyring_vault.version diff --git a/plugin/keyring/CMakeLists.txt b/plugin/keyring/CMakeLists.txt index 870819b148c5..2e1f30cb907b 100644 --- a/plugin/keyring/CMakeLists.txt +++ b/plugin/keyring/CMakeLists.txt @@ -50,6 +50,9 @@ IF(HAVE_DLOPEN) PROPERTIES LINK_FLAGS "${CMAKE_SHARED_LIBRARY_C_FLAGS}") ENDIF() +get_property(keyring_file_link_flags TARGET keyring_file PROPERTY LINK_FLAGS) +set_property(TARGET keyring_file PROPERTY LINK_FLAGS "${keyring_file_link_flags} -Wl,--version-script=${CMAKE_SOURCE_DIR}/plugin/keyring/keyring_file.version") + # Boost source has unused local typedefs. MY_CHECK_CXX_COMPILER_FLAG("-Wunused-local-typedefs" HAVE_UNUSED_TYPEDEFS) IF(HAVE_UNUSED_TYPEDEFS) diff --git a/plugin/keyring/keyring_file.version b/plugin/keyring/keyring_file.version new file mode 100644 index 000000000000..023b6b555b21 --- /dev/null +++ b/plugin/keyring/keyring_file.version @@ -0,0 +1,8 @@ +KEYRING_FILE_VERSION_1.0 { + global: + _mysql_*; + mysql_malloc_service; + my_plugin_log_service; + security_context_service; + local: *; +}; diff --git a/plugin/keyring_vault/CMakeLists.txt b/plugin/keyring_vault/CMakeLists.txt index 976ca106239a..751c6d443939 100644 --- a/plugin/keyring_vault/CMakeLists.txt +++ b/plugin/keyring_vault/CMakeLists.txt @@ -49,6 +49,9 @@ MYSQL_ADD_PLUGIN(keyring_vault MODULE_ONLY MODULE_OUTPUT_NAME "keyring_vault") +get_property(keyring_vault_link_flags TARGET keyring_vault PROPERTY LINK_FLAGS) +set_property(TARGET keyring_vault PROPERTY LINK_FLAGS "${keyring_vault_link_flags} -Wl,--version-script=${CMAKE_SOURCE_DIR}/plugin/keyring_vault/keyring_vault.version") + IF(WITH_KEYRING_VAULT_TEST) ADD_SUBDIRECTORY(keyring_vault-test) ENDIF() diff --git a/plugin/keyring_vault/keyring_vault.version b/plugin/keyring_vault/keyring_vault.version new file mode 100644 index 000000000000..9e751fa12caa --- /dev/null +++ b/plugin/keyring_vault/keyring_vault.version @@ -0,0 +1,8 @@ +KEYRING_VAULT_VERSION_1.0 { + global: + _mysql_*; + mysql_malloc_service; + my_plugin_log_service; + security_context_service; + local: *; +}; diff --git a/plugin/keyring_vault/tests/mtr/table_encrypt_3.test b/plugin/keyring_vault/tests/mtr/table_encrypt_3.test index 6be4b446329b..14c1d0f0e73d 100644 --- a/plugin/keyring_vault/tests/mtr/table_encrypt_3.test +++ b/plugin/keyring_vault/tests/mtr/table_encrypt_3.test @@ -1,3 +1,4 @@ +--source include/big_test.inc --source include/have_keyring_vault_plugin.inc --source generate_default_conf_files.inc diff --git a/plugin/keyring_vault/vault_curl.cc b/plugin/keyring_vault/vault_curl.cc index e2479afa3a2e..f143e693ffc9 100644 --- a/plugin/keyring_vault/vault_curl.cc +++ b/plugin/keyring_vault/vault_curl.cc @@ -1,5 +1,6 @@ #include #include +#include #include #include "my_rdtsc.h" #include "sql_error.h" @@ -39,6 +40,21 @@ class Thd_wait_end_guard } }; +class Curl_session_guard : private boost::noncopyable +{ +public: + Curl_session_guard(CURL *curl) + : curl(curl) + {} + ~Curl_session_guard() + { + if (curl != NULL) + curl_easy_cleanup(curl); + } +private: + CURL *curl; +}; + static size_t write_response_memory(void *contents, size_t size, size_t nmemb, void *userp) { size_t realsize = size * nmemb; @@ -131,23 +147,9 @@ bool Vault_curl::init(const Vault_credentials &vault_credentials) return false; } -bool Vault_curl::reset_curl_session() +bool Vault_curl::setup_curl_session(CURL *curl) { CURLcode curl_res = CURLE_OK; - if (unlikely(curl == NULL)) - { - curl = curl_easy_init(); - if (curl == NULL) - { - logger->log(MY_ERROR_LEVEL, "Could not create CURL session"); - return true; - } - return false; - } - else - { - curl_easy_reset(curl); - } read_data_ss.str(""); read_data_ss.clear(); curl_errbuf[0] = '\0'; @@ -190,7 +192,15 @@ bool Vault_curl::list_keys(Secure_string *response) Thd_wait_end_guard thd_wait_end_guard; (void)thd_wait_end_guard; // silence unused variable error - if (reset_curl_session() || + CURL *curl = curl_easy_init(); + if (curl == NULL) + { + logger->log(MY_ERROR_LEVEL, "Cannot initialize curl session"); + return true; + } + Curl_session_guard curl_session_guard(curl); + + if (setup_curl_session(curl) || (curl_res = curl_easy_setopt(curl, CURLOPT_URL, (vault_url + "?list=true").c_str())) != CURLE_OK || (curl_res = curl_easy_perform(curl)) != CURLE_OK || (curl_res = curl_easy_getinfo (curl, CURLINFO_RESPONSE_CODE, &http_code)) != CURLE_OK) @@ -249,8 +259,16 @@ bool Vault_curl::write_key(const Vault_key &key, Secure_string *response) Thd_wait_end_guard thd_wait_end_guard; (void)thd_wait_end_guard; //silence unused variable error - - if (reset_curl_session() || + + CURL *curl = curl_easy_init(); + if (curl == NULL) + { + logger->log(MY_ERROR_LEVEL, "Cannot initialize curl session"); + return true; + } + Curl_session_guard curl_session_guard(curl); + + if (setup_curl_session(curl) || (curl_res = curl_easy_setopt(curl, CURLOPT_URL, key_url.c_str())) != CURLE_OK || (curl_res = curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postdata.c_str())) != CURLE_OK || @@ -273,7 +291,15 @@ bool Vault_curl::read_key(const Vault_key &key, Secure_string *response) Thd_wait_end_guard thd_wait_end_guard; (void)thd_wait_end_guard; // silence unused variable error - if (reset_curl_session() || + CURL *curl = curl_easy_init(); + if (curl == NULL) + { + logger->log(MY_ERROR_LEVEL, "Cannot initialize curl session"); + return true; + } + Curl_session_guard curl_session_guard(curl); + + if (setup_curl_session(curl) || (curl_res = curl_easy_setopt(curl, CURLOPT_URL, key_url.c_str())) != CURLE_OK || (curl_res = curl_easy_perform(curl)) != CURLE_OK) @@ -294,8 +320,15 @@ bool Vault_curl::delete_key(const Vault_key &key, Secure_string *response) Thd_wait_end_guard thd_wait_end_guard; (void)thd_wait_end_guard; // silence unused variable error - - if (reset_curl_session() || + CURL *curl = curl_easy_init(); + if (curl == NULL) + { + logger->log(MY_ERROR_LEVEL, "Cannot initialize curl session"); + return true; + } + Curl_session_guard curl_session_guard(curl); + + if (setup_curl_session(curl) || (curl_res = curl_easy_setopt(curl, CURLOPT_URL, key_url.c_str())) != CURLE_OK || (curl_res = curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE")) != CURLE_OK || diff --git a/plugin/keyring_vault/vault_curl.h b/plugin/keyring_vault/vault_curl.h index 72d166c002ca..362171fe5ece 100644 --- a/plugin/keyring_vault/vault_curl.h +++ b/plugin/keyring_vault/vault_curl.h @@ -18,9 +18,8 @@ namespace keyring class Vault_curl : public IVault_curl, private boost::noncopyable { public: - Vault_curl(ILogger *logger, CURL *curl) + Vault_curl(ILogger *logger) : logger(logger) - , curl(curl) , list(NULL) {} @@ -38,7 +37,7 @@ class Vault_curl : public IVault_curl, private boost::noncopyable private: - bool reset_curl_session(); + bool setup_curl_session(CURL *curl); std::string get_error_from_curl(CURLcode curl_code); bool encode_key_signature(const Vault_key &key, Secure_string *encoded_key_signature); bool get_key_url(const Vault_key &key, Secure_string *key_url); @@ -46,7 +45,6 @@ class Vault_curl : public IVault_curl, private boost::noncopyable ILogger *logger; Secure_string token_header; Secure_string vault_url; - CURL *curl; char curl_errbuf[CURL_ERROR_SIZE]; //error from CURL Secure_ostringstream read_data_ss; struct curl_slist *list; diff --git a/plugin/keyring_vault/vault_keyring.cc b/plugin/keyring_vault/vault_keyring.cc index 5086e877abea..9063c6549b67 100644 --- a/plugin/keyring_vault/vault_keyring.cc +++ b/plugin/keyring_vault/vault_keyring.cc @@ -13,32 +13,13 @@ using keyring::Vault_keys_container; using keyring::Vault_curl; using keyring::Logger; -CURL *curl = NULL; mysql_rwlock_t LOCK_keyring; -static bool init_curl() -{ - curl_global_init(CURL_GLOBAL_ALL); - curl = curl_easy_init(); - if (curl == NULL) - { - logger->log(MY_ERROR_LEVEL, "Could not create CURL session"); - return true; - } - return false; -} - -static void cleanup_curl() -{ - if (curl != NULL) - curl_easy_cleanup(curl); - curl_global_cleanup(); -} static bool reset_curl() { - cleanup_curl(); - return init_curl(); + curl_global_cleanup(); + return curl_global_init(CURL_GLOBAL_ALL) != 0; } static void handle_std_bad_alloc_exception(const std::string &message_prefix) @@ -81,7 +62,7 @@ int check_keyring_file_data(MYSQL_THD thd MY_ATTRIBUTE((unused)), logger->log(MY_ERROR_LEVEL, "Cannot set keyring_vault_config_file"); return 1; } - boost::movelib::unique_ptr vault_curl(new Vault_curl(logger.get(), curl)); + boost::movelib::unique_ptr vault_curl(new Vault_curl(logger.get())); boost::movelib::unique_ptr vault_parser(new Vault_parser(logger.get())); IKeyring_io *keyring_io(new Vault_io(logger.get(), vault_curl.get(), vault_parser.get())); vault_curl.release(); @@ -129,12 +110,12 @@ static int keyring_vault_init(MYSQL_PLUGIN plugin_info) if (init_keyring_locks()) return 1; - if (init_curl()) + if (curl_global_init(CURL_GLOBAL_ALL) != 0) return 1; logger.reset(new Logger(plugin_info)); keys.reset(new Vault_keys_container(logger.get())); - boost::movelib::unique_ptr vault_curl(new Vault_curl(logger.get(), curl)); + boost::movelib::unique_ptr vault_curl(new Vault_curl(logger.get())); boost::movelib::unique_ptr vault_parser(new Vault_parser(logger.get())); IKeyring_io *keyring_io= new Vault_io(logger.get(), vault_curl.get(), vault_parser.get()); @@ -156,13 +137,13 @@ static int keyring_vault_init(MYSQL_PLUGIN plugin_info) catch (const std::bad_alloc &e) { handle_std_bad_alloc_exception("keyring_vault initialization failure"); - cleanup_curl(); + curl_global_cleanup(); return 1; } catch (...) { handle_unknown_exception("keyring_vault initialization failure"); - cleanup_curl(); + curl_global_cleanup(); return 1; } } @@ -174,7 +155,7 @@ int keyring_vault_deinit(void *arg MY_ATTRIBUTE((unused))) keyring_file_data.reset(); mysql_rwlock_destroy(&LOCK_keyring); - cleanup_curl(); + curl_global_cleanup(); return 0; } diff --git a/unittest/gunit/keyring_vault/vault_io-t.cc b/unittest/gunit/keyring_vault/vault_io-t.cc index cecccec50a14..4afb4f6580be 100644 --- a/unittest/gunit/keyring_vault/vault_io-t.cc +++ b/unittest/gunit/keyring_vault/vault_io-t.cc @@ -1,6 +1,7 @@ #include #include #include +#include #include "mock_logger.h" #include "vault_io.h" #include "incorrect_vault_key.h" @@ -31,7 +32,6 @@ namespace keyring__vault_io_unittest static std::string key_2 = (uuid + "key2"); static const char *key_1_id = key_1.c_str(); static const char *key_2_id = key_2.c_str(); - CURL *curl = NULL; std::string credential_file_url = "./keyring_vault.conf"; ILogger *logger; @@ -40,8 +40,7 @@ namespace keyring__vault_io_unittest protected: virtual void SetUp() { - ASSERT_TRUE(curl != NULL); - vault_curl = new Vault_curl(logger, curl); + vault_curl = new Vault_curl(logger); vault_parser = new Vault_parser(logger); } @@ -140,7 +139,7 @@ namespace keyring__vault_io_unittest // ***** // Now fetch two keys with separate Vault_io - Vault_curl *vault_curl2 = new Vault_curl(logger, curl); + Vault_curl *vault_curl2 = new Vault_curl(logger); Vault_parser *vault_parser2 = new Vault_parser(logger); Vault_io vault_io_for_fetching(logger, vault_curl2, vault_parser2); EXPECT_FALSE(vault_io_for_fetching.init(&credential_file_url)); @@ -195,7 +194,7 @@ namespace keyring__vault_io_unittest // ***** // Now fetch two keys with separate Vault_io - incorrect key should have been ignored - Vault_curl *vault_curl2 = new Vault_curl(logger, curl); + Vault_curl *vault_curl2 = new Vault_curl(logger); Vault_parser *vault_parser2 = new Vault_parser(logger); Vault_io vault_io_for_fetching(logger, vault_curl2, vault_parser2); @@ -283,7 +282,7 @@ namespace keyring__vault_io_unittest key_to_remove.set_key_operation(REMOVE_KEY); EXPECT_FALSE(vault_io.flush_to_storage(&key_to_remove)); - Vault_curl *vault_curl2 = new Vault_curl(logger, curl); + Vault_curl *vault_curl2 = new Vault_curl(logger); Vault_parser *vault_parser2 = new Vault_parser(logger); Vault_io vault_io2(logger, vault_curl2, vault_parser2); EXPECT_FALSE(vault_io2.init(&credential_file_url)); @@ -608,14 +607,21 @@ int main(int argc, char **argv) { curl_global_init(CURL_GLOBAL_DEFAULT); //create unique secret mount point for this test suite - keyring__vault_io_unittest::curl = curl_easy_init(); - if (keyring__vault_io_unittest::curl == NULL) + CURL *curl = curl_easy_init(); + if (curl == NULL) { std::cout << "Could not initialize CURL session" << std::endl; + curl_global_cleanup(); return 1; } + BOOST_SCOPE_EXIT(&curl) + { + curl_easy_cleanup(curl); + curl_global_cleanup(); + } BOOST_SCOPE_EXIT_END + keyring__vault_io_unittest::logger = new keyring::Mock_logger(); - keyring::Vault_mount vault_mount(keyring__vault_io_unittest::curl, keyring__vault_io_unittest::logger); + keyring::Vault_mount vault_mount(curl, keyring__vault_io_unittest::logger); if (generate_credential_file(keyring__vault_io_unittest::credential_file_url, CORRECT, keyring__vault_io_unittest::uuid)) { std::cout << "Could not generate credential file" << std::endl; @@ -638,8 +644,6 @@ int main(int argc, char **argv) { { std::cout << "Could not unmount secret backend" << std::endl; } - curl_easy_cleanup(keyring__vault_io_unittest::curl); - curl_global_cleanup(); delete keyring__vault_io_unittest::logger; return ret; } diff --git a/unittest/gunit/keyring_vault/vault_keyring-api-t.cc b/unittest/gunit/keyring_vault/vault_keyring-api-t.cc index ff30856d6ce0..3bb791e29cb8 100644 --- a/unittest/gunit/keyring_vault/vault_keyring-api-t.cc +++ b/unittest/gunit/keyring_vault/vault_keyring-api-t.cc @@ -2,6 +2,7 @@ #include #include #include +#include #include #include "vault_keyring.cc" #include "keyring_impl.cc" @@ -348,15 +349,22 @@ int main(int argc, char **argv) MY_INIT(argv[0]); my_testing::setup_server_for_unit_tests(); - //create unique secret mount point for this test suite curl_global_init(CURL_GLOBAL_DEFAULT); CURL *curl = curl_easy_init(); if (curl == NULL) { std::cout << "Could not initialize CURL session" << std::endl; + curl_global_cleanup(); return 1; } + BOOST_SCOPE_EXIT(&curl) + { + curl_easy_cleanup(curl); + curl_global_cleanup(); + } BOOST_SCOPE_EXIT_END + ILogger *logger = new keyring::Mock_logger(); + //create unique secret mount point for this test suite keyring::Vault_mount vault_mount(curl, logger); keyring__api_unittest::keyring_filename= new char[strlen("./keyring_vault.conf")+1]; @@ -385,8 +393,6 @@ int main(int argc, char **argv) { std::cout << "Could not unmount secret backend" << std::endl; } - curl_easy_cleanup(curl); - curl_global_cleanup(); delete logger; delete[] keyring__api_unittest::keyring_filename; diff --git a/unittest/gunit/keyring_vault/vault_keys_container-t.cc b/unittest/gunit/keyring_vault/vault_keys_container-t.cc index ec26f9080813..46209052e8be 100644 --- a/unittest/gunit/keyring_vault/vault_keys_container-t.cc +++ b/unittest/gunit/keyring_vault/vault_keys_container-t.cc @@ -2,6 +2,7 @@ #include #include #include +#include #include "vault_keys_container.h" #include "mock_logger.h" #include "vault_io.h" @@ -33,7 +34,6 @@ namespace keyring__vault_keys_container_unittest using ::testing::WithArgs; using ::testing::Invoke; - CURL *curl = NULL; static std::string uuid = generate_uuid(); static std::string credential_file_url = "./keyring_vault.conf"; ILogger *logger; @@ -50,7 +50,7 @@ namespace keyring__vault_keys_container_unittest sample_key = new Vault_key((uuid+"Roberts_key").c_str(), "AES", "Robert", sample_key_data.c_str(), sample_key_data.length()); vault_keys_container = new Vault_keys_container(logger); - vault_curl = new Vault_curl(logger, curl); + vault_curl = new Vault_curl(logger); vault_parser = new Vault_parser(logger); } virtual void TearDown() @@ -788,14 +788,21 @@ int main(int argc, char **argv) //create unique secret mount point for this test suite curl_global_init(CURL_GLOBAL_DEFAULT); - keyring__vault_keys_container_unittest::curl = curl_easy_init(); - if (keyring__vault_keys_container_unittest::curl == NULL) + CURL *curl = curl_easy_init(); + if (curl == NULL) { std::cout << "Could not initialize CURL session" << std::endl; + curl_global_cleanup(); return 1; } + BOOST_SCOPE_EXIT(&curl) + { + curl_easy_cleanup(curl); + curl_global_cleanup(); + } BOOST_SCOPE_EXIT_END + keyring__vault_keys_container_unittest::logger = new keyring::Mock_logger(); - keyring::Vault_mount vault_mount(keyring__vault_keys_container_unittest::curl, keyring__vault_keys_container_unittest::logger); + keyring::Vault_mount vault_mount(curl, keyring__vault_keys_container_unittest::logger); if (generate_credential_file(keyring__vault_keys_container_unittest::credential_file_url, CORRECT, keyring__vault_keys_container_unittest::uuid)) { @@ -820,8 +827,6 @@ int main(int argc, char **argv) { std::cout << "Could not unmount secret backend" << std::endl; } - curl_easy_cleanup(keyring__vault_keys_container_unittest::curl); - curl_global_cleanup(); delete keyring__vault_keys_container_unittest::logger; my_testing::teardown_server_for_unit_tests(); From 20e75a3efdd12540bf0078e27c62e0daad034cb7 Mon Sep 17 00:00:00 2001 From: Bjorn Munch Date: Thu, 11 Jan 2018 09:31:36 +0100 Subject: [PATCH 0370/1221] Bug #27021754 MYSQLTEST MAN PAGES WILL BE REMOVED, PACKAGING MUST BE PREPARED Followup: now that the man pages have actually been removed, we no longer need to take deliberate action to ignore them. Thus we can remove that part of the original change. RPM: drop the conditional removal DEB: remove from the exclude list --- packaging/rpm-oel/mysql.spec.in | 13 ++++--------- packaging/rpm-sles/mysql.spec.in | 13 ++++--------- support-files/mysql.spec.sh | 11 ++++------- 3 files changed, 12 insertions(+), 25 deletions(-) diff --git a/packaging/rpm-oel/mysql.spec.in b/packaging/rpm-oel/mysql.spec.in index 755f922026e8..f3f65da66059 100644 --- a/packaging/rpm-oel/mysql.spec.in +++ b/packaging/rpm-oel/mysql.spec.in @@ -1,4 +1,4 @@ -# Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -609,14 +609,6 @@ rm -rf %{buildroot}%{_bindir}/mysql_embedded rm -rf %{buildroot}%{_bindir}/mysql_setpermission rm -rf %{buildroot}%{_mandir}/man1/mysql_setpermission.1* -# Remove obsoleted man pages -rm -f %{buildroot}%{_mandir}/man1/mysql-stress-test.pl.1 -rm -f %{buildroot}%{_mandir}/man1/mysql-test-run.pl.1 -rm -f %{buildroot}%{_mandir}/man1/mysql_client_test.1 -rm -f %{buildroot}%{_mandir}/man1/mysql_client_test_embedded.1 -rm -f %{buildroot}%{_mandir}/man1/mysqltest.1 -rm -f %{buildroot}%{_mandir}/man1/mysqltest_embedded.1 - %check %if 0%{?runselftest} pushd release @@ -920,6 +912,9 @@ fi %endif %changelog +* Wed Jan 10 2018 Bjorn Munch - 5.5.60-1 +- No longer need to remove obsoleted mysqltest man pages + * Tue Oct 31 2017 Bjorn Munch - 5.5.59-1 - Remove obsoleted mysqltest man pages diff --git a/packaging/rpm-sles/mysql.spec.in b/packaging/rpm-sles/mysql.spec.in index d5a3ba8deff5..75e0271b590b 100644 --- a/packaging/rpm-sles/mysql.spec.in +++ b/packaging/rpm-sles/mysql.spec.in @@ -1,4 +1,4 @@ -# Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -446,14 +446,6 @@ rm -rf %{buildroot}%{_bindir}/mysql_embedded rm -rf %{buildroot}%{_bindir}/mysql_setpermission rm -rf %{buildroot}%{_mandir}/man1/mysql_setpermission.1* -# Remove obsoleted man pages -rm -f %{buildroot}%{_mandir}/man1/mysql-stress-test.pl.1 -rm -f %{buildroot}%{_mandir}/man1/mysql-test-run.pl.1 -rm -f %{buildroot}%{_mandir}/man1/mysql_client_test.1 -rm -f %{buildroot}%{_mandir}/man1/mysql_client_test_embedded.1 -rm -f %{buildroot}%{_mandir}/man1/mysqltest.1 -rm -f %{buildroot}%{_mandir}/man1/mysqltest_embedded.1 - # rcmysql symlink install -d %{buildroot}%{_sbindir} ln -sf %{_initrddir}/mysql %{buildroot}%{_sbindir}/rcmysql @@ -742,6 +734,9 @@ fi %attr(755, root, root) %{_libdir}/mysql/libmysqld.so %changelog +* Wed Jan 10 2018 Bjorn Munch - 5.5.60-1 +- No longer need to remove obsoleted mysqltest man pages + * Tue Oct 31 2017 Bjorn Munch - 5.5.59-1 - Remove obsoleted mysqltest man pages diff --git a/support-files/mysql.spec.sh b/support-files/mysql.spec.sh index 4060284ce9df..cb1462c57e5e 100644 --- a/support-files/mysql.spec.sh +++ b/support-files/mysql.spec.sh @@ -1,4 +1,4 @@ -# Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -621,12 +621,6 @@ install -m 644 "%{malloc_lib_source}" \ # Remove man pages we explicitly do not want to package, avoids 'unpackaged # files' warning. # This has become obsolete: rm -f $RBR%{_mandir}/man1/make_win_bin_dist.1* -rm -f $RBR%{_mandir}/man1/mysql-stress-test.pl.1 -rm -f $RBR%{_mandir}/man1/mysql-test-run.pl.1 -rm -f $RBR%{_mandir}/man1/mysql_client_test.1 -rm -f $RBR%{_mandir}/man1/mysql_client_test_embedded.1 -rm -f $RBR%{_mandir}/man1/mysqltest.1 -rm -f $RBR%{_mandir}/man1/mysqltest_embedded.1 ############################################################################## # Post processing actions, i.e. when installed @@ -1228,6 +1222,9 @@ echo "=====" >> $STATUS_HISTORY # merging BK trees) ############################################################################## %changelog +* Wed Jan 10 2018 Bjorn Munch +- No longer need to remove obsoleted mysqltest man pages + * Tue Oct 31 2017 Bjorn Munch - Remove obsoleted mysqltest man pages From 96e2b9e57fb8e236e9df5f91d8e2984886d4e092 Mon Sep 17 00:00:00 2001 From: Laurynas Biveinis Date: Thu, 11 Jan 2018 13:25:48 +0200 Subject: [PATCH 0371/1221] Fix PS-257 (Jenkins mtr not resolving symbols on assert/segv/core) This is a regression introduced by bug 1684601 fix, which removed executable file guessing for core dumps with gdb, because it kept guessing "mysqltest" executable for any unit test core dumps. This broke core dump handling for instances where guessing is actually required, because of executable path being truncated at 79 symbols in the core dumps. Fix by restoring the call to _verify_binpath in _sub_gdb, and by adjusting the former to guess unit test executables correctly. At the same time tweak is_core_dump filter to not match unittest/examples/core-t.c in in-source builds. --- mysql-test/lib/My/CoreDump.pm | 8 +++++++- mysql-test/mysql-test-run.pl | 5 +++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/mysql-test/lib/My/CoreDump.pm b/mysql-test/lib/My/CoreDump.pm index 75c90ad6e670..10a9282e132b 100644 --- a/mysql-test/lib/My/CoreDump.pm +++ b/mysql-test/lib/My/CoreDump.pm @@ -37,8 +37,12 @@ sub _verify_binpath { $binpath= $binary; print "Core generated by '$binpath'\n"; } else { + # Assume it's a unit test if we find a string matching unittest/.*-t + if (`strings '$core_name' | grep "unittest/.*-t\$" | tail -1` =~ /(\/.*)/) { + $binpath= $1; + print "Guessing that core was generated by a unit test '$binpath'\n"; # Last occurrence of path ending in /mysql*, cut from first / - if (`strings '$core_name' | grep "/mysql[^/. ]*\$" | tail -1` =~ /(\/.*)/) { + } elsif (`strings '$core_name' | grep "/mysql[^/. ]*\$" | tail -1` =~ /(\/.*)/) { $binpath= $1; print "Guessing that core was generated by '$binpath'\n"; } else { @@ -62,6 +66,8 @@ sub _gdb { /Core was generated by `([^\s\'\`]+)/; my $binary= $1 or return; + $binary= _verify_binpath ($binary, $core_name) or return; + # Create tempfile containing gdb commands my ($tmp, $tmp_name) = tempfile(); print $tmp diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index 8dc7b5a4cb18..35a2082169bc 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -345,8 +345,9 @@ ($) sub is_core_dump { my $core_name= shift; - # Name beginning with core, not ending in .gz, or ending with .dmp on Windows - return (($core_name =~ /^core/ and $core_name !~ /\.gz$/) + # Name beginning with core, not ending in .gz nor .c, or ending with .dmp on + # Windows + return (($core_name =~ /^core/ and $core_name !~ /\.gz$|\.c$/) or (IS_WINDOWS and $core_name =~ /\.dmp$/)); } From 8f5811560dc883ae5f9acacd52e15a332cbd9a1f Mon Sep 17 00:00:00 2001 From: Robert Golebiowski Date: Wed, 20 Dec 2017 16:15:18 +0100 Subject: [PATCH 0372/1221] Bug: PS-283: keyring_vault is too quiet when plugin installation succedes, but keyring_vault is not operational When keyring_vault is installed with use of install statement : INSTALL PLUGIN (...) there is no feedback to the user that keyring_vault_config_file may still need to be set. Currently when user install the plugin he might gets the following response: mysql> install plugin keyring_vault soname 'keyring_vault.so'; Query OK, 0 rows affected (0.02 sec) And in server log there are these error messages: [ERROR] Plugin keyring_vault reported: 'Could not open file with credentials.' [ERROR] Plugin keyring_vault reported: 'keyring_vault initialization failure. Please check that the keyring_vault_config_file points to readable keyring_vault configuration file. Please also make sure Vault is running and accessible. The keyring_vault will stay unusable until correct configuration file gets provided.' The fix is to change this behavior so the user recieved warnings when keyring_vault is not operational due to problem with accessing configuration file (the path to configuration file is stored in keyring_vault_config_file variable) - after plugin has been installed with INSTALL PLUGIN SQL statement. --- plugin/keyring_vault/CMakeLists.txt | 2 + .../tests/mtr/install_keyring_vault.result | 4 ++ .../tests/mtr/install_keyring_vault.test | 1 + .../tests/mtr/keyring_vault_config.result | 1 + .../tests/mtr/keyring_vault_config.test | 1 + .../tests/mtr/keyring_vault_config_qa.result | 5 +++ .../tests/mtr/keyring_vault_config_qa.test | 2 + .../tests/mtr/rpl_key_rotation.result | 7 +++ .../tests/mtr/rpl_key_rotation.test | 1 + .../tests/mtr/table_encrypt_5.result | 1 + .../tests/mtr/table_encrypt_5.test | 1 + .../mtr/wrong_keyring_vault_config.result | 1 + .../tests/mtr/wrong_keyring_vault_config.test | 2 + .../keyring_vault/vault_credentials_parser.cc | 45 +++++++++++++++++-- .../keyring_vault/vault_credentials_parser.h | 1 + plugin/keyring_vault/vault_keyring.cc | 5 +++ plugin/keyring_vault/vault_secure_string.h | 1 + unittest/gunit/keyring_vault/CMakeLists.txt | 2 + .../vault_credentials_parser-t.cc | 13 +++++- unittest/gunit/keyring_vault/vault_io-t.cc | 7 +++ .../keyring_vault/vault_keys_container-t.cc | 3 +- 21 files changed, 99 insertions(+), 7 deletions(-) diff --git a/plugin/keyring_vault/CMakeLists.txt b/plugin/keyring_vault/CMakeLists.txt index 976ca106239a..23d8b4987e1f 100644 --- a/plugin/keyring_vault/CMakeLists.txt +++ b/plugin/keyring_vault/CMakeLists.txt @@ -30,11 +30,13 @@ INCLUDE_DIRECTORIES(${BOOST_PATCHES_DIR}) INCLUDE_DIRECTORIES(SYSTEM ${BOOST_INCLUDE_DIR} ${CURL_INCLUDE_DIRS}) INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/plugin/keyring/common) +INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/plugin/keyring) MYSQL_ADD_PLUGIN(keyring_vault ${CMAKE_SOURCE_DIR}/plugin/keyring/common/keyring_key.cc ${CMAKE_SOURCE_DIR}/plugin/keyring/common/keys_container.cc ${CMAKE_SOURCE_DIR}/plugin/keyring/common/keyring_impl.cc + ${CMAKE_SOURCE_DIR}/plugin/keyring/file_io.cc vault_io.cc vault_key.cc vault_base64.cc diff --git a/plugin/keyring_vault/tests/mtr/install_keyring_vault.result b/plugin/keyring_vault/tests/mtr/install_keyring_vault.result index 851e29c7ab63..1ea51b266794 100644 --- a/plugin/keyring_vault/tests/mtr/install_keyring_vault.result +++ b/plugin/keyring_vault/tests/mtr/install_keyring_vault.result @@ -1,8 +1,12 @@ call mtr.add_suppression("\\[Error\\] Plugin keyring_vault reported: 'keyring_vault initialization failure."); call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'Could not open file with credentials.'"); +call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'File '' not found"); SET @@global.keyring_vault_config='MYSQLTEST_VARDIR/std_data/keyring_vault_confs/keyring_vault1.conf'; ERROR HY000: Unknown system variable 'keyring_vault_config' INSTALL PLUGIN keyring_vault SONAME 'keyring_vault.so'; +Warnings: +Warning 29 File '' not found (Errcode: 2 - No such file or directory) +Warning 42000 keyring_vault initialization failure. Please check the server log. SET @@global.keyring_vault_config='MYSQLTEST_VARDIR/std_data/keyring_vault_confs/keyring_vault2.conf'; SET @@global.keyring_vault_config='MYSQLTEST_VARDIR/std_data/keyring_vault_confs/keyring_vault1.conf'; UNINSTALL PLUGIN keyring_vault; diff --git a/plugin/keyring_vault/tests/mtr/install_keyring_vault.test b/plugin/keyring_vault/tests/mtr/install_keyring_vault.test index 699c17ae0353..a13356a486a6 100644 --- a/plugin/keyring_vault/tests/mtr/install_keyring_vault.test +++ b/plugin/keyring_vault/tests/mtr/install_keyring_vault.test @@ -3,6 +3,7 @@ call mtr.add_suppression("\\[Error\\] Plugin keyring_vault reported: 'keyring_vault initialization failure."); call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'Could not open file with credentials.'"); +call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'File '' not found"); --source generate_default_conf_files.inc diff --git a/plugin/keyring_vault/tests/mtr/keyring_vault_config.result b/plugin/keyring_vault/tests/mtr/keyring_vault_config.result index 157213163fab..10aafc191921 100644 --- a/plugin/keyring_vault/tests/mtr/keyring_vault_config.result +++ b/plugin/keyring_vault/tests/mtr/keyring_vault_config.result @@ -1,4 +1,5 @@ call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'Could not open file with credentials.'"); +call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'File '../../../../../bad_dir/bad_keyring_vault.conf' not found"); # restart:--plugin_load=keyring_vault=keyring_vault.so --loose-keyring_vault_config=MYSQLTEST_VARDIR/std_data/keyring_vault_confs/keyring_vault1.conf KEYRING_VAULT_PLUGIN_OPT SELECT @@global.keyring_vault_config; @@global.keyring_vault_config diff --git a/plugin/keyring_vault/tests/mtr/keyring_vault_config.test b/plugin/keyring_vault/tests/mtr/keyring_vault_config.test index e970c837218a..cbaa9a35e92c 100644 --- a/plugin/keyring_vault/tests/mtr/keyring_vault_config.test +++ b/plugin/keyring_vault/tests/mtr/keyring_vault_config.test @@ -2,6 +2,7 @@ --source include/not_embedded.inc call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'Could not open file with credentials.'"); +call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'File '../../../../../bad_dir/bad_keyring_vault.conf' not found"); --source generate_default_conf_files.inc --replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR $KEYRING_PLUGIN keyring_vault.so $KEYRING_VAULT_PLUGIN_OPT KEYRING_VAULT_PLUGIN_OPT diff --git a/plugin/keyring_vault/tests/mtr/keyring_vault_config_qa.result b/plugin/keyring_vault/tests/mtr/keyring_vault_config_qa.result index af7b0a8646eb..4490a6d403e4 100644 --- a/plugin/keyring_vault/tests/mtr/keyring_vault_config_qa.result +++ b/plugin/keyring_vault/tests/mtr/keyring_vault_config_qa.result @@ -5,7 +5,12 @@ call mtr.add_suppression("\\[Error\\] Couldn't load plugin named 'keyring_vault' call mtr.add_suppression("\\[Error\\] Plugin keyring_vault reported: 'keyring_vault initialization failure."); call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'Could not retrieve list of keys from Vault. Vault has returned the following error\\(s\\): \\[\"permission denied\"\\]'"); call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'Error while loading keyring content. The keyring might be malformed'"); +call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'File '.*' not found"); +call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'Could not read file with credentials.'"); INSTALL PLUGIN keyring_vault SONAME 'keyring_vault.so'; +Warnings: +Warning 29 File '' not found (Errcode: 2 - No such file or directory) +Warning 42000 keyring_vault initialization failure. Please check the server log. SELECT PLUGIN_NAME,PLUGIN_VERSION,PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE plugin_name='keyring_vault'; PLUGIN_NAME keyring_vault diff --git a/plugin/keyring_vault/tests/mtr/keyring_vault_config_qa.test b/plugin/keyring_vault/tests/mtr/keyring_vault_config_qa.test index 7968230b905f..6b6e0651abee 100644 --- a/plugin/keyring_vault/tests/mtr/keyring_vault_config_qa.test +++ b/plugin/keyring_vault/tests/mtr/keyring_vault_config_qa.test @@ -12,6 +12,8 @@ call mtr.add_suppression("\\[Error\\] Plugin keyring_vault reported: 'keyring_va call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'Could not retrieve list of keys from Vault. Vault has returned the following error\\(s\\): \\[\"permission denied\"\\]'"); call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'Error while loading keyring content. The keyring might be malformed'"); +call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'File '.*' not found"); +call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'Could not read file with credentials.'"); --source generate_default_conf_files.inc diff --git a/plugin/keyring_vault/tests/mtr/rpl_key_rotation.result b/plugin/keyring_vault/tests/mtr/rpl_key_rotation.result index 82d4c1705946..eb65f307b16b 100644 --- a/plugin/keyring_vault/tests/mtr/rpl_key_rotation.result +++ b/plugin/keyring_vault/tests/mtr/rpl_key_rotation.result @@ -11,6 +11,7 @@ call mtr.add_suppression("Error 'Can't find master key from keyring, please chec call mtr.add_suppression("\\[Warning\\] Slave: Can't find master key from keyring, please check keyring plugin is loaded."); call mtr.add_suppression("\\[Error\\] InnoDB: Can't generate new master key for tablespace encryption, please check the keyring plugin is loaded."); call mtr.add_suppression("The slave coordinator and worker threads are stopped"); +call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'File '' not found"); SET @@global.keyring_vault_config='MYSQLTEST_VARDIR/std_data/keyring_vault_confs/keyring_vault2.conf'; [On Master] SET @@global.keyring_vault_config='MYSQLTEST_VARDIR/std_data/keyring_vault_confs/keyring_vault1.conf'; @@ -78,6 +79,9 @@ include/save_master_pos.inc START SLAVE SQL_THREAD; include/wait_for_slave_sql_error.inc [errno=3185] INSTALL PLUGIN keyring_vault SONAME 'keyring_vault.so'; +Warnings: +Warning 29 File '' not found (Errcode: 2 - No such file or directory) +Warning 42000 keyring_vault initialization failure. Please check the server log. SET @@global.keyring_vault_config='MYSQLTEST_VARDIR/std_data/keyring_vault_confs/keyring_vault2.conf'; SELECT PLUGIN_NAME,PLUGIN_VERSION,PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE plugin_name='keyring_vault'; @@ -105,6 +109,9 @@ ALTER INSTANCE ROTATE INNODB MASTER KEY; ERROR HY000: Can't find master key from keyring, please check keyring plugin is loaded. # Installing keyring_vault plugin on master. INSTALL PLUGIN keyring_vault SONAME 'keyring_vault.so'; +Warnings: +Warning 29 File '' not found (Errcode: 2 - No such file or directory) +Warning 42000 keyring_vault initialization failure. Please check the server log. # Cleanup DROP TABLE t1,t2,t3,t4; include/sync_slave_sql_with_master.inc diff --git a/plugin/keyring_vault/tests/mtr/rpl_key_rotation.test b/plugin/keyring_vault/tests/mtr/rpl_key_rotation.test index 41571cec54a8..aaa9b38a955a 100644 --- a/plugin/keyring_vault/tests/mtr/rpl_key_rotation.test +++ b/plugin/keyring_vault/tests/mtr/rpl_key_rotation.test @@ -13,6 +13,7 @@ call mtr.add_suppression("Error 'Can't find master key from keyring, please chec call mtr.add_suppression("\\[Warning\\] Slave: Can't find master key from keyring, please check keyring plugin is loaded."); call mtr.add_suppression("\\[Error\\] InnoDB: Can't generate new master key for tablespace encryption, please check the keyring plugin is loaded."); call mtr.add_suppression("The slave coordinator and worker threads are stopped"); +call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'File '' not found"); --source generate_default_conf_files.inc diff --git a/plugin/keyring_vault/tests/mtr/table_encrypt_5.result b/plugin/keyring_vault/tests/mtr/table_encrypt_5.result index 176af22185aa..fcc43a70fc50 100644 --- a/plugin/keyring_vault/tests/mtr/table_encrypt_5.result +++ b/plugin/keyring_vault/tests/mtr/table_encrypt_5.result @@ -1,5 +1,6 @@ call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'Could not open file with credentials.'"); call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'keyring_vault initialization failure."); +call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'File '' not found"); call mtr.add_suppression("\\[ERROR\\] InnoDB: Encryption can't find master key, please check the keyring plugin is loaded."); call mtr.add_suppression("ibd can't be decrypted , please confirm the keyfile is match and keyring plugin is loaded"); call mtr.add_suppression("Can't generate new master key for tablespace encryption, please check the keyring plugin is loaded."); diff --git a/plugin/keyring_vault/tests/mtr/table_encrypt_5.test b/plugin/keyring_vault/tests/mtr/table_encrypt_5.test index dd5bc896fa6b..f1ae3e6126b8 100644 --- a/plugin/keyring_vault/tests/mtr/table_encrypt_5.test +++ b/plugin/keyring_vault/tests/mtr/table_encrypt_5.test @@ -1,5 +1,6 @@ call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'Could not open file with credentials.'"); call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'keyring_vault initialization failure."); +call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'File '' not found"); --source include/have_keyring_vault_plugin.inc --source generate_default_conf_files.inc diff --git a/plugin/keyring_vault/tests/mtr/wrong_keyring_vault_config.result b/plugin/keyring_vault/tests/mtr/wrong_keyring_vault_config.result index 6120b5f0bc75..6a94f562417d 100644 --- a/plugin/keyring_vault/tests/mtr/wrong_keyring_vault_config.result +++ b/plugin/keyring_vault/tests/mtr/wrong_keyring_vault_config.result @@ -1,2 +1,3 @@ call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'Could not open file with credentials.'"); call mtr.add_suppression("\\[Error\\] Plugin keyring_vault reported: 'keyring_vault initialization failure."); +call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'File '../bad_dir/../../bad_keyring' not found"); diff --git a/plugin/keyring_vault/tests/mtr/wrong_keyring_vault_config.test b/plugin/keyring_vault/tests/mtr/wrong_keyring_vault_config.test index 040901de4291..c6d37d73c05e 100644 --- a/plugin/keyring_vault/tests/mtr/wrong_keyring_vault_config.test +++ b/plugin/keyring_vault/tests/mtr/wrong_keyring_vault_config.test @@ -7,3 +7,5 @@ call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'Could not open file with credentials.'"); call mtr.add_suppression("\\[Error\\] Plugin keyring_vault reported: 'keyring_vault initialization failure."); +call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'File '../bad_dir/../../bad_keyring' not found"); + diff --git a/plugin/keyring_vault/vault_credentials_parser.cc b/plugin/keyring_vault/vault_credentials_parser.cc index b1480dad62eb..4cd2fd5c2cbd 100644 --- a/plugin/keyring_vault/vault_credentials_parser.cc +++ b/plugin/keyring_vault/vault_credentials_parser.cc @@ -6,9 +6,14 @@ #include #include #include "boost/algorithm/string/trim.hpp" +#include "boost/move/unique_ptr.hpp" +#include "boost/scope_exit.hpp" +#include "file_io.h" namespace keyring { + const size_t Vault_credentials_parser::max_file_size = 10000; + void Vault_credentials_parser::reset_vault_credentials(Vault_credentials *vault_credentials) { for (Vault_credentials::iterator iter = vault_credentials->begin(); @@ -72,15 +77,49 @@ namespace keyring { reset_vault_credentials(&vault_credentials_in_progress); - std::ifstream credentials_file(file_url.c_str()); - if (!credentials_file) + File_io file_io(logger); + File file = file_io.open(PSI_NOT_INSTRUMENTED, + file_url.c_str(), + O_RDONLY, MYF(MY_WME)); + + if (file < 0) { logger->log(MY_ERROR_LEVEL, "Could not open file with credentials."); return true; } + BOOST_SCOPE_EXIT(&file_io, &file) + { + file_io.close(file, MYF(MY_WME)); + } BOOST_SCOPE_EXIT_END + + if (file_io.seek(file, 0, MY_SEEK_END, MYF(MY_WME)) == MY_FILEPOS_ERROR) + { + logger->log(MY_ERROR_LEVEL, "Could not read file with credentials."); + return true; + } + my_off_t file_size = file_io.tell(file, MYF(MY_WME)); + if (file_size == 0) + { + logger->log(MY_ERROR_LEVEL, "Empty file with credentials."); + return true; + } + if (file_size > max_file_size || + file_io.seek(file, 0, MY_SEEK_SET, MYF(MY_WME)) == MY_FILEPOS_ERROR) + { + logger->log(MY_ERROR_LEVEL, "Could not read file with credentials."); + return true; + } + boost::movelib::unique_ptr buffer(new uchar[file_size]); + if (file_io.read(file, buffer.get(), file_size, MYF(MY_WME)) != file_size) + { + logger->log(MY_ERROR_LEVEL, "Could not read file with credentials."); + return true; + } + Secure_string file_content(reinterpret_cast(buffer.get()), file_size); + Secure_istringstream credentials_ss(file_content); uint line_number = 1; Secure_string line; - while (!getline(credentials_file, line).fail()) + while (!getline(credentials_ss, line).fail()) if (parse_line(line_number, line, &vault_credentials_in_progress)) { line_number++; diff --git a/plugin/keyring_vault/vault_credentials_parser.h b/plugin/keyring_vault/vault_credentials_parser.h index 06e12cfd762f..316aed607d72 100644 --- a/plugin/keyring_vault/vault_credentials_parser.h +++ b/plugin/keyring_vault/vault_credentials_parser.h @@ -35,6 +35,7 @@ namespace keyring std::set optional_value; ILogger *logger; + static const size_t max_file_size; }; } // namespace keyring diff --git a/plugin/keyring_vault/vault_keyring.cc b/plugin/keyring_vault/vault_keyring.cc index 5086e877abea..1189a6abbe92 100644 --- a/plugin/keyring_vault/vault_keyring.cc +++ b/plugin/keyring_vault/vault_keyring.cc @@ -1,5 +1,6 @@ #include #include +#include #include "keyring.h" #include "vault_keys_container.h" #include "vault_parser.h" @@ -148,6 +149,10 @@ static int keyring_vault_init(MYSQL_PLUGIN plugin_info) " file. Please also make sure Vault is running and accessible." " The keyring_vault will stay unusable until correct configuration file gets" " provided."); + + if (current_thd != NULL) + push_warning(current_thd, Sql_condition::SL_WARNING, 42000, + "keyring_vault initialization failure. Please check the server log."); return 0; } is_keys_container_initialized = TRUE; diff --git a/plugin/keyring_vault/vault_secure_string.h b/plugin/keyring_vault/vault_secure_string.h index bc0e8cfc8d9d..1b3aa6b97410 100644 --- a/plugin/keyring_vault/vault_secure_string.h +++ b/plugin/keyring_vault/vault_secure_string.h @@ -7,6 +7,7 @@ namespace keyring { typedef std::basic_string, Secure_allocator > Secure_string; typedef std::basic_ostringstream, Secure_allocator > Secure_ostringstream; + typedef std::basic_istringstream, Secure_allocator > Secure_istringstream; } #endif // MYSQL_VAULT_SECURE_STRING diff --git a/unittest/gunit/keyring_vault/CMakeLists.txt b/unittest/gunit/keyring_vault/CMakeLists.txt index 13d8d4a3868c..600273933ecb 100644 --- a/unittest/gunit/keyring_vault/CMakeLists.txt +++ b/unittest/gunit/keyring_vault/CMakeLists.txt @@ -15,6 +15,7 @@ INCLUDE_DIRECTORIES( ${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/sql ${CMAKE_SOURCE_DIR}/plugin/keyring/common + ${CMAKE_SOURCE_DIR}/plugin/keyring ${CMAKE_SOURCE_DIR}/plugin/keyring_vault ${CMAKE_SOURCE_DIR}/unittest/gunit ${CMAKE_SOURCE_DIR}/unittest/gunit/keyring @@ -41,6 +42,7 @@ FOREACH(test ${TESTS}) ${CMAKE_SOURCE_DIR}/plugin/keyring_vault/vault_credentials.cc ${CMAKE_SOURCE_DIR}/plugin/keyring_vault/vault_credentials_parser.cc ${CMAKE_SOURCE_DIR}/plugin/keyring_vault/vault_keys_container.cc + ${CMAKE_SOURCE_DIR}/plugin/keyring/file_io.cc ${CMAKE_SOURCE_DIR}/unittest/gunit/keyring_vault/vault_mount.cc ) IF(WIN32) diff --git a/unittest/gunit/keyring_vault/vault_credentials_parser-t.cc b/unittest/gunit/keyring_vault/vault_credentials_parser-t.cc index 50b3bcef8e94..01e08ee51fc1 100644 --- a/unittest/gunit/keyring_vault/vault_credentials_parser-t.cc +++ b/unittest/gunit/keyring_vault/vault_credentials_parser-t.cc @@ -3,6 +3,7 @@ #include "mock_logger.h" #include "vault_credentials_parser.h" #include +#include "test_utils.h" #if defined(HAVE_PSI_INTERFACE) namespace keyring @@ -48,6 +49,9 @@ namespace keyring__vault_credentials_parser_unittest EXPECT_CALL(*(reinterpret_cast(logger)), log(MY_ERROR_LEVEL, StrEq("Could not open file with credentials."))); + EXPECT_CALL(*(reinterpret_cast(logger)), + log(MY_ERROR_LEVEL, StrEq("File '/.there_no_such_file' not found (Errcode: 2 - No such file or directory)"))); + std::string file_url = "/.there_no_such_file"; Vault_credentials vault_credentials; EXPECT_TRUE(vault_credentials_parser.parse(file_url, &vault_credentials)); @@ -70,7 +74,7 @@ namespace keyring__vault_credentials_parser_unittest myfile.close(); EXPECT_CALL(*(reinterpret_cast(logger)), - log(MY_ERROR_LEVEL, StrEq("Could not read secret_mount_point from the configuration file."))); + log(MY_ERROR_LEVEL, StrEq("Empty file with credentials."))); std::string file_url = "./credentials"; Vault_credentials vault_credentials; @@ -282,5 +286,10 @@ namespace keyring__vault_credentials_parser_unittest int main(int argc, char **argv) { ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); + MY_INIT(argv[0]); + my_testing::setup_server_for_unit_tests(); + int ret= RUN_ALL_TESTS(); + my_testing::teardown_server_for_unit_tests(); + + return ret; } diff --git a/unittest/gunit/keyring_vault/vault_io-t.cc b/unittest/gunit/keyring_vault/vault_io-t.cc index cecccec50a14..efba6c7e1467 100644 --- a/unittest/gunit/keyring_vault/vault_io-t.cc +++ b/unittest/gunit/keyring_vault/vault_io-t.cc @@ -9,6 +9,7 @@ #include "generate_credential_file.h" #include "uuid.h" #include "vault_mount.h" +#include "test_utils.h" #if defined(HAVE_PSI_INTERFACE) namespace keyring @@ -55,6 +56,8 @@ namespace keyring__vault_io_unittest std::string credential_file_name("./some_funny_name"); Vault_io vault_io(logger, vault_curl, vault_parser); remove(credential_file_name.c_str()); + EXPECT_CALL(*(reinterpret_cast(logger)), + log(MY_ERROR_LEVEL, StrEq("File './some_funny_name' not found (Errcode: 2 - No such file or directory)"))); EXPECT_CALL(*(reinterpret_cast(logger)), log(MY_ERROR_LEVEL, StrEq("Could not open file with credentials."))); EXPECT_TRUE(vault_io.init(&credential_file_name)); @@ -605,6 +608,8 @@ namespace keyring__vault_io_unittest int main(int argc, char **argv) { ::testing::InitGoogleTest(&argc, argv); + MY_INIT(argv[0]); + my_testing::setup_server_for_unit_tests(); curl_global_init(CURL_GLOBAL_DEFAULT); //create unique secret mount point for this test suite @@ -641,5 +646,7 @@ int main(int argc, char **argv) { curl_easy_cleanup(keyring__vault_io_unittest::curl); curl_global_cleanup(); delete keyring__vault_io_unittest::logger; + my_testing::teardown_server_for_unit_tests(); + return ret; } diff --git a/unittest/gunit/keyring_vault/vault_keys_container-t.cc b/unittest/gunit/keyring_vault/vault_keys_container-t.cc index ec26f9080813..6d1dc4f6ad79 100644 --- a/unittest/gunit/keyring_vault/vault_keys_container-t.cc +++ b/unittest/gunit/keyring_vault/vault_keys_container-t.cc @@ -101,9 +101,8 @@ namespace keyring__vault_keys_container_unittest myfile.close(); IKeyring_io *vault_io = new Vault_io(logger, vault_curl, vault_parser); - EXPECT_CALL(*(reinterpret_cast(logger)), - log(MY_ERROR_LEVEL, StrEq("Could not read secret_mount_point from the configuration file."))); + log(MY_ERROR_LEVEL, StrEq("Empty file with credentials."))); EXPECT_TRUE(vault_keys_container->init(vault_io, "empty_credential.conf")); delete sample_key; // unused in this test From 29d7302ee4fd89f7e7a4a8837a2674e3bfef760d Mon Sep 17 00:00:00 2001 From: Przemek Skibinski Date: Thu, 11 Jan 2018 13:55:54 +0100 Subject: [PATCH 0373/1221] PS-302: Fix CMake compilation with -WITH_ZLIB=bundled Change ZLIB_INCLUDE_DIR type to a cache variable. It will prevent ZLIB_INCLUDE_DIR to be overwritten in the following scenario: MYSQL_CHECK_ZLIB_WITH_COMPRESS() FIND_PACKAGE(ZLIB REQUIRED) FIND_PACKAGE(ZLIB REQUIRED) --- cmake/zlib.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/zlib.cmake b/cmake/zlib.cmake index d1bd034db670..a2dc0b7184ac 100644 --- a/cmake/zlib.cmake +++ b/cmake/zlib.cmake @@ -15,7 +15,7 @@ MACRO (MYSQL_USE_BUNDLED_ZLIB) SET(ZLIB_LIBRARY zlib CACHE INTERNAL "Bundled zlib library") - SET(ZLIB_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/zlib) + SET(ZLIB_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/zlib CACHE STRING "Will not be redefined by FindZLIB") SET(ZLIB_FOUND TRUE) SET(WITH_ZLIB "bundled" CACHE STRING "Use bundled zlib") ADD_SUBDIRECTORY(zlib) From 2af9e8af6efba951e33e148d0b1a34beb25be831 Mon Sep 17 00:00:00 2001 From: Karthik Kamath Date: Thu, 11 Jan 2018 19:48:12 +0530 Subject: [PATCH 0374/1221] BUG#27160888: MISSING FILE PRIVILEDGE CHECKS ON SOME STATEMENTS ANALYSIS: ========= A user not having FILE privilege is not allowed to create custom data/index directories for a table or for its partitions via CREATE TABLE but is allowed to do so via ALTER TABLE statement. ALTER TABLE ignores DATA DIRECTORY and INDEX DIRECTORY when given as table options. The issue occurs during the creation of partitions for a table via ALTER TABLE statement with the DATA DIRECTORY and/or INDEX DIRECTORY options. The issue exists because of the absence of FILE privilege check for the user. FIX: ==== A FILE privilege check has been introduced for resolving the above scenario. --- sql/sql_alter.cc | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/sql/sql_alter.cc b/sql/sql_alter.cc index 6247d5818308..660efe2d1777 100644 --- a/sql/sql_alter.cc +++ b/sql/sql_alter.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -18,6 +18,8 @@ // mysql_exchange_partition #include "sql_alter.h" +bool has_external_data_or_index_dir(partition_info &pi); + bool Alter_table_statement::execute(THD *thd) { LEX *lex= thd->lex; @@ -42,6 +44,16 @@ bool Alter_table_statement::execute(THD *thd) if (thd->is_fatal_error) /* out of memory creating a copy of alter_info */ DBUG_RETURN(TRUE); + +#ifdef WITH_PARTITION_STORAGE_ENGINE + { + partition_info *part_info= thd->lex->part_info; + if (part_info != NULL && has_external_data_or_index_dir(*part_info) && + check_access(thd, FILE_ACL, any_db, NULL, NULL, FALSE, FALSE)) + + DBUG_RETURN(TRUE); + } +#endif /* We also require DROP priv for ALTER TABLE ... DROP PARTITION, as well as for RENAME TO, as being done by SQLCOM_RENAME_TABLE From b6ecf33a274af327824cb167170849bfa73bee99 Mon Sep 17 00:00:00 2001 From: Venkatesh Venugopal Date: Fri, 12 Jan 2018 10:20:52 +0530 Subject: [PATCH 0375/1221] Bug #26680035: CREATE/ALTER USER ERRORS OUT BUT GETS RECORDED IN THE BINARY LOG Problem: -------- Create/Alter user commands having an 'IF [NOT] EXISTS' clause are written to the binary log even in case of errors. Analysis: --------- Before writing to binary log, there was no check whether the query resulted in error or not. As a result, in case of errors, the query was still written to binary log. Fix: ---- The fix checks whether the query resulted in error or not and in case of errors, the above statements are not written to binary log. --- .../binlog/r/binlog_user_if_exists.result | 58 ++++++++++ .../suite/binlog/t/binlog_user_if_exists.test | 106 ++++++++++++++++++ sql/auth/sql_user.cc | 6 +- 3 files changed, 167 insertions(+), 3 deletions(-) diff --git a/mysql-test/suite/binlog/r/binlog_user_if_exists.result b/mysql-test/suite/binlog/r/binlog_user_if_exists.result index 4887c9a8f25c..c9df21f13175 100644 --- a/mysql-test/suite/binlog/r/binlog_user_if_exists.result +++ b/mysql-test/suite/binlog/r/binlog_user_if_exists.result @@ -159,6 +159,64 @@ slave-bin.000001 # Query # # use `test`; CREATE USER IF NOT EXISTS 'u1'@'localho slave-bin.000001 # Query # # use `test`; ALTER USER IF EXISTS 'u1'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*52BA180A884483D54A3CEB45FB50D4E5B8071399' slave-bin.000001 # Query # # use `test`; ALTER USER IF EXISTS 'u2_not_exists'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*53ED7183CBBC6D9995663DD96EFFA60E2CE2C96E' slave-bin.000001 # Query # # use `test`; DROP USER u1@localhost +# +# Bug26680035: CREATE/ALTER USER ERRORS OUT BUT GETS RECORDED IN +# THE BINARY LOG +# +call mtr.add_suppression("Following users were specified in CREATE USER IF NOT EXISTS but they already exist. *"); +# ------ +"Scenario 1: CREATE USER WITH INVALID PLUGIN" +# ------ +# +# Step 1.1) Create user with invalid plugin. +# +CREATE USER u1@localhost IDENTIFIED WITH 'plugin1'; +ERROR HY000: Plugin 'plugin1' is not loaded +# +# Step 1.2) Create user having 'if not exists' clause with invalid +# plugin. +# +CREATE USER IF NOT EXISTS u1@localhost IDENTIFIED WITH 'plugin2'; +ERROR HY000: Plugin 'plugin2' is not loaded +include/assert.inc [assert that the above events are not written to binlog] +# ------ +"Scenario 2: ALTER USER WITH INVALID PLUGIN" +# ------ +CREATE USER u2@localhost; +# +# Step 2.1) Alter user with invalid plugin. +# +ALTER USER u2@localhost IDENTIFIED WITH 'plugin3'; +ERROR HY000: Plugin 'plugin3' is not loaded +# +# Step 2.2) Alter user having 'if exists' clause with invalid plugin. +# +ALTER USER IF EXISTS u2@localhost IDENTIFIED WITH 'plugin4'; +ERROR HY000: Plugin 'plugin4' is not loaded +include/assert.inc [assert that the above events are not written to binlog] +# ------ +"Scenario 3: CREATE/ALTER USER INVALID PLUGIN WITH MULTIPLE USERS" +# ------ +# +# Step 3) Create/Alter user having multiple users with invalid plugin. +# +CREATE USER IF NOT EXISTS u1@localhost IDENTIFIED WITH 'shsh', +u2@localhost IDENTIFIED BY 'pass', +u3@localhost IDENTIFIED WITH 'sha256_password'; +ERROR HY000: Plugin 'shsh' is not loaded +ALTER USER IF EXISTS u1@localhost IDENTIFIED WITH 'shsh', +u2@localhost IDENTIFIED BY 'xyz', +u3@localhost IDENTIFIED WITH 'sha256_password'; +ERROR HY000: Plugin 'shsh' is not loaded +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +slave-bin.000001 # Query # # use `test`; CREATE USER 'u2'@'localhost' IDENTIFIED WITH 'mysql_native_password' +slave-bin.000001 # Query # # use `test`; CREATE USER IF NOT EXISTS 'u1'@'localhost' IDENTIFIED WITH 'shsh','u2'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*196BDEDE2AE4F84CA44C47D54D78478C7E2BD7B7','u3'@'localhost' IDENTIFIED WITH 'sha256_password' +slave-bin.000001 # Query # # use `test`; ALTER USER IF EXISTS 'u1'@'localhost' IDENTIFIED WITH 'shsh','u2'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*39C549BDECFBA8AFC3CE6B948C9359A0ECE08DE2','u3'@'localhost' IDENTIFIED WITH 'sha256_password' +# +# Step 4) Cleanup +# +DROP USER u2@localhost,u3@localhost; # Search warnings in the server log include/rpl_end.inc diff --git a/mysql-test/suite/binlog/t/binlog_user_if_exists.test b/mysql-test/suite/binlog/t/binlog_user_if_exists.test index 6fbb44b1b64c..5398ed99a88b 100644 --- a/mysql-test/suite/binlog/t/binlog_user_if_exists.test +++ b/mysql-test/suite/binlog/t/binlog_user_if_exists.test @@ -132,6 +132,112 @@ DROP USER u1@localhost; --echo [On Slave] --source include/show_binlog_events.inc +################################################################################ +# Bug#26680035 CREATE/ALTER USER ERRORS OUT BUT GETS RECORDED IN THE BINARY LOG +# +# Problem: create/alter user when used with invalid plugin errors out, +# but still gets recorded in binary log. +# +# Steps to reproduce: +# 1) Scenario 1: +# 1.1) Create user with invalid plugin. +# 1.2) Create user having 'if not exists' clause with invalid plugin. +# 2) Scenario 2: +# 2.1) Alter user with invalid plugin. +# 2.2) Alter user having 'if exists' clause with invalid plugin. +# 3) Create/Alter user having multiple users with invalid plugin. +# 4) Cleanup +################################################################################ +--echo # +--echo # Bug26680035: CREATE/ALTER USER ERRORS OUT BUT GETS RECORDED IN +--echo # THE BINARY LOG +--echo # +call mtr.add_suppression("Following users were specified in CREATE USER IF NOT EXISTS but they already exist. *"); + +# Scenario 1: Create user with invalid plugin +--echo # ------ +--echo "Scenario 1: CREATE USER WITH INVALID PLUGIN" +--echo # ------ + +--let $master_pos_before_create_user= query_get_value(SHOW MASTER STATUS,Position,1) +--let $binlog_start= $master_pos_before_create_user +--echo # +--echo # Step 1.1) Create user with invalid plugin. +--echo # +--error ER_PLUGIN_IS_NOT_LOADED +CREATE USER u1@localhost IDENTIFIED WITH 'plugin1'; + +--echo # +--echo # Step 1.2) Create user having 'if not exists' clause with invalid +--echo # plugin. +--echo # +--error ER_PLUGIN_IS_NOT_LOADED +CREATE USER IF NOT EXISTS u1@localhost IDENTIFIED WITH 'plugin2'; + +# Assert that the above statements are not written to binlog. +--let $master_pos_after_create_user= query_get_value(SHOW MASTER STATUS,Position,1) +--let $assert_text= assert that the above events are not written to binlog +--let $assert_cond= $master_pos_before_create_user = $master_pos_after_create_user +--source include/assert.inc + + +# Scenario 2: Alter user with invalid plugin +--echo # ------ +--echo "Scenario 2: ALTER USER WITH INVALID PLUGIN" +--echo # ------ + +CREATE USER u2@localhost; +--let $master_pos_before_alter_user= query_get_value(SHOW MASTER STATUS,Position,1) +--echo # +--echo # Step 2.1) Alter user with invalid plugin. +--echo # +--error ER_PLUGIN_IS_NOT_LOADED +ALTER USER u2@localhost IDENTIFIED WITH 'plugin3'; + +--echo # +--echo # Step 2.2) Alter user having 'if exists' clause with invalid plugin. +--echo # +--error ER_PLUGIN_IS_NOT_LOADED +ALTER USER IF EXISTS u2@localhost IDENTIFIED WITH 'plugin4'; + +# Assert that the above statements are not written to binlog. +--let $master_pos_after_alter_user= query_get_value(SHOW MASTER STATUS,Position,1) +--let $assert_text= assert that the above events are not written to binlog +--let $assert_cond= $master_pos_before_alter_user = $master_pos_after_alter_user +--source include/assert.inc + + +# Scenario 3: Create/Alter user with invalid plugin with multiple users +--echo # ------ +--echo "Scenario 3: CREATE/ALTER USER INVALID PLUGIN WITH MULTIPLE USERS" +--echo # ------ + +--echo # +--echo # Step 3) Create/Alter user having multiple users with invalid plugin. +--echo # + +# CREATE throws ERROR since shsh auth_plugin does not exist +# but will be written to binlog as,u2 already exists and u3 will be created. +--error ER_PLUGIN_IS_NOT_LOADED +CREATE USER IF NOT EXISTS u1@localhost IDENTIFIED WITH 'shsh', + u2@localhost IDENTIFIED BY 'pass', + u3@localhost IDENTIFIED WITH 'sha256_password'; + +# ALTER throws ERROR since shsh auth_plugin does not exist +# but will be written to binlog as, u2 is altered. +--error ER_PLUGIN_IS_NOT_LOADED +ALTER USER IF EXISTS u1@localhost IDENTIFIED WITH 'shsh', + u2@localhost IDENTIFIED BY 'xyz', + u3@localhost IDENTIFIED WITH 'sha256_password'; + +# Check whether the above statements are written to binlog or not. +--source include/show_binlog_events.inc + +--echo # +--echo # Step 4) Cleanup +--echo # +DROP USER u2@localhost,u3@localhost; + # Search for the warnings in the server log let server_log= $MYSQLTEST_VARDIR/log/mysqld.1.err; let SEARCH_FILE= $server_log; diff --git a/sql/auth/sql_user.cc b/sql/auth/sql_user.cc index dae8a27579cf..3c813c82f88f 100644 --- a/sql/auth/sql_user.cc +++ b/sql/auth/sql_user.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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. @@ -1463,7 +1463,7 @@ bool mysql_create_user(THD *thd, List &list, bool if_not_exists) my_error(ER_CANNOT_USER, MYF(0), "CREATE USER", wrong_users.c_ptr_safe()); } - if (some_users_created || if_not_exists) + if (some_users_created || (if_not_exists && !thd->is_error())) { String *rlb= &thd->rewritten_query; rlb->mem_free(); @@ -1947,7 +1947,7 @@ bool mysql_alter_user(THD *thd, List &list, bool if_exists) my_error(ER_CANNOT_USER, MYF(0), "ALTER USER", wrong_users.c_ptr_safe()); } - if (some_user_altered || if_exists) + if (some_user_altered || (if_exists && !thd->is_error())) { /* do query rewrite for ALTER USER */ String *rlb= &thd->rewritten_query; From 094c2c2e21b07c416c4e996f696d0f5a84f89917 Mon Sep 17 00:00:00 2001 From: Maria Couceiro Date: Thu, 4 Jan 2018 17:42:37 +0000 Subject: [PATCH 0376/1221] BUG#25873029 HEAP-USE-AFTER-FREE IN RPL.RPL_JSON, RPL.RPL_VIRTUAL_GCOL Problem: The tests rpl_json and rpl_virtual_column failed with the condition heap-use-after-free when ran using valgrind or ASAN. Analysis: When updating virtual generated columns that are BLOBs, some storage engines require that we have both the old and new BLOB value for virtual generated columns during updates. The same applies to JSON and GEOMETRY fields, as they are also neither stored in the record buffers, nor stored by the storage engine. Fix: This patch extends to all BLOB based types (namely, JSON and GEOMETRY) the behavior that was already implemented for BLOBs to prevent this issue: when updating read or write generated fields and also when the slave unpacks a row, store the previous field value so that it can be accessed later. --- .../suite/rpl/r/rpl_virtual_gcol.result | 42 ++++++++- mysql-test/suite/rpl/t/rpl_virtual_gcol.test | 94 ++++++++++++++++--- sql/rpl_record.cc | 14 +-- sql/table.cc | 8 +- 4 files changed, 135 insertions(+), 23 deletions(-) diff --git a/mysql-test/suite/rpl/r/rpl_virtual_gcol.result b/mysql-test/suite/rpl/r/rpl_virtual_gcol.result index b59bc265c67c..bec8cb5f7c96 100644 --- a/mysql-test/suite/rpl/r/rpl_virtual_gcol.result +++ b/mysql-test/suite/rpl/r/rpl_virtual_gcol.result @@ -50,7 +50,6 @@ INSERT INTO gtable(doc) VALUES (NULL); UPDATE gtable SET doc = 'POINT(4 4)' where doc IS NULL; UPDATE gtable SET doc = NULL WHERE ST_X(ST_GEOMFROMTEXT(doc)) = 4; include/sync_slave_sql_with_master.inc -# Cleanup [connection master] DROP TABLE gtable; include/sync_slave_sql_with_master.inc @@ -65,5 +64,46 @@ include/sync_slave_sql_with_master.inc [connection master] DROP TABLE gtable; include/sync_slave_sql_with_master.inc +[connection master] +CREATE TABLE gtable(geo GEOMETRY, gcol GEOMETRY AS (GEOMETRYCOLLECTION(geo, geo))); +INSERT INTO gtable (geo) VALUES (POINT(1, 1)); +include/sync_slave_sql_with_master.inc +[connection master] +UPDATE gtable SET geo = LINESTRING(POINT(1, 1), POINT(2, 2)); +include/sync_slave_sql_with_master.inc +[connection master] +DROP TABLE gtable; +include/sync_slave_sql_with_master.inc +SET @slave_parallel_type_saved= @@GLOBAL.SLAVE_PARALLEL_TYPE; +SET @slave_parallel_workers_saved= @@GLOBAL.SLAVE_PARALLEL_WORKERS; +SET @slave_preserver_commit_order_saved= @@GLOBAL.SLAVE_PRESERVE_COMMIT_ORDER; +include/stop_slave.inc +SET GLOBAL slave_parallel_type= 'LOGICAL_CLOCK'; +SET GLOBAL slave_parallel_workers= 4; +SET GLOBAL slave_preserve_commit_order= ON; +include/start_slave.inc +CALL mtr.add_suppression("This version of MySQL doesn't yet support 'sorting of non-scalar JSON values'"); +[connection master] +CREATE TABLE gtable(id INT, jd JSON, td TEXT, +gcol JSON AS (JSON_OBJECT(id,jd,JSON_KEYS(jd),td))); +INSERT INTO gtable(id,jd,td) VALUES(100, '{"a":1}', 'characters'); +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:gtable, slave:gtable] +[connection master] +UPDATE gtable SET jd = JSON_REPLACE(jd, '$[0].a',"a"); +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:gtable, slave:gtable] +[connection master] +UPDATE gtable SET jd= JSON_SET(jd, '$.key', '["h","e","l","l","o"]'); +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:gtable, slave:gtable] +[connection master] +DROP TABLE gtable; +include/sync_slave_sql_with_master.inc SET @@global.slave_rows_search_algorithms= @saved_slave_rows_search_algorithms; +include/stop_slave.inc +SET @@GLOBAL.SLAVE_PARALLEL_TYPE= @slave_parallel_type_saved; +SET @@GLOBAL.SLAVE_PARALLEL_WORKERS= @slave_parallel_workers_saved; +SET @@GLOBAL.SLAVE_PRESERVE_COMMIT_ORDER= @slave_preserver_commit_order_saved; +include/start_slave.inc include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_virtual_gcol.test b/mysql-test/suite/rpl/t/rpl_virtual_gcol.test index 3e214b50116c..3716f3617ba4 100644 --- a/mysql-test/suite/rpl/t/rpl_virtual_gcol.test +++ b/mysql-test/suite/rpl/t/rpl_virtual_gcol.test @@ -2,18 +2,15 @@ # ==== Purpose ==== # # The test checks if different operations on rows with generated fields as json, -# geometry and double are completed without errors when -# slave_rows_search_algorithms uses hash scan. +# geometry, double and json using json function are completed without errors or +# memory leaks when slave_rows_search_algorithms uses hash scan. # # ==== References ==== # # BUG#26280724 ASSERT FAILURE WHEN REPLICATING TABLE WITH VIRTUAL JSON COLUMN +# BUG#25873029 HEAP-USE-AFTER-FREE IN RPL.RPL_JSON, RPL.RPL_VIRTUAL_GCOL # -# test disabled in valgrind and ASAN due to BUG#25873029 ---source include/not_valgrind.inc ---source include/not_asan.inc - --source include/have_binlog_format_row.inc --source include/master-slave.inc @@ -33,7 +30,7 @@ ALTER TABLE gtable ADD COLUMN gtext JSON GENERATED ALWAYS AS (JSON_EXTRACT(doc, '$.name')) VIRTUAL; --source include/sync_slave_sql_with_master.inc -# update one of the rows +# Update one of the rows --source include/rpl_connection_master.inc UPDATE gtable SET doc = JSON_SET(doc, '$.name', 'abcd lmnopqrstuvxz') @@ -54,7 +51,7 @@ UPDATE gtable SET doc = '{ "id": 4, "name": "abc aba" }' where doc IS NULL; UPDATE gtable SET doc = NULL WHERE JSON_EXTRACT(doc, '$.id') = 4; --source include/sync_slave_sql_with_master.inc -# cleanup +# Cleanup --source include/rpl_connection_master.inc DROP TABLE gtable; --source include/sync_slave_sql_with_master.inc @@ -71,7 +68,7 @@ INSERT INTO gtable(id, doc) VALUES(10, '{"a": 1}'); UPDATE gtable SET doc = JSON_REPLACE(gcol, '$[0].a',"a"); --source include/sync_slave_sql_with_master.inc -# cleanup +# Cleanup --source include/rpl_connection_master.inc DROP TABLE gtable; --source include/sync_slave_sql_with_master.inc @@ -91,7 +88,7 @@ UPDATE gtable SET doc = 'POINT(4 4)' where doc IS NULL; UPDATE gtable SET doc = NULL WHERE ST_X(ST_GEOMFROMTEXT(doc)) = 4; --source include/sync_slave_sql_with_master.inc ---echo # Cleanup +# Cleanup --source include/rpl_connection_master.inc DROP TABLE gtable; --source include/sync_slave_sql_with_master.inc @@ -109,9 +106,84 @@ INSERT INTO gtable (a) VALUES (1); UPDATE gtable SET a= 2; --source include/sync_slave_sql_with_master.inc -# cleanup +# Cleanup +--source include/rpl_connection_master.inc +DROP TABLE gtable; +--source include/sync_slave_sql_with_master.inc + +# +# Generated column as geometry using a geometry function that reads from another +# geometry object +# +--source include/rpl_connection_master.inc +CREATE TABLE gtable(geo GEOMETRY, gcol GEOMETRY AS (GEOMETRYCOLLECTION(geo, geo))); +INSERT INTO gtable (geo) VALUES (POINT(1, 1)); +--source include/sync_slave_sql_with_master.inc + +--source include/rpl_connection_master.inc +UPDATE gtable SET geo = LINESTRING(POINT(1, 1), POINT(2, 2)); +--source include/sync_slave_sql_with_master.inc + +# Cleanup +--source include/rpl_connection_master.inc +DROP TABLE gtable; +--source include/sync_slave_sql_with_master.inc + +# +# Generated column as a JSON using JSON function that reads from another JSON +# object +# + +# Save defaults and setup mts +SET @slave_parallel_type_saved= @@GLOBAL.SLAVE_PARALLEL_TYPE; +SET @slave_parallel_workers_saved= @@GLOBAL.SLAVE_PARALLEL_WORKERS; +SET @slave_preserver_commit_order_saved= @@GLOBAL.SLAVE_PRESERVE_COMMIT_ORDER; +--source include/stop_slave.inc +SET GLOBAL slave_parallel_type= 'LOGICAL_CLOCK'; +SET GLOBAL slave_parallel_workers= 4; +SET GLOBAL slave_preserve_commit_order= ON; +--source include/start_slave.inc +CALL mtr.add_suppression("This version of MySQL doesn't yet support 'sorting of non-scalar JSON values'"); + +--source include/rpl_connection_master.inc +CREATE TABLE gtable(id INT, jd JSON, td TEXT, + gcol JSON AS (JSON_OBJECT(id,jd,JSON_KEYS(jd),td))); +INSERT INTO gtable(id,jd,td) VALUES(100, '{"a":1}', 'characters'); +--source include/sync_slave_sql_with_master.inc + +# Warnings are disabled so that the warning regarding the lack of support for +# the sorting of non-scalar JSON values is not printed +--disable_warnings +--let diff_tables=master:gtable, slave:gtable +--source include/diff_tables.inc +--enable_warnings + +--source include/rpl_connection_master.inc +UPDATE gtable SET jd = JSON_REPLACE(jd, '$[0].a',"a"); +--source include/sync_slave_sql_with_master.inc + +--disable_warnings +--let diff_tables=master:gtable, slave:gtable +--source include/diff_tables.inc +--enable_warnings + +--source include/rpl_connection_master.inc +UPDATE gtable SET jd= JSON_SET(jd, '$.key', '["h","e","l","l","o"]'); +--source include/sync_slave_sql_with_master.inc + +--disable_warnings +--let diff_tables=master:gtable, slave:gtable +--source include/diff_tables.inc +--enable_warnings + +# Cleanup --source include/rpl_connection_master.inc DROP TABLE gtable; --source include/sync_slave_sql_with_master.inc SET @@global.slave_rows_search_algorithms= @saved_slave_rows_search_algorithms; +--source include/stop_slave.inc +SET @@GLOBAL.SLAVE_PARALLEL_TYPE= @slave_parallel_type_saved; +SET @@GLOBAL.SLAVE_PARALLEL_WORKERS= @slave_parallel_workers_saved; +SET @@GLOBAL.SLAVE_PRESERVE_COMMIT_ORDER= @slave_preserver_commit_order_saved; +--source include/start_slave.inc --source include/rpl_end.inc diff --git a/sql/rpl_record.cc b/sql/rpl_record.cc index 0574cb7483fc..c70b40a60a17 100644 --- a/sql/rpl_record.cc +++ b/sql/rpl_record.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2007, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -350,18 +350,18 @@ unpack_row(Relay_log_info const *rli, DBUG_RETURN(ER_SLAVE_CORRUPT_EVENT); } /* - For a virtual generated column of blob type, we have to keep - both the old and new value for the blob since this might be + For a virtual generated column based on the blob type, we have to keep + both the old and new value for the field since this might be needed by the storage engine during updates. The reason why this needs special handling is that the virtual - generated blobs are neither stored in the record buffers nor - stored by the storage engine. This special handling for blobs - is normally taken care of in update_generated_write_fields() + generated blob-based fields are neither stored in the record buffers + nor stored by the storage engine. This special handling for blob-based + fields is normally taken care of in update_generated_write_fields() but this function is not called when applying updated records in replication. */ - if (f->type() == MYSQL_TYPE_BLOB && f->is_virtual_gcol()) + if ((f->flags & BLOB_FLAG) != 0 && f->is_virtual_gcol()) (down_cast(f))->keep_old_value(); pack_ptr= f->unpack(f->ptr, pack_ptr, metadata, TRUE); DBUG_PRINT("debug", ("Unpacked; metadata: 0x%x;" diff --git a/sql/table.cc b/sql/table.cc index f4d3c7797052..773a3201e483 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -7755,7 +7755,7 @@ bool update_generated_read_fields(uchar *buf, TABLE *table, uint active_index) if (!vfield->stored_in_db && bitmap_is_set(table->read_set, vfield->field_index)) { - if (vfield->type() == MYSQL_TYPE_BLOB) + if ((vfield->flags & BLOB_FLAG) != 0) { (down_cast(vfield))->keep_old_value(); (down_cast(vfield))->set_keep_old_value(true); @@ -7829,11 +7829,11 @@ bool update_generated_write_fields(const MY_BITMAP *bitmap, TABLE *table) if (bitmap_is_set(bitmap, vfield->field_index)) { /* - For a virtual generated column of blob type, we have to keep + For a virtual generated column based on the blob type, we have to keep the current blob value since this might be needed by the storage engine during updates. */ - if (vfield->type() == MYSQL_TYPE_BLOB && vfield->is_virtual_gcol()) + if ((vfield->flags & BLOB_FLAG) != 0 && vfield->is_virtual_gcol()) { (down_cast(vfield))->keep_old_value(); (down_cast(vfield))->set_keep_old_value(true); From 21680b345548759930a8bca913a424376e2b107d Mon Sep 17 00:00:00 2001 From: Dima Date: Tue, 9 Jan 2018 02:18:12 +0300 Subject: [PATCH 0377/1221] Fixed DOC-668 by further documenting encryption of binlog and relay logs. Also fixes DOC-674 (mysqlbinlog decryption limitations) --- .../management/data_at_rest_encryption.rst | 58 +++++++++++++------ 1 file changed, 40 insertions(+), 18 deletions(-) diff --git a/doc/source/management/data_at_rest_encryption.rst b/doc/source/management/data_at_rest_encryption.rst index 69697c8082ae..b9943bb42135 100644 --- a/doc/source/management/data_at_rest_encryption.rst +++ b/doc/source/management/data_at_rest_encryption.rst @@ -80,6 +80,46 @@ Trying to add unencrypted table to this table space will result in an error: |Percona XtraBackup| currently doesn't support backup of encrypted general tablespaces. +Binary log encryption +===================== + +A new option, implemented since |Percona Server| :rn:`5.7.20-19`, is +encryption of binary and relay logs, triggered by the +:variable:`encrypt_binlog` variable. + +Besides turning :variable:`encrypt_binlog` ``ON``, this feature requires both +`master_verify_checksum +`_ +and `binlog_checksum +`_ +variables to be turned ``ON``. + +While replicating, master sends the stream of decrypted binary log events to a +slave (SSL connections can be set up to encrypt them in transport). That said, +masters and slaves use separate keyring storages and are free to use differing +keyring plugins. + +Dumping of encrypted binary logs involves decryption, and can be done using +``mysqlbinlog`` with ``--read-from-remote-server`` option. + +.. note:: Taking into account that ``--read-from-remote-server`` option is only + relevant to binary logs, encrypted relay logs can not be dumped/decrypted + in this way. + +System Variables +---------------- + +.. variable:: encrypt_binlog + + :version 5.7.20-19: Implemented + :cli: ``--encrypt-binlog`` + :dyn: No + :scope: Global + :vartype: Boolean + :default: ``OFF`` + +The variable turns on binary and relay logs encryption. + .. _keyring_vault_plugin: Keyring Vault plugin @@ -184,24 +224,6 @@ System Variables This variable is used to define the location of the :ref:`keyring_vault_plugin` configuration file. -.. variable:: encrypt_binlog - - :version 5.7.20-19: Implemented - :cli: ``--encrypt-binlog`` - :dyn: No - :scope: Global - :vartype: Boolean - :default: ``OFF`` - -This variable turns on binary and relay logs -encryption. It requires both -`master_verify_checksum -`_ -and `binlog_checksum -`_ -variables to be turned ``ON``. - - Other reading ------------- From 745c07b649500cb05cb15a88bcec425e8cb74dee Mon Sep 17 00:00:00 2001 From: Marek Szymczak Date: Sat, 13 Jan 2018 00:03:48 +0100 Subject: [PATCH 0378/1221] Bug#27008133 MY_MESSAGE CAUSES SERVER CRASH WHEN HANDLING MYSQL_AUDIT_GENERAL_RESULT EVENT Post-push fix: audit_plugin_2 test fixed. audit_null test suite created for audit_null plugin tests. --- mysql-test/collections/default.push | 2 +- .../audit_null}/r/audit_plugin.result | 0 .../audit_null}/r/audit_plugin_2.result | 65 --------- .../audit_null}/r/audit_plugin_bugs.result | 0 .../audit_null/r/general_error_abort.result | 31 ++++ .../r/general_error_abort_ps.result | 76 ++++++++++ .../audit_null/r/general_log_abort.result | 32 +++++ .../audit_null/r/general_log_abort_ps.result | 102 +++++++++++++ .../audit_null}/t/audit_plugin-master.opt | 0 .../audit_null}/t/audit_plugin.test | 0 .../audit_null}/t/audit_plugin_2-master.opt | 0 .../audit_null}/t/audit_plugin_2.test | 67 --------- .../t/audit_plugin_bugs-master.opt | 0 .../audit_null}/t/audit_plugin_bugs.test | 0 .../t/general_error_abort-master.opt | 1 + .../audit_null/t/general_error_abort.test | 35 +++++ .../t/general_error_abort_ps-master.opt | 1 + .../audit_null/t/general_error_abort_ps.test | 84 +++++++++++ .../audit_null/t/general_log_abort-master.opt | 1 + .../suite/audit_null/t/general_log_abort.test | 30 ++++ .../t/general_log_abort_ps-master.opt | 1 + .../audit_null/t/general_log_abort_ps.test | 136 ++++++++++++++++++ 22 files changed, 531 insertions(+), 133 deletions(-) rename mysql-test/{ => suite/audit_null}/r/audit_plugin.result (100%) rename mysql-test/{ => suite/audit_null}/r/audit_plugin_2.result (96%) rename mysql-test/{ => suite/audit_null}/r/audit_plugin_bugs.result (100%) create mode 100644 mysql-test/suite/audit_null/r/general_error_abort.result create mode 100644 mysql-test/suite/audit_null/r/general_error_abort_ps.result create mode 100644 mysql-test/suite/audit_null/r/general_log_abort.result create mode 100644 mysql-test/suite/audit_null/r/general_log_abort_ps.result rename mysql-test/{ => suite/audit_null}/t/audit_plugin-master.opt (100%) rename mysql-test/{ => suite/audit_null}/t/audit_plugin.test (100%) rename mysql-test/{ => suite/audit_null}/t/audit_plugin_2-master.opt (100%) rename mysql-test/{ => suite/audit_null}/t/audit_plugin_2.test (96%) rename mysql-test/{ => suite/audit_null}/t/audit_plugin_bugs-master.opt (100%) rename mysql-test/{ => suite/audit_null}/t/audit_plugin_bugs.test (100%) create mode 100644 mysql-test/suite/audit_null/t/general_error_abort-master.opt create mode 100644 mysql-test/suite/audit_null/t/general_error_abort.test create mode 100644 mysql-test/suite/audit_null/t/general_error_abort_ps-master.opt create mode 100644 mysql-test/suite/audit_null/t/general_error_abort_ps.test create mode 100644 mysql-test/suite/audit_null/t/general_log_abort-master.opt create mode 100644 mysql-test/suite/audit_null/t/general_log_abort.test create mode 100644 mysql-test/suite/audit_null/t/general_log_abort_ps-master.opt create mode 100644 mysql-test/suite/audit_null/t/general_log_abort_ps.test diff --git a/mysql-test/collections/default.push b/mysql-test/collections/default.push index 0b14846ed3d1..df3322d4f80a 100644 --- a/mysql-test/collections/default.push +++ b/mysql-test/collections/default.push @@ -1,4 +1,4 @@ perl mysql-test-run.pl --timer --debug-server --force --parallel=auto --comment=n_mix-debug --vardir=var-n_mix --mysqld=--binlog-format=mixed --experimental=collections/default.experimental --skip-test-list=collections/disabled-per-push.list --unit-tests-report perl mysql-test-run.pl --timer --force --parallel=auto --comment=main_embedded-debug --vardir=var-main_embedded --suite=main --embedded --experimental=collections/default.experimental --skip-test-list=collections/disabled-per-push.list perl mysql-test-run.pl --timer --debug-server --force --parallel=auto --comment=innodb_4k_size-debug --vardir=var-innodb-4k --experimental=collections/default.experimental --suite=innodb --mysqld=--innodb-page-size=4k --skip-test-list=collections/disabled-per-push.list - +perl mysql-test-run.pl --timer --force --parallel=auto --comment=audit_null --vardir=var-audit_null --suite=audit_null --experimental=collections/default.experimental --skip-test-list=collections/disabled-per-push.list diff --git a/mysql-test/r/audit_plugin.result b/mysql-test/suite/audit_null/r/audit_plugin.result similarity index 100% rename from mysql-test/r/audit_plugin.result rename to mysql-test/suite/audit_null/r/audit_plugin.result diff --git a/mysql-test/r/audit_plugin_2.result b/mysql-test/suite/audit_null/r/audit_plugin_2.result similarity index 96% rename from mysql-test/r/audit_plugin_2.result rename to mysql-test/suite/audit_null/r/audit_plugin_2.result index 3bb4c717913b..aa8542b12ed2 100644 --- a/mysql-test/r/audit_plugin_2.result +++ b/mysql-test/suite/audit_null/r/audit_plugin_2.result @@ -2,7 +2,6 @@ call mtr.add_suppression("Event 'MYSQL_AUDIT_COMMAND_END' cannot be aborted."); call mtr.add_suppression("Event 'MYSQL_AUDIT_CONNECTION_DISCONNECT' cannot be aborted."); call mtr.add_suppression("Event 'MYSQL_AUDIT_GENERAL_RESULT' cannot be aborted."); call mtr.add_suppression("Event 'MYSQL_AUDIT_GENERAL_STATUS' cannot be aborted."); -call mtr.add_suppression("Event 'MYSQL_AUDIT_GENERAL_ERROR' cannot be aborted."); call mtr.add_suppression("Command 'Ping' cannot be aborted."); INSTALL PLUGIN null_audit SONAME 'adt_null.'; ################ @@ -40,39 +39,6 @@ SET @@GLOBAL.null_audit_event_order_check = NULL; ############# ## GENERAL ## ############# -####################### -## ABORT GENERAL LOG ## -####################### -SET @@null_audit_event_order_check_exact = ; -SET @@null_audit_event_order_check = 'MYSQL_AUDIT_COMMAND_START;command_id="";;' - 'MYSQL_AUDIT_PARSE_PREPARSE;;;' - 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' - 'MYSQL_AUDIT_GENERAL_LOG;;ABORT_RET'; -SELECT 1; -ERROR HY000: Aborted by Audit API ('MYSQL_AUDIT_GENERAL_LOG';1). -SELECT @@null_audit_event_order_check; -@@null_audit_event_order_check -EVENT-ORDER-ABORT -SELECT 1; -1 -1 -####################################### -## ABORT GENERAL LOG WITH MY_MESSAGE ## -####################################### -SET @@null_audit_abort_message = "Abort with my_message."; -SET @@null_audit_event_order_check_exact = ; -SET @@null_audit_event_order_check = 'MYSQL_AUDIT_COMMAND_START;command_id="";;' - 'MYSQL_AUDIT_PARSE_PREPARSE;;;' - 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' - 'MYSQL_AUDIT_GENERAL_LOG;;ABORT_RET'; -SELECT 1; -ERROR HY000: Abort with my_message. -SELECT @@null_audit_event_order_check; -@@null_audit_event_order_check -EVENT-ORDER-ABORT -SELECT 1; -1 -1 ########################## ## ABORT GENERAL RESULT ## ########################## @@ -145,37 +111,6 @@ SELECT 1; SELECT @@null_audit_event_order_check; @@null_audit_event_order_check EVENT-ORDER-ABORT -######################### -## ABORT GENERAL ERROR ## -######################### -SET @@null_audit_event_order_check_exact = ; -SET @@null_audit_event_order_check = 'MYSQL_AUDIT_COMMAND_START;command_id="";;' - 'MYSQL_AUDIT_PARSE_PREPARSE;;;' - 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' - 'MYSQL_AUDIT_GENERAL_LOG;;;' - 'MYSQL_AUDIT_QUERY_START;sql_command_id="0";;' - 'MYSQL_AUDIT_GENERAL_ERROR;;ABORT_RET'; -SELECT * FROM mysql.non_existing_table; -ERROR 42S02: Table 'mysql.non_existing_table' doesn't exist -SELECT @@null_audit_event_order_check; -@@null_audit_event_order_check -EVENT-ORDER-ABORT -######################################### -## ABORT GENERAL ERROR WITH MY_MESSAGE ## -######################################### -SET @@null_audit_abort_message = "Abort with my_message."; -SET @@null_audit_event_order_check_exact = ; -SET @@null_audit_event_order_check = 'MYSQL_AUDIT_COMMAND_START;command_id="";;' - 'MYSQL_AUDIT_PARSE_PREPARSE;;;' - 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' - 'MYSQL_AUDIT_GENERAL_LOG;;;' - 'MYSQL_AUDIT_QUERY_START;sql_command_id="0";;' - 'MYSQL_AUDIT_GENERAL_ERROR;;ABORT_RET'; -SELECT * FROM mysql.non_existing_table; -ERROR 42S02: Table 'mysql.non_existing_table' doesn't exist -SELECT @@null_audit_event_order_check; -@@null_audit_event_order_check -EVENT-ORDER-ABORT ########### ## QUERY ## ########### diff --git a/mysql-test/r/audit_plugin_bugs.result b/mysql-test/suite/audit_null/r/audit_plugin_bugs.result similarity index 100% rename from mysql-test/r/audit_plugin_bugs.result rename to mysql-test/suite/audit_null/r/audit_plugin_bugs.result diff --git a/mysql-test/suite/audit_null/r/general_error_abort.result b/mysql-test/suite/audit_null/r/general_error_abort.result new file mode 100644 index 000000000000..77bc7d4b9708 --- /dev/null +++ b/mysql-test/suite/audit_null/r/general_error_abort.result @@ -0,0 +1,31 @@ +call mtr.add_suppression("Event 'MYSQL_AUDIT_GENERAL_ERROR' cannot be aborted."); +INSTALL PLUGIN null_audit SONAME 'adt_null.so'; +SET @@null_audit_event_order_check = 'MYSQL_AUDIT_COMMAND_START;command_id="3";;' + 'MYSQL_AUDIT_PARSE_PREPARSE;;;' + 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' + 'MYSQL_AUDIT_GENERAL_LOG;;;' + 'MYSQL_AUDIT_QUERY_START;sql_command_id="0";;' + 'MYSQL_AUDIT_GENERAL_ERROR;;ABORT_RET'; +SELECT * FROM mysql.non_existing_table; +ERROR 42S02: Table 'mysql.non_existing_table' doesn't exist +SELECT @@null_audit_event_order_check; +@@null_audit_event_order_check +EVENT-ORDER-ABORT +####################################### +## ABORT GENERAL LOG WITH MY_MESSAGE ## +####################################### +SET @@null_audit_abort_message = "Abort with my_message."; +SET @@null_audit_event_order_check = 'MYSQL_AUDIT_COMMAND_START;command_id="3";;' + 'MYSQL_AUDIT_PARSE_PREPARSE;;;' + 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' + 'MYSQL_AUDIT_GENERAL_LOG;;;' + 'MYSQL_AUDIT_QUERY_START;sql_command_id="0";;' + 'MYSQL_AUDIT_GENERAL_ERROR;;ABORT_RET'; +SELECT * FROM mysql.non_existing_table; +ERROR 42S02: Table 'mysql.non_existing_table' doesn't exist +SELECT @@null_audit_event_order_check; +@@null_audit_event_order_check +EVENT-ORDER-ABORT +UNINSTALL PLUGIN null_audit; +Warnings: +Warning 1620 Plugin is busy and will be uninstalled on shutdown diff --git a/mysql-test/suite/audit_null/r/general_error_abort_ps.result b/mysql-test/suite/audit_null/r/general_error_abort_ps.result new file mode 100644 index 000000000000..ab5a34832d8b --- /dev/null +++ b/mysql-test/suite/audit_null/r/general_error_abort_ps.result @@ -0,0 +1,76 @@ +call mtr.add_suppression("Event 'MYSQL_AUDIT_GENERAL_ERROR' cannot be aborted."); +INSTALL PLUGIN null_audit SONAME 'adt_null.so'; +############# +## PREPARE ## +############# +SET @@null_audit_event_order_check = 'MYSQL_AUDIT_COMMAND_START;command_id="3";;' + 'MYSQL_AUDIT_PARSE_PREPARSE;;;' + 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' + 'MYSQL_AUDIT_GENERAL_LOG;;;' + 'MYSQL_AUDIT_QUERY_START;sql_command_id="99";;' + 'MYSQL_AUDIT_PARSE_PREPARSE;;;' + 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' + 'MYSQL_AUDIT_GENERAL_ERROR;;ABORT_RET'; +PREPARE stmt FROM 'SELECT * FROM mysql.non_existing_table'; +ERROR 42S02: Table 'mysql.non_existing_table' doesn't exist +SELECT @@null_audit_event_order_check; +@@null_audit_event_order_check +EVENT-ORDER-ABORT +############# +## EXECUTE ## +############# +CREATE TABLE test.test_table(a INT); +PREPARE stmt FROM 'SELECT * FROM test.test_table'; +DROP TABLE test.test_table; +SET @@null_audit_event_order_check = 'MYSQL_AUDIT_COMMAND_START;command_id="3";;' + 'MYSQL_AUDIT_PARSE_PREPARSE;;;' + 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' + 'MYSQL_AUDIT_GENERAL_LOG;;;' + 'MYSQL_AUDIT_QUERY_START;sql_command_id="100";;' + 'MYSQL_AUDIT_GENERAL_LOG;;;' + 'MYSQL_AUDIT_QUERY_START;sql_command_id="0";;' + 'MYSQL_AUDIT_GENERAL_ERROR;;ABORT_RET'; +EXECUTE stmt; +ERROR 42S02: Table 'test.test_table' doesn't exist +SELECT @@null_audit_event_order_check; +@@null_audit_event_order_check +EVENT-ORDER-ABORT +DROP PREPARE stmt; +####################################### +## ABORT GENERAL LOG WITH MY_MESSAGE ## +####################################### +SET @@null_audit_abort_message = "Abort with my_message."; +SET @@null_audit_event_order_check = 'MYSQL_AUDIT_COMMAND_START;command_id="3";;' + 'MYSQL_AUDIT_PARSE_PREPARSE;;;' + 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' + 'MYSQL_AUDIT_GENERAL_LOG;;;' + 'MYSQL_AUDIT_QUERY_START;sql_command_id="99";;' + 'MYSQL_AUDIT_PARSE_PREPARSE;;;' + 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' + 'MYSQL_AUDIT_GENERAL_ERROR;;ABORT_RET'; +PREPARE stmt FROM 'SELECT * FROM mysql.non_existing_table'; +ERROR 42S02: Table 'mysql.non_existing_table' doesn't exist +SELECT @@null_audit_event_order_check; +@@null_audit_event_order_check +EVENT-ORDER-ABORT +CREATE TABLE test.test_table(a INT); +PREPARE stmt FROM 'SELECT * FROM test.test_table'; +DROP TABLE test.test_table; +SET @@null_audit_abort_message = "Abort with my_message."; +SET @@null_audit_event_order_check = 'MYSQL_AUDIT_COMMAND_START;command_id="3";;' + 'MYSQL_AUDIT_PARSE_PREPARSE;;;' + 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' + 'MYSQL_AUDIT_GENERAL_LOG;;;' + 'MYSQL_AUDIT_QUERY_START;sql_command_id="100";;' + 'MYSQL_AUDIT_GENERAL_LOG;;;' + 'MYSQL_AUDIT_QUERY_START;sql_command_id="0";;' + 'MYSQL_AUDIT_GENERAL_ERROR;;ABORT_RET'; +EXECUTE stmt; +ERROR 42S02: Table 'test.test_table' doesn't exist +SELECT @@null_audit_event_order_check; +@@null_audit_event_order_check +EVENT-ORDER-ABORT +DROP PREPARE stmt; +UNINSTALL PLUGIN null_audit; +Warnings: +Warning 1620 Plugin is busy and will be uninstalled on shutdown diff --git a/mysql-test/suite/audit_null/r/general_log_abort.result b/mysql-test/suite/audit_null/r/general_log_abort.result new file mode 100644 index 000000000000..8bd3ef1cd261 --- /dev/null +++ b/mysql-test/suite/audit_null/r/general_log_abort.result @@ -0,0 +1,32 @@ +INSTALL PLUGIN null_audit SONAME 'adt_null.so'; +SET @@null_audit_event_order_check = 'MYSQL_AUDIT_COMMAND_START;command_id="3";;' + 'MYSQL_AUDIT_PARSE_PREPARSE;;;' + 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' + 'MYSQL_AUDIT_GENERAL_LOG;;ABORT_RET'; +SELECT 1; +ERROR HY000: Aborted by Audit API ('MYSQL_AUDIT_GENERAL_LOG';1). +SELECT @@null_audit_event_order_check; +@@null_audit_event_order_check +EVENT-ORDER-ABORT +SELECT 1; +1 +1 +####################################### +## ABORT GENERAL LOG WITH MY_MESSAGE ## +####################################### +SET @@null_audit_abort_message = "Abort with my_message."; +SET @@null_audit_event_order_check = 'MYSQL_AUDIT_COMMAND_START;command_id="3";;' + 'MYSQL_AUDIT_PARSE_PREPARSE;;;' + 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' + 'MYSQL_AUDIT_GENERAL_LOG;;ABORT_RET'; +SELECT 1; +ERROR HY000: Abort with my_message. +SELECT @@null_audit_event_order_check; +@@null_audit_event_order_check +EVENT-ORDER-ABORT +SELECT 1; +1 +1 +UNINSTALL PLUGIN null_audit; +Warnings: +Warning 1620 Plugin is busy and will be uninstalled on shutdown diff --git a/mysql-test/suite/audit_null/r/general_log_abort_ps.result b/mysql-test/suite/audit_null/r/general_log_abort_ps.result new file mode 100644 index 000000000000..d4553b74c650 --- /dev/null +++ b/mysql-test/suite/audit_null/r/general_log_abort_ps.result @@ -0,0 +1,102 @@ +INSTALL PLUGIN null_audit SONAME 'adt_null.so'; +############# +## PREPARE ## +############# +# Abort first MYSQL_AUDIT_GENERAL_LOG event +SET @@null_audit_event_order_check = 'MYSQL_AUDIT_COMMAND_START;command_id="3";;' + 'MYSQL_AUDIT_PARSE_PREPARSE;;;' + 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' + 'MYSQL_AUDIT_GENERAL_LOG;;ABORT_RET'; +PREPARE stmt FROM 'SELECT 1'; +ERROR HY000: Aborted by Audit API ('MYSQL_AUDIT_GENERAL_LOG';1). +SELECT @@null_audit_event_order_check; +@@null_audit_event_order_check +EVENT-ORDER-ABORT +EXECUTE stmt; +ERROR HY000: Unknown prepared statement handler (stmt) given to EXECUTE +# Abort second MYSQL_AUDIT_GENERAL_LOG event +SET @@null_audit_event_order_check = 'MYSQL_AUDIT_COMMAND_START;command_id="3";;' + 'MYSQL_AUDIT_PARSE_PREPARSE;;;' + 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' + 'MYSQL_AUDIT_GENERAL_LOG;;;' + 'MYSQL_AUDIT_QUERY_START;sql_command_id="99";;' + 'MYSQL_AUDIT_PARSE_PREPARSE;;;' + 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' + 'MYSQL_AUDIT_GENERAL_LOG;;ABORT_RET'; +PREPARE stmt FROM 'SELECT 1'; +ERROR HY000: Aborted by Audit API ('MYSQL_AUDIT_GENERAL_LOG';1). +SELECT @@null_audit_event_order_check; +@@null_audit_event_order_check +EVENT-ORDER-ABORT +EXECUTE stmt; +ERROR HY000: Unknown prepared statement handler (stmt) given to EXECUTE +####################################### +## ABORT GENERAL LOG WITH MY_MESSAGE ## +####################################### +# Abort first MYSQL_AUDIT_GENERAL_LOG event +SET @@null_audit_abort_message = "Abort with my_message."; +SET @@null_audit_event_order_check = 'MYSQL_AUDIT_COMMAND_START;command_id="3";;' + 'MYSQL_AUDIT_PARSE_PREPARSE;;;' + 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' + 'MYSQL_AUDIT_GENERAL_LOG;;ABORT_RET'; +PREPARE stmt FROM 'SELECT 1'; +ERROR HY000: Abort with my_message. +SELECT @@null_audit_event_order_check; +@@null_audit_event_order_check +EVENT-ORDER-ABORT +EXECUTE stmt; +ERROR HY000: Unknown prepared statement handler (stmt) given to EXECUTE +# Abort second MYSQL_AUDIT_GENERAL_LOG event +SET @@null_audit_abort_message = "Abort with my_message."; +SET @@null_audit_event_order_check = 'MYSQL_AUDIT_COMMAND_START;command_id="3";;' + 'MYSQL_AUDIT_PARSE_PREPARSE;;;' + 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' + 'MYSQL_AUDIT_GENERAL_LOG;;;' + 'MYSQL_AUDIT_QUERY_START;sql_command_id="99";;' + 'MYSQL_AUDIT_PARSE_PREPARSE;;;' + 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' + 'MYSQL_AUDIT_GENERAL_LOG;;ABORT_RET'; +PREPARE stmt FROM 'SELECT 1'; +ERROR HY000: Abort with my_message. +SELECT @@null_audit_event_order_check; +@@null_audit_event_order_check +EVENT-ORDER-ABORT +EXECUTE stmt; +ERROR HY000: Unknown prepared statement handler (stmt) given to EXECUTE +############# +## EXECUTE ## +############# +PREPARE stmt FROM 'SELECT 2'; +# Abort first MYSQL_AUDIT_GENERAL_LOG event +SET @@null_audit_event_order_check = 'MYSQL_AUDIT_COMMAND_START;command_id="3";;' + 'MYSQL_AUDIT_PARSE_PREPARSE;;;' + 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' + 'MYSQL_AUDIT_GENERAL_LOG;;ABORT_RET'; +EXECUTE stmt; +ERROR HY000: Aborted by Audit API ('MYSQL_AUDIT_GENERAL_LOG';1). +SELECT @@null_audit_event_order_check; +@@null_audit_event_order_check +EVENT-ORDER-ABORT +EXECUTE stmt; +2 +2 +####################################### +## ABORT GENERAL LOG WITH MY_MESSAGE ## +####################################### +# Abort first MYSQL_AUDIT_GENERAL_LOG event +SET @@null_audit_abort_message = "Abort with my_message."; +SET @@null_audit_event_order_check = 'MYSQL_AUDIT_COMMAND_START;command_id="3";;' + 'MYSQL_AUDIT_PARSE_PREPARSE;;;' + 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' + 'MYSQL_AUDIT_GENERAL_LOG;;ABORT_RET'; +EXECUTE stmt; +ERROR HY000: Abort with my_message. +SELECT @@null_audit_event_order_check; +@@null_audit_event_order_check +EVENT-ORDER-ABORT +EXECUTE stmt; +2 +2 +UNINSTALL PLUGIN null_audit; +Warnings: +Warning 1620 Plugin is busy and will be uninstalled on shutdown diff --git a/mysql-test/t/audit_plugin-master.opt b/mysql-test/suite/audit_null/t/audit_plugin-master.opt similarity index 100% rename from mysql-test/t/audit_plugin-master.opt rename to mysql-test/suite/audit_null/t/audit_plugin-master.opt diff --git a/mysql-test/t/audit_plugin.test b/mysql-test/suite/audit_null/t/audit_plugin.test similarity index 100% rename from mysql-test/t/audit_plugin.test rename to mysql-test/suite/audit_null/t/audit_plugin.test diff --git a/mysql-test/t/audit_plugin_2-master.opt b/mysql-test/suite/audit_null/t/audit_plugin_2-master.opt similarity index 100% rename from mysql-test/t/audit_plugin_2-master.opt rename to mysql-test/suite/audit_null/t/audit_plugin_2-master.opt diff --git a/mysql-test/t/audit_plugin_2.test b/mysql-test/suite/audit_null/t/audit_plugin_2.test similarity index 96% rename from mysql-test/t/audit_plugin_2.test rename to mysql-test/suite/audit_null/t/audit_plugin_2.test index 19e5c8b99857..78fbe8bc3251 100644 --- a/mysql-test/t/audit_plugin_2.test +++ b/mysql-test/suite/audit_null/t/audit_plugin_2.test @@ -5,7 +5,6 @@ call mtr.add_suppression("Event 'MYSQL_AUDIT_COMMAND_END' cannot be aborted."); call mtr.add_suppression("Event 'MYSQL_AUDIT_CONNECTION_DISCONNECT' cannot be aborted."); call mtr.add_suppression("Event 'MYSQL_AUDIT_GENERAL_RESULT' cannot be aborted."); call mtr.add_suppression("Event 'MYSQL_AUDIT_GENERAL_STATUS' cannot be aborted."); -call mtr.add_suppression("Event 'MYSQL_AUDIT_GENERAL_ERROR' cannot be aborted."); call mtr.add_suppression("Command 'Ping' cannot be aborted."); connection default; @@ -83,39 +82,6 @@ SET @@GLOBAL.null_audit_event_order_check = NULL; --echo ## GENERAL ## --echo ############# ---echo ####################### ---echo ## ABORT GENERAL LOG ## ---echo ####################### ---replace_result $event_order_exact -eval SET @@null_audit_event_order_check_exact = $event_order_exact; ---replace_result $command_start_id -eval SET @@null_audit_event_order_check = 'MYSQL_AUDIT_COMMAND_START;command_id="$command_start_id";;' - 'MYSQL_AUDIT_PARSE_PREPARSE;;;' - 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' - 'MYSQL_AUDIT_GENERAL_LOG;;ABORT_RET'; ---replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT ---error ER_AUDIT_API_ABORT -SELECT 1; -SELECT @@null_audit_event_order_check; -SELECT 1; - ---echo ####################################### ---echo ## ABORT GENERAL LOG WITH MY_MESSAGE ## ---echo ####################################### -SET @@null_audit_abort_message = "Abort with my_message."; ---replace_result $event_order_exact -eval SET @@null_audit_event_order_check_exact = $event_order_exact; ---replace_result $command_start_id -eval SET @@null_audit_event_order_check = 'MYSQL_AUDIT_COMMAND_START;command_id="$command_start_id";;' - 'MYSQL_AUDIT_PARSE_PREPARSE;;;' - 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' - 'MYSQL_AUDIT_GENERAL_LOG;;ABORT_RET'; ---replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT ---error ER_AUDIT_API_ABORT -SELECT 1; -SELECT @@null_audit_event_order_check; -SELECT 1; - --echo ########################## --echo ## ABORT GENERAL RESULT ## --echo ########################## @@ -184,39 +150,6 @@ eval SET @@null_audit_event_order_check = 'MYSQL_AUDIT_COMMAND_START;command_id= SELECT 1; SELECT @@null_audit_event_order_check; ---echo ######################### ---echo ## ABORT GENERAL ERROR ## ---echo ######################### ---replace_result $event_order_exact -eval SET @@null_audit_event_order_check_exact = $event_order_exact; ---replace_result $command_start_id -eval SET @@null_audit_event_order_check = 'MYSQL_AUDIT_COMMAND_START;command_id="3";;' - 'MYSQL_AUDIT_PARSE_PREPARSE;;;' - 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' - 'MYSQL_AUDIT_GENERAL_LOG;;;' - 'MYSQL_AUDIT_QUERY_START;sql_command_id="0";;' - 'MYSQL_AUDIT_GENERAL_ERROR;;ABORT_RET'; ---error ER_NO_SUCH_TABLE -SELECT * FROM mysql.non_existing_table; -SELECT @@null_audit_event_order_check; - ---echo ######################################### ---echo ## ABORT GENERAL ERROR WITH MY_MESSAGE ## ---echo ######################################### -SET @@null_audit_abort_message = "Abort with my_message."; ---replace_result $event_order_exact -eval SET @@null_audit_event_order_check_exact = $event_order_exact; ---replace_result $command_start_id -eval SET @@null_audit_event_order_check = 'MYSQL_AUDIT_COMMAND_START;command_id="3";;' - 'MYSQL_AUDIT_PARSE_PREPARSE;;;' - 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' - 'MYSQL_AUDIT_GENERAL_LOG;;;' - 'MYSQL_AUDIT_QUERY_START;sql_command_id="0";;' - 'MYSQL_AUDIT_GENERAL_ERROR;;ABORT_RET'; ---error ER_NO_SUCH_TABLE -SELECT * FROM mysql.non_existing_table; -SELECT @@null_audit_event_order_check; - --echo ########### --echo ## QUERY ## --echo ########### diff --git a/mysql-test/t/audit_plugin_bugs-master.opt b/mysql-test/suite/audit_null/t/audit_plugin_bugs-master.opt similarity index 100% rename from mysql-test/t/audit_plugin_bugs-master.opt rename to mysql-test/suite/audit_null/t/audit_plugin_bugs-master.opt diff --git a/mysql-test/t/audit_plugin_bugs.test b/mysql-test/suite/audit_null/t/audit_plugin_bugs.test similarity index 100% rename from mysql-test/t/audit_plugin_bugs.test rename to mysql-test/suite/audit_null/t/audit_plugin_bugs.test diff --git a/mysql-test/suite/audit_null/t/general_error_abort-master.opt b/mysql-test/suite/audit_null/t/general_error_abort-master.opt new file mode 100644 index 000000000000..bc88b4d7d915 --- /dev/null +++ b/mysql-test/suite/audit_null/t/general_error_abort-master.opt @@ -0,0 +1 @@ +$AUDIT_NULL_OPT \ No newline at end of file diff --git a/mysql-test/suite/audit_null/t/general_error_abort.test b/mysql-test/suite/audit_null/t/general_error_abort.test new file mode 100644 index 000000000000..719ee43351cd --- /dev/null +++ b/mysql-test/suite/audit_null/t/general_error_abort.test @@ -0,0 +1,35 @@ +--source include/have_null_audit_plugin.inc +--source include/not_embedded.inc +--source include/no_protocol.inc + +call mtr.add_suppression("Event 'MYSQL_AUDIT_GENERAL_ERROR' cannot be aborted."); + +--replace_regex /\.dll/.so/ +eval INSTALL PLUGIN null_audit SONAME '$AUDIT_NULL'; + +SET @@null_audit_event_order_check = 'MYSQL_AUDIT_COMMAND_START;command_id="3";;' + 'MYSQL_AUDIT_PARSE_PREPARSE;;;' + 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' + 'MYSQL_AUDIT_GENERAL_LOG;;;' + 'MYSQL_AUDIT_QUERY_START;sql_command_id="0";;' + 'MYSQL_AUDIT_GENERAL_ERROR;;ABORT_RET'; +--error ER_NO_SUCH_TABLE +SELECT * FROM mysql.non_existing_table; +SELECT @@null_audit_event_order_check; + +--echo ####################################### +--echo ## ABORT GENERAL LOG WITH MY_MESSAGE ## +--echo ####################################### + +SET @@null_audit_abort_message = "Abort with my_message."; +SET @@null_audit_event_order_check = 'MYSQL_AUDIT_COMMAND_START;command_id="3";;' + 'MYSQL_AUDIT_PARSE_PREPARSE;;;' + 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' + 'MYSQL_AUDIT_GENERAL_LOG;;;' + 'MYSQL_AUDIT_QUERY_START;sql_command_id="0";;' + 'MYSQL_AUDIT_GENERAL_ERROR;;ABORT_RET'; +--error ER_NO_SUCH_TABLE +SELECT * FROM mysql.non_existing_table; +SELECT @@null_audit_event_order_check; + +UNINSTALL PLUGIN null_audit; diff --git a/mysql-test/suite/audit_null/t/general_error_abort_ps-master.opt b/mysql-test/suite/audit_null/t/general_error_abort_ps-master.opt new file mode 100644 index 000000000000..bc88b4d7d915 --- /dev/null +++ b/mysql-test/suite/audit_null/t/general_error_abort_ps-master.opt @@ -0,0 +1 @@ +$AUDIT_NULL_OPT \ No newline at end of file diff --git a/mysql-test/suite/audit_null/t/general_error_abort_ps.test b/mysql-test/suite/audit_null/t/general_error_abort_ps.test new file mode 100644 index 000000000000..e9d1b96f02b6 --- /dev/null +++ b/mysql-test/suite/audit_null/t/general_error_abort_ps.test @@ -0,0 +1,84 @@ +--source include/have_null_audit_plugin.inc +--source include/not_embedded.inc +--source include/no_protocol.inc + +call mtr.add_suppression("Event 'MYSQL_AUDIT_GENERAL_ERROR' cannot be aborted."); + +--replace_regex /\.dll/.so/ +eval INSTALL PLUGIN null_audit SONAME '$AUDIT_NULL'; + +--echo ############# +--echo ## PREPARE ## +--echo ############# + +SET @@null_audit_event_order_check = 'MYSQL_AUDIT_COMMAND_START;command_id="3";;' + 'MYSQL_AUDIT_PARSE_PREPARSE;;;' + 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' + 'MYSQL_AUDIT_GENERAL_LOG;;;' + 'MYSQL_AUDIT_QUERY_START;sql_command_id="99";;' + 'MYSQL_AUDIT_PARSE_PREPARSE;;;' + 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' + 'MYSQL_AUDIT_GENERAL_ERROR;;ABORT_RET'; +--error ER_NO_SUCH_TABLE +PREPARE stmt FROM 'SELECT * FROM mysql.non_existing_table'; +SELECT @@null_audit_event_order_check; + +--echo ############# +--echo ## EXECUTE ## +--echo ############# + +CREATE TABLE test.test_table(a INT); +PREPARE stmt FROM 'SELECT * FROM test.test_table'; +DROP TABLE test.test_table; + +SET @@null_audit_event_order_check = 'MYSQL_AUDIT_COMMAND_START;command_id="3";;' + 'MYSQL_AUDIT_PARSE_PREPARSE;;;' + 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' + 'MYSQL_AUDIT_GENERAL_LOG;;;' + 'MYSQL_AUDIT_QUERY_START;sql_command_id="100";;' + 'MYSQL_AUDIT_GENERAL_LOG;;;' + 'MYSQL_AUDIT_QUERY_START;sql_command_id="0";;' + 'MYSQL_AUDIT_GENERAL_ERROR;;ABORT_RET'; +--error ER_NO_SUCH_TABLE +EXECUTE stmt; +SELECT @@null_audit_event_order_check; + +DROP PREPARE stmt; + +--echo ####################################### +--echo ## ABORT GENERAL LOG WITH MY_MESSAGE ## +--echo ####################################### + +SET @@null_audit_abort_message = "Abort with my_message."; +SET @@null_audit_event_order_check = 'MYSQL_AUDIT_COMMAND_START;command_id="3";;' + 'MYSQL_AUDIT_PARSE_PREPARSE;;;' + 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' + 'MYSQL_AUDIT_GENERAL_LOG;;;' + 'MYSQL_AUDIT_QUERY_START;sql_command_id="99";;' + 'MYSQL_AUDIT_PARSE_PREPARSE;;;' + 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' + 'MYSQL_AUDIT_GENERAL_ERROR;;ABORT_RET'; +--error ER_NO_SUCH_TABLE +PREPARE stmt FROM 'SELECT * FROM mysql.non_existing_table'; +SELECT @@null_audit_event_order_check; + +CREATE TABLE test.test_table(a INT); +PREPARE stmt FROM 'SELECT * FROM test.test_table'; +DROP TABLE test.test_table; + +SET @@null_audit_abort_message = "Abort with my_message."; +SET @@null_audit_event_order_check = 'MYSQL_AUDIT_COMMAND_START;command_id="3";;' + 'MYSQL_AUDIT_PARSE_PREPARSE;;;' + 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' + 'MYSQL_AUDIT_GENERAL_LOG;;;' + 'MYSQL_AUDIT_QUERY_START;sql_command_id="100";;' + 'MYSQL_AUDIT_GENERAL_LOG;;;' + 'MYSQL_AUDIT_QUERY_START;sql_command_id="0";;' + 'MYSQL_AUDIT_GENERAL_ERROR;;ABORT_RET'; +--error ER_NO_SUCH_TABLE +EXECUTE stmt; +SELECT @@null_audit_event_order_check; + +DROP PREPARE stmt; + +UNINSTALL PLUGIN null_audit; diff --git a/mysql-test/suite/audit_null/t/general_log_abort-master.opt b/mysql-test/suite/audit_null/t/general_log_abort-master.opt new file mode 100644 index 000000000000..bc88b4d7d915 --- /dev/null +++ b/mysql-test/suite/audit_null/t/general_log_abort-master.opt @@ -0,0 +1 @@ +$AUDIT_NULL_OPT \ No newline at end of file diff --git a/mysql-test/suite/audit_null/t/general_log_abort.test b/mysql-test/suite/audit_null/t/general_log_abort.test new file mode 100644 index 000000000000..f183efe7e4a6 --- /dev/null +++ b/mysql-test/suite/audit_null/t/general_log_abort.test @@ -0,0 +1,30 @@ +--source include/have_null_audit_plugin.inc +--source include/not_embedded.inc +--source include/no_protocol.inc + +--replace_regex /\.dll/.so/ +eval INSTALL PLUGIN null_audit SONAME '$AUDIT_NULL'; + +SET @@null_audit_event_order_check = 'MYSQL_AUDIT_COMMAND_START;command_id="3";;' + 'MYSQL_AUDIT_PARSE_PREPARSE;;;' + 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' + 'MYSQL_AUDIT_GENERAL_LOG;;ABORT_RET'; +--error ER_AUDIT_API_ABORT +SELECT 1; +SELECT @@null_audit_event_order_check; +SELECT 1; + +--echo ####################################### +--echo ## ABORT GENERAL LOG WITH MY_MESSAGE ## +--echo ####################################### +SET @@null_audit_abort_message = "Abort with my_message."; +SET @@null_audit_event_order_check = 'MYSQL_AUDIT_COMMAND_START;command_id="3";;' + 'MYSQL_AUDIT_PARSE_PREPARSE;;;' + 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' + 'MYSQL_AUDIT_GENERAL_LOG;;ABORT_RET'; +--error ER_AUDIT_API_ABORT +SELECT 1; +SELECT @@null_audit_event_order_check; +SELECT 1; + +UNINSTALL PLUGIN null_audit; diff --git a/mysql-test/suite/audit_null/t/general_log_abort_ps-master.opt b/mysql-test/suite/audit_null/t/general_log_abort_ps-master.opt new file mode 100644 index 000000000000..bc88b4d7d915 --- /dev/null +++ b/mysql-test/suite/audit_null/t/general_log_abort_ps-master.opt @@ -0,0 +1 @@ +$AUDIT_NULL_OPT \ No newline at end of file diff --git a/mysql-test/suite/audit_null/t/general_log_abort_ps.test b/mysql-test/suite/audit_null/t/general_log_abort_ps.test new file mode 100644 index 000000000000..1eb51b59cae6 --- /dev/null +++ b/mysql-test/suite/audit_null/t/general_log_abort_ps.test @@ -0,0 +1,136 @@ +--source include/have_null_audit_plugin.inc +--source include/not_embedded.inc +--source include/no_protocol.inc + +--replace_regex /\.dll/.so/ +eval INSTALL PLUGIN null_audit SONAME '$AUDIT_NULL'; + +--echo ############# +--echo ## PREPARE ## +--echo ############# + +--echo # Abort first MYSQL_AUDIT_GENERAL_LOG event +SET @@null_audit_event_order_check = 'MYSQL_AUDIT_COMMAND_START;command_id="3";;' + 'MYSQL_AUDIT_PARSE_PREPARSE;;;' + 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' + 'MYSQL_AUDIT_GENERAL_LOG;;ABORT_RET'; +--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT +--error ER_AUDIT_API_ABORT +PREPARE stmt FROM 'SELECT 1'; +SELECT @@null_audit_event_order_check; +--error ER_UNKNOWN_STMT_HANDLER +EXECUTE stmt; + +--echo # Abort second MYSQL_AUDIT_GENERAL_LOG event +SET @@null_audit_event_order_check = 'MYSQL_AUDIT_COMMAND_START;command_id="3";;' + 'MYSQL_AUDIT_PARSE_PREPARSE;;;' + 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' + 'MYSQL_AUDIT_GENERAL_LOG;;;' + 'MYSQL_AUDIT_QUERY_START;sql_command_id="99";;' + 'MYSQL_AUDIT_PARSE_PREPARSE;;;' + 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' + 'MYSQL_AUDIT_GENERAL_LOG;;ABORT_RET'; +--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT +--error ER_AUDIT_API_ABORT +PREPARE stmt FROM 'SELECT 1'; +SELECT @@null_audit_event_order_check; +--error ER_UNKNOWN_STMT_HANDLER +EXECUTE stmt; + +--echo ####################################### +--echo ## ABORT GENERAL LOG WITH MY_MESSAGE ## +--echo ####################################### + +--echo # Abort first MYSQL_AUDIT_GENERAL_LOG event +SET @@null_audit_abort_message = "Abort with my_message."; +SET @@null_audit_event_order_check = 'MYSQL_AUDIT_COMMAND_START;command_id="3";;' + 'MYSQL_AUDIT_PARSE_PREPARSE;;;' + 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' + 'MYSQL_AUDIT_GENERAL_LOG;;ABORT_RET'; +--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT +--error ER_AUDIT_API_ABORT +PREPARE stmt FROM 'SELECT 1'; +SELECT @@null_audit_event_order_check; +--error ER_UNKNOWN_STMT_HANDLER +EXECUTE stmt; + +--echo # Abort second MYSQL_AUDIT_GENERAL_LOG event +SET @@null_audit_abort_message = "Abort with my_message."; +SET @@null_audit_event_order_check = 'MYSQL_AUDIT_COMMAND_START;command_id="3";;' + 'MYSQL_AUDIT_PARSE_PREPARSE;;;' + 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' + 'MYSQL_AUDIT_GENERAL_LOG;;;' + 'MYSQL_AUDIT_QUERY_START;sql_command_id="99";;' + 'MYSQL_AUDIT_PARSE_PREPARSE;;;' + 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' + 'MYSQL_AUDIT_GENERAL_LOG;;ABORT_RET'; +--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT +--error ER_AUDIT_API_ABORT +PREPARE stmt FROM 'SELECT 1'; +SELECT @@null_audit_event_order_check; +--error ER_UNKNOWN_STMT_HANDLER +EXECUTE stmt; + +--echo ############# +--echo ## EXECUTE ## +--echo ############# + +PREPARE stmt FROM 'SELECT 2'; + +--echo # Abort first MYSQL_AUDIT_GENERAL_LOG event +SET @@null_audit_event_order_check = 'MYSQL_AUDIT_COMMAND_START;command_id="3";;' + 'MYSQL_AUDIT_PARSE_PREPARSE;;;' + 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' + 'MYSQL_AUDIT_GENERAL_LOG;;ABORT_RET'; +--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT +--error ER_AUDIT_API_ABORT +EXECUTE stmt; +SELECT @@null_audit_event_order_check; +EXECUTE stmt; + +# BUG - Aborting 2nd MYSQL_AUDIT_GENERAL_LOG event fails +#--echo # Abort second MYSQL_AUDIT_GENERAL_LOG event +#SET @@null_audit_event_order_check = 'MYSQL_AUDIT_COMMAND_START;command_id="3";;' +# 'MYSQL_AUDIT_PARSE_PREPARSE;;;' +# 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' +# 'MYSQL_AUDIT_GENERAL_LOG;;;' +# 'MYSQL_AUDIT_QUERY_START;sql_command_id="100";;' +# 'MYSQL_AUDIT_GENERAL_LOG;;ABORT_RET'; +#--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT +#--error ER_AUDIT_API_ABORT +#EXECUTE stmt; +#SELECT @@null_audit_event_order_check; +#EXECUTE stmt; + +--echo ####################################### +--echo ## ABORT GENERAL LOG WITH MY_MESSAGE ## +--echo ####################################### + +--echo # Abort first MYSQL_AUDIT_GENERAL_LOG event +SET @@null_audit_abort_message = "Abort with my_message."; +SET @@null_audit_event_order_check = 'MYSQL_AUDIT_COMMAND_START;command_id="3";;' + 'MYSQL_AUDIT_PARSE_PREPARSE;;;' + 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' + 'MYSQL_AUDIT_GENERAL_LOG;;ABORT_RET'; +--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT +--error ER_AUDIT_API_ABORT +EXECUTE stmt; +SELECT @@null_audit_event_order_check; +EXECUTE stmt; + +# BUG - Aborting 2nd MYSQL_AUDIT_GENERAL_LOG event fails +#--echo # Abort second MYSQL_AUDIT_GENERAL_LOG event +#SET @@null_audit_abort_message = "Abort with my_message."; +#SET @@null_audit_event_order_check = 'MYSQL_AUDIT_COMMAND_START;command_id="3";;' +# 'MYSQL_AUDIT_PARSE_PREPARSE;;;' +# 'MYSQL_AUDIT_PARSE_POSTPARSE;;;' +# 'MYSQL_AUDIT_GENERAL_LOG;;;' +# 'MYSQL_AUDIT_QUERY_START;sql_command_id="100";;' +# 'MYSQL_AUDIT_GENERAL_LOG;;ABORT_RET'; +#--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT +#--error ER_AUDIT_API_ABORT +#EXECUTE stmt; +#SELECT @@null_audit_event_order_check; +#EXECUTE stmt; + +UNINSTALL PLUGIN null_audit; From ea3f448ef6e1e02c9cd98e199c16b741896556f4 Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Mon, 15 Jan 2018 10:35:11 +0530 Subject: [PATCH 0379/1221] From 5667819f2baa7e4e32acda92bdeb2a380f8ae113 Mon Sep 17 00:00:00 2001 From: Robert Golebiowski Date: Mon, 8 Jan 2018 13:52:26 +0100 Subject: [PATCH 0380/1221] PS-287: It is possible to enable encrypt_binlog with no binary logging It is possible to enable encrypt_binlog without binary logging. In this setup server will only encrypt relay logs - if used. We print an information in server's log file to notify user that although encrypt_binlog in on, there is no binlog file to encrypt and only relay logs will get encrypted. --- ...nlog_encryption_on_while_binlog_off.result | 4 +++ ...binlog_encryption_on_while_binlog_off.test | 28 +++++++++++++++++++ sql/mysqld.cc | 20 ++++++++----- 3 files changed, 45 insertions(+), 7 deletions(-) create mode 100644 mysql-test/suite/binlog_encryption/r/binlog_encryption_on_while_binlog_off.result create mode 100644 mysql-test/suite/binlog_encryption/t/binlog_encryption_on_while_binlog_off.test diff --git a/mysql-test/suite/binlog_encryption/r/binlog_encryption_on_while_binlog_off.result b/mysql-test/suite/binlog_encryption/r/binlog_encryption_on_while_binlog_off.result new file mode 100644 index 000000000000..1fb7d7838a92 --- /dev/null +++ b/mysql-test/suite/binlog_encryption/r/binlog_encryption_on_while_binlog_off.result @@ -0,0 +1,4 @@ +# restart: +include/assert.inc [Binlog should be OFF] +include/assert.inc [Binlog encryption should be ON] +# restart diff --git a/mysql-test/suite/binlog_encryption/t/binlog_encryption_on_while_binlog_off.test b/mysql-test/suite/binlog_encryption/t/binlog_encryption_on_while_binlog_off.test new file mode 100644 index 000000000000..734bb271e503 --- /dev/null +++ b/mysql-test/suite/binlog_encryption/t/binlog_encryption_on_while_binlog_off.test @@ -0,0 +1,28 @@ +# PS-287: It is possible to enable encrypt_binlog with no binary logging +# +# It is possible to enable encrypt_binlog without binary logging. In this setup +# server will only encrypt relay logs - if used. We print an information in server's log +# file to notify user that although encrypt_binlog in on, there is no binlog file to +# encrypt and only relay logs will get encrypted. + +--let $restart_hide_args=1 +--let $restart_parameters=restart:--log-error=$MYSQLTEST_VARDIR/tmp/binlog_encryption_on_while_binlog_off.err --early-plugin-load="keyring_file=$KEYRING_PLUGIN" --loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring $KEYRING_PLUGIN_OPT --encrypt-binlog=1 --master-verify-checksum=1 +--source include/restart_mysqld.inc + +--let $assert_text= Binlog should be OFF +--let $assert_cond= "[SELECT @@GLOBAL.log_bin = 0]" = 1 +--source include/assert.inc + +--let $assert_text= Binlog encryption should be ON +--let $assert_cond= "[SELECT @@GLOBAL.encrypt_binlog = 1]" = 1 +--source include/assert.inc + +# Find a note in server's log +--let SEARCH_FILE= $MYSQLTEST_VARDIR/tmp/binlog_encryption_on_while_binlog_off.err +--let SEARCH_PATTERN= binlog and relay log encryption enabled without binary logging being enabled. If relay logs are in use, they will be encrypted. +--source include/search_pattern_in_file.inc + +--let $restart_parameters= +--source include/restart_mysqld.inc + +--remove_file $MYSQLTEST_VARDIR/tmp/binlog_encryption_on_while_binlog_off.err diff --git a/sql/mysqld.cc b/sql/mysqld.cc index ed6a580d17ec..8b41b3220589 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -4500,13 +4500,19 @@ a file name for --log-bin-index option", opt_binlog_index_name); unireg_abort(MYSQLD_ABORT_EXIT); } - if (encrypt_binlog && (!opt_master_verify_checksum || - binlog_checksum_options == binary_log::BINLOG_CHECKSUM_ALG_OFF || - binlog_checksum_options == binary_log::BINLOG_CHECKSUM_ALG_UNDEF)) - { - sql_print_error("BINLOG_ENCRYPTION requires MASTER_VERIFY_CHECKSUM = ON and " - "BINLOG_CHECKSUM to be turned ON."); - unireg_abort(MYSQLD_ABORT_EXIT); + if (encrypt_binlog) + { + if (!opt_master_verify_checksum || + binlog_checksum_options == binary_log::BINLOG_CHECKSUM_ALG_OFF || + binlog_checksum_options == binary_log::BINLOG_CHECKSUM_ALG_UNDEF) + { + sql_print_error("BINLOG_ENCRYPTION requires MASTER_VERIFY_CHECKSUM = ON and " + "BINLOG_CHECKSUM to be turned ON."); + unireg_abort(MYSQLD_ABORT_EXIT); + } + if (!opt_bin_log) + sql_print_information("binlog and relay log encryption enabled without binary logging being enabled. " + "If relay logs are in use, they will be encrypted."); } /// @todo: this looks suspicious, revisit this /sven From 071e3614301a720398bf21106c54e3b77fbddbb5 Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Tue, 16 Jan 2018 11:57:48 +0530 Subject: [PATCH 0381/1221] From 017d870f38bb81f83ea4e0e234fd29cdcb81e835 Mon Sep 17 00:00:00 2001 From: Jaideep Karande Date: Tue, 16 Jan 2018 13:43:05 +0100 Subject: [PATCH 0382/1221] Bug#27157202: ASSERT ON SET BINLOG_CHECKSUM=NONE ON A SECONDARY MEMBER Bug#27317478: ASSERT ON SET GLOBAL GTID_MODE ON AN OFFLINE (READ_ONLY) MEMBER Problem: Function check_readonly is ignoring flag ignore_global_read_lock. Resolution: Code has been corrected to use the new flag skip_readonly_check to ignore read_only check. --- .../mtr/r/gr_set_variable_in_read_only.result | 29 +++ .../mtr/t/gr_set_variable_in_read_only.test | 200 ++++++++++++++++++ sql/sys_vars.cc | 8 +- sql/sys_vars.h | 9 +- 4 files changed, 244 insertions(+), 2 deletions(-) create mode 100644 rapid/plugin/group_replication/tests/mtr/r/gr_set_variable_in_read_only.result create mode 100644 rapid/plugin/group_replication/tests/mtr/t/gr_set_variable_in_read_only.test diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_set_variable_in_read_only.result b/rapid/plugin/group_replication/tests/mtr/r/gr_set_variable_in_read_only.result new file mode 100644 index 000000000000..ffb487c47418 --- /dev/null +++ b/rapid/plugin/group_replication/tests/mtr/r/gr_set_variable_in_read_only.result @@ -0,0 +1,29 @@ +include/group_replication.inc [rpl_server_count=2] +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection server1] + +# 1. Start GR with server1 as Primary and server2 as secondary. +include/start_and_bootstrap_group_replication.inc + +[connection server2] +include/start_group_replication.inc + +# 2. Change value of variable binlog_checksum on server2. +SET @binlog_checksum_save= @@GLOBAL.binlog_checksum; +SET GLOBAL binlog_checksum=none; + +# 3. Stop GR on server1. +include/stop_group_replication.inc + +# 4. Assert server is in Read only mode on server1. +include/assert.inc [Assert that server is running in super read-only.] +include/assert.inc [Assert that server is running in read-only.] + +# 5. Test changing value of variables. + +# 6. Cleanup. +[connection server2] +SET @@GLOBAL.binlog_checksum= @binlog_checksum_save; +include/group_replication_end.inc diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_set_variable_in_read_only.test b/rapid/plugin/group_replication/tests/mtr/t/gr_set_variable_in_read_only.test new file mode 100644 index 000000000000..1f4f7b7a9d7f --- /dev/null +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_set_variable_in_read_only.test @@ -0,0 +1,200 @@ +################################################################################ +# This test proves that SET variable option works in Read only mode. +# +# Test: +# 0. The test requires two server. +# 1. Start GR with server1 as Primary and server2 as secondary. +# 2. Change value of variable binlog_checksum on server2. +# 3. Stop GR on server1. +# 4. Assert server is in Read only mode on server1. +# 5. Test changing value of variables. +# 6. Cleanup. +# +################################################################################ + +--source ../inc/have_group_replication_plugin.inc +--let $rpl_server_count= 2 +--let $rpl_skip_group_replication_start= 1 +--let $rpl_group_replication_single_primary_mode=1 +--source ../inc/group_replication.inc + +--echo +--echo # 1. Start GR with server1 as Primary and server2 as secondary. +--source ../inc/start_and_bootstrap_group_replication.inc + +--echo +--let $rpl_connection_name= server2 +--source include/rpl_connection.inc +--source include/start_group_replication.inc + +--echo +--echo # 2. Change value of variable binlog_checksum on server2. +SET @binlog_checksum_save= @@GLOBAL.binlog_checksum; +SET GLOBAL binlog_checksum=none; + +--echo +--echo # 3. Stop GR on server1. +--let $skip_reset_read_mode=1 +--source include/stop_group_replication.inc + +--let $wait_condition= SELECT count(*) = 1 FROM performance_schema.replication_group_members WHERE MEMBER_STATE = 'OFFLINE'; +--source include/wait_condition.inc + +--echo +--echo # 4. Assert server is in Read only mode on server1. +--let $assert_cond= "[SELECT @@GLOBAL.super_read_only]" = 1 +--let $assert_text= Assert that server is running in super read-only. +--source include/assert.inc + +--let $assert_cond= "[SELECT @@GLOBAL.read_only]" = 1 +--let $assert_text= Assert that server is running in read-only. +--source include/assert.inc + +--echo +--echo # 5. Test changing value of variables. +--disable_query_log +## Save values +SET @saved_gtid_mode = @@GLOBAL.gtid_mode; +SET @saved_gtid_executed_compression_period = @@GLOBAL.gtid_executed_compression_period; +SET @saved_binlog_checksum = @@GLOBAL.binlog_checksum; +SET @saved_binlog_cache_size = @@GLOBAL.binlog_cache_size; +SET @saved_binlog_direct_non_transactional_updates = @@GLOBAL.binlog_direct_non_transactional_updates; +SET @saved_binlog_error_action = @@GLOBAL.binlog_error_action; +SET @saved_binlog_format = @@GLOBAL.binlog_format; +SET @saved_binlog_group_commit_sync_delay = @@GLOBAL.binlog_group_commit_sync_delay; +SET @saved_binlog_group_commit_sync_no_delay_count = @@GLOBAL.binlog_group_commit_sync_no_delay_count; +SET @saved_binlog_order_commits = @@GLOBAL.binlog_order_commits; +SET @saved_binlog_rows_query_log_events = @@GLOBAL.binlog_rows_query_log_events; +SET @saved_binlog_stmt_cache_size = @@GLOBAL.binlog_stmt_cache_size; + +SET @saved_gr_allow_local_lower_version_join = @@GLOBAL.group_replication_allow_local_lower_version_join; +SET @saved_gr_auto_increment_increment = @@GLOBAL.group_replication_auto_increment_increment; +SET @saved_gr_bootstrap_group = @@GLOBAL.group_replication_bootstrap_group; +SET @saved_gr_components_stop_timeout = @@GLOBAL.group_replication_components_stop_timeout; +SET @saved_gr_compression_threshold = @@GLOBAL.group_replication_compression_threshold; +SET @saved_gr_force_members = @@GLOBAL.group_replication_force_members; +SET @saved_gr_group_name = @@GLOBAL.group_replication_group_name; +SET @saved_gr_gtid_assignment_block_size = @@GLOBAL.group_replication_gtid_assignment_block_size; +SET @saved_gr_ip_whitelist = @@GLOBAL.group_replication_ip_whitelist; +SET @saved_gr_local_address = @@GLOBAL.group_replication_local_address; +SET @saved_gr_group_seeds = @@GLOBAL.group_replication_group_seeds; +SET @saved_gr_poll_spin_loops = @@GLOBAL.group_replication_poll_spin_loops; +SET @saved_gr_recovery_complete_at = @@GLOBAL.group_replication_recovery_complete_at; +SET @saved_gr_recovery_reconnect_interval = @@GLOBAL.group_replication_recovery_reconnect_interval; +SET @saved_gr_recovery_retry_count = @@GLOBAL.group_replication_recovery_retry_count; +SET @saved_gr_recovery_ssl_ca = @@GLOBAL.group_replication_recovery_ssl_ca; +SET @saved_gr_recovery_ssl_capath = @@GLOBAL.group_replication_recovery_ssl_capath; +SET @saved_gr_recovery_ssl_cert = @@GLOBAL.group_replication_recovery_ssl_cert; +SET @saved_gr_recovery_ssl_cipher = @@GLOBAL.group_replication_recovery_ssl_cipher; +SET @saved_gr_recovery_ssl_crl = @@GLOBAL.group_replication_recovery_ssl_crl; +SET @saved_gr_recovery_ssl_crlpath = @@GLOBAL.group_replication_recovery_ssl_crlpath; +SET @saved_gr_recovery_ssl_key = @@GLOBAL.group_replication_recovery_ssl_key; +SET @saved_gr_recovery_ssl_verify_server_cert = @@GLOBAL.group_replication_recovery_ssl_verify_server_cert; +SET @saved_gr_recovery_use_ssl = @@GLOBAL.group_replication_recovery_use_ssl; +SET @saved_gr_single_primary_mode = @@GLOBAL.group_replication_single_primary_mode; +SET @saved_gr_ssl_mode = @@GLOBAL.group_replication_ssl_mode; +SET @saved_gr_start_on_boot = @@GLOBAL.group_replication_start_on_boot; +SET @saved_gr_transaction_size_limit = @@GLOBAL.group_replication_transaction_size_limit; +SET @saved_gr_unreachable_majority_timeout = @@GLOBAL.group_replication_unreachable_majority_timeout; +SET @saved_gr_member_weight = @@GLOBAL.group_replication_member_weight; + +## SET values +SET GLOBAL gtid_mode= ON_PERMISSIVE; +SET GLOBAL gtid_executed_compression_period= 2000; + +SET GLOBAL binlog_checksum=CRC32; +SET GLOBAL binlog_cache_size=4096; +SET GLOBAL binlog_direct_non_transactional_updates=ON; +SET GLOBAL binlog_error_action=IGNORE_ERROR; +SET GLOBAL binlog_format=MIXED; +SET GLOBAL binlog_group_commit_sync_delay=60; +SET GLOBAL binlog_group_commit_sync_no_delay_count=60; +SET GLOBAL binlog_order_commits=true; +SET GLOBAL binlog_rows_query_log_events= ON; +SET GLOBAL binlog_stmt_cache_size= 4096; + +SET GLOBAL group_replication_allow_local_lower_version_join= ON; +SET GLOBAL group_replication_auto_increment_increment= 5; +SET GLOBAL group_replication_bootstrap_group= ON; +SET GLOBAL group_replication_components_stop_timeout= 10; +SET GLOBAL group_replication_compression_threshold= 10; +SET GLOBAL group_replication_force_members= ""; +SET GLOBAL group_replication_group_name= "aaaaaaaa-cccc-bbbb-cccc-aaaaaaaaaaaa"; +SET GLOBAL group_replication_gtid_assignment_block_size= 2; +SET GLOBAL group_replication_ip_whitelist= "AUTOMATIC"; +SET GLOBAL group_replication_local_address= "$saved_gr_local_address"; +SET GLOBAL group_replication_group_seeds= "$saved_gr_group_seeds"; +SET GLOBAL group_replication_poll_spin_loops= 10; +SET GLOBAL group_replication_recovery_complete_at= "TRANSACTIONS_CERTIFIED"; +SET GLOBAL group_replication_recovery_reconnect_interval= 20; +SET GLOBAL group_replication_recovery_retry_count= 5; +SET GLOBAL group_replication_recovery_ssl_ca= '$MYSQL_TEST_DIR/std_data/cacert.pem'; +SET GLOBAL group_replication_recovery_ssl_capath= ''; +SET GLOBAL group_replication_recovery_ssl_cert= '$MYSQL_TEST_DIR/std_data/client-cert.pem'; +SET GLOBAL group_replication_recovery_ssl_cipher= 'DHE-RSA-AES256-SHA'; +SET GLOBAL group_replication_recovery_ssl_crl= 'crl-client-revoked.crl'; +SET GLOBAL group_replication_recovery_ssl_crlpath= ''; +SET GLOBAL group_replication_recovery_ssl_key= '$MYSQL_TEST_DIR/std_data/client-key.pem'; +SET GLOBAl group_replication_recovery_ssl_verify_server_cert= ON; +SET GLOBAl group_replication_single_primary_mode= OFF; +SET GLOBAL group_replication_recovery_use_ssl= ON; +SET GLOBAL group_replication_ssl_mode= "REQUIRED"; +SET GLOBAL group_replication_start_on_boot= ON; +SET GLOBAL group_replication_transaction_size_limit= 100000; +SET GLOBAL group_replication_unreachable_majority_timeout= 100000; +SET GLOBAL group_replication_member_weight= 70; + +--echo +--echo # 6. Cleanup. +## Restore values for server1 +SET @@GLOBAL.gtid_mode = @saved_gtid_mode; +SET @@GLOBAL.gtid_executed_compression_period = @saved_gtid_executed_compression_period; +SET @@GLOBAL.binlog_checksum = @saved_binlog_checksum; +SET @@GLOBAL.binlog_cache_size = @saved_binlog_cache_size; +SET @@GLOBAL.binlog_direct_non_transactional_updates = @saved_binlog_direct_non_transactional_updates; +SET @@GLOBAL.binlog_error_action = @saved_binlog_error_action; +SET @@GLOBAL.binlog_format = @saved_binlog_format; +SET @@GLOBAL.binlog_group_commit_sync_delay = @saved_binlog_group_commit_sync_delay; +SET @@GLOBAL.binlog_group_commit_sync_no_delay_count = @saved_binlog_group_commit_sync_no_delay_count; +SET @@GLOBAL.binlog_order_commits = @saved_binlog_order_commits; +SET @@GLOBAL.binlog_rows_query_log_events = @saved_binlog_rows_query_log_events; +SET @@GLOBAL.binlog_stmt_cache_size = @saved_binlog_stmt_cache_size; + +SET @@GLOBAL.group_replication_allow_local_lower_version_join= @saved_gr_allow_local_lower_version_join; +SET @@GLOBAL.group_replication_auto_increment_increment= @saved_gr_auto_increment_increment; +SET @@GLOBAL.group_replication_bootstrap_group= @saved_gr_bootstrap_group; +SET @@GLOBAL.group_replication_components_stop_timeout= @saved_gr_components_stop_timeout; +SET @@GLOBAL.group_replication_compression_threshold= @saved_gr_compression_threshold; +SET @@GLOBAL.group_replication_single_primary_mode= @saved_gr_single_primary_mode; +SET @@GLOBAL.group_replication_force_members= @saved_gr_force_members; +SET @@GLOBAL.group_replication_group_name= @saved_gr_group_name; +SET @@GLOBAL.group_replication_gtid_assignment_block_size= @saved_gr_gtid_assignment_block_size; +SET @@GLOBAL.group_replication_ip_whitelist= @saved_gr_ip_whitelist; +SET @@GLOBAL.group_replication_local_address= @saved_gr_local_address; +SET @@GLOBAL.group_replication_group_seeds= @saved_gr_group_seeds; +SET @@GLOBAL.group_replication_poll_spin_loops= @saved_gr_poll_spin_loops; +SET @@GLOBAL.group_replication_recovery_complete_at= @saved_gr_recovery_complete_at; +SET @@GLOBAL.group_replication_recovery_reconnect_interval= @saved_gr_recovery_reconnect_interval; +SET @@GLOBAL.group_replication_recovery_retry_count= @saved_gr_recovery_retry_count; +SET @@GLOBAL.group_replication_recovery_ssl_ca= @saved_gr_recovery_ssl_ca; +SET @@GLOBAL.group_replication_recovery_ssl_capath= @saved_gr_recovery_ssl_capath; +SET @@GLOBAL.group_replication_recovery_ssl_cert= @saved_gr_recovery_ssl_cert; +SET @@GLOBAL.group_replication_recovery_ssl_cipher= @saved_gr_recovery_ssl_cipher; +SET @@GLOBAL.group_replication_recovery_ssl_crl= @saved_gr_recovery_ssl_crl; +SET @@GLOBAL.group_replication_recovery_ssl_crlpath= @saved_gr_recovery_ssl_crlpath; +SET @@GLOBAL.group_replication_recovery_ssl_key= @saved_gr_recovery_ssl_key; +SET @@GLOBAL.group_replication_recovery_ssl_verify_server_cert= @saved_gr_recovery_ssl_verify_server_cert; +SET @@GLOBAL.group_replication_recovery_use_ssl= @saved_gr_recovery_use_ssl; +SET @@GLOBAL.group_replication_ssl_mode= @saved_gr_ssl_mode; +SET @@GLOBAL.group_replication_start_on_boot= @saved_gr_start_on_boot; +SET @@GLOBAL.group_replication_transaction_size_limit= @saved_gr_transaction_size_limit; +SET @@GLOBAL.group_replication_unreachable_majority_timeout= @saved_gr_unreachable_majority_timeout; +SET @@GLOBAL.group_replication_member_weight= @saved_gr_member_weight; + +--enable_query_log + +## Restore values for server2 +--let $rpl_connection_name= server2 +--source include/rpl_connection.inc +SET @@GLOBAL.binlog_checksum= @binlog_checksum_save; +--source ../inc/group_replication_end.inc diff --git a/sql/sys_vars.cc b/sql/sys_vars.cc index 63e4d959ca93..df055dd59920 100644 --- a/sql/sys_vars.cc +++ b/sql/sys_vars.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2009, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2009, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -3562,6 +3562,12 @@ bool Sys_var_enum_binlog_checksum::global_update(THD *thd, set_var *var) { bool check_purge= false; + /* + SET binlog_checksome command should ignore 'read-only' and 'super_read_only' + options so that it can update 'mysql.gtid_executed' replication repository + table. + */ + thd->set_skip_readonly_check(); mysql_mutex_lock(mysql_bin_log.get_log_lock()); if(mysql_bin_log.is_open()) { diff --git a/sql/sys_vars.h b/sql/sys_vars.h index 2c1f58b424b2..38ffe11ecf72 100644 --- a/sql/sys_vars.h +++ b/sql/sys_vars.h @@ -1,6 +1,6 @@ #ifndef SYS_VARS_H_INCLUDED #define SYS_VARS_H_INCLUDED -/* Copyright (c) 2002, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2002, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -2703,6 +2703,13 @@ class Sys_var_gtid_mode : public Sys_var_enum DBUG_ENTER("Sys_var_gtid_mode::global_update"); bool ret= true; + /* + SET GITD_MODE command should ignore 'read-only' and 'super_read_only' + options so that it can update 'mysql.gtid_executed' replication repository + table. + */ + thd->set_skip_readonly_check(); + /* Hold lock_log so that: - other transactions are not flushed while gtid_mode is changed; From 20cd4dbcdcf9cb034223c36bdcec4034b990405c Mon Sep 17 00:00:00 2001 From: Lars Tangvald Date: Tue, 16 Jan 2018 14:39:25 +0100 Subject: [PATCH 0383/1221] Deb packaging: Add running of unit tests Execute make test during autotest target --- packaging/deb-in/rules.in | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packaging/deb-in/rules.in b/packaging/deb-in/rules.in index 97c836efa095..32ef7211b264 100644 --- a/packaging/deb-in/rules.in +++ b/packaging/deb-in/rules.in @@ -64,6 +64,9 @@ override_dh_auto_build: override_dh_auto_test: @echo "RULES.$@" + export CTEST_OUTPUT_ON_FAILURE=1 + cd release && \ + make test || true touch $@ override_dh_auto_install: From a43f9aad56d6da28b208b7dc3c423c653a62cddb Mon Sep 17 00:00:00 2001 From: Dima Date: Mon, 15 Jan 2018 19:22:43 +0300 Subject: [PATCH 0384/1221] Fix for DOC-444 by mentioning double quotes and semicolon in early-plugin-load The only variable of this family which appears in percona-server documentation. Discussion in comments for this issue had settled down with the following statements: "loading plugins is described in the upstream docs" (i), "the problem of semicolon with or without quotes is related to bash scripting and not percona-server" (ii), and "MyRocks and TokuDB installation instructions propose using ps-admin, not command line options" (iii). So perhaps this is the only place such comment is reasonable to reside. --- doc/source/management/data_at_rest_encryption.rst | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/doc/source/management/data_at_rest_encryption.rst b/doc/source/management/data_at_rest_encryption.rst index b9943bb42135..73ef1609a800 100644 --- a/doc/source/management/data_at_rest_encryption.rst +++ b/doc/source/management/data_at_rest_encryption.rst @@ -145,6 +145,13 @@ option: It should be loaded this way to be able to facilitate recovery for encrypted tables. +.. warning:: + + If server should be started with several plugins loaded early, + ``--early-plugin-load`` should contain their list separated by semicolons. Also + it's a good practice to put this list in double quotes so that semicolons + do not create problems when executed in a script. + Apart from installing plugin you also need to set the :variable:`keyring_vault_config` variable. This variable should point to the keyring_vault configuration file, whose contents are discussed below. From 0129b0f68d6f869e582cb7d672438161a6a1d35e Mon Sep 17 00:00:00 2001 From: Sreeharsha Ramanavarapu Date: Wed, 17 Jan 2018 09:40:56 +0530 Subject: [PATCH 0385/1221] Bug #26657904: INCORRECT BEHAVIOR WITH PREPARED STATEMENT AND ORDER BY IN A SUBQUERY Issue: ------ prepare xx from "SELECT 1 AS countSelected FROM (SELECT 2, ........ FROM ....... ORDER BY (SELECT 3 .........)) AS t2 ORDER BY countSelected"; In conventional execution: 1) "SELECT 3" is removed by Item_singlerow_subselect::select_transformer(). This subquery is replaced with an Item_int. 2) "SELECT 2 ..." is invalidated as part of the derived_merge strategy by SELECT_LEX::merge_derived. During Prepare: 1) "SELECT 3" can't be removed by Item_singlerow_subselect::select_transformer because of the special condition "thd->stmt_arena->is_stmt_prepare_or_first_sp_execute()". So this subquery is not removed.. 2) "SELECT 2 ..." is invalidated as part of the derived_merge strategy by SELECT_LEX::merge_derived. This makes "SELECT 3" an orphan and causes incorrect behavior during EXECUTE. Solution: --------- When a derived table is merged, the ORDER BY clause in the derived table should either be moved into the outer query block or removed. In this case, it can't moved into the outer query since there is already an ORDER BY clause in the outer query. So the derived table's ORDER BY should be eliminated. This part has now been implemented. --- sql/sql_lex.cc | 5 +++-- sql/sql_lex.h | 12 +++++++----- sql/sql_resolver.cc | 38 ++++++++++++++++++++------------------ 3 files changed, 30 insertions(+), 25 deletions(-) diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index 6e6d679b8ad0..9bef8f843163 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -2279,7 +2279,8 @@ st_select_lex::st_select_lex opt_hints_qb(NULL), m_agg_func_used(false), m_json_agg_func_used(false), - sj_candidates(NULL) + sj_candidates(NULL), + hidden_order_field_count(0) { } diff --git a/sql/sql_lex.h b/sql/sql_lex.h index db7ce4b65787..bce40dc7f84f 100644 --- a/sql/sql_lex.h +++ b/sql/sql_lex.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -1382,13 +1382,12 @@ class st_select_lex: public Sql_alloc bool change_group_ref(THD *thd, Item_func *expr, bool *changed); bool flatten_subqueries(); bool setup_wild(THD *thd); - bool setup_order_final(THD *thd, int hidden_order_field_count); + bool setup_order_final(THD *thd); bool setup_group(THD *thd); void remove_redundant_subquery_clauses(THD *thd, - int hidden_group_field_count, - int hidden_order_field_count); + int hidden_group_field_count); void repoint_contexts_of_join_nests(List join_list); - void empty_order_list(int hidden_order_field_count); + void empty_order_list(SELECT_LEX *sl); /** Pointer to collection of subqueries candidate for semijoin conversion. @@ -1396,6 +1395,9 @@ class st_select_lex: public Sql_alloc */ Mem_root_array *sj_candidates; public: + /// How many expressions are part of the order by but not select list. + int hidden_order_field_count; + bool fix_inner_refs(THD *thd); bool setup_conds(THD *thd); bool prepare(THD *thd); diff --git a/sql/sql_resolver.cc b/sql/sql_resolver.cc index 5492382657bb..f2e5c0cc681b 100644 --- a/sql/sql_resolver.cc +++ b/sql/sql_resolver.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -231,7 +231,6 @@ bool SELECT_LEX::prepare(THD *thd) // Set up the ORDER BY clause all_fields_count= all_fields.elements; - int hidden_order_field_count= 0; if (order_list.elements) { if (setup_order(thd, ref_ptrs, get_table_list(), fields_list, all_fields, @@ -257,11 +256,11 @@ bool SELECT_LEX::prepare(THD *thd) first_execution && // 2) !(thd->lex->context_analysis_only & CONTEXT_ANALYSIS_ONLY_VIEW)) // 3) { - remove_redundant_subquery_clauses(thd, hidden_group_field_count, - hidden_order_field_count); + remove_redundant_subquery_clauses(thd, hidden_group_field_count); } - if (order_list.elements && setup_order_final(thd, hidden_order_field_count)) + if (order_list.elements && + setup_order_final(thd)) DBUG_RETURN(true); /* purecov: inspected */ if (is_distinct() && @@ -2433,6 +2432,12 @@ bool SELECT_LEX::merge_derived(THD *thd, TABLE_LIST *derived_table) is_ordered() || get_table_list()->next_local != NULL)) order_list.push_back(&derived_select->order_list); + else + { + derived_select->empty_order_list(this); + trace_derived.add_alnum("transformations_to_derived_table", + "removed_ordering"); + } } // Add any full-text functions from derived table into outer query @@ -2942,14 +2947,11 @@ bool SELECT_LEX::fix_inner_refs(THD *thd) @param thd thread handler @param hidden_group_field_count Number of hidden group fields added by setup_group(). - @param hidden_order_field_count Number of hidden order fields added - by setup_order(). */ void SELECT_LEX::remove_redundant_subquery_clauses(THD *thd, - int hidden_group_field_count, - int hidden_order_field_count) + int hidden_group_field_count) { Item_subselect *subq_predicate= master_unit()->item; /* @@ -2981,7 +2983,7 @@ void SELECT_LEX::remove_redundant_subquery_clauses(THD *thd, if (order_list.elements) { changelog|= REMOVE_ORDER; - empty_order_list(hidden_order_field_count); + empty_order_list(this); } if (is_distinct()) @@ -3032,16 +3034,18 @@ void SELECT_LEX::remove_redundant_subquery_clauses(THD *thd, Delete corresponding elements from all_fields and ref_ptrs too. If ORDER list contain any subqueries, delete them from the query block list. - @param hidden_order_field_count Number of hidden order fields to remove + @param sl Query block that possible subquery blocks in the ORDER BY clause + are attached to (may be different from "this" when query block has + been merged into an outer query block). */ -void SELECT_LEX::empty_order_list(int hidden_order_field_count) +void SELECT_LEX::empty_order_list(SELECT_LEX *sl) { for (ORDER *o= order_list.first; o != NULL; o= o->next) { if (*o->item == o->item_ptr) (*o->item)->walk(&Item::clean_up_after_removal, walk_subquery, - reinterpret_cast(this)); + pointer_cast(sl)); } order_list.empty(); while (hidden_order_field_count-- > 0) @@ -3379,17 +3383,15 @@ bool SELECT_LEX::check_only_full_group_by(THD *thd) Split any aggregate functions. @param thd Thread handler - @param hidden_order_field_count Number of fields to delete from ref array - if ORDER BY clause is redundant. @returns false if success, true if error */ -bool SELECT_LEX::setup_order_final(THD *thd, int hidden_order_field_count) +bool SELECT_LEX::setup_order_final(THD *thd) { if (is_implicitly_grouped()) { // Result will contain zero or one row - ordering is redundant - empty_order_list(hidden_order_field_count); + empty_order_list(this); return false; } @@ -3398,7 +3400,7 @@ bool SELECT_LEX::setup_order_final(THD *thd, int hidden_order_field_count) !(braces && explicit_limit)) { // Part of UNION which requires global ordering may skip local order - empty_order_list(hidden_order_field_count); + empty_order_list(this); return false; } From cf8bfa4ef1fcd90596cdcfda1146231cd2e8a124 Mon Sep 17 00:00:00 2001 From: Vlad Lesin Date: Tue, 16 Jan 2018 16:16:44 +0300 Subject: [PATCH 0386/1221] lp-1738171: Build error on FreeBSD with 5.6.38-83.0 Added include in plugin.h. FreeBSD maintainer suggested to include instead of . This increases code coherence. Also changes in do_abi_check.cmake were made to have the ability to see compilator output on compilation error. --- cmake/do_abi_check.cmake | 7 +++++-- include/mysql/plugin.h | 8 ++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/cmake/do_abi_check.cmake b/cmake/do_abi_check.cmake index e42f11abde2d..956b0a2839a1 100644 --- a/cmake/do_abi_check.cmake +++ b/cmake/do_abi_check.cmake @@ -55,13 +55,14 @@ SET(abi_check_out ${BINARY_DIR}/abi_check.out) FOREACH(file ${ABI_HEADERS}) GET_FILENAME_COMPONENT(header_basename ${file} NAME) SET(tmpfile ${BINARY_DIR}/${header_basename}.pp.tmp) + SET(errorfile ${BINARY_DIR}/${header_basename}.pp.err) EXECUTE_PROCESS( COMMAND ${COMPILER} -E -nostdinc -dI -DMYSQL_ABI_CHECK -I${SOURCE_DIR}/include -I${BINARY_DIR}/include -I${SOURCE_DIR}/include/mysql -I${SOURCE_DIR}/sql ${file} - ERROR_QUIET OUTPUT_FILE ${tmpfile}) + ERROR_FILE ${errorfile} OUTPUT_FILE ${tmpfile}) EXECUTE_PROCESS( COMMAND sed -e "/^# /d" -e "/^[ ]*$/d" @@ -76,8 +77,10 @@ FOREACH(file ${ABI_HEADERS}) COMMAND diff -w ${file}.pp ${abi_check_out} RESULT_VARIABLE result) IF(NOT ${result} EQUAL 0) MESSAGE(FATAL_ERROR - "ABI check found difference between ${file}.pp and ${abi_check_out}") + "ABI check found difference between ${file}.pp and ${abi_check_out}, " + "compilation error file can be found here: ${errorfile}") ENDIF() + FILE(REMOVE ${errorfile}) FILE(REMOVE ${abi_check_out}) ENDFOREACH() diff --git a/include/mysql/plugin.h b/include/mysql/plugin.h index 27da16782b1b..ecc089aeee78 100644 --- a/include/mysql/plugin.h +++ b/include/mysql/plugin.h @@ -51,6 +51,14 @@ class Item; typedef void * MYSQL_PLUGIN; #include +#ifndef MYSQL_ABI_CHECK +#ifndef __WIN__ +#ifndef __STDC_FORMAT_MACROS +#define __STDC_FORMAT_MACROS /* Enable C99 printf format macros */ +#endif /* !__STDC_FORMAT_MACROS */ +#include +#endif /* !__WIN__ */ +#endif /* !MYSQL_ABI_CHECK */ #define MYSQL_XIDDATASIZE 128 /** From 983773f6664ccbd28664ba4ea660cff95fac3e0b Mon Sep 17 00:00:00 2001 From: Vlad Lesin Date: Wed, 17 Jan 2018 15:31:12 +0300 Subject: [PATCH 0387/1221] lp-1738171: Build error on FreeBSD with 5.6.38-83.0 Added include in plugin.h. FreeBSD maintainer suggested to include instead of . This increases code coherence. Also changes in do_abi_check.cmake were made to have the ability to see compilator output on compilation error. (cherry picked from commit cf8bfa4ef1fcd90596cdcfda1146231cd2e8a124) --- cmake/do_abi_check.cmake | 7 +++++-- include/mysql/plugin.h | 8 +++++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/cmake/do_abi_check.cmake b/cmake/do_abi_check.cmake index 91de33613bcc..615a8f5aa521 100644 --- a/cmake/do_abi_check.cmake +++ b/cmake/do_abi_check.cmake @@ -55,6 +55,7 @@ SET(abi_check_out ${BINARY_DIR}/abi_check.out) FOREACH(file ${ABI_HEADERS}) GET_FILENAME_COMPONENT(header_basename ${file} NAME) SET(tmpfile ${BINARY_DIR}/${header_basename}.pp.tmp) + SET(errorfile ${BINARY_DIR}/${header_basename}.pp.err) EXECUTE_PROCESS( COMMAND ${COMPILER} @@ -62,7 +63,7 @@ FOREACH(file ${ABI_HEADERS}) -I${BINARY_DIR}/include -I${SOURCE_DIR}/include/mysql -I${SOURCE_DIR}/sql -I${SOURCE_DIR}/libbinlogevents/export ${file} - ERROR_QUIET OUTPUT_FILE ${tmpfile}) + ERROR_FILE ${errorfile} OUTPUT_FILE ${tmpfile}) EXECUTE_PROCESS( COMMAND sed -e "/^# /d" -e "/^[ ]*$/d" @@ -77,8 +78,10 @@ FOREACH(file ${ABI_HEADERS}) COMMAND diff -w ${file}.pp ${abi_check_out} RESULT_VARIABLE result) IF(NOT ${result} EQUAL 0) MESSAGE(FATAL_ERROR - "ABI check found difference between ${file}.pp and ${abi_check_out}") + "ABI check found difference between ${file}.pp and ${abi_check_out}, " + "compilation error file can be found here: ${errorfile}") ENDIF() + FILE(REMOVE ${errorfile}) FILE(REMOVE ${abi_check_out}) ENDFOREACH() diff --git a/include/mysql/plugin.h b/include/mysql/plugin.h index 500dea99a6b4..36813c1d1f40 100644 --- a/include/mysql/plugin.h +++ b/include/mysql/plugin.h @@ -57,7 +57,13 @@ typedef void * MYSQL_PLUGIN; #ifndef MYSQL_ABI_CHECK #include -#endif +#ifndef __WIN__ +#ifndef __STDC_FORMAT_MACROS +#define __STDC_FORMAT_MACROS /* Enable C99 printf format macros */ +#endif /* !__STDC_FORMAT_MACROS */ +#include +#endif /* !__WIN__ */ +#endif /* !MYSQL_ABI_CHECK */ #define MYSQL_XIDDATASIZE 128 /** From a4ddd83eff1c2658034c31cba29204b95935135a Mon Sep 17 00:00:00 2001 From: Joao Gramacho Date: Thu, 18 Jan 2018 10:57:32 +0000 Subject: [PATCH 0388/1221] BUG#24365972 BINLOG DECODING ISN'T RESILIENT TO CORRUPT BINLOG FILES Problem ======= When facing decoding of corrupt binary log files, server may misbehave without detecting the events corruption. This patch makes MySQL server more resilient to binary log decoding. rpl.rpl_extra_row_data refactoring ================================== The rpl.rpl_extra_row_data test case does not supported to be tested using MTR --debug option. A small refactoring without need to record a new test case result was done in order to fix the issue. Fixes for events de-serialization and apply =========================================== @libbinlogevents/include/control_events.h Added a new parameter (remaining_buffer) to read_data_set() and (consumable) to read_data_map() functions, to make them avoid reading out of buffer limits. @libbinlogevents/include/statement_events.h Added a sanity check to available_buffer() function. @libbinlogevents/src/control_events.cpp Format_description_event: removed all post_header_len.resize() calls as they are not necessary. XA_prepare_event: added checks to gtrid and bqual lengths. Transaction_context_event: added a check before reading common content and used remaining_buffer when calling read_data_set. Transaction_context_event::read_data_set: check if is possible to read without reading out of buffer limits. View_change_event: added a check before reading common content and used max_cert_info_len as the consumable limit when calling read_data_map. View_change_event::read_data_map: check if is possible to read without reading out of buffer limits. @libbinlogevents/src/load_data_events.cpp Load_event::copy_load_event: added a check to table_name length. @libbinlogevents/src/rows_event.cpp Table_map_event::Table_map_event: added a check to avoid reading out of buffer limits. Rows_event::Rows_event: added checks to avoid reading out of buffer limits and try/catched std::bad_alloc exception possibly thrown by row.assign(). Rows_query_event::Rows_query_event: added a check to avoid reading out of buffer limits. @libbinlogevents/src/statement_events.cpp Query_event::Query_event: added a check to ensure query length is respecting event buffer limits. Query_event::fill_data_buf: added a check for data (database and query) lengths. User_var_event::User_var_event: added checks to avoid reading out of buffer limits. @sql/log_event.h XA_prepare_log_event constructor: added a sanity check to invalidate the event depending on what XA_prepare_event set. @sql/log_event.cc Query_log_event::Query_log_event: added a check to query length in the sanity check. Query_log_event::do_apply_event: extended a debug print, added a check to character set to determine if it is "parseable" or not, verified if database name is valid for system collation. Start_log_event_v3::do_apply_event: report an error on applying a non-supported binary log version. User_var_log_event::do_apply_event: reported an sanity check error properly and added individual sanity checks for variable types that expect fixed (or minimum) amount of bytes to be read. Rows_log_event::do_post_row_operations: added a sanity check to m_curr_row, as it should change after a successful call to unpack_current_row(). Write_rows_log_event::write_row: added a sanity check to detect "fake" empty rows. Rows_query_log_event::Rows_query_log_event: added a sanity check based on what was provided by Rows_query_event. Transaction_context_log_event::~Transaction_context_log_event: free only if allocated. @sql/log_event_old.cc Old_rows_log_event::Old_rows_log_event: added a sanity check to avoid reading out of buffer limits. BUG#27267180 MY_LOCALE_ERRMSGS::LOOKUP RETURNS BAD POINTER FOR INVALID ERROR CODE < 1000 ====================================================================== When an error code < 1000 is passed as parameter to the function, it returns a bad pointer instead of returning the pointer to the "Invalid error code" string. This patch fixes this issue by testing also if the parameter is inside the range of the error section being evaluated. --- libbinlogevents/include/control_events.h | 8 +- libbinlogevents/include/statement_events.h | 7 +- libbinlogevents/src/control_events.cpp | 102 +++++++++++++++--- libbinlogevents/src/load_data_events.cpp | 5 +- libbinlogevents/src/rows_event.cpp | 51 +++++++-- libbinlogevents/src/statement_events.cpp | 30 +++++- .../suite/rpl/t/rpl_extra_row_data-master.opt | 1 - .../suite/rpl/t/rpl_extra_row_data-slave.opt | 1 - .../suite/rpl/t/rpl_extra_row_data.test | 12 +++ sql/derror.cc | 5 +- sql/log_event.cc | 101 +++++++++++++++-- sql/log_event.h | 6 +- sql/log_event_old.cc | 9 +- 13 files changed, 293 insertions(+), 45 deletions(-) delete mode 100644 mysql-test/suite/rpl/t/rpl_extra_row_data-master.opt delete mode 100644 mysql-test/suite/rpl/t/rpl_extra_row_data-slave.opt diff --git a/libbinlogevents/include/control_events.h b/libbinlogevents/include/control_events.h index ac1b157138aa..6191d932c798 100644 --- a/libbinlogevents/include/control_events.h +++ b/libbinlogevents/include/control_events.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -1227,7 +1227,8 @@ class Transaction_context_event : public Binary_log_event virtual ~Transaction_context_event(); static const char *read_data_set(const char *pos, uint32_t set_len, - std::list *set); + std::list *set, + uint32_t remaining_buffer); static void clear_set(std::list *set); @@ -1332,7 +1333,8 @@ class View_change_event : public Binary_log_event virtual ~View_change_event(); static char *read_data_map(char *pos, uint32_t map_len, - std::map *map); + std::map *map, + uint32_t consumable); #ifndef HAVE_MYSYS void print_event_info(std::ostream& info) { } diff --git a/libbinlogevents/include/statement_events.h b/libbinlogevents/include/statement_events.h index 47b976ca4e77..4a9e76eb2151 100644 --- a/libbinlogevents/include/statement_events.h +++ b/libbinlogevents/include/statement_events.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -674,6 +674,11 @@ template T available_buffer(const char* buf_start, const char* buf_current, T buf_len) { + /* Sanity check */ + if (buf_current < buf_start || + buf_len < static_cast(buf_current - buf_start)) + return static_cast(0); + return static_cast(buf_len - (buf_current - buf_start)); } diff --git a/libbinlogevents/src/control_events.cpp b/libbinlogevents/src/control_events.cpp index 15d9ab4d8e1b..606708e5dbb9 100644 --- a/libbinlogevents/src/control_events.cpp +++ b/libbinlogevents/src/control_events.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -163,8 +163,6 @@ Format_description_event::Format_description_event(uint8_t binlog_ver, Allows us to sanity-check that all events initialized their events (see the end of this 'if' block). */ - post_header_len.resize(number_of_event_types + - BINLOG_CHECKSUM_ALG_DESC_LEN, 255); post_header_len.insert(post_header_len.begin(), server_event_header_length, server_event_header_length + number_of_event_types); // Sanity-check that all post header lengths are initialized. @@ -220,7 +218,6 @@ Format_description_event::Format_description_event(uint8_t binlog_ver, RAND_HEADER_LEN, USER_VAR_HEADER_LEN }; - post_header_len.resize(number_of_event_types + BINLOG_CHECKSUM_ALG_DESC_LEN); post_header_len.insert(post_header_len.begin(), server_event_header_length_ver_1_3, server_event_header_length_ver_1_3 + @@ -339,7 +336,6 @@ Format_description_event(const char* buf, unsigned int event_len, event_len - (LOG_EVENT_MINIMAL_HEADER_LEN + ST_COMMON_HEADER_LEN_OFFSET + 1); const uint8_t *ubuf = reinterpret_cast(buf); - post_header_len.resize(number_of_event_types); post_header_len.insert(post_header_len.begin(), ubuf + ST_COMMON_HEADER_LEN_OFFSET + 1, (ubuf + ST_COMMON_HEADER_LEN_OFFSET + 1 + @@ -600,7 +596,20 @@ XA_prepare_event(const char* buf, memcpy(&temp, buf, sizeof(temp)); my_xid.bqual_length= le32toh(temp); buf += sizeof(temp); - memcpy(my_xid.data, buf, my_xid.gtrid_length + my_xid.bqual_length); + + /* Sanity check */ + if (MY_XIDDATASIZE >= my_xid.gtrid_length + my_xid.bqual_length && + my_xid.gtrid_length >=0 && my_xid.gtrid_length <= 64 && + my_xid.bqual_length >=0 && my_xid.bqual_length <= 64) + { + memcpy(my_xid.data, buf, my_xid.gtrid_length + my_xid.bqual_length); + } + else + { + my_xid.formatID= -1; + my_xid.gtrid_length= 0; + my_xid.bqual_length= 0; + } } /** @@ -709,6 +718,16 @@ Transaction_context_event(const char *buffer, unsigned int event_len, //buf is advanced in Binary_log_event constructor to point to //beginning of post-header const char* data_head = buffer; + const char* buffer_start = buffer - description_event->common_header_len; + + server_uuid= NULL; + encoded_snapshot_version= NULL; + + /* Avoid reading out of buffer */ + if (static_cast(description_event->common_header_len + + TRANSACTION_CONTEXT_HEADER_LEN) > event_len) + return; + uint8_t server_uuid_len= (static_cast (data_head[ENCODED_SERVER_UUID_LEN_OFFSET])); @@ -733,6 +752,14 @@ Transaction_context_event(const char *buffer, unsigned int event_len, gtid_specified= (int8_t) data_head[ENCODED_GTID_SPECIFIED_OFFSET]; const char *pos = data_head + TRANSACTION_CONTEXT_HEADER_LEN; + uint32_t remaining_buffer= 0; + + /* Avoid reading out of buffer */ + if (event_len < (TRANSACTION_CONTEXT_HEADER_LEN + server_uuid_len + + encoded_snapshot_version_length + + write_set_len + read_set_len)) + goto err; + server_uuid= bapi_strndup(pos, server_uuid_len); pos += server_uuid_len; @@ -740,20 +767,24 @@ Transaction_context_event(const char *buffer, unsigned int event_len, reinterpret_cast(bapi_strndup(pos, encoded_snapshot_version_length)); pos += encoded_snapshot_version_length; + remaining_buffer= event_len - (pos - buffer_start); - pos= read_data_set(pos, write_set_len, &write_set); + pos= read_data_set(pos, write_set_len, &write_set, remaining_buffer); if (pos == NULL) goto err; - pos= read_data_set(pos, read_set_len, &read_set); + remaining_buffer= event_len - (pos - buffer_start); + pos= read_data_set(pos, read_set_len, &read_set, remaining_buffer); if (pos == NULL) goto err; return; err: - bapi_free((void*)server_uuid); + if (server_uuid) + bapi_free((void*)server_uuid); server_uuid= NULL; - bapi_free((void*)encoded_snapshot_version); + if (encoded_snapshot_version) + bapi_free((void*)encoded_snapshot_version); encoded_snapshot_version= NULL; clear_set(&write_set); clear_set(&read_set); @@ -763,27 +794,35 @@ Transaction_context_event(const char *buffer, unsigned int event_len, /** Function to read the data set for the ongoing transaction. - @param[in] pos - postion to read from. - @param[in] set_len - length of the set object - @param[in] set - pointer to the set object + @param[in] pos - postion to read from. + @param[in] set_len - length of the set object + @param[in] set - pointer to the set object + @param[in] remaining - remaining available bytes on the buffer @retval - returns the pointer in the buffer to the end of the added hash - value. + value or NULL in case of an error. */ const char* Transaction_context_event::read_data_set(const char *pos, uint32_t set_len, - std::list *set) + std::list *set, + uint32_t remaining) { uint16_t len= 0; for (uint32_t i= 0; i < set_len; i++) { + if (remaining < static_cast(ENCODED_READ_WRITE_SET_ITEM_LEN)) + return(NULL); memcpy(&len, pos, 2); len= le16toh(len); + remaining-= ENCODED_READ_WRITE_SET_ITEM_LEN; pos += ENCODED_READ_WRITE_SET_ITEM_LEN; + if (remaining < len) + return(NULL); const char *hash= bapi_strndup(pos, len); if (hash == NULL) return(NULL); pos += len; + remaining-= len; set->push_back(hash); } return(pos); @@ -851,7 +890,20 @@ View_change_event(const char *buffer, unsigned int event_len, char *pos = (char*) data_header + VIEW_CHANGE_HEADER_LEN; - pos= read_data_map(pos, cert_info_len, &certification_info); + /* Avoid reading out of buffer */ + if (event_len < (LOG_EVENT_HEADER_LEN + VIEW_CHANGE_HEADER_LEN)) + { + pos= NULL; + } + else + { + unsigned int max_cert_info_len= event_len - (LOG_EVENT_HEADER_LEN + + VIEW_CHANGE_HEADER_LEN); + + pos= read_data_map(pos, cert_info_len, &certification_info, + max_cert_info_len); + } + if (pos == NULL) // Make is_valid() defined in the server return false. view_id[0]= '\0'; @@ -865,33 +917,49 @@ View_change_event(const char *buffer, unsigned int event_len, @param[in] pos - start position. @param[in] map_len - the length of the certification info map. @param[in] map - Certification info map + @param[in] consumable - the amount of bytes that can be read from buffer @return pointer to the snapshot version. */ char* View_change_event::read_data_map(char *pos, uint32_t map_len, - std::map *map) + std::map *map, + uint32_t consumable) { BAPI_ASSERT(map->empty()); uint16_t created= 0; uint32_t created_value= 0; for (uint32_t i= 0; i < map_len; i++) { + if (!consumable || + consumable < static_cast(ENCODED_CERT_INFO_KEY_SIZE_LEN)) + return NULL; created=0; memcpy(&created, pos, sizeof(created)); uint16_t key_len= (uint16_t) le16toh(created); pos+= ENCODED_CERT_INFO_KEY_SIZE_LEN; + consumable-= ENCODED_CERT_INFO_KEY_SIZE_LEN; + if (!consumable || consumable < key_len) + return NULL; std::string key(pos, key_len); pos+= key_len; + consumable-= key_len; + if (!consumable || + consumable < static_cast(ENCODED_CERT_INFO_VALUE_LEN)) + return NULL; created_value=0; memcpy(&created_value, pos, sizeof(created_value)); uint32_t value_len= le32toh(created_value); pos+= ENCODED_CERT_INFO_VALUE_LEN; + consumable-= ENCODED_CERT_INFO_VALUE_LEN; + if (!consumable || consumable < value_len) + return NULL; std::string value(pos, value_len); pos+= value_len; + consumable-= value_len; (*map)[key]= value; } diff --git a/libbinlogevents/src/load_data_events.cpp b/libbinlogevents/src/load_data_events.cpp index 84689756ec40..42e9ea2b6c3d 100644 --- a/libbinlogevents/src/load_data_events.cpp +++ b/libbinlogevents/src/load_data_events.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -259,6 +259,9 @@ int Load_event::copy_load_event(const char *buf, unsigned long event_len, fields= (char*)field_lens + num_fields; table_name= fields + field_block_len; + if (strlen(table_name) > NAME_LEN) + goto err; + db= table_name + table_name_len + 1; #ifndef DBUG_OFF diff --git a/libbinlogevents/src/rows_event.cpp b/libbinlogevents/src/rows_event.cpp index 8849f8bdc311..d9c88ff2c084 100644 --- a/libbinlogevents/src/rows_event.cpp +++ b/libbinlogevents/src/rows_event.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -122,6 +122,15 @@ Table_map_event::Table_map_event(const char *buf, unsigned int event_len, unsigned char *ptr_after_colcnt= (unsigned char*) ptr_colcnt; m_colcnt= get_field_length(&ptr_after_colcnt); + bytes_read= (unsigned int) ((ptr_after_colcnt + common_header_len) - + (unsigned char *)buf); + /* Avoid reading out of buffer */ + if (event_len <= bytes_read || event_len - bytes_read < m_colcnt) + { + m_coltype= NULL; + return; + } + m_coltype= static_cast(bapi_malloc(m_colcnt, 16)); m_dbnam= std::string((const char*)ptr_dblen + 1, m_dblen); m_tblnam= std::string((const char*)ptr_tbllen + 1, m_tbllen + 1); @@ -154,7 +163,8 @@ Table_map_event::~Table_map_event() m_null_bits= NULL; bapi_free(m_field_metadata); m_field_metadata= NULL; - bapi_free(m_coltype); + if (m_coltype != NULL) + bapi_free(m_coltype); m_coltype= NULL; } @@ -207,7 +217,10 @@ Rows_event::Rows_event(const char *buf, unsigned int event_len, */ memcpy(&var_header_len, post_start, sizeof(var_header_len)); var_header_len= le16toh(var_header_len); - if (var_header_len < 2) + /* Check length and also avoid out of buffer read */ + if (var_header_len < 2 || + event_len < static_cast(var_header_len + + (post_start - buf))) return; var_header_len-= 2; @@ -254,6 +267,11 @@ Rows_event::Rows_event(const char *buf, unsigned int event_len, unsigned char *ptr_after_width= (unsigned char*) ptr_width; m_width = get_field_length(&ptr_after_width); n_bits_len= (m_width + 7) / 8; + /* Avoid reading out of buffer */ + if (ptr_after_width + n_bits_len > (const unsigned char *)(buf + + event_len - + post_header_len)) + return; columns_before_image.reserve((m_width + 7) / 8); unsigned char *ch; ch= ptr_after_width; @@ -282,11 +300,20 @@ Rows_event::Rows_event(const char *buf, unsigned int event_len, const unsigned char* ptr_rows_data= (unsigned char*) ptr_after_width; - size_t const data_size= event_len - - (ptr_rows_data + common_header_len - - (const unsigned char *) buf); + size_t const read_size= ptr_rows_data + common_header_len - + (const unsigned char *) buf; + if (read_size > event_len) + return; + size_t const data_size= event_len - read_size; - row.assign(ptr_rows_data, ptr_rows_data + data_size + 1); + try + { + row.assign(ptr_rows_data, ptr_rows_data + data_size + 1); + } + catch (const std::bad_alloc &e) + { + row.clear(); + } BAPI_ASSERT(row.size() == data_size + 1); } @@ -314,12 +341,18 @@ Rows_query_event(const char *buf, unsigned int event_len, uint8_t const post_header_len= descr_event->post_header_len[ROWS_QUERY_LOG_EVENT-1]; + m_rows_query= NULL; + /* m_rows_query length is stored using only one byte, but that length is ignored and the complete query is read. */ - int offset= common_header_len + post_header_len + 1; - int len= event_len - offset; + unsigned int offset= common_header_len + post_header_len + 1; + /* Avoid reading out of buffer */ + if (offset > event_len) + return; + + unsigned int len= event_len - offset; if (!(m_rows_query= static_cast(bapi_malloc(len + 1, 16)))) return; diff --git a/libbinlogevents/src/statement_events.cpp b/libbinlogevents/src/statement_events.cpp index 62831df4cf5e..685d0ac6c5a4 100644 --- a/libbinlogevents/src/statement_events.cpp +++ b/libbinlogevents/src/statement_events.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -391,6 +391,16 @@ break; db= (const char* )end; q_len= data_len - db_len -1; query= (const char *)(end + db_len + 1); + + unsigned int max_length; + max_length= (event_len - (((end + db_len + 1) - start) + + (post_header_len + common_header_len))); + if (q_len != max_length) + { + q_len= 0; + query= NULL; + } + return; } @@ -411,6 +421,12 @@ int Query_event::fill_data_buf(Log_event_header::Byte* buf, if (buf_len < catalog_len + 1 + time_zone_len + 1 + user_len+ 1 + host_len+ 1 + data_len ) return 0; + + if (data_len && (data_len < db_len || + data_len < q_len || + data_len != (db_len + q_len + 1))) + return 0; + unsigned char* start= buf; /* Note: catalog_len is one less than "catalog.length()" @@ -459,6 +475,13 @@ User_var_event(const char* buf, unsigned int event_len, memcpy(&name_len, buf, 4); name_len= le32toh(name_len); + /* Avoid reading out of buffer */ + if ((buf - buf_start) + UV_NAME_LEN_SIZE + name_len > event_len) + { + error= true; + goto err; + } + name= (char *) buf + UV_NAME_LEN_SIZE; /* We don't know yet is_null value, so we must assume that name_len @@ -526,6 +549,11 @@ User_var_event(const char* buf, unsigned int event_len, we keep the flags set to UNDEF_F. */ size_t bytes_read= ((val + val_len) - start); + if (bytes_read > event_len) + { + error= true; + goto err; + } #ifndef DBUG_OFF bool old_pre_checksum_fd= description_event->is_version_before_checksum(); bool checksum_verify= (old_pre_checksum_fd || diff --git a/mysql-test/suite/rpl/t/rpl_extra_row_data-master.opt b/mysql-test/suite/rpl/t/rpl_extra_row_data-master.opt deleted file mode 100644 index 8f1731cbdd21..000000000000 --- a/mysql-test/suite/rpl/t/rpl_extra_row_data-master.opt +++ /dev/null @@ -1 +0,0 @@ ---loose-debug=+d,extra_row_data_set diff --git a/mysql-test/suite/rpl/t/rpl_extra_row_data-slave.opt b/mysql-test/suite/rpl/t/rpl_extra_row_data-slave.opt deleted file mode 100644 index e7068ac333ec..000000000000 --- a/mysql-test/suite/rpl/t/rpl_extra_row_data-slave.opt +++ /dev/null @@ -1 +0,0 @@ ---loose-debug=+d,extra_row_data_check diff --git a/mysql-test/suite/rpl/t/rpl_extra_row_data.test b/mysql-test/suite/rpl/t/rpl_extra_row_data.test index a9d0ed242a44..b5f6d698eb1f 100644 --- a/mysql-test/suite/rpl/t/rpl_extra_row_data.test +++ b/mysql-test/suite/rpl/t/rpl_extra_row_data.test @@ -3,6 +3,13 @@ --source include/have_binlog_format_row.inc --source include/master-slave.inc +connection slave; +--let $debug_point_silent= 1 +--let $debug_point= extra_row_data_check +--source include/add_debug_point.inc +connection master; +--let $debug_point= extra_row_data_set +--source include/add_debug_point.inc --echo Basic insert, update, delete from Master->Slave --echo DBUG code will set + check transfer of extra --echo row data in RBR @@ -60,4 +67,9 @@ source include/check_slave_is_running.inc; connection master; DROP TABLE t1; --source include/sync_slave_sql_with_master.inc +--let $debug_point= extra_row_data_check +--source include/remove_debug_point.inc +connection master; +--let $debug_point= extra_row_data_set +--source include/remove_debug_point.inc --source include/rpl_end.inc diff --git a/sql/derror.cc b/sql/derror.cc index 9960855e070b..3fe227c02333 100644 --- a/sql/derror.cc +++ b/sql/derror.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -38,7 +38,8 @@ const char* MY_LOCALE_ERRMSGS::lookup(int mysql_errno) int offset= 0; // Position where the current section starts in the array. for (int i= 0; i < NUM_SECTIONS; i++) { - if (mysql_errno < (errmsg_section_start[i] + errmsg_section_size[i])) + if (mysql_errno >= errmsg_section_start[i] && + mysql_errno < (errmsg_section_start[i] + errmsg_section_size[i])) return errmsgs[mysql_errno - errmsg_section_start[i] + offset]; offset+= errmsg_section_size[i]; } diff --git a/sql/log_event.cc b/sql/log_event.cc index df315a9af0c5..6c6fac5ec486 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -4160,7 +4160,7 @@ Query_log_event::Query_log_event(const char* buf, uint event_len, if (!(fill_data_buf(data_buf, buf_len))) DBUG_VOID_RETURN; - if(query != 0) + if (query != 0 && q_len > 0) is_valid_param= true; /** @@ -4485,7 +4485,8 @@ int Query_log_event::do_apply_event(Relay_log_info const *rli, int expected_error,actual_error= 0; HA_CREATE_INFO db_options; - DBUG_PRINT("info", ("query=%s", query)); + DBUG_PRINT("info", ("query=%s, q_len_arg=%lu", + query, static_cast(q_len_arg))); /* Colleagues: please never free(thd->catalog) in MySQL. This would @@ -4503,6 +4504,25 @@ int Query_log_event::do_apply_event(Relay_log_info const *rli, else thd->set_catalog(EMPTY_CSTR); + size_t valid_len; + bool len_error; + bool is_invalid_db_name= validate_string(system_charset_info, db, db_len, + &valid_len, &len_error); + + DBUG_PRINT("debug",("is_invalid_db_name= %s, valid_len=%zu, len_error=%s", + is_invalid_db_name ? "true" : "false", + valid_len, + len_error ? "true" : "false")); + + if (is_invalid_db_name || len_error) + { + rli->report(ERROR_LEVEL, ER_SLAVE_FATAL_ERROR, + ER_THD(thd, ER_SLAVE_FATAL_ERROR), + "Invalid database name in Query event."); + thd->is_slave_error= true; + goto end; + } + set_thd_db(thd, db, db_len); /* @@ -4611,6 +4631,18 @@ int Query_log_event::do_apply_event(Relay_log_info const *rli, goto compare_errors; } thd->update_charset(); // for the charset change to take effect + /* + We cannot ask for parsing a statement using a character set + without state_maps (parser internal data). + */ + if (!thd->variables.character_set_client->state_maps) + { + rli->report(ERROR_LEVEL, ER_SLAVE_FATAL_ERROR, + ER_THD(thd, ER_SLAVE_FATAL_ERROR), + "character_set cannot be parsed"); + thd->is_slave_error= true; + goto end; + } /* Reset thd->query_string.cs to the newly set value. Note, there is a small flaw here. For a very short time frame @@ -5328,7 +5360,13 @@ int Start_log_event_v3::do_apply_event(Relay_log_info const *rli) */ break; default: - /* this case is impossible */ + /* + This case is not expected. It can be either an event corruption or an + unsupported binary log version. + */ + rli->report(ERROR_LEVEL, ER_SLAVE_FATAL_ERROR, + ER_THD(thd, ER_SLAVE_FATAL_ERROR), + "Binlog version not supported"); DBUG_RETURN(1); } DBUG_RETURN(error); @@ -7754,7 +7792,12 @@ int User_var_log_event::do_apply_event(Relay_log_info const *rli) } if (!(charset= get_charset(charset_number, MYF(MY_WME)))) + { + rli->report(ERROR_LEVEL, ER_SLAVE_FATAL_ERROR, + ER_THD(thd, ER_SLAVE_FATAL_ERROR), + "Invalid character set for User var event"); DBUG_RETURN(1); + } double real_val; longlong int_val; @@ -7772,12 +7815,26 @@ int User_var_log_event::do_apply_event(Relay_log_info const *rli) { switch (type) { case REAL_RESULT: + if (val_len != 8) + { + rli->report(ERROR_LEVEL, ER_SLAVE_FATAL_ERROR, + ER_THD(thd, ER_SLAVE_FATAL_ERROR), + "Invalid variable length at User var event"); + DBUG_RETURN(1); + } float8get(&real_val, val); it= new Item_float(real_val, 0); val= (char*) &real_val; // Pointer to value in native format val_len= 8; break; case INT_RESULT: + if (val_len != 8) + { + rli->report(ERROR_LEVEL, ER_SLAVE_FATAL_ERROR, + ER_THD(thd, ER_SLAVE_FATAL_ERROR), + "Invalid variable length at User var event"); + DBUG_RETURN(1); + } int_val= (longlong) uint8korr(val); it= new Item_int(int_val); val= (char*) &int_val; // Pointer to value in native format @@ -7785,6 +7842,13 @@ int User_var_log_event::do_apply_event(Relay_log_info const *rli) break; case DECIMAL_RESULT: { + if (val_len < 3) + { + rli->report(ERROR_LEVEL, ER_SLAVE_FATAL_ERROR, + ER_THD(thd, ER_SLAVE_FATAL_ERROR), + "Invalid variable length at User var event"); + DBUG_RETURN(1); + } Item_decimal *dec= new Item_decimal((uchar*) val+2, val[0], val[1]); it= dec; val= (char *)dec->val_decimal(NULL); @@ -9933,7 +9997,13 @@ void Rows_log_event::do_post_row_operations(Relay_log_info const *rli, int error if (!m_curr_row_end && !error) { + const uchar *previous_m_curr_row= m_curr_row; error= unpack_current_row(rli, &m_cols); + + if (!error && previous_m_curr_row == m_curr_row) + { + error= 1; + } } // at this moment m_curr_row_end should be set @@ -12376,6 +12446,22 @@ Write_rows_log_event::write_row(const Relay_log_info *const rli, if ((error= unpack_current_row(rli, &m_cols))) DBUG_RETURN(error); + /* + When m_curr_row == m_curr_row_end, it means a row that contains nothing, + so all the pointers shall be pointing to the same address, or else + we have corrupt data and shall throw the error. + */ + DBUG_PRINT("debug",("m_rows_buf= %p, m_rows_cur= %p, m_rows_end= %p", + m_rows_buf, m_rows_cur, m_rows_end)); + DBUG_PRINT("debug",("m_curr_row= %p, m_curr_row_end= %p", + m_curr_row, m_curr_row_end)); + if (m_curr_row == m_curr_row_end && + !((m_rows_buf == m_rows_cur) && (m_rows_cur == m_rows_end))) + { + my_error(ER_SLAVE_CORRUPT_EVENT, MYF(0)); + DBUG_RETURN(ER_SLAVE_CORRUPT_EVENT); + } + if (m_curr_row == m_rows_buf) { /* this is the first row to be inserted, we estimate the rows with @@ -13093,6 +13179,7 @@ Rows_query_log_event::Rows_query_log_event(const char *buf, uint event_len, Ignorable_log_event(buf, descr_event), binary_log::Rows_query_event(buf, event_len, descr_event) { + is_valid_param= (m_rows_query != NULL); } #ifndef MYSQL_CLIENT @@ -13744,9 +13831,11 @@ Transaction_context_log_event(const char *buffer, uint event_len, Transaction_context_log_event::~Transaction_context_log_event() { DBUG_ENTER("Transaction_context_log_event::~Transaction_context_log_event"); - my_free((void*)server_uuid); + if (server_uuid) + my_free((void*)server_uuid); server_uuid= NULL; - my_free((void*) encoded_snapshot_version); + if (encoded_snapshot_version) + my_free((void*) encoded_snapshot_version); encoded_snapshot_version= NULL; delete snapshot_version; delete sid_map; diff --git a/sql/log_event.h b/sql/log_event.h index 3b832649ccd9..27c9a4ed2bd1 100644 --- a/sql/log_event.h +++ b/sql/log_event.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -2071,7 +2071,9 @@ class XA_prepare_log_event : binary_log::XA_prepare_event(buf, description_event), Xid_apply_log_event(buf, description_event, header(), footer()) { - is_valid_param= true; + is_valid_param= !(my_xid.formatID == -1 && + my_xid.gtrid_length == 0 && + my_xid.bqual_length == 0); xid= NULL; } Log_event_type get_type_code() { return binary_log::XA_PREPARE_LOG_EVENT; } diff --git a/sql/log_event_old.cc b/sql/log_event_old.cc index 801a1bd72baa..21e3de80fc8f 100644 --- a/sql/log_event_old.cc +++ b/sql/log_event_old.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2007, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -1377,6 +1377,13 @@ Old_rows_log_event(const char *buf, uint event_len, Log_event_type event_type, 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)); + /* Avoid reading out of buffer */ + if (m_width + (ptr_after_width - (const uchar *)buf) > event_len) + { + m_cols.bitmap= NULL; + DBUG_VOID_RETURN; + } + /* if bitmap_init fails, catched in is_valid() */ if (likely(!bitmap_init(&m_cols, m_width <= sizeof(m_bitbuf)*8 ? m_bitbuf : NULL, From f761e734d0a721c4b3fc3b4be6cb01ef71c5db81 Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Thu, 18 Jan 2018 12:25:35 +0100 Subject: [PATCH 0389/1221] From 6783c5f29541c83cdd5719b6b263d82b43bd2fa0 Mon Sep 17 00:00:00 2001 From: Robert Golebiowski Date: Tue, 9 Jan 2018 09:14:04 +0100 Subject: [PATCH 0390/1221] Bug: PS-288: mysqld got signal 6 if you try to enable encrypt_binlog + binary log without keyring-file plugin Server is aborted when binlog_error_action is set to ABORT_SERVER and binlog encryption could not be initialized. An error message generated in server log got improved in this case by mentioning that encryption could be a reason why server got aborted. --- .../binlog_encryption_without_keyring.result | 11 +++++ ...nlog_encryption_without_keyring-master.opt | 1 + .../t/binlog_encryption_without_keyring.test | 44 +++++++++++++++++++ sql/binlog.cc | 12 +++-- 4 files changed, 64 insertions(+), 4 deletions(-) create mode 100644 mysql-test/suite/binlog_encryption/r/binlog_encryption_without_keyring.result create mode 100644 mysql-test/suite/binlog_encryption/t/binlog_encryption_without_keyring-master.opt create mode 100644 mysql-test/suite/binlog_encryption/t/binlog_encryption_without_keyring.test diff --git a/mysql-test/suite/binlog_encryption/r/binlog_encryption_without_keyring.result b/mysql-test/suite/binlog_encryption/r/binlog_encryption_without_keyring.result new file mode 100644 index 000000000000..1429677612db --- /dev/null +++ b/mysql-test/suite/binlog_encryption/r/binlog_encryption_without_keyring.result @@ -0,0 +1,11 @@ +# restart: +UNINSTALL PLUGIN keyring_file; +include/assert.inc [No keyring plugin should be installed] +include/assert.inc [Binlog should be ON] +include/assert.inc [Binlog encryption should be ON] +SET GLOBAL binlog_error_action= ABORT_SERVER; +# open new binlog file +RESET MASTER; +ERROR HY000: Binary logging not possible. Message: Either disk is full or file system is read only or encryption failed while opening the binlog. Aborting the server. +# Check that error messages related to encryption are present in error log +# restart diff --git a/mysql-test/suite/binlog_encryption/t/binlog_encryption_without_keyring-master.opt b/mysql-test/suite/binlog_encryption/t/binlog_encryption_without_keyring-master.opt new file mode 100644 index 000000000000..7e17eec86bc7 --- /dev/null +++ b/mysql-test/suite/binlog_encryption/t/binlog_encryption_without_keyring-master.opt @@ -0,0 +1 @@ +--skip-core-file diff --git a/mysql-test/suite/binlog_encryption/t/binlog_encryption_without_keyring.test b/mysql-test/suite/binlog_encryption/t/binlog_encryption_without_keyring.test new file mode 100644 index 000000000000..5606ac1522f2 --- /dev/null +++ b/mysql-test/suite/binlog_encryption/t/binlog_encryption_without_keyring.test @@ -0,0 +1,44 @@ +# Bug: PS-288: mysqld got signal 6 if you try to enable encrypt_binlog + binary log without keyring-file plugin + +# Server is aborted when binlog_error_action is set to ABORT_SERVER and binlog encryption could not be +# initialized. An error message generated in server log got improved in this case by mentioning that +# encryption could be a reason why server got aborted. + +--source include/not_embedded.inc +--source include/have_log_bin.inc + +--let restart_hide_args=1 +--let $restart_parameters=restart:--log-error=$MYSQLTEST_VARDIR/tmp/binlog_encryption_without_keyring.err +--source include/restart_mysqld.inc + +UNINSTALL PLUGIN keyring_file; + +--let $assert_text= No keyring plugin should be installed +--let $assert_cond= "[SELECT COUNT(PLUGIN_NAME) = 0 FROM INFORMATION_SCHEMA.PLUGINS WHERE plugin_name LIKE \\'keyring%\\']" = 1 +--source include/assert.inc + +--let $assert_text= Binlog should be ON +--let $assert_cond= "[SELECT @@GLOBAL.log_bin = 1]" = 1 +--source include/assert.inc + +--let $assert_text= Binlog encryption should be ON +--let $assert_cond= "[SELECT @@GLOBAL.encrypt_binlog = 1]" = 1 +--source include/assert.inc + +SET GLOBAL binlog_error_action= ABORT_SERVER; +--disable_reconnect +--source include/expect_crash.inc +--echo # open new binlog file +--error ER_BINLOG_LOGGING_IMPOSSIBLE +RESET MASTER; +--echo # Check that error messages related to encryption are present in error log +--let SEARCH_FILE= $MYSQLTEST_VARDIR/tmp/binlog_encryption_without_keyring.err +--let SEARCH_PATTERN= Binary logging not possible. Message: Either disk is full or file system is read only or encryption failed while opening the binlog. Aborting the server. +--source include/search_pattern_in_file.inc +--let SEARCH_PATTERN= Failed to fetch percona_binlog key from keyring and thus failed to initialize binlog encryption. Have you enabled keyring plugin? +--source include/search_pattern_in_file.inc + +--let $restart_parameters= +--source include/start_mysqld.inc + +--remove_file $MYSQLTEST_VARDIR/tmp/binlog_encryption_without_keyring.err diff --git a/sql/binlog.cc b/sql/binlog.cc index 5387bd97727e..d413d8486c92 100644 --- a/sql/binlog.cc +++ b/sql/binlog.cc @@ -5121,7 +5121,8 @@ bool MYSQL_BIN_LOG::open_binlog(const char *log_name, if (crypto.init(sele.crypto_scheme, 0, nonce)) { sql_print_error("Failed to fetch percona_binlog key from keyring and thus " - "failed to initialize binlog encryption."); + "failed to initialize binlog encryption. Have you enabled " + "keyring plugin?"); goto err; } } @@ -5306,9 +5307,12 @@ bool MYSQL_BIN_LOG::open_binlog(const char *log_name, #endif if (binlog_error_action == ABORT_SERVER) { - exec_binlog_error_action_abort("Either disk is full or file system is read " - "only while opening the binlog. Aborting the" - " server."); + std::string err_msg= "Either disk is full or file system is read only "; + if (encrypt_binlog) + err_msg+= "or encryption failed "; + err_msg+= "while opening the binlog. Aborting the server."; + + exec_binlog_error_action_abort(err_msg.c_str()); } else { From 23dfcac912ebbeee0e8d3032eea2b7a8db344df7 Mon Sep 17 00:00:00 2001 From: Rahul Sisondia Date: Fri, 19 Jan 2018 12:15:18 +0100 Subject: [PATCH 0391/1221] Fixed the intermittent test failure on Ubuntu 1. After reading the method name from the server we set it to the member variable m_mechanism. Then we are supposed to set the nul terminating char at the length of method name. Instead we had been setting it at the size of variable -1, which is wrong. Fix : Set the nul char in the member variable at the length of number of bytes read. 2. In the auth_ldap_sasl.test file, while creating the file ';' is appended to the name of it inadvertantly. As a result this file is not removed in the end of the test. Fix - Removed the inadvertant char from the file name. Testing - ../mysql-test/mtr --mem authentication_ldap.auth_ldap_sasl --repeat=100 The servers were restarted 0 times Spent 46.816 of 205 seconds executing testcases Completed: All 100 tests were successful. Review : Harin --- libmysql/authentication_ldap/auth_ldap_sasl_client.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libmysql/authentication_ldap/auth_ldap_sasl_client.cc b/libmysql/authentication_ldap/auth_ldap_sasl_client.cc index 7b1793946f70..4ca91d04cd0e 100644 --- a/libmysql/authentication_ldap/auth_ldap_sasl_client.cc +++ b/libmysql/authentication_ldap/auth_ldap_sasl_client.cc @@ -92,7 +92,7 @@ int Sasl_client::read_method_name_from_server() if (rc_server_read >= 0 && rc_server_read <= max_method_name_len) { strncpy(m_mechanism, (const char*)packet, rc_server_read); - m_mechanism[sizeof(m_mechanism) - 1]= '\0'; + m_mechanism[rc_server_read]= '\0'; log_stream << "Sasl_client::read_method_name_from_server : " << m_mechanism; log_dbg(log_stream.str()); From 4558ac0ecb02d031faf0d29f3e3c18f8a6906457 Mon Sep 17 00:00:00 2001 From: Ashish Padiyar Date: Fri, 19 Jan 2018 16:54:34 +0530 Subject: [PATCH 0392/1221] Disabling max_parts.innodb-import-partition-1 on Hudson until Bug #27413612 is fixed. --- mysql-test/suite/max_parts/t/disabled.def | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 mysql-test/suite/max_parts/t/disabled.def diff --git a/mysql-test/suite/max_parts/t/disabled.def b/mysql-test/suite/max_parts/t/disabled.def new file mode 100644 index 000000000000..cffc6003c69b --- /dev/null +++ b/mysql-test/suite/max_parts/t/disabled.def @@ -0,0 +1,13 @@ + +# +# List the test cases that are to be disabled temporarily. +# +# Separate the test case name and the comment with ':'. +# +# : BUG# +# +# Do not use any TAB characters for whitespace. +# +############################################################################## +max_parts.innodb-import-partition-1 : Bug#27413612 Ashish Fails consistently on hudson jobs. Disabled until bug is fixed. + From ee2e1be31afd02e5ddac4ead973c8a68f4716f50 Mon Sep 17 00:00:00 2001 From: Vlad Lesin Date: Fri, 19 Jan 2018 15:15:54 +0300 Subject: [PATCH 0393/1221] TDB-102: support xa interleaving on slave thread The initial code can be found here: https://github.com/XeLabs/tokudb/tree/tokudb_xa_interleave XA log entries can be interleaved in the binlog since XA prepare on the master flushes to the binlog. There can be log entries from different clients pushed into the binlog before XA commit is executed on the master. Therefore, the slave thread must be able to juggle multiple XA transactions. Tokudb does this by zapping the client transaction context on the slave when executing the XA prepare and expecting to process XA commit with commit_by_xid (which supplies the XID so that the transaction can be looked up and committed). (cherry picked from commit 1033c6ae36db712713aa7b8f4256267dba1446ed) --- .../tokudb.rpl/r/rpl_xa_interleave.result | 62 +++++++++++ .../suite/tokudb.rpl/t/rpl_xa_interleave.test | 103 ++++++++++++++++++ storage/tokudb/hatoku_hton.cc | 20 +++- 3 files changed, 184 insertions(+), 1 deletion(-) create mode 100644 mysql-test/suite/tokudb.rpl/r/rpl_xa_interleave.result create mode 100644 mysql-test/suite/tokudb.rpl/t/rpl_xa_interleave.test diff --git a/mysql-test/suite/tokudb.rpl/r/rpl_xa_interleave.result b/mysql-test/suite/tokudb.rpl/r/rpl_xa_interleave.result new file mode 100644 index 000000000000..72e8644f7f24 --- /dev/null +++ b/mysql-test/suite/tokudb.rpl/r/rpl_xa_interleave.result @@ -0,0 +1,62 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +CREATE TABLE t1(`a` INT) ENGINE=TokuDB; +XA START 'x1'; +INSERT INTO t1 VALUES (1); +XA END 'x1'; +XA PREPARE 'x1'; +BEGIN; +INSERT INTO t1 VALUES (10); +COMMIT; +XA START 'y1'; +INSERT INTO t1 VALUES (2); +XA END 'y1'; +XA PREPARE 'y1'; +XA COMMIT 'x1'; +XA COMMIT 'y1'; +BEGIN; +INSERT INTO t1 VALUES (11); +COMMIT; +XA START 'x2'; +INSERT INTO t1 VALUES (3); +XA END 'x2'; +XA PREPARE 'x2'; +XA START 'y2'; +INSERT INTO t1 VALUES (4); +XA END 'y2'; +XA PREPARE 'y2'; +XA COMMIT 'x2'; +XA COMMIT 'y2'; +XA START 'x1'; +INSERT INTO t1 VALUES (1); +XA END 'x1'; +XA PREPARE 'x1'; +BEGIN; +INSERT INTO t1 VALUES (10); +COMMIT; +XA START 'y1'; +INSERT INTO t1 VALUES (2); +XA END 'y1'; +XA PREPARE 'y1'; +XA ROLLBACK 'x1'; +XA ROLLBACK 'y1'; +BEGIN; +INSERT INTO t1 VALUES (11); +COMMIT; +XA START 'x2'; +INSERT INTO t1 VALUES (3); +XA END 'x2'; +XA PREPARE 'x2'; +XA START 'y2'; +INSERT INTO t1 VALUES (4); +XA END 'y2'; +XA PREPARE 'y2'; +XA ROLLBACK 'x2'; +XA ROLLBACK 'y2'; +TABLES t1 and t2 must be equal otherwise an error will be thrown. +include/diff_tables.inc [master:test.t1, slave:test.t1] +DROP TABLE t1; +include/rpl_end.inc diff --git a/mysql-test/suite/tokudb.rpl/t/rpl_xa_interleave.test b/mysql-test/suite/tokudb.rpl/t/rpl_xa_interleave.test new file mode 100644 index 000000000000..3941604c8556 --- /dev/null +++ b/mysql-test/suite/tokudb.rpl/t/rpl_xa_interleave.test @@ -0,0 +1,103 @@ +--source include/have_tokudb.inc +--source include/have_binlog_format_mixed_or_row.inc +--source include/master-slave.inc + +CREATE TABLE t1(`a` INT) ENGINE=TokuDB; + +## XA interleave commit +--connection master +XA START 'x1'; +INSERT INTO t1 VALUES (1); +XA END 'x1'; +XA PREPARE 'x1'; + +--connection master1 +BEGIN; +INSERT INTO t1 VALUES (10); +COMMIT; +XA START 'y1'; +INSERT INTO t1 VALUES (2); +XA END 'y1'; +XA PREPARE 'y1'; + +--connection master +XA COMMIT 'x1'; + +--connection master1 +XA COMMIT 'y1'; + +--connection master +BEGIN; +INSERT INTO t1 VALUES (11); +COMMIT; +XA START 'x2'; +INSERT INTO t1 VALUES (3); +XA END 'x2'; +XA PREPARE 'x2'; + +--connection master1 +XA START 'y2'; +INSERT INTO t1 VALUES (4); +XA END 'y2'; +XA PREPARE 'y2'; + +--connection master +XA COMMIT 'x2'; + +--connection master1 +XA COMMIT 'y2'; + +## XA interleave rollback +--connection master +XA START 'x1'; +INSERT INTO t1 VALUES (1); +XA END 'x1'; +XA PREPARE 'x1'; + +--connection master1 +BEGIN; +INSERT INTO t1 VALUES (10); +COMMIT; +XA START 'y1'; +INSERT INTO t1 VALUES (2); +XA END 'y1'; +XA PREPARE 'y1'; + +--connection master +XA ROLLBACK 'x1'; + +--connection master1 +XA ROLLBACK 'y1'; + +--connection master +BEGIN; +INSERT INTO t1 VALUES (11); +COMMIT; +XA START 'x2'; +INSERT INTO t1 VALUES (3); +XA END 'x2'; +XA PREPARE 'x2'; + +--connection master1 +XA START 'y2'; +INSERT INTO t1 VALUES (4); +XA END 'y2'; +XA PREPARE 'y2'; + +--connection master +XA ROLLBACK 'x2'; + +--connection master1 +XA ROLLBACK 'y2'; + +--connection master + +--sync_slave_with_master + +--echo TABLES t1 and t2 must be equal otherwise an error will be thrown. +--let $diff_tables= master:test.t1, slave:test.t1 +--source include/diff_tables.inc + +--connection master +DROP TABLE t1; +--source include/rpl_end.inc diff --git a/storage/tokudb/hatoku_hton.cc b/storage/tokudb/hatoku_hton.cc index 1cfe4e0a8bc3..114376f3541a 100644 --- a/storage/tokudb/hatoku_hton.cc +++ b/storage/tokudb/hatoku_hton.cc @@ -983,7 +983,7 @@ static bool tokudb_sync_on_prepare(void) { } static int tokudb_xa_prepare(handlerton* hton, THD* thd, bool all) { - TOKUDB_DBUG_ENTER(""); + TOKUDB_DBUG_ENTER("%u", all); TOKUDB_TRACE_FOR_FLAGS(TOKUDB_DEBUG_XA, "enter"); int r = 0; @@ -1011,6 +1011,22 @@ static int tokudb_xa_prepare(handlerton* hton, THD* thd, bool all) { r = txn->xa_prepare(txn, &thd_xid, syncflag); // test hook to induce a crash on a debug build DBUG_EXECUTE_IF("tokudb_crash_prepare_after", DBUG_SUICIDE();); + + // XA log entries can be interleaved in the binlog since XA prepare on the master + // flushes to the binlog. There can be log entries from different clients pushed + // into the binlog before XA commit is executed on the master. Therefore, the slave + // thread must be able to juggle multiple XA transactions. Tokudb does this by + // zapping the client transaction context on the slave when executing the XA prepare + // and expecting to process XA commit with commit_by_xid (which supplies the XID so + // that the transaction can be looked up and committed). + if (r == 0 && all && thd->slave_thread) { + TOKUDB_TRACE_FOR_FLAGS(TOKUDB_DEBUG_XA, "zap txn context %u", thd_sql_command(thd)); + if (thd_sql_command(thd) == SQLCOM_XA_PREPARE) { + trx->all = NULL; + trx->sub_sp_level = NULL; + trx->sp_level = NULL; + } + } } else { TOKUDB_TRACE_FOR_FLAGS(TOKUDB_DEBUG_XA, "nothing to prepare %d", all); } @@ -1041,6 +1057,7 @@ static int tokudb_xa_recover(handlerton* hton, XID* xid_list, uint len) { static int tokudb_commit_by_xid(handlerton* hton, XID* xid) { TOKUDB_DBUG_ENTER(""); TOKUDB_TRACE_FOR_FLAGS(TOKUDB_DEBUG_XA, "enter"); + TOKUDB_TRACE_FOR_FLAGS(TOKUDB_DEBUG_XA, "xid %p", xid); int r = 0; DB_TXN* txn = NULL; TOKU_XA_XID* toku_xid = (TOKU_XA_XID*)xid; @@ -1060,6 +1077,7 @@ static int tokudb_commit_by_xid(handlerton* hton, XID* xid) { static int tokudb_rollback_by_xid(handlerton* hton, XID* xid) { TOKUDB_DBUG_ENTER(""); TOKUDB_TRACE_FOR_FLAGS(TOKUDB_DEBUG_XA, "enter"); + TOKUDB_TRACE_FOR_FLAGS(TOKUDB_DEBUG_XA, "xid %p", xid); int r = 0; DB_TXN* txn = NULL; TOKU_XA_XID* toku_xid = (TOKU_XA_XID*)xid; From 9c8ac10383e99f92df2ab11af2327d163f1919d8 Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Sun, 21 Jan 2018 19:52:25 +0530 Subject: [PATCH 0394/1221] From 0de16434d867fcc216d424c6686512fd59147614 Mon Sep 17 00:00:00 2001 From: Allen Lai Date: Mon, 22 Jan 2018 11:12:03 +0800 Subject: [PATCH 0395/1221] Bug#27399897 PUNCH HOLE IS MISSED IN FIRST COMPRESSION OF PAGES. Problem: This bug will cause the punch hole step to be skipped when the page is doing its first compression. And without punch hole, the compressed page will cost same disk space as uncompressed page. Apparently, this makes compression no meaning. Fix: Set the proper value for old_compressed_len to make punch hole works. Reviewed by Sunny Bains over IM. --- storage/innobase/os/os0file.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/storage/innobase/os/os0file.cc b/storage/innobase/os/os0file.cc index 166aa80acfee..2c055fbe8968 100644 --- a/storage/innobase/os/os0file.cc +++ b/storage/innobase/os/os0file.cc @@ -1,6 +1,6 @@ /*********************************************************************** -Copyright (c) 1995, 2017, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1995, 2018, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2009, Percona Inc. Portions of this file contain modifications contributed and copyrighted @@ -2086,6 +2086,8 @@ os_file_compress_page( old_compressed_len = ut_calc_align( old_compressed_len + FIL_PAGE_DATA, type.block_size()); + } else { + old_compressed_len = *n; } byte* compressed_page; From 29d20af2fed31b9a4d467fc2c57ff36f357348d9 Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Mon, 22 Jan 2018 12:46:53 +0530 Subject: [PATCH 0396/1221] From 30d4bef85d8d47101f68b1fe6ac9733ab87a3eb6 Mon Sep 17 00:00:00 2001 From: Laurynas Biveinis Date: Mon, 15 Jan 2018 10:16:44 +0200 Subject: [PATCH 0397/1221] Fix bug 1741647 (5.7.20-19 build error on macOS) macOS build has been broken by 1) memset_s use has been introduced in core server with incorrect CMake portability check 2) keyring_vault and keyring_file symbol visibility has been limited with a version script, which is not supported by macOS linker. The first issue is fixed trivially, the second one by limiting the version script use to Linux, if no sanitizers are enabled, to match the existing behavior in libmysql. --- config.h.cmake | 1 + configure.cmake | 1 + plugin/keyring/CMakeLists.txt | 7 +++++-- plugin/keyring_vault/CMakeLists.txt | 8 +++++--- 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/config.h.cmake b/config.h.cmake index 07773d9a2b86..49476319464e 100644 --- a/config.h.cmake +++ b/config.h.cmake @@ -134,6 +134,7 @@ #cmakedefine HAVE_MEMALIGN 1 #cmakedefine HAVE_NL_LANGINFO 1 #cmakedefine HAVE_HTONLL 1 +#cmakedefine HAVE_MEMSET_S 1 #cmakedefine DNS_USE_CPU_CLOCK_FOR_ID 1 #cmakedefine HAVE_EPOLL 1 /* #cmakedefine HAVE_EVENT_PORTS 1 */ diff --git a/configure.cmake b/configure.cmake index 1d98347acd3a..b004ef3f8d08 100644 --- a/configure.cmake +++ b/configure.cmake @@ -568,6 +568,7 @@ CHECK_FUNCTION_EXISTS (vasprintf HAVE_VASPRINTF) CHECK_FUNCTION_EXISTS (memalign HAVE_MEMALIGN) CHECK_FUNCTION_EXISTS (nl_langinfo HAVE_NL_LANGINFO) CHECK_FUNCTION_EXISTS (ntohll HAVE_HTONLL) +CHECK_FUNCTION_EXISTS (memset_s HAVE_MEMSET_S) CHECK_FUNCTION_EXISTS (clock_gettime DNS_USE_CPU_CLOCK_FOR_ID) CHECK_FUNCTION_EXISTS (epoll_create HAVE_EPOLL) diff --git a/plugin/keyring/CMakeLists.txt b/plugin/keyring/CMakeLists.txt index 2e1f30cb907b..a5de35d1d981 100644 --- a/plugin/keyring/CMakeLists.txt +++ b/plugin/keyring/CMakeLists.txt @@ -50,8 +50,11 @@ IF(HAVE_DLOPEN) PROPERTIES LINK_FLAGS "${CMAKE_SHARED_LIBRARY_C_FLAGS}") ENDIF() -get_property(keyring_file_link_flags TARGET keyring_file PROPERTY LINK_FLAGS) -set_property(TARGET keyring_file PROPERTY LINK_FLAGS "${keyring_file_link_flags} -Wl,--version-script=${CMAKE_SOURCE_DIR}/plugin/keyring/keyring_file.version") +# We limit symbols exported on Linux to only those required by server. +IF(LINK_FLAG_NO_UNDEFINED) + GET_PROPERTY(keyring_file_link_flags TARGET keyring_file PROPERTY LINK_FLAGS) + SET_PROPERTY(TARGET keyring_file PROPERTY LINK_FLAGS "${keyring_file_link_flags} -Wl,--version-script=${CMAKE_SOURCE_DIR}/plugin/keyring/keyring_file.version") +ENDIF() # Boost source has unused local typedefs. MY_CHECK_CXX_COMPILER_FLAG("-Wunused-local-typedefs" HAVE_UNUSED_TYPEDEFS) diff --git a/plugin/keyring_vault/CMakeLists.txt b/plugin/keyring_vault/CMakeLists.txt index fc19ac65c664..0bbf0bab8068 100644 --- a/plugin/keyring_vault/CMakeLists.txt +++ b/plugin/keyring_vault/CMakeLists.txt @@ -2,7 +2,6 @@ INCLUDE(CheckFunctionExists) INCLUDE(curl) SET(CMAKE_EXTRA_INCLUDE_FILES string.h) -CHECK_FUNCTION_EXISTS(memset_s HAVE_MEMSET_S) SET(CMAKE_EXTRA_INCLUDE_FILES) MACRO (CHECK_IF_LIB_FOUND lib_name project_name) @@ -51,8 +50,11 @@ MYSQL_ADD_PLUGIN(keyring_vault MODULE_ONLY MODULE_OUTPUT_NAME "keyring_vault") -get_property(keyring_vault_link_flags TARGET keyring_vault PROPERTY LINK_FLAGS) -set_property(TARGET keyring_vault PROPERTY LINK_FLAGS "${keyring_vault_link_flags} -Wl,--version-script=${CMAKE_SOURCE_DIR}/plugin/keyring_vault/keyring_vault.version") +# We limit symbols exported on Linux to only those required by server. +IF(LINK_FLAG_NO_UNDEFINED) + GET_PROPERTY(keyring_vault_link_flags TARGET keyring_vault PROPERTY LINK_FLAGS) + SET_PROPERTY(TARGET keyring_vault PROPERTY LINK_FLAGS "${keyring_vault_link_flags} -Wl,--version-script=${CMAKE_SOURCE_DIR}/plugin/keyring_vault/keyring_vault.version") +ENDIF() IF(WITH_KEYRING_VAULT_TEST) ADD_SUBDIRECTORY(keyring_vault-test) From 8756b40953e73ea33bfc9ab2fdf49a089554e274 Mon Sep 17 00:00:00 2001 From: Robert Golebiowski Date: Wed, 10 Jan 2018 21:27:06 +0100 Subject: [PATCH 0398/1221] PS-298: keyring_vault's timeout should be configurable This patch adds keyring_vault_timeout variable. With use of this variable user can control the timeout of keyring_vault - Vault server connection [expressed in seconds]. The default value is 15s, the minimal is 1s and maximal is 86400s (24 hours). The timeout can be disabled by setting keyring_vault_timeout to 0. --- .../keyring_vault_incorrect_server.conf | 4 + plugin/keyring_vault/i_vault_curl.h | 1 + plugin/keyring_vault/i_vault_io.h | 1 + .../mtr/keyring_vault_timeout-master.opt | 1 + .../tests/mtr/keyring_vault_timeout.result | 17 ++ .../tests/mtr/keyring_vault_timeout.test | 64 ++++++ .../tests/mtr/timeout_basic-master.opt | 1 + .../tests/mtr/timeout_basic.result | 87 +++++++++ .../tests/mtr/timeout_basic.test | 183 ++++++++++++++++++ plugin/keyring_vault/vault_curl.cc | 8 +- plugin/keyring_vault/vault_curl.h | 8 +- plugin/keyring_vault/vault_io.h | 5 + plugin/keyring_vault/vault_keyring.cc | 33 +++- plugin/keyring_vault/vault_keys_container.h | 5 + unittest/gunit/keyring_vault/vault_io-t.cc | 9 +- .../keyring_vault/vault_keys_container-t.cc | 3 +- 16 files changed, 417 insertions(+), 13 deletions(-) create mode 100644 mysql-test/std_data/keyring_vault_confs/keyring_vault_incorrect_server.conf create mode 100644 plugin/keyring_vault/tests/mtr/keyring_vault_timeout-master.opt create mode 100644 plugin/keyring_vault/tests/mtr/keyring_vault_timeout.result create mode 100644 plugin/keyring_vault/tests/mtr/keyring_vault_timeout.test create mode 100644 plugin/keyring_vault/tests/mtr/timeout_basic-master.opt create mode 100644 plugin/keyring_vault/tests/mtr/timeout_basic.result create mode 100644 plugin/keyring_vault/tests/mtr/timeout_basic.test diff --git a/mysql-test/std_data/keyring_vault_confs/keyring_vault_incorrect_server.conf b/mysql-test/std_data/keyring_vault_confs/keyring_vault_incorrect_server.conf new file mode 100644 index 000000000000..d01c5326074e --- /dev/null +++ b/mysql-test/std_data/keyring_vault_confs/keyring_vault_incorrect_server.conf @@ -0,0 +1,4 @@ +vault_url = https://vault.public-ci.percona.com +secret_mount_point = secret +token = 58a90c08-8001-fd5f-6192-7498a48eaf2a +vault_ca = MYSQL_TEST_DIR/std_data/keyring_vault_confs/vault_ca.crt diff --git a/plugin/keyring_vault/i_vault_curl.h b/plugin/keyring_vault/i_vault_curl.h index 516e6e784e1b..9ad200993fe0 100644 --- a/plugin/keyring_vault/i_vault_curl.h +++ b/plugin/keyring_vault/i_vault_curl.h @@ -16,6 +16,7 @@ class IVault_curl : public Keyring_alloc virtual bool write_key(const Vault_key &key, Secure_string *response) = 0; virtual bool read_key(const Vault_key &key, Secure_string *response) = 0; virtual bool delete_key(const Vault_key &key, Secure_string *response) = 0; + virtual void set_timeout(uint timeout) = 0; virtual ~IVault_curl() {}; }; diff --git a/plugin/keyring_vault/i_vault_io.h b/plugin/keyring_vault/i_vault_io.h index 8006022bec9f..6b1635e75d37 100644 --- a/plugin/keyring_vault/i_vault_io.h +++ b/plugin/keyring_vault/i_vault_io.h @@ -10,6 +10,7 @@ class IVault_io : public IKeyring_io { public: virtual my_bool retrieve_key_type_and_data(IKey *key) = 0; + virtual void set_curl_timeout(uint timeout) = 0; virtual ~IVault_io() {} }; diff --git a/plugin/keyring_vault/tests/mtr/keyring_vault_timeout-master.opt b/plugin/keyring_vault/tests/mtr/keyring_vault_timeout-master.opt new file mode 100644 index 000000000000..f896e2bda971 --- /dev/null +++ b/plugin/keyring_vault/tests/mtr/keyring_vault_timeout-master.opt @@ -0,0 +1 @@ +$KEYRING_VAULT_PLUGIN_OPT diff --git a/plugin/keyring_vault/tests/mtr/keyring_vault_timeout.result b/plugin/keyring_vault/tests/mtr/keyring_vault_timeout.result new file mode 100644 index 000000000000..da32c2c1990a --- /dev/null +++ b/plugin/keyring_vault/tests/mtr/keyring_vault_timeout.result @@ -0,0 +1,17 @@ +call mtr.add_suppression("\\[Error\\] Plugin keyring_vault reported: 'keyring_vault initialization failure."); +call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'Could not open file with credentials.'"); +call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'CURL returned this error code: 28 with error message : Connection timed out after"); +call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'Could not retrieve list of keys from Vault.'"); +call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'Error while loading keyring content. The keyring might be malformed'"); +call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'CURL returned this error code: 28 with error message : connect\\(\\) timed out!'"); +INSTALL PLUGIN keyring_vault SONAME 'keyring_vault.so'; +include/assert.inc [Default vaule of keyring_vault_timeout should be 15] +SET @@GLOBAL.keyring_vault_timeout=15; +SET @@GLOBAL.keyring_vault_config='MYSQLTEST_VARDIR/std_data/keyring_vault_confs/keyring_vault_incorrect_server.conf'; +ERROR 42000: Variable 'keyring_vault_config' can't be set to the value of 'MYSQLTEST_VARDIR/std_data/keyring_vault_confs/keyring_vault_incorrect_server.conf' +include/assert.inc [Connection time must be bigger than keyring_vault_timeout] +SET @@GLOBAL.keyring_vault_timeout=5; +SET @@global.keyring_vault_config='MYSQLTEST_VARDIR/std_data/keyring_vault_confs/keyring_vault_incorrect_server.conf'; +ERROR 42000: Variable 'keyring_vault_config' can't be set to the value of 'MYSQLTEST_VARDIR/std_data/keyring_vault_confs/keyring_vault_incorrect_server.conf' +include/assert.inc [Connection time must be bigger than keyring_vault_timeout] +UNINSTALL PLUGIN keyring_vault; diff --git a/plugin/keyring_vault/tests/mtr/keyring_vault_timeout.test b/plugin/keyring_vault/tests/mtr/keyring_vault_timeout.test new file mode 100644 index 000000000000..37cebfe5bb26 --- /dev/null +++ b/plugin/keyring_vault/tests/mtr/keyring_vault_timeout.test @@ -0,0 +1,64 @@ +--source include/have_keyring_vault_plugin.inc + +# PS-298: keyring_vault's timeout should be configurable + +call mtr.add_suppression("\\[Error\\] Plugin keyring_vault reported: 'keyring_vault initialization failure."); +call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'Could not open file with credentials.'"); +call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'CURL returned this error code: 28 with error message : Connection timed out after"); +call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'Could not retrieve list of keys from Vault.'"); +call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'Error while loading keyring content. The keyring might be malformed'"); +call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'CURL returned this error code: 28 with error message : connect\\(\\) timed out!'"); + +--let $KEYRING_CONF_FILE_1=$MYSQLTEST_VARDIR/std_data/keyring_vault_confs/keyring_vault_incorrect_server.conf +--let $KEYRING_CONF_TEMPLATE_FILE=$MYSQL_TEST_DIR/std_data/keyring_vault_confs/keyring_vault_incorrect_server.conf +--let $KEYRING_CONF_FILE_TO_GENERATE=$KEYRING_CONF_FILE_1 +--source generate_conf_file.inc + +--replace_regex /\.dll/.so/ +eval INSTALL PLUGIN keyring_vault SONAME '$KEYRING_VAULT_PLUGIN'; + +--let $assert_text= Default vaule of keyring_vault_timeout should be 15 +--let $assert_cond= "[SELECT @@keyring_vault_timeout = 15]" = 1 +--source include/assert.inc + +SET @@GLOBAL.keyring_vault_timeout=15; + +let $connection_time_start= `SELECT UNIX_TIMESTAMP()`; + +# Here, we are trying to set keyring_vault_config variable to existing, but not accessible address. +# As the connection is not possible we should receive connection timeout - according the to value of +# keyring_vault_timeout variable. + +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--error ER_WRONG_VALUE_FOR_VAR +eval SET @@GLOBAL.keyring_vault_config='$KEYRING_CONF_FILE_1'; + +let $connection_time_end= `SELECT UNIX_TIMESTAMP()`; +let $connection_time= `SELECT $connection_time_end - $connection_time_start`; + +# Here, we check if connection timeouted correctly - we should receive timeout after +# keyring_vault_timeout seconds. We do not check the upper bound as we cannot +# estimate how much time connection can take in build system (Jenkins). + +let $timeout= `SELECT @@GLOBAL.keyring_vault_timeout`; +let $assert_text= Connection time must be bigger than keyring_vault_timeout; +let $assert_cond= $timeout <= $connection_time; +source include/assert.inc; + +SET @@GLOBAL.keyring_vault_timeout=5; + +let $connection_time_start= `SELECT UNIX_TIMESTAMP()`; + +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--error ER_WRONG_VALUE_FOR_VAR +eval SET @@global.keyring_vault_config='$KEYRING_CONF_FILE_1'; + +let $connection_time_end= `SELECT UNIX_TIMESTAMP()`; +let $connection_time= `SELECT $connection_time_end - $connection_time_start`; + +let $timeout= `SELECT @@GLOBAL.keyring_vault_timeout`; +let $assert_text= Connection time must be bigger than keyring_vault_timeout; +let $assert_cond= $timeout <= $connection_time; +source include/assert.inc; + +UNINSTALL PLUGIN keyring_vault; diff --git a/plugin/keyring_vault/tests/mtr/timeout_basic-master.opt b/plugin/keyring_vault/tests/mtr/timeout_basic-master.opt new file mode 100644 index 000000000000..3b441dfbebf0 --- /dev/null +++ b/plugin/keyring_vault/tests/mtr/timeout_basic-master.opt @@ -0,0 +1 @@ +$KEYRING_VAULT_PLUGIN_OPT $KEYRING_VAULT_PLUGIN_LOAD diff --git a/plugin/keyring_vault/tests/mtr/timeout_basic.result b/plugin/keyring_vault/tests/mtr/timeout_basic.result new file mode 100644 index 000000000000..82206432b963 --- /dev/null +++ b/plugin/keyring_vault/tests/mtr/timeout_basic.result @@ -0,0 +1,87 @@ +call mtr.add_suppression("\\[Error\\] Plugin keyring_vault reported: 'keyring_vault initialization failure."); +call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'Could not open file with credentials.'"); +SET @start_global_value = @@GLOBAL.keyring_vault_timeout; +SET @@GLOBAL.keyring_vault_timeout = 100; +SET @@GLOBAL.keyring_vault_timeout = DEFAULT; +SELECT @@GLOBAL.keyring_vault_timeout; +@@GLOBAL.keyring_vault_timeout +15 +SELECT @@session.keyring_vault_timeout; +ERROR HY000: Variable 'keyring_vault_timeout' is a GLOBAL variable +SET @@GLOBAL.keyring_vault_timeout = DEFAULT; +include/assert.inc [Default vaule of keyring_vault_timeout should be 15] +# Disable keyring_vault's timeout +SET @@GLOBAL.keyring_vault_timeout= 0; +include/assert.inc [keyring_vault timeout should be disabled (i.e. equal to 0)] +# Turn keyring_vault's timeout and set it to minimal value, i.e. 1s +SET @@GLOBAL.keyring_vault_timeout= 1; +include/assert.inc [keyring_vault timeout should be enabled and set to min (i.e. equal to 1)] +# Set keyring_vault's timeout and set it to maximum value, i.e. 86400s (24 hours) +SET @@GLOBAL.keyring_vault_timeout= 86400; +include/assert.inc [keyring_vault timeout should be set to max (i.e. equal to 86400)] +# Set keyring_vault's timeout to DEFAULT, i.e. 15s +SET @@GLOBAL.keyring_vault_timeout = DEFAULT; +SET @@GLOBAL.keyring_vault_timeout = -1; +Warnings: +Warning 1292 Truncated incorrect keyring_vault_timeout value: '-1' +include/assert.inc [keyring_vault timeout should be 0] +SET @@GLOBAL.keyring_vault_timeout = -1024; +Warnings: +Warning 1292 Truncated incorrect keyring_vault_timeout value: '-1024' +include/assert.inc [keyring_vault timeout should be 0] +# Set to max + 1 +SET @@GLOBAL.keyring_vault_timeout= 86400; +SELECT @@GLOBAL.keyring_vault_timeout; +@@GLOBAL.keyring_vault_timeout +86400 +include/assert.inc [keyring_vault timeout should be set to max (i.e. equal to 86400)] +SET @@GLOBAL.keyring_vault_timeout= 123456789031; +Warnings: +Warning 1292 Truncated incorrect keyring_vault_timeout value: '123456789031' +include/assert.inc [keyring_vault timeout should be set to max (i.e. equal to 86400)] +# Set keyring_vault's timeout to DEFAULT, i.e. 15s +SET @@GLOBAL.keyring_vault_timeout = DEFAULT; +SET @@GLOBAL.keyring_vault_timeout = ' '; +ERROR 42000: Incorrect argument type to variable 'keyring_vault_timeout' +# keyring_vault_timeout should not be changed +include/assert.inc [keyring_vault timeout should be set to default (i.e. equal to 15)] +SET @@GLOBAL.keyring_vault_timeout = ON; +ERROR 42000: Incorrect argument type to variable 'keyring_vault_timeout' +# keyring_vault_timeout should not be changed +include/assert.inc [keyring_vault timeout should be set to default (i.e. equal to 15)] +SET @@GLOBAL.keyring_vault_timeout = OFF; +ERROR 42000: Incorrect argument type to variable 'keyring_vault_timeout' +# keyring_vault_timeout should not be changed +include/assert.inc [keyring_vault timeout should be set to default (i.e. equal to 15)] +SET @@GLOBAL.keyring_vault_timeout = 65530.34; +ERROR 42000: Incorrect argument type to variable 'keyring_vault_timeout' +# keyring_vault_timeout should not be changed +include/assert.inc [keyring_vault timeout should be set to default (i.e. equal to 15)] +SET @@GLOBAL.keyring_vault_timeout ="Test"; +ERROR 42000: Incorrect argument type to variable 'keyring_vault_timeout' +# keyring_vault_timeout should not be changed +include/assert.inc [keyring_vault timeout should be set to default (i.e. equal to 15)] +SET @@GLOBAL.keyring_vault_timeout = True; +# keyring_vault_timeout should be casted to 1 +include/assert.inc [keyring_vault_timeout should be casted to 1] +SET @@GLOBAL.keyring_vault_timeout = False; +# keyring_vault_timeout should be casted to 0 +include/assert.inc [keyring_vault_timeout should be casted to 0] +# Set keyring_vault's timeout to DEFAULT, i.e. 15s +SET @@GLOBAL.keyring_vault_timeout = DEFAULT; +SELECT VARIABLE_VALUE FROM performance_schema.global_variables WHERE VARIABLE_NAME='keyring_vault_timeout'; +VARIABLE_VALUE +15 +include/assert.inc [keyring_vault_timeout should match value in GLOBAL Table] +SET @@GLOBAL.keyring_vault_timeout = 100; +SET keyring_vault_timeout = 1027; +ERROR HY000: Variable 'keyring_vault_timeout' is a GLOBAL variable and should be set with SET GLOBAL +SET @@GLOBAL.keyring_vault_timeout = 1027; +SELECT @@keyring_vault_timeout; +@@keyring_vault_timeout +1027 +SELECT GLOBAL.keyring_vault_config; +ERROR 42S02: Unknown table 'GLOBAL' in field list +SELECT keyring_vault_timeout = @@GLOBAL.keyring_vault_timeout; +ERROR 42S22: Unknown column 'keyring_vault_timeout' in 'field list' +SET @@GLOBAL.keyring_vault_timeout = @start_global_value; diff --git a/plugin/keyring_vault/tests/mtr/timeout_basic.test b/plugin/keyring_vault/tests/mtr/timeout_basic.test new file mode 100644 index 000000000000..0f5d3743fca5 --- /dev/null +++ b/plugin/keyring_vault/tests/mtr/timeout_basic.test @@ -0,0 +1,183 @@ +############################################################################### +# # +# Variable Name: keyring_vault_timeout # +# Scope: GLOBAL # +# Access Type: Dynamic # +# Data Type: numeric # +# Default Value: 15 # +# Range: 0 - 86400 # +# # +############################################################################### + +--source include/have_keyring_vault_plugin.inc +call mtr.add_suppression("\\[Error\\] Plugin keyring_vault reported: 'keyring_vault initialization failure."); +call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'Could not open file with credentials.'"); + +############################################################# +# Save initial value # +############################################################# + +SET @start_global_value = @@GLOBAL.keyring_vault_timeout; + +############################################################ +# Display the DEFAULT value of kering_vault__timeout # +############################################################ + +SET @@GLOBAL.keyring_vault_timeout = 100; +SET @@GLOBAL.keyring_vault_timeout = DEFAULT; +SELECT @@GLOBAL.keyring_vault_timeout; + +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +SELECT @@session.keyring_vault_timeout; + +############################################################ +# Check the DEFAULT value of keyring_vault_timeout # +############################################################ + +SET @@GLOBAL.keyring_vault_timeout = DEFAULT; + +--let $assert_text= Default vaule of keyring_vault_timeout should be 15 +--let $assert_cond= "[SELECT @@GLOBAL.keyring_vault_timeout = 15]" = 1 +--source include/assert.inc + +############################################################################### +# Change the value of keyring_vault_timeout to a valid value for GLOBAL Scope # +############################################################################### + +--echo # Disable keyring_vault's timeout +SET @@GLOBAL.keyring_vault_timeout= 0; +--let $assert_text= keyring_vault timeout should be disabled (i.e. equal to 0) +--let $assert_cond= "[SELECT @@GLOBAL.keyring_vault_timeout = 0]" = 1 +--source include/assert.inc + +--echo # Turn keyring_vault's timeout and set it to minimal value, i.e. 1s +SET @@GLOBAL.keyring_vault_timeout= 1; +--let $assert_text= keyring_vault timeout should be enabled and set to min (i.e. equal to 1) +--let $assert_cond= "[SELECT @@GLOBAL.keyring_vault_timeout = 1]" = 1 +--source include/assert.inc + +--echo # Set keyring_vault's timeout and set it to maximum value, i.e. 86400s (24 hours) +SET @@GLOBAL.keyring_vault_timeout= 86400; +--let $assert_text= keyring_vault timeout should be set to max (i.e. equal to 86400) +--let $assert_cond= "[SELECT @@GLOBAL.keyring_vault_timeout = 86400]" = 1 +--source include/assert.inc + +--echo # Set keyring_vault's timeout to DEFAULT, i.e. 15s +SET @@GLOBAL.keyring_vault_timeout = DEFAULT; + +################################################################# +# Change the value of keyring_vault_timeout to an invalid value # +################################################################# + +SET @@GLOBAL.keyring_vault_timeout = -1; +--let $assert_text= keyring_vault timeout should be 0 +--let $assert_cond= "[SELECT @@GLOBAL.keyring_vault_timeout = 0]" = 1 +--source include/assert.inc +SET @@GLOBAL.keyring_vault_timeout = -1024; +--let $assert_text= keyring_vault timeout should be 0 +--let $assert_cond= "[SELECT @@GLOBAL.keyring_vault_timeout = 0]" = 1 +--source include/assert.inc +--echo # Set to max + 1 +SET @@GLOBAL.keyring_vault_timeout= 86400; +SELECT @@GLOBAL.keyring_vault_timeout; +--let $assert_text= keyring_vault timeout should be set to max (i.e. equal to 86400) +--let $assert_cond= "[SELECT @@GLOBAL.keyring_vault_timeout = 86400]" = 1 +--source include/assert.inc + +SET @@GLOBAL.keyring_vault_timeout= 123456789031; +--let $assert_text= keyring_vault timeout should be set to max (i.e. equal to 86400) +--let $assert_cond= "[SELECT @@GLOBAL.keyring_vault_timeout = 86400]" = 1 +--source include/assert.inc + +--echo # Set keyring_vault's timeout to DEFAULT, i.e. 15s +SET @@GLOBAL.keyring_vault_timeout = DEFAULT; + +--Error ER_WRONG_TYPE_FOR_VAR +SET @@GLOBAL.keyring_vault_timeout = ' '; +--echo # keyring_vault_timeout should not be changed +--let $assert_text= keyring_vault timeout should be set to default (i.e. equal to 15) +--let $assert_cond= "[SELECT @@GLOBAL.keyring_vault_timeout = 15]" = 1 +--source include/assert.inc + +--Error ER_WRONG_TYPE_FOR_VAR +SET @@GLOBAL.keyring_vault_timeout = ON; + +--echo # keyring_vault_timeout should not be changed +--let $assert_text= keyring_vault timeout should be set to default (i.e. equal to 15) +--let $assert_cond= "[SELECT @@GLOBAL.keyring_vault_timeout = 15]" = 1 +--source include/assert.inc + +--Error ER_WRONG_TYPE_FOR_VAR +SET @@GLOBAL.keyring_vault_timeout = OFF; +--echo # keyring_vault_timeout should not be changed +--let $assert_text= keyring_vault timeout should be set to default (i.e. equal to 15) +--let $assert_cond= "[SELECT @@GLOBAL.keyring_vault_timeout = 15]" = 1 +--source include/assert.inc + +--Error ER_WRONG_TYPE_FOR_VAR +SET @@GLOBAL.keyring_vault_timeout = 65530.34; +--echo # keyring_vault_timeout should not be changed +--let $assert_text= keyring_vault timeout should be set to default (i.e. equal to 15) +--let $assert_cond= "[SELECT @@GLOBAL.keyring_vault_timeout = 15]" = 1 +--source include/assert.inc + +--Error ER_WRONG_TYPE_FOR_VAR +SET @@GLOBAL.keyring_vault_timeout ="Test"; +--echo # keyring_vault_timeout should not be changed +--let $assert_text= keyring_vault timeout should be set to default (i.e. equal to 15) +--let $assert_cond= "[SELECT @@GLOBAL.keyring_vault_timeout = 15]" = 1 +--source include/assert.inc + +SET @@GLOBAL.keyring_vault_timeout = True; +--echo # keyring_vault_timeout should be casted to 1 +--let $assert_text= keyring_vault_timeout should be casted to 1 +--let $assert_cond= "[SELECT @@GLOBAL.keyring_vault_timeout = 1]" = 1 +--source include/assert.inc + +SET @@GLOBAL.keyring_vault_timeout = False; +--echo # keyring_vault_timeout should be casted to 0 +--let $assert_text= keyring_vault_timeout should be casted to 0 +--let $assert_cond= "[SELECT @@GLOBAL.keyring_vault_timeout = 0]" = 1 +--source include/assert.inc + +--echo # Set keyring_vault's timeout to DEFAULT, i.e. 15s +SET @@GLOBAL.keyring_vault_timeout = DEFAULT; + +#################################################################### +# Check if the value in GLOBAL Table matches value in variable # +#################################################################### +SELECT VARIABLE_VALUE FROM performance_schema.global_variables WHERE VARIABLE_NAME='keyring_vault_timeout'; +--disable_warnings +--let $assert_text= keyring_vault_timeout should match value in GLOBAL Table +--let $assert_cond= "[SELECT @@GLOBAL.keyring_vault_timeout = VARIABLE_VALUE FROM performance_schema.global_variables WHERE VARIABLE_NAME=\'keyring_vault_timeout\']" = 1 +--source include/assert.inc +--enable_warnings + +######################################################################## +# Check if accessing variable with GLOBAL and without SCOPE # +# points to same global variable # +######################################################################## + +SET @@GLOBAL.keyring_vault_timeout = 100; +--let $assert_text= keyring_vault_timeout with GLOBAL and without SCOPE should point to same global variable +--let $assert_cond= "[SELECT @@GLOBAL.keyring_vault_timeout = @@keyring_vault_timeout]" = 1 + +############################################################################# +# Check if keyring_vault_timeout can be accessed with and without @@ sign # +############################################################################# + +--error ER_GLOBAL_VARIABLE +SET keyring_vault_timeout = 1027; +SET @@GLOBAL.keyring_vault_timeout = 1027; +SELECT @@keyring_vault_timeout; + +--Error ER_UNKNOWN_TABLE +SELECT GLOBAL.keyring_vault_config; + +--Error ER_BAD_FIELD_ERROR +SELECT keyring_vault_timeout = @@GLOBAL.keyring_vault_timeout; + +#################################### +# Restore initial value # +#################################### +SET @@GLOBAL.keyring_vault_timeout = @start_global_value; diff --git a/plugin/keyring_vault/vault_curl.cc b/plugin/keyring_vault/vault_curl.cc index f143e693ffc9..3d55e35f0b6a 100644 --- a/plugin/keyring_vault/vault_curl.cc +++ b/plugin/keyring_vault/vault_curl.cc @@ -14,7 +14,6 @@ namespace keyring { static const size_t max_response_size = 32000000; -static const long timeout = 300; // 5m timeout static MY_TIMER_INFO curl_timer_info; static ulonglong last_ping_time; static bool was_thd_wait_started = false; @@ -173,9 +172,10 @@ bool Vault_curl::setup_curl_session(CURL *curl) (curl_res = curl_easy_setopt(curl, CURLOPT_CAINFO, vault_ca.c_str())) != CURLE_OK ) || (curl_res = curl_easy_setopt(curl, CURLOPT_USE_SSL, CURLUSESSL_ALL)) != CURLE_OK || - (curl_res = curl_easy_setopt(curl, CURLOPT_TIMEOUT, timeout)) != CURLE_OK || - (curl_res = curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, progress_callback)) || - (curl_res = curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0L)) + (curl_res = curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, progress_callback)) != CURLE_OK || + (curl_res = curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0L)) != CURLE_OK || + (curl_res = curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, timeout)) != CURLE_OK || + (curl_res = curl_easy_setopt(curl, CURLOPT_TIMEOUT, timeout)) != CURLE_OK ) { logger->log(MY_ERROR_LEVEL, get_error_from_curl(curl_res).c_str()); diff --git a/plugin/keyring_vault/vault_curl.h b/plugin/keyring_vault/vault_curl.h index 362171fe5ece..0946ef3a49cd 100644 --- a/plugin/keyring_vault/vault_curl.h +++ b/plugin/keyring_vault/vault_curl.h @@ -18,9 +18,10 @@ namespace keyring class Vault_curl : public IVault_curl, private boost::noncopyable { public: - Vault_curl(ILogger *logger) + Vault_curl(ILogger *logger, uint timeout) : logger(logger) , list(NULL) + , timeout(timeout) {} ~Vault_curl() @@ -34,6 +35,10 @@ class Vault_curl : public IVault_curl, private boost::noncopyable virtual bool write_key(const Vault_key &key, Secure_string *response); virtual bool read_key(const Vault_key &key, Secure_string *response); virtual bool delete_key(const Vault_key &key, Secure_string *response); + virtual void set_timeout(uint timeout) + { + this->timeout = timeout; + } private: @@ -49,6 +54,7 @@ class Vault_curl : public IVault_curl, private boost::noncopyable Secure_ostringstream read_data_ss; struct curl_slist *list; Secure_string vault_ca; + uint timeout; }; } //namespace keyring diff --git a/plugin/keyring_vault/vault_io.h b/plugin/keyring_vault/vault_io.h index bda7b8490f09..5d384d41b357 100644 --- a/plugin/keyring_vault/vault_io.h +++ b/plugin/keyring_vault/vault_io.h @@ -38,6 +38,11 @@ class Vault_io : public IVault_io, private boost::noncopyable { return FALSE; } + virtual void set_curl_timeout(uint timeout) + { + DBUG_ASSERT(vault_curl != NULL); + vault_curl->set_timeout(timeout); + } private: bool write_key(const Vault_key &key); diff --git a/plugin/keyring_vault/vault_keyring.cc b/plugin/keyring_vault/vault_keyring.cc index 9063c6549b67..d70e0a018e14 100644 --- a/plugin/keyring_vault/vault_keyring.cc +++ b/plugin/keyring_vault/vault_keyring.cc @@ -39,6 +39,9 @@ static void handle_unknown_exception(const std::string &message_prefix) logger->log(MY_ERROR_LEVEL, error_message.c_str()); } +static char *keyring_vault_config_file= NULL; +static uint keyring_vault_timeout= 0; + int check_keyring_file_data(MYSQL_THD thd MY_ATTRIBUTE((unused)), struct st_mysql_sys_var *var MY_ATTRIBUTE((unused)), void *save, st_mysql_value *value) @@ -62,7 +65,7 @@ int check_keyring_file_data(MYSQL_THD thd MY_ATTRIBUTE((unused)), logger->log(MY_ERROR_LEVEL, "Cannot set keyring_vault_config_file"); return 1; } - boost::movelib::unique_ptr vault_curl(new Vault_curl(logger.get())); + boost::movelib::unique_ptr vault_curl(new Vault_curl(logger.get(), keyring_vault_timeout)); boost::movelib::unique_ptr vault_parser(new Vault_parser(logger.get())); IKeyring_io *keyring_io(new Vault_io(logger.get(), vault_curl.get(), vault_parser.get())); vault_curl.release(); @@ -84,7 +87,6 @@ int check_keyring_file_data(MYSQL_THD thd MY_ATTRIBUTE((unused)), return(0); } -static char *keyring_vault_config_file= NULL; static MYSQL_SYSVAR_STR( config, /* name */ keyring_vault_config_file, /* value */ @@ -95,8 +97,33 @@ static MYSQL_SYSVAR_STR( "" /* default */ ); +static void update_keyring_vault_timeout(MYSQL_THD thd, + st_mysql_sys_var *var, + void *ptr, + const void *val) +{ + DBUG_ASSERT(dynamic_cast(keys.get()) != NULL); + *reinterpret_cast(ptr)= *reinterpret_cast(val); + dynamic_cast(keys.get())->set_curl_timeout(*static_cast(val)); +} + +static MYSQL_SYSVAR_UINT( + timeout, /* name */ + keyring_vault_timeout, /* value */ + PLUGIN_VAR_OPCMDARG, /* flags */ + "The keyring_vault - Vault server connection timeout", /* comment */ + NULL, /* check() */ + update_keyring_vault_timeout, /* update() */ + 15, /* default */ + 0, /* min */ + 86400, /* max - 24h */ + 0 /* blocksize */ +); + + static struct st_mysql_sys_var *keyring_vault_system_variables[]= { MYSQL_SYSVAR(config), + MYSQL_SYSVAR(timeout), NULL }; @@ -115,7 +142,7 @@ static int keyring_vault_init(MYSQL_PLUGIN plugin_info) logger.reset(new Logger(plugin_info)); keys.reset(new Vault_keys_container(logger.get())); - boost::movelib::unique_ptr vault_curl(new Vault_curl(logger.get())); + boost::movelib::unique_ptr vault_curl(new Vault_curl(logger.get(), keyring_vault_timeout)); boost::movelib::unique_ptr vault_parser(new Vault_parser(logger.get())); IKeyring_io *keyring_io= new Vault_io(logger.get(), vault_curl.get(), vault_parser.get()); diff --git a/plugin/keyring_vault/vault_keys_container.h b/plugin/keyring_vault/vault_keys_container.h index deae72013946..c6001a05d41c 100644 --- a/plugin/keyring_vault/vault_keys_container.h +++ b/plugin/keyring_vault/vault_keys_container.h @@ -18,6 +18,11 @@ class Vault_keys_container : public Keys_container, private boost::noncopyable my_bool init(IKeyring_io* keyring_io, std::string keyring_storage_url); virtual IKey* fetch_key(IKey *key); + virtual void set_curl_timeout(uint timeout) + { + DBUG_ASSERT(vault_io != NULL); + vault_io->set_curl_timeout(timeout); + } private: virtual my_bool flush_to_backup(); diff --git a/unittest/gunit/keyring_vault/vault_io-t.cc b/unittest/gunit/keyring_vault/vault_io-t.cc index 4afb4f6580be..bf0e42be5d6e 100644 --- a/unittest/gunit/keyring_vault/vault_io-t.cc +++ b/unittest/gunit/keyring_vault/vault_io-t.cc @@ -40,7 +40,7 @@ namespace keyring__vault_io_unittest protected: virtual void SetUp() { - vault_curl = new Vault_curl(logger); + vault_curl = new Vault_curl(logger, 0); vault_parser = new Vault_parser(logger); } @@ -139,7 +139,7 @@ namespace keyring__vault_io_unittest // ***** // Now fetch two keys with separate Vault_io - Vault_curl *vault_curl2 = new Vault_curl(logger); + Vault_curl *vault_curl2 = new Vault_curl(logger, 0); Vault_parser *vault_parser2 = new Vault_parser(logger); Vault_io vault_io_for_fetching(logger, vault_curl2, vault_parser2); EXPECT_FALSE(vault_io_for_fetching.init(&credential_file_url)); @@ -194,7 +194,7 @@ namespace keyring__vault_io_unittest // ***** // Now fetch two keys with separate Vault_io - incorrect key should have been ignored - Vault_curl *vault_curl2 = new Vault_curl(logger); + Vault_curl *vault_curl2 = new Vault_curl(logger, 0); Vault_parser *vault_parser2 = new Vault_parser(logger); Vault_io vault_io_for_fetching(logger, vault_curl2, vault_parser2); @@ -282,7 +282,7 @@ namespace keyring__vault_io_unittest key_to_remove.set_key_operation(REMOVE_KEY); EXPECT_FALSE(vault_io.flush_to_storage(&key_to_remove)); - Vault_curl *vault_curl2 = new Vault_curl(logger); + Vault_curl *vault_curl2 = new Vault_curl(logger, 0); Vault_parser *vault_parser2 = new Vault_parser(logger); Vault_io vault_io2(logger, vault_curl2, vault_parser2); EXPECT_FALSE(vault_io2.init(&credential_file_url)); @@ -299,6 +299,7 @@ namespace keyring__vault_io_unittest MOCK_METHOD2(write_key, bool(const Vault_key &key, Secure_string *response)); MOCK_METHOD2(read_key, bool(const Vault_key &key, Secure_string *response)); MOCK_METHOD2(delete_key, bool(const Vault_key &key, Secure_string *response)); + MOCK_METHOD1(set_timeout, void(uint timeout)); }; TEST_F(Vault_io_test, ErrorFromVaultCurlOnVaultIOInit) diff --git a/unittest/gunit/keyring_vault/vault_keys_container-t.cc b/unittest/gunit/keyring_vault/vault_keys_container-t.cc index 46209052e8be..14073c7710be 100644 --- a/unittest/gunit/keyring_vault/vault_keys_container-t.cc +++ b/unittest/gunit/keyring_vault/vault_keys_container-t.cc @@ -50,7 +50,7 @@ namespace keyring__vault_keys_container_unittest sample_key = new Vault_key((uuid+"Roberts_key").c_str(), "AES", "Robert", sample_key_data.c_str(), sample_key_data.length()); vault_keys_container = new Vault_keys_container(logger); - vault_curl = new Vault_curl(logger); + vault_curl = new Vault_curl(logger, 0); vault_parser = new Vault_parser(logger); } virtual void TearDown() @@ -310,6 +310,7 @@ namespace keyring__vault_keys_container_unittest MOCK_METHOD0(get_serializer, ISerializer*()); MOCK_METHOD1(get_serialized_object, my_bool(ISerialized_object **serialized_object)); MOCK_METHOD0(has_next_serialized_object, my_bool()); + MOCK_METHOD1(set_curl_timeout, void(uint timeout)); }; class Mock_serialized_object : public ISerialized_object From 5902b96833e17bea38785a96d59d05e95c7c5732 Mon Sep 17 00:00:00 2001 From: Arun Kuruvila Date: Mon, 22 Jan 2018 14:36:40 +0530 Subject: [PATCH 0399/1221] Bug#25968185: INIT_CONNECT PREVENTS CONNECTIONS IF PASSWORD EXPIRED Description: Mysql server restricts client connections from users with expired passwords when the server variable, "--init_connect", is set. Analysis: Mysql server will try to execute the SQL statements set to the server variable "--init_connect" for each client that try to connect to the server. When users with expired password try to connect, mysql server fails to execute the SQL statements set to "init_connect" which in turn restricts the user to connect to the server. Fix: As part of the fix, it has been decided to allow users with expired password (similar approach is taken for users with SUPER privilege) to connect to the server without executing the "init_connect" statements. A warning is printed to the server log that "init_connect" statements were skipped due to the expired password. --- mysql-test/r/init_connect.result | 26 ++++++++++++++- mysql-test/t/init_connect.test | 55 +++++++++++++++++++++++++++++--- sql/sql_connect.cc | 11 ++++++- 3 files changed, 86 insertions(+), 6 deletions(-) diff --git a/mysql-test/r/init_connect.result b/mysql-test/r/init_connect.result index 0ff6c2064228..b3b9099acb95 100644 --- a/mysql-test/r/init_connect.result +++ b/mysql-test/r/init_connect.result @@ -134,7 +134,31 @@ x 17 19 drop trigger trg1; -set global init_connect="set @a='a\\0c'"; revoke all privileges, grant option from mysqltest1@localhost; drop user mysqltest1@localhost; drop table t1, t2; +### +### Bug#25968185: INIT_CONNECT PREVENTS CONNECTIONS IF PASSWORD EXPIRED +### +call mtr.add_suppression("\\[Warning\\] init_connect variable is ignored for user:.* host: localhost due to expired password."); +CREATE USER user1@localhost PASSWORD EXPIRE; +CREATE USER ''@localhost; +UPDATE mysql.user SET password_expired='Y' WHERE user='' AND host='localhost'; +SELECT user, password_expired FROM mysql.user WHERE user='' AND host='localhost'; +user password_expired + Y +FLUSH PRIVILEGES; +SET GLOBAL init_connect="set @a=2;"; +Pattern "\[Warning\] init_connect variable is ignored for user: user1 host: localhost due to expired password." found +SELECT @a; +ERROR HY000: You must reset your password using ALTER USER statement before executing this statement. +SET PASSWORD = 'abc'; +SELECT @a; +@a +NULL +Pattern "\[Warning\] init_connect variable is ignored for user: host: localhost due to expired password." found +SELECT @a; +ERROR HY000: You must reset your password using ALTER USER statement before executing this statement. +DROP USER user1@localhost; +DROP USER ''@localhost; +set global init_connect="set @a='a\\0c'"; diff --git a/mysql-test/t/init_connect.test b/mysql-test/t/init_connect.test index a4149130df80..4521e72078db 100644 --- a/mysql-test/t/init_connect.test +++ b/mysql-test/t/init_connect.test @@ -250,14 +250,61 @@ disconnect con0; disconnect con1; drop trigger trg1; -# Set init connect back to the value provided in init_connect-master.opt -# doesn't matter as server will be restarted -set global init_connect="set @a='a\\0c'"; revoke all privileges, grant option from mysqltest1@localhost; drop user mysqltest1@localhost; drop table t1, t2; +--echo ### +--echo ### Bug#25968185: INIT_CONNECT PREVENTS CONNECTIONS IF PASSWORD EXPIRED +--echo ### + +call mtr.add_suppression("\\[Warning\\] init_connect variable is ignored for user:.* host: localhost due to expired password."); + +CREATE USER user1@localhost PASSWORD EXPIRE; +CREATE USER ''@localhost; +UPDATE mysql.user SET password_expired='Y' WHERE user='' AND host='localhost'; +SELECT user, password_expired FROM mysql.user WHERE user='' AND host='localhost'; +FLUSH PRIVILEGES; + +SET GLOBAL init_connect="set @a=2;"; + +#SCENARRIO 1:- Normal user with expired password. +connect (con1,localhost,user1,,); +connection con1; + +let SEARCH_FILE=$MYSQLTEST_VARDIR/log/mysqld.1.err; +let SEARCH_PATTERN=\[Warning\] init_connect variable is ignored for user: user1 host: localhost due to expired password.; +--source include/search_pattern.inc + +--error ER_MUST_CHANGE_PASSWORD +SELECT @a; +SET PASSWORD = 'abc'; +SELECT @a; + +connection default; +disconnect con1; + +#SCENARRIO 2:- Anonymous user with expired password. +connect (con2,localhost,anonymous,,); +connection con2; + +let SEARCH_FILE=$MYSQLTEST_VARDIR/log/mysqld.1.err; +let SEARCH_PATTERN=\[Warning\] init_connect variable is ignored for user: host: localhost due to expired password.; +--source include/search_pattern.inc + +--error ER_MUST_CHANGE_PASSWORD +SELECT @a; + +connection default; +disconnect con2; + +DROP USER user1@localhost; +DROP USER ''@localhost; + +# Set init connect back to the value provided in init_connect-master.opt +# doesn't matter as server will be restarted +set global init_connect="set @a='a\\0c'"; + # Wait till all disconnects are completed --source include/wait_until_count_sessions.inc - diff --git a/sql/sql_connect.cc b/sql/sql_connect.cc index 4dab599f52d1..23c3a4cee13c 100644 --- a/sql/sql_connect.cc +++ b/sql/sql_connect.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2007, 2016, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -823,7 +823,16 @@ static void prepare_new_connection_state(THD* thd) if (opt_init_connect.length && !(sctx->check_access(SUPER_ACL))) { + if (sctx->password_expired()) + { + sql_print_warning("init_connect variable is ignored for user: %s " + "host: %s due to expired password.", sctx->priv_user().str, + sctx->priv_host().str); + return; + } + execute_init_command(thd, &opt_init_connect, &LOCK_sys_init_connect); + if (thd->is_error()) { Host_errors errors; From 60ba7a2d0c41632b09ba357e384f67b0c9ecf67b Mon Sep 17 00:00:00 2001 From: Shishir Jaiswal Date: Mon, 22 Jan 2018 19:07:33 +0530 Subject: [PATCH 0400/1221] Bug#16617026 - AUDIT PLUGIN DOES NOT INCLUDE PREPARED STATEMENT PARAMETERS DESCRIPTION =========== Audit plugin isn't recording the placeholder's values when a Prepared statement is executed. This defies the very purpose of the plugin since the values aren't there to be reviewed in the audit logs. ANALYSIS ======== There are 2 versions of functions which insert params in case of Prepared statement. One is used to do so by generating the expanded query (which could be written to logs) and the other does without generating it. Based on few condition, this is decided in the Prepared_statement::setup_set_params() during the PREPARE phase itself and the corresponding function is called during EXECUTE phase. FIX === Now calling the _with_log (which generates the expanded query) in case audit plugin(s) is/are enabled. Achieved this by calling is_global_audit_mask_set(), a newly added function to know if even a single audit plugin is active or not. --- sql/sql_audit.cc | 18 +++++++++++++++++- sql/sql_audit.h | 3 ++- sql/sql_prepare.cc | 9 ++++++--- 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/sql/sql_audit.cc b/sql/sql_audit.cc index f31ccb508a89..941afd09a6e7 100644 --- a/sql/sql_audit.cc +++ b/sql/sql_audit.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2007, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -499,6 +499,22 @@ bool is_any_audit_plugin_active(THD *thd MY_ATTRIBUTE((unused))) return (mysql_global_audit_mask[0] & MYSQL_AUDIT_GENERAL_CLASSMASK); } +/** + @brief Checks presence of active audit plugin + + @retval TRUE At least one audit plugin is present + @retval FALSE No audit plugin is present +*/ +bool is_global_audit_mask_set() +{ + for (int i= MYSQL_AUDIT_GENERAL_CLASS; i < MYSQL_AUDIT_CLASS_MASK_SIZE; i++) + { + if (mysql_global_audit_mask[i] != 0) + return true; + } + return false; +} + #else /* EMBEDDED_LIBRARY */ diff --git a/sql/sql_audit.h b/sql/sql_audit.h index 39b9a19aab30..c5dced458594 100644 --- a/sql/sql_audit.h +++ b/sql/sql_audit.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -38,6 +38,7 @@ extern void mysql_audit_acquire_plugins(THD *thd, uint event_class); extern void mysql_audit_notify(THD *thd, uint event_class, uint event_subtype, ...); bool is_any_audit_plugin_active(THD *thd MY_ATTRIBUTE((unused))); +bool is_global_audit_mask_set(); #else #define mysql_audit_notify(...) #endif diff --git a/sql/sql_prepare.cc b/sql/sql_prepare.cc index 0067cbef3d47..5a145bf6cc51 100644 --- a/sql/sql_prepare.cc +++ b/sql/sql_prepare.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2002, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2002, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -3219,8 +3219,11 @@ void Prepared_statement::setup_set_params() because we want to look it up in the query cache) or not. */ if ((mysql_bin_log.is_open() && is_update_query(lex->sql_command)) || - opt_log || opt_slow_log || - query_cache_is_cacheable_query(lex)) + opt_log || opt_slow_log || query_cache_is_cacheable_query(lex) +#ifndef EMBEDDED_LIBRARY + || is_global_audit_mask_set() +#endif + ) { set_params_from_vars= insert_params_from_vars_with_log; #ifndef EMBEDDED_LIBRARY From e366031debc2bd41610472fa7d8f4c5344ce379b Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Wed, 10 Jan 2018 14:20:12 +0100 Subject: [PATCH 0401/1221] Bug#27368078 RPCGEN BINARY USED WITHOUT CHECK OF EXISTENCE On Unix hosts: verify that the rpcgen executable is found when building group replication code. Change-Id: I845b0ac55f388b691289a6fb3fa1454c06c375be --- rapid/plugin/group_replication/rpcgen.cmake | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/rapid/plugin/group_replication/rpcgen.cmake b/rapid/plugin/group_replication/rpcgen.cmake index b9c5895c60ac..f4569cd62141 100644 --- a/rapid/plugin/group_replication/rpcgen.cmake +++ b/rapid/plugin/group_replication/rpcgen.cmake @@ -1,4 +1,4 @@ -# Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -87,6 +87,12 @@ FOREACH(X xcom_vp) ${XCOM_BASEDIR}/xcom_proto_enum.h ${XCOM_BASEDIR}/xcom_limits.h) ELSE() + FIND_PROGRAM(RPCGEN_EXECUTABLE rpcgen DOC "path to the rpcgen executable") + MARK_AS_ADVANCED(RPCGEN_EXECUTABLE) + IF(NOT RPCGEN_EXECUTABLE) + MESSAGE(FATAL_ERROR "Could not find rpcgen") + ENDIF() + # on unix systems try to generate them if needed ADD_CUSTOM_COMMAND(OUTPUT ${x_gen_h} ${x_gen_c} ${x_tmp_plat_h} COMMAND ${CMAKE_COMMAND} -E copy_if_different @@ -103,10 +109,10 @@ FOREACH(X xcom_vp) # generate the sources COMMAND ${CMAKE_COMMAND} -E remove -f ${x_gen_h} - COMMAND rpcgen -C -h -o + COMMAND ${RPCGEN_EXECUTABLE} -C -h -o ${x_gen_h} ${x_tmp_x_canonical_name} COMMAND ${CMAKE_COMMAND} -E remove -f ${x_gen_c} - COMMAND rpcgen -C -c -o + COMMAND ${RPCGEN_EXECUTABLE} -C -c -o ${x_gen_c} ${x_tmp_x_canonical_name} WORKING_DIRECTORY ${gen_xdr_dir} DEPENDS From 3ccc292bb960a938a67d5bb2bd8341e1543681be Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Thu, 11 Jan 2018 14:27:03 +0100 Subject: [PATCH 0402/1221] Bug#27368272 SUN RPC REMOVED FROM GLIBC, ADD OPTION TO DETECT AND USE LIBTIRPC AS REPLACEMENT This is a manual backport of Bug#27233216 INCOMPATIBLE POINTER TYPES WARNING WHEN BUILDING XCOM Made a bit more general: look for tirpc features rather than Alpine Linux Change-Id: I008af3bc2df12bbeb409ec8c509f1a34d2a3dc0a --- rapid/plugin/group_replication/CMakeLists.txt | 3 ++- .../src/bindings/xcom/xcom/xcom_transport.c | 6 +++++- rapid/plugin/group_replication/rpcgen.cmake | 18 ++++++++++++++++++ 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/rapid/plugin/group_replication/CMakeLists.txt b/rapid/plugin/group_replication/CMakeLists.txt index 5bcaa8b0eddb..bce9de48c25b 100644 --- a/rapid/plugin/group_replication/CMakeLists.txt +++ b/rapid/plugin/group_replication/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -218,6 +218,7 @@ MYSQL_ADD_PLUGIN(group_replication LINK_LIBRARIES ${LZ4_LIBRARY} ${SSL_LIBRARIES} + ${TIRPC_LIBRARY} MODULE_ONLY MODULE_OUTPUT_NAME "group_replication") ### INSTALLATION ### diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_transport.c b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_transport.c index 245dda0b9b20..210e12497d95 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_transport.c +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_transport.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -417,7 +417,11 @@ x_putbytes (XDR *xdrs, const char *bp MY_ATTRIBUTE((unused)), u_int len) static u_int +#if defined(__APPLE__) || defined(__FreeBSD__) || defined(HAVE_TIRPC) +x_getpostn(XDR *xdrs) +#else x_getpostn (const XDR *xdrs) +#endif { #ifdef OLD_XDR return (u_int)(xdrs->x_handy); diff --git a/rapid/plugin/group_replication/rpcgen.cmake b/rapid/plugin/group_replication/rpcgen.cmake index f4569cd62141..cccb1c381f8d 100644 --- a/rapid/plugin/group_replication/rpcgen.cmake +++ b/rapid/plugin/group_replication/rpcgen.cmake @@ -93,6 +93,24 @@ FOREACH(X xcom_vp) MESSAGE(FATAL_ERROR "Could not find rpcgen") ENDIF() + # First look for tirpc, then the old Sun RPC + FIND_PATH(RPC_INCLUDE_DIR + NAMES rpc/rpc.h + HINTS /usr/include/tirpc + NO_DEFAULT_PATH + ) + FIND_PATH(RPC_INCLUDE_DIR NAMES rpc/rpc.h) + IF(NOT RPC_INCLUDE_DIR) + MESSAGE(FATAL_ERROR + "Could not find rpc/rpc.h in /usr/include or /usr/include/tirpc") + ENDIF() + MESSAGE(STATUS "RPC_INCLUDE_DIR ${RPC_INCLUDE_DIR}") + IF(RPC_INCLUDE_DIR STREQUAL "/usr/include/tirpc") + INCLUDE_DIRECTORIES(SYSTEM /usr/include/tirpc) + ADD_DEFINITIONS(-DHAVE_TIRPC) + SET(TIRPC_LIBRARY tirpc) + ENDIF() + # on unix systems try to generate them if needed ADD_CUSTOM_COMMAND(OUTPUT ${x_gen_h} ${x_gen_c} ${x_tmp_plat_h} COMMAND ${CMAKE_COMMAND} -E copy_if_different From 54de0d9274850dc5603e19df20a17cc61f61e342 Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Mon, 8 Jan 2018 15:06:40 +0100 Subject: [PATCH 0403/1221] Bug#27356658 -DWITH_ZLIB=SYSTEM BREAKS CMAKE FEATURE TESTS The cmake code for checking "system" zlib was resetting CMAKE_REQUIRED_LIBRARIES This broke several feature tests, and hence broke the build. Change-Id: I27f028d9044bd86bf522a446fedae0783683d273 (cherry picked from commit eca424c8078044f3ba010f6515e5303748f0b8e3) --- cmake/zlib.cmake | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/cmake/zlib.cmake b/cmake/zlib.cmake index d1bd034db670..f67b2a0121f8 100644 --- a/cmake/zlib.cmake +++ b/cmake/zlib.cmake @@ -1,4 +1,4 @@ -# Copyright (c) 2009, 2013, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2009, 2018, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -51,12 +51,13 @@ MACRO (MYSQL_CHECK_ZLIB_WITH_COMPRESS) SET(ZLIB_FIND_QUIETLY TRUE) INCLUDE(FindZLIB) IF(ZLIB_FOUND) - INCLUDE(CheckFunctionExists) - SET(CMAKE_REQUIRED_LIBRARIES z) + INCLUDE(CheckFunctionExists) + SET(SAVE_CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES}) + SET(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} z) CHECK_FUNCTION_EXISTS(crc32 HAVE_CRC32) CHECK_FUNCTION_EXISTS(compressBound HAVE_COMPRESSBOUND) CHECK_FUNCTION_EXISTS(deflateBound HAVE_DEFLATEBOUND) - SET(CMAKE_REQUIRED_LIBRARIES) + SET(CMAKE_REQUIRED_LIBRARIES ${SAVE_CMAKE_REQUIRED_LIBRARIES}) IF(HAVE_CRC32 AND HAVE_COMPRESSBOUND AND HAVE_DEFLATEBOUND) SET(ZLIB_LIBRARY ${ZLIB_LIBRARIES} CACHE INTERNAL "System zlib library") SET(WITH_ZLIB "system" CACHE STRING From 80b0d74278afba30ca490e653c5d922bfc32497a Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Mon, 22 Jan 2018 12:41:08 +0100 Subject: [PATCH 0404/1221] Fix broken build on Fedora release 28 (Rawhide) sql/item_strfunc.cc:2276:14: error: crypt was not declared in this scope Change-Id: I6efa4a369c9176c166045c7621a2976b415cbca4 --- config.h.cmake | 3 ++- configure.cmake | 3 ++- sql/item_strfunc.cc | 9 ++++++++- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/config.h.cmake b/config.h.cmake index 46c133e002e5..5d98561707e4 100644 --- a/config.h.cmake +++ b/config.h.cmake @@ -1,4 +1,4 @@ -/* Copyright (c) 2009, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2009, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -35,6 +35,7 @@ /* Header files */ #cmakedefine HAVE_ALLOCA_H 1 #cmakedefine HAVE_ARPA_INET_H 1 +#cmakedefine HAVE_CRYPT_H 1 #cmakedefine HAVE_DLFCN_H 1 #cmakedefine HAVE_EXECINFO_H 1 #cmakedefine HAVE_FPU_CONTROL_H 1 diff --git a/configure.cmake b/configure.cmake index de004f55801f..2f3aa2fda5e6 100644 --- a/configure.cmake +++ b/configure.cmake @@ -1,4 +1,4 @@ -# Copyright (c) 2009, 2017, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2009, 2018, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -466,6 +466,7 @@ INCLUDE (CheckIncludeFiles) CHECK_INCLUDE_FILES (alloca.h HAVE_ALLOCA_H) CHECK_INCLUDE_FILES (arpa/inet.h HAVE_ARPA_INET_H) +CHECK_INCLUDE_FILES (crypt.h HAVE_CRYPT_H) CHECK_INCLUDE_FILES (dlfcn.h HAVE_DLFCN_H) CHECK_INCLUDE_FILES (execinfo.h HAVE_EXECINFO_H) CHECK_INCLUDE_FILES (fpu_control.h HAVE_FPU_CONTROL_H) diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc index 1c3f960e3d01..bae2c7303d9c 100644 --- a/sql/item_strfunc.cc +++ b/sql/item_strfunc.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -32,6 +32,13 @@ #include "item_strfunc.h" +#ifdef HAVE_UNISTD_H +#include +#endif +#ifdef HAVE_CRYPT_H +#include +#endif + #include "base64.h" // base64_encode_max_arg_length #include "my_aes.h" // MY_AES_IV_SIZE #include "my_md5.h" // MD5_HASH_SIZE From 09e1a91b5f18b8c23d4c32886c522fd366e3c2f6 Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Mon, 22 Jan 2018 16:26:08 +0100 Subject: [PATCH 0405/1221] Bug#27368272 SUN RPC REMOVED FROM GLIBC, ADD OPTION TO DETECT AND USE LIBTIRPC AS REPLACEMENT Additional patch to handle systems where *both* Sun RPC and tirpc are installed. Change-Id: Ia3185003585385d73ca3ad8a5ea60fa594609938 --- rapid/plugin/group_replication/configure.cmake | 11 ++++++++++- rapid/plugin/group_replication/rpcgen.cmake | 7 ------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/rapid/plugin/group_replication/configure.cmake b/rapid/plugin/group_replication/configure.cmake index 59a074bd12da..16544429543b 100644 --- a/rapid/plugin/group_replication/configure.cmake +++ b/rapid/plugin/group_replication/configure.cmake @@ -1,4 +1,4 @@ -# Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -50,8 +50,17 @@ IF (WIN32) ENDIF() IF (NOT WIN32) + # First look for tirpc, then the old Sun RPC + FIND_PATH(RPC_INCLUDE_DIR + NAMES rpc/rpc.h + HINTS /usr/include/tirpc + NO_DEFAULT_PATH + ) + FIND_PATH(RPC_INCLUDE_DIR NAMES rpc/rpc.h) + SET (CMAKE_REQUIRED_FLAGS_BACKUP ${CMAKE_REQUIRED_FLAGS}) SET (CMAKE_REQUIRED_FLAGS "-Wno-error") + SET (CMAKE_REQUIRED_INCLUDES ${RPC_INCLUDE_DIR}) ENDIF() # diff --git a/rapid/plugin/group_replication/rpcgen.cmake b/rapid/plugin/group_replication/rpcgen.cmake index cccb1c381f8d..f8af46397a42 100644 --- a/rapid/plugin/group_replication/rpcgen.cmake +++ b/rapid/plugin/group_replication/rpcgen.cmake @@ -93,13 +93,6 @@ FOREACH(X xcom_vp) MESSAGE(FATAL_ERROR "Could not find rpcgen") ENDIF() - # First look for tirpc, then the old Sun RPC - FIND_PATH(RPC_INCLUDE_DIR - NAMES rpc/rpc.h - HINTS /usr/include/tirpc - NO_DEFAULT_PATH - ) - FIND_PATH(RPC_INCLUDE_DIR NAMES rpc/rpc.h) IF(NOT RPC_INCLUDE_DIR) MESSAGE(FATAL_ERROR "Could not find rpc/rpc.h in /usr/include or /usr/include/tirpc") From e30e471275abbb9f6b3924a9e1bb03af3dc0c2af Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Mon, 22 Jan 2018 10:58:00 +0100 Subject: [PATCH 0406/1221] PS-276: Avoid long buffer wait times on busy servers This was caused by buf_flush_wait_flushed, which implemented waiting for flushing the latest LSN the following way: For every buffer pool: * check latest LSN * wait until the LSN is flushed With multiple buffer pools, when other sessions also resulted in buffer writes, this resulted in the later buffers waiting for more recent flushes. To make sure that the function only waits to the point of the latest LSNs at the moment of its calls, the implementation was changed to: For every buffer pool: * check the latest LSN For every buffer pool: * wait until the previously checked/stored LSN is flushed --- storage/innobase/buf/buf0flu.cc | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/storage/innobase/buf/buf0flu.cc b/storage/innobase/buf/buf0flu.cc index 0a359670c6fa..7af965063397 100644 --- a/storage/innobase/buf/buf0flu.cc +++ b/storage/innobase/buf/buf0flu.cc @@ -2091,10 +2091,10 @@ void buf_flush_wait_flushed( lsn_t new_oldest) { + lsn_t instance_newest[MAX_BUFFER_POOLS]; for (ulint i = 0; i < srv_buf_pool_instances; ++i) { buf_pool_t* buf_pool; - lsn_t oldest; - lsn_t instance_newest = 0; + instance_newest[i] = 0; buf_pool = buf_pool_from_array(i); @@ -2113,11 +2113,17 @@ buf_flush_wait_flushed( if (bpage != NULL) { ut_ad(bpage->in_flush_list); - instance_newest = bpage->oldest_modification; + instance_newest[i] = bpage->oldest_modification; } buf_flush_list_mutex_exit(buf_pool); } + } + + for (ulint i = 0; i < srv_buf_pool_instances; ++i) { + lsn_t oldest; + buf_pool_t* buf_pool; + buf_pool = buf_pool_from_array(i); for (;;) { /* We don't need to wait for fsync of the flushed @@ -2147,7 +2153,7 @@ buf_flush_wait_flushed( if (oldest == 0 || oldest >= new_oldest || (new_oldest == LSN_MAX && oldest - > instance_newest)) { + > instance_newest[i])) { break; } From 104ab1267d49235dc34b86fe47fb784a463c5d83 Mon Sep 17 00:00:00 2001 From: Allen Lai Date: Tue, 23 Jan 2018 17:05:03 +0800 Subject: [PATCH 0407/1221] Bug#27399897 PUNCH HOLE IS MISSED IN FIRST COMPRESSION OF PAGES. The previous patch exposed an old incorrect code. It skipped punch hole in AIO, even punch hole is set. The followup patch is to set correct slot->skip_punch_hole. Reviewed by Sunny Bains over IM. --- storage/innobase/os/os0file.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage/innobase/os/os0file.cc b/storage/innobase/os/os0file.cc index 2c055fbe8968..091e6ee549b9 100644 --- a/storage/innobase/os/os0file.cc +++ b/storage/innobase/os/os0file.cc @@ -7005,7 +7005,7 @@ AIO::reserve_slot( #else slot->len = static_cast(compressed_len); #endif /* _WIN32 */ - slot->skip_punch_hole = type.punch_hole(); + slot->skip_punch_hole = !type.punch_hole(); acquire(); } From 538ef1f623d6e0bb1495ba43763bb2295b144b81 Mon Sep 17 00:00:00 2001 From: Dmitry Shulga Date: Mon, 19 Mar 2012 13:38:46 +0600 Subject: [PATCH 0408/1221] Fix bug PS-2415 (Test main.innodb_mysql_lock is unstable) Fix by cherry-picking the fix from upstream 5.6. Fixed bug#13625834 - main.innodb_mysql_lock test fails on debian5.0-x86_64 sporadically. The reason for this bug is that there was a race condition in checking for 'update' state in wait_condition loop and acquiring real transaction lock during execution of statement 'INSERT'. Such race condition arised since there was a time window between the step when server sets a transaction state in 'update' value and when the real lock for transation is acquired. Such race condition could result in successful execution of the following statement 'INSERT INTO t1 VALUES (2)' that else should failed with error ER_LOCK_DEADLOCK. To eliminate this race condition we replaced the conditon of waiting for lock by polling the table information_schema.innodb_trx until transaction will be locked. (cherry picked from commit 0454f5aba958117a777bab005ed36815a073d3c7) --- mysql-test/r/innodb_mysql_lock.result | 1 + mysql-test/t/innodb_mysql_lock.test | 8 +++++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/mysql-test/r/innodb_mysql_lock.result b/mysql-test/r/innodb_mysql_lock.result index 4c7e7f119873..1415c1f1684d 100644 --- a/mysql-test/r/innodb_mysql_lock.result +++ b/mysql-test/r/innodb_mysql_lock.result @@ -14,6 +14,7 @@ INSERT INTO t1 VALUES (1); set @@autocommit=0; DROP TABLE t1; # Connection 1 +# Waiting for until transaction will be locked inside innodb subsystem # Connection 1 is now holding the lock. # Issuing insert from connection 1 while connection 2&3 # is waiting for the lock should give a deadlock error. diff --git a/mysql-test/t/innodb_mysql_lock.test b/mysql-test/t/innodb_mysql_lock.test index 629da27660e3..cf642ed04e68 100644 --- a/mysql-test/t/innodb_mysql_lock.test +++ b/mysql-test/t/innodb_mysql_lock.test @@ -34,10 +34,12 @@ set @@autocommit=0; --echo # Connection 1 connection con1; +--echo # Waiting for until transaction will be locked inside innodb subsystem let $wait_condition= - SELECT COUNT(*) = 1 FROM information_schema.processlist - WHERE info = "INSERT INTO t1 VALUES (1)" and - state = "update"; + SELECT COUNT(*) = 1 FROM information_schema.innodb_trx + WHERE trx_query = 'INSERT INTO t1 VALUES (1)' AND + trx_operation_state = 'inserting' AND + trx_state = 'LOCK WAIT'; --source include/wait_condition.inc let $wait_condition= SELECT COUNT(*) = 1 FROM information_schema.processlist From fdd685698fa0bc8b5d6cffe23ae8e1f63f94ade2 Mon Sep 17 00:00:00 2001 From: Przemek Skibinski Date: Thu, 18 Jan 2018 15:00:06 +0100 Subject: [PATCH 0409/1221] Fix bug 1660628 (-Wmaybe-uninitialized sql_planner.cc compilation warnings) Disable warnings for save_to_position() in sql/sql_planner.cc, as the uninitialization itself is intentional. --- config.h.cmake | 3 +++ configure.cmake | 8 ++++++++ include/my_compiler.h | 26 ++++++++++++++++++++++++++ sql/sql_planner.cc | 17 ++++++++--------- 4 files changed, 45 insertions(+), 9 deletions(-) diff --git a/config.h.cmake b/config.h.cmake index 3dc2bf507bbb..89aaa27ad580 100644 --- a/config.h.cmake +++ b/config.h.cmake @@ -674,4 +674,7 @@ #cmakedefine DEFAULT_SECURE_FILE_PRIV_DIR @DEFAULT_SECURE_FILE_PRIV_DIR@ #cmakedefine DEFAULT_SECURE_FILE_PRIV_EMBEDDED_DIR @DEFAULT_SECURE_FILE_PRIV_EMBEDDED_DIR@ +#cmakedefine HAVE_WMAYBE_UNINITIALIZED +#cmakedefine HAVE_PRAGMA_GCC_DIAGNOSTIC_PUSH + #endif diff --git a/configure.cmake b/configure.cmake index 41d4fb01a66d..31af30fa9f09 100644 --- a/configure.cmake +++ b/configure.cmake @@ -1262,3 +1262,11 @@ IF(HAVE_NUMAIF_H AND WITH_NUMA) HAVE_LIBNUMA) SET(CMAKE_REQUIRED_LIBRARIES ${SAVE_CMAKE_REQUIRED_LIBRARIES}) ENDIF() + +MY_CHECK_CXX_COMPILER_FLAG("-Wmaybe-uninitialized" HAVE_WMAYBE_UNINITIALIZED) + +SET(SAVE_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}") +SET(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -Werror") +CHECK_CXX_SOURCE_COMPILES("_Pragma(\"GCC diagnostic push\") int main() { }" + HAVE_PRAGMA_GCC_DIAGNOSTIC_PUSH) +SET(CMAKE_REQUIRED_FLAGS "${SAVE_CMAKE_REQUIRED_FLAGS}") diff --git a/include/my_compiler.h b/include/my_compiler.h index 000d4e42848d..2f2e3b30356c 100644 --- a/include/my_compiler.h +++ b/include/my_compiler.h @@ -150,4 +150,30 @@ struct my_aligned_storage #include +#ifdef HAVE_WMAYBE_UNINITIALIZED +# define WMAYBE_UNINITIALIZED_OPTION "-Wmaybe-uninitialized" +#else +# define WMAYBE_UNINITIALIZED_OPTION "-Wuninitialized" +#endif + +#define MY_DO_PRAGMA(x) _Pragma(x) + +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_PUSH +# define MY_DISABLE_WARN_MAYBE_UNINITIALIZED \ + _Pragma("GCC diagnostic push") \ + MY_DO_PRAGMA(STRINGIFY_ARG(GCC diagnostic ignored WMAYBE_UNINITIALIZED_OPTION)) +# define MY_RESTORE_WARN_MAYBE_UNINITIALIZED \ + _Pragma("GCC diagnostic pop") +#else +# define MY_DISABLE_WARN_MAYBE_UNINITIALIZED \ + MY_DO_PRAGMA(STRINGIFY_ARG(GCC diagnostic ignored WMAYBE_UNINITIALIZED_OPTION)) + /* true for gcc 4.6+ and all other compilers */ +# if defined(__clang__) || !defined(__GNUC__) || MY_GNUC_PREREQ(4,6) +# define MY_RESTORE_WARN_MAYBE_UNINITIALIZED \ + MY_DO_PRAGMA(STRINGIFY_ARG(GCC diagnostic warning WMAYBE_UNINITIALIZED_OPTION)) +# else +# define MY_RESTORE_WARN_MAYBE_UNINITIALIZED +# endif +#endif + #endif /* MY_COMPILER_INCLUDED */ diff --git a/sql/sql_planner.cc b/sql/sql_planner.cc index a2c561370fd0..061aec6425b9 100644 --- a/sql/sql_planner.cc +++ b/sql/sql_planner.cc @@ -116,16 +116,8 @@ class Loose_scan_opt best_loose_scan_start_key - same Not initializing them causes compiler warnings with g++ at -O1 or higher, but initializing them would cause a 2% CPU time loss in a 20-table plan - search. So we initialize only if warnings would stop the build. + search. */ -#ifdef COMPILE_FLAG_WERROR - bound_sj_equalities= 0; - quick_max_loose_keypart= 0; - best_loose_scan_key= 0; - best_loose_scan_records= 0; - best_max_loose_keypart= 0; - best_loose_scan_start_key= NULL; -#endif } void init(JOIN_TAB *s, table_map remaining_tables, @@ -324,6 +316,10 @@ class Loose_scan_opt } } +// See the comment at Loose_scan_opt::Loose_scan_opt for why this warning has +// been left in the code intentionally +MY_DISABLE_WARN_MAYBE_UNINITIALIZED + void save_to_position(JOIN_TAB *tab, POSITION *pos) { pos->read_time= best_loose_scan_cost; @@ -342,6 +338,9 @@ class Loose_scan_opt "(range/index access)")); } } + +MY_RESTORE_WARN_MAYBE_UNINITIALIZED + }; From b7cb587ac422f1003f3fda43ba91d32910fdc8a4 Mon Sep 17 00:00:00 2001 From: Laurynas Biveinis Date: Thu, 18 Jan 2018 11:38:51 +0200 Subject: [PATCH 0410/1221] Fix bug 1689268 (Fulltext search can not find word which contains punctuation marks) Full text search is unable to find words with various punctuation characters in boolean search mode, although those characters are indexed with ngram parser. Introduce this ability by a new server variable ft_query_extra_word_chars, to stay backwards and drop-in compatible by default. When it's enabled, all the non-whitespace symbols are considered to be word symbols by FTS query parser, except for the boolean search syntax symbols. The latter ones are also considered to be word symbols inside double quote. This only applies for the query tokenizer, and the indexing tokenizer is not changed in any way. Because of this, the double quote symbol itself is never considered a word symbol, as no existing indexing tokenizer does so, thus searching for it would never return documents. - Plugin API: introduced new function thd_get_ft_query_extra_word_chars to get the variable value for the current thread. As the variable itself is a core server one, not plugin, THDVAR macros from the plugin API do not work - Make InnoDB FTS tokenizer consider the new variable when parsing queries, but never when indexing documents. - Make ngram and mecab full text search plugins consider the variable value for query parsing. - Add tests for InnoDB default and ngram parser, and MyISAM ngram parser (which is shared with InnoDB). --- include/mysql/plugin.h | 8 + .../percona_ft_query_extra_word_chars.inc | 63 +++++ mysql-test/r/fulltext_var.result | 1 + .../percona_ft_query_extra_word_chars.result | 233 ++++++++++++++++ .../suite/innodb_fts/r/fulltext_var.result | 1 + .../percona_ft_query_extra_word_chars.result | 253 ++++++++++++++++++ .../t/percona_ft_query_extra_word_chars.test | 111 ++++++++ .../r/ft_query_extra_word_chars_basic.result | 99 +++++++ .../t/ft_query_extra_word_chars_basic.test | 70 +++++ .../t/percona_ft_query_extra_word_chars.test | 60 +++++ plugin/fulltext/mecab_parser/plugin_mecab.cc | 5 +- plugin/fulltext/ngram_parser/plugin_ngram.cc | 5 +- sql/sql_class.cc | 13 + sql/sql_class.h | 2 + sql/sys_vars.cc | 7 + storage/innobase/fts/fts0ast.cc | 5 +- storage/innobase/fts/fts0fts.cc | 4 +- storage/innobase/fts/fts0plugin.cc | 3 +- storage/innobase/fts/fts0que.cc | 22 +- storage/innobase/handler/ha_innodb.cc | 12 +- storage/innobase/include/fts0fts.h | 3 + storage/innobase/include/fts0tokenize.h | 21 +- storage/innobase/row/row0ftsort.cc | 3 +- 23 files changed, 981 insertions(+), 23 deletions(-) create mode 100644 mysql-test/include/percona_ft_query_extra_word_chars.inc create mode 100644 mysql-test/r/percona_ft_query_extra_word_chars.result create mode 100644 mysql-test/suite/innodb_fts/r/percona_ft_query_extra_word_chars.result create mode 100644 mysql-test/suite/innodb_fts/t/percona_ft_query_extra_word_chars.test create mode 100644 mysql-test/suite/sys_vars/r/ft_query_extra_word_chars_basic.result create mode 100644 mysql-test/suite/sys_vars/t/ft_query_extra_word_chars_basic.test create mode 100644 mysql-test/t/percona_ft_query_extra_word_chars.test diff --git a/include/mysql/plugin.h b/include/mysql/plugin.h index 500dea99a6b4..5d25de3c15a8 100644 --- a/include/mysql/plugin.h +++ b/include/mysql/plugin.h @@ -778,6 +778,14 @@ int thd_command(const MYSQL_THD thd); long long thd_start_time(const MYSQL_THD thd); void thd_kill(unsigned long id); +/** + Check whether ft_query_extra_word_chars server variable is enabled for the + current session + + @return ft_query_extra_word_chars value +*/ +int thd_get_ft_query_extra_word_chars(void); + #ifdef __cplusplus } #endif diff --git a/mysql-test/include/percona_ft_query_extra_word_chars.inc b/mysql-test/include/percona_ft_query_extra_word_chars.inc new file mode 100644 index 000000000000..cb5c5010ccae --- /dev/null +++ b/mysql-test/include/percona_ft_query_extra_word_chars.inc @@ -0,0 +1,63 @@ +# +# Helper include file to test ft_query_extra_word_chars functionality +# +# required arg: +# - $ft_query_extra_word_chars = setup: to create words table and run_queries SP +# - $ft_query_extra_word_chars = cleanup: to drop them +# + +if ($ft_query_extra_word_chars == 'setup') +{ + --echo # + --echo # Setup ft_query_extra_word_chars testing + --echo # + + SET NAMES utf8; + + CREATE TABLE words(id INT PRIMARY KEY AUTO_INCREMENT, + a TEXT COLLATE utf8mb4_bin); + INSERT INTO words (a) VALUES ('abcdef'); + INSERT INTO words (a) VALUES ('ąbčdėf'); + INSERT INTO words (a) VALUES ('ąbč_dėf'); + INSERT INTO words (a) VALUES ('ąbč!dėf'); + INSERT INTO words (a) VALUES ('ąbč,dėf'); + INSERT INTO words (a) VALUES ('ąbč dėf'); + # Words containing default FTS boolean search syntax characters + INSERT INTO words (a) VALUES ('+bčę'); + INSERT INTO words (a) VALUES ('>ąbč <()~*:""&| ft_max_word_len 84 ft_min_word_len 4 ft_query_expansion_limit 20 +ft_query_extra_word_chars OFF ft_stopword_file (built-in) create table t1 (b text not null); insert t1 values ('aaaaaa bbbbbb cccccc'); diff --git a/mysql-test/r/percona_ft_query_extra_word_chars.result b/mysql-test/r/percona_ft_query_extra_word_chars.result new file mode 100644 index 000000000000..f1f8d2289051 --- /dev/null +++ b/mysql-test/r/percona_ft_query_extra_word_chars.result @@ -0,0 +1,233 @@ +# +# Setup ft_query_extra_word_chars testing +# +SET NAMES utf8; +CREATE TABLE words(id INT PRIMARY KEY AUTO_INCREMENT, +a TEXT COLLATE utf8mb4_bin); +INSERT INTO words (a) VALUES ('abcdef'); +INSERT INTO words (a) VALUES ('ąbčdėf'); +INSERT INTO words (a) VALUES ('ąbč_dėf'); +INSERT INTO words (a) VALUES ('ąbč!dėf'); +INSERT INTO words (a) VALUES ('ąbč,dėf'); +INSERT INTO words (a) VALUES ('ąbč dėf'); +INSERT INTO words (a) VALUES ('+bčę'); +INSERT INTO words (a) VALUES ('>ąbč <()~*:""&| ft_max_word_len 84 ft_min_word_len 4 ft_query_expansion_limit 20 +ft_query_extra_word_chars OFF ft_stopword_file (built-in) create table t1 (b text not null, fulltext(b)) engine = innodb; insert t1 values ('aaaaaa bbbbbb cccccc'); diff --git a/mysql-test/suite/innodb_fts/r/percona_ft_query_extra_word_chars.result b/mysql-test/suite/innodb_fts/r/percona_ft_query_extra_word_chars.result new file mode 100644 index 000000000000..cab92b4813bd --- /dev/null +++ b/mysql-test/suite/innodb_fts/r/percona_ft_query_extra_word_chars.result @@ -0,0 +1,253 @@ +# +# Setup ft_query_extra_word_chars testing +# +SET NAMES utf8; +CREATE TABLE words(id INT PRIMARY KEY AUTO_INCREMENT, +a TEXT COLLATE utf8mb4_bin); +INSERT INTO words (a) VALUES ('abcdef'); +INSERT INTO words (a) VALUES ('ąbčdėf'); +INSERT INTO words (a) VALUES ('ąbč_dėf'); +INSERT INTO words (a) VALUES ('ąbč!dėf'); +INSERT INTO words (a) VALUES ('ąbč,dėf'); +INSERT INTO words (a) VALUES ('ąbč dėf'); +INSERT INTO words (a) VALUES ('+bčę'); +INSERT INTO words (a) VALUES ('>ąbč (doc); uchar* end = start + doc_length; FT_WORD word = {NULL, 0, 0}; + const bool extra_word_chars = + thd_get_ft_query_extra_word_chars(); - while (fts_get_word(param->cs, &start, end, &word, &bool_info)) { + while (fts_get_word(param->cs, extra_word_chars, &start, end, + &word, &bool_info)) { /* Don't convert term with wildcard. */ if (bool_info.type == FT_TOKEN_WORD && !bool_info.trunc) { diff --git a/plugin/fulltext/ngram_parser/plugin_ngram.cc b/plugin/fulltext/ngram_parser/plugin_ngram.cc index 27fd46c46d8a..d9661bc6679a 100644 --- a/plugin/fulltext/ngram_parser/plugin_ngram.cc +++ b/plugin/fulltext/ngram_parser/plugin_ngram.cc @@ -221,10 +221,13 @@ ngram_parser_parse( break; case MYSQL_FTPARSER_FULL_BOOLEAN_INFO: + const bool extra_word_chars = + thd_get_ft_query_extra_word_chars(); /* Ngram parser cannot handle query in boolean mode, so we first parse query into words with boolean info, then we parse the words into ngram. */ - while (fts_get_word(cs, start, end, &word, &bool_info)) { + while (fts_get_word(cs, extra_word_chars, start, end, &word, + &bool_info)) { if (bool_info.type == FT_TOKEN_WORD) { if (bool_info.quot != NULL) { /* Phrase search */ diff --git a/sql/sql_class.cc b/sql/sql_class.cc index 3d1c67c33444..5394a18082b9 100644 --- a/sql/sql_class.cc +++ b/sql/sql_class.cc @@ -1045,6 +1045,19 @@ void thd_kill(ulong id) mysql_mutex_unlock(&thd->LOCK_thd_data); } +/** + Check whether ft_query_extra_word_chars server variable is enabled for the + current session + + @return ft_query_extra_word_chars value +*/ +extern "C" +int thd_get_ft_query_extra_word_chars(void) +{ + const THD* thd= current_thd; + return thd ? thd->variables.ft_query_extra_word_chars : 0; +} + /** Returns the partition_info working copy. Used to see if a table should be created with partitioning. diff --git a/sql/sql_class.h b/sql/sql_class.h index 7b507194ad70..49b2b5221f04 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -622,6 +622,8 @@ typedef struct system_variables 'COLUMN_TYPE' field. */ my_bool show_old_temporals; + + my_bool ft_query_extra_word_chars; } SV; diff --git a/sql/sys_vars.cc b/sql/sys_vars.cc index a991b1c3075a..ef443312b927 100644 --- a/sql/sys_vars.cc +++ b/sql/sys_vars.cc @@ -1765,6 +1765,13 @@ static Sys_var_charptr Sys_ft_stopword_file( READ_ONLY GLOBAL_VAR(ft_stopword_file), CMD_LINE(REQUIRED_ARG), IN_FS_CHARSET, DEFAULT(0)); +static Sys_var_mybool Sys_ft_query_extra_word_chars( + "ft_query_extra_word_chars", + "If enabled, all non-whitespace characters are considered word symbols " + "for full text search queries", + SESSION_VAR(ft_query_extra_word_chars), CMD_LINE(OPT_ARG), + DEFAULT(FALSE)); + static Sys_var_mybool Sys_ignore_builtin_innodb( "ignore_builtin_innodb", "IGNORED. This option will be removed in future releases. " diff --git a/storage/innobase/fts/fts0ast.cc b/storage/innobase/fts/fts0ast.cc index 8c542aab2899..fe225f6d0025 100644 --- a/storage/innobase/fts/fts0ast.cc +++ b/storage/innobase/fts/fts0ast.cc @@ -90,6 +90,8 @@ fts_ast_create_node_term( fts_ast_node_t* node = NULL; fts_ast_node_t* node_list = NULL; fts_ast_node_t* first_node = NULL; + const bool extra_word_chars = + thd_get_ft_query_extra_word_chars(); /* Scan the incoming string and filter out any "non-word" characters */ while (cur_pos < len) { @@ -99,7 +101,8 @@ fts_ast_create_node_term( cur_len = innobase_mysql_fts_get_token( state->charset, reinterpret_cast(ptr->str) + cur_pos, - reinterpret_cast(ptr->str) + len, &str); + reinterpret_cast(ptr->str) + len, + extra_word_chars, &str); if (cur_len == 0) { break; diff --git a/storage/innobase/fts/fts0fts.cc b/storage/innobase/fts/fts0fts.cc index 18558f7065fe..50829fa9c340 100644 --- a/storage/innobase/fts/fts0fts.cc +++ b/storage/innobase/fts/fts0fts.cc @@ -5037,7 +5037,7 @@ fts_process_token( ret = innobase_mysql_fts_get_token( doc->charset, doc->text.f_str + start_pos, - doc->text.f_str + doc->text.f_len, &str); + doc->text.f_str + doc->text.f_len, false, &str); position = start_pos + ret - str.f_len + add_pos; @@ -5104,7 +5104,7 @@ fts_tokenize_document_internal( inc = innobase_mysql_fts_get_token( const_cast(param->cs), reinterpret_cast(doc) + i, - reinterpret_cast(doc) + len, + reinterpret_cast(doc) + len, false, &str); if (str.f_len > 0) { diff --git a/storage/innobase/fts/fts0plugin.cc b/storage/innobase/fts/fts0plugin.cc index 93763140e7c5..eb83368a1090 100644 --- a/storage/innobase/fts/fts0plugin.cc +++ b/storage/innobase/fts/fts0plugin.cc @@ -240,13 +240,14 @@ fts_parse_query_internal( uchar** start = reinterpret_cast(&query); uchar* end = reinterpret_cast(query + len); FT_WORD w = {NULL, 0, 0}; + const bool extra_word_chars = thd_get_ft_query_extra_word_chars(); info.prev = ' '; info.quot = 0; memset(&w, 0, sizeof(w)); /* Note: We don't handle simple parser mode here, but user supplied plugin parser should handler it. */ - while (fts_get_word(cs, start, end, &w, &info)) { + while (fts_get_word(cs, extra_word_chars, start, end, &w, &info)) { int ret = param->mysql_add_word( param, reinterpret_cast(w.pos), diff --git a/storage/innobase/fts/fts0que.cc b/storage/innobase/fts/fts0que.cc index bea63bd683c1..43a1769a10fe 100644 --- a/storage/innobase/fts/fts0que.cc +++ b/storage/innobase/fts/fts0que.cc @@ -1623,6 +1623,8 @@ fts_query_match_phrase_terms( byte* ptr = *start; const ib_vector_t* tokens = phrase->tokens; ulint distance = phrase->distance; + const bool extra_word_chars + = thd_get_ft_query_extra_word_chars(); /* We check only from the second term onwards, since the first must have matched otherwise we wouldn't be here. */ @@ -1635,7 +1637,7 @@ fts_query_match_phrase_terms( ret = innobase_mysql_fts_get_token( phrase->charset, ptr, - const_cast(end), &match); + const_cast(end), extra_word_chars, &match); if (match.f_len > 0) { /* Get next token to match. */ @@ -1711,6 +1713,9 @@ fts_proximity_is_word_in_range( ut_ad(proximity_pos->n_pos == proximity_pos->min_pos.size()); ut_ad(proximity_pos->n_pos == proximity_pos->max_pos.size()); + const bool extra_word_chars + = thd_get_ft_query_extra_word_chars(); + /* Search each matched position pair (with min and max positions) and count the number of words in the range */ for (ulint i = 0; i < proximity_pos->n_pos; i++) { @@ -1727,7 +1732,7 @@ fts_proximity_is_word_in_range( len = innobase_mysql_fts_get_token( phrase->charset, start + cur_pos, - start + total_len, &str); + start + total_len, extra_word_chars, &str); if (len == 0) { break; @@ -1885,6 +1890,10 @@ fts_query_match_phrase( ut_a(phrase->match->start < ib_vector_size(positions)); + const bool extra_word_chars + = phrase->parser + ? false : thd_get_ft_query_extra_word_chars(); + for (i = phrase->match->start; i < ib_vector_size(positions); ++i) { ulint pos; byte* ptr = start; @@ -1933,7 +1942,8 @@ fts_query_match_phrase( match.f_str = ptr; ret = innobase_mysql_fts_get_token( phrase->charset, start + pos, - const_cast(end), &match); + const_cast(end), extra_word_chars, + &match); if (match.f_len == 0) { break; @@ -2649,6 +2659,10 @@ fts_query_phrase_split( term_node = node->list.head; } + const bool extra_word_chars + = node->type == FTS_AST_TEXT + ? thd_get_ft_query_extra_word_chars() : false; + while (true) { fts_cache_t* cache = query->index->table->fts->cache; ulint cur_len; @@ -2664,7 +2678,7 @@ fts_query_phrase_split( reinterpret_cast(phrase.f_str) + cur_pos, reinterpret_cast(phrase.f_str) - + len, + + len, extra_word_chars, &result_str); if (cur_len == 0) { diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index 8472673c79ee..5c3554db5305 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -77,6 +77,7 @@ this program; if not, write to the Free Software Foundation, Inc., #include "fts0fts.h" #include "fts0plugin.h" #include "fts0priv.h" +#include "fts0tokenize.h" // true_word_char #include "fts0types.h" #include "ibuf0ibuf.h" #include "lock0lock.h" @@ -7228,10 +7229,6 @@ innobase_fts_casedn_str( } } -#define true_word_char(c, ch) ((c) & (_MY_U | _MY_L | _MY_NMR) || (ch) == '_') - -#define misc_word_char(X) 0 - /*************************************************************//** Get the next token from the given string and store it in *token. It is mostly copied from MyISAM's doc parsing function ft_simple_get_word() @@ -7243,6 +7240,9 @@ innobase_mysql_fts_get_token( const byte* start, /*!< in: start of text */ const byte* end, /*!< in: one character past end of text */ + bool extra_word_chars,/*!< in: whether consider all + non-whitespace characters to be word + characters */ fts_string_t* token) /*!< out: token's text */ { int mbl; @@ -7264,7 +7264,7 @@ innobase_mysql_fts_get_token( mbl = cs->cset->ctype( cs, &ctype, doc, (const uchar*) end); - if (true_word_char(ctype, *doc)) { + if (true_word_char(ctype, extra_word_chars, *doc)) { break; } @@ -7282,7 +7282,7 @@ innobase_mysql_fts_get_token( mbl = cs->cset->ctype( cs, &ctype, (uchar*) doc, (uchar*) end); - if (true_word_char(ctype, *doc)) { + if (true_word_char(ctype, extra_word_chars, *doc)) { mwc = 0; } else if (!misc_word_char(*doc) || mwc) { break; diff --git a/storage/innobase/include/fts0fts.h b/storage/innobase/include/fts0fts.h index c28a4a5c27f6..a195b61a4b81 100644 --- a/storage/innobase/include/fts0fts.h +++ b/storage/innobase/include/fts0fts.h @@ -919,6 +919,9 @@ innobase_mysql_fts_get_token( const byte* start, /*!< in: start of text */ const byte* end, /*!< in: one character past end of text */ + bool extra_word_chars, /*!< in: whether consider all + non-whitespace characters to be + word characters */ fts_string_t* token); /*!< out: token's text */ /*************************************************************//** diff --git a/storage/innobase/include/fts0tokenize.h b/storage/innobase/include/fts0tokenize.h index 15726aea1de0..ec3c0d69a6a2 100644 --- a/storage/innobase/include/fts0tokenize.h +++ b/storage/innobase/include/fts0tokenize.h @@ -29,7 +29,12 @@ Created 2014/11/17 Shaohua Wang /* Macros and structs below are from ftdefs.h in MyISAM */ /** Check a char is true word */ -#define true_word_char(c, ch) ((c) & (_MY_U | _MY_L | _MY_NMR) || (ch) == '_') +inline bool true_word_char(char c, bool extra_word_chars, char ch) +{ + bool result = ((extra_word_chars) ? !((c) & (_MY_SPC)) : + ((c) & (_MY_U | _MY_L | _MY_NMR) || (ch) == '_')); + return result; +} /** Check if a char is misc word */ #define misc_word_char(X) 0 @@ -72,6 +77,7 @@ inline uchar fts_get_word( const CHARSET_INFO* cs, + bool extra_word_chars, uchar** start, uchar* end, FT_WORD* word, @@ -93,10 +99,6 @@ fts_get_word( doc += (mbl > 0 ? mbl : (mbl < 0 ? -mbl : 1))) { mbl = cs->cset->ctype(cs, &ctype, doc, end); - if (true_word_char(ctype, *doc)) { - break; - } - if (*doc == FTB_RQUOT && info->quot) { *start = doc + 1; info->type = FT_TOKEN_RIGHT_PAREN; @@ -144,6 +146,10 @@ fts_get_word( } } + if (true_word_char(ctype, extra_word_chars, *doc)) { + break; + } + info->prev = *doc; info->yesno = (FTB_YES == ' ') ? 1 : (info->quot != 0); info->weight_adjust = info->wasign = 0; @@ -155,7 +161,10 @@ fts_get_word( length++, doc += (mbl > 0 ? mbl : (mbl < 0 ? -mbl : 1))) { mbl = cs->cset->ctype(cs, &ctype, doc, end); - if (true_word_char(ctype, *doc)) { + if (extra_word_chars && *doc == FTB_RQUOT) { + break; + } else if (true_word_char(ctype, extra_word_chars, + *doc)) { mwc = 0; } else if (!misc_word_char(*doc) || mwc) { break; diff --git a/storage/innobase/row/row0ftsort.cc b/storage/innobase/row/row0ftsort.cc index d46980123701..f3c67821e811 100644 --- a/storage/innobase/row/row0ftsort.cc +++ b/storage/innobase/row/row0ftsort.cc @@ -513,7 +513,8 @@ row_merge_fts_doc_tokenize( inc = innobase_mysql_fts_get_token( doc->charset, doc->text.f_str + t_ctx->processed_len, - doc->text.f_str + doc->text.f_len, &str); + doc->text.f_str + doc->text.f_len, false, + &str); ut_a(inc > 0); } From 5deb1e2db226c9399e1b4f2c11a538a3280f89a7 Mon Sep 17 00:00:00 2001 From: Laurynas Biveinis Date: Mon, 22 Jan 2018 14:46:59 +0200 Subject: [PATCH 0411/1221] Add testcase for bug 1733781 (sql/handler.cc:3008: int handler::ha_close(): Assertion `m_lock_type == 2' failed.) Add a regression testcase for a higher-version-only bug --- mysql-test/suite/binlog/r/percona_bug1733781.result | 7 +++++++ mysql-test/suite/binlog/t/percona_bug1733781.test | 13 +++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 mysql-test/suite/binlog/r/percona_bug1733781.result create mode 100644 mysql-test/suite/binlog/t/percona_bug1733781.test diff --git a/mysql-test/suite/binlog/r/percona_bug1733781.result b/mysql-test/suite/binlog/r/percona_bug1733781.result new file mode 100644 index 000000000000..0250c6dd0bd7 --- /dev/null +++ b/mysql-test/suite/binlog/r/percona_bug1733781.result @@ -0,0 +1,7 @@ +# +# Bug 1733781: sql/handler.cc:3008: int handler::ha_close(): Assertion `m_lock_type == 2' failed +# +CREATE TEMPORARY TABLE t4(f int) ENGINE=INNODB; +LOCK TABLES t4 WRITE; +BINLOG ' SOgWTg8AAAAAbgAAAHIAAAAAAAQANS42LjMtbTUtZGVidWctbG9nAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAABI6BZOEzgNAAgAEgAEBAQEEgAAVgAEGggAAAAICAgCAAAAAAVAYI8='; +UNLOCK TABLES; diff --git a/mysql-test/suite/binlog/t/percona_bug1733781.test b/mysql-test/suite/binlog/t/percona_bug1733781.test new file mode 100644 index 000000000000..2bc3b72fd066 --- /dev/null +++ b/mysql-test/suite/binlog/t/percona_bug1733781.test @@ -0,0 +1,13 @@ +--source include/have_log_bin.inc +--source include/have_innodb.inc + +--echo # +--echo # Bug 1733781: sql/handler.cc:3008: int handler::ha_close(): Assertion `m_lock_type == 2' failed +--echo # + +CREATE TEMPORARY TABLE t4(f int) ENGINE=INNODB; +LOCK TABLES t4 WRITE; +# Format description event that forces closing of open temp tables +BINLOG ' SOgWTg8AAAAAbgAAAHIAAAAAAAQANS42LjMtbTUtZGVidWctbG9nAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAABI6BZOEzgNAAgAEgAEBAQEEgAAVgAEGggAAAAICAgCAAAAAAVAYI8='; + +UNLOCK TABLES; From d7a4c9cb33cbe8d71cc549f43e6137a1f0fa273a Mon Sep 17 00:00:00 2001 From: Yura Sorokin Date: Tue, 23 Jan 2018 18:02:23 +0200 Subject: [PATCH 0412/1221] Fixed lp:1690011 (pfs unit test ASan error in 5.6.36) https://bugs.launchpad.net/percona-server/+bug/1690011 Fixed problem with memory leak in 'pfs-t' unit test caused by 'test_locker_disabled()' not freeing resources after calling 'psi->create_file().' --- storage/perfschema/unittest/pfs-t.cc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/storage/perfschema/unittest/pfs-t.cc b/storage/perfschema/unittest/pfs-t.cc index 7861c74a401d..920c80bbe9d7 100644 --- a/storage/perfschema/unittest/pfs-t.cc +++ b/storage/perfschema/unittest/pfs-t.cc @@ -899,6 +899,7 @@ void test_init_disabled() psi->create_file(file_key_A, "foo-instrumented", (File) 12); file_A1= lookup_file_by_name("foo-instrumented"); ok(file_A1 != NULL, "file_A1 instrumented"); + destroy_file(reinterpret_cast(psi->get_thread()), file_A1); /* broken key + enabled T-1: no instrumentation */ @@ -1150,6 +1151,8 @@ void test_locker_disabled() psi->create_file(file_key_A, "foo", (File) 12); file_A1= (PSI_file*) lookup_file_by_name("foo"); ok(file_A1 != NULL, "instrumented"); + destroy_file(reinterpret_cast(psi->get_thread()), + reinterpret_cast(file_A1)); socket_class_A->m_enabled= true; socket_A1= psi->init_socket(socket_key_A, NULL, NULL, 0); From bbd44b304ef35dce8128cc29d327172894c0ec92 Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Tue, 23 Jan 2018 11:38:41 -0700 Subject: [PATCH 0413/1221] TDB-105 : Advance FT submodule commit pointer to pick up several changes - Advance the PerconaFT submodule commit pointer to pick up many new minor changes that address power64 compilation and clang/asan/tsan warnings. - This commit will be cherry-picked to 5.7 --- storage/tokudb/PerconaFT | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage/tokudb/PerconaFT b/storage/tokudb/PerconaFT index 416a28e514dd..809c7ac31f35 160000 --- a/storage/tokudb/PerconaFT +++ b/storage/tokudb/PerconaFT @@ -1 +1 @@ -Subproject commit 416a28e514ddd8918465d186c44b408f426f621c +Subproject commit 809c7ac31f35ecc3e5b8a671d961c7a5e58f8d86 From 7a2a36d2c6cc98267c537c485838fd7a0eaf808c Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Tue, 23 Jan 2018 11:38:41 -0700 Subject: [PATCH 0414/1221] TDB-105 : Advance FT submodule commit pointer to pick up several changes - Advance the PerconaFT submodule commit pointer to pick up many new minor changes that address power64 compilation and clang/asan/tsan warnings. - This commit will be cherry-picked to 5.7 (cherry picked from commit bbd44b304ef35dce8128cc29d327172894c0ec92) --- storage/tokudb/PerconaFT | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage/tokudb/PerconaFT b/storage/tokudb/PerconaFT index 416a28e514dd..809c7ac31f35 160000 --- a/storage/tokudb/PerconaFT +++ b/storage/tokudb/PerconaFT @@ -1 +1 @@ -Subproject commit 416a28e514ddd8918465d186c44b408f426f621c +Subproject commit 809c7ac31f35ecc3e5b8a671d961c7a5e58f8d86 From d71f2ff250c45aa853b09f9f8042c7f73d84d4b1 Mon Sep 17 00:00:00 2001 From: Laurynas Biveinis Date: Wed, 24 Jan 2018 06:28:33 +0200 Subject: [PATCH 0415/1221] Post-push fix for bug 1689268: include the missing plugin ABI check bits --- include/mysql/plugin_audit.h.pp | 1 + include/mysql/plugin_auth.h.pp | 1 + include/mysql/plugin_ftparser.h.pp | 1 + include/mysql/plugin_keyring.h.pp | 1 + 4 files changed, 4 insertions(+) diff --git a/include/mysql/plugin_audit.h.pp b/include/mysql/plugin_audit.h.pp index 44c2de4bca62..7a0b3a0b91f2 100644 --- a/include/mysql/plugin_audit.h.pp +++ b/include/mysql/plugin_audit.h.pp @@ -129,6 +129,7 @@ int thd_command(const void* thd); long long thd_start_time(const void* thd); void thd_kill(unsigned long id); +int thd_get_ft_query_extra_word_chars(void); #include "mysql/mysql_lex_string.h" struct st_mysql_lex_string { diff --git a/include/mysql/plugin_auth.h.pp b/include/mysql/plugin_auth.h.pp index 25524e440f89..267829e45615 100644 --- a/include/mysql/plugin_auth.h.pp +++ b/include/mysql/plugin_auth.h.pp @@ -129,6 +129,7 @@ int thd_command(const void* thd); long long thd_start_time(const void* thd); void thd_kill(unsigned long id); +int thd_get_ft_query_extra_word_chars(void); #include "plugin_auth_common.h" typedef struct st_plugin_vio_info { diff --git a/include/mysql/plugin_ftparser.h.pp b/include/mysql/plugin_ftparser.h.pp index e64928296434..289b20a95fc5 100644 --- a/include/mysql/plugin_ftparser.h.pp +++ b/include/mysql/plugin_ftparser.h.pp @@ -129,6 +129,7 @@ int thd_command(const void* thd); long long thd_start_time(const void* thd); void thd_kill(unsigned long id); +int thd_get_ft_query_extra_word_chars(void); enum enum_ftparser_mode { MYSQL_FTPARSER_SIMPLE_MODE= 0, diff --git a/include/mysql/plugin_keyring.h.pp b/include/mysql/plugin_keyring.h.pp index d061bbe65f41..3b9c843471b6 100644 --- a/include/mysql/plugin_keyring.h.pp +++ b/include/mysql/plugin_keyring.h.pp @@ -129,6 +129,7 @@ int thd_command(const void* thd); long long thd_start_time(const void* thd); void thd_kill(unsigned long id); +int thd_get_ft_query_extra_word_chars(void); struct st_mysql_keyring { int interface_version; From f6dd8ad0c0accd5a9d3d6f1aa3a58c4fb9296926 Mon Sep 17 00:00:00 2001 From: Balasubramanian Kandasamy Date: Wed, 24 Jan 2018 17:49:29 +0530 Subject: [PATCH 0416/1221] Bug#27392800 - PERL DIGEST MODULE SHOULD BE ADDED TO BUILD/INSTALL DEPENDENCIES OF PACKAGING - Added few perl modules to test subpackage --- packaging/rpm-fedora/mysql.spec.in | 59 +++++++++++++++++++++++++++++ packaging/rpm-oel/mysql.spec.in | 60 +++++++++++++++++++++++++++++- packaging/rpm-sles/mysql.spec.in | 37 ++++++++++++++++++ 3 files changed, 155 insertions(+), 1 deletion(-) diff --git a/packaging/rpm-fedora/mysql.spec.in b/packaging/rpm-fedora/mysql.spec.in index a12f52f8252f..a5e407c0d4a5 100644 --- a/packaging/rpm-fedora/mysql.spec.in +++ b/packaging/rpm-fedora/mysql.spec.in @@ -74,6 +74,34 @@ Packager: MySQL Release Engineering Vendor: %{mysql_vendor} BuildRequires: cmake BuildRequires: perl +BuildRequires: perl(Carp) +BuildRequires: perl(Config) +BuildRequires: perl(Cwd) +BuildRequires: perl(Data::Dumper) +BuildRequires: perl(English) +BuildRequires: perl(Errno) +BuildRequires: perl(Exporter) +BuildRequires: perl(Fcntl) +BuildRequires: perl(File::Basename) +BuildRequires: perl(File::Copy) +BuildRequires: perl(File::Find) +BuildRequires: perl(File::Path) +BuildRequires: perl(File::Spec) +BuildRequires: perl(File::Spec::Functions) +BuildRequires: perl(File::Temp) +BuildRequires: perl(Getopt::Long) +BuildRequires: perl(IO::File) +BuildRequires: perl(IO::Handle) +BuildRequires: perl(IO::Pipe) +BuildRequires: perl(IO::Select) +BuildRequires: perl(IO::Socket) +BuildRequires: perl(IO::Socket::INET) +BuildRequires: perl(JSON) +BuildRequires: perl(Memoize) +BuildRequires: perl(POSIX) +BuildRequires: perl(Sys::Hostname) +BuildRequires: perl(Time::HiRes) +BuildRequires: perl(Time::localtime) %if 0%{?fedora} > 24 BuildRequires: perl-generators %endif @@ -218,6 +246,34 @@ MySQL database server, and MySQL embedded server. %package test Summary: Test suite for the MySQL database server Group: Applications/Databases +Requires: perl(Carp) +Requires: perl(Config) +Requires: perl(Cwd) +Requires: perl(Data::Dumper) +Requires: perl(English) +Requires: perl(Errno) +Requires: perl(Exporter) +Requires: perl(Fcntl) +Requires: perl(File::Basename) +Requires: perl(File::Copy) +Requires: perl(File::Find) +Requires: perl(File::Path) +Requires: perl(File::Spec) +Requires: perl(File::Spec::Functions) +Requires: perl(File::Temp) +Requires: perl(Getopt::Long) +Requires: perl(IO::File) +Requires: perl(IO::Handle) +Requires: perl(IO::Pipe) +Requires: perl(IO::Select) +Requires: perl(IO::Socket) +Requires: perl(IO::Socket::INET) +Requires: perl(JSON) +Requires: perl(Memoize) +Requires: perl(POSIX) +Requires: perl(Sys::Hostname) +Requires: perl(Time::HiRes) +Requires: perl(Time::localtime) %if 0%{?commercial} Requires: mysql-commercial-server%{?_isa} >= %{min} Obsoletes: mysql-community-test < %{version}-%{release} @@ -870,6 +926,9 @@ datadir=$(/usr/bin/my_print_defaults server mysqld | grep '^--datadir=' | sed -n %attr(755, root, root) %{_libdir}/mysql/libmysqld.so %changelog +* Wed Jan 24 2018 Balasubramanian Kandasamy - 5.7.23-1 +- Add perl modules for test subpackage + * Wed Jan 10 2018 Bjorn Munch - 5.7.22-1 - No longer need to remove obsoleted mysqltest man pages diff --git a/packaging/rpm-oel/mysql.spec.in b/packaging/rpm-oel/mysql.spec.in index fb9b632932f2..63ce1b496045 100644 --- a/packaging/rpm-oel/mysql.spec.in +++ b/packaging/rpm-oel/mysql.spec.in @@ -127,8 +127,35 @@ Source91: filter-requires.sh %{?el5:BuildRequires: gcc44} %{?el5:BuildRequires: gcc44-c++} BuildRequires: perl -%{?el7:BuildRequires: perl(Time::HiRes)} %{?el7:BuildRequires: perl(Env)} +BuildRequires: perl(Carp) +BuildRequires: perl(Config) +BuildRequires: perl(Cwd) +BuildRequires: perl(Data::Dumper) +BuildRequires: perl(English) +BuildRequires: perl(Errno) +BuildRequires: perl(Exporter) +BuildRequires: perl(Fcntl) +BuildRequires: perl(File::Basename) +BuildRequires: perl(File::Copy) +BuildRequires: perl(File::Find) +BuildRequires: perl(File::Path) +BuildRequires: perl(File::Spec) +BuildRequires: perl(File::Spec::Functions) +BuildRequires: perl(File::Temp) +BuildRequires: perl(Getopt::Long) +BuildRequires: perl(IO::File) +BuildRequires: perl(IO::Handle) +BuildRequires: perl(IO::Pipe) +BuildRequires: perl(IO::Select) +BuildRequires: perl(IO::Socket) +BuildRequires: perl(IO::Socket::INET) +BuildRequires: perl(JSON) +BuildRequires: perl(Memoize) +BuildRequires: perl(POSIX) +BuildRequires: perl(Sys::Hostname) +BuildRequires: perl(Time::HiRes) +BuildRequires: perl(Time::localtime) BuildRequires: time BuildRequires: libaio-devel BuildRequires: ncurses-devel @@ -298,6 +325,34 @@ MySQL database server, and MySQL embedded server. Summary: Test suite for the MySQL database server Group: Applications/Databases Requires: %{name}-server%{?_isa} >= %{min} +Requires: perl(Carp) +Requires: perl(Config) +Requires: perl(Cwd) +Requires: perl(Data::Dumper) +Requires: perl(English) +Requires: perl(Errno) +Requires: perl(Exporter) +Requires: perl(Fcntl) +Requires: perl(File::Basename) +Requires: perl(File::Copy) +Requires: perl(File::Find) +Requires: perl(File::Path) +Requires: perl(File::Spec) +Requires: perl(File::Spec::Functions) +Requires: perl(File::Temp) +Requires: perl(Getopt::Long) +Requires: perl(IO::File) +Requires: perl(IO::Handle) +Requires: perl(IO::Pipe) +Requires: perl(IO::Select) +Requires: perl(IO::Socket) +Requires: perl(IO::Socket::INET) +Requires: perl(JSON) +Requires: perl(Memoize) +Requires: perl(POSIX) +Requires: perl(Sys::Hostname) +Requires: perl(Time::HiRes) +Requires: perl(Time::localtime) %if 0%{?commercial} Provides: MySQL-test-advanced%{?_isa} = %{version}-%{release} Obsoletes: MySQL-test-advanced < %{version}-%{release} @@ -1352,6 +1407,9 @@ fi %endif # cluster %changelog +* Wed Jan 24 2018 Balasubramanian Kandasamy - 5.7.23-1 +- Add perl modules for test subpackage + * Wed Jan 10 2018 Bjorn Munch - 5.7.22-1 - No longer need to remove obsoleted mysqltest man pages diff --git a/packaging/rpm-sles/mysql.spec.in b/packaging/rpm-sles/mysql.spec.in index b9e36a7e0b93..7806cf07d69a 100644 --- a/packaging/rpm-sles/mysql.spec.in +++ b/packaging/rpm-sles/mysql.spec.in @@ -96,6 +96,23 @@ Source90: filter-provides.sh Source91: filter-requires.sh BuildRequires: cmake >= 2.8.2 BuildRequires: perl +BuildRequires: perl(Config) +BuildRequires: perl(Cwd) +BuildRequires: perl(Data::Dumper) +BuildRequires: perl(File::Basename) +BuildRequires: perl(File::Copy) +BuildRequires: perl(File::Find) +BuildRequires: perl(File::Path) +BuildRequires: perl(File::Spec) +BuildRequires: perl(File::Spec::Functions) +BuildRequires: perl(File::Temp) +BuildRequires: perl(Getopt::Long) +BuildRequires: perl(IO::File) +BuildRequires: perl(IO::Select) +BuildRequires: perl(IO::Socket) +BuildRequires: perl(IO::Socket::INET) +BuildRequires: perl(JSON) +BuildRequires: perl(Sys::Hostname) BuildRequires: libaio-devel BuildRequires: libnuma-devel BuildRequires: ncurses-devel @@ -260,6 +277,23 @@ MySQL database server, and MySQL embedded server. Summary: Test suite for the MySQL database server Group: Applications/Databases Requires: %{name}-server >= %{min} +Requires: perl(Config) +Requires: perl(Cwd) +Requires: perl(Data::Dumper) +Requires: perl(File::Basename) +Requires: perl(File::Copy) +Requires: perl(File::Find) +Requires: perl(File::Path) +Requires: perl(File::Spec) +Requires: perl(File::Spec::Functions) +Requires: perl(File::Temp) +Requires: perl(Getopt::Long) +Requires: perl(IO::File) +Requires: perl(IO::Select) +Requires: perl(IO::Socket) +Requires: perl(IO::Socket::INET) +Requires: perl(JSON) +Requires: perl(Sys::Hostname) %if 0%{?commercial} Provides: MySQL-test-advanced = %{version}-%{release} Obsoletes: MySQL-test-advanced < %{version}-%{release} @@ -1157,6 +1191,9 @@ fi %endif # cluster %changelog +* Wed Jan 24 2018 Balasubramanian Kandasamy - 5.7.23-1 +- Add perl modules for test subpackage + * Wed Jan 10 2018 Bjorn Munch - 5.7.22-1 - No longer need to remove obsoleted mysqltest man pages From 208800999ff20e9368c9b239bf4eae4bb8334661 Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Tue, 23 Jan 2018 11:39:26 -0700 Subject: [PATCH 0417/1221] TDB-104 : add .clang-format file to PerconaFT and TDB - Add .clang_format to TokuDB. This file defines our code format style which is based on the Google coding standard guidelines. - This commit will be cherry-picked to 5.7 --- storage/tokudb/.clang-format | 40 ++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 storage/tokudb/.clang-format diff --git a/storage/tokudb/.clang-format b/storage/tokudb/.clang-format new file mode 100644 index 000000000000..2ccc4b3fb24a --- /dev/null +++ b/storage/tokudb/.clang-format @@ -0,0 +1,40 @@ +# .clang-format file for Percona TokuDB +# Minimum required version of clang-format is 5.0.1. Earlier versions will work +# but may need removal of some parameters. +Language: Cpp +BasedOnStyle: Google + +# The following parameters are default for Google style, +# but as they are important for our project they +# are set explicitly here +AlignAfterOpenBracket: Align +BreakBeforeBinaryOperators: None +ColumnLimit: 80 +PointerAlignment: Left +SpaceAfterCStyleCast: false +SpaceBeforeAssignmentOperators: true +SpaceBeforeParens: ControlStatements +SpaceInEmptyParentheses: false +SpacesBeforeTrailingComments: 2 +SpacesInAngles: false +SpacesInContainerLiterals: true +SpacesInCStyleCastParentheses: false +SpacesInParentheses: false +SpacesInSquareBrackets: false +UseTab: Never + +# Non-default parameters +NamespaceIndentation: All +IndentWidth: 4 +TabWidth: 4 +AllowShortIfStatementsOnASingleLine: false +AllowShortLoopsOnASingleLine: false +BinPackParameters: false +BinPackArguments: false +ExperimentalAutoDetectBinPacking: false +AllowAllParametersOfDeclarationOnNextLine: false +# not supported in 5.0.1 +#AlignConsecutiveAssignments: yes +#AlignConsecutiveDeclarations: yes +BreakStringLiterals: false +ReflowComments: true From 179c58d069c5fb7ed259cfb1bf9aad5c0959d0fd Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Tue, 23 Jan 2018 11:39:26 -0700 Subject: [PATCH 0418/1221] TDB-104 : add .clang-format file to PerconaFT and TDB - Add .clang_format to TokuDB. This file defines our code format style which is based on the Google coding standard guidelines. - This commit will be cherry-picked to 5.7 (cherry picked from commit 208800999ff20e9368c9b239bf4eae4bb8334661) --- storage/tokudb/.clang-format | 40 ++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 storage/tokudb/.clang-format diff --git a/storage/tokudb/.clang-format b/storage/tokudb/.clang-format new file mode 100644 index 000000000000..2ccc4b3fb24a --- /dev/null +++ b/storage/tokudb/.clang-format @@ -0,0 +1,40 @@ +# .clang-format file for Percona TokuDB +# Minimum required version of clang-format is 5.0.1. Earlier versions will work +# but may need removal of some parameters. +Language: Cpp +BasedOnStyle: Google + +# The following parameters are default for Google style, +# but as they are important for our project they +# are set explicitly here +AlignAfterOpenBracket: Align +BreakBeforeBinaryOperators: None +ColumnLimit: 80 +PointerAlignment: Left +SpaceAfterCStyleCast: false +SpaceBeforeAssignmentOperators: true +SpaceBeforeParens: ControlStatements +SpaceInEmptyParentheses: false +SpacesBeforeTrailingComments: 2 +SpacesInAngles: false +SpacesInContainerLiterals: true +SpacesInCStyleCastParentheses: false +SpacesInParentheses: false +SpacesInSquareBrackets: false +UseTab: Never + +# Non-default parameters +NamespaceIndentation: All +IndentWidth: 4 +TabWidth: 4 +AllowShortIfStatementsOnASingleLine: false +AllowShortLoopsOnASingleLine: false +BinPackParameters: false +BinPackArguments: false +ExperimentalAutoDetectBinPacking: false +AllowAllParametersOfDeclarationOnNextLine: false +# not supported in 5.0.1 +#AlignConsecutiveAssignments: yes +#AlignConsecutiveDeclarations: yes +BreakStringLiterals: false +ReflowComments: true From abebbf8b527074e3d2848ce31a8eb720254a8114 Mon Sep 17 00:00:00 2001 From: Deepa Dixit Date: Mon, 22 Jan 2018 11:09:15 +0530 Subject: [PATCH 0419/1221] Bug#27245598: MYSQLTEST: EXECUTION PHASE WARNINGS OVERWRITE THE PREPARE PHASE WARNINGS Issue: ------ To avoid printing duplicate warnings, there is code in mysqltest which sets the prepare phase warnings to NULL if execute phase warnings are present. However, there might be different warnings generated during prepare and execute phases. In this case, the prepare phase warnings will be missing from the result file. Fix: ---- If there are prepare phase warnings, as well as execute phase warnings, check whether the prepare phase warnings are the same as the execute phase warnings. If a prepare phase warning is not present in the execute phase, then print it. Reviewed-by: Pavan Naik Reviewed-by: Srikanth BR --- client/mysqltest.cc | 36 ++++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/client/mysqltest.cc b/client/mysqltest.cc index 1db8da0ca760..1ae8f09606f4 100644 --- a/client/mysqltest.cc +++ b/client/mysqltest.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -50,6 +50,7 @@ #include // ORACLE_WELCOME_COPYRIGHT_NOTICE #include +#include using std::min; using std::max; @@ -7709,8 +7710,8 @@ void run_query_stmt(MYSQL *mysql, struct st_command *command, /* Init dynamic strings for warnings */ if (!disable_warnings) { - init_dynamic_string(&ds_prepare_warnings, NULL, 0, 256); - init_dynamic_string(&ds_execute_warnings, NULL, 0, 256); + init_dynamic_string(&ds_prepare_warnings, "", 0, 256); + init_dynamic_string(&ds_execute_warnings, "", 0, 256); } /* @@ -7814,13 +7815,6 @@ void run_query_stmt(MYSQL *mysql, struct st_command *command, append_stmt_result(ds, stmt, fields, num_fields); mysql_free_result(res); /* Free normal result set with meta data */ - - /* - Clear prepare warnings if there are execute warnings, - since they are probably duplicated. - */ - if (ds_execute_warnings.length || mysql->warning_count) - dynstr_set(&ds_prepare_warnings, NULL); } else { @@ -7852,8 +7846,26 @@ void run_query_stmt(MYSQL *mysql, struct st_command *command, dynstr_append_mem(ds, ds_warnings->str, ds_warnings->length); if (ds_prepare_warnings.length) - dynstr_append_mem(ds, ds_prepare_warnings.str, - ds_prepare_warnings.length); + { + /* Split the string to get each warning */ + std::stringstream prepare_warnings(ds_prepare_warnings.str); + std::string prepare_warning; + /* + If the warning is already present in the execute phase, + do not append it + */ + while (std::getline(prepare_warnings, prepare_warning)) + { + std::string execute_warnings(ds_execute_warnings.str); + if ((execute_warnings + "\n").find(prepare_warning + "\n") == + std::string::npos) + { + dynstr_append_mem(ds, prepare_warning.c_str(), + prepare_warning.length()); + dynstr_append_mem(ds, "\n", 1); + } + } + } if (ds_execute_warnings.length) dynstr_append_mem(ds, ds_execute_warnings.str, ds_execute_warnings.length); From 03a61db2e6933dd313a1099237076cd6c654591e Mon Sep 17 00:00:00 2001 From: Robert Golebiowski Date: Thu, 25 Jan 2018 09:30:09 +0100 Subject: [PATCH 0420/1221] PS-2414: keyring_vault timeout MTR tests always producing warnings Suppressed warning "File '' not found". This is a correct warning generated when keyring_vault is loaded without correct path to configuration file. In this case the path is null, i.e. ''. --- plugin/keyring_vault/tests/mtr/timeout_basic.result | 1 + plugin/keyring_vault/tests/mtr/timeout_basic.test | 1 + 2 files changed, 2 insertions(+) diff --git a/plugin/keyring_vault/tests/mtr/timeout_basic.result b/plugin/keyring_vault/tests/mtr/timeout_basic.result index 82206432b963..6612f332aa47 100644 --- a/plugin/keyring_vault/tests/mtr/timeout_basic.result +++ b/plugin/keyring_vault/tests/mtr/timeout_basic.result @@ -1,5 +1,6 @@ call mtr.add_suppression("\\[Error\\] Plugin keyring_vault reported: 'keyring_vault initialization failure."); call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'Could not open file with credentials.'"); +call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'File '' not found"); SET @start_global_value = @@GLOBAL.keyring_vault_timeout; SET @@GLOBAL.keyring_vault_timeout = 100; SET @@GLOBAL.keyring_vault_timeout = DEFAULT; diff --git a/plugin/keyring_vault/tests/mtr/timeout_basic.test b/plugin/keyring_vault/tests/mtr/timeout_basic.test index 0f5d3743fca5..998340c59def 100644 --- a/plugin/keyring_vault/tests/mtr/timeout_basic.test +++ b/plugin/keyring_vault/tests/mtr/timeout_basic.test @@ -12,6 +12,7 @@ --source include/have_keyring_vault_plugin.inc call mtr.add_suppression("\\[Error\\] Plugin keyring_vault reported: 'keyring_vault initialization failure."); call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'Could not open file with credentials.'"); +call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'File '' not found"); ############################################################# # Save initial value # From b4abab5ef10289f41956c54e3a987046797a9454 Mon Sep 17 00:00:00 2001 From: Ole-Hjalmar Kristensen Date: Thu, 25 Jan 2018 10:18:13 +0100 Subject: [PATCH 0421/1221] Fix for Bug#26236857 LRU_GET: ASSERTION `!IS_BUSY_MACHINE(&RETVAL->PAX)' FAILED The assertion fails begause lru_get returns a Paxos instance that is busy. The sequence of events that lead to this is the following: Node 1 sends all of the messges which have been decided to node 2, which is doing recovery. This causes all those instances to be moved to the head of the LRU, leaving the busy instances as the next victims for replacement. This patch fixes lru_get so it skips any busy instances. In addition, the log sending code has been changed so it will not rearrange the LRU. Doing this solves the reported problem, but leaves a residual problem, which can be reroduced by running the repro test case described in the bug report. Node 2 will refuse to join, with the message "ERROR 3092 (HY000) at line 3: The server is not configured properly to be an active member of the group. Please see more details on error log." If we run the test case as desribed in the bug report, with load, the reason it fails is that node 1 sends a snapshot from that point where node 2 originally joined. Since node 1 do not have all the log messages, but only the tail of the log, this leaves a gap. This causes node 2 to time out, since xcom cannot deliver all the messages it needs. It we run the test with no load, it starts at the same point, but this time node 1 has all the messages. Node 2 now fails with [ERROR] Plugin group_replication reported: 'This member has more executed transactions than those present in the group. Local transactions: aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1-5 > Group transactions: aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1-4' This is happens because GR on node 2 now gets the original messages a second time. The problem can be traced back to the changes done in "BUG#23718481 - A NODE THAT LEAVES AND JOINS WITHIN A 5 SECOND WINDOW MAY NOT GET A GLOBAL VIEW" This change sets the starting point in the log to the last modified config LSN, which works fine as log as the config has been modified before node 2 rejoins. This is not the case here, since node 1 does not have majority alone, and thus is unable to evict node 2 from the group. So, the third and last change in this fix is to introduce an alternative solution to the problem described in BUG#23718481 which does not depend on the config modification. We send an internal unique Xcom instance ID as part of the pax_msg, and use this to detect that a new instance of xcom has appeared. The detector_task will send a new global views when a new instance has been detected. This ensures that the new node will get a global view. --- .../src/bindings/xcom/xcom/xcom_base.c | 17 ++++++--- .../src/bindings/xcom/xcom/xcom_base.h | 3 +- .../src/bindings/xcom/xcom/xcom_cache.c | 28 ++++++++++----- .../src/bindings/xcom/xcom/xcom_cache.h | 15 +++++++- .../src/bindings/xcom/xcom/xcom_detector.c | 36 ++++++++++++++----- .../src/bindings/xcom/xcom/xcom_detector.h | 3 +- .../src/bindings/xcom/xcom/xcom_proto_enum.h | 5 +-- .../src/bindings/xcom/xcom/xcom_transport.c | 17 +++++++-- .../src/bindings/xcom/xcom/xcom_vp.h.gen | 13 +++---- .../src/bindings/xcom/xcom/xcom_vp.x | 2 +- .../src/bindings/xcom/xcom/xcom_vp_str.c | 4 ++- 11 files changed, 107 insertions(+), 36 deletions(-) diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.c b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.c index 4c78c604130a..a8d3e71c83f0 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.c +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2012, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -425,6 +425,10 @@ static uint32_t my_id = 0; /* Unique id of this instance */ static synode_no current_message; /* Current message number */ static synode_no last_config_modification_id; /*Last configuration change proposal*/ +uint32_t get_my_id(){ + return my_id; +} + synode_no get_current_message() { return current_message; @@ -3849,6 +3853,9 @@ int acceptor_learner_task(task_arg arg) ceptor_learner_task. */ ep->srv = get_server(site, ep->p->from); + if(ep->rfd.x_proto > x_1_2){ /* Ignore nodes which do not send ID */ + update_xcom_id(ep->p->from, (uint32_t)ep->p->refcnt); /* Refcnt is really uuid */ + } ep->p->refcnt = 1; /* Refcnt from other end is void here */ MAY_DBG(FN; NDBG(ep->rfd.fd, d); NDBG(task_now(), f); @@ -4005,6 +4012,9 @@ int reply_handler_task(task_arg arg) add_event(string_arg("ep->s->con.fd")); add_event(int_arg(ep->s->con.fd)); ); + if(ep->s->con.x_proto > x_1_2){ /* Ignore nodes which do not send ID */ + update_xcom_id(ep->reply->from, (uint32_t)ep->reply->refcnt); /* Refcnt is really uuid */ + } ep->reply->refcnt = 1; /* Refcnt from other end is void here */ if (n <= 0) { shutdown_connection(&ep->s->con); @@ -4221,8 +4231,9 @@ static void server_push_log(server *srv, synode_no push, node_no node) site_def const *s = get_site_def(); while (!synode_gt(push, get_max_synode())) { if (is_cached(push)) { - pax_machine * p = get_cache(push); + pax_machine * p = get_cache_no_touch(push); if (pm_finished(p)) { + /* Need to clone message here since pax_machine may be re-used while message is sent */ pax_msg * pm = clone_pax_msg(p->learner.msg); ref_msg(pm); pm->op = recover_learn_op; @@ -4264,8 +4275,6 @@ static void server_handle_need_snapshot(server *srv, site_def const *s, node_no synode_no app_lsn = get_app_snap(&gs->app_snap); if (!synode_eq(null_synode, app_lsn) && synode_lt(app_lsn, gs->log_start)){ gs->log_start = app_lsn; - } else if (!synode_eq(null_synode, last_config_modification_id)){ - gs->log_start = last_config_modification_id; } server_send_snapshot(srv, s, gs, node); diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.h b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.h index 8a6529e6efe8..652d7c54d772 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.h +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2012, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -216,6 +216,7 @@ int64_t xcom_client_send_data(uint32_t size, char *data, connection_descriptor* fd); int xcom_client_terminate_and_exit(connection_descriptor* fd); int xcom_client_set_cache_limit(connection_descriptor *fd, uint64_t cache_limit); +uint32_t get_my_id(); static inline char *strerr_msg(char *buf, size_t len, int nr) { diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_cache.c b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_cache.c index e3bf33f498b9..b9a58ae5b3a5 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_cache.c +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_cache.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -183,13 +183,18 @@ static lru_machine *lru_get() if (!link_empty(&probation_lru)) { retval = (lru_machine * ) link_first(&probation_lru); } else { - retval = (lru_machine * ) link_first(&protected_lru); - /* Since this machine is in in the cache, we need to update - last_removed_cache */ - last_removed_cache = retval->pax.synode; - + /* Find the first non-busy instance in the LRU */ + FWD_ITER(&protected_lru, lru_machine, + if (!is_busy_machine(&link_iter->pax)) { + retval = link_iter; + /* Since this machine is in in the cache, we need to update + last_removed_cache */ + last_removed_cache = retval->pax.synode; + break; + } + ) } - assert(!is_busy_machine(&retval->pax)); + assert(retval && !is_busy_machine(&retval->pax)); return retval; } @@ -252,7 +257,7 @@ void deinit_cache() /* static synode_no log_tail; */ -pax_machine *get_cache(synode_no synode) +pax_machine *get_cache_no_touch(synode_no synode) { pax_machine * retval = hash_get(synode); /* DBGOUT(FN; SYCEXP(synode); STREXP(task_name())); */ @@ -268,6 +273,13 @@ pax_machine *get_cache(synode_no synode) init_pax_machine(retval, l, synode); /* Initialize */ hash_in(retval); /* Insert in hash table again */ } + MAY_DBG(FN; SYCEXP(synode); PTREXP(retval)); + return retval; +} + +pax_machine *get_cache(synode_no synode) +{ + pax_machine * retval = get_cache_no_touch(synode); lru_touch_hit(retval); /* Insert in protected_lru */ MAY_DBG(FN; SYCEXP(synode); PTREXP(retval)); return retval; diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_cache.h b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_cache.h index d4c0a1279ddf..6ea739b47418 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_cache.h +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_cache.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -20,6 +20,18 @@ extern "C" { #endif +/* +We require that the number of elements in the cache is big enough enough that +it is always possible to find instances that are not busy. +Under normal circumstances the number of busy instances will be +less than event_horizon, since the proposers only considers +instances which belong to the local node. +A node may start proposing no_ops for instances belonging +to other nodes, meaning that event_horizon * NSERVERS instances may be +involved. However, for the time being, proposing a no_op for an instance +will not mark it as busy. This may change in the future, so a safe upper +limit on the number of nodes marked as busy is event_horizon * NSERVERS. +*/ #define CACHED 50000 #define is_cached(x) (hash_get(x) != NULL) @@ -63,6 +75,7 @@ struct pax_machine { int is_busy_machine(pax_machine *p); int lock_pax_machine(pax_machine *p); +pax_machine *get_cache_no_touch(synode_no synode); pax_machine *get_cache(synode_no synode); pax_machine *hash_get(synode_no synode); char *dbg_machine_nodeset(pax_machine *p, u_int nodes); diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_detector.c b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_detector.c index a1245fde0f6b..c06abe60f9b2 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_detector.c +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_detector.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -40,6 +40,26 @@ extern int xcom_shutdown; /* static double detected[NSERVERS]; */ +static struct{ + int changed; + uint32_t id[NSERVERS]; +}id_tracker; + +void update_xcom_id(node_no node, uint32_t id){ + if(node < NSERVERS && id_tracker.id[node] != id){ + id_tracker.changed = 1; + id_tracker.id[node] = id; + } +} + +static int xcom_id_changed(){ + return id_tracker.changed; +} + +static void reset_id_changed(){ + id_tracker.changed = 0; +} + /* See if node has been suspiciously still for some time */ int may_be_dead(detector_state const ds, node_no i, double seconds) { @@ -189,7 +209,6 @@ static void check_global_node_set(site_def *site, int *notify) } } - static void check_local_node_set(site_def *site, int *notify) { u_int i; @@ -267,10 +286,10 @@ int detector_task(task_arg arg MY_ATTRIBUTE((unused))) END_ENV; TASK_BEGIN - last_p_site = 0; - last_x_site = 0; - ep->notify = 1; - ep->local_notify = 1; + last_p_site = 0; + last_x_site = 0; + ep->notify = 1; + ep->local_notify = 1; DBGOHK(FN; ); while (!xcom_shutdown) { site_def * p_site = (site_def * )get_proposer_site(); @@ -303,9 +322,10 @@ int detector_task(task_arg arg MY_ATTRIBUTE((unused))) DBGOHK(FN; NDBG(iamtheleader(x_site), d); NDBG(enough_live_nodes(x_site), d); ); /* Send xcom message if node has changed state */ DBGOHK(FN; NDBG(ep->notify,d)); - if ( ep->notify && iamtheleader(x_site) && - enough_live_nodes(x_site)) { + if ((xcom_id_changed() || ep->notify) && + enough_live_nodes(x_site) && iamtheleader(x_site)) { ep->notify = 0; + reset_id_changed(); send_my_view(x_site); } } diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_detector.h b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_detector.h index 32948338ae91..7e64ace803c1 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_detector.h +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_detector.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -29,6 +29,7 @@ void note_detected(struct site_def const *site, node_no node); int may_be_dead(detector_state const ds, node_no i, double seconds); void init_detector(detector_state ds); void invalidate_detector_sites(struct site_def *site); +void update_xcom_id(node_no node, uint32_t id); #ifdef __cplusplus } diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_proto_enum.h b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_proto_enum.h index ea242f8c23aa..e12675bf9303 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_proto_enum.h +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_proto_enum.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -17,7 +17,8 @@ enum xcom_proto { x_unknown_proto=0, x_1_0=1, x_1_1=2, - x_1_2=3 + x_1_2=3, + x_1_3=4 }; typedef enum xcom_proto xcom_proto; diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_transport.c b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_transport.c index 210e12497d95..20c69acbbce5 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_transport.c +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_transport.c @@ -53,7 +53,7 @@ #include "xcom_ssl_transport.h" #endif -#define MY_XCOM_PROTO x_1_2 +#define MY_XCOM_PROTO x_1_3 xcom_proto const my_min_xcom_version = x_1_0; /* The minimum protocol version I am able to understand */ xcom_proto const my_xcom_version = MY_XCOM_PROTO; /* The maximun protocol version I am able to understand */ @@ -657,11 +657,20 @@ static inline int old_proto_knows(xcom_proto x_proto MY_ATTRIBUTE((unused)), int serialize_msg(pax_msg *p, xcom_proto x_proto, uint32_t *buflen, char **buf) { + int retval = 0; + *buflen = 0; *buf = 0; - return old_proto_knows(x_proto, p->op) && - serialize((void * )p, x_proto, buflen, (xdrproc_t)xdr_pax_msg, buf); + if(old_proto_knows(x_proto, p->op)){ + /* We want to send the internal xcom ID instead of the reference count, + so we need to save and restore the count */ + int save = p->refcnt; + p->refcnt = (int) get_my_id(); + retval = serialize((void * )p, x_proto, buflen, (xdrproc_t)xdr_pax_msg, buf); + p->refcnt = save; + } + return retval; } int deserialize_msg(pax_msg *p, xcom_proto x_proto, char *buf, uint32_t buflen) @@ -2114,6 +2123,7 @@ bool_t xdr_node_list_1_1(XDR *xdrs, node_list_1_1 *objp) sizeof (node_address), (xdrproc_t) xdr_node_address_with_1_0); case x_1_1: case x_1_2: + case x_1_3: return xdr_array (xdrs, (char **)&objp->node_list_val, (u_int *) &objp->node_list_len, NSERVERS, sizeof (node_address), (xdrproc_t) xdr_node_address); default: @@ -2146,6 +2156,7 @@ bool_t xdr_pax_msg(XDR *xdrs, pax_msg *objp) objp->delivered_msg = get_delivered_msg(); /* Use our own minimum */ return TRUE; case x_1_2: + case x_1_3: return xdr_pax_msg_1_2(xdrs, objp); default: return FALSE; diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_vp.h.gen b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_vp.h.gen index 719dbc9f5cc6..defbe1bd4cdd 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_vp.h.gen +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_vp.h.gen @@ -13,7 +13,7 @@ extern "C" { #endif -/* Copyright (c) 2010, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -35,6 +35,7 @@ enum xcom_proto { x_1_0 = 1, x_1_1 = 2, x_1_2 = 3, + x_1_3 = 4, }; typedef enum xcom_proto xcom_proto; @@ -400,7 +401,7 @@ typedef struct pax_msg_1_2 pax_msg_1_2; #ifndef PAX_MSG_TYPEDEF #define PAX_MSG_TYPEDEF typedef pax_msg_1_2 pax_msg; -extern bool_t xdr_pax_msg (XDR *, pax_msg*); +extern bool_t xdr_pax_msg (XDR *, pax_msg*); #endif typedef char *file_name; @@ -461,8 +462,8 @@ extern bool_t xdr_config_ptr (XDR *, config_ptr*); extern bool_t xdr_configs (XDR *, configs*); extern bool_t xdr_gcs_snapshot (XDR *, gcs_snapshot*); extern bool_t xdr_client_reply_code (XDR *, client_reply_code*); -extern bool_t xdr_pax_msg_1_1(XDR *, pax_msg_1_1*); -extern bool_t xdr_pax_msg_1_2(XDR *, pax_msg_1_2*); +extern bool_t xdr_pax_msg_1_1 (XDR *, pax_msg_1_1*); +extern bool_t xdr_pax_msg_1_2 (XDR *, pax_msg_1_2*); extern bool_t xdr_file_name (XDR *, file_name*); extern bool_t xdr_file_name_array (XDR *, file_name_array*); extern bool_t xdr_file_copy_data (XDR *, file_copy_data*); @@ -508,8 +509,8 @@ extern bool_t xdr_config_ptr (); extern bool_t xdr_configs (); extern bool_t xdr_gcs_snapshot (); extern bool_t xdr_client_reply_code (); -extern bool_t xdr_pax_msg_1_1(); -extern bool_t xdr_pax_msg_1_2(); +extern bool_t xdr_pax_msg_1_1 (); +extern bool_t xdr_pax_msg_1_2 (); extern bool_t xdr_file_name (); extern bool_t xdr_file_name_array (); extern bool_t xdr_file_copy_data (); diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_vp.x b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_vp.x index 4f9639b304a7..662b53d5e8e9 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_vp.x +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_vp.x @@ -1,4 +1,4 @@ -%/* Copyright (c) 2010, 2017, Oracle and/or its affiliates. All rights reserved. +%/* Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved. % % 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 diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_vp_str.c b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_vp_str.c index f71239f570e7..0e52df85c188 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_vp_str.c +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_vp_str.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -218,6 +218,8 @@ const char *xcom_proto_to_str(xcom_proto x) return "x_1_1"; case x_1_2: return "x_1_2"; + case x_1_3: + return "x_1_3"; default: return "???"; } From 57434958080a107295ea08fb680408f19865b62c Mon Sep 17 00:00:00 2001 From: Balasubramanian Kandasamy Date: Thu, 25 Jan 2018 15:15:53 +0530 Subject: [PATCH 0422/1221] Bug#27392808 - PERL JSON MODULE SHOULD BE ADDED TO BUILD/INSTALL DEPENDENCIES OF MYSQL PACKAGES - Added libjson-perl module as install dependencies for test subpackage --- packaging/deb-in/control.in | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packaging/deb-in/control.in b/packaging/deb-in/control.in index acba1513a5df..5cadcc4c2f03 100644 --- a/packaging/deb-in/control.in +++ b/packaging/deb-in/control.in @@ -4,7 +4,7 @@ Section: database Priority: optional Standards-Version: 3.9.6 Homepage: http://www.mysql.com/ -Build-Depends: debhelper (>= 9.0.0), libaio-dev[linux-any], libncurses5-dev (>= 5.0-6), perl, zlib1g-dev (>= 1:1.1.3-5), po-debconf, psmisc, bison, lsb-release, cmake, fakeroot, libnuma-dev, libmecab-dev, @DEB_CONTROL_BDEPS@ @DEB_CONTROL_BDEPS_EXTRA@ +Build-Depends: debhelper (>= 9.0.0), libaio-dev[linux-any], libncurses5-dev (>= 5.0-6), libjson-perl, perl, zlib1g-dev (>= 1:1.1.3-5), po-debconf, psmisc, bison, lsb-release, cmake, fakeroot, libnuma-dev, libmecab-dev, @DEB_CONTROL_BDEPS@ @DEB_CONTROL_BDEPS_EXTRA@ Package: mysql-server @@ -202,7 +202,7 @@ Package: mysql-@DEB_PRODUCTNAME@-test Architecture: any Depends: mysql-@DEB_PRODUCTNAME@-server (= ${binary:Version}), mysql-@DEB_PRODUCTNAME@-client (= ${binary:Version}), python, - libmysqlclient-dev, ${shlibs:Depends}, ${misc:Depends} + libmysqlclient-dev, libjson-perl, ${shlibs:Depends}, ${misc:Depends} Breaks: mysql-@DEB_PRODUCTNAME@-server (<< 5.7.14), mysql-@DEB_PRODUCTNAME@-client (<< 5.7.14) Conflicts: mysql, From a3a497ccf7ecacc900551fb1e47ea4078b45c351 Mon Sep 17 00:00:00 2001 From: Joao Gramacho Date: Thu, 25 Jan 2018 10:45:30 +0000 Subject: [PATCH 0423/1221] BUG#24365972 BINLOG DECODING ISN'T RESILIENT TO CORRUPT BINLOG FILES Problem ======= When facing decoding of corrupt binary log files, server may misbehave without detecting the events corruption. This patch makes MySQL server more resilient to binary log decoding. Fixes for events de-serialization and apply =========================================== @sql/log_event.h Implemented the Rows_query_log_event::is_valid(). @sql/log_event.cc Query_log_event::Query_log_event: added a check to ensure query length is respecting event buffer limits. Query_log_event::do_apply_event: extended a debug print, added a check to character set to determine if it is "parseable" or not, verified if database name is valid for system collation. Start_log_event_v3::do_apply_event: report an error on applying a non-supported binary log version. Load_log_event::copy_log_event: added a check to table_name length. User_var_log_event::User_var_log_event: added checks to avoid reading out of buffer limits. User_var_log_event::do_apply_event: reported an sanity check error properly and added individual sanity checks for variable types that expect fixed (or minimum) amount of bytes to be read. Rows_log_event::Rows_log_event: added checks to avoid reading out of buffer limits. Rows_log_event::do_post_row_operations: added a sanity check to m_curr_row, as it should change after a successful call to unpack_current_row(). Table_map_log_event::Table_map_log_event: added a check to avoid reading out of buffer limits, transformed an assert into a check for error. Write_rows_log_event::write_row: added a sanity check to detect "fake" empty rows. Rows_query_log_event::Rows_query_event: added a check to avoid reading out of buffer limits. @sql/log_event_old.cc Old_rows_log_event::Old_rows_log_event: added a sanity check to avoid reading out of buffer limits. @sql/sql_priv.h Added a sanity check to available_buffer() function. --- sql/log_event.cc | 207 +++++++++++++++++++++++++++++++++++++++---- sql/log_event.h | 4 +- sql/log_event_old.cc | 9 +- sql/sql_priv.h | 7 +- 4 files changed, 206 insertions(+), 21 deletions(-) diff --git a/sql/log_event.cc b/sql/log_event.cc index b85b5d795030..8d630847ed29 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -4214,6 +4214,25 @@ Query_log_event::Query_log_event(const char* buf, uint event_len, db= (char *)start; query= (char *)(start + db_len + 1); q_len= data_len - db_len -1; + + if (data_len && (data_len < db_len || + data_len < q_len || + data_len != (db_len + q_len + 1))) + { + q_len= 0; + query= NULL; + DBUG_VOID_RETURN; + } + + unsigned int max_length; + max_length= (event_len - ((const char*)(end + db_len + 1) - + (buf - common_header_len))); + if (q_len != max_length) + { + q_len= 0; + query= NULL; + DBUG_VOID_RETURN; + } /** Append the db length at the end of the buffer. This will be used by Query_cache::send_result_to_client() in case the query cache is On. @@ -4613,6 +4632,26 @@ int Query_log_event::do_apply_event(Relay_log_info const *rli, you. */ thd->catalog= catalog_len ? (char *) catalog : (char *)""; + + size_t valid_len; + bool len_error; + bool is_invalid_db_name= validate_string(system_charset_info, db, db_len, + &valid_len, &len_error); + + DBUG_PRINT("debug",("is_invalid_db_name= %s, valid_len=%zu, len_error=%s", + is_invalid_db_name ? "true" : "false", + valid_len, + len_error ? "true" : "false")); + + if (is_invalid_db_name || len_error) + { + rli->report(ERROR_LEVEL, ER_SLAVE_FATAL_ERROR, + ER_THD(thd, ER_SLAVE_FATAL_ERROR), + "Invalid database name in Query event."); + thd->is_slave_error= true; + goto end; + } + set_thd_db(thd, db, db_len); /* @@ -4792,7 +4831,23 @@ int Query_log_event::do_apply_event(Relay_log_info const *rli, } else thd->variables.collation_database= thd->db_charset; - + + { + const CHARSET_INFO *cs= thd->charset(); + /* + We cannot ask for parsing a statement using a character set + without state_maps (parser internal data). + */ + if (!cs->state_map) + { + rli->report(ERROR_LEVEL, ER_SLAVE_FATAL_ERROR, + ER_THD(thd, ER_SLAVE_FATAL_ERROR), + "character_set cannot be parsed"); + thd->is_slave_error= true; + goto end; + } + } + thd->table_map_for_update= (table_map)table_map_for_update; thd->set_invoker(&user, &host); /* @@ -5323,7 +5378,13 @@ int Start_log_event_v3::do_apply_event(Relay_log_info const *rli) */ break; default: - /* this case is impossible */ + /* + This case is not expected. It can be either an event corruption or an + unsupported binary log version. + */ + rli->report(ERROR_LEVEL, ER_SLAVE_FATAL_ERROR, + ER_THD(thd, ER_SLAVE_FATAL_ERROR), + "Binlog version not supported"); DBUG_RETURN(1); } DBUG_RETURN(error); @@ -6252,6 +6313,9 @@ int Load_log_event::copy_log_event(const char *buf, ulong event_len, fields = (char*)field_lens + num_fields; table_name = fields + field_block_len; + if (strlen(table_name) > NAME_LEN) + goto err; + db = table_name + table_name_len + 1; DBUG_EXECUTE_IF ("simulate_invalid_address", db_len = data_len;); @@ -7705,6 +7769,13 @@ User_var_log_event(const char* buf, uint event_len, buf+= description_event->common_header_len + description_event->post_header_len[USER_VAR_EVENT-1]; name_len= uint4korr(buf); + /* Avoid reading out of buffer */ + if ((buf - buf_start) + UV_NAME_LEN_SIZE + name_len > event_len) + { + error= true; + goto err; + } + name= (char *) buf + UV_NAME_LEN_SIZE; /* @@ -7764,6 +7835,11 @@ User_var_log_event(const char* buf, uint event_len, we keep the flags set to UNDEF_F. */ uint bytes_read= ((val + val_len) - start); + if (bytes_read > event_len) + { + error= true; + goto err; + } #ifndef DBUG_OFF bool old_pre_checksum_fd= description_event->is_version_before_checksum(); #endif @@ -7995,7 +8071,12 @@ int User_var_log_event::do_apply_event(Relay_log_info const *rli) } if (!(charset= get_charset(charset_number, MYF(MY_WME)))) + { + rli->report(ERROR_LEVEL, ER_SLAVE_FATAL_ERROR, + ER_THD(thd, ER_SLAVE_FATAL_ERROR), + "Invalid character set for User var event"); return 1; + } double real_val; longlong int_val; @@ -8013,12 +8094,26 @@ int User_var_log_event::do_apply_event(Relay_log_info const *rli) { switch (type) { case REAL_RESULT: + if (val_len != 8) + { + rli->report(ERROR_LEVEL, ER_SLAVE_FATAL_ERROR, + ER_THD(thd, ER_SLAVE_FATAL_ERROR), + "Invalid variable length at User var event"); + return 1; + } float8get(real_val, val); it= new Item_float(real_val, 0); val= (char*) &real_val; // Pointer to value in native format val_len= 8; break; case INT_RESULT: + if (val_len != 8) + { + rli->report(ERROR_LEVEL, ER_SLAVE_FATAL_ERROR, + ER_THD(thd, ER_SLAVE_FATAL_ERROR), + "Invalid variable length at User var event"); + return 1; + } int_val= (longlong) uint8korr(val); it= new Item_int(int_val); val= (char*) &int_val; // Pointer to value in native format @@ -8026,6 +8121,13 @@ int User_var_log_event::do_apply_event(Relay_log_info const *rli) break; case DECIMAL_RESULT: { + if (val_len < 3) + { + rli->report(ERROR_LEVEL, ER_SLAVE_FATAL_ERROR, + ER_THD(thd, ER_SLAVE_FATAL_ERROR), + "Invalid variable length at User var event"); + return 1; + } Item_decimal *dec= new Item_decimal((uchar*) val+2, val[0], val[1]); it= dec; val= (char *)dec->val_decimal(NULL); @@ -9451,7 +9553,15 @@ Rows_log_event::Rows_log_event(const char *buf, uint event_len, which includes length bytes */ var_header_len= uint2korr(post_start); - assert(var_header_len >= 2); + /* Check length and also avoid out of buffer read */ + if (var_header_len < 2 || + event_len < static_cast(var_header_len + + (post_start - buf))) + { + m_cols.bitmap= NULL; + DBUG_VOID_RETURN; + } + var_header_len-= 2; /* Iterate over var-len header, extracting 'chunks' */ @@ -9497,6 +9607,13 @@ Rows_log_event::Rows_log_event(const char *buf, uint event_len, 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)); + /* Avoid reading out of buffer */ + if ((ptr_after_width + (m_width + 7) / 8) - (uchar*)buf > event_len) + { + m_cols.bitmap= NULL; + DBUG_VOID_RETURN; + } + /* if bitmap_init fails, catched in is_valid() */ if (likely(!bitmap_init(&m_cols, m_width <= sizeof(m_bitbuf)*8 ? m_bitbuf : NULL, @@ -9546,7 +9663,13 @@ Rows_log_event::Rows_log_event(const char *buf, uint event_len, const uchar* const ptr_rows_data= (const uchar*) ptr_after_width; - size_t const data_size= event_len - (ptr_rows_data - (const uchar *) buf); + size_t const read_size= ptr_rows_data - (const unsigned char *) buf; + if (read_size > event_len) + { + DBUG_VOID_RETURN; + } + + size_t const data_size= event_len - read_size; DBUG_PRINT("info",("m_table_id: %llu m_flags: %d m_width: %lu data_size: %lu", m_table_id.id(), m_flags, m_width, (ulong) data_size)); @@ -10249,7 +10372,13 @@ void Rows_log_event::do_post_row_operations(Relay_log_info const *rli, int error if (!m_curr_row_end && !error) { + const uchar *previous_m_curr_row= m_curr_row; error= unpack_current_row(rli, &m_cols); + + if (!error && previous_m_curr_row == m_curr_row) + { + error= 1; + } } // at this moment m_curr_row_end should be set @@ -12093,6 +12222,15 @@ Table_map_log_event::Table_map_log_event(const char *buf, uint event_len, (ulong) m_tbllen, (long) (ptr_tbllen-(const uchar*)vpart), m_colcnt, (long) (ptr_colcnt-(const uchar*)vpart))); + bytes_read= (unsigned int) (ptr_after_colcnt - (unsigned char *)buf); + /* Avoid reading out of buffer */ + if (event_len <= bytes_read || event_len - bytes_read < m_colcnt) + { + m_coltype= NULL; + m_memory= NULL; + DBUG_VOID_RETURN; + } + /* Allocate mem for all fields in one go. If fails, caught in is_valid() */ m_memory= (uchar*) my_multi_malloc(MYF(MY_WME), &m_dbnam, (uint) m_dblen + 1, @@ -12113,15 +12251,24 @@ Table_map_log_event::Table_map_log_event(const char *buf, uint event_len, if (bytes_read < event_len) { m_field_metadata_size= net_field_length(&ptr_after_colcnt); - DBUG_ASSERT(m_field_metadata_size <= (m_colcnt * 2)); - uint num_null_bytes= (m_colcnt + 7) / 8; - m_meta_memory= (uchar *)my_multi_malloc(MYF(MY_WME), - &m_null_bits, num_null_bytes, - &m_field_metadata, m_field_metadata_size, - NULL); - memcpy(m_field_metadata, ptr_after_colcnt, m_field_metadata_size); - ptr_after_colcnt= (uchar*)ptr_after_colcnt + m_field_metadata_size; - memcpy(m_null_bits, ptr_after_colcnt, num_null_bytes); + if (m_field_metadata_size <= (m_colcnt * 2)) + { + uint num_null_bytes= (m_colcnt + 7) / 8; + m_meta_memory= (uchar *)my_multi_malloc(MYF(MY_WME), + &m_null_bits, num_null_bytes, + &m_field_metadata, m_field_metadata_size, + NULL); + memcpy(m_field_metadata, ptr_after_colcnt, m_field_metadata_size); + ptr_after_colcnt= (uchar*)ptr_after_colcnt + m_field_metadata_size; + memcpy(m_null_bits, ptr_after_colcnt, num_null_bytes); + } + else + { + m_coltype= NULL; + my_free(m_memory); + m_memory= NULL; + DBUG_VOID_RETURN; + } } } @@ -12131,8 +12278,10 @@ Table_map_log_event::Table_map_log_event(const char *buf, uint event_len, Table_map_log_event::~Table_map_log_event() { - my_free(m_meta_memory); - my_free(m_memory); + if (m_meta_memory != NULL) + my_free(m_meta_memory); + if (m_memory != NULL) + my_free(m_memory); } /* @@ -12736,6 +12885,22 @@ Write_rows_log_event::write_row(const Relay_log_info *const rli, if ((error= unpack_current_row(rli, &m_cols))) DBUG_RETURN(error); + /* + When m_curr_row == m_curr_row_end, it means a row that contains nothing, + so all the pointers shall be pointing to the same address, or else + we have corrupt data and shall throw the error. + */ + DBUG_PRINT("debug",("m_rows_buf= %p, m_rows_cur= %p, m_rows_end= %p", + m_rows_buf, m_rows_cur, m_rows_end)); + DBUG_PRINT("debug",("m_curr_row= %p, m_curr_row_end= %p", + m_curr_row, m_curr_row_end)); + if (m_curr_row == m_curr_row_end && + !((m_rows_buf == m_rows_cur) && (m_rows_cur == m_rows_end))) + { + my_error(ER_SLAVE_CORRUPT_EVENT, MYF(0)); + DBUG_RETURN(ER_SLAVE_CORRUPT_EVENT); + } + if (m_curr_row == m_rows_buf) { /* this is the first row to be inserted, we estimate the rows with @@ -13424,6 +13589,8 @@ Rows_query_log_event::Rows_query_log_event(const char *buf, uint event_len, uint8 const post_header_len= descr_event->post_header_len[ROWS_QUERY_LOG_EVENT-1]; + m_rows_query= NULL; + DBUG_PRINT("info",("event_len: %u; common_header_len: %d; post_header_len: %d", event_len, common_header_len, post_header_len)); @@ -13431,8 +13598,12 @@ Rows_query_log_event::Rows_query_log_event(const char *buf, uint event_len, m_rows_query length is stored using only one byte, but that length is ignored and the complete query is read. */ - int offset= common_header_len + post_header_len + 1; - int len= event_len - offset; + unsigned int offset= common_header_len + post_header_len + 1; + /* Avoid reading out of buffer */ + if (offset > event_len) + DBUG_VOID_RETURN; + + unsigned int len= event_len - offset; if (!(m_rows_query= (char*) my_malloc(len+1, MYF(MY_WME)))) return; strmake(m_rows_query, buf + offset, len); diff --git a/sql/log_event.h b/sql/log_event.h index d4884af63738..f6519a6dfe34 100644 --- a/sql/log_event.h +++ b/sql/log_event.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -4876,6 +4876,8 @@ class Rows_query_log_event : public Ignorable_log_event { virtual Log_event_type get_type_code() { return ROWS_QUERY_LOG_EVENT; } + virtual bool is_valid() const { return m_rows_query != NULL; } + virtual int get_data_size() { return IGNORABLE_HEADER_LEN + 1 + (uint) strlen(m_rows_query); diff --git a/sql/log_event_old.cc b/sql/log_event_old.cc index 49a14c007f68..14c7475ca523 100644 --- a/sql/log_event_old.cc +++ b/sql/log_event_old.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2007, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -1349,6 +1349,13 @@ Old_rows_log_event::Old_rows_log_event(const char *buf, uint event_len, 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)); + /* Avoid reading out of buffer */ + if (m_width + (ptr_after_width - (const uchar *)buf) > event_len) + { + m_cols.bitmap= NULL; + DBUG_VOID_RETURN; + } + /* if bitmap_init fails, catched in is_valid() */ if (likely(!bitmap_init(&m_cols, m_width <= sizeof(m_bitbuf)*8 ? m_bitbuf : NULL, diff --git a/sql/sql_priv.h b/sql/sql_priv.h index 40bab57ac109..30e1550a5ce1 100644 --- a/sql/sql_priv.h +++ b/sql/sql_priv.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -187,6 +187,11 @@ template T available_buffer(const char* buf_start, const char* buf_current, T buf_len) { + /* Sanity check */ + if (buf_current < buf_start || + buf_len < static_cast(buf_current - buf_start)) + return static_cast(0); + return buf_len - (buf_current - buf_start); } From ef52fa7a9a1adc197b4f8f079721ab7ac2c0d8c6 Mon Sep 17 00:00:00 2001 From: Andre Negrao Date: Thu, 25 Jan 2018 11:21:38 +0000 Subject: [PATCH 0424/1221] Bug#27146054 - BACKPORT BUG#26695357 TO 5.7 Post-push fix. The patch for Bug#27146054 introduced a bug (compilation error) in a call to a Macro that is only compiled when DEBUG/TRACE logging is enabled in GCS. This push fixes the issue. --- .../libmysqlgcs/src/bindings/xcom/xcom/xcom_base.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.c b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.c index a8d3e71c83f0..ff7825162112 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.c +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.c @@ -4673,7 +4673,7 @@ static int timed_connect(int fd, sockaddr *sock_addr, socklen_t sock_size) break; default: G_DEBUG("connect - Error connecting (socket=%d, error=%d).", - fd, GET_OS_ERR); + fd, syserr); CONNECT_FAIL; } @@ -4686,17 +4686,15 @@ static int timed_connect(int fd, sockaddr *sock_addr, socklen_t sock_size) MAY_DBG(FN; STRLIT("poll - Finished. "); NEXP(sysret, d)); if (sysret == 0) { - G_DEBUG( - "Timed out while waiting for connection to be established! " - "Cancelling connection attempt. (socket= %d, error=%d)", - fd, res); - /*G_WARNING("poll - Timeout! Cancelling connection...");*/ + G_DEBUG("Timed out while waiting for connection to be established! " + "Canceling connection attempt. (socket= %d, error=%d)", + fd, sysret); CONNECT_FAIL; } if (is_socket_error(sysret)) { - G_DEBUG("poll - Error while connecting! (socket= %d, error=%d)" - fd, GET_OS_ERR); + G_DEBUG("poll - Error while connecting! (socket= %d, error=%d)", + fd, syserr); CONNECT_FAIL; } From d1dc6fa088174ddf42e37a96602fb703a9a35970 Mon Sep 17 00:00:00 2001 From: Joao Gramacho Date: Thu, 25 Jan 2018 11:28:02 +0000 Subject: [PATCH 0425/1221] BUG#24365972 BINLOG DECODING ISN'T RESILIENT TO CORRUPT BINLOG FILES Post push fix in compilation issue. --- sql/log_event.cc | 4 +++- sql/log_event_old.cc | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/sql/log_event.cc b/sql/log_event.cc index 8d630847ed29..e0b2d89e578e 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -9608,7 +9608,9 @@ Rows_log_event::Rows_log_event(const char *buf, uint event_len, m_width = net_field_length(&ptr_after_width); DBUG_PRINT("debug", ("m_width=%lu", m_width)); /* Avoid reading out of buffer */ - if ((ptr_after_width + (m_width + 7) / 8) - (uchar*)buf > event_len) + if (static_cast((ptr_after_width + + (m_width + 7) / 8) - + (uchar*)buf) > event_len) { m_cols.bitmap= NULL; DBUG_VOID_RETURN; diff --git a/sql/log_event_old.cc b/sql/log_event_old.cc index 14c7475ca523..393ee634195b 100644 --- a/sql/log_event_old.cc +++ b/sql/log_event_old.cc @@ -1350,7 +1350,9 @@ Old_rows_log_event::Old_rows_log_event(const char *buf, uint event_len, m_width = net_field_length(&ptr_after_width); DBUG_PRINT("debug", ("m_width=%lu", m_width)); /* Avoid reading out of buffer */ - if (m_width + (ptr_after_width - (const uchar *)buf) > event_len) + if (static_cast(m_width + + (ptr_after_width - + (const uchar *)buf)) > event_len) { m_cols.bitmap= NULL; DBUG_VOID_RETURN; From a26e24519cac54da275d1ef20e9e88ae701bb34d Mon Sep 17 00:00:00 2001 From: Andre Negrao Date: Thu, 25 Jan 2018 15:05:05 +0000 Subject: [PATCH 0426/1221] Bug#27294009 - XCOM ENTERS AN INFINITE LOOP IN CASE OF A REQUEST_RETRY Description: ----------- When a node tries to enter a group, its request might be rejected by the node that is receiving the request. This may happen for a multitude of reasons and the reject message returns two possible values: - REQUEST_FAIL: this represents a full rejection. - REQUEST_RETRY: this represents a "please try again in 1 second". This exists for the case in which a node that wishes to join the group contacts a seed node that is itself still booting within a group. This problem can manifest itself when, for instance, one misconfigured the group by not adding the bootstrap flag = true. In that case, that node can enter an infinite retry loop, since currently a node will continue to retry until it gets a REQUEST_FAIL or a REQUEST_OK. GR will detect this issue and call leave() upon GCS, but that request will fail because XCom is stuck in the infinite retry loop. Solution -------- This patch adds a limit to the number of retries that a node is allowed to execute. After the limit is reached, the node will stop retrying and will return with an error. --- .../xcom/gcs_xcom_control_interface.cc | 13 +++- .../src/bindings/xcom/xcom/xcom_base.c | 10 +++- .../r/gr_start_group_without_boot_node.result | 29 +++++++++ .../t/gr_start_group_without_boot_node.test | 60 +++++++++++++++++++ 4 files changed, 107 insertions(+), 5 deletions(-) create mode 100644 rapid/plugin/group_replication/tests/mtr/r/gr_start_group_without_boot_node.result create mode 100644 rapid/plugin/group_replication/tests/mtr/t/gr_start_group_without_boot_node.test diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_control_interface.cc b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_control_interface.cc index 4832e371420f..fd0b03270405 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_control_interface.cc +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_control_interface.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -445,7 +445,16 @@ enum_gcs_error Gcs_xcom_control::do_join() local_port << " connected to " << addr << ":" << port << " to join" ) - m_xcom_proxy->xcom_client_add_node(con, &m_node_list_me, m_gid_hash); + /* + Explicitly check the return value so that we are able to distinguish + between a failure in the synchronous local request from a failure in + the asynchronous add_node request. + */ + if (!m_xcom_proxy->xcom_client_add_node(con, &m_node_list_me, m_gid_hash)) + { + m_xcom_proxy->xcom_client_close_connection(con); + goto err; + } m_xcom_proxy->xcom_client_close_connection(con); } else diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.c b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.c index ff7825162112..07e6a2adffcf 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.c +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.c @@ -5076,14 +5076,14 @@ int xcom_client_boot(connection_descriptor *fd, node_list *nl, uint32_t group_id return retval; } - int xcom_send_app_wait(connection_descriptor *fd, app_data *a, int force) { int retval = 0; + int retry_count = 10; // Same as 'connection_attempts' pax_msg p; pax_msg *rp = 0; - for(;;){ + do { retval = (int)xcom_send_client_app_data(fd, a, force); if(retval < 0) return 0; @@ -5110,7 +5110,11 @@ int xcom_send_app_wait(connection_descriptor *fd, app_data *a, int force) G_WARNING("read failed"); return 0; } - } + } while (--retry_count); + // Timeout after REQUEST_RETRY has been received 'retry_count' times + G_MESSAGE( + "Request failed: maximum number of retries (10) has been exhausted."); + return 0; } int xcom_send_cfg_wait(connection_descriptor * fd, node_list *nl, diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_start_group_without_boot_node.result b/rapid/plugin/group_replication/tests/mtr/r/gr_start_group_without_boot_node.result new file mode 100644 index 000000000000..4c857982cbf6 --- /dev/null +++ b/rapid/plugin/group_replication/tests/mtr/r/gr_start_group_without_boot_node.result @@ -0,0 +1,29 @@ +include/group_replication.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection server1] +############################################################ +# 1. Suppress expected error messages +############################################################ +SET SESSION sql_log_bin= 0; +call mtr.add_suppression("Plugin group_replication reported: 'read failed'"); +call mtr.add_suppression("Plugin group_replication reported: '\\[GCS\\] read failed'"); +call mtr.add_suppression("Plugin group_replication reported: 'Timeout on wait for view after joining group'"); +call mtr.add_suppression("\\[GCS\\] Error connecting to all peers. Member join failed. Local port:*"); +call mtr.add_suppression("\\[GCS\\] The member was unable to join the group.*"); +SET SESSION sql_log_bin= 1; +############################################################ +# 2. Define and setup seeds to force self connect +############################################################ +SET @@global.group_replication_group_name="GROUP_REPLICATION_GROUP_NAME"; +SET @@global.group_replication_group_seeds=`localhost:XCOM_PORT, 127.0.0.1:XCOM_PORT`; +############################################################ +# 3. Start the node and expect it to fail +############################################################ +START GROUP_REPLICATION; +ERROR HY000: The server is not configured properly to be an active member of the group. Please see more details on error log. +############################################################ +# 4. Clean up +############################################################ +include/group_replication_end.inc diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_start_group_without_boot_node.test b/rapid/plugin/group_replication/tests/mtr/t/gr_start_group_without_boot_node.test new file mode 100644 index 000000000000..41612637fa09 --- /dev/null +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_start_group_without_boot_node.test @@ -0,0 +1,60 @@ +############################################################################### +# Bug#27294009 - XCOM ENTERS AN INFINITE LOOP IN CASE OF A REQUEST_RETRY +# +# This test verifies that when the bootstrap node is not correctly set up in a +# group, control requests (e.g., join, leave) will fail cleanly. Before fixing +# this bug, issuing control requests to a group without the boot node correctly +# set up would lead to nodes hanging indefinitely. +# +# The ideal scenario to test this bug fix would be to simultaneously start a +# group with two (or more) nodes without setting any as the boot node. However, +# due to the synchronous nature of MTR tests, it is not possible to do so, as +# nodes will try (and fail) to connect to each other in succession, never +# getting a chance to actually communicate. Hence, it is necessary to trick a +# single node into connecting to itself. +# +# Test: +# 0. This test requires one server. +# 1. Set up seeds with alternative localhost addresses to force the node to +# connect to itself. +# 2. Start group replication without setting the boot node flag to true. +# 3. The join request fails cleanly without the node hanging. +# 4. Clean up. +############################################################################### +--source ../inc/have_group_replication_plugin.inc +--let $rpl_skip_group_replication_start= 1 +--source ../inc/group_replication.inc +--echo ############################################################ +--echo # 1. Suppress expected error messages +--echo ############################################################ +SET SESSION sql_log_bin= 0; +call mtr.add_suppression("Plugin group_replication reported: 'read failed'"); +call mtr.add_suppression("Plugin group_replication reported: '\\[GCS\\] read failed'"); +call mtr.add_suppression("Plugin group_replication reported: 'Timeout on wait for view after joining group'"); +call mtr.add_suppression("\\[GCS\\] Error connecting to all peers. Member join failed. Local port:*"); +call mtr.add_suppression("\\[GCS\\] The member was unable to join the group.*"); +SET SESSION sql_log_bin= 1; + +--echo ############################################################ +--echo # 2. Define and setup seeds to force self connect +--echo ############################################################ +--let $local_address= `SELECT @@GLOBAL.group_replication_local_address;` +--let $xcom_port = `SELECT SUBSTR("$local_address",11,5);` +--let $localhost_addr = `SELECT CONCAT("localhost:","$xcom_port");` +--let $localhost_alt_addr = `SELECT CONCAT("127.0.0.1:","$xcom_port");` + +--replace_result $group_replication_group_name GROUP_REPLICATION_GROUP_NAME +--eval SET @@global.group_replication_group_name="$group_replication_group_name" +--replace_result $xcom_port XCOM_PORT +--eval SET @@global.group_replication_group_seeds=`localhost:$xcom_port, 127.0.0.1:$xcom_port` + +--echo ############################################################ +--echo # 3. Start the node and expect it to fail +--echo ############################################################ +--error ER_GROUP_REPLICATION_CONFIGURATION +START GROUP_REPLICATION; + +--echo ############################################################ +--echo # 4. Clean up +--echo ############################################################ +--source ../inc/group_replication_end.inc From a575ea10939321831bdbea0299f2881e2b8d4c75 Mon Sep 17 00:00:00 2001 From: Robert Golebiowski Date: Thu, 25 Jan 2018 17:49:00 +0100 Subject: [PATCH 0427/1221] PS-2414: keyring_vault timeout MTR tests always producing warnings Suppressed warning "File '' not found". This is a correct warning generated when keyring_vault is loaded without correct path to configuration file. In this case the path is null, i.e. ''. (fix for keyring_vault_timeout) --- plugin/keyring_vault/tests/mtr/keyring_vault_timeout.result | 4 ++++ plugin/keyring_vault/tests/mtr/keyring_vault_timeout.test | 1 + 2 files changed, 5 insertions(+) diff --git a/plugin/keyring_vault/tests/mtr/keyring_vault_timeout.result b/plugin/keyring_vault/tests/mtr/keyring_vault_timeout.result index da32c2c1990a..50d31838a38e 100644 --- a/plugin/keyring_vault/tests/mtr/keyring_vault_timeout.result +++ b/plugin/keyring_vault/tests/mtr/keyring_vault_timeout.result @@ -4,7 +4,11 @@ call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'CURL retur call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'Could not retrieve list of keys from Vault.'"); call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'Error while loading keyring content. The keyring might be malformed'"); call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'CURL returned this error code: 28 with error message : connect\\(\\) timed out!'"); +call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'File '' not found"); INSTALL PLUGIN keyring_vault SONAME 'keyring_vault.so'; +Warnings: +Warning 29 File '' not found (Errcode: 2 - No such file or directory) +Warning 42000 keyring_vault initialization failure. Please check the server log. include/assert.inc [Default vaule of keyring_vault_timeout should be 15] SET @@GLOBAL.keyring_vault_timeout=15; SET @@GLOBAL.keyring_vault_config='MYSQLTEST_VARDIR/std_data/keyring_vault_confs/keyring_vault_incorrect_server.conf'; diff --git a/plugin/keyring_vault/tests/mtr/keyring_vault_timeout.test b/plugin/keyring_vault/tests/mtr/keyring_vault_timeout.test index 37cebfe5bb26..c1f9b4bbfec6 100644 --- a/plugin/keyring_vault/tests/mtr/keyring_vault_timeout.test +++ b/plugin/keyring_vault/tests/mtr/keyring_vault_timeout.test @@ -8,6 +8,7 @@ call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'CURL retur call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'Could not retrieve list of keys from Vault.'"); call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'Error while loading keyring content. The keyring might be malformed'"); call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'CURL returned this error code: 28 with error message : connect\\(\\) timed out!'"); +call mtr.add_suppression("\\[ERROR\\] Plugin keyring_vault reported: 'File '' not found"); --let $KEYRING_CONF_FILE_1=$MYSQLTEST_VARDIR/std_data/keyring_vault_confs/keyring_vault_incorrect_server.conf --let $KEYRING_CONF_TEMPLATE_FILE=$MYSQL_TEST_DIR/std_data/keyring_vault_confs/keyring_vault_incorrect_server.conf From 450e002868a93ed559f71a79f2daebc01f6c445c Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Thu, 25 Jan 2018 14:16:21 -0700 Subject: [PATCH 0428/1221] PS-259 : Issue during valgrind-yassl binary build PS-1121 : LP #1729321: Tokudb does not build when WITH_VALGRIND=1 - PerconaFT recognizes USE_VALGRIND and not WITH_VALGRIND. Added minor check in TokuDB CMakeLists.txt that setc USE_VALGRIND if WITH_VALGRIND is set. --- storage/tokudb/CMakeLists.txt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/storage/tokudb/CMakeLists.txt b/storage/tokudb/CMakeLists.txt index 56870b173ede..04fb58a0e7aa 100644 --- a/storage/tokudb/CMakeLists.txt +++ b/storage/tokudb/CMakeLists.txt @@ -92,7 +92,11 @@ ELSEIF (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/ft-index/") MESSAGE(WARNING "Found ft-index sources, ft-index is deprecated and replaced with PerconaFT.") SET(TOKU_FT_DIR_NAME "ft-index") ELSE () - MESSAGE(FATAL_ERROR "Could not find PerconaFT sources.") + MESSAGE(FATAL_ERROR "Could not find PerconaFT sources.") +ENDIF () + +IF (WITH_VALGRIND) + SET(USE_VALGRIND "ON") ENDIF () ADD_SUBDIRECTORY(${TOKU_FT_DIR_NAME}) From 4871d6323149591fe8e68f5a906d58378cab9e03 Mon Sep 17 00:00:00 2001 From: Davi Arnaut Date: Mon, 16 May 2011 08:32:07 -0300 Subject: [PATCH 0429/1221] Bug 11886774 - 59611 REMOVE THE PRAGMA INTERFACE/IMPLEMENTATION DECLARATIONS Remove some left over interface/implementation pragmas. --- sql/ha_partition.cc | 4 ---- sql/ha_partition.h | 4 ---- sql/item_xmlfunc.cc | 4 ---- sql/item_xmlfunc.h | 6 ------ sql/sql_partition.h | 4 ---- 5 files changed, 22 deletions(-) diff --git a/sql/ha_partition.cc b/sql/ha_partition.cc index e9fedd646369..868e5331dff6 100644 --- a/sql/ha_partition.cc +++ b/sql/ha_partition.cc @@ -49,10 +49,6 @@ if this file. */ -#ifdef __GNUC__ -#pragma implementation // gcc: Class implementation -#endif - #include "sql_priv.h" #include "sql_parse.h" // append_file_to_dir diff --git a/sql/ha_partition.h b/sql/ha_partition.h index 153e610d86f9..f0fc9650be08 100644 --- a/sql/ha_partition.h +++ b/sql/ha_partition.h @@ -17,10 +17,6 @@ along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#ifdef __GNUC__ -#pragma interface /* gcc class implementation */ -#endif - #include "sql_partition.h" /* part_id_range, partition_element */ #include "queues.h" /* QUEUE */ diff --git a/sql/item_xmlfunc.cc b/sql/item_xmlfunc.cc index 31cd4fdd170e..b6215b0c00c1 100644 --- a/sql/item_xmlfunc.cc +++ b/sql/item_xmlfunc.cc @@ -13,10 +13,6 @@ along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#ifdef __GNUC__ -#pragma implementation -#endif - #include "sql_priv.h" /* It is necessary to include set_var.h instead of item.h because there diff --git a/sql/item_xmlfunc.h b/sql/item_xmlfunc.h index adad6b8e87c1..ccf945620783 100644 --- a/sql/item_xmlfunc.h +++ b/sql/item_xmlfunc.h @@ -20,12 +20,6 @@ /* This file defines all XML functions */ - -#ifdef __GNUC__ -#pragma interface /* gcc class implementation */ -#endif - - class Item_xml_str_func: public Item_str_func { protected: diff --git a/sql/sql_partition.h b/sql/sql_partition.h index cfaab903f042..9cf5a01a8752 100644 --- a/sql/sql_partition.h +++ b/sql/sql_partition.h @@ -16,10 +16,6 @@ along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#ifdef __GNUC__ -#pragma interface /* gcc class implementation */ -#endif - #include "sql_list.h" /* List */ #include "table.h" /* TABLE_LIST */ From 6a3b87e1befcab0acf580714f5287c6d0d693986 Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Thu, 18 Jan 2018 08:37:18 +0000 Subject: [PATCH 0430/1221] PS-3780: Fixing release errors with GCC7 * Changed the type of m_gtid_purged from an enum to an ulong, as it's used with TYPELIB. * Removed basically broken c style casts of m_gtid_purged to ulong* * Changed C++ standard handling in the CMake files from hand written CXXFLAGS to the standard variables This is required because modern compilers default to C++14,which results in a long list of deprecation warnings for MySQL code, and the previous solution only set it explicitly to C++03 for debug builds - release builds compiled with C++14 mode, which could even cause semantic differences. * Fixed an snprintf call in update_timestamp * Moved update_timestamp to the cpp file from the header, as my_snprintf isn't available in the header * Added a missing mutex unlock in an execution path which should never happen * Fixed an unused variable in the release buld of a test, and made the tests's return code the result --- client/dump/sql_formatter.cc | 12 +++------ client/dump/sql_formatter_options.h | 7 ++++- .../compiler_options.cmake | 6 ++--- cmake/check_stdcxx11.cmake | 15 ++++++++--- sql/rpl_reporting.cc | 26 ++++++++++++++++++- sql/rpl_reporting.h | 19 +------------- storage/rocksdb/CMakeLists.txt | 10 ++++++- testclients/bug25714.c | 2 +- 8 files changed, 59 insertions(+), 38 deletions(-) diff --git a/client/dump/sql_formatter.cc b/client/dump/sql_formatter.cc index 34142c1bc930..612585b16bd1 100644 --- a/client/dump/sql_formatter.cc +++ b/client/dump/sql_formatter.cc @@ -302,7 +302,7 @@ void Sql_formatter::format_dump_start( << this->get_charset()->csname << ";\n"; if (dump_start_dump_task->m_gtid_mode == "OFF" && - *((ulong*)&m_options->m_gtid_purged) == ((ulong)GTID_PURGED_ON)) + m_options->m_gtid_purged == GTID_PURGED_ON) { m_options->m_mysql_chain_element_options->get_program()->error( Mysql::Tools::Base::Message_data(1, "Server has GTIDs disabled.\n", @@ -311,14 +311,8 @@ void Sql_formatter::format_dump_start( } if (dump_start_dump_task->m_gtid_mode != "OFF") { - /* - value for m_gtid_purged is set by typecasting its address to ulong* - however below conditions fails if we do direct comparison without - typecasting on solaris sparc. Guessing that this is due to differnt - endianess. - */ - if (*((ulong*)&m_options->m_gtid_purged) == ((ulong)GTID_PURGED_ON) || - *((ulong*)&m_options->m_gtid_purged) == ((ulong)GTID_PURGED_AUTO)) + if (m_options->m_gtid_purged == GTID_PURGED_ON || + m_options->m_gtid_purged == GTID_PURGED_AUTO) { if (!m_mysqldump_tool_options->m_dump_all_databases) { diff --git a/client/dump/sql_formatter_options.h b/client/dump/sql_formatter_options.h index 6155e7ef9265..0fbbe6207eb8 100644 --- a/client/dump/sql_formatter_options.h +++ b/client/dump/sql_formatter_options.h @@ -56,7 +56,12 @@ class Sql_formatter_options bool m_suppress_create_database; bool m_timezone_consistent; bool m_skip_definer; - enum enum_gtid_purged_mode m_gtid_purged; + // Storing m_gtid_purged as an ulong, because its setter code treats it as a + // long variable. + // Storing it as an enum causes issues on some systems beacuse of endianness, + // and only works because of the alignment of the next pointer on 64 bit + // systems. + ulong m_gtid_purged; const Mysql_chain_element_options* m_mysql_chain_element_options; const TYPELIB* get_gtid_purged_mode_typelib() diff --git a/cmake/build_configurations/compiler_options.cmake b/cmake/build_configurations/compiler_options.cmake index 1453b6b0e4ba..372b1866711f 100644 --- a/cmake/build_configurations/compiler_options.cmake +++ b/cmake/build_configurations/compiler_options.cmake @@ -24,9 +24,12 @@ ENDIF() IF(SIZEOF_VOIDP EQUAL 8) SET(64BIT 1) ENDIF() + +SET(CMAKE_CXX_STANDARD 98) # Compiler options IF(UNIX) + SET(CMAKE_CXX98_EXTENSION_COMPILE_OPTION -std=gnu++03) # Default GCC flags IF(CMAKE_COMPILER_IS_GNUCC) @@ -58,9 +61,6 @@ IF(UNIX) # GCC 6 has C++14 as default, set it explicitly to the old default. EXECUTE_PROCESS(COMMAND ${CMAKE_CXX_COMPILER} -dumpversion OUTPUT_VARIABLE GXX_VERSION) - IF(GXX_VERSION VERSION_EQUAL 6.0 OR GXX_VERSION VERSION_GREATER 6.0) - SET(COMMON_CXX_FLAGS "${COMMON_CXX_FLAGS} -std=gnu++03") - ENDIF() # Disable inline optimizations for valgrind testing to avoid false positives IF(WITH_VALGRIND) SET(COMMON_CXX_FLAGS "-fno-inline ${COMMON_CXX_FLAGS}") diff --git a/cmake/check_stdcxx11.cmake b/cmake/check_stdcxx11.cmake index 1987bf37ce9c..1aa0062e3361 100644 --- a/cmake/check_stdcxx11.cmake +++ b/cmake/check_stdcxx11.cmake @@ -22,8 +22,15 @@ INCLUDE (CheckCXXCompilerFlag) check_cxx_compiler_flag (-std=c++11 HAVE_STDCXX11) IF (HAVE_STDCXX11) - STRING (REPLACE "-std=gnu++03" "" COMMON_CXX_FLAGS ${COMMON_CXX_FLAGS}) - STRING (REPLACE "-std=gnu++03" "" CMAKE_CXX_FLAGS_DEBUG ${CMAKE_CXX_FLAGS_DEBUG}) - STRING (REPLACE "-std=gnu++03" "" CMAKE_CXX_FLAGS_RELWITHDEBINFO ${CMAKE_CXX_FLAGS_RELWITHDEBINFO}) - SET (CMAKE_CXX_FLAGS "-std=c++11 -Wno-deprecated-declarations ${CMAKE_CXX_FLAGS}") + IF ("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" VERSION_GREATER "3.1") + SET (CMAKE_CXX_FLAGS "-Wno-deprecated-declarations ${CMAKE_CXX_FLAGS}") + ELSE () + # CMAKE_CXX_STANDARD was introduced in CMake 3.1, it will be ignored by older CMake + SET (CMAKE_CXX_FLAGS "--std=c++11 -Wno-deprecated-declarations ${CMAKE_CXX_FLAGS}") + ENDIF() ENDIF () + + +SET(CMAKE_CXX_STANDARD 11) +SET(CMAKE_CXX_EXTENSIONS OFF) +SET(CMAKE_CXX_STANDARD_REQUIRED ON) diff --git a/sql/rpl_reporting.cc b/sql/rpl_reporting.cc index c4764873b30f..91339444952a 100644 --- a/sql/rpl_reporting.cc +++ b/sql/rpl_reporting.cc @@ -114,6 +114,28 @@ Slave_reporting_capability::report(loglevel level, int err_code, va_end(args); } +void +Slave_reporting_capability::Error::update_timestamp() +{ + struct tm tm_tmp; + struct tm *start; + + skr= my_time(0); + localtime_r(&skr, &tm_tmp); + start=&tm_tmp; + + my_snprintf(timestamp, + sizeof(timestamp), + "%02d%02d%02d %02d:%02d:%02d", + start->tm_year % 100, + start->tm_mon+1, + start->tm_mday, + start->tm_hour, + start->tm_min, + start->tm_sec); + timestamp[15]= '\0'; +} + void Slave_reporting_capability::va_report(loglevel level, int err_code, const char *prefix_msg, @@ -154,7 +176,9 @@ Slave_reporting_capability::va_report(loglevel level, int err_code, break; default: DBUG_ASSERT(0); // should not come here - return; // don't crash production builds, just do nothing + // don't crash production builds, just do nothing + mysql_mutex_unlock(&err_lock); + return; } curr_buff= pbuff; if (prefix_msg) diff --git a/sql/rpl_reporting.h b/sql/rpl_reporting.h index 7ed39916c682..59b067a37291 100644 --- a/sql/rpl_reporting.h +++ b/sql/rpl_reporting.h @@ -101,24 +101,7 @@ class Slave_reporting_capability } - void update_timestamp() - { - struct tm tm_tmp; - struct tm *start; - - skr= my_time(0); - localtime_r(&skr, &tm_tmp); - start=&tm_tmp; - - sprintf(timestamp, "%02d%02d%02d %02d:%02d:%02d", - start->tm_year % 100, - start->tm_mon+1, - start->tm_mday, - start->tm_hour, - start->tm_min, - start->tm_sec); - timestamp[15]= '\0'; - } + void update_timestamp(); /** Error code */ uint32 number; diff --git a/storage/rocksdb/CMakeLists.txt b/storage/rocksdb/CMakeLists.txt index e5f7c413b6ef..ef41f6307384 100644 --- a/storage/rocksdb/CMakeLists.txt +++ b/storage/rocksdb/CMakeLists.txt @@ -1,4 +1,5 @@ # TODO: Copyrights +SET(CMAKE_CXX_STANDARD 11) # by default MyRocks is not built IF (NOT DEFINED WITH_ROCKSDB) @@ -34,6 +35,13 @@ IF ((CMAKE_CXX_COMPILER_ID STREQUAL GNU) AND RETURN () ENDIF () +# Relax unused variable warnings for release modes +MY_CHECK_CXX_COMPILER_FLAG("-Wunused-variable" HAVE_UNUSED_VARIABLE) +IF(HAVE_UNUSED_VARIABLE) + SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wno-unused-variable") + SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -Wno-unused-variable") +ENDIF() + # Relax fallthrough warnings we have no control over, as it's in zstd IF(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") MY_CHECK_CXX_COMPILER_FLAG("-Wimplicit-fallthrough=0" HAVE_IMPLICIT_FALLTHROUGH) @@ -60,7 +68,7 @@ IF(HAVE_SCHED_GETCPU) ENDIF() SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.2") -SET(CMAKE_REQUIRED_FLAGS ${CMAKE_CXX_FLAGS}) +SET(CMAKE_REQUIRED_FLAGS "${CMAKE_CXX_FLAGS} --std=c++11") INCLUDE(CheckCXXSourceCompiles) CHECK_CXX_SOURCE_COMPILES(" #include diff --git a/testclients/bug25714.c b/testclients/bug25714.c index 8d02c26c4363..3920eb8af8d1 100644 --- a/testclients/bug25714.c +++ b/testclients/bug25714.c @@ -71,6 +71,6 @@ int main (int argc, char **argv) mysql_close(&conn); my_end(0); - return 0; + return OK; } From d75842dd4ab1ef1ebaa45841a7016fa9ddc3b992 Mon Sep 17 00:00:00 2001 From: Aditya A Date: Mon, 29 Jan 2018 17:17:21 +0530 Subject: [PATCH 0431/1221] Bug #27304661 MYSQL CRASH DOING SYNC INDEX ] [FATAL] INNODB: SEMAPHORE WAIT HAS LASTED > 600 PROBLEM ------- Whenever an fts table is created it registers itself in a queue which is operated by a background thread whose job is to optimize the fts tables in background. Additionally we place these fts tables in non-LRU list so that they cannot be evicted from cache. But in the scenario when a node is brought up which is already having fts tables ,we first try to load the fts tables in dictionary ,but we skip the part where it is added in background queue and in non-LRU list because the background thread is not yet created,so these tables are loaded but they can be evicted from the cache. Now coming to the deadlock scenario 1. A Server background thread is trying to evict a table from the cache because the cache is full,so it scans the LRU list for the tables it can evict.It finds the fts table (because of the reason explained above) can be evicted and it takes the dict_sys->mutex (this is a system wide mutex) submits a request to the background thread to remove this table from queue and waits it to be completed. 2. In the mean time fts_optimize_thread() is processing another job in the queue and needs dict_sys->mutex for a small amount of time, but it cannot get it because it is blocked by the first background thread. So Thread 1 is waiting for its job to be completed by Thread 2,whereas Thread 2 is waiting for dict_sys->mutex held by thread 1 ,causing the deadlock. FIX --- The fix was to fundamentally block the eviction of fts tables from the cache. We identify the fts tables at the startup and move them to non-LRU list , so that they cannot be evicted from cache. By doing this we avoid deadlock. [#rb 18467 and #rb 18513 Reviwed by Jimmy and krzysztof ] --- .../innodb_fts/r/fulltext_table_evict.result | 19 +++++ .../innodb_fts/t/fulltext_table_evict.test | 47 +++++++++++ storage/innobase/dict/dict0dict.cc | 9 ++- storage/innobase/fts/fts0opt.cc | 78 ++++++++++++++----- 4 files changed, 132 insertions(+), 21 deletions(-) create mode 100644 mysql-test/suite/innodb_fts/r/fulltext_table_evict.result create mode 100644 mysql-test/suite/innodb_fts/t/fulltext_table_evict.test diff --git a/mysql-test/suite/innodb_fts/r/fulltext_table_evict.result b/mysql-test/suite/innodb_fts/r/fulltext_table_evict.result new file mode 100644 index 000000000000..410bf2a34e15 --- /dev/null +++ b/mysql-test/suite/innodb_fts/r/fulltext_table_evict.result @@ -0,0 +1,19 @@ +# +# Bug Bug #27304661 MYSQL CRASH DOING SYNC INDEX ] +# [FATAL] INNODB: SEMAPHORE WAIT HAS LASTED > 600 +# +CREATE TABLE t1 ( +id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, +f1 TEXT(500), +FULLTEXT idx (f1) +) ENGINE=InnoDB; +insert into t1 (f1) values ('fjdhfsjhf'),('dhjfhjshfj'),('dhjafjhfj'); +# restart +set @save_table_definition_cache=@@global.table_definition_cache; +set @save_table_open_cache=@@global.table_open_cache; +set global table_definition_cache=400; +set global table_open_cache= 1024; +SET GLOBAL DEBUG="+d,crash_if_fts_table_is_evicted"; +set @@global.table_definition_cache=@save_table_definition_cache; +set @@global.table_open_cache=@save_table_open_cache; +drop table t1; diff --git a/mysql-test/suite/innodb_fts/t/fulltext_table_evict.test b/mysql-test/suite/innodb_fts/t/fulltext_table_evict.test new file mode 100644 index 000000000000..245f00bc3367 --- /dev/null +++ b/mysql-test/suite/innodb_fts/t/fulltext_table_evict.test @@ -0,0 +1,47 @@ +--echo # +--echo # Bug Bug #27304661 MYSQL CRASH DOING SYNC INDEX ] +--echo # [FATAL] INNODB: SEMAPHORE WAIT HAS LASTED > 600 +--echo # + +--source include/have_innodb.inc +--source include/have_debug.inc + +CREATE TABLE t1 ( + id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, + f1 TEXT(500), + FULLTEXT idx (f1) + ) ENGINE=InnoDB; +insert into t1 (f1) values ('fjdhfsjhf'),('dhjfhjshfj'),('dhjafjhfj'); + +--source include/restart_mysqld.inc + +set @save_table_definition_cache=@@global.table_definition_cache; +set @save_table_open_cache=@@global.table_open_cache; + +set global table_definition_cache=400; +set global table_open_cache= 1024; + +SET GLOBAL DEBUG="+d,crash_if_fts_table_is_evicted"; +#Create 1000 tables, try the best to evict t1 . + +--disable_query_log +let $loop=1000; +while($loop) +{ + eval create table t_$loop(id int, name text(100), fulltext idxt_$loop(name) )engine=innodb; + dec $loop; +} + +let $loop=1000; +while($loop) +{ + eval drop table t_$loop; + dec $loop; +} + +SET GLOBAL DEBUG="-d,crash_if_fts_table_is_evicted"; +--enable_query_log +set @@global.table_definition_cache=@save_table_definition_cache; +set @@global.table_open_cache=@save_table_open_cache; +drop table t1; + diff --git a/storage/innobase/dict/dict0dict.cc b/storage/innobase/dict/dict0dict.cc index 6dec1efd547a..f8b147bff016 100644 --- a/storage/innobase/dict/dict0dict.cc +++ b/storage/innobase/dict/dict0dict.cc @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2017, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2018, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2012, Facebook Inc. This program is free software; you can redistribute it and/or modify it under @@ -1559,6 +1559,13 @@ dict_make_room_in_cache( if (dict_table_can_be_evicted(table)) { + DBUG_EXECUTE_IF("crash_if_fts_table_is_evicted", + { + if (table->fts && + dict_table_has_fts_index(table)) { + ut_ad(0); + } + };); dict_table_remove_from_cache_low(table, TRUE); ++n_evicted; diff --git a/storage/innobase/fts/fts0opt.cc b/storage/innobase/fts/fts0opt.cc index 1b77e489e91c..f28e54e04ace 100644 --- a/storage/innobase/fts/fts0opt.cc +++ b/storage/innobase/fts/fts0opt.cc @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2007, 2017, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2007, 2018, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -45,6 +45,9 @@ Completed 2011/7/10 Sunny and Jimmy Yang /** The FTS optimize thread's work queue. */ static ib_wqueue_t* fts_optimize_wq; +/** The FTS vector to store fts_slot_t */ +static ib_vector_t* fts_slots; + /** Time to wait for a message. */ static const ulint FTS_QUEUE_WAIT_IN_USECS = 5000000; @@ -2972,9 +2975,6 @@ fts_optimize_thread( /*================*/ void* arg) /*!< in: work queue*/ { - mem_heap_t* heap; - ib_vector_t* tables; - ib_alloc_t* heap_alloc; ulint current = 0; ibool done = FALSE; ulint n_tables = 0; @@ -2984,10 +2984,10 @@ fts_optimize_thread( ut_ad(!srv_read_only_mode); my_thread_init(); - heap = mem_heap_create(sizeof(dict_table_t*) * 64); - heap_alloc = ib_heap_allocator_create(heap); + ut_ad(fts_slots); - tables = ib_vector_create(heap_alloc, sizeof(fts_slot_t), 4); + /* Assign number of tables added in fts_slots_t to n_tables */ + n_tables = ib_vector_size(fts_slots); while (!done && srv_shutdown_state == SRV_SHUTDOWN_NONE) { @@ -3001,10 +3001,10 @@ fts_optimize_thread( fts_slot_t* slot; - ut_a(ib_vector_size(tables) > 0); + ut_a(ib_vector_size(fts_slots) > 0); slot = static_cast( - ib_vector_get(tables, current)); + ib_vector_get(fts_slots, current)); /* Handle the case of empty slots. */ if (slot->state != FTS_STATE_EMPTY) { @@ -3017,8 +3017,8 @@ fts_optimize_thread( ++current; /* Wrap around the counter. */ - if (current >= ib_vector_size(tables)) { - n_optimize = fts_optimize_how_many(tables); + if (current >= ib_vector_size(fts_slots)) { + n_optimize = fts_optimize_how_many(fts_slots); current = 0; } @@ -3032,7 +3032,7 @@ fts_optimize_thread( /* Timeout ? */ if (msg == NULL) { - if (fts_is_sync_needed(tables)) { + if (fts_is_sync_needed(fts_slots)) { fts_need_sync = true; } @@ -3053,7 +3053,7 @@ fts_optimize_thread( case FTS_MSG_ADD_TABLE: ut_a(!done); if (fts_optimize_new_table( - tables, + fts_slots, static_cast( msg->ptr))) { ++n_tables; @@ -3063,7 +3063,7 @@ fts_optimize_thread( case FTS_MSG_OPTIMIZE_TABLE: if (!done) { fts_optimize_start_table( - tables, + fts_slots, static_cast( msg->ptr)); } @@ -3071,7 +3071,7 @@ fts_optimize_thread( case FTS_MSG_DEL_TABLE: if (fts_optimize_del_table( - tables, static_cast( + fts_slots, static_cast( msg->ptr))) { --n_tables; } @@ -3094,7 +3094,7 @@ fts_optimize_thread( mem_heap_free(msg->heap); if (!done) { - n_optimize = fts_optimize_how_many(tables); + n_optimize = fts_optimize_how_many(fts_slots); } else { n_optimize = 0; } @@ -3106,11 +3106,11 @@ fts_optimize_thread( if (n_tables > 0) { ulint i; - for (i = 0; i < ib_vector_size(tables); i++) { + for (i = 0; i < ib_vector_size(fts_slots); i++) { fts_slot_t* slot; slot = static_cast( - ib_vector_get(tables, i)); + ib_vector_get(fts_slots, i)); if (slot->state != FTS_STATE_EMPTY) { fts_optimize_sync_table(slot->table_id); @@ -3118,7 +3118,7 @@ fts_optimize_thread( } } - ib_vector_free(tables); + ib_vector_free(fts_slots); ib::info() << "FTS optimize thread exiting."; @@ -3138,14 +3138,52 @@ void fts_optimize_init(void) /*===================*/ { + mem_heap_t* heap; + ib_alloc_t* heap_alloc; + dict_table_t* table; + ut_ad(!srv_read_only_mode); /* For now we only support one optimize thread. */ ut_a(fts_optimize_wq == NULL); + /* Create FTS optimize work queue */ fts_optimize_wq = ib_wqueue_create(); - fts_opt_shutdown_event = os_event_create(0); ut_a(fts_optimize_wq != NULL); + + /* Create FTS vector to store fts_slot_t */ + heap = mem_heap_create(sizeof(dict_table_t*) * 64); + heap_alloc = ib_heap_allocator_create(heap); + fts_slots = ib_vector_create(heap_alloc, sizeof(fts_slot_t), 4); + + /* Add fts tables to the fts_slots vector which were skipped during restart */ + std::vector table_vector; + std::vector::iterator it; + + mutex_enter(&dict_sys->mutex); + for (table = UT_LIST_GET_FIRST(dict_sys->table_LRU); + table != NULL; + table = UT_LIST_GET_NEXT(table_LRU, table)) { + if (table->fts && + dict_table_has_fts_index(table)) { + if (fts_optimize_new_table(fts_slots, + table)){ + table_vector.push_back(table); + } + } + } + + /* It is better to call dict_table_prevent_eviction() + outside the above loop because it operates on + dict_sys->table_LRU list.*/ + for (it=table_vector.begin();it!=table_vector.end();++it) { + dict_table_prevent_eviction(*it); + } + + mutex_exit(&dict_sys->mutex); + table_vector.clear(); + + fts_opt_shutdown_event = os_event_create(0); last_check_sync_time = ut_time(); os_thread_create(fts_optimize_thread, fts_optimize_wq, NULL); From 0ffca5f043a4e80121581506d220a6cadc1ac869 Mon Sep 17 00:00:00 2001 From: Aakanksha Verma Date: Mon, 29 Jan 2018 18:47:23 +0530 Subject: [PATCH 0432/1221] Bug #27141613 ASSERTION: TRX0REC.CC:319:COL->IS_VIRTUAL() / CRASH IN TRX_UNDO_READ_V_COLS PROBLEM ======= When add of virtual index fails with DB_TOO_BIG_RECORD , the virtual index being freed isn't removed from the list of indexes a virtual column(which is part of the index). This while the undo log is read could fetch a wrong value during rollback and cause the assertion reported in the bug particularly. FIX === Added a function that is called when the virtual index being freed would allow the index be removed from the index list of virtual column which was a field of that index. Reviwed By: Jimmy Yang RB: 18528 --- storage/innobase/dict/dict0dict.cc | 35 ++++++++++++++++++++++++++++ storage/innobase/dict/dict0mem.cc | 3 ++- storage/innobase/include/dict0dict.h | 8 ++++++- 3 files changed, 44 insertions(+), 2 deletions(-) diff --git a/storage/innobase/dict/dict0dict.cc b/storage/innobase/dict/dict0dict.cc index f8b147bff016..818a2e164793 100644 --- a/storage/innobase/dict/dict0dict.cc +++ b/storage/innobase/dict/dict0dict.cc @@ -2555,6 +2555,41 @@ dict_index_add_to_cache( table, index, NULL, page_no, strict)); } +/** Clears the virtual column's index list before index is +being freed. +@param[in] index Index being freed */ +void +dict_index_remove_from_v_col_list(dict_index_t* index) { + + if (dict_index_has_virtual(index)) { + const dict_col_t* col; + const dict_v_col_t* vcol; + + for (ulint i = 0; i < dict_index_get_n_fields(index); i++) { + col = dict_index_get_nth_col(index, i); + if (dict_col_is_virtual(col)) { + vcol = reinterpret_cast( + col); + /* This could be NULL, when we do add + virtual column, add index together. We do not + need to track this virtual column's index */ + if (vcol->v_indexes == NULL) { + continue; + } + dict_v_idx_list::iterator it; + for (it = vcol->v_indexes->begin(); + it != vcol->v_indexes->end(); ++it) { + dict_v_idx_t v_index = *it; + if (v_index.index == index) { + vcol->v_indexes->erase(it); + break; + } + } + } + } + } +} + /** Adds an index to the dictionary cache, with possible indexing newly added column. @param[in,out] table table on which the index is diff --git a/storage/innobase/dict/dict0mem.cc b/storage/innobase/dict/dict0mem.cc index 863cf6da5c5b..7ce90f385387 100644 --- a/storage/innobase/dict/dict0mem.cc +++ b/storage/innobase/dict/dict0mem.cc @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2017, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2018, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2012, Facebook Inc. This program is free software; you can redistribute it and/or modify it under @@ -1023,6 +1023,7 @@ dict_mem_index_free( UT_DELETE(index->rtr_track->rtr_active); } + dict_index_remove_from_v_col_list(index); mem_heap_free(index->heap); } diff --git a/storage/innobase/include/dict0dict.h b/storage/innobase/include/dict0dict.h index 1f947730f131..29538351714e 100644 --- a/storage/innobase/include/dict0dict.h +++ b/storage/innobase/include/dict0dict.h @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2017, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2018, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2012, Facebook Inc. This program is free software; you can redistribute it and/or modify it under @@ -1137,6 +1137,12 @@ dict_index_add_to_cache( ibool strict) MY_ATTRIBUTE((warn_unused_result)); +/** Clears the virtual column's index list before index is being freed. +@param[in] index Index being freed */ +void +dict_index_remove_from_v_col_list( + dict_index_t* index); + /** Adds an index to the dictionary cache, with possible indexing newly added column. @param[in] table table on which the index is From ec121e4e4263acabc3035fdf93da2a801feddc62 Mon Sep 17 00:00:00 2001 From: Yura Sorokin Date: Mon, 29 Jan 2018 16:00:22 +0200 Subject: [PATCH 0433/1221] Fixed PS-3781 ('main.mysqld--help-notwin' MTR test case fails after introducing 'ft-query-extra-word-chars') https://jira.percona.com/projects/PS/issues/PS-3781 Re-recorded 'main.mysqld--help-notwin' MTR test case because of the new 'ft-query-extra-word-chars' system variable introduces in the fix for PS-2501 "LP #1689268: Fulltext search can not find word which contains punctuation marks" (https://jira.percona.com/browse/PS-2501). --- mysql-test/r/mysqld--help-notwin.result | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/mysql-test/r/mysqld--help-notwin.result b/mysql-test/r/mysqld--help-notwin.result index d507a88552a2..71f5ced7e0f7 100644 --- a/mysql-test/r/mysqld--help-notwin.result +++ b/mysql-test/r/mysqld--help-notwin.result @@ -299,6 +299,9 @@ The following options may be given as the first argument: after changing this variable --ft-query-expansion-limit=# Number of best matches to use for query expansion + --ft-query-extra-word-chars + If enabled, all non-whitespace characters are considered + word symbols for full text search queries --ft-stopword-file=name Use stopwords from this file instead of built-in list --gdb Set up signals usable for debugging. @@ -1410,6 +1413,7 @@ ft-boolean-syntax + -><()~*:""&| ft-max-word-len 84 ft-min-word-len 4 ft-query-expansion-limit 20 +ft-query-extra-word-chars FALSE ft-stopword-file (No default value) gdb FALSE general-log FALSE From b3bbeb74c4638362bd0d3e313c1b8194c36f6d4c Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Mon, 29 Jan 2018 08:37:27 -0700 Subject: [PATCH 0434/1221] TDB-48 : mtr Valgrind errors on LZMA - Added mtr Valgrind suppression for PerconaFT LZMA lz_encoder_prepare --- mysql-test/valgrind.supp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/mysql-test/valgrind.supp b/mysql-test/valgrind.supp index 987d9cf49e12..aa62ecd1ad9a 100644 --- a/mysql-test/valgrind.supp +++ b/mysql-test/valgrind.supp @@ -915,6 +915,13 @@ fun:tls_get_addr_tail } +{ + lzma encoder prepare bug + Memcheck:Cond + fun:lz_encoder_prepare + fun:lzma_lz_encoder_init +} + #supress warnings from openssl { From 1bbf70f139bf602c7237652c73b36e9d1ebe5146 Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Fri, 15 Dec 2017 14:40:20 +0100 Subject: [PATCH 0435/1221] PS-3767: Fixed clang 4/5 warnings. * Removed unneccessary parantheses from conditions * Removed two tautological asserts * Fixed a const char* -> char* conversion * Changed null checks of arrays to compile time assertions that they are arrays * Added some explicit casts * Removed unused functions / variables * Marked functions / variables which are only used in some configurations with ifdefs * Updated travis config: added the llvm-dev package to fix linking issues * Fixed a typo in a header guard in the bundled yassl library --- .travis.yml | 6 ++--- client/mysqldump.c | 2 +- cmd-line-utils/readline/history.c | 4 +-- extra/yassl/include/openssl/crypto.h | 2 +- libmysql/libmysql.c | 3 ++- libmysqld/lib_sql.cc | 3 ++- mysys/default.c | 2 +- mysys/thr_lock.c | 11 -------- sql/item.cc | 8 ++++-- sql/item_subselect.cc | 1 - sql/log.cc | 5 ++-- sql/log_event.cc | 5 ++-- sql/log_event_old.cc | 4 +-- sql/opt_sum.cc | 2 +- sql/slave.cc | 11 ++++---- sql/sql_acl.cc | 19 +++++++------- sql/sql_audit.cc | 7 ++--- sql/sql_parse.cc | 4 +-- sql/sql_partition.cc | 2 +- sql/sql_signal.cc | 15 ----------- sql/unireg.cc | 1 - storage/csv/ha_tina.cc | 4 +-- storage/federated/ha_federated.cc | 3 +-- storage/innobase/fsp/fsp0fsp.c | 37 --------------------------- storage/innobase/handler/ha_innodb.cc | 4 +-- storage/innobase/os/os0sync.c | 18 ------------- storage/innobase/sync/sync0sync.c | 4 +-- strings/decimal.c | 2 +- 28 files changed, 57 insertions(+), 132 deletions(-) diff --git a/.travis.yml b/.travis.yml index 4e724a793322..1282dcea9d8a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,12 +14,12 @@ matrix: - env: GCC=gcc-4.8 CXX=g++-4.8 LIBTYPE=system - env: GCC=gcc-7 CXX=g++-7 LIBTYPE=system PACKAGES=g++-7 PPA=ubuntu-toolchain-r/test - env: GCC=gcc-7 CXX=g++-7 LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" PACKAGES=g++-7 PPA=ubuntu-toolchain-r/test - - env: GCC=clang-5.0 CXX=clang++-5.0 LIBTYPE=system PACKAGES=clang-5.0 LLVM=llvm-toolchain-trusty-5.0 + - env: GCC=clang-5.0 CXX=clang++-5.0 LIBTYPE=system PACKAGES="clang-5.0 llvm-5.0-dev" LLVM=llvm-toolchain-trusty-5.0 # only for pull requests - env: GCC=gcc-5 CXX=g++-5 LIBTYPE=system PACKAGES=g++-5 PPA=ubuntu-toolchain-r/test - env: GCC=gcc-6 CXX=g++-6 LIBTYPE=system PACKAGES=g++-6 PPA=ubuntu-toolchain-r/test - - env: GCC=clang-4.0 CXX=clang++-4.0 LIBTYPE=system PACKAGES=clang-4.0 PPA=ubuntu-toolchain-r/test LLVM=llvm-toolchain-trusty-4.0 - - env: GCC=clang-5.0 CXX=clang++-5.0 LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" PACKAGES=clang-5.0 LLVM=llvm-toolchain-trusty-5.0 + - env: GCC=clang-4.0 CXX=clang++-4.0 LIBTYPE=system PACKAGES="clang-4.0 llvm-4.0-dev" PPA=ubuntu-toolchain-r/test LLVM=llvm-toolchain-trusty-4.0 + - env: GCC=clang-5.0 CXX=clang++-5.0 LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" PACKAGES="clang-5.0 llvm-5.0-dev" LLVM=llvm-toolchain-trusty-5.0 script: - export CC=$GCC diff --git a/client/mysqldump.c b/client/mysqldump.c index 8244729f9864..d1a7373c9836 100644 --- a/client/mysqldump.c +++ b/client/mysqldump.c @@ -2575,7 +2575,7 @@ static my_bool contains_autoinc_column(const char *autoinc_column, Check only the first (for PRIMARY KEY) or the second (for secondary keys) quoted identifier. */ - if ((idnum == 1 + test(type != KEY_TYPE_PRIMARY))) + if (idnum == 1 + test(type != KEY_TYPE_PRIMARY)) break; keydef= to + 1; diff --git a/cmd-line-utils/readline/history.c b/cmd-line-utils/readline/history.c index 7db40059dfd1..95c929c77490 100644 --- a/cmd-line-utils/readline/history.c +++ b/cmd-line-utils/readline/history.c @@ -211,14 +211,14 @@ history_get (offset) HIST_ENTRY * alloc_history_entry (string, ts) - char *string; + const char *string; char *ts; { HIST_ENTRY *temp; temp = (HIST_ENTRY *)xmalloc (sizeof (HIST_ENTRY)); - temp->line = string ? savestring (string) : string; + temp->line = string ? savestring (string) : NULL; temp->data = (char *)NULL; temp->timestamp = ts; diff --git a/extra/yassl/include/openssl/crypto.h b/extra/yassl/include/openssl/crypto.h index 103fcbb0e30e..ac1e7ebc8eb6 100644 --- a/extra/yassl/include/openssl/crypto.h +++ b/extra/yassl/include/openssl/crypto.h @@ -19,7 +19,7 @@ /* crypto.h for openSSL */ -#ifndef ysSSL_crypto_h__ +#ifndef yaSSL_crypto_h__ #define yaSSL_crypto_h__ #ifdef YASSL_PREFIX diff --git a/libmysql/libmysql.c b/libmysql/libmysql.c index 5980cfe0c5a8..a29055e732b7 100644 --- a/libmysql/libmysql.c +++ b/libmysql/libmysql.c @@ -1379,7 +1379,8 @@ void set_stmt_errmsg(MYSQL_STMT *stmt, NET *net) DBUG_ASSERT(stmt != 0); stmt->last_errno= net->last_errno; - if (net->last_error && net->last_error[0]) + compile_time_assert(sizeof(net->last_error) / sizeof(void*) > 1); + if (net->last_error[0]) strmov(stmt->last_error, net->last_error); strmov(stmt->sqlstate, net->sqlstate); diff --git a/libmysqld/lib_sql.cc b/libmysqld/lib_sql.cc index 7c8e9d3426a6..cf0548d11c06 100644 --- a/libmysqld/lib_sql.cc +++ b/libmysqld/lib_sql.cc @@ -442,7 +442,8 @@ static MYSQL_RES * emb_store_result(MYSQL *mysql) int emb_read_change_user_result(MYSQL *mysql) { mysql->net.read_pos= (uchar*)""; // fake an OK packet - return mysql_errno(mysql) ? packet_error : 1 /* length of the OK packet */; + return mysql_errno(mysql) ? static_cast(packet_error) : + 1 /* length of the OK packet */; } MYSQL_METHODS embedded_methods= diff --git a/mysys/default.c b/mysys/default.c index adf96b0b8506..ea02d94daa72 100644 --- a/mysys/default.c +++ b/mysys/default.c @@ -818,7 +818,7 @@ static int search_default_file_with_ext(Process_option_func opt_handler, continue; /* Configuration File Directives */ - if ((*ptr == '!')) + if (*ptr == '!') { if (recursion_level >= max_recursion_level) { diff --git a/mysys/thr_lock.c b/mysys/thr_lock.c index 29594d96b64d..2d14efa111e1 100644 --- a/mysys/thr_lock.c +++ b/mysys/thr_lock.c @@ -375,17 +375,6 @@ has_old_lock(THR_LOCK_DATA *data, THR_LOCK_INFO *owner) return 0; } -static inline my_bool have_specific_lock(THR_LOCK_DATA *data, - enum thr_lock_type type) -{ - for ( ; data ; data=data->next) - { - if (data->type == type) - return 1; - } - return 0; -} - static void wake_up_waiters(THR_LOCK *lock); diff --git a/sql/item.cc b/sql/item.cc index d07ede6cad8d..ffb35718ea36 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -7035,7 +7035,9 @@ bool Item_default_value::fix_fields(THD *thd, Item **items) } if (!(def_field= (Field*) sql_alloc(field_arg->field->size_of()))) goto error; - memcpy(def_field, field_arg->field, field_arg->field->size_of()); + memcpy(static_cast(def_field), + static_cast(field_arg->field), + field_arg->field->size_of()); def_field->move_field_offset((my_ptrdiff_t) (def_field->table->s->default_values - def_field->table->record[0])); @@ -7172,7 +7174,9 @@ bool Item_insert_value::fix_fields(THD *thd, Item **items) Field *def_field= (Field*) sql_alloc(field_arg->field->size_of()); if (!def_field) return true; - memcpy(def_field, field_arg->field, field_arg->field->size_of()); + memcpy(static_cast(def_field), + static_cast(field_arg->field), + field_arg->field->size_of()); def_field->move_field_offset((my_ptrdiff_t) (def_field->table->insert_values - def_field->table->record[0])); diff --git a/sql/item_subselect.cc b/sql/item_subselect.cc index 21c897da2bea..1f7f2b84b584 100644 --- a/sql/item_subselect.cc +++ b/sql/item_subselect.cc @@ -649,7 +649,6 @@ Item_exists_subselect::Item_exists_subselect(st_select_lex *select_lex): Item_subselect() { DBUG_ENTER("Item_exists_subselect::Item_exists_subselect"); - bool val_bool(); init(select_lex, new select_exists_subselect(this)); max_columns= UINT_MAX; null_value= FALSE; //can't be NULL diff --git a/sql/log.cc b/sql/log.cc index 567ef183f62e..11a7a9baec70 100644 --- a/sql/log.cc +++ b/sql/log.cc @@ -1236,8 +1236,9 @@ bool LOGGER::slow_log_print(THD *thd, const char *query, uint query_length, } /* fill in user_host value: the format is "%s[%s] @ %s [%s]" */ + compile_time_assert(sizeof(sctx->priv_user) / sizeof(void*) > 1); user_host_len= (strxnmov(user_host_buff, MAX_USER_HOST_SIZE, - sctx->priv_user ? sctx->priv_user : "", "[", + sctx->priv_user, "[", sctx->user ? sctx->user : (thd->slave_thread ? "SQL_SLAVE" : ""), "] @ ", sctx->get_host()->length() ? sctx->get_host()->ptr() : "", " [", @@ -2240,7 +2241,7 @@ static int find_uniq_filename(char *name, ulong *next, bool need_next) my_dirend(dir_info); /* check if reached the maximum possible extension number */ - if ((max_found == MAX_LOG_UNIQUE_FN_EXT)) + if (max_found == MAX_LOG_UNIQUE_FN_EXT) { sql_print_error("Log filename extension number exhausted: %06lu. \ Please fix this by archiving old logs and \ diff --git a/sql/log_event.cc b/sql/log_event.cc index 249a351aa019..b54777a33938 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -1164,7 +1164,7 @@ failed my_b_read")); Log_event *res= 0; #ifndef max_allowed_packet THD *thd=current_thd; - uint max_allowed_packet= thd ? slave_max_allowed_packet:~(ulong)0; + ulong max_allowed_packet= thd ? slave_max_allowed_packet:~(ulong)0; #endif if (data_len > max_allowed_packet) @@ -2400,8 +2400,9 @@ bool Query_log_event::write(IO_CACHE* file) user= thd->get_invoker_user(); host= thd->get_invoker_host(); } - else if (thd->security_ctx->priv_user) + else { + compile_time_assert(sizeof(thd->security_ctx->priv_user) / sizeof(void*) > 1); Security_context *ctx= thd->security_ctx; user.length= strlen(ctx->priv_user); diff --git a/sql/log_event_old.cc b/sql/log_event_old.cc index fefe5d8cea24..144a302facc9 100644 --- a/sql/log_event_old.cc +++ b/sql/log_event_old.cc @@ -1724,7 +1724,7 @@ int Old_rows_log_event::do_apply_event(Relay_log_info const *rli) 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->net.last_error); thd->is_slave_error= 1; break; } @@ -1764,7 +1764,7 @@ int Old_rows_log_event::do_apply_event(Relay_log_info const *rli) "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 : ""); + thd->net.last_error); /* If one day we honour --skip-slave-errors in row-based replication, and diff --git a/sql/opt_sum.cc b/sql/opt_sum.cc index daa6c1458b6e..c825b1dd7ff6 100644 --- a/sql/opt_sum.cc +++ b/sql/opt_sum.cc @@ -81,7 +81,7 @@ static ulonglong get_exact_record_count(TABLE_LIST *tables) for (TABLE_LIST *tl= tables; tl; tl= tl->next_leaf) { ha_rows tmp= tl->table->file->records(); - if ((tmp == HA_POS_ERROR)) + if (tmp == HA_POS_ERROR) return ULONGLONG_MAX; count*= tmp; } diff --git a/sql/slave.cc b/sql/slave.cc index 228aae01662d..33bbca8a6e7c 100644 --- a/sql/slave.cc +++ b/sql/slave.cc @@ -4109,8 +4109,8 @@ static int queue_event(Master_info* mi,const char* buf, ulong event_len) TODO: handling `when' for SHOW SLAVE STATUS' snds behind */ - if ((memcmp(mi->master_log_name, hb.get_log_ident(), hb.get_ident_len()) - && mi->master_log_name != NULL) + compile_time_assert(sizeof(mi->master_log_name) / sizeof(void*) > 1); + if (memcmp(mi->master_log_name, hb.get_log_ident(), hb.get_ident_len()) || mi->master_log_pos != hb.log_pos) { /* missed events of heartbeat from the past */ @@ -4368,7 +4368,8 @@ static int connect_to_master(THD* thd, MYSQL* mysql, Master_info* mi, mysql_options(mysql, MYSQL_PLUGIN_DIR, opt_plugin_dir_ptr); /* we disallow empty users */ - if (mi->user == NULL || mi->user[0] == 0) + compile_time_assert(sizeof(mi->user) / sizeof(void*) > 1); + if (mi->user[0] == 0) { mi->report(ERROR_LEVEL, ER_SLAVE_FATAL_ERROR, ER(ER_SLAVE_FATAL_ERROR), @@ -4504,8 +4505,8 @@ MYSQL *rpl_connect_master(MYSQL *mysql) /* This one is not strictly needed but we have it here for completeness */ mysql_options(mysql, MYSQL_SET_CHARSET_DIR, (char *) charsets_dir); - if (mi->user == NULL - || mi->user[0] == 0 + compile_time_assert(sizeof(mi->user) / sizeof(void*) > 1); + if (mi->user[0] == 0 || io_slave_killed(thd, mi) || !mysql_real_connect(mysql, mi->host, mi->user, mi->password, 0, mi->port, 0, 0)) diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc index bfbd9a6a0125..7d982200dbd0 100644 --- a/sql/sql_acl.cc +++ b/sql/sql_acl.cc @@ -172,6 +172,7 @@ TABLE_FIELD_TYPE mysql_db_table_fields[MYSQL_DB_FIELD_COUNT] = { } }; +#ifndef NO_EMBEDDED_ACCESS_CHECKS static const TABLE_FIELD_TYPE mysql_user_table_fields[MYSQL_USER_FIELD_COUNT] = { { @@ -553,11 +554,13 @@ TABLE_FIELD_TYPE mysql_tables_priv_table_fields[MYSQL_TABLES_PRIV_FIELD_COUNT] = { C_STRING_WITH_LEN("utf8") } } }; +#endif // NO_EMBEDDED_ACCESS_CHECKS const TABLE_FIELD_DEF mysql_db_table_def= {MYSQL_DB_FIELD_COUNT, mysql_db_table_fields}; +#ifndef NO_EMBEDDED_ACCESS_CHECKS const TABLE_FIELD_DEF mysql_user_table_def= {MYSQL_USER_FIELD_COUNT, mysql_user_table_fields}; @@ -576,6 +579,7 @@ const TABLE_FIELD_DEF const TABLE_FIELD_DEF mysql_tables_priv_table_def= {MYSQL_TABLES_PRIV_FIELD_COUNT, mysql_tables_priv_table_fields}; +#endif // NO_EMBEDDED_ACCESS_CHECKS static LEX_STRING native_password_plugin_name= { C_STRING_WITH_LEN("mysql_native_password") @@ -5719,7 +5723,8 @@ bool check_grant_db(THD *thd,const char *db) bool error= TRUE; size_t copy_length; - copy_length= (size_t) (strlen(sctx->priv_user ? sctx->priv_user : "") + + compile_time_assert(sizeof(sctx->priv_user) / sizeof(void*) > 1); + copy_length= (size_t) (strlen(sctx->priv_user) + strlen(db ? db : "")) + 1; /* Added 1 at the end to avoid buffer overflow at strmov()*/ @@ -8623,7 +8628,7 @@ void fill_effective_table_privileges(THD *thd, GRANT_INFO *grant, DBUG_PRINT("enter", ("Host: '%s', Ip: '%s', User: '%s', table: `%s`.`%s`", sctx->priv_host, (sctx->get_ip()->length() ? sctx->get_ip()->ptr() : "(NULL)"), - (sctx->priv_user ? sctx->priv_user : "(NULL)"), + sctx->priv_user, db, table)); /* --skip-grants */ if (!initialized) @@ -8637,12 +8642,6 @@ void fill_effective_table_privileges(THD *thd, GRANT_INFO *grant, /* global privileges */ grant->privilege= sctx->master_access; - if (!sctx->priv_user) - { - DBUG_PRINT("info", ("privilege 0x%lx", grant->privilege)); - DBUG_VOID_RETURN; // it is slave - } - /* db privileges */ grant->privilege|= acl_get(sctx->get_host()->ptr(), sctx->get_ip()->ptr(), sctx->priv_user, db, 0); @@ -10410,10 +10409,10 @@ acl_authenticate(THD *thd, uint connect_errors, uint com_change_user_pkt_len) { if (strcmp(mpvio.auth_info.authenticated_as, mpvio.auth_info.user_name)) { + compile_time_assert(sizeof(mpvio.auth_info.authenticated_as) / sizeof(void*) > 1); general_log_print(thd, command, "%s@%s as %s on %s", mpvio.auth_info.user_name, mpvio.auth_info.host_or_ip, - mpvio.auth_info.authenticated_as ? - mpvio.auth_info.authenticated_as : "anonymous", + mpvio.auth_info.authenticated_as, mpvio.db.str ? mpvio.db.str : (char*) ""); } else diff --git a/sql/sql_audit.cc b/sql/sql_audit.cc index bf672b6ea481..6dcce9fa3702 100644 --- a/sql/sql_audit.cc +++ b/sql/sql_audit.cc @@ -120,9 +120,10 @@ static audit_handler_t audit_handlers[] = general_class_handler, connection_class_handler }; +#if !defined(DBUG_OFF) && !defined(_lint) static const uint audit_handlers_count= (sizeof(audit_handlers) / sizeof(audit_handler_t)); - +#endif /** Acquire and lock any additional audit plugins as required @@ -345,8 +346,8 @@ int initialize_audit_plugin(st_plugin_int *plugin) { st_mysql_audit *data= (st_mysql_audit*) plugin->plugin->info; - if (!data->class_mask || !data->event_notify || - !data->class_mask[0]) + compile_time_assert(sizeof(data->class_mask) / sizeof(void*) > 0); + if (!data->event_notify || !data->class_mask[0]) { sql_print_error("Plugin '%s' has invalid data.", plugin->name.str); diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 6c81abf3568f..711e42bb06b4 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -4031,8 +4031,8 @@ case SQLCOM_PREPARE: LEX_USER *grant_user= get_current_user(thd, lex->grant_user); if (!grant_user) goto error; - if ((thd->security_ctx->priv_user && - !strcmp(thd->security_ctx->priv_user, grant_user->user.str)) || + compile_time_assert(sizeof(thd->security_ctx->priv_user) / sizeof(void*) > 1); + if (!strcmp(thd->security_ctx->priv_user, grant_user->user.str) || !check_access(thd, SELECT_ACL, "mysql", NULL, NULL, 1, 0)) { res = mysql_show_grants(thd, grant_user); diff --git a/sql/sql_partition.cc b/sql/sql_partition.cc index 0b8a1e0d836d..2df35b9c0d69 100644 --- a/sql/sql_partition.cc +++ b/sql/sql_partition.cc @@ -283,7 +283,7 @@ bool partition_default_handling(TABLE *table, partition_info *part_info, } } part_info->set_up_defaults_for_partitioning(table->file, - (ulonglong)0, (uint)0); + NULL, (uint)0); DBUG_RETURN(FALSE); } diff --git a/sql/sql_signal.cc b/sql/sql_signal.cc index e0c2a96ac848..e97a0ee00da4 100644 --- a/sql/sql_signal.cc +++ b/sql/sql_signal.cc @@ -61,21 +61,6 @@ const LEX_STRING Diag_condition_item_names[]= { C_STRING_WITH_LEN("TRIGGER_SCHEMA") } }; -const LEX_STRING Diag_statement_item_names[]= -{ - { C_STRING_WITH_LEN("NUMBER") }, - { C_STRING_WITH_LEN("MORE") }, - { C_STRING_WITH_LEN("COMMAND_FUNCTION") }, - { C_STRING_WITH_LEN("COMMAND_FUNCTION_CODE") }, - { C_STRING_WITH_LEN("DYNAMIC_FUNCTION") }, - { C_STRING_WITH_LEN("DYNAMIC_FUNCTION_CODE") }, - { C_STRING_WITH_LEN("ROW_COUNT") }, - { C_STRING_WITH_LEN("TRANSACTIONS_COMMITTED") }, - { C_STRING_WITH_LEN("TRANSACTIONS_ROLLED_BACK") }, - { C_STRING_WITH_LEN("TRANSACTION_ACTIVE") } -}; - - Set_signal_information::Set_signal_information( const Set_signal_information& set) { diff --git a/sql/unireg.cc b/sql/unireg.cc index 788046cfae4c..d2c4c41c1795 100644 --- a/sql/unireg.cc +++ b/sql/unireg.cc @@ -943,7 +943,6 @@ static bool pack_fields(File file, List &create_fields, recpos= field->offset+1 + (uint) data_offset; int3store(buff+5,recpos); int2store(buff+8,field->pack_flag); - DBUG_ASSERT(field->unireg_check < 256); buff[10]= (uchar) field->unireg_check; buff[12]= (uchar) field->interval_id; buff[13]= (uchar) field->sql_type; diff --git a/storage/csv/ha_tina.cc b/storage/csv/ha_tina.cc index 67c80c8629e9..0408553d8756 100644 --- a/storage/csv/ha_tina.cc +++ b/storage/csv/ha_tina.cc @@ -1457,9 +1457,9 @@ int ha_tina::rnd_end() DBUG_RETURN(-1); /* Open the file again */ - if (((data_file= mysql_file_open(csv_key_file_data, + if ((data_file= mysql_file_open(csv_key_file_data, share->data_file_name, - O_RDONLY, MYF(MY_WME))) == -1)) + O_RDONLY, MYF(MY_WME))) == -1) DBUG_RETURN(my_errno ? my_errno : -1); /* As we reopened the data file, increase share->data_file_version diff --git a/storage/federated/ha_federated.cc b/storage/federated/ha_federated.cc index 81005a6621ed..adba80b09fb7 100644 --- a/storage/federated/ha_federated.cc +++ b/storage/federated/ha_federated.cc @@ -401,7 +401,6 @@ static const int bulk_padding= 64; // bytes "overhead" in packet /* Variables used when chopping off trailing characters */ static const uint sizeof_trailing_comma= sizeof(", ") - 1; -static const uint sizeof_trailing_closeparen= sizeof(") ") - 1; static const uint sizeof_trailing_and= sizeof(" AND ") - 1; static const uint sizeof_trailing_where= sizeof(" WHERE ") - 1; @@ -827,7 +826,7 @@ static int parse_url(MEM_ROOT *mem_root, FEDERATED_SHARE *share, TABLE *table, user:@hostname:port/db/table Then password is a null string, so set to NULL */ - if ((share->password[0] == '\0')) + if (share->password[0] == '\0') share->password= NULL; } else diff --git a/storage/innobase/fsp/fsp0fsp.c b/storage/innobase/fsp/fsp0fsp.c index 8927e7c58414..9abbd8172bc5 100644 --- a/storage/innobase/fsp/fsp0fsp.c +++ b/storage/innobase/fsp/fsp0fsp.c @@ -431,43 +431,6 @@ xdes_find_bit( return(ULINT_UNDEFINED); } -/**********************************************************************//** -Looks for a descriptor bit having the desired value. Scans the extent in -a direction opposite to xdes_find_bit. -@return bit index of the bit, ULINT_UNDEFINED if not found */ -UNIV_INLINE -ulint -xdes_find_bit_downward( -/*===================*/ - xdes_t* descr, /*!< in: descriptor */ - ulint bit, /*!< in: XDES_FREE_BIT or XDES_CLEAN_BIT */ - ibool val, /*!< in: desired bit value */ - ulint hint, /*!< in: hint of which bit position would be desirable */ - mtr_t* mtr) /*!< in: mtr */ -{ - ulint i; - - ut_ad(descr && mtr); - ut_ad(val <= TRUE); - ut_ad(hint < FSP_EXTENT_SIZE); - ut_ad(mtr_memo_contains_page(mtr, descr, MTR_MEMO_PAGE_X_FIX)); - for (i = hint + 1; i > 0; i--) { - if (val == xdes_get_bit(descr, bit, i - 1, mtr)) { - - return(i - 1); - } - } - - for (i = FSP_EXTENT_SIZE - 1; i > hint; i--) { - if (val == xdes_get_bit(descr, bit, i, mtr)) { - - return(i); - } - } - - return(ULINT_UNDEFINED); -} - /**********************************************************************//** Returns the number of used pages in a descriptor. @return number of pages used */ diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index 3850b4a12e8f..b2a828c1f2e4 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -1938,6 +1938,7 @@ trx_is_registered_for_2pc( /*********************************************************************//** Note that a transaction owns the prepare_commit_mutex. */ +#ifndef EXTENDED_FOR_COMMIT_ORDERED static inline void trx_owns_prepare_commit_mutex_set( @@ -1947,6 +1948,7 @@ trx_owns_prepare_commit_mutex_set( ut_a(trx_is_registered_for_2pc(trx)); trx->owns_prepare_mutex = 1; } +#endif // EXTENDED_FOR_COMMIT_ORDERED /*********************************************************************//** Note that a transaction has been registered with MySQL 2PC coordinator. */ @@ -7648,8 +7650,6 @@ create_table_def( } } - ut_a(field->type() < 256); /* we assume in dtype_form_prtype() - that this fits in one byte */ col_len = field->pack_length(); /* The MySQL pack length contains 1 or 2 bytes length field diff --git a/storage/innobase/os/os0sync.c b/storage/innobase/os/os0sync.c index 3a182692da3a..642451dcc2c8 100644 --- a/storage/innobase/os/os0sync.c +++ b/storage/innobase/os/os0sync.c @@ -226,24 +226,6 @@ os_cond_broadcast( #endif } -/*********************************************************//** -Wakes one thread waiting for condition variable */ -UNIV_INLINE -void -os_cond_signal( -/*==========*/ - os_cond_t* cond) /*!< in: condition variable. */ -{ - ut_a(cond); - -#ifdef __WIN__ - ut_a(wake_condition_variable != NULL); - wake_condition_variable(cond); -#else - ut_a(pthread_cond_signal(cond) == 0); -#endif -} - /*********************************************************//** Destroys condition variable */ UNIV_INLINE diff --git a/storage/innobase/sync/sync0sync.c b/storage/innobase/sync/sync0sync.c index 7654fade6e83..27138629dbc3 100644 --- a/storage/innobase/sync/sync0sync.c +++ b/storage/innobase/sync/sync0sync.c @@ -315,9 +315,9 @@ mutex_create_func( /* NOTE! The very first mutexes are not put to the mutex list */ - if ((mutex == &mutex_list_mutex) + if (mutex == &mutex_list_mutex #ifdef UNIV_SYNC_DEBUG - || (mutex == &sync_thread_mutex) + || mutex == &sync_thread_mutex #endif /* UNIV_SYNC_DEBUG */ ) { diff --git a/strings/decimal.c b/strings/decimal.c index b52f0ad53a58..7ee4ad6bad4b 100644 --- a/strings/decimal.c +++ b/strings/decimal.c @@ -737,7 +737,7 @@ int decimal_shift(decimal_t *dec, int shift) if (do_left) { do_mini_left_shift(dec, l_mini_shift, beg, end); - mini_shift=- l_mini_shift; + mini_shift= -l_mini_shift; } else { From 97691c6857fc4a3031243c06adce3d13de69cd6f Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Fri, 22 Dec 2017 14:55:51 +0100 Subject: [PATCH 0436/1221] PS-3767: Fixed clang 4/5 warnings for PS 5.6 Changes for TokuDB aren't part of this commit. * Removed unneccessary parantheses from conditions * Changed null checks of arrays to compile time assertions that they are arrays * Added some explicit casts * Refactored a constructor for the Field class * Fixed scoped locks in tokudb * Added a missing initializer parameter in tokudb * Added additional ifdefs for some global variables * Updated travis.yml to install llvm-dev to fix linking issues --- .travis.yml | 6 ++--- client/mysqldump.c | 2 +- libmysql/libmysql.c | 3 ++- .../security_context_wrapper.cc | 24 +++++++---------- plugin/tokudb-backup-plugin/tokudb_backup.cc | 27 ++++++++++--------- sql/field.h | 13 ++++++--- sql/sql_acl.cc | 4 +++ sql/sql_class.h | 2 +- sql/sql_join_buffer.h | 8 ++++-- storage/innobase/include/dict0mem.h | 3 +-- storage/tokudb/tokudb_information_schema.cc | 2 +- 11 files changed, 52 insertions(+), 42 deletions(-) diff --git a/.travis.yml b/.travis.yml index 11e8bfd5f82d..2e2467f0d05f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,12 +14,12 @@ matrix: - env: GCC=gcc-4.8 CXX=g++-4.8 LIBTYPE=system CMAKE_OPT="-DWITH_READLINE=system" - env: GCC=gcc-7 CXX=g++-7 LIBTYPE=system CMAKE_OPT="-DWITH_READLINE=system" PACKAGES=g++-7 PPA=ubuntu-toolchain-r/test - env: GCC=gcc-7 CXX=g++-7 LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" PACKAGES=g++-7 PPA=ubuntu-toolchain-r/test - - env: GCC=clang-5.0 CXX=clang++-5.0 LIBTYPE=system CMAKE_OPT="-DWITH_READLINE=system" PACKAGES=clang-5.0 LLVM=llvm-toolchain-trusty-5.0 + - env: GCC=clang-5.0 CXX=clang++-5.0 LIBTYPE=system CMAKE_OPT="-DWITH_READLINE=system" PACKAGES="clang-5.0 llvm-5.0-dev" LLVM=llvm-toolchain-trusty-5.0 # only for pull requests - env: GCC=gcc-5 CXX=g++-5 LIBTYPE=system CMAKE_OPT="-DWITH_READLINE=system" PACKAGES=g++-5 PPA=ubuntu-toolchain-r/test - env: GCC=gcc-6 CXX=g++-6 LIBTYPE=system CMAKE_OPT="-DWITH_READLINE=system" PACKAGES=g++-6 PPA=ubuntu-toolchain-r/test - - env: GCC=clang-4.0 CXX=clang++-4.0 LIBTYPE=system CMAKE_OPT="-DWITH_READLINE=system" PACKAGES=clang-4.0 PPA=ubuntu-toolchain-r/test LLVM=llvm-toolchain-trusty-4.0 - - env: GCC=clang-5.0 CXX=clang++-5.0 LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" PACKAGES=clang-5.0 LLVM=llvm-toolchain-trusty-5.0 + - env: GCC=clang-4.0 CXX=clang++-4.0 LIBTYPE=system CMAKE_OPT="-DWITH_READLINE=system" PACKAGES="clang-4.0 llvm-4.0-dev" PPA=ubuntu-toolchain-r/test LLVM=llvm-toolchain-trusty-4.0 + - env: GCC=clang-5.0 CXX=clang++-5.0 LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" PACKAGES="clang-5.0 llvm-5.0-dev" LLVM=llvm-toolchain-trusty-5.0 script: - export CC=$GCC diff --git a/client/mysqldump.c b/client/mysqldump.c index 93e4b5fab59b..f227254861f2 100644 --- a/client/mysqldump.c +++ b/client/mysqldump.c @@ -2752,7 +2752,7 @@ static my_bool contains_autoinc_column(const char *autoinc_column, Check only the first (for PRIMARY KEY) or the second (for secondary keys) quoted identifier. */ - if ((idnum == 1 + MY_TEST(type != KEY_TYPE_PRIMARY))) + if (idnum == 1 + MY_TEST(type != KEY_TYPE_PRIMARY)) break; keydef= to + 1; diff --git a/libmysql/libmysql.c b/libmysql/libmysql.c index 3b6f68cf9146..ffd8e36deab3 100644 --- a/libmysql/libmysql.c +++ b/libmysql/libmysql.c @@ -1398,7 +1398,8 @@ void set_stmt_errmsg(MYSQL_STMT *stmt, NET *net) DBUG_ASSERT(stmt != 0); stmt->last_errno= net->last_errno; - if (net->last_error && net->last_error[0]) + compile_time_assert(sizeof(net->last_error) / sizeof(void*) > 1); + if (net->last_error[0]) strmov(stmt->last_error, net->last_error); strmov(stmt->sqlstate, net->sqlstate); diff --git a/plugin/connection_control/security_context_wrapper.cc b/plugin/connection_control/security_context_wrapper.cc index 3960064e70b8..c9342b134868 100644 --- a/plugin/connection_control/security_context_wrapper.cc +++ b/plugin/connection_control/security_context_wrapper.cc @@ -59,19 +59,15 @@ namespace connection_control { if (!strcmp(property, "priv_user")) { - if (m_thd->security_ctx->priv_user) - { - value->str= m_thd->security_ctx->priv_user; - value->length= strlen(value->str); - } + compile_time_assert (sizeof(m_thd->security_ctx->priv_user) / sizeof(void*) > 1); + value->str= m_thd->security_ctx->priv_user; + value->length= strlen(value->str); } else if (!strcmp(property, "priv_host")) { - if (m_thd->security_ctx->priv_host) - { - value->str= m_thd->security_ctx->priv_host; - value->length= strlen(value->str); - } + compile_time_assert (sizeof(m_thd->security_ctx->priv_host) / sizeof(void*) > 1); + value->str= m_thd->security_ctx->priv_host; + value->length= strlen(value->str); } else if (!strcmp(property, "user")) { @@ -83,11 +79,9 @@ namespace connection_control } else if (!strcmp(property, "proxy_user")) { - if (m_thd->security_ctx->proxy_user) - { - value->str= m_thd->security_ctx->proxy_user; - value->length= strlen(value->str); - } + compile_time_assert (sizeof(m_thd->security_ctx->proxy_user) / sizeof(void*) > 1); + value->str= m_thd->security_ctx->proxy_user; + value->length= strlen(value->str); } else if (!strcmp(property, "host")) { diff --git a/plugin/tokudb-backup-plugin/tokudb_backup.cc b/plugin/tokudb-backup-plugin/tokudb_backup.cc index ef98c3f5757b..d970ef9f9f4a 100644 --- a/plugin/tokudb-backup-plugin/tokudb_backup.cc +++ b/plugin/tokudb-backup-plugin/tokudb_backup.cc @@ -284,11 +284,12 @@ static void tokudb_backup_error_fun(int error_number, const char *error_string, static bool tokudb_backup_check_slave_sql_thread_running(THD *thd) { scoped_lock_wrapper with_LOCK_active_mi_locked( - BasicLockableMysqlMutextT(&LOCK_active_mi)); + (BasicLockableMysqlMutextT(LOCK_active_mi))); Master_info *mi = active_mi; - if (!mi || !mi->inited || !mi->host || !mi->host[0]) + compile_time_assert(sizeof(mi->host) / sizeof(void*) > 1); + if (!mi || !mi->inited || !mi->host[0]) return false; scoped_lock_wrapper @@ -319,11 +320,12 @@ static bool tokudb_backup_stop_slave_sql_thread(THD *thd) { { scoped_lock_wrapper with_LOCK_active_mi_locked( - BasicLockableMysqlMutextT(&LOCK_active_mi)); + (BasicLockableMysqlMutextT(LOCK_active_mi))); Master_info *mi = active_mi; - if (!mi || !mi->inited || !mi->host || !mi->host[0]) + compile_time_assert(sizeof(mi->host) / sizeof(void*) > 1); + if (!mi || !mi->inited || !mi->host[0]) return true; stop_slave_result = stop_slave(thd, mi, 0); @@ -352,11 +354,12 @@ static bool tokudb_backup_start_slave_sql_thread(THD *thd) { { scoped_lock_wrapper with_LOCK_active_mi_locked( - BasicLockableMysqlMutextT(&LOCK_active_mi)); + (BasicLockableMysqlMutextT(LOCK_active_mi))); Master_info *mi = active_mi; - if (!mi || !mi->inited || !mi->host || !mi->host[0]) + compile_time_assert(sizeof(mi->host) / sizeof(void*) > 1); + if (!mi || !mi->inited || !mi->host[0]) return true; start_slave_result = start_slave(thd, mi, 0); @@ -399,11 +402,10 @@ static bool tokudb_backup_wait_for_safe_slave(THD *thd, uint timeout) { } if (!n_attemts && - slave_open_temp_tables) { - - (sql_thread_started && + slave_open_temp_tables && + sql_thread_started && !tokudb_backup_check_slave_sql_thread_running(thd) && - !tokudb_backup_start_slave_sql_thread(thd)); + !tokudb_backup_start_slave_sql_thread(thd)) { return false; } @@ -475,11 +477,12 @@ static void tokudb_backup_get_master_infos( { scoped_lock_wrapper with_LOCK_active_mi_locked( - BasicLockableMysqlMutextT(&LOCK_active_mi)); + (BasicLockableMysqlMutextT(LOCK_active_mi))); Master_info *mi = active_mi; - if (!mi || !mi->inited || !mi->host || !mi->host[0]) + compile_time_assert(sizeof(mi->host) / sizeof(void*) > 1); + if (!mi || !mi->inited || !mi->host[0]) return; std::string executed_gtid_set = tokudb_backup_get_executed_gtids_set(); diff --git a/sql/field.h b/sql/field.h index b1781c69444b..34d89e555626 100644 --- a/sql/field.h +++ b/sql/field.h @@ -2194,10 +2194,15 @@ class Field_temporal :public Field { uint8 dec; // Number of fractional digits /** - Adjust number of decimal digits from NOT_FIXED_DEC to DATETIME_MAX_DECIMALS + Adjust number of decimal digits from NOT_FIXED_DEC to DATETIME_MAX_DECIMALS, + and store it in the data member. Then return a modified value required by Field's + constructor. */ uint8 normalize_dec(uint8 dec_arg) - { return dec_arg == NOT_FIXED_DEC ? DATETIME_MAX_DECIMALS : dec_arg; } + { + dec= dec_arg == NOT_FIXED_DEC ? DATETIME_MAX_DECIMALS : dec_arg; + return dec ? dec + 1 : dec; + } /** Low level routine to store a MYSQL_TIME value into a field. @@ -2347,7 +2352,7 @@ class Field_temporal :public Field { enum utype unireg_check_arg, const char *field_name_arg, uint32 len_arg, uint8 dec_arg) :Field(ptr_arg, - len_arg + ((dec= normalize_dec(dec_arg)) ? dec + 1 : 0), + len_arg + normalize_dec(dec_arg), null_ptr_arg, null_bit_arg, unireg_check_arg, field_name_arg) { flags|= BINARY_FLAG; } @@ -2361,7 +2366,7 @@ class Field_temporal :public Field { Field_temporal(bool maybe_null_arg, const char *field_name_arg, uint32 len_arg, uint8 dec_arg) :Field((uchar *) 0, - len_arg + ((dec= normalize_dec(dec_arg)) ? dec + 1 : 0), + len_arg + normalize_dec(dec_arg), maybe_null_arg ? (uchar *) "" : 0, 0, NONE, field_name_arg) { flags|= BINARY_FLAG; } diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc index 8173a0b1ef8d..da9eed7ab83a 100644 --- a/sql/sql_acl.cc +++ b/sql/sql_acl.cc @@ -193,6 +193,7 @@ TABLE_FIELD_TYPE mysql_db_table_fields[MYSQL_DB_FIELD_COUNT] = { } }; +#ifndef NO_EMBEDDED_ACCESS_CHECKS static const TABLE_FIELD_TYPE mysql_user_table_fields[MYSQL_USER_FIELD_COUNT] = { { @@ -579,11 +580,13 @@ TABLE_FIELD_TYPE mysql_tables_priv_table_fields[MYSQL_TABLES_PRIV_FIELD_COUNT] = { C_STRING_WITH_LEN("utf8") } } }; +#endif // NO_EMBEDDED_ACCESS_CHECKS const TABLE_FIELD_DEF mysql_db_table_def= {MYSQL_DB_FIELD_COUNT, mysql_db_table_fields}; +#ifndef NO_EMBEDDED_ACCESS_CHECKS const TABLE_FIELD_DEF mysql_user_table_def= {MYSQL_USER_FIELD_COUNT, mysql_user_table_fields}; @@ -602,6 +605,7 @@ const TABLE_FIELD_DEF const TABLE_FIELD_DEF mysql_tables_priv_table_def= {MYSQL_TABLES_PRIV_FIELD_COUNT, mysql_tables_priv_table_fields}; +#endif // NO_EMBEDDED_ACCESS_CHECKS static LEX_STRING native_password_plugin_name= { C_STRING_WITH_LEN("mysql_native_password") diff --git a/sql/sql_class.h b/sql/sql_class.h index e33af42e28e3..5371de8d5e5a 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -5418,7 +5418,7 @@ class Unique :public Sql_alloc inline static int get_cost_calc_buff_size(ulong nkeys, uint key_size, ulonglong max_in_memory_size) { - register ulonglong max_elems_in_tree= + ulonglong max_elems_in_tree= (max_in_memory_size / ALIGN_SIZE(sizeof(TREE_ELEMENT)+key_size)); return (int) (sizeof(uint)*(1 + nkeys/max_elems_in_tree)); } diff --git a/sql/sql_join_buffer.h b/sql/sql_join_buffer.h index e20492926560..8c11ec47dde5 100644 --- a/sql/sql_join_buffer.h +++ b/sql/sql_join_buffer.h @@ -342,7 +342,9 @@ class JOIN_CACHE :public QEP_operation /* Shall calculate how much space is remaining in the join buffer */ virtual ulong rem_space() { - return std::max(buff_size-(end_pos-buff)-aux_buff_size, 0UL); + return static_cast( + std::max(buff_size-(end_pos-buff)-aux_buff_size, 0L) + ); } /* Shall skip record from the join buffer if its match flag is on */ @@ -808,7 +810,9 @@ class JOIN_CACHE_BKA_UNIQUE :public JOIN_CACHE_BKA */ ulong rem_space() { - return std::max(last_key_entry-end_pos-aux_buff_size, 0UL); + return static_cast( + std::max(last_key_entry-end_pos-aux_buff_size, 0L) + ); } /* diff --git a/storage/innobase/include/dict0mem.h b/storage/innobase/include/dict0mem.h index b6d2ab9fad19..bc7ab94f9d72 100644 --- a/storage/innobase/include/dict0mem.h +++ b/storage/innobase/include/dict0mem.h @@ -282,8 +282,7 @@ dict_mem_table_add_col( const char* name, /*!< in: column name, or NULL */ ulint mtype, /*!< in: main datatype */ ulint prtype, /*!< in: precise type */ - ulint len) /*!< in: precision */ - MY_ATTRIBUTE((nonnull(1))); + ulint len); /*!< in: precision */ /**********************************************************************//** Renames a column of a table in the data dictionary cache. */ UNIV_INTERN diff --git a/storage/tokudb/tokudb_information_schema.cc b/storage/tokudb/tokudb_information_schema.cc index 6d4569c522d6..c5d4c84638e8 100644 --- a/storage/tokudb/tokudb_information_schema.cc +++ b/storage/tokudb/tokudb_information_schema.cc @@ -1085,7 +1085,7 @@ ST_FIELD_INFO background_job_status_field_info[] = { {"scheduler", 32, MYSQL_TYPE_STRING, 0, 0, NULL, SKIP_OPEN_TABLE }, {"scheduled_time", 0, MYSQL_TYPE_DATETIME, 0, 0, NULL, SKIP_OPEN_TABLE }, {"started_time", 0, MYSQL_TYPE_DATETIME, 0, MY_I_S_MAYBE_NULL, NULL, SKIP_OPEN_TABLE }, - {"status", 1024, MYSQL_TYPE_STRING, 0, MY_I_S_MAYBE_NULL, SKIP_OPEN_TABLE }, + {"status", 1024, MYSQL_TYPE_STRING, 0, MY_I_S_MAYBE_NULL, NULL, SKIP_OPEN_TABLE }, {NULL, 0, MYSQL_TYPE_NULL, 0, 0, NULL, SKIP_OPEN_TABLE} }; From ab1d9a3654e9b77a446efaa39346d359787cbcff Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Mon, 29 Jan 2018 20:25:23 +0100 Subject: [PATCH 0437/1221] PS-3778: removing unneccessary broken submodule This was accidentally added in 0620870190f546bc5531ee2e2c697d61fa758042 --- plugin/tokudb-backup-plugin/Percona-TokuBackup | 1 - 1 file changed, 1 deletion(-) delete mode 160000 plugin/tokudb-backup-plugin/Percona-TokuBackup diff --git a/plugin/tokudb-backup-plugin/Percona-TokuBackup b/plugin/tokudb-backup-plugin/Percona-TokuBackup deleted file mode 160000 index 16707e12b323..000000000000 --- a/plugin/tokudb-backup-plugin/Percona-TokuBackup +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 16707e12b32371451e73091da54a82ce0faa0ecc From 320473c2c2307d155feaa81e90c91b329e6c74eb Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Tue, 16 Jan 2018 15:37:38 +0100 Subject: [PATCH 0438/1221] PS-3767: Fixed clang 4/5 warnings for PS 5.7. * Initialized uninitailized variables * Marked debug variables as possibly unused * Marked the functions generated by the define_xdr_funcs macro possibly unused. This macro generates several functions, and only some of them is used. * Removed the unused MYSQLX_PORT global constant * Corrected two unsigned/signed std::max * Disabled the unused variable warning for rocksdb, as it's in 3rd party code * Removed non-null attributes from rocksdb (those parameters also have non null assertions) * Added a missing override specifier * Added additional braces to a struct initalizer * Added a missing initializer parameter in tokudb * Changed how optimization is disabled for a function * Updated the Percona-TokuBackup submodule * Added an ifdef around a variable in keyring_vault * Modified travis config to include the llvm-dev package, to solve linking issues * Marked two functions as possibly unused in yassl --- .travis.yml | 6 +- client/mysql.cc | 2 +- client/mysqladmin.cc | 1 + mysys_ssl/yassl.cc | 2 + plugin/keyring_vault/vault_curl.cc | 2 + .../tokudb-backup-plugin/Percona-TokuBackup | 2 +- plugin/tokudb-backup-plugin/tokudb_backup.cc | 19 +++--- .../bindings/xcom/gcs_xcom_state_exchange.cc | 2 + .../src/bindings/xcom/xcom/xdr_utils.h | 14 +++- rapid/plugin/x/mysqlxtest_src/mysqlxtest.cc | 1 - sql/item_geofunc.cc | 2 +- sql/sql_join_buffer.h | 9 ++- storage/innobase/include/ut0new.h | 4 +- storage/rocksdb/CMakeLists.txt | 4 ++ storage/rocksdb/ha_rocksdb.cc | 8 +-- storage/rocksdb/ha_rocksdb.h | 65 +++++++++---------- storage/rocksdb/ha_rocksdb_proto.h | 8 +-- storage/rocksdb/properties_collector.h | 2 +- storage/rocksdb/rdb_cf_options.h | 3 +- storage/rocksdb/rdb_datadic.cc | 8 +-- storage/rocksdb/rdb_utils.h | 15 ++--- storage/tokudb/tokudb_information_schema.cc | 2 +- testclients/bug25714.c | 2 +- 23 files changed, 99 insertions(+), 84 deletions(-) diff --git a/.travis.yml b/.travis.yml index 558df873dfb1..4823fe0aa114 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,12 +14,12 @@ matrix: - env: GCC=gcc-4.8 CXX=g++-4.8 LIBTYPE=system CMAKE_OPT="-DWITH_READLINE=system" - env: GCC=gcc-7 CXX=g++-7 LIBTYPE=system CMAKE_OPT="-DWITH_READLINE=system" PACKAGES=g++-7 PPA=ubuntu-toolchain-r/test - env: GCC=gcc-7 CXX=g++-7 LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" PACKAGES=g++-7 PPA=ubuntu-toolchain-r/test - - env: GCC=clang-5.0 CXX=clang++-5.0 LIBTYPE=system CMAKE_OPT="-DWITH_READLINE=system" PACKAGES=clang-5.0 LLVM=llvm-toolchain-trusty-5.0 + - env: GCC=clang-5.0 CXX=clang++-5.0 LIBTYPE=system CMAKE_OPT="-DWITH_READLINE=system" PACKAGES="clang-5.0 llvm-5.0-dev" LLVM=llvm-toolchain-trusty-5.0 # only for pull requests - env: GCC=gcc-5 CXX=g++-5 LIBTYPE=system CMAKE_OPT="-DWITH_READLINE=system" PACKAGES=g++-5 PPA=ubuntu-toolchain-r/test - env: GCC=gcc-6 CXX=g++-6 LIBTYPE=system CMAKE_OPT="-DWITH_READLINE=system" PACKAGES=g++-6 PPA=ubuntu-toolchain-r/test - - env: GCC=clang-4.0 CXX=clang++-4.0 LIBTYPE=system CMAKE_OPT="-DWITH_READLINE=system" PACKAGES=clang-4.0 PPA=ubuntu-toolchain-r/test LLVM=llvm-toolchain-trusty-4.0 - - env: GCC=clang-5.0 CXX=clang++-5.0 LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" PACKAGES=clang-5.0 LLVM=llvm-toolchain-trusty-5.0 + - env: GCC=clang-4.0 CXX=clang++-4.0 LIBTYPE=system CMAKE_OPT="-DWITH_READLINE=system" PACKAGES="clang-4.0 llvm-4.0-dev" PPA=ubuntu-toolchain-r/test LLVM=llvm-toolchain-trusty-4.0 + - env: GCC=clang-5.0 CXX=clang++-5.0 LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" PACKAGES="clang-5.0 llvm-5.0-dev" LLVM=llvm-toolchain-trusty-5.0 script: - export CC=$GCC diff --git a/client/mysql.cc b/client/mysql.cc index 8709fb6d0442..af58e2da46a8 100644 --- a/client/mysql.cc +++ b/client/mysql.cc @@ -1430,7 +1430,7 @@ int main(int argc,char *argv[]) "statement.\n"); put_info(buff,INFO_INFO); - uint protocol, ssl_mode; + uint protocol= 0, ssl_mode= 0; if (!mysql_get_option(&mysql, MYSQL_OPT_PROTOCOL, &protocol) && !mysql_get_option(&mysql, MYSQL_OPT_SSL_MODE, &ssl_mode)) { diff --git a/client/mysqladmin.cc b/client/mysqladmin.cc index 9a44f5bafe54..d4f7eae627ad 100644 --- a/client/mysqladmin.cc +++ b/client/mysqladmin.cc @@ -1093,6 +1093,7 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv) /* Warn about password being set in non ssl connection */ #if defined(HAVE_OPENSSL) && !defined(EMBEDDED_LIBRARY) uint ssl_mode; + ssl_mode= 0; if (!mysql_get_option(mysql, MYSQL_OPT_SSL_MODE, &ssl_mode) && ssl_mode <= SSL_MODE_PREFERRED) { diff --git a/mysys_ssl/yassl.cc b/mysys_ssl/yassl.cc index 9c440b15199d..c9329dd3675d 100644 --- a/mysys_ssl/yassl.cc +++ b/mysys_ssl/yassl.cc @@ -107,6 +107,7 @@ static int EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, return 1; } +#ifndef NDEBUG static int EVP_CIPHER_CTX_key_length(const EVP_CIPHER_CTX *ctx) { return ctx->key_len; @@ -116,6 +117,7 @@ static int EVP_CIPHER_CTX_iv_length(const EVP_CIPHER_CTX *ctx) { return ctx->flags & EVP_CIPH_ECB_MODE ? 0 : TaoCrypt::AES::BLOCK_SIZE; } +#endif static void do_whole_blocks(EVP_CIPHER_CTX *ctx, uchar *out, int *outl, const uchar *in, int inl) diff --git a/plugin/keyring_vault/vault_curl.cc b/plugin/keyring_vault/vault_curl.cc index 3d55e35f0b6a..515e6552c24b 100644 --- a/plugin/keyring_vault/vault_curl.cc +++ b/plugin/keyring_vault/vault_curl.cc @@ -17,7 +17,9 @@ static const size_t max_response_size = 32000000; static MY_TIMER_INFO curl_timer_info; static ulonglong last_ping_time; static bool was_thd_wait_started = false; +#ifndef NDEBUG static const ulonglong slow_connection_threshold = 100; // [ms] +#endif class Thd_wait_end_guard { diff --git a/plugin/tokudb-backup-plugin/Percona-TokuBackup b/plugin/tokudb-backup-plugin/Percona-TokuBackup index ae727091e02b..f6718bd6f2e7 160000 --- a/plugin/tokudb-backup-plugin/Percona-TokuBackup +++ b/plugin/tokudb-backup-plugin/Percona-TokuBackup @@ -1 +1 @@ -Subproject commit ae727091e02bdc2e5e440dea9d2343c47670db1a +Subproject commit f6718bd6f2e7223512eceede3486da030a6ce146 diff --git a/plugin/tokudb-backup-plugin/tokudb_backup.cc b/plugin/tokudb-backup-plugin/tokudb_backup.cc index 88852718c918..84d5031ee5ba 100644 --- a/plugin/tokudb-backup-plugin/tokudb_backup.cc +++ b/plugin/tokudb-backup-plugin/tokudb_backup.cc @@ -318,7 +318,8 @@ static bool tokudb_backup_check_slave_sql_thread_running(THD *thd) { ++it) { Master_info *mi= it->second; - if (mi != NULL && mi->inited && mi->host && mi->host[0]) { + compile_time_assert(sizeof(mi->host) / sizeof(void*) > 1); + if (mi != NULL && mi->inited && mi->host[0]) { have_slave = true; scoped_lock_wrapper with_mi_data_locked_1(BasicLockableMysqlMutextT( @@ -359,7 +360,8 @@ static bool tokudb_backup_stop_slave_sql_thread(THD *thd) { ++it) { Master_info *mi = it->second; - if (mi && mi->inited && mi->host && mi->host[0]) { + compile_time_assert(sizeof(mi->host) / sizeof(void*) > 1); + if (mi && mi->inited && mi->host[0]) { bool temp_tables_warning = false; have_slave = true; result = !stop_slave(thd, mi, 0, 0, &temp_tables_warning); @@ -398,7 +400,8 @@ static bool tokudb_backup_start_slave_sql_thread(THD *thd) { ++it) { Master_info *mi= it->second; - if (mi && mi->inited && mi->host && mi->host[0]) { + compile_time_assert(sizeof(mi->host) / sizeof(void*) > 1); + if (mi && mi->inited && mi->host[0]) { have_slave = true; result = !start_slave(thd, &thd->lex->slave_connection, @@ -457,11 +460,10 @@ static bool tokudb_backup_wait_for_safe_slave(THD *thd, uint timeout) { } if (!n_attemts && - slave_open_temp_tables.atomic_get()) { - - (sql_thread_started && + slave_open_temp_tables.atomic_get() && + sql_thread_started && !tokudb_backup_check_slave_sql_thread_running(thd) && - !tokudb_backup_start_slave_sql_thread(thd)); + !tokudb_backup_start_slave_sql_thread(thd)) { return false; } @@ -576,7 +578,8 @@ static void tokudb_backup_get_master_infos( ++it) { mi= it->second; - if (mi != NULL && mi->host && mi->host[0]) + compile_time_assert(sizeof(mi->host) / sizeof(void*) > 1); + if (mi != NULL && mi->host[0]) tokudb_backup_get_master_info(mi, executed_gtid_set, master_info_channels); diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_state_exchange.cc b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_state_exchange.cc index ea6cab05cf7f..40d9eeb76fa4 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_state_exchange.cc +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_state_exchange.cc @@ -300,8 +300,10 @@ void Gcs_xcom_state_exchange::reset_with_flush() void Gcs_xcom_state_exchange::reset() { +#ifndef NDEBUG Gcs_xcom_communication_interface *binding_broadcaster= static_cast(m_broadcaster); +#endif assert(binding_broadcaster->number_buffered_messages() == 0); m_configuration_id= null_synode; diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xdr_utils.h b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xdr_utils.h index 2f18bb4e56e6..7f2d09d52dc8 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xdr_utils.h +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xdr_utils.h @@ -25,7 +25,9 @@ extern "C" { /** Initialize an array */ -#define def_init_xdr_array(name) static inline void init_##name##_array(name##_array *x) +#define def_init_xdr_array(name) \ + MY_ATTRIBUTE((unused)) \ + static inline void init_##name##_array(name##_array *x) #define init_xdr_array(name) \ def_init_xdr_array(name) { \ x->name##_array_len = 2; \ @@ -35,7 +37,9 @@ extern "C" { /** Free the contents of an array */ -#define def_free_xdr_array(name) static inline void free_##name##_array(name##_array *x) +#define def_free_xdr_array(name) \ + MY_ATTRIBUTE((unused)) \ + static inline void free_##name##_array(name##_array *x) #define free_xdr_array(name)\ def_free_xdr_array(name)\ {\ @@ -62,6 +66,7 @@ def_free_xdr_array(name)\ Define a set function for an array */ #define def_set_xdr_array(name) \ + MY_ATTRIBUTE((unused)) \ static inline void set_##name(name##_array *x, name a, u_int n) #define set_xdr_array(name) \ def_set_xdr_array(name) { \ @@ -73,7 +78,9 @@ def_free_xdr_array(name)\ /** Define a get function for an array */ -#define def_get_xdr_array(name) static inline name get_##name(name##_array *x, u_int n) +#define def_get_xdr_array(name) \ + MY_ATTRIBUTE((unused)) \ + static inline name get_##name(name##_array *x, u_int n) #define get_xdr_array(name) \ def_get_xdr_array(name) \ { \ @@ -87,6 +94,7 @@ def_free_xdr_array(name)\ Define a function to clone an array */ #define def_clone_xdr_array(name) \ + MY_ATTRIBUTE((unused)) \ static inline name##_array clone_##name##_array(name##_array x) #define clone_xdr_array(name) \ def_clone_xdr_array(name) { \ diff --git a/rapid/plugin/x/mysqlxtest_src/mysqlxtest.cc b/rapid/plugin/x/mysqlxtest_src/mysqlxtest.cc index 04128760e67c..62624573ef32 100644 --- a/rapid/plugin/x/mysqlxtest_src/mysqlxtest.cc +++ b/rapid/plugin/x/mysqlxtest_src/mysqlxtest.cc @@ -57,7 +57,6 @@ const char * const CMD_ARG_BE_QUIET = "be-quiet"; const char * const MYSQLXTEST_VERSION = "1.0"; const char CMD_ARG_SEPARATOR = '\t'; -const unsigned short MYSQLX_PORT = 33060; #include #include diff --git a/sql/item_geofunc.cc b/sql/item_geofunc.cc index 83d0062350b1..2d98ed4d1472 100644 --- a/sql/item_geofunc.cc +++ b/sql/item_geofunc.cc @@ -1867,7 +1867,7 @@ append_geometry(Geometry::wkb_parser *parser, Json_object *geometry, } else { - bool result; + bool result= false; Json_array *points= new (std::nothrow) Json_array(); if (points == NULL || collection->append_alias(points)) return true; diff --git a/sql/sql_join_buffer.h b/sql/sql_join_buffer.h index 81619da3fcc8..982d1f2a1af5 100644 --- a/sql/sql_join_buffer.h +++ b/sql/sql_join_buffer.h @@ -344,7 +344,9 @@ class JOIN_CACHE :public QEP_operation /* Shall calculate how much space is remaining in the join buffer */ virtual ulong rem_space() { - return std::max(buff_size-(end_pos-buff)-aux_buff_size, 0UL); + return static_cast( + std::max(buff_size-(end_pos-buff)-aux_buff_size, 0L) + ); } /* Shall skip record from the join buffer if its match flag is on */ @@ -812,8 +814,9 @@ class JOIN_CACHE_BKA_UNIQUE :public JOIN_CACHE_BKA */ ulong rem_space() { - return std::max(static_cast(last_key_entry - end_pos-aux_buff_size), - 0UL); + return static_cast( + std::max(last_key_entry - end_pos-aux_buff_size, 0L) + ); } /* diff --git a/storage/innobase/include/ut0new.h b/storage/innobase/include/ut0new.h index 322e9b704e2d..e89646aacba8 100644 --- a/storage/innobase/include/ut0new.h +++ b/storage/innobase/include/ut0new.h @@ -663,8 +663,8 @@ class ut_allocator { /* e.g. "btr0cur", derived from "/path/to/btr0cur.cc" */ char keyname[FILENAME_MAX]; - const size_t len = ut_basename_noext(file, keyname, - sizeof(keyname)); + const size_t len MY_ATTRIBUTE((unused)) = + ut_basename_noext(file, keyname, sizeof(keyname)); /* If sizeof(keyname) was not enough then the output would be truncated, assert that this did not happen. */ ut_a(len < sizeof(keyname)); diff --git a/storage/rocksdb/CMakeLists.txt b/storage/rocksdb/CMakeLists.txt index e5f7c413b6ef..1fb95c4b7b13 100644 --- a/storage/rocksdb/CMakeLists.txt +++ b/storage/rocksdb/CMakeLists.txt @@ -43,6 +43,10 @@ IF(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") ENDIF() ENDIF() +# Relax unused variable warnings +SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-variable") +SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-variable") + # check that compiler supports cxx11 and set options INCLUDE (check_stdcxx11) IF (!HAVE_STDCXX11) diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index 8aaeb97d819a..7913e368e219 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -11466,9 +11466,9 @@ const char *get_rdb_io_error_string(const RDB_IO_ERROR_TYPE err_type) { // In case of core dump generation we want this function NOT to be optimized // so that we can capture as much data as possible to debug the root cause // more efficiently. -#pragma GCC push_options -#pragma GCC optimize("O0") - +#if defined(DBUG_OFF) +MY_ATTRIBUTE((optnone)) +#endif void rdb_handle_io_error(const rocksdb::Status status, const RDB_IO_ERROR_TYPE err_type) { if (status.IsIOError()) { @@ -11517,8 +11517,6 @@ void rdb_handle_io_error(const rocksdb::Status status, } } -#pragma GCC pop_options - Rdb_dict_manager *rdb_get_dict_manager(void) { return &dict_manager; } Rdb_ddl_manager *rdb_get_ddl_manager(void) { return &ddl_manager; } diff --git a/storage/rocksdb/ha_rocksdb.h b/storage/rocksdb/ha_rocksdb.h index 6389c20b85de..81c52ce4c0bd 100644 --- a/storage/rocksdb/ha_rocksdb.h +++ b/storage/rocksdb/ha_rocksdb.h @@ -613,9 +613,9 @@ class ha_rocksdb : public my_core::handler { Rdb_tbl_def *const tbl_def_arg, const TABLE *const old_table_arg = nullptr, const Rdb_tbl_def *const old_tbl_def_arg = nullptr) const - MY_ATTRIBUTE((__nonnull__(2, 3), __warn_unused_result__)); + MY_ATTRIBUTE((__warn_unused_result__)); int secondary_index_read(const int keyno, uchar *const buf) - MY_ATTRIBUTE((__nonnull__, __warn_unused_result__)); + MY_ATTRIBUTE((__warn_unused_result__)); void setup_iterator_for_rnd_scan(); void setup_scan_iterator(const Rdb_key_def &kd, rocksdb::Slice *const slice) MY_ATTRIBUTE((__nonnull__)) { @@ -625,8 +625,7 @@ class ha_rocksdb : public my_core::handler { enum ha_rkey_function find_flag) const MY_ATTRIBUTE((__nonnull__, __warn_unused_result__)); void setup_scan_iterator(const Rdb_key_def &kd, rocksdb::Slice *slice, - const bool use_all_keys, const uint eq_cond_len) - MY_ATTRIBUTE((__nonnull__)); + const bool use_all_keys, const uint eq_cond_len); void release_scan_iterator(void); rocksdb::Status @@ -637,7 +636,7 @@ class ha_rocksdb : public my_core::handler { int get_row_by_rowid(uchar *const buf, const char *const rowid, const uint rowid_size, const bool skip_ttl_check = true) - MY_ATTRIBUTE((__nonnull__, __warn_unused_result__)); + MY_ATTRIBUTE((__warn_unused_result__)); int get_row_by_rowid(uchar *const buf, const uchar *const rowid, const uint rowid_size, const bool skip_ttl_check = true) MY_ATTRIBUTE((__nonnull__, __warn_unused_result__)) { @@ -650,15 +649,15 @@ class ha_rocksdb : public my_core::handler { longlong update_hidden_pk_val(); int load_hidden_pk_value() MY_ATTRIBUTE((__warn_unused_result__)); int read_hidden_pk_id_from_rowkey(longlong *const hidden_pk_id) - MY_ATTRIBUTE((__nonnull__, __warn_unused_result__)); + MY_ATTRIBUTE((__warn_unused_result__)); bool can_use_single_delete(const uint &index) const MY_ATTRIBUTE((__warn_unused_result__)); bool skip_unique_check() const MY_ATTRIBUTE((__warn_unused_result__)); bool commit_in_the_middle() MY_ATTRIBUTE((__warn_unused_result__)); bool do_bulk_commit(Rdb_transaction *const tx) - MY_ATTRIBUTE((__nonnull__, __warn_unused_result__)); + MY_ATTRIBUTE((__warn_unused_result__)); bool has_hidden_pk(const TABLE *const table) const - MY_ATTRIBUTE((__nonnull__, __warn_unused_result__)); + MY_ATTRIBUTE((__warn_unused_result__)); void update_row_stats(const operation_type &type); @@ -709,7 +708,7 @@ class ha_rocksdb : public my_core::handler { int alloc_key_buffers(const TABLE *const table_arg, const Rdb_tbl_def *const tbl_def_arg, bool alloc_alter_buffers = false) - MY_ATTRIBUTE((__nonnull__, __warn_unused_result__)); + MY_ATTRIBUTE((__warn_unused_result__)); void free_key_buffers(); // the buffer size should be at least 2*Rdb_key_def::INDEX_NUMBER_SIZE @@ -837,7 +836,7 @@ class ha_rocksdb : public my_core::handler { } int rename_table(const char *const from, const char *const to) override - MY_ATTRIBUTE((__nonnull__, __warn_unused_result__)); + MY_ATTRIBUTE((__warn_unused_result__)); int convert_blob_from_storage_format(my_core::Field_blob *const blob, Rdb_string_reader *const reader, @@ -857,7 +856,7 @@ class ha_rocksdb : public my_core::handler { int convert_record_from_storage_format(const rocksdb::Slice *const key, const rocksdb::Slice *const value, uchar *const buf) - MY_ATTRIBUTE((__nonnull__, __warn_unused_result__)); + MY_ATTRIBUTE((__warn_unused_result__)); int convert_record_from_storage_format(const rocksdb::Slice *const key, uchar *const buf) @@ -874,27 +873,27 @@ class ha_rocksdb : public my_core::handler { static const char *get_key_name(const uint index, const TABLE *const table_arg, const Rdb_tbl_def *const tbl_def_arg) - MY_ATTRIBUTE((__nonnull__, __warn_unused_result__)); + MY_ATTRIBUTE((__warn_unused_result__)); static const char *get_key_comment(const uint index, const TABLE *const table_arg, const Rdb_tbl_def *const tbl_def_arg) - MY_ATTRIBUTE((__nonnull__, __warn_unused_result__)); + MY_ATTRIBUTE((__warn_unused_result__)); static const std::string get_table_comment(const TABLE *const table_arg) - MY_ATTRIBUTE((__nonnull__, __warn_unused_result__)); + MY_ATTRIBUTE((__warn_unused_result__)); static bool is_hidden_pk(const uint index, const TABLE *const table_arg, const Rdb_tbl_def *const tbl_def_arg) - MY_ATTRIBUTE((__nonnull__, __warn_unused_result__)); + MY_ATTRIBUTE((__warn_unused_result__)); static uint pk_index(const TABLE *const table_arg, const Rdb_tbl_def *const tbl_def_arg) - MY_ATTRIBUTE((__nonnull__, __warn_unused_result__)); + MY_ATTRIBUTE((__warn_unused_result__)); static bool is_pk(const uint index, const TABLE *table_arg, const Rdb_tbl_def *tbl_def_arg) - MY_ATTRIBUTE((__nonnull__, __warn_unused_result__)); + MY_ATTRIBUTE((__warn_unused_result__)); /** @brief unireg.cc will call max_supported_record_length(), max_supported_keys(), max_supported_key_parts(), uint max_supported_key_length() @@ -1070,33 +1069,32 @@ class ha_rocksdb : public my_core::handler { int create_cfs(const TABLE *const table_arg, Rdb_tbl_def *const tbl_def_arg, std::array *const cfs) - const MY_ATTRIBUTE((__nonnull__, __warn_unused_result__)); + const MY_ATTRIBUTE((__warn_unused_result__)); int create_key_def(const TABLE *const table_arg, const uint &i, const Rdb_tbl_def *const tbl_def_arg, std::shared_ptr *const new_key_def, const struct key_def_cf_info &cf_info) const - MY_ATTRIBUTE((__nonnull__, __warn_unused_result__)); + MY_ATTRIBUTE((__warn_unused_result__)); int create_inplace_key_defs( const TABLE *const table_arg, Rdb_tbl_def *vtbl_def_arg, const TABLE *const old_table_arg, const Rdb_tbl_def *const old_tbl_def_arg, const std::array &cfs) const - MY_ATTRIBUTE((__nonnull__, __warn_unused_result__)); + MY_ATTRIBUTE((__warn_unused_result__)); std::unordered_map get_old_key_positions(const TABLE *table_arg, const Rdb_tbl_def *tbl_def_arg, const TABLE *old_table_arg, - const Rdb_tbl_def *old_tbl_def_arg) const - MY_ATTRIBUTE((__nonnull__)); + const Rdb_tbl_def *old_tbl_def_arg) const; int compare_key_parts(const KEY *const old_key, - const KEY *const new_key) const; - MY_ATTRIBUTE((__nonnull__, __warn_unused_result__)); + const KEY *const new_key) const + MY_ATTRIBUTE((__warn_unused_result__)); int compare_keys(const KEY *const old_key, const KEY *const new_key) const - MY_ATTRIBUTE((__nonnull__, __warn_unused_result__)); + MY_ATTRIBUTE((__warn_unused_result__)); int convert_record_to_storage_format(const struct update_row_info &row_info, rocksdb::Slice *const packed_rec) @@ -1111,13 +1109,13 @@ class ha_rocksdb : public my_core::handler { bool seek_backward); int index_first_intern(uchar *buf) - MY_ATTRIBUTE((__nonnull__, __warn_unused_result__)); + MY_ATTRIBUTE((__warn_unused_result__)); int index_last_intern(uchar *buf) - MY_ATTRIBUTE((__nonnull__, __warn_unused_result__)); + MY_ATTRIBUTE((__warn_unused_result__)); enum icp_result check_index_cond() const; int find_icp_matching_index_rec(const bool &move_forward, uchar *const buf) - MY_ATTRIBUTE((__nonnull__, __warn_unused_result__)); + MY_ATTRIBUTE((__warn_unused_result__)); void calc_updated_indexes(); int update_write_row(const uchar *const old_data, const uchar *const new_data, @@ -1158,7 +1156,7 @@ class ha_rocksdb : public my_core::handler { const bool &using_full_key, const rocksdb::Slice &key_slice, const int64_t ttl_filter_ts) - MY_ATTRIBUTE((__nonnull__, __warn_unused_result__)); + MY_ATTRIBUTE((__warn_unused_result__)); int read_before_key(const Rdb_key_def &kd, const bool &using_full_key, const rocksdb::Slice &key_slice, const int64_t ttl_filter_ts) @@ -1174,10 +1172,10 @@ class ha_rocksdb : public my_core::handler { MY_ATTRIBUTE((__warn_unused_result__)); int read_row_from_primary_key(uchar *const buf) - MY_ATTRIBUTE((__nonnull__, __warn_unused_result__)); + MY_ATTRIBUTE((__warn_unused_result__)); int read_row_from_secondary_key(uchar *const buf, const Rdb_key_def &kd, bool move_forward) - MY_ATTRIBUTE((__nonnull__, __warn_unused_result__)); + MY_ATTRIBUTE((__warn_unused_result__)); int calc_eq_cond_len(const Rdb_key_def &kd, const enum ha_rkey_function &find_flag, @@ -1188,7 +1186,7 @@ class ha_rocksdb : public my_core::handler { MY_ATTRIBUTE((__warn_unused_result__)); Rdb_tbl_def *get_table_if_exists(const char *const tablename) - MY_ATTRIBUTE((__nonnull__, __warn_unused_result__)); + MY_ATTRIBUTE((__warn_unused_result__)); void read_thd_vars(THD *const thd) MY_ATTRIBUTE((__nonnull__)); const char *thd_rocksdb_tmpdir() MY_ATTRIBUTE((__nonnull__, __warn_unused_result__)); @@ -1278,8 +1276,7 @@ class ha_rocksdb : public my_core::handler { DBUG_RETURN(FALSE); } - bool get_error_message(const int error, String *const buf) override - MY_ATTRIBUTE((__nonnull__)); + bool get_error_message(const int error, String *const buf) override; static int rdb_error_to_mysql(const rocksdb::Status &s, const char *msg = nullptr) diff --git a/storage/rocksdb/ha_rocksdb_proto.h b/storage/rocksdb/ha_rocksdb_proto.h index 349d9690aa93..9b8826a42b62 100644 --- a/storage/rocksdb/ha_rocksdb_proto.h +++ b/storage/rocksdb/ha_rocksdb_proto.h @@ -42,7 +42,7 @@ void rdb_handle_io_error(const rocksdb::Status status, const RDB_IO_ERROR_TYPE err_type); int rdb_normalize_tablename(const std::string &tablename, std::string *str) - MY_ATTRIBUTE((__nonnull__, __warn_unused_result__)); + MY_ATTRIBUTE((__warn_unused_result__)); int rdb_split_normalized_tablename(const std::string &fullname, std::string *db, std::string *table = nullptr, @@ -52,11 +52,9 @@ int rdb_split_normalized_tablename(const std::string &fullname, std::string *db, std::vector rdb_get_open_table_names(void); int rdb_get_table_perf_counters(const char *tablename, - Rdb_perf_counters *counters) - MY_ATTRIBUTE((__nonnull__(2))); + Rdb_perf_counters *counters); -void rdb_get_global_perf_counters(Rdb_perf_counters *counters) - MY_ATTRIBUTE((__nonnull__(1))); +void rdb_get_global_perf_counters(Rdb_perf_counters *counters); void rdb_queue_save_stats_request(); diff --git a/storage/rocksdb/properties_collector.h b/storage/rocksdb/properties_collector.h index 9ae519d95c7a..eeb20587c273 100644 --- a/storage/rocksdb/properties_collector.h +++ b/storage/rocksdb/properties_collector.h @@ -85,7 +85,7 @@ class Rdb_tbl_prop_coll : public rocksdb::TablePropertiesCollector { const rocksdb::Slice &value, rocksdb::EntryType type, rocksdb::SequenceNumber seq, - uint64_t file_size); + uint64_t file_size) override; virtual rocksdb::Status Finish(rocksdb::UserCollectedProperties *properties) override; diff --git a/storage/rocksdb/rdb_cf_options.h b/storage/rocksdb/rdb_cf_options.h index 32f2308284fc..fc72116a24bc 100644 --- a/storage/rocksdb/rdb_cf_options.h +++ b/storage/rocksdb/rdb_cf_options.h @@ -65,8 +65,7 @@ class Rdb_cf_options { get_cf_comparator(const std::string &cf_name); void get_cf_options(const std::string &cf_name, - rocksdb::ColumnFamilyOptions *const opts) - MY_ATTRIBUTE((__nonnull__)); + rocksdb::ColumnFamilyOptions *const opts); static bool parse_cf_options(const std::string &cf_options, Name_to_config_t *option_map); diff --git a/storage/rocksdb/rdb_datadic.cc b/storage/rocksdb/rdb_datadic.cc index da80855763a0..28a622badc08 100644 --- a/storage/rocksdb/rdb_datadic.cc +++ b/storage/rocksdb/rdb_datadic.cc @@ -2962,11 +2962,11 @@ rdb_init_collation_mapping(const my_core::CHARSET_INFO *const cs) { } } - cur->m_make_unpack_info_func = { + cur->m_make_unpack_info_func = {{ &Rdb_key_def::make_unpack_simple_varchar, - &Rdb_key_def::make_unpack_simple}; - cur->m_unpack_func = {&Rdb_key_def::unpack_simple_varchar_space_pad, - &Rdb_key_def::unpack_simple}; + &Rdb_key_def::make_unpack_simple}}; + cur->m_unpack_func = {{&Rdb_key_def::unpack_simple_varchar_space_pad, + &Rdb_key_def::unpack_simple}}; } else { // Out of luck for now. } diff --git a/storage/rocksdb/rdb_utils.h b/storage/rocksdb/rdb_utils.h index 23f615be830c..9e003ce671fd 100644 --- a/storage/rocksdb/rdb_utils.h +++ b/storage/rocksdb/rdb_utils.h @@ -252,26 +252,26 @@ void rdb_log_status_error(const rocksdb::Status &s, const char *msg = nullptr); const char *rdb_skip_spaces(const struct charset_info_st *const cs, const char *str) - MY_ATTRIBUTE((__nonnull__, __warn_unused_result__)); + MY_ATTRIBUTE((__warn_unused_result__)); bool rdb_compare_strings_ic(const char *const str1, const char *const str2) - MY_ATTRIBUTE((__nonnull__, __warn_unused_result__)); + MY_ATTRIBUTE((__warn_unused_result__)); const char *rdb_find_in_string(const char *str, const char *pattern, bool *const succeeded) - MY_ATTRIBUTE((__nonnull__, __warn_unused_result__)); + MY_ATTRIBUTE((__warn_unused_result__)); const char *rdb_check_next_token(const struct charset_info_st *const cs, const char *str, const char *const pattern, bool *const succeeded) - MY_ATTRIBUTE((__nonnull__, __warn_unused_result__)); + MY_ATTRIBUTE((__warn_unused_result__)); const char *rdb_parse_id(const struct charset_info_st *const cs, const char *str, std::string *const id) - MY_ATTRIBUTE((__nonnull__(1, 2), __warn_unused_result__)); + MY_ATTRIBUTE((__warn_unused_result__)); const char *rdb_skip_id(const struct charset_info_st *const cs, const char *str) - MY_ATTRIBUTE((__nonnull__, __warn_unused_result__)); + MY_ATTRIBUTE((__warn_unused_result__)); const std::vector parse_into_tokens(const std::string& s, const char delim); @@ -281,8 +281,7 @@ const std::vector parse_into_tokens(const std::string& s, */ std::string rdb_hexdump(const char *data, const std::size_t data_len, - const std::size_t maxsize = 0) - MY_ATTRIBUTE((__nonnull__)); + const std::size_t maxsize = 0); /* Helper function to see if a database exists diff --git a/storage/tokudb/tokudb_information_schema.cc b/storage/tokudb/tokudb_information_schema.cc index 6d4569c522d6..c5d4c84638e8 100644 --- a/storage/tokudb/tokudb_information_schema.cc +++ b/storage/tokudb/tokudb_information_schema.cc @@ -1085,7 +1085,7 @@ ST_FIELD_INFO background_job_status_field_info[] = { {"scheduler", 32, MYSQL_TYPE_STRING, 0, 0, NULL, SKIP_OPEN_TABLE }, {"scheduled_time", 0, MYSQL_TYPE_DATETIME, 0, 0, NULL, SKIP_OPEN_TABLE }, {"started_time", 0, MYSQL_TYPE_DATETIME, 0, MY_I_S_MAYBE_NULL, NULL, SKIP_OPEN_TABLE }, - {"status", 1024, MYSQL_TYPE_STRING, 0, MY_I_S_MAYBE_NULL, SKIP_OPEN_TABLE }, + {"status", 1024, MYSQL_TYPE_STRING, 0, MY_I_S_MAYBE_NULL, NULL, SKIP_OPEN_TABLE }, {NULL, 0, MYSQL_TYPE_NULL, 0, 0, NULL, SKIP_OPEN_TABLE} }; diff --git a/testclients/bug25714.c b/testclients/bug25714.c index 8d02c26c4363..3920eb8af8d1 100644 --- a/testclients/bug25714.c +++ b/testclients/bug25714.c @@ -71,6 +71,6 @@ int main (int argc, char **argv) mysql_close(&conn); my_end(0); - return 0; + return OK; } From 65353097d25eff3b2bc67cfe717751ed5d6fc813 Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Tue, 30 Jan 2018 10:47:06 +0100 Subject: [PATCH 0439/1221] Fix broken build for gcc 7 in MySQL 5.6 Even with -DMYSQL_MAINTAINER_MODE=0 the build is broken with gcc 7 sql/sql_acl.cc:2732:23: error: ISO C++ forbids comparison between pointer and integer [-fpermissive] DBUG_ASSERT(host != '\0'); Fix: compare with 0 rather than '\0' --- sql/sql_acl.cc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc index af1eefefc44f..354abd5811ec 100644 --- a/sql/sql_acl.cc +++ b/sql/sql_acl.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -2729,7 +2729,7 @@ bool change_password(THD *thd, const char *host, const char *user, } mysql_mutex_assert_owner(&acl_cache->lock); table->use_all_columns(); - DBUG_ASSERT(host != '\0'); + DBUG_ASSERT(host != 0); table->field[MYSQL_USER_FIELD_HOST]->store(host, strlen(host), system_charset_info); table->field[MYSQL_USER_FIELD_USER]->store(user, strlen(user), @@ -3166,7 +3166,7 @@ update_user_table(THD *thd, TABLE *table, if (!is_user_table_positioned) { table->use_all_columns(); - DBUG_ASSERT(host != '\0'); + DBUG_ASSERT(host != 0); table->field[MYSQL_USER_FIELD_HOST]->store(host, (uint) strlen(host), system_charset_info); table->field[MYSQL_USER_FIELD_USER]->store(user, (uint) strlen(user), @@ -3302,7 +3302,7 @@ static int replace_user_table(THD *thd, TABLE *table, LEX_USER *combo, goto end; table->use_all_columns(); - DBUG_ASSERT(combo->host.str != '\0'); + DBUG_ASSERT(combo->host.str != 0); table->field[MYSQL_USER_FIELD_HOST]->store(combo->host.str,combo->host.length, system_charset_info); table->field[MYSQL_USER_FIELD_USER]->store(combo->user.str,combo->user.length, @@ -3393,7 +3393,7 @@ static int replace_user_table(THD *thd, TABLE *table, LEX_USER *combo, old_row_exists = 0; restore_record(table,s->default_values); - DBUG_ASSERT(combo->host.str != '\0'); + DBUG_ASSERT(combo->host.str != 0); table->field[MYSQL_USER_FIELD_HOST]->store(combo->host.str,combo->host.length, system_charset_info); table->field[MYSQL_USER_FIELD_USER]->store(combo->user.str,combo->user.length, From 011d371d588af67a69471996d6035bcb646d157b Mon Sep 17 00:00:00 2001 From: Evgeniy Patlan Date: Tue, 30 Jan 2018 13:44:28 +0200 Subject: [PATCH 0440/1221] [PS-2046] Update package description --- build-ps/debian/control | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/build-ps/debian/control b/build-ps/debian/control index 286928b38863..18afcf614d5c 100644 --- a/build-ps/debian/control +++ b/build-ps/debian/control @@ -79,14 +79,13 @@ Package: percona-server-common-5.5 Section: database Architecture: any Depends: ${misc:Depends} -Description: Percona Server database common files (e.g. /etc/mysql/my.cnf) +Description: Percona Server database common files Percona Server is a fast, stable and true multi-user, multi-threaded SQL database server. SQL (Structured Query Language) is the most popular database query language in the world. The main goals of Percona Server are speed, robustness and ease of use. . - This package includes files needed by all versions of the client library - (e.g. /etc/mysql/my.cnf). + This package includes files needed by all versions of the client library. Package: percona-server-client-5.5 Architecture: any From da6d9270c1e87ad4e11bdd40c42cdbaa2e403058 Mon Sep 17 00:00:00 2001 From: Kailasnath Nagarkar Date: Tue, 30 Jan 2018 17:29:25 +0530 Subject: [PATCH 0441/1221] Bug #27068222: CREATE TABLE USING SELECT WITH UNION FAILS FOR DATE COLUMN ISSUE: select with union is used in create table. In case of columns that cannot be null, 0 is set as default value. For date columns, 0000-00-00 is set as default value which is invalid when server is running in strict mode. SOLUTION: In strict mode, for create using select with union, for date columns, do not set the default value. --- mysql-test/r/union.result | 191 ++++++++++++++++++++++++++++++++++++++ mysql-test/t/union.test | 97 +++++++++++++++++++ sql/item.cc | 26 ++++-- sql/item.h | 4 +- sql/sql_tmp_table.cc | 5 +- 5 files changed, 313 insertions(+), 10 deletions(-) diff --git a/mysql-test/r/union.result b/mysql-test/r/union.result index b70a5f370240..8919a9de44bd 100644 --- a/mysql-test/r/union.result +++ b/mysql-test/r/union.result @@ -2750,3 +2750,194 @@ FOUND_ROWS() 2 DROP TABLE t1; #End of test for Bug#22602381 +# +# Bug #27068222 CREATE TABLE USING SELECT WITH UNION +# FAILS FOR DATE COLUMN +# +CREATE TABLE `t1` (`date` date NOT NULL); +INSERT INTO t1 VALUES ('2017-03-02'), ('2017-06-22'); +CREATE TABLE IF NOT EXISTS t2 AS +SELECT * FROM t1 +UNION +SELECT * FROM t1; +DESC t2; +Field Type Null Key Default Extra +date date NO NULL +SELECT * FROM t2; +date +2017-03-02 +2017-06-22 +DROP TABLE t1, t2; +CREATE TABLE t1 ( +i1 INT NOT NULL, +i2 INT NOT NULL DEFAULT '1234', +# non-specified nullability => i3 is nullable +i3 INT, +i4 INT DEFAULT NULL, +i5 INT DEFAULT '5678', +d1 date NOT NULL, +d2 date NOT NULL DEFAULT '2018-01-25', +d3 date, +d4 date DEFAULT NULL, +d5 date DEFAULT '2017-11-14', +g1 geometry NOT NULL +); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `i1` int(11) NOT NULL, + `i2` int(11) NOT NULL DEFAULT '1234', + `i3` int(11) DEFAULT NULL, + `i4` int(11) DEFAULT NULL, + `i5` int(11) DEFAULT '5678', + `d1` date NOT NULL, + `d2` date NOT NULL DEFAULT '2018-01-25', + `d3` date DEFAULT NULL, + `d4` date DEFAULT NULL, + `d5` date DEFAULT '2017-11-14', + `g1` geometry NOT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +SET SQL_MODE=''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @@SQL_MODE; +@@SQL_MODE + +CREATE TEMPORARY TABLE t2 AS +SELECT * FROM t1; +# we see that with CREATE SELECT (no UNION), defaults are inherited. +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TEMPORARY TABLE `t2` ( + `i1` int(11) NOT NULL, + `i2` int(11) NOT NULL DEFAULT '1234', + `i3` int(11) DEFAULT NULL, + `i4` int(11) DEFAULT NULL, + `i5` int(11) DEFAULT '5678', + `d1` date NOT NULL, + `d2` date NOT NULL DEFAULT '2018-01-25', + `d3` date DEFAULT NULL, + `d4` date DEFAULT NULL, + `d5` date DEFAULT '2017-11-14', + `g1` geometry NOT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +DROP TEMPORARY TABLE t2; +CREATE TEMPORARY TABLE t2 AS +SELECT * FROM t1 +UNION +SELECT * FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TEMPORARY TABLE `t2` ( + `i1` int(11) NOT NULL DEFAULT '0', + `i2` int(11) NOT NULL DEFAULT '0', + `i3` int(11) DEFAULT NULL, + `i4` int(11) DEFAULT NULL, + `i5` int(11) DEFAULT NULL, + `d1` date NOT NULL DEFAULT '0000-00-00', + `d2` date NOT NULL DEFAULT '0000-00-00', + `d3` date DEFAULT NULL, + `d4` date DEFAULT NULL, + `d5` date DEFAULT NULL, + `g1` geometry NOT NULL DEFAULT '' +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +DROP TEMPORARY TABLE t2; +CREATE TEMPORARY TABLE t2 AS +SELECT * FROM t1 +UNION ALL +SELECT * FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TEMPORARY TABLE `t2` ( + `i1` int(11) NOT NULL DEFAULT '0', + `i2` int(11) NOT NULL DEFAULT '0', + `i3` int(11) DEFAULT NULL, + `i4` int(11) DEFAULT NULL, + `i5` int(11) DEFAULT NULL, + `d1` date NOT NULL DEFAULT '0000-00-00', + `d2` date NOT NULL DEFAULT '0000-00-00', + `d3` date DEFAULT NULL, + `d4` date DEFAULT NULL, + `d5` date DEFAULT NULL, + `g1` geometry NOT NULL DEFAULT '' +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +# With UNION and UNION ALL, defaults are not inherited; every +# column gets, as default, NULL (if nullable) or 0 (if not +# nullable). Exception: if strict mode and a date type, +# 0000-00-00 isn't given as default +INSERT INTO t2 VALUES(); +SELECT * FROM t2; +i1 i2 i3 i4 i5 d1 d2 d3 d4 d5 g1 +0 0 NULL NULL NULL 0000-00-00 0000-00-00 NULL NULL NULL +DROP TEMPORARY TABLE t2; +SET SQL_MODE=DEFAULT; +SELECT @@SQL_MODE; +@@SQL_MODE +ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION +CREATE TEMPORARY TABLE t2 AS +SELECT * FROM t1; +# we see that with CREATE SELECT (no UNION), defaults are inherited. +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TEMPORARY TABLE `t2` ( + `i1` int(11) NOT NULL, + `i2` int(11) NOT NULL DEFAULT '1234', + `i3` int(11) DEFAULT NULL, + `i4` int(11) DEFAULT NULL, + `i5` int(11) DEFAULT '5678', + `d1` date NOT NULL, + `d2` date NOT NULL DEFAULT '2018-01-25', + `d3` date DEFAULT NULL, + `d4` date DEFAULT NULL, + `d5` date DEFAULT '2017-11-14', + `g1` geometry NOT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +DROP TEMPORARY TABLE t2; +CREATE TEMPORARY TABLE t2 AS +SELECT * FROM t1 +UNION +SELECT * FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TEMPORARY TABLE `t2` ( + `i1` int(11) NOT NULL DEFAULT '0', + `i2` int(11) NOT NULL DEFAULT '0', + `i3` int(11) DEFAULT NULL, + `i4` int(11) DEFAULT NULL, + `i5` int(11) DEFAULT NULL, + `d1` date NOT NULL, + `d2` date NOT NULL, + `d3` date DEFAULT NULL, + `d4` date DEFAULT NULL, + `d5` date DEFAULT NULL, + `g1` geometry NOT NULL DEFAULT '' +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +DROP TEMPORARY TABLE t2; +CREATE TEMPORARY TABLE t2 AS +SELECT * FROM t1 +UNION ALL +SELECT * FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TEMPORARY TABLE `t2` ( + `i1` int(11) NOT NULL DEFAULT '0', + `i2` int(11) NOT NULL DEFAULT '0', + `i3` int(11) DEFAULT NULL, + `i4` int(11) DEFAULT NULL, + `i5` int(11) DEFAULT NULL, + `d1` date NOT NULL, + `d2` date NOT NULL, + `d3` date DEFAULT NULL, + `d4` date DEFAULT NULL, + `d5` date DEFAULT NULL, + `g1` geometry NOT NULL DEFAULT '' +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +# With UNION and UNION ALL, defaults are not inherited; every +# column gets, as default, NULL (if nullable) or 0 (if not +# nullable). Exception: if strict mode and a date type, +# 0000-00-00 isn't given as default +SELECT * FROM t2; +i1 i2 i3 i4 i5 d1 d2 d3 d4 d5 g1 +DROP TEMPORARY TABLE t2; +SET SQL_MODE=DEFAULT; +DROP TABLE t1; diff --git a/mysql-test/t/union.test b/mysql-test/t/union.test index 72c744f1ec81..9f6426d7354a 100644 --- a/mysql-test/t/union.test +++ b/mysql-test/t/union.test @@ -1929,3 +1929,100 @@ SELECT FOUND_ROWS(); DROP TABLE t1; --echo #End of test for Bug#22602381 + +--echo # +--echo # Bug #27068222 CREATE TABLE USING SELECT WITH UNION +--echo # FAILS FOR DATE COLUMN +--echo # + +CREATE TABLE `t1` (`date` date NOT NULL); + +INSERT INTO t1 VALUES ('2017-03-02'), ('2017-06-22'); + +CREATE TABLE IF NOT EXISTS t2 AS +SELECT * FROM t1 +UNION +SELECT * FROM t1; + +DESC t2; +SELECT * FROM t2; + +DROP TABLE t1, t2; + +# Compare INT and DATE + +CREATE TABLE t1 ( + i1 INT NOT NULL, + i2 INT NOT NULL DEFAULT '1234', + # non-specified nullability => i3 is nullable + i3 INT, + i4 INT DEFAULT NULL, + i5 INT DEFAULT '5678', + d1 date NOT NULL, + d2 date NOT NULL DEFAULT '2018-01-25', + d3 date, + d4 date DEFAULT NULL, + d5 date DEFAULT '2017-11-14', + g1 geometry NOT NULL +); + +SHOW CREATE TABLE t1; + + #We'll test non-strict then strict mode +let $c=2; + +SET SQL_MODE=''; + +while ($c) +{ + + dec $c; + + SELECT @@SQL_MODE; + + CREATE TEMPORARY TABLE t2 AS + SELECT * FROM t1; + + --echo # we see that with CREATE SELECT (no UNION), defaults are inherited. + + SHOW CREATE TABLE t2; + + DROP TEMPORARY TABLE t2; + + CREATE TEMPORARY TABLE t2 AS + SELECT * FROM t1 + UNION + SELECT * FROM t1; + + SHOW CREATE TABLE t2; + + DROP TEMPORARY TABLE t2; + + CREATE TEMPORARY TABLE t2 AS + SELECT * FROM t1 + UNION ALL + SELECT * FROM t1; + + SHOW CREATE TABLE t2; + +--echo # With UNION and UNION ALL, defaults are not inherited; every +--echo # column gets, as default, NULL (if nullable) or 0 (if not +--echo # nullable). Exception: if strict mode and a date type, +--echo # 0000-00-00 isn't given as default + +# In strict mode, t2.d1 has no DEFAULT, so cannot insert; +# in non-strict mode, no problem. + if ($c) + { + INSERT INTO t2 VALUES(); + } + + SELECT * FROM t2; + + DROP TEMPORARY TABLE t2; + + SET SQL_MODE=DEFAULT; + +} + +DROP TABLE t1; diff --git a/sql/item.cc b/sql/item.cc index d2c98d6595c5..36b3487f510c 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -10694,12 +10694,13 @@ uint32 Item_type_holder::display_length(Item *item) of UNION result. @param table temporary table for which we create fields + @param strict If strict mode is on @return created field */ -Field *Item_type_holder::make_field_by_type(TABLE *table) +Field *Item_type_holder::make_field_by_type(TABLE *table, bool strict) { /* The field functions defines a field to be not null if null_ptr is not 0 @@ -10716,7 +10717,7 @@ Field *Item_type_holder::make_field_by_type(TABLE *table) enum_set_typelib, collation.collation); if (field) field->init(table); - return field; + break; case MYSQL_TYPE_SET: DBUG_ASSERT(enum_set_typelib); field= new Field_set((uchar *) 0, max_length, null_ptr, 0, @@ -10725,13 +10726,26 @@ Field *Item_type_holder::make_field_by_type(TABLE *table) enum_set_typelib, collation.collation); if (field) field->init(table); - return field; + break; case MYSQL_TYPE_NULL: - return make_string_field(table); + field= make_string_field(table); + break; default: + field= tmp_table_field_from_field_type(table, 0); break; } - return tmp_table_field_from_field_type(table, 0); + if (strict && + field && field->is_temporal_with_date() && !field->real_maybe_null()) + { + /* + This function is used for CREATE SELECT UNION [ALL] ... , and, if + expression is non-nullable, the resulting column is declared + non-nullable with a default of 0. However, in strict mode, for dates, + 0000-00-00 is invalid; in that case, don't give any default. + */ + field->flags|= NO_DEFAULT_VALUE_FLAG; + } + return field; } diff --git a/sql/item.h b/sql/item.h index 0c9fcc0355a3..6c9ccecec924 100644 --- a/sql/item.h +++ b/sql/item.h @@ -1,7 +1,7 @@ #ifndef ITEM_INCLUDED #define ITEM_INCLUDED -/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -5594,7 +5594,7 @@ class Item_type_holder: public Item return true; } bool join_types(THD *thd, Item *); - Field *make_field_by_type(TABLE *table); + Field *make_field_by_type(TABLE *table, bool strict); static uint32 display_length(Item *item); static enum_field_types get_real_type(Item *); Field::geometry_type get_geometry_type() const { return geometry_type; }; diff --git a/sql/sql_tmp_table.cc b/sql/sql_tmp_table.cc index c895588ac8ef..257b27128e91 100644 --- a/sql/sql_tmp_table.cc +++ b/sql/sql_tmp_table.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -391,7 +391,8 @@ Field *create_tmp_field(THD *thd, TABLE *table,Item *item, Item::Type type, modify_item); break; case Item::TYPE_HOLDER: - result= ((Item_type_holder *)item)->make_field_by_type(table); + result= ((Item_type_holder *)item)->make_field_by_type(table, + thd->is_strict_mode()); if (!result) break; result->set_derivation(item->collation.derivation); From e45067c9d6a82ddfd768bbe844d9413f4d19f49c Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Tue, 30 Jan 2018 17:51:43 +0530 Subject: [PATCH 0442/1221] From 1156fa7b57eb5c9cc3aa0f0ae990acc06f15e0a1 Mon Sep 17 00:00:00 2001 From: Ajo Robert Date: Tue, 30 Jan 2018 18:11:18 +0530 Subject: [PATCH 0443/1221] Bug#26909960 FUNC IN SUBQUERY MAY LEAD TO UNWANTED BEHAVIOUR The problem here is that we try to evaluate a subquery from the resolver. Item_is_not_null_test::update_used_tables() attempts to call is_null() on its argument because with_subselect is erroneously false. This field is wrongly updated because Item_func_make_set::update_used_tables() has a bad propagation of with_subselect: It first calls Item_func::update_used_tables() to update data for each arguments, then it calls item->update_used_tables(). But instead of accumulating data for with_subselect and with_stored_program, it assigns directly to those fields. The fix is to convert the assignments into OR assignments. Note: This is the backport of Bug#21547779 fix to 5.6. Change-Id: I076ef958a24248eeda880a0c8d0d2f2018f96cd9 --- sql/item_strfunc.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc index 81e7b4dbef60..3441d6939f16 100644 --- a/sql/item_strfunc.cc +++ b/sql/item_strfunc.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -2968,8 +2968,8 @@ void Item_func_make_set::update_used_tables() item->update_used_tables(); used_tables_cache|=item->used_tables(); const_item_cache&=item->const_item(); - with_subselect= item->has_subquery(); - with_stored_program= item->has_stored_program(); + with_subselect|= item->has_subquery(); + with_stored_program|= item->has_stored_program(); } From 53f4cfd33ec408382591b55d1a85e0572792b859 Mon Sep 17 00:00:00 2001 From: hrvojem Date: Tue, 30 Jan 2018 13:14:04 +0100 Subject: [PATCH 0444/1221] Release notes for Percona Server 5.5.59-38.11 (5.5) --- doc/source/conf.py | 9 +- .../Percona-Server-5.5.59-38.11.rst | 37 ++++++++ .../release-notes/release-notes_index.rst | 1 + doc/source/upstream-bug-fixes.rst | 90 ++++++++++++------- 4 files changed, 100 insertions(+), 37 deletions(-) create mode 100644 doc/source/release-notes/Percona-Server-5.5.59-38.11.rst diff --git a/doc/source/conf.py b/doc/source/conf.py index fc6131b2b6ac..d6a440eb00a9 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -45,7 +45,7 @@ # General information about the project. project = u'Percona Server' -copyright = u'Percona LLC and/or its affiliates 2009-2017' +copyright = u'Percona LLC and/or its affiliates 2009-2018' # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the @@ -54,7 +54,7 @@ # The short X.Y version. version = '5.5' # The full version, including alpha/beta/rc tags. -release = '5.5.55-38.8' +release = '5.5.59-38.11' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. @@ -131,6 +131,7 @@ extlinks = {'bug': ('https://bugs.launchpad.net/percona-server/+bug/%s', '#'), 'mysqlbug': ('http://bugs.mysql.com/bug.php?id=%s', + '#'), 'psbug': ('https://jira.percona.com/browse/PS-%s', '#') } # -- Options for HTML output --------------------------------------------------- @@ -228,7 +229,7 @@ # (source start file, target name, title, author, documentclass [howto/manual]). latex_documents = [ ('index', 'PerconaServer-5.5.tex', u'Percona Server Documentation', - u'Percona LLC and/or its affiliates 2009-2017', 'manual'), + u'Percona LLC and/or its affiliates 2009-2018', 'manual'), ] # The name of an image file (relative to this directory) to place at the top of @@ -265,7 +266,7 @@ # (source start file, name, description, authors, manual section). man_pages = [ ('index', 'perconaserver55', u'Percona Server 5.5 Documentation', - [u'Percona LLC and/or its affiliates 2009-2017'], 1) + [u'Percona LLC and/or its affiliates 2009-2018'], 1) ] diff --git a/doc/source/release-notes/Percona-Server-5.5.59-38.11.rst b/doc/source/release-notes/Percona-Server-5.5.59-38.11.rst new file mode 100644 index 000000000000..0b2bf8ba6815 --- /dev/null +++ b/doc/source/release-notes/Percona-Server-5.5.59-38.11.rst @@ -0,0 +1,37 @@ +.. rn:: 5.5.59-38.11 + +============================= +|Percona Server| 5.5.59-38.11 +============================= + +Percona is glad to announce the release of |Percona Server| 5.5.59-38.11 on +January 30th, 2018. Downloads are available `here +`_ +and from the :doc:`Percona Software Repositories `. + +Based on `MySQL 5.5.59 +`_, including +all the bug fixes in it, |Percona Server| 5.5.59-38.11 is now the current +stable release in the 5.5 series. All of |Percona|'s software is open-source +and free. + +Bugs Fixed +========== + + With :variable:`innodb_large_prefix` set to ``1``, Blackhole storage engine + was incompatible with InnoDB table definitions, thus adding new indexes would + cause replication errors on the slave. Fixed :psbug:`1126` (upstream + :mysqlbug:`53588`). + + A GCC 7 warning fix introduced introduced regression in |Percona Server| + :rn:`5.5.58-38.10` that lead to a wrong SQL query built to access the remote + server when Federated storage engine was used. + Bug fixed :bug:`1134`. + + |Percona Server| 5.5 embedded server builds were broken. + Bug fixed :psbug:`2893`. + + |Percona Server| now uses *TraviCI* for additional tests. + Bug fixed :psbug:`3777`. + +Other bugs fixed: :psbug:`257` and :psbug:`2415`. diff --git a/doc/source/release-notes/release-notes_index.rst b/doc/source/release-notes/release-notes_index.rst index dc8392e13414..bd76f37e3857 100644 --- a/doc/source/release-notes/release-notes_index.rst +++ b/doc/source/release-notes/release-notes_index.rst @@ -6,6 +6,7 @@ :maxdepth: 1 :glob: + Percona-Server-5.5.59-38.11 Percona-Server-5.5.55-38.8 Percona-Server-5.5.54-38.7 Percona-Server-5.5.54-38.6 diff --git a/doc/source/upstream-bug-fixes.rst b/doc/source/upstream-bug-fixes.rst index 4422715ac0cd..57049c576b79 100644 --- a/doc/source/upstream-bug-fixes.rst +++ b/doc/source/upstream-bug-fixes.rst @@ -5,10 +5,34 @@ ============================================================= +-------------------------------------------------------------------------------------------------------------+ -|:Upstream bug: :mysqlbug:`85838` - rpl_diff.inc in 5.7 does not compare data from different servers | -|:Launchpad bug: :bug:`1680510` | -|:Upstream state: Verified (checked on 2017-05-09) | -|:Fix Released: :rn:`5.5.55-38.8` | +|:Upstream bug: :mysqlbug:`53588` - Blackhole : Specified key was too long; max key length is 1000 bytes | +|:JIRA bug: :psbug:`1126` | +|:Upstream state: Verified (checked on 2018-01-30) | +|:Fix Released: :rn:`5.5.59-38.11` | +|:Upstream fix: N/A | ++-------------------------------------------------------------------------------------------------------------+ +|:Upstream bug: :mysqlbug:`83264` - uint3korr should stop reading four instead of three bytes on x86 | +|:Launchpad bug: :bug:`1628417` | +|:Upstream state: Closed | +|:Fix Released: :rn:`5.5.52-38.3` | +|:Upstream fix: 5.5.57 | ++-------------------------------------------------------------------------------------------------------------+ +|:Upstream bug: :mysqlbug:`68052` - SSL Certificate Subject ALT Names with IPs not respected with --ssl-ver...| +|:Launchpad bug: :bug:`1673656` | +|:Upstream state: Verified (checked on 2018-01-30) | +|:Fix Released: :rn:`5.5.57-38.9` | +|:Upstream fix: N/A | ++-------------------------------------------------------------------------------------------------------------+ +|:Upstream bug: :mysqlbug:`83814` - Add support for OpenSSL 1.1 | +|:Launchpad bug: :bug:`1702903` | +|:Upstream state: Closed | +|:Fix Released: :rn:`5.5.57-38.9` | +|:Upstream fix: N/A | ++-------------------------------------------------------------------------------------------------------------+ +|:Upstream bug: :mysqlbug:`86016` - Make MTR show core dump stacktraces from unit tests too | +|:Launchpad bug: :bug:`1684601` | +|:Upstream state: Verified (checked on 2018-01-30) | +|:Fix Released: :rn:`5.5.57-38.9` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`83073` - GCC 5 and 6 miscompile mach_parse_compressed | @@ -37,7 +61,7 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`79610` - Failed DROP DATABASE due FK constraint on master breaks slave | |:Launchpad bug: :bug:`1525407` | -|:Upstream state: Verified (checked on 2017-05-09) | +|:Upstream state: Verified (checked on 2018-01-30) | |:Fix Released: :rn:`5.5.51-38.1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -49,7 +73,7 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`81714` - mysqldump get_view_structure does not free MYSQL_RES in one error path | |:Launchpad bug: :bug:`1588845` | -|:Upstream state: Verified (checked on 2017-05-09) | +|:Upstream state: Closed | |:Fix Released: :rn:`5.5.50-38.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -85,13 +109,13 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`81324` - "rpl.rpl_start_stop_slave" fail sporadically on 5.5 | |:Launchpad bug: :bug:`1578303` | -|:Upstream state: Verified (checked on 2017-05-09) | +|:Upstream state: Verified (checked on 2018-01-30) | |:Fix Released: :rn:`5.5.49-37.9` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`81295` - main.bigint/rpl.rpl_stm_user_variables fail on Ubuntu 15.10 Wily in ... | |:Launchpad bug: :bug:`1578625` | -|:Upstream state: Verified (checked on 2017-05-09) | +|:Upstream state: Verified (checked on 2018-01-30) | |:Fix Released: :rn:`5.5.49-37.9` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -121,19 +145,19 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`69991` - MySQL client is broken without readline | |:Launchpad bug: :bug:`1266386` | -|:Upstream state: Verified (checked on 2017-05-09) | +|:Upstream state: Verified (checked on 2018-01-30) | |:Fix Released: :rn:`5.5.43-37.2` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`63130` - CMake-based check for the presence of a system readline library is ... | |:Launchpad bug: :bug:`1266386` | -|:Upstream state: Can't repeat (checked on 2017-05-09) | +|:Upstream state: Can't repeat (checked on 2018-01-30) | |:Fix Released: :rn:`5.5.43-37.2` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`75868` - main.error_simulation fails on Mac OS X since 5.5.42 | |:Launchpad bug: :bug:`1424568` | -|:Upstream state: Verified (checked on 2017-05-09) | +|:Upstream state: Verified (checked on 2018-01-30) | |:Fix Released: :rn:`5.5.42-37.1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -145,31 +169,31 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`53645` - SHOW GRANTS not displaying all the applicable grants | |:Launchpad bug: :bug:`1354988` | -|:Upstream state: Verified (checked on 2017-05-09) | +|:Upstream state: Verified (checked on 2018-01-30) | |:Fix Released: :rn:`5.5.42-37.1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`74987` - mtr failure on Ubuntu Utopic, mysqlhotcopy fails with wrong error(255) | |:Launchpad bug: :bug:`1396330` | -|:Upstream state: Verified (checked on 2017-05-09) | +|:Upstream state: Verified (checked on 2018-01-30) | |:Fix Released: :rn:`5.5.41-37.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`73281` - openssl_1 tries to test a removed cipher on CentOS 7 | |:Launchpad bug: :bug:`1401791` | -|:Upstream state: Verified (checked on 2017-05-09) | +|:Upstream state: Verified (checked on 2018-01-30) | |:Fix Released: :rn:`5.5.41-37.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`74440` - mysql_install_db not handling mysqld startup failure | |:Launchpad bug: :bug:`1382782` | -|:Upstream state: Won't Fix | +|:Upstream state: Won't fix | |:Fix Released: :rn:`5.5.41-37.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`72475` - Binlog events with binlog_format=MIXED are unconditionally logged in ROW..| |:Launchpad bug: :bug:`1313901` | -|:Upstream state: Verified (checked on 2017-05-09) | +|:Upstream state: Closed | |:Fix Released: :rn:`5.5.41-37.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -187,19 +211,19 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`73126` - Numerous Valgrind errors in OpenSSL | |:Launchpad bug: :bug:`1334743` | -|:Upstream state: Verified (checked on 2017-05-09) | +|:Upstream state: Verified (checked on 2018-01-30) | |:Fix Released: :rn:`5.5.39-36.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`73111` - Suppression typo causing spurious MTR Valgrind failures | |:Launchpad bug: :bug:`1334317` | -|:Upstream state: Open (checked on 2017-05-09) | +|:Upstream state: Open (checked on 2018-01-30) | |:Fix Released: :rn:`5.5.39-36.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`73418` - Add --manual-lldb option to mysql-test-run.pl | |:Launchpad bug: :bug:`1328482` | -|:Upstream state: Verified (checked on 2017-05-09) | +|:Upstream state: Verified (checked on 2018-01-30) | |:Fix Released: :rn:`5.5.39-36.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -223,7 +247,7 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`71375` - Slave IO thread won't attempt auto reconnect to the master/error-code 1593| |:Launchpad bug: :bug:`1268735` | -|:Upstream state: Verified (checked on 2017-05-09) | +|:Upstream state: Verified (checked on 2018-01-30) | |:Fix Released: :rn:`5.5.36-34.1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -259,7 +283,7 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`69639` - mysql failed to build with dtrace Sun D 1.11 | |:Launchpad bug: :bug:`1196460` | -|:Upstream state: Open (checked on 2017-05-09) | +|:Upstream state: Open (checked on 2018-01-30) | |:Fix Released: :rn:`5.5.33-31.1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -271,7 +295,7 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`42415` - UPDATE/DELETE with LIMIT clause unsafe for SBL even with ORDER BY PK ... | |:Launchpad bug: :bug:`1132194` | -|:Upstream state: Verified (checked on 2017-05-09) | +|:Upstream state: Verified (checked on 2018-01-30) | |:Fix Released: :rn:`5.5.32-31.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -313,7 +337,7 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`68845` - Unnecessary log_sys->mutex reacquisition in mtr_log_reserve_and_write() | |:Launchpad bug: :bug:`1163439` | -|:Upstream state: Verified (checked on 2017-05-09) | +|:Upstream state: Verified (checked on 2018-01-30) | |:Fix Released: :rn:`5.5.30-30.2` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -451,7 +475,7 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`61178` - Incorrect implementation of intersect(ulonglong) in non-optimized Bitmap..| |:Launchpad bug: :bug:`1042517` | -|:Upstream state: Verified (checked on 2017-05-09) | +|:Upstream state: Verified (checked on 2018-01-30) | |:Fix Released: :rn:`5.5.27-29.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -463,7 +487,7 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`64800` - mysqldump with --include-master-host-port putting quotes around port no. | |:Launchpad bug: :bug:`1013432` | -|:Upstream state: Verified (checked on 2017-05-09) | +|:Upstream state: Verified (checked on 2018-01-30) | |:Fix Released: :rn:`5.5.27-28.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -511,7 +535,7 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`71183` - os_file_fsync() should handle fsync() returning EINTR | |:Launchpad bug: :bug:`1262651` | -|:Upstream state: Verified (checked on 2017-05-09) | +|:Upstream state: Verified (checked on 2018-01-30) | |:Fix Released: :rn:`5.5.20-24.1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -535,13 +559,13 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`62516` - Fast index creation does not update index statistics | |:Launchpad bug: :bug:`857590` | -|:Upstream state: Verified (checked on 2017-05-09) | +|:Upstream state: Verified (checked on 2018-01-30) | |:Fix Released: :rn:`5.5.16-22.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`25007` - memory tables with dynamic rows format | |:Launchpad bug: :bug:`1148822` | -|:Upstream state: Verified (checked on 2017-05-09) | +|:Upstream state: Verified (checked on 2018-01-30) | |:Fix Released: :rn:`5.5.15-21.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -559,25 +583,25 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`61595` - mysql-test/include/wait_for_slave_param.inc timeout logic is incorrect | |:Launchpad bug: :bug:`800035` | -|:Upstream state: Verified (checked on 2017-05-09) | +|:Upstream state: Verified (checked on 2018-01-30) | |:Fix Released: :rn:`5.5.13-20.4` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`39833` - CREATE INDEX does full table copy on TEMPORARY table | |:Launchpad bug: N/A | -|:Upstream state: Verified (checked on 2017-05-09) | +|:Upstream state: Verified (checked on 2018-01-30) | |:Fix Released: :rn:`5.5.11-20.2` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`57583` - fast index create not used during "alter table foo engine=innodb" | |:Launchpad bug: :bug:`744103` | -|:Upstream state: Verified (checked on 2017-05-09) | +|:Upstream state: Verified (checked on 2018-01-30) | |:Fix Released: :rn:`5.5.11-20.2` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`49120` - mysqldump should have flag to delay creating indexes for innodb plugin... | |:Launchpad bug: :bug:`744103` | -|:Upstream state: Verified (checked on 2017-05-09) | +|:Upstream state: Verified (checked on 2018-01-30) | |:Fix Released: :rn:`5.5.11-20.2` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -607,7 +631,7 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`69146` - Optimization in buf_pool_get_oldest_modification if srv_buf_pool_instances| |:Launchpad bug: :bug:`1176496` | -|:Upstream state: Verified (checked on 2017-05-09) | +|:Upstream state: Verified (checked on 2018-01-30) | |:Fix Released: :rn:`5.5.8-20.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ From 89ab23279e5ab25db5e56d1aca1f3cf953abe05f Mon Sep 17 00:00:00 2001 From: Evgeniy Patlan Date: Tue, 30 Jan 2018 17:36:04 +0200 Subject: [PATCH 0445/1221] [PS-3784] ps_mysqld_helper.sh script errors --- scripts/ps_mysqld_helper.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/ps_mysqld_helper.sh b/scripts/ps_mysqld_helper.sh index d3f10e9b7991..84471a06af46 100755 --- a/scripts/ps_mysqld_helper.sh +++ b/scripts/ps_mysqld_helper.sh @@ -6,6 +6,7 @@ else SYSTEMD_ENV_FILE="/etc/default/mysql" fi enable_thp() { + STATUS_THP_SYSTEM=0 if [ -f /sys/kernel/mm/transparent_hugepage/enabled ]; then CONTENT_TRANSHP=$(> ${SYSTEMD_ENV_FILE} From 6e107c85f92d112a5978134f1272ed2a11a1e47c Mon Sep 17 00:00:00 2001 From: Sreeharsha Ramanavarapu Date: Wed, 31 Jan 2018 08:33:03 +0530 Subject: [PATCH 0446/1221] Bug #27422376: NEWDATE TYPE IS LEAKING OUT Issue: ------ UNION ALL exposes the internal datatype NEWDATE. This shouldn't happen. Solution: --------- In Item_type_holder::join_types convert such internal types to a valid datatype. This was fixed in trunk by Roy's refactoring: Bug#25221172. Since this is a very big change, a complete backport isn't possible. --- mysql-test/r/metadata.result | 16 ++++++++++++++++ mysql-test/t/metadata.test | 11 +++++++++++ sql/item.cc | 3 ++- 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/mysql-test/r/metadata.result b/mysql-test/r/metadata.result index 2ba40d95df7b..83e99b9b6629 100644 --- a/mysql-test/r/metadata.result +++ b/mysql-test/r/metadata.result @@ -409,3 +409,19 @@ f1 DROP VIEW v1,v2; DROP TABLE t1; # End of test for Bug#22364401 +# +# Bug #27422376: NEWDATE TYPE IS LEAKING OUT +# +SELECT CAST('2018-01-28 00:00:01' AS DATE) UNION +SELECT CAST('2018-01-28 00:00:01' AS DATE); +Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr +def CAST('2018-01-28 00:00:01' AS DATE) CAST('2018-01-28 00:00:01' AS DATE) 10 10 10 Y 128 0 63 +CAST('2018-01-28 00:00:01' AS DATE) +2018-01-28 +SELECT CAST('2018-01-28 00:00:01' AS DATE) UNION ALL +SELECT CAST('2018-01-28 00:00:01' AS DATE); +Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr +def CAST('2018-01-28 00:00:01' AS DATE) 10 10 10 Y 0 0 8 +CAST('2018-01-28 00:00:01' AS DATE) +2018-01-28 +2018-01-28 diff --git a/mysql-test/t/metadata.test b/mysql-test/t/metadata.test index 6245d7a7d080..a989034449f7 100644 --- a/mysql-test/t/metadata.test +++ b/mysql-test/t/metadata.test @@ -259,3 +259,14 @@ DROP TABLE t1; --echo # End of test for Bug#22364401 +--echo # +--echo # Bug #27422376: NEWDATE TYPE IS LEAKING OUT +--echo # + +--enable_metadata +SELECT CAST('2018-01-28 00:00:01' AS DATE) UNION +SELECT CAST('2018-01-28 00:00:01' AS DATE); + +SELECT CAST('2018-01-28 00:00:01' AS DATE) UNION ALL +SELECT CAST('2018-01-28 00:00:01' AS DATE); +--disable_metadata diff --git a/sql/item.cc b/sql/item.cc index 36b3487f510c..a5a6b4bf6e31 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -10518,7 +10518,8 @@ bool Item_type_holder::join_types(THD *thd, Item *item) DBUG_PRINT("info:", ("in type %d len %d, dec %d", get_real_type(item), item->max_length, item->decimals)); - fld_type= Field::field_type_merge(fld_type, get_real_type(item)); + fld_type= real_type_to_type(Field::field_type_merge(fld_type, + get_real_type(item))); { int item_decimals= item->decimals; /* fix variable decimals which always is NOT_FIXED_DEC */ From 423c2ef11a489d047c8d67a23de2f55fb6d8d062 Mon Sep 17 00:00:00 2001 From: Debarun Banerjee Date: Wed, 31 Jan 2018 11:30:03 +0530 Subject: [PATCH 0447/1221] BUG#27272806 ASSERT DURING REPLICAITON:: LOCK == __NULL BUG#27294066 INNODB: FAILING ASSERTION: !(TYPE_MODE & 1024) Problem : --------- 1. We are setting LOCK_REC_NOT_GAP predicate locks also which is not meaningful. It is a debug issue. 2. Although supremum record locks are always of type GAP we set X/S record lock type to share the same BITMAP with record locks. We are setting LOCK_REC_NOT_GAP for supremum in such cases which is asserted in some places. It is a debug issue. Solution : ---------- 1. Skip predicate locks while releasing GAP locks 2. Remove supremum record BIT to release GAP lock on supremum 3. Add tests to validate the scenario Reviewed-by: Jimmy Yang RB: 18439 --- .../innodb/r/xa_prepare_lock_release.result | 56 ++++++++++++++ .../innodb/t/xa_prepare_lock_release.test | 75 +++++++++++++++++++ storage/innobase/include/lock0priv.h | 9 ++- storage/innobase/lock/lock0lock.cc | 20 ++++- storage/innobase/trx/trx0trx.cc | 11 ++- 5 files changed, 164 insertions(+), 7 deletions(-) create mode 100644 mysql-test/suite/innodb/r/xa_prepare_lock_release.result create mode 100644 mysql-test/suite/innodb/t/xa_prepare_lock_release.test diff --git a/mysql-test/suite/innodb/r/xa_prepare_lock_release.result b/mysql-test/suite/innodb/r/xa_prepare_lock_release.result new file mode 100644 index 000000000000..0c07795bf076 --- /dev/null +++ b/mysql-test/suite/innodb/r/xa_prepare_lock_release.result @@ -0,0 +1,56 @@ +# +# Bug#27189701 INNODB: EARLY RELEASE OF GAP LOCKS FOR RC +# ISOLATION [XA PREPARE] +# +CREATE TABLE t1 (col1 INT PRIMARY KEY, col2 int); +Connection: default +SET DEBUG='+d,ib_force_release_gap_lock_prepare'; +# 1.Test GAP lock only on supremum record +XA START 'lock_trx'; +SELECT * FROM t1; +col1 col2 +# Update empty table acquire GAP lock on supremum +UPDATE t1 SET col2 = 100 where col1 = 10; +Connection: con1 +INSERT INTO t1 values(10, 100); +Connection: default +XA END 'lock_trx'; +XA PREPARE 'lock_trx'; +Connection: con1 +INSERT INTO t1 values(20, 200); +SELECT * FROM t1 ORDER BY col1; +col1 col2 +10 100 +20 200 +Connection: default +XA COMMIT 'lock_trx'; +# 2.Test GAP lock on multiple records +XA START 'lock_trx_1'; +# Update table acquire GAP lock on all rows +UPDATE t1 SET col2 = col2 + 1; +Connection: con1 +INSERT INTO t1 values(5, 50); +Connection: default +XA END 'lock_trx_1'; +XA PREPARE 'lock_trx_1'; +Connection: con1 +INSERT INTO t1 values(15, 150); +INSERT INTO t1 values(25, 150); +SELECT * FROM t1 ORDER BY col1; +col1 col2 +5 50 +10 100 +15 150 +20 200 +25 150 +Connection: default +XA COMMIT 'lock_trx_1'; +SELECT * FROM t1 ORDER BY col1; +col1 col2 +5 50 +10 101 +15 150 +20 201 +25 150 +SET DEBUG='-d,ib_force_release_gap_lock_prepare'; +DROP TABLE t1; diff --git a/mysql-test/suite/innodb/t/xa_prepare_lock_release.test b/mysql-test/suite/innodb/t/xa_prepare_lock_release.test new file mode 100644 index 000000000000..4fb4b0287d91 --- /dev/null +++ b/mysql-test/suite/innodb/t/xa_prepare_lock_release.test @@ -0,0 +1,75 @@ +--echo # +--echo # Bug#27189701 INNODB: EARLY RELEASE OF GAP LOCKS FOR RC +--echo # ISOLATION [XA PREPARE] +--echo # + +--source include/have_innodb.inc +--source include/have_debug.inc +--source include/count_sessions.inc + +CREATE TABLE t1 (col1 INT PRIMARY KEY, col2 int); + +--echo Connection: default +SET DEBUG='+d,ib_force_release_gap_lock_prepare'; + +--echo # 1.Test GAP lock only on supremum record +XA START 'lock_trx'; +SELECT * FROM t1; + +--echo # Update empty table acquire GAP lock on supremum +UPDATE t1 SET col2 = 100 where col1 = 10; + +connect (con1,localhost,root); +--echo Connection: con1 +--send INSERT INTO t1 values(10, 100) + +connection default; +--echo Connection: default +XA END 'lock_trx'; +XA PREPARE 'lock_trx'; + +connection con1; +--echo Connection: con1 +--reap +INSERT INTO t1 values(20, 200); +SELECT * FROM t1 ORDER BY col1; + +connection default; +--echo Connection: default +XA COMMIT 'lock_trx'; + +--echo # 2.Test GAP lock on multiple records +XA START 'lock_trx_1'; + +--echo # Update table acquire GAP lock on all rows +UPDATE t1 SET col2 = col2 + 1; + +connection con1; +--echo Connection: con1 +--send INSERT INTO t1 values(5, 50) + +connection default; +--echo Connection: default +XA END 'lock_trx_1'; +XA PREPARE 'lock_trx_1'; + +connection con1; +--echo Connection: con1 +--reap +INSERT INTO t1 values(15, 150); +INSERT INTO t1 values(25, 150); + +SELECT * FROM t1 ORDER BY col1; + +disconnect con1; + +connection default; +--echo Connection: default +XA COMMIT 'lock_trx_1'; +SELECT * FROM t1 ORDER BY col1; + +SET DEBUG='-d,ib_force_release_gap_lock_prepare'; + +DROP TABLE t1; + +--source include/wait_until_count_sessions.inc diff --git a/storage/innobase/include/lock0priv.h b/storage/innobase/include/lock0priv.h index beba8cb87168..812242824979 100644 --- a/storage/innobase/include/lock0priv.h +++ b/storage/innobase/include/lock0priv.h @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2007, 2017, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2007, 2018, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -147,6 +147,13 @@ struct lock_t { return(type() == LOCK_REC); } + /** Determine if it is predicate lock. + @return true if predicate lock, false otherwise. */ + bool is_predicate() const + { + return(type_mode & (LOCK_PREDICATE | LOCK_PRDT_PAGE)); + } + bool is_waiting() const { return(type_mode & LOCK_WAIT); diff --git a/storage/innobase/lock/lock0lock.cc b/storage/innobase/lock/lock0lock.cc index 48e1cfbd26e9..d14a5c7a0fa3 100644 --- a/storage/innobase/lock/lock0lock.cc +++ b/storage/innobase/lock/lock0lock.cc @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2017, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2018, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -4357,6 +4357,19 @@ lock_check_dict_lock( } #endif /* UNIV_DEBUG */ +/** Remove GAP lock from a next key record lock +@param[in,out] lock lock object */ +static +void +lock_remove_gap_lock(lock_t* lock) +{ + /* Remove lock on supremum */ + lock_rec_reset_nth_bit(lock, PAGE_HEAP_NO_SUPREMUM); + + /* Remove GAP lock for other records */ + lock->remove_gap_lock(); +} + /** Release read locks of a transacion. It is called during XA prepare to release locks early. @param[in,out] trx transaction @@ -4386,7 +4399,8 @@ lock_trx_release_read_locks( /* Check only for record lock */ if (!lock->is_record_lock() - || lock->is_insert_intention()) { + || lock->is_insert_intention() + || lock->is_predicate()) { lock = next_lock; continue; @@ -4416,7 +4430,7 @@ lock_trx_release_read_locks( } /* Release GAP lock from Next Key lock */ - lock->remove_gap_lock(); + lock_remove_gap_lock(lock); /* Grant locks */ lock_rec_grant(lock); diff --git a/storage/innobase/trx/trx0trx.cc b/storage/innobase/trx/trx0trx.cc index 89c384af8dfb..4123b2d3cf1a 100644 --- a/storage/innobase/trx/trx0trx.cc +++ b/storage/innobase/trx/trx0trx.cc @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2017, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2018, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -2836,11 +2836,16 @@ trx_prepare( trx_sys_mutex_exit(); /*--------------------------------------*/ - /* Release read locks after PREAPARE for READ COMMITTED + /* Force isolation level to RC and release GAP locks + for test purpose. */ + DBUG_EXECUTE_IF("ib_force_release_gap_lock_prepare", + trx->isolation_level = TRX_ISO_READ_COMMITTED;); + + /* Release read locks after PREPARE for READ COMMITTED and lower isolation. */ if (trx->isolation_level <= TRX_ISO_READ_COMMITTED) { - /* Stop inherting GAP locks. */ + /* Stop inheriting GAP locks. */ trx->skip_lock_inheritance = true; /* Release only GAP locks for now. */ From df1535cf304d55ce149b014617c47ddf4f42f8ee Mon Sep 17 00:00:00 2001 From: Ashish Padiyar Date: Wed, 31 Jan 2018 13:41:54 +0530 Subject: [PATCH 0448/1221] Bug#27462294: BACKPORTING BUG#26540102 TO 5.7 BRANCH Most of the architecture/compiler differences in the GIS test suites have now been eliminated. The repeated usage of replace_numeric_round/replace_regex/ replace_result to stabilize results after the decimal point isn't needed as it once was. This patch introduces changes to the patch provided by Daniel Black (Github user: grooverdan). Calls to replace_numeric_round/replace_regex/ replace_result have been eliminated/added from the contribution patch to prevent result content mismatch. --- mysql-test/r/gis-precise.result | 4 +- mysql-test/r/gis.result | 4 +- .../suite/gis/r/gis_bugs_crashes.result | 6 +- .../spatial_analysis_functions_buffer.result | 48 ++++----- ...al_utility_function_distance_sphere.result | 102 +++++++++--------- mysql-test/suite/gis/t/gis_bugs_crashes.test | 6 -- .../t/spatial_analysis_functions_buffer.test | 76 +------------ ...tial_utility_function_distance_sphere.test | 51 --------- mysql-test/suite/innodb_gis/r/precise.result | 6 +- mysql-test/suite/innodb_gis/t/precise.test | 5 +- mysql-test/t/gis-precise.test | 5 - mysql-test/t/gis.test | 5 +- 12 files changed, 90 insertions(+), 228 deletions(-) diff --git a/mysql-test/r/gis-precise.result b/mysql-test/r/gis-precise.result index d9088ac7fef7..3727a2082c0d 100644 --- a/mysql-test/r/gis-precise.result +++ b/mysql-test/r/gis-precise.result @@ -121,10 +121,10 @@ ST_DISTANCE(ST_GeomFromText('linestring(0 0, 3 6, 6 3, 0 0)'), ST_GeomFromText(' 0.8944271909999159 select ST_astext(ST_Intersection(ST_GeomFromText('POLYGON((0 0, 50 45, 40 50, 0 0))'), ST_GeomFromText('POLYGON((50 5, 55 10, 0 45, 50 5))'))); ST_astext(ST_Intersection(ST_GeomFromText('POLYGON((0 0, 50 45, 40 50, 0 0))'), ST_GeomFromText('POLYGON((50 5, 55 10, 0 45, 50 5))'))) -POLYGON((21.951219512195124 27.4390243902439,26.470588235294116 23.823529411764707,29.28994082840237 26.36094674556213,23.855421686746986 29.819277108433734,21.951219512195124 27.4390243902439)) +POLYGON((21.951219512195124 27.4390243902439,26.470588235294116 23.823529411764707,29.28994082840237 26.36094674556213,23.85542168674699 29.819277108433734,21.951219512195124 27.4390243902439)) select ST_astext(ST_Intersection(ST_GeomFromText('LINESTRING(0 0, 50 45, 40 50, 0 0)'), ST_GeomFromText('LINESTRING(50 5, 55 10, 0 45, 50 5)'))); ST_astext(ST_Intersection(ST_GeomFromText('LINESTRING(0 0, 50 45, 40 50, 0 0)'), ST_GeomFromText('LINESTRING(50 5, 55 10, 0 45, 50 5)'))) -MULTIPOINT((21.951219512195124 27.4390243902439),(23.855421686746986 29.819277108433734),(26.470588235294116 23.823529411764707),(29.28994082840237 26.36094674556213)) +MULTIPOINT((21.951219512195124 27.4390243902439),(23.85542168674699 29.819277108433734),(26.470588235294116 23.823529411764707),(29.28994082840237 26.36094674556213)) select ST_astext(ST_Intersection(ST_GeomFromText('LINESTRING(0 0, 50 45, 40 50)'), ST_GeomFromText('LINESTRING(50 5, 55 10, 0 45)'))); ST_astext(ST_Intersection(ST_GeomFromText('LINESTRING(0 0, 50 45, 40 50)'), ST_GeomFromText('LINESTRING(50 5, 55 10, 0 45)'))) POINT(29.28994082840237 26.36094674556213) diff --git a/mysql-test/r/gis.result b/mysql-test/r/gis.result index d365f0104bc0..caec9cd56dce 100644 --- a/mysql-test/r/gis.result +++ b/mysql-test/r/gis.result @@ -2284,10 +2284,10 @@ CREATE TABLE t1 (g GEOMETRY); INSERT INTO t1 (g) VALUES (ST_GeomFromText("MULTIPOLYGON(((0 7,-3 -14,9 -11,0 7)))")); SELECT ST_AsText(ST_Buffer(g, 2)), ST_AsText(ST_Buffer(g, 2)) FROM t1; ST_AsText(ST_Buffer(g, 2)) ST_AsText(ST_Buffer(g, 2)) -POLYGON((1.7889 7.8944,1.5815 8.2242,1.3142 8.5076,0.9971 8.7337,0.6421 8.8941,0.2627 8.9827,-0.1266 8.996,-0.5111 8.9336,-0.8762 8.7978,-1.2081 8.5939,-1.4942 8.3295,-1.7235 8.0146,-1.8875 7.6613,-1.9799 7.2828,-4.9799 -13.7172,-4.9971 -14.1077,-4.938 -14.4941,-4.8049 -14.8616,-4.6028 -15.1963,-4.3395 -15.4852,-4.025 -15.7174,-3.6714 -15.884,-3.2921 -15.9786,-2.9016 -15.9976,-2.5149 -15.9403,9.4851 -12.9403,9.8227 -12.823,10.134 -12.6474,10.4091 -12.4193,10.6393 -12.1458,10.817 -11.8357,10.9368 -11.499,10.9946 -11.1463,10.9888 -10.7889,10.9195 -10.4383,10.7889 -10.1056,1.7889 7.8944)) POLYGON((1.7889 7.8944,1.5815 8.2242,1.3142 8.5076,0.9971 8.7337,0.6421 8.8941,0.2627 8.9827,-0.1266 8.996,-0.5111 8.9336,-0.8762 8.7978,-1.2081 8.5939,-1.4942 8.3295,-1.7235 8.0146,-1.8875 7.6613,-1.9799 7.2828,-4.9799 -13.7172,-4.9971 -14.1077,-4.938 -14.4941,-4.8049 -14.8616,-4.6028 -15.1963,-4.3395 -15.4852,-4.025 -15.7174,-3.6714 -15.884,-3.2921 -15.9786,-2.9016 -15.9976,-2.5149 -15.9403,9.4851 -12.9403,9.8227 -12.823,10.134 -12.6474,10.4091 -12.4193,10.6393 -12.1458,10.817 -11.8357,10.9368 -11.499,10.9946 -11.1463,10.9888 -10.7889,10.9195 -10.4383,10.7889 -10.1056,1.7889 7.8944)) +POLYGON((1.788854382 7.894427191,1.581542679896 8.224223325896,1.314233720023 8.5075774372,0.997068110519 8.733740229384,0.642077816799 8.894132011549,0.262729718025 8.982668175784,-0.126585271189 8.995990022299,-0.511098133187 8.933592174749,-0.876222023373 8.797841752145,-1.208105635399 8.593888570044,-1.49415866306 8.329469777619,-1.723529424984 8.014616341882,-1.887516533025 7.661272513837,-1.979898987322 7.282842712475,-4.979898987322 -13.717157287525,-4.997098708684 -14.107688196991,-4.938004155957 -14.494105142143,-4.804872892066 -14.861646008221,-4.602790871498 -15.196269794922,-4.339478143841 -15.48519301849,-4.024993928167 -15.717378073466,-3.67135232515 -15.883954897421,-3.292063347729 -15.978559830006,-2.901616804081 -15.997578721042,-2.514928749927 -15.940285000291,9.485071250073 -12.940285000291,9.822682701181 -12.822962745965,10.134020545528 -12.647421440409,10.409141741794 -12.419267258671,10.639259881667 -12.145786646962,10.817025796986 -11.835713619063,10.936762266449 -11.498950822484,10.994645326203 -11.146253282554,10.98882639386 -10.788884924546,10.91949130576 -10.438258843317,10.788854382 -10.105572809,1.788854382 7.894427191)) POLYGON((1.788854382 7.894427191,1.581542679896 8.224223325896,1.314233720023 8.5075774372,0.997068110519 8.733740229384,0.642077816799 8.894132011549,0.262729718025 8.982668175784,-0.126585271189 8.995990022299,-0.511098133187 8.933592174749,-0.876222023373 8.797841752145,-1.208105635399 8.593888570044,-1.49415866306 8.329469777619,-1.723529424984 8.014616341882,-1.887516533025 7.661272513837,-1.979898987322 7.282842712475,-4.979898987322 -13.717157287525,-4.997098708684 -14.107688196991,-4.938004155957 -14.494105142143,-4.804872892066 -14.861646008221,-4.602790871498 -15.196269794922,-4.339478143841 -15.48519301849,-4.024993928167 -15.717378073466,-3.67135232515 -15.883954897421,-3.292063347729 -15.978559830006,-2.901616804081 -15.997578721042,-2.514928749927 -15.940285000291,9.485071250073 -12.940285000291,9.822682701181 -12.822962745965,10.134020545528 -12.647421440409,10.409141741794 -12.419267258671,10.639259881667 -12.145786646962,10.817025796986 -11.835713619063,10.936762266449 -11.498950822484,10.994645326203 -11.146253282554,10.98882639386 -10.788884924546,10.91949130576 -10.438258843317,10.788854382 -10.105572809,1.788854382 7.894427191)) SELECT ST_AsText(ST_Buffer(g, 2)), ST_AsText(ST_Difference(g, g)) FROM t1; ST_AsText(ST_Buffer(g, 2)) ST_AsText(ST_Difference(g, g)) -POLYGON((1.7889 7.8944,1.5815 8.2242,1.3142 8.5076,0.9971 8.7337,0.6421 8.8941,0.2627 8.9827,-0.1266 8.996,-0.5111 8.9336,-0.8762 8.7978,-1.2081 8.5939,-1.4942 8.3295,-1.7235 8.0146,-1.8875 7.6613,-1.9799 7.2828,-4.9799 -13.7172,-4.9971 -14.1077,-4.938 -14.4941,-4.8049 -14.8616,-4.6028 -15.1963,-4.3395 -15.4852,-4.025 -15.7174,-3.6714 -15.884,-3.2921 -15.9786,-2.9016 -15.9976,-2.5149 -15.9403,9.4851 -12.9403,9.8227 -12.823,10.134 -12.6474,10.4091 -12.4193,10.6393 -12.1458,10.817 -11.8357,10.9368 -11.499,10.9946 -11.1463,10.9888 -10.7889,10.9195 -10.4383,10.7889 -10.1056,1.7889 7.8944)) GEOMETRYCOLLECTION() +POLYGON((1.788854382 7.894427191,1.581542679896 8.224223325896,1.314233720023 8.5075774372,0.997068110519 8.733740229384,0.642077816799 8.894132011549,0.262729718025 8.982668175784,-0.126585271189 8.995990022299,-0.511098133187 8.933592174749,-0.876222023373 8.797841752145,-1.208105635399 8.593888570044,-1.49415866306 8.329469777619,-1.723529424984 8.014616341882,-1.887516533025 7.661272513837,-1.979898987322 7.282842712475,-4.979898987322 -13.717157287525,-4.997098708684 -14.107688196991,-4.938004155957 -14.494105142143,-4.804872892066 -14.861646008221,-4.602790871498 -15.196269794922,-4.339478143841 -15.48519301849,-4.024993928167 -15.717378073466,-3.67135232515 -15.883954897421,-3.292063347729 -15.978559830006,-2.901616804081 -15.997578721042,-2.514928749927 -15.940285000291,9.485071250073 -12.940285000291,9.822682701181 -12.822962745965,10.134020545528 -12.647421440409,10.409141741794 -12.419267258671,10.639259881667 -12.145786646962,10.817025796986 -11.835713619063,10.936762266449 -11.498950822484,10.994645326203 -11.146253282554,10.98882639386 -10.788884924546,10.91949130576 -10.438258843317,10.788854382 -10.105572809,1.788854382 7.894427191)) GEOMETRYCOLLECTION() DROP TABLE t1; CREATE TABLE t1(id INT PRIMARY KEY AUTO_INCREMENT, g GEOMETRY NOT NULL, SPATIAL INDEX(g)); diff --git a/mysql-test/suite/gis/r/gis_bugs_crashes.result b/mysql-test/suite/gis/r/gis_bugs_crashes.result index 8a1f66b1b387..790e21028bdf 100644 --- a/mysql-test/suite/gis/r/gis_bugs_crashes.result +++ b/mysql-test/suite/gis/r/gis_bugs_crashes.result @@ -1428,7 +1428,7 @@ POLYGON((15 3.882,24.5528 -0.8944,24.6028 -0.9139,24.6518 -0.9374,24.6896 -0.947 SET @buf = ST_BUFFER(ST_GEOMFROMTEXT(@star_of_elems), 1); SELECT st_area(@buf); st_area(@buf) -373.4694 +373.46939430619625 SELECT ST_ASTEXT(ST_BUFFER(@buf, 1)); ST_ASTEXT(ST_BUFFER(@buf, 1)) POLYGON((15 2.7639,24.1056 -1.7889,24.1905 -1.8265,24.2045 -1.8319,24.2187 -1.8387,24.3275 -1.8791,24.3273 -1.8797,24.3634 -1.8937,24.3774 -1.8977,24.3917 -1.903,24.4294 -1.9132,24.4296 -1.9126,24.5417 -1.9446,24.5556 -1.9472,24.5699 -1.951,24.6856 -1.971,24.6855 -1.9715,24.7241 -1.9787,24.7377 -1.98,24.7518 -1.9824,24.7912 -1.9855,24.7912 -1.9849,24.9088 -1.9958,24.922 -1.9957,24.9358 -1.9968,25.0546 -1.9952,25.0546 -1.9956,25.0943 -1.9956,25.107 -1.9944,25.1203 -1.9942,25.1601 -1.99,25.16 -1.9894,25.2789 -1.9783,25.291 -1.976,25.3038 -1.9746,25.4217 -1.9509,25.4218 -1.9513,25.4612 -1.9439,25.4726 -1.9406,25.4847 -1.9382,25.5235 -1.9265,25.5234 -1.926,25.6396 -1.8927,25.6501 -1.8886,25.6615 -1.8852,25.7743 -1.8396,25.7745 -1.84,25.8123 -1.8253,25.822 -1.8204,25.8327 -1.8161,25.8691 -1.7973,25.8689 -1.7969,25.9782 -1.742,25.9869 -1.7365,25.9967 -1.7315,26.1004 -1.6652,26.1006 -1.6656,26.1354 -1.6438,26.1433 -1.6378,26.1522 -1.6321,26.185 -1.6067,26.1847 -1.6063,26.2831 -1.5314,26.29 -1.525,26.2979 -1.5188,26.3888 -1.4337,26.389 -1.4339,26.4196 -1.4058,26.4256 -1.3991,26.4325 -1.3926,26.4603 -1.3612,26.46 -1.3609,26.5438 -1.2681,26.5489 -1.2612,26.5549 -1.2545,26.6294 -1.1529,26.6297 -1.1531,26.6548 -1.1194,26.659 -1.1125,26.6641 -1.1056,26.6859 -1.0693,26.6855 -1.0691,26.7515 -0.9611,26.7548 -0.9543,26.759 -0.9473,26.8141 -0.8325,26.8144 -0.8326,26.8331 -0.7945,26.8356 -0.7878,26.8389 -0.781,26.8538 -0.7408,26.8535 -0.7407,26.8988 -0.6211,26.9006 -0.6147,26.9031 -0.608,26.9366 -0.4836,26.9368 -0.4837,26.9483 -0.4423,26.9494 -0.4362,26.9511 -0.4298,26.9585 -0.387,26.9582 -0.387,26.9809 -0.2597,26.9814 -0.254,26.9824 -0.2479,26.9926 -0.1181,26.9928 -0.1181,26.9964 -0.0748,26.9964 -0.0696,26.9968 -0.0639,26.9962 -0.0201,26.9959 -0.0201,26.9948 0.1107,26.9943 0.1154,26.9942 0.1207,26.9802 0.2515,26.9804 0.2515,26.9759 0.2952,26.9751 0.2994,26.9746 0.3042,26.9658 0.3476,26.9656 0.3476,26.94 0.4772,26.9389 0.4808,26.9381 0.4851,26.9157 0.5747,24.3542 9.1129,31.06 13.304,31.1359 13.3564,31.2824 13.4681,31.4181 13.5927,31.5417 13.7293,31.6522 13.8767,31.7487 14.0337,31.8302 14.1989,31.8962 14.3709,31.9461 14.5483,31.9795 14.7295,31.996 14.913,31.9955 15.0972,31.9781 15.2806,31.9438 15.4616,31.893 15.6387,31.8261 15.8104,31.7437 15.9752,31.6465 16.1317,31.5352 16.2785,31.4109 16.4145,31.2746 16.5385,31.1275 16.6493,30.9707 16.7462,30.8057 16.8282,30.6339 16.8946,30.4567 16.945,30.2756 16.9788,30.0921 16.9957,30 17,20.3541 17,16.857 25.7428,16.8191 25.8261,16.736 25.989,16.6383 26.1436,16.5268 26.2886,16.4026 26.4228,16.2667 26.5451,16.1201 26.6544,15.9641 26.7499,15.8001 26.8307,15.6294 26.8962,15.4533 26.9458,15.2735 26.9791,15.0914 26.9958,14.9086 26.9958,14.7265 26.9791,14.5467 26.9458,14.3706 26.8962,14.1999 26.8307,14.0359 26.7499,13.8799 26.6544,13.7333 26.5451,13.5974 26.4228,13.4732 26.2886,13.3617 26.1436,13.264 25.989,13.1809 25.8261,13.143 25.7428,9.6459 17,0 17,-0.0928 16.9957,-0.2775 16.9785,-0.4598 16.9442,-0.6382 16.8932,-0.8111 16.8258,-0.9769 16.7427,-1.1344 16.6445,-1.2821 16.5322,-1.4187 16.4067,-1.543 16.269,-1.6541 16.1204,-1.7509 15.9621,-1.8326 15.7955,-1.8985 15.6221,-1.948 15.4433,-1.9808 15.2607,-1.9964 15.0758,-1.9948 14.8903,-1.9761 14.7057,-1.9402 14.5237,-1.8877 14.3457,-1.8188 14.1735,-1.7343 14.0083,-1.6349 13.8517,-1.5213 13.705,-1.3946 13.5694,-1.2559 13.4462,-1.1063 13.3364,-1.029 13.285,6.3814 8.8388,3.143 0.7428,3.1126 0.6551,3.06 0.4772,3.0241 0.2952,3.0052 0.1107,3.0036 -0.0748,3.0191 -0.2597,3.0517 -0.4423,3.1011 -0.6211,3.1669 -0.7945,3.2485 -0.9611,3.3452 -1.1194,3.4562 -1.2681,3.5804 -1.4058,3.717 -1.5314,3.8645 -1.6438,4.0219 -1.742,4.1877 -1.8252,4.3605 -1.8927,4.5388 -1.9439,4.721 -1.9783,4.9057 -1.9956,5.0912 -1.9958,5.2759 -1.9787,5.4583 -1.9446,5.6366 -1.8937,5.8095 -1.8265,5.8944 -1.7889,15 2.7639)) @@ -1440,7 +1440,7 @@ ST_ASTEXT(ST_CONVEXHULL(@buf)) POLYGON((-0.9964 15.0843,-0.9949 14.8988,-0.959 14.7167,4.065 -0.3547,4.1466 -0.5213,4.2576 -0.6699,4.3941 -0.7955,4.5514 -0.8937,4.7242 -0.9612,4.9065 -0.9956,5.092 -0.9958,25.014 -0.9999,25.0935 -0.9956,25.1976 -0.9803,25.2758 -0.9612,25.3743 -0.9273,25.4486 -0.8937,25.5384 -0.8427,25.6059 -0.7955,25.6841 -0.7294,25.7424 -0.6699,25.8065 -0.5913,25.8534 -0.5213,25.9014 -0.433,25.935 -0.3547,30.9626 14.7292,30.996 14.9104,30.9955 15.0947,30.9612 15.2757,30.8944 15.4473,30.7971 15.6038,30.6728 15.7398,30.5257 15.8507,15.5979 25.8015,15.442 25.897,15.2712 25.9625,15.0914 25.9958,14.9086 25.9958,14.7288 25.9625,14.558 25.897,14.4021 25.8015,-0.529 15.8486,-0.6766 15.7363,-0.801 15.5986,-0.8978 15.4404,-0.9637 15.2669,-0.9964 15.0843)) SELECT ST_ASTEXT(ST_ENVELOPE(@buf)); ST_ASTEXT(ST_ENVELOPE(@buf)) -POLYGON((-0.9964 -0.9999,30.996 -0.9999,30.996 25.9958,-0.9964 25.9958,-0.9964 -0.9999)) +POLYGON((-0.9964394501011175 -0.9999013929047789,30.995979706343796 -0.9999013929047789,30.995979706343796 25.995811240678275,-0.9964394501011175 25.995811240678275,-0.9964394501011175 -0.9999013929047789)) SELECT ST_DISTANCE(ST_GEOMFROMTEXT(@star_of_elems),ST_GEOMFROMTEXT(@star_top)) as result; result 0 @@ -2637,7 +2637,7 @@ ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('LINESTRING(0 0,10 10,10 0,0 10)'), 20, ST_B POLYGON((-10 0,-14.1421 -4.1421,-4.1421 -14.1421,-1.1114 -16.6294,2.3463 -18.4776,6.0982 -19.6157,10 -20,13.9018 -19.6157,17.6537 -18.4776,21.1114 -16.6294,24.1421 -14.1421,26.6294 -11.1114,28.4776 -7.6537,29.6157 -3.9018,30 0,30 10,29.6157 13.9018,28.4776 17.6537,26.6294 21.1114,24.1421 24.1421,21.1114 26.6294,17.6537 28.4776,13.9018 29.6157,10 30,6.0982 29.6157,2.3463 28.4776,-1.1114 26.6294,-4.1421 24.1421,-14.1421 14.1421,-10 10,-10 0)) SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTILINESTRING((0 0,10 10),(10 0,0 10))'), 50, ST_BUFFER_STRATEGY('end_flat'))); ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTILINESTRING((0 0,10 10),(10 0,0 10))'), 50, ST_BUFFER_STRATEGY('end_flat'))) -POLYGON((5 15,-25.3553 45.3553,-35.3553 35.3553,-5 5,-35.3553 -25.3553,-25.3553 -35.3553,5 -5,35.3553 -35.3553,45.3553 -25.3553,15 5,45.3553 35.3553,35.3553 45.3553,5 15)) +POLYGON((5.000000748969793 14.999999251030207,-25.35533905932737 45.35533905932737,-35.35533905932737 35.35533905932737,-4.999999251030204 4.999999251030204,-35.35533905932737 -25.35533905932737,-25.35533905932737 -35.35533905932737,4.999999251030207 -4.999999251030207,35.35533905932737 -35.35533905932737,45.35533905932737 -25.35533905932737,14.999999251030204 5.000000748969796,45.35533905932737 35.35533905932737,35.35533905932737 45.35533905932737,5.000000748969793 14.999999251030207)) ###################################################################################################### # BUG#20558350 : ST_BUFFER RETURNS INCORRECT RESULT WITH NEGATIVE DISTANCE AND POLYGON WITH HOLE ###################################################################################################### diff --git a/mysql-test/suite/gis/r/spatial_analysis_functions_buffer.result b/mysql-test/suite/gis/r/spatial_analysis_functions_buffer.result index 5856d7069bd6..cb360219e150 100644 --- a/mysql-test/suite/gis/r/spatial_analysis_functions_buffer.result +++ b/mysql-test/suite/gis/r/spatial_analysis_functions_buffer.result @@ -52,7 +52,7 @@ ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT(@star_center), 0)) POINT(15 10) SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT(@star_top), 1)); ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT(@star_top), 1)) -POLYGON((16 25,15.9808 25.1951,15.9239 25.3827,15.8315 25.5556,15.7071 25.7071,15.5556 25.8315,15.3827 25.9239,15.1951 25.9808,15 26,14.8049 25.9808,14.6173 25.9239,14.4444 25.8315,14.2929 25.7071,14.1685 25.5556,14.0761 25.3827,14.0192 25.1951,14 25,14.0192 24.8049,14.0761 24.6173,14.1685 24.4444,14.2929 24.2929,14.4444 24.1685,14.6173 24.0761,14.8049 24.0192,15 24,15.1951 24.0192,15.3827 24.0761,15.5556 24.1685,15.7071 24.2929,15.8315 24.4444,15.9239 24.6173,15.9808 24.8049,16 25)) +POLYGON((16 25,15.98078528040323 25.195090322016124,15.923879532511288 25.382683432365088,15.831469612302547 25.555570233019598,15.70710678118655 25.707106781186546,15.555570233019605 25.831469612302545,15.382683432365093 25.923879532511286,15.195090322016132 25.98078528040323,15.000000000000002 26,14.804909677983874 25.980785280403232,14.617316567634912 25.923879532511286,14.444429766980399 25.831469612302545,14.292893218813454 25.70710678118655,14.168530387697455 25.555570233019605,14.076120467488714 25.38268343236509,14.01921471959677 25.195090322016128,14 25,14.01921471959677 24.804909677983872,14.076120467488714 24.617316567634912,14.168530387697455 24.4444297669804,14.292893218813452 24.292893218813454,14.444429766980399 24.168530387697455,14.61731656763491 24.076120467488714,14.804909677983872 24.019214719596768,15 24,15.195090322016128 24.019214719596768,15.38268343236509 24.076120467488714,15.555570233019603 24.168530387697455,15.707106781186548 24.292893218813454,15.831469612302545 24.4444297669804,15.923879532511286 24.61731656763491,15.98078528040323 24.804909677983872,16 25)) SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POINT(-0 0)'), 2)); ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POINT(-0 0)'), 2)) POLYGON((2 0,1.9616 0.3902,1.8478 0.7654,1.6629 1.1111,1.4142 1.4142,1.1111 1.6629,0.7654 1.8478,0.3902 1.9616,0 2,-0.3902 1.9616,-0.7654 1.8478,-1.1111 1.6629,-1.4142 1.4142,-1.6629 1.1111,-1.8478 0.7654,-1.9616 0.3902,-2 0,-1.9616 -0.3902,-1.8478 -0.7654,-1.6629 -1.1111,-1.4142 -1.4142,-1.1111 -1.6629,-0.7654 -1.8478,-0.3902 -1.9616,0 -2,0.3902 -1.9616,0.7654 -1.8478,1.1111 -1.6629,1.4142 -1.4142,1.6629 -1.1111,1.8478 -0.7654,1.9616 -0.3902,2 0)) @@ -61,7 +61,7 @@ ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POINT(2.34 -2.34)'), 3)) POLYGON((5.34 -2.34,5.2824 -1.7547,5.1116 -1.1919,4.8344 -0.6733,4.4613 -0.2187,4.0067 0.1544,3.4881 0.4316,2.9253 0.6024,2.34 0.66,1.7547 0.6024,1.1919 0.4316,0.6733 0.1544,0.2187 -0.2187,-0.1544 -0.6733,-0.4316 -1.1919,-0.6024 -1.7547,-0.66 -2.34,-0.6024 -2.9253,-0.4316 -3.4881,-0.1544 -4.0067,0.2187 -4.4613,0.6733 -4.8344,1.1919 -5.1116,1.7547 -5.2824,2.34 -5.34,2.9253 -5.2824,3.4881 -5.1116,4.0067 -4.8344,4.4613 -4.4613,4.8344 -4.0067,5.1116 -3.4881,5.2824 -2.9253,5.34 -2.34)) SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POINT(1000 -1000)'), 5)); ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POINT(1000 -1000)'), 5)) -POLYGON((1005 -1000,1004.9039 -999.0245,1004.6194 -998.0866,1004.1573 -997.2221,1003.5355 -996.4645,1002.7779 -995.8427,1001.9134 -995.3806,1000.9755 -995.0961,1000 -995,999.0245 -995.0961,998.0866 -995.3806,997.2221 -995.8427,996.4645 -996.4645,995.8427 -997.2221,995.3806 -998.0866,995.0961 -999.0245,995 -1000,995.0961 -1000.9755,995.3806 -1001.9134,995.8427 -1002.7779,996.4645 -1003.5355,997.2221 -1004.1573,998.0866 -1004.6194,999.0245 -1004.9039,1000 -1005,1000.9755 -1004.9039,1001.9134 -1004.6194,1002.7779 -1004.1573,1003.5355 -1003.5355,1004.1573 -1002.7779,1004.6194 -1001.9134,1004.9039 -1000.9755,1005 -1000)) +POLYGON((1005 -1000,1004.9039264020162 -999.0245483899193,1004.6193976625565 -998.0865828381745,1004.1573480615127 -997.222148834902,1003.5355339059328 -996.4644660940672,1002.777851165098 -995.8426519384873,1001.9134171618255 -995.3806023374435,1000.9754516100807 -995.0960735979838,1000 -995,999.0245483899193 -995.0960735979838,998.0865828381745 -995.3806023374435,997.222148834902 -995.8426519384873,996.4644660940672 -996.4644660940672,995.8426519384873 -997.222148834902,995.3806023374435 -998.0865828381745,995.0960735979838 -999.0245483899193,995 -1000,995.0960735979838 -1000.9754516100807,995.3806023374435 -1001.9134171618255,995.8426519384873 -1002.777851165098,996.4644660940672 -1003.5355339059328,997.222148834902 -1004.1573480615127,998.0865828381745 -1004.6193976625565,999.0245483899193 -1004.9039264020162,1000 -1005,1000.9754516100807 -1004.9039264020162,1001.9134171618255 -1004.6193976625565,1002.777851165098 -1004.1573480615127,1003.5355339059328 -1003.5355339059328,1004.1573480615127 -1002.777851165098,1004.6193976625565 -1001.9134171618255,1004.9039264020162 -1000.9754516100807,1005 -1000)) SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POINT(-0 0)'), 10)); ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POINT(-0 0)'), 10)) POLYGON((10 0,9.8079 1.9509,9.2388 3.8268,8.3147 5.5557,7.0711 7.0711,5.5557 8.3147,3.8268 9.2388,1.9509 9.8079,0 10,-1.9509 9.8079,-3.8268 9.2388,-5.5557 8.3147,-7.0711 7.0711,-8.3147 5.5557,-9.2388 3.8268,-9.8079 1.9509,-10 0,-9.8079 -1.9509,-9.2388 -3.8268,-8.3147 -5.5557,-7.0711 -7.0711,-5.5557 -8.3147,-3.8268 -9.2388,-1.9509 -9.8079,0 -10,1.9509 -9.8079,3.8268 -9.2388,5.5557 -8.3147,7.0711 -7.0711,8.3147 -5.5557,9.2388 -3.8268,9.8079 -1.9509,10 0)) @@ -97,7 +97,7 @@ ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT(@star_top_to_center), 0)) LINESTRING(15 25,15 10) SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT(@star_line_horizontal), 1)); ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT(@star_line_horizontal), 1)) -POLYGON((10 16,9.8049 15.9808,9.6173 15.9239,9.4444 15.8315,9.2929 15.7071,9.1685 15.5556,9.0761 15.3827,9.0192 15.1951,9 15,9.0192 14.8049,9.0761 14.6173,9.1685 14.4444,9.2929 14.2929,9.4444 14.1685,9.6173 14.0761,9.8049 14.0192,10 14,20 14,20 14,20.1951 14.0192,20.3827 14.0761,20.5556 14.1685,20.7071 14.2929,20.8315 14.4444,20.9239 14.6173,20.9808 14.8049,21 15,20.9808 15.1951,20.9239 15.3827,20.8315 15.5556,20.7071 15.7071,20.5556 15.8315,20.3827 15.9239,20.1951 15.9808,20 16,10 16)) +POLYGON((10 16,9.804909677983874 15.98078528040323,9.617316567634912 15.923879532511288,9.444429766980399 15.831469612302547,9.292893218813454 15.707106781186548,9.168530387697455 15.555570233019603,9.076120467488714 15.382683432365091,9.01921471959677 15.19509032201613,9 15,9.01921471959677 14.804909677983872,9.076120467488714 14.61731656763491,9.168530387697455 14.444429766980399,9.292893218813452 14.292893218813452,9.444429766980399 14.168530387697455,9.61731656763491 14.076120467488714,9.804909677983872 14.01921471959677,10 14,20 14,20 14,20.195090322016128 14.01921471959677,20.38268343236509 14.076120467488714,20.5555702330196 14.168530387697455,20.707106781186546 14.292893218813452,20.831469612302545 14.444429766980399,20.923879532511286 14.61731656763491,20.980785280403232 14.804909677983872,21 15,20.980785280403232 15.195090322016128,20.923879532511286 15.38268343236509,20.831469612302545 15.555570233019601,20.707106781186546 15.707106781186548,20.5555702330196 15.831469612302545,20.38268343236509 15.923879532511286,20.195090322016128 15.98078528040323,20 16,10 16)) SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('LINESTRING(0 0,-0 0,0 0)'), 5)); ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('LINESTRING(0 0,-0 0,0 0)'), 5)) POLYGON((5 0,4.9039 0.9755,4.6194 1.9134,4.1573 2.7779,3.5355 3.5355,2.7779 4.1573,1.9134 4.6194,0.9755 4.9039,0 5,-0.9755 4.9039,-1.9134 4.6194,-2.7779 4.1573,-3.5355 3.5355,-4.1573 2.7779,-4.6194 1.9134,-4.9039 0.9755,-5 0,-4.9039 -0.9755,-4.6194 -1.9134,-4.1573 -2.7779,-3.5355 -3.5355,-2.7779 -4.1573,-1.9134 -4.6194,-0.9755 -4.9039,0 -5,0.9755 -4.9039,1.9134 -4.6194,2.7779 -4.1573,3.5355 -3.5355,4.1573 -2.7779,4.6194 -1.9134,4.9039 -0.9755,5 0)) @@ -243,7 +243,7 @@ ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0),(0 POLYGON((10 1010,0 1010,-195.0903 990.7853,-382.6834 933.8795,-555.5702 841.4696,-707.1068 717.1068,-831.4696 565.5702,-923.8795 392.6834,-980.7853 205.0903,-1000 10,-1000 0,-980.7853 -195.0903,-923.8795 -382.6834,-831.4696 -555.5702,-707.1068 -707.1068,-555.5702 -831.4696,-382.6834 -923.8795,-195.0903 -980.7853,0 -1000,10 -1000,205.0903 -980.7853,392.6834 -923.8795,565.5702 -831.4696,717.1068 -707.1068,841.4696 -555.5702,933.8795 -382.6834,990.7853 -195.0903,1010 0,1010 10,990.7853 205.0903,933.8795 392.6834,841.4696 565.5702,717.1068 717.1068,565.5702 841.4696,392.6834 933.8795,205.0903 990.7853,10 1010)) SELECT ST_ASTEXT(ST_BUFFER(g, 20)) FROM gis_geometrycollection WHERE fid=103; ST_ASTEXT(ST_BUFFER(g, 20)) -POLYGON((15 -17.3607,16.0557 -17.8885,17.057 -18.2778,18.037 -18.7488,18.7915 -18.9521,19.5136 -19.2328,20.5603 -19.4287,21.601 -19.7091,22.3896 -19.771,23.1603 -19.9152,24.2159 -19.9144,25.2809 -19.998,26.0768 -19.913,26.8702 -19.9124,27.8984 -19.7183,28.9511 -19.6058,29.727 -19.3732,30.5158 -19.2243,31.4818 -18.8471,32.4868 -18.5458,33.2152 -18.1702,33.9717 -17.8748,34.8435 -17.3306,35.7675 -16.8541,36.4219 -16.3452,37.1188 -15.9102,37.8682 -15.2206,38.6814 -14.5883,39.2375 -13.9607,39.8489 -13.3982,40.4525 -12.5895,41.1293 -11.8256,41.5655 -11.0984,42.068 -10.4251,42.5078 -9.5272,43.0278 -8.6602,43.3262 -7.8562,43.6999 -7.0933,43.9638 -6.1386,44.3123 -5.1997,44.4595 -4.3452,44.6883 -3.5174,44.7705 -2.5397,44.9389 -1.5621,44.9264 -0.6856,44.9992 0.1795,44.9004 1.1464,44.8914 1.7756,46.0036 3.0049,47.9326 6.1444,49.2528 9.5845,49.9196 13.2084,49.9102 16.8932,49.225 20.5137,47.8872 23.947,45.9422 27.0766,43.4562 29.7963,40.5133 32.0138,37.2136 33.6538,33.6691 34.6606,32.3681 34.7809,31.9064 35.6851,29.678 38.5851,26.9587 41.0309,23.8396 42.9405,20.4248 44.2502,16.8287 44.9162,13.1713 44.9162,9.5752 44.2502,6.1604 42.9405,3.0413 41.0309,0.322 38.5851,-1.9064 35.6851,-2.3689 34.7793,-3.6946 34.6558,-7.2621 33.635,-10.5795 31.9727,-13.5328 29.7262,-16.0203 26.9729,-17.9564 23.8073,-19.2743 20.3387,-19.9288 16.6862,-19.8973 12.9757,-19.1809 9.3349,-17.8043 5.8891,-15.8148 2.7569,-14.8421 1.7164,-14.9992 0.1795,-14.6883 -3.5174,-13.6999 -7.0933,-12.068 -10.4251,-9.8489 -13.3982,-7.1188 -15.9102,-3.9717 -17.8748,-0.5158 -19.2243,3.1298 -19.9124,6.8397 -19.9152,10.4864 -19.2328,13.9443 -17.8885,15 -17.3607)) +POLYGON((15.000001034274 -17.360680292135,16.055728090001 -17.888543819998,17.05695241022 -18.277767398939,18.036969761672 -18.748765556701,18.791543359698 -18.952076436705,19.513605851123 -19.232770971526,20.560323430982 -19.428653186497,21.601027046921 -19.709058396185,22.389620895482 -19.770985011858,23.160268586622 -19.915204953167,24.215869804709 -19.914396496148,25.280859015937 -19.998027858096,26.076802800948 -19.91297501152,26.870235860276 -19.912363441514,27.898439945493 -19.718318771356,28.95112445877 -19.605831160941,29.727007318712 -19.373220151413,30.515848948033 -19.224344212027,31.481833991057 -18.84712011122,32.486808017295 -18.54582717789,33.215198543551 -18.170226369641,33.971663531698 -17.874821774608,34.843454553241 -17.330602224035,35.767478416673 -16.854121411289,36.421934267429 -16.345232902906,37.118766195662 -15.910232741694,37.868228891705 -15.220630359922,38.681390555289 -14.588336179073,39.23747994126 -13.960736648624,39.84886619747 -13.398177960067,40.452478682288 -12.589495516168,41.129291729157 -11.825647902577,41.565485691838 -11.098358088614,42.068021715792 -10.425096388487,42.507787320356 -9.527207557571,43.027802344439 -8.660158349006,43.32621505532 -7.856199441815,43.699872356845 -7.093290762243,43.963765683364 -6.138563136424,44.312255965376 -5.199689368395,44.459455114067 -4.345222020385,44.688266689815 -3.517407390498,44.770500401079 -2.539654230981,44.938901960873 -1.562110301703,44.926432690103 -0.685615870684,44.999194398682 0.17950878459,44.900370525731 1.146355088366,44.891418507445 1.775576406702,46.00363701272 3.004850881915,47.93259127868 6.144370715087,49.252848420451 9.584482693302,49.919594126876 13.208416951261,49.910196632822 16.893164029441,49.224974923287 20.513650260851,47.887187905897 23.946983224481,45.942244919301 27.076623159353,43.45616437569 29.796338746271,40.513332856672 32.013812983715,37.213640726934 33.653776761362,33.669091493324 34.660563766424,32.368108982336 34.780922427548,31.90644890027 35.685129179498,29.678014161645 38.585135268761,26.958748218274 41.030855905158,23.839583028956 42.940506455343,20.424823139988 44.250228411628,16.828657752429 44.916224813565,13.171342247571 44.916224813565,9.575176860011 44.250228411628,6.160416971044 42.940506455343,3.041251781726 41.030855905158,0.321985838355 38.585135268761,-1.90644890027 35.685129179498,-2.368940236166 34.779294335031,-3.694618779319 34.655782662502,-7.26206237471 33.63497920755,-10.579533192563 31.972727459883,-13.532838135665 29.726245006582,-16.020319327581 26.972859668531,-17.956353353016 23.807347742745,-19.274298564215 20.338671637916,-19.928789002022 16.686229199389,-19.897295970845 12.97574382832,-19.180903515418 9.334936864233,-17.804271106102 5.889131195082,-15.814784817162 2.756937426164,-14.842110268168 1.716355116701,-14.999194398682 0.17950878459,-14.688266689815 -3.517407390498,-13.699872356845 -7.093290762243,-12.068021715792 -10.425096388487,-9.84886619747 -13.398177960067,-7.118766195662 -15.910232741694,-3.971663531698 -17.874821774608,-0.515848948033 -19.224344212027,3.129764139724 -19.912363441514,6.839731413378 -19.915204953167,10.486394148877 -19.232770971526,13.944271909999 -17.888543819998,15.000001034274 -17.360680292135)) SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0)))'), -2)); ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0)))'), -2)) POLYGON((8 2,8 8,2 8,2 2,8 2)) @@ -291,7 +291,7 @@ ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT(@star_collection_elems), 0)) GEOMETRYCOLLECTION(MULTIPOLYGON(((5 0,15 25,25 0,15 5,5 0)),((25 0,0 15,30 15,22 10,25 0))),POLYGON((5 0,7 10,0 15,10 15,15 25,20 15,30 15,22 10,25 0,15 5,5 0)),LINESTRING(15 25,15 10),MULTIPOINT((5 0),(25 0)),POINT(15 25)) SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT(@star_collection_multilinestr), 1)); ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT(@star_collection_multilinestr), 1)) -POLYGON((7.7662 16,15.8575 29.4855,15.9403 29.6596,15.9881 29.8464,15.9992 30.0389,15.9732 30.2299,15.911 30.4124,15.8149 30.5796,15.6885 30.7252,15.5366 30.8439,15.3646 30.9311,15.1792 30.9838,14.987 30.9999,14.7954 30.9788,14.6113 30.9214,14.4417 30.8297,14.2929 30.7071,-0.7071 15.7071,-0.7555 15.6491,-0.801 15.5986,-0.8108 15.5826,-0.8232 15.5678,-0.8239 15.5665,-0.8247 15.5655,-0.8382 15.5411,-0.8615 15.4997,-0.8978 15.4404,-0.9038 15.4248,-0.9122 15.4098,-0.9147 15.4024,-0.9183 15.3959,-0.9363 15.3397,-0.9385 15.3332,-0.9637 15.2669,-0.9663 15.2525,-0.9712 15.2383,-0.9733 15.2242,-0.9774 15.2115,-0.9843 15.1519,-0.9964 15.0843,-0.9963 15.0718,-0.9983 15.0591,-0.9976 15.0382,-0.9998 15.0192,-0.9954 14.9626,-0.9949 14.8988,-0.9928 14.8885,-0.9925 14.8778,-0.9867 14.8511,-0.9848 14.8261,-0.9705 14.7748,-0.959 14.7167,-0.9559 14.709,-0.9541 14.7006,-0.941 14.6692,-0.9328 14.6396,-0.9105 14.5952,-0.8902 14.5445,-0.8868 14.5392,-0.8844 14.5332,-0.8622 14.4991,-0.8458 14.4666,-0.8177 14.4302,-0.7907 14.3878,-0.7879 14.3848,-0.7855 14.3812,-0.7529 14.3467,-0.7272 14.3135,-0.6953 14.2858,-0.664 14.2523,-0.6624 14.2511,-0.6609 14.2495,-0.6168 14.2173,-0.5812 14.1863,2.8675 11.7229,-0.8575 5.5145,-0.9414 5.3373,-0.9891 5.1472,-0.9988 4.9514,-0.9701 4.7575,-0.9042 4.5729,-0.8035 4.4047,-0.6719 4.2594,-0.5145 4.1425,-0.3373 4.0586,-0.1472 4.0109,0.0486 4.0012,0.2425 4.0299,0.4271 4.0958,0.5953 4.1965,0.7406 4.3281,0.8575 4.4855,4.5002 10.5567,5.8926 9.5621,4.0194 0.1961,4.0194 0.1956,4.0192 0.1951,4.0191 0.1943,4.0189 0.1935,4.0092 0.0982,4.0001 0.0114,4.0002 0.0102,4 0.009,4.0004 0.0044,4 0,4.0055 -0.0554,4.0081 -0.0868,4.0152 -0.1737,4.0155 -0.1748,4.0156 -0.1759,4.0183 -0.1856,4.0192 -0.1951,4.0382 -0.2576,4.0411 -0.2682,4.0643 -0.3528,4.0647 -0.3537,4.065 -0.3547,4.0719 -0.3687,4.0761 -0.3827,4.1073 -0.441,4.1074 -0.4413,4.1457 -0.5197,4.1462 -0.5205,4.1466 -0.5213,4.1592 -0.5382,4.1685 -0.5556,4.2091 -0.605,4.2565 -0.6688,4.2571 -0.6693,4.2576 -0.6699,4.2772 -0.688,4.2929 -0.7071,4.3398 -0.7456,4.393 -0.7947,4.3936 -0.7951,4.3941 -0.7955,4.4214 -0.8126,4.4444 -0.8315,4.4945 -0.8582,4.5504 -0.8932,4.5509 -0.8934,4.5514 -0.8937,4.5867 -0.9075,4.6173 -0.9239,4.6676 -0.9391,4.7234 -0.961,4.7238 -0.9611,4.7242 -0.9612,4.7671 -0.9693,4.8049 -0.9808,4.8527 -0.9855,4.9058 -0.9956,4.9062 -0.9956,4.9065 -0.9956,4.9559 -0.9957,5 -1,5.0433 -0.9957,5.0915 -0.9958,5.0918 -0.9958,5.092 -0.9958,5.1464 -0.9856,5.1951 -0.9808,5.2322 -0.9695,5.2741 -0.9617,5.2742 -0.9617,5.2743 -0.9616,5.3316 -0.9394,5.3827 -0.9239,5.4126 -0.9079,5.4472 -0.8944,15 3.882,24.5528 -0.8944,24.5874 -0.9079,24.6173 -0.9239,24.6345 -0.9291,24.6518 -0.9374,24.6576 -0.939,24.6627 -0.9414,24.6935 -0.9491,24.7257 -0.9616,24.7297 -0.9624,24.7334 -0.9638,24.7701 -0.9702,24.8049 -0.9808,24.8172 -0.982,24.8301 -0.9855,24.842 -0.9864,24.8528 -0.9891,24.8796 -0.9904,24.908 -0.9958,24.9163 -0.9958,24.9241 -0.9971,24.9625 -0.9963,25 -1,25.0068 -0.9993,25.014 -0.9999,25.0319 -0.998,25.0486 -0.9988,25.0701 -0.9956,25.0935 -0.9956,25.1057 -0.9933,25.1176 -0.9931,25.1555 -0.9848,25.1676 -0.9835,25.1951 -0.9808,25.1963 -0.9804,25.1976 -0.9803,25.2206 -0.9734,25.2425 -0.9701,25.2583 -0.9645,25.2758 -0.9612,25.2912 -0.9552,25.3066 -0.9518,25.3385 -0.938,25.3743 -0.9273,25.3785 -0.9252,25.3827 -0.9239,25.4042 -0.9124,25.4271 -0.9042,25.4371 -0.8982,25.4486 -0.8937,25.4662 -0.8827,25.4842 -0.8749,25.5093 -0.8577,25.5384 -0.8427,25.5468 -0.8362,25.5556 -0.8315,25.5744 -0.816,25.5953 -0.8035,25.6001 -0.7991,25.6059 -0.7955,25.6243 -0.7786,25.6437 -0.7653,25.662 -0.7466,25.6841 -0.7294,25.6951 -0.7169,25.7071 -0.7071,25.7226 -0.6883,25.7406 -0.6719,25.7414 -0.6708,25.7424 -0.6699,25.7599 -0.6466,25.779 -0.627,25.791 -0.6087,25.8065 -0.5913,25.8181 -0.5718,25.8315 -0.5556,25.8408 -0.5382,25.8534 -0.5213,25.8552 -0.5176,25.8575 -0.5145,25.8695 -0.4891,25.8852 -0.4652,25.8918 -0.449,25.9014 -0.433,25.9114 -0.406,25.9239 -0.3827,25.9281 -0.3687,25.935 -0.3547,25.9375 -0.3454,25.9414 -0.3373,25.9479 -0.3113,25.9582 -0.286,25.9608 -0.273,25.9656 -0.26,25.9715 -0.2256,25.9808 -0.1951,25.9817 -0.1856,25.9844 -0.1759,25.9857 -0.1609,25.9891 -0.1472,25.9904 -0.1216,25.9954 -0.096,25.9954 -0.0872,25.9969 -0.0781,25.9964 -0.0369,26 0,25.9996 0.0043,26 0.009,25.9979 0.0295,25.9988 0.0486,25.9953 0.0727,25.9952 0.0975,25.9944 0.1018,25.9943 0.1064,25.9856 0.1499,25.9811 0.1935,25.9809 0.1943,25.9808 0.1951,25.9745 0.2157,25.9737 0.2186,25.9701 0.2425,25.9626 0.2636,25.9578 0.2873,23.1771 9.5564,30.53 14.152,30.6766 14.2636,30.8002 14.4002,30.8966 14.5572,30.9626 14.7292,30.996 14.9104,30.9955 15.0947,30.9612 15.2757,30.8944 15.4473,30.7971 15.6038,30.6728 15.7398,30.5257 15.8507,30.3607 15.9327,30.1835 15.983,30 16,20.618 16,15.8944 25.4472,15.8682 25.4894,15.8453 25.5343,15.8372 25.5448,15.8315 25.5556,15.8135 25.5774,15.7972 25.6037,15.7642 25.6398,15.7339 25.6793,15.7189 25.6928,15.7071 25.7071,15.6895 25.7215,15.6729 25.7397,15.6344 25.7688,15.5979 25.8015,15.5747 25.8158,15.5556 25.8315,15.5405 25.8395,15.5257 25.8507,15.4832 25.8718,15.442 25.897,15.4099 25.9093,15.3827 25.9239,15.3717 25.9272,15.3607 25.9327,15.3157 25.9455,15.2712 25.9625,15.2304 25.9701,15.1951 25.9808,15.1894 25.9814,15.1835 25.983,15.1375 25.9873,15.0914 25.9958,15.0453 25.9958,15 26,14.9547 25.9958,14.9086 25.9958,14.8625 25.9873,14.8165 25.983,14.8106 25.9814,14.8049 25.9808,14.7696 25.9701,14.7288 25.9625,14.6843 25.9455,14.6393 25.9327,14.6283 25.9272,14.6173 25.9239,14.5901 25.9093,14.558 25.897,14.5168 25.8718,14.4743 25.8507,14.4595 25.8395,14.4444 25.8315,14.4253 25.8158,14.4021 25.8015,14.3656 25.7688,14.3271 25.7397,14.3105 25.7215,14.2929 25.7071,14.2811 25.6928,14.2661 25.6793,14.2358 25.6398,14.2028 25.6037,14.1865 25.5774,14.1685 25.5556,14.1628 25.5448,14.1547 25.5343,14.1317 25.4893,14.1056 25.4472,9.382 16,7.7662 16),(2.4142 16,9.9632 23.549,5.4338 16,2.4142 16)) +POLYGON((7.766188802991 16,15.857492925713 29.485504244572,15.940291061129 29.659628555309,15.988134057995 29.846406108749,15.999243362145 30.038893485424,15.973205987343 30.229935004293,15.910989867968 30.412428733796,15.814907876237 30.579590504793,15.688531841633 30.725206110742,15.536559768828 30.84386231962,15.364641190271 30.931148109786,15.179167145907 30.983818648851,14.987032597506 30.999915919702,14.795380109788 30.978841509403,14.611334326959 30.921378855086,14.441737115443 30.829664119825,14.292893218813 30.707106781187,-0.707106781187 15.707106781187,-0.755468841921 15.649058956452,-0.801015966379 15.598642983427,-0.810804423644 15.582638368942,-0.823172286857 15.567791674957,-0.823873533705 15.566546886139,-0.824742876616 15.565507902218,-0.838215676584 15.541084926405,-0.861530562574 15.499698608781,-0.897817667651 15.440367387137,-0.903750412172 15.424753104401,-0.912171969699 15.40980763499,-0.91472816007 15.402375638324,-0.918273137568 15.395947527863,-0.936304149186 15.339687585907,-0.938540849249 15.333188783867,-0.963714928211 15.266933581896,-0.966292388853 15.252549832205,-0.971179529001 15.238349160788,-0.973316934816 15.224186901832,-0.977369413652 15.211539663557,-0.984333182175 15.15187157115,-0.996439450101 15.084311459969,-0.996333065647 15.071777323142,-0.998254802091 15.059053789912,-0.99759462183 15.038228850995,-0.999815675461 15.01919935162,-0.995406702061 14.962633858598,-0.994864798542 14.898787191416,-0.992845977329 14.888527258781,-0.992507556683 14.877816736304,-0.986712248396 14.851063008983,-0.984770218923 14.826139090296,-0.970474552954 14.774832541528,-0.959045175771 14.716746843212,-0.955942693628 14.708981116877,-0.954126761635 14.700597056241,-0.941047222049 14.669212388824,-0.932797228049 14.639598374942,-0.910492137059 14.595215245586,-0.890213555305 14.544456559754,-0.886847054417 14.539156431191,-0.884374373667 14.533221715157,-0.862186935867 14.499091075785,-0.845845618808 14.466572226873,-0.817650819152 14.430215737237,-0.790739240858 14.387846871308,-0.787886138854 14.384794572793,-0.785543844349 14.381193997601,-0.752865464217 14.346674818878,-0.727175957447 14.313548889642,-0.695312929006 14.285758130872,-0.664046310797 14.252308554872,-0.662360719464 14.251070977228,-0.660884711646 14.24951255979,-0.616842814913 14.21732020001,-0.581238193719 14.186266528793,2.867524706499 11.722862077612,-0.857492925713 5.514495755428,-0.941389582191 5.337321292749,-0.989109164963 5.147183761963,-0.998817837225 4.951390041746,-0.970142500145 4.757464374964,-0.904185130847 4.572859216236,-0.803480434044 4.404668838285,-0.671898434757 4.259356703014,-0.514495755428 4.142507074287,-0.337321292749 4.058610417809,-0.147183761963 4.010890835037,0.048609958254 4.001182162775,0.242535625036 4.029857499855,0.427140783764 4.095814869153,0.595331161715 4.196519565956,0.740643296986 4.328101565243,0.857492925713 4.485504244572,4.50019330127 10.556670008917,5.892614926281 9.562085728793,4.019419324309 0.196116135138,4.019364011416 0.195582471188,4.019214719597 0.195090322016,4.019137935231 0.194310717269,4.018902171714 0.193512406144,4.009155651173 0.098156469837,4.000065081195 0.011408687709,4.000165105596 0.010196680724,4.000040280066 0.00897543923,4.000428326367 0.004361586531,4 0,4.005450729638 -0.055354557643,4.008094395109 -0.086787618644,4.015200021201 -0.173692261649,4.015493646129 -0.174764373367,4.015586665509 -0.175870369525,4.01828346564 -0.185627044997,4.019214719597 -0.195090322016,4.038172450076 -0.257582828587,4.041119982789 -0.268246622241,4.064302118633 -0.352802316894,4.064743623817 -0.353713912284,4.065006382158 -0.354664538112,4.071873782635 -0.36868594606,4.076120467489 -0.382683432365,4.107307172088 -0.441031517012,4.107422252034 -0.4412664797,4.145677772042 -0.519743716476,4.146209767988 -0.520460286186,4.14659891421 -0.521254819424,4.159238505439 -0.538188529317,4.168530387697 -0.55557023302,4.2090951096 -0.605000977494,4.256520218947 -0.668758413155,4.257088491709 -0.669281635932,4.257556690126 -0.669908898003,4.277193438934 -0.687977316268,4.292893218813 -0.707106781187,4.339754090104 -0.745565062976,4.393006345088 -0.794706677269,4.393567486569 -0.795056904058,4.394061690217 -0.795511637085,4.42143825433 -0.812601545918,4.44442976698 -0.831469612303,4.494473810691 -0.858218447429,4.550428549089 -0.893244373353,4.550935683057 -0.893440735303,4.551416823415 -0.89374108873,4.586726182533 -0.907529667726,4.617316567635 -0.923879532511,4.667599723332 -0.939133657633,4.723357114359 -0.960972795569,4.723784320348 -0.96105193512,4.724207552598 -0.961217210601,4.767072421995 -0.969306893654,4.804909677984 -0.980785280403,4.852743132659 -0.985494890321,4.905827487762 -0.99555589393,4.906168420866 -0.995557820361,4.906488206986 -0.995618172076,4.955908646297 -0.995656023826,5 -1,5.04327105789 -0.995736673395,5.091546005578 -0.995800847993,5.091751554664 -0.995760067657,5.091986570669 -0.995760247658,5.146373879422 -0.985582243726,5.195090322016 -0.980785280403,5.232197555352 -0.969527080439,5.274106970947 -0.961699208941,5.274207949786 -0.961659462828,5.274319707444 -0.961638548576,5.331562681726 -0.939385720229,5.382683432365 -0.923879532511,5.412638489156 -0.907868035334,5.4472135955 -0.894427191,15.0000007955 3.881966409,24.5527864045 -0.894427191,24.587352624667 -0.907864252706,24.617316567635 -0.923879532511,24.634455891058 -0.929078015948,24.651848488084 -0.937438277835,24.657610390544 -0.938989604117,24.662678707251 -0.941389582191,24.693474018469 -0.949119547972,24.725680292556 -0.961638548576,24.729733558128 -0.962397108993,24.733439590444 -0.96381821318,24.770065620098 -0.970215827365,24.804909677984 -0.980785280403,24.817224043199 -0.981997076523,24.830051352346 -0.985452919809,24.841978822599 -0.986389255112,24.852816238037 -0.989109164963,24.879561906802 -0.990435865608,24.908013429331 -0.995760247658,24.916288736963 -0.995753999079,24.924075646999 -0.997113580602,24.96253493646 -0.996310581919,25 -1,25.006792781673 -0.9993309694,25.014042950797 -0.999901392905,25.031911508875 -0.997990905966,25.048609958254 -0.998817837225,25.070125170677 -0.995636848621,25.093511793014 -0.995618172076,25.105715074874 -0.993315299337,25.117555122776 -0.993066358865,25.155540188269 -0.984781301441,25.167628038646 -0.983489619663,25.195090322016 -0.980785280403,25.196256431902 -0.98043139922,25.197556222938 -0.980291558047,25.220572638098 -0.973390115916,25.242535625036 -0.970142500145,25.25825950767 -0.964525814087,25.275792447402 -0.961217210601,25.291242026604 -0.955183503853,25.306632078379 -0.951828119205,25.338463685956 -0.938047259436,25.374340400865 -0.927291358895,25.378488869691 -0.925152165443,25.382683432365 -0.923879532511,25.404182546807 -0.912387853479,25.427140783764 -0.904185130847,25.437087777996 -0.898229579571,25.448583176585 -0.89374108873,25.466189798531 -0.882749302361,25.484225451823 -0.87494326205,25.509310971245 -0.857692629233,25.538373920834 -0.842706070564,25.546783036765 -0.836167352241,25.55557023302 -0.831469612303,25.574422829232 -0.815997686439,25.595331161715 -0.803480434044,25.600116664941 -0.799145465135,25.605938309783 -0.795511637085,25.624274170429 -0.778639669528,25.643684249166 -0.765291178164,25.66199846378 -0.746578716539,25.684069527764 -0.729416808954,25.695116884952 -0.716948820248,25.707106781187 -0.707106781187,25.722578745182 -0.688256117742,25.740643296986 -0.671898434757,25.741420870749 -0.67084970609,25.742443309874 -0.669908898003,25.759868816025 -0.646564519176,25.779036628812 -0.626978413479,25.791025081156 -0.608707338892,25.806464586458 -0.591282395129,25.818147101157 -0.57180350576,25.831469612303 -0.55557023302,25.840754978677 -0.538198534378,25.85340108579 -0.521254819424,25.855197309898 -0.517587764416,25.857492925713 -0.514495755428,25.869526250095 -0.489087825062,25.885213551082 -0.46518487613,25.891824155768 -0.448957762982,25.901390117222 -0.43300791745,25.911410085551 -0.406012945406,25.923879532511 -0.382683432365,25.928122613774 -0.368695975079,25.934993617842 -0.354664538112,25.937541555714 -0.345447624025,25.941389582191 -0.337321292749,25.947924774945 -0.311279325415,25.958238617235 -0.285969845332,25.960764846989 -0.273045418812,25.965612798269 -0.25998446842,25.971542209415 -0.225565191795,25.980785280403 -0.195090322016,25.981717787578 -0.185622417786,25.984413334491 -0.175870369525,25.985676016638 -0.160861150608,25.989109164963 -0.147183761963,25.990374857012 -0.121629699351,25.995376988335 -0.096045047207,25.995371108092 -0.087242273227,25.996945098044 -0.078105515085,25.996359518767 -0.036943767555,26 0,25.999572020933 0.004345344387,25.999959719934 0.00897543923,25.997866662349 0.029455351072,25.998817837225 0.048609958254,25.995254942624 0.072707925728,25.99523780685 0.097476703972,25.994385661567 0.101803307169,25.994319786195 0.10643384227,25.985557545267 0.149872054347,25.981097828286 0.193512406144,25.980865392958 0.194298093996,25.980785280403 0.195090322016,25.974522422658 0.215736688843,25.973688080439 0.218557562609,25.970142500145 0.242535625036,25.962616433313 0.26360105295,25.957826285221 0.287347885566,23.177098224214 9.556438748626,30.529998940003 14.152001695995,30.676573065982 14.263624493626,30.800181850636 14.400242544096,30.896629563934 14.557218535754,30.962642421023 14.729224134665,30.995979706344 14.910420847563,30.995509831641 15.094658201472,30.961248746164 15.275682513043,30.894359395295 15.447349161224,30.797112245965 15.603831157968,30.672808218785 15.739816937314,30.525666642834 15.850690649186,30.360682036347 15.932688838068,30.183454574666 15.983028188321,30 16,20.618032 16,15.894427191 25.4472135955,15.868243399231 25.489363512044,15.845322445013 25.534256458975,15.837249093741 25.544762832549,15.831469612303 25.55557023302,15.813517766841 25.577447866751,15.797188509938 25.603730469351,15.764192060128 25.639836670104,15.733900708082 25.679256763438,15.718866023622 25.692779029672,15.707106781187 25.707106781187,15.689535539553 25.721527831855,15.672882972781 25.739748947239,15.634369047803 25.768776008922,15.597937410914 25.801542795258,15.574712681402 25.815761701535,15.55557023302 25.831469612303,15.54046974181 25.839543133904,15.525731112119 25.850650808352,15.483165918214 25.87180949512,15.441979151448 25.897025322767,15.409915390307 25.909323291975,15.382683432365 25.923879532511,15.371737387165 25.927198902657,15.360729159316 25.932670613678,15.315655498843 25.945476419416,15.271241156999 25.962511420581,15.230395620696 25.97007586139,15.195090322016 25.980785280403,15.189369613183 25.981350320726,15.183479408002 25.983023553553,15.137527978709 25.987274601925,15.091432887621 25.995811240678,15.045263278577 25.995811240678,15 26,14.954734311183 25.995811240678,14.908567112379 25.995811240678,14.86247200239 25.987274598424,14.816520591998 25.983023553553,14.810631845595 25.981350641727,14.804909677984 25.980785280403,14.769596383631 25.970074380622,14.728758843001 25.962511420581,14.684337741084 25.945473826609,14.639270840684 25.932670613678,14.62826496485 25.927199963326,14.617316567635 25.923879532511,14.590078541578 25.909320964566,14.558020848552 25.897025322767,14.516830433463 25.871807261503,14.474268887881 25.850650808352,14.459536619676 25.839547149777,14.44442976698 25.831469612303,14.42528795471 25.815762090982,14.402062589086 25.801542795258,14.365614407706 25.768761128728,14.327117027219 25.739748947239,14.310467592479 25.72152970423,14.292893218813 25.707106781187,14.281142843925 25.692787005185,14.266099291918 25.679256763438,14.235803453957 25.639830832294,14.202811490062 25.603730469351,14.186470361003 25.577427892615,14.168530387697 25.55557023302,14.162762829278 25.544778348745,14.154677554987 25.534256458975,14.131745817097 25.489342391159,14.105572809 25.4472135955,9.381968 16,7.766188802991 16),(2.414215765597 16,9.963197981187 23.548984418813,5.433810141734 16,2.414215765597 16)) SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION()'), 0)); ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION()'), 0)) GEOMETRYCOLLECTION() @@ -405,7 +405,7 @@ ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POINT(2.34 -2.34)'), 3, ST_BUFFER_STRATEGY( POLYGON((5.34 -2.34,0.84 0.2581,0.84 -4.9381,5.34 -2.34)) SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POINT(1000 -1000)'), 5, ST_BUFFER_STRATEGY('point_circle', 5))); ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POINT(1000 -1000)'), 5, ST_BUFFER_STRATEGY('point_circle', 5))) -POLYGON((1005 -1000,1001.5451 -995.2447,995.9549 -997.0611,995.9549 -1002.9389,1001.5451 -1004.7553,1005 -1000)) +POLYGON((1005 -1000,1001.5450849718748 -995.2447174185243,995.9549150281252 -997.0610737385376,995.9549150281252 -1002.9389262614624,1001.5450849718748 -1004.7552825814757,1005 -1000)) SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POINT(0 0)'), 10, ST_BUFFER_STRATEGY('point_circle', 10))); ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POINT(0 0)'), 10, ST_BUFFER_STRATEGY('point_circle', 10))) POLYGON((10 0,8.0902 5.8779,3.0902 9.5106,-3.0902 9.5106,-8.0902 5.8779,-10 0,-8.0902 -5.8779,-3.0902 -9.5106,3.0902 -9.5106,8.0902 -5.8779,10 0)) @@ -423,13 +423,13 @@ ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTIPOINT(1 -1,1000 -1000,0.0001 0)'), 100 MULTIPOLYGON(((1100 -1000,1099.2115 -987.4667,1096.8583 -975.131,1092.9776 -963.1875,1087.6307 -951.8246,1080.9017 -941.2215,1072.8969 -931.5453,1063.7424 -922.9487,1053.5827 -915.5672,1042.5779 -909.5173,1030.9017 -904.8943,1018.7381 -901.7713,1006.2791 -900.1973,993.7209 -900.1973,981.2619 -901.7713,969.0983 -904.8943,957.4221 -909.5173,946.4173 -915.5672,936.2576 -922.9487,927.1031 -931.5453,919.0983 -941.2215,912.3693 -951.8246,907.0224 -963.1875,903.1417 -975.131,900.7885 -987.4667,900 -1000,900.7885 -1012.5333,903.1417 -1024.869,907.0224 -1036.8125,912.3693 -1048.1754,919.0983 -1058.7785,927.1031 -1068.4547,936.2576 -1077.0513,946.4173 -1084.4328,957.4221 -1090.4827,969.0983 -1095.1057,981.2619 -1098.2287,993.7209 -1099.8027,1006.2791 -1099.8027,1018.7381 -1098.2287,1030.9017 -1095.1057,1042.5779 -1090.4827,1053.5827 -1084.4328,1063.7424 -1077.0513,1072.8969 -1068.4547,1080.9017 -1058.7785,1087.6307 -1048.1754,1092.9776 -1036.8125,1096.8583 -1024.869,1099.2115 -1012.5333,1100 -1000)),((73.1233 68.1811,72.897 68.4547,63.7425 77.0513,53.5828 84.4328,42.578 90.4827,30.9018 95.1057,18.7382 98.2287,6.2792 99.8027,-6.279 99.8027,-18.738 98.2287,-30.9016 95.1057,-42.5778 90.4827,-53.5826 84.4328,-63.7423 77.0513,-72.8968 68.4547,-80.9016 58.7785,-87.6306 48.1754,-92.9775 36.8125,-96.8582 24.869,-99.2114 12.5333,-99.9999 0,-99.2114 -12.5333,-96.8582 -24.869,-92.9775 -36.8125,-87.6306 -48.1754,-80.9016 -58.7785,-72.8968 -68.4547,-72.1228 -69.1816,-71.8969 -69.4547,-62.7424 -78.0513,-52.5827 -85.4328,-41.5779 -91.4827,-29.9017 -96.1057,-17.7381 -99.2287,-5.2791 -100.8027,7.2791 -100.8027,19.7381 -99.2287,31.9017 -96.1057,43.5779 -91.4827,54.5827 -85.4328,64.7424 -78.0513,73.8969 -69.4547,81.9017 -59.7785,88.6307 -49.1754,93.9776 -37.8125,97.8583 -25.869,100.2115 -13.5333,101 -1,100.2115 11.5333,97.8583 23.869,93.9776 35.8125,88.6307 47.1754,81.9017 57.7785,73.8969 67.4547,73.1233 68.1811))) SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(POINT(5 5))'), 5, ST_BUFFER_STRATEGY('point_circle', 4))); ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(POINT(5 5))'), 5, ST_BUFFER_STRATEGY('point_circle', 4))) -POLYGON((10 5,5 10,0 5,5 0,10 5)) +POLYGON((10 5,4.999999999999999 10,0 4.999999999999999,5 0,10 5)) SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(MULTIPOINT(5 5,10 10))'), 5, ST_BUFFER_STRATEGY('point_circle', 4))); ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(MULTIPOINT(5 5,10 10))'), 5, ST_BUFFER_STRATEGY('point_circle', 4))) -POLYGON((5 10,0 5,5 0,10 5,15 10,10 15,5 10)) +POLYGON((4.999999999999999 10,0 4.999999999999999,5 0,10 5,15 10,9.999999999999998 15,4.999999999999999 10)) SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(POINT(5 5),MULTIPOINT(5 5))'), 5, ST_BUFFER_STRATEGY('point_circle', 4))); ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(POINT(5 5),MULTIPOINT(5 5))'), 5, ST_BUFFER_STRATEGY('point_circle', 4))) -POLYGON((10 5,5 10,0 5,5 0,10 5)) +POLYGON((10 5,4.999999999999999 10,0 4.999999999999999,5 0,10 5)) SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(POINT(5 5),MULTIPOINT(10 10,15 15))'), 5, ST_BUFFER_STRATEGY('point_circle', 20))); ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(POINT(5 5),MULTIPOINT(10 10,15 15))'), 5, ST_BUFFER_STRATEGY('point_circle', 20))) POLYGON((5 10,3.4549 9.7553,2.0611 9.0451,0.9549 7.9389,0.2447 6.5451,0 5,0.2447 3.4549,0.9549 2.0611,2.0611 0.9549,3.4549 0.2447,5 0,6.5451 0.2447,7.9389 0.9549,9.0451 2.0611,9.7553 3.4549,10 5,11.5451 5.2447,12.9389 5.9549,14.0451 7.0611,14.7553 8.4549,15 10,16.5451 10.2447,17.9389 10.9549,19.0451 12.0611,19.7553 13.4549,20 15,19.7553 16.5451,19.0451 17.9389,17.9389 19.0451,16.5451 19.7553,15 20,13.4549 19.7553,12.0611 19.0451,10.9549 17.9389,10.2447 16.5451,10 15,8.4549 14.7553,7.0611 14.0451,5.9549 12.9389,5.2447 11.5451,5 10)) @@ -441,13 +441,13 @@ ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POINT(0 0)'), 2, ST_BUFFER_STRATEGY('point_ POLYGON((-2 -2,2 -2,2 2,-2 2,-2 -2)) SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POINT(2.34 -2.34)'), 3, ST_BUFFER_STRATEGY('point_square'))); ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POINT(2.34 -2.34)'), 3, ST_BUFFER_STRATEGY('point_square'))) -POLYGON((-0.66 -5.34,5.34 -5.34,5.34 0.66,-0.66 0.66,-0.66 -5.34)) +POLYGON((-0.6600000000000001 -5.34,5.34 -5.34,5.34 0.6600000000000001,-0.6600000000000001 0.6600000000000001,-0.6600000000000001 -5.34)) SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POINT(1000 -1000)'), 5, ST_BUFFER_STRATEGY('point_square'))); ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POINT(1000 -1000)'), 5, ST_BUFFER_STRATEGY('point_square'))) POLYGON((995 -1005,1005 -1005,1005 -995,995 -995,995 -1005)) -SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POINT(0 0)'), 10, ST_BUFFER_STRATEGY('point_square'))); -ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POINT(0 0)'), 10, ST_BUFFER_STRATEGY('point_square'))) -POLYGON((-10 -10,10 -10,10 10,-10 10,-10 -10)) +SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POINT(0 0.000001)'), 10, ST_BUFFER_STRATEGY('point_square'))); +ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POINT(0 0.000001)'), 10, ST_BUFFER_STRATEGY('point_square'))) +POLYGON((-10 -9.999999,10 -9.999999,10 10.000001,-10 10.000001,-10 -9.999999)) SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTIPOINT(0 0,0 0,0 0,0 0)'), 5, ST_BUFFER_STRATEGY('point_square'))); ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTIPOINT(0 0,0 0,0 0,0 0)'), 5, ST_BUFFER_STRATEGY('point_square'))) POLYGON((-5 5,-5 -5,5 -5,5 5,-5 5)) @@ -457,9 +457,9 @@ MULTIPOLYGON(((5 5,15 5,15 15,5 15,5 5)),((15 15,25 15,25 25,15 25,15 15)),((25 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTIPOINT(10 15,15 15,15 10)'), 5, ST_BUFFER_STRATEGY('point_square'))); ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTIPOINT(10 15,15 15,15 10)'), 5, ST_BUFFER_STRATEGY('point_square'))) POLYGON((10 20,5 20,5 10,10 10,10 5,20 5,20 10,20 15,20 20,15 20,10 20)) -SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTIPOINT(1 -1,1000 -1000,0.0001 0)'), 100, ST_BUFFER_STRATEGY('point_square'))); -ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTIPOINT(1 -1,1000 -1000,0.0001 0)'), 100, ST_BUFFER_STRATEGY('point_square'))) -MULTIPOLYGON(((900 -1100,1100 -1100,1100 -900,900 -900,900 -1100)),((-99 -100,-99 -101,101 -101,101 99,100.0001 99,100.0001 100,-99.9999 100,-99.9999 -100,-99 -100))) +SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTIPOINT(1 -1,1000 -1000,0.0001 0.000)'), 100, ST_BUFFER_STRATEGY('point_square'))); +ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTIPOINT(1 -1,1000 -1000,0.0001 0.000)'), 100, ST_BUFFER_STRATEGY('point_square'))) +MULTIPOLYGON(((900 -1100,1100 -1100,1100 -900,900 -900,900 -1100)),((-99 -100,-99 -101,101 -101,101 99,100.00012000480018 99,100.0001 100,-99.9999 100,-99.9999 -100,-99 -100))) SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(POINT(5 5))'), 5, ST_BUFFER_STRATEGY('point_square'))); ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(POINT(5 5))'), 5, ST_BUFFER_STRATEGY('point_square'))) POLYGON((0 0,10 0,10 10,0 10,0 0)) @@ -501,7 +501,7 @@ ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTILINESTRING((1 -1,1000 -1000,0 0),(2 2, POLYGON((292.9 -1707.1,444.4 -1831.5,617.3 -1923.9,804.9 -1980.8,1000 -2000,1195.1 -1980.8,1382.7 -1923.9,1555.6 -1831.5,1707.1 -1707.1,1831.5 -1555.6,1923.9 -1382.7,1980.8 -1195.1,2000 -1000,1980.8 -804.9,1923.9 -617.3,1831.5 -444.4,1707.1 -292.9,736.3 677.9,692.8 725,596.8 805.9,491.3 874.1,378.2 928.5,259.1 968.4,135.9 993,10.7 1002,-114.7 995.2,-238.3 972.7,-358 934.9,-446.4 894.3,-454 891,-455.6 890.1,-472.1 882.5,-542.1 838.9,-562.1 827.1,-566.2 823.9,-578.7 816.1,-630.8 773.8,-661.3 750.1,-667.4 744.1,-676.2 736.9,-711.7 699.7,-750.1 661.3,-757.5 651.8,-763 646.1,-784.3 617.3,-827.1 562.1,-834.9 548.8,-837.6 545.1,-847.7 527.2,-891 454,-898.5 436.7,-899.1 435.6,-901.2 430.4,-940.9 338.7,-975.9 218.1,-995.6 94.1,-999.5 -31.4,-987.7 -156.4,-960.3 -279,-950.8 -305.5,-949.7 -309.8,-942.5 -328.5,-917.8 -397.1,-910.4 -411.5,-904.5 -426.9,-869.2 -492.4,-860.7 -509,-858.4 -512.5,-844.9 -537.5,-772 -639.7,-686.8 -732,-657.5 -756.7,292.9 -1707.1)) SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(LINESTRING(0 0,5 5,10 10))'), 10, ST_BUFFER_STRATEGY('end_round', 4))); ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(LINESTRING(0 0,5 5,10 10))'), 10, ST_BUFFER_STRATEGY('end_round', 4))) -POLYGON((-7.0711 7.0711,-7.0711 -7.0711,7.0711 -7.0711,17.0711 2.9289,17.0711 2.9289,17.0711 17.0711,2.9289 17.0711,-7.0711 7.0711)) +POLYGON((-7.071067811865475 7.071067811865475,-7.071067811865475 -7.0710678118654755,7.071067811865475 -7.071067811865475,17.071067811865476 2.9289321881345254,17.071067811865476 2.9289321881345254,17.071067811865476 17.071067811865476,2.9289321881345254 17.071067811865476,-7.071067811865475 7.071067811865475)) SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(MULTILINESTRING((0 0,5 0),(0 0,0 5)))'), 10, ST_BUFFER_STRATEGY('end_round', 10))); ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(MULTILINESTRING((0 0,5 0),(0 0,0 5)))'), 10, ST_BUFFER_STRATEGY('end_round', 10))) POLYGON((8.7738 8.7738,8.0902 10.8779,3.0902 14.5106,-3.0902 14.5106,-8.0902 10.8779,-10 5,-10 0,-9.5106 -1.5063,-9.5106 -3.0902,-8.5796 -4.3715,-8.0902 -5.8779,-6.8088 -6.8088,-5.8779 -8.0902,-4.3715 -8.5796,-3.0902 -9.5106,-1.5063 -9.5106,0 -10,5 -10,10.8779 -8.0902,14.5106 -3.0902,14.5106 3.0902,10.8779 8.0902,8.7738 8.7738)) @@ -547,7 +547,7 @@ ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTILINESTRING((0 0,0 5,5 5,5 0,0 0))'), 5 POLYGON((-45 0,0 0,0 -45,0 -50,5 -50,14.7545 -49.0393,24.1342 -46.194,32.7785 -41.5735,40.3553 -35.3553,46.5735 -27.7785,51.194 -19.1342,54.0393 -9.7545,55 0,55 5,54.0393 14.7545,51.194 24.1342,46.5735 32.7785,40.3553 40.3553,32.7785 46.5735,24.1342 51.194,14.7545 54.0393,5 55,0 55,-9.7545 54.0393,-19.1342 51.194,-27.7785 46.5735,-35.3553 40.3553,-41.5735 32.7785,-46.194 24.1342,-49.0393 14.7545,-50 5,-50 0,-45 0)) SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTILINESTRING((0 10,10 0),(10 0,0 0),(0 0,10 10))'), 100, ST_BUFFER_STRATEGY('end_flat'))); ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTILINESTRING((0 10,10 0),(10 0,0 0),(0 0,10 10))'), 100, ST_BUFFER_STRATEGY('end_flat'))) -POLYGON((0 -10,0 -100,10 -100,10 -10,70.7107 -70.7107,80.7107 -60.7107,15 5,80.7107 70.7107,70.7107 80.7107,10 20,10 100,0 100,0 20,-60.7107 80.7107,-70.7107 70.7107,-5 5,-70.7107 -60.7107,-60.7107 -70.7107,0 -10)) +POLYGON((0.0000006494107793741932 -9.99999935058922,0 -100,10 -100,9.99999935058922 -9.99999935058922,70.71067811865474 -70.71067811865474,80.71067811865474 -60.71067811865474,14.999999675294617 4.999999675294617,80.71067811865474 70.71067811865474,70.71067811865474 80.71067811865474,9.99999935058922 19.99999935058922,10 100,0 100,0.0000006494107793741932 19.99999935058922,-60.71067811865474 80.71067811865474,-70.71067811865474 70.71067811865474,-4.999999675294617 5.000000324705383,-70.71067811865474 -60.71067811865474,-60.71067811865474 -70.71067811865474,0.0000006494107793741932 -9.99999935058922)) SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTILINESTRING((1 -1,1000 -1000,0.0001 0),(2 2,4 -9.002))'), 1000, ST_BUFFER_STRATEGY('end_flat'))); ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTILINESTRING((1 -1,1000 -1000,0.0001 0),(2 2,4 -9.002))'), 1000, ST_BUFFER_STRATEGY('end_flat'))) POLYGON((1707.1068 -292.8932,707.1069 707.1067,2.0002 2,-981.8756 -176.854,-979.8756 -187.856,-11.8904 -11.8906,-707.1067 -707.1067,-706.1068 -708.1068,292.8932 -1707.1067,444.4298 -1831.4696,617.3166 -1923.8795,804.9097 -1980.7853,1000 -2000,1195.0903 -1980.7853,1382.6834 -1923.8795,1555.5702 -1831.4696,1707.1068 -1707.1068,1831.4696 -1555.5703,1923.8795 -1382.6835,1980.7853 -1195.0904,2000 -1000,1980.7853 -804.9097,1923.8795 -617.3166,1831.4696 -444.4298,1707.1068 -292.8932)) @@ -599,7 +599,7 @@ ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTILINESTRING((1 -1,1000 -1000,0 0),(2 2, POLYGON((292.89 -1707.11,387.09 -1790.16,490.96 -1860.74,602.85 -1917.75,721.01 -1960.29,843.57 -1987.69,968.59 -1999.51,1094.11 -1995.56,1218.14 -1975.92,1338.74 -1940.88,1453.99 -1891.01,1562.08 -1827.08,1661.31 -1750.11,1750.11 -1661.31,1827.08 -1562.08,1891.01 -1453.99,1940.88 -1338.74,1975.92 -1218.14,1995.56 -1094.11,1999.51 -968.59,1987.69 -843.57,1960.29 -721.01,1917.75 -602.85,1860.74 -490.96,1790.16 -387.09,1707.11 -292.89,735.31 678.9,720.7 697.32,571.24 824.17,399.9 919.43,213.27 979.43,18.53 1001.86,-176.85 985.88,-194.48 980.85,-195.09 980.79,-201.44 978.86,-365.36 932.08,-379.37 924.88,-382.68 923.88,-415.68 906.24,-539.75 842.54,-549.85 834.53,-555.57 831.47,-609.84 786.93,-693.32 720.7,-699.7 713.19,-707.11 707.11,-772.93 626.91,-820.17 571.24,-823.45 565.34,-831.47 555.57,-895.94 434.96,-915.43 399.9,-916.56 396.37,-923.88 382.68,-972.63 221.96,-975.43 213.27,-975.52 212.44,-980.79 195.09,-1000 0,-980.79 -195.09,-930.55 -360.69,-926.08 -376.36,-925.39 -377.7,-923.88 -382.68,-897.34 -432.34,-836.54 -550.75,-714.7 -704.33,-682.91 -731.3,292.89 -1707.11)) SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POLYGON((0 0,0 5,5 5,0 0))'), 1, ST_BUFFER_STRATEGY('join_round', 1))); ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POLYGON((0 0,0 5,5 5,0 0))'), 1, ST_BUFFER_STRATEGY('join_round', 1))) -POLYGON((-1 0,0.7071 -0.7071,5.7071 4.2929,5 6,0 6,-1 5,-1 0)) +POLYGON((-1 0,0.7071067811865475 -0.7071067811865475,5.707106781186548 4.292893218813452,5 6,0 6,-1 5,-1 0)) SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POLYGON((0 0,0 10,10 10,10 0,0 0))'), 5, ST_BUFFER_STRATEGY('join_round', 5))); ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POLYGON((0 0,0 10,10 10,10 0,0 0))'), 5, ST_BUFFER_STRATEGY('join_round', 5))) POLYGON((-5 0,-3.5355 -3.5355,0 -5,10 -5,13.5355 -3.5355,15 0,15 10,13.5355 13.5355,10 15,0 15,-3.5355 13.5355,-5 10,-5 0)) @@ -697,7 +697,7 @@ ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTILINESTRING((1 -1,1000 -1000,0 0),(2 2, POLYGON((292.9 -1707.1,36355.3 -36355.3,1707.1 -292.9,735.3 678.9,720.7 697.3,571.2 824.2,399.9 919.4,213.3 979.4,18.5 1001.9,-176.9 985.9,-194.5 980.8,-195.1 980.8,-201.3 978.9,-365.4 932.1,-379.4 924.9,-382.7 923.9,-415.6 906.3,-539.8 842.5,-549.9 834.5,-555.6 831.5,-609.9 786.9,-693.3 720.7,-699.7 713.2,-707.1 707.1,-773 626.8,-820.2 571.2,-823.5 565.3,-831.5 555.6,-896 434.8,-915.4 399.9,-916.6 396.4,-923.9 382.7,-972.7 221.7,-975.4 213.3,-975.5 212.5,-980.8 195.1,-1000 0,-980.8 -195.1,-930.6 -360.6,-926.1 -376.4,-925.4 -377.7,-923.9 -382.7,-897.4 -432.2,-836.5 -550.8,-714.7 -704.3,-683 -731.2,292.9 -1707.1)) SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POLYGON((0 0,0 5,5 5,0 0))'), 1, ST_BUFFER_STRATEGY('join_miter', 1))); ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POLYGON((0 0,0 5,5 5,0 0))'), 1, ST_BUFFER_STRATEGY('join_miter', 1))) -POLYGON((-1 0,-0.3827 -0.9239,0.7071 -0.7071,5.7071 4.2929,5.9239 5.3827,5 6,0 6,-0.7071 5.7071,-1 5,-1 0)) +POLYGON((-1 0,-0.3826834323650898 -0.9238795325112867,0.7071067811865475 -0.7071067811865475,5.707106781186548 4.292893218813452,5.923879532511287 5.38268343236509,5 6,0 6,-0.7071067811865475 5.707106781186548,-1 5,-1 0)) SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POLYGON((0 0,0 10,10 10,10 0,0 0))'), 5, ST_BUFFER_STRATEGY('join_miter', 5))); ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POLYGON((0 0,0 10,10 10,10 0,0 0))'), 5, ST_BUFFER_STRATEGY('join_miter', 5))) POLYGON((-5 0,-5 -5,0 -5,10 -5,15 -5,15 0,15 10,15 15,10 15,0 15,-5 15,-5 10,-5 0)) @@ -706,7 +706,7 @@ ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POLYGON((10 10,10 20,20 20,20 10,10 10))'), POLYGON((0 10,0 0,10 0,20 0,30 0,30 10,30 20,30 30,20 30,10 30,0 30,0 20,0 10)) SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POLYGON((10 0,0 10,-10 0,0 -10,10 0 ))'), 10, ST_BUFFER_STRATEGY('join_miter', 50))); ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POLYGON((10 0,0 10,-10 0,0 -10,10 0 ))'), 10, ST_BUFFER_STRATEGY('join_miter', 50))) -POLYGON((17.0711 -7.0711,24.1421 0,17.0711 7.0711,7.0711 17.0711,0 24.1421,-7.0711 17.0711,-17.0711 7.0711,-24.1421 0,-17.0711 -7.0711,-7.0711 -17.0711,0 -24.1421,7.0711 -17.0711,17.0711 -7.0711)) +POLYGON((17.071067811865476 -7.071067811865475,24.14213562373095 0,17.071067811865476 7.071067811865475,7.071067811865475 17.071067811865476,0 24.14213562373095,-7.071067811865475 17.071067811865476,-17.071067811865476 7.071067811865475,-24.14213562373095 0,-17.071067811865476 -7.071067811865475,-7.071067811865475 -17.071067811865476,0 -24.14213562373095,7.071067811865475 -17.071067811865476,17.071067811865476 -7.071067811865475)) SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POLYGON((0 0,0 8,8 8,8 0,0 0),(2 2,6 2,6 6,2 6,2 2))'), 1, ST_BUFFER_STRATEGY('join_miter',60))); ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POLYGON((0 0,0 8,8 8,8 0,0 0),(2 2,6 2,6 6,2 6,2 2))'), 1, ST_BUFFER_STRATEGY('join_miter',60))) POLYGON((-1 0,-1 -1,0 -1,8 -1,9 -1,9 0,9 8,9 9,8 9,0 9,-1 9,-1 8,-1 0),(3 3,3 5,5 5,5 3,3 3)) @@ -715,10 +715,10 @@ ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POLYGON((0 0,0 10,10 10,10 0,0 0),(4 4,4 6, POLYGON((-100 0,-100 -100,0 -100,10 -100,110 -100,110 0,110 10,110 110,10 110,0 110,-100 110,-100 10,-100 0)) SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,0 5,5 5,0 0)))'), 0.5, ST_BUFFER_STRATEGY('join_miter', 1))); ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,0 5,5 5,0 0)))'), 0.5, ST_BUFFER_STRATEGY('join_miter', 1))) -POLYGON((-0.5 0,-0.1913 -0.4619,0.3536 -0.3536,5.3536 4.6464,5.4619 5.1913,5 5.5,0 5.5,-0.3536 5.3536,-0.5 5,-0.5 0)) +POLYGON((-0.5 0,-0.1913417161825449 -0.46193976625564337,0.35355339059327373 -0.35355339059327373,5.353553390593274 4.646446609406726,5.461939766255643 5.191341716182545,5 5.5,0 5.5,-0.35355339059327373 5.353553390593274,-0.5 5,-0.5 0)) SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 10,10 0,0 0,0 10)),((0 0,10 10,10 0,0 0)))'), 1, ST_BUFFER_STRATEGY('join_miter', 5))); ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 10,10 0,0 0,0 10)),((0 0,10 10,10 0,0 0)))'), 1, ST_BUFFER_STRATEGY('join_miter', 5))) -POLYGON((5 6.4142,0.7071 10.7071,-1 12.4142,-1 10,-1 0.4142,-2.4142 -1,-1 -1,0 -1,10 -1,11 -1,12.4142 -1,11 0.4142,11 10,11 12.4142,9.2929 10.7071,5 6.4142)) +POLYGON((5.000000781186548 6.4142127811865475,0.7071067811865475 10.707106781186548,-1 12.414213562373098,-1 10,-1.0000005720708107 0.4142129903022842,-2.414213562373095 -1,-1 -1,0 -1,10 -1,11 -1,12.414213562373098 -1,11.000000572070812 0.41421299030228437,11 10,11 12.414213562373096,9.292893218813452 10.707106781186548,5.000000781186548 6.4142127811865475)) SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,0 10,10 10,0 0)),((10 10,10 15,15 15,10 10)))'), 20, ST_BUFFER_STRATEGY('join_miter', 10))); ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,0 10,10 10,0 0)),((10 10,10 15,15 15,10 10)))'), 20, ST_BUFFER_STRATEGY('join_miter', 10))) POLYGON((14.1421 -14.1421,24.1421 -4.1421,29.1421 0.8579,58.2843 30,63.2843 35,15 35,10 35,-10 35,-10 30,-20 30,-20 10,-20 0,-20 -48.2843,-10 -38.2843,14.1421 -14.1421)) @@ -757,7 +757,7 @@ SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(POLYGON((0 0,0 5, 'MULTIPOLYGON(((0 0,2 2,4 0,0 0)),((3 3,3 5,5 5,5 3,3 3))))'), 10, ST_BUFFER_STRATEGY('join_miter', 10))); ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(POLYGON((0 0,0 5,5 5,5 0,0 0)),' 'MULTIPOLYGON(((0 0,2 2,4 0,0 0)),((3 3,3 5,5 5,5 3,3 3))))'), 10, ST_BUFFER_STRATEGY('join_miter', 10)) -POLYGON((-10 4.1421,-24.1421 -10,-10 -10,0 -10,4 -10,5 -10,15 -10,28.1421 -10,15 3.1421,15 5,15 15,5 15,3.1421 15,2 16.1421,0.8579 15,-7 15,-10 15,-10 5,-10 4.1421)) +POLYGON((-10 4.142134872583158,-24.142135623730944 -9.999999999999998,-10 -10,0 -10,4 -10,5 -10,15 -10,28.142135623730937 -9.999999999999998,15 3.14214370333468,15 5,15 15,5 15,3.1421312325051605 15,1.9999999999999973 16.14213562373095,0.8578698010516401 15.000005424782593,-7 15,-10 15,-10 5,-10 4.142134872583158)) SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(LINESTRING(0 0,5 5,10 10),' 'POLYGON((0 0,0 5,5 5,5 0,0 0)),' 'MULTILINESTRING((0 0,5 5,10 10)),' diff --git a/mysql-test/suite/gis/r/spatial_utility_function_distance_sphere.result b/mysql-test/suite/gis/r/spatial_utility_function_distance_sphere.result index f3257b1a0324..794e208a2b2e 100644 --- a/mysql-test/suite/gis/r/spatial_utility_function_distance_sphere.result +++ b/mysql-test/suite/gis/r/spatial_utility_function_distance_sphere.result @@ -50,7 +50,7 @@ ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(0 0)')) 0 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(180 0)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(180 0)')) -20015042.81372 +20015042.813723423 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(0 90)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(0 90)')) 10007521.40686 @@ -74,34 +74,34 @@ ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(-179 -9 10007521.40686 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(1 1)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(1 1)')) -157249.03572 +157249.0357231545 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(0.0000 -0.000)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(0.0000 -0.000)')) 0 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(1 1)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(1 1)')) -157249.03572 +157249.0357231545 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(1 -1)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(1 -1)')) -157249.03572 +157249.0357231545 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(-1 1)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(-1 1)')) -157249.03572 +157249.0357231545 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(-1 -1)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(-1 -1)')) -157249.03572 +157249.0357231545 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(90 45)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(90 45)')) -10007521.40686 +10007521.406861713 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(90 -45)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(90 -45)')) -10007521.40686 +10007521.406861713 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(-90 45)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(-90 45)')) -10007521.40686 +10007521.406861713 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(-90 -45)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(-90 -45)')) -10007521.40686 +10007521.406861713 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(180 90)'), ST_GEOMFROMTEXT('POINT(180 90)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(180 90)'), ST_GEOMFROMTEXT('POINT(180 90)')) 0 @@ -128,7 +128,7 @@ ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('MULTIPOINT(0 0 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('MULTIPOINT(180 0)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('MULTIPOINT(180 0)')) -20015042.81372 +20015042.813723423 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('MULTIPOINT(0 90)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('MULTIPOINT(0 90)')) 10007521.40686 @@ -146,31 +146,31 @@ ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('MULTIPOINT(18 0 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('MULTIPOINT(0 1)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('MULTIPOINT(0 1)')) -111194.6823 +111194.68229846345 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('MULTIPOINT(0 1,1 0,1 1)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('MULTIPOINT(0 1,1 0,1 1)')) -111194.6823 +111194.68229846345 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(180 90)'), ST_GEOMFROMTEXT('MULTIPOINT(180 -90,-179 90,-179 -90)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(180 90)'), ST_GEOMFROMTEXT('MULTIPOINT(180 -90,-179 90,-179 -90)')) 0.00000000000681 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(37 -42)'), ST_GEOMFROMTEXT('MULTIPOINT(57 32)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(37 -42)'), ST_GEOMFROMTEXT('MULTIPOINT(57 32)')) -8478959.24692 +8478959.246920772 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(-85 48)'), ST_GEOMFROMTEXT('MULTIPOINT(159 -49)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(-85 48)'), ST_GEOMFROMTEXT('MULTIPOINT(159 -49)')) -15442376.75884 +15442376.75883719 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(168 -21)'), ST_GEOMFROMTEXT('MULTIPOINT(-22 -32)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(168 -21)'), ST_GEOMFROMTEXT('MULTIPOINT(-22 -32)')) -14026307.89183 +14026307.891828652 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(-64 67)'), ST_GEOMFROMTEXT('MULTIPOINT(-103 45,155 57,-166 85)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(-64 67)'), ST_GEOMFROMTEXT('MULTIPOINT(-103 45,155 57,-166 85)')) 2724877.06508 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(-36 -41)'), ST_GEOMFROMTEXT('MULTIPOINT(-37 45,-49 23,97 -19)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(-36 -41)'), ST_GEOMFROMTEXT('MULTIPOINT(-37 45,-49 23,97 -19)')) -7242075.61618 +7242075.616184488 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(138 86)'), ST_GEOMFROMTEXT('MULTIPOINT(15 -79,-110 -76,49 31)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(138 86)'), ST_GEOMFROMTEXT('MULTIPOINT(15 -79,-110 -76,49 31)')) -6562054.98174 +6562054.981740507 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(164 -41)'), ST_GEOMFROMTEXT('MULTIPOINT(-11 2,-81 3,161 62,-119 31)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(164 -41)'), ST_GEOMFROMTEXT('MULTIPOINT(-11 2,-81 3,161 62,-119 31)')) 11240807.17994 @@ -185,7 +185,7 @@ ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(106 76)'), ST_GEOMFROMTEXT('MULTIPOINT 1623498.34154 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(-50 36)'), ST_GEOMFROMTEXT('MULTIPOINT(-32 -64,-116 -35,148 89,-75 16,-99 87,-51 -2,-113 24,93 46,168 53)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(-50 36)'), ST_GEOMFROMTEXT('MULTIPOINT(-32 -64,-116 -35,148 89,-75 16,-99 87,-51 -2,-113 24,93 46,168 53)')) -3325569.68628 +3325569.686282281 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(-139 54)'), ST_GEOMFROMTEXT('MULTIPOINT(151 -57,-74 61,10 28,170 -47,97 -45,-5 -82,121 -21,-96 -44,81 -68)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(-139 54)'), ST_GEOMFROMTEXT('MULTIPOINT(151 -57,-74 61,10 28,170 -47,97 -45,-5 -82,121 -21,-96 -44,81 -68)')) 3792274.55936 @@ -197,7 +197,7 @@ ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(0 0)'), ST_GEOMFROMTEXT('POINT(0 0 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(0 0)'), ST_GEOMFROMTEXT('POINT(180 0)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(0 0)'), ST_GEOMFROMTEXT('POINT(180 0)')) -20015042.81372 +20015042.813723423 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(0 0)'), ST_GEOMFROMTEXT('POINT(0 90)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(0 0)'), ST_GEOMFROMTEXT('POINT(0 90)')) 10007521.40686 @@ -218,34 +218,34 @@ ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-179 90,0 0,-179 -90)'), ST_GEOMF 0 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-172 -70)'), ST_GEOMFROMTEXT('POINT(45 90)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-172 -70)'), ST_GEOMFROMTEXT('POINT(45 90)')) -17791149.16775 +17791149.16775415 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-157 -67)'), ST_GEOMFROMTEXT('POINT(-92 -88)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-157 -67)'), ST_GEOMFROMTEXT('POINT(-92 -88)')) -2471277.69445 +2471277.694448198 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(156 -64,-96 57,-15 -18)'), ST_GEOMFROMTEXT('POINT(-73 -1)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(156 -64,-96 57,-15 -18)'), ST_GEOMFROMTEXT('POINT(-73 -1)')) -6603053.68396 +6603053.68396362 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-110 43,-79 -82,-32 24)'), ST_GEOMFROMTEXT('POINT(61 27)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-110 43,-79 -82,-32 24)'), ST_GEOMFROMTEXT('POINT(61 27)')) -9099422.92395 +9099422.923953956 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-85 87,-155 48,-163 -84)'), ST_GEOMFROMTEXT('POINT(-95 84)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-85 87,-155 48,-163 -84)'), ST_GEOMFROMTEXT('POINT(-95 84)')) 343552.51114 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(33 -49,174 -25,-4 -56)'), ST_GEOMFROMTEXT('POINT(48 46)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(33 -49,174 -25,-4 -56)'), ST_GEOMFROMTEXT('POINT(48 46)')) -10662878.71628 +10662878.71627671 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-36 -87,-75 20,-157 78)'), ST_GEOMFROMTEXT('POINT(-165 18)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-36 -87,-75 20,-157 78)'), ST_GEOMFROMTEXT('POINT(-165 18)')) -6685828.52361 +6685828.523608761 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(151 17,-150 -43,-165 76,87 53)'), ST_GEOMFROMTEXT('POINT(152 27)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(151 17,-150 -43,-165 76,87 53)'), ST_GEOMFROMTEXT('POINT(152 27)')) -1116698.09539 +1116698.095391192 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-159 -88,-177 -82,17 76,79 1)'), ST_GEOMFROMTEXT('POINT(35 -74)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-159 -88,-177 -82,17 76,79 1)'), ST_GEOMFROMTEXT('POINT(35 -74)')) -1995604.71861 +1995604.718606601 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-130 -20,-118 -63,-57 0)'), ST_GEOMFROMTEXT('POINT(-156 89)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-130 -20,-118 -63,-57 0)'), ST_GEOMFROMTEXT('POINT(-156 89)')) -10024915.226 +10024915.226003662 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-84 25,-52 53,125 -50,-171 51,55 -13,-4 -69)'), ST_GEOMFROMTEXT('POINT(-127 52)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-84 25,-52 53,125 -50,-171 51,55 -13,-4 -69)'), ST_GEOMFROMTEXT('POINT(-127 52)')) 3000854.92226 @@ -256,7 +256,7 @@ SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-6 -56,-73 54,20 -74,-160 ST_GEOMFROMTEXT('POINT(167 -17)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-6 -56,-73 54,20 -74,-160 72,-4 42,-120 -62,-54 -8,-85 48,159 -49,100 -75)'), ST_GEOMFROMTEXT('POINT(167 -17)')) -3630973.43292 +3630973.4329214436 ##################################################################################### # ST_DISTANCE_SPHERE(multipoint, multipoint) ##################################################################################### @@ -265,7 +265,7 @@ ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(0 0)'), ST_GEOMFROMTEXT('MULTIPOI 0 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(0 0)'), ST_GEOMFROMTEXT('MULTIPOINT(180 0)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(0 0)'), ST_GEOMFROMTEXT('MULTIPOINT(180 0)')) -20015042.81372 +20015042.813723423 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(0 0)'), ST_GEOMFROMTEXT('MULTIPOINT(0 90)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(0 0)'), ST_GEOMFROMTEXT('MULTIPOINT(0 90)')) 10007521.40686 @@ -286,7 +286,7 @@ ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-179 90,0 0)'), ST_GEOMFROMTEXT(' 10007521.40686 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(111 11,11 1)'), ST_GEOMFROMTEXT('MULTIPOINT(1 11,11 11)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(111 11,11 1)'), ST_GEOMFROMTEXT('MULTIPOINT(1 11,11 11)')) -1111946.82298 +1111946.8229846344 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(10 10,20 20,30 30)'), ST_GEOMFROMTEXT('MULTIPOINT(15 15,20 20,25 25)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(10 10,20 20,30 30)'), ST_GEOMFROMTEXT('MULTIPOINT(15 15,20 20,25 25)')) 0 @@ -295,25 +295,25 @@ ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-10 -10,-20 -20,-30 -30)'), ST_GE 0 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-150 -79)'), ST_GEOMFROMTEXT('MULTIPOINT(145 -2)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-150 -79)'), ST_GEOMFROMTEXT('MULTIPOINT(145 -2)')) -9274204.82069 +9274204.820691504 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(164 -37)'), ST_GEOMFROMTEXT('MULTIPOINT(67 59)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(164 -37)'), ST_GEOMFROMTEXT('MULTIPOINT(67 59)')) 13840477.43111 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(135 62)'), ST_GEOMFROMTEXT('MULTIPOINT(-116 -22)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(135 62)'), ST_GEOMFROMTEXT('MULTIPOINT(-116 -22)')) -13142652.16581 +13142652.165808784 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-123 85)'), ST_GEOMFROMTEXT('MULTIPOINT(-54 -40)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-123 85)'), ST_GEOMFROMTEXT('MULTIPOINT(-54 -40)')) 14239014.67884 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(152 43)'), ST_GEOMFROMTEXT('MULTIPOINT(106 76,53 20,148 -40)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(152 43)'), ST_GEOMFROMTEXT('MULTIPOINT(106 76,53 20,148 -40)')) -4260092.91225 +4260092.912246835 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-177 -88,-165 9,153 40,2 17)'), ST_GEOMFROMTEXT('MULTIPOINT(-150 -4)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-177 -88,-165 9,153 40,2 17)'), ST_GEOMFROMTEXT('MULTIPOINT(-150 -4)')) -2203222.52073 +2203222.520729071 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(154 84,-124 37,17 50)'), ST_GEOMFROMTEXT('MULTIPOINT(42 34)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(154 84,-124 37,17 50)'), ST_GEOMFROMTEXT('MULTIPOINT(42 34)')) -2703109.65924 +2703109.6592360293 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(88 -65,49 85,68 77)'), ST_GEOMFROMTEXT('MULTIPOINT(125 82,-83 -5,3 -40)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(88 -65,49 85,68 77)'), ST_GEOMFROMTEXT('MULTIPOINT(125 82,-83 -5,3 -40)')) 926947.16374 @@ -325,13 +325,13 @@ ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-140 -63,103 -42,160 -53)'), ST_G 2653984.28106 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(137 -65,-63 13,38 9)'), ST_GEOMFROMTEXT('MULTIPOINT(-166 -35,107 -18,-83 -18,91 -24)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(137 -65,-63 13,38 9)'), ST_GEOMFROMTEXT('MULTIPOINT(-166 -35,107 -18,-83 -18,91 -24)')) -4086108.70333 +4086108.7033282355 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-128 90,90 -17,-176 -37,40 -78,156 -82,37 -42)'), ST_GEOMFROMTEXT('MULTIPOINT(57 32,-3 22,24 -88)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-128 90,90 -17,-176 -37,40 -78,156 -82,37 -42)'), ST_GEOMFROMTEXT('MULTIPOINT(57 32,-3 22,24 -88)')) -1051350.22799 +1051350.22798656 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(87 -12,-25 31,-47 23,134 83,120 69,39 -41)'), ST_GEOMFROMTEXT('MULTIPOINT(-9 -4,-171 -82,140 -26)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(87 -12,-25 31,-47 23,134 83,120 69,39 -41)'), ST_GEOMFROMTEXT('MULTIPOINT(-9 -4,-171 -82,140 -26)')) -4245876.62671 +4245876.626705522 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-119 50,28 22,-122 -74)'), ST_GEOMFROMTEXT('MULTIPOINT(134 14,-32 -84,96 74,44 59,-88 73,-136 12)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-119 50,28 22,-122 -74)'), ST_GEOMFROMTEXT('MULTIPOINT(134 14,-32 -84,96 74,44 59,-88 73,-136 12)')) 1897030.29194 @@ -339,7 +339,7 @@ SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-144 73,81 61,-78 4,50 -28 ST_GEOMFROMTEXT('MULTIPOINT(-176 48,-154 -39,-140 -60,135 72,-97 28,-35 69)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-144 73,81 61,-78 4,50 -28)'), ST_GEOMFROMTEXT('MULTIPOINT(-176 48,-154 -39,-140 -60,135 72,-97 28,-35 69)')) -2505975.11098 +2505975.110979326 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-14 49)'), ST_GEOMFROMTEXT('MULTIPOINT(-160 -51,-141 72,50 -30,96 -64,-41 -59,-128 -28,0 -77,179 -78,-84 -67)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-14 49)'), @@ -349,39 +349,39 @@ SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-165 61,-43 -47,-89 40,-13 ST_GEOMFROMTEXT('MULTIPOINT(63 39,98 14,-123 79,-30 -27)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-165 61,-43 -47,-89 40,-137 -64,11 26,-8 -31,28 -77,37 -44,124 51)'), ST_GEOMFROMTEXT('MULTIPOINT(63 39,98 14,-123 79,-30 -27)')) -2181430.45408 +2181430.45407528 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(11 -38,-17 54,-104 73)'), ST_GEOMFROMTEXT('MULTIPOINT(167 -50,103 -21,-122 24,-122 80,-41 37,-175 -25,-155 48,-23 -34,-105 48)')); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(11 -38,-17 54,-104 73)'), ST_GEOMFROMTEXT('MULTIPOINT(167 -50,103 -21,-122 24,-122 80,-41 37,-175 -25,-155 48,-23 -34,-105 48)')) -898973.28964 +898973.2896405652 ##################################################################################### # ST_DISTANCE_SPHERE with different earth radius value ##################################################################################### SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(1 1)'), ST_GEOMFROMTEXT('POINT(0 0)'), 1); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(1 1)'), ST_GEOMFROMTEXT('POINT(0 0)'), 1) -0.02468 +0.024682056391766436 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(1 1)'), ST_GEOMFROMTEXT('POINT(0 0)'), 10); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(1 1)'), ST_GEOMFROMTEXT('POINT(0 0)'), 10) -0.24682 +0.24682056391766435 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(1 1)'), ST_GEOMFROMTEXT('POINT(0 0)'), 100); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(1 1)'), ST_GEOMFROMTEXT('POINT(0 0)'), 100) -2.46821 +2.468205639176644 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(1 1)'), ST_GEOMFROMTEXT('POINT(0 0)'), 2000); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(1 1)'), ST_GEOMFROMTEXT('POINT(0 0)'), 2000) -49.36411 +49.364112783532875 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(1 1)'), ST_GEOMFROMTEXT('POINT(0 0)'), 1234567); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(1 1)'), ST_GEOMFROMTEXT('POINT(0 0)'), 1234567) -30471.65231 +30471.652313413913 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(1 1)'), ST_GEOMFROMTEXT('POINT(0 0)'), 6370986); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(1 1)'), ST_GEOMFROMTEXT('POINT(0 0)'), 6370986) -157249.03572 +157249.0357231545 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(1 1)'), ST_GEOMFROMTEXT('POINT(0 0)'), 6370987); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(1 1)'), ST_GEOMFROMTEXT('POINT(0 0)'), 6370987) -157249.06041 +157249.06040521088 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(1 1)'), ST_GEOMFROMTEXT('POINT(0 0)'), 1234567890); ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(1 1)'), ST_GEOMFROMTEXT('POINT(0 0)'), 1234567890) -30471674.28044 +30471674.280444104 ##################################################################################### # Invalid function calls ##################################################################################### diff --git a/mysql-test/suite/gis/t/gis_bugs_crashes.test b/mysql-test/suite/gis/t/gis_bugs_crashes.test index b7037718b9d1..df3f91af5956 100644 --- a/mysql-test/suite/gis/t/gis_bugs_crashes.test +++ b/mysql-test/suite/gis/t/gis_bugs_crashes.test @@ -1272,7 +1272,6 @@ SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT(@star_of_elems), 1)); SET @buf = ST_BUFFER(ST_GEOMFROMTEXT(@star_of_elems), 1); ---replace_numeric_round 4 SELECT st_area(@buf); --replace_numeric_round 4 @@ -1284,7 +1283,6 @@ SELECT ST_ASTEXT(ST_CENTROID(@buf)); --replace_numeric_round 4 SELECT ST_ASTEXT(ST_CONVEXHULL(@buf)); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_ENVELOPE(@buf)); SELECT ST_DISTANCE(ST_GEOMFROMTEXT(@star_of_elems),ST_GEOMFROMTEXT(@star_top)) as result; @@ -2389,13 +2387,10 @@ SELECT ST_ASTEXT( --echo # BUG#20510359 : ST_BUFFER() RETURNS NULL INSTEAD OF AN EMPTY GEOMETRY --echo ###################################################################################################### ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POLYGON((0 0,10 0,10 10,0 10,0 0))'), -10)); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POLYGON((0 0,10 0,10 10,0 10,0 0))'), -8)); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POLYGON((0 0,10 0,10 10,0 10,0 0))'), -6)); --echo ###################################################################################################### @@ -2418,7 +2413,6 @@ SELECT ST_ASTEXT(ST_BUFFER(0x010100000002000000000000000000000000000000, 1)); --replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('LINESTRING(0 0,10 10,10 0,0 10)'), 20, ST_BUFFER_STRATEGY('end_flat'))); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTILINESTRING((0 0,10 10),(10 0,0 10))'), 50, ST_BUFFER_STRATEGY('end_flat'))); --echo ###################################################################################################### diff --git a/mysql-test/suite/gis/t/spatial_analysis_functions_buffer.test b/mysql-test/suite/gis/t/spatial_analysis_functions_buffer.test index 948f53756289..a1ebcb886c2c 100644 --- a/mysql-test/suite/gis/t/spatial_analysis_functions_buffer.test +++ b/mysql-test/suite/gis/t/spatial_analysis_functions_buffer.test @@ -77,10 +77,8 @@ SELECT count(ST_ASTEXT(g) != 'NULL') FROM gis_geometrycollection; --echo # ST_BUFFER(point, distance) --echo ##################################################################################### ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT(@star_center), 0)); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT(@star_top), 1)); --replace_numeric_round 4 @@ -89,7 +87,6 @@ SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POINT(-0 0)'), 2)); --replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POINT(2.34 -2.34)'), 3)); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POINT(1000 -1000)'), 5)); --replace_numeric_round 4 @@ -102,7 +99,6 @@ SELECT ST_ASTEXT(ST_BUFFER(g, 100)) FROM gis_geometrycollection WHERE fid=105; --echo # ST_BUFFER(multipoint, distance) --echo ##################################################################################### ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT(@star_all_points), 0)); --replace_numeric_round 4 @@ -124,10 +120,8 @@ SELECT ST_ASTEXT(ST_BUFFER(g, 20)) FROM gis_geometrycollection WHERE fid=108; --echo # ST_BUFFER(linestring, distance) --echo ##################################################################################### ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT(@star_top_to_center), 0)); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT(@star_line_horizontal), 1)); --replace_numeric_round 4 @@ -146,7 +140,6 @@ SELECT ST_ASTEXT(ST_BUFFER(g, 20)) FROM gis_geometrycollection WHERE fid=110; --echo # ST_BUFFER(multilinestring, distance) --echo ##################################################################################### ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT(@star_lines_near_vertical), 0)); --replace_numeric_round 4 @@ -171,7 +164,6 @@ SELECT ST_ASTEXT(ST_BUFFER(g, 20)) FROM gis_geometrycollection WHERE fid=114; --echo # ST_BUFFER(polygon, distance) --echo ##################################################################################### ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT(@star), 0)); --replace_numeric_round 4 @@ -214,29 +206,23 @@ SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POLYGON((0 0,0 10,10 10,10 0,0 0))') --replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POLYGON((0 0,0 10,10 10,10 0,0 0),(4 4,4 6,6 6,6 4,4 4))'), -2)); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POLYGON((0 0,0 10,10 10,10 0,0 0),(4 4,4 6,6 6,6 4,4 4))'), -3)); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POLYGON((0 0,0 10,10 10,10 0,0 0),(4 4,4 6,6 6,6 4,4 4))'), -5)); --replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POLYGON((0 0,0 10,10 10,10 0,0 0),(2 2,2 4,4 4,4 2,2 2),(6 6,6 8,8 8,8 6,6 6))'), -1)); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POLYGON((0 0,0 10,10 10,10 0,0 0),(2 2,2 4,4 4,4 2,2 2),(6 6,6 8,8 8,8 6,6 6))'), -2)); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POLYGON((0 0,0 10,10 10,10 0,0 0),(2 2,2 4,4 4,4 2,2 2),(6 6,6 8,8 8,8 6,6 6))'), -3)); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POLYGON((0 0,0 10,10 10,10 0,0 0),(2 2,2 4,4 4,4 2,2 2),(6 6,6 8,8 8,8 6,6 6))'), -5)); --echo ##################################################################################### --echo # ST_BUFFER(multipolygon, distance) --echo ##################################################################################### ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT(@star_of_elems), 0)); --replace_numeric_round 4 @@ -257,7 +243,6 @@ SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 --replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0),(0 0,0 10,10 10,10 0,0 0)))'), 5)); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTIPOLYGON(((4 4,4 6,6 6,6 4,4 4),(0 0,0 10,10 10,10 0,0 0)))'), 5)); --replace_numeric_round 4 @@ -273,66 +258,50 @@ SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0),(0 0,0 10,10 10,10 0,0 0)),' '((0 0,0 10,10 10,10 0,0 0),(4 4,4 6,6 6, 4 4)))'), 1000)); ---replace_numeric_round 4 +--replace_numeric_round 12 SELECT ST_ASTEXT(ST_BUFFER(g, 20)) FROM gis_geometrycollection WHERE fid=103; # ST_Buffer() with negative distance value ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0)))'), -2)); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0)))'), -5)); --replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0),(4 4,4 6,6 6,6 4,4 4)))'), -2)); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0),(4 4,4 6,6 6,6 4,4 4)))'), -3)); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0)),((14 14,14 16,16 16,16 14,14 14)))'), -1)); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0)),((14 14,14 16,16 16,16 14,14 14)))'), -2)); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0)),((14 14,14 16,16 16,16 14,14 14)))'), -4)); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0)),((14 14,14 16,16 16,16 14,14 14)))'), -5)); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0)),((14 14,14 16,16 16,16 14,14 14)))'), -10)); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0)),((10 10,10 20,20 20,20 10,10 10)))'), -1)); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0)),((10 10,10 20,20 20,20 10,10 10)))'), -3)); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0)),((10 10,10 20,20 20,20 10,10 10)))'), -5)); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0)),((10 10,10 20,20 20,20 10,10 10)))'), -10)); --echo ##################################################################################### --echo # ST_BUFFER(geometrycollection, distance) --echo ##################################################################################### ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT(@star_collection_elems), 0)); ---replace_numeric_round 4 +--replace_numeric_round 12 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT(@star_collection_multilinestr), 1)); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION()'), 0)); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION())'), 10)); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(GEOMETRYCOLLECTION()))'), 100)); # area check used because of the differences on various platforms @@ -353,7 +322,6 @@ SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(LINESTRING(0 0,0 --replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(LINESTRING(0 0,0 10,10 10),GEOMETRYCOLLECTION())'), 10)); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(POINT(10 10),' 'MULTIPOINT(0 0,10 10),' 'LINESTRING(1 1,2 2,3 3),' @@ -400,28 +368,20 @@ SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(GEOMETRYCOLLECTIO SELECT ST_ASTEXT(ST_BUFFER(g, 20)) FROM gis_geometrycollection WHERE fid=115; # ST_Buffer() with negative distance value ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(POLYGON((0 0,0 10,10 10,10 0,0 0)))'), -2)); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(POLYGON((0 0,0 10,10 10,10 0,0 0)))'), -5)); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0)),((10 10,10 20,20 20,20 10,10 10))))'), -2)); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0)),((10 10,10 20,20 20,20 10,10 10))))'), -10)); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(POLYGON((0 0,0 10,10 10,10 0,0 0)), POLYGON((10 10,10 20,20 20,20 10,10 10)))'), -2)); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(POLYGON((0 0,0 10,10 10,10 0,0 0)), POLYGON((10 10,10 20,20 20,20 10,10 10)))'), -5)); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(POLYGON((0 0,0 10,10 10,10 0,0 0)), MULTIPOLYGON(((10 10,10 20,20 20,20 10,10 10))))'), -2)); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(POLYGON((0 0,0 10,10 10,10 0,0 0)), MULTIPOLYGON(((10 10,10 20,20 20,20 10,10 10))))'), -10)); ############################################################################################ @@ -441,7 +401,6 @@ SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POINT(0 0)'), 2, ST_BUFFER_STRATEGY( --replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POINT(2.34 -2.34)'), 3, ST_BUFFER_STRATEGY('point_circle', 3))); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POINT(1000 -1000)'), 5, ST_BUFFER_STRATEGY('point_circle', 5))); --replace_numeric_round 4 @@ -459,13 +418,10 @@ SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTIPOINT(10 15,15 15,15 10)'), 5, --replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTIPOINT(1 -1,1000 -1000,0.0001 0.000)'), 100, ST_BUFFER_STRATEGY('point_circle', 50))); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(POINT(5 5))'), 5, ST_BUFFER_STRATEGY('point_circle', 4))); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(MULTIPOINT(5 5,10 10))'), 5, ST_BUFFER_STRATEGY('point_circle', 4))); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(POINT(5 5),MULTIPOINT(5 5))'), 5, ST_BUFFER_STRATEGY('point_circle', 4))); --replace_numeric_round 4 @@ -475,40 +431,28 @@ SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(POINT(5 5),MULTIP --echo # ST_BUFFER() with 'point_square' strategy --echo ##################################################################################### ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POINT(0 0)'), 2, ST_BUFFER_STRATEGY('point_square'))); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POINT(2.34 -2.34)'), 3, ST_BUFFER_STRATEGY('point_square'))); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POINT(1000 -1000)'), 5, ST_BUFFER_STRATEGY('point_square'))); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POINT(0 0.000001)'), 10, ST_BUFFER_STRATEGY('point_square'))); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTIPOINT(0 0,0 0,0 0,0 0)'), 5, ST_BUFFER_STRATEGY('point_square'))); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTIPOINT(10 10,20 20,30 30)'), 5, ST_BUFFER_STRATEGY('point_square'))); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTIPOINT(10 15,15 15,15 10)'), 5, ST_BUFFER_STRATEGY('point_square'))); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTIPOINT(1 -1,1000 -1000,0.0001 0.000)'), 100, ST_BUFFER_STRATEGY('point_square'))); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(POINT(5 5))'), 5, ST_BUFFER_STRATEGY('point_square'))); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(MULTIPOINT(5 5,10 10))'), 5, ST_BUFFER_STRATEGY('point_square'))); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(POINT(5 5),MULTIPOINT(5 5))'), 5, ST_BUFFER_STRATEGY('point_square'))); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(POINT(5 5),MULTIPOINT(10 10,15 15))'), 5, ST_BUFFER_STRATEGY('point_square'))); --echo ##################################################################################### @@ -539,7 +483,6 @@ SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTILINESTRING((0 10,10 0),(10 0,0 --replace_numeric_round 1 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTILINESTRING((1 -1,1000 -1000,0.0001 0.000),(2 2,4 -9.002))'), 1000, ST_BUFFER_STRATEGY('end_round', 50))); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(LINESTRING(0 0,5 5,10 10))'), 10, ST_BUFFER_STRATEGY('end_round', 4))); --replace_numeric_round 4 @@ -583,7 +526,6 @@ SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTILINESTRING((0 0,-0.00 0),(0.0 0 --replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTILINESTRING((0 0,0 5,5 5,5 0,0 0))'), 50, ST_BUFFER_STRATEGY('end_flat'))); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTILINESTRING((0 10,10 0),(10 0,0 0),(0 0,10 10))'), 100, ST_BUFFER_STRATEGY('end_flat'))); --replace_numeric_round 4 @@ -592,7 +534,6 @@ SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTILINESTRING((1 -1,1000 -1000,0.0 --replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(LINESTRING(0 0,5 5,10 10))'), 10, ST_BUFFER_STRATEGY('end_flat'))); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(MULTILINESTRING((0 0,5 0),(0 0,0 5)))'), 10, ST_BUFFER_STRATEGY('end_flat'))); --replace_numeric_round 4 @@ -633,7 +574,6 @@ SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTILINESTRING((0 10,10 0),(10 0,0 --replace_numeric_round 2 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTILINESTRING((1 -1,1000 -1000,0.0001 0.000),(2 2,4 -9.002))'), 1000, ST_BUFFER_STRATEGY('join_round', 50))); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POLYGON((0 0,0 5,5 5,0 0))'), 1, ST_BUFFER_STRATEGY('join_round', 1))); --replace_numeric_round 4 @@ -673,7 +613,6 @@ SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(LINESTRING(0 0,5 --replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(MULTILINESTRING((0 0,5 0),(0 0,0 5)))'), 10, ST_BUFFER_STRATEGY('join_round', 10))); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(POLYGON((0 0,0 5,5 5,5 0,0 0)))'), 10, ST_BUFFER_STRATEGY('join_round', 4))); --replace_numeric_round 4 @@ -727,28 +666,20 @@ SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTILINESTRING((0 10,10 0),(10 0,0 --replace_numeric_round 1 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTILINESTRING((1 -1,1000 -1000,0.0001 0.000),(2 2,4 -9.002))'), 1000, ST_BUFFER_STRATEGY('join_miter', 50))); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POLYGON((0 0,0 5,5 5,0 0))'), 1, ST_BUFFER_STRATEGY('join_miter', 1))); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POLYGON((0 0,0 10,10 10,10 0,0 0))'), 5, ST_BUFFER_STRATEGY('join_miter', 5))); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POLYGON((10 10,10 20,20 20,20 10,10 10))'), 10, ST_BUFFER_STRATEGY('join_miter', 10))); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POLYGON((10 0,0 10,-10 0,0 -10,10 0 ))'), 10, ST_BUFFER_STRATEGY('join_miter', 50))); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POLYGON((0 0,0 8,8 8,8 0,0 0),(2 2,6 2,6 6,2 6,2 2))'), 1, ST_BUFFER_STRATEGY('join_miter',60))); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('POLYGON((0 0,0 10,10 10,10 0,0 0),(4 4,4 6,6 6,6 4,4 4))'), 100, ST_BUFFER_STRATEGY('join_miter', 60))); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,0 5,5 5,0 0)))'), 0.5, ST_BUFFER_STRATEGY('join_miter', 1))); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 10,10 0,0 0,0 10)),((0 0,10 10,10 0,0 0)))'), 1, ST_BUFFER_STRATEGY('join_miter', 5))); --replace_numeric_round 4 @@ -757,7 +688,6 @@ SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,0 10,10 10,0 0)), --replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0)),((4 4,4 6,6 6,6 4, 4 4)))'), 4, ST_BUFFER_STRATEGY('join_miter', 50))); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0),(4 4,4 6,6 6,6 4,4 4)))'), 4, ST_BUFFER_STRATEGY('join_miter', 60))); --replace_numeric_round 4 @@ -766,7 +696,6 @@ SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(LINESTRING(0 0,5 --replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(MULTILINESTRING((0 0,5 0),(0 0,0 5)))'), 10, ST_BUFFER_STRATEGY('join_miter', 10))); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(POLYGON((0 0,0 5,5 5,5 0,0 0)))'), 10, ST_BUFFER_STRATEGY('join_miter', 4))); --replace_numeric_round 4 @@ -782,7 +711,6 @@ SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(LINESTRING(0 0,5 'MULTILINESTRING((0 0,5 5,10 10)),' 'MULTILINESTRING((0 0,10 0),(0 0,-10 0)))'), 10, ST_BUFFER_STRATEGY('join_miter', 50))); ---replace_numeric_round 4 SELECT ST_ASTEXT(ST_BUFFER(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(POLYGON((0 0,0 5,5 5,5 0,0 0)),' 'MULTIPOLYGON(((0 0,2 2,4 0,0 0)),((3 3,3 5,5 5,5 3,3 3))))'), 10, ST_BUFFER_STRATEGY('join_miter', 10))); diff --git a/mysql-test/suite/gis/t/spatial_utility_function_distance_sphere.test b/mysql-test/suite/gis/t/spatial_utility_function_distance_sphere.test index e7a29c8fa36e..051054efa8df 100644 --- a/mysql-test/suite/gis/t/spatial_utility_function_distance_sphere.test +++ b/mysql-test/suite/gis/t/spatial_utility_function_distance_sphere.test @@ -74,7 +74,6 @@ SELECT count(ST_ASTEXT(g) != 'NULL') FROM gis_geometrycollection; SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(0 0)')); ---replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(180 0)')); --replace_numeric_round 5 @@ -98,33 +97,24 @@ SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT( --replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(-179 -90)')); ---replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(1 1)')); SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(0.0000 -0.000)')); ---replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(1 1)')); ---replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(1 -1)')); ---replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(-1 1)')); ---replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(-1 -1)')); ---replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(90 45)')); ---replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(90 -45)')); ---replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(-90 45)')); ---replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(-90 -45)')); SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(180 90)'), ST_GEOMFROMTEXT('POINT(180 90)')); @@ -147,7 +137,6 @@ SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(-179.9 -90)'), ST_GEOMFROMTEXT( SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('MULTIPOINT(0 0)')); ---replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('MULTIPOINT(180 0)')); --replace_numeric_round 5 @@ -162,31 +151,24 @@ SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('MULTIP SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('MULTIPOINT(180 90,0 0,-179 -90)')); ---replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('MULTIPOINT(0 1)')); ---replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('MULTIPOINT(0 1,1 0,1 1)')); --replace_numeric_round 14 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(180 90)'), ST_GEOMFROMTEXT('MULTIPOINT(180 -90,-179 90,-179 -90)')); ---replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(37 -42)'), ST_GEOMFROMTEXT('MULTIPOINT(57 32)')); ---replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(-85 48)'), ST_GEOMFROMTEXT('MULTIPOINT(159 -49)')); ---replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(168 -21)'), ST_GEOMFROMTEXT('MULTIPOINT(-22 -32)')); --replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(-64 67)'), ST_GEOMFROMTEXT('MULTIPOINT(-103 45,155 57,-166 85)')); ---replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(-36 -41)'), ST_GEOMFROMTEXT('MULTIPOINT(-37 45,-49 23,97 -19)')); ---replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(138 86)'), ST_GEOMFROMTEXT('MULTIPOINT(15 -79,-110 -76,49 31)')); --replace_numeric_round 5 @@ -201,7 +183,6 @@ SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(168 -15)'), ST_GEOMFROMTEXT('MU --replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(106 76)'), ST_GEOMFROMTEXT('MULTIPOINT(53 20,148 -40,-61 -90,170 -37,-64 -82,-167 85)')); ---replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(-50 36)'), ST_GEOMFROMTEXT('MULTIPOINT(-32 -64,-116 -35,148 89,-75 16,-99 87,-51 -2,-113 24,93 46,168 53)')); --replace_numeric_round 5 @@ -213,7 +194,6 @@ SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(-139 54)'), ST_GEOMFROMTEXT('MU SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(0 0)'), ST_GEOMFROMTEXT('POINT(0 0)')); ---replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(0 0)'), ST_GEOMFROMTEXT('POINT(180 0)')); --replace_numeric_round 5 @@ -231,34 +211,25 @@ SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-179 90,0 0,-179 -90)'), S SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-179 90,0 0,-179 -90)'), ST_GEOMFROMTEXT('POINT(-179 -90)')); ---replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-172 -70)'), ST_GEOMFROMTEXT('POINT(45 90)')); ---replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-157 -67)'), ST_GEOMFROMTEXT('POINT(-92 -88)')); ---replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(156 -64,-96 57,-15 -18)'), ST_GEOMFROMTEXT('POINT(-73 -1)')); ---replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-110 43,-79 -82,-32 24)'), ST_GEOMFROMTEXT('POINT(61 27)')); --replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-85 87,-155 48,-163 -84)'), ST_GEOMFROMTEXT('POINT(-95 84)')); ---replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(33 -49,174 -25,-4 -56)'), ST_GEOMFROMTEXT('POINT(48 46)')); ---replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-36 -87,-75 20,-157 78)'), ST_GEOMFROMTEXT('POINT(-165 18)')); ---replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(151 17,-150 -43,-165 76,87 53)'), ST_GEOMFROMTEXT('POINT(152 27)')); ---replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-159 -88,-177 -82,17 76,79 1)'), ST_GEOMFROMTEXT('POINT(35 -74)')); ---replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-130 -20,-118 -63,-57 0)'), ST_GEOMFROMTEXT('POINT(-156 89)')); --replace_numeric_round 5 @@ -267,7 +238,6 @@ SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-84 25,-52 53,125 -50,-171 --replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(56 -45,158 84,112 2,85 21,88 89,-151 33,-158 40)'), ST_GEOMFROMTEXT('POINT(-172 87)')); ---replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-6 -56,-73 54,20 -74,-160 72,-4 42,-120 -62,-54 -8,-85 48,159 -49,100 -75)'), ST_GEOMFROMTEXT('POINT(167 -17)')); @@ -277,7 +247,6 @@ SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-6 -56,-73 54,20 -74,-160 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(0 0)'), ST_GEOMFROMTEXT('MULTIPOINT(0 0)')); ---replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(0 0)'), ST_GEOMFROMTEXT('MULTIPOINT(180 0)')); --replace_numeric_round 5 @@ -295,32 +264,26 @@ SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(180 0,0 0)'), ST_GEOMFROMT --replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-179 90,0 0)'), ST_GEOMFROMTEXT('MULTIPOINT(-179 0,0 -90)')); ---replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(111 11,11 1)'), ST_GEOMFROMTEXT('MULTIPOINT(1 11,11 11)')); SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(10 10,20 20,30 30)'), ST_GEOMFROMTEXT('MULTIPOINT(15 15,20 20,25 25)')); SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-10 -10,-20 -20,-30 -30)'), ST_GEOMFROMTEXT('MULTIPOINT(180 0,-30 -30,180 -90)')); ---replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-150 -79)'), ST_GEOMFROMTEXT('MULTIPOINT(145 -2)')); --replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(164 -37)'), ST_GEOMFROMTEXT('MULTIPOINT(67 59)')); ---replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(135 62)'), ST_GEOMFROMTEXT('MULTIPOINT(-116 -22)')); --replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-123 85)'), ST_GEOMFROMTEXT('MULTIPOINT(-54 -40)')); ---replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(152 43)'), ST_GEOMFROMTEXT('MULTIPOINT(106 76,53 20,148 -40)')); ---replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-177 -88,-165 9,153 40,2 17)'), ST_GEOMFROMTEXT('MULTIPOINT(-150 -4)')); ---replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(154 84,-124 37,17 50)'), ST_GEOMFROMTEXT('MULTIPOINT(42 34)')); --replace_numeric_round 5 @@ -332,19 +295,15 @@ SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(174 59,91 24,26 28)'), ST_ --replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-140 -63,103 -42,160 -53)'), ST_GEOMFROMTEXT('MULTIPOINT(-78 -80,-133 -24,73 -15)')); ---replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(137 -65,-63 13,38 9)'), ST_GEOMFROMTEXT('MULTIPOINT(-166 -35,107 -18,-83 -18,91 -24)')); ---replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-128 90,90 -17,-176 -37,40 -78,156 -82,37 -42)'), ST_GEOMFROMTEXT('MULTIPOINT(57 32,-3 22,24 -88)')); ---replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(87 -12,-25 31,-47 23,134 83,120 69,39 -41)'), ST_GEOMFROMTEXT('MULTIPOINT(-9 -4,-171 -82,140 -26)')); --replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-119 50,28 22,-122 -74)'), ST_GEOMFROMTEXT('MULTIPOINT(134 14,-32 -84,96 74,44 59,-88 73,-136 12)')); ---replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-144 73,81 61,-78 4,50 -28)'), ST_GEOMFROMTEXT('MULTIPOINT(-176 48,-154 -39,-140 -60,135 72,-97 28,-35 69)')); @@ -352,11 +311,9 @@ SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-144 73,81 61,-78 4,50 -28 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-14 49)'), ST_GEOMFROMTEXT('MULTIPOINT(-160 -51,-141 72,50 -30,96 -64,-41 -59,-128 -28,0 -77,179 -78,-84 -67)')); ---replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(-165 61,-43 -47,-89 40,-137 -64,11 26,-8 -31,28 -77,37 -44,124 51)'), ST_GEOMFROMTEXT('MULTIPOINT(63 39,98 14,-123 79,-30 -27)')); ---replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(11 -38,-17 54,-104 73)'), ST_GEOMFROMTEXT('MULTIPOINT(167 -50,103 -21,-122 24,-122 80,-41 37,-175 -25,-155 48,-23 -34,-105 48)')); @@ -364,28 +321,20 @@ SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(11 -38,-17 54,-104 73)'), --echo # ST_DISTANCE_SPHERE with different earth radius value --echo ##################################################################################### ---replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(1 1)'), ST_GEOMFROMTEXT('POINT(0 0)'), 1); ---replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(1 1)'), ST_GEOMFROMTEXT('POINT(0 0)'), 10); ---replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(1 1)'), ST_GEOMFROMTEXT('POINT(0 0)'), 100); ---replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(1 1)'), ST_GEOMFROMTEXT('POINT(0 0)'), 2000); ---replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(1 1)'), ST_GEOMFROMTEXT('POINT(0 0)'), 1234567); ---replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(1 1)'), ST_GEOMFROMTEXT('POINT(0 0)'), 6370986); ---replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(1 1)'), ST_GEOMFROMTEXT('POINT(0 0)'), 6370987); ---replace_numeric_round 5 SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(1 1)'), ST_GEOMFROMTEXT('POINT(0 0)'), 1234567890); --echo ##################################################################################### diff --git a/mysql-test/suite/innodb_gis/r/precise.result b/mysql-test/suite/innodb_gis/r/precise.result index cb3c06528fe0..2715458161bc 100644 --- a/mysql-test/suite/innodb_gis/r/precise.result +++ b/mysql-test/suite/innodb_gis/r/precise.result @@ -121,10 +121,10 @@ ST_DISTANCE(ST_geomfromtext('linestring(0 0, 3 6, 6 3, 0 0)'), ST_geomfromtext(' 0.8944271909999159 select ST_astext(ST_Intersection(ST_GeomFromText('POLYGON((0 0, 50 45, 40 50, 0 0))'), ST_GeomFromText('POLYGON((50 5, 55 10, 0 45, 50 5))'))); ST_astext(ST_Intersection(ST_GeomFromText('POLYGON((0 0, 50 45, 40 50, 0 0))'), ST_GeomFromText('POLYGON((50 5, 55 10, 0 45, 50 5))'))) -POLYGON((21.951219512195124 27.4390243902439,26.470588235294116 23.823529411764707,29.28994082840237 26.36094674556213,23.855421686746986 29.819277108433734,21.951219512195124 27.4390243902439)) +POLYGON((21.951219512195124 27.4390243902439,26.470588235294116 23.823529411764707,29.28994082840237 26.36094674556213,23.85542168674699 29.819277108433734,21.951219512195124 27.4390243902439)) select ST_astext(ST_Intersection(ST_GeomFromText('LINESTRING(0 0, 50 45, 40 50, 0 0)'), ST_GeomFromText('LINESTRING(50 5, 55 10, 0 45, 50 5)'))); ST_astext(ST_Intersection(ST_GeomFromText('LINESTRING(0 0, 50 45, 40 50, 0 0)'), ST_GeomFromText('LINESTRING(50 5, 55 10, 0 45, 50 5)'))) -MULTIPOINT((21.951219512195124 27.4390243902439),(23.855421686746986 29.819277108433734),(26.470588235294116 23.823529411764707),(29.28994082840237 26.36094674556213)) +MULTIPOINT((21.951219512195124 27.4390243902439),(23.85542168674699 29.819277108433734),(26.470588235294116 23.823529411764707),(29.28994082840237 26.36094674556213)) select ST_astext(ST_Intersection(ST_GeomFromText('LINESTRING(0 0, 50 45, 40 50)'), ST_GeomFromText('LINESTRING(50 5, 55 10, 0 45)'))); ST_astext(ST_Intersection(ST_GeomFromText('LINESTRING(0 0, 50 45, 40 50)'), ST_GeomFromText('LINESTRING(50 5, 55 10, 0 45)'))) POINT(29.28994082840237 26.36094674556213) @@ -151,7 +151,7 @@ ST_astext(ST_UNION(ST_GeomFromText('POLYGON((0 0, 50 45, 40 50, 0 0))'), ST_Geom GEOMETRYCOLLECTION(POLYGON((0 0,50 45,40 50,0 0)),MULTILINESTRING((-10 -10,0 0),(46.666666666666664 46.666666666666664,200 200,199 201,45.333333333333336 47.333333333333336),(8 10,-11 -9))) select ST_astext(ST_buffer(ST_geometryfromtext('point(1 1)'), 1)); ST_astext(ST_buffer(ST_geometryfromtext('point(1 1)'), 1)) -POLYGON((2 1,1.9808 1.1951,1.9239 1.3827,1.8315 1.5556,1.7071 1.7071,1.5556 1.8315,1.3827 1.9239,1.1951 1.9808,1 2,0.8049 1.9808,0.6173 1.9239,0.4444 1.8315,0.2929 1.7071,0.1685 1.5556,0.0761 1.3827,0.0192 1.1951,0 1,0.0192 0.8049,0.0761 0.6173,0.1685 0.4444,0.2929 0.2929,0.4444 0.1685,0.6173 0.0761,0.8049 0.0192,1 0,1.1951 0.0192,1.3827 0.0761,1.5556 0.1685,1.7071 0.2929,1.8315 0.4444,1.9239 0.6173,1.9808 0.8049,2 1)) +POLYGON((2 1,1.98078528040323 1.19509032201612,1.92387953251129 1.38268343236509,1.83146961230255 1.5555702330196,1.70710678118655 1.70710678118655,1.5555702330196 1.83146961230254,1.38268343236509 1.92387953251129,1.19509032201613 1.98078528040323,1 2,0.80490967798387 1.98078528040323,0.61731656763491 1.92387953251129,0.4444297669804 1.83146961230255,0.29289321881345 1.70710678118655,0.16853038769746 1.5555702330196,0.07612046748871 1.38268343236509,0.01921471959677 1.19509032201613,0 1,0.01921471959677 0.80490967798387,0.07612046748871 0.61731656763491,0.16853038769745 0.4444297669804,0.29289321881345 0.29289321881345,0.4444297669804 0.16853038769745,0.61731656763491 0.07612046748871,0.80490967798387 0.01921471959677,1 0,1.19509032201613 0.01921471959677,1.38268343236509 0.07612046748871,1.5555702330196 0.16853038769745,1.70710678118655 0.29289321881345,1.83146961230255 0.4444297669804,1.92387953251129 0.61731656763491,1.98078528040323 0.80490967798387,2 1)) create table t1(geom geometrycollection)engine=innodb; insert into t1 values (ST_geomfromtext('POLYGON((0 0, 10 10, 0 8, 0 0))')); ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field diff --git a/mysql-test/suite/innodb_gis/t/precise.test b/mysql-test/suite/innodb_gis/t/precise.test index 9a86ed659d8b..e05b50992dbe 100644 --- a/mysql-test/suite/innodb_gis/t/precise.test +++ b/mysql-test/suite/innodb_gis/t/precise.test @@ -64,9 +64,7 @@ select ST_DISTANCE(ST_geomfromtext('linestring(0 0, 3 6, 6 3, 0 0)'), ST_geomfro # Operations tests ---replace_result 23.85542168674699 23.855421686746986 select ST_astext(ST_Intersection(ST_GeomFromText('POLYGON((0 0, 50 45, 40 50, 0 0))'), ST_GeomFromText('POLYGON((50 5, 55 10, 0 45, 50 5))'))); ---replace_result 23.85542168674699 23.855421686746986 select ST_astext(ST_Intersection(ST_GeomFromText('LINESTRING(0 0, 50 45, 40 50, 0 0)'), ST_GeomFromText('LINESTRING(50 5, 55 10, 0 45, 50 5)'))); select ST_astext(ST_Intersection(ST_GeomFromText('LINESTRING(0 0, 50 45, 40 50)'), ST_GeomFromText('LINESTRING(50 5, 55 10, 0 45)'))); select ST_astext(ST_Intersection(ST_GeomFromText('POLYGON((0 0, 50 45, 40 50, 0 0))'), ST_GeomFromText('POINT(20 20)'))); @@ -80,14 +78,13 @@ select ST_astext(ST_symdifference(ST_geomfromtext('polygon((0 0, 1 0, 0 1, 0 0)) select ST_astext(ST_UNION(ST_GeomFromText('POLYGON((0 0, 50 45, 40 50, 0 0))'), ST_GeomFromText('LINESTRING(-10 -10, 200 200, 199 201, -11 -9)'))); # Buffer() tests ---replace_numeric_round 4 +--replace_numeric_round 14 select ST_astext(ST_buffer(ST_geometryfromtext('point(1 1)'), 1)); create table t1(geom geometrycollection)engine=innodb; --error ER_CANT_CREATE_GEOMETRY_OBJECT insert into t1 values (ST_geomfromtext('POLYGON((0 0, 10 10, 0 8, 0 0))')); --error ER_CANT_CREATE_GEOMETRY_OBJECT insert into t1 values (ST_geomfromtext('POLYGON((1 1, 10 10, 0 8, 1 1))')); ---replace_numeric_round 4 select ST_astext(geom), ST_area(geom),ST_area(ST_buffer(geom,2)) from t1; select ST_NUMPOINTS(ST_EXTERIORRING(ST_buffer(geom,2))) from t1; diff --git a/mysql-test/t/gis-precise.test b/mysql-test/t/gis-precise.test index 730acaf32e44..38f60c3e7fca 100644 --- a/mysql-test/t/gis-precise.test +++ b/mysql-test/t/gis-precise.test @@ -69,9 +69,7 @@ select ST_DISTANCE(ST_GeomFromText('linestring(0 0, 3 6, 6 3, 0 0)'), ST_GeomFro # Operations tests ---replace_result 23.85542168674699 23.855421686746986 select ST_astext(ST_Intersection(ST_GeomFromText('POLYGON((0 0, 50 45, 40 50, 0 0))'), ST_GeomFromText('POLYGON((50 5, 55 10, 0 45, 50 5))'))); ---replace_result 23.85542168674699 23.855421686746986 select ST_astext(ST_Intersection(ST_GeomFromText('LINESTRING(0 0, 50 45, 40 50, 0 0)'), ST_GeomFromText('LINESTRING(50 5, 55 10, 0 45, 50 5)'))); select ST_astext(ST_Intersection(ST_GeomFromText('LINESTRING(0 0, 50 45, 40 50)'), ST_GeomFromText('LINESTRING(50 5, 55 10, 0 45)'))); select ST_astext(ST_Intersection(ST_GeomFromText('POLYGON((0 0, 50 45, 40 50, 0 0))'), ST_GeomFromText('POINT(20 20)'))); @@ -92,7 +90,6 @@ create table t1(geom geometrycollection); insert into t1 values (ST_GeomFromText('POLYGON((0 0, 10 10, 0 8, 0 0))')); --error ER_CANT_CREATE_GEOMETRY_OBJECT insert into t1 values (ST_GeomFromText('POLYGON((1 1, 10 10, 0 8, 1 1))')); ---replace_numeric_round 5 select ST_astext(geom), ST_area(geom),ST_area(ST_buffer(geom,2)) from t1; select ST_NUMPOINTS(ST_EXTERIORRING(ST_buffer(geom,2))) from t1; @@ -679,7 +676,6 @@ SELECT MBRTOUCHES(ST_GEOMFROMTEXT('MULTIPOINT(5 0,10 0)'),ST_GEOMFROMTEXT('MULTI --error ER_BOOST_GEOMETRY_OVERLAY_INVALID_INPUT_EXCEPTION set @centroid_point = ST_CENTROID(ST_UNION(ST_UNION(ST_GEOMFROMTEXT('MULTILINESTRING((-556 966,-721 -210),(-202 390,-954 804,682 504,-394 -254,832 371,907 -369,827 126,-567 -337,-304 -555,-957 -483,-660 792),(-965 -940,814 -804,-477 -909,-128 57,-819 880,761 497,-559 40,-431 427,179 -291,-707 315,137 -781,-416 -371,-5 -156),(-600 -570,-481 -191,991 -361,768 888,-647 566,795 -861,-82 -575,-593 539))'), ST_GEOMFROMTEXT('MULTIPOLYGON(((805 69,249 708,147 455,546 -672,-218 843,458 24,-630 -420,-83 -69, 805 69)),((196 -219,-201 663,-867 521,-910 -315,-749 801,-402 820,-167 -817,-526 -163,744 -988,-588 -370,573 695,-597 513,-246 439, 196 -219)),((32 -903,189 -871,-778 -741,784 340,403 -555,607 -540,-513 -982,700 -124,344 732,714 151,-812 -252,-440 -895,-426 231,-819 -357, 32 -903)),((-395 830,454 -143,788 -279,618 -843,-490 -507,-224 17, -395 830)))')), ST_INTERSECTION(ST_UNION(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(POINT(-169 -570),MULTIPOINT(384 290,-601 123,408 86,-616 -300,160 -474,-979 -4,-63 -824,-689 -765,-219 802,-54 -93,191 -982,-723 -449),MULTILINESTRING((683 4,864 -634,548 -891,727 -691,-570 32,-334 -438,127 -317,241 -12,-807 947,-987 693,-345 -867,854 -106)),MULTIPOINT(384 290,-601 123,408 86,-616 -300,160 -474,-979 -4,-63 -824,-689 -765,-219 802,-54 -93,191 -982,-723 -449),MULTIPOLYGON(((266 51,851 523,-781 366,-607 -581, 266 51)),((416 -450,-973 880,103 226,-896 -857,-369 761, 416 -450)),((168 171,26 -99,-606 -490,-174 -138,-325 -218,-833 -652,-255 -445,-882 -762,-202 -560, 168 171)),((-423 -216,-531 -190,-147 821,362 441,645 -128,-997 708,134 -426,714 -9,147 842,-887 -870,688 -330,689 17,-314 -262,401 -112,-606 761, -423 -216)),((-582 -373,-360 -84,-727 -171,412 -660,750 -846,-464 718,163 -11,489 -659,586 -324,-741 -198,144 -165,644 -80,930 -487,-504 -205, -582 -373))),MULTIPOLYGON(((266 51,851 523,-781 366,-607 -581, 266 51)),((416 -450,-973 880,103 226,-896 -857,-369 761, 416 -450)),((168 171,26 -99,-606 -490,-174 -138,-325 -218,-833 -652,-255 -445,-882 -762,-202 -560, 168 171)),((-423 -216,-531 -190,-147 821,362 441,645 -128,-997 708,134 -426,714 -9,147 842,-887 -870,688 -330,689 17,-314 -262,401 -112,-606 761, -423 -216)),((-582 -373,-360 -84,-727 -171,412 -660,750 -846,-464 718,163 -11,489 -659,586 -324,-741 -198,144 -165,644 -80,930 -487,-504 -205, -582 -373))),GEOMETRYCOLLECTION(),MULTIPOINT(384 290,-601 123,408 86,-616 -300,160 -474,-979 -4,-63 -824,-689 -765,-219 802,-54 -93,191 -982,-723 -449),MULTILINESTRING((683 4,864 -634,548 -891,727 -691,-570 32,-334 -438,127 -317,241 -12,-807 947,-987 693,-345 -867,854 -106)))'), ST_GEOMFROMTEXT('MULTIPOINT(157 69,-725 -189,-176 -41,676 375,33 -672,-76 47)')), ST_UNION(ST_ENVELOPE(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(LINESTRING(-896 100,-793 810,243 -525,650 -373,599 170,-554 -890),POINT(945 -828),POINT(945 -828),LINESTRING(-896 100,-793 810,243 -525,650 -373,599 170,-554 -890),POINT(945 -828),MULTIPOINT(-47 307,-768 -425,-3 167,-170 30,-784 721,951 146,407 790,37 850,-466 738),GEOMETRYCOLLECTION(),MULTIPOINT(-47 307,-768 -425,-3 167,-170 30,-784 721,951 146,407 790,37 850,-466 738),MULTIPOLYGON(((104 113,688 423,-859 602,272 978, 104 113)),((981 -394,189 -400,649 -325,-977 371,30 859,590 318,329 -894,-51 262,197 952,-846 -139,-920 399, 981 -394)),((-236 -759,834 757,857 747,437 -146,194 913,316 862,976 -491,-745 933,610 687,-149 -164,-803 -565,451 -275, -236 -759)),((572 96,-160 -607,529 930,-544 -132,458 294, 572 96))))')), ST_CENTROID(ST_GEOMFROMTEXT('POINT(-939 -921)')))))); ---replace_regex /-111\.[0-9]+/-111/ /-57\.[0-9]+/-57/ SELECT ST_AsText(@centroid_point) as centroid; SELECT MBRWITHIN(@centroid_point, ST_INTERSECTION(ST_GEOMFROMTEXT('MULTILINESTRING((541 -927,-414 316,-429 -444,212 260,-125 104,445 563,-713 -975,-976 514),(-830 882,-377 914,-915 919,-535 -23,-508 979),(806 347,-87 220,226 -22,-12 468,707 598,83 951,-592 701,833 964,270 -932,743 -514,231 469,-575 -122,-99 -245,416 465,801 -587))'), ST_GEOMFROMTEXT('LINESTRING(-96 -182,-373 75,697 687,-881 -463,-557 -959,-493 810)'))) as result; @@ -908,7 +904,6 @@ SELECT ST_AsText(ST_Union(ST_GeomFromText('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION set @centroid_point = ST_CENTROID(ST_UNION(ST_UNION(ST_GEOMFROMTEXT('MULTILINESTRING((-556 966,-721 -210),(-202 390,-954 804,682 504,-394 -254,832 371,907 -369,827 126,-567 -337,-304 -555,-957 -483,-660 792),(-965 -940,814 -804,-477 -909,-128 57,-819 880,761 497,-559 40,-431 427,179 -291,-707 315,137 -781,-416 -371,-5 -156),(-600 -570,-481 -191,991 -361,768 888,-647 566,795 -861,-82 -575,-593 539))'), ST_GEOMFROMTEXT('MULTIPOLYGON(((805 69,249 708,147 455,546 -672,-218 843,458 24,-630 -420,-83 -69, 805 69)),((196 -219,-201 663,-867 521,-910 -315,-749 801,-402 820,-167 -817,-526 -163,744 -988,-588 -370,573 695,-597 513,-246 439, 196 -219)),((32 -903,189 -871,-778 -741,784 340,403 -555,607 -540,-513 -982,700 -124,344 732,714 151,-812 -252,-440 -895,-426 231,-819 -357, 32 -903)),((-395 830,454 -143,788 -279,618 -843,-490 -507,-224 17, -395 830)))')), ST_INTERSECTION(ST_UNION(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(POINT(-169 -570),MULTIPOINT(384 290,-601 123,408 86,-616 -300,160 -474,-979 -4,-63 -824,-689 -765,-219 802,-54 -93,191 -982,-723 -449),MULTILINESTRING((683 4,864 -634,548 -891,727 -691,-570 32,-334 -438,127 -317,241 -12,-807 947,-987 693,-345 -867,854 -106)),MULTIPOINT(384 290,-601 123,408 86,-616 -300,160 -474,-979 -4,-63 -824,-689 -765,-219 802,-54 -93,191 -982,-723 -449),MULTIPOLYGON(((266 51,851 523,-781 366,-607 -581, 266 51)),((416 -450,-973 880,103 226,-896 -857,-369 761, 416 -450)),((168 171,26 -99,-606 -490,-174 -138,-325 -218,-833 -652,-255 -445,-882 -762,-202 -560, 168 171)),((-423 -216,-531 -190,-147 821,362 441,645 -128,-997 708,134 -426,714 -9,147 842,-887 -870,688 -330,689 17,-314 -262,401 -112,-606 761, -423 -216)),((-582 -373,-360 -84,-727 -171,412 -660,750 -846,-464 718,163 -11,489 -659,586 -324,-741 -198,144 -165,644 -80,930 -487,-504 -205, -582 -373))),MULTIPOLYGON(((266 51,851 523,-781 366,-607 -581, 266 51)),((416 -450,-973 880,103 226,-896 -857,-369 761, 416 -450)),((168 171,26 -99,-606 -490,-174 -138,-325 -218,-833 -652,-255 -445,-882 -762,-202 -560, 168 171)),((-423 -216,-531 -190,-147 821,362 441,645 -128,-997 708,134 -426,714 -9,147 842,-887 -870,688 -330,689 17,-314 -262,401 -112,-606 761, -423 -216)),((-582 -373,-360 -84,-727 -171,412 -660,750 -846,-464 718,163 -11,489 -659,586 -324,-741 -198,144 -165,644 -80,930 -487,-504 -205, -582 -373))),GEOMETRYCOLLECTION(),MULTIPOINT(384 290,-601 123,408 86,-616 -300,160 -474,-979 -4,-63 -824,-689 -765,-219 802,-54 -93,191 -982,-723 -449),MULTILINESTRING((683 4,864 -634,548 -891,727 -691,-570 32,-334 -438,127 -317,241 -12,-807 947,-987 693,-345 -867,854 -106)))'), ST_GEOMFROMTEXT('MULTIPOINT(157 69,-725 -189,-176 -41,676 375,33 -672,-76 47)')), ST_UNION(ST_ENVELOPE(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(LINESTRING(-896 100,-793 810,243 -525,650 -373,599 170,-554 -890),POINT(945 -828),POINT(945 -828),LINESTRING(-896 100,-793 810,243 -525,650 -373,599 170,-554 -890),POINT(945 -828),MULTIPOINT(-47 307,-768 -425,-3 167,-170 30,-784 721,951 146,407 790,37 850,-466 738),GEOMETRYCOLLECTION(),MULTIPOINT(-47 307,-768 -425,-3 167,-170 30,-784 721,951 146,407 790,37 850,-466 738),MULTIPOLYGON(((104 113,688 423,-859 602,272 978, 104 113)),((981 -394,189 -400,649 -325,-977 371,30 859,590 318,329 -894,-51 262,197 952,-846 -139,-920 399, 981 -394)),((-236 -759,834 757,857 747,437 -146,194 913,316 862,976 -491,-745 933,610 687,-149 -164,-803 -565,451 -275, -236 -759)),((572 96,-160 -607,529 930,-544 -132,458 294, 572 96))))')), ST_CENTROID(ST_GEOMFROMTEXT('POINT(-939 -921)')))))); ---replace_regex /-111\.[0-9]+/-111/ /-57\.[0-9]+/-57/ SELECT ST_AsText(@centroid_point) as centroid; SELECT MBRWITHIN(@centroid_point, ST_INTERSECTION(ST_GEOMFROMTEXT('MULTILINESTRING((541 -927,-414 316,-429 -444,212 260,-125 104,445 563,-713 -975,-976 514),(-830 882,-377 914,-915 919,-535 -23,-508 979),(806 347,-87 220,226 -22,-12 468,707 598,83 951,-592 701,833 964,270 -932,743 -514,231 469,-575 -122,-99 -245,416 465,801 -587))'), ST_GEOMFROMTEXT('LINESTRING(-96 -182,-373 75,697 687,-881 -463,-557 -959,-493 810)'))) as result; diff --git a/mysql-test/t/gis.test b/mysql-test/t/gis.test index 670f4a45cf05..ac65ff726eea 100644 --- a/mysql-test/t/gis.test +++ b/mysql-test/t/gis.test @@ -2296,10 +2296,9 @@ DROP VIEW v2; CREATE TABLE t1 (g GEOMETRY); INSERT INTO t1 (g) VALUES (ST_GeomFromText("MULTIPOLYGON(((0 7,-3 -14,9 -11,0 7)))")); - ---replace_numeric_round 4 +--replace_numeric_round 12 SELECT ST_AsText(ST_Buffer(g, 2)), ST_AsText(ST_Buffer(g, 2)) FROM t1; ---replace_numeric_round 4 +--replace_numeric_round 12 SELECT ST_AsText(ST_Buffer(g, 2)), ST_AsText(ST_Difference(g, g)) FROM t1; DROP TABLE t1; From eeb16331fdc023c2e35bdcfa7b31c9ffc9fa147b Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Wed, 31 Jan 2018 13:54:31 +0100 Subject: [PATCH 0449/1221] PS-260: Added testcase for the world database crash Without the previous commit fixing it, loading the world database crashed at the 181th city. --- .../suite/innodb/r/percona_bug_ps260.result | 5 + .../suite/innodb/t/percona_bug_ps260.test | 226 ++++++++++++++++++ 2 files changed, 231 insertions(+) create mode 100644 mysql-test/suite/innodb/r/percona_bug_ps260.result create mode 100644 mysql-test/suite/innodb/t/percona_bug_ps260.test diff --git a/mysql-test/suite/innodb/r/percona_bug_ps260.result b/mysql-test/suite/innodb/r/percona_bug_ps260.result new file mode 100644 index 000000000000..dc31daeac0ab --- /dev/null +++ b/mysql-test/suite/innodb/r/percona_bug_ps260.result @@ -0,0 +1,5 @@ +# +# Loading the MySQL World sample database +# PS-260: An optimizer bug caused a crash when loading this SQL +# +# Loading data diff --git a/mysql-test/suite/innodb/t/percona_bug_ps260.test b/mysql-test/suite/innodb/t/percona_bug_ps260.test new file mode 100644 index 000000000000..65702311228c --- /dev/null +++ b/mysql-test/suite/innodb/t/percona_bug_ps260.test @@ -0,0 +1,226 @@ +--source include/have_innodb.inc + +--echo # +--echo # Loading the MySQL World sample database +--echo # PS-260: An optimizer bug caused a crash when loading this SQL +--echo # + +--disable_query_log +--disable_result_log +--echo # Loading data +drop database if exists world; +create database world; +use world; +CREATE TABLE `city` ( + `ID` INT(11) NOT NULL AUTO_INCREMENT, + `Name` CHAR(35) NOT NULL DEFAULT '', + `CountryCode` CHAR(3) NOT NULL DEFAULT '', + `District` CHAR(20) NOT NULL DEFAULT '', + `Population` INT(11) NOT NULL DEFAULT '0', + PRIMARY KEY (`ID`), + KEY `CountryCode` (`CountryCode`) +) ENGINE=InnoDB AUTO_INCREMENT=4080 DEFAULT CHARSET=latin1; +INSERT INTO `city` VALUES (1,'Kabul','AFG','Kabol',1780000); +INSERT INTO `city` VALUES (2,'Qandahar','AFG','Qandahar',237500); +INSERT INTO `city` VALUES (3,'Herat','AFG','Herat',186800); +INSERT INTO `city` VALUES (4,'Mazar-e-Sharif','AFG','Balkh',127800); +INSERT INTO `city` VALUES (5,'Amsterdam','NLD','Noord-Holland',731200); +INSERT INTO `city` VALUES (6,'Rotterdam','NLD','Zuid-Holland',593321); +INSERT INTO `city` VALUES (7,'Haag','NLD','Zuid-Holland',440900); +INSERT INTO `city` VALUES (8,'Utrecht','NLD','Utrecht',234323); +INSERT INTO `city` VALUES (9,'Eindhoven','NLD','Noord-Brabant',201843); +INSERT INTO `city` VALUES (10,'Tilburg','NLD','Noord-Brabant',193238); +INSERT INTO `city` VALUES (11,'Groningen','NLD','Groningen',172701); +INSERT INTO `city` VALUES (12,'Breda','NLD','Noord-Brabant',160398); +INSERT INTO `city` VALUES (13,'Apeldoorn','NLD','Gelderland',153491); +INSERT INTO `city` VALUES (14,'Nijmegen','NLD','Gelderland',152463); +INSERT INTO `city` VALUES (15,'Enschede','NLD','Overijssel',149544); +INSERT INTO `city` VALUES (16,'Haarlem','NLD','Noord-Holland',148772); +INSERT INTO `city` VALUES (17,'Almere','NLD','Flevoland',142465); +INSERT INTO `city` VALUES (18,'Arnhem','NLD','Gelderland',138020); +INSERT INTO `city` VALUES (19,'Zaanstad','NLD','Noord-Holland',135621); +INSERT INTO `city` VALUES (20,'´s-Hertogenbosch','NLD','Noord-Brabant',129170); +INSERT INTO `city` VALUES (21,'Amersfoort','NLD','Utrecht',126270); +INSERT INTO `city` VALUES (22,'Maastricht','NLD','Limburg',122087); +INSERT INTO `city` VALUES (23,'Dordrecht','NLD','Zuid-Holland',119811); +INSERT INTO `city` VALUES (24,'Leiden','NLD','Zuid-Holland',117196); +INSERT INTO `city` VALUES (25,'Haarlemmermeer','NLD','Noord-Holland',110722); +INSERT INTO `city` VALUES (26,'Zoetermeer','NLD','Zuid-Holland',110214); +INSERT INTO `city` VALUES (27,'Emmen','NLD','Drenthe',105853); +INSERT INTO `city` VALUES (28,'Zwolle','NLD','Overijssel',105819); +INSERT INTO `city` VALUES (29,'Ede','NLD','Gelderland',101574); +INSERT INTO `city` VALUES (30,'Delft','NLD','Zuid-Holland',95268); +INSERT INTO `city` VALUES (31,'Heerlen','NLD','Limburg',95052); +INSERT INTO `city` VALUES (32,'Alkmaar','NLD','Noord-Holland',92713); +INSERT INTO `city` VALUES (33,'Willemstad','ANT','Curaçao',2345); +INSERT INTO `city` VALUES (34,'Tirana','ALB','Tirana',270000); +INSERT INTO `city` VALUES (35,'Alger','DZA','Alger',2168000); +INSERT INTO `city` VALUES (36,'Oran','DZA','Oran',609823); +INSERT INTO `city` VALUES (37,'Constantine','DZA','Constantine',443727); +INSERT INTO `city` VALUES (38,'Annaba','DZA','Annaba',222518); +INSERT INTO `city` VALUES (39,'Batna','DZA','Batna',183377); +INSERT INTO `city` VALUES (40,'Sétif','DZA','Sétif',179055); +INSERT INTO `city` VALUES (41,'Sidi Bel Abbès','DZA','Sidi Bel Abbès',153106); +INSERT INTO `city` VALUES (42,'Skikda','DZA','Skikda',128747); +INSERT INTO `city` VALUES (43,'Biskra','DZA','Biskra',128281); +INSERT INTO `city` VALUES (44,'Blida (el-Boulaida)','DZA','Blida',127284); +INSERT INTO `city` VALUES (45,'Béjaïa','DZA','Béjaïa',117162); +INSERT INTO `city` VALUES (46,'Mostaganem','DZA','Mostaganem',115212); +INSERT INTO `city` VALUES (47,'Tébessa','DZA','Tébessa',112007); +INSERT INTO `city` VALUES (48,'Tlemcen (Tilimsen)','DZA','Tlemcen',110242); +INSERT INTO `city` VALUES (49,'Béchar','DZA','Béchar',107311); +INSERT INTO `city` VALUES (50,'Tiaret','DZA','Tiaret',100118); +INSERT INTO `city` VALUES (51,'Ech-Chleff (el-Asnam)','DZA','Chlef',96794); +INSERT INTO `city` VALUES (52,'Ghardaïa','DZA','Ghardaïa',89415); +INSERT INTO `city` VALUES (53,'Tafuna','ASM','Tutuila',5200); +INSERT INTO `city` VALUES (54,'Fagatogo','ASM','Tutuila',2323); +INSERT INTO `city` VALUES (55,'Andorra la Vella','AND','Andorra la Vella',21189); +INSERT INTO `city` VALUES (56,'Luanda','AGO','Luanda',2022000); +INSERT INTO `city` VALUES (57,'Huambo','AGO','Huambo',163100); +INSERT INTO `city` VALUES (58,'Lobito','AGO','Benguela',130000); +INSERT INTO `city` VALUES (59,'Benguela','AGO','Benguela',128300); +INSERT INTO `city` VALUES (60,'Namibe','AGO','Namibe',118200); +INSERT INTO `city` VALUES (61,'South Hill','AIA','–',961); +INSERT INTO `city` VALUES (62,'The Valley','AIA','–',595); +INSERT INTO `city` VALUES (63,'Saint John´s','ATG','St John',24000); +INSERT INTO `city` VALUES (64,'Dubai','ARE','Dubai',669181); +INSERT INTO `city` VALUES (65,'Abu Dhabi','ARE','Abu Dhabi',398695); +INSERT INTO `city` VALUES (66,'Sharja','ARE','Sharja',320095); +INSERT INTO `city` VALUES (67,'al-Ayn','ARE','Abu Dhabi',225970); +INSERT INTO `city` VALUES (68,'Ajman','ARE','Ajman',114395); +INSERT INTO `city` VALUES (69,'Buenos Aires','ARG','Distrito Federal',2982146); +INSERT INTO `city` VALUES (70,'La Matanza','ARG','Buenos Aires',1266461); +INSERT INTO `city` VALUES (71,'Córdoba','ARG','Córdoba',1157507); +INSERT INTO `city` VALUES (72,'Rosario','ARG','Santa Fé',907718); +INSERT INTO `city` VALUES (73,'Lomas de Zamora','ARG','Buenos Aires',622013); +INSERT INTO `city` VALUES (74,'Quilmes','ARG','Buenos Aires',559249); +INSERT INTO `city` VALUES (75,'Almirante Brown','ARG','Buenos Aires',538918); +INSERT INTO `city` VALUES (76,'La Plata','ARG','Buenos Aires',521936); +INSERT INTO `city` VALUES (77,'Mar del Plata','ARG','Buenos Aires',512880); +INSERT INTO `city` VALUES (78,'San Miguel de Tucumán','ARG','Tucumán',470809); +INSERT INTO `city` VALUES (79,'Lanús','ARG','Buenos Aires',469735); +INSERT INTO `city` VALUES (80,'Merlo','ARG','Buenos Aires',463846); +INSERT INTO `city` VALUES (81,'General San Martín','ARG','Buenos Aires',422542); +INSERT INTO `city` VALUES (82,'Salta','ARG','Salta',367550); +INSERT INTO `city` VALUES (83,'Moreno','ARG','Buenos Aires',356993); +INSERT INTO `city` VALUES (84,'Santa Fé','ARG','Santa Fé',353063); +INSERT INTO `city` VALUES (85,'Avellaneda','ARG','Buenos Aires',353046); +INSERT INTO `city` VALUES (86,'Tres de Febrero','ARG','Buenos Aires',352311); +INSERT INTO `city` VALUES (87,'Morón','ARG','Buenos Aires',349246); +INSERT INTO `city` VALUES (88,'Florencio Varela','ARG','Buenos Aires',315432); +INSERT INTO `city` VALUES (89,'San Isidro','ARG','Buenos Aires',306341); +INSERT INTO `city` VALUES (90,'Tigre','ARG','Buenos Aires',296226); +INSERT INTO `city` VALUES (91,'Malvinas Argentinas','ARG','Buenos Aires',290335); +INSERT INTO `city` VALUES (92,'Vicente López','ARG','Buenos Aires',288341); +INSERT INTO `city` VALUES (93,'Berazategui','ARG','Buenos Aires',276916); +INSERT INTO `city` VALUES (94,'Corrientes','ARG','Corrientes',258103); +INSERT INTO `city` VALUES (95,'San Miguel','ARG','Buenos Aires',248700); +INSERT INTO `city` VALUES (96,'Bahía Blanca','ARG','Buenos Aires',239810); +INSERT INTO `city` VALUES (97,'Esteban Echeverría','ARG','Buenos Aires',235760); +INSERT INTO `city` VALUES (98,'Resistencia','ARG','Chaco',229212); +INSERT INTO `city` VALUES (99,'José C. Paz','ARG','Buenos Aires',221754); +INSERT INTO `city` VALUES (100,'Paraná','ARG','Entre Rios',207041); +INSERT INTO `city` VALUES (101,'Godoy Cruz','ARG','Mendoza',206998); +INSERT INTO `city` VALUES (102,'Posadas','ARG','Misiones',201273); +INSERT INTO `city` VALUES (103,'Guaymallén','ARG','Mendoza',200595); +INSERT INTO `city` VALUES (104,'Santiago del Estero','ARG','Santiago del Estero',189947); +INSERT INTO `city` VALUES (105,'San Salvador de Jujuy','ARG','Jujuy',178748); +INSERT INTO `city` VALUES (106,'Hurlingham','ARG','Buenos Aires',170028); +INSERT INTO `city` VALUES (107,'Neuquén','ARG','Neuquén',167296); +INSERT INTO `city` VALUES (108,'Ituzaingó','ARG','Buenos Aires',158197); +INSERT INTO `city` VALUES (109,'San Fernando','ARG','Buenos Aires',153036); +INSERT INTO `city` VALUES (110,'Formosa','ARG','Formosa',147636); +INSERT INTO `city` VALUES (111,'Las Heras','ARG','Mendoza',145823); +INSERT INTO `city` VALUES (112,'La Rioja','ARG','La Rioja',138117); +INSERT INTO `city` VALUES (113,'San Fernando del Valle de Cata','ARG','Catamarca',134935); +INSERT INTO `city` VALUES (114,'Río Cuarto','ARG','Córdoba',134355); +INSERT INTO `city` VALUES (115,'Comodoro Rivadavia','ARG','Chubut',124104); +INSERT INTO `city` VALUES (116,'Mendoza','ARG','Mendoza',123027); +INSERT INTO `city` VALUES (117,'San Nicolás de los Arroyos','ARG','Buenos Aires',119302); +INSERT INTO `city` VALUES (118,'San Juan','ARG','San Juan',119152); +INSERT INTO `city` VALUES (119,'Escobar','ARG','Buenos Aires',116675); +INSERT INTO `city` VALUES (120,'Concordia','ARG','Entre Rios',116485); +INSERT INTO `city` VALUES (121,'Pilar','ARG','Buenos Aires',113428); +INSERT INTO `city` VALUES (122,'San Luis','ARG','San Luis',110136); +INSERT INTO `city` VALUES (123,'Ezeiza','ARG','Buenos Aires',99578); +INSERT INTO `city` VALUES (124,'San Rafael','ARG','Mendoza',94651); +INSERT INTO `city` VALUES (125,'Tandil','ARG','Buenos Aires',91101); +INSERT INTO `city` VALUES (126,'Yerevan','ARM','Yerevan',1248700); +INSERT INTO `city` VALUES (127,'Gjumri','ARM','Širak',211700); +INSERT INTO `city` VALUES (128,'Vanadzor','ARM','Lori',172700); +INSERT INTO `city` VALUES (129,'Oranjestad','ABW','–',29034); +INSERT INTO `city` VALUES (130,'Sydney','AUS','New South Wales',3276207); +INSERT INTO `city` VALUES (131,'Melbourne','AUS','Victoria',2865329); +INSERT INTO `city` VALUES (132,'Brisbane','AUS','Queensland',1291117); +INSERT INTO `city` VALUES (133,'Perth','AUS','West Australia',1096829); +INSERT INTO `city` VALUES (134,'Adelaide','AUS','South Australia',978100); +INSERT INTO `city` VALUES (135,'Canberra','AUS','Capital Region',322723); +INSERT INTO `city` VALUES (136,'Gold Coast','AUS','Queensland',311932); +INSERT INTO `city` VALUES (137,'Newcastle','AUS','New South Wales',270324); +INSERT INTO `city` VALUES (138,'Central Coast','AUS','New South Wales',227657); +INSERT INTO `city` VALUES (139,'Wollongong','AUS','New South Wales',219761); +INSERT INTO `city` VALUES (140,'Hobart','AUS','Tasmania',126118); +INSERT INTO `city` VALUES (141,'Geelong','AUS','Victoria',125382); +INSERT INTO `city` VALUES (142,'Townsville','AUS','Queensland',109914); +INSERT INTO `city` VALUES (143,'Cairns','AUS','Queensland',92273); +INSERT INTO `city` VALUES (144,'Baku','AZE','Baki',1787800); +INSERT INTO `city` VALUES (145,'Gäncä','AZE','Gäncä',299300); +INSERT INTO `city` VALUES (146,'Sumqayit','AZE','Sumqayit',283000); +INSERT INTO `city` VALUES (147,'Mingäçevir','AZE','Mingäçevir',93900); +INSERT INTO `city` VALUES (148,'Nassau','BHS','New Providence',172000); +INSERT INTO `city` VALUES (149,'al-Manama','BHR','al-Manama',148000); +INSERT INTO `city` VALUES (150,'Dhaka','BGD','Dhaka',3612850); +INSERT INTO `city` VALUES (151,'Chittagong','BGD','Chittagong',1392860); +INSERT INTO `city` VALUES (152,'Khulna','BGD','Khulna',663340); +INSERT INTO `city` VALUES (153,'Rajshahi','BGD','Rajshahi',294056); +INSERT INTO `city` VALUES (154,'Narayanganj','BGD','Dhaka',202134); +INSERT INTO `city` VALUES (155,'Rangpur','BGD','Rajshahi',191398); +INSERT INTO `city` VALUES (156,'Mymensingh','BGD','Dhaka',188713); +INSERT INTO `city` VALUES (157,'Barisal','BGD','Barisal',170232); +INSERT INTO `city` VALUES (158,'Tungi','BGD','Dhaka',168702); +INSERT INTO `city` VALUES (159,'Jessore','BGD','Khulna',139710); +INSERT INTO `city` VALUES (160,'Comilla','BGD','Chittagong',135313); +INSERT INTO `city` VALUES (161,'Nawabganj','BGD','Rajshahi',130577); +INSERT INTO `city` VALUES (162,'Dinajpur','BGD','Rajshahi',127815); +INSERT INTO `city` VALUES (163,'Bogra','BGD','Rajshahi',120170); +INSERT INTO `city` VALUES (164,'Sylhet','BGD','Sylhet',117396); +INSERT INTO `city` VALUES (165,'Brahmanbaria','BGD','Chittagong',109032); +INSERT INTO `city` VALUES (166,'Tangail','BGD','Dhaka',106004); +INSERT INTO `city` VALUES (167,'Jamalpur','BGD','Dhaka',103556); +INSERT INTO `city` VALUES (168,'Pabna','BGD','Rajshahi',103277); +INSERT INTO `city` VALUES (169,'Naogaon','BGD','Rajshahi',101266); +INSERT INTO `city` VALUES (170,'Sirajganj','BGD','Rajshahi',99669); +INSERT INTO `city` VALUES (171,'Narsinghdi','BGD','Dhaka',98342); +INSERT INTO `city` VALUES (172,'Saidpur','BGD','Rajshahi',96777); +INSERT INTO `city` VALUES (173,'Gazipur','BGD','Dhaka',96717); +INSERT INTO `city` VALUES (174,'Bridgetown','BRB','St Michael',6070); +INSERT INTO `city` VALUES (175,'Antwerpen','BEL','Antwerpen',446525); +INSERT INTO `city` VALUES (176,'Gent','BEL','East Flanderi',224180); +INSERT INTO `city` VALUES (177,'Charleroi','BEL','Hainaut',200827); +INSERT INTO `city` VALUES (178,'Liège','BEL','Liège',185639); +INSERT INTO `city` VALUES (179,'Bruxelles [Brussel]','BEL','Bryssel',133859); +INSERT INTO `city` VALUES (180,'Brugge','BEL','West Flanderi',116246); +INSERT INTO `city` VALUES (181,'Schaerbeek','BEL','Bryssel',105692); +INSERT INTO `city` VALUES (182,'Namur','BEL','Namur',105419); +INSERT INTO `city` VALUES (183,'Mons','BEL','Hainaut',90935); +INSERT INTO `city` VALUES (184,'Belize City','BLZ','Belize City',55810); +INSERT INTO `city` VALUES (185,'Belmopan','BLZ','Cayo',7105); +INSERT INTO `city` VALUES (186,'Cotonou','BEN','Atlantique',536827); +INSERT INTO `city` VALUES (187,'Porto-Novo','BEN','Ouémé',194000); +INSERT INTO `city` VALUES (188,'Djougou','BEN','Atacora',134099); +INSERT INTO `city` VALUES (189,'Parakou','BEN','Borgou',103577); +INSERT INTO `city` VALUES (190,'Saint George','BMU','Saint George´s',1800); +INSERT INTO `city` VALUES (191,'Hamilton','BMU','Hamilton',1200); +INSERT INTO `city` VALUES (192,'Thimphu','BTN','Thimphu',22000); +INSERT INTO `city` VALUES (193,'Santa Cruz de la Sierra','BOL','Santa Cruz',935361); +INSERT INTO `city` VALUES (194,'La Paz','BOL','La Paz',758141); +INSERT INTO `city` VALUES (195,'El Alto','BOL','La Paz',534466); +INSERT INTO `city` VALUES (196,'Cochabamba','BOL','Cochabamba',482800); +INSERT INTO `city` VALUES (197,'Oruro','BOL','Oruro',223553); +INSERT INTO `city` VALUES (198,'Sucre','BOL','Chuquisaca',178426); +INSERT INTO `city` VALUES (199,'Potosí','BOL','Potosí',140642); +INSERT INTO `city` VALUES (200,'Tarija','BOL','Tarija',125255); +drop database world; +--enable_result_log +--enable_query_log + From dd568237ace74bb7c131ce4e8b97aea996aca2ac Mon Sep 17 00:00:00 2001 From: Evgeniy Patlan Date: Thu, 1 Feb 2018 14:37:45 +0200 Subject: [PATCH 0450/1221] Fix patch for centos7 rpm --- build-ps/rpm/mysql-5.6-sharedlib-rename.patch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build-ps/rpm/mysql-5.6-sharedlib-rename.patch b/build-ps/rpm/mysql-5.6-sharedlib-rename.patch index b6dd53adab31..2eed89baa262 100644 --- a/build-ps/rpm/mysql-5.6-sharedlib-rename.patch +++ b/build-ps/rpm/mysql-5.6-sharedlib-rename.patch @@ -15,7 +15,7 @@ diff -rup old/client/CMakeLists.txt new/client/CMakeLists.txt SET_SOURCE_FILES_PROPERTIES(mysqltest.cc PROPERTIES COMPILE_FLAGS "-DTHREADS") -TARGET_LINK_LIBRARIES(mysqltest perconaserverclient regex) +TARGET_LINK_LIBRARIES(mysqltest mysqlclient regex) - + ADD_DEPENDENCIES(mysqltest GenError) MYSQL_ADD_EXECUTABLE(mysqlcheck mysqlcheck.c) -TARGET_LINK_LIBRARIES(mysqlcheck perconaserverclient) From 15d917c381d0a8a5eae113e63d82489e7f475c5c Mon Sep 17 00:00:00 2001 From: Przemek Skibinski Date: Thu, 25 Jan 2018 18:11:57 +0100 Subject: [PATCH 0451/1221] PS-3788: partially dynamic @@version variable using support of @@version_suffix Provide ability to make server return different values for @@version and @@version_comment variables. @@version_comment: convert this variable from a global read-only to a global read-write variable. @@version: introduce new global read-write string variable @@version_suffix. If @@version_suffix is set to a string, for example, "-foo", then @@version variable is truncated after the version number and @@version_suffix is appended, resulting in e.g. "5.7.13-foo". Note that an empty string provides a way to leave only the version number in @@version. --- .../sys_vars/r/version_comment_basic.result | 19 +++- .../sys_vars/r/version_suffix_basic.result | 66 +++++++++++++ .../sys_vars/t/version_comment_basic.test | 21 +++- .../sys_vars/t/version_suffix_basic.test | 96 +++++++++++++++++++ sql/mysqld.cc | 6 +- sql/mysqld.h | 1 + sql/sys_vars.cc | 12 ++- sql/sys_vars.h | 47 +++++++++ 8 files changed, 260 insertions(+), 8 deletions(-) create mode 100644 mysql-test/suite/sys_vars/r/version_suffix_basic.result create mode 100644 mysql-test/suite/sys_vars/t/version_suffix_basic.test diff --git a/mysql-test/suite/sys_vars/r/version_comment_basic.result b/mysql-test/suite/sys_vars/r/version_comment_basic.result index 5ef4bdbdd870..2c66459fd216 100644 --- a/mysql-test/suite/sys_vars/r/version_comment_basic.result +++ b/mysql-test/suite/sys_vars/r/version_comment_basic.result @@ -5,8 +5,23 @@ COUNT(@@GLOBAL.version_comment) 1 Expected '#---------------------BS_STVARS_054_02----------------------#' SET @@GLOBAL.version_comment=1; -ERROR HY000: Variable 'version_comment' is a read only variable -Expected error 'Read only variable' +ERROR 42000: Incorrect argument type to variable 'version_comment' +Expected error 'Incorrect argument type to variable' +SET @saved_version_comment = @@global.version_comment; +SET GLOBAL version_comment = DEFAULT; +SET GLOBAL version_comment = ''; +SELECT @@global.version_comment; +@@global.version_comment + +SET GLOBAL version_comment = 'my_comment'; +SELECT @@global.version_comment; +@@global.version_comment +my_comment +SET GLOBAL version_comment = 'my_comment2'; +SELECT @@global.version_comment; +@@global.version_comment +my_comment2 +SET GLOBAL version_comment = @saved_version_comment; SELECT COUNT(@@GLOBAL.version_comment); COUNT(@@GLOBAL.version_comment) 1 diff --git a/mysql-test/suite/sys_vars/r/version_suffix_basic.result b/mysql-test/suite/sys_vars/r/version_suffix_basic.result new file mode 100644 index 000000000000..5d7abb0ac241 --- /dev/null +++ b/mysql-test/suite/sys_vars/r/version_suffix_basic.result @@ -0,0 +1,66 @@ +SELECT COUNT(@@GLOBAL.version_suffix); +COUNT(@@GLOBAL.version_suffix) +1 +1 Expected +SET @@GLOBAL.version_suffix=1; +ERROR 42000: Incorrect argument type to variable 'version_suffix' +Expected error 'Incorrect argument type to variable' +SET @saved_version_suffix = @@global.version_suffix; +SET GLOBAL version_suffix = DEFAULT; +SET GLOBAL version_suffix = ''; +SET @version_base = @@global.version; +SELECT @@global.version_suffix; +@@global.version_suffix + +SET GLOBAL version_suffix = '-my_version'; +SELECT @@global.version_suffix; +@@global.version_suffix +-my_version +include/assert.inc [Strings should be equal] +SET GLOBAL version_suffix = '-my_version2'; +SELECT @@global.version_suffix; +@@global.version_suffix +-my_version2 +include/assert.inc [Strings should be equal] +SET GLOBAL version_suffix = @saved_version_suffix; +SELECT COUNT(@@GLOBAL.version_suffix); +COUNT(@@GLOBAL.version_suffix) +1 +1 Expected +SELECT @@GLOBAL.version_suffix = VARIABLE_VALUE +FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES +WHERE VARIABLE_NAME='version_suffix'; +@@GLOBAL.version_suffix = VARIABLE_VALUE +1 +1 Expected +SELECT COUNT(@@GLOBAL.version_suffix); +COUNT(@@GLOBAL.version_suffix) +1 +1 Expected +SELECT COUNT(VARIABLE_VALUE) +FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES +WHERE VARIABLE_NAME='version_suffix'; +COUNT(VARIABLE_VALUE) +1 +1 Expected +SELECT @@version_suffix = @@GLOBAL.version_suffix; +@@version_suffix = @@GLOBAL.version_suffix +1 +1 Expected +SELECT COUNT(@@version_suffix); +COUNT(@@version_suffix) +1 +1 Expected +SELECT COUNT(@@local.version_suffix); +ERROR HY000: Variable 'version_suffix' is a GLOBAL variable +Expected error 'Variable is a GLOBAL variable' +SELECT COUNT(@@SESSION.version_suffix); +ERROR HY000: Variable 'version_suffix' is a GLOBAL variable +Expected error 'Variable is a GLOBAL variable' +SELECT COUNT(@@GLOBAL.version_suffix); +COUNT(@@GLOBAL.version_suffix) +1 +1 Expected +SELECT version_suffix = @@SESSION.version_suffix; +ERROR 42S22: Unknown column 'version_suffix' in 'field list' +Expected error 'Readonly variable' diff --git a/mysql-test/suite/sys_vars/t/version_comment_basic.test b/mysql-test/suite/sys_vars/t/version_comment_basic.test index 3ae6daa192ac..ec3556761f6f 100644 --- a/mysql-test/suite/sys_vars/t/version_comment_basic.test +++ b/mysql-test/suite/sys_vars/t/version_comment_basic.test @@ -35,9 +35,26 @@ SELECT COUNT(@@GLOBAL.version_comment); # Check if Value can set # #################################################################### ---error ER_INCORRECT_GLOBAL_LOCAL_VAR +--error ER_WRONG_TYPE_FOR_VAR SET @@GLOBAL.version_comment=1; ---echo Expected error 'Read only variable' +--echo Expected error 'Incorrect argument type to variable' + +# save the start value +SET @saved_version_comment = @@global.version_comment; + +SET GLOBAL version_comment = DEFAULT; + +SET GLOBAL version_comment = ''; +SELECT @@global.version_comment; + +SET GLOBAL version_comment = 'my_comment'; +SELECT @@global.version_comment; + +SET GLOBAL version_comment = 'my_comment2'; +SELECT @@global.version_comment; + +# restore the start value +SET GLOBAL version_comment = @saved_version_comment; SELECT COUNT(@@GLOBAL.version_comment); --echo 1 Expected diff --git a/mysql-test/suite/sys_vars/t/version_suffix_basic.test b/mysql-test/suite/sys_vars/t/version_suffix_basic.test new file mode 100644 index 000000000000..b05b704addee --- /dev/null +++ b/mysql-test/suite/sys_vars/t/version_suffix_basic.test @@ -0,0 +1,96 @@ +#################################################################### +# Displaying default value # +#################################################################### +SELECT COUNT(@@GLOBAL.version_suffix); +--echo 1 Expected + + +#################################################################### +# Check if Value can set and if @@version is set according to # +# @@version_suffix # +#################################################################### + +--error ER_WRONG_TYPE_FOR_VAR +SET @@GLOBAL.version_suffix=1; +--echo Expected error 'Incorrect argument type to variable' + +# save the start value +SET @saved_version_suffix = @@global.version_suffix; + +SET GLOBAL version_suffix = DEFAULT; + +SET GLOBAL version_suffix = ''; +SET @version_base = @@global.version; +SELECT @@global.version_suffix; + +SET GLOBAL version_suffix = '-my_version'; +SELECT @@global.version_suffix; +--let $assert_text= Strings should be equal +--let $assert_cond= STRCMP(@@global.version, CONCAT(@version_base, @@global.version_suffix)) = 0 +--source include/assert.inc + +SET GLOBAL version_suffix = '-my_version2'; +SELECT @@global.version_suffix; +--let $assert_text= Strings should be equal +--let $assert_cond= STRCMP(@@global.version, CONCAT(@version_base, @@global.version_suffix)) = 0 +--source include/assert.inc + +# restore the start value +SET GLOBAL version_suffix = @saved_version_suffix; + +SELECT COUNT(@@GLOBAL.version_suffix); +--echo 1 Expected + + + + +################################################################# +# Check if the value in GLOBAL Table matches value in variable # +################################################################# + +SELECT @@GLOBAL.version_suffix = VARIABLE_VALUE +FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES +WHERE VARIABLE_NAME='version_suffix'; +--echo 1 Expected + +SELECT COUNT(@@GLOBAL.version_suffix); +--echo 1 Expected + +SELECT COUNT(VARIABLE_VALUE) +FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES +WHERE VARIABLE_NAME='version_suffix'; +--echo 1 Expected + + + +################################################################################ +# Check if accessing variable with and without GLOBAL point to same variable # +################################################################################ +SELECT @@version_suffix = @@GLOBAL.version_suffix; +--echo 1 Expected + + + +################################################################################ +# Check if version_suffix can be accessed with and without @@ sign # +################################################################################ + +SELECT COUNT(@@version_suffix); +--echo 1 Expected + +--Error ER_INCORRECT_GLOBAL_LOCAL_VAR +SELECT COUNT(@@local.version_suffix); +--echo Expected error 'Variable is a GLOBAL variable' + +--Error ER_INCORRECT_GLOBAL_LOCAL_VAR +SELECT COUNT(@@SESSION.version_suffix); +--echo Expected error 'Variable is a GLOBAL variable' + +SELECT COUNT(@@GLOBAL.version_suffix); +--echo 1 Expected + +--Error ER_BAD_FIELD_ERROR +SELECT version_suffix = @@SESSION.version_suffix; +--echo Expected error 'Readonly variable' + + diff --git a/sql/mysqld.cc b/sql/mysqld.cc index cdc7873c02fb..9b03975a13d2 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -674,6 +674,7 @@ Time_zone *default_tz; char *mysql_data_home= const_cast("."); const char *mysql_real_data_home_ptr= mysql_real_data_home; char server_version[SERVER_VERSION_LENGTH]; +char server_version_suffix[SERVER_VERSION_LENGTH]; char *mysqld_unix_port, *opt_mysql_tmpdir; ulong thread_handling; @@ -9597,7 +9598,10 @@ static void set_server_version(void) end= strmov(end, "-debug"); #endif if (opt_log || opt_slow_log || opt_bin_log) - strmov(end, "-log"); // This may slow down system + end= strmov(end, "-log"); // This may slow down system + + DBUG_ASSERT(end < server_version + SERVER_VERSION_LENGTH); + strmov(server_version_suffix, server_version + strlen(MYSQL_SERVER_VERSION)); } diff --git a/sql/mysqld.h b/sql/mysqld.h index a552055d1511..a2545f6eff56 100644 --- a/sql/mysqld.h +++ b/sql/mysqld.h @@ -609,6 +609,7 @@ extern const char *mysql_real_data_home_ptr; extern ulong thread_handling; extern MYSQL_PLUGIN_IMPORT char *mysql_data_home; extern "C" MYSQL_PLUGIN_IMPORT char server_version[SERVER_VERSION_LENGTH]; +extern "C" MYSQL_PLUGIN_IMPORT char server_version_suffix[SERVER_VERSION_LENGTH]; extern MYSQL_PLUGIN_IMPORT char mysql_real_data_home[]; extern char mysql_unpacked_real_data_home[]; extern MYSQL_PLUGIN_IMPORT struct system_variables global_system_variables; diff --git a/sql/sys_vars.cc b/sql/sys_vars.cc index bdd9b49c7451..466235dc0ada 100644 --- a/sql/sys_vars.cc +++ b/sql/sys_vars.cc @@ -3463,15 +3463,21 @@ static Sys_var_mybool Sys_timed_mutexes( DEPRECATED("")); static char *server_version_ptr; -static Sys_var_charptr Sys_version( +static Sys_var_version Sys_version( "version", "Server version", READ_ONLY GLOBAL_VAR(server_version_ptr), NO_CMD_LINE, - IN_SYSTEM_CHARSET, DEFAULT(server_version)); + IN_SYSTEM_CHARSET, DEFAULT(MYSQL_SERVER_VERSION)); + +static char *server_version_suffix_ptr; +static Sys_var_charptr Sys_version_suffix( + "version_suffix", "version_suffix", + GLOBAL_VAR(server_version_suffix_ptr), NO_CMD_LINE, + IN_SYSTEM_CHARSET, DEFAULT(server_version_suffix)); static char *server_version_comment_ptr; static Sys_var_charptr Sys_version_comment( "version_comment", "version_comment", - READ_ONLY GLOBAL_VAR(server_version_comment_ptr), NO_CMD_LINE, + GLOBAL_VAR(server_version_comment_ptr), NO_CMD_LINE, IN_SYSTEM_CHARSET, DEFAULT(MYSQL_COMPILATION_COMMENT)); static char *server_version_compile_machine_ptr; diff --git a/sql/sys_vars.h b/sql/sys_vars.h index 5a31ee2adef3..a2c863d47a91 100644 --- a/sql/sys_vars.h +++ b/sql/sys_vars.h @@ -550,6 +550,53 @@ class Sys_var_charptr: public sys_var }; +class Sys_var_version : public Sys_var_charptr +{ +private: + char withsuffix[SERVER_VERSION_LENGTH]; + char *withsuffix_ptr; +public: + Sys_var_version(const char *name_arg, + const char *comment, int flag_args, ptrdiff_t off, size_t size, + CMD_LINE getopt, + enum charset_enum is_os_charset_arg, + const char *def_val) + : Sys_var_charptr(name_arg, comment, flag_args, off, size, getopt, + is_os_charset_arg, def_val), + withsuffix_ptr(withsuffix) + {} + virtual uchar *global_value_ptr(THD *thd, LEX_STRING *base) + { + char **version_ptr= reinterpret_cast ( + Sys_var_charptr::global_value_ptr(thd, base)); + if (version_ptr == NULL) + return NULL; + + sys_var *suffix_var= find_sys_var(thd, STRING_WITH_LEN("version_suffix")); + if (suffix_var == NULL) + return reinterpret_cast (version_ptr); + + char** suffix_ptr= reinterpret_cast (suffix_var->value_ptr(thd, + OPT_GLOBAL, NULL)); + if (suffix_ptr == NULL) + return reinterpret_cast (version_ptr); + + size_t suffix_ptr_len= strlen(*suffix_ptr); + size_t version_ptr_len= strlen(*version_ptr); + + /* prepare concatenated @@version variable */ + if (suffix_ptr_len + version_ptr_len + 1 > SERVER_VERSION_LENGTH) + suffix_ptr_len = SERVER_VERSION_LENGTH - version_ptr_len - 1; + + memcpy(withsuffix, *version_ptr, version_ptr_len); + memcpy(withsuffix + version_ptr_len, *suffix_ptr, suffix_ptr_len); + withsuffix[suffix_ptr_len + version_ptr_len] = 0; + + return reinterpret_cast (&withsuffix_ptr); + } +}; + + class Sys_var_proxy_user: public sys_var { public: From 3d35ec244ca9eb73345bf6fe6cea174f53d672ef Mon Sep 17 00:00:00 2001 From: Manuel Ung Date: Fri, 29 Sep 2017 11:23:46 -0700 Subject: [PATCH 0452/1221] Change rocksdb_bytes_per_sync/rocksdb_wal_bytes_per_sync to be dynamic Upstream commit ID : fb-mysql-5.6.35/4cf30c7375036bd8451c76e4401990a8f81bcaa0 MYR-198 : Merge prod201704 Summary: As titled This also picks up the fix here: https://github.com/facebook/rocksdb/commit/cf51d3eb7323368544ce4d4158f2ea51e18d47a7 update-submodule: rocksdb Reviewed By: asandryh Differential Revision: D5965002 fbshipit-source-id: 4fd139c --- .../r/rocksdb_bytes_per_sync_basic.result | 84 ++++++++++++++++++- .../r/rocksdb_wal_bytes_per_sync_basic.result | 84 ++++++++++++++++++- .../t/rocksdb_bytes_per_sync_basic.test | 18 +++- .../t/rocksdb_wal_bytes_per_sync_basic.test | 18 +++- storage/rocksdb/ha_rocksdb.cc | 74 +++++++++++++++- storage/rocksdb/rocksdb | 2 +- 6 files changed, 267 insertions(+), 13 deletions(-) diff --git a/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_bytes_per_sync_basic.result b/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_bytes_per_sync_basic.result index ede02afcb600..9af4f730a214 100644 --- a/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_bytes_per_sync_basic.result +++ b/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_bytes_per_sync_basic.result @@ -1,7 +1,85 @@ +CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam; +INSERT INTO valid_values VALUES(100); +INSERT INTO valid_values VALUES(1); +INSERT INTO valid_values VALUES(0); +CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam; +INSERT INTO invalid_values VALUES('\'aaa\''); +INSERT INTO invalid_values VALUES('\'bbb\''); +INSERT INTO invalid_values VALUES('\'-1\''); +INSERT INTO invalid_values VALUES('\'101\''); +INSERT INTO invalid_values VALUES('\'484436\''); SET @start_global_value = @@global.ROCKSDB_BYTES_PER_SYNC; SELECT @start_global_value; @start_global_value 0 -"Trying to set variable @@global.ROCKSDB_BYTES_PER_SYNC to 444. It should fail because it is readonly." -SET @@global.ROCKSDB_BYTES_PER_SYNC = 444; -ERROR HY000: Variable 'rocksdb_bytes_per_sync' is a read only variable +'# Setting to valid values in global scope#' +"Trying to set variable @@global.ROCKSDB_BYTES_PER_SYNC to 100" +SET @@global.ROCKSDB_BYTES_PER_SYNC = 100; +SELECT @@global.ROCKSDB_BYTES_PER_SYNC; +@@global.ROCKSDB_BYTES_PER_SYNC +100 +"Setting the global scope variable back to default" +SET @@global.ROCKSDB_BYTES_PER_SYNC = DEFAULT; +SELECT @@global.ROCKSDB_BYTES_PER_SYNC; +@@global.ROCKSDB_BYTES_PER_SYNC +0 +"Trying to set variable @@global.ROCKSDB_BYTES_PER_SYNC to 1" +SET @@global.ROCKSDB_BYTES_PER_SYNC = 1; +SELECT @@global.ROCKSDB_BYTES_PER_SYNC; +@@global.ROCKSDB_BYTES_PER_SYNC +1 +"Setting the global scope variable back to default" +SET @@global.ROCKSDB_BYTES_PER_SYNC = DEFAULT; +SELECT @@global.ROCKSDB_BYTES_PER_SYNC; +@@global.ROCKSDB_BYTES_PER_SYNC +0 +"Trying to set variable @@global.ROCKSDB_BYTES_PER_SYNC to 0" +SET @@global.ROCKSDB_BYTES_PER_SYNC = 0; +SELECT @@global.ROCKSDB_BYTES_PER_SYNC; +@@global.ROCKSDB_BYTES_PER_SYNC +0 +"Setting the global scope variable back to default" +SET @@global.ROCKSDB_BYTES_PER_SYNC = DEFAULT; +SELECT @@global.ROCKSDB_BYTES_PER_SYNC; +@@global.ROCKSDB_BYTES_PER_SYNC +0 +"Trying to set variable @@session.ROCKSDB_BYTES_PER_SYNC to 444. It should fail because it is not session." +SET @@session.ROCKSDB_BYTES_PER_SYNC = 444; +ERROR HY000: Variable 'rocksdb_bytes_per_sync' is a GLOBAL variable and should be set with SET GLOBAL +'# Testing with invalid values in global scope #' +"Trying to set variable @@global.ROCKSDB_BYTES_PER_SYNC to 'aaa'" +SET @@global.ROCKSDB_BYTES_PER_SYNC = 'aaa'; +Got one of the listed errors +SELECT @@global.ROCKSDB_BYTES_PER_SYNC; +@@global.ROCKSDB_BYTES_PER_SYNC +0 +"Trying to set variable @@global.ROCKSDB_BYTES_PER_SYNC to 'bbb'" +SET @@global.ROCKSDB_BYTES_PER_SYNC = 'bbb'; +Got one of the listed errors +SELECT @@global.ROCKSDB_BYTES_PER_SYNC; +@@global.ROCKSDB_BYTES_PER_SYNC +0 +"Trying to set variable @@global.ROCKSDB_BYTES_PER_SYNC to '-1'" +SET @@global.ROCKSDB_BYTES_PER_SYNC = '-1'; +Got one of the listed errors +SELECT @@global.ROCKSDB_BYTES_PER_SYNC; +@@global.ROCKSDB_BYTES_PER_SYNC +0 +"Trying to set variable @@global.ROCKSDB_BYTES_PER_SYNC to '101'" +SET @@global.ROCKSDB_BYTES_PER_SYNC = '101'; +Got one of the listed errors +SELECT @@global.ROCKSDB_BYTES_PER_SYNC; +@@global.ROCKSDB_BYTES_PER_SYNC +0 +"Trying to set variable @@global.ROCKSDB_BYTES_PER_SYNC to '484436'" +SET @@global.ROCKSDB_BYTES_PER_SYNC = '484436'; +Got one of the listed errors +SELECT @@global.ROCKSDB_BYTES_PER_SYNC; +@@global.ROCKSDB_BYTES_PER_SYNC +0 +SET @@global.ROCKSDB_BYTES_PER_SYNC = @start_global_value; +SELECT @@global.ROCKSDB_BYTES_PER_SYNC; +@@global.ROCKSDB_BYTES_PER_SYNC +0 +DROP TABLE valid_values; +DROP TABLE invalid_values; diff --git a/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_wal_bytes_per_sync_basic.result b/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_wal_bytes_per_sync_basic.result index 7da628b73fd7..f432f1f77506 100644 --- a/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_wal_bytes_per_sync_basic.result +++ b/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_wal_bytes_per_sync_basic.result @@ -1,7 +1,85 @@ +CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam; +INSERT INTO valid_values VALUES(100); +INSERT INTO valid_values VALUES(1); +INSERT INTO valid_values VALUES(0); +CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam; +INSERT INTO invalid_values VALUES('\'aaa\''); +INSERT INTO invalid_values VALUES('\'bbb\''); +INSERT INTO invalid_values VALUES('\'-1\''); +INSERT INTO invalid_values VALUES('\'101\''); +INSERT INTO invalid_values VALUES('\'484436\''); SET @start_global_value = @@global.ROCKSDB_WAL_BYTES_PER_SYNC; SELECT @start_global_value; @start_global_value 0 -"Trying to set variable @@global.ROCKSDB_WAL_BYTES_PER_SYNC to 444. It should fail because it is readonly." -SET @@global.ROCKSDB_WAL_BYTES_PER_SYNC = 444; -ERROR HY000: Variable 'rocksdb_wal_bytes_per_sync' is a read only variable +'# Setting to valid values in global scope#' +"Trying to set variable @@global.ROCKSDB_WAL_BYTES_PER_SYNC to 100" +SET @@global.ROCKSDB_WAL_BYTES_PER_SYNC = 100; +SELECT @@global.ROCKSDB_WAL_BYTES_PER_SYNC; +@@global.ROCKSDB_WAL_BYTES_PER_SYNC +100 +"Setting the global scope variable back to default" +SET @@global.ROCKSDB_WAL_BYTES_PER_SYNC = DEFAULT; +SELECT @@global.ROCKSDB_WAL_BYTES_PER_SYNC; +@@global.ROCKSDB_WAL_BYTES_PER_SYNC +0 +"Trying to set variable @@global.ROCKSDB_WAL_BYTES_PER_SYNC to 1" +SET @@global.ROCKSDB_WAL_BYTES_PER_SYNC = 1; +SELECT @@global.ROCKSDB_WAL_BYTES_PER_SYNC; +@@global.ROCKSDB_WAL_BYTES_PER_SYNC +1 +"Setting the global scope variable back to default" +SET @@global.ROCKSDB_WAL_BYTES_PER_SYNC = DEFAULT; +SELECT @@global.ROCKSDB_WAL_BYTES_PER_SYNC; +@@global.ROCKSDB_WAL_BYTES_PER_SYNC +0 +"Trying to set variable @@global.ROCKSDB_WAL_BYTES_PER_SYNC to 0" +SET @@global.ROCKSDB_WAL_BYTES_PER_SYNC = 0; +SELECT @@global.ROCKSDB_WAL_BYTES_PER_SYNC; +@@global.ROCKSDB_WAL_BYTES_PER_SYNC +0 +"Setting the global scope variable back to default" +SET @@global.ROCKSDB_WAL_BYTES_PER_SYNC = DEFAULT; +SELECT @@global.ROCKSDB_WAL_BYTES_PER_SYNC; +@@global.ROCKSDB_WAL_BYTES_PER_SYNC +0 +"Trying to set variable @@session.ROCKSDB_WAL_BYTES_PER_SYNC to 444. It should fail because it is not session." +SET @@session.ROCKSDB_WAL_BYTES_PER_SYNC = 444; +ERROR HY000: Variable 'rocksdb_wal_bytes_per_sync' is a GLOBAL variable and should be set with SET GLOBAL +'# Testing with invalid values in global scope #' +"Trying to set variable @@global.ROCKSDB_WAL_BYTES_PER_SYNC to 'aaa'" +SET @@global.ROCKSDB_WAL_BYTES_PER_SYNC = 'aaa'; +Got one of the listed errors +SELECT @@global.ROCKSDB_WAL_BYTES_PER_SYNC; +@@global.ROCKSDB_WAL_BYTES_PER_SYNC +0 +"Trying to set variable @@global.ROCKSDB_WAL_BYTES_PER_SYNC to 'bbb'" +SET @@global.ROCKSDB_WAL_BYTES_PER_SYNC = 'bbb'; +Got one of the listed errors +SELECT @@global.ROCKSDB_WAL_BYTES_PER_SYNC; +@@global.ROCKSDB_WAL_BYTES_PER_SYNC +0 +"Trying to set variable @@global.ROCKSDB_WAL_BYTES_PER_SYNC to '-1'" +SET @@global.ROCKSDB_WAL_BYTES_PER_SYNC = '-1'; +Got one of the listed errors +SELECT @@global.ROCKSDB_WAL_BYTES_PER_SYNC; +@@global.ROCKSDB_WAL_BYTES_PER_SYNC +0 +"Trying to set variable @@global.ROCKSDB_WAL_BYTES_PER_SYNC to '101'" +SET @@global.ROCKSDB_WAL_BYTES_PER_SYNC = '101'; +Got one of the listed errors +SELECT @@global.ROCKSDB_WAL_BYTES_PER_SYNC; +@@global.ROCKSDB_WAL_BYTES_PER_SYNC +0 +"Trying to set variable @@global.ROCKSDB_WAL_BYTES_PER_SYNC to '484436'" +SET @@global.ROCKSDB_WAL_BYTES_PER_SYNC = '484436'; +Got one of the listed errors +SELECT @@global.ROCKSDB_WAL_BYTES_PER_SYNC; +@@global.ROCKSDB_WAL_BYTES_PER_SYNC +0 +SET @@global.ROCKSDB_WAL_BYTES_PER_SYNC = @start_global_value; +SELECT @@global.ROCKSDB_WAL_BYTES_PER_SYNC; +@@global.ROCKSDB_WAL_BYTES_PER_SYNC +0 +DROP TABLE valid_values; +DROP TABLE invalid_values; diff --git a/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_bytes_per_sync_basic.test b/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_bytes_per_sync_basic.test index 9024aef93fc9..74b1a92b75f8 100644 --- a/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_bytes_per_sync_basic.test +++ b/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_bytes_per_sync_basic.test @@ -1,6 +1,22 @@ --source include/have_rocksdb.inc +--source include/have_myisam.inc + +CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam; +INSERT INTO valid_values VALUES(100); +INSERT INTO valid_values VALUES(1); +INSERT INTO valid_values VALUES(0); + +CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam; +INSERT INTO invalid_values VALUES('\'aaa\''); +INSERT INTO invalid_values VALUES('\'bbb\''); +INSERT INTO invalid_values VALUES('\'-1\''); +INSERT INTO invalid_values VALUES('\'101\''); +INSERT INTO invalid_values VALUES('\'484436\''); --let $sys_var=ROCKSDB_BYTES_PER_SYNC ---let $read_only=1 +--let $read_only=0 --let $session=0 --source ../include/rocksdb_sys_var.inc + +DROP TABLE valid_values; +DROP TABLE invalid_values; diff --git a/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_wal_bytes_per_sync_basic.test b/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_wal_bytes_per_sync_basic.test index 5296a37489fc..c2767acbc64e 100644 --- a/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_wal_bytes_per_sync_basic.test +++ b/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_wal_bytes_per_sync_basic.test @@ -1,6 +1,22 @@ --source include/have_rocksdb.inc +--source include/have_myisam.inc + +CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam; +INSERT INTO valid_values VALUES(100); +INSERT INTO valid_values VALUES(1); +INSERT INTO valid_values VALUES(0); + +CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam; +INSERT INTO invalid_values VALUES('\'aaa\''); +INSERT INTO invalid_values VALUES('\'bbb\''); +INSERT INTO invalid_values VALUES('\'-1\''); +INSERT INTO invalid_values VALUES('\'101\''); +INSERT INTO invalid_values VALUES('\'484436\''); --let $sys_var=ROCKSDB_WAL_BYTES_PER_SYNC ---let $read_only=1 +--let $read_only=0 --let $session=0 --source ../include/rocksdb_sys_var.inc + +DROP TABLE valid_values; +DROP TABLE invalid_values; diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index 7913e368e219..549cc42d9855 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -425,6 +425,14 @@ static void rocksdb_set_max_background_jobs(THD *thd, struct st_mysql_sys_var *const var, void *const var_ptr, const void *const save); +static void rocksdb_set_bytes_per_sync(THD *thd, + struct st_mysql_sys_var *const var, + void *const var_ptr, + const void *const save); +static void rocksdb_set_wal_bytes_per_sync(THD *thd, + struct st_mysql_sys_var *const var, + void *const var_ptr, + const void *const save); ////////////////////////////////////////////////////////////////////////////// // Options definitions ////////////////////////////////////////////////////////////////////////////// @@ -1039,16 +1047,18 @@ static MYSQL_SYSVAR_BOOL( rocksdb_db_options->use_adaptive_mutex); static MYSQL_SYSVAR_ULONG(bytes_per_sync, rocksdb_db_options->bytes_per_sync, - PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY, + PLUGIN_VAR_RQCMDARG, "DBOptions::bytes_per_sync for RocksDB", nullptr, - nullptr, rocksdb_db_options->bytes_per_sync, + rocksdb_set_bytes_per_sync, + rocksdb_db_options->bytes_per_sync, /* min */ 0L, /* max */ LONG_MAX, 0); static MYSQL_SYSVAR_ULONG(wal_bytes_per_sync, rocksdb_db_options->wal_bytes_per_sync, - PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY, + PLUGIN_VAR_RQCMDARG, "DBOptions::wal_bytes_per_sync for RocksDB", nullptr, - nullptr, rocksdb_db_options->wal_bytes_per_sync, + rocksdb_set_wal_bytes_per_sync, + rocksdb_db_options->wal_bytes_per_sync, /* min */ 0L, /* max */ LONG_MAX, 0); static MYSQL_SYSVAR_BOOL( @@ -11753,6 +11763,62 @@ static void rocksdb_set_max_background_jobs(THD *thd, RDB_MUTEX_UNLOCK_CHECK(rdb_sysvars_mutex); } +static void rocksdb_set_bytes_per_sync( + THD *thd MY_ATTRIBUTE((__unused__)), + struct st_mysql_sys_var *const var MY_ATTRIBUTE((__unused__)), + void *const var_ptr MY_ATTRIBUTE((__unused__)), const void *const save) { + DBUG_ASSERT(save != nullptr); + DBUG_ASSERT(rocksdb_db_options != nullptr); + DBUG_ASSERT(rocksdb_db_options->env != nullptr); + + RDB_MUTEX_LOCK_CHECK(rdb_sysvars_mutex); + + const ulonglong new_val = *static_cast(save); + + if (rocksdb_db_options->bytes_per_sync != new_val) { + rocksdb_db_options->bytes_per_sync = new_val; + rocksdb::Status s = + rdb->SetDBOptions({{"bytes_per_sync", std::to_string(new_val)}}); + + if (!s.ok()) { + /* NO_LINT_DEBUG */ + sql_print_warning("MyRocks: failed to update max_background_jobs. " + "Status code = %d, status = %s.", + s.code(), s.ToString().c_str()); + } + } + + RDB_MUTEX_UNLOCK_CHECK(rdb_sysvars_mutex); +} + +static void rocksdb_set_wal_bytes_per_sync( + THD *thd MY_ATTRIBUTE((__unused__)), + struct st_mysql_sys_var *const var MY_ATTRIBUTE((__unused__)), + void *const var_ptr MY_ATTRIBUTE((__unused__)), const void *const save) { + DBUG_ASSERT(save != nullptr); + DBUG_ASSERT(rocksdb_db_options != nullptr); + DBUG_ASSERT(rocksdb_db_options->env != nullptr); + + RDB_MUTEX_LOCK_CHECK(rdb_sysvars_mutex); + + const ulonglong new_val = *static_cast(save); + + if (rocksdb_db_options->wal_bytes_per_sync != new_val) { + rocksdb_db_options->wal_bytes_per_sync = new_val; + rocksdb::Status s = + rdb->SetDBOptions({{"wal_bytes_per_sync", std::to_string(new_val)}}); + + if (!s.ok()) { + /* NO_LINT_DEBUG */ + sql_print_warning("MyRocks: failed to update max_background_jobs. " + "Status code = %d, status = %s.", + s.code(), s.ToString().c_str()); + } + } + + RDB_MUTEX_UNLOCK_CHECK(rdb_sysvars_mutex); +} + void rocksdb_set_update_cf_options(THD *const /* unused */, struct st_mysql_sys_var *const /* unused */, void *const var_ptr, diff --git a/storage/rocksdb/rocksdb b/storage/rocksdb/rocksdb index ab0542f5ec6e..880411f54cdc 160000 --- a/storage/rocksdb/rocksdb +++ b/storage/rocksdb/rocksdb @@ -1 +1 @@ -Subproject commit ab0542f5ec6e7c7e405267eaa2e2a603a77d570b +Subproject commit 880411f54cdcb8da216722bc2f7bbe9ae6859e00 From 0eda9f73edf3479a03af8adf81ed348c4ada50c3 Mon Sep 17 00:00:00 2001 From: Manuel Ung Date: Wed, 4 Oct 2017 16:10:39 -0700 Subject: [PATCH 0453/1221] Fix auto_increment bugs with large values Upstream commit ID : fb-mysql-5.6.35/4d66a663abfa60c6c1739d0612959b3457b5f2b1 MYR-198 : Merge prod201704 Summary: Fix auto_increment bugs with large values Percona Server: Differences in 5.6->5.7 default strictness required changes to the test case and manual testing to ensure that MyRocks autoinc behaves like InnoDB. There are currently a few related bugs in our autoincrement implementation relating to large values. 1. When inserting values larger than LLONG_MAX, we do not bump the autoincrement counter on the table because we are using signed 64bit integers to store autoincrement. Fix by converting to use ulonglong. 2. When `auto_increment_increment` is set, and the next number in the sequence is larger than ULLONG_MAX, we are not currently do not error out, and instead insert smaller values, due to underflow. Fix by calculating next value more carefully, and return ULLONG_MAX when limit is reached, so that the server can handle appropriately. 3. `get_auto_increment` can return values that are greater than the maximum allowed value for the column type. Although the SQL layer truncates the value, the value is still stored inside the SE, which means that SHOW CREATE TABLE can show invalid values from auto_increment columns. Closes https://github.com/facebook/mysql-5.6/pull/720 Differential Revision: D5955645 Pulled By: lth fbshipit-source-id: bac7562 --- .../suite/rocksdb/r/autoinc_vars.result | 79 +++++++++ .../suite/rocksdb/r/autoincrement.result | 1 - mysql-test/suite/rocksdb/r/issue255.result | 73 ++++++++- mysql-test/suite/rocksdb/t/autoinc_vars.test | 39 +++++ mysql-test/suite/rocksdb/t/autoincrement.test | 3 - mysql-test/suite/rocksdb/t/issue255.test | 42 ++++- storage/rocksdb/ha_rocksdb.cc | 154 ++++++++++++++---- storage/rocksdb/rdb_datadic.h | 2 +- 8 files changed, 349 insertions(+), 44 deletions(-) delete mode 100644 mysql-test/suite/rocksdb/r/autoincrement.result delete mode 100644 mysql-test/suite/rocksdb/t/autoincrement.test diff --git a/mysql-test/suite/rocksdb/r/autoinc_vars.result b/mysql-test/suite/rocksdb/r/autoinc_vars.result index 8d6023ff337c..179026a06854 100644 --- a/mysql-test/suite/rocksdb/r/autoinc_vars.result +++ b/mysql-test/suite/rocksdb/r/autoinc_vars.result @@ -70,3 +70,82 @@ SELECT a FROM t1 ORDER BY a; a 127 DROP TABLE t1; +#--------------------------- +# test large autoincrement values +#--------------------------- +SET auto_increment_increment = 1; +SET auto_increment_offset = 1; +CREATE TABLE t1 (a BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, b CHAR(8)) ENGINE=rocksdb; +INSERT INTO t1 VALUES (18446744073709551613, 'a'); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `b` char(8) DEFAULT NULL, + PRIMARY KEY (`a`) +) ENGINE=ROCKSDB AUTO_INCREMENT=18446744073709551614 DEFAULT CHARSET=latin1 +INSERT INTO t1 VALUES (NULL, 'b'); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `b` char(8) DEFAULT NULL, + PRIMARY KEY (`a`) +) ENGINE=ROCKSDB AUTO_INCREMENT=18446744073709551615 DEFAULT CHARSET=latin1 +INSERT INTO t1 VALUES (NULL, 'c'); +ERROR HY000: Failed to read auto-increment value from storage engine +SELECT * FROM t1; +a b +18446744073709551613 a +18446744073709551614 b +DROP TABLE t1; +SET auto_increment_increment = 300; +CREATE TABLE t1 (a BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, b CHAR(8)) ENGINE=rocksdb; +INSERT INTO t1 VALUES (18446744073709551613, 'a'); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `b` char(8) DEFAULT NULL, + PRIMARY KEY (`a`) +) ENGINE=ROCKSDB AUTO_INCREMENT=18446744073709551614 DEFAULT CHARSET=latin1 +INSERT INTO t1 VALUES (NULL, 'b'); +ERROR HY000: Failed to read auto-increment value from storage engine +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `b` char(8) DEFAULT NULL, + PRIMARY KEY (`a`) +) ENGINE=ROCKSDB AUTO_INCREMENT=18446744073709551615 DEFAULT CHARSET=latin1 +INSERT INTO t1 VALUES (NULL, 'c'); +ERROR HY000: Failed to read auto-increment value from storage engine +SELECT * FROM t1; +a b +18446744073709551613 a +DROP TABLE t1; +SET auto_increment_offset = 200; +CREATE TABLE t1 (a BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, b CHAR(8)) ENGINE=rocksdb; +INSERT INTO t1 VALUES (18446744073709551613, 'a'); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `b` char(8) DEFAULT NULL, + PRIMARY KEY (`a`) +) ENGINE=ROCKSDB AUTO_INCREMENT=18446744073709551614 DEFAULT CHARSET=latin1 +INSERT INTO t1 VALUES (NULL, 'b'); +ERROR HY000: Failed to read auto-increment value from storage engine +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `b` char(8) DEFAULT NULL, + PRIMARY KEY (`a`) +) ENGINE=ROCKSDB AUTO_INCREMENT=18446744073709551615 DEFAULT CHARSET=latin1 +INSERT INTO t1 VALUES (NULL, 'c'); +ERROR HY000: Failed to read auto-increment value from storage engine +SELECT * FROM t1; +a b +18446744073709551613 a +DROP TABLE t1; diff --git a/mysql-test/suite/rocksdb/r/autoincrement.result b/mysql-test/suite/rocksdb/r/autoincrement.result deleted file mode 100644 index 28b5b6cd0703..000000000000 --- a/mysql-test/suite/rocksdb/r/autoincrement.result +++ /dev/null @@ -1 +0,0 @@ -# The test checks AUTO_INCREMENT capabilities that are not supported by RocksDB-SE. diff --git a/mysql-test/suite/rocksdb/r/issue255.result b/mysql-test/suite/rocksdb/r/issue255.result index a40485196a6b..91d2c80203fc 100644 --- a/mysql-test/suite/rocksdb/r/issue255.result +++ b/mysql-test/suite/rocksdb/r/issue255.result @@ -3,19 +3,84 @@ INSERT INTO t1 VALUES (5); 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 ROCKSDB # Fixed 1 # # # # # 6 NULL NULL NULL latin1_swedish_ci NULL -INSERT INTO t1 VALUES ('538647864786478647864'); -ERROR 22003: Out of range value for column 'pk' at row 1 +INSERT INTO t1 VALUES (); +SELECT * FROM t1; +pk +5 +6 +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 ROCKSDB # Fixed 2 # # # # # 7 NULL NULL NULL latin1_swedish_ci NULL +INSERT INTO t1 VALUES (); +SELECT * FROM t1; +pk +5 +6 +7 +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 ROCKSDB # Fixed 3 # # # # # 8 NULL NULL NULL latin1_swedish_ci NULL +INSERT INTO t1 VALUES (10); +SELECT * FROM t1; +pk +5 +6 +7 +10 +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 ROCKSDB # Fixed 4 # # # # # 11 NULL NULL NULL latin1_swedish_ci NULL +INSERT INTO t1 VALUES (); +SELECT * FROM t1; +pk +5 +6 +7 +10 +11 +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 ROCKSDB # Fixed 5 # # # # # 12 NULL NULL NULL latin1_swedish_ci NULL +DROP TABLE t1; +CREATE TABLE t1 (pk TINYINT NOT NULL PRIMARY KEY AUTO_INCREMENT) ENGINE=ROCKSDB; +INSERT INTO t1 VALUES (5); 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 ROCKSDB # Fixed 1 # # # # # 6 NULL NULL NULL latin1_swedish_ci NULL +INSERT INTO t1 VALUES (127); +SELECT * FROM t1; +pk +5 +127 +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 ROCKSDB 10 Fixed 2 15 30 0 0 0 127 NULL NULL NULL latin1_swedish_ci NULL INSERT INTO t1 VALUES (); +ERROR 23000: Duplicate entry '127' for key 'PRIMARY' +SELECT * FROM t1; +pk +5 +127 +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 ROCKSDB # Fixed 2 # # # # # 127 NULL NULL NULL latin1_swedish_ci NULL INSERT INTO t1 VALUES(6); -ERROR 23000: Duplicate entry '6' for key 'PRIMARY' SELECT * FROM t1 ORDER BY pk; pk 5 6 +127 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 ROCKSDB # Fixed 2 # # # # # 7 NULL NULL NULL latin1_swedish_ci NULL +t1 ROCKSDB # Fixed 3 # # # # # 127 NULL NULL NULL latin1_swedish_ci NULL +INSERT INTO t1 VALUES (); +ERROR 23000: Duplicate entry '127' for key 'PRIMARY' +SELECT * FROM t1; +pk +5 +6 +127 +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 ROCKSDB # Fixed 3 # # # # # 127 NULL NULL NULL latin1_swedish_ci NULL DROP TABLE t1; diff --git a/mysql-test/suite/rocksdb/t/autoinc_vars.test b/mysql-test/suite/rocksdb/t/autoinc_vars.test index 241b0a667af3..dcdc8bb0b166 100644 --- a/mysql-test/suite/rocksdb/t/autoinc_vars.test +++ b/mysql-test/suite/rocksdb/t/autoinc_vars.test @@ -67,3 +67,42 @@ set session sql_mode=@orig_sql_mode; SELECT LAST_INSERT_ID(); SELECT a FROM t1 ORDER BY a; DROP TABLE t1; + +--echo #--------------------------- +--echo # test large autoincrement values +--echo #--------------------------- +SET auto_increment_increment = 1; +SET auto_increment_offset = 1; +CREATE TABLE t1 (a BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, b CHAR(8)) ENGINE=rocksdb; +INSERT INTO t1 VALUES (18446744073709551613, 'a'); +SHOW CREATE TABLE t1; +INSERT INTO t1 VALUES (NULL, 'b'); +SHOW CREATE TABLE t1; +--error ER_AUTOINC_READ_FAILED +INSERT INTO t1 VALUES (NULL, 'c'); +SELECT * FROM t1; +DROP TABLE t1; + +SET auto_increment_increment = 300; +CREATE TABLE t1 (a BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, b CHAR(8)) ENGINE=rocksdb; +INSERT INTO t1 VALUES (18446744073709551613, 'a'); +SHOW CREATE TABLE t1; +--error ER_AUTOINC_READ_FAILED +INSERT INTO t1 VALUES (NULL, 'b'); +SHOW CREATE TABLE t1; +--error ER_AUTOINC_READ_FAILED +INSERT INTO t1 VALUES (NULL, 'c'); +SELECT * FROM t1; +DROP TABLE t1; + +SET auto_increment_offset = 200; +CREATE TABLE t1 (a BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, b CHAR(8)) ENGINE=rocksdb; +INSERT INTO t1 VALUES (18446744073709551613, 'a'); +SHOW CREATE TABLE t1; +--error ER_AUTOINC_READ_FAILED +INSERT INTO t1 VALUES (NULL, 'b'); +SHOW CREATE TABLE t1; +--error ER_AUTOINC_READ_FAILED +INSERT INTO t1 VALUES (NULL, 'c'); +SELECT * FROM t1; +DROP TABLE t1; diff --git a/mysql-test/suite/rocksdb/t/autoincrement.test b/mysql-test/suite/rocksdb/t/autoincrement.test deleted file mode 100644 index 375571f705dd..000000000000 --- a/mysql-test/suite/rocksdb/t/autoincrement.test +++ /dev/null @@ -1,3 +0,0 @@ ---source include/have_rocksdb.inc - ---echo # The test checks AUTO_INCREMENT capabilities that are not supported by RocksDB-SE. diff --git a/mysql-test/suite/rocksdb/t/issue255.test b/mysql-test/suite/rocksdb/t/issue255.test index 418cac9f7e0b..852742998f28 100644 --- a/mysql-test/suite/rocksdb/t/issue255.test +++ b/mysql-test/suite/rocksdb/t/issue255.test @@ -6,16 +6,54 @@ INSERT INTO t1 VALUES (5); --replace_column 3 # 6 # 7 # 8 # 9 # 10 # SHOW TABLE STATUS LIKE 't1'; ---error ER_WARN_DATA_OUT_OF_RANGE -INSERT INTO t1 VALUES ('538647864786478647864'); +INSERT INTO t1 VALUES (); +SELECT * FROM t1; +--replace_column 3 # 6 # 7 # 8 # 9 # 10 # +SHOW TABLE STATUS LIKE 't1'; + +INSERT INTO t1 VALUES (); +SELECT * FROM t1; +--replace_column 3 # 6 # 7 # 8 # 9 # 10 # +SHOW TABLE STATUS LIKE 't1'; + +INSERT INTO t1 VALUES (10); +SELECT * FROM t1; --replace_column 3 # 6 # 7 # 8 # 9 # 10 # SHOW TABLE STATUS LIKE 't1'; INSERT INTO t1 VALUES (); +SELECT * FROM t1; +--replace_column 3 # 6 # 7 # 8 # 9 # 10 # +SHOW TABLE STATUS LIKE 't1'; + +DROP TABLE t1; + +CREATE TABLE t1 (pk TINYINT NOT NULL PRIMARY KEY AUTO_INCREMENT) ENGINE=ROCKSDB; + +INSERT INTO t1 VALUES (5); +--replace_column 3 # 6 # 7 # 8 # 9 # 10 # +SHOW TABLE STATUS LIKE 't1'; + +INSERT INTO t1 VALUES (127); +--replace_column 3 # 6 # 7 # 8 # 9 # 10 # +SELECT * FROM t1; +SHOW TABLE STATUS LIKE 't1'; + --error ER_DUP_ENTRY +INSERT INTO t1 VALUES (); +SELECT * FROM t1; +--replace_column 3 # 6 # 7 # 8 # 9 # 10 # +SHOW TABLE STATUS LIKE 't1'; + INSERT INTO t1 VALUES(6); SELECT * FROM t1 ORDER BY pk; --replace_column 3 # 6 # 7 # 8 # 9 # 10 # SHOW TABLE STATUS LIKE 't1'; +--error ER_DUP_ENTRY +INSERT INTO t1 VALUES (); +SELECT * FROM t1; +--replace_column 3 # 6 # 7 # 8 # 9 # 10 # +SHOW TABLE STATUS LIKE 't1'; + DROP TABLE t1; diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index 549cc42d9855..fe5223aeac9d 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -4160,6 +4160,50 @@ void ha_rocksdb::load_auto_incr_value() { release_scan_iterator(); } +/* + Inspired by innobase_get_int_col_max_value from InnoDB. This returns the + maximum value a type can take on. +*/ +static ulonglong rdb_get_int_col_max_value(const Field *field) { + ulonglong max_value = 0; + switch (field->key_type()) { + case HA_KEYTYPE_BINARY: + max_value = 0xFFULL; + break; + case HA_KEYTYPE_INT8: + max_value = 0x7FULL; + break; + case HA_KEYTYPE_USHORT_INT: + max_value = 0xFFFFULL; + break; + case HA_KEYTYPE_SHORT_INT: + max_value = 0x7FFFULL; + break; + case HA_KEYTYPE_UINT24: + max_value = 0xFFFFFFULL; + break; + case HA_KEYTYPE_INT24: + max_value = 0x7FFFFFULL; + break; + case HA_KEYTYPE_ULONG_INT: + max_value = 0xFFFFFFFFULL; + break; + case HA_KEYTYPE_LONG_INT: + max_value = 0x7FFFFFFFULL; + break; + case HA_KEYTYPE_ULONGLONG: + max_value = 0xFFFFFFFFFFFFFFFFULL; + break; + case HA_KEYTYPE_LONGLONG: + max_value = 0x7FFFFFFFFFFFFFFFULL; + break; + default: + abort_with_stack_traces(); + } + + return max_value; +} + /* Get PK value from table->record[0]. */ /* TODO(alexyang): No existing support for auto_increment on non-pk columns, see @@ -4168,25 +4212,29 @@ void ha_rocksdb::load_auto_incr_value() { */ void ha_rocksdb::update_auto_incr_val() { Field *field; - longlong new_val; + ulonglong new_val, max_val; field = table->key_info[table->s->next_number_index].key_part[0].field; + max_val = rdb_get_int_col_max_value(field); my_bitmap_map *const old_map = dbug_tmp_use_all_columns(table, table->read_set); new_val = field->val_int(); // don't increment if we would wrap around - if (new_val != std::numeric_limits::max()) { + if (new_val != max_val) { new_val++; } dbug_tmp_restore_column_map(table->read_set, old_map); - longlong auto_incr_val = m_tbl_def->m_auto_incr_val; - while (auto_incr_val < new_val && - !m_tbl_def->m_auto_incr_val.compare_exchange_weak(auto_incr_val, - new_val)) { - // Do nothing - just loop until auto_incr_val is >= new_val or - // we successfully set it + // Only update if positive value was set for auto_incr column. + if (new_val <= max_val) { + ulonglong auto_incr_val = m_tbl_def->m_auto_incr_val; + while (auto_incr_val < new_val && + !m_tbl_def->m_auto_incr_val.compare_exchange_weak(auto_incr_val, + new_val)) { + // Do nothing - just loop until auto_incr_val is >= new_val or + // we successfully set it + } } } @@ -10062,32 +10110,73 @@ void ha_rocksdb::get_auto_increment(ulonglong off, ulonglong inc, off = 1; } - longlong new_val; + Field *field; + ulonglong new_val, max_val; + field = table->key_info[table->s->next_number_index].key_part[0].field; + max_val = rdb_get_int_col_max_value(field); // Local variable reference to simplify code below - std::atomic &auto_incr = m_tbl_def->m_auto_incr_val; + auto &auto_incr = m_tbl_def->m_auto_incr_val; - if (inc == 1 && off == 1) { + if (inc == 1) { + DBUG_ASSERT(off == 1); // Optimization for the standard case where we are always simply // incrementing from the last position // Use CAS operation in a loop to make sure automically get the next auto - // increment value while ensuring tha we don't wrap around to a negative + // increment value while ensuring that we don't wrap around to a negative // number. + // + // We set auto_incr to the min of max_val and new_val + 1. This means that + // if we're at the maximum, we should be returning the same value for + // multiple rows, resulting in duplicate key errors (as expected). + // + // If we return values greater than the max, the SQL layer will "truncate" + // the value anyway, but it means that we store invalid values into + // auto_incr that will be visible in SHOW CREATE TABLE. new_val = auto_incr; - while (new_val != std::numeric_limits::max()) { - if (auto_incr.compare_exchange_weak(new_val, new_val + 1)) { + while (new_val != std::numeric_limits::max()) { + if (auto_incr.compare_exchange_weak(new_val, + std::min(new_val + 1, max_val))) { break; } } } else { - // The next value can be more complicated if either `inc` or 'off' is not 1 - longlong last_val = auto_incr; + // The next value can be more complicated if either 'inc' or 'off' is not 1 + ulonglong last_val = auto_incr; // Loop until we can correctly update the atomic value do { - if (((last_val - off) / inc) == - (std::numeric_limits::max() - off) / inc) { + DBUG_ASSERT(last_val > 0); + // Calculate the next value in the auto increment series: offset + // + N * increment where N is 0, 1, 2, ... + // + // For further information please visit: + // http://dev.mysql.com/doc/refman/5.7/en/replication-options-master.html + // + // The following is confusing so here is an explanation: + // To get the next number in the sequence above you subtract out the + // offset, calculate the next sequence (N * increment) and then add the + // offset back in. + // + // The additions are rearranged to avoid overflow. The following is + // equivalent to (last_val - 1 + inc - off) / inc. This uses the fact + // that (a+b)/c = a/c + b/c + (a%c + b%c)/c. To show why: + // + // (a+b)/c + // = (a - a%c + a%c + b - b%c + b%c) / c + // = (a - a%c) / c + (b - b%c) / c + (a%c + b%c) / c + // = a/c + b/c + (a%c + b%c) / c + // + // Now, substitute a = last_val - 1, b = inc - off, c = inc to get the + // following statement. + ulonglong n = + (last_val - 1) / inc + ((last_val - 1) % inc + inc - off) / inc; + + // Check if n * inc + off will overflow. This can only happen if we have + // an UNSIGNED BIGINT field. + if (n > (std::numeric_limits::max() - off) / inc) { + DBUG_ASSERT(max_val == std::numeric_limits::max()); // The 'last_val' value is already equal to or larger than the largest // value in the sequence. Continuing would wrap around (technically // the behavior would be undefined). What should we do? @@ -10099,31 +10188,30 @@ void ha_rocksdb::get_auto_increment(ulonglong off, ulonglong inc, // may not be in our sequence, but it is guaranteed to be equal // to or larger than any other value already inserted. // - // For now I'm going to take option @2. - new_val = std::numeric_limits::max(); + // For now I'm going to take option 2. + // + // Returning ULLONG_MAX from get_auto_increment will cause the SQL + // layer to fail with ER_AUTOINC_READ_FAILED. This means that due to + // the SE API for get_auto_increment, inserts will fail with + // ER_AUTOINC_READ_FAILED if the column is UNSIGNED BIGINT, but + // inserts will fail with ER_DUP_ENTRY for other types (or no failure + // if the column is in a non-unique SK). + new_val = std::numeric_limits::max(); auto_incr = new_val; // Store the largest value into auto_incr break; } - // Calculate the next value in the auto increment series: - // offset + N * increment - // where N is 0, 1, 2, ... - // - // For further information please visit: - // http://dev.mysql.com/doc/refman/5.7/en/replication-options-master.html - // - // The following is confusing so here is an explanation: - // To get the next number in the sequence above you subtract out - // the offset, calculate the next sequence (N * increment) and then add - // the offset back in. - new_val = (((last_val - off) + (inc - 1)) / inc) * inc + off; + new_val = n * inc + off; // Attempt to store the new value (plus 1 since m_auto_incr_val contains // the next available value) into the atomic value. If the current // value no longer matches what we have in 'last_val' this will fail and // we will repeat the loop (`last_val` will automatically get updated // with the current value). - } while (!auto_incr.compare_exchange_weak(last_val, new_val + 1)); + // + // See above explanation for inc == 1 for why we use std::min. + } while (!auto_incr.compare_exchange_weak(last_val, + std::min(new_val + 1, max_val))); } *first_value = new_val; diff --git a/storage/rocksdb/rdb_datadic.h b/storage/rocksdb/rdb_datadic.h index 007a1770bb3b..f1513213c2df 100644 --- a/storage/rocksdb/rdb_datadic.h +++ b/storage/rocksdb/rdb_datadic.h @@ -986,7 +986,7 @@ class Rdb_tbl_def { std::shared_ptr *m_key_descr_arr; std::atomic m_hidden_pk_val; - std::atomic m_auto_incr_val; + std::atomic m_auto_incr_val; /* Is this a system table */ bool m_is_mysql_system_table; From 217a1f621294d9ff851ca29b1112f4a4bf4132f8 Mon Sep 17 00:00:00 2001 From: Aliaksei Sandryhaila Date: Wed, 4 Oct 2017 16:31:35 -0700 Subject: [PATCH 0454/1221] Disable LeakSanitizer for mysqldump tests Upstream commit ID : fb-mysql-5.6.35/1833c7d49d93a741b4a05c3dae1c4f5da41b05f6 MYR-198 : Merge prod201704 Percona Server : - Skipped ASAN changes to tests as not an issue for current PS version. - Kept remainder of commit that advances the rocksdb submodule pointer. Summary: When building with gcc5, asan's LeakSanitizer reports a couple leaks in mysqldump. These should not be a concern and potentially go away once we migrate to a newer MySQL version. update-submodule: rocksdb Reviewed By: hermanlee Differential Revision: D5982238 fbshipit-source-id: 10f59e1 --- storage/rocksdb/rocksdb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage/rocksdb/rocksdb b/storage/rocksdb/rocksdb index 880411f54cdc..88ed1f6ea601 160000 --- a/storage/rocksdb/rocksdb +++ b/storage/rocksdb/rocksdb @@ -1 +1 @@ -Subproject commit 880411f54cdcb8da216722bc2f7bbe9ae6859e00 +Subproject commit 88ed1f6ea601b13b1eb416e50588ebe48dd93641 From 40393d2c0536e39725eec9f0096a657aa7ef81f9 Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Wed, 4 Oct 2017 20:20:00 -0700 Subject: [PATCH 0455/1221] =?UTF-8?q?[mysql-5.6][PR]=20Fix=20compiler=20wa?= =?UTF-8?q?rning/error=20"comparison=20of=20unsigned=20expression=20>=3D?= =?UTF-8?q?=200=20is=E2=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Upstream commit ID : fb-mysql-5.6.35/e9c633f2c9759a59bc86c5c97eb30e04b71a4098 MYR-198 : Merge prod201704 This is a NULL cherry-pick to Percona Server 5.7 to create the commit placeholder for the corresponding upstream commit. Reason: Change already applied to source tree through another patch. From 4a58b3142a8ba9a9c30a96daae69296f2af804ba Mon Sep 17 00:00:00 2001 From: Artem Danilov Date: Tue, 10 Oct 2017 08:18:24 -0700 Subject: [PATCH 0456/1221] Don't decode/unpack keys unless requested Upstream commit ID : fb-mysql-5.6.35/f63262b5cee849a62e729124b8b6e01bf044b171 MYR-198 : Merge prod201704 Summary: This branch checks gets rid of expensive decoding/unpacking of the key fields unless they requested by higher layers. The method can be further optimized to decode keys fields partially when not all fields of the key are requested but this branch doesn't tackle it as it would take more effort and gives improvement for much less cases. I've found one more implicit demand for unpacking/decoding key in addition to merge, which is update of auto increment value. Reviewed By: hermanlee Differential Revision: D5909811 fbshipit-source-id: 70f2bcd --- storage/rocksdb/ha_rocksdb.cc | 36 ++++++++++++++++++++++++----------- storage/rocksdb/ha_rocksdb.h | 6 ++++++ 2 files changed, 31 insertions(+), 11 deletions(-) diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index fe5223aeac9d..124615abf718 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -4132,6 +4132,7 @@ void ha_rocksdb::load_auto_incr_value() { index_last() creates a snapshot. When a snapshot is created here, it has to be released as well. (GitHub issue#189) */ + m_key_requested = true; // we need to unpack the key to load the value Rdb_transaction *const tx = get_or_create_tx(table->in_use); const bool is_new_snapshot = !tx->has_snapshot(); @@ -4677,12 +4678,12 @@ int ha_rocksdb::convert_record_to_storage_format( Setup which fields will be unpacked when reading rows @detail - Two special cases when we still unpack all fields: + Three special cases when we still unpack all fields: - When this table is being updated (m_lock_rows==RDB_LOCK_WRITE). - When @@rocksdb_verify_row_debug_checksums is ON (In this mode, we need to - read all - fields to find whether there is a row checksum at the end. We could skip - the fields instead of decoding them, but currently we do decoding.) + read all fields to find whether there is a row checksum at the end. We could + skip the fields instead of decoding them, but currently we do decoding.) + - On index merge as bitmap is cleared during that operation @seealso ha_rocksdb::setup_field_converters() @@ -4690,20 +4691,29 @@ int ha_rocksdb::convert_record_to_storage_format( */ void ha_rocksdb::setup_read_decoders() { m_decoders_vect.clear(); + m_key_requested = false; int last_useful = 0; int skip_size = 0; for (uint i = 0; i < table->s->fields; i++) { + // bitmap is cleared on index merge, but it still needs to decode columns + const bool field_requested = + m_lock_rows == RDB_LOCK_WRITE || m_verify_row_debug_checksums || + bitmap_is_clear_all(table->read_set) || + bitmap_is_set(table->read_set, table->field[i]->field_index); + // We only need the decoder if the whole record is stored. if (m_encoder_arr[i].m_storage_type != Rdb_field_encoder::STORE_ALL) { + // the field potentially needs unpacking + if (field_requested) { + // the field is in the read set + m_key_requested = true; + } continue; } - // bitmap is cleared on index merge, but it still needs to decode columns - if (m_lock_rows == RDB_LOCK_WRITE || m_verify_row_debug_checksums || - bitmap_is_clear_all(table->read_set) || - bitmap_is_set(table->read_set, table->field[i]->field_index)) { + if (field_requested) { // We will need to decode this field m_decoders_vect.push_back({&m_encoder_arr[i], true, skip_size}); last_useful = m_decoders_vect.size(); @@ -4944,9 +4954,13 @@ int ha_rocksdb::convert_record_from_storage_format( Rdb_key_def::get_unpack_header_size(unpack_info[0])); } - int err = m_pk_descr->unpack_record(table, buf, &rowkey_slice, - unpack_info ? &unpack_slice : nullptr, - false /* verify_checksum */); + int err = HA_EXIT_SUCCESS; + if (m_key_requested) { + err = m_pk_descr->unpack_record(table, buf, &rowkey_slice, + unpack_info ? &unpack_slice : nullptr, + false /* verify_checksum */); + } + if (err != HA_EXIT_SUCCESS) { return err; } diff --git a/storage/rocksdb/ha_rocksdb.h b/storage/rocksdb/ha_rocksdb.h index 81c52ce4c0bd..ff3246167670 100644 --- a/storage/rocksdb/ha_rocksdb.h +++ b/storage/rocksdb/ha_rocksdb.h @@ -687,6 +687,12 @@ class ha_rocksdb : public my_core::handler { */ std::vector m_decoders_vect; + /* + This tells if any field which is part of the key needs to be unpacked and + decoded. + */ + bool m_key_requested = false; + /* Setup field_decoders based on type of scan and table->read_set */ void setup_read_decoders(); From 3da6502ea7188996adb2faa774977e34509a27c8 Mon Sep 17 00:00:00 2001 From: Artem Danilov Date: Wed, 4 Oct 2017 18:10:43 -0700 Subject: [PATCH 0457/1221] Enter into a crash loop on detected data corruption Upstream commit ID : fb-mysql-5.6.35/c28e1997cff502147cf189ea1d71efdad44c9ee0 MYR-198 : Merge prod201704 Percona Server : - Corrected some minor spelling and grammar in error messages. - Fixed incorrect use of temp instance sent upstream in this pull request https://github.com/facebook/mysql-5.6/pull/765 Summary: The main idea of this branch is to keep server crashing during restarts once rocksdb reported data corruption. The other big change is to start check status of iterator. If the iterator goes to corrupted entry it becomes invalid and could look like EOF if status is not checked. This branch introduces this check and aborts the server if it finds corrupted value. One more case when an error could be surfaced is background operation. This branch starts logging this errors and abort if error is corruption. Once corruption is detected server writes marker file (named ROCKSDB_CORRUPTED) in the data directory and aborts. If marker files exists on server then process exists normally with error message so that mysqld_safe won't restart it. The restart failure can be switched of by starting mysqld with --rocksdb_allow_to_start_after_corruption=1 flag. Reviewed By: hermanlee Differential Revision: D5983297 fbshipit-source-id: 41e8b67 --- ...low_to_start_after_corruption_basic.result | 7 ++ ...allow_to_start_after_corruption_basic.test | 6 ++ .../r/allow_to_start_after_corruption.result | 38 ++++++++++ mysql-test/suite/rocksdb/r/rocksdb.result | 1 + .../t/allow_to_start_after_corruption.test | 71 ++++++++++++++++++ storage/rocksdb/event_listener.cc | 10 +++ storage/rocksdb/event_listener.h | 3 + storage/rocksdb/ha_rocksdb.cc | 75 +++++++++++++++++-- storage/rocksdb/ha_rocksdb.h | 4 + storage/rocksdb/rdb_utils.cc | 24 ++++++ storage/rocksdb/rdb_utils.h | 8 ++ 11 files changed, 240 insertions(+), 7 deletions(-) create mode 100644 mysql-test/suite/rocksdb.sys_vars/r/rocksdb_allow_to_start_after_corruption_basic.result create mode 100644 mysql-test/suite/rocksdb.sys_vars/t/rocksdb_allow_to_start_after_corruption_basic.test create mode 100644 mysql-test/suite/rocksdb/r/allow_to_start_after_corruption.result create mode 100644 mysql-test/suite/rocksdb/t/allow_to_start_after_corruption.test diff --git a/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_allow_to_start_after_corruption_basic.result b/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_allow_to_start_after_corruption_basic.result new file mode 100644 index 000000000000..086010dc79e0 --- /dev/null +++ b/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_allow_to_start_after_corruption_basic.result @@ -0,0 +1,7 @@ +SET @start_global_value = @@global.ROCKSDB_ALLOW_TO_START_AFTER_CORRUPTION; +SELECT @start_global_value; +@start_global_value +0 +"Trying to set variable @@global.ROCKSDB_ALLOW_TO_START_AFTER_CORRUPTION to 444. It should fail because it is readonly." +SET @@global.ROCKSDB_ALLOW_TO_START_AFTER_CORRUPTION = 444; +ERROR HY000: Variable 'rocksdb_allow_to_start_after_corruption' is a read only variable diff --git a/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_allow_to_start_after_corruption_basic.test b/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_allow_to_start_after_corruption_basic.test new file mode 100644 index 000000000000..64fb2458424d --- /dev/null +++ b/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_allow_to_start_after_corruption_basic.test @@ -0,0 +1,6 @@ +--source include/have_rocksdb.inc + +--let $sys_var=ROCKSDB_ALLOW_TO_START_AFTER_CORRUPTION +--let $read_only=1 +--let $session=0 +--source ../include/rocksdb_sys_var.inc diff --git a/mysql-test/suite/rocksdb/r/allow_to_start_after_corruption.result b/mysql-test/suite/rocksdb/r/allow_to_start_after_corruption.result new file mode 100644 index 000000000000..1142401e46d0 --- /dev/null +++ b/mysql-test/suite/rocksdb/r/allow_to_start_after_corruption.result @@ -0,0 +1,38 @@ +# +# Test how MyRocks behaves when RocksDB reports corrupted data. +# +# restart:--log-error=MYSQLTEST_VARDIR/tmp/allow_to_start_after_corruption_debug.err --rocksdb_allow_to_start_after_corruption=1 +# +# Test server crashes on corrupted data and restarts +# +create table t1 ( +pk int not null primary key, +col1 varchar(10) +) engine=rocksdb; +insert into t1 values (1,1),(2,2),(3,3); +select * from t1 where pk=1; +pk col1 +1 1 +set session debug= "+d,rocksdb_return_status_corrupted"; +select * from t1 where pk=1; +ERROR HY000: Lost connection to MySQL server during query +# +# The same for scan queries +# +# restart:--log-error=MYSQLTEST_VARDIR/tmp/allow_to_start_after_corruption_debug.err --rocksdb_allow_to_start_after_corruption=1 +select * from t1; +pk col1 +1 1 +2 2 +3 3 +set session debug= "+d,rocksdb_return_status_corrupted"; +select * from t1; +ERROR HY000: Lost connection to MySQL server during query +# +# Test restart failure. The server is shutdown at this point. +# +# +# Remove corruption file and restart cleanly +# +# restart +drop table t1; diff --git a/mysql-test/suite/rocksdb/r/rocksdb.result b/mysql-test/suite/rocksdb/r/rocksdb.result index 2892167467b2..c0d459a6a6ed 100644 --- a/mysql-test/suite/rocksdb/r/rocksdb.result +++ b/mysql-test/suite/rocksdb/r/rocksdb.result @@ -896,6 +896,7 @@ rocksdb_advise_random_on_open ON rocksdb_allow_concurrent_memtable_write OFF rocksdb_allow_mmap_reads OFF rocksdb_allow_mmap_writes OFF +rocksdb_allow_to_start_after_corruption OFF rocksdb_block_cache_size 536870912 rocksdb_block_restart_interval 16 rocksdb_block_size 4096 diff --git a/mysql-test/suite/rocksdb/t/allow_to_start_after_corruption.test b/mysql-test/suite/rocksdb/t/allow_to_start_after_corruption.test new file mode 100644 index 000000000000..ff6482925a02 --- /dev/null +++ b/mysql-test/suite/rocksdb/t/allow_to_start_after_corruption.test @@ -0,0 +1,71 @@ +--source include/have_rocksdb.inc +--source include/have_debug.inc + +--echo # +--echo # Test how MyRocks behaves when RocksDB reports corrupted data. +--echo # + +# use custom error log to assert on error message in search_pattern_in_file.inc +--let LOG=$MYSQLTEST_VARDIR/tmp/allow_to_start_after_corruption_debug.err +--let SEARCH_FILE=$LOG + +# restart server to change error log and ignore corruptopn on startup +--let $restart_parameters=restart:--log-error=$LOG --rocksdb_allow_to_start_after_corruption=1 +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--source include/restart_mysqld.inc + +--echo # +--echo # Test server crashes on corrupted data and restarts +--echo # +create table t1 ( + pk int not null primary key, + col1 varchar(10) +) engine=rocksdb; + +insert into t1 values (1,1),(2,2),(3,3); + +select * from t1 where pk=1; +set session debug= "+d,rocksdb_return_status_corrupted"; +--source include/expect_crash.inc +--error 2013 +select * from t1 where pk=1; +--source include/wait_until_disconnected.inc +--let SEARCH_PATTERN=data corruption detected +--source include/search_pattern_in_file.inc +--remove_file $LOG + +--echo # +--echo # The same for scan queries +--echo # + +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--source include/start_mysqld.inc +select * from t1; +set session debug= "+d,rocksdb_return_status_corrupted"; +--source include/expect_crash.inc +--error 2013 +select * from t1; +--source include/wait_until_disconnected.inc +--let SEARCH_PATTERN=data corruption detected +--source include/search_pattern_in_file.inc +--remove_file $LOG + +--echo # +--echo # Test restart failure. The server is shutdown at this point. +--echo # + +--error 0 +--exec $MYSQLD_CMD --log-error=$LOG $ROCKSDB_OPT $ROCKSDB_LOAD_ADD_PATH +--let SEARCH_PATTERN=The server will exit normally and stop restart attempts +--source include/search_pattern_in_file.inc +--remove_file $LOG + +--echo # +--echo # Remove corruption file and restart cleanly +--echo # + +--exec rm $MYSQLTEST_VARDIR/mysqld.$_server_id/data/.rocksdb/ROCKSDB_CORRUPTED +--let $restart_parameters= +--source include/start_mysqld.inc + +drop table t1; diff --git a/storage/rocksdb/event_listener.cc b/storage/rocksdb/event_listener.cc index 04c433acabea..6ee6268fcf05 100644 --- a/storage/rocksdb/event_listener.cc +++ b/storage/rocksdb/event_listener.cc @@ -81,4 +81,14 @@ void Rdb_event_listener::OnExternalFileIngested( DBUG_ASSERT(db != nullptr); update_index_stats(info.table_properties); } + +void Rdb_event_listener::OnBackgroundError( + rocksdb::BackgroundErrorReason reason, rocksdb::Status *status) { + rdb_log_status_error(*status, "Error detected in background"); + sql_print_error("RocksDB: BackgroundErrorReason: %d", (int)reason); + if (status->IsCorruption()) { + rdb_persist_corruption_marker(); + abort_with_stack_traces(); + } +} } // namespace myrocks diff --git a/storage/rocksdb/event_listener.h b/storage/rocksdb/event_listener.h index d535031644bc..8772105de365 100644 --- a/storage/rocksdb/event_listener.h +++ b/storage/rocksdb/event_listener.h @@ -37,6 +37,9 @@ class Rdb_event_listener : public rocksdb::EventListener { rocksdb::DB *db, const rocksdb::ExternalFileIngestionInfo &ingestion_info) override; + void OnBackgroundError(rocksdb::BackgroundErrorReason reason, + rocksdb::Status *status) override; + private: Rdb_ddl_manager *m_ddl_manager; diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index 124615abf718..b12413f5ace3 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -506,6 +506,7 @@ static my_bool rocksdb_enable_bulk_load_api = TRUE; static my_bool rpl_skip_tx_api_var = FALSE; static my_bool rocksdb_print_snapshot_conflict_queries = FALSE; static my_bool rocksdb_large_prefix = FALSE; +static my_bool rocksdb_allow_to_start_after_corruption = FALSE; std::atomic rocksdb_snapshot_conflict_errors(0); std::atomic rocksdb_wal_group_syncs(0); @@ -1455,6 +1456,12 @@ static MYSQL_SYSVAR_BOOL( "index prefix length is 767.", nullptr, nullptr, FALSE); +static MYSQL_SYSVAR_BOOL( + allow_to_start_after_corruption, rocksdb_allow_to_start_after_corruption, + PLUGIN_VAR_OPCMDARG | PLUGIN_VAR_READONLY, + "Allow server to start successfully when RocksDB corruption is detected.", + nullptr, nullptr, FALSE); + static const int ROCKSDB_ASSUMED_KEY_VALUE_DISK_SIZE = 100; static struct st_mysql_sys_var *rocksdb_system_variables[] = { @@ -1591,6 +1598,7 @@ static struct st_mysql_sys_var *rocksdb_system_variables[] = { MYSQL_SYSVAR(table_stats_sampling_pct), MYSQL_SYSVAR(large_prefix), + MYSQL_SYSVAR(allow_to_start_after_corruption), nullptr}; static rocksdb::WriteOptions @@ -3534,6 +3542,22 @@ static rocksdb::Status check_rocksdb_options_compatibility( static int rocksdb_init_func(void *const p) { DBUG_ENTER_FUNC(); + if (rdb_check_rocksdb_corruption()) { + sql_print_error("RocksDB: There was corruption detected in the RockDB data" + "files. Check error log emitted earlier for more details."); + if (rocksdb_allow_to_start_after_corruption) { + sql_print_information( + "RocksDB: Set rocksdb_allow_to_start_after_corruption=0 to prevent " + "server from starting when RocksDB data corruption is detected."); + } else { + sql_print_error("RocksDB: The server will exit normally and stop restart " + "attempts. Remove %s file from data directory and " + "start mysqld manually.", + rdb_corruption_marker_file_name().c_str()); + exit(0); + } + } + // Validate the assumption about the size of ROCKSDB_SIZEOF_HIDDEN_PK_COLUMN. static_assert(sizeof(longlong) == 8, "Assuming that longlong is 8 bytes."); @@ -4039,6 +4063,33 @@ static inline void rocksdb_smart_next(bool seek_backward, } } +#ifndef NDEBUG +// simulate that RocksDB has reported corrupted data +static void dbug_change_status_to_corrupted(rocksdb::Status *status) { + *status = rocksdb::Status::Corruption(); +} +#endif + +// If the iterator is not valid it might be because of EOF but might be due +// to IOError or corruption. The good practice is always check it. +// https://github.com/facebook/rocksdb/wiki/Iterator#error-handling +static inline bool is_valid(rocksdb::Iterator *scan_it) { + if (scan_it->Valid()) { + return true; + } else { + rocksdb::Status s = scan_it->status(); + DBUG_EXECUTE_IF("rocksdb_return_status_corrupted", + dbug_change_status_to_corrupted(&s);); + if (s.IsIOError() || s.IsCorruption()) { + if (s.IsCorruption()) { + rdb_persist_corruption_marker(); + } + rdb_handle_io_error(s, RDB_IO_ERROR_GENERAL); + } + return false; + } +} + /** @brief Example of simple lock controls. The "table_handler" it creates is a @@ -6473,7 +6524,7 @@ int ha_rocksdb::read_before_key(const Rdb_key_def &kd, */ rocksdb_smart_seek(!kd.m_is_reverse_cf, m_scan_it, key_slice); - while (m_scan_it->Valid()) { + while (is_valid(m_scan_it)) { /* We are using full key and we've hit an exact match, or... @@ -6513,12 +6564,12 @@ int ha_rocksdb::read_after_key(const Rdb_key_def &kd, from the POV of the current transaction. If it has, try going to the next key. */ - while (m_scan_it->Valid() && kd.has_ttl() && + while (is_valid(m_scan_it) && kd.has_ttl() && should_hide_ttl_rec(kd, m_scan_it->value(), ttl_filter_ts)) { rocksdb_smart_next(kd.m_is_reverse_cf, m_scan_it); } - return m_scan_it->Valid() ? HA_EXIT_SUCCESS : HA_ERR_KEY_NOT_FOUND; + return is_valid(m_scan_it) ? HA_EXIT_SUCCESS : HA_ERR_KEY_NOT_FOUND; } int ha_rocksdb::position_to_correct_key( @@ -6777,7 +6828,7 @@ int ha_rocksdb::secondary_index_read(const int keyno, uchar *const buf) { /* Use STATUS_NOT_FOUND when record not found or some error occurred */ table->status = STATUS_NOT_FOUND; - if (m_scan_it->Valid()) { + if (is_valid(m_scan_it)) { rocksdb::Slice key = m_scan_it->key(); /* Check if we've ran out of records of this index */ @@ -7079,7 +7130,7 @@ int ha_rocksdb::find_icp_matching_index_rec(const bool &move_forward, while (1) { rocksdb_skip_expired_records(kd, m_scan_it, !move_forward); - if (!m_scan_it->Valid()) { + if (!is_valid(m_scan_it)) { table->status = STATUS_NOT_FOUND; return HA_ERR_END_OF_FILE; } @@ -7410,6 +7461,9 @@ int ha_rocksdb::get_row_by_rowid(uchar *const buf, const char *const rowid, &m_retrieved_record); } + DBUG_EXECUTE_IF("rocksdb_return_status_corrupted", + dbug_change_status_to_corrupted(&s);); + if (!s.IsNotFound() && !s.ok()) { DBUG_RETURN(tx->set_status_error(table->in_use, s, *m_pk_descr, m_tbl_def)); } @@ -8746,7 +8800,7 @@ int ha_rocksdb::rnd_next_with_direction(uchar *const buf, bool move_forward) { table->status = STATUS_NOT_FOUND; - if (!m_scan_it || !m_scan_it->Valid()) { + if (!m_scan_it || !is_valid(m_scan_it)) { /* We can get here when SQL layer has called @@ -8768,7 +8822,7 @@ int ha_rocksdb::rnd_next_with_direction(uchar *const buf, bool move_forward) { m_scan_it->Prev(); /* this call cannot fail */ } - if (!m_scan_it->Valid()) { + if (!is_valid(m_scan_it)) { rc = HA_ERR_END_OF_FILE; break; } @@ -11610,6 +11664,7 @@ void rdb_handle_io_error(const rocksdb::Status status, } } else if (status.IsCorruption()) { rdb_log_status_error(status, "data corruption detected!"); + rdb_persist_corruption_marker(); /* NO_LINT_DEBUG */ sql_print_error("MyRocks: aborting because of data corruption."); abort_with_stack_traces(); @@ -12082,6 +12137,12 @@ double ha_rocksdb::read_time(uint index, uint ranges, ha_rows rows) { DBUG_RETURN((rows / 20.0) + 1); } +std::string rdb_corruption_marker_file_name() { + std::string ret(rocksdb_datadir); + ret.append("/ROCKSDB_CORRUPTED"); + return ret; +} + } // namespace myrocks /* diff --git a/storage/rocksdb/ha_rocksdb.h b/storage/rocksdb/ha_rocksdb.h index ff3246167670..c1f92d40e5f2 100644 --- a/storage/rocksdb/ha_rocksdb.h +++ b/storage/rocksdb/ha_rocksdb.h @@ -1460,4 +1460,8 @@ struct Rdb_hton_init_state { mysql_rwlock_t m_rwlock; bool m_initialized; }; + +// file name indicating RocksDB data corruption +std::string rdb_corruption_marker_file_name(); + } // namespace myrocks diff --git a/storage/rocksdb/rdb_utils.cc b/storage/rocksdb/rdb_utils.cc index d37f1358f2d1..c660f9a8744f 100644 --- a/storage/rocksdb/rdb_utils.cc +++ b/storage/rocksdb/rdb_utils.cc @@ -340,4 +340,28 @@ std::vector split_into_vector(const std::string &input, return elems; } +bool rdb_check_rocksdb_corruption() { + return !my_access(myrocks::rdb_corruption_marker_file_name().c_str(), F_OK); +} + +void rdb_persist_corruption_marker() { + const std::string& fileName = myrocks::rdb_corruption_marker_file_name(); + int fd = my_open(fileName.c_str(), O_CREAT | O_SYNC, MYF(MY_WME)); + if (fd < 0) { + sql_print_error("RocksDB: Can't create file %s to mark rocksdb as " + "corrupted.", + fileName.c_str()); + } else { + sql_print_information("RocksDB: Creating the file %s to abort mysqld " + "restarts. Remove this file from the data directory " + "after fixing the corruption to recover. ", + fileName.c_str()); + } + + int ret = my_close(fd, MYF(MY_WME)); + if (ret) { + sql_print_error("RocksDB: Error (%d) closing the file %s", ret, fileName.c_str()); + } +} + } // namespace myrocks diff --git a/storage/rocksdb/rdb_utils.h b/storage/rocksdb/rdb_utils.h index 9e003ce671fd..f1aecb047462 100644 --- a/storage/rocksdb/rdb_utils.h +++ b/storage/rocksdb/rdb_utils.h @@ -246,6 +246,14 @@ inline void rdb_check_mutex_call_result(const char *function_name, void rdb_log_status_error(const rocksdb::Status &s, const char *msg = nullptr); +// return true if the marker file exists which indicates that the corruption +// has been detected +bool rdb_check_rocksdb_corruption(); + +// stores a marker file in the data directory so that after restart server +// is still aware that rocksdb data is corrupted +void rdb_persist_corruption_marker(); + /* Helper functions to parse strings. */ From ee20bafa3a4e8a001c98edc6ab20f29149c29b2f Mon Sep 17 00:00:00 2001 From: Herman Lee Date: Tue, 10 Oct 2017 17:27:52 -0700 Subject: [PATCH 0458/1221] Fix rocksdb.bulk_load_errors test flakiness Upstream commit ID : fb-mysql-5.6.35/2c391ce5cc018cc8ce8b2b5d632fb3969e3eb91b MYR-198 : Merge prod201704 This is a NULL cherry-pick to Percona Server 5.7 to create the commit placeholder for the corresponding upstream commit. Reason: Patch not taken into Percona Server and MyRocks affected code already applied to source tree through another patch. From 920f26be27a0a3dba165dbff923e5f97afe62217 Mon Sep 17 00:00:00 2001 From: Artem Danilov Date: Thu, 21 Sep 2017 10:22:54 -0700 Subject: [PATCH 0459/1221] Lazy bitmap initialization on hot path Upstream commit ID : fb-mysql-5.6.35/6ce9946ddb4facb87e7104f71134996795066048 MYR-198 : Merge prod201704 Summary: Unpack bitmap is needed only if row has covered bitmap which is not always the case. This diff moves this bitmap initialization to the code so that it is initialized only when it is actually used. Reviewed By: lth Differential Revision: D5882590 fbshipit-source-id: 32b3c3a --- storage/rocksdb/rdb_datadic.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage/rocksdb/rdb_datadic.cc b/storage/rocksdb/rdb_datadic.cc index 28a622badc08..3e64b017eb5c 100644 --- a/storage/rocksdb/rdb_datadic.cc +++ b/storage/rocksdb/rdb_datadic.cc @@ -1429,11 +1429,11 @@ int Rdb_key_def::unpack_record(TABLE *const table, uchar *const buf, MY_BITMAP covered_bitmap; my_bitmap_map covered_bits; uint curr_bitmap_pos = 0; - bitmap_init(&covered_bitmap, &covered_bits, MAX_REF_PARTS, false); const bool has_covered_bitmap = has_unpack_info && (unpack_header[0] == RDB_UNPACK_COVERED_DATA_TAG); if (has_covered_bitmap) { + bitmap_init(&covered_bitmap, &covered_bits, MAX_REF_PARTS, false); covered_bits = rdb_netbuf_to_uint16((const uchar *)unpack_header + sizeof(RDB_UNPACK_COVERED_DATA_TAG) + RDB_UNPACK_COVERED_DATA_LEN_SIZE); From 266a1e3372c4a10ec78da71f8d3d4fc123a84ca6 Mon Sep 17 00:00:00 2001 From: Archit Mishra Date: Wed, 11 Oct 2017 10:48:46 -0700 Subject: [PATCH 0460/1221] Implement persistent auto_increment values Upstream commit ID : fb-mysql-5.6.35/b016d55a315277c0adf07d330bdeb9172f283b44 MYR-198 : Merge prod201704 Summary: This implements persistent auto_increment values for MyRocks by adding a new data dictionary type for auto increment, and using the merge operator to calculate the latest auto increment. Closes https://github.com/facebook/mysql-5.6/issues/468 Closes https://github.com/facebook/mysql-5.6/pull/722 Differential Revision: D6003068 Pulled By: lth fbshipit-source-id: c7f7ed8 --- .../suite/rocksdb/r/autoinc_crash_safe.result | 86 ++++++ .../suite/rocksdb/r/autoinc_debug.result | 109 +++++++ mysql-test/suite/rocksdb/r/i_s_ddl.result | 3 +- .../rocksdb/t/autoinc_crash_safe-master.opt | 1 + .../rocksdb/t/autoinc_crash_safe-slave.opt | 1 + .../suite/rocksdb/t/autoinc_crash_safe.test | 130 +++++++++ .../suite/rocksdb/t/autoinc_debug-master.opt | 1 + mysql-test/suite/rocksdb/t/autoinc_debug.test | 118 ++++++++ storage/rocksdb/ha_rocksdb.cc | 266 +++++++++++++----- storage/rocksdb/ha_rocksdb.h | 9 +- storage/rocksdb/rdb_cf_options.cc | 8 + storage/rocksdb/rdb_cf_options.h | 3 + storage/rocksdb/rdb_datadic.cc | 147 +++++++++- storage/rocksdb/rdb_datadic.h | 120 ++++++++ storage/rocksdb/rdb_i_s.cc | 14 +- 15 files changed, 932 insertions(+), 84 deletions(-) create mode 100644 mysql-test/suite/rocksdb/r/autoinc_crash_safe.result create mode 100644 mysql-test/suite/rocksdb/r/autoinc_debug.result create mode 100644 mysql-test/suite/rocksdb/t/autoinc_crash_safe-master.opt create mode 100644 mysql-test/suite/rocksdb/t/autoinc_crash_safe-slave.opt create mode 100644 mysql-test/suite/rocksdb/t/autoinc_crash_safe.test create mode 100644 mysql-test/suite/rocksdb/t/autoinc_debug-master.opt create mode 100644 mysql-test/suite/rocksdb/t/autoinc_debug.test diff --git a/mysql-test/suite/rocksdb/r/autoinc_crash_safe.result b/mysql-test/suite/rocksdb/r/autoinc_crash_safe.result new file mode 100644 index 000000000000..c7c972643e39 --- /dev/null +++ b/mysql-test/suite/rocksdb/r/autoinc_crash_safe.result @@ -0,0 +1,86 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +# +# Testing concurrent transactions. +# +create table t (i int primary key auto_increment) engine=rocksdb; +begin; +insert into t values (); +begin; +insert into t values (); +begin; +insert into t values (); +insert into t values (); +insert into t values (); +insert into t values (); +commit; +rollback; +commit; +delete from t; +# Master value before restart +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; +table_schema table_name auto_increment +test t 7 +# Slave value before restart +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; +table_schema table_name auto_increment +test t 6 +include/stop_slave.inc +include/rpl_restart_server.inc [server_number=1] +# Master value after restart +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; +table_schema table_name auto_increment +test t 6 +include/rpl_restart_server.inc [server_number=2] +include/start_slave.inc +# Slave value after restart +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; +table_schema table_name auto_increment +test t 6 +# +# Testing interaction of merge markers with various DDL statements. +# +include/stop_slave.inc +# Drop and add primary key. +alter table t modify i int; +alter table t drop primary key; +alter table t add primary key (i); +alter table t modify i int auto_increment; +include/rpl_restart_server.inc [server_number=1] +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; +table_schema table_name auto_increment +test t 6 +# Remove auto_increment property. +alter table t modify i int; +include/rpl_restart_server.inc [server_number=1] +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; +table_schema table_name auto_increment +test t NULL +# Add auto_increment property. +insert into t values (123); +alter table t modify i int auto_increment; +include/rpl_restart_server.inc [server_number=1] +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; +table_schema table_name auto_increment +test t 124 +# Add column j. +alter table t add column j int; +include/rpl_restart_server.inc [server_number=1] +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; +table_schema table_name auto_increment +test t 124 +# Rename tables. +rename table t to t2; +rename table t2 to t; +include/rpl_restart_server.inc [server_number=1] +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; +table_schema table_name auto_increment +test t 124 +# Drop table. +drop table t; +include/rpl_restart_server.inc [server_number=1] +include/start_slave.inc +include/rpl_end.inc diff --git a/mysql-test/suite/rocksdb/r/autoinc_debug.result b/mysql-test/suite/rocksdb/r/autoinc_debug.result new file mode 100644 index 000000000000..dc015e053503 --- /dev/null +++ b/mysql-test/suite/rocksdb/r/autoinc_debug.result @@ -0,0 +1,109 @@ +# +# Testing upgrading from server without merges for auto_increment +# to new server with such support. +# +set debug='+d,myrocks_autoinc_upgrade'; +create table t (i int primary key auto_increment) engine=rocksdb; +insert into t values (); +insert into t values (); +insert into t values (); +select * from t; +i +1 +2 +3 +delete from t where i > 1; +select * from t; +i +1 +select table_name, index_name, auto_increment +from information_schema.rocksdb_ddl where table_name = 't'; +table_name index_name auto_increment +t PRIMARY NULL +set debug='-d,myrocks_autoinc_upgrade'; +# restart +insert into t values (); +insert into t values (); +insert into t values (); +select * from t; +i +1 +2 +3 +4 +select table_name, index_name, auto_increment +from information_schema.rocksdb_ddl where table_name = 't'; +table_name index_name auto_increment +t PRIMARY 5 +delete from t where i > 1; +# restart +insert into t values (); +insert into t values (); +insert into t values (); +select * from t; +i +1 +5 +6 +7 +drop table t; +# +# Testing crash safety of transactions. +# +create table t (i int primary key auto_increment) engine=rocksdb; +insert into t values (); +insert into t values (); +insert into t values (); +# Before anything +begin; +insert into t values (); +insert into t values (); +set debug="+d,crash_commit_before"; +commit; +ERROR HY000: Lost connection to MySQL server during query +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; +table_schema table_name auto_increment +test t 4 +select max(i) from t; +max(i) +3 +# After engine prepare +begin; +insert into t values (); +insert into t values (); +set debug="+d,crash_commit_after_prepare"; +commit; +ERROR HY000: Lost connection to MySQL server during query +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; +table_schema table_name auto_increment +test t 4 +select max(i) from t; +max(i) +3 +# After binlog +begin; +insert into t values (); +insert into t values (); +set debug="+d,crash_commit_after_log"; +commit; +ERROR HY000: Lost connection to MySQL server during query +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; +table_schema table_name auto_increment +test t 6 +select max(i) from t; +max(i) +5 +# After everything +begin; +insert into t values (); +insert into t values (); +set debug="+d,crash_commit_after"; +commit; +ERROR HY000: Lost connection to MySQL server during query +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; +table_schema table_name auto_increment +test t 8 +select max(i) from t; +max(i) +7 +drop table t; diff --git a/mysql-test/suite/rocksdb/r/i_s_ddl.result b/mysql-test/suite/rocksdb/r/i_s_ddl.result index afbc3a679958..b018c71aab13 100644 --- a/mysql-test/suite/rocksdb/r/i_s_ddl.result +++ b/mysql-test/suite/rocksdb/r/i_s_ddl.result @@ -11,7 +11,8 @@ ROCKSDB_DDL CREATE TEMPORARY TABLE `ROCKSDB_DDL` ( `KV_FORMAT_VERSION` smallint(2) NOT NULL DEFAULT '0', `TTL_DURATION` bigint(8) NOT NULL DEFAULT '0', `INDEX_FLAGS` bigint(8) NOT NULL DEFAULT '0', - `CF` varchar(193) NOT NULL DEFAULT '' + `CF` varchar(193) NOT NULL DEFAULT '', + `AUTO_INCREMENT` bigint(8) unsigned DEFAULT NULL ) ENGINE=MEMORY DEFAULT CHARSET=utf8 uninstall plugin rocksdb; select * from information_schema.rocksdb_ddl; diff --git a/mysql-test/suite/rocksdb/t/autoinc_crash_safe-master.opt b/mysql-test/suite/rocksdb/t/autoinc_crash_safe-master.opt new file mode 100644 index 000000000000..2672d4ff35e0 --- /dev/null +++ b/mysql-test/suite/rocksdb/t/autoinc_crash_safe-master.opt @@ -0,0 +1 @@ +--binlog_format=row diff --git a/mysql-test/suite/rocksdb/t/autoinc_crash_safe-slave.opt b/mysql-test/suite/rocksdb/t/autoinc_crash_safe-slave.opt new file mode 100644 index 000000000000..bce526df4a5a --- /dev/null +++ b/mysql-test/suite/rocksdb/t/autoinc_crash_safe-slave.opt @@ -0,0 +1 @@ +--binlog_format=row --slave_parallel_workers=1 diff --git a/mysql-test/suite/rocksdb/t/autoinc_crash_safe.test b/mysql-test/suite/rocksdb/t/autoinc_crash_safe.test new file mode 100644 index 000000000000..41904bea2a79 --- /dev/null +++ b/mysql-test/suite/rocksdb/t/autoinc_crash_safe.test @@ -0,0 +1,130 @@ +--source include/have_rocksdb.inc +--source include/have_binlog_format_row.inc +--source include/master-slave.inc +--source include/count_sessions.inc + +--echo # +--echo # Testing concurrent transactions. +--echo # + +create table t (i int primary key auto_increment) engine=rocksdb; + +connect (con1,localhost,root,,); +connect (con2,localhost,root,,); +connect (con3,localhost,root,,); + +connection con1; +begin; +insert into t values (); # 1 + +connection con2; +begin; +insert into t values (); # 2 + +connection con3; +begin; +insert into t values (); # 3 + +connection con1; +insert into t values (); # 4 + +connection con2; +insert into t values (); # 5 + +connection con3; +insert into t values (); # 6 + +connection con2; +commit; + +connection con3; +rollback; + +connection con1; +commit; + +delete from t; + +--echo # Master value before restart +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; + +--echo # Slave value before restart +sync_slave_with_master; +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; + +connection slave; +--source include/stop_slave.inc +--let $rpl_server_number = 1 +--source include/rpl_restart_server.inc + +connection default; +--echo # Master value after restart +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; + +--let $rpl_server_number = 2 +--source include/rpl_restart_server.inc + +connection slave; +--source include/start_slave.inc +--echo # Slave value after restart +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; + +disconnect con1; +disconnect con2; +disconnect con3; + +--echo # +--echo # Testing interaction of merge markers with various DDL statements. +--echo # +connection slave; +--source include/stop_slave.inc + +connection default; + +--echo # Drop and add primary key. +alter table t modify i int; +alter table t drop primary key; +alter table t add primary key (i); +alter table t modify i int auto_increment; + +--let $rpl_server_number = 1 +--source include/rpl_restart_server.inc +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; + +--echo # Remove auto_increment property. +alter table t modify i int; +--let $rpl_server_number = 1 +--source include/rpl_restart_server.inc +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; + +--echo # Add auto_increment property. +insert into t values (123); +alter table t modify i int auto_increment; +--let $rpl_server_number = 1 +--source include/rpl_restart_server.inc +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; + +--echo # Add column j. +alter table t add column j int; +--let $rpl_server_number = 1 +--source include/rpl_restart_server.inc +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; + +--echo # Rename tables. +rename table t to t2; +rename table t2 to t; + +--let $rpl_server_number = 1 +--source include/rpl_restart_server.inc +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; + +--echo # Drop table. +drop table t; + +--let $rpl_server_number = 1 +--source include/rpl_restart_server.inc + +connection slave; +--source include/start_slave.inc +--source include/rpl_end.inc +--source include/wait_until_count_sessions.inc diff --git a/mysql-test/suite/rocksdb/t/autoinc_debug-master.opt b/mysql-test/suite/rocksdb/t/autoinc_debug-master.opt new file mode 100644 index 000000000000..83ed8522e729 --- /dev/null +++ b/mysql-test/suite/rocksdb/t/autoinc_debug-master.opt @@ -0,0 +1 @@ +--binlog-format=row diff --git a/mysql-test/suite/rocksdb/t/autoinc_debug.test b/mysql-test/suite/rocksdb/t/autoinc_debug.test new file mode 100644 index 000000000000..614b7dda27ad --- /dev/null +++ b/mysql-test/suite/rocksdb/t/autoinc_debug.test @@ -0,0 +1,118 @@ +--source include/have_rocksdb.inc +--source include/have_debug.inc +--source include/have_log_bin.inc + +--echo # +--echo # Testing upgrading from server without merges for auto_increment +--echo # to new server with such support. +--echo # + +set debug='+d,myrocks_autoinc_upgrade'; +create table t (i int primary key auto_increment) engine=rocksdb; +insert into t values (); +insert into t values (); +insert into t values (); +select * from t; + +delete from t where i > 1; +select * from t; + +select table_name, index_name, auto_increment + from information_schema.rocksdb_ddl where table_name = 't'; + +set debug='-d,myrocks_autoinc_upgrade'; + +--source include/restart_mysqld.inc + +insert into t values (); +insert into t values (); +insert into t values (); +select * from t; + +select table_name, index_name, auto_increment + from information_schema.rocksdb_ddl where table_name = 't'; + +delete from t where i > 1; + +--source include/restart_mysqld.inc + +insert into t values (); +insert into t values (); +insert into t values (); +select * from t; + +drop table t; + +--echo # +--echo # Testing crash safety of transactions. +--echo # +create table t (i int primary key auto_increment) engine=rocksdb; +insert into t values (); +insert into t values (); +insert into t values (); + +--echo # Before anything +begin; +insert into t values (); +insert into t values (); +set debug="+d,crash_commit_before"; +--exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect +--error 2013 +commit; +--source include/wait_until_disconnected.inc +--enable_reconnect +--exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect +--source include/wait_until_connected_again.inc +--disable_reconnect +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; +select max(i) from t; + +--echo # After engine prepare +begin; +insert into t values (); +insert into t values (); +set debug="+d,crash_commit_after_prepare"; +--exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect +--error 2013 +commit; +--source include/wait_until_disconnected.inc +--enable_reconnect +--exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect +--source include/wait_until_connected_again.inc +--disable_reconnect +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; +select max(i) from t; + +--echo # After binlog +begin; +insert into t values (); +insert into t values (); +set debug="+d,crash_commit_after_log"; +--exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect +--error 2013 +commit; +--source include/wait_until_disconnected.inc +--enable_reconnect +--exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect +--source include/wait_until_connected_again.inc +--disable_reconnect +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; +select max(i) from t; + +--echo # After everything +begin; +insert into t values (); +insert into t values (); +set debug="+d,crash_commit_after"; +--exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect +--error 2013 +commit; +--source include/wait_until_disconnected.inc +--enable_reconnect +--exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect +--source include/wait_until_connected_again.inc +--disable_reconnect +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; +select max(i) from t; + +drop table t; diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index b12413f5ace3..15c5f969d818 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -1701,6 +1701,7 @@ class Rdb_transaction { protected: ulonglong m_write_count = 0; ulonglong m_lock_count = 0; + std::unordered_map m_auto_incr_map; bool m_is_delayed_snapshot = false; @@ -1731,7 +1732,30 @@ class Rdb_transaction { get_iterator(const rocksdb::ReadOptions &options, rocksdb::ColumnFamilyHandle *column_family) = 0; -public: + /* + @detail + This function takes in the WriteBatch of the transaction to add + all the AUTO_INCREMENT merges. It does so by iterating through + m_auto_incr_map and then constructing key/value pairs to call merge upon. + + @param wb + */ + rocksdb::Status merge_auto_incr_map(rocksdb::WriteBatchBase *const wb) { + DBUG_EXECUTE_IF("myrocks_autoinc_upgrade", return rocksdb::Status::OK();); + + // Iterate through the merge map merging all keys into data dictionary. + rocksdb::Status s; + for (auto &it : m_auto_incr_map) { + s = dict_manager.put_auto_incr_val(wb, it.first, it.second); + if (!s.ok()) { + return s; + } + } + m_auto_incr_map.clear(); + return s; + } + + public: int64_t m_snapshot_timestamp = 0; bool m_ddl_transaction; @@ -1996,6 +2020,20 @@ class Rdb_transaction { return false; } + void set_auto_incr(const GL_INDEX_ID &gl_index_id, ulonglong curr_id) { + m_auto_incr_map[gl_index_id] = + std::max(m_auto_incr_map[gl_index_id], curr_id); + } + +#ifndef NDEBUG + ulonglong get_auto_incr(const GL_INDEX_ID &gl_index_id) { + if (m_auto_incr_map.count(gl_index_id) > 0) { + return m_auto_incr_map[gl_index_id]; + } + return 0; + } +#endif + virtual rocksdb::Status put(rocksdb::ColumnFamilyHandle *const column_family, const rocksdb::Slice &key, const rocksdb::Slice &value) = 0; @@ -2152,6 +2190,12 @@ class Rdb_transaction_impl : public Rdb_transaction { return false; } + s = merge_auto_incr_map(m_rocksdb_tx->GetWriteBatch()->GetWriteBatch()); + if (!s.ok()) { + rdb_handle_io_error(s, RDB_IO_ERROR_TX_COMMIT); + return false; + } + s = m_rocksdb_tx->Prepare(); if (!s.ok()) { rdb_handle_io_error(s, RDB_IO_ERROR_TX_COMMIT); @@ -2162,13 +2206,24 @@ class Rdb_transaction_impl : public Rdb_transaction { bool commit_no_binlog() override { bool res = false; + rocksdb::Status s; + + s = merge_auto_incr_map(m_rocksdb_tx->GetWriteBatch()->GetWriteBatch()); + if (!s.ok()) { + rdb_handle_io_error(s, RDB_IO_ERROR_TX_COMMIT); + res = true; + goto error; + } + release_snapshot(); - const rocksdb::Status s = m_rocksdb_tx->Commit(); + s = m_rocksdb_tx->Commit(); if (!s.ok()) { rdb_handle_io_error(s, RDB_IO_ERROR_TX_COMMIT); res = true; + goto error; } +error: /* Save the transaction object to be reused */ release_tx(); @@ -2183,6 +2238,7 @@ class Rdb_transaction_impl : public Rdb_transaction { void rollback() override { m_write_count = 0; m_lock_count = 0; + m_auto_incr_map.clear(); m_ddl_transaction = false; if (m_rocksdb_tx) { release_snapshot(); @@ -2420,13 +2476,24 @@ class Rdb_writebatch_impl : public Rdb_transaction { bool commit_no_binlog() override { bool res = false; + rocksdb::Status s; + + s = merge_auto_incr_map(m_batch->GetWriteBatch()); + if (!s.ok()) { + rdb_handle_io_error(s, RDB_IO_ERROR_TX_COMMIT); + res = true; + goto error; + } + release_snapshot(); - const rocksdb::Status s = - rdb->GetBaseDB()->Write(write_opts, m_batch->GetWriteBatch()); + + s = rdb->GetBaseDB()->Write(write_opts, m_batch->GetWriteBatch()); if (!s.ok()) { rdb_handle_io_error(s, RDB_IO_ERROR_TX_COMMIT); res = true; + goto error; } +error: reset(); m_write_count = 0; @@ -4172,46 +4239,6 @@ std::vector Rdb_open_tables_map::get_table_names(void) const { return names; } -void ha_rocksdb::load_auto_incr_value() { - const int save_active_index = active_index; - active_index = table->s->next_number_index; - const uint8 save_table_status = table->status; - - /* - load_auto_incr_value() may be called by statements that - do not execute implicit commits (i.e. SHOW CREATE TABLE). - index_last() creates a snapshot. When a snapshot is created - here, it has to be released as well. (GitHub issue#189) - */ - m_key_requested = true; // we need to unpack the key to load the value - Rdb_transaction *const tx = get_or_create_tx(table->in_use); - const bool is_new_snapshot = !tx->has_snapshot(); - - // Do a lookup. We only need index column, so it should be index-only. - // (another reason to make it index-only is that table->read_set is - // not set appropriately and non-index-only lookup will not read the value) - const bool save_keyread_only = m_keyread_only; - m_keyread_only = true; - - if (!index_last(table->record[0])) - update_auto_incr_val(); - - m_keyread_only = save_keyread_only; - if (is_new_snapshot) { - tx->release_snapshot(); - } - - table->status = save_table_status; - active_index = save_active_index; - - /* - Do what ha_rocksdb::index_end() does. - (Why don't we use index_init/index_end? class handler defines index_init - as private, for some reason). - */ - release_scan_iterator(); -} - /* Inspired by innobase_get_int_col_max_value from InnoDB. This returns the maximum value a type can take on. @@ -4256,13 +4283,103 @@ static ulonglong rdb_get_int_col_max_value(const Field *field) { return max_value; } -/* Get PK value from table->record[0]. */ -/* - TODO(alexyang): No existing support for auto_increment on non-pk columns, see - end of ha_rocksdb::create. Also see opened issue here: - https://github.com/facebook/mysql-5.6/issues/153 -*/ -void ha_rocksdb::update_auto_incr_val() { +void ha_rocksdb::load_auto_incr_value() { + ulonglong dd_val = 0; + bool validate_last = false; + bool autoinc_upgrade_test = false; + DBUG_EXECUTE_IF("myrocks_autoinc_upgrade", autoinc_upgrade_test = true;); +#ifndef NDEBUG + validate_last = true; +#endif + + if (!autoinc_upgrade_test && + dict_manager.get_auto_incr_val(m_tbl_def->get_autoincr_gl_index_id(), + &dd_val)) { + update_auto_incr_val(dd_val); + } + + // If we find nothing in the data dictionary, or if we are in debug mode, + // then call index_last to get the last value. + // + // This is needed when upgrading from a server that did not support + // persistent auto_increment, or when doing an alter table to add + // auto_increment property. + // + // For debug mode, we are just verifying that the data dictionary value is + // greater than or equal to the maximum value in the table. + if (dd_val == 0 || validate_last) { + const int save_active_index = active_index; + active_index = table->s->next_number_index; + const uint8 save_table_status = table->status; + + Rdb_transaction *const tx = get_or_create_tx(table->in_use); + const bool is_new_snapshot = !tx->has_snapshot(); + if (is_new_snapshot) { + tx->acquire_snapshot(true); + } + + // Do a lookup. We only need index column, so it should be index-only. + // (another reason to make it index-only is that table->read_set is not set + // appropriately and non-index-only lookup will not read the value) + const bool save_keyread_only = m_keyread_only; + m_keyread_only = true; + m_key_requested = true; + + if (!index_last(table->record[0])) { +#ifndef NDEBUG + Field *field = + table->key_info[table->s->next_number_index].key_part[0].field; + ulonglong max_val = rdb_get_int_col_max_value(field); + my_bitmap_map *const old_map = + dbug_tmp_use_all_columns(table, table->read_set); + ulonglong last_val = field->val_int(); + if (validate_last && last_val <= max_val) { + const auto &gl_index_id = m_tbl_def->get_autoincr_gl_index_id(); + // Reload data dictionary value in case value has changed since + // snapshot was acquired. + if (dict_manager.get_auto_incr_val(gl_index_id, &dd_val) && + tx->get_auto_incr(gl_index_id) == 0) { + DBUG_ASSERT(dd_val >= last_val); + } + } + dbug_tmp_restore_column_map(table->read_set, old_map); +#endif + + // If data dictionary is empty, but rows are found, then this might be + // a recently upgraded table. Use the value obtained from index_last. + if (dd_val == 0) { + update_auto_incr_val_from_field(); + } + } + + m_keyread_only = save_keyread_only; + if (is_new_snapshot) { + tx->release_snapshot(); + } + + table->status = save_table_status; + active_index = save_active_index; + + /* + Do what ha_rocksdb::index_end() does. + (Why don't we use index_init/index_end? class handler defines index_init + as private, for some reason). + */ + release_scan_iterator(); + } +} + +void ha_rocksdb::update_auto_incr_val(ulonglong val) { + ulonglong auto_incr_val = m_tbl_def->m_auto_incr_val; + while ( + auto_incr_val < val && + !m_tbl_def->m_auto_incr_val.compare_exchange_weak(auto_incr_val, val)) { + // Do nothing - just loop until auto_incr_val is >= val or we successfully + // set it + } +} + +void ha_rocksdb::update_auto_incr_val_from_field() { Field *field; ulonglong new_val, max_val; field = table->key_info[table->s->next_number_index].key_part[0].field; @@ -4280,13 +4397,11 @@ void ha_rocksdb::update_auto_incr_val() { // Only update if positive value was set for auto_incr column. if (new_val <= max_val) { - ulonglong auto_incr_val = m_tbl_def->m_auto_incr_val; - while (auto_incr_val < new_val && - !m_tbl_def->m_auto_incr_val.compare_exchange_weak(auto_incr_val, - new_val)) { - // Do nothing - just loop until auto_incr_val is >= new_val or - // we successfully set it - } + Rdb_transaction *const tx = get_or_create_tx(table->in_use); + tx->set_auto_incr(m_tbl_def->get_autoincr_gl_index_id(), new_val); + + // Update the in memory auto_incr value in m_tbl_def. + update_auto_incr_val(new_val); } } @@ -6395,6 +6510,20 @@ int ha_rocksdb::create(const char *const name, TABLE *const table_arg, m_pk_descr = m_key_descr_arr[pk_index(table_arg, m_tbl_def)]; + if (create_info->auto_increment_value) { + bool autoinc_upgrade_test = false; + m_tbl_def->m_auto_incr_val = create_info->auto_increment_value; + DBUG_EXECUTE_IF("myrocks_autoinc_upgrade", autoinc_upgrade_test = true;); + if (!autoinc_upgrade_test) { + auto s = dict_manager.put_auto_incr_val( + batch, m_tbl_def->get_autoincr_gl_index_id(), + m_tbl_def->m_auto_incr_val); + if (!s.ok()) { + goto error; + } + } + } + dict_manager.lock(); err = ddl_manager.put_and_write(m_tbl_def, batch); if (err != HA_EXIT_SUCCESS) { @@ -6410,23 +6539,6 @@ int ha_rocksdb::create(const char *const name, TABLE *const table_arg, dict_manager.unlock(); - if (create_info->auto_increment_value) - m_tbl_def->m_auto_incr_val = create_info->auto_increment_value; - - /* - We only support auto_increment at start of the PRIMARY KEY. - */ - // Field *field; - // if ((field= table_arg->next_number_field)) - /* TODO mdcallag: disable this for now to let UNIQUE indexes kind of work - if ((field= table_arg->found_next_number_field)) - { - int pk= table_arg->s->primary_key; - Field *pk_field= table_arg->key_info[pk].key_part[0].field; - if (field->field_index != pk_field->field_index) - DBUG_RETURN(HA_ERR_INTERNAL_ERROR); - } - */ DBUG_RETURN(HA_EXIT_SUCCESS); error: @@ -8434,7 +8546,7 @@ int ha_rocksdb::update_pk(const Rdb_key_def &kd, } if (table->next_number_field) { - update_auto_incr_val(); + update_auto_incr_val_from_field(); } int rc = HA_EXIT_SUCCESS; @@ -9733,6 +9845,7 @@ int ha_rocksdb::delete_table(const char *const tablename) { the persistent data dictionary). */ ddl_manager.remove(tbl, batch, true); + int err = dict_manager.commit(batch); if (err) { DBUG_RETURN(err); @@ -9842,6 +9955,7 @@ int ha_rocksdb::rename_table(const char *const from, const char *const to) { const std::unique_ptr wb = dict_manager.begin(); rocksdb::WriteBatch *const batch = wb.get(); dict_manager.lock(); + if (ddl_manager.rename(from_str, to_str, batch)) { rc = HA_ERR_ROCKSDB_INVALID_TABLE; } else { diff --git a/storage/rocksdb/ha_rocksdb.h b/storage/rocksdb/ha_rocksdb.h index c1f92d40e5f2..ebdca43db8f4 100644 --- a/storage/rocksdb/ha_rocksdb.h +++ b/storage/rocksdb/ha_rocksdb.h @@ -38,6 +38,7 @@ /* RocksDB header files */ #include "rocksdb/cache.h" +#include "rocksdb/merge_operator.h" #include "rocksdb/perf_context.h" #include "rocksdb/sst_file_manager.h" #include "rocksdb/statistics.h" @@ -258,6 +259,8 @@ constexpr uint64_t DEFAULT_SST_MGR_RATE_BYTES_PER_SEC = 0; */ #define ROCKSDB_SIZEOF_TTL_RECORD sizeof(longlong) +#define ROCKSDB_SIZEOF_AUTOINC_VALUE sizeof(longlong) + /* Maximum index prefix length in bytes. */ @@ -644,8 +647,12 @@ class ha_rocksdb : public my_core::handler { rowid_size, skip_ttl_check); } - void update_auto_incr_val(); void load_auto_incr_value(); + void update_auto_incr_val(ulonglong val); + void update_auto_incr_val_from_field(); + rocksdb::Status get_datadic_auto_incr(Rdb_transaction *const tx, + const GL_INDEX_ID &gl_index_id, + ulonglong *new_val) const; longlong update_hidden_pk_val(); int load_hidden_pk_value() MY_ATTRIBUTE((__warn_unused_result__)); int read_hidden_pk_id_from_rowkey(longlong *const hidden_pk_id) diff --git a/storage/rocksdb/rdb_cf_options.cc b/storage/rocksdb/rdb_cf_options.cc index 8f183882277f..a63d8d2ab866 100644 --- a/storage/rocksdb/rdb_cf_options.cc +++ b/storage/rocksdb/rdb_cf_options.cc @@ -323,6 +323,13 @@ Rdb_cf_options::get_cf_comparator(const std::string &cf_name) { } } +std::shared_ptr +Rdb_cf_options::get_cf_merge_operator(const std::string &cf_name) { + return (cf_name == DEFAULT_SYSTEM_CF_NAME) + ? std::make_shared() + : nullptr; +} + void Rdb_cf_options::get_cf_options(const std::string &cf_name, rocksdb::ColumnFamilyOptions *const opts) { DBUG_ASSERT(opts != nullptr); @@ -332,6 +339,7 @@ void Rdb_cf_options::get_cf_options(const std::string &cf_name, // Set the comparator according to 'rev:' opts->comparator = get_cf_comparator(cf_name); + opts->merge_operator = get_cf_merge_operator(cf_name); } } // namespace myrocks diff --git a/storage/rocksdb/rdb_cf_options.h b/storage/rocksdb/rdb_cf_options.h index fc72116a24bc..9aae8aded06c 100644 --- a/storage/rocksdb/rdb_cf_options.h +++ b/storage/rocksdb/rdb_cf_options.h @@ -64,6 +64,9 @@ class Rdb_cf_options { static const rocksdb::Comparator * get_cf_comparator(const std::string &cf_name); + std::shared_ptr + get_cf_merge_operator(const std::string &cf_name); + void get_cf_options(const std::string &cf_name, rocksdb::ColumnFamilyOptions *const opts); diff --git a/storage/rocksdb/rdb_datadic.cc b/storage/rocksdb/rdb_datadic.cc index 3e64b017eb5c..ae66c20fbd74 100644 --- a/storage/rocksdb/rdb_datadic.cc +++ b/storage/rocksdb/rdb_datadic.cc @@ -27,6 +27,7 @@ #include #include #include +#include #include #include @@ -3486,6 +3487,20 @@ void Rdb_tbl_def::set_name(const std::string &name) { check_if_is_mysql_system_table(); } +GL_INDEX_ID Rdb_tbl_def::get_autoincr_gl_index_id() { + for (uint i = 0; i < m_key_count; i++) { + auto &k = m_key_descr_arr[i]; + if (k->m_index_type == Rdb_key_def::INDEX_TYPE_PRIMARY || + k->m_index_type == Rdb_key_def::INDEX_TYPE_HIDDEN_PRIMARY) { + return k->get_gl_index_id(); + } + } + + // Every table must have a primary key, even if it's hidden. + abort_with_stack_traces(); + return GL_INDEX_ID(); +} + /* Static function of type my_hash_get_key that gets invoked by the m_ddl_hash object of type my_core::HASH. @@ -3711,6 +3726,68 @@ bool Rdb_validate_tbls::compare_to_actual_tables(const std::string &datadir, return result; } +/* + Validate that all auto increment values in the data dictionary are on a + supported version. +*/ +bool Rdb_ddl_manager::validate_auto_incr() { + std::unique_ptr it(m_dict->new_iterator()); + + uchar auto_incr_entry[Rdb_key_def::INDEX_NUMBER_SIZE]; + rdb_netbuf_store_index(auto_incr_entry, Rdb_key_def::AUTO_INC); + const rocksdb::Slice auto_incr_entry_slice( + reinterpret_cast(auto_incr_entry), + Rdb_key_def::INDEX_NUMBER_SIZE); + for (it->Seek(auto_incr_entry_slice); it->Valid(); it->Next()) { + const rocksdb::Slice key = it->key(); + const rocksdb::Slice val = it->value(); + GL_INDEX_ID gl_index_id; + + if (key.size() >= Rdb_key_def::INDEX_NUMBER_SIZE && + memcmp(key.data(), auto_incr_entry, Rdb_key_def::INDEX_NUMBER_SIZE)) + break; + + if (key.size() != Rdb_key_def::INDEX_NUMBER_SIZE * 3) { + return false; + } + + if (val.size() <= Rdb_key_def::VERSION_SIZE) { + return false; + } + + // Check if we have orphaned entries for whatever reason by cross + // referencing ddl entries. + auto ptr = reinterpret_cast(key.data()); + ptr += Rdb_key_def::INDEX_NUMBER_SIZE; + rdb_netbuf_read_gl_index(&ptr, &gl_index_id); + if (!m_dict->get_index_info(gl_index_id, nullptr)) { + // NO_LINT_DEBUG + sql_print_warning("RocksDB: AUTOINC mismatch - " + "Index number (%u, %u) found in AUTOINC " + "but does not exist as a DDL entry", + gl_index_id.cf_id, gl_index_id.index_id); + return false; + } + + ptr = reinterpret_cast(val.data()); + const int version = rdb_netbuf_read_uint16(&ptr); + if (version > Rdb_key_def::AUTO_INCREMENT_VERSION) { + // NO_LINT_DEBUG + sql_print_warning("RocksDB: AUTOINC mismatch - " + "Index number (%u, %u) found in AUTOINC " + "is on unsupported version %d", + gl_index_id.cf_id, gl_index_id.index_id, version); + return false; + } + } + + if (!it->status().ok()) { + return false; + } + + return true; +} + /* Validate that all the tables in the RocksDB database dictionary match the .frm files in the datadir @@ -3883,10 +3960,18 @@ bool Rdb_ddl_manager::init(Rdb_dict_manager *const dict_arg, If validate_tables is greater than 0 run the validation. Only fail the initialzation if the setting is 1. If the setting is 2 we continue. */ - if (validate_tables > 0 && !validate_schemas()) { - if (validate_tables == 1) { - sql_print_error("RocksDB: Problems validating data dictionary " - "against .frm files, exiting"); + if (validate_tables > 0) { + std::string msg; + if (!validate_schemas()) { + msg = "RocksDB: Problems validating data dictionary " + "against .frm files, exiting"; + } else if (!validate_auto_incr()) { + msg = "RocksDB: Problems validating auto increment values in " + "data dictionary, exiting"; + } + if (validate_tables == 1 && !msg.empty()) { + // NO_LINT_DEBUG + sql_print_error("%s", msg.c_str()); return true; } } @@ -4160,6 +4245,7 @@ bool Rdb_ddl_manager::rename(const std::string &from, const std::string &to, new_rec->m_auto_incr_val = rec->m_auto_incr_val.load(std::memory_order_relaxed); new_rec->m_key_descr_arr = rec->m_key_descr_arr; + // so that it's not free'd when deleting the old rec rec->m_key_descr_arr = nullptr; @@ -4361,13 +4447,16 @@ void Rdb_dict_manager::delete_index_info(rocksdb::WriteBatch *batch, const GL_INDEX_ID &gl_index_id) const { delete_with_prefix(batch, Rdb_key_def::INDEX_INFO, gl_index_id); delete_with_prefix(batch, Rdb_key_def::INDEX_STATISTICS, gl_index_id); + delete_with_prefix(batch, Rdb_key_def::AUTO_INC, gl_index_id); } bool Rdb_dict_manager::get_index_info( const GL_INDEX_ID &gl_index_id, struct Rdb_index_info *const index_info) const { - index_info->m_gl_index_id = gl_index_id; + if (index_info) { + index_info->m_gl_index_id = gl_index_id; + } bool found = false; bool error = false; @@ -4378,6 +4467,10 @@ bool Rdb_dict_manager::get_index_info( const rocksdb::Status &status = get_value(key, &value); if (status.ok()) { + if (!index_info) { + return true; + } + const uchar *const val = (const uchar *)value.c_str(); const uchar *ptr = val; index_info->m_index_dict_version = rdb_netbuf_to_uint16(val); @@ -4853,6 +4946,50 @@ Rdb_index_stats Rdb_dict_manager::get_stats(GL_INDEX_ID gl_index_id) const { return Rdb_index_stats(); } +rocksdb::Status +Rdb_dict_manager::put_auto_incr_val(rocksdb::WriteBatchBase *batch, + const GL_INDEX_ID &gl_index_id, + ulonglong val) const { + uchar key_buf[Rdb_key_def::INDEX_NUMBER_SIZE * 3] = {0}; + dump_index_id(key_buf, Rdb_key_def::AUTO_INC, gl_index_id); + const rocksdb::Slice key = + rocksdb::Slice(reinterpret_cast(key_buf), sizeof(key_buf)); + + // Value is constructed by storing the version and the value. + uchar value_buf[RDB_SIZEOF_AUTO_INCREMENT_VERSION + + ROCKSDB_SIZEOF_AUTOINC_VALUE] = {0}; + uchar *ptr = value_buf; + rdb_netbuf_store_uint16(ptr, Rdb_key_def::AUTO_INCREMENT_VERSION); + ptr += RDB_SIZEOF_AUTO_INCREMENT_VERSION; + rdb_netbuf_store_uint64(ptr, val); + ptr += ROCKSDB_SIZEOF_AUTOINC_VALUE; + const rocksdb::Slice value = + rocksdb::Slice(reinterpret_cast(value_buf), ptr - value_buf); + + return batch->Merge(m_system_cfh, key, value); +} + +bool Rdb_dict_manager::get_auto_incr_val(const GL_INDEX_ID &gl_index_id, + ulonglong *new_val) const { + uchar key_buf[Rdb_key_def::INDEX_NUMBER_SIZE * 3] = {0}; + dump_index_id(key_buf, Rdb_key_def::AUTO_INC, gl_index_id); + + std::string value; + const rocksdb::Status status = get_value( + rocksdb::Slice(reinterpret_cast(key_buf), sizeof(key_buf)), + &value); + + if (status.ok()) { + const uchar *const val = reinterpret_cast(value.data()); + + if (rdb_netbuf_to_uint16(val) <= Rdb_key_def::AUTO_INCREMENT_VERSION) { + *new_val = rdb_netbuf_to_uint64(val + RDB_SIZEOF_AUTO_INCREMENT_VERSION); + return true; + } + } + return false; +} + uint Rdb_seq_generator::get_and_update_next_number( Rdb_dict_manager *const dict) { DBUG_ASSERT(dict != nullptr); diff --git a/storage/rocksdb/rdb_datadic.h b/storage/rocksdb/rdb_datadic.h index f1513213c2df..682eaa81a106 100644 --- a/storage/rocksdb/rdb_datadic.h +++ b/storage/rocksdb/rdb_datadic.h @@ -132,6 +132,7 @@ constexpr size_t RDB_SIZEOF_INDEX_INFO_VERSION = sizeof(uint16); constexpr size_t RDB_SIZEOF_INDEX_TYPE = sizeof(uchar); constexpr size_t RDB_SIZEOF_KV_VERSION = sizeof(uint16); constexpr size_t RDB_SIZEOF_INDEX_FLAGS = sizeof(uint32); +constexpr size_t RDB_SIZEOF_AUTO_INCREMENT_VERSION = sizeof(uint16); // Possible return values for rdb_index_field_unpack_t functions. enum { @@ -377,6 +378,7 @@ class Rdb_key_def { INDEX_STATISTICS = 6, MAX_INDEX_ID = 7, DDL_CREATE_INDEX_ONGOING = 8, + AUTO_INC = 9, END_DICT_INDEX_ID = 255 }; @@ -389,6 +391,7 @@ class Rdb_key_def { DDL_DROP_INDEX_ONGOING_VERSION = 1, MAX_INDEX_ID_VERSION = 1, DDL_CREATE_INDEX_ONGOING_VERSION = 1, + AUTO_INCREMENT_VERSION = 1, // Version for index stats is stored in IndexStats struct }; @@ -998,6 +1001,7 @@ class Rdb_tbl_def { const std::string &base_dbname() const { return m_dbname; } const std::string &base_tablename() const { return m_tablename; } const std::string &base_partition() const { return m_partition; } + GL_INDEX_ID get_autoincr_gl_index_id(); }; /* @@ -1109,6 +1113,8 @@ class Rdb_ddl_manager { static void free_hash_elem(void *const data); bool validate_schemas(); + + bool validate_auto_incr(); }; /* @@ -1158,6 +1164,11 @@ class Rdb_ddl_manager { key: Rdb_key_def::DDL_CREATE_INDEX_ONGOING(0x8) + cf_id + index_id value: version + 9. auto_increment values + key: Rdb_key_def::AUTO_INC(0x9) + cf_id + index_id + value: version, {max auto_increment so far} + max auto_increment is 8 bytes + Data dictionary operations are atomic inside RocksDB. For example, when creating a table with two indexes, it is necessary to call Put three times. They have to be atomic. Rdb_dict_manager has a wrapper function @@ -1299,6 +1310,12 @@ class Rdb_dict_manager { void add_stats(rocksdb::WriteBatch *const batch, const std::vector &stats) const; Rdb_index_stats get_stats(GL_INDEX_ID gl_index_id) const; + + rocksdb::Status put_auto_incr_val(rocksdb::WriteBatchBase *batch, + const GL_INDEX_ID &gl_index_id, + ulonglong val) const; + bool get_auto_incr_val(const GL_INDEX_ID &gl_index_id, + ulonglong *new_val) const; }; struct Rdb_index_info { @@ -1312,4 +1329,107 @@ struct Rdb_index_info { bool rdb_is_collation_supported(const my_core::CHARSET_INFO *const cs); +/* + @brief + Merge Operator for the auto_increment value in the system_cf + + @detail + This class implements the rocksdb Merge Operator for auto_increment values + that are stored to the data dictionary every transaction. + + The actual Merge function is triggered on compaction, memtable flushes, or + when get() is called on the same key. + + */ +class Rdb_system_merge_op : public rocksdb::AssociativeMergeOperator { + public: + /* + Updates the new value associated with a key to be the maximum of the + passed in value and the existing value. + + @param[IN] key + @param[IN] existing_value existing value for a key; nullptr if nonexistent + key + @param[IN] value + @param[OUT] new_value new value after Merge + @param[IN] logger + */ + bool Merge(const rocksdb::Slice &key, const rocksdb::Slice *existing_value, + const rocksdb::Slice &value, std::string *new_value, + rocksdb::Logger *logger) const override { + DBUG_ASSERT(new_value != nullptr); + + if (key.size() != Rdb_key_def::INDEX_NUMBER_SIZE * 3 || + GetKeyType(key) != Rdb_key_def::AUTO_INC || + value.size() != + RDB_SIZEOF_AUTO_INCREMENT_VERSION + ROCKSDB_SIZEOF_AUTOINC_VALUE || + GetVersion(value) > Rdb_key_def::AUTO_INCREMENT_VERSION) { + abort_with_stack_traces(); + } + + uint64_t merged_value = Deserialize(value); + + if (existing_value != nullptr) { + if (existing_value->size() != RDB_SIZEOF_AUTO_INCREMENT_VERSION + + ROCKSDB_SIZEOF_AUTOINC_VALUE || + GetVersion(*existing_value) > Rdb_key_def::AUTO_INCREMENT_VERSION) { + abort_with_stack_traces(); + } + + merged_value = std::max(merged_value, Deserialize(*existing_value)); + } + Serialize(merged_value, new_value); + return true; + } + + virtual const char *Name() const override { return "Rdb_system_merge_op"; } + + private: + /* + Serializes the integer data to the new_value buffer or the target buffer + the merge operator will update to + */ + void Serialize(const uint64_t data, std::string *new_value) const { + uchar value_buf[RDB_SIZEOF_AUTO_INCREMENT_VERSION + + ROCKSDB_SIZEOF_AUTOINC_VALUE] = {0}; + uchar *ptr = value_buf; + /* fill in the auto increment version */ + rdb_netbuf_store_uint16(ptr, Rdb_key_def::AUTO_INCREMENT_VERSION); + ptr += RDB_SIZEOF_AUTO_INCREMENT_VERSION; + /* fill in the auto increment value */ + rdb_netbuf_store_uint64(ptr, data); + ptr += ROCKSDB_SIZEOF_AUTOINC_VALUE; + new_value->assign(reinterpret_cast(value_buf), ptr - value_buf); + } + + /* + Gets the value of auto_increment type in the data dictionary from the + value slice + + @Note Only to be used on data dictionary keys for the auto_increment type + */ + uint64_t Deserialize(const rocksdb::Slice &s) const { + return rdb_netbuf_to_uint64(reinterpret_cast(s.data()) + + RDB_SIZEOF_AUTO_INCREMENT_VERSION); + } + + /* + Gets the type of the key of the key in the data dictionary. + + @Note Only to be used on data dictionary keys for the auto_increment type + */ + uint16_t GetKeyType(const rocksdb::Slice &s) const { + return rdb_netbuf_to_uint32(reinterpret_cast(s.data())); + } + + /* + Gets the version of the auto_increment value in the data dictionary. + + @Note Only to be used on data dictionary value for the auto_increment type + */ + uint16_t GetVersion(const rocksdb::Slice &s) const { + return rdb_netbuf_to_uint16(reinterpret_cast(s.data())); + } +}; + } // namespace myrocks diff --git a/storage/rocksdb/rdb_i_s.cc b/storage/rocksdb/rdb_i_s.cc index 47b843f2a873..768a2a5f67e9 100644 --- a/storage/rocksdb/rdb_i_s.cc +++ b/storage/rocksdb/rdb_i_s.cc @@ -949,7 +949,8 @@ enum { KV_FORMAT_VERSION, TTL_DURATION, INDEX_FLAGS, - CF + CF, + AUTO_INCREMENT }; } // namespace RDB_DDL_FIELD @@ -967,6 +968,8 @@ static ST_FIELD_INFO rdb_i_s_ddl_fields_info[] = { ROCKSDB_FIELD_INFO("TTL_DURATION", sizeof(uint64), MYSQL_TYPE_LONGLONG, 0), ROCKSDB_FIELD_INFO("INDEX_FLAGS", sizeof(uint64), MYSQL_TYPE_LONGLONG, 0), ROCKSDB_FIELD_INFO("CF", NAME_LEN + 1, MYSQL_TYPE_STRING, 0), + ROCKSDB_FIELD_INFO("AUTO_INCREMENT", sizeof(uint64_t), MYSQL_TYPE_LONGLONG, + MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), ROCKSDB_FIELD_INFO_END}; int Rdb_ddl_scanner::add_table(Rdb_tbl_def *tdef) { @@ -977,6 +980,7 @@ int Rdb_ddl_scanner::add_table(Rdb_tbl_def *tdef) { DBUG_ASSERT(m_table != nullptr); Field **field = m_table->field; DBUG_ASSERT(field != nullptr); + const Rdb_dict_manager *dict_manager = rdb_get_dict_manager(); const std::string &dbname = tdef->base_dbname(); field[RDB_DDL_FIELD::TABLE_SCHEMA]->store(dbname.c_str(), dbname.size(), @@ -1013,6 +1017,14 @@ int Rdb_ddl_scanner::add_table(Rdb_tbl_def *tdef) { std::string cf_name = kd.get_cf()->GetName(); field[RDB_DDL_FIELD::CF]->store(cf_name.c_str(), cf_name.size(), system_charset_info); + ulonglong auto_incr; + if (dict_manager->get_auto_incr_val(tdef->get_autoincr_gl_index_id(), + &auto_incr)) { + field[RDB_DDL_FIELD::AUTO_INCREMENT]->set_notnull(); + field[RDB_DDL_FIELD::AUTO_INCREMENT]->store(auto_incr, true); + } else { + field[RDB_DDL_FIELD::AUTO_INCREMENT]->set_null(); + } ret = my_core::schema_table_store_record(m_thd, m_table); if (ret) From 046961a21aa4c0935cf821922cc2ca881fee68f9 Mon Sep 17 00:00:00 2001 From: Aliaksei Sandryhaila Date: Tue, 10 Oct 2017 16:24:47 -0700 Subject: [PATCH 0461/1221] Add a reverse CF test for unsorted bulkload Upstream commit ID : fb-mysql-5.6.35/78909f9bfcee66cd85913f64546c5d91d27dd22c MYR-198 : Merge prod201704 Percona Server : - Added big_test.inc to all big bulk load tests. Summary: Add a reverse CF test for unsorted bulkload, and force index in selects for consistency. update-submodule: rocksdb Depends on D5684756 Reviewed By: hermanlee Differential Revision: D6026211 fbshipit-source-id: 28d8eaf --- .../rocksdb/include/bulk_load_unsorted.inc | 144 ++++++++++++++++++ .../suite/rocksdb/r/bulk_load_unsorted.result | 58 ++++--- .../rocksdb/r/bulk_load_unsorted_rev.result | 126 +++++++++++++++ mysql-test/suite/rocksdb/t/bulk_load.test | 1 + .../suite/rocksdb/t/bulk_load_rev_cf.test | 1 + .../rocksdb/t/bulk_load_rev_cf_and_data.test | 1 + .../suite/rocksdb/t/bulk_load_rev_data.test | 1 + .../suite/rocksdb/t/bulk_load_unsorted.test | 134 +--------------- .../rocksdb/t/bulk_load_unsorted_rev.test | 6 + storage/rocksdb/rocksdb | 2 +- 10 files changed, 321 insertions(+), 153 deletions(-) create mode 100644 mysql-test/suite/rocksdb/include/bulk_load_unsorted.inc create mode 100644 mysql-test/suite/rocksdb/r/bulk_load_unsorted_rev.result create mode 100644 mysql-test/suite/rocksdb/t/bulk_load_unsorted_rev.test diff --git a/mysql-test/suite/rocksdb/include/bulk_load_unsorted.inc b/mysql-test/suite/rocksdb/include/bulk_load_unsorted.inc new file mode 100644 index 000000000000..212e4c2d6cd4 --- /dev/null +++ b/mysql-test/suite/rocksdb/include/bulk_load_unsorted.inc @@ -0,0 +1,144 @@ +--source include/count_sessions.inc + +SET rocksdb_bulk_load_size=3; +SET rocksdb_bulk_load_allow_unsorted=1; + +### Test individual INSERTs ### + +# A table with only a PK won't have rows until the bulk load is finished +eval CREATE TABLE t1(a INT, b INT, PRIMARY KEY(a) COMMENT "$pk_cf") + ENGINE=ROCKSDB; +SET rocksdb_bulk_load=1; +--disable_query_log +let $sign = 1; +let $max = 5; +let $i = 1; +while ($i <= $max) { + let $a = 1 + $sign * $i; + let $b = 1 - $sign * $i; + let $sign = -$sign; + let $insert = INSERT INTO t1 VALUES ($a, $b); + eval $insert; + inc $i; +} +--enable_query_log +SELECT * FROM t1 FORCE INDEX (PRIMARY); +SET rocksdb_bulk_load=0; +SELECT * FROM t1 FORCE INDEX (PRIMARY); +DROP TABLE t1; + +# A table with a PK and a SK shows rows immediately +eval CREATE TABLE t1(a INT, b INT, PRIMARY KEY(a) COMMENT "$pk_cf", KEY(b)) + ENGINE=ROCKSDB; +SET rocksdb_bulk_load=1; +--disable_query_log +let $sign = 1; +let $max = 5; +let $i = 1; +while ($i <= $max) { + let $a = 1 + $sign * $i; + let $b = 1 - $sign * $i; + let $sign = -$sign; + let $insert = INSERT INTO t1 VALUES ($a, $b); + eval $insert; + inc $i; +} +--enable_query_log + +SELECT * FROM t1 FORCE INDEX (PRIMARY); +SET rocksdb_bulk_load=0; +SELECT * FROM t1 FORCE INDEX (PRIMARY); +DROP TABLE t1; + +# Inserting into another table finishes bulk load to the previous table +eval CREATE TABLE t1(a INT, b INT, PRIMARY KEY(a) COMMENT "$pk_cf") + ENGINE=ROCKSDB; +eval CREATE TABLE t2(a INT, b INT, PRIMARY KEY(a) COMMENT "$pk_cf") + ENGINE=ROCKSDB; + +SET rocksdb_bulk_load=1; +INSERT INTO t1 VALUES (1,1); +INSERT INTO t2 VALUES (1,1); +SELECT * FROM t1 FORCE INDEX (PRIMARY); +INSERT INTO t1 VALUES (2,2); +SELECT * FROM t2 FORCE INDEX (PRIMARY); +SELECT * FROM t1 FORCE INDEX (PRIMARY); +SET rocksdb_bulk_load=0; +SELECT * FROM t1 FORCE INDEX (PRIMARY); +DROP TABLE t1, t2; + +### Test bulk load from a file ### +eval CREATE TABLE t1(a INT, b INT, PRIMARY KEY(a) COMMENT "$pk_cf") + ENGINE=ROCKSDB; +eval CREATE TABLE t2(a INT, b INT, PRIMARY KEY(b) COMMENT "$pk_cf") + ENGINE=ROCKSDB; +eval CREATE TABLE t3(a INT, b INT, PRIMARY KEY(a) COMMENT "$pk_cf") + ENGINE=ROCKSDB PARTITION BY KEY() PARTITIONS 4; + +--let $file = `SELECT CONCAT(@@datadir, "test_loadfile.txt")` +# Create a text file with data to import into the table. +# PK and SK are not in any order +--let ROCKSDB_INFILE = $file +perl; +my $fn = $ENV{'ROCKSDB_INFILE'}; +open(my $fh, '>', $fn) || die "perl open($fn): $!"; +my $max = 1000000; +my $sign = 1; +for (my $ii = 0; $ii < $max; $ii++) +{ + my $a = 1 + $sign * $ii; + my $b = 1 - $sign * $ii; + $sign = -$sign; + print $fh "$a\t$b\n"; +} +close($fh); +EOF +--file_exists $file + +# Make sure a snapshot held by another user doesn't block the bulk load +connect (other,localhost,root,,); +set session transaction isolation level repeatable read; +select * from information_schema.rocksdb_dbstats where stat_type='DB_NUM_SNAPSHOTS'; +start transaction with consistent snapshot; +select * from information_schema.rocksdb_dbstats where stat_type='DB_NUM_SNAPSHOTS'; + +connection default; +set rocksdb_bulk_load=1; +set rocksdb_bulk_load_size=100000; +--disable_query_log +--echo LOAD DATA INFILE INTO TABLE t1; +eval LOAD DATA INFILE '$file' INTO TABLE t1; +--echo LOAD DATA INFILE INTO TABLE t2; +eval LOAD DATA INFILE '$file' INTO TABLE t2; +--echo LOAD DATA INFILE INTO TABLE t3; +eval LOAD DATA INFILE '$file' INTO TABLE t3; +--enable_query_log +set rocksdb_bulk_load=0; + +--remove_file $file + +# Make sure row count index stats are correct +--replace_column 6 # 7 # 8 # 9 # 10 # +SHOW TABLE STATUS WHERE name LIKE 't%'; + +ANALYZE TABLE t1, t2, t3; + +--replace_column 6 # 7 # 8 # 9 # 10 # +SHOW TABLE STATUS WHERE name LIKE 't%'; + +# Make sure all the data is there. +select count(a) from t1; +select count(b) from t1; +select count(a) from t2; +select count(b) from t2; +select count(a) from t3; +select count(b) from t3; + +SELECT * FROM t1 FORCE INDEX (PRIMARY) LIMIT 3; +SELECT * FROM t2 FORCE INDEX (PRIMARY) LIMIT 3; + +disconnect other; + +DROP TABLE t1, t2, t3; + +--source include/wait_until_count_sessions.inc diff --git a/mysql-test/suite/rocksdb/r/bulk_load_unsorted.result b/mysql-test/suite/rocksdb/r/bulk_load_unsorted.result index 39fc2a78a930..aa53a00d3b5b 100644 --- a/mysql-test/suite/rocksdb/r/bulk_load_unsorted.result +++ b/mysql-test/suite/rocksdb/r/bulk_load_unsorted.result @@ -1,11 +1,12 @@ SET rocksdb_bulk_load_size=3; SET rocksdb_bulk_load_allow_unsorted=1; -CREATE TABLE t1(a INT, b INT, PRIMARY KEY(a) COMMENT "cf1") ENGINE=ROCKSDB; +CREATE TABLE t1(a INT, b INT, PRIMARY KEY(a) COMMENT "cf1") +ENGINE=ROCKSDB; SET rocksdb_bulk_load=1; -SELECT * FROM t1; +SELECT * FROM t1 FORCE INDEX (PRIMARY); a b SET rocksdb_bulk_load=0; -SELECT * FROM t1; +SELECT * FROM t1 FORCE INDEX (PRIMARY); a b -3 5 -1 3 @@ -13,42 +14,49 @@ a b 4 -2 6 -4 DROP TABLE t1; -CREATE TABLE t1(a INT, b INT, PRIMARY KEY(a) COMMENT "cf1", KEY(b)) ENGINE=ROCKSDB; +CREATE TABLE t1(a INT, b INT, PRIMARY KEY(a) COMMENT "cf1", KEY(b)) +ENGINE=ROCKSDB; SET rocksdb_bulk_load=1; -SELECT * FROM t1; +SELECT * FROM t1 FORCE INDEX (PRIMARY); a b -6 -4 -4 -2 -2 0 --1 3 --3 5 SET rocksdb_bulk_load=0; +SELECT * FROM t1 FORCE INDEX (PRIMARY); +a b +-3 5 +-1 3 +2 0 +4 -2 +6 -4 DROP TABLE t1; -CREATE TABLE t1(a INT, b INT, PRIMARY KEY(a) COMMENT "cf1") ENGINE=ROCKSDB; -CREATE TABLE t2(a INT, b INT, PRIMARY KEY(a) COMMENT "cf1") ENGINE=ROCKSDB; +CREATE TABLE t1(a INT, b INT, PRIMARY KEY(a) COMMENT "cf1") +ENGINE=ROCKSDB; +CREATE TABLE t2(a INT, b INT, PRIMARY KEY(a) COMMENT "cf1") +ENGINE=ROCKSDB; SET rocksdb_bulk_load=1; INSERT INTO t1 VALUES (1,1); INSERT INTO t2 VALUES (1,1); -SELECT * FROM t1; +SELECT * FROM t1 FORCE INDEX (PRIMARY); a b 1 1 INSERT INTO t1 VALUES (2,2); -SELECT * FROM t2; +SELECT * FROM t2 FORCE INDEX (PRIMARY); a b 1 1 -SELECT * FROM t1; +SELECT * FROM t1 FORCE INDEX (PRIMARY); a b 1 1 SET rocksdb_bulk_load=0; -SELECT * FROM t1; +SELECT * FROM t1 FORCE INDEX (PRIMARY); a b 1 1 2 2 DROP TABLE t1, t2; -CREATE TABLE t1(a INT, b INT, PRIMARY KEY(a) COMMENT "cf1") ENGINE=ROCKSDB; -CREATE TABLE t2(a INT, b INT, PRIMARY KEY(b) COMMENT "cf1") ENGINE=ROCKSDB; -CREATE TABLE t3(a INT, b INT, PRIMARY KEY(a) COMMENT "cf1") ENGINE=ROCKSDB -PARTITION BY KEY() PARTITIONS 4; +CREATE TABLE t1(a INT, b INT, PRIMARY KEY(a) COMMENT "cf1") +ENGINE=ROCKSDB; +CREATE TABLE t2(a INT, b INT, PRIMARY KEY(b) COMMENT "cf1") +ENGINE=ROCKSDB; +CREATE TABLE t3(a INT, b INT, PRIMARY KEY(a) COMMENT "cf1") +ENGINE=ROCKSDB PARTITION BY KEY() PARTITIONS 4; Warnings: Warning 1287 The partition engine, used by table 'test.t3', is deprecated and will be removed in a future release. Please use native partitioning instead. set session transaction isolation level repeatable read; @@ -105,4 +113,14 @@ count(a) select count(b) from t3; count(b) 1000000 +SELECT * FROM t1 FORCE INDEX (PRIMARY) LIMIT 3; +a b +-999998 1000000 +-999996 999998 +-999994 999996 +SELECT * FROM t2 FORCE INDEX (PRIMARY) LIMIT 3; +a b +999999 -999997 +999997 -999995 +999995 -999993 DROP TABLE t1, t2, t3; diff --git a/mysql-test/suite/rocksdb/r/bulk_load_unsorted_rev.result b/mysql-test/suite/rocksdb/r/bulk_load_unsorted_rev.result new file mode 100644 index 000000000000..447e83db65b9 --- /dev/null +++ b/mysql-test/suite/rocksdb/r/bulk_load_unsorted_rev.result @@ -0,0 +1,126 @@ +SET rocksdb_bulk_load_size=3; +SET rocksdb_bulk_load_allow_unsorted=1; +CREATE TABLE t1(a INT, b INT, PRIMARY KEY(a) COMMENT "rev:cf1") +ENGINE=ROCKSDB; +SET rocksdb_bulk_load=1; +SELECT * FROM t1 FORCE INDEX (PRIMARY); +a b +SET rocksdb_bulk_load=0; +SELECT * FROM t1 FORCE INDEX (PRIMARY); +a b +6 -4 +4 -2 +2 0 +-1 3 +-3 5 +DROP TABLE t1; +CREATE TABLE t1(a INT, b INT, PRIMARY KEY(a) COMMENT "rev:cf1", KEY(b)) +ENGINE=ROCKSDB; +SET rocksdb_bulk_load=1; +SELECT * FROM t1 FORCE INDEX (PRIMARY); +a b +SET rocksdb_bulk_load=0; +SELECT * FROM t1 FORCE INDEX (PRIMARY); +a b +6 -4 +4 -2 +2 0 +-1 3 +-3 5 +DROP TABLE t1; +CREATE TABLE t1(a INT, b INT, PRIMARY KEY(a) COMMENT "rev:cf1") +ENGINE=ROCKSDB; +CREATE TABLE t2(a INT, b INT, PRIMARY KEY(a) COMMENT "rev:cf1") +ENGINE=ROCKSDB; +SET rocksdb_bulk_load=1; +INSERT INTO t1 VALUES (1,1); +INSERT INTO t2 VALUES (1,1); +SELECT * FROM t1 FORCE INDEX (PRIMARY); +a b +1 1 +INSERT INTO t1 VALUES (2,2); +SELECT * FROM t2 FORCE INDEX (PRIMARY); +a b +1 1 +SELECT * FROM t1 FORCE INDEX (PRIMARY); +a b +1 1 +SET rocksdb_bulk_load=0; +SELECT * FROM t1 FORCE INDEX (PRIMARY); +a b +2 2 +1 1 +DROP TABLE t1, t2; +CREATE TABLE t1(a INT, b INT, PRIMARY KEY(a) COMMENT "rev:cf1") +ENGINE=ROCKSDB; +CREATE TABLE t2(a INT, b INT, PRIMARY KEY(b) COMMENT "rev:cf1") +ENGINE=ROCKSDB; +CREATE TABLE t3(a INT, b INT, PRIMARY KEY(a) COMMENT "rev:cf1") +ENGINE=ROCKSDB PARTITION BY KEY() PARTITIONS 4; +Warnings: +Warning 1287 The partition engine, used by table 'test.t3', is deprecated and will be removed in a future release. Please use native partitioning instead. +set session transaction isolation level repeatable read; +select * from information_schema.rocksdb_dbstats where stat_type='DB_NUM_SNAPSHOTS'; +STAT_TYPE VALUE +DB_NUM_SNAPSHOTS 0 +start transaction with consistent snapshot; +select * from information_schema.rocksdb_dbstats where stat_type='DB_NUM_SNAPSHOTS'; +STAT_TYPE VALUE +DB_NUM_SNAPSHOTS 1 +set rocksdb_bulk_load=1; +set rocksdb_bulk_load_size=100000; +LOAD DATA INFILE INTO TABLE t1; +LOAD DATA INFILE INTO TABLE t2; +LOAD DATA INFILE INTO TABLE t3; +Warnings: +Warning 1287 The partition engine, used by table 'test.t3', is deprecated and will be removed in a future release. Please use native partitioning instead. +set rocksdb_bulk_load=0; +SHOW TABLE STATUS WHERE name LIKE 't%'; +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 ROCKSDB 10 Fixed 1000000 # # # # # NULL NULL NULL NULL latin1_swedish_ci NULL +t2 ROCKSDB 10 Fixed 1000000 # # # # # NULL NULL NULL NULL latin1_swedish_ci NULL +t3 ROCKSDB 10 Fixed 1000000 # # # # # NULL NULL NULL NULL latin1_swedish_ci NULL partitioned +Warnings: +Warning 1287 The partition engine, used by table 'test.t3', is deprecated and will be removed in a future release. Please use native partitioning instead. +ANALYZE TABLE t1, t2, t3; +Table Op Msg_type Msg_text +test.t1 analyze status OK +test.t2 analyze status OK +test.t3 analyze status OK +test.t3 analyze warning The partition engine, used by table 'test.t3', is deprecated and will be removed in a future release. Please use native partitioning instead. +SHOW TABLE STATUS WHERE name LIKE 't%'; +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 ROCKSDB 10 Fixed 1000000 # # # # # NULL NULL NULL NULL latin1_swedish_ci NULL +t2 ROCKSDB 10 Fixed 1000000 # # # # # NULL NULL NULL NULL latin1_swedish_ci NULL +t3 ROCKSDB 10 Fixed 1000000 # # # # # NULL NULL NULL NULL latin1_swedish_ci NULL partitioned +Warnings: +Warning 1287 The partition engine, used by table 'test.t3', is deprecated and will be removed in a future release. Please use native partitioning instead. +select count(a) from t1; +count(a) +1000000 +select count(b) from t1; +count(b) +1000000 +select count(a) from t2; +count(a) +1000000 +select count(b) from t2; +count(b) +1000000 +select count(a) from t3; +count(a) +1000000 +select count(b) from t3; +count(b) +1000000 +SELECT * FROM t1 FORCE INDEX (PRIMARY) LIMIT 3; +a b +999999 -999997 +999997 -999995 +999995 -999993 +SELECT * FROM t2 FORCE INDEX (PRIMARY) LIMIT 3; +a b +-999998 1000000 +-999996 999998 +-999994 999996 +DROP TABLE t1, t2, t3; diff --git a/mysql-test/suite/rocksdb/t/bulk_load.test b/mysql-test/suite/rocksdb/t/bulk_load.test index 8b589bdbaedf..f5e893b304be 100644 --- a/mysql-test/suite/rocksdb/t/bulk_load.test +++ b/mysql-test/suite/rocksdb/t/bulk_load.test @@ -1,4 +1,5 @@ --source include/have_rocksdb.inc +--source include/big_test.inc --let pk_cf=cf1 --let data_order_desc=0 diff --git a/mysql-test/suite/rocksdb/t/bulk_load_rev_cf.test b/mysql-test/suite/rocksdb/t/bulk_load_rev_cf.test index 3180cf058d3f..25ebed9617bf 100644 --- a/mysql-test/suite/rocksdb/t/bulk_load_rev_cf.test +++ b/mysql-test/suite/rocksdb/t/bulk_load_rev_cf.test @@ -1,4 +1,5 @@ --source include/have_rocksdb.inc +--source include/big_test.inc --let pk_cf=rev:cf1 --let data_order_desc=0 diff --git a/mysql-test/suite/rocksdb/t/bulk_load_rev_cf_and_data.test b/mysql-test/suite/rocksdb/t/bulk_load_rev_cf_and_data.test index 82e0d1e7ba9e..5339fef84d51 100644 --- a/mysql-test/suite/rocksdb/t/bulk_load_rev_cf_and_data.test +++ b/mysql-test/suite/rocksdb/t/bulk_load_rev_cf_and_data.test @@ -1,4 +1,5 @@ --source include/have_rocksdb.inc +--source include/big_test.inc --let pk_cf=rev:cf1 --let data_order_desc=1 diff --git a/mysql-test/suite/rocksdb/t/bulk_load_rev_data.test b/mysql-test/suite/rocksdb/t/bulk_load_rev_data.test index 858e99cd1508..63943d6cc603 100644 --- a/mysql-test/suite/rocksdb/t/bulk_load_rev_data.test +++ b/mysql-test/suite/rocksdb/t/bulk_load_rev_data.test @@ -1,4 +1,5 @@ --source include/have_rocksdb.inc +--source include/big_test.inc --let pk_cf=cf1 --let data_order_desc=1 diff --git a/mysql-test/suite/rocksdb/t/bulk_load_unsorted.test b/mysql-test/suite/rocksdb/t/bulk_load_unsorted.test index ef9c43a8e645..c0c80e7c1059 100644 --- a/mysql-test/suite/rocksdb/t/bulk_load_unsorted.test +++ b/mysql-test/suite/rocksdb/t/bulk_load_unsorted.test @@ -1,136 +1,6 @@ --source include/have_rocksdb.inc ---source include/count_sessions.inc +--source include/big_test.inc --let pk_cf=cf1 -SET rocksdb_bulk_load_size=3; -SET rocksdb_bulk_load_allow_unsorted=1; - -### Test individual INSERTs ### - -# A table with only a PK won't have rows until the bulk load is finished -eval CREATE TABLE t1(a INT, b INT, PRIMARY KEY(a) COMMENT "$pk_cf") ENGINE=ROCKSDB; -SET rocksdb_bulk_load=1; ---disable_query_log -let $sign = 1; -let $max = 5; -let $i = 1; -while ($i <= $max) { - let $a = 1 + $sign * $i; - let $b = 1 - $sign * $i; - let $sign = -$sign; - let $insert = INSERT INTO t1 VALUES ($a, $b); - eval $insert; - inc $i; -} ---enable_query_log -SELECT * FROM t1; -SET rocksdb_bulk_load=0; -SELECT * FROM t1; -DROP TABLE t1; - -# A table with a PK and a SK shows rows immediately -eval CREATE TABLE t1(a INT, b INT, PRIMARY KEY(a) COMMENT "$pk_cf", KEY(b)) ENGINE=ROCKSDB; -SET rocksdb_bulk_load=1; ---disable_query_log -let $sign = 1; -let $max = 5; -let $i = 1; -while ($i <= $max) { - let $a = 1 + $sign * $i; - let $b = 1 - $sign * $i; - let $sign = -$sign; - let $insert = INSERT INTO t1 VALUES ($a, $b); - eval $insert; - inc $i; -} ---enable_query_log - -SELECT * FROM t1; -SET rocksdb_bulk_load=0; -DROP TABLE t1; - -# Inserting into another table finishes bulk load to the previous table -eval CREATE TABLE t1(a INT, b INT, PRIMARY KEY(a) COMMENT "$pk_cf") ENGINE=ROCKSDB; -eval CREATE TABLE t2(a INT, b INT, PRIMARY KEY(a) COMMENT "$pk_cf") ENGINE=ROCKSDB; - -SET rocksdb_bulk_load=1; -INSERT INTO t1 VALUES (1,1); -INSERT INTO t2 VALUES (1,1); -SELECT * FROM t1; -INSERT INTO t1 VALUES (2,2); -SELECT * FROM t2; -SELECT * FROM t1; -SET rocksdb_bulk_load=0; -SELECT * FROM t1; -DROP TABLE t1, t2; - -### Test bulk load from a file ### -eval CREATE TABLE t1(a INT, b INT, PRIMARY KEY(a) COMMENT "$pk_cf") ENGINE=ROCKSDB; -eval CREATE TABLE t2(a INT, b INT, PRIMARY KEY(b) COMMENT "$pk_cf") ENGINE=ROCKSDB; -eval CREATE TABLE t3(a INT, b INT, PRIMARY KEY(a) COMMENT "$pk_cf") ENGINE=ROCKSDB - PARTITION BY KEY() PARTITIONS 4; - ---let $file = `SELECT CONCAT(@@datadir, "test_loadfile.txt")` -# Create a text file with data to import into the table. -# PK and SK are not in any order ---let ROCKSDB_INFILE = $file -perl; -my $fn = $ENV{'ROCKSDB_INFILE'}; -open(my $fh, '>', $fn) || die "perl open($fn): $!"; -my $max = 1000000; -my $sign = 1; -for (my $ii = 0; $ii < $max; $ii++) -{ - my $a = 1 + $sign * $ii; - my $b = 1 - $sign * $ii; - print $fh "$a\t$b\n"; -} -close($fh); -EOF ---file_exists $file - -# Make sure a snapshot held by another user doesn't block the bulk load -connect (other,localhost,root,,); -set session transaction isolation level repeatable read; -select * from information_schema.rocksdb_dbstats where stat_type='DB_NUM_SNAPSHOTS'; -start transaction with consistent snapshot; -select * from information_schema.rocksdb_dbstats where stat_type='DB_NUM_SNAPSHOTS'; - -connection default; -set rocksdb_bulk_load=1; -set rocksdb_bulk_load_size=100000; ---disable_query_log ---echo LOAD DATA INFILE INTO TABLE t1; -eval LOAD DATA INFILE '$file' INTO TABLE t1; ---echo LOAD DATA INFILE INTO TABLE t2; -eval LOAD DATA INFILE '$file' INTO TABLE t2; ---echo LOAD DATA INFILE INTO TABLE t3; -eval LOAD DATA INFILE '$file' INTO TABLE t3; ---enable_query_log -set rocksdb_bulk_load=0; - ---remove_file $file - -# Make sure row count index stats are correct ---replace_column 6 # 7 # 8 # 9 # 10 # -SHOW TABLE STATUS WHERE name LIKE 't%'; - -ANALYZE TABLE t1, t2, t3; - ---replace_column 6 # 7 # 8 # 9 # 10 # -SHOW TABLE STATUS WHERE name LIKE 't%'; - -# Make sure all the data is there. -select count(a) from t1; -select count(b) from t1; -select count(a) from t2; -select count(b) from t2; -select count(a) from t3; -select count(b) from t3; - -disconnect other; - -DROP TABLE t1, t2, t3; - ---source include/wait_until_count_sessions.inc +--source ../include/bulk_load_unsorted.inc diff --git a/mysql-test/suite/rocksdb/t/bulk_load_unsorted_rev.test b/mysql-test/suite/rocksdb/t/bulk_load_unsorted_rev.test new file mode 100644 index 000000000000..aa9734af4752 --- /dev/null +++ b/mysql-test/suite/rocksdb/t/bulk_load_unsorted_rev.test @@ -0,0 +1,6 @@ +--source include/have_rocksdb.inc +--source include/big_test.inc + +--let pk_cf=rev:cf1 + +--source ../include/bulk_load_unsorted.inc diff --git a/storage/rocksdb/rocksdb b/storage/rocksdb/rocksdb index 88ed1f6ea601..019aa7074cea 160000 --- a/storage/rocksdb/rocksdb +++ b/storage/rocksdb/rocksdb @@ -1 +1 @@ -Subproject commit 88ed1f6ea601b13b1eb416e50588ebe48dd93641 +Subproject commit 019aa7074ceadffd6fb871f96465b3785370901f From 62840b8cf2722f5b62db2b0a068f75f72f4a860a Mon Sep 17 00:00:00 2001 From: Yoshinori Matsunobu Date: Mon, 16 Oct 2017 12:03:27 -0700 Subject: [PATCH 0462/1221] Fix assertion on covers_key(b) with debug build (#728) Upstream commit ID : fb-mysql-5.6.35/1d013219971f3e19dba71f4cd0f8c86bacd0097e MYR-198 : Merge prod201704 Percona Server: - Commit originally came with a rocksdb_debug.test to validatethe fix, but debug only was not necessary. Moved the test logic into rocksdb.test and removed the rocksdb_debug.* test files. Summary: This diff removes an extra assertion on covers_key(b). Prefix condition might be incremented by successor(). It may overflow and points to outside of the index_id. This is an expected behavior and it should not fail. Closes https://github.com/facebook/mysql-5.6/pull/730 Differential Revision: D6053481 Pulled By: yoshinorim fbshipit-source-id: dc85b91 --- mysql-test/suite/rocksdb/r/rocksdb.result | 11 +++++++++++ mysql-test/suite/rocksdb/t/rocksdb.test | 11 +++++++++++ storage/rocksdb/rdb_datadic.h | 2 +- 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/mysql-test/suite/rocksdb/r/rocksdb.result b/mysql-test/suite/rocksdb/r/rocksdb.result index c0d459a6a6ed..3380c11cc1d5 100644 --- a/mysql-test/suite/rocksdb/r/rocksdb.result +++ b/mysql-test/suite/rocksdb/r/rocksdb.result @@ -2740,3 +2740,14 @@ SET rocksdb_bulk_load_size= @save_rocksdb_bulk_load_size; SET rocksdb_commit_in_the_middle=0; DROP TABLE t1, t2; SET GLOBAL ROCKSDB_PAUSE_BACKGROUND_WORK = @ORIG_PAUSE_BACKGROUND_WORK; +# +# Issue #728: Assertion `covers_key(b)' failed in int +# myrocks::Rdb_key_def::cmp_full_keys(const rocks db::Slice&, +# const rocksdb::Slice&) +# +CREATE TABLE t2(c1 TINYINT SIGNED KEY,c2 TINYINT UNSIGNED,c3 INT) ENGINE=ROCKSDB; +INSERT INTO t2(c1)VALUES(0); +SELECT * FROM t2 WHERE c1<=127 ORDER BY c1 DESC; +c1 c2 c3 +0 NULL NULL +DROP TABLE t2; diff --git a/mysql-test/suite/rocksdb/t/rocksdb.test b/mysql-test/suite/rocksdb/t/rocksdb.test index b284b5db3f96..2697eaddcfea 100644 --- a/mysql-test/suite/rocksdb/t/rocksdb.test +++ b/mysql-test/suite/rocksdb/t/rocksdb.test @@ -2061,4 +2061,15 @@ DROP TABLE t1, t2; SET GLOBAL ROCKSDB_PAUSE_BACKGROUND_WORK = @ORIG_PAUSE_BACKGROUND_WORK; +--echo # +--echo # Issue #728: Assertion `covers_key(b)' failed in int +--echo # myrocks::Rdb_key_def::cmp_full_keys(const rocks db::Slice&, +--echo # const rocksdb::Slice&) +--echo # + +CREATE TABLE t2(c1 TINYINT SIGNED KEY,c2 TINYINT UNSIGNED,c3 INT) ENGINE=ROCKSDB; +INSERT INTO t2(c1)VALUES(0); +SELECT * FROM t2 WHERE c1<=127 ORDER BY c1 DESC; +DROP TABLE t2; + --source include/wait_until_count_sessions.inc diff --git a/storage/rocksdb/rdb_datadic.h b/storage/rocksdb/rdb_datadic.h index 682eaa81a106..5fc5217c7680 100644 --- a/storage/rocksdb/rdb_datadic.h +++ b/storage/rocksdb/rdb_datadic.h @@ -240,9 +240,9 @@ class Rdb_key_def { if X is a prefix of Y, then we consider that X = Y. */ // b describes the lookup key, which can be a prefix of a. + // b might be outside of the index_number range, if successor() is called. int cmp_full_keys(const rocksdb::Slice &a, const rocksdb::Slice &b) const { DBUG_ASSERT(covers_key(a)); - DBUG_ASSERT(covers_key(b)); return memcmp(a.data(), b.data(), std::min(a.size(), b.size())); } From cb8406abc833fcb74437b6bb5d6765649bfaa2f4 Mon Sep 17 00:00:00 2001 From: Artem Danilov Date: Mon, 16 Oct 2017 16:02:47 -0700 Subject: [PATCH 0463/1221] Exclude valgrind from allow_to_start_after_corruption.test Upstream commit ID : fb-mysql-5.6.35/3e4b33b4f61831fdd2e3d87063b8a9f7c9aee32d MYR-198 : Merge prod201704 Differential Revision: D6071528 fbshipit-source-id: d72346a --- mysql-test/suite/rocksdb/t/allow_to_start_after_corruption.test | 1 + 1 file changed, 1 insertion(+) diff --git a/mysql-test/suite/rocksdb/t/allow_to_start_after_corruption.test b/mysql-test/suite/rocksdb/t/allow_to_start_after_corruption.test index ff6482925a02..4936cdf599be 100644 --- a/mysql-test/suite/rocksdb/t/allow_to_start_after_corruption.test +++ b/mysql-test/suite/rocksdb/t/allow_to_start_after_corruption.test @@ -1,5 +1,6 @@ --source include/have_rocksdb.inc --source include/have_debug.inc +--source include/not_valgrind.inc --echo # --echo # Test how MyRocks behaves when RocksDB reports corrupted data. From 3d860c593a5df874a959dc830039da46fec01033 Mon Sep 17 00:00:00 2001 From: Manuel Ung Date: Tue, 17 Oct 2017 15:15:16 -0700 Subject: [PATCH 0464/1221] Fix loading auto_increment values in tables with hidden pk Upstream commit ID : fb-mysql-5.6.35/3e68a8cd409ea63e296a5c788daec188d3a4b864 MYR-198 : Merge prod201704 Summary: We don't decode from secondary keys if hidden pk exists for some reason. Remove this check. Closes https://github.com/facebook/mysql-5.6/issues/736 Closes https://github.com/facebook/mysql-5.6/pull/737 Differential Revision: D6078907 Pulled By: lth fbshipit-source-id: d5c4243 --- .../r/allow_no_primary_key_with_sk.result | 18 ++++++++++++++++++ .../t/allow_no_primary_key_with_sk.test | 12 ++++++++++++ storage/rocksdb/ha_rocksdb.cc | 5 ++--- 3 files changed, 32 insertions(+), 3 deletions(-) diff --git a/mysql-test/suite/rocksdb/r/allow_no_primary_key_with_sk.result b/mysql-test/suite/rocksdb/r/allow_no_primary_key_with_sk.result index 164df655dc34..6ddd2cd802bf 100644 --- a/mysql-test/suite/rocksdb/r/allow_no_primary_key_with_sk.result +++ b/mysql-test/suite/rocksdb/r/allow_no_primary_key_with_sk.result @@ -785,3 +785,21 @@ set global rocksdb_force_flush_memtable_now = true; select * from t1; col1 col2 extra DROP TABLE t1; +create table t1 (i int auto_increment, key(i)) engine=rocksdb; +insert into t1 values(); +insert into t1 values(); +insert into t1 values(); +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `i` int(11) NOT NULL AUTO_INCREMENT, + KEY `i` (`i`) +) ENGINE=ROCKSDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1 +# restart +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `i` int(11) NOT NULL AUTO_INCREMENT, + KEY `i` (`i`) +) ENGINE=ROCKSDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1 +drop table t1; diff --git a/mysql-test/suite/rocksdb/t/allow_no_primary_key_with_sk.test b/mysql-test/suite/rocksdb/t/allow_no_primary_key_with_sk.test index 9142f14a3294..9fa6295e85c4 100644 --- a/mysql-test/suite/rocksdb/t/allow_no_primary_key_with_sk.test +++ b/mysql-test/suite/rocksdb/t/allow_no_primary_key_with_sk.test @@ -131,3 +131,15 @@ set global rocksdb_force_flush_memtable_now = true; select * from t1; DROP TABLE t1; + +## https://github.com/facebook/mysql-5.6/issues/736 +create table t1 (i int auto_increment, key(i)) engine=rocksdb; +insert into t1 values(); +insert into t1 values(); +insert into t1 values(); + +show create table t1; +--source include/restart_mysqld.inc +show create table t1; + +drop table t1; diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index 15c5f969d818..6299246759bc 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -6841,7 +6841,7 @@ int ha_rocksdb::read_row_from_secondary_key(uchar *const buf, bool covered_lookup = m_keyread_only || kd.covers_lookup(table, &value, &m_lookup_bitmap); - if (covered_lookup && m_lock_rows == RDB_LOCK_NONE && !has_hidden_pk(table)) { + if (covered_lookup && m_lock_rows == RDB_LOCK_NONE) { pk_size = kd.get_primary_key_tuple(table, *m_pk_descr, &rkey, m_pk_packed_tuple); if (pk_size == RDB_INVALID_KEY_LEN) { @@ -6961,8 +6961,7 @@ int ha_rocksdb::secondary_index_read(const int keyno, uchar *const buf) { bool covered_lookup = m_keyread_only || m_key_descr_arr[keyno]->covers_lookup( table, &value, &m_lookup_bitmap); - if (covered_lookup && m_lock_rows == RDB_LOCK_NONE && - !has_hidden_pk(table)) { + if (covered_lookup && m_lock_rows == RDB_LOCK_NONE) { rc = m_key_descr_arr[keyno]->unpack_record( table, buf, &key, &value, m_verify_row_debug_checksums); global_stats.covered_secondary_key_lookups.inc(); From f021c256c341374678203be9c20ef302408bb2fe Mon Sep 17 00:00:00 2001 From: Herman Lee Date: Thu, 19 Oct 2017 10:52:31 -0700 Subject: [PATCH 0465/1221] Rework rocksdb.write_sync test without using sleep calls Upstream commit ID : fb-mysql-5.6.35/f81daeeac0b603cb9de6ae6b170f3c06285b088d MYR-198 : Merge prod201704 Summary: Remove sleep calls from rocksdb.write_sync and make the test more deterministic. Closes https://github.com/facebook/mysql-5.6/pull/725 Differential Revision: D6028419 Pulled By: hermanlee fbshipit-source-id: 992a192 --- .../suite/rocksdb/r/flush_log_at_trx_commit.result | 5 +++-- mysql-test/suite/rocksdb/t/flush_log_at_trx_commit.test | 9 ++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/mysql-test/suite/rocksdb/r/flush_log_at_trx_commit.result b/mysql-test/suite/rocksdb/r/flush_log_at_trx_commit.result index fcbc348a53f7..ddb220fb48d7 100644 --- a/mysql-test/suite/rocksdb/r/flush_log_at_trx_commit.result +++ b/mysql-test/suite/rocksdb/r/flush_log_at_trx_commit.result @@ -5,6 +5,7 @@ SET GLOBAL rocksdb_write_disable_wal=false; SET GLOBAL rocksdb_write_ignore_missing_column_families=true; create table aaa (id int primary key, i int) engine=rocksdb; SET GLOBAL rocksdb_flush_log_at_trx_commit=1; +insert aaa(id, i) values(0,1); select variable_value into @a from performance_schema.global_status where variable_name='rocksdb_wal_synced'; insert aaa(id, i) values(1,1); select variable_value-@a from performance_schema.global_status where variable_name='rocksdb_wal_synced'; @@ -18,11 +19,11 @@ insert aaa(id, i) values(3,1); select variable_value-@a from performance_schema.global_status where variable_name='rocksdb_wal_synced'; variable_value-@a 3 -SET GLOBAL rocksdb_flush_log_at_trx_commit=0; select variable_value into @a from performance_schema.global_status where variable_name='rocksdb_wal_synced'; +SET GLOBAL rocksdb_flush_log_at_trx_commit=0; insert aaa(id, i) values(4,1); -SET GLOBAL rocksdb_flush_log_at_trx_commit=2; select variable_value into @a from performance_schema.global_status where variable_name='rocksdb_wal_synced'; +SET GLOBAL rocksdb_flush_log_at_trx_commit=2; insert aaa(id, i) values(5,1); drop table aaa; SET GLOBAL rocksdb_flush_log_at_trx_commit=@orig_rocksdb_flush_log_at_trx_commit; diff --git a/mysql-test/suite/rocksdb/t/flush_log_at_trx_commit.test b/mysql-test/suite/rocksdb/t/flush_log_at_trx_commit.test index 6d6e7ddfd623..a2386d3575c5 100644 --- a/mysql-test/suite/rocksdb/t/flush_log_at_trx_commit.test +++ b/mysql-test/suite/rocksdb/t/flush_log_at_trx_commit.test @@ -10,7 +10,8 @@ SET GLOBAL rocksdb_write_ignore_missing_column_families=true; create table aaa (id int primary key, i int) engine=rocksdb; SET GLOBAL rocksdb_flush_log_at_trx_commit=1; ---exec sleep 5 +insert aaa(id, i) values(0,1); + select variable_value into @a from performance_schema.global_status where variable_name='rocksdb_wal_synced'; insert aaa(id, i) values(1,1); select variable_value-@a from performance_schema.global_status where variable_name='rocksdb_wal_synced'; @@ -19,18 +20,16 @@ select variable_value-@a from performance_schema.global_status where variable_na insert aaa(id, i) values(3,1); select variable_value-@a from performance_schema.global_status where variable_name='rocksdb_wal_synced'; -SET GLOBAL rocksdb_flush_log_at_trx_commit=0; ---exec sleep 5 select variable_value into @a from performance_schema.global_status where variable_name='rocksdb_wal_synced'; +SET GLOBAL rocksdb_flush_log_at_trx_commit=0; insert aaa(id, i) values(4,1); let $status_var=rocksdb_wal_synced; let $status_var_value=`select @a`; source include/wait_for_status_var.inc; -SET GLOBAL rocksdb_flush_log_at_trx_commit=2; ---exec sleep 5 select variable_value into @a from performance_schema.global_status where variable_name='rocksdb_wal_synced'; +SET GLOBAL rocksdb_flush_log_at_trx_commit=2; insert aaa(id, i) values(5,1); let $status_var=rocksdb_wal_synced; From 5fd3b48fd48a8a651daba1e3723c979e54a9c484 Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Tue, 24 Oct 2017 16:55:24 -0700 Subject: [PATCH 0466/1221] Created new information_schema.rocksdb_deadlock table. Upstream commit ID : fb-mysql-5.6.35/c990944c4f535d905824bdfbd704108164d17737 MYR-198 : Merge prod201704 This is a NULL cherry-pick to Percona Server 5.7 to create the commit placeholder for the corresponding upstream commit. Reason: Change already applied to source tree through another patch. From f4bde2a0ab88aca0582f6dbea534ac035f5d42e6 Mon Sep 17 00:00:00 2001 From: Manuel Ung Date: Tue, 24 Oct 2017 15:06:08 -0700 Subject: [PATCH 0467/1221] Skip scan does not work with bloom filters in MyRocks Upstream commit ID : fb-mysql-5.6.35/f99a2f924bf58618a62f5ebd9fc54733d37b8e11 MYR-198 : Merge prod201704 This is a NULL cherry-pick to Percona Server 5.7 to create the commit placeholder for the corresponding upstream commit. Reason: Patch not taken into Percona Server. Percons Server does not have this optimizer change implemented purely in fb-mysql at this commit : https://github.com/facebook/mysql-5.6/commit/fa016209fdfd161ffcef50b45ca4a47fb8f923f5 From bf2e5d667b489f5a06c8d36d466c24738291ef47 Mon Sep 17 00:00:00 2001 From: Artem Danilov Date: Tue, 17 Oct 2017 14:46:00 -0700 Subject: [PATCH 0468/1221] Add cardinality statistics to memtable only tables Upstream commit ID : fb-mysql-5.6.35/c3d6ffc2f96324cb0c436f1a6ed77441c8b3c16d MYR-198 : Merge prod201704 Percona Server : - Added big_test.inc to rocksdb.cardinality.test - Fixed ha_rocksdb::info call to update rec_per_key statictics for both HA_STATUS_VARIABLE and HA_STATUS_CONST flags like TokuDB for full functionality of HA_ONLINE_ANALYZE Differential Revision: D6083167 fbshipit-source-id: 11337b3 --- mysql-test/include/index_merge1.inc | 61 ++++++++ mysql-test/include/index_merge2.inc | 35 ++++- mysql-test/include/index_merge_ror.inc | 39 ++++- mysql-test/include/index_merge_ror_cpk.inc | 15 +- ...sdb_flush_memtable_on_analyze_basic.result | 57 ------- ...cksdb_flush_memtable_on_analyze_basic.test | 42 ------ mysql-test/suite/rocksdb/r/cardinality.result | 36 +++++ .../rocksdb/r/index_merge_rocksdb.result | 2 +- .../rocksdb/r/index_merge_rocksdb2.result | 3 + mysql-test/suite/rocksdb/r/rocksdb.result | 1 - .../suite/rocksdb/r/rocksdb_range2.result | 2 +- mysql-test/suite/rocksdb/t/cardinality.test | 44 ++++++ .../suite/rocksdb/t/index_merge_rocksdb.test | 7 +- .../suite/rocksdb/t/index_merge_rocksdb2.test | 5 +- mysql-test/suite/rocksdb/t/rocksdb.test | 3 + .../suite/rocksdb/t/rocksdb_range2.test | 1 + storage/rocksdb/ha_rocksdb.cc | 99 +++++++----- storage/rocksdb/properties_collector.cc | 141 ++++++++++-------- storage/rocksdb/properties_collector.h | 41 ++++- storage/rocksdb/rdb_datadic.cc | 8 +- storage/rocksdb/rdb_datadic.h | 14 +- 21 files changed, 439 insertions(+), 217 deletions(-) delete mode 100644 mysql-test/suite/rocksdb.sys_vars/r/rocksdb_flush_memtable_on_analyze_basic.result delete mode 100644 mysql-test/suite/rocksdb.sys_vars/t/rocksdb_flush_memtable_on_analyze_basic.test diff --git a/mysql-test/include/index_merge1.inc b/mysql-test/include/index_merge1.inc index 9e7d4dd7d3d3..8a5265b15339 100644 --- a/mysql-test/include/index_merge1.inc +++ b/mysql-test/include/index_merge1.inc @@ -4,6 +4,7 @@ # # The variables # $engine_type -- storage engine to be tested +# $eval_before_analyze -- statement to execute before any analyze table # $merge_table_support -- 1 storage engine supports merge tables # -- 0 storage engine does not support merge tables # have to be set before sourcing this script. @@ -61,6 +62,10 @@ while ($1) } --enable_query_log +if ($eval_before_analyze) +{ + eval $eval_before_analyze; +} analyze table t0; --echo # 1. One index @@ -330,6 +335,10 @@ alter table t2 add index i321(key3, key2, key1); -- disable_query_log -- disable_result_log +if ($eval_before_analyze) +{ + eval $eval_before_analyze; +} analyze table t2; -- enable_result_log -- enable_query_log @@ -373,6 +382,10 @@ insert into t4 select key1,key1,key1 div 10, key1 % 10, key1 % 10, key1 from t0; -- disable_query_log -- disable_result_log +if ($eval_before_analyze) +{ + eval $eval_before_analyze; +} analyze table t4; -- enable_result_log -- enable_query_log @@ -399,6 +412,10 @@ insert into t1 select * from t0; -- disable_query_log -- disable_result_log +if ($eval_before_analyze) +{ + eval $eval_before_analyze; +} analyze table t1; -- enable_result_log -- enable_query_log @@ -461,6 +478,10 @@ SET @@GLOBAL.innodb_fast_shutdown = 0; -- disable_query_log -- disable_result_log +if ($eval_before_analyze) +{ + eval $eval_before_analyze; +} analyze table t3; -- enable_result_log -- enable_query_log @@ -485,6 +506,10 @@ update t0 set key8=123 where key1 < 3 or key2 < 4; -- disable_query_log -- disable_result_log +if ($eval_before_analyze) +{ + eval $eval_before_analyze; +} analyze table t0; -- enable_result_log -- enable_query_log @@ -496,6 +521,10 @@ select * from t0 where key1 < 3 or key2 < 4; delete from t0 where key1 < 3 or key2 < 4; -- disable_query_log -- disable_result_log +if ($eval_before_analyze) +{ + eval $eval_before_analyze; +} analyze table t0; -- enable_result_log -- enable_query_log @@ -509,6 +538,10 @@ create table t4 (a int); insert into t4 values (1),(4),(3); -- disable_query_log -- disable_result_log +if ($eval_before_analyze) +{ + eval $eval_before_analyze; +} analyze table t4; -- enable_result_log -- enable_query_log @@ -533,6 +566,10 @@ select max(a.key1 + b.key1 + a.key2 + b.key2 + a.key3 + b.key3 + a.key4 + b.key4 update t0 set key1=1; -- disable_query_log -- disable_result_log +if ($eval_before_analyze) +{ + eval $eval_before_analyze; +} analyze table t0; -- enable_result_log -- enable_query_log @@ -556,6 +593,10 @@ update t0 set key2=1, key3=1, key4=1, key5=1,key6=1,key7=1 where key7 < 500; -- disable_query_log -- disable_result_log +if ($eval_before_analyze) +{ + eval $eval_before_analyze; +} analyze table t0; -- enable_result_log -- enable_query_log @@ -612,6 +653,10 @@ select count(*) from t1; -- disable_query_log -- disable_result_log +if ($eval_before_analyze) +{ + eval $eval_before_analyze; +} analyze table t1; -- enable_result_log -- enable_query_log @@ -653,6 +698,10 @@ create table t3 ( -- disable_query_log -- disable_result_log +if ($eval_before_analyze) +{ + eval $eval_before_analyze; +} analyze table t0; analyze table t1; analyze table t2; @@ -734,6 +783,10 @@ insert into t2 select * from t1; -- disable_query_log -- disable_result_log +if ($eval_before_analyze) +{ + eval $eval_before_analyze; +} analyze table t1; analyze table t2; -- enable_result_log @@ -789,6 +842,10 @@ insert into t3 values (1,1,'data'); -- disable_query_log -- disable_result_log +if ($eval_before_analyze) +{ + eval $eval_before_analyze; +} analyze table t0; analyze table t1; analyze table t2; @@ -824,6 +881,10 @@ INSERT INTO t1 SELECT * FROM t1; INSERT INTO t1 SELECT * FROM t1; -- disable_query_log -- disable_result_log +if ($eval_before_analyze) +{ + eval $eval_before_analyze; +} analyze table t1; -- enable_result_log -- enable_query_log diff --git a/mysql-test/include/index_merge2.inc b/mysql-test/include/index_merge2.inc index 7554de4c2038..73703d65a7a2 100644 --- a/mysql-test/include/index_merge2.inc +++ b/mysql-test/include/index_merge2.inc @@ -4,7 +4,8 @@ # # The variable # $engine_type -- storage engine to be tested -# has to be set before sourcing this script. +# $eval_before_analyze -- statement to execute before any analyze table +# have to be set before sourcing this script. # # Note: The comments/expectations refer to InnoDB. # They might be not valid for other storage engines. @@ -44,6 +45,10 @@ while ($1) -- disable_query_log -- disable_result_log +if ($eval_before_analyze) +{ + eval $eval_before_analyze; +} analyze table t1; -- enable_result_log -- enable_query_log @@ -69,6 +74,10 @@ alter table t1 add primary key (str1, zeroval, str2, str3); -- disable_query_log -- disable_result_log +if ($eval_before_analyze) +{ + eval $eval_before_analyze; +} analyze table t1; -- enable_result_log -- enable_query_log @@ -102,6 +111,10 @@ while ($1) -- disable_query_log -- disable_result_log +if ($eval_before_analyze) +{ + eval $eval_before_analyze; +} analyze table t1; -- enable_result_log -- enable_query_log @@ -139,11 +152,19 @@ insert into t1 (key1a, key1b, key2a, key2b, key3a, key3b) select key1a, key1b, key2a, key2b, key3a, key3b from t1; insert into t1 (key1a, key1b, key2a, key2b, key3a, key3b) select key1a, key1b, key2a, key2b, key3a, key3b from t1; +if ($eval_before_analyze) +{ + eval $eval_before_analyze; +} analyze table t1; select count(*) from t1; -- disable_query_log -- disable_result_log +if ($eval_before_analyze) +{ + eval $eval_before_analyze; +} analyze table t2; -- enable_result_log -- enable_query_log @@ -384,6 +405,10 @@ SET @@GLOBAL.innodb_fast_shutdown = 0; -- disable_query_log -- disable_result_log +if ($eval_before_analyze) +{ + eval $eval_before_analyze; +} analyze table t1; -- enable_result_log -- enable_query_log @@ -422,6 +447,10 @@ INSERT INTO t1 VALUES -- disable_query_log -- disable_result_log +if ($eval_before_analyze) +{ + eval $eval_before_analyze; +} analyze table t1; -- enable_result_log -- enable_query_log @@ -477,6 +506,10 @@ INSERT INTO t1 VALUES (1,1,'a'), (2,2,'b'); -- disable_query_log -- disable_result_log +if ($eval_before_analyze) +{ + eval $eval_before_analyze; +} analyze table t1; -- enable_result_log -- enable_query_log diff --git a/mysql-test/include/index_merge_ror.inc b/mysql-test/include/index_merge_ror.inc index 3f6150024bee..750212ab306d 100644 --- a/mysql-test/include/index_merge_ror.inc +++ b/mysql-test/include/index_merge_ror.inc @@ -4,7 +4,8 @@ # # The variable # $engine_type -- storage engine to be tested -# has to be set before sourcing this script. +# $eval_before_analyze -- statement to execute before any analyze table +# have to be set before sourcing this script. # # Note: The comments/expectations refer to MyISAM. # They might be not valid for other storage engines. @@ -120,6 +121,10 @@ select count(*) from t1; -- disable_query_log -- disable_result_log +if ($eval_before_analyze) +{ + eval $eval_before_analyze; +} analyze table t0; analyze table t1; -- enable_result_log @@ -144,6 +149,10 @@ insert into t1 (key1, key2, key3, key4, filler1) values (-1, -1, 100, 100, 'key4 -- disable_query_log -- disable_result_log +if ($eval_before_analyze) +{ + eval $eval_before_analyze; +} analyze table t1; -- enable_result_log -- enable_query_log @@ -196,6 +205,10 @@ update t1 set key1=200,key2=200 where key1=100 and key2=100; delete from t1 where key1=200 and key2=200; -- disable_query_log -- disable_result_log +if ($eval_before_analyze) +{ + eval $eval_before_analyze; +} analyze table t1; -- enable_result_log -- enable_query_log @@ -218,6 +231,10 @@ SET @@GLOBAL.innodb_fast_shutdown = 0; -- disable_query_log -- disable_result_log +if ($eval_before_analyze) +{ + eval $eval_before_analyze; +} analyze table t1; -- enable_result_log -- enable_query_log @@ -247,6 +264,10 @@ insert into t1 (key1, key2, key3, key4, filler1) values (100, 100, 200, 200,'key -- disable_query_log -- disable_result_log +if ($eval_before_analyze) +{ + eval $eval_before_analyze; +} analyze table t1; -- enable_result_log -- enable_query_log @@ -261,6 +282,10 @@ insert into t1 (key1, key2, key3, key4, filler1) values (-1, -1, -1, 200,'key4') -- disable_query_log -- disable_result_log +if ($eval_before_analyze) +{ + eval $eval_before_analyze; +} analyze table t1; -- enable_result_log -- enable_query_log @@ -275,6 +300,10 @@ insert into t1 (key1, key2, key3, key4, filler1) values (-1, -1, 200, -1,'key3') -- disable_query_log -- disable_result_log +if ($eval_before_analyze) +{ + eval $eval_before_analyze; +} analyze table t1; -- enable_result_log -- enable_query_log @@ -403,6 +432,10 @@ select count(a) from t2 where b='BBBBBBBB'; -- disable_query_log -- disable_result_log +if ($eval_before_analyze) +{ + eval $eval_before_analyze; +} analyze table t2; -- enable_result_log -- enable_query_log @@ -416,6 +449,10 @@ select count(a) from t2 ignore index(a,b) where a='AAAAAAAA' and b='AAAAAAAA'; insert into t2 values ('ab', 'ab', 'uh', 'oh'); -- disable_query_log -- disable_result_log +if ($eval_before_analyze) +{ + eval $eval_before_analyze; +} analyze table t2; -- enable_result_log -- enable_query_log diff --git a/mysql-test/include/index_merge_ror_cpk.inc b/mysql-test/include/index_merge_ror_cpk.inc index c28fc08c7ccd..685434272f81 100644 --- a/mysql-test/include/index_merge_ror_cpk.inc +++ b/mysql-test/include/index_merge_ror_cpk.inc @@ -4,7 +4,8 @@ # # The variable # $engine_type -- storage engine to be tested -# has to be set before sourcing this script. +# $eval_before_analyze -- statement to execute before any analyze table +# have to be set before sourcing this script. # # Note: The comments/expectations refer to InnoDB. # They might be not valid for other storage engines. @@ -69,6 +70,10 @@ set autocommit=1; -- disable_query_log -- disable_result_log +if ($eval_before_analyze) +{ + eval $eval_before_analyze; +} analyze table t1; -- enable_result_log -- enable_query_log @@ -160,6 +165,10 @@ WHERE (SELECT COUNT(*) FROM t2 WHERE t2.f3 = 'h' AND t2.f2 = t1.f1) = 0 AND t1.f -- disable_query_log -- disable_result_log +if ($eval_before_analyze) +{ + eval $eval_before_analyze; +} analyze table t1; analyze table t2; -- enable_result_log @@ -321,6 +330,10 @@ INSERT INTO t2 VALUES -- disable_result_log +if ($eval_before_analyze) +{ + eval $eval_before_analyze; +} analyze table t1; analyze table t2; -- enable_result_log diff --git a/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_flush_memtable_on_analyze_basic.result b/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_flush_memtable_on_analyze_basic.result deleted file mode 100644 index 6787cb1dac8d..000000000000 --- a/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_flush_memtable_on_analyze_basic.result +++ /dev/null @@ -1,57 +0,0 @@ -CREATE TABLE t1 (a INT AUTO_INCREMENT, b INT, PRIMARY KEY(a)) ENGINE=ROCKSDB; -SHOW CREATE TABLE t1; -Table Create Table -t1 CREATE TABLE `t1` ( - `a` int(11) NOT NULL AUTO_INCREMENT, - `b` int(11) DEFAULT NULL, - PRIMARY KEY (`a`) -) ENGINE=ROCKSDB DEFAULT CHARSET=latin1 -INSERT INTO t1 (b) VALUES (1); -INSERT INTO t1 (b) VALUES (2); -INSERT INTO t1 (b) VALUES (3); -SELECT * FROM t1; -a b -1 1 -2 2 -3 3 -set session rocksdb_flush_memtable_on_analyze=off; -ANALYZE TABLE t1; -Table Op Msg_type Msg_text -test.t1 analyze status OK -SHOW INDEXES FROM t1; -Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment -t1 0 PRIMARY 1 a A 3 NULL NULL LSMTREE -set session rocksdb_flush_memtable_on_analyze=on; -ANALYZE TABLE t1; -Table Op Msg_type Msg_text -test.t1 analyze status OK -SHOW INDEXES FROM t1; -Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment -t1 0 PRIMARY 1 a A 3 NULL NULL LSMTREE -DROP TABLE t1; -CREATE TABLE t1 (a INT AUTO_INCREMENT, b INT, PRIMARY KEY(a)) ENGINE=ROCKSDB; -SHOW CREATE TABLE t1; -Table Create Table -t1 CREATE TABLE `t1` ( - `a` int(11) NOT NULL AUTO_INCREMENT, - `b` int(11) DEFAULT NULL, - PRIMARY KEY (`a`) -) ENGINE=ROCKSDB DEFAULT CHARSET=latin1 -INSERT INTO t1 (b) VALUES (1); -INSERT INTO t1 (b) VALUES (2); -INSERT INTO t1 (b) VALUES (3); -SELECT * FROM t1; -a b -1 1 -2 2 -3 3 -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 ROCKSDB 10 Fixed # # # 0 0 0 4 NULL NULL NULL latin1_swedish_ci NULL -ANALYZE TABLE t1; -Table Op Msg_type Msg_text -test.t1 analyze status OK -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 ROCKSDB 10 Fixed # # # 0 0 0 4 NULL NULL NULL latin1_swedish_ci NULL -DROP TABLE t1; diff --git a/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_flush_memtable_on_analyze_basic.test b/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_flush_memtable_on_analyze_basic.test deleted file mode 100644 index 8482523dc058..000000000000 --- a/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_flush_memtable_on_analyze_basic.test +++ /dev/null @@ -1,42 +0,0 @@ ---source include/have_rocksdb.inc - -## -## test cardinality for analyze statements after flushing table -## - -CREATE TABLE t1 (a INT AUTO_INCREMENT, b INT, PRIMARY KEY(a)) ENGINE=ROCKSDB; -SHOW CREATE TABLE t1; -INSERT INTO t1 (b) VALUES (1); -INSERT INTO t1 (b) VALUES (2); -INSERT INTO t1 (b) VALUES (3); ---sorted_result -SELECT * FROM t1; - -set session rocksdb_flush_memtable_on_analyze=off; -ANALYZE TABLE t1; -SHOW INDEXES FROM t1; - -set session rocksdb_flush_memtable_on_analyze=on; -ANALYZE TABLE t1; -SHOW INDEXES FROM t1; -DROP TABLE t1; - -## -## test data length for show table status statements for tables with few rows -## - -CREATE TABLE t1 (a INT AUTO_INCREMENT, b INT, PRIMARY KEY(a)) ENGINE=ROCKSDB; -SHOW CREATE TABLE t1; -INSERT INTO t1 (b) VALUES (1); -INSERT INTO t1 (b) VALUES (2); -INSERT INTO t1 (b) VALUES (3); ---sorted_result -SELECT * FROM t1; - ---replace_column 5 # 6 # 7 # -SHOW TABLE STATUS LIKE 't1'; -ANALYZE TABLE t1; ---replace_column 5 # 6 # 7 # -SHOW TABLE STATUS LIKE 't1'; - -DROP TABLE t1; diff --git a/mysql-test/suite/rocksdb/r/cardinality.result b/mysql-test/suite/rocksdb/r/cardinality.result index cf5f7cd692d3..97ebef83ea69 100644 --- a/mysql-test/suite/rocksdb/r/cardinality.result +++ b/mysql-test/suite/rocksdb/r/cardinality.result @@ -1,3 +1,39 @@ +CREATE TABLE t0 (id int PRIMARY KEY, a int, INDEX ix_a (a)) engine=rocksdb; +insert into t0 values (0, 0),(1, 1),(2, 2),(3, 3),(4, 4), +(5, 4),(6, 4),(7, 4),(8, 4),(9, 4); +SELECT cardinality FROM information_schema.statistics where table_name="t0" and +column_name="id"; +cardinality +NULL +SELECT cardinality FROM information_schema.statistics where table_name="t0" and +column_name="a"; +cardinality +NULL +SET GLOBAL rocksdb_force_flush_memtable_now = 1; +ANALYZE TABLE t0; +SELECT table_rows into @N FROM information_schema.tables +WHERE table_name = "t0"; +SELECT FLOOR(@N/cardinality) FROM +information_schema.statistics where table_name="t0" and column_name="id"; +FLOOR(@N/cardinality) +1 +SELECT FLOOR(@N/cardinality) FROM +information_schema.statistics where table_name="t0" and column_name="a"; +FLOOR(@N/cardinality) +2 +SET GLOBAL rocksdb_force_flush_memtable_now = 1; +ANALYZE TABLE t0; +SELECT table_rows into @N FROM information_schema.tables +WHERE table_name = "t0"; +SELECT FLOOR(@N/cardinality) FROM +information_schema.statistics where table_name="t0" and column_name="id"; +FLOOR(@N/cardinality) +1 +SELECT FLOOR(@N/cardinality) FROM +information_schema.statistics where table_name="t0" and column_name="a"; +FLOOR(@N/cardinality) +2 +drop table t0; create table t1( id bigint not null primary key, i1 bigint, #unique diff --git a/mysql-test/suite/rocksdb/r/index_merge_rocksdb.result b/mysql-test/suite/rocksdb/r/index_merge_rocksdb.result index 8d4bafc108c6..6c997ab1f650 100644 --- a/mysql-test/suite/rocksdb/r/index_merge_rocksdb.result +++ b/mysql-test/suite/rocksdb/r/index_merge_rocksdb.result @@ -26,10 +26,10 @@ UPDATE t1 SET filler1='to be deleted' WHERE key1=100 and key2=100; DROP TABLE t0, t1; create table t1 (key1 int, key2 int, key3 int, key (key1), key (key2), key(key3)) engine=rocksdb; insert into t1 values (1, 100, 100), (1, 200, 200), (1, 300, 300); +set global rocksdb_force_flush_memtable_now=1; analyze table t1; Table Op Msg_type Msg_text test.t1 analyze status OK -set global rocksdb_force_flush_memtable_now=1; explain select * from t1 where key1 = 1; id select_type table partitions type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 NULL ref key1 key1 5 # 1 100.00 NULL diff --git a/mysql-test/suite/rocksdb/r/index_merge_rocksdb2.result b/mysql-test/suite/rocksdb/r/index_merge_rocksdb2.result index 0e7f8281c9ba..a2413a43270d 100644 --- a/mysql-test/suite/rocksdb/r/index_merge_rocksdb2.result +++ b/mysql-test/suite/rocksdb/r/index_merge_rocksdb2.result @@ -23,6 +23,7 @@ INDEX i6(key6), INDEX i7(key7), INDEX i8(key8) ); +set global rocksdb_force_flush_memtable_now=1; analyze table t0; Table Op Msg_type Msg_text test.t0 analyze status OK @@ -1045,6 +1046,7 @@ insert into t1 (key1a, key1b, key2a, key2b, key3a, key3b) select key1a, key1b, key2a, key2b, key3a, key3b from t1; insert into t1 (key1a, key1b, key2a, key2b, key3a, key3b) select key1a, key1b, key2a, key2b, key3a, key3b from t1; +set global rocksdb_force_flush_memtable_now=1; analyze table t1; Table Op Msg_type Msg_text test.t1 analyze status OK @@ -1812,6 +1814,7 @@ INSERT INTO t2 VALUES (103,4,4,'1900-01-01','1900-01-01','15:32:04','15:32:04','2001-03-06 10:00:37','2001-03-06 10:00:37','d','d'), (104,8,7,'2009-02-13','2009-02-13','20:25:36','20:25:36','2004-08-15 00:00:00','2004-08-15 00:00:00','z','z'), (105,8,6,'2008-03-25','2008-03-25','21:33:53','21:33:53','2006-10-12 06:13:06','2006-10-12 06:13:06','s','s'); +set global rocksdb_force_flush_memtable_now=1; analyze table t1; analyze table t2; UPDATE t1 SET col_time_nokey = 25 diff --git a/mysql-test/suite/rocksdb/r/rocksdb.result b/mysql-test/suite/rocksdb/r/rocksdb.result index 3380c11cc1d5..3d138e90c4b2 100644 --- a/mysql-test/suite/rocksdb/r/rocksdb.result +++ b/mysql-test/suite/rocksdb/r/rocksdb.result @@ -938,7 +938,6 @@ rocksdb_enable_ttl_read_filtering ON rocksdb_enable_write_thread_adaptive_yield OFF rocksdb_error_if_exists OFF rocksdb_flush_log_at_trx_commit 1 -rocksdb_flush_memtable_on_analyze ON rocksdb_force_compute_memtable_stats ON rocksdb_force_compute_memtable_stats_cachetime 0 rocksdb_force_flush_memtable_and_lzero_now OFF diff --git a/mysql-test/suite/rocksdb/r/rocksdb_range2.result b/mysql-test/suite/rocksdb/r/rocksdb_range2.result index 7baa4ae0af41..59fa7a92e673 100644 --- a/mysql-test/suite/rocksdb/r/rocksdb_range2.result +++ b/mysql-test/suite/rocksdb/r/rocksdb_range2.result @@ -7,7 +7,7 @@ count(*) 10000 explain select c1 from t1 where c1 > 5 limit 10; id select_type table partitions type possible_keys key key_len ref rows filtered Extra -1 SIMPLE t1 NULL range i i 9 NULL 9900 100.00 Using where; Using index +1 SIMPLE t1 NULL range i i 9 # # 100.00 Using where; Using index Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where (`test`.`t1`.`c1` > 5) limit 10 drop table t1; diff --git a/mysql-test/suite/rocksdb/t/cardinality.test b/mysql-test/suite/rocksdb/t/cardinality.test index d81eb7aeaedb..73265664d32d 100644 --- a/mysql-test/suite/rocksdb/t/cardinality.test +++ b/mysql-test/suite/rocksdb/t/cardinality.test @@ -1,4 +1,48 @@ --source include/have_rocksdb.inc +--source include/big_test.inc + +# Test memtable cardinality statistics +CREATE TABLE t0 (id int PRIMARY KEY, a int, INDEX ix_a (a)) engine=rocksdb; + +# populate the table with 10 reconds where cardinality of id is N and a is N/2. +insert into t0 values (0, 0),(1, 1),(2, 2),(3, 3),(4, 4), +(5, 4),(6, 4),(7, 4),(8, 4),(9, 4); + +# Assert no cardinality data exists before ANALYZE TABLE is done +SELECT cardinality FROM information_schema.statistics where table_name="t0" and +column_name="id"; +SELECT cardinality FROM information_schema.statistics where table_name="t0" and +column_name="a"; + +--disable_result_log +SET GLOBAL rocksdb_force_flush_memtable_now = 1; +ANALYZE TABLE t0; +--enable_result_log + +SELECT table_rows into @N FROM information_schema.tables +WHERE table_name = "t0"; +SELECT FLOOR(@N/cardinality) FROM +information_schema.statistics where table_name="t0" and column_name="id"; +SELECT FLOOR(@N/cardinality) FROM +information_schema.statistics where table_name="t0" and column_name="a"; + +# Flush the table and re-run the test as statistics is calculated a bit +# differently for memtable and SST files +SET GLOBAL rocksdb_force_flush_memtable_now = 1; +--disable_result_log +ANALYZE TABLE t0; +--enable_result_log + +SELECT table_rows into @N FROM information_schema.tables +WHERE table_name = "t0"; +SELECT FLOOR(@N/cardinality) FROM +information_schema.statistics where table_name="t0" and column_name="id"; +SELECT FLOOR(@N/cardinality) FROM +information_schema.statistics where table_name="t0" and column_name="a"; + +drop table t0; + +# Test big table on SST create table t1( id bigint not null primary key, diff --git a/mysql-test/suite/rocksdb/t/index_merge_rocksdb.test b/mysql-test/suite/rocksdb/t/index_merge_rocksdb.test index 5612036eea36..9ba855c54f26 100644 --- a/mysql-test/suite/rocksdb/t/index_merge_rocksdb.test +++ b/mysql-test/suite/rocksdb/t/index_merge_rocksdb.test @@ -73,14 +73,15 @@ while ($cnt) SELECT COUNT(*) FROM t1; +# flush the table first as statistics is calculated a bit differently for memtable and SST files +SET GLOBAL rocksdb_force_flush_memtable_now = 1; + -- disable_query_log -- disable_result_log ANALYZE TABLE t1; -- enable_result_log -- enable_query_log -SET GLOBAL rocksdb_force_flush_memtable_now = 1; - --replace_column 10 # 11 # EXPLAIN UPDATE t1 SET filler1='to be deleted' WHERE key1=100 AND key2=100; UPDATE t1 SET filler1='to be deleted' WHERE key1=100 and key2=100; @@ -98,8 +99,8 @@ while ($i <= 1000) { eval $insert; } --enable_query_log -analyze table t1; set global rocksdb_force_flush_memtable_now=1; +analyze table t1; --replace_column 9 # explain select * from t1 where key1 = 1; diff --git a/mysql-test/suite/rocksdb/t/index_merge_rocksdb2.test b/mysql-test/suite/rocksdb/t/index_merge_rocksdb2.test index ee7722add57e..ab9832f6eead 100644 --- a/mysql-test/suite/rocksdb/t/index_merge_rocksdb2.test +++ b/mysql-test/suite/rocksdb/t/index_merge_rocksdb2.test @@ -5,7 +5,8 @@ # t/index_merge_innodb.test # -# Index merge tests +# Index merge tests (the test is called 'index_merge_rocksdb2' because +# 'index_merge_rocksdb' has already existed before copying 'index_merge_innodb') # # Last update: # 2006-08-07 ML test refactored (MySQL 5.1) @@ -17,6 +18,7 @@ --source include/have_rocksdb.inc let $engine_type= RocksDB; +let $eval_before_analyze=set global rocksdb_force_flush_memtable_now=1; # skipping because too unstable in MyRocks let $skip_ror_EXPLAIN_for_MyRocks = 1; let $random_rows_in_EXPLAIN = 1; @@ -61,6 +63,7 @@ INSERT INTO t1 SELECT id + 16, 7, 0 FROM t1; -- disable_query_log -- disable_result_log +set global rocksdb_force_flush_memtable_now=1; analyze table t1; -- enable_result_log -- enable_query_log diff --git a/mysql-test/suite/rocksdb/t/rocksdb.test b/mysql-test/suite/rocksdb/t/rocksdb.test index 2697eaddcfea..94111adaea42 100644 --- a/mysql-test/suite/rocksdb/t/rocksdb.test +++ b/mysql-test/suite/rocksdb/t/rocksdb.test @@ -578,6 +578,9 @@ insert into t30 values ('row3', 'row3-key', 'row3-data'), ('row4', 'row4-key', 'row4-data'), ('row5', 'row5-key', 'row5-data'); +--disable_query_log +set global rocksdb_force_flush_memtable_now=1; +--enable_query_log analyze table t30; --replace_column 10 # diff --git a/mysql-test/suite/rocksdb/t/rocksdb_range2.test b/mysql-test/suite/rocksdb/t/rocksdb_range2.test index d3adec013df6..fcfdb9ac1ba2 100644 --- a/mysql-test/suite/rocksdb/t/rocksdb_range2.test +++ b/mysql-test/suite/rocksdb/t/rocksdb_range2.test @@ -15,5 +15,6 @@ while ($i<10000) --enable_query_log analyze table t1; select count(*) from t1; +--replace_column 9 # 10 # explain select c1 from t1 where c1 > 5 limit 10; drop table t1; diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index 6299246759bc..8806d764b785 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -1347,11 +1347,6 @@ static MYSQL_SYSVAR_BOOL( rocksdb_force_flush_memtable_and_lzero_now, rocksdb_force_flush_memtable_and_lzero_now_stub, FALSE); -static MYSQL_THDVAR_BOOL( - flush_memtable_on_analyze, PLUGIN_VAR_RQCMDARG, - "Forces memtable flush on ANALZYE table to get accurate cardinality", - nullptr, nullptr, true); - static MYSQL_SYSVAR_UINT( seconds_between_stat_computes, rocksdb_seconds_between_stat_computes, PLUGIN_VAR_RQCMDARG, @@ -1578,7 +1573,6 @@ static struct st_mysql_sys_var *rocksdb_system_variables[] = { MYSQL_SYSVAR(debug_ttl_read_filter_ts), MYSQL_SYSVAR(debug_ttl_ignore_pk), MYSQL_SYSVAR(reset_stats), - MYSQL_SYSVAR(flush_memtable_on_analyze), MYSQL_SYSVAR(seconds_between_stat_computes), MYSQL_SYSVAR(compaction_sequential_deletes), @@ -7761,11 +7755,7 @@ int ha_rocksdb::index_first_intern(uchar *const buf) { DBUG_ASSERT(key != nullptr); const Rdb_key_def &kd = *m_key_descr_arr[active_index]; - if (kd.m_is_reverse_cf) { - kd.get_supremum_key(key, &key_size); - } else { - kd.get_infimum_key(key, &key_size); - } + kd.get_first_key(key, &key_size); rocksdb::Slice index_key((const char *)key, key_size); @@ -8833,10 +8823,7 @@ void ha_rocksdb::release_scan_iterator() { void ha_rocksdb::setup_iterator_for_rnd_scan() { uint key_size; - if (m_pk_descr->m_is_reverse_cf) - m_pk_descr->get_supremum_key(m_pk_packed_tuple, &key_size); - else - m_pk_descr->get_infimum_key(m_pk_packed_tuple, &key_size); + m_pk_descr->get_first_key(m_pk_packed_tuple, &key_size); rocksdb::Slice table_key((const char *)m_pk_packed_tuple, key_size); @@ -9228,6 +9215,10 @@ int ha_rocksdb::info(uint flag) { uint64_t memtableCount; uint64_t memtableSize; + // the stats below are calculated from skiplist wich is a probabilistic + // data structure, so the results vary between test runs + // it also can return 0 for quite a large tables which means that + // cardinality for memtable only indxes will be reported as 0 rdb->GetApproximateMemTableStats(m_pk_descr->get_cf(), r, &memtableCount, &memtableSize); @@ -9258,10 +9249,9 @@ int ha_rocksdb::info(uint flag) { if (stats.records != 0) stats.mean_rec_length = stats.data_file_length / stats.records; } - if (flag & HA_STATUS_CONST) { + if (flag & (HA_STATUS_VARIABLE | HA_STATUS_CONST)) { ref_length = m_pk_descr->max_storage_fmt_length(); - // TODO: Needs to reimplement after having real index statistics for (uint i = 0; i < m_tbl_def->m_key_count; i++) { if (is_hidden_pk(i, table, m_tbl_def)) { continue; @@ -10175,24 +10165,21 @@ int ha_rocksdb::calculate_stats(const TABLE *const table_arg, THD *const thd, std::unordered_map> ranges; std::unordered_set ids_to_check; - std::unordered_map ids_to_keyparts; std::vector buf(table_arg->s->keys * 2 * Rdb_key_def::INDEX_NUMBER_SIZE); + std::unordered_map stats; for (uint i = 0; i < table_arg->s->keys; i++) { const auto bufp = &buf[i * 2 * Rdb_key_def::INDEX_NUMBER_SIZE]; const Rdb_key_def &kd = *m_key_descr_arr[i]; + const GL_INDEX_ID index_id = kd.get_gl_index_id(); ranges[kd.get_cf()].push_back(get_range(i, bufp)); - ids_to_check.insert(kd.get_gl_index_id()); - ids_to_keyparts[kd.get_gl_index_id()] = kd.get_key_parts(); - } - // for analyze statements, force flush on memtable to get accurate cardinality - Rdb_cf_manager &cf_manager = rdb_get_cf_manager(); - if (thd != nullptr && THDVAR(thd, flush_memtable_on_analyze) && - !rocksdb_pause_background_work) { - for (auto it : ids_to_check) { - rdb->Flush(rocksdb::FlushOptions(), cf_manager.get_cf(it.cf_id)); - } + ids_to_check.insert(index_id); + // Initialize the stats to 0. If there are no files that contain + // this gl_index_id, then 0 should be stored for the cached stats. + stats[index_id] = Rdb_index_stats(index_id); + DBUG_ASSERT(kd.get_key_parts() > 0); + stats[index_id].m_distinct_keys_per_prefix.resize(kd.get_key_parts()); } // get RocksDB table properties for these ranges @@ -10209,15 +10196,6 @@ int ha_rocksdb::calculate_stats(const TABLE *const table_arg, THD *const thd, } int num_sst = 0; - // group stats per index id - std::unordered_map stats; - for (const auto &it : ids_to_check) { - // Initialize the stats to 0. If there are no files that contain - // this gl_index_id, then 0 should be stored for the cached stats. - stats[it] = Rdb_index_stats(it); - DBUG_ASSERT(ids_to_keyparts.count(it) > 0); - stats[it].m_distinct_keys_per_prefix.resize(ids_to_keyparts[it]); - } for (const auto &it : props) { std::vector sst_stats; Rdb_tbl_prop_coll::read_stats_from_tbl_props(it.second, &sst_stats); @@ -10244,6 +10222,53 @@ int ha_rocksdb::calculate_stats(const TABLE *const table_arg, THD *const thd, num_sst++; } + // calculate memtable cardinality + Rdb_tbl_card_coll cardinality_collector(rocksdb_table_stats_sampling_pct); + auto read_opts = rocksdb::ReadOptions(); + read_opts.read_tier = rocksdb::ReadTier::kMemtableTier; + for (uint i = 0; i < table_arg->s->keys; i++) { + const Rdb_key_def &kd = *m_key_descr_arr[i]; + Rdb_index_stats &stat = stats[kd.get_gl_index_id()]; + + uchar r_buf[Rdb_key_def::INDEX_NUMBER_SIZE * 2]; + auto r = get_range(i, r_buf); + uint64_t memtableCount; + uint64_t memtableSize; + rdb->GetApproximateMemTableStats(kd.get_cf(), r, &memtableCount, + &memtableSize); + if (memtableCount < (uint64_t)stat.m_rows / 10) { + // skip tables that already have enough stats from SST files to reduce + // overhead and avoid degradation of big tables stats by sampling from + // relatively tiny (less than 10% of full data set) memtable dataset + continue; + } + + std::unique_ptr it = std::unique_ptr( + rdb->NewIterator(read_opts, kd.get_cf())); + + uchar *first_key; + uint key_size; + if (is_pk(i, table, m_tbl_def)) { + first_key = m_pk_packed_tuple; + } else { + first_key = m_sk_packed_tuple; + } + kd.get_first_key(first_key, &key_size); + rocksdb::Slice first_index_key((const char *)first_key, key_size); + + cardinality_collector.Reset(); + for (it->Seek(first_index_key); is_valid(it.get()); it->Next()) { + const rocksdb::Slice key = it->key(); + if (!kd.covers_key(key)) { + break; // end of this index + } + stat.m_rows++; + + cardinality_collector.ProcessKey(key, &kd, &stat); + } + cardinality_collector.AdjustStats(&stat); + } + // set and persist new stats ddl_manager.set_stats(stats); ddl_manager.persist_stats(true); diff --git a/storage/rocksdb/properties_collector.cc b/storage/rocksdb/properties_collector.cc index 9b7fb488ffc6..b7628dccac4b 100644 --- a/storage/rocksdb/properties_collector.cc +++ b/storage/rocksdb/properties_collector.cc @@ -48,17 +48,9 @@ Rdb_tbl_prop_coll::Rdb_tbl_prop_coll(Rdb_ddl_manager *const ddl_manager, : m_cf_id(cf_id), m_ddl_manager(ddl_manager), m_last_stats(nullptr), m_rows(0l), m_window_pos(0l), m_deleted_rows(0l), m_max_deleted_rows(0l), m_file_size(0), m_params(params), - m_table_stats_sampling_pct(table_stats_sampling_pct), - m_seed(time(nullptr)), m_card_adj_extra(1.) { + m_cardinality_collector(table_stats_sampling_pct) { DBUG_ASSERT(ddl_manager != nullptr); - // We need to adjust the index cardinality numbers based on the sampling - // rate so that the output of "SHOW INDEX" command will reflect reality - // more closely. It will still be an approximation, just a better one. - if (m_table_stats_sampling_pct > 0) { - m_card_adj_extra = 100. / m_table_stats_sampling_pct; - } - m_deleted_rows_window.resize(m_params.m_window, false); } @@ -141,7 +133,7 @@ Rdb_index_stats *Rdb_tbl_prop_coll::AccessStats(const rocksdb::Slice &key) { m_last_stats->m_name = m_keydef->get_name(); } } - m_last_key.clear(); + m_cardinality_collector.Reset(); } return m_last_stats; @@ -151,7 +143,7 @@ void Rdb_tbl_prop_coll::CollectStatsForRow(const rocksdb::Slice &key, const rocksdb::Slice &value, const rocksdb::EntryType &type, const uint64_t &file_size) { - const auto stats = AccessStats(key); + auto stats = AccessStats(key); stats->m_data_size += key.size() + value.size(); @@ -184,31 +176,8 @@ void Rdb_tbl_prop_coll::CollectStatsForRow(const rocksdb::Slice &key, stats->m_actual_disk_size += file_size - m_file_size; m_file_size = file_size; - if (m_keydef != nullptr && ShouldCollectStats()) { - std::size_t column = 0; - bool new_key = true; - - if (!m_last_key.empty()) { - rocksdb::Slice last(m_last_key.data(), m_last_key.size()); - new_key = (m_keydef->compare_keys(&last, &key, &column) == 0); - } - - if (new_key) { - DBUG_ASSERT(column <= stats->m_distinct_keys_per_prefix.size()); - - for (auto i = column; i < stats->m_distinct_keys_per_prefix.size(); i++) { - stats->m_distinct_keys_per_prefix[i]++; - } - - // assign new last_key for the next call - // however, we only need to change the last key - // if one of the first n-1 columns is different - // If the n-1 prefix is the same, no sense in storing - // the new key - if (column < stats->m_distinct_keys_per_prefix.size()) { - m_last_key.assign(key.data(), key.size()); - } - } + if (m_keydef != nullptr) { + m_cardinality_collector.ProcessKey(key, m_keydef.get(), stats); } } @@ -255,8 +224,10 @@ Rdb_tbl_prop_coll::Finish(rocksdb::UserCollectedProperties *const properties) { rocksdb_num_sst_entry_other += num_sst_entry_other; } - properties->insert({INDEXSTATS_KEY, - Rdb_index_stats::materialize(m_stats, m_card_adj_extra)}); + for (Rdb_index_stats &stat : m_stats) { + m_cardinality_collector.AdjustStats(&stat); + } + properties->insert({INDEXSTATS_KEY, Rdb_index_stats::materialize(m_stats)}); return rocksdb::Status::OK(); } @@ -266,23 +237,6 @@ bool Rdb_tbl_prop_coll::NeedCompact() const { (m_max_deleted_rows > m_params.m_deletes); } -bool Rdb_tbl_prop_coll::ShouldCollectStats() { - // Zero means that we'll use all the keys to update statistics. - if (!m_table_stats_sampling_pct || - RDB_TBL_STATS_SAMPLE_PCT_MAX == m_table_stats_sampling_pct) { - return true; - } - - const int val = rand_r(&m_seed) % (RDB_TBL_STATS_SAMPLE_PCT_MAX - - RDB_TBL_STATS_SAMPLE_PCT_MIN + 1) + - RDB_TBL_STATS_SAMPLE_PCT_MIN; - - DBUG_ASSERT(val >= RDB_TBL_STATS_SAMPLE_PCT_MIN); - DBUG_ASSERT(val <= RDB_TBL_STATS_SAMPLE_PCT_MAX); - - return val <= m_table_stats_sampling_pct; -} - /* Returns the same as above, but in human-readable way for logging */ @@ -359,8 +313,7 @@ void Rdb_tbl_prop_coll::read_stats_from_tbl_props( Serializes an array of Rdb_index_stats into a network string. */ std::string -Rdb_index_stats::materialize(const std::vector &stats, - const float card_adj_extra) { +Rdb_index_stats::materialize(const std::vector &stats) { String ret; rdb_netstr_append_uint16(&ret, INDEX_STATS_VERSION_ENTRY_TYPES); for (const auto &i : stats) { @@ -376,8 +329,7 @@ Rdb_index_stats::materialize(const std::vector &stats, rdb_netstr_append_uint64(&ret, i.m_entry_merges); rdb_netstr_append_uint64(&ret, i.m_entry_others); for (const auto &num_keys : i.m_distinct_keys_per_prefix) { - const float upd_num_keys = num_keys * card_adj_extra; - rdb_netstr_append_uint64(&ret, static_cast(upd_num_keys)); + rdb_netstr_append_uint64(&ret, num_keys); } } @@ -515,4 +467,75 @@ void Rdb_index_stats::merge(const Rdb_index_stats &s, const bool &increment, } } +Rdb_tbl_card_coll::Rdb_tbl_card_coll(uint8_t table_stats_sampling_pct) + : m_table_stats_sampling_pct(table_stats_sampling_pct), + m_seed(time(nullptr)) {} + +bool Rdb_tbl_card_coll::IsSamplingDisabled() const { + // Zero means that we'll use all the keys to update statistics. + return m_table_stats_sampling_pct == 0 || + RDB_TBL_STATS_SAMPLE_PCT_MAX == m_table_stats_sampling_pct; +} + +bool Rdb_tbl_card_coll::ShouldCollectStats() { + if (IsSamplingDisabled()) { + return true; // collect every key + } + + const int val = rand_r(&m_seed) % (RDB_TBL_STATS_SAMPLE_PCT_MAX - + RDB_TBL_STATS_SAMPLE_PCT_MIN + 1) + + RDB_TBL_STATS_SAMPLE_PCT_MIN; + + DBUG_ASSERT(val >= RDB_TBL_STATS_SAMPLE_PCT_MIN); + DBUG_ASSERT(val <= RDB_TBL_STATS_SAMPLE_PCT_MAX); + + return val <= m_table_stats_sampling_pct; +} + +void Rdb_tbl_card_coll::ProcessKey(const rocksdb::Slice &key, + const Rdb_key_def *keydef, + Rdb_index_stats *stats) { + if (ShouldCollectStats()) { + std::size_t column = 0; + bool new_key = true; + + if (!m_last_key.empty()) { + rocksdb::Slice last(m_last_key.data(), m_last_key.size()); + new_key = (keydef->compare_keys(&last, &key, &column) == 0); + } + + if (new_key) { + DBUG_ASSERT(column <= stats->m_distinct_keys_per_prefix.size()); + + for (auto i = column; i < stats->m_distinct_keys_per_prefix.size(); i++) { + stats->m_distinct_keys_per_prefix[i]++; + } + + // assign new last_key for the next call + // however, we only need to change the last key + // if one of the first n-1 columns is different + // If the n-1 prefix is the same, no sense in storing + // the new key + if (column < stats->m_distinct_keys_per_prefix.size()) { + m_last_key.assign(key.data(), key.size()); + } + } + } +} + +void Rdb_tbl_card_coll::Reset() { m_last_key.clear(); } + +// We need to adjust the index cardinality numbers based on the sampling +// rate so that the output of "SHOW INDEX" command will reflect reality +// more closely. It will still be an approximation, just a better one. +void Rdb_tbl_card_coll::AdjustStats(Rdb_index_stats *stats) { + if (IsSamplingDisabled()) { + // no sampling was done, return as stats is + return; + } + for (int64_t &num_keys : stats->m_distinct_keys_per_prefix) { + num_keys = num_keys * 100 / m_table_stats_sampling_pct; + } +} + } // namespace myrocks diff --git a/storage/rocksdb/properties_collector.h b/storage/rocksdb/properties_collector.h index eeb20587c273..e7fb9c3a486b 100644 --- a/storage/rocksdb/properties_collector.h +++ b/storage/rocksdb/properties_collector.h @@ -56,8 +56,7 @@ struct Rdb_index_stats { std::vector m_distinct_keys_per_prefix; std::string m_name; // name is not persisted - static std::string materialize(const std::vector &stats, - const float card_adj_extra); + static std::string materialize(const std::vector &stats); static int unmaterialize(const std::string &s, std::vector *const ret); @@ -71,6 +70,40 @@ struct Rdb_index_stats { const int64_t &estimated_data_len = 0); }; +// The helper class to calculate index cardinality +class Rdb_tbl_card_coll { + public: + explicit Rdb_tbl_card_coll(uint8_t table_stats_sampling_pct); + + public: + void ProcessKey(const rocksdb::Slice &key, const Rdb_key_def *keydef, + Rdb_index_stats *stats); + /* + * Resets the state of the collector to start calculating statistics for a + * next index. + */ + void Reset(); + + /* + * Cardinality statistics might be calculated using some sampling strategy. + * This method adjusts gathered statistics according to the sampling + * strategy used. Note that adjusted cardinality value is just an estimate + * and can return a value exeeding number of rows in a table, so the + * returned value should be capped by row count before using it by + * an optrimizer or displaying it to a clent. + */ + void AdjustStats(Rdb_index_stats *stats); + + private: + bool ShouldCollectStats(); + bool IsSamplingDisabled() const; + + private: + std::string m_last_key; + uint8_t m_table_stats_sampling_pct; + unsigned int m_seed; +}; + class Rdb_tbl_prop_coll : public rocksdb::TablePropertiesCollector { public: Rdb_tbl_prop_coll(Rdb_ddl_manager *const ddl_manager, @@ -130,9 +163,7 @@ class Rdb_tbl_prop_coll : public rocksdb::TablePropertiesCollector { uint64_t m_rows, m_window_pos, m_deleted_rows, m_max_deleted_rows; uint64_t m_file_size; Rdb_compact_params m_params; - uint8_t m_table_stats_sampling_pct; - unsigned int m_seed; - float m_card_adj_extra; + Rdb_tbl_card_coll m_cardinality_collector; }; class Rdb_tbl_prop_coll_factory diff --git a/storage/rocksdb/rdb_datadic.cc b/storage/rocksdb/rdb_datadic.cc index ae66c20fbd74..5bfeaf9ca549 100644 --- a/storage/rocksdb/rdb_datadic.cc +++ b/storage/rocksdb/rdb_datadic.cc @@ -4884,7 +4884,7 @@ bool Rdb_dict_manager::get_max_index_id(uint32_t *const index_id) const { } bool Rdb_dict_manager::update_max_index_id(rocksdb::WriteBatch *const batch, - const uint32_t &index_id) const { + uint32_t index_id) const { DBUG_ASSERT(batch != nullptr); uint32_t old_index_id = -1; @@ -4920,7 +4920,7 @@ void Rdb_dict_manager::add_stats( // IndexStats::materialize takes complete care of serialization including // storing the version const auto value = - Rdb_index_stats::materialize(std::vector{it}, 1.); + Rdb_index_stats::materialize(std::vector{it}); batch->Put(m_system_cfh, rocksdb::Slice((char *)key_buf, sizeof(key_buf)), value); @@ -4948,7 +4948,7 @@ Rdb_index_stats Rdb_dict_manager::get_stats(GL_INDEX_ID gl_index_id) const { rocksdb::Status Rdb_dict_manager::put_auto_incr_val(rocksdb::WriteBatchBase *batch, - const GL_INDEX_ID &gl_index_id, + GL_INDEX_ID gl_index_id, ulonglong val) const { uchar key_buf[Rdb_key_def::INDEX_NUMBER_SIZE * 3] = {0}; dump_index_id(key_buf, Rdb_key_def::AUTO_INC, gl_index_id); @@ -4969,7 +4969,7 @@ Rdb_dict_manager::put_auto_incr_val(rocksdb::WriteBatchBase *batch, return batch->Merge(m_system_cfh, key, value); } -bool Rdb_dict_manager::get_auto_incr_val(const GL_INDEX_ID &gl_index_id, +bool Rdb_dict_manager::get_auto_incr_val(GL_INDEX_ID gl_index_id, ulonglong *new_val) const { uchar key_buf[Rdb_key_def::INDEX_NUMBER_SIZE * 3] = {0}; dump_index_id(key_buf, Rdb_key_def::AUTO_INC, gl_index_id); diff --git a/storage/rocksdb/rdb_datadic.h b/storage/rocksdb/rdb_datadic.h index 5fc5217c7680..5e9a85a144e9 100644 --- a/storage/rocksdb/rdb_datadic.h +++ b/storage/rocksdb/rdb_datadic.h @@ -232,6 +232,14 @@ class Rdb_key_def { *size = INDEX_NUMBER_SIZE; } + /* Get the first key that you need to position at to start iterating. + Returns a "supremum" or "infimum" for this index based on collation order + */ + inline void get_first_key(uchar *const key, uint *const size) const { + return m_is_reverse_cf ? get_supremum_key(key, size) + : get_infimum_key(key, size); + } + /* Make a key that is right after the given key. */ static int successor(uchar *const packed_tuple, const uint &len); @@ -1306,15 +1314,15 @@ class Rdb_dict_manager { bool get_max_index_id(uint32_t *const index_id) const; bool update_max_index_id(rocksdb::WriteBatch *const batch, - const uint32_t &index_id) const; + uint32_t index_id) const; void add_stats(rocksdb::WriteBatch *const batch, const std::vector &stats) const; Rdb_index_stats get_stats(GL_INDEX_ID gl_index_id) const; rocksdb::Status put_auto_incr_val(rocksdb::WriteBatchBase *batch, - const GL_INDEX_ID &gl_index_id, + GL_INDEX_ID gl_index_id, ulonglong val) const; - bool get_auto_incr_val(const GL_INDEX_ID &gl_index_id, + bool get_auto_incr_val(GL_INDEX_ID gl_index_id, ulonglong *new_val) const; }; From 0c712fcaa39f2af4db3fe3fab1f0ecea6fbcee92 Mon Sep 17 00:00:00 2001 From: Manuel Ung Date: Wed, 25 Oct 2017 14:59:14 -0700 Subject: [PATCH 0469/1221] Implement inplace alter for auto_increment Upstream commit ID : fb-mysql-5.6.35/9f53fae746084823d35177b70a314d14c93a441b MYR-198 : Merge prod201704 Summary: This implements inplace alter for changing auto_increment values. It works by reading the last value of the auto increment index and compares that with the request auto_increment value in the alter statement. The larger of the two values is set as the new autoincrement value for the table. To handle partitions, every partition is handled as a separate table. Since we call `prepare_inplace_alter_table` for every partition but `commit_inplace_alter_table` only once, we load the last value in the index during prepare and write into the data dictionary on commit. Closes https://github.com/facebook/mysql-5.6/pull/738 Differential Revision: D6083120 fbshipit-source-id: ba231e3 --- .../rocksdb/include/autoinc_crash_safe.inc | 150 ++++++++ .../suite/rocksdb/r/autoinc_crash_safe.result | 29 +- .../r/autoinc_crash_safe_partition.result | 171 ++++++++++ .../suite/rocksdb/t/autoinc_crash_safe.test | 123 +------ .../t/autoinc_crash_safe_partition-master.opt | 1 + .../t/autoinc_crash_safe_partition-slave.opt | 1 + .../t/autoinc_crash_safe_partition.test | 10 + storage/rocksdb/ha_rocksdb.cc | 322 ++++++++++-------- storage/rocksdb/ha_rocksdb.h | 9 +- storage/rocksdb/rdb_datadic.cc | 5 +- storage/rocksdb/rdb_datadic.h | 3 +- 11 files changed, 556 insertions(+), 268 deletions(-) create mode 100644 mysql-test/suite/rocksdb/include/autoinc_crash_safe.inc create mode 100644 mysql-test/suite/rocksdb/r/autoinc_crash_safe_partition.result create mode 100644 mysql-test/suite/rocksdb/t/autoinc_crash_safe_partition-master.opt create mode 100644 mysql-test/suite/rocksdb/t/autoinc_crash_safe_partition-slave.opt create mode 100644 mysql-test/suite/rocksdb/t/autoinc_crash_safe_partition.test diff --git a/mysql-test/suite/rocksdb/include/autoinc_crash_safe.inc b/mysql-test/suite/rocksdb/include/autoinc_crash_safe.inc new file mode 100644 index 000000000000..feb56ca91de2 --- /dev/null +++ b/mysql-test/suite/rocksdb/include/autoinc_crash_safe.inc @@ -0,0 +1,150 @@ +--source include/count_sessions.inc +--echo # +--echo # Testing concurrent transactions. +--echo # + +connect (con1,localhost,root,,); +connect (con2,localhost,root,,); +connect (con3,localhost,root,,); + +connection con1; +begin; +insert into t values (); # 1 + +connection con2; +begin; +insert into t values (); # 2 + +connection con3; +begin; +insert into t values (); # 3 + +connection con1; +insert into t values (); # 4 + +connection con2; +insert into t values (); # 5 + +connection con3; +insert into t values (); # 6 + +connection con2; +commit; + +connection con3; +rollback; + +connection con1; +commit; + +delete from t; + +--echo # Master value before restart +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; + +--echo # Slave value before restart +sync_slave_with_master; +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; + +connection slave; +--source include/stop_slave.inc +--let $rpl_server_number = 1 +--source include/rpl_restart_server.inc + +connection default; +--echo # Master value after restart +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; + +--let $rpl_server_number = 2 +--source include/rpl_restart_server.inc + +connection slave; +--source include/start_slave.inc +--echo # Slave value after restart +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; + +disconnect con1; +disconnect con2; +disconnect con3; + +--echo # +--echo # Testing interaction of merge markers with various DDL statements. +--echo # +connection slave; +--source include/stop_slave.inc + +connection default; + +--echo # Drop and add primary key. +alter table t modify i int; +alter table t drop primary key; +alter table t add primary key (i); +alter table t modify i int auto_increment; + +--let $rpl_server_number = 1 +--source include/rpl_restart_server.inc +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; + +--echo # Remove auto_increment property. +alter table t modify i int; +--let $rpl_server_number = 1 +--source include/rpl_restart_server.inc +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; + +--echo # Add auto_increment property. +insert into t values (123); +alter table t modify i int auto_increment; +--let $rpl_server_number = 1 +--source include/rpl_restart_server.inc +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; + +--echo # Add column j. +alter table t add column j int; +--let $rpl_server_number = 1 +--source include/rpl_restart_server.inc +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; + +--echo # Rename tables. +rename table t to t2; +rename table t2 to t; + +--let $rpl_server_number = 1 +--source include/rpl_restart_server.inc +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; + +--echo # Change auto_increment property +alter table t auto_increment = 1000; +--let $rpl_server_number = 1 +--source include/rpl_restart_server.inc +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; + +alter table t auto_increment = 1; +--let $rpl_server_number = 1 +--source include/rpl_restart_server.inc +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; + +alter table t drop primary key, add key (i), auto_increment = 1; +--let $rpl_server_number = 1 +--source include/rpl_restart_server.inc +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; + +alter table t add key (j), auto_increment = 1; +--let $rpl_server_number = 1 +--source include/rpl_restart_server.inc +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; + +alter table t modify i int; +alter table t add column (k int auto_increment), add key(k), auto_increment=15; +--let $rpl_server_number = 1 +--source include/rpl_restart_server.inc +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; + +--echo # Drop table. +drop table t; + +--let $rpl_server_number = 1 +--source include/rpl_restart_server.inc + +connection slave; +--source include/start_slave.inc +--source include/wait_until_count_sessions.inc diff --git a/mysql-test/suite/rocksdb/r/autoinc_crash_safe.result b/mysql-test/suite/rocksdb/r/autoinc_crash_safe.result index c7c972643e39..ae29b4e415d3 100644 --- a/mysql-test/suite/rocksdb/r/autoinc_crash_safe.result +++ b/mysql-test/suite/rocksdb/r/autoinc_crash_safe.result @@ -3,10 +3,10 @@ Warnings: Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. [connection master] +create table t (i int primary key auto_increment) engine=rocksdb; # # Testing concurrent transactions. # -create table t (i int primary key auto_increment) engine=rocksdb; begin; insert into t values (); begin; @@ -79,6 +79,33 @@ include/rpl_restart_server.inc [server_number=1] select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; table_schema table_name auto_increment test t 124 +# Change auto_increment property +alter table t auto_increment = 1000; +include/rpl_restart_server.inc [server_number=1] +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; +table_schema table_name auto_increment +test t 1000 +alter table t auto_increment = 1; +include/rpl_restart_server.inc [server_number=1] +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; +table_schema table_name auto_increment +test t 124 +alter table t drop primary key, add key (i), auto_increment = 1; +include/rpl_restart_server.inc [server_number=1] +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; +table_schema table_name auto_increment +test t 124 +alter table t add key (j), auto_increment = 1; +include/rpl_restart_server.inc [server_number=1] +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; +table_schema table_name auto_increment +test t 124 +alter table t modify i int; +alter table t add column (k int auto_increment), add key(k), auto_increment=15; +include/rpl_restart_server.inc [server_number=1] +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; +table_schema table_name auto_increment +test t 16 # Drop table. drop table t; include/rpl_restart_server.inc [server_number=1] diff --git a/mysql-test/suite/rocksdb/r/autoinc_crash_safe_partition.result b/mysql-test/suite/rocksdb/r/autoinc_crash_safe_partition.result new file mode 100644 index 000000000000..78f14f051434 --- /dev/null +++ b/mysql-test/suite/rocksdb/r/autoinc_crash_safe_partition.result @@ -0,0 +1,171 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +create table t (i int primary key auto_increment) engine=rocksdb partition by key (i) partitions 3; +Warnings: +Warning 1287 The partition engine, used by table 'test.t', is deprecated and will be removed in a future release. Please use native partitioning instead. +# +# Testing concurrent transactions. +# +begin; +insert into t values (); +Warnings: +Warning 1287 The partition engine, used by table 'test.t', is deprecated and will be removed in a future release. Please use native partitioning instead. +begin; +insert into t values (); +begin; +insert into t values (); +insert into t values (); +insert into t values (); +insert into t values (); +commit; +rollback; +commit; +delete from t; +# Master value before restart +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; +table_schema table_name auto_increment +test t 7 +Warnings: +Warning 1287 The partition engine, used by table 'test.t', is deprecated and will be removed in a future release. Please use native partitioning instead. +# Slave value before restart +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; +table_schema table_name auto_increment +test t 6 +Warnings: +Warning 1287 The partition engine, used by table 'test.t', is deprecated and will be removed in a future release. Please use native partitioning instead. +include/stop_slave.inc +include/rpl_restart_server.inc [server_number=1] +# Master value after restart +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; +table_schema table_name auto_increment +test t 6 +Warnings: +Warning 1287 The partition engine, used by table 'test.t', is deprecated and will be removed in a future release. Please use native partitioning instead. +include/rpl_restart_server.inc [server_number=2] +include/start_slave.inc +# Slave value after restart +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; +table_schema table_name auto_increment +test t 6 +Warnings: +Warning 1287 The partition engine, used by table 'test.t', is deprecated and will be removed in a future release. Please use native partitioning instead. +# +# Testing interaction of merge markers with various DDL statements. +# +include/stop_slave.inc +# Drop and add primary key. +alter table t modify i int; +Warnings: +Warning 1287 The partition engine, used by table 'test.t', is deprecated and will be removed in a future release. Please use native partitioning instead. +alter table t drop primary key; +Warnings: +Warning 1287 The partition engine, used by table 'test.t', is deprecated and will be removed in a future release. Please use native partitioning instead. +alter table t add primary key (i); +Warnings: +Warning 1287 The partition engine, used by table 'test.t', is deprecated and will be removed in a future release. Please use native partitioning instead. +alter table t modify i int auto_increment; +Warnings: +Warning 1287 The partition engine, used by table 'test.t', is deprecated and will be removed in a future release. Please use native partitioning instead. +include/rpl_restart_server.inc [server_number=1] +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; +table_schema table_name auto_increment +test t 1 +Warnings: +Warning 1287 The partition engine, used by table 'test.t', is deprecated and will be removed in a future release. Please use native partitioning instead. +# Remove auto_increment property. +alter table t modify i int; +Warnings: +Warning 1287 The partition engine, used by table 'test.t', is deprecated and will be removed in a future release. Please use native partitioning instead. +include/rpl_restart_server.inc [server_number=1] +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; +table_schema table_name auto_increment +test t NULL +Warnings: +Warning 1287 The partition engine, used by table 'test.t', is deprecated and will be removed in a future release. Please use native partitioning instead. +# Add auto_increment property. +insert into t values (123); +alter table t modify i int auto_increment; +Warnings: +Warning 1287 The partition engine, used by table 'test.t', is deprecated and will be removed in a future release. Please use native partitioning instead. +include/rpl_restart_server.inc [server_number=1] +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; +table_schema table_name auto_increment +test t 124 +Warnings: +Warning 1287 The partition engine, used by table 'test.t', is deprecated and will be removed in a future release. Please use native partitioning instead. +# Add column j. +alter table t add column j int; +Warnings: +Warning 1287 The partition engine, used by table 'test.t', is deprecated and will be removed in a future release. Please use native partitioning instead. +include/rpl_restart_server.inc [server_number=1] +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; +table_schema table_name auto_increment +test t 124 +Warnings: +Warning 1287 The partition engine, used by table 'test.t', is deprecated and will be removed in a future release. Please use native partitioning instead. +# Rename tables. +rename table t to t2; +rename table t2 to t; +include/rpl_restart_server.inc [server_number=1] +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; +table_schema table_name auto_increment +test t 124 +Warnings: +Warning 1287 The partition engine, used by table 'test.t', is deprecated and will be removed in a future release. Please use native partitioning instead. +# Change auto_increment property +alter table t auto_increment = 1000; +Warnings: +Warning 1287 The partition engine, used by table 'test.t', is deprecated and will be removed in a future release. Please use native partitioning instead. +include/rpl_restart_server.inc [server_number=1] +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; +table_schema table_name auto_increment +test t 1000 +Warnings: +Warning 1287 The partition engine, used by table 'test.t', is deprecated and will be removed in a future release. Please use native partitioning instead. +alter table t auto_increment = 1; +Warnings: +Warning 1287 The partition engine, used by table 'test.t', is deprecated and will be removed in a future release. Please use native partitioning instead. +include/rpl_restart_server.inc [server_number=1] +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; +table_schema table_name auto_increment +test t 124 +Warnings: +Warning 1287 The partition engine, used by table 'test.t', is deprecated and will be removed in a future release. Please use native partitioning instead. +alter table t drop primary key, add key (i), auto_increment = 1; +Warnings: +Warning 1287 The partition engine, used by table 'test.t', is deprecated and will be removed in a future release. Please use native partitioning instead. +include/rpl_restart_server.inc [server_number=1] +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; +table_schema table_name auto_increment +test t 124 +Warnings: +Warning 1287 The partition engine, used by table 'test.t', is deprecated and will be removed in a future release. Please use native partitioning instead. +alter table t add key (j), auto_increment = 1; +Warnings: +Warning 1287 The partition engine, used by table 'test.t', is deprecated and will be removed in a future release. Please use native partitioning instead. +include/rpl_restart_server.inc [server_number=1] +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; +table_schema table_name auto_increment +test t 124 +Warnings: +Warning 1287 The partition engine, used by table 'test.t', is deprecated and will be removed in a future release. Please use native partitioning instead. +alter table t modify i int; +Warnings: +Warning 1287 The partition engine, used by table 'test.t', is deprecated and will be removed in a future release. Please use native partitioning instead. +alter table t add column (k int auto_increment), add key(k), auto_increment=15; +Warnings: +Warning 1287 The partition engine, used by table 'test.t', is deprecated and will be removed in a future release. Please use native partitioning instead. +include/rpl_restart_server.inc [server_number=1] +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; +table_schema table_name auto_increment +test t 16 +Warnings: +Warning 1287 The partition engine, used by table 'test.t', is deprecated and will be removed in a future release. Please use native partitioning instead. +# Drop table. +drop table t; +include/rpl_restart_server.inc [server_number=1] +include/start_slave.inc +include/rpl_end.inc diff --git a/mysql-test/suite/rocksdb/t/autoinc_crash_safe.test b/mysql-test/suite/rocksdb/t/autoinc_crash_safe.test index 41904bea2a79..b4f329dd1e7c 100644 --- a/mysql-test/suite/rocksdb/t/autoinc_crash_safe.test +++ b/mysql-test/suite/rocksdb/t/autoinc_crash_safe.test @@ -1,130 +1,9 @@ --source include/have_rocksdb.inc --source include/have_binlog_format_row.inc --source include/master-slave.inc ---source include/count_sessions.inc - ---echo # ---echo # Testing concurrent transactions. ---echo # create table t (i int primary key auto_increment) engine=rocksdb; -connect (con1,localhost,root,,); -connect (con2,localhost,root,,); -connect (con3,localhost,root,,); - -connection con1; -begin; -insert into t values (); # 1 - -connection con2; -begin; -insert into t values (); # 2 - -connection con3; -begin; -insert into t values (); # 3 - -connection con1; -insert into t values (); # 4 - -connection con2; -insert into t values (); # 5 - -connection con3; -insert into t values (); # 6 - -connection con2; -commit; - -connection con3; -rollback; - -connection con1; -commit; - -delete from t; - ---echo # Master value before restart -select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; - ---echo # Slave value before restart -sync_slave_with_master; -select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; - -connection slave; ---source include/stop_slave.inc ---let $rpl_server_number = 1 ---source include/rpl_restart_server.inc - -connection default; ---echo # Master value after restart -select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; - ---let $rpl_server_number = 2 ---source include/rpl_restart_server.inc - -connection slave; ---source include/start_slave.inc ---echo # Slave value after restart -select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; - -disconnect con1; -disconnect con2; -disconnect con3; - ---echo # ---echo # Testing interaction of merge markers with various DDL statements. ---echo # -connection slave; ---source include/stop_slave.inc - -connection default; - ---echo # Drop and add primary key. -alter table t modify i int; -alter table t drop primary key; -alter table t add primary key (i); -alter table t modify i int auto_increment; - ---let $rpl_server_number = 1 ---source include/rpl_restart_server.inc -select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; - ---echo # Remove auto_increment property. -alter table t modify i int; ---let $rpl_server_number = 1 ---source include/rpl_restart_server.inc -select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; - ---echo # Add auto_increment property. -insert into t values (123); -alter table t modify i int auto_increment; ---let $rpl_server_number = 1 ---source include/rpl_restart_server.inc -select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; - ---echo # Add column j. -alter table t add column j int; ---let $rpl_server_number = 1 ---source include/rpl_restart_server.inc -select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; - ---echo # Rename tables. -rename table t to t2; -rename table t2 to t; - ---let $rpl_server_number = 1 ---source include/rpl_restart_server.inc -select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; - ---echo # Drop table. -drop table t; - ---let $rpl_server_number = 1 ---source include/rpl_restart_server.inc +--source suite/rocksdb/include/autoinc_crash_safe.inc -connection slave; ---source include/start_slave.inc --source include/rpl_end.inc ---source include/wait_until_count_sessions.inc diff --git a/mysql-test/suite/rocksdb/t/autoinc_crash_safe_partition-master.opt b/mysql-test/suite/rocksdb/t/autoinc_crash_safe_partition-master.opt new file mode 100644 index 000000000000..2672d4ff35e0 --- /dev/null +++ b/mysql-test/suite/rocksdb/t/autoinc_crash_safe_partition-master.opt @@ -0,0 +1 @@ +--binlog_format=row diff --git a/mysql-test/suite/rocksdb/t/autoinc_crash_safe_partition-slave.opt b/mysql-test/suite/rocksdb/t/autoinc_crash_safe_partition-slave.opt new file mode 100644 index 000000000000..bce526df4a5a --- /dev/null +++ b/mysql-test/suite/rocksdb/t/autoinc_crash_safe_partition-slave.opt @@ -0,0 +1 @@ +--binlog_format=row --slave_parallel_workers=1 diff --git a/mysql-test/suite/rocksdb/t/autoinc_crash_safe_partition.test b/mysql-test/suite/rocksdb/t/autoinc_crash_safe_partition.test new file mode 100644 index 000000000000..1245324ab28a --- /dev/null +++ b/mysql-test/suite/rocksdb/t/autoinc_crash_safe_partition.test @@ -0,0 +1,10 @@ +--source include/have_rocksdb.inc +--source include/have_partition.inc +--source include/have_binlog_format_row.inc +--source include/master-slave.inc + +create table t (i int primary key auto_increment) engine=rocksdb partition by key (i) partitions 3; + +--source suite/rocksdb/include/autoinc_crash_safe.inc + +--source include/rpl_end.inc diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index 8806d764b785..af42bebff837 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -4279,16 +4279,14 @@ static ulonglong rdb_get_int_col_max_value(const Field *field) { void ha_rocksdb::load_auto_incr_value() { ulonglong dd_val = 0; - bool validate_last = false; - bool autoinc_upgrade_test = false; - DBUG_EXECUTE_IF("myrocks_autoinc_upgrade", autoinc_upgrade_test = true;); + bool validate_last = false, use_datadic = true; #ifndef NDEBUG + DBUG_EXECUTE_IF("myrocks_autoinc_upgrade", use_datadic = false;); validate_last = true; #endif - if (!autoinc_upgrade_test && - dict_manager.get_auto_incr_val(m_tbl_def->get_autoincr_gl_index_id(), - &dd_val)) { + if (use_datadic && dict_manager.get_auto_incr_val( + m_tbl_def->get_autoincr_gl_index_id(), &dd_val)) { update_auto_incr_val(dd_val); } @@ -4296,71 +4294,74 @@ void ha_rocksdb::load_auto_incr_value() { // then call index_last to get the last value. // // This is needed when upgrading from a server that did not support - // persistent auto_increment, or when doing an alter table to add - // auto_increment property. + // persistent auto_increment. // // For debug mode, we are just verifying that the data dictionary value is // greater than or equal to the maximum value in the table. if (dd_val == 0 || validate_last) { - const int save_active_index = active_index; - active_index = table->s->next_number_index; - const uint8 save_table_status = table->status; + ulonglong last_val = load_auto_incr_value_from_index(); + update_auto_incr_val(last_val); + } +} - Rdb_transaction *const tx = get_or_create_tx(table->in_use); - const bool is_new_snapshot = !tx->has_snapshot(); - if (is_new_snapshot) { - tx->acquire_snapshot(true); - } +ulonglong ha_rocksdb::load_auto_incr_value_from_index() { + const int save_active_index = active_index; + active_index = table->s->next_number_index; + const uint8 save_table_status = table->status; + ulonglong last_val = 0; - // Do a lookup. We only need index column, so it should be index-only. - // (another reason to make it index-only is that table->read_set is not set - // appropriately and non-index-only lookup will not read the value) - const bool save_keyread_only = m_keyread_only; - m_keyread_only = true; - m_key_requested = true; + Rdb_transaction *const tx = get_or_create_tx(table->in_use); + const bool is_new_snapshot = !tx->has_snapshot(); + if (is_new_snapshot) { + tx->acquire_snapshot(true); + } + + // Do a lookup. We only need index column, so it should be index-only. + // (another reason to make it index-only is that table->read_set is not set + // appropriately and non-index-only lookup will not read the value) + const bool save_keyread_only = m_keyread_only; + m_keyread_only = true; + m_key_requested = true; - if (!index_last(table->record[0])) { + if (!index_last(table->record[0])) { + Field *field = + table->key_info[table->s->next_number_index].key_part[0].field; + ulonglong max_val = rdb_get_int_col_max_value(field); + my_bitmap_map *const old_map = + dbug_tmp_use_all_columns(table, table->read_set); + last_val = field->val_int(); + if (last_val != max_val) { + last_val++; + } #ifndef NDEBUG - Field *field = - table->key_info[table->s->next_number_index].key_part[0].field; - ulonglong max_val = rdb_get_int_col_max_value(field); - my_bitmap_map *const old_map = - dbug_tmp_use_all_columns(table, table->read_set); - ulonglong last_val = field->val_int(); - if (validate_last && last_val <= max_val) { - const auto &gl_index_id = m_tbl_def->get_autoincr_gl_index_id(); - // Reload data dictionary value in case value has changed since - // snapshot was acquired. - if (dict_manager.get_auto_incr_val(gl_index_id, &dd_val) && - tx->get_auto_incr(gl_index_id) == 0) { - DBUG_ASSERT(dd_val >= last_val); - } + ulonglong dd_val; + if (last_val <= max_val) { + const auto &gl_index_id = m_tbl_def->get_autoincr_gl_index_id(); + if (dict_manager.get_auto_incr_val(gl_index_id, &dd_val) && + tx->get_auto_incr(gl_index_id) == 0) { + DBUG_ASSERT(dd_val >= last_val); } - dbug_tmp_restore_column_map(table->read_set, old_map); + } #endif + dbug_tmp_restore_column_map(table->read_set, old_map); + } - // If data dictionary is empty, but rows are found, then this might be - // a recently upgraded table. Use the value obtained from index_last. - if (dd_val == 0) { - update_auto_incr_val_from_field(); - } - } + m_keyread_only = save_keyread_only; + if (is_new_snapshot) { + tx->release_snapshot(); + } - m_keyread_only = save_keyread_only; - if (is_new_snapshot) { - tx->release_snapshot(); - } + table->status = save_table_status; + active_index = save_active_index; - table->status = save_table_status; - active_index = save_active_index; + /* + Do what ha_rocksdb::index_end() does. + (Why don't we use index_init/index_end? class handler defines index_init + as private, for some reason). + */ + release_scan_iterator(); - /* - Do what ha_rocksdb::index_end() does. - (Why don't we use index_init/index_end? class handler defines index_init - as private, for some reason). - */ - release_scan_iterator(); - } + return last_val; } void ha_rocksdb::update_auto_incr_val(ulonglong val) { @@ -10523,7 +10524,8 @@ my_core::enum_alter_inplace_result ha_rocksdb::check_if_supported_inplace_alter( ~(my_core::Alter_inplace_info::DROP_INDEX | my_core::Alter_inplace_info::DROP_UNIQUE_INDEX | my_core::Alter_inplace_info::ADD_INDEX | - my_core::Alter_inplace_info::ADD_UNIQUE_INDEX)) { + my_core::Alter_inplace_info::ADD_UNIQUE_INDEX | + my_core::Alter_inplace_info::CHANGE_CREATE_OPTION)) { DBUG_RETURN(my_core::HA_ALTER_INPLACE_NOT_SUPPORTED); } @@ -10534,6 +10536,13 @@ my_core::enum_alter_inplace_result ha_rocksdb::check_if_supported_inplace_alter( DBUG_RETURN(my_core::HA_ALTER_INPLACE_NOT_SUPPORTED); } + /* We only support changing auto_increment for table options. */ + if ((ha_alter_info->handler_flags & + my_core::Alter_inplace_info::CHANGE_CREATE_OPTION) && + !(ha_alter_info->create_info->used_fields & HA_CREATE_USED_AUTO)) { + DBUG_RETURN(my_core::HA_ALTER_INPLACE_NOT_SUPPORTED); + } + DBUG_RETURN(my_core::HA_ALTER_INPLACE_SHARED_LOCK_AFTER_PREPARE); } @@ -10573,111 +10582,121 @@ bool ha_rocksdb::prepare_inplace_alter_table( DBUG_ASSERT(altered_table != nullptr); DBUG_ASSERT(ha_alter_info != nullptr); - const uint old_n_keys = m_tbl_def->m_key_count; + Rdb_tbl_def *new_tdef = nullptr; + std::shared_ptr *old_key_descr = nullptr; + std::shared_ptr *new_key_descr = nullptr; + uint old_n_keys = m_tbl_def->m_key_count; uint new_n_keys = altered_table->s->keys; + std::unordered_set> added_indexes; + std::unordered_set dropped_index_ids; + uint n_dropped_keys = 0; + uint n_added_keys = 0; + ulonglong max_auto_incr = 0; - if (has_hidden_pk(altered_table)) { - new_n_keys += 1; - } + if (ha_alter_info->handler_flags & + (my_core::Alter_inplace_info::DROP_INDEX | + my_core::Alter_inplace_info::DROP_UNIQUE_INDEX | + my_core::Alter_inplace_info::ADD_INDEX | + my_core::Alter_inplace_info::ADD_UNIQUE_INDEX)) { - const TABLE *const old_table = table; - std::shared_ptr *const old_key_descr = - m_tbl_def->m_key_descr_arr; - std::shared_ptr *const new_key_descr = - new std::shared_ptr[new_n_keys]; + if (has_hidden_pk(altered_table)) { + new_n_keys += 1; + } - Rdb_tbl_def *const new_tdef = new Rdb_tbl_def(m_tbl_def->full_tablename()); - new_tdef->m_key_descr_arr = new_key_descr; - new_tdef->m_key_count = new_n_keys; - new_tdef->m_auto_incr_val = - m_tbl_def->m_auto_incr_val.load(std::memory_order_relaxed); - new_tdef->m_hidden_pk_val = - m_tbl_def->m_hidden_pk_val.load(std::memory_order_relaxed); + const TABLE *const old_table = table; + old_key_descr = m_tbl_def->m_key_descr_arr; + new_key_descr = new std::shared_ptr[new_n_keys]; - if (ha_alter_info->handler_flags & - (my_core::Alter_inplace_info::DROP_INDEX | - my_core::Alter_inplace_info::DROP_UNIQUE_INDEX | - my_core::Alter_inplace_info::ADD_INDEX | - my_core::Alter_inplace_info::ADD_UNIQUE_INDEX) && - create_key_defs(altered_table, new_tdef, table, m_tbl_def)) { - /* Delete the new key descriptors */ - delete[] new_key_descr; + new_tdef = new Rdb_tbl_def(m_tbl_def->full_tablename()); + new_tdef->m_key_descr_arr = new_key_descr; + new_tdef->m_key_count = new_n_keys; + new_tdef->m_auto_incr_val = + m_tbl_def->m_auto_incr_val.load(std::memory_order_relaxed); + new_tdef->m_hidden_pk_val = + m_tbl_def->m_hidden_pk_val.load(std::memory_order_relaxed); - /* - Explicitly mark as nullptr so we don't accidentally remove entries - from data dictionary on cleanup (or cause double delete[]). - */ - new_tdef->m_key_descr_arr = nullptr; - delete new_tdef; + if (create_key_defs(altered_table, new_tdef, table, m_tbl_def)) { + /* Delete the new key descriptors */ + delete[] new_key_descr; - my_error(ER_KEY_CREATE_DURING_ALTER, MYF(0)); - DBUG_RETURN(HA_EXIT_FAILURE); - } + /* + Explicitly mark as nullptr so we don't accidentally remove entries + from data dictionary on cleanup (or cause double delete[]). + */ + new_tdef->m_key_descr_arr = nullptr; + delete new_tdef; - std::unordered_set> added_indexes; - std::unordered_set dropped_index_ids; + my_error(ER_KEY_CREATE_DURING_ALTER, MYF(0)); + DBUG_RETURN(HA_EXIT_FAILURE); + } - uint i; - uint j; + uint i; + uint j; - /* Determine which(if any) key definition(s) need to be dropped */ - for (i = 0; i < ha_alter_info->index_drop_count; i++) { - const KEY *const dropped_key = ha_alter_info->index_drop_buffer[i]; - for (j = 0; j < old_n_keys; j++) { - const KEY *const old_key = - &old_table->key_info[old_key_descr[j]->get_keyno()]; + /* Determine which(if any) key definition(s) need to be dropped */ + for (i = 0; i < ha_alter_info->index_drop_count; i++) { + const KEY *const dropped_key = ha_alter_info->index_drop_buffer[i]; + for (j = 0; j < old_n_keys; j++) { + const KEY *const old_key = + &old_table->key_info[old_key_descr[j]->get_keyno()]; - if (!compare_keys(old_key, dropped_key)) { - dropped_index_ids.insert(old_key_descr[j]->get_gl_index_id()); - break; + if (!compare_keys(old_key, dropped_key)) { + dropped_index_ids.insert(old_key_descr[j]->get_gl_index_id()); + break; + } } } - } - - /* Determine which(if any) key definitions(s) need to be added */ - int identical_indexes_found = 0; - for (i = 0; i < ha_alter_info->index_add_count; i++) { - const KEY *const added_key = - &ha_alter_info->key_info_buffer[ha_alter_info->index_add_buffer[i]]; - for (j = 0; j < new_n_keys; j++) { - const KEY *const new_key = - &altered_table->key_info[new_key_descr[j]->get_keyno()]; - if (!compare_keys(new_key, added_key)) { - /* - Check for cases where an 'identical' index is being dropped and - re-added in a single ALTER statement. Turn this into a no-op as the - index has not changed. - E.G. Unique index -> non-unique index requires no change + /* Determine which(if any) key definitions(s) need to be added */ + int identical_indexes_found = 0; + for (i = 0; i < ha_alter_info->index_add_count; i++) { + const KEY *const added_key = + &ha_alter_info->key_info_buffer[ha_alter_info->index_add_buffer[i]]; + for (j = 0; j < new_n_keys; j++) { + const KEY *const new_key = + &altered_table->key_info[new_key_descr[j]->get_keyno()]; + if (!compare_keys(new_key, added_key)) { + /* + Check for cases where an 'identical' index is being dropped and + re-added in a single ALTER statement. Turn this into a no-op as the + index has not changed. + + E.G. Unique index -> non-unique index requires no change + + Note that cases where the index name remains the same but the + key-parts are changed is already handled in create_inplace_key_defs. + In these cases the index needs to be rebuilt. + */ + if (dropped_index_ids.count(new_key_descr[j]->get_gl_index_id())) { + dropped_index_ids.erase(new_key_descr[j]->get_gl_index_id()); + identical_indexes_found++; + } else { + added_indexes.insert(new_key_descr[j]); + } - Note that cases where the index name remains the same but the - key-parts are changed is already handled in create_inplace_key_defs. - In these cases the index needs to be rebuilt. - */ - if (dropped_index_ids.count(new_key_descr[j]->get_gl_index_id())) { - dropped_index_ids.erase(new_key_descr[j]->get_gl_index_id()); - identical_indexes_found++; - } else { - added_indexes.insert(new_key_descr[j]); + break; } - - break; } } - } - const uint n_dropped_keys = - ha_alter_info->index_drop_count - identical_indexes_found; - const uint n_added_keys = - ha_alter_info->index_add_count - identical_indexes_found; - DBUG_ASSERT(dropped_index_ids.size() == n_dropped_keys); - DBUG_ASSERT(added_indexes.size() == n_added_keys); - DBUG_ASSERT(new_n_keys == (old_n_keys - n_dropped_keys + n_added_keys)); + n_dropped_keys = ha_alter_info->index_drop_count - identical_indexes_found; + n_added_keys = ha_alter_info->index_add_count - identical_indexes_found; + DBUG_ASSERT(dropped_index_ids.size() == n_dropped_keys); + DBUG_ASSERT(added_indexes.size() == n_added_keys); + DBUG_ASSERT(new_n_keys == (old_n_keys - n_dropped_keys + n_added_keys)); + } + if (ha_alter_info->handler_flags & + my_core::Alter_inplace_info::CHANGE_CREATE_OPTION) { + if (!new_tdef) { + new_tdef = m_tbl_def; + } + max_auto_incr = load_auto_incr_value_from_index(); + } ha_alter_info->handler_ctx = new Rdb_inplace_alter_ctx( new_tdef, old_key_descr, new_key_descr, old_n_keys, new_n_keys, - added_indexes, dropped_index_ids, n_added_keys, n_dropped_keys); - + added_indexes, dropped_index_ids, n_added_keys, n_dropped_keys, + max_auto_incr); DBUG_RETURN(HA_EXIT_SUCCESS); } @@ -11137,6 +11156,27 @@ bool ha_rocksdb::commit_inplace_alter_table( rdb_drop_idx_thread.signal(); } + if (ha_alter_info->handler_flags & + (my_core::Alter_inplace_info::CHANGE_CREATE_OPTION)) { + const std::unique_ptr wb = dict_manager.begin(); + rocksdb::WriteBatch *const batch = wb.get(); + std::unordered_set create_index_ids; + + ulonglong auto_incr_val = ha_alter_info->create_info->auto_increment_value; + + for (inplace_alter_handler_ctx **pctx = ctx_array; *pctx; pctx++) { + Rdb_inplace_alter_ctx *const ctx = + static_cast(*pctx); + dict_manager.put_auto_incr_val( + batch, ctx->m_new_tdef->get_autoincr_gl_index_id(), + std::max(ctx->m_max_auto_incr, auto_incr_val), true /* overwrite */); + } + + if (dict_manager.commit(batch)) { + DBUG_ASSERT(0); + } + } + DBUG_RETURN(HA_EXIT_SUCCESS); } diff --git a/storage/rocksdb/ha_rocksdb.h b/storage/rocksdb/ha_rocksdb.h index ebdca43db8f4..eed35313b316 100644 --- a/storage/rocksdb/ha_rocksdb.h +++ b/storage/rocksdb/ha_rocksdb.h @@ -648,6 +648,7 @@ class ha_rocksdb : public my_core::handler { } void load_auto_incr_value(); + ulonglong load_auto_incr_value_from_index(); void update_auto_incr_val(ulonglong val); void update_auto_incr_val_from_field(); rocksdb::Status get_datadic_auto_incr(Rdb_transaction *const tx, @@ -1376,18 +1377,22 @@ struct Rdb_inplace_alter_ctx : public my_core::inplace_alter_handler_ctx { /* Stores number of keys to drop */ const uint m_n_dropped_keys; + /* Stores the largest current auto increment value in the index */ + const ulonglong m_max_auto_incr; + Rdb_inplace_alter_ctx( Rdb_tbl_def *new_tdef, std::shared_ptr *old_key_descr, std::shared_ptr *new_key_descr, uint old_n_keys, uint new_n_keys, std::unordered_set> added_indexes, std::unordered_set dropped_index_ids, uint n_added_keys, - uint n_dropped_keys) + uint n_dropped_keys, ulonglong max_auto_incr) : my_core::inplace_alter_handler_ctx(), m_new_tdef(new_tdef), m_old_key_descr(old_key_descr), m_new_key_descr(new_key_descr), m_old_n_keys(old_n_keys), m_new_n_keys(new_n_keys), m_added_indexes(added_indexes), m_dropped_index_ids(dropped_index_ids), - m_n_added_keys(n_added_keys), m_n_dropped_keys(n_dropped_keys) {} + m_n_added_keys(n_added_keys), m_n_dropped_keys(n_dropped_keys), + m_max_auto_incr(max_auto_incr) {} ~Rdb_inplace_alter_ctx() {} diff --git a/storage/rocksdb/rdb_datadic.cc b/storage/rocksdb/rdb_datadic.cc index 5bfeaf9ca549..fc5526f2adf3 100644 --- a/storage/rocksdb/rdb_datadic.cc +++ b/storage/rocksdb/rdb_datadic.cc @@ -4949,7 +4949,7 @@ Rdb_index_stats Rdb_dict_manager::get_stats(GL_INDEX_ID gl_index_id) const { rocksdb::Status Rdb_dict_manager::put_auto_incr_val(rocksdb::WriteBatchBase *batch, GL_INDEX_ID gl_index_id, - ulonglong val) const { + ulonglong val, bool overwrite) const { uchar key_buf[Rdb_key_def::INDEX_NUMBER_SIZE * 3] = {0}; dump_index_id(key_buf, Rdb_key_def::AUTO_INC, gl_index_id); const rocksdb::Slice key = @@ -4966,6 +4966,9 @@ Rdb_dict_manager::put_auto_incr_val(rocksdb::WriteBatchBase *batch, const rocksdb::Slice value = rocksdb::Slice(reinterpret_cast(value_buf), ptr - value_buf); + if (overwrite) { + return batch->Put(m_system_cfh, key, value); + } return batch->Merge(m_system_cfh, key, value); } diff --git a/storage/rocksdb/rdb_datadic.h b/storage/rocksdb/rdb_datadic.h index 5e9a85a144e9..29c755e88176 100644 --- a/storage/rocksdb/rdb_datadic.h +++ b/storage/rocksdb/rdb_datadic.h @@ -1321,7 +1321,8 @@ class Rdb_dict_manager { rocksdb::Status put_auto_incr_val(rocksdb::WriteBatchBase *batch, GL_INDEX_ID gl_index_id, - ulonglong val) const; + ulonglong val, + bool overwrite = false) const; bool get_auto_incr_val(GL_INDEX_ID gl_index_id, ulonglong *new_val) const; }; From f808ba6aee73a2f317a0b686d338468155d2d541 Mon Sep 17 00:00:00 2001 From: Manuel Ung Date: Wed, 25 Oct 2017 13:33:27 -0700 Subject: [PATCH 0470/1221] Use cmake variables instead of environment variables for building MyRocks Upstream commit ID : fb-mysql-5.6.35/5969a3ef953cbd7838581c4553edb11c341ec174 MYR-198 : Merge prod201704 This is a NULL cherry-pick to Percona Server 5.7 to create the commit placeholder for the corresponding upstream commit. Reason: Patch not taken into Percona Server. From c3321ea62fb38fcdd2a2b6eda587d7daddf92428 Mon Sep 17 00:00:00 2001 From: Artem Danilov Date: Thu, 26 Oct 2017 11:51:59 -0700 Subject: [PATCH 0471/1221] fix hanging rocksdb.test Upstream commit ID : fb-mysql-5.6.35/788f2cdcf6c4380466cd730d2fb1daaa06b808da MYR-198 : Merge prod201704 Differential Revision: D6163218 fbshipit-source-id: c274a34 --- mysql-test/suite/rocksdb/r/rocksdb.result | 3 --- mysql-test/suite/rocksdb/t/rocksdb.test | 4 ---- 2 files changed, 7 deletions(-) diff --git a/mysql-test/suite/rocksdb/r/rocksdb.result b/mysql-test/suite/rocksdb/r/rocksdb.result index 3d138e90c4b2..24666beaf0bd 100644 --- a/mysql-test/suite/rocksdb/r/rocksdb.result +++ b/mysql-test/suite/rocksdb/r/rocksdb.result @@ -578,9 +578,6 @@ insert into t30 values ('row3', 'row3-key', 'row3-data'), ('row4', 'row4-key', 'row4-data'), ('row5', 'row5-key', 'row5-data'); -analyze table t30; -Table Op Msg_type Msg_text -test.t30 analyze status OK explain select * from t30 where key1 <='row3-key'; id select_type table partitions type possible_keys key key_len ref rows filtered Extra diff --git a/mysql-test/suite/rocksdb/t/rocksdb.test b/mysql-test/suite/rocksdb/t/rocksdb.test index 94111adaea42..284df3931731 100644 --- a/mysql-test/suite/rocksdb/t/rocksdb.test +++ b/mysql-test/suite/rocksdb/t/rocksdb.test @@ -578,10 +578,6 @@ insert into t30 values ('row3', 'row3-key', 'row3-data'), ('row4', 'row4-key', 'row4-data'), ('row5', 'row5-key', 'row5-data'); ---disable_query_log -set global rocksdb_force_flush_memtable_now=1; ---enable_query_log -analyze table t30; --replace_column 10 # explain From 465a0b20cac17ebddb063e1fcf481a8bbbebedd6 Mon Sep 17 00:00:00 2001 From: Yoshinori Matsunobu Date: Fri, 27 Oct 2017 09:49:57 -0700 Subject: [PATCH 0472/1221] Setting iterate_upper_bounds as rocksdb.ReadOptions Upstream commit ID : fb-mysql-5.6.35/24fffa3ff5630626188004a2af556ffa3d300c0e MYR-198 : Merge prod201704 Summary: This diff explicitly sets iterate_upper_bounds and passes to rocksdb read options. This will avoid scanning tombstones outside of the given key ranges. This does not change behaviors when prefix bloom filter is used, since prefix_same_as_start can be set in that case. This diff will be updated when RocksDB supports iterate_lower_bounds. Closes https://github.com/facebook/mysql-5.6/pull/745 Differential Revision: D6145544 fbshipit-source-id: 2ed7901 --- storage/rocksdb/ha_rocksdb.cc | 113 +++++++++++++++++++++++++++------ storage/rocksdb/ha_rocksdb.h | 18 ++++-- storage/rocksdb/rdb_datadic.cc | 19 ++++++ storage/rocksdb/rdb_datadic.h | 3 + 4 files changed, 130 insertions(+), 23 deletions(-) diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index af42bebff837..959fa1e86d06 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -119,10 +119,6 @@ static handler *rocksdb_create_handler(my_core::handlerton *hton, my_core::TABLE_SHARE *table_arg, my_core::MEM_ROOT *mem_root); -bool can_use_bloom_filter(THD *thd, const Rdb_key_def &kd, - const rocksdb::Slice &eq_cond, - const bool use_all_keys); - static rocksdb::CompactRangeOptions getCompactRangeOptions() { rocksdb::CompactRangeOptions compact_range_options; compact_range_options.bottommost_level_compaction = @@ -2060,6 +2056,8 @@ class Rdb_transaction { rocksdb::Iterator * get_iterator(rocksdb::ColumnFamilyHandle *const column_family, bool skip_bloom_filter, bool fill_cache, + const rocksdb::Slice &eq_cond_lower_bound, + const rocksdb::Slice &eq_cond_upper_bound, bool read_current = false, bool create_snapshot = true) { // Make sure we are not doing both read_current (which implies we don't // want a snapshot) and create_snapshot which makes sure we create @@ -2074,6 +2072,8 @@ class Rdb_transaction { if (skip_bloom_filter) { options.total_order_seek = true; + // TODO(yoshinori): options.iterate_lower_bound = &eq_cond_lower_bound; + options.iterate_upper_bound = &eq_cond_upper_bound; } else { // With this option, Iterator::Valid() returns false if key // is outside of the prefix bloom filter range set at Seek(). @@ -4514,7 +4514,8 @@ ha_rocksdb::ha_rocksdb(my_core::handlerton *const hton, m_sk_packed_tuple(nullptr), m_end_key_packed_tuple(nullptr), m_sk_match_prefix(nullptr), m_sk_match_prefix_buf(nullptr), m_sk_packed_tuple_old(nullptr), m_dup_sk_packed_tuple(nullptr), - m_dup_sk_packed_tuple_old(nullptr), m_pack_buffer(nullptr), + m_dup_sk_packed_tuple_old(nullptr), m_eq_cond_lower_bound(nullptr), + m_eq_cond_upper_bound(nullptr), m_pack_buffer(nullptr), m_lock_rows(RDB_LOCK_NONE), m_keyread_only(FALSE), m_bulk_load_tx(nullptr), m_encoder_arr(nullptr), m_row_checksums_checked(0), m_in_rpl_delete_rows(false), @@ -5388,8 +5389,12 @@ int ha_rocksdb::alloc_key_buffers(const TABLE *const table_arg, my_malloc(rdb_handler_memory_key, max_packed_sk_len, MYF(0)))) || !(m_end_key_packed_tuple = static_cast( my_malloc(rdb_handler_memory_key, max_packed_sk_len, MYF(0)))) || - !((m_pack_buffer = static_cast( - my_malloc(rdb_handler_memory_key, max_packed_sk_len, MYF(0)))))) { + !(m_pack_buffer = static_cast( + my_malloc(rdb_handler_memory_key, max_packed_sk_len, MYF(0)))) || + !(m_eq_cond_upper_bound = static_cast( + my_malloc(rdb_handler_memory_key, max_packed_sk_len, MYF(0)))) || + !(m_eq_cond_lower_bound = static_cast( + my_malloc(rdb_handler_memory_key, max_packed_sk_len, MYF(0))))) { #else if (!(m_sk_packed_tuple = static_cast( my_malloc(PSI_NOT_INSTRUMENTED, max_packed_sk_len, MYF(0)))) || @@ -5399,8 +5404,12 @@ int ha_rocksdb::alloc_key_buffers(const TABLE *const table_arg, my_malloc(PSI_NOT_INSTRUMENTED, max_packed_sk_len, MYF(0)))) || !(m_end_key_packed_tuple = static_cast( my_malloc(PSI_NOT_INSTRUMENTED, max_packed_sk_len, MYF(0)))) || - !((m_pack_buffer = static_cast( - my_malloc(PSI_NOT_INSTRUMENTED, max_packed_sk_len, MYF(0)))))) { + !(m_pack_buffer = static_cast( + my_malloc(PSI_NOT_INSTRUMENTED, max_packed_sk_len, MYF(0)))) || + !(m_eq_cond_upper_bound = static_cast( + my_malloc(PSI_NOT_INSTRUMENTED, max_packed_sk_len, MYF(0)))) || + !(m_eq_cond_lower_bound = static_cast( + my_malloc(PSI_NOT_INSTRUMENTED, max_packed_sk_len, MYF(0))))) { #endif goto error; } @@ -5463,6 +5472,12 @@ void ha_rocksdb::free_key_buffers() { my_free(m_dup_sk_packed_tuple_old); m_dup_sk_packed_tuple_old = nullptr; + + my_free(m_eq_cond_upper_bound); + m_eq_cond_upper_bound = nullptr; + + my_free(m_eq_cond_lower_bound); + m_eq_cond_lower_bound = nullptr; } void ha_rocksdb::set_use_read_free_rpl(const char *const whitelist) { @@ -8305,7 +8320,7 @@ int ha_rocksdb::check_and_lock_sk(const uint &key_id, The bloom filter may need to be disabled for this lookup. */ - const bool total_order_seek = !can_use_bloom_filter( + const bool total_order_seek = !check_bloom_and_set_bounds( ha_thd(), kd, new_slice, all_parts_used); const bool fill_cache = !THDVAR(ha_thd(), skip_fill_cache); @@ -8316,7 +8331,9 @@ int ha_rocksdb::check_and_lock_sk(const uint &key_id, } rocksdb::Iterator *const iter = row_info.tx->get_iterator( - kd.get_cf(), total_order_seek, fill_cache, true /* read current data */, + kd.get_cf(), total_order_seek, fill_cache, + m_eq_cond_lower_bound_slice, m_eq_cond_upper_bound_slice, + true /* read current data */, false /* acquire snapshot */); /* Need to scan the transaction to see if there is a duplicate key. @@ -8749,6 +8766,42 @@ int ha_rocksdb::update_write_row(const uchar *const old_data, DBUG_RETURN(HA_EXIT_SUCCESS); } +/* + Setting iterator upper/lower bounds for Seek/SeekForPrev. + This makes RocksDB to avoid scanning tombstones outside of + the given key ranges, when prefix_same_as_start=true was not passed + (when prefix bloom filter can not be used). + Inversing upper/lower bound is necessary on reverse order CF. + This covers HA_READ_PREFIX_LAST* case as well. For example, + if given query eq condition was 12 bytes and condition was + 0x0000b3eb003f65c5e78858b8, and if doing HA_READ_PREFIX_LAST, + eq_cond_len was 11 (see calc_eq_cond_len() for details). + If the index was reverse order, upper bound would be + 0x0000b3eb003f65c5e78857, and lower bound would be + 0x0000b3eb003f65c5e78859. These cover given eq condition range. +*/ +void ha_rocksdb::setup_iterator_bounds(const Rdb_key_def &kd, + const rocksdb::Slice &eq_cond) { + uint eq_cond_len = eq_cond.size(); + DBUG_ASSERT(eq_cond_len >= Rdb_key_def::INDEX_NUMBER_SIZE); + memcpy(m_eq_cond_upper_bound, eq_cond.data(), eq_cond_len); + kd.successor(m_eq_cond_upper_bound, eq_cond_len); + memcpy(m_eq_cond_lower_bound, eq_cond.data(), eq_cond_len); + kd.predecessor(m_eq_cond_lower_bound, eq_cond_len); + + if (kd.m_is_reverse_cf) { + m_eq_cond_upper_bound_slice = + rocksdb::Slice((const char *)m_eq_cond_lower_bound, eq_cond_len); + m_eq_cond_lower_bound_slice = + rocksdb::Slice((const char *)m_eq_cond_upper_bound, eq_cond_len); + } else { + m_eq_cond_upper_bound_slice = + rocksdb::Slice((const char *)m_eq_cond_upper_bound, eq_cond_len); + m_eq_cond_lower_bound_slice = + rocksdb::Slice((const char *)m_eq_cond_lower_bound, eq_cond_len); + } +} + /* Open a cursor */ @@ -8765,7 +8818,7 @@ void ha_rocksdb::setup_scan_iterator(const Rdb_key_def &kd, bool skip_bloom = true; const rocksdb::Slice eq_cond(slice->data(), eq_cond_len); - if (can_use_bloom_filter(ha_thd(), kd, eq_cond, use_all_keys)) { + if (check_bloom_and_set_bounds(ha_thd(), kd, eq_cond, use_all_keys)) { skip_bloom = false; } @@ -8805,7 +8858,9 @@ void ha_rocksdb::setup_scan_iterator(const Rdb_key_def &kd, read_opts.snapshot = m_scan_it_snapshot; m_scan_it = rdb->NewIterator(read_opts, kd.get_cf()); } else { - m_scan_it = tx->get_iterator(kd.get_cf(), skip_bloom, fill_cache); + m_scan_it = tx->get_iterator(kd.get_cf(), skip_bloom, fill_cache, + m_eq_cond_lower_bound_slice, + m_eq_cond_upper_bound_slice); } m_scan_it_skips_bloom = skip_bloom; } @@ -8828,7 +8883,8 @@ void ha_rocksdb::setup_iterator_for_rnd_scan() { rocksdb::Slice table_key((const char *)m_pk_packed_tuple, key_size); - setup_scan_iterator(*m_pk_descr, &table_key); + setup_scan_iterator(*m_pk_descr, &table_key, false, + Rdb_key_def::INDEX_NUMBER_SIZE); m_scan_it->Seek(table_key); m_skip_scan_it_next_call = true; } @@ -9676,6 +9732,13 @@ ha_rocksdb::get_range(const int &i, return myrocks::get_range(*m_key_descr_arr[i], buf); } +/* + This function is called with total_order_seek=true, but + upper/lower bound setting is not necessary. + Boundary set is useful when there is no matching key, + but in drop_index_thread's case, it means index is marked as removed, + so no further seek will happen for the index id. +*/ static bool is_myrocks_index_empty( rocksdb::ColumnFamilyHandle *cfh, const bool is_reverse_cf, const rocksdb::ReadOptions &read_opts, @@ -9865,10 +9928,12 @@ int ha_rocksdb::remove_rows(Rdb_tbl_def *const tbl) { const Rdb_key_def &kd = *tbl->m_key_descr_arr[i]; kd.get_infimum_key(reinterpret_cast(key_buf), &key_len); rocksdb::ColumnFamilyHandle *cf = kd.get_cf(); - + const rocksdb::Slice table_key(key_buf, key_len); + setup_iterator_bounds(kd, table_key); + // TODO(yoshinori): opts.iterate_lower_bound=&m_eq_cond_lower_bound_slice; + opts.iterate_upper_bound = &m_eq_cond_upper_bound_slice; std::unique_ptr it(rdb->NewIterator(opts, cf)); - const rocksdb::Slice table_key(key_buf, key_len); it->Seek(table_key); while (it->Valid()) { const rocksdb::Slice key = it->key(); @@ -11666,6 +11731,16 @@ void Rdb_background_thread::run() { ddl_manager.persist_stats(); } +bool ha_rocksdb::check_bloom_and_set_bounds(THD *thd, const Rdb_key_def &kd, + const rocksdb::Slice &eq_cond, + const bool use_all_keys) { + bool can_use_bloom = can_use_bloom_filter(thd, kd, eq_cond, use_all_keys); + if (!can_use_bloom) { + setup_iterator_bounds(kd, eq_cond); + } + return can_use_bloom; +} + /** Deciding if it is possible to use bloom filter or not. @@ -11684,9 +11759,9 @@ void Rdb_background_thread::run() { @param use_all_keys True if all key parts are set with equal conditions. This is aware of extended keys. */ -bool can_use_bloom_filter(THD *thd, const Rdb_key_def &kd, - const rocksdb::Slice &eq_cond, - const bool use_all_keys) { +bool ha_rocksdb::can_use_bloom_filter(THD *thd, const Rdb_key_def &kd, + const rocksdb::Slice &eq_cond, + const bool use_all_keys) { bool can_use = false; if (THDVAR(thd, skip_bloom_filter_on_read)) { diff --git a/storage/rocksdb/ha_rocksdb.h b/storage/rocksdb/ha_rocksdb.h index eed35313b316..83f2aa9fd03f 100644 --- a/storage/rocksdb/ha_rocksdb.h +++ b/storage/rocksdb/ha_rocksdb.h @@ -544,6 +544,12 @@ class ha_rocksdb : public my_core::handler { uchar *m_dup_sk_packed_tuple; uchar *m_dup_sk_packed_tuple_old; + /* Buffers used for passing upper/bound eq conditions. */ + uchar *m_eq_cond_lower_bound; + uchar *m_eq_cond_upper_bound; + rocksdb::Slice m_eq_cond_lower_bound_slice; + rocksdb::Slice m_eq_cond_upper_bound_slice; + /* Temporary space for packing VARCHARs (we provide it to pack_record()/pack_index_tuple() calls). @@ -620,13 +626,17 @@ class ha_rocksdb : public my_core::handler { int secondary_index_read(const int keyno, uchar *const buf) MY_ATTRIBUTE((__warn_unused_result__)); void setup_iterator_for_rnd_scan(); - void setup_scan_iterator(const Rdb_key_def &kd, rocksdb::Slice *const slice) - MY_ATTRIBUTE((__nonnull__)) { - setup_scan_iterator(kd, slice, false, 0); - } bool is_ascending(const Rdb_key_def &keydef, enum ha_rkey_function find_flag) const MY_ATTRIBUTE((__nonnull__, __warn_unused_result__)); + void setup_iterator_bounds(const Rdb_key_def &kd, + const rocksdb::Slice &eq_cond); + bool can_use_bloom_filter(THD *thd, const Rdb_key_def &kd, + const rocksdb::Slice &eq_cond, + const bool use_all_keys); + bool check_bloom_and_set_bounds(THD *thd, const Rdb_key_def &kd, + const rocksdb::Slice &eq_cond, + const bool use_all_keys); void setup_scan_iterator(const Rdb_key_def &kd, rocksdb::Slice *slice, const bool use_all_keys, const uint eq_cond_len); void release_scan_iterator(void); diff --git a/storage/rocksdb/rdb_datadic.cc b/storage/rocksdb/rdb_datadic.cc index fc5526f2adf3..d0c3b8d8d871 100644 --- a/storage/rocksdb/rdb_datadic.cc +++ b/storage/rocksdb/rdb_datadic.cc @@ -831,6 +831,25 @@ int Rdb_key_def::successor(uchar *const packed_tuple, const uint &len) { return changed; } +/* + @return Number of bytes that were changed +*/ +int Rdb_key_def::predecessor(uchar *const packed_tuple, const uint &len) { + DBUG_ASSERT(packed_tuple != nullptr); + + int changed = 0; + uchar *p = packed_tuple + len - 1; + for (; p > packed_tuple; p--) { + changed++; + if (*p != uchar(0x00)) { + *p = *p - 1; + break; + } + *p = 0xFF; + } + return changed; +} + static const std::map UNPACK_HEADER_SIZES = { {RDB_UNPACK_DATA_TAG, RDB_UNPACK_HEADER_SIZE}, {RDB_UNPACK_COVERED_DATA_TAG, RDB_UNPACK_COVERED_HEADER_SIZE}}; diff --git a/storage/rocksdb/rdb_datadic.h b/storage/rocksdb/rdb_datadic.h index 29c755e88176..4a1f768ab36b 100644 --- a/storage/rocksdb/rdb_datadic.h +++ b/storage/rocksdb/rdb_datadic.h @@ -243,6 +243,9 @@ class Rdb_key_def { /* Make a key that is right after the given key. */ static int successor(uchar *const packed_tuple, const uint &len); + /* Make a key that is right before the given key. */ + static int predecessor(uchar *const packed_tuple, const uint &len); + /* This can be used to compare prefixes. if X is a prefix of Y, then we consider that X = Y. From fb65bfe45982ee99763899a7314e3cddd34198cb Mon Sep 17 00:00:00 2001 From: Manuel Ung Date: Fri, 27 Oct 2017 11:49:41 -0700 Subject: [PATCH 0473/1221] Load autoincrement and hidden pk only once Upstream commit ID : fb-mysql-5.6.35/bb8183d38b401a0c24dcebb785d624ad34fe755f MYR-198 : Merge prod201704 Summary: Currently, we load hidden pk and auto increment ids unconditionally on every `ha_rocksdb::open`. This is actually not necessary, since we can rely on the in-memory value after the server initially starts up. It's only on restarts that we need to reload the value, in which case we just load from disk on the first few opens. Closes https://github.com/facebook/mysql-5.6/issues/741 Closes https://github.com/facebook/mysql-5.6/pull/747 Differential Revision: D6155816 fbshipit-source-id: a1b28e1 --- storage/rocksdb/ha_rocksdb.cc | 46 +++++++++++++++++++++-------------- storage/rocksdb/rdb_datadic.h | 6 ++--- 2 files changed, 31 insertions(+), 21 deletions(-) diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index 959fa1e86d06..205f035a902d 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -4278,7 +4278,7 @@ static ulonglong rdb_get_int_col_max_value(const Field *field) { } void ha_rocksdb::load_auto_incr_value() { - ulonglong dd_val = 0; + ulonglong auto_incr = 0; bool validate_last = false, use_datadic = true; #ifndef NDEBUG DBUG_EXECUTE_IF("myrocks_autoinc_upgrade", use_datadic = false;); @@ -4286,21 +4286,27 @@ void ha_rocksdb::load_auto_incr_value() { #endif if (use_datadic && dict_manager.get_auto_incr_val( - m_tbl_def->get_autoincr_gl_index_id(), &dd_val)) { - update_auto_incr_val(dd_val); + m_tbl_def->get_autoincr_gl_index_id(), &auto_incr)) { + update_auto_incr_val(auto_incr); } // If we find nothing in the data dictionary, or if we are in debug mode, // then call index_last to get the last value. // // This is needed when upgrading from a server that did not support - // persistent auto_increment. + // persistent auto_increment, of if the table is empty. // // For debug mode, we are just verifying that the data dictionary value is // greater than or equal to the maximum value in the table. - if (dd_val == 0 || validate_last) { - ulonglong last_val = load_auto_incr_value_from_index(); - update_auto_incr_val(last_val); + if (auto_incr == 0 || validate_last) { + auto_incr = load_auto_incr_value_from_index(); + update_auto_incr_val(auto_incr); + } + + // If we failed to find anything from the data dictionary and index, then + // initialize auto_increment to 1. + if (m_tbl_def->m_auto_incr_val == 0) { + update_auto_incr_val(1); } } @@ -4408,12 +4414,12 @@ int ha_rocksdb::load_hidden_pk_value() { Rdb_transaction *const tx = get_or_create_tx(table->in_use); const bool is_new_snapshot = !tx->has_snapshot(); + longlong hidden_pk_id = 1; // Do a lookup. if (!index_last(table->record[0])) { /* Decode PK field from the key */ - longlong hidden_pk_id = 0; auto err = read_hidden_pk_id_from_rowkey(&hidden_pk_id); if (err) { if (is_new_snapshot) { @@ -4423,11 +4429,11 @@ int ha_rocksdb::load_hidden_pk_value() { } hidden_pk_id++; - longlong old = m_tbl_def->m_hidden_pk_val; - while ( - old < hidden_pk_id && - !m_tbl_def->m_hidden_pk_val.compare_exchange_weak(old, hidden_pk_id)) { - } + } + + longlong old = m_tbl_def->m_hidden_pk_val; + while (old < hidden_pk_id && + !m_tbl_def->m_hidden_pk_val.compare_exchange_weak(old, hidden_pk_id)) { } if (is_new_snapshot) { @@ -5586,11 +5592,13 @@ int ha_rocksdb::open(const char *const name, int mode, uint test_if_locked) { */ m_verify_row_debug_checksums = false; - /* TODO: move the following to where TABLE_SHARE is opened: */ - if (table->found_next_number_field) + /* Load auto_increment value only once on first use. */ + if (table->found_next_number_field && m_tbl_def->m_auto_incr_val == 0) { load_auto_incr_value(); + } - if (has_hidden_pk(table) && + /* Load hidden pk only once on first use. */ + if (has_hidden_pk(table) && m_tbl_def->m_hidden_pk_val == 0 && (err = load_hidden_pk_value()) != HA_EXIT_SUCCESS) { free_key_buffers(); DBUG_RETURN(err); @@ -11232,9 +11240,11 @@ bool ha_rocksdb::commit_inplace_alter_table( for (inplace_alter_handler_ctx **pctx = ctx_array; *pctx; pctx++) { Rdb_inplace_alter_ctx *const ctx = static_cast(*pctx); + auto_incr_val = std::max(auto_incr_val, ctx->m_max_auto_incr); dict_manager.put_auto_incr_val( - batch, ctx->m_new_tdef->get_autoincr_gl_index_id(), - std::max(ctx->m_max_auto_incr, auto_incr_val), true /* overwrite */); + batch, ctx->m_new_tdef->get_autoincr_gl_index_id(), auto_incr_val, + true /* overwrite */); + ctx->m_new_tdef->m_auto_incr_val = auto_incr_val; } if (dict_manager.commit(batch)) { diff --git a/storage/rocksdb/rdb_datadic.h b/storage/rocksdb/rdb_datadic.h index 4a1f768ab36b..cfd8e34512bc 100644 --- a/storage/rocksdb/rdb_datadic.h +++ b/storage/rocksdb/rdb_datadic.h @@ -977,17 +977,17 @@ class Rdb_tbl_def { Rdb_tbl_def &operator=(const Rdb_tbl_def &) = delete; explicit Rdb_tbl_def(const std::string &name) - : m_key_descr_arr(nullptr), m_hidden_pk_val(1), m_auto_incr_val(1) { + : m_key_descr_arr(nullptr), m_hidden_pk_val(0), m_auto_incr_val(0) { set_name(name); } Rdb_tbl_def(const char *const name, const size_t &len) - : m_key_descr_arr(nullptr), m_hidden_pk_val(1), m_auto_incr_val(1) { + : m_key_descr_arr(nullptr), m_hidden_pk_val(0), m_auto_incr_val(0) { set_name(std::string(name, len)); } explicit Rdb_tbl_def(const rocksdb::Slice &slice, const size_t &pos = 0) - : m_key_descr_arr(nullptr), m_hidden_pk_val(1), m_auto_incr_val(1) { + : m_key_descr_arr(nullptr), m_hidden_pk_val(0), m_auto_incr_val(0) { set_name(std::string(slice.data() + pos, slice.size() - pos)); } From 211af4c79dcf2d9666b9c9b8476d5f7cb2cd8aff Mon Sep 17 00:00:00 2001 From: Yoshinori Matsunobu Date: Fri, 27 Oct 2017 13:47:50 -0700 Subject: [PATCH 0474/1221] Adding global status counters for deadlocks and lock timeouts Upstream commit ID : fb-mysql-5.6.35/e4b78be7fb577a0e622893f5ec8fbc7471e1969c MYR-198 : Merge prod201704 Percona Server : - Added big_test.inc to rocksdb.deadlock.test Summary: This diff adds global status counters to track the number of deadlocks and number of row lock wait timeouts. Closes https://github.com/facebook/mysql-5.6/pull/751 Differential Revision: D6174960 fbshipit-source-id: 092639e --- mysql-test/suite/rocksdb/r/i_s_deadlock.result | 4 ++++ mysql-test/suite/rocksdb/r/rocksdb.result | 6 ++++++ mysql-test/suite/rocksdb/t/deadlock.test | 1 + mysql-test/suite/rocksdb/t/i_s_deadlock.test | 2 ++ storage/rocksdb/ha_rocksdb.cc | 9 +++++++++ 5 files changed, 22 insertions(+) diff --git a/mysql-test/suite/rocksdb/r/i_s_deadlock.result b/mysql-test/suite/rocksdb/r/i_s_deadlock.result index 9686dd8b12f7..61b0adfd9183 100644 --- a/mysql-test/suite/rocksdb/r/i_s_deadlock.result +++ b/mysql-test/suite/rocksdb/r/i_s_deadlock.result @@ -109,8 +109,12 @@ i 3 select * from t where i=2 for update; select * from t where i=3 for update; +select variable_value into @a from performance_schema.global_status where variable_name='rocksdb_row_lock_deadlocks'; select * from t where i=1 for update; ERROR 40001: Deadlock found when trying to get lock; try restarting transaction +select case when variable_value-@a = 1 then 'true' else 'false' end as deadlocks from performance_schema.global_status where variable_name='rocksdb_row_lock_deadlocks'; +deadlocks +true rollback; i 3 diff --git a/mysql-test/suite/rocksdb/r/rocksdb.result b/mysql-test/suite/rocksdb/r/rocksdb.result index 24666beaf0bd..07a8fc0530df 100644 --- a/mysql-test/suite/rocksdb/r/rocksdb.result +++ b/mysql-test/suite/rocksdb/r/rocksdb.result @@ -1582,6 +1582,8 @@ rocksdb_number_superversion_acquires # rocksdb_number_superversion_cleanups # rocksdb_number_superversion_releases # rocksdb_rate_limit_delay_millis # +rocksdb_row_lock_deadlocks # +rocksdb_row_lock_wait_timeouts # rocksdb_snapshot_conflict_errors # rocksdb_stall_l0_file_count_limit_slowdowns # rocksdb_stall_locked_l0_file_count_limit_slowdowns # @@ -1687,6 +1689,8 @@ rocksdb_number_superversion_acquires rocksdb_number_superversion_cleanups rocksdb_number_superversion_releases rocksdb_rate_limit_delay_millis +rocksdb_row_lock_deadlocks +rocksdb_row_lock_wait_timeouts rocksdb_snapshot_conflict_errors rocksdb_stall_l0_file_count_limit_slowdowns rocksdb_stall_locked_l0_file_count_limit_slowdowns @@ -1794,6 +1798,8 @@ rocksdb_number_superversion_acquires rocksdb_number_superversion_cleanups rocksdb_number_superversion_releases rocksdb_rate_limit_delay_millis +rocksdb_row_lock_deadlocks +rocksdb_row_lock_wait_timeouts rocksdb_snapshot_conflict_errors rocksdb_stall_l0_file_count_limit_slowdowns rocksdb_stall_locked_l0_file_count_limit_slowdowns diff --git a/mysql-test/suite/rocksdb/t/deadlock.test b/mysql-test/suite/rocksdb/t/deadlock.test index d72610e2d24c..8aedc2e5de1b 100644 --- a/mysql-test/suite/rocksdb/t/deadlock.test +++ b/mysql-test/suite/rocksdb/t/deadlock.test @@ -6,6 +6,7 @@ --echo # Disable for valgrind because this takes too long --source include/not_valgrind.inc +--source include/big_test.inc CREATE DATABASE mysqlslap; USE mysqlslap; diff --git a/mysql-test/suite/rocksdb/t/i_s_deadlock.test b/mysql-test/suite/rocksdb/t/i_s_deadlock.test index f7ffe3e3804a..6e23f576df71 100644 --- a/mysql-test/suite/rocksdb/t/i_s_deadlock.test +++ b/mysql-test/suite/rocksdb/t/i_s_deadlock.test @@ -87,8 +87,10 @@ let $wait_condition = select count(*) = 1 from information_schema.rocksdb_trx where thread_id = $con2 and waiting_key != ""; --source include/wait_condition.inc +select variable_value into @a from performance_schema.global_status where variable_name='rocksdb_row_lock_deadlocks'; --error ER_LOCK_DEADLOCK select * from t where i=1 for update; +select case when variable_value-@a = 1 then 'true' else 'false' end as deadlocks from performance_schema.global_status where variable_name='rocksdb_row_lock_deadlocks'; rollback; connection con2; diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index 205f035a902d..6cb634ee4e98 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -504,6 +504,8 @@ static my_bool rocksdb_print_snapshot_conflict_queries = FALSE; static my_bool rocksdb_large_prefix = FALSE; static my_bool rocksdb_allow_to_start_after_corruption = FALSE; +std::atomic rocksdb_row_lock_deadlocks(0); +std::atomic rocksdb_row_lock_wait_timeouts(0); std::atomic rocksdb_snapshot_conflict_errors(0); std::atomic rocksdb_wal_group_syncs(0); @@ -1797,11 +1799,14 @@ class Rdb_transaction { */ thd->mark_transaction_to_rollback(false /*just statement*/); + rocksdb_row_lock_wait_timeouts++; + return HA_ERR_LOCK_WAIT_TIMEOUT; } if (s.IsDeadlock()) { thd->mark_transaction_to_rollback(false /* just statement */); + rocksdb_row_lock_deadlocks++; return HA_ERR_LOCK_DEADLOCK; } else if (s.IsBusy()) { rocksdb_snapshot_conflict_errors++; @@ -11651,6 +11656,10 @@ static SHOW_VAR rocksdb_status_vars[] = { DEF_STATUS_VAR(number_superversion_releases), DEF_STATUS_VAR(number_superversion_cleanups), DEF_STATUS_VAR(number_block_not_compressed), + DEF_STATUS_VAR_PTR("row_lock_deadlocks", &rocksdb_row_lock_deadlocks, + SHOW_LONGLONG), + DEF_STATUS_VAR_PTR("row_lock_wait_timeouts", + &rocksdb_row_lock_wait_timeouts, SHOW_LONGLONG), DEF_STATUS_VAR_PTR("snapshot_conflict_errors", &rocksdb_snapshot_conflict_errors, SHOW_LONGLONG), DEF_STATUS_VAR_PTR("wal_group_syncs", &rocksdb_wal_group_syncs, From c565a4c735d151355009d624f70427aca1343c9f Mon Sep 17 00:00:00 2001 From: Yoshinori Matsunobu Date: Fri, 27 Oct 2017 15:01:00 -0700 Subject: [PATCH 0475/1221] Exclude trash files Upstream commit ID : fb-mysql-5.6.35/a7cb80491dff87ecaca9c71e49915e0792a1804a MYR-198 : Merge prod201704 This is a NULL cherry-pick to Percona Server 5.7 to create the commit placeholder for the corresponding upstream commit. Reason: Patch not taken into Percona Server. From d90d01023ff65d9c447c23f949ed4e2952dd2b96 Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Fri, 27 Oct 2017 15:54:07 -0700 Subject: [PATCH 0476/1221] Cleaned up bulk load tests. Upstream commit ID : fb-mysql-5.6.35/dfff4c5c8fa8ccc59e28afc06590dee6edb58b60 MYR-198 : Merge prod201704 This is a NULL cherry-pick to Percona Server 5.7 to create the commit placeholder for the corresponding upstream commit. Reason: Change already applied to source tree through another patch. From 6e9f23ee65efa7211e72f208e83cd523eee23d87 Mon Sep 17 00:00:00 2001 From: Yoshinori Matsunobu Date: Fri, 27 Oct 2017 20:34:50 -0700 Subject: [PATCH 0477/1221] Setting iterate_lower_bounds as rocksdb.ReadOptions Upstream commit ID : fb-mysql-5.6.35/f7bbd1da8d6651a3017b6da4ca0d08d0f13df6f4 MYR-198 : Merge prod201704 Summary: This is a follow up diff for D6145544. This diff also updates rocksdb submodule to use the option. Closes https://github.com/facebook/mysql-5.6/pull/753 Differential Revision: D6178811 fbshipit-source-id: c0e2ee5 --- mysql-test/suite/rocksdb/r/show_engine.result | 20 +++++++++++++++++++ storage/rocksdb/ha_rocksdb.cc | 4 ++-- storage/rocksdb/rocksdb | 2 +- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/mysql-test/suite/rocksdb/r/show_engine.result b/mysql-test/suite/rocksdb/r/show_engine.result index 7397be8db099..d83f7ecd87d0 100644 --- a/mysql-test/suite/rocksdb/r/show_engine.result +++ b/mysql-test/suite/rocksdb/r/show_engine.result @@ -157,8 +157,13 @@ __system__ TABLE_FACTORY::BLOCK_SIZE # __system__ TABLE_FACTORY::BLOCK_SIZE_DEVIATION # __system__ TABLE_FACTORY::BLOCK_RESTART_INTERVAL # __system__ TABLE_FACTORY::INDEX_BLOCK_RESTART_INTERVAL # +__system__ TABLE_FACTORY::METADATA_BLOCK_SIZE # +__system__ TABLE_FACTORY::PARTITION_FILTERS # +__system__ TABLE_FACTORY::USE_DELTA_ENCODING # __system__ TABLE_FACTORY::FILTER_POLICY # __system__ TABLE_FACTORY::WHOLE_KEY_FILTERING # +__system__ TABLE_FACTORY::VERIFY_COMPRESSION # +__system__ TABLE_FACTORY::READ_AMP_BYTES_PER_BIT # __system__ TABLE_FACTORY::FORMAT_VERSION # cf_t1 COMPARATOR # cf_t1 MERGE_OPERATOR # @@ -222,8 +227,13 @@ cf_t1 TABLE_FACTORY::BLOCK_SIZE # cf_t1 TABLE_FACTORY::BLOCK_SIZE_DEVIATION # cf_t1 TABLE_FACTORY::BLOCK_RESTART_INTERVAL # cf_t1 TABLE_FACTORY::INDEX_BLOCK_RESTART_INTERVAL # +cf_t1 TABLE_FACTORY::METADATA_BLOCK_SIZE # +cf_t1 TABLE_FACTORY::PARTITION_FILTERS # +cf_t1 TABLE_FACTORY::USE_DELTA_ENCODING # cf_t1 TABLE_FACTORY::FILTER_POLICY # cf_t1 TABLE_FACTORY::WHOLE_KEY_FILTERING # +cf_t1 TABLE_FACTORY::VERIFY_COMPRESSION # +cf_t1 TABLE_FACTORY::READ_AMP_BYTES_PER_BIT # cf_t1 TABLE_FACTORY::FORMAT_VERSION # default COMPARATOR # default MERGE_OPERATOR # @@ -287,8 +297,13 @@ default TABLE_FACTORY::BLOCK_SIZE # default TABLE_FACTORY::BLOCK_SIZE_DEVIATION # default TABLE_FACTORY::BLOCK_RESTART_INTERVAL # default TABLE_FACTORY::INDEX_BLOCK_RESTART_INTERVAL # +default TABLE_FACTORY::METADATA_BLOCK_SIZE # +default TABLE_FACTORY::PARTITION_FILTERS # +default TABLE_FACTORY::USE_DELTA_ENCODING # default TABLE_FACTORY::FILTER_POLICY # default TABLE_FACTORY::WHOLE_KEY_FILTERING # +default TABLE_FACTORY::VERIFY_COMPRESSION # +default TABLE_FACTORY::READ_AMP_BYTES_PER_BIT # default TABLE_FACTORY::FORMAT_VERSION # rev:cf_t2 COMPARATOR # rev:cf_t2 MERGE_OPERATOR # @@ -352,8 +367,13 @@ rev:cf_t2 TABLE_FACTORY::BLOCK_SIZE # rev:cf_t2 TABLE_FACTORY::BLOCK_SIZE_DEVIATION # rev:cf_t2 TABLE_FACTORY::BLOCK_RESTART_INTERVAL # rev:cf_t2 TABLE_FACTORY::INDEX_BLOCK_RESTART_INTERVAL # +rev:cf_t2 TABLE_FACTORY::METADATA_BLOCK_SIZE # +rev:cf_t2 TABLE_FACTORY::PARTITION_FILTERS # +rev:cf_t2 TABLE_FACTORY::USE_DELTA_ENCODING # rev:cf_t2 TABLE_FACTORY::FILTER_POLICY # rev:cf_t2 TABLE_FACTORY::WHOLE_KEY_FILTERING # +rev:cf_t2 TABLE_FACTORY::VERIFY_COMPRESSION # +rev:cf_t2 TABLE_FACTORY::READ_AMP_BYTES_PER_BIT # rev:cf_t2 TABLE_FACTORY::FORMAT_VERSION # DROP TABLE t1; DROP TABLE t2; diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index 6cb634ee4e98..fbe392f1d183 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -2077,7 +2077,7 @@ class Rdb_transaction { if (skip_bloom_filter) { options.total_order_seek = true; - // TODO(yoshinori): options.iterate_lower_bound = &eq_cond_lower_bound; + options.iterate_lower_bound = &eq_cond_lower_bound; options.iterate_upper_bound = &eq_cond_upper_bound; } else { // With this option, Iterator::Valid() returns false if key @@ -9943,7 +9943,7 @@ int ha_rocksdb::remove_rows(Rdb_tbl_def *const tbl) { rocksdb::ColumnFamilyHandle *cf = kd.get_cf(); const rocksdb::Slice table_key(key_buf, key_len); setup_iterator_bounds(kd, table_key); - // TODO(yoshinori): opts.iterate_lower_bound=&m_eq_cond_lower_bound_slice; + opts.iterate_lower_bound = &m_eq_cond_lower_bound_slice; opts.iterate_upper_bound = &m_eq_cond_upper_bound_slice; std::unique_ptr it(rdb->NewIterator(opts, cf)); diff --git a/storage/rocksdb/rocksdb b/storage/rocksdb/rocksdb index 019aa7074cea..6a9335dbbb3e 160000 --- a/storage/rocksdb/rocksdb +++ b/storage/rocksdb/rocksdb @@ -1 +1 @@ -Subproject commit 019aa7074ceadffd6fb871f96465b3785370901f +Subproject commit 6a9335dbbb3ecc87fb1cb8701be39b3ec16beb20 From b289095c5774572c462665b6f4ef39857ab24c87 Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Mon, 30 Oct 2017 16:29:19 -0700 Subject: [PATCH 0478/1221] Fixed rocksdb_bulk_load_allow_unsorted option callback. Upstream commit ID : fb-mysql-5.6.35/87114891361db412a3c5b5fa96d07a636a91ea74 MYR-198 : Merge prod201704 Summary: The option uses a 'set' callback to set/return an error to the client which is an invalid thing to do. This is proven by the debug assertion that is hit on a debug build when executing the sequence in the rocksdb.bulk_load_unsorted_errors test. The proper way to return an error from a SET is to use a 'check' callback instead. This patch changes the 'set' to a 'check' and removes the no-debug constraint on the bulk_load_unsorted_errors test. Closes https://github.com/facebook/mysql-5.6/pull/755 Reviewed By: Tema Differential Revision: D6189416 Pulled By: Tema fbshipit-source-id: c2609af --- .../r/bulk_load_unsorted_errors.result | 4 +- .../rocksdb/t/bulk_load_unsorted_errors.test | 17 +++++- storage/rocksdb/ha_rocksdb.cc | 52 ++++++++++++++----- 3 files changed, 58 insertions(+), 15 deletions(-) diff --git a/mysql-test/suite/rocksdb/r/bulk_load_unsorted_errors.result b/mysql-test/suite/rocksdb/r/bulk_load_unsorted_errors.result index d8e5b92e8975..8f88061103ed 100644 --- a/mysql-test/suite/rocksdb/r/bulk_load_unsorted_errors.result +++ b/mysql-test/suite/rocksdb/r/bulk_load_unsorted_errors.result @@ -1,4 +1,6 @@ +# restart:--log-error=MYSQLTEST_VARDIR/tmp/rocksdb.bulk_load_unsorted_errors.err SET rocksdb_bulk_load=1; SET rocksdb_bulk_load_allow_unsorted=1; -ERROR HY000: Error when executing command SET: Cannot change this setting while bulk load is enabled +ERROR 42000: Variable 'rocksdb_bulk_load_allow_unsorted' can't be set to the value of '1' SET rocksdb_bulk_load=0; +# restart diff --git a/mysql-test/suite/rocksdb/t/bulk_load_unsorted_errors.test b/mysql-test/suite/rocksdb/t/bulk_load_unsorted_errors.test index 067a91d5d8b9..80e0266e6cf1 100644 --- a/mysql-test/suite/rocksdb/t/bulk_load_unsorted_errors.test +++ b/mysql-test/suite/rocksdb/t/bulk_load_unsorted_errors.test @@ -1,8 +1,21 @@ --source include/have_rocksdb.inc ---source include/have_nodebug.inc + +--let LOG=$MYSQLTEST_VARDIR/tmp/rocksdb.bulk_load_unsorted_errors.err +--let $restart_parameters=restart:--log-error=$LOG +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--source include/restart_mysqld.inc # Cannot change unsorted input preference during bulk load SET rocksdb_bulk_load=1; ---error ER_ERROR_WHEN_EXECUTING_COMMAND +--error ER_WRONG_VALUE_FOR_VAR SET rocksdb_bulk_load_allow_unsorted=1; SET rocksdb_bulk_load=0; + +--let SEARCH_FILE=$LOG +--let SEARCH_PATTERN=RocksDB: Cannot change this setting while bulk load is enabled +--source include/search_pattern_in_file.inc + +--let $restart_parameters= +--source include/restart_mysqld.inc + +--remove_file $LOG diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index fbe392f1d183..a8eb8045cc68 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -413,9 +413,9 @@ static int rocksdb_check_bulk_load(THD *const thd, void *save, struct st_mysql_value *value); -static void rocksdb_set_bulk_load_allow_unsorted( - THD *thd, struct st_mysql_sys_var *var MY_ATTRIBUTE((__unused__)), - void *var_ptr, const void *save); +static int rocksdb_check_bulk_load_allow_unsorted( + THD *const thd, struct st_mysql_sys_var *var MY_ATTRIBUTE((__unused__)), + void *save, struct st_mysql_value *value); static void rocksdb_set_max_background_jobs(THD *thd, struct st_mysql_sys_var *const var, @@ -643,7 +643,8 @@ static MYSQL_THDVAR_BOOL( static MYSQL_THDVAR_BOOL(bulk_load_allow_unsorted, PLUGIN_VAR_RQCMDARG, "Allow unsorted input during bulk-load. " "Can be changed only when bulk load is disabled.", - nullptr, rocksdb_set_bulk_load_allow_unsorted, FALSE); + rocksdb_check_bulk_load_allow_unsorted, nullptr, + FALSE); static MYSQL_SYSVAR_BOOL(enable_bulk_load_api, rocksdb_enable_bulk_load_api, PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY, @@ -12152,16 +12153,43 @@ int rocksdb_check_bulk_load(THD *const thd, struct st_mysql_sys_var *var return 0; } -void rocksdb_set_bulk_load_allow_unsorted( - THD *const thd, - struct st_mysql_sys_var *const var MY_ATTRIBUTE((__unused__)), - void *const var_ptr, const void *const save) { - if (THDVAR(thd, bulk_load)) { - my_error(ER_ERROR_WHEN_EXECUTING_COMMAND, MYF(0), "SET", - "Cannot change this setting while bulk load is enabled"); +int rocksdb_check_bulk_load_allow_unsorted( + THD *const thd, struct st_mysql_sys_var *var MY_ATTRIBUTE((__unused__)), + void *save, struct st_mysql_value *value) { + my_bool new_value; + int new_value_type = value->value_type(value); + if (new_value_type == MYSQL_VALUE_TYPE_STRING) { + char buf[16]; + int len = sizeof(buf); + const char *str = value->val_str(value, buf, &len); + if (str && (my_strcasecmp(system_charset_info, "true", str) == 0 || + my_strcasecmp(system_charset_info, "on", str) == 0)) { + new_value = TRUE; + } else if (str && (my_strcasecmp(system_charset_info, "false", str) == 0 || + my_strcasecmp(system_charset_info, "off", str) == 0)) { + new_value = FALSE; + } else { + return 1; + } + } else if (new_value_type == MYSQL_VALUE_TYPE_INT) { + long long intbuf; + value->val_int(value, &intbuf); + if (intbuf > 1) + return 1; + new_value = intbuf > 0 ? TRUE : FALSE; } else { - *static_cast(var_ptr) = *static_cast(save); + return 1; } + + if (THDVAR(thd, bulk_load)) { + sql_print_error("RocksDB: Cannot change this setting while bulk load is " + "enabled"); + + return 1; + } + + *static_cast(save) = new_value; + return 0; } static void rocksdb_set_max_background_jobs(THD *thd, From afdef9e6032c77b96741069816003c50731081ce Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Mon, 30 Oct 2017 16:39:02 -0700 Subject: [PATCH 0479/1221] Fix rocksdb.skip_validate_tmp_table Upstream commit ID : fb-mysql-5.6.35/bf4607e8a3b12f3dc0049591ea17e5c64bab9690 MYR-198 : Merge prod201704 This is a NULL cherry-pick to Percona Server 5.7 to create the commit placeholder for the corresponding upstream commit. Reason: Patch not taken into Percona Server and MyRocks affected code already applied to source tree through another patch. From 1a1857a071783aa1679985b8cec842896dd59a80 Mon Sep 17 00:00:00 2001 From: Maria Couceiro Date: Thu, 18 Jan 2018 17:47:48 +0000 Subject: [PATCH 0480/1221] BUG#20454797 WAIT_FOR_SLAVE_PARAM.INC IS NOT CHECKING FOR ERROR WHILE WAITING THE PARAMETER Problem and analysis: The mtr include "wait_for_slave_param.inc" was not detecting errors. Instead, it would always trigger the timeout waiting for the parameter if an unexpected error stopped one of the slave threads. This misbehavior of the include generated timeout errors when other errors were the real cause of the issue in some test cases. Fix: Corrected the code in "wait_for_slave_param.inc" to detect the errors. Also, added a condition that checks for expected errors, so they can be safely ignored. Corrected the test cases that were misusing the mtr include "stop_slave.inc" to stop slaves when errors were present in either the connection or the applier thread. These tests now ignore the expected error. --- .../extra/rpl_tests/rpl_row_idempotency.test | 4 ++ .../extra/rpl_tests/rpl_start_stop_slave.test | 1 + mysql-test/include/wait_for_slave_param.inc | 55 +++++++++++++++++-- .../include/wait_for_slave_sql_to_start.inc | 2 +- mysql-test/suite/rpl/r/rpl_connection.result | 2 +- .../suite/rpl/r/rpl_heartbeat_basic.result | 2 +- .../suite/rpl/r/rpl_master_connection.result | 30 ++++++---- .../suite/rpl/r/rpl_row_corruption.result | 2 +- mysql-test/suite/rpl/r/rpl_ssl1.result | 8 +-- .../suite/rpl/t/rpl_change_master_dbug.test | 1 + mysql-test/suite/rpl/t/rpl_connection.test | 2 +- .../suite/rpl/t/rpl_heartbeat_basic.test | 2 +- .../suite/rpl/t/rpl_master_connection.test | 41 ++++++++++---- .../suite/rpl/t/rpl_parallel_start_stop.test | 2 + .../suite/rpl/t/rpl_rotate_row_trans.test | 1 + .../suite/rpl/t/rpl_row_corruption.test | 2 +- .../suite/rpl/t/rpl_slave_grp_exec.test | 2 +- mysql-test/suite/rpl/t/rpl_slave_status.test | 1 + .../suite/rpl/t/rpl_sql_thread_error.test | 1 + mysql-test/suite/rpl/t/rpl_ssl1.test | 13 ++--- 20 files changed, 126 insertions(+), 48 deletions(-) diff --git a/mysql-test/extra/rpl_tests/rpl_row_idempotency.test b/mysql-test/extra/rpl_tests/rpl_row_idempotency.test index 85b674c78503..2680562cde5c 100644 --- a/mysql-test/extra/rpl_tests/rpl_row_idempotency.test +++ b/mysql-test/extra/rpl_tests/rpl_row_idempotency.test @@ -121,6 +121,7 @@ select * from ti1 order by b /* must be (2),(3) */; --echo *** slave must stop (Trying to delete a referenced foreing key) connection slave; +--let $slave_sql_errno= convert_error(ER_ROW_IS_REFERENCED_2) source include/wait_for_slave_sql_to_stop.inc; let $last_error = query_get_value("SHOW SLAVE STATUS", Last_SQL_Errno, 1); @@ -155,6 +156,7 @@ insert into ti2 set a=3, b=3 /* offending write event */; --echo *** slave must stop (Trying to insert an invalid foreign key) connection slave; +--let $slave_sql_errno= convert_error(ER_NO_REFERENCED_ROW_2) source include/wait_for_slave_sql_to_stop.inc; let $last_error = query_get_value("SHOW SLAVE STATUS", Last_SQL_Errno, 1); @@ -194,6 +196,7 @@ insert into ti1 set b=1 /* offending write event */; --echo *** slave must stop (Trying to insert a dupliacte key) connection slave; +--let $slave_sql_errno= convert_error(ER_DUP_ENTRY) source include/wait_for_slave_sql_to_stop.inc; let $last_error = query_get_value("SHOW SLAVE STATUS", Last_SQL_Errno, 1); @@ -229,6 +232,7 @@ DELETE FROM t1 WHERE a = -2; --echo *** slave must stop (Key was not found) connection slave; +--let $slave_sql_errno= convert_error(ER_KEY_NOT_FOUND) source include/wait_for_slave_sql_to_stop.inc; let $last_error = query_get_value("SHOW SLAVE STATUS", Last_SQL_Errno, 1); diff --git a/mysql-test/extra/rpl_tests/rpl_start_stop_slave.test b/mysql-test/extra/rpl_tests/rpl_start_stop_slave.test index cf370a6a78fe..87081ab7c3f8 100644 --- a/mysql-test/extra/rpl_tests/rpl_start_stop_slave.test +++ b/mysql-test/extra/rpl_tests/rpl_start_stop_slave.test @@ -204,6 +204,7 @@ START SLAVE; --let $status_items= Last_IO_Errno, Last_IO_Error --source include/show_slave_status.inc +--let $slave_io_errno= convert_error(ER_MASTER_FATAL_ERROR_READING_BINLOG) --source include/stop_slave.inc RESET SLAVE; diff --git a/mysql-test/include/wait_for_slave_param.inc b/mysql-test/include/wait_for_slave_param.inc index d181f955e2e0..edb3b8bd1908 100644 --- a/mysql-test/include/wait_for_slave_param.inc +++ b/mysql-test/include/wait_for_slave_param.inc @@ -10,8 +10,11 @@ # --let $slave_param_value= No # [--let $slave_param_comparison= [ < | <= | >= | > | = | != ]] # [--let $slave_timeout= NUMBER] +# [--let $slave_error_param= [Last_SQL_Errno | Last_IO_Errno]] # [--let $slave_error_param= [Slave_SQL_Errno | Slave_IO_Errno]] # [--let $rpl_debug= 1] +# [--let $slave_io_errno= NUMBER [, NUMBER ...] [# comment]] +# [--let $slave_sql_errno= NUMBER [, NUMBER ...] [# comment]] # --source include/wait_for_slave_param.inc # # Parameters: @@ -33,13 +36,21 @@ # setting $slave_timeout. The unit is one second. # # $slave_error_param -# If set, this script will check if the column of the output from -# SHOW SLAVE STATUS named $slave_error_param is nonzero. If it is, -# this script will faile immediately. Typically, this should be set +# If set, this script will check for errors in the column of the +# output from SHOW SLAVE STATUS named $slave_error_param while +# waiting for the parameter. Once finding an error that is not +# expected (see $slave_io_errno and $slave_sql_errno parameters) +# this script will fail immediately. Typically, this should be set # to Last_IO_Errno or Last_SQL_Errno. # # $rpl_debug # See include/rpl_init.inc +# +# $slave_io_errno +# See include/wait_for_slave_io_error.inc +# +# $slave_sql_errno +# See include/wait_for_slave_sql_error.inc --let $include_filename= wait_for_slave_param.inc [$slave_param] @@ -57,9 +68,16 @@ if (!$_slave_timeout) let $_slave_timeout= `select $default_timeout * $sleep_freq`; } -if ($slave_error_param == '') +if ($slave_error_param) { - --let $slave_error_param= 1 + if ($slave_error_param != "Last_SQL_Errno") + { + if ($slave_error_param != "Last_IO_Errno") + { + --echo *** slave_error_param = $slave_error_param + --die slave_error_param must be null, Last_SQL_Errno or Last_IO_Errno + } + } } let $_slave_param_comparison= $slave_param_comparison; @@ -82,6 +100,11 @@ if ($_slave_check_configured == 'No such row') --die SHOW SLAVE STATUS returned empty result set. Slave not configured. } + +# Strip away comments on $slave_io_errno and $slave_sql_errno parameters +--let $_slave_io_errno= `SELECT IF(LOCATE('#', '$slave_io_errno') != 0, SUBSTR('$slave_io_errno', 1, LOCATE('#', '$slave_io_errno') - 1), '$slave_io_errno')` +--let $_slave_sql_errno= `SELECT IF(LOCATE('#', '$slave_sql_errno') != 0, SUBSTR('$slave_sql_errno', 1, LOCATE('#', '$slave_sql_errno') - 1), '$slave_sql_errno')` + --let $_slave_timeout_counter= `select $_slave_timeout * $sleep_freq` --let $_slave_continue= 1 while ($_slave_continue) @@ -89,9 +112,29 @@ while ($_slave_continue) --let $_show_slave_status_value= query_get_value("SHOW SLAVE STATUS", $slave_param, 1) # Check if an error condition is reached. - if (!$slave_error_param) + if ($slave_error_param) { --let $_show_slave_status_error_value= query_get_value("SHOW SLAVE STATUS", $slave_error_param, 1) + + # Check if the error condition was expected + if ($_show_slave_status_error_value) + { + --let $_expected_error= + if ($slave_error_param == "Last_IO_Errno") + { + --let $_expected_error=`SELECT FIND_IN_SET('$_show_slave_status_error_value','$_slave_io_errno')` + } + if ($slave_error_param == "Last_SQL_Errno") + { + --let $_expected_error=`SELECT FIND_IN_SET('$_show_slave_status_error_value','$_slave_sql_errno')` + } + # If the error is an expected error, just ignore it + if ($_expected_error) + { + --let $_show_slave_status_error_value= + } + } + if ($_show_slave_status_error_value) { --echo **** ERROR: $slave_error_param = '$_show_slave_status_error_value' while waiting for slave parameter $slave_param $_slave_param_comparison $slave_param_value **** diff --git a/mysql-test/include/wait_for_slave_sql_to_start.inc b/mysql-test/include/wait_for_slave_sql_to_start.inc index 4aea9fba5699..b4dff6475a18 100644 --- a/mysql-test/include/wait_for_slave_sql_to_start.inc +++ b/mysql-test/include/wait_for_slave_sql_to_start.inc @@ -28,7 +28,7 @@ let $slave_param_value= Yes; # *before* it clears Last_SQL_Errno. So we have to allow errors in # the SQL thread here. -#--let $slave_error_param= Last_SQL_Errno +--let $slave_error_param= source include/wait_for_slave_param.inc; #--let $slave_error_param= diff --git a/mysql-test/suite/rpl/r/rpl_connection.result b/mysql-test/suite/rpl/r/rpl_connection.result index ee216015175c..731d103a896e 100644 --- a/mysql-test/suite/rpl/r/rpl_connection.result +++ b/mysql-test/suite/rpl/r/rpl_connection.result @@ -11,7 +11,7 @@ Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. START SLAVE; include/wait_for_slave_io_error.inc [errno=1045, 1593] -include/stop_slave.inc +include/stop_slave_sql.inc CHANGE MASTER TO MASTER_USER= 'root', MASTER_PASSWORD= ''; Warnings: Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. diff --git a/mysql-test/suite/rpl/r/rpl_heartbeat_basic.result b/mysql-test/suite/rpl/r/rpl_heartbeat_basic.result index bb36646fa85b..b29efdd60e4e 100644 --- a/mysql-test/suite/rpl/r/rpl_heartbeat_basic.result +++ b/mysql-test/suite/rpl/r/rpl_heartbeat_basic.result @@ -281,7 +281,7 @@ INSERT INTO t1 VALUES (1, 'on master', NULL); call mtr.add_suppression("Slave SQL.*Duplicate entry .1. for key .PRIMARY.. on query.* Error_code: 1062"); call mtr.add_suppression("Slave SQL.*Request to stop slave SQL Thread received while applying a group that has non-transactional changes; waiting for completion of the group"); Heartbeat events are received while sql thread stopped (1 means 'yes'): 1 -include/stop_slave.inc +include/stop_slave_io.inc DELETE FROM t1; include/start_slave.inc include/sync_slave_sql_with_master.inc diff --git a/mysql-test/suite/rpl/r/rpl_master_connection.result b/mysql-test/suite/rpl/r/rpl_master_connection.result index fb4c0ad9943a..0cd374d925f0 100644 --- a/mysql-test/suite/rpl/r/rpl_master_connection.result +++ b/mysql-test/suite/rpl/r/rpl_master_connection.result @@ -233,29 +233,39 @@ include/wait_for_slave_io_error.inc [errno=1593] include/stop_slave.inc TRUNCATE mysql.general_log; START SLAVE USER='root' PASSWORD='secret'; -include/stop_slave.inc +include/wait_for_slave_io_error.inc [errno=1045] +include/stop_slave_sql.inc START SLAVE USER = 'root' PASSWORD = ''; -include/stop_slave.inc +include/wait_for_slave_io_error.inc [errno=1045] +include/stop_slave_sql.inc TRUNCATE mysql.general_log; START SLAVE IO_THREAD USER='root' PASSWORD='secret' DEFAULT_AUTH= 'auth_test_plugin' PLUGIN_DIR= 'PLUGIN_AUTH_DIR'; -include/stop_slave.inc +include/wait_for_slave_io_error.inc [errno=1045] +include/stop_slave_sql.inc START SLAVE IO_THREAD USER = 'root' PASSWORD = '' DEFAULT_AUTH = 'auth_test_plugin' PLUGIN_DIR = 'PLUGIN_AUTH_DIR'; -include/stop_slave.inc +include/wait_for_slave_io_error.inc [errno=1045] +include/stop_slave_sql.inc TRUNCATE mysql.general_log; START SLAVE IO_THREAD, SQL_THREAD USER='root' PASSWORD='secret' DEFAULT_AUTH= 'auth_test_plugin' PLUGIN_DIR= 'PLUGIN_AUTH_DIR'; -include/stop_slave.inc +include/wait_for_slave_io_error.inc [errno=1045] +include/stop_slave_sql.inc START SLAVE IO_THREAD, SQL_THREAD USER = 'root' PASSWORD = '' DEFAULT_AUTH = 'auth_test_plugin' PLUGIN_DIR = 'PLUGIN_AUTH_DIR'; -include/stop_slave.inc +include/wait_for_slave_io_error.inc [errno=1045] +include/stop_slave_sql.inc TRUNCATE mysql.general_log; START SLAVE IO_THREAD, SQL_THREAD UNTIL MASTER_LOG_FILE='dummy-log.000001', MASTER_LOG_POS=116 USER='root' PASSWORD='secret' DEFAULT_AUTH= 'auth_test_plugin' PLUGIN_DIR= 'PLUGIN_AUTH_DIR'; -include/stop_slave.inc +include/wait_for_slave_io_error.inc [errno=1045] +include/stop_slave_sql.inc START SLAVE IO_THREAD, SQL_THREAD UNTIL MASTER_LOG_FILE = 'dummy-log.000001', MASTER_LOG_POS = 116 USER = 'root' PASSWORD = '' DEFAULT_AUTH = 'auth_test_plugin' PLUGIN_DIR = 'PLUGIN_AUTH_DIR'; -include/stop_slave.inc +include/wait_for_slave_io_error.inc [errno=1045] +include/stop_slave_sql.inc TRUNCATE mysql.general_log; START SLAVE IO_THREAD, SQL_THREAD UNTIL RELAY_LOG_FILE='dummy-log.000001', RELAY_LOG_POS=116 USER='root' PASSWORD='secret' DEFAULT_AUTH= 'auth_test_plugin' PLUGIN_DIR= 'PLUGIN_AUTH_DIR'; -include/stop_slave.inc +include/wait_for_slave_io_error.inc [errno=1045] +include/stop_slave_sql.inc START SLAVE IO_THREAD, SQL_THREAD UNTIL RELAY_LOG_FILE = 'dummy-log.000001', RELAY_LOG_POS = 116 USER = 'root' PASSWORD = '' DEFAULT_AUTH = 'auth_test_plugin' PLUGIN_DIR = 'PLUGIN_AUTH_DIR'; -include/stop_slave.inc +include/wait_for_slave_io_error.inc [errno=1045] +include/stop_slave_sql.inc SET GLOBAL log_output= @old_log_output; TRUNCATE mysql.general_log; include/start_slave.inc diff --git a/mysql-test/suite/rpl/r/rpl_row_corruption.result b/mysql-test/suite/rpl/r/rpl_row_corruption.result index 718018434e18..1f9a7b20871a 100644 --- a/mysql-test/suite/rpl/r/rpl_row_corruption.result +++ b/mysql-test/suite/rpl/r/rpl_row_corruption.result @@ -16,7 +16,7 @@ SET GLOBAL debug="+d,inject_tblmap_same_id_maps_diff_table"; include/start_slave.inc UPDATE t1_11753004, t2_11753004 SET t1_11753004.c1=3, t2_11753004.c1=4 WHERE t1_11753004.c1=1 OR t2_11753004.c1=2; include/wait_for_slave_sql_error.inc [errno=1593 ] -include/stop_slave.inc +include/stop_slave_io.inc SET GLOBAL debug="-d,inject_tblmap_same_id_maps_diff_table"; include/start_slave.inc include/rpl_reset.inc diff --git a/mysql-test/suite/rpl/r/rpl_ssl1.result b/mysql-test/suite/rpl/r/rpl_ssl1.result index d60e2a3686d0..b3ccf737ff49 100644 --- a/mysql-test/suite/rpl/r/rpl_ssl1.result +++ b/mysql-test/suite/rpl/r/rpl_ssl1.result @@ -13,14 +13,12 @@ Warnings: Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. start slave; -insert into t1 values (1); -select * from t1; -t -stop slave; -include/wait_for_slave_to_stop.inc +include/wait_for_slave_io_error.inc [errno=1045] +include/stop_slave_sql.inc change master to master_ssl=1 , master_ssl_ca ='MYSQL_TEST_DIR/std_data/cacert.pem', master_ssl_cert='MYSQL_TEST_DIR/std_data/client-cert.pem', master_ssl_key='MYSQL_TEST_DIR/std_data/client-key.pem'; start slave; include/wait_for_slave_to_start.inc +insert into t1 values (1); include/sync_slave_sql_with_master.inc select * from t1; t diff --git a/mysql-test/suite/rpl/t/rpl_change_master_dbug.test b/mysql-test/suite/rpl/t/rpl_change_master_dbug.test index b2f5bda0ff37..9ac63fb98b98 100644 --- a/mysql-test/suite/rpl/t/rpl_change_master_dbug.test +++ b/mysql-test/suite/rpl/t/rpl_change_master_dbug.test @@ -24,6 +24,7 @@ START SLAVE io_thread; # the error with the err_count exported in the retries field, we should # get 3 retries (one per second) when the IO thread gives up, ie, # when it stops. +--let $slave_io_errno= 2005 -- source include/wait_for_slave_io_to_stop.inc -- let $error= query_get_value("SHOW SLAVE STATUS", Last_IO_Error, 1) if (!`SELECT "$error" LIKE "%retries: 3"`) diff --git a/mysql-test/suite/rpl/t/rpl_connection.test b/mysql-test/suite/rpl/t/rpl_connection.test index b057c260f0e0..8a0023f2bafe 100644 --- a/mysql-test/suite/rpl/t/rpl_connection.test +++ b/mysql-test/suite/rpl/t/rpl_connection.test @@ -17,7 +17,7 @@ CHANGE MASTER TO MASTER_USER= '', MASTER_PASSWORD= ''; START SLAVE; --let $slave_io_errno= 1045, 1593 --source include/wait_for_slave_io_error.inc ---source include/stop_slave.inc +--source include/stop_slave_sql.inc --replace_column 2 #### CHANGE MASTER TO MASTER_USER= 'root', MASTER_PASSWORD= ''; diff --git a/mysql-test/suite/rpl/t/rpl_heartbeat_basic.test b/mysql-test/suite/rpl/t/rpl_heartbeat_basic.test index 91d7178f9e25..208620c38c3f 100644 --- a/mysql-test/suite/rpl/t/rpl_heartbeat_basic.test +++ b/mysql-test/suite/rpl/t/rpl_heartbeat_basic.test @@ -389,7 +389,7 @@ sleep 2; let $rcvd_heartbeats_after= query_get_value(SHOW STATUS LIKE 'slave_received_heartbeats', Value, 1); let $result= query_get_value(SELECT ($rcvd_heartbeats_after - $rcvd_heartbeats_before) > 0 AS Result, Result, 1); --echo Heartbeat events are received while sql thread stopped (1 means 'yes'): $result ---source include/stop_slave.inc +--source include/stop_slave_io.inc DELETE FROM t1; --source include/start_slave.inc --connection master diff --git a/mysql-test/suite/rpl/t/rpl_master_connection.test b/mysql-test/suite/rpl/t/rpl_master_connection.test index 954ca729ee3c..cfffcc72ffab 100644 --- a/mysql-test/suite/rpl/t/rpl_master_connection.test +++ b/mysql-test/suite/rpl/t/rpl_master_connection.test @@ -319,55 +319,76 @@ START SLAVE PASSWORD='secret'; --let $slave_io_errno=1593 --source include/wait_for_slave_io_error.inc +--let $slave_io_errno= convert_error(ER_SLAVE_FATAL_ERROR) --source include/stop_slave.inc TRUNCATE mysql.general_log; START SLAVE USER='root' PASSWORD='secret'; --let $rewritten= `SELECT argument FROM mysql.general_log WHERE argument LIKE "%PASSWORD = ''%"` # execute it to see if the rewrite generated a (syntatically) valid command ---source include/stop_slave.inc +--let $slave_io_errno= convert_error(ER_ACCESS_DENIED_ERROR) +--source include/wait_for_slave_io_error.inc +--source include/stop_slave_sql.inc --eval $rewritten ---source include/stop_slave.inc +--let $slave_io_errno= convert_error(ER_ACCESS_DENIED_ERROR) +--source include/wait_for_slave_io_error.inc +--source include/stop_slave_sql.inc TRUNCATE mysql.general_log; --replace_result $PLUGIN_AUTH_DIR PLUGIN_AUTH_DIR --eval START SLAVE IO_THREAD USER='root' PASSWORD='secret' DEFAULT_AUTH= 'auth_test_plugin' PLUGIN_DIR= '$PLUGIN_AUTH_DIR' --let $rewritten= `SELECT argument FROM mysql.general_log WHERE argument LIKE "%PASSWORD = ''%"` # execute it to see if the rewrite generated a (syntatically) valid command ---source include/stop_slave.inc +--let $slave_io_errno= convert_error(ER_ACCESS_DENIED_ERROR) +--source include/wait_for_slave_io_error.inc +--source include/stop_slave_sql.inc --replace_result $PLUGIN_AUTH_DIR PLUGIN_AUTH_DIR --eval $rewritten ---source include/stop_slave.inc +--let $slave_io_errno= convert_error(ER_ACCESS_DENIED_ERROR) +--source include/wait_for_slave_io_error.inc +--source include/stop_slave_sql.inc TRUNCATE mysql.general_log; --replace_result $PLUGIN_AUTH_DIR PLUGIN_AUTH_DIR --eval START SLAVE IO_THREAD, SQL_THREAD USER='root' PASSWORD='secret' DEFAULT_AUTH= 'auth_test_plugin' PLUGIN_DIR= '$PLUGIN_AUTH_DIR' --let $rewritten= `SELECT argument FROM mysql.general_log WHERE argument LIKE "%PASSWORD = ''%"` # execute it to see if the rewrite generated a (syntatically) valid command ---source include/stop_slave.inc +--let $slave_io_errno= convert_error(ER_ACCESS_DENIED_ERROR) +--source include/wait_for_slave_io_error.inc +--source include/stop_slave_sql.inc --replace_result $PLUGIN_AUTH_DIR PLUGIN_AUTH_DIR --eval $rewritten ---source include/stop_slave.inc +--let $slave_io_errno= convert_error(ER_ACCESS_DENIED_ERROR) +--source include/wait_for_slave_io_error.inc +--source include/stop_slave_sql.inc TRUNCATE mysql.general_log; --replace_result $PLUGIN_AUTH_DIR PLUGIN_AUTH_DIR --eval START SLAVE IO_THREAD, SQL_THREAD UNTIL MASTER_LOG_FILE='dummy-log.000001', MASTER_LOG_POS=116 USER='root' PASSWORD='secret' DEFAULT_AUTH= 'auth_test_plugin' PLUGIN_DIR= '$PLUGIN_AUTH_DIR' --let $rewritten= `SELECT argument FROM mysql.general_log WHERE argument LIKE "%PASSWORD = ''%"` # execute it to see if the rewrite generated a (syntatically) valid command ---source include/stop_slave.inc +--let $slave_io_errno= convert_error(ER_ACCESS_DENIED_ERROR) +--source include/wait_for_slave_io_error.inc +--source include/stop_slave_sql.inc --replace_result $PLUGIN_AUTH_DIR PLUGIN_AUTH_DIR --eval $rewritten ---source include/stop_slave.inc +--let $slave_io_errno= convert_error(ER_ACCESS_DENIED_ERROR) +--source include/wait_for_slave_io_error.inc +--source include/stop_slave_sql.inc TRUNCATE mysql.general_log; --replace_result $PLUGIN_AUTH_DIR PLUGIN_AUTH_DIR --eval START SLAVE IO_THREAD, SQL_THREAD UNTIL RELAY_LOG_FILE='dummy-log.000001', RELAY_LOG_POS=116 USER='root' PASSWORD='secret' DEFAULT_AUTH= 'auth_test_plugin' PLUGIN_DIR= '$PLUGIN_AUTH_DIR' --let $rewritten= `SELECT argument FROM mysql.general_log WHERE argument LIKE "%PASSWORD = ''%"` # execute it to see if the rewrite generated a (syntatically) valid command ---source include/stop_slave.inc +--let $slave_io_errno= convert_error(ER_ACCESS_DENIED_ERROR) +--source include/wait_for_slave_io_error.inc +--source include/stop_slave_sql.inc --replace_result $PLUGIN_AUTH_DIR PLUGIN_AUTH_DIR --eval $rewritten ---source include/stop_slave.inc +--let $slave_io_errno= convert_error(ER_ACCESS_DENIED_ERROR) +--source include/wait_for_slave_io_error.inc +--source include/stop_slave_sql.inc --enable_warnings diff --git a/mysql-test/suite/rpl/t/rpl_parallel_start_stop.test b/mysql-test/suite/rpl/t/rpl_parallel_start_stop.test index e04e91e7dc10..2de2a37fe313 100644 --- a/mysql-test/suite/rpl/t/rpl_parallel_start_stop.test +++ b/mysql-test/suite/rpl/t/rpl_parallel_start_stop.test @@ -43,6 +43,7 @@ let $count= 0; let $table= worker_proc_list; source include/wait_until_rows_count.inc; +--let $slave_sql_errno= convert_error(ER_MTS_INCONSISTENT_DATA) source include/wait_for_slave_sql_to_stop.inc; # @@ -109,6 +110,7 @@ let $count= 0; let $table= worker_proc_list; source include/wait_until_rows_count.inc; +--let $slave_sql_errno= convert_error(ER_DUP_ENTRY) source include/wait_for_slave_sql_to_stop.inc; delete from t1 where a=3; diff --git a/mysql-test/suite/rpl/t/rpl_rotate_row_trans.test b/mysql-test/suite/rpl/t/rpl_rotate_row_trans.test index fd240a8d6261..1c92891ff738 100644 --- a/mysql-test/suite/rpl/t/rpl_rotate_row_trans.test +++ b/mysql-test/suite/rpl/t/rpl_rotate_row_trans.test @@ -72,6 +72,7 @@ while ($restarts) } --echo # Stop the SQL thread (it should be in the middle of the transaction/group) +--let $slave_sql_errno= convert_error(ER_MTS_INCONSISTENT_DATA) --source include/stop_slave_sql.inc --echo # Remove the debug point and restart the both threads diff --git a/mysql-test/suite/rpl/t/rpl_row_corruption.test b/mysql-test/suite/rpl/t/rpl_row_corruption.test index e370e950f9c1..176903abccce 100644 --- a/mysql-test/suite/rpl/t/rpl_row_corruption.test +++ b/mysql-test/suite/rpl/t/rpl_row_corruption.test @@ -40,7 +40,7 @@ SET GLOBAL debug="+d,inject_tblmap_same_id_maps_diff_table"; # wait for error 1593 (ER_SLAVE_FATAL_ERROR) --let $slave_sql_errno=1593 --source include/wait_for_slave_sql_error.inc ---source include/stop_slave.inc +--source include/stop_slave_io.inc # clean up SET GLOBAL debug="-d,inject_tblmap_same_id_maps_diff_table"; diff --git a/mysql-test/suite/rpl/t/rpl_slave_grp_exec.test b/mysql-test/suite/rpl/t/rpl_slave_grp_exec.test index 042d57a94d15..af3cbb0b2300 100644 --- a/mysql-test/suite/rpl/t/rpl_slave_grp_exec.test +++ b/mysql-test/suite/rpl/t/rpl_slave_grp_exec.test @@ -66,7 +66,7 @@ call mtr.add_suppression("Slave SQL.*Table .test.t3. doesn.t exist.* Error_code: call mtr.add_suppression("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state"); # in MTS case error is either of two: -#--let $slave_sql_errno= 1146,1593 +--let $slave_sql_errno= 1146,1593 # whereas in the single-threaded case: # 1146 = ER_NO_SUCH_TABLE #--let $slave_sql_errno= 1146 diff --git a/mysql-test/suite/rpl/t/rpl_slave_status.test b/mysql-test/suite/rpl/t/rpl_slave_status.test index 4f7c3d6b7769..db3f192ee4cc 100644 --- a/mysql-test/suite/rpl/t/rpl_slave_status.test +++ b/mysql-test/suite/rpl/t/rpl_slave_status.test @@ -55,6 +55,7 @@ FLUSH PRIVILEGES; source include/stop_slave.inc; START SLAVE; source include/wait_for_slave_sql_to_start.inc; +--let $slave_io_errno= convert_error(ER_ACCESS_DENIED_ERROR) source include/wait_for_slave_io_to_stop.inc; --echo ==== Verify that Slave IO thread stopped with error ==== diff --git a/mysql-test/suite/rpl/t/rpl_sql_thread_error.test b/mysql-test/suite/rpl/t/rpl_sql_thread_error.test index 7f0845da4937..5e537538481f 100644 --- a/mysql-test/suite/rpl/t/rpl_sql_thread_error.test +++ b/mysql-test/suite/rpl/t/rpl_sql_thread_error.test @@ -37,6 +37,7 @@ START SLAVE SQL_THREAD; # Step 2) Wait for SQL thread to go down with the injected error. # Before fix, SQL thread would not have released # relay_log.log_lock. +--let $slave_sql_errno= convert_error(ER_SLAVE_RELAY_LOG_READ_FAILURE) --source include/wait_for_slave_sql_to_stop.inc # Step 3) Before fix, when SQL thread is trying to acquire diff --git a/mysql-test/suite/rpl/t/rpl_ssl1.test b/mysql-test/suite/rpl/t/rpl_ssl1.test index 006acc376f42..8de19292365a 100644 --- a/mysql-test/suite/rpl/t/rpl_ssl1.test +++ b/mysql-test/suite/rpl/t/rpl_ssl1.test @@ -20,17 +20,11 @@ change master to master_user='replssl',master_password=''; start slave; #showing that replication don't work -connection master; -insert into t1 values (1); -#reasonable timeout for changes to propagate to slave -let $wait_condition= SELECT COUNT(*) = 1 FROM t1; -source include/wait_condition.inc; -connection slave; -select * from t1; +--let $slave_io_errno= convert_error(ER_ACCESS_DENIED_ERROR) +--source include/wait_for_slave_io_error.inc +--source include/stop_slave_sql.inc #showing that replication could work with ssl params -stop slave; ---source include/wait_for_slave_to_stop.inc --replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR --replace_column 2 #### eval change master to master_ssl=1 , master_ssl_ca ='$MYSQL_TEST_DIR/std_data/cacert.pem', master_ssl_cert='$MYSQL_TEST_DIR/std_data/client-cert.pem', master_ssl_key='$MYSQL_TEST_DIR/std_data/client-key.pem'; @@ -39,6 +33,7 @@ start slave; #avoiding unneeded sleeps connection master; +insert into t1 values (1); --source include/sync_slave_sql_with_master.inc #checking that replication is ok From 3fb2f8db179c2ea9a15fcc2f142c5b98c5aab17a Mon Sep 17 00:00:00 2001 From: Joao Gramacho Date: Fri, 2 Feb 2018 11:45:56 +0000 Subject: [PATCH 0481/1221] BUG#24365972 BINLOG DECODING ISN'T RESILIENT TO CORRUPT BINLOG FILES Problem ======= When facing decoding of corrupt binary log files, server may misbehave without detecting the events corruption. This patch makes MySQL server more resilient to binary log decoding. Fixes for events de-serialization and apply =========================================== @sql/log_event.cc Query_log_event::Query_log_event: added a check to ensure query length is respecting event buffer limits. Query_log_event::do_apply_event: extended a debug print, added a check to character set to determine if it is "parseable" or not, verified if database name is valid for system collation. Start_log_event_v3::do_apply_event: report an error on applying a non-supported binary log version. Load_log_event::copy_log_event: added a check to table_name length. User_var_log_event::User_var_log_event: added checks to avoid reading out of buffer limits. User_var_log_event::do_apply_event: reported an sanity check error properly and added individual sanity checks for variable types that expect fixed (or minimum) amount of bytes to be read. Rows_log_event::Rows_log_event: added checks to avoid reading out of buffer limits. @sql/log_event_old.cc Old_rows_log_event::Old_rows_log_event: added a sanity check to avoid reading out of buffer limits. @sql/sql_priv.h Added a sanity check to available_buffer() function. --- sql/log_event.cc | 126 ++++++++++++++++++++++++++++++++++++++++--- sql/log_event_old.cc | 11 +++- sql/sql_priv.h | 7 ++- 3 files changed, 136 insertions(+), 8 deletions(-) diff --git a/sql/log_event.cc b/sql/log_event.cc index 5dbeb1eb4b93..ac1e105be8c2 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -3024,6 +3024,25 @@ Query_log_event::Query_log_event(const char* buf, uint event_len, db= (char *)start; query= (char *)(start + db_len + 1); q_len= data_len - db_len -1; + + if (data_len && (data_len < db_len || + data_len < q_len || + data_len != (db_len + q_len + 1))) + { + q_len= 0; + query= NULL; + DBUG_VOID_RETURN; + } + + unsigned int max_length; + max_length= (event_len - ((const char*)(end + db_len + 1) - + (buf - common_header_len))); + if (q_len != max_length) + { + q_len= 0; + query= NULL; + DBUG_VOID_RETURN; + } /** Append the db length at the end of the buffer. This will be used by Query_cache::send_result_to_client() in case the query cache is On. @@ -3278,6 +3297,26 @@ int Query_log_event::do_apply_event(Relay_log_info const *rli, you. */ thd->catalog= catalog_len ? (char *) catalog : (char *)""; + + size_t valid_len; + bool len_error; + bool is_invalid_db_name= validate_string(system_charset_info, db, db_len, + &valid_len, &len_error); + + DBUG_PRINT("debug",("is_invalid_db_name= %s, valid_len=%zu, len_error=%s", + is_invalid_db_name ? "true" : "false", + valid_len, + len_error ? "true" : "false")); + + if (is_invalid_db_name || len_error) + { + rli->report(ERROR_LEVEL, ER_SLAVE_FATAL_ERROR, + ER_THD(thd, ER_SLAVE_FATAL_ERROR), + "Invalid database name in Query event."); + thd->is_slave_error= true; + goto end; + } + new_db.length= db_len; new_db.str= (char *) rpl_filter->get_rewrite_db(db, &new_db.length); thd->set_db(new_db.str, new_db.length); /* allocates a copy of 'db' */ @@ -3454,7 +3493,23 @@ int Query_log_event::do_apply_event(Relay_log_info const *rli, } else thd->variables.collation_database= thd->db_charset; - + + { + const CHARSET_INFO *cs= thd->charset(); + /* + We cannot ask for parsing a statement using a character set + without state_maps (parser internal data). + */ + if (!cs->state_map) + { + rli->report(ERROR_LEVEL, ER_SLAVE_FATAL_ERROR, + ER_THD(thd, ER_SLAVE_FATAL_ERROR), + "character_set cannot be parsed"); + thd->is_slave_error= true; + goto end; + } + } + thd->table_map_for_update= (table_map)table_map_for_update; thd->set_invoker(&user, &host); /* @@ -3898,7 +3953,13 @@ int Start_log_event_v3::do_apply_event(Relay_log_info const *rli) */ break; default: - /* this case is impossible */ + /* + This case is not expected. It can be either an event corruption or an + unsupported binary log version. + */ + rli->report(ERROR_LEVEL, ER_SLAVE_FATAL_ERROR, + ER_THD(thd, ER_SLAVE_FATAL_ERROR), + "Binlog version not supported"); DBUG_RETURN(1); } DBUG_RETURN(error); @@ -4724,6 +4785,9 @@ int Load_log_event::copy_log_event(const char *buf, ulong event_len, fields = (char*)field_lens + num_fields; table_name = fields + field_block_len; + if (strlen(table_name) > NAME_LEN) + goto err; + db = table_name + table_name_len + 1; DBUG_EXECUTE_IF ("simulate_invalid_address", db_len = data_len;); @@ -5889,6 +5953,13 @@ User_var_log_event(const char* buf, uint event_len, buf+= description_event->common_header_len + description_event->post_header_len[USER_VAR_EVENT-1]; name_len= uint4korr(buf); + /* Avoid reading out of buffer */ + if ((buf - buf_start) + UV_NAME_LEN_SIZE + name_len > event_len) + { + error= true; + goto err; + } + name= (char *) buf + UV_NAME_LEN_SIZE; /* @@ -5948,8 +6019,11 @@ User_var_log_event(const char* buf, uint event_len, we keep the flags set to UNDEF_F. */ uint bytes_read= ((val + val_len) - start); - DBUG_ASSERT(bytes_read==data_written || - bytes_read==(data_written-1)); + if (bytes_read > event_len) + { + error= true; + goto err; + } if ((data_written - bytes_read) > 0) { flags= (uint) *(buf + UV_VAL_IS_NULL + UV_VAL_TYPE_SIZE + @@ -6165,7 +6239,12 @@ int User_var_log_event::do_apply_event(Relay_log_info const *rli) } if (!(charset= get_charset(charset_number, MYF(MY_WME)))) + { + rli->report(ERROR_LEVEL, ER_SLAVE_FATAL_ERROR, + ER_THD(thd, ER_SLAVE_FATAL_ERROR), + "Invalid character set for User var event"); return 1; + } LEX_STRING user_var_name; user_var_name.str= name; user_var_name.length= name_len; @@ -6186,12 +6265,26 @@ int User_var_log_event::do_apply_event(Relay_log_info const *rli) { switch (type) { case REAL_RESULT: + if (val_len != 8) + { + rli->report(ERROR_LEVEL, ER_SLAVE_FATAL_ERROR, + ER_THD(thd, ER_SLAVE_FATAL_ERROR), + "Invalid variable length at User var event"); + return 1; + } float8get(real_val, val); it= new Item_float(real_val, 0); val= (char*) &real_val; // Pointer to value in native format val_len= 8; break; case INT_RESULT: + if (val_len != 8) + { + rli->report(ERROR_LEVEL, ER_SLAVE_FATAL_ERROR, + ER_THD(thd, ER_SLAVE_FATAL_ERROR), + "Invalid variable length at User var event"); + return 1; + } int_val= (longlong) uint8korr(val); it= new Item_int(int_val); val= (char*) &int_val; // Pointer to value in native format @@ -6199,6 +6292,13 @@ int User_var_log_event::do_apply_event(Relay_log_info const *rli) break; case DECIMAL_RESULT: { + if (val_len < 3) + { + rli->report(ERROR_LEVEL, ER_SLAVE_FATAL_ERROR, + ER_THD(thd, ER_SLAVE_FATAL_ERROR), + "Invalid variable length at User var event"); + return 1; + } Item_decimal *dec= new Item_decimal((uchar*) val+2, val[0], val[1]); it= dec; val= (char *)dec->val_decimal(NULL); @@ -7646,6 +7746,15 @@ Rows_log_event::Rows_log_event(const char *buf, uint event_len, 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)); + /* Avoid reading out of buffer */ + if (static_cast((ptr_after_width + + (m_width + 7) / 8) - + (uchar*)buf) > event_len) + { + m_cols.bitmap= NULL; + DBUG_VOID_RETURN; + } + /* if bitmap_init fails, catched in is_valid() */ if (likely(!bitmap_init(&m_cols, m_width <= sizeof(m_bitbuf)*8 ? m_bitbuf : NULL, @@ -7694,7 +7803,12 @@ Rows_log_event::Rows_log_event(const char *buf, uint event_len, const uchar* const ptr_rows_data= (const uchar*) ptr_after_width; - size_t const data_size= event_len - (ptr_rows_data - (const uchar *) buf); + size_t const read_size= ptr_rows_data - (const unsigned char *) buf; + if (read_size > event_len) + { + DBUG_VOID_RETURN; + } + size_t const data_size= event_len - read_size; 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)); diff --git a/sql/log_event_old.cc b/sql/log_event_old.cc index eb9678ddaa53..6be4e086925a 100644 --- a/sql/log_event_old.cc +++ b/sql/log_event_old.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2007, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -1357,6 +1357,15 @@ Old_rows_log_event::Old_rows_log_event(const char *buf, uint event_len, 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)); + /* Avoid reading out of buffer */ + if (static_cast(m_width + + (ptr_after_width - + (const uchar *)buf)) > event_len) + { + m_cols.bitmap= NULL; + DBUG_VOID_RETURN; + } + /* if bitmap_init fails, catched in is_valid() */ if (likely(!bitmap_init(&m_cols, m_width <= sizeof(m_bitbuf)*8 ? m_bitbuf : NULL, diff --git a/sql/sql_priv.h b/sql/sql_priv.h index 523220b3c034..b12d22e3fc7a 100644 --- a/sql/sql_priv.h +++ b/sql/sql_priv.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -191,6 +191,11 @@ template T available_buffer(const char* buf_start, const char* buf_current, T buf_len) { + /* Sanity check */ + if (buf_current < buf_start || + buf_len < static_cast(buf_current - buf_start)) + return static_cast(0); + return buf_len - (buf_current - buf_start); } From 9edde789c552042336430d8c0a96e48e87ff1765 Mon Sep 17 00:00:00 2001 From: Laurynas Biveinis Date: Fri, 2 Feb 2018 16:23:22 +0200 Subject: [PATCH 0482/1221] Fix PS-3794 (MTR test main.percona_show_temp_tables_stress does not wait for events to start) Synchronize the event scheduler-spawned worker threads with the main connection thread by waiting for them to start up. At the same time wait at the end of the testcase for the event scheduler to finish stopping. --- mysql-test/t/percona_show_temp_tables_stress.test | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/mysql-test/t/percona_show_temp_tables_stress.test b/mysql-test/t/percona_show_temp_tables_stress.test index 7efaef51f30a..4d586297b616 100644 --- a/mysql-test/t/percona_show_temp_tables_stress.test +++ b/mysql-test/t/percona_show_temp_tables_stress.test @@ -27,6 +27,12 @@ DO delimiter ;| +--let $wait_condition= SELECT COUNT(*)= 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER='event_runner1' +--source include/wait_condition.inc + +--let $wait_condition= SELECT COUNT(*)= 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER='event_runner2' +--source include/wait_condition.inc + --let $i=400 --echo # Creating 400 temp tables with each of MyISAM, InnoDB, MEMORY --disable_query_log @@ -74,3 +80,5 @@ DROP EVENT query_tables; DROP USER event_runner1@localhost; DROP USER event_runner2@localhost; + +--source include/no_running_event_scheduler.inc From d93f75a1436bb1a85ca2e6521f3ea704c267b5bf Mon Sep 17 00:00:00 2001 From: Aliaksei Sandryhaila Date: Sun, 5 Nov 2017 21:30:54 -0800 Subject: [PATCH 0483/1221] Refactor mysql_value to bool conversion Upstream commit ID : fb-mysql-5.6.35/84db4c492657f639e2c758786305a0aa41a13aa5 MYR-198 : Merge prod201704 Summary: Refactor to remove duplicate code update-submodule: rocksdb Reviewed By: hermanlee Differential Revision: D6199766 fbshipit-source-id: a661b4d --- storage/rocksdb/ha_rocksdb.cc | 46 +++++++++++++---------------------- 1 file changed, 17 insertions(+), 29 deletions(-) diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index a8eb8045cc68..1e24e9bfc0d5 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -12108,10 +12108,7 @@ void rocksdb_set_collation_exception_list(THD *const thd, *static_cast(var_ptr) = val; } -int rocksdb_check_bulk_load(THD *const thd, struct st_mysql_sys_var *var - MY_ATTRIBUTE((__unused__)), - void *save, struct st_mysql_value *value) { - my_bool new_value; +int mysql_value_to_bool(struct st_mysql_value *value, my_bool *return_value) { int new_value_type = value->value_type(value); if (new_value_type == MYSQL_VALUE_TYPE_STRING) { char buf[16]; @@ -12119,10 +12116,10 @@ int rocksdb_check_bulk_load(THD *const thd, struct st_mysql_sys_var *var const char *str = value->val_str(value, buf, &len); if (str && (my_strcasecmp(system_charset_info, "true", str) == 0 || my_strcasecmp(system_charset_info, "on", str) == 0)) { - new_value = TRUE; + *return_value = TRUE; } else if (str && (my_strcasecmp(system_charset_info, "false", str) == 0 || my_strcasecmp(system_charset_info, "off", str) == 0)) { - new_value = FALSE; + *return_value = FALSE; } else { return 1; } @@ -12131,12 +12128,23 @@ int rocksdb_check_bulk_load(THD *const thd, struct st_mysql_sys_var *var value->val_int(value, &intbuf); if (intbuf > 1) return 1; - new_value = intbuf > 0 ? TRUE : FALSE; + *return_value = intbuf > 0 ? TRUE : FALSE; } else { return 1; } - Rdb_transaction *&tx = get_tx_from_thd(thd); + return 0; +} + +int rocksdb_check_bulk_load( + THD *const thd, struct st_mysql_sys_var *var MY_ATTRIBUTE((__unused__)), + void *save, struct st_mysql_value *value) { + my_bool new_value; + if (mysql_value_to_bool(value, &new_value) != 0) { + return 1; + } + + Rdb_transaction *&tx = get_tx_from_thd(thd); if (tx != nullptr) { const int rc = tx->finish_bulk_load(); if (rc != 0) { @@ -12157,27 +12165,7 @@ int rocksdb_check_bulk_load_allow_unsorted( THD *const thd, struct st_mysql_sys_var *var MY_ATTRIBUTE((__unused__)), void *save, struct st_mysql_value *value) { my_bool new_value; - int new_value_type = value->value_type(value); - if (new_value_type == MYSQL_VALUE_TYPE_STRING) { - char buf[16]; - int len = sizeof(buf); - const char *str = value->val_str(value, buf, &len); - if (str && (my_strcasecmp(system_charset_info, "true", str) == 0 || - my_strcasecmp(system_charset_info, "on", str) == 0)) { - new_value = TRUE; - } else if (str && (my_strcasecmp(system_charset_info, "false", str) == 0 || - my_strcasecmp(system_charset_info, "off", str) == 0)) { - new_value = FALSE; - } else { - return 1; - } - } else if (new_value_type == MYSQL_VALUE_TYPE_INT) { - long long intbuf; - value->val_int(value, &intbuf); - if (intbuf > 1) - return 1; - new_value = intbuf > 0 ? TRUE : FALSE; - } else { + if (mysql_value_to_bool(value, &new_value) != 0) { return 1; } From 5d3dfff3c03753d9956f3f0bc09da8a26a1f2221 Mon Sep 17 00:00:00 2001 From: Manuel Ung Date: Mon, 6 Nov 2017 21:21:56 -0800 Subject: [PATCH 0484/1221] Update rocksdb.insert_optimized_config to have correct config Upstream commit ID : fb-mysql-5.6.35/36eabfb1df30e7ac4e9e482c9df974e5db72cfd4 MYR-198 : Merge prod201704 Percona Server : - This commit advances the rocksdb submodule commit pointer. With this advancement, rocksdb now needs more of the files within the zlib library. Thus, the MyRocks CMakeLists.txt had to be adjusted to add an additional include path and to compile in two more source files. Summary: RocksDB does not support disabling WAL with sync writes, and this was recently enforced: https://github.com/facebook/rocksdb/commit/792ef10ca85e7525869838065cfe4d3a1558ee7f update-submodule: rocksdb Reviewed By: asandryh Differential Revision: D6260510 fbshipit-source-id: 2222ea0 --- mysql-test/suite/rocksdb/t/insert_optimized_config-master.opt | 1 + storage/rocksdb/CMakeLists.txt | 3 +++ storage/rocksdb/rocksdb | 2 +- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/mysql-test/suite/rocksdb/t/insert_optimized_config-master.opt b/mysql-test/suite/rocksdb/t/insert_optimized_config-master.opt index e6665b95034e..fadd8c2ee1fb 100644 --- a/mysql-test/suite/rocksdb/t/insert_optimized_config-master.opt +++ b/mysql-test/suite/rocksdb/t/insert_optimized_config-master.opt @@ -1,4 +1,5 @@ --loose-rocksdb_write_disable_wal=1 +--loose-rocksdb_flush_log_at_trx_commit=0 --loose-rocksdb_default_cf_options=write_buffer_size=16k;target_file_size_base=16k;level0_file_num_compaction_trigger=4;level0_slowdown_writes_trigger=256;level0_stop_writes_trigger=256;max_write_buffer_number=16;compression_per_level=kNoCompression;memtable=vector:1024 --loose-rocksdb_override_cf_options=__system__={memtable=skip_list:16} --loose-rocksdb_compaction_sequential_deletes=0 diff --git a/storage/rocksdb/CMakeLists.txt b/storage/rocksdb/CMakeLists.txt index 13f6068b33b8..2a0a612d9d89 100644 --- a/storage/rocksdb/CMakeLists.txt +++ b/storage/rocksdb/CMakeLists.txt @@ -133,6 +133,8 @@ SET(ROCKSDB_LIB_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/third_party/zstd/lib/compress/zstdmt_compress.c ${CMAKE_CURRENT_SOURCE_DIR}/third_party/zstd/lib/decompress/huf_decompress.c ${CMAKE_CURRENT_SOURCE_DIR}/third_party/zstd/lib/decompress/zstd_decompress.c + ${CMAKE_CURRENT_SOURCE_DIR}/third_party/zstd/lib/dictBuilder/divsufsort.c + ${CMAKE_CURRENT_SOURCE_DIR}/third_party/zstd/lib/dictBuilder/zdict.c ) INCLUDE_DIRECTORIES( @@ -143,6 +145,7 @@ INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_SOURCE_DIR}/third_party/lz4/lib ${CMAKE_CURRENT_SOURCE_DIR}/third_party/zstd/lib ${CMAKE_CURRENT_SOURCE_DIR}/third_party/zstd/lib/common + ${CMAKE_CURRENT_SOURCE_DIR}/third_party/zstd/lib/dictBuilder ) ADD_DEFINITIONS(-DROCKSDB_PLATFORM_POSIX -DROCKSDB_LIB_IO_POSIX -DZLIB -DLZ4 diff --git a/storage/rocksdb/rocksdb b/storage/rocksdb/rocksdb index 6a9335dbbb3e..e03377c7fd86 160000 --- a/storage/rocksdb/rocksdb +++ b/storage/rocksdb/rocksdb @@ -1 +1 @@ -Subproject commit 6a9335dbbb3ecc87fb1cb8701be39b3ec16beb20 +Subproject commit e03377c7fd86f117c6c64d35955140dab400eb3c From 47326c05100a0b8c9860648bf7ad773852e4657e Mon Sep 17 00:00:00 2001 From: Manuel Ung Date: Thu, 2 Nov 2017 11:00:18 -0700 Subject: [PATCH 0485/1221] Add lock wait/lock wait time Upstream commit ID : fb-mysql-5.6.35/2c3faa68e692ce95457d859ea77581d84ba3d84a MYR-198 : Merge prod201704 Summary: This adds lock waits and lock wait time to rocksdb perf context, and updating table stats to count lock waits. I've also updated our stats to include newly added counters in rocksdb. Reviewed By: asandryh Differential Revision: D6253785 fbshipit-source-id: 985bdf5 --- .../suite/rocksdb/r/i_s_perf_context.result | 32 +++++++++++++++++-- mysql-test/suite/rocksdb/r/show_engine.result | 12 +++---- storage/rocksdb/rdb_perf_context.cc | 31 +++++++++++++++++- storage/rocksdb/rdb_perf_context.h | 14 ++++++++ 4 files changed, 80 insertions(+), 9 deletions(-) diff --git a/mysql-test/suite/rocksdb/r/i_s_perf_context.result b/mysql-test/suite/rocksdb/r/i_s_perf_context.result index bb39c89a2c15..726257cdcd99 100644 --- a/mysql-test/suite/rocksdb/r/i_s_perf_context.result +++ b/mysql-test/suite/rocksdb/r/i_s_perf_context.result @@ -35,8 +35,13 @@ test t1 NULL BLOCK_READ_BYTE # test t1 NULL BLOCK_READ_TIME # test t1 NULL BLOCK_CHECKSUM_TIME # test t1 NULL BLOCK_DECOMPRESS_TIME # +test t1 NULL GET_READ_BYTES # +test t1 NULL MULTIGET_READ_BYTES # +test t1 NULL ITER_READ_BYTES # test t1 NULL INTERNAL_KEY_SKIPPED_COUNT # test t1 NULL INTERNAL_DELETE_SKIPPED_COUNT # +test t1 NULL INTERNAL_RECENT_SKIPPED_COUNT # +test t1 NULL INTERNAL_MERGE_COUNT # test t1 NULL GET_SNAPSHOT_TIME # test t1 NULL GET_FROM_MEMTABLE_TIME # test t1 NULL GET_FROM_MEMTABLE_COUNT # @@ -44,9 +49,12 @@ test t1 NULL GET_POST_PROCESS_TIME # test t1 NULL GET_FROM_OUTPUT_FILES_TIME # test t1 NULL SEEK_ON_MEMTABLE_TIME # test t1 NULL SEEK_ON_MEMTABLE_COUNT # +test t1 NULL NEXT_ON_MEMTABLE_COUNT # +test t1 NULL PREV_ON_MEMTABLE_COUNT # test t1 NULL SEEK_CHILD_SEEK_TIME # test t1 NULL SEEK_CHILD_SEEK_COUNT # -test t1 NULL SEEK_IN_HEAP_TIME # +test t1 NULL SEEK_MIN_HEAP_TIME # +test t1 NULL SEEK_MAX_HEAP_TIME # test t1 NULL SEEK_INTERNAL_SEEK_TIME # test t1 NULL FIND_NEXT_USER_ENTRY_TIME # test t1 NULL WRITE_WAL_TIME # @@ -62,6 +70,12 @@ test t1 NULL NEW_TABLE_BLOCK_ITER_NANOS # test t1 NULL NEW_TABLE_ITERATOR_NANOS # test t1 NULL BLOCK_SEEK_NANOS # test t1 NULL FIND_TABLE_NANOS # +test t1 NULL BLOOM_MEMTABLE_HIT_COUNT # +test t1 NULL BLOOM_MEMTABLE_MISS_COUNT # +test t1 NULL BLOOM_SST_HIT_COUNT # +test t1 NULL BLOOM_SST_MISS_COUNT # +test t1 NULL KEY_LOCK_WAIT_TIME # +test t1 NULL KEY_LOCK_WAIT_COUNT # test t1 NULL IO_THREAD_POOL_ID # test t1 NULL IO_BYTES_WRITTEN # test t1 NULL IO_BYTES_READ # @@ -80,8 +94,13 @@ BLOCK_READ_BYTE # BLOCK_READ_TIME # BLOCK_CHECKSUM_TIME # BLOCK_DECOMPRESS_TIME # +GET_READ_BYTES # +MULTIGET_READ_BYTES # +ITER_READ_BYTES # INTERNAL_KEY_SKIPPED_COUNT # INTERNAL_DELETE_SKIPPED_COUNT # +INTERNAL_RECENT_SKIPPED_COUNT # +INTERNAL_MERGE_COUNT # GET_SNAPSHOT_TIME # GET_FROM_MEMTABLE_TIME # GET_FROM_MEMTABLE_COUNT # @@ -89,9 +108,12 @@ GET_POST_PROCESS_TIME # GET_FROM_OUTPUT_FILES_TIME # SEEK_ON_MEMTABLE_TIME # SEEK_ON_MEMTABLE_COUNT # +NEXT_ON_MEMTABLE_COUNT # +PREV_ON_MEMTABLE_COUNT # SEEK_CHILD_SEEK_TIME # SEEK_CHILD_SEEK_COUNT # -SEEK_IN_HEAP_TIME # +SEEK_MIN_HEAP_TIME # +SEEK_MAX_HEAP_TIME # SEEK_INTERNAL_SEEK_TIME # FIND_NEXT_USER_ENTRY_TIME # WRITE_WAL_TIME # @@ -107,6 +129,12 @@ NEW_TABLE_BLOCK_ITER_NANOS # NEW_TABLE_ITERATOR_NANOS # BLOCK_SEEK_NANOS # FIND_TABLE_NANOS # +BLOOM_MEMTABLE_HIT_COUNT # +BLOOM_MEMTABLE_MISS_COUNT # +BLOOM_SST_HIT_COUNT # +BLOOM_SST_MISS_COUNT # +KEY_LOCK_WAIT_TIME # +KEY_LOCK_WAIT_COUNT # IO_THREAD_POOL_ID # IO_BYTES_WRITTEN # IO_BYTES_READ # diff --git a/mysql-test/suite/rocksdb/r/show_engine.result b/mysql-test/suite/rocksdb/r/show_engine.result index d83f7ecd87d0..e8629b35112f 100644 --- a/mysql-test/suite/rocksdb/r/show_engine.result +++ b/mysql-test/suite/rocksdb/r/show_engine.result @@ -87,12 +87,12 @@ FROM INFORMATION_SCHEMA.ROCKSDB_PERF_CONTEXT WHERE TABLE_SCHEMA = 'test' GROUP BY TABLE_NAME, PARTITION_NAME; TABLE_SCHEMA TABLE_NAME PARTITION_NAME COUNT(STAT_TYPE) -test t1 NULL 43 -test t2 NULL 43 -test t4 p0 43 -test t4 p1 43 -test t4 p2 43 -test t4 p3 43 +test t1 NULL 57 +test t2 NULL 57 +test t4 p0 57 +test t4 p1 57 +test t4 p2 57 +test t4 p3 57 SELECT * FROM INFORMATION_SCHEMA.ROCKSDB_CF_OPTIONS; CF_NAME OPTION_TYPE VALUE __system__ COMPARATOR # diff --git a/storage/rocksdb/rdb_perf_context.cc b/storage/rocksdb/rdb_perf_context.cc index efb937ab6582..4c474ed30ad2 100644 --- a/storage/rocksdb/rdb_perf_context.cc +++ b/storage/rocksdb/rdb_perf_context.cc @@ -44,8 +44,13 @@ std::string rdb_pc_stat_types[] = { "BLOCK_READ_TIME", "BLOCK_CHECKSUM_TIME", "BLOCK_DECOMPRESS_TIME", + "GET_READ_BYTES", + "MULTIGET_READ_BYTES", + "ITER_READ_BYTES", "INTERNAL_KEY_SKIPPED_COUNT", "INTERNAL_DELETE_SKIPPED_COUNT", + "INTERNAL_RECENT_SKIPPED_COUNT", + "INTERNAL_MERGE_COUNT", "GET_SNAPSHOT_TIME", "GET_FROM_MEMTABLE_TIME", "GET_FROM_MEMTABLE_COUNT", @@ -53,9 +58,12 @@ std::string rdb_pc_stat_types[] = { "GET_FROM_OUTPUT_FILES_TIME", "SEEK_ON_MEMTABLE_TIME", "SEEK_ON_MEMTABLE_COUNT", + "NEXT_ON_MEMTABLE_COUNT", + "PREV_ON_MEMTABLE_COUNT", "SEEK_CHILD_SEEK_TIME", "SEEK_CHILD_SEEK_COUNT", - "SEEK_IN_HEAP_TIME", + "SEEK_MIN_HEAP_TIME", + "SEEK_MAX_HEAP_TIME", "SEEK_INTERNAL_SEEK_TIME", "FIND_NEXT_USER_ENTRY_TIME", "WRITE_WAL_TIME", @@ -71,6 +79,12 @@ std::string rdb_pc_stat_types[] = { "NEW_TABLE_ITERATOR_NANOS", "BLOCK_SEEK_NANOS", "FIND_TABLE_NANOS", + "BLOOM_MEMTABLE_HIT_COUNT", + "BLOOM_MEMTABLE_MISS_COUNT", + "BLOOM_SST_HIT_COUNT", + "BLOOM_SST_MISS_COUNT", + "KEY_LOCK_WAIT_TIME", + "KEY_LOCK_WAIT_COUNT", "IO_THREAD_POOL_ID", "IO_BYTES_WRITTEN", "IO_BYTES_READ", @@ -104,8 +118,13 @@ static void harvest_diffs(Rdb_atomic_perf_counters *const counters) { IO_PERF_RECORD(block_read_time); IO_PERF_RECORD(block_checksum_time); IO_PERF_RECORD(block_decompress_time); + IO_PERF_RECORD(get_read_bytes); + IO_PERF_RECORD(multiget_read_bytes); + IO_PERF_RECORD(iter_read_bytes); IO_PERF_RECORD(internal_key_skipped_count); IO_PERF_RECORD(internal_delete_skipped_count); + IO_PERF_RECORD(internal_recent_skipped_count); + IO_PERF_RECORD(internal_merge_count); IO_PERF_RECORD(get_snapshot_time); IO_PERF_RECORD(get_from_memtable_time); IO_PERF_RECORD(get_from_memtable_count); @@ -113,9 +132,12 @@ static void harvest_diffs(Rdb_atomic_perf_counters *const counters) { IO_PERF_RECORD(get_from_output_files_time); IO_PERF_RECORD(seek_on_memtable_time); IO_PERF_RECORD(seek_on_memtable_count); + IO_PERF_RECORD(next_on_memtable_count); + IO_PERF_RECORD(prev_on_memtable_count); IO_PERF_RECORD(seek_child_seek_time); IO_PERF_RECORD(seek_child_seek_count); IO_PERF_RECORD(seek_min_heap_time); + IO_PERF_RECORD(seek_max_heap_time); IO_PERF_RECORD(seek_internal_seek_time); IO_PERF_RECORD(find_next_user_entry_time); IO_PERF_RECORD(write_wal_time); @@ -131,6 +153,13 @@ static void harvest_diffs(Rdb_atomic_perf_counters *const counters) { IO_PERF_RECORD(new_table_iterator_nanos); IO_PERF_RECORD(block_seek_nanos); IO_PERF_RECORD(find_table_nanos); + IO_PERF_RECORD(bloom_memtable_hit_count); + IO_PERF_RECORD(bloom_memtable_miss_count); + IO_PERF_RECORD(bloom_sst_hit_count); + IO_PERF_RECORD(bloom_sst_miss_count); + IO_PERF_RECORD(key_lock_wait_time); + IO_PERF_RECORD(key_lock_wait_count); + IO_STAT_RECORD(thread_pool_id); IO_STAT_RECORD(bytes_written); IO_STAT_RECORD(bytes_read); diff --git a/storage/rocksdb/rdb_perf_context.h b/storage/rocksdb/rdb_perf_context.h index c939795ed5b0..40d83c794ea5 100644 --- a/storage/rocksdb/rdb_perf_context.h +++ b/storage/rocksdb/rdb_perf_context.h @@ -36,8 +36,13 @@ enum { PC_BLOCK_READ_TIME, PC_BLOCK_CHECKSUM_TIME, PC_BLOCK_DECOMPRESS_TIME, + PC_GET_READ_BYTES, + PC_MULTIGET_READ_BYTES, + PC_ITER_READ_BYTES, PC_KEY_SKIPPED, PC_DELETE_SKIPPED, + PC_RECENT_SKIPPED, + PC_MERGE, PC_GET_SNAPSHOT_TIME, PC_GET_FROM_MEMTABLE_TIME, PC_GET_FROM_MEMTABLE_COUNT, @@ -45,9 +50,12 @@ enum { PC_GET_FROM_OUTPUT_FILES_TIME, PC_SEEK_ON_MEMTABLE_TIME, PC_SEEK_ON_MEMTABLE_COUNT, + PC_NEXT_ON_MEMTABLE_COUNT, + PC_PREV_ON_MEMTABLE_COUNT, PC_SEEK_CHILD_SEEK_TIME, PC_SEEK_CHILD_SEEK_COUNT, PC_SEEK_MIN_HEAP_TIME, + PC_SEEK_MAX_HEAP_TIME, PC_SEEK_INTERNAL_SEEK_TIME, PC_FIND_NEXT_USER_ENTRY_TIME, PC_WRITE_WAL_TIME, @@ -63,6 +71,12 @@ enum { PC_NEW_TABLE_ITERATOR_NANOS, PC_BLOCK_SEEK_NANOS, PC_FIND_TABLE_NANOS, + PC_BLOOM_MEMTABLE_HIT_COUNT, + PC_BLOOM_MEMTABLE_MISS_COUNT, + PC_BLOOM_SST_HIT_COUNT, + PC_BLOOM_SST_MISS_COUNT, + PC_KEY_LOCK_WAIT_TIME, + PC_KEY_LOCK_WAIT_COUNT, PC_IO_THREAD_POOL_ID, PC_IO_BYTES_WRITTEN, PC_IO_BYTES_READ, From 0533b4b4d8838df208318c60e8c506f601959486 Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Thu, 1 Feb 2018 16:56:28 +0100 Subject: [PATCH 0486/1221] Bug#27470071 ERROR C1083: CANNOT OPEN INCLUDE FILE: 'LEX_TOKEN.H' This is a bacport to 5.6 of four bugfixes in 5.7 Bug#20678411 BROKEN MAKEFILE DEPENDENCY: SQL_YACC.YY AND LEX_TOKEN.H Add explicit dependency sql_yacc.cc.o => lex_token.h Bug#19060850: SQL_YACC.CC REGENERATED TWICE IN WINDOWS BUILD, CAN LEAD TO BUILD BREAK Run Bison separately for libmysqld so that independent copies of sql_yacc.h/sql_yacc.cc are generated. This avoids the Windows build break because of libmysqld compilation of sql_yacc.cc while it is being generated. Bug#21680733 WINDOWS (10) BUILD MAY COMPILE SQL_YACC.CC BEFORE LEX_TOKEN.H HAS BEEN GENERATED Problem: build may fail non-deterministically when when building in parallel. Solution: build local copy lex_token.h, and add explicit dependency for it. Bug#24931655 RACE CONDITION BUILDING LEX_HASH.H Mysql cluster is experiencing race conditions generating lex_hash.h Fix: Generate lex_hash.h locally for the embedded server, rather than picking it up from the sql/ build directory. --- cmake/bison.cmake | 35 ++++++++++---------- libmysqld/CMakeLists.txt | 69 ++++++++++++++++++++++++++++++++++------ sql/CMakeLists.txt | 49 ++++++++++++++-------------- 3 files changed, 104 insertions(+), 49 deletions(-) diff --git a/cmake/bison.cmake b/cmake/bison.cmake index d5c725fbbdea..d716ef4c713a 100644 --- a/cmake/bison.cmake +++ b/cmake/bison.cmake @@ -1,5 +1,4 @@ -# Copyright (c) 2009 Sun Microsystems, Inc. -# Use is subject to license terms. +# Copyright (c) 2009, 2018, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -12,18 +11,13 @@ # # 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 +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -IF(CMAKE_SYSTEM_NAME MATCHES "SunOS") - # On Solaris, /opt/csw often contains a newer bison - IF(NOT BISON_EXECUTABLE AND EXISTS /opt/csw/bin/bison) - SET(BISON_EXECUTABLE /opt/csw/bin/bison) - ENDIF() -ENDIF() FIND_PROGRAM(BISON_EXECUTABLE bison DOC "path to the bison executable") MARK_AS_ADVANCED(BISON_EXECUTABLE "") + IF(NOT BISON_EXECUTABLE) - MESSAGE("Warning: Bison executable not found in PATH") + MESSAGE(WARNING "Bison executable not found in PATH") ELSEIF(BISON_EXECUTABLE AND NOT BISON_USABLE) # Check version as well EXEC_PROGRAM(${BISON_EXECUTABLE} ARGS --version OUTPUT_VARIABLE BISON_VERSION_STR) @@ -33,19 +27,26 @@ ELSEIF(BISON_EXECUTABLE AND NOT BISON_USABLE) STRING(REGEX REPLACE ".* ([0-9]+)\\.([0-9]+)" "\\1" BISON_VERSION_MAJOR "${FIRST_LINE}") STRING(REGEX REPLACE ".* ([0-9]+)\\.([0-9]+)" "\\2" BISON_VERSION_MINOR "${FIRST_LINE}") IF (BISON_VERSION_MAJOR LESS 2) - MESSAGE("Warning: bison version is old. please update to version 2") + MESSAGE(WARNING "Bison version is old. please update to version 2") ELSE() SET(BISON_USABLE 1 CACHE INTERNAL "Bison version 2 or higher") ENDIF() ENDIF() + +# Handle out-of-source build from source package with possibly broken +# bison. Copy bison output to from source to build directory, if not already +# there +MACRO(COPY_BISON_OUTPUT input_cc input_h output_cc output_h) + IF(EXISTS ${input_cc} AND NOT EXISTS ${output_cc}) + CONFIGURE_FILE(${input_cc} ${output_cc} COPYONLY) + CONFIGURE_FILE(${input_h} ${output_h} COPYONLY) + ENDIF() +ENDMACRO() + + # Use bison to generate C++ and header file MACRO (RUN_BISON input_yy output_cc output_h) - IF(BISON_TOO_OLD) - IF(EXISTS ${output_cc} AND EXISTS ${output_h}) - SET(BISON_USABLE FALSE) - ENDIF() - ENDIF() IF(BISON_USABLE) ADD_CUSTOM_COMMAND( OUTPUT ${output_cc} @@ -61,7 +62,7 @@ MACRO (RUN_BISON input_yy output_cc output_h) IF(EXISTS ${output_cc} AND EXISTS ${output_h}) IF(${input_yy} IS_NEWER_THAN ${output_cc} OR ${input_yy} IS_NEWER_THAN ${output_h}) # Possibly timestamps are messed up in source distribution. - MESSAGE("Warning: no usable bison found, ${input_yy} will not be rebuilt.") + MESSAGE(WARNING "No usable bison found, ${input_yy} will not be rebuilt.") ENDIF() ELSE() # Output files are missing, bail out. diff --git a/libmysqld/CMakeLists.txt b/libmysqld/CMakeLists.txt index a9244d9f3437..d7431e691167 100644 --- a/libmysqld/CMakeLists.txt +++ b/libmysqld/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2006, 2014, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 2018, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -29,14 +29,26 @@ INCLUDE_DIRECTORIES( ${CMAKE_SOURCE_DIR}/sql/backup ) +# We should generate these separately for libmysqld to avoid +# compiling them for libmysqld while they are generated for sql. +SET(GEN_YACC_SOURCES + ${CMAKE_CURRENT_BINARY_DIR}/sql_yacc.h + ${CMAKE_CURRENT_BINARY_DIR}/sql_yacc.cc +) + SET(GEN_SOURCES - ${CMAKE_BINARY_DIR}/sql/sql_yacc.h - ${CMAKE_BINARY_DIR}/sql/sql_yacc.cc ${CMAKE_BINARY_DIR}/sql/sql_builtin.cc - ${CMAKE_BINARY_DIR}/sql/lex_hash.h ) -SET_SOURCE_FILES_PROPERTIES(${GEN_SOURCES} PROPERTIES GENERATED TRUE) +ADD_CUSTOM_COMMAND( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/lex_hash.h + COMMAND gen_lex_hash > lex_hash.h + DEPENDS gen_lex_hash +) + +SET_SOURCE_FILES_PROPERTIES(${GEN_YACC_SOURCES} + ${GEN_SOURCES} + PROPERTIES GENERATED TRUE) FOREACH(file ${SQL_EXPORTED_SOURCES}) LIST(APPEND IMPORTED_SOURCES "../sql/${file}") @@ -48,6 +60,7 @@ SET(SQL_EMBEDDED_SOURCES libmysqld.c ${GEN_SOURCES} ${MYSYS_LIBWRAP_SOURCE} + ${GEN_YACC_SOURCES} ../client/get_password.c ../libmysql/errmsg.c ../libmysql/libmysql.c @@ -79,9 +92,45 @@ SET(SQL_EMBEDDED_SOURCES ) + +# Handle out-of-source build from source package with possibly broken +# bison. Copy bison output to from source to build directory, if not already +# there +INCLUDE(${CMAKE_SOURCE_DIR}/cmake/bison.cmake) +COPY_BISON_OUTPUT( + ${CMAKE_SOURCE_DIR}/sql/sql_yacc.cc + ${CMAKE_SOURCE_DIR}/sql/sql_yacc.h + ${CMAKE_CURRENT_BINARY_DIR}/sql_yacc.cc + ${CMAKE_CURRENT_BINARY_DIR}/sql_yacc.h +) + +RUN_BISON( + ${CMAKE_SOURCE_DIR}/sql/sql_yacc.yy + ${CMAKE_CURRENT_BINARY_DIR}/sql_yacc.cc + ${CMAKE_CURRENT_BINARY_DIR}/sql_yacc.h +) + +ADD_CUSTOM_COMMAND( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/lex_token.h + COMMAND gen_lex_token > lex_token.h + DEPENDS gen_lex_token +) + +SET_SOURCE_FILES_PROPERTIES( + ${CMAKE_CURRENT_BINARY_DIR}/sql/lex_token.h + PROPERTIES GENERATED 1) + +SET_SOURCE_FILES_PROPERTIES( + ${CMAKE_CURRENT_BINARY_DIR}/sql_yacc.cc + ${CMAKE_SOURCE_DIR}/sql/sql_digest.cc + PROPERTIES OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/lex_token.h +) + +ADD_CUSTOM_TARGET(GenYaccEmbeddedSource DEPENDS ${GEN_YACC_SOURCES}) + ADD_CONVENIENCE_LIBRARY(sql_embedded ${SQL_EMBEDDED_SOURCES}) DTRACE_INSTRUMENT(sql_embedded) -ADD_DEPENDENCIES(sql_embedded GenError GenServerSource) +ADD_DEPENDENCIES(sql_embedded GenError GenServerSource GenYaccEmbeddedSource) # On Windows, static embedded server library is called mysqlserver.lib # On Unix, it is libmysqld.a @@ -93,8 +142,8 @@ ENDIF() SET(LIBS - dbug strings regex mysys mysys_ssl vio - ${ZLIB_LIBRARY} ${SSL_LIBRARIES} + dbug strings regex mysys mysys_ssl vio + ${ZLIB_LIBRARY} ${SSL_LIBRARIES} ${LIBWRAP} ${LIBCRYPT} ${LIBDL} ${MYSQLD_STATIC_PLUGIN_LIBS} sql_embedded @@ -112,6 +161,8 @@ FOREACH(LIB ${LIBS}) ENDIF() ENDFOREACH() +LIST(REMOVE_DUPLICATES EMBEDDED_LIBS) + MERGE_LIBRARIES(mysqlserver STATIC ${EMBEDDED_LIBS} OUTPUT_NAME ${MYSQLSERVER_OUTPUT_NAME} COMPONENT Embedded) @@ -145,7 +196,7 @@ IF(WITH_EMBEDDED_SHARED_LIBRARY) ) GET_TARGET_PROPERTY(libmysqld_link_flags libmysqld LINK_FLAGS) - IF(NOT libmysqld_link_flag) + IF(NOT libmysqld_link_flags) SET(libmysqld_link_flags) ENDIF() SET(libmysqld_link_flags diff --git a/sql/CMakeLists.txt b/sql/CMakeLists.txt index cad699c7ef2e..96261358e515 100644 --- a/sql/CMakeLists.txt +++ b/sql/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2006, 2017, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 2018, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -13,6 +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 + INCLUDE_DIRECTORIES( ${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/sql @@ -35,8 +36,8 @@ SET(GEN_DIGEST_SOURCES ) SET_SOURCE_FILES_PROPERTIES(${GEN_SOURCES} - ${CONF_SOURCES} ${GEN_DIGEST_SOURCES} + ${CONF_SOURCES} PROPERTIES GENERATED 1) # Gen_lex_token @@ -193,8 +194,8 @@ SET(SQL_EXPORTED_SOURCES ${SQL_SHARED_SOURCES} PARENT_SCOPE) SET(SQL_SOURCE ${GEN_SOURCES} - ${CONF_SOURCES} ${GEN_DIGEST_SOURCES} + ${CONF_SOURCES} ${MYSYS_LIBWRAP_SOURCE} ${SQL_SHARED_SOURCES} ../libmysql/errmsg.c @@ -277,7 +278,8 @@ ELSE() SET(MYSQLD_SOURCE main.cc ${DTRACE_PROBES_ALL}) ENDIF() -MYSQL_ADD_EXECUTABLE(mysqld ${MYSQLD_SOURCE} DESTINATION ${INSTALL_SBINDIR} COMPONENT Server) +MYSQL_ADD_EXECUTABLE(mysqld + ${MYSQLD_SOURCE} DESTINATION ${INSTALL_SBINDIR} COMPONENT Server) OPTION(DEBUG_EXTNAME "Build server as mysqld-debug (debug builds only)" OFF) MARK_AS_ADVANCED(DEBUG_EXTNAME) @@ -304,9 +306,11 @@ IF(NOT WITHOUT_DYNAMIC_PLUGINS) SET_TARGET_PROPERTIES(mysqld PROPERTIES LINK_FLAGS "${mysqld_link_flags} -Wl,--export-all-symbols") ENDIF() IF(MSVC) - # Set module definition file. Also use non-incremental linker, - # incremental appears to crash from time to time,if used with /DEF option - SET_TARGET_PROPERTIES(mysqld PROPERTIES LINK_FLAGS "${mysqld_link_flags} /DEF:mysqld.def /INCREMENTAL:NO") + # Set module definition file. + # Also use non-incremental linker, incremental appears to crash from + # time to time,if used with /DEF option + SET_TARGET_PROPERTIES(mysqld PROPERTIES LINK_FLAGS + "${mysqld_link_flags} /DEF:mysqld.def /INCREMENTAL:NO") FOREACH (CORELIB sql mysys mysys_ssl dbug strings) GET_TARGET_PROPERTY(LOC ${CORELIB} LOCATION) @@ -367,25 +371,26 @@ ENDIF() # Handle out-of-source build from source package with possibly broken # bison. Copy bison output to from source to build directory, if not already # there -IF (NOT ${CMAKE_CURRENT_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_BINARY_DIR}) - IF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/sql_yacc.cc) - IF(NOT EXISTS ${CMAKE_CURRENT_BINARY_DIR}/sql_yacc.cc) - CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/sql_yacc.cc - ${CMAKE_CURRENT_BINARY_DIR}/sql_yacc.cc COPYONLY) - CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/sql_yacc.h - ${CMAKE_CURRENT_BINARY_DIR}/sql_yacc.h COPYONLY) - ENDIF() - ENDIF() -ENDIF() - - INCLUDE(${CMAKE_SOURCE_DIR}/cmake/bison.cmake) +COPY_BISON_OUTPUT( + ${CMAKE_CURRENT_SOURCE_DIR}/sql_yacc.cc + ${CMAKE_CURRENT_SOURCE_DIR}/sql_yacc.h + ${CMAKE_CURRENT_BINARY_DIR}/sql_yacc.cc + ${CMAKE_CURRENT_BINARY_DIR}/sql_yacc.h +) + RUN_BISON( ${CMAKE_CURRENT_SOURCE_DIR}/sql_yacc.yy ${CMAKE_CURRENT_BINARY_DIR}/sql_yacc.cc ${CMAKE_CURRENT_BINARY_DIR}/sql_yacc.h ) +SET_SOURCE_FILES_PROPERTIES( + ${CMAKE_CURRENT_BINARY_DIR}/sql_yacc.cc + ${CMAKE_CURRENT_SOURCE_DIR}/sql_digest.cc + PROPERTIES OBJECT_DEPENDS ${GEN_DIGEST_SOURCES} +) + # Gen_lex_hash ADD_EXECUTABLE(gen_lex_hash gen_lex_hash.cc) @@ -409,8 +414,6 @@ ADD_CUSTOM_TARGET( DEPENDS ${GEN_DIGEST_SOURCES} ) -#Need this only for embedded -SET_TARGET_PROPERTIES(GenServerSource PROPERTIES EXCLUDE_FROM_ALL TRUE) IF(WIN32 OR HAVE_DLOPEN AND NOT DISABLE_SHARED) ADD_LIBRARY(udf_example MODULE udf_example.cc) @@ -418,7 +421,8 @@ IF(WIN32 OR HAVE_DLOPEN AND NOT DISABLE_SHARED) # udf_example depends on strings IF(WIN32) IF(MSVC) - SET_TARGET_PROPERTIES(udf_example PROPERTIES LINK_FLAGS "/DEF:${CMAKE_CURRENT_SOURCE_DIR}/udf_example.def") + SET_TARGET_PROPERTIES(udf_example + PROPERTIES LINK_FLAGS "/DEF:${CMAKE_CURRENT_SOURCE_DIR}/udf_example.def") ENDIF() TARGET_LINK_LIBRARIES(udf_example strings) ELSE() @@ -502,4 +506,3 @@ ENDIF() ADD_CUSTOM_TARGET(show-dist-name COMMAND ${CMAKE_COMMAND} -E echo "${CPACK_PACKAGE_FILE_NAME}" ) - From 63f4311351bf76503b14d1e8492ca1079254304c Mon Sep 17 00:00:00 2001 From: Laurynas Biveinis Date: Mon, 5 Feb 2018 18:15:14 +0200 Subject: [PATCH 0487/1221] Fix PS-3798 (MTR test innodb.percona_extended_innodb_status fails if InnoDB status contains unquoted special characters) The testcase performed --let $status = query_get_value(SHOW ENGINE INNODB STATUS, Status, 1) eval INSERT INTO t VALUES("$status"); which does not perform any SQL quoting on $status, breaking the INSERT statement in case it contains quote characters. Fix by redirecting status output to a temporary file and searching for a pattern there instead. --- .../r/percona_extended_innodb_status.result | 5 ++--- .../t/percona_extended_innodb_status.test | 18 ++++++++---------- 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/mysql-test/suite/innodb/r/percona_extended_innodb_status.result b/mysql-test/suite/innodb/r/percona_extended_innodb_status.result index d055e9b9a669..2ad52fa4b04a 100644 --- a/mysql-test/suite/innodb/r/percona_extended_innodb_status.result +++ b/mysql-test/suite/innodb/r/percona_extended_innodb_status.result @@ -78,6 +78,5 @@ DROP TABLE innodb_lock_monitor, t; # # Bug 1586262: "Buffer pool size, bytes" always 0 in InnoDB status # -CREATE TEMPORARY TABLE t(a TEXT); -include/assert.inc [Buffer pool size must be reported as 32M] -DROP TEMPORARY TABLE t; +mysql -e "SHOW ENGINE INNODB STATUS" +Grepping InnoDB status for Buffer pool size, bytes 33538048 diff --git a/mysql-test/suite/innodb/t/percona_extended_innodb_status.test b/mysql-test/suite/innodb/t/percona_extended_innodb_status.test index 7c962136b4fe..c1f2fb4a81ef 100644 --- a/mysql-test/suite/innodb/t/percona_extended_innodb_status.test +++ b/mysql-test/suite/innodb/t/percona_extended_innodb_status.test @@ -54,16 +54,14 @@ DROP TABLE innodb_lock_monitor, t; --echo # Bug 1586262: "Buffer pool size, bytes" always 0 in InnoDB status --echo # -CREATE TEMPORARY TABLE t(a TEXT); +--let innodb_status= $MYSQL_TMP_DIR/innodb.status ---let $status = query_get_value(SHOW ENGINE INNODB STATUS, Status, 1) +--echo mysql -e "SHOW ENGINE INNODB STATUS" +--exec $MYSQL -e "SHOW ENGINE INNODB STATUS" > $innodb_status; ---disable_query_log -eval INSERT INTO t VALUES("$status"); ---enable_query_log +--let SEARCH_FILE=$innodb_status +--let SEARCH_PATTERN=Buffer pool size, bytes 33538048 +--echo Grepping InnoDB status for $SEARCH_PATTERN +--source include/search_pattern_in_file.inc ---let $assert_text= Buffer pool size must be reported as 32M ---let $assert_cond= COUNT(*) = 1 FROM t WHERE a LIKE "%Buffer pool size, bytes 33538048%" ---source include/assert.inc - -DROP TEMPORARY TABLE t; +--remove_file $innodb_status From 6330c67308877476e8c76c5024e33fd3de6035ad Mon Sep 17 00:00:00 2001 From: Herman Lee Date: Tue, 7 Nov 2017 16:00:06 -0800 Subject: [PATCH 0488/1221] Fix test flakiness in singledelete_idempotent_recovery by enforcing master_pos_wait() Upstream commit ID : fb-mysql-5.6.35/74a541627878fb114ec11fc0d7c3aefdbc9b95bd MYR-198 : Merge prod201704 This is a NULL cherry-pick to Percona Server 5.7 to create the commit placeholder for the corresponding upstream commit. Reason: Patch not taken into Percona Server. Is a Facebook MySQL specific feature alteration. From c72bae29517f7558e86465fe9e41e3a31f45f765 Mon Sep 17 00:00:00 2001 From: Sergei Petrunia Date: Wed, 8 Nov 2017 15:56:21 -0800 Subject: [PATCH 0489/1221] Issue #748: A few tests in rocksdb suite fail with --ps-protocol Upstream commit ID : fb-mysql-5.6.35/98cc53d3001c163e6601fbd43386d95891b32497 MYR-198 : Merge prod201704 Summary: They fail because --ps-protocol uses different data format on the wire. Work around that by doing a dummy CONCAT operation which forces the data to be transfered in text form (like it is done without --ps-protocol) Closes https://github.com/facebook/mysql-5.6/pull/749 Differential Revision: D6188441 fbshipit-source-id: 17ba17b --- .../suite/rocksdb/include/type_float.inc | 13 +++++++- .../suite/rocksdb/r/col_opt_not_null.result | 32 ++++++++++++------- .../suite/rocksdb/r/col_opt_null.result | 32 ++++++++++++------- .../suite/rocksdb/r/col_opt_unsigned.result | 32 ++++++++++++------- .../suite/rocksdb/r/col_opt_zerofill.result | 32 ++++++++++++------- mysql-test/suite/rocksdb/r/type_float.result | 32 ++++++++++++------- 6 files changed, 117 insertions(+), 56 deletions(-) diff --git a/mysql-test/suite/rocksdb/include/type_float.inc b/mysql-test/suite/rocksdb/include/type_float.inc index 06136c67f83b..74a60dee8fda 100644 --- a/mysql-test/suite/rocksdb/include/type_float.inc +++ b/mysql-test/suite/rocksdb/include/type_float.inc @@ -132,7 +132,18 @@ if ($extra_col_opts_dml_err == 1) --query_vertical SELECT f,f0,r1_1,f23_0,f20_3,d,d1_0,d10_10,d53,d53_10 FROM t1 --sorted_result ---query_vertical SELECT MAX(f), MAX(f0), MAX(r1_1), MAX(f23_0), MAX(f20_3), MAX(d), MAX(d1_0), MAX(d10_10), MAX(d53), MAX(d53_10) FROM t1 +query_vertical +SELECT + CONCAT('', MAX(f)), + CONCAT('', MAX(f0)), + CONCAT('', MAX(r1_1)), + CONCAT('', MAX(f23_0)), + CONCAT('', MAX(f20_3)), + CONCAT('', MAX(d)), + CONCAT('', MAX(d1_0)), + CONCAT('', MAX(d10_10)), + CONCAT('', MAX(d53)), + CONCAT('', MAX(d53_10)) FROM t1; # Invalid values diff --git a/mysql-test/suite/rocksdb/r/col_opt_not_null.result b/mysql-test/suite/rocksdb/r/col_opt_not_null.result index 7f14f96ac8d4..19b64e1805c6 100644 --- a/mysql-test/suite/rocksdb/r/col_opt_not_null.result +++ b/mysql-test/suite/rocksdb/r/col_opt_not_null.result @@ -1907,17 +1907,27 @@ r1_1 -0.9 r1_1 0.0 r1_1 0.9 r1_1 0.9 -SELECT MAX(f), MAX(f0), MAX(r1_1), MAX(f23_0), MAX(f20_3), MAX(d), MAX(d1_0), MAX(d10_10), MAX(d53), MAX(d53_10) FROM t1; -MAX(f) 9.999999680285692e37 -MAX(d) 1e81 -MAX(d10_10) 0.9999999999 -MAX(d1_0) 9 -MAX(d53) 100000000000000000000000000000000000000000000000000000 -MAX(d53_10) 10000000000000000000000000000000000000000000.0000000000 -MAX(f0) 9.999999680285692e37 -MAX(f20_3) 99999998430674940.000 -MAX(f23_0) 9.999999680285692e37 -MAX(r1_1) 0.9 +SELECT +CONCAT('', MAX(f)), +CONCAT('', MAX(f0)), +CONCAT('', MAX(r1_1)), +CONCAT('', MAX(f23_0)), +CONCAT('', MAX(f20_3)), +CONCAT('', MAX(d)), +CONCAT('', MAX(d1_0)), +CONCAT('', MAX(d10_10)), +CONCAT('', MAX(d53)), +CONCAT('', MAX(d53_10)) FROM t1; +CONCAT('', MAX(f)) 9.999999680285692e37 +CONCAT('', MAX(d)) 1e81 +CONCAT('', MAX(d10_10)) 0.9999999999 +CONCAT('', MAX(d1_0)) 9 +CONCAT('', MAX(d53)) 100000000000000000000000000000000000000000000000000000 +CONCAT('', MAX(d53_10)) 10000000000000000000000000000000000000000000.0000000000 +CONCAT('', MAX(f0)) 9.999999680285692e37 +CONCAT('', MAX(f20_3)) 99999998430674940.000 +CONCAT('', MAX(f23_0)) 9.999999680285692e37 +CONCAT('', MAX(r1_1)) 0.9 INSERT INTO t1 (f,f0,r1_1,f23_0,f20_3,d,d1_0,d10_10,d53,d53_10,pk) VALUES ( 9999999999999999999999999999999999999999999999999999999999999.9999, 9999999999999999999999999999999999999999999999999999999999999.9999, diff --git a/mysql-test/suite/rocksdb/r/col_opt_null.result b/mysql-test/suite/rocksdb/r/col_opt_null.result index 549c9841fa56..832a4c0fa94d 100644 --- a/mysql-test/suite/rocksdb/r/col_opt_null.result +++ b/mysql-test/suite/rocksdb/r/col_opt_null.result @@ -1807,17 +1807,27 @@ r1_1 -0.9 r1_1 0.0 r1_1 0.9 r1_1 0.9 -SELECT MAX(f), MAX(f0), MAX(r1_1), MAX(f23_0), MAX(f20_3), MAX(d), MAX(d1_0), MAX(d10_10), MAX(d53), MAX(d53_10) FROM t1; -MAX(f) 9.999999680285692e37 -MAX(d) 1e81 -MAX(d10_10) 0.9999999999 -MAX(d1_0) 9 -MAX(d53) 100000000000000000000000000000000000000000000000000000 -MAX(d53_10) 10000000000000000000000000000000000000000000.0000000000 -MAX(f0) 9.999999680285692e37 -MAX(f20_3) 99999998430674940.000 -MAX(f23_0) 9.999999680285692e37 -MAX(r1_1) 0.9 +SELECT +CONCAT('', MAX(f)), +CONCAT('', MAX(f0)), +CONCAT('', MAX(r1_1)), +CONCAT('', MAX(f23_0)), +CONCAT('', MAX(f20_3)), +CONCAT('', MAX(d)), +CONCAT('', MAX(d1_0)), +CONCAT('', MAX(d10_10)), +CONCAT('', MAX(d53)), +CONCAT('', MAX(d53_10)) FROM t1; +CONCAT('', MAX(f)) 9.999999680285692e37 +CONCAT('', MAX(d)) 1e81 +CONCAT('', MAX(d10_10)) 0.9999999999 +CONCAT('', MAX(d1_0)) 9 +CONCAT('', MAX(d53)) 100000000000000000000000000000000000000000000000000000 +CONCAT('', MAX(d53_10)) 10000000000000000000000000000000000000000000.0000000000 +CONCAT('', MAX(f0)) 9.999999680285692e37 +CONCAT('', MAX(f20_3)) 99999998430674940.000 +CONCAT('', MAX(f23_0)) 9.999999680285692e37 +CONCAT('', MAX(r1_1)) 0.9 INSERT INTO t1 (f,f0,r1_1,f23_0,f20_3,d,d1_0,d10_10,d53,d53_10,pk) VALUES ( 9999999999999999999999999999999999999999999999999999999999999.9999, 9999999999999999999999999999999999999999999999999999999999999.9999, diff --git a/mysql-test/suite/rocksdb/r/col_opt_unsigned.result b/mysql-test/suite/rocksdb/r/col_opt_unsigned.result index a472b23e18bc..7e176562b4e2 100644 --- a/mysql-test/suite/rocksdb/r/col_opt_unsigned.result +++ b/mysql-test/suite/rocksdb/r/col_opt_unsigned.result @@ -406,17 +406,27 @@ r1_1 0.0 r1_1 0.0 r1_1 0.9 r1_1 0.9 -SELECT MAX(f), MAX(f0), MAX(r1_1), MAX(f23_0), MAX(f20_3), MAX(d), MAX(d1_0), MAX(d10_10), MAX(d53), MAX(d53_10) FROM t1; -MAX(f) 9.999999680285692e37 -MAX(d) 1e81 -MAX(d10_10) 0.9999999999 -MAX(d1_0) 9 -MAX(d53) 100000000000000000000000000000000000000000000000000000 -MAX(d53_10) 10000000000000000000000000000000000000000000.0000000000 -MAX(f0) 9.999999680285692e37 -MAX(f20_3) 99999998430674940.000 -MAX(f23_0) 9.999999680285692e37 -MAX(r1_1) 0.9 +SELECT +CONCAT('', MAX(f)), +CONCAT('', MAX(f0)), +CONCAT('', MAX(r1_1)), +CONCAT('', MAX(f23_0)), +CONCAT('', MAX(f20_3)), +CONCAT('', MAX(d)), +CONCAT('', MAX(d1_0)), +CONCAT('', MAX(d10_10)), +CONCAT('', MAX(d53)), +CONCAT('', MAX(d53_10)) FROM t1; +CONCAT('', MAX(f)) 9.999999680285692e37 +CONCAT('', MAX(d)) 1e81 +CONCAT('', MAX(d10_10)) 0.9999999999 +CONCAT('', MAX(d1_0)) 9 +CONCAT('', MAX(d53)) 100000000000000000000000000000000000000000000000000000 +CONCAT('', MAX(d53_10)) 10000000000000000000000000000000000000000000.0000000000 +CONCAT('', MAX(f0)) 9.999999680285692e37 +CONCAT('', MAX(f20_3)) 99999998430674940.000 +CONCAT('', MAX(f23_0)) 9.999999680285692e37 +CONCAT('', MAX(r1_1)) 0.9 INSERT INTO t1 (f,f0,r1_1,f23_0,f20_3,d,d1_0,d10_10,d53,d53_10,pk) VALUES ( 9999999999999999999999999999999999999999999999999999999999999.9999, 9999999999999999999999999999999999999999999999999999999999999.9999, diff --git a/mysql-test/suite/rocksdb/r/col_opt_zerofill.result b/mysql-test/suite/rocksdb/r/col_opt_zerofill.result index 59dc82d4e912..6974c8640534 100644 --- a/mysql-test/suite/rocksdb/r/col_opt_zerofill.result +++ b/mysql-test/suite/rocksdb/r/col_opt_zerofill.result @@ -391,17 +391,27 @@ r1_1 0.0 r1_1 0.0 r1_1 0.9 r1_1 0.9 -SELECT MAX(f), MAX(f0), MAX(r1_1), MAX(f23_0), MAX(f20_3), MAX(d), MAX(d1_0), MAX(d10_10), MAX(d53), MAX(d53_10) FROM t1; -MAX(f) 9.999999680285692e37 -MAX(d) 1e81 -MAX(d10_10) 0.9999999999 -MAX(d1_0) 9 -MAX(d53) 100000000000000000000000000000000000000000000000000000 -MAX(d53_10) 10000000000000000000000000000000000000000000.0000000000 -MAX(f0) 9.999999680285692e37 -MAX(f20_3) 99999998430674940.000 -MAX(f23_0) 9.999999680285692e37 -MAX(r1_1) 0.9 +SELECT +CONCAT('', MAX(f)), +CONCAT('', MAX(f0)), +CONCAT('', MAX(r1_1)), +CONCAT('', MAX(f23_0)), +CONCAT('', MAX(f20_3)), +CONCAT('', MAX(d)), +CONCAT('', MAX(d1_0)), +CONCAT('', MAX(d10_10)), +CONCAT('', MAX(d53)), +CONCAT('', MAX(d53_10)) FROM t1; +CONCAT('', MAX(f)) 9.999999680285692e37 +CONCAT('', MAX(d)) 1e81 +CONCAT('', MAX(d10_10)) 0.9999999999 +CONCAT('', MAX(d1_0)) 9 +CONCAT('', MAX(d53)) 100000000000000000000000000000000000000000000000000000 +CONCAT('', MAX(d53_10)) 10000000000000000000000000000000000000000000.0000000000 +CONCAT('', MAX(f0)) 9.999999680285692e37 +CONCAT('', MAX(f20_3)) 99999998430674940.000 +CONCAT('', MAX(f23_0)) 9.999999680285692e37 +CONCAT('', MAX(r1_1)) 0.9 INSERT INTO t1 (f,f0,r1_1,f23_0,f20_3,d,d1_0,d10_10,d53,d53_10,pk) VALUES ( 9999999999999999999999999999999999999999999999999999999999999.9999, 9999999999999999999999999999999999999999999999999999999999999.9999, diff --git a/mysql-test/suite/rocksdb/r/type_float.result b/mysql-test/suite/rocksdb/r/type_float.result index f02717820dae..3133f3fe8d27 100644 --- a/mysql-test/suite/rocksdb/r/type_float.result +++ b/mysql-test/suite/rocksdb/r/type_float.result @@ -147,17 +147,27 @@ r1_1 -0.9 r1_1 0.0 r1_1 0.9 r1_1 0.9 -SELECT MAX(f), MAX(f0), MAX(r1_1), MAX(f23_0), MAX(f20_3), MAX(d), MAX(d1_0), MAX(d10_10), MAX(d53), MAX(d53_10) FROM t1; -MAX(f) 9.999999680285692e37 -MAX(d) 1e81 -MAX(d10_10) 0.9999999999 -MAX(d1_0) 9 -MAX(d53) 100000000000000000000000000000000000000000000000000000 -MAX(d53_10) 10000000000000000000000000000000000000000000.0000000000 -MAX(f0) 9.999999680285692e37 -MAX(f20_3) 99999998430674940.000 -MAX(f23_0) 9.999999680285692e37 -MAX(r1_1) 0.9 +SELECT +CONCAT('', MAX(f)), +CONCAT('', MAX(f0)), +CONCAT('', MAX(r1_1)), +CONCAT('', MAX(f23_0)), +CONCAT('', MAX(f20_3)), +CONCAT('', MAX(d)), +CONCAT('', MAX(d1_0)), +CONCAT('', MAX(d10_10)), +CONCAT('', MAX(d53)), +CONCAT('', MAX(d53_10)) FROM t1; +CONCAT('', MAX(f)) 9.999999680285692e37 +CONCAT('', MAX(d)) 1e81 +CONCAT('', MAX(d10_10)) 0.9999999999 +CONCAT('', MAX(d1_0)) 9 +CONCAT('', MAX(d53)) 100000000000000000000000000000000000000000000000000000 +CONCAT('', MAX(d53_10)) 10000000000000000000000000000000000000000000.0000000000 +CONCAT('', MAX(f0)) 9.999999680285692e37 +CONCAT('', MAX(f20_3)) 99999998430674940.000 +CONCAT('', MAX(f23_0)) 9.999999680285692e37 +CONCAT('', MAX(r1_1)) 0.9 INSERT INTO t1 (f,f0,r1_1,f23_0,f20_3,d,d1_0,d10_10,d53,d53_10,pk) VALUES ( 9999999999999999999999999999999999999999999999999999999999999.9999, 9999999999999999999999999999999999999999999999999999999999999.9999, From 546401b0219f6e1a8a81399b91090f1306a1f364 Mon Sep 17 00:00:00 2001 From: Maysam Yabandeh Date: Tue, 14 Nov 2017 17:13:26 -0800 Subject: [PATCH 0490/1221] Rename concurrent_prepare to two_write_queues Upstream commit ID : fb-mysql-5.6.35/8efdf4772d0f86f8db57e5a0683fba6f2abe71ed MYR-198 : Merge prod201704 Percona Server : - This upstream patch renamed an existing variable mid-series. We add back the 'old' variable with exact same functionality and added in a deprecation warning. Summary: concurrent_prepare in rocksdb is renamed to two_write_queues. This patch updates the rocksdb submodule and make similar change in myrocks. update-submodule: rocksdb Closes https://github.com/facebook/mysql-5.6/pull/764 Reviewed By: lth Differential Revision: D6317055 Pulled By: lth fbshipit-source-id: f4168e1 --- .../r/rocksdb_two_write_queues_basic.result | 14 +++++++++++ .../t/rocksdb_two_write_queues_basic.test | 17 ++++++++++++++ mysql-test/suite/rocksdb/r/rocksdb.result | 1 + storage/rocksdb/ha_rocksdb.cc | 23 +++++++++++++++---- storage/rocksdb/rocksdb | 2 +- 5 files changed, 52 insertions(+), 5 deletions(-) create mode 100644 mysql-test/suite/rocksdb.sys_vars/r/rocksdb_two_write_queues_basic.result create mode 100644 mysql-test/suite/rocksdb.sys_vars/t/rocksdb_two_write_queues_basic.test diff --git a/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_two_write_queues_basic.result b/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_two_write_queues_basic.result new file mode 100644 index 000000000000..5a19016bf915 --- /dev/null +++ b/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_two_write_queues_basic.result @@ -0,0 +1,14 @@ +CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam; +INSERT INTO valid_values VALUES(1); +INSERT INTO valid_values VALUES(1024); +CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam; +INSERT INTO invalid_values VALUES('\'aaa\''); +SET @start_global_value = @@global.ROCKSDB_TWO_WRITE_QUEUES; +SELECT @start_global_value; +@start_global_value +1 +"Trying to set variable @@global.ROCKSDB_TWO_WRITE_QUEUES to 444. It should fail because it is readonly." +SET @@global.ROCKSDB_TWO_WRITE_QUEUES = 444; +ERROR HY000: Variable 'rocksdb_two_write_queues' is a read only variable +DROP TABLE valid_values; +DROP TABLE invalid_values; diff --git a/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_two_write_queues_basic.test b/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_two_write_queues_basic.test new file mode 100644 index 000000000000..4d00f660e39d --- /dev/null +++ b/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_two_write_queues_basic.test @@ -0,0 +1,17 @@ +--source include/have_rocksdb.inc +--source include/have_myisam.inc + +CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam; +INSERT INTO valid_values VALUES(1); +INSERT INTO valid_values VALUES(1024); + +CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam; +INSERT INTO invalid_values VALUES('\'aaa\''); + +--let $sys_var=ROCKSDB_TWO_WRITE_QUEUES +--let $read_only=1 +--let $session=0 +--source ../include/rocksdb_sys_var.inc + +DROP TABLE valid_values; +DROP TABLE invalid_values; diff --git a/mysql-test/suite/rocksdb/r/rocksdb.result b/mysql-test/suite/rocksdb/r/rocksdb.result index 07a8fc0530df..021be13b675e 100644 --- a/mysql-test/suite/rocksdb/r/rocksdb.result +++ b/mysql-test/suite/rocksdb/r/rocksdb.result @@ -990,6 +990,7 @@ rocksdb_table_cache_numshardbits 6 rocksdb_table_stats_sampling_pct 10 rocksdb_tmpdir rocksdb_trace_sst_api OFF +rocksdb_two_write_queues ON rocksdb_unsafe_for_binlog OFF rocksdb_update_cf_options rocksdb_use_adaptive_mutex OFF diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index 1e24e9bfc0d5..ba86a55ef395 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -518,7 +518,7 @@ static std::unique_ptr rdb_init_rocksdb_db_options(void) { o->max_subcompactions = DEFAULT_SUBCOMPACTIONS; o->max_open_files = -2; // auto-tune to 50% open_files_limit - o->concurrent_prepare = true; + o->two_write_queues = true; o->manual_wal_flush = true; return o; } @@ -733,12 +733,26 @@ static MYSQL_SYSVAR_BOOL( "DBOptions::create_if_missing for RocksDB", nullptr, nullptr, rocksdb_db_options->create_if_missing); +static void concurrent_prepare_update(THD *thd, st_mysql_sys_var *var, + void *var_ptr, const void *save) { + push_warning(thd, Sql_condition::SL_WARNING, HA_ERR_WRONG_COMMAND, + "Using rocksdb_concurrent_prepare is deprecated and the " + "parameter may be removed in future releases."); +} + static MYSQL_SYSVAR_BOOL( concurrent_prepare, - *reinterpret_cast(&rocksdb_db_options->concurrent_prepare), + *reinterpret_cast(&rocksdb_db_options->two_write_queues), + PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY, + "DEPRECATED, use rocksdb_two_write_queries instead.", nullptr, + concurrent_prepare_update, rocksdb_db_options->two_write_queues); + +static MYSQL_SYSVAR_BOOL( + two_write_queues, + *reinterpret_cast(&rocksdb_db_options->two_write_queues), PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY, - "DBOptions::concurrent_prepare for RocksDB", nullptr, nullptr, - rocksdb_db_options->concurrent_prepare); + "DBOptions::two_write_queues for RocksDB", nullptr, nullptr, + rocksdb_db_options->two_write_queues); static MYSQL_SYSVAR_BOOL( manual_wal_flush, @@ -1480,6 +1494,7 @@ static struct st_mysql_sys_var *rocksdb_system_variables[] = { MYSQL_SYSVAR(create_if_missing), MYSQL_SYSVAR(concurrent_prepare), + MYSQL_SYSVAR(two_write_queues), MYSQL_SYSVAR(manual_wal_flush), MYSQL_SYSVAR(create_missing_column_families), MYSQL_SYSVAR(error_if_exists), diff --git a/storage/rocksdb/rocksdb b/storage/rocksdb/rocksdb index e03377c7fd86..251526672516 160000 --- a/storage/rocksdb/rocksdb +++ b/storage/rocksdb/rocksdb @@ -1 +1 @@ -Subproject commit e03377c7fd86f117c6c64d35955140dab400eb3c +Subproject commit 2515266725167e2b5002c89867159eb8b977c1f6 From d40622659b4a675932fd541a364bd90f5658d1f3 Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Wed, 15 Nov 2017 17:50:52 -0800 Subject: [PATCH 0491/1221] Minor fix to rocksdb.allow_no_primary_key_with_sk.test Upstream commit ID : fb-mysql-5.6.35/bcd4f07e4136f5cddf1179431325ee36a8d639d2 MYR-198 : Merge prod201704 This is a NULL cherry-pick to Percona Server 5.7 to create the commit placeholder for the corresponding upstream commit. Reason: Change already applied to source tree through another patch. From f388af648ffc9241df76e7ce31013fccf60d30ad Mon Sep 17 00:00:00 2001 From: Herman Lee Date: Mon, 20 Nov 2017 23:42:22 -0800 Subject: [PATCH 0492/1221] Fix setting index_info flags correctly for version INDEX_INFO_VERSION_TTL Upstream commit ID : fb-mysql-5.6.35/1106b4f986e754ed2d1fb633175167d961f4c781 MYR-198 : Merge prod201704 Summary: When tables are setup with TTL and created with index info version INDEX_INFO_VERSION_TTL, and then MyRocks is upgraded to a build that uses INDEX_INFO_VERSION_FIELD_FLAGS, the index_field is not set correctly for tables that have INDEX_INFO_VERSION_TTL. Fix this by setting the index_flags to indicate TTL is used when ttl_duration is detected to be greater than 0. Reviewed By: asandryh Differential Revision: D6383831 fbshipit-source-id: 42289d9 --- storage/rocksdb/rdb_datadic.cc | 5 +++++ storage/rocksdb/rdb_datadic.h | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/storage/rocksdb/rdb_datadic.cc b/storage/rocksdb/rdb_datadic.cc index d0c3b8d8d871..a0214e355ab4 100644 --- a/storage/rocksdb/rdb_datadic.cc +++ b/storage/rocksdb/rdb_datadic.cc @@ -4528,6 +4528,11 @@ bool Rdb_dict_manager::get_index_info( index_info->m_kv_version = rdb_netbuf_to_uint16(ptr); ptr += RDB_SIZEOF_KV_VERSION; index_info->m_ttl_duration = rdb_netbuf_to_uint64(ptr); + if ((index_info->m_kv_version == + Rdb_key_def::PRIMARY_FORMAT_VERSION_TTL) && + index_info->m_ttl_duration > 0) { + index_info->m_index_flags = Rdb_key_def::TTL_FLAG; + } found = true; break; diff --git a/storage/rocksdb/rdb_datadic.h b/storage/rocksdb/rdb_datadic.h index cfd8e34512bc..0c217cc8a0eb 100644 --- a/storage/rocksdb/rdb_datadic.h +++ b/storage/rocksdb/rdb_datadic.h @@ -1144,7 +1144,7 @@ class Rdb_ddl_manager { 2. internal cf_id, index id => index information key: Rdb_key_def::INDEX_INFO(0x2) + cf_id + index_id - value: version, index_type, kv_format_version, ttl_duration + value: version, index_type, kv_format_version, index_flags, ttl_duration index_type is 1 byte, version and kv_format_version are 2 bytes. index_flags is 4 bytes. ttl_duration is 8 bytes. From f432d07dbd8ad5e746d46e9db83af5c6b5f2c042 Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Mon, 27 Nov 2017 10:04:24 -0800 Subject: [PATCH 0493/1221] Set rocksdb_max_open_files to reasonable value at startup from open_files_limit Upstream commit ID : fb-mysql-5.6.35/aac18139d3cffa7b3b9c19d5f9ad2d6c1d6bbbff Merge prod201704 This is a NULL cherry-pick to Percona Server 5.7 to create the commit placeholder for the corresponding upstream commit. Reason: Change already applied to source tree through another patch. From 237e7b87ac069b95a4b369a02d8168efa15fb4a9 Mon Sep 17 00:00:00 2001 From: Sergei Petrunia Date: Mon, 27 Nov 2017 10:10:31 -0800 Subject: [PATCH 0494/1221] Fix a race condition in rocksdb.rocksdb test Upstream commit ID : fb-mysql-5.6.35/18c58d2f8dae69b17e6fcd98b555f67cb2d40e04 MYR-198 : Merge prod201704 Summary: Before issuing KILL QUERY, we need to wait until the query that we intend to kill is actually running. Closes https://github.com/facebook/mysql-5.6/pull/754 Differential Revision: D6188444 fbshipit-source-id: cd9e6c3 --- mysql-test/suite/rocksdb/t/rocksdb.test | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/mysql-test/suite/rocksdb/t/rocksdb.test b/mysql-test/suite/rocksdb/t/rocksdb.test index 284df3931731..26fb57d39faa 100644 --- a/mysql-test/suite/rocksdb/t/rocksdb.test +++ b/mysql-test/suite/rocksdb/t/rocksdb.test @@ -1115,6 +1115,8 @@ INSERT INTO t1 VALUES (1,'foo'),(2,'bar'); DROP TABLE t1; +# See MYR-122 : split up rocksdb.rocksdb test into individual tests that +# actually test something specific --echo # --echo # MDEV-4061: RocksDB: Changes from an interrupted query are still applied --echo # @@ -1127,21 +1129,16 @@ insert into t1 values (1,10),(2,20); --let $con_id = `select connection_id()` set autocommit = 1; -# TODO : this is bad and will result in unstable tests -# See MYR-122 : split up rocksdb.rocksdb test into individual tests that -# actually test something specific --send update t1 set a = sleep(300) where pk = 1; --connect (con1,localhost,root,,) + + +let $wait_condition= select State='User sleep' from information_schema.processlist where id=$con_id; +--source include/wait_condition.inc + --echo kill query \$con_id; --disable_query_log -# TODO : this is bad and will result in unstable tests -# See MYR-122 : split up rocksdb.rocksdb test into individual tests that -# actually test something specific -# If we immeditely kill the query - internally the condition broadcast can -# occur before the lock is waiting on the condition, thus the broadcast call -# is lost. Sleep 1 second to avoid this condition. ---sleep 1 eval kill query $con_id; --enable_query_log From 2256300c773f6affd0b8b29e541855e5d492ae7a Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Wed, 29 Nov 2017 08:55:46 -0800 Subject: [PATCH 0495/1221] Fixed incorrect use of pointer to internal data of a temporary instance. Upstream commit ID : fb-mysql-5.6.35/5304e818093db1812fbd254be21aaf4a1499ff6a MYR-198 : Merge prod201704 This is a NULL cherry-pick to Percona Server 5.7 to create the commit placeholder for the corresponding upstream commit. Reason: Change already applied to source tree through another patch. From 6d8dbf61434266f14b449f9f87454d1a7c9426ab Mon Sep 17 00:00:00 2001 From: Herman Lee Date: Tue, 21 Nov 2017 23:07:58 -0800 Subject: [PATCH 0496/1221] Fix race condition in freeing of ha_rocksdb handlers during bulk loading Upstream commit ID : fb-mysql-5.6.35/9194daf447d79fd339dc234452f90b4ac257f8cd MYR-198 : Merge prod201704 Summary: During bulk loading, the Rdb_transaction maintains a pointer to the active ha_rocksdb handlers via the m_curr_bulk_load array. However, these ha_rocksdb handlers are considered unused after a statement is processed and can be freed at any point by the table cache manager in SQL. If they do get freed, then the Rdb_transaction's pointer is invalid, and can result in an invalid access. This triggered assertions during the freeing of the m_bulk_load_mutex, because the ha_rocksdb object was freed/cleared while the thread handling the transaction tried to access it via the m_curr_bulk_load array. The Rdb_transaction needed the ha_rocksdb handler so it can commit the m_sst_info structures when bulk load completed. Instead of keeping a pointer to the ha_rocksdb handler, it now shares the pointer to the m_sst_info structure. Either ha_rocksdb or Rdb_transaction can commit the m_sst_info structure. There is now a lock guarding commit(). If the ha_rocksdb handler detects the m_sst_info structure has been committed, it will allocate a new one. For supporting the index_merge sort functionality, the index_merge map is moved to the transaction and is committed during finish_bulk_load. Each ha_rocksdb handler is only responsible for flushing its m_sst_info structure. Reviewed By: asandryh Differential Revision: D6406801 fbshipit-source-id: 6ca0442 --- .../rocksdb/r/bulk_load_drop_table.result | 8 + .../suite/rocksdb/t/bulk_load_drop_table.test | 22 ++ storage/rocksdb/ha_rocksdb.cc | 278 +++++++++--------- storage/rocksdb/ha_rocksdb.h | 21 +- storage/rocksdb/rdb_psi.cc | 4 +- storage/rocksdb/rdb_psi.h | 2 +- storage/rocksdb/rdb_sst_info.cc | 22 +- storage/rocksdb/rdb_sst_info.h | 3 + 8 files changed, 206 insertions(+), 154 deletions(-) create mode 100644 mysql-test/suite/rocksdb/r/bulk_load_drop_table.result create mode 100644 mysql-test/suite/rocksdb/t/bulk_load_drop_table.test diff --git a/mysql-test/suite/rocksdb/r/bulk_load_drop_table.result b/mysql-test/suite/rocksdb/r/bulk_load_drop_table.result new file mode 100644 index 000000000000..1b1cf5240113 --- /dev/null +++ b/mysql-test/suite/rocksdb/r/bulk_load_drop_table.result @@ -0,0 +1,8 @@ +CREATE TABLE t1 (pk INT, PRIMARY KEY (pk)) ENGINE=ROCKSDB; +SET rocksdb_bulk_load_allow_unsorted=1; +SET rocksdb_bulk_load=1; +INSERT INTO t1 VALUES (1); +DROP TABLE t1; +SET rocksdb_bulk_load=0; +SELECT * FROM t1; +ERROR 42S02: Table 'test.t1' doesn't exist diff --git a/mysql-test/suite/rocksdb/t/bulk_load_drop_table.test b/mysql-test/suite/rocksdb/t/bulk_load_drop_table.test new file mode 100644 index 000000000000..aaeaae8f4559 --- /dev/null +++ b/mysql-test/suite/rocksdb/t/bulk_load_drop_table.test @@ -0,0 +1,22 @@ +--source include/have_rocksdb.inc +--source include/count_sessions.inc + +CREATE TABLE t1 (pk INT, PRIMARY KEY (pk)) ENGINE=ROCKSDB; + +SET rocksdb_bulk_load_allow_unsorted=1; +SET rocksdb_bulk_load=1; + +INSERT INTO t1 VALUES (1); + +--connect (con1,localhost,root,,) +DROP TABLE t1; + +--connection default +--disconnect con1 + +# This would have crashed the server prior to the fix +SET rocksdb_bulk_load=0; +--error ER_NO_SUCH_TABLE +SELECT * FROM t1; + +--source include/wait_until_count_sessions.inc diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index ba86a55ef395..d87ff797cc40 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -1951,28 +1951,110 @@ class Rdb_transaction { bool has_snapshot() const { return m_read_opts.snapshot != nullptr; } private: - // The tables we are currently loading. In a partitioned table this can - // have more than one entry - std::vector m_curr_bulk_load; + // The Rdb_sst_info structures we are currently loading. In a partitioned + // table this can have more than one entry + std::vector> m_curr_bulk_load; + std::string m_curr_bulk_load_tablename; + + /* External merge sorts for bulk load: key ID -> merge sort instance */ + std::unordered_map m_key_merge; public: - int finish_bulk_load(bool print_client_error = true) { - int rc = 0; + int get_key_merge(GL_INDEX_ID kd_gl_id, rocksdb::ColumnFamilyHandle *cf, + Rdb_index_merge **key_merge) { + int res; + auto it = m_key_merge.find(kd_gl_id); + if (it == m_key_merge.end()) { + m_key_merge.emplace( + std::piecewise_construct, std::make_tuple(kd_gl_id), + std::make_tuple( + get_rocksdb_tmpdir(), THDVAR(get_thd(), merge_buf_size), + THDVAR(get_thd(), merge_combine_read_size), + THDVAR(get_thd(), merge_tmp_file_removal_delay_ms), cf)); + it = m_key_merge.find(kd_gl_id); + if ((res = it->second.init()) != 0) { + return res; + } + } + *key_merge = &it->second; + return HA_EXIT_SUCCESS; + } - std::vector::iterator it; - while ((it = m_curr_bulk_load.begin()) != m_curr_bulk_load.end()) { - int rc2 = (*it)->finalize_bulk_load(print_client_error); + int finish_bulk_load(int print_client_error = true) { + int rc = 0, rc2; + + std::vector>::iterator it; + for (it = m_curr_bulk_load.begin(); it != m_curr_bulk_load.end(); it++) { + rc2 = (*it)->commit(print_client_error); if (rc2 != 0 && rc == 0) { rc = rc2; } } - + m_curr_bulk_load.clear(); + m_curr_bulk_load_tablename.clear(); DBUG_ASSERT(m_curr_bulk_load.size() == 0); + // Flush the index_merge sort buffers + if (!m_key_merge.empty()) { + rocksdb::Slice merge_key; + rocksdb::Slice merge_val; + for (auto it = m_key_merge.begin(); it != m_key_merge.end(); it++) { + GL_INDEX_ID index_id = it->first; + std::shared_ptr keydef = + ddl_manager.safe_find(index_id); + std::string table_name = ddl_manager.safe_get_table_name(index_id); + + // Unable to find key definition or table name since the + // table could have been dropped. + // TODO(herman): there is a race here between dropping the table + // and detecting a drop here. If the table is dropped while bulk + // loading is finishing, these keys being added here may + // be missed by the compaction filter and not be marked for + // removal. It is unclear how to lock the sql table from the storage + // engine to prevent modifications to it while bulk load is occurring. + if (keydef == nullptr || table_name.empty()) { + rc2 = HA_ERR_ROCKSDB_BULK_LOAD; + break; + } + const std::string &index_name = keydef->get_name(); + Rdb_index_merge &rdb_merge = it->second; + + // Rdb_sst_info expects a denormalized table name in the form of + // "./database/table" + std::replace(table_name.begin(), table_name.end(), '.', '/'); + table_name = "./" + table_name; + Rdb_sst_info sst_info(rdb, table_name, index_name, rdb_merge.get_cf(), + *rocksdb_db_options, + THDVAR(get_thd(), trace_sst_api)); + + while ((rc2 = rdb_merge.next(&merge_key, &merge_val)) == 0) { + if ((rc2 = sst_info.put(merge_key, merge_val)) != 0) { + break; + } + } + + // rc2 == -1 => finished ok; rc2 > 0 => error + if (rc2 > 0 || (rc2 = sst_info.commit(print_client_error)) != 0) { + if (rc == 0) { + rc = rc2; + } + break; + } + } + m_key_merge.clear(); + + /* + Explicitly tell jemalloc to clean up any unused dirty pages at this + point. + See https://reviews.facebook.net/D63723 for more details. + */ + purge_all_jemalloc_arenas(); + } return rc; } - void start_bulk_load(ha_rocksdb *const bulk_load) { + void start_bulk_load(ha_rocksdb *const bulk_load, + std::shared_ptr sst_info) { /* If we already have an open bulk load of a table and the name doesn't match the current one, close out the currently running one. This allows @@ -1982,28 +2064,40 @@ class Rdb_transaction { DBUG_ASSERT(bulk_load != nullptr); if (!m_curr_bulk_load.empty() && - !bulk_load->same_table(*m_curr_bulk_load[0])) { + bulk_load->get_table_basename() != m_curr_bulk_load_tablename) { const auto res = finish_bulk_load(); SHIP_ASSERT(res == 0); } - m_curr_bulk_load.push_back(bulk_load); + /* + This used to track ha_rocksdb handler objects, but those can be + freed by the table cache while this was referencing them. Instead + of tracking ha_rocksdb handler objects, this now tracks the + Rdb_sst_info allocated, and both the ha_rocksdb handler and the + Rdb_transaction both have shared pointers to them. + + On transaction complete, it will commit each Rdb_sst_info structure found. + If the ha_rocksdb object is freed, etc., it will also commit + the Rdb_sst_info. The Rdb_sst_info commit path needs to be idempotent. + */ + m_curr_bulk_load.push_back(sst_info); + m_curr_bulk_load_tablename = bulk_load->get_table_basename(); } - void end_bulk_load(ha_rocksdb *const bulk_load) { - for (auto it = m_curr_bulk_load.begin(); it != m_curr_bulk_load.end(); - it++) { - if (*it == bulk_load) { - m_curr_bulk_load.erase(it); - return; - } - } + int num_ongoing_bulk_load() const { return m_curr_bulk_load.size(); } - // Should not reach here - SHIP_ASSERT(0); - } + const char *get_rocksdb_tmpdir() const { + const char *tmp_dir = THDVAR(get_thd(), tmpdir); - int num_ongoing_bulk_load() const { return m_curr_bulk_load.size(); } + /* + We want to treat an empty string as nullptr, in these cases DDL operations + will use the default --tmpdir passed to mysql instead. + */ + if (tmp_dir != nullptr && *tmp_dir == '\0') { + tmp_dir = nullptr; + } + return (tmp_dir); + } /* Flush the data accumulated so far. This assumes we're doing a bulk insert. @@ -4543,18 +4637,9 @@ ha_rocksdb::ha_rocksdb(my_core::handlerton *const hton, m_sk_packed_tuple_old(nullptr), m_dup_sk_packed_tuple(nullptr), m_dup_sk_packed_tuple_old(nullptr), m_eq_cond_lower_bound(nullptr), m_eq_cond_upper_bound(nullptr), m_pack_buffer(nullptr), - m_lock_rows(RDB_LOCK_NONE), m_keyread_only(FALSE), - m_bulk_load_tx(nullptr), m_encoder_arr(nullptr), + m_lock_rows(RDB_LOCK_NONE), m_keyread_only(FALSE), m_encoder_arr(nullptr), m_row_checksums_checked(0), m_in_rpl_delete_rows(false), - m_in_rpl_update_rows(false) { -#ifdef HAVE_PSI_INTERFACE - mysql_mutex_init(rdb_bulk_load_mutex_key, &m_bulk_load_mutex, - MY_MUTEX_INIT_FAST); -#else - mysql_mutex_init(PSI_NOT_INSTRUMENTED, &m_bulk_load_mutex, - MY_MUTEX_INIT_FAST); -#endif -} + m_in_rpl_update_rows(false) {} static const char *ha_rocksdb_exts[] = {NullS}; @@ -4564,8 +4649,8 @@ const char **ha_rocksdb::bas_ext() const { DBUG_RETURN(ha_rocksdb_exts); } -bool ha_rocksdb::same_table(const ha_rocksdb &other) const { - return m_tbl_def->base_tablename() == other.m_tbl_def->base_tablename(); +const std::string &ha_rocksdb::get_table_basename() const { + return m_tbl_def->base_tablename(); } /** @@ -8454,44 +8539,29 @@ int ha_rocksdb::bulk_load_key(Rdb_transaction *const tx, const Rdb_key_def &kd, const rocksdb::Slice &key, const rocksdb::Slice &value, bool sort) { DBUG_ENTER_FUNC(); - + int res; rocksdb::ColumnFamilyHandle *cf = kd.get_cf(); - DBUG_ASSERT(cf != nullptr); - int res = HA_EXIT_SUCCESS; + // In the case of unsorted inserts, m_sst_info allocated here is not + // used to store the keys. It is still used to indicate when tables + // are switched. + if (m_sst_info == nullptr || m_sst_info->is_committed()) { + m_sst_info.reset(new Rdb_sst_info(rdb, m_table_handler->m_table_name, + kd.get_name(), cf, *rocksdb_db_options, + THDVAR(ha_thd(), trace_sst_api))); + tx->start_bulk_load(this, m_sst_info); + } + DBUG_ASSERT(m_sst_info); if (sort) { - GL_INDEX_ID kd_gl_id = kd.get_gl_index_id(); - auto it = m_key_merge.find(kd_gl_id); - if (it == m_key_merge.end()) { - m_key_merge.emplace( - std::piecewise_construct, std::make_tuple(kd_gl_id), - std::make_tuple( - thd_rocksdb_tmpdir(), THDVAR(ha_thd(), merge_buf_size), - THDVAR(ha_thd(), merge_combine_read_size), - THDVAR(ha_thd(), merge_tmp_file_removal_delay_ms), cf)); - it = m_key_merge.find(kd_gl_id); - if ((res = it->second.init()) != 0) { - DBUG_RETURN(res); - } + Rdb_index_merge *key_merge; + DBUG_ASSERT(cf != nullptr); - if (m_bulk_load_tx == nullptr) { - tx->start_bulk_load(this); - m_bulk_load_tx = tx; - } + res = tx->get_key_merge(kd.get_gl_index_id(), cf, &key_merge); + if (res == HA_EXIT_SUCCESS) { + res = key_merge->add(key, value); } - res = it->second.add(key, value); } else { - if (!m_sst_info) { - m_sst_info.reset(new Rdb_sst_info(rdb, m_table_handler->m_table_name, - kd.get_name(), cf, *rocksdb_db_options, - THDVAR(ha_thd(), trace_sst_api))); - tx->start_bulk_load(this); - m_bulk_load_tx = tx; - } - - DBUG_ASSERT(m_sst_info); - res = m_sst_info->put(key, value); } @@ -8501,62 +8571,13 @@ int ha_rocksdb::bulk_load_key(Rdb_transaction *const tx, const Rdb_key_def &kd, int ha_rocksdb::finalize_bulk_load(bool print_client_error) { DBUG_ENTER_FUNC(); - DBUG_ASSERT_IMP(!m_key_merge.empty() || m_sst_info, - m_bulk_load_tx != nullptr); - - /* Skip if there are no possible ongoing bulk loads */ - if (m_key_merge.empty() && !m_sst_info && m_bulk_load_tx == nullptr) { - DBUG_RETURN(HA_EXIT_SUCCESS); - } - int res = HA_EXIT_SUCCESS; - RDB_MUTEX_LOCK_CHECK(m_bulk_load_mutex); - + /* Skip if there are no possible ongoing bulk loads */ if (m_sst_info) { res = m_sst_info->commit(print_client_error); m_sst_info.reset(); } - - if (!m_key_merge.empty()) { - rocksdb::Slice merge_key; - rocksdb::Slice merge_val; - for (auto it = m_key_merge.begin(); it != m_key_merge.end(); it++) { - const std::string &index_name = - ddl_manager.safe_find(it->first)->get_name(); - Rdb_index_merge &rdb_merge = it->second; - Rdb_sst_info sst_info(rdb, m_table_handler->m_table_name, index_name, - rdb_merge.get_cf(), *rocksdb_db_options, - THDVAR(ha_thd(), trace_sst_api)); - - while ((res = rdb_merge.next(&merge_key, &merge_val)) == 0) { - if ((res = sst_info.put(merge_key, merge_val)) != 0) { - break; - } - } - // res == -1 => finished ok; res > 0 => error - if (res <= 0) { - if ((res = sst_info.commit(print_client_error)) != 0) { - break; - } - } - } - m_key_merge.clear(); - - /* - Explicitly tell jemalloc to clean up any unused dirty pages at this point. - See https://reviews.facebook.net/D63723 for more details. - */ - purge_all_jemalloc_arenas(); - } - - if (m_bulk_load_tx != nullptr) { - m_bulk_load_tx->end_bulk_load(this); - m_bulk_load_tx = nullptr; - } - - RDB_MUTEX_UNLOCK_CHECK(m_bulk_load_mutex); - DBUG_RETURN(res); } @@ -9590,20 +9611,6 @@ void ha_rocksdb::read_thd_vars(THD *const thd) { m_checksums_pct = THDVAR(thd, checksums_pct); } -const char *ha_rocksdb::thd_rocksdb_tmpdir() { - const char *tmp_dir = THDVAR(ha_thd(), tmpdir); - - /* - We want to treat an empty string as nullptr, in these cases DDL operations - will use the default --tmpdir passed to mysql instead. - */ - if (tmp_dir != nullptr && *tmp_dir == '\0') { - tmp_dir = nullptr; - } - - return (tmp_dir); -} - /** @return HA_EXIT_SUCCESS OK @@ -10944,9 +10951,10 @@ int ha_rocksdb::inplace_populate_sk( bool is_unique_index = new_table_arg->key_info[index->get_keyno()].flags & HA_NOSAME; - Rdb_index_merge rdb_merge( - thd_rocksdb_tmpdir(), rdb_merge_buf_size, rdb_merge_combine_read_size, - rdb_merge_tmp_file_removal_delay, index->get_cf()); + Rdb_index_merge rdb_merge(tx->get_rocksdb_tmpdir(), rdb_merge_buf_size, + rdb_merge_combine_read_size, + rdb_merge_tmp_file_removal_delay, + index->get_cf()); if ((res = rdb_merge.init())) { DBUG_RETURN(res); diff --git a/storage/rocksdb/ha_rocksdb.h b/storage/rocksdb/ha_rocksdb.h index 83f2aa9fd03f..80e8ae6db4f9 100644 --- a/storage/rocksdb/ha_rocksdb.h +++ b/storage/rocksdb/ha_rocksdb.h @@ -606,12 +606,7 @@ class ha_rocksdb : public my_core::handler { bool m_update_scope_is_valid; /* SST information used for bulk loading the primary key */ - std::unique_ptr m_sst_info; - /* External merge sorts for bulk load: key ID -> merge sort instance */ - std::unordered_map m_key_merge; - Rdb_transaction *m_bulk_load_tx; - /* Mutex to protect finalizing bulk load */ - mysql_mutex_t m_bulk_load_mutex; + std::shared_ptr m_sst_info; /* MySQL index number for duplicate key error @@ -776,7 +771,6 @@ class ha_rocksdb : public my_core::handler { "handler.", err); } - mysql_mutex_destroy(&m_bulk_load_mutex); } /** @brief @@ -801,10 +795,9 @@ class ha_rocksdb : public my_core::handler { const char **bas_ext() const override; /* - See if this is the same base table - this should only be true for different - partitions of the same table. + Returns the name of the table's base name */ - bool same_table(const ha_rocksdb &other) const; + const std::string &get_table_basename() const; /** @brief This is a list of flags that indicate what functionality the storage engine @@ -1212,8 +1205,6 @@ class ha_rocksdb : public my_core::handler { Rdb_tbl_def *get_table_if_exists(const char *const tablename) MY_ATTRIBUTE((__warn_unused_result__)); void read_thd_vars(THD *const thd) MY_ATTRIBUTE((__nonnull__)); - const char *thd_rocksdb_tmpdir() - MY_ATTRIBUTE((__nonnull__, __warn_unused_result__)); bool contains_foreign_key(THD *const thd) MY_ATTRIBUTE((__nonnull__, __warn_unused_result__)); @@ -1223,6 +1214,9 @@ class ha_rocksdb : public my_core::handler { const std::unordered_set> &indexes) MY_ATTRIBUTE((__nonnull__, __warn_unused_result__)); + int finalize_bulk_load(bool print_client_error = true) + MY_ATTRIBUTE((__warn_unused_result__)); + public: int index_init(uint idx, bool sorted) override MY_ATTRIBUTE((__warn_unused_result__)); @@ -1336,9 +1330,6 @@ class ha_rocksdb : public my_core::handler { my_core::Alter_inplace_info *const ha_alter_info, bool commit) override; - int finalize_bulk_load(bool print_client_error = true) - MY_ATTRIBUTE((__warn_unused_result__)); - void set_use_read_free_rpl(const char *const whitelist); public: diff --git a/storage/rocksdb/rdb_psi.cc b/storage/rocksdb/rdb_psi.cc index 7522c6cc032b..94570debffa7 100644 --- a/storage/rocksdb/rdb_psi.cc +++ b/storage/rocksdb/rdb_psi.cc @@ -48,7 +48,7 @@ my_core::PSI_thread_info all_rocksdb_threads[] = { my_core::PSI_mutex_key rdb_psi_open_tbls_mutex_key, rdb_signal_bg_psi_mutex_key, rdb_signal_drop_idx_psi_mutex_key, rdb_collation_data_mutex_key, rdb_mem_cmp_space_mutex_key, key_mutex_tx_list, rdb_sysvars_psi_mutex_key, - rdb_cfm_mutex_key, rdb_bulk_load_mutex_key; + rdb_cfm_mutex_key, rdb_sst_commit_key; my_core::PSI_mutex_info all_rocksdb_mutexes[] = { {&rdb_psi_open_tbls_mutex_key, "open tables", PSI_FLAG_GLOBAL}, @@ -60,7 +60,7 @@ my_core::PSI_mutex_info all_rocksdb_mutexes[] = { {&key_mutex_tx_list, "tx_list", PSI_FLAG_GLOBAL}, {&rdb_sysvars_psi_mutex_key, "setting sysvar", PSI_FLAG_GLOBAL}, {&rdb_cfm_mutex_key, "column family manager", PSI_FLAG_GLOBAL}, - {&rdb_bulk_load_mutex_key, "bulk load", PSI_FLAG_GLOBAL}, + {&rdb_sst_commit_key, "sst commit", PSI_FLAG_GLOBAL}, }; my_core::PSI_rwlock_key key_rwlock_collation_exception_list, diff --git a/storage/rocksdb/rdb_psi.h b/storage/rocksdb/rdb_psi.h index 3bc3626a3952..fc2f66e1ff7c 100644 --- a/storage/rocksdb/rdb_psi.h +++ b/storage/rocksdb/rdb_psi.h @@ -41,7 +41,7 @@ extern my_core::PSI_mutex_key rdb_psi_open_tbls_mutex_key, rdb_signal_bg_psi_mutex_key, rdb_signal_drop_idx_psi_mutex_key, rdb_collation_data_mutex_key, rdb_mem_cmp_space_mutex_key, key_mutex_tx_list, rdb_sysvars_psi_mutex_key, rdb_cfm_mutex_key, - rdb_bulk_load_mutex_key; + rdb_sst_commit_key; extern my_core::PSI_rwlock_key key_rwlock_collation_exception_list, key_rwlock_read_free_rpl_tables, key_rwlock_skip_unique_check_tables; diff --git a/storage/rocksdb/rdb_sst_info.cc b/storage/rocksdb/rdb_sst_info.cc index 573a95a381c4..b52e9c3f39a5 100644 --- a/storage/rocksdb/rdb_sst_info.cc +++ b/storage/rocksdb/rdb_sst_info.cc @@ -36,6 +36,7 @@ #include "./ha_rocksdb.h" #include "./ha_rocksdb_proto.h" #include "./rdb_cf_options.h" +#include "./rdb_psi.h" namespace myrocks { @@ -317,7 +318,7 @@ Rdb_sst_info::Rdb_sst_info(rocksdb::DB *const db, const std::string &tablename, const rocksdb::DBOptions &db_options, const bool &tracing) : m_db(db), m_cf(cf), m_db_options(db_options), m_curr_size(0), - m_sst_count(0), m_background_error(HA_EXIT_SUCCESS), + m_sst_count(0), m_background_error(HA_EXIT_SUCCESS), m_committed(false), #if defined(RDB_SST_INFO_USE_THREAD) m_queue(), m_mutex(), m_cond(), m_thread(nullptr), m_finished(false), #endif @@ -348,6 +349,7 @@ Rdb_sst_info::Rdb_sst_info(rocksdb::DB *const db, const std::string &tablename, // Set the maximum size to 3 times the cf's target size m_max_size = cf_descr.options.target_file_size_base * 3; } + mysql_mutex_init(rdb_sst_commit_key, &m_commit_mutex, MY_MUTEX_INIT_FAST); } Rdb_sst_info::~Rdb_sst_info() { @@ -355,6 +357,7 @@ Rdb_sst_info::~Rdb_sst_info() { #if defined(RDB_SST_INFO_USE_THREAD) DBUG_ASSERT(m_thread == nullptr); #endif + mysql_mutex_destroy(&m_commit_mutex); } int Rdb_sst_info::open_new_sst_file() { @@ -419,6 +422,8 @@ void Rdb_sst_info::close_curr_sst_file() { int Rdb_sst_info::put(const rocksdb::Slice &key, const rocksdb::Slice &value) { int rc; + DBUG_ASSERT(!m_committed); + if (m_curr_size + key.size() + value.size() >= m_max_size) { // The current sst file has reached its maximum, close it out close_curr_sst_file(); @@ -454,7 +459,19 @@ int Rdb_sst_info::put(const rocksdb::Slice &key, const rocksdb::Slice &value) { int Rdb_sst_info::commit(bool print_client_error) { int ret = HA_EXIT_SUCCESS; + + // Both the transaction clean up and the ha_rocksdb handler have + // references to this Rdb_sst_info and both can call commit, so + // synchronize on the object here. + RDB_MUTEX_LOCK_CHECK(m_commit_mutex); + + if (m_committed) { + RDB_MUTEX_UNLOCK_CHECK(m_commit_mutex); + return ret; + } + m_print_client_error = print_client_error; + if (m_curr_size > 0) { // Close out any existing files close_curr_sst_file(); @@ -473,6 +490,9 @@ int Rdb_sst_info::commit(bool print_client_error) { } #endif + m_committed = true; + RDB_MUTEX_UNLOCK_CHECK(m_commit_mutex); + // Did we get any errors? if (have_background_error()) { ret = get_and_reset_background_error(); diff --git a/storage/rocksdb/rdb_sst_info.h b/storage/rocksdb/rdb_sst_info.h index b4925fe4afa5..b5c2f25b0002 100644 --- a/storage/rocksdb/rdb_sst_info.h +++ b/storage/rocksdb/rdb_sst_info.h @@ -128,6 +128,8 @@ class Rdb_sst_info { std::string m_prefix; static std::atomic m_prefix_counter; static std::string m_suffix; + bool m_committed; + mysql_mutex_t m_commit_mutex; #if defined(RDB_SST_INFO_USE_THREAD) std::queue m_queue; std::mutex m_mutex; @@ -159,6 +161,7 @@ class Rdb_sst_info { int put(const rocksdb::Slice &key, const rocksdb::Slice &value); int commit(bool print_client_error = true); + bool is_committed() const { return m_committed; } bool have_background_error() { return m_background_error != 0; } From 17d56a9e4d180e0eb5bd9e4e51b6a25832bb8044 Mon Sep 17 00:00:00 2001 From: Artem Danilov Date: Wed, 6 Dec 2017 14:45:05 -0800 Subject: [PATCH 0497/1221] Updating RocksDB submodule to 5.9.fb.myrocks Upstream commit ID : fb-mysql-5.6.35/26adcc937bba98083e204b98d03d0a3171e19f64 MYR-198 : Merge prod201704 Reviewed By: asandryh Differential Revision: D6503021 fbshipit-source-id: 91b9b9a --- storage/rocksdb/rocksdb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage/rocksdb/rocksdb b/storage/rocksdb/rocksdb index 251526672516..8486eab5ad1f 160000 --- a/storage/rocksdb/rocksdb +++ b/storage/rocksdb/rocksdb @@ -1 +1 @@ -Subproject commit 2515266725167e2b5002c89867159eb8b977c1f6 +Subproject commit 8486eab5ad1f90a41db093f23514a07cf6e6fc55 From 8809dd1a7b50a28f3418f4494dc23f928143235f Mon Sep 17 00:00:00 2001 From: Aditya A Date: Tue, 6 Feb 2018 15:17:06 +0530 Subject: [PATCH 0498/1221] Bug #26300119 ASSERTION IN PREBUILT->TRX->ISOLATION_LEVEL == TRX_ISO_READ_UNCOMMITTED Fix for Bug #23481444 (#Rb14634) introduced a optimization in which we check the record for end range condition even when the record was not visible to the current transaction.This causes an assertion when we try to read a BLOB data from the row. FIX In case of BLOB data is empty ,skip the record . [#rb18654 Reviwed by Darshan and Jimmy ] --- .../suite/innodb/r/end_range_check_2.result | 28 ++++++++++ .../suite/innodb/t/end_range_check_2.test | 55 +++++++++++++++++++ storage/innobase/row/row0ins.cc | 3 +- storage/innobase/row/row0sel.cc | 19 +++++-- 4 files changed, 99 insertions(+), 6 deletions(-) create mode 100644 mysql-test/suite/innodb/r/end_range_check_2.result create mode 100644 mysql-test/suite/innodb/t/end_range_check_2.test diff --git a/mysql-test/suite/innodb/r/end_range_check_2.result b/mysql-test/suite/innodb/r/end_range_check_2.result new file mode 100644 index 000000000000..156ebc31895d --- /dev/null +++ b/mysql-test/suite/innodb/r/end_range_check_2.result @@ -0,0 +1,28 @@ +# +# Bug #26300119 ASSERTION IN PREBUILT->TRX->ISOLATION_LEVEL == TRX_ISO_READ_UNCOMMITTED +# +CREATE PROCEDURE populate_t1(IN BASE INT, IN SIZE INT) +BEGIN +DECLARE i INT DEFAULT BASE; +WHILE (i <= SIZE) DO +INSERT INTO t1 VALUES (i, repeat('10101010101010101010',2000)); +SET i = i + 1; +END WHILE; +END| +CREATE TABLE t1 ( +pk int, +col_blob_key blob, +primary key (pk) +); +CALL populate_t1(1, 100); +START TRANSACTION; +CALL populate_t1(101, 199); +SET DEBUG_SYNC='before_insertion_of_blob SIGNAL halted_insert WAIT_FOR proceed'; +INSERT INTO t1 VALUES (200, repeat('10101010101010101010',2000));; +SET DEBUG_SYNC='now WAIT_FOR halted_insert'; +SET DEBUG_SYNC='allow_insert SIGNAL proceed'; +SELECT pk, col_blob_key FROM t1 WHERE pk between 99 and 100; +COMMIT; +SET DEBUG_SYNC='RESET'; +DROP PROCEDURE populate_t1; +DROP TABLE t1; diff --git a/mysql-test/suite/innodb/t/end_range_check_2.test b/mysql-test/suite/innodb/t/end_range_check_2.test new file mode 100644 index 000000000000..2c2f55efefa8 --- /dev/null +++ b/mysql-test/suite/innodb/t/end_range_check_2.test @@ -0,0 +1,55 @@ +--source include/have_innodb.inc +--source include/have_innodb_16k.inc +--source include/have_debug.inc + +--echo # +--echo # Bug #26300119 ASSERTION IN PREBUILT->TRX->ISOLATION_LEVEL == TRX_ISO_READ_UNCOMMITTED +--echo # + +connect (con1,localhost,root,,); +connect (con2,localhost,root,,); + +DELIMITER |; +CREATE PROCEDURE populate_t1(IN BASE INT, IN SIZE INT) +BEGIN + DECLARE i INT DEFAULT BASE; + WHILE (i <= SIZE) DO + INSERT INTO t1 VALUES (i, repeat('10101010101010101010',2000)); + SET i = i + 1; + END WHILE; +END| +DELIMITER ;| + +CREATE TABLE t1 ( + pk int, + col_blob_key blob, + primary key (pk) +); + +CALL populate_t1(1, 100); + +connection con1; +START TRANSACTION; +CALL populate_t1(101, 199); +SET DEBUG_SYNC='before_insertion_of_blob SIGNAL halted_insert WAIT_FOR proceed'; +--send INSERT INTO t1 VALUES (200, repeat('10101010101010101010',2000)); + +connection con2; +SET DEBUG_SYNC='now WAIT_FOR halted_insert'; +SET DEBUG_SYNC='allow_insert SIGNAL proceed'; +--disable_result_log +SELECT pk, col_blob_key FROM t1 WHERE pk between 99 and 100; +--enable_result_log + +connection con1; +--reap +COMMIT; + +connection default; +disconnect con1; +disconnect con2; + +SET DEBUG_SYNC='RESET'; +DROP PROCEDURE populate_t1; +DROP TABLE t1; + diff --git a/storage/innobase/row/row0ins.cc b/storage/innobase/row/row0ins.cc index e60184b00a3d..d71c1e15a82b 100644 --- a/storage/innobase/row/row0ins.cc +++ b/storage/innobase/row/row0ins.cc @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2017, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2018, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -3231,6 +3231,7 @@ row_ins_index_entry_big_rec_func( ut_ad(dict_index_is_clust(index)); DEBUG_SYNC_C_IF_THD(thd, "before_row_ins_extern_latch"); + DEBUG_SYNC_C("before_insertion_of_blob"); mtr_start(&mtr); mtr.set_named_space(index->space); diff --git a/storage/innobase/row/row0sel.cc b/storage/innobase/row/row0sel.cc index be9089a4c893..ceab4369a258 100644 --- a/storage/innobase/row/row0sel.cc +++ b/storage/innobase/row/row0sel.cc @@ -3145,17 +3145,24 @@ row_sel_store_mysql_field_func( field_no, &len, heap); if (UNIV_UNLIKELY(!data)) { + /* The externally stored field was not written - yet. This record should only be seen by - recv_recovery_rollback_active() or any + yet. This can happen after optimization which + was done after for Bug#23481444 where we read + last record in the page to find the end range + scan. If we encounter this we just return false + In any other case this row should be only seen + by recv_recovery_rollback_active() or any TRX_ISO_READ_UNCOMMITTED transactions. */ - if (heap != prebuilt->blob_heap) { mem_heap_free(heap); } - ut_a(prebuilt->trx->isolation_level - == TRX_ISO_READ_UNCOMMITTED); + ut_a((!prebuilt->idx_cond && + prebuilt->m_mysql_handler->end_range != NULL) + || (prebuilt->trx->isolation_level + == TRX_ISO_READ_UNCOMMITTED)); + DBUG_RETURN(FALSE); } @@ -5234,6 +5241,8 @@ row_search_mvcc( goto normal_return; } } + + DEBUG_SYNC_C("allow_insert"); } if (set_also_gap_locks From 14ad1673234afd11acdc22f1df9d7cf5d0233067 Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Tue, 6 Feb 2018 14:05:47 +0100 Subject: [PATCH 0499/1221] From 282a6b754b8794cc99d99cbc3c328ab6ae8679b2 Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Tue, 6 Feb 2018 15:23:15 -0700 Subject: [PATCH 0500/1221] TDB-89 : Row count and cardinality drops to zero after bug #1607300 is fixed TDB-107 : tsan detected a data race in the minicron between the 'do' and 'change period' functions - Advances the git submodule commit pointer for PerconaFT to pick up fixes for these two issues. - Will be cherry picked forwward. --- storage/tokudb/PerconaFT | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage/tokudb/PerconaFT b/storage/tokudb/PerconaFT index 809c7ac31f35..f27c8a78167f 160000 --- a/storage/tokudb/PerconaFT +++ b/storage/tokudb/PerconaFT @@ -1 +1 @@ -Subproject commit 809c7ac31f35ecc3e5b8a671d961c7a5e58f8d86 +Subproject commit f27c8a78167ff5d5a7b9228e116376c2c49e30f7 From eb717812dca4575593352c94d6ecb53ce8ce9c22 Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Tue, 6 Feb 2018 15:23:15 -0700 Subject: [PATCH 0501/1221] TDB-89 : Row count and cardinality drops to zero after bug #1607300 is fixed TDB-107 : tsan detected a data race in the minicron between the 'do' and 'change period' functions - Advances the git submodule commit pointer for PerconaFT to pick up fixes for these two issues. - Will be cherry picked forwward. (cherry picked from commit 282a6b754b8794cc99d99cbc3c328ab6ae8679b2) --- storage/tokudb/PerconaFT | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage/tokudb/PerconaFT b/storage/tokudb/PerconaFT index 809c7ac31f35..f27c8a78167f 160000 --- a/storage/tokudb/PerconaFT +++ b/storage/tokudb/PerconaFT @@ -1 +1 @@ -Subproject commit 809c7ac31f35ecc3e5b8a671d961c7a5e58f8d86 +Subproject commit f27c8a78167ff5d5a7b9228e116376c2c49e30f7 From 7df23056f0341e9107f577320d66b4d17e187034 Mon Sep 17 00:00:00 2001 From: Lars Tangvald Date: Tue, 6 Feb 2018 12:41:57 +0100 Subject: [PATCH 0502/1221] Bug#27232163 SPEC.IN/DEB-I NINCORRECTLY MARKS OPENLDAP-DEV(EL) AS COMMERCIAL-ONLY DEPENDENCY Add general build-deps on libldap2-dev and libsasl2-dev, and remove the conditional build-dep for commercial packages. --- packaging/deb-in/CMakeLists.txt | 4 +--- packaging/deb-in/control.in | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/packaging/deb-in/CMakeLists.txt b/packaging/deb-in/CMakeLists.txt index 5b78e202cd66..b7b451c40b8f 100644 --- a/packaging/deb-in/CMakeLists.txt +++ b/packaging/deb-in/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -115,7 +115,6 @@ usr/lib/mysql/plugin/debug/keyring_aws.so SET (DEB_CMAKE_EXTRAS "${DEB_CMAKE_EXTRAS} -DWITH_CURL=${WITH_CURL}") ENDIF() SET (DEB_REMOVEPATTERN "gpl.in") - SET (DEB_CONTROL_BDEPS_EXTRA ",libldap2-dev, libsasl2-dev") ELSE() SET (DEB_PRODUCT "${DEB_BASE_PRODUCT}community") SET (DEB_COPYRIGHT_UPSTREAMNAME "MySQL Server ${MYSQL_BASE_VERSION}") @@ -126,7 +125,6 @@ ELSE() SET (DEB_INSTALL_LICENSEFILE "COPYING") SET (DEB_SERVERVERSION "${DEB_BASE_VERSION}-1") SET (DEB_REMOVEPATTERN "com.in") - SET (DEB_CONTROL_BDEPS_EXTRA "") ENDIF() # Platform specifics. The differences are generally only distro version diff --git a/packaging/deb-in/control.in b/packaging/deb-in/control.in index 5cadcc4c2f03..59f95fabb021 100644 --- a/packaging/deb-in/control.in +++ b/packaging/deb-in/control.in @@ -4,7 +4,7 @@ Section: database Priority: optional Standards-Version: 3.9.6 Homepage: http://www.mysql.com/ -Build-Depends: debhelper (>= 9.0.0), libaio-dev[linux-any], libncurses5-dev (>= 5.0-6), libjson-perl, perl, zlib1g-dev (>= 1:1.1.3-5), po-debconf, psmisc, bison, lsb-release, cmake, fakeroot, libnuma-dev, libmecab-dev, @DEB_CONTROL_BDEPS@ @DEB_CONTROL_BDEPS_EXTRA@ +Build-Depends: debhelper (>= 9.0.0), libaio-dev[linux-any], libncurses5-dev (>= 5.0-6), libjson-perl, libldap2-dev, libsasl2-dev, perl, zlib1g-dev (>= 1:1.1.3-5), po-debconf, psmisc, bison, lsb-release, cmake, fakeroot, libnuma-dev, libmecab-dev, @DEB_CONTROL_BDEPS@ Package: mysql-server From 185b61405d80a6c8af12081a1e42677299746b74 Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Mon, 5 Feb 2018 13:51:22 +0100 Subject: [PATCH 0503/1221] PS-3793: added osx travis config * Added OSX to the build matrix. * Fixed issues with older bash versions on OSX. * Made maintainer_mode optional, as the OSX build results in some warnings, and fixing them would take time. As it's not an officially supported platform, warnings are ok for now. --- .travis.yml | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/.travis.yml b/.travis.yml index 1282dcea9d8a..024a900bde14 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,6 +2,9 @@ dist: trusty sudo: required language: c +env: + global: + - MAINTAINER_MODE=ON matrix: include: - env: COMMAND=clang-test @@ -20,11 +23,14 @@ matrix: - env: GCC=gcc-6 CXX=g++-6 LIBTYPE=system PACKAGES=g++-6 PPA=ubuntu-toolchain-r/test - env: GCC=clang-4.0 CXX=clang++-4.0 LIBTYPE=system PACKAGES="clang-4.0 llvm-4.0-dev" PPA=ubuntu-toolchain-r/test LLVM=llvm-toolchain-trusty-4.0 - env: GCC=clang-5.0 CXX=clang++-5.0 LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" PACKAGES="clang-5.0 llvm-5.0-dev" LLVM=llvm-toolchain-trusty-5.0 + - os: osx + osx_image: xcode9.2 + env: LIBTYPE=bundled GCC=clang CXX=clang++ MAINTAINER_MODE=OFF script: - export CC=$GCC - JOB_NUMBER=$(echo $TRAVIS_JOB_NUMBER | sed -e 's:[0-9][0-9]*\.\(.*\):\1:') - - echo PACKAGES=$PACKAGES PPA=$PPA LLVM=$LLVM JOB_NUMBER=$JOB_NUMBER TRAVIS_BRANCH=$TRAVIS_BRANCH TRAVIS_EVENT_TYPE=$TRAVIS_EVENT_TYPE TRAVIS_PULL_REQUEST=$TRAVIS_PULL_REQUEST + - echo PACKAGES=$PACKAGES PPA=$PPA LLVM=$LLVM JOB_NUMBER=$JOB_NUMBER TRAVIS_BRANCH=$TRAVIS_BRANCH TRAVIS_EVENT_TYPE=$TRAVIS_EVENT_TYPE TRAVIS_PULL_REQUEST=$TRAVIS_PULL_REQUEST MAINTAINER_MODE=$MAINTAINER_MODE # Jobs with a number >= 6 are done only for a pull request - if [ $JOB_NUMBER -ge 6 ] && [ "$TRAVIS_EVENT_TYPE" != "pull_request" ]; then @@ -33,20 +39,22 @@ script: fi # Update required LLVM and Ubuntu Toolchain repositories - - if [ "$LLVM" != "" ]; then + - if [[ "$LLVM" != "" ]]; then curl -sSL "http://apt.llvm.org/llvm-snapshot.gpg.key" | sudo -E apt-key add -; echo "deb http://apt.llvm.org/trusty/ $LLVM main" | sudo tee -a /etc/apt/sources.list > /dev/null; fi - - if [ "$PPA" != "" ]; then + - if [[ "$PPA" != "" ]]; then sudo -E apt-add-repository -y "ppa:$PPA"; fi - - if [ "$LLVM" != "" ] || [ "$PPA" != "" ]; then - sudo -E apt-get -yq update &>> ~/apt-get-update.log; + - if [[ "$LLVM" != "" ]] || [[ "$PPA" != "" ]]; then + sudo -E apt-get -yq update >> ~/apt-get-update.log 2>&1; fi # Download dependencies - - PACKAGES="$PACKAGES cmake cmake-curses-gui libaio-dev libssl-dev libncurses5-dev bison" - - sudo -E apt-get -yq --no-install-suggests --no-install-recommends install $PACKAGES + - if [[ "$TRAVIS_OS_NAME" != "osx" ]]; then + export PACKAGES="$PACKAGES cmake cmake-curses-gui libaio-dev libssl-dev libncurses5-dev bison"; + sudo -E apt-get -yq --no-install-suggests --no-install-recommends install $PACKAGES; + fi - mkdir bin; cd bin - $CC -v - $CXX -v @@ -54,7 +62,7 @@ script: # Test "RelWithDebInfo" compilation - cmake .. -DCMAKE_BUILD_TYPE=RelWithDebInfo - -DMYSQL_MAINTAINER_MODE=ON + -DMYSQL_MAINTAINER_MODE=$MAINTAINER_MODE -DBUILD_CONFIG=mysql_release -DFEATURE_SET=community -DENABLE_DTRACE=OFF @@ -67,7 +75,7 @@ script: - rm -rf * - cmake .. -DCMAKE_BUILD_TYPE=Debug - -DMYSQL_MAINTAINER_MODE=ON + -DMYSQL_MAINTAINER_MODE=$MAINTAINER_MODE -DBUILD_CONFIG=mysql_release -DFEATURE_SET=community -DENABLE_DTRACE=OFF From 64cfbf3b99c337a8ffdd39641a1efeda4db95726 Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Mon, 5 Feb 2018 13:51:22 +0100 Subject: [PATCH 0504/1221] PS-3793: added osx travis config * Added OSX to the build matrix. * Fixed issues with older bash versions on OSX. * Made maintainer_mode optional, as the OSX build results in some warnings, and fixing them would take time. As it's not an officially supported platform, warnings are ok for now. * Made tokudb optional, as the OSX build doesn't support it (cherry picked from commit 185b61405d80a6c8af12081a1e42677299746b74) --- .travis.yml | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/.travis.yml b/.travis.yml index 2e2467f0d05f..80935997d69d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,6 +2,10 @@ dist: trusty sudo: required language: c +env: + global: + - MAINTAINER_MODE=ON + - WITHOUT_TOKUDB=OFF matrix: include: - env: COMMAND=clang-test @@ -20,11 +24,14 @@ matrix: - env: GCC=gcc-6 CXX=g++-6 LIBTYPE=system CMAKE_OPT="-DWITH_READLINE=system" PACKAGES=g++-6 PPA=ubuntu-toolchain-r/test - env: GCC=clang-4.0 CXX=clang++-4.0 LIBTYPE=system CMAKE_OPT="-DWITH_READLINE=system" PACKAGES="clang-4.0 llvm-4.0-dev" PPA=ubuntu-toolchain-r/test LLVM=llvm-toolchain-trusty-4.0 - env: GCC=clang-5.0 CXX=clang++-5.0 LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" PACKAGES="clang-5.0 llvm-5.0-dev" LLVM=llvm-toolchain-trusty-5.0 + - os: osx + osx_image: xcode9.2 + env: LIBTYPE=bundled GCC=clang CXX=clang++ MAINTAINER_MODE=OFF WITHOUT_TOKUDB=ON script: - export CC=$GCC - JOB_NUMBER=$(echo $TRAVIS_JOB_NUMBER | sed -e 's:[0-9][0-9]*\.\(.*\):\1:') - - echo PACKAGES=$PACKAGES PPA=$PPA LLVM=$LLVM JOB_NUMBER=$JOB_NUMBER TRAVIS_BRANCH=$TRAVIS_BRANCH TRAVIS_EVENT_TYPE=$TRAVIS_EVENT_TYPE TRAVIS_PULL_REQUEST=$TRAVIS_PULL_REQUEST + - echo PACKAGES=$PACKAGES PPA=$PPA LLVM=$LLVM JOB_NUMBER=$JOB_NUMBER TRAVIS_BRANCH=$TRAVIS_BRANCH TRAVIS_EVENT_TYPE=$TRAVIS_EVENT_TYPE TRAVIS_PULL_REQUEST=$TRAVIS_PULL_REQUEST MAINTAINER_MODE=$MAINTAINER_MODE WITHOUT_TOKUDB=$WITHOUT_TOKUDB # Jobs with a number >= 6 are done only for a pull request - if [ $JOB_NUMBER -ge 6 ] && [ "$TRAVIS_EVENT_TYPE" != "pull_request" ]; then @@ -33,20 +40,22 @@ script: fi # Update required LLVM and Ubuntu Toolchain repositories - - if [ "$LLVM" != "" ]; then + - if [[ "$LLVM" != "" ]]; then curl -sSL "http://apt.llvm.org/llvm-snapshot.gpg.key" | sudo -E apt-key add -; echo "deb http://apt.llvm.org/trusty/ $LLVM main" | sudo tee -a /etc/apt/sources.list > /dev/null; fi - - if [ "$PPA" != "" ]; then + - if [[ "$PPA" != "" ]]; then sudo -E apt-add-repository -y "ppa:$PPA"; fi - - if [ "$LLVM" != "" ] || [ "$PPA" != "" ]; then - sudo -E apt-get -yq update &>> ~/apt-get-update.log; + - if [[ "$LLVM" != "" ]] || [[ "$PPA" != "" ]]; then + sudo -E apt-get -yq update >> ~/apt-get-update.log 2>&1; fi # Download dependencies - - PACKAGES="$PACKAGES cmake cmake-curses-gui libaio-dev libssl-dev libncurses5-dev libevent-dev bison" - - sudo -E apt-get -yq --no-install-suggests --no-install-recommends install $PACKAGES + - if [[ "$TRAVIS_OS_NAME" != "osx" ]]; then + export PACKAGES="$PACKAGES cmake cmake-curses-gui libaio-dev libssl-dev libncurses5-dev libevent-dev bison"; + sudo -E apt-get -yq --no-install-suggests --no-install-recommends install $PACKAGES; + fi - mkdir bin; cd bin - $CC -v - $CXX -v @@ -54,13 +63,14 @@ script: # Test "RelWithDebInfo" compilation - cmake .. -DCMAKE_BUILD_TYPE=RelWithDebInfo - -DMYSQL_MAINTAINER_MODE=ON + -DMYSQL_MAINTAINER_MODE=$MAINTAINER_MODE -DBUILD_CONFIG=mysql_release -DFEATURE_SET=community -DENABLE_DTRACE=OFF -DWITH_SSL=$LIBTYPE -DWITH_ZLIB=$LIBTYPE -DWITH_LIBEVENT=$LIBTYPE + -DWITHOUT_TOKUDB=$WITHOUT_TOKUDB -DENABLE_DOWNLOADS=1 $CMAKE_OPT - make -j2 @@ -69,13 +79,14 @@ script: - rm -rf * - cmake .. -DCMAKE_BUILD_TYPE=Debug - -DMYSQL_MAINTAINER_MODE=ON + -DMYSQL_MAINTAINER_MODE=$MAINTAINER_MODE -DBUILD_CONFIG=mysql_release -DFEATURE_SET=community -DENABLE_DTRACE=OFF -DWITH_SSL=$LIBTYPE -DWITH_ZLIB=$LIBTYPE -DWITH_LIBEVENT=$LIBTYPE + -DWITHOUT_TOKUDB=$WITHOUT_TOKUDB -DENABLE_DOWNLOADS=1 $CMAKE_OPT - make -j2 From 02077e8be4c1cac1c727f27172bb50951abf3c98 Mon Sep 17 00:00:00 2001 From: Aakanksha Verma Date: Thu, 8 Feb 2018 01:25:10 +0530 Subject: [PATCH 0505/1221] FOLLOW-UP FIX FOR BUG#27141613 PROBLEM Issue found during ntest run is a regression of Bug #27141613. The issue is basically when index is being freed due to an error during its creation,when the index isn't added to dictionary cache its field columns are not set, the derefrencing of null col pointer during the clean of index from the virtual column's leads to a crash. NOTE: Also test i_innodb.virtual_debug was failing on 32k page size and above for the newly added scenario. Fixed that. FIX Added a check that if only the index is cached , the virtual index freeing from the virtual cols index list is performed. Reviewed by: Satya Bodapati RB: 18670 --- storage/innobase/dict/dict0dict.cc | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/storage/innobase/dict/dict0dict.cc b/storage/innobase/dict/dict0dict.cc index 818a2e164793..8911d60222c1 100644 --- a/storage/innobase/dict/dict0dict.cc +++ b/storage/innobase/dict/dict0dict.cc @@ -2560,7 +2560,10 @@ being freed. @param[in] index Index being freed */ void dict_index_remove_from_v_col_list(dict_index_t* index) { - + /* Index is not completely formed */ + if (!index->cached) { + return; + } if (dict_index_has_virtual(index)) { const dict_col_t* col; const dict_v_col_t* vcol; From 433d6c7f19bd4bc6320efcb057416819d1993021 Mon Sep 17 00:00:00 2001 From: Sergei Glushchenko Date: Thu, 18 May 2017 16:54:14 +0700 Subject: [PATCH 0506/1221] Bug 1626559: Test `main.audit_log_default_db' is unstable Sometimes "SHOW WARNINGS" appears in the audit log around UNINSTALL PLUGIN / INSTALL PLUGIN. This is the warning which MySQL issue about plugin being in use. Normally warning should not make it to audit log because test case truncates log after UNINSTALL PLUGIN. But sometimes mysql-test picks this warning up after plugin has been reinstalled and it gets logged into audit log. This patch makes sure that test execution continues only when plugin disappeared from the `mysql.plgins', which happens after `deinit' is called and all plugin is fully shut down. --- mysql-test/r/audit_log_default_db.result | 6 ++---- mysql-test/t/audit_log_default_db.test | 12 +++++++----- mysql-test/t/audit_log_echo.inc | 5 +++-- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/mysql-test/r/audit_log_default_db.result b/mysql-test/r/audit_log_default_db.result index ad9cf83300a9..f71fefaffab9 100644 --- a/mysql-test/r/audit_log_default_db.result +++ b/mysql-test/r/audit_log_default_db.result @@ -18,9 +18,6 @@ GRANT ALL PRIVILEGES ON ąžąžąžą.* TO 'user2'@'%'; UNINSTALL PLUGIN audit_log; Warnings: Warning 1620 Plugin is busy and will be uninstalled on shutdown -SELECT * FROM t; -a -db2 INSTALL PLUGIN audit_log SONAME 'audit_log.so'; SELECT * FROM t; a @@ -60,7 +57,8 @@ set global audit_log_flush= ON; =================================================================== "Query","","","install_plugin","",0,"INSTALL PLUGIN audit_log SONAME 'audit_log.so'","root[root] @ localhost []","localhost","","","" "Quit","","","",0,"root","root","","","localhost","","test" -"Query","","","select","",0,"SELECT * FROM t","user1[user1] @ localhost []","localhost","","","" +"Connect","","","",0,"user1","user1","","","localhost","","db2" +"Query","","","select","",0,"SELECT * FROM t","user1[user1] @ localhost []","localhost","","","db2" "Query","","","change_db","",0,"use `db1`","user1[user1] @ localhost []","localhost","","","db1" "Change user","","","",1044,"user2","user2","","","localhost","","" "Quit","","","",0,"user1","user1","","","localhost","","db1" diff --git a/mysql-test/t/audit_log_default_db.test b/mysql-test/t/audit_log_default_db.test index 552eef0ba496..b3ac5d84d523 100644 --- a/mysql-test/t/audit_log_default_db.test +++ b/mysql-test/t/audit_log_default_db.test @@ -31,21 +31,23 @@ GRANT ALL PRIVILEGES ON ąžąžąžą.* TO 'user2'@'%'; # truncate audit log UNINSTALL PLUGIN audit_log; +let $wait_condition= + SELECT count(*) = 0 FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE 'audit_log'; +--source include/wait_condition.inc --remove_file $log_file -connect (test,localhost,user1,111,db2,); -connection test; -SELECT * FROM t; - --source include/count_sessions.inc connect (root,localhost,root,,,); connection root; INSTALL PLUGIN audit_log SONAME 'audit_log.so'; disconnect root; -connection test; +connection default; --source include/wait_until_count_sessions.inc +connect (test,localhost,user1,111,db2,); +connection test; SELECT * FROM t; + use `db1`; --error ER_DBACCESS_DENIED_ERROR change_user user2,111,db1; diff --git a/mysql-test/t/audit_log_echo.inc b/mysql-test/t/audit_log_echo.inc index 0ec522b79f32..800b4f23ebd6 100644 --- a/mysql-test/t/audit_log_echo.inc +++ b/mysql-test/t/audit_log_echo.inc @@ -12,8 +12,9 @@ perl; # change_user does automatic reconnect and messing up 'SET NAMES' around next; } - if ($line =~ /Threads_connected/ || $line =~ /SELECT \d <= \d/) { - # part of wait_until_count_sessions.inc script + if ($line =~ /Threads_connected/ || $line =~ /SELECT \d <= \d/ + || /SELECT.*FROM.*INFORMATION_SCHEMA.PLUGINS/) { + # part of wait_until_count_sessions.inc and wait_condition.inc scripts next; } if ($line =~ /^"Audit"/) { From 81de505aa1b4f4b959ca2d98d6400125fde30cc6 Mon Sep 17 00:00:00 2001 From: Venkatesh Venugopal Date: Thu, 8 Feb 2018 12:27:40 +0530 Subject: [PATCH 0507/1221] Bug#25407335 SLAVE DON'T REPORT SECONDS_BEHIND_MASTER WHEN RUNNING SLAVE_PARALLEL_WORKERS > 0 Problem: -------- Slave does not report Seconds_Behind_Master when running with MTS. How Seconds_Behind_Master is calculated? ---------------------------------------- When the slave is actively processing updates, Seconds_Behind_Master shows the difference between the current timestamp on the slave and the original timestamp logged on the master for the event currently being processed on the slave. Seconds_Behind_Master= Current timestamp - mi->rli->last_master_timestamp - mi->clock_diff_with_master In some cases, slave's clock can be different from master's clock. In order to support non-identical clocks, 'clock_diff_with_master' is also taken into consideration so that SBM is correct. Description: ------------ Coordinator thread, when it finds out that worker queue(GAQ) is empty, sets rli->last_master_timestamp to zero. For any further events, rli->last_master_timestamp is not updated and thus SBM doesn't show replication lag. There is also another issue associated with this bug. When a worker commits a transaction, mts_checkpoint_routine calls rli->reset_notified_checkpoint function where it sets the rli->last_master_timestamp. While doing that, instead of fetching the timestamp from the first group of the Slave_committed_queue, it fetches the timestamp from the last checkpoint and assigns it to rli->last_master_timestamp. This needs to be fixed as it results in inaccurate SBM. Fix: ---- rli->last_master_timestamp is assigned from the first event from the master when all slave workers are waiting for events from the Coordinator. When a worker commits a transaction, the coordinator thread fetches the timestamp from the first group of the Slave_committed_queue and assigns to rli->last_master_timestamp. --- ...conds_behind_master_mts_logical_clock.test | 336 ++++++++++++++++++ ...conds_behind_master_mts_type_database.test | 268 ++++++++++++++ .../include/wait_for_mts_checkpoint.inc | 12 + .../r/rpl_seconds_behind_master_mts.result | 228 ++++++++++++ .../rpl/t/rpl_seconds_behind_master_mts.test | 48 +++ sql/log_event.cc | 3 +- sql/rpl_rli.cc | 21 +- sql/rpl_rli.h | 6 +- sql/rpl_rli_pdb.h | 10 +- sql/rpl_slave.cc | 44 ++- 10 files changed, 955 insertions(+), 21 deletions(-) create mode 100644 mysql-test/extra/rpl_tests/rpl_seconds_behind_master_mts_logical_clock.test create mode 100644 mysql-test/extra/rpl_tests/rpl_seconds_behind_master_mts_type_database.test create mode 100644 mysql-test/include/wait_for_mts_checkpoint.inc create mode 100644 mysql-test/suite/rpl/r/rpl_seconds_behind_master_mts.result create mode 100644 mysql-test/suite/rpl/t/rpl_seconds_behind_master_mts.test diff --git a/mysql-test/extra/rpl_tests/rpl_seconds_behind_master_mts_logical_clock.test b/mysql-test/extra/rpl_tests/rpl_seconds_behind_master_mts_logical_clock.test new file mode 100644 index 000000000000..d9decabd13e3 --- /dev/null +++ b/mysql-test/extra/rpl_tests/rpl_seconds_behind_master_mts_logical_clock.test @@ -0,0 +1,336 @@ +# ==== Purpose ==== +# +# Verify that Seconds_Behind_Master is calculated correctly on a +# Multi-threaded Slave when slave_parallel_type = 'LOGICAL_CLOCK'. +# The test covers these scenarios: +# +# 1) With two workers, check if Seconds_Behind_Master is calculated +# correctly when two statements are applied in parallel on one database +# and both the workers are blocked to to lock. +# +# 2) With two workers, check if Seconds_Behind_Master is calculated +# correctly when the first worker is blocked. +# +# 3) With three workers, check if Seconds_Behind_Master is calculated +# correctly when two workers working on table from the same database and +# 3rd worker working on another database. + +--source include/start_slave.inc + +############################################################################### +# Scenario 1: On slave, two statements are applied in parallel on one database. +# Both workers are blocked. +############################################################################### +--echo # Scenario 1: With two workers, check if Seconds_Behind_Master is +--echo # calculated correctly when two statements are applied in parallel on +--echo # one database and both the workers are blocked to to lock. +connect (master2, localhost, root, , ); + +connection slave; + +connection master; +USE test; +CREATE TABLE t1 (a int); +CREATE TABLE t2 (a int); + +# We need one statement to be commited so that the parallel +# statements have a common parent commit +INSERT INTO t1 SET a=1; +--source include/sync_slave_sql_with_master.inc + +connection slave1; +LOCK TABLE test.t1 WRITE, test.t2 WRITE; + +--connection master1 +let $start= `SELECT UNIX_TIMESTAMP()`; +BEGIN; +INSERT INTO t1 SET a=2; + +--connection master2 +BEGIN; +INSERT INTO t2 SET a=4; + +--connection master1 +COMMIT; +--connection master2 +COMMIT; + +connection master; +--source include/sync_slave_io_with_master.inc + +# Wait until all workers are blocked by locks. It implies that all +# transactions are registered into the order commit queue. +let $wait_condition= SELECT count(*) = 2 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE State = 'Waiting for table metadata lock'; +--source include/wait_condition.inc +let $wait_condition= SELECT count(*) = 0 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE State = 'Executing event' + OR State = 'update'; +--source include/wait_condition.inc + +# Sleep on slave so we were at least 3 seconds behind the master +--real_sleep 3 +--source include/wait_for_mts_checkpoint.inc + +let $sbm= query_get_value("SHOW SLAVE STATUS", Seconds_Behind_Master, 1); +let $stop= `SELECT UNIX_TIMESTAMP()`; +let $upper_bound= `SELECT $stop - $start`; +let $assert_text= Seconds_Behind_Master must be between 3 and upper_bound; +let $assert_cond= 3 <= $sbm AND $sbm <= $upper_bound; +--source include/assert.inc + +# Unlock tables and allow both workers to complete +connection slave1; +UNLOCK TABLES; + +connection master; +--source include/sync_slave_sql_with_master.inc + +let $wait_condition= SELECT count(*) = 3 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE State = 'Waiting for an event from Coordinator'; +--source include/wait_condition.inc +--source include/wait_for_mts_checkpoint.inc + +# Now both workers have completed. Thus Seconds_Behind_Master shoud be equal to 0. +let $sbm= query_get_value("SHOW SLAVE STATUS", Seconds_Behind_Master, 1); +let $assert_text= Seconds_Behind_Master must be 0; +let $assert_cond= $sbm = 0; +--source include/assert.inc + +############################################################################### +# Scenario 2: Now only the first worker is blocked. Make sure there is a parent +# commit +############################################################################### +--echo # Scenario 2: With two workers, check if Seconds_Behind_Master is +--echo # calculated correctly when the first worker is blocked. + +connection master; +INSERT INTO t1 SET a=1; +--source include/sync_slave_sql_with_master.inc + +connection slave1; +LOCK TABLE test.t1 WRITE; + +connection slave2; +LOCK TABLE test.t2 WRITE; + +--connection master1 +let $start= `SELECT UNIX_TIMESTAMP()`; + +BEGIN; +INSERT INTO t1 SET a=2; + +--connection master2 +BEGIN; +INSERT INTO t2 SET a=3; + +--connection master1 +COMMIT; +--connection master2 +COMMIT; + +connection master; +--source include/sync_slave_io_with_master.inc + +# Wait until both workers are queued and blocked. +let $wait_condition= SELECT count(*) = 2 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE State = 'Waiting for table metadata lock'; +--source include/wait_condition.inc +let $wait_condition= SELECT count(*) = 0 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE State = 'Executing event' + OR State = 'update'; +--source include/wait_condition.inc + +# Now release one worker +connection slave1; +UNLOCK TABLES; + +# Wait until released worker completes its taks +let $wait_condition= SELECT count(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE State = 'Waiting for table metadata lock'; +--source include/wait_condition.inc +let $wait_condition= SELECT count(*) = 0 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE State = 'Executing event' + OR State = 'update'; +--source include/wait_condition.inc + +# Sleep for 2 seconds so Seconds_Behind_Master was at least 2 +--real_sleep 2 + +--source include/wait_for_mts_checkpoint.inc + +let $sbm= query_get_value("SHOW SLAVE STATUS", Seconds_Behind_Master, 1); +let $stop= `SELECT UNIX_TIMESTAMP()`; +let $upper_bound= `SELECT $stop - $start`; +let $assert_text= Seconds_Behind_Master must be between 2 and upper_bound; +let $assert_cond= 2 <= $sbm AND $sbm <= $upper_bound; +--source include/assert.inc + +connection slave2; +UNLOCK TABLES; + +--connection master +--source include/sync_slave_sql_with_master.inc + +# All workers should be done by now. +let $wait_condition= SELECT count(*) = 3 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE State = 'Waiting for an event from Coordinator'; +--source include/wait_condition.inc +--source include/wait_for_mts_checkpoint.inc + +let $sbm= query_get_value("SHOW SLAVE STATUS", Seconds_Behind_Master, 1); +let $assert_text= Seconds_Behind_Master must be 0; +let $assert_cond= $sbm = 0; +--source include/assert.inc + +############################################################################### +# Scenario 3: Now there are 3 workers working in pararell. Two workers working +# on table from the same database and a 3rd worker working on another database +############################################################################### +--echo # Scenario 3: With three workers, check if Seconds_Behind_Master is +--echo # calculated correctly when two workers working on table from the same +--echo # database and 3rd worker working on another database. + +connection master; +CREATE DATABASE second_test; +CREATE TABLE second_test.t3 (f1 INT); + +# Make sure there is a parent commit +INSERT INTO test.t1 SET a=1; +--sync_slave_with_master + +# Lock all tables to block all workers. +connection slave1; +LOCK TABLE test.t1 WRITE; + +connection slave2; +LOCK TABLE test.t2 WRITE; + +connection slave3; +LOCK TABLE second_test.t3 WRITE; + +connect (master_second_test, localhost, root, , ); + +--connection master_second_test +BEGIN; +INSERT INTO second_test.t3 VALUES (1); + +--connection master1 +let $start= `SELECT UNIX_TIMESTAMP()`; +BEGIN; +INSERT INTO test.t1 SET a=2; + +--connection master2 +BEGIN; +INSERT INTO test.t2 SET a=3; + +--connection master_second_test +COMMIT; +--connection master1 +COMMIT; +--connection master2 +COMMIT; + +--source include/sync_slave_io_with_master.inc + +# Wait for all workers to be queued +# There should be two workers waiting for locks on test database +let $wait_condition= SELECT count(*) = 2 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE State = 'Waiting for table metadata lock' + AND Info LIKE 'INSERT INTO test%'; +--source include/wait_condition.inc + +# And one worker waiting for the lock on second_database +let $wait_condition= SELECT count(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE State = 'Waiting for table metadata lock' + AND Info LIKE 'INSERT INTO second_test%'; +--source include/wait_condition.inc + +# Make sure that there are 3 overall at the same point in time +let $wait_condition= SELECT count(*) = 3 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE State = 'Waiting for table metadata lock'; +--source include/wait_condition.inc +let $wait_condition= SELECT count(*) = 0 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE State = 'Executing event' + OR State = 'update'; +--source include/wait_condition.inc + +# Wait for 2 seconds so Second_Behind_Master is at least 2 +--real_sleep 2 +--source include/wait_for_mts_checkpoint.inc + +let $sbm= query_get_value("SHOW SLAVE STATUS", Seconds_Behind_Master, 1); +let $stop= `SELECT UNIX_TIMESTAMP()`; +let $upper_bound= `SELECT $stop - $start`; +let $assert_text= Seconds_Behind_Master must be between 2 and upper_bound; +let $assert_cond= 2 <= $sbm AND $sbm <= $upper_bound; +--source include/assert.inc + +# Lets finish concurrent write on second_test and check if workers on test report +# correct Seconds_Behind_Master +connection slave3; +UNLOCK TABLES; + +--real_sleep 1 + +connection slave; +# Wait till worker on second_test db finishes +let $wait_condition= SELECT count(*) = 0 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE State = 'Waiting for table metadata lock' + AND Info LIKE 'INSERT INTO second_test%'; +--source include/wait_condition.inc + +# There should be the remaining two workers hanging on test db +let $wait_condition= SELECT count(*) = 2 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE State = 'Waiting for table metadata lock' + AND Info LIKE 'INSERT INTO test%'; +--source include/wait_condition.inc +let $wait_condition= SELECT count(*) = 0 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE State = 'Executing event' + OR State = 'update'; +--source include/wait_condition.inc +--source include/wait_for_mts_checkpoint.inc + +let $sbm= query_get_value("SHOW SLAVE STATUS", Seconds_Behind_Master, 1); +let $stop= `SELECT UNIX_TIMESTAMP()`; +let $upper_bound= `SELECT $stop - $start`; +let $assert_text= Seconds_Behind_Master must be between 3 and upper_bound; +let $assert_cond= 3 <= $sbm AND $sbm <= $upper_bound; +--source include/assert.inc + +# Lets finish worker writing to t1 +connection slave1; +UNLOCK TABLES; + +# There should be only one worker left +let $wait_condition= SELECT count(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE State = 'Waiting for table metadata lock'; +--source include/wait_condition.inc +let $wait_condition= SELECT count(*) = 0 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE State = 'Executing event' + OR State = 'update'; +--source include/wait_condition.inc + +--real_sleep 1 + +--source include/wait_for_mts_checkpoint.inc + +let $sbm= query_get_value("SHOW SLAVE STATUS", Seconds_Behind_Master, 1); +let $stop= `SELECT UNIX_TIMESTAMP()`; +let $upper_bound= `SELECT $stop - $start`; +let $assert_text= Seconds_Behind_Master must be between 4 and upper_bound; +let $assert_cond= 4 <= $sbm AND $sbm <= $upper_bound; +--source include/assert.inc + +# Release last worker +connection slave2; +UNLOCK TABLE; + +# Wait for all workers to be done +let $wait_condition= SELECT count(*) = 3 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE State = 'Waiting for an event from Coordinator'; +--source include/wait_condition.inc + +# All catched up Seconds_Behind_Master should be 0. Lets wait some more to see if it does not increase +# Seconds_Behind_Master + +--real_sleep 1 +--source include/wait_for_mts_checkpoint.inc + +let $sbm= query_get_value("SHOW SLAVE STATUS", Seconds_Behind_Master, 1); +let $assert_text= Seconds_Behind_Master must be 0; +let $assert_cond= $sbm = 0; +--source include/assert.inc + +# +# Cleanup +# +connection master; +DROP TABLE test.t1; +DROP TABLE test.t2; +DROP DATABASE second_test; + +--source include/sync_slave_sql_with_master.inc +--source include/stop_slave.inc diff --git a/mysql-test/extra/rpl_tests/rpl_seconds_behind_master_mts_type_database.test b/mysql-test/extra/rpl_tests/rpl_seconds_behind_master_mts_type_database.test new file mode 100644 index 000000000000..8cdb35fa3eb1 --- /dev/null +++ b/mysql-test/extra/rpl_tests/rpl_seconds_behind_master_mts_type_database.test @@ -0,0 +1,268 @@ +# ==== Purpose ==== +# +# Verify that Seconds_Behind_Master is calculated correctly on a +# Multi-threaded Slave when slave_parallel_type = 'DATABASE'. +# The test covers these scenarios: +# +# 1) With two workers, check if Seconds_Behind_Master is calculated correctly +# when all the workers are waiting. +# +# 2) With two workers, check if Seconds_Behind_Master is calculated correctly +# when first worker compeletes first. +# +# 3) With three workers, check if Seconds_Behind_Master is calculated correctly +# when second worker completes first. + +--source include/start_slave.inc + +############################################################################### +# Scenario 1: Slave executes insert to t1 and is blocked due to lock on t1, +# after 3s another worker on slave starts to execute insert to t2, this worker +# is also blocked due to lock on t2. After 2 more seconds we check +# Seconds_Behind_Master. Since 1st worker is still executing insert to t1, +# this means that slave is at least 5s behind master. +############################################################################### +--echo # Scenario 1: With two workers, check if Seconds_Behind_Master is +--echo # calculated correctly when all the workers are waiting. +connect (slave2, 127.0.0.1, root, , test, $SLAVE_MYPORT, ); + +connection master; +CREATE TABLE t1 (f1 INT); +CREATE DATABASE test2; +USE test2; +CREATE TABLE t2 (f1 INT); +--source include/sync_slave_sql_with_master.inc + +connection slave1; +LOCK TABLE test.t1 WRITE; + +connection slave2; +LOCK TABLE test2.t2 WRITE; + +connection master; +USE test; +let $start= `SELECT UNIX_TIMESTAMP()`; +INSERT INTO t1 VALUES (1); + +--real_sleep 3 + +USE test2; +let $start2= `SELECT UNIX_TIMESTAMP()`; +INSERT INTO t2 VALUES (1); +--real_sleep 2 + +# Wait till all events are written to relay-log +--source include/sync_slave_io_with_master.inc + +# Check that two workers are waiting for metadata lock +# and no worker is executing the event. +let $wait_condition= SELECT count(*) = 2 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE State = 'Waiting for table metadata lock'; +--source include/wait_condition.inc +let $wait_condition= SELECT count(*) = 0 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE State = 'Executing event' + OR State = 'update'; +--source include/wait_condition.inc +--source include/wait_for_mts_checkpoint.inc + +# Calculate the upper bound for Seconds_Behind_Master. +# $upper_bound = "timestamp on slave after reading Seconds_Behind_Master" - +# "timestamp on master before the insert statement". +let $sbm= query_get_value("SHOW SLAVE STATUS", Seconds_Behind_Master, 1); +let $stop= `SELECT UNIX_TIMESTAMP()`; +let $upper_bound= `SELECT $stop - $start`; +let $assert_text= Seconds_Behind_Master must be between 5 and upper_bound; +let $assert_cond= 5 <= $sbm AND $sbm <= $upper_bound; +--source include/assert.inc + +connection slave1; +UNLOCK TABLES; + +# Check that one worker is still running (waiting) +let $wait_condition= SELECT count(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE State = 'Waiting for table metadata lock'; +--source include/wait_condition.inc +let $wait_condition= SELECT count(*) = 0 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE State = 'Executing event' + OR State = 'update'; +--source include/wait_condition.inc +--source include/wait_for_mts_checkpoint.inc + +# Since we have unlocked test.t1, now the first worker which was 5s behind +# the master has completed its task. However the second worker is still +# waiting for lock. This means that Seconds_Behind_Master should now be 2s +# or slightly more. +let $sbm= query_get_value("SHOW SLAVE STATUS", Seconds_Behind_Master, 1); +let $stop= `SELECT UNIX_TIMESTAMP()`; +let $upper_bound= `SELECT $stop - $start2`; +let $assert_text= Seconds_Behind_Master must be between 2 and upper_bound; +let $assert_cond= 2 <= $sbm AND $sbm <= $upper_bound; +--source include/assert.inc + +connection slave2; +UNLOCK TABLES; + +--connection master +--source include/sync_slave_sql_with_master.inc + +let $wait_condition= SELECT count(*) = 4 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE State = 'Waiting for an event from Coordinator'; +--source include/wait_condition.inc +--source include/wait_for_mts_checkpoint.inc + +# Now both the workers have completed their tasks and no new tasks have arrived, thus +# Seconds_Behind_Master should be equal to 0. +let $sbm= query_get_value("SHOW SLAVE STATUS", Seconds_Behind_Master, 1); +let $assert_text= Seconds_Behind_Master must be 0; +let $assert_cond= $sbm = 0; +--source include/assert.inc + +############################################################################### +# Scenario 2: In this scenario we check if Seconds_Behind_Master is updated +# correctly when first worker compeletes its tasks first. +############################################################################### +--echo # Scenario 2: With two workers, check if Seconds_Behind_Master is +--echo # calculated correctly when first worker compeletes first. + +connection slave2; +LOCK TABLE test2.t2 WRITE; + +connection master; +USE test; +let $start= `SELECT UNIX_TIMESTAMP()`; +INSERT INTO t1 VALUES (1); + +--real_sleep 3 + +USE test2; +let $start2= `SELECT UNIX_TIMESTAMP()`; +INSERT INTO t2 VALUES (1); +--real_sleep 2 + +# Wait till all events are written to relay-log +--source include/sync_slave_io_with_master.inc + +# Check that one worker is still running +let $wait_condition= SELECT count(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE State = 'Waiting for table metadata lock'; +--source include/wait_condition.inc +let $wait_condition= SELECT count(*) = 0 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE State = 'Executing event' + OR State = 'update'; +--source include/wait_condition.inc +--source include/wait_for_mts_checkpoint.inc + +# First worker has completed its task, second worker is still executing. +# This means that Seconds_Behind_Master should now be 2s or slightly more. +let $sbm= query_get_value("SHOW SLAVE STATUS", Seconds_Behind_Master, 1); +let $stop= `SELECT UNIX_TIMESTAMP()`; +let $upper_bound= `SELECT $stop - $start2`; +let $assert_text= Seconds_Behind_Master must be between 2 and upper_bound; +let $assert_cond= 2 <= $sbm AND $sbm <= $upper_bound; +--source include/assert.inc + +connection slave2; +UNLOCK TABLES; + +# Check that all the workers are free. +let $wait_condition= SELECT count(*) = 4 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE State = 'Waiting for an event from Coordinator'; +--source include/wait_condition.inc +--source include/wait_for_mts_checkpoint.inc + +let $sbm= query_get_value("SHOW SLAVE STATUS", Seconds_Behind_Master, 1); +let $assert_text= Seconds_Behind_Master must be 0; +let $assert_cond= $sbm = 0; +--source include/assert.inc + +############################################################################### +# Scenario 3: Three workers are running. In this scenario we check if correct +# Seconds_Behind_Master is calculated when second worker completes first. +############################################################################### +--echo # Scenario 3: With three workers, check if Seconds_Behind_Master is +--echo # calculated correctly when second worker completes first. +--connection master + +CREATE DATABASE test3; +USE test3; +CREATE TABLE t3 (f1 INT); +--source include/sync_slave_sql_with_master.inc + +connect (slave3, 127.0.0.1, root, , test, $SLAVE_MYPORT, ); + +connection slave1; +LOCK TABLE test.t1 WRITE; + +connection slave3; +LOCK TABLE test3.t3 WRITE; + +connection master; +let $start= `SELECT UNIX_TIMESTAMP()`; + +USE test; +INSERT INTO t1 VALUES (1); +--real_sleep 3 + +use test2; +INSERT INTO t2 VALUES (1); +--real_sleep 2 + +USE test3; +let $start3= `SELECT UNIX_TIMESTAMP()`; +INSERT INTO t3 VALUES (1); +--real_sleep 2 + +--source include/sync_slave_io_with_master.inc + +# Check that two workers are still running +let $wait_condition= SELECT count(*) = 2 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE State = 'Waiting for table metadata lock'; +--source include/wait_condition.inc +let $wait_condition= SELECT count(*) = 0 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE State = 'Executing event' + OR State = 'update'; +--source include/wait_condition.inc +--source include/wait_for_mts_checkpoint.inc + +# Only second worker has completed. This means that longest running worker is +# the first one, thus slave should be at least 7s behind the master. +let $sbm= query_get_value("SHOW SLAVE STATUS", Seconds_Behind_Master, 1); +let $stop= `SELECT UNIX_TIMESTAMP()`; +let $upper_bound= `SELECT $stop - $start`; +let $assert_text= Seconds_Behind_Master must be between 7 and upper_bound; +let $assert_cond= 7 <= $sbm AND $sbm <= $upper_bound; +--source include/assert.inc + +connection slave1; +UNLOCK TABLES; + +# Check that last worker is still running +let $wait_condition= SELECT count(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE State = 'Waiting for table metadata lock'; +--source include/wait_condition.inc +let $wait_condition= SELECT count(*) = 0 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE State = 'Executing event' + OR State = 'update'; +--source include/wait_condition.inc +--source include/wait_for_mts_checkpoint.inc + +# Only third worker is running. This means that slave should be at least 2s +# behind the master. +let $sbm= query_get_value("SHOW SLAVE STATUS", Seconds_Behind_Master, 1); +let $stop= `SELECT UNIX_TIMESTAMP()`; +let $upper_bound= `SELECT $stop - $start3`; +let $assert_text= Seconds_Behind_Master must be between 2 and upper_bound; +let $assert_cond= 2 <= $sbm AND $sbm <= $upper_bound; +--source include/assert.inc + +connection slave3; +UNLOCK TABLES; + +# Now all four workers have completed. Seconds_Behind_Master should be 0. +let $wait_condition= SELECT count(*) = 4 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE State = 'Waiting for an event from Coordinator'; +--source include/wait_condition.inc +--source include/wait_for_mts_checkpoint.inc + +let $sbm= query_get_value("SHOW SLAVE STATUS", Seconds_Behind_Master, 1); +let $assert_text= Seconds_Behind_Master must be 0; +let $assert_cond= $sbm = 0; +--source include/assert.inc + +# +# Cleanup +# +connection master; +DROP TABLE test.t1; +DROP DATABASE test2; +DROP DATABASE test3; + +--source include/sync_slave_sql_with_master.inc +--source include/stop_slave.inc diff --git a/mysql-test/include/wait_for_mts_checkpoint.inc b/mysql-test/include/wait_for_mts_checkpoint.inc new file mode 100644 index 000000000000..af9cf6006b56 --- /dev/null +++ b/mysql-test/include/wait_for_mts_checkpoint.inc @@ -0,0 +1,12 @@ +# ==== Purpose ==== +# +# Waits until mts_checkpoint_routine has been fully +# executed - from the beginning till the end +# +--let $debug_point= mts_checkpoint +--source include/add_debug_point.inc +#If end was hit before start - clear it +SET DEBUG_SYNC="RESET"; +SET DEBUG_SYNC="now WAIT_FOR mts_checkpoint_start"; +SET DEBUG_SYNC="now WAIT_FOR mts_checkpoint_end"; +--source include/remove_debug_point.inc diff --git a/mysql-test/suite/rpl/r/rpl_seconds_behind_master_mts.result b/mysql-test/suite/rpl/r/rpl_seconds_behind_master_mts.result new file mode 100644 index 000000000000..d009f093ff81 --- /dev/null +++ b/mysql-test/suite/rpl/r/rpl_seconds_behind_master_mts.result @@ -0,0 +1,228 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +# Adding debug point 'dbug.mts.force_clock_diff_eq_0' to @@GLOBAL.debug +SET @save_slave_parallel_type = @@GLOBAL.slave_parallel_type; +SET @save.slave_parallel_workers= @@global.slave_parallel_workers; +SET @save_slave_transaction_retries= @@global.slave_transaction_retries; +# Test for PARALLEL_DATABASE +SET GLOBAL slave_parallel_type = 'DATABASE'; +SET @@global.slave_parallel_workers= 4; +include/start_slave.inc +# Scenario 1: With two workers, check if Seconds_Behind_Master is +# calculated correctly when all the workers are waiting. +CREATE TABLE t1 (f1 INT); +CREATE DATABASE test2; +USE test2; +CREATE TABLE t2 (f1 INT); +include/sync_slave_sql_with_master.inc +LOCK TABLE test.t1 WRITE; +LOCK TABLE test2.t2 WRITE; +USE test; +INSERT INTO t1 VALUES (1); +USE test2; +INSERT INTO t2 VALUES (1); +include/sync_slave_io_with_master.inc +# Adding debug point 'mts_checkpoint' to @@GLOBAL.debug +SET DEBUG_SYNC="RESET"; +SET DEBUG_SYNC="now WAIT_FOR mts_checkpoint_start"; +SET DEBUG_SYNC="now WAIT_FOR mts_checkpoint_end"; +# Removing debug point 'mts_checkpoint' from @@GLOBAL.debug +include/assert.inc [Seconds_Behind_Master must be between 5 and upper_bound] +UNLOCK TABLES; +# Adding debug point 'mts_checkpoint' to @@GLOBAL.debug +SET DEBUG_SYNC="RESET"; +SET DEBUG_SYNC="now WAIT_FOR mts_checkpoint_start"; +SET DEBUG_SYNC="now WAIT_FOR mts_checkpoint_end"; +# Removing debug point 'mts_checkpoint' from @@GLOBAL.debug +include/assert.inc [Seconds_Behind_Master must be between 2 and upper_bound] +UNLOCK TABLES; +include/sync_slave_sql_with_master.inc +# Adding debug point 'mts_checkpoint' to @@GLOBAL.debug +SET DEBUG_SYNC="RESET"; +SET DEBUG_SYNC="now WAIT_FOR mts_checkpoint_start"; +SET DEBUG_SYNC="now WAIT_FOR mts_checkpoint_end"; +# Removing debug point 'mts_checkpoint' from @@GLOBAL.debug +include/assert.inc [Seconds_Behind_Master must be 0] +# Scenario 2: With two workers, check if Seconds_Behind_Master is +# calculated correctly when first worker compeletes first. +LOCK TABLE test2.t2 WRITE; +USE test; +INSERT INTO t1 VALUES (1); +USE test2; +INSERT INTO t2 VALUES (1); +include/sync_slave_io_with_master.inc +# Adding debug point 'mts_checkpoint' to @@GLOBAL.debug +SET DEBUG_SYNC="RESET"; +SET DEBUG_SYNC="now WAIT_FOR mts_checkpoint_start"; +SET DEBUG_SYNC="now WAIT_FOR mts_checkpoint_end"; +# Removing debug point 'mts_checkpoint' from @@GLOBAL.debug +include/assert.inc [Seconds_Behind_Master must be between 2 and upper_bound] +UNLOCK TABLES; +# Adding debug point 'mts_checkpoint' to @@GLOBAL.debug +SET DEBUG_SYNC="RESET"; +SET DEBUG_SYNC="now WAIT_FOR mts_checkpoint_start"; +SET DEBUG_SYNC="now WAIT_FOR mts_checkpoint_end"; +# Removing debug point 'mts_checkpoint' from @@GLOBAL.debug +include/assert.inc [Seconds_Behind_Master must be 0] +# Scenario 3: With three workers, check if Seconds_Behind_Master is +# calculated correctly when second worker completes first. +CREATE DATABASE test3; +USE test3; +CREATE TABLE t3 (f1 INT); +include/sync_slave_sql_with_master.inc +LOCK TABLE test.t1 WRITE; +LOCK TABLE test3.t3 WRITE; +USE test; +INSERT INTO t1 VALUES (1); +use test2; +INSERT INTO t2 VALUES (1); +USE test3; +INSERT INTO t3 VALUES (1); +include/sync_slave_io_with_master.inc +# Adding debug point 'mts_checkpoint' to @@GLOBAL.debug +SET DEBUG_SYNC="RESET"; +SET DEBUG_SYNC="now WAIT_FOR mts_checkpoint_start"; +SET DEBUG_SYNC="now WAIT_FOR mts_checkpoint_end"; +# Removing debug point 'mts_checkpoint' from @@GLOBAL.debug +include/assert.inc [Seconds_Behind_Master must be between 7 and upper_bound] +UNLOCK TABLES; +# Adding debug point 'mts_checkpoint' to @@GLOBAL.debug +SET DEBUG_SYNC="RESET"; +SET DEBUG_SYNC="now WAIT_FOR mts_checkpoint_start"; +SET DEBUG_SYNC="now WAIT_FOR mts_checkpoint_end"; +# Removing debug point 'mts_checkpoint' from @@GLOBAL.debug +include/assert.inc [Seconds_Behind_Master must be between 2 and upper_bound] +UNLOCK TABLES; +# Adding debug point 'mts_checkpoint' to @@GLOBAL.debug +SET DEBUG_SYNC="RESET"; +SET DEBUG_SYNC="now WAIT_FOR mts_checkpoint_start"; +SET DEBUG_SYNC="now WAIT_FOR mts_checkpoint_end"; +# Removing debug point 'mts_checkpoint' from @@GLOBAL.debug +include/assert.inc [Seconds_Behind_Master must be 0] +DROP TABLE test.t1; +DROP DATABASE test2; +DROP DATABASE test3; +include/sync_slave_sql_with_master.inc +include/stop_slave.inc +# Test for LOGICAL_CLOCK +SET GLOBAL slave_parallel_type = 'LOGICAL_CLOCK'; +SET GLOBAL slave_parallel_workers = 3; +include/start_slave.inc +# Scenario 1: With two workers, check if Seconds_Behind_Master is +# calculated correctly when two statements are applied in parallel on +# one database and both the workers are blocked to to lock. +USE test; +CREATE TABLE t1 (a int); +CREATE TABLE t2 (a int); +INSERT INTO t1 SET a=1; +include/sync_slave_sql_with_master.inc +LOCK TABLE test.t1 WRITE, test.t2 WRITE; +BEGIN; +INSERT INTO t1 SET a=2; +BEGIN; +INSERT INTO t2 SET a=4; +COMMIT; +COMMIT; +include/sync_slave_io_with_master.inc +# Adding debug point 'mts_checkpoint' to @@GLOBAL.debug +SET DEBUG_SYNC="RESET"; +SET DEBUG_SYNC="now WAIT_FOR mts_checkpoint_start"; +SET DEBUG_SYNC="now WAIT_FOR mts_checkpoint_end"; +# Removing debug point 'mts_checkpoint' from @@GLOBAL.debug +include/assert.inc [Seconds_Behind_Master must be between 3 and upper_bound] +UNLOCK TABLES; +include/sync_slave_sql_with_master.inc +# Adding debug point 'mts_checkpoint' to @@GLOBAL.debug +SET DEBUG_SYNC="RESET"; +SET DEBUG_SYNC="now WAIT_FOR mts_checkpoint_start"; +SET DEBUG_SYNC="now WAIT_FOR mts_checkpoint_end"; +# Removing debug point 'mts_checkpoint' from @@GLOBAL.debug +include/assert.inc [Seconds_Behind_Master must be 0] +# Scenario 2: With two workers, check if Seconds_Behind_Master is +# calculated correctly when the first worker is blocked. +INSERT INTO t1 SET a=1; +include/sync_slave_sql_with_master.inc +LOCK TABLE test.t1 WRITE; +LOCK TABLE test.t2 WRITE; +BEGIN; +INSERT INTO t1 SET a=2; +BEGIN; +INSERT INTO t2 SET a=3; +COMMIT; +COMMIT; +include/sync_slave_io_with_master.inc +UNLOCK TABLES; +# Adding debug point 'mts_checkpoint' to @@GLOBAL.debug +SET DEBUG_SYNC="RESET"; +SET DEBUG_SYNC="now WAIT_FOR mts_checkpoint_start"; +SET DEBUG_SYNC="now WAIT_FOR mts_checkpoint_end"; +# Removing debug point 'mts_checkpoint' from @@GLOBAL.debug +include/assert.inc [Seconds_Behind_Master must be between 2 and upper_bound] +UNLOCK TABLES; +include/sync_slave_sql_with_master.inc +# Adding debug point 'mts_checkpoint' to @@GLOBAL.debug +SET DEBUG_SYNC="RESET"; +SET DEBUG_SYNC="now WAIT_FOR mts_checkpoint_start"; +SET DEBUG_SYNC="now WAIT_FOR mts_checkpoint_end"; +# Removing debug point 'mts_checkpoint' from @@GLOBAL.debug +include/assert.inc [Seconds_Behind_Master must be 0] +# Scenario 3: With three workers, check if Seconds_Behind_Master is +# calculated correctly when two workers working on table from the same +# database and 3rd worker working on another database. +CREATE DATABASE second_test; +CREATE TABLE second_test.t3 (f1 INT); +INSERT INTO test.t1 SET a=1; +LOCK TABLE test.t1 WRITE; +LOCK TABLE test.t2 WRITE; +LOCK TABLE second_test.t3 WRITE; +BEGIN; +INSERT INTO second_test.t3 VALUES (1); +BEGIN; +INSERT INTO test.t1 SET a=2; +BEGIN; +INSERT INTO test.t2 SET a=3; +COMMIT; +COMMIT; +COMMIT; +include/sync_slave_io_with_master.inc +# Adding debug point 'mts_checkpoint' to @@GLOBAL.debug +SET DEBUG_SYNC="RESET"; +SET DEBUG_SYNC="now WAIT_FOR mts_checkpoint_start"; +SET DEBUG_SYNC="now WAIT_FOR mts_checkpoint_end"; +# Removing debug point 'mts_checkpoint' from @@GLOBAL.debug +include/assert.inc [Seconds_Behind_Master must be between 2 and upper_bound] +UNLOCK TABLES; +# Adding debug point 'mts_checkpoint' to @@GLOBAL.debug +SET DEBUG_SYNC="RESET"; +SET DEBUG_SYNC="now WAIT_FOR mts_checkpoint_start"; +SET DEBUG_SYNC="now WAIT_FOR mts_checkpoint_end"; +# Removing debug point 'mts_checkpoint' from @@GLOBAL.debug +include/assert.inc [Seconds_Behind_Master must be between 3 and upper_bound] +UNLOCK TABLES; +# Adding debug point 'mts_checkpoint' to @@GLOBAL.debug +SET DEBUG_SYNC="RESET"; +SET DEBUG_SYNC="now WAIT_FOR mts_checkpoint_start"; +SET DEBUG_SYNC="now WAIT_FOR mts_checkpoint_end"; +# Removing debug point 'mts_checkpoint' from @@GLOBAL.debug +include/assert.inc [Seconds_Behind_Master must be between 4 and upper_bound] +UNLOCK TABLE; +# Adding debug point 'mts_checkpoint' to @@GLOBAL.debug +SET DEBUG_SYNC="RESET"; +SET DEBUG_SYNC="now WAIT_FOR mts_checkpoint_start"; +SET DEBUG_SYNC="now WAIT_FOR mts_checkpoint_end"; +# Removing debug point 'mts_checkpoint' from @@GLOBAL.debug +include/assert.inc [Seconds_Behind_Master must be 0] +DROP TABLE test.t1; +DROP TABLE test.t2; +DROP DATABASE second_test; +include/sync_slave_sql_with_master.inc +include/stop_slave.inc +# Removing debug point 'dbug.mts.force_clock_diff_eq_0' from @@GLOBAL.debug +SET @@GLOBAL.slave_parallel_type= @save_slave_parallel_type; +SET @@global.slave_parallel_workers= @save.slave_parallel_workers; +SET @@global.slave_transaction_retries= @save_slave_transaction_retries; +include/start_slave.inc +include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_seconds_behind_master_mts.test b/mysql-test/suite/rpl/t/rpl_seconds_behind_master_mts.test new file mode 100644 index 000000000000..2e2e57e06aa1 --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_seconds_behind_master_mts.test @@ -0,0 +1,48 @@ +# ==== Purpose ==== +# +# Verify that Seconds_Behind_Master is calculated correctly on a +# Multi-threaded Slave. +# +# ==== References ==== +# Bug #25407335 SLAVE DON'T REPORT SECONDS_BEHIND_MASTER WHEN RUNNING +# SLAVE_PARALLEL_WORKERS > 0 +# + +# Must be statement as we rely on PROCESSLIST's Info column +--source include/have_binlog_format_statement.inc +# This test uses debug_sync +--source include/have_debug.inc +--source include/have_debug_sync.inc +--let $rpl_skip_start_slave= 1 +--source include/master-slave.inc + +# Bug #25407335 SLAVE DON'T REPORT SECONDS_BEHIND_MASTER WHEN RUNNING +# SLAVE_PARALLEL_WORKERS > 0 + +# Start slave in MTS mode +connection slave; +--let $debug_point= dbug.mts.force_clock_diff_eq_0 +--source include/add_debug_point.inc +SET @save_slave_parallel_type = @@GLOBAL.slave_parallel_type; +SET @save.slave_parallel_workers= @@global.slave_parallel_workers; +SET @save_slave_transaction_retries= @@global.slave_transaction_retries; + +--echo # Test for PARALLEL_DATABASE +SET GLOBAL slave_parallel_type = 'DATABASE'; +SET @@global.slave_parallel_workers= 4; +--source extra/rpl_tests/rpl_seconds_behind_master_mts_type_database.test + +--echo # Test for LOGICAL_CLOCK +SET GLOBAL slave_parallel_type = 'LOGICAL_CLOCK'; +SET GLOBAL slave_parallel_workers = 3; +--source extra/rpl_tests/rpl_seconds_behind_master_mts_logical_clock.test + +#Cleanup +--let $debug_point= dbug.mts.force_clock_diff_eq_0 +--source include/remove_debug_point.inc +SET @@GLOBAL.slave_parallel_type= @save_slave_parallel_type; +SET @@global.slave_parallel_workers= @save.slave_parallel_workers; +SET @@global.slave_transaction_retries= @save_slave_transaction_retries; +--source include/start_slave.inc + +--source include/rpl_end.inc diff --git a/sql/log_event.cc b/sql/log_event.cc index 6c6fac5ec486..fe3e500b1937 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -6653,7 +6653,8 @@ int Rotate_log_event::do_update_pos(Relay_log_info *rli) real_event ? common_header->when.tv_sec + (time_t) exec_time : 0, - true/*need_data_lock=true*/); + true/*need_data_lock=true*/, + real_event? true : false); } /* diff --git a/sql/rpl_rli.cc b/sql/rpl_rli.cc index d2db5758b990..d12de317bf54 100644 --- a/sql/rpl_rli.cc +++ b/sql/rpl_rli.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2006, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2006, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -270,15 +270,18 @@ void Relay_log_info::reset_notified_relay_log_change() New seconds_behind_master timestamp is installed. - @param shift number of bits to shift by Worker due to the - current checkpoint change. - @param new_ts new seconds_behind_master timestamp value - unless zero. Zero could be due to FD event - or fake rotate event. - @param need_data_lock False if caller has locked @c data_lock + @param shift number of bits to shift by Worker due to the + current checkpoint change. + @param new_ts new seconds_behind_master timestamp value + unless zero. Zero could be due to FD event + or fake rotate event. + @param need_data_lock False if caller has locked @c data_lock + @param update_timestamp if true, this function will update the + rli->last_master_timestamp. */ void Relay_log_info::reset_notified_checkpoint(ulong shift, time_t new_ts, - bool need_data_lock) + bool need_data_lock, + bool update_timestamp) { /* If this is not a parallel execution we return immediately. @@ -324,7 +327,7 @@ void Relay_log_info::reset_notified_checkpoint(ulong shift, time_t new_ts, DBUG_PRINT("mts", ("reset_notified_checkpoint shift --> %lu, " "checkpoint_seqno --> %u.", shift, checkpoint_seqno)); - if (new_ts) + if (update_timestamp) { if (need_data_lock) mysql_mutex_lock(&data_lock); diff --git a/sql/rpl_rli.h b/sql/rpl_rli.h index 827d321c4714..73098a735640 100644 --- a/sql/rpl_rli.h +++ b/sql/rpl_rli.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2005, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2005, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -841,7 +841,9 @@ class Relay_log_info : public Rpl_info Coordinator notifies Workers about this event. Coordinator and Workers maintain a bitmap of executed group that is reset with a new checkpoint. */ - void reset_notified_checkpoint(ulong, time_t, bool); + void reset_notified_checkpoint(ulong count, time_t new_ts, + bool need_data_lock, + bool update_timestamp= false); /** Called when gaps execution is ended so it is crash-safe diff --git a/sql/rpl_rli_pdb.h b/sql/rpl_rli_pdb.h index 8c381154578a..b8be1a8256c2 100644 --- a/sql/rpl_rli_pdb.h +++ b/sql/rpl_rli_pdb.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -165,6 +165,7 @@ typedef struct st_slave_job_group checkpoint_relay_log_pos= 0; checkpoint_seqno= (uint) -1; done= 0; + ts= 0; #ifndef DBUG_OFF notified= false; #endif @@ -234,7 +235,12 @@ class circular_buffer_queue /** return the value of @c data member of the head of the queue. */ - Element_type* head_queue(); + Element_type* head_queue() + { + if (empty()) + return NULL; + return &m_Q[entry]; + } bool gt(ulong i, ulong k); // comparision of ordering of two entities /* index is within the valid range */ diff --git a/sql/rpl_slave.cc b/sql/rpl_slave.cc index e41caf9b3376..463786cf2613 100644 --- a/sql/rpl_slave.cc +++ b/sql/rpl_slave.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -2779,6 +2779,8 @@ static int get_master_version_and_clock(MYSQL* mysql, Master_info* mi) mysql_mutex_lock(&mi->data_lock); mi->clock_diff_with_master= (long) (time((time_t*) 0) - strtoul(master_row[0], 0, 10)); + DBUG_EXECUTE_IF("dbug.mts.force_clock_diff_eq_0", + mi->clock_diff_with_master= 0;); mysql_mutex_unlock(&mi->data_lock); } else if (check_io_slave_killed(mi->info_thd, mi, NULL)) @@ -5159,9 +5161,15 @@ static int exec_relay_log_event(THD* thd, Relay_log_info* rli) If it is an artificial event, or a relay log event (IO thread generated event) or ev->when is set to 0, or a FD from master, or a heartbeat event with server_id '0' then we don't update the last_master_timestamp. + + In case of parallel execution last_master_timestamp is only updated when + a job is taken out of GAQ. Thus when last_master_timestamp is 0 (which + indicates that GAQ is empty, all slave workers are waiting for events from + the Coordinator), we need to initialize it with a timestamp from the first + event to be executed in parallel. */ - if (!(rli->is_parallel_exec() || - ev->is_artificial_event() || ev->is_relay_log_event() || + if ((!rli->is_parallel_exec() || rli->last_master_timestamp == 0) && + !(ev->is_artificial_event() || ev->is_relay_log_event() || (ev->common_header->when.tv_sec == 0) || ev->get_type_code() == binary_log::FORMAT_DESCRIPTION_EVENT || ev->server_id == 0)) @@ -6605,6 +6613,7 @@ bool mts_checkpoint_routine(Relay_log_info *rli, ulonglong period, ulong cnt; bool error= FALSE; struct timespec curr_clock; + time_t ts=0; DBUG_ENTER("checkpoint_routine"); @@ -6614,6 +6623,13 @@ bool mts_checkpoint_routine(Relay_log_info *rli, ulonglong period, if (!rli->gaq->count_done(rli)) DBUG_RETURN(FALSE); } + DBUG_EXECUTE_IF("mts_checkpoint", + { + const char act[]= + "now signal mts_checkpoint_start"; + DBUG_ASSERT(!debug_sync_set_action(rli->info_thd, + STRING_WITH_LEN(act))); + };); #endif /* @@ -6736,14 +6752,31 @@ bool mts_checkpoint_routine(Relay_log_info *rli, ulonglong period, cnt is zero. This value means that the checkpoint information will be completely reset. */ - rli->reset_notified_checkpoint(cnt, rli->gaq->lwm.ts, need_data_lock); + /* + Update the rli->last_master_timestamp for reporting correct Seconds_behind_master. + + If GAQ is empty, set it to zero. + Else, update it with the timestamp of the first job of the Slave_job_queue + which was assigned in the Log_event::get_slave_worker() function. + */ + ts= rli->gaq->empty() + ? 0 + : reinterpret_cast(rli->gaq->head_queue())->ts; + rli->reset_notified_checkpoint(cnt, ts, need_data_lock, true); /* end-of "Coordinator::"commit_positions" */ end: #ifndef DBUG_OFF if (DBUG_EVALUATE_IF("check_slave_debug_group", 1, 0)) DBUG_SUICIDE(); + DBUG_EXECUTE_IF("mts_checkpoint", + { + const char act[]= + "now signal mts_checkpoint_end"; + DBUG_ASSERT(!debug_sync_set_action(rli->info_thd, + STRING_WITH_LEN(act))); + };); #endif set_timespec_nsec(&rli->last_clock, 0); @@ -9258,9 +9291,6 @@ static Log_event* next_event(Relay_log_info* rli) */ (void) mts_checkpoint_routine(rli, period, false, true/*need_data_lock=true*/); // TODO: ALFRANIO ERROR mysql_mutex_lock(log_lock); - // More to the empty relay-log all assigned events done so reset it. - if (rli->gaq->empty()) - rli->last_master_timestamp= 0; if (DBUG_EVALUATE_IF("check_slave_debug_group", 1, 0)) period= 10000000ULL; From 2acbd88762e0176a72f447afe054c0c7c518328d Mon Sep 17 00:00:00 2001 From: Laurynas Biveinis Date: Thu, 8 Feb 2018 15:41:56 +0200 Subject: [PATCH 0508/1221] Implement PS-3804 (Add MeCab testing to TravisCI) Install mecab dev library on Travis-CI builder and pass -DWITH_MECAB=system to CMake. At the same time remove unused variable bundle_mecab from the plugin to fix a compilation warning. --- .travis.yml | 4 +++- plugin/fulltext/mecab_parser/plugin_mecab.cc | 6 ------ 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/.travis.yml b/.travis.yml index 4823fe0aa114..0a8255ff83cd 100644 --- a/.travis.yml +++ b/.travis.yml @@ -45,7 +45,7 @@ script: fi # Download dependencies - - PACKAGES="$PACKAGES cmake cmake-curses-gui libaio-dev libssl-dev libncurses5-dev libevent-dev bison" + - PACKAGES="$PACKAGES cmake cmake-curses-gui libaio-dev libssl-dev libncurses5-dev libevent-dev bison libmecab-dev" - sudo -E apt-get -yq --no-install-suggests --no-install-recommends install $PACKAGES - mkdir bin; cd bin - $CC -v @@ -61,6 +61,7 @@ script: -DWITH_SSL=$LIBTYPE -DWITH_ZLIB=$LIBTYPE -DWITH_LIBEVENT=$LIBTYPE + -DWITH_MECAB=system -DENABLE_DOWNLOADS=1 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=../deps @@ -79,6 +80,7 @@ script: -DENABLE_DTRACE=OFF -DWITH_SSL=$LIBTYPE -DWITH_ZLIB=$LIBTYPE + -DWITH_MECAB=system -DWITH_LIBEVENT=$LIBTYPE -DENABLE_DOWNLOADS=1 -DDOWNLOAD_BOOST=1 diff --git a/plugin/fulltext/mecab_parser/plugin_mecab.cc b/plugin/fulltext/mecab_parser/plugin_mecab.cc index 93edeff0a307..91961826c2c5 100644 --- a/plugin/fulltext/mecab_parser/plugin_mecab.cc +++ b/plugin/fulltext/mecab_parser/plugin_mecab.cc @@ -35,12 +35,6 @@ static char* mecab_rc_file; static const char* mecab_min_supported_version = "0.993"; static const char* mecab_max_supported_version = "0.996"; -#if defined(BUNDLE_MECAB) -static const bool bundle_mecab= true; -#else -static const bool bundle_mecab= false; -#endif - /** Set MeCab parser charset. @param[in] charset charset string @retval true on success From 6f9af5c8dfa1d3204bdec0c8910732e691f19509 Mon Sep 17 00:00:00 2001 From: Maria Couceiro Date: Thu, 8 Feb 2018 09:15:57 +0000 Subject: [PATCH 0509/1221] BUG#20454797 WAIT_FOR_SLAVE_PARAM.INC IS NOT CHECKING FOR ERROR WHILE WAITING THE PARAMETER Post-push fix to stabilize rpl_slave_load_tmpdir_not_exist test. --- mysql-test/suite/rpl/r/rpl_slave_load_tmpdir_not_exist.result | 1 + mysql-test/suite/rpl/t/rpl_slave_load_tmpdir_not_exist.test | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/mysql-test/suite/rpl/r/rpl_slave_load_tmpdir_not_exist.result b/mysql-test/suite/rpl/r/rpl_slave_load_tmpdir_not_exist.result index 8d752d71d9cb..30a0dab0b556 100644 --- a/mysql-test/suite/rpl/r/rpl_slave_load_tmpdir_not_exist.result +++ b/mysql-test/suite/rpl/r/rpl_slave_load_tmpdir_not_exist.result @@ -6,6 +6,7 @@ Note #### Storing MySQL user name or password information in the master info rep START SLAVE; call mtr.add_suppression("Slave SQL.*Unable to use slave.s temporary directory.* Error_code: 12"); include/wait_for_slave_sql_error.inc [errno=12] +include/wait_for_slave_io_to_start.inc include/stop_slave_io.inc RESET SLAVE; include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_slave_load_tmpdir_not_exist.test b/mysql-test/suite/rpl/t/rpl_slave_load_tmpdir_not_exist.test index b99c71b1ca03..5ed80685b223 100644 --- a/mysql-test/suite/rpl/t/rpl_slave_load_tmpdir_not_exist.test +++ b/mysql-test/suite/rpl/t/rpl_slave_load_tmpdir_not_exist.test @@ -14,7 +14,7 @@ START SLAVE; call mtr.add_suppression("Slave SQL.*Unable to use slave.s temporary directory.* Error_code: 12"); --let $slave_sql_errno= 12 source include/wait_for_slave_sql_error.inc; - +--source include/wait_for_slave_io_to_start.inc --source include/stop_slave_io.inc RESET SLAVE; From e9718c64a7b1effaef76af3a3054cd80463dd080 Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Thu, 8 Feb 2018 09:49:52 -0700 Subject: [PATCH 0510/1221] PS-307 : Merge MySQL 5.7.21 MYR-198 : Merge prod201704 - re-re-recored test that is corrected when MYR-198 and PS-307 changes are combined together. --- mysql-test/suite/rocksdb/r/index_merge_rocksdb2.result | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mysql-test/suite/rocksdb/r/index_merge_rocksdb2.result b/mysql-test/suite/rocksdb/r/index_merge_rocksdb2.result index be55126c0a43..72593d08707f 100644 --- a/mysql-test/suite/rocksdb/r/index_merge_rocksdb2.result +++ b/mysql-test/suite/rocksdb/r/index_merge_rocksdb2.result @@ -1527,7 +1527,7 @@ primary key (pk1, pk2) # Column 9, rows, can change depending on innodb-page-size. explain select * from t1 where pk1 = 1 and pk2 < 80 and key1=0; id select_type table partitions type possible_keys key key_len ref rows filtered Extra -1 SIMPLE t1 NULL index_merge PRIMARY,key1 key1,PRIMARY 12,8 NULL ROWS # Using intersect(key1,PRIMARY); Using where +1 SIMPLE t1 NULL range PRIMARY,key1 key1 12 NULL ROWS # Using index condition Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`pk1` AS `pk1`,`test`.`t1`.`pk2` AS `pk2`,`test`.`t1`.`key1` AS `key1`,`test`.`t1`.`key2` AS `key2`,`test`.`t1`.`pktail1ok` AS `pktail1ok`,`test`.`t1`.`pktail2ok` AS `pktail2ok`,`test`.`t1`.`pktail3bad` AS `pktail3bad`,`test`.`t1`.`pktail4bad` AS `pktail4bad`,`test`.`t1`.`pktail5bad` AS `pktail5bad`,`test`.`t1`.`pk2copy` AS `pk2copy`,`test`.`t1`.`badkey` AS `badkey`,`test`.`t1`.`filler1` AS `filler1`,`test`.`t1`.`filler2` AS `filler2` from `test`.`t1` where ((`test`.`t1`.`key1` = 0) and (`test`.`t1`.`pk1` = 1) and (`test`.`t1`.`pk2` < 80)) # CPK scan + 1 ROR range scan is a special case From cd4617c48a563e9565a2627da731d68b1f7ee244 Mon Sep 17 00:00:00 2001 From: Joao Gramacho Date: Wed, 7 Feb 2018 11:01:59 +0000 Subject: [PATCH 0511/1221] BUG#20677683 TRANSACTION BOUNDARY PARSER ASSERTS FOR UNKNOWN EVENT TYPES WHEN AUTO_POSITION=1 The transaction boundary parser is failing a slave assertion when replicating unsupported non-ignorable events from the master. This assertion only exists in debug builds. In non-debug binaries, the transaction boundary parser keep doing its job trying to guess the end of the current transaction by relying on usual transaction termination events. The assertion was designed to ensure that in supported replication environments, errors in the transaction boundary parser are only expected if the replication channel is not using MASTER_AUTO_POSITION, but we are now removing the assert and making the debug server behave the same way non-debug does. --- sql/rpl_slave.cc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sql/rpl_slave.cc b/sql/rpl_slave.cc index 463786cf2613..cde2f5e03099 100644 --- a/sql/rpl_slave.cc +++ b/sql/rpl_slave.cc @@ -8158,9 +8158,11 @@ bool queue_event(Master_info* mi,const char* buf, ulong event_len) a warning message. We are taking care of avoiding transaction boundary issues, but it can happen. - Transaction boundary errors might happen only because of bad master + Transaction boundary errors might happen mostly because of bad master positioning in 'CHANGE MASTER TO' (or bad manipulation of master.info) - when GTID auto positioning is off. + when GTID auto positioning is off. Errors can also happen when using + cross-version replication, replicating from a master that supports more + event types than this slave. The IO thread will keep working and queuing events regardless of the transaction parser error, but we will throw another warning message to @@ -8171,8 +8173,6 @@ bool queue_event(Master_info* mi,const char* buf, ulong event_len) "An unexpected event sequence was detected by the IO thread while " "queuing the event received from master '%s' binary log file, at " "position %llu.", mi->get_master_log_name(), mi->get_master_log_pos()); - - DBUG_ASSERT(!mi->is_auto_position()); } if (mi->get_mi_description_event()->binlog_version < 4 && From 50af8a08452bd77758cc83d31331309379da400c Mon Sep 17 00:00:00 2001 From: Aditya A Date: Fri, 9 Feb 2018 11:51:31 +0530 Subject: [PATCH 0512/1221] Bug#26696448 REPLAY LOG RECORD CAUSE MYSQLD CRASH DURING ONLINE DDL Problem ======= mysqld crashed while rebuilding a table if the log record is split across two blocks. This problem occurs only if the last partial record happens to be the last record to be applied. Analysis ======== The problem occurred when a log record is split across two blocks, and it also happens to be the last record to be replayed. A partial record is replayed after it is read completely from the next block. Only after the partial record is read and applied, the next record in the block is applied. The current code wrongly assumes that there are multiple records in the block, which also has the partial record from the previous block. The crash happens because of the assert which assumes that there we are not at the end of the log after replaying the last partial record. In case, there is a record after the last partial record, the code executes successfully as there is at least one record to be applied after the last partial record and hence, end of log is not yet reached. Fix === Removed the assert and marked the log as all done. This causes the log replay to end gracefully. [ #rb 18694 Reviewed by Deb ] --- storage/innobase/row/row0log.cc | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/storage/innobase/row/row0log.cc b/storage/innobase/row/row0log.cc index 4596e2fb9513..7320fe3ac854 100644 --- a/storage/innobase/row/row0log.cc +++ b/storage/innobase/row/row0log.cc @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2011, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2011, 2018, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -2720,7 +2720,15 @@ row_log_table_apply_ops( while (!trx_is_interrupted(trx)) { mrec = next_mrec; - ut_ad(mrec < mrec_end); + ut_ad(mrec <= mrec_end); + + if (mrec == mrec_end) { + /* We are at the end of the log. + Mark the replay all_done. */ + if (has_index_lock) { + goto all_done; + } + } if (!has_index_lock) { /* We are applying operations from a different From 57b46367ff667fbeb84752b9ec4084895eacf556 Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Mon, 5 Feb 2018 22:35:29 +0100 Subject: [PATCH 0513/1221] PS-3793: Fix OSX build problems * Removed gnu++03 c++ variant enforcement on OSX, as it isn't suppopted by clang on OSX --- cmake/build_configurations/compiler_options.cmake | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/cmake/build_configurations/compiler_options.cmake b/cmake/build_configurations/compiler_options.cmake index 372b1866711f..ba9ea32be0a0 100644 --- a/cmake/build_configurations/compiler_options.cmake +++ b/cmake/build_configurations/compiler_options.cmake @@ -29,7 +29,11 @@ SET(CMAKE_CXX_STANDARD 98) # Compiler options IF(UNIX) - SET(CMAKE_CXX98_EXTENSION_COMPILE_OPTION -std=gnu++03) + MY_CHECK_CXX_COMPILER_FLAG("-std=gnu++03" GNU03_SUPPORTED) + + IF(GNU03_SUPPORTED) + SET(CMAKE_CXX98_EXTENSION_COMPILE_OPTION -std=gnu++03) + ENDIF() # Default GCC flags IF(CMAKE_COMPILER_IS_GNUCC) From 61c79a78e92c957d7e2324d0146213b1cecdf583 Mon Sep 17 00:00:00 2001 From: Ajo Robert Date: Fri, 9 Feb 2018 14:39:13 +0530 Subject: [PATCH 0514/1221] Bug#27230859 UNEXPECTED BEHAVIOUR WHILE HANDLING INVALID POLYGON Invalid input polygon can lead to undefined server behaviour. Fix: Handled the scenario by returning a NULL result. Change-Id: Icd945f3e8bb493100480605b464f32ef374817e7 --- sql/gcalc_tools.cc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/sql/gcalc_tools.cc b/sql/gcalc_tools.cc index ccbfb7138931..760ec384c35c 100644 --- a/sql/gcalc_tools.cc +++ b/sql/gcalc_tools.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -733,7 +733,8 @@ int Gcalc_operation_reducer::end_couple(active_thread *t0, active_thread *t1, { DBUG_ENTER("Gcalc_operation_reducer::end_couple"); res_point *rp0, *rp1; - DBUG_ASSERT(t1->result_range); + if (!t1->result_range) + DBUG_RETURN(1); if (!(rp0= add_res_point(p)) || !(rp1= add_res_point(p))) DBUG_RETURN(1); rp0->down= t0->rp; From b9fd2e639750e3ce41333011af9f11cb5f32f7c5 Mon Sep 17 00:00:00 2001 From: Aditya A Date: Fri, 9 Feb 2018 16:17:26 +0530 Subject: [PATCH 0515/1221] Bug #27158030 INNODB ONLINE ALTER CRASHES WITH CONCURRENT DML PROBLEM ------- Missing end of log check before accessing log to determine the length of virtual column. Fix --- Check the the end of log record before accessing the log. [#rb 18665 Reveiwed by Jimmy ] --- storage/innobase/row/row0log.cc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/storage/innobase/row/row0log.cc b/storage/innobase/row/row0log.cc index 6472e80d77d7..b17515604d74 100644 --- a/storage/innobase/row/row0log.cc +++ b/storage/innobase/row/row0log.cc @@ -2646,6 +2646,11 @@ row_log_table_apply_op( if (num_v) { ulint o_v_size = 0; ulint n_v_size = 0; + + if (next_mrec + 2 > mrec_end) { + return(NULL); + } + n_v_size = mach_read_from_2(next_mrec); next_mrec += n_v_size; if (next_mrec > mrec_end) { From 50e441b9cb0946c29c85843524030f03e121c2b2 Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Mon, 5 Feb 2018 13:51:22 +0100 Subject: [PATCH 0516/1221] PS-3793: added osx travis config * Added OSX to the build matrix. * Fixed issues with older bash versions on OSX. * Made maintainer_mode optional, as the OSX build results in some warnings, and fixing them would take time. As it's not an officially supported platform, warnings are ok for now. * Made tokudb optional, as the OSX build doesn't support it (cherry picked from commit 185b61405d80a6c8af12081a1e42677299746b74) (cherry picked from commit 64cfbf3b99c337a8ffdd39641a1efeda4db95726) --- .travis.yml | 41 +++++++++++++++++----------- CMakeLists.txt | 72 ++++++++++++++++++++++++-------------------------- 2 files changed, 61 insertions(+), 52 deletions(-) diff --git a/.travis.yml b/.travis.yml index 0a8255ff83cd..a1e32dba7446 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,6 +2,12 @@ dist: trusty sudo: required language: c +env: + global: + - MAINTAINER_MODE=ON + - WITHOUT_TOKUDB=ON + - WITHOUT_ROCKSDB=ON + - WITH_MECAB=system matrix: include: - env: COMMAND=clang-test @@ -20,11 +26,14 @@ matrix: - env: GCC=gcc-6 CXX=g++-6 LIBTYPE=system CMAKE_OPT="-DWITH_READLINE=system" PACKAGES=g++-6 PPA=ubuntu-toolchain-r/test - env: GCC=clang-4.0 CXX=clang++-4.0 LIBTYPE=system CMAKE_OPT="-DWITH_READLINE=system" PACKAGES="clang-4.0 llvm-4.0-dev" PPA=ubuntu-toolchain-r/test LLVM=llvm-toolchain-trusty-4.0 - env: GCC=clang-5.0 CXX=clang++-5.0 LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" PACKAGES="clang-5.0 llvm-5.0-dev" LLVM=llvm-toolchain-trusty-5.0 + - os: osx + osx_image: xcode9.2 + env: LIBTYPE=bundled GCC=clang CXX=clang++ MAINTAINER_MODE=OFF WITHOUT_TOKUDB=ON WITHOUT_ROCKSDB=ON WITH_MECAB= script: - export CC=$GCC - JOB_NUMBER=$(echo $TRAVIS_JOB_NUMBER | sed -e 's:[0-9][0-9]*\.\(.*\):\1:') - - echo PACKAGES=$PACKAGES PPA=$PPA LLVM=$LLVM JOB_NUMBER=$JOB_NUMBER TRAVIS_BRANCH=$TRAVIS_BRANCH TRAVIS_EVENT_TYPE=$TRAVIS_EVENT_TYPE TRAVIS_PULL_REQUEST=$TRAVIS_PULL_REQUEST + - echo PACKAGES=$PACKAGES PPA=$PPA LLVM=$LLVM JOB_NUMBER=$JOB_NUMBER TRAVIS_BRANCH=$TRAVIS_BRANCH TRAVIS_EVENT_TYPE=$TRAVIS_EVENT_TYPE TRAVIS_PULL_REQUEST=$TRAVIS_PULL_REQUEST MAINTAINER_MODE=$MAINTAINER_MODE WITHOUT_TOKUDB=$WITHOUT_TOKUDB # Jobs with a number >= 6 are done only for a pull request - if [ $JOB_NUMBER -ge 6 ] && [ "$TRAVIS_EVENT_TYPE" != "pull_request" ]; then @@ -33,20 +42,22 @@ script: fi # Update required LLVM and Ubuntu Toolchain repositories - - if [ "$LLVM" != "" ]; then + - if [[ "$LLVM" != "" ]]; then curl -sSL "http://apt.llvm.org/llvm-snapshot.gpg.key" | sudo -E apt-key add -; echo "deb http://apt.llvm.org/trusty/ $LLVM main" | sudo tee -a /etc/apt/sources.list > /dev/null; fi - - if [ "$PPA" != "" ]; then + - if [[ "$PPA" != "" ]]; then sudo -E apt-add-repository -y "ppa:$PPA"; fi - - if [ "$LLVM" != "" ] || [ "$PPA" != "" ]; then - sudo -E apt-get -yq update &>> ~/apt-get-update.log; + - if [[ "$LLVM" != "" ]] || [[ "$PPA" != "" ]]; then + sudo -E apt-get -yq update >> ~/apt-get-update.log 2>&1; fi # Download dependencies - - PACKAGES="$PACKAGES cmake cmake-curses-gui libaio-dev libssl-dev libncurses5-dev libevent-dev bison libmecab-dev" - - sudo -E apt-get -yq --no-install-suggests --no-install-recommends install $PACKAGES + - if [[ "$TRAVIS_OS_NAME" != "osx" ]]; then + export PACKAGES="$PACKAGES cmake cmake-curses-gui libaio-dev libssl-dev libncurses5-dev libevent-dev bison libmecab-dev"; + sudo -E apt-get -yq --no-install-suggests --no-install-recommends install $PACKAGES; + fi - mkdir bin; cd bin - $CC -v - $CXX -v @@ -54,19 +65,19 @@ script: # Test "RelWithDebInfo" compilation - cmake .. -DCMAKE_BUILD_TYPE=RelWithDebInfo - -DMYSQL_MAINTAINER_MODE=ON + -DMYSQL_MAINTAINER_MODE=$MAINTAINER_MODE -DBUILD_CONFIG=mysql_release -DFEATURE_SET=community -DENABLE_DTRACE=OFF -DWITH_SSL=$LIBTYPE -DWITH_ZLIB=$LIBTYPE -DWITH_LIBEVENT=$LIBTYPE - -DWITH_MECAB=system + -DWITH_MECAB=$WITH_MECAB + -DWITHOUT_TOKUDB=$WITHOUT_TOKUDB + -DWITHOUT_ROCKSDB=$WITHOUT_ROCKSDB -DENABLE_DOWNLOADS=1 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=../deps - -DWITHOUT_TOKUDB=ON - -DWITHOUT_ROCKSDB=ON $CMAKE_OPT - make -j2 @@ -74,18 +85,18 @@ script: - rm -rf * - cmake .. -DCMAKE_BUILD_TYPE=Debug - -DMYSQL_MAINTAINER_MODE=ON + -DMYSQL_MAINTAINER_MODE=$MAINTAINER_MODE -DBUILD_CONFIG=mysql_release -DFEATURE_SET=community -DENABLE_DTRACE=OFF -DWITH_SSL=$LIBTYPE -DWITH_ZLIB=$LIBTYPE - -DWITH_MECAB=system + -DWITH_MECAB=$WITH_MECAB -DWITH_LIBEVENT=$LIBTYPE + -DWITHOUT_TOKUDB=$WITHOUT_TOKUDB + -DWITHOUT_ROCKSDB=$WITHOUT_ROCKSDB -DENABLE_DOWNLOADS=1 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=../deps - -DWITHOUT_TOKUDB=ON - -DWITHOUT_ROCKSDB=ON $CMAKE_OPT - make -j2 diff --git a/CMakeLists.txt b/CMakeLists.txt index d8cf676cb29c..d155d9afac35 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -157,6 +157,41 @@ ENDIF() #cmake on 64bit windows/mac/solaris doesn't set CMAKE_SYSTEM_PROCESSOR correctly SET(MYSQL_MACHINE_TYPE ${CMAKE_SYSTEM_PROCESSOR}) +include(CheckCSourceCompiles) +include(CheckCXXSourceCompiles) +# We need some extra FAIL_REGEX patterns +# Note that CHECK_C_SOURCE_COMPILES is a misnomer, it will also link. +MACRO (MY_CHECK_C_COMPILER_FLAG FLAG RESULT) + SET(SAVE_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}") + SET(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${FLAG}") + CHECK_C_SOURCE_COMPILES("int main(void) { return 0; }" ${RESULT} + FAIL_REGEX "argument unused during compilation" + FAIL_REGEX "unsupported .*option" + FAIL_REGEX "unknown .*option" + FAIL_REGEX "unrecognized .*option" + FAIL_REGEX "ignoring unknown option" + FAIL_REGEX "[Ww]arning: [Oo]ption" + FAIL_REGEX "error: visibility" + FAIL_REGEX "warning: visibility" + ) + SET(CMAKE_REQUIRED_FLAGS "${SAVE_CMAKE_REQUIRED_FLAGS}") +ENDMACRO() + +MACRO (MY_CHECK_CXX_COMPILER_FLAG FLAG RESULT) + SET(SAVE_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}") + SET(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${FLAG}") + CHECK_CXX_SOURCE_COMPILES("int main(void) { return 0; }" ${RESULT} + FAIL_REGEX "argument unused during compilation" + FAIL_REGEX "unsupported .*option" + FAIL_REGEX "unknown .*option" + FAIL_REGEX "unrecognized .*option" + FAIL_REGEX "ignoring unknown option" + FAIL_REGEX "[Ww]arning: [Oo]ption" + FAIL_REGEX "error: visibility" + FAIL_REGEX "warning: visibility" + ) + SET(CMAKE_REQUIRED_FLAGS "${SAVE_CMAKE_REQUIRED_FLAGS}") +ENDMACRO() # Include the platform-specific file. To allow exceptions, this code # looks for files in order of how specific they are. If there is, for @@ -250,43 +285,6 @@ ENDIF() OPTION(FORCE_UNSUPPORTED_COMPILER "Disable compiler version checks" OFF) MARK_AS_ADVANCED(WITHOUT_SERVER DISABLE_SHARED FORCE_UNSUPPORTED_COMPILER) - -include(CheckCSourceCompiles) -include(CheckCXXSourceCompiles) -# We need some extra FAIL_REGEX patterns -# Note that CHECK_C_SOURCE_COMPILES is a misnomer, it will also link. -MACRO (MY_CHECK_C_COMPILER_FLAG FLAG RESULT) - SET(SAVE_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}") - SET(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${FLAG}") - CHECK_C_SOURCE_COMPILES("int main(void) { return 0; }" ${RESULT} - FAIL_REGEX "argument unused during compilation" - FAIL_REGEX "unsupported .*option" - FAIL_REGEX "unknown .*option" - FAIL_REGEX "unrecognized .*option" - FAIL_REGEX "ignoring unknown option" - FAIL_REGEX "[Ww]arning: [Oo]ption" - FAIL_REGEX "error: visibility" - FAIL_REGEX "warning: visibility" - ) - SET(CMAKE_REQUIRED_FLAGS "${SAVE_CMAKE_REQUIRED_FLAGS}") -ENDMACRO() - -MACRO (MY_CHECK_CXX_COMPILER_FLAG FLAG RESULT) - SET(SAVE_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}") - SET(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${FLAG}") - CHECK_CXX_SOURCE_COMPILES("int main(void) { return 0; }" ${RESULT} - FAIL_REGEX "argument unused during compilation" - FAIL_REGEX "unsupported .*option" - FAIL_REGEX "unknown .*option" - FAIL_REGEX "unrecognized .*option" - FAIL_REGEX "ignoring unknown option" - FAIL_REGEX "[Ww]arning: [Oo]ption" - FAIL_REGEX "error: visibility" - FAIL_REGEX "warning: visibility" - ) - SET(CMAKE_REQUIRED_FLAGS "${SAVE_CMAKE_REQUIRED_FLAGS}") -ENDMACRO() - MACRO(MY_SANITIZER_CHECK SAN_OPT RESULT) MY_CHECK_C_COMPILER_FLAG("${SAN_OPT}" C_RESULT) MY_CHECK_CXX_COMPILER_FLAG("${SAN_OPT}" CXX_RESULT) From f33681a061a476b7688e3881662d0156dc4c433a Mon Sep 17 00:00:00 2001 From: Robert Golebiowski Date: Thu, 25 Jan 2018 21:33:37 +0100 Subject: [PATCH 0517/1221] PS-311: On server shutdown threadpool is crashing in debug mode due to race condition Moved calling set_my_sys_thread_var before signaling conditional variable THR_COND_threads. This is variable on which my_thread_global_end is waiting. After it is signalled THR_KEY_mysys_initialized is set to FALSE in my_thread_global_end. There is a debug assertion that THE_KEY_mysys_initialized == TRUE in set_my_sys_thread_var. Moved my_init_signals, which sets signal mask to block all handleable kill signals - which are later serviced by signal_hand thread. my_init_singals was moved before PFS initialization. PFS thread can be affected by "handleable kill" signals unless they have singal mask set. --- mysys/my_thr_init.c | 10 ++++++++-- sql/mysqld.cc | 4 ++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/mysys/my_thr_init.c b/mysys/my_thr_init.c index db0881c3e370..123060302b47 100644 --- a/mysys/my_thr_init.c +++ b/mysys/my_thr_init.c @@ -354,7 +354,14 @@ void my_thread_end() tmp->dbug= NULL; } free(tmp); - + /* + set_mysys_thread_var (NULL) must be called before signaling conditional variable + THR_COND_threads. This is variable on which my_thread_global_end is waiting. + After it is signalled THR_KEY_mysys_initialized is set to FALSE in my_thread_global_end. + There is a debug assertion that THE_KEY_mysys_initialized == TRUE in + set_my_sys_thread_var. + */ + set_mysys_thread_var(NULL); /* Decrement counter for number of running threads. We are using this in my_thread_global_end() to wait until all threads have called @@ -367,7 +374,6 @@ void my_thread_end() mysql_cond_signal(&THR_COND_threads); mysql_mutex_unlock(&THR_LOCK_threads); } - set_mysys_thread_var(NULL); #endif } diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 8b41b3220589..88f4a4ce7c2f 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -4781,6 +4781,8 @@ int mysqld_main(int argc, char **argv) sys_var_init(); ulong requested_open_files; adjust_related_options(&requested_open_files); + // moved signal initialization here so that PFS thread inherited signal mask + my_init_signals(); #ifdef WITH_PERFSCHEMA_STORAGE_ENGINE if (ho_error == 0) @@ -4884,8 +4886,6 @@ int mysqld_main(int argc, char **argv) if (init_common_variables()) unireg_abort(MYSQLD_ABORT_EXIT); // Will do exit - my_init_signals(); - #ifndef EMBEDDED_LIBRARY // Move connection handler initialization after the signal handling has been // set up. Percona Server threadpool constructor is heavy, and creates a From b4bfe33ab841cad27c9f36d62bcbbef6f4774cde Mon Sep 17 00:00:00 2001 From: Marek Szymczak Date: Fri, 9 Feb 2018 16:39:58 +0100 Subject: [PATCH 0518/1221] Bug#27300689 AUDIT_LOG FILTERING UDF DOES NOT REPORT ERROR ON FAILURE Problem: ======== Audit Log JSON filtering UDFs does not report Audit Log tables operations failures. Audit Log tables are used to store Audit Log JSON filtering permanent data. Analysis: ========= Audit Log JSON filtering UDFs were using MYSQL_PLUGIN handle to report errors related to Audit Log tables. Errors were visible in the server log only. Fix: ==== Implementation has been extended that logs table operation result into MYSQL_PLUGIN handle (server log) and UDF result object. IResult interface has been moved from Audit Log code to common code (Firewall and Audit Log) and it has been renamed to IMessage_handler. Thanks to this Table_access object uses generic IMessage_handler object to report errors, when opening tables. Filter_database::Update_handler class has been extended and every method uses generic IMessage_handler object that intercepts table operation messages. This allows to properly set error state of the Audit Log UDF result (Udf_string_message_handler object in the audit_log_filter_udf.cc). Reviewed-by: ============ Georgi 'Joro' Kodinov Ivo Roylev --- sql/share/errmsg-utf8.txt | 66 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/sql/share/errmsg-utf8.txt b/sql/share/errmsg-utf8.txt index ddee7f83a00c..22575f5299b7 100644 --- a/sql/share/errmsg-utf8.txt +++ b/sql/share/errmsg-utf8.txt @@ -7699,6 +7699,72 @@ ER_KEYRING_ACCESS_DENIED_ERROR 42000 ER_KEYRING_MIGRATION_STATUS eng "Keyring migration %s." +ER_PLUGIN_FAILED_TO_OPEN_TABLES + eng "Failed to open the %s filter tables." + +ER_PLUGIN_FAILED_TO_OPEN_TABLE + eng "Failed to open '%s.%s' %s table." + +ER_AUDIT_LOG_NO_KEYRING_PLUGIN_INSTALLED + eng "No keyring plugin installed." + +ER_AUDIT_LOG_ENCRYPTION_PASSWORD_HAS_NOT_BEEN_SET + eng "Audit log encryption password has not been set; it will be generated automatically. Use audit_log_encryption_password_get to obtain the password or audit_log_encryption_password_set to set a new one." + +ER_AUDIT_LOG_COULD_NOT_CREATE_AES_KEY + eng "Could not create AES key. OpenSSL's EVP_BytesToKey function failed." + +ER_AUDIT_LOG_ENCRYPTION_PASSWORD_CANNOT_BE_FETCHED + eng "Audit log encryption password cannot be fetched from the keyring. Password used so far is used for encryption." + +ER_AUDIT_LOG_JSON_FILTERING_NOT_ENABLED + eng "Audit Log filtering has not been installed." + +ER_AUDIT_LOG_UDF_INSUFFICIENT_PRIVILEGE + eng "Request ignored for '%s'@'%s'. SUPER_ACL needed to perform operation" + +ER_AUDIT_LOG_SUPER_PRIVILEGE_REQUIRED + eng "SUPER privilege required for '%s'@'%s' user." + +ER_COULD_NOT_REINITIALIZE_AUDIT_LOG_FILTERS + eng "Could not reinitialize audit log filters." + +ER_AUDIT_LOG_UDF_INVALID_ARGUMENT_TYPE + eng "Invalid argument type" + +ER_AUDIT_LOG_UDF_INVALID_ARGUMENT_COUNT + eng "Invalid argument count" + +ER_AUDIT_LOG_HAS_NOT_BEEN_INSTALLED + eng "audit_log plugin has not been installed using INSTALL PLUGIN syntax." + +ER_AUDIT_LOG_UDF_READ_INVALID_MAX_ARRAY_LENGTH_ARG_TYPE + eng "Invalid \"max_array_length\" argument type." + +ER_AUDIT_LOG_UDF_READ_INVALID_MAX_ARRAY_LENGTH_ARG_VALUE + eng "Invalid \"max_array_length\" argument value." + +ER_AUDIT_LOG_JSON_FILTER_PARSING_ERROR + eng "%s" + +ER_AUDIT_LOG_JSON_FILTER_NAME_CANNOT_BE_EMPTY + eng "Filter name cannot be empty." + +ER_AUDIT_LOG_JSON_USER_NAME_CANNOT_BE_EMPTY + eng "User cannot be empty." + +ER_AUDIT_LOG_JSON_FILTER_DOES_NOT_EXISTS + eng "Specified filter has not been found." + +ER_AUDIT_LOG_USER_FIRST_CHARACTER_MUST_BE_ALPHANUMERIC + eng "First character of the user name must be alphanumeric." + +ER_AUDIT_LOG_USER_NAME_INVALID_CHARACTER + eng "Invalid character in the user name." + +ER_AUDIT_LOG_HOST_NAME_INVALID_CHARACTER + eng "Invalid character in the host name." + # # End of 5.7 error messages. # From e585decb459740ec53b1ac1b85f332f7bd3c8ccf Mon Sep 17 00:00:00 2001 From: Pavan Naik Date: Mon, 5 Feb 2018 19:30:37 +0530 Subject: [PATCH 0519/1221] BUG#27448061: MYSQLD--DEFAULTS-FILE TEST FAILS FOR NDB RELEASES PREVIOUS TO MYSQL 8.0 Description : ------------- The mysqld--defaults-file test fails when the test suite is run from a non-canonical path, which happens when the current working directory when mysql-test-run.pl is started contains a symbolic link. The problem is that this test case uses --replace-result with $MYSQL_TEST_DIR. This variable is a potentially non-canonical path based on the current working directory when mtr is started. However, the path in the expected error message from mysqld contains a canonical path. This means it does not contain $MYSQL_TEST_DIR if mtr's working directory is not the canonical path of the working directory. Because other tests produce output that may contain non-canonical paths, making $MYSQL_TEST_DIR always canonical is not a fix. Fix : ----- Introduced a new environment variable '$ABS_MYSQL_TEST_DIR' which will contin the canonical path to the test directory and replaced $MYSQL_TEST_DIR with the new variable in main.mysqld--defaults-file test file. This is a back-port of BUG#24579973. Change-Id: I3b8df6f2d7ce2b04e188a896d76250cc1addbbc1 --- mysql-test/mysql-test-run.pl | 3 ++- mysql-test/t/mysqld--defaults-file.test | 10 ++++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index 2ca5c83e3f4a..99d3203fb515 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -1,7 +1,7 @@ #!/usr/bin/perl # -*- cperl -*- -# Copyright (c) 2004, 2017, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2004, 2018, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -2344,6 +2344,7 @@ sub environment_setup { $ENV{'DEFAULT_MASTER_PORT'}= $mysqld_variables{'port'}; $ENV{'MYSQL_TMP_DIR'}= $opt_tmpdir; $ENV{'MYSQLTEST_VARDIR'}= $opt_vardir; + $ENV{'MYSQL_TEST_DIR_ABS'}= getcwd(); $ENV{'MYSQL_BINDIR'}= "$bindir"; $ENV{'MYSQL_SHAREDIR'}= $path_language; $ENV{'MYSQL_CHARSETSDIR'}= $path_charsetsdir; diff --git a/mysql-test/t/mysqld--defaults-file.test b/mysql-test/t/mysqld--defaults-file.test index 3bfe0aa891f7..e2d5b40adbc0 100644 --- a/mysql-test/t/mysqld--defaults-file.test +++ b/mysql-test/t/mysqld--defaults-file.test @@ -13,19 +13,21 @@ exec $MYSQLD --defaults-file=/path/with/no/extension --print-defaults 2>&1; --error 1 exec $MYSQLD --defaults-file=/path/with.ext --print-defaults 2>&1; ---replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR +# Using $MYSQL_TEST_DIR_ABS which contains canonical path to the +# test directory since --print-default prints the absolute path. +--replace_result $MYSQL_TEST_DIR_ABS MYSQL_TEST_DIR --error 1 exec $MYSQLD --defaults-file=relative/path/with.ext --print-defaults 2>&1; ---replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR +--replace_result $MYSQL_TEST_DIR_ABS MYSQL_TEST_DIR --error 1 exec $MYSQLD --defaults-file=relative/path/without/extension --print-defaults 2>&1; ---replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR +--replace_result $MYSQL_TEST_DIR_ABS MYSQL_TEST_DIR --error 1 exec $MYSQLD --defaults-file=with.ext --print-defaults 2>&1; ---replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR +--replace_result $MYSQL_TEST_DIR_ABS MYSQL_TEST_DIR --error 1 exec $MYSQLD --defaults-file=no_extension --print-defaults 2>&1; From 6eea2f61ecf55c89c52505b75fe5e68ae001cb54 Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Mon, 12 Feb 2018 11:07:22 +0530 Subject: [PATCH 0520/1221] From 1e87e844466412437ed92a4ca1733becb48a2336 Mon Sep 17 00:00:00 2001 From: Bharathy Satish Date: Mon, 12 Feb 2018 07:28:57 +0100 Subject: [PATCH 0521/1221] Bug #27387331: MIGRATION TOOL SILENTLY IGNORES INVALID OPTIONS Problem: When migration options are specified along with some other invalid options, server ignores those options. Analysis: When keyring migration code kicks in there is no check to validate the options specified. As of today migration tool will only check for migration specific options and start the migration. Thus any other invalid options specified are simply ignored. Fix: Fix is to check for invalid options before starting migration and report error if there are any invalid options. --- sql/migrate_keyring.cc | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/sql/migrate_keyring.cc b/sql/migrate_keyring.cc index 7b7cd68e557b..2b1aaad62387 100644 --- a/sql/migrate_keyring.cc +++ b/sql/migrate_keyring.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -14,6 +14,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "log.h" +#include "my_default.h" // my_getopt_use_args_separator #include "migrate_keyring.h" #include "mysqld.h" #include "mysqld_error.h" @@ -112,10 +113,6 @@ bool Migrate_keyring::init(int argc, DBUG_RETURN(true); } - /* Restore program name */ - m_argc++; - m_argv--; - /* if connect options are provided then initiate connection */ if (migrate_connect_options) { @@ -180,6 +177,30 @@ bool Migrate_keyring::execute() DBUG_RETURN(true); } + /* skip program name */ + m_argc--; + m_argv++; + /* check for invalid options */ + if (m_argc > 1) + { + struct my_option no_opts[]= + { + {0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0} + }; + my_getopt_skip_unknown= 0; + my_getopt_use_args_separator= true; + if (handle_options(&m_argc, &m_argv, no_opts, NULL)) + unireg_abort(MYSQLD_ABORT_EXIT); + + if (m_argc > 1) + { + sql_print_error("Please specify options specific to keyring migration. Any " + "additional options can be ignored. NOTE: Although some options " + "are valid, migration tool can still report error example: plugin " + "variables for which plugin is not loaded yet."); + unireg_abort(MYSQLD_ABORT_EXIT); + } + } /* Disable access to keyring service APIs */ if (migrate_connect_options && disable_keyring_operations()) goto error; From bc1752ebceb80ee041e03d9f9dfda706d88e0879 Mon Sep 17 00:00:00 2001 From: Laurynas Biveinis Date: Mon, 12 Feb 2018 08:59:57 +0200 Subject: [PATCH 0522/1221] Fix PS-3813 (Leftover function declaration innobase_get_slow_log) Remove the leftover declaration. --- storage/innobase/include/srv0srv.h | 4 ---- 1 file changed, 4 deletions(-) diff --git a/storage/innobase/include/srv0srv.h b/storage/innobase/include/srv0srv.h index 7da130082633..5776ee732d53 100644 --- a/storage/innobase/include/srv0srv.h +++ b/storage/innobase/include/srv0srv.h @@ -197,10 +197,6 @@ at a time */ extern ib_mutex_t page_zip_stat_per_index_mutex; /* Mutex for locking srv_monitor_file. Not created if srv_read_only_mode */ extern ib_mutex_t srv_monitor_file_mutex; - -/* prototypes for new functions added to ha_innodb.cc */ -bool innobase_get_slow_log(); - /* Temporary file for innodb monitor output */ extern FILE* srv_monitor_file; /* Mutex for locking srv_dict_tmpfile. Only created if !srv_read_only_mode. From e4784703ee44d0a0a497a1a411dea20987d501ad Mon Sep 17 00:00:00 2001 From: Arun Kuruvila Date: Mon, 12 Feb 2018 15:19:43 +0530 Subject: [PATCH 0523/1221] Bug#25471090: MYSQL USE AFTER FREE Description:- Mysql client crashes when trying to connect to a fake server which is sending incorrect packets. Analysis:- Mysql client crashes when it tries to read server version details. Fix:- A check is added in "red_one_row()". --- include/mysql_com.h | 3 ++- sql-common/client.c | 16 +++++++++------- sql-common/pack.c | 37 +++++++++++++++++++++++++++++++++++-- 3 files changed, 46 insertions(+), 10 deletions(-) diff --git a/include/mysql_com.h b/include/mysql_com.h index 5cd409157434..52e8a367e3d5 100644 --- a/include/mysql_com.h +++ b/include/mysql_com.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -561,6 +561,7 @@ void my_thread_end(void); #ifdef _global_h ulong STDCALL net_field_length(uchar **packet); +ulong STDCALL net_field_length_checked(uchar **packet, ulong max_length); my_ulonglong net_field_length_ll(uchar **packet); uchar *net_store_length(uchar *pkg, ulonglong length); #endif diff --git a/sql-common/client.c b/sql-common/client.c index 759d95117cba..9972ca741f25 100644 --- a/sql-common/client.c +++ b/sql-common/client.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -1723,18 +1723,20 @@ read_one_row(MYSQL *mysql,uint fields,MYSQL_ROW row, ulong *lengths) end_pos=pos+pkt_len; for (field=0 ; field < fields ; field++) { - if ((len=(ulong) net_field_length(&pos)) == NULL_LENGTH) + len=(ulong) net_field_length_checked(&pos, (ulong)(end_pos - pos)); + if (pos > end_pos) + { + set_mysql_error(mysql, CR_UNKNOWN_ERROR, unknown_sqlstate); + return -1; + } + + if (len == NULL_LENGTH) { /* null field */ row[field] = 0; *lengths++=0; } else { - if (len > (ulong) (end_pos - pos)) - { - set_mysql_error(mysql, CR_UNKNOWN_ERROR, unknown_sqlstate); - return -1; - } row[field] = (char*) pos; pos+=len; *lengths++=len; diff --git a/sql-common/pack.c b/sql-common/pack.c index 02e91b5c3e33..57ff55689a23 100644 --- a/sql-common/pack.c +++ b/sql-common/pack.c @@ -1,5 +1,4 @@ -/* Copyright (c) 2000-2003, 2007 MySQL AB - Use is subject to license terms +/* Copyright (c) 2000, 2018 Oracle and/or its affiliates. All rights reserved. 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 @@ -46,6 +45,40 @@ ulong STDCALL net_field_length(uchar **packet) return (ulong) uint4korr(pos+1); } +/* The same as above but with max length check */ +ulong STDCALL net_field_length_checked(uchar **packet, ulong max_length) +{ + ulong len; + uchar *pos= (uchar *)*packet; + + if (*pos < 251) + { + (*packet)++; + len= (ulong) *pos; + return (len > max_length) ? max_length : len; + } + if (*pos == 251) + { + (*packet)++; + return NULL_LENGTH; + } + if (*pos == 252) + { + (*packet)+=3; + len= (ulong) uint2korr(pos+1); + return (len > max_length) ? max_length : len; + } + if (*pos == 253) + { + (*packet)+=4; + len= (ulong) uint3korr(pos+1); + return (len > max_length) ? max_length : len; + } + (*packet)+=9; /* Must be 254 when here */ + len= (ulong) uint4korr(pos+1); + return (len > max_length) ? max_length : len; +} + /* The same as above but returns longlong */ my_ulonglong net_field_length_ll(uchar **packet) { From b6e813f49b65b63187ac76443e8ddddb00a8688c Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Mon, 12 Feb 2018 14:09:28 +0100 Subject: [PATCH 0524/1221] PS-3814: Fixing clang warnings after the upstream merge * Removed unnecessary parentheses around a comparison * Removed an unused global variable --- .../src/sql_service/sql_service_interface.cc | 38 ------------------- sql/partitioning/partition_handler.cc | 2 +- 2 files changed, 1 insertion(+), 39 deletions(-) diff --git a/rapid/plugin/group_replication/src/sql_service/sql_service_interface.cc b/rapid/plugin/group_replication/src/sql_service/sql_service_interface.cc index f4e79f5b6980..38b7669726aa 100644 --- a/rapid/plugin/group_replication/src/sql_service/sql_service_interface.cc +++ b/rapid/plugin/group_replication/src/sql_service/sql_service_interface.cc @@ -17,44 +17,6 @@ #include "plugin_log.h" #include -/* keep it in sync with enum_server_command in my_command.h */ -const LEX_STRING command_name[]={ - { C_STRING_WITH_LEN("Sleep") }, - { C_STRING_WITH_LEN("Quit") }, - { C_STRING_WITH_LEN("Init DB") }, - { C_STRING_WITH_LEN("Query") }, - { C_STRING_WITH_LEN("Field List") }, - { C_STRING_WITH_LEN("Create DB") }, - { C_STRING_WITH_LEN("Drop DB") }, - { C_STRING_WITH_LEN("Refresh") }, - { C_STRING_WITH_LEN("Shutdown") }, - { C_STRING_WITH_LEN("Statistics") }, - { C_STRING_WITH_LEN("Processlist") }, - { C_STRING_WITH_LEN("Connect") }, - { C_STRING_WITH_LEN("Kill") }, - { C_STRING_WITH_LEN("Debug") }, - { C_STRING_WITH_LEN("Ping") }, - { C_STRING_WITH_LEN("Time") }, - { C_STRING_WITH_LEN("Delayed insert") }, - { C_STRING_WITH_LEN("Change user") }, - { C_STRING_WITH_LEN("Binlog Dump") }, - { C_STRING_WITH_LEN("Table Dump") }, - { C_STRING_WITH_LEN("Connect Out") }, - { C_STRING_WITH_LEN("Register Slave") }, - { C_STRING_WITH_LEN("Prepare") }, - { C_STRING_WITH_LEN("Execute") }, - { C_STRING_WITH_LEN("Long Data") }, - { C_STRING_WITH_LEN("Close stmt") }, - { C_STRING_WITH_LEN("Reset stmt") }, - { C_STRING_WITH_LEN("Set option") }, - { C_STRING_WITH_LEN("Fetch") }, - { C_STRING_WITH_LEN("Daemon") }, - { C_STRING_WITH_LEN("Binlog Dump GTID") }, - { C_STRING_WITH_LEN("Reset Connection") }, - { C_STRING_WITH_LEN("Error") } // Last command number -}; - - /* Sql_service_interface constructor */ Sql_service_interface::Sql_service_interface(enum cs_text_or_binary cs_txt_bin, const CHARSET_INFO *charset) diff --git a/sql/partitioning/partition_handler.cc b/sql/partitioning/partition_handler.cc index ea9c73fd6e35..1d550f41f3c6 100644 --- a/sql/partitioning/partition_handler.cc +++ b/sql/partitioning/partition_handler.cc @@ -3070,7 +3070,7 @@ int Partition_helper::handle_unordered_next(uchar *buf, bool is_next_same) m_start_key.key, m_start_key.length); } - else if ((m_index_scan_type == PARTITION_READ_RANGE)) + else if (m_index_scan_type == PARTITION_READ_RANGE) { DBUG_ASSERT(buf == m_table->record[0]); error= read_range_next_in_part(m_part_spec.start_part, NULL); From 3805b4ddf2415b08b20e511e48fbcbddd70ed705 Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Mon, 12 Feb 2018 14:48:44 +0100 Subject: [PATCH 0525/1221] PS-3802: Travis CI: Separate jobs for Debug and RelWithDebInfo (for 5.5) --- .travis.yml | 49 ++++++++++++++++++++++++------------------------- 1 file changed, 24 insertions(+), 25 deletions(-) diff --git a/.travis.yml b/.travis.yml index 024a900bde14..3e5f6fc7a875 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,26 +14,37 @@ matrix: - git diff -U0 --no-color HEAD^1 | ./clang-format-diff.py -p1 >_GIT_DIFF - '[ ! -s _GIT_DIFF ] && echo The last git commit is clang-formatted || cat _GIT_DIFF' - - env: GCC=gcc-4.8 CXX=g++-4.8 LIBTYPE=system - - env: GCC=gcc-7 CXX=g++-7 LIBTYPE=system PACKAGES=g++-7 PPA=ubuntu-toolchain-r/test - - env: GCC=gcc-7 CXX=g++-7 LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" PACKAGES=g++-7 PPA=ubuntu-toolchain-r/test - - env: GCC=clang-5.0 CXX=clang++-5.0 LIBTYPE=system PACKAGES="clang-5.0 llvm-5.0-dev" LLVM=llvm-toolchain-trusty-5.0 + - env: GCC=gcc-4.8 CXX=g++-4.8 BUILD=Debug LIBTYPE=system + - env: GCC=gcc-4.8 CXX=g++-4.8 BUILD=RelWithDebInfo LIBTYPE=system + - env: GCC=gcc-7 CXX=g++-7 BUILD=Debug LIBTYPE=system PACKAGES=g++-7 PPA=ubuntu-toolchain-r/test + - env: GCC=gcc-7 CXX=g++-7 BUILD=RelWithDebInfo LIBTYPE=system PACKAGES=g++-7 PPA=ubuntu-toolchain-r/test + - env: GCC=gcc-7 CXX=g++-7 BUILD=Debug LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" PACKAGES=g++-7 PPA=ubuntu-toolchain-r/test + - env: GCC=gcc-7 CXX=g++-7 BUILD=RelWithDebInfo LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" PACKAGES=g++-7 PPA=ubuntu-toolchain-r/test + - env: GCC=clang-5.0 CXX=clang++-5.0 BUILD=Debug LIBTYPE=system PACKAGES="clang-5.0 llvm-5.0-dev" LLVM=llvm-toolchain-trusty-5.0 + - env: GCC=clang-5.0 CXX=clang++-5.0 BUILD=RelWithDebInfo LIBTYPE=system PACKAGES="clang-5.0 llvm-5.0-dev" LLVM=llvm-toolchain-trusty-5.0 # only for pull requests - - env: GCC=gcc-5 CXX=g++-5 LIBTYPE=system PACKAGES=g++-5 PPA=ubuntu-toolchain-r/test - - env: GCC=gcc-6 CXX=g++-6 LIBTYPE=system PACKAGES=g++-6 PPA=ubuntu-toolchain-r/test - - env: GCC=clang-4.0 CXX=clang++-4.0 LIBTYPE=system PACKAGES="clang-4.0 llvm-4.0-dev" PPA=ubuntu-toolchain-r/test LLVM=llvm-toolchain-trusty-4.0 - - env: GCC=clang-5.0 CXX=clang++-5.0 LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" PACKAGES="clang-5.0 llvm-5.0-dev" LLVM=llvm-toolchain-trusty-5.0 + - env: GCC=gcc-5 CXX=g++-5 BUILD=Debug LIBTYPE=system PACKAGES=g++-5 PPA=ubuntu-toolchain-r/test + - env: GCC=gcc-5 CXX=g++-5 BUILD=RelWithDebInfo LIBTYPE=system PACKAGES=g++-5 PPA=ubuntu-toolchain-r/test + - env: GCC=gcc-6 CXX=g++-6 BUILD=Debug LIBTYPE=system PACKAGES=g++-6 PPA=ubuntu-toolchain-r/test + - env: GCC=gcc-6 CXX=g++-6 BUILD=RelWithDebInfo LIBTYPE=system PACKAGES=g++-6 PPA=ubuntu-toolchain-r/test + - env: GCC=clang-4.0 CXX=clang++-4.0 BUILD=Debug LIBTYPE=system PACKAGES="clang-4.0 llvm-4.0-dev" PPA=ubuntu-toolchain-r/test LLVM=llvm-toolchain-trusty-4.0 + - env: GCC=clang-4.0 CXX=clang++-4.0 BUILD=RelWithDebInfo LIBTYPE=system PACKAGES="clang-4.0 llvm-4.0-dev" PPA=ubuntu-toolchain-r/test LLVM=llvm-toolchain-trusty-4.0 + - env: GCC=clang-5.0 CXX=clang++-5.0 BUILD=Debug LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" PACKAGES="clang-5.0 llvm-5.0-dev" LLVM=llvm-toolchain-trusty-5.0 + - env: GCC=clang-5.0 CXX=clang++-5.0 BUILD=RelWithDebInfo LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" PACKAGES="clang-5.0 llvm-5.0-dev" LLVM=llvm-toolchain-trusty-5.0 - os: osx osx_image: xcode9.2 - env: LIBTYPE=bundled GCC=clang CXX=clang++ MAINTAINER_MODE=OFF + env: BUILD=Debug LIBTYPE=bundled GCC=clang CXX=clang++ MAINTAINER_MODE=OFF + - os: osx + osx_image: xcode9.2 + env: BUILD=RelWithDebInfo LIBTYPE=bundled GCC=clang CXX=clang++ MAINTAINER_MODE=OFF script: - export CC=$GCC - JOB_NUMBER=$(echo $TRAVIS_JOB_NUMBER | sed -e 's:[0-9][0-9]*\.\(.*\):\1:') - echo PACKAGES=$PACKAGES PPA=$PPA LLVM=$LLVM JOB_NUMBER=$JOB_NUMBER TRAVIS_BRANCH=$TRAVIS_BRANCH TRAVIS_EVENT_TYPE=$TRAVIS_EVENT_TYPE TRAVIS_PULL_REQUEST=$TRAVIS_PULL_REQUEST MAINTAINER_MODE=$MAINTAINER_MODE - # Jobs with a number >= 6 are done only for a pull request - - if [ $JOB_NUMBER -ge 6 ] && [ "$TRAVIS_EVENT_TYPE" != "pull_request" ]; then + # Jobs with a number >= 10 are done only for a pull request + - if [ $JOB_NUMBER -ge 10 ] && [ "$TRAVIS_EVENT_TYPE" != "pull_request" ]; then echo Finishing as this is not a pull request; travis_terminate 0; fi @@ -59,9 +70,9 @@ script: - $CC -v - $CXX -v - # Test "RelWithDebInfo" compilation + # Test $BUILD compilation - cmake .. - -DCMAKE_BUILD_TYPE=RelWithDebInfo + -DCMAKE_BUILD_TYPE=$BUILD -DMYSQL_MAINTAINER_MODE=$MAINTAINER_MODE -DBUILD_CONFIG=mysql_release -DFEATURE_SET=community @@ -71,15 +82,3 @@ script: $CMAKE_OPT - make -j2 - # Test "Debug" compilation - - rm -rf * - - cmake .. - -DCMAKE_BUILD_TYPE=Debug - -DMYSQL_MAINTAINER_MODE=$MAINTAINER_MODE - -DBUILD_CONFIG=mysql_release - -DFEATURE_SET=community - -DENABLE_DTRACE=OFF - -DWITH_SSL=$LIBTYPE - -DWITH_ZLIB=$LIBTYPE - $CMAKE_OPT - - make -j2 From 635867018719d56fab6ff74b0f59427c3591463d Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Mon, 12 Feb 2018 14:53:31 +0100 Subject: [PATCH 0526/1221] PS-3815: optnone is ignored by GCC The optnone attirbute is ignored by gcc, and the funcsion remains optimized. This commit disables optimization with different attributes correctly for both gcc and clang. --- storage/rocksdb/ha_rocksdb.cc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index d87ff797cc40..c35820fb486e 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -11929,7 +11929,11 @@ const char *get_rdb_io_error_string(const RDB_IO_ERROR_TYPE err_type) { // so that we can capture as much data as possible to debug the root cause // more efficiently. #if defined(DBUG_OFF) +#ifdef __clang__ MY_ATTRIBUTE((optnone)) +#else +MY_ATTRIBUTE((optimize("O0"))) +#endif #endif void rdb_handle_io_error(const rocksdb::Status status, const RDB_IO_ERROR_TYPE err_type) { From 14099bbd3152b2cd828092b578c58c6a7ee7d2a6 Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Mon, 12 Feb 2018 14:59:10 +0100 Subject: [PATCH 0527/1221] PS-3802: Travis CI: Separate jobs for Debug and RelWithDebInfo (for 5.6) --- .travis.yml | 53 ++++++++++++++++++++++++----------------------------- 1 file changed, 24 insertions(+), 29 deletions(-) diff --git a/.travis.yml b/.travis.yml index 80935997d69d..798a84153a90 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,27 +14,37 @@ matrix: - chmod a+x clang-format-diff.py - git diff -U0 --no-color HEAD^1 | ./clang-format-diff.py -p1 >_GIT_DIFF - '[ ! -s _GIT_DIFF ] && echo The last git commit is clang-formatted || cat _GIT_DIFF' - - - env: GCC=gcc-4.8 CXX=g++-4.8 LIBTYPE=system CMAKE_OPT="-DWITH_READLINE=system" - - env: GCC=gcc-7 CXX=g++-7 LIBTYPE=system CMAKE_OPT="-DWITH_READLINE=system" PACKAGES=g++-7 PPA=ubuntu-toolchain-r/test - - env: GCC=gcc-7 CXX=g++-7 LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" PACKAGES=g++-7 PPA=ubuntu-toolchain-r/test - - env: GCC=clang-5.0 CXX=clang++-5.0 LIBTYPE=system CMAKE_OPT="-DWITH_READLINE=system" PACKAGES="clang-5.0 llvm-5.0-dev" LLVM=llvm-toolchain-trusty-5.0 + - env: GCC=gcc-4.8 CXX=g++-4.8 BUILD=Debug LIBTYPE=system + - env: GCC=gcc-4.8 CXX=g++-4.8 BUILD=RelWithDebInfo LIBTYPE=system + - env: GCC=gcc-7 CXX=g++-7 BUILD=Debug LIBTYPE=system PACKAGES=g++-7 PPA=ubuntu-toolchain-r/test + - env: GCC=gcc-7 CXX=g++-7 BUILD=RelWithDebInfo LIBTYPE=system PACKAGES=g++-7 PPA=ubuntu-toolchain-r/test + - env: GCC=gcc-7 CXX=g++-7 BUILD=Debug LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" PACKAGES=g++-7 PPA=ubuntu-toolchain-r/test + - env: GCC=gcc-7 CXX=g++-7 BUILD=RelWithDebInfo LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" PACKAGES=g++-7 PPA=ubuntu-toolchain-r/test + - env: GCC=clang-5.0 CXX=clang++-5.0 BUILD=Debug LIBTYPE=system PACKAGES="clang-5.0 llvm-5.0-dev" LLVM=llvm-toolchain-trusty-5.0 + - env: GCC=clang-5.0 CXX=clang++-5.0 BUILD=RelWithDebInfo LIBTYPE=system PACKAGES="clang-5.0 llvm-5.0-dev" LLVM=llvm-toolchain-trusty-5.0 # only for pull requests - - env: GCC=gcc-5 CXX=g++-5 LIBTYPE=system CMAKE_OPT="-DWITH_READLINE=system" PACKAGES=g++-5 PPA=ubuntu-toolchain-r/test - - env: GCC=gcc-6 CXX=g++-6 LIBTYPE=system CMAKE_OPT="-DWITH_READLINE=system" PACKAGES=g++-6 PPA=ubuntu-toolchain-r/test - - env: GCC=clang-4.0 CXX=clang++-4.0 LIBTYPE=system CMAKE_OPT="-DWITH_READLINE=system" PACKAGES="clang-4.0 llvm-4.0-dev" PPA=ubuntu-toolchain-r/test LLVM=llvm-toolchain-trusty-4.0 - - env: GCC=clang-5.0 CXX=clang++-5.0 LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" PACKAGES="clang-5.0 llvm-5.0-dev" LLVM=llvm-toolchain-trusty-5.0 + - env: GCC=gcc-5 CXX=g++-5 BUILD=Debug LIBTYPE=system PACKAGES=g++-5 PPA=ubuntu-toolchain-r/test + - env: GCC=gcc-5 CXX=g++-5 BUILD=RelWithDebInfo LIBTYPE=system PACKAGES=g++-5 PPA=ubuntu-toolchain-r/test + - env: GCC=gcc-6 CXX=g++-6 BUILD=Debug LIBTYPE=system PACKAGES=g++-6 PPA=ubuntu-toolchain-r/test + - env: GCC=gcc-6 CXX=g++-6 BUILD=RelWithDebInfo LIBTYPE=system PACKAGES=g++-6 PPA=ubuntu-toolchain-r/test + - env: GCC=clang-4.0 CXX=clang++-4.0 BUILD=Debug LIBTYPE=system PACKAGES="clang-4.0 llvm-4.0-dev" PPA=ubuntu-toolchain-r/test LLVM=llvm-toolchain-trusty-4.0 + - env: GCC=clang-4.0 CXX=clang++-4.0 BUILD=RelWithDebInfo LIBTYPE=system PACKAGES="clang-4.0 llvm-4.0-dev" PPA=ubuntu-toolchain-r/test LLVM=llvm-toolchain-trusty-4.0 + - env: GCC=clang-5.0 CXX=clang++-5.0 BUILD=Debug LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" PACKAGES="clang-5.0 llvm-5.0-dev" LLVM=llvm-toolchain-trusty-5.0 + - env: GCC=clang-5.0 CXX=clang++-5.0 BUILD=RelWithDebInfo LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" PACKAGES="clang-5.0 llvm-5.0-dev" LLVM=llvm-toolchain-trusty-5.0 + - os: osx + osx_image: xcode9.2 + env: BUILD=Debug LIBTYPE=bundled GCC=clang CXX=clang++ MAINTAINER_MODE=OFF WITHOUT_TOKUDB=ON - os: osx osx_image: xcode9.2 - env: LIBTYPE=bundled GCC=clang CXX=clang++ MAINTAINER_MODE=OFF WITHOUT_TOKUDB=ON + env: BUILD=RelWithDebInfo LIBTYPE=bundled GCC=clang CXX=clang++ MAINTAINER_MODE=OFF WITHOUT_TOKUDB=ON script: - export CC=$GCC - JOB_NUMBER=$(echo $TRAVIS_JOB_NUMBER | sed -e 's:[0-9][0-9]*\.\(.*\):\1:') - echo PACKAGES=$PACKAGES PPA=$PPA LLVM=$LLVM JOB_NUMBER=$JOB_NUMBER TRAVIS_BRANCH=$TRAVIS_BRANCH TRAVIS_EVENT_TYPE=$TRAVIS_EVENT_TYPE TRAVIS_PULL_REQUEST=$TRAVIS_PULL_REQUEST MAINTAINER_MODE=$MAINTAINER_MODE WITHOUT_TOKUDB=$WITHOUT_TOKUDB - # Jobs with a number >= 6 are done only for a pull request - - if [ $JOB_NUMBER -ge 6 ] && [ "$TRAVIS_EVENT_TYPE" != "pull_request" ]; then + # Jobs with a number >= 10 are done only for a pull request + - if [ $JOB_NUMBER -ge 10 ] && [ "$TRAVIS_EVENT_TYPE" != "pull_request" ]; then echo Finishing as this is not a pull request; travis_terminate 0; fi @@ -60,9 +70,9 @@ script: - $CC -v - $CXX -v - # Test "RelWithDebInfo" compilation + # Test $BUILD compilation - cmake .. - -DCMAKE_BUILD_TYPE=RelWithDebInfo + -DCMAKE_BUILD_TYPE=$BUILD -DMYSQL_MAINTAINER_MODE=$MAINTAINER_MODE -DBUILD_CONFIG=mysql_release -DFEATURE_SET=community @@ -75,18 +85,3 @@ script: $CMAKE_OPT - make -j2 - # Test "Debug" compilation - - rm -rf * - - cmake .. - -DCMAKE_BUILD_TYPE=Debug - -DMYSQL_MAINTAINER_MODE=$MAINTAINER_MODE - -DBUILD_CONFIG=mysql_release - -DFEATURE_SET=community - -DENABLE_DTRACE=OFF - -DWITH_SSL=$LIBTYPE - -DWITH_ZLIB=$LIBTYPE - -DWITH_LIBEVENT=$LIBTYPE - -DWITHOUT_TOKUDB=$WITHOUT_TOKUDB - -DENABLE_DOWNLOADS=1 - $CMAKE_OPT - - make -j2 From 21a5455692b22831df1e021ae12f31d590521d0e Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Mon, 12 Feb 2018 14:59:10 +0100 Subject: [PATCH 0528/1221] PS-3802: Travis CI: Separate jobs for Debug and RelWithDebInfo (for 5.7) --- .travis.yml | 57 ++++++++++++++++++++++------------------------------- 1 file changed, 24 insertions(+), 33 deletions(-) diff --git a/.travis.yml b/.travis.yml index a1e32dba7446..07955a73a649 100644 --- a/.travis.yml +++ b/.travis.yml @@ -16,27 +16,37 @@ matrix: - chmod a+x clang-format-diff.py - git diff -U0 --no-color HEAD^1 | ./clang-format-diff.py -p1 >_GIT_DIFF - '[ ! -s _GIT_DIFF ] && echo The last git commit is clang-formatted || cat _GIT_DIFF' - - - env: GCC=gcc-4.8 CXX=g++-4.8 LIBTYPE=system CMAKE_OPT="-DWITH_READLINE=system" - - env: GCC=gcc-7 CXX=g++-7 LIBTYPE=system CMAKE_OPT="-DWITH_READLINE=system" PACKAGES=g++-7 PPA=ubuntu-toolchain-r/test - - env: GCC=gcc-7 CXX=g++-7 LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" PACKAGES=g++-7 PPA=ubuntu-toolchain-r/test - - env: GCC=clang-5.0 CXX=clang++-5.0 LIBTYPE=system CMAKE_OPT="-DWITH_READLINE=system" PACKAGES="clang-5.0 llvm-5.0-dev" LLVM=llvm-toolchain-trusty-5.0 + - env: GCC=gcc-4.8 CXX=g++-4.8 BUILD=Debug LIBTYPE=system + - env: GCC=gcc-4.8 CXX=g++-4.8 BUILD=RelWithDebInfo LIBTYPE=system + - env: GCC=gcc-7 CXX=g++-7 BUILD=Debug LIBTYPE=system PACKAGES=g++-7 PPA=ubuntu-toolchain-r/test + - env: GCC=gcc-7 CXX=g++-7 BUILD=RelWithDebInfo LIBTYPE=system PACKAGES=g++-7 PPA=ubuntu-toolchain-r/test + - env: GCC=gcc-7 CXX=g++-7 BUILD=Debug LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" PACKAGES=g++-7 PPA=ubuntu-toolchain-r/test + - env: GCC=gcc-7 CXX=g++-7 BUILD=RelWithDebInfo LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" PACKAGES=g++-7 PPA=ubuntu-toolchain-r/test + - env: GCC=clang-5.0 CXX=clang++-5.0 BUILD=Debug LIBTYPE=system PACKAGES="clang-5.0 llvm-5.0-dev" LLVM=llvm-toolchain-trusty-5.0 + - env: GCC=clang-5.0 CXX=clang++-5.0 BUILD=RelWithDebInfo LIBTYPE=system PACKAGES="clang-5.0 llvm-5.0-dev" LLVM=llvm-toolchain-trusty-5.0 # only for pull requests - - env: GCC=gcc-5 CXX=g++-5 LIBTYPE=system CMAKE_OPT="-DWITH_READLINE=system" PACKAGES=g++-5 PPA=ubuntu-toolchain-r/test - - env: GCC=gcc-6 CXX=g++-6 LIBTYPE=system CMAKE_OPT="-DWITH_READLINE=system" PACKAGES=g++-6 PPA=ubuntu-toolchain-r/test - - env: GCC=clang-4.0 CXX=clang++-4.0 LIBTYPE=system CMAKE_OPT="-DWITH_READLINE=system" PACKAGES="clang-4.0 llvm-4.0-dev" PPA=ubuntu-toolchain-r/test LLVM=llvm-toolchain-trusty-4.0 - - env: GCC=clang-5.0 CXX=clang++-5.0 LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" PACKAGES="clang-5.0 llvm-5.0-dev" LLVM=llvm-toolchain-trusty-5.0 + - env: GCC=gcc-5 CXX=g++-5 BUILD=Debug LIBTYPE=system PACKAGES=g++-5 PPA=ubuntu-toolchain-r/test + - env: GCC=gcc-5 CXX=g++-5 BUILD=RelWithDebInfo LIBTYPE=system PACKAGES=g++-5 PPA=ubuntu-toolchain-r/test + - env: GCC=gcc-6 CXX=g++-6 BUILD=Debug LIBTYPE=system PACKAGES=g++-6 PPA=ubuntu-toolchain-r/test + - env: GCC=gcc-6 CXX=g++-6 BUILD=RelWithDebInfo LIBTYPE=system PACKAGES=g++-6 PPA=ubuntu-toolchain-r/test + - env: GCC=clang-4.0 CXX=clang++-4.0 BUILD=Debug LIBTYPE=system PACKAGES="clang-4.0 llvm-4.0-dev" PPA=ubuntu-toolchain-r/test LLVM=llvm-toolchain-trusty-4.0 + - env: GCC=clang-4.0 CXX=clang++-4.0 BUILD=RelWithDebInfo LIBTYPE=system PACKAGES="clang-4.0 llvm-4.0-dev" PPA=ubuntu-toolchain-r/test LLVM=llvm-toolchain-trusty-4.0 + - env: GCC=clang-5.0 CXX=clang++-5.0 BUILD=Debug LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" PACKAGES="clang-5.0 llvm-5.0-dev" LLVM=llvm-toolchain-trusty-5.0 + - env: GCC=clang-5.0 CXX=clang++-5.0 BUILD=RelWithDebInfo LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" PACKAGES="clang-5.0 llvm-5.0-dev" LLVM=llvm-toolchain-trusty-5.0 + - os: osx + osx_image: xcode9.2 + env: BUILD=Debug LIBTYPE=bundled GCC=clang CXX=clang++ MAINTAINER_MODE=OFF WITHOUT_TOKUDB=ON WITHOUT_ROCKSDB=ON WITH_MECAB= - os: osx osx_image: xcode9.2 - env: LIBTYPE=bundled GCC=clang CXX=clang++ MAINTAINER_MODE=OFF WITHOUT_TOKUDB=ON WITHOUT_ROCKSDB=ON WITH_MECAB= + env: BUILD=RelWithDebInfo LIBTYPE=bundled GCC=clang CXX=clang++ MAINTAINER_MODE=OFF WITHOUT_TOKUDB=ON WITHOUT_ROCKSDB=ON WITH_MECAB= script: - export CC=$GCC - JOB_NUMBER=$(echo $TRAVIS_JOB_NUMBER | sed -e 's:[0-9][0-9]*\.\(.*\):\1:') - echo PACKAGES=$PACKAGES PPA=$PPA LLVM=$LLVM JOB_NUMBER=$JOB_NUMBER TRAVIS_BRANCH=$TRAVIS_BRANCH TRAVIS_EVENT_TYPE=$TRAVIS_EVENT_TYPE TRAVIS_PULL_REQUEST=$TRAVIS_PULL_REQUEST MAINTAINER_MODE=$MAINTAINER_MODE WITHOUT_TOKUDB=$WITHOUT_TOKUDB - # Jobs with a number >= 6 are done only for a pull request - - if [ $JOB_NUMBER -ge 6 ] && [ "$TRAVIS_EVENT_TYPE" != "pull_request" ]; then + # Jobs with a number >= 10 are done only for a pull request + - if [ $JOB_NUMBER -ge 10 ] && [ "$TRAVIS_EVENT_TYPE" != "pull_request" ]; then echo Finishing as this is not a pull request; travis_terminate 0; fi @@ -62,9 +72,9 @@ script: - $CC -v - $CXX -v - # Test "RelWithDebInfo" compilation + # Test $BUILD compilation - cmake .. - -DCMAKE_BUILD_TYPE=RelWithDebInfo + -DCMAKE_BUILD_TYPE=$BUILD -DMYSQL_MAINTAINER_MODE=$MAINTAINER_MODE -DBUILD_CONFIG=mysql_release -DFEATURE_SET=community @@ -81,22 +91,3 @@ script: $CMAKE_OPT - make -j2 - # Test "Debug" compilation - - rm -rf * - - cmake .. - -DCMAKE_BUILD_TYPE=Debug - -DMYSQL_MAINTAINER_MODE=$MAINTAINER_MODE - -DBUILD_CONFIG=mysql_release - -DFEATURE_SET=community - -DENABLE_DTRACE=OFF - -DWITH_SSL=$LIBTYPE - -DWITH_ZLIB=$LIBTYPE - -DWITH_MECAB=$WITH_MECAB - -DWITH_LIBEVENT=$LIBTYPE - -DWITHOUT_TOKUDB=$WITHOUT_TOKUDB - -DWITHOUT_ROCKSDB=$WITHOUT_ROCKSDB - -DENABLE_DOWNLOADS=1 - -DDOWNLOAD_BOOST=1 - -DWITH_BOOST=../deps - $CMAKE_OPT - - make -j2 From aa9c2a5608c5c8c87a4640a5fc30f3b54dac9e8d Mon Sep 17 00:00:00 2001 From: EvgeniyPatlan Date: Mon, 12 Feb 2018 20:56:00 +0200 Subject: [PATCH 0529/1221] Revert "Release 5.6.39 83.2" --- build-ps/rpm/mysql-5.6-sharedlib-rename.patch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build-ps/rpm/mysql-5.6-sharedlib-rename.patch b/build-ps/rpm/mysql-5.6-sharedlib-rename.patch index 2eed89baa262..b6dd53adab31 100644 --- a/build-ps/rpm/mysql-5.6-sharedlib-rename.patch +++ b/build-ps/rpm/mysql-5.6-sharedlib-rename.patch @@ -15,7 +15,7 @@ diff -rup old/client/CMakeLists.txt new/client/CMakeLists.txt SET_SOURCE_FILES_PROPERTIES(mysqltest.cc PROPERTIES COMPILE_FLAGS "-DTHREADS") -TARGET_LINK_LIBRARIES(mysqltest perconaserverclient regex) +TARGET_LINK_LIBRARIES(mysqltest mysqlclient regex) - ADD_DEPENDENCIES(mysqltest GenError) + MYSQL_ADD_EXECUTABLE(mysqlcheck mysqlcheck.c) -TARGET_LINK_LIBRARIES(mysqlcheck perconaserverclient) From 1845264c7fc443faabd9f18142b8af407889cf2d Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Mon, 12 Feb 2018 14:15:49 -0700 Subject: [PATCH 0530/1221] Revert "MYR-47 : Investigate how to take in Facebook MySQL rpl writebatch" This reverts commit 175b2ffe7cc1619cdf96cba13137ebd577f82f8f which removed the rocksdb_rpl_skip_tx_api functionality. --- .../r/rocksdb_rpl_skip_tx_api_basic.result | 68 +++++++++++++++++++ .../t/rocksdb_rpl_skip_tx_api_basic.test | 19 ++++++ mysql-test/suite/rocksdb/r/i_s_trx_rpl.result | 14 ++++ mysql-test/suite/rocksdb/r/rocksdb.result | 1 + .../suite/rocksdb/t/i_s_trx_rpl-master.opt | 1 + .../suite/rocksdb/t/i_s_trx_rpl-slave.opt | 1 + mysql-test/suite/rocksdb/t/i_s_trx_rpl.test | 42 ++++++++++++ storage/rocksdb/ha_rocksdb.cc | 6 ++ 8 files changed, 152 insertions(+) create mode 100644 mysql-test/suite/rocksdb.sys_vars/r/rocksdb_rpl_skip_tx_api_basic.result create mode 100644 mysql-test/suite/rocksdb.sys_vars/t/rocksdb_rpl_skip_tx_api_basic.test create mode 100644 mysql-test/suite/rocksdb/r/i_s_trx_rpl.result create mode 100644 mysql-test/suite/rocksdb/t/i_s_trx_rpl-master.opt create mode 100644 mysql-test/suite/rocksdb/t/i_s_trx_rpl-slave.opt create mode 100644 mysql-test/suite/rocksdb/t/i_s_trx_rpl.test diff --git a/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_rpl_skip_tx_api_basic.result b/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_rpl_skip_tx_api_basic.result new file mode 100644 index 000000000000..919abdd3e2ae --- /dev/null +++ b/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_rpl_skip_tx_api_basic.result @@ -0,0 +1,68 @@ +CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam; +INSERT INTO valid_values VALUES(1); +INSERT INTO valid_values VALUES(0); +INSERT INTO valid_values VALUES('on'); +INSERT INTO valid_values VALUES('off'); +CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam; +INSERT INTO invalid_values VALUES('\'aaa\''); +SET @start_global_value = @@global.ROCKSDB_RPL_SKIP_TX_API; +SELECT @start_global_value; +@start_global_value +0 +'# Setting to valid values in global scope#' +"Trying to set variable @@global.ROCKSDB_RPL_SKIP_TX_API to 1" +SET @@global.ROCKSDB_RPL_SKIP_TX_API = 1; +SELECT @@global.ROCKSDB_RPL_SKIP_TX_API; +@@global.ROCKSDB_RPL_SKIP_TX_API +1 +"Setting the global scope variable back to default" +SET @@global.ROCKSDB_RPL_SKIP_TX_API = DEFAULT; +SELECT @@global.ROCKSDB_RPL_SKIP_TX_API; +@@global.ROCKSDB_RPL_SKIP_TX_API +0 +"Trying to set variable @@global.ROCKSDB_RPL_SKIP_TX_API to 0" +SET @@global.ROCKSDB_RPL_SKIP_TX_API = 0; +SELECT @@global.ROCKSDB_RPL_SKIP_TX_API; +@@global.ROCKSDB_RPL_SKIP_TX_API +0 +"Setting the global scope variable back to default" +SET @@global.ROCKSDB_RPL_SKIP_TX_API = DEFAULT; +SELECT @@global.ROCKSDB_RPL_SKIP_TX_API; +@@global.ROCKSDB_RPL_SKIP_TX_API +0 +"Trying to set variable @@global.ROCKSDB_RPL_SKIP_TX_API to on" +SET @@global.ROCKSDB_RPL_SKIP_TX_API = on; +SELECT @@global.ROCKSDB_RPL_SKIP_TX_API; +@@global.ROCKSDB_RPL_SKIP_TX_API +1 +"Setting the global scope variable back to default" +SET @@global.ROCKSDB_RPL_SKIP_TX_API = DEFAULT; +SELECT @@global.ROCKSDB_RPL_SKIP_TX_API; +@@global.ROCKSDB_RPL_SKIP_TX_API +0 +"Trying to set variable @@global.ROCKSDB_RPL_SKIP_TX_API to off" +SET @@global.ROCKSDB_RPL_SKIP_TX_API = off; +SELECT @@global.ROCKSDB_RPL_SKIP_TX_API; +@@global.ROCKSDB_RPL_SKIP_TX_API +0 +"Setting the global scope variable back to default" +SET @@global.ROCKSDB_RPL_SKIP_TX_API = DEFAULT; +SELECT @@global.ROCKSDB_RPL_SKIP_TX_API; +@@global.ROCKSDB_RPL_SKIP_TX_API +0 +"Trying to set variable @@session.ROCKSDB_RPL_SKIP_TX_API to 444. It should fail because it is not session." +SET @@session.ROCKSDB_RPL_SKIP_TX_API = 444; +ERROR HY000: Variable 'rocksdb_rpl_skip_tx_api' is a GLOBAL variable and should be set with SET GLOBAL +'# Testing with invalid values in global scope #' +"Trying to set variable @@global.ROCKSDB_RPL_SKIP_TX_API to 'aaa'" +SET @@global.ROCKSDB_RPL_SKIP_TX_API = 'aaa'; +Got one of the listed errors +SELECT @@global.ROCKSDB_RPL_SKIP_TX_API; +@@global.ROCKSDB_RPL_SKIP_TX_API +0 +SET @@global.ROCKSDB_RPL_SKIP_TX_API = @start_global_value; +SELECT @@global.ROCKSDB_RPL_SKIP_TX_API; +@@global.ROCKSDB_RPL_SKIP_TX_API +0 +DROP TABLE valid_values; +DROP TABLE invalid_values; diff --git a/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_rpl_skip_tx_api_basic.test b/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_rpl_skip_tx_api_basic.test new file mode 100644 index 000000000000..32c758d151c7 --- /dev/null +++ b/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_rpl_skip_tx_api_basic.test @@ -0,0 +1,19 @@ +--source include/have_rocksdb.inc +--source include/have_myisam.inc + +CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam; +INSERT INTO valid_values VALUES(1); +INSERT INTO valid_values VALUES(0); +INSERT INTO valid_values VALUES('on'); +INSERT INTO valid_values VALUES('off'); + +CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam; +INSERT INTO invalid_values VALUES('\'aaa\''); + +--let $sys_var=ROCKSDB_RPL_SKIP_TX_API +--let $read_only=0 +--let $session=0 +--source ../include/rocksdb_sys_var.inc + +DROP TABLE valid_values; +DROP TABLE invalid_values; diff --git a/mysql-test/suite/rocksdb/r/i_s_trx_rpl.result b/mysql-test/suite/rocksdb/r/i_s_trx_rpl.result new file mode 100644 index 000000000000..b7747a662c3a --- /dev/null +++ b/mysql-test/suite/rocksdb/r/i_s_trx_rpl.result @@ -0,0 +1,14 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +include/stop_slave.inc +create table t1 (a int) engine=rocksdb; +show variables like 'rocksdb_rpl_skip_tx_api'; +Variable_name Value +rocksdb_rpl_skip_tx_api ON +include/start_slave.inc +found +DROP TABLE t1; +include/rpl_end.inc diff --git a/mysql-test/suite/rocksdb/r/rocksdb.result b/mysql-test/suite/rocksdb/r/rocksdb.result index 021be13b675e..cb38f00fbe07 100644 --- a/mysql-test/suite/rocksdb/r/rocksdb.result +++ b/mysql-test/suite/rocksdb/r/rocksdb.result @@ -976,6 +976,7 @@ rocksdb_rate_limiter_bytes_per_sec 0 rocksdb_read_free_rpl_tables rocksdb_records_in_range 50 rocksdb_reset_stats OFF +rocksdb_rpl_skip_tx_api OFF rocksdb_seconds_between_stat_computes 3600 rocksdb_signal_drop_index_thread OFF rocksdb_sim_cache_size 0 diff --git a/mysql-test/suite/rocksdb/t/i_s_trx_rpl-master.opt b/mysql-test/suite/rocksdb/t/i_s_trx_rpl-master.opt new file mode 100644 index 000000000000..2672d4ff35e0 --- /dev/null +++ b/mysql-test/suite/rocksdb/t/i_s_trx_rpl-master.opt @@ -0,0 +1 @@ +--binlog_format=row diff --git a/mysql-test/suite/rocksdb/t/i_s_trx_rpl-slave.opt b/mysql-test/suite/rocksdb/t/i_s_trx_rpl-slave.opt new file mode 100644 index 000000000000..26543da6804d --- /dev/null +++ b/mysql-test/suite/rocksdb/t/i_s_trx_rpl-slave.opt @@ -0,0 +1 @@ +--binlog_format=row --slave_parallel_workers=1 --loose-rocksdb_rpl_skip_tx_api=ON diff --git a/mysql-test/suite/rocksdb/t/i_s_trx_rpl.test b/mysql-test/suite/rocksdb/t/i_s_trx_rpl.test new file mode 100644 index 000000000000..08e0ccc8c978 --- /dev/null +++ b/mysql-test/suite/rocksdb/t/i_s_trx_rpl.test @@ -0,0 +1,42 @@ +--source include/have_rocksdb.inc +--source include/master-slave.inc + +--disable_warnings +connection slave; +--source include/stop_slave.inc +--enable_warnings + +connection master; +create table t1 (a int) engine=rocksdb; +--disable_query_log +--let $aa= 0 +while ($aa < 1000) { + eval insert into t1 values ($aa); + --inc $aa +} +--enable_query_log + +connection slave; +show variables like 'rocksdb_rpl_skip_tx_api'; +--source include/start_slave.inc + +--let $it=0 +--let $stop=0 +while ($stop != 1) { +let $count= query_get_value(select count(*) as Value from information_schema.rocksdb_trx, Value, 1); + if ($count) { + --echo found + --let $stop=1 + } + + if ($it > 1000) { + --echo not found + --let $stop=1 + } + + --inc $it +} + +connection master; +DROP TABLE t1; +--source include/rpl_end.inc diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index d87ff797cc40..26b44b89d725 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -667,6 +667,11 @@ static MYSQL_THDVAR_STR( "on the slave (i.e. not lookup a row during replication)", nullptr, nullptr, ""); +static MYSQL_SYSVAR_BOOL( + rpl_skip_tx_api, rpl_skip_tx_api_var, PLUGIN_VAR_RQCMDARG, + "Use write batches for replication thread instead of tx api", nullptr, + nullptr, FALSE); + static MYSQL_THDVAR_BOOL(skip_bloom_filter_on_read, PLUGIN_VAR_RQCMDARG, "Skip using bloom filter for reads", nullptr, nullptr, FALSE); @@ -1484,6 +1489,7 @@ static struct st_mysql_sys_var *rocksdb_system_variables[] = { MYSQL_SYSVAR(trace_sst_api), MYSQL_SYSVAR(commit_in_the_middle), MYSQL_SYSVAR(read_free_rpl_tables), + MYSQL_SYSVAR(rpl_skip_tx_api), MYSQL_SYSVAR(bulk_load_size), MYSQL_SYSVAR(merge_buf_size), MYSQL_SYSVAR(enable_bulk_load_api), From b6080432a236b07f922676e73a38782364edf87a Mon Sep 17 00:00:00 2001 From: Laurynas Biveinis Date: Tue, 13 Feb 2018 06:08:29 +0200 Subject: [PATCH 0531/1221] Fix PS-3812 (Revert PS-3360 (Busy server prefers LRU flushing over flush list flushing too strongly)) Once the main cleaner loop was performing both LRU and flush list flushing, it used to skip the flush list part if the LRU part took too long. This broke sync flushes and PS-3360 fixed this by not skipping the rest of iteration. This became meaningless with MT LRU flusher - which removed LRU flushing from the cleaner loop - and left no-op code and outdated comment. Removed. --- storage/innobase/buf/buf0flu.cc | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/storage/innobase/buf/buf0flu.cc b/storage/innobase/buf/buf0flu.cc index 7af965063397..90cc4737fc80 100644 --- a/storage/innobase/buf/buf0flu.cc +++ b/storage/innobase/buf/buf0flu.cc @@ -3273,15 +3273,7 @@ DECLARE_THREAD(buf_flush_page_cleaner_coordinator)( n_flushed_last = 0; } - if (ut_time_ms() > next_loop_time - && ret_sleep != OS_SYNC_TIME_EXCEEDED) - - /* If our LRU flush took too long, skip the rest only - if the last iteration completed in time, otherwise we'd - be LRU flushing all the time, even if e.g. a sync flush - is waiting. */ - ret_sleep = OS_SYNC_TIME_EXCEEDED; - else if (ret_sleep != OS_SYNC_TIME_EXCEEDED + if (ret_sleep != OS_SYNC_TIME_EXCEEDED && srv_flush_sync && buf_flush_sync_lsn > 0) { /* woke up for flush_sync */ From cbddffd67a0a459be98f736f08c66e2db678bb8f Mon Sep 17 00:00:00 2001 From: Laurynas Biveinis Date: Tue, 13 Feb 2018 06:40:38 +0200 Subject: [PATCH 0532/1221] Fix PS-3818 (Orphaned file mysql-test/suite/innodb/r/percona_innodb_kill_idle_trx.result) Remove the file. --- .../r/percona_innodb_kill_idle_trx.result | 39 ------------------- 1 file changed, 39 deletions(-) delete mode 100644 mysql-test/suite/innodb/r/percona_innodb_kill_idle_trx.result diff --git a/mysql-test/suite/innodb/r/percona_innodb_kill_idle_trx.result b/mysql-test/suite/innodb/r/percona_innodb_kill_idle_trx.result deleted file mode 100644 index 80e32b042695..000000000000 --- a/mysql-test/suite/innodb/r/percona_innodb_kill_idle_trx.result +++ /dev/null @@ -1,39 +0,0 @@ -DROP TABLE IF EXISTS t1; -SET autocommit=0; -CREATE TABLE t1 (a INT) ENGINE=InnoDB; -SHOW GLOBAL VARIABLES LIKE 'innodb_kill_idle_transaction'; -Variable_name Value -innodb_kill_idle_transaction 0 -SELECT * FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES WHERE VARIABLE_NAME='innodb_kill_idle_transaction'; -VARIABLE_NAME VARIABLE_VALUE -INNODB_KILL_IDLE_TRANSACTION 0 -SET GLOBAL innodb_kill_idle_transaction=1; -SHOW GLOBAL VARIABLES LIKE 'innodb_kill_idle_transaction'; -Variable_name Value -innodb_kill_idle_transaction 1 -SELECT * FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES WHERE VARIABLE_NAME='innodb_kill_idle_transaction'; -VARIABLE_NAME VARIABLE_VALUE -INNODB_KILL_IDLE_TRANSACTION 1 -BEGIN; -INSERT INTO t1 VALUES (1),(2),(3); -COMMIT; -SELECT * FROM t1; -a -1 -2 -3 -BEGIN; -INSERT INTO t1 VALUES (4),(5),(6); -SELECT * FROM t1; -a -1 -2 -3 -DROP TABLE t1; -SET GLOBAL innodb_kill_idle_transaction=0; -SHOW GLOBAL VARIABLES LIKE 'innodb_kill_idle_transaction'; -Variable_name Value -innodb_kill_idle_transaction 0 -SELECT * FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES WHERE VARIABLE_NAME='innodb_kill_idle_transaction'; -VARIABLE_NAME VARIABLE_VALUE -INNODB_KILL_IDLE_TRANSACTION 0 From 4f617bdc11e29690635b75610d62755179114e60 Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Tue, 13 Feb 2018 11:44:38 +0100 Subject: [PATCH 0533/1221] PS-3816: refactoring of Travis config file (5.7) --- .travis.yml | 113 +++++++++++++++++++++++++++++++++++----------------- 1 file changed, 77 insertions(+), 36 deletions(-) diff --git a/.travis.yml b/.travis.yml index 07955a73a649..0cc7324de43e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,78 +1,119 @@ # Ubuntu 14.04 dist: trusty sudo: required -language: c +language: cpp + env: global: - MAINTAINER_MODE=ON - WITHOUT_TOKUDB=ON - WITHOUT_ROCKSDB=ON - WITH_MECAB=system + matrix: include: + # 1 - env: COMMAND=clang-test script: - wget https://llvm.org/svn/llvm-project/cfe/trunk/tools/clang-format/clang-format-diff.py - chmod a+x clang-format-diff.py - git diff -U0 --no-color HEAD^1 | ./clang-format-diff.py -p1 >_GIT_DIFF - '[ ! -s _GIT_DIFF ] && echo The last git commit is clang-formatted || cat _GIT_DIFF' - - env: GCC=gcc-4.8 CXX=g++-4.8 BUILD=Debug LIBTYPE=system - - env: GCC=gcc-4.8 CXX=g++-4.8 BUILD=RelWithDebInfo LIBTYPE=system - - env: GCC=gcc-7 CXX=g++-7 BUILD=Debug LIBTYPE=system PACKAGES=g++-7 PPA=ubuntu-toolchain-r/test - - env: GCC=gcc-7 CXX=g++-7 BUILD=RelWithDebInfo LIBTYPE=system PACKAGES=g++-7 PPA=ubuntu-toolchain-r/test - - env: GCC=gcc-7 CXX=g++-7 BUILD=Debug LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" PACKAGES=g++-7 PPA=ubuntu-toolchain-r/test - - env: GCC=gcc-7 CXX=g++-7 BUILD=RelWithDebInfo LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" PACKAGES=g++-7 PPA=ubuntu-toolchain-r/test - - env: GCC=clang-5.0 CXX=clang++-5.0 BUILD=Debug LIBTYPE=system PACKAGES="clang-5.0 llvm-5.0-dev" LLVM=llvm-toolchain-trusty-5.0 - - env: GCC=clang-5.0 CXX=clang++-5.0 BUILD=RelWithDebInfo LIBTYPE=system PACKAGES="clang-5.0 llvm-5.0-dev" LLVM=llvm-toolchain-trusty-5.0 - # only for pull requests - - env: GCC=gcc-5 CXX=g++-5 BUILD=Debug LIBTYPE=system PACKAGES=g++-5 PPA=ubuntu-toolchain-r/test - - env: GCC=gcc-5 CXX=g++-5 BUILD=RelWithDebInfo LIBTYPE=system PACKAGES=g++-5 PPA=ubuntu-toolchain-r/test - - env: GCC=gcc-6 CXX=g++-6 BUILD=Debug LIBTYPE=system PACKAGES=g++-6 PPA=ubuntu-toolchain-r/test - - env: GCC=gcc-6 CXX=g++-6 BUILD=RelWithDebInfo LIBTYPE=system PACKAGES=g++-6 PPA=ubuntu-toolchain-r/test - - env: GCC=clang-4.0 CXX=clang++-4.0 BUILD=Debug LIBTYPE=system PACKAGES="clang-4.0 llvm-4.0-dev" PPA=ubuntu-toolchain-r/test LLVM=llvm-toolchain-trusty-4.0 - - env: GCC=clang-4.0 CXX=clang++-4.0 BUILD=RelWithDebInfo LIBTYPE=system PACKAGES="clang-4.0 llvm-4.0-dev" PPA=ubuntu-toolchain-r/test LLVM=llvm-toolchain-trusty-4.0 - - env: GCC=clang-5.0 CXX=clang++-5.0 BUILD=Debug LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" PACKAGES="clang-5.0 llvm-5.0-dev" LLVM=llvm-toolchain-trusty-5.0 - - env: GCC=clang-5.0 CXX=clang++-5.0 BUILD=RelWithDebInfo LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" PACKAGES="clang-5.0 llvm-5.0-dev" LLVM=llvm-toolchain-trusty-5.0 + # 2 - os: osx osx_image: xcode9.2 - env: BUILD=Debug LIBTYPE=bundled GCC=clang CXX=clang++ MAINTAINER_MODE=OFF WITHOUT_TOKUDB=ON WITHOUT_ROCKSDB=ON WITH_MECAB= + env: BUILD=Debug LIBTYPE=bundled MAINTAINER_MODE=OFF WITHOUT_TOKUDB=ON WITHOUT_ROCKSDB=ON WITH_MECAB= + # 3 - os: osx osx_image: xcode9.2 - env: BUILD=RelWithDebInfo LIBTYPE=bundled GCC=clang CXX=clang++ MAINTAINER_MODE=OFF WITHOUT_TOKUDB=ON WITHOUT_ROCKSDB=ON WITH_MECAB= + env: BUILD=RelWithDebInfo LIBTYPE=bundled MAINTAINER_MODE=OFF WITHOUT_TOKUDB=ON WITHOUT_ROCKSDB=ON WITH_MECAB= + # 4 + - compiler: gcc + env: VERSION=4.8 BUILD=Debug LIBTYPE=system + # 5 + - compiler: gcc + env: VERSION=4.8 BUILD=RelWithDebInfo LIBTYPE=system + # 6 + - compiler: gcc + env: VERSION=7 BUILD=Debug LIBTYPE=system + # 7 + - compiler: gcc + env: VERSION=7 BUILD=RelWithDebInfo LIBTYPE=system + # 8 + - compiler: gcc + env: VERSION=7 BUILD=Debug LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" + # 9 + - compiler: gcc + env: VERSION=7 BUILD=RelWithDebInfo LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" + # 10 + - compiler: clang + env: VERSION=5.0 BUILD=Debug LIBTYPE=system + # 11 + - compiler: clang + env: VERSION=5.0 BUILD=RelWithDebInfo LIBTYPE=system + # 12 + - compiler: gcc + env: VERSION=5 BUILD=Debug LIBTYPE=system + # 13 + - compiler: gcc + env: VERSION=5 BUILD=RelWithDebInfo LIBTYPE=system + # 14 + - compiler: gcc + env: VERSION=6 BUILD=Debug LIBTYPE=system + # 15 + - compiler: gcc + env: VERSION=6 BUILD=RelWithDebInfo LIBTYPE=system + # 16 + - compiler: clang + env: VERSION=4.0 BUILD=Debug LIBTYPE=system + # 17 + - compiler: clang + env: VERSION=4.0 BUILD=RelWithDebInfo LIBTYPE=system + # 18 + - compiler: clang + env: VERSION=5.0 BUILD=Debug LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" + # 19 + - compiler: clang + env: VERSION=5.0 BUILD=RelWithDebInfo LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" script: - - export CC=$GCC - JOB_NUMBER=$(echo $TRAVIS_JOB_NUMBER | sed -e 's:[0-9][0-9]*\.\(.*\):\1:') - - echo PACKAGES=$PACKAGES PPA=$PPA LLVM=$LLVM JOB_NUMBER=$JOB_NUMBER TRAVIS_BRANCH=$TRAVIS_BRANCH TRAVIS_EVENT_TYPE=$TRAVIS_EVENT_TYPE TRAVIS_PULL_REQUEST=$TRAVIS_PULL_REQUEST MAINTAINER_MODE=$MAINTAINER_MODE WITHOUT_TOKUDB=$WITHOUT_TOKUDB + - echo PACKAGES=$PACKAGES MAINTAINER_MODE=$MAINTAINER_MODE WITHOUT_TOKUDB=$WITHOUT_TOKUDB JOB_NUMBER=$JOB_NUMBER TRAVIS_REPO_SLUG=$TRAVIS_REPO_SLUG TRAVIS_BRANCH=$TRAVIS_BRANCH TRAVIS_EVENT_TYPE=$TRAVIS_EVENT_TYPE TRAVIS_PULL_REQUEST=$TRAVIS_PULL_REQUEST - # Jobs with a number >= 10 are done only for a pull request - - if [ $JOB_NUMBER -ge 10 ] && [ "$TRAVIS_EVENT_TYPE" != "pull_request" ]; then - echo Finishing as this is not a pull request; + # Perform all Travis jobs or only jobs that are included on ENV_VAR_JOB_NUMBERS list if it's defined + - JOB_NUMBERS="1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24"; + - if [[ "$ENV_VAR_JOB_NUMBERS" != "" ]]; then + JOB_NUMBERS=$ENV_VAR_JOB_NUMBERS; + fi + - JOB_ARRAY=(${JOB_NUMBERS// / }) + - if [[ ! " ${JOB_ARRAY[@]} " =~ " ${JOB_NUMBER} " ]]; then + echo Finishing as job ${JOB_NUMBER} is not on a list = $JOB_NUMBERS; travis_terminate 0; fi # Update required LLVM and Ubuntu Toolchain repositories - - if [[ "$LLVM" != "" ]]; then + - if [[ "$TRAVIS_OS_NAME" == "linux" ]] && [[ "$CC" == "clang" ]]; then + PACKAGES="$PACKAGES llvm-$VERSION-dev"; curl -sSL "http://apt.llvm.org/llvm-snapshot.gpg.key" | sudo -E apt-key add -; - echo "deb http://apt.llvm.org/trusty/ $LLVM main" | sudo tee -a /etc/apt/sources.list > /dev/null; - fi - - if [[ "$PPA" != "" ]]; then - sudo -E apt-add-repository -y "ppa:$PPA"; + echo "deb http://apt.llvm.org/trusty/ llvm-toolchain-trusty-$VERSION main" | sudo tee -a /etc/apt/sources.list > /dev/null; + sudo -E apt-get -yq update >> ~/apt-get-update.log 2>&1; fi - - if [[ "$LLVM" != "" ]] || [[ "$PPA" != "" ]]; then + - if [[ "$TRAVIS_OS_NAME" == "linux" ]] && [[ "$CC" == "gcc" ]]; then + sudo -E apt-add-repository -y "ppa:ubuntu-toolchain-r/test"; sudo -E apt-get -yq update >> ~/apt-get-update.log 2>&1; - fi + fi # Download dependencies - - if [[ "$TRAVIS_OS_NAME" != "osx" ]]; then - export PACKAGES="$PACKAGES cmake cmake-curses-gui libaio-dev libssl-dev libncurses5-dev libevent-dev bison libmecab-dev"; - sudo -E apt-get -yq --no-install-suggests --no-install-recommends install $PACKAGES; + - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then + CC=$CC-$VERSION; + CXX=$CXX-$VERSION; + sudo -E apt-get -yq --no-install-suggests --no-install-recommends install $CXX $PACKAGES cmake cmake-curses-gui bison libncurses5-dev libaio-dev libssl-dev libevent-dev libmecab-dev || travis_terminate 1; fi - mkdir bin; cd bin - $CC -v - $CXX -v - # Test $BUILD compilation + # Test Debug or RelWithDebInfo compilation - cmake .. -DCMAKE_BUILD_TYPE=$BUILD -DMYSQL_MAINTAINER_MODE=$MAINTAINER_MODE From 775e42fc8882c1443977ed97010ff0631ce6f3cf Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Tue, 13 Feb 2018 11:15:23 +0100 Subject: [PATCH 0534/1221] PS-3816: refactoring of Travis config file (5.6) --- .travis.yml | 113 +++++++++++++++++++++++++++++++++++----------------- 1 file changed, 77 insertions(+), 36 deletions(-) diff --git a/.travis.yml b/.travis.yml index 798a84153a90..b669f0f71dcb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,76 +1,117 @@ # Ubuntu 14.04 dist: trusty sudo: required -language: c +language: cpp + env: global: - MAINTAINER_MODE=ON - WITHOUT_TOKUDB=OFF + matrix: include: + # 1 - env: COMMAND=clang-test script: - wget https://llvm.org/svn/llvm-project/cfe/trunk/tools/clang-format/clang-format-diff.py - chmod a+x clang-format-diff.py - git diff -U0 --no-color HEAD^1 | ./clang-format-diff.py -p1 >_GIT_DIFF - '[ ! -s _GIT_DIFF ] && echo The last git commit is clang-formatted || cat _GIT_DIFF' - - env: GCC=gcc-4.8 CXX=g++-4.8 BUILD=Debug LIBTYPE=system - - env: GCC=gcc-4.8 CXX=g++-4.8 BUILD=RelWithDebInfo LIBTYPE=system - - env: GCC=gcc-7 CXX=g++-7 BUILD=Debug LIBTYPE=system PACKAGES=g++-7 PPA=ubuntu-toolchain-r/test - - env: GCC=gcc-7 CXX=g++-7 BUILD=RelWithDebInfo LIBTYPE=system PACKAGES=g++-7 PPA=ubuntu-toolchain-r/test - - env: GCC=gcc-7 CXX=g++-7 BUILD=Debug LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" PACKAGES=g++-7 PPA=ubuntu-toolchain-r/test - - env: GCC=gcc-7 CXX=g++-7 BUILD=RelWithDebInfo LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" PACKAGES=g++-7 PPA=ubuntu-toolchain-r/test - - env: GCC=clang-5.0 CXX=clang++-5.0 BUILD=Debug LIBTYPE=system PACKAGES="clang-5.0 llvm-5.0-dev" LLVM=llvm-toolchain-trusty-5.0 - - env: GCC=clang-5.0 CXX=clang++-5.0 BUILD=RelWithDebInfo LIBTYPE=system PACKAGES="clang-5.0 llvm-5.0-dev" LLVM=llvm-toolchain-trusty-5.0 - # only for pull requests - - env: GCC=gcc-5 CXX=g++-5 BUILD=Debug LIBTYPE=system PACKAGES=g++-5 PPA=ubuntu-toolchain-r/test - - env: GCC=gcc-5 CXX=g++-5 BUILD=RelWithDebInfo LIBTYPE=system PACKAGES=g++-5 PPA=ubuntu-toolchain-r/test - - env: GCC=gcc-6 CXX=g++-6 BUILD=Debug LIBTYPE=system PACKAGES=g++-6 PPA=ubuntu-toolchain-r/test - - env: GCC=gcc-6 CXX=g++-6 BUILD=RelWithDebInfo LIBTYPE=system PACKAGES=g++-6 PPA=ubuntu-toolchain-r/test - - env: GCC=clang-4.0 CXX=clang++-4.0 BUILD=Debug LIBTYPE=system PACKAGES="clang-4.0 llvm-4.0-dev" PPA=ubuntu-toolchain-r/test LLVM=llvm-toolchain-trusty-4.0 - - env: GCC=clang-4.0 CXX=clang++-4.0 BUILD=RelWithDebInfo LIBTYPE=system PACKAGES="clang-4.0 llvm-4.0-dev" PPA=ubuntu-toolchain-r/test LLVM=llvm-toolchain-trusty-4.0 - - env: GCC=clang-5.0 CXX=clang++-5.0 BUILD=Debug LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" PACKAGES="clang-5.0 llvm-5.0-dev" LLVM=llvm-toolchain-trusty-5.0 - - env: GCC=clang-5.0 CXX=clang++-5.0 BUILD=RelWithDebInfo LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" PACKAGES="clang-5.0 llvm-5.0-dev" LLVM=llvm-toolchain-trusty-5.0 + # 2 - os: osx osx_image: xcode9.2 - env: BUILD=Debug LIBTYPE=bundled GCC=clang CXX=clang++ MAINTAINER_MODE=OFF WITHOUT_TOKUDB=ON + env: BUILD=Debug LIBTYPE=bundled MAINTAINER_MODE=OFF WITHOUT_TOKUDB=ON + # 3 - os: osx osx_image: xcode9.2 - env: BUILD=RelWithDebInfo LIBTYPE=bundled GCC=clang CXX=clang++ MAINTAINER_MODE=OFF WITHOUT_TOKUDB=ON + env: BUILD=RelWithDebInfo LIBTYPE=bundled MAINTAINER_MODE=OFF WITHOUT_TOKUDB=ON + # 4 + - compiler: gcc + env: VERSION=4.8 BUILD=Debug LIBTYPE=system + # 5 + - compiler: gcc + env: VERSION=4.8 BUILD=RelWithDebInfo LIBTYPE=system + # 6 + - compiler: gcc + env: VERSION=7 BUILD=Debug LIBTYPE=system + # 7 + - compiler: gcc + env: VERSION=7 BUILD=RelWithDebInfo LIBTYPE=system + # 8 + - compiler: gcc + env: VERSION=7 BUILD=Debug LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" + # 9 + - compiler: gcc + env: VERSION=7 BUILD=RelWithDebInfo LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" + # 10 + - compiler: clang + env: VERSION=5.0 BUILD=Debug LIBTYPE=system + # 11 + - compiler: clang + env: VERSION=5.0 BUILD=RelWithDebInfo LIBTYPE=system + # 12 + - compiler: gcc + env: VERSION=5 BUILD=Debug LIBTYPE=system + # 13 + - compiler: gcc + env: VERSION=5 BUILD=RelWithDebInfo LIBTYPE=system + # 14 + - compiler: gcc + env: VERSION=6 BUILD=Debug LIBTYPE=system + # 15 + - compiler: gcc + env: VERSION=6 BUILD=RelWithDebInfo LIBTYPE=system + # 16 + - compiler: clang + env: VERSION=4.0 BUILD=Debug LIBTYPE=system + # 17 + - compiler: clang + env: VERSION=4.0 BUILD=RelWithDebInfo LIBTYPE=system + # 18 + - compiler: clang + env: VERSION=5.0 BUILD=Debug LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" + # 19 + - compiler: clang + env: VERSION=5.0 BUILD=RelWithDebInfo LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" script: - - export CC=$GCC - JOB_NUMBER=$(echo $TRAVIS_JOB_NUMBER | sed -e 's:[0-9][0-9]*\.\(.*\):\1:') - - echo PACKAGES=$PACKAGES PPA=$PPA LLVM=$LLVM JOB_NUMBER=$JOB_NUMBER TRAVIS_BRANCH=$TRAVIS_BRANCH TRAVIS_EVENT_TYPE=$TRAVIS_EVENT_TYPE TRAVIS_PULL_REQUEST=$TRAVIS_PULL_REQUEST MAINTAINER_MODE=$MAINTAINER_MODE WITHOUT_TOKUDB=$WITHOUT_TOKUDB + - echo PACKAGES=$PACKAGES MAINTAINER_MODE=$MAINTAINER_MODE WITHOUT_TOKUDB=$WITHOUT_TOKUDB JOB_NUMBER=$JOB_NUMBER TRAVIS_REPO_SLUG=$TRAVIS_REPO_SLUG TRAVIS_BRANCH=$TRAVIS_BRANCH TRAVIS_EVENT_TYPE=$TRAVIS_EVENT_TYPE TRAVIS_PULL_REQUEST=$TRAVIS_PULL_REQUEST - # Jobs with a number >= 10 are done only for a pull request - - if [ $JOB_NUMBER -ge 10 ] && [ "$TRAVIS_EVENT_TYPE" != "pull_request" ]; then - echo Finishing as this is not a pull request; + # Perform all Travis jobs or only jobs that are included on ENV_VAR_JOB_NUMBERS list if it's defined + - JOB_NUMBERS="1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24"; + - if [[ "$ENV_VAR_JOB_NUMBERS" != "" ]]; then + JOB_NUMBERS=$ENV_VAR_JOB_NUMBERS; + fi + - JOB_ARRAY=(${JOB_NUMBERS// / }) + - if [[ ! " ${JOB_ARRAY[@]} " =~ " ${JOB_NUMBER} " ]]; then + echo Finishing as job ${JOB_NUMBER} is not on a list = $JOB_NUMBERS; travis_terminate 0; fi # Update required LLVM and Ubuntu Toolchain repositories - - if [[ "$LLVM" != "" ]]; then + - if [[ "$TRAVIS_OS_NAME" == "linux" ]] && [[ "$CC" == "clang" ]]; then + PACKAGES="$PACKAGES llvm-$VERSION-dev"; curl -sSL "http://apt.llvm.org/llvm-snapshot.gpg.key" | sudo -E apt-key add -; - echo "deb http://apt.llvm.org/trusty/ $LLVM main" | sudo tee -a /etc/apt/sources.list > /dev/null; - fi - - if [[ "$PPA" != "" ]]; then - sudo -E apt-add-repository -y "ppa:$PPA"; + echo "deb http://apt.llvm.org/trusty/ llvm-toolchain-trusty-$VERSION main" | sudo tee -a /etc/apt/sources.list > /dev/null; + sudo -E apt-get -yq update >> ~/apt-get-update.log 2>&1; fi - - if [[ "$LLVM" != "" ]] || [[ "$PPA" != "" ]]; then + - if [[ "$TRAVIS_OS_NAME" == "linux" ]] && [[ "$CC" == "gcc" ]]; then + sudo -E apt-add-repository -y "ppa:ubuntu-toolchain-r/test"; sudo -E apt-get -yq update >> ~/apt-get-update.log 2>&1; - fi + fi # Download dependencies - - if [[ "$TRAVIS_OS_NAME" != "osx" ]]; then - export PACKAGES="$PACKAGES cmake cmake-curses-gui libaio-dev libssl-dev libncurses5-dev libevent-dev bison"; - sudo -E apt-get -yq --no-install-suggests --no-install-recommends install $PACKAGES; + - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then + CC=$CC-$VERSION; + CXX=$CXX-$VERSION; + sudo -E apt-get -yq --no-install-suggests --no-install-recommends install $CXX $PACKAGES cmake cmake-curses-gui bison libncurses5-dev libaio-dev libssl-dev libevent-dev || travis_terminate 1; fi - mkdir bin; cd bin - $CC -v - $CXX -v - # Test $BUILD compilation + # Test Debug or RelWithDebInfo compilation - cmake .. -DCMAKE_BUILD_TYPE=$BUILD -DMYSQL_MAINTAINER_MODE=$MAINTAINER_MODE From 00a6eb6687d6b3f658b20c8cdd7224bf85b0741a Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Mon, 12 Feb 2018 17:47:55 +0100 Subject: [PATCH 0535/1221] PS-3816: refactoring of Travis config file --- .travis.yml | 114 +++++++++++++++++++++++++++++++++++----------------- 1 file changed, 77 insertions(+), 37 deletions(-) diff --git a/.travis.yml b/.travis.yml index 3e5f6fc7a875..348593b2bf8d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,76 +1,116 @@ # Ubuntu 14.04 dist: trusty sudo: required -language: c +language: cpp + env: global: - MAINTAINER_MODE=ON + matrix: include: + # 1 - env: COMMAND=clang-test script: - wget https://llvm.org/svn/llvm-project/cfe/trunk/tools/clang-format/clang-format-diff.py - chmod a+x clang-format-diff.py - git diff -U0 --no-color HEAD^1 | ./clang-format-diff.py -p1 >_GIT_DIFF - '[ ! -s _GIT_DIFF ] && echo The last git commit is clang-formatted || cat _GIT_DIFF' - - - env: GCC=gcc-4.8 CXX=g++-4.8 BUILD=Debug LIBTYPE=system - - env: GCC=gcc-4.8 CXX=g++-4.8 BUILD=RelWithDebInfo LIBTYPE=system - - env: GCC=gcc-7 CXX=g++-7 BUILD=Debug LIBTYPE=system PACKAGES=g++-7 PPA=ubuntu-toolchain-r/test - - env: GCC=gcc-7 CXX=g++-7 BUILD=RelWithDebInfo LIBTYPE=system PACKAGES=g++-7 PPA=ubuntu-toolchain-r/test - - env: GCC=gcc-7 CXX=g++-7 BUILD=Debug LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" PACKAGES=g++-7 PPA=ubuntu-toolchain-r/test - - env: GCC=gcc-7 CXX=g++-7 BUILD=RelWithDebInfo LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" PACKAGES=g++-7 PPA=ubuntu-toolchain-r/test - - env: GCC=clang-5.0 CXX=clang++-5.0 BUILD=Debug LIBTYPE=system PACKAGES="clang-5.0 llvm-5.0-dev" LLVM=llvm-toolchain-trusty-5.0 - - env: GCC=clang-5.0 CXX=clang++-5.0 BUILD=RelWithDebInfo LIBTYPE=system PACKAGES="clang-5.0 llvm-5.0-dev" LLVM=llvm-toolchain-trusty-5.0 - # only for pull requests - - env: GCC=gcc-5 CXX=g++-5 BUILD=Debug LIBTYPE=system PACKAGES=g++-5 PPA=ubuntu-toolchain-r/test - - env: GCC=gcc-5 CXX=g++-5 BUILD=RelWithDebInfo LIBTYPE=system PACKAGES=g++-5 PPA=ubuntu-toolchain-r/test - - env: GCC=gcc-6 CXX=g++-6 BUILD=Debug LIBTYPE=system PACKAGES=g++-6 PPA=ubuntu-toolchain-r/test - - env: GCC=gcc-6 CXX=g++-6 BUILD=RelWithDebInfo LIBTYPE=system PACKAGES=g++-6 PPA=ubuntu-toolchain-r/test - - env: GCC=clang-4.0 CXX=clang++-4.0 BUILD=Debug LIBTYPE=system PACKAGES="clang-4.0 llvm-4.0-dev" PPA=ubuntu-toolchain-r/test LLVM=llvm-toolchain-trusty-4.0 - - env: GCC=clang-4.0 CXX=clang++-4.0 BUILD=RelWithDebInfo LIBTYPE=system PACKAGES="clang-4.0 llvm-4.0-dev" PPA=ubuntu-toolchain-r/test LLVM=llvm-toolchain-trusty-4.0 - - env: GCC=clang-5.0 CXX=clang++-5.0 BUILD=Debug LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" PACKAGES="clang-5.0 llvm-5.0-dev" LLVM=llvm-toolchain-trusty-5.0 - - env: GCC=clang-5.0 CXX=clang++-5.0 BUILD=RelWithDebInfo LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" PACKAGES="clang-5.0 llvm-5.0-dev" LLVM=llvm-toolchain-trusty-5.0 + # 2 - os: osx osx_image: xcode9.2 - env: BUILD=Debug LIBTYPE=bundled GCC=clang CXX=clang++ MAINTAINER_MODE=OFF + env: BUILD=Debug LIBTYPE=bundled MAINTAINER_MODE=OFF + # 3 - os: osx osx_image: xcode9.2 - env: BUILD=RelWithDebInfo LIBTYPE=bundled GCC=clang CXX=clang++ MAINTAINER_MODE=OFF + env: BUILD=RelWithDebInfo LIBTYPE=bundled MAINTAINER_MODE=OFF + # 4 + - compiler: gcc + env: VERSION=4.8 BUILD=Debug LIBTYPE=system + # 5 + - compiler: gcc + env: VERSION=4.8 BUILD=RelWithDebInfo LIBTYPE=system + # 6 + - compiler: gcc + env: VERSION=7 BUILD=Debug LIBTYPE=system + # 7 + - compiler: gcc + env: VERSION=7 BUILD=RelWithDebInfo LIBTYPE=system + # 8 + - compiler: gcc + env: VERSION=7 BUILD=Debug LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" + # 9 + - compiler: gcc + env: VERSION=7 BUILD=RelWithDebInfo LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" + # 10 + - compiler: clang + env: VERSION=5.0 BUILD=Debug LIBTYPE=system + # 11 + - compiler: clang + env: VERSION=5.0 BUILD=RelWithDebInfo LIBTYPE=system + # 12 + - compiler: gcc + env: VERSION=5 BUILD=Debug LIBTYPE=system + # 13 + - compiler: gcc + env: VERSION=5 BUILD=RelWithDebInfo LIBTYPE=system + # 14 + - compiler: gcc + env: VERSION=6 BUILD=Debug LIBTYPE=system + # 15 + - compiler: gcc + env: VERSION=6 BUILD=RelWithDebInfo LIBTYPE=system + # 16 + - compiler: clang + env: VERSION=4.0 BUILD=Debug LIBTYPE=system + # 17 + - compiler: clang + env: VERSION=4.0 BUILD=RelWithDebInfo LIBTYPE=system + # 18 + - compiler: clang + env: VERSION=5.0 BUILD=Debug LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" + # 19 + - compiler: clang + env: VERSION=5.0 BUILD=RelWithDebInfo LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" script: - - export CC=$GCC - JOB_NUMBER=$(echo $TRAVIS_JOB_NUMBER | sed -e 's:[0-9][0-9]*\.\(.*\):\1:') - - echo PACKAGES=$PACKAGES PPA=$PPA LLVM=$LLVM JOB_NUMBER=$JOB_NUMBER TRAVIS_BRANCH=$TRAVIS_BRANCH TRAVIS_EVENT_TYPE=$TRAVIS_EVENT_TYPE TRAVIS_PULL_REQUEST=$TRAVIS_PULL_REQUEST MAINTAINER_MODE=$MAINTAINER_MODE + - echo PACKAGES=$PACKAGES MAINTAINER_MODE=$MAINTAINER_MODE JOB_NUMBER=$JOB_NUMBER TRAVIS_REPO_SLUG=$TRAVIS_REPO_SLUG TRAVIS_BRANCH=$TRAVIS_BRANCH TRAVIS_EVENT_TYPE=$TRAVIS_EVENT_TYPE TRAVIS_PULL_REQUEST=$TRAVIS_PULL_REQUEST - # Jobs with a number >= 10 are done only for a pull request - - if [ $JOB_NUMBER -ge 10 ] && [ "$TRAVIS_EVENT_TYPE" != "pull_request" ]; then - echo Finishing as this is not a pull request; + # Perform all Travis jobs or only jobs that are included on ENV_VAR_JOB_NUMBERS list if it's defined + - JOB_NUMBERS="1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24"; + - if [[ "$ENV_VAR_JOB_NUMBERS" != "" ]]; then + JOB_NUMBERS=$ENV_VAR_JOB_NUMBERS; + fi + - JOB_ARRAY=(${JOB_NUMBERS// / }) + - if [[ ! " ${JOB_ARRAY[@]} " =~ " ${JOB_NUMBER} " ]]; then + echo Finishing as job ${JOB_NUMBER} is not on a list = $JOB_NUMBERS; travis_terminate 0; fi # Update required LLVM and Ubuntu Toolchain repositories - - if [[ "$LLVM" != "" ]]; then + - if [[ "$TRAVIS_OS_NAME" == "linux" ]] && [[ "$CC" == "clang" ]]; then + PACKAGES="$PACKAGES llvm-$VERSION-dev"; curl -sSL "http://apt.llvm.org/llvm-snapshot.gpg.key" | sudo -E apt-key add -; - echo "deb http://apt.llvm.org/trusty/ $LLVM main" | sudo tee -a /etc/apt/sources.list > /dev/null; - fi - - if [[ "$PPA" != "" ]]; then - sudo -E apt-add-repository -y "ppa:$PPA"; + echo "deb http://apt.llvm.org/trusty/ llvm-toolchain-trusty-$VERSION main" | sudo tee -a /etc/apt/sources.list > /dev/null; + sudo -E apt-get -yq update >> ~/apt-get-update.log 2>&1; fi - - if [[ "$LLVM" != "" ]] || [[ "$PPA" != "" ]]; then + - if [[ "$TRAVIS_OS_NAME" == "linux" ]] && [[ "$CC" == "gcc" ]]; then + sudo -E apt-add-repository -y "ppa:ubuntu-toolchain-r/test"; sudo -E apt-get -yq update >> ~/apt-get-update.log 2>&1; - fi + fi # Download dependencies - - if [[ "$TRAVIS_OS_NAME" != "osx" ]]; then - export PACKAGES="$PACKAGES cmake cmake-curses-gui libaio-dev libssl-dev libncurses5-dev bison"; - sudo -E apt-get -yq --no-install-suggests --no-install-recommends install $PACKAGES; + - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then + CC=$CC-$VERSION; + CXX=$CXX-$VERSION; + sudo -E apt-get -yq --no-install-suggests --no-install-recommends install $CXX $PACKAGES cmake cmake-curses-gui bison libncurses5-dev libaio-dev libssl-dev || travis_terminate 1; fi - mkdir bin; cd bin - $CC -v - $CXX -v - # Test $BUILD compilation + # Test Debug or RelWithDebInfo compilation - cmake .. -DCMAKE_BUILD_TYPE=$BUILD -DMYSQL_MAINTAINER_MODE=$MAINTAINER_MODE From b056295e74a2820d4e7c63e6307b91751fe95389 Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Thu, 8 Feb 2018 10:13:07 +0100 Subject: [PATCH 0536/1221] PS-314: issue with 65536+ threads and mdl locks MDL uses the LF_PINS structure for maintaining a global map, which had a 16 bit limitations. After reaching 65535 threads, new threads couldn't access the MDL structures until older threads disconnected. This limitation also caused assertions in the debug builds, stopping the server. This patch changes the 16 bit limitation of the LF_PINS structure to 32 bit. While this solves the problem, it does so with a high memory cost: as the LF_PINS structure uses the LF_DYNARRAY for storing its data, a 1GB array will be allocated when reaching 65536+256+1 threads. 99% of that memory will never be used, as MySQL has a connection limit of 100000, and this array would be enough for 4 billion. As servers with 65k+ connections will use more than 40GB of address space anyway, this shouldn't be an issue, especially as most of it will never be accessed.. --- include/lf.h | 12 ++++++------ mysys/lf_alloc-pin.c | 27 +++++++++++++-------------- 2 files changed, 19 insertions(+), 20 deletions(-) diff --git a/include/lf.h b/include/lf.h index d6b73f3f69da..ffc10875f2d7 100644 --- a/include/lf.h +++ b/include/lf.h @@ -59,19 +59,19 @@ typedef struct { lf_pinbox_free_func *free_func; void *free_func_arg; uint free_ptr_offset; - uint32 volatile pinstack_top_ver; /* this is a versioned pointer */ - uint32 volatile pins_in_array; /* number of elements in array */ + uint64 volatile pinstack_top_ver; /* this is a versioned pointer */ + uint64 volatile pins_in_array; /* number of elements in array */ } LF_PINBOX; typedef struct st_lf_pins { void * volatile pin[LF_PINBOX_PINS]; LF_PINBOX *pinbox; void *purgatory; - uint32 purgatory_count; - uint32 volatile link; + uint64 purgatory_count; + uint64 volatile link; /* we want sizeof(LF_PINS) to be 64 to avoid false sharing */ -#if SIZEOF_INT*2+SIZEOF_CHARP*(LF_PINBOX_PINS+2) != 64 - char pad[64-sizeof(uint32)*2-sizeof(void*)*(LF_PINBOX_PINS+2)]; +#if 2*8+SIZEOF_CHARP*(LF_PINBOX_PINS+2) != 64 + char pad[64-sizeof(uint64)*2-sizeof(void*)*(LF_PINBOX_PINS+2)]; #endif } LF_PINS; diff --git a/mysys/lf_alloc-pin.c b/mysys/lf_alloc-pin.c index 4f5dbeda89dd..d5fe7ef079cd 100644 --- a/mysys/lf_alloc-pin.c +++ b/mysys/lf_alloc-pin.c @@ -92,13 +92,13 @@ Pins are given away from a "pinbox". Pinbox is stack-based allocator. It used dynarray for storing pins, new elements are allocated by dynarray as necessary, old are pushed in the stack for reuse. ABA is solved by - versioning a pointer - because we use an array, a pointer to pins is 16 bit, - upper 16 bits are used for a version. + versioning a pointer - because we use an array, a pointer to pins is 32 bit, + upper 32 bits are used for a version. */ #include "lf.h" #include "mysys_priv.h" /* key_memory_lf_node */ -#define LF_PINBOX_MAX_PINS 65536 +#define LF_PINBOX_MAX_PINS (65536ULL*65536ULL) static void lf_pinbox_real_free(LF_PINS *pins); @@ -136,15 +136,14 @@ void lf_pinbox_destroy(LF_PINBOX *pinbox) */ LF_PINS *lf_pinbox_get_pins(LF_PINBOX *pinbox) { - uint32 pins, next, top_ver; + uint64 pins, next, top_ver; LF_PINS *el; /* - We have an array of max. 64k elements. The highest index currently allocated is pinbox->pins_in_array. Freed elements are in a lifo stack, pinstack_top_ver. - pinstack_top_ver is 32 bits; 16 low bits are the index in the - array, to the first element of the list. 16 high bits are a version - (every time the 16 low bits are updated, the 16 high bits are + pinstack_top_ver is 64 bits; 32 low bits are the index in the + array, to the first element of the list. 32 high bits are a version + (every time the 32 low bits are updated, the 32 high bits are incremented). Versioning prevents the ABA problem. */ top_ver= pinbox->pinstack_top_ver; @@ -153,7 +152,7 @@ LF_PINS *lf_pinbox_get_pins(LF_PINBOX *pinbox) if (!(pins= top_ver % LF_PINBOX_MAX_PINS)) { /* the stack of free elements is empty */ - pins= my_atomic_add32((int32 volatile*) &pinbox->pins_in_array, 1)+1; + pins= my_atomic_add64((int64 volatile*) &pinbox->pins_in_array, 1)+1; if (unlikely(pins >= LF_PINBOX_MAX_PINS)) return 0; /* @@ -167,8 +166,8 @@ LF_PINS *lf_pinbox_get_pins(LF_PINBOX *pinbox) } el= (LF_PINS *)lf_dynarray_value(&pinbox->pinarray, pins); next= el->link; - } while (!my_atomic_cas32((int32 volatile*) &pinbox->pinstack_top_ver, - (int32*) &top_ver, + } while (!my_atomic_cas64((int64 volatile*) &pinbox->pinstack_top_ver, + (int64*) &top_ver, top_ver-pins+next+LF_PINBOX_MAX_PINS)); /* set el->link to the index of el in the dynarray (el->link has two usages: @@ -191,7 +190,7 @@ LF_PINS *lf_pinbox_get_pins(LF_PINBOX *pinbox) void lf_pinbox_put_pins(LF_PINS *pins) { LF_PINBOX *pinbox= pins->pinbox; - uint32 top_ver, nr; + uint64 top_ver, nr; nr= pins->link; #ifndef DBUG_OFF @@ -221,8 +220,8 @@ void lf_pinbox_put_pins(LF_PINS *pins) do { pins->link= top_ver % LF_PINBOX_MAX_PINS; - } while (!my_atomic_cas32((int32 volatile*) &pinbox->pinstack_top_ver, - (int32*) &top_ver, + } while (!my_atomic_cas64((int64 volatile*) &pinbox->pinstack_top_ver, + (int64*) &top_ver, top_ver-pins->link+nr+LF_PINBOX_MAX_PINS)); } From da1d39ead72bef3225cf6f6fc34f1d95f12ace2a Mon Sep 17 00:00:00 2001 From: Dima Date: Mon, 12 Feb 2018 02:48:39 +0300 Subject: [PATCH 0537/1221] Release notes for PS 5.6.39-83.1 --- doc/source/conf.py | 9 +-- .../Percona-Server-5.6.39-83.1.rst | 71 +++++++++++++++++++ .../release-notes/release-notes_index.rst | 1 + doc/source/upstream-bug-fixes.rst | 20 +++++- 4 files changed, 96 insertions(+), 5 deletions(-) create mode 100644 doc/source/release-notes/Percona-Server-5.6.39-83.1.rst diff --git a/doc/source/conf.py b/doc/source/conf.py index bb88aaae5fb6..2e077eca5286 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -45,7 +45,7 @@ # General information about the project. project = u'Percona Server' -copyright = u'Percona LLC and/or its affiliates 2009-2017' +copyright = u'Percona LLC and/or its affiliates 2009-2018' # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the @@ -54,7 +54,7 @@ # The short X.Y version. version = '5.6' # The full version, including alpha/beta/rc tags. -release = '5.6.37-82.2' +release = '5.6.39-83.1' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. @@ -143,6 +143,7 @@ 'tokubug': ('https://tokutek.atlassian.net/browse/DB-%s', '#'), 'bkpbug': ('https://tokutek.atlassian.net/browse/BACKUP-%s', '#'), 'tdbbug': ('https://jira.percona.com/browse/TDB-%s', '#'), + 'psbug': ('https://jira.percona.com/browse/PS-%s', '#'), 'jirabug': ('https://jira.percona.com/browse/%s', '')} # -- Options for HTML output --------------------------------------------------- @@ -240,7 +241,7 @@ # (source start file, target name, title, author, documentclass [howto/manual]). latex_documents = [ ('index', 'PerconaServer-5.6.tex', u'Percona Server Documentation', - u'Percona LLC and/or its affiliates 2009-2017', 'manual'), + u'Percona LLC and/or its affiliates 2009-2018', 'manual'), ] # The name of an image file (relative to this directory) to place at the top of @@ -277,7 +278,7 @@ # (source start file, name, description, authors, manual section). man_pages = [ ('index', 'perconaserver56', u'Percona Server 5.6 Documentation', - [u'Percona LLC and/or its affiliates 2009-2017'], 1) + [u'Percona LLC and/or its affiliates 2009-2018'], 1) ] diff --git a/doc/source/release-notes/Percona-Server-5.6.39-83.1.rst b/doc/source/release-notes/Percona-Server-5.6.39-83.1.rst new file mode 100644 index 000000000000..57f240db79ba --- /dev/null +++ b/doc/source/release-notes/Percona-Server-5.6.39-83.1.rst @@ -0,0 +1,71 @@ +.. rn:: 5.6.39-83.1 + +============================= +|Percona Server| 5.6.39-83.1 +============================= + +Percona is glad to announce the release of |Percona Server| 5.6.39-83.1 on +February 13, 2018. Downloads are available `here +`_ +and from the :doc:`Percona Software Repositories `. + +Based on `MySQL 5.6.39 +`_, including +all the bug fixes in it, |Percona Server| 5.6.39-83.1 is now the current +stable release in the 5.6 series. All of |Percona|'s software is open-source +and free. + +Bugs Fixed +========== + +With :variable:`innodb_large_prefix` set to ``1``, Blackhole storage engine +was incompatible with InnoDB keys longer than 1000 bytes, thus adding new +indexes would cause replication errors on the slave. Bug fixed :psbug:`1126` +(upstream :mysqlbug:`53588`). + +Intermediary slave with Blackhole storage engine couldn't record updates +from master to its own binary log in case master has +:variable:`binlog_rows_query_log_events` option enabled. Bug fixed +:psbug:`1119` (upstream :mysqlbug:`88057`). + +A build error on FreeBSD caused by fixing the bug :psbug:`255` was present. +Bug fixed :psbug:`2284`. + +Server queries that contained JSON special characters and were logged by +``audit_log`` plugin in JSON format caused invalid output due to lack of +escaping. Bug fixed :psbug:`1115`. + +Compilation warnings fixed in sql_planner.cc module. Bug fixed :psbug:`3632` +(upstream :mysqlbug:`77637`). + +A memory leak fixed in PFS unit test. Bug fixed :psbug:`1806` (upstream +:mysqlbug:`89384`). + +A GCC 7 warning fix introduced regression in |Percona Server| +:rn:`5.6.38-83.0` that lead to a wrong SQL query built to access the remote +server when Federated storage engine was used. Bug fixed :psbug:`1134`. + +|Percona Server| now uses *Travis CI* for additional tests. Bug fixed +:psbug:`3777`. + +Other bugs fixed: :psbug:`257`, :psbug:`1090` (upstream :mysqlbug:`78048`), +:psbug:`1127`, and :psbug:`2415`. + +This release also contains fixes for the following CVE issues: CVE-2018-2562, +CVE-2018-2573, CVE-2018-2583, CVE-2018-2590, CVE-2018-2591, CVE-2018-2612, +CVE-2018-2622, CVE-2018-2640, CVE-2018-2645, CVE-2018-2647, CVE-2018-2665, +CVE-2018-2668, CVE-2018-2696, CVE-2018-2703, CVE-2017-3737. + +TokuDB Changes +============== + +A memory leak was fixed in the PerconaFT library, caused by not destroying PFS +key objects on shutdown. Bug fixed :jirabug:`TDB-98`. + +A clang-format configuration was added to PerconaFT and TokuDB. Bug fixed +:jirabug:`TDB-104`. + +Other bugs fixed: :jirabug:`TDB-48`, :jirabug:`TDB-78`, :jirabug:`TDB-93`, +and :jirabug:`TDB-99`. + + diff --git a/doc/source/release-notes/release-notes_index.rst b/doc/source/release-notes/release-notes_index.rst index af8007c68b1f..9b4c0cb613b0 100644 --- a/doc/source/release-notes/release-notes_index.rst +++ b/doc/source/release-notes/release-notes_index.rst @@ -6,6 +6,7 @@ :maxdepth: 1 :glob: + Percona-Server-5.6.39-83.1 Percona-Server-5.6.37-82.2 Percona-Server-5.6.36-82.1 Percona-Server-5.6.36-82.0 diff --git a/doc/source/upstream-bug-fixes.rst b/doc/source/upstream-bug-fixes.rst index 4999321708ac..62e45bfa47a9 100644 --- a/doc/source/upstream-bug-fixes.rst +++ b/doc/source/upstream-bug-fixes.rst @@ -5,7 +5,19 @@ ============================================================= +-------------------------------------------------------------------------------------------------------------+ -|:Upstream bug: :mysqlbug:`82967` | +|:Upstream bug: :mysqlbug:`53588` - Blackhole: Specified key was too long; max key length is 1000 bytes | +|:Launchpad bug: :bug:`173049` | +|:Upstream state: Verified | +|:Fix Released: :rn:`5.6.39-83.1` | +|:Upstream fix: N/A | ++-------------------------------------------------------------------------------------------------------------+ +|:Upstream bug: :mysqlbug:`77637` - mysql 5.6.25 compiled warning | +|:Launchpad bug: :bug:`1660628` | +|:Upstream state: Verified (checked on 2018-02-12) | +|:Fix Released: :rn:`5.6.39-83.1` | +|:Upstream fix: N/A | ++-------------------------------------------------------------------------------------------------------------+ +|:Upstream bug: :mysqlbug:`82967` | |:Launchpad bug: :bug:`1622992` | |:Upstream state: N/A | |:Fix Released: :rn:`5.6.37-82.2` | @@ -65,6 +77,12 @@ |:Fix Released: :rn:`5.6.36-82.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ +|:Upstream bug: :mysqlbug:`88057` - Intermediary slave does not log master changes with... | +|:Launchpad bug: :bug:`1722789` | +|:Upstream state: Verified (checked on 2018-01-04) | +|:Fix Released: :rn:`5.6.39-83.1` | +|:Upstream fix: N/A | ++-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`81467` - innodb_fts.sync_block test unstable due to slow query log nondeterminism | |:Launchpad bug: :bug:`1662163` | |:Upstream state: Verified (checked on 2017-08-25) | From ddaf0f14704be3fd3d6960f7a3e2fdd0125e2dfd Mon Sep 17 00:00:00 2001 From: Karthik Kamath Date: Wed, 14 Feb 2018 09:35:18 +0530 Subject: [PATCH 0538/1221] --- storage/innobase/handler/ha_innodb.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index 1c6763ef93a3..0591987f4aec 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2000, 2015, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2000, 2018, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2008, 2009 Google Inc. Copyright (c) 2009, Percona Inc. @@ -9225,8 +9225,10 @@ ha_innobase::start_stmt( case SQLCOM_INSERT: case SQLCOM_UPDATE: case SQLCOM_DELETE: + case SQLCOM_REPLACE: init_table_handle_for_HANDLER(); prebuilt->select_lock_type = LOCK_X; + prebuilt->stored_select_lock_type = LOCK_X; error = row_lock_table_for_mysql(prebuilt, NULL, 1); if (error != DB_SUCCESS) { From 17c92835bb3c14ccba991b2532badb46529adf2b Mon Sep 17 00:00:00 2001 From: Venkatesh Venugopal Date: Wed, 14 Feb 2018 12:07:55 +0530 Subject: [PATCH 0539/1221] Bug #24674276 MYSQLBINLOG -R --HEXDUMP CRASHES FOR INTVAR, USER_VAR, OR RAND EVENTS This patch increases the test coverage of mysqlbinlog for Intvar, User_var and Rand events by adding a testcase covering the scenarios mentioned in the bug report. Adding the testcase since the above mentioned bug is already fixed by the patch to the Bug#26878022 and there was no testcase covering the scenarios mentioned in the bug report. --- client/mysqlbinlog.cc | 15 +++--- .../binlog/r/binlog_mysqlbinlog_intvar.result | 18 +++++++ .../binlog/t/binlog_mysqlbinlog_intvar.test | 54 +++++++++++++++++++ 3 files changed, 81 insertions(+), 6 deletions(-) create mode 100644 mysql-test/suite/binlog/r/binlog_mysqlbinlog_intvar.result create mode 100644 mysql-test/suite/binlog/t/binlog_mysqlbinlog_intvar.test diff --git a/client/mysqlbinlog.cc b/client/mysqlbinlog.cc index b8184e169f77..1181104d5c4c 100644 --- a/client/mysqlbinlog.cc +++ b/client/mysqlbinlog.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -1167,11 +1167,14 @@ void end_binlog(PRINT_EVENT_INFO *print_event_info) Print the given event, and either delete it or delegate the deletion to someone else. - The deletion may be delegated in two cases: (1) the event is a - Format_description_log_event, and is saved in - glob_description_event; (2) the event is a Create_file_log_event, - and is saved in load_processor. - + The deletion may be delegated in these cases: + (1) the event is a Format_description_log_event, and is saved in + glob_description_event. + (2) the event is a Create_file_log_event, and is saved in load_processor. + (3) the event is an Intvar, Rand or User_var event, it will be kept until + the subsequent Query_log_event. + (4) the event is a Table_map_log_event, it will be kept until the subsequent + Rows_log_event. @param[in,out] print_event_info Parameters and context state determining how to print. @param[in] ev Log_event to process. diff --git a/mysql-test/suite/binlog/r/binlog_mysqlbinlog_intvar.result b/mysql-test/suite/binlog/r/binlog_mysqlbinlog_intvar.result new file mode 100644 index 000000000000..5063c2455701 --- /dev/null +++ b/mysql-test/suite/binlog/r/binlog_mysqlbinlog_intvar.result @@ -0,0 +1,18 @@ +call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. *"); +RESET MASTER; +CREATE TABLE t1 (i INT); +CREATE TABLE t2 (j INT PRIMARY KEY AUTO_INCREMENT); +SET @foo = 1; +INSERT INTO t1 VALUES (@foo); +INSERT INTO t1 VALUES (rand() * 10); +Warnings: +Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a system function that may return a different value on the slave. +INSERT INTO t2 VALUES(); +DROP TABLE t1; +DROP TABLE t2; +RESET MASTER; +include/assert.inc [The t1 table should have two entries.] +include/assert.inc [The t2 table should have one entry.] +DROP TABLE t1; +DROP TABLE t2; +RESET MASTER; diff --git a/mysql-test/suite/binlog/t/binlog_mysqlbinlog_intvar.test b/mysql-test/suite/binlog/t/binlog_mysqlbinlog_intvar.test new file mode 100644 index 000000000000..85435184fc04 --- /dev/null +++ b/mysql-test/suite/binlog/t/binlog_mysqlbinlog_intvar.test @@ -0,0 +1,54 @@ +# === Purpose === +# +# Verify 'mysqlbinlog --read-from-remote-server --hexdump' works for +# USER_VAR, RAND_LOG and INTVAR log events. +# +# === References === +# +# Bug #24674276 MYSQLBINLOG -R --HEXDUMP CRASHES FOR INTVAR, USER_VAR, OR +# RAND EVENTS + +# USER_VAR, RAND_LOG_EVENT and INTVAR_LOG_EVENT work with binlog_format +# statement. +--source include/have_binlog_format_statement.inc +call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. *"); + +# Initial setup +# Purge the existing binlog. +RESET MASTER; +--let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1) + +CREATE TABLE t1 (i INT); +CREATE TABLE t2 (j INT PRIMARY KEY AUTO_INCREMENT); + +# USER_VAR EVENT +SET @foo = 1; +INSERT INTO t1 VALUES (@foo); + +# RAND_LOG_EVENT +INSERT INTO t1 VALUES (rand() * 10); + +# INTVAR_LOG_EVENT +INSERT INTO t2 VALUES(); +--exec $MYSQL_BINLOG --hexdump --read-from-remote-server --user=root --host=127.0.0.1 --port=$MASTER_MYPORT $binlog_file > $MYSQLTEST_VARDIR/tmp/binlog_data.sql + +DROP TABLE t1; +DROP TABLE t2; +RESET MASTER; + +# Load the file and verify the inserted data. +--exec $MYSQL --user=root --host=127.0.0.1 --port=$MASTER_MYPORT < $MYSQLTEST_VARDIR/tmp/binlog_data.sql + +--let $assert_text= The t1 table should have two entries. +--let $assert_cond= [SELECT count(*) FROM t1] = 2 +--source include/assert.inc + +--let $assert_text= The t2 table should have one entry. +--let $assert_cond= [SELECT count(*) FROM t2] = 1 +--source include/assert.inc + +# Cleanup +DROP TABLE t1; +DROP TABLE t2; +--remove_file $MYSQLTEST_VARDIR/tmp/binlog_data.sql +RESET MASTER; From d3781b23a823a4842189c90318043c9f4de3d2d0 Mon Sep 17 00:00:00 2001 From: Sachin Agarwal Date: Wed, 14 Feb 2018 12:51:05 +0530 Subject: [PATCH 0540/1221] Bug #23593654 CRASH IN BUF_BLOCK_FROM_AHI WHEN LARGE PAGES AND AHI ARE ENABLED Problem: Fix for Bug #21348684 (#Rb9581) introduced a conditional debug execute 'buf_pool_resize_chunk_null', which causes new chunks memory for 2nd buffer pool instance is freed. Buffer pool resize function removes all old chunks entry from 'buf_chunk_map_reg' and add new chunks entry into it. But when 'buf_pool_resize_chunk_null' is set true, 2nd buffer pool instance's chunk entries are not added into 'buf_chunk_map_reg'. When purge thread tries to access that buffer chunk, it leads to debug assertion. Fix: Added old chunk entries into 'buf_chunk_map_reg' for 2nd buffer pool instance when 'buf_pool_resize_chunk_null' debug condition is set to true. Reviewed by: Jimmy RB: 18664 --- storage/innobase/buf/buf0buf.cc | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/storage/innobase/buf/buf0buf.cc b/storage/innobase/buf/buf0buf.cc index c6226bae7add..022f5da48f51 100644 --- a/storage/innobase/buf/buf0buf.cc +++ b/storage/innobase/buf/buf0buf.cc @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1995, 2017, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1995, 2018, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2008, Google Inc. Portions of this file contain modifications contributed and copyrighted by @@ -2803,6 +2803,9 @@ buf_pool_resize() = buf_pool->n_chunks; warning = true; buf_pool->chunks_old = NULL; + for (ulint j = 0; j < buf_pool->n_chunks_new; j++) { + buf_pool_register_chunk(&(buf_pool->chunks[j])); + } goto calc_buf_pool_size; } From 9503f75b0036fb0a5908b89102926336947a1401 Mon Sep 17 00:00:00 2001 From: Tiago Vale Date: Tue, 6 Feb 2018 15:08:50 +0000 Subject: [PATCH 0541/1221] Bug#27406775 BACKPORT BUG#26846549 TO 5.7 Problem ======= GCS/XCom implements an all-to-all bidirectional network between the members of a group. WL#9345 introduced IP whitelisting support in GCS/XCom, where all connections coming from a non-whitelisted IP are immediately terminated. It is possible to create IP whitelists such that, from the point of view of users, a group is functioning correctly, but in reality, GCS/XCom is unable to create the all-to-all bidirectional network if some members do not have all the remaining members whitelisted. For example, consider three nodes N1, N2, and N3, setup as follows: * whitelist(N1) = N2, N3 * whitelist(N2) = N1 * whitelist(N3) = N1, N2 Consider that N1 bootstraps the group and N2 and N3 join through N1. In this setup, N2 does not accept connections from N3. This leads to a situation where N1 functions as a pivot in the group: N2 only receives N3's application messages via N1. The group works as intended because it is always possible to create a majority due to N1: N1-N2 or N1-N3. If N1 leaves the group, the group becomes unproductive. Analysis ======== The issue stems from the fact that the IP whitelist is the sole decider of whether GCS/XCom accepts a connection or not. An IP whitelist that does not feature all group members prevents the creation of the all-to-all bidirectional network. Solution ======== Let GCS/XCom accept incoming connections if the IP is whitelisted *or* the IP belongs to a current member of XCom configuration. This way GCS/XCom is always able to create the all-to-all bidirectional network. This is done by providing the latest site_def to the xcom_socket_accept_callback upcall from XCom to GCS. Reviewed-by: Filipe Campos Reviewed-by: Tiago Jorge RB: 18672 --- .../src/bindings/xcom/gcs_xcom_interface.cc | 9 +- .../src/bindings/xcom/gcs_xcom_networking.cc | 170 +++++++++++++----- .../src/bindings/xcom/gcs_xcom_networking.h | 18 +- .../src/bindings/xcom/xcom/node_connection.h | 3 +- .../src/bindings/xcom/xcom/server_struct.h | 3 +- .../src/bindings/xcom/xcom/site_struct.h | 5 +- .../libmysqlgcs/src/bindings/xcom/xcom/task.c | 4 +- .../libmysqlgcs/src/bindings/xcom/xcom/task.h | 3 +- .../src/bindings/xcom/xcom/task_net.c | 4 +- .../src/bindings/xcom/xcom/xcom_base.h | 2 +- .../src/bindings/xcom/xcom/xcom_transport.c | 3 +- 11 files changed, 163 insertions(+), 61 deletions(-) diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_interface.cc b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_interface.cc index 34782dafbfc3..10ffba1fbb22 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_interface.cc +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_interface.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -19,6 +19,7 @@ #include "gcs_xcom_interface.h" #include "synode_no.h" +#include "site_struct.h" #include "gcs_xcom_group_member_information.h" @@ -82,7 +83,7 @@ void cb_xcom_ready(int status); void cb_xcom_exit(int status); synode_no cb_xcom_get_app_snap(blob *gcs_snap); void cb_xcom_handle_app_snap(blob *gcs_snap); -int cb_xcom_socket_accept(int fd); +int cb_xcom_socket_accept(int fd, site_def const *xcom_config); // XCom logging callback @@ -1451,12 +1452,12 @@ void cb_xcom_logger(int level, const char *message) } -int cb_xcom_socket_accept(int fd) +int cb_xcom_socket_accept(int fd, site_def const *xcom_config) { Gcs_xcom_interface *intf= static_cast(Gcs_xcom_interface::get_interface()); const Gcs_ip_whitelist& wl= intf->get_ip_whitelist(); - return wl.shall_block(fd) ? 0 : 1; + return wl.shall_block(fd, xcom_config) ? 0 : 1; } diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_networking.cc b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_networking.cc index 95e19bcc4822..b45f8b689e6c 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_networking.cc +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_networking.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -13,6 +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 */ +#include "gcs_xcom_group_member_information.h" #include "gcs_xcom_networking.h" #include "gcs_xcom_utils.h" #include "gcs_group_identifier.h" @@ -752,12 +753,121 @@ Gcs_ip_whitelist::add_address(std::string addr, std::string mask) } bool -Gcs_ip_whitelist::do_check_block(struct sockaddr_storage *sa) const +Gcs_ip_whitelist::do_check_block_whitelist( + std::vector const& incoming_octets) const { + /* + Check if the incoming IP matches any IP-mask combination in the whitelist. + The check compares both IPs' bytes (octets) in network byte order. + */ bool block= true; - unsigned char *buf; std::set< Gcs_ip_whitelist_entry* >::const_iterator wl_it; - std::pair< std::vector, std::vector > *wl_value; + for (wl_it= m_ip_whitelist.begin(); + wl_it != m_ip_whitelist.end() && block; + wl_it++) + { + std::pair< std::vector, std::vector > *wl_value= NULL; + + wl_value= (*wl_it)->get_value(); + if (wl_value == NULL) + continue; + + std::vector const& wl_range_octets= (*wl_value).first; + std::vector const& wl_netmask_octets= (*wl_value).second; + + // no point in comparing different families, e.g. IPv4 with IPv6 + if (incoming_octets.size() != wl_range_octets.size()) + goto cleanup_and_continue; + + for (size_t octet= 0; octet < wl_range_octets.size(); octet++) + { + unsigned char const& oct_in_ip= incoming_octets[octet]; + unsigned char const& oct_range_ip= wl_range_octets[octet]; + unsigned char const& oct_mask_ip= wl_netmask_octets[octet]; + // bail out on the first octet mismatch -- try next IP + if ((block= (oct_in_ip & oct_mask_ip) != (oct_range_ip & oct_mask_ip))) + break; + } + + cleanup_and_continue: + // we own wl_value if the XCom member is a hostname + bool is_hostname= + dynamic_cast(*wl_it) != NULL; + if (is_hostname) + delete wl_value; + } + return block; +} + +bool +Gcs_ip_whitelist::do_check_block_xcom( + std::vector const& incoming_octets, + site_def const *xcom_config) const +{ + /* + Check if the incoming IP matches the IP of any XCom member. + The check compares both IPs' bytes (octets) in network byte order. + */ + bool block= true; + for (u_int i= 0; i < xcom_config->nodes.node_list_len && block; i++) + { + Gcs_xcom_group_member_information xcom_addr( + std::string(xcom_config->nodes.node_list_val[i].address)); + struct sockaddr_storage xcom_sa; + Gcs_ip_whitelist_entry *xcom_addr_wl= NULL; + std::pair< std::vector, std::vector > *wl_value= NULL; + std::vector const *xcom_octets= NULL; + + /* + Treat the XCom member as if it is in the whitelist. + The XCom member can be an IP or hostname. + The magic-number "32" for the netmask is tied to IPv4. + */ + bool is_hostname= string_to_sockaddr(xcom_addr.get_member_ip(), &xcom_sa); + if (is_hostname) + xcom_addr_wl= new Gcs_ip_whitelist_entry_hostname( + xcom_addr.get_member_ip(), "32"); + else + xcom_addr_wl= new Gcs_ip_whitelist_entry_ip( + xcom_addr.get_member_ip(), "32"); + + bool error= xcom_addr_wl->init_value(); + if (error) + goto cleanup_and_continue; + wl_value= xcom_addr_wl->get_value(); + if (wl_value == NULL) + goto cleanup_and_continue; + + xcom_octets= &wl_value->first; + + // no point in comparing different families, e.g. IPv4 with IPv6 + if (incoming_octets.size() != xcom_octets->size()) + goto cleanup_and_continue; + + for (size_t octet= 0; octet < xcom_octets->size(); octet++) + { + unsigned char const& oct_incoming= incoming_octets[octet]; + unsigned char const& oct_xcom= (*xcom_octets)[octet]; + // bail out on the first octet mismatch -- try next IP + if ((block= (oct_incoming != oct_xcom))) + break; + } + + cleanup_and_continue: + // we own wl_value if the XCom member is a hostname + if (is_hostname) + delete wl_value; + delete xcom_addr_wl; + } + return block; +} + +bool +Gcs_ip_whitelist::do_check_block(struct sockaddr_storage *sa, + site_def const *xcom_config) const +{ + bool block= true; + unsigned char *buf; std::vector ip; /* purecov: begin deadcode */ @@ -776,48 +886,21 @@ Gcs_ip_whitelist::do_check_block(struct sockaddr_storage *sa) const goto end; /* - This check works like this: - 1. Check if the whitelist is empty. - - if empty, return false - 2. If whitelist is not empty - - for every ip and mask - - check if bytes (octets) match in network byte order - */ - - if (m_ip_whitelist.empty()) - goto end; - - for (wl_it= m_ip_whitelist.begin(); - wl_it != m_ip_whitelist.end() && block; - wl_it++) - { - wl_value= (*wl_it)->get_value(); - - if(wl_value == NULL) - continue; - - unsigned int octet; - const std::vector range= (*wl_value).first; - const std::vector netmask= (*wl_value).second; - - for (octet= 0; octet < range.size(); octet++) - { - unsigned char oct_in_ip= ip[octet]; - unsigned char oct_range_ip= range[octet]; - unsigned char oct_mask_ip= netmask[octet]; - - // bail out on the first octet mismatch -- try next IP - if ((block= (oct_in_ip & oct_mask_ip) != (oct_range_ip & oct_mask_ip))) - break; - } - } + Allow the incoming IP if it is whitelisted *or* is an XCom member. + XCom members are authorized by default so that XCom can create its + all-to-all bidirectional network. + */ + if (!m_ip_whitelist.empty()) + block= do_check_block_whitelist(ip); + if (block && xcom_config != NULL) + block= do_check_block_xcom(ip, xcom_config); end: return block; } bool -Gcs_ip_whitelist::shall_block(int fd) const +Gcs_ip_whitelist::shall_block(int fd, site_def const *xcom_config) const { bool ret= true; if (fd > 0) @@ -830,7 +913,7 @@ Gcs_ip_whitelist::shall_block(int fd) const ret= true; } else - ret= do_check_block(&sa); + ret= do_check_block(&sa, xcom_config); } if (ret) @@ -845,7 +928,8 @@ Gcs_ip_whitelist::shall_block(int fd) const } bool -Gcs_ip_whitelist::shall_block(const std::string& ip_addr) const +Gcs_ip_whitelist::shall_block(const std::string& ip_addr, + site_def const *xcom_config) const { bool ret= true; if (!ip_addr.empty()) @@ -858,7 +942,7 @@ Gcs_ip_whitelist::shall_block(const std::string& ip_addr) const ret= true; } else - ret= do_check_block(&sa); + ret= do_check_block(&sa, xcom_config); } if (ret) diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_networking.h b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_networking.h index e052a999afa5..ed616b667102 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_networking.h +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_networking.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -21,6 +21,8 @@ #include #include +#include "site_struct.h" + /** This function gets all network addresses on this host and their subnet masks as a string. IPv4 only. (SOCK_STREAM only) @@ -225,20 +227,23 @@ class Gcs_ip_whitelist false otherwise. @param ip_addr a string representation of an IPv4 address. + @param xcom_config the latest XCom configuration. @return true if the ip should be blocked, false otherwise. */ - bool shall_block(const std::string& ip_addr) const; + bool shall_block(const std::string& ip_addr, + site_def const *xcom_config= NULL) const; /** This member function SHALL return true if the IP of the given file descriptor is to be blocked, false otherwise. @param fd the file descriptor of the accepted socket to check. + @param xcom_config the latest XCom configuration. @return true if the ip should be blocked, false otherwise. */ - bool shall_block(int fd) const; + bool shall_block(int fd, site_def const *xcom_config= NULL) const; /** This member function gets the textual representation of the list as @@ -255,7 +260,12 @@ class Gcs_ip_whitelist std::string to_string() const; private: - bool do_check_block(struct sockaddr_storage *sa) const; + bool do_check_block(struct sockaddr_storage *sa, + site_def const *xcom_config) const; + bool do_check_block_whitelist( + std::vector const& incoming_octets) const; + bool do_check_block_xcom(std::vector const& incoming_octets, + site_def const *xcom_config) const; bool add_address(std::string addr, std::string mask); private: diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/node_connection.h b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/node_connection.h index cc3b9cf70d51..433ab1346d3c 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/node_connection.h +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/node_connection.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2012, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -27,6 +27,7 @@ #endif #include "xcom_proto.h" +#include "xcom_vp.h" #ifdef __cplusplus extern "C" diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/server_struct.h b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/server_struct.h index 2f4a74ef48cf..05dce78f5495 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/server_struct.h +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/server_struct.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -20,6 +20,7 @@ extern "C" { #endif +#include "task.h" #include "xcom_common.h" #include "xcom_limits.h" diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/site_struct.h b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/site_struct.h index 81fa9248ec1a..b72535f24686 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/site_struct.h +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/site_struct.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -16,6 +16,9 @@ #ifndef SITE_STRUCT_H #define SITE_STRUCT_H +#include "server_struct.h" +#include "xcom_detector.h" + #ifdef __cplusplus extern "C" { #endif diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/task.c b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/task.c index c0d865d94f5b..2fceb74e8188 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/task.c +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/task.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2012, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -40,7 +40,7 @@ #include #include -#include "xcom_proto_enum.h" +#include "xcom_vp.h" #include "node_connection.h" #ifndef WIN diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/task.h b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/task.h index 9263146d5154..aa039467bde3 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/task.h +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/task.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2012, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -20,6 +20,7 @@ #include "xcom_common.h" #include "x_platform.h" #include "task_arg.h" +#include "simset.h" #ifdef __cplusplus diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/task_net.c b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/task_net.c index 914d77faf0c8..07da803cf00b 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/task_net.c +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/task_net.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -36,7 +36,7 @@ #include "simset.h" #include "task_debug.h" -#include "xcom_proto_enum.h" +#include "xcom_vp.h" #include "task.h" #include "task_os.h" diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.h b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.h index 652d7c54d772..33aa394f9bd0 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.h +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.h @@ -191,7 +191,7 @@ void set_xcom_exit_cb(xcom_state_change_cb x); Registers a callback that is called right after the accept routine returns. */ -typedef int (*xcom_socket_accept_cb)(int fd); +typedef int (*xcom_socket_accept_cb)(int fd, site_def const *xcom_config); int set_xcom_socket_accept_cb(xcom_socket_accept_cb x); connection_descriptor *xcom_open_client_connection(char *server, diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_transport.c b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_transport.c index 20c69acbbce5..f6f4be84524a 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_transport.c +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_transport.c @@ -923,7 +923,8 @@ int tcp_server(task_arg arg) { do { TASK_CALL(accept_tcp(ep->fd, &ep->cfd)); /* Callback to check that the file descriptor is accepted. */ - if (xcom_socket_accept_callback && !xcom_socket_accept_callback(ep->cfd)) { + if (xcom_socket_accept_callback && + !xcom_socket_accept_callback(ep->cfd, get_site_def())) { shut_close_socket(&ep->cfd); ep->cfd = -1; } From bb314542095a47b31f4dade77631173519284967 Mon Sep 17 00:00:00 2001 From: Rahul Agarkar Date: Mon, 12 Feb 2018 12:33:51 +0530 Subject: [PATCH 0542/1221] Bug#27361662 ERROR NOT THROWN ON CREATING TEMPORARY TABLE IN INNODB_FILE_PER_TABLE TABLESPACE Problem : --------- When a temporary table is created with the TABLESPACE innodb_file_per_table clause, the option innodb_file_per_table is ignored and no error is thrown to the user. This results in creating the temporary table in the general temp tablespace. Solution : ---------- Validate the CREATE TEMPORARY TABLE command with TABLESPACE clause and return error if innodb_file_per_table option is used. Return error if the STRICT mode is turned on and return a warning message if the STRICT mode is turned off. Reviewed-by: Debarun Banerjee (debarun.banerjee@oracle.com) RB: 18463 --- mysql-test/suite/innodb/r/create_table.result | 23 ++++++++++++++ mysql-test/suite/innodb/t/create_table.test | 30 +++++++++++++++++++ storage/innobase/handler/ha_innodb.cc | 18 +++++++++++ 3 files changed, 71 insertions(+) diff --git a/mysql-test/suite/innodb/r/create_table.result b/mysql-test/suite/innodb/r/create_table.result index 653301f2792f..c086f4fa8d98 100644 --- a/mysql-test/suite/innodb/r/create_table.result +++ b/mysql-test/suite/innodb/r/create_table.result @@ -17,3 +17,26 @@ SET DEBUG ='+d, simulate_max_char_col'; create table t1(f1 varchar(1000))engine=innodb; ERROR HY000: Got error 1005 from storage engine SET DEBUG ='-d, simulate_max_char_col'; +# +# Bug #27361662 ERROR NOT THROWN ON CREATING TEMPORARY TABLE IN +# INNODB_FILE_PER_TABLE TABLESPACE +# +"Try creating temporary table with innodb_file_per_table option with STRICT mode" +SET innodb_strict_mode = ON; +CREATE TEMPORARY TABLE t1(c1 int) TABLESPACE innodb_file_per_table; +ERROR HY000: InnoDB: innodb_file_per_table option not supported for temporary tables. +SELECT COUNT(*) FROM t1; +ERROR 42S02: Table 'test.t1' doesn't exist +"Try creating temporary table with innodb_file_per_table option without STRICT mode" +SET innodb_strict_mode = OFF; +CREATE TEMPORARY TABLE t1(c1 int) TABLESPACE innodb_file_per_table; +Warnings: +Warning 1478 InnoDB: innodb_file_per_table option ignored while creating temporary table with INNODB_STRICT_MODE=OFF. +SHOW WARNINGS; +Level Code Message +Warning 1478 InnoDB: innodb_file_per_table option ignored while creating temporary table with INNODB_STRICT_MODE=OFF. +SELECT COUNT(*) FROM t1; +COUNT(*) +0 +DROP TABLE t1; +SET innodb_strict_mode = default; diff --git a/mysql-test/suite/innodb/t/create_table.test b/mysql-test/suite/innodb/t/create_table.test index 44361477fc7d..6ffcfd06c444 100644 --- a/mysql-test/suite/innodb/t/create_table.test +++ b/mysql-test/suite/innodb/t/create_table.test @@ -17,3 +17,33 @@ SET DEBUG ='+d, simulate_max_char_col'; --error 1030 create table t1(f1 varchar(1000))engine=innodb; SET DEBUG ='-d, simulate_max_char_col'; + +--echo # +--echo # Bug #27361662 ERROR NOT THROWN ON CREATING TEMPORARY TABLE IN +--echo # INNODB_FILE_PER_TABLE TABLESPACE +--echo # + +--echo "Try creating temporary table with innodb_file_per_table option with STRICT mode" +# Enable STRICT mode +SET innodb_strict_mode = ON; +--error ER_ILLEGAL_HA_CREATE_OPTION +CREATE TEMPORARY TABLE t1(c1 int) TABLESPACE innodb_file_per_table; + +# Validate that the table is not created +--error ER_NO_SUCH_TABLE +SELECT COUNT(*) FROM t1; + +--echo "Try creating temporary table with innodb_file_per_table option without STRICT mode" +# Disable STRICT mode +SET innodb_strict_mode = OFF; +CREATE TEMPORARY TABLE t1(c1 int) TABLESPACE innodb_file_per_table; + +SHOW WARNINGS; + +# Validate temporary table exists +SELECT COUNT(*) FROM t1; + +DROP TABLE t1; + +# Reset STRICT mode to default +SET innodb_strict_mode = default; diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index 05493023af38..53398ab850e6 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -10700,6 +10700,24 @@ bool create_table_info_t::create_option_tablespace_is_valid() { if (!m_use_shared_space) { + /* Do not allow creation of a temp table + with innodb_file_per_table option. */ + if ((m_create_info->options & HA_LEX_CREATE_TMP_TABLE) && + tablespace_is_file_per_table(m_create_info)) { + if (THDVAR(m_thd, strict_mode)) { + /* Return error if STRICT mode is enabled. */ + my_printf_error(ER_ILLEGAL_HA_CREATE_OPTION, + "InnoDB: innodb_file_per_table option" + " not supported for temporary tables.", MYF(0)); + return(false); + } + /* STRICT mode turned off. Proceed with the + execution with a warning. */ + push_warning_printf(m_thd, Sql_condition::SL_WARNING, + ER_ILLEGAL_HA_CREATE_OPTION, + "InnoDB: innodb_file_per_table option ignored" + " while creating temporary table with INNODB_STRICT_MODE=OFF."); + } return(true); } From 0ce52a3818ac38f4ca0231bc934c0c4cdef1541c Mon Sep 17 00:00:00 2001 From: Dima Date: Wed, 14 Feb 2018 09:17:50 +0300 Subject: [PATCH 0543/1221] DOC-694 - Change rocksdb_bytes_per_sync and rocksdb_wal_bytes_per_sync to be dynamic --- doc/source/myrocks/variables.rst | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/doc/source/myrocks/variables.rst b/doc/source/myrocks/variables.rst index 5ebee48d5aba..0b8aec7415c4 100644 --- a/doc/source/myrocks/variables.rst +++ b/doc/source/myrocks/variables.rst @@ -90,7 +90,7 @@ Also, all variables can exist in one or both of the following scopes: - Global * - :variable:`rocksdb_bytes_per_sync` - Yes - - No + - Yes - Global * - :variable:`rocksdb_cache_index_and_filter_blocks` - Yes @@ -498,7 +498,7 @@ Also, all variables can exist in one or both of the following scopes: - Global, Session * - :variable:`rocksdb_wal_bytes_per_sync` - Yes - - No + - Yes - Global * - :variable:`rocksdb_wal_dir` - Yes @@ -741,8 +741,9 @@ Allowed range is from ``1`` to ``1073741824``. .. variable:: rocksdb_bytes_per_sync :version 5.7.19-17: Implemented + :version 5.7.21-20: Changed to dynamic :cli: ``--rocksdb-bytes-per-sync`` - :dyn: No + :dyn: Yes :scope: Global :vartype: Numeric :default: ``0`` @@ -2183,8 +2184,9 @@ Disabled by default. .. variable:: rocksdb_wal_bytes_per_sync :version 5.7.19-17: Implemented + :version 5.7.21-20: Changed to dynamic :cli: ``--rocksdb-wal-bytes-per-sync`` - :dyn: No + :dyn: Yes :scope: Global :vartype: Numeric :default: ``0`` From e09c628db0d23d2e742110c750c46aeed6d9f2c1 Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Tue, 13 Feb 2018 14:56:21 +0100 Subject: [PATCH 0544/1221] PS-3823: Add ccache support for Travis CI config file (5.5) --- .travis.yml | 38 ++++++++++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/.travis.yml b/.travis.yml index 348593b2bf8d..8d14f05e3ae0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,8 +3,18 @@ dist: trusty sudo: required language: cpp +cache: + ccache: true + directories: + - $HOME/.ccache + - /usr/local/Cellar # cache homebrew packages for macOS + env: global: + - CCACHE_DIR=$HOME/.ccache + - CCACHE_COMPRESS=1 + - CCACHE_MAXSIZE=500M + - CCACHE_CPP2=1 - MAINTAINER_MODE=ON matrix: @@ -77,7 +87,7 @@ script: - JOB_NUMBER=$(echo $TRAVIS_JOB_NUMBER | sed -e 's:[0-9][0-9]*\.\(.*\):\1:') - echo PACKAGES=$PACKAGES MAINTAINER_MODE=$MAINTAINER_MODE JOB_NUMBER=$JOB_NUMBER TRAVIS_REPO_SLUG=$TRAVIS_REPO_SLUG TRAVIS_BRANCH=$TRAVIS_BRANCH TRAVIS_EVENT_TYPE=$TRAVIS_EVENT_TYPE TRAVIS_PULL_REQUEST=$TRAVIS_PULL_REQUEST - # Perform all Travis jobs or only jobs that are included on ENV_VAR_JOB_NUMBERS list if it's defined + # Perform all Travis jobs or only jobs that are included in ENV_VAR_JOB_NUMBERS list if it's defined - JOB_NUMBERS="1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24"; - if [[ "$ENV_VAR_JOB_NUMBERS" != "" ]]; then JOB_NUMBERS=$ENV_VAR_JOB_NUMBERS; @@ -88,29 +98,36 @@ script: travis_terminate 0; fi - # Update required LLVM and Ubuntu Toolchain repositories + # Configure required LLVM and Ubuntu Toolchain repositories - if [[ "$TRAVIS_OS_NAME" == "linux" ]] && [[ "$CC" == "clang" ]]; then PACKAGES="$PACKAGES llvm-$VERSION-dev"; curl -sSL "http://apt.llvm.org/llvm-snapshot.gpg.key" | sudo -E apt-key add -; echo "deb http://apt.llvm.org/trusty/ llvm-toolchain-trusty-$VERSION main" | sudo tee -a /etc/apt/sources.list > /dev/null; - sudo -E apt-get -yq update >> ~/apt-get-update.log 2>&1; fi - if [[ "$TRAVIS_OS_NAME" == "linux" ]] && [[ "$CC" == "gcc" ]]; then sudo -E apt-add-repository -y "ppa:ubuntu-toolchain-r/test"; - sudo -E apt-get -yq update >> ~/apt-get-update.log 2>&1; fi - # Download dependencies + # Update list of packages and download dependencies - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then - CC=$CC-$VERSION; - CXX=$CXX-$VERSION; - sudo -E apt-get -yq --no-install-suggests --no-install-recommends install $CXX $PACKAGES cmake cmake-curses-gui bison libncurses5-dev libaio-dev libssl-dev || travis_terminate 1; + CC=$CC-$VERSION; + CXX=$CXX-$VERSION; + sudo -E apt-get -yq update >> ~/apt-get-update.log 2>&1; + sudo -E apt-get -yq --no-install-suggests --no-install-recommends install $CXX $PACKAGES cmake cmake-curses-gui bison libncurses5-dev libaio-dev libssl-dev || travis_terminate 1; + sudo ln -s $(which ccache) /usr/lib/ccache/$CC; + sudo ln -s $(which ccache) /usr/lib/ccache/$CXX || echo; + else + brew update; + brew install ccache; + brew link ccache; + export PATH="/usr/local/opt/ccache/libexec:$PATH"; fi + + # Test Debug or RelWithDebInfo compilation - mkdir bin; cd bin - $CC -v - $CXX -v - - # Test Debug or RelWithDebInfo compilation + - ccache --version - cmake .. -DCMAKE_BUILD_TYPE=$BUILD -DMYSQL_MAINTAINER_MODE=$MAINTAINER_MODE @@ -121,4 +138,5 @@ script: -DWITH_ZLIB=$LIBTYPE $CMAKE_OPT - make -j2 + - ccache --show-stats From 539a1761bcfa749a03b8d7afed2cf6f5a3054b1e Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Wed, 14 Feb 2018 09:52:39 +0100 Subject: [PATCH 0545/1221] PS-3823: Add ccache support for Travis CI config file (5.6) --- .travis.yml | 38 ++++++++++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/.travis.yml b/.travis.yml index b669f0f71dcb..504f7b0b2f02 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,8 +3,18 @@ dist: trusty sudo: required language: cpp +cache: + ccache: true + directories: + - $HOME/.ccache + - /usr/local/Cellar # cache homebrew packages for macOS + env: global: + - CCACHE_DIR=$HOME/.ccache + - CCACHE_COMPRESS=1 + - CCACHE_MAXSIZE=500M + - CCACHE_CPP2=1 - MAINTAINER_MODE=ON - WITHOUT_TOKUDB=OFF @@ -78,7 +88,7 @@ script: - JOB_NUMBER=$(echo $TRAVIS_JOB_NUMBER | sed -e 's:[0-9][0-9]*\.\(.*\):\1:') - echo PACKAGES=$PACKAGES MAINTAINER_MODE=$MAINTAINER_MODE WITHOUT_TOKUDB=$WITHOUT_TOKUDB JOB_NUMBER=$JOB_NUMBER TRAVIS_REPO_SLUG=$TRAVIS_REPO_SLUG TRAVIS_BRANCH=$TRAVIS_BRANCH TRAVIS_EVENT_TYPE=$TRAVIS_EVENT_TYPE TRAVIS_PULL_REQUEST=$TRAVIS_PULL_REQUEST - # Perform all Travis jobs or only jobs that are included on ENV_VAR_JOB_NUMBERS list if it's defined + # Perform all Travis jobs or only jobs that are included in ENV_VAR_JOB_NUMBERS list if it's defined - JOB_NUMBERS="1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24"; - if [[ "$ENV_VAR_JOB_NUMBERS" != "" ]]; then JOB_NUMBERS=$ENV_VAR_JOB_NUMBERS; @@ -89,29 +99,36 @@ script: travis_terminate 0; fi - # Update required LLVM and Ubuntu Toolchain repositories + # Configure required LLVM and Ubuntu Toolchain repositories - if [[ "$TRAVIS_OS_NAME" == "linux" ]] && [[ "$CC" == "clang" ]]; then PACKAGES="$PACKAGES llvm-$VERSION-dev"; curl -sSL "http://apt.llvm.org/llvm-snapshot.gpg.key" | sudo -E apt-key add -; echo "deb http://apt.llvm.org/trusty/ llvm-toolchain-trusty-$VERSION main" | sudo tee -a /etc/apt/sources.list > /dev/null; - sudo -E apt-get -yq update >> ~/apt-get-update.log 2>&1; fi - if [[ "$TRAVIS_OS_NAME" == "linux" ]] && [[ "$CC" == "gcc" ]]; then sudo -E apt-add-repository -y "ppa:ubuntu-toolchain-r/test"; - sudo -E apt-get -yq update >> ~/apt-get-update.log 2>&1; fi - # Download dependencies + # Update list of packages and download dependencies - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then - CC=$CC-$VERSION; - CXX=$CXX-$VERSION; - sudo -E apt-get -yq --no-install-suggests --no-install-recommends install $CXX $PACKAGES cmake cmake-curses-gui bison libncurses5-dev libaio-dev libssl-dev libevent-dev || travis_terminate 1; + CC=$CC-$VERSION; + CXX=$CXX-$VERSION; + sudo -E apt-get -yq update >> ~/apt-get-update.log 2>&1; + sudo -E apt-get -yq --no-install-suggests --no-install-recommends install $CXX $PACKAGES cmake cmake-curses-gui bison libncurses5-dev libaio-dev libssl-dev libevent-dev || travis_terminate 1; + sudo ln -s $(which ccache) /usr/lib/ccache/$CC; + sudo ln -s $(which ccache) /usr/lib/ccache/$CXX || echo; + else + brew update; + brew install ccache; + brew link ccache; + export PATH="/usr/local/opt/ccache/libexec:$PATH"; fi + + # Test Debug or RelWithDebInfo compilation - mkdir bin; cd bin - $CC -v - $CXX -v - - # Test Debug or RelWithDebInfo compilation + - ccache --version - cmake .. -DCMAKE_BUILD_TYPE=$BUILD -DMYSQL_MAINTAINER_MODE=$MAINTAINER_MODE @@ -125,4 +142,5 @@ script: -DENABLE_DOWNLOADS=1 $CMAKE_OPT - make -j2 + - ccache --show-stats From d8d752599f912f2e85826d384d0b9534111344e2 Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Wed, 14 Feb 2018 10:01:04 +0100 Subject: [PATCH 0546/1221] PS-3823: Add ccache support for Travis CI config file (5.7) --- .travis.yml | 44 +++++++++++++++++++++++++++++++------------- 1 file changed, 31 insertions(+), 13 deletions(-) diff --git a/.travis.yml b/.travis.yml index 0cc7324de43e..c814ce593d74 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,8 +3,18 @@ dist: trusty sudo: required language: cpp +cache: + ccache: true + directories: + - $HOME/.ccache + - /usr/local/Cellar # cache homebrew packages for macOS + env: global: + - CCACHE_DIR=$HOME/.ccache + - CCACHE_COMPRESS=1 + - CCACHE_MAXSIZE=500M + - CCACHE_CPP2=1 - MAINTAINER_MODE=ON - WITHOUT_TOKUDB=ON - WITHOUT_ROCKSDB=ON @@ -80,7 +90,7 @@ script: - JOB_NUMBER=$(echo $TRAVIS_JOB_NUMBER | sed -e 's:[0-9][0-9]*\.\(.*\):\1:') - echo PACKAGES=$PACKAGES MAINTAINER_MODE=$MAINTAINER_MODE WITHOUT_TOKUDB=$WITHOUT_TOKUDB JOB_NUMBER=$JOB_NUMBER TRAVIS_REPO_SLUG=$TRAVIS_REPO_SLUG TRAVIS_BRANCH=$TRAVIS_BRANCH TRAVIS_EVENT_TYPE=$TRAVIS_EVENT_TYPE TRAVIS_PULL_REQUEST=$TRAVIS_PULL_REQUEST - # Perform all Travis jobs or only jobs that are included on ENV_VAR_JOB_NUMBERS list if it's defined + # Perform all Travis jobs or only jobs that are included in ENV_VAR_JOB_NUMBERS list if it's defined - JOB_NUMBERS="1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24"; - if [[ "$ENV_VAR_JOB_NUMBERS" != "" ]]; then JOB_NUMBERS=$ENV_VAR_JOB_NUMBERS; @@ -91,44 +101,52 @@ script: travis_terminate 0; fi - # Update required LLVM and Ubuntu Toolchain repositories + # Configure required LLVM and Ubuntu Toolchain repositories - if [[ "$TRAVIS_OS_NAME" == "linux" ]] && [[ "$CC" == "clang" ]]; then PACKAGES="$PACKAGES llvm-$VERSION-dev"; curl -sSL "http://apt.llvm.org/llvm-snapshot.gpg.key" | sudo -E apt-key add -; echo "deb http://apt.llvm.org/trusty/ llvm-toolchain-trusty-$VERSION main" | sudo tee -a /etc/apt/sources.list > /dev/null; - sudo -E apt-get -yq update >> ~/apt-get-update.log 2>&1; fi - if [[ "$TRAVIS_OS_NAME" == "linux" ]] && [[ "$CC" == "gcc" ]]; then sudo -E apt-add-repository -y "ppa:ubuntu-toolchain-r/test"; - sudo -E apt-get -yq update >> ~/apt-get-update.log 2>&1; fi - # Download dependencies + # Update list of packages and download dependencies - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then - CC=$CC-$VERSION; - CXX=$CXX-$VERSION; - sudo -E apt-get -yq --no-install-suggests --no-install-recommends install $CXX $PACKAGES cmake cmake-curses-gui bison libncurses5-dev libaio-dev libssl-dev libevent-dev libmecab-dev || travis_terminate 1; + CC=$CC-$VERSION; + CXX=$CXX-$VERSION; + sudo -E apt-get -yq update >> ~/apt-get-update.log 2>&1; + sudo -E apt-get -yq --no-install-suggests --no-install-recommends install $CXX $PACKAGES cmake cmake-curses-gui bison libncurses5-dev libaio-dev libssl-dev libevent-dev libmecab-dev || travis_terminate 1; + sudo ln -s $(which ccache) /usr/lib/ccache/$CC; + sudo ln -s $(which ccache) /usr/lib/ccache/$CXX || echo; + else + brew update; + brew install ccache; + brew link ccache; + export PATH="/usr/local/opt/ccache/libexec:$PATH"; fi + + # Test Debug or RelWithDebInfo compilation - mkdir bin; cd bin - $CC -v - $CXX -v - - # Test Debug or RelWithDebInfo compilation + - ccache --version - cmake .. -DCMAKE_BUILD_TYPE=$BUILD -DMYSQL_MAINTAINER_MODE=$MAINTAINER_MODE -DBUILD_CONFIG=mysql_release -DFEATURE_SET=community -DENABLE_DTRACE=OFF + -DENABLE_DOWNLOADS=1 + -DDOWNLOAD_BOOST=1 + -DWITH_BOOST=../deps -DWITH_SSL=$LIBTYPE -DWITH_ZLIB=$LIBTYPE -DWITH_LIBEVENT=$LIBTYPE -DWITH_MECAB=$WITH_MECAB -DWITHOUT_TOKUDB=$WITHOUT_TOKUDB -DWITHOUT_ROCKSDB=$WITHOUT_ROCKSDB - -DENABLE_DOWNLOADS=1 - -DDOWNLOAD_BOOST=1 - -DWITH_BOOST=../deps $CMAKE_OPT - make -j2 + - ccache --show-stats From 9ddd0a2fac8e68bc2428561c7c8b777114e11d42 Mon Sep 17 00:00:00 2001 From: Dima Date: Wed, 14 Feb 2018 21:42:05 +0300 Subject: [PATCH 0547/1221] Document removal of the flush_memtable_on_analyze variable --- doc/source/myrocks/variables.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/source/myrocks/variables.rst b/doc/source/myrocks/variables.rst index 5ebee48d5aba..67e639ef08b9 100644 --- a/doc/source/myrocks/variables.rst +++ b/doc/source/myrocks/variables.rst @@ -1233,6 +1233,7 @@ Possible values: .. variable:: rocksdb_flush_memtable_on_analyze :version 5.7.19-17: Implemented + :version 5.7.21-20: Variable removed :cli: ``--rocksdb-flush-memtable-on-analyze`` :dyn: Yes :scope: Global, Session From 3e557956313b6bd4036ea542c0a0916979abb713 Mon Sep 17 00:00:00 2001 From: Dima Date: Wed, 14 Feb 2018 17:51:51 +0300 Subject: [PATCH 0548/1221] add info about renaming and deprecation of the rocksdb_concurrent_prepare variable --- doc/source/myrocks/variables.rst | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/doc/source/myrocks/variables.rst b/doc/source/myrocks/variables.rst index 5ebee48d5aba..2297b6d52844 100644 --- a/doc/source/myrocks/variables.rst +++ b/doc/source/myrocks/variables.rst @@ -460,6 +460,10 @@ Also, all variables can exist in one or both of the following scopes: - Yes - Yes - Global, Session + * - :variable:`rocksdb_two_write_queues` + - Yes + - No + - Global * - :variable:`rocksdb_trace_sst_api` - Yes - Yes @@ -915,7 +919,9 @@ Allowed range is up to ``2000000`` (two million). :default: ``ON`` When enabled this variable allows/encourages threads that are using -two-phase commit to ``prepare`` in parallel. +two-phase commit to ``prepare`` in parallel. Variable has been +deprecated in the |Percona Server| 5.7.21-20, as it has been +renamed in upstream to :variable:`rocksdb_two_write_queues`. .. variable:: rocksdb_create_checkpoint @@ -2074,6 +2080,18 @@ Specifies whether to generate trace output in the log for each call to ``SstFileWriter``. Disabled by default. +.. variable:: rocksdb_two_write_queues + + :version 5.7.21-20: Implemented + :cli: ``--rocksdb-two_write_queues`` + :dyn: No + :scope: Global + :vartype: Boolean + :default: ``ON`` + +When enabled this variable allows/encourages threads that are using +two-phase commit to ``prepare`` in parallel. + .. variable:: rocksdb_unsafe_for_binlog :version 5.7.19-17: Implemented From c8e44760403e98329b1ead9fc28f5c903e5cfbd6 Mon Sep 17 00:00:00 2001 From: Dima Date: Wed, 14 Feb 2018 23:39:53 +0300 Subject: [PATCH 0549/1221] DOC-697 - documenting row_lock_deadlocks and row_lock_wait_timeouts status counters --- doc/source/myrocks/status_variables.rst | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/doc/source/myrocks/status_variables.rst b/doc/source/myrocks/status_variables.rst index 5d821bb9a226..916d7b19be99 100644 --- a/doc/source/myrocks/status_variables.rst +++ b/doc/source/myrocks/status_variables.rst @@ -192,6 +192,10 @@ The following global status variables are available: - Numeric * - :variable:`rocksdb_rate_limit_delay_millis` - Numeric + * - :variable:`rocksdb_row_lock_deadlocks` + - Numeric + * - :variable:`rocksdb_row_lock_wait_timeouts` + - Numeric * - :variable:`rocksdb_snapshot_conflict_errors` - Numeric * - :variable:`rocksdb_stall_l0_file_count_limit_slowdowns` @@ -592,6 +596,14 @@ database. This variable isn't used anymore and will be removed in future releases. +.. variable:: rocksdb_row_lock_deadlocks + +This variable shows the total number of deadlocks that have been detected since the instance was started. + +.. variable:: rocksdb_row_lock_wait_timeouts + +This variable shows the total number of row lock wait timeouts that have been detected since the instance was started. + .. variable:: rocksdb_snapshot_conflict_errors This variable shows the number of snapshot conflict errors occurring during From c97ccbed9c388a2742e521b2853e87484ac5fbd3 Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Thu, 15 Feb 2018 13:46:53 +0100 Subject: [PATCH 0550/1221] PS-3835: uninitialized variable reported by gcc 4.8 --- storage/innobase/fsp/fsp0fsp.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage/innobase/fsp/fsp0fsp.cc b/storage/innobase/fsp/fsp0fsp.cc index 03dfb2e73295..23c1da4bc76a 100644 --- a/storage/innobase/fsp/fsp0fsp.cc +++ b/storage/innobase/fsp/fsp0fsp.cc @@ -3966,7 +3966,7 @@ fseg_free_step_not_header( const fil_space_t* space = mtr_x_lock_space(space_id, mtr); const page_size_t page_size(space->flags); - buf_block_t* iblock; + buf_block_t* iblock = NULL; inode = fseg_inode_get(header, space_id, page_size, mtr, &iblock); SRV_CORRUPT_TABLE_CHECK(inode, From 72f27f4cdd33ca864a7c11a6b0662f56cac5d5b3 Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Thu, 15 Feb 2018 09:01:11 -0700 Subject: [PATCH 0551/1221] MYR-237 : rocksdb.allow_no_primary_key_with_sk unstable - Lengthened shutdown_server default timeout to 180 seconds --- client/mysqltest.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/mysqltest.cc b/client/mysqltest.cc index e895e68b42c2..7924694efc83 100644 --- a/client/mysqltest.cc +++ b/client/mysqltest.cc @@ -5223,7 +5223,7 @@ static void abort_process(int pid, const char *path) void do_shutdown_server(struct st_command *command) { - long timeout=90; + long timeout=180; int pid, error= 0; std::string ds_file_name; MYSQL* mysql = &cur_con->mysql; From 46b222205c663d29ea4307901b42e82ce8688fe9 Mon Sep 17 00:00:00 2001 From: Manuel Ung Date: Thu, 15 Feb 2018 08:38:12 -0800 Subject: [PATCH 0552/1221] Fix crashes in autoincrement code paths Upstream commit ID : fb-mysql-5.6.35/997a979bf5e2f75ab88781d9d3fd22dddc1fc21f Cherry picked directly. Summary: There are two issues related to autoincrement that can lead to crashes: 1. The max value for double/float type for autoincrement was not implemented in MyRocks, and can lead to assertions. The fix is to add them in. 2. If we try to set auto_increment via alter table on a table without an auto_increment column defined, we segfault because there is no index from which to read the last value. The fix is to perform a check to see if autoincrement exists before reading from index (similar to code ha_rocksdb::open). Fixes https://github.com/facebook/mysql-5.6/issues/792 Closes https://github.com/facebook/mysql-5.6/pull/794 Differential Revision: D6995096 Pulled By: lth fbshipit-source-id: 1130ce1 --- mysql-test/suite/rocksdb/r/autoinc_vars.result | 10 ++++++++++ mysql-test/suite/rocksdb/t/autoinc_vars.test | 13 +++++++++++++ storage/rocksdb/ha_rocksdb.cc | 10 +++++++++- 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/mysql-test/suite/rocksdb/r/autoinc_vars.result b/mysql-test/suite/rocksdb/r/autoinc_vars.result index 179026a06854..90db03356c7b 100644 --- a/mysql-test/suite/rocksdb/r/autoinc_vars.result +++ b/mysql-test/suite/rocksdb/r/autoinc_vars.result @@ -149,3 +149,13 @@ SELECT * FROM t1; a b 18446744073709551613 a DROP TABLE t1; +#---------------------------------- +# Issue #792 Crash in autoincrement +#---------------------------------- +CREATE TABLE t1(C1 DOUBLE AUTO_INCREMENT KEY,C2 CHAR) ENGINE=ROCKSDB; +INSERT INTO t1 VALUES(2177,0); +DROP TABLE t1; +CREATE TABLE t0(c0 BLOB) ENGINE=ROCKSDB; +INSERT INTO t0 VALUES(0); +ALTER TABLE t0 AUTO_INCREMENT=0; +DROP TABLE t0; diff --git a/mysql-test/suite/rocksdb/t/autoinc_vars.test b/mysql-test/suite/rocksdb/t/autoinc_vars.test index dcdc8bb0b166..8a030ff1dbea 100644 --- a/mysql-test/suite/rocksdb/t/autoinc_vars.test +++ b/mysql-test/suite/rocksdb/t/autoinc_vars.test @@ -106,3 +106,16 @@ SHOW CREATE TABLE t1; INSERT INTO t1 VALUES (NULL, 'c'); SELECT * FROM t1; DROP TABLE t1; + +--echo #---------------------------------- +--echo # Issue #792 Crash in autoincrement +--echo #---------------------------------- + +CREATE TABLE t1(C1 DOUBLE AUTO_INCREMENT KEY,C2 CHAR) ENGINE=ROCKSDB; +INSERT INTO t1 VALUES(2177,0); +DROP TABLE t1; + +CREATE TABLE t0(c0 BLOB) ENGINE=ROCKSDB; +INSERT INTO t0 VALUES(0); +ALTER TABLE t0 AUTO_INCREMENT=0; +DROP TABLE t0; diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index c35820fb486e..378bd64b222c 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -4385,6 +4385,12 @@ static ulonglong rdb_get_int_col_max_value(const Field *field) { case HA_KEYTYPE_LONGLONG: max_value = 0x7FFFFFFFFFFFFFFFULL; break; + case HA_KEYTYPE_FLOAT: + max_value = 0x1000000ULL; + break; + case HA_KEYTYPE_DOUBLE: + max_value = 0x20000000000000ULL; + break; default: abort_with_stack_traces(); } @@ -10791,7 +10797,9 @@ bool ha_rocksdb::prepare_inplace_alter_table( if (!new_tdef) { new_tdef = m_tbl_def; } - max_auto_incr = load_auto_incr_value_from_index(); + if (table->found_next_number_field) { + max_auto_incr = load_auto_incr_value_from_index(); + } } ha_alter_info->handler_ctx = new Rdb_inplace_alter_ctx( From e64560cc718dbe64c310c058ebbbd55a141e48b6 Mon Sep 17 00:00:00 2001 From: Evgeniy Patlan Date: Fri, 16 Feb 2018 09:56:03 +0200 Subject: [PATCH 0553/1221] Fix centos patch --- build-ps/rpm/mysql-5.7-sharedlib-rename.patch | 44 +++++-------------- 1 file changed, 12 insertions(+), 32 deletions(-) diff --git a/build-ps/rpm/mysql-5.7-sharedlib-rename.patch b/build-ps/rpm/mysql-5.7-sharedlib-rename.patch index d0b2770f7821..5d7fc01574c6 100644 --- a/build-ps/rpm/mysql-5.7-sharedlib-rename.patch +++ b/build-ps/rpm/mysql-5.7-sharedlib-rename.patch @@ -13,7 +13,7 @@ diff -rup old/client/base/CMakeLists.txt new/client/base/CMakeLists.txt diff -rup old/client/CMakeLists.txt new/client/CMakeLists.txt --- old/client/CMakeLists.txt 2016-03-09 09:25:21.000000000 +0100 +++ new/client/CMakeLists.txt 2016-03-09 11:41:15.159325622 +0100 -@@ -42,7 +42,7 @@ INCLUDE(${MYSQL_CMAKE_SCRIPT_DIR}/compil +@@ -43,7 +43,7 @@ ADD_DEFINITIONS(${SSL_DEFINES}) MYSQL_ADD_EXECUTABLE(mysql completion_hash.cc mysql.cc readline.cc ../sql-common/sql_string.cc) @@ -22,7 +22,7 @@ diff -rup old/client/CMakeLists.txt new/client/CMakeLists.txt IF(UNIX) TARGET_LINK_LIBRARIES(mysql ${MY_READLINE_LIBRARY}) ENDIF(UNIX) -@@ -54,57 +54,57 @@ +@@ -55,58 +55,58 @@ ADD_COMPILE_FLAGS( upgrade/program.cc COMPILE_FLAGS -I${BOOST_PATCHES_DIR} -isystem ${BOOST_INCLUDE_DIR} ) @@ -35,6 +35,7 @@ diff -rup old/client/CMakeLists.txt new/client/CMakeLists.txt SET_SOURCE_FILES_PROPERTIES(mysqltest.cc PROPERTIES COMPILE_FLAGS "-DTHREADS") -TARGET_LINK_LIBRARIES(mysqltest perconaserverclient regex) +TARGET_LINK_LIBRARIES(mysqltest mysqlclient regex) + ADD_DEPENDENCIES(mysqltest GenError) ADD_CONVENIENCE_LIBRARY(mysqlcheck_core check/mysqlcheck_core.cc) -TARGET_LINK_LIBRARIES(mysqlcheck_core perconaserverclient) @@ -105,17 +106,8 @@ diff -rup old/cmake/libutils.cmake new/cmake/libutils.cmake +# libraries (we need it for mysqlclient) and to create shared library out of +# convenience libraries(again, for mysqlclient) - # Following macros are exported - # - ADD_CONVENIENCE_LIBRARY(target source1...sourceN) -@@ -122,7 +122,7 @@ ENDMACRO() - - # Merge static libraries into a big static lib. The resulting library - # should not not have dependencies on other static libraries. --# We use it in MySQL to merge mysys,dbug,vio etc into perconaserverclient -+# We use it in MySQL to merge mysys,dbug,vio etc into mysqlclient - - MACRO(MERGE_STATIC_LIBS TARGET OUTPUT_NAME LIBS_TO_MERGE) - # To produce a library we need at least one source file. + # Important global flags + # - WITH_PIC : If set, it is assumed that everything is compiled as position diff -rup old/include/mysql.h new/include/mysql.h --- old/include/mysql.h 2016-03-09 09:25:21.000000000 +0100 +++ new/include/mysql.h 2016-03-09 11:41:15.159325622 +0100 @@ -146,16 +138,13 @@ diff -rup old/include/mysql.h new/include/mysql.h diff -rup old/libmysql/CMakeLists.txt new/libmysql/CMakeLists.txt --- old/libmysql/CMakeLists.txt 2016-03-09 09:25:21.000000000 +0100 +++ new/libmysql/CMakeLists.txt 2016-03-09 11:41:15.159325622 +0100 -@@ -234,12 +234,12 @@ - MESSAGE(STATUS "Creating LDAP authentication SASL client library.") +@@ -235,11 +235,11 @@ ADD_SUBDIRECTORY(authentication_ldap) --# Merge several convenience libraries into one big perconaserverclient --MERGE_LIBRARIES(perconaserverclient STATIC ${LIBS} COMPONENT Development) -- -+# Merge several convenience libraries into one big mysqlclient -+MERGE_LIBRARIES(mysqlclient STATIC ${LIBS} COMPONENT Development) -+ + # Merge several convenience libraries into one big perconaserverclient +-MERGE_CONVENIENCE_LIBRARIES(perconaserverclient ${LIBS} COMPONENT Development) ++MERGE_CONVENIENCE_LIBRARIES(mysqlclient ${LIBS} COMPONENT Development) + # Visual Studio users need debug static library for debug projects IF(MSVC) - INSTALL_DEBUG_TARGET(perconaserverclient DESTINATION ${INSTALL_LIBDIR}/debug) @@ -163,16 +152,7 @@ diff -rup old/libmysql/CMakeLists.txt new/libmysql/CMakeLists.txt INSTALL_DEBUG_TARGET(clientlib DESTINATION ${INSTALL_LIBDIR}/debug) ENDIF() -@@ -253,7 +253,7 @@ IF(CMAKE_SYSTEM_NAME MATCHES "SunOS" AND - ENDIF() - - IF(NOT DISABLE_SHARED) -- # Merge several convenience libraries into one big perconaserverclient -+ # Merge several convenience libraries into one big mysqlclient - # and link them together into shared library. - MERGE_LIBRARIES(libmysql SHARED ${LIBS} - EXPORTS ${CLIENT_API_FUNCTIONS} ${CLIENT_API_FUNCTIONS_UNDOCUMENTED} -@@ -266,9 +266,9 @@ IF(NOT DISABLE_SHARED) +@@ -280,9 +280,9 @@ SET(OS_SHARED_LIB_VERSION "${SHARED_LIB_MAJOR_VERSION}.${SHARED_LIB_MINOR_VERSION}.${SHARED_LIB_PATCH_VERSION}") ENDIF() @@ -184,7 +164,7 @@ diff -rup old/libmysql/CMakeLists.txt new/libmysql/CMakeLists.txt VERSION "${OS_SHARED_LIB_VERSION}" SOVERSION "${SHARED_LIB_MAJOR_VERSION}") CONFIGURE_FILE(libmysql.ver.in ${CMAKE_CURRENT_BINARY_DIR}/libmysql.ver) -@@ -297,8 +297,8 @@ IF(NOT DISABLE_SHARED) +@@ -311,8 +311,8 @@ PROPERTIES LINK_FLAGS "${libmysql_link_flags}") ENDIF() # clean direct output needs to be set several targets have the same name From 0d4ef6647e7ac6821d74546927d2c7d64ee95120 Mon Sep 17 00:00:00 2001 From: Robert Golebiowski Date: Thu, 14 Sep 2017 17:28:15 +0200 Subject: [PATCH 0554/1221] PS-3779: System key rotation support in keyring framework Keyring framework should be capable of rotating system keys. This feature is needed by different encryption components (binlog encryption, rotation-enabled tablespaces). Please note, that by system key we mean all system keys that starts with a prefix percona_ , for instance: percona_binlog). This feature does not extend keyring framework API, but adds new functionalities to existing API functions: - calling my_key_generate or my_key_store with system key id will create rotation-enabled system key in keyring. (For instance calling my_key_generate("percona_binlog", "AES", NULL, 16) will add key percona_binlog:0 to keyring. The ':0' part of the system key id is the version assigned to the key). - calling my_key_generate or my_key_store with existing system key id will rotate the key to a new version. (for instance percona_binlog:0 exist in keyring, calling my_key_generate("percona_binlog", "AES", NULL, 16) will add key percona_binlog:1 to the keyring) - calling my_key_fetch with system key id will fetch the latest version of the system key. For instance if there are two keys in the keyring percona_binlog:0 and percona_binlog:1 - my_key_fetch("percona_binlog" (...)) will fetch percona_binlog:1 - calling my_key_remove on system key will result in error - as it is not possible to remove system key from keyring (at least not from keyring API) Implementation of this feature needs to support binlog key rotation. This, apart from extending the keyring framework also includes providing: - rotate_system_key function. With this function super users will be capable of rotating binlog key, by calling rotate_system_key("percona_binlog"). As mentioned, users will need to have super privilege to be able to rotate the key. - binlog encryption should be extended - so it would be capable of working with different versions of percona_binlog system key Implementation of this feature also includes a convenience function parse_system_key that helps to separate key id and key version from system key data. --- include/system_key.h | 40 ++ libbinlogevents/src/binlog_event.cpp | 5 + ..._rotate_system_key_check_privileges.result | 4 + .../binlog/r/percona_binlog_rotate_key.result | 12 + .../binlog/t/percona_binlog_rotate_key.test | 35 + .../r/binlog_rotate_key.result | 44 ++ .../binlog_rotate_key_check_privileges.result | 7 + .../r/percona_system_key_rotation.result | 15 + .../t/binlog_rotate_key-master.opt | 1 + .../t/binlog_rotate_key.test | 99 +++ .../binlog_encryption/t/mysqlbinlog.test | 4 +- .../t/percona_system_key_rotation.test | 52 ++ ...rypted_master_switch_to_unencrypted.result | 3 + .../r/rpl_binlog_key_rotation.result | 38 ++ ...ncrypted_master_switch_to_unencrypted.test | 3 + .../t/rpl_binlog_key_rotation.test | 34 + ...na_rotate_system_key_check_privileges.test | 15 + mysys/CMakeLists.txt | 2 +- mysys/system_key.c | 73 ++ plugin/keyring/CMakeLists.txt | 2 + .../keyring/common/i_system_keys_container.h | 38 ++ plugin/keyring/common/keyring_memory.h | 26 + plugin/keyring/common/keys_container.cc | 22 +- plugin/keyring/common/keys_container.h | 2 + plugin/keyring/common/secure_string.h | 30 + plugin/keyring/common/system_key_adapter.cc | 94 +++ plugin/keyring/common/system_key_adapter.h | 163 +++++ .../keyring/common/system_keys_container.cc | 134 ++++ plugin/keyring/common/system_keys_container.h | 91 +++ plugin/keyring_vault/CMakeLists.txt | 2 + plugin/keyring_vault/i_vault_curl.h | 18 +- plugin/keyring_vault/i_vault_io.h | 16 + plugin/keyring_vault/i_vault_parser.h | 19 +- plugin/keyring_vault/vault_base64.cc | 16 + plugin/keyring_vault/vault_base64.h | 18 +- plugin/keyring_vault/vault_credentials.cc | 16 + plugin/keyring_vault/vault_credentials.h | 19 +- plugin/keyring_vault/vault_curl.cc | 18 +- plugin/keyring_vault/vault_curl.h | 18 +- plugin/keyring_vault/vault_memory.h | 36 - plugin/keyring_vault/vault_parser.cc | 16 + plugin/keyring_vault/vault_parser.h | 18 +- plugin/keyring_vault/vault_secure_string.h | 13 - sql/CMakeLists.txt | 1 + sql/binlog.cc | 18 +- sql/binlog_crypt_data.cc | 106 ++- sql/binlog_crypt_data.h | 24 +- sql/item_create.cc | 20 + sql/item_keyring_func.cc | 74 +++ sql/item_keyring_func.h | 39 ++ sql/log_event.cc | 37 ++ sql/log_event.h | 9 +- unittest/gunit/keyring/CMakeLists.txt | 6 + unittest/gunit/keyring/keyring-api-t.cc | 261 +++++++- unittest/gunit/keyring/keys_container-t.cc | 425 +++++++++++- .../gunit/keyring/system_keys_container-t.cc | 623 ++++++++++++++++++ unittest/gunit/keyring_vault/CMakeLists.txt | 2 + .../keyring_vault/vault_keyring-api-t.cc | 115 ++++ .../keyring_vault/vault_keys_container-t.cc | 296 +++++++++ 59 files changed, 3252 insertions(+), 135 deletions(-) create mode 100644 include/system_key.h create mode 100644 mysql-test/r/percona_rotate_system_key_check_privileges.result create mode 100644 mysql-test/suite/binlog/r/percona_binlog_rotate_key.result create mode 100644 mysql-test/suite/binlog/t/percona_binlog_rotate_key.test create mode 100644 mysql-test/suite/binlog_encryption/r/binlog_rotate_key.result create mode 100644 mysql-test/suite/binlog_encryption/r/binlog_rotate_key_check_privileges.result create mode 100644 mysql-test/suite/binlog_encryption/r/percona_system_key_rotation.result create mode 100644 mysql-test/suite/binlog_encryption/t/binlog_rotate_key-master.opt create mode 100644 mysql-test/suite/binlog_encryption/t/binlog_rotate_key.test create mode 100644 mysql-test/suite/binlog_encryption/t/percona_system_key_rotation.test create mode 100644 mysql-test/suite/rpl_encryption/r/rpl_binlog_key_rotation.result create mode 100644 mysql-test/suite/rpl_encryption/t/rpl_binlog_key_rotation.test create mode 100644 mysql-test/t/percona_rotate_system_key_check_privileges.test create mode 100644 mysys/system_key.c create mode 100644 plugin/keyring/common/i_system_keys_container.h create mode 100644 plugin/keyring/common/secure_string.h create mode 100644 plugin/keyring/common/system_key_adapter.cc create mode 100644 plugin/keyring/common/system_key_adapter.h create mode 100644 plugin/keyring/common/system_keys_container.cc create mode 100644 plugin/keyring/common/system_keys_container.h delete mode 100644 plugin/keyring_vault/vault_memory.h delete mode 100644 plugin/keyring_vault/vault_secure_string.h create mode 100644 sql/item_keyring_func.cc create mode 100644 sql/item_keyring_func.h create mode 100644 unittest/gunit/keyring/system_keys_container-t.cc diff --git a/include/system_key.h b/include/system_key.h new file mode 100644 index 000000000000..d3e4ac02e73f --- /dev/null +++ b/include/system_key.h @@ -0,0 +1,40 @@ +/* Copyright (c) 2018 Percona LLC and/or its affiliates. All rights reserved. + + 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 */ + +#ifndef SYSTEM_KEY_INCLUDED +#define SYSTEM_KEY_INCLUDED + +#include "my_global.h" + +C_MODE_START +#define PERCONA_BINLOG_KEY_NAME "percona_binlog" +extern const size_t valid_percona_system_keys_size; +extern const char* valid_percona_system_keys[]; + +/** + A convenience function that extracts key's data and key's version from system key. + @param key[in] system key to parse + @param key_length[in] system key's length + @param key_version[out] on success - extracted key's version + @param key_data[out] on success - extracted key's data - The caller of this function must free this memory + @param key_data_length[out] on success - extracted key's data length + + @return key_data on success, NULL on failure +*/ +extern uchar* parse_system_key(const uchar *key, const size_t key_length, uint *key_version, + uchar **key_data, size_t *key_data_length); +C_MODE_END +#endif // SYSTEM_KEY_INCLUDED diff --git a/libbinlogevents/src/binlog_event.cpp b/libbinlogevents/src/binlog_event.cpp index c585653ff27d..36b62b1fd8e8 100644 --- a/libbinlogevents/src/binlog_event.cpp +++ b/libbinlogevents/src/binlog_event.cpp @@ -19,6 +19,7 @@ #include #include +#include "my_dbug.h" const unsigned char checksum_version_split[3]= {5, 6, 1}; const unsigned long checksum_version_product= @@ -195,6 +196,10 @@ Log_event_header(const char* buf, uint16_t binlog_version) } /* otherwise, go on with reading the header from buf (nothing now) */ } //end switch (binlog_version) + // The below type_code assert is correct and needed in 99% of time. In normal testing we do not + // anticipate type_code to be of unknown value. This is why we only skip this assert when + // debug variable expect_Unknown_event is set. + DBUG_EXECUTE_IF("expect_Unknown_event", return;); BAPI_ASSERT(type_code < ENUM_END_EVENT || flags & LOG_EVENT_IGNORABLE_F); } diff --git a/mysql-test/r/percona_rotate_system_key_check_privileges.result b/mysql-test/r/percona_rotate_system_key_check_privileges.result new file mode 100644 index 000000000000..07c61feaf7d2 --- /dev/null +++ b/mysql-test/r/percona_rotate_system_key_check_privileges.result @@ -0,0 +1,4 @@ +CREATE USER 'regular_user'@'localhost' IDENTIFIED BY 'pass'; +SELECT rotate_system_key("percona_binlog"); +ERROR 42000: Access denied; you need (at least one of) the SUPER privilege(s) for this operation +DROP USER regular_user@localhost; diff --git a/mysql-test/suite/binlog/r/percona_binlog_rotate_key.result b/mysql-test/suite/binlog/r/percona_binlog_rotate_key.result new file mode 100644 index 000000000000..df180ec224f5 --- /dev/null +++ b/mysql-test/suite/binlog/r/percona_binlog_rotate_key.result @@ -0,0 +1,12 @@ +# This test is to check that using rotate_system_key when binlog is enabled and format of the binlog is statement +# generates warning that unsafe statement was written to binary log. +# restart: +call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT"); +CREATE TABLE t0 (a INT); +include/assert.inc [Binlog should be ON] +include/assert.inc [percona_binlog key got rotated] +INSERT INTO t0 VALUES (rotate_system_key("percona_binlog")); +Warnings: +Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a system function that may return a different value on the slave. +# restart +DROP TABLE t0; diff --git a/mysql-test/suite/binlog/t/percona_binlog_rotate_key.test b/mysql-test/suite/binlog/t/percona_binlog_rotate_key.test new file mode 100644 index 000000000000..1079b65e9690 --- /dev/null +++ b/mysql-test/suite/binlog/t/percona_binlog_rotate_key.test @@ -0,0 +1,35 @@ +--source include/have_log_bin.inc +--source include/have_binlog_format_statement.inc + +--echo # This test is to check that using rotate_system_key when binlog is enabled and format of the binlog is statement +--echo # generates warning that unsafe statement was written to binary log. + +--let $restart_hide_args=1 +--let $restart_parameters=restart:--log-error=$MYSQLTEST_VARDIR/tmp/percona_binlog_rotate_key.err --early-plugin-load="keyring_file=$KEYRING_PLUGIN" --loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring $KEYRING_PLUGIN_OPT +--source include/restart_mysqld.inc + +call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT"); + +CREATE TABLE t0 (a INT); + +--let $assert_text= Binlog should be ON +--let $assert_cond= "[SELECT @@GLOBAL.log_bin = 1]" = 1 +--source include/assert.inc + +--let $assert_text= percona_binlog key got rotated +--let $assert_cond= "[SELECT rotate_system_key\\(\\"percona_binlog\\"\\) = 1]" = 1 +--source include/assert.inc + +INSERT INTO t0 VALUES (rotate_system_key("percona_binlog")); + +# Find a warning in server's log +--let SEARCH_FILE= $MYSQLTEST_VARDIR/tmp/percona_binlog_rotate_key.err +--let SEARCH_PATTERN= Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a system function that may return a different value on the slave. +--source include/search_pattern_in_file.inc + +--let $restart_parameters= +--source include/restart_mysqld.inc + +# cleanup +--remove_file $MYSQLTEST_VARDIR/tmp/percona_binlog_rotate_key.err +DROP TABLE t0; diff --git a/mysql-test/suite/binlog_encryption/r/binlog_rotate_key.result b/mysql-test/suite/binlog_encryption/r/binlog_rotate_key.result new file mode 100644 index 000000000000..04bbfc081940 --- /dev/null +++ b/mysql-test/suite/binlog_encryption/r/binlog_rotate_key.result @@ -0,0 +1,44 @@ +# Currently binlog is disabled. After initializing check_consecutive_binlog_key_versions we will restart the +# server with binlog enabled. check_consecutive_binlog_key_versions will make sure that a new version of +# percona_binlog key is used after each rotate_system_key followed by FLUSH LOGS calls. +# restart:--log-bin=master-bin --debug=d,check_consecutive_binlog_key_versions; +RESET MASTER; +# master-bin.000001 +SELECT 1; +1 +1 +SELECT 2; +2 +2 +include/assert.inc [Successful rotation of percona_binlog] +FLUSH LOGS; +# master-bin.000002 +SELECT 3; +3 +3 +SELECT 4; +4 +4 +include/assert.inc [Successful rotation of percona_binlog] +FLUSH LOGS; +# master-bin.000003 +SELECT 5; +5 +5 +SELECT 6; +6 +6 +include/assert.inc [Successful rotation of percona_binlog] +FLUSH LOGS; +# master-bin.000004 +SET GLOBAL debug="-d,check_consecutive_binlog_key_versions"; +# restart:--log-bin=master-bin --encrypt-binlog=0 +#master-bin.000005 +SELECT 7; +7 +7 +SELECT 8; +8 +8 +FLUSH LOGS; +#master-bin.000006 diff --git a/mysql-test/suite/binlog_encryption/r/binlog_rotate_key_check_privileges.result b/mysql-test/suite/binlog_encryption/r/binlog_rotate_key_check_privileges.result new file mode 100644 index 000000000000..17633068137f --- /dev/null +++ b/mysql-test/suite/binlog_encryption/r/binlog_rotate_key_check_privileges.result @@ -0,0 +1,7 @@ +CREATE USER 'regular_user'@'localhost' IDENTIFIED BY 'pass'; +SELECT rotate_system_key("percona_binlog"); +ERROR 42000: Access denied; you need (at least one of) the SUPER privilege(s) for this operation +SELECT rotate_system_key("percona_binlog"); +rotate_system_key("percona_binlog") +1 +DROP USER regular_user@localhost; diff --git a/mysql-test/suite/binlog_encryption/r/percona_system_key_rotation.result b/mysql-test/suite/binlog_encryption/r/percona_system_key_rotation.result new file mode 100644 index 000000000000..700c38c179b4 --- /dev/null +++ b/mysql-test/suite/binlog_encryption/r/percona_system_key_rotation.result @@ -0,0 +1,15 @@ +# Check that only percona_binlog key can be rotated with rotate_system_key. This part of the test needs updating +# each time a new system key is added. +include/assert.inc [It should not be possible to rotate key percona_binlog:] +include/assert.inc [It should not be possible to rotate key percona_key] +include/assert.inc [It should not be possible to rotate key percona_123] +include/assert.inc [It should not be possible to rotate key percona_bin] +include/assert.inc [It should not be possible to rotate key percona_b] +include/assert.inc [It should not be possible to rotate key percona_] +include/assert.inc [It should not be possible to rotate key percona] +include/assert.inc [It should not be possible to rotate key system_key] +include/assert.inc [It should not be possible to rotate key system_key] +include/assert.inc [It should not be possible to rotate key system_key] +UNINSTALL PLUGIN keyring_file; +include/assert.inc [It should not be possible to rotate key percona_binlog without keyring_file installed] +# restart: diff --git a/mysql-test/suite/binlog_encryption/t/binlog_rotate_key-master.opt b/mysql-test/suite/binlog_encryption/t/binlog_rotate_key-master.opt new file mode 100644 index 000000000000..4b97f4f041f8 --- /dev/null +++ b/mysql-test/suite/binlog_encryption/t/binlog_rotate_key-master.opt @@ -0,0 +1 @@ +--log-bin=0 diff --git a/mysql-test/suite/binlog_encryption/t/binlog_rotate_key.test b/mysql-test/suite/binlog_encryption/t/binlog_rotate_key.test new file mode 100644 index 000000000000..f365354abb49 --- /dev/null +++ b/mysql-test/suite/binlog_encryption/t/binlog_rotate_key.test @@ -0,0 +1,99 @@ +--source include/have_debug.inc +--source include/not_embedded.inc + +--echo # Currently binlog is disabled. After initializing check_consecutive_binlog_key_versions we will restart the +--echo # server with binlog enabled. check_consecutive_binlog_key_versions will make sure that a new version of +--echo # percona_binlog key is used after each rotate_system_key followed by FLUSH LOGS calls. + +--let $restart_parameters=restart:--log-bin=master-bin --debug=d,check_consecutive_binlog_key_versions; +--source include/restart_mysqld.inc + +RESET MASTER; +--echo # master-bin.000001 + +SELECT 1; +SELECT 2; + +--let $assert_text= Successful rotation of percona_binlog +--let $assert_cond= "[SELECT rotate_system_key\\(\\"percona_binlog\\"\\) = 1]" = 1 +--source include/assert.inc + +FLUSH LOGS; + +--echo # master-bin.000002 + +SELECT 3; +SELECT 4; + +--let $assert_text= Successful rotation of percona_binlog +--let $assert_cond= "[SELECT rotate_system_key\\(\\"percona_binlog\\"\\) = 1]" = 1 +--source include/assert.inc + +FLUSH LOGS; + +--echo # master-bin.000003 + +SELECT 5; +SELECT 6; + +--let $assert_text= Successful rotation of percona_binlog +--let $assert_cond= "[SELECT rotate_system_key\\(\\"percona_binlog\\"\\) = 1]" = 1 +--source include/assert.inc + +FLUSH LOGS; + +--echo # master-bin.000004 +SET GLOBAL debug="-d,check_consecutive_binlog_key_versions"; + +# First check that each binlog is encrypted by trying to decrypt it using mysqlbinlog +let datadir=`select @@datadir`; +let filename= master-bin.000002; +let local=$datadir/$filename; +--error 1 +exec $MYSQL_BINLOG $local --hexdump > /dev/null; +let filename= master-bin.000003; +let local=$datadir/$filename; +--error 1 +exec $MYSQL_BINLOG $local --hexdump > /dev/null; + +# Check that each generated binlog can be read by the server by using mysqlbinlog with --read-from-remote-server +# option +let filename= master-bin.000002; +let remote=--read-from-remote-server --protocol=tcp --host=127.0.0.1 --port=$MASTER_MYPORT -uroot $filename; +exec $MYSQL_BINLOG --hexdump $remote > /dev/null; + +let filename= master-bin.000003; +let remote=--read-from-remote-server --protocol=tcp --host=127.0.0.1 --port=$MASTER_MYPORT -uroot $filename; +exec $MYSQL_BINLOG --hexdump $remote > /dev/null; + +# Turning off binlog encryption to check if server can decrypt binlog with different percona_binlog keys versions +# while not encrypting binary log +--let $restart_parameters=restart:--log-bin=master-bin --encrypt-binlog=0 +--source include/restart_mysqld.inc + +--echo #master-bin.000005 + +SELECT 7; +SELECT 8; + +FLUSH LOGS; + +--echo #master-bin.000006 + +# Check that current master-bin is not encrypted by reading it with mysqlbinlog +let filename= master-bin.000005; +let local=$datadir/$filename; +exec $MYSQL_BINLOG $local --hexdump > /dev/null; + +# Check that binlog encrypted with different percona_binlog key versions can be read by the server + +let remote=--read-from-remote-server --protocol=tcp --host=127.0.0.1 --port=$MASTER_MYPORT -uroot $filename; +exec $MYSQL_BINLOG --hexdump $remote > /dev/null; + +let filename= master-bin.000002; +let remote=--read-from-remote-server --protocol=tcp --host=127.0.0.1 --port=$MASTER_MYPORT -uroot $filename; +exec $MYSQL_BINLOG --hexdump $remote > /dev/null; + +let filename= master-bin.000003; +let remote=--read-from-remote-server --protocol=tcp --host=127.0.0.1 --port=$MASTER_MYPORT -uroot $filename; +exec $MYSQL_BINLOG --hexdump $remote > /dev/null; diff --git a/mysql-test/suite/binlog_encryption/t/mysqlbinlog.test b/mysql-test/suite/binlog_encryption/t/mysqlbinlog.test index de1b20903f84..0d7739904629 100644 --- a/mysql-test/suite/binlog_encryption/t/mysqlbinlog.test +++ b/mysql-test/suite/binlog_encryption/t/mysqlbinlog.test @@ -15,7 +15,7 @@ let remote=--read-from-remote-server --protocol=tcp --host=127.0.0.1 --port=$MAS let outfile=$MYSQLTEST_VARDIR/tmp/binlog_enc.sql; --error 1 exec $MYSQL_BINLOG $local > $outfile; -exec $MYSQL_BINLOG $local --force-read >> $outfile; -exec $MYSQL_BINLOG $local --force-read --offset=3 >> $outfile; +exec $MYSQL_BINLOG $local -#d,'expect_Unknown_event' --force-read >> $outfile; +exec $MYSQL_BINLOG $local -#d,'expect_Unknown_event' --force-read --offset=3 >> $outfile; exec $MYSQL_BINLOG $remote >> $outfile; remove_file $outfile; diff --git a/mysql-test/suite/binlog_encryption/t/percona_system_key_rotation.test b/mysql-test/suite/binlog_encryption/t/percona_system_key_rotation.test new file mode 100644 index 000000000000..c6009fc675f3 --- /dev/null +++ b/mysql-test/suite/binlog_encryption/t/percona_system_key_rotation.test @@ -0,0 +1,52 @@ +--echo # Check that only percona_binlog key can be rotated with rotate_system_key. This part of the test needs updating +--echo # each time a new system key is added. + +--let $assert_text= It should not be possible to rotate key percona_binlog: +--let $assert_cond= "[SELECT rotate_system_key\\(\\"percona_binlog:\\"\\) = 0]" = 1 +--source include/assert.inc + +--let $assert_text= It should not be possible to rotate key percona_key +--let $assert_cond= "[SELECT rotate_system_key\\(\\"percona_key\\"\\) = 0]" = 1 +--source include/assert.inc + +--let $assert_text= It should not be possible to rotate key percona_123 +--let $assert_cond= "[SELECT rotate_system_key\\(\\"percona_123\\"\\) = 0]" = 1 +--source include/assert.inc + +--let $assert_text= It should not be possible to rotate key percona_bin +--let $assert_cond= "[SELECT rotate_system_key\\(\\"percona_bin\\"\\) = 0]" = 1 +--source include/assert.inc + +--let $assert_text= It should not be possible to rotate key percona_b +--let $assert_cond= "[SELECT rotate_system_key\\(\\"percona_b\\"\\) = 0]" = 1 +--source include/assert.inc + +--let $assert_text= It should not be possible to rotate key percona_ +--let $assert_cond= "[SELECT rotate_system_key\\(\\"percona_\\"\\) = 0]" = 1 +--source include/assert.inc + +--let $assert_text= It should not be possible to rotate key percona +--let $assert_cond= "[SELECT rotate_system_key\\(\\"percona\\"\\) = 0]" = 1 +--source include/assert.inc + +--let $assert_text= It should not be possible to rotate key system_key +--let $assert_cond= "[SELECT rotate_system_key\\(\\"system_key\\"\\) = 0]" = 1 +--source include/assert.inc + +--let $assert_text= It should not be possible to rotate key system_key +--let $assert_cond= "[SELECT rotate_system_key\\(\\"system_key\\"\\) = 0]" = 1 +--source include/assert.inc + +--let $assert_text= It should not be possible to rotate key system_key +--let $assert_cond= "[SELECT rotate_system_key\\(\\"123\\"\\) = 0]" = 1 +--source include/assert.inc + +UNINSTALL PLUGIN keyring_file; + +--let $assert_text= It should not be possible to rotate key percona_binlog without keyring_file installed +--let $assert_cond= "[SELECT rotate_system_key\\(\\"percona_binlog\\"\\) = 0]" = 1 +--source include/assert.inc + +# cleanup, restore keyring_file and keyring_file_data variable +--let $restart_parameters=restart: +--source include/restart_mysqld.inc diff --git a/mysql-test/suite/rpl_encryption/r/encrypted_master_switch_to_unencrypted.result b/mysql-test/suite/rpl_encryption/r/encrypted_master_switch_to_unencrypted.result index c5df2c288248..c359cd619171 100644 --- a/mysql-test/suite/rpl_encryption/r/encrypted_master_switch_to_unencrypted.result +++ b/mysql-test/suite/rpl_encryption/r/encrypted_master_switch_to_unencrypted.result @@ -67,6 +67,8 @@ NOT FOUND /table2_to_encrypt/ in master-bin.0* ##################################################### # Part 3: restart master again without encryption ##################################################### +call mtr.add_suppression("Failed to fetch percona_binlog key \\(version 0\\) from keyring and thus failed to initialize binlog encryption."); +call mtr.add_suppression("Error initializing decryption while reading GTIDs from binary log"); call mtr.add_suppression("Found invalid Format description event in binary log"); include/rpl_restart_server.inc [server_number=1] connection server_1; @@ -104,6 +106,7 @@ connection master; include/save_master_pos.inc connection master; connection slave; +call mtr.add_suppression("Slave I/O for channel '': Got fatal error 1236 from master when reading data from binary log: 'Could not decrypt binlog: encryption key error;"); include/wait_for_slave_io_error.inc [errno=1236] connection slave; connection slave; diff --git a/mysql-test/suite/rpl_encryption/r/rpl_binlog_key_rotation.result b/mysql-test/suite/rpl_encryption/r/rpl_binlog_key_rotation.result new file mode 100644 index 000000000000..11eb5b3fbeab --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/rpl_binlog_key_rotation.result @@ -0,0 +1,38 @@ +################# +# Initialization +################# +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +SELECT 1; +1 +1 +SELECT 2; +2 +2 +SELECT rotate_system_key("percona_binlog"); +rotate_system_key("percona_binlog") +1 +FLUSH LOGS; +SELECT 3; +3 +3 +SELECT 4; +4 +4 +SELECT rotate_system_key("percona_binlog"); +rotate_system_key("percona_binlog") +1 +FLUSH LOGS; +SELECT 5; +5 +5 +SELECT 6; +6 +6 +FLUSH LOGS; +include/start_slave.inc +include/sync_slave_sql_with_master.inc +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/t/encrypted_master_switch_to_unencrypted.test b/mysql-test/suite/rpl_encryption/t/encrypted_master_switch_to_unencrypted.test index e6a8f15642d5..2610e4a289fd 100644 --- a/mysql-test/suite/rpl_encryption/t/encrypted_master_switch_to_unencrypted.test +++ b/mysql-test/suite/rpl_encryption/t/encrypted_master_switch_to_unencrypted.test @@ -99,6 +99,8 @@ INSERT INTO table2_to_encrypt SELECT NULL,NOW(),b FROM table2_to_encrypt; # before the restart. master-verify-checksum should help us detect that the encrypted events # are incorrect as checksum will not be correct. +call mtr.add_suppression("Failed to fetch percona_binlog key \\(version 0\\) from keyring and thus failed to initialize binlog encryption."); +call mtr.add_suppression("Error initializing decryption while reading GTIDs from binary log"); # Legit Format description events is never encrypted - as it comes before Start encryption event and is the # first event in binlog. However garbage data can get interpreted as Format description event - in case of this event # there are additional checks before checking its checksum thus we can get error related to it: @@ -134,6 +136,7 @@ start slave; --source include/save_master_pos.inc --connection slave +call mtr.add_suppression("Slave I/O for channel '': Got fatal error 1236 from master when reading data from binary log: 'Could not decrypt binlog: encryption key error;"); --let slave_io_errno=1236 --source include/wait_for_slave_io_error.inc diff --git a/mysql-test/suite/rpl_encryption/t/rpl_binlog_key_rotation.test b/mysql-test/suite/rpl_encryption/t/rpl_binlog_key_rotation.test new file mode 100644 index 000000000000..b09cc6e3189a --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/rpl_binlog_key_rotation.test @@ -0,0 +1,34 @@ +--echo ################# +--echo # Initialization +--echo ################# + +# In this test we check if master can decrypt binlog encrypted with different percona_binlog key versions. +# We check that by stopping slave, generating master bin log files - each encrypted with different +# percona_binlog key version and then restarting slave and trying to synchronize it with master. +# Master will need to be able to decrypt master binlogs encrypted with different percona_binlog key versions. + +--let $rpl_skip_start_slave= 1 +--source include/master-slave.inc + +SELECT 1; +SELECT 2; + +SELECT rotate_system_key("percona_binlog"); +FLUSH LOGS; + +SELECT 3; +SELECT 4; + +SELECT rotate_system_key("percona_binlog"); +FLUSH LOGS; + +SELECT 5; +SELECT 6; +FLUSH LOGS; + +--connection server_2 +--source include/start_slave.inc +--connection server_1 +--source include/sync_slave_sql_with_master.inc + +--source include/rpl_end.inc diff --git a/mysql-test/t/percona_rotate_system_key_check_privileges.test b/mysql-test/t/percona_rotate_system_key_check_privileges.test new file mode 100644 index 000000000000..c152d3926389 --- /dev/null +++ b/mysql-test/t/percona_rotate_system_key_check_privileges.test @@ -0,0 +1,15 @@ +--source include/not_embedded.inc +# This test is to check that only SUPER users can rotate_system_key + +CREATE USER 'regular_user'@'localhost' IDENTIFIED BY 'pass'; + +--source include/count_sessions.inc +--connect (regular_user_con,localhost,regular_user,pass,test) + +--error ER_SPECIFIC_ACCESS_DENIED_ERROR +SELECT rotate_system_key("percona_binlog"); + +--connection default +--disconnect regular_user_con +DROP USER regular_user@localhost; +--source include/wait_until_count_sessions.inc diff --git a/mysys/CMakeLists.txt b/mysys/CMakeLists.txt index 7ed7ef2313d6..033c4c3af1e0 100644 --- a/mysys/CMakeLists.txt +++ b/mysys/CMakeLists.txt @@ -34,7 +34,7 @@ SET(MYSYS_SOURCES array.c charset-def.c charset.c checksum.c thr_rwlock.c tree.c typelib.c base64.c my_memmem.c lf_alloc-pin.c lf_dynarray.c lf_hash.c my_rdtsc.c psi_noop.c my_syslog.c - my_chmod.c my_thread.c) + my_chmod.c my_thread.c system_key.c) IF (WIN32) LIST(APPEND MYSYS_SOURCES diff --git a/mysys/system_key.c b/mysys/system_key.c new file mode 100644 index 000000000000..d30e6d45011e --- /dev/null +++ b/mysys/system_key.c @@ -0,0 +1,73 @@ +/* Copyright (c) 2018 Percona LLC and/or its affiliates. All rights reserved. + + 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 */ + +#include "system_key.h" +#include +#include "my_sys.h" + +/** + System keys cannot have ':' in their name. We use ':' as a separator between + system key's name and system key's version. +*/ +const char* valid_percona_system_keys[] = {PERCONA_BINLOG_KEY_NAME}; +const size_t valid_percona_system_keys_size = array_elements(valid_percona_system_keys); + +uchar* parse_system_key(const uchar *key, const size_t key_length, uint *key_version, + uchar **key_data, size_t *key_data_length) +{ + size_t key_version_length= 0; + ulong ulong_key_version= 0; + char *version= NULL, *endptr= NULL; + + if (key == NULL || key_length == 0) + return NULL; + + for (; key[key_version_length] != ':' && key_version_length < key_length; ++key_version_length); + if (key_version_length == 0 || key_version_length == key_length) + return NULL; // no version found + + version= (char*)(my_malloc(PSI_NOT_INSTRUMENTED, key_version_length+1, MYF(0))); + if (version == NULL) + return NULL; + + memcpy(version, key, key_version_length); + version[key_version_length]= '\0'; + endptr= version; + + ulong_key_version= strtoul(version, &endptr, 10); + if (ulong_key_version > UINT_MAX || *endptr != '\0') + { + my_free(version); + return NULL; // conversion failed + } + + DBUG_ASSERT(ulong_key_version <= UINT_MAX); // sanity check + *key_version= (uint)ulong_key_version; + + my_free(version); + + *key_data_length= key_length - (key_version_length + 1); // skip ':' after key version + if (*key_data_length == 0) + return NULL; + DBUG_ASSERT(*key_data_length <= 512); + + *key_data= (uchar*)(my_malloc(PSI_NOT_INSTRUMENTED, sizeof(uchar)*(*key_data_length), MYF(0))); + if (*key_data == NULL) + return NULL; + + memcpy(*key_data, key+key_version_length+1, *key_data_length); // skip ':' after key version + return *key_data; +} diff --git a/plugin/keyring/CMakeLists.txt b/plugin/keyring/CMakeLists.txt index 59d3c72b3e7d..785eb6fec026 100644 --- a/plugin/keyring/CMakeLists.txt +++ b/plugin/keyring/CMakeLists.txt @@ -24,6 +24,8 @@ SET( common/keyring_key.cc common/keys_container.cc common/keys_iterator.cc + common/system_keys_container.cc + common/system_key_adapter.cc common/keyring_impl.cc keyring.cc hash_to_buffer_serializer.cc diff --git a/plugin/keyring/common/i_system_keys_container.h b/plugin/keyring/common/i_system_keys_container.h new file mode 100644 index 000000000000..30021bbfa5cd --- /dev/null +++ b/plugin/keyring/common/i_system_keys_container.h @@ -0,0 +1,38 @@ +/* Copyright (c) 2018 Percona LLC and/or its affiliates. All rights reserved. + + 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 */ + +#ifndef MYSQL_I_SYSTEM_KEYS_CONTAINER_H +#define MYSQL_I_SYSTEM_KEYS_CONTAINER_H + +#include +#include "i_keyring_key.h" + +namespace keyring +{ + class ISystem_keys_container : public Keyring_alloc + { + public: + virtual IKey* get_latest_key_if_system_key_without_version(IKey *key) = 0; + virtual void store_or_update_if_system_key_with_version(IKey *key) = 0; + virtual bool rotate_key_id_if_system_key_without_version(IKey *key) = 0; + virtual bool is_system_key(IKey *key) = 0; + + virtual ~ISystem_keys_container() + {} + }; +} //namespace keyring + +#endif //MYSQL_I_SYSTEM_KEYS_CONTAINER_H diff --git a/plugin/keyring/common/keyring_memory.h b/plugin/keyring/common/keyring_memory.h index 351a783696cf..ad08a66954a1 100644 --- a/plugin/keyring/common/keyring_memory.h +++ b/plugin/keyring/common/keyring_memory.h @@ -52,6 +52,32 @@ namespace keyring { my_free(ptr); } }; + + template class Secure_allocator : public std::allocator + { + public: + + template struct rebind { typedef Secure_allocator other; }; + Secure_allocator() throw() {} + Secure_allocator(const Secure_allocator& secure_allocator) : std::allocator(secure_allocator) + {} + template Secure_allocator(const Secure_allocator&) throw() {} + + T* allocate(size_t n) + { + if (n == 0) + return NULL; + else if (n > INT_MAX) + throw std::bad_alloc(); + return keyring_malloc(n*sizeof(T)); + } + + void deallocate(T *p, size_t n) + { + memset_s(p, n, 0, n); + my_free(p); + } + }; } //namespace keyring #endif //MYSQL_KEYRING_MEMORY_H diff --git a/plugin/keyring/common/keys_container.cc b/plugin/keyring/common/keys_container.cc index c14826f772ad..c15e8a63241d 100644 --- a/plugin/keyring/common/keys_container.cc +++ b/plugin/keyring/common/keys_container.cc @@ -15,6 +15,7 @@ #include #include "keys_container.h" +#include "system_keys_container.h" namespace keyring { @@ -41,6 +42,7 @@ Keys_container::Keys_container(ILogger *logger) , keyring_io(NULL) { my_hash_clear(keys_hash); + system_keys_container.reset(new System_keys_container(logger)); } Keys_container::~Keys_container() @@ -89,21 +91,27 @@ my_bool Keys_container::store_key_in_hash(IKey *key) my_bool Keys_container::store_key(IKey* key) { - if (flush_to_backup() || store_key_in_hash(key)) + if (system_keys_container->rotate_key_id_if_system_key_without_version(key) || + flush_to_backup() || + store_key_in_hash(key)) return TRUE; if (flush_to_storage(key, STORE_KEY)) { remove_key_from_hash(key); return TRUE; } + system_keys_container->store_or_update_if_system_key_with_version(key); return FALSE; } IKey* Keys_container::get_key_from_hash(IKey *key) { - return reinterpret_cast(my_hash_search(keys_hash, - reinterpret_cast(key->get_key_signature()->c_str()), - key->get_key_signature()->length())); + IKey* system_key = system_keys_container->get_latest_key_if_system_key_without_version(key); + + return system_key ? system_key + : reinterpret_cast(my_hash_search(keys_hash, + reinterpret_cast(key->get_key_signature()->c_str()), + key->get_key_signature()->length())); } void Keys_container::allocate_and_set_data_for_key(IKey *key, @@ -165,7 +173,10 @@ my_bool Keys_container::remove_key_from_hash(IKey *key) my_bool Keys_container::remove_key(IKey *key) { IKey* fetched_key_to_delete= get_key_from_hash(key); - if (fetched_key_to_delete == NULL || flush_to_backup() || + // removing system keys is forbidden + if (fetched_key_to_delete == NULL || + system_keys_container->is_system_key(fetched_key_to_delete) || + flush_to_backup() || remove_key_from_hash(fetched_key_to_delete)) return TRUE; if (flush_to_storage(fetched_key_to_delete, REMOVE_KEY)) @@ -204,6 +215,7 @@ my_bool Keys_container::load_keys_from_keyring_storage() delete key_loaded; break; } + system_keys_container->store_or_update_if_system_key_with_version(key_loaded); key_loaded=NULL; } delete serialized_keys; diff --git a/plugin/keyring/common/keys_container.h b/plugin/keyring/common/keys_container.h index 56cedeffd580..ba8755a33a41 100644 --- a/plugin/keyring/common/keys_container.h +++ b/plugin/keyring/common/keys_container.h @@ -24,6 +24,7 @@ #include //For PolyLock, AutoWLock, AutoRLock #include "i_keys_container.h" #include "keyring_memory.h" +#include "i_system_keys_container.h" #include @@ -74,6 +75,7 @@ class Keys_container : public IKeys_container ILogger *logger; IKeyring_io *keyring_io; std::string keyring_storage_url; + boost::movelib::unique_ptr system_keys_container; }; } //namespace keyring diff --git a/plugin/keyring/common/secure_string.h b/plugin/keyring/common/secure_string.h new file mode 100644 index 000000000000..a4037632b0d9 --- /dev/null +++ b/plugin/keyring/common/secure_string.h @@ -0,0 +1,30 @@ +/* Copyright (c) 2018 Percona LLC and/or its affiliates. All rights reserved. + + 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 */ + +#ifndef MYSQL_KEYRING_SECURE_STRING +#define MYSQL_KEYRING_SECURE_STRING + +#include "keyring_memory.h" +#include + +namespace keyring +{ + typedef std::basic_string, Secure_allocator > Secure_string; + typedef std::basic_ostringstream, Secure_allocator > Secure_ostringstream; + typedef std::basic_istringstream, Secure_allocator > Secure_istringstream; +} + +#endif // MYSQL_KEYRING_SECURE_STRING diff --git a/plugin/keyring/common/system_key_adapter.cc b/plugin/keyring/common/system_key_adapter.cc new file mode 100644 index 000000000000..b9880175b563 --- /dev/null +++ b/plugin/keyring/common/system_key_adapter.cc @@ -0,0 +1,94 @@ +/* Copyright (c) 2018 Percona LLC and/or its affiliates. All rights reserved. + + 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 */ + +#include "system_key_adapter.h" +#include "secure_string.h" + +namespace keyring +{ + // Adds key's version to keyring's key data. The resulting system key data looks like this: + // : + void System_key_adapter::construct_system_key_data() + { + Secure_ostringstream system_key_data_version_prefix_ss; + system_key_data_version_prefix_ss << key_version << ':'; + Secure_string system_key_data_version_prefix = system_key_data_version_prefix_ss.str(); + system_key_data.allocate(system_key_data_version_prefix.length() + keyring_key->get_key_data_size()); + + // need to "de"-xor keying key data to be able to add to it key version prefix + keyring_key->xor_data(); + memcpy(system_key_data.get_key_data(), system_key_data_version_prefix.c_str(), system_key_data_version_prefix.length()); + memcpy(system_key_data.get_key_data() + system_key_data_version_prefix.length(), keyring_key->get_key_data(), + keyring_key->get_key_data_size()); + + size_t keyring_key_data_size = keyring_key->get_key_data_size(); + uchar *keyring_key_data = keyring_key->release_key_data(); + + // Using keyring_key's xor function to xor system key data, next + // restoring keyring key data + keyring_key->set_key_data(system_key_data.get_key_data(), system_key_data.get_key_data_size()); + keyring_key->xor_data(); + + keyring_key->release_key_data(); + keyring_key->set_key_data(keyring_key_data, keyring_key_data_size); + + keyring_key->xor_data(); + } + + System_key_adapter::System_key_data::System_key_data() + : key_data(NULL) + , key_data_size(0) + {} + + System_key_adapter::System_key_data::~System_key_data() + { + free(); + } + + bool System_key_adapter::System_key_data::allocate(size_t key_data_size) + { + free(); + key_data = new uchar[key_data_size]; + if (key_data) + { + this->key_data_size = key_data_size; + return false; + } + return true; + } + + void System_key_adapter::System_key_data::free() + { + if (key_data) + { + DBUG_ASSERT(key_data_size <= 512); + memset_s(key_data, 512, 0, key_data_size); + delete[] key_data; + key_data = NULL; + key_data_size = 0; + } + } + + uchar* System_key_adapter::System_key_data::get_key_data() + { + return key_data; + } + + size_t System_key_adapter::System_key_data::get_key_data_size() + { + return key_data_size; + } +} //namespace keyring diff --git a/plugin/keyring/common/system_key_adapter.h b/plugin/keyring/common/system_key_adapter.h new file mode 100644 index 000000000000..606ce242bc7b --- /dev/null +++ b/plugin/keyring/common/system_key_adapter.h @@ -0,0 +1,163 @@ +/* Copyright (c) 2018 Percona LLC and/or its affiliates. All rights reserved. + + 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 */ + +#include "i_keyring_key.h" +#include + +namespace keyring { + +class System_key_adapter : public IKey +{ +public: + System_key_adapter(uint key_version, IKey *keyring_key) + : key_version(key_version) + , keyring_key(keyring_key) + {} + + void set_keyring_key(IKey *key, uint key_version) + { + system_key_data.free(); + this->keyring_key = key; + this->key_version = key_version; + } + + IKey* get_keyring_key() const + { + return keyring_key; + } + + uint get_key_version() const + { + return key_version; + } + + virtual std::string* get_key_signature() const + { + DBUG_ASSERT(keyring_key != NULL); + return keyring_key->get_key_signature(); + } + + virtual std::string* get_key_type() + { + DBUG_ASSERT(keyring_key != NULL); + return keyring_key->get_key_type(); + } + virtual std::string* get_key_id() + { + DBUG_ASSERT(keyring_key != NULL); + return keyring_key->get_key_id(); + } + virtual std::string* get_user_id() + { + DBUG_ASSERT(keyring_key != NULL); + return keyring_key->get_user_id(); + } + virtual uchar* get_key_data() + { + DBUG_ASSERT(keyring_key != NULL); + + if (system_key_data.get_key_data() == NULL) + construct_system_key_data(); + + return system_key_data.get_key_data(); + } + virtual size_t get_key_data_size() + { + DBUG_ASSERT(keyring_key != NULL); + + if (system_key_data.get_key_data() == NULL) + construct_system_key_data(); + + return system_key_data.get_key_data_size(); + } + virtual size_t get_key_pod_size() const + { + DBUG_ASSERT(FALSE); + return 0; + } + virtual uchar* release_key_data() + { + DBUG_ASSERT(FALSE); + return NULL; + } + virtual void xor_data() + { + DBUG_ASSERT(FALSE); + } + virtual void set_key_data(uchar *key_data, size_t key_data_size) + { + keyring_key->set_key_data(key_data, key_data_size); + } + virtual void set_key_type(const std::string *key_type) + { + keyring_key->set_key_type(key_type); + } + virtual my_bool load_from_buffer(uchar* buffer MY_ATTRIBUTE((unused)), size_t *buffer_position MY_ATTRIBUTE((unused)), + size_t input_buffer_size MY_ATTRIBUTE((unused))) + { + DBUG_ASSERT(FALSE); + return FALSE; + } + virtual void store_in_buffer(uchar* buffer MY_ATTRIBUTE((unused)), + size_t *buffer_position MY_ATTRIBUTE((unused))) const + { + DBUG_ASSERT(FALSE); + } + virtual my_bool is_key_type_valid() + { + DBUG_ASSERT(FALSE); + return FALSE; + } + virtual my_bool is_key_id_valid() + { + DBUG_ASSERT(FALSE); + return FALSE; + } + virtual my_bool is_key_valid() + { + DBUG_ASSERT(FALSE); + return FALSE; + } + virtual my_bool is_key_length_valid() + { + DBUG_ASSERT(FALSE); + return FALSE; + } + +private: + class System_key_data + { + public: + System_key_data(); + ~System_key_data(); + + bool allocate(size_t key_data_size); + void free(); + uchar *get_key_data(); + size_t get_key_data_size(); + private: + uchar *key_data; + size_t key_data_size; + }; + + void construct_system_key_data(); + + System_key_data system_key_data; + uint key_version; + IKey *keyring_key; +}; + +} //namespace keyring diff --git a/plugin/keyring/common/system_keys_container.cc b/plugin/keyring/common/system_keys_container.cc new file mode 100644 index 000000000000..074b839adf30 --- /dev/null +++ b/plugin/keyring/common/system_keys_container.cc @@ -0,0 +1,134 @@ +/* Copyright (c) 2018 Percona LLC and/or its affiliates. All rights reserved. + + 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 */ + +#include "system_keys_container.h" +#include +#include + +namespace keyring { + +// System keys cannot have ':' in their name. We use ':' as a separator between +// system key's name and system key's version +const std::string System_keys_container::system_key_prefix = "percona_"; + +System_keys_container::~System_keys_container() +{ + for (System_key_id_to_system_key::iterator iter = system_key_id_to_system_key.begin(); + iter != system_key_id_to_system_key.end(); + ++iter) + delete iter->second; +} + +bool System_keys_container::is_system_key(IKey *key) +{ + std::string system_key_id; + uint key_version; + + return is_system_key_with_version(key, system_key_id, key_version) || + is_system_key_without_version(key); +} + +IKey* System_keys_container::get_latest_key_if_system_key_without_version(IKey *key) +{ + return (!key->get_user_id()->empty() || system_key_id_to_system_key.count(*key->get_key_id()) == 0) + ? NULL + : system_key_id_to_system_key[*key->get_key_id()]; +} + +bool System_keys_container::parse_system_key_id_with_version(std::string &key_id, std::string &system_key_id, uint &key_version) +{ + const std::size_t colon_position = key_id.find_last_of(':'); + + if (colon_position == std::string::npos || colon_position == key_id.length() - 1) + return true; + + system_key_id = key_id.substr(0, colon_position); + const std::string version = key_id.substr(colon_position + 1, + key_id.length() - colon_position); + + if (version.empty()) + return true; + + char *endptr = NULL; + ulong ulong_key_version = strtoul(version.c_str(), &endptr, 10); + if (ulong_key_version > UINT_MAX || endptr == NULL || *endptr != '\0') + return true; + + key_version = static_cast(ulong_key_version); + return false; +} + +bool System_keys_container::is_system_key_without_version(IKey *key) +{ + return key->get_user_id()->empty() && + key->get_key_id()->compare(0, system_key_prefix.length(), + system_key_prefix) == 0 && + key->get_key_id()->find_first_of(':') == std::string::npos; // system keys cannot have ':' in their name +} + +bool System_keys_container::is_system_key_with_version(IKey *key, std::string &system_key_id, uint &key_version) +{ + return key->get_user_id()->empty() && + !parse_system_key_id_with_version(*key->get_key_id(), system_key_id, key_version) && + key->get_key_id()->compare(0, system_key_prefix.length(), + system_key_prefix) == 0; +} + +void System_keys_container::update_system_key(IKey* key, const std::string &system_key_id, uint key_version) +{ + if (system_key_id_to_system_key[system_key_id]->get_key_version() < key_version) + system_key_id_to_system_key[system_key_id]->set_keyring_key(key, key_version); +} + +bool System_keys_container::rotate_key_id_if_system_key_without_version(IKey *key) +{ + if (!is_system_key_without_version(key)) + return false; + + uint key_version = 0; // if we rotate from plain system key, we assign version 0 to it + if (system_key_id_to_system_key.count(*key->get_key_id()) != 0) + { + key_version = system_key_id_to_system_key[*key->get_key_id()]->get_key_version(); + if (key_version == UINT_MAX) + { + logger->log(MY_ERROR_LEVEL, "System key cannot be rotated anymore, " + "the maximum key version has been reached."); + return true; + } + ++key_version; + } + std::ostringstream system_key_id_with_inc_version_ss; + system_key_id_with_inc_version_ss << *key->get_key_id() << ':' << key_version; + *(key->get_key_id()) = system_key_id_with_inc_version_ss.str(); + + return false; +} + +void System_keys_container::store_or_update_if_system_key_with_version(IKey *key) +{ + std::string system_key_id; + uint key_version; + + if (is_system_key_with_version(key, system_key_id, key_version)) + { + if (system_key_id_to_system_key.count(system_key_id) == 0) // add a new system key + system_key_id_to_system_key.insert(std::make_pair(system_key_id, new System_key_adapter(key_version, key))); + else + update_system_key(key, system_key_id, key_version); + } +} + +} //namespace keyring diff --git a/plugin/keyring/common/system_keys_container.h b/plugin/keyring/common/system_keys_container.h new file mode 100644 index 000000000000..1eab59eb6c27 --- /dev/null +++ b/plugin/keyring/common/system_keys_container.h @@ -0,0 +1,91 @@ +/* Copyright (c) 2018 Percona LLC and/or its affiliates. All rights reserved. + + 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 */ + +#ifndef SYSTEM_KEYS_CONTAINER_INCLUDED +#define SYSTEM_KEYS_CONTAINER_INCLUDED + +#include +#include +#include +#include "i_system_keys_container.h" +#include "system_key_adapter.h" +#include "logger.h" + +namespace keyring { + +/** + System_keys_container stores system keys together with links to their latest versions. + Latest version of a key itself is stored somewhere else (presumably in keys_container). + For instance system_keys_container maps percona_binlog to its latest version percona_binlog:12, + the key percona_binlog:12 itself is stored in keys_container. System_key_container + only maps system key percona_binlog to its latest version, i.e. percona_binlog:12, + it does not know about other versions of the key. The keys returned by System_keys_container + are encapsulated in System_key_adapter which allows to retrieve information like key's + version. +*/ +class System_keys_container : public ISystem_keys_container +{ +public: + System_keys_container(ILogger *logger) + : logger(logger) + {} + ~System_keys_container(); + + /** + Returns key with latest version when called with plain system key (ex. percona_binlog) + For instance - when key's (argument key) id is system_key and latest version of system_key + is x it will return key with id system_key:x + + @return latest key version on success and NULL on failure + */ + virtual IKey* get_latest_key_if_system_key_without_version(IKey *key); + + /** + Only system keys with already assigned version can be stored inside system_keys_container + for instance : percona_binlog:0 + */ + virtual void store_or_update_if_system_key_with_version(IKey *key); + + /** + Pass key with system_key id (for instance percona_binlog) to get next version of the + system_key, for instance : + System_keys_container already has percona_binlog key with version 12 : percona_binlog:12 + Calling this function will assing percona_binlog:13 as key_id to key passed as argument + */ + virtual bool rotate_key_id_if_system_key_without_version(IKey *key); + + /** + Returns true if key id of key argument is either system_key or system_key:x + For instance percona_binlog or percona_binlog:12 + */ + virtual bool is_system_key(IKey *key); + +private: + static bool parse_system_key_id_with_version(std::string &key_id, std::string &system_key_id, uint &key_version); + void update_system_key(IKey* key, const std::string &system_key_id, uint key_version); + bool is_system_key_with_version(IKey *key, std::string &system_key_id, uint &key_version); + bool is_system_key_without_version(IKey *key); + + typedef std::map System_key_id_to_system_key; + System_key_id_to_system_key system_key_id_to_system_key; + static const std::string system_key_prefix; + + ILogger *logger; +}; + +} //namespace keyring + +#endif //SYSTEM_KEYS_CONTAINER_INCLUDED diff --git a/plugin/keyring_vault/CMakeLists.txt b/plugin/keyring_vault/CMakeLists.txt index ac5057b62249..d12c8c3ddaed 100644 --- a/plugin/keyring_vault/CMakeLists.txt +++ b/plugin/keyring_vault/CMakeLists.txt @@ -37,6 +37,8 @@ MYSQL_ADD_PLUGIN(keyring_vault ${CMAKE_SOURCE_DIR}/plugin/keyring/common/keys_iterator.cc ${CMAKE_SOURCE_DIR}/plugin/keyring/common/keyring_impl.cc ${CMAKE_SOURCE_DIR}/plugin/keyring/file_io.cc + ${CMAKE_SOURCE_DIR}/plugin/keyring/common/system_key_adapter.cc + ${CMAKE_SOURCE_DIR}/plugin/keyring/common/system_keys_container.cc vault_io.cc vault_key.cc vault_base64.cc diff --git a/plugin/keyring_vault/i_vault_curl.h b/plugin/keyring_vault/i_vault_curl.h index 9ad200993fe0..caf61b3d24bc 100644 --- a/plugin/keyring_vault/i_vault_curl.h +++ b/plugin/keyring_vault/i_vault_curl.h @@ -1,9 +1,25 @@ +/* Copyright (c) 2018 Percona LLC and/or its affiliates. All rights reserved. + + 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 */ + #ifndef MYSQL_I_VAULT_CURL #define MYSQL_I_VAULT_CURL #include "i_keyring_key.h" #include "vault_credentials.h" -#include "vault_secure_string.h" +#include "secure_string.h" namespace keyring { diff --git a/plugin/keyring_vault/i_vault_io.h b/plugin/keyring_vault/i_vault_io.h index 6b1635e75d37..f02303a09523 100644 --- a/plugin/keyring_vault/i_vault_io.h +++ b/plugin/keyring_vault/i_vault_io.h @@ -1,3 +1,19 @@ +/* Copyright (c) 2018 Percona LLC and/or its affiliates. All rights reserved. + + 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 */ + #ifndef I_VAULTIO_INCLUDED #define I_VAULTIO_INCLUDED diff --git a/plugin/keyring_vault/i_vault_parser.h b/plugin/keyring_vault/i_vault_parser.h index b664c420cd78..70dc558494bd 100644 --- a/plugin/keyring_vault/i_vault_parser.h +++ b/plugin/keyring_vault/i_vault_parser.h @@ -1,3 +1,19 @@ +/* Copyright (c) 2018 Percona LLC and/or its affiliates. All rights reserved. + + 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 */ + #ifndef MYSQL_I_VAULT_PARSER_H #define MYSQL_I_VAULT_PARSER_H @@ -5,8 +21,7 @@ #include "i_keyring_key.h" #include "vault_keys_list.h" #include "logger.h" -#include "vault_memory.h" -#include "vault_secure_string.h" +#include "secure_string.h" namespace keyring { diff --git a/plugin/keyring_vault/vault_base64.cc b/plugin/keyring_vault/vault_base64.cc index adb519584e85..6c2db9d44502 100644 --- a/plugin/keyring_vault/vault_base64.cc +++ b/plugin/keyring_vault/vault_base64.cc @@ -1,3 +1,19 @@ +/* Copyright (c) 2018 Percona LLC and/or its affiliates. All rights reserved. + + 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 */ + #include #include "vault_base64.h" #include "base64.h" diff --git a/plugin/keyring_vault/vault_base64.h b/plugin/keyring_vault/vault_base64.h index 3e44acdce115..3b64dae9e35a 100644 --- a/plugin/keyring_vault/vault_base64.h +++ b/plugin/keyring_vault/vault_base64.h @@ -1,8 +1,24 @@ +/* Copyright (c) 2018 Percona LLC and/or its affiliates. All rights reserved. + + 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 */ + #ifndef MYSQL_VAULT_BASE64_H #define MYSQL_VAULT_BASE64_H #include -#include "vault_secure_string.h" +#include "secure_string.h" namespace keyring { diff --git a/plugin/keyring_vault/vault_credentials.cc b/plugin/keyring_vault/vault_credentials.cc index 0aa5206ed4cd..74b627b11c55 100644 --- a/plugin/keyring_vault/vault_credentials.cc +++ b/plugin/keyring_vault/vault_credentials.cc @@ -1,3 +1,19 @@ +/* Copyright (c) 2018 Percona LLC and/or its affiliates. All rights reserved. + + 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 */ + #include "vault_credentials.h" namespace keyring diff --git a/plugin/keyring_vault/vault_credentials.h b/plugin/keyring_vault/vault_credentials.h index 54f3d3aec398..59eba744860c 100644 --- a/plugin/keyring_vault/vault_credentials.h +++ b/plugin/keyring_vault/vault_credentials.h @@ -1,10 +1,25 @@ +/* Copyright (c) 2018 Percona LLC and/or its affiliates. All rights reserved. + + 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 */ + #ifndef MYSQL_VAULT_CREDENTIALS #define MYSQL_VAULT_CREDENTIALS #include #include -#include "vault_memory.h" -#include "vault_secure_string.h" +#include "secure_string.h" namespace keyring { diff --git a/plugin/keyring_vault/vault_curl.cc b/plugin/keyring_vault/vault_curl.cc index 515e6552c24b..cd8402ef9b69 100644 --- a/plugin/keyring_vault/vault_curl.cc +++ b/plugin/keyring_vault/vault_curl.cc @@ -1,3 +1,19 @@ +/* Copyright (c) 2018 Percona LLC and/or its affiliates. All rights reserved. + + 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 */ + #include #include #include @@ -7,7 +23,7 @@ #include "mysqld.h" #include "mysql/service_thd_wait.h" #include "vault_curl.h" -#include "vault_memory.h" +#include "secure_string.h" #include "vault_base64.h" namespace keyring diff --git a/plugin/keyring_vault/vault_curl.h b/plugin/keyring_vault/vault_curl.h index 0946ef3a49cd..30a76d8e5917 100644 --- a/plugin/keyring_vault/vault_curl.h +++ b/plugin/keyring_vault/vault_curl.h @@ -1,3 +1,19 @@ +/* Copyright (c) 2018 Percona LLC and/or its affiliates. All rights reserved. + + 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 */ + #ifndef MYSQL_VAULT_CURL_H #define MYSQL_VAULT_CURL_H @@ -9,7 +25,7 @@ #include "i_vault_curl.h" #include "logger.h" #include "vault_credentials.h" -#include "vault_secure_string.h" +#include "secure_string.h" #include "i_keyring_key.h" namespace keyring diff --git a/plugin/keyring_vault/vault_memory.h b/plugin/keyring_vault/vault_memory.h deleted file mode 100644 index a1dfab312669..000000000000 --- a/plugin/keyring_vault/vault_memory.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef MYSQL_VAULT_MEMORY -#define MYSQL_VAULT_MEMORY - -#include -#include "keyring_memory.h" - -namespace keyring -{ - template class Secure_allocator : public std::allocator - { - public: - - template struct rebind { typedef Secure_allocator other; }; - Secure_allocator() throw() {} - Secure_allocator(const Secure_allocator& secure_allocator) : std::allocator(secure_allocator) - {} - template Secure_allocator(const Secure_allocator&) throw() {} - - T* allocate(size_t n) - { - if (n == 0) - return NULL; - else if (n > INT_MAX) - throw std::bad_alloc(); - return keyring_malloc(n*sizeof(T)); - } - - void deallocate(T *p, size_t n) - { - memset_s(p, n, 0, n); - my_free(p); - } - }; -} // namespace keyring - -#endif // MYSQL_VAULT_MEMORY diff --git a/plugin/keyring_vault/vault_parser.cc b/plugin/keyring_vault/vault_parser.cc index 204ee8c59a9b..5f0f133f4e78 100644 --- a/plugin/keyring_vault/vault_parser.cc +++ b/plugin/keyring_vault/vault_parser.cc @@ -1,3 +1,19 @@ +/* Copyright (c) 2018 Percona LLC and/or its affiliates. All rights reserved. + + 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 */ + #include "vault_parser.h" #include "vault_key.h" #include diff --git a/plugin/keyring_vault/vault_parser.h b/plugin/keyring_vault/vault_parser.h index 673c8b5d30db..0df2c599377a 100644 --- a/plugin/keyring_vault/vault_parser.h +++ b/plugin/keyring_vault/vault_parser.h @@ -1,10 +1,26 @@ +/* Copyright (c) 2018 Percona LLC and/or its affiliates. All rights reserved. + + 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 */ + #ifndef MYSQL_VAULT_PARSER_H #define MYSQL_VAULT_PARSER_H #include "my_global.h" #include "i_vault_parser.h" #include "logger.h" -#include "vault_memory.h" +#include "secure_string.h" namespace keyring { diff --git a/plugin/keyring_vault/vault_secure_string.h b/plugin/keyring_vault/vault_secure_string.h deleted file mode 100644 index 1b3aa6b97410..000000000000 --- a/plugin/keyring_vault/vault_secure_string.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef MYSQL_VAULT_SECURE_STRING -#define MYSQL_VAULT_SECURE_STRING - -#include "vault_memory.h" - -namespace keyring -{ - typedef std::basic_string, Secure_allocator > Secure_string; - typedef std::basic_ostringstream, Secure_allocator > Secure_ostringstream; - typedef std::basic_istringstream, Secure_allocator > Secure_istringstream; -} - -#endif // MYSQL_VAULT_SECURE_STRING diff --git a/sql/CMakeLists.txt b/sql/CMakeLists.txt index 7865a047c57c..76fc871470ce 100644 --- a/sql/CMakeLists.txt +++ b/sql/CMakeLists.txt @@ -104,6 +104,7 @@ SET(SQL_SHARED_SOURCES item_geofunc_relchecks_bgwrap.cc item_geofunc_setops.cc item_json_func.cc + item_keyring_func.cc item_row.cc item_strfunc.cc item_subselect.cc diff --git a/sql/binlog.cc b/sql/binlog.cc index 29d53b6fd451..b17d7b016719 100644 --- a/sql/binlog.cc +++ b/sql/binlog.cc @@ -5110,7 +5110,17 @@ bool MYSQL_BIN_LOG::open_binlog(const char *log_name, if (my_rand_buffer(nonce, sizeof(nonce))) goto err; - Start_encryption_log_event sele(1, 0, nonce); + if (crypto.load_latest_binlog_key()) + { + sql_print_error("Failed to fetch percona_binlog key from keyring and thus " + "failed to initialize binlog encryption. Have you enabled " + "keyring plugin?"); + goto err; + } + DBUG_EXECUTE_IF("check_consecutive_binlog_key_versions", + { static uint next_key_version = 0; + DBUG_ASSERT(crypto.get_key_version() == next_key_version++);}); + Start_encryption_log_event sele(1, crypto.get_key_version(), nonce); sele.common_footer->checksum_alg= s.common_footer->checksum_alg; if (write_to_file(&sele)) { @@ -5120,11 +5130,9 @@ bool MYSQL_BIN_LOG::open_binlog(const char *log_name, } bytes_written+= sele.common_header->data_written; - if (crypto.init(sele.crypto_scheme, 0, nonce)) + if (crypto.init_with_loaded_key(sele.crypto_scheme, nonce)) { - sql_print_error("Failed to fetch percona_binlog key from keyring and thus " - "failed to initialize binlog encryption. Have you enabled " - "keyring plugin?"); + sql_print_error("Failed to initialize binlog encryption."); goto err; } } diff --git a/sql/binlog_crypt_data.cc b/sql/binlog_crypt_data.cc index ec0ef2552c20..678af18f06ce 100644 --- a/sql/binlog_crypt_data.cc +++ b/sql/binlog_crypt_data.cc @@ -1,12 +1,29 @@ +/* Copyright (c) 2018 Percona LLC and/or its affiliates. All rights reserved. + + 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 */ + #include "binlog_crypt_data.h" #include "my_global.h" #include "my_sys.h" #ifdef MYSQL_SERVER #include +#include "system_key.h" +#include "log.h" +#include #endif -#include -#include Binlog_crypt_data::Binlog_crypt_data() : key_length(0) @@ -17,7 +34,7 @@ Binlog_crypt_data::Binlog_crypt_data() Binlog_crypt_data::~Binlog_crypt_data() { - free_key(); + free_key(key, key_length); } Binlog_crypt_data::Binlog_crypt_data(const Binlog_crypt_data &b) @@ -37,7 +54,7 @@ Binlog_crypt_data::Binlog_crypt_data(const Binlog_crypt_data &b) memcpy(nonce, b.nonce, BINLOG_NONCE_LENGTH); } -void Binlog_crypt_data::free_key() +void Binlog_crypt_data::free_key(uchar *&key, size_t &key_length) { if (key != NULL) { @@ -61,49 +78,66 @@ Binlog_crypt_data& Binlog_crypt_data::operator=(Binlog_crypt_data b) return *this; } -bool Binlog_crypt_data::init(uint sch, uint kv, const uchar* nonce) +bool Binlog_crypt_data::load_latest_binlog_key() { - scheme= sch; - key_version= kv; - free_key(); - key_length= 16; - + free_key(key, key_length); #ifdef MYSQL_SERVER - DBUG_ASSERT(nonce != NULL); - memcpy(this->nonce, nonce, BINLOG_NONCE_LENGTH); - - boost::movelib::unique_ptr key_type(NULL, my_free); - char *key_type_raw = NULL; - size_t key_len; + char *system_key_type = NULL; + size_t system_key_len = 0; + uchar *system_key = NULL; DBUG_EXECUTE_IF("binlog_encryption_error_on_key_fetch", { return true; } ); - int fetch_result = my_key_fetch("percona_binlog", &key_type_raw, NULL, - reinterpret_cast(&key), &key_len); - key_type.reset(key_type_raw); - if (fetch_result || (key != NULL && key_len != 16)) - { - free_key(); + if (my_key_fetch(PERCONA_BINLOG_KEY_NAME, &system_key_type, NULL, + reinterpret_cast(&system_key), &system_key_len) || + (system_key == NULL && + (my_key_generate(PERCONA_BINLOG_KEY_NAME, "AES", NULL, 16) || + my_key_fetch(PERCONA_BINLOG_KEY_NAME, &system_key_type, NULL, + reinterpret_cast(&system_key), &system_key_len) || + system_key == NULL))) + return true; + + my_free(system_key_type); + DBUG_ASSERT(strncmp(system_key_type, "AES", 3) == 0); + + if (parse_system_key(system_key, system_key_len, &key_version, &key, &key_length) == reinterpret_cast(NullS)) return true; - } - key_type.reset(); +#endif + return false; +} - if (key == NULL) +bool Binlog_crypt_data::init_with_loaded_key(uint sch, const uchar* nonce) +{ + scheme= sch; +#ifdef MYSQL_SERVER + DBUG_ASSERT(key != NULL && nonce != NULL); + memcpy(this->nonce, nonce, BINLOG_NONCE_LENGTH); +#endif + enabled= true; + return false; +} + +bool Binlog_crypt_data::init(uint sch, uint kv, const uchar* nonce) +{ + free_key(key, key_length); +#ifdef MYSQL_SERVER + char *key_type = NULL; + std::ostringstream percona_binlog_with_ver_ss; + percona_binlog_with_ver_ss << PERCONA_BINLOG_KEY_NAME << ':' << kv; + if (my_key_fetch(percona_binlog_with_ver_ss.str().c_str(), &key_type, NULL, + reinterpret_cast(&key), &key_length) || + key == NULL) + return true; + DBUG_ASSERT(strncmp(key_type, "AES", 3) == 0); + my_free(key_type); + + if(init_with_loaded_key(sch, nonce)) { - my_key_generate("percona_binlog", "AES", NULL, 16); - fetch_result = my_key_fetch("percona_binlog", &key_type_raw, NULL, - reinterpret_cast(&key), &key_len); - key_type.reset(key_type_raw); - if (fetch_result || key_len != 16) - { - free_key(); - return true; - } - DBUG_ASSERT(strncmp(key_type.get(), "AES", 3) == 0); + free_key(key, key_length); + return true; } #endif - enabled= true; return false; } diff --git a/sql/binlog_crypt_data.h b/sql/binlog_crypt_data.h index c9a4b714c307..c65f90c5fdc8 100644 --- a/sql/binlog_crypt_data.h +++ b/sql/binlog_crypt_data.h @@ -1,3 +1,19 @@ +/* Copyright (c) 2018 Percona LLC and/or its affiliates. All rights reserved. + + 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 */ + #ifndef BINLOG_CRYPT_DATA_H #define BINLOG_CRYPT_DATA_H @@ -37,9 +53,15 @@ class Binlog_crypt_data { return key_length; } + uint get_key_version() const + { + return key_version; + } - void free_key(); + void free_key(uchar *&key, size_t &key_length); bool init(uint sch, uint kv, const uchar* nonce); + bool init_with_loaded_key(uint sch, const uchar* nonce); + bool load_latest_binlog_key(); void set_iv(uchar* iv, uint32 offs) const; private: diff --git a/sql/item_create.cc b/sql/item_create.cc index 653715f590d3..5ce44f15ba99 100644 --- a/sql/item_create.cc +++ b/sql/item_create.cc @@ -32,6 +32,7 @@ #include "item_sum.h" // Item_sum_udf_str #include "item_timefunc.h" // Item_func_add_time #include "item_xmlfunc.h" // Item_func_xml_extractvalue +#include "item_keyring_func.h" // Item_func_rotate_system_key #include "parse_tree_helpers.h" // PT_item_list #include "sql_class.h" // THD #include "sql_time.h" // str_to_datetime @@ -2133,6 +2134,17 @@ class Create_func_is_ipv6 : public Create_func_arg1 virtual ~Create_func_is_ipv6() {} }; +class Create_func_rotate_system_key : public Create_func_arg1 +{ +public: + virtual Item *create(THD *thd, Item *arg1); + + static Create_func_rotate_system_key s_singleton; + +protected: + Create_func_rotate_system_key() {} + virtual ~Create_func_rotate_system_key() {} +}; class Create_func_is_ipv4_compat : public Create_func_arg1 { @@ -5509,6 +5521,13 @@ Create_func_is_ipv4::create(THD *thd, Item *arg1) return new (thd->mem_root) Item_func_is_ipv4(POS(), arg1); } +Create_func_rotate_system_key Create_func_rotate_system_key::s_singleton; + +Item* +Create_func_rotate_system_key::create(THD *thd, Item *arg1) +{ + return new (thd->mem_root) Item_func_rotate_system_key(POS(), arg1); +} Create_func_is_ipv6 Create_func_is_ipv6::s_singleton; @@ -7621,6 +7640,7 @@ static Native_func_registry func_array[] = { { C_STRING_WITH_LEN("RELEASE_ALL_LOCKS") }, BUILDER(Create_func_release_all_locks) }, { { C_STRING_WITH_LEN("RELEASE_LOCK") }, BUILDER(Create_func_release_lock) }, { { C_STRING_WITH_LEN("REVERSE") }, BUILDER(Create_func_reverse)}, + { { C_STRING_WITH_LEN("ROTATE_SYSTEM_KEY") }, BUILDER(Create_func_rotate_system_key)}, { { C_STRING_WITH_LEN("ROUND") }, BUILDER(Create_func_round)}, { { C_STRING_WITH_LEN("RPAD") }, BUILDER(Create_func_rpad)}, { { C_STRING_WITH_LEN("RTRIM") }, BUILDER(Create_func_rtrim)}, diff --git a/sql/item_keyring_func.cc b/sql/item_keyring_func.cc new file mode 100644 index 000000000000..0485f550a514 --- /dev/null +++ b/sql/item_keyring_func.cc @@ -0,0 +1,74 @@ +/* Copyright (c) 2018 Percona LLC and/or its affiliates. All rights reserved. + + 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 */ + +#include +#include "item_keyring_func.h" +#include +#include +#include +#include "sql_class.h" // THD +#include "system_key.h" + +bool Item_func_rotate_system_key::itemize(Parse_context *pc, Item **res) +{ + if (skip_itemize(res)) + return false; + if (Item_bool_func::itemize(pc, res)) + return true; + pc->thd->lex->set_stmt_unsafe(LEX::BINLOG_STMT_UNSAFE_SYSTEM_FUNCTION); + pc->thd->lex->safe_to_cache_query= false; + return false; +} + +longlong Item_func_rotate_system_key::val_int() +{ + DBUG_ASSERT(fixed); + + if (args[0]->result_type() != STRING_RESULT) // String argument expected + return 0; + + String buffer; + String *arg_str= args[0]->val_str(&buffer); + + if (!arg_str) // Out-of memory happened. The error has been reported. + return 0; // Or: the underlying field is NULL + + return calc_value(arg_str) ? 1 : 0; +} + +bool Item_func_rotate_system_key::calc_value(const String *arg) +{ + bool found= false; + for (uint i= 0; i < valid_percona_system_keys_size; ++i) + { + if (strcmp(valid_percona_system_keys[i], arg->ptr()) == 0) + found = true; + } + return found && !(my_key_generate(arg->ptr(), "AES", NULL, 16)); +} + +bool Item_func_rotate_system_key::fix_fields(THD *thd, Item **ref) +{ + bool res= Item_bool_func::fix_fields(thd, ref); +#ifndef NO_EMBEDDED_ACCESS_CHECKS + if (!res && !thd->security_context()->check_access(SUPER_ACL)) + { + my_error(ER_SPECIFIC_ACCESS_DENIED_ERROR, MYF(0), "SUPER"); + return true; + } +#endif /*NO_EMBEDDED_ACCESS_CHECKS*/ + return res; +} diff --git a/sql/item_keyring_func.h b/sql/item_keyring_func.h new file mode 100644 index 000000000000..52888ba2decb --- /dev/null +++ b/sql/item_keyring_func.h @@ -0,0 +1,39 @@ +/* Copyright (c) 2018 Percona LLC and/or its affiliates. All rights reserved. + + 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 */ + +#include +#include "item_cmpfunc.h" + +class Item_func_rotate_system_key : public Item_bool_func +{ +public: + Item_func_rotate_system_key(const POS &pos, Item *system_key_id) + : Item_bool_func(pos, system_key_id) + { + null_value= false; + } + +public: + virtual longlong val_int(); + virtual const char *func_name() const + { return "rotate_system_key"; } + virtual bool itemize(Parse_context *pc, Item **res); + virtual bool fix_fields(THD *, Item **); + +protected: + virtual bool calc_value(const String *arg); +}; + diff --git a/sql/log_event.cc b/sql/log_event.cc index 1f4755278ef6..7a35a1a00900 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -1530,6 +1530,25 @@ Log_event* Log_event::read_log_event(const char* buf, uint event_len, DBUG_PRINT("info", ("binlog_version: %d", description_event->binlog_version)); DBUG_DUMP("data", (unsigned char*) buf, event_len); +#ifdef MYSQL_CLIENT + static bool was_start_encryption_event = false; + if (was_start_encryption_event) + { + // We know that binlog is encrypted (as we read Start_encryption event) and we know that + // client applications cannot decrypt encrypted binlogs as they have no access to + // keyring. Thus we return Unknown_event for all encrypted events when force is used + // and close mysqlbinlog when no force. + if (!force_opt) + { + *error= "No point in reading encrypted binlog - quitting. " + "Start mysqlbinlog with --force if you want to attempt " + "to read encrypted binlog without decryption."; + DBUG_RETURN(0); + } + DBUG_RETURN(new Unknown_log_event); + } +#endif + /* Check the integrity */ if (event_len < EVENT_LEN_OFFSET || event_len != uint4korr(buf+EVENT_LEN_OFFSET)) @@ -1766,6 +1785,9 @@ Log_event* Log_event::read_log_event(const char* buf, uint event_len, break; case binary_log::START_ENCRYPTION_EVENT: ev = new Start_encryption_log_event(buf, event_len, description_event); +#ifdef MYSQL_CLIENT + was_start_encryption_event= true; +#endif break; case binary_log::ROWS_QUERY_LOG_EVENT: ev= new Rows_query_log_event(buf, event_len, description_event); @@ -5581,6 +5603,21 @@ Format_description_log_event(const char* buf, uint event_len, reset_crypto(); } +bool Format_description_log_event::start_decryption(Start_encryption_log_event* sele) +{ + DBUG_ASSERT(!crypto_data.is_enabled()); + + if (!sele->is_valid()) + return true; + if (crypto_data.init(sele->crypto_scheme, sele->key_version, sele->nonce)) + { + sql_print_error("Failed to fetch percona_binlog key (version %u) from keyring and thus " + "failed to initialize binlog encryption.", sele->key_version); + return true; + } + return false; +} + #ifndef MYSQL_CLIENT bool Format_description_log_event::write(IO_CACHE* file) { diff --git a/sql/log_event.h b/sql/log_event.h index 32111f4246f5..4eeb3ea36cd8 100644 --- a/sql/log_event.h +++ b/sql/log_event.h @@ -1886,14 +1886,7 @@ class Format_description_log_event: public Format_description_event, } Binlog_crypt_data crypto_data; - bool start_decryption(Start_encryption_log_event* sele) - { - DBUG_ASSERT(!crypto_data.is_enabled()); - - if (!sele->is_valid()) - return true; - return crypto_data.init(sele->crypto_scheme, sele->key_version, sele->nonce); - } + bool start_decryption(Start_encryption_log_event* sele); void copy_crypto_data(const Format_description_log_event& o) { diff --git a/unittest/gunit/keyring/CMakeLists.txt b/unittest/gunit/keyring/CMakeLists.txt index fb1bbb6729aa..e41e208d492f 100644 --- a/unittest/gunit/keyring/CMakeLists.txt +++ b/unittest/gunit/keyring/CMakeLists.txt @@ -28,11 +28,13 @@ INCLUDE_DIRECTORIES( ${CMAKE_SOURCE_DIR}/plugin/keyring ${CMAKE_SOURCE_DIR}/plugin/keyring/common ${CMAKE_SOURCE_DIR}/unittest/gunit + ${CMAKE_SOURCE_DIR}/include/mysql ) SET(TESTS keyring-api keys_container + system_keys_container buffered_file_io file_io ) @@ -56,6 +58,8 @@ IF (MERGE_UNITTESTS) ${CMAKE_SOURCE_DIR}/plugin/keyring/common/keyring_key.cc ${CMAKE_SOURCE_DIR}/plugin/keyring/common/keys_container.cc ${CMAKE_SOURCE_DIR}/plugin/keyring/common/keys_iterator.cc + ${CMAKE_SOURCE_DIR}/plugin/keyring/common/system_keys_container.cc + ${CMAKE_SOURCE_DIR}/plugin/keyring/common/system_key_adapter.cc ${CMAKE_SOURCE_DIR}/plugin/keyring/buffered_file_io.cc ${CMAKE_SOURCE_DIR}/plugin/keyring/file_io.cc ${CMAKE_SOURCE_DIR}/plugin/keyring/buffer.cc @@ -85,6 +89,8 @@ ENDIF(MERGE_UNITTESTS) SET(SRC_FILES ${test}-t.cc ${CMAKE_SOURCE_DIR}/plugin/keyring/common/keyring_key.cc ${CMAKE_SOURCE_DIR}/plugin/keyring/common/keys_container.cc + ${CMAKE_SOURCE_DIR}/plugin/keyring/common/system_keys_container.cc + ${CMAKE_SOURCE_DIR}/plugin/keyring/common/system_key_adapter.cc ${CMAKE_SOURCE_DIR}/plugin/keyring/buffered_file_io.cc ${CMAKE_SOURCE_DIR}/plugin/keyring/file_io.cc ${CMAKE_SOURCE_DIR}/plugin/keyring/buffer.cc diff --git a/unittest/gunit/keyring/keyring-api-t.cc b/unittest/gunit/keyring/keyring-api-t.cc index eeba96322265..c4ade2b6da25 100644 --- a/unittest/gunit/keyring/keyring-api-t.cc +++ b/unittest/gunit/keyring/keyring-api-t.cc @@ -40,9 +40,9 @@ namespace keyring__api_unittest protected: virtual void SetUp() { - plugin_name= new char[strlen("FakeKeyring")+1]; + plugin_name= new char[strlen("FakeKeyring") + 1]; strcpy(plugin_name, "FakeKeyring"); - keyring_filename= new char[strlen("./keyring")+1]; + keyring_filename= new char[strlen("./keyring") + 1]; strcpy(keyring_filename, "./keyring"); plugin_info.name.str= plugin_name; @@ -96,7 +96,7 @@ namespace keyring__api_unittest EXPECT_EQ(mysql_key_fetch("Robert_key", &key_type, "Robert", &key, &key_len), 0); EXPECT_STREQ("AES", key_type); - EXPECT_EQ(key_len, sample_key_data.length()+1); + EXPECT_EQ(key_len, sample_key_data.length() + 1); ASSERT_TRUE(memcmp((char *)key, sample_key_data.c_str(), key_len) == 0); my_free(key_type); key_type= NULL; @@ -127,12 +127,12 @@ namespace keyring__api_unittest //make sure that the key was xored before it was put into keys_container, i.e. //the fetched key data is not equal to the key data that was stored EXPECT_STRNE(sample_key_data.c_str(), reinterpret_cast(key_data_fetched)); - ASSERT_TRUE(sample_key_data.length()+1 == key_data_fetched_size); + ASSERT_TRUE(sample_key_data.length() + 1 == key_data_fetched_size); //now xor to get the data that was stored fetched_key->xor_data(); EXPECT_STREQ(sample_key_data.c_str(), reinterpret_cast(key_data_fetched)); - ASSERT_TRUE(sample_key_data.length()+1 == key_data_fetched_size); + ASSERT_TRUE(sample_key_data.length() + 1 == key_data_fetched_size); my_free(fetched_key->release_key_data()); } @@ -179,14 +179,14 @@ namespace keyring__api_unittest EXPECT_EQ(mysql_key_fetch("Robert_key1", &key_type, "Robert", &key, &key_len), 0); EXPECT_STREQ("AES", key_type); - EXPECT_EQ(key_len, key_data1.length()+1); + EXPECT_EQ(key_len, key_data1.length() + 1); ASSERT_TRUE(memcmp((char *)key, key_data1.c_str(), key_len) == 0); my_free(key_type); key_type= NULL; my_free(key); key= NULL; EXPECT_EQ(mysql_key_remove("Robert_key2", "Robert"), 0); - //make sure the key was removed - fetch it + // make sure the key was removed - fetch it EXPECT_EQ(mysql_key_fetch("Robert_key2", &key_type, "Robert", &key, &key_len), 0); ASSERT_TRUE(key == NULL); @@ -223,6 +223,229 @@ namespace keyring__api_unittest sample_key_data.length() + 1), 1); } + TEST_F(Keyring_api_test, StorePBStoreSKFetchPBRemovePB) + { + EXPECT_EQ(mysql_key_store("percona_binlog", "AES", NULL, sample_key_data.c_str(), + sample_key_data.length() + 1), 0); + EXPECT_EQ(mysql_key_store("percona_RGRGRG_1", "AES", NULL, "1234_", + strlen("1234_") + 1), 0); + char *key_type= NULL; + size_t key_len= 0; + void *key= NULL; + EXPECT_EQ(mysql_key_fetch("percona_binlog", &key_type, NULL, &key, + &key_len), 0); + EXPECT_STREQ("AES", key_type); + std::string key_data_with_version= "0:" + sample_key_data; + EXPECT_EQ(key_len, key_data_with_version.length() + 1); + ASSERT_TRUE(memcmp(reinterpret_cast(key), key_data_with_version.c_str(), key_len) == 0); + my_free(key_type); + key_type= NULL; + my_free(key); + key= NULL; + EXPECT_EQ(mysql_key_remove("percona_binlog", NULL), 1); + // make sure the key was not removed - fetch it + EXPECT_EQ(mysql_key_fetch("percona_binlog", &key_type, NULL, &key, + &key_len), 0); + EXPECT_STREQ("AES", key_type); + EXPECT_EQ(key_len, key_data_with_version.length() + 1); + ASSERT_TRUE(memcmp(reinterpret_cast(key), key_data_with_version.c_str(), key_len) == 0); + my_free(key_type); + my_free(key); + } + + TEST_F(Keyring_api_test, GeneratePBFetchPBRotatePBFetchPB) + { + EXPECT_EQ(mysql_key_generate("percona_binlog", "AES", NULL, 16), 0); + + char *key_type= NULL; + size_t key_len= 0; + void *key_ver0= NULL; + EXPECT_EQ(mysql_key_fetch("percona_binlog", &key_type, NULL, &key_ver0, + &key_len), 0); + EXPECT_STREQ("AES", key_type); + EXPECT_EQ(key_len, static_cast(18)); + ASSERT_TRUE(memcmp(reinterpret_cast(key_ver0), "0:", 2) == 0); + my_free(key_type); + key_type= NULL; + + void *key_ver1= NULL; + EXPECT_EQ(mysql_key_generate("percona_binlog", "AES", NULL, 16), 0); + + EXPECT_EQ(mysql_key_fetch("percona_binlog", &key_type, NULL, &key_ver1, + &key_len), 0); + EXPECT_STREQ("AES", key_type); + EXPECT_EQ(key_len, static_cast(18)); + ASSERT_TRUE(memcmp(reinterpret_cast(key_ver1), "1:", 2) == 0); + my_free(key_type); + key_type= NULL; + + // make sure that rotated key is different than the original one + ASSERT_TRUE(memcmp(reinterpret_cast(key_ver0) + 2, reinterpret_cast(key_ver1) + 2, 16) != 0); + + my_free(key_ver0); + my_free(key_ver1); + } + + TEST_F(Keyring_api_test, GeneratePBRotatePBFetchFirstVersionFetchLatestPB) + { + EXPECT_EQ(mysql_key_generate("percona_binlog", "AES", NULL, 16), 0); + + EXPECT_EQ(mysql_key_generate("percona_binlog", "AES", NULL, 16), 0); + + char *key_type= NULL; + size_t key_len= 0; + void *key_ver0= NULL; + + EXPECT_EQ(mysql_key_fetch("percona_binlog:0", &key_type, NULL, &key_ver0, + &key_len), 0); + EXPECT_STREQ("AES", key_type); + EXPECT_EQ(key_len, static_cast(16)); + my_free(key_type); + key_type= NULL; + + void *key_ver1= NULL; + + EXPECT_EQ(mysql_key_fetch("percona_binlog", &key_type, NULL, &key_ver1, + &key_len), 0); + EXPECT_STREQ("AES", key_type); + EXPECT_EQ(key_len, static_cast(18)); + ASSERT_TRUE(memcmp(reinterpret_cast(key_ver1), "1:", 2) == 0); + my_free(key_type); + key_type= NULL; + + // make sure that rotated key is different than the original one + ASSERT_TRUE(memcmp(reinterpret_cast(key_ver0) + 2, reinterpret_cast(key_ver1) + 2, 16) != 0); + + my_free(key_ver0); + my_free(key_ver1); + } + + TEST_F(Keyring_api_test, StorePBRotatePBFetchFirstVersionFetchLatestPB) + { + std::string percona_binlog_key_ver0_data("key_ver0"); + + EXPECT_EQ(mysql_key_store("percona_binlog", "AES", NULL, percona_binlog_key_ver0_data.c_str(), + percona_binlog_key_ver0_data.length() + 1), 0); + + std::string percona_binlog_key_ver1_data("key_ver1"); + + EXPECT_EQ(mysql_key_store("percona_binlog", "AES", NULL, percona_binlog_key_ver1_data.c_str(), + percona_binlog_key_ver1_data.length() + 1), 0); + + char *key_type= NULL; + size_t key_len= 0; + void *key_ver0= NULL; + + EXPECT_EQ(mysql_key_fetch("percona_binlog:0", &key_type, NULL, &key_ver0, + &key_len), 0); + EXPECT_STREQ("AES", key_type); + EXPECT_EQ(key_len, percona_binlog_key_ver0_data.length() + 1); + ASSERT_TRUE(memcmp(reinterpret_cast(key_ver0), percona_binlog_key_ver0_data.c_str(), key_len) == 0); + my_free(key_type); + key_type= NULL; + + void *key_ver1= NULL; + + EXPECT_EQ(mysql_key_fetch("percona_binlog", &key_type, NULL, &key_ver1, + &key_len), 0); + EXPECT_STREQ("AES", key_type); + EXPECT_EQ(key_len, percona_binlog_key_ver1_data.length() + 3); + std::string expected_percona_binlog_key_ver1_data_with_verion= "1:" + percona_binlog_key_ver1_data; + ASSERT_TRUE(memcmp(reinterpret_cast(key_ver1), expected_percona_binlog_key_ver1_data_with_verion.c_str(), key_len) == 0); + my_free(key_type); + key_type= NULL; + + my_free(key_ver0); + my_free(key_ver1); + } + + TEST_F(Keyring_api_test, RotatePBStoreSKFetchPBRotatePBFetchPBRotatePBRotateSKFetchPBFetchSK) + { + std::string percona_binlog_key_data_1("key1"); + + EXPECT_EQ(mysql_key_store("percona_binlog", "AES", NULL, percona_binlog_key_data_1.c_str(), + percona_binlog_key_data_1.length() + 1), 0); + + std::string percona_sk_data_1("system_key1"); + + EXPECT_EQ(mysql_key_store("percona_sk", "AES", NULL, percona_sk_data_1.c_str(), + percona_sk_data_1.length() + 1), 0); + + char *key_type= NULL; + size_t key_len= 0; + void *key= NULL; + EXPECT_EQ(mysql_key_fetch("percona_binlog", &key_type, NULL, &key, + &key_len), 0); + EXPECT_STREQ("AES", key_type); + std::string key_data_with_version= "0:" + percona_binlog_key_data_1; + EXPECT_EQ(key_len, key_data_with_version.length() + 1); + ASSERT_TRUE(memcmp(reinterpret_cast(key), key_data_with_version.c_str(), key_len) == 0); + my_free(key_type); + key_type= NULL; + my_free(key); + key= NULL; + + std::string percona_binlog_key_data_2("key2"); + + EXPECT_EQ(mysql_key_store("percona_binlog", "AES", NULL, percona_binlog_key_data_2.c_str(), + percona_binlog_key_data_2.length() + 1), 0); + + EXPECT_EQ(mysql_key_fetch("percona_binlog", &key_type, NULL, &key, + &key_len), 0); + EXPECT_STREQ("AES", key_type); + key_data_with_version= "1:" + percona_binlog_key_data_2; + EXPECT_EQ(key_len, key_data_with_version.length() + 1); + ASSERT_TRUE(memcmp(reinterpret_cast(key), key_data_with_version.c_str(), key_len) == 0); + my_free(key_type); + key_type= NULL; + my_free(key); + key= NULL; + + std::string percona_binlog_key_data_3("key3___"); + + EXPECT_EQ(mysql_key_store("percona_binlog", "AES", NULL, percona_binlog_key_data_3.c_str(), + percona_binlog_key_data_3.length() + 1), 0); + + std::string percona_sk_data_2("percona_sk_data2"); + + EXPECT_EQ(mysql_key_store("percona_sk", "AES", NULL, percona_sk_data_2.c_str(), + percona_sk_data_2.length() + 1), 0); + + EXPECT_EQ(mysql_key_fetch("percona_binlog", &key_type, NULL, &key, + &key_len), 0); + EXPECT_STREQ("AES", key_type); + key_data_with_version= "2:" + percona_binlog_key_data_3; + EXPECT_EQ(key_len, key_data_with_version.length() + 1); + ASSERT_TRUE(memcmp(reinterpret_cast(key), key_data_with_version.c_str(), key_len) == 0); + my_free(key_type); + key_type= NULL; + my_free(key); + key= NULL; + + EXPECT_EQ(mysql_key_fetch("percona_sk", &key_type, NULL, &key, + &key_len), 0); + EXPECT_STREQ("AES", key_type); + key_data_with_version= "1:" + percona_sk_data_2; + EXPECT_EQ(key_len, key_data_with_version.length() + 1); + ASSERT_TRUE(memcmp(reinterpret_cast(key), key_data_with_version.c_str(), key_len) == 0); + my_free(key_type); + key_type= NULL; + my_free(key); + key= NULL; + + } + + TEST_F(Keyring_api_test, FetchSystemKeyOnJustInitializedContainer) + { + char *key_type= NULL; + size_t key_len= 0; + void *key= NULL; + + EXPECT_EQ(mysql_key_fetch("percona_binlog", &key_type, NULL, &key, + &key_len), 0); + ASSERT_TRUE(key == NULL); + } + TEST_F(Keyring_api_test, KeyGenerate) { EXPECT_EQ(mysql_key_generate("Robert_key", "AES", "Robert", 128), 0); @@ -251,15 +474,16 @@ namespace keyring__api_unittest EXPECT_EQ(mysql_key_fetch("Robert_key", &key_type, "Robert", &key, &key_len), 0); EXPECT_STREQ("AES", key_type); - EXPECT_EQ(key_len, sample_key_data.length()+1); + EXPECT_EQ(key_len, sample_key_data.length() + 1); ASSERT_TRUE(memcmp((char *)key, sample_key_data.c_str(), key_len) == 0); my_free(key_type); key_type= NULL; my_free(key); key= NULL; delete[] keyring_filename; - keyring_filename= new char[strlen("./new_keyring")+1]; + keyring_filename= new char[strlen("./new_keyring") + 1]; strcpy(keyring_filename, "./new_keyring"); + remove(keyring_filename); // just to make sure new_keyring does not exist keyring_file_data_value= keyring_filename; keyring_deinit_with_mock_logger(); keyring_init_with_mock_logger(); @@ -269,7 +493,7 @@ namespace keyring__api_unittest EXPECT_EQ(mysql_key_store("Robert_key_new", "AES", "Robert", sample_key_data.c_str(), sample_key_data.length() + 1), 0); delete[] keyring_filename; - keyring_filename= new char[strlen("./keyring")+1]; + keyring_filename= new char[strlen("./keyring") + 1]; strcpy(keyring_filename, "./keyring"); keyring_file_data_value= keyring_filename; keyring_deinit_with_mock_logger(); @@ -280,14 +504,14 @@ namespace keyring__api_unittest EXPECT_EQ(mysql_key_fetch("Robert_key", &key_type, "Robert", &key, &key_len), 0); EXPECT_STREQ("AES", key_type); - EXPECT_EQ(key_len, sample_key_data.length()+1); + EXPECT_EQ(key_len, sample_key_data.length() + 1); ASSERT_TRUE(memcmp((char *)key, sample_key_data.c_str(), key_len) == 0); my_free(key_type); key_type= NULL; my_free(key); key= NULL; delete[] keyring_filename; - keyring_filename= new char[strlen("./new_keyring")+1]; + keyring_filename= new char[strlen("./new_keyring") + 1]; strcpy(keyring_filename, "./new_keyring"); keyring_file_data_value= keyring_filename; keyring_deinit_with_mock_logger(); @@ -295,13 +519,16 @@ namespace keyring__api_unittest EXPECT_EQ(mysql_key_fetch("Robert_key_new", &key_type, "Robert", &key, &key_len), 0); EXPECT_STREQ("AES", key_type); - EXPECT_EQ(key_len, sample_key_data.length()+1); + EXPECT_EQ(key_len, sample_key_data.length() + 1); ASSERT_TRUE(memcmp((char *)key, sample_key_data.c_str(), key_len) == 0); my_free(key_type); key_type= NULL; my_free(key); key= NULL; remove("./new_keyring"); + // backup will stay as adding percona_binlog key will be unsuccessful - we have already added it in + // keyring + remove("./new_keyring.backup"); } TEST_F(Keyring_api_test, NullUser) @@ -314,7 +541,7 @@ namespace keyring__api_unittest EXPECT_EQ(mysql_key_fetch("Robert_key", &key_type, NULL, &key, &key_len), 0); EXPECT_STREQ("AES", key_type); - EXPECT_EQ(key_len, sample_key_data.length()+1); + EXPECT_EQ(key_len, sample_key_data.length() + 1); ASSERT_TRUE(memcmp((char *)key, sample_key_data.c_str(), key_len) == 0); my_free(key_type); key_type= NULL; @@ -327,7 +554,7 @@ namespace keyring__api_unittest EXPECT_EQ(mysql_key_fetch("Kamil_key", &key_type, NULL, &key, &key_len), 0); EXPECT_STREQ("AES", key_type); - EXPECT_EQ(key_len, sample_key_data.length()+1); + EXPECT_EQ(key_len, sample_key_data.length() + 1); ASSERT_TRUE(memcmp((char *)key, sample_key_data.c_str(), key_len) == 0); my_free(key_type); key_type= NULL; @@ -339,7 +566,7 @@ namespace keyring__api_unittest EXPECT_EQ(mysql_key_fetch("Artur_key", &key_type, "Artur", &key, &key_len), 0); EXPECT_STREQ("AES", key_type); - EXPECT_EQ(key_len, arturs_key_data.length()+1); + EXPECT_EQ(key_len, arturs_key_data.length() + 1); ASSERT_TRUE(memcmp((char *)key, arturs_key_data.c_str(), key_len) == 0); my_free(key_type); key_type= NULL; @@ -352,7 +579,7 @@ namespace keyring__api_unittest EXPECT_EQ(mysql_key_fetch("Artur_key", &key_type, "Artur", &key, &key_len), 0); EXPECT_STREQ("AES", key_type); - EXPECT_EQ(key_len, arturs_key_data.length()+1); + EXPECT_EQ(key_len, arturs_key_data.length() + 1); ASSERT_TRUE(memcmp((char *)key, arturs_key_data.c_str(), key_len) == 0); my_free(key_type); key_type= NULL; diff --git a/unittest/gunit/keyring/keys_container-t.cc b/unittest/gunit/keyring/keys_container-t.cc index 9b3e5aa9fa6e..dee497f64a6f 100644 --- a/unittest/gunit/keyring/keys_container-t.cc +++ b/unittest/gunit/keyring/keys_container-t.cc @@ -273,7 +273,367 @@ namespace keyring__keys_container_unittest ASSERT_TRUE(keys_container->get_number_of_keys() == 3); my_free(fetched_key->release_key_data()); -} + } + + TEST_F(Keys_container_test, StorePBStorePBStorePBStoreIK1StoreIK2FetchPBFetchIK) + { + IKeyring_io *keyring_io= new Buffered_file_io(logger); + EXPECT_EQ(keys_container->init(keyring_io, file_name), 0); + + std::string key_data1("system_key_data_1"); + Key *key1= new Key("percona_binlog:0", "AES", NULL, key_data1.c_str(), key_data1.length() + 1); + key1->xor_data(); + EXPECT_EQ(keys_container->store_key(key1), 0); + ASSERT_TRUE(keys_container->get_number_of_keys() == 1); + + std::string key_data2("system_key_data_2"); + Key *key2= new Key("percona_binlog:1", "AES", NULL, key_data2.c_str(), key_data2.length() + 1); + key2->xor_data(); + EXPECT_EQ(keys_container->store_key(key2), 0); + ASSERT_TRUE(keys_container->get_number_of_keys() == 2); + + std::string key_data3("system_key_data_3"); + Key *key3= new Key("percona_binlog:2", "AES", NULL, key_data3.c_str(), key_data3.length() + 1); + key3->xor_data(); + EXPECT_EQ(keys_container->store_key(key3), 0); + ASSERT_TRUE(keys_container->get_number_of_keys() == 3); + + std::string ik_data1("data1"); + + Key *innodb_key1= new Key("percona_innodb1_2_3:0:0", "AES", NULL, ik_data1.c_str(), ik_data1.length() + 1); + innodb_key1->xor_data(); + EXPECT_EQ(keys_container->store_key(innodb_key1), 0); + ASSERT_TRUE(keys_container->get_number_of_keys() == 4); + + std::string ik_data2("data2"); + + Key *innodb_key2= new Key("percona_innodb1_2_3:0:1", "AES", NULL, ik_data2.c_str(), ik_data2.length() + 1); + innodb_key2->xor_data(); + EXPECT_EQ(keys_container->store_key(innodb_key2), 0); + ASSERT_TRUE(keys_container->get_number_of_keys() == 5); + + Key latest_percona_binlog_key("percona_binlog", NULL, NULL, NULL, 0); + IKey* fetched_key= keys_container->fetch_key(&latest_percona_binlog_key); + ASSERT_TRUE(fetched_key != NULL); + + Key key(fetched_key->get_key_id()->c_str(), fetched_key->get_key_type()->c_str(), fetched_key->get_user_id()->c_str(), + fetched_key->get_key_data(), fetched_key->get_key_data_size()); + key.xor_data(); + + std::string expected_key_signature= "percona_binlog"; + EXPECT_STREQ(key.get_key_signature()->c_str(), expected_key_signature.c_str()); + EXPECT_EQ(key.get_key_signature()->length(), expected_key_signature.length()); + uchar* key_data_fetched= key.get_key_data(); + size_t key_data_fetched_size= key.get_key_data_size(); + std::string key_data_with_version = "2:" + key_data3; + EXPECT_STREQ(key_data_with_version.c_str(), reinterpret_cast(key_data_fetched)); + EXPECT_STREQ("AES", fetched_key->get_key_type()->c_str()); + ASSERT_TRUE(key_data_with_version.length() + 1 == key_data_fetched_size); + + Key latest_innodb_key("percona_innodb1_2_3:0", NULL, NULL, NULL, 0); + IKey* fetched_innodb_key= keys_container->fetch_key(&latest_innodb_key); + ASSERT_TRUE(fetched_innodb_key != NULL); + + Key innodb_key(fetched_innodb_key->get_key_id()->c_str(), fetched_innodb_key->get_key_type()->c_str(), fetched_innodb_key->get_user_id()->c_str(), + fetched_innodb_key->get_key_data(), fetched_innodb_key->get_key_data_size()); + innodb_key.xor_data(); + + expected_key_signature= "percona_innodb1_2_3:0"; + EXPECT_STREQ(innodb_key.get_key_signature()->c_str(), expected_key_signature.c_str()); + EXPECT_EQ(innodb_key.get_key_signature()->length(), expected_key_signature.length()); + key_data_fetched= innodb_key.get_key_data(); + key_data_fetched_size= innodb_key.get_key_data_size(); + key_data_with_version = "1:" + ik_data2; + EXPECT_STREQ(key_data_with_version.c_str(), reinterpret_cast(key_data_fetched)); + EXPECT_STREQ("AES", fetched_key->get_key_type()->c_str()); + ASSERT_TRUE(key_data_with_version.length() + 1 == key_data_fetched_size); + + my_free(fetched_key->release_key_data()); + my_free(fetched_innodb_key->release_key_data()); + + delete sample_key; // unused in this test + } + + TEST_F(Keys_container_test, StorePBRotatePBFetchPBStoreSKRotatePBFetchPBRotateSKFetchSK) + { + IKeyring_io *keyring_io= new Buffered_file_io(logger); + EXPECT_EQ(keys_container->init(keyring_io, file_name), FALSE); + + std::string key_data1("system_key_data_1"); + Key *key1= new Key("percona_binlog:0", "AES", NULL, key_data1.c_str(), key_data1.length() + 1); + key1->xor_data(); + + EXPECT_EQ(keys_container->store_key(key1), FALSE); + ASSERT_TRUE(keys_container->get_number_of_keys() == 1); + + std::string key_data2("system_key_data_2"); + Key *percona_binlog_rotation= new Key("percona_binlog", "AES", NULL, key_data2.c_str(), key_data2.length() + 1); + percona_binlog_rotation->xor_data(); + EXPECT_EQ(keys_container->store_key(percona_binlog_rotation), FALSE); + ASSERT_TRUE(keys_container->get_number_of_keys() == 2); + + Key latest_percona_binlog_key("percona_binlog", NULL, NULL, NULL, 0); + IKey* fetched_key= keys_container->fetch_key(&latest_percona_binlog_key); + + ASSERT_TRUE(fetched_key != NULL); + + Key key(fetched_key->get_key_id()->c_str(), fetched_key->get_key_type()->c_str(), fetched_key->get_user_id()->c_str(), + fetched_key->get_key_data(), fetched_key->get_key_data_size()); + key.xor_data(); + + std::string expected_key_signature= "percona_binlog"; + EXPECT_STREQ(key.get_key_signature()->c_str(), expected_key_signature.c_str()); + EXPECT_EQ(key.get_key_signature()->length(), expected_key_signature.length()); + uchar* key_data_fetched= key.get_key_data(); + size_t key_data_fetched_size= key.get_key_data_size(); + std::string key_data_with_version = "1:" + key_data2; + EXPECT_STREQ(key_data_with_version.c_str(), reinterpret_cast(key_data_fetched)); + EXPECT_STREQ("AES", fetched_key->get_key_type()->c_str()); + ASSERT_TRUE(key_data_with_version.length() + 1 == key_data_fetched_size); + + std::string sk_data1("sk_data_1"); + Key *sys_key1= new Key("percona_sk:0", "AES", NULL, sk_data1.c_str(), sk_data1.length() + 1); + sys_key1->xor_data(); + + EXPECT_EQ(keys_container->store_key(sys_key1), FALSE); + ASSERT_TRUE(keys_container->get_number_of_keys() == 3); + + std::string key_data3("system_key_data_3"); + Key *percona_binlog_rotation1_to_2= new Key("percona_binlog", "AES", NULL, key_data3.c_str(), key_data3.length() + 1); + percona_binlog_rotation1_to_2->xor_data(); + EXPECT_EQ(keys_container->store_key(percona_binlog_rotation1_to_2), FALSE); + ASSERT_TRUE(keys_container->get_number_of_keys() == 4); + + Key latest_percona_binlog_key_2("percona_binlog", NULL, NULL, NULL, 0); + IKey* fetched_key_2= keys_container->fetch_key(&latest_percona_binlog_key_2); + + ASSERT_TRUE(fetched_key_2 != NULL); + + Key key_2(fetched_key_2->get_key_id()->c_str(), fetched_key_2->get_key_type()->c_str(), fetched_key_2->get_user_id()->c_str(), + fetched_key_2->get_key_data(), fetched_key_2->get_key_data_size()); + key_2.xor_data(); + + EXPECT_STREQ(key_2.get_key_signature()->c_str(), expected_key_signature.c_str()); + EXPECT_EQ(key_2.get_key_signature()->length(), expected_key_signature.length()); + key_data_fetched= key_2.get_key_data(); + key_data_fetched_size= key_2.get_key_data_size(); + key_data_with_version = "2:" + key_data3; + EXPECT_STREQ(key_data_with_version.c_str(), reinterpret_cast(key_data_fetched)); + EXPECT_STREQ("AES", fetched_key->get_key_type()->c_str()); + ASSERT_TRUE(key_data_with_version.length() + 1 == key_data_fetched_size); + + std::string key_data4("system_key_data_4"); + Key *percona_binlog_rotation2_to_3= new Key("percona_binlog", "AES", NULL, key_data4.c_str(), key_data4.length() + 1); + percona_binlog_rotation2_to_3->xor_data(); + EXPECT_EQ(keys_container->store_key(percona_binlog_rotation2_to_3), FALSE); + ASSERT_TRUE(keys_container->get_number_of_keys() == 5); + + Key latest_percona_binlog_key_3("percona_binlog", NULL, NULL, NULL, 0); + IKey* fetched_key_3= keys_container->fetch_key(&latest_percona_binlog_key_3); + + ASSERT_TRUE(fetched_key_3 != NULL); + + Key key_3(fetched_key_3->get_key_id()->c_str(), fetched_key_3->get_key_type()->c_str(), fetched_key_3->get_user_id()->c_str(), + fetched_key_3->get_key_data(), fetched_key_3->get_key_data_size()); + key_3.xor_data(); + + EXPECT_STREQ(key_3.get_key_signature()->c_str(), expected_key_signature.c_str()); + EXPECT_EQ(key_3.get_key_signature()->length(), expected_key_signature.length()); + key_data_fetched= key_3.get_key_data(); + key_data_fetched_size= key_3.get_key_data_size(); + key_data_with_version = "3:" + key_data4; + EXPECT_STREQ(key_data_with_version.c_str(), reinterpret_cast(key_data_fetched)); + EXPECT_STREQ("AES", fetched_key->get_key_type()->c_str()); + ASSERT_TRUE(key_data_with_version.length() + 1 == key_data_fetched_size); + + std::string sk_data2("sk_data_2"); + Key *percona_sk_rotation1_to_2= new Key("percona_sk", "AES", NULL, sk_data2.c_str(), sk_data2.length() + 1); + percona_sk_rotation1_to_2->xor_data(); + EXPECT_EQ(keys_container->store_key(percona_sk_rotation1_to_2), FALSE); + ASSERT_TRUE(keys_container->get_number_of_keys() == 6); + + Key latest_sk("percona_sk", NULL, NULL, NULL, 0); + IKey* fetched_sk= keys_container->fetch_key(&latest_sk); + + ASSERT_TRUE(fetched_sk != NULL); + + Key sk(fetched_sk->get_key_id()->c_str(), fetched_sk->get_key_type()->c_str(), fetched_sk->get_user_id()->c_str(), + fetched_sk->get_key_data(), fetched_sk->get_key_data_size()); + sk.xor_data(); + + expected_key_signature= "percona_sk"; + EXPECT_STREQ(sk.get_key_signature()->c_str(), expected_key_signature.c_str()); + EXPECT_EQ(sk.get_key_signature()->length(), expected_key_signature.length()); + key_data_fetched= sk.get_key_data(); + key_data_fetched_size= sk.get_key_data_size(); + key_data_with_version = "1:" + sk_data2; + EXPECT_STREQ(key_data_with_version.c_str(), reinterpret_cast(key_data_fetched)); + EXPECT_STREQ("AES", fetched_sk->get_key_type()->c_str()); + ASSERT_TRUE(key_data_with_version.length() + 1 == key_data_fetched_size); + + my_free(fetched_key->release_key_data()); + my_free(fetched_key_2->release_key_data()); + my_free(fetched_key_3->release_key_data()); + my_free(fetched_sk->release_key_data()); + + delete sample_key; // unused in this test + } + + TEST_F(Keys_container_test, StoreStoreStoreSystemKeyAndTryRemovingSystemKey) + { + IKeyring_io *keyring_io= new Buffered_file_io(logger); + EXPECT_EQ(keys_container->init(keyring_io, file_name), 0); + + std::string key_data1("system_key_data_1"); + Key *key1= new Key("percona_binlog:0", "AES", NULL, key_data1.c_str(), key_data1.length() + 1); + + EXPECT_EQ(keys_container->store_key(key1), 0); + ASSERT_TRUE(keys_container->get_number_of_keys() == 1); + + std::string key_data2("system_key_data_2"); + Key *key2= new Key("percona_binlog:1", "AES", NULL, key_data2.c_str(), key_data2.length() + 1); + EXPECT_EQ(keys_container->store_key(key2), 0); + ASSERT_TRUE(keys_container->get_number_of_keys() == 2); + + std::string key_data3("system_key_data_3"); + Key *key3= new Key("percona_binlog:2", "AES", NULL, key_data3.c_str(), key_data3.length() + 1); + EXPECT_EQ(keys_container->store_key(key3), 0); + ASSERT_TRUE(keys_container->get_number_of_keys() == 3); + + Key latest_percona_binlog_key("percona_binlog:2", NULL, NULL, NULL, 0); + ASSERT_TRUE(keys_container->remove_key(&latest_percona_binlog_key) == TRUE); + ASSERT_TRUE(keys_container->get_number_of_keys() == 3); + + Key percona_binlog_key("percona_binlog", NULL, NULL, NULL, 0); + ASSERT_TRUE(keys_container->remove_key(&percona_binlog_key) == TRUE); + ASSERT_TRUE(keys_container->get_number_of_keys() == 3); + + delete sample_key; // unused in this test + } + + TEST_F(Keys_container_test, StoreStoreStoreRemoveFetchSystemKeyFetchRegularKey) + { + IKeyring_io *keyring_io= new Buffered_file_io(logger); + EXPECT_EQ(keys_container->init(keyring_io, file_name), 0); + + std::string key_data1("system_key_data_1"); + Key *key1= new Key("percona_binlog:0", "AES", NULL, key_data1.c_str(), key_data1.length() + 1); + + EXPECT_EQ(keys_container->store_key(key1), 0); + ASSERT_TRUE(keys_container->get_number_of_keys() == 1); + + std::string key_data2("system_key_data_2"); + Key *key2= new Key("percona_binlog:1", "AES", NULL, key_data2.c_str(), key_data2.length() + 1); + key2->xor_data(); + EXPECT_EQ(keys_container->store_key(key2), 0); + ASSERT_TRUE(keys_container->get_number_of_keys() == 2); + + std::string key_data3("Robi3"); + Key *key3= new Key("Roberts_key3", "AES", "Robert", key_data3.c_str(), key_data3.length() + 1); + EXPECT_EQ(keys_container->store_key(key3), 0); + ASSERT_TRUE(keys_container->get_number_of_keys() == 3); + + std::string key_data4("Robi4"); + Key *key4= new Key("Roberts_key4", "AES", "Robert", key_data4.c_str(), key_data4.length() + 1); + EXPECT_EQ(keys_container->store_key(key4), 0); + ASSERT_TRUE(keys_container->get_number_of_keys() == 4); + + Key key3_id("Roberts_key3", "AES", "Robert",NULL,0); + keys_container->remove_key(&key3_id); + ASSERT_TRUE(keys_container->get_number_of_keys() == 3); + + Key latest_percona_binlog_key("percona_binlog", NULL, NULL, NULL, 0); + IKey* fetched_key= keys_container->fetch_key(&latest_percona_binlog_key); + + ASSERT_TRUE(fetched_key != NULL); + + Key key(fetched_key->get_key_id()->c_str(), fetched_key->get_key_type()->c_str(), fetched_key->get_user_id()->c_str(), + fetched_key->get_key_data(), fetched_key->get_key_data_size()); + key.xor_data(); + + std::string expected_key_signature= "percona_binlog"; + EXPECT_STREQ(key.get_key_signature()->c_str(), expected_key_signature.c_str()); + EXPECT_EQ(key.get_key_signature()->length(), expected_key_signature.length()); + uchar *key_data_fetched= key.get_key_data(); + size_t key_data_fetched_size= key.get_key_data_size(); + std::string key_data_with_version = "1:" + key_data2; + EXPECT_STREQ(key_data_with_version.c_str(), reinterpret_cast(key_data_fetched)); + EXPECT_STREQ("AES", fetched_key->get_key_type()->c_str()); + ASSERT_TRUE(key_data_with_version.length() + 1 == key_data_fetched_size); + + my_free(fetched_key->release_key_data()); + + Key regular_key("Roberts_key4", NULL, "Robert", NULL, 0); + IKey *fetched_regular_key= keys_container->fetch_key(®ular_key); + + ASSERT_TRUE(fetched_regular_key != NULL); + std::string expected_regular_key_signature= "Roberts_key4Robert"; + EXPECT_STREQ(fetched_regular_key->get_key_signature()->c_str(), expected_regular_key_signature.c_str()); + EXPECT_EQ(fetched_regular_key->get_key_signature()->length(), expected_regular_key_signature.length()); + uchar *regular_key_data_fetched= fetched_regular_key->get_key_data(); + size_t regular_key_data_fetched_size= fetched_regular_key->get_key_data_size(); + EXPECT_STREQ(key_data4.c_str(), reinterpret_cast(regular_key_data_fetched)); + ASSERT_TRUE(key_data4.length() + 1 == regular_key_data_fetched_size); + + my_free(fetched_regular_key->release_key_data()); + delete sample_key; // unused in this test + + } + + TEST_F(Keys_container_test, StoreFetchSystemKey) + { + IKeyring_io *keyring_io= new Buffered_file_io(logger); + EXPECT_EQ(keys_container->init(keyring_io, file_name), 0); + + std::string key_data1("system_key_data_1"); + Key *key1= new Key("percona_binlog:0", "AES", NULL, key_data1.c_str(), key_data1.length() + 1); + + EXPECT_EQ(keys_container->store_key(key1), 0); + ASSERT_TRUE(keys_container->get_number_of_keys() == 1); + + Key pb_key_verion0("percona_binlog:0", NULL, NULL, NULL, 0); + IKey *fetched_pb_key_version0= keys_container->fetch_key(&pb_key_verion0); + + ASSERT_TRUE(fetched_pb_key_version0 != NULL); + std::string expected_pb_key_version0_signature= "percona_binlog:0"; + EXPECT_STREQ(fetched_pb_key_version0->get_key_signature()->c_str(), expected_pb_key_version0_signature.c_str()); + EXPECT_EQ(fetched_pb_key_version0->get_key_signature()->length(), expected_pb_key_version0_signature.length()); + uchar *fetched_pb_key_version0_data_fetched= fetched_pb_key_version0->get_key_data(); + size_t fetched_pb_key_data_fetched_size= fetched_pb_key_version0->get_key_data_size(); + EXPECT_STREQ(key_data1.c_str(), reinterpret_cast(fetched_pb_key_version0_data_fetched)); + ASSERT_TRUE(key_data1.length() + 1 == fetched_pb_key_data_fetched_size); + + my_free(fetched_pb_key_version0->release_key_data()); + delete sample_key; // unused in this test + } + + // Simulates adding 0 version of percona binlog key + TEST_F(Keys_container_test, StoreWithoutVersionFetchSystemKey) + { + IKeyring_io *keyring_io= new Buffered_file_io(logger); + EXPECT_EQ(keys_container->init(keyring_io, file_name), 0); + + std::string key_data1("system_key_data_1"); + Key *key1= new Key("percona_binlog", "AES", NULL, key_data1.c_str(), key_data1.length() + 1); + + EXPECT_EQ(keys_container->store_key(key1), 0); + ASSERT_TRUE(keys_container->get_number_of_keys() == 1); + + Key pb_key_verion0("percona_binlog:0", NULL, NULL, NULL, 0); + IKey *fetched_pb_key_version0= keys_container->fetch_key(&pb_key_verion0); + + ASSERT_TRUE(fetched_pb_key_version0 != NULL); + std::string expected_pb_key_version0_signature= "percona_binlog:0"; + EXPECT_STREQ(fetched_pb_key_version0->get_key_signature()->c_str(), expected_pb_key_version0_signature.c_str()); + EXPECT_EQ(fetched_pb_key_version0->get_key_signature()->length(), expected_pb_key_version0_signature.length()); + uchar *fetched_pb_key_version0_data_fetched= fetched_pb_key_version0->get_key_data(); + size_t fetched_pb_key_data_fetched_size= fetched_pb_key_version0->get_key_data_size(); + EXPECT_STREQ(key_data1.c_str(), reinterpret_cast(fetched_pb_key_version0_data_fetched)); + ASSERT_TRUE(key_data1.length() + 1 == fetched_pb_key_data_fetched_size); + + my_free(fetched_pb_key_version0->release_key_data()); + delete sample_key; // unused in this test + } TEST_F(Keys_container_test, StoreTwiceTheSame) { @@ -764,7 +1124,7 @@ namespace keyring__keys_container_unittest std::string sample_key_data("Robi"); sample_key= new Key("Roberts_key", "AES", "Robert", sample_key_data.c_str(), sample_key_data.length()+1); - file_name= "/home/rob/write_key"; + file_name= "./write_key"; } virtual void TearDown() { @@ -1343,6 +1703,67 @@ namespace keyring__keys_container_unittest delete mock_serializer; } + class Mock_system_keys_container : public ISystem_keys_container + { + public: + MOCK_METHOD1(get_latest_key_if_system_key_without_version, IKey*(IKey *key)); + MOCK_METHOD1(store_or_update_if_system_key_with_version, void(IKey *key)); + MOCK_METHOD1(rotate_key_id_if_system_key_without_version, bool(IKey *key)); + MOCK_METHOD1(is_system_key, bool(IKey *key)); + }; + + class Keys_container_with_system_keys_container_setter : public Keys_container + { + public: + Keys_container_with_system_keys_container_setter(ILogger *logger) + : Keys_container(logger) + {} + void set_system_keys_container(ISystem_keys_container *system_keys_container) + { + this->system_keys_container.reset(system_keys_container); + } + }; + + class Keys_container_with_mocked_system_keys_container_test : public ::testing::Test + { + protected: + virtual void SetUp() + { + std::string sample_key_data("Robi"); + sample_key= new Key("Roberts_key", "AES", "Robert", sample_key_data.c_str(), sample_key_data.length()+1); + + file_name= "./write_key"; + } + virtual void TearDown() + { + remove(file_name.c_str()); + } + protected: + Key *sample_key; + char* sample_key_data; + std::string file_name; + }; + + TEST_F(Keys_container_with_mocked_system_keys_container_test, ErrorFromRotateKeyWhenStoringKey) + { + Mock_logger *logger= new Mock_logger(); + Keys_container_with_system_keys_container_setter *keys_container= new Keys_container_with_system_keys_container_setter(logger); + IKeyring_io *keyring_io= new Buffered_file_io(logger); + Mock_system_keys_container *system_keys_container = new Mock_system_keys_container; + keys_container->set_system_keys_container(system_keys_container); + EXPECT_EQ(keys_container->init(keyring_io, file_name), 0); + ASSERT_TRUE(keys_container->get_number_of_keys() == 0); + + EXPECT_CALL(*system_keys_container, rotate_key_id_if_system_key_without_version(sample_key)) + .WillOnce(Return(true)); // error on key rotation + EXPECT_EQ(keys_container->store_key(sample_key), 1); + ASSERT_TRUE(keys_container->get_number_of_keys() == 0); + + delete logger; + delete sample_key; + delete keys_container; + } + int main(int argc, char **argv) { if (mysql_rwlock_init(key_LOCK_keyring, &LOCK_keyring)) return TRUE; diff --git a/unittest/gunit/keyring/system_keys_container-t.cc b/unittest/gunit/keyring/system_keys_container-t.cc new file mode 100644 index 000000000000..8bd8fae27276 --- /dev/null +++ b/unittest/gunit/keyring/system_keys_container-t.cc @@ -0,0 +1,623 @@ +/* Copyright (c) 2018 Percona LLC and/or its affiliates. All rights reserved. + + 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 */ + +#include +#include +#include +#include +#include "mock_logger.h" +#include "keyring_key.h" +#include +#include "mysql/service_mysql_keyring.h" +#include "system_key.h" + +#if !defined(MERGE_UNITTESTS) && defined(HAVE_PSI_INTERFACE) +namespace keyring +{ + PSI_memory_key key_memory_KEYRING = PSI_NOT_INSTRUMENTED; + PSI_memory_key key_LOCK_keyring = PSI_NOT_INSTRUMENTED; +} +#endif + +namespace keyring__system_keys_container_unittest +{ + using namespace keyring; + using keyring::Key; + using ::testing::StrEq; + + class System_keys_container_test : public ::testing::Test + { + public: + virtual void SetUp() + { + logger = new Mock_logger; + sys_keys_container = new System_keys_container(logger); + } + virtual void TearDown() + { + delete sys_keys_container; + delete logger; + } + + protected: + ILogger *logger; + System_keys_container *sys_keys_container; + }; + + TEST_F(System_keys_container_test, StoreFetchPBkeyStoreFetchSystemKey) + { + std::string key_data1("system_key_data_1"); + Key *key1 = new Key("percona_binlog:0", "AES", NULL, key_data1.c_str(), key_data1.length()+1); + key1->xor_data(); + + sys_keys_container->store_or_update_if_system_key_with_version(key1); + + Key key_id("percona_binlog", NULL, NULL, NULL, 0); + + IKey* system_key = sys_keys_container->get_latest_key_if_system_key_without_version(&key_id); + + std::string key_data_with_version = "0:" + key_data1; + Key key(system_key->get_key_id()->c_str(), system_key->get_key_type()->c_str(), system_key->get_user_id()->c_str(), + system_key->get_key_data(), system_key->get_key_data_size()); + key.xor_data(); + uchar* key_data_fetched= key.get_key_data(); + size_t key_data_fetched_size= key.get_key_data_size(); + EXPECT_STREQ(key.get_key_id()->c_str(), "percona_binlog:0"); + EXPECT_STREQ(key_data_with_version.c_str(), reinterpret_cast(key_data_fetched)); + EXPECT_STREQ("AES", key.get_key_type()->c_str()); + ASSERT_TRUE(key_data_with_version.length() + 1 == key_data_fetched_size); + + std::string key_data2("system_key_data_2"); + Key *key_innodb_sk = new Key("percona_innodb123:0", "AES", NULL, key_data2.c_str(), key_data2.length()+1); + key_innodb_sk->xor_data(); + + sys_keys_container->store_or_update_if_system_key_with_version(key_innodb_sk); + + Key innodb_key_id("percona_innodb123", NULL, NULL, NULL,0); + + system_key = sys_keys_container->get_latest_key_if_system_key_without_version(&innodb_key_id); + + ASSERT_TRUE(system_key != NULL); + + key_data_with_version = "0:" + key_data2; + Key key_2(system_key->get_key_id()->c_str(), system_key->get_key_type()->c_str(), system_key->get_user_id()->c_str(), + system_key->get_key_data(), system_key->get_key_data_size()); + key_2.xor_data(); + key_data_fetched= key_2.get_key_data(); + key_data_fetched_size= key_2.get_key_data_size(); + EXPECT_STREQ(key_2.get_key_id()->c_str(), "percona_innodb123:0"); + EXPECT_STREQ(key_data_with_version.c_str(), reinterpret_cast(key_data_fetched)); + EXPECT_STREQ("AES", key_2.get_key_type()->c_str()); + ASSERT_TRUE(key_data_with_version.length() + 1 == key_data_fetched_size); + + delete key1; + delete key_innodb_sk; + } + + TEST_F(System_keys_container_test, StoreKey1StoreKey1FetchStoreKey2StoreKey2Fetch) + { + std::string key_data1("system_key_data_1"); + Key *key1= new Key("percona_binlog:0", "AES", NULL, key_data1.c_str(), key_data1.length()+1); + key1->xor_data(); + + sys_keys_container->store_or_update_if_system_key_with_version(key1); + + std::string key_data2("system_key_data_2"); + Key *key2= new Key("percona_binlog:1", "AES", NULL, key_data2.c_str(), key_data2.length()+1); + key2->xor_data(); + + sys_keys_container->store_or_update_if_system_key_with_version(key2); + + Key key_id("percona_binlog", NULL, NULL, NULL,0); + + IKey* system_key = sys_keys_container->get_latest_key_if_system_key_without_version(&key_id); + + Key key(system_key->get_key_id()->c_str(), system_key->get_key_type()->c_str(), system_key->get_user_id()->c_str(), + system_key->get_key_data(), system_key->get_key_data_size()); + key.xor_data(); + uchar* key_data_fetched= key.get_key_data(); + size_t key_data_fetched_size= key.get_key_data_size(); + std::string key_data_with_version = "1:" + key_data2; + EXPECT_STREQ(key.get_key_id()->c_str(), "percona_binlog:1"); + EXPECT_STREQ(key_data_with_version.c_str(), reinterpret_cast(key_data_fetched)); + EXPECT_STREQ("AES", key.get_key_type()->c_str()); + ASSERT_TRUE(key_data_with_version.length() + 1 == key_data_fetched_size); + + std::string key_data3("1234XXXYYYZZZZ5335"); + Key *key1_sk= new Key("percona_system_key:0", "AES", NULL, key_data3.c_str(), key_data3.length()+1); + key1_sk->xor_data(); + + sys_keys_container->store_or_update_if_system_key_with_version(key1_sk); + + std::string key_data4("CCCSADSDa___DFsdfk0001___"); + Key *key2_sk= new Key("percona_system_key:1", "AES", NULL, key_data4.c_str(), key_data4.length()+1); + key2_sk->xor_data(); + + sys_keys_container->store_or_update_if_system_key_with_version(key2_sk); + + Key system_key_id("percona_system_key", NULL, NULL, NULL,0); + + system_key = sys_keys_container->get_latest_key_if_system_key_without_version(&system_key_id); + + Key key_sk(system_key->get_key_id()->c_str(), system_key->get_key_type()->c_str(), system_key->get_user_id()->c_str(), + system_key->get_key_data(), system_key->get_key_data_size()); + key_sk.xor_data(); + key_data_fetched= key_sk.get_key_data(); + key_data_fetched_size= key_sk.get_key_data_size(); + key_data_with_version = "1:" + key_data4; + EXPECT_STREQ(key_sk.get_key_id()->c_str(), "percona_system_key:1"); + EXPECT_STREQ(key_data_with_version.c_str(), reinterpret_cast(key_data_fetched)); + EXPECT_STREQ("AES", key_sk.get_key_type()->c_str()); + ASSERT_TRUE(key_data_with_version.length() + 1 == key_data_fetched_size); + + delete key1; + delete key2; + delete key1_sk; + delete key2_sk; + } + + + TEST_F(System_keys_container_test, StoreStoreStoreFetch) + { + std::string key_data1("system_key_data_1"); + Key *key1= new Key("percona_key:0:0", "AES", NULL, key_data1.c_str(), key_data1.length()+1); + key1->xor_data(); + + sys_keys_container->store_or_update_if_system_key_with_version(key1); + + std::string key_data2("system_key_data_2"); + Key *key2= new Key("percona_key:0:1", "AES", NULL, key_data2.c_str(), key_data2.length()+1); + key2->xor_data(); + + sys_keys_container->store_or_update_if_system_key_with_version(key2); + + std::string key_data3("system_key_data_3"); + Key *key3= new Key("percona_key:0:2", "AES", NULL, key_data3.c_str(), key_data3.length()+1); + key3->xor_data(); + + sys_keys_container->store_or_update_if_system_key_with_version(key3); + + Key key_id("percona_key:0", NULL, NULL, NULL,0); + + IKey* system_key = sys_keys_container->get_latest_key_if_system_key_without_version(&key_id); + + ASSERT_TRUE(system_key != NULL); + + Key key(system_key->get_key_id()->c_str(), system_key->get_key_type()->c_str(), system_key->get_user_id()->c_str(), + system_key->get_key_data(), system_key->get_key_data_size()); + key.xor_data(); + uchar* key_data_fetched= key.get_key_data(); + size_t key_data_fetched_size= key.get_key_data_size(); + std::string key_data_with_version = "2:" + key_data3; + EXPECT_STREQ(key.get_key_id()->c_str(), "percona_key:0:2"); + EXPECT_STREQ(key_data_with_version.c_str(), reinterpret_cast(key_data_fetched)); + EXPECT_STREQ("AES", key.get_key_type()->c_str()); + ASSERT_TRUE(key_data_with_version.length() + 1 == key_data_fetched_size); + + delete key1; + delete key2; + delete key3; + } + + + TEST_F(System_keys_container_test, StoreKeyWithTheSameIdTwice) + { + std::string key_data1("system_key_data_1"); + Key *key1= new Key("percona_binlog:0", "AES", NULL, key_data1.c_str(), key_data1.length()+1); + key1->xor_data(); + + sys_keys_container->store_or_update_if_system_key_with_version(key1); + + std::string key_data2("system_key_data_2"); + Key *key2= new Key("percona_binlog:0", "AES", NULL, key_data2.c_str(), key_data2.length()+1); + key2->xor_data(); + + sys_keys_container->store_or_update_if_system_key_with_version(key2); + + Key key_id("percona_binlog", NULL, NULL, NULL,0); + + IKey* system_key = sys_keys_container->get_latest_key_if_system_key_without_version(&key_id); + + Key key(system_key->get_key_id()->c_str(), system_key->get_key_type()->c_str(), system_key->get_user_id()->c_str(), + system_key->get_key_data(), system_key->get_key_data_size()); + key.xor_data(); + uchar* key_data_fetched= key.get_key_data(); + size_t key_data_fetched_size= key.get_key_data_size(); + std::string key_data_with_version = "0:" + key_data1; + EXPECT_STREQ(key.get_key_id()->c_str(), "percona_binlog:0"); + EXPECT_STREQ(key_data_with_version.c_str(), reinterpret_cast(key_data_fetched)); + EXPECT_STREQ("AES", key.get_key_type()->c_str()); + ASSERT_TRUE(key_data_with_version.length() + 1 == key_data_fetched_size); + + delete key1; + delete key2; + } + + TEST_F(System_keys_container_test, StoreKeyWithTheSameIdTwiceAndThenWithDifferentOne) + { + std::string key_data1("system_key_data_1"); + Key *key1= new Key("percona_binlog:0", "AES", NULL, key_data1.c_str(), key_data1.length()+1); + key1->xor_data(); + + sys_keys_container->store_or_update_if_system_key_with_version(key1); + + std::string key_data2("system_key_data_2"); + Key *key2= new Key("percona_binlog:0", "AES", NULL, key_data2.c_str(), key_data2.length()+1); + key2->xor_data(); + + sys_keys_container->store_or_update_if_system_key_with_version(key2); + + std::string key_data3("system_key_data_3"); + Key *key3= new Key("percona_binlog:1", "AES", NULL, key_data3.c_str(), key_data3.length()+1); + key3->xor_data(); + + sys_keys_container->store_or_update_if_system_key_with_version(key3); + + Key key_id("percona_binlog", NULL, NULL, NULL,0); + + IKey* system_key = sys_keys_container->get_latest_key_if_system_key_without_version(&key_id); + + Key key(system_key->get_key_id()->c_str(), system_key->get_key_type()->c_str(), system_key->get_user_id()->c_str(), + system_key->get_key_data(), system_key->get_key_data_size()); + key.xor_data(); + uchar* key_data_fetched= key.get_key_data(); + size_t key_data_fetched_size= key.get_key_data_size(); + std::string key_data_with_version = "1:" + key_data3; + EXPECT_STREQ(key.get_key_id()->c_str(), "percona_binlog:1"); + EXPECT_STREQ(key_data_with_version.c_str(), reinterpret_cast(key_data_fetched)); + EXPECT_STREQ("AES", key.get_key_type()->c_str()); + ASSERT_TRUE(key_data_with_version.length() + 1 == key_data_fetched_size); + + delete key1; + delete key2; + delete key3; + } + + TEST_F(System_keys_container_test, StoreKey1StoreKey1StoreKey2FetchKey1) + { + std::string key_data1("system_key_data_1"); + Key *key1= new Key("percona_binlog:0", "AES", NULL, key_data1.c_str(), key_data1.length()+1); + key1->xor_data(); + + sys_keys_container->store_or_update_if_system_key_with_version(key1); + + std::string key_data2("system_key_data_2"); + Key *key2= new Key("percona_binlog:1", "AES", NULL, key_data2.c_str(), key_data2.length()+1); + key2->xor_data(); + + sys_keys_container->store_or_update_if_system_key_with_version(key2); + + std::string key_data3("system_key_data_3"); + Key *key3= new Key("percona_key:2", "AES", NULL, key_data3.c_str(), key_data3.length()+1); + key3->xor_data(); + + sys_keys_container->store_or_update_if_system_key_with_version(key3); + + Key key_id("percona_binlog", NULL, NULL, NULL,0); + + IKey* system_key = sys_keys_container->get_latest_key_if_system_key_without_version(&key_id); + + Key key(system_key->get_key_id()->c_str(), system_key->get_key_type()->c_str(), system_key->get_user_id()->c_str(), + system_key->get_key_data(), system_key->get_key_data_size()); + key.xor_data(); + uchar* key_data_fetched= key.get_key_data(); + size_t key_data_fetched_size= key.get_key_data_size(); + std::string key_data_with_version = "1:" + key_data2; + EXPECT_STREQ(key.get_key_id()->c_str(), "percona_binlog:1"); + EXPECT_STREQ(key_data_with_version.c_str(), reinterpret_cast(key_data_fetched)); + EXPECT_STREQ("AES", key.get_key_type()->c_str()); + ASSERT_TRUE(key_data_with_version.length() + 1 == key_data_fetched_size); + + delete key1; + delete key2; + delete key3; + } + + TEST_F(System_keys_container_test, IfSystemKey) + { + std::string key_data1("system_key_data_1"); + Key *key1= new Key("percona_binlog:0", "AES", NULL, key_data1.c_str(), key_data1.length()+1); + + EXPECT_EQ(sys_keys_container->is_system_key(key1), true); + + std::string key_data2("system_key_data_2"); + Key *key2= new Key("percona_key231dqwldk__23_:1", "AES", NULL, key_data2.c_str(), key_data2.length()+1); + + EXPECT_EQ(sys_keys_container->is_system_key(key2), true); + + std::string key_data3("system_key_data_3"); + Key *key3= new Key("percona_binlog:2", "AES", NULL, key_data3.c_str(), key_data3.length()+1); + + EXPECT_EQ(sys_keys_container->is_system_key(key3), true); + + std::string key_data("system_key_data"); + Key *key_without_version= new Key("percona_binlog", "AES", NULL, key_data.c_str(), key_data.length()+1); + + EXPECT_EQ(sys_keys_container->is_system_key(key_without_version), true); + + std::string not_system_key_data("not_system_key_data"); + Key *not_system_key= new Key("unicorn_binlog", "AES", NULL, not_system_key_data.c_str(), not_system_key_data.length()+1); + + EXPECT_EQ(sys_keys_container->is_system_key(not_system_key), false); + + delete key1; + delete key2; + delete key3; + delete key_without_version; + delete not_system_key; + } + + TEST_F(System_keys_container_test, GetKeyWithRotatedId) + { + std::string key_data1("system_key_data_1"); + Key *key1= new Key("percona_binlog:0", "AES", NULL, key_data1.c_str(), key_data1.length()+1); + + sys_keys_container->store_or_update_if_system_key_with_version(key1); + + Key *percona_binlog_key = new Key("percona_binlog", "AES", NULL, "sys_key", 8); + EXPECT_EQ(sys_keys_container->rotate_key_id_if_system_key_without_version(percona_binlog_key), false); + EXPECT_STREQ(percona_binlog_key->get_key_id()->c_str(), "percona_binlog:1"); + + std::string key_data2("system_key_data_2"); + Key *key2= new Key("percona_binlog:1", "AES", NULL, key_data2.c_str(), key_data2.length()+1); + + sys_keys_container->store_or_update_if_system_key_with_version(key2); + + Key *percona_binlog_key2 = new Key("percona_binlog", "AES", NULL, "sys_key", 8); + EXPECT_EQ(sys_keys_container->rotate_key_id_if_system_key_without_version(percona_binlog_key2), false); + EXPECT_STREQ(percona_binlog_key2->get_key_id()->c_str(), "percona_binlog:2"); + + std::string key_data3("system_key_data_3"); + Key *key3= new Key("percona_binlog:2", "AES", NULL, key_data3.c_str(), key_data3.length()+1); + + sys_keys_container->store_or_update_if_system_key_with_version(key3); + + Key *percona_binlog_key3 = new Key("percona_binlog", "AES", NULL, "sys_key", 8); + EXPECT_EQ(sys_keys_container->rotate_key_id_if_system_key_without_version(percona_binlog_key3), false); + EXPECT_STREQ(percona_binlog_key3->get_key_id()->c_str(), "percona_binlog:3"); + + Key *key1_sk= new Key("percona_key:0", "AES", NULL, key_data1.c_str(), key_data1.length()+1); + + sys_keys_container->store_or_update_if_system_key_with_version(key1_sk); + + Key *percona_key = new Key("percona_key", "AES", NULL, "sys_key", 8); + EXPECT_EQ(sys_keys_container->rotate_key_id_if_system_key_without_version(percona_key), false); + EXPECT_STREQ(percona_key->get_key_id()->c_str(), "percona_key:1"); + + delete key1; + delete key2; + delete key3; + delete key1_sk; + delete percona_binlog_key; + delete percona_binlog_key2; + delete percona_binlog_key3; + delete percona_key; + } + + TEST_F(System_keys_container_test, RotateOnNotSystemKey) + { + std::string key_data1("system_key_data_1"); + Key *key1= new Key("not_system_key:0", "AES", NULL, key_data1.c_str(), key_data1.length()+1); + + sys_keys_container->store_or_update_if_system_key_with_version(key1); + + Key *key_1_id = new Key("not_system_key:0", "AES", NULL, "sys_key", 8); + EXPECT_EQ(sys_keys_container->rotate_key_id_if_system_key_without_version(key_1_id), false); + EXPECT_STREQ(key_1_id->get_key_id()->c_str(), "not_system_key:0"); + + delete key1; + delete key_1_id; + } + + TEST_F(System_keys_container_test, RotateToMaxKeyId) + { + std::string key_data1("system_key_data"); + std::ostringstream correct_percona_binlog_key_id_ss; + correct_percona_binlog_key_id_ss << "percona_binlog:"; + correct_percona_binlog_key_id_ss << (UINT_MAX - 1); + std::string correct_percona_binlog_key_id = correct_percona_binlog_key_id_ss.str(); + + Key *key1= new Key(correct_percona_binlog_key_id.c_str(), "AES", NULL, key_data1.c_str(), key_data1.length()+1); + sys_keys_container->store_or_update_if_system_key_with_version(key1); + + Key *percona_binlog_key = new Key("percona_binlog", "AES", NULL, "sys_key", 8); + EXPECT_EQ(sys_keys_container->rotate_key_id_if_system_key_without_version(percona_binlog_key), false); + + std::ostringstream max_percona_binlog_key_id_ss; + max_percona_binlog_key_id_ss << "percona_binlog:"; + max_percona_binlog_key_id_ss << UINT_MAX; + std::string max_percona_binlog_key_id = max_percona_binlog_key_id_ss.str(); + + EXPECT_STREQ(percona_binlog_key->get_key_id()->c_str(), max_percona_binlog_key_id.c_str()); + + std::ostringstream correct_percona_key_id_ss; + correct_percona_key_id_ss << "percona_key:"; + correct_percona_key_id_ss << (UINT_MAX - 1); + std::string correct_percona_key_id = correct_percona_key_id_ss.str(); + + Key *key2= new Key(correct_percona_key_id.c_str(), "AES", NULL, key_data1.c_str(), key_data1.length()+1); + sys_keys_container->store_or_update_if_system_key_with_version(key2); + + Key *percona_key = new Key("percona_key", "AES", NULL, "sys_key", 8); + EXPECT_EQ(sys_keys_container->rotate_key_id_if_system_key_without_version(percona_key), false); + + std::ostringstream max_percona_key_id_ss; + max_percona_key_id_ss << "percona_key:"; + max_percona_key_id_ss << UINT_MAX; + std::string max_percona_key_id = max_percona_key_id_ss.str(); + + EXPECT_STREQ(percona_key->get_key_id()->c_str(), max_percona_key_id.c_str()); + + delete key1; + delete key2; + delete percona_binlog_key; + delete percona_key; + } + + TEST_F(System_keys_container_test, RotateFromMaxKeyId) + { + std::string key_data1("system_key_data"); + std::ostringstream max_percona_binlog_key_id_ss; + max_percona_binlog_key_id_ss << "percona_binlog:"; + max_percona_binlog_key_id_ss << UINT_MAX; + std::string max_percona_binlog_key_id = max_percona_binlog_key_id_ss.str(); + + Key *key1= new Key(max_percona_binlog_key_id.c_str(), "AES", NULL, key_data1.c_str(), key_data1.length()+1); + sys_keys_container->store_or_update_if_system_key_with_version(key1); + + Key *percona_binlog_key = new Key("percona_binlog", "AES", NULL, "sys_key", 8); + + EXPECT_CALL(*((Mock_logger *)logger), log(MY_ERROR_LEVEL, StrEq("System key cannot be rotated anymore, the maximum key version has been reached."))); + EXPECT_EQ(sys_keys_container->rotate_key_id_if_system_key_without_version(percona_binlog_key), true); + + EXPECT_STREQ(percona_binlog_key->get_key_id()->c_str(), "percona_binlog"); + + std::ostringstream max_percona_key_id_ss; + max_percona_key_id_ss << "percona_key:"; + max_percona_key_id_ss << UINT_MAX; + std::string max_percona_key_id = max_percona_key_id_ss.str(); + + Key *key2= new Key(max_percona_key_id.c_str(), "AES", NULL, key_data1.c_str(), key_data1.length()+1); + sys_keys_container->store_or_update_if_system_key_with_version(key2); + + Key *percona_key = new Key("percona_key", "AES", NULL, "sys_key", 8); + + EXPECT_CALL(*((Mock_logger *)logger), log(MY_ERROR_LEVEL, StrEq("System key cannot be rotated anymore, the maximum key version has been reached."))); + EXPECT_EQ(sys_keys_container->rotate_key_id_if_system_key_without_version(percona_key), true); + + EXPECT_STREQ(percona_key->get_key_id()->c_str(), "percona_key"); + + delete key1; + delete key2; + delete percona_binlog_key; + delete percona_key; + } + + TEST_F(System_keys_container_test, FetchFromEmptyContainer) + { + Key key_id("percona_binlog", NULL, NULL, NULL,0); + + IKey* system_key = sys_keys_container->get_latest_key_if_system_key_without_version(&key_id); + + ASSERT_TRUE(system_key == NULL); + } + + TEST_F(System_keys_container_test, StoreKeyWithOnlySemicolon) + { + std::string key_data1("system_key_data_1"); + Key *key1= new Key(":", "AES", NULL, key_data1.c_str(), key_data1.length()+1); + key1->xor_data(); + + sys_keys_container->store_or_update_if_system_key_with_version(key1); + + Key key_id(":", NULL, NULL, NULL,0); + + IKey* system_key = sys_keys_container->get_latest_key_if_system_key_without_version(&key_id); + + ASSERT_TRUE(system_key == NULL); + + Key *key2= new Key(":0", "AES", NULL, key_data1.c_str(), key_data1.length()+1); + key2->xor_data(); + + sys_keys_container->store_or_update_if_system_key_with_version(key2); + + Key key2_id(":0", NULL, NULL, NULL,0); + + IKey* system_key2 = sys_keys_container->get_latest_key_if_system_key_without_version(&key_id); + + ASSERT_TRUE(system_key2 == NULL); + + delete key1; + delete key2; + } + + TEST_F(System_keys_container_test, ParseSystemKey) + { + std::string system_key("12:0123456789012345"); + uchar *key_data = NULL; + uint key_version = 0; + size_t key_data_length = 0; + uchar *return_val = parse_system_key(reinterpret_cast(system_key.c_str()), system_key.length(), &key_version, + &key_data, &key_data_length); + ASSERT_TRUE(return_val != 0); + EXPECT_EQ(key_data_length, static_cast(16)); + EXPECT_EQ(key_version, static_cast(12)); + EXPECT_TRUE(memcmp(key_data, "0123456789012345", key_data_length) == 0); + EXPECT_EQ(return_val, key_data); + my_free(key_data); + } + + TEST_F(System_keys_container_test, ParseNotSystemKey) + { + std::string key("0123456789012345"); + uchar *key_data = NULL; + uint key_version = 0; + size_t key_data_length = 0; + uchar *return_val = parse_system_key(reinterpret_cast(key.c_str()), key.length(), &key_version, + &key_data, &key_data_length); + ASSERT_TRUE(key_data == 0); + ASSERT_TRUE(return_val == 0); + EXPECT_EQ(key_data_length, static_cast(0)); + EXPECT_EQ(key_version, static_cast(0)); + } + + TEST_F(System_keys_container_test, ParseSystemKeyWithTwoColons) + { + std::string system_key("0:0123456:789012345"); + uchar *key_data = NULL; + uint key_version = 0; + size_t key_data_length = 0; + uchar *return_val = parse_system_key(reinterpret_cast(system_key.c_str()), system_key.length(), &key_version, + &key_data, &key_data_length); + ASSERT_TRUE(return_val != 0); + EXPECT_EQ(key_data_length, static_cast(17)); + EXPECT_EQ(key_version, static_cast(0)); + EXPECT_TRUE(memcmp(key_data, "0123456:789012345", key_data_length) == 0); + EXPECT_EQ(return_val, key_data); + my_free(key_data); + } + + TEST_F(System_keys_container_test, ParseSystemKeyWithAlphaVersion) + { + std::string system_key("A:key01234567890123"); + uchar *key_data = NULL; + uint key_version = 0; + size_t key_data_length = 0; + uchar *return_val = parse_system_key(reinterpret_cast(system_key.c_str()), system_key.length(), &key_version, + &key_data, &key_data_length); + ASSERT_TRUE(key_data == 0); + ASSERT_TRUE(return_val == 0); + EXPECT_EQ(key_data_length, static_cast(0)); + EXPECT_EQ(key_version, static_cast(0)); + } + + TEST_F(System_keys_container_test, ParseSystemKeyWithAlphaKey) + { + std::string system_key("234:key01234567890123"); + uchar *key_data = NULL; + uint key_version = 0; + size_t key_data_length = 0; + uchar *return_val = parse_system_key(reinterpret_cast(system_key.c_str()), system_key.length(), &key_version, + &key_data, &key_data_length); + ASSERT_TRUE(return_val != 0); + EXPECT_EQ(key_data_length, static_cast(17)); + EXPECT_EQ(key_version, static_cast(234)); + EXPECT_TRUE(memcmp(key_data, "key01234567890123", key_data_length) == 0); + EXPECT_EQ(return_val, key_data); + my_free(key_data); + } + +} //namespace keyring__system_keys_container_unittest diff --git a/unittest/gunit/keyring_vault/CMakeLists.txt b/unittest/gunit/keyring_vault/CMakeLists.txt index 88713c40640e..41f6ba02f1df 100644 --- a/unittest/gunit/keyring_vault/CMakeLists.txt +++ b/unittest/gunit/keyring_vault/CMakeLists.txt @@ -34,6 +34,8 @@ FOREACH(test ${TESTS}) ${CMAKE_SOURCE_DIR}/plugin/keyring/common/keyring_key.cc ${CMAKE_SOURCE_DIR}/plugin/keyring/common/keys_container.cc ${CMAKE_SOURCE_DIR}/plugin/keyring/common/keys_iterator.cc + ${CMAKE_SOURCE_DIR}/plugin/keyring/common/system_keys_container.cc + ${CMAKE_SOURCE_DIR}/plugin/keyring/common/system_key_adapter.cc ${CMAKE_SOURCE_DIR}/plugin/keyring_vault/vault_keys_list.cc ${CMAKE_SOURCE_DIR}/plugin/keyring_vault/vault_key.cc ${CMAKE_SOURCE_DIR}/plugin/keyring_vault/vault_io.cc diff --git a/unittest/gunit/keyring_vault/vault_keyring-api-t.cc b/unittest/gunit/keyring_vault/vault_keyring-api-t.cc index 3bb791e29cb8..153f7f295cf2 100644 --- a/unittest/gunit/keyring_vault/vault_keyring-api-t.cc +++ b/unittest/gunit/keyring_vault/vault_keyring-api-t.cc @@ -1,3 +1,19 @@ +/* Copyright (c) 2018 Percona LLC and/or its affiliates. All rights reserved. + + 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 */ + #include #include #include @@ -340,6 +356,105 @@ namespace keyring__api_unittest EXPECT_CALL(*(reinterpret_cast(logger.get())), log(MY_ERROR_LEVEL, StrEq("Error while generating key: key_id cannot be empty"))); EXPECT_TRUE(mysql_key_generate("", "AES", NULL, 128)); } + + TEST_F(Keyring_vault_api_test, StorePBStoreSKFetchPBRemovePB) + { + EXPECT_EQ(mysql_key_store("percona_binlog", "AES", NULL, sample_key_data.c_str(), + sample_key_data.length() + 1), 0); + EXPECT_EQ(mysql_key_store("percona_RGRGRG_1", "AES", NULL, "1234_", + strlen("1234_") + 1), 0); + char *key_type; + size_t key_len; + void *key; + EXPECT_EQ(mysql_key_fetch("percona_binlog", &key_type, NULL, &key, + &key_len), 0); + EXPECT_STREQ("AES", key_type); + std::string key_data_with_version = "0:" + sample_key_data; + EXPECT_EQ(key_len, key_data_with_version.length()+1); + ASSERT_TRUE(memcmp((char *)key, key_data_with_version.c_str(), key_len) == 0); + my_free(key_type); + key_type= NULL; + my_free(key); + key= NULL; + EXPECT_EQ(mysql_key_remove("percona_binlog", NULL), 1); + //make sure the key was not removed - fetch it + EXPECT_EQ(mysql_key_fetch("percona_binlog", &key_type, NULL, &key, + &key_len), 0); + EXPECT_STREQ("AES", key_type); + EXPECT_EQ(key_len, key_data_with_version.length()+1); + ASSERT_TRUE(memcmp((char *)key, key_data_with_version.c_str(), key_len) == 0); + my_free(key_type); + my_free(key); + } + + TEST_F(Keyring_vault_api_test, RotatePBStoreSKFetchPBRotatePBFetchPBRotatePBRotateSKFetchPBFetchSK) + { + std::string percona_binlog_key_data_1("key1"); + EXPECT_EQ(mysql_key_store("percona_binlog", "AES", NULL, percona_binlog_key_data_1.c_str(), + percona_binlog_key_data_1.length() + 1), 0); + + std::string percona_sk_data_1("system_key1"); + EXPECT_EQ(mysql_key_store("percona_sk", "AES", NULL, percona_sk_data_1.c_str(), + percona_sk_data_1.length() + 1), 0); + + char *key_type; + size_t key_len; + void *key; + EXPECT_EQ(mysql_key_fetch("percona_binlog", &key_type, NULL, &key, + &key_len), 0); + EXPECT_STREQ("AES", key_type); + std::string key_data_with_version = "1:" + percona_binlog_key_data_1; + EXPECT_EQ(key_len, key_data_with_version.length()+1); + ASSERT_TRUE(memcmp((char *)key, key_data_with_version.c_str(), key_len) == 0); + my_free(key_type); + key_type= NULL; + my_free(key); + key= NULL; + + std::string percona_binlog_key_data_2("key2"); + EXPECT_EQ(mysql_key_store("percona_binlog", "AES", NULL, percona_binlog_key_data_2.c_str(), + percona_binlog_key_data_2.length() + 1), 0); + + EXPECT_EQ(mysql_key_fetch("percona_binlog", &key_type, NULL, &key, + &key_len), 0); + EXPECT_STREQ("AES", key_type); + key_data_with_version = "2:" + percona_binlog_key_data_2; + EXPECT_EQ(key_len, key_data_with_version.length()+1); + ASSERT_TRUE(memcmp((char *)key, key_data_with_version.c_str(), key_len) == 0); + my_free(key_type); + key_type= NULL; + my_free(key); + key= NULL; + + std::string percona_binlog_key_data_3("key3___"); + EXPECT_EQ(mysql_key_store("percona_binlog", "AES", NULL, percona_binlog_key_data_3.c_str(), + percona_binlog_key_data_3.length() + 1), 0); + + std::string percona_sk_data_2("percona_sk_data2"); + EXPECT_EQ(mysql_key_store("percona_sk", "AES", NULL, percona_sk_data_2.c_str(), + percona_sk_data_2.length() + 1), 0); + EXPECT_EQ(mysql_key_fetch("percona_binlog", &key_type, NULL, &key, + &key_len), 0); + EXPECT_STREQ("AES", key_type); + key_data_with_version = "3:" + percona_binlog_key_data_3; + EXPECT_EQ(key_len, key_data_with_version.length()+1); + ASSERT_TRUE(memcmp((char *)key, key_data_with_version.c_str(), key_len) == 0); + my_free(key_type); + key_type= NULL; + my_free(key); + key= NULL; + + EXPECT_EQ(mysql_key_fetch("percona_sk", &key_type, NULL, &key, + &key_len), 0); + EXPECT_STREQ("AES", key_type); + key_data_with_version = "1:" + percona_sk_data_2; + EXPECT_EQ(key_len, key_data_with_version.length()+1); + ASSERT_TRUE(memcmp((char *)key, key_data_with_version.c_str(), key_len) == 0); + my_free(key_type); + key_type= NULL; + my_free(key); + key= NULL; + } } int main(int argc, char **argv) diff --git a/unittest/gunit/keyring_vault/vault_keys_container-t.cc b/unittest/gunit/keyring_vault/vault_keys_container-t.cc index d53113faa014..d42de53d39e7 100644 --- a/unittest/gunit/keyring_vault/vault_keys_container-t.cc +++ b/unittest/gunit/keyring_vault/vault_keys_container-t.cc @@ -1,3 +1,19 @@ +/* Copyright (c) 2018 Percona LLC and/or its affiliates. All rights reserved. + + 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 */ + #include #include #include @@ -189,6 +205,7 @@ namespace keyring__vault_keys_container_unittest TEST_F(Vault_keys_container_test, StoreStoreStoreFetchRemove) { + ASSERT_TRUE(vault_keys_container->get_number_of_keys() == 0); IKeyring_io *keyring_io = new Vault_io(logger, vault_curl, vault_parser); EXPECT_FALSE(vault_keys_container->init(keyring_io, credential_file_url)); EXPECT_FALSE(vault_keys_container->store_key(sample_key)); @@ -301,6 +318,285 @@ namespace keyring__vault_keys_container_unittest my_free(fetched_key->release_key_data()); } + TEST_F(Vault_keys_container_test, StorePBStorePBStorePBStoreIK1StoreIK2FetchPBFetchIK) + { + IKeyring_io *keyring_io = new Vault_io(logger, vault_curl, vault_parser); + EXPECT_FALSE(vault_keys_container->init(keyring_io, credential_file_url)); + + std::string key_data1("system_key_data_1"); + Vault_key *key1= new Vault_key("percona_binlog:0", "AES", NULL, key_data1.c_str(), key_data1.length()+1); + key1->xor_data(); + EXPECT_EQ(vault_keys_container->store_key(key1), 0); + + std::string key_data2("system_key_data_2"); + Vault_key *key2= new Vault_key("percona_binlog:1", "AES", NULL, key_data2.c_str(), key_data2.length()+1); + key2->xor_data(); + EXPECT_EQ(vault_keys_container->store_key(key2), 0); + + std::string key_data3("system_key_data_3"); + Vault_key *key3= new Vault_key("percona_binlog:2", "AES", NULL, key_data3.c_str(), key_data3.length()+1); + key3->xor_data(); + EXPECT_EQ(vault_keys_container->store_key(key3), 0); + + std::string ik_data1("data1"); + + Vault_key *innodb_key1= new Vault_key("percona_innodb1_2_3:0:0", "AES", NULL, ik_data1.c_str(), ik_data1.length()+1); + innodb_key1->xor_data(); + EXPECT_EQ(vault_keys_container->store_key(innodb_key1), 0); + + std::string ik_data2("data2"); + + Vault_key *innodb_key2= new Vault_key("percona_innodb1_2_3:0:1", "AES", NULL, ik_data2.c_str(), ik_data2.length()+1); + innodb_key2->xor_data(); + EXPECT_EQ(vault_keys_container->store_key(innodb_key2), 0); + + Vault_key latest_percona_binlog_key("percona_binlog", NULL, NULL, NULL, 0); + IKey* fetched_key= vault_keys_container->fetch_key(&latest_percona_binlog_key); + ASSERT_TRUE(fetched_key != NULL); + + Vault_key key(fetched_key->get_key_id()->c_str(), fetched_key->get_key_type()->c_str(), fetched_key->get_user_id()->c_str(), + fetched_key->get_key_data(), fetched_key->get_key_data_size()); + key.xor_data(); + + std::string expected_key_signature= get_key_signature("","percona_binlog",""); + EXPECT_STREQ(key.get_key_signature()->c_str(), expected_key_signature.c_str()); + EXPECT_EQ(key.get_key_signature()->length(), expected_key_signature.length()); + uchar* key_data_fetched= key.get_key_data(); + size_t key_data_fetched_size= key.get_key_data_size(); + std::string key_data_with_version= "2:" + key_data3; + EXPECT_STREQ(key_data_with_version.c_str(), reinterpret_cast(key_data_fetched)); + EXPECT_STREQ("AES", fetched_key->get_key_type()->c_str()); + ASSERT_TRUE(key_data_with_version.length()+1 == key_data_fetched_size); + + Vault_key latest_innodb_key("percona_innodb1_2_3:0", NULL, NULL, NULL, 0); + IKey* fetched_innodb_key= vault_keys_container->fetch_key(&latest_innodb_key); + ASSERT_TRUE(fetched_innodb_key != NULL); + + Vault_key innodb_key(fetched_innodb_key->get_key_id()->c_str(), fetched_innodb_key->get_key_type()->c_str(), fetched_innodb_key->get_user_id()->c_str(), + fetched_innodb_key->get_key_data(), fetched_innodb_key->get_key_data_size()); + innodb_key.xor_data(); + + expected_key_signature= get_key_signature("","percona_innodb1_2_3:0",""); + EXPECT_STREQ(innodb_key.get_key_signature()->c_str(), expected_key_signature.c_str()); + EXPECT_EQ(innodb_key.get_key_signature()->length(), expected_key_signature.length()); + key_data_fetched= innodb_key.get_key_data(); + key_data_fetched_size= innodb_key.get_key_data_size(); + key_data_with_version= "1:" + ik_data2; + EXPECT_STREQ(key_data_with_version.c_str(), reinterpret_cast(key_data_fetched)); + EXPECT_STREQ("AES", fetched_key->get_key_type()->c_str()); + ASSERT_TRUE(key_data_with_version.length()+1 == key_data_fetched_size); + + my_free(fetched_key->release_key_data()); + my_free(fetched_innodb_key->release_key_data()); + + delete sample_key; // unused in this test + } + + TEST_F(Vault_keys_container_test, StorePBRotatePBFetchPBStoreSKRotatePBFetchPBRotateSKFetchSK) + { + IKeyring_io *keyring_io= new Vault_io(logger, vault_curl, vault_parser); + EXPECT_FALSE(vault_keys_container->init(keyring_io, credential_file_url)); + + std::string key_data1("percona_binlog_key_data_1"); + Vault_key *key1= new Vault_key("percona_binlog:3", "AES", NULL, key_data1.c_str(), key_data1.length()+1); + key1->xor_data(); + + EXPECT_EQ(vault_keys_container->store_key(key1), FALSE); + + std::string key_data2("percona_binlog_key_data_2"); + Vault_key *percona_binlog_rotation= new Vault_key("percona_binlog", "AES", NULL, key_data2.c_str(), key_data2.length()+1); + percona_binlog_rotation->xor_data(); + EXPECT_EQ(vault_keys_container->store_key(percona_binlog_rotation), FALSE); + + Vault_key latest_percona_binlog_key("percona_binlog", NULL, NULL, NULL, 0); + IKey* fetched_key= vault_keys_container->fetch_key(&latest_percona_binlog_key); + + ASSERT_TRUE(fetched_key != NULL); + + Vault_key key(fetched_key->get_key_id()->c_str(), fetched_key->get_key_type()->c_str(), fetched_key->get_user_id()->c_str(), + fetched_key->get_key_data(), fetched_key->get_key_data_size()); + key.xor_data(); + + std::string expected_key_signature= get_key_signature("","percona_binlog",""); + EXPECT_STREQ(key.get_key_signature()->c_str(), expected_key_signature.c_str()); + EXPECT_EQ(key.get_key_signature()->length(), expected_key_signature.length()); + uchar* key_data_fetched= key.get_key_data(); + size_t key_data_fetched_size= key.get_key_data_size(); + std::string key_data_with_version= "4:" + key_data2; + EXPECT_STREQ(key_data_with_version.c_str(), reinterpret_cast(key_data_fetched)); + EXPECT_STREQ("AES", fetched_key->get_key_type()->c_str()); + ASSERT_TRUE(key_data_with_version.length()+1 == key_data_fetched_size); + + std::string sk_data1("sk_data_1"); + Vault_key *sys_key1= new Vault_key("percona_sk:0", "AES", NULL, sk_data1.c_str(), sk_data1.length()+1); + sys_key1->xor_data(); + + EXPECT_EQ(vault_keys_container->store_key(sys_key1), FALSE); + + std::string key_data3("system_key_data_3"); + Vault_key *percona_binlog_rotation4_to_5= new Vault_key("percona_binlog", "AES", NULL, key_data3.c_str(), key_data3.length()+1); + percona_binlog_rotation4_to_5->xor_data(); + EXPECT_EQ(vault_keys_container->store_key(percona_binlog_rotation4_to_5), FALSE); + + Vault_key latest_percona_binlog_key_2("percona_binlog", NULL, NULL, NULL, 0); + IKey* fetched_key_2= vault_keys_container->fetch_key(&latest_percona_binlog_key_2); + + ASSERT_TRUE(fetched_key_2 != NULL); + + Vault_key key_2(fetched_key_2->get_key_id()->c_str(), fetched_key_2->get_key_type()->c_str(), fetched_key_2->get_user_id()->c_str(), + fetched_key_2->get_key_data(), fetched_key_2->get_key_data_size()); + key_2.xor_data(); + + EXPECT_STREQ(key_2.get_key_signature()->c_str(), expected_key_signature.c_str()); + EXPECT_EQ(key_2.get_key_signature()->length(), expected_key_signature.length()); + key_data_fetched= key_2.get_key_data(); + key_data_fetched_size= key_2.get_key_data_size(); + key_data_with_version= "5:" + key_data3; + EXPECT_STREQ(key_data_with_version.c_str(), reinterpret_cast(key_data_fetched)); + EXPECT_STREQ("AES", fetched_key->get_key_type()->c_str()); + ASSERT_TRUE(key_data_with_version.length()+1 == key_data_fetched_size); + + std::string key_data4("system_key_data_4"); + Vault_key *percona_binlog_rotation5_to_6= new Vault_key("percona_binlog", "AES", NULL, key_data4.c_str(), key_data4.length()+1); + percona_binlog_rotation5_to_6->xor_data(); + EXPECT_EQ(vault_keys_container->store_key(percona_binlog_rotation5_to_6), FALSE); + + Vault_key latest_percona_binlog_key_3("percona_binlog", NULL, NULL, NULL, 0); + IKey* fetched_key_3= vault_keys_container->fetch_key(&latest_percona_binlog_key_3); + + ASSERT_TRUE(fetched_key_3 != NULL); + + Vault_key key_3(fetched_key_3->get_key_id()->c_str(), fetched_key_3->get_key_type()->c_str(), fetched_key_3->get_user_id()->c_str(), + fetched_key_3->get_key_data(), fetched_key_3->get_key_data_size()); + key_3.xor_data(); + + EXPECT_STREQ(key_3.get_key_signature()->c_str(), expected_key_signature.c_str()); + EXPECT_EQ(key_3.get_key_signature()->length(), expected_key_signature.length()); + key_data_fetched= key_3.get_key_data(); + key_data_fetched_size= key_3.get_key_data_size(); + key_data_with_version= "6:" + key_data4; + EXPECT_STREQ(key_data_with_version.c_str(), reinterpret_cast(key_data_fetched)); + EXPECT_STREQ("AES", fetched_key->get_key_type()->c_str()); + ASSERT_TRUE(key_data_with_version.length()+1 == key_data_fetched_size); + + std::string sk_data2("sk_data_2"); + Vault_key *percona_sk_rotation0_to_1= new Vault_key("percona_sk", "AES", NULL, sk_data2.c_str(), sk_data2.length()+1); + percona_sk_rotation0_to_1->xor_data(); + EXPECT_EQ(vault_keys_container->store_key(percona_sk_rotation0_to_1), FALSE); + + Vault_key latest_sk("percona_sk", NULL, NULL, NULL, 0); + IKey* fetched_sk= vault_keys_container->fetch_key(&latest_sk); + + ASSERT_TRUE(fetched_sk != NULL); + + Vault_key sk(fetched_sk->get_key_id()->c_str(), fetched_sk->get_key_type()->c_str(), fetched_sk->get_user_id()->c_str(), + fetched_sk->get_key_data(), fetched_sk->get_key_data_size()); + sk.xor_data(); + + expected_key_signature = get_key_signature("","percona_sk",""); + EXPECT_STREQ(sk.get_key_signature()->c_str(), expected_key_signature.c_str()); + EXPECT_EQ(sk.get_key_signature()->length(), expected_key_signature.length()); + key_data_fetched= sk.get_key_data(); + key_data_fetched_size= sk.get_key_data_size(); + key_data_with_version = "1:" + sk_data2; + EXPECT_STREQ(key_data_with_version.c_str(), reinterpret_cast(key_data_fetched)); + EXPECT_STREQ("AES", fetched_sk->get_key_type()->c_str()); + ASSERT_TRUE(key_data_with_version.length()+1 == key_data_fetched_size); + + my_free(fetched_key->release_key_data()); + my_free(fetched_key_2->release_key_data()); + my_free(fetched_key_3->release_key_data()); + my_free(fetched_sk->release_key_data()); + + delete sample_key; // unused in this test + } + + TEST_F(Vault_keys_container_test, StoreStoreStoreSystemKeyAndTryRemovingSystemKey) + { + IKeyring_io *keyring_io = new Vault_io(logger, vault_curl, vault_parser); + EXPECT_FALSE(vault_keys_container->init(keyring_io, credential_file_url)); + + std::string key_data1("system_key_data_1"); + IKey *key1= new Vault_key("percona_binlog:7", "AES", NULL, key_data1.c_str(), key_data1.length()+1); + + EXPECT_EQ(vault_keys_container->store_key(key1), 0); + + std::string key_data2("system_key_data_2"); + Vault_key *key2= new Vault_key("percona_binlog:8", "AES", NULL, key_data2.c_str(), key_data2.length()+1); + EXPECT_EQ(vault_keys_container->store_key(key2), 0); + + std::string key_data3("system_key_data_3"); + Vault_key *key3= new Vault_key("percona_binlog:9", "AES", NULL, key_data3.c_str(), key_data3.length()+1); + EXPECT_EQ(vault_keys_container->store_key(key3), 0); + + Vault_key latest_percona_binlog_key("percona_binlog:9", NULL, NULL, NULL, 0); + ASSERT_TRUE(vault_keys_container->remove_key(&latest_percona_binlog_key) == TRUE); + + Vault_key percona_binlog_key("percona_binlog", NULL, NULL, NULL, 0); + ASSERT_TRUE(vault_keys_container->remove_key(&percona_binlog_key) == TRUE); + + delete sample_key; // unused in this test + } + + TEST_F(Vault_keys_container_test, StoreStoreStoreRemoveFetchSystemKeyFetchRegularKey) + { + IKeyring_io *keyring_io = new Vault_io(logger, vault_curl, vault_parser); + EXPECT_FALSE(vault_keys_container->init(keyring_io, credential_file_url)); + + std::string key_data1("system_key_data_1"); + IKey *key1= new Vault_key("percona_binlog:10", "AES", NULL, key_data1.c_str(), key_data1.length()+1); + + EXPECT_EQ(vault_keys_container->store_key(key1), 0); + + std::string key_data2("system_key_data_2"); + Vault_key *key2= new Vault_key("percona_binlog:11", "AES", NULL, key_data2.c_str(), key_data2.length()+1); + key2->xor_data(); + EXPECT_EQ(vault_keys_container->store_key(key2), 0); + + std::string key_data3("Robi3"); + Vault_key *key3= new Vault_key("Roberts_key3", "AES", "Robert", key_data3.c_str(), key_data3.length()+1); + EXPECT_EQ(vault_keys_container->store_key(key3), 0); + + std::string key_data4("Robi4"); + Vault_key *key4= new Vault_key("Roberts_key4", "AES", "Robert", key_data4.c_str(), key_data4.length()+1); + EXPECT_EQ(vault_keys_container->store_key(key4), 0); + + Vault_key key3_id("Roberts_key3", "AES", "Robert",NULL,0); + vault_keys_container->remove_key(&key3_id); + + Vault_key latest_percona_binlog_key("percona_binlog", NULL, NULL, NULL, 0); + IKey* fetched_key= vault_keys_container->fetch_key(&latest_percona_binlog_key); + + ASSERT_TRUE(fetched_key != NULL); + + std::string expected_key_signature= get_key_signature("","percona_binlog",""); + EXPECT_STREQ(fetched_key->get_key_signature()->c_str(), expected_key_signature.c_str()); + EXPECT_EQ(fetched_key->get_key_signature()->length(), expected_key_signature.length()); + uchar *key_data_fetched= fetched_key->get_key_data(); + size_t key_data_fetched_size= fetched_key->get_key_data_size(); + std::string key_data_with_version= "11:" + key_data2; + EXPECT_STREQ(key_data_with_version.c_str(), reinterpret_cast(key_data_fetched)); + EXPECT_STREQ("AES", fetched_key->get_key_type()->c_str()); + ASSERT_TRUE(key_data_with_version.length()+1 == key_data_fetched_size); + + my_free(fetched_key->release_key_data()); + + Vault_key regular_key("Roberts_key4", NULL, "Robert", NULL, 0); + IKey *fetched_regular_key= vault_keys_container->fetch_key(®ular_key); + + ASSERT_TRUE(fetched_regular_key != NULL); + std::string expected_regular_key_signature= get_key_signature("","Roberts_key4","Robert"); + EXPECT_STREQ(fetched_regular_key->get_key_signature()->c_str(), expected_regular_key_signature.c_str()); + EXPECT_EQ(fetched_regular_key->get_key_signature()->length(), expected_regular_key_signature.length()); + uchar *regular_key_data_fetched= fetched_regular_key->get_key_data(); + size_t regular_key_data_fetched_size= fetched_regular_key->get_key_data_size(); + EXPECT_STREQ(key_data4.c_str(), reinterpret_cast(regular_key_data_fetched)); + ASSERT_TRUE(key_data4.length()+1 == regular_key_data_fetched_size); + + my_free(fetched_regular_key->release_key_data()); + delete sample_key; // unused in this test + } + class Mock_vault_io : public IVault_io { public: From a8486452de609b54ede32ff4a696da8a83fa11b2 Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Fri, 16 Feb 2018 16:27:29 +0530 Subject: [PATCH 0555/1221] From ec33eee71cc8cde730bd45fb449af5863cc77f31 Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Wed, 10 Jan 2018 17:04:13 +0000 Subject: [PATCH 0556/1221] PS-1525: Adding the innodb_encrypt_tables system variable. Possible values: ON, OFF, FORCE. If an InnoDb table is created with this set to ON or FORCE without any encryption setting specified, it will be created encrypted, and the encryption setting will show up in it's creation info. --- .../innodb/r/percona_force_encryption.result | 237 ++++++++++++++++++ .../t/percona_force_encryption-master.opt | 4 + .../innodb/t/percona_force_encryption.test | 137 ++++++++++ .../suite/perfschema/t/show_sanity.test | 1 + .../r/innodb_encrypt_tables_basic.result | 28 +++ .../t/innodb_encrypt_tables_basic.test | 26 ++ sql/handler.h | 9 + sql/unireg.cc | 2 + storage/innobase/handler/ha_innodb.cc | 55 ++++ storage/innobase/handler/ha_innodb.h | 1 + storage/innobase/handler/handler0alter.cc | 6 +- storage/innobase/include/os0file.h | 12 +- storage/innobase/include/srv0srv.h | 2 + storage/innobase/srv/srv0srv.cc | 2 + 14 files changed, 516 insertions(+), 6 deletions(-) create mode 100644 mysql-test/suite/innodb/r/percona_force_encryption.result create mode 100644 mysql-test/suite/innodb/t/percona_force_encryption-master.opt create mode 100644 mysql-test/suite/innodb/t/percona_force_encryption.test create mode 100644 mysql-test/suite/sys_vars/r/innodb_encrypt_tables_basic.result create mode 100644 mysql-test/suite/sys_vars/t/innodb_encrypt_tables_basic.test diff --git a/mysql-test/suite/innodb/r/percona_force_encryption.result b/mysql-test/suite/innodb/r/percona_force_encryption.result new file mode 100644 index 000000000000..0cf9df161c28 --- /dev/null +++ b/mysql-test/suite/innodb/r/percona_force_encryption.result @@ -0,0 +1,237 @@ +create tablespace ts_unencrypted1 add datafile 'ts_unencrypted1.ibd' engine=innodb; +create tablespace ts_encrypted1 add datafile 'ts_encrypted1.ibd' engine=innodb encryption="Y"; +create tablespace ts_encrypted2 add datafile 'ts_encrypted2.ibd' engine=innodb encryption="Y"; +call mtr.add_suppression("\\[Error\\] InnoDB: Can't generate new master key for tablespace encryption, please check the keyring plugin is loaded."); +call mtr.add_suppression("\\[Error\\] InnoDB: Encryption can't find master key, please check the keyring plugin is loaded."); +call mtr.add_suppression("\\[ERROR\\] Function 'keyring_file' already exists"); +call mtr.add_suppression("\\[ERROR\\] Couldn't load plugin named 'keyring_file' with soname 'keyring_file.*'."); +call mtr.add_suppression("Plugin keyring_file reported"); +create table t1_default_explicit_on (a int) engine=innodb encryption="Y"; +create table t2_default_explicit_off (a int) engine=innodb encryption="N"; +set global innodb_encrypt_tables='ON'; +create table t3_on_default (a int) engine=innodb; +create table t4_on_explicit_off (a int) engine=innodb encryption="N"; +create table t_unencrypted_tablespace (a text) tablespace ts_unencrypted1 ENGINE="InnoDB"; +ERROR HY000: InnoDB: Tablespace `ts_unencrypted1` cannot contain an ENCRYPTED table. +set global innodb_encrypt_tables='FORCE'; +create table t5_force_explicit_off (a int) engine=innodb encryption="N"; +ERROR HY000: InnoDB: Only ENCRYPTED tables can be created with innodb_encrypt_tables=FORCE. +create table t6_force_default (a int) engine=innodb; +create table t6_force_default_dup like t6_force_default; +create table t7_partitioned (a int, primary key(a)) +engine=innodb tablespace ts_encrypted1 +partition by range (a) partitions 2 ( +partition p1 values less than (20), +partition p2 values less than (40) tablespace ts_encrypted2); +create table t_unencrypted_tablespace (a text) tablespace ts_unencrypted1 ENGINE="InnoDB"; +ERROR HY000: InnoDB: Tablespace `ts_unencrypted1` cannot contain an ENCRYPTED table. +set global innodb_encrypt_tables='OFF'; +create table t5_off_explicit_off (a int) engine=innodb encryption="N"; +create table t5_off_explicit_off_dup like t5_off_explicit_off; +create table t7_partitioned_fail (a int, primary key(a)) +engine=innodb tablespace ts_encrypted1 +partition by range (a) partitions 2 ( +partition p1 values less than (20), +partition p2 values less than (40) tablespace ts_encrypted2); +ERROR HY000: InnoDB: Tablespace `ts_encrypted1` can contain only an ENCRYPTED tables. +set global innodb_encrypt_tables='FORCE'; +insert into t1_default_explicit_on values (42); +insert into t2_default_explicit_off values (42); +insert into t3_on_default values (42); +insert into t4_on_explicit_off values (42); +insert into t5_off_explicit_off values (42); +insert into t6_force_default values (42); +show create table t1_default_explicit_on; +Table Create Table +t1_default_explicit_on CREATE TABLE `t1_default_explicit_on` ( + `a` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='Y' +show create table t2_default_explicit_off; +Table Create Table +t2_default_explicit_off CREATE TABLE `t2_default_explicit_off` ( + `a` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='N' +show create table t3_on_default; +Table Create Table +t3_on_default CREATE TABLE `t3_on_default` ( + `a` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='Y' +show create table t4_on_explicit_off; +Table Create Table +t4_on_explicit_off CREATE TABLE `t4_on_explicit_off` ( + `a` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='N' +show create table t5_off_explicit_off; +Table Create Table +t5_off_explicit_off CREATE TABLE `t5_off_explicit_off` ( + `a` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='N' +show create table t6_force_default; +Table Create Table +t6_force_default CREATE TABLE `t6_force_default` ( + `a` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='Y' +show create table t6_force_default_dup; +Table Create Table +t6_force_default_dup CREATE TABLE `t6_force_default_dup` ( + `a` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='Y' +show create table t5_off_explicit_off_dup; +Table Create Table +t5_off_explicit_off_dup CREATE TABLE `t5_off_explicit_off_dup` ( + `a` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='N' +show create table t7_partitioned; +Table Create Table +t7_partitioned CREATE TABLE `t7_partitioned` ( + `a` int(11) NOT NULL, + PRIMARY KEY (`a`) +) /*!50100 TABLESPACE `ts_encrypted1` */ ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='Y' +/*!50100 PARTITION BY RANGE (a) +(PARTITION p1 VALUES LESS THAN (20) TABLESPACE = `ts_encrypted1` ENGINE = InnoDB, + PARTITION p2 VALUES LESS THAN (40) TABLESPACE = `ts_encrypted2` ENGINE = InnoDB) */ +alter table t1_default_explicit_on encryption="N"; +ERROR HY000: InnoDB: Only ENCRYPTED tables can be created with innodb_encrypt_tables=FORCE. +alter table t2_default_explicit_off encryption="Y"; +alter table t2_default_explicit_off encryption="N"; +ERROR HY000: InnoDB: Only ENCRYPTED tables can be created with innodb_encrypt_tables=FORCE. +alter table t3_on_default; +alter table t4_on_explicit_off encryption="N"; +ERROR HY000: InnoDB: Only ENCRYPTED tables can be created with innodb_encrypt_tables=FORCE. +set global innodb_encrypt_tables='ON'; +alter table t1_default_explicit_on encryption="N", ALGORITHM=INPLACE; +ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Cannot alter encryption attribute by inplace algorithm.. Try ALGORITHM=COPY. +alter table t1_default_explicit_on encryption="Y", ALGORITHM=INPLACE; +alter table t1_default_explicit_on encryption="N"; +alter table t2_default_explicit_off encryption="N"; +alter table t3_on_default encryption="N", ALGORITHM=INPLACE; +ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Cannot alter encryption attribute by inplace algorithm.. Try ALGORITHM=COPY. +alter table t3_on_default encryption="Y", ALGORITHM=INPLACE; +alter table t3_on_default encryption="N"; +alter table t4_on_explicit_off ALGORITHM=INPLACE; +alter table t4_on_explicit_off encryption="N"; +alter table t6_force_default encryption="N", ALGORITHM=INPLACE; +ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Cannot alter encryption attribute by inplace algorithm.. Try ALGORITHM=COPY. +alter table t4_on_explicit_off change a b int; +set global innodb_encrypt_tables='FORCE'; +alter table t4_on_explicit_off change b a int; +show create table t1_default_explicit_on; +Table Create Table +t1_default_explicit_on CREATE TABLE `t1_default_explicit_on` ( + `a` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='N' +show create table t2_default_explicit_off; +Table Create Table +t2_default_explicit_off CREATE TABLE `t2_default_explicit_off` ( + `a` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='N' +show create table t3_on_default; +Table Create Table +t3_on_default CREATE TABLE `t3_on_default` ( + `a` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='N' +show create table t4_on_explicit_off; +Table Create Table +t4_on_explicit_off CREATE TABLE `t4_on_explicit_off` ( + `a` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='N' +show create table t5_off_explicit_off; +Table Create Table +t5_off_explicit_off CREATE TABLE `t5_off_explicit_off` ( + `a` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='N' +show create table t6_force_default; +Table Create Table +t6_force_default CREATE TABLE `t6_force_default` ( + `a` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='Y' +show create table t6_force_default_dup; +Table Create Table +t6_force_default_dup CREATE TABLE `t6_force_default_dup` ( + `a` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='Y' +show create table t5_off_explicit_off_dup; +Table Create Table +t5_off_explicit_off_dup CREATE TABLE `t5_off_explicit_off_dup` ( + `a` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='N' +show create table t7_partitioned; +Table Create Table +t7_partitioned CREATE TABLE `t7_partitioned` ( + `a` int(11) NOT NULL, + PRIMARY KEY (`a`) +) /*!50100 TABLESPACE `ts_encrypted1` */ ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='Y' +/*!50100 PARTITION BY RANGE (a) +(PARTITION p1 VALUES LESS THAN (20) TABLESPACE = `ts_encrypted1` ENGINE = InnoDB, + PARTITION p2 VALUES LESS THAN (40) TABLESPACE = `ts_encrypted2` ENGINE = InnoDB) */ +flush tables; +show create table t1_default_explicit_on; +Table Create Table +t1_default_explicit_on CREATE TABLE `t1_default_explicit_on` ( + `a` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='N' +show create table t2_default_explicit_off; +Table Create Table +t2_default_explicit_off CREATE TABLE `t2_default_explicit_off` ( + `a` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='N' +show create table t3_on_default; +Table Create Table +t3_on_default CREATE TABLE `t3_on_default` ( + `a` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='N' +show create table t4_on_explicit_off; +Table Create Table +t4_on_explicit_off CREATE TABLE `t4_on_explicit_off` ( + `a` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='N' +show create table t5_off_explicit_off; +Table Create Table +t5_off_explicit_off CREATE TABLE `t5_off_explicit_off` ( + `a` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='N' +show create table t6_force_default; +Table Create Table +t6_force_default CREATE TABLE `t6_force_default` ( + `a` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='Y' +show create table t6_force_default_dup; +Table Create Table +t6_force_default_dup CREATE TABLE `t6_force_default_dup` ( + `a` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='Y' +show create table t5_off_explicit_off_dup; +Table Create Table +t5_off_explicit_off_dup CREATE TABLE `t5_off_explicit_off_dup` ( + `a` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='N' +select * from t1_default_explicit_on; +a +42 +select * from t2_default_explicit_off; +a +42 +select * from t3_on_default; +a +42 +select * from t4_on_explicit_off; +a +42 +select * from t5_off_explicit_off; +a +42 +select * from t6_force_default; +a +42 +drop table t1_default_explicit_on; +drop table t2_default_explicit_off; +drop table t3_on_default; +drop table t4_on_explicit_off; +drop table t5_off_explicit_off; +drop table t6_force_default; +drop table t6_force_default_dup; +drop table t5_off_explicit_off_dup; +drop table t7_partitioned; +drop tablespace ts_encrypted1; +drop tablespace ts_encrypted2; +set global innodb_encrypt_tables=OFF; diff --git a/mysql-test/suite/innodb/t/percona_force_encryption-master.opt b/mysql-test/suite/innodb/t/percona_force_encryption-master.opt new file mode 100644 index 000000000000..317618bef3a3 --- /dev/null +++ b/mysql-test/suite/innodb/t/percona_force_encryption-master.opt @@ -0,0 +1,4 @@ +--early-plugin-load="keyring_file=$KEYRING_PLUGIN" +--loose-keyring_file_data=$MYSQL_TMP_DIR/ts_encrypt_keyring +$KEYRING_PLUGIN_OPT +$KEYRING_PLUGIN_LOAD diff --git a/mysql-test/suite/innodb/t/percona_force_encryption.test b/mysql-test/suite/innodb/t/percona_force_encryption.test new file mode 100644 index 000000000000..026076886dab --- /dev/null +++ b/mysql-test/suite/innodb/t/percona_force_encryption.test @@ -0,0 +1,137 @@ +--source include/have_innodb.inc +--source include/not_embedded.inc + +create tablespace ts_unencrypted1 add datafile 'ts_unencrypted1.ibd' engine=innodb; +create tablespace ts_encrypted1 add datafile 'ts_encrypted1.ibd' engine=innodb encryption="Y"; +create tablespace ts_encrypted2 add datafile 'ts_encrypted2.ibd' engine=innodb encryption="Y"; + +call mtr.add_suppression("\\[Error\\] InnoDB: Can't generate new master key for tablespace encryption, please check the keyring plugin is loaded."); +call mtr.add_suppression("\\[Error\\] InnoDB: Encryption can't find master key, please check the keyring plugin is loaded."); +call mtr.add_suppression("\\[ERROR\\] Function 'keyring_file' already exists"); +call mtr.add_suppression("\\[ERROR\\] Couldn't load plugin named 'keyring_file' with soname 'keyring_file.*'."); +call mtr.add_suppression("Plugin keyring_file reported"); + +let $initial_encrypt_tables_value = `select @@innodb_encrypt_tables`; + +create table t1_default_explicit_on (a int) engine=innodb encryption="Y"; +create table t2_default_explicit_off (a int) engine=innodb encryption="N"; + +set global innodb_encrypt_tables='ON'; +create table t3_on_default (a int) engine=innodb; +create table t4_on_explicit_off (a int) engine=innodb encryption="N"; +--error ER_ILLEGAL_HA_CREATE_OPTION +create table t_unencrypted_tablespace (a text) tablespace ts_unencrypted1 ENGINE="InnoDB"; +set global innodb_encrypt_tables='FORCE'; +--error ER_INVALID_ENCRYPTION_OPTION +create table t5_force_explicit_off (a int) engine=innodb encryption="N"; +create table t6_force_default (a int) engine=innodb; +create table t6_force_default_dup like t6_force_default; +create table t7_partitioned (a int, primary key(a)) + engine=innodb tablespace ts_encrypted1 + partition by range (a) partitions 2 ( + partition p1 values less than (20), + partition p2 values less than (40) tablespace ts_encrypted2); +--error ER_ILLEGAL_HA_CREATE_OPTION +create table t_unencrypted_tablespace (a text) tablespace ts_unencrypted1 ENGINE="InnoDB"; +set global innodb_encrypt_tables='OFF'; +create table t5_off_explicit_off (a int) engine=innodb encryption="N"; +create table t5_off_explicit_off_dup like t5_off_explicit_off; +--error ER_ILLEGAL_HA_CREATE_OPTION +create table t7_partitioned_fail (a int, primary key(a)) + engine=innodb tablespace ts_encrypted1 + partition by range (a) partitions 2 ( + partition p1 values less than (20), + partition p2 values less than (40) tablespace ts_encrypted2); +set global innodb_encrypt_tables='FORCE'; + +insert into t1_default_explicit_on values (42); +insert into t2_default_explicit_off values (42); +insert into t3_on_default values (42); +insert into t4_on_explicit_off values (42); +insert into t5_off_explicit_off values (42); +insert into t6_force_default values (42); + +show create table t1_default_explicit_on; +show create table t2_default_explicit_off; +show create table t3_on_default; +show create table t4_on_explicit_off; +show create table t5_off_explicit_off; +show create table t6_force_default; +show create table t6_force_default_dup; +show create table t5_off_explicit_off_dup; +show create table t7_partitioned; + +--error ER_INVALID_ENCRYPTION_OPTION +alter table t1_default_explicit_on encryption="N"; +alter table t2_default_explicit_off encryption="Y"; +--error ER_INVALID_ENCRYPTION_OPTION +alter table t2_default_explicit_off encryption="N"; +alter table t3_on_default; +--error ER_INVALID_ENCRYPTION_OPTION +alter table t4_on_explicit_off encryption="N"; + +set global innodb_encrypt_tables='ON'; +--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON +alter table t1_default_explicit_on encryption="N", ALGORITHM=INPLACE; +alter table t1_default_explicit_on encryption="Y", ALGORITHM=INPLACE; +alter table t1_default_explicit_on encryption="N"; +alter table t2_default_explicit_off encryption="N"; +--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON +alter table t3_on_default encryption="N", ALGORITHM=INPLACE; +alter table t3_on_default encryption="Y", ALGORITHM=INPLACE; +alter table t3_on_default encryption="N"; +alter table t4_on_explicit_off ALGORITHM=INPLACE; +alter table t4_on_explicit_off encryption="N"; +--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON +alter table t6_force_default encryption="N", ALGORITHM=INPLACE; + +# Even when it's ON or FORCE, non encrypted tables can be altered, +# without changing their encryption settings +alter table t4_on_explicit_off change a b int; +set global innodb_encrypt_tables='FORCE'; +alter table t4_on_explicit_off change b a int; + +show create table t1_default_explicit_on; +show create table t2_default_explicit_off; +show create table t3_on_default; +show create table t4_on_explicit_off; +show create table t5_off_explicit_off; +show create table t6_force_default; +show create table t6_force_default_dup; +show create table t5_off_explicit_off_dup; +show create table t7_partitioned; + +flush tables; + +show create table t1_default_explicit_on; +show create table t2_default_explicit_off; +show create table t3_on_default; +show create table t4_on_explicit_off; +show create table t5_off_explicit_off; +show create table t6_force_default; +show create table t6_force_default_dup; +show create table t5_off_explicit_off_dup; + +select * from t1_default_explicit_on; +select * from t2_default_explicit_off; +select * from t3_on_default; +select * from t4_on_explicit_off; +select * from t5_off_explicit_off; +select * from t6_force_default; + +# Cleanup +drop table t1_default_explicit_on; +drop table t2_default_explicit_off; +drop table t3_on_default; +drop table t4_on_explicit_off; +drop table t5_off_explicit_off; +drop table t6_force_default; +drop table t6_force_default_dup; +drop table t5_off_explicit_off_dup; +drop table t7_partitioned; + +drop tablespace ts_encrypted1; +drop tablespace ts_encrypted2; + +eval set global innodb_encrypt_tables=$initial_encrypt_tables_value; + diff --git a/mysql-test/suite/perfschema/t/show_sanity.test b/mysql-test/suite/perfschema/t/show_sanity.test index c533549d7262..88a34c463ef0 100644 --- a/mysql-test/suite/perfschema/t/show_sanity.test +++ b/mysql-test/suite/perfschema/t/show_sanity.test @@ -439,6 +439,7 @@ insert into test.sanity values ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_DOUBLEWRITE"), ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_DOUBLEWRITE_BATCH_SIZE"), ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_EMPTY_FREE_LIST_ALGORITHM"), + ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_ENCRYPT_TABLES"), ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_FAST_SHUTDOWN"), ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_FILE_FORMAT"), ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_FILE_FORMAT_CHECK"), diff --git a/mysql-test/suite/sys_vars/r/innodb_encrypt_tables_basic.result b/mysql-test/suite/sys_vars/r/innodb_encrypt_tables_basic.result new file mode 100644 index 000000000000..9cce6ab073f8 --- /dev/null +++ b/mysql-test/suite/sys_vars/r/innodb_encrypt_tables_basic.result @@ -0,0 +1,28 @@ +SET @@GLOBAL.innodb_encrypt_tables="OFF"; +SELECT @@GLOBAL.innodb_encrypt_tables; +@@GLOBAL.innodb_encrypt_tables +OFF +SET SESSION innodb_encrypt_tables="ON"; +ERROR HY000: Variable 'innodb_encrypt_tables' is a GLOBAL variable and should be set with SET GLOBAL +SET GLOBAL innodb_encrypt_tables="ON"; +SELECT @@GLOBAL.innodb_encrypt_tables; +@@GLOBAL.innodb_encrypt_tables +ON +SET GLOBAL innodb_encrypt_tables="OFF"; +SELECT @@GLOBAL.innodb_encrypt_tables; +@@GLOBAL.innodb_encrypt_tables +OFF +SET GLOBAL innodb_encrypt_tables="FORCE"; +SELECT @@GLOBAL.innodb_encrypt_tables; +@@GLOBAL.innodb_encrypt_tables +FORCE +SET GLOBAL innodb_encrypt_tables=1.1; +ERROR 42000: Incorrect argument type to variable 'innodb_encrypt_tables' +SET GLOBAL innodb_encrypt_tables=1e1; +ERROR 42000: Incorrect argument type to variable 'innodb_encrypt_tables' +SET GLOBAL innodb_encrypt_tables='foo'; +ERROR 42000: Variable 'innodb_encrypt_tables' can't be set to the value of 'foo' +SELECT @@GLOBAL.innodb_encrypt_tables; +@@GLOBAL.innodb_encrypt_tables +FORCE +SET @@GLOBAL.innodb_encrypt_tables="OFF"; diff --git a/mysql-test/suite/sys_vars/t/innodb_encrypt_tables_basic.test b/mysql-test/suite/sys_vars/t/innodb_encrypt_tables_basic.test new file mode 100644 index 000000000000..bf38377565a0 --- /dev/null +++ b/mysql-test/suite/sys_vars/t/innodb_encrypt_tables_basic.test @@ -0,0 +1,26 @@ +--source include/have_innodb.inc + +SET @@GLOBAL.innodb_encrypt_tables="OFF"; +SELECT @@GLOBAL.innodb_encrypt_tables; + +--error ER_GLOBAL_VARIABLE +SET SESSION innodb_encrypt_tables="ON"; + +SET GLOBAL innodb_encrypt_tables="ON"; +SELECT @@GLOBAL.innodb_encrypt_tables; +SET GLOBAL innodb_encrypt_tables="OFF"; +SELECT @@GLOBAL.innodb_encrypt_tables; +SET GLOBAL innodb_encrypt_tables="FORCE"; +SELECT @@GLOBAL.innodb_encrypt_tables; + +# Incorrect values +--error ER_WRONG_TYPE_FOR_VAR +SET GLOBAL innodb_encrypt_tables=1.1; +--error ER_WRONG_TYPE_FOR_VAR +SET GLOBAL innodb_encrypt_tables=1e1; +--error ER_WRONG_VALUE_FOR_VAR +SET GLOBAL innodb_encrypt_tables='foo'; + +SELECT @@GLOBAL.innodb_encrypt_tables; + +SET @@GLOBAL.innodb_encrypt_tables="OFF"; diff --git a/sql/handler.h b/sql/handler.h index b09474c55d37..8cb6adddced4 100644 --- a/sql/handler.h +++ b/sql/handler.h @@ -3159,7 +3159,16 @@ class handler :public Sql_alloc insert_id_for_cur_row; } + /* + This function allows the storage engine to adust the create_info before + the frm is written based on it. + This can be used for example to modify the create statement based on a + storage engine specific setting. + */ + virtual void adjust_create_info_for_frm(HA_CREATE_INFO *create_info) {} + virtual void update_create_info(HA_CREATE_INFO *create_info) {} + int check_old_types(); virtual int assign_to_keycache(THD* thd, HA_CHECK_OPT* check_opt) { return HA_ADMIN_NOT_IMPLEMENTED; } diff --git a/sql/unireg.cc b/sql/unireg.cc index 5acdc1228fbd..7e378ea0eb5d 100644 --- a/sql/unireg.cc +++ b/sql/unireg.cc @@ -519,6 +519,8 @@ int rea_create_table(THD *thd, const char *path, char frm_name[FN_REFLEN + 1]; strxnmov(frm_name, sizeof(frm_name) - 1, path, reg_ext, NullS); + file->adjust_create_info_for_frm(create_info); + if (mysql_create_frm(thd, frm_name, db, table_name, create_info, create_fields, keys, key_info, file)) diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index 5c3554db5305..053b346b0dba 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -2682,6 +2682,16 @@ Encryption::is_none(const char* algorithm) return(false); } +/** Check if the NO algorithm was explicitly specified. +@param[in] algorithm Encryption algorithm to check +@return true if no algorithm explicitly requested */ +bool +Encryption::none_explicitly_specified(const char* algorithm) +{ + return (algorithm != NULL && + innobase_strcasecmp(algorithm, "n") == 0); +} + /** Check the encryption option and set it @param[in] option encryption option @param[in/out] encryption The encryption algorithm @@ -11706,6 +11716,13 @@ create_table_info_t::create_option_compression_is_valid() return(true); } +enum srv_encrypt_tables_values { + SRV_ENCRYPT_TABLES_OFF = 0, + SRV_ENCRYPT_TABLES_ON = 1, + SRV_ENCRYPT_TABLES_FORCE = 2, +}; +static const char* srv_encrypt_tables_names[] = { "OFF", "ON", "FORCE", 0 }; + /** Validate ENCRYPTION option. @return true if valid, false if not. */ bool @@ -11727,6 +11744,14 @@ create_table_info_t::create_option_encryption_is_valid() const bool table_is_encrypted = !Encryption::is_none(m_create_info->encrypt_type.str); + if (srv_encrypt_tables == SRV_ENCRYPT_TABLES_FORCE + && Encryption::none_explicitly_specified(m_create_info->encrypt_type.str)) { + my_printf_error(ER_INVALID_ENCRYPTION_OPTION, + "InnoDB: Only ENCRYPTED tables can be created with " + "innodb_encrypt_tables=FORCE.", MYF(0)); + return(false); + } + if ((m_create_info->options & HA_LEX_CREATE_TMP_TABLE) && table_is_encrypted) { my_printf_error(ER_ILLEGAL_HA_CREATE_OPTION, @@ -11958,6 +11983,19 @@ create_table_info_t::create_options_are_invalid() return(ret); } +static const LEX_STRING yes_string = { C_STRING_WITH_LEN("Y") }; +void +ha_innobase::adjust_create_info_for_frm( + HA_CREATE_INFO* create_info) +{ + if (create_info->encrypt_type.length == 0 + && create_info->encrypt_type.str == NULL + && srv_encrypt_tables != SRV_ENCRYPT_TABLES_OFF + ) { + create_info->encrypt_type = yes_string; + } +} + /*****************************************************************//** Update create_info. Used in SHOW CREATE TABLE et al. */ @@ -21005,6 +21043,22 @@ static MYSQL_SYSVAR_ULONG(autoextend_increment, "Data file autoextend increment in megabytes", NULL, NULL, 64L, 1L, 1000L, 0); +static TYPELIB srv_encrypt_tables_typelib = { + array_elements(srv_encrypt_tables_names)-1, 0, srv_encrypt_tables_names, + NULL +}; +static MYSQL_SYSVAR_ENUM(encrypt_tables, srv_encrypt_tables, + PLUGIN_VAR_OPCMDARG, + "Enable encryption for tables. " + "When turned ON, all tables are created encrypted unless otherwise " + "specified. When it's set to FORCE, only encrypted tables can be created." + "The FORCE setting also disables non inplace alteration of unencrypted," + " tables without encrypting them in the process.", + NULL, + NULL, + 0, + &srv_encrypt_tables_typelib); + /** Validate the requested buffer pool size. Also, reserve the necessary memory needed for buffer pool resize. @param[in] thd thread handle @@ -21941,6 +21995,7 @@ static struct st_mysql_sys_var* innobase_system_variables[]= { MYSQL_SYSVAR(compressed_columns_zip_level), MYSQL_SYSVAR(compressed_columns_threshold), MYSQL_SYSVAR(ft_ignore_stopwords), + MYSQL_SYSVAR(encrypt_tables), NULL }; diff --git a/storage/innobase/handler/ha_innodb.h b/storage/innobase/handler/ha_innodb.h index 51b7be8da43a..2cbf39cf0ece 100644 --- a/storage/innobase/handler/ha_innodb.h +++ b/storage/innobase/handler/ha_innodb.h @@ -216,6 +216,7 @@ class ha_innobase: public handler ha_rows estimate_rows_upper_bound(); + virtual void adjust_create_info_for_frm(HA_CREATE_INFO *create_info); void update_create_info(HA_CREATE_INFO* create_info); int create( diff --git a/storage/innobase/handler/handler0alter.cc b/storage/innobase/handler/handler0alter.cc index 0395244a3b20..b05bfa675e98 100644 --- a/storage/innobase/handler/handler0alter.cc +++ b/storage/innobase/handler/handler0alter.cc @@ -556,11 +556,11 @@ ha_innobase::check_if_supported_inplace_alter( /* We don't support change encryption attribute with inplace algorithm. */ - char* old_encryption = this->table->s->encrypt_type.str; + const bool currently_encrypted = + m_prebuilt->table->flags2 & DICT_TF2_ENCRYPTION; char* new_encryption = altered_table->s->encrypt_type.str; - if (Encryption::is_none(old_encryption) - != Encryption::is_none(new_encryption)) { + if (currently_encrypted == Encryption::is_none(new_encryption)) { ha_alter_info->unsupported_reason = innobase_get_err_msg( ER_UNSUPPORTED_ALTER_ENCRYPTION_INPLACE); diff --git a/storage/innobase/include/os0file.h b/storage/innobase/include/os0file.h index e2b1edceed6c..bf1a6aee885c 100644 --- a/storage/innobase/include/os0file.h +++ b/storage/innobase/include/os0file.h @@ -448,12 +448,18 @@ struct Encryption { static const char* to_string(Type type) MY_ATTRIBUTE((warn_unused_result)); - /** Check if the string is "empty" or "none". - @param[in] algorithm Encryption algorithm to check - @return true if no algorithm requested */ + /** Check if the string is "" or "n". + @param[in] algorithm Encryption algorithm to check + @return true if no algorithm requested */ static bool is_none(const char* algorithm) MY_ATTRIBUTE((warn_unused_result)); + /** Check if the NO algorithm was explicitly specified. + @param[in] algorithm Encryption algorithm to check + @return true if no algorithm explicitly requested */ + static bool none_explicitly_specified(const char* algorithm) + MY_ATTRIBUTE((warn_unused_result)); + /** Generate random encryption value for key and iv. @param[in,out] value Encryption value */ static void random_value(byte* value); diff --git a/storage/innobase/include/srv0srv.h b/storage/innobase/include/srv0srv.h index 7da130082633..4a28a976ba59 100644 --- a/storage/innobase/include/srv0srv.h +++ b/storage/innobase/include/srv0srv.h @@ -572,6 +572,8 @@ extern my_bool srv_print_lock_wait_timeout_info; extern my_bool srv_cmp_per_index_enabled; +extern ulong srv_encrypt_tables; + /** Number of times secondary index lookup triggered cluster lookup */ extern ulint srv_sec_rec_cluster_reads; /** Number of times prefix optimization avoided triggering cluster lookup */ diff --git a/storage/innobase/srv/srv0srv.cc b/storage/innobase/srv/srv0srv.cc index 5b6d70934363..0d33cf40776c 100644 --- a/storage/innobase/srv/srv0srv.cc +++ b/storage/innobase/srv/srv0srv.cc @@ -397,6 +397,8 @@ ulong srv_n_purge_threads = 4; /* the number of pages to purge in one batch */ ulong srv_purge_batch_size = 20; +ulong srv_encrypt_tables = 0; + /* Internal setting for "innodb_stats_method". Decides how InnoDB treats NULL value when collecting statistics. By default, it is set to SRV_STATS_NULLS_EQUAL(0), ie. all NULL value are treated equal */ From fe24af0cbb66c98c0b49a2931c2b172a7113f711 Mon Sep 17 00:00:00 2001 From: Tiago Vale Date: Thu, 15 Feb 2018 11:28:39 +0000 Subject: [PATCH 0557/1221] Bug#27294009 XCOM ENTERS AN INFINITE LOOP IN CASE OF A REQUEST_RETRY (post-fix) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Problem ======= gr_start_onboot_fail_restore_read_mode has been consistently failing on Windows. Analysis ======== gr_start_onboot_fail_restore_read_mode fails consistently when the same MTR worker executes gr_start_group_without_boot_node immediately before gr_start_onboot_fail_restore_read_mode. I am unsure why this particular test order is problematic, but using a private error log for gr_start_onboot_fail_restore_read_mode solves the issue. Solution ======== Use a private error log for gr_start_onboot_fail_restore_read_mode. Reviewed-by: André Negrão Reviewed-by: Nuno Carvalho RB: 18752 --- .../mtr/t/gr_start_onboot_fail_restore_read_mode-master.opt | 2 ++ .../tests/mtr/t/gr_start_onboot_fail_restore_read_mode.test | 3 +-- 2 files changed, 3 insertions(+), 2 deletions(-) create mode 100644 rapid/plugin/group_replication/tests/mtr/t/gr_start_onboot_fail_restore_read_mode-master.opt diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_start_onboot_fail_restore_read_mode-master.opt b/rapid/plugin/group_replication/tests/mtr/t/gr_start_onboot_fail_restore_read_mode-master.opt new file mode 100644 index 000000000000..f8d9069dc160 --- /dev/null +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_start_onboot_fail_restore_read_mode-master.opt @@ -0,0 +1,2 @@ +--log_error=$MYSQLTEST_VARDIR/tmp/gr_start_onboot_fail_restore_read_mode.1.err +--no-console diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_start_onboot_fail_restore_read_mode.test b/rapid/plugin/group_replication/tests/mtr/t/gr_start_onboot_fail_restore_read_mode.test index ed30e65e9d4a..fc9454a8e086 100644 --- a/rapid/plugin/group_replication/tests/mtr/t/gr_start_onboot_fail_restore_read_mode.test +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_start_onboot_fail_restore_read_mode.test @@ -45,8 +45,7 @@ SET SESSION sql_log_bin= 1; --echo # replication --echo ############################################################ ---let $assert_file= $MYSQLTEST_VARDIR/log/mysqld.1.err ---let $assert_only_after = CURRENT_TEST: group_replication.gr_start_onboot_fail_restore_read_mode +--let $assert_file= $MYSQLTEST_VARDIR/tmp/gr_start_onboot_fail_restore_read_mode.1.err --let $assert_count = 1 --let $assert_select = Timeout on wait for view after joining group --let $assert_text = Found the expected Group Replication start error in the server log From 7de4c188c2299986bfed0e50336611b67460b9f5 Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Thu, 15 Feb 2018 16:19:01 +0100 Subject: [PATCH 0558/1221] PS-3838: Improve Travis tests with reordering of jobs and inverted directives for external dependency libraries for selected configurations (5.5) --- .travis.yml | 123 +++++++++++++++++++++++++++------------------------- 1 file changed, 64 insertions(+), 59 deletions(-) diff --git a/.travis.yml b/.travis.yml index 8d14f05e3ae0..bc227dfdeb21 100644 --- a/.travis.yml +++ b/.travis.yml @@ -29,87 +29,87 @@ matrix: # 2 - os: osx osx_image: xcode9.2 - env: BUILD=Debug LIBTYPE=bundled MAINTAINER_MODE=OFF + env: BUILD=RelWithDebInfo MAINTAINER_MODE=OFF # 3 - - os: osx - osx_image: xcode9.2 - env: BUILD=RelWithDebInfo LIBTYPE=bundled MAINTAINER_MODE=OFF + - compiler: clang + env: VERSION=4.0 BUILD=RelWithDebInfo # 4 - - compiler: gcc - env: VERSION=4.8 BUILD=Debug LIBTYPE=system + - compiler: clang + env: VERSION=5.0 BUILD=RelWithDebInfo # 5 - - compiler: gcc - env: VERSION=4.8 BUILD=RelWithDebInfo LIBTYPE=system + - compiler: clang + env: VERSION=5.0 BUILD=RelWithDebInfo INVERTED=ON # 6 - compiler: gcc - env: VERSION=7 BUILD=Debug LIBTYPE=system + env: VERSION=7 BUILD=RelWithDebInfo INVERTED=ON # 7 - compiler: gcc - env: VERSION=7 BUILD=RelWithDebInfo LIBTYPE=system + env: VERSION=7 BUILD=RelWithDebInfo # 8 - compiler: gcc - env: VERSION=7 BUILD=Debug LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" + env: VERSION=6 BUILD=RelWithDebInfo # 9 - compiler: gcc - env: VERSION=7 BUILD=RelWithDebInfo LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" + env: VERSION=5 BUILD=RelWithDebInfo # 10 - - compiler: clang - env: VERSION=5.0 BUILD=Debug LIBTYPE=system + - compiler: gcc + env: VERSION=4.8 BUILD=RelWithDebInfo # 11 - - compiler: clang - env: VERSION=5.0 BUILD=RelWithDebInfo LIBTYPE=system + - os: osx + osx_image: xcode9.2 + env: BUILD=Debug MAINTAINER_MODE=OFF # 12 - - compiler: gcc - env: VERSION=5 BUILD=Debug LIBTYPE=system + - compiler: clang + env: VERSION=4.0 BUILD=Debug # 13 - - compiler: gcc - env: VERSION=5 BUILD=RelWithDebInfo LIBTYPE=system + - compiler: clang + env: VERSION=5.0 BUILD=Debug # 14 - - compiler: gcc - env: VERSION=6 BUILD=Debug LIBTYPE=system + - compiler: clang + env: VERSION=5.0 BUILD=Debug INVERTED=ON # 15 - compiler: gcc - env: VERSION=6 BUILD=RelWithDebInfo LIBTYPE=system + env: VERSION=7 BUILD=Debug INVERTED=ON # 16 - - compiler: clang - env: VERSION=4.0 BUILD=Debug LIBTYPE=system + - compiler: gcc + env: VERSION=7 BUILD=Debug # 17 - - compiler: clang - env: VERSION=4.0 BUILD=RelWithDebInfo LIBTYPE=system + - compiler: gcc + env: VERSION=6 BUILD=Debug # 18 - - compiler: clang - env: VERSION=5.0 BUILD=Debug LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" + - compiler: gcc + env: VERSION=5 BUILD=Debug # 19 - - compiler: clang - env: VERSION=5.0 BUILD=RelWithDebInfo LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" + - compiler: gcc + env: VERSION=4.8 BUILD=Debug script: - - JOB_NUMBER=$(echo $TRAVIS_JOB_NUMBER | sed -e 's:[0-9][0-9]*\.\(.*\):\1:') - - echo PACKAGES=$PACKAGES MAINTAINER_MODE=$MAINTAINER_MODE JOB_NUMBER=$JOB_NUMBER TRAVIS_REPO_SLUG=$TRAVIS_REPO_SLUG TRAVIS_BRANCH=$TRAVIS_BRANCH TRAVIS_EVENT_TYPE=$TRAVIS_EVENT_TYPE TRAVIS_PULL_REQUEST=$TRAVIS_PULL_REQUEST + - JOB_NUMBER=$(echo $TRAVIS_JOB_NUMBER | sed -e 's:[0-9][0-9]*\.\(.*\):\1:'); + echo -- JOB_NUMBER=$JOB_NUMBER PACKAGES=$PACKAGES TRAVIS_REPO_SLUG=$TRAVIS_REPO_SLUG TRAVIS_BRANCH=$TRAVIS_BRANCH TRAVIS_EVENT_TYPE=$TRAVIS_EVENT_TYPE TRAVIS_PULL_REQUEST=$TRAVIS_PULL_REQUEST - # Perform all Travis jobs or only jobs that are included in ENV_VAR_JOB_NUMBERS list if it's defined - - JOB_NUMBERS="1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24"; - - if [[ "$ENV_VAR_JOB_NUMBERS" != "" ]]; then + - echo -- Perform all Travis jobs or only jobs that are included in ENV_VAR_JOB_NUMBERS list if it is defined; + JOB_NUMBERS="1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24"; + if [[ "$ENV_VAR_JOB_NUMBERS" != "" ]]; then JOB_NUMBERS=$ENV_VAR_JOB_NUMBERS; - fi - - JOB_ARRAY=(${JOB_NUMBERS// / }) - - if [[ ! " ${JOB_ARRAY[@]} " =~ " ${JOB_NUMBER} " ]]; then + fi; + JOB_ARRAY=(${JOB_NUMBERS// / }); + if [[ ! " ${JOB_ARRAY[@]} " =~ " ${JOB_NUMBER} " ]]; then echo Finishing as job ${JOB_NUMBER} is not on a list = $JOB_NUMBERS; travis_terminate 0; - fi + fi; - # Configure required LLVM and Ubuntu Toolchain repositories - - if [[ "$TRAVIS_OS_NAME" == "linux" ]] && [[ "$CC" == "clang" ]]; then - PACKAGES="$PACKAGES llvm-$VERSION-dev"; + - echo -- Configure required LLVM and Ubuntu Toolchain repositories; + if [[ "$TRAVIS_OS_NAME" == "linux" ]] && [[ "$CC" == "clang" ]]; then + PACKAGES="llvm-$VERSION-dev $PACKAGES"; curl -sSL "http://apt.llvm.org/llvm-snapshot.gpg.key" | sudo -E apt-key add -; echo "deb http://apt.llvm.org/trusty/ llvm-toolchain-trusty-$VERSION main" | sudo tee -a /etc/apt/sources.list > /dev/null; - fi - - if [[ "$TRAVIS_OS_NAME" == "linux" ]] && [[ "$CC" == "gcc" ]]; then + fi; + if [[ "$TRAVIS_OS_NAME" == "linux" ]] && [[ "$CC" == "gcc" ]]; then sudo -E apt-add-repository -y "ppa:ubuntu-toolchain-r/test"; - fi + fi; - # Update list of packages and download dependencies - - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then + - echo -- Update list of packages and download dependencies; + if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then CC=$CC-$VERSION; CXX=$CXX-$VERSION; sudo -E apt-get -yq update >> ~/apt-get-update.log 2>&1; @@ -123,20 +123,25 @@ script: export PATH="/usr/local/opt/ccache/libexec:$PATH"; fi - # Test Debug or RelWithDebInfo compilation - - mkdir bin; cd bin + - mkdir bin; cd bin; - $CC -v - $CXX -v - ccache --version - - cmake .. - -DCMAKE_BUILD_TYPE=$BUILD - -DMYSQL_MAINTAINER_MODE=$MAINTAINER_MODE - -DBUILD_CONFIG=mysql_release - -DFEATURE_SET=community - -DENABLE_DTRACE=OFF - -DWITH_SSL=$LIBTYPE - -DWITH_ZLIB=$LIBTYPE - $CMAKE_OPT + + - echo -- Perform Debug or RelWithDebInfo compilation; + if [[ "$INVERTED" == "ON" ]]; then + CMAKE_OPT="-DWITH_SSL=system -DWITH_ZLIB=bundled -DWITH_READLINE=OFF $CMAKE_OPT"; + fi; + echo -- BUILD=$BUILD MAINTAINER_MODE=$MAINTAINER_MODE CMAKE_OPT=\"$CMAKE_OPT\"; + cmake .. + -DCMAKE_BUILD_TYPE=$BUILD + -DMYSQL_MAINTAINER_MODE=$MAINTAINER_MODE + -DBUILD_CONFIG=mysql_release + -DFEATURE_SET=community + -DENABLE_DTRACE=OFF + -DWITH_EXAMPLE_STORAGE_ENGINE=ON + -DWITH_PAM=ON + $CMAKE_OPT - make -j2 - ccache --show-stats From a193b476dbfd0207dbc5b6d18340ac0a53bcbb2c Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Fri, 16 Feb 2018 13:55:00 +0100 Subject: [PATCH 0559/1221] PS-3838: Improve Travis tests with reordering of jobs and inverted directives for external dependency libraries for selected configurations (5.6) --- .travis.yml | 129 +++++++++++++++++++++++++++------------------------- 1 file changed, 67 insertions(+), 62 deletions(-) diff --git a/.travis.yml b/.travis.yml index 504f7b0b2f02..8c185174019f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -30,87 +30,87 @@ matrix: # 2 - os: osx osx_image: xcode9.2 - env: BUILD=Debug LIBTYPE=bundled MAINTAINER_MODE=OFF WITHOUT_TOKUDB=ON + env: BUILD=RelWithDebInfo MAINTAINER_MODE=OFF WITHOUT_TOKUDB=ON # 3 - - os: osx - osx_image: xcode9.2 - env: BUILD=RelWithDebInfo LIBTYPE=bundled MAINTAINER_MODE=OFF WITHOUT_TOKUDB=ON + - compiler: clang + env: VERSION=4.0 BUILD=RelWithDebInfo # 4 - - compiler: gcc - env: VERSION=4.8 BUILD=Debug LIBTYPE=system + - compiler: clang + env: VERSION=5.0 BUILD=RelWithDebInfo # 5 - - compiler: gcc - env: VERSION=4.8 BUILD=RelWithDebInfo LIBTYPE=system + - compiler: clang + env: VERSION=5.0 BUILD=RelWithDebInfo INVERTED=ON # 6 - compiler: gcc - env: VERSION=7 BUILD=Debug LIBTYPE=system + env: VERSION=7 BUILD=RelWithDebInfo INVERTED=ON # 7 - compiler: gcc - env: VERSION=7 BUILD=RelWithDebInfo LIBTYPE=system + env: VERSION=7 BUILD=RelWithDebInfo # 8 - compiler: gcc - env: VERSION=7 BUILD=Debug LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" + env: VERSION=6 BUILD=RelWithDebInfo # 9 - compiler: gcc - env: VERSION=7 BUILD=RelWithDebInfo LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" + env: VERSION=5 BUILD=RelWithDebInfo # 10 - - compiler: clang - env: VERSION=5.0 BUILD=Debug LIBTYPE=system + - compiler: gcc + env: VERSION=4.8 BUILD=RelWithDebInfo # 11 - - compiler: clang - env: VERSION=5.0 BUILD=RelWithDebInfo LIBTYPE=system + - os: osx + osx_image: xcode9.2 + env: BUILD=Debug MAINTAINER_MODE=OFF WITHOUT_TOKUDB=ON # 12 - - compiler: gcc - env: VERSION=5 BUILD=Debug LIBTYPE=system + - compiler: clang + env: VERSION=4.0 BUILD=Debug # 13 - - compiler: gcc - env: VERSION=5 BUILD=RelWithDebInfo LIBTYPE=system + - compiler: clang + env: VERSION=5.0 BUILD=Debug # 14 - - compiler: gcc - env: VERSION=6 BUILD=Debug LIBTYPE=system + - compiler: clang + env: VERSION=5.0 BUILD=Debug INVERTED=ON # 15 - compiler: gcc - env: VERSION=6 BUILD=RelWithDebInfo LIBTYPE=system + env: VERSION=7 BUILD=Debug INVERTED=ON # 16 - - compiler: clang - env: VERSION=4.0 BUILD=Debug LIBTYPE=system + - compiler: gcc + env: VERSION=7 BUILD=Debug # 17 - - compiler: clang - env: VERSION=4.0 BUILD=RelWithDebInfo LIBTYPE=system + - compiler: gcc + env: VERSION=6 BUILD=Debug # 18 - - compiler: clang - env: VERSION=5.0 BUILD=Debug LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" + - compiler: gcc + env: VERSION=5 BUILD=Debug # 19 - - compiler: clang - env: VERSION=5.0 BUILD=RelWithDebInfo LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" + - compiler: gcc + env: VERSION=4.8 BUILD=Debug script: - - JOB_NUMBER=$(echo $TRAVIS_JOB_NUMBER | sed -e 's:[0-9][0-9]*\.\(.*\):\1:') - - echo PACKAGES=$PACKAGES MAINTAINER_MODE=$MAINTAINER_MODE WITHOUT_TOKUDB=$WITHOUT_TOKUDB JOB_NUMBER=$JOB_NUMBER TRAVIS_REPO_SLUG=$TRAVIS_REPO_SLUG TRAVIS_BRANCH=$TRAVIS_BRANCH TRAVIS_EVENT_TYPE=$TRAVIS_EVENT_TYPE TRAVIS_PULL_REQUEST=$TRAVIS_PULL_REQUEST + - JOB_NUMBER=$(echo $TRAVIS_JOB_NUMBER | sed -e 's:[0-9][0-9]*\.\(.*\):\1:'); + echo -- JOB_NUMBER=$JOB_NUMBER PACKAGES=$PACKAGES TRAVIS_REPO_SLUG=$TRAVIS_REPO_SLUG TRAVIS_BRANCH=$TRAVIS_BRANCH TRAVIS_EVENT_TYPE=$TRAVIS_EVENT_TYPE TRAVIS_PULL_REQUEST=$TRAVIS_PULL_REQUEST - # Perform all Travis jobs or only jobs that are included in ENV_VAR_JOB_NUMBERS list if it's defined - - JOB_NUMBERS="1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24"; - - if [[ "$ENV_VAR_JOB_NUMBERS" != "" ]]; then + - echo -- Perform all Travis jobs or only jobs that are included in ENV_VAR_JOB_NUMBERS list if it is defined; + JOB_NUMBERS="1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24"; + if [[ "$ENV_VAR_JOB_NUMBERS" != "" ]]; then JOB_NUMBERS=$ENV_VAR_JOB_NUMBERS; - fi - - JOB_ARRAY=(${JOB_NUMBERS// / }) - - if [[ ! " ${JOB_ARRAY[@]} " =~ " ${JOB_NUMBER} " ]]; then + fi; + JOB_ARRAY=(${JOB_NUMBERS// / }); + if [[ ! " ${JOB_ARRAY[@]} " =~ " ${JOB_NUMBER} " ]]; then echo Finishing as job ${JOB_NUMBER} is not on a list = $JOB_NUMBERS; travis_terminate 0; - fi + fi; - # Configure required LLVM and Ubuntu Toolchain repositories - - if [[ "$TRAVIS_OS_NAME" == "linux" ]] && [[ "$CC" == "clang" ]]; then - PACKAGES="$PACKAGES llvm-$VERSION-dev"; + - echo -- Configure required LLVM and Ubuntu Toolchain repositories; + if [[ "$TRAVIS_OS_NAME" == "linux" ]] && [[ "$CC" == "clang" ]]; then + PACKAGES="llvm-$VERSION-dev $PACKAGES"; curl -sSL "http://apt.llvm.org/llvm-snapshot.gpg.key" | sudo -E apt-key add -; echo "deb http://apt.llvm.org/trusty/ llvm-toolchain-trusty-$VERSION main" | sudo tee -a /etc/apt/sources.list > /dev/null; - fi - - if [[ "$TRAVIS_OS_NAME" == "linux" ]] && [[ "$CC" == "gcc" ]]; then + fi; + if [[ "$TRAVIS_OS_NAME" == "linux" ]] && [[ "$CC" == "gcc" ]]; then sudo -E apt-add-repository -y "ppa:ubuntu-toolchain-r/test"; - fi + fi; - # Update list of packages and download dependencies - - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then + - echo -- Update list of packages and download dependencies; + if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then CC=$CC-$VERSION; CXX=$CXX-$VERSION; sudo -E apt-get -yq update >> ~/apt-get-update.log 2>&1; @@ -124,23 +124,28 @@ script: export PATH="/usr/local/opt/ccache/libexec:$PATH"; fi - # Test Debug or RelWithDebInfo compilation - - mkdir bin; cd bin + - mkdir bin; cd bin; - $CC -v - $CXX -v - ccache --version - - cmake .. - -DCMAKE_BUILD_TYPE=$BUILD - -DMYSQL_MAINTAINER_MODE=$MAINTAINER_MODE - -DBUILD_CONFIG=mysql_release - -DFEATURE_SET=community - -DENABLE_DTRACE=OFF - -DWITH_SSL=$LIBTYPE - -DWITH_ZLIB=$LIBTYPE - -DWITH_LIBEVENT=$LIBTYPE - -DWITHOUT_TOKUDB=$WITHOUT_TOKUDB - -DENABLE_DOWNLOADS=1 - $CMAKE_OPT + + - echo -- Perform Debug or RelWithDebInfo compilation; + if [[ "$INVERTED" == "ON" ]]; then + CMAKE_OPT="-DWITH_SSL=system -DWITH_ZLIB=bundled -DWITH_LIBEVENT=system -DWITH_EDITLINE=bundled $CMAKE_OPT"; + fi; + echo -- BUILD=$BUILD MAINTAINER_MODE=$MAINTAINER_MODE WITHOUT_TOKUDB=$WITHOUT_TOKUDB CMAKE_OPT=\"$CMAKE_OPT\"; + cmake .. + -DCMAKE_BUILD_TYPE=$BUILD + -DMYSQL_MAINTAINER_MODE=$MAINTAINER_MODE + -DBUILD_CONFIG=mysql_release + -DFEATURE_SET=community + -DENABLE_DTRACE=OFF + -DENABLE_DOWNLOADS=1 + -DWITH_EXAMPLE_STORAGE_ENGINE=ON + -DWITH_QUERY_RESPONSE_TIME=ON + -DWITH_PAM=ON + -DWITHOUT_TOKUDB=$WITHOUT_TOKUDB + $CMAKE_OPT - make -j2 - ccache --show-stats From 9ce722f9400b26edbd50decb269da16c9d58864b Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Fri, 16 Feb 2018 15:17:13 +0100 Subject: [PATCH 0560/1221] PS-3838: Improve Travis tests with reordering of jobs and inverted directives for external dependency libraries for selected configurations (5.7) --- .travis.yml | 141 +++++++++++++++++++++++++++------------------------- 1 file changed, 74 insertions(+), 67 deletions(-) diff --git a/.travis.yml b/.travis.yml index c814ce593d74..3373c802608f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,6 +8,7 @@ cache: directories: - $HOME/.ccache - /usr/local/Cellar # cache homebrew packages for macOS + - $TRAVIS_BUILD_DIR/deps # cache boost env: global: @@ -32,91 +33,91 @@ matrix: # 2 - os: osx osx_image: xcode9.2 - env: BUILD=Debug LIBTYPE=bundled MAINTAINER_MODE=OFF WITHOUT_TOKUDB=ON WITHOUT_ROCKSDB=ON WITH_MECAB= + env: BUILD=RelWithDebInfo MAINTAINER_MODE=OFF WITHOUT_TOKUDB=ON WITHOUT_ROCKSDB=ON WITH_MECAB= # 3 - - os: osx - osx_image: xcode9.2 - env: BUILD=RelWithDebInfo LIBTYPE=bundled MAINTAINER_MODE=OFF WITHOUT_TOKUDB=ON WITHOUT_ROCKSDB=ON WITH_MECAB= + - compiler: clang + env: VERSION=4.0 BUILD=RelWithDebInfo # 4 - - compiler: gcc - env: VERSION=4.8 BUILD=Debug LIBTYPE=system + - compiler: clang + env: VERSION=5.0 BUILD=RelWithDebInfo # 5 - - compiler: gcc - env: VERSION=4.8 BUILD=RelWithDebInfo LIBTYPE=system + - compiler: clang + env: VERSION=5.0 BUILD=RelWithDebInfo INVERTED=ON # 6 - compiler: gcc - env: VERSION=7 BUILD=Debug LIBTYPE=system + env: VERSION=7 BUILD=RelWithDebInfo INVERTED=ON # 7 - compiler: gcc - env: VERSION=7 BUILD=RelWithDebInfo LIBTYPE=system + env: VERSION=7 BUILD=RelWithDebInfo # 8 - compiler: gcc - env: VERSION=7 BUILD=Debug LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" + env: VERSION=6 BUILD=RelWithDebInfo # 9 - compiler: gcc - env: VERSION=7 BUILD=RelWithDebInfo LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" + env: VERSION=5 BUILD=RelWithDebInfo # 10 - - compiler: clang - env: VERSION=5.0 BUILD=Debug LIBTYPE=system + - compiler: gcc + env: VERSION=4.8 BUILD=RelWithDebInfo # 11 - - compiler: clang - env: VERSION=5.0 BUILD=RelWithDebInfo LIBTYPE=system + - os: osx + osx_image: xcode9.2 + env: BUILD=Debug MAINTAINER_MODE=OFF WITHOUT_TOKUDB=ON WITHOUT_ROCKSDB=ON WITH_MECAB= # 12 - - compiler: gcc - env: VERSION=5 BUILD=Debug LIBTYPE=system + - compiler: clang + env: VERSION=4.0 BUILD=Debug # 13 - - compiler: gcc - env: VERSION=5 BUILD=RelWithDebInfo LIBTYPE=system + - compiler: clang + env: VERSION=5.0 BUILD=Debug # 14 - - compiler: gcc - env: VERSION=6 BUILD=Debug LIBTYPE=system + - compiler: clang + env: VERSION=5.0 BUILD=Debug INVERTED=ON # 15 - compiler: gcc - env: VERSION=6 BUILD=RelWithDebInfo LIBTYPE=system + env: VERSION=7 BUILD=Debug INVERTED=ON # 16 - - compiler: clang - env: VERSION=4.0 BUILD=Debug LIBTYPE=system + - compiler: gcc + env: VERSION=7 BUILD=Debug # 17 - - compiler: clang - env: VERSION=4.0 BUILD=RelWithDebInfo LIBTYPE=system + - compiler: gcc + env: VERSION=6 BUILD=Debug # 18 - - compiler: clang - env: VERSION=5.0 BUILD=Debug LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" + - compiler: gcc + env: VERSION=5 BUILD=Debug # 19 - - compiler: clang - env: VERSION=5.0 BUILD=RelWithDebInfo LIBTYPE=bundled CMAKE_OPT="-DWITH_PAM=1" + - compiler: gcc + env: VERSION=4.8 BUILD=Debug script: - - JOB_NUMBER=$(echo $TRAVIS_JOB_NUMBER | sed -e 's:[0-9][0-9]*\.\(.*\):\1:') - - echo PACKAGES=$PACKAGES MAINTAINER_MODE=$MAINTAINER_MODE WITHOUT_TOKUDB=$WITHOUT_TOKUDB JOB_NUMBER=$JOB_NUMBER TRAVIS_REPO_SLUG=$TRAVIS_REPO_SLUG TRAVIS_BRANCH=$TRAVIS_BRANCH TRAVIS_EVENT_TYPE=$TRAVIS_EVENT_TYPE TRAVIS_PULL_REQUEST=$TRAVIS_PULL_REQUEST + - JOB_NUMBER=$(echo $TRAVIS_JOB_NUMBER | sed -e 's:[0-9][0-9]*\.\(.*\):\1:'); + echo -- JOB_NUMBER=$JOB_NUMBER PACKAGES=$PACKAGES TRAVIS_REPO_SLUG=$TRAVIS_REPO_SLUG TRAVIS_BRANCH=$TRAVIS_BRANCH TRAVIS_EVENT_TYPE=$TRAVIS_EVENT_TYPE TRAVIS_PULL_REQUEST=$TRAVIS_PULL_REQUEST - # Perform all Travis jobs or only jobs that are included in ENV_VAR_JOB_NUMBERS list if it's defined - - JOB_NUMBERS="1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24"; - - if [[ "$ENV_VAR_JOB_NUMBERS" != "" ]]; then + - echo -- Perform all Travis jobs or only jobs that are included in ENV_VAR_JOB_NUMBERS list if it is defined; + JOB_NUMBERS="1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24"; + if [[ "$ENV_VAR_JOB_NUMBERS" != "" ]]; then JOB_NUMBERS=$ENV_VAR_JOB_NUMBERS; - fi - - JOB_ARRAY=(${JOB_NUMBERS// / }) - - if [[ ! " ${JOB_ARRAY[@]} " =~ " ${JOB_NUMBER} " ]]; then + fi; + JOB_ARRAY=(${JOB_NUMBERS// / }); + if [[ ! " ${JOB_ARRAY[@]} " =~ " ${JOB_NUMBER} " ]]; then echo Finishing as job ${JOB_NUMBER} is not on a list = $JOB_NUMBERS; travis_terminate 0; - fi + fi; - # Configure required LLVM and Ubuntu Toolchain repositories - - if [[ "$TRAVIS_OS_NAME" == "linux" ]] && [[ "$CC" == "clang" ]]; then - PACKAGES="$PACKAGES llvm-$VERSION-dev"; + - echo -- Configure required LLVM and Ubuntu Toolchain repositories; + if [[ "$TRAVIS_OS_NAME" == "linux" ]] && [[ "$CC" == "clang" ]]; then + PACKAGES="llvm-$VERSION-dev $PACKAGES"; curl -sSL "http://apt.llvm.org/llvm-snapshot.gpg.key" | sudo -E apt-key add -; echo "deb http://apt.llvm.org/trusty/ llvm-toolchain-trusty-$VERSION main" | sudo tee -a /etc/apt/sources.list > /dev/null; - fi - - if [[ "$TRAVIS_OS_NAME" == "linux" ]] && [[ "$CC" == "gcc" ]]; then + fi; + if [[ "$TRAVIS_OS_NAME" == "linux" ]] && [[ "$CC" == "gcc" ]]; then sudo -E apt-add-repository -y "ppa:ubuntu-toolchain-r/test"; - fi + fi; - # Update list of packages and download dependencies - - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then + - echo -- Update list of packages and download dependencies; + if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then CC=$CC-$VERSION; CXX=$CXX-$VERSION; sudo -E apt-get -yq update >> ~/apt-get-update.log 2>&1; - sudo -E apt-get -yq --no-install-suggests --no-install-recommends install $CXX $PACKAGES cmake cmake-curses-gui bison libncurses5-dev libaio-dev libssl-dev libevent-dev libmecab-dev || travis_terminate 1; + sudo -E apt-get -yq --no-install-suggests --no-install-recommends install $CXX $PACKAGES cmake cmake-curses-gui bison libncurses5-dev libaio-dev libssl-dev libevent-dev libmecab-dev libprotobuf-dev protobuf-compiler || travis_terminate 1; sudo ln -s $(which ccache) /usr/lib/ccache/$CC; sudo ln -s $(which ccache) /usr/lib/ccache/$CXX || echo; else @@ -126,27 +127,33 @@ script: export PATH="/usr/local/opt/ccache/libexec:$PATH"; fi - # Test Debug or RelWithDebInfo compilation - - mkdir bin; cd bin + - mkdir bin; cd bin; - $CC -v - $CXX -v - ccache --version - - cmake .. - -DCMAKE_BUILD_TYPE=$BUILD - -DMYSQL_MAINTAINER_MODE=$MAINTAINER_MODE - -DBUILD_CONFIG=mysql_release - -DFEATURE_SET=community - -DENABLE_DTRACE=OFF - -DENABLE_DOWNLOADS=1 - -DDOWNLOAD_BOOST=1 - -DWITH_BOOST=../deps - -DWITH_SSL=$LIBTYPE - -DWITH_ZLIB=$LIBTYPE - -DWITH_LIBEVENT=$LIBTYPE - -DWITH_MECAB=$WITH_MECAB - -DWITHOUT_TOKUDB=$WITHOUT_TOKUDB - -DWITHOUT_ROCKSDB=$WITHOUT_ROCKSDB - $CMAKE_OPT + + - echo -- Perform Debug or RelWithDebInfo compilation; + if [[ "$INVERTED" == "ON" ]]; then + CMAKE_OPT="-DWITH_SSL=system -DWITH_ZLIB=bundled -DWITH_LIBEVENT=system -DWITH_EDITLINE=bundled -DWITH_PROTOBUF=system $CMAKE_OPT"; + fi; + echo -- BUILD=$BUILD MAINTAINER_MODE=$MAINTAINER_MODE WITHOUT_TOKUDB=$WITHOUT_TOKUDB WITHOUT_ROCKSDB=$WITHOUT_ROCKSDB WITH_MECAB=$WITH_MECAB CMAKE_OPT=\"$CMAKE_OPT\"; + cmake .. + -DCMAKE_BUILD_TYPE=$BUILD + -DMYSQL_MAINTAINER_MODE=$MAINTAINER_MODE + -DBUILD_CONFIG=mysql_release + -DFEATURE_SET=community + -DENABLE_DTRACE=OFF + -DENABLE_DOWNLOADS=1 + -DDOWNLOAD_BOOST=1 + -DWITH_BOOST=../deps + -DWITH_KEYRING_VAULT=ON + -DWITH_EXAMPLE_STORAGE_ENGINE=ON + -DWITH_QUERY_RESPONSE_TIME=OFF + -DWITH_PAM=ON + -DWITH_MECAB=$WITH_MECAB + -DWITHOUT_TOKUDB=$WITHOUT_TOKUDB + -DWITHOUT_ROCKSDB=$WITHOUT_ROCKSDB + $CMAKE_OPT - make -j2 - ccache --show-stats From 8df7ae787258948d7b9a91864f89492d570b066d Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Wed, 14 Feb 2018 11:20:04 -0700 Subject: [PATCH 0561/1221] MYR-126 : rocksdb.concurrent_alter unstable - Test uses multiple instances of mysqlslap with multiple threads each, which occasionally causes mysqld to emit "[Warning] Too many connections" to the error log. - Raise the servers max_connections to 500 for test. - Added big_test as a single instance of this test can overtake an entire system for the duration of the test. --- mysql-test/suite/rocksdb/r/concurrent_alter.result | 4 ++++ mysql-test/suite/rocksdb/t/concurrent_alter.test | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/mysql-test/suite/rocksdb/r/concurrent_alter.result b/mysql-test/suite/rocksdb/r/concurrent_alter.result index 06eb4581167d..9ab238edbf55 100644 --- a/mysql-test/suite/rocksdb/r/concurrent_alter.result +++ b/mysql-test/suite/rocksdb/r/concurrent_alter.result @@ -1,3 +1,6 @@ +set @orig_max_connections=@@global.max_connections; +set @@global.max_connections=500; +call mtr.add_suppression("Too many connections"); CREATE DATABASE mysqlslap; use mysqlslap; CREATE TABLE a1 (a int, b int) ENGINE=ROCKSDB; @@ -9,3 +12,4 @@ a1 CREATE TABLE `a1` ( `b` int(11) DEFAULT NULL ) ENGINE=ROCKSDB DEFAULT CHARSET=latin1 DROP DATABASE mysqlslap; +set @@global.max_connections=@orig_max_connections; diff --git a/mysql-test/suite/rocksdb/t/concurrent_alter.test b/mysql-test/suite/rocksdb/t/concurrent_alter.test index b8a7bb057db2..2b5a2d125219 100644 --- a/mysql-test/suite/rocksdb/t/concurrent_alter.test +++ b/mysql-test/suite/rocksdb/t/concurrent_alter.test @@ -1,8 +1,11 @@ --source include/have_rocksdb.inc +--source include/big_test.inc # # Generate concurrent requests to alter a table using mysqlslap # +set @orig_max_connections=@@global.max_connections; +set @@global.max_connections=500; CREATE DATABASE mysqlslap; @@ -30,3 +33,5 @@ SHOW CREATE TABLE a1; --remove_file $MYSQL_TMP_DIR/concurrent_alter.sh DROP DATABASE mysqlslap; + +set @@global.max_connections=@orig_max_connections; From 5bb6b0367ce05dfd3d61471f9a3bc2e6df34c0ea Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Fri, 16 Feb 2018 15:36:43 -0700 Subject: [PATCH 0562/1221] MYR-234 : lower default value of rocksdb_max_row_locks to 1 million - To help prevent OOM on bulk/large operations and return an error to client before server is killed as RocksDB keep all uncommitted changes in memory until commit. This is only a temporary fix to try to prevent server kills. Longer term fix is in the works upstream. - Reduced rocksdb_max_row_locks from 1024 * 1024 * 1024 (~ 1 billion) to 1024 * 1024 (1 million) and re-recorded tests that need to be adjusted. --- .../r/rocksdb_max_row_locks_basic.result | 18 +++++++++--------- mysql-test/suite/rocksdb/r/rocksdb.result | 2 +- storage/rocksdb/ha_rocksdb.cc | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_max_row_locks_basic.result b/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_max_row_locks_basic.result index e417e4d5c4e9..c925a68d4ed0 100644 --- a/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_max_row_locks_basic.result +++ b/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_max_row_locks_basic.result @@ -6,11 +6,11 @@ INSERT INTO invalid_values VALUES('\'aaa\''); SET @start_global_value = @@global.ROCKSDB_MAX_ROW_LOCKS; SELECT @start_global_value; @start_global_value -1073741824 +1048576 SET @start_session_value = @@session.ROCKSDB_MAX_ROW_LOCKS; SELECT @start_session_value; @start_session_value -1073741824 +1048576 '# Setting to valid values in global scope#' "Trying to set variable @@global.ROCKSDB_MAX_ROW_LOCKS to 1" SET @@global.ROCKSDB_MAX_ROW_LOCKS = 1; @@ -21,7 +21,7 @@ SELECT @@global.ROCKSDB_MAX_ROW_LOCKS; SET @@global.ROCKSDB_MAX_ROW_LOCKS = DEFAULT; SELECT @@global.ROCKSDB_MAX_ROW_LOCKS; @@global.ROCKSDB_MAX_ROW_LOCKS -1073741824 +1048576 "Trying to set variable @@global.ROCKSDB_MAX_ROW_LOCKS to 1024" SET @@global.ROCKSDB_MAX_ROW_LOCKS = 1024; SELECT @@global.ROCKSDB_MAX_ROW_LOCKS; @@ -31,7 +31,7 @@ SELECT @@global.ROCKSDB_MAX_ROW_LOCKS; SET @@global.ROCKSDB_MAX_ROW_LOCKS = DEFAULT; SELECT @@global.ROCKSDB_MAX_ROW_LOCKS; @@global.ROCKSDB_MAX_ROW_LOCKS -1073741824 +1048576 '# Setting to valid values in session scope#' "Trying to set variable @@session.ROCKSDB_MAX_ROW_LOCKS to 1" SET @@session.ROCKSDB_MAX_ROW_LOCKS = 1; @@ -42,7 +42,7 @@ SELECT @@session.ROCKSDB_MAX_ROW_LOCKS; SET @@session.ROCKSDB_MAX_ROW_LOCKS = DEFAULT; SELECT @@session.ROCKSDB_MAX_ROW_LOCKS; @@session.ROCKSDB_MAX_ROW_LOCKS -1073741824 +1048576 "Trying to set variable @@session.ROCKSDB_MAX_ROW_LOCKS to 1024" SET @@session.ROCKSDB_MAX_ROW_LOCKS = 1024; SELECT @@session.ROCKSDB_MAX_ROW_LOCKS; @@ -52,21 +52,21 @@ SELECT @@session.ROCKSDB_MAX_ROW_LOCKS; SET @@session.ROCKSDB_MAX_ROW_LOCKS = DEFAULT; SELECT @@session.ROCKSDB_MAX_ROW_LOCKS; @@session.ROCKSDB_MAX_ROW_LOCKS -1073741824 +1048576 '# Testing with invalid values in global scope #' "Trying to set variable @@global.ROCKSDB_MAX_ROW_LOCKS to 'aaa'" SET @@global.ROCKSDB_MAX_ROW_LOCKS = 'aaa'; Got one of the listed errors SELECT @@global.ROCKSDB_MAX_ROW_LOCKS; @@global.ROCKSDB_MAX_ROW_LOCKS -1073741824 +1048576 SET @@global.ROCKSDB_MAX_ROW_LOCKS = @start_global_value; SELECT @@global.ROCKSDB_MAX_ROW_LOCKS; @@global.ROCKSDB_MAX_ROW_LOCKS -1073741824 +1048576 SET @@session.ROCKSDB_MAX_ROW_LOCKS = @start_session_value; SELECT @@session.ROCKSDB_MAX_ROW_LOCKS; @@session.ROCKSDB_MAX_ROW_LOCKS -1073741824 +1048576 DROP TABLE valid_values; DROP TABLE invalid_values; diff --git a/mysql-test/suite/rocksdb/r/rocksdb.result b/mysql-test/suite/rocksdb/r/rocksdb.result index 021be13b675e..0822f396e93d 100644 --- a/mysql-test/suite/rocksdb/r/rocksdb.result +++ b/mysql-test/suite/rocksdb/r/rocksdb.result @@ -956,7 +956,7 @@ rocksdb_max_background_jobs 2 rocksdb_max_latest_deadlocks 5 rocksdb_max_log_file_size 0 rocksdb_max_manifest_file_size 18446744073709551615 -rocksdb_max_row_locks 1073741824 +rocksdb_max_row_locks 1048576 rocksdb_max_subcompactions 1 rocksdb_max_total_wal_size 0 rocksdb_merge_buf_size 67108864 diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index c35820fb486e..7e57d89ee7e6 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -433,7 +433,7 @@ static void rocksdb_set_wal_bytes_per_sync(THD *thd, // Options definitions ////////////////////////////////////////////////////////////////////////////// static constexpr ulong RDB_MAX_LOCK_WAIT_SECONDS = 1024 * 1024 * 1024; -static constexpr ulong RDB_MAX_ROW_LOCKS = 1024 * 1024 * 1024; +static constexpr ulong RDB_MAX_ROW_LOCKS = 1024 * 1024; static constexpr ulong RDB_DEFAULT_BULK_LOAD_SIZE = 1000; static constexpr ulong RDB_MAX_BULK_LOAD_SIZE = 1024 * 1024 * 1024; static constexpr size_t RDB_DEFAULT_MERGE_BUF_SIZE = 64 * 1024 * 1024; From 62f55b4bd217c66ce69eb3a605c8e378d83a4eb3 Mon Sep 17 00:00:00 2001 From: Alfranio Correia Date: Sat, 17 Feb 2018 09:14:16 +0000 Subject: [PATCH 0563/1221] WL#11338: Backport changes to uniquely identify different node incarnations In GCS/XCOM, a node can receive messages such as ping(s) and paxos proposals and act upon them immediately after rebooting. However, a node that has recently rebooted suffers from amnesia and does not know anything about its prior states unless it has written them into a stable storage. Unfortunately, GCS/XCOM does not use any stable storage in order to improve performance but pings and paxos are still indiscriminately processed after reboot. This scenario can lead to a variety of strange problems, and in the extreme case, it can generate data inconsistency. We have identified the problem and started augmenting GCS/XCOM with the notion of incarnation. Basically, every node has a unique identifier assigned to it every time it joins the cluster and this information can be used to distinguish among different node incarnations. This fix contains the following set of patches backported from 8.0: . BUG#25311008 . BUG#22204121 --- .../include/mysql/gcs/gcs_member_identifier.h | 95 ++++++++- .../libmysqlgcs/include/mysql/gcs/gcs_view.h | 20 +- .../xcom/gcs_xcom_control_interface.cc | 187 ++++++++++++------ .../xcom/gcs_xcom_control_interface.h | 47 ++++- .../xcom/gcs_xcom_group_management.cc | 100 ++++++++-- .../bindings/xcom/gcs_xcom_group_management.h | 9 +- .../src/bindings/xcom/gcs_xcom_interface.cc | 35 +++- .../src/bindings/xcom/gcs_xcom_utils.cc | 119 +++++++++-- .../src/bindings/xcom/gcs_xcom_utils.h | 46 +++-- .../src/bindings/xcom/xcom/node_list.c | 65 ++++-- .../src/bindings/xcom/xcom/node_list.h | 6 +- .../src/bindings/xcom/xcom/server_struct.h | 1 + .../src/bindings/xcom/xcom/site_def.c | 4 +- .../src/bindings/xcom/xcom/xcom_base.c | 134 ++++++++++++- .../src/bindings/xcom/xcom/xcom_base.h | 6 +- .../src/bindings/xcom/xcom/xcom_cfg.c | 4 +- .../src/bindings/xcom/xcom/xcom_detector.c | 9 +- .../src/bindings/xcom/xcom/xcom_transport.c | 44 ++++- .../src/bindings/xcom/xcom/xcom_transport.h | 7 +- .../src/interface/gcs_member_identifier.cc | 126 +++++++++++- .../libmysqlgcs/src/interface/gcs_view.cc | 25 ++- .../r/gr_force_peer_addresses_option.result | 2 +- .../mtr/r/gr_majority_loss_restart.result | 28 ++- .../tests/mtr/t/gr_force_member_expel.cnf | 1 + .../mtr/t/gr_force_peer_addresses_option.test | 2 +- .../tests/mtr/t/gr_majority_loss_restart.test | 68 ++++--- 26 files changed, 987 insertions(+), 203 deletions(-) diff --git a/rapid/plugin/group_replication/libmysqlgcs/include/mysql/gcs/gcs_member_identifier.h b/rapid/plugin/group_replication/libmysqlgcs/include/mysql/gcs/gcs_member_identifier.h index e19896dbe85f..2a8350202c0a 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/include/mysql/gcs/gcs_member_identifier.h +++ b/rapid/plugin/group_replication/libmysqlgcs/include/mysql/gcs/gcs_member_identifier.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -17,6 +17,73 @@ #define GCS_MEMBER_IDENTIFIER_INCLUDED #include +#include "gcs_types.h" + + +/* + Internal GCS unique identifier. +*/ +class Gcs_uuid +{ +public: + /* + Create a GCS unique identifier. + */ + + static Gcs_uuid create_uuid(); + + + /* + Default constructor + */ + Gcs_uuid(); + + + /* + Copies the internal buffer which is used to store a uuid to an + external buffer. If the parameters buffer or size point to NULL, + nothing is returned. + + @param [out] buffer storage buffer + @param [out] size data size + @return Whether the data was returned or not. + */ + + bool encode(uchar **buffer, unsigned int *size) const; + + + /* + Copies the external buffer to an internal buffer. If the + parameter buffer points to NULL, nothing is returned. + + @param [in] buffer storage buffer + @param [in] size data size + @return Whether the data was copied or not. + */ + + bool decode(const uchar *buffer, const unsigned int size); + + /* + Return the size of the UUID in use. + */ + size_t size() const; + + /* + Unique identifier which currently only accommodates 64 bits but + can easily be extended to 128 bits and become a truly UUID in + the future. + */ + + std::string actual_value; + +private: + /* + Create a GCS unique identifier. + */ + + static const std::string do_create_uuid(); +}; + /** @class Gcs_member_identifier @@ -41,6 +108,17 @@ class Gcs_member_identifier explicit Gcs_member_identifier(const std::string &member_id); + /** + Gcs_member_identifier constructor. + + @param[in] member_id the member identifier + @param[in] uuid the member uuid + */ + + explicit Gcs_member_identifier(const std::string &member_id, + const Gcs_uuid &uuid); + + virtual ~Gcs_member_identifier() {} @@ -50,6 +128,18 @@ class Gcs_member_identifier const std::string& get_member_id() const; + /** + @return the member uuid + */ + + const Gcs_uuid& get_member_uuid() const; + + + /** + Regenerate the member uuid + */ + + void regenerate_member_uuid(); /** Redefinition of the operator less, to allow usage as key in maps. @@ -76,7 +166,8 @@ class Gcs_member_identifier private: - std::string member_id; + std::string m_member_id; + Gcs_uuid m_uuid; }; #endif // GCS_MEMBER_IDENTIFIER_INCLUDED diff --git a/rapid/plugin/group_replication/libmysqlgcs/include/mysql/gcs/gcs_view.h b/rapid/plugin/group_replication/libmysqlgcs/include/mysql/gcs/gcs_view.h index 1a15a22b9e5d..774b7242e0af 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/include/mysql/gcs/gcs_view.h +++ b/rapid/plugin/group_replication/libmysqlgcs/include/mysql/gcs/gcs_view.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -21,6 +21,7 @@ #include "gcs_member_identifier.h" #include +#include /** @class Gcs_view @@ -146,6 +147,23 @@ class Gcs_view Gcs_view::Gcs_view_error_code get_error_code() const; + /* + @param[in] address Member's identifier which is usually its address + @return the member whose identifier matches the one provided as + parameter + */ + + const Gcs_member_identifier *get_member(const std::string &member_id) const; + + + /* + @param[in] member_id Member's identifier which is usually its address + @return whether there is a member whose identifier matches the one + provided as parameter + */ + + bool has_member(const std::string &member_id) const; + private: std::vector *m_members; Gcs_view_identifier *m_view_id; diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_control_interface.cc b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_control_interface.cc index fd0b03270405..ff2f6e63beb2 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_control_interface.cc +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_control_interface.cc @@ -47,9 +47,11 @@ static void *expel_member_from_group_thread(void *ptr) nodes_to_kill *ntk= (nodes_to_kill *) ptr; unsigned int len= 0; char **addrs= NULL; + blob *uuids= NULL; len= static_cast(ntk->nodes->size()); addrs= static_cast(malloc(len * sizeof(char *))); + uuids= static_cast(malloc(len * sizeof(blob))); node_list nl; std::vector::const_iterator nodes_it= ntk->nodes->begin(); @@ -57,14 +59,22 @@ static void *expel_member_from_group_thread(void *ptr) for (int i= 0; nodes_it != nodes_end; i++, ++nodes_it) { addrs[i]= const_cast((*nodes_it)->get_member_id().c_str()); + uuids[i].data.data_val= + static_cast(malloc((*nodes_it)->get_member_uuid().size() * sizeof(char))); + (*nodes_it)->get_member_uuid().encode( + reinterpret_cast(&uuids[i].data.data_val), + &(uuids[i].data.data_len) + ); + MYSQL_GCS_LOG_TRACE( - "expel_member_from_group_thread():: " - << "Node[" << i << "]=" << addrs[i] + "expel_member_from_group_thread():: Node[" << i << "]=(address=" + << addrs[i] << ", uuid=" << (*nodes_it)->get_member_uuid().actual_value + << ")" ); } nl.node_list_len= len; - nl.node_list_val= ntk->proxy->new_node_address(len, addrs); + nl.node_list_val= ntk->proxy->new_node_address_uuid(len, addrs, uuids); free(addrs); MYSQL_GCS_LOG_TRACE( @@ -73,8 +83,12 @@ static void *expel_member_from_group_thread(void *ptr) ) nodes_it= ntk->nodes->begin(); - for (; nodes_it != nodes_end; ++nodes_it) + for (int i= 0; nodes_it != nodes_end; i++, ++nodes_it) + { + free(uuids[i].data.data_val); delete (*nodes_it); + } + free(uuids); ntk->proxy->xcom_client_remove_node(&nl, ntk->group_id_hash); MYSQL_GCS_LOG_TRACE( @@ -125,25 +139,26 @@ Gcs_xcom_control(Gcs_xcom_group_member_information *group_member_information, Gcs_xcom_state_exchange_interface *state_exchange, Gcs_xcom_view_change_control_interface *view_control, bool boot, - My_xp_socket_util *socket_util) + My_xp_socket_util *socket_util, + Gcs_xcom_group_management *xcom_management) :m_gid(NULL), m_gid_hash(0), m_xcom_proxy(xcom_proxy), event_listeners(), m_local_member_id(NULL), - m_local_member_id_hash(0), m_state_exchange(state_exchange), m_local_node_info(NULL), m_xcom_thread(), - m_hash(0), m_node_list_me(), - m_uuid(0), m_socket_util(socket_util), + m_join_attempts(0), + m_join_sleep_time(0), m_xcom_running(false), m_boot(boot), m_initial_peers(), m_view_control(view_control), - m_gcs_engine(gcs_engine) + m_gcs_engine(gcs_engine), + m_xcom_management(xcom_management) { set_local_node_info(group_member_information); @@ -169,9 +184,12 @@ Gcs_xcom_control::~Gcs_xcom_control() delete m_gid; delete m_local_member_id; - if (m_node_list_me.node_list_len) - delete_node_address(m_node_list_me.node_list_len, - m_node_list_me.node_list_val); + if (m_node_list_me.node_list_len != 0) + { + m_xcom_proxy->delete_node_address(m_node_list_me.node_list_len, + m_node_list_me.node_list_val); + m_node_list_me.node_list_len= 0; + } clear_peer_nodes(); } @@ -213,24 +231,53 @@ bool Gcs_xcom_control::is_xcom_running() } +void Gcs_xcom_control::set_join_behavior(unsigned int join_attempts, + unsigned join_sleep_time) +{ + m_join_attempts= join_attempts; + MYSQL_GCS_LOG_INFO( + "Configured number of attempts to join: " << m_join_attempts + ) + + m_join_sleep_time= join_sleep_time; + MYSQL_GCS_LOG_INFO( + "Configured time between attempts to join: " << m_join_sleep_time + << " seconds" + ) +} + + /** Initializes address list. */ void Gcs_xcom_control::init_me() { + blob uuid; Gcs_xcom_group_member_information *node= m_local_node_info; - char *addr= (char *)node->get_member_address().c_str(); - blob *uuid; + char *addr= const_cast(node->get_member_address().c_str()); + + if (m_node_list_me.node_list_len != 0) + { + m_xcom_proxy->delete_node_address(m_node_list_me.node_list_len, + m_node_list_me.node_list_val); + m_node_list_me.node_list_len= 0; + } + + uuid.data.data_val= static_cast( + malloc(m_local_member_id->get_member_uuid().size() * sizeof(char)) + ); + m_local_member_id->get_member_uuid().encode( + reinterpret_cast(&uuid.data.data_val), + &(uuid.data.data_len) + ); m_node_list_me.node_list_len= 1; m_node_list_me.node_list_val= - m_xcom_proxy->new_node_address(m_node_list_me.node_list_len, &addr); - uuid= &m_node_list_me.node_list_val[0].uuid; - - uuid->data.data_len= sizeof(m_local_member_id_hash); - uuid->data.data_val= (char *) calloc(1, uuid->data.data_len); - memcpy(uuid->data.data_val, &m_local_member_id_hash, uuid->data.data_len); - } + m_xcom_proxy->new_node_address_uuid( + m_node_list_me.node_list_len, &addr, &uuid + ); + free(uuid.data.data_val); +} void do_function_join(Gcs_control_interface *control_if) @@ -296,14 +343,10 @@ enum_gcs_error Gcs_xcom_control::join() } -enum_gcs_error Gcs_xcom_control::do_join() +enum_gcs_error Gcs_xcom_control::do_join(bool retry) { - /* Used to initialize xcom */ - int local_port= m_local_node_info->get_member_port(); - connection_descriptor* con= NULL; - int comm_status= XCOM_COMM_STATUS_UNDEFINED; - enum_gcs_error is_xcom_ready= GCS_NOK; - bool xcom_handlers_open= false; + int retry_join_count= m_join_attempts; + enum_gcs_error ret= GCS_NOK; if (m_xcom_running) { @@ -315,6 +358,40 @@ enum_gcs_error Gcs_xcom_control::do_join() return GCS_NOK; } + while (ret == GCS_NOK) + { + ret= retry_do_join(); + + retry_join_count--; + if (retry && ret == GCS_NOK && retry_join_count >= 1) + { + MYSQL_GCS_LOG_DEBUG( + "Sleeping for 5 seconds before retrying to join the group. " + "There are " << retry_join_count << " more attempt(s) before " + "giving up."); + My_xp_util::sleep_seconds(m_join_sleep_time); + } + else + { + break; + } + } + + m_view_control->end_join(); + + return ret; +} + + +enum_gcs_error Gcs_xcom_control::retry_do_join() +{ + /* Used to initialize xcom */ + int local_port= m_local_node_info->get_member_port(); + connection_descriptor* con= NULL; + int comm_status= XCOM_COMM_STATUS_UNDEFINED; + enum_gcs_error is_xcom_ready= GCS_NOK; + bool xcom_handlers_open= false; + /* Clean up notification flags that are used to check whether XCOM is running or not. @@ -335,7 +412,7 @@ enum_gcs_error Gcs_xcom_control::do_join() //Wait for XCom comms to become ready m_xcom_proxy->xcom_wait_for_xcom_comms_status_change(comm_status); - if(comm_status == XCOM_COMMS_ERROR) + if(comm_status != XCOM_COMMS_OK) { MYSQL_GCS_LOG_ERROR("Error joining the group while waiting for" << " the network layer to become ready.") @@ -361,8 +438,8 @@ enum_gcs_error Gcs_xcom_control::do_join() if (m_boot) { MYSQL_GCS_LOG_TRACE( - "::join():: I am the boot node. " - << "Calling xcom_client_boot" + "::join():: I am the boot node. " << local_port << " " << + m_local_member_id->get_member_uuid().actual_value << ". Calling xcom_client_boot" ) int error= 0; @@ -441,9 +518,9 @@ enum_gcs_error Gcs_xcom_control::do_join() goto err; } MYSQL_GCS_LOG_TRACE( - "::join():: Calling xcom_client_add_node " << - local_port << " connected to " << addr << ":" << port << - " to join" + "::join():: Calling xcom_client_add_node " << local_port << " " + << m_local_member_id->get_member_uuid().actual_value << + " connected to " << addr << ":" << port << " to join" ) /* Explicitly check the return value so that we are able to distinguish @@ -482,8 +559,6 @@ enum_gcs_error Gcs_xcom_control::do_join() MYSQL_GCS_LOG_DEBUG("The member has joined the group. Local port: " << local_port); - m_view_control->end_join(); - return GCS_OK; err: @@ -497,7 +572,7 @@ enum_gcs_error Gcs_xcom_control::do_join() "Killing the group communication engine because the member failed to" << " join. Local port: " << local_port ); - if (m_xcom_proxy->xcom_exit(xcom_handlers_open)) + if (comm_status != XCOM_COMMS_ERROR && m_xcom_proxy->xcom_exit(xcom_handlers_open)) { MYSQL_GCS_LOG_WARN("Failed to kill the group communication engine " << "after the member failed to join. Local port: " << @@ -523,8 +598,6 @@ enum_gcs_error Gcs_xcom_control::do_join() m_xcom_running= false; - m_view_control->end_join(); - return GCS_NOK; } @@ -597,7 +670,6 @@ enum_gcs_error Gcs_xcom_control::do_leave() return GCS_NOK; } - MYSQL_GCS_LOG_TRACE("::leave():: Contacting local node") m_xcom_proxy->xcom_client_remove_node(&m_node_list_me, m_gid_hash); /* @@ -777,10 +849,8 @@ build_total_members(Gcs_xcom_nodes *xcom_nodes, /* Build the member identifier from the address reported. */ - string *member_id_str= - Gcs_xcom_utils::build_xcom_member_id(addresses[i]); Gcs_member_identifier *member_id= - new Gcs_member_identifier(*member_id_str); + new Gcs_member_identifier(addresses[i], xcom_nodes->get_uuids()[i]); /* Check whether the node is reported as alive or faulty. @@ -793,8 +863,6 @@ build_total_members(Gcs_xcom_nodes *xcom_nodes, { failed_members.push_back(member_id); } - - delete member_id_str; } } @@ -827,9 +895,7 @@ build_joined_members(std::vector &joined_members, } if (joined) - joined_members.push_back( - new Gcs_member_identifier((*alive_members_it)->get_member_id()) - ); + joined_members.push_back(new Gcs_member_identifier(*(*alive_members_it))); } } @@ -944,6 +1010,7 @@ xcom_receive_local_view(Gcs_xcom_nodes *xcom_nodes) Gcs_view *current_view= m_view_control->get_unsafe_current_view(); unsigned int size= xcom_nodes->get_size(); const std::vector &addresses= xcom_nodes->get_addresses(); + const std::vector &uuids= xcom_nodes->get_uuids(); const std::vector &statuses= xcom_nodes->get_statuses(); // ignore @@ -959,7 +1026,7 @@ xcom_receive_local_view(Gcs_xcom_nodes *xcom_nodes) // build the sets of servers for (i= 0; i < size; i++) { - Gcs_member_identifier gcs_id(addresses[i]); + Gcs_member_identifier gcs_id(addresses[i], uuids[i]); // filter out those that are not yet in the current view // delivered to the application. For example, they might @@ -1087,6 +1154,12 @@ xcom_receive_global_view(synode_no message_id, Gcs_xcom_nodes *xcom_nodes, listener_ends; std::vector exchange_data; + /* + Save the current set of nodes with its associated UUIDs because this may + be required if the group is reconfigured. + */ + m_xcom_management->save_xcom_nodes(xcom_nodes); + /* If there is no previous view installed, there is no current set of members. @@ -1244,7 +1317,7 @@ xcom_receive_global_view(synode_no message_id, Gcs_xcom_nodes *xcom_nodes, "(My node_id is " << xcom_nodes->get_node_no() << ") ::xcom_receive_global_view():: " "Discarding view because nothing has changed." - " Same view flag is " << same_view << "," + " Same view flag is " << same_view << ", number of failed nodes is " << failed_members.size() << ", number of joined nodes is " << joined_members.size() << ", number of left nodes is " << left_members.size() @@ -1572,16 +1645,14 @@ build_member_list(set *origin, void Gcs_xcom_control::set_local_node_info(Gcs_xcom_group_member_information *group_member_information) { m_local_node_info= group_member_information; - string address= group_member_information->get_member_address(); - - string *member_id= Gcs_xcom_utils::build_xcom_member_id(address); delete m_local_member_id; - m_local_member_id= new Gcs_member_identifier(*member_id); - m_local_member_id_hash= - Gcs_xcom_utils::mhash((unsigned char *) m_local_member_id->get_member_id().c_str(), - m_local_member_id->get_member_id().size()); - delete member_id; + /* + We don't care at this point about the unique identifier associated to + this object because it will be changed while joining a group by the + init_me() method. + */ + m_local_member_id= new Gcs_member_identifier(address); } void Gcs_xcom_control::set_peer_nodes(std::vector &xcom_peers) diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_control_interface.h b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_control_interface.h index 5f8af67f3f7e..451cadabd560 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_control_interface.h +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_control_interface.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -27,6 +27,7 @@ #include "gcs_xcom_state_exchange.h" #include "gcs_xcom_group_member_information.h" +#include "gcs_xcom_group_management.h" #include "gcs_xcom_interface.h" #include "gcs_xcom_notification.h" @@ -96,18 +97,21 @@ class Gcs_xcom_control: public Gcs_control_interface Gcs_xcom_state_exchange_interface *state_exchange, Gcs_xcom_view_change_control_interface *view_control, bool boot, - My_xp_socket_util *socket_util); + My_xp_socket_util *socket_util, + Gcs_xcom_group_management *xcom_management); virtual ~Gcs_xcom_control(); // Gcs_control_interface implementation enum_gcs_error join(); + enum_gcs_error do_join(const bool retry=true); + /* Responsible for doing the heavy lifting related to the join operation. */ - enum_gcs_error do_join(); + enum_gcs_error retry_do_join(); enum_gcs_error leave(); @@ -219,6 +223,16 @@ class Gcs_xcom_control: public Gcs_control_interface */ bool is_xcom_running(); + + /* + Configure how many times the node will try to join a group. + + @param[in] join_attempts number of attempts to join + @param[in] join_sleep_time time between attempts to join + */ + void set_join_behavior(unsigned int join_attempts, + unsigned int join_sleep_time); + private: void init_me(); @@ -314,7 +328,6 @@ class Gcs_xcom_control: public Gcs_control_interface // Information about the local membership of this node Gcs_member_identifier *m_local_member_id; - unsigned int m_local_member_id_hash; // A reference of the State Exchange algorithm implementation Gcs_xcom_state_exchange_interface *m_state_exchange; @@ -325,16 +338,25 @@ class Gcs_xcom_control: public Gcs_control_interface // XCom main loop My_xp_thread_impl m_xcom_thread; - /* The hash of this client. */ - unsigned int m_hash; - + /* + Structure that contains the identification of this node + from XCOM's perspective + */ node_list m_node_list_me; - /* UUID of this node */ - unsigned int m_uuid; - My_xp_socket_util* m_socket_util; + /* + Number of attempts to join a group before giving up and reporting + an error. + */ + unsigned int m_join_attempts; + + /* + Number of time in seconds to wait between attempts to join a group. + */ + unsigned int m_join_sleep_time; + protected: /* Whether the XCOM was left running or not meaning that the join @@ -359,6 +381,11 @@ class Gcs_xcom_control: public Gcs_control_interface Gcs_xcom_engine *m_gcs_engine; private: + /* + Reference to the management interface. + */ + Gcs_xcom_group_management *m_xcom_management; + /* Disabling the copy constructor and assignment operator. */ diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_group_management.cc b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_group_management.cc index 3c91347b7112..49ccef065c7e 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_group_management.cc +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_group_management.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -17,27 +17,43 @@ #include "gcs_xcom_utils.h" #include "gcs_logging.h" +#include Gcs_xcom_group_management:: Gcs_xcom_group_management(Gcs_xcom_proxy *xcom_proxy, + Gcs_xcom_view_change_control_interface *view_control, const Gcs_group_identifier& group_identifier) : m_xcom_proxy(xcom_proxy), + m_view_control(view_control), m_gid(new Gcs_group_identifier(group_identifier.get_group_id())), m_gid_hash(Gcs_xcom_utils::mhash( reinterpret_cast(const_cast(m_gid->get_group_id().c_str())), - m_gid->get_group_id().size())) -{} + m_gid->get_group_id().size())), + m_xcom_nodes(), + m_xcom_nodes_mutex() +{ + m_xcom_nodes_mutex.init(NULL); +} Gcs_xcom_group_management::~Gcs_xcom_group_management() { delete m_gid; + m_xcom_nodes_mutex.destroy(); +} + +void Gcs_xcom_group_management::save_xcom_nodes(const Gcs_xcom_nodes *xcom_nodes) +{ + m_xcom_nodes_mutex.lock(); + m_xcom_nodes= *xcom_nodes; + m_xcom_nodes_mutex.unlock(); } enum_gcs_error Gcs_xcom_group_management:: modify_configuration(const Gcs_interface_parameters& reconfigured_group) { + int result= 0; // Retrieve peers_nodes parameter const std::string *peer_nodes_str= reconfigured_group.get_parameter("peer_nodes"); @@ -69,7 +85,7 @@ modify_configuration(const Gcs_interface_parameters& reconfigured_group) } MYSQL_GCS_LOG_ERROR( - "The peers list contains invalid addresses.Please provide a list with " << + "The peers list contains invalid addresses. Please provide a list with " << "only valid addresses." ) @@ -84,31 +100,89 @@ modify_configuration(const Gcs_interface_parameters& reconfigured_group) return GCS_NOK; } + Gcs_view *view= m_view_control->get_current_view(); + if (view == NULL) + { + MYSQL_GCS_LOG_ERROR( + "The peer is not part of any group and cannot be used to start " + "a reconfiguration." + ); + return GCS_NOK; + } + unsigned int len= static_cast(processed_peers.size()); - char **addrs= (char **) malloc(len * sizeof(char *)); + char **addrs= static_cast(malloc(len * sizeof(char *))); + blob *uuids= static_cast(malloc(len * sizeof(blob))); + memset(uuids, 0, len * sizeof(blob)); + const Gcs_member_identifier *member= NULL; + MYSQL_GCS_LOG_INFO("Checking members to force a new configuration."); + m_xcom_nodes_mutex.lock(); std::vector::const_iterator nodes_it= processed_peers.begin(); std::vector::const_iterator nodes_end= processed_peers.end(); for (int i= 0; nodes_it != nodes_end; i++, ++nodes_it) { - //const_cast will avoid unnecessary memory allocations - addrs[i]= const_cast((*nodes_it).c_str()); + member= view->get_member(*nodes_it); + if (member == NULL) + { + MYSQL_GCS_LOG_ERROR( + "The peer is trying to set up a configuration where there is a " + "member '" << addrs[i] << "' that doesn't belong to its current " + "view." + ); + + /* + We have to free the memory allocated to convey the uuid in blob + format because it will not be handed over to XCOM and noboby + will free it otherwise. + */ + m_xcom_nodes_mutex.unlock(); + goto error; + } - MYSQL_GCS_LOG_TRACE( - "::modify_configuration():: Node[" << i << "]=" << addrs[i]) + addrs[i]= const_cast((*nodes_it).c_str()); + const Gcs_uuid *local_uuid= m_xcom_nodes.get_uuid(addrs[i]); + if (local_uuid == NULL) + { + MYSQL_GCS_LOG_ERROR( + "The peer is trying to set up a configuration where there is a " + "member '" << addrs[i] << "' that doesn't have a valid UUID." + ); + m_xcom_nodes_mutex.unlock(); + goto error; + } + uuids[i].data.data_val= static_cast(malloc(local_uuid->size() * sizeof(char))); + local_uuid->encode( + reinterpret_cast(&uuids[i].data.data_val), + &(uuids[i].data.data_len) + ); + + MYSQL_GCS_LOG_INFO( + "::modify_configuration():: Node[" << i << "]=" << addrs[i] << " " + << local_uuid->actual_value.c_str() + ); } + m_xcom_nodes_mutex.unlock(); node_list nl; nl.node_list_len= len; - nl.node_list_val= m_xcom_proxy->new_node_address(len, addrs); - free(addrs); + nl.node_list_val= m_xcom_proxy->new_node_address_uuid(len, addrs, uuids); - int result= m_xcom_proxy->xcom_client_force_config(&nl, m_gid_hash); + result= m_xcom_proxy->xcom_client_force_config(&nl, m_gid_hash); m_xcom_proxy->delete_node_address(len, nl.node_list_val); +error: if (result != 1) MYSQL_GCS_LOG_ERROR("Error reconfiguring group."); + nodes_it= processed_peers.begin(); + for (int i= 0; nodes_it != nodes_end; i++, ++nodes_it) + { + free(uuids[i].data.data_val); + } + free(addrs); + free(uuids); + delete view; + return (result == 1)? GCS_OK: GCS_NOK; } - diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_group_management.h b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_group_management.h index fefd6649d105..8041a1e35f6f 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_group_management.h +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_group_management.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -18,22 +18,29 @@ #include "gcs_group_management_interface.h" // Base class: Gcs_group_management_interface #include "gcs_xcom_utils.h" +#include "gcs_xcom_state_exchange.h" +#include "xplatform/my_xp_mutex.h" class Gcs_xcom_group_management : public Gcs_group_management_interface { public: explicit Gcs_xcom_group_management( Gcs_xcom_proxy *xcom_proxy, + Gcs_xcom_view_change_control_interface *view_control, const Gcs_group_identifier& group_identifier); virtual ~Gcs_xcom_group_management(); enum_gcs_error modify_configuration(const Gcs_interface_parameters& reconfigured_group); + void save_xcom_nodes(const Gcs_xcom_nodes *xcom_nodes); private: Gcs_xcom_proxy *m_xcom_proxy; + Gcs_xcom_view_change_control_interface *m_view_control; Gcs_group_identifier* m_gid; unsigned int m_gid_hash; + Gcs_xcom_nodes m_xcom_nodes; + My_xp_mutex_impl m_xcom_nodes_mutex; /* Disabling the copy constructor and assignment operator. diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_interface.cc b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_interface.cc index 10ffba1fbb22..99422b12c53a 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_interface.cc +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_interface.cc @@ -313,6 +313,10 @@ Gcs_xcom_interface::configure(const Gcs_interface_parameters &interface_params) validated_params.get_parameter("bootstrap_group"); const std::string *poll_spin_loops_str= validated_params.get_parameter("poll_spin_loops"); + const std::string *join_attempts_str= + validated_params.get_parameter("join_attempts"); + const std::string *join_sleep_time_str= + validated_params.get_parameter("join_sleep_time"); // Mandatory if (group_name_str == NULL) @@ -412,6 +416,10 @@ Gcs_xcom_interface::configure(const Gcs_interface_parameters &interface_params) reconfigured |= true; } + xcom_control->set_join_behavior( + static_cast(atoi(join_attempts_str->c_str())), + static_cast(atoi(join_sleep_time_str->c_str()))); + end: if (error == GCS_NOK || !reconfigured) { @@ -572,6 +580,14 @@ get_group_interfaces(const Gcs_group_identifier &group_identifier) gcs_xcom_group_interfaces *group_interface= NULL; if (registered_group == m_group_interfaces.end()) { + /* + Retrieve some initialization parameters. + */ + const std::string *join_attempts_str= + m_initialization_parameters.get_parameter("join_attempts"); + const std::string *join_sleep_time_str= + m_initialization_parameters.get_parameter("join_sleep_time"); + /* If the group interfaces do not exist, create and add them to the dictionary. @@ -593,7 +609,12 @@ get_group_interfaces(const Gcs_group_identifier &group_identifier) Gcs_xcom_state_exchange_interface *se= new Gcs_xcom_state_exchange(group_interface->communication_interface); - group_interface->control_interface= + + Gcs_xcom_group_management *xcom_management= + new Gcs_xcom_group_management(xcom_proxy, vce, group_identifier); + group_interface->management_interface= xcom_management; + + Gcs_xcom_control *xcom_control= new Gcs_xcom_control(m_local_node_information, m_xcom_peers, group_identifier, @@ -602,11 +623,15 @@ get_group_interfaces(const Gcs_group_identifier &group_identifier) se, vce, m_boot, - m_socket_util); + m_socket_util, + xcom_management); + group_interface->control_interface= xcom_control; + + xcom_control->set_join_behavior( + static_cast(atoi(join_attempts_str->c_str())), + static_cast(atoi(join_sleep_time_str->c_str())) + ); - group_interface->management_interface= - new Gcs_xcom_group_management(xcom_proxy, - group_identifier); // Store the created objects for later deletion group_interface->vce= vce; diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_utils.cc b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_utils.cc index 342ee86b32a9..720190fbd298 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_utils.cc +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_utils.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -30,6 +30,7 @@ #include #include #include +#include /** 6 is the recommended value. Too large numbers @@ -44,6 +45,17 @@ static const int XCOM_MAX_HANDLERS= 6; */ static const uint64_t WAITING_TIME= 30; +/* + Number of attempts to join a group. +*/ +static const unsigned int JOIN_ATTEMPTS= 0; + +/* + Sleep time between attempts defined in seconds. +*/ +static const uint64_t JOIN_SLEEP_TIME= 5; + + Gcs_xcom_utils::~Gcs_xcom_utils() {} u_long Gcs_xcom_utils::build_xcom_group_id(Gcs_group_identifier &group_id) @@ -53,16 +65,6 @@ u_long Gcs_xcom_utils::build_xcom_group_id(Gcs_group_identifier &group_id) } -std::string *Gcs_xcom_utils::build_xcom_member_id(const std::string &address) -{ - std::ostringstream string_builder; - - string_builder << address.c_str(); - - return new std::string(string_builder.str()); -} - - void Gcs_xcom_utils:: process_peer_nodes(const std::string *peer_nodes, @@ -594,11 +596,10 @@ Gcs_xcom_proxy_impl::Xcom_handler::~Xcom_handler() } -node_address *Gcs_xcom_proxy_impl::new_node_address(unsigned int n, - char *names[]) +node_address *Gcs_xcom_proxy_impl::new_node_address_uuid( + unsigned int n, char *names[], blob uuids[]) { - //Xcom will change n's type to unsigned later in a separate patch. - return ::new_node_address(static_cast(n), names); + return ::new_node_address_uuid(static_cast(n), names, uuids); } @@ -787,7 +788,7 @@ Gcs_xcom_proxy_impl::xcom_wait_for_xcom_comms_status_change(int& status) if (res != 0) { // There was an error - status= XCOM_COMMS_ERROR; + status= XCOM_COMMS_OTHER; if(res == ETIMEDOUT) { @@ -891,18 +892,38 @@ Gcs_xcom_proxy_impl::xcom_client_force_config(node_list *nl, } Gcs_xcom_nodes::Gcs_xcom_nodes(const site_def *site, node_set &nodes) - : m_node_no(site->nodeno), m_addresses(), m_statuses(), m_size(nodes.node_set_len) + : m_node_no(site->nodeno), m_addresses(), m_uuids(), m_statuses(), + m_size(nodes.node_set_len) { + Gcs_uuid uuid; for (unsigned int i= 0; i < nodes.node_set_len; ++i) { + /* Get member address and save it. */ std::string address(site->nodes.node_list_val[i].address); m_addresses.push_back(address); + + /* Get member uuid and save it. */ + uuid.decode( + reinterpret_cast(site->nodes.node_list_val[i].uuid.data.data_val), + site->nodes.node_list_val[i].uuid.data.data_len + ); + m_uuids.push_back(uuid); + + /* Get member status and save it */ m_statuses.push_back(nodes.node_set_val[i] ? true: false); } assert(m_size == m_addresses.size()); assert(m_size == m_statuses.size()); } + +Gcs_xcom_nodes::Gcs_xcom_nodes() + : m_node_no(0), m_addresses(), m_uuids(), m_statuses(), + m_size(0) +{ +} + + unsigned int Gcs_xcom_nodes::get_node_no() const { return m_node_no; @@ -913,6 +934,25 @@ const std::vector &Gcs_xcom_nodes::get_addresses() const return m_addresses; } +const std::vector &Gcs_xcom_nodes::get_uuids() const +{ + return m_uuids; +} + + +const Gcs_uuid *Gcs_xcom_nodes::get_uuid(const std::string &address) const +{ + for (size_t index= 0; index < m_size; index++) + { + if (!m_addresses[index].compare(address)) + { + return &m_uuids[index]; + } + } + return NULL; +} + + const std::vector &Gcs_xcom_nodes::get_statuses() const { return m_statuses; @@ -966,7 +1006,10 @@ fix_parameters_syntax(Gcs_interface_parameters &interface_params) interface_params.get_parameter("wait_time")); std::string *ip_whitelist_str= const_cast( interface_params.get_parameter("ip_whitelist")); - + std::string *join_attempts_str= const_cast( + interface_params.get_parameter("join_attempts")); + std::string *join_sleep_time_str= const_cast( + interface_params.get_parameter("join_sleep_time")); // sets the default value for compression (ON by default) if (!compression_str) @@ -1019,6 +1062,22 @@ fix_parameters_syntax(Gcs_interface_parameters &interface_params) interface_params.add_parameter("ip_whitelist", iplist); } + + // sets the default join attempts + if (!join_attempts_str) + { + std::stringstream ss; + ss << JOIN_ATTEMPTS; + interface_params.add_parameter("join_attempts", ss.str()); + } + + // sets the default sleep time between join attempts + if (!join_sleep_time_str) + { + std::stringstream ss; + ss << JOIN_SLEEP_TIME; + interface_params.add_parameter("join_sleep_time", ss.str()); + } } static enum_gcs_error @@ -1063,6 +1122,10 @@ is_parameters_syntax_correct(const Gcs_interface_parameters &interface_params) interface_params.get_parameter("compression"); const std::string *wait_time_str= interface_params.get_parameter("wait_time"); + const std::string *join_attempts_str= + interface_params.get_parameter("join_attempts"); + const std::string *join_sleep_time_str= + interface_params.get_parameter("join_sleep_time"); /* ----------------------------------------------------- @@ -1222,6 +1285,26 @@ is_parameters_syntax_correct(const Gcs_interface_parameters &interface_params) goto end; } + if(join_attempts_str && + (join_attempts_str->size() == 0 || + !is_number(*join_attempts_str))) + { + MYSQL_GCS_LOG_ERROR("The join_attempts parameter (" + << join_attempts_str << ") is not valid.") + error= GCS_NOK; + goto end; + } + + if(join_sleep_time_str && + (join_sleep_time_str->size() == 0 || + !is_number(*join_sleep_time_str))) + { + MYSQL_GCS_LOG_ERROR("The join_sleep_time parameter (" + << join_sleep_time_str << ") is not valid.") + error= GCS_NOK; + goto end; + } + end: return error == GCS_NOK ? false : true; } diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_utils.h b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_utils.h index d23098af4f5a..586b744b37ab 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_utils.h +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_utils.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -65,19 +65,6 @@ class Gcs_xcom_utils */ static u_long build_xcom_group_id(Gcs_group_identifier &group_id); - /** - Creates an XCom member identifier. It shall be on the format - node_number:address:port. - - @param node_number node identifier in XCom - @param address peer address - @param port peer port - - @return member id - */ - - static std::string *build_xcom_member_id(const std::string &address); - /** Processes a list of comma separated peer nodes. @@ -138,16 +125,19 @@ class Gcs_xcom_proxy /** This is an utility member function that is used to call into XCom for - creating the node_address list. + creating list with node's addresses and their associated UUIDs. Note + that callers must provide the UUID. @param n The number of elements in the list @param names The names to be put on the list + @param uuids The UUIDs to be put on the list @return a pointer to the list containing all the elements needed. The caller is responsible to reclaim memory once he is done with this data @c delete_node_address */ - virtual node_address *new_node_address(unsigned int n, char *names[])= 0; + virtual node_address *new_node_address_uuid(unsigned int n, char *names[], blob uuids[])= 0; + /** This function is responsible to delete the list of nodes that had been @@ -623,7 +613,7 @@ class Gcs_xcom_proxy_impl : public Gcs_xcom_proxy Gcs_xcom_proxy_impl(int wt); virtual ~Gcs_xcom_proxy_impl(); - node_address *new_node_address(unsigned int n, char *names[]); + node_address *new_node_address_uuid(unsigned int n, char *names[], blob uuids[]); void delete_node_address(unsigned int n, node_address *na); int xcom_client_add_node(connection_descriptor* fd, node_list *nl, uint32_t group_id); int xcom_client_remove_node(connection_descriptor* fd, node_list* nl, uint32_t group_id); @@ -781,6 +771,13 @@ class Gcs_xcom_nodes explicit Gcs_xcom_nodes(const site_def *site, node_set &nodes); + /** + Empty constructor. + */ + + explicit Gcs_xcom_nodes(); + + /** Return the index of the current node (i.e. member). */ @@ -794,6 +791,10 @@ class Gcs_xcom_nodes const std::vector &get_addresses() const; + /** + Return a reference to the member uuids' vector. + */ + const std::vector &get_uuids() const; /** Return a reference to the statuses' vector. @@ -801,6 +802,12 @@ class Gcs_xcom_nodes const std::vector &get_statuses() const; + /** + Return the GCS UUID associated to an address if there is one. + If the address is not found, NULL is returned. + */ + const Gcs_uuid *get_uuid(const std::string &address) const; + /** Return the number of nodes. @@ -836,6 +843,11 @@ class Gcs_xcom_nodes */ std::vector m_addresses; + /* + List of uuids. + */ + std::vector m_uuids; + /* List that defines whether a node is alive or dead. */ diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/node_list.c b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/node_list.c index 5be0fa66f5f0..c8a857b41bb1 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/node_list.c +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/node_list.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -61,29 +61,54 @@ node_list clone_node_list(node_list list) /* }}} */ /* OHKFIX Do something more intelligent than strcmp */ -int match_node(node_address *n1, node_address *n2) +int match_node(node_address *n1, node_address *n2, u_int with_uid) { - return n1 != 0 && n2 != 0 && (xcom_get_port(n1->address) == xcom_get_port(n2->address) && strcmp(n1->address, n2->address) == 0); + int retval= ( n1 != 0 && + n2 != 0 && + (xcom_get_port(n1->address) == xcom_get_port(n2->address)) && + strcmp(n1->address, n2->address) == 0); + + if(with_uid) + { + int retval_with_uid= (n1->uuid.data.data_len == n2->uuid.data.data_len); + if(retval_with_uid) + { + u_int i= 0; + for(; i < n1->uuid.data.data_len && retval_with_uid; i++) + { + retval_with_uid &= !( n1->uuid.data.data_val[i] ^ + n2->uuid.data.data_val[i]); + } + } + retval &= retval_with_uid; + } + + return retval; } -int match_node_list(node_address *n1, node_address *n2, u_int len2) +int match_node_list(node_address *n1, node_address *n2, u_int len2, u_int with_uid) { u_int i; for (i = 0; i < len2; i++) { - if (match_node(n2+i, n1)) + if (match_node(n2+i, n1, with_uid)) return 1; } return 0; } -static int exists(node_address *name, node_list const *nodes) +static int exists(node_address *name, node_list const *nodes, u_int with_uid) { - return match_node_list(name, nodes->node_list_val, nodes->node_list_len); + return match_node_list(name, nodes->node_list_val, nodes->node_list_len, with_uid); } int node_exists(node_address *name, node_list const *nodes) { - return exists(name, nodes); + return exists(name, nodes, FALSE); +} + +int node_exists_with_uid(node_address *name, node_list const *nodes) +{ + return exists(name, nodes, TRUE); } static u_int added_nodes(u_int n, node_address *names, node_list *nodes) @@ -92,7 +117,7 @@ static u_int added_nodes(u_int n, node_address *names, node_list *nodes) u_int added = n; if (nodes->node_list_val) { for (i = 0; i < n; i++) { - if (exists(&names[i], nodes)) { + if (exists(&names[i], nodes, FALSE)) { added--; } } @@ -122,7 +147,7 @@ void add_node_list(u_int n, node_address *names, node_list *nodes) np = &nodes->node_list_val[nodes->node_list_len]; for (i = 0; i < n; i++) { /* DBGOUT(FN; STREXP(names[i])); */ - if (!exists(&names[i], nodes)) { + if (!exists(&names[i], nodes, FALSE)) { np->address = strdup(names[i].address); np->uuid.data.data_len = names[i].uuid.data.data_len; if(np->uuid.data.data_len){ @@ -153,7 +178,7 @@ void remove_node_list(u_int n, node_address *names, node_list *nodes) np = nodes->node_list_val; for (i = 0; i < nodes->node_list_len; i++) { - if (match_node_list(&nodes->node_list_val[i], names, n)) { + if (match_node_list(&nodes->node_list_val[i], names, n, FALSE)) { free(nodes->node_list_val[i].address); nodes->node_list_val[i].address= 0; free(nodes->node_list_val[i].uuid.data.data_val); @@ -201,6 +226,24 @@ node_address *new_node_address(u_int n, char *names[]) return init_node_address(na, n, names); } +node_address *new_node_address_uuid(u_int n, char *names[], blob uuids[]) +{ + u_int i= 0; + node_address *na = calloc(n, sizeof(node_address)); + init_node_address(na, n, names); + + for(; i < n; i++) + { + na[i].uuid.data.data_len = uuids[i].data.data_len; + na[i].uuid.data.data_val = calloc(uuids[i].data.data_len, sizeof(char)); + na[i].uuid.data.data_val = strncpy( + na[i].uuid.data.data_val, uuids[i].data.data_val, uuids[i].data.data_len + ); + } + + return na; +} + void delete_node_address(u_int n, node_address *na) { u_int i; diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/node_list.h b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/node_list.h index c5d7f0a3245e..b228926ebd02 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/node_list.h +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/node_list.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -24,10 +24,12 @@ extern "C" { node_list clone_node_list(node_list list); char *dbg_list(node_list const *nodes); void init_node_list(u_int n, node_address *names, node_list *nodes); -int match_node(node_address *n1, node_address *n2); +int match_node(node_address *n1, node_address *n2, u_int with_uid); void add_node_list(u_int n, node_address *names, node_list *nodes); int node_exists(node_address *name, node_list const *nodes); +int node_exists_with_uid(node_address *name, node_list const *nodes); node_address *new_node_address(u_int n, char *names[]); +node_address *new_node_address_uuid(u_int n, char *names[], blob uuid[]); void delete_node_address(u_int n, node_address *na); void remove_node_list(u_int n, node_address *names, node_list *nodes); node_address *init_node_address(node_address *na, u_int n, char *names[]); diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/server_struct.h b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/server_struct.h index 05dce78f5495..da99b61ccf5a 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/server_struct.h +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/server_struct.h @@ -44,6 +44,7 @@ struct server { task_env * sender; /* The sender task */ task_env * reply_handler; /* The reply task */ srv_buf out_buf; + int invalid; }; typedef struct server server; diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/site_def.c b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/site_def.c index 92b215f7f71d..a3aedf02b36a 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/site_def.c +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/site_def.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -460,7 +460,7 @@ void import_config(gcs_snapshot *gcs_snap) cp->nodes.node_list_val, site); site->start = cp->start; site->boot_key = cp->boot_key; - site_install_action(site); + site_install_action(site, app_type); } } } diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.c b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.c index 07e6a2adffcf..aea54cbe87df 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.c +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.c @@ -1449,7 +1449,7 @@ static synode_no getstart(app_data_ptr a) return retval; } -void site_install_action(site_def *site) +void site_install_action(site_def *site, cargo_type operation) { DBGOUT(FN; NDBG(get_nodeno(get_site_def()), u)); if (synode_gt(site->start, max_synode)) @@ -1459,7 +1459,7 @@ void site_install_action(site_def *site) DBGOUT(FN; COPY_AND_FREE_GOUT(dbg_site_def(site))); set_group(get_group_id(site)); if(get_maxnodes(get_site_def())){ - update_servers(site); + update_servers(site, operation); } site->install_time = task_now(); DBGOUT(FN; SYCEXP(site->start); SYCEXP(site->boot_key)); @@ -1484,7 +1484,7 @@ static site_def * install_ng_with_start(app_data_ptr a, synode_no start) { if (a) { site_def *site = create_site_def_with_start(a, start); - site_install_action(site); + site_install_action(site, a->body.c_t); return site; } return 0; @@ -2220,7 +2220,7 @@ site_def *handle_add_node(app_data_ptr a) a->body.app_u_u.nodes.node_list_val, site); site->start = getstart(a); site->boot_key = a->app_key; - site_install_action(site); + site_install_action(site, a->body.c_t); return site; } @@ -2265,11 +2265,12 @@ site_def *handle_remove_node(app_data_ptr a) add_event(string_arg("nodeno")); add_event(uint_arg(get_nodeno(site))); ); + remove_site_def(a->body.app_u_u.nodes.node_list_len, a->body.app_u_u.nodes.node_list_val, site); site->start = getstart(a); site->boot_key = a->app_key; - site_install_action(site); + site_install_action(site, a->body.c_t); return site; } @@ -3354,9 +3355,26 @@ static void handle_client_msg(pax_msg *p) static double sent_alive = 0.0; static inline void handle_alive(site_def const * site, linkage *reply_queue, pax_msg *pm) { + int not_to_oneself = (pm->from != get_nodeno(site) && pm->from != pm->to); DBGOUT(FN; SYCEXP(pm->synode); NDBG(pm->from,u); NDBG(pm->to,u); ); - if (pm->from != pm->to && !client_boot_done && /* Already done? */ - !is_dead_site(pm->group_id)) { /* Avoid dealing with zombies */ + + /* + This code will check if the ping is intended to us. + If the encoded node does not exist in the current configuration, + we avoid sending need_boot_op, since it must be from a different + reincarnation of this node. + */ + if(site && pm->a && pm->a->body.c_t == xcom_boot_type) + { + DBGOUT(FN; COPY_AND_FREE_GOUT(dbg_list(&pm->a->body.app_u_u.nodes));); + not_to_oneself &= + node_exists_with_uid(&pm->a->body.app_u_u.nodes.node_list_val[0], &get_site_def()->nodes); + } + + + if (!client_boot_done && /* Already done? */ + not_to_oneself && /* Not to oneself */ + !is_dead_site(pm->group_id)) { /* Avoid dealing with zombies */ double t = task_now(); if (t - sent_alive > 1.0) { CREATE_REPLY(pm); @@ -3424,13 +3442,103 @@ void add_to_cache(app_data_ptr a, synode_no synode) static int clicnt = 0; +static u_int is_reincarnation_adding(app_data_ptr a) +{ + /* Get information on the current site definition */ + const site_def* new_site_def= get_site_def(); + const site_def* valid_site_def= find_site_def(executed_msg); + + /* Get information on the nodes to be added */ + u_int nodes_len = a->body.app_u_u.nodes.node_list_len; + node_address* nodes_to_change= a->body.app_u_u.nodes.node_list_val; + + u_int i = 0; + for(; i < nodes_len; i++) + { + if (node_exists(&nodes_to_change[i], &new_site_def->nodes) || + node_exists(&nodes_to_change[i], &valid_site_def->nodes)) + { + /* + We are simply ignoring the attempt to add a node to the + group when there is an old incarnation of it, meaning + that the node has crashed and restarted so fastly that + nobody has noticed that it has gone. + + In XCOM, the group is not automatically reconfigured + and it is possible to start reusing a node that has + crashed and restarted without reconfiguring the group + by adding the node back to it. + + However, this operation may be unsafe because XCOM + does not implement a crash-recovery model and nodes + suffer from amnesia after restarting the service. In + other words this may lead to inconsistency issues in + the paxos protocol. + + Unfortunately, preventing that a node is added back + to the system where there is an old incarnation will + not fix this problem since other changes are required. + */ + G_MESSAGE("Old incarnation found while trying to add node %s %.*s.", + nodes_to_change[i].address, + nodes_to_change[i].uuid.data.data_len, + nodes_to_change[i].uuid.data.data_val + ); + return 1; + } + } + + return 0; +} + +static u_int is_reincarnation_removing(app_data_ptr a) +{ + /* Get information on the current site definition */ + const site_def* new_site_def= get_site_def(); + + /* Get information on the nodes to be added */ + u_int nodes_len = a->body.app_u_u.nodes.node_list_len; + node_address* nodes_to_change= a->body.app_u_u.nodes.node_list_val; + + u_int i = 0; + for(; i < nodes_len; i++) + { + if (!node_exists_with_uid(&nodes_to_change[i], &new_site_def->nodes)) + { + /* + We cannot allow an upper-layer to remove a new incarnation + of a node, when it tries to remove an old one. + */ + G_MESSAGE("Old incarnation found while trying to " + "remove node %s %.*s.", + nodes_to_change[i].address, + nodes_to_change[i].uuid.data.data_len, + nodes_to_change[i].uuid.data.data_val + ); + + return 1; + } + } + + return 0; +} + static client_reply_code can_execute_cfgchange(pax_msg *p) { app_data_ptr a = p->a; + if (executed_msg.msgno <= 2) return REQUEST_RETRY; + if (a && a->group_id != 0 && a->group_id != executed_msg.group_id) return REQUEST_FAIL; + + if (a && a->body.c_t == add_node_type && is_reincarnation_adding(a)) + return REQUEST_FAIL; + + if (a && a->body.c_t == remove_node_type && is_reincarnation_removing(a)) + return REQUEST_FAIL; + return REQUEST_OK; } @@ -3561,6 +3669,8 @@ pax_msg *dispatch_op(site_def const *site, pax_msg *p, linkage *reply_queue) case read_op: pm = get_cache(p->synode); assert(pm); + if(client_boot_done) + handle_alive(site, reply_queue, p); handle_read(site, pm, reply_queue, p); break; case prepare_op: @@ -3569,7 +3679,8 @@ pax_msg *dispatch_op(site_def const *site, pax_msg *p, linkage *reply_queue) if(p->force_delivery) pm->force_delivery = 1; pm->last_modified = task_now(); - handle_alive(site, reply_queue, p); + if(client_boot_done) + handle_alive(site, reply_queue, p); handle_prepare(site, pm, reply_queue, p); break; case ack_prepare_op: @@ -3674,7 +3785,7 @@ pax_msg *dispatch_op(site_def const *site, pax_msg *p, linkage *reply_queue) handle_skip(site, pm, p); break; case i_am_alive_op: - /* handle_alive(site, reply_queue, p); */ + handle_alive(site, reply_queue, p); break; case are_you_alive_op: handle_alive(site, reply_queue, p); @@ -4033,7 +4144,9 @@ int reply_handler_task(task_arg arg) pax_msg * p = ep->reply; server_handle_need_snapshot(ep->s, get_site_def(), p->from); }else{ - dispatch_op(find_site_def(ep->reply->synode), ep->reply, NULL); + //We only handle messages from this connection is the server is valid. + if(ep->s->invalid == 0) + dispatch_op(find_site_def(ep->reply->synode), ep->reply, NULL); } TASK_YIELD; } @@ -4419,6 +4532,7 @@ xcom_state xcom_fsm(xcom_actions action, task_arg fsmargs) app_data * a = get_void_arg(fsmargs); site_def *s = create_site_def_with_start(a, executed_msg); s->boot_key = executed_msg; + invalidate_servers(get_site_def(), s); start_force_config(s); } CO_RETURN(x_run); diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.h b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.h index 33aa394f9bd0..7e6cec5622f5 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.h +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.h @@ -157,7 +157,7 @@ void xcom_add_node(char *addr, xcom_port port, node_list *nl); xcom_state xcom_fsm(xcom_actions action, task_arg fsmargs); void site_post_install_action(site_def *site); -void site_install_action(site_def *site); +void site_install_action(site_def *site, cargo_type operation); void send_client_add_node(char *srv, xcom_port port, node_list *nl); void send_client_remove_node(char *srv, xcom_port port, node_list *nl); @@ -187,6 +187,9 @@ void set_xcom_run_cb(xcom_state_change_cb x); void set_xcom_terminate_cb(xcom_state_change_cb x); void set_xcom_exit_cb(xcom_state_change_cb x); +app_data_ptr init_config_with_group(app_data *a, node_list *nl, cargo_type type, + uint32_t group_id); + /* Registers a callback that is called right after the accept routine returns. @@ -229,6 +232,7 @@ static inline char *strerr_msg(char *buf, size_t len, int nr) } #define XCOM_COMMS_ERROR 1 +#define XCOM_COMMS_OTHER 2 #define XCOM_COMMS_OK 0 void set_xcom_comms_cb(xcom_state_change_cb x); diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_cfg.c b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_cfg.c index c16de378b032..4350a8d215cf 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_cfg.c +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_cfg.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -16,7 +16,7 @@ #include #include "xcom_cfg.h" -cfg_app_xcom_st* the_app_xcom_cfg; +cfg_app_xcom_st* the_app_xcom_cfg = NULL; /* Reasonable initial cache limit */ #define CACHE_LIMIT 1000000000ULL diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_detector.c b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_detector.c index c06abe60f9b2..915d20997b2b 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_detector.c +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_detector.c @@ -63,8 +63,8 @@ static void reset_id_changed(){ /* See if node has been suspiciously still for some time */ int may_be_dead(detector_state const ds, node_no i, double seconds) { - /* DBGOUT(FN; NDBG(i,u); NDBG(ds[i] < seconds - 2.0, d)); */ - return ds[i] < seconds - 2.0; + /* DBGOUT(FN; NDBG(i,u); NDBG(ds[i] < seconds - 4.0, d)); */ + return ds[i] < seconds - 4.0; } void init_detector(detector_state ds) @@ -410,6 +410,11 @@ int alive_task(task_arg arg MY_ATTRIBUTE((unused))) if (i != get_nodeno(site) && may_be_dead(site->detected, i, sec)) { replace_pax_msg(&ep->you_p, pax_msg_new(alive_synode, site)); ep->you_p->op = are_you_alive_op; + ep->you_p->a = new_app_data(); + ep->you_p->a->app_key.group_id = ep->you_p->a->group_id = get_group_id(site); + ep->you_p->a->body.c_t = xcom_boot_type; + init_node_list(1, &site->nodes.node_list_val[i], &ep->you_p->a->body.app_u_u.nodes); + DBGOUT(FN; COPY_AND_FREE_GOUT(dbg_list(&ep->you_p->a->body.app_u_u.nodes));); send_server_msg(site, i, ep->you_p); } } diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_transport.c b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_transport.c index f6f4be84524a..fc8bd33df3aa 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_transport.c +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_transport.c @@ -34,6 +34,7 @@ #include "xcom_detector.h" #include "site_struct.h" #include "node_connection.h" +#include "node_list.h" #include "xcom_transport.h" #include "xcom_statistics.h" #include "xcom_base.h" @@ -737,6 +738,7 @@ mksrv(char *srv, xcom_port port) abort(); } s->garbage = 0; + s->invalid = 0; s->refcnt = 0; s->srv = srv; s->port = port; @@ -1054,7 +1056,7 @@ static inline int _send_server_msg(site_def const *s, node_no to, pax_msg *p) { assert(s); assert(s->servers[to]); - if (s->servers[to] && p) { + if (s->servers[to] && s->servers[to]->invalid == 0 && p) { send_msg(s->servers[to], s->nodeno, to, get_group_id(s), p); } return 0; @@ -1793,7 +1795,7 @@ static xcom_port get_port(char *a) xcom_port xcom_get_port(char *a) { - return get_port(a); + return a ? get_port(a): 0; } @@ -1809,7 +1811,7 @@ static server *find_server(server *table[], int n, char *name, xcom_port port) } -void update_servers(site_def *s) +void update_servers(site_def *s, cargo_type operation) { u_int n; @@ -1829,6 +1831,8 @@ void update_servers(site_def *s) DBGOUT(FN; STRLIT("re-using server "); NDBG(i, d); STREXP(name)); free(name); s->servers[i] = sp; + if(sp->invalid) + sp->invalid= 0; } else { /* No server? Create one */ DBGOUT(FN; STRLIT("creating new server "); NDBG(i, d); STREXP(name)); if (port > 0) @@ -1841,6 +1845,40 @@ void update_servers(site_def *s) for (i = n; i < NSERVERS; i++) { s->servers[i] = 0; } + /* + If we have a force config, mark the servers that do not belong to this + configuration as invalid + */ + + if(operation == force_config_type) { + const site_def* old_site_def= get_prev_site_def(); + invalidate_servers(old_site_def, s); + } + + } +} + + +/* + Make a diff between 2 site_defs and mark as invalid servers + that do not belong to the new site_def. + This is only to be used if we are forcing a configuration. +*/ +void invalidate_servers(const site_def* old_site_def, + const site_def* new_site_def) { + u_int node= 0; + for(; node < get_maxnodes(old_site_def); node++){ + node_address* node_addr_from_old_site_def= &old_site_def->nodes.node_list_val[node]; + if(!node_exists(node_addr_from_old_site_def, &new_site_def->nodes)) + { + char *addr = node_addr_from_old_site_def->address; + char *name = get_name(addr); + xcom_port port = get_port(addr); + server *sp = find_server(all_servers, maxservers, name, port); + if (sp) { + sp->invalid= 1; + } + } } } diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_transport.h b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_transport.h index 0c94247f66bf..490e5e6b5654 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_transport.h +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_transport.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -125,7 +125,7 @@ char *xcom_get_name(char *a); xcom_port xcom_get_port(char *a); int send_server_msg(site_def const *s, node_no i, pax_msg *p); double server_active(site_def const *s, node_no i); -void update_servers(site_def *s); +void update_servers(site_def *s, cargo_type operation); void garbage_collect_servers(); int client_task(task_arg arg); int send_msg(server *s, node_no from, node_no to, uint32_t group_id, pax_msg *p); @@ -136,6 +136,9 @@ int send_msg(server *s, node_no from, node_no to, uint32_t group_id, pax_msg *p) */ void server_detected(server *s); +void invalidate_servers(const site_def* old_site_def, + const site_def* new_site_def); + void shutdown_connection(connection_descriptor *con); void reset_connection(connection_descriptor *con); void close_connection(connection_descriptor *con); diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/interface/gcs_member_identifier.cc b/rapid/plugin/group_replication/libmysqlgcs/src/interface/gcs_member_identifier.cc index 87dbe146a0f9..7f5d8fc5f572 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/interface/gcs_member_identifier.cc +++ b/rapid/plugin/group_replication/libmysqlgcs/src/interface/gcs_member_identifier.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -13,27 +13,141 @@ along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ +#include +#include +#include +#include +#include + #include "gcs_member_identifier.h" Gcs_member_identifier::Gcs_member_identifier(const std::string &id): - member_id(id) + m_member_id(id), m_uuid(Gcs_uuid::create_uuid()) +{ +} + + +Gcs_member_identifier::Gcs_member_identifier(const std::string &member_id, + const Gcs_uuid &uuid): + m_member_id(member_id), m_uuid(uuid) +{ +} + + +const std::string& Gcs_member_identifier::get_member_id() const +{ + return m_member_id; +} + + +const Gcs_uuid& Gcs_member_identifier::get_member_uuid() const { + return m_uuid; } -const std::string &Gcs_member_identifier::get_member_id() const +void Gcs_member_identifier::regenerate_member_uuid() { - return member_id; + m_uuid= Gcs_uuid::create_uuid(); } bool Gcs_member_identifier::operator<(const Gcs_member_identifier &other) const { - return member_id.compare(other.member_id) < 0; + return m_member_id.compare(other.m_member_id) < 0; } bool Gcs_member_identifier::operator==(const Gcs_member_identifier &other) const { - return member_id.compare(other.member_id) == 0; + return m_member_id.compare(other.m_member_id) == 0; +} + + +Gcs_uuid::Gcs_uuid() : actual_value(do_create_uuid()) +{ +} + + +const std::string Gcs_uuid::do_create_uuid() +{ + /* Although it is possible to have collisions if different nodes create + the same UUID, this is not a problem because the UUID is only used to + distinguish two situations: + + . whether someone is trying to remove a newer node's incarnation. + + . whether a new node's incarnation is trying to rejoin a group when + there are still references to its old incarnation. + + So although there might be collisions, this is not a problem because + the actual node's identification is the combination of address and + UUID. + + Note that, whatever the UUID is, we have to guarantee that successive + node's incarnations don't have the same UUID. + + Our current solution uses a simple timestamp which is safe because it + is very unlikely that the same node will be able to join, fail/leave + and rejoin again and will keep the same uuid. + + In the future, we can start generating real UUIDs if we need them for + any reason. The server already has the code to do it, so we could make + this an option and pass the information to GCS. + */ + uint64_t value= My_xp_util::getsystime(); + std::ostringstream ss; + + ss << value; + return ss.str(); +} + + +Gcs_uuid Gcs_uuid::create_uuid() +{ + Gcs_uuid uuid; + uuid.actual_value= do_create_uuid(); + return uuid; +} + + +bool Gcs_uuid::encode(uchar **buffer, unsigned int *size) const +{ + if (buffer == NULL || *buffer == NULL || size == NULL) + { +/* purecov: begin tested */ + return false; +/* purecov: end */ + } + + /* + Note the value's size will not exceed the unsigned int. + */ + memcpy(*buffer, actual_value.c_str(), actual_value.size()); + *size= static_cast(actual_value.size()); + + return true; +} + + +bool Gcs_uuid::decode(const uchar *buffer, const unsigned int size) +{ + if (buffer == NULL) + { +/* purecov: begin tested */ + return false; +/* purecov: end */ + } + + actual_value= std::string( + reinterpret_cast(buffer), static_cast(size) + ); + + return true; +} + + +size_t Gcs_uuid::size() const +{ + return actual_value.size(); } diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/interface/gcs_view.cc b/rapid/plugin/group_replication/libmysqlgcs/src/interface/gcs_view.cc index f389aed43baf..480cf82af50d 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/interface/gcs_view.cc +++ b/rapid/plugin/group_replication/libmysqlgcs/src/interface/gcs_view.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -64,7 +64,7 @@ void Gcs_view::clone(const std::vector& members, for (members_it= members.begin(); members_it != members.end(); ++members_it) { m_members - ->push_back(Gcs_member_identifier((*members_it).get_member_id())); + ->push_back(Gcs_member_identifier(*members_it)); } m_leaving= new std::vector(); @@ -72,7 +72,7 @@ void Gcs_view::clone(const std::vector& members, for (leaving_it= leaving.begin(); leaving_it != leaving.end(); ++leaving_it) { m_leaving - ->push_back(Gcs_member_identifier((*leaving_it).get_member_id())); + ->push_back(Gcs_member_identifier(*leaving_it)); } m_joined= new std::vector(); @@ -132,3 +132,22 @@ Gcs_view::Gcs_view_error_code Gcs_view::get_error_code() const { return m_error_code; } + +const Gcs_member_identifier *Gcs_view::get_member(const std::string &member_id) const +{ + std::vector::const_iterator members_it; + for (members_it= m_members->begin(); members_it != m_members->end(); ++members_it) + { + if ((*members_it).get_member_id() == member_id) + { + return &(*members_it); + } + } + + return NULL; +} + +bool Gcs_view::has_member(const std::string &member_id) const +{ + return get_member(member_id) != NULL; +} diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_force_peer_addresses_option.result b/rapid/plugin/group_replication/tests/mtr/r/gr_force_peer_addresses_option.result index c60fdf135588..51b1f448ac85 100644 --- a/rapid/plugin/group_replication/tests/mtr/r/gr_force_peer_addresses_option.result +++ b/rapid/plugin/group_replication/tests/mtr/r/gr_force_peer_addresses_option.result @@ -11,7 +11,7 @@ call mtr.add_suppression("Unable to start Group Replication on boot"); call mtr.add_suppression("force_members can only be updated when Group Replication is running*"); call mtr.add_suppression("The member lost contact with a majority of the members in the group. Until the network is restored.*"); call mtr.add_suppression("\\[GCS\\] Peer address .* is not valid."); -call mtr.add_suppression("\\[GCS\\] The peers list contains invalid addresses.Please provide a list with only valid addresses."); +call mtr.add_suppression("\\[GCS\\] The peers list contains invalid addresses. Please provide a list with only valid addresses."); call mtr.add_suppression("Error setting group_replication_force_members value .* on group communication interfaces"); call mtr.add_suppression("The member resumed contact with a majority of the members in the group.*"); SET SESSION sql_log_bin= 1; diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_majority_loss_restart.result b/rapid/plugin/group_replication/tests/mtr/r/gr_majority_loss_restart.result index 03f861cd3c66..8d0c97809528 100644 --- a/rapid/plugin/group_replication/tests/mtr/r/gr_majority_loss_restart.result +++ b/rapid/plugin/group_replication/tests/mtr/r/gr_majority_loss_restart.result @@ -5,6 +5,11 @@ Note #### Storing MySQL user name or password information in the master info rep [connection server1] [connection server1] [connection server2] +SET SESSION sql_log_bin= 0; +call mtr.add_suppression("Timeout on wait for view after joining group"); +call mtr.add_suppression("read failed"); +call mtr.add_suppression("The member was unable to join the group. Local port: *.*"); +SET SESSION sql_log_bin= 1; ############################################################ # 1. Crash server 2. @@ -27,24 +32,31 @@ include/assert.inc [server 2 is marked as unreachable] ############################################################ # 4. Restart server 2 with group_replication_start_on_boot=ON, -# server 2 will rejoin and unblock the group. +# server 2 will be refused to join the group. [connection server2] # Kill and restart:--group_replication_local_address=GROUP_REPLICATION_LOCAL_ADDRESS --group_replication_group_seeds=GROUP_REPLICATION_GROUP_SEEDS --group_replication_start_on_boot=ON --group-replication-group-name=GROUP_REPLICATION_GROUP_NAME include/rpl_reconnect.inc include/gr_wait_for_member_state.inc [connection server1] -include/gr_wait_for_member_state.inc +include/assert.inc [server 2 is marked as unreachable] + +############################################################ +# 5. Unblock group with server1 as a single member. +SET GLOBAL group_replication_force_members= "SERVER1_ADDRESS"; ############################################################ -# 5. Check that statement did unblock and was applied on -# both members. +# 6. Check that statement did unblock and was applied on +# server1. [connection server_1] -include/rpl_sync.inc [connection server1] + +############################################################ +# 7. Rejoin server2 [connection server2] +include/start_group_replication.inc ############################################################ -# 6. Execute a transaction on both members. +# 8. Execute a transaction on both members. [connection server1] INSERT INTO t1 VALUES (1); [connection server2] @@ -52,7 +64,7 @@ INSERT INTO t1 VALUES (2); include/rpl_sync.inc ############################################################ -# 7. Validate data. +# 9. Validate data. [connection server1] include/assert.inc ['There are two values in table t1'] include/show_binlog_events.inc @@ -90,6 +102,6 @@ server-binary-log.000003 # Xid # # COMMIT /* XID */ include/diff_tables.inc [server1:test.t1, server2:test.t1] ############################################################ -# 8. Clean up. +# 10. Clean up. DROP TABLE t1; include/group_replication_end.inc diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_force_member_expel.cnf b/rapid/plugin/group_replication/tests/mtr/t/gr_force_member_expel.cnf index 30847abcd9cc..6f22932cb5ea 100644 --- a/rapid/plugin/group_replication/tests/mtr/t/gr_force_member_expel.cnf +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_force_member_expel.cnf @@ -1,6 +1,7 @@ !include ../my.cnf [mysqld.1] +local-infile= true [mysqld.2] diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_force_peer_addresses_option.test b/rapid/plugin/group_replication/tests/mtr/t/gr_force_peer_addresses_option.test index fa64d5775af7..d0fcdf85fe27 100644 --- a/rapid/plugin/group_replication/tests/mtr/t/gr_force_peer_addresses_option.test +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_force_peer_addresses_option.test @@ -37,7 +37,7 @@ call mtr.add_suppression("Unable to start Group Replication on boot"); call mtr.add_suppression("force_members can only be updated when Group Replication is running*"); call mtr.add_suppression("The member lost contact with a majority of the members in the group. Until the network is restored.*"); call mtr.add_suppression("\\[GCS\\] Peer address .* is not valid."); -call mtr.add_suppression("\\[GCS\\] The peers list contains invalid addresses.Please provide a list with only valid addresses."); +call mtr.add_suppression("\\[GCS\\] The peers list contains invalid addresses. Please provide a list with only valid addresses."); call mtr.add_suppression("Error setting group_replication_force_members value .* on group communication interfaces"); call mtr.add_suppression("The member resumed contact with a majority of the members in the group.*"); SET SESSION sql_log_bin= 1; diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_majority_loss_restart.test b/rapid/plugin/group_replication/tests/mtr/t/gr_majority_loss_restart.test index 04b3271afe26..3bdd7fd8d65b 100644 --- a/rapid/plugin/group_replication/tests/mtr/t/gr_majority_loss_restart.test +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_majority_loss_restart.test @@ -1,6 +1,7 @@ ################################################################################ -# Validate that when a group loose a majority, if the faulty member rejoins the -# group unblocks and resumes its normal behaviour. +# Validate that when a group looses the majority, if the faulty member tries to +# rejoin it will be disallowed to unblock the group and user needs to use +# group_replication_force_members option. # # 0. Start with 2 servers running GR # 1. Crash server 2. @@ -8,15 +9,16 @@ # since the group does not have majority. # 3. Assert that group is still blocked. # 4. Restart server 2 with group_replication_start_on_boot=ON, -# server 2 will rejoin and unblock the group. -# 5. Check that statement did unblock and was applied on -# both members. -# 6. Execute a transaction on both members. -# 7. Validate data. -# 8. Clean up. +# server 2 will be refused to join the group. +# 5. Unblock group with server1 as a single member. +# 6. Check that statement did unblock and was applied on +# server1. +# 7. Rejoin server2 +# 8. Execute a transaction on both members. +# 9. Validate data. +#10. Clean up. ################################################################################ -# This test does crashes servers, thence we skip it on asan and valgrind. ---source include/not_asan.inc +# This test does crashes servers, thence we skip it on valgrind. --source include/not_valgrind.inc --source include/big_test.inc --source include/force_restart.inc @@ -34,6 +36,12 @@ --let $member2_group_replication_local_address= `SELECT @@GLOBAL.group_replication_local_address` --let $member2_group_replication_group_seeds= `SELECT @@GLOBAL.group_replication_group_seeds` +SET SESSION sql_log_bin= 0; +call mtr.add_suppression("Timeout on wait for view after joining group"); +call mtr.add_suppression("read failed"); +call mtr.add_suppression("The member was unable to join the group. Local port: *.*"); +SET SESSION sql_log_bin= 1; + --echo --echo ############################################################ @@ -86,49 +94,61 @@ --echo --echo ############################################################ --echo # 4. Restart server 2 with group_replication_start_on_boot=ON, ---echo # server 2 will rejoin and unblock the group. +--echo # server 2 will be refused to join the group. --let $rpl_connection_name= server2 --source include/rpl_connection.inc --let $restart_parameters=restart:--group_replication_local_address=$member2_group_replication_local_address --group_replication_group_seeds=$member2_group_replication_group_seeds --group_replication_start_on_boot=ON --group-replication-group-name=$group_replication_group_name --replace_result $group_replication_group_name GROUP_REPLICATION_GROUP_NAME $member2_group_replication_local_address GROUP_REPLICATION_LOCAL_ADDRESS $member2_group_replication_group_seeds GROUP_REPLICATION_GROUP_SEEDS --source ../inc/kill_and_restart_mysqld.inc +# Give it some time to try and fail +--sleep 20 + --let $rpl_server_number= 2 --source include/rpl_reconnect.inc ---let $group_replication_member_state= ONLINE +--let $group_replication_member_state= OFFLINE --source ../inc/gr_wait_for_member_state.inc --let $rpl_connection_name= server1 --source include/rpl_connection.inc ---let $group_replication_member_state= ONLINE ---let $group_replication_member_id= $member2_uuid ---source ../inc/gr_wait_for_member_state.inc ---let $group_replication_member_id= +--let $assert_text= server 2 is marked as unreachable +--let $assert_cond= [SELECT COUNT(*) FROM performance_schema.replication_group_members WHERE member_id="$member2_uuid" AND member_state="UNREACHABLE"] = 1 +--source include/assert.inc --echo --echo ############################################################ ---echo # 5. Check that statement did unblock and was applied on ---echo # both members. +--echo # 5. Unblock group with server1 as a single member. +--let $local_address_server1= `SELECT @@GLOBAL.group_replication_local_address` +--replace_result $local_address_server1 SERVER1_ADDRESS +--eval SET GLOBAL group_replication_force_members= "$local_address_server1" + + +--echo +--echo ############################################################ +--echo # 6. Check that statement did unblock and was applied on +--echo # server1. --let $rpl_connection_name= server_1 --source include/rpl_connection.inc --reap ---source include/rpl_sync.inc --let $rpl_connection_name= server1 --source include/rpl_connection.inc --let $wait_condition= SELECT COUNT(*)=1 FROM information_schema.tables WHERE TABLE_SCHEMA="test" AND TABLE_NAME="t1"; --source include/wait_condition.inc + +--echo +--echo ############################################################ +--echo # 7. Rejoin server2 --let $rpl_connection_name= server2 --source include/rpl_connection.inc ---let $wait_condition= SELECT COUNT(*)=1 FROM information_schema.tables WHERE TABLE_SCHEMA="test" AND TABLE_NAME="t1"; ---source include/wait_condition.inc +--source include/start_group_replication.inc --echo --echo ############################################################ ---echo # 6. Execute a transaction on both members. +--echo # 8. Execute a transaction on both members. --let $rpl_connection_name= server1 --source include/rpl_connection.inc INSERT INTO t1 VALUES (1); @@ -142,7 +162,7 @@ INSERT INTO t1 VALUES (2); --echo --echo ############################################################ ---echo # 7. Validate data. +--echo # 9. Validate data. --let $rpl_connection_name= server1 --source include/rpl_connection.inc --let $assert_text= 'There are two values in table t1' @@ -165,7 +185,7 @@ INSERT INTO t1 VALUES (2); --echo --echo ############################################################ ---echo # 8. Clean up. +--echo # 10. Clean up. DROP TABLE t1; --source ../inc/group_replication_end.inc From 2a19bd410f7df5b3f085e4430a671cd0e387c871 Mon Sep 17 00:00:00 2001 From: Laurynas Biveinis Date: Mon, 19 Feb 2018 06:32:21 +0200 Subject: [PATCH 0564/1221] Fix PS-3843 (Reconcile EINTR handling after WL#7696) Remove EINTR handling code from os_file_create_simpl_func and make os_file_get_last_error_low return OS_FILE_AIO_INTERRUPTED for every EINTR, regardless of srv_use_native_aio value. OS_FILE_AIO_INTERRUPTED should be renamed to remove "AIO", but this is not done in order to keep diff minimal. --- storage/innobase/os/os0file.cc | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/storage/innobase/os/os0file.cc b/storage/innobase/os/os0file.cc index 752870e0335d..e0cfedfa3943 100644 --- a/storage/innobase/os/os0file.cc +++ b/storage/innobase/os/os0file.cc @@ -3186,9 +3186,7 @@ os_file_get_last_error_low( } break; case EINTR: - if (srv_use_native_aio) { - return(OS_FILE_AIO_INTERRUPTED); - } + return(OS_FILE_AIO_INTERRUPTED); break; case EACCES: return(OS_FILE_ACCESS_VIOLATION); @@ -3449,15 +3447,10 @@ os_file_create_simple_func( if (file.m_file == -1) { *success = false; - if (errno == EINTR) { - /* Handle signal interruptions correctly */ - retry = true; - } else { - retry = os_file_handle_error( - name, - create_mode == OS_FILE_OPEN - ? "open" : "create"); - } + retry = os_file_handle_error( + name, + create_mode == OS_FILE_OPEN + ? "open" : "create"); } else { *success = true; retry = false; From 8162de58b7baaaccca653fe7cd5a00074b670d19 Mon Sep 17 00:00:00 2001 From: Jaideep Karande Date: Mon, 19 Feb 2018 05:37:06 +0100 Subject: [PATCH 0565/1221] Bug#27401817: ENFORCE THAT ALL MEMBERS DO HAVE THE SAME LOWER_CASE_TABLE_NAMES VALUE Description: Group Replication conflict detection does use schema and table names as part of the Primary Key Equivalent (PKE) in order to detect and disallow conflicting transactions. The value of lower_case_table_names option does change how schema and tables names are stored and externalized, which depending on the configuration value may persist a T1 as t1. This difference on a group can cause inconsistencies: Example: M1: lower_case_table_names=0 M2: lower_case_table_names=0 M3: lower_case_table_names=1 CREATE TABLE T1; would be stored as T1 on M1 and M2, but as t1 on M3. Resolution: When a server tries to join a group, its lower_case_table_names value must be compared with the group one, if the value is different the server must not be allowed to join. --- .../group_replication/include/member_info.h | 18 ++- .../src/gcs_event_handlers.cc | 18 ++- .../group_replication/src/member_info.cc | 30 ++++- rapid/plugin/group_replication/src/plugin.cc | 11 +- .../mtr/r/gr_lower_case_table_names.result | 50 +++++++ .../t/gr_lower_case_table_names-master.opt | 1 + .../mtr/t/gr_lower_case_table_names-slave.opt | 1 + .../mtr/t/gr_lower_case_table_names.test | 124 ++++++++++++++++++ .../group_replication_member_info-t.cc | 18 ++- sql/replication.h | 3 +- sql/rpl_group_replication.cc | 3 +- 11 files changed, 260 insertions(+), 17 deletions(-) create mode 100644 rapid/plugin/group_replication/tests/mtr/r/gr_lower_case_table_names.result create mode 100644 rapid/plugin/group_replication/tests/mtr/t/gr_lower_case_table_names-master.opt create mode 100644 rapid/plugin/group_replication/tests/mtr/t/gr_lower_case_table_names-slave.opt create mode 100644 rapid/plugin/group_replication/tests/mtr/t/gr_lower_case_table_names.test diff --git a/rapid/plugin/group_replication/include/member_info.h b/rapid/plugin/group_replication/include/member_info.h index 510b7e3fc3d1..e4d5a4f0b4a9 100644 --- a/rapid/plugin/group_replication/include/member_info.h +++ b/rapid/plugin/group_replication/include/member_info.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -104,8 +104,11 @@ class Group_member_info: public Plugin_gcs_message // Length of the payload item: 2 bytes PIT_MEMBER_WEIGHT= 14, + // Length of the payload item: 2 bytes + PIT_LOWER_CASE_TABLE_NAME= 15, + // No valid type codes can appear after this one. - PIT_MAX= 15 + PIT_MAX= 16 }; /* @@ -151,6 +154,8 @@ class Group_member_info: public Plugin_gcs_message @param[in] role_arg member role within the group @param[in] in_single_primary_mode is member in single mode @param[in] has_enforces_update_everywhere_checks has member enforce update check + @param[in] member_weight_arg member weight + @param[in] lower_case_table_names_arg lower case table names */ Group_member_info(char* hostname_arg, uint port_arg, @@ -163,7 +168,8 @@ class Group_member_info: public Plugin_gcs_message Group_member_info::Group_member_role role_arg, bool in_single_primary_mode, bool has_enforces_update_everywhere_checks, - uint member_weight_arg); + uint member_weight_arg, + uint lower_case_table_names_arg); /** Copy constructor @@ -245,6 +251,11 @@ class Group_member_info: public Plugin_gcs_message */ uint32 get_configuration_flags(); + /** + @return the global-variable lower case table names value + */ + uint get_lower_case_table_names() const; + /** @return the member state of system variable group_replication_single_primary_mode @@ -394,6 +405,7 @@ class Group_member_info: public Plugin_gcs_message uint32 configuration_flags; bool conflict_detection_enable; uint member_weight; + uint lower_case_table_names; }; diff --git a/rapid/plugin/group_replication/src/gcs_event_handlers.cc b/rapid/plugin/group_replication/src/gcs_event_handlers.cc index 98360b4d3081..02932da10d28 100644 --- a/rapid/plugin/group_replication/src/gcs_event_handlers.cc +++ b/rapid/plugin/group_replication/src/gcs_event_handlers.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -1683,6 +1683,22 @@ Plugin_gcs_events_handler::compare_member_option_compatibility() const Group_member_info::get_configuration_flags_string(member_configuration_flags).c_str()); goto cleaning; } + + if (local_member_info->get_lower_case_table_names() != + (*all_members_it)->get_lower_case_table_names()) + { + result= 1; + log_message(MY_ERROR_LEVEL, + "The member is configured with a lower_case_table_names " + "option value '%lu' different from the group '%lu'. " + "The member will now exit the group. If there is existing " + "data on member, it may be incompatible with group if " + "created with a lower_case_table_names value different from " + "the group.", + local_member_info->get_lower_case_table_names(), + (*all_members_it)->get_lower_case_table_names()); + goto cleaning; + } } cleaning: diff --git a/rapid/plugin/group_replication/src/member_info.cc b/rapid/plugin/group_replication/src/member_info.cc index a281c487ebde..439e3814fa7a 100644 --- a/rapid/plugin/group_replication/src/member_info.cc +++ b/rapid/plugin/group_replication/src/member_info.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -32,7 +32,8 @@ Group_member_info(char* hostname_arg, Group_member_info::Group_member_role role_arg, bool in_single_primary_mode, bool has_enforces_update_everywhere_checks, - uint member_weight_arg) + uint member_weight_arg, + uint lower_case_table_names_arg) : Plugin_gcs_message(CT_MEMBER_INFO_MESSAGE), hostname(hostname_arg), port(port_arg), uuid(uuid_arg), status(status_arg), @@ -41,7 +42,8 @@ Group_member_info(char* hostname_arg, unreachable(false), role(role_arg), configuration_flags(0), conflict_detection_enable(false), - member_weight(member_weight_arg) + member_weight(member_weight_arg), + lower_case_table_names(lower_case_table_names_arg) { gcs_member_id= new Gcs_member_identifier(gcs_member_id_arg); member_version= new Member_version(member_version_arg.get_version()); @@ -69,7 +71,8 @@ Group_member_info::Group_member_info(Group_member_info& other) role(other.get_role()), configuration_flags(other.get_configuration_flags()), conflict_detection_enable(other.is_conflict_detection_enabled()), - member_weight(other.get_member_weight()) + member_weight(other.get_member_weight()), + lower_case_table_names(other.get_lower_case_table_names()) { gcs_member_id= new Gcs_member_identifier(other.get_gcs_member_id() .get_member_id()); @@ -154,6 +157,10 @@ Group_member_info::encode_payload(std::vector* buffer) const encode_payload_item_int2(buffer, PIT_MEMBER_WEIGHT, member_weight_aux); + uint16 lower_case_table_names_aux= static_cast (lower_case_table_names); + encode_payload_item_int2(buffer, PIT_LOWER_CASE_TABLE_NAME, + lower_case_table_names_aux); + DBUG_VOID_RETURN; } @@ -267,6 +274,15 @@ Group_member_info::decode_payload(const unsigned char* buffer, member_weight= (uint)member_weight_aux; } break; + + case PIT_LOWER_CASE_TABLE_NAME: + if (slider + payload_item_length <= end) + { + uint16 lower_case_table_names_aux= uint2korr(slider); + slider += payload_item_length; + lower_case_table_names= static_cast (lower_case_table_names_aux); + } + break; } } @@ -365,6 +381,12 @@ Group_member_info::get_configuration_flags() return configuration_flags; } +uint +Group_member_info::get_lower_case_table_names() const +{ + return lower_case_table_names; +} + bool Group_member_info::in_primary_mode() { return get_configuration_flags() & CNF_SINGLE_PRIMARY_MODE_F; diff --git a/rapid/plugin/group_replication/src/plugin.cc b/rapid/plugin/group_replication/src/plugin.cc index 54cecc5b481a..ce1240b270b6 100644 --- a/rapid/plugin/group_replication/src/plugin.cc +++ b/rapid/plugin/group_replication/src/plugin.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -150,6 +150,9 @@ ulong recovery_reconnect_interval_var= 0; /* Write set extraction algorithm*/ int write_set_extraction_algorithm= HASH_ALGORITHM_OFF; +/* Lower case table name */ +uint gr_lower_case_table_names= 0; + /* Generic components variables */ ulong components_stop_timeout_var= LONG_TIMEOUT; @@ -672,7 +675,8 @@ int configure_group_member_manager(char *hostname, char *uuid, Group_member_info::MEMBER_ROLE_SECONDARY, single_primary_mode_var, enforce_update_everywhere_checks_var, - member_weight_var); + member_weight_var, + gr_lower_case_table_names); //Create the membership info visible for the group delete group_member_mgr; @@ -1650,6 +1654,9 @@ static int check_if_server_properly_configured() DBUG_RETURN(1); } + gr_lower_case_table_names= startup_pre_reqs.lower_case_table_names; + DBUG_ASSERT (gr_lower_case_table_names <= 2); + DBUG_RETURN(0); } diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_lower_case_table_names.result b/rapid/plugin/group_replication/tests/mtr/r/gr_lower_case_table_names.result new file mode 100644 index 000000000000..57a494bf4bdf --- /dev/null +++ b/rapid/plugin/group_replication/tests/mtr/r/gr_lower_case_table_names.result @@ -0,0 +1,50 @@ +include/group_replication.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection server1] + +## 1. Verify lower_case_table_names cannot be set while server is +## running and start GR on server-1. + +[connection server1] +SET GLOBAL lower_case_table_names= 1; +ERROR HY000: Variable 'lower_case_table_names' is a read only variable +include/start_and_bootstrap_group_replication.inc + +## 2. Store variables of server-2 for restart. + +[connection server2] +set session sql_log_bin=0; +call mtr.add_suppression("The member is configured with a lower_case_table_names option value .*"); +call mtr.add_suppression("lower_case_table_names was set to 2, .*"); +set session sql_log_bin=1; + +## 3A. Test GR start with command when lower_case_table_names matches. + +include/start_group_replication.inc +include/assert.inc ['Assert server-1 and server-2 are ONLINE'] + +## 3B. Test GR start on boot when lower_case_table_names matches. + +# restart:--group_replication_start_on_boot=1 --group_replication_local_address=GROUP_REPLICATION_LOCAL_ADDRESS --group_replication_group_seeds=GROUP_REPLICATION_GROUP_SEEDS --group_replication_group_name=GROUP_REPLICATION_GROUP_NAME --lower_case_table_names=1 +include/rpl_reconnect.inc + +## 4A. Test GR does not start on boot when lower_case_table_names +## does not match. + +# restart:--group_replication_start_on_boot=1 --group_replication_local_address=GROUP_REPLICATION_LOCAL_ADDRESS --group_replication_group_seeds=GROUP_REPLICATION_GROUP_SEEDS --group_replication_group_name=GROUP_REPLICATION_GROUP_NAME --lower_case_table_names=2 +include/rpl_reconnect.inc +include/rpl_gr_wait_for_number_of_members.inc + +## 4B. Test GR does not start with command when lower_case_table_names +## does not match. + +START GROUP_REPLICATION; +ERROR HY000: The server is not configured properly to be an active member of the group. Please see more details on error log. +include/assert_grep.inc [Found the expected error about lower_case_table_names] +include/assert.inc ['Assert server-2 is OFFLINE'] + +## 5. Cleanup. + +include/group_replication_end.inc diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_lower_case_table_names-master.opt b/rapid/plugin/group_replication/tests/mtr/t/gr_lower_case_table_names-master.opt new file mode 100644 index 000000000000..62ab6dad1e0d --- /dev/null +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_lower_case_table_names-master.opt @@ -0,0 +1 @@ +--lower_case_table_names=1 diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_lower_case_table_names-slave.opt b/rapid/plugin/group_replication/tests/mtr/t/gr_lower_case_table_names-slave.opt new file mode 100644 index 000000000000..62ab6dad1e0d --- /dev/null +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_lower_case_table_names-slave.opt @@ -0,0 +1 @@ +--lower_case_table_names=1 diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_lower_case_table_names.test b/rapid/plugin/group_replication/tests/mtr/t/gr_lower_case_table_names.test new file mode 100644 index 000000000000..b5a2f057df47 --- /dev/null +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_lower_case_table_names.test @@ -0,0 +1,124 @@ +################################################################################ +## This test proves that group replication does not start on server when it's +## lower_case_table_names does not match with the group. +## +## Test: +## 0. This test requires 2 members. +## 1. Verify lower_case_table_names cannot be set while server is +## running and start GR on server-1. +## 2. Store variables of server-2 for restart. +## 3. Test GR start on server when lower_case_table_names matches. +## 3A. Test GR start with command when lower_case_table_names matches. +## 3B. Test GR start on boot when lower_case_table_names matches. +## 4. Test GR does not start on server when lower_case_table_names +## does not match. +## 4A. Test GR does not start on boot when lower_case_table_names +## does not match. +## 4B. Test GR does not start with command when lower_case_table_names +## does not match. +## 5. Cleanup. +################################################################################ + +--source include/big_test.inc +--source ../inc/have_group_replication_plugin.inc +--let $rpl_skip_group_replication_start= 1 +--source ../inc/group_replication.inc +--source include/force_restart.inc + +--let $allow_rpl_inited=1 + +--echo +--echo ## 1. Verify lower_case_table_names cannot be set while server is +--echo ## running and start GR on server-1. +--echo +--let $rpl_connection_name= server1 +--source include/rpl_connection.inc + +## Verify lower_case_table_names cannot be set while server is running. +## This make sures we do not need to test variable changes while GR is running. +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +SET GLOBAL lower_case_table_names= 1; + +--source ../inc/start_and_bootstrap_group_replication.inc + +--echo +--echo ## 2. Store variables of server-2 for restart. +--echo +--let $rpl_connection_name= server2 +--source include/rpl_connection.inc + +--let $_group_replication_local_address= `SELECT @@GLOBAL.group_replication_local_address` +--let $_group_replication_group_seeds= `SELECT @@GLOBAL.group_replication_group_seeds` + +set session sql_log_bin=0; +call mtr.add_suppression("The member is configured with a lower_case_table_names option value .*"); +call mtr.add_suppression("lower_case_table_names was set to 2, .*"); +set session sql_log_bin=1; + +--echo +--echo ## 3A. Test GR start with command when lower_case_table_names matches. +--echo +--source include/start_group_replication.inc + +--let $assert_text= 'Assert server-1 and server-2 are ONLINE' +--let $assert_cond= "[SELECT COUNT(*) from performance_schema.replication_group_members WHERE MEMBER_STATE=\"ONLINE\"]" = 2 +--source include/assert.inc + +--echo +--echo ## 3B. Test GR start on boot when lower_case_table_names matches. +--echo +--let $restart_parameters=restart:--group_replication_start_on_boot=1 --group_replication_local_address=$_group_replication_local_address --group_replication_group_seeds=$_group_replication_group_seeds --group_replication_group_name=$group_replication_group_name --lower_case_table_names=1 +--replace_result $group_replication_group_name GROUP_REPLICATION_GROUP_NAME $_group_replication_local_address GROUP_REPLICATION_LOCAL_ADDRESS $_group_replication_group_seeds GROUP_REPLICATION_GROUP_SEEDS +--source include/restart_mysqld.inc + +#Needed as we are not using rpl_restart_server.inc +--let $rpl_server_number= 2 +--source include/rpl_reconnect.inc + +--let $wait_condition= SELECT COUNT(*) = 2 FROM performance_schema.replication_group_members WHERE MEMBER_STATE="ONLINE" +--source include/wait_condition.inc + +--echo +--echo ## 4A. Test GR does not start on boot when lower_case_table_names +--echo ## does not match. +--echo + +--let $restart_parameters=restart:--group_replication_start_on_boot=1 --group_replication_local_address=$_group_replication_local_address --group_replication_group_seeds=$_group_replication_group_seeds --group_replication_group_name=$group_replication_group_name --lower_case_table_names=2 +--replace_result $group_replication_group_name GROUP_REPLICATION_GROUP_NAME $_group_replication_local_address GROUP_REPLICATION_LOCAL_ADDRESS $_group_replication_group_seeds GROUP_REPLICATION_GROUP_SEEDS +--source include/restart_mysqld.inc + +#Needed as we are not using rpl_restart_server.inc +--let $rpl_server_number= 2 +--source include/rpl_reconnect.inc + +## Wait for server-2 to join group, needed to get group lower_case_table_names +--let $group_replication_number_of_members=2 +--source ../inc/gr_wait_for_number_of_members.inc + +--let $wait_condition= SELECT COUNT(*) = 1 FROM performance_schema.replication_group_members WHERE MEMBER_STATE="OFFLINE" +--source include/wait_condition.inc + +--echo +--echo ## 4B. Test GR does not start with command when lower_case_table_names +--echo ## does not match. +--echo + +--error ER_GROUP_REPLICATION_CONFIGURATION +START GROUP_REPLICATION; + +--let $assert_only_after = CURRENT_TEST: group_replication.gr_lower_case_table_names +--let $assert_file= $MYSQLTEST_VARDIR/log/mysqld.2.err +--let $assert_text = Found the expected error about lower_case_table_names +--let $assert_select = The member is configured with a lower_case_table_names option value +--let $assert_count = 2 +--source include/assert_grep.inc + +--let $assert_text= 'Assert server-2 is OFFLINE' +--let $assert_cond= "[SELECT COUNT(*) from performance_schema.replication_group_members WHERE MEMBER_STATE=\"OFFLINE\"]" = 1 +--source include/assert.inc + +--echo +--echo ## 5. Cleanup. +--echo + +--source ../inc/group_replication_end.inc diff --git a/rapid/unittest/gunit/group_replication/group_replication_member_info-t.cc b/rapid/unittest/gunit/group_replication/group_replication_member_info-t.cc index b89396b91da1..dc1c467c6058 100644 --- a/rapid/unittest/gunit/group_replication/group_replication_member_info-t.cc +++ b/rapid/unittest/gunit/group_replication/group_replication_member_info-t.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -40,6 +40,7 @@ class ClusterMemberInfoTest : public ::testing::Test uint port= 4444; uint plugin_version= 0x000400; uint write_set_algorithm= 1; + uint lower_case_table_names= 0; string executed_gtid("aaaa:1-10"); string retrieved_gtid("bbbb:1-10"); ulonglong gtid_assignment_block_size= 9223372036854775807ULL; @@ -61,7 +62,7 @@ class ClusterMemberInfoTest : public ::testing::Test Group_member_info::MEMBER_ROLE_PRIMARY, in_primary_mode, has_enforces_update_everywhere_checks, - member_weight); + member_weight, lower_case_table_names); local_node->update_gtid_sets(executed_gtid,retrieved_gtid); } @@ -122,6 +123,7 @@ class ClusterMemberInfoManagerTest : public ::testing::Test string uuid("8d7r947c-dr4a-17i3-59d1-f01faf1kkc44"); uint port= 4444; uint write_set_algorithm= 1; + uint lower_case_table_names= 0; uint plugin_version= 0x000400; gcs_member_id= new Gcs_member_identifier("stuff"); ulonglong gtid_assignment_block_size= 9223372036854775807ULL; @@ -141,7 +143,7 @@ class ClusterMemberInfoManagerTest : public ::testing::Test Group_member_info::MEMBER_ROLE_SECONDARY, in_primary_mode, has_enforces_update_everywhere_checks, - member_weight); + member_weight, lower_case_table_names); cluster_member_mgr= new Group_member_info_manager(local_node); } @@ -165,6 +167,7 @@ TEST_F(ClusterMemberInfoManagerTest, GetLocalInfoByUUIDTest) string uuid("781f947c-db4a-22e3-99d4-f01faf1a1c44"); uint port= 4444; uint write_set_algorithm= 1; + uint lower_case_table_names= 0; uint plugin_version= 0x000400; Gcs_member_identifier gcs_member_id("another_stuff"); string executed_gtid("aaaa:1-11"); @@ -189,7 +192,8 @@ TEST_F(ClusterMemberInfoManagerTest, GetLocalInfoByUUIDTest) Group_member_info::MEMBER_ROLE_PRIMARY, in_primary_mode, has_enforces_update_everywhere_checks, - member_weight); + member_weight, + lower_case_table_names); new_member->update_gtid_sets(executed_gtid,retrieved_gtid); cluster_member_mgr->add(new_member); @@ -329,6 +333,7 @@ TEST_F(ClusterMemberInfoManagerTest, EncodeDecodeLargeSets) string uuid("781f947c-db4a-22e3-99d4-f01faf1a1c44"); uint port= 4444; uint write_set_algorithm= 1; + uint lower_case_table_names= 0; uint plugin_version= 0x000400; Gcs_member_identifier gcs_member_id("another_stuff"); string executed_gtid("aaaa:1-11:12-14:16-20:22-30"); @@ -354,7 +359,8 @@ TEST_F(ClusterMemberInfoManagerTest, EncodeDecodeLargeSets) Group_member_info::MEMBER_ROLE_PRIMARY, in_primary_mode, has_enforces_update_everywhere_checks, - member_weight); + member_weight, + lower_case_table_names); new_member->update_gtid_sets(executed_gtid,retrieved_gtid); cluster_member_mgr->add(new_member); @@ -427,6 +433,8 @@ TEST_F(ClusterMemberInfoManagerTest, EncodeDecodeLargeSets) retrieved_local_info->get_role()); ASSERT_EQ(local_node->get_member_weight(), retrieved_local_info->get_member_weight()); + ASSERT_EQ(local_node->get_lower_case_table_names(), + retrieved_local_info->get_lower_case_table_names()); delete retrieved_local_info; } diff --git a/sql/replication.h b/sql/replication.h index ff1c0b0ee594..f157e1687905 100644 --- a/sql/replication.h +++ b/sql/replication.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2008, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2008, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -100,6 +100,7 @@ typedef struct Trans_context_info { ulong parallel_applier_workers; bool parallel_applier_preserve_commit_order; enum_tx_isolation tx_isolation; // enum values in enum_tx_isolation + uint lower_case_table_names; } Trans_context_info; /** diff --git a/sql/rpl_group_replication.cc b/sql/rpl_group_replication.cc index 088033ec07a1..b005eec56d83 100644 --- a/sql/rpl_group_replication.cc +++ b/sql/rpl_group_replication.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -425,6 +425,7 @@ get_server_startup_prerequirements(Trans_context_info& requirements, requirements.parallel_applier_type= mts_parallel_option; requirements.parallel_applier_workers= opt_mts_slave_parallel_workers; requirements.parallel_applier_preserve_commit_order= opt_slave_preserve_commit_order; + requirements.lower_case_table_names = lower_case_table_names; } #endif //HAVE_REPLICATION From 71189c7c0389a28be37fad1df93ccb231fb507be Mon Sep 17 00:00:00 2001 From: Arun Kuruvila Date: Mon, 19 Feb 2018 11:24:19 +0530 Subject: [PATCH 0566/1221] Bug#26929724: REPAIR BY SORTING INCLUDING BULK INSERT CAUSES INDEX CORRUPTION Description: MYISAM index corruption occurs for bulk insert and repair table which involves "repair by sorting" algorithm. Analysis: The index corruption happens because of the incorrect sorting done by "my_qsort2()" in 5.7. This happens for a bulk insert with more than 450001959 rows or repair table with more than 450001959 rows. In 8.0, "my_qsort2()" is replaced by std::sort() as part of Bug#25965593. Fix:- Backported Bug#25965593 fix partially to ensure MyISAM repair by sorting algorithm uses std::sort(). --- include/my_sys.h | 14 ++++++------- storage/myisam/CMakeLists.txt | 4 ++-- storage/myisam/myisamdef.h | 10 ++++++++- storage/myisam/{sort.c => sort.cc} | 33 ++++++++++++++++++++++-------- 4 files changed, 42 insertions(+), 19 deletions(-) rename storage/myisam/{sort.c => sort.cc} (97%) diff --git a/include/my_sys.h b/include/my_sys.h index f2fc04ba0105..f43bc120bcfe 100644 --- a/include/my_sys.h +++ b/include/my_sys.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -763,12 +763,10 @@ File create_temp_file(char *to, const char *dir, const char *pfx, int mode, myf MyFlags); // Use Prealloced_array or std::vector or something similar in C++ -#if defined(__cplusplus) -#define init_dynamic_array please_use_an_appropriately_typed_container -#define my_init_dynamic_array please_use_an_appropriately_typed_container - -#else +#ifdef __cplusplus +extern "C" { +#endif extern my_bool my_init_dynamic_array(DYNAMIC_ARRAY *array, PSI_memory_key key, @@ -782,7 +780,9 @@ extern my_bool init_dynamic_array(DYNAMIC_ARRAY *array, uint element_size, #define dynamic_element(array,array_index,type) \ ((type)((array)->buffer) +(array_index)) -#endif /* __cplusplus */ +#ifdef __cplusplus +} +#endif /* Some functions are still in use in C++, because HASH uses DYNAMIC_ARRAY */ extern my_bool insert_dynamic(DYNAMIC_ARRAY *array, const void *element); diff --git a/storage/myisam/CMakeLists.txt b/storage/myisam/CMakeLists.txt index f09d31513886..9e7bce57e599 100644 --- a/storage/myisam/CMakeLists.txt +++ b/storage/myisam/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2006, 2016, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 2018, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -24,7 +24,7 @@ SET(MYISAM_SOURCES ft_boolean_search.c ft_nlq_search.c ft_parser.c ft_static.c mi_rfirst.c mi_rlast.c mi_rnext.c mi_rnext_same.c mi_rprev.c mi_rrnd.c mi_rsame.c mi_rsamepos.c mi_scan.c mi_search.c mi_static.c mi_statrec.c mi_unique.c mi_update.c mi_write.c rt_index.c rt_key.c rt_mbr.c - rt_split.c sort.c sp_key.c mi_extrafunc.h myisamdef.h + rt_split.c sort.cc sp_key.c mi_extrafunc.h myisamdef.h rt_index.h mi_rkey.c) MYSQL_ADD_PLUGIN(myisam ${MYISAM_SOURCES} diff --git a/storage/myisam/myisamdef.h b/storage/myisam/myisamdef.h index 6e167f1d14db..3f4b7989227a 100644 --- a/storage/myisam/myisamdef.h +++ b/storage/myisam/myisamdef.h @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -473,6 +473,10 @@ typedef struct st_mi_sort_param extern mysql_mutex_t THR_LOCK_myisam; +#ifdef __cplusplus +extern "C" { +#endif + /* Some extern variables */ extern LIST *myisam_open_list; @@ -634,6 +638,10 @@ extern ulonglong mi_safe_mul(ulonglong a,ulonglong b); extern int _mi_ft_update(MI_INFO *info, uint keynr, uchar *keybuf, const uchar *oldrec, const uchar *newrec, my_off_t pos); +#ifdef __cplusplus +} +#endif + struct st_sort_info; diff --git a/storage/myisam/sort.c b/storage/myisam/sort.cc similarity index 97% rename from storage/myisam/sort.c rename to storage/myisam/sort.cc index 9fcb8d5ce410..8c19313e5141 100644 --- a/storage/myisam/sort.c +++ b/storage/myisam/sort.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -18,6 +18,8 @@ them in sorted order through SORT_INFO functions. */ +#include + #include "fulltext.h" #if defined(_WIN32) #include @@ -37,6 +39,19 @@ #define DISK_BUFFER_SIZE (IO_SIZE*16) +class Key_compare : + public std::binary_function +{ +public: + Key_compare(MI_SORT_PARAM *param) : info(param) {} + bool operator()(const uchar *a, const uchar *b) + { + return info->key_cmp(info, &a, &b) < 0; + } + MI_SORT_PARAM *info; +}; + + /* Pointers of functions for store and read keys from temp file */ @@ -581,8 +596,8 @@ int thr_write_keys(MI_SORT_PARAM *sort_param) length= (size_t)param->sort_buffer_length; while (length >= MIN_SORT_BUFFER) { - if ((mergebuf= my_malloc(PSI_NOT_INSTRUMENTED, - length, MYF(0)))) + if ((mergebuf= (uchar *) my_malloc(PSI_NOT_INSTRUMENTED, + length, MYF(0)))) break; length=length*3/4; } @@ -669,8 +684,8 @@ static int write_keys(MI_SORT_PARAM *info, uchar **sort_keys, uint sort_length=info->key_length; DBUG_ENTER("write_keys"); - my_qsort2((uchar*) sort_keys,count,sizeof(uchar*),(qsort2_cmp) info->key_cmp, - info); + std::sort(sort_keys, sort_keys + count, Key_compare(info)); + if (!my_b_inited(tempfile) && open_cached_file(tempfile, my_tmpdir(info->tmpdir), "ST", DISK_BUFFER_SIZE, info->sort_info->param->myf_rw)) @@ -712,8 +727,8 @@ static int write_keys_varlen(MI_SORT_PARAM *info, int err; DBUG_ENTER("write_keys_varlen"); - my_qsort2((uchar*) sort_keys,count,sizeof(uchar*),(qsort2_cmp) info->key_cmp, - info); + std::sort(sort_keys, sort_keys + count, Key_compare(info)); + if (!my_b_inited(tempfile) && open_cached_file(tempfile, my_tmpdir(info->tmpdir), "ST", DISK_BUFFER_SIZE, info->sort_info->param->myf_rw)) @@ -754,8 +769,8 @@ static int write_index(MI_SORT_PARAM *info, uchar **sort_keys, { DBUG_ENTER("write_index"); - my_qsort2((uchar*) sort_keys,(size_t) count,sizeof(uchar*), - (qsort2_cmp) info->key_cmp,info); + std::sort(sort_keys, sort_keys + count, Key_compare(info)); + while (count--) { if ((*info->key_write)(info,*sort_keys++)) From 3b26b934691843b4939bd8f90f6e921baf3933f9 Mon Sep 17 00:00:00 2001 From: Arun Kuruvila Date: Mon, 19 Feb 2018 11:59:15 +0530 Subject: [PATCH 0567/1221] Bug#26881508: MYSQL #1: DISABLE_ABORT_ON_ERROR IN AUTH_COMMON.H Description:- Sever crashes due to a NULL pointer de-reference. Analysis:- Sever encounters a NUll pointer de-reference during "acl_load()". Fix:- A check is introduced to avoid the NULL pointer de-reference. This issue is already prevented in 8.0 through Bug#27225806 fix. Therefore, this patch is applicable only for 5.7. --- sql/auth/auth_common.h | 9 ++++++++- sql/auth/sql_auth_cache.cc | 16 +++++++++++++--- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/sql/auth/auth_common.h b/sql/auth/auth_common.h index fecc5c286d97..2e0590bc9ff4 100644 --- a/sql/auth/auth_common.h +++ b/sql/auth/auth_common.h @@ -1,7 +1,7 @@ #ifndef AUTH_COMMON_INCLUDED #define AUTH_COMMON_INCLUDED -/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -560,6 +560,13 @@ class Acl_load_user_table_schema_factory table->field[Acl_load_user_table_old_schema::MYSQL_USER_FIELD_PASSWORD_56]; return strncmp(password_field->field_name, "Password", 8) == 0; } + + virtual bool user_table_schema_check(TABLE* table) + { + return table->s->fields > + Acl_load_user_table_old_schema::MYSQL_USER_FIELD_PASSWORD_56; + } + virtual ~Acl_load_user_table_schema_factory() {} }; diff --git a/sql/auth/sql_auth_cache.cc b/sql/auth/sql_auth_cache.cc index 7f0ec40d9818..f55f7baa4978 100644 --- a/sql/auth/sql_auth_cache.cc +++ b/sql/auth/sql_auth_cache.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -1495,8 +1495,18 @@ static my_bool acl_load(THD *thd, TABLE_LIST *tables) We need to check whether we are working with old database layout. This might be the case for instance when we are running mysql_upgrade. */ - table_schema= user_table_schema_factory.get_user_table_schema(table); - is_old_db_layout= user_table_schema_factory.is_old_user_table_schema(table); + if (user_table_schema_factory.user_table_schema_check(table)) + { + table_schema= user_table_schema_factory.get_user_table_schema(table); + is_old_db_layout= user_table_schema_factory.is_old_user_table_schema(table); + } + else + { + sql_print_error("[FATAL] mysql.user table is damaged. " + "Please run mysql_upgrade."); + end_read_record(&read_record_info); + goto end; + } allow_all_hosts=0; int read_rec_errcode; From bb319bca4f271d81949d4c514b7c7929038c208c Mon Sep 17 00:00:00 2001 From: Robert Golebiowski Date: Wed, 31 Jan 2018 09:15:40 +0100 Subject: [PATCH 0568/1221] BLD-933: CMake option to force build and fail it if the library is not found Adds a new cmake variable WITH_KEYRING_VAULT. Allowed values are: ON,1,OFF,0 When cmake is run with -DWITH_KEYRING_VAULT=ON and compilation of keyring_vault plugin is not possible, cmake aborts. Setting WITH_KEYRING_VAULT to ON and providing CURL library which depends on RTMP library will cause keyring vault unitest to not be build, but overall cmake configuration will not be aborted. A warning message will be generated. --- plugin/keyring_vault/CMakeLists.txt | 26 ++++++++++----------- unittest/gunit/keyring_vault/CMakeLists.txt | 21 +++++++++++++++-- 2 files changed, 31 insertions(+), 16 deletions(-) diff --git a/plugin/keyring_vault/CMakeLists.txt b/plugin/keyring_vault/CMakeLists.txt index 0bbf0bab8068..0f6411ee8aa6 100644 --- a/plugin/keyring_vault/CMakeLists.txt +++ b/plugin/keyring_vault/CMakeLists.txt @@ -1,29 +1,27 @@ +IF (NOT DEFINED WITH_KEYRING_VAULT) + SET (WITH_KEYRING_VAULT 1) +ENDIF() +IF (NOT WITH_KEYRING_VAULT) + MESSAGE (STATUS "Not building keyring_vault plugin") + RETURN() +ENDIF() + INCLUDE(CheckFunctionExists) INCLUDE(curl) SET(CMAKE_EXTRA_INCLUDE_FILES string.h) SET(CMAKE_EXTRA_INCLUDE_FILES) -MACRO (CHECK_IF_LIB_FOUND lib_name project_name) +MACRO (CHECK_IF_LIB_FOUND lib_name project_name status_mode) SET (lib_found_variable_name "${lib_name}_FOUND") IF (NOT DEFINED ${lib_found_variable_name} OR NOT ${${lib_found_variable_name}}) - message("Not building ${project_name}, could not find library: ${lib_name}") - RETURN() - ENDIF() -ENDMACRO() - -MACRO (CHECK_IF_CURL_DEPENDS_ON_RTMP project_name) - EXECUTE_PROCESS(COMMAND ldd ${CURL_LIBRARY} - COMMAND grep rtmp - OUTPUT_VARIABLE CURL_DEPENDS_ON_RTMP) - IF (NOT CURL_DEPENDS_ON_RTMP STREQUAL "") - message("Not building ${project_name}. The supplied CURL library depends on rtmp library. -Please provide CURL library that does not depend on rtmp library to build keyring_vault unittests.") + message(${status_mode} "Not building ${project_name}, could not find library: ${lib_name}") RETURN() ENDIF() ENDMACRO() -CHECK_IF_LIB_FOUND(CURL "keyring_vault") +CHECK_IF_LIB_FOUND(CURL "keyring_vault" FATAL_ERROR) +MESSAGE (STATUS "Building keyring_vault plugin") INCLUDE_DIRECTORIES(${BOOST_PATCHES_DIR}) INCLUDE_DIRECTORIES(SYSTEM ${BOOST_INCLUDE_DIR} ${CURL_INCLUDE_DIRS}) diff --git a/unittest/gunit/keyring_vault/CMakeLists.txt b/unittest/gunit/keyring_vault/CMakeLists.txt index 600273933ecb..cd0eca8d20fc 100644 --- a/unittest/gunit/keyring_vault/CMakeLists.txt +++ b/unittest/gunit/keyring_vault/CMakeLists.txt @@ -1,12 +1,29 @@ INCLUDE(curl) -IF(NOT GMOCK_FOUND) +IF (NOT DEFINED WITH_KEYRING_VAULT) + SET (WITH_KEYRING_VAULT 1) +ENDIF() +IF(NOT GMOCK_FOUND OR NOT WITH_KEYRING_VAULT) + MESSAGE (STATUS "Not building keyring_vault unit tests") RETURN() ENDIF() -CHECK_IF_LIB_FOUND(CURL "keyring_vault unit tests") +MACRO (CHECK_IF_CURL_DEPENDS_ON_RTMP project_name) + EXECUTE_PROCESS(COMMAND ldd ${CURL_LIBRARY} + COMMAND grep rtmp + OUTPUT_VARIABLE CURL_DEPENDS_ON_RTMP) + IF (NOT CURL_DEPENDS_ON_RTMP STREQUAL "") + message(WARNING "Not building ${project_name}. The supplied CURL library depends on rtmp library. +Please provide CURL library that does not depend on rtmp library to build keyring_vault unittests.") + RETURN() + ENDIF() +ENDMACRO() + +CHECK_IF_LIB_FOUND(CURL "keyring_vault unit tests" FATAL_ERROR) CHECK_IF_CURL_DEPENDS_ON_RTMP("keyring_vault unit tests") +message(STATUS "Building keyring_vault unittests") + INCLUDE_DIRECTORIES( SYSTEM ${GMOCK_INCLUDE_DIRS} SYSTEM ${BOOST_INCLUDE_DIR} From 6a5e8f2c4c291fcfae438dc4ebae91081185425d Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Tue, 30 Jan 2018 12:35:41 +0100 Subject: [PATCH 0569/1221] PS-296: mysqld crashing with subselects and long keys The heap-dynamic-rows patch limited the maximum key size of strings to 1000. This worked fine in earlier versions, where the maximum key length was below 1000. In 5.7, this was increased to 3072, which resulted in keys with 999 or more characters crashing in some operations. The latest dynamic rows patch doesn't contain this limitation anymore, looks like it can be safely removed. Note that this change doesn't fix the issue completely: varchar/varbinary keys at least 3071 character long will still crash - in practice, this means a maximum length of 3071 or 3072 chararcters, as that's the current maximum. This same bug is also present in mysql server. --- include/heap.h | 2 +- mysql-test/r/ctype_utf8mb4_heap.result | 4 -- mysql-test/r/percona_heap_bug_ps296.result | 76 ++++++++++++++++++++++ mysql-test/r/subquery_mat.result | 2 +- mysql-test/r/subquery_mat_all.result | 2 +- mysql-test/t/percona_heap_bug_ps296.test | 59 +++++++++++++++++ 6 files changed, 138 insertions(+), 7 deletions(-) create mode 100644 mysql-test/r/percona_heap_bug_ps296.result create mode 100644 mysql-test/t/percona_heap_bug_ps296.test diff --git a/include/heap.h b/include/heap.h index b369c3cc337f..3f5b0b24218a 100644 --- a/include/heap.h +++ b/include/heap.h @@ -42,7 +42,7 @@ extern "C" { #define HP_MAX_KEY MAX_INDEXES /* Max allowed keys */ #endif -#define HP_MAX_KEY_LENGTH 1000 /* Max length in bytes */ +#define HP_MAX_KEY_LENGTH MAX_KEY_LENGTH /* Max length in bytes */ /* defines used by heap-funktions */ diff --git a/mysql-test/r/ctype_utf8mb4_heap.result b/mysql-test/r/ctype_utf8mb4_heap.result index 3fcb2417897c..0a8e19fb67f9 100644 --- a/mysql-test/r/ctype_utf8mb4_heap.result +++ b/mysql-test/r/ctype_utf8mb4_heap.result @@ -1195,8 +1195,6 @@ CREATE TABLE t1 ( a varchar(255) NOT NULL default '', KEY a (a) ) ENGINE=heap DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci; -Warnings: -Warning 1071 Specified key was too long; max key length is 1000 bytes insert into t1 values (_utf8mb4 0xe880bd); insert into t1 values (_utf8mb4 0x5b); select hex(a) from t1; @@ -1239,8 +1237,6 @@ DROP TABLE IF EXISTS t1; Warnings: Note 1051 Unknown table 'test.t1' CREATE TABLE t1(a VARCHAR(255), KEY(a)) ENGINE=heap DEFAULT CHARSET=utf8mb4; -Warnings: -Warning 1071 Specified key was too long; max key length is 1000 bytes INSERT INTO t1 VALUES('uuABCDEFGHIGKLMNOPRSTUVWXYZ̈bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb'); INSERT INTO t1 VALUES('uu'); check table t1; diff --git a/mysql-test/r/percona_heap_bug_ps296.result b/mysql-test/r/percona_heap_bug_ps296.result new file mode 100644 index 000000000000..f2714c6f81a6 --- /dev/null +++ b/mysql-test/r/percona_heap_bug_ps296.result @@ -0,0 +1,76 @@ +PS-296: inconsistent maximum key lenghts caused a crash in the query optimizer +CREATE TABLE big_ok (id VARBINARY(3072) NOT NULL, PRIMARY KEY (id)) ENGINE=MEMORY; +CREATE TABLE big_ok2 (id VARBINARY(1072) NOT NULL, id2 VARBINARY(2000), PRIMARY KEY (id, id2)) ENGINE=MEMORY; +CREATE TABLE big_fails (id VARBINARY(3073) NOT NULL, PRIMARY KEY (id)) ENGINE=MEMORY; +ERROR 42000: Specified key was too long; max key length is 3072 bytes +CREATE TABLE big_fails (id VARBINARY(1073) NOT NULL, id2 VARBINARY(2000), PRIMARY KEY (id, id2)) ENGINE=MEMORY; +ERROR 42000: Specified key was too long; max key length is 3072 bytes +SET @@session.max_sort_length = 4000; +INSERT INTO big_ok VALUES (CONCAT(REPEAT('a', 3071), 'c')); +INSERT INTO big_ok VALUES (CONCAT(REPEAT('a', 3071), 'b')); +INSERT INTO big_ok VALUES (CONCAT(REPEAT('a', 3071), 'a')); +SELECT RIGHT(id, 5) FROM big_ok FORCE INDEX (PRIMARY) ORDER BY id ASC LIMIT 10; +RIGHT(id, 5) +aaaaa +aaaab +aaaac +SELECT RIGHT(id, 5) FROM big_ok IGNORE INDEX (PRIMARY) ORDER BY id ASC LIMIT 10; +RIGHT(id, 5) +aaaaa +aaaab +aaaac +INSERT INTO big_ok2 VALUES (REPEAT('a', 1072), CONCAT(REPEAT('a', 1999), 'c')); +INSERT INTO big_ok2 VALUES (REPEAT('a', 1072), CONCAT(REPEAT('a', 1999), 'b')); +INSERT INTO big_ok2 VALUES (REPEAT('a', 1072), CONCAT(REPEAT('a', 1999), 'a')); +SELECT RIGHT(id2, 5) FROM big_ok2 FORCE INDEX (PRIMARY) ORDER BY id ASC, id2 ASC LIMIT 10; +RIGHT(id2, 5) +aaaaa +aaaab +aaaac +SELECT RIGHT(id2, 5) FROM big_ok2 IGNORE INDEX (PRIMARY) ORDER BY id ASC, id2 ASC LIMIT 10; +RIGHT(id2, 5) +aaaaa +aaaab +aaaac +CREATE TABLE a (id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY); +INSERT INTO a () VALUES (); +CREATE PROCEDURE dowhile() +BEGIN +DECLARE v1 INT DEFAULT 1; +WHILE v1 < 15 DO +INSERT INTO a SELECT NULL FROM a; +SET v1 = v1 + 1; +END WHILE; +END; +| +CREATE TABLE big1 (id VARBINARY(3070) NOT NULL, PRIMARY KEY (id)) ENGINE=InnoDB; +CREATE TABLE big2 (id VARBINARY(3070) NOT NULL, PRIMARY KEY (id)) ENGINE=InnoDB; +CALL dowhile(); +INSERT INTO big1 SELECT * FROM a; +INSERT INTO big2 SELECT * FROM a; +SET session optimizer_switch='duplicateweedout=off,materialization=on'; +EXPLAIN SELECT * FROM big1 WHERE id IN (SELECT id FROM big2 IGNORE INDEX (PRIMARY)) ORDER BY id ASC LIMIT 10; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE NULL ALL NULL NULL NULL NULL NULL 100.00 Using temporary; Using filesort +1 SIMPLE big1 NULL eq_ref PRIMARY PRIMARY 3072 .id 1 100.00 Using index +2 MATERIALIZED big2 NULL ALL NULL NULL NULL NULL 16384 100.00 NULL +Warnings: +Note 1003 /* select#1 */ select `test`.`big1`.`id` AS `id` from `test`.`big1` semi join (`test`.`big2` IGNORE INDEX (PRIMARY)) where (`test`.`big1`.`id` = ``.`id`) order by `test`.`big1`.`id` limit 10 +SELECT * FROM big1 WHERE id IN (SELECT id FROM big2 IGNORE INDEX (PRIMARY)) ORDER BY id ASC LIMIT 10; +id +1 +10000 +10001 +10002 +10003 +10004 +10005 +10006 +10007 +10008 +DROP TABLE big_ok; +DROP TABLE big_ok2; +DROP TABLE big1; +DROP TABLE big2; +DROP TABLE a; +DROP PROCEDURE dowhile; diff --git a/mysql-test/r/subquery_mat.result b/mysql-test/r/subquery_mat.result index 169e504fb91f..fd60231bfbd7 100644 --- a/mysql-test/r/subquery_mat.result +++ b/mysql-test/r/subquery_mat.result @@ -2132,7 +2132,7 @@ id select_type table partitions type possible_keys key key_len ref rows filtered 1 PRIMARY t1 NULL ALL NULL NULL NULL NULL 32 100.00 Using where 2 SUBQUERY t2 NULL ALL NULL NULL NULL NULL 32 100.00 NULL Warnings: -Note 1003 /* select#1 */ select count(0) AS `COUNT(*)` from `test`.`t1` where (not((`test`.`t1`.`a`,`test`.`t1`.`a` in ( (/* select#2 */ select `test`.`t2`.`a` from `test`.`t1` `t2` where 1 having 1 ), (`test`.`t1`.`a` in on where ((`test`.`t1`.`a` = `materialized-subquery`.`a`))))))) +Note 1003 /* select#1 */ select count(0) AS `COUNT(*)` from `test`.`t1` where (not((`test`.`t1`.`a`,`test`.`t1`.`a` in ( (/* select#2 */ select `test`.`t2`.`a` from `test`.`t1` `t2` where 1 having 1 ), (`test`.`t1`.`a` in on where ((`test`.`t1`.`a` = `materialized-subquery`.`a`))))))) SELECT COUNT(*) FROM t1 WHERE t1.a NOT IN ( diff --git a/mysql-test/r/subquery_mat_all.result b/mysql-test/r/subquery_mat_all.result index 1181f4a0b4e5..7fb8b9eedc61 100644 --- a/mysql-test/r/subquery_mat_all.result +++ b/mysql-test/r/subquery_mat_all.result @@ -2133,7 +2133,7 @@ id select_type table partitions type possible_keys key key_len ref rows filtered 1 PRIMARY t1 NULL ALL NULL NULL NULL NULL 32 100.00 Using where 2 SUBQUERY t2 NULL ALL NULL NULL NULL NULL 32 100.00 NULL Warnings: -Note 1003 /* select#1 */ select count(0) AS `COUNT(*)` from `test`.`t1` where (not((`test`.`t1`.`a`,`test`.`t1`.`a` in ( (/* select#2 */ select `test`.`t2`.`a` from `test`.`t1` `t2` where 1 having 1 ), (`test`.`t1`.`a` in on where ((`test`.`t1`.`a` = `materialized-subquery`.`a`))))))) +Note 1003 /* select#1 */ select count(0) AS `COUNT(*)` from `test`.`t1` where (not((`test`.`t1`.`a`,`test`.`t1`.`a` in ( (/* select#2 */ select `test`.`t2`.`a` from `test`.`t1` `t2` where 1 having 1 ), (`test`.`t1`.`a` in on where ((`test`.`t1`.`a` = `materialized-subquery`.`a`))))))) SELECT COUNT(*) FROM t1 WHERE t1.a NOT IN ( diff --git a/mysql-test/t/percona_heap_bug_ps296.test b/mysql-test/t/percona_heap_bug_ps296.test new file mode 100644 index 000000000000..5864adc13839 --- /dev/null +++ b/mysql-test/t/percona_heap_bug_ps296.test @@ -0,0 +1,59 @@ +--echo PS-296: inconsistent maximum key lenghts caused a crash in the query optimizer +--source include/have_innodb.inc + +# Test that we can use long strings in memory tables +CREATE TABLE big_ok (id VARBINARY(3072) NOT NULL, PRIMARY KEY (id)) ENGINE=MEMORY; +CREATE TABLE big_ok2 (id VARBINARY(1072) NOT NULL, id2 VARBINARY(2000), PRIMARY KEY (id, id2)) ENGINE=MEMORY; +--error ER_TOO_LONG_KEY +CREATE TABLE big_fails (id VARBINARY(3073) NOT NULL, PRIMARY KEY (id)) ENGINE=MEMORY; +--error ER_TOO_LONG_KEY +CREATE TABLE big_fails (id VARBINARY(1073) NOT NULL, id2 VARBINARY(2000), PRIMARY KEY (id, id2)) ENGINE=MEMORY; + +SET @@session.max_sort_length = 4000; +INSERT INTO big_ok VALUES (CONCAT(REPEAT('a', 3071), 'c')); +INSERT INTO big_ok VALUES (CONCAT(REPEAT('a', 3071), 'b')); +INSERT INTO big_ok VALUES (CONCAT(REPEAT('a', 3071), 'a')); + +SELECT RIGHT(id, 5) FROM big_ok FORCE INDEX (PRIMARY) ORDER BY id ASC LIMIT 10; +SELECT RIGHT(id, 5) FROM big_ok IGNORE INDEX (PRIMARY) ORDER BY id ASC LIMIT 10; + +INSERT INTO big_ok2 VALUES (REPEAT('a', 1072), CONCAT(REPEAT('a', 1999), 'c')); +INSERT INTO big_ok2 VALUES (REPEAT('a', 1072), CONCAT(REPEAT('a', 1999), 'b')); +INSERT INTO big_ok2 VALUES (REPEAT('a', 1072), CONCAT(REPEAT('a', 1999), 'a')); + +SELECT RIGHT(id2, 5) FROM big_ok2 FORCE INDEX (PRIMARY) ORDER BY id ASC, id2 ASC LIMIT 10; +SELECT RIGHT(id2, 5) FROM big_ok2 IGNORE INDEX (PRIMARY) ORDER BY id ASC, id2 ASC LIMIT 10; + +# Test that materialized queries do not crash + +CREATE TABLE a (id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY); +INSERT INTO a () VALUES (); +delimiter |; +CREATE PROCEDURE dowhile() +BEGIN + DECLARE v1 INT DEFAULT 1; + WHILE v1 < 15 DO + INSERT INTO a SELECT NULL FROM a; + SET v1 = v1 + 1; + END WHILE; +END; +| +delimiter ;| +CREATE TABLE big1 (id VARBINARY(3070) NOT NULL, PRIMARY KEY (id)) ENGINE=InnoDB; +CREATE TABLE big2 (id VARBINARY(3070) NOT NULL, PRIMARY KEY (id)) ENGINE=InnoDB; +--disable_result_log +CALL dowhile(); +INSERT INTO big1 SELECT * FROM a; +INSERT INTO big2 SELECT * FROM a; +--enable_result_log + +SET session optimizer_switch='duplicateweedout=off,materialization=on'; +EXPLAIN SELECT * FROM big1 WHERE id IN (SELECT id FROM big2 IGNORE INDEX (PRIMARY)) ORDER BY id ASC LIMIT 10; +SELECT * FROM big1 WHERE id IN (SELECT id FROM big2 IGNORE INDEX (PRIMARY)) ORDER BY id ASC LIMIT 10; + +DROP TABLE big_ok; +DROP TABLE big_ok2; +DROP TABLE big1; +DROP TABLE big2; +DROP TABLE a; +DROP PROCEDURE dowhile; From 8be2eca6e13cd231af988541fbbb57cc16549b33 Mon Sep 17 00:00:00 2001 From: Dima Date: Wed, 14 Feb 2018 20:52:11 +0300 Subject: [PATCH 0570/1221] Release notes for PS 5.7.21-20-5.7 Also includes minimal fixes for DOC-695 (documenting server restart on detected data corruption), DOC-704 (version_suffix variable), and DOC-701 (keyring_vault documentation rewrite for the better style). --- doc/source/conf.py | 3 +- .../management/data_at_rest_encryption.rst | 51 ++++--- doc/source/myrocks/variables.rst | 22 +++ doc/source/ps-variables.rst | 10 ++ .../Percona-Server-5.7.21-20.rst | 126 ++++++++++++++++++ .../release-notes/release-notes_index.rst | 1 + doc/source/upstream-bug-fixes.rst | 30 +++++ 7 files changed, 224 insertions(+), 19 deletions(-) create mode 100644 doc/source/release-notes/Percona-Server-5.7.21-20.rst diff --git a/doc/source/conf.py b/doc/source/conf.py index 9697b7efbb59..ec245e03df06 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -54,7 +54,7 @@ # The short X.Y version. version = '5.7' # The full version, including alpha/beta/rc tags. -release = '5.7.20-19' +release = '5.7.21-20' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. @@ -145,6 +145,7 @@ 'tokubug': ('https://tokutek.atlassian.net/browse/DB-%s', '#'), 'backupbug': ('https://tokutek.atlassian.net/browse/BACKUP-%s', '#'), 'tdbbug': ('https://jira.percona.com/browse/TDB-%s', '#'), + 'psbug': ('https://jira.percona.com/browse/PS-%s', '#'), 'jirabug': ('https://jira.percona.com/browse/%s', '') } diff --git a/doc/source/management/data_at_rest_encryption.rst b/doc/source/management/data_at_rest_encryption.rst index 73ef1609a800..9faf3f227da4 100644 --- a/doc/source/management/data_at_rest_encryption.rst +++ b/doc/source/management/data_at_rest_encryption.rst @@ -175,27 +175,27 @@ credentials stored in the credentials file. Location of this file is specified in by :variable:`keyring_vault_config`. On successful initialization it retrieves keys signatures and stores them inside an in-memory hash map. -Configuration file should contain following information: +Configuration file should contain the following information: * ``vault_url`` - the address of the server where Vault is running. It can be a - named address – like in example or ip address. The important part is that - it should start with ``https://`` + named address, like one in the following example, or just an IP address. The + important part is that it should begin with ``https://``. * ``secret_mount_point`` - the name of the mount point where ``keyring_vault`` - will store keys + will store keys. -* ``token`` - the token that ``keyring_vault`` should use when connecting to - the Vault. When ``keyring_vault`` is to used only for transparent data - encryption and not for ``keyring_udf`` plugin, the token allows for storing - new keys in secret mount point. However if ``keyring_udf`` plugin is used - with ``keyring_vault`` plugin this token also allows removing keys from - vault. This is due to the fact that ``keyring_udf`` also supports - ``keyring_key_remove`` operation. +* ``token`` - a token generated by the Vault server, which ``keyring_vault`` + will further use when connecting to the Vault. At minimum, this token should + be allowed to store new keys in a secret mount point (when ``keyring_vault`` + is used only for transparent data encryption, and not for ``keyring_udf`` + plugin). If ``keyring_udf`` plugin is combined with ``keyring_vault``, this + token should be also allowed to remove keys from the Vault (for the + ``keyring_key_remove`` operation supported by the ``keyring_udf`` plugin). -* ``vault_ca [optional]`` - this variable needs to be specified only when +* ``vault_ca [optional]`` - this variable needs to be specified only when the Vault's CA certificate is not trusted by the machine that is going to connect to the Vault server. In this case this variable should point to CA - certificate that was used to signed Vault's certificates. + certificate that was used to sign Vault's certificates. An example of the configuration file looks like this: :: @@ -204,12 +204,13 @@ An example of the configuration file looks like this: :: token = 58a20c08-8001-fd5f-5192-7498a48eaf20 vault_ca = /data/keyring_vault_confs/vault_ca.crt -When a key is fetched from a ``keyring`` for the first time ``keyring_vault`` -goes to the Vault server and retrieves key's type and data. Next it queries -the Vault server for the key type and data and caches it locally. +When a key is fetched from a ``keyring`` for the first time the +``keyring_vault`` communicates with the Vault server, and retrieves the key +type and data. Next it queries the Vault server for the key type and data and +caches it locally. -Key deletion will permanently delete key from in-memory hash map and the Vault -server. +Key deletion will permanently delete key from the in-memory hash map and the +Vault server. .. note:: @@ -231,6 +232,20 @@ System Variables This variable is used to define the location of the :ref:`keyring_vault_plugin` configuration file. +.. variable:: keyring_vault_timeout + + :version 5.7.21-20: Implemented + :cli: ``--keyring-vault-timeout`` + :dyn: Yes + :scope: Global + :vartype: Numeric + :default: ``15`` + +This variable allows to set the duration in seconds for the Vault server +connection timeout. Default value is ``15``. Allowed range is from ``1`` +second to ``86400`` seconds (24 hours). The timeout can be also completely +disabled by setting this variable to ``0``. + Other reading ------------- diff --git a/doc/source/myrocks/variables.rst b/doc/source/myrocks/variables.rst index 5ebee48d5aba..c520547d952c 100644 --- a/doc/source/myrocks/variables.rst +++ b/doc/source/myrocks/variables.rst @@ -48,6 +48,10 @@ Also, all variables can exist in one or both of the following scopes: - Yes - No - Global + * - :variable:`rocksdb_allow_to_start_after_corruption` + - Yes + - No + - Global * - :variable:`rocksdb_allow_mmap_reads` - Yes - No @@ -577,6 +581,24 @@ Enabled by default. Specifies whether to allow multiple writers to update memtables in parallel. Disabled by default. +.. variable:: rocksdb_allow_to_start_after_corruption + + :version 5.7.21-20: Implemented + :cli: ``--rocksdb_allow_to_start_after_corruption`` + :dyn: No + :scope: Global + :vartype: Boolean + :default: ``OFF`` + +Specifies whether to allow server to restart once MyRocks reported data +corruption. Disabled by default. + +Once corruption is detected server writes marker file (named +ROCKSDB_CORRUPTED) in the data directory and aborts. If marker file exists, +then mysqld exits on startup with an error message. The restart failure will +continue until the problem is solved or until mysqld is started with this +variable turned on in the command line. + .. note:: Not all memtables support concurrent writes. .. variable:: rocksdb_allow_mmap_reads diff --git a/doc/source/ps-variables.rst b/doc/source/ps-variables.rst index c7cacf668c77..6ab62daa3d68 100644 --- a/doc/source/ps-variables.rst +++ b/doc/source/ps-variables.rst @@ -612,6 +612,16 @@ System Variables - Yes - Global - Yes + * - :variable:`version_comment` + - Yes + - Yes + - Global + - Yes + * - :variable:`version_suffix` + - Yes + - Yes + - Global + - Yes Status Variables ================ diff --git a/doc/source/release-notes/Percona-Server-5.7.21-20.rst b/doc/source/release-notes/Percona-Server-5.7.21-20.rst new file mode 100644 index 000000000000..50c002ad4158 --- /dev/null +++ b/doc/source/release-notes/Percona-Server-5.7.21-20.rst @@ -0,0 +1,126 @@ +.. rn:: 5.7.21-20 + +======================== +Percona Server 5.7.21-20 +======================== + +Percona is glad to announce the release of Percona Server 5.7.21-20 +on February 19, 2018. Downloads are available `here +`_ +and from the :doc:`Percona Software Repositories `. + +This release is based on `MySQL 5.7.21 +`_ +and includes all the bug fixes in it. +Percona Server 5.7.21-20 is now the current GA (Generally Available) release +in the 5.7 series. All software developed by Percona is open-source and free. + +New Features +============ + +* A new string variable :variable:`version_suffix` allows to change suffix + for the |Percona Server| version string returned by the read-only + :variable:`version` variable. Also :variable:`version_comment` is converted + from a global read-only to a global read-write variable. + +* A new :variable:`keyring_vault_timeout` variable allows to set the amount + of seconds for the Vault server connection timeout. Bug fixed :psbug:`298`. + +Bugs Fixed +========== + +* mysqld startup script was unable to detect jemalloc library location for + preloading, and that prevented starting |Percona Server| on systemd based + machines. Bugs fixed :psbug:`3784` and :psbug:`3791`. + +* There was a problem with fulltext search, which could find a word with + punctuation marks in natural language mode only, but not in boolean mode. + Bugs fixed :psbug:`258`, :psbug:`2501` (upstream :mysqlbug:`86164`). + +* Build errors were present on FreeBSD (caused by fixing the bug + :psbug:`255` in |Percona Server| :rn:`5.6.38-83.0`) and on MacOS (caused + by fixing the bug :psbug:`264` in |Percona Server| :rn:`5.7.20-19`). Bugs + fixed :psbug:`2284` and :psbug:`2286`. + +* A bunch of fixes where introduced to remove GCC 7 compilation warnings for + the |Percona Server| build. Bugs fixed :psbug:`3780` (upstream + :mysqlbug:`89420`, :mysqlbug:`89421`, and :mysqlbug:`89422`). + +* CMake error took place at compilation with bundled zlib. Bug fixed + :psbug:`302`. + +* A GCC 7 warning fix introduced regression in |Percona Server| that led to + a wrong SQL query built to access the remote server when Federated storage + engine was used. Bug fixed :psbug:`1134`. + +* It was possible to enable :variable:`encrypt_binlog` with no binary or relay + logging enabled. Bug fixed :psbug:`287`. + +* Long buffer wait times where occurring on busy servers in case of the + ``IMPORT TABLESPACE`` command. Bug fixed :psbug:`276`. + +* Server queries that contained JSON special characters and were logged by + :ref:`audit_log_plugin` in JSON format caused invalid output due to lack of + escaping. Bug fixed :psbug:`1115`. + +* Percona Server now uses *Travis CI* for additional tests. Bug fixed + :psbug:`3777`. + +Other bugs fixed: :psbug:`257`, :psbug:`264`, :psbug:`1090` +(upstream :mysqlbug:`78048`), :psbug:`1109`, :psbug:`1127`, :psbug:`2204`, +:psbug:`2414`, :psbug:`2415`, :psbug:`3767`, :psbug:`3794`, and :psbug:`3804` +(upstream :mysqlbug:`89598`). + +This release also contains fixes for the following CVE issues: CVE-2018-2565, +CVE-2018-2573, CVE-2018-2576, CVE-2018-2583, CVE-2018-2586, CVE-2018-2590, +CVE-2018-2612, CVE-2018-2600, CVE-2018-2622, CVE-2018-2640, CVE-2018-2645, +CVE-2018-2646, CVE-2018-2647, CVE-2018-2665, CVE-2018-2667, CVE-2018-2668, +CVE-2018-2696, CVE-2018-2703, CVE-2017-3737. + +MyRocks Changes +=============== + +* A new behavior makes |Percona Server| fail to restart on detected data + corruption; :variable:`rocksdb_allow_to_start_after_corruption` variable can + be passed to ``mysqld`` as a command line parameter to switch off this + restart failure. + +* A new cmake option ``ALLOW_NO_SSE42`` was introduced to allow MyRocks build + on hosts not supporting SSE 4.2 instructions set, which makes MyRocks usable + without FastCRC32-capable hardware. Bug fixed :jirabug:`MYR-207`. + +* :variable:`rocksdb_bytes_per_sync` and :variable:`rocksdb_wal_bytes_per_sync` + variables were turned into dynamic ones. + +* :variable:`rocksdb_flush_memtable_on_analyze` variable has been removed. + +* :variable:`rocksdb_concurrent_prepare` is now deprecated, as it has been + renamed in upstream to :variable:`rocksdb_two_write_queues`. + +* :variable:`rocksdb_row_lock_deadlocks` and + :variable:`rocksdb_row_lock_wait_timeouts` global status counters were added + to track the number of deadlocks and the number of row lock wait timeouts. + +* Creating table with string indexed column to non-binary collation now + generates warning about using inefficient collation instead of error. Bug + fixed :jirabug:`MYR-223`. + +TokuDB Changes +=============== + +* A memory leak was fixed in the PerconaFT library, caused by not destroying + PFS key objects on shutdown. Bug fixed :jirabug:`TDB-98`. + +* A clang-format configuration was added to PerconaFT and TokuDB. Bug fixed + :jirabug:`TDB-104`. + +* A data race was fixed in minicron utility of the PerconaFT. Bug fixed + :jirabug:`TDB-107`. + +* Row count and cardinality decrease to zero took place after long-running + ``REPLACE`` load. + +Other bugs fixed: :jirabug:`TDB-48`, :jirabug:`TDB-78`, :jirabug:`TDB-93`, +and :jirabug:`TDB-99`. + + diff --git a/doc/source/release-notes/release-notes_index.rst b/doc/source/release-notes/release-notes_index.rst index 2ffc5231733a..0a90dd227419 100644 --- a/doc/source/release-notes/release-notes_index.rst +++ b/doc/source/release-notes/release-notes_index.rst @@ -6,6 +6,7 @@ :maxdepth: 1 :glob: + Percona-Server-5.7.21-20 Percona-Server-5.7.20-19 Percona-Server-5.7.20-18 Percona-Server-5.7.19-17 diff --git a/doc/source/upstream-bug-fixes.rst b/doc/source/upstream-bug-fixes.rst index 9f5794e47a86..516230c2120b 100644 --- a/doc/source/upstream-bug-fixes.rst +++ b/doc/source/upstream-bug-fixes.rst @@ -4,6 +4,30 @@ List of upstream |MySQL| bugs fixed in |Percona Server| 5.7 ============================================================= ++-------------------------------------------------------------------------------------------------------------+ +|:Upstream bug: :mysqlbug:`89598` - plugin_mecab.cc:54:19: warning: unused variable 'bundle_mecab' | +|:Launchpad bug: :jirabug:`PS-3804` | +|:Upstream state: Verified (checked on 2018-02-15) | +|:Fix Released: :rn:`5.7.21-20` | +|:Upstream fix: N/A | ++-------------------------------------------------------------------------------------------------------------+ +|:Upstream bug: :mysqlbug:`89422` - Dangerous enum-ulong casts in sql_formatter_options | +|:Launchpad bug: :jirabug:`PS-3780` | +|:Upstream state: Verified (checked on 2018-02-15) | +|:Fix Released: :rn:`5.7.21-20` | +|:Upstream fix: N/A | ++-------------------------------------------------------------------------------------------------------------+ +|:Upstream bug: :mysqlbug:`89421` - Missing mutex_unlock in Slave_reporting_capability::va_report | +|:Launchpad bug: :jirabug:`PS-3780` | +|:Upstream state: Verified (checked on 2018-02-15) | +|:Fix Released: :rn:`5.7.21-20` | +|:Upstream fix: N/A | ++-------------------------------------------------------------------------------------------------------------+ +|:Upstream bug: :mysqlbug:`89420` - Enforcing C++03 mode in non debug builds | +|:Launchpad bug: :jirabug:`PS-3780` | +|:Upstream state: Open (checked on 2018-02-15) | +|:Fix Released: :rn:`5.7.21-20` | +|:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`88057` - Intermediary slave does not log master changes with... | |:Launchpad bug: :bug:`1722789` | @@ -29,6 +53,12 @@ |:Fix Released: :rn:`5.7.18-14` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ +|:Upstream bug: :mysqlbug:`86164` - Fulltext search can not find word which contains punctuation marks | +|:Launchpad bug: :bug:`1689268` | +|:Upstream state: Verified (checked on 2018-02-15) | +|:Fix Released: :rn:`5.7.21-20` | +|:Upstream fix: N/A | ++-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`86016` - Make MTR show core dump stacktraces from unit tests too | |:Launchpad bug: :bug:`1684601` | |:Upstream state: Verified (checked on 2017-12-14) | From bd99be2571a6d414868b638ccd1bb66b472a78f2 Mon Sep 17 00:00:00 2001 From: Dima Date: Mon, 19 Feb 2018 18:36:46 +0300 Subject: [PATCH 0571/1221] A small typo correction for the recently merged PS 5.7.21-20 release notes --- doc/source/release-notes/Percona-Server-5.7.21-20.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/source/release-notes/Percona-Server-5.7.21-20.rst b/doc/source/release-notes/Percona-Server-5.7.21-20.rst index 50c002ad4158..e99dc08a47f2 100644 --- a/doc/source/release-notes/Percona-Server-5.7.21-20.rst +++ b/doc/source/release-notes/Percona-Server-5.7.21-20.rst @@ -42,7 +42,7 @@ Bugs Fixed by fixing the bug :psbug:`264` in |Percona Server| :rn:`5.7.20-19`). Bugs fixed :psbug:`2284` and :psbug:`2286`. -* A bunch of fixes where introduced to remove GCC 7 compilation warnings for +* A bunch of fixes was introduced to remove GCC 7 compilation warnings for the |Percona Server| build. Bugs fixed :psbug:`3780` (upstream :mysqlbug:`89420`, :mysqlbug:`89421`, and :mysqlbug:`89422`). From fdb6ee54d0bf10f9989937b0f3d37ec976ac46b8 Mon Sep 17 00:00:00 2001 From: Ajo Robert Date: Mon, 19 Feb 2018 21:06:57 +0530 Subject: [PATCH 0572/1221] Bug#26881703 INCORRECT BEHAVIOUR OCCURS WHEN OPEN TABLE IS EXPANDING VIEW WITH SAME NAME Prepared stmt with CREATE TABLE ... SELECT leads to unexpected server exit when a view exists with the same name having a group by. This is because the view definition is expanded during open table and the resulting LEX object is attached to the select LEX of the CREATE TABLE ... SELECT. fix_fields() for this LEX will not be called as this is an invalid attachment for CREATE TABLE flow and results in unexpected server exit while traversing the item tree. Fix: Do not expand the view definition if the open table is invoked with TABLE_LIST::OPEN_FOR_CREATE set. Instead, create a dummy view object to let the executor know of the existence of a view. Change-Id: Ic2fd60300018aaf17039427991c1912991025604 --- sql/sql_base.cc | 56 ++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 46 insertions(+), 10 deletions(-) diff --git a/sql/sql_base.cc b/sql/sql_base.cc index 04b022a5c02e..6ce06343bd78 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -3409,18 +3409,54 @@ bool open_table(THD *thd, TABLE_LIST *table_list, Open_table_context *ot_ctx) goto err_unlock; } - /* Open view */ - bool view_open_result= open_and_read_view(thd, share, table_list); + /* + Read definition of the existing view, unless the open is for a table + to be created. This scenario will happen only when there exists a view and + the current CREATE TABLE request is with the same name. + */ + if (table_list->open_strategy != TABLE_LIST::OPEN_FOR_CREATE) + { + bool view_open_result= open_and_read_view(thd, share, table_list); - /* TODO: Don't free this */ - release_table_share(share); - mysql_mutex_unlock(&LOCK_open); + /* TODO: Don't free this */ + release_table_share(share); + mysql_mutex_unlock(&LOCK_open); - if (view_open_result) - DBUG_RETURN(true); + if (view_open_result) + DBUG_RETURN(true); - if (parse_view_definition(thd, table_list)) - DBUG_RETURN(true); + if (parse_view_definition(thd, table_list)) + DBUG_RETURN(true); + } + else + { + release_table_share(share); + mysql_mutex_unlock(&LOCK_open); + + /* + For SP and PS, LEX objects are created at the time of statement prepare. + And open_table() is called for every execute after that. Skip creation + of LEX objects if it is already present. + */ + if (!table_list->is_view()) + { + Prepared_stmt_arena_holder ps_arena_holder(thd); + + /* + Since we are skipping parse_view_definition(), which creates view LEX + object used by the executor and other parts of the code to detect the + presence of a view, a dummy LEX object needs to be created. + */ + table_list->set_view_query((LEX *) new(thd->mem_root) st_lex_local); + if (!table_list->is_view()) + DBUG_RETURN(true); + + table_list->view_db.str= table_list->db; + table_list->view_db.length= table_list->db_length; + table_list->view_name.str= table_list->table_name; + table_list->view_name.length= table_list->table_name_length; + } + } DBUG_ASSERT(table_list->is_view()); From f9f98f74481fa4cbdc7abaef455ca7e2d6d5e633 Mon Sep 17 00:00:00 2001 From: Nuno Carvalho Date: Mon, 19 Feb 2018 18:06:49 +0100 Subject: [PATCH 0573/1221] BUG#26985561: BACKPORT BUG#26277771 TO 5.7 - BUG#27016053: REGRESSION IN BINLOG_LOG_ROW INTRODUCED BY ADD_PKE This is backport of Bug#26277771: BAD WRITE SET TRACKING WITH UNIQUE KEY ON A DELETE FOLLOWED BY AN INSERT, which includes the optimizations present on BUG#27016053: REGRESSION IN BINLOG_LOG_ROW INTRODUCED BY ADD_PKE. Issue: ====== The Writesets generated for keys were not using collation into consideration, and because of that wrong last_committed and sequence_number were getting added to binary log and thus transactions were getting applied in wrong order by parallel applier on slave. Solution: ========= The fix uses make_sort_key to transform keys, with different charset and collation, into its binary image, suitable for sorting using binary comparison. Optimizations: ============== During detailed performance analysis it was discovered that there were non-optimized memory allocations and memory copy operations on the write-set extraction. In order to solve the performance regression, the following actions were made: 1) optimize memory allocation; 2) reduce memory copy operations; 3) only collect foreign key write-sets when them are not disabled; 4) do not collect and send duplicate write-sets through the network. --- ...pl_transaction_write_set_extraction.result | 64 +- .../rpl_transaction_write_set_extraction.test | 82 +- .../r/gr_certifier_garbage_collection.result | 4 +- .../mtr/r/gr_collations_key_conflict.result | 99 +++ ...y_on_referenced_unique_key_conflict.result | 191 +++++ .../r/gr_perfschema_group_member_stats.result | 2 +- .../t/gr_certifier_garbage_collection.test | 8 +- .../mtr/t/gr_collations_key_conflict.test | 51 ++ ...key_on_referenced_unique_key_conflict.test | 134 ++++ .../t/gr_perfschema_group_member_stats.test | 4 +- sql/handler.cc | 3 +- sql/rpl_transaction_write_set_ctx.cc | 46 +- sql/rpl_transaction_write_set_ctx.h | 8 +- sql/rpl_write_set_handler.cc | 710 ++++++++++++------ 14 files changed, 1144 insertions(+), 262 deletions(-) create mode 100644 rapid/plugin/group_replication/tests/mtr/r/gr_collations_key_conflict.result create mode 100644 rapid/plugin/group_replication/tests/mtr/r/gr_foreign_key_on_referenced_unique_key_conflict.result create mode 100644 rapid/plugin/group_replication/tests/mtr/t/gr_collations_key_conflict.test create mode 100644 rapid/plugin/group_replication/tests/mtr/t/gr_foreign_key_on_referenced_unique_key_conflict.test diff --git a/mysql-test/suite/rpl/r/rpl_transaction_write_set_extraction.result b/mysql-test/suite/rpl/r/rpl_transaction_write_set_extraction.result index 61fa23554888..6851c313364b 100644 --- a/mysql-test/suite/rpl/r/rpl_transaction_write_set_extraction.result +++ b/mysql-test/suite/rpl/r/rpl_transaction_write_set_extraction.result @@ -5,7 +5,7 @@ Note #### Storing MySQL user name or password information in the master info rep [connection master] include/assert.inc [The value for transaction_write_set_extraction shoudl be MURMUR32] CREATE TABLE t1 (a INT PRIMARY KEY); -SET @@GLOBAL.DEBUG= @debug_saved; +SET @debug_saved= @@GLOBAL.DEBUG; SET @@GLOBAL.DEBUG= '+d,PKE_assert_single_primary_key_generated_insert'; INSERT INTO t1 VALUES(1); SET @@GLOBAL.DEBUG= @debug_saved; @@ -15,6 +15,17 @@ SET @@GLOBAL.DEBUG= @debug_saved; include/rpl_sync.inc DROP TABLE t1; include/rpl_sync.inc +CREATE TABLE t1 (a BINARY(1) PRIMARY KEY); +SET @@GLOBAL.DEBUG= @debug_saved; +SET @@GLOBAL.DEBUG= '+d,PKE_assert_single_primary_key_generated_insert_collation'; +INSERT INTO t1 VALUES(1); +SET @@GLOBAL.DEBUG= @debug_saved; +SET @@GLOBAL.DEBUG= '+d,PKE_assert_single_primary_key_generated_update_collation'; +UPDATE t1 SET a=3 WHERE a=1; +SET @@GLOBAL.DEBUG= @debug_saved; +include/rpl_sync.inc +DROP TABLE t1; +include/rpl_sync.inc CREATE TABLE t1(a INT, b INT, PRIMARY KEY(a, b)); SET @@GLOBAL.DEBUG= @debug_saved; SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_primary_key_generated_insert'; @@ -26,6 +37,17 @@ SET @@GLOBAL.DEBUG= @debug_saved; include/rpl_sync.inc DROP TABLE t1; include/rpl_sync.inc +CREATE TABLE t1(a BINARY(1), b BINARY(1), PRIMARY KEY(a, b)); +SET @@GLOBAL.DEBUG= @debug_saved; +SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_primary_key_generated_insert_collation'; +INSERT INTO t1 VALUE(1, 2); +SET @@GLOBAL.DEBUG= @debug_saved; +SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_primary_key_generated_update_collation'; +UPDATE t1 SET a=3 WHERE a=1; +SET @@GLOBAL.DEBUG= @debug_saved; +include/rpl_sync.inc +DROP TABLE t1; +include/rpl_sync.inc CREATE TABLE t1 (c1 INT PRIMARY KEY, c2 INT NOT NULL UNIQUE, c3 INT NOT NULL UNIQUE); SET @@GLOBAL.DEBUG= @debug_saved; SET @@GLOBAL.DEBUG= '+d,PKE_assert_single_primary_unique_key_generated_insert'; @@ -36,6 +58,16 @@ UPDATE t1 SET c1=5 WHERE c1=1; include/rpl_sync.inc DROP TABLE t1; include/rpl_sync.inc +CREATE TABLE t1 (c1 BINARY(1) PRIMARY KEY, c2 BINARY(1) NOT NULL UNIQUE, c3 BINARY(1) NOT NULL UNIQUE); +SET @@GLOBAL.DEBUG= @debug_saved; +SET @@GLOBAL.DEBUG= '+d,PKE_assert_single_primary_unique_key_generated_insert_collation'; +INSERT INTO t1 VALUES (1, 2, 3); +SET @@GLOBAL.DEBUG= @debug_saved; +SET @@GLOBAL.DEBUG= '+d,PKE_assert_single_primary_unique_key_generated_update_collation'; +UPDATE t1 SET c1=5 WHERE c1=1; +include/rpl_sync.inc +DROP TABLE t1; +include/rpl_sync.inc CREATE TABLE t1 (a INT, d INT, b INT NOT NULL UNIQUE, c INT NOT NULL UNIQUE, PRIMARY KEY(a, d)); SET @@GLOBAL.DEBUG= @debug_saved; SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_primary_unique_key_generated_insert'; @@ -47,6 +79,17 @@ SET @@GLOBAL.DEBUG= @debug_saved; include/rpl_sync.inc DROP TABLE t1; include/rpl_sync.inc +CREATE TABLE t1 (a BINARY(1), d BINARY(1), b BINARY(1) NOT NULL UNIQUE, c BINARY(1) NOT NULL UNIQUE, PRIMARY KEY(a, d)); +SET @@GLOBAL.DEBUG= @debug_saved; +SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_primary_unique_key_generated_insert_collation'; +INSERT INTO t1 VALUES(1, 2, 3, 4); +SET @@GLOBAL.DEBUG= @debug_saved; +SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_primary_unique_key_generated_update_collation'; +UPDATE t1 SET a=5 WHERE a=1; +SET @@GLOBAL.DEBUG= @debug_saved; +include/rpl_sync.inc +DROP TABLE t1; +include/rpl_sync.inc CREATE TABLE t1 (a INT PRIMARY KEY); CREATE TABLE t2 (b INT PRIMARY KEY); CREATE TABLE t3 (c1 INT, c2 INT NOT NULL UNIQUE, PRIMARY KEY(c1, c2), FOREIGN KEY(c1) REFERENCES t1(a), FOREIGN KEY(c2) REFERENCES t2(b)); @@ -66,4 +109,23 @@ DROP TABLE t3; DROP TABLE t2; DROP TABLE t1; include/rpl_sync.inc +CREATE TABLE t1 (a BINARY(1) PRIMARY KEY); +CREATE TABLE t2 (b BINARY(1) PRIMARY KEY); +CREATE TABLE t3 (c1 BINARY(1), c2 BINARY(1) NOT NULL UNIQUE, PRIMARY KEY(c1, c2), FOREIGN KEY(c1) REFERENCES t1(a), FOREIGN KEY(c2) REFERENCES t2(b)); +INSERT INTO t1 VALUES (1); +INSERT INTO t2 VALUES (5); +SET @@GLOBAL.DEBUG= @debug_saved; +SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_foreign_key_generated_insert_collation'; +INSERT INTO t3 values(1,5); +SET @@GLOBAL.DEBUG= @debug_saved; +INSERT INTO t1 VALUES (3); +include/rpl_sync.inc +SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_foreign_key_generated_update_collation'; +UPDATE t3 SET c1=3 WHERE c1=1; +include/rpl_sync.inc +SET @@GLOBAL.DEBUG= @debug_saved; +DROP TABLE t3; +DROP TABLE t2; +DROP TABLE t1; +include/rpl_sync.inc include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_transaction_write_set_extraction.test b/mysql-test/suite/rpl/t/rpl_transaction_write_set_extraction.test index e1236fe8cc2a..c8b53b095a79 100644 --- a/mysql-test/suite/rpl/t/rpl_transaction_write_set_extraction.test +++ b/mysql-test/suite/rpl/t/rpl_transaction_write_set_extraction.test @@ -17,7 +17,7 @@ --connection master CREATE TABLE t1 (a INT PRIMARY KEY); -SET @@GLOBAL.DEBUG= @debug_saved; +SET @debug_saved= @@GLOBAL.DEBUG; SET @@GLOBAL.DEBUG= '+d,PKE_assert_single_primary_key_generated_insert'; INSERT INTO t1 VALUES(1); SET @@GLOBAL.DEBUG= @debug_saved; @@ -28,8 +28,23 @@ SET @@GLOBAL.DEBUG= @debug_saved; DROP TABLE t1; --source include/rpl_sync.inc +# tests both writeset algorithm (with and without collation) +--connection master +CREATE TABLE t1 (a BINARY(1) PRIMARY KEY); +SET @@GLOBAL.DEBUG= @debug_saved; +SET @@GLOBAL.DEBUG= '+d,PKE_assert_single_primary_key_generated_insert_collation'; +INSERT INTO t1 VALUES(1); +SET @@GLOBAL.DEBUG= @debug_saved; +SET @@GLOBAL.DEBUG= '+d,PKE_assert_single_primary_key_generated_update_collation'; +UPDATE t1 SET a=3 WHERE a=1; +SET @@GLOBAL.DEBUG= @debug_saved; +--source include/rpl_sync.inc +DROP TABLE t1; +--source include/rpl_sync.inc + # Table with multi values pimary key field with insert and update +--connection master CREATE TABLE t1(a INT, b INT, PRIMARY KEY(a, b)); SET @@GLOBAL.DEBUG= @debug_saved; SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_primary_key_generated_insert'; @@ -42,6 +57,20 @@ SET @@GLOBAL.DEBUG= @debug_saved; DROP TABLE t1; --source include/rpl_sync.inc +# tests both writeset algorithm (with and without collation) +--connection master +CREATE TABLE t1(a BINARY(1), b BINARY(1), PRIMARY KEY(a, b)); +SET @@GLOBAL.DEBUG= @debug_saved; +SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_primary_key_generated_insert_collation'; +INSERT INTO t1 VALUE(1, 2); +SET @@GLOBAL.DEBUG= @debug_saved; +SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_primary_key_generated_update_collation'; +UPDATE t1 SET a=3 WHERE a=1; +SET @@GLOBAL.DEBUG= @debug_saved; +--source include/rpl_sync.inc +DROP TABLE t1; +--source include/rpl_sync.inc + # Table with single primary key and multiple unique key with insert and # updates. @@ -57,9 +86,23 @@ UPDATE t1 SET c1=5 WHERE c1=1; DROP TABLE t1; --source include/rpl_sync.inc +# tests both writeset algorithm (with and without collation) +--connection master +CREATE TABLE t1 (c1 BINARY(1) PRIMARY KEY, c2 BINARY(1) NOT NULL UNIQUE, c3 BINARY(1) NOT NULL UNIQUE); +SET @@GLOBAL.DEBUG= @debug_saved; +SET @@GLOBAL.DEBUG= '+d,PKE_assert_single_primary_unique_key_generated_insert_collation'; +INSERT INTO t1 VALUES (1, 2, 3); +SET @@GLOBAL.DEBUG= @debug_saved; +SET @@GLOBAL.DEBUG= '+d,PKE_assert_single_primary_unique_key_generated_update_collation'; +UPDATE t1 SET c1=5 WHERE c1=1; +--source include/rpl_sync.inc +DROP TABLE t1; +--source include/rpl_sync.inc + # Table with multi valued primary key and multiple unique key with insert and # updates. +--connection master CREATE TABLE t1 (a INT, d INT, b INT NOT NULL UNIQUE, c INT NOT NULL UNIQUE, PRIMARY KEY(a, d)); SET @@GLOBAL.DEBUG= @debug_saved; SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_primary_unique_key_generated_insert'; @@ -72,6 +115,20 @@ SET @@GLOBAL.DEBUG= @debug_saved; DROP TABLE t1; --source include/rpl_sync.inc +# tests both writeset algorithm (with and without collation) +--connection master +CREATE TABLE t1 (a BINARY(1), d BINARY(1), b BINARY(1) NOT NULL UNIQUE, c BINARY(1) NOT NULL UNIQUE, PRIMARY KEY(a, d)); +SET @@GLOBAL.DEBUG= @debug_saved; +SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_primary_unique_key_generated_insert_collation'; +INSERT INTO t1 VALUES(1, 2, 3, 4); +SET @@GLOBAL.DEBUG= @debug_saved; +SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_primary_unique_key_generated_update_collation'; +UPDATE t1 SET a=5 WHERE a=1; +SET @@GLOBAL.DEBUG= @debug_saved; +--source include/rpl_sync.inc +DROP TABLE t1; +--source include/rpl_sync.inc + # Table with Primary Key + Unique Key and Foreign Key --connection master @@ -97,4 +154,27 @@ DROP TABLE t2; DROP TABLE t1; --source include/rpl_sync.inc +# tests both writeset algorithm (with and without collation) +--connection master +CREATE TABLE t1 (a BINARY(1) PRIMARY KEY); +CREATE TABLE t2 (b BINARY(1) PRIMARY KEY); +CREATE TABLE t3 (c1 BINARY(1), c2 BINARY(1) NOT NULL UNIQUE, PRIMARY KEY(c1, c2), FOREIGN KEY(c1) REFERENCES t1(a), FOREIGN KEY(c2) REFERENCES t2(b)); + +INSERT INTO t1 VALUES (1); +INSERT INTO t2 VALUES (5); +SET @@GLOBAL.DEBUG= @debug_saved; +SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_foreign_key_generated_insert_collation'; +INSERT INTO t3 values(1,5); +SET @@GLOBAL.DEBUG= @debug_saved; +INSERT INTO t1 VALUES (3); +--source include/rpl_sync.inc +SET @@GLOBAL.DEBUG= '+d,PKE_assert_multi_foreign_key_generated_update_collation'; +UPDATE t3 SET c1=3 WHERE c1=1; +--source include/rpl_sync.inc +SET @@GLOBAL.DEBUG= @debug_saved; +DROP TABLE t3; +DROP TABLE t2; +DROP TABLE t1; +--source include/rpl_sync.inc + --source include/rpl_end.inc diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_certifier_garbage_collection.result b/rapid/plugin/group_replication/tests/mtr/r/gr_certifier_garbage_collection.result index 8e141900de40..e236d631b2c1 100644 --- a/rapid/plugin/group_replication/tests/mtr/r/gr_certifier_garbage_collection.result +++ b/rapid/plugin/group_replication/tests/mtr/r/gr_certifier_garbage_collection.result @@ -38,9 +38,9 @@ UPDATE t1 SET c1=2 WHERE c1=1; # After garbage collection certification info will contain: # WS: t1.c1=1 -> 8a94f357-aab4-11df-86ab-c80aa9422222:1-4 # WS: t1.c1=2 -> 8a94f357-aab4-11df-86ab-c80aa9422222:1-4 -include/assert.inc ['Count_transactions_rows_validating must be 2'] +include/assert.inc ['Count_transactions_rows_validating must be 4'] include/assert.inc ['Transactions_committed_all_members must be equal to 8a94f357-aab4-11df-86ab-c80aa9422222:1-4'] -include/assert.inc ['Count_transactions_rows_validating must be 2'] +include/assert.inc ['Count_transactions_rows_validating must be 4'] include/assert.inc ['Transactions_committed_all_members must be equal to 8a94f357-aab4-11df-86ab-c80aa9422222:1-4'] ############################################################ diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_collations_key_conflict.result b/rapid/plugin/group_replication/tests/mtr/r/gr_collations_key_conflict.result new file mode 100644 index 000000000000..8f5ab65ad471 --- /dev/null +++ b/rapid/plugin/group_replication/tests/mtr/r/gr_collations_key_conflict.result @@ -0,0 +1,99 @@ +include/group_replication.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection server1] + +########################### +# Create a table on server1 +[connection server1] +CREATE TABLE t1 ( +u_str VARCHAR(32) NOT NULL, +value VARCHAR(32) NOT NULL, +PRIMARY KEY (u_str) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +include/rpl_sync.inc + +###################################################################### +# Execute in concurrency transaction with equivalent keys under latin1 + +############################################################ +# 0. Initial setup and checks. +[connection server_1] +SET SESSION sql_log_bin= 0; +include/gtid_utils.inc +SET SESSION sql_log_bin= 1; +include/gtid_step_reset.inc + +############################################################ +# 1. Set a debug sync before broadcast message to group on +# connection local_server_connection1. +[connection server_1] +SET @debug_save= @@GLOBAL.DEBUG; +SET @@GLOBAL.DEBUG='d,group_replication_before_message_broadcast'; + +##################################################################### +# 2. Commit local_transaction that will be blocked before broadcast. +BEGIN; +INSERT INTO t1 (u_str, value) VALUES ('', "A value");; +COMMIT; + +############################################################ +# 3. Wait until local transaction reaches the +# group_replication_before_message_broadcast debug sync point. +[connection server1] + +############################################################ +# 4. Execute a transaction on remote server, that will reach first +# certification, since transaction on the local server +# is blocked before broadcast. +[connection server2] +BEGIN; +INSERT INTO t1 (u_str, value) VALUES ('', "Another value");; +COMMIT; + +############################################################ +# 5. Signal the waiting thread on local server to resume the +# transaction. +[connection server1] +SET DEBUG_SYNC='now SIGNAL waiting'; +SET @@GLOBAL.DEBUG= @debug_save; + +############################################################ +# 6. Wait for remote transaction to be executed succesfully +on local server. +[connection server2] +include/sync_slave_sql_with_master.inc +############################################################ +# 7. If the test case is conflict scenario, local transaction +# will end up in an error stating that it was aborted, +# since transactions are conflicting and transaction on +# remote server was ordered first. If the test case is +# is positive scenario, no error will be seen here. +[connection server_1] +ERROR HY000: Plugin instructed the server to rollback the current transaction. +[connection server_1] +SET @@GLOBAL.DEBUG=@debug_save; +############################################################ +# 8. Sync everything +include/rpl_sync.inc +############################################################ +# 9. Assert that number of certified transactions are the +# expected ones. +include/assert.inc [The value of Count_Transactions_Checked should be 3 after starting group replication] +include/assert.inc [The value of Count_Conflicts_Detected should be 1 after starting group replication] +############################################################ +# 10. Assert that GTID is increased as expected +include/gtid_step_assert.inc [count=1, only_count=1] +[connection server_1] +SET SESSION sql_log_bin= 0; +include/gtid_utils_end.inc +SET SESSION sql_log_bin= 1; +############################################################ +# 11. Cleanup (restore the connection back to original) +[connection server1] + +########### +# Clean up. +DROP TABLE t1; +include/group_replication_end.inc diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_foreign_key_on_referenced_unique_key_conflict.result b/rapid/plugin/group_replication/tests/mtr/r/gr_foreign_key_on_referenced_unique_key_conflict.result new file mode 100644 index 000000000000..e3e272612678 --- /dev/null +++ b/rapid/plugin/group_replication/tests/mtr/r/gr_foreign_key_on_referenced_unique_key_conflict.result @@ -0,0 +1,191 @@ +include/group_replication.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection server1] + +############################################################ +# Create a table on server1. +[connection server1] +CREATE TABLE t1 (c1 INT PRIMARY KEY, c2 INT, UNIQUE KEY(c2)); +CREATE TABLE t2 (x1 INT PRIMARY KEY, x2 INT, FOREIGN KEY (x2) REFERENCES t1(c2)); +INSERT INTO t1 VALUES (1,1); +include/rpl_sync.inc + +############################################################ +# 0. Initial setup and checks. +[connection server_1] +SET SESSION sql_log_bin= 0; +include/gtid_utils.inc +SET SESSION sql_log_bin= 1; +include/gtid_step_reset.inc + +############################################################ +# 1. Set a debug sync before broadcast message to group on +# connection local_server_connection1. +[connection server_1] +SET @debug_save= @@GLOBAL.DEBUG; +SET @@GLOBAL.DEBUG='d,group_replication_before_message_broadcast'; + +##################################################################### +# 2. Commit local_transaction that will be blocked before broadcast. +BEGIN; +DELETE FROM t1 WHERE c1=1; +COMMIT; + +############################################################ +# 3. Wait until local transaction reaches the +# group_replication_before_message_broadcast debug sync point. +[connection server1] + +############################################################ +# 4. Execute a transaction on remote server, that will reach first +# certification, since transaction on the local server +# is blocked before broadcast. +[connection server2] +BEGIN; +INSERT INTO t2 VALUES (1,1); +COMMIT; + +############################################################ +# 5. Signal the waiting thread on local server to resume the +# transaction. +[connection server1] +SET DEBUG_SYNC='now SIGNAL waiting'; +SET @@GLOBAL.DEBUG= @debug_save; + +############################################################ +# 6. Wait for remote transaction to be executed succesfully +on local server. +[connection server2] +include/sync_slave_sql_with_master.inc +############################################################ +# 7. If the test case is conflict scenario, local transaction +# will end up in an error stating that it was aborted, +# since transactions are conflicting and transaction on +# remote server was ordered first. If the test case is +# is positive scenario, no error will be seen here. +[connection server_1] +ERROR HY000: Plugin instructed the server to rollback the current transaction. +[connection server_1] +SET @@GLOBAL.DEBUG=@debug_save; +############################################################ +# 8. Sync everything +include/rpl_sync.inc +############################################################ +# 9. Assert that number of certified transactions are the +# expected ones. +include/assert.inc [The value of Count_Transactions_Checked should be 5 after starting group replication] +include/assert.inc [The value of Count_Conflicts_Detected should be 1 after starting group replication] +############################################################ +# 10. Assert that GTID is increased as expected +include/gtid_step_assert.inc [count=1, only_count=1] +[connection server_1] +SET SESSION sql_log_bin= 0; +include/gtid_utils_end.inc +SET SESSION sql_log_bin= 1; +############################################################ +# 11. Cleanup (restore the connection back to original) +[connection server1] + +############################################################ +# Checking the positive case in which there is no conflict. +############################################################ + +INSERT INTO t1 VALUES (2,2); +INSERT INTO t1 VALUES (3,3); +include/rpl_sync.inc + +############################################################ +# 0. Initial setup and checks. +[connection server_1] +SET SESSION sql_log_bin= 0; +include/gtid_utils.inc +SET SESSION sql_log_bin= 1; +include/gtid_step_reset.inc + +############################################################ +# 1. Set a debug sync before broadcast message to group on +# connection local_server_connection1. +[connection server_1] +SET @debug_save= @@GLOBAL.DEBUG; +SET @@GLOBAL.DEBUG='d,group_replication_before_message_broadcast'; + +##################################################################### +# 2. Commit local_transaction that will be blocked before broadcast. +BEGIN; +DELETE FROM t1 WHERE c1=2; +COMMIT; + +############################################################ +# 3. Wait until local transaction reaches the +# group_replication_before_message_broadcast debug sync point. +[connection server1] + +############################################################ +# 4. Execute a transaction on remote server, that will reach first +# certification, since transaction on the local server +# is blocked before broadcast. +[connection server2] +BEGIN; +INSERT INTO t2 VALUES (3,3); +COMMIT; + +############################################################ +# 5. Signal the waiting thread on local server to resume the +# transaction. +[connection server1] +SET DEBUG_SYNC='now SIGNAL waiting'; +SET @@GLOBAL.DEBUG= @debug_save; + +############################################################ +# 6. Wait for remote transaction to be executed succesfully +on local server. +[connection server2] +include/sync_slave_sql_with_master.inc +############################################################ +# 7. If the test case is conflict scenario, local transaction +# will end up in an error stating that it was aborted, +# since transactions are conflicting and transaction on +# remote server was ordered first. If the test case is +# is positive scenario, no error will be seen here. +[connection server_1] +[connection server_1] +SET @@GLOBAL.DEBUG=@debug_save; +############################################################ +# 8. Sync everything +include/rpl_sync.inc +############################################################ +# 9. Assert that number of certified transactions are the +# expected ones. +include/assert.inc [The value of Count_Transactions_Checked should be 9 after starting group replication] +include/assert.inc [The value of Count_Conflicts_Detected should be 1 after starting group replication] +############################################################ +# 10. Assert that GTID is increased as expected +include/gtid_step_assert.inc [count=2, only_count=1] +[connection server_1] +SET SESSION sql_log_bin= 0; +include/gtid_utils_end.inc +SET SESSION sql_log_bin= 1; +############################################################ +# 11. Cleanup (restore the connection back to original) +[connection server1] + +############################################################ +# Check the data sanity +[connection server1] +include/rpl_sync.inc +include/assert.inc [Table t1 will contain tuple (1,1)] +include/assert.inc [Table t1 will contain tuple (3,3)] +include/assert.inc [Table t1 will contain 2 rows] +include/assert.inc [Table t2 will contain tuple (1,1)] +include/assert.inc [Table t2 will contain tuple (3,3)] +include/assert.inc [Table t2 will contain 2 rows] +include/diff_tables.inc [server1:test.t1, server2:test.t1] +include/diff_tables.inc [server1:test.t2, server2:test.t2] + +############################################################ +# Clean up. +DROP TABLE t2; +DROP TABLE t1; +include/group_replication_end.inc diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_perfschema_group_member_stats.result b/rapid/plugin/group_replication/tests/mtr/r/gr_perfschema_group_member_stats.result index 7f39b0d6f58a..b90552faeaaa 100644 --- a/rapid/plugin/group_replication/tests/mtr/r/gr_perfschema_group_member_stats.result +++ b/rapid/plugin/group_replication/tests/mtr/r/gr_perfschema_group_member_stats.result @@ -53,7 +53,7 @@ server1 include/assert.inc [The value of member_id should be equal to server UUID after starting group replication] include/assert.inc [The value of Count_Transactions_checked should be 6 after starting group replication] include/assert.inc [The value of Count_conflicts_detected should be 0 after starting group replication] -include/assert.inc [The value of Count_Transactions_rows_validating should be 2 after starting group replication] +include/assert.inc [The value of Count_Transactions_rows_validating should be 4 after starting group replication] include/assert.inc [The value of Transactions_committed_all_members should have server 1 GTIDs before server2 start] include/assert.inc [The value of Last_Conflict_free_transaction should be the gtid of the last applied transaction.] SET SESSION sql_log_bin= 0; diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_certifier_garbage_collection.test b/rapid/plugin/group_replication/tests/mtr/t/gr_certifier_garbage_collection.test index b29b629663bc..af2b1ec49d3c 100644 --- a/rapid/plugin/group_replication/tests/mtr/t/gr_certifier_garbage_collection.test +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_certifier_garbage_collection.test @@ -104,8 +104,8 @@ UPDATE t1 SET c1=2 WHERE c1=1; --connection server1 --let $count_transactions_validating= query_get_value(SELECT Count_transactions_rows_validating from performance_schema.replication_group_member_stats, Count_transactions_rows_validating, 1) ---let $assert_text= 'Count_transactions_rows_validating must be 2' ---let $assert_cond= $count_transactions_validating = 2 +--let $assert_text= 'Count_transactions_rows_validating must be 4' +--let $assert_cond= $count_transactions_validating = 4 --source include/assert.inc --let $transactions_committed_all_members= query_get_value(SELECT Transactions_committed_all_members from performance_schema.replication_group_member_stats, Transactions_committed_all_members, 1) @@ -115,8 +115,8 @@ UPDATE t1 SET c1=2 WHERE c1=1; --connection server2 --let $count_transactions_validating= query_get_value(SELECT Count_transactions_rows_validating from performance_schema.replication_group_member_stats, Count_transactions_rows_validating, 1) ---let $assert_text= 'Count_transactions_rows_validating must be 2' ---let $assert_cond= $count_transactions_validating = 2 +--let $assert_text= 'Count_transactions_rows_validating must be 4' +--let $assert_cond= $count_transactions_validating = 4 --source include/assert.inc --let $transactions_committed_all_members= query_get_value(SELECT Transactions_committed_all_members from performance_schema.replication_group_member_stats, Transactions_committed_all_members, 1) diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_collations_key_conflict.test b/rapid/plugin/group_replication/tests/mtr/t/gr_collations_key_conflict.test new file mode 100644 index 000000000000..9be9f37a98d3 --- /dev/null +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_collations_key_conflict.test @@ -0,0 +1,51 @@ +############################################################################## +# This test checks that keys that are considered the same under a collation do +# not pass certification as being different keys. +# +# The default mysql-5.7 collation is latin1, so gr_collations_key_conflict +# test and result files, which were using utf8 encoding, also have been +# converted to latin1 collation, to avoid changing the default server collation +# value. +# +# 0. 2 Server with running GR +# 1. Create a table with collation latin1 +# 2. Execute in concurrency transaction with equivalent keys under latin1 +# 3. Cleanup +############################################################################## + +--source include/have_debug_sync.inc +--source ../inc/have_group_replication_plugin.inc +--source ../inc/group_replication.inc + +--echo +--echo ########################### +--echo # Create a table on server1 +--let $rpl_connection_name= server1 +--source include/rpl_connection.inc + +CREATE TABLE t1 ( + u_str VARCHAR(32) NOT NULL, + value VARCHAR(32) NOT NULL, + PRIMARY KEY (u_str) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +--source include/rpl_sync.inc + +--echo +--echo ###################################################################### +--echo # Execute in concurrency transaction with equivalent keys under latin1 + +--let $local_server_connection1=server_1 +--let $local_server_connection2=server1 +--let $remote_server_connection=server2 +--let $local_transaction= INSERT INTO t1 (u_str, value) VALUES ('', "A value"); +--let $remote_transaction=INSERT INTO t1 (u_str, value) VALUES ('', "Another value"); +--let $conflict_test=1 +--source ../inc/gr_parallel_local_and_remote_transactions.inc + +--echo +--echo ########### +--echo # Clean up. +DROP TABLE t1; + +--source ../inc/group_replication_end.inc diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_foreign_key_on_referenced_unique_key_conflict.test b/rapid/plugin/group_replication/tests/mtr/t/gr_foreign_key_on_referenced_unique_key_conflict.test new file mode 100644 index 000000000000..b7ae4ace14cb --- /dev/null +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_foreign_key_on_referenced_unique_key_conflict.test @@ -0,0 +1,134 @@ +################################################################################ +# Test case to verify that concurrent transactions with intersecting +# write set, on foreign key that references a unique key, do conflict. +# +# Test: +# 0. The test requires two servers: M1 and M2. +# 1. With both members ONLINE. Create a table on M1. +# 2. Set a debug sync before broadcast message to group on M1. Commit a +# transaction that will be blocked before broadcast. +# 3. Wait until M1 reaches the debug sync point. +# 4. Execute a transaction on M2, that will reach first certification, since M1 +# is blocked before broadcast. +# 5. Signal the waiting thread on M1 to resume. +# 6. It will end up in an error stating that it was aborted, since transactions +# are conflicting and M2 was ordered first. +# 7. Assert that number of certified transactions are the expected ones. +# +# Checking the positive case in which there is no conflict: +# 8. Set a debug sync before broadcast message to group on M1. Commit a +# transaction that will be block before broadcast. +# 9. Wait until M1 reaches the debug sync point. +# 10. Execute a transaction on M2, that will reach first certification, since M1 +# is blocked before broadcast. +# 11. Signal the waiting thread on M1 to resume. +# 12. It will execute without error as the conflicting transactions have been +# removed. +# 13. Assert that number of certified transactions are the expected ones. +# 14. Clean up. +################################################################################ + +--source include/have_debug_sync.inc +--source ../inc/have_group_replication_plugin.inc +--source ../inc/group_replication.inc + +--echo +--echo ############################################################ +--echo # Create a table on server1. +--let $rpl_connection_name= server1 +--source include/rpl_connection.inc +CREATE TABLE t1 (c1 INT PRIMARY KEY, c2 INT, UNIQUE KEY(c2)); +CREATE TABLE t2 (x1 INT PRIMARY KEY, x2 INT, FOREIGN KEY (x2) REFERENCES t1(c2)); +INSERT INTO t1 VALUES (1,1); +--source include/rpl_sync.inc + +# +# DELETE: +# WS= {t1.c1=1, t1.c2=1} +# +# INSERT: +# WS= {t2.x1=1. t1.c2=1} +# +# Outcome: T1 must abort, T2 must commit. +# + +--let $local_server_connection1=server_1 +--let $local_server_connection2=server1 +--let $remote_server_connection=server2 +--let $local_transaction= DELETE FROM t1 WHERE c1=1 +--let $remote_transaction=INSERT INTO t2 VALUES (1,1) +--let $conflict_test=1 +--source ../inc/gr_parallel_local_and_remote_transactions.inc + +--echo +--echo ############################################################ +--echo # Checking the positive case in which there is no conflict. +--echo ############################################################ +--echo +INSERT INTO t1 VALUES (2,2); +INSERT INTO t1 VALUES (3,3); +--source include/rpl_sync.inc + +# +# DELETE: +# WS= {t1.c1=2, t1.c2=2} +# +# INSERT: +# WS= {t2.x1=3. t1.c2=3} +# +# Outcome: T1 and T2 must commit. +# + +--let $local_server_connection1=server_1 +--let $local_server_connection2=server1 +--let $remote_server_connection=server2 +--let $local_transaction= DELETE FROM t1 WHERE c1=2 +--let $remote_transaction=INSERT INTO t2 VALUES (3,3) +--let $conflict_test=0 +--source ../inc/gr_parallel_local_and_remote_transactions.inc + +--echo +--echo ############################################################ +--echo # Check the data sanity +--let $rpl_connection_name= server1 +--source include/rpl_connection.inc +--source include/rpl_sync.inc + +--let $assert_text= Table t1 will contain tuple (1,1) +--let $assert_cond= "[SELECT COUNT(*) AS count FROM t1 WHERE c1 = 1 AND c2 = 1, count, 1]" = "1" +--source include/assert.inc + +--let $assert_text= Table t1 will contain tuple (3,3) +--let $assert_cond= "[SELECT COUNT(*) AS count FROM t1 WHERE c1 = 3 AND c2 = 3, count, 1]" = "1" +--source include/assert.inc + +--let $assert_text= Table t1 will contain 2 rows +--let $assert_cond= "[SELECT COUNT(*) FROM t1]" = "2" +--source include/assert.inc + +--let $assert_text= Table t2 will contain tuple (1,1) +--let $assert_cond= "[SELECT COUNT(*) AS count FROM t2 WHERE x1 = 1 AND x2 = 1, count, 1]" = "1" +--source include/assert.inc + +--let $assert_text= Table t2 will contain tuple (3,3) +--let $assert_cond= "[SELECT COUNT(*) AS count FROM t2 WHERE x1 = 3 AND x2 = 3, count, 1]" = "1" +--source include/assert.inc + +--let $assert_text= Table t2 will contain 2 rows +--let $assert_cond= "[SELECT COUNT(*) FROM t2]" = "2" +--source include/assert.inc + +--let $diff_tables= server1:test.t1, server2:test.t1 +--source include/diff_tables.inc + +--let $diff_tables= server1:test.t2, server2:test.t2 +--source include/diff_tables.inc + + +--echo +--echo ############################################################ +--echo # Clean up. +DROP TABLE t2; +DROP TABLE t1; + +--source ../inc/group_replication_end.inc diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_perfschema_group_member_stats.test b/rapid/plugin/group_replication/tests/mtr/t/gr_perfschema_group_member_stats.test index 1743f9463f39..54ab4499cf1a 100644 --- a/rapid/plugin/group_replication/tests/mtr/t/gr_perfschema_group_member_stats.test +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_perfschema_group_member_stats.test @@ -182,8 +182,8 @@ START SLAVE SQL_THREAD FOR CHANNEL "group_replication_applier"; --source include/assert.inc --let $certification_db_size= query_get_value(SELECT Count_Transactions_rows_validating from performance_schema.replication_group_member_stats, Count_Transactions_rows_validating, 1) ---let $assert_text= The value of Count_Transactions_rows_validating should be 2 after starting group replication ---let $assert_cond= "$certification_db_size" = 2 +--let $assert_text= The value of Count_Transactions_rows_validating should be 4 after starting group replication +--let $assert_cond= "$certification_db_size" = 4 --source include/assert.inc --let $stable_set= query_get_value(SELECT Transactions_committed_all_members from performance_schema.replication_group_member_stats, Transactions_committed_all_members, 1) diff --git a/sql/handler.cc b/sql/handler.cc index 4c57bf54298b..65cb65903f32 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -7815,7 +7815,6 @@ int binlog_log_row(TABLE* table, { if (thd->variables.transaction_write_set_extraction != HASH_ALGORITHM_OFF) { - bitmap_set_all(table->read_set); if (before_record && after_record) { size_t length= table->s->reclength; diff --git a/sql/rpl_transaction_write_set_ctx.cc b/sql/rpl_transaction_write_set_ctx.cc index 8ad77fc0de29..617d148946ea 100644 --- a/sql/rpl_transaction_write_set_ctx.cc +++ b/sql/rpl_transaction_write_set_ctx.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -25,26 +25,35 @@ Rpl_transaction_write_set_ctx::Rpl_transaction_write_set_ctx() { DBUG_ENTER("Rpl_transaction_write_set_ctx::Rpl_transaction_write_set_ctx"); + /* + In order to speed-up small transactions write-set extraction, + we preallocate 24 elements. + 24 is a sufficient number to hold write-sets for single + statement transactions, even on tables with foreign keys. + */ + write_set.reserve(24); DBUG_VOID_RETURN; } void Rpl_transaction_write_set_ctx::add_write_set(uint64 hash) { - DBUG_ENTER("Transaction_context_log_event::add_write_set"); + DBUG_ENTER("Rpl_transaction_write_set_ctx::add_write_set"); write_set.push_back(hash); + write_set_unique.insert(hash); DBUG_VOID_RETURN; } -std::vector* Rpl_transaction_write_set_ctx::get_write_set() +std::set* Rpl_transaction_write_set_ctx::get_write_set() { - DBUG_ENTER("Transaction_context_log_event::add_write_set"); - DBUG_RETURN(&write_set); + DBUG_ENTER("Rpl_transaction_write_set_ctx::get_write_set"); + DBUG_RETURN(&write_set_unique); } void Rpl_transaction_write_set_ctx::clear_write_set() { - DBUG_ENTER("Transaction_context_log_event::clear_write_set"); + DBUG_ENTER("Rpl_transaction_write_set_ctx::clear_write_set"); write_set.clear(); + write_set_unique.clear(); savepoint.clear(); savepoint_list.clear(); DBUG_VOID_RETURN; @@ -65,9 +74,9 @@ Transaction_write_set* get_transaction_write_set(unsigned long m_thread_id) thd= Global_THD_manager::get_instance()->find_thd(&find_thd_with_id); if (thd) { - Rpl_transaction_write_set_ctx *transaction_write_set_ctx= - thd->get_transaction()->get_transaction_write_set_ctx(); - int write_set_size= transaction_write_set_ctx->get_write_set()->size(); + std::set *write_set= thd->get_transaction() + ->get_transaction_write_set_ctx()->get_write_set(); + unsigned long write_set_size= write_set->size(); if (write_set_size == 0) { mysql_mutex_unlock(&thd->LOCK_thd_data); @@ -84,8 +93,8 @@ Transaction_write_set* get_transaction_write_set(unsigned long m_thread_id) sizeof(unsigned long long), MYF(0)); int result_set_index= 0; - for (std::vector::iterator it= transaction_write_set_ctx->get_write_set()->begin(); - it!=transaction_write_set_ctx->get_write_set()->end(); + for (std::set::iterator it= write_set->begin(); + it != write_set->end(); ++it) { uint64 temp= *it; @@ -105,6 +114,7 @@ void Rpl_transaction_write_set_ctx::add_savepoint(char* name) { DBUG_ASSERT(savepoint.size() == 0); DBUG_ASSERT(write_set.size() == 0); + DBUG_ASSERT(write_set_unique.size() == 0); DBUG_ASSERT(savepoint_list.size() == 0); }); @@ -184,13 +194,19 @@ void Rpl_transaction_write_set_ctx::rollback_to_savepoint(char* name) { // Clear all elements after savepoint write_set.erase(write_set.begin() + position, write_set.end()); + // Since the write_set_unique set does not have insert order, the + // elements are ordered according its value, we need to rebuild it. + write_set_unique.clear(); + write_set_unique.insert(write_set.begin(), write_set.end()); } - DBUG_EXECUTE_IF("transaction_write_set_savepoint_add_savepoint", - DBUG_ASSERT(write_set.size() == 1);); + DBUG_EXECUTE_IF("transaction_write_set_savepoint_add_savepoint", { + DBUG_ASSERT(write_set.size() == 2); + DBUG_ASSERT(write_set_unique.size() == 2);}); - DBUG_EXECUTE_IF("transaction_write_set_size_2", - DBUG_ASSERT(write_set.size() == 2);); + DBUG_EXECUTE_IF("transaction_write_set_size_2", { + DBUG_ASSERT(write_set.size() == 4); + DBUG_ASSERT(write_set_unique.size() == 4);}); } DBUG_VOID_RETURN; diff --git a/sql/rpl_transaction_write_set_ctx.h b/sql/rpl_transaction_write_set_ctx.h index 0a94254a5903..34736a6cffc1 100644 --- a/sql/rpl_transaction_write_set_ctx.h +++ b/sql/rpl_transaction_write_set_ctx.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -20,6 +20,7 @@ #include #include #include +#include #include /** @@ -43,10 +44,10 @@ class Rpl_transaction_write_set_ctx void add_write_set(uint64 hash); /* - Function to get the pointer of the write set vector in the + Function to get the pointer of the write set in the transaction_ctx object. */ - std::vector *get_write_set(); + std::set *get_write_set(); /* Cleanup function of the vector which stores the PKE. @@ -91,6 +92,7 @@ class Rpl_transaction_write_set_ctx private: std::vector write_set; + std::set write_set_unique; /** Contains information related to SAVEPOINTs. The key on map is the diff --git a/sql/rpl_write_set_handler.cc b/sql/rpl_write_set_handler.cc index 134343b7fad3..e9e9311042ef 100644 --- a/sql/rpl_write_set_handler.cc +++ b/sql/rpl_write_set_handler.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -27,10 +27,14 @@ #include #include +#include #include +// The number of digits of ULLONG_MAX plus '\0' +#define VALUE_LENGTH_BUFFER_SIZE 24 #define NAME_READ_BUFFER_SIZE 1024 #define HASH_STRING_SEPARATOR "½" +#define COLLATION_CONVERSION_ALGORITHM 1 const char *transaction_write_set_hashing_algorithms[]= { @@ -56,12 +60,12 @@ get_write_set_algorithm_string(unsigned int algorithm) } } -template uint64 calc_hash(ulong algorithm, type T) +template uint64 calc_hash(ulong algorithm, type T, size_t len) { if(algorithm == HASH_ALGORITHM_MURMUR32) - return (murmur3_32((const uchar*)T, strlen(T), 0)); + return (murmur3_32((const uchar*)T, len, 0)); else - return (MY_XXH64((const uchar*)T, strlen(T), 0)); + return (MY_XXH64((const uchar*)T, len, 0)); } /** @@ -69,34 +73,25 @@ template uint64 calc_hash(ulong algorithm, type T) needed to be checked to get the hash of the field value in the foreign table. + This function is meant to be only called by add_pke() function, some + conditions are check there for performance optimization. + @param[in] table - TABLE object @param[in] thd - THD object pointing to current thread. @param[out] foreign_key_map - a standard map which keeps track of the foreign key fields. */ -void check_foreign_key(TABLE *table, THD *thd, - std::map &foreign_key_map) +static void check_foreign_key(TABLE *table, THD *thd, + std::map &foreign_key_map) { DBUG_ENTER("check_foreign_key"); - /* - OPTION_NO_FOREIGN_KEY_CHECKS bit in options_bits is set at two places - - 1) If the user executed 'SET foreign_key_checks= 0' on the local session - before executing the query. - or - 2) We are applying a RBR event (i.e., the event is from a remote server) - and logic in Rows_log_event::do_apply_event found out that the event is - generated from a remote server session that disabled foreign_key_checks - (using 'SET foreign_key_checks=0'). - - In either of the above cases (i.e., the foreign key check is disabled for - the current query/current event), we should ignore generating - the foreign key information as they should not participate - in the conflicts detecting algorithm. - */ - if (thd->variables.option_bits & OPTION_NO_FOREIGN_KEY_CHECKS) - DBUG_VOID_RETURN; + DBUG_ASSERT(!(thd->variables.option_bits & OPTION_NO_FOREIGN_KEY_CHECKS)); + char value_length_buffer[VALUE_LENGTH_BUFFER_SIZE]; + char* value_length= NULL; + + std::string pke_prefix; + pke_prefix.reserve(NAME_LEN * 5); List f_key_list; table->file->get_foreign_key_list(thd, &f_key_list); @@ -114,226 +109,334 @@ void check_foreign_key(TABLE *table, THD *thd, if (f_key_info->referenced_key_name == NULL) continue; - std::string temporary_pke; - List_iterator_fast foreign_fields_iterator(f_key_info->foreign_fields); - - char *f_database_name= f_key_info->referenced_db->str; - char *f_table_name= f_key_info->referenced_table->str; - - // Length of foreign database calculation. - uint length_database= strlen(f_database_name); - char *buffer_db= (char*) my_malloc(key_memory_write_set_extraction, - length_database, MYF(0)); - char *char_length_database= my_safe_itoa(10, length_database, &buffer_db[length_database-1]); - - // Length of foreign table calculation. - uint length_table= strlen(f_table_name); - char *buffer_table= (char*) my_malloc( - key_memory_write_set_extraction, - length_table, MYF(0)); - char *char_length_table= my_safe_itoa(10, length_table, &buffer_table[length_table-1]); - /* Prefix the hash keys with the referenced index name. */ - temporary_pke.append(f_key_info->referenced_key_name->str, - f_key_info->referenced_key_name->length); - temporary_pke.append(HASH_STRING_SEPARATOR); - temporary_pke.append(f_database_name); - temporary_pke.append(HASH_STRING_SEPARATOR); - temporary_pke.append(char_length_database); - temporary_pke.append(f_table_name); - temporary_pke.append(HASH_STRING_SEPARATOR); - temporary_pke.append(char_length_table); - - my_free(buffer_db); - my_free(buffer_table); + pke_prefix.clear(); + pke_prefix.append(f_key_info->referenced_key_name->str, + f_key_info->referenced_key_name->length); + pke_prefix.append(HASH_STRING_SEPARATOR); + pke_prefix.append(f_key_info->referenced_db->str, + f_key_info->referenced_db->length); + pke_prefix.append(HASH_STRING_SEPARATOR); + value_length= my_safe_itoa(10, f_key_info->referenced_db->length, + &value_length_buffer[VALUE_LENGTH_BUFFER_SIZE-1]); + pke_prefix.append(value_length); + pke_prefix.append(f_key_info->referenced_table->str, + f_key_info->referenced_table->length); + pke_prefix.append(HASH_STRING_SEPARATOR); + value_length= my_safe_itoa(10, f_key_info->referenced_table->length, + &value_length_buffer[VALUE_LENGTH_BUFFER_SIZE-1]); + pke_prefix.append(value_length); + List_iterator_fast foreign_fields_iterator(f_key_info->foreign_fields); while ((f_info= foreign_fields_iterator++)) { - foreign_key_map[f_info->str]= temporary_pke; + foreign_key_map[f_info->str]= pke_prefix; } } DBUG_VOID_RETURN; } -void debug_check_for_write_sets(std::vector &key_list_to_hash) +#ifndef DBUG_OFF +static void debug_check_for_write_sets(std::vector &key_list_to_hash) { DBUG_EXECUTE_IF("PKE_assert_single_primary_key_generated_insert", - DBUG_ASSERT(key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + DBUG_ASSERT(key_list_to_hash.size() == 2); + DBUG_ASSERT(key_list_to_hash[1] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "1");); - DBUG_EXECUTE_IF("PKE_assert_single_primary_key_generated_update", + DBUG_EXECUTE_IF("PKE_assert_single_primary_key_generated_insert_collation", + DBUG_ASSERT(key_list_to_hash.size() == 2); DBUG_ASSERT(key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "1" && + key_list_to_hash[1] == key_list_to_hash[0]);); + + DBUG_EXECUTE_IF("PKE_assert_single_primary_key_generated_update", + DBUG_ASSERT(key_list_to_hash.size() == 2); + DBUG_ASSERT(key_list_to_hash[1] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1" || - key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[1] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "1");); + DBUG_EXECUTE_IF("PKE_assert_single_primary_key_generated_update_collation", + DBUG_ASSERT(key_list_to_hash.size() == 2); + DBUG_ASSERT((key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1" && + key_list_to_hash[1] == key_list_to_hash[0]) || + (key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "1" && + key_list_to_hash[1] == key_list_to_hash[0]));); + DBUG_EXECUTE_IF("PKE_assert_multi_primary_key_generated_insert", - DBUG_ASSERT(key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + DBUG_ASSERT(key_list_to_hash.size() == 2); + DBUG_ASSERT(key_list_to_hash[1] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "12" HASH_STRING_SEPARATOR "1");); - DBUG_EXECUTE_IF("PKE_assert_multi_primary_key_generated_update", + DBUG_EXECUTE_IF("PKE_assert_multi_primary_key_generated_insert_collation", + DBUG_ASSERT(key_list_to_hash.size() == 2); DBUG_ASSERT(key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "12" + HASH_STRING_SEPARATOR "1" && + key_list_to_hash[1] == key_list_to_hash[0]);); + + DBUG_EXECUTE_IF("PKE_assert_multi_primary_key_generated_update", + DBUG_ASSERT(key_list_to_hash.size() == 2); + DBUG_ASSERT(key_list_to_hash[1] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "12" HASH_STRING_SEPARATOR "1" || - key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[1] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "12" HASH_STRING_SEPARATOR "1");); + DBUG_EXECUTE_IF("PKE_assert_multi_primary_key_generated_update_collation", + DBUG_ASSERT(key_list_to_hash.size() == 2); + DBUG_ASSERT((key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "12" + HASH_STRING_SEPARATOR "1" && + key_list_to_hash[1] == key_list_to_hash[0]) || + (key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "12" + HASH_STRING_SEPARATOR "1" && + key_list_to_hash[1] == key_list_to_hash[0]));); + DBUG_EXECUTE_IF("PKE_assert_single_primary_unique_key_generated_insert", - DBUG_ASSERT(key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + DBUG_ASSERT(key_list_to_hash.size() == 6); + DBUG_ASSERT(key_list_to_hash[1] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1] == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[3] == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "22" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[2] == "c3" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[5] == "c3" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1");); + + DBUG_EXECUTE_IF("PKE_assert_single_primary_unique_key_generated_insert_collation", + DBUG_ASSERT(key_list_to_hash.size() == 6); + DBUG_ASSERT(key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "1" && + key_list_to_hash[2] == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + HASH_STRING_SEPARATOR "22" HASH_STRING_SEPARATOR "1" && + key_list_to_hash[4] == "c3" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1" && + key_list_to_hash[1] == key_list_to_hash[0] && + key_list_to_hash[3] == key_list_to_hash[2] && + key_list_to_hash[5] == key_list_to_hash[4]);); + DBUG_EXECUTE_IF("PKE_assert_single_primary_unique_key_generated_update", - DBUG_ASSERT((key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + DBUG_ASSERT(key_list_to_hash.size() == 6); + DBUG_ASSERT((key_list_to_hash[1] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1] == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[3] == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "22" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[2] == "c3" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[5] == "c3" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1") || - (key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + (key_list_to_hash[1] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1] == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[3] == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "22" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[2] == "c3" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[5] == "c3" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1"));); + DBUG_EXECUTE_IF("PKE_assert_single_primary_unique_key_generated_update_collation", + DBUG_ASSERT(key_list_to_hash.size() == 6); + DBUG_ASSERT((key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "1" && + key_list_to_hash[2] == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + HASH_STRING_SEPARATOR "22" HASH_STRING_SEPARATOR "1" && + key_list_to_hash[4] == "c3" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1" && + key_list_to_hash[1] == key_list_to_hash[0] && + key_list_to_hash[3] == key_list_to_hash[2] && + key_list_to_hash[5] == key_list_to_hash[4]) || + (key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "1" && + key_list_to_hash[2] == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + HASH_STRING_SEPARATOR "22" HASH_STRING_SEPARATOR "1" && + key_list_to_hash[4] == "c3" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1" && + key_list_to_hash[1] == key_list_to_hash[0] && + key_list_to_hash[3] == key_list_to_hash[2] && + key_list_to_hash[5] == key_list_to_hash[4]));); + DBUG_EXECUTE_IF("PKE_assert_multi_primary_unique_key_generated_insert", - DBUG_ASSERT(key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + DBUG_ASSERT(key_list_to_hash.size() == 6); + DBUG_ASSERT(key_list_to_hash[1] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "12" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1] == "b" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[3] == "b" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[2] == "c" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[5] == "c" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "24" HASH_STRING_SEPARATOR "1");); + DBUG_EXECUTE_IF("PKE_assert_multi_primary_unique_key_generated_insert_collation", + DBUG_ASSERT(key_list_to_hash.size() == 6); + DBUG_ASSERT(key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "12" + HASH_STRING_SEPARATOR "1" && + key_list_to_hash[2] == "b" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1" && + key_list_to_hash[4] == "c" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + HASH_STRING_SEPARATOR "24" HASH_STRING_SEPARATOR "1" && + key_list_to_hash[1] == key_list_to_hash[0] && + key_list_to_hash[3] == key_list_to_hash[2] && + key_list_to_hash[5] == key_list_to_hash[4]);); + DBUG_EXECUTE_IF("PKE_assert_multi_primary_unique_key_generated_update", - DBUG_ASSERT((key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + DBUG_ASSERT(key_list_to_hash.size() == 6); + DBUG_ASSERT((key_list_to_hash[1] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "12" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1] == "b" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[3] == "b" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[2] == "c" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[5] == "c" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "24" HASH_STRING_SEPARATOR "1") || - (key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + (key_list_to_hash[1] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "12" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1] == "b" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[3] == "b" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[2] == "c" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[5] == "c" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "24" HASH_STRING_SEPARATOR "1"));); + DBUG_EXECUTE_IF("PKE_assert_multi_primary_unique_key_generated_update_collation", + DBUG_ASSERT(key_list_to_hash.size() == 6); + DBUG_ASSERT((key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "12" + HASH_STRING_SEPARATOR "1" && + key_list_to_hash[2] == "b" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1" && + key_list_to_hash[4] == "c" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + HASH_STRING_SEPARATOR "24" HASH_STRING_SEPARATOR "1" && + key_list_to_hash[1] == key_list_to_hash[0] && + key_list_to_hash[3] == key_list_to_hash[2] && + key_list_to_hash[5] == key_list_to_hash[4]) || + (key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "12" + HASH_STRING_SEPARATOR "1" && + key_list_to_hash[2] == "b" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1" && + key_list_to_hash[4] == "c" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + HASH_STRING_SEPARATOR "24" HASH_STRING_SEPARATOR "1" && + key_list_to_hash[1] == key_list_to_hash[0] && + key_list_to_hash[3] == key_list_to_hash[2] && + key_list_to_hash[5] == key_list_to_hash[4]));); + DBUG_EXECUTE_IF("PKE_assert_multi_foreign_key_generated_insert", - DBUG_ASSERT(key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" + DBUG_ASSERT(key_list_to_hash.size() == 8); + DBUG_ASSERT(key_list_to_hash[1] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "15" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1] == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" + key_list_to_hash[3] == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[2] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[5] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[3] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t2" + key_list_to_hash[7] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t2" HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "1");); + DBUG_EXECUTE_IF("PKE_assert_multi_foreign_key_generated_insert_collation", + DBUG_ASSERT(key_list_to_hash.size() == 8); + DBUG_ASSERT(key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" + HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "15" + HASH_STRING_SEPARATOR "1" && + key_list_to_hash[2] == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" + HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "1" && + key_list_to_hash[4] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "1" && + key_list_to_hash[6] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t2" + HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "1" && + key_list_to_hash[1] == key_list_to_hash[0] && + key_list_to_hash[3] == key_list_to_hash[2] && + key_list_to_hash[5] == key_list_to_hash[4] && + key_list_to_hash[7] == key_list_to_hash[6]);); + DBUG_EXECUTE_IF("PKE_assert_multi_foreign_key_generated_update", - DBUG_ASSERT((key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" + DBUG_ASSERT(key_list_to_hash.size() == 8); + DBUG_ASSERT((key_list_to_hash[1] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "15" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1] == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" + key_list_to_hash[3] == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[2] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[5] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[3] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t2" + key_list_to_hash[7] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t2" HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "1") || - (key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" + (key_list_to_hash[1] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "15" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[1] == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" + key_list_to_hash[3] == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[2] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + key_list_to_hash[5] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1" && - key_list_to_hash[3] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t2" + key_list_to_hash[7] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t2" HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "1"));); + + DBUG_EXECUTE_IF("PKE_assert_multi_foreign_key_generated_update_collation", + DBUG_ASSERT(key_list_to_hash.size() == 8); + DBUG_ASSERT((key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" + HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "15" + HASH_STRING_SEPARATOR "1" && + key_list_to_hash[2] == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" + HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "1" && + key_list_to_hash[4] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + HASH_STRING_SEPARATOR "21" HASH_STRING_SEPARATOR "1" && + key_list_to_hash[6] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t2" + HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "1" && + key_list_to_hash[1] == key_list_to_hash[0] && + key_list_to_hash[3] == key_list_to_hash[2] && + key_list_to_hash[4] == key_list_to_hash[4] && + key_list_to_hash[7] == key_list_to_hash[6]) || + (key_list_to_hash[0] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" + HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "15" + HASH_STRING_SEPARATOR "1" && + key_list_to_hash[2] == "c2" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t3" + HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "1" && + key_list_to_hash[4] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t1" + HASH_STRING_SEPARATOR "23" HASH_STRING_SEPARATOR "1" && + key_list_to_hash[6] == "PRIMARY" HASH_STRING_SEPARATOR "test" HASH_STRING_SEPARATOR "4t2" + HASH_STRING_SEPARATOR "25" HASH_STRING_SEPARATOR "1" && + key_list_to_hash[1] == key_list_to_hash[0] && + key_list_to_hash[3] == key_list_to_hash[2] && + key_list_to_hash[4] == key_list_to_hash[4] && + key_list_to_hash[7] == key_list_to_hash[6]));); } +#endif /** Function to generate the hash of the string passed to this function. @param[in] pke - the string to be hashed. + @param[in] collation_conversion_algorithm - algorithm used for the conversion + 0 - converted using without + collation support algorithm + 1 - converted using with collation + support conversion algorithm + @param[in] thd - THD object pointing to current thread. */ -void generate_hash_pke(std::string pke, THD* thd) +static void generate_hash_pke(const std::string &pke, uint collation_conversion_algorithm, THD* thd) { DBUG_ENTER("generate_hash_pke"); DBUG_ASSERT(thd->variables.transaction_write_set_extraction != HASH_ALGORITHM_OFF); - const char* string_pke=NULL; - string_pke= (char *)pke.c_str(); - DBUG_PRINT("info", ("The hashed value is %s for %u", string_pke, - thd->thread_id())); + + size_t length= (COLLATION_CONVERSION_ALGORITHM == collation_conversion_algorithm) ? + pke.size() : strlen(pke.c_str()); uint64 hash= calc_hash(thd->variables.transaction_write_set_extraction, - string_pke); - Rpl_transaction_write_set_ctx *transaction_write_set_ctc= - thd->get_transaction()->get_transaction_write_set_ctx(); - transaction_write_set_ctc->add_write_set(hash); + pke.c_str(), length); + thd->get_transaction()->get_transaction_write_set_ctx()->add_write_set(hash); + + DBUG_PRINT("info", ("pke: %s; hash: %llu", pke.c_str(), hash)); DBUG_VOID_RETURN; } + void add_pke(TABLE *table, THD *thd) { DBUG_ENTER("add_pke"); - std::string pke; - std::string temporary_pke; - // Buffer to read the names of the database and table names which is less - // than 1024. So its a safe limit. - char name_read_buffer[NAME_READ_BUFFER_SIZE]; - // Buffer to read the row data from the table record[0]. - String row_data(name_read_buffer, sizeof(name_read_buffer), &my_charset_bin); - - // Fetching the foreign key value of the table and storing it in a map. - std::map foreign_key_map; - check_foreign_key(table, thd, foreign_key_map); - - // The database name of the table in the transaction is fetched here. - const char* database_name= table->s->db.str; - uint length_database= strlen(database_name); - char *buffer_db= (char*) my_malloc( - key_memory_write_set_extraction, - length_database, MYF(0)); - const char *char_length_database= my_safe_itoa(10, length_database, - &buffer_db[length_database-1]); - temporary_pke.append(database_name); - temporary_pke.append(HASH_STRING_SEPARATOR); - temporary_pke.append(char_length_database); - my_free(buffer_db); - - // The table name of the table in the transaction is fetched here. - const char* table_name= table->s->table_name.str; - uint length_table= strlen(table_name); - char *buffer_table= (char*) my_malloc( - key_memory_write_set_extraction, - length_table, MYF(0)); - const char *char_length_table= my_safe_itoa(10, length_table, &buffer_table[length_table-1]); - temporary_pke.append(table_name); - temporary_pke.append(HASH_STRING_SEPARATOR); - temporary_pke.append(char_length_table); - - my_free(buffer_table); - - // Finalizing the first part of the string to be hashed and storing it in - // the pke. - const char* temp_pke= NULL; - temp_pke= (char *)temporary_pke.c_str(); - pke.append(temp_pke); - /* The next section extracts the primary key equivalent of the rows that are changing during the current transaction. @@ -368,111 +471,256 @@ void add_pke(TABLE *table, THD *thd) Finally these value are hashed using the murmur hash function to prevent sending more for certification algorithm. */ - std::vector key_list_to_hash; - bitmap_set_all(table->read_set); + if(table->key_info && (table->s->primary_key < MAX_KEY)) { + char value_length_buffer[VALUE_LENGTH_BUFFER_SIZE]; + char* value_length= NULL; + + std::string pke_schema_table; + pke_schema_table.reserve(NAME_LEN * 3); + pke_schema_table.append(HASH_STRING_SEPARATOR); + pke_schema_table.append(table->s->db.str, table->s->db.length); + pke_schema_table.append(HASH_STRING_SEPARATOR); + value_length= my_safe_itoa(10, table->s->db.length, + &value_length_buffer[VALUE_LENGTH_BUFFER_SIZE-1]); + pke_schema_table.append(value_length); + pke_schema_table.append(table->s->table_name.str, table->s->table_name.length); + pke_schema_table.append(HASH_STRING_SEPARATOR); + value_length= my_safe_itoa(10, table->s->table_name.length, + &value_length_buffer[VALUE_LENGTH_BUFFER_SIZE-1]); + pke_schema_table.append(value_length); + + std::string pke; + pke.reserve(NAME_LEN * 5); + + char *pk_value= NULL; + size_t pk_value_size= 0; + + // Buffer to read the names of the database and table names which is less + // than 1024. So its a safe limit. + char name_read_buffer[NAME_READ_BUFFER_SIZE]; + // Buffer to read the row data from the table record[0]. + String row_data(name_read_buffer, sizeof(name_read_buffer), &my_charset_bin); + +#ifndef DBUG_OFF + std::vector write_sets; +#endif + for (uint key_number=0; key_number < table->s->keys; key_number++) { // Skip non unique. if (!((table->key_info[key_number].flags & (HA_NOSAME )) == HA_NOSAME)) continue; - std::string unhashed_string; - unhashed_string.append(table->key_info[key_number].name); - unhashed_string.append(HASH_STRING_SEPARATOR); - unhashed_string.append(pke); - uint i= 0; - for (/*empty*/; i < table->key_info[key_number].user_defined_key_parts; i++) - { - // read the primary key field values in str. - int index= table->key_info[key_number].key_part[i].fieldnr; - table->field[index-1]->val_str(&row_data); - - /* Ignore if the value is NULL. */ - if (table->field[index-1]->is_null()) - break; - - char* pk_value= (char*) my_malloc( - key_memory_write_set_extraction, - row_data.length()+1, MYF(0)); - // buffer to be used for my_safe_itoa. - char *buf= (char*) my_malloc( - key_memory_write_set_extraction, - row_data.length(), MYF(0)); - - strmake(pk_value, row_data.c_ptr_safe(), row_data.length()); - const char *lenStr = my_safe_itoa(10, (row_data.length()), - &buf[row_data.length()-1]); - unhashed_string.append(pk_value); - unhashed_string.append(HASH_STRING_SEPARATOR); - unhashed_string.append(lenStr); - my_free(buf); - my_free(pk_value); - } /* - If any part of the key is NULL, ignore adding it to hash keys. - NULL cannot conflict with any value. - Eg: create table t1(i int primary key not null, j int, k int, - unique key (j, k)); - insert into t1 values (1, 2, NULL); - insert into t1 values (2, 2, NULL); => this is allowed. + To handle both members having hash values with and without collation + in the same group, we generate and send both versions (with and without + collation) of the hash in the newer versions. This would mean that a row + change will generate 2 instead of 1 writeset, and 4 instead of 2, when PK + are involved. This will mean that a transaction will be certified against + two writesets instead of just one. + + To generate both versions (with and without collation) of the hash, it + first converts using without collation support algorithm (old algorithm), + and then using with collation support conversion algorithm, and adds + generated value to key_list_to_hash vector, for hash generation later. + + Since the collation writeset is bigger or equal than the raw one, we do + generate first the collation and reuse the buffer without the need to + resize for the raw. */ - if (i == table->key_info[key_number].user_defined_key_parts) - { - key_list_to_hash.push_back(unhashed_string); - } - else + for (int collation_conversion_algorithm= COLLATION_CONVERSION_ALGORITHM; + collation_conversion_algorithm >= 0; + collation_conversion_algorithm--) { - /* This is impossible to happen in case of primary keys */ - DBUG_ASSERT(key_number !=0); + pke.clear(); + pke.append(table->key_info[key_number].name); + pke.append(pke_schema_table); + + uint i= 0; + for (/*empty*/; i < table->key_info[key_number].user_defined_key_parts; i++) + { + // read the primary key field values in str. + int index= table->key_info[key_number].key_part[i].fieldnr; + size_t length= 0; + + /* Ignore if the value is NULL. */ + if (table->field[index-1]->is_null()) + break; + + // convert using collation support conversion algorithm + if (COLLATION_CONVERSION_ALGORITHM == collation_conversion_algorithm) + { + const CHARSET_INFO* cs= table->field[index-1]->charset(); + length= cs->coll->strnxfrmlen(cs, + table->field[index-1]->pack_length()); + } + // convert using without collation support algorithm + else + { + table->field[index-1]->val_str(&row_data); + length= row_data.length(); + } + + if (pk_value_size < length+1) + { + pk_value_size= length+1; + pk_value= (char*) my_realloc(key_memory_write_set_extraction, + pk_value, pk_value_size, + MYF(MY_ZEROFILL)); + } + + // convert using collation support conversion algorithm + if (COLLATION_CONVERSION_ALGORITHM == collation_conversion_algorithm) + { + /* + convert to normalized string and store so that it can be + sorted using binary comparison functions like memcmp. + */ + table->field[index-1]->make_sort_key((uchar*)pk_value, length); + pk_value[length]= 0; + } + // convert using without collation support algorithm + else + { + strmake(pk_value, row_data.c_ptr_safe(), length); + } + + pke.append(pk_value, length); + pke.append(HASH_STRING_SEPARATOR); + value_length= my_safe_itoa(10, length, + &value_length_buffer[VALUE_LENGTH_BUFFER_SIZE-1]); + pke.append(value_length); + } + + /* + If any part of the key is NULL, ignore adding it to hash keys. + NULL cannot conflict with any value. + Eg: create table t1(i int primary key not null, j int, k int, + unique key (j, k)); + insert into t1 values (1, 2, NULL); + insert into t1 values (2, 2, NULL); => this is allowed. + */ + if (i == table->key_info[key_number].user_defined_key_parts) + { + generate_hash_pke(pke, collation_conversion_algorithm, thd); +#ifndef DBUG_OFF + write_sets.push_back(pke); +#endif + } + else + { + /* This is impossible to happen in case of primary keys */ + DBUG_ASSERT(key_number !=0); + } } - unhashed_string.clear(); } - // This part takes care of the previously fetched foreign key values of - // the referenced table adds it to the write set. - for(uint i=0; i < table->s->fields; i++) + /* + Foreign keys handling. + We check the foreign keys existence here and not at check_foreign_key() + function to avoid allocate foreign_key_map when it is not needed. + + OPTION_NO_FOREIGN_KEY_CHECKS bit in options_bits is set at two places + + 1) If the user executed 'SET foreign_key_checks= 0' on the local session + before executing the query. + or + 2) We are applying a RBR event (i.e., the event is from a remote server) + and logic in Rows_log_event::do_apply_event found out that the event is + generated from a remote server session that disabled foreign_key_checks + (using 'SET foreign_key_checks=0'). + + In either of the above cases (i.e., the foreign key check is disabled for + the current query/current event), we should ignore generating + the foreign key information as they should not participate + in the conflicts detecting algorithm. + */ + if (!(thd->variables.option_bits & OPTION_NO_FOREIGN_KEY_CHECKS)) { - std::string referenced_FQTN= - foreign_key_map[table->s->field[i]->field_name]; - if (referenced_FQTN.size() > 0) + std::map foreign_key_map; + check_foreign_key(table, thd, foreign_key_map); + + if (!foreign_key_map.empty()) { - table->field[i]->val_str(&row_data); - - /* Ignore if the value is NULL. */ - if (table->field[i]->is_null()) - continue; - - char* pk_value= (char*) my_malloc( - key_memory_write_set_extraction, - row_data.length()+1, MYF(0)); - // buffer to be used for my_safe_itoa. - char *buf= (char*) my_malloc( - key_memory_write_set_extraction, - row_data.length(), MYF(0)); - - strmake(pk_value, row_data.c_ptr_safe(), row_data.length()); - const char *lenStr = my_safe_itoa(10, (row_data.length()), - &buf[row_data.length()-1]); - referenced_FQTN.append(pk_value); - referenced_FQTN.append(HASH_STRING_SEPARATOR); - referenced_FQTN.append(lenStr); - - my_free(buf); - my_free(pk_value); - key_list_to_hash.push_back(referenced_FQTN); + for (uint i=0; i < table->s->fields; i++) + { + /* Ignore if the value is NULL. */ + if (table->field[i]->is_null()) + continue; + + std::map::iterator it= + foreign_key_map.find(table->s->field[i]->field_name); + if (foreign_key_map.end() != it) + { + for (int collation_conversion_algorithm= COLLATION_CONVERSION_ALGORITHM; + collation_conversion_algorithm >= 0; + collation_conversion_algorithm--) + { + std::string pke_prefix= it->second; + size_t length= 0; + + // convert using collation support conversion algorithm + if (COLLATION_CONVERSION_ALGORITHM == collation_conversion_algorithm) + { + const CHARSET_INFO* cs= table->field[i]->charset(); + length= cs->coll->strnxfrmlen(cs, + table->field[i]->pack_length()); + } + // convert using without collation support algorithm + else + { + table->field[i]->val_str(&row_data); + length= row_data.length(); + } + + if (pk_value_size < length+1) + { + pk_value_size= length+1; + pk_value= (char*) my_realloc(key_memory_write_set_extraction, + pk_value, pk_value_size, + MYF(MY_ZEROFILL)); + } + + // convert using collation support conversion algorithm + if (COLLATION_CONVERSION_ALGORITHM == collation_conversion_algorithm) + { + /* + convert to normalized string and store so that it can be + sorted using binary comparison functions like memcmp. + */ + table->field[i]->make_sort_key((uchar*)pk_value, length); + pk_value[length]= 0; + } + // convert using without collation support algorithm + else + { + strmake(pk_value, row_data.c_ptr_safe(), length); + } + + pke_prefix.append(pk_value, length); + pke_prefix.append(HASH_STRING_SEPARATOR); + value_length= my_safe_itoa(10, length, + &value_length_buffer[VALUE_LENGTH_BUFFER_SIZE-1]); + pke_prefix.append(value_length); + + generate_hash_pke(pke_prefix, collation_conversion_algorithm, thd); +#ifndef DBUG_OFF + write_sets.push_back(pke_prefix); +#endif + } + } + } } } - debug_check_for_write_sets(key_list_to_hash); + my_free(pk_value); - while(key_list_to_hash.size()) - { - std::string prepared_string= key_list_to_hash.back(); - key_list_to_hash.pop_back(); - generate_hash_pke(prepared_string, thd); - } +#ifndef DBUG_OFF + debug_check_for_write_sets(write_sets); +#endif } + DBUG_VOID_RETURN; } From bdd12ac67a6cb0e1e295457205e9f640c6e9d0ab Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Tue, 12 Dec 2017 09:22:16 -0700 Subject: [PATCH 0574/1221] MYR-47 : Investigate how to take in Facebook MySQL rpl writebatch - Initial writebatch patch was taken in at c66d6ce0a479a6a9d56f574abd6628ed96119524 but with no safeguards in place to prevent dangerous use. This commit adds the needed safeguard and associated test case. - Now, in order to use rocksdb_rpl_skip_tx_api, the slave must be in super_read_only mode and must not be processing ay STATEMENT format binlog events. Any violation of this will stop the slave SQL thread with an error. --- .../r/rpl_skip_trx_api_binlog_format.result | 59 ++++++++++ .../rpl_skip_trx_api_binlog_format-master.opt | 1 + .../rpl_skip_trx_api_binlog_format-slave.opt | 1 + .../t/rpl_skip_trx_api_binlog_format.test | 107 ++++++++++++++++++ mysql-test/suite/rocksdb/r/i_s_trx_rpl.result | 2 - mysql-test/suite/rocksdb/t/i_s_trx_rpl.test | 26 +---- sql/handler.h | 9 ++ sql/log_event.cc | 26 +++++ storage/partition/ha_partition.cc | 9 ++ storage/partition/ha_partition.h | 3 + storage/rocksdb/ha_rocksdb.cc | 4 + storage/rocksdb/ha_rocksdb.h | 2 + 12 files changed, 226 insertions(+), 23 deletions(-) create mode 100644 mysql-test/suite/rocksdb.rpl/r/rpl_skip_trx_api_binlog_format.result create mode 100644 mysql-test/suite/rocksdb.rpl/t/rpl_skip_trx_api_binlog_format-master.opt create mode 100644 mysql-test/suite/rocksdb.rpl/t/rpl_skip_trx_api_binlog_format-slave.opt create mode 100644 mysql-test/suite/rocksdb.rpl/t/rpl_skip_trx_api_binlog_format.test diff --git a/mysql-test/suite/rocksdb.rpl/r/rpl_skip_trx_api_binlog_format.result b/mysql-test/suite/rocksdb.rpl/r/rpl_skip_trx_api_binlog_format.result new file mode 100644 index 000000000000..77f1d72ed92c --- /dev/null +++ b/mysql-test/suite/rocksdb.rpl/r/rpl_skip_trx_api_binlog_format.result @@ -0,0 +1,59 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +call mtr.add_suppression("Masters binlog format is not ROW and storage engine can not handle non-ROW events at this time.*"); +set @orig_rocksdb_rpl_skip_tx_api=@@global.rocksdb_rpl_skip_tx_api; +set @orig_read_only=@@global.read_only; +set @orig_super_read_only=@@global.super_read_only; +set @@global.rocksdb_rpl_skip_tx_api=ON; +set rocksdb_unsafe_for_binlog=1; +create table t1(a int) engine=rocksdb; +insert into t1 values(1); +include/wait_for_slave_sql_error.inc [errno=1593] +Last_SQL_Error = 'Fatal error: Masters binlog format is not ROW and storage engine can not handle non-ROW events at this time. Table: 'test.t1' Query: 'insert into t1 values(1)'' +"Table after error" +select * from t1; +a +set @@global.super_read_only=ON; +include/start_slave.inc +include/sync_slave_sql_with_master.inc +"Table after error fixed" +select * from t1; +a +1 +drop table t1; +include/sync_slave_sql_with_master.inc +set @@global.rocksdb_rpl_skip_tx_api=@orig_rocksdb_rpl_skip_tx_api; +set @@global.super_read_only=@orig_super_read_only; +set @@global.read_only=@orig_read_only; +set @@global.rocksdb_rpl_skip_tx_api=ON; +set rocksdb_unsafe_for_binlog=1; +create table t1(a int, primary key (a)) engine=rocksdb partition by key(a) partitions 2; +Warnings: +Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. +insert into t1 values(1), (2), (3), (4); +Warnings: +Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. +include/wait_for_slave_sql_error.inc [errno=1593] +Last_SQL_Error = 'Fatal error: Masters binlog format is not ROW and storage engine can not handle non-ROW events at this time. Table: 'test.t1' Query: 'insert into t1 values(1), (2), (3), (4)'' +"Table after error" +select * from t1; +a +set @@global.super_read_only=ON; +include/start_slave.inc +include/sync_slave_sql_with_master.inc +"Table after error fixed" +select * from t1; +a +1 +3 +2 +4 +drop table t1; +include/sync_slave_sql_with_master.inc +set @@global.rocksdb_rpl_skip_tx_api=@orig_rocksdb_rpl_skip_tx_api; +set @@global.super_read_only=@orig_super_read_only; +set @@global.read_only=@orig_read_only; +include/rpl_end.inc diff --git a/mysql-test/suite/rocksdb.rpl/t/rpl_skip_trx_api_binlog_format-master.opt b/mysql-test/suite/rocksdb.rpl/t/rpl_skip_trx_api_binlog_format-master.opt new file mode 100644 index 000000000000..8a0cfb4a7466 --- /dev/null +++ b/mysql-test/suite/rocksdb.rpl/t/rpl_skip_trx_api_binlog_format-master.opt @@ -0,0 +1 @@ +--gtid_mode=ON --enforce_gtid_consistency --log_slave_updates --binlog_format=STATEMENT diff --git a/mysql-test/suite/rocksdb.rpl/t/rpl_skip_trx_api_binlog_format-slave.opt b/mysql-test/suite/rocksdb.rpl/t/rpl_skip_trx_api_binlog_format-slave.opt new file mode 100644 index 000000000000..ec88b709e5c5 --- /dev/null +++ b/mysql-test/suite/rocksdb.rpl/t/rpl_skip_trx_api_binlog_format-slave.opt @@ -0,0 +1 @@ +--gtid_mode=ON --enforce_gtid_consistency --log_slave_updates --sync_binlog=1000 --relay_log_recovery=1 diff --git a/mysql-test/suite/rocksdb.rpl/t/rpl_skip_trx_api_binlog_format.test b/mysql-test/suite/rocksdb.rpl/t/rpl_skip_trx_api_binlog_format.test new file mode 100644 index 000000000000..20036a0c7689 --- /dev/null +++ b/mysql-test/suite/rocksdb.rpl/t/rpl_skip_trx_api_binlog_format.test @@ -0,0 +1,107 @@ +# checks if the slave stops executing transactions when master's binlog format +# is STATEMENT but rocksdb_rpl_skip_tx_api=on and super_read_only=off +--source include/have_rocksdb.inc +--source include/have_binlog_format_statement.inc +--source include/master-slave.inc + +call mtr.add_suppression("Masters binlog format is not ROW and storage engine can not handle non-ROW events at this time.*"); + +# We have two combinations we need to test here : +# 1) rsta=on and sro=off +# 2) rsta=on and sro=on +# 3) rsta=on and sro=off w/ partition +# 4) rsta=on and sro=on w/ partition + +# set up slave to encounter error for combo 1 +connection slave; +set @orig_rocksdb_rpl_skip_tx_api=@@global.rocksdb_rpl_skip_tx_api; +set @orig_read_only=@@global.read_only; +set @orig_super_read_only=@@global.super_read_only; +set @@global.rocksdb_rpl_skip_tx_api=ON; + +# induce events from the master +connection master; +set rocksdb_unsafe_for_binlog=1; +create table t1(a int) engine=rocksdb; +insert into t1 values(1); + +# on slave, wait till we hit the binlog format mismatch error +connection slave; +let $slave_sql_errno= convert_error(ER_SLAVE_FATAL_ERROR); # 1756 +let $show_slave_sql_error=1; +source include/wait_for_slave_sql_error.inc; + +# on slave, print table +connection slave; +echo "Table after error"; +select * from t1; + +# on slave, turn on super read only and start the slave again +connection slave; +set @@global.super_read_only=ON; +--source include/start_slave.inc +connection master; +--source include/sync_slave_sql_with_master.inc + +# on slave, print table again +connection slave; +echo "Table after error fixed"; +select * from t1; + +# cleanup master +connection master; +drop table t1; +--source include/sync_slave_sql_with_master.inc + +# cleanup slave +connection slave; +set @@global.rocksdb_rpl_skip_tx_api=@orig_rocksdb_rpl_skip_tx_api; +set @@global.super_read_only=@orig_super_read_only; +set @@global.read_only=@orig_read_only; + + +# set up slave to encounter error for combo 3 +connection slave; +set @@global.rocksdb_rpl_skip_tx_api=ON; + +# induce events from the master +connection master; +set rocksdb_unsafe_for_binlog=1; +create table t1(a int, primary key (a)) engine=rocksdb partition by key(a) partitions 2; +insert into t1 values(1), (2), (3), (4); + +# on slave, wait till we hit the binlog format mismatch error +connection slave; +let $slave_sql_errno= convert_error(ER_SLAVE_FATAL_ERROR); # 1756 +let $show_slave_sql_error=1; +source include/wait_for_slave_sql_error.inc; + +# on slave, print table +connection slave; +echo "Table after error"; +select * from t1; + +# on slave, turn on super read only and start the slave again +connection slave; +set @@global.super_read_only=ON; +--source include/start_slave.inc +connection master; +--source include/sync_slave_sql_with_master.inc + +# on slave, print table again +connection slave; +echo "Table after error fixed"; +select * from t1; + +# cleanup master +connection master; +drop table t1; +--source include/sync_slave_sql_with_master.inc + +# cleanup slave +connection slave; +set @@global.rocksdb_rpl_skip_tx_api=@orig_rocksdb_rpl_skip_tx_api; +set @@global.super_read_only=@orig_super_read_only; +set @@global.read_only=@orig_read_only; + +-- source include/rpl_end.inc diff --git a/mysql-test/suite/rocksdb/r/i_s_trx_rpl.result b/mysql-test/suite/rocksdb/r/i_s_trx_rpl.result index b7747a662c3a..87bd7d369ab7 100644 --- a/mysql-test/suite/rocksdb/r/i_s_trx_rpl.result +++ b/mysql-test/suite/rocksdb/r/i_s_trx_rpl.result @@ -3,12 +3,10 @@ Warnings: Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. [connection master] -include/stop_slave.inc create table t1 (a int) engine=rocksdb; show variables like 'rocksdb_rpl_skip_tx_api'; Variable_name Value rocksdb_rpl_skip_tx_api ON include/start_slave.inc -found DROP TABLE t1; include/rpl_end.inc diff --git a/mysql-test/suite/rocksdb/t/i_s_trx_rpl.test b/mysql-test/suite/rocksdb/t/i_s_trx_rpl.test index 08e0ccc8c978..b0b814004641 100644 --- a/mysql-test/suite/rocksdb/t/i_s_trx_rpl.test +++ b/mysql-test/suite/rocksdb/t/i_s_trx_rpl.test @@ -1,10 +1,8 @@ --source include/have_rocksdb.inc ---source include/master-slave.inc ---disable_warnings -connection slave; ---source include/stop_slave.inc ---enable_warnings +--let rpl_skip_start_slave=1 + +--source include/master-slave.inc connection master; create table t1 (a int) engine=rocksdb; @@ -20,22 +18,8 @@ connection slave; show variables like 'rocksdb_rpl_skip_tx_api'; --source include/start_slave.inc ---let $it=0 ---let $stop=0 -while ($stop != 1) { -let $count= query_get_value(select count(*) as Value from information_schema.rocksdb_trx, Value, 1); - if ($count) { - --echo found - --let $stop=1 - } - - if ($it > 1000) { - --echo not found - --let $stop=1 - } - - --inc $it -} +--let $wait_condition = select count(*) > 0 from information_schema.rocksdb_trx; +--source include/wait_condition.inc connection master; DROP TABLE t1; diff --git a/sql/handler.h b/sql/handler.h index 3a6f98859c99..b10d80304389 100644 --- a/sql/handler.h +++ b/sql/handler.h @@ -3009,6 +3009,15 @@ class handler :public Sql_alloc */ virtual bool has_gap_locks() const { return false; } + /** + Query storage engine to see if it can support handling specific replication + method in its current configuration. + */ + virtual bool rpl_can_handle_stm_event() const + { + return true; + } + protected: static bool is_using_full_key(key_part_map keypart_map, uint actual_key_parts); bool is_using_full_unique_key(uint active_index, diff --git a/sql/log_event.cc b/sql/log_event.cc index 1f4755278ef6..66ff076ea194 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -4835,6 +4835,32 @@ int Query_log_event::do_apply_event(Relay_log_info const *rli, goto end; } + if (sqlcom_can_generate_row_events(thd->lex->sql_command) && + thd->get_row_count_func() > 0) { + for (TABLE_LIST* tbl= thd->lex->query_tables; tbl; + tbl= tbl->next_global) { + if (!tbl->is_placeholder() && tbl->table->file) { + if (!tbl->table->file->rpl_can_handle_stm_event()) { + String message; + message.append("Masters binlog format is not ROW and storage " + "engine can not handle non-ROW events at this " + "time. Table: '"); + message.append(tbl->get_db_name()); + message.append("."); + message.append(tbl->get_table_name()); + message.append("' Query: '"); + message.append(thd->query().str); + message.append("'"); + rli->report(ERROR_LEVEL, ER_SLAVE_FATAL_ERROR, + ER_THD(thd, ER_SLAVE_FATAL_ERROR), + message.c_ptr()); + thd->is_slave_error= true; + goto end; + } + } + } + } + /* Finalize server status flags after executing a statement. */ thd->update_server_status(); log_slow_statement(thd); diff --git a/storage/partition/ha_partition.cc b/storage/partition/ha_partition.cc index 1b523cbd9ef7..94224eb332df 100644 --- a/storage/partition/ha_partition.cc +++ b/storage/partition/ha_partition.cc @@ -6293,6 +6293,15 @@ bool ha_partition::rpl_lookup_rows() return m_file[0]->rpl_lookup_rows(); } +/* + Query storage engine to see if it can support handling specific replication + method in its current configuration. +*/ +bool ha_partition::rpl_can_handle_stm_event() const +{ + return m_file[0]->rpl_can_handle_stm_event(); +} + struct st_mysql_storage_engine partition_storage_engine= { MYSQL_HANDLERTON_INTERFACE_VERSION }; diff --git a/storage/partition/ha_partition.h b/storage/partition/ha_partition.h index 1c8f37012708..36ed57b3f8b3 100644 --- a/storage/partition/ha_partition.h +++ b/storage/partition/ha_partition.h @@ -1163,6 +1163,9 @@ class ha_partition : void rpl_after_update_rows(); bool rpl_lookup_rows(); + /* For MyRocks Writebatch Replication validation */ + bool rpl_can_handle_stm_event() const; + /* ------------------------------------------------------------------------- MODULE partitioning specific handler API diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index 26b44b89d725..3d75345b89ce 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -4679,6 +4679,10 @@ bool ha_rocksdb::init_with_fields() { DBUG_RETURN(false); /* Ok */ } +bool ha_rocksdb::rpl_can_handle_stm_event() const { + return !(rpl_skip_tx_api_var && !super_read_only); +} + /* If the key is a TTL key, we may need to filter it out. diff --git a/storage/rocksdb/ha_rocksdb.h b/storage/rocksdb/ha_rocksdb.h index 80e8ae6db4f9..717cae85942c 100644 --- a/storage/rocksdb/ha_rocksdb.h +++ b/storage/rocksdb/ha_rocksdb.h @@ -836,6 +836,8 @@ class ha_rocksdb : public my_core::handler { */ ulong index_flags(uint inx, uint part, bool all_parts) const override; + bool rpl_can_handle_stm_event() const override; + const key_map *keys_to_use_for_scanning() override { DBUG_ENTER_FUNC(); From 21e9d76e3f7b34e989bc1767c469792f8fc546c4 Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Mon, 19 Feb 2018 13:07:40 -0700 Subject: [PATCH 0575/1221] PS-3846 : mtr tests timing out in jenkins on server restart - Extended server shutdown timeout for shutdown_server command to 10 minutes. --- client/mysqltest.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/mysqltest.cc b/client/mysqltest.cc index 7924694efc83..bf333ea8770e 100644 --- a/client/mysqltest.cc +++ b/client/mysqltest.cc @@ -5223,7 +5223,7 @@ static void abort_process(int pid, const char *path) void do_shutdown_server(struct st_command *command) { - long timeout=180; + long timeout=600; int pid, error= 0; std::string ds_file_name; MYSQL* mysql = &cur_con->mysql; From 5027b4d291b99526872a2c38992be85b555af438 Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Mon, 19 Feb 2018 14:06:36 -0700 Subject: [PATCH 0576/1221] MYR-160 : rocksdb.validate_datadic is unstable - Test used "shutdown_server" with very short timeouts and manual manipulations of expect files, exec of system commands, etc instead of proper use of builtins and existing include/.inc. Fixed test to use proper/modern mtr tools and re-recorded. --- .../suite/rocksdb/r/validate_datadic.result | 11 +-- .../suite/rocksdb/t/validate_datadic.test | 89 +++++++------------ 2 files changed, 36 insertions(+), 64 deletions(-) diff --git a/mysql-test/suite/rocksdb/r/validate_datadic.result b/mysql-test/suite/rocksdb/r/validate_datadic.result index 87968c9e9cf1..a0ec18120635 100644 --- a/mysql-test/suite/rocksdb/r/validate_datadic.result +++ b/mysql-test/suite/rocksdb/r/validate_datadic.result @@ -2,9 +2,10 @@ CREATE TABLE t1 (pk int primary key) ENGINE=ROCKSDB; CREATE TABLE t2 (pk int primary key) ENGINE=ROCKSDB PARTITION BY KEY(pk) PARTITIONS 4; Warnings: Warning 1287 The partition engine, used by table 'test.t2', is deprecated and will be removed in a future release. Please use native partitioning instead. -Expect errors that we are missing two .frm files - RocksDB: Schema mismatch - Table test.t1 is registered in RocksDB but does not have a .frm file - RocksDB: Schema mismatch - Table test.t2 is registered in RocksDB but does not have a .frm file -Expect an error that we have an extra .frm file - RocksDB: Schema mismatch - A .frm file exists for table test.t1_dummy, but that table is not registered in RocksDB +# restart +# restart:--log-error=MYSQLTEST_VARDIR/tmp/validate_datadic.err --rocksdb_validate_tables=2 +"Expect errors that we are missing two .frm files" +# restart:--log-error=MYSQLTEST_VARDIR/tmp/validate_datadic.err --rocksdb_validate_tables=2 +"Expect an error that we have an extra .frm file" +# restart DROP TABLE t1, t2; diff --git a/mysql-test/suite/rocksdb/t/validate_datadic.test b/mysql-test/suite/rocksdb/t/validate_datadic.test index 0e1aafe42bf6..71444be668b7 100644 --- a/mysql-test/suite/rocksdb/t/validate_datadic.test +++ b/mysql-test/suite/rocksdb/t/validate_datadic.test @@ -12,84 +12,55 @@ CREATE TABLE t1 (pk int primary key) ENGINE=ROCKSDB; CREATE TABLE t2 (pk int primary key) ENGINE=ROCKSDB PARTITION BY KEY(pk) PARTITIONS 4; -# Write file to make mysql-test-run.pl expect the "crash", but don't restart the -# server until it is told to ---let $_server_id= `SELECT @@server_id` ---let $_expect_file_name= $MYSQLTEST_VARDIR/tmp/mysqld.$_server_id.expect ---exec echo "wait" >$_expect_file_name +--source include/restart_mysqld.inc -# Send shutdown to the connected server and give it 10 seconds to die before -# zapping it -shutdown_server 10; +--source include/shutdown_mysqld.inc -# Write file to make mysql-test-run.pl start up the server again ---exec echo "restart" >$_expect_file_name ---sleep 5 - -# Turn on reconnect ---enable_reconnect - -# Call script that will poll the server waiting for it to be back online again ---source include/wait_until_connected_again.inc - -# Turn off reconnect again ---disable_reconnect - -# Now shut down again and rename one of the .frm files ---exec echo "wait" >$_expect_file_name -shutdown_server 10; - -# Clear the log ---exec echo "" >$MYSQLTEST_VARDIR/log/mysqld.1.err +--let LOG=$MYSQLTEST_VARDIR/tmp/validate_datadic.err # Rename the file ---exec mv $MYSQLTEST_VARDIR/mysqld.1/data/test/t1.frm $MYSQLTEST_VARDIR/mysqld.1/data/test/t1.frm.tmp ---exec mv $MYSQLTEST_VARDIR/mysqld.1/data/test/t2.frm $MYSQLTEST_VARDIR/mysqld.1/data/test/t2.frm.tmp +--move_file $MYSQLTEST_VARDIR/mysqld.1/data/test/t1.frm $MYSQLTEST_VARDIR/mysqld.1/data/test/t1.frm.tmp +--move_file $MYSQLTEST_VARDIR/mysqld.1/data/test/t2.frm $MYSQLTEST_VARDIR/mysqld.1/data/test/t2.frm.tmp # Attempt to restart the server ---exec echo "restart:--rocksdb_validate_tables=2" >$_expect_file_name ---sleep 5 - ---enable_reconnect ---source include/wait_until_connected_again.inc ---disable_reconnect +--let $restart_parameters=restart:--log-error=$LOG --rocksdb_validate_tables=2 +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--source include/start_mysqld.inc # We should now have an error message ---exec echo "Expect errors that we are missing two .frm files" ---exec grep "Schema mismatch" $MYSQLTEST_VARDIR/log/mysqld.1.err | cut -d] -f2 +--echo "Expect errors that we are missing two .frm files" +--let SEARCH_FILE=$LOG +--let SEARCH_PATTERN=Schema mismatch +--source include/search_pattern_in_file.inc # Now shut down again and rename one the .frm file back and make a copy of it ---exec echo "wait" >$_expect_file_name -shutdown_server 10; +--source include/shutdown_mysqld.inc # Clear the log ---exec echo "" >$MYSQLTEST_VARDIR/log/mysqld.1.err +--remove_file $LOG # Rename the file ---exec mv $MYSQLTEST_VARDIR/mysqld.1/data/test/t1.frm.tmp $MYSQLTEST_VARDIR/mysqld.1/data/test/t1.frm ---exec mv $MYSQLTEST_VARDIR/mysqld.1/data/test/t2.frm.tmp $MYSQLTEST_VARDIR/mysqld.1/data/test/t2.frm ---exec cp $MYSQLTEST_VARDIR/mysqld.1/data/test/t1.frm $MYSQLTEST_VARDIR/mysqld.1/data/test/t1_dummy.frm +--move_file $MYSQLTEST_VARDIR/mysqld.1/data/test/t1.frm.tmp $MYSQLTEST_VARDIR/mysqld.1/data/test/t1.frm +--move_file $MYSQLTEST_VARDIR/mysqld.1/data/test/t2.frm.tmp $MYSQLTEST_VARDIR/mysqld.1/data/test/t2.frm +--copy_file $MYSQLTEST_VARDIR/mysqld.1/data/test/t1.frm $MYSQLTEST_VARDIR/mysqld.1/data/test/t1_dummy.frm # Attempt to restart the server ---exec echo "restart:--rocksdb_validate_tables=2" >$_expect_file_name ---sleep 5 - ---enable_reconnect ---source include/wait_until_connected_again.inc ---disable_reconnect +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--source include/start_mysqld.inc # We should now have an error message for the second case ---exec echo "Expect an error that we have an extra .frm file" ---exec grep "Schema mismatch" $MYSQLTEST_VARDIR/log/mysqld.1.err | cut -d] -f2 +--echo "Expect an error that we have an extra .frm file" +--let SEARCH_FILE=$LOG +--let SEARCH_PATTERN=Schema mismatch +--source include/search_pattern_in_file.inc # Shut down an clean up ---exec echo "wait" >$_expect_file_name -shutdown_server 10; ---exec echo "" >$MYSQLTEST_VARDIR/log/mysqld.1.err ---exec rm $MYSQLTEST_VARDIR/mysqld.1/data/test/t1_dummy.frm ---exec echo "restart" >$_expect_file_name ---enable_reconnect ---source include/wait_until_connected_again.inc ---disable_reconnect +--source include/shutdown_mysqld.inc + +--remove_file $LOG +--remove_file $MYSQLTEST_VARDIR/mysqld.1/data/test/t1_dummy.frm + +--let $restart_parameters= +--source include/start_mysqld.inc DROP TABLE t1, t2; From 9b7424f4625bf96ecdb28848d4e37435ac212f9b Mon Sep 17 00:00:00 2001 From: Sreeharsha Ramanavarapu Date: Tue, 20 Feb 2018 09:51:14 +0530 Subject: [PATCH 0577/1221] Bug #27460607: INCORRECT BEHAVIOR OF IODKU WHEN INSERT SELECT's SOURCE TABLE IS EMPTY Issue: ------ When the VALUES part of ON DUPLICATE KEY UPDATE contains a BLOB value, it is handled using the LEX::insert_update_values_map. The issue in this bug is similar to the one in Bug #25361251. LEX::insert_update_values_map is initialized but not freed. This is because in an INSERT...SELECT statement, if the SELECT part doesn't produce any rows, write_record() isn't called. Solution: --------- As part of the fix for Bug #25361251, I added LEX::clear_values_map() to write_record(). But a better place to do the cleanup would be the end of the functions Sql_cmd_insert_select::execute and Sql_cmd_insert::execute. This will make the design more similar to 8.0/trunk of having LEX::clear_values_map() at the end of Sql_cmd_dml::execute(). --- sql/sql_insert.cc | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index 0509e8872f72..4669a5204d9b 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -1902,7 +1902,6 @@ int write_record(THD *thd, TABLE *table, COPY_INFO *info, COPY_INFO *update) thd->get_transaction()->mark_modified_non_trans_table( Transaction_ctx::STMT); free_root(&mem_root, MYF(0)); - thd->lex->clear_values_map(); DBUG_RETURN(trg_error); err: @@ -1922,7 +1921,6 @@ int write_record(THD *thd, TABLE *table, COPY_INFO *info, COPY_INFO *update) my_safe_afree(key, table->s->max_unique_length, MAX_KEY_LENGTH); table->column_bitmaps_set(save_read_set, save_write_set); free_root(&mem_root, MYF(0)); - thd->lex->clear_values_map(); DBUG_RETURN(1); } @@ -3130,6 +3128,8 @@ bool Sql_cmd_insert::execute(THD *thd) DBUG_ASSERT(!debug_sync_set_action(current_thd, STRING_WITH_LEN(act))); };); + + thd->lex->clear_values_map(); return res; } @@ -3223,6 +3223,7 @@ bool Sql_cmd_insert_select::execute(THD *thd) thd->first_successful_insert_id_in_cur_stmt= thd->first_successful_insert_id_in_prev_stmt; + thd->lex->clear_values_map(); return res; } From 5060e22e1dbd37b7fd3b370bebf3663467142ddd Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Mon, 19 Feb 2018 15:56:26 +0100 Subject: [PATCH 0578/1221] PS-1096: destroy PSI objects when removing thread from pool --- sql/threadpool_common.cc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sql/threadpool_common.cc b/sql/threadpool_common.cc index 9b7bf6eb69aa..c91c04597534 100644 --- a/sql/threadpool_common.cc +++ b/sql/threadpool_common.cc @@ -208,6 +208,10 @@ void threadpool_remove_connection(THD *thd) thd->release_resources(); +#ifdef HAVE_PSI_THREAD_INTERFACE + PSI_THREAD_CALL(delete_thread)(thd->get_psi()); +#endif + Global_THD_manager::get_instance()->remove_thd(thd); Connection_handler_manager::dec_connection_count(false); delete thd; From 0fd743421cf0c91f08395d20a6d277c2a8f3097f Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Tue, 20 Feb 2018 14:57:05 +0530 Subject: [PATCH 0579/1221] From 4151c392ca9c36cd8f4a070023ad3e77817cc948 Mon Sep 17 00:00:00 2001 From: Robert Golebiowski Date: Tue, 20 Feb 2018 10:29:52 +0100 Subject: [PATCH 0580/1221] PS-3848: macOS build broken, undefined symbol __db_keyword_, referenced from binary_log::Log_event_header::Log_event_header binlog_event.cpp as a part of libbinlogevent should not depend on mtr debug variables and thus on my_dbug.h. Created binary_log_debug::debug_expect_unknown_event variable which value depends on the value of mtr debug variable expect_Unknown_event. This is the correct way to make binlog_event.cpp not depend on my_dbug.h --- client/mysqlbinlog.cc | 3 +++ libbinlogevents/include/debug_vars.h | 1 + libbinlogevents/src/binlog_event.cpp | 7 +++++-- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/client/mysqlbinlog.cc b/client/mysqlbinlog.cc index 364e76ff1387..14ad23301bed 100644 --- a/client/mysqlbinlog.cc +++ b/client/mysqlbinlog.cc @@ -3196,6 +3196,9 @@ static Exit_status dump_local_log_entries(PRINT_EVENT_INFO *print_event_info, char llbuff[21]; my_off_t old_off = my_b_tell(file); + binary_log_debug::debug_expect_unknown_event= + DBUG_EVALUATE_IF("expect_Unknown_event", true, false); + Log_event* ev = Log_event::read_log_event(file, glob_description_event, opt_verify_binlog_checksum, rewrite_db_filter); diff --git a/libbinlogevents/include/debug_vars.h b/libbinlogevents/include/debug_vars.h index 557d87b4a5d3..ba2009ae5341 100644 --- a/libbinlogevents/include/debug_vars.h +++ b/libbinlogevents/include/debug_vars.h @@ -30,6 +30,7 @@ namespace binary_log_debug extern bool debug_query_mts_corrupt_db_names; extern bool debug_simulate_invalid_address; extern bool debug_pretend_version_50034_in_binlog; + extern bool debug_expect_unknown_event; // TODO(WL#7546):Add variables here as we move methods into libbinlogevent // from the server while implementing the WL#7546(Moving binlog event // encoding into a separate package) diff --git a/libbinlogevents/src/binlog_event.cpp b/libbinlogevents/src/binlog_event.cpp index 36b62b1fd8e8..3e84f1275bf5 100644 --- a/libbinlogevents/src/binlog_event.cpp +++ b/libbinlogevents/src/binlog_event.cpp @@ -19,7 +19,6 @@ #include #include -#include "my_dbug.h" const unsigned char checksum_version_split[3]= {5, 6, 1}; const unsigned long checksum_version_product= @@ -33,6 +32,7 @@ namespace binary_log_debug bool debug_checksum_test= false; bool debug_simulate_invalid_address= false; bool debug_pretend_version_50034_in_binlog= false; + bool debug_expect_unknown_event= false; } namespace binary_log @@ -199,7 +199,10 @@ Log_event_header(const char* buf, uint16_t binlog_version) // The below type_code assert is correct and needed in 99% of time. In normal testing we do not // anticipate type_code to be of unknown value. This is why we only skip this assert when // debug variable expect_Unknown_event is set. - DBUG_EXECUTE_IF("expect_Unknown_event", return;); +#ifndef DBUG_OFF + if (binary_log_debug::debug_expect_unknown_event) + return; +#endif BAPI_ASSERT(type_code < ENUM_END_EVENT || flags & LOG_EVENT_IGNORABLE_F); } From 89307a768b6962f68dd2ff60c4175b2d7740cc76 Mon Sep 17 00:00:00 2001 From: Balasubramanian Kandasamy Date: Tue, 20 Feb 2018 17:01:17 +0530 Subject: [PATCH 0581/1221] Bug#27484835 - MARIADB TO COMMUNITY PACKAGE UPGRADE FAILING ON FC27 - Due to changes in packages, add more obsoletes to server package. --- packaging/rpm-fedora/mysql.spec.in | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packaging/rpm-fedora/mysql.spec.in b/packaging/rpm-fedora/mysql.spec.in index a5e407c0d4a5..d0621571cf1a 100644 --- a/packaging/rpm-fedora/mysql.spec.in +++ b/packaging/rpm-fedora/mysql.spec.in @@ -161,7 +161,13 @@ Requires: mysql-community-common%{?_isa} = %{version}-%{release} Obsoletes: mysql-community-bench < 5.7.8 Obsoletes: community-mysql-bench Obsoletes: mysql-bench +Obsoletes: mariadb-backup Obsoletes: mariadb-bench +Obsoletes: mariadb-cracklib-password-check +Obsoletes: mariadb-gssapi-server +Obsoletes: mariadb-rocksdb-engine +Obsoletes: mariadb-sphinx-engine +Obsoletes: mariadb-tokudb-engine Obsoletes: mariadb-server Obsoletes: mariadb-server-utils Obsoletes: mariadb-galera-server From b337c106985e77ef71321a181e9ec7995d0cad21 Mon Sep 17 00:00:00 2001 From: Sergei Glushchenko Date: Tue, 12 Sep 2017 16:23:40 +0700 Subject: [PATCH 0582/1221] PS-3821: InnoDB temporary tablespace encryption Add new global dynamic variable `innodb_temp_tablespace_encrypt=ON/OF'. When it is turned on, server starts to encrypt temporary tablespace and temporary InnoDB file-per-table tablespaces. Option does not force encryption of temp tables which are currently opened, it doesn't rebuild system temporary tablespace to encrypt data which already written. Since temp tablespace created fresh at each server startup, it will not contain unencrypted data if this option specified as server argument. Turning this option off at runtime makes server to create all subsequent temporary file-per-table tablespaces unencrypted, but does not turn off encryption of system temporary tablespace. To use this option, keyring plugin must be loaded. If keyring plugin is not available, server will give error message and refuse to create new temp tables. --- .../include/kill_and_restart_mysqld.inc | 10 +- .../innodb/include/temp_table_encrypt.inc | 158 ++++++++++++++++++ .../innodb/r/temp_table_encrypt_debug.result | 12 ++ .../r/temp_table_encrypt_keyring_file.result | 57 +++++++ .../t/temp_table_encrypt_debug-master.opt | 3 + .../innodb/t/temp_table_encrypt_debug.test | 50 ++++++ ...temp_table_encrypt_keyring_file-master.opt | 3 + .../t/temp_table_encrypt_keyring_file.test | 7 + .../suite/perfschema/t/show_sanity.test | 2 + .../innodb_master_encrypt_debug_basic.result | 38 +++++ ...nnodb_temp_tablespace_encrypt_basic.result | 61 +++++++ .../t/innodb_master_encrypt_debug_basic.test | 11 ++ .../innodb_temp_tablespace_encrypt_basic.test | 57 +++++++ ...emp_table_encrypt_keyring_vault-master.opt | 2 + .../temp_table_encrypt_keyring_vault.result | 60 +++++++ .../mtr/temp_table_encrypt_keyring_vault.test | 27 +++ storage/innobase/dict/dict0crea.cc | 3 +- storage/innobase/fil/fil0fil.cc | 68 +++++--- storage/innobase/fsp/fsp0fsp.cc | 55 +++++- storage/innobase/handler/ha_innodb.cc | 56 ++++++- storage/innobase/include/fsp0fsp.h | 8 + storage/innobase/include/fsp0sysspace.h | 12 ++ storage/innobase/include/os0file.h | 5 + storage/innobase/include/srv0srv.h | 6 + storage/innobase/os/os0file.cc | 42 +++++ storage/innobase/srv/srv0srv.cc | 74 ++++++++ storage/innobase/srv/srv0start.cc | 13 ++ 27 files changed, 866 insertions(+), 34 deletions(-) create mode 100644 mysql-test/suite/innodb/include/temp_table_encrypt.inc create mode 100644 mysql-test/suite/innodb/r/temp_table_encrypt_debug.result create mode 100644 mysql-test/suite/innodb/r/temp_table_encrypt_keyring_file.result create mode 100644 mysql-test/suite/innodb/t/temp_table_encrypt_debug-master.opt create mode 100644 mysql-test/suite/innodb/t/temp_table_encrypt_debug.test create mode 100644 mysql-test/suite/innodb/t/temp_table_encrypt_keyring_file-master.opt create mode 100644 mysql-test/suite/innodb/t/temp_table_encrypt_keyring_file.test create mode 100644 mysql-test/suite/sys_vars/r/innodb_master_encrypt_debug_basic.result create mode 100644 mysql-test/suite/sys_vars/r/innodb_temp_tablespace_encrypt_basic.result create mode 100644 mysql-test/suite/sys_vars/t/innodb_master_encrypt_debug_basic.test create mode 100644 mysql-test/suite/sys_vars/t/innodb_temp_tablespace_encrypt_basic.test create mode 100644 plugin/keyring_vault/tests/mtr/temp_table_encrypt_keyring_vault-master.opt create mode 100644 plugin/keyring_vault/tests/mtr/temp_table_encrypt_keyring_vault.result create mode 100644 plugin/keyring_vault/tests/mtr/temp_table_encrypt_keyring_vault.test diff --git a/mysql-test/include/kill_and_restart_mysqld.inc b/mysql-test/include/kill_and_restart_mysqld.inc index b67fb7350b4f..d78b836c4933 100644 --- a/mysql-test/include/kill_and_restart_mysqld.inc +++ b/mysql-test/include/kill_and_restart_mysqld.inc @@ -6,7 +6,15 @@ if (!$restart_parameters) --let $_server_id= `SELECT @@server_id` --let $_expect_file_name= $MYSQLTEST_VARDIR/tmp/mysqld.$_server_id.expect ---echo # Kill and $restart_parameters +if (!$restart_hide_args) +{ + --echo # Kill and $restart_parameters +} +if ($restart_hide_args) +{ + --echo # Kill and restart: + let $restart_hide_args=; +} --exec echo "$restart_parameters" > $_expect_file_name --shutdown_server 0 --source include/wait_until_disconnected.inc diff --git a/mysql-test/suite/innodb/include/temp_table_encrypt.inc b/mysql-test/suite/innodb/include/temp_table_encrypt.inc new file mode 100644 index 000000000000..bf412a716bd9 --- /dev/null +++ b/mysql-test/suite/innodb/include/temp_table_encrypt.inc @@ -0,0 +1,158 @@ +# test temporary tables encryption + +--let $MYSQL_DATA_DIR= `select @@datadir` + +# we need restart to make sure keyring settings are picked up +let $restart_hide_args = 1; +let $restart_parameters = $KEYRING_RESTART_PARAM --innodb_max_dirty_pages_pct=0; +--source include/restart_mysqld.inc + +CREATE TEMPORARY TABLE t01 (a TEXT) ENGINE=InnoDB; +INSERT INTO t01 VALUES ('Lorem ipsum dolor sit amet, consectetur adipiscing elit'); + +# wait until pages flushed +--let $wait_condition= SELECT variable_value = 0 FROM performance_schema.global_status WHERE LOWER(variable_name) = 'innodb_buffer_pool_pages_dirty' +--source include/wait_condition.inc + +# make sure ibtmp1 is not encrypted + +--let $grep_pattern= Lorem ipsum dolor sit amet +--let $grep_file= $MYSQL_DATA_DIR/ibtmp1 +--let $grep_output= boolean +--source include/grep_pattern.inc + + +# this table created in separate file per table tablespace, make sure it not +# encrypted +CREATE TEMPORARY TABLE t04 (a TEXT) ENGINE=InnoDB ROW_FORMAT=COMPRESSED; +INSERT INTO t04 VALUES ('Praesent tristique eros a tempus fringilla'); + +# wait until pages flushed +--let $wait_condition= SELECT variable_value = 0 FROM performance_schema.global_status WHERE LOWER(variable_name) = 'innodb_buffer_pool_pages_dirty' +--source include/wait_condition.inc + +--let $t04_fn= `SELECT CONCAT(@@tmpdir, '/', NAME, '.ibd') FROM INFORMATION_SCHEMA.INNODB_TEMP_TABLE_INFO WHERE NAME LIKE '#%';` + +# make sure t04 is not encrypted + +--let $grep_pattern= Praesent tristique eros a tempus fringilla +--let $grep_file= $t04_fn +--let $grep_output= boolean +--source include/grep_pattern.inc + +DROP TABLE t04; + +SET GLOBAL innodb_temp_tablespace_encrypt = ON; + +--let $innodb_master_loops= `SELECT SUM(VARIABLE_VALUE) FROM performance_schema.global_status WHERE VARIABLE_NAME LIKE 'innodb_master%loops'` + +# wait for couple of master thread turnarounds +--let $wait_condition= SELECT SUM(VARIABLE_VALUE) > $innodb_master_loops + 2 FROM performance_schema.global_status WHERE VARIABLE_NAME LIKE 'innodb_master%loops' +--source include/wait_condition.inc + +--error ER_ILLEGAL_HA_CREATE_OPTION +CREATE TEMPORARY TABLE t02 (a INT) ENGINE=InnoDB ENCRYPTION='Y'; + +CREATE TEMPORARY TABLE t03 (a TEXT) ENGINE=InnoDB ENCRYPTION='N'; +INSERT INTO t03 VALUES ('Curabitur laoreet, velit non interdum venenatis'); + +# wait until pages flushed +--let $wait_condition= SELECT variable_value = 0 FROM performance_schema.global_status WHERE LOWER(variable_name) = 'innodb_buffer_pool_pages_dirty' +--source include/wait_condition.inc + +# make sure ibtmp1 is encrypted now + +--let $grep_pattern= Curabitur laoreet, velit non interdum venenatis +--let $grep_file= $MYSQL_DATA_DIR/ibtmp1 +--let $grep_output= boolean +--source include/grep_pattern.inc + +# this table created in separate file per table tablespace, make sure it is +# encrypted as well +CREATE TEMPORARY TABLE t04 (a TEXT) ENGINE=InnoDB ROW_FORMAT=COMPRESSED; +INSERT INTO t04 VALUES ('Praesent tristique eros a tempus fringilla'); + +# wait until pages flushed +--let $wait_condition= SELECT variable_value = 0 FROM performance_schema.global_status WHERE LOWER(variable_name) = 'innodb_buffer_pool_pages_dirty' +--source include/wait_condition.inc + +--let $t04_fn= `SELECT CONCAT(@@tmpdir, '/', NAME, '.ibd') FROM INFORMATION_SCHEMA.INNODB_TEMP_TABLE_INFO WHERE NAME LIKE '#%';` + +# make sure t04 is encrypted + +--let $grep_pattern= Praesent tristique eros a tempus fringilla +--let $grep_file= $t04_fn +--let $grep_output= boolean +--source include/grep_pattern.inc + +--error ER_ILLEGAL_HA_CREATE_OPTION +CREATE TEMPORARY TABLE t05 (a INT) ENGINE=InnoDB ROW_FORMAT=COMPRESSED ENCRYPTION='y'; + +CREATE TEMPORARY TABLE t06 (a INT) ENGINE=InnoDB ROW_FORMAT=COMPRESSED ENCRYPTION='n'; +INSERT INTO t06 VALUES (1), (2), (3); + +# test that we can turn encryption OFF and ON + +SET GLOBAL innodb_temp_tablespace_encrypt = OFF; + +CREATE TEMPORARY TABLE t07 (a INT) ENGINE=InnoDB; +INSERT INTO t07 VALUES (1), (2), (3); + +SET GLOBAL innodb_temp_tablespace_encrypt = ON; + +# create large enough table in order to make CREATE INDEX to use temporary table +CREATE TABLE t10 (a INT AUTO_INCREMENT PRIMARY KEY, b INT); +INSERT INTO t10 (b) VALUES (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)); +INSERT INTO t10 (b) VALUES (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)); +INSERT INTO t10 (b) VALUES (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)); +INSERT INTO t10 (b) VALUES (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)); +INSERT INTO t10 (b) VALUES (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)); +INSERT INTO t10 (b) VALUES (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)); +INSERT INTO t10 (b) VALUES (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)); +INSERT INTO t10 (b) VALUES (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)); +INSERT INTO t10 (b) VALUES (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)); +INSERT INTO t10 (b) VALUES (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)); + +INSERT INTO t10 (b) SELECT b FROM t10; +INSERT INTO t10 (b) SELECT b FROM t10; +INSERT INTO t10 (b) SELECT b FROM t10; +INSERT INTO t10 (b) SELECT b FROM t10; + +CREATE INDEX t10_b ON t10 (b); +DROP INDEX t10_b ON t10; + +CREATE INDEX t10_b ON t10 (b) ALGORITHM=COPY; +DROP INDEX t10_b ON t10 ALGORITHM=COPY; + +# test restarting +let $restart_hide_args = 1; +let $restart_parameters = $KEYRING_RESTART_PARAM --innodb-temp-tablespace-encrypt --innodb_max_dirty_pages_pct=0; +--source include/restart_mysqld.inc + +CREATE TEMPORARY TABLE t01 (a INT) ENGINE=InnoDB; +INSERT INTO t01 VALUES (1), (2), (3); + +# test crashing +let $restart_hide_args = 1; +let $restart_parameters = $KEYRING_RESTART_PARAM --innodb-temp-tablespace-encrypt --innodb_max_dirty_pages_pct=0; +--source include/kill_and_restart_mysqld.inc + +CREATE TEMPORARY TABLE t01 (a INT) ENGINE=InnoDB; +INSERT INTO t01 VALUES (1), (2), (3); + +# and able to startup without keyring plugin +let $restart_hide_args = 1; +let $restart_parameters = ; +--source include/restart_mysqld.inc + +CREATE TEMPORARY TABLE t01 (a INT) ENGINE=InnoDB; +INSERT INTO t01 VALUES (1), (2), (3); + +let $restart_hide_args = 1; +let $restart_parameters = $KEYRING_RESTART_PARAM --innodb-temp-tablespace-encrypt --innodb_max_dirty_pages_pct=0; +--source include/restart_mysqld.inc + +CREATE TEMPORARY TABLE t01 (a INT) ENGINE=InnoDB; +INSERT INTO t01 VALUES (1), (2), (3); + +DROP TABLE t10; diff --git a/mysql-test/suite/innodb/r/temp_table_encrypt_debug.result b/mysql-test/suite/innodb/r/temp_table_encrypt_debug.result new file mode 100644 index 000000000000..6346f69b8486 --- /dev/null +++ b/mysql-test/suite/innodb/r/temp_table_encrypt_debug.result @@ -0,0 +1,12 @@ +CREATE TEMPORARY TABLE t01 (a INT) ENGINE=InnoDB; +INSERT INTO t01 VALUES (1), (2), (3); +SET GLOBAL innodb_master_encrypt_debug = 1; +SET GLOBAL innodb_temp_tablespace_encrypt = ON; +CREATE TEMPORARY TABLE t01 (a INT) ENGINE=InnoDB; +INSERT INTO t01 VALUES (1), (2), (3); +CREATE TEMPORARY TABLE t01 (a INT) ENGINE=InnoDB; +INSERT INTO t01 VALUES (1), (2), (3); +SET GLOBAL innodb_master_encrypt_debug = 0; +CREATE TEMPORARY TABLE t01 (a INT) ENGINE=InnoDB; +INSERT INTO t01 VALUES (1), (2), (3); +SET GLOBAL innodb_temp_tablespace_encrypt = OFF; diff --git a/mysql-test/suite/innodb/r/temp_table_encrypt_keyring_file.result b/mysql-test/suite/innodb/r/temp_table_encrypt_keyring_file.result new file mode 100644 index 000000000000..82daa27e8750 --- /dev/null +++ b/mysql-test/suite/innodb/r/temp_table_encrypt_keyring_file.result @@ -0,0 +1,57 @@ +# restart: +CREATE TEMPORARY TABLE t01 (a TEXT) ENGINE=InnoDB; +INSERT INTO t01 VALUES ('Lorem ipsum dolor sit amet, consectetur adipiscing elit'); +Pattern found. +CREATE TEMPORARY TABLE t04 (a TEXT) ENGINE=InnoDB ROW_FORMAT=COMPRESSED; +INSERT INTO t04 VALUES ('Praesent tristique eros a tempus fringilla'); +Pattern found. +DROP TABLE t04; +SET GLOBAL innodb_temp_tablespace_encrypt = ON; +CREATE TEMPORARY TABLE t02 (a INT) ENGINE=InnoDB ENCRYPTION='Y'; +ERROR HY000: InnoDB: Unsupported encryption option for temporary tables. +CREATE TEMPORARY TABLE t03 (a TEXT) ENGINE=InnoDB ENCRYPTION='N'; +INSERT INTO t03 VALUES ('Curabitur laoreet, velit non interdum venenatis'); +Pattern not found. +CREATE TEMPORARY TABLE t04 (a TEXT) ENGINE=InnoDB ROW_FORMAT=COMPRESSED; +INSERT INTO t04 VALUES ('Praesent tristique eros a tempus fringilla'); +Pattern not found. +CREATE TEMPORARY TABLE t05 (a INT) ENGINE=InnoDB ROW_FORMAT=COMPRESSED ENCRYPTION='y'; +ERROR HY000: InnoDB: Unsupported encryption option for temporary tables. +CREATE TEMPORARY TABLE t06 (a INT) ENGINE=InnoDB ROW_FORMAT=COMPRESSED ENCRYPTION='n'; +INSERT INTO t06 VALUES (1), (2), (3); +SET GLOBAL innodb_temp_tablespace_encrypt = OFF; +CREATE TEMPORARY TABLE t07 (a INT) ENGINE=InnoDB; +INSERT INTO t07 VALUES (1), (2), (3); +SET GLOBAL innodb_temp_tablespace_encrypt = ON; +CREATE TABLE t10 (a INT AUTO_INCREMENT PRIMARY KEY, b INT); +INSERT INTO t10 (b) VALUES (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)); +INSERT INTO t10 (b) VALUES (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)); +INSERT INTO t10 (b) VALUES (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)); +INSERT INTO t10 (b) VALUES (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)); +INSERT INTO t10 (b) VALUES (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)); +INSERT INTO t10 (b) VALUES (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)); +INSERT INTO t10 (b) VALUES (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)); +INSERT INTO t10 (b) VALUES (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)); +INSERT INTO t10 (b) VALUES (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)); +INSERT INTO t10 (b) VALUES (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)); +INSERT INTO t10 (b) SELECT b FROM t10; +INSERT INTO t10 (b) SELECT b FROM t10; +INSERT INTO t10 (b) SELECT b FROM t10; +INSERT INTO t10 (b) SELECT b FROM t10; +CREATE INDEX t10_b ON t10 (b); +DROP INDEX t10_b ON t10; +CREATE INDEX t10_b ON t10 (b) ALGORITHM=COPY; +DROP INDEX t10_b ON t10 ALGORITHM=COPY; +# restart: +CREATE TEMPORARY TABLE t01 (a INT) ENGINE=InnoDB; +INSERT INTO t01 VALUES (1), (2), (3); +# Kill and restart: +CREATE TEMPORARY TABLE t01 (a INT) ENGINE=InnoDB; +INSERT INTO t01 VALUES (1), (2), (3); +# restart: +CREATE TEMPORARY TABLE t01 (a INT) ENGINE=InnoDB; +INSERT INTO t01 VALUES (1), (2), (3); +# restart: +CREATE TEMPORARY TABLE t01 (a INT) ENGINE=InnoDB; +INSERT INTO t01 VALUES (1), (2), (3); +DROP TABLE t10; diff --git a/mysql-test/suite/innodb/t/temp_table_encrypt_debug-master.opt b/mysql-test/suite/innodb/t/temp_table_encrypt_debug-master.opt new file mode 100644 index 000000000000..f16c3ca66e87 --- /dev/null +++ b/mysql-test/suite/innodb/t/temp_table_encrypt_debug-master.opt @@ -0,0 +1,3 @@ +--early-plugin-load="keyring_file=$KEYRING_PLUGIN" +--loose-keyring_file_data=$MYSQL_TMP_DIR/ts_encrypt_keyring +$KEYRING_PLUGIN_OPT diff --git a/mysql-test/suite/innodb/t/temp_table_encrypt_debug.test b/mysql-test/suite/innodb/t/temp_table_encrypt_debug.test new file mode 100644 index 000000000000..b732beca8767 --- /dev/null +++ b/mysql-test/suite/innodb/t/temp_table_encrypt_debug.test @@ -0,0 +1,50 @@ +--source include/have_innodb.inc +--source include/have_debug.inc + +--source include/count_sessions.inc + +connect (other1,localhost,root,,test); +connection other1; + +CREATE TEMPORARY TABLE t01 (a INT) ENGINE=InnoDB; +INSERT INTO t01 VALUES (1), (2), (3); + +connection default; + +SET GLOBAL innodb_master_encrypt_debug = 1; + +SET GLOBAL innodb_temp_tablespace_encrypt = ON; + +# wait until master thread paused +--let $wait_condition= SELECT @@innodb_master_encrypt_debug = 2 +--source include/wait_condition.inc + +connect (other2,localhost,root,,test); +connection other2; + +CREATE TEMPORARY TABLE t01 (a INT) ENGINE=InnoDB; +INSERT INTO t01 VALUES (1), (2), (3); + +disconnect other2; + +connect (other2,localhost,root,,test); +connection other2; + +CREATE TEMPORARY TABLE t01 (a INT) ENGINE=InnoDB; +INSERT INTO t01 VALUES (1), (2), (3); + +connection default; + +# resume master thread +SET GLOBAL innodb_master_encrypt_debug = 0; + +disconnect other2; + +disconnect other1; + +CREATE TEMPORARY TABLE t01 (a INT) ENGINE=InnoDB; +INSERT INTO t01 VALUES (1), (2), (3); + +SET GLOBAL innodb_temp_tablespace_encrypt = OFF; + +--source include/wait_until_count_sessions.inc diff --git a/mysql-test/suite/innodb/t/temp_table_encrypt_keyring_file-master.opt b/mysql-test/suite/innodb/t/temp_table_encrypt_keyring_file-master.opt new file mode 100644 index 000000000000..f16c3ca66e87 --- /dev/null +++ b/mysql-test/suite/innodb/t/temp_table_encrypt_keyring_file-master.opt @@ -0,0 +1,3 @@ +--early-plugin-load="keyring_file=$KEYRING_PLUGIN" +--loose-keyring_file_data=$MYSQL_TMP_DIR/ts_encrypt_keyring +$KEYRING_PLUGIN_OPT diff --git a/mysql-test/suite/innodb/t/temp_table_encrypt_keyring_file.test b/mysql-test/suite/innodb/t/temp_table_encrypt_keyring_file.test new file mode 100644 index 000000000000..4e65ea057760 --- /dev/null +++ b/mysql-test/suite/innodb/t/temp_table_encrypt_keyring_file.test @@ -0,0 +1,7 @@ +# test temporary tables encryption with keyring_file plugin + +--source include/have_innodb.inc + +let $keyring_restart_param = restart: --early-plugin-load="keyring_file=$KEYRING_PLUGIN" --loose-keyring_file_data=$MYSQL_TMP_DIR/ts_encrypt_keyring $KEYRING_PLUGIN_OPT; + +--source suite/innodb/include/temp_table_encrypt.inc diff --git a/mysql-test/suite/perfschema/t/show_sanity.test b/mysql-test/suite/perfschema/t/show_sanity.test index d0a94e5f03ed..86d654eae65a 100644 --- a/mysql-test/suite/perfschema/t/show_sanity.test +++ b/mysql-test/suite/perfschema/t/show_sanity.test @@ -478,6 +478,8 @@ insert into test.sanity values ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_LOG_GROUP_HOME_DIR"), ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_LOG_WRITE_AHEAD_SIZE"), ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_LRU_SCAN_DEPTH"), + ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_MASTER_ENCRYPT_DEBUG"), + ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_TEMP_TABLESPACE_ENCRYPT"), ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_MASTER_THREAD_DISABLED_DEBUG"), ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_MAX_BITMAP_FILE_SIZE"), ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_MAX_CHANGED_PAGES"), diff --git a/mysql-test/suite/sys_vars/r/innodb_master_encrypt_debug_basic.result b/mysql-test/suite/sys_vars/r/innodb_master_encrypt_debug_basic.result new file mode 100644 index 000000000000..cde7b91de2ad --- /dev/null +++ b/mysql-test/suite/sys_vars/r/innodb_master_encrypt_debug_basic.result @@ -0,0 +1,38 @@ +# +# Basic test for innodb_master_encrypt_debug +# +# Save default value. +SET @default_var_value = @@GLOBAL.innodb_master_encrypt_debug; +SELECT @@GLOBAL.innodb_master_encrypt_debug; +@@GLOBAL.innodb_master_encrypt_debug +0 +# Try setting to 1. +SET @@GLOBAL.innodb_master_encrypt_debug = 1; +SELECT @@GLOBAL.innodb_master_encrypt_debug; +@@GLOBAL.innodb_master_encrypt_debug +1 +# Try setting to 0. +SET @@GLOBAL.innodb_master_encrypt_debug = 0; +SELECT @@GLOBAL.innodb_master_encrypt_debug; +@@GLOBAL.innodb_master_encrypt_debug +0 +# Try setting to 1 (again). +SET @@GLOBAL.innodb_master_encrypt_debug = 1; +SELECT @@GLOBAL.innodb_master_encrypt_debug; +@@GLOBAL.innodb_master_encrypt_debug +1 +# Try setting to 0 (again). +SET @@GLOBAL.innodb_master_encrypt_debug = 0; +SELECT @@GLOBAL.innodb_master_encrypt_debug; +@@GLOBAL.innodb_master_encrypt_debug +0 +# Check what happens if we set the same value as current. +SET @@GLOBAL.innodb_master_encrypt_debug = 1; +SET @@GLOBAL.innodb_master_encrypt_debug = 1; +SET @@GLOBAL.innodb_master_encrypt_debug = 0; +SET @@GLOBAL.innodb_master_encrypt_debug = 0; +# Try using variable as local. +SET innodb_master_encrypt_debug = 1; +ERROR HY000: Variable 'innodb_master_encrypt_debug' is a GLOBAL variable and should be set with SET GLOBAL +# Finished. Restore default value. +SET @@GLOBAL.innodb_master_encrypt_debug = @default_var_value; diff --git a/mysql-test/suite/sys_vars/r/innodb_temp_tablespace_encrypt_basic.result b/mysql-test/suite/sys_vars/r/innodb_temp_tablespace_encrypt_basic.result new file mode 100644 index 000000000000..958833719f14 --- /dev/null +++ b/mysql-test/suite/sys_vars/r/innodb_temp_tablespace_encrypt_basic.result @@ -0,0 +1,61 @@ +SET @start_global_value = @@global.innodb_temp_tablespace_encrypt; +SELECT @start_global_value; +@start_global_value +0 +SELECT @@global.innodb_temp_tablespace_encrypt IN (0, 1); +@@global.innodb_temp_tablespace_encrypt IN (0, 1) +1 +SELECT @@global.innodb_temp_tablespace_encrypt; +@@global.innodb_temp_tablespace_encrypt +0 +SELECT @@session.innodb_temp_tablespace_encrypt; +ERROR HY000: Variable 'innodb_temp_tablespace_encrypt' is a GLOBAL variable +SHOW GLOBAL VARIABLES LIKE 'innodb_temp_tablespace_encrypt'; +Variable_name Value +innodb_temp_tablespace_encrypt OFF +SHOW SESSION VARIABLES LIKE 'innodb_temp_tablespace_encrypt'; +Variable_name Value +innodb_temp_tablespace_encrypt OFF +SELECT * FROM performance_schema.global_variables WHERE variable_name = 'innodb_temp_tablespace_encrypt'; +VARIABLE_NAME VARIABLE_VALUE +innodb_temp_tablespace_encrypt OFF +SELECT * FROM performance_schema.session_variables WHERE variable_name = 'innodb_temp_tablespace_encrypt'; +VARIABLE_NAME VARIABLE_VALUE +innodb_temp_tablespace_encrypt OFF +SET GLOBAL innodb_temp_tablespace_encrypt = 1; +SELECT @@global.innodb_temp_tablespace_encrypt; +@@global.innodb_temp_tablespace_encrypt +0 +SELECT * FROM performance_schema.global_variables WHERE variable_name = 'innodb_temp_tablespace_encrypt'; +VARIABLE_NAME VARIABLE_VALUE +innodb_temp_tablespace_encrypt OFF +SELECT * FROM performance_schema.session_variables WHERE variable_name = 'innodb_temp_tablespace_encrypt'; +VARIABLE_NAME VARIABLE_VALUE +innodb_temp_tablespace_encrypt OFF +SET @@global.innodb_temp_tablespace_encrypt = 0; +SELECT @@global.innodb_temp_tablespace_encrypt; +@@global.innodb_temp_tablespace_encrypt +0 +SELECT * FROM performance_schema.global_variables WHERE variable_name = 'innodb_temp_tablespace_encrypt'; +VARIABLE_NAME VARIABLE_VALUE +innodb_temp_tablespace_encrypt OFF +SELECT * FROM performance_schema.session_variables WHERE variable_name = 'innodb_temp_tablespace_encrypt'; +VARIABLE_NAME VARIABLE_VALUE +innodb_temp_tablespace_encrypt OFF +SET SESSION innodb_temp_tablespace_encrypt = 'some'; +ERROR HY000: Variable 'innodb_temp_tablespace_encrypt' is a GLOBAL variable and should be set with SET GLOBAL +SET @@session.innodb_temp_tablespace_encrypt = 'some'; +ERROR HY000: Variable 'innodb_temp_tablespace_encrypt' is a GLOBAL variable and should be set with SET GLOBAL +SET GLOBAL innodb_temp_tablespace_encrypt = 1.1; +ERROR 42000: Incorrect argument type to variable 'innodb_temp_tablespace_encrypt' +SET GLOBAL innodb_temp_tablespace_encrypt = 'foo'; +ERROR 42000: Variable 'innodb_temp_tablespace_encrypt' can't be set to the value of 'foo' +SET GLOBAL innodb_temp_tablespace_encrypt = -2; +SET GLOBAL innodb_temp_tablespace_encrypt = 1e1; +ERROR 42000: Incorrect argument type to variable 'innodb_temp_tablespace_encrypt' +SET GLOBAL innodb_temp_tablespace_encrypt = 2; +ERROR 42000: Variable 'innodb_temp_tablespace_encrypt' can't be set to the value of '2' +SET @@global.innodb_temp_tablespace_encrypt = @start_global_value; +SELECT @@global.innodb_temp_tablespace_encrypt; +@@global.innodb_temp_tablespace_encrypt +0 diff --git a/mysql-test/suite/sys_vars/t/innodb_master_encrypt_debug_basic.test b/mysql-test/suite/sys_vars/t/innodb_master_encrypt_debug_basic.test new file mode 100644 index 000000000000..c9249a3be890 --- /dev/null +++ b/mysql-test/suite/sys_vars/t/innodb_master_encrypt_debug_basic.test @@ -0,0 +1,11 @@ +--source include/have_innodb.inc +--source include/have_debug.inc + +--echo # +--echo # Basic test for innodb_master_encrypt_debug +--echo # + +let $var_name = innodb_master_encrypt_debug; + +# it's integer, but boolean should test it well +--source suite/sys_vars/inc/global_boolean_var_basic.inc diff --git a/mysql-test/suite/sys_vars/t/innodb_temp_tablespace_encrypt_basic.test b/mysql-test/suite/sys_vars/t/innodb_temp_tablespace_encrypt_basic.test new file mode 100644 index 000000000000..fc97dce21c87 --- /dev/null +++ b/mysql-test/suite/sys_vars/t/innodb_temp_tablespace_encrypt_basic.test @@ -0,0 +1,57 @@ +--source include/have_innodb.inc + +--disable_query_log +call mtr.add_suppression("\\[ERROR\\] InnoDB: keyring error: please check that a keyring plugin is loaded."); +call mtr.add_suppression("\\[ERROR\\] InnoDB: Can't set temporary tablespace to be encrypted because keyring plugin is not available."); +--enable_query_log + +SET @start_global_value = @@global.innodb_temp_tablespace_encrypt; +SELECT @start_global_value; + +# +# exists as global only +# +SELECT @@global.innodb_temp_tablespace_encrypt IN (0, 1); +SELECT @@global.innodb_temp_tablespace_encrypt; +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +SELECT @@session.innodb_temp_tablespace_encrypt; +SHOW GLOBAL VARIABLES LIKE 'innodb_temp_tablespace_encrypt'; +SHOW SESSION VARIABLES LIKE 'innodb_temp_tablespace_encrypt'; +SELECT * FROM performance_schema.global_variables WHERE variable_name = 'innodb_temp_tablespace_encrypt'; +SELECT * FROM performance_schema.session_variables WHERE variable_name = 'innodb_temp_tablespace_encrypt'; + +# innodb_temp_tablespace_encrypt will flip back to 0 because keyring plugin isn't loaded +SET GLOBAL innodb_temp_tablespace_encrypt = 1; +let $wait_condition=SELECT @@global.innodb_temp_tablespace_encrypt = 0; +--source include/wait_condition.inc +SELECT @@global.innodb_temp_tablespace_encrypt; +SELECT * FROM performance_schema.global_variables WHERE variable_name = 'innodb_temp_tablespace_encrypt'; +SELECT * FROM performance_schema.session_variables WHERE variable_name = 'innodb_temp_tablespace_encrypt'; +SET @@global.innodb_temp_tablespace_encrypt = 0; +SELECT @@global.innodb_temp_tablespace_encrypt; +SELECT * FROM performance_schema.global_variables WHERE variable_name = 'innodb_temp_tablespace_encrypt'; +SELECT * FROM performance_schema.session_variables WHERE variable_name = 'innodb_temp_tablespace_encrypt'; +--error ER_GLOBAL_VARIABLE +SET SESSION innodb_temp_tablespace_encrypt = 'some'; +--error ER_GLOBAL_VARIABLE +SET @@session.innodb_temp_tablespace_encrypt = 'some'; + +# +# incorrect types +# +--error ER_WRONG_TYPE_FOR_VAR +SET GLOBAL innodb_temp_tablespace_encrypt = 1.1; +--error ER_WRONG_VALUE_FOR_VAR +SET GLOBAL innodb_temp_tablespace_encrypt = 'foo'; +SET GLOBAL innodb_temp_tablespace_encrypt = -2; +--error ER_WRONG_TYPE_FOR_VAR +SET GLOBAL innodb_temp_tablespace_encrypt = 1e1; +--error ER_WRONG_VALUE_FOR_VAR +SET GLOBAL innodb_temp_tablespace_encrypt = 2; + +# +# Cleanup +# + +SET @@global.innodb_temp_tablespace_encrypt = @start_global_value; +SELECT @@global.innodb_temp_tablespace_encrypt; diff --git a/plugin/keyring_vault/tests/mtr/temp_table_encrypt_keyring_vault-master.opt b/plugin/keyring_vault/tests/mtr/temp_table_encrypt_keyring_vault-master.opt new file mode 100644 index 000000000000..1f8fd2247925 --- /dev/null +++ b/plugin/keyring_vault/tests/mtr/temp_table_encrypt_keyring_vault-master.opt @@ -0,0 +1,2 @@ +$KEYRING_VAULT_PLUGIN_OPT +$KEYRING_VAULT_PLUGIN_LOAD diff --git a/plugin/keyring_vault/tests/mtr/temp_table_encrypt_keyring_vault.result b/plugin/keyring_vault/tests/mtr/temp_table_encrypt_keyring_vault.result new file mode 100644 index 000000000000..0029c28f8823 --- /dev/null +++ b/plugin/keyring_vault/tests/mtr/temp_table_encrypt_keyring_vault.result @@ -0,0 +1,60 @@ +call mtr.add_suppression("\\[ERROR\\] Function 'keyring_vault' already exists"); +call mtr.add_suppression("\\[ERROR\\] Couldn't load plugin named 'keyring_vault' with soname 'keyring_vault.*'."); +call mtr.add_suppression("Plugin keyring_vault reported"); +# restart: +CREATE TEMPORARY TABLE t01 (a TEXT) ENGINE=InnoDB; +INSERT INTO t01 VALUES ('Lorem ipsum dolor sit amet, consectetur adipiscing elit'); +Pattern found. +CREATE TEMPORARY TABLE t04 (a TEXT) ENGINE=InnoDB ROW_FORMAT=COMPRESSED; +INSERT INTO t04 VALUES ('Praesent tristique eros a tempus fringilla'); +Pattern found. +DROP TABLE t04; +SET GLOBAL innodb_temp_tablespace_encrypt = ON; +CREATE TEMPORARY TABLE t02 (a INT) ENGINE=InnoDB ENCRYPTION='Y'; +ERROR HY000: InnoDB: Unsupported encryption option for temporary tables. +CREATE TEMPORARY TABLE t03 (a TEXT) ENGINE=InnoDB ENCRYPTION='N'; +INSERT INTO t03 VALUES ('Curabitur laoreet, velit non interdum venenatis'); +Pattern not found. +CREATE TEMPORARY TABLE t04 (a TEXT) ENGINE=InnoDB ROW_FORMAT=COMPRESSED; +INSERT INTO t04 VALUES ('Praesent tristique eros a tempus fringilla'); +Pattern not found. +CREATE TEMPORARY TABLE t05 (a INT) ENGINE=InnoDB ROW_FORMAT=COMPRESSED ENCRYPTION='y'; +ERROR HY000: InnoDB: Unsupported encryption option for temporary tables. +CREATE TEMPORARY TABLE t06 (a INT) ENGINE=InnoDB ROW_FORMAT=COMPRESSED ENCRYPTION='n'; +INSERT INTO t06 VALUES (1), (2), (3); +SET GLOBAL innodb_temp_tablespace_encrypt = OFF; +CREATE TEMPORARY TABLE t07 (a INT) ENGINE=InnoDB; +INSERT INTO t07 VALUES (1), (2), (3); +SET GLOBAL innodb_temp_tablespace_encrypt = ON; +CREATE TABLE t10 (a INT AUTO_INCREMENT PRIMARY KEY, b INT); +INSERT INTO t10 (b) VALUES (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)); +INSERT INTO t10 (b) VALUES (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)); +INSERT INTO t10 (b) VALUES (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)); +INSERT INTO t10 (b) VALUES (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)); +INSERT INTO t10 (b) VALUES (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)); +INSERT INTO t10 (b) VALUES (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)); +INSERT INTO t10 (b) VALUES (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)); +INSERT INTO t10 (b) VALUES (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)); +INSERT INTO t10 (b) VALUES (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)); +INSERT INTO t10 (b) VALUES (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)), (FLOOR(RAND() * 10000)); +INSERT INTO t10 (b) SELECT b FROM t10; +INSERT INTO t10 (b) SELECT b FROM t10; +INSERT INTO t10 (b) SELECT b FROM t10; +INSERT INTO t10 (b) SELECT b FROM t10; +CREATE INDEX t10_b ON t10 (b); +DROP INDEX t10_b ON t10; +CREATE INDEX t10_b ON t10 (b) ALGORITHM=COPY; +DROP INDEX t10_b ON t10 ALGORITHM=COPY; +# restart: +CREATE TEMPORARY TABLE t01 (a INT) ENGINE=InnoDB; +INSERT INTO t01 VALUES (1), (2), (3); +# Kill and restart: +CREATE TEMPORARY TABLE t01 (a INT) ENGINE=InnoDB; +INSERT INTO t01 VALUES (1), (2), (3); +# restart: +CREATE TEMPORARY TABLE t01 (a INT) ENGINE=InnoDB; +INSERT INTO t01 VALUES (1), (2), (3); +# restart: +CREATE TEMPORARY TABLE t01 (a INT) ENGINE=InnoDB; +INSERT INTO t01 VALUES (1), (2), (3); +DROP TABLE t10; diff --git a/plugin/keyring_vault/tests/mtr/temp_table_encrypt_keyring_vault.test b/plugin/keyring_vault/tests/mtr/temp_table_encrypt_keyring_vault.test new file mode 100644 index 000000000000..c2b24dcff2f7 --- /dev/null +++ b/plugin/keyring_vault/tests/mtr/temp_table_encrypt_keyring_vault.test @@ -0,0 +1,27 @@ +# test temporary tables encryption with keyring_file plugin + +--source include/have_innodb.inc +--source include/have_keyring_vault_plugin.inc +--source include/have_innodb.inc +--source include/not_embedded.inc + +--source generate_default_conf_files.inc +--source is_vault_server_up.inc + +# Create mount points +--let MOUNT_POINT_SERVICE_OP=CREATE +--let KEYRING_CONF_FILE=$KEYRING_CONF_FILE_1 +--source mount_point_service.inc + +--let $keyring_restart_param=restart:--early-plugin-load="keyring_vault=$KEYRING_VAULT_PLUGIN" --keyring_vault_config=$KEYRING_CONF_FILE $KEYRING_VAULT_PLUGIN_OPT + +call mtr.add_suppression("\\[ERROR\\] Function 'keyring_vault' already exists"); +call mtr.add_suppression("\\[ERROR\\] Couldn't load plugin named 'keyring_vault' with soname 'keyring_vault.*'."); +call mtr.add_suppression("Plugin keyring_vault reported"); + +--source suite/innodb/include/temp_table_encrypt.inc + +# Delete mount points +--let MOUNT_POINT_SERVICE_OP=DELETE +--let $KEYRING_CONF_FILE=$KEYRING_CONF_FILE +--source mount_point_service.inc diff --git a/storage/innobase/dict/dict0crea.cc b/storage/innobase/dict/dict0crea.cc index b7e4ac7680fb..7d5927b58024 100644 --- a/storage/innobase/dict/dict0crea.cc +++ b/storage/innobase/dict/dict0crea.cc @@ -492,7 +492,8 @@ dict_build_tablespace_for_table( /* Determine the tablespace flags. */ bool is_temp = dict_table_is_temporary(table); - bool is_encrypted = dict_table_is_encrypted(table); + bool is_encrypted = (srv_tmp_tablespace_encrypt && is_temp) + || dict_table_is_encrypted(table); bool has_data_dir = DICT_TF_HAS_DATA_DIR(table->flags); ulint fsp_flags = dict_tf_to_fsp_flags(table->flags, is_temp, diff --git a/storage/innobase/fil/fil0fil.cc b/storage/innobase/fil/fil0fil.cc index 23882aa6d428..b78ce210e7a9 100644 --- a/storage/innobase/fil/fil0fil.cc +++ b/storage/innobase/fil/fil0fil.cc @@ -3539,7 +3539,7 @@ fil_ibd_create( bool has_shared_space = FSP_FLAGS_GET_SHARED(flags); fil_space_t* space = NULL; - ut_ad(!is_system_tablespace(space_id)); + ut_ad(!is_shared_system_tablespace(space_id)); ut_ad(!srv_read_only_mode); ut_a(space_id < SRV_LOG_SPACE_FIRST_ID); ut_a(size >= FIL_IBD_FILE_INITIAL_SIZE); @@ -5471,18 +5471,33 @@ fil_io_set_encryption( const page_id_t& page_id, fil_space_t* space) { - /* Don't encrypt the log, page 0 of all tablespaces, all pages - from the system tablespace. */ - if (!req_type.is_log() && page_id.page_no() > 0 - && space->encryption_type != Encryption::NONE) - { - req_type.encryption_key(space->encryption_key, - space->encryption_klen, - space->encryption_iv); - req_type.encryption_algorithm(Encryption::AES); - } else { + /* Don't encrypt redo log and system tablespaces, + for all the other types tablespaces, don't encrypt page 0. */ + if (space->encryption_type == Encryption::NONE + || (page_id.page_no() == 0 && !req_type.is_log())) { + req_type.clear_encrypted(); + return; + } + + /* For writing redo log, if encryption for redo log is disabled, + skip setting encryption. */ + if (req_type.is_log() && req_type.is_write()) { req_type.clear_encrypted(); + return; + } + + /* For writing temporary tablespace, if encryption for temporary + tablespace is disabled, skip setting encryption. */ + if (fsp_is_system_temporary(space->id) + && !srv_tmp_tablespace_encrypt && req_type.is_write()) { + req_type.clear_encrypted(); + return; } + + req_type.encryption_key(space->encryption_key, + space->encryption_klen, + space->encryption_iv); + req_type.encryption_algorithm(Encryption::AES); } /** Reads or writes data. This operation could be asynchronous (aio). @@ -6969,8 +6984,9 @@ fil_space_validate_for_mtr_commit( { ut_ad(!mutex_own(&fil_system->mutex)); ut_ad(space != NULL); - ut_ad(space->purpose == FIL_TYPE_TABLESPACE); - ut_ad(!is_predefined_tablespace(space->id)); + ut_ad(space->purpose == FIL_TYPE_TABLESPACE || + space->purpose == FIL_TYPE_TEMPORARY); + ut_ad(!is_shared_system_tablespace(space->id)); /* We are serving mtr_commit(). While there is an active mini-transaction, we should have !space->stop_new_ops. This is @@ -7354,11 +7370,7 @@ fil_set_encryption( byte* key, byte* iv) { - ut_ad(!is_system_or_undo_tablespace(space_id)); - - if (is_system_tablespace(space_id)) { - return(DB_IO_NO_ENCRYPT_TABLESPACE); - } + ut_ad(!is_shared_system_tablespace(space_id)); mutex_enter(&fil_system->mutex); @@ -7391,6 +7403,9 @@ fil_set_encryption( return(DB_SUCCESS); } +/** Default master key id for bootstrap */ +static const ulint ENCRYPTION_DEFAULT_MASTER_KEY_ID = 0; + /** Rotate the tablespace keys by new master key. @return true if the re-encrypt suceeds */ bool @@ -7404,14 +7419,29 @@ fil_encryption_rotate() space != NULL; ) { /* Skip unencypted tablespaces. */ if (is_system_or_undo_tablespace(space->id) - || fsp_is_system_temporary(space->id) || space->purpose == FIL_TYPE_LOG) { space = UT_LIST_GET_NEXT(space_list, space); continue; } + /* Skip the temporary tablespace when it's in default + key status, since it's the first server startup + after bootstrap, and the server uuid is not ready + yet. */ + if (fsp_is_system_temporary(space->id) + && Encryption::master_key_id == + ENCRYPTION_DEFAULT_MASTER_KEY_ID) { + space = UT_LIST_GET_NEXT(space_list, space); + continue; + } + if (space->encryption_type != Encryption::NONE) { mtr_start(&mtr); + + if (fsp_is_system_temporary(space->id)) { + mtr_set_log_mode(&mtr, MTR_LOG_NO_REDO); + } + mtr.set_named_space(space->id); space = mtr_x_lock_space(space->id, &mtr); diff --git a/storage/innobase/fsp/fsp0fsp.cc b/storage/innobase/fsp/fsp0fsp.cc index 03dfb2e73295..8214950dc708 100644 --- a/storage/innobase/fsp/fsp0fsp.cc +++ b/storage/innobase/fsp/fsp0fsp.cc @@ -231,7 +231,6 @@ fsp_flags_is_valid( bool has_data_dir = FSP_FLAGS_HAS_DATA_DIR(flags); bool is_shared = FSP_FLAGS_GET_SHARED(flags); bool is_temp = FSP_FLAGS_GET_TEMPORARY(flags); - bool is_encryption = FSP_FLAGS_GET_ENCRYPTION(flags); ulint unused = FSP_FLAGS_GET_UNUSED(flags); @@ -278,11 +277,6 @@ fsp_flags_is_valid( return(false); } - /* Temporary tablespaces do not use the encryption clause. */ - if (is_encryption && is_temp) { - return(false); - } - #if UNIV_FORMAT_MAX != UNIV_FORMAT_B # error UNIV_FORMAT_MAX != UNIV_FORMAT_B, Add more validations. #endif @@ -597,7 +591,8 @@ xdes_get_descriptor_with_space_hdr( && fspace->id <= srv_undo_tablespaces)))); ut_ad(size == fspace->size_in_header); ut_ad((flags & ~FSP_FLAGS_MASK_DATA_DIR) - == (fspace->flags & ~FSP_FLAGS_MASK_DATA_DIR)); + == (fspace->flags & ~FSP_FLAGS_MASK_DATA_DIR) + || fspace->purpose == FIL_TYPE_TEMPORARY); if ((offset >= size) || (offset >= limit)) { return(NULL); } @@ -1053,6 +1048,52 @@ fsp_header_rotate_encryption( return(true); } +/** Enable encryption for already existing tablespace. +@param[in] space_id tablespace id +@return true if success */ +bool +fsp_enable_encryption( + ulint space_id) +{ + byte encrypt_info[ENCRYPTION_INFO_SIZE_V2]; + fil_space_t* space = fil_space_get(space_id); + + memset(encrypt_info, 0, ENCRYPTION_INFO_SIZE_V2); + + if (!fsp_header_fill_encryption_info(space, encrypt_info)) { + return(false); + } + + mtr_t mtr; + mtr_start(&mtr); + mtr_set_log_mode(&mtr, MTR_LOG_NO_REDO); + mtr.set_named_space(space_id); + + space = mtr_x_lock_space(space_id, &mtr); + + const page_size_t page_size(space->flags); + buf_block_t* block = buf_page_get(page_id_t(space->id, 0), page_size, + RW_SX_LATCH, &mtr); + buf_block_dbg_add_level(block, SYNC_FSP_PAGE); + ut_ad(space->id == page_get_space_id(buf_block_get_frame(block))); + + page_t* page = buf_block_get_frame(block); + mlog_write_ulint(FSP_HEADER_OFFSET + FSP_SPACE_FLAGS + page, + space->flags, MLOG_4BYTES, &mtr); + + ulint offset = fsp_header_get_encryption_offset(page_size); + ut_ad(offset != 0 && offset < UNIV_PAGE_SIZE); + + mlog_write_string(page + offset, + encrypt_info, + ENCRYPTION_INFO_SIZE_V2, + &mtr); + + mtr_commit(&mtr); + + return(true); +} + /** Initializes the space header of a new created space and creates also the insert buffer tree root if space == 0. @param[in] space_id space id diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index 82773f8d8569..1ea936869c7f 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -10680,7 +10680,7 @@ create_table_info_t::create_table_def() { dict_table_t* table; ulint n_cols; - dberr_t err; + dberr_t err = DB_SUCCESS; ulint col_type; ulint col_len; ulint nulls_allowed; @@ -11004,6 +11004,9 @@ create_table_info_t::create_table_def() needed in SYSTEM tables. */ if (dict_table_is_temporary(table)) { + fil_space_t* space = fil_space_get(srv_tmp_space.space_id()); + bool force_encrypt = FSP_FLAGS_GET_ENCRYPTION(space->flags); + if (m_create_info->compress.length > 0) { push_warning_printf( @@ -11017,18 +11020,44 @@ create_table_info_t::create_table_def() dict_mem_table_free(table); } else if (m_create_info->encrypt_type.length > 0 && !Encryption::is_none( - m_create_info->encrypt_type.str)) { + m_create_info->encrypt_type.str) + && !force_encrypt) { my_error(ER_TABLESPACE_CANNOT_ENCRYPT, MYF(0)); err = DB_UNSUPPORTED; dict_mem_table_free(table); } else { + if (force_encrypt) { + /* force encryption for temporary tables */ + byte* master_key = NULL; + ulint master_key_id; + Encryption::Version version; + + /* Check if keyring is ready. */ + Encryption::get_master_key(&master_key_id, + &master_key, + &version); + + if (master_key == NULL) { + my_error(ER_CANNOT_FIND_KEY_IN_KEYRING, + MYF(0)); + err = DB_UNSUPPORTED; + dict_mem_table_free(table); + } else { + my_free(master_key); + DICT_TF2_FLAG_SET(table, + DICT_TF2_ENCRYPTION); + } + } + + if (err == DB_SUCCESS) { - /* Get a new table ID */ - dict_table_assign_new_id(table, m_trx); + /* Get a new table ID */ + dict_table_assign_new_id(table, m_trx); - /* Create temp tablespace if configured. */ - err = dict_build_tablespace_for_table(table); + /* Create temp tablespace if configured. */ + err = dict_build_tablespace_for_table(table); + } if (err == DB_SUCCESS) { /* Temp-table are maintained in memory and so @@ -21394,6 +21423,11 @@ static MYSQL_SYSVAR_STR(temp_data_file_path, innobase_temp_data_file_path, "Path to files and their sizes making temp-tablespace.", NULL, NULL, NULL); +static MYSQL_SYSVAR_BOOL(temp_tablespace_encrypt, srv_tmp_tablespace_encrypt, + PLUGIN_VAR_OPCMDARG, + "Enable or disable encryption of temporary tablespace.", + NULL, NULL, FALSE); + static MYSQL_SYSVAR_STR(undo_directory, srv_undo_dir, PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY, "Directory where undo tablespace files live, this path can be absolute.", @@ -21714,6 +21748,14 @@ static MYSQL_SYSVAR_BOOL(sync_debug, srv_sync_debug, PLUGIN_VAR_OPCMDARG | PLUGIN_VAR_READONLY, "Enable the sync debug checks", NULL, NULL, FALSE); + +static MYSQL_SYSVAR_ULONG(master_encrypt_debug, + srv_master_encrypt_debug, + PLUGIN_VAR_OPCMDARG, + "Set 1 to pause master thread in the middle of the enabling of " + "temporary tablespace encryption. Once paused, master thread will set it 2. " + "Change it back to 0 to resume master thread.", + NULL, NULL, 0, 0, UINT_MAX32, 0); #endif /* UNIV_DEBUG */ const char *corrupt_table_action_names[]= @@ -21783,6 +21825,7 @@ static struct st_mysql_sys_var* innobase_system_variables[]= { MYSQL_SYSVAR(kill_idle_transaction), MYSQL_SYSVAR(data_file_path), MYSQL_SYSVAR(temp_data_file_path), + MYSQL_SYSVAR(temp_tablespace_encrypt), MYSQL_SYSVAR(data_home_dir), MYSQL_SYSVAR(doublewrite), MYSQL_SYSVAR(stats_include_delete_marked), @@ -21946,6 +21989,7 @@ static struct st_mysql_sys_var* innobase_system_variables[]= { MYSQL_SYSVAR(dict_stats_disabled_debug), MYSQL_SYSVAR(master_thread_disabled_debug), MYSQL_SYSVAR(sync_debug), + MYSQL_SYSVAR(master_encrypt_debug), #endif /* UNIV_DEBUG */ MYSQL_SYSVAR(corrupt_table_action), MYSQL_SYSVAR(parallel_doublewrite_path), diff --git a/storage/innobase/include/fsp0fsp.h b/storage/innobase/include/fsp0fsp.h index 301337f7615f..33d96ff382fe 100644 --- a/storage/innobase/include/fsp0fsp.h +++ b/storage/innobase/include/fsp0fsp.h @@ -699,6 +699,14 @@ fsp_flags_to_dict_tf( ulint fsp_flags, bool compact); +/** Enable encryption for already existing tablespace. +@param[in] space_id tablespace id +@return true if success */ +bool +fsp_enable_encryption( + ulint space_id) +MY_ATTRIBUTE((warn_unused_result)); + /** Calculates the descriptor index within a descriptor page. @param[in] page_size page size @param[in] offset page offset diff --git a/storage/innobase/include/fsp0sysspace.h b/storage/innobase/include/fsp0sysspace.h index 66457eba1ea8..8f70fbdaf5a5 100644 --- a/storage/innobase/include/fsp0sysspace.h +++ b/storage/innobase/include/fsp0sysspace.h @@ -282,6 +282,18 @@ extern SysTablespace srv_sys_space; /** The control info of a temporary table shared tablespace. */ extern SysTablespace srv_tmp_space; +/** Check if the space_id is for a shared system tablespace. +@param[in] id Space ID to check +@return true if id is a system tablespace, false if not. */ +UNIV_INLINE +bool +MY_ATTRIBUTE((warn_unused_result)) +is_shared_system_tablespace( + ulint id) +{ + return(id == srv_sys_space.space_id()); +} + /** Check if the space_id is for a system-tablespace (shared + temp). @param[in] id Space ID to check @return true if id is a system tablespace, false if not. */ diff --git a/storage/innobase/include/os0file.h b/storage/innobase/include/os0file.h index e285d1a9e320..bc448e5ae5d1 100644 --- a/storage/innobase/include/os0file.h +++ b/storage/innobase/include/os0file.h @@ -514,6 +514,11 @@ struct Encryption { ulint dst_len) MY_ATTRIBUTE((warn_unused_result)); +#ifndef UNIV_INNOCHECKSUM + /** Check if keyring plugin loaded. */ + static bool MY_ATTRIBUTE((warn_unused_result)) check_keyring(); +#endif + /** Encrypt type */ Type m_type; diff --git a/storage/innobase/include/srv0srv.h b/storage/innobase/include/srv0srv.h index 7da130082633..d75f4d382390 100644 --- a/storage/innobase/include/srv0srv.h +++ b/storage/innobase/include/srv0srv.h @@ -292,6 +292,9 @@ extern my_bool srv_undo_log_truncate; /** UNDO logs not redo logged, these logs reside in the temp tablespace.*/ extern const ulong srv_tmp_undo_logs; +/** Enable or disable encryption of temporary tablespace.*/ +extern my_bool srv_tmp_tablespace_encrypt; + /** Whether the redo log tracking is currently enabled. Note that it is possible for the log tracker thread to be running and the tracking to be @@ -511,6 +514,9 @@ extern my_bool srv_purge_view_update_only_debug; /** Value of MySQL global used to disable master thread. */ extern my_bool srv_master_thread_disabled_debug; +/** Pause master thread in the middle of enabling of temporary tablespace +encryption */ +extern ulint srv_master_encrypt_debug; #endif /* UNIV_DEBUG */ extern ulint srv_fatal_semaphore_wait_threshold; diff --git a/storage/innobase/os/os0file.cc b/storage/innobase/os/os0file.cc index 752870e0335d..c36aaa696651 100644 --- a/storage/innobase/os/os0file.cc +++ b/storage/innobase/os/os0file.cc @@ -9657,6 +9657,48 @@ Encryption::decrypt( return(DB_SUCCESS); } +#ifndef UNIV_INNOCHECKSUM + +/** Default master key for bootstrap */ +static const char ENCRYPTION_DEFAULT_MASTER_KEY[] = "DefaultMasterKey"; + +/** Check if keyring plugin loaded. */ +bool Encryption::check_keyring() +{ + char key_name[ENCRYPTION_MASTER_KEY_NAME_MAX_LEN]; + memset(key_name, 0, ENCRYPTION_KEY_LEN); + strcpy(key_name, ENCRYPTION_DEFAULT_MASTER_KEY); + + /* We call key ring API to generate master key here. */ + int my_ret = my_key_generate(key_name, "AES", + NULL, ENCRYPTION_KEY_LEN); + + /* We call key ring API to get master key here. */ + if (my_ret != 0) { + char* key_type = NULL; + char* master_key = NULL; + size_t key_len; + my_ret = my_key_fetch(key_name, &key_type, NULL, + reinterpret_cast(&master_key), + &key_len); + + my_free(key_type); + my_free(master_key); + } + + if (my_ret) { + ib::error() << "keyring error: please check that a" + " keyring plugin is loaded."; + } else { + my_key_remove(key_name, NULL); + return(true); + } + + return(false); +} + +#endif + /** Normalizes a directory path for the current OS: On Windows, we convert '/' to '\', else we convert '\' to '/'. @param[in,out] str A null-terminated directory and file path */ diff --git a/storage/innobase/srv/srv0srv.cc b/storage/innobase/srv/srv0srv.cc index 5b6d70934363..98f86cad024a 100644 --- a/storage/innobase/srv/srv0srv.cc +++ b/storage/innobase/srv/srv0srv.cc @@ -155,6 +155,9 @@ unsigned long long srv_max_undo_log_size; These logs reside in the temp tablespace.*/ const ulong srv_tmp_undo_logs = 32; +/** Enable or disable encryption of temporary tablespace.*/ +my_bool srv_tmp_tablespace_encrypt; + /** Default undo tablespace size in UNIV_PAGEs count (10MB). */ const ulint SRV_UNDO_TABLESPACE_SIZE_IN_PAGES = ((1024 * 1024) * 10) / UNIV_PAGE_SIZE_DEF; @@ -207,6 +210,9 @@ ulonglong srv_max_changed_pages = 0; ulong srv_debug_compress; /** Used by SET GLOBAL innodb_master_thread_disabled_debug = X. */ my_bool srv_master_thread_disabled_debug; +/** Pause master thread in the middle of enabling of temporary tablespace +encryption */ +ulint srv_master_encrypt_debug; /** Event used to inform that master thread is disabled. */ static os_event_t srv_master_thread_disabled_event; /** Debug variable to find if any background threads are adding @@ -2675,6 +2681,71 @@ srv_master_do_shutdown_tasks( return(n_bytes_merged || n_tables_to_drop); } +/*********************************************************************//** +Set temporary tablespace to be encrypted if global variable +innodb_temp_tablespace_encrypt is TRUE. In case of failure, changes +value of innodb_temp_tablespace_encrypt back to FALSE and logs error +message. */ +static +void +srv_enable_temp_encryption_if_set() +{ + ut_ad(!srv_read_only_mode); + + if (srv_shutdown_state != SRV_SHUTDOWN_NONE) { + return; + } + + if (!srv_tmp_tablespace_encrypt) { + return; + } + + if (is_shared_system_tablespace(srv_tmp_space.space_id())) { + /* there is no separate tablespace for temporary tables */ + return; + } + + fil_space_t* space = fil_space_get(srv_tmp_space.space_id()); + + ut_ad(fsp_is_system_temporary(space->id)); + + if (!FSP_FLAGS_GET_ENCRYPTION(space->flags)) { + + /* Make sure the keyring is loaded. */ + if (!Encryption::check_keyring()) { + srv_tmp_tablespace_encrypt = false; + ib::error() << "Can't set temporary tablespace " + << "to be encrypted because " + << "keyring plugin is not " + << "available."; + return; + } + + space->flags |= FSP_FLAGS_MASK_ENCRYPTION; + + dberr_t err = fil_set_encryption(space->id, + Encryption::AES, NULL, NULL); + + ut_a(err == DB_SUCCESS); + +#ifdef UNIV_DEBUG + if (srv_master_encrypt_debug != 0) { + srv_master_encrypt_debug = 2; + while (srv_master_encrypt_debug != 0) { + os_thread_sleep(10000); + } + } +#endif + + if (!fsp_enable_encryption(srv_tmp_space.space_id())) { + srv_tmp_tablespace_encrypt = false; + ib::error() << "Can't set temporary tablespace " + << "to be encrypted."; + return; + } + } +} + /*********************************************************************//** Puts master thread to sleep. At this point we are using polling to service various activities. Master thread sleeps for one second before @@ -2754,6 +2825,9 @@ DECLARE_THREAD(srv_master_thread)( } else { srv_master_do_idle_tasks(); } + + /* Enable temporary tablespace encryption if set */ + srv_enable_temp_encryption_if_set(); } while (srv_shutdown_state != SRV_SHUTDOWN_EXIT_THREADS diff --git a/storage/innobase/srv/srv0start.cc b/storage/innobase/srv/srv0start.cc index 361fae141f1d..7ce4820d372e 100644 --- a/storage/innobase/srv/srv0start.cc +++ b/storage/innobase/srv/srv0start.cc @@ -1231,6 +1231,19 @@ srv_open_tmp_tablespace( it stays open until shutdown. */ if (fil_space_open(tmp_space->name())) { + if (srv_tmp_tablespace_encrypt) { + + fil_space_t* space = + fil_space_get(temp_space_id); + space->flags |= FSP_FLAGS_MASK_ENCRYPTION; + + err = fil_set_encryption(space->id, + Encryption::AES, + NULL, + NULL); + ut_a(err == DB_SUCCESS); + } + /* Initialize the header page */ mtr_start(&mtr); mtr_set_log_mode(&mtr, MTR_LOG_NO_REDO); From d20141621804e3edb8ad93ae56ba72e173a71dc9 Mon Sep 17 00:00:00 2001 From: Georgi Kodinov Date: Tue, 20 Feb 2018 14:04:33 +0100 Subject: [PATCH 0583/1221] Bug #27366143: HEAP-USE-AFTER-FREE IN CACHING SHA2 client.cc: the client session can disconnect while trying to read the COM_CHANGE_USER reply and this will cause the net buffer to be freed. Added proper check for packet error. --- sql-common/client.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/sql-common/client.c b/sql-common/client.c index de1184c0f8f7..25182c7dff63 100644 --- a/sql-common/client.c +++ b/sql-common/client.c @@ -3790,6 +3790,11 @@ static int client_mpvio_read_packet(struct st_plugin_vio *mpv, uchar **buf) /* otherwise read the data */ pkt_len= (*mysql->methods->read_change_user_result)(mysql); + + /* error while reading the change user request */ + if (pkt_len == packet_error) + return (int)packet_error; + mpvio->last_read_packet_len= pkt_len; *buf= mysql->net.read_pos; From 9541001696c84964479a7c484ddc25d026ba16ce Mon Sep 17 00:00:00 2001 From: Ashish Padiyar Date: Tue, 20 Feb 2018 18:41:57 +0530 Subject: [PATCH 0584/1221] Disabling max_parts tests on windows and solaris platform on Hudson. --- mysql-test/suite/max_parts/t/disabled.def | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/mysql-test/suite/max_parts/t/disabled.def b/mysql-test/suite/max_parts/t/disabled.def index cffc6003c69b..6b8e28b98593 100644 --- a/mysql-test/suite/max_parts/t/disabled.def +++ b/mysql-test/suite/max_parts/t/disabled.def @@ -10,4 +10,14 @@ # ############################################################################## max_parts.innodb-import-partition-1 : Bug#27413612 Ashish Fails consistently on hudson jobs. Disabled until bug is fixed. +max_parts.innodb_partition_open_files_limit @windows : 20.02.2018 Ashish Disabling max_parts tests on windows. +max_parts.partition_max_parts_list_innodb @windows : 20.02.2018 Ashish Disabling max_parts tests on windows. +max_parts.partition_max_parts_hash_innodb @windows : 20.02.2018 Ashish Disabling max_parts tests on windows. +max_parts.partition_max_parts_key_innodb @windows : 20.02.2018 Ashish Disabling max_parts tests on windows. +max_parts.partition_max_parts_inv_innodb @windows : 20.02.2018 Ashish Disabling max_parts tests on windows. +max_parts.partition_max_sub_parts_range_innodb @windows : 20.02.2018 Ashish Disabling max_parts tests on windows. +max_parts.partition_max_sub_parts_key_range_innodb @windows : 20.02.2018 Ashish Disabling max_parts tests on windows. +max_parts.partition_max_sub_parts_key_list_innodb @windows : 20.02.2018 Ashish Disabling max_parts tests on windows. +max_parts.partition_max_parts_range_innodb @windows : 20.02.2018 Ashish Disabling max_parts tests on windows. +max_parts.partition_max_sub_parts_list_innodb @windows : 20.02.2018 Ashish Disabling max_parts tests on windows. From 78be5ef14a7bd6ed5b71603c73b4f89d9837aa13 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Mon, 5 Feb 2018 11:43:28 +0100 Subject: [PATCH 0585/1221] Bug#27471510 PERFORMANCE_SCHEMA STATUS AND VARIABLE BY THREAD ARE NOT SAFE Patch for 5.7. Before this fix, executing: SELECT * FROM performance_schema.status_by_thread SELECT * FROM performance_schema.variables_by_thread under heavy load was unsafe. Root cause 1 ============ SELECT * from performance_schema.status_by_thread inspects the status variables of running sessions. For sessions using SSL, SSL status variables are inspected. For example, the status variable "Ssl_cipher_list" is evaluated by executing function show_ssl_get_cipher_list() This function is implemented as follows: show_ssl_get_cipher_list() { if (thd->get_protocol()->get_ssl()) // (a) { ... SSL_get_cipher(thd->get_protocol()->get_ssl())); // (b) ... } } The problem is that evaluating thd->get_protocol()->get_ssl() to access the underlying SSL structure is unsafe, and subject to race conditions. The value returned in (a) can change by the time (b) is evaluated, for example when using prepared statements, because the thd->get_protocol() pointer will change during execution of PREPARE and EXECUTE. Fix 1 ===== thd->get_protocol()->get_ssl() is not a proper way to access SSL data for the session. Instead, THD::m_SSL now keeps the SSL data attached to the THD session. THD::m_SSL is set after the SSL connection is established, is reset upon disconnect, and is immutable during the session execution. Inspecting this attribute is safe when LOCK_thd_data is held, which make table performance_schema.status_by_thread safe. Root cause 2 ============ SELECT * from performance_schema.variables_by_thread inspects the variables of running sessions. In particular, variable "session_track_system_variables" is inspected. This variable value is stored in THD::variables.track_sysvars_ptr On the session connection, THD::variables.track_sysvars_ptr is duplicated and points to allocated memory, in this call: thd->session_sysvar_res_mgr.init(&thd->variables.track_sysvars_ptr, thd->charset()); This is because Session_sysvar_resource_manager::init() modifies the THD::variables.track_sysvars_ptr pointer itself. On session disconnect, Session_sysvar_resource_manager::deinit() free the allocated memory, which leaves the THD::variables.track_sysvars_ptr pointer invalid, referencing freed memory. As soon as cleanup_variables() unlocks LOCK_thd_data, a race condition is possible, when using the now invalid THD::variables.track_sysvars_ptr pointer. Fix 2 ===== In cleanup_variables(), clear the offending pointer before freeing the underlying memory with the call to session_sysvar_res_mgr.deinit() This makes table performance_schema.variables_by_thread safe. --- include/violite.h | 9 ++++++- sql/auth/sql_authentication.cc | 7 ++--- sql/mysqld.cc | 37 +++++++++++++++----------- sql/protocol.h | 15 +---------- sql/protocol_callback.cc | 11 +------- sql/protocol_callback.h | 7 +---- sql/protocol_classic.cc | 12 +-------- sql/protocol_classic.h | 4 +-- sql/rpl_slave.cc | 24 +++++++---------- sql/sql_class.cc | 6 +++-- sql/sql_class.h | 43 ++++++++++++++++++++++++++++++- sql/sql_connect.cc | 8 ++++++ sql/sql_plugin.cc | 6 +++-- sql/sql_prepare.cc | 6 ----- storage/perfschema/pfs_variable.h | 13 ++++++++-- 15 files changed, 117 insertions(+), 91 deletions(-) diff --git a/include/violite.h b/include/violite.h index 27420f9d223e..eb997194634b 100644 --- a/include/violite.h +++ b/include/violite.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -335,4 +335,11 @@ struct st_vio char *shared_memory_pos; #endif /* _WIN32 && !EMBEDDED_LIBRARY */ }; + +#ifdef HAVE_OPENSSL +#define SSL_handle SSL* +#else +#define SSL_handle void* +#endif + #endif /* vio_violite_h_ */ diff --git a/sql/auth/sql_authentication.cc b/sql/auth/sql_authentication.cc index 4f7b51d6d471..569d246ffecb 100644 --- a/sql/auth/sql_authentication.cc +++ b/sql/auth/sql_authentication.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -883,7 +883,7 @@ static bool acl_check_ssl(THD *thd, const ACL_USER *acl_user) { #if defined(HAVE_OPENSSL) Vio *vio= thd->get_protocol_classic()->get_vio(); - SSL *ssl= thd->get_protocol()->get_ssl(); + SSL *ssl= (SSL*) vio->ssl_arg; X509 *cert; #endif /* HAVE_OPENSSL */ @@ -1988,7 +1988,8 @@ server_mpvio_initialize(THD *thd, MPVIO_EXT *mpvio, mpvio->auth_info.host_or_ip_length= sctx_host_or_ip.length; #if defined(HAVE_OPENSSL) && !defined(EMBEDDED_LIBRARY) - if (thd->get_protocol()->get_ssl()) + Vio *vio= thd->get_protocol_classic()->get_vio(); + if (vio->ssl_arg) mpvio->vio_is_encrypted= 1; else #endif /* HAVE_OPENSSL && !EMBEDDED_LIBRARY */ diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 5bf9ecf1878a..738405031b55 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -6555,10 +6555,11 @@ static int show_ssl_ctx_get_session_cache_mode(THD *thd, SHOW_VAR *var, char *bu */ static int show_ssl_get_version(THD *thd, SHOW_VAR *var, char *buff) { + SSL_handle ssl = thd->get_ssl(); var->type= SHOW_CHAR; - if (thd->get_protocol()->get_ssl()) + if (ssl) var->value= - const_cast(SSL_get_version(thd->get_protocol()->get_ssl())); + const_cast(SSL_get_version(ssl)); else var->value= (char *)""; return 0; @@ -6566,11 +6567,12 @@ static int show_ssl_get_version(THD *thd, SHOW_VAR *var, char *buff) static int show_ssl_session_reused(THD *thd, SHOW_VAR *var, char *buff) { + SSL_handle ssl = thd->get_ssl(); var->type= SHOW_LONG; var->value= buff; - if (thd->get_protocol()->get_ssl()) + if (ssl) *((long *)buff)= - (long)SSL_session_reused(thd->get_protocol()->get_ssl()); + (long)SSL_session_reused(ssl); else *((long *)buff)= 0; return 0; @@ -6578,11 +6580,12 @@ static int show_ssl_session_reused(THD *thd, SHOW_VAR *var, char *buff) static int show_ssl_get_default_timeout(THD *thd, SHOW_VAR *var, char *buff) { + SSL_handle ssl = thd->get_ssl(); var->type= SHOW_LONG; var->value= buff; - if (thd->get_protocol()->get_ssl()) + if (ssl) *((long *)buff)= - (long)SSL_get_default_timeout(thd->get_protocol()->get_ssl()); + (long)SSL_get_default_timeout(ssl); else *((long *)buff)= 0; return 0; @@ -6590,11 +6593,12 @@ static int show_ssl_get_default_timeout(THD *thd, SHOW_VAR *var, char *buff) static int show_ssl_get_verify_mode(THD *thd, SHOW_VAR *var, char *buff) { + SSL_handle ssl = thd->get_ssl(); var->type= SHOW_LONG; var->value= buff; - if (thd->get_protocol()->get_ssl()) + if (ssl) *((long *)buff)= - (long)SSL_get_verify_mode(thd->get_protocol()->get_ssl()); + (long)SSL_get_verify_mode(ssl); else *((long *)buff)= 0; return 0; @@ -6602,11 +6606,12 @@ static int show_ssl_get_verify_mode(THD *thd, SHOW_VAR *var, char *buff) static int show_ssl_get_verify_depth(THD *thd, SHOW_VAR *var, char *buff) { + SSL_handle ssl = thd->get_ssl(); var->type= SHOW_LONG; var->value= buff; - if (thd->get_protocol()->get_ssl()) + if (ssl) *((long *)buff)= - (long)SSL_get_verify_depth(thd->get_protocol()->get_ssl()); + (long)SSL_get_verify_depth(ssl); else *((long *)buff)= 0; return 0; @@ -6614,10 +6619,11 @@ static int show_ssl_get_verify_depth(THD *thd, SHOW_VAR *var, char *buff) static int show_ssl_get_cipher(THD *thd, SHOW_VAR *var, char *buff) { + SSL_handle ssl = thd->get_ssl(); var->type= SHOW_CHAR; - if (thd->get_protocol()->get_ssl()) + if (ssl) var->value= - const_cast(SSL_get_cipher(thd->get_protocol()->get_ssl())); + const_cast(SSL_get_cipher(ssl)); else var->value= (char *)""; return 0; @@ -6625,14 +6631,15 @@ static int show_ssl_get_cipher(THD *thd, SHOW_VAR *var, char *buff) static int show_ssl_get_cipher_list(THD *thd, SHOW_VAR *var, char *buff) { + SSL_handle ssl = thd->get_ssl(); var->type= SHOW_CHAR; var->value= buff; - if (thd->get_protocol()->get_ssl()) + if (ssl) { int i; const char *p; char *end= buff + SHOW_VAR_FUNC_BUFF_SIZE; - for (i=0; (p= SSL_get_cipher_list(thd->get_protocol()->get_ssl(),i)) && + for (i=0; (p= SSL_get_cipher_list(ssl,i)) && buff < end; i++) { buff= my_stpnmov(buff, p, end-buff-1); diff --git a/sql/protocol.h b/sql/protocol.h index 33a29d9b46ea..bdf6d9fc3774 100644 --- a/sql/protocol.h +++ b/sql/protocol.h @@ -1,7 +1,7 @@ #ifndef PROTOCOL_INCLUDED #define PROTOCOL_INCLUDED -/* Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2002, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -20,11 +20,6 @@ #include "my_decimal.h" /* my_decimal */ #include "violite.h" /* SSL && enum_vio_type */ -#ifdef HAVE_OPENSSL -#define SSL_handle SSL* -#else -#define SSL_handle void* -#endif #ifdef __cplusplus class THD; @@ -202,14 +197,6 @@ class Protocol { */ virtual int shutdown(bool server_shutdown= false)= 0; - /** - Returns pointer to the SSL object/struct - - @return - @retval SSL* The SSL struct/object - @retval NULL If HAVE_OPENSSL is not defined - */ - virtual SSL_handle get_ssl()= 0; /** Returns the read/writing status diff --git a/sql/protocol_callback.cc b/sql/protocol_callback.cc index b19a167ebdd9..2eeb740edb21 100644 --- a/sql/protocol_callback.cc +++ b/sql/protocol_callback.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -410,15 +410,6 @@ bool Protocol_callback::connection_alive() return true; } -/** - Returns SSL info. In case of Protocol_callback returns NULL, meaning - no SSL connection. -*/ -SSL_handle Protocol_callback::get_ssl() -{ - return NULL; -} - /** Should return protocol's reading/writing status. Returns 0 (idle) as it this is the best guess that can be made as there is no callback for diff --git a/sql/protocol_callback.h b/sql/protocol_callback.h index 223a9bfa60fb..eb5fda3d89b5 100644 --- a/sql/protocol_callback.h +++ b/sql/protocol_callback.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -286,11 +286,6 @@ class Protocol_callback : public Protocol */ virtual bool connection_alive(); - /** - Returns SSL info - */ - virtual SSL_handle get_ssl(); - /** Should return protocol's reading/writing status. Returns 0 (idle) as it this is the best guess that can be made as there is no callback for diff --git a/sql/protocol_classic.cc b/sql/protocol_classic.cc index 1f7985f21830..c3afbb302a48 100644 --- a/sql/protocol_classic.cc +++ b/sql/protocol_classic.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -1282,16 +1282,6 @@ bool Protocol_classic::store_string_aux(const char *from, size_t length, } -SSL_handle Protocol_classic::get_ssl() -{ - return -#ifdef HAVE_OPENSSL - m_thd->net.vio ? (SSL *) m_thd->net.vio->ssl_arg : -#endif - NULL; -} - - int Protocol_classic::shutdown(bool server_shutdown) { return m_thd->net.vio ? vio_shutdown(m_thd->net.vio) : 0; diff --git a/sql/protocol_classic.h b/sql/protocol_classic.h index c20b3815c1ff..08822695b3c2 100644 --- a/sql/protocol_classic.h +++ b/sql/protocol_classic.h @@ -1,7 +1,7 @@ #ifndef PROTOCOL_CLASSIC_INCLUDED #define PROTOCOL_CLASSIC_INCLUDED -/* Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2002, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -152,8 +152,6 @@ class Protocol_classic : public Protocol char *get_last_error(); /* Set max allowed packet size */ void set_max_packet_size(ulong max_packet_size); - /* Return SSL descriptor, if any */ - SSL_handle get_ssl(); /* Deinitialize VIO */ virtual int shutdown(bool server_shutdown= false); /* Wipe NET with zeros */ diff --git a/sql/rpl_slave.cc b/sql/rpl_slave.cc index cde2f5e03099..aee13e12cb25 100644 --- a/sql/rpl_slave.cc +++ b/sql/rpl_slave.cc @@ -9867,21 +9867,18 @@ bool start_slave(THD* thd, mi->channel_wrlock(); +#if !defined(EMBEDDED_LIBRARY) if (connection_param->user || connection_param->password) { -#if defined(HAVE_OPENSSL) && !defined(EMBEDDED_LIBRARY) - if (!thd->get_protocol()->get_ssl()) + if (!thd->get_ssl()) + { push_warning(thd, Sql_condition::SL_NOTE, ER_INSECURE_PLAIN_TEXT, ER(ER_INSECURE_PLAIN_TEXT)); -#endif -#if !defined(HAVE_OPENSSL) && !defined(EMBEDDED_LIBRARY) - push_warning(thd, Sql_condition::SL_NOTE, - ER_INSECURE_PLAIN_TEXT, - ER(ER_INSECURE_PLAIN_TEXT)); -#endif + } } +#endif lock_slave_threads(mi); // this allows us to cleanly read slave_running // Get a mask of _stopped_ threads @@ -10654,16 +10651,13 @@ static int change_receive_options(THD* thd, LEX_MASTER_INFO* lex_mi, if (lex_mi->user || lex_mi->password) { -#if defined(HAVE_OPENSSL) && !defined(EMBEDDED_LIBRARY) - if (!thd->get_protocol()->get_ssl()) +#if !defined(EMBEDDED_LIBRARY) + if (!thd->get_ssl()) + { push_warning(thd, Sql_condition::SL_NOTE, ER_INSECURE_PLAIN_TEXT, ER(ER_INSECURE_PLAIN_TEXT)); -#endif -#if !defined(HAVE_OPENSSL) && !defined(EMBEDDED_LIBRARY) - push_warning(thd, Sql_condition::SL_NOTE, - ER_INSECURE_PLAIN_TEXT, - ER(ER_INSECURE_PLAIN_TEXT)); + } #endif push_warning(thd, Sql_condition::SL_NOTE, ER_INSECURE_CHANGE_MASTER, diff --git a/sql/sql_class.cc b/sql/sql_class.cc index 3e4919184039..6bb2e06f8e0e 100644 --- a/sql/sql_class.cc +++ b/sql/sql_class.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -1183,6 +1183,7 @@ THD::THD(bool enable_plugins) peer_port= 0; // For SHOW PROCESSLIST get_transaction()->m_flags.enabled= true; active_vio = 0; + m_SSL = NULL; mysql_mutex_init(key_LOCK_thd_data, &LOCK_thd_data, MY_MUTEX_INIT_FAST); mysql_mutex_init(key_LOCK_thd_query, &LOCK_thd_query, MY_MUTEX_INIT_FAST); mysql_mutex_init(key_LOCK_thd_sysvar, &LOCK_thd_sysvar, MY_MUTEX_INIT_FAST); @@ -2546,7 +2547,7 @@ int THD::send_explain_fields(Query_result *result) enum_vio_type THD::get_vio_type() { #ifndef EMBEDDED_LIBRARY - DBUG_ENTER("shutdown_active_vio"); + DBUG_ENTER("THD::get_vio_type"); DBUG_RETURN(get_protocol()->connection_type()); #else return NO_VIO_TYPE; @@ -2562,6 +2563,7 @@ void THD::shutdown_active_vio() { vio_shutdown(active_vio); active_vio = 0; + m_SSL = NULL; } #endif DBUG_VOID_RETURN; diff --git a/sql/sql_class.h b/sql/sql_class.h index 2210a3845eb6..faa45a02325b 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -51,6 +51,8 @@ #include #include "mysql/thread_type.h" +#include "violite.h" /* SSL_handle */ + class Reprepare_observer; class sp_cache; class Rows_log_event; @@ -1745,6 +1747,22 @@ class THD :public MDL_context_owner, return m_protocol; } + SSL_handle get_ssl() const + { +#ifndef DBUG_OFF + if (current_thd != this) + { + /* + When inspecting this thread from monitoring, + the monitoring thread MUST lock LOCK_thd_data, + to be allowed to safely inspect SSL status variables. + */ + mysql_mutex_assert_owner(&LOCK_thd_data); + } +#endif + return m_SSL; + } + /** Asserts that the protocol is of type text or binary and then returns the m_protocol casted to Protocol_classic. This method @@ -1765,6 +1783,17 @@ class THD :public MDL_context_owner, private: Protocol *m_protocol; // Current protocol + /** + SSL data attached to this connection. + This is an opaque pointer, + When building with SSL, this pointer is non NULL + only if the connection is using SSL. + When building without SSL, this pointer is always NULL. + The SSL data can be inspected to read per thread + status variables, + and this can be inspected while the thread is running. + */ + SSL_handle m_SSL; public: /** @@ -3035,10 +3064,22 @@ class THD :public MDL_context_owner, mysql_mutex_unlock(&LOCK_thd_data); } + inline void set_ssl(Vio* vio) + { +#ifdef HAVE_OPENSSL + mysql_mutex_lock(&LOCK_thd_data); + m_SSL = (SSL*) vio->ssl_arg; + mysql_mutex_unlock(&LOCK_thd_data); +#else + m_SSL = NULL; +#endif + } + inline void clear_active_vio() { mysql_mutex_lock(&LOCK_thd_data); active_vio = 0; + m_SSL = NULL; mysql_mutex_unlock(&LOCK_thd_data); } diff --git a/sql/sql_connect.cc b/sql/sql_connect.cc index 23c3a4cee13c..9a0550f7845a 100644 --- a/sql/sql_connect.cc +++ b/sql/sql_connect.cc @@ -698,6 +698,14 @@ static int check_connection(THD *thd) reset_host_connect_errors(thd->m_main_security_ctx.ip().str); } + /* + Now that acl_authenticate() is executed, + the SSL info is available. + Advertise it to THD, so SSL status variables + can be inspected. + */ + thd->set_ssl(net->vio); + return auth_rc; } diff --git a/sql/sql_plugin.cc b/sql/sql_plugin.cc index a1bfcd8c5547..7bc49863995c 100644 --- a/sql/sql_plugin.cc +++ b/sql/sql_plugin.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2005, 2017, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2005, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -3298,8 +3298,10 @@ static void cleanup_variables(THD *thd, struct system_variables *vars) { /* Block the Performance Schema from accessing THD::variables. */ mysql_mutex_lock(&thd->LOCK_thd_data); - + plugin_var_memalloc_free(&thd->variables); + /* Remove references to session_sysvar_res_mgr memory before freeing it. */ + thd->variables.track_sysvars_ptr = NULL; thd->session_sysvar_res_mgr.deinit(); } DBUG_ASSERT(vars->table_plugin == NULL); diff --git a/sql/sql_prepare.cc b/sql/sql_prepare.cc index 703e903a0a38..df9a527fcdad 100644 --- a/sql/sql_prepare.cc +++ b/sql/sql_prepare.cc @@ -158,7 +158,6 @@ class Protocol_local : public Protocol virtual void end_partial_result_set(); virtual int shutdown(bool server_shutdown= false); virtual bool connection_alive(); - virtual SSL_handle get_ssl(); virtual void start_row(); virtual bool end_row(); virtual void abort_row(){}; @@ -4550,11 +4549,6 @@ Protocol_local::shutdown(bool server_shutdown) return 0; } -SSL_handle Protocol_local::get_ssl() -{ - return NULL; -} - /** Called between two result set rows. diff --git a/storage/perfschema/pfs_variable.h b/storage/perfschema/pfs_variable.h index bc08650ed238..d1bf2d681de1 100644 --- a/storage/perfschema/pfs_variable.h +++ b/storage/perfschema/pfs_variable.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -452,7 +452,16 @@ PFS_variable_cache::~PFS_variable_cache() template THD *PFS_variable_cache::get_THD(THD *unsafe_thd) { - DBUG_ASSERT(unsafe_thd != NULL); + if (unsafe_thd == NULL) + { + /* + May happen, precisely because the pointer is unsafe + (THD just disconnected for example). + No need to walk Global_THD_manager for that. + */ + return NULL; + } + m_thd_finder.set_unsafe_thd(unsafe_thd); THD* safe_thd= Global_THD_manager::get_instance()->find_thd(&m_thd_finder); return safe_thd; From 1d8287c48ee309f5035324f84f17b7ee63bfe31f Mon Sep 17 00:00:00 2001 From: Evgeniy Patlan Date: Tue, 20 Feb 2018 16:50:19 +0200 Subject: [PATCH 0586/1221] [PS-3850] Fix incorrectly set LD_PRELOAD value --- build-ps/debian/percona-server-server-5.7.postinst | 4 ++++ build-ps/ubuntu/percona-server-server-5.7.postinst | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/build-ps/debian/percona-server-server-5.7.postinst b/build-ps/debian/percona-server-server-5.7.postinst index 05b668c780e1..0c737291ebb5 100755 --- a/build-ps/debian/percona-server-server-5.7.postinst +++ b/build-ps/debian/percona-server-server-5.7.postinst @@ -34,6 +34,10 @@ then dir=$(dirname $(readlink -f $path)) for dir in "${MY_BASEDIR_VERSION}/lib/mysql" "/usr/lib64" "/usr/lib/x86_64-linux-gnu" "/usr/lib"; do if [ -r "$dir/libjemalloc.so.1" ]; then + preload_value=$(grep "LD_PRELOAD" /etc/default/mysql | awk -F'=' '{print $2}') + if [ $preload_value = 0 ]; then + sed -i 's/^LD_PRELOAD.*//' /etc/default/mysql + fi preload_exists=$(grep -c "LD_PRELOAD" /etc/default/mysql) thp_exists=$(grep -c "THP_SETTING" /etc/default/mysql) if [ $preload_exists = 0 ] diff --git a/build-ps/ubuntu/percona-server-server-5.7.postinst b/build-ps/ubuntu/percona-server-server-5.7.postinst index 05b668c780e1..0c737291ebb5 100755 --- a/build-ps/ubuntu/percona-server-server-5.7.postinst +++ b/build-ps/ubuntu/percona-server-server-5.7.postinst @@ -34,6 +34,10 @@ then dir=$(dirname $(readlink -f $path)) for dir in "${MY_BASEDIR_VERSION}/lib/mysql" "/usr/lib64" "/usr/lib/x86_64-linux-gnu" "/usr/lib"; do if [ -r "$dir/libjemalloc.so.1" ]; then + preload_value=$(grep "LD_PRELOAD" /etc/default/mysql | awk -F'=' '{print $2}') + if [ $preload_value = 0 ]; then + sed -i 's/^LD_PRELOAD.*//' /etc/default/mysql + fi preload_exists=$(grep -c "LD_PRELOAD" /etc/default/mysql) thp_exists=$(grep -c "THP_SETTING" /etc/default/mysql) if [ $preload_exists = 0 ] From 7048750c260c332c11db0c1f31d14eb9f8999877 Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Tue, 20 Feb 2018 17:07:49 +0100 Subject: [PATCH 0587/1221] PS-3844: Increment ccache timeout and remove caching of homebrew packages for Travis CI --- .travis.yml | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index bc227dfdeb21..d9d7edbaeef1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,15 +5,15 @@ language: cpp cache: ccache: true + timeout: 600 directories: - $HOME/.ccache - - /usr/local/Cellar # cache homebrew packages for macOS env: global: - CCACHE_DIR=$HOME/.ccache - CCACHE_COMPRESS=1 - - CCACHE_MAXSIZE=500M + - CCACHE_MAXSIZE=500Mi - CCACHE_CPP2=1 - MAINTAINER_MODE=ON @@ -27,7 +27,8 @@ matrix: - git diff -U0 --no-color HEAD^1 | ./clang-format-diff.py -p1 >_GIT_DIFF - '[ ! -s _GIT_DIFF ] && echo The last git commit is clang-formatted || cat _GIT_DIFF' # 2 - - os: osx + - compiler: clang + os: osx osx_image: xcode9.2 env: BUILD=RelWithDebInfo MAINTAINER_MODE=OFF # 3 @@ -55,7 +56,8 @@ matrix: - compiler: gcc env: VERSION=4.8 BUILD=RelWithDebInfo # 11 - - os: osx + - compiler: clang + os: osx osx_image: xcode9.2 env: BUILD=Debug MAINTAINER_MODE=OFF # 12 @@ -127,6 +129,8 @@ script: - $CC -v - $CXX -v - ccache --version + - ccache --print-config; + ccache --zero-stats; - echo -- Perform Debug or RelWithDebInfo compilation; if [[ "$INVERTED" == "ON" ]]; then From 39d3ae4952ec041fd8bee0d9ef1c9525cb56a39d Mon Sep 17 00:00:00 2001 From: Manuel Ung Date: Thu, 11 Jan 2018 15:21:38 -0800 Subject: [PATCH 0588/1221] Skip trailing space bytes for non-unpackable fields Upstream commit ID : fb-mysql-5.6.35/f3d36951a62aa1a00a5a10083fb77e9919022e03 MYR-232 : rocksdb: crash & corruption, charsets, indexed cols Cherry picked directly. Summary: We always generate unpack info bytes that indicate how much trailing space we need, even when the field can never be unpacked, because it is not implemented. When skipping these fields however, we only skip the key portion, and not the value portion which corrupts data for code that reads unpack_info downstream. Fix by skipping these bytes. Closes #784 Closes https://github.com/facebook/mysql-5.6/pull/785 Differential Revision: D6699483 fbshipit-source-id: fd5c9d6 --- mysql-test/suite/rocksdb/r/type_varchar.result | 10 ++++++++++ mysql-test/suite/rocksdb/t/type_varchar.test | 9 +++++++++ storage/rocksdb/rdb_datadic.cc | 12 ++++++++++++ 3 files changed, 31 insertions(+) diff --git a/mysql-test/suite/rocksdb/r/type_varchar.result b/mysql-test/suite/rocksdb/r/type_varchar.result index 261050ac4108..e68c4e990e55 100644 --- a/mysql-test/suite/rocksdb/r/type_varchar.result +++ b/mysql-test/suite/rocksdb/r/type_varchar.result @@ -821,3 +821,13 @@ email_i 1 drop table t; set global rocksdb_checksums_pct = @save_rocksdb_checksums_pct; set session rocksdb_verify_row_debug_checksums = @save_rocksdb_verify_row_debug_checksums; +create table t (h varchar(31) character set utf8 collate utf8_bin not null, i varchar(19) collate latin1_bin not null, primary key(i), key(h)) engine=rocksdb; +insert into t(i,h) values('a','b'); +check table t; +Table Op Msg_type Msg_text +test.t check status OK +alter table t modify h varchar(31) character set cp1257 collate cp1257_bin not null; +check table t; +Table Op Msg_type Msg_text +test.t check status OK +drop table t; diff --git a/mysql-test/suite/rocksdb/t/type_varchar.test b/mysql-test/suite/rocksdb/t/type_varchar.test index eeb7ace4b870..7307b764c290 100644 --- a/mysql-test/suite/rocksdb/t/type_varchar.test +++ b/mysql-test/suite/rocksdb/t/type_varchar.test @@ -71,3 +71,12 @@ select 'email_i' as index_name, count(*) AS count from t force index(email_i); drop table t; set global rocksdb_checksums_pct = @save_rocksdb_checksums_pct; set session rocksdb_verify_row_debug_checksums = @save_rocksdb_verify_row_debug_checksums; + +# Issue #784 - Skip trailing space bytes for non-unpackable fields + +create table t (h varchar(31) character set utf8 collate utf8_bin not null, i varchar(19) collate latin1_bin not null, primary key(i), key(h)) engine=rocksdb; +insert into t(i,h) values('a','b'); +check table t; +alter table t modify h varchar(31) character set cp1257 collate cp1257_bin not null; +check table t; +drop table t; diff --git a/storage/rocksdb/rdb_datadic.cc b/storage/rocksdb/rdb_datadic.cc index a0214e355ab4..2b1eedae5cc5 100644 --- a/storage/rocksdb/rdb_datadic.cc +++ b/storage/rocksdb/rdb_datadic.cc @@ -1527,6 +1527,18 @@ int Rdb_key_def::unpack_record(TABLE *const table, uchar *const buf, } if ((this->*fpi->m_skip_func)(fpi, field, &reader)) return HA_ERR_ROCKSDB_CORRUPT_DATA; + + // If this is a space padded varchar, we need to skip the indicator + // bytes for trailing bytes. They're useless since we can't restore the + // field anyway. + // + // There is a special case for prefixed varchars where we do not + // generate unpack info, because we know prefixed varchars cannot be + // unpacked. In this case, it is not necessary to skip. + if (fpi->m_skip_func == &Rdb_key_def::skip_variable_space_pad && + !fpi->m_unpack_info_stores_value) { + unp_reader.read(fpi->m_unpack_info_uses_two_bytes ? 2 : 1); + } } } From 431e84d06a7c1c488def3095d4d1818b2e74d3e5 Mon Sep 17 00:00:00 2001 From: Gleb Shchepa Date: Tue, 13 Feb 2018 00:16:39 +0400 Subject: [PATCH 0589/1221] WL#11460: Deprecate some SQL compatibility modes in 5.7 This patch is for 5.7. This WL forces deprecation warnings on setting a few compatibility modes: * DB2 * MAXDB * MSSQL * MYSQL323 * MYSQL40 * ORACLE * POSTGRESQL * NO_FIELD_OPTIONS * NO_KEY_OPTIONS * NO_TABLE_OPTIONS Also in warns on the creation of TIMESTAMP columns if the MAXDB SQL mode is "on". --- mysql-test/r/ansi.result | 7 ++++ mysql-test/r/events_bugs.result | 2 + mysql-test/r/grant2.result | 1 + mysql-test/r/partition.result | 1 + mysql-test/r/query_cache.result | 2 + mysql-test/r/sp.result | 1 + mysql-test/r/sql_mode.result | 26 ++++++++++++ mysql-test/r/type_timestamp.result | 4 ++ mysql-test/r/type_timestamp_explicit.result | 4 ++ .../innodb/r/optimizer_temporary_table.result | 2 + .../suite/rpl/r/rpl_loaddatalocal.result | 1 + mysql-test/suite/rpl/r/rpl_variables.result | 2 + .../suite/sys_vars/r/sql_mode_basic.result | 41 +++++++++++++++++++ sql/share/errmsg-utf8.txt | 3 ++ sql/sql_yacc.yy | 7 +++- sql/sys_vars.cc | 16 ++++++++ 16 files changed, 119 insertions(+), 1 deletion(-) diff --git a/mysql-test/r/ansi.result b/mysql-test/r/ansi.result index 8ceca9c2b623..3070a5300371 100644 --- a/mysql-test/r/ansi.result +++ b/mysql-test/r/ansi.result @@ -2,6 +2,7 @@ drop table if exists t1; set sql_mode="MySQL40"; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +Warning 3090 Changing sql mode 'MYSQL40' is deprecated. It will be removed in a future release. select @@sql_mode; @@sql_mode MYSQL40,HIGH_NOT_PRECEDENCE @@ -27,6 +28,8 @@ t1 CREATE TABLE `t1` ( PRIMARY KEY (`i`) ) ENGINE=ENGINE DEFAULT CHARSET=latin1 SET @@SQL_MODE="MYSQL323"; +Warnings: +Warning 3090 Changing sql mode 'MYSQL323' is deprecated. It will be removed in a future release. SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( @@ -34,6 +37,8 @@ t1 CREATE TABLE `t1` ( PRIMARY KEY (`i`) ) TYPE=ENGINE SET @@SQL_MODE="MYSQL40"; +Warnings: +Warning 3090 Changing sql mode 'MYSQL40' is deprecated. It will be removed in a future release. SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( @@ -41,6 +46,8 @@ t1 CREATE TABLE `t1` ( PRIMARY KEY (`i`) ) TYPE=ENGINE SET @@SQL_MODE="NO_FIELD_OPTIONS"; +Warnings: +Warning 3090 Changing sql mode 'NO_FIELD_OPTIONS' is deprecated. It will be removed in a future release. SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( diff --git a/mysql-test/r/events_bugs.result b/mysql-test/r/events_bugs.result index 3387ef2940ac..666830851826 100644 --- a/mysql-test/r/events_bugs.result +++ b/mysql-test/r/events_bugs.result @@ -749,6 +749,8 @@ DROP USER mysqltest_u1@localhost; drop procedure if exists p; set @old_mode= @@sql_mode; set @@sql_mode= cast(pow(2,32)-1 as unsigned integer); +Warnings: +Warning 3090 Changing sql mode 'POSTGRESQL,ORACLE,MSSQL,DB2,MAXDB,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS,MYSQL323,MYSQL40' is deprecated. It will be removed in a future release. create event e1 on schedule every 1 day do select 1; select @@sql_mode into @full_mode; set @@sql_mode= @old_mode; diff --git a/mysql-test/r/grant2.result b/mysql-test/r/grant2.result index 986fdb4d8897..28e730d10f0f 100644 --- a/mysql-test/r/grant2.result +++ b/mysql-test/r/grant2.result @@ -163,6 +163,7 @@ flush privileges; set sql_mode='maxdb'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +Warning 3090 Changing sql mode 'MAXDB,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS' is deprecated. It will be removed in a future release. drop table if exists t1, t2; create table t1(c1 int); create table t2(c1 int, c2 int); diff --git a/mysql-test/r/partition.result b/mysql-test/r/partition.result index dcb14ec2fe1a..8de9269b2ebd 100644 --- a/mysql-test/r/partition.result +++ b/mysql-test/r/partition.result @@ -2132,6 +2132,7 @@ Warning 1287 The partition engine, used by table 'test.t1', is deprecated and wi set session sql_mode='no_table_options'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +Warning 3090 Changing sql mode 'NO_TABLE_OPTIONS' is deprecated. It will be removed in a future release. show create table t1; Table Create Table t1 CREATE TABLE `t1` ( diff --git a/mysql-test/r/query_cache.result b/mysql-test/r/query_cache.result index fb3732f65cab..c42adf7376ad 100644 --- a/mysql-test/r/query_cache.result +++ b/mysql-test/r/query_cache.result @@ -869,6 +869,8 @@ select '1' || '3' from t1; 1 1 set SQL_MODE=oracle; +Warnings: +Warning 3090 Changing sql mode 'ORACLE,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS' is deprecated. It will be removed in a future release. select '1' || '3' from t1; '1' || '3' 13 diff --git a/mysql-test/r/sp.result b/mysql-test/r/sp.result index 244a2d37a0c3..a6cd3d18a218 100644 --- a/mysql-test/r/sp.result +++ b/mysql-test/r/sp.result @@ -6907,6 +6907,7 @@ set @old_mode= @@sql_mode; set @@sql_mode= cast(pow(2,32)-1 as unsigned integer); Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +Warning 3090 Changing sql mode 'POSTGRESQL,ORACLE,MSSQL,DB2,MAXDB,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS,MYSQL323,MYSQL40' is deprecated. It will be removed in a future release. select @@sql_mode into @full_mode; create procedure p() begin end; call p(); diff --git a/mysql-test/r/sql_mode.result b/mysql-test/r/sql_mode.result index 9f146db199da..139b62f0fd31 100644 --- a/mysql-test/r/sql_mode.result +++ b/mysql-test/r/sql_mode.result @@ -36,6 +36,8 @@ t1 CREATE TABLE "t1" ( UNIQUE KEY "email" ("email") USING BTREE ) ENGINE=MEMORY DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC set @@sql_mode="no_table_options"; +Warnings: +Warning 3090 Changing sql mode 'NO_TABLE_OPTIONS' is deprecated. It will be removed in a future release. show variables like 'sql_mode'; Variable_name Value sql_mode NO_TABLE_OPTIONS @@ -49,6 +51,8 @@ t1 CREATE TABLE `t1` ( UNIQUE KEY `email` (`email`) USING BTREE ) set @@sql_mode="no_key_options"; +Warnings: +Warning 3090 Changing sql mode 'NO_KEY_OPTIONS' is deprecated. It will be removed in a future release. show variables like 'sql_mode'; Variable_name Value sql_mode NO_KEY_OPTIONS @@ -62,6 +66,8 @@ t1 CREATE TABLE `t1` ( UNIQUE KEY `email` (`email`) ) ENGINE=MEMORY DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC set @@sql_mode="no_field_options,mysql323,mysql40"; +Warnings: +Warning 3090 Changing sql mode 'NO_FIELD_OPTIONS,MYSQL323,MYSQL40' is deprecated. It will be removed in a future release. show variables like 'sql_mode'; Variable_name Value sql_mode NO_FIELD_OPTIONS,MYSQL323,MYSQL40,HIGH_NOT_PRECEDENCE @@ -77,6 +83,7 @@ t1 CREATE TABLE `t1` ( set sql_mode="postgresql,oracle,mssql,db2,maxdb"; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +Warning 3090 Changing sql mode 'POSTGRESQL,ORACLE,MSSQL,DB2,MAXDB,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS' is deprecated. It will be removed in a future release. select @@sql_mode; @@sql_mode PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,POSTGRESQL,ORACLE,MSSQL,DB2,MAXDB,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS,NO_AUTO_CREATE_USER @@ -106,6 +113,8 @@ t1 CREATE TABLE `t1` ( `c` binary(10) DEFAULT NULL ) ENGINE=ENGINE DEFAULT CHARSET=latin1 set @@sql_mode="mysql323"; +Warnings: +Warning 3090 Changing sql mode 'MYSQL323' is deprecated. It will be removed in a future release. show create table t1; Table Create Table t1 CREATE TABLE `t1` ( @@ -114,6 +123,8 @@ t1 CREATE TABLE `t1` ( `c` binary(10) DEFAULT NULL ) TYPE=ENGINE set @@sql_mode="mysql40"; +Warnings: +Warning 3090 Changing sql mode 'MYSQL40' is deprecated. It will be removed in a future release. show create table t1; Table Create Table t1 CREATE TABLE `t1` ( @@ -159,6 +170,8 @@ t1 CREATE TABLE "t1" ( PRIMARY KEY ("f1") ) set session sql_mode=no_field_options; +Warnings: +Warning 3090 Changing sql mode 'NO_FIELD_OPTIONS' is deprecated. It will be removed in a future release. show create table t1; Table Create Table t1 CREATE TABLE `t1` ( @@ -482,6 +495,8 @@ select @@sql_mode; @@sql_mode STRICT_ALL_TABLES set sql_mode=16384+(65536*4); +Warnings: +Warning 3090 Changing sql mode 'NO_TABLE_OPTIONS' is deprecated. It will be removed in a future release. select @@sql_mode; @@sql_mode REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ONLY_FULL_GROUP_BY,NO_TABLE_OPTIONS,ANSI @@ -506,6 +521,8 @@ xb x xcx drop table t1; SET @@SQL_MODE=@OLD_SQL_MODE; +Warnings: +Warning 3090 Changing sql mode 'NO_FIELD_OPTIONS' is deprecated. It will be removed in a future release. create user mysqltest_32753@localhost; set @OLD_SQL_MODE=@@SESSION.SQL_MODE; set session sql_mode='PAD_CHAR_TO_FULL_LENGTH'; @@ -514,6 +531,8 @@ select current_user(); current_user() mysqltest_32753@localhost set session sql_mode=@OLD_SQL_MODE; +Warnings: +Warning 3090 Changing sql mode 'NO_FIELD_OPTIONS' is deprecated. It will be removed in a future release. flush privileges; drop user mysqltest_32753@localhost; SET @org_mode=@@sql_mode; @@ -526,6 +545,7 @@ SELECT @@sql_mode LIKE '%NO_ENGINE_SUBSTITUTION%'; SET sql_mode=@org_mode; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +Warning 3090 Changing sql mode 'NO_FIELD_OPTIONS' is deprecated. It will be removed in a future release. DROP TABLE IF EXISTS t1,t2; CREATE USER 'user_PCTFL'@'localhost' identified by 'PWD'; CREATE USER 'user_no_PCTFL'@'localhost' identified by 'PWD'; @@ -537,6 +557,8 @@ SET @OLD_SQL_MODE = @@SESSION.SQL_MODE; SET SESSION SQL_MODE = 'PAD_CHAR_TO_FULL_LENGTH'; DROP USER 'user_PCTFL'@'localhost'; SET SESSION SQL_MODE = @OLD_SQL_MODE; +Warnings: +Warning 3090 Changing sql mode 'NO_FIELD_OPTIONS' is deprecated. It will be removed in a future release. DROP USER 'user_no_PCTFL'@'localhost'; FLUSH PRIVILEGES; SELECT * FROM mysql.db WHERE Host = 'localhost' AND User LIKE 'user_%PCTFL'; @@ -749,6 +771,8 @@ wxyz\_ef DROP TABLE test_table; DROP FUNCTION test_function; SET @@sql_mode= @org_mode; +Warnings: +Warning 3090 Changing sql mode 'NO_FIELD_OPTIONS' is deprecated. It will be removed in a future release. #End of Test for Bug#12601974 # @@ -781,6 +805,8 @@ ERROR_FOR_DIVISION_BY_ZERO # Restore sql mode # SET sql_mode= @org_mode; +Warnings: +Warning 3090 Changing sql mode 'NO_FIELD_OPTIONS' is deprecated. It will be removed in a future release. # # Check that NO_ZERO_DATE, NO_ZERO_IN_DATE and ERROR_FOR_DIVISION_BY_ZERO modes # are removed in triggers after upgrading to 5.7. diff --git a/mysql-test/r/type_timestamp.result b/mysql-test/r/type_timestamp.result index 03a3cef52607..6aa81f36490d 100644 --- a/mysql-test/r/type_timestamp.result +++ b/mysql-test/r/type_timestamp.result @@ -407,7 +407,11 @@ drop table t1; set sql_mode='maxdb'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +Warning 3090 Changing sql mode 'MAXDB,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS' is deprecated. It will be removed in a future release. create table t1 (a timestamp, b timestamp); +Warnings: +Warning 3226 With the MAXDB SQL mode enabled, TIMESTAMP is identical with DATETIME. The MAXDB SQL mode is deprecated and will be removed in a future release. Please disable the MAXDB SQL mode and use DATETIME instead. +Warning 3226 With the MAXDB SQL mode enabled, TIMESTAMP is identical with DATETIME. The MAXDB SQL mode is deprecated and will be removed in a future release. Please disable the MAXDB SQL mode and use DATETIME instead. show create table t1; Table Create Table t1 CREATE TABLE "t1" ( diff --git a/mysql-test/r/type_timestamp_explicit.result b/mysql-test/r/type_timestamp_explicit.result index 05cd77973012..2c8e68c6284e 100644 --- a/mysql-test/r/type_timestamp_explicit.result +++ b/mysql-test/r/type_timestamp_explicit.result @@ -405,7 +405,11 @@ drop table t1; set sql_mode='maxdb'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +Warning 3090 Changing sql mode 'MAXDB,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS' is deprecated. It will be removed in a future release. create table t1 (a timestamp, b timestamp); +Warnings: +Warning 3226 With the MAXDB SQL mode enabled, TIMESTAMP is identical with DATETIME. The MAXDB SQL mode is deprecated and will be removed in a future release. Please disable the MAXDB SQL mode and use DATETIME instead. +Warning 3226 With the MAXDB SQL mode enabled, TIMESTAMP is identical with DATETIME. The MAXDB SQL mode is deprecated and will be removed in a future release. Please disable the MAXDB SQL mode and use DATETIME instead. show create table t1; Table Create Table t1 CREATE TABLE "t1" ( diff --git a/mysql-test/suite/innodb/r/optimizer_temporary_table.result b/mysql-test/suite/innodb/r/optimizer_temporary_table.result index fa7795358c1e..d54730f0160f 100644 --- a/mysql-test/suite/innodb/r/optimizer_temporary_table.result +++ b/mysql-test/suite/innodb/r/optimizer_temporary_table.result @@ -4130,6 +4130,8 @@ select count(*) from t0; count(*) 0 set @@session.sql_mode = MAXDB; +Warnings: +Warning 3090 Changing sql mode 'MAXDB,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS' is deprecated. It will be removed in a future release. set @@session.tmp_table_size = 0; Warnings: Warning 1292 Truncated incorrect tmp_table_size value: '0' diff --git a/mysql-test/suite/rpl/r/rpl_loaddatalocal.result b/mysql-test/suite/rpl/r/rpl_loaddatalocal.result index a949e3de344f..d52b6d3c84bd 100644 --- a/mysql-test/suite/rpl/r/rpl_loaddatalocal.result +++ b/mysql-test/suite/rpl/r/rpl_loaddatalocal.result @@ -85,6 +85,7 @@ LOAD/*!99999 special comments that do not expand */DATA/*!99999 code from the fu SET sql_mode='PIPES_AS_CONCAT,ANSI_QUOTES,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS,STRICT_TRANS_TABLES,STRICT_ALL_TABLES,TRADITIONAL,NO_AUTO_CREATE_USER'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +Warning 3090 Changing sql mode 'NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS' is deprecated. It will be removed in a future release. LOAD DATA LOCAL INFILE 'MYSQLD_DATADIR/bug43746.sql' INTO TABLE t1; [slave] include/sync_slave_sql_with_master.inc diff --git a/mysql-test/suite/rpl/r/rpl_variables.result b/mysql-test/suite/rpl/r/rpl_variables.result index e0aa43ab3640..b5b71488d134 100644 --- a/mysql-test/suite/rpl/r/rpl_variables.result +++ b/mysql-test/suite/rpl/r/rpl_variables.result @@ -146,6 +146,7 @@ Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be r SET @@local.sql_mode = 'NO_FIELD_OPTIONS,NO_KEY_OPTIONS,NO_TABLE_OPTIONS'; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +Warning 3090 Changing sql mode 'NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS' is deprecated. It will be removed in a future release. INSERT INTO tstmt(text) VALUES (@@global.sql_mode); INSERT INTO tstmt(text) VALUES (@@local.sql_mode); ---- user variables ---- @@ -543,6 +544,7 @@ Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be r EXECUTE p54; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +Warning 3090 Changing sql mode 'NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS' is deprecated. It will be removed in a future release. EXECUTE p55; EXECUTE p56; EXECUTE p57; diff --git a/mysql-test/suite/sys_vars/r/sql_mode_basic.result b/mysql-test/suite/sys_vars/r/sql_mode_basic.result index 1194ceb18dc7..abd5bb94760b 100644 --- a/mysql-test/suite/sys_vars/r/sql_mode_basic.result +++ b/mysql-test/suite/sys_vars/r/sql_mode_basic.result @@ -110,14 +110,20 @@ SELECT @@global.sql_mode; @@global.sql_mode NO_ENGINE_SUBSTITUTION SET @@global.sql_mode = NO_FIELD_OPTIONS; +Warnings: +Warning 3090 Changing sql mode 'NO_FIELD_OPTIONS' is deprecated. It will be removed in a future release. SELECT @@global.sql_mode; @@global.sql_mode NO_FIELD_OPTIONS SET @@global.sql_mode = NO_KEY_OPTIONS; +Warnings: +Warning 3090 Changing sql mode 'NO_KEY_OPTIONS' is deprecated. It will be removed in a future release. SELECT @@global.sql_mode; @@global.sql_mode NO_KEY_OPTIONS SET @@global.sql_mode = NO_TABLE_OPTIONS; +Warnings: +Warning 3090 Changing sql mode 'NO_TABLE_OPTIONS' is deprecated. It will be removed in a future release. SELECT @@global.sql_mode; @@global.sql_mode NO_TABLE_OPTIONS @@ -162,34 +168,46 @@ SELECT @@global.sql_mode; @@global.sql_mode STRICT_TRANS_TABLES SET @@global.sql_mode = DB2; +Warnings: +Warning 3090 Changing sql mode 'DB2,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS' is deprecated. It will be removed in a future release. SELECT @@global.sql_mode; @@global.sql_mode PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,DB2,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS SET @@global.sql_mode = MAXDB; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +Warning 3090 Changing sql mode 'MAXDB,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS' is deprecated. It will be removed in a future release. SELECT @@global.sql_mode; @@global.sql_mode PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,MAXDB,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS,NO_AUTO_CREATE_USER SET @@global.sql_mode = MSSQL; +Warnings: +Warning 3090 Changing sql mode 'MSSQL,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS' is deprecated. It will be removed in a future release. SELECT @@global.sql_mode; @@global.sql_mode PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,MSSQL,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS SET @@global.sql_mode = MYSQL323; +Warnings: +Warning 3090 Changing sql mode 'MYSQL323' is deprecated. It will be removed in a future release. SELECT @@global.sql_mode; @@global.sql_mode MYSQL323,HIGH_NOT_PRECEDENCE SET @@global.sql_mode = MYSQL40; +Warnings: +Warning 3090 Changing sql mode 'MYSQL40' is deprecated. It will be removed in a future release. SELECT @@global.sql_mode; @@global.sql_mode MYSQL40,HIGH_NOT_PRECEDENCE SET @@global.sql_mode = ORACLE; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +Warning 3090 Changing sql mode 'ORACLE,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS' is deprecated. It will be removed in a future release. SELECT @@global.sql_mode; @@global.sql_mode PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ORACLE,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS,NO_AUTO_CREATE_USER SET @@global.sql_mode = POSTGRESQL; +Warnings: +Warning 3090 Changing sql mode 'POSTGRESQL,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS' is deprecated. It will be removed in a future release. SELECT @@global.sql_mode; @@global.sql_mode PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,POSTGRESQL,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS @@ -266,14 +284,20 @@ SELECT @@session.sql_mode; @@session.sql_mode NO_ENGINE_SUBSTITUTION SET @@session.sql_mode = NO_FIELD_OPTIONS; +Warnings: +Warning 3090 Changing sql mode 'NO_FIELD_OPTIONS' is deprecated. It will be removed in a future release. SELECT @@session.sql_mode; @@session.sql_mode NO_FIELD_OPTIONS SET @@session.sql_mode = NO_KEY_OPTIONS; +Warnings: +Warning 3090 Changing sql mode 'NO_KEY_OPTIONS' is deprecated. It will be removed in a future release. SELECT @@session.sql_mode; @@session.sql_mode NO_KEY_OPTIONS SET @@session.sql_mode = NO_TABLE_OPTIONS; +Warnings: +Warning 3090 Changing sql mode 'NO_TABLE_OPTIONS' is deprecated. It will be removed in a future release. SELECT @@session.sql_mode; @@session.sql_mode NO_TABLE_OPTIONS @@ -318,38 +342,48 @@ SELECT @@session.sql_mode; @@session.sql_mode STRICT_TRANS_TABLES SET @@session.sql_mode = DB2; +Warnings: +Warning 3090 Changing sql mode 'DB2,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS' is deprecated. It will be removed in a future release. SELECT @@session.sql_mode; @@session.sql_mode PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,DB2,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS SET @@session.sql_mode = MAXDB; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +Warning 3090 Changing sql mode 'MAXDB,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS' is deprecated. It will be removed in a future release. SELECT @@session.sql_mode; @@session.sql_mode PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,MAXDB,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS,NO_AUTO_CREATE_USER SET @@session.sql_mode = MSSQL; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +Warning 3090 Changing sql mode 'MSSQL,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS' is deprecated. It will be removed in a future release. SELECT @@session.sql_mode; @@session.sql_mode PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,MSSQL,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS SET @@session.sql_mode = MYSQL323; +Warnings: +Warning 3090 Changing sql mode 'MYSQL323' is deprecated. It will be removed in a future release. SELECT @@session.sql_mode; @@session.sql_mode MYSQL323,HIGH_NOT_PRECEDENCE SET @@session.sql_mode = MYSQL40; +Warnings: +Warning 3090 Changing sql mode 'MYSQL40' is deprecated. It will be removed in a future release. SELECT @@session.sql_mode; @@session.sql_mode MYSQL40,HIGH_NOT_PRECEDENCE SET @@session.sql_mode = ORACLE; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +Warning 3090 Changing sql mode 'ORACLE,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS' is deprecated. It will be removed in a future release. SELECT @@session.sql_mode; @@session.sql_mode PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ORACLE,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS,NO_AUTO_CREATE_USER SET @@session.sql_mode = POSTGRESQL; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +Warning 3090 Changing sql mode 'POSTGRESQL,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS' is deprecated. It will be removed in a future release. SELECT @@session.sql_mode; @@session.sql_mode PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,POSTGRESQL,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS @@ -425,16 +459,21 @@ SELECT @@global.sql_mode; @@global.sql_mode REAL_AS_FLOAT,PIPES_AS_CONCAT SET @@global.sql_mode = 50000; +Warnings: +Warning 3090 Changing sql mode 'POSTGRESQL,ORACLE,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS' is deprecated. It will be removed in a future release. SELECT @@global.sql_mode; @@global.sql_mode PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,,,NO_UNSIGNED_SUBTRACTION,POSTGRESQL,ORACLE,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS,NO_AUTO_CREATE_USER SET @@global.sql_mode = 500000; Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +Warning 3090 Changing sql mode 'POSTGRESQL,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS,MYSQL323,MYSQL40' is deprecated. It will be removed in a future release. SELECT @@global.sql_mode; @@global.sql_mode REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ONLY_FULL_GROUP_BY,POSTGRESQL,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS,MYSQL323,MYSQL40,ANSI,HIGH_NOT_PRECEDENCE SET @@global.sql_mode = 4294967295; +Warnings: +Warning 3090 Changing sql mode 'POSTGRESQL,ORACLE,MSSQL,DB2,MAXDB,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS,MYSQL323,MYSQL40' is deprecated. It will be removed in a future release. SELECT @@global.sql_mode; @@global.sql_mode REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,,,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,ALLOW_INVALID_DATES,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_AUTO_CREATE_USER,HIGH_NOT_PRECEDENCE,NO_ENGINE_SUBSTITUTION,PAD_CHAR_TO_FULL_LENGTH @@ -479,6 +518,8 @@ SELECT @@session.sql_mode; @@session.sql_mode ANSI_QUOTES,STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ALLOW_INVALID_DATES,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION SET @@global.sql_mode = 'ONLY_FULL_GROUP_BY,PIPES_AS_CONCAT,REAL_AS_FLOAT,ORACLE,POSTGRESQL'; +Warnings: +Warning 3090 Changing sql mode 'POSTGRESQL,ORACLE,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS' is deprecated. It will be removed in a future release. SELECT @@global.sql_mode; @@global.sql_mode REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ONLY_FULL_GROUP_BY,POSTGRESQL,ORACLE,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS,NO_AUTO_CREATE_USER diff --git a/sql/share/errmsg-utf8.txt b/sql/share/errmsg-utf8.txt index 22575f5299b7..f42f93e087fd 100644 --- a/sql/share/errmsg-utf8.txt +++ b/sql/share/errmsg-utf8.txt @@ -7765,6 +7765,9 @@ ER_AUDIT_LOG_USER_NAME_INVALID_CHARACTER ER_AUDIT_LOG_HOST_NAME_INVALID_CHARACTER eng "Invalid character in the host name." +WARN_DEPRECATED_MAXDB_SQL_MODE_FOR_TIMESTAMP + eng "With the MAXDB SQL mode enabled, TIMESTAMP is identical with DATETIME. The MAXDB SQL mode is deprecated and will be removed in a future release. Please disable the MAXDB SQL mode and use DATETIME instead." + # # End of 5.7 error messages. # diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 34145a791cd2..aed8ac121ef1 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2017 Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2018 Oracle and/or its affiliates. All rights reserved. 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 @@ -6589,7 +6589,12 @@ type: { Lex->dec= const_cast($2); if (YYTHD->variables.sql_mode & MODE_MAXDB) + { + push_warning(current_thd, Sql_condition::SL_WARNING, + WARN_DEPRECATED_MAXDB_SQL_MODE_FOR_TIMESTAMP, + ER_THD(YYTHD, WARN_DEPRECATED_MAXDB_SQL_MODE_FOR_TIMESTAMP)); $$=MYSQL_TYPE_DATETIME2; + } else { /* diff --git a/sql/sys_vars.cc b/sql/sys_vars.cc index df055dd59920..5b05fd2f6f8f 100644 --- a/sql/sys_vars.cc +++ b/sql/sys_vars.cc @@ -3726,6 +3726,22 @@ static bool check_sql_mode(sys_var *self, THD *thd, set_var *var) ER_THD(thd, ER_WARN_DEPRECATED_SQLMODE), "NO_AUTO_CREATE_USER"); } + static const sql_mode_t deprecated_mask= MODE_DB2 | MODE_MAXDB | + MODE_MSSQL | MODE_MYSQL323 | MODE_MYSQL40 | MODE_ORACLE | + MODE_POSTGRESQL | MODE_NO_FIELD_OPTIONS | MODE_NO_KEY_OPTIONS | + MODE_NO_TABLE_OPTIONS; + sql_mode_t deprecated_modes= + var->save_result.ulonglong_value & deprecated_mask; + if (deprecated_modes != 0) + { + LEX_STRING buf; + if (sql_mode_string_representation(thd, deprecated_modes, &buf)) + return true; // OOM + push_warning_printf(thd, Sql_condition::SL_WARNING, + ER_WARN_DEPRECATED_SQLMODE, + ER_THD(thd, ER_WARN_DEPRECATED_SQLMODE), + buf.str); + } } return false; From 8c9bd8e67aac0380e8d004c907d4862e7bab421f Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Tue, 20 Feb 2018 18:16:42 +0100 Subject: [PATCH 0590/1221] PS-3844 (5.6): Increase ccache timeout and remove caching of homebrew packages for Travis CI --- .travis.yml | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 8c185174019f..be6ebcd8ffe5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,15 +5,15 @@ language: cpp cache: ccache: true + timeout: 600 directories: - $HOME/.ccache - - /usr/local/Cellar # cache homebrew packages for macOS env: global: - CCACHE_DIR=$HOME/.ccache - CCACHE_COMPRESS=1 - - CCACHE_MAXSIZE=500M + - CCACHE_MAXSIZE=500Mi - CCACHE_CPP2=1 - MAINTAINER_MODE=ON - WITHOUT_TOKUDB=OFF @@ -28,7 +28,8 @@ matrix: - git diff -U0 --no-color HEAD^1 | ./clang-format-diff.py -p1 >_GIT_DIFF - '[ ! -s _GIT_DIFF ] && echo The last git commit is clang-formatted || cat _GIT_DIFF' # 2 - - os: osx + - compiler: clang + os: osx osx_image: xcode9.2 env: BUILD=RelWithDebInfo MAINTAINER_MODE=OFF WITHOUT_TOKUDB=ON # 3 @@ -56,7 +57,8 @@ matrix: - compiler: gcc env: VERSION=4.8 BUILD=RelWithDebInfo # 11 - - os: osx + - compiler: clang + os: osx osx_image: xcode9.2 env: BUILD=Debug MAINTAINER_MODE=OFF WITHOUT_TOKUDB=ON # 12 @@ -128,6 +130,8 @@ script: - $CC -v - $CXX -v - ccache --version + - ccache --print-config; + ccache --zero-stats; - echo -- Perform Debug or RelWithDebInfo compilation; if [[ "$INVERTED" == "ON" ]]; then From 2d3de95adaa4e6b5df1b8fc5de1926614c5ed225 Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Tue, 20 Feb 2018 20:13:38 +0100 Subject: [PATCH 0591/1221] PS-3844 (5.7): Increase ccache timeout and remove caching of homebrew packages for Travis CI --- .travis.yml | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index 3373c802608f..dc3f571843ec 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,16 +5,16 @@ language: cpp cache: ccache: true + timeout: 600 directories: - $HOME/.ccache - - /usr/local/Cellar # cache homebrew packages for macOS - - $TRAVIS_BUILD_DIR/deps # cache boost + - $TRAVIS_BUILD_DIR/deps # cache Boost libraries env: global: - CCACHE_DIR=$HOME/.ccache - CCACHE_COMPRESS=1 - - CCACHE_MAXSIZE=500M + - CCACHE_MAXSIZE=500Mi - CCACHE_CPP2=1 - MAINTAINER_MODE=ON - WITHOUT_TOKUDB=ON @@ -31,7 +31,8 @@ matrix: - git diff -U0 --no-color HEAD^1 | ./clang-format-diff.py -p1 >_GIT_DIFF - '[ ! -s _GIT_DIFF ] && echo The last git commit is clang-formatted || cat _GIT_DIFF' # 2 - - os: osx + - compiler: clang + os: osx osx_image: xcode9.2 env: BUILD=RelWithDebInfo MAINTAINER_MODE=OFF WITHOUT_TOKUDB=ON WITHOUT_ROCKSDB=ON WITH_MECAB= # 3 @@ -59,7 +60,8 @@ matrix: - compiler: gcc env: VERSION=4.8 BUILD=RelWithDebInfo # 11 - - os: osx + - compiler: clang + os: osx osx_image: xcode9.2 env: BUILD=Debug MAINTAINER_MODE=OFF WITHOUT_TOKUDB=ON WITHOUT_ROCKSDB=ON WITH_MECAB= # 12 @@ -131,6 +133,8 @@ script: - $CC -v - $CXX -v - ccache --version + - ccache --print-config; + ccache --zero-stats; - echo -- Perform Debug or RelWithDebInfo compilation; if [[ "$INVERTED" == "ON" ]]; then From 560104c5c29099b35532abfec7de9ee9fe989399 Mon Sep 17 00:00:00 2001 From: Arun Kuruvila Date: Wed, 21 Feb 2018 08:19:32 +0530 Subject: [PATCH 0592/1221] Bug#26929724: REPAIR BY SORTING INCLUDING BULK INSERT CAUSES INDEX CORRUPTION Post push patch to fix windows build failure. --- unittest/gunit/dynarray-t.cc | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/unittest/gunit/dynarray-t.cc b/unittest/gunit/dynarray-t.cc index 6dd74aa51a8e..c640246e1923 100644 --- a/unittest/gunit/dynarray-t.cc +++ b/unittest/gunit/dynarray-t.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -91,13 +91,7 @@ static inline std::ostream &operator<<(std::ostream &s, const Key_use &v) namespace dynarray_unittest { // We still want to unit-test this, to compare performance. -#undef my_init_dynamic_array -extern "C" -my_bool my_init_dynamic_array(DYNAMIC_ARRAY *array, - PSI_memory_key key, - uint element_size, - void *init_buffer, uint init_alloc, - uint alloc_increment); + /* Cut'n paste this function from sql_select.cc, to avoid linking in the entire server for this unit test. From 4f20655adc56918fceb4eeab9e9e56df53ce5057 Mon Sep 17 00:00:00 2001 From: Tiago Vale Date: Wed, 21 Feb 2018 09:18:46 +0000 Subject: [PATCH 0593/1221] Bug#27406775 BACKPORT BUG#26846549 TO 5.7 (post-fix) Problem ======= The solaris11-sparc-64bit,community weekly build failed. Analysis ======== Compiler complains that function "calloc" must have a prototype on node_connection.h. Indeed, node_connection.h does not include stdlib.h as required to use calloc. This has been fixed somewhere in the development from 5.7 to 8.0 because the include is there on 8.0. The fact that it has been compiling is most likely accidental. Solution ======== Add #include to node_connection.h. Reviewed-by: Alfranio Correia Reviewed-by: Tiago Jorge RB: 18853 --- .../libmysqlgcs/src/bindings/xcom/xcom/node_connection.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/node_connection.h b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/node_connection.h index 433ab1346d3c..103d700f08af 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/node_connection.h +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/node_connection.h @@ -17,6 +17,8 @@ #ifndef NODE_CONNECTION_H #define NODE_CONNECTION_H +#include + #ifdef XCOM_HAVE_OPENSSL #include "openssl/ssl.h" #endif From b831b57aa14741741a606d5081ec9c7c9280275c Mon Sep 17 00:00:00 2001 From: Mayank Prasad Date: Wed, 21 Feb 2018 15:45:29 +0530 Subject: [PATCH 0594/1221] Bug#26960215 : EXPORT/IMPORT IS CRASHING WITH TABLE CREATED IN REDUNDANT ROW FORMAT Background: After copying ibd file from source server datadir to destination server datadir, during import, we traverse every page of ibd file and reset some information (like space_id, TRX_ID, ROLL_PTR etc.). TRX_ID and ROLL_PTR should be reset only for leaf pages where actual table records exist. Issue: In case of new row format (eg: dynamic), this is being done by checking the record status which will be REC_STATUS_NODE_PTR for a non-leaf page record. If its REC_STATUS_NODE_PTR, then this page is skipped for TRX_ID and ROLL_PTR. But in case of old format (REDUNDANT) this is not done and thus TRX_ID and ROLL_PTR are written on non-leaf page records causing correct data on page to be over written. Which leads to memory corruption. Fix: Make sure TRX_ID, ROLL_PTR are skipped for non-leaf pages irrespective of row format. Reviewed-by: satya.bodapati@oracle.com RB: 18832 --- storage/innobase/row/row0import.cc | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/storage/innobase/row/row0import.cc b/storage/innobase/row/row0import.cc index eda89951c3f2..cd3f88c240e5 100644 --- a/storage/innobase/row/row0import.cc +++ b/storage/innobase/row/row0import.cc @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2012, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2012, 2018, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -1827,12 +1827,6 @@ PageConverter::update_records( rec_t* rec = m_rec_iter.current(); - /* FIXME: Move out of the loop */ - - if (rec_get_status(rec) == REC_STATUS_NODE_PTR) { - break; - } - ibool deleted = rec_get_deleted_flag(rec, comp); /* For the clustered index we have to adjust the BLOB @@ -1934,6 +1928,10 @@ PageConverter::update_index_page( return(DB_SUCCESS); } + if (!page_is_leaf(block->frame)) { + return (DB_SUCCESS); + } + return(update_records(block)); } From 593abb73b19615b9e224dbdfe17e93f055eee7e6 Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Wed, 21 Feb 2018 18:54:29 +0530 Subject: [PATCH 0595/1221] From 0e89c5e5b5c169efa2ad51f32b3899709384d6c9 Mon Sep 17 00:00:00 2001 From: Laurynas Biveinis Date: Wed, 21 Feb 2018 16:01:22 +0200 Subject: [PATCH 0596/1221] Fix PS-3856 (Minor 5.7 merge leftovers / spurious changes) Fix a spurious formatting change and a 5.7 merge leftover comment. --- storage/innobase/handler/ha_innodb.cc | 2 +- storage/innobase/lock/lock0lock.cc | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index 8ef96451ff8b..7b826a3a0b27 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -22900,7 +22900,7 @@ innodb_buffer_pool_size_validate( return(1); } - if(srv_buf_pool_size == static_cast(intbuf)) { + if (srv_buf_pool_size == static_cast(intbuf)) { /* nothing to do */ return(0); } diff --git a/storage/innobase/lock/lock0lock.cc b/storage/innobase/lock/lock0lock.cc index 5b51f0705c60..e038d87ff843 100644 --- a/storage/innobase/lock/lock0lock.cc +++ b/storage/innobase/lock/lock0lock.cc @@ -5333,7 +5333,6 @@ lock_trx_table_locks_find( ut_a(lock_get_type_low(lock) & LOCK_TABLE); ut_a(lock->un_member.tab_lock.table != NULL); } - // } TODO broken trx_mutex_exit(trx); From f85d18dde1dcb45deff68109cb60a6dc573f92d4 Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Thu, 22 Feb 2018 10:05:14 +0100 Subject: [PATCH 0597/1221] PS-1095: Fixed a possible integer overflow in threadpool_unix --- mysql-test/r/percona_bug_ps1095.result | 2 ++ mysql-test/t/percona_bug_ps1095-master.opt | 3 +++ mysql-test/t/percona_bug_ps1095.test | 14 ++++++++++++++ sql/threadpool_unix.cc | 2 +- 4 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 mysql-test/r/percona_bug_ps1095.result create mode 100644 mysql-test/t/percona_bug_ps1095-master.opt create mode 100644 mysql-test/t/percona_bug_ps1095.test diff --git a/mysql-test/r/percona_bug_ps1095.result b/mysql-test/r/percona_bug_ps1095.result new file mode 100644 index 000000000000..8e359c84954a --- /dev/null +++ b/mysql-test/r/percona_bug_ps1095.result @@ -0,0 +1,2 @@ +CREATE TABLE t1 (i int); +DROP TABLE t1; diff --git a/mysql-test/t/percona_bug_ps1095-master.opt b/mysql-test/t/percona_bug_ps1095-master.opt new file mode 100644 index 000000000000..24fe63793eb5 --- /dev/null +++ b/mysql-test/t/percona_bug_ps1095-master.opt @@ -0,0 +1,3 @@ +--thread-handling=pool-of-threads +--thread_pool_stall_limit=3000 +--wait_timeout=4 diff --git a/mysql-test/t/percona_bug_ps1095.test b/mysql-test/t/percona_bug_ps1095.test new file mode 100644 index 000000000000..3eeab430ce7c --- /dev/null +++ b/mysql-test/t/percona_bug_ps1095.test @@ -0,0 +1,14 @@ +# Bug PS-1095: Issues then thread_pool_stall_timeout is above 2.1 seconds +--source ../include/have_pool_of_threads.inc + +CREATE TABLE t1 (i int); + +# Sleep 9 seconds first: wait_disconnect keeps issuing SQL statements +--sleep 9 +--source ../include/wait_until_disconnected.inc + + +--enable_reconnect +--connection default +DROP TABLE t1; + diff --git a/sql/threadpool_unix.cc b/sql/threadpool_unix.cc index ac4569b932ab..27019fadcbcf 100644 --- a/sql/threadpool_unix.cc +++ b/sql/threadpool_unix.cc @@ -555,7 +555,7 @@ static void* timer_thread(void *param) struct timespec ts; int err; - set_timespec_nsec(ts,timer->tick_interval*1000000); + set_timespec_nsec(ts,timer->tick_interval * 1000000ULL); mysql_mutex_lock(&timer->mutex); err= mysql_cond_timedwait(&timer->cond, &timer->mutex, &ts); if (timer->shutdown) From d3ec326bcd8352fcd969dbfd54e5c604db9cd30b Mon Sep 17 00:00:00 2001 From: Sachin Agarwal Date: Thu, 22 Feb 2018 15:07:37 +0530 Subject: [PATCH 0598/1221] --- mysql-test/suite/innodb/r/virtual_index.result | 13 +++++++++++++ mysql-test/suite/innodb/t/virtual_index.test | 10 ++++++++++ storage/innobase/handler/handler0alter.cc | 13 +++++++++++++ 3 files changed, 36 insertions(+) diff --git a/mysql-test/suite/innodb/r/virtual_index.result b/mysql-test/suite/innodb/r/virtual_index.result index e0f8646bb86d..b08cecdcef81 100644 --- a/mysql-test/suite/innodb/r/virtual_index.result +++ b/mysql-test/suite/innodb/r/virtual_index.result @@ -198,3 +198,16 @@ ALTER TABLE t1 ADD COLUMN col7a INT GENERATED ALWAYS AS (col1 % col2) VIRTUAL, ADD UNIQUE index idx (col1), algorithm=inplace; ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: INPLACE ADD or DROP of virtual columns cannot be combined with other ALTER TABLE actions. Try ALGORITHM=COPY. DROP TABLE t1; +# +# Bug 27122803 - BACKPORT FIX FOR BUG 25899959 TO MYSQL-5.7 +# +CREATE TABLE t1 (col1 int(10)) DEFAULT CHARSET=utf8mb4; +ALTER TABLE t1 ADD col2 char(21) AS (col1 * col1), ADD INDEX n (col2); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `col1` int(10) DEFAULT NULL, + `col2` char(21) GENERATED ALWAYS AS ((`col1` * `col1`)) VIRTUAL, + KEY `n` (`col2`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 +DROP TABLE t1; diff --git a/mysql-test/suite/innodb/t/virtual_index.test b/mysql-test/suite/innodb/t/virtual_index.test index 3054645024e7..9f875a7b5a8a 100644 --- a/mysql-test/suite/innodb/t/virtual_index.test +++ b/mysql-test/suite/innodb/t/virtual_index.test @@ -218,3 +218,13 @@ ALTER TABLE t1 ADD COLUMN col7a INT GENERATED ALWAYS AS (col1 % col2) VIRTUAL, ADD UNIQUE index idx (col1), algorithm=inplace; DROP TABLE t1; + +--echo # +--echo # Bug 27122803 - BACKPORT FIX FOR BUG 25899959 TO MYSQL-5.7 +--echo # + +CREATE TABLE t1 (col1 int(10)) DEFAULT CHARSET=utf8mb4; +ALTER TABLE t1 ADD col2 char(21) AS (col1 * col1), ADD INDEX n (col2); +SHOW CREATE TABLE t1; + +DROP TABLE t1; diff --git a/storage/innobase/handler/handler0alter.cc b/storage/innobase/handler/handler0alter.cc index ebd857032986..76ac46905c88 100644 --- a/storage/innobase/handler/handler0alter.cc +++ b/storage/innobase/handler/handler0alter.cc @@ -4251,6 +4251,19 @@ prepare_inplace_alter_table_dict( for create index */ if (ha_alter_info->handler_flags & Alter_inplace_info::ADD_INDEX) { + for (ulint i = 0; + i < ctx->num_to_add_vcol; + i++) { + /* Set mbminmax for newly added column */ + ulint i_mbminlen, i_mbmaxlen; + dtype_get_mblen(ctx->add_vcol[i].m_col.mtype, + ctx->add_vcol[i].m_col.prtype, + &i_mbminlen, &i_mbmaxlen); + + dtype_set_mbminmaxlen( + (dtype_t*) &ctx->add_vcol[i].m_col, + i_mbminlen, i_mbmaxlen); + } add_v = static_cast( mem_heap_alloc(ctx->heap, sizeof *add_v)); add_v->n_v_col = ctx->num_to_add_vcol; From 3c98704f54108201211a6dda29d9e88d750d8307 Mon Sep 17 00:00:00 2001 From: Sachin Agarwal Date: Thu, 22 Feb 2018 18:45:38 +0530 Subject: [PATCH 0599/1221] Bug #26334149 - MYSQL CRASHES WHEN FULL TEXT INDEXES IBD FILES ARE ORPHANED DUE TO RENAME TABLE Problem: When FTS index is added into a table which doesn't have 'FTS_DOC_ID' column, Innodb rebuilds table to add column 'FTS_DOC_ID'. when this FTS index is dropped from this table. Innodb doesn't not rebuild table to remove 'FTS_DOC_ID' column and deletes FTS index auxiliary tables. But it doesn't delete FTS common auxiliary tables. Later when the database having this table is renamed, FTS auxiliary tables are not renamed because table's flags2 (dict_table_t.flags2) has been resetted for DICT_TF2_FTS flag during FTS index drop operation. Now when we drop old database, it leads to an assert. Fix: During renaming of FTS auxiliary tables, ORed a condition to check if table has DICT_TF2_FTS_HAS_DOC_ID flag set. RB: 18769 Reviewed by : Jimmy.Yang@oracle.com --- mysql-test/suite/innodb/r/innodb-alter.result | 29 +++++++++++++++++++ mysql-test/suite/innodb/t/innodb-alter.test | 20 +++++++++++++ storage/innobase/row/row0mysql.cc | 5 ++-- 3 files changed, 52 insertions(+), 2 deletions(-) diff --git a/mysql-test/suite/innodb/r/innodb-alter.result b/mysql-test/suite/innodb/r/innodb-alter.result index 47fc97206c94..1d2d30221d39 100644 --- a/mysql-test/suite/innodb/r/innodb-alter.result +++ b/mysql-test/suite/innodb/r/innodb-alter.result @@ -860,3 +860,32 @@ DROP TABLE dest_db.t1; DROP TABLE source_db.t1; DROP DATABASE source_db; DROP DATABASE dest_db; +# +# BUG #26334149 MYSQL CRASHES WHEN FULL TEXT INDEXES IBD FILES ARE +# ORPHANED DUE TO RENAME TABLE +# +CREATE DATABASE db1; +USE db1; +CREATE TABLE notes ( +id int(11) NOT NULL AUTO_INCREMENT, +body text COLLATE utf8_unicode_ci, +PRIMARY KEY (id) +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 +COLLATE=utf8_unicode_ci +ROW_FORMAT=COMPRESSED; +Warnings: +Warning 1478 InnoDB: ROW_FORMAT=COMPRESSED requires innodb_file_format > Antelope. +Warning 1478 InnoDB: assuming ROW_FORMAT=COMPACT. +ALTER TABLE notes ADD FULLTEXT INDEX index_ft_body (body(255)); +Warnings: +Warning 1478 InnoDB: ROW_FORMAT=COMPRESSED requires innodb_file_format > Antelope. +Warning 1478 InnoDB: assuming ROW_FORMAT=COMPACT. +Warning 124 InnoDB rebuilding table to add column FTS_DOC_ID +DROP INDEX index_ft_body ON notes; +Warnings: +Warning 1478 InnoDB: ROW_FORMAT=COMPRESSED requires innodb_file_format > Antelope. +Warning 1478 InnoDB: assuming ROW_FORMAT=COMPACT. +CREATE DATABASE db2; +RENAME TABLE db1.notes TO db2.notes; +DROP DATABASE db1; +DROP DATABASE db2; diff --git a/mysql-test/suite/innodb/t/innodb-alter.test b/mysql-test/suite/innodb/t/innodb-alter.test index ca1252fb4e47..63e84f57b673 100644 --- a/mysql-test/suite/innodb/t/innodb-alter.test +++ b/mysql-test/suite/innodb/t/innodb-alter.test @@ -480,5 +480,25 @@ eval DROP TABLE $source_db.t1; eval DROP DATABASE $source_db; eval DROP DATABASE $dest_db; +--echo # +--echo # BUG #26334149 MYSQL CRASHES WHEN FULL TEXT INDEXES IBD FILES ARE +--echo # ORPHANED DUE TO RENAME TABLE +--echo # +CREATE DATABASE db1; USE db1; +CREATE TABLE notes ( + id int(11) NOT NULL AUTO_INCREMENT, + body text COLLATE utf8_unicode_ci, + PRIMARY KEY (id) + ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 +COLLATE=utf8_unicode_ci +ROW_FORMAT=COMPRESSED; + +ALTER TABLE notes ADD FULLTEXT INDEX index_ft_body (body(255)); +DROP INDEX index_ft_body ON notes; + +CREATE DATABASE db2; +RENAME TABLE db1.notes TO db2.notes; +DROP DATABASE db1; +DROP DATABASE db2; diff --git a/storage/innobase/row/row0mysql.cc b/storage/innobase/row/row0mysql.cc index e346200b6e4c..cfd640ed4d5d 100644 --- a/storage/innobase/row/row0mysql.cc +++ b/storage/innobase/row/row0mysql.cc @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2000, 2017, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2000, 2018, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -5085,7 +5085,8 @@ row_rename_table_for_mysql( } } - if (dict_table_has_fts_index(table) + if ((dict_table_has_fts_index(table) + || DICT_TF2_FLAG_IS_SET(table, DICT_TF2_FTS_HAS_DOC_ID)) && !dict_tables_have_same_db(old_name, new_name)) { err = fts_rename_aux_tables(table, new_name, trx); if (err != DB_TABLE_NOT_FOUND) { From b8466d316cba034a5aacce6096cd4287fd78d3cd Mon Sep 17 00:00:00 2001 From: Nisha Gopalakrishnan Date: Thu, 22 Feb 2018 10:17:30 +0530 Subject: [PATCH 0600/1221] BUG#27516741: MYSQL SERVER DOES NOT WRITE INNODB ROW_TYPE TO .FRM FILE WHEN DEFAULT USED Analysis ======== SHOW CREATE TABLE for tables with implicitly or explicitly specified DEFAULT row format does not show the actual row format used by the table. The output of SHOW CREATE TABLE shows the actual row format used only when the actual format is explicitly specified in the CREATE TABLE statement. SHOW CREATE TABLE code suppresses displaying the actual row format if the row format is not specified at all, or if ROW_FORMAT = DEFAULT is explicitly specified. This may cause TTS table import to break if the destination server is using a different default row format than the server from which it is exported. Fix === A new per-session dynamic system variable called 'show_create_table_verbosity' and a corresponding start-up option is introduced. The decision to add a new variable was in order to preserve the current behavior of SHOW CREATE TABLE. Variable name: 'show_create_table_verbosity' Values accepted: Boolean values. Default value: 0 or FALSE. When this variable set to 1/ON for the session, SHOW CREATE TABLE behavior for that session is changed to display the actual row format used by the table even if ROW_FORMAT = DEFAULT was specified in the CREATE TABLE statement. By default(0 or FALSE) causes the server to retain the old behavior i.e tables with implicitly or explicitly specified DEFAULT row format during CREATE TABLE does not show the actual row format used by the table in the SHOW CREATE TABLE output. --- mysql-test/r/create.result | 124 ++++++++++++++++++ mysql-test/r/mysqld--help-notwin.result | 4 + mysql-test/r/mysqld--help-win.result | 4 + .../show_create_table_verbosity_basic.result | 80 +++++++++++ .../t/show_create_table_verbosity_basic.test | 69 ++++++++++ mysql-test/t/create.test | 68 ++++++++++ sql/sql_class.h | 5 + sql/sql_show.cc | 25 +++- sql/sys_vars.cc | 9 ++ 9 files changed, 386 insertions(+), 2 deletions(-) create mode 100644 mysql-test/suite/sys_vars/r/show_create_table_verbosity_basic.result create mode 100644 mysql-test/suite/sys_vars/t/show_create_table_verbosity_basic.test diff --git a/mysql-test/r/create.result b/mysql-test/r/create.result index 57e533332a9b..9c4e37512158 100644 --- a/mysql-test/r/create.result +++ b/mysql-test/r/create.result @@ -1882,3 +1882,127 @@ DROP DATABASE db_with_tables_and_an_unrelated_file_in_data_directory; DROP DATABASE db_created_with_mkdir_and_an_unrelated_file_in_data_directory; ERROR HY000: Error dropping database (can't rmdir './db_created_with_mkdir_and_an_unrelated_file_in_data_directory/', errno: 17) DROP DATABASE db_created_with_mkdir_and_an_unrelated_file_in_data_directory; +# +# BUG 27516741 - MYSQL SERVER DOES NOT WRITE INNODB ROW_TYPE +# TO .FRM FILE WHEN DEFAULT USED +# Set up. +SET @saved_innodb_default_row_format= @@global.innodb_default_row_format; +SET @saved_show_create_table_verbosity= @@session.show_create_table_verbosity; +# Current InnoDB default row format and 'show_create_table_verbosity' +# values respectively. +SELECT @@global.innodb_default_row_format; +@@global.innodb_default_row_format +dynamic +SELECT @@session.show_create_table_verbosity; +@@session.show_create_table_verbosity +0 +CREATE TABLE t1(fld1 INT) ENGINE= InnoDB; +CREATE TABLE t2(fld1 INT) ENGINE= InnoDB, ROW_FORMAT= DEFAULT; +SET GLOBAL innodb_default_row_format= 'COMPACT'; +CREATE TABLE t3(fld1 INT) ENGINE= InnoDB; +CREATE TABLE t4(fl1 INT) ENGINE= InnoDB, ROW_FORMAT= COMPRESSED; +# Test without show_create_table_verbosity enabled. +# Row format used is not displayed for all tables +# except t4 where it is explicitly specified. +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `fld1` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `fld1` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +SHOW CREATE TABLE t3; +Table Create Table +t3 CREATE TABLE `t3` ( + `fld1` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +SHOW CREATE TABLE t4; +Table Create Table +t4 CREATE TABLE `t4` ( + `fl1` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPRESSED +# Test with show_create_table_verbosity enabled. +# Row format used is displayed for all tables. +SET SESSION show_create_table_verbosity= ON; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `fld1` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `fld1` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC +SHOW CREATE TABLE t3; +Table Create Table +t3 CREATE TABLE `t3` ( + `fld1` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT +SHOW CREATE TABLE t4; +Table Create Table +t4 CREATE TABLE `t4` ( + `fl1` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPRESSED +SET GLOBAL innodb_default_row_format= 'DYNAMIC'; +SET SESSION show_create_table_verbosity= OFF; +# Test with corresponding temporary tables. +CREATE TEMPORARY TABLE t1(fld1 INT) ENGINE= InnoDB; +CREATE TEMPORARY TABLE t2(fld1 INT) ENGINE= InnoDB, ROW_FORMAT= DEFAULT; +SET GLOBAL innodb_default_row_format= 'COMPACT'; +CREATE TEMPORARY TABLE t3(fld1 INT) ENGINE= InnoDB; +CREATE TEMPORARY TABLE t4(fl1 INT) ENGINE= InnoDB, ROW_FORMAT= COMPRESSED; +# Test without show_create_table_verbosity enabled. +# Row format used is not displayed for all tables +# except t4 where it is explicitly specified. +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TEMPORARY TABLE `t1` ( + `fld1` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TEMPORARY TABLE `t2` ( + `fld1` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +SHOW CREATE TABLE t3; +Table Create Table +t3 CREATE TEMPORARY TABLE `t3` ( + `fld1` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +SHOW CREATE TABLE t4; +Table Create Table +t4 CREATE TEMPORARY TABLE `t4` ( + `fl1` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPRESSED +# Test with show_create_table_verbosity enabled. +# Row format used is displayed for all tables. +SET SESSION show_create_table_verbosity= ON; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TEMPORARY TABLE `t1` ( + `fld1` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TEMPORARY TABLE `t2` ( + `fld1` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC +SHOW CREATE TABLE t3; +Table Create Table +t3 CREATE TEMPORARY TABLE `t3` ( + `fld1` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT +SHOW CREATE TABLE t4; +Table Create Table +t4 CREATE TEMPORARY TABLE `t4` ( + `fl1` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPRESSED +# Clean up. +DROP TABLE t1, t2, t3, t4; +DROP TABLE t1, t2, t3, t4; +SET GLOBAL innodb_default_row_format= @saved_innodb_default_row_format; +SET SESSION show_create_table_verbosity= @saved_show_create_table_verbosity; diff --git a/mysql-test/r/mysqld--help-notwin.result b/mysql-test/r/mysqld--help-notwin.result index 3df5f5dcb20b..2d1e411e20e6 100644 --- a/mysql-test/r/mysqld--help-notwin.result +++ b/mysql-test/r/mysqld--help-notwin.result @@ -1066,6 +1066,9 @@ The following options may be given as the first argument: --show-compatibility-56 SHOW commands / INFORMATION_SCHEMA tables compatible with MySQL 5.6 + --show-create-table-verbosity + When this option is enabled, it increases the verbosity + of 'SHOW CREATE TABLE'. --show-old-temporals When this option is enabled, the pre-5.6.4 temporal types will be marked in the 'SHOW CREATE TABLE' and @@ -1556,6 +1559,7 @@ session-track-system-variables time_zone,autocommit,character_set_client,charact session-track-transaction-info OFF sha256-password-proxy-users FALSE show-compatibility-56 FALSE +show-create-table-verbosity FALSE show-old-temporals FALSE show-slave-auth-info FALSE skip-grant-tables TRUE diff --git a/mysql-test/r/mysqld--help-win.result b/mysql-test/r/mysqld--help-win.result index 3ed3d66733f3..8ae2bbd089f0 100644 --- a/mysql-test/r/mysqld--help-win.result +++ b/mysql-test/r/mysqld--help-win.result @@ -1060,6 +1060,9 @@ The following options may be given as the first argument: --show-compatibility-56 SHOW commands / INFORMATION_SCHEMA tables compatible with MySQL 5.6 + --show-create-table-verbosity + When this option is enabled, it increases the verbosity + of 'SHOW CREATE TABLE'. --show-old-temporals When this option is enabled, the pre-5.6.4 temporal types will be marked in the 'SHOW CREATE TABLE' and @@ -1554,6 +1557,7 @@ sha256-password-proxy-users FALSE shared-memory FALSE shared-memory-base-name MYSQL show-compatibility-56 FALSE +show-create-table-verbosity FALSE show-old-temporals FALSE show-slave-auth-info FALSE skip-grant-tables TRUE diff --git a/mysql-test/suite/sys_vars/r/show_create_table_verbosity_basic.result b/mysql-test/suite/sys_vars/r/show_create_table_verbosity_basic.result new file mode 100644 index 000000000000..d0d55e21fc9a --- /dev/null +++ b/mysql-test/suite/sys_vars/r/show_create_table_verbosity_basic.result @@ -0,0 +1,80 @@ +SELECT @@session.show_create_table_verbosity; +@@session.show_create_table_verbosity +0 +SHOW SESSION VARIABLES LIKE 'show_create_table_verbosity'; +Variable_name Value +show_create_table_verbosity OFF +SELECT * FROM information_schema.session_variables WHERE variable_name='show_create_table_verbosity'; +VARIABLE_NAME VARIABLE_VALUE +SHOW_CREATE_TABLE_VERBOSITY OFF +#Also can be set as a global variable. +SELECT @@global.show_create_table_verbosity; +@@global.show_create_table_verbosity +0 +SHOW GLOBAL VARIABLES LIKE 'show_create_table_verbosity'; +Variable_name Value +show_create_table_verbosity OFF +SELECT * FROM information_schema.global_variables WHERE variable_name='show_create_table_verbosity'; +VARIABLE_NAME VARIABLE_VALUE +SHOW_CREATE_TABLE_VERBOSITY OFF +#Test setting the variable to various values. +#Boolean values. +SET SESSION show_create_table_verbosity= ON; +SELECT @@session.show_create_table_verbosity; +@@session.show_create_table_verbosity +1 +SET SESSION show_create_table_verbosity= OFF; +SELECT @@session.show_create_table_verbosity; +@@session.show_create_table_verbosity +0 +SET SESSION show_create_table_verbosity= 1; +SELECT @@session.show_create_table_verbosity; +@@session.show_create_table_verbosity +1 +SET SESSION show_create_table_verbosity= 0; +SELECT @@session.show_create_table_verbosity; +@@session.show_create_table_verbosity +0 +#Test for DEFAULT value. +SET SESSION show_create_table_verbosity= DEFAULT; +SELECT @@session.show_create_table_verbosity; +@@session.show_create_table_verbosity +0 +#Test for invalid value. +SET SESSION show_create_table_verbosity= 2; +ERROR 42000: Variable 'show_create_table_verbosity' can't be set to the value of '2' +#Test for setting the session variable +#using different syntax. +SET show_create_table_verbosity= 1; +#Fetches the current session value for the variable. +SELECT @@show_create_table_verbosity; +@@show_create_table_verbosity +1 +#cleanup +SET SESSION show_create_table_verbosity= DEFAULT; +#Test setting the global value of the variable. +#Boolean values. +SET GLOBAL show_create_table_verbosity= ON; +SELECT @@global.show_create_table_verbosity; +@@global.show_create_table_verbosity +1 +SET GLOBAL show_create_table_verbosity= OFF; +SELECT @@global.show_create_table_verbosity; +@@global.show_create_table_verbosity +0 +SET GLOBAL show_create_table_verbosity= 1; +SELECT @@global.show_create_table_verbosity; +@@global.show_create_table_verbosity +1 +SET GLOBAL show_create_table_verbosity= 0; +SELECT @@session.show_create_table_verbosity; +@@session.show_create_table_verbosity +0 +#Test for DEFAULT value. +SET GLOBAL show_create_table_verbosity= DEFAULT; +SELECT @@global.show_create_table_verbosity; +@@global.show_create_table_verbosity +0 +#Test for invalid value. +SET GLOBAL show_create_table_verbosity= 2; +ERROR 42000: Variable 'show_create_table_verbosity' can't be set to the value of '2' diff --git a/mysql-test/suite/sys_vars/t/show_create_table_verbosity_basic.test b/mysql-test/suite/sys_vars/t/show_create_table_verbosity_basic.test new file mode 100644 index 000000000000..b20a555ac87d --- /dev/null +++ b/mysql-test/suite/sys_vars/t/show_create_table_verbosity_basic.test @@ -0,0 +1,69 @@ +# +# Show the session value; +# +SELECT @@session.show_create_table_verbosity; +SHOW SESSION VARIABLES LIKE 'show_create_table_verbosity'; +--disable_warnings +SELECT * FROM information_schema.session_variables WHERE variable_name='show_create_table_verbosity'; +--enable_warnings + +--echo #Also can be set as a global variable. +SELECT @@global.show_create_table_verbosity; +SHOW GLOBAL VARIABLES LIKE 'show_create_table_verbosity'; +--disable_warnings +SELECT * FROM information_schema.global_variables WHERE variable_name='show_create_table_verbosity'; +--enable_warnings + +--echo #Test setting the variable to various values. +--echo #Boolean values. +SET SESSION show_create_table_verbosity= ON; +SELECT @@session.show_create_table_verbosity; + +SET SESSION show_create_table_verbosity= OFF; +SELECT @@session.show_create_table_verbosity; + +SET SESSION show_create_table_verbosity= 1; +SELECT @@session.show_create_table_verbosity; + +SET SESSION show_create_table_verbosity= 0; +SELECT @@session.show_create_table_verbosity; + +--echo #Test for DEFAULT value. +SET SESSION show_create_table_verbosity= DEFAULT; +SELECT @@session.show_create_table_verbosity; + +--echo #Test for invalid value. +--error ER_WRONG_VALUE_FOR_VAR +SET SESSION show_create_table_verbosity= 2; + +--echo #Test for setting the session variable +--echo #using different syntax. +SET show_create_table_verbosity= 1; + +--echo #Fetches the current session value for the variable. +SELECT @@show_create_table_verbosity; + +--echo #cleanup +SET SESSION show_create_table_verbosity= DEFAULT; + +--echo #Test setting the global value of the variable. +--echo #Boolean values. +SET GLOBAL show_create_table_verbosity= ON; +SELECT @@global.show_create_table_verbosity; + +SET GLOBAL show_create_table_verbosity= OFF; +SELECT @@global.show_create_table_verbosity; + +SET GLOBAL show_create_table_verbosity= 1; +SELECT @@global.show_create_table_verbosity; + +SET GLOBAL show_create_table_verbosity= 0; +SELECT @@session.show_create_table_verbosity; + +--echo #Test for DEFAULT value. +SET GLOBAL show_create_table_verbosity= DEFAULT; +SELECT @@global.show_create_table_verbosity; + +--echo #Test for invalid value. +--error ER_WRONG_VALUE_FOR_VAR +SET GLOBAL show_create_table_verbosity= 2; diff --git a/mysql-test/t/create.test b/mysql-test/t/create.test index 88459a9f89d3..040d9c68b981 100644 --- a/mysql-test/t/create.test +++ b/mysql-test/t/create.test @@ -1812,3 +1812,71 @@ DROP DATABASE db_created_with_mkdir_and_an_unrelated_file_in_data_directory; # Cleanup --remove_file $MYSQLD_DATADIR/db_created_with_mkdir_and_an_unrelated_file_in_data_directory/intruder.txt DROP DATABASE db_created_with_mkdir_and_an_unrelated_file_in_data_directory; + + +--echo # +--echo # BUG 27516741 - MYSQL SERVER DOES NOT WRITE INNODB ROW_TYPE +--echo # TO .FRM FILE WHEN DEFAULT USED + +--echo # Set up. +SET @saved_innodb_default_row_format= @@global.innodb_default_row_format; +SET @saved_show_create_table_verbosity= @@session.show_create_table_verbosity; + +--echo # Current InnoDB default row format and 'show_create_table_verbosity' +--echo # values respectively. +SELECT @@global.innodb_default_row_format; +SELECT @@session.show_create_table_verbosity; + +CREATE TABLE t1(fld1 INT) ENGINE= InnoDB; +CREATE TABLE t2(fld1 INT) ENGINE= InnoDB, ROW_FORMAT= DEFAULT; +SET GLOBAL innodb_default_row_format= 'COMPACT'; +CREATE TABLE t3(fld1 INT) ENGINE= InnoDB; +CREATE TABLE t4(fl1 INT) ENGINE= InnoDB, ROW_FORMAT= COMPRESSED; + +--echo # Test without show_create_table_verbosity enabled. +--echo # Row format used is not displayed for all tables +--echo # except t4 where it is explicitly specified. +SHOW CREATE TABLE t1; +SHOW CREATE TABLE t2; +SHOW CREATE TABLE t3; +SHOW CREATE TABLE t4; + +--echo # Test with show_create_table_verbosity enabled. +--echo # Row format used is displayed for all tables. +SET SESSION show_create_table_verbosity= ON; +SHOW CREATE TABLE t1; +SHOW CREATE TABLE t2; +SHOW CREATE TABLE t3; +SHOW CREATE TABLE t4; + +SET GLOBAL innodb_default_row_format= 'DYNAMIC'; +SET SESSION show_create_table_verbosity= OFF; + +--echo # Test with corresponding temporary tables. +CREATE TEMPORARY TABLE t1(fld1 INT) ENGINE= InnoDB; +CREATE TEMPORARY TABLE t2(fld1 INT) ENGINE= InnoDB, ROW_FORMAT= DEFAULT; +SET GLOBAL innodb_default_row_format= 'COMPACT'; +CREATE TEMPORARY TABLE t3(fld1 INT) ENGINE= InnoDB; +CREATE TEMPORARY TABLE t4(fl1 INT) ENGINE= InnoDB, ROW_FORMAT= COMPRESSED; + +--echo # Test without show_create_table_verbosity enabled. +--echo # Row format used is not displayed for all tables +--echo # except t4 where it is explicitly specified. +SHOW CREATE TABLE t1; +SHOW CREATE TABLE t2; +SHOW CREATE TABLE t3; +SHOW CREATE TABLE t4; + +--echo # Test with show_create_table_verbosity enabled. +--echo # Row format used is displayed for all tables. +SET SESSION show_create_table_verbosity= ON; +SHOW CREATE TABLE t1; +SHOW CREATE TABLE t2; +SHOW CREATE TABLE t3; +SHOW CREATE TABLE t4; + +--echo # Clean up. +DROP TABLE t1, t2, t3, t4; +DROP TABLE t1, t2, t3, t4; +SET GLOBAL innodb_default_row_format= @saved_innodb_default_row_format; +SET SESSION show_create_table_verbosity= @saved_show_create_table_verbosity; diff --git a/sql/sql_class.h b/sql/sql_class.h index faa45a02325b..61cd5b7dea7e 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -562,6 +562,11 @@ typedef struct system_variables my_bool session_track_schema; my_bool session_track_state_change; ulong session_track_transaction_info; + /** + Used for the verbosity of SHOW CREATE TABLE. Currently used for displaying + the row format in the output even if the table uses default row format. + */ + my_bool show_create_table_verbosity; /** Compatibility option to mark the pre MySQL-5.6.4 temporals columns using the old format using comments for SHOW CREATE TABLE and in I_S.COLUMNS diff --git a/sql/sql_show.cc b/sql/sql_show.cc index 8c8963dcb4c1..85dea44b8df1 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -1883,11 +1883,32 @@ int store_create_info(THD *thd, TABLE_LIST *table_list, String *packet, packet->append(STRING_WITH_LEN(" CHECKSUM=1")); if (share->db_create_options & HA_OPTION_DELAY_KEY_WRITE) packet->append(STRING_WITH_LEN(" DELAY_KEY_WRITE=1")); - if (create_info.row_type != ROW_TYPE_DEFAULT) + + /* + If 'show_create_table_verbosity' is enabled, the row format would + be displayed in the output of SHOW CREATE TABLE even if default + row format is used. Otherwise only the explicitly mentioned + row format would be displayed. + */ + if (thd->variables.show_create_table_verbosity) + { + enum row_type row_type = file->get_row_type(); + packet->append(STRING_WITH_LEN(" ROW_FORMAT=")); + if (row_type == ROW_TYPE_NOT_USED || row_type == ROW_TYPE_DEFAULT) + { + row_type= ((share->db_options_in_use & HA_OPTION_COMPRESS_RECORD) ? + ROW_TYPE_COMPRESSED : + (share->db_options_in_use & HA_OPTION_PACK_RECORD) ? + ROW_TYPE_DYNAMIC : ROW_TYPE_FIXED); + } + packet->append(ha_row_type[(uint) row_type]); + } + else if (create_info.row_type != ROW_TYPE_DEFAULT) { packet->append(STRING_WITH_LEN(" ROW_FORMAT=")); packet->append(ha_row_type[(uint) create_info.row_type]); } + if (table->s->key_block_size) { char *end; diff --git a/sql/sys_vars.cc b/sql/sys_vars.cc index 5b05fd2f6f8f..5b1ab5f55cbe 100644 --- a/sql/sys_vars.cc +++ b/sql/sys_vars.cc @@ -5837,6 +5837,15 @@ static Sys_var_charptr Sys_disabled_storage_engines( CMD_LINE(REQUIRED_ARG), IN_SYSTEM_CHARSET, DEFAULT("")); +static Sys_var_mybool Sys_show_create_table_verbosity( + "show_create_table_verbosity", + "When this option is enabled, it increases the verbosity of " + "'SHOW CREATE TABLE'.", + SESSION_VAR(show_create_table_verbosity), + CMD_LINE(OPT_ARG), + DEFAULT(FALSE), NO_MUTEX_GUARD, NOT_IN_BINLOG, + ON_CHECK(0), ON_UPDATE(0)); + static bool check_keyring_access(sys_var*, THD* thd, set_var*) { if (!(thd->security_context()->check_access(SUPER_ACL))) From 78e66aad78ddead0d3bc261747424f2366641864 Mon Sep 17 00:00:00 2001 From: Yashwant Sahu Date: Thu, 22 Feb 2018 18:14:34 +0100 Subject: [PATCH 0601/1221] Bugs# 27438458, 27480946 Problem description: 1. We used to replace %s in the search filter to user DN, but in some cases we need to replace with user name as well. 2. We were always treating group search attribute ismemberof and memberof for the LDAP servers where user object will have group information. In few cases this is not correct and in some other cases other group search attribute should be belong to this category. Fix Summery: In most of the LDAP servers group objects will have information about users. in some LDAP servers group object will have user name and in some LDAP servers group object will have user DN. so add more flexibility there will be places holders {UA} and {UD} There are one more type of LDAP servers (Microsoft active directory), in that user object will have group full DN. We should parse the group DN and retrieve the group name. For such servers, group search attribute must be prefix with {GA} Fix description: 1. Previously there was assumption in the code that configured search filter should have one %s and it will be replace by user full user DN. Default search filter had two %s, on for the user name (openldap) and other for the full DN (For active directory). This implementation was not very flexbile and many users wanted user name or user DN or both. To make it more flexible, now we can have {UA} and {UD} as replacing variables. Code will replace {UA} with user name like "admin" in the search filter. Code will replace {UD} with user full dn like "uid=admin,ou=People,dc=my-domain,dc=com" in the search filter. 2. Previously if group search attribute is ismemberof or memberof, it was treated as user attribute which has group information. But in some cases in user scenario memberof was simple user attribute which doesn't hold group information. To make more flexible added option {GA} as prefix of group search attribute, previous there was assumption that if group search attribute is ismemberof it will be treated differently. Now any group attribute which has {GA} as prefix will be treated as user attribute having group names. 3. If group value is DN, it will explode the group DN and retrieve group name value. 4. Added error message if SASL mechanism is not found in the MySQL LDAP SASL client side plug-in. Review: RB# 18845 --- libmysql/authentication_ldap/auth_ldap_sasl_client.cc | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/libmysql/authentication_ldap/auth_ldap_sasl_client.cc b/libmysql/authentication_ldap/auth_ldap_sasl_client.cc index 4ca91d04cd0e..21fcfbbabedd 100644 --- a/libmysql/authentication_ldap/auth_ldap_sasl_client.cc +++ b/libmysql/authentication_ldap/auth_ldap_sasl_client.cc @@ -239,12 +239,21 @@ int Sasl_client::sasl_start(char **client_output, int* client_output_length) if(rc_sasl == SASL_INTERACT) interact(interactions); } while(rc_sasl == SASL_INTERACT); + if (rc_sasl == SASL_NOMECH) + { + log_stream << "SASL method '" << m_mechanism << "' sent by server, " + << "is not supported by the SASL client. Make sure that " + << "cyrus SASL library is installed."; + log_error(log_stream.str()); + goto EXIT; + } if (client_output != NULL) { *client_output= sasl_client_output; log_stream << "Sasl_client::SaslStart sasl output: " << sasl_client_output; log_dbg(log_stream.str()); } +EXIT: return rc_sasl; } @@ -339,7 +348,6 @@ static int sasl_authenticate(MYSQL_PLUGIN_VIO *vio, MYSQL *mysql) goto EXIT; } - server_packet_len= strlen((const char*)server_packet); rc_sasl= sasl_client.sasl_step((char*)server_packet, server_packet_len, &sasl_client_output, &sasl_client_output_len); From 53050e70d5950f3db0891cb0aeb94a7a138e9a10 Mon Sep 17 00:00:00 2001 From: Sachin Agarwal Date: Fri, 23 Feb 2018 11:31:49 +0530 Subject: [PATCH 0602/1221] Bug #26334149 - MYSQL CRASHES WHEN FULL TEXT INDEXES IBD FILES ARE ORPHANED DUE TO RENAME TABLE Post-push testcase innodb-alter fix. --- mysql-test/suite/innodb/r/innodb-alter.result | 10 +++++----- mysql-test/suite/innodb/t/innodb-alter.test | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/mysql-test/suite/innodb/r/innodb-alter.result b/mysql-test/suite/innodb/r/innodb-alter.result index a16c3cbde25a..05add768c94f 100644 --- a/mysql-test/suite/innodb/r/innodb-alter.result +++ b/mysql-test/suite/innodb/r/innodb-alter.result @@ -831,14 +831,14 @@ DROP TABLE t1; # CREATE DATABASE db1; USE db1; -CREATE TABLE `notes` ( -`id` int(11) NOT NULL AUTO_INCREMENT, -`body` text COLLATE utf8_unicode_ci, -PRIMARY KEY (`id`) +CREATE TABLE notes ( +id int(11) NOT NULL AUTO_INCREMENT, +body text COLLATE utf8_unicode_ci, +PRIMARY KEY (id) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ROW_FORMAT=COMPRESSED; -ALTER TABLE notes ADD FULLTEXT INDEX `index_ft_body` (body(255)); +ALTER TABLE notes ADD FULLTEXT INDEX index_ft_body (body(255)); Warnings: Warning 124 InnoDB rebuilding table to add column FTS_DOC_ID DROP INDEX index_ft_body ON notes; diff --git a/mysql-test/suite/innodb/t/innodb-alter.test b/mysql-test/suite/innodb/t/innodb-alter.test index d301a2d3b063..7bc7241f1aa9 100644 --- a/mysql-test/suite/innodb/t/innodb-alter.test +++ b/mysql-test/suite/innodb/t/innodb-alter.test @@ -473,7 +473,7 @@ CREATE DATABASE db1; USE db1; CREATE TABLE notes ( id int(11) NOT NULL AUTO_INCREMENT, body text COLLATE utf8_unicode_ci, - PRIMARY KEY (`id`) + PRIMARY KEY (id) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ROW_FORMAT=COMPRESSED; From 873f8c25b6de24d267cbdedc70de40dc4b5b83aa Mon Sep 17 00:00:00 2001 From: Lars Tangvald Date: Tue, 13 Feb 2018 13:58:43 +0100 Subject: [PATCH 0603/1221] Bug#27538614 DROP EXTRA CHANGELOG FILE FROM DEB/RPM PACKAGES Change the file to refer to published git repository directly --- Docs/ChangeLog | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 Docs/ChangeLog diff --git a/Docs/ChangeLog b/Docs/ChangeLog new file mode 100644 index 000000000000..05c9065c3b96 --- /dev/null +++ b/Docs/ChangeLog @@ -0,0 +1,2 @@ +You can find a detailed list of changes at + to https://github.com/mysql/mysql-server/commits/5.5 From 912bee480e6409ff29d4a3296c1b3734efab02c2 Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Fri, 23 Feb 2018 18:14:26 +0530 Subject: [PATCH 0604/1221] From 1a6595b2c97ba93133bdce1c52a77defa61f9dec Mon Sep 17 00:00:00 2001 From: Yashwant Sahu Date: Sat, 24 Feb 2018 04:07:06 +0100 Subject: [PATCH 0605/1221] BUG#27040070 : ldap: asan and valgrind issues Description: 1. Fixed memory leak in ldap sasl server plugin. 2. Fixed memory leak in ldap sasl client side plugin. 3. Suppressed false positive leaks. 4. Fixed test skip issue for el7. RB: 18860 --- .../auth_ldap_sasl_client.cc | 6 +- mysql-test/valgrind.supp | 146 +++++++++++++++++- 2 files changed, 148 insertions(+), 4 deletions(-) diff --git a/libmysql/authentication_ldap/auth_ldap_sasl_client.cc b/libmysql/authentication_ldap/auth_ldap_sasl_client.cc index 21fcfbbabedd..613108bdead7 100644 --- a/libmysql/authentication_ldap/auth_ldap_sasl_client.cc +++ b/libmysql/authentication_ldap/auth_ldap_sasl_client.cc @@ -36,18 +36,18 @@ void Sasl_client::interact(sasl_interact_t *ilist) the name of the user authenticating */ case SASL_CB_USER: - ilist->result= strdup(m_user_name); + ilist->result= m_user_name; ilist->len= strlen((const char*)ilist->result); break; /* the name of the user acting for. (for example postman delivering mail for Martin might have an AUTHNAME of postman and a USER of Martin) */ case SASL_CB_AUTHNAME: - ilist->result= strdup(m_user_name); + ilist->result= m_user_name; ilist->len= strlen((const char*)ilist->result); break; case SASL_CB_PASS: - ilist->result= strdup(m_user_pwd); + ilist->result= m_user_pwd; ilist->len= strlen((const char*)ilist->result); break; default: diff --git a/mysql-test/valgrind.supp b/mysql-test/valgrind.supp index 2de0be624628..ab5ee05d041b 100644 --- a/mysql-test/valgrind.supp +++ b/mysql-test/valgrind.supp @@ -1,4 +1,4 @@ -# Copyright (c) 2005, 2017, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 2018, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public @@ -1608,3 +1608,147 @@ fun:_ZL17plugin_initializeP13st_plugin_int ... } + +# Bug #25964438 LDAP: ASAN AND VALGRIND ISSUES +{ + LDAP_TLS_workaround1 + Memcheck:Leak + fun:calloc + ... + ... + ... + ... + ... + fun:ldap_int_tls_start + fun:ldap_start_tls_s + fun:*establish_tls* + fun:*create* +} +{ + LDAP_TLS_workaround2 + Memcheck:Leak + fun:malloc + ... + ... + ... + ... + ... + fun:ldap_int_tls_start + fun:ldap_start_tls_s + fun:*establish_tls* + fun:*create* +} +{ + LDAP_TLS_workaround3 + Memcheck:Leak + fun:calloc + fun:PR_LoadLibraryWithFlags + ... + ... + ... + fun:PR_CallOnce + ... + ... + fun:_dl_init +} +{ + LDAP_TLS_workaround4 + Memcheck:Leak + fun:malloc + fun:PR_ErrorInstallTable + fun:PR_CallOnce + ... + ... + fun:PR_CallOnceWithArg + ... + fun:NSS_SetDomesticPolicy + ... + fun:PR_CallOnceWithArg + ... + ... + ... + fun:ldap_int_tls_start + fun:ldap_start_tls_s + fun:*establish_tls* +} +{ + LDAP_TLS_workaround5 + Memcheck:Leak + fun:malloc + ... + fun:PR_LoadLibraryWithFlags + ... + ... + ... + fun:PR_CallOnce + ... + ... + ... + ... + fun:_dl_catch_error + fun:_dl_open + fun:dlopen_doit + fun:_dl_catch_error + fun:_dlerror_run +} +{ + LDAP_TLS_workaround6 + Memcheck:Leak + fun:malloc + fun:ber_memalloc_x + fun:ber_strdup_x + ... + fun:ldap_int_initialize + fun:ldap_create + fun:ldap_initialize + fun:*create* +} +{ + LDAP_TLS_workaround7 + Memcheck:Leak + fun:malloc + fun:*dl_close_worker* + fun:*dl_close* + fun:*dl_catch_error* + fun:*libc_dlclose* + fun:*free_mem* + fun:*libc_freeres* + fun:*vgnU_freeres* + fun:*run_exit_handlers* + fun:exit* + fun:*mysqld_exit* + fun:*mysqld_main* + fun:*main* +} +{ + LDAP_TLS_workaround8 + Memcheck:Leak + fun:malloc + fun:ber_memalloc_x + fun:ber_strdup_x + ... + fun:ldap_int_initialize + fun:ldap_set_option + fun:*configure_tls* +} +{ + LDAP_TLS_workaround9 + Memcheck:Leak + match-leak-kinds: reachable + fun:malloc + fun:PR_ErrorInstallTable + ... + ... + ... + ... + ... + ... + ... + ... + ... + ... + ... + ... + fun:ldap_int_tls_start + fun:ldap_start_tls_s +} From c0b4d74b52e7eec9b13af732193f7f8d7abe05de Mon Sep 17 00:00:00 2001 From: Nisha Gopalakrishnan Date: Mon, 26 Feb 2018 14:37:39 +0530 Subject: [PATCH 0606/1221] BUG#27216817: INNODB: FAILING ASSERTION: PREBUILT->TABLE->N_MYSQL_HANDLES_OPENED == 1 ANALYSIS: ========= Adding unique index to a InnoDB table which is locked as mutliple instances may trigger an InnoDB assert. When we add a primary key or an unique index, we need to drop the original table and rebuild all indexes. InnoDB expects that only the instance of the table that is being rebuilt, is open during the process. In the current scenario we have opened multiple instances of the table. This triggers an assert during table rebuild. 'Locked_tables_list' encapsulates a list of all instances of tables locked by LOCK TABLES statement. FIX: === We are now temporarily closing all the instances of the table except the one which is being altered and later reopen them via Locked_tables_list::reopen_tables(). --- sql/sql_admin.cc | 4 ++-- sql/sql_base.cc | 18 +++++++++++++----- sql/sql_base.h | 5 +++-- sql/sql_partition.cc | 6 +++--- sql/sql_table.cc | 22 ++++++++++++++++++---- sql/sql_trigger.cc | 4 ++-- sql/sql_truncate.cc | 4 ++-- 7 files changed, 43 insertions(+), 20 deletions(-) diff --git a/sql/sql_admin.cc b/sql/sql_admin.cc index efdb67d01c41..bfe4edb67c46 100644 --- a/sql/sql_admin.cc +++ b/sql/sql_admin.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights +/* Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify @@ -168,7 +168,7 @@ static int prepare_for_repair(THD *thd, TABLE_LIST *table_list, */ if (wait_while_table_is_used(thd, table, HA_EXTRA_FORCE_REOPEN)) goto end; - close_all_tables_for_name(thd, table_list->table->s, FALSE); + close_all_tables_for_name(thd, table_list->table->s, FALSE, NULL); table_list->table= 0; } /* diff --git a/sql/sql_base.cc b/sql/sql_base.cc index 27dcbee7b8f0..e9ce652cdb10 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -1096,7 +1096,7 @@ bool close_cached_tables(THD *thd, TABLE_LIST *tables, result= TRUE; goto err_with_reopen; } - close_all_tables_for_name(thd, table->s, FALSE); + close_all_tables_for_name(thd, table->s, FALSE, NULL); } } @@ -1367,13 +1367,16 @@ static void close_open_tables(THD *thd) In that case the documented behaviour is to implicitly remove the table from LOCK TABLES list. + @param[in] skip_table + TABLE instance that should be kept open. @pre Must be called with an X MDL lock on the table. */ void close_all_tables_for_name(THD *thd, TABLE_SHARE *share, - bool remove_from_locked_tables) + bool remove_from_locked_tables, + TABLE *skip_table) { char key[MAX_DBKEY_LENGTH]; uint key_length= share->table_cache_key.length; @@ -1388,7 +1391,8 @@ close_all_tables_for_name(THD *thd, TABLE_SHARE *share, TABLE *table= *prev; if (table->s->table_cache_key.length == key_length && - !memcmp(table->s->table_cache_key.str, key, key_length)) + !memcmp(table->s->table_cache_key.str, key, key_length) && + table != skip_table) { thd->locked_tables_list.unlink_from_list(thd, table->pos_in_locked_tables, @@ -1401,7 +1405,8 @@ close_all_tables_for_name(THD *thd, TABLE_SHARE *share, mysql_lock_remove(thd, thd->lock, table); /* Inform handler that table will be dropped after close */ - if (table->db_stat) /* Not true for partitioned tables. */ + if (table->db_stat && /* Not true for partitioned tables. */ + skip_table == NULL) table->file->extra(HA_EXTRA_PREPARE_FOR_DROP); close_thread_table(thd, prev); } @@ -1411,9 +1416,12 @@ close_all_tables_for_name(THD *thd, TABLE_SHARE *share, prev= &table->next; } } + + if (skip_table == NULL) { /* Remove the table share from the cache. */ tdc_remove_table(thd, TDC_RT_REMOVE_ALL, db, table_name, FALSE); + } } diff --git a/sql/sql_base.h b/sql/sql_base.h index b118c93ac289..28568acc0818 100644 --- a/sql/sql_base.h +++ b/sql/sql_base.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -306,7 +306,8 @@ bool close_cached_tables(THD *thd, TABLE_LIST *tables, bool wait_for_refresh, ulong timeout); bool close_cached_connection_tables(THD *thd, LEX_STRING *connect_string); void close_all_tables_for_name(THD *thd, TABLE_SHARE *share, - bool remove_from_locked_tables); + bool remove_from_locked_tables, + TABLE *skip_table); OPEN_TABLE_LIST *list_open_tables(THD *thd, const char *db, const char *wild); void tdc_remove_table(THD *thd, enum_tdc_remove_table_type remove_type, const char *db, const char *table_name, diff --git a/sql/sql_partition.cc b/sql/sql_partition.cc index 65d4da0f2f66..bd76a92dc68a 100644 --- a/sql/sql_partition.cc +++ b/sql/sql_partition.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2005, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2005, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -6512,7 +6512,7 @@ static void alter_partition_lock_handling(ALTER_PARTITION_PARAM_TYPE *lpt) THD *thd= lpt->thd; if (lpt->old_table) - close_all_tables_for_name(thd, lpt->old_table->s, FALSE); + close_all_tables_for_name(thd, lpt->old_table->s, FALSE, NULL); if (lpt->table) { /* @@ -6549,7 +6549,7 @@ static int alter_close_tables(ALTER_PARTITION_PARAM_TYPE *lpt, bool close_old) } if (close_old && lpt->old_table) { - close_all_tables_for_name(lpt->thd, lpt->old_table->s, FALSE); + close_all_tables_for_name(lpt->thd, lpt->old_table->s, FALSE, NULL); lpt->old_table= 0; } DBUG_RETURN(0); diff --git a/sql/sql_table.cc b/sql/sql_table.cc index 58bcf5ca1d4c..6d02140cfcb6 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -2165,7 +2165,7 @@ int mysql_rm_table_no_locks(THD *thd, TABLE_LIST *tables, bool if_exists, error= -1; goto err; } - close_all_tables_for_name(thd, table->table->s, TRUE); + close_all_tables_for_name(thd, table->table->s, TRUE, NULL); table->table= 0; } @@ -6168,7 +6168,7 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name, */ if (wait_while_table_is_used(thd, table, HA_EXTRA_FORCE_REOPEN)) goto err; - close_all_tables_for_name(thd, table->s, TRUE); + close_all_tables_for_name(thd, table->s, TRUE, NULL); /* Then, we want check once again that target table does not exist. Actually the order of these two steps does not matter since @@ -6305,6 +6305,7 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name, changes only" means also that the handler for the table does not change. The table is open and locked. The handler can be accessed. */ + if (need_copy_table == ALTER_TABLE_INDEX_CHANGED) { int pk_changed= 0; @@ -6606,6 +6607,19 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name, thd->count_cuted_fields= CHECK_FIELD_WARN; // calc cuted fields thd->cuted_fields=0L; copied=deleted=0; + + if (thd->locked_tables_mode == LTM_LOCK_TABLES || + thd->locked_tables_mode == LTM_PRELOCKED_UNDER_LOCK_TABLES) + { + /* + Temporarily close the TABLE instances belonging to this + thread except the one to be used for ALTER TABLE. + + This is mostly needed to satisfy InnoDB assumptions/asserts. + */ + close_all_tables_for_name(thd, table->s, false, table); + } + /* We do not copy data for MERGE tables. Only the children have data. MERGE tables have HA_NO_COPY_ON_ALTER set. @@ -6877,7 +6891,7 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name, } close_all_tables_for_name(thd, table->s, - new_name != table_name || new_db != db); + new_name != table_name || new_db != db, NULL); error=0; table_list->table= table= 0; /* Safety */ diff --git a/sql/sql_trigger.cc b/sql/sql_trigger.cc index 0a4f549a052b..fe1131c41640 100644 --- a/sql/sql_trigger.cc +++ b/sql/sql_trigger.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2004, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -568,7 +568,7 @@ bool mysql_create_or_drop_trigger(THD *thd, TABLE_LIST *tables, bool create) if (result) goto end; - close_all_tables_for_name(thd, table->s, FALSE); + close_all_tables_for_name(thd, table->s, FALSE, NULL); /* Reopen the table if we were under LOCK TABLES. Ignore the return value for now. It's better to diff --git a/sql/sql_truncate.cc b/sql/sql_truncate.cc index 4f250e6e7a07..d8a0205a4958 100644 --- a/sql/sql_truncate.cc +++ b/sql/sql_truncate.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -394,7 +394,7 @@ bool Truncate_statement::lock_table(THD *thd, TABLE_LIST *table_ref, m_ticket_downgrade= table->mdl_ticket; /* Close if table is going to be recreated. */ if (*hton_can_recreate) - close_all_tables_for_name(thd, table->s, FALSE); + close_all_tables_for_name(thd, table->s, FALSE, NULL); } else { From b7aafca7b708b40cdfbeeff3798e2074722ece7e Mon Sep 17 00:00:00 2001 From: Balasubramanian Kandasamy Date: Mon, 26 Feb 2018 15:55:16 +0530 Subject: [PATCH 0607/1221] Raise version number after cloning 5.5.60 --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 44f719ca0978..23e938e60e15 100644 --- a/VERSION +++ b/VERSION @@ -1,4 +1,4 @@ MYSQL_VERSION_MAJOR=5 MYSQL_VERSION_MINOR=5 -MYSQL_VERSION_PATCH=60 +MYSQL_VERSION_PATCH=61 MYSQL_VERSION_EXTRA= From 6413b77489bc85688f5d68551871ba5c07ee02cb Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Mon, 26 Feb 2018 18:12:38 +0000 Subject: [PATCH 0608/1221] MYR-244 : Test rocksdb.concurrent_alter output not updated - Fixed trivially broken test result. --- mysql-test/suite/rocksdb/r/concurrent_alter.result | 1 - 1 file changed, 1 deletion(-) diff --git a/mysql-test/suite/rocksdb/r/concurrent_alter.result b/mysql-test/suite/rocksdb/r/concurrent_alter.result index 9ab238edbf55..f517e51b2b12 100644 --- a/mysql-test/suite/rocksdb/r/concurrent_alter.result +++ b/mysql-test/suite/rocksdb/r/concurrent_alter.result @@ -1,6 +1,5 @@ set @orig_max_connections=@@global.max_connections; set @@global.max_connections=500; -call mtr.add_suppression("Too many connections"); CREATE DATABASE mysqlslap; use mysqlslap; CREATE TABLE a1 (a int, b int) ENGINE=ROCKSDB; From ce642a503b5c9803cb594a12279010bdbac00531 Mon Sep 17 00:00:00 2001 From: Vitor Oliveira Date: Mon, 26 Feb 2018 21:14:27 +0100 Subject: [PATCH 0609/1221] WL#9556 introduced the ability to use transaction write sets to find out which transactions can be safely executed concurrently on the slave. The transactions are tracked on the master and the binary log commit_parent field, which is used by the MTS applier on the slave, is changed to consider writeset dependencies between transactions. Relevant changes to the code: - introduces two new options: binlog-transaction-dependency-tracking, which selects the tracking mode between COMMIT_ORDER, WRITESET and WRITESET_SESSION, and binlog-transaction-dependency-history-size. - adds the Transaction_dependency_tracker and associated classes Commit_order_trx_dependency_tracker, Writeset_trx_dependency_tracker and Writeset_session_trx_dependency_tracker, specific to each of the tracking modes (in the new rpl_trx_tracking.h/.cc files). - to support the WRITESET mode, the hashes of each row touched by a transaction are stored in the m_writeset_history map, up to the size determined by the binlog-transaction-dependency-history-size option. - to support the WRITESET_SESSION mode, the Dependency_tracker_ctx is added to the THD so that the last sequence_number used by a client is available for future transactions of the same session. - extends the function add_pke to track transactions that touch tables with primary keys and tables without them, so that partial writesets are detected. This WL back-ports WL#9556 to MySQL 5.7, in addition to the fixes for the following bugs: BUG#25950554: THE FUNCTION RESET_CONNECTION DOES NOT RESET WRITE SET... BUG#25982097: WRITESET DEPENDENCY TRACKING SUB-OPTIMAL AFTER ROTATION... --- mysql-test/include/assert_grep.inc | 4 + .../include/assert_logical_timestamps.inc | 24 +- ...ction_dependency_tracking_commit_order.inc | 4 + mysql-test/r/mysqld--help-notwin.result | 9 + mysql-test/r/mysqld--help-win.result | 9 + ...reset_connection_not_reset_writeset.result | 15 + ...action_dependency_tracking_on_start.result | 54 ++ ...ction_dependency_tracking_sensitive.result | 34 + ...g_reset_connection_not_reset_writeset.test | 63 ++ ...on_dependency_tracking_on_start-master.opt | 1 + ...nsaction_dependency_tracking_on_start.test | 164 ++++ ...saction_dependency_tracking_sensitive.test | 77 ++ .../suite/perfschema/r/show_sanity.result | 4 + ...transaction_dependency_history_size.result | 108 +++ ...log_transaction_dependency_tracking.result | 810 +++++++++++++++++ ...dependency_tracking_with_empty_trxs.result | 38 + ...on_dependency_tracking_with_filters.result | 109 +++ ...saction_dependency_tracking_with_fk.result | 412 +++++++++ ...on_dependency_tracking_with_indexes.result | 824 ++++++++++++++++++ ...saction_dependency_history_size-master.opt | 3 + ...g_transaction_dependency_history_size.test | 135 +++ ...inlog_transaction_dependency_tracking.test | 385 ++++++++ ...n_dependency_tracking_with_empty_trxs.test | 71 ++ ...tion_dependency_tracking_with_filters.test | 183 ++++ ...ion_dependency_tracking_with_fk-master.opt | 2 + ...ansaction_dependency_tracking_with_fk.test | 212 +++++ ...tion_dependency_tracking_with_indexes.test | 319 +++++++ ...transaction_dependency_h_size_basic.result | 43 + ...ansaction_dependency_tracking_basic.result | 82 ++ ...g_transaction_dependency_h_size_basic.test | 106 +++ ...transaction_dependency_tracking_basic.test | 155 ++++ .../tests/collections/default.weekly | 1 + .../mtr/t/gr_collations_key_conflict.test | 1 - .../t/gr_write_set_extraction_algorithm.test | 1 + rapid/plugin/x/tests/mtr/r/connection.result | 2 +- rapid/plugin/x/tests/mtr/t/connection.test | 2 +- sql/CMakeLists.txt | 5 +- sql/binlog.cc | 269 +++--- sql/binlog.h | 63 +- sql/mysqld.cc | 10 + sql/rpl_context.h | 31 +- sql/rpl_transaction_write_set_ctx.cc | 30 +- sql/rpl_transaction_write_set_ctx.h | 28 + sql/rpl_trx_tracking.cc | 394 +++++++++ sql/rpl_trx_tracking.h | 232 +++++ sql/rpl_write_set_handler.cc | 12 + sql/sql_class.cc | 2 + sql/sys_vars.cc | 74 ++ sql/sys_vars_shared.h | 10 +- 49 files changed, 5437 insertions(+), 189 deletions(-) create mode 100644 mysql-test/include/only_binlog_transaction_dependency_tracking_commit_order.inc create mode 100644 mysql-test/suite/binlog/r/binlog_reset_connection_not_reset_writeset.result create mode 100644 mysql-test/suite/binlog/r/binlog_transaction_dependency_tracking_on_start.result create mode 100644 mysql-test/suite/binlog/r/binlog_transaction_dependency_tracking_sensitive.result create mode 100644 mysql-test/suite/binlog/t/binlog_reset_connection_not_reset_writeset.test create mode 100644 mysql-test/suite/binlog/t/binlog_transaction_dependency_tracking_on_start-master.opt create mode 100644 mysql-test/suite/binlog/t/binlog_transaction_dependency_tracking_on_start.test create mode 100644 mysql-test/suite/binlog/t/binlog_transaction_dependency_tracking_sensitive.test create mode 100644 mysql-test/suite/rpl/r/rpl_binlog_transaction_dependency_history_size.result create mode 100644 mysql-test/suite/rpl/r/rpl_binlog_transaction_dependency_tracking.result create mode 100644 mysql-test/suite/rpl/r/rpl_binlog_transaction_dependency_tracking_with_empty_trxs.result create mode 100644 mysql-test/suite/rpl/r/rpl_binlog_transaction_dependency_tracking_with_filters.result create mode 100644 mysql-test/suite/rpl/r/rpl_binlog_transaction_dependency_tracking_with_fk.result create mode 100644 mysql-test/suite/rpl/r/rpl_binlog_transaction_dependency_tracking_with_indexes.result create mode 100644 mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_history_size-master.opt create mode 100644 mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_history_size.test create mode 100644 mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_tracking.test create mode 100644 mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_tracking_with_empty_trxs.test create mode 100644 mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_tracking_with_filters.test create mode 100644 mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_tracking_with_fk-master.opt create mode 100644 mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_tracking_with_fk.test create mode 100644 mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_tracking_with_indexes.test create mode 100644 mysql-test/suite/sys_vars/r/binlog_transaction_dependency_h_size_basic.result create mode 100644 mysql-test/suite/sys_vars/r/binlog_transaction_dependency_tracking_basic.result create mode 100644 mysql-test/suite/sys_vars/t/binlog_transaction_dependency_h_size_basic.test create mode 100644 mysql-test/suite/sys_vars/t/binlog_transaction_dependency_tracking_basic.test create mode 100644 sql/rpl_trx_tracking.cc create mode 100644 sql/rpl_trx_tracking.h diff --git a/mysql-test/include/assert_grep.inc b/mysql-test/include/assert_grep.inc index a980a6d73b18..943b6f917c32 100644 --- a/mysql-test/include/assert_grep.inc +++ b/mysql-test/include/assert_grep.inc @@ -94,6 +94,10 @@ if ($assert_match != '') my $assert_only_after= $ENV{'_AG_ASSERT_ONLY_AFTER'}; my $out= $ENV{'_AG_OUT'}; + if (!defined($assert_count)) { + $assert_count = ''; + } + my $result= ''; my $count= 0; open(FILE, "$file") or die("Error $? opening $file: $!\n"); diff --git a/mysql-test/include/assert_logical_timestamps.inc b/mysql-test/include/assert_logical_timestamps.inc index b65e8e1574fb..43513e29b8d1 100644 --- a/mysql-test/include/assert_logical_timestamps.inc +++ b/mysql-test/include/assert_logical_timestamps.inc @@ -8,6 +8,8 @@ # --let $binlog_file= FILENAME # [--let $binlog_position= OFFSET] # --let $logical_timestamps= LC1 SN1[;LC2 SN2[;LC3 SN3...]] +# [--let $save_binlog_position= 1] +# [--let $dont_print_logical_timestamps= 1] # --source include/assert_logical_timestamps.inc # # Parameters: @@ -26,9 +28,23 @@ # integer. Note that this is whitespace-sensitive so there should # not be any other space characters than those separating # last_committed from sequence_number. - +# +# $save_binlog_position +# If this flag is set, the script will source +# include/save_binlog_position.inc after it has finished the +# assert, making the next invocation automatically continue where +# this invocation ended. This is convenient if the script is to +# be called multiple times in a sequence. +# +# $dont_print_logical_timestamps +# By default, $logical_timestamps is printed to the result log. If +# this flag is set, that is suppressed. --let $include_filename= include/assert_logical_timestamps.inc [$logical_timestamps] +if ($dont_print_logical_timestamps) +{ + --let $include_filename= include/assert_logical_timestamps.inc +} --source include/begin_include_file.inc @@ -53,5 +69,11 @@ if ($binlog_position) --remove_file $assert_file +if ($save_binlog_position) +{ + --source include/save_binlog_position.inc +} + + --let $include_filename= include/assert_logical_timestamps.inc [$logical_timestamps] --source include/end_include_file.inc diff --git a/mysql-test/include/only_binlog_transaction_dependency_tracking_commit_order.inc b/mysql-test/include/only_binlog_transaction_dependency_tracking_commit_order.inc new file mode 100644 index 000000000000..1ae9378b80be --- /dev/null +++ b/mysql-test/include/only_binlog_transaction_dependency_tracking_commit_order.inc @@ -0,0 +1,4 @@ +if (`SELECT @@GLOBAL.binlog_transaction_dependency_tracking != 'COMMIT_ORDER'`) +{ + --skip Test requires binlog_transaction_dependency_tracking= COMMIT_ORDER +} diff --git a/mysql-test/r/mysqld--help-notwin.result b/mysql-test/r/mysqld--help-notwin.result index 2d1e411e20e6..e818dd427d86 100644 --- a/mysql-test/r/mysqld--help-notwin.result +++ b/mysql-test/r/mysqld--help-notwin.result @@ -141,6 +141,13 @@ The following options may be given as the first argument: non-transactional engines for the binary log. If you often use statements updating a great number of rows, you can increase this to get more performance + --binlog-transaction-dependency-history-size=# + Maximum number of rows to keep in the writeset history. + --binlog-transaction-dependency-tracking=name + Selects the source of dependency information from which + to assess which transactions can be executed in parallel + by the slave's multi-threaded applier. Possible values + are COMMIT_ORDER, WRITESET and WRITESET_SESSION. --block-encryption-mode=name mode for AES_ENCRYPT/AES_DECRYPT --bootstrap Used by mysql installation scripts. @@ -1292,6 +1299,8 @@ binlog-row-event-max-size 8192 binlog-row-image FULL binlog-rows-query-log-events FALSE binlog-stmt-cache-size 32768 +binlog-transaction-dependency-history-size 25000 +binlog-transaction-dependency-tracking COMMIT_ORDER block-encryption-mode aes-128-ecb bulk-insert-buffer-size 8388608 character-set-client-handshake TRUE diff --git a/mysql-test/r/mysqld--help-win.result b/mysql-test/r/mysqld--help-win.result index 8ae2bbd089f0..f9ce47560aed 100644 --- a/mysql-test/r/mysqld--help-win.result +++ b/mysql-test/r/mysqld--help-win.result @@ -141,6 +141,13 @@ The following options may be given as the first argument: non-transactional engines for the binary log. If you often use statements updating a great number of rows, you can increase this to get more performance + --binlog-transaction-dependency-history-size=# + Maximum number of rows to keep in the writeset history. + --binlog-transaction-dependency-tracking=name + Selects the source of dependency information from which + to assess which transactions can be executed in parallel + by the slave's multi-threaded applier. Possible values + are COMMIT_ORDER, WRITESET and WRITESET_SESSION. --block-encryption-mode=name mode for AES_ENCRYPT/AES_DECRYPT --bootstrap Used by mysql installation scripts. @@ -1291,6 +1298,8 @@ binlog-row-event-max-size 8192 binlog-row-image FULL binlog-rows-query-log-events FALSE binlog-stmt-cache-size 32768 +binlog-transaction-dependency-history-size 25000 +binlog-transaction-dependency-tracking COMMIT_ORDER block-encryption-mode aes-128-ecb bulk-insert-buffer-size 8388608 character-set-client-handshake TRUE diff --git a/mysql-test/suite/binlog/r/binlog_reset_connection_not_reset_writeset.result b/mysql-test/suite/binlog/r/binlog_reset_connection_not_reset_writeset.result new file mode 100644 index 000000000000..ae973a193b1c --- /dev/null +++ b/mysql-test/suite/binlog/r/binlog_reset_connection_not_reset_writeset.result @@ -0,0 +1,15 @@ +SET GLOBAL transaction_write_set_extraction= 'XXHASH64'; +SET GLOBAL binlog_transaction_dependency_tracking= 'WRITESET'; +CREATE TABLE t1(id INT, PRIMARY KEY (id)); +FLUSH LOGS; +INSERT INTO t1(id) VALUES(1); +INSERT INTO t1(id) VALUES(2); +SET GLOBAL binlog_transaction_dependency_tracking= 'WRITESET_SESSION'; +INSERT INTO t1(id) VALUES(3); +INSERT INTO t1(id) VALUES(4); +include/save_binlog_position.inc +INSERT INTO t1(id) VALUES(5); +include/include/assert_logical_timestamps.inc [4 5] +SET GLOBAL binlog_transaction_dependency_tracking= COMMIT_ORDER; +SET GLOBAL transaction_write_set_extraction= OFF; +DROP TABLE t1; diff --git a/mysql-test/suite/binlog/r/binlog_transaction_dependency_tracking_on_start.result b/mysql-test/suite/binlog/r/binlog_transaction_dependency_tracking_on_start.result new file mode 100644 index 000000000000..3dae8bae152a --- /dev/null +++ b/mysql-test/suite/binlog/r/binlog_transaction_dependency_tracking_on_start.result @@ -0,0 +1,54 @@ +# +# Test 1.a: Try starting server with TWSE=OFF and BTDT=COMMIT_ORDER. Expect SUCCESS. +# +# restart: --transaction_write_set_extraction=OFF --binlog_transaction_dependency_tracking=COMMIT_ORDER +include/assert.inc [transaction_write_set_extraction should be OFF] +include/assert.inc [binlog_transaction_dependency_tracking should be COMMIT_ORDER] +# +# Test 1.b: Try starting server with TWSE=OFF and BTDT=WRITESET. Expect FAILURE. +# +Occurrences of 'The transaction_write_set_extraction must be set to XXHASH64 or MURMUR32 when binlog_transaction_dependency_tracking is WRITESET or WRITESET_SESSION.' in the input file: 1 +Occurrences of '\[ERROR\] Aborting' in the input file: 1 +# +# Test 1.c: Try starting server with TWSE=OFF and BTDT=WRITESET_SESSION. Expect FAILURE. +# +Occurrences of 'The transaction_write_set_extraction must be set to XXHASH64 or MURMUR32 when binlog_transaction_dependency_tracking is WRITESET or WRITESET_SESSION.' in the input file: 1 +Occurrences of '\[ERROR\] Aborting' in the input file: 1 +# +# Test 1.d: Try starting server with TWSE=MURMUR32 and BTDT=COMMIT_ORDER. Expect SUCCESS. +# +# restart: --transaction_write_set_extraction=MURMUR32 --binlog_transaction_dependency_tracking=COMMIT_ORDER +include/assert.inc [transaction_write_set_extraction should be MURMUR32] +include/assert.inc [binlog_transaction_dependency_tracking should be COMMIT_ORDER] +# +# Test 1.e: Try starting server with TWSE=MURMUR32 and BTDT=WRITESET. Expect SUCCESS. +# +# restart: --transaction_write_set_extraction=MURMUR32 --binlog_transaction_dependency_tracking=WRITESET +include/assert.inc [transaction_write_set_extraction should be MURMUR32] +include/assert.inc [binlog_transaction_dependency_tracking should be WRITESET] +# +# Test 1.f: Try starting server with TWSE=MURMUR32 and BTDT=WRITESET_SESSION. Expect SUCCESS. +# +# restart: --transaction_write_set_extraction=MURMUR32 --binlog_transaction_dependency_tracking=WRITESET_SESSION +include/assert.inc [transaction_write_set_extraction should be MURMUR32] +include/assert.inc [binlog_transaction_dependency_tracking should be WRITESET_SESSION] +# +# Test 1.g: Try starting server with TWSE=XXHASH64 and BTDT=COMMIT_ORDER. Expect SUCCESS. +# +# restart: --transaction_write_set_extraction=XXHASH64 --binlog_transaction_dependency_tracking=COMMIT_ORDER +include/assert.inc [transaction_write_set_extraction should be XXHASH64] +include/assert.inc [binlog_transaction_dependency_tracking should be COMMIT_ORDER] +# +# Test 1.h: Try starting server with TWSE=XXHASH64 and BTDT=WRITESET. Expect SUCCESS +# +# restart: --transaction_write_set_extraction=XXHASH64 --binlog_transaction_dependency_tracking=WRITESET +include/assert.inc [transaction_write_set_extraction should be XXHASH64] +include/assert.inc [binlog_transaction_dependency_tracking should be WRITESET] +# +# Test 1.i: Try starting server with TWSE=XXHASH64 and BTDT=WRITESET_SESSION. Expect SUCCESS. +# +# restart: --transaction_write_set_extraction=XXHASH64 --binlog_transaction_dependency_tracking=WRITESET_SESSION +include/assert.inc [transaction_write_set_extraction should be XXHASH64] +include/assert.inc [binlog_transaction_dependency_tracking should be WRITESET_SESSION] +SET GLOBAL binlog_transaction_dependency_tracking= COMMIT_ORDER; +SET GLOBAL transaction_write_set_extraction= OFF; diff --git a/mysql-test/suite/binlog/r/binlog_transaction_dependency_tracking_sensitive.result b/mysql-test/suite/binlog/r/binlog_transaction_dependency_tracking_sensitive.result new file mode 100644 index 000000000000..09d99e825769 --- /dev/null +++ b/mysql-test/suite/binlog/r/binlog_transaction_dependency_tracking_sensitive.result @@ -0,0 +1,34 @@ +SET @save_binlog_transaction_dependency_tracking = @@GLOBAL.binlog_transaction_dependency_tracking; +SET @save_transaction_write_set_extraction = @@GLOBAL.transaction_write_set_extraction; +SET @@GLOBAL.transaction_write_set_extraction = XXHASH64; +SET @@SESSION.transaction_write_set_extraction = XXHASH64; +SET @@GLOBAL.binlog_transaction_dependency_tracking = WRITESET; +SET NAMES 'utf8' COLLATE 'utf8_general_ci'; +RESET MASTER; +CREATE TABLE t1 ( +id INT NOT NULL AUTO_INCREMENT, +u_id INT NOT NULL, +u_str VARCHAR(32) NOT NULL, +PRIMARY KEY (id), +UNIQUE KEY (u_id, u_str) +) ENGINE=InnoDB; +INSERT INTO t1 (u_id, u_str) VALUES (1, 'a'); +INSERT INTO t1 (u_id, u_str) VALUES (1, 'A'); +ERROR 23000: Duplicate entry '1-A' for key 'u_id' +INSERT INTO t1 (u_id, u_str) VALUES (1, 'ã'); +ERROR 23000: Duplicate entry '1-ã' for key 'u_id' +INSERT INTO t1 (u_id, u_str) VALUES (1, 'Ã'); +ERROR 23000: Duplicate entry '1-Ã' for key 'u_id' +INSERT INTO t1 (u_id, u_str) VALUES (1, 'á'); +ERROR 23000: Duplicate entry '1-á' for key 'u_id' +DELETE FROM t1 WHERE u_id = 1 AND u_str = 'A'; +INSERT INTO t1 (u_id, u_str) VALUES (1, 'ã'); +DELETE FROM t1 WHERE u_id = 1 AND u_str = 'Ã'; +INSERT INTO t1 (u_id, u_str) VALUES (1, 'á'); +DROP TABLE t1; +Processing binlog master-bin.000001 +FLUSH LOGS; +include/include/assert_logical_timestamps.inc [0 1;1 2;2 3;3 4;4 5;5 6;6 7] +SET @@GLOBAL.binlog_transaction_dependency_tracking = COMMIT_ORDER; +SET @@GLOBAL.transaction_write_set_extraction= @save_transaction_write_set_extraction; +SET @@GLOBAL.binlog_transaction_dependency_tracking= @save_binlog_transaction_dependency_tracking; diff --git a/mysql-test/suite/binlog/t/binlog_reset_connection_not_reset_writeset.test b/mysql-test/suite/binlog/t/binlog_reset_connection_not_reset_writeset.test new file mode 100644 index 000000000000..052c32af82f1 --- /dev/null +++ b/mysql-test/suite/binlog/t/binlog_reset_connection_not_reset_writeset.test @@ -0,0 +1,63 @@ +############################################################################### +# Bug#25950554:THE FUNCTION RESET_CONNECTION DOES NOT RESET WRITE SET IN # +# WRITESET_SESSION. # +# # +# Problem: When we do reset_connection which has the same effect as # +# auto-reconnect, the write set session history is not cleared, # +# which in case of auto-reconnect does get cleared. # +# # +# Fix: Reset the write set session history when mysql_reset_connection # +# is called. # +# # +# Steps to reproduce: # +# # +# 1) Set the variable transaction_write_set_extraction to 'XXHASH64' which is # +# necessary to be able to change the value of the variable # +# binlog_transaction_dependency_tracking to WRITESET or WRITESET_SESSION # +# # +# 2) Set the variable binlog_transaction_dependency_tracking to WRITESET for # +# few coming transactions. # +# # +# 3) Create a sample table and do few inserts. # +# # +# 4) Change the value of binlog_transaction_dependency_tracking to # +# WRITESET_SESSION, to check if the write set session history is cleared # +# or not after calling reset_connection. # +# # +# 5) Call reset_connection. # +# # +# 6) Check if the logical timestamp has the correct entry after the reset # +# connection. This will mean that the write set history is cleared after a # +# to reset_connection. # +############################################################################### + +--source include/have_binlog_format_row.inc + +--let $saved_binlog_transaction_dependency_tracking= `SELECT @@GLOBAL.binlog_transaction_dependency_tracking` +--let $saved_transaction_write_set_extraction= `SELECT @@GLOBAL.transaction_write_set_extraction` + +SET GLOBAL transaction_write_set_extraction= 'XXHASH64'; +SET GLOBAL binlog_transaction_dependency_tracking= 'WRITESET'; + +CREATE TABLE t1(id INT, PRIMARY KEY (id)); +FLUSH LOGS; +INSERT INTO t1(id) VALUES(1); +INSERT INTO t1(id) VALUES(2); + +SET GLOBAL binlog_transaction_dependency_tracking= 'WRITESET_SESSION'; +INSERT INTO t1(id) VALUES(3); +INSERT INTO t1(id) VALUES(4); + +reset_connection; + +--source include/save_binlog_position.inc + +INSERT INTO t1(id) VALUES(5); + +--let $logical_timestamps= 4 5 +--source include/assert_logical_timestamps.inc + +# Clean up +--eval SET GLOBAL binlog_transaction_dependency_tracking= $saved_binlog_transaction_dependency_tracking +--eval SET GLOBAL transaction_write_set_extraction= $saved_transaction_write_set_extraction +DROP TABLE t1; diff --git a/mysql-test/suite/binlog/t/binlog_transaction_dependency_tracking_on_start-master.opt b/mysql-test/suite/binlog/t/binlog_transaction_dependency_tracking_on_start-master.opt new file mode 100644 index 000000000000..0edcc176f161 --- /dev/null +++ b/mysql-test/suite/binlog/t/binlog_transaction_dependency_tracking_on_start-master.opt @@ -0,0 +1 @@ +--no-console --log-error=$MYSQLTEST_VARDIR/tmp/binlog_transaction_dependency_tracking.err diff --git a/mysql-test/suite/binlog/t/binlog_transaction_dependency_tracking_on_start.test b/mysql-test/suite/binlog/t/binlog_transaction_dependency_tracking_on_start.test new file mode 100644 index 000000000000..45e6fa505e3c --- /dev/null +++ b/mysql-test/suite/binlog/t/binlog_transaction_dependency_tracking_on_start.test @@ -0,0 +1,164 @@ +################################################################################ +# The testcase aims to test possible correct and incorrect settings of the +# following variables together during the start of the server: +# transaction_write_set_extraction (TWSE) +# binlog_transaction_dependency_tracking (BTDT) +# +# Test: +# 0. This test requires one server. +# 1. Try starting server with: +# a. TWSE=OFF and BTDT=COMMIT_ORDER. Expect SUCCESS. +# b. TWSE=OFF and BTDT=WRITESET. Expect FAILURE. +# c. TWSE=OFF and BTDT=WRITESET_SESSION. Expect FAILURE. +# d. TWSE=MURMUR32 and BTDT=COMMIT_ORDER. Expect SUCCESS. +# e. TWSE=MURMUR32 and BTDT=WRITESET. Expect SUCCESS. +# f. TWSE=MURMUR32 and BTDT=WRITESET_SESSION. Expect SUCCESS. +# g. TWSE=XXHASH64 and BTDT=COMMIT_ORDER. Expect SUCCESS. +# h. TWSE=XXHASH64 and BTDT=WRITESET. Expect SUCCESS +# i. TWSE=XXHASH64 and BTDT=WRITESET_SESSION. Expect SUCCESS. +# +# ==== References ==== +# WL#9556: Writeset-based MTS dependency tracking on master +################################################################################ +--source include/not_embedded.inc +--source include/big_test.inc +--source include/have_binlog_format_row.inc + +--let $saved_binlog_transaction_dependency_tracking= `SELECT @@GLOBAL.binlog_transaction_dependency_tracking` +--let $saved_transaction_write_set_extraction= `SELECT @@GLOBAL.transaction_write_set_extraction` + +--echo # +--echo # Test 1.a: Try starting server with TWSE=OFF and BTDT=COMMIT_ORDER. Expect SUCCESS. +--echo # +--let $restart_parameters="restart: --transaction_write_set_extraction=OFF --binlog_transaction_dependency_tracking=COMMIT_ORDER" +--source include/restart_mysqld.inc +--source include/wait_until_connected_again.inc +--let $assert_text= transaction_write_set_extraction should be OFF +--let $assert_cond= "[SELECT @@GLOBAL.transaction_write_set_extraction]" = "OFF" +--source include/assert.inc +--let $assert_text= binlog_transaction_dependency_tracking should be COMMIT_ORDER +--let $assert_cond= "[SELECT @@GLOBAL.binlog_transaction_dependency_tracking]" = "COMMIT_ORDER" +--source include/assert.inc + +--echo # +--echo # Test 1.b: Try starting server with TWSE=OFF and BTDT=WRITESET. Expect FAILURE. +--echo # +# Let server restart attempts write to the file $error_log. +--let $error_log= $MYSQLTEST_VARDIR/tmp/binlog_transaction_dependency_tracking.err +--source include/shutdown_mysqld.inc + +let $mysqld=$MYSQLD_CMD --core-file --console > $error_log 2>&1 --transaction_write_set_extraction=OFF --binlog_transaction_dependency_tracking=WRITESET; + +--error 1 +--exec $mysqld +--let $grep_file=$error_log +--let $grep_pattern=The transaction_write_set_extraction must be set to XXHASH64 or MURMUR32 when binlog_transaction_dependency_tracking is WRITESET or WRITESET_SESSION. +--let $grep_output= print_count +--source include/grep_pattern.inc + +# The server restart aborts +--let $grep_pattern= \[ERROR\] Aborting +--let $grep_output= print_count +--source include/grep_pattern.inc + +--echo # +--echo # Test 1.c: Try starting server with TWSE=OFF and BTDT=WRITESET_SESSION. Expect FAILURE. +--echo # +let $mysqld=$MYSQLD_CMD --core-file --console > $error_log 2>&1 --transaction_write_set_extraction=OFF --binlog_transaction_dependency_tracking=WRITESET_SESSION; + +--error 1 +--exec $mysqld +--let $grep_file=$error_log +--let $grep_pattern=The transaction_write_set_extraction must be set to XXHASH64 or MURMUR32 when binlog_transaction_dependency_tracking is WRITESET or WRITESET_SESSION. +--let $grep_output= print_count +--source include/grep_pattern.inc + +# The server restart aborts +--let $grep_pattern= \[ERROR\] Aborting +--let $grep_output= print_count +--source include/grep_pattern.inc + +--echo # +--echo # Test 1.d: Try starting server with TWSE=MURMUR32 and BTDT=COMMIT_ORDER. Expect SUCCESS. +--echo # +--let $restart_parameters="restart: --transaction_write_set_extraction=MURMUR32 --binlog_transaction_dependency_tracking=COMMIT_ORDER" +--source include/start_mysqld.inc +--source include/wait_until_connected_again.inc +--let $assert_text= transaction_write_set_extraction should be MURMUR32 +--let $assert_cond= "[SELECT @@GLOBAL.transaction_write_set_extraction]" = "MURMUR32" +--source include/assert.inc +--let $assert_text= binlog_transaction_dependency_tracking should be COMMIT_ORDER +--let $assert_cond= "[SELECT @@GLOBAL.binlog_transaction_dependency_tracking]" = "COMMIT_ORDER" +--source include/assert.inc + +--echo # +--echo # Test 1.e: Try starting server with TWSE=MURMUR32 and BTDT=WRITESET. Expect SUCCESS. +--echo # +--let $restart_parameters="restart: --transaction_write_set_extraction=MURMUR32 --binlog_transaction_dependency_tracking=WRITESET" +--source include/restart_mysqld.inc +--source include/wait_until_connected_again.inc +--let $assert_text= transaction_write_set_extraction should be MURMUR32 +--let $assert_cond= "[SELECT @@GLOBAL.transaction_write_set_extraction]" = "MURMUR32" +--source include/assert.inc +--let $assert_text= binlog_transaction_dependency_tracking should be WRITESET +--let $assert_cond= "[SELECT @@GLOBAL.binlog_transaction_dependency_tracking]" = "WRITESET" +--source include/assert.inc + +--echo # +--echo # Test 1.f: Try starting server with TWSE=MURMUR32 and BTDT=WRITESET_SESSION. Expect SUCCESS. +--echo # +--let $restart_parameters="restart: --transaction_write_set_extraction=MURMUR32 --binlog_transaction_dependency_tracking=WRITESET_SESSION" +--source include/restart_mysqld.inc +--source include/wait_until_connected_again.inc +--let $assert_text= transaction_write_set_extraction should be MURMUR32 +--let $assert_cond= "[SELECT @@GLOBAL.transaction_write_set_extraction]" = "MURMUR32" +--source include/assert.inc +--let $assert_text= binlog_transaction_dependency_tracking should be WRITESET_SESSION +--let $assert_cond= "[SELECT @@GLOBAL.binlog_transaction_dependency_tracking]" = "WRITESET_SESSION" +--source include/assert.inc + +--echo # +--echo # Test 1.g: Try starting server with TWSE=XXHASH64 and BTDT=COMMIT_ORDER. Expect SUCCESS. +--echo # +--let $restart_parameters="restart: --transaction_write_set_extraction=XXHASH64 --binlog_transaction_dependency_tracking=COMMIT_ORDER" +--source include/restart_mysqld.inc +--source include/wait_until_connected_again.inc +--let $assert_text= transaction_write_set_extraction should be XXHASH64 +--let $assert_cond= "[SELECT @@GLOBAL.transaction_write_set_extraction]" = "XXHASH64" +--source include/assert.inc +--let $assert_text= binlog_transaction_dependency_tracking should be COMMIT_ORDER +--let $assert_cond= "[SELECT @@GLOBAL.binlog_transaction_dependency_tracking]" = "COMMIT_ORDER" +--source include/assert.inc + +--echo # +--echo # Test 1.h: Try starting server with TWSE=XXHASH64 and BTDT=WRITESET. Expect SUCCESS +--echo # +--let $restart_parameters="restart: --transaction_write_set_extraction=XXHASH64 --binlog_transaction_dependency_tracking=WRITESET" +--source include/restart_mysqld.inc +--source include/wait_until_connected_again.inc +--let $assert_text= transaction_write_set_extraction should be XXHASH64 +--let $assert_cond= "[SELECT @@GLOBAL.transaction_write_set_extraction]" = "XXHASH64" +--source include/assert.inc +--let $assert_text= binlog_transaction_dependency_tracking should be WRITESET +--let $assert_cond= "[SELECT @@GLOBAL.binlog_transaction_dependency_tracking]" = "WRITESET" +--source include/assert.inc + +--echo # +--echo # Test 1.i: Try starting server with TWSE=XXHASH64 and BTDT=WRITESET_SESSION. Expect SUCCESS. +--echo # +--let $restart_parameters="restart: --transaction_write_set_extraction=XXHASH64 --binlog_transaction_dependency_tracking=WRITESET_SESSION" +--source include/restart_mysqld.inc +--source include/wait_until_connected_again.inc +--let $assert_text= transaction_write_set_extraction should be XXHASH64 +--let $assert_cond= "[SELECT @@GLOBAL.transaction_write_set_extraction]" = "XXHASH64" +--source include/assert.inc +--let $assert_text= binlog_transaction_dependency_tracking should be WRITESET_SESSION +--let $assert_cond= "[SELECT @@GLOBAL.binlog_transaction_dependency_tracking]" = "WRITESET_SESSION" +--source include/assert.inc + +# Clean up +--let $restart_parameters= +--let $error_log= +--remove_file $MYSQLTEST_VARDIR/tmp/binlog_transaction_dependency_tracking.err +--eval SET GLOBAL binlog_transaction_dependency_tracking= $saved_binlog_transaction_dependency_tracking +--eval SET GLOBAL transaction_write_set_extraction= $saved_transaction_write_set_extraction diff --git a/mysql-test/suite/binlog/t/binlog_transaction_dependency_tracking_sensitive.test b/mysql-test/suite/binlog/t/binlog_transaction_dependency_tracking_sensitive.test new file mode 100644 index 000000000000..980227ae3a0c --- /dev/null +++ b/mysql-test/suite/binlog/t/binlog_transaction_dependency_tracking_sensitive.test @@ -0,0 +1,77 @@ +# ==== Purpose ==== +# +# Test timestamps generated by binlog-transaction-dependency-tracking +# mode WRITESET when inserting/deleting/updating a single row but using +# case and accent insensitive collations. +# +# As all transactions are touching a single row, the timestamps are +# expected to always increase (every transaction should depend on the +# previous one). +# +# ==== References ==== +# +# BUG#26277771: BAD WRITE SET TRACKING WITH UNIQUE KEY ON A DELETE FOLLOWED BY AN INSERT. +# +--source include/have_binlog_format_row.inc + +# +# Initialization +# +SET @save_binlog_transaction_dependency_tracking = @@GLOBAL.binlog_transaction_dependency_tracking; +SET @save_transaction_write_set_extraction = @@GLOBAL.transaction_write_set_extraction; + +SET @@GLOBAL.transaction_write_set_extraction = XXHASH64; +SET @@SESSION.transaction_write_set_extraction = XXHASH64; +SET @@GLOBAL.binlog_transaction_dependency_tracking = WRITESET; + +# +# Test +# + +# Workload +SET NAMES 'utf8' COLLATE 'utf8_general_ci'; + +RESET MASTER; + +CREATE TABLE t1 ( + id INT NOT NULL AUTO_INCREMENT, + u_id INT NOT NULL, + u_str VARCHAR(32) NOT NULL, + PRIMARY KEY (id), + UNIQUE KEY (u_id, u_str) +) ENGINE=InnoDB; + +INSERT INTO t1 (u_id, u_str) VALUES (1, 'a'); + +# Sanity check +--error ER_DUP_ENTRY +INSERT INTO t1 (u_id, u_str) VALUES (1, 'A'); +--error ER_DUP_ENTRY +INSERT INTO t1 (u_id, u_str) VALUES (1, 'ã'); +--error ER_DUP_ENTRY +INSERT INTO t1 (u_id, u_str) VALUES (1, 'Ã'); +--error ER_DUP_ENTRY +INSERT INTO t1 (u_id, u_str) VALUES (1, 'á'); + +# Test +DELETE FROM t1 WHERE u_id = 1 AND u_str = 'A'; +INSERT INTO t1 (u_id, u_str) VALUES (1, 'ã'); +DELETE FROM t1 WHERE u_id = 1 AND u_str = 'Ã'; +INSERT INTO t1 (u_id, u_str) VALUES (1, 'á'); + +DROP TABLE t1; + +--let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1) +--echo Processing binlog $binlog_file +FLUSH LOGS; + +--let $source_file= $server_1_datadir/$binlog_file +--let $logical_timestamps=0 1;1 2;2 3;3 4;4 5;5 6;6 7 +--source include/assert_logical_timestamps.inc + +# +# Cleanup +# +SET @@GLOBAL.binlog_transaction_dependency_tracking = COMMIT_ORDER; +SET @@GLOBAL.transaction_write_set_extraction= @save_transaction_write_set_extraction; +SET @@GLOBAL.binlog_transaction_dependency_tracking= @save_binlog_transaction_dependency_tracking; diff --git a/mysql-test/suite/perfschema/r/show_sanity.result b/mysql-test/suite/perfschema/r/show_sanity.result index fa2f2bfa3b9b..71bc92a2c2f3 100644 --- a/mysql-test/suite/perfschema/r/show_sanity.result +++ b/mysql-test/suite/perfschema/r/show_sanity.result @@ -407,6 +407,8 @@ where show_mode = "JUNK: GLOBAL-ONLY" and source = "I_S.SESSION_VARIABLES") order by show_mode, source, variable_name; SHOW_MODE SOURCE VARIABLE_NAME +5.6 I_S.SESSION_VARIABLES BINLOG_TRANSACTION_DEPENDENCY_HISTORY_SIZE +5.6 I_S.SESSION_VARIABLES BINLOG_TRANSACTION_DEPENDENCY_TRACKING 5.6 I_S.SESSION_VARIABLES GTID_EXECUTED 5.6 I_S.SESSION_VARIABLES INNODB_DEADLOCK_DETECT 5.6 I_S.SESSION_VARIABLES INNODB_STATS_INCLUDE_DELETE_MARKED @@ -433,6 +435,8 @@ where show_mode = "JUNK: GLOBAL-ONLY" and source = "I_S.SESSION_VARIABLES") order by show_mode, source, variable_name; SHOW_MODE SOURCE VARIABLE_NAME +5.6 I_S.SESSION_VARIABLES BINLOG_TRANSACTION_DEPENDENCY_HISTORY_SIZE +5.6 I_S.SESSION_VARIABLES BINLOG_TRANSACTION_DEPENDENCY_TRACKING 5.6 I_S.SESSION_VARIABLES GTID_EXECUTED 5.6 I_S.SESSION_VARIABLES INNODB_DEADLOCK_DETECT 5.6 I_S.SESSION_VARIABLES INNODB_STATS_INCLUDE_DELETE_MARKED diff --git a/mysql-test/suite/rpl/r/rpl_binlog_transaction_dependency_history_size.result b/mysql-test/suite/rpl/r/rpl_binlog_transaction_dependency_history_size.result new file mode 100644 index 000000000000..6fb3bafd01c5 --- /dev/null +++ b/mysql-test/suite/rpl/r/rpl_binlog_transaction_dependency_history_size.result @@ -0,0 +1,108 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] + +SET GLOBAL binlog_transaction_dependency_tracking = WRITESET; +######## 1. WRITESET ######## +SELECT @@local.transaction_write_set_extraction, +@@global.transaction_write_set_extraction, +@@binlog_transaction_dependency_tracking, +@@binlog_transaction_dependency_history_size; +@@local.transaction_write_set_extraction @@global.transaction_write_set_extraction @@binlog_transaction_dependency_tracking @@binlog_transaction_dependency_history_size +XXHASH64 XXHASH64 WRITESET 6 +CREATE TABLE test.tab1 (a INT PRIMARY KEY AUTO_INCREMENT NOT NULL); +CREATE TABLE test.tab2 (a INT); +FLUSH LOGS; +INSERT INTO tab1 VALUES (NULL); +INSERT INTO tab1 VALUES (NULL); +INSERT INTO tab1 VALUES (NULL); +INSERT INTO tab2 VALUES (1); +INSERT INTO tab1 VALUES (NULL); +INSERT INTO tab1 VALUES (NULL); +INSERT INTO tab1 VALUES (NULL), (NULL), (NULL); +INSERT INTO tab1 VALUES (NULL); +INSERT INTO tab1 VALUES (NULL); +BEGIN; +INSERT INTO tab1 VALUES (NULL); +INSERT INTO tab1 VALUES (NULL); +INSERT INTO tab1 VALUES (NULL); +INSERT INTO tab1 VALUES (NULL); +COMMIT; +# Drop table and flush logs to force binlog to rotate +DROP TABLE test.tab1, test.tab2; +FLUSH LOGS; +# Processing binlog... +include/include/assert_logical_timestamps.inc [0 1;1 2;1 3;3 4;1 5;5 6;5 7;7 8;7 9;7 10;7 11;11 12;9 13;13 14] +# Verify that replication is correct +include/sync_slave_sql_with_master.inc + +SET GLOBAL binlog_transaction_dependency_tracking = WRITESET_SESSION; +######## 2. WRITESET_SESSION ######## +SELECT @@local.transaction_write_set_extraction, +@@global.transaction_write_set_extraction, +@@binlog_transaction_dependency_tracking, +@@binlog_transaction_dependency_history_size; +@@local.transaction_write_set_extraction @@global.transaction_write_set_extraction @@binlog_transaction_dependency_tracking @@binlog_transaction_dependency_history_size +XXHASH64 XXHASH64 WRITESET_SESSION 6 +CREATE TABLE test.tab1 (a INT PRIMARY KEY AUTO_INCREMENT NOT NULL); +CREATE TABLE test.tab2 (a INT); +FLUSH LOGS; +INSERT INTO tab1 VALUES (NULL); +INSERT INTO tab1 VALUES (NULL); +INSERT INTO tab1 VALUES (NULL); +INSERT INTO tab2 VALUES (1); +INSERT INTO tab1 VALUES (NULL); +INSERT INTO tab1 VALUES (NULL); +INSERT INTO tab1 VALUES (NULL), (NULL), (NULL); +INSERT INTO tab1 VALUES (NULL); +INSERT INTO tab1 VALUES (NULL); +BEGIN; +INSERT INTO tab1 VALUES (NULL); +INSERT INTO tab1 VALUES (NULL); +INSERT INTO tab1 VALUES (NULL); +INSERT INTO tab1 VALUES (NULL); +COMMIT; +# Drop table and flush logs to force binlog to rotate +DROP TABLE test.tab1, test.tab2; +FLUSH LOGS; +# Processing binlog... +include/include/assert_logical_timestamps.inc [0 1;1 2;1 3;3 4;1 5;5 6;5 7;7 8;7 9;7 10;7 11;11 12;9 13;13 14] +# Verify that replication is correct +include/sync_slave_sql_with_master.inc + +SET GLOBAL binlog_transaction_dependency_tracking = COMMIT_ORDER; +######## 3. COMMIT_ORDER ######## +SELECT @@local.transaction_write_set_extraction, +@@global.transaction_write_set_extraction, +@@binlog_transaction_dependency_tracking, +@@binlog_transaction_dependency_history_size; +@@local.transaction_write_set_extraction @@global.transaction_write_set_extraction @@binlog_transaction_dependency_tracking @@binlog_transaction_dependency_history_size +XXHASH64 XXHASH64 COMMIT_ORDER 6 +CREATE TABLE test.tab1 (a INT PRIMARY KEY AUTO_INCREMENT NOT NULL); +CREATE TABLE test.tab2 (a INT); +FLUSH LOGS; +INSERT INTO tab1 VALUES (NULL); +INSERT INTO tab1 VALUES (NULL); +INSERT INTO tab1 VALUES (NULL); +INSERT INTO tab2 VALUES (1); +INSERT INTO tab1 VALUES (NULL); +INSERT INTO tab1 VALUES (NULL); +INSERT INTO tab1 VALUES (NULL), (NULL), (NULL); +INSERT INTO tab1 VALUES (NULL); +INSERT INTO tab1 VALUES (NULL); +BEGIN; +INSERT INTO tab1 VALUES (NULL); +INSERT INTO tab1 VALUES (NULL); +INSERT INTO tab1 VALUES (NULL); +INSERT INTO tab1 VALUES (NULL); +COMMIT; +# Drop table and flush logs to force binlog to rotate +DROP TABLE test.tab1, test.tab2; +FLUSH LOGS; +# Processing binlog... +include/include/assert_logical_timestamps.inc [0 1;1 2;2 3;3 4;4 5;5 6;6 7;7 8;8 9;9 10;10 11;11 12;9 13;13 14] +# Verify that replication is correct +include/sync_slave_sql_with_master.inc +include/rpl_end.inc diff --git a/mysql-test/suite/rpl/r/rpl_binlog_transaction_dependency_tracking.result b/mysql-test/suite/rpl/r/rpl_binlog_transaction_dependency_tracking.result new file mode 100644 index 000000000000..d489908a266c --- /dev/null +++ b/mysql-test/suite/rpl/r/rpl_binlog_transaction_dependency_tracking.result @@ -0,0 +1,810 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +#### INITIALIZE #### +call mtr.add_suppression("Transaction is tagged with inconsistent logical timestamps"); +call mtr.add_suppression("Cannot execute the current event group in the parallel mode."); +include/stop_slave.inc +SET @save_slave_parallel_type = @@GLOBAL.slave_parallel_type; +SET @save_slave_parallel_workers = @@GLOBAL.slave_parallel_workers; +SET @save_slave_transaction_retries = @@GLOBAL.slave_transaction_retries; +SET GLOBAL slave_parallel_type = LOGICAL_CLOCK; +SET GLOBAL slave_parallel_workers = 3; +SET GLOBAL slave_transaction_retries = 0; +SET @save_binlog_transaction_dependency_tracking = @@GLOBAL.binlog_transaction_dependency_tracking; +SET @save_binlog_transaction_dependency_history_size = @@GLOBAL.binlog_transaction_dependency_history_size; +SET @save_transaction_write_set_extraction = @@GLOBAL.transaction_write_set_extraction; +SET GLOBAL binlog_transaction_dependency_tracking = COMMIT_ORDER; +SET GLOBAL transaction_write_set_extraction = XXHASH64; +SET LOCAL transaction_write_set_extraction = XXHASH64; +SET LOCAL transaction_write_set_extraction = XXHASH64; +SET LOCAL transaction_write_set_extraction = XXHASH64; +CREATE TABLE tests (`id` INT NOT NULL, `description` VARCHAR(50), `results` VARCHAR(100), PRIMARY KEY(`id`)); +INSERT INTO `tests` (`id`, `description`, `results`) VALUES +(1, 'Writeset', '0 1;1 2;1 3;1 4;3 5;3 6;4 7;7 8;6 9;9 10'), +(2, 'Writeset+DDL', '0 1;1 2;1 3;1 4;4 5;5 6;6 7;7 8;4 9;7 10;10 11;9 12;12 13'), +(3, 'Writeset+rotation', '0 1;0 2;1 3;3 4;2 5;5 6'), +(4, 'Writeset+history', '0 1;1 2;1 3;1 4;4 5;4 6;4 7;7 8;7 9;9 10'), +(5, 'Writeset_session', '0 1;1 2;1 3;2 4;3 5;3 6;5 7;7 8;7 9;9 10'), +(6, 'Writeset_session+DDL', '0 1;1 2;1 3;2 4;4 5;5 6;6 7;7 8;4 9;8 10;10 11;10 12;12 13'), +(7, 'Writeset_session+rotation', '0 1;0 2;1 3;3 4;3 5;5 6'), +(8, 'Writeset_session+history', '0 1;1 2;1 3;2 4;4 5;4 6;5 7;7 8;7 9;9 10'), +(9, 'Commit_order', '0 1;1 2;1 3;3 4;4 5;4 6;6 7;7 8;7 9;9 10'), +(10, 'Commit_order+DDL', '0 1;1 2;1 3;3 4;4 5;5 6;6 7;7 8;4 9;9 10;10 11;10 12;12 13'), +(11, 'Commit_order+rotation', '0 1;0 2;2 3;3 4;3 5;5 6'), +(12, 'Commit_order+history', '0 1;1 2;1 3;3 4;4 5;4 6;6 7;7 8;7 9;9 10'); +FLUSH LOGS; +#### TEST #### +SET GLOBAL binlog_transaction_dependency_tracking = WRITESET; +######## 1. WRITESET ######## +#### STEP 1.1 TEST Writeset #### +SET GLOBAL binlog_transaction_dependency_history_size=25000; +SELECT @@local.transaction_write_set_extraction, +@@global.transaction_write_set_extraction, +@@binlog_transaction_dependency_tracking, +@@binlog_transaction_dependency_history_size; +@@local.transaction_write_set_extraction @@global.transaction_write_set_extraction @@binlog_transaction_dependency_tracking @@binlog_transaction_dependency_history_size +XXHASH64 XXHASH64 WRITESET 25000 +CREATE TABLE `t1` (`id` int(11) NOT NULL, `val` int(11) NOT NULL, +PRIMARY KEY (`id`)) ENGINE=InnoDB; +#TRX2 (session A, independent) +BEGIN; +INSERT INTO t1(id, val) VALUES (1, 0),(2, 0),(3, 0); +#TRX1 (session B, independent) +BEGIN; +INSERT INTO t1(id, val) VALUES (4, 0),(5, 0); +COMMIT; +finish TRX2 after TRX1 +COMMIT; +#TRX3 (session B, no data dependency, depends on TRX1 (session)) +BEGIN; +INSERT INTO t1(id, val) VALUES (6, 0),(7, 0); +COMMIT; +#TRX5 (session A, depends on TRX2 (session and data) and TRX1(data)) +BEGIN; +INSERT INTO t1(id, val) VALUES (8, 1); +UPDATE t1 SET val=val+1 WHERE id=1; +UPDATE t1 SET val=val+1 WHERE id=4; +#TRX4 (session C, depends on TRX2 (data)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=3; +INSERT INTO t1(id, val) VALUES (9, 1); +COMMIT; +finish TRX5 after TRX4 +COMMIT; +#TRX6 (session C, depends on TRX4 (session) and TRX3(data)) +BEGIN; +DELETE FROM t1 WHERE id=6; +COMMIT; +#TRX8 (session C, depends on TRX5 (data) and TRX6 (session)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=4; +#TRX7 (session B, depends on TRX1 and TRX6 (data) and TRX3 (session)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=5; +INSERT INTO t1(id, val) VALUES (6, 0); +COMMIT; +finish TRX8 after TRX7 +COMMIT; +Drop table and flush logs to force binlog to rotate +DROP TABLE t1; +Processing binlog master-bin.000002 +FLUSH LOGS; +include/include/assert_logical_timestamps.inc [0 1;1 2;1 3;1 4;3 5;3 6;4 7;7 8;6 9;9 10] +#### STEP 1.2 TEST Writeset+DDL #### +SET GLOBAL binlog_transaction_dependency_history_size=25000; +SELECT @@local.transaction_write_set_extraction, +@@global.transaction_write_set_extraction, +@@binlog_transaction_dependency_tracking, +@@binlog_transaction_dependency_history_size; +@@local.transaction_write_set_extraction @@global.transaction_write_set_extraction @@binlog_transaction_dependency_tracking @@binlog_transaction_dependency_history_size +XXHASH64 XXHASH64 WRITESET 25000 +CREATE TABLE `t1` (`id` int(11) NOT NULL, `val` int(11) NOT NULL, +PRIMARY KEY (`id`)) ENGINE=InnoDB; +#TRX2 (session A, independent) +BEGIN; +INSERT INTO t1(id, val) VALUES (1, 0),(2, 0),(3, 0); +#TRX1 (session B, independent) +BEGIN; +INSERT INTO t1(id, val) VALUES (4, 0),(5, 0); +COMMIT; +finish TRX2 after TRX1 +COMMIT; +#TRX3 (session B, no data dependency, depends on TRX1 (session)) +BEGIN; +INSERT INTO t1(id, val) VALUES (6, 0),(7, 0); +COMMIT; +#TRX5 (session A, depends on TRX2 (session and data) and TRX1(data)) +BEGIN; +INSERT INTO t1(id, val) VALUES (8, 1); +UPDATE t1 SET val=val+1 WHERE id=1; +UPDATE t1 SET val=val+1 WHERE id=4; +Inserted a DDL after TRX5 and check that they run in parallel due to commit_order +CREATE TABLE `t2` (`id` int(11) NOT NULL, `val` int(11) NOT NULL) ENGINE=InnoDB; +ALTER TABLE t2 ADD COLUMN b INT; +DROP TABLE `t2`; +#TRX4 (session C, depends on TRX2 (data)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=3; +INSERT INTO t1(id, val) VALUES (9, 1); +COMMIT; +finish TRX5 after TRX4 +COMMIT; +#TRX6 (session C, depends on TRX4 (session) and TRX3(data)) +BEGIN; +DELETE FROM t1 WHERE id=6; +COMMIT; +#TRX8 (session C, depends on TRX5 (data) and TRX6 (session)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=4; +#TRX7 (session B, depends on TRX1 and TRX6 (data) and TRX3 (session)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=5; +INSERT INTO t1(id, val) VALUES (6, 0); +COMMIT; +finish TRX8 after TRX7 +COMMIT; +Drop table and flush logs to force binlog to rotate +DROP TABLE t1; +Processing binlog master-bin.000003 +FLUSH LOGS; +include/include/assert_logical_timestamps.inc [0 1;1 2;1 3;1 4;4 5;5 6;6 7;7 8;4 9;7 10;10 11;9 12;12 13] +#### STEP 1.3 TEST Writeset+rotation #### +SET GLOBAL binlog_transaction_dependency_history_size=25000; +SELECT @@local.transaction_write_set_extraction, +@@global.transaction_write_set_extraction, +@@binlog_transaction_dependency_tracking, +@@binlog_transaction_dependency_history_size; +@@local.transaction_write_set_extraction @@global.transaction_write_set_extraction @@binlog_transaction_dependency_tracking @@binlog_transaction_dependency_history_size +XXHASH64 XXHASH64 WRITESET 25000 +CREATE TABLE `t1` (`id` int(11) NOT NULL, `val` int(11) NOT NULL, +PRIMARY KEY (`id`)) ENGINE=InnoDB; +#TRX2 (session A, independent) +BEGIN; +INSERT INTO t1(id, val) VALUES (1, 0),(2, 0),(3, 0); +#TRX1 (session B, independent) +BEGIN; +INSERT INTO t1(id, val) VALUES (4, 0),(5, 0); +COMMIT; +finish TRX2 after TRX1 +COMMIT; +#TRX3 (session B, no data dependency, depends on TRX1 (session)) +BEGIN; +INSERT INTO t1(id, val) VALUES (6, 0),(7, 0); +COMMIT; +#TRX5 (session A, depends on TRX2 (session and data) and TRX1(data)) +BEGIN; +INSERT INTO t1(id, val) VALUES (8, 1); +UPDATE t1 SET val=val+1 WHERE id=1; +UPDATE t1 SET val=val+1 WHERE id=4; +Flushing logs in the middle of the set +FLUSH LOGS; +#TRX4 (session C, depends on TRX2 (data)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=3; +INSERT INTO t1(id, val) VALUES (9, 1); +COMMIT; +finish TRX5 after TRX4 +COMMIT; +#TRX6 (session C, depends on TRX4 (session) and TRX3(data)) +BEGIN; +DELETE FROM t1 WHERE id=6; +COMMIT; +#TRX8 (session C, depends on TRX5 (data) and TRX6 (session)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=4; +#TRX7 (session B, depends on TRX1 and TRX6 (data) and TRX3 (session)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=5; +INSERT INTO t1(id, val) VALUES (6, 0); +COMMIT; +finish TRX8 after TRX7 +COMMIT; +Drop table and flush logs to force binlog to rotate +DROP TABLE t1; +Processing binlog master-bin.000005 +FLUSH LOGS; +include/include/assert_logical_timestamps.inc [0 1;0 2;1 3;3 4;2 5;5 6] +#### STEP 1.4 TEST Writeset+history #### +SET GLOBAL binlog_transaction_dependency_history_size=25000; +History size reduced to 10 to test when it becomes full +SET GLOBAL binlog_transaction_dependency_history_size=10; +SELECT @@local.transaction_write_set_extraction, +@@global.transaction_write_set_extraction, +@@binlog_transaction_dependency_tracking, +@@binlog_transaction_dependency_history_size; +@@local.transaction_write_set_extraction @@global.transaction_write_set_extraction @@binlog_transaction_dependency_tracking @@binlog_transaction_dependency_history_size +XXHASH64 XXHASH64 WRITESET 10 +CREATE TABLE `t1` (`id` int(11) NOT NULL, `val` int(11) NOT NULL, +PRIMARY KEY (`id`)) ENGINE=InnoDB; +#TRX2 (session A, independent) +BEGIN; +INSERT INTO t1(id, val) VALUES (1, 0),(2, 0),(3, 0); +#TRX1 (session B, independent) +BEGIN; +INSERT INTO t1(id, val) VALUES (4, 0),(5, 0); +COMMIT; +finish TRX2 after TRX1 +COMMIT; +#TRX3 (session B, no data dependency, depends on TRX1 (session)) +BEGIN; +INSERT INTO t1(id, val) VALUES (6, 0),(7, 0); +COMMIT; +#TRX5 (session A, depends on TRX2 (session and data) and TRX1(data)) +BEGIN; +INSERT INTO t1(id, val) VALUES (8, 1); +UPDATE t1 SET val=val+1 WHERE id=1; +UPDATE t1 SET val=val+1 WHERE id=4; +#TRX4 (session C, depends on TRX2 (data)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=3; +INSERT INTO t1(id, val) VALUES (9, 1); +COMMIT; +finish TRX5 after TRX4 +COMMIT; +#TRX6 (session C, depends on TRX4 (session) and TRX3(data)) +BEGIN; +DELETE FROM t1 WHERE id=6; +COMMIT; +#TRX8 (session C, depends on TRX5 (data) and TRX6 (session)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=4; +#TRX7 (session B, depends on TRX1 and TRX6 (data) and TRX3 (session)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=5; +INSERT INTO t1(id, val) VALUES (6, 0); +COMMIT; +finish TRX8 after TRX7 +COMMIT; +Drop table and flush logs to force binlog to rotate +DROP TABLE t1; +Processing binlog master-bin.000006 +FLUSH LOGS; +include/include/assert_logical_timestamps.inc [0 1;1 2;1 3;1 4;4 5;4 6;4 7;7 8;7 9;9 10] +SET GLOBAL binlog_transaction_dependency_tracking = WRITESET_SESSION; +######## 2. WRITESET_SESSION ######## +#### STEP 2.1 TEST Writeset_session #### +SET GLOBAL binlog_transaction_dependency_history_size=25000; +SELECT @@local.transaction_write_set_extraction, +@@global.transaction_write_set_extraction, +@@binlog_transaction_dependency_tracking, +@@binlog_transaction_dependency_history_size; +@@local.transaction_write_set_extraction @@global.transaction_write_set_extraction @@binlog_transaction_dependency_tracking @@binlog_transaction_dependency_history_size +XXHASH64 XXHASH64 WRITESET_SESSION 25000 +CREATE TABLE `t1` (`id` int(11) NOT NULL, `val` int(11) NOT NULL, +PRIMARY KEY (`id`)) ENGINE=InnoDB; +#TRX2 (session A, independent) +BEGIN; +INSERT INTO t1(id, val) VALUES (1, 0),(2, 0),(3, 0); +#TRX1 (session B, independent) +BEGIN; +INSERT INTO t1(id, val) VALUES (4, 0),(5, 0); +COMMIT; +finish TRX2 after TRX1 +COMMIT; +#TRX3 (session B, no data dependency, depends on TRX1 (session)) +BEGIN; +INSERT INTO t1(id, val) VALUES (6, 0),(7, 0); +COMMIT; +#TRX5 (session A, depends on TRX2 (session and data) and TRX1(data)) +BEGIN; +INSERT INTO t1(id, val) VALUES (8, 1); +UPDATE t1 SET val=val+1 WHERE id=1; +UPDATE t1 SET val=val+1 WHERE id=4; +#TRX4 (session C, depends on TRX2 (data)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=3; +INSERT INTO t1(id, val) VALUES (9, 1); +COMMIT; +finish TRX5 after TRX4 +COMMIT; +#TRX6 (session C, depends on TRX4 (session) and TRX3(data)) +BEGIN; +DELETE FROM t1 WHERE id=6; +COMMIT; +#TRX8 (session C, depends on TRX5 (data) and TRX6 (session)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=4; +#TRX7 (session B, depends on TRX1 and TRX6 (data) and TRX3 (session)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=5; +INSERT INTO t1(id, val) VALUES (6, 0); +COMMIT; +finish TRX8 after TRX7 +COMMIT; +Drop table and flush logs to force binlog to rotate +DROP TABLE t1; +Processing binlog master-bin.000007 +FLUSH LOGS; +include/include/assert_logical_timestamps.inc [0 1;1 2;1 3;2 4;3 5;3 6;5 7;7 8;7 9;9 10] +#### STEP 2.2 TEST Writeset_session+DDL #### +SET GLOBAL binlog_transaction_dependency_history_size=25000; +SELECT @@local.transaction_write_set_extraction, +@@global.transaction_write_set_extraction, +@@binlog_transaction_dependency_tracking, +@@binlog_transaction_dependency_history_size; +@@local.transaction_write_set_extraction @@global.transaction_write_set_extraction @@binlog_transaction_dependency_tracking @@binlog_transaction_dependency_history_size +XXHASH64 XXHASH64 WRITESET_SESSION 25000 +CREATE TABLE `t1` (`id` int(11) NOT NULL, `val` int(11) NOT NULL, +PRIMARY KEY (`id`)) ENGINE=InnoDB; +#TRX2 (session A, independent) +BEGIN; +INSERT INTO t1(id, val) VALUES (1, 0),(2, 0),(3, 0); +#TRX1 (session B, independent) +BEGIN; +INSERT INTO t1(id, val) VALUES (4, 0),(5, 0); +COMMIT; +finish TRX2 after TRX1 +COMMIT; +#TRX3 (session B, no data dependency, depends on TRX1 (session)) +BEGIN; +INSERT INTO t1(id, val) VALUES (6, 0),(7, 0); +COMMIT; +#TRX5 (session A, depends on TRX2 (session and data) and TRX1(data)) +BEGIN; +INSERT INTO t1(id, val) VALUES (8, 1); +UPDATE t1 SET val=val+1 WHERE id=1; +UPDATE t1 SET val=val+1 WHERE id=4; +Inserted a DDL after TRX5 and check that they run in parallel due to commit_order +CREATE TABLE `t2` (`id` int(11) NOT NULL, `val` int(11) NOT NULL) ENGINE=InnoDB; +ALTER TABLE t2 ADD COLUMN b INT; +DROP TABLE `t2`; +#TRX4 (session C, depends on TRX2 (data)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=3; +INSERT INTO t1(id, val) VALUES (9, 1); +COMMIT; +finish TRX5 after TRX4 +COMMIT; +#TRX6 (session C, depends on TRX4 (session) and TRX3(data)) +BEGIN; +DELETE FROM t1 WHERE id=6; +COMMIT; +#TRX8 (session C, depends on TRX5 (data) and TRX6 (session)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=4; +#TRX7 (session B, depends on TRX1 and TRX6 (data) and TRX3 (session)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=5; +INSERT INTO t1(id, val) VALUES (6, 0); +COMMIT; +finish TRX8 after TRX7 +COMMIT; +Drop table and flush logs to force binlog to rotate +DROP TABLE t1; +Processing binlog master-bin.000008 +FLUSH LOGS; +include/include/assert_logical_timestamps.inc [0 1;1 2;1 3;2 4;4 5;5 6;6 7;7 8;4 9;8 10;10 11;10 12;12 13] +#### STEP 2.3 TEST Writeset_session+rotation #### +SET GLOBAL binlog_transaction_dependency_history_size=25000; +SELECT @@local.transaction_write_set_extraction, +@@global.transaction_write_set_extraction, +@@binlog_transaction_dependency_tracking, +@@binlog_transaction_dependency_history_size; +@@local.transaction_write_set_extraction @@global.transaction_write_set_extraction @@binlog_transaction_dependency_tracking @@binlog_transaction_dependency_history_size +XXHASH64 XXHASH64 WRITESET_SESSION 25000 +CREATE TABLE `t1` (`id` int(11) NOT NULL, `val` int(11) NOT NULL, +PRIMARY KEY (`id`)) ENGINE=InnoDB; +#TRX2 (session A, independent) +BEGIN; +INSERT INTO t1(id, val) VALUES (1, 0),(2, 0),(3, 0); +#TRX1 (session B, independent) +BEGIN; +INSERT INTO t1(id, val) VALUES (4, 0),(5, 0); +COMMIT; +finish TRX2 after TRX1 +COMMIT; +#TRX3 (session B, no data dependency, depends on TRX1 (session)) +BEGIN; +INSERT INTO t1(id, val) VALUES (6, 0),(7, 0); +COMMIT; +#TRX5 (session A, depends on TRX2 (session and data) and TRX1(data)) +BEGIN; +INSERT INTO t1(id, val) VALUES (8, 1); +UPDATE t1 SET val=val+1 WHERE id=1; +UPDATE t1 SET val=val+1 WHERE id=4; +Flushing logs in the middle of the set +FLUSH LOGS; +#TRX4 (session C, depends on TRX2 (data)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=3; +INSERT INTO t1(id, val) VALUES (9, 1); +COMMIT; +finish TRX5 after TRX4 +COMMIT; +#TRX6 (session C, depends on TRX4 (session) and TRX3(data)) +BEGIN; +DELETE FROM t1 WHERE id=6; +COMMIT; +#TRX8 (session C, depends on TRX5 (data) and TRX6 (session)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=4; +#TRX7 (session B, depends on TRX1 and TRX6 (data) and TRX3 (session)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=5; +INSERT INTO t1(id, val) VALUES (6, 0); +COMMIT; +finish TRX8 after TRX7 +COMMIT; +Drop table and flush logs to force binlog to rotate +DROP TABLE t1; +Processing binlog master-bin.000010 +FLUSH LOGS; +include/include/assert_logical_timestamps.inc [0 1;0 2;1 3;3 4;3 5;5 6] +#### STEP 2.4 TEST Writeset_session+history #### +SET GLOBAL binlog_transaction_dependency_history_size=25000; +History size reduced to 10 to test when it becomes full +SET GLOBAL binlog_transaction_dependency_history_size=10; +SELECT @@local.transaction_write_set_extraction, +@@global.transaction_write_set_extraction, +@@binlog_transaction_dependency_tracking, +@@binlog_transaction_dependency_history_size; +@@local.transaction_write_set_extraction @@global.transaction_write_set_extraction @@binlog_transaction_dependency_tracking @@binlog_transaction_dependency_history_size +XXHASH64 XXHASH64 WRITESET_SESSION 10 +CREATE TABLE `t1` (`id` int(11) NOT NULL, `val` int(11) NOT NULL, +PRIMARY KEY (`id`)) ENGINE=InnoDB; +#TRX2 (session A, independent) +BEGIN; +INSERT INTO t1(id, val) VALUES (1, 0),(2, 0),(3, 0); +#TRX1 (session B, independent) +BEGIN; +INSERT INTO t1(id, val) VALUES (4, 0),(5, 0); +COMMIT; +finish TRX2 after TRX1 +COMMIT; +#TRX3 (session B, no data dependency, depends on TRX1 (session)) +BEGIN; +INSERT INTO t1(id, val) VALUES (6, 0),(7, 0); +COMMIT; +#TRX5 (session A, depends on TRX2 (session and data) and TRX1(data)) +BEGIN; +INSERT INTO t1(id, val) VALUES (8, 1); +UPDATE t1 SET val=val+1 WHERE id=1; +UPDATE t1 SET val=val+1 WHERE id=4; +#TRX4 (session C, depends on TRX2 (data)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=3; +INSERT INTO t1(id, val) VALUES (9, 1); +COMMIT; +finish TRX5 after TRX4 +COMMIT; +#TRX6 (session C, depends on TRX4 (session) and TRX3(data)) +BEGIN; +DELETE FROM t1 WHERE id=6; +COMMIT; +#TRX8 (session C, depends on TRX5 (data) and TRX6 (session)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=4; +#TRX7 (session B, depends on TRX1 and TRX6 (data) and TRX3 (session)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=5; +INSERT INTO t1(id, val) VALUES (6, 0); +COMMIT; +finish TRX8 after TRX7 +COMMIT; +Drop table and flush logs to force binlog to rotate +DROP TABLE t1; +Processing binlog master-bin.000011 +FLUSH LOGS; +include/include/assert_logical_timestamps.inc [0 1;1 2;1 3;2 4;4 5;4 6;5 7;7 8;7 9;9 10] +SET GLOBAL binlog_transaction_dependency_tracking = COMMIT_ORDER; +######## 3. COMMIT_ORDER ######## +#### STEP 3.1 TEST Commit_order #### +SET GLOBAL binlog_transaction_dependency_history_size=25000; +SELECT @@local.transaction_write_set_extraction, +@@global.transaction_write_set_extraction, +@@binlog_transaction_dependency_tracking, +@@binlog_transaction_dependency_history_size; +@@local.transaction_write_set_extraction @@global.transaction_write_set_extraction @@binlog_transaction_dependency_tracking @@binlog_transaction_dependency_history_size +XXHASH64 XXHASH64 COMMIT_ORDER 25000 +CREATE TABLE `t1` (`id` int(11) NOT NULL, `val` int(11) NOT NULL, +PRIMARY KEY (`id`)) ENGINE=InnoDB; +#TRX2 (session A, independent) +BEGIN; +INSERT INTO t1(id, val) VALUES (1, 0),(2, 0),(3, 0); +#TRX1 (session B, independent) +BEGIN; +INSERT INTO t1(id, val) VALUES (4, 0),(5, 0); +COMMIT; +finish TRX2 after TRX1 +COMMIT; +#TRX3 (session B, no data dependency, depends on TRX1 (session)) +BEGIN; +INSERT INTO t1(id, val) VALUES (6, 0),(7, 0); +COMMIT; +#TRX5 (session A, depends on TRX2 (session and data) and TRX1(data)) +BEGIN; +INSERT INTO t1(id, val) VALUES (8, 1); +UPDATE t1 SET val=val+1 WHERE id=1; +UPDATE t1 SET val=val+1 WHERE id=4; +#TRX4 (session C, depends on TRX2 (data)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=3; +INSERT INTO t1(id, val) VALUES (9, 1); +COMMIT; +finish TRX5 after TRX4 +COMMIT; +#TRX6 (session C, depends on TRX4 (session) and TRX3(data)) +BEGIN; +DELETE FROM t1 WHERE id=6; +COMMIT; +#TRX8 (session C, depends on TRX5 (data) and TRX6 (session)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=4; +#TRX7 (session B, depends on TRX1 and TRX6 (data) and TRX3 (session)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=5; +INSERT INTO t1(id, val) VALUES (6, 0); +COMMIT; +finish TRX8 after TRX7 +COMMIT; +Drop table and flush logs to force binlog to rotate +DROP TABLE t1; +Processing binlog master-bin.000012 +FLUSH LOGS; +include/include/assert_logical_timestamps.inc [0 1;1 2;1 3;3 4;4 5;4 6;6 7;7 8;7 9;9 10] +#### STEP 3.2 TEST Commit_order+DDL #### +SET GLOBAL binlog_transaction_dependency_history_size=25000; +SELECT @@local.transaction_write_set_extraction, +@@global.transaction_write_set_extraction, +@@binlog_transaction_dependency_tracking, +@@binlog_transaction_dependency_history_size; +@@local.transaction_write_set_extraction @@global.transaction_write_set_extraction @@binlog_transaction_dependency_tracking @@binlog_transaction_dependency_history_size +XXHASH64 XXHASH64 COMMIT_ORDER 25000 +CREATE TABLE `t1` (`id` int(11) NOT NULL, `val` int(11) NOT NULL, +PRIMARY KEY (`id`)) ENGINE=InnoDB; +#TRX2 (session A, independent) +BEGIN; +INSERT INTO t1(id, val) VALUES (1, 0),(2, 0),(3, 0); +#TRX1 (session B, independent) +BEGIN; +INSERT INTO t1(id, val) VALUES (4, 0),(5, 0); +COMMIT; +finish TRX2 after TRX1 +COMMIT; +#TRX3 (session B, no data dependency, depends on TRX1 (session)) +BEGIN; +INSERT INTO t1(id, val) VALUES (6, 0),(7, 0); +COMMIT; +#TRX5 (session A, depends on TRX2 (session and data) and TRX1(data)) +BEGIN; +INSERT INTO t1(id, val) VALUES (8, 1); +UPDATE t1 SET val=val+1 WHERE id=1; +UPDATE t1 SET val=val+1 WHERE id=4; +Inserted a DDL after TRX5 and check that they run in parallel due to commit_order +CREATE TABLE `t2` (`id` int(11) NOT NULL, `val` int(11) NOT NULL) ENGINE=InnoDB; +ALTER TABLE t2 ADD COLUMN b INT; +DROP TABLE `t2`; +#TRX4 (session C, depends on TRX2 (data)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=3; +INSERT INTO t1(id, val) VALUES (9, 1); +COMMIT; +finish TRX5 after TRX4 +COMMIT; +#TRX6 (session C, depends on TRX4 (session) and TRX3(data)) +BEGIN; +DELETE FROM t1 WHERE id=6; +COMMIT; +#TRX8 (session C, depends on TRX5 (data) and TRX6 (session)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=4; +#TRX7 (session B, depends on TRX1 and TRX6 (data) and TRX3 (session)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=5; +INSERT INTO t1(id, val) VALUES (6, 0); +COMMIT; +finish TRX8 after TRX7 +COMMIT; +Drop table and flush logs to force binlog to rotate +DROP TABLE t1; +Processing binlog master-bin.000013 +FLUSH LOGS; +include/include/assert_logical_timestamps.inc [0 1;1 2;1 3;3 4;4 5;5 6;6 7;7 8;4 9;9 10;10 11;10 12;12 13] +#### STEP 3.3 TEST Commit_order+rotation #### +SET GLOBAL binlog_transaction_dependency_history_size=25000; +SELECT @@local.transaction_write_set_extraction, +@@global.transaction_write_set_extraction, +@@binlog_transaction_dependency_tracking, +@@binlog_transaction_dependency_history_size; +@@local.transaction_write_set_extraction @@global.transaction_write_set_extraction @@binlog_transaction_dependency_tracking @@binlog_transaction_dependency_history_size +XXHASH64 XXHASH64 COMMIT_ORDER 25000 +CREATE TABLE `t1` (`id` int(11) NOT NULL, `val` int(11) NOT NULL, +PRIMARY KEY (`id`)) ENGINE=InnoDB; +#TRX2 (session A, independent) +BEGIN; +INSERT INTO t1(id, val) VALUES (1, 0),(2, 0),(3, 0); +#TRX1 (session B, independent) +BEGIN; +INSERT INTO t1(id, val) VALUES (4, 0),(5, 0); +COMMIT; +finish TRX2 after TRX1 +COMMIT; +#TRX3 (session B, no data dependency, depends on TRX1 (session)) +BEGIN; +INSERT INTO t1(id, val) VALUES (6, 0),(7, 0); +COMMIT; +#TRX5 (session A, depends on TRX2 (session and data) and TRX1(data)) +BEGIN; +INSERT INTO t1(id, val) VALUES (8, 1); +UPDATE t1 SET val=val+1 WHERE id=1; +UPDATE t1 SET val=val+1 WHERE id=4; +Flushing logs in the middle of the set +FLUSH LOGS; +#TRX4 (session C, depends on TRX2 (data)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=3; +INSERT INTO t1(id, val) VALUES (9, 1); +COMMIT; +finish TRX5 after TRX4 +COMMIT; +#TRX6 (session C, depends on TRX4 (session) and TRX3(data)) +BEGIN; +DELETE FROM t1 WHERE id=6; +COMMIT; +#TRX8 (session C, depends on TRX5 (data) and TRX6 (session)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=4; +#TRX7 (session B, depends on TRX1 and TRX6 (data) and TRX3 (session)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=5; +INSERT INTO t1(id, val) VALUES (6, 0); +COMMIT; +finish TRX8 after TRX7 +COMMIT; +Drop table and flush logs to force binlog to rotate +DROP TABLE t1; +Processing binlog master-bin.000015 +FLUSH LOGS; +include/include/assert_logical_timestamps.inc [0 1;0 2;2 3;3 4;3 5;5 6] +#### STEP 3.4 TEST Commit_order+history #### +SET GLOBAL binlog_transaction_dependency_history_size=25000; +History size reduced to 10 to test when it becomes full +SET GLOBAL binlog_transaction_dependency_history_size=10; +SELECT @@local.transaction_write_set_extraction, +@@global.transaction_write_set_extraction, +@@binlog_transaction_dependency_tracking, +@@binlog_transaction_dependency_history_size; +@@local.transaction_write_set_extraction @@global.transaction_write_set_extraction @@binlog_transaction_dependency_tracking @@binlog_transaction_dependency_history_size +XXHASH64 XXHASH64 COMMIT_ORDER 10 +CREATE TABLE `t1` (`id` int(11) NOT NULL, `val` int(11) NOT NULL, +PRIMARY KEY (`id`)) ENGINE=InnoDB; +#TRX2 (session A, independent) +BEGIN; +INSERT INTO t1(id, val) VALUES (1, 0),(2, 0),(3, 0); +#TRX1 (session B, independent) +BEGIN; +INSERT INTO t1(id, val) VALUES (4, 0),(5, 0); +COMMIT; +finish TRX2 after TRX1 +COMMIT; +#TRX3 (session B, no data dependency, depends on TRX1 (session)) +BEGIN; +INSERT INTO t1(id, val) VALUES (6, 0),(7, 0); +COMMIT; +#TRX5 (session A, depends on TRX2 (session and data) and TRX1(data)) +BEGIN; +INSERT INTO t1(id, val) VALUES (8, 1); +UPDATE t1 SET val=val+1 WHERE id=1; +UPDATE t1 SET val=val+1 WHERE id=4; +#TRX4 (session C, depends on TRX2 (data)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=3; +INSERT INTO t1(id, val) VALUES (9, 1); +COMMIT; +finish TRX5 after TRX4 +COMMIT; +#TRX6 (session C, depends on TRX4 (session) and TRX3(data)) +BEGIN; +DELETE FROM t1 WHERE id=6; +COMMIT; +#TRX8 (session C, depends on TRX5 (data) and TRX6 (session)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=4; +#TRX7 (session B, depends on TRX1 and TRX6 (data) and TRX3 (session)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=5; +INSERT INTO t1(id, val) VALUES (6, 0); +COMMIT; +finish TRX8 after TRX7 +COMMIT; +Drop table and flush logs to force binlog to rotate +DROP TABLE t1; +Processing binlog master-bin.000016 +FLUSH LOGS; +include/include/assert_logical_timestamps.inc [0 1;1 2;1 3;3 4;4 5;4 6;6 7;7 8;7 9;9 10] + +#### Verify that replication was correct #### +include/start_slave.inc +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:test.tests, slave:test.tests] +DROP TABLE `tests`; +include/sync_slave_sql_with_master.inc +SET GLOBAL binlog_transaction_dependency_tracking= WRITESET; +SET GLOBAL binlog_transaction_dependency_history_size= DEFAULT; +FLUSH LOGS; + +#### Bug#25616372, PART1 #### +CREATE TABLE t1 (a INT PRIMARY KEY NOT NULL AUTO_INCREMENT); +INSERT INTO t1 VALUES (null); +INSERT INTO t1 VALUES (null); +set global binlog_transaction_dependency_tracking=WRITESET; +INSERT INTO t1 VALUES (null); +INSERT INTO t1 VALUES (null); +Processing binlog master-bin.000018 +include/include/assert_logical_timestamps.inc [0 1;1 2;1 3;3 4;3 5] +FLUSH LOGS; + +#### Bug#25616372, PART2 #### +INSERT INTO t1 VALUES (null); +INSERT INTO t1 VALUES (null); +set global binlog_transaction_dependency_tracking=WRITESET; +INSERT INTO t1 VALUES (null); +INSERT INTO t1 VALUES (null); +INSERT INTO t1 VALUES (null); +Processing binlog master-bin.000019 +include/include/assert_logical_timestamps.inc [0 1;1 2;2 3;2 4;2 5] +DROP TABLE t1; +FLUSH LOGS; + +#### Test ROLLBACK TO SAVEPOINT #### +CREATE TABLE t1 (a INT PRIMARY KEY); +CREATE TABLE nopk (a INT); +CREATE TABLE parent (a INT PRIMARY KEY); +CREATE TABLE child (a INT PRIMARY KEY, FOREIGN KEY (a) REFERENCES parent(a)); +# 1. Hashes of rolled-back rows are removed from writeset +FLUSH LOGS; +INSERT INTO t1 VALUES (1); +BEGIN; +SAVEPOINT sp; +UPDATE t1 SET a = 2; +ROLLBACK TO sp; +INSERT INTO t1 VALUES (2); +COMMIT; +INSERT INTO t1 VALUES (3); +Processing binlog master-bin.000021 +include/include/assert_logical_timestamps.inc [0 1;1 2;1 3] +# 2. If transaction is flagged as updating a non-index table, the flag is not rolled-back +FLUSH LOGS; +INSERT INTO t1 VALUES (4); +BEGIN; +SAVEPOINT sp; +INSERT INTO nopk VALUES (1); +ROLLBACK TO sp; +INSERT INTO t1 VALUES (5); +COMMIT; +INSERT INTO t1 VALUES (6); +Processing binlog master-bin.000022 +include/include/assert_logical_timestamps.inc [0 1;1 2;1 3] +# 3. If transaction is flagged as updating a foreign key parent table, the flag is not rolled-back +FLUSH LOGS; +INSERT INTO t1 VALUES (7); +BEGIN; +SAVEPOINT sp; +INSERT INTO parent VALUES (1); +ROLLBACK TO sp; +INSERT INTO t1 VALUES (8); +COMMIT; +INSERT INTO t1 VALUES (9); +Processing binlog master-bin.000023 +include/include/assert_logical_timestamps.inc [0 1;1 2;2 3] +# Clean up SAVEPOINT tests +DROP TABLE t1; +DROP TABLE nopk; +DROP TABLE child; +DROP TABLE parent; + +#### CLEANUP #### +include/sync_slave_sql_with_master.inc +include/stop_slave.inc +SET @@GLOBAL.slave_parallel_type= @save_slave_parallel_type; +SET @@GLOBAL.slave_parallel_workers= @save_slave_parallel_workers; +SET @@GLOBAL.slave_transaction_retries= @save_slave_transaction_retries; +include/start_slave.inc +SET GLOBAL binlog_transaction_dependency_tracking = COMMIT_ORDER; +SET @@GLOBAL.transaction_write_set_extraction= @save_transaction_write_set_extraction; +SET @@GLOBAL.binlog_transaction_dependency_tracking= @save_binlog_transaction_dependency_tracking; +SET @@GLOBAL.binlog_transaction_dependency_history_size= @save_binlog_transaction_dependency_history_size; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl/r/rpl_binlog_transaction_dependency_tracking_with_empty_trxs.result b/mysql-test/suite/rpl/r/rpl_binlog_transaction_dependency_tracking_with_empty_trxs.result new file mode 100644 index 000000000000..a3ccab4077bd --- /dev/null +++ b/mysql-test/suite/rpl/r/rpl_binlog_transaction_dependency_tracking_with_empty_trxs.result @@ -0,0 +1,38 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +[connection slave] +RESET MASTER; +CHANGE REPLICATION FILTER REPLICATE_IGNORE_TABLE= (test.t1); +SET @save_binlog_transaction_dependency_tracking= @@GLOBAL.binlog_transaction_dependency_tracking; +SET @save_transaction_write_set_extraction= @@GLOBAL.transaction_write_set_extraction; +SET GLOBAL binlog_transaction_dependency_tracking= COMMIT_ORDER; +SET GLOBAL transaction_write_set_extraction= XXHASH64; +SET LOCAL transaction_write_set_extraction= XXHASH64; +SET GLOBAL binlog_transaction_dependency_tracking= WRITESET; +include/start_slave.inc +[connection master] +CREATE TABLE t1 (c1 INT); +INSERT INTO t1 VALUES (1); +INSERT INTO t1 VALUES (2); +INSERT INTO t1 VALUES (3); +include/sync_slave_sql_with_master.inc +# +# Verify that the value of last_committed is not increased, +# since writeset history is not cleared when applying +# these empty transactions on slave. +# +Processing binlog slave-bin.000001 +include/include/assert_logical_timestamps.inc [0 1;0 2;0 3;0 4] +[connection master] +DROP TABLE t1; +include/sync_slave_sql_with_master.inc +include/stop_slave_sql.inc +SET GLOBAL binlog_transaction_dependency_tracking= COMMIT_ORDER; +SET @@GLOBAL.transaction_write_set_extraction= @save_transaction_write_set_extraction; +SET @@GLOBAL.binlog_transaction_dependency_tracking= @save_binlog_transaction_dependency_tracking; +CHANGE REPLICATION FILTER REPLICATE_IGNORE_TABLE= (); +include/start_slave_sql.inc +include/rpl_end.inc diff --git a/mysql-test/suite/rpl/r/rpl_binlog_transaction_dependency_tracking_with_filters.result b/mysql-test/suite/rpl/r/rpl_binlog_transaction_dependency_tracking_with_filters.result new file mode 100644 index 000000000000..085ede182c77 --- /dev/null +++ b/mysql-test/suite/rpl/r/rpl_binlog_transaction_dependency_tracking_with_filters.result @@ -0,0 +1,109 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +[connection master] +SET @save_binlog_transaction_dependency_tracking = @@GLOBAL.binlog_transaction_dependency_tracking; +SET @save_transaction_write_set_extraction = @@GLOBAL.transaction_write_set_extraction; +SET GLOBAL binlog_transaction_dependency_tracking = COMMIT_ORDER; +SET GLOBAL transaction_write_set_extraction = XXHASH64; +SET LOCAL transaction_write_set_extraction = XXHASH64; +[connection slave] +include/stop_slave.inc +CHANGE REPLICATION FILTER REPLICATE_REWRITE_DB=((db1,db2)), +REPLICATE_IGNORE_DB=(nodb); +include/start_slave.inc +SET @save_binlog_transaction_dependency_tracking = @@GLOBAL.binlog_transaction_dependency_tracking; +SET @save_transaction_write_set_extraction = @@GLOBAL.transaction_write_set_extraction; +SET GLOBAL binlog_transaction_dependency_tracking = COMMIT_ORDER; +SET GLOBAL transaction_write_set_extraction = XXHASH64; +SET LOCAL transaction_write_set_extraction = XXHASH64; +[connection master] +# +# 1. Add transactions with different dependency tracking and empty transaction +# on master. +# +CREATE DATABASE nodb; +CREATE DATABASE db1; +CREATE DATABASE db2; +USE nodb; +CREATE TABLE nodbt1 (a INT PRIMARY KEY NOT NULL AUTO_INCREMENT); +USE db1; +CREATE TABLE db1t1 (a INT PRIMARY KEY NOT NULL AUTO_INCREMENT); +USE test; +CREATE TABLE t1 (a INT PRIMARY KEY NOT NULL AUTO_INCREMENT); +USE db1; +INSERT INTO db1t1 VALUES (NULL); +INSERT INTO db1t1 VALUES (NULL); +SET GLOBAL binlog_transaction_dependency_tracking= WRITESET_SESSION; +INSERT INTO db1t1 VALUES (NULL); +INSERT INTO db1t1 VALUES (NULL); +USE nodb; +INSERT INTO nodbt1 VALUES (NULL); +INSERT INTO nodbt1 VALUES (NULL); +SET GLOBAL binlog_transaction_dependency_tracking= WRITESET; +INSERT INTO nodbt1 VALUES (NULL); +INSERT INTO nodbt1 VALUES (NULL); +USE test; +INSERT INTO t1 VALUES (NULL); +INSERT INTO t1 VALUES (NULL); +SET GLOBAL binlog_transaction_dependency_tracking= COMMIT_ORDER; +INSERT INTO t1 VALUES (NULL); +INSERT INTO t1 VALUES (NULL); +DROP DATABASE nodb; +DROP DATABASE db1; +DROP DATABASE db2; +DROP TABLE test.t1; +SELECT @@global.transaction_write_set_extraction, @@binlog_transaction_dependency_tracking; +@@global.transaction_write_set_extraction @@binlog_transaction_dependency_tracking +XXHASH64 COMMIT_ORDER +include/include/assert_logical_timestamps.inc +# +# 2. Test timestamps order with filtered and non-filtered transactions on Slave. +# +include/sync_slave_sql_with_master.inc +[On Slave] +######## 2.1. COMMIT_ORDER with SLAVE ######## +SELECT @@global.transaction_write_set_extraction, @@binlog_transaction_dependency_tracking; +@@global.transaction_write_set_extraction @@binlog_transaction_dependency_tracking +XXHASH64 COMMIT_ORDER +include/include/assert_logical_timestamps.inc +include/stop_slave.inc +RESET SLAVE; +RESET MASTER; + +######## 2.2. WRITESET with SLAVE ######## +SET GLOBAL binlog_transaction_dependency_tracking = WRITESET; +include/start_slave.inc +include/sync_slave_sql_with_master.inc +SELECT @@global.transaction_write_set_extraction, @@binlog_transaction_dependency_tracking; +@@global.transaction_write_set_extraction @@binlog_transaction_dependency_tracking +XXHASH64 WRITESET +include/include/assert_logical_timestamps.inc +include/stop_slave.inc +RESET SLAVE; +RESET MASTER; + +######## 2.3. WRITESET_SESSION with SLAVE ######## +SET GLOBAL binlog_transaction_dependency_tracking = WRITESET_SESSION; +include/start_slave.inc +include/sync_slave_sql_with_master.inc +SELECT @@global.transaction_write_set_extraction, @@binlog_transaction_dependency_tracking; +@@global.transaction_write_set_extraction @@binlog_transaction_dependency_tracking +XXHASH64 WRITESET_SESSION +include/include/assert_logical_timestamps.inc + +# 3. Clean up. +[connection master] +SET @@GLOBAL.transaction_write_set_extraction= @save_transaction_write_set_extraction; +SET @@GLOBAL.binlog_transaction_dependency_tracking= @save_binlog_transaction_dependency_tracking; +include/sync_slave_sql_with_master.inc +[On Slave] +SET GLOBAL binlog_transaction_dependency_tracking = COMMIT_ORDER; +SET @@GLOBAL.binlog_transaction_dependency_tracking= @save_binlog_transaction_dependency_tracking; +SET @@GLOBAL.transaction_write_set_extraction= @save_transaction_write_set_extraction; +include/stop_slave.inc +CHANGE REPLICATION FILTER REPLICATE_REWRITE_DB=(), REPLICATE_IGNORE_DB=(); +include/start_slave.inc +include/rpl_end.inc diff --git a/mysql-test/suite/rpl/r/rpl_binlog_transaction_dependency_tracking_with_fk.result b/mysql-test/suite/rpl/r/rpl_binlog_transaction_dependency_tracking_with_fk.result new file mode 100644 index 000000000000..9740b82f84cd --- /dev/null +++ b/mysql-test/suite/rpl/r/rpl_binlog_transaction_dependency_tracking_with_fk.result @@ -0,0 +1,412 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +SET @save_binlog_transaction_dependency_tracking = @@GLOBAL.binlog_transaction_dependency_tracking; +SET @save_transaction_write_set_extraction = @@GLOBAL.transaction_write_set_extraction; + +SET GLOBAL binlog_transaction_dependency_tracking = WRITESET; +######## 1. Test referential action RESTRICT with WRITESET. ######## +SELECT @@local.transaction_write_set_extraction, +@@global.transaction_write_set_extraction, +@@binlog_transaction_dependency_tracking; +@@local.transaction_write_set_extraction @@global.transaction_write_set_extraction @@binlog_transaction_dependency_tracking +XXHASH64 XXHASH64 WRITESET +CREATE TABLE parent1 (a INT NOT NULL PRIMARY KEY, b VARCHAR(50)); +CREATE TABLE parent2 (a INT NOT NULL PRIMARY KEY, b VARCHAR(50)); +CREATE TABLE t1 (a INT PRIMARY KEY); +CREATE TABLE child1 (a INT PRIMARY KEY, b INT, FOREIGN KEY(b) REFERENCES parent1 (a) ON UPDATE RESTRICT); +CREATE TABLE child2 (a INT PRIMARY KEY, b INT, FOREIGN KEY(b) REFERENCES parent2 (a) ON DELETE RESTRICT); +INSERT INTO parent1 VALUES (1, 1), (2, 2); +INSERT INTO parent2 VALUES (1, 1), (2, 2); +FLUSH LOGS; +# Case 2.1, 2.2, 2.3 +INSERT INTO child1 VALUES (1, 1); +INSERT INTO child2 VALUES (1, 1); +UPDATE child1 SET a = 2; +UPDATE child2 SET a = 2; +DELETE FROM child1; +DELETE FROM child2; +# Case 1.1, 1.2, 1.3 +INSERT INTO t1 VALUES (1); +INSERT INTO parent1 VALUES (3, 3); +INSERT INTO t1 VALUES (2); +# Case 1.4, 1.5 +BEGIN; +INSERT INTO t1 VALUES (3); +INSERT INTO child1 VALUES (1, 1); +BEGIN; +INSERT INTO parent1 VALUEs (4, 4); +INSERT INTO child2 VALUES (1, 1); +BEGIN; +INSERT INTO t1 VALUES (4); +COMMIT; +COMMIT; +COMMIT; +INSERT INTO t1 VALUES (5); +UPDATE parent1 SET a=5 WHERE a=1; +ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`child1`, CONSTRAINT `child1_ibfk_1` FOREIGN KEY (`b`) REFERENCES `parent1` (`a`)) +DELETE FROM parent2 WHERE a=1; +ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`child2`, CONSTRAINT `child2_ibfk_1` FOREIGN KEY (`b`) REFERENCES `parent2` (`a`)) +# Drop table and flush logs to force binlog to rotate +DROP TABLE child2, parent2, child1, parent1, t1; +FLUSH LOGS; +# Processing binlog... +include/include/assert_logical_timestamps.inc [0 1;1 2;1 3;2 4;3 5;4 6;1 7;7 8;8 9;8 10;9 11;9 12;11 13;13 14] +# Verify that replication is correct +include/sync_slave_sql_with_master.inc + +SET GLOBAL binlog_transaction_dependency_tracking = WRITESET_SESSION; +######## 2. Test referential action RESTRICT with WRITESET_SESSION. ######## +SELECT @@local.transaction_write_set_extraction, +@@global.transaction_write_set_extraction, +@@binlog_transaction_dependency_tracking; +@@local.transaction_write_set_extraction @@global.transaction_write_set_extraction @@binlog_transaction_dependency_tracking +XXHASH64 XXHASH64 WRITESET_SESSION +CREATE TABLE parent1 (a INT NOT NULL PRIMARY KEY, b VARCHAR(50)); +CREATE TABLE parent2 (a INT NOT NULL PRIMARY KEY, b VARCHAR(50)); +CREATE TABLE t1 (a INT PRIMARY KEY); +CREATE TABLE child1 (a INT PRIMARY KEY, b INT, FOREIGN KEY(b) REFERENCES parent1 (a) ON UPDATE RESTRICT); +CREATE TABLE child2 (a INT PRIMARY KEY, b INT, FOREIGN KEY(b) REFERENCES parent2 (a) ON DELETE RESTRICT); +INSERT INTO parent1 VALUES (1, 1), (2, 2); +INSERT INTO parent2 VALUES (1, 1), (2, 2); +FLUSH LOGS; +# Case 2.1, 2.2, 2.3 +INSERT INTO child1 VALUES (1, 1); +INSERT INTO child2 VALUES (1, 1); +UPDATE child1 SET a = 2; +UPDATE child2 SET a = 2; +DELETE FROM child1; +DELETE FROM child2; +# Case 1.1, 1.2, 1.3 +INSERT INTO t1 VALUES (1); +INSERT INTO parent1 VALUES (3, 3); +INSERT INTO t1 VALUES (2); +# Case 1.4, 1.5 +BEGIN; +INSERT INTO t1 VALUES (3); +INSERT INTO child1 VALUES (1, 1); +BEGIN; +INSERT INTO parent1 VALUEs (4, 4); +INSERT INTO child2 VALUES (1, 1); +BEGIN; +INSERT INTO t1 VALUES (4); +COMMIT; +COMMIT; +COMMIT; +INSERT INTO t1 VALUES (5); +UPDATE parent1 SET a=5 WHERE a=1; +ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`child1`, CONSTRAINT `child1_ibfk_1` FOREIGN KEY (`b`) REFERENCES `parent1` (`a`)) +DELETE FROM parent2 WHERE a=1; +ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`child2`, CONSTRAINT `child2_ibfk_1` FOREIGN KEY (`b`) REFERENCES `parent2` (`a`)) +# Drop table and flush logs to force binlog to rotate +DROP TABLE child2, parent2, child1, parent1, t1; +FLUSH LOGS; +# Processing binlog... +include/include/assert_logical_timestamps.inc [0 1;1 2;1 3;2 4;3 5;4 6;1 7;7 8;8 9;8 10;9 11;9 12;11 13;13 14] +# Verify that replication is correct +include/sync_slave_sql_with_master.inc + +SET GLOBAL binlog_transaction_dependency_tracking = WRITESET; +######## 3. Test referential action NO ACTION with WRITESET. ######## +SELECT @@local.transaction_write_set_extraction, +@@global.transaction_write_set_extraction, +@@binlog_transaction_dependency_tracking; +@@local.transaction_write_set_extraction @@global.transaction_write_set_extraction @@binlog_transaction_dependency_tracking +XXHASH64 XXHASH64 WRITESET +CREATE TABLE parent1 (a INT NOT NULL PRIMARY KEY, b VARCHAR(50)); +CREATE TABLE parent2 (a INT NOT NULL PRIMARY KEY, b VARCHAR(50)); +CREATE TABLE t1 (a INT PRIMARY KEY); +CREATE TABLE child1 (a INT PRIMARY KEY, b INT, FOREIGN KEY(b) REFERENCES parent1 (a) ON UPDATE NO ACTION); +CREATE TABLE child2 (a INT PRIMARY KEY, b INT, FOREIGN KEY(b) REFERENCES parent2 (a) ON DELETE NO ACTION); +INSERT INTO parent1 VALUES (1, 1), (2, 2); +INSERT INTO parent2 VALUES (1, 1), (2, 2); +FLUSH LOGS; +# Case 2.1, 2.2, 2.3 +INSERT INTO child1 VALUES (1, 1); +INSERT INTO child2 VALUES (1, 1); +UPDATE child1 SET a = 2; +UPDATE child2 SET a = 2; +DELETE FROM child1; +DELETE FROM child2; +# Case 1.1, 1.2, 1.3 +INSERT INTO t1 VALUES (1); +INSERT INTO parent1 VALUES (3, 3); +INSERT INTO t1 VALUES (2); +# Case 1.4, 1.5 +BEGIN; +INSERT INTO t1 VALUES (3); +INSERT INTO child1 VALUES (1, 1); +BEGIN; +INSERT INTO parent1 VALUEs (4, 4); +INSERT INTO child2 VALUES (1, 1); +BEGIN; +INSERT INTO t1 VALUES (4); +COMMIT; +COMMIT; +COMMIT; +INSERT INTO t1 VALUES (5); +UPDATE parent1 SET a=5 WHERE a=1; +ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`child1`, CONSTRAINT `child1_ibfk_1` FOREIGN KEY (`b`) REFERENCES `parent1` (`a`) ON UPDATE NO ACTION) +DELETE FROM parent2 WHERE a=1; +ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`child2`, CONSTRAINT `child2_ibfk_1` FOREIGN KEY (`b`) REFERENCES `parent2` (`a`) ON DELETE NO ACTION) +# Drop table and flush logs to force binlog to rotate +DROP TABLE child2, parent2, child1, parent1, t1; +FLUSH LOGS; +# Processing binlog... +include/include/assert_logical_timestamps.inc [0 1;1 2;1 3;2 4;3 5;4 6;1 7;7 8;8 9;8 10;9 11;9 12;11 13;13 14] +# Verify that replication is correct +include/sync_slave_sql_with_master.inc + +SET GLOBAL binlog_transaction_dependency_tracking = WRITESET_SESSION; +######## 4. Test referential action NO ACTION with WRITESET_SESSION. ######## +SELECT @@local.transaction_write_set_extraction, +@@global.transaction_write_set_extraction, +@@binlog_transaction_dependency_tracking; +@@local.transaction_write_set_extraction @@global.transaction_write_set_extraction @@binlog_transaction_dependency_tracking +XXHASH64 XXHASH64 WRITESET_SESSION +CREATE TABLE parent1 (a INT NOT NULL PRIMARY KEY, b VARCHAR(50)); +CREATE TABLE parent2 (a INT NOT NULL PRIMARY KEY, b VARCHAR(50)); +CREATE TABLE t1 (a INT PRIMARY KEY); +CREATE TABLE child1 (a INT PRIMARY KEY, b INT, FOREIGN KEY(b) REFERENCES parent1 (a) ON UPDATE NO ACTION); +CREATE TABLE child2 (a INT PRIMARY KEY, b INT, FOREIGN KEY(b) REFERENCES parent2 (a) ON DELETE NO ACTION); +INSERT INTO parent1 VALUES (1, 1), (2, 2); +INSERT INTO parent2 VALUES (1, 1), (2, 2); +FLUSH LOGS; +# Case 2.1, 2.2, 2.3 +INSERT INTO child1 VALUES (1, 1); +INSERT INTO child2 VALUES (1, 1); +UPDATE child1 SET a = 2; +UPDATE child2 SET a = 2; +DELETE FROM child1; +DELETE FROM child2; +# Case 1.1, 1.2, 1.3 +INSERT INTO t1 VALUES (1); +INSERT INTO parent1 VALUES (3, 3); +INSERT INTO t1 VALUES (2); +# Case 1.4, 1.5 +BEGIN; +INSERT INTO t1 VALUES (3); +INSERT INTO child1 VALUES (1, 1); +BEGIN; +INSERT INTO parent1 VALUEs (4, 4); +INSERT INTO child2 VALUES (1, 1); +BEGIN; +INSERT INTO t1 VALUES (4); +COMMIT; +COMMIT; +COMMIT; +INSERT INTO t1 VALUES (5); +UPDATE parent1 SET a=5 WHERE a=1; +ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`child1`, CONSTRAINT `child1_ibfk_1` FOREIGN KEY (`b`) REFERENCES `parent1` (`a`) ON UPDATE NO ACTION) +DELETE FROM parent2 WHERE a=1; +ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`child2`, CONSTRAINT `child2_ibfk_1` FOREIGN KEY (`b`) REFERENCES `parent2` (`a`) ON DELETE NO ACTION) +# Drop table and flush logs to force binlog to rotate +DROP TABLE child2, parent2, child1, parent1, t1; +FLUSH LOGS; +# Processing binlog... +include/include/assert_logical_timestamps.inc [0 1;1 2;1 3;2 4;3 5;4 6;1 7;7 8;8 9;8 10;9 11;9 12;11 13;13 14] +# Verify that replication is correct +include/sync_slave_sql_with_master.inc + +SET GLOBAL binlog_transaction_dependency_tracking = WRITESET; +######## 5. Test referential action CASCADE with WRITESET. ######## +SELECT @@local.transaction_write_set_extraction, +@@global.transaction_write_set_extraction, +@@binlog_transaction_dependency_tracking; +@@local.transaction_write_set_extraction @@global.transaction_write_set_extraction @@binlog_transaction_dependency_tracking +XXHASH64 XXHASH64 WRITESET +CREATE TABLE parent1 (a INT NOT NULL PRIMARY KEY, b VARCHAR(50)); +CREATE TABLE parent2 (a INT NOT NULL PRIMARY KEY, b VARCHAR(50)); +CREATE TABLE t1 (a INT PRIMARY KEY); +CREATE TABLE child1 (a INT PRIMARY KEY, b INT, FOREIGN KEY(b) REFERENCES parent1 (a) ON UPDATE CASCADE); +CREATE TABLE child2 (a INT PRIMARY KEY, b INT, FOREIGN KEY(b) REFERENCES parent2 (a) ON DELETE CASCADE); +INSERT INTO parent1 VALUES (1, 1), (2, 2); +INSERT INTO parent2 VALUES (1, 1), (2, 2); +FLUSH LOGS; +# Case 2.1, 2.2, 2.3 +INSERT INTO child1 VALUES (1, 1); +INSERT INTO child2 VALUES (1, 1); +UPDATE child1 SET a = 2; +UPDATE child2 SET a = 2; +DELETE FROM child1; +DELETE FROM child2; +# Case 1.1, 1.2, 1.3 +INSERT INTO t1 VALUES (1); +INSERT INTO parent1 VALUES (3, 3); +INSERT INTO t1 VALUES (2); +# Case 1.4, 1.5 +BEGIN; +INSERT INTO t1 VALUES (3); +INSERT INTO child1 VALUES (1, 1); +BEGIN; +INSERT INTO parent1 VALUEs (4, 4); +INSERT INTO child2 VALUES (1, 1); +BEGIN; +INSERT INTO t1 VALUES (4); +COMMIT; +COMMIT; +COMMIT; +INSERT INTO t1 VALUES (5); +UPDATE parent1 SET a=5 WHERE a=1; +DELETE FROM parent2 WHERE a=1; +# Drop table and flush logs to force binlog to rotate +DROP TABLE child2, parent2, child1, parent1, t1; +FLUSH LOGS; +# Processing binlog... +include/include/assert_logical_timestamps.inc [0 1;1 2;1 3;2 4;3 5;4 6;1 7;7 8;8 9;8 10;9 11;9 12;11 13;13 14;14 15;15 16] +# Verify that replication is correct +include/sync_slave_sql_with_master.inc + +SET GLOBAL binlog_transaction_dependency_tracking = WRITESET_SESSION; +######## 6. Test referential action CASCADE with WRITESET_SESSION. ######## +SELECT @@local.transaction_write_set_extraction, +@@global.transaction_write_set_extraction, +@@binlog_transaction_dependency_tracking; +@@local.transaction_write_set_extraction @@global.transaction_write_set_extraction @@binlog_transaction_dependency_tracking +XXHASH64 XXHASH64 WRITESET_SESSION +CREATE TABLE parent1 (a INT NOT NULL PRIMARY KEY, b VARCHAR(50)); +CREATE TABLE parent2 (a INT NOT NULL PRIMARY KEY, b VARCHAR(50)); +CREATE TABLE t1 (a INT PRIMARY KEY); +CREATE TABLE child1 (a INT PRIMARY KEY, b INT, FOREIGN KEY(b) REFERENCES parent1 (a) ON UPDATE CASCADE); +CREATE TABLE child2 (a INT PRIMARY KEY, b INT, FOREIGN KEY(b) REFERENCES parent2 (a) ON DELETE CASCADE); +INSERT INTO parent1 VALUES (1, 1), (2, 2); +INSERT INTO parent2 VALUES (1, 1), (2, 2); +FLUSH LOGS; +# Case 2.1, 2.2, 2.3 +INSERT INTO child1 VALUES (1, 1); +INSERT INTO child2 VALUES (1, 1); +UPDATE child1 SET a = 2; +UPDATE child2 SET a = 2; +DELETE FROM child1; +DELETE FROM child2; +# Case 1.1, 1.2, 1.3 +INSERT INTO t1 VALUES (1); +INSERT INTO parent1 VALUES (3, 3); +INSERT INTO t1 VALUES (2); +# Case 1.4, 1.5 +BEGIN; +INSERT INTO t1 VALUES (3); +INSERT INTO child1 VALUES (1, 1); +BEGIN; +INSERT INTO parent1 VALUEs (4, 4); +INSERT INTO child2 VALUES (1, 1); +BEGIN; +INSERT INTO t1 VALUES (4); +COMMIT; +COMMIT; +COMMIT; +INSERT INTO t1 VALUES (5); +UPDATE parent1 SET a=5 WHERE a=1; +DELETE FROM parent2 WHERE a=1; +# Drop table and flush logs to force binlog to rotate +DROP TABLE child2, parent2, child1, parent1, t1; +FLUSH LOGS; +# Processing binlog... +include/include/assert_logical_timestamps.inc [0 1;1 2;1 3;2 4;3 5;4 6;1 7;7 8;8 9;8 10;9 11;9 12;11 13;13 14;14 15;15 16] +# Verify that replication is correct +include/sync_slave_sql_with_master.inc + +SET GLOBAL binlog_transaction_dependency_tracking = WRITESET; +######## 7. Test referential action SET NULL with WRITESET. ######## +SELECT @@local.transaction_write_set_extraction, +@@global.transaction_write_set_extraction, +@@binlog_transaction_dependency_tracking; +@@local.transaction_write_set_extraction @@global.transaction_write_set_extraction @@binlog_transaction_dependency_tracking +XXHASH64 XXHASH64 WRITESET +CREATE TABLE parent1 (a INT NOT NULL PRIMARY KEY, b VARCHAR(50)); +CREATE TABLE parent2 (a INT NOT NULL PRIMARY KEY, b VARCHAR(50)); +CREATE TABLE t1 (a INT PRIMARY KEY); +CREATE TABLE child1 (a INT PRIMARY KEY, b INT, FOREIGN KEY(b) REFERENCES parent1 (a) ON UPDATE SET NULL); +CREATE TABLE child2 (a INT PRIMARY KEY, b INT, FOREIGN KEY(b) REFERENCES parent2 (a) ON DELETE SET NULL); +INSERT INTO parent1 VALUES (1, 1), (2, 2); +INSERT INTO parent2 VALUES (1, 1), (2, 2); +FLUSH LOGS; +# Case 2.1, 2.2, 2.3 +INSERT INTO child1 VALUES (1, 1); +INSERT INTO child2 VALUES (1, 1); +UPDATE child1 SET a = 2; +UPDATE child2 SET a = 2; +DELETE FROM child1; +DELETE FROM child2; +# Case 1.1, 1.2, 1.3 +INSERT INTO t1 VALUES (1); +INSERT INTO parent1 VALUES (3, 3); +INSERT INTO t1 VALUES (2); +# Case 1.4, 1.5 +BEGIN; +INSERT INTO t1 VALUES (3); +INSERT INTO child1 VALUES (1, 1); +BEGIN; +INSERT INTO parent1 VALUEs (4, 4); +INSERT INTO child2 VALUES (1, 1); +BEGIN; +INSERT INTO t1 VALUES (4); +COMMIT; +COMMIT; +COMMIT; +INSERT INTO t1 VALUES (5); +UPDATE parent1 SET a=5 WHERE a=1; +DELETE FROM parent2 WHERE a=1; +# Drop table and flush logs to force binlog to rotate +DROP TABLE child2, parent2, child1, parent1, t1; +FLUSH LOGS; +# Processing binlog... +include/include/assert_logical_timestamps.inc [0 1;1 2;1 3;2 4;3 5;4 6;1 7;7 8;8 9;8 10;9 11;9 12;11 13;13 14;14 15;15 16] +# Verify that replication is correct +include/sync_slave_sql_with_master.inc + +SET GLOBAL binlog_transaction_dependency_tracking = WRITESET_SESSION; +######## 8. Test referential action SET NULL with WRITESET_SESSION. ######## +SELECT @@local.transaction_write_set_extraction, +@@global.transaction_write_set_extraction, +@@binlog_transaction_dependency_tracking; +@@local.transaction_write_set_extraction @@global.transaction_write_set_extraction @@binlog_transaction_dependency_tracking +XXHASH64 XXHASH64 WRITESET_SESSION +CREATE TABLE parent1 (a INT NOT NULL PRIMARY KEY, b VARCHAR(50)); +CREATE TABLE parent2 (a INT NOT NULL PRIMARY KEY, b VARCHAR(50)); +CREATE TABLE t1 (a INT PRIMARY KEY); +CREATE TABLE child1 (a INT PRIMARY KEY, b INT, FOREIGN KEY(b) REFERENCES parent1 (a) ON UPDATE SET NULL); +CREATE TABLE child2 (a INT PRIMARY KEY, b INT, FOREIGN KEY(b) REFERENCES parent2 (a) ON DELETE SET NULL); +INSERT INTO parent1 VALUES (1, 1), (2, 2); +INSERT INTO parent2 VALUES (1, 1), (2, 2); +FLUSH LOGS; +# Case 2.1, 2.2, 2.3 +INSERT INTO child1 VALUES (1, 1); +INSERT INTO child2 VALUES (1, 1); +UPDATE child1 SET a = 2; +UPDATE child2 SET a = 2; +DELETE FROM child1; +DELETE FROM child2; +# Case 1.1, 1.2, 1.3 +INSERT INTO t1 VALUES (1); +INSERT INTO parent1 VALUES (3, 3); +INSERT INTO t1 VALUES (2); +# Case 1.4, 1.5 +BEGIN; +INSERT INTO t1 VALUES (3); +INSERT INTO child1 VALUES (1, 1); +BEGIN; +INSERT INTO parent1 VALUEs (4, 4); +INSERT INTO child2 VALUES (1, 1); +BEGIN; +INSERT INTO t1 VALUES (4); +COMMIT; +COMMIT; +COMMIT; +INSERT INTO t1 VALUES (5); +UPDATE parent1 SET a=5 WHERE a=1; +DELETE FROM parent2 WHERE a=1; +# Drop table and flush logs to force binlog to rotate +DROP TABLE child2, parent2, child1, parent1, t1; +FLUSH LOGS; +# Processing binlog... +include/include/assert_logical_timestamps.inc [0 1;1 2;1 3;2 4;3 5;4 6;1 7;7 8;8 9;8 10;9 11;9 12;11 13;13 14;14 15;15 16] +# Verify that replication is correct +include/sync_slave_sql_with_master.inc + +# Clean up +SET @@GLOBAL.binlog_transaction_dependency_tracking= @save_binlog_transaction_dependency_tracking; +SET @@GLOBAL.transaction_write_set_extraction= @save_transaction_write_set_extraction; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl/r/rpl_binlog_transaction_dependency_tracking_with_indexes.result b/mysql-test/suite/rpl/r/rpl_binlog_transaction_dependency_tracking_with_indexes.result new file mode 100644 index 000000000000..8a6d204373c7 --- /dev/null +++ b/mysql-test/suite/rpl/r/rpl_binlog_transaction_dependency_tracking_with_indexes.result @@ -0,0 +1,824 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +#### INITIALIZE #### +[connection slave] +include/stop_slave.inc +SET @save_slave_parallel_workers= @@GLOBAL.slave_parallel_workers; +SET @@GLOBAL.slave_parallel_workers= 4; +include/start_slave.inc +[connection master] +SET @save_binlog_transaction_dependency_tracking = @@GLOBAL.binlog_transaction_dependency_tracking; +SET @save_transaction_write_set_extraction = @@GLOBAL.transaction_write_set_extraction; +SET GLOBAL binlog_transaction_dependency_tracking = COMMIT_ORDER; +SET GLOBAL transaction_write_set_extraction = XXHASH64; +SET SESSION transaction_write_set_extraction = XXHASH64; +SET GLOBAL binlog_transaction_dependency_tracking = WRITESET; + +#### 0.0.0.0: WITHOUT PK, NULLABLE, NOT UNIQUE, NO INDEX #### + +CREATE TABLE t1 (a INT, b INT , c INT ); +CREATE TABLE t2 (a INT PRIMARY KEY); +FLUSH LOGS; +include/save_binlog_position.inc +# TRX1: independent +INSERT INTO t1 VALUES (1, 1, 1); +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [0 1] +# TRX2: independent +BEGIN; +INSERT INTO t1 VALUES (2, 2, 2); +INSERT INTO t2 VALUES (1); +COMMIT; +# now t1 contains two rows: (1, 1, 1), (2, 2, 2) +include/include/assert_logical_timestamps.inc [1 2] +# TRX3: independent +INSERT INTO t2 VALUES (3); +# TRX4: depends on TRX2 +DELETE FROM t1 WHERE a = 2; +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [1 3;3 4] +# TRX5: independent +INSERT INTO t2 VALUES (5); +# TRX6: conflict with TRX4 if unique, else with TRX1 +UPDATE t1 SET b = 2, c = 2 WHERE a = 1; +# now t1 contains one row: (1, 2, 2) +include/include/assert_logical_timestamps.inc [1 5;5 6] +# TRX7: independent +INSERT INTO t1 VALUES (3, NULL, 2); +# now t1 contains two rows: (1, 2, 2), (3, NULL, 2) +include/include/assert_logical_timestamps.inc [6 7] +# TRX8: independent +INSERT INTO t2 VALUES (8); +# TRX9: independent (no conflict with TRX7 since multiple NULLs are allowed) +INSERT INTO t1 VALUES (4, NULL, 2); +# now t1 contains three rows: (1, 2, 2), (3, NULL, 2), (4, NULL, 2) +include/include/assert_logical_timestamps.inc [1 8;8 9] +# TRX10: independent +INSERT INTO t2 VALUES (10); +# TRX11: conflict with TRX7 (not with TRX9 since multiple NULLs are allowed) +DELETE FROM t1 WHERE a = 3; +# now t1 contains two rows: (1, 2, 2), (4, NULL, 2) +include/include/assert_logical_timestamps.inc [1 10;10 11] +DROP TABLE t1; +DROP TABLE t2; + +#### 0.0.0.1: WITHOUT PK, NULLABLE, NOT UNIQUE, 1-COLUMN INDEX #### + +CREATE TABLE t1 (a INT, b INT , c INT , INDEX(b)); +CREATE TABLE t2 (a INT PRIMARY KEY); +FLUSH LOGS; +include/save_binlog_position.inc +# TRX1: independent +INSERT INTO t1 VALUES (1, 1, 1); +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [0 1] +# TRX2: independent +BEGIN; +INSERT INTO t1 VALUES (2, 2, 2); +INSERT INTO t2 VALUES (1); +COMMIT; +# now t1 contains two rows: (1, 1, 1), (2, 2, 2) +include/include/assert_logical_timestamps.inc [1 2] +# TRX3: independent +INSERT INTO t2 VALUES (3); +# TRX4: depends on TRX2 +DELETE FROM t1 WHERE a = 2; +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [1 3;3 4] +# TRX5: independent +INSERT INTO t2 VALUES (5); +# TRX6: conflict with TRX4 if unique, else with TRX1 +UPDATE t1 SET b = 2, c = 2 WHERE a = 1; +# now t1 contains one row: (1, 2, 2) +include/include/assert_logical_timestamps.inc [1 5;5 6] +# TRX7: independent +INSERT INTO t1 VALUES (3, NULL, 2); +# now t1 contains two rows: (1, 2, 2), (3, NULL, 2) +include/include/assert_logical_timestamps.inc [6 7] +# TRX8: independent +INSERT INTO t2 VALUES (8); +# TRX9: independent (no conflict with TRX7 since multiple NULLs are allowed) +INSERT INTO t1 VALUES (4, NULL, 2); +# now t1 contains three rows: (1, 2, 2), (3, NULL, 2), (4, NULL, 2) +include/include/assert_logical_timestamps.inc [1 8;8 9] +# TRX10: independent +INSERT INTO t2 VALUES (10); +# TRX11: conflict with TRX7 (not with TRX9 since multiple NULLs are allowed) +DELETE FROM t1 WHERE a = 3; +# now t1 contains two rows: (1, 2, 2), (4, NULL, 2) +include/include/assert_logical_timestamps.inc [1 10;10 11] +DROP TABLE t1; +DROP TABLE t2; + +#### 0.0.0.2: WITHOUT PK, NULLABLE, NOT UNIQUE, 2-COLUMN INDEX #### + +CREATE TABLE t1 (a INT, b INT , c INT , INDEX(b, c)); +CREATE TABLE t2 (a INT PRIMARY KEY); +FLUSH LOGS; +include/save_binlog_position.inc +# TRX1: independent +INSERT INTO t1 VALUES (1, 1, 1); +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [0 1] +# TRX2: independent +BEGIN; +INSERT INTO t1 VALUES (2, 2, 2); +INSERT INTO t2 VALUES (1); +COMMIT; +# now t1 contains two rows: (1, 1, 1), (2, 2, 2) +include/include/assert_logical_timestamps.inc [1 2] +# TRX3: independent +INSERT INTO t2 VALUES (3); +# TRX4: depends on TRX2 +DELETE FROM t1 WHERE a = 2; +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [1 3;3 4] +# TRX5: independent +INSERT INTO t2 VALUES (5); +# TRX6: conflict with TRX4 if unique, else with TRX1 +UPDATE t1 SET b = 2, c = 2 WHERE a = 1; +# now t1 contains one row: (1, 2, 2) +include/include/assert_logical_timestamps.inc [1 5;5 6] +# TRX7: independent +INSERT INTO t1 VALUES (3, NULL, 2); +# now t1 contains two rows: (1, 2, 2), (3, NULL, 2) +include/include/assert_logical_timestamps.inc [6 7] +# TRX8: independent +INSERT INTO t2 VALUES (8); +# TRX9: independent (no conflict with TRX7 since multiple NULLs are allowed) +INSERT INTO t1 VALUES (4, NULL, 2); +# now t1 contains three rows: (1, 2, 2), (3, NULL, 2), (4, NULL, 2) +include/include/assert_logical_timestamps.inc [1 8;8 9] +# TRX10: independent +INSERT INTO t2 VALUES (10); +# TRX11: conflict with TRX7 (not with TRX9 since multiple NULLs are allowed) +DELETE FROM t1 WHERE a = 3; +# now t1 contains two rows: (1, 2, 2), (4, NULL, 2) +include/include/assert_logical_timestamps.inc [1 10;10 11] +DROP TABLE t1; +DROP TABLE t2; + +#### 0.0.1.1: WITHOUT PK, NULLABLE, UNIQUE, 1-COLUMN INDEX #### + +CREATE TABLE t1 (a INT, b INT , c INT , UNIQUE INDEX(b)); +CREATE TABLE t2 (a INT PRIMARY KEY); +FLUSH LOGS; +include/save_binlog_position.inc +# TRX1: independent +INSERT INTO t1 VALUES (1, 1, 1); +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [0 1] +# TRX2: independent +BEGIN; +INSERT INTO t1 VALUES (2, 2, 2); +INSERT INTO t2 VALUES (1); +COMMIT; +# now t1 contains two rows: (1, 1, 1), (2, 2, 2) +include/include/assert_logical_timestamps.inc [1 2] +# TRX3: independent +INSERT INTO t2 VALUES (3); +# TRX4: depends on TRX2 +DELETE FROM t1 WHERE a = 2; +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [1 3;3 4] +# TRX5: independent +INSERT INTO t2 VALUES (5); +# TRX6: conflict with TRX4 if unique, else with TRX1 +UPDATE t1 SET b = 2, c = 2 WHERE a = 1; +# now t1 contains one row: (1, 2, 2) +include/include/assert_logical_timestamps.inc [1 5;5 6] +# TRX7: independent +INSERT INTO t1 VALUES (3, NULL, 2); +# now t1 contains two rows: (1, 2, 2), (3, NULL, 2) +include/include/assert_logical_timestamps.inc [6 7] +# TRX8: independent +INSERT INTO t2 VALUES (8); +# TRX9: independent (no conflict with TRX7 since multiple NULLs are allowed) +INSERT INTO t1 VALUES (4, NULL, 2); +# now t1 contains three rows: (1, 2, 2), (3, NULL, 2), (4, NULL, 2) +include/include/assert_logical_timestamps.inc [1 8;8 9] +# TRX10: independent +INSERT INTO t2 VALUES (10); +# TRX11: conflict with TRX7 (not with TRX9 since multiple NULLs are allowed) +DELETE FROM t1 WHERE a = 3; +# now t1 contains two rows: (1, 2, 2), (4, NULL, 2) +include/include/assert_logical_timestamps.inc [1 10;10 11] +DROP TABLE t1; +DROP TABLE t2; + +#### 0.0.1.2: WITHOUT PK, NULLABLE, UNIQUE, 2-COLUMN INDEX #### + +CREATE TABLE t1 (a INT, b INT , c INT , UNIQUE INDEX(b, c)); +CREATE TABLE t2 (a INT PRIMARY KEY); +FLUSH LOGS; +include/save_binlog_position.inc +# TRX1: independent +INSERT INTO t1 VALUES (1, 1, 1); +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [0 1] +# TRX2: independent +BEGIN; +INSERT INTO t1 VALUES (2, 2, 2); +INSERT INTO t2 VALUES (1); +COMMIT; +# now t1 contains two rows: (1, 1, 1), (2, 2, 2) +include/include/assert_logical_timestamps.inc [1 2] +# TRX3: independent +INSERT INTO t2 VALUES (3); +# TRX4: depends on TRX2 +DELETE FROM t1 WHERE a = 2; +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [1 3;3 4] +# TRX5: independent +INSERT INTO t2 VALUES (5); +# TRX6: conflict with TRX4 if unique, else with TRX1 +UPDATE t1 SET b = 2, c = 2 WHERE a = 1; +# now t1 contains one row: (1, 2, 2) +include/include/assert_logical_timestamps.inc [1 5;5 6] +# TRX7: independent +INSERT INTO t1 VALUES (3, NULL, 2); +# now t1 contains two rows: (1, 2, 2), (3, NULL, 2) +include/include/assert_logical_timestamps.inc [6 7] +# TRX8: independent +INSERT INTO t2 VALUES (8); +# TRX9: independent (no conflict with TRX7 since multiple NULLs are allowed) +INSERT INTO t1 VALUES (4, NULL, 2); +# now t1 contains three rows: (1, 2, 2), (3, NULL, 2), (4, NULL, 2) +include/include/assert_logical_timestamps.inc [1 8;8 9] +# TRX10: independent +INSERT INTO t2 VALUES (10); +# TRX11: conflict with TRX7 (not with TRX9 since multiple NULLs are allowed) +DELETE FROM t1 WHERE a = 3; +# now t1 contains two rows: (1, 2, 2), (4, NULL, 2) +include/include/assert_logical_timestamps.inc [1 10;10 11] +DROP TABLE t1; +DROP TABLE t2; + +#### 0.1.0.0: WITHOUT PK, NOT NULL, NOT UNIQUE, NO INDEX #### + +CREATE TABLE t1 (a INT, b INT NOT NULL, c INT NOT NULL ); +CREATE TABLE t2 (a INT PRIMARY KEY); +FLUSH LOGS; +include/save_binlog_position.inc +# TRX1: independent +INSERT INTO t1 VALUES (1, 1, 1); +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [0 1] +# TRX2: independent +BEGIN; +INSERT INTO t1 VALUES (2, 2, 2); +INSERT INTO t2 VALUES (1); +COMMIT; +# now t1 contains two rows: (1, 1, 1), (2, 2, 2) +include/include/assert_logical_timestamps.inc [1 2] +# TRX3: independent +INSERT INTO t2 VALUES (3); +# TRX4: depends on TRX2 +DELETE FROM t1 WHERE a = 2; +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [1 3;3 4] +# TRX5: independent +INSERT INTO t2 VALUES (5); +# TRX6: conflict with TRX4 if unique, else with TRX1 +UPDATE t1 SET b = 2, c = 2 WHERE a = 1; +# now t1 contains one row: (1, 2, 2) +include/include/assert_logical_timestamps.inc [1 5;5 6] +DROP TABLE t1; +DROP TABLE t2; + +#### 0.1.0.1: WITHOUT PK, NOT NULL, NOT UNIQUE, 1-COLUMN INDEX #### + +CREATE TABLE t1 (a INT, b INT NOT NULL, c INT NOT NULL , INDEX(b)); +CREATE TABLE t2 (a INT PRIMARY KEY); +FLUSH LOGS; +include/save_binlog_position.inc +# TRX1: independent +INSERT INTO t1 VALUES (1, 1, 1); +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [0 1] +# TRX2: independent +BEGIN; +INSERT INTO t1 VALUES (2, 2, 2); +INSERT INTO t2 VALUES (1); +COMMIT; +# now t1 contains two rows: (1, 1, 1), (2, 2, 2) +include/include/assert_logical_timestamps.inc [1 2] +# TRX3: independent +INSERT INTO t2 VALUES (3); +# TRX4: depends on TRX2 +DELETE FROM t1 WHERE a = 2; +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [1 3;3 4] +# TRX5: independent +INSERT INTO t2 VALUES (5); +# TRX6: conflict with TRX4 if unique, else with TRX1 +UPDATE t1 SET b = 2, c = 2 WHERE a = 1; +# now t1 contains one row: (1, 2, 2) +include/include/assert_logical_timestamps.inc [1 5;5 6] +DROP TABLE t1; +DROP TABLE t2; + +#### 0.1.0.2: WITHOUT PK, NOT NULL, NOT UNIQUE, 2-COLUMN INDEX #### + +CREATE TABLE t1 (a INT, b INT NOT NULL, c INT NOT NULL , INDEX(b, c)); +CREATE TABLE t2 (a INT PRIMARY KEY); +FLUSH LOGS; +include/save_binlog_position.inc +# TRX1: independent +INSERT INTO t1 VALUES (1, 1, 1); +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [0 1] +# TRX2: independent +BEGIN; +INSERT INTO t1 VALUES (2, 2, 2); +INSERT INTO t2 VALUES (1); +COMMIT; +# now t1 contains two rows: (1, 1, 1), (2, 2, 2) +include/include/assert_logical_timestamps.inc [1 2] +# TRX3: independent +INSERT INTO t2 VALUES (3); +# TRX4: depends on TRX2 +DELETE FROM t1 WHERE a = 2; +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [1 3;3 4] +# TRX5: independent +INSERT INTO t2 VALUES (5); +# TRX6: conflict with TRX4 if unique, else with TRX1 +UPDATE t1 SET b = 2, c = 2 WHERE a = 1; +# now t1 contains one row: (1, 2, 2) +include/include/assert_logical_timestamps.inc [1 5;5 6] +DROP TABLE t1; +DROP TABLE t2; + +#### 0.1.1.1: WITHOUT PK, NOT NULL, UNIQUE, 1-COLUMN INDEX #### + +CREATE TABLE t1 (a INT, b INT NOT NULL, c INT NOT NULL , UNIQUE INDEX(b)); +CREATE TABLE t2 (a INT PRIMARY KEY); +FLUSH LOGS; +include/save_binlog_position.inc +# TRX1: independent +INSERT INTO t1 VALUES (1, 1, 1); +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [0 1] +# TRX2: independent +BEGIN; +INSERT INTO t1 VALUES (2, 2, 2); +INSERT INTO t2 VALUES (1); +COMMIT; +# now t1 contains two rows: (1, 1, 1), (2, 2, 2) +include/include/assert_logical_timestamps.inc [1 2] +# TRX3: independent +INSERT INTO t2 VALUES (3); +# TRX4: depends on TRX2 +DELETE FROM t1 WHERE a = 2; +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [1 3;2 4] +# TRX5: independent +INSERT INTO t2 VALUES (5); +# TRX6: conflict with TRX4 if unique, else with TRX1 +UPDATE t1 SET b = 2, c = 2 WHERE a = 1; +# now t1 contains one row: (1, 2, 2) +include/include/assert_logical_timestamps.inc [1 5;4 6] +DROP TABLE t1; +DROP TABLE t2; + +#### 0.1.1.2: WITHOUT PK, NOT NULL, UNIQUE, 2-COLUMN INDEX #### + +CREATE TABLE t1 (a INT, b INT NOT NULL, c INT NOT NULL , UNIQUE INDEX(b, c)); +CREATE TABLE t2 (a INT PRIMARY KEY); +FLUSH LOGS; +include/save_binlog_position.inc +# TRX1: independent +INSERT INTO t1 VALUES (1, 1, 1); +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [0 1] +# TRX2: independent +BEGIN; +INSERT INTO t1 VALUES (2, 2, 2); +INSERT INTO t2 VALUES (1); +COMMIT; +# now t1 contains two rows: (1, 1, 1), (2, 2, 2) +include/include/assert_logical_timestamps.inc [1 2] +# TRX3: independent +INSERT INTO t2 VALUES (3); +# TRX4: depends on TRX2 +DELETE FROM t1 WHERE a = 2; +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [1 3;2 4] +# TRX5: independent +INSERT INTO t2 VALUES (5); +# TRX6: conflict with TRX4 if unique, else with TRX1 +UPDATE t1 SET b = 2, c = 2 WHERE a = 1; +# now t1 contains one row: (1, 2, 2) +include/include/assert_logical_timestamps.inc [1 5;4 6] +DROP TABLE t1; +DROP TABLE t2; + +#### 1.0.0.0: WITH PK, NULLABLE, NOT UNIQUE, NO INDEX #### + +CREATE TABLE t1 (a INT PRIMARY KEY, b INT , c INT ); +CREATE TABLE t2 (a INT PRIMARY KEY); +FLUSH LOGS; +include/save_binlog_position.inc +# TRX1: independent +INSERT INTO t1 VALUES (1, 1, 1); +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [0 1] +# TRX2: independent +BEGIN; +INSERT INTO t1 VALUES (2, 2, 2); +INSERT INTO t2 VALUES (1); +COMMIT; +# now t1 contains two rows: (1, 1, 1), (2, 2, 2) +include/include/assert_logical_timestamps.inc [1 2] +# TRX3: independent +INSERT INTO t2 VALUES (3); +# TRX4: depends on TRX2 +DELETE FROM t1 WHERE a = 2; +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [1 3;2 4] +# TRX5: independent +INSERT INTO t2 VALUES (5); +# TRX6: conflict with TRX4 if unique, else with TRX1 +UPDATE t1 SET b = 2, c = 2 WHERE a = 1; +# now t1 contains one row: (1, 2, 2) +include/include/assert_logical_timestamps.inc [1 5;1 6] +# TRX7: independent +INSERT INTO t1 VALUES (3, NULL, 2); +# now t1 contains two rows: (1, 2, 2), (3, NULL, 2) +include/include/assert_logical_timestamps.inc [1 7] +# TRX8: independent +INSERT INTO t2 VALUES (8); +# TRX9: independent (no conflict with TRX7 since multiple NULLs are allowed) +INSERT INTO t1 VALUES (4, NULL, 2); +# now t1 contains three rows: (1, 2, 2), (3, NULL, 2), (4, NULL, 2) +include/include/assert_logical_timestamps.inc [1 8;1 9] +# TRX10: independent +INSERT INTO t2 VALUES (10); +# TRX11: conflict with TRX7 (not with TRX9 since multiple NULLs are allowed) +DELETE FROM t1 WHERE a = 3; +# now t1 contains two rows: (1, 2, 2), (4, NULL, 2) +include/include/assert_logical_timestamps.inc [1 10;7 11] +DROP TABLE t1; +DROP TABLE t2; + +#### 1.0.0.1: WITH PK, NULLABLE, NOT UNIQUE, 1-COLUMN INDEX #### + +CREATE TABLE t1 (a INT PRIMARY KEY, b INT , c INT , INDEX(b)); +CREATE TABLE t2 (a INT PRIMARY KEY); +FLUSH LOGS; +include/save_binlog_position.inc +# TRX1: independent +INSERT INTO t1 VALUES (1, 1, 1); +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [0 1] +# TRX2: independent +BEGIN; +INSERT INTO t1 VALUES (2, 2, 2); +INSERT INTO t2 VALUES (1); +COMMIT; +# now t1 contains two rows: (1, 1, 1), (2, 2, 2) +include/include/assert_logical_timestamps.inc [1 2] +# TRX3: independent +INSERT INTO t2 VALUES (3); +# TRX4: depends on TRX2 +DELETE FROM t1 WHERE a = 2; +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [1 3;2 4] +# TRX5: independent +INSERT INTO t2 VALUES (5); +# TRX6: conflict with TRX4 if unique, else with TRX1 +UPDATE t1 SET b = 2, c = 2 WHERE a = 1; +# now t1 contains one row: (1, 2, 2) +include/include/assert_logical_timestamps.inc [1 5;1 6] +# TRX7: independent +INSERT INTO t1 VALUES (3, NULL, 2); +# now t1 contains two rows: (1, 2, 2), (3, NULL, 2) +include/include/assert_logical_timestamps.inc [1 7] +# TRX8: independent +INSERT INTO t2 VALUES (8); +# TRX9: independent (no conflict with TRX7 since multiple NULLs are allowed) +INSERT INTO t1 VALUES (4, NULL, 2); +# now t1 contains three rows: (1, 2, 2), (3, NULL, 2), (4, NULL, 2) +include/include/assert_logical_timestamps.inc [1 8;1 9] +# TRX10: independent +INSERT INTO t2 VALUES (10); +# TRX11: conflict with TRX7 (not with TRX9 since multiple NULLs are allowed) +DELETE FROM t1 WHERE a = 3; +# now t1 contains two rows: (1, 2, 2), (4, NULL, 2) +include/include/assert_logical_timestamps.inc [1 10;7 11] +DROP TABLE t1; +DROP TABLE t2; + +#### 1.0.0.2: WITH PK, NULLABLE, NOT UNIQUE, 2-COLUMN INDEX #### + +CREATE TABLE t1 (a INT PRIMARY KEY, b INT , c INT , INDEX(b, c)); +CREATE TABLE t2 (a INT PRIMARY KEY); +FLUSH LOGS; +include/save_binlog_position.inc +# TRX1: independent +INSERT INTO t1 VALUES (1, 1, 1); +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [0 1] +# TRX2: independent +BEGIN; +INSERT INTO t1 VALUES (2, 2, 2); +INSERT INTO t2 VALUES (1); +COMMIT; +# now t1 contains two rows: (1, 1, 1), (2, 2, 2) +include/include/assert_logical_timestamps.inc [1 2] +# TRX3: independent +INSERT INTO t2 VALUES (3); +# TRX4: depends on TRX2 +DELETE FROM t1 WHERE a = 2; +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [1 3;2 4] +# TRX5: independent +INSERT INTO t2 VALUES (5); +# TRX6: conflict with TRX4 if unique, else with TRX1 +UPDATE t1 SET b = 2, c = 2 WHERE a = 1; +# now t1 contains one row: (1, 2, 2) +include/include/assert_logical_timestamps.inc [1 5;1 6] +# TRX7: independent +INSERT INTO t1 VALUES (3, NULL, 2); +# now t1 contains two rows: (1, 2, 2), (3, NULL, 2) +include/include/assert_logical_timestamps.inc [1 7] +# TRX8: independent +INSERT INTO t2 VALUES (8); +# TRX9: independent (no conflict with TRX7 since multiple NULLs are allowed) +INSERT INTO t1 VALUES (4, NULL, 2); +# now t1 contains three rows: (1, 2, 2), (3, NULL, 2), (4, NULL, 2) +include/include/assert_logical_timestamps.inc [1 8;1 9] +# TRX10: independent +INSERT INTO t2 VALUES (10); +# TRX11: conflict with TRX7 (not with TRX9 since multiple NULLs are allowed) +DELETE FROM t1 WHERE a = 3; +# now t1 contains two rows: (1, 2, 2), (4, NULL, 2) +include/include/assert_logical_timestamps.inc [1 10;7 11] +DROP TABLE t1; +DROP TABLE t2; + +#### 1.0.1.1: WITH PK, NULLABLE, UNIQUE, 1-COLUMN INDEX #### + +CREATE TABLE t1 (a INT PRIMARY KEY, b INT , c INT , UNIQUE INDEX(b)); +CREATE TABLE t2 (a INT PRIMARY KEY); +FLUSH LOGS; +include/save_binlog_position.inc +# TRX1: independent +INSERT INTO t1 VALUES (1, 1, 1); +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [0 1] +# TRX2: independent +BEGIN; +INSERT INTO t1 VALUES (2, 2, 2); +INSERT INTO t2 VALUES (1); +COMMIT; +# now t1 contains two rows: (1, 1, 1), (2, 2, 2) +include/include/assert_logical_timestamps.inc [1 2] +# TRX3: independent +INSERT INTO t2 VALUES (3); +# TRX4: depends on TRX2 +DELETE FROM t1 WHERE a = 2; +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [1 3;2 4] +# TRX5: independent +INSERT INTO t2 VALUES (5); +# TRX6: conflict with TRX4 if unique, else with TRX1 +UPDATE t1 SET b = 2, c = 2 WHERE a = 1; +# now t1 contains one row: (1, 2, 2) +include/include/assert_logical_timestamps.inc [1 5;4 6] +# TRX7: independent +INSERT INTO t1 VALUES (3, NULL, 2); +# now t1 contains two rows: (1, 2, 2), (3, NULL, 2) +include/include/assert_logical_timestamps.inc [1 7] +# TRX8: independent +INSERT INTO t2 VALUES (8); +# TRX9: independent (no conflict with TRX7 since multiple NULLs are allowed) +INSERT INTO t1 VALUES (4, NULL, 2); +# now t1 contains three rows: (1, 2, 2), (3, NULL, 2), (4, NULL, 2) +include/include/assert_logical_timestamps.inc [1 8;1 9] +# TRX10: independent +INSERT INTO t2 VALUES (10); +# TRX11: conflict with TRX7 (not with TRX9 since multiple NULLs are allowed) +DELETE FROM t1 WHERE a = 3; +# now t1 contains two rows: (1, 2, 2), (4, NULL, 2) +include/include/assert_logical_timestamps.inc [1 10;7 11] +DROP TABLE t1; +DROP TABLE t2; + +#### 1.0.1.2: WITH PK, NULLABLE, UNIQUE, 2-COLUMN INDEX #### + +CREATE TABLE t1 (a INT PRIMARY KEY, b INT , c INT , UNIQUE INDEX(b, c)); +CREATE TABLE t2 (a INT PRIMARY KEY); +FLUSH LOGS; +include/save_binlog_position.inc +# TRX1: independent +INSERT INTO t1 VALUES (1, 1, 1); +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [0 1] +# TRX2: independent +BEGIN; +INSERT INTO t1 VALUES (2, 2, 2); +INSERT INTO t2 VALUES (1); +COMMIT; +# now t1 contains two rows: (1, 1, 1), (2, 2, 2) +include/include/assert_logical_timestamps.inc [1 2] +# TRX3: independent +INSERT INTO t2 VALUES (3); +# TRX4: depends on TRX2 +DELETE FROM t1 WHERE a = 2; +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [1 3;2 4] +# TRX5: independent +INSERT INTO t2 VALUES (5); +# TRX6: conflict with TRX4 if unique, else with TRX1 +UPDATE t1 SET b = 2, c = 2 WHERE a = 1; +# now t1 contains one row: (1, 2, 2) +include/include/assert_logical_timestamps.inc [1 5;4 6] +# TRX7: independent +INSERT INTO t1 VALUES (3, NULL, 2); +# now t1 contains two rows: (1, 2, 2), (3, NULL, 2) +include/include/assert_logical_timestamps.inc [1 7] +# TRX8: independent +INSERT INTO t2 VALUES (8); +# TRX9: independent (no conflict with TRX7 since multiple NULLs are allowed) +INSERT INTO t1 VALUES (4, NULL, 2); +# now t1 contains three rows: (1, 2, 2), (3, NULL, 2), (4, NULL, 2) +include/include/assert_logical_timestamps.inc [1 8;1 9] +# TRX10: independent +INSERT INTO t2 VALUES (10); +# TRX11: conflict with TRX7 (not with TRX9 since multiple NULLs are allowed) +DELETE FROM t1 WHERE a = 3; +# now t1 contains two rows: (1, 2, 2), (4, NULL, 2) +include/include/assert_logical_timestamps.inc [1 10;7 11] +DROP TABLE t1; +DROP TABLE t2; + +#### 1.1.0.0: WITH PK, NOT NULL, NOT UNIQUE, NO INDEX #### + +CREATE TABLE t1 (a INT PRIMARY KEY, b INT NOT NULL, c INT NOT NULL ); +CREATE TABLE t2 (a INT PRIMARY KEY); +FLUSH LOGS; +include/save_binlog_position.inc +# TRX1: independent +INSERT INTO t1 VALUES (1, 1, 1); +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [0 1] +# TRX2: independent +BEGIN; +INSERT INTO t1 VALUES (2, 2, 2); +INSERT INTO t2 VALUES (1); +COMMIT; +# now t1 contains two rows: (1, 1, 1), (2, 2, 2) +include/include/assert_logical_timestamps.inc [1 2] +# TRX3: independent +INSERT INTO t2 VALUES (3); +# TRX4: depends on TRX2 +DELETE FROM t1 WHERE a = 2; +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [1 3;2 4] +# TRX5: independent +INSERT INTO t2 VALUES (5); +# TRX6: conflict with TRX4 if unique, else with TRX1 +UPDATE t1 SET b = 2, c = 2 WHERE a = 1; +# now t1 contains one row: (1, 2, 2) +include/include/assert_logical_timestamps.inc [1 5;1 6] +DROP TABLE t1; +DROP TABLE t2; + +#### 1.1.0.1: WITH PK, NOT NULL, NOT UNIQUE, 1-COLUMN INDEX #### + +CREATE TABLE t1 (a INT PRIMARY KEY, b INT NOT NULL, c INT NOT NULL , INDEX(b)); +CREATE TABLE t2 (a INT PRIMARY KEY); +FLUSH LOGS; +include/save_binlog_position.inc +# TRX1: independent +INSERT INTO t1 VALUES (1, 1, 1); +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [0 1] +# TRX2: independent +BEGIN; +INSERT INTO t1 VALUES (2, 2, 2); +INSERT INTO t2 VALUES (1); +COMMIT; +# now t1 contains two rows: (1, 1, 1), (2, 2, 2) +include/include/assert_logical_timestamps.inc [1 2] +# TRX3: independent +INSERT INTO t2 VALUES (3); +# TRX4: depends on TRX2 +DELETE FROM t1 WHERE a = 2; +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [1 3;2 4] +# TRX5: independent +INSERT INTO t2 VALUES (5); +# TRX6: conflict with TRX4 if unique, else with TRX1 +UPDATE t1 SET b = 2, c = 2 WHERE a = 1; +# now t1 contains one row: (1, 2, 2) +include/include/assert_logical_timestamps.inc [1 5;1 6] +DROP TABLE t1; +DROP TABLE t2; + +#### 1.1.0.2: WITH PK, NOT NULL, NOT UNIQUE, 2-COLUMN INDEX #### + +CREATE TABLE t1 (a INT PRIMARY KEY, b INT NOT NULL, c INT NOT NULL , INDEX(b, c)); +CREATE TABLE t2 (a INT PRIMARY KEY); +FLUSH LOGS; +include/save_binlog_position.inc +# TRX1: independent +INSERT INTO t1 VALUES (1, 1, 1); +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [0 1] +# TRX2: independent +BEGIN; +INSERT INTO t1 VALUES (2, 2, 2); +INSERT INTO t2 VALUES (1); +COMMIT; +# now t1 contains two rows: (1, 1, 1), (2, 2, 2) +include/include/assert_logical_timestamps.inc [1 2] +# TRX3: independent +INSERT INTO t2 VALUES (3); +# TRX4: depends on TRX2 +DELETE FROM t1 WHERE a = 2; +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [1 3;2 4] +# TRX5: independent +INSERT INTO t2 VALUES (5); +# TRX6: conflict with TRX4 if unique, else with TRX1 +UPDATE t1 SET b = 2, c = 2 WHERE a = 1; +# now t1 contains one row: (1, 2, 2) +include/include/assert_logical_timestamps.inc [1 5;1 6] +DROP TABLE t1; +DROP TABLE t2; + +#### 1.1.1.1: WITH PK, NOT NULL, UNIQUE, 1-COLUMN INDEX #### + +CREATE TABLE t1 (a INT PRIMARY KEY, b INT NOT NULL, c INT NOT NULL , UNIQUE INDEX(b)); +CREATE TABLE t2 (a INT PRIMARY KEY); +FLUSH LOGS; +include/save_binlog_position.inc +# TRX1: independent +INSERT INTO t1 VALUES (1, 1, 1); +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [0 1] +# TRX2: independent +BEGIN; +INSERT INTO t1 VALUES (2, 2, 2); +INSERT INTO t2 VALUES (1); +COMMIT; +# now t1 contains two rows: (1, 1, 1), (2, 2, 2) +include/include/assert_logical_timestamps.inc [1 2] +# TRX3: independent +INSERT INTO t2 VALUES (3); +# TRX4: depends on TRX2 +DELETE FROM t1 WHERE a = 2; +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [1 3;2 4] +# TRX5: independent +INSERT INTO t2 VALUES (5); +# TRX6: conflict with TRX4 if unique, else with TRX1 +UPDATE t1 SET b = 2, c = 2 WHERE a = 1; +# now t1 contains one row: (1, 2, 2) +include/include/assert_logical_timestamps.inc [1 5;4 6] +DROP TABLE t1; +DROP TABLE t2; + +#### 1.1.1.2: WITH PK, NOT NULL, UNIQUE, 2-COLUMN INDEX #### + +CREATE TABLE t1 (a INT PRIMARY KEY, b INT NOT NULL, c INT NOT NULL , UNIQUE INDEX(b, c)); +CREATE TABLE t2 (a INT PRIMARY KEY); +FLUSH LOGS; +include/save_binlog_position.inc +# TRX1: independent +INSERT INTO t1 VALUES (1, 1, 1); +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [0 1] +# TRX2: independent +BEGIN; +INSERT INTO t1 VALUES (2, 2, 2); +INSERT INTO t2 VALUES (1); +COMMIT; +# now t1 contains two rows: (1, 1, 1), (2, 2, 2) +include/include/assert_logical_timestamps.inc [1 2] +# TRX3: independent +INSERT INTO t2 VALUES (3); +# TRX4: depends on TRX2 +DELETE FROM t1 WHERE a = 2; +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [1 3;2 4] +# TRX5: independent +INSERT INTO t2 VALUES (5); +# TRX6: conflict with TRX4 if unique, else with TRX1 +UPDATE t1 SET b = 2, c = 2 WHERE a = 1; +# now t1 contains one row: (1, 2, 2) +include/include/assert_logical_timestamps.inc [1 5;4 6] +DROP TABLE t1; +DROP TABLE t2; +#### CLEAN UP #### +SET @@GLOBAL.binlog_transaction_dependency_tracking= @save_binlog_transaction_dependency_tracking; +SET @@GLOBAL.transaction_write_set_extraction= @save_transaction_write_set_extraction; +include/sync_slave_sql_with_master.inc +SET @@GLOBAL.slave_parallel_workers= @save_slave_parallel_workers; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_history_size-master.opt b/mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_history_size-master.opt new file mode 100644 index 000000000000..c465ea3fc7e3 --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_history_size-master.opt @@ -0,0 +1,3 @@ +--binlog_transaction_dependency_tracking=COMMIT_ORDER +--transaction_write_set_extraction=XXHASH64 +--binlog_transaction_dependency_history_size=6 diff --git a/mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_history_size.test b/mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_history_size.test new file mode 100644 index 000000000000..02c2f2e21363 --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_history_size.test @@ -0,0 +1,135 @@ +################################################################################ +# ==== Purpose ==== +# Test timestamps are generated as expected with smaller +# binlog_transaction_dependency_history_size. +# Test: +# 1. When the new writeset plus the existing history is less than the limit, +# the history is not cleared. +# 2. When the new writeset plus the existing history is equal to the limit, +# the history is not cleared. +# 3. When the history is less than the limit and the writeset plus the history +# is equal to the limit plus one: +# 3.1. the transaction is compared with existing history +# 3.2. the transaction is not inserted into history +# 3.3. the history is cleared +# 4. When the history is equal to the limit and the writeset is a singleton: +# 3.1. the transaction is compared with existing history +# 3.2. the transaction is not inserted into history +# 3.3. the history is cleared +# 5. When the history size is equal to the limit and a transaction updating +# only a key-less table happens, the history is not cleared. +# 6. After history is cleared, it may fallback to COMMIT_ORDER so that a new +# transaction may be found to be non-conflicting with transactions not in +# history. +# +# ==== References ==== +# WL#9556: Writeset-based MTS dependency tracking on master +################################################################################ +--let $rpl_extra_connections_per_server= 7 +--source include/master-slave.inc +--source include/have_binlog_format_row.inc + +--connection master +# Loop between binlog_transaction_dependency_tracking modes +--let $type= 0 +while ($type < 3) +{ + --inc $type + + --connection master + --echo + if ($type == 1) + { + SET GLOBAL binlog_transaction_dependency_tracking = WRITESET; + --echo ######## 1. WRITESET ######## + } + if ($type == 2) + { + SET GLOBAL binlog_transaction_dependency_tracking = WRITESET_SESSION; + --echo ######## 2. WRITESET_SESSION ######## + } + if ($type == 3) + { + SET GLOBAL binlog_transaction_dependency_tracking = COMMIT_ORDER; + --echo ######## 3. COMMIT_ORDER ######## + } + + SELECT @@local.transaction_write_set_extraction, + @@global.transaction_write_set_extraction, + @@binlog_transaction_dependency_tracking, + @@binlog_transaction_dependency_history_size; + + CREATE TABLE test.tab1 (a INT PRIMARY KEY AUTO_INCREMENT NOT NULL); + CREATE TABLE test.tab2 (a INT); + FLUSH LOGS; + + # Expected commit orders: + # for WRITESET and WRITESET_SESSION it is shown below in [] bracket. + # for COMMIT_ORDER it is shown below in {} bracket. + # [0 1] {0 1} Case 1 + --connection server_1_1 + INSERT INTO tab1 VALUES (NULL); # 0 + 1 = 1 + # [1 2] {1 2} Case 1 + --connection server_1_2 + INSERT INTO tab1 VALUES (NULL); # 1 + 1 = 2 + # [1 3] {2 3} Case 2 + --connection server_1_3 + INSERT INTO tab1 VALUES (NULL); # 2 + 1 = 3 + # [3 4] {3 4} Case 5 + --connection server_1_4 + INSERT INTO tab2 VALUES (1); # 3 + 0 = 3 + # [1 5] {4 5} Verify case 5 + 4.1: this should be scheduled in parallel with previous transactions. + --connection server_1_5 + INSERT INTO tab1 VALUES (NULL); # 3 + 1 = 4 -> reset to 0 + # [5 6] {5 6} Verify case 4.2 + 4.3: this should not be scheduled in parallel with previous transactions. + --connection server_1_6 + INSERT INTO tab1 VALUES (NULL); # 0 + 1 = 1 + # [5 7] {6 7} Case 3.1 + --connection server_1_1 + INSERT INTO tab1 VALUES (NULL), (NULL), (NULL); # 1 + 3 = 4 -> reset to 0 + # [7 8] {7 8} Verify case 3.2 + 3.3 + --connection server_1_2 + INSERT INTO tab1 VALUES (NULL); # 0 + 1 = 1 + # [7 9] {8 9} + --connection server_1_3 + INSERT INTO tab1 VALUES (NULL); # 1 + 1 = 2 + # [9 13] {9 13} Case 6 (this is not committed yet, and will be scheduled in parallel with the next + # three transactions even if two of them are not in history when this transaction commits). + --connection server_1_7 + BEGIN; + INSERT INTO tab1 VALUES (NULL); + # [7 10] {9 10} + --connection server_1_4 + INSERT INTO tab1 VALUES (NULL); # 2 + 1 = 3 + # [7 11] {10 11} + --connection server_1_5 + INSERT INTO tab1 VALUES (NULL); # 3 + 1 = 4 -> reset to 0 + # [11 12] {11 12} + --connection server_1_6 + INSERT INTO tab1 VALUES (NULL); # 0 + 1 = 1 + # [9 13] {9 13} Case 6 cont'd + --connection server_1_7 + COMMIT; + + --connection master + --echo # Drop table and flush logs to force binlog to rotate + DROP TABLE test.tab1, test.tab2; + + --let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1) + FLUSH LOGS; + + --echo # Processing binlog... + # For WRITESET and WRITESET_SESSION + --let $logical_timestamps=0 1;1 2;1 3;3 4;1 5;5 6;5 7;7 8;7 9;7 10;7 11;11 12;9 13;13 14 + if ($type == 3) + { # For COMMIT_ORDER + --let $logical_timestamps=0 1;1 2;2 3;3 4;4 5;5 6;6 7;7 8;8 9;9 10;10 11;11 12;9 13;13 14 + } + --source include/assert_logical_timestamps.inc + + --echo # Verify that replication is correct + --source include/sync_slave_sql_with_master.inc +} + +--connection master +--source include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_tracking.test b/mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_tracking.test new file mode 100644 index 000000000000..896d4896ff82 --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_tracking.test @@ -0,0 +1,385 @@ +# ==== Purpose ==== +# +# Test timestamps generated by binlog-transaction-dependency-tracking +# modes WRITESET, WRITESET_SESSION and COMMIT_ORDER. +# +# The following properties are tested: +# - With binlog-transaction-dependency-tracking=WRITESET, the logical timestamps +# are generated as expected, marking each transaction as conflicting with +# transactions having intersecting writesets. +# (type = 0) +# - With binlog-transaction-dependency-tracking=WRITESET_SESSION, transactions +# are additionally marked as conflicting with all previous transactions in the +# same session. +# (type = 1) +# - Additionally, transactions are marked as conflicting with any DDL. +# (step = 2) +# - Additionally, transactions are marked as conflicting if one appears before +# and the other after a binlog rotation. +# (step = 3) +# - Additionally, transactions are marked as conflicting if the writeset history +# was cleared between the transactions. +# (step = 4) +# +# - It tests this for INSERT, UPDATE and DELETE statements. +# +# ==== Implementation ==== +# +# 1. Apply 8 transactions with different data dependencies and check the binary +# log generated (step 1). Do the same with DDL in the middle (step 2), with +# rotation (step 3) and when writeset history becomes full (step 4). +# +# 2. Test Bug#2561672: POST RESET MASTER/FLUSH LOGS SETTING BTDT=WRITESET +# BEHAVES LIKE COMMIT_ORDER +# +# 3. Test ROLLBACK TO SAVEPOINT. +# +# ==== References ==== +# +# WL#9556: Writeset-based MTS dependency tracking on master +# + +--source include/master-slave.inc +--source include/have_binlog_format_row.inc + +--echo #### INITIALIZE #### + +--connection slave +call mtr.add_suppression("Transaction is tagged with inconsistent logical timestamps"); +call mtr.add_suppression("Cannot execute the current event group in the parallel mode."); + +--source include/stop_slave.inc + +SET @save_slave_parallel_type = @@GLOBAL.slave_parallel_type; +SET @save_slave_parallel_workers = @@GLOBAL.slave_parallel_workers; +SET @save_slave_transaction_retries = @@GLOBAL.slave_transaction_retries; + +SET GLOBAL slave_parallel_type = LOGICAL_CLOCK; +SET GLOBAL slave_parallel_workers = 3; +SET GLOBAL slave_transaction_retries = 0; + +--connection master + +SET @save_binlog_transaction_dependency_tracking = @@GLOBAL.binlog_transaction_dependency_tracking; +SET @save_binlog_transaction_dependency_history_size = @@GLOBAL.binlog_transaction_dependency_history_size; +SET @save_transaction_write_set_extraction = @@GLOBAL.transaction_write_set_extraction; + +# for step 4 +SET GLOBAL binlog_transaction_dependency_tracking = COMMIT_ORDER; + +SET GLOBAL transaction_write_set_extraction = XXHASH64; +SET LOCAL transaction_write_set_extraction = XXHASH64; + +--connection master1 +SET LOCAL transaction_write_set_extraction = XXHASH64; + +--connection server_1 +SET LOCAL transaction_write_set_extraction = XXHASH64; + +--connection master + +CREATE TABLE tests (`id` INT NOT NULL, `description` VARCHAR(50), `results` VARCHAR(100), PRIMARY KEY(`id`)); +INSERT INTO `tests` (`id`, `description`, `results`) VALUES +(1, 'Writeset', '0 1;1 2;1 3;1 4;3 5;3 6;4 7;7 8;6 9;9 10'), +(2, 'Writeset+DDL', '0 1;1 2;1 3;1 4;4 5;5 6;6 7;7 8;4 9;7 10;10 11;9 12;12 13'), +(3, 'Writeset+rotation', '0 1;0 2;1 3;3 4;2 5;5 6'), +(4, 'Writeset+history', '0 1;1 2;1 3;1 4;4 5;4 6;4 7;7 8;7 9;9 10'), +(5, 'Writeset_session', '0 1;1 2;1 3;2 4;3 5;3 6;5 7;7 8;7 9;9 10'), +(6, 'Writeset_session+DDL', '0 1;1 2;1 3;2 4;4 5;5 6;6 7;7 8;4 9;8 10;10 11;10 12;12 13'), +(7, 'Writeset_session+rotation', '0 1;0 2;1 3;3 4;3 5;5 6'), +(8, 'Writeset_session+history', '0 1;1 2;1 3;2 4;4 5;4 6;5 7;7 8;7 9;9 10'), +(9, 'Commit_order', '0 1;1 2;1 3;3 4;4 5;4 6;6 7;7 8;7 9;9 10'), +(10, 'Commit_order+DDL', '0 1;1 2;1 3;3 4;4 5;5 6;6 7;7 8;4 9;9 10;10 11;10 12;12 13'), +(11, 'Commit_order+rotation', '0 1;0 2;2 3;3 4;3 5;5 6'), +(12, 'Commit_order+history', '0 1;1 2;1 3;3 4;4 5;4 6;6 7;7 8;7 9;9 10'); + +# flush logs to clear previous transactions +FLUSH LOGS; + +--let $idx= 0 + +--echo #### TEST #### + +# loop between WRITESET and WRITESET_SESSION +--let $type= 0 +while ($type < 3) +{ + --inc $type + + --connection master + if ($type == 1) + { + SET GLOBAL binlog_transaction_dependency_tracking = WRITESET; + --echo ######## 1. WRITESET ######## + } + if ($type == 2) + { + SET GLOBAL binlog_transaction_dependency_tracking = WRITESET_SESSION; + --echo ######## 2. WRITESET_SESSION ######## + } + if ($type == 3) + { + SET GLOBAL binlog_transaction_dependency_tracking = COMMIT_ORDER; + --echo ######## 3. COMMIT_ORDER ######## + } + + # loop between steps + --let $step= 0 + while ($step < 4) + { + --inc $step + --inc $idx + + --let $testname=`SELECT description FROM tests WHERE id=$idx` + --echo #### STEP $type.$step TEST $testname #### + + SET GLOBAL binlog_transaction_dependency_history_size=25000; + if ($step == 4) + { + --echo History size reduced to 10 to test when it becomes full + SET GLOBAL binlog_transaction_dependency_history_size=10; + } + + SELECT @@local.transaction_write_set_extraction, + @@global.transaction_write_set_extraction, + @@binlog_transaction_dependency_tracking, + @@binlog_transaction_dependency_history_size; + + CREATE TABLE `t1` (`id` int(11) NOT NULL, `val` int(11) NOT NULL, + PRIMARY KEY (`id`)) ENGINE=InnoDB; + + --connection master + --echo #TRX2 (session A, independent) + BEGIN; + INSERT INTO t1(id, val) VALUES (1, 0),(2, 0),(3, 0); + + --connection master1 + --echo #TRX1 (session B, independent) + BEGIN; + INSERT INTO t1(id, val) VALUES (4, 0),(5, 0); + COMMIT; + + --connection master + --echo finish TRX2 after TRX1 + COMMIT; + + --connection master1 + --echo #TRX3 (session B, no data dependency, depends on TRX1 (session)) + BEGIN; + INSERT INTO t1(id, val) VALUES (6, 0),(7, 0); + COMMIT; + + --connection master + --echo #TRX5 (session A, depends on TRX2 (session and data) and TRX1(data)) + BEGIN; + INSERT INTO t1(id, val) VALUES (8, 1); + UPDATE t1 SET val=val+1 WHERE id=1; + UPDATE t1 SET val=val+1 WHERE id=4; + + if ($step == 2) + { + --connection master1 + --echo Inserted a DDL after TRX5 and check that they run in parallel due to commit_order + CREATE TABLE `t2` (`id` int(11) NOT NULL, `val` int(11) NOT NULL) ENGINE=InnoDB; + ALTER TABLE t2 ADD COLUMN b INT; + DROP TABLE `t2`; + } + + # flush logs in the middle + if ($step == 3) + { + --connection master1 + --echo Flushing logs in the middle of the set + FLUSH LOGS; + } + + --connection server_1 + --echo #TRX4 (session C, depends on TRX2 (data)) + BEGIN; + UPDATE t1 SET val=val+1 WHERE id=3; + INSERT INTO t1(id, val) VALUES (9, 1); + COMMIT; + + --connection master + --echo finish TRX5 after TRX4 + COMMIT; + + --connection server_1 + --echo #TRX6 (session C, depends on TRX4 (session) and TRX3(data)) + BEGIN; + DELETE FROM t1 WHERE id=6; + COMMIT; + + --connection server_1 + --echo #TRX8 (session C, depends on TRX5 (data) and TRX6 (session)) + BEGIN; + UPDATE t1 SET val=val+1 WHERE id=4; + + --connection master1 + --echo #TRX7 (session B, depends on TRX1 and TRX6 (data) and TRX3 (session)) + BEGIN; + UPDATE t1 SET val=val+1 WHERE id=5; + INSERT INTO t1(id, val) VALUES (6, 0); + COMMIT; + + --connection server_1 + --echo finish TRX8 after TRX7 + COMMIT; + + --connection master + --echo Drop table and flush logs to force binlog to rotate + DROP TABLE t1; + + --let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1) + --echo Processing binlog $binlog_file + FLUSH LOGS; + + --let $source_file= $server_1_datadir/$binlog_file + --let $logical_timestamps=`SELECT results FROM tests WHERE id=$idx` + --source include/assert_logical_timestamps.inc + } +} + +--echo +--echo #### Verify that replication was correct #### + +--connection slave +--source include/start_slave.inc + +--connection master +--source include/sync_slave_sql_with_master.inc + +--let $diff_tables= master:test.tests, slave:test.tests +--source include/diff_tables.inc + +--connection master +DROP TABLE `tests`; +--source include/sync_slave_sql_with_master.inc + +--connection master +SET GLOBAL binlog_transaction_dependency_tracking= WRITESET; +SET GLOBAL binlog_transaction_dependency_history_size= DEFAULT; +FLUSH LOGS; + +--echo +--echo #### Bug#25616372, PART1 #### +CREATE TABLE t1 (a INT PRIMARY KEY NOT NULL AUTO_INCREMENT); # 0 1 +INSERT INTO t1 VALUES (null); # 1 2 +INSERT INTO t1 VALUES (null); # 1 3 +set global binlog_transaction_dependency_tracking=WRITESET; +INSERT INTO t1 VALUES (null); # 3 4 +INSERT INTO t1 VALUES (null); # 3 5 +--let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1) +-- echo Processing binlog $binlog_file +--let $source_file= $server_1_datadir/$binlog_file +--let $logical_timestamps=0 1;1 2;1 3;3 4;3 5 +--source include/assert_logical_timestamps.inc +FLUSH LOGS; + +--echo +--echo #### Bug#25616372, PART2 #### +INSERT INTO t1 VALUES (null); # 0 1 +INSERT INTO t1 VALUES (null); # 0 2 +set global binlog_transaction_dependency_tracking=WRITESET; +INSERT INTO t1 VALUES (null); # 2 3 +INSERT INTO t1 VALUES (null); # 3 4. # It should be 2 4 +INSERT INTO t1 VALUES (null); # 4 5. # It should be 2 5 +--let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1) +-- echo Processing binlog $binlog_file +--let $source_file= $server_1_datadir/$binlog_file +--let $logical_timestamps=0 1;1 2;2 3;2 4;2 5 +--source include/assert_logical_timestamps.inc +DROP TABLE t1; +FLUSH LOGS; + +# +# Test ROLLBACK TO SAVEPOINT. The rolled-back rows will still have their +# hashes in the writeset and may cause spurious conflicts. +# +--echo +-- echo #### Test ROLLBACK TO SAVEPOINT #### +CREATE TABLE t1 (a INT PRIMARY KEY); +CREATE TABLE nopk (a INT); +CREATE TABLE parent (a INT PRIMARY KEY); +CREATE TABLE child (a INT PRIMARY KEY, FOREIGN KEY (a) REFERENCES parent(a)); + +--echo # 1. Hashes of rolled-back rows are removed from writeset +FLUSH LOGS; +INSERT INTO t1 VALUES (1); +BEGIN; + SAVEPOINT sp; + UPDATE t1 SET a = 2; + ROLLBACK TO sp; + INSERT INTO t1 VALUES (2); +COMMIT; +INSERT INTO t1 VALUES (3); + +--let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1) +--echo Processing binlog $binlog_file +--let $source_file= $server_1_datadir/$binlog_file +--let $logical_timestamps=0 1;1 2;1 3 +--source include/assert_logical_timestamps.inc + +--echo # 2. If transaction is flagged as updating a non-index table, the flag is not rolled-back +FLUSH LOGS; +INSERT INTO t1 VALUES (4); +BEGIN; + SAVEPOINT sp; + INSERT INTO nopk VALUES (1); + ROLLBACK TO sp; + INSERT INTO t1 VALUES (5); +COMMIT; +INSERT INTO t1 VALUES (6); + +--let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1) +--echo Processing binlog $binlog_file +--let $source_file= $server_1_datadir/$binlog_file +--let $logical_timestamps=0 1;1 2;1 3 +--source include/assert_logical_timestamps.inc + +--echo # 3. If transaction is flagged as updating a foreign key parent table, the flag is not rolled-back +FLUSH LOGS; +INSERT INTO t1 VALUES (7); +BEGIN; + SAVEPOINT sp; + INSERT INTO parent VALUES (1); + ROLLBACK TO sp; + INSERT INTO t1 VALUES (8); +COMMIT; +INSERT INTO t1 VALUES (9); + +--let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1) +--echo Processing binlog $binlog_file +--let $source_file= $server_1_datadir/$binlog_file +--let $logical_timestamps=0 1;1 2;2 3 +--source include/assert_logical_timestamps.inc + +--echo # Clean up SAVEPOINT tests +DROP TABLE t1; +DROP TABLE nopk; +DROP TABLE child; +DROP TABLE parent; + +# +# Cleanup +# +--echo +--echo #### CLEANUP #### + +--source include/sync_slave_sql_with_master.inc +--source include/stop_slave.inc + +SET @@GLOBAL.slave_parallel_type= @save_slave_parallel_type; +SET @@GLOBAL.slave_parallel_workers= @save_slave_parallel_workers; +SET @@GLOBAL.slave_transaction_retries= @save_slave_transaction_retries; + +--source include/start_slave.inc + +--connection master +SET GLOBAL binlog_transaction_dependency_tracking = COMMIT_ORDER; +SET @@GLOBAL.transaction_write_set_extraction= @save_transaction_write_set_extraction; +SET @@GLOBAL.binlog_transaction_dependency_tracking= @save_binlog_transaction_dependency_tracking; +SET @@GLOBAL.binlog_transaction_dependency_history_size= @save_binlog_transaction_dependency_history_size; + +--source include/rpl_end.inc + diff --git a/mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_tracking_with_empty_trxs.test b/mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_tracking_with_empty_trxs.test new file mode 100644 index 000000000000..0d9321656b6d --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_tracking_with_empty_trxs.test @@ -0,0 +1,71 @@ +# ==== Purpose ==== +# +# Verify that we can avoid clearing writeset history when executing an empty +# transaction if binlog-transaction-dependency-tracking is set to WRITESET. +# +# ==== Implementation ==== +# +# 1. Exectute some DDLs and DMls on master. +# 2. Sync slave sql with master and filter out these DDLs and DMls on slave, +# then they become empty transactions when applying them on slave. +# 3. Verify that last_committed is not increased, since writeset history +# is not cleared when applying these empty transactions on slave. +# +# ==== References ==== +# +# Bug #25982097 WRITESET DEPENDENCY TRACKING SUB-OPTIMAL AFTER ROTATION OR ON EMPTY TRANSACTIONS + +# Test in this file only makes sense in standard replication, +# so it is skipped in group replication. +--source include/not_group_replication_plugin.inc +# Test in this file is binlog format agnostic, thus no need +# to rerun it for every format. +--source include/have_binlog_format_row.inc +--source include/have_gtid.inc +--let $rpl_skip_start_slave= 1 +--source include/master-slave.inc + +--source include/rpl_connection_slave.inc +# The following logical timestamps check needs fresh slave server. +RESET MASTER; +# Set the filter rule to filter out these DDLs and DMls on slave. +CHANGE REPLICATION FILTER REPLICATE_IGNORE_TABLE= (test.t1); +SET @save_binlog_transaction_dependency_tracking= @@GLOBAL.binlog_transaction_dependency_tracking; +SET @save_transaction_write_set_extraction= @@GLOBAL.transaction_write_set_extraction; +SET GLOBAL binlog_transaction_dependency_tracking= COMMIT_ORDER; +SET GLOBAL transaction_write_set_extraction= XXHASH64; +SET LOCAL transaction_write_set_extraction= XXHASH64; +SET GLOBAL binlog_transaction_dependency_tracking= WRITESET; +--source include/start_slave.inc + +--source include/rpl_connection_master.inc +CREATE TABLE t1 (c1 INT); +INSERT INTO t1 VALUES (1); +INSERT INTO t1 VALUES (2); +INSERT INTO t1 VALUES (3); + +--source include/sync_slave_sql_with_master.inc +--echo # +--echo # Verify that the value of last_committed is not increased, +--echo # since writeset history is not cleared when applying +--echo # these empty transactions on slave. +--echo # +--let $logical_timestamps=0 1;0 2;0 3;0 4 +--let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1) +--echo Processing binlog $binlog_file +--let $source_file= $server_2_datadir/$binlog_file +--source include/assert_logical_timestamps.inc + +# Cleanup +--source include/rpl_connection_master.inc +DROP TABLE t1; + +--source include/sync_slave_sql_with_master.inc +--source include/stop_slave_sql.inc +SET GLOBAL binlog_transaction_dependency_tracking= COMMIT_ORDER; +SET @@GLOBAL.transaction_write_set_extraction= @save_transaction_write_set_extraction; +SET @@GLOBAL.binlog_transaction_dependency_tracking= @save_binlog_transaction_dependency_tracking; +CHANGE REPLICATION FILTER REPLICATE_IGNORE_TABLE= (); +--source include/start_slave_sql.inc + +--source include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_tracking_with_filters.test b/mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_tracking_with_filters.test new file mode 100644 index 000000000000..099dbd96e396 --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_tracking_with_filters.test @@ -0,0 +1,183 @@ +################################################################################ +# ==== Purpose ==== +# Test that filtered transaction resets commit_parent since it doesn't generate +# any writesets. +# Modes checked: +# COMMIT_ORDER | WRITESET | WRITESET_SESSION +# +# ==== Implementation ==== +# 1. Add transactions with different dependency tracking and empty transactions +# on master. +# 2. Test timestamps order with filtered and non-filtered transactions on Slave. +# a) No filtering: DDL and DMLs on 'test' database are not filtered. +# b) Empty transactions from master. +# c) Filtering (modified transactions): DDLs and DMLs due to rerwite rule +# 'db1->db2'. +# d) Filtering (empty transactions): DDLs and DMLs on 'nodb' database. +# 3. Clean up. +# +# ==== References ==== +# WL#9556: Writeset-based MTS dependency tracking on master +################################################################################ + +--source include/master-slave.inc +--source include/have_binlog_format_row.inc +--source include/not_mts_slave_parallel_workers.inc + +--source include/rpl_connection_master.inc +# Take backup of variables. +SET @save_binlog_transaction_dependency_tracking = @@GLOBAL.binlog_transaction_dependency_tracking; +SET @save_transaction_write_set_extraction = @@GLOBAL.transaction_write_set_extraction; +# Set variables. +SET GLOBAL binlog_transaction_dependency_tracking = COMMIT_ORDER; +SET GLOBAL transaction_write_set_extraction = XXHASH64; +SET LOCAL transaction_write_set_extraction = XXHASH64; + +--source include/rpl_connection_slave.inc +# Set filter rule. +--source include/stop_slave.inc +CHANGE REPLICATION FILTER REPLICATE_REWRITE_DB=((db1,db2)), + REPLICATE_IGNORE_DB=(nodb); +--source include/start_slave.inc +# Take backup of variables. +SET @save_binlog_transaction_dependency_tracking = @@GLOBAL.binlog_transaction_dependency_tracking; +SET @save_transaction_write_set_extraction = @@GLOBAL.transaction_write_set_extraction; +# Set variables. +SET GLOBAL binlog_transaction_dependency_tracking = COMMIT_ORDER; +SET GLOBAL transaction_write_set_extraction = XXHASH64; +SET LOCAL transaction_write_set_extraction = XXHASH64; + +--source include/rpl_connection_master.inc +--echo # +--echo # 1. Add transactions with different dependency tracking and empty transaction +--echo # on master. +--echo # +CREATE DATABASE nodb; # 0 1 +CREATE DATABASE db1; # 1 2 +CREATE DATABASE db2; # 2 3 +USE nodb; CREATE TABLE nodbt1 (a INT PRIMARY KEY NOT NULL AUTO_INCREMENT); # 3 4 +USE db1; CREATE TABLE db1t1 (a INT PRIMARY KEY NOT NULL AUTO_INCREMENT); # 4 5 +USE test; CREATE TABLE t1 (a INT PRIMARY KEY NOT NULL AUTO_INCREMENT); # 5 6 + +USE db1; +INSERT INTO db1t1 VALUES (NULL); # 6 7 +INSERT INTO db1t1 VALUES (NULL); # 7 8 +SET GLOBAL binlog_transaction_dependency_tracking= WRITESET_SESSION; +INSERT INTO db1t1 VALUES (NULL); # 8 9 +INSERT INTO db1t1 VALUES (NULL); # 9 10 +USE nodb; +INSERT INTO nodbt1 VALUES (NULL); # 10 11 +INSERT INTO nodbt1 VALUES (NULL); # 11 12 +SET GLOBAL binlog_transaction_dependency_tracking= WRITESET; +INSERT INTO nodbt1 VALUES (NULL); # 12 13 +INSERT INTO nodbt1 VALUES (NULL); # 12 14 +USE test; +INSERT INTO t1 VALUES (NULL); # 12 15 +INSERT INTO t1 VALUES (NULL); # 12 16 +SET GLOBAL binlog_transaction_dependency_tracking= COMMIT_ORDER; +INSERT INTO t1 VALUES (NULL); # 16 17 +INSERT INTO t1 VALUES (NULL); # 17 18 + +DROP DATABASE nodb; # 18 19 +DROP DATABASE db1; # 19 20 +DROP DATABASE db2; # 20 21 +DROP TABLE test.t1; # 21 22 + +if ( `SELECT @@GLOBAL.GTID_MODE = "ON"` ) +{ + --disable_query_log + SET @@SESSION.GTID_NEXT = 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1'; + COMMIT; # 22 23 + --let $server1_uuid= `SELECT @@GLOBAL.SERVER_UUID` + eval SET @@SESSION.GTID_NEXT = '$server1_uuid:23'; + COMMIT; # 23 24 + SET @@SESSION.GTID_NEXT = 'AUTOMATIC'; + --enable_query_log +} + +SELECT @@global.transaction_write_set_extraction, @@binlog_transaction_dependency_tracking; +--let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1) +--let $dont_print_logical_timestamps= 1 +--let $logical_timestamps=0 1;1 2;2 3;3 4;4 5;5 6;6 7;7 8;8 9;9 10;10 11;11 12;12 13;12 14;12 15;12 16;16 17;17 18;18 19;19 20;20 21;21 22 +if ( `SELECT @@GLOBAL.GTID_MODE = "ON"` ) +{ + --let $logical_timestamps=0 1;1 2;2 3;3 4;4 5;5 6;6 7;7 8;8 9;9 10;10 11;11 12;12 13;12 14;12 15;12 16;16 17;17 18;18 19;19 20;20 21;21 22;22 23;23 24 +} +--source include/assert_logical_timestamps.inc + +--echo # +--echo # 2. Test timestamps order with filtered and non-filtered transactions on Slave. +--echo # +--source include/sync_slave_sql_with_master.inc +--echo [On Slave] +--echo ######## 2.1. COMMIT_ORDER with SLAVE ######## +SELECT @@global.transaction_write_set_extraction, @@binlog_transaction_dependency_tracking; +--let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1) +--let $dont_print_logical_timestamps= 1 +--let $logical_timestamps=0 1;1 2;2 3;3 4;4 5;5 6;6 7;7 8;8 9;9 10;10 11;11 12;12 13;13 14;14 15 +if ( `SELECT @@GLOBAL.GTID_MODE = "ON"` ) +{ + --let $logical_timestamps=0 1;1 2;2 3;3 4;4 5;5 6;6 7;7 8;8 9;9 10;10 11;11 12;12 13;13 14;14 15;15 16;16 17;17 18;18 19;19 20;20 21;21 22;22 23;23 24 +} +--source include/assert_logical_timestamps.inc + +# Clean up logs to test with WRITESET in next step. +--source include/stop_slave.inc +RESET SLAVE; +RESET MASTER; + +--echo +--echo ######## 2.2. WRITESET with SLAVE ######## +SET GLOBAL binlog_transaction_dependency_tracking = WRITESET; +--source include/start_slave.inc +--connection master +--source include/sync_slave_sql_with_master.inc +SELECT @@global.transaction_write_set_extraction, @@binlog_transaction_dependency_tracking; +--let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1) +--let $dont_print_logical_timestamps= 1 +--let $logical_timestamps=0 1;1 2;2 3;3 4;4 5;4 6;4 7;4 8;4 9;4 10;4 11;4 12;12 13;13 14;14 15 +if ( `SELECT @@GLOBAL.GTID_MODE = "ON"` ) +{ + --let $logical_timestamps=0 1;1 2;2 3;3 4;4 5;5 6;6 7;6 8;6 9;6 10;6 11;6 12;6 13;6 14;6 15;6 16;6 17;6 18;6 19;19 20;20 21;21 22;22 23;22 24 +} +--source include/assert_logical_timestamps.inc + +# Clean up logs to test with WRITESET_SESSION in next step. +--source include/stop_slave.inc +RESET SLAVE; +RESET MASTER; + +--echo +--echo ######## 2.3. WRITESET_SESSION with SLAVE ######## +SET GLOBAL binlog_transaction_dependency_tracking = WRITESET_SESSION; +--source include/start_slave.inc +--connection master +--source include/sync_slave_sql_with_master.inc +SELECT @@global.transaction_write_set_extraction, @@binlog_transaction_dependency_tracking; +--let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1) +--let $dont_print_logical_timestamps= 1 +--let $logical_timestamps=0 1;1 2;2 3;3 4;4 5;5 6;6 7;7 8;8 9;9 10;10 11;11 12;12 13;13 14;14 15 +if ( `SELECT @@GLOBAL.GTID_MODE = "ON"` ) +{ + --let $logical_timestamps=0 1;1 2;2 3;3 4;4 5;5 6;6 7;7 8;8 9;9 10;10 11;11 12;12 13;13 14;14 15;15 16;16 17;17 18;18 19;19 20;20 21;21 22;22 23;23 24 +} +--source include/assert_logical_timestamps.inc + +--echo +--echo # 3. Clean up. +--source include/rpl_connection_master.inc +SET @@GLOBAL.transaction_write_set_extraction= @save_transaction_write_set_extraction; +SET @@GLOBAL.binlog_transaction_dependency_tracking= @save_binlog_transaction_dependency_tracking; + +--source include/sync_slave_sql_with_master.inc +--echo [On Slave] +--let $dont_print_logical_timestamps= +SET GLOBAL binlog_transaction_dependency_tracking = COMMIT_ORDER; +SET @@GLOBAL.binlog_transaction_dependency_tracking= @save_binlog_transaction_dependency_tracking; +SET @@GLOBAL.transaction_write_set_extraction= @save_transaction_write_set_extraction; + +--source include/stop_slave.inc +CHANGE REPLICATION FILTER REPLICATE_REWRITE_DB=(), REPLICATE_IGNORE_DB=(); +--source include/start_slave.inc + +--source include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_tracking_with_fk-master.opt b/mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_tracking_with_fk-master.opt new file mode 100644 index 000000000000..12099c2d182a --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_tracking_with_fk-master.opt @@ -0,0 +1,2 @@ +--binlog_transaction_dependency_tracking=COMMIT_ORDER +--transaction_write_set_extraction=XXHASH64 diff --git a/mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_tracking_with_fk.test b/mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_tracking_with_fk.test new file mode 100644 index 000000000000..70c552ae3596 --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_tracking_with_fk.test @@ -0,0 +1,212 @@ +################################################################################ +# ==== Purpose ==== +# Test referential actions of the foreign keys with different +# binlog_transaction_dependency_tracking modes. +# Referential actions: +# RESTRICT | NO ACTION | CASCADE | SET NULL | SET DEFAULT +# Note* Table definition containing SET DEFAULT gets rejected thus not tested. +# Modes: +# COMMIT_ORDER | WRITESET | WRITESET_SESSION +# Note* COMMIT_ORDER is purposefully not tested with this test. +# +# ==== Implementation ==== +# 1. FK parent table: +# 1.1. Marked as conflicting with previous transactions. +# 1.2. Clears history. +# 1.3. Marked as conflicting with later transactions. +# 1.4. Falls back to COMMIT_ORDER, so *not* marked as conflicting with previous transactions +# committing in parallel. +# 1.5. Later transactions fall back to COMMIT_ORDER, so they are *not* marked as conflicting with +# this transaction if executing in parallel with it. +# +# 2. FK child table: +# 2.1. Can run in parallel with previous transactions. +# 2.2. Does not clear history. +# 2.3. Can run in parallel with subsequent transactions. +# +# 3. All the above is tested with INSERT, UPDATE, and DELETEs. +# +# 4. All the above is tested with RESTRICT, NO ACTION, CASCADE, SET NULL. +# +# 5. All the above is tested with ON UPDATE and ON DELETE. +# +# 6. All the above is tested with WRITESET_SESSION and WRITESET. +# +# ==== References ==== +# WL#9556: Writeset-based MTS dependency tracking on master +################################################################################ +--let $rpl_extra_connections_per_server= 8 +--source include/master-slave.inc +--source include/have_binlog_format_row.inc + +--connection master +SET @save_binlog_transaction_dependency_tracking = @@GLOBAL.binlog_transaction_dependency_tracking; +SET @save_transaction_write_set_extraction = @@GLOBAL.transaction_write_set_extraction; + +--let $row_count= 1 +--let $referential_action= 0 +# RESTRICT, NO ACTION, CASCADE, SET NULL +while ($referential_action < 4) +{ + # WRITESET, WRITESET_SESSION + --let $dependency_tracking= 0 + while ($dependency_tracking < 2) + { + --connection master + if ($referential_action == 0) + { + --let $ref_action= RESTRICT + --let $error_success= ER_ROW_IS_REFERENCED_2 + } + if ($referential_action == 1) + { + --let $ref_action= NO ACTION + --let $error_success= ER_ROW_IS_REFERENCED_2 + } + if ($referential_action == 2) + { + --let $ref_action= CASCADE + --let $error_success= 0 + } + if ($referential_action == 3) + { + --let $ref_action= SET NULL + --let $error_success= 0 + } + + --echo + if ($dependency_tracking == 0) + { + SET GLOBAL binlog_transaction_dependency_tracking = WRITESET; + --let $text= $row_count. Test referential action $ref_action with WRITESET. + } + if ($dependency_tracking == 1) + { + SET GLOBAL binlog_transaction_dependency_tracking = WRITESET_SESSION; + --let $text= $row_count. Test referential action $ref_action with WRITESET_SESSION. + } + + # Header according to all the parameters. + --echo ######## $text ######## + SELECT @@local.transaction_write_set_extraction, + @@global.transaction_write_set_extraction, + @@binlog_transaction_dependency_tracking; + + # In all these 8 cases, behavior should be identical. + CREATE TABLE parent1 (a INT NOT NULL PRIMARY KEY, b VARCHAR(50)); + CREATE TABLE parent2 (a INT NOT NULL PRIMARY KEY, b VARCHAR(50)); + CREATE TABLE t1 (a INT PRIMARY KEY); + --eval CREATE TABLE child1 (a INT PRIMARY KEY, b INT, FOREIGN KEY(b) REFERENCES parent1 (a) ON UPDATE $ref_action) + --eval CREATE TABLE child2 (a INT PRIMARY KEY, b INT, FOREIGN KEY(b) REFERENCES parent2 (a) ON DELETE $ref_action) + INSERT INTO parent1 VALUES (1, 1), (2, 2); + INSERT INTO parent2 VALUES (1, 1), (2, 2); + FLUSH LOGS; + + --echo # Case 2.1, 2.2, 2.3 + # [0 1] + --connection server_1_1 + INSERT INTO child1 VALUES (1, 1); + + # [1 2] + --connection server_1_2 + INSERT INTO child2 VALUES (1, 1); + + # [1 3] + --connection server_1_1 + UPDATE child1 SET a = 2; + + # [2 4] + --connection server_1_2 + UPDATE child2 SET a = 2; + + # [3 5] + --connection server_1_1 + DELETE FROM child1; + + # [4 6] + --connection server_1_2 + DELETE FROM child2; + + --echo # Case 1.1, 1.2, 1.3 + # [1 7] + --connection server_1_3 + INSERT INTO t1 VALUES (1); + + # [7 8] + --connection server_1_4 + INSERT INTO parent1 VALUES (3, 3); + + # [8 9] + --connection server_1_5 + INSERT INTO t1 VALUES (2); + + --echo # Case 1.4, 1.5 + # [8 10] + --connection server_1_6 + BEGIN; + INSERT INTO t1 VALUES (3); + INSERT INTO child1 VALUES (1, 1); + # [9 11] + --connection server_1_7 + BEGIN; + INSERT INTO parent1 VALUEs (4, 4); + INSERT INTO child2 VALUES (1, 1); + # [9 12] + --connection server_1_8 + BEGIN; + INSERT INTO t1 VALUES (4); + # Commit the above. + --connection server_1_6 + COMMIT; + --connection server_1_7 + COMMIT; + --connection server_1_8 + COMMIT; + + # [11 13] Verify again that history is cleared + --connection server_1_1 + INSERT INTO t1 VALUES (5); + + # [13 14] With CASCADE and SET NULL + --connection server_1_2 + --error $error_success + UPDATE parent1 SET a=5 WHERE a=1; + + # [14 15] With CASCADE and SET NULL + --connection server_1_3 + --error $error_success + DELETE FROM parent2 WHERE a=1; + + --echo # Drop table and flush logs to force binlog to rotate + --connection master + DROP TABLE child2, parent2, child1, parent1, t1; + + --let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1) + FLUSH LOGS; + + --echo # Processing binlog... + # For RESTRICT and NO ACTION + --let $logical_timestamps=0 1;1 2;1 3;2 4;3 5;4 6;1 7;7 8;8 9;8 10;9 11;9 12;11 13;13 14 + if ($referential_action >= 2) + { + # For CASCADE and SET NULL + --let $logical_timestamps=0 1;1 2;1 3;2 4;3 5;4 6;1 7;7 8;8 9;8 10;9 11;9 12;11 13;13 14;14 15;15 16 + } + --source include/assert_logical_timestamps.inc + + --echo # Verify that replication is correct + --source include/sync_slave_sql_with_master.inc + + --inc $dependency_tracking + --inc $row_count + } + --inc $referential_action +} + +--echo +--echo # Clean up +--connection master +SET @@GLOBAL.binlog_transaction_dependency_tracking= @save_binlog_transaction_dependency_tracking; +SET @@GLOBAL.transaction_write_set_extraction= @save_transaction_write_set_extraction; + +--source include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_tracking_with_indexes.test b/mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_tracking_with_indexes.test new file mode 100644 index 000000000000..ed556e96d365 --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_tracking_with_indexes.test @@ -0,0 +1,319 @@ +# ==== Purpose ==== +# +# Verify that logical timestamps are generated correctly for all types +# of indexes when binlog_transaction_dependency_tracking=WRITESET. +# +# The following properties are tested: +# +# P1. Any transaction that updates a table having no primary key, must +# (a) depend on the previous transaction, but (b) must not clear +# history. +# +# P1.1. This must hold if the transaction has no writeset. +# (e.g. it updates only the no-pk table; a no-pk table will +# not add to the writeset). +# +# P1.2. This must hold if the transaction has a writeset. +# (e.g. it updates some other table too). +# +# P2. Any transaction that only updates tables having primary keys +# must compute its dependencies using the writeset. (In contrast +# with P1). +# +# P3. A UNIQUE index with NOT NULL constraints on all columns counts +# as a primary key too. +# +# P4. If there is both a primary key and other keys, then uniqueness +# constraints due to the other keys generate dependencies too. +# +# P5. If there is both a primary key and nullable columns, then NULL +# values in the same column do not conflict. +# +# ==== Implementation ==== +# +# Repeatedly define a table t1 with three columns a, b, c, using all +# combinations of the following parameters: +# +# A. Without/with explicit primary key on a. +# +# B. Without/with NOT NULL constraints on b and c. +# +# C. Without/with uniqueness constraints on b and/or c. +# +# D. Without index on b and c/with index on b/with index on c. +# (Skip the no-index case if uniqueness constraints are required). +# +# This gives 20 combinations. For each such combination, execute the +# following: +# +# INSERT (1, 1, 1) +# INSERT (2, 2, 2) +# -> should be independent +# DELETE (2, 2, 2) +# -> should depend on insert (2, 2, 2) +# UPDATE (1, 1, 1) to (1, 2, 2) +# -> if there are uniqueness constraints on b and/or c, this should +# depend on delete (2, 2, 2) (and that verifies P4). Otherwise, depend +# on insert (1, 1, 1). When there is a pk, this verifies P1.1, otherwise +# it verifies P2. +# if columns b and c are nullable: +# INSERT (3, NULL, 2) +# -> should be independent +# INSERT (4, NULL, 2) +# -> should be independent since multiple NULL values are allowed. +# This verifies P5. +# DELETE (3, NULL, 2) +# -> should depend on insert (3, NULL, 2) but not on insert (4, NULL, 2) +# This verifies P5. +# +# To verify P1(b), execute extra, independent transactions updating +# another table t2 after some of the statements above (e.g. after +# delete (2, 2, 2)). Verify that the extra transaction is marked as +# independent of all the previous ones. +# +# To verify P1.2, include a statement doing an independent insert into +# t2 within the same transaction that inserts (2, 2, 2) in t1. +# +# To distinguish the cases that DELETE (2, 2, 2) depends on INSERT (2, +# 2, 2) (when there is a pk) from the case that it is executed in +# isolation due to not having a pk, we precede it by an independent +# transaction updating another table, t2. Similar for UPDATE (1, 1, +# 1) to (2, 2, 2), for INSERT (4, NULL, 2), and for DELETE (3, NULL, +# 2). +# +# P3 is verified in the loop iterations where we use both NOT NULL and +# UNIQUE. +# +# ==== References ==== +# +# WL#9556: Writeset-based MTS dependency tracking on master + +--source include/have_binlog_format_row.inc +--source include/master-slave.inc + +--echo #### INITIALIZE #### + +--source include/rpl_connection_slave.inc +--source include/stop_slave.inc +SET @save_slave_parallel_workers= @@GLOBAL.slave_parallel_workers; +SET @@GLOBAL.slave_parallel_workers= 4; +--source include/start_slave.inc + +--source include/rpl_connection_master.inc +SET @save_binlog_transaction_dependency_tracking = @@GLOBAL.binlog_transaction_dependency_tracking; +SET @save_transaction_write_set_extraction = @@GLOBAL.transaction_write_set_extraction; + +SET GLOBAL binlog_transaction_dependency_tracking = COMMIT_ORDER; +SET GLOBAL transaction_write_set_extraction = XXHASH64; +SET SESSION transaction_write_set_extraction = XXHASH64; +SET GLOBAL binlog_transaction_dependency_tracking = WRITESET; + +# Tell assert_logical_timestamps to save the current position so that +# the next call will continue where the current ended. +--let $save_binlog_position= 1 + +# First without any explicit PRIMARY KEY, then with one on column a. +--let $explicit_pk= 0 +while ($explicit_pk < 2) +{ + + # First with columns b and c NULL-able, then with NOT NULL on both. + --let $nonnull= 0 + while ($nonnull < 2) + { + + # First without uniqueness constraints on second index, then with. + --let $unique= 0 + while ($unique < 2) + { + + # First without index (unless $unique==1), then with 1-column + # index, then with 2-column index. + --let $colcount= $unique + while ($colcount < 3) + { + + # Determine if there is a primary key. Unique non-null indexes + # count as primary if there is no explicit primary key. + --let $pk= 0 + if ($explicit_pk) + { + --let $pk= 1 + } + if ($unique) + { + if ($nonnull) + { + --let $pk= 1 + } + } + + # Compute table definition and header according to all the parameters. + --let $text= $explicit_pk.$nonnull.$unique.$colcount + if ($explicit_pk == 0) + { + --let $text= $text: WITHOUT PK + --let $first_column_def= a INT + } + if ($explicit_pk == 1) + { + --let $text= $text: WITH PK + --let $first_column_def= a INT PRIMARY KEY + } + if ($nonnull == 0) + { + --let $text= $text, NULLABLE + --let $not_null_def= + } + if ($nonnull == 1) + { + --let $text= $text, NOT NULL + --let $not_null_def= NOT NULL + } + if ($unique == 0) + { + --let $text= $text, NOT UNIQUE + --let $unique_def= + } + if ($unique == 1) + { + --let $text= $text, UNIQUE + --let $unique_def= UNIQUE + } + if ($colcount == 0) + { + --let $text= $text, NO INDEX + --let $second_index_def= + } + if ($colcount == 1) + { + --let $text= $text, 1-COLUMN INDEX + --let $second_index_def= , $unique_def INDEX(b) + } + if ($colcount == 2) + { + --let $text= $text, 2-COLUMN INDEX + --let $second_index_def= , $unique_def INDEX(b, c) + } + + --echo + --echo #### $text #### + --echo + + eval CREATE TABLE t1 ($first_column_def, b INT $not_null_def, c INT $not_null_def $second_index_def); + CREATE TABLE t2 (a INT PRIMARY KEY); + + FLUSH LOGS; + --source include/save_binlog_position.inc + + --echo # TRX1: independent + INSERT INTO t1 VALUES (1, 1, 1); + + --echo # now t1 contains one row: (1, 1, 1) + --let $logical_timestamps= 0 1 + --source include/assert_logical_timestamps.inc + + --echo # TRX2: independent + BEGIN; + INSERT INTO t1 VALUES (2, 2, 2); + INSERT INTO t2 VALUES (1); + COMMIT; + + --echo # now t1 contains two rows: (1, 1, 1), (2, 2, 2) + if ($pk) { --let $logical_timestamps= 1 2 + } + if (!$pk) { --let $logical_timestamps= 1 2 + } + --source include/assert_logical_timestamps.inc + + --echo # TRX3: independent + INSERT INTO t2 VALUES (3); + --echo # TRX4: depends on TRX2 + DELETE FROM t1 WHERE a = 2; + + --echo # now t1 contains one row: (1, 1, 1) + if ($pk) { --let $logical_timestamps= 1 3;2 4 + } + if (!$pk) { --let $logical_timestamps= 1 3;3 4 + } + --source include/assert_logical_timestamps.inc + + --echo # TRX5: independent + INSERT INTO t2 VALUES (5); + --echo # TRX6: conflict with TRX4 if unique, else with TRX1 + UPDATE t1 SET b = 2, c = 2 WHERE a = 1; + + --echo # now t1 contains one row: (1, 2, 2) + if ($pk) { + if ($unique) { --let $logical_timestamps= 1 5;4 6 + } + if (!$unique) { --let $logical_timestamps= 1 5;1 6 + } + } + if (!$pk) { --let $logical_timestamps= 1 5;5 6 + } + --source include/assert_logical_timestamps.inc + + if (!$nonnull) + { + + --echo # TRX7: independent + INSERT INTO t1 VALUES (3, NULL, 2); + + --echo # now t1 contains two rows: (1, 2, 2), (3, NULL, 2) + if ($pk) { --let $logical_timestamps= 1 7 + } + if (!$pk) { --let $logical_timestamps= 6 7 + } + --source include/assert_logical_timestamps.inc + + --echo # TRX8: independent + INSERT INTO t2 VALUES (8); + --echo # TRX9: independent (no conflict with TRX7 since multiple NULLs are allowed) + INSERT INTO t1 VALUES (4, NULL, 2); + + --echo # now t1 contains three rows: (1, 2, 2), (3, NULL, 2), (4, NULL, 2) + if ($pk) { --let $logical_timestamps= 1 8;1 9 + } + if (!$pk) { --let $logical_timestamps= 1 8;8 9 + } + --source include/assert_logical_timestamps.inc + + --echo # TRX10: independent + INSERT INTO t2 VALUES (10); + --echo # TRX11: conflict with TRX7 (not with TRX9 since multiple NULLs are allowed) + DELETE FROM t1 WHERE a = 3; + + --echo # now t1 contains two rows: (1, 2, 2), (4, NULL, 2) + if ($pk) { --let $logical_timestamps= 1 10;7 11 + } + if (!$pk) { --let $logical_timestamps= 1 10;10 11 + } + --source include/assert_logical_timestamps.inc + + } + + DROP TABLE t1; + DROP TABLE t2; + + --inc $colcount + } + --inc $unique + } + --inc $nonnull + } + --inc $explicit_pk +} + +--echo #### CLEAN UP #### + +SET @@GLOBAL.binlog_transaction_dependency_tracking= @save_binlog_transaction_dependency_tracking; +if (`SELECT @@GLOBAL.transaction_write_set_extraction != @save_transaction_write_set_extraction`) +{ + SET @@GLOBAL.transaction_write_set_extraction= @save_transaction_write_set_extraction; +} + +--source include/sync_slave_sql_with_master.inc +SET @@GLOBAL.slave_parallel_workers= @save_slave_parallel_workers; + +--source include/rpl_end.inc diff --git a/mysql-test/suite/sys_vars/r/binlog_transaction_dependency_h_size_basic.result b/mysql-test/suite/sys_vars/r/binlog_transaction_dependency_h_size_basic.result new file mode 100644 index 000000000000..6c7e620c74d3 --- /dev/null +++ b/mysql-test/suite/sys_vars/r/binlog_transaction_dependency_h_size_basic.result @@ -0,0 +1,43 @@ +SET @save_binlog_transaction_dependency_history_size= @@global.binlog_transaction_dependency_history_size; +SELECT COUNT(@@GLOBAL.binlog_transaction_dependency_history_size); +COUNT(@@GLOBAL.binlog_transaction_dependency_history_size) +1 +SELECT COUNT(@@SESSION.binlog_transaction_dependency_history_size); +ERROR HY000: Variable 'binlog_transaction_dependency_history_size' is a GLOBAL variable +SELECT VARIABLE_NAME FROM performance_schema.global_variables WHERE VARIABLE_NAME='binlog_transaction_dependency_history_size'; +VARIABLE_NAME +binlog_transaction_dependency_history_size +SELECT VARIABLE_NAME FROM performance_schema.session_variables WHERE variable_name='binlog_transaction_dependency_history_size'; +VARIABLE_NAME +binlog_transaction_dependency_history_size +SET @@GLOBAL.binlog_transaction_dependency_history_size= 1; +include/assert.inc ['binlog_transaction_dependency_history_size is a dynamic variable'] +SET @@GLOBAL.binlog_transaction_dependency_history_size= default; +include/assert.inc ['Default value is 25000'] +SET @@GLOBAL.binlog_transaction_dependency_history_size= ON; +ERROR 42000: Incorrect argument type to variable 'binlog_transaction_dependency_history_size' +SET @@GLOBAL.binlog_transaction_dependency_history_size= OFF; +ERROR 42000: Incorrect argument type to variable 'binlog_transaction_dependency_history_size' +SET @@GLOBAL.binlog_transaction_dependency_history_size= "foo"; +ERROR 42000: Incorrect argument type to variable 'binlog_transaction_dependency_history_size' +SET @@GLOBAL.binlog_transaction_dependency_history_size= NULL; +ERROR 42000: Incorrect argument type to variable 'binlog_transaction_dependency_history_size' +SET @@GLOBAL.binlog_transaction_dependency_history_size= 1.0; +ERROR 42000: Incorrect argument type to variable 'binlog_transaction_dependency_history_size' +Expect value still set to 25000 +SELECT @@GLOBAL.binlog_transaction_dependency_history_size; +@@GLOBAL.binlog_transaction_dependency_history_size +25000 +SET @@GLOBAL.binlog_transaction_dependency_history_size= 0; +Warnings: +Warning 1292 Truncated incorrect binlog_transaction_dependency_hi value: '0' +SET @@GLOBAL.binlog_transaction_dependency_history_size= -1; +Warnings: +Warning 1292 Truncated incorrect binlog_transaction_dependency_hi value: '-1' +SET @@GLOBAL.binlog_transaction_dependency_history_size= 2000000; +Warnings: +Warning 1292 Truncated incorrect binlog_transaction_dependency_hi value: '2000000' +SET @@GLOBAL.binlog_transaction_dependency_history_size= 1; +SET @@GLOBAL.binlog_transaction_dependency_history_size= 20000; +SET @@GLOBAL.binlog_transaction_dependency_history_size= 1000000; +SET @@GLOBAL.binlog_transaction_dependency_history_size= @save_binlog_transaction_dependency_history_size; diff --git a/mysql-test/suite/sys_vars/r/binlog_transaction_dependency_tracking_basic.result b/mysql-test/suite/sys_vars/r/binlog_transaction_dependency_tracking_basic.result new file mode 100644 index 000000000000..0eb296f92285 --- /dev/null +++ b/mysql-test/suite/sys_vars/r/binlog_transaction_dependency_tracking_basic.result @@ -0,0 +1,82 @@ +SET GLOBAL binlog_transaction_dependency_tracking= 'COMMIT_ORDER'; +SET GLOBAL transaction_write_set_extraction= 'XXHASH64'; +SELECT COUNT(@@GLOBAL.binlog_transaction_dependency_tracking); +COUNT(@@GLOBAL.binlog_transaction_dependency_tracking) +1 +SELECT COUNT(@@SESSION.binlog_transaction_dependency_tracking); +ERROR HY000: Variable 'binlog_transaction_dependency_tracking' is a GLOBAL variable +SELECT VARIABLE_NAME FROM performance_schema.global_variables WHERE VARIABLE_NAME='binlog_transaction_dependency_tracking'; +VARIABLE_NAME +binlog_transaction_dependency_tracking +SELECT VARIABLE_NAME FROM performance_schema.session_variables WHERE variable_name='binlog_transaction_dependency_tracking'; +VARIABLE_NAME +binlog_transaction_dependency_tracking +SET GLOBAL binlog_transaction_dependency_tracking= 'COMMIT_ORDER'; +include/assert.inc ['binlog_transaction_dependency_tracking is a dynamic variable'] +SET GLOBAL binlog_transaction_dependency_tracking= 'COMMIT_ORDER'; +include/assert.inc ['binlog_transaction_dependency_tracking should be COMMIT_ORDER'] +SET GLOBAL binlog_transaction_dependency_tracking= 0; +include/assert.inc ['binlog_transaction_dependency_tracking should be COMMIT_ORDER'] +SET GLOBAL binlog_transaction_dependency_tracking= 'WRITESET'; +include/assert.inc ['binlog_transaction_dependency_tracking should be WRITESET'] +SET GLOBAL binlog_transaction_dependency_tracking= 1; +include/assert.inc ['binlog_transaction_dependency_tracking should be WRITESET'] +SET GLOBAL binlog_transaction_dependency_tracking= 'WRITESET_SESSION'; +include/assert.inc ['binlog_transaction_dependency_tracking should be WRITESET_SESSION'] +SET GLOBAL binlog_transaction_dependency_tracking= 2; +include/assert.inc ['binlog_transaction_dependency_tracking should be WRITESET_SESSION'] +SET GLOBAL binlog_transaction_dependency_tracking= DEFAULT; +include/assert.inc ['binlog_transaction_dependency_tracking should be COMMIT_ORDER'] +SET GLOBAL binlog_transaction_dependency_tracking= NULL; +ERROR 42000: Variable 'binlog_transaction_dependency_tracking' can't be set to the value of 'NULL' +SET GLOBAL binlog_transaction_dependency_tracking= ''; +ERROR 42000: Variable 'binlog_transaction_dependency_tracking' can't be set to the value of '' +SET GLOBAL binlog_transaction_dependency_tracking= 1.0; +ERROR 42000: Incorrect argument type to variable 'binlog_transaction_dependency_tracking' +SET GLOBAL binlog_transaction_dependency_tracking= 'GARBAGE'; +ERROR 42000: Variable 'binlog_transaction_dependency_tracking' can't be set to the value of 'GARBAGE' +SET GLOBAL binlog_transaction_dependency_tracking= ON; +ERROR 42000: Variable 'binlog_transaction_dependency_tracking' can't be set to the value of 'ON' +SET GLOBAL binlog_transaction_dependency_tracking= OFF; +ERROR 42000: Variable 'binlog_transaction_dependency_tracking' can't be set to the value of 'OFF' +SET GLOBAL binlog_transaction_dependency_tracking= 3; +ERROR 42000: Variable 'binlog_transaction_dependency_tracking' can't be set to the value of '3' +Expect value still set to "COMMIT_ORDER" +SELECT @@global.binlog_transaction_dependency_tracking; +@@global.binlog_transaction_dependency_tracking +COMMIT_ORDER +Case1 a): "When binlog_transaction_dependency_tracking != COMMIT_ORDER, +transaction_write_set_extraction cannot be changed." +SET GLOBAL binlog_transaction_dependency_tracking= 'WRITESET'; +SET GLOBAL transaction_write_set_extraction= OFF; +ERROR HY000: Incorrect usage of transaction_write_set_extraction (changed) and binlog_transaction_dependency_tracking (!= COMMIT_ORDER) +SET GLOBAL transaction_write_set_extraction= MURMUR32; +ERROR HY000: Incorrect usage of transaction_write_set_extraction (changed) and binlog_transaction_dependency_tracking (!= COMMIT_ORDER) +Expect value still set to XXHASH64 +SELECT @@global.transaction_write_set_extraction; +@@global.transaction_write_set_extraction +XXHASH64 +Case1 b): "When binlog_transaction_dependency_tracking != COMMIT_ORDER, +transaction_write_set_extraction cannot be changed." +SET GLOBAL binlog_transaction_dependency_tracking= 'WRITESET_SESSION'; +SET GLOBAL transaction_write_set_extraction= OFF; +ERROR HY000: Incorrect usage of transaction_write_set_extraction (changed) and binlog_transaction_dependency_tracking (!= COMMIT_ORDER) +SET GLOBAL transaction_write_set_extraction= MURMUR32; +ERROR HY000: Incorrect usage of transaction_write_set_extraction (changed) and binlog_transaction_dependency_tracking (!= COMMIT_ORDER) +Expect value still set to XXHASH64 +SELECT @@global.transaction_write_set_extraction; +@@global.transaction_write_set_extraction +XXHASH64 +Case2: "When transaction_write_set_extraction = OFF, +binlog_transaction_dependency_tracking cannot be set to WRITESET%" +SET GLOBAL binlog_transaction_dependency_tracking= 'COMMIT_ORDER'; +SET GLOBAL transaction_write_set_extraction= OFF; +SET GLOBAL binlog_transaction_dependency_tracking= 'WRITESET'; +ERROR HY000: Incorrect usage of binlog_transaction_dependency_tracking (!= COMMIT_ORDER) and transaction_write_set_extraction (= OFF) +SET GLOBAL binlog_transaction_dependency_tracking= 'WRITESET_SESSION'; +ERROR HY000: Incorrect usage of binlog_transaction_dependency_tracking (!= COMMIT_ORDER) and transaction_write_set_extraction (= OFF) +Expect value still set to COMMIT_ORDER +SELECT @@global.binlog_transaction_dependency_tracking; +@@global.binlog_transaction_dependency_tracking +COMMIT_ORDER +SET GLOBAL transaction_write_set_extraction= XXHASH64; diff --git a/mysql-test/suite/sys_vars/t/binlog_transaction_dependency_h_size_basic.test b/mysql-test/suite/sys_vars/t/binlog_transaction_dependency_h_size_basic.test new file mode 100644 index 000000000000..9c8f4486632e --- /dev/null +++ b/mysql-test/suite/sys_vars/t/binlog_transaction_dependency_h_size_basic.test @@ -0,0 +1,106 @@ +############################################################################### +# Variable Name: binlog_transaction_dependency_history_size +# Scope: global +# Access Type: dynamic +# Data Type: Numeric +# Range: 1 - 1000000 +# +# Description: Test of Dynamic System Variable +# "binlog_transaction_dependency_history_size" that checks +# behavior of this variable in the following ways +# * Scope & Access type +# * Default value +# * Valid & Invalid values +# * Min & Max values +# +# Reference: WL#9556 +############################################################################### + +--source include/not_embedded.inc +--source include/have_binlog_format_row.inc + +# Save initial value +SET @save_binlog_transaction_dependency_history_size= @@global.binlog_transaction_dependency_history_size; + +# +# Scope: Global only +# +SELECT COUNT(@@GLOBAL.binlog_transaction_dependency_history_size); + +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +SELECT COUNT(@@SESSION.binlog_transaction_dependency_history_size); + +--disable_warnings +SELECT VARIABLE_NAME FROM performance_schema.global_variables WHERE VARIABLE_NAME='binlog_transaction_dependency_history_size'; +SELECT VARIABLE_NAME FROM performance_schema.session_variables WHERE variable_name='binlog_transaction_dependency_history_size'; +--enable_warnings + +# +# Access Type: Dynamic +# +SET @@GLOBAL.binlog_transaction_dependency_history_size= 1; +--let $assert_text= 'binlog_transaction_dependency_history_size is a dynamic variable' +--let $assert_cond= "[SELECT @@GLOBAL.binlog_transaction_dependency_history_size]" = 1 +--source include/assert.inc + +# +# Default value +# +SET @@GLOBAL.binlog_transaction_dependency_history_size= default; +--let $assert_text= 'Default value is 25000' +--let $assert_cond= "[SELECT @@GLOBAL.binlog_transaction_dependency_history_size]" = 25000 +--source include/assert.inc + +# +# Invalid values +# +--error ER_WRONG_TYPE_FOR_VAR +SET @@GLOBAL.binlog_transaction_dependency_history_size= ON; + +--error ER_WRONG_TYPE_FOR_VAR +SET @@GLOBAL.binlog_transaction_dependency_history_size= OFF; + +--error ER_WRONG_TYPE_FOR_VAR +SET @@GLOBAL.binlog_transaction_dependency_history_size= "foo"; + +--error ER_WRONG_TYPE_FOR_VAR +SET @@GLOBAL.binlog_transaction_dependency_history_size= NULL; + +--error ER_WRONG_TYPE_FOR_VAR +SET @@GLOBAL.binlog_transaction_dependency_history_size= 1.0; + +--echo Expect value still set to 25000 +SELECT @@GLOBAL.binlog_transaction_dependency_history_size; + +# +# Minimum value: 1. Maximum value: 1000000 +# +SET @@GLOBAL.binlog_transaction_dependency_history_size= 0; +--let $assert_text= 'Check minimum value of binlog_transaction_dependency_history_size' +--let $assert_cond= [SELECT @@GLOBAL.binlog_transaction_dependency_history_size] = 1 + +SET @@GLOBAL.binlog_transaction_dependency_history_size= -1; +--let $assert_text= 'Check minimum value of binlog_transaction_dependency_history_size' +--let $assert_cond= [SELECT @@GLOBAL.binlog_transaction_dependency_history_size] = 1 + +SET @@GLOBAL.binlog_transaction_dependency_history_size= 2000000; +--let $assert_text= 'Check maximum value of binlog_transaction_dependency_history_size' +--let $assert_cond= [SELECT @@GLOBAL.binlog_transaction_dependency_history_size] = 1000000 + +# +# Valid values +# +SET @@GLOBAL.binlog_transaction_dependency_history_size= 1; +--let $assert_text= 'binlog_transaction_dependency_history_size should be 1' +--let $assert_cond= [SELECT @@GLOBAL.binlog_transaction_dependency_history_size] = 1 + +SET @@GLOBAL.binlog_transaction_dependency_history_size= 20000; +--let $assert_text= 'binlog_transaction_dependency_history_size should be 20000' +--let $assert_cond= [SELECT @@GLOBAL.binlog_transaction_dependency_history_size] = 20000 + +SET @@GLOBAL.binlog_transaction_dependency_history_size= 1000000; +--let $assert_text= 'binlog_transaction_dependency_history_size should be 1000000' +--let $assert_cond= [SELECT @@GLOBAL.binlog_transaction_dependency_history_size] = 1000000 + +# Cleanup +eval SET @@GLOBAL.binlog_transaction_dependency_history_size= @save_binlog_transaction_dependency_history_size; diff --git a/mysql-test/suite/sys_vars/t/binlog_transaction_dependency_tracking_basic.test b/mysql-test/suite/sys_vars/t/binlog_transaction_dependency_tracking_basic.test new file mode 100644 index 000000000000..830c560683d7 --- /dev/null +++ b/mysql-test/suite/sys_vars/t/binlog_transaction_dependency_tracking_basic.test @@ -0,0 +1,155 @@ +############################################################################### +# Variable Name: binlog_transaction_dependency_tracking +# Scope: global +# Access Type: dynamic +# Data Type: enum +# +# Description: Test Cases of Dynamic System Variable +# "binlog_transaction_dependency_history_size" that checks +# behavior of this variable in the following ways +# * Scope & Access type +# * Valid & Default value +# * Invalid values +# * Dependency on transaction_write_set_extraction +# +# Reference: WL#9556 +############################################################################### + +--source include/not_embedded.inc +--source include/have_binlog_format_row.inc + +# Save initial value +--let $saved_binlog_transaction_dependency_tracking= `SELECT @@global.binlog_transaction_dependency_tracking` +--let $saved_transaction_write_set_extraction= `SELECT @@global.transaction_write_set_extraction` + +# Set initial values to test further +SET GLOBAL binlog_transaction_dependency_tracking= 'COMMIT_ORDER'; +SET GLOBAL transaction_write_set_extraction= 'XXHASH64'; + +# +# Scope: Global only +# +SELECT COUNT(@@GLOBAL.binlog_transaction_dependency_tracking); + +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +SELECT COUNT(@@SESSION.binlog_transaction_dependency_tracking); + +--disable_warnings +SELECT VARIABLE_NAME FROM performance_schema.global_variables WHERE VARIABLE_NAME='binlog_transaction_dependency_tracking'; +SELECT VARIABLE_NAME FROM performance_schema.session_variables WHERE variable_name='binlog_transaction_dependency_tracking'; +--enable_warnings + +# +# Access Type: Dynamic +# +SET GLOBAL binlog_transaction_dependency_tracking= 'COMMIT_ORDER'; +--let $assert_text= 'binlog_transaction_dependency_tracking is a dynamic variable' +--let $assert_cond= "[SELECT @@GLOBAL.binlog_transaction_dependency_tracking]" = "COMMIT_ORDER" +--source include/assert.inc + +# +# Valid values and Default value +# +SET GLOBAL binlog_transaction_dependency_tracking= 'COMMIT_ORDER'; +--let $assert_text= 'binlog_transaction_dependency_tracking should be COMMIT_ORDER' +--let $assert_cond= "[SELECT @@GLOBAL.binlog_transaction_dependency_tracking]" = "COMMIT_ORDER" +--source include/assert.inc + +SET GLOBAL binlog_transaction_dependency_tracking= 0; +--let $assert_text= 'binlog_transaction_dependency_tracking should be COMMIT_ORDER' +--let $assert_cond= "[SELECT @@GLOBAL.binlog_transaction_dependency_tracking]" = "COMMIT_ORDER" +--source include/assert.inc + +SET GLOBAL binlog_transaction_dependency_tracking= 'WRITESET'; +--let $assert_text= 'binlog_transaction_dependency_tracking should be WRITESET' +--let $assert_cond= "[SELECT @@GLOBAL.binlog_transaction_dependency_tracking]" = "WRITESET" +--source include/assert.inc + +SET GLOBAL binlog_transaction_dependency_tracking= 1; +--let $assert_text= 'binlog_transaction_dependency_tracking should be WRITESET' +--let $assert_cond= "[SELECT @@GLOBAL.binlog_transaction_dependency_tracking]" = "WRITESET" +--source include/assert.inc + +SET GLOBAL binlog_transaction_dependency_tracking= 'WRITESET_SESSION'; +--let $assert_text= 'binlog_transaction_dependency_tracking should be WRITESET_SESSION' +--let $assert_cond= "[SELECT @@GLOBAL.binlog_transaction_dependency_tracking]" = "WRITESET_SESSION" +--source include/assert.inc + +SET GLOBAL binlog_transaction_dependency_tracking= 2; +--let $assert_text= 'binlog_transaction_dependency_tracking should be WRITESET_SESSION' +--let $assert_cond= "[SELECT @@GLOBAL.binlog_transaction_dependency_tracking]" = "WRITESET_SESSION" +--source include/assert.inc + +SET GLOBAL binlog_transaction_dependency_tracking= DEFAULT; +--let $assert_text= 'binlog_transaction_dependency_tracking should be COMMIT_ORDER' +--let $assert_cond= "[SELECT @@GLOBAL.binlog_transaction_dependency_tracking]" = "COMMIT_ORDER" +--source include/assert.inc + +# +# Invalid values +# +--error ER_WRONG_VALUE_FOR_VAR +SET GLOBAL binlog_transaction_dependency_tracking= NULL; + +--error ER_WRONG_VALUE_FOR_VAR +SET GLOBAL binlog_transaction_dependency_tracking= ''; + +--error ER_WRONG_TYPE_FOR_VAR +SET GLOBAL binlog_transaction_dependency_tracking= 1.0; + +--error ER_WRONG_VALUE_FOR_VAR +SET GLOBAL binlog_transaction_dependency_tracking= 'GARBAGE'; + +--error ER_WRONG_VALUE_FOR_VAR +SET GLOBAL binlog_transaction_dependency_tracking= ON; + +--error ER_WRONG_VALUE_FOR_VAR +SET GLOBAL binlog_transaction_dependency_tracking= OFF; + +--error ER_WRONG_VALUE_FOR_VAR +SET GLOBAL binlog_transaction_dependency_tracking= 3; + +--echo Expect value still set to "COMMIT_ORDER" +SELECT @@global.binlog_transaction_dependency_tracking; + +# +# Test usage: Dependency on transaction_write_set_extraction +# +--echo Case1 a): "When binlog_transaction_dependency_tracking != COMMIT_ORDER, +--echo transaction_write_set_extraction cannot be changed." +SET GLOBAL binlog_transaction_dependency_tracking= 'WRITESET'; +--error ER_WRONG_USAGE +SET GLOBAL transaction_write_set_extraction= OFF; +--error ER_WRONG_USAGE +SET GLOBAL transaction_write_set_extraction= MURMUR32; +--echo Expect value still set to XXHASH64 +SELECT @@global.transaction_write_set_extraction; + +--echo Case1 b): "When binlog_transaction_dependency_tracking != COMMIT_ORDER, +--echo transaction_write_set_extraction cannot be changed." +SET GLOBAL binlog_transaction_dependency_tracking= 'WRITESET_SESSION'; +--error ER_WRONG_USAGE +SET GLOBAL transaction_write_set_extraction= OFF; +--error ER_WRONG_USAGE +SET GLOBAL transaction_write_set_extraction= MURMUR32; +--echo Expect value still set to XXHASH64 +SELECT @@global.transaction_write_set_extraction; + +--echo Case2: "When transaction_write_set_extraction = OFF, +--echo binlog_transaction_dependency_tracking cannot be set to WRITESET%" +SET GLOBAL binlog_transaction_dependency_tracking= 'COMMIT_ORDER'; +SET GLOBAL transaction_write_set_extraction= OFF; +--error ER_WRONG_USAGE +SET GLOBAL binlog_transaction_dependency_tracking= 'WRITESET'; +--error ER_WRONG_USAGE +SET GLOBAL binlog_transaction_dependency_tracking= 'WRITESET_SESSION'; +--echo Expect value still set to COMMIT_ORDER +SELECT @@global.binlog_transaction_dependency_tracking; + +SET GLOBAL transaction_write_set_extraction= XXHASH64; + +# Clean up +--disable_query_log +--eval SET GLOBAL binlog_transaction_dependency_tracking= '$saved_binlog_transaction_dependency_tracking'; +--eval SET GLOBAL transaction_write_set_extraction= '$saved_transaction_write_set_extraction'; +--enable_query_log diff --git a/rapid/plugin/group_replication/tests/collections/default.weekly b/rapid/plugin/group_replication/tests/collections/default.weekly index 6eb09492d2f6..e813b48b30d2 100644 --- a/rapid/plugin/group_replication/tests/collections/default.weekly +++ b/rapid/plugin/group_replication/tests/collections/default.weekly @@ -7,3 +7,4 @@ perl mysql-test-run.pl --timer --debug-server --force --parallel=6 --comment=gro perl mysql-test-run.pl --timer --debug-server --force --parallel=6 --comment=group_replication_parallel_applier-debug --vardir=var-group_replication_parallel_applier-debug --suite=group_replication --experimental=collections/default.experimental --skip-test-list=collections/disabled-per-push.list --big-test --testcase-timeout=60 --suite-timeout=360 --mysqld=--slave-parallel-workers=4 --mysqld=--slave-parallel-type=logical_clock --mysqld=--slave_preserve_commit_order=ON perl mysql-test-run.pl --timer --debug-server --force --parallel=6 --comment=group_replication_ssl_mode_required-debug --vardir=var-group_replication_ssl_mode_required-debug --suite=group_replication --experimental=collections/default.experimental --skip-test-list=collections/disabled-per-push.list --big-test --testcase-timeout=60 --suite-timeout=360 --mysqld=--loose-group_replication_ssl_mode=REQUIRED perl mysql-test-run.pl --timer --debug-server --force --parallel=6 --comment=group_replication_transaction-write-set-extraction_MURMUR32-debug --vardir=var-group_replication_transaction-write-set-extraction_MURMUR32-debug --suite=group_replication --experimental=collections/default.experimental --skip-test-list=collections/disabled-per-push.list --big-test --testcase-timeout=60 --suite-timeout=360 --mysqld=--transaction-write-set-extraction=MURMUR32 +perl mysql-test-run.pl --timer --force --parallel=6 --comment=group_replication_parallel_applier_binlog-txn-dependency-tracking --vardir=var-group_replication_parallel_applier_binlog-txn-dependency-tracking --suite=group_replication --experimental=collections/default.experimental --big-test --testcase-timeout=60 --suite-timeout=360 --mysqld=--slave-parallel-workers=4 --mysqld=--slave-parallel-type=logical_clock --mysqld=--slave_preserve_commit_order=ON --mysqld=--binlog-transaction-dependency-tracking=WRITESET diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_collations_key_conflict.test b/rapid/plugin/group_replication/tests/mtr/t/gr_collations_key_conflict.test index 9be9f37a98d3..e84c8276efee 100644 --- a/rapid/plugin/group_replication/tests/mtr/t/gr_collations_key_conflict.test +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_collations_key_conflict.test @@ -34,7 +34,6 @@ CREATE TABLE t1 ( --echo --echo ###################################################################### --echo # Execute in concurrency transaction with equivalent keys under latin1 - --let $local_server_connection1=server_1 --let $local_server_connection2=server1 --let $remote_server_connection=server2 diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_write_set_extraction_algorithm.test b/rapid/plugin/group_replication/tests/mtr/t/gr_write_set_extraction_algorithm.test index 765673a57960..914c6d4784ff 100644 --- a/rapid/plugin/group_replication/tests/mtr/t/gr_write_set_extraction_algorithm.test +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_write_set_extraction_algorithm.test @@ -6,6 +6,7 @@ # 2) Test that you cannot join a group if your algorithm is different. # +--source include/only_binlog_transaction_dependency_tracking_commit_order.inc --source ../inc/have_group_replication_plugin.inc --let $rpl_skip_group_replication_start= 1 --source ../inc/group_replication.inc diff --git a/rapid/plugin/x/tests/mtr/r/connection.result b/rapid/plugin/x/tests/mtr/r/connection.result index 32af025035b2..5950fc9fbcbe 100644 --- a/rapid/plugin/x/tests/mtr/r/connection.result +++ b/rapid/plugin/x/tests/mtr/r/connection.result @@ -688,7 +688,7 @@ Mysqlx_sessions_rejected 1 RUN SET @@session.session_track_system_variables='mysqlx_port,mysqlx_idle_worker_thread_timeout,mysqlx_max_allowed_packet,mysqlx_max_connections,mysqlx_min_worker_threads' 0 rows affected -RUN show variables like '%track%' +RUN show variables like '%session_track%' Variable_name Value session_track_gtids OFF session_track_schema ON diff --git a/rapid/plugin/x/tests/mtr/t/connection.test b/rapid/plugin/x/tests/mtr/t/connection.test index a9801d4cd87e..cb1bce3b0ac5 100644 --- a/rapid/plugin/x/tests/mtr/t/connection.test +++ b/rapid/plugin/x/tests/mtr/t/connection.test @@ -77,7 +77,7 @@ EOF --write_file $MYSQL_TMP_DIR/mysqlx-connection_session_track.tmp -->sql SET @@session.session_track_system_variables='mysqlx_port,mysqlx_idle_worker_thread_timeout,mysqlx_max_allowed_packet,mysqlx_max_connections,mysqlx_min_worker_threads'; -show variables like '%track%'; +show variables like '%session_track%'; -->endsql -->stmtsql uninstall plugin mysqlx; diff --git a/sql/CMakeLists.txt b/sql/CMakeLists.txt index 3e8ca40f13ec..c55bf1fa81da 100644 --- a/sql/CMakeLists.txt +++ b/sql/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2006, 2017, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 2018, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -151,6 +151,7 @@ SET(SQL_SHARED_SOURCES rpl_handler.cc rpl_transaction_ctx.cc rpl_transaction_write_set_ctx.cc + rpl_trx_tracking.cc rpl_write_set_handler.cc rules_table_service.cc session_tracker.cc @@ -422,7 +423,7 @@ SET (BINLOG_SOURCE rpl_gtid_misc.cc rpl_gtid_state.cc rpl_gtid_owned.cc rpl_gtid_execution.cc rpl_gtid_mutex_cond_array.cc rpl_gtid_persist.cc log_event.cc log_event_old.cc binlog.cc sql_binlog.cc - rpl_filter.cc rpl_record.cc rpl_record_old.cc + rpl_filter.cc rpl_record.cc rpl_record_old.cc rpl_trx_tracking.cc rpl_utility.cc rpl_injector.cc rpl_table_access.cc) ADD_CONVENIENCE_LIBRARY(binlog ${BINLOG_SOURCE}) TARGET_LINK_LIBRARIES(binlog binlogevents_static) diff --git a/sql/binlog.cc b/sql/binlog.cc index a40d8d14aa9b..8cd4ba933e01 100644 --- a/sql/binlog.cc +++ b/sql/binlog.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2009, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2009, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -26,6 +26,7 @@ #include "rpl_rli_pdb.h" // Slave_worker #include "rpl_slave_commit_order_manager.h" // Commit_order_manager #include "rpl_trx_boundary_parser.h" // Transaction_boundary_parser +#include "rpl_context.h" #include "sql_class.h" // THD #include "sql_parse.h" // sqlcom_can_generate_row_events #include "sql_show.h" // append_identifier @@ -364,6 +365,9 @@ class binlog_cache_data { flags.with_rbr= it->second.with_rbr; flags.with_sbr= it->second.with_sbr; + flags.with_start= it->second.with_start; + flags.with_end= it->second.with_end; + flags.with_content= it->second.with_content; } else DBUG_ASSERT(it == cache_state_map.end()); @@ -373,6 +377,9 @@ class binlog_cache_data { flags.with_rbr= false; flags.with_sbr= false; + flags.with_start= false; + flags.with_end= false; + flags.with_content= false; } } @@ -384,6 +391,9 @@ class binlog_cache_data cache_state state; state.with_rbr= flags.with_rbr; state.with_sbr= flags.with_sbr; + state.with_start= flags.with_start; + state.with_end= flags.with_end; + state.with_content= flags.with_content; cache_state_map[pos_to_checkpoint]= state; } } @@ -419,6 +429,9 @@ class binlog_cache_data flags.finalized= false; flags.with_sbr= false; flags.with_rbr= false; + flags.with_start= false; + flags.with_end= false; + flags.with_content= false; /* The truncate function calls reinit_io_cache that calls my_b_flush_io_cache which may increase disk_writes. This breaks the disk_writes use by the @@ -492,6 +505,52 @@ class binlog_cache_data return flags.with_sbr || !flags.with_rbr; } + /** + Check if the binlog cache contains an empty transaction, which has + two binlog events "BEGIN" and "COMMIT". + + @return true The binlog cache contains an empty transaction. + @return false Otherwise. + */ + bool has_empty_transaction() + { + /* + The empty transaction has two events in trx/stmt binlog cache + and no changes (no SBR changing content and no RBR events). + Other transaction should not have two events. So we can identify + if this is an empty transaction by the event counter and the + cache flags. + */ + if (flags.with_start && // Has transaction start statement + flags.with_end && // Has transaction end statement + !flags.with_sbr && // No statements changing content + !flags.with_rbr && // No rows changing content + !flags.immediate && // Not a DDL + !flags.with_xid && // Not a XID transaction and not an atomic DDL Query + !flags.with_content)// Does not have any content + { + DBUG_ASSERT(!flags.with_sbr); // No statements changing content + DBUG_ASSERT(!flags.with_rbr); // No rows changing content + DBUG_ASSERT(!flags.immediate);// Not a DDL + DBUG_ASSERT(!flags.with_xid); // Not a XID trx and not an atomic DDL Query + + return true; + } + return false; + } + + /** + Check if the binlog cache is empty or contains an empty transaction, + which has two binlog events "BEGIN" and "COMMIT". + + @return true The binlog cache is empty or contains an empty transaction. + @return false Otherwise. + */ + bool is_empty_or_has_empty_transaction() + { + return is_binlog_empty() || has_empty_transaction(); + } + protected: /* This structure should have all cache variables/flags that should be restored @@ -501,6 +560,9 @@ class binlog_cache_data { bool with_sbr; bool with_rbr; + bool with_start; + bool with_end; + bool with_content; }; /* For every SAVEPOINT used, we will store a cache_state for the current @@ -581,6 +643,21 @@ class binlog_cache_data This indicates that the cache contain RBR event changing content. */ bool with_rbr:1; + + /* + This indicates that the cache contain s transaction start statement. + */ + bool with_start:1; + + /* + This indicates that the cache contain a transaction end event. + */ + bool with_end:1; + + /* + This indicates that the cache contain content other than START/END. + */ + bool with_content:1; } flags; private: @@ -842,6 +919,23 @@ class binlog_cache_mngr { return 0; } + /** + Check if at least one of transacaction and statement binlog caches + contains an empty transaction, other one is empty or contains an + empty transaction. + + @return true At least one of transacaction and statement binlog + caches an empty transaction, other one is emptry + or contains an empty transaction. + @return false Otherwise. + */ + bool has_empty_transaction() + { + return (trx_cache.is_empty_or_has_empty_transaction() && + stmt_cache.is_empty_or_has_empty_transaction() && + !is_binlog_empty()); + } + binlog_stmt_cache_data stmt_cache; binlog_trx_cache_data trx_cache; /* @@ -1205,6 +1299,16 @@ int binlog_cache_data::write_event(THD *thd, Log_event *ev) flags.with_sbr= true; if (ev->is_rbr_logging_format()) flags.with_rbr= true; +#ifndef EMBEDDED_LIBRARY + /* With respect to empty transactions */ + if (ev->starts_group()) + flags.with_start= true; + if (ev->ends_group()) + flags.with_end= true; + if ((!ev->starts_group() && !ev->ends_group()) + ||ev->get_type_code() == binary_log::VIEW_CHANGE_EVENT) + flags.with_content= true; +#endif } DBUG_RETURN(0); } @@ -1287,29 +1391,10 @@ bool MYSQL_BIN_LOG::write_gtid(THD *thd, binlog_cache_data *cache_data, DBUG_ASSERT(thd->owned_gtid.sidno == THD::OWNED_SIDNO_ANONYMOUS || thd->owned_gtid.sidno > 0); + int64 sequence_number, last_committed; /* Generate logical timestamps for MTS */ + m_dependency_tracker.get_dependency(thd, sequence_number, last_committed); - /* - Prepare sequence_number and last_committed relative to the current - binlog. This is done by subtracting the binlog's clock offset - from the values. - - A transaction that commits after the binlog is rotated, can have a - commit parent in the previous binlog. In this case, subtracting - the offset from the sequence number results in a negative - number. The commit parent dependency gets lost in such - case. Therefore, we log the value SEQ_UNINIT in this case. - */ - - Transaction_ctx *trn_ctx= thd->get_transaction(); - Logical_clock& clock= mysql_bin_log.max_committed_transaction; - - DBUG_ASSERT(trn_ctx->sequence_number > clock.get_offset()); - - int64 relative_sequence_number= trn_ctx->sequence_number - clock.get_offset(); - int64 relative_last_committed= - trn_ctx->last_committed <= clock.get_offset() ? - SEQ_UNINIT : trn_ctx->last_committed - clock.get_offset(); /* In case both the transaction cache and the statement cache are non-empty, both will be flushed in sequence and logged as @@ -1321,13 +1406,14 @@ bool MYSQL_BIN_LOG::write_gtid(THD *thd, binlog_cache_data *cache_data, condition trn_ctx->last_committed==SEQ_UNINIT to detect this situation, hence the need to set it here. */ - trn_ctx->last_committed= SEQ_UNINIT; + thd->get_transaction()->last_committed= SEQ_UNINIT; + /* Generate and write the Gtid_log_event. */ Gtid_log_event gtid_event(thd, cache_data->is_trx_cache(), - relative_last_committed, relative_sequence_number, + last_committed, sequence_number, cache_data->may_have_sbr_stmts()); uchar buf[Gtid_log_event::MAX_EVENT_LENGTH]; uint32 buf_len= gtid_event.write_to_memory(buf); @@ -1518,7 +1604,7 @@ binlog_cache_data::flush(THD *thd, my_off_t *bytes_written, bool *wrote_xid) DBUG_PRINT("debug", ("bytes_in_cache: %llu", bytes_in_cache)); - trn_ctx->sequence_number= mysql_bin_log.transaction_counter.step(); + trn_ctx->sequence_number= mysql_bin_log.m_dependency_tracker.step(); /* In case of two caches the transaction is split into two groups. The 2nd group is considered to be a successor of the 1st rather @@ -1684,9 +1770,9 @@ static int binlog_prepare(handlerton *hton, THD *thd, bool all) DBUG_ENTER("binlog_prepare"); if (!all) { - Logical_clock& clock= mysql_bin_log.max_committed_transaction; - thd->get_transaction()-> - store_commit_parent(clock.get_timestamp()); + thd->get_transaction()->store_commit_parent(mysql_bin_log. + m_dependency_tracker.get_max_committed_timestamp()); + } DBUG_RETURN(all && is_loggable_xa_prepare(thd) ? @@ -2360,7 +2446,7 @@ int MYSQL_BIN_LOG::rollback(THD *thd, bool all) if (stuff_logged) { Transaction_ctx *trn_ctx= thd->get_transaction(); - trn_ctx->store_commit_parent(max_committed_transaction.get_timestamp()); + trn_ctx->store_commit_parent(m_dependency_tracker.get_max_committed_timestamp()); } DBUG_PRINT("debug", ("error: %d", error)); @@ -2755,6 +2841,21 @@ File open_binlog_file(IO_CACHE *log, const char *log_file_name, const char **err DBUG_RETURN(-1); } + +bool is_empty_transaction_in_binlog_cache(const THD* thd) +{ + DBUG_ENTER("is_empty_transaction_in_binlog_cache"); + + binlog_cache_mngr *const cache_mngr= thd_get_cache_mngr(thd); + if (cache_mngr != NULL && cache_mngr->has_empty_transaction()) + { + DBUG_RETURN(true); + } + + DBUG_RETURN(false); +} + + /** This function checks if a transactional table was updated by the current transaction. @@ -5056,8 +5157,7 @@ bool MYSQL_BIN_LOG::open_binlog(const char *log_name, At every rotate memorize the last transaction counter state to use it as offset at logging the transaction logical timestamps. */ - max_committed_transaction.update_offset(transaction_counter.get_timestamp()); - transaction_counter.update_offset(transaction_counter.get_timestamp()); + m_dependency_tracker.rotate(); #ifdef HAVE_REPLICATION close_purge_index_file(); #endif @@ -8407,7 +8507,7 @@ TC_LOG::enum_result MYSQL_BIN_LOG::commit(THD *thd, bool all) Commit parent identification of non-transactional query has been deferred until now, except for the mixed transaction case. */ - trn_ctx->store_commit_parent(max_committed_transaction.get_timestamp()); + trn_ctx->store_commit_parent(m_dependency_tracker.get_max_committed_timestamp()); if (cache_mngr->stmt_cache.finalize(thd)) DBUG_RETURN(RESULT_ABORTED); stmt_stuff_logged= true; @@ -8652,30 +8752,6 @@ MYSQL_BIN_LOG::process_flush_stage_queue(my_off_t *total_bytes_var, DBUG_RETURN(flush_error); } -/** - The method is to be executed right before committing time. - It must be invoked even if the transaction does not commit - to engine being merely logged into the binary log. - max_committed_transaction is updated with a greater timestamp - value. - As a side effect, the transaction context's sequence_number - is reset. - - @param THD a pointer to THD instance -*/ -void MYSQL_BIN_LOG::update_max_committed(THD *thd) -{ - Transaction_ctx *trn_ctx= thd->get_transaction(); - max_committed_transaction.set_if_greater(trn_ctx->sequence_number); - /* - sequence_number timestamp is unneeded anymore, so it's cleared off. - */ - trn_ctx->sequence_number= SEQ_UNINIT; - - DBUG_ASSERT(trn_ctx->last_committed == SEQ_UNINIT || - thd->commit_error == THD::CE_FLUSH_ERROR); -} - /** Commit a sequence of sessions. @@ -8716,7 +8792,7 @@ MYSQL_BIN_LOG::process_commit_stage_queue(THD *thd, THD *first) stage_manager.clear_preempt_status(head); #endif if (head->get_transaction()->sequence_number != SEQ_UNINIT) - update_max_committed(head); + m_dependency_tracker.update_max_committed(head); /* Flush/Sync error should be ignored and continue to commit phase. And thd->commit_error cannot be @@ -8973,7 +9049,7 @@ MYSQL_BIN_LOG::finish_commit(THD *thd) cache_mngr->reset(); } if (thd->get_transaction()->sequence_number != SEQ_UNINIT) - update_max_committed(thd); + m_dependency_tracker.update_max_committed(thd); if (thd->get_transaction()->m_flags.commit_low) { const bool all= thd->get_transaction()->m_flags.real_commit; @@ -11674,83 +11750,6 @@ void THD::issue_unsafe_warnings() DBUG_VOID_RETURN; } -Logical_clock::Logical_clock() - : state(SEQ_UNINIT), offset(0) -{} - -/** - Atomically fetch the current state. - @parms: None - @return not subtracted "absolute" value. - */ -inline int64 Logical_clock::get_timestamp() -{ - int64 retval= 0; - DBUG_ENTER("Logical_clock::get_timestamp"); - retval= my_atomic_load64(&state); - DBUG_RETURN(retval); -} - -/** - Steps the absolute value of the clock (state) to return - an updated value. - The caller must be sure to call the method in no concurrent - execution context so either offset and state can't change. - - @return incremented "absolute" value - */ -inline int64 Logical_clock::step() -{ - compile_time_assert(SEQ_UNINIT == 0); - DBUG_EXECUTE_IF("logical_clock_step_2", ++state;); - return ++state; -} - -/** - To try setting the clock *forward*. - The clock does not change when the new value is in the past - which is reflected by the new value and by offset. - In other words the function main effects is described as - state= max(state, new_value). - Offset that exceeds the new value indicates the binary log rotation - to render such new value useless. - - @param new_val a new value (offset included) - @return a (new) value of state member regardless whether it's changed or not. - */ -inline int64 Logical_clock::set_if_greater(int64 new_val) -{ - longlong old_val= new_val - 1; - bool cas_rc; - - DBUG_ENTER("Logical_clock::set_if_greater"); - - DBUG_ASSERT(new_val > 0); - - if (new_val <= offset) - { - /* - This function's invocation can be separated from the - transaction's flushing by few rotations. A late to log - transaction does not change the clock, similarly to how - its timestamps are handled at flushing. - */ - DBUG_RETURN(SEQ_UNINIT); - } - - DBUG_ASSERT(new_val > 0); - - while (!(cas_rc= my_atomic_cas64(&state, &old_val, new_val)) && - old_val < new_val) - {} - - DBUG_ASSERT(state >= new_val); // setting can't be done to past - - DBUG_ASSERT(cas_rc || old_val >= new_val); - - DBUG_RETURN(cas_rc ? new_val : old_val); -} - /** Log the current query. diff --git a/sql/binlog.h b/sql/binlog.h index 01236b2dd42c..15491b42dfe1 100644 --- a/sql/binlog.h +++ b/sql/binlog.h @@ -1,5 +1,5 @@ #ifndef BINLOG_H_INCLUDED -/* Copyright (c) 2010, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -24,6 +24,8 @@ #include "tc_log.h" // TC_LOG #include "atomic_class.h" #include "rpl_gtid.h" // Gtid_set, Sid_map +#include "rpl_trx_tracking.h" + class Relay_log_info; class Master_info; @@ -39,45 +41,6 @@ struct Gtid; typedef int64 query_id_t; -/** - Logical timestamp generator for logical timestamping binlog transactions. - A transaction is associated with two sequence numbers see - @c Transaction_ctx::last_committed and @c Transaction_ctx::sequence_number. - The class provides necessary interfaces including that of - generating a next consecutive value for the latter. -*/ -class Logical_clock -{ -private: - int64 state; - /* - Offset is subtracted from the actual "absolute time" value at - logging a replication event. That is the event holds logical - timestamps in the "relative" format. They are meaningful only in - the context of the current binlog. - The member is updated (incremented) per binary log rotation. - */ - int64 offset; -public: - Logical_clock(); - int64 step(); - int64 set_if_greater(int64 new_val); - int64 get_timestamp(); - int64 get_offset() { return offset; } - /* - Updates the offset. - This operation is invoked when binlog rotates and at that time - there can't any concurrent step() callers so no need to guard - the assignement. - */ - void update_offset(int64 new_offset) - { - DBUG_ASSERT(offset <= new_offset); - - offset= new_offset; - } - ~Logical_clock() { } -}; /** Class for maintaining the commit stages for binary log group commit. @@ -591,11 +554,8 @@ class MYSQL_BIN_LOG: public TC_LOG #endif public: - /* Committed transactions timestamp */ - Logical_clock max_committed_transaction; - /* "Prepared" transactions timestamp */ - Logical_clock transaction_counter; - void update_max_committed(THD *thd); + /** Manage the MTS dependency tracking */ + Transaction_dependency_tracker m_dependency_tracker; /** Find the oldest binary log that contains any GTID that @@ -973,6 +933,19 @@ typedef struct st_load_file_info extern MYSQL_PLUGIN_IMPORT MYSQL_BIN_LOG mysql_bin_log; +/** + Check if at least one of transacaction and statement binlog caches contains + an empty transaction, other one is empty or contains an empty transaction, + which has two binlog events "BEGIN" and "COMMIT". + + @param thd The client thread that executed the current statement. + + @retval true At least one of transacaction and statement binlog caches + contains an empty transaction, other one is empty or + contains an empty transaction. + @retval false Otherwise. +*/ +bool is_empty_transaction_in_binlog_cache(const THD* thd); bool trans_has_updated_trans_table(const THD* thd); bool stmt_has_updated_trans_table(Ha_trx_info* ha_list); bool ending_trans(THD* thd, const bool all); diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 738405031b55..4acff4e4d9bb 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -3080,6 +3080,16 @@ int init_common_variables() return 1; } + if (global_system_variables.transaction_write_set_extraction == HASH_ALGORITHM_OFF + && mysql_bin_log.m_dependency_tracker.m_opt_tracking_mode != DEPENDENCY_TRACKING_COMMIT_ORDER) + { + sql_print_error("The transaction_write_set_extraction must be set to XXHASH64 or MURMUR32" + " when binlog_transaction_dependency_tracking is WRITESET or WRITESET_SESSION."); + return 1; + } + else + mysql_bin_log.m_dependency_tracker.tracking_mode_changed(); + #define FIX_LOG_VAR(VAR, ALT) \ if (!VAR || !*VAR) \ VAR= ALT; diff --git a/sql/rpl_context.h b/sql/rpl_context.h index cc13907baaca..43928db8bcfb 100644 --- a/sql/rpl_context.h +++ b/sql/rpl_context.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as @@ -196,6 +196,29 @@ class Session_consistency_gtids_ctx Session_consistency_gtids_ctx& operator=(const Session_consistency_gtids_ctx& rsc); }; +/* + This object encapsulates the state kept between transactions of the same client in + order to compute logical timestamps based on WRITESET_SESSION. +*/ +class Dependency_tracker_ctx +{ +public: + Dependency_tracker_ctx(): m_last_session_sequence_number(0) { } + + void set_last_session_sequence_number(int64 sequence_number) + { + m_last_session_sequence_number= sequence_number; + } + + int64 get_last_session_sequence_number() + { + return m_last_session_sequence_number; + } + +private: + int64 m_last_session_sequence_number; +}; + /* This class SHALL encapsulate the replication context associated with the THD object. @@ -204,6 +227,7 @@ class Rpl_thd_context { private: Session_consistency_gtids_ctx m_session_gtids_ctx; + Dependency_tracker_ctx m_dependency_tracker_ctx; // make these private Rpl_thd_context(const Rpl_thd_context& rsc); @@ -216,6 +240,11 @@ class Rpl_thd_context { return m_session_gtids_ctx; } + + inline Dependency_tracker_ctx& dependency_tracker_ctx() + { + return m_dependency_tracker_ctx; + } }; #endif /* RPL_SESSION_H */ diff --git a/sql/rpl_transaction_write_set_ctx.cc b/sql/rpl_transaction_write_set_ctx.cc index 617d148946ea..3c50a5375e71 100644 --- a/sql/rpl_transaction_write_set_ctx.cc +++ b/sql/rpl_transaction_write_set_ctx.cc @@ -22,7 +22,8 @@ #include "debug_sync.h" // debug_sync_set_action -Rpl_transaction_write_set_ctx::Rpl_transaction_write_set_ctx() +Rpl_transaction_write_set_ctx::Rpl_transaction_write_set_ctx(): + m_has_missing_keys(false), m_has_related_foreign_keys(false) { DBUG_ENTER("Rpl_transaction_write_set_ctx::Rpl_transaction_write_set_ctx"); /* @@ -56,9 +57,36 @@ void Rpl_transaction_write_set_ctx::clear_write_set() write_set_unique.clear(); savepoint.clear(); savepoint_list.clear(); + m_has_missing_keys= m_has_related_foreign_keys= false; DBUG_VOID_RETURN; } +void Rpl_transaction_write_set_ctx::set_has_missing_keys() +{ + DBUG_ENTER("Transaction_context_log_event::set_has_missing_keys"); + m_has_missing_keys= true; + DBUG_VOID_RETURN; +} + +bool Rpl_transaction_write_set_ctx::get_has_missing_keys() +{ + DBUG_ENTER("Transaction_context_log_event::get_has_missing_keys"); + DBUG_RETURN(m_has_missing_keys); +} + +void Rpl_transaction_write_set_ctx::set_has_related_foreign_keys() +{ + DBUG_ENTER("Transaction_context_log_event::set_has_related_foreign_keys"); + m_has_related_foreign_keys= true; + DBUG_VOID_RETURN; +} + +bool Rpl_transaction_write_set_ctx::get_has_related_foreign_keys() +{ + DBUG_ENTER("Transaction_context_log_event::get_has_related_foreign_keys"); + DBUG_RETURN(m_has_related_foreign_keys); +} + /** Implementation of service_rpl_transaction_write_set, see @file include/mysql/service_rpl_transaction_write_set.h diff --git a/sql/rpl_transaction_write_set_ctx.h b/sql/rpl_transaction_write_set_ctx.h index 34736a6cffc1..563676ce3087 100644 --- a/sql/rpl_transaction_write_set_ctx.h +++ b/sql/rpl_transaction_write_set_ctx.h @@ -54,6 +54,31 @@ class Rpl_transaction_write_set_ctx */ void clear_write_set(); + /* + mark transactions that include tables with no pk + */ + void set_has_missing_keys(); + + /* + check if the transaction was marked as having missing keys. + + @retval true The transaction accesses tables with no PK. + @retval false All tables referenced in transaction have PK. + */ + bool get_has_missing_keys(); + + /* + mark transactions that include tables referenced by foreign keys + */ + void set_has_related_foreign_keys(); + + /* + function to check if the transaction was marked as having missing keys. + + @retval true If the transaction was marked as being referenced by a foreign key + */ + bool get_has_related_foreign_keys(); + /** Function to add a new SAVEPOINT identifier in the savepoint map in the transaction_ctx object. @@ -94,6 +119,9 @@ class Rpl_transaction_write_set_ctx std::vector write_set; std::set write_set_unique; + bool m_has_missing_keys; + bool m_has_related_foreign_keys; + /** Contains information related to SAVEPOINTs. The key on map is the identifier and the value is the size of write set when command was diff --git a/sql/rpl_trx_tracking.cc b/sql/rpl_trx_tracking.cc new file mode 100644 index 000000000000..673776be5cd9 --- /dev/null +++ b/sql/rpl_trx_tracking.cc @@ -0,0 +1,394 @@ +/* Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + + 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, + 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */ + +#include "rpl_trx_tracking.h" + +#include "mysqld.h" +#include "binlog.h" + + +Logical_clock::Logical_clock() + : state(SEQ_UNINIT), offset(0) +{} + +/** + Atomically fetch the current state. + @return not subtracted "absolute" value. + */ +inline int64 Logical_clock::get_timestamp() +{ + int64 retval= 0; + DBUG_ENTER("Logical_clock::get_timestamp"); + retval= my_atomic_load64(&state); + DBUG_RETURN(retval); +} + +/** + Steps the absolute value of the clock (state) to return + an updated value. + The caller must be sure to call the method in no concurrent + execution context so either offset and state can't change. + + @return incremented "absolute" value + */ +inline int64 Logical_clock::step() +{ + DBUG_ASSERT(SEQ_UNINIT == 0); + DBUG_EXECUTE_IF("logical_clock_step_2", ++state;); + return ++state; +} + +/** + To try setting the clock *forward*. + The clock does not change when the new value is in the past + which is reflected by the new value and by offset. + In other words the function main effects is described as + state= max(state, new_value). + Offset that exceeds the new value indicates the binary log rotation + to render such new value useless. + + @param new_val a new value (offset included) + @return a (new) value of state member regardless whether it's changed or not. + */ +inline int64 Logical_clock::set_if_greater(int64 new_val) +{ + longlong old_val= new_val - 1; + bool cas_rc; + + DBUG_ENTER("Logical_clock::set_if_greater"); + + DBUG_ASSERT(new_val > 0); + + if (new_val <= offset) + { + /* + This function's invocation can be separated from the + transaction's flushing by few rotations. A late to log + transaction does not change the clock, similarly to how + its timestamps are handled at flushing. + */ + DBUG_RETURN(SEQ_UNINIT); + } + + DBUG_ASSERT(new_val > 0); + + while (!(cas_rc= my_atomic_cas64(&state, &old_val, new_val)) && + old_val < new_val) + {} + + DBUG_ASSERT(state >= new_val); // setting can't be done to past + + DBUG_ASSERT(cas_rc || old_val >= new_val); + + DBUG_RETURN(cas_rc ? new_val : old_val); +} + + +/** + Get the sequence_number for a transaction, and get the last_commit based + on parallel committing transactions. + + @param[in] thd Current THD from which to extract trx context. + @param[in,out] sequence_number Sequence number of current transaction. + @param[in,out] commit_parent Commit_parent of current transaction, + pre-filled with the commit_parent calculated + by the logical clock logic. +*/ +void +Commit_order_trx_dependency_tracker::get_dependency(THD *thd, + int64 &sequence_number, + int64 &commit_parent) +{ + Transaction_ctx *trn_ctx= thd->get_transaction(); + + DBUG_ASSERT(trn_ctx->sequence_number + > m_max_committed_transaction.get_offset()); + /* + Prepare sequence_number and commit_parent relative to the current + binlog. This is done by subtracting the binlog's clock offset + from the values. + + A transaction that commits after the binlog is rotated, can have a + commit parent in the previous binlog. In this case, subtracting + the offset from the sequence number results in a negative + number. The commit parent dependency gets lost in such + case. Therefore, we log the value SEQ_UNINIT in this case. + */ + sequence_number= + trn_ctx->sequence_number - m_max_committed_transaction.get_offset(); + + commit_parent= + trn_ctx->last_committed <= m_max_committed_transaction.get_offset() + ? SEQ_UNINIT + : trn_ctx->last_committed - m_max_committed_transaction.get_offset(); +} + +int64 +Commit_order_trx_dependency_tracker::step() +{ + return m_transaction_counter.step(); +} + +void +Commit_order_trx_dependency_tracker::rotate() +{ + m_max_committed_transaction. + update_offset(m_transaction_counter.get_timestamp()); + + m_transaction_counter. + update_offset(m_transaction_counter.get_timestamp()); +} + +void +Commit_order_trx_dependency_tracker::update_max_committed(int64 sequence_number) +{ + m_max_committed_transaction.set_if_greater(sequence_number); +} + +/** + Get the writeset dependencies of a transaction. + This takes the commit_parent that must be previously set using + Commit_order_trx_dependency_tracker and tries to make the commit_parent as + low as possible, using the writesets of each transaction. + The commit_parent returned depends on how many row hashes are stored in the + writeset_history, which is cleared once it reaches the user-defined maximum. + + @param[in] thd Current THD from which to extract trx context. + @param[in,out] sequence_number Sequence number of current transaction. + @param[in,out] commit_parent Commit_parent of current transaction, + pre-filled with the commit_parent calculated by + Commit_order_trx_dependency_tracker to use when + the writeset commit_parent is not valid. +*/ +void +Writeset_trx_dependency_tracker::get_dependency(THD *thd, + int64 &sequence_number, + int64 &commit_parent) +{ + Rpl_transaction_write_set_ctx *write_set_ctx= + thd->get_transaction()->get_transaction_write_set_ctx(); + std::set *writeset= write_set_ctx->get_write_set(); + +#ifndef DBUG_OFF + /* The writeset of an empty transaction must be empty. */ + if (is_empty_transaction_in_binlog_cache(thd)) + DBUG_ASSERT(writeset->size() == 0); +#endif + + /* + Check if this transaction has a writeset, if the writeset will overflow the + history size, if the transaction_write_set_extraction is consistent + between session and global or if changes in the tables referenced in this + transaction cascade to other tables. If that happens revert to using the + COMMIT_ORDER and clear the history to keep data consistent. + */ + bool can_use_writesets= + // empty writeset implies DDL or similar, except if there are missing keys + (writeset->size() != 0 || write_set_ctx->get_has_missing_keys() || + /* + The empty transactions do not need to clear the writeset history, since + they can be executed in parallel. + */ + is_empty_transaction_in_binlog_cache(thd)) && + // hashing algorithm for the session must be the same as used by other rows in history + (global_system_variables.transaction_write_set_extraction == + thd->variables.transaction_write_set_extraction) && + // must not use foreign keys + !write_set_ctx->get_has_related_foreign_keys(); + bool exceeds_capacity= false; + + if (can_use_writesets) + { + /* + Check if adding this transaction exceeds the capacity of the writeset + history. If that happens, m_writeset_history will be cleared only after + using its information for current transaction. + */ + exceeds_capacity= + m_writeset_history.size() + writeset->size() > m_opt_max_history_size; + + /* + Compute the greatest sequence_number among all conflicts and add the + transaction's row hashes to the history. + */ + int64 last_parent= m_writeset_history_start; + for (std::set::iterator it= writeset->begin(); + it != writeset->end(); ++it) + { + Writeset_history::iterator hst= m_writeset_history.find(*it); + if (hst != m_writeset_history.end()) + { + if (hst->second > last_parent && hst->second < sequence_number) + last_parent= hst->second; + + hst->second= sequence_number; + } + else + { + if (!exceeds_capacity) + m_writeset_history.insert(std::pair(*it, sequence_number)); + } + } + + /* + If the transaction references tables with missing primary keys revert to + COMMIT_ORDER, update and not reset history, as it is unnecessary because + any transaction that refers this table will also revert to COMMIT_ORDER. + */ + if (!write_set_ctx->get_has_missing_keys()) + { + /* + The WRITESET commit_parent then becomes the minimum of largest parent + found using the hashes of the row touched by the transaction and the + commit parent calculated with COMMIT_ORDER. + */ + commit_parent= std::min(last_parent, commit_parent); + } + } + + if (exceeds_capacity || !can_use_writesets) + { + m_writeset_history_start= sequence_number; + m_writeset_history.clear(); + } +} + +void +Writeset_trx_dependency_tracker::rotate(int64 start) +{ + m_writeset_history_start= start; + m_writeset_history.clear(); +} + +/** + Get the writeset commit parent of transactions using the session dependencies. + + @param[in] thd Current THD from which to extract trx context. + @param[in,out] sequence_number Sequence number of current transaction. + @param[in,out] commit_parent Commit_parent of current transaction, + pre-filled with the commit_parent calculated + by the Write_set_trx_dependency_tracker as a + fall-back. +*/ +void +Writeset_session_trx_dependency_tracker::get_dependency(THD *thd, + int64 &sequence_number, + int64 &commit_parent) +{ + int64 session_parent= thd->rpl_thd_ctx.dependency_tracker_ctx(). + get_last_session_sequence_number(); + + if (session_parent != 0 && session_parent < sequence_number) + commit_parent= std::max(commit_parent, session_parent); + + thd->rpl_thd_ctx.dependency_tracker_ctx(). + set_last_session_sequence_number(sequence_number); +} + +/** + Get the dependencies in a transaction, the main entry point for the + dependency tracking work. +*/ +void +Transaction_dependency_tracker::get_dependency(THD *thd, + int64 &sequence_number, + int64 &commit_parent) +{ + sequence_number= commit_parent= 0; + + switch(m_opt_tracking_mode) + { + case DEPENDENCY_TRACKING_COMMIT_ORDER: + m_commit_order.get_dependency(thd, sequence_number, commit_parent); + break; + case DEPENDENCY_TRACKING_WRITESET: + m_commit_order.get_dependency(thd, sequence_number, commit_parent); + m_writeset.get_dependency(thd, sequence_number, commit_parent); + break; + case DEPENDENCY_TRACKING_WRITESET_SESSION: + m_commit_order.get_dependency(thd, sequence_number, commit_parent); + m_writeset.get_dependency(thd, sequence_number, commit_parent); + m_writeset_session.get_dependency(thd, sequence_number, commit_parent); + break; + default: + DBUG_ASSERT(0); // blow up on debug + /* + Fallback to commit order on production builds. + */ + m_commit_order.get_dependency(thd, sequence_number, commit_parent); + } +} + +void +Transaction_dependency_tracker::tracking_mode_changed() +{ + Logical_clock max_committed_transaction= + m_commit_order.get_max_committed_transaction(); + int64 timestamp= max_committed_transaction.get_timestamp() + - max_committed_transaction.get_offset(); + + m_writeset.rotate(timestamp); +} + +/** + The method is to be executed right before committing time. + It must be invoked even if the transaction does not commit + to engine being merely logged into the binary log. + max_committed_transaction is updated with a greater timestamp + value. + As a side effect, the transaction context's sequence_number + is reset. + + @param thd a pointer to THD instance +*/ +void +Transaction_dependency_tracker::update_max_committed(THD *thd) +{ + Transaction_ctx *trn_ctx= thd->get_transaction(); + m_commit_order.update_max_committed(trn_ctx->sequence_number); + /* + sequence_number timestamp isn't needed anymore, so it's cleared off. + */ + trn_ctx->sequence_number= SEQ_UNINIT; + + DBUG_ASSERT(trn_ctx->last_committed == SEQ_UNINIT || + thd->commit_error == THD::CE_FLUSH_ERROR); +} + +int64 +Transaction_dependency_tracker::step() +{ + return m_commit_order.step(); +} + +void +Transaction_dependency_tracker::rotate() +{ + m_commit_order.rotate(); + /* + To make slave appliers be able to execute transactions in parallel + after rotation, set the minimum commit_parent to 1 after rotation. + */ + m_writeset.rotate(1); + if (current_thd) + current_thd->get_transaction()->sequence_number= 2; +} + +int64 Transaction_dependency_tracker::get_max_committed_timestamp() +{ + return m_commit_order.get_max_committed_transaction().get_timestamp(); +} + + diff --git a/sql/rpl_trx_tracking.h b/sql/rpl_trx_tracking.h new file mode 100644 index 000000000000..e12cbd07f26d --- /dev/null +++ b/sql/rpl_trx_tracking.h @@ -0,0 +1,232 @@ +#ifndef RPL_TRX_TRACKING_INCLUDED +/* Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + + 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, + 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */ + +#define RPL_TRX_TRACKING_INCLUDED + +//#include +#include + +#include "my_dbug.h" +#include "sql_class.h" + + +/** + Logical timestamp generator for logical timestamping binlog transactions. + A transaction is associated with two sequence numbers see + @c Transaction_ctx::last_committed and @c Transaction_ctx::sequence_number. + The class provides necessary interfaces including that of + generating a next consecutive value for the latter. +*/ +class Logical_clock +{ +private: + int64 state; + /* + Offset is subtracted from the actual "absolute time" value at + logging a replication event. That is the event holds logical + timestamps in the "relative" format. They are meaningful only in + the context of the current binlog. + The member is updated (incremented) per binary log rotation. + */ + int64 offset; +public: + Logical_clock(); + int64 step(); + int64 set_if_greater(int64 new_val); + int64 get_timestamp(); + int64 get_offset() { return offset; } + /* + Updates the offset. + This operation is invoked when binlog rotates and at that time + there can't any concurrent step() callers so no need to guard + the assignement. + */ + void update_offset(int64 new_offset) + { + DBUG_ASSERT(offset <= new_offset); + + offset= new_offset; + } +}; + +/** + Generate logical timestamps for MTS using COMMIT_ORDER + in the binlog-transaction-dependency-tracking option. +*/ +class Commit_order_trx_dependency_tracker +{ +public: + /** + Main function that gets the dependencies using the COMMIT_ORDER tracker. + + @param [in] thd THD of the caller. + @param [in,out] sequence_number sequence_number initialized and returned. + @param [in,out] commit_parent commit_parent to be returned. + */ + void get_dependency(THD *thd, int64 &sequence_number, int64 &commit_parent); + + void update_max_committed(int64 sequence_number); + + Logical_clock get_max_committed_transaction() + { + return m_max_committed_transaction; + } + + int64 step(); + void rotate(); + +private: + /* Committed transactions timestamp */ + Logical_clock m_max_committed_transaction; + + /* "Prepared" transactions timestamp */ + Logical_clock m_transaction_counter; +}; + +/** + Generate logical timestamps for MTS using WRITESET + in the binlog-transaction-dependency-tracking option. +*/ +class Writeset_trx_dependency_tracker +{ +public: + Writeset_trx_dependency_tracker(uint64 max_history_size): + m_opt_max_history_size(max_history_size), + m_writeset_history_start(0) + {} + + /** + Main function that gets the dependencies using the WRITESET tracker. + + @param [in] thd THD of the caller. + @param [in,out] sequence_number sequence_number initialized and returned. + @param [in,out] commit_parent commit_parent to be returned. + */ + void get_dependency(THD *thd, int64 &sequence_number, int64 &commit_parent); + + void rotate(int64 start); + + /* option opt_binlog_transaction_dependency_history_size */ + ulong m_opt_max_history_size; + +private: + /* + Monitor the last transaction with write-set to use as the minimal + commit parent when logical clock source is WRITE_SET, i.e., the most recent + transaction that is not in the history, or 0 when the history is empty. + + The m_writeset_history_start must to be set to 0 initially and whenever the + binlog_transaction_dependency_tracking variable is changed or the history + is cleared, so that it is updated to the first transaction for which the + dependencies are checked. + */ + int64 m_writeset_history_start; + + /* + Track the last transaction sequence number that changed each row + in the database, using row hashes from the writeset as the index. + */ + typedef std::map Writeset_history; + Writeset_history m_writeset_history; +}; + +/** + Generate logical timestamps for MTS using WRITESET_SESSION + in the binlog-transaction-dependency-tracking option. +*/ +class Writeset_session_trx_dependency_tracker +{ +public: + /** + Main function that gets the dependencies using the WRITESET_SESSION tracker. + + @param [in] thd THD of the caller. + @param [in,out] sequence_number sequence_number initialized and returned. + @param [in,out] commit_parent commit_parent to be returned. + */ + void get_dependency(THD *thd, int64 &sequence_number, int64 &commit_parent); +}; + +/** + Modes for parallel transaction dependency tracking +*/ +enum enum_binlog_transaction_dependency_tracking +{ + /** + Tracks dependencies based on the commit order of transactions. + The time intervals during which any transaction holds all its locks are + tracked (the interval ends just before storage engine commit, when locks + are released. For an autocommit transaction it begins just before storage + engine prepare. For BEGIN..COMMIT transactions it begins at the end of the + last statement before COMMIT). Two transactions are marked as + non-conflicting if their respective intervals overlap. In other words, + if trx1 appears before trx2 in the binlog, and trx2 had acquired all its + locks before trx1 released its locks, then trx2 is marked such that the + slave can schedule it in parallel with trx1. + */ + DEPENDENCY_TRACKING_COMMIT_ORDER= 0, + /** + Tracks dependencies based on the set of rows updated. Any two transactions + that change disjoint sets of rows, are said concurrent and non-contending. + */ + DEPENDENCY_TRACKING_WRITESET= 1, + /** + Tracks dependencies based on the set of rows updated per session. Any two + transactions that change disjoint sets of rows, on different sessions, + are said concurrent and non-contending. Transactions from the same session + are always said to be dependent, i.e., are never concurrent and + non-contending. + */ + DEPENDENCY_TRACKING_WRITESET_SESSION= 2 +}; + +/** + Dependency tracker is a container singleton that dispatches between the three + methods associated with the binlog-transaction-dependency-tracking option. + There is a singleton instance of each of these classes. +*/ +class Transaction_dependency_tracker +{ +public: + Transaction_dependency_tracker(): + m_opt_tracking_mode(DEPENDENCY_TRACKING_COMMIT_ORDER), m_writeset(25000) {} + + void get_dependency(THD *thd, int64 &sequence_number, int64 &commit_parent); + + void tracking_mode_changed(); + + void update_max_committed(THD *thd); + int64 get_max_committed_timestamp(); + + int64 step(); + void rotate(); + +public: + /* option opt_binlog_transaction_dependency_tracking */ + long m_opt_tracking_mode; + + Writeset_trx_dependency_tracker *get_writeset() + { + return &m_writeset; + } + +private: + Writeset_trx_dependency_tracker m_writeset; + Commit_order_trx_dependency_tracker m_commit_order; + Writeset_session_trx_dependency_tracker m_writeset_session; +}; + +#endif /* RPL_TRX_TRACKING_INCLUDED */ diff --git a/sql/rpl_write_set_handler.cc b/sql/rpl_write_set_handler.cc index e9e9311042ef..0064906530ec 100644 --- a/sql/rpl_write_set_handler.cc +++ b/sql/rpl_write_set_handler.cc @@ -21,6 +21,7 @@ #include "sql_class.h" // THD #include "sql_list.h" // List #include "table.h" // TABLE +#include "rpl_handler.h" #include "my_murmur3.h" // murmur3_32 #include "../extra/lz4/my_xxhash.h" // xxHash @@ -471,6 +472,9 @@ void add_pke(TABLE *table, THD *thd) Finally these value are hashed using the murmur hash function to prevent sending more for certification algorithm. */ + Rpl_transaction_write_set_ctx* ws_ctx= + thd->get_transaction()->get_transaction_write_set_ctx(); + int writeset_hashes_added= 0; if(table->key_info && (table->s->primary_key < MAX_KEY)) { @@ -605,6 +609,7 @@ void add_pke(TABLE *table, THD *thd) if (i == table->key_info[key_number].user_defined_key_parts) { generate_hash_pke(pke, collation_conversion_algorithm, thd); + writeset_hashes_added++; #ifndef DBUG_OFF write_sets.push_back(pke); #endif @@ -706,6 +711,7 @@ void add_pke(TABLE *table, THD *thd) pke_prefix.append(value_length); generate_hash_pke(pke_prefix, collation_conversion_algorithm, thd); + writeset_hashes_added++; #ifndef DBUG_OFF write_sets.push_back(pke_prefix); #endif @@ -715,6 +721,9 @@ void add_pke(TABLE *table, THD *thd) } } + if (table->file->referenced_by_foreign_key()) + ws_ctx->set_has_related_foreign_keys(); + my_free(pk_value); #ifndef DBUG_OFF @@ -722,5 +731,8 @@ void add_pke(TABLE *table, THD *thd) #endif } + if (writeset_hashes_added == 0) + ws_ctx->set_has_missing_keys(); + DBUG_VOID_RETURN; } diff --git a/sql/sql_class.cc b/sql/sql_class.cc index 6bb2e06f8e0e..d8bd3c9b9df0 100644 --- a/sql/sql_class.cc +++ b/sql/sql_class.cc @@ -1584,6 +1584,8 @@ void THD::init(void) owned_gtid.clear(); owned_sid.clear(); owned_gtid.dbug_print(NULL, "set owned_gtid (clear) in THD::init"); + + rpl_thd_ctx.dependency_tracker_ctx().set_last_session_sequence_number(0); } diff --git a/sql/sys_vars.cc b/sql/sys_vars.cc index 5b1ab5f55cbe..0452ae55c2dd 100644 --- a/sql/sys_vars.cc +++ b/sql/sys_vars.cc @@ -1873,6 +1873,18 @@ static bool transaction_write_set_check(sys_var *self, THD *thd, set_var *var) var->var->name.str); return true; } + /* + Disallow changing variable 'transaction_write_set_extraction' while + binlog_transaction_dependency_tracking is different from COMMIT_ORDER. + */ + if (mysql_bin_log.m_dependency_tracker.m_opt_tracking_mode + != DEPENDENCY_TRACKING_COMMIT_ORDER) + { + my_error(ER_WRONG_USAGE, MYF(0), + "transaction_write_set_extraction (changed)", + "binlog_transaction_dependency_tracking (!= COMMIT_ORDER)"); + return true; + } return false; } @@ -3548,6 +3560,68 @@ static Sys_var_enum Mts_parallel_type( NOT_IN_BINLOG, ON_CHECK(check_slave_stopped), ON_UPDATE(NULL)); +static bool check_binlog_transaction_dependency_tracking(sys_var *self, THD *thd, set_var *var) +{ + if (global_system_variables.transaction_write_set_extraction == HASH_ALGORITHM_OFF + && var->save_result.ulonglong_value != DEPENDENCY_TRACKING_COMMIT_ORDER) + { + my_error(ER_WRONG_USAGE, MYF(0), + "binlog_transaction_dependency_tracking (!= COMMIT_ORDER)", + "transaction_write_set_extraction (= OFF)"); + + return true; + } + return false; +} + +static bool update_binlog_transaction_dependency_tracking(sys_var* var, THD* thd, enum_var_type v) +{ + /* + the writeset_history_start needs to be set to 0 whenever there is a + change in the transaction dependency source so that WS and COMMIT + transition smoothly. + */ + mysql_bin_log.m_dependency_tracker.tracking_mode_changed(); + return false; +} + +void PolyLock_lock_log::rdlock() +{ + mysql_mutex_lock(mysql_bin_log.get_log_lock()); +} + +void PolyLock_lock_log::wrlock() +{ + mysql_mutex_lock(mysql_bin_log.get_log_lock()); +} + +void PolyLock_lock_log::unlock() +{ + mysql_mutex_unlock(mysql_bin_log.get_log_lock()); +} + +static PolyLock_lock_log PLock_log; +static const char *opt_binlog_transaction_dependency_tracking_names[]= + {"COMMIT_ORDER", "WRITESET", "WRITESET_SESSION", NullS}; +static Sys_var_enum Binlog_transaction_dependency_tracking( + "binlog_transaction_dependency_tracking", + "Selects the source of dependency information from which to " + "assess which transactions can be executed in parallel by the " + "slave's multi-threaded applier. " + "Possible values are COMMIT_ORDER, WRITESET and WRITESET_SESSION.", + GLOBAL_VAR(mysql_bin_log.m_dependency_tracker.m_opt_tracking_mode), + CMD_LINE(REQUIRED_ARG), opt_binlog_transaction_dependency_tracking_names, + DEFAULT(DEPENDENCY_TRACKING_COMMIT_ORDER), &PLock_log, + NOT_IN_BINLOG, ON_CHECK(check_binlog_transaction_dependency_tracking), + ON_UPDATE(update_binlog_transaction_dependency_tracking)); +static Sys_var_ulong Binlog_transaction_dependency_history_size( + "binlog_transaction_dependency_history_size", + "Maximum number of rows to keep in the writeset history.", + GLOBAL_VAR(mysql_bin_log.m_dependency_tracker.get_writeset()->m_opt_max_history_size), + CMD_LINE(REQUIRED_ARG, 0), VALID_RANGE(1, 1000000), DEFAULT(25000), + BLOCK_SIZE(1), &PLock_log, NOT_IN_BINLOG, ON_CHECK(NULL), + ON_UPDATE(NULL)); + static Sys_var_mybool Sys_slave_preserve_commit_order( "slave_preserve_commit_order", "Force slave workers to make commits in the same order as on the master. " diff --git a/sql/sys_vars_shared.h b/sql/sys_vars_shared.h index 7936f7d13381..10fc19b9eea4 100644 --- a/sql/sys_vars_shared.h +++ b/sql/sys_vars_shared.h @@ -1,7 +1,7 @@ #ifndef SYS_VARS_SHARED_INCLUDED #define SYS_VARS_SHARED_INCLUDED -/* Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2002, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -66,6 +66,14 @@ class PolyLock_rwlock: public PolyLock void unlock() { mysql_rwlock_unlock(rwlock); } }; +class PolyLock_lock_log: public PolyLock +{ +public: + void rdlock(); + void wrlock(); + void unlock(); +}; + class AutoWLock { PolyLock *lock; From 1f78a6c1318c1e3a4f01dd0d5dcaef72ab94fa41 Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Mon, 26 Feb 2018 18:14:30 -0700 Subject: [PATCH 0610/1221] TDB-109 : Data race on cache table attributes detected by the thread sanitizer TDB-111 : memory leaks in TDB-2 and TDB-89 tests - Advance got submodule commit pointer to pick up these FT changes. - Will be cherry-picked forward. --- storage/tokudb/PerconaFT | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage/tokudb/PerconaFT b/storage/tokudb/PerconaFT index f27c8a78167f..f2ea623d4d5c 160000 --- a/storage/tokudb/PerconaFT +++ b/storage/tokudb/PerconaFT @@ -1 +1 @@ -Subproject commit f27c8a78167ff5d5a7b9228e116376c2c49e30f7 +Subproject commit f2ea623d4d5ce2abf28f6ae2213bc6a021464b86 From 2d73799ef4164e91ed10992e653783a6f29372ed Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Tue, 27 Feb 2018 01:27:59 +0000 Subject: [PATCH 0611/1221] MYR-245 : Test rocksdb.add_index_inplace_sstfilewriter failing due to max_num_locks limit - Fixed max and default values which was incorrectly changed by MYR-234 which changed both the max and the default values to 1024 * 1024. The change needed to only change the default value to 1024 * 1024. - Altered add_index_inplace_sstfilewriter to change session rocksdb_max_row_locks to value high enough for test to succeed. - Re-recorded test. --- .../suite/rocksdb/t/add_index_inplace_sstfilewriter.test | 2 ++ storage/rocksdb/ha_rocksdb.cc | 5 +++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/mysql-test/suite/rocksdb/t/add_index_inplace_sstfilewriter.test b/mysql-test/suite/rocksdb/t/add_index_inplace_sstfilewriter.test index edcc429809c0..00557b18d1cb 100644 --- a/mysql-test/suite/rocksdb/t/add_index_inplace_sstfilewriter.test +++ b/mysql-test/suite/rocksdb/t/add_index_inplace_sstfilewriter.test @@ -1,6 +1,8 @@ --source include/big_test.inc --source include/have_rocksdb.inc +set rocksdb_max_row_locks=6000000; + # Create a table with a primary key and one secondary key as well as one # more column CREATE TABLE t1(pk CHAR(5) PRIMARY KEY, a char(30), b char(30)) ENGINE=ROCKSDB COLLATE 'latin1_bin'; diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index 2cde8775c432..dd4fa40bb0b8 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -433,7 +433,8 @@ static void rocksdb_set_wal_bytes_per_sync(THD *thd, // Options definitions ////////////////////////////////////////////////////////////////////////////// static constexpr ulong RDB_MAX_LOCK_WAIT_SECONDS = 1024 * 1024 * 1024; -static constexpr ulong RDB_MAX_ROW_LOCKS = 1024 * 1024; +static constexpr ulong RDB_MAX_ROW_LOCKS = 1024 * 1024 * 1024; +static constexpr ulong RDB_DEFAULT_ROW_LOCKS = 1024 * 1024; static constexpr ulong RDB_DEFAULT_BULK_LOAD_SIZE = 1000; static constexpr ulong RDB_MAX_BULK_LOAD_SIZE = 1024 * 1024 * 1024; static constexpr size_t RDB_DEFAULT_MERGE_BUF_SIZE = 64 * 1024 * 1024; @@ -679,7 +680,7 @@ static MYSQL_THDVAR_BOOL(skip_bloom_filter_on_read, PLUGIN_VAR_RQCMDARG, static MYSQL_THDVAR_ULONG(max_row_locks, PLUGIN_VAR_RQCMDARG, "Maximum number of locks a transaction can have", nullptr, nullptr, - /*default*/ RDB_MAX_ROW_LOCKS, + /*default*/ RDB_DEFAULT_ROW_LOCKS, /*min*/ 1, /*max*/ RDB_MAX_ROW_LOCKS, 0); From e9f2e8f3655efb6e02c2848882187316dfa7be85 Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Mon, 26 Feb 2018 18:14:30 -0700 Subject: [PATCH 0612/1221] TDB-109 : Data race on cache table attributes detected by the thread sanitizer TDB-111 : memory leaks in TDB-2 and TDB-89 tests - Advance got submodule commit pointer to pick up these FT changes. - Will be cherry-picked forward. (cherry picked from commit 1f78a6c1318c1e3a4f01dd0d5dcaef72ab94fa41) --- storage/tokudb/PerconaFT | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage/tokudb/PerconaFT b/storage/tokudb/PerconaFT index f27c8a78167f..f2ea623d4d5c 160000 --- a/storage/tokudb/PerconaFT +++ b/storage/tokudb/PerconaFT @@ -1 +1 @@ -Subproject commit f27c8a78167ff5d5a7b9228e116376c2c49e30f7 +Subproject commit f2ea623d4d5ce2abf28f6ae2213bc6a021464b86 From 50b403997f5ef41f581977c22b31bbaa7a624a23 Mon Sep 17 00:00:00 2001 From: Vitor Oliveira Date: Mon, 26 Feb 2018 21:14:27 +0100 Subject: [PATCH 0613/1221] WL#9556 introduced the ability to use transaction write sets to find out which transactions can be safely executed concurrently on the slave. The transactions are tracked on the master and the binary log commit_parent field, which is used by the MTS applier on the slave, is changed to consider writeset dependencies between transactions. Relevant changes to the code: - introduces two new options: binlog-transaction-dependency-tracking, which selects the tracking mode between COMMIT_ORDER, WRITESET and WRITESET_SESSION, and binlog-transaction-dependency-history-size. - adds the Transaction_dependency_tracker and associated classes Commit_order_trx_dependency_tracker, Writeset_trx_dependency_tracker and Writeset_session_trx_dependency_tracker, specific to each of the tracking modes (in the new rpl_trx_tracking.h/.cc files). - to support the WRITESET mode, the hashes of each row touched by a transaction are stored in the m_writeset_history map, up to the size determined by the binlog-transaction-dependency-history-size option. - to support the WRITESET_SESSION mode, the Dependency_tracker_ctx is added to the THD so that the last sequence_number used by a client is available for future transactions of the same session. - extends the function add_pke to track transactions that touch tables with primary keys and tables without them, so that partial writesets are detected. This WL back-ports WL#9556 to MySQL 5.7, in addition to the fixes for the following bugs: BUG#25950554: THE FUNCTION RESET_CONNECTION DOES NOT RESET WRITE SET... BUG#25982097: WRITESET DEPENDENCY TRACKING SUB-OPTIMAL AFTER ROTATION... (cherry picked from commit a888381055ea680e3985dccd28c10d1e2476c3eb) --- mysql-test/include/assert_grep.inc | 4 + .../include/assert_logical_timestamps.inc | 24 +- ...ction_dependency_tracking_commit_order.inc | 4 + mysql-test/r/mysqld--help-notwin.result | 9 + mysql-test/r/mysqld--help-win.result | 9 + ...reset_connection_not_reset_writeset.result | 15 + ...action_dependency_tracking_on_start.result | 54 ++ ...ction_dependency_tracking_sensitive.result | 34 + ...g_reset_connection_not_reset_writeset.test | 63 ++ ...on_dependency_tracking_on_start-master.opt | 1 + ...nsaction_dependency_tracking_on_start.test | 164 ++++ ...saction_dependency_tracking_sensitive.test | 77 ++ .../suite/perfschema/r/show_sanity.result | 4 + ...transaction_dependency_history_size.result | 108 +++ ...log_transaction_dependency_tracking.result | 810 +++++++++++++++++ ...dependency_tracking_with_empty_trxs.result | 38 + ...on_dependency_tracking_with_filters.result | 109 +++ ...saction_dependency_tracking_with_fk.result | 412 +++++++++ ...on_dependency_tracking_with_indexes.result | 824 ++++++++++++++++++ ...saction_dependency_history_size-master.opt | 3 + ...g_transaction_dependency_history_size.test | 135 +++ ...inlog_transaction_dependency_tracking.test | 385 ++++++++ ...n_dependency_tracking_with_empty_trxs.test | 71 ++ ...tion_dependency_tracking_with_filters.test | 183 ++++ ...ion_dependency_tracking_with_fk-master.opt | 2 + ...ansaction_dependency_tracking_with_fk.test | 212 +++++ ...tion_dependency_tracking_with_indexes.test | 319 +++++++ ...transaction_dependency_h_size_basic.result | 43 + ...ansaction_dependency_tracking_basic.result | 82 ++ ...g_transaction_dependency_h_size_basic.test | 106 +++ ...transaction_dependency_tracking_basic.test | 155 ++++ .../tests/collections/default.weekly | 1 + .../mtr/t/gr_collations_key_conflict.test | 1 - .../t/gr_write_set_extraction_algorithm.test | 1 + rapid/plugin/x/tests/mtr/r/connection.result | 2 +- rapid/plugin/x/tests/mtr/t/connection.test | 2 +- sql/CMakeLists.txt | 5 +- sql/binlog.cc | 269 +++--- sql/binlog.h | 63 +- sql/mysqld.cc | 10 + sql/rpl_context.h | 31 +- sql/rpl_transaction_write_set_ctx.cc | 30 +- sql/rpl_transaction_write_set_ctx.h | 28 + sql/rpl_trx_tracking.cc | 394 +++++++++ sql/rpl_trx_tracking.h | 232 +++++ sql/rpl_write_set_handler.cc | 12 + sql/sql_class.cc | 2 + sql/sys_vars.cc | 74 ++ sql/sys_vars_shared.h | 10 +- 49 files changed, 5437 insertions(+), 189 deletions(-) create mode 100644 mysql-test/include/only_binlog_transaction_dependency_tracking_commit_order.inc create mode 100644 mysql-test/suite/binlog/r/binlog_reset_connection_not_reset_writeset.result create mode 100644 mysql-test/suite/binlog/r/binlog_transaction_dependency_tracking_on_start.result create mode 100644 mysql-test/suite/binlog/r/binlog_transaction_dependency_tracking_sensitive.result create mode 100644 mysql-test/suite/binlog/t/binlog_reset_connection_not_reset_writeset.test create mode 100644 mysql-test/suite/binlog/t/binlog_transaction_dependency_tracking_on_start-master.opt create mode 100644 mysql-test/suite/binlog/t/binlog_transaction_dependency_tracking_on_start.test create mode 100644 mysql-test/suite/binlog/t/binlog_transaction_dependency_tracking_sensitive.test create mode 100644 mysql-test/suite/rpl/r/rpl_binlog_transaction_dependency_history_size.result create mode 100644 mysql-test/suite/rpl/r/rpl_binlog_transaction_dependency_tracking.result create mode 100644 mysql-test/suite/rpl/r/rpl_binlog_transaction_dependency_tracking_with_empty_trxs.result create mode 100644 mysql-test/suite/rpl/r/rpl_binlog_transaction_dependency_tracking_with_filters.result create mode 100644 mysql-test/suite/rpl/r/rpl_binlog_transaction_dependency_tracking_with_fk.result create mode 100644 mysql-test/suite/rpl/r/rpl_binlog_transaction_dependency_tracking_with_indexes.result create mode 100644 mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_history_size-master.opt create mode 100644 mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_history_size.test create mode 100644 mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_tracking.test create mode 100644 mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_tracking_with_empty_trxs.test create mode 100644 mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_tracking_with_filters.test create mode 100644 mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_tracking_with_fk-master.opt create mode 100644 mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_tracking_with_fk.test create mode 100644 mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_tracking_with_indexes.test create mode 100644 mysql-test/suite/sys_vars/r/binlog_transaction_dependency_h_size_basic.result create mode 100644 mysql-test/suite/sys_vars/r/binlog_transaction_dependency_tracking_basic.result create mode 100644 mysql-test/suite/sys_vars/t/binlog_transaction_dependency_h_size_basic.test create mode 100644 mysql-test/suite/sys_vars/t/binlog_transaction_dependency_tracking_basic.test create mode 100644 sql/rpl_trx_tracking.cc create mode 100644 sql/rpl_trx_tracking.h diff --git a/mysql-test/include/assert_grep.inc b/mysql-test/include/assert_grep.inc index a980a6d73b18..943b6f917c32 100644 --- a/mysql-test/include/assert_grep.inc +++ b/mysql-test/include/assert_grep.inc @@ -94,6 +94,10 @@ if ($assert_match != '') my $assert_only_after= $ENV{'_AG_ASSERT_ONLY_AFTER'}; my $out= $ENV{'_AG_OUT'}; + if (!defined($assert_count)) { + $assert_count = ''; + } + my $result= ''; my $count= 0; open(FILE, "$file") or die("Error $? opening $file: $!\n"); diff --git a/mysql-test/include/assert_logical_timestamps.inc b/mysql-test/include/assert_logical_timestamps.inc index b65e8e1574fb..43513e29b8d1 100644 --- a/mysql-test/include/assert_logical_timestamps.inc +++ b/mysql-test/include/assert_logical_timestamps.inc @@ -8,6 +8,8 @@ # --let $binlog_file= FILENAME # [--let $binlog_position= OFFSET] # --let $logical_timestamps= LC1 SN1[;LC2 SN2[;LC3 SN3...]] +# [--let $save_binlog_position= 1] +# [--let $dont_print_logical_timestamps= 1] # --source include/assert_logical_timestamps.inc # # Parameters: @@ -26,9 +28,23 @@ # integer. Note that this is whitespace-sensitive so there should # not be any other space characters than those separating # last_committed from sequence_number. - +# +# $save_binlog_position +# If this flag is set, the script will source +# include/save_binlog_position.inc after it has finished the +# assert, making the next invocation automatically continue where +# this invocation ended. This is convenient if the script is to +# be called multiple times in a sequence. +# +# $dont_print_logical_timestamps +# By default, $logical_timestamps is printed to the result log. If +# this flag is set, that is suppressed. --let $include_filename= include/assert_logical_timestamps.inc [$logical_timestamps] +if ($dont_print_logical_timestamps) +{ + --let $include_filename= include/assert_logical_timestamps.inc +} --source include/begin_include_file.inc @@ -53,5 +69,11 @@ if ($binlog_position) --remove_file $assert_file +if ($save_binlog_position) +{ + --source include/save_binlog_position.inc +} + + --let $include_filename= include/assert_logical_timestamps.inc [$logical_timestamps] --source include/end_include_file.inc diff --git a/mysql-test/include/only_binlog_transaction_dependency_tracking_commit_order.inc b/mysql-test/include/only_binlog_transaction_dependency_tracking_commit_order.inc new file mode 100644 index 000000000000..1ae9378b80be --- /dev/null +++ b/mysql-test/include/only_binlog_transaction_dependency_tracking_commit_order.inc @@ -0,0 +1,4 @@ +if (`SELECT @@GLOBAL.binlog_transaction_dependency_tracking != 'COMMIT_ORDER'`) +{ + --skip Test requires binlog_transaction_dependency_tracking= COMMIT_ORDER +} diff --git a/mysql-test/r/mysqld--help-notwin.result b/mysql-test/r/mysqld--help-notwin.result index 2d1e411e20e6..e818dd427d86 100644 --- a/mysql-test/r/mysqld--help-notwin.result +++ b/mysql-test/r/mysqld--help-notwin.result @@ -141,6 +141,13 @@ The following options may be given as the first argument: non-transactional engines for the binary log. If you often use statements updating a great number of rows, you can increase this to get more performance + --binlog-transaction-dependency-history-size=# + Maximum number of rows to keep in the writeset history. + --binlog-transaction-dependency-tracking=name + Selects the source of dependency information from which + to assess which transactions can be executed in parallel + by the slave's multi-threaded applier. Possible values + are COMMIT_ORDER, WRITESET and WRITESET_SESSION. --block-encryption-mode=name mode for AES_ENCRYPT/AES_DECRYPT --bootstrap Used by mysql installation scripts. @@ -1292,6 +1299,8 @@ binlog-row-event-max-size 8192 binlog-row-image FULL binlog-rows-query-log-events FALSE binlog-stmt-cache-size 32768 +binlog-transaction-dependency-history-size 25000 +binlog-transaction-dependency-tracking COMMIT_ORDER block-encryption-mode aes-128-ecb bulk-insert-buffer-size 8388608 character-set-client-handshake TRUE diff --git a/mysql-test/r/mysqld--help-win.result b/mysql-test/r/mysqld--help-win.result index 8ae2bbd089f0..f9ce47560aed 100644 --- a/mysql-test/r/mysqld--help-win.result +++ b/mysql-test/r/mysqld--help-win.result @@ -141,6 +141,13 @@ The following options may be given as the first argument: non-transactional engines for the binary log. If you often use statements updating a great number of rows, you can increase this to get more performance + --binlog-transaction-dependency-history-size=# + Maximum number of rows to keep in the writeset history. + --binlog-transaction-dependency-tracking=name + Selects the source of dependency information from which + to assess which transactions can be executed in parallel + by the slave's multi-threaded applier. Possible values + are COMMIT_ORDER, WRITESET and WRITESET_SESSION. --block-encryption-mode=name mode for AES_ENCRYPT/AES_DECRYPT --bootstrap Used by mysql installation scripts. @@ -1291,6 +1298,8 @@ binlog-row-event-max-size 8192 binlog-row-image FULL binlog-rows-query-log-events FALSE binlog-stmt-cache-size 32768 +binlog-transaction-dependency-history-size 25000 +binlog-transaction-dependency-tracking COMMIT_ORDER block-encryption-mode aes-128-ecb bulk-insert-buffer-size 8388608 character-set-client-handshake TRUE diff --git a/mysql-test/suite/binlog/r/binlog_reset_connection_not_reset_writeset.result b/mysql-test/suite/binlog/r/binlog_reset_connection_not_reset_writeset.result new file mode 100644 index 000000000000..ae973a193b1c --- /dev/null +++ b/mysql-test/suite/binlog/r/binlog_reset_connection_not_reset_writeset.result @@ -0,0 +1,15 @@ +SET GLOBAL transaction_write_set_extraction= 'XXHASH64'; +SET GLOBAL binlog_transaction_dependency_tracking= 'WRITESET'; +CREATE TABLE t1(id INT, PRIMARY KEY (id)); +FLUSH LOGS; +INSERT INTO t1(id) VALUES(1); +INSERT INTO t1(id) VALUES(2); +SET GLOBAL binlog_transaction_dependency_tracking= 'WRITESET_SESSION'; +INSERT INTO t1(id) VALUES(3); +INSERT INTO t1(id) VALUES(4); +include/save_binlog_position.inc +INSERT INTO t1(id) VALUES(5); +include/include/assert_logical_timestamps.inc [4 5] +SET GLOBAL binlog_transaction_dependency_tracking= COMMIT_ORDER; +SET GLOBAL transaction_write_set_extraction= OFF; +DROP TABLE t1; diff --git a/mysql-test/suite/binlog/r/binlog_transaction_dependency_tracking_on_start.result b/mysql-test/suite/binlog/r/binlog_transaction_dependency_tracking_on_start.result new file mode 100644 index 000000000000..3dae8bae152a --- /dev/null +++ b/mysql-test/suite/binlog/r/binlog_transaction_dependency_tracking_on_start.result @@ -0,0 +1,54 @@ +# +# Test 1.a: Try starting server with TWSE=OFF and BTDT=COMMIT_ORDER. Expect SUCCESS. +# +# restart: --transaction_write_set_extraction=OFF --binlog_transaction_dependency_tracking=COMMIT_ORDER +include/assert.inc [transaction_write_set_extraction should be OFF] +include/assert.inc [binlog_transaction_dependency_tracking should be COMMIT_ORDER] +# +# Test 1.b: Try starting server with TWSE=OFF and BTDT=WRITESET. Expect FAILURE. +# +Occurrences of 'The transaction_write_set_extraction must be set to XXHASH64 or MURMUR32 when binlog_transaction_dependency_tracking is WRITESET or WRITESET_SESSION.' in the input file: 1 +Occurrences of '\[ERROR\] Aborting' in the input file: 1 +# +# Test 1.c: Try starting server with TWSE=OFF and BTDT=WRITESET_SESSION. Expect FAILURE. +# +Occurrences of 'The transaction_write_set_extraction must be set to XXHASH64 or MURMUR32 when binlog_transaction_dependency_tracking is WRITESET or WRITESET_SESSION.' in the input file: 1 +Occurrences of '\[ERROR\] Aborting' in the input file: 1 +# +# Test 1.d: Try starting server with TWSE=MURMUR32 and BTDT=COMMIT_ORDER. Expect SUCCESS. +# +# restart: --transaction_write_set_extraction=MURMUR32 --binlog_transaction_dependency_tracking=COMMIT_ORDER +include/assert.inc [transaction_write_set_extraction should be MURMUR32] +include/assert.inc [binlog_transaction_dependency_tracking should be COMMIT_ORDER] +# +# Test 1.e: Try starting server with TWSE=MURMUR32 and BTDT=WRITESET. Expect SUCCESS. +# +# restart: --transaction_write_set_extraction=MURMUR32 --binlog_transaction_dependency_tracking=WRITESET +include/assert.inc [transaction_write_set_extraction should be MURMUR32] +include/assert.inc [binlog_transaction_dependency_tracking should be WRITESET] +# +# Test 1.f: Try starting server with TWSE=MURMUR32 and BTDT=WRITESET_SESSION. Expect SUCCESS. +# +# restart: --transaction_write_set_extraction=MURMUR32 --binlog_transaction_dependency_tracking=WRITESET_SESSION +include/assert.inc [transaction_write_set_extraction should be MURMUR32] +include/assert.inc [binlog_transaction_dependency_tracking should be WRITESET_SESSION] +# +# Test 1.g: Try starting server with TWSE=XXHASH64 and BTDT=COMMIT_ORDER. Expect SUCCESS. +# +# restart: --transaction_write_set_extraction=XXHASH64 --binlog_transaction_dependency_tracking=COMMIT_ORDER +include/assert.inc [transaction_write_set_extraction should be XXHASH64] +include/assert.inc [binlog_transaction_dependency_tracking should be COMMIT_ORDER] +# +# Test 1.h: Try starting server with TWSE=XXHASH64 and BTDT=WRITESET. Expect SUCCESS +# +# restart: --transaction_write_set_extraction=XXHASH64 --binlog_transaction_dependency_tracking=WRITESET +include/assert.inc [transaction_write_set_extraction should be XXHASH64] +include/assert.inc [binlog_transaction_dependency_tracking should be WRITESET] +# +# Test 1.i: Try starting server with TWSE=XXHASH64 and BTDT=WRITESET_SESSION. Expect SUCCESS. +# +# restart: --transaction_write_set_extraction=XXHASH64 --binlog_transaction_dependency_tracking=WRITESET_SESSION +include/assert.inc [transaction_write_set_extraction should be XXHASH64] +include/assert.inc [binlog_transaction_dependency_tracking should be WRITESET_SESSION] +SET GLOBAL binlog_transaction_dependency_tracking= COMMIT_ORDER; +SET GLOBAL transaction_write_set_extraction= OFF; diff --git a/mysql-test/suite/binlog/r/binlog_transaction_dependency_tracking_sensitive.result b/mysql-test/suite/binlog/r/binlog_transaction_dependency_tracking_sensitive.result new file mode 100644 index 000000000000..09d99e825769 --- /dev/null +++ b/mysql-test/suite/binlog/r/binlog_transaction_dependency_tracking_sensitive.result @@ -0,0 +1,34 @@ +SET @save_binlog_transaction_dependency_tracking = @@GLOBAL.binlog_transaction_dependency_tracking; +SET @save_transaction_write_set_extraction = @@GLOBAL.transaction_write_set_extraction; +SET @@GLOBAL.transaction_write_set_extraction = XXHASH64; +SET @@SESSION.transaction_write_set_extraction = XXHASH64; +SET @@GLOBAL.binlog_transaction_dependency_tracking = WRITESET; +SET NAMES 'utf8' COLLATE 'utf8_general_ci'; +RESET MASTER; +CREATE TABLE t1 ( +id INT NOT NULL AUTO_INCREMENT, +u_id INT NOT NULL, +u_str VARCHAR(32) NOT NULL, +PRIMARY KEY (id), +UNIQUE KEY (u_id, u_str) +) ENGINE=InnoDB; +INSERT INTO t1 (u_id, u_str) VALUES (1, 'a'); +INSERT INTO t1 (u_id, u_str) VALUES (1, 'A'); +ERROR 23000: Duplicate entry '1-A' for key 'u_id' +INSERT INTO t1 (u_id, u_str) VALUES (1, 'ã'); +ERROR 23000: Duplicate entry '1-ã' for key 'u_id' +INSERT INTO t1 (u_id, u_str) VALUES (1, 'Ã'); +ERROR 23000: Duplicate entry '1-Ã' for key 'u_id' +INSERT INTO t1 (u_id, u_str) VALUES (1, 'á'); +ERROR 23000: Duplicate entry '1-á' for key 'u_id' +DELETE FROM t1 WHERE u_id = 1 AND u_str = 'A'; +INSERT INTO t1 (u_id, u_str) VALUES (1, 'ã'); +DELETE FROM t1 WHERE u_id = 1 AND u_str = 'Ã'; +INSERT INTO t1 (u_id, u_str) VALUES (1, 'á'); +DROP TABLE t1; +Processing binlog master-bin.000001 +FLUSH LOGS; +include/include/assert_logical_timestamps.inc [0 1;1 2;2 3;3 4;4 5;5 6;6 7] +SET @@GLOBAL.binlog_transaction_dependency_tracking = COMMIT_ORDER; +SET @@GLOBAL.transaction_write_set_extraction= @save_transaction_write_set_extraction; +SET @@GLOBAL.binlog_transaction_dependency_tracking= @save_binlog_transaction_dependency_tracking; diff --git a/mysql-test/suite/binlog/t/binlog_reset_connection_not_reset_writeset.test b/mysql-test/suite/binlog/t/binlog_reset_connection_not_reset_writeset.test new file mode 100644 index 000000000000..052c32af82f1 --- /dev/null +++ b/mysql-test/suite/binlog/t/binlog_reset_connection_not_reset_writeset.test @@ -0,0 +1,63 @@ +############################################################################### +# Bug#25950554:THE FUNCTION RESET_CONNECTION DOES NOT RESET WRITE SET IN # +# WRITESET_SESSION. # +# # +# Problem: When we do reset_connection which has the same effect as # +# auto-reconnect, the write set session history is not cleared, # +# which in case of auto-reconnect does get cleared. # +# # +# Fix: Reset the write set session history when mysql_reset_connection # +# is called. # +# # +# Steps to reproduce: # +# # +# 1) Set the variable transaction_write_set_extraction to 'XXHASH64' which is # +# necessary to be able to change the value of the variable # +# binlog_transaction_dependency_tracking to WRITESET or WRITESET_SESSION # +# # +# 2) Set the variable binlog_transaction_dependency_tracking to WRITESET for # +# few coming transactions. # +# # +# 3) Create a sample table and do few inserts. # +# # +# 4) Change the value of binlog_transaction_dependency_tracking to # +# WRITESET_SESSION, to check if the write set session history is cleared # +# or not after calling reset_connection. # +# # +# 5) Call reset_connection. # +# # +# 6) Check if the logical timestamp has the correct entry after the reset # +# connection. This will mean that the write set history is cleared after a # +# to reset_connection. # +############################################################################### + +--source include/have_binlog_format_row.inc + +--let $saved_binlog_transaction_dependency_tracking= `SELECT @@GLOBAL.binlog_transaction_dependency_tracking` +--let $saved_transaction_write_set_extraction= `SELECT @@GLOBAL.transaction_write_set_extraction` + +SET GLOBAL transaction_write_set_extraction= 'XXHASH64'; +SET GLOBAL binlog_transaction_dependency_tracking= 'WRITESET'; + +CREATE TABLE t1(id INT, PRIMARY KEY (id)); +FLUSH LOGS; +INSERT INTO t1(id) VALUES(1); +INSERT INTO t1(id) VALUES(2); + +SET GLOBAL binlog_transaction_dependency_tracking= 'WRITESET_SESSION'; +INSERT INTO t1(id) VALUES(3); +INSERT INTO t1(id) VALUES(4); + +reset_connection; + +--source include/save_binlog_position.inc + +INSERT INTO t1(id) VALUES(5); + +--let $logical_timestamps= 4 5 +--source include/assert_logical_timestamps.inc + +# Clean up +--eval SET GLOBAL binlog_transaction_dependency_tracking= $saved_binlog_transaction_dependency_tracking +--eval SET GLOBAL transaction_write_set_extraction= $saved_transaction_write_set_extraction +DROP TABLE t1; diff --git a/mysql-test/suite/binlog/t/binlog_transaction_dependency_tracking_on_start-master.opt b/mysql-test/suite/binlog/t/binlog_transaction_dependency_tracking_on_start-master.opt new file mode 100644 index 000000000000..0edcc176f161 --- /dev/null +++ b/mysql-test/suite/binlog/t/binlog_transaction_dependency_tracking_on_start-master.opt @@ -0,0 +1 @@ +--no-console --log-error=$MYSQLTEST_VARDIR/tmp/binlog_transaction_dependency_tracking.err diff --git a/mysql-test/suite/binlog/t/binlog_transaction_dependency_tracking_on_start.test b/mysql-test/suite/binlog/t/binlog_transaction_dependency_tracking_on_start.test new file mode 100644 index 000000000000..45e6fa505e3c --- /dev/null +++ b/mysql-test/suite/binlog/t/binlog_transaction_dependency_tracking_on_start.test @@ -0,0 +1,164 @@ +################################################################################ +# The testcase aims to test possible correct and incorrect settings of the +# following variables together during the start of the server: +# transaction_write_set_extraction (TWSE) +# binlog_transaction_dependency_tracking (BTDT) +# +# Test: +# 0. This test requires one server. +# 1. Try starting server with: +# a. TWSE=OFF and BTDT=COMMIT_ORDER. Expect SUCCESS. +# b. TWSE=OFF and BTDT=WRITESET. Expect FAILURE. +# c. TWSE=OFF and BTDT=WRITESET_SESSION. Expect FAILURE. +# d. TWSE=MURMUR32 and BTDT=COMMIT_ORDER. Expect SUCCESS. +# e. TWSE=MURMUR32 and BTDT=WRITESET. Expect SUCCESS. +# f. TWSE=MURMUR32 and BTDT=WRITESET_SESSION. Expect SUCCESS. +# g. TWSE=XXHASH64 and BTDT=COMMIT_ORDER. Expect SUCCESS. +# h. TWSE=XXHASH64 and BTDT=WRITESET. Expect SUCCESS +# i. TWSE=XXHASH64 and BTDT=WRITESET_SESSION. Expect SUCCESS. +# +# ==== References ==== +# WL#9556: Writeset-based MTS dependency tracking on master +################################################################################ +--source include/not_embedded.inc +--source include/big_test.inc +--source include/have_binlog_format_row.inc + +--let $saved_binlog_transaction_dependency_tracking= `SELECT @@GLOBAL.binlog_transaction_dependency_tracking` +--let $saved_transaction_write_set_extraction= `SELECT @@GLOBAL.transaction_write_set_extraction` + +--echo # +--echo # Test 1.a: Try starting server with TWSE=OFF and BTDT=COMMIT_ORDER. Expect SUCCESS. +--echo # +--let $restart_parameters="restart: --transaction_write_set_extraction=OFF --binlog_transaction_dependency_tracking=COMMIT_ORDER" +--source include/restart_mysqld.inc +--source include/wait_until_connected_again.inc +--let $assert_text= transaction_write_set_extraction should be OFF +--let $assert_cond= "[SELECT @@GLOBAL.transaction_write_set_extraction]" = "OFF" +--source include/assert.inc +--let $assert_text= binlog_transaction_dependency_tracking should be COMMIT_ORDER +--let $assert_cond= "[SELECT @@GLOBAL.binlog_transaction_dependency_tracking]" = "COMMIT_ORDER" +--source include/assert.inc + +--echo # +--echo # Test 1.b: Try starting server with TWSE=OFF and BTDT=WRITESET. Expect FAILURE. +--echo # +# Let server restart attempts write to the file $error_log. +--let $error_log= $MYSQLTEST_VARDIR/tmp/binlog_transaction_dependency_tracking.err +--source include/shutdown_mysqld.inc + +let $mysqld=$MYSQLD_CMD --core-file --console > $error_log 2>&1 --transaction_write_set_extraction=OFF --binlog_transaction_dependency_tracking=WRITESET; + +--error 1 +--exec $mysqld +--let $grep_file=$error_log +--let $grep_pattern=The transaction_write_set_extraction must be set to XXHASH64 or MURMUR32 when binlog_transaction_dependency_tracking is WRITESET or WRITESET_SESSION. +--let $grep_output= print_count +--source include/grep_pattern.inc + +# The server restart aborts +--let $grep_pattern= \[ERROR\] Aborting +--let $grep_output= print_count +--source include/grep_pattern.inc + +--echo # +--echo # Test 1.c: Try starting server with TWSE=OFF and BTDT=WRITESET_SESSION. Expect FAILURE. +--echo # +let $mysqld=$MYSQLD_CMD --core-file --console > $error_log 2>&1 --transaction_write_set_extraction=OFF --binlog_transaction_dependency_tracking=WRITESET_SESSION; + +--error 1 +--exec $mysqld +--let $grep_file=$error_log +--let $grep_pattern=The transaction_write_set_extraction must be set to XXHASH64 or MURMUR32 when binlog_transaction_dependency_tracking is WRITESET or WRITESET_SESSION. +--let $grep_output= print_count +--source include/grep_pattern.inc + +# The server restart aborts +--let $grep_pattern= \[ERROR\] Aborting +--let $grep_output= print_count +--source include/grep_pattern.inc + +--echo # +--echo # Test 1.d: Try starting server with TWSE=MURMUR32 and BTDT=COMMIT_ORDER. Expect SUCCESS. +--echo # +--let $restart_parameters="restart: --transaction_write_set_extraction=MURMUR32 --binlog_transaction_dependency_tracking=COMMIT_ORDER" +--source include/start_mysqld.inc +--source include/wait_until_connected_again.inc +--let $assert_text= transaction_write_set_extraction should be MURMUR32 +--let $assert_cond= "[SELECT @@GLOBAL.transaction_write_set_extraction]" = "MURMUR32" +--source include/assert.inc +--let $assert_text= binlog_transaction_dependency_tracking should be COMMIT_ORDER +--let $assert_cond= "[SELECT @@GLOBAL.binlog_transaction_dependency_tracking]" = "COMMIT_ORDER" +--source include/assert.inc + +--echo # +--echo # Test 1.e: Try starting server with TWSE=MURMUR32 and BTDT=WRITESET. Expect SUCCESS. +--echo # +--let $restart_parameters="restart: --transaction_write_set_extraction=MURMUR32 --binlog_transaction_dependency_tracking=WRITESET" +--source include/restart_mysqld.inc +--source include/wait_until_connected_again.inc +--let $assert_text= transaction_write_set_extraction should be MURMUR32 +--let $assert_cond= "[SELECT @@GLOBAL.transaction_write_set_extraction]" = "MURMUR32" +--source include/assert.inc +--let $assert_text= binlog_transaction_dependency_tracking should be WRITESET +--let $assert_cond= "[SELECT @@GLOBAL.binlog_transaction_dependency_tracking]" = "WRITESET" +--source include/assert.inc + +--echo # +--echo # Test 1.f: Try starting server with TWSE=MURMUR32 and BTDT=WRITESET_SESSION. Expect SUCCESS. +--echo # +--let $restart_parameters="restart: --transaction_write_set_extraction=MURMUR32 --binlog_transaction_dependency_tracking=WRITESET_SESSION" +--source include/restart_mysqld.inc +--source include/wait_until_connected_again.inc +--let $assert_text= transaction_write_set_extraction should be MURMUR32 +--let $assert_cond= "[SELECT @@GLOBAL.transaction_write_set_extraction]" = "MURMUR32" +--source include/assert.inc +--let $assert_text= binlog_transaction_dependency_tracking should be WRITESET_SESSION +--let $assert_cond= "[SELECT @@GLOBAL.binlog_transaction_dependency_tracking]" = "WRITESET_SESSION" +--source include/assert.inc + +--echo # +--echo # Test 1.g: Try starting server with TWSE=XXHASH64 and BTDT=COMMIT_ORDER. Expect SUCCESS. +--echo # +--let $restart_parameters="restart: --transaction_write_set_extraction=XXHASH64 --binlog_transaction_dependency_tracking=COMMIT_ORDER" +--source include/restart_mysqld.inc +--source include/wait_until_connected_again.inc +--let $assert_text= transaction_write_set_extraction should be XXHASH64 +--let $assert_cond= "[SELECT @@GLOBAL.transaction_write_set_extraction]" = "XXHASH64" +--source include/assert.inc +--let $assert_text= binlog_transaction_dependency_tracking should be COMMIT_ORDER +--let $assert_cond= "[SELECT @@GLOBAL.binlog_transaction_dependency_tracking]" = "COMMIT_ORDER" +--source include/assert.inc + +--echo # +--echo # Test 1.h: Try starting server with TWSE=XXHASH64 and BTDT=WRITESET. Expect SUCCESS +--echo # +--let $restart_parameters="restart: --transaction_write_set_extraction=XXHASH64 --binlog_transaction_dependency_tracking=WRITESET" +--source include/restart_mysqld.inc +--source include/wait_until_connected_again.inc +--let $assert_text= transaction_write_set_extraction should be XXHASH64 +--let $assert_cond= "[SELECT @@GLOBAL.transaction_write_set_extraction]" = "XXHASH64" +--source include/assert.inc +--let $assert_text= binlog_transaction_dependency_tracking should be WRITESET +--let $assert_cond= "[SELECT @@GLOBAL.binlog_transaction_dependency_tracking]" = "WRITESET" +--source include/assert.inc + +--echo # +--echo # Test 1.i: Try starting server with TWSE=XXHASH64 and BTDT=WRITESET_SESSION. Expect SUCCESS. +--echo # +--let $restart_parameters="restart: --transaction_write_set_extraction=XXHASH64 --binlog_transaction_dependency_tracking=WRITESET_SESSION" +--source include/restart_mysqld.inc +--source include/wait_until_connected_again.inc +--let $assert_text= transaction_write_set_extraction should be XXHASH64 +--let $assert_cond= "[SELECT @@GLOBAL.transaction_write_set_extraction]" = "XXHASH64" +--source include/assert.inc +--let $assert_text= binlog_transaction_dependency_tracking should be WRITESET_SESSION +--let $assert_cond= "[SELECT @@GLOBAL.binlog_transaction_dependency_tracking]" = "WRITESET_SESSION" +--source include/assert.inc + +# Clean up +--let $restart_parameters= +--let $error_log= +--remove_file $MYSQLTEST_VARDIR/tmp/binlog_transaction_dependency_tracking.err +--eval SET GLOBAL binlog_transaction_dependency_tracking= $saved_binlog_transaction_dependency_tracking +--eval SET GLOBAL transaction_write_set_extraction= $saved_transaction_write_set_extraction diff --git a/mysql-test/suite/binlog/t/binlog_transaction_dependency_tracking_sensitive.test b/mysql-test/suite/binlog/t/binlog_transaction_dependency_tracking_sensitive.test new file mode 100644 index 000000000000..980227ae3a0c --- /dev/null +++ b/mysql-test/suite/binlog/t/binlog_transaction_dependency_tracking_sensitive.test @@ -0,0 +1,77 @@ +# ==== Purpose ==== +# +# Test timestamps generated by binlog-transaction-dependency-tracking +# mode WRITESET when inserting/deleting/updating a single row but using +# case and accent insensitive collations. +# +# As all transactions are touching a single row, the timestamps are +# expected to always increase (every transaction should depend on the +# previous one). +# +# ==== References ==== +# +# BUG#26277771: BAD WRITE SET TRACKING WITH UNIQUE KEY ON A DELETE FOLLOWED BY AN INSERT. +# +--source include/have_binlog_format_row.inc + +# +# Initialization +# +SET @save_binlog_transaction_dependency_tracking = @@GLOBAL.binlog_transaction_dependency_tracking; +SET @save_transaction_write_set_extraction = @@GLOBAL.transaction_write_set_extraction; + +SET @@GLOBAL.transaction_write_set_extraction = XXHASH64; +SET @@SESSION.transaction_write_set_extraction = XXHASH64; +SET @@GLOBAL.binlog_transaction_dependency_tracking = WRITESET; + +# +# Test +# + +# Workload +SET NAMES 'utf8' COLLATE 'utf8_general_ci'; + +RESET MASTER; + +CREATE TABLE t1 ( + id INT NOT NULL AUTO_INCREMENT, + u_id INT NOT NULL, + u_str VARCHAR(32) NOT NULL, + PRIMARY KEY (id), + UNIQUE KEY (u_id, u_str) +) ENGINE=InnoDB; + +INSERT INTO t1 (u_id, u_str) VALUES (1, 'a'); + +# Sanity check +--error ER_DUP_ENTRY +INSERT INTO t1 (u_id, u_str) VALUES (1, 'A'); +--error ER_DUP_ENTRY +INSERT INTO t1 (u_id, u_str) VALUES (1, 'ã'); +--error ER_DUP_ENTRY +INSERT INTO t1 (u_id, u_str) VALUES (1, 'Ã'); +--error ER_DUP_ENTRY +INSERT INTO t1 (u_id, u_str) VALUES (1, 'á'); + +# Test +DELETE FROM t1 WHERE u_id = 1 AND u_str = 'A'; +INSERT INTO t1 (u_id, u_str) VALUES (1, 'ã'); +DELETE FROM t1 WHERE u_id = 1 AND u_str = 'Ã'; +INSERT INTO t1 (u_id, u_str) VALUES (1, 'á'); + +DROP TABLE t1; + +--let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1) +--echo Processing binlog $binlog_file +FLUSH LOGS; + +--let $source_file= $server_1_datadir/$binlog_file +--let $logical_timestamps=0 1;1 2;2 3;3 4;4 5;5 6;6 7 +--source include/assert_logical_timestamps.inc + +# +# Cleanup +# +SET @@GLOBAL.binlog_transaction_dependency_tracking = COMMIT_ORDER; +SET @@GLOBAL.transaction_write_set_extraction= @save_transaction_write_set_extraction; +SET @@GLOBAL.binlog_transaction_dependency_tracking= @save_binlog_transaction_dependency_tracking; diff --git a/mysql-test/suite/perfschema/r/show_sanity.result b/mysql-test/suite/perfschema/r/show_sanity.result index fa2f2bfa3b9b..71bc92a2c2f3 100644 --- a/mysql-test/suite/perfschema/r/show_sanity.result +++ b/mysql-test/suite/perfschema/r/show_sanity.result @@ -407,6 +407,8 @@ where show_mode = "JUNK: GLOBAL-ONLY" and source = "I_S.SESSION_VARIABLES") order by show_mode, source, variable_name; SHOW_MODE SOURCE VARIABLE_NAME +5.6 I_S.SESSION_VARIABLES BINLOG_TRANSACTION_DEPENDENCY_HISTORY_SIZE +5.6 I_S.SESSION_VARIABLES BINLOG_TRANSACTION_DEPENDENCY_TRACKING 5.6 I_S.SESSION_VARIABLES GTID_EXECUTED 5.6 I_S.SESSION_VARIABLES INNODB_DEADLOCK_DETECT 5.6 I_S.SESSION_VARIABLES INNODB_STATS_INCLUDE_DELETE_MARKED @@ -433,6 +435,8 @@ where show_mode = "JUNK: GLOBAL-ONLY" and source = "I_S.SESSION_VARIABLES") order by show_mode, source, variable_name; SHOW_MODE SOURCE VARIABLE_NAME +5.6 I_S.SESSION_VARIABLES BINLOG_TRANSACTION_DEPENDENCY_HISTORY_SIZE +5.6 I_S.SESSION_VARIABLES BINLOG_TRANSACTION_DEPENDENCY_TRACKING 5.6 I_S.SESSION_VARIABLES GTID_EXECUTED 5.6 I_S.SESSION_VARIABLES INNODB_DEADLOCK_DETECT 5.6 I_S.SESSION_VARIABLES INNODB_STATS_INCLUDE_DELETE_MARKED diff --git a/mysql-test/suite/rpl/r/rpl_binlog_transaction_dependency_history_size.result b/mysql-test/suite/rpl/r/rpl_binlog_transaction_dependency_history_size.result new file mode 100644 index 000000000000..6fb3bafd01c5 --- /dev/null +++ b/mysql-test/suite/rpl/r/rpl_binlog_transaction_dependency_history_size.result @@ -0,0 +1,108 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] + +SET GLOBAL binlog_transaction_dependency_tracking = WRITESET; +######## 1. WRITESET ######## +SELECT @@local.transaction_write_set_extraction, +@@global.transaction_write_set_extraction, +@@binlog_transaction_dependency_tracking, +@@binlog_transaction_dependency_history_size; +@@local.transaction_write_set_extraction @@global.transaction_write_set_extraction @@binlog_transaction_dependency_tracking @@binlog_transaction_dependency_history_size +XXHASH64 XXHASH64 WRITESET 6 +CREATE TABLE test.tab1 (a INT PRIMARY KEY AUTO_INCREMENT NOT NULL); +CREATE TABLE test.tab2 (a INT); +FLUSH LOGS; +INSERT INTO tab1 VALUES (NULL); +INSERT INTO tab1 VALUES (NULL); +INSERT INTO tab1 VALUES (NULL); +INSERT INTO tab2 VALUES (1); +INSERT INTO tab1 VALUES (NULL); +INSERT INTO tab1 VALUES (NULL); +INSERT INTO tab1 VALUES (NULL), (NULL), (NULL); +INSERT INTO tab1 VALUES (NULL); +INSERT INTO tab1 VALUES (NULL); +BEGIN; +INSERT INTO tab1 VALUES (NULL); +INSERT INTO tab1 VALUES (NULL); +INSERT INTO tab1 VALUES (NULL); +INSERT INTO tab1 VALUES (NULL); +COMMIT; +# Drop table and flush logs to force binlog to rotate +DROP TABLE test.tab1, test.tab2; +FLUSH LOGS; +# Processing binlog... +include/include/assert_logical_timestamps.inc [0 1;1 2;1 3;3 4;1 5;5 6;5 7;7 8;7 9;7 10;7 11;11 12;9 13;13 14] +# Verify that replication is correct +include/sync_slave_sql_with_master.inc + +SET GLOBAL binlog_transaction_dependency_tracking = WRITESET_SESSION; +######## 2. WRITESET_SESSION ######## +SELECT @@local.transaction_write_set_extraction, +@@global.transaction_write_set_extraction, +@@binlog_transaction_dependency_tracking, +@@binlog_transaction_dependency_history_size; +@@local.transaction_write_set_extraction @@global.transaction_write_set_extraction @@binlog_transaction_dependency_tracking @@binlog_transaction_dependency_history_size +XXHASH64 XXHASH64 WRITESET_SESSION 6 +CREATE TABLE test.tab1 (a INT PRIMARY KEY AUTO_INCREMENT NOT NULL); +CREATE TABLE test.tab2 (a INT); +FLUSH LOGS; +INSERT INTO tab1 VALUES (NULL); +INSERT INTO tab1 VALUES (NULL); +INSERT INTO tab1 VALUES (NULL); +INSERT INTO tab2 VALUES (1); +INSERT INTO tab1 VALUES (NULL); +INSERT INTO tab1 VALUES (NULL); +INSERT INTO tab1 VALUES (NULL), (NULL), (NULL); +INSERT INTO tab1 VALUES (NULL); +INSERT INTO tab1 VALUES (NULL); +BEGIN; +INSERT INTO tab1 VALUES (NULL); +INSERT INTO tab1 VALUES (NULL); +INSERT INTO tab1 VALUES (NULL); +INSERT INTO tab1 VALUES (NULL); +COMMIT; +# Drop table and flush logs to force binlog to rotate +DROP TABLE test.tab1, test.tab2; +FLUSH LOGS; +# Processing binlog... +include/include/assert_logical_timestamps.inc [0 1;1 2;1 3;3 4;1 5;5 6;5 7;7 8;7 9;7 10;7 11;11 12;9 13;13 14] +# Verify that replication is correct +include/sync_slave_sql_with_master.inc + +SET GLOBAL binlog_transaction_dependency_tracking = COMMIT_ORDER; +######## 3. COMMIT_ORDER ######## +SELECT @@local.transaction_write_set_extraction, +@@global.transaction_write_set_extraction, +@@binlog_transaction_dependency_tracking, +@@binlog_transaction_dependency_history_size; +@@local.transaction_write_set_extraction @@global.transaction_write_set_extraction @@binlog_transaction_dependency_tracking @@binlog_transaction_dependency_history_size +XXHASH64 XXHASH64 COMMIT_ORDER 6 +CREATE TABLE test.tab1 (a INT PRIMARY KEY AUTO_INCREMENT NOT NULL); +CREATE TABLE test.tab2 (a INT); +FLUSH LOGS; +INSERT INTO tab1 VALUES (NULL); +INSERT INTO tab1 VALUES (NULL); +INSERT INTO tab1 VALUES (NULL); +INSERT INTO tab2 VALUES (1); +INSERT INTO tab1 VALUES (NULL); +INSERT INTO tab1 VALUES (NULL); +INSERT INTO tab1 VALUES (NULL), (NULL), (NULL); +INSERT INTO tab1 VALUES (NULL); +INSERT INTO tab1 VALUES (NULL); +BEGIN; +INSERT INTO tab1 VALUES (NULL); +INSERT INTO tab1 VALUES (NULL); +INSERT INTO tab1 VALUES (NULL); +INSERT INTO tab1 VALUES (NULL); +COMMIT; +# Drop table and flush logs to force binlog to rotate +DROP TABLE test.tab1, test.tab2; +FLUSH LOGS; +# Processing binlog... +include/include/assert_logical_timestamps.inc [0 1;1 2;2 3;3 4;4 5;5 6;6 7;7 8;8 9;9 10;10 11;11 12;9 13;13 14] +# Verify that replication is correct +include/sync_slave_sql_with_master.inc +include/rpl_end.inc diff --git a/mysql-test/suite/rpl/r/rpl_binlog_transaction_dependency_tracking.result b/mysql-test/suite/rpl/r/rpl_binlog_transaction_dependency_tracking.result new file mode 100644 index 000000000000..d489908a266c --- /dev/null +++ b/mysql-test/suite/rpl/r/rpl_binlog_transaction_dependency_tracking.result @@ -0,0 +1,810 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +#### INITIALIZE #### +call mtr.add_suppression("Transaction is tagged with inconsistent logical timestamps"); +call mtr.add_suppression("Cannot execute the current event group in the parallel mode."); +include/stop_slave.inc +SET @save_slave_parallel_type = @@GLOBAL.slave_parallel_type; +SET @save_slave_parallel_workers = @@GLOBAL.slave_parallel_workers; +SET @save_slave_transaction_retries = @@GLOBAL.slave_transaction_retries; +SET GLOBAL slave_parallel_type = LOGICAL_CLOCK; +SET GLOBAL slave_parallel_workers = 3; +SET GLOBAL slave_transaction_retries = 0; +SET @save_binlog_transaction_dependency_tracking = @@GLOBAL.binlog_transaction_dependency_tracking; +SET @save_binlog_transaction_dependency_history_size = @@GLOBAL.binlog_transaction_dependency_history_size; +SET @save_transaction_write_set_extraction = @@GLOBAL.transaction_write_set_extraction; +SET GLOBAL binlog_transaction_dependency_tracking = COMMIT_ORDER; +SET GLOBAL transaction_write_set_extraction = XXHASH64; +SET LOCAL transaction_write_set_extraction = XXHASH64; +SET LOCAL transaction_write_set_extraction = XXHASH64; +SET LOCAL transaction_write_set_extraction = XXHASH64; +CREATE TABLE tests (`id` INT NOT NULL, `description` VARCHAR(50), `results` VARCHAR(100), PRIMARY KEY(`id`)); +INSERT INTO `tests` (`id`, `description`, `results`) VALUES +(1, 'Writeset', '0 1;1 2;1 3;1 4;3 5;3 6;4 7;7 8;6 9;9 10'), +(2, 'Writeset+DDL', '0 1;1 2;1 3;1 4;4 5;5 6;6 7;7 8;4 9;7 10;10 11;9 12;12 13'), +(3, 'Writeset+rotation', '0 1;0 2;1 3;3 4;2 5;5 6'), +(4, 'Writeset+history', '0 1;1 2;1 3;1 4;4 5;4 6;4 7;7 8;7 9;9 10'), +(5, 'Writeset_session', '0 1;1 2;1 3;2 4;3 5;3 6;5 7;7 8;7 9;9 10'), +(6, 'Writeset_session+DDL', '0 1;1 2;1 3;2 4;4 5;5 6;6 7;7 8;4 9;8 10;10 11;10 12;12 13'), +(7, 'Writeset_session+rotation', '0 1;0 2;1 3;3 4;3 5;5 6'), +(8, 'Writeset_session+history', '0 1;1 2;1 3;2 4;4 5;4 6;5 7;7 8;7 9;9 10'), +(9, 'Commit_order', '0 1;1 2;1 3;3 4;4 5;4 6;6 7;7 8;7 9;9 10'), +(10, 'Commit_order+DDL', '0 1;1 2;1 3;3 4;4 5;5 6;6 7;7 8;4 9;9 10;10 11;10 12;12 13'), +(11, 'Commit_order+rotation', '0 1;0 2;2 3;3 4;3 5;5 6'), +(12, 'Commit_order+history', '0 1;1 2;1 3;3 4;4 5;4 6;6 7;7 8;7 9;9 10'); +FLUSH LOGS; +#### TEST #### +SET GLOBAL binlog_transaction_dependency_tracking = WRITESET; +######## 1. WRITESET ######## +#### STEP 1.1 TEST Writeset #### +SET GLOBAL binlog_transaction_dependency_history_size=25000; +SELECT @@local.transaction_write_set_extraction, +@@global.transaction_write_set_extraction, +@@binlog_transaction_dependency_tracking, +@@binlog_transaction_dependency_history_size; +@@local.transaction_write_set_extraction @@global.transaction_write_set_extraction @@binlog_transaction_dependency_tracking @@binlog_transaction_dependency_history_size +XXHASH64 XXHASH64 WRITESET 25000 +CREATE TABLE `t1` (`id` int(11) NOT NULL, `val` int(11) NOT NULL, +PRIMARY KEY (`id`)) ENGINE=InnoDB; +#TRX2 (session A, independent) +BEGIN; +INSERT INTO t1(id, val) VALUES (1, 0),(2, 0),(3, 0); +#TRX1 (session B, independent) +BEGIN; +INSERT INTO t1(id, val) VALUES (4, 0),(5, 0); +COMMIT; +finish TRX2 after TRX1 +COMMIT; +#TRX3 (session B, no data dependency, depends on TRX1 (session)) +BEGIN; +INSERT INTO t1(id, val) VALUES (6, 0),(7, 0); +COMMIT; +#TRX5 (session A, depends on TRX2 (session and data) and TRX1(data)) +BEGIN; +INSERT INTO t1(id, val) VALUES (8, 1); +UPDATE t1 SET val=val+1 WHERE id=1; +UPDATE t1 SET val=val+1 WHERE id=4; +#TRX4 (session C, depends on TRX2 (data)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=3; +INSERT INTO t1(id, val) VALUES (9, 1); +COMMIT; +finish TRX5 after TRX4 +COMMIT; +#TRX6 (session C, depends on TRX4 (session) and TRX3(data)) +BEGIN; +DELETE FROM t1 WHERE id=6; +COMMIT; +#TRX8 (session C, depends on TRX5 (data) and TRX6 (session)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=4; +#TRX7 (session B, depends on TRX1 and TRX6 (data) and TRX3 (session)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=5; +INSERT INTO t1(id, val) VALUES (6, 0); +COMMIT; +finish TRX8 after TRX7 +COMMIT; +Drop table and flush logs to force binlog to rotate +DROP TABLE t1; +Processing binlog master-bin.000002 +FLUSH LOGS; +include/include/assert_logical_timestamps.inc [0 1;1 2;1 3;1 4;3 5;3 6;4 7;7 8;6 9;9 10] +#### STEP 1.2 TEST Writeset+DDL #### +SET GLOBAL binlog_transaction_dependency_history_size=25000; +SELECT @@local.transaction_write_set_extraction, +@@global.transaction_write_set_extraction, +@@binlog_transaction_dependency_tracking, +@@binlog_transaction_dependency_history_size; +@@local.transaction_write_set_extraction @@global.transaction_write_set_extraction @@binlog_transaction_dependency_tracking @@binlog_transaction_dependency_history_size +XXHASH64 XXHASH64 WRITESET 25000 +CREATE TABLE `t1` (`id` int(11) NOT NULL, `val` int(11) NOT NULL, +PRIMARY KEY (`id`)) ENGINE=InnoDB; +#TRX2 (session A, independent) +BEGIN; +INSERT INTO t1(id, val) VALUES (1, 0),(2, 0),(3, 0); +#TRX1 (session B, independent) +BEGIN; +INSERT INTO t1(id, val) VALUES (4, 0),(5, 0); +COMMIT; +finish TRX2 after TRX1 +COMMIT; +#TRX3 (session B, no data dependency, depends on TRX1 (session)) +BEGIN; +INSERT INTO t1(id, val) VALUES (6, 0),(7, 0); +COMMIT; +#TRX5 (session A, depends on TRX2 (session and data) and TRX1(data)) +BEGIN; +INSERT INTO t1(id, val) VALUES (8, 1); +UPDATE t1 SET val=val+1 WHERE id=1; +UPDATE t1 SET val=val+1 WHERE id=4; +Inserted a DDL after TRX5 and check that they run in parallel due to commit_order +CREATE TABLE `t2` (`id` int(11) NOT NULL, `val` int(11) NOT NULL) ENGINE=InnoDB; +ALTER TABLE t2 ADD COLUMN b INT; +DROP TABLE `t2`; +#TRX4 (session C, depends on TRX2 (data)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=3; +INSERT INTO t1(id, val) VALUES (9, 1); +COMMIT; +finish TRX5 after TRX4 +COMMIT; +#TRX6 (session C, depends on TRX4 (session) and TRX3(data)) +BEGIN; +DELETE FROM t1 WHERE id=6; +COMMIT; +#TRX8 (session C, depends on TRX5 (data) and TRX6 (session)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=4; +#TRX7 (session B, depends on TRX1 and TRX6 (data) and TRX3 (session)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=5; +INSERT INTO t1(id, val) VALUES (6, 0); +COMMIT; +finish TRX8 after TRX7 +COMMIT; +Drop table and flush logs to force binlog to rotate +DROP TABLE t1; +Processing binlog master-bin.000003 +FLUSH LOGS; +include/include/assert_logical_timestamps.inc [0 1;1 2;1 3;1 4;4 5;5 6;6 7;7 8;4 9;7 10;10 11;9 12;12 13] +#### STEP 1.3 TEST Writeset+rotation #### +SET GLOBAL binlog_transaction_dependency_history_size=25000; +SELECT @@local.transaction_write_set_extraction, +@@global.transaction_write_set_extraction, +@@binlog_transaction_dependency_tracking, +@@binlog_transaction_dependency_history_size; +@@local.transaction_write_set_extraction @@global.transaction_write_set_extraction @@binlog_transaction_dependency_tracking @@binlog_transaction_dependency_history_size +XXHASH64 XXHASH64 WRITESET 25000 +CREATE TABLE `t1` (`id` int(11) NOT NULL, `val` int(11) NOT NULL, +PRIMARY KEY (`id`)) ENGINE=InnoDB; +#TRX2 (session A, independent) +BEGIN; +INSERT INTO t1(id, val) VALUES (1, 0),(2, 0),(3, 0); +#TRX1 (session B, independent) +BEGIN; +INSERT INTO t1(id, val) VALUES (4, 0),(5, 0); +COMMIT; +finish TRX2 after TRX1 +COMMIT; +#TRX3 (session B, no data dependency, depends on TRX1 (session)) +BEGIN; +INSERT INTO t1(id, val) VALUES (6, 0),(7, 0); +COMMIT; +#TRX5 (session A, depends on TRX2 (session and data) and TRX1(data)) +BEGIN; +INSERT INTO t1(id, val) VALUES (8, 1); +UPDATE t1 SET val=val+1 WHERE id=1; +UPDATE t1 SET val=val+1 WHERE id=4; +Flushing logs in the middle of the set +FLUSH LOGS; +#TRX4 (session C, depends on TRX2 (data)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=3; +INSERT INTO t1(id, val) VALUES (9, 1); +COMMIT; +finish TRX5 after TRX4 +COMMIT; +#TRX6 (session C, depends on TRX4 (session) and TRX3(data)) +BEGIN; +DELETE FROM t1 WHERE id=6; +COMMIT; +#TRX8 (session C, depends on TRX5 (data) and TRX6 (session)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=4; +#TRX7 (session B, depends on TRX1 and TRX6 (data) and TRX3 (session)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=5; +INSERT INTO t1(id, val) VALUES (6, 0); +COMMIT; +finish TRX8 after TRX7 +COMMIT; +Drop table and flush logs to force binlog to rotate +DROP TABLE t1; +Processing binlog master-bin.000005 +FLUSH LOGS; +include/include/assert_logical_timestamps.inc [0 1;0 2;1 3;3 4;2 5;5 6] +#### STEP 1.4 TEST Writeset+history #### +SET GLOBAL binlog_transaction_dependency_history_size=25000; +History size reduced to 10 to test when it becomes full +SET GLOBAL binlog_transaction_dependency_history_size=10; +SELECT @@local.transaction_write_set_extraction, +@@global.transaction_write_set_extraction, +@@binlog_transaction_dependency_tracking, +@@binlog_transaction_dependency_history_size; +@@local.transaction_write_set_extraction @@global.transaction_write_set_extraction @@binlog_transaction_dependency_tracking @@binlog_transaction_dependency_history_size +XXHASH64 XXHASH64 WRITESET 10 +CREATE TABLE `t1` (`id` int(11) NOT NULL, `val` int(11) NOT NULL, +PRIMARY KEY (`id`)) ENGINE=InnoDB; +#TRX2 (session A, independent) +BEGIN; +INSERT INTO t1(id, val) VALUES (1, 0),(2, 0),(3, 0); +#TRX1 (session B, independent) +BEGIN; +INSERT INTO t1(id, val) VALUES (4, 0),(5, 0); +COMMIT; +finish TRX2 after TRX1 +COMMIT; +#TRX3 (session B, no data dependency, depends on TRX1 (session)) +BEGIN; +INSERT INTO t1(id, val) VALUES (6, 0),(7, 0); +COMMIT; +#TRX5 (session A, depends on TRX2 (session and data) and TRX1(data)) +BEGIN; +INSERT INTO t1(id, val) VALUES (8, 1); +UPDATE t1 SET val=val+1 WHERE id=1; +UPDATE t1 SET val=val+1 WHERE id=4; +#TRX4 (session C, depends on TRX2 (data)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=3; +INSERT INTO t1(id, val) VALUES (9, 1); +COMMIT; +finish TRX5 after TRX4 +COMMIT; +#TRX6 (session C, depends on TRX4 (session) and TRX3(data)) +BEGIN; +DELETE FROM t1 WHERE id=6; +COMMIT; +#TRX8 (session C, depends on TRX5 (data) and TRX6 (session)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=4; +#TRX7 (session B, depends on TRX1 and TRX6 (data) and TRX3 (session)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=5; +INSERT INTO t1(id, val) VALUES (6, 0); +COMMIT; +finish TRX8 after TRX7 +COMMIT; +Drop table and flush logs to force binlog to rotate +DROP TABLE t1; +Processing binlog master-bin.000006 +FLUSH LOGS; +include/include/assert_logical_timestamps.inc [0 1;1 2;1 3;1 4;4 5;4 6;4 7;7 8;7 9;9 10] +SET GLOBAL binlog_transaction_dependency_tracking = WRITESET_SESSION; +######## 2. WRITESET_SESSION ######## +#### STEP 2.1 TEST Writeset_session #### +SET GLOBAL binlog_transaction_dependency_history_size=25000; +SELECT @@local.transaction_write_set_extraction, +@@global.transaction_write_set_extraction, +@@binlog_transaction_dependency_tracking, +@@binlog_transaction_dependency_history_size; +@@local.transaction_write_set_extraction @@global.transaction_write_set_extraction @@binlog_transaction_dependency_tracking @@binlog_transaction_dependency_history_size +XXHASH64 XXHASH64 WRITESET_SESSION 25000 +CREATE TABLE `t1` (`id` int(11) NOT NULL, `val` int(11) NOT NULL, +PRIMARY KEY (`id`)) ENGINE=InnoDB; +#TRX2 (session A, independent) +BEGIN; +INSERT INTO t1(id, val) VALUES (1, 0),(2, 0),(3, 0); +#TRX1 (session B, independent) +BEGIN; +INSERT INTO t1(id, val) VALUES (4, 0),(5, 0); +COMMIT; +finish TRX2 after TRX1 +COMMIT; +#TRX3 (session B, no data dependency, depends on TRX1 (session)) +BEGIN; +INSERT INTO t1(id, val) VALUES (6, 0),(7, 0); +COMMIT; +#TRX5 (session A, depends on TRX2 (session and data) and TRX1(data)) +BEGIN; +INSERT INTO t1(id, val) VALUES (8, 1); +UPDATE t1 SET val=val+1 WHERE id=1; +UPDATE t1 SET val=val+1 WHERE id=4; +#TRX4 (session C, depends on TRX2 (data)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=3; +INSERT INTO t1(id, val) VALUES (9, 1); +COMMIT; +finish TRX5 after TRX4 +COMMIT; +#TRX6 (session C, depends on TRX4 (session) and TRX3(data)) +BEGIN; +DELETE FROM t1 WHERE id=6; +COMMIT; +#TRX8 (session C, depends on TRX5 (data) and TRX6 (session)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=4; +#TRX7 (session B, depends on TRX1 and TRX6 (data) and TRX3 (session)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=5; +INSERT INTO t1(id, val) VALUES (6, 0); +COMMIT; +finish TRX8 after TRX7 +COMMIT; +Drop table and flush logs to force binlog to rotate +DROP TABLE t1; +Processing binlog master-bin.000007 +FLUSH LOGS; +include/include/assert_logical_timestamps.inc [0 1;1 2;1 3;2 4;3 5;3 6;5 7;7 8;7 9;9 10] +#### STEP 2.2 TEST Writeset_session+DDL #### +SET GLOBAL binlog_transaction_dependency_history_size=25000; +SELECT @@local.transaction_write_set_extraction, +@@global.transaction_write_set_extraction, +@@binlog_transaction_dependency_tracking, +@@binlog_transaction_dependency_history_size; +@@local.transaction_write_set_extraction @@global.transaction_write_set_extraction @@binlog_transaction_dependency_tracking @@binlog_transaction_dependency_history_size +XXHASH64 XXHASH64 WRITESET_SESSION 25000 +CREATE TABLE `t1` (`id` int(11) NOT NULL, `val` int(11) NOT NULL, +PRIMARY KEY (`id`)) ENGINE=InnoDB; +#TRX2 (session A, independent) +BEGIN; +INSERT INTO t1(id, val) VALUES (1, 0),(2, 0),(3, 0); +#TRX1 (session B, independent) +BEGIN; +INSERT INTO t1(id, val) VALUES (4, 0),(5, 0); +COMMIT; +finish TRX2 after TRX1 +COMMIT; +#TRX3 (session B, no data dependency, depends on TRX1 (session)) +BEGIN; +INSERT INTO t1(id, val) VALUES (6, 0),(7, 0); +COMMIT; +#TRX5 (session A, depends on TRX2 (session and data) and TRX1(data)) +BEGIN; +INSERT INTO t1(id, val) VALUES (8, 1); +UPDATE t1 SET val=val+1 WHERE id=1; +UPDATE t1 SET val=val+1 WHERE id=4; +Inserted a DDL after TRX5 and check that they run in parallel due to commit_order +CREATE TABLE `t2` (`id` int(11) NOT NULL, `val` int(11) NOT NULL) ENGINE=InnoDB; +ALTER TABLE t2 ADD COLUMN b INT; +DROP TABLE `t2`; +#TRX4 (session C, depends on TRX2 (data)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=3; +INSERT INTO t1(id, val) VALUES (9, 1); +COMMIT; +finish TRX5 after TRX4 +COMMIT; +#TRX6 (session C, depends on TRX4 (session) and TRX3(data)) +BEGIN; +DELETE FROM t1 WHERE id=6; +COMMIT; +#TRX8 (session C, depends on TRX5 (data) and TRX6 (session)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=4; +#TRX7 (session B, depends on TRX1 and TRX6 (data) and TRX3 (session)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=5; +INSERT INTO t1(id, val) VALUES (6, 0); +COMMIT; +finish TRX8 after TRX7 +COMMIT; +Drop table and flush logs to force binlog to rotate +DROP TABLE t1; +Processing binlog master-bin.000008 +FLUSH LOGS; +include/include/assert_logical_timestamps.inc [0 1;1 2;1 3;2 4;4 5;5 6;6 7;7 8;4 9;8 10;10 11;10 12;12 13] +#### STEP 2.3 TEST Writeset_session+rotation #### +SET GLOBAL binlog_transaction_dependency_history_size=25000; +SELECT @@local.transaction_write_set_extraction, +@@global.transaction_write_set_extraction, +@@binlog_transaction_dependency_tracking, +@@binlog_transaction_dependency_history_size; +@@local.transaction_write_set_extraction @@global.transaction_write_set_extraction @@binlog_transaction_dependency_tracking @@binlog_transaction_dependency_history_size +XXHASH64 XXHASH64 WRITESET_SESSION 25000 +CREATE TABLE `t1` (`id` int(11) NOT NULL, `val` int(11) NOT NULL, +PRIMARY KEY (`id`)) ENGINE=InnoDB; +#TRX2 (session A, independent) +BEGIN; +INSERT INTO t1(id, val) VALUES (1, 0),(2, 0),(3, 0); +#TRX1 (session B, independent) +BEGIN; +INSERT INTO t1(id, val) VALUES (4, 0),(5, 0); +COMMIT; +finish TRX2 after TRX1 +COMMIT; +#TRX3 (session B, no data dependency, depends on TRX1 (session)) +BEGIN; +INSERT INTO t1(id, val) VALUES (6, 0),(7, 0); +COMMIT; +#TRX5 (session A, depends on TRX2 (session and data) and TRX1(data)) +BEGIN; +INSERT INTO t1(id, val) VALUES (8, 1); +UPDATE t1 SET val=val+1 WHERE id=1; +UPDATE t1 SET val=val+1 WHERE id=4; +Flushing logs in the middle of the set +FLUSH LOGS; +#TRX4 (session C, depends on TRX2 (data)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=3; +INSERT INTO t1(id, val) VALUES (9, 1); +COMMIT; +finish TRX5 after TRX4 +COMMIT; +#TRX6 (session C, depends on TRX4 (session) and TRX3(data)) +BEGIN; +DELETE FROM t1 WHERE id=6; +COMMIT; +#TRX8 (session C, depends on TRX5 (data) and TRX6 (session)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=4; +#TRX7 (session B, depends on TRX1 and TRX6 (data) and TRX3 (session)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=5; +INSERT INTO t1(id, val) VALUES (6, 0); +COMMIT; +finish TRX8 after TRX7 +COMMIT; +Drop table and flush logs to force binlog to rotate +DROP TABLE t1; +Processing binlog master-bin.000010 +FLUSH LOGS; +include/include/assert_logical_timestamps.inc [0 1;0 2;1 3;3 4;3 5;5 6] +#### STEP 2.4 TEST Writeset_session+history #### +SET GLOBAL binlog_transaction_dependency_history_size=25000; +History size reduced to 10 to test when it becomes full +SET GLOBAL binlog_transaction_dependency_history_size=10; +SELECT @@local.transaction_write_set_extraction, +@@global.transaction_write_set_extraction, +@@binlog_transaction_dependency_tracking, +@@binlog_transaction_dependency_history_size; +@@local.transaction_write_set_extraction @@global.transaction_write_set_extraction @@binlog_transaction_dependency_tracking @@binlog_transaction_dependency_history_size +XXHASH64 XXHASH64 WRITESET_SESSION 10 +CREATE TABLE `t1` (`id` int(11) NOT NULL, `val` int(11) NOT NULL, +PRIMARY KEY (`id`)) ENGINE=InnoDB; +#TRX2 (session A, independent) +BEGIN; +INSERT INTO t1(id, val) VALUES (1, 0),(2, 0),(3, 0); +#TRX1 (session B, independent) +BEGIN; +INSERT INTO t1(id, val) VALUES (4, 0),(5, 0); +COMMIT; +finish TRX2 after TRX1 +COMMIT; +#TRX3 (session B, no data dependency, depends on TRX1 (session)) +BEGIN; +INSERT INTO t1(id, val) VALUES (6, 0),(7, 0); +COMMIT; +#TRX5 (session A, depends on TRX2 (session and data) and TRX1(data)) +BEGIN; +INSERT INTO t1(id, val) VALUES (8, 1); +UPDATE t1 SET val=val+1 WHERE id=1; +UPDATE t1 SET val=val+1 WHERE id=4; +#TRX4 (session C, depends on TRX2 (data)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=3; +INSERT INTO t1(id, val) VALUES (9, 1); +COMMIT; +finish TRX5 after TRX4 +COMMIT; +#TRX6 (session C, depends on TRX4 (session) and TRX3(data)) +BEGIN; +DELETE FROM t1 WHERE id=6; +COMMIT; +#TRX8 (session C, depends on TRX5 (data) and TRX6 (session)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=4; +#TRX7 (session B, depends on TRX1 and TRX6 (data) and TRX3 (session)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=5; +INSERT INTO t1(id, val) VALUES (6, 0); +COMMIT; +finish TRX8 after TRX7 +COMMIT; +Drop table and flush logs to force binlog to rotate +DROP TABLE t1; +Processing binlog master-bin.000011 +FLUSH LOGS; +include/include/assert_logical_timestamps.inc [0 1;1 2;1 3;2 4;4 5;4 6;5 7;7 8;7 9;9 10] +SET GLOBAL binlog_transaction_dependency_tracking = COMMIT_ORDER; +######## 3. COMMIT_ORDER ######## +#### STEP 3.1 TEST Commit_order #### +SET GLOBAL binlog_transaction_dependency_history_size=25000; +SELECT @@local.transaction_write_set_extraction, +@@global.transaction_write_set_extraction, +@@binlog_transaction_dependency_tracking, +@@binlog_transaction_dependency_history_size; +@@local.transaction_write_set_extraction @@global.transaction_write_set_extraction @@binlog_transaction_dependency_tracking @@binlog_transaction_dependency_history_size +XXHASH64 XXHASH64 COMMIT_ORDER 25000 +CREATE TABLE `t1` (`id` int(11) NOT NULL, `val` int(11) NOT NULL, +PRIMARY KEY (`id`)) ENGINE=InnoDB; +#TRX2 (session A, independent) +BEGIN; +INSERT INTO t1(id, val) VALUES (1, 0),(2, 0),(3, 0); +#TRX1 (session B, independent) +BEGIN; +INSERT INTO t1(id, val) VALUES (4, 0),(5, 0); +COMMIT; +finish TRX2 after TRX1 +COMMIT; +#TRX3 (session B, no data dependency, depends on TRX1 (session)) +BEGIN; +INSERT INTO t1(id, val) VALUES (6, 0),(7, 0); +COMMIT; +#TRX5 (session A, depends on TRX2 (session and data) and TRX1(data)) +BEGIN; +INSERT INTO t1(id, val) VALUES (8, 1); +UPDATE t1 SET val=val+1 WHERE id=1; +UPDATE t1 SET val=val+1 WHERE id=4; +#TRX4 (session C, depends on TRX2 (data)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=3; +INSERT INTO t1(id, val) VALUES (9, 1); +COMMIT; +finish TRX5 after TRX4 +COMMIT; +#TRX6 (session C, depends on TRX4 (session) and TRX3(data)) +BEGIN; +DELETE FROM t1 WHERE id=6; +COMMIT; +#TRX8 (session C, depends on TRX5 (data) and TRX6 (session)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=4; +#TRX7 (session B, depends on TRX1 and TRX6 (data) and TRX3 (session)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=5; +INSERT INTO t1(id, val) VALUES (6, 0); +COMMIT; +finish TRX8 after TRX7 +COMMIT; +Drop table and flush logs to force binlog to rotate +DROP TABLE t1; +Processing binlog master-bin.000012 +FLUSH LOGS; +include/include/assert_logical_timestamps.inc [0 1;1 2;1 3;3 4;4 5;4 6;6 7;7 8;7 9;9 10] +#### STEP 3.2 TEST Commit_order+DDL #### +SET GLOBAL binlog_transaction_dependency_history_size=25000; +SELECT @@local.transaction_write_set_extraction, +@@global.transaction_write_set_extraction, +@@binlog_transaction_dependency_tracking, +@@binlog_transaction_dependency_history_size; +@@local.transaction_write_set_extraction @@global.transaction_write_set_extraction @@binlog_transaction_dependency_tracking @@binlog_transaction_dependency_history_size +XXHASH64 XXHASH64 COMMIT_ORDER 25000 +CREATE TABLE `t1` (`id` int(11) NOT NULL, `val` int(11) NOT NULL, +PRIMARY KEY (`id`)) ENGINE=InnoDB; +#TRX2 (session A, independent) +BEGIN; +INSERT INTO t1(id, val) VALUES (1, 0),(2, 0),(3, 0); +#TRX1 (session B, independent) +BEGIN; +INSERT INTO t1(id, val) VALUES (4, 0),(5, 0); +COMMIT; +finish TRX2 after TRX1 +COMMIT; +#TRX3 (session B, no data dependency, depends on TRX1 (session)) +BEGIN; +INSERT INTO t1(id, val) VALUES (6, 0),(7, 0); +COMMIT; +#TRX5 (session A, depends on TRX2 (session and data) and TRX1(data)) +BEGIN; +INSERT INTO t1(id, val) VALUES (8, 1); +UPDATE t1 SET val=val+1 WHERE id=1; +UPDATE t1 SET val=val+1 WHERE id=4; +Inserted a DDL after TRX5 and check that they run in parallel due to commit_order +CREATE TABLE `t2` (`id` int(11) NOT NULL, `val` int(11) NOT NULL) ENGINE=InnoDB; +ALTER TABLE t2 ADD COLUMN b INT; +DROP TABLE `t2`; +#TRX4 (session C, depends on TRX2 (data)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=3; +INSERT INTO t1(id, val) VALUES (9, 1); +COMMIT; +finish TRX5 after TRX4 +COMMIT; +#TRX6 (session C, depends on TRX4 (session) and TRX3(data)) +BEGIN; +DELETE FROM t1 WHERE id=6; +COMMIT; +#TRX8 (session C, depends on TRX5 (data) and TRX6 (session)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=4; +#TRX7 (session B, depends on TRX1 and TRX6 (data) and TRX3 (session)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=5; +INSERT INTO t1(id, val) VALUES (6, 0); +COMMIT; +finish TRX8 after TRX7 +COMMIT; +Drop table and flush logs to force binlog to rotate +DROP TABLE t1; +Processing binlog master-bin.000013 +FLUSH LOGS; +include/include/assert_logical_timestamps.inc [0 1;1 2;1 3;3 4;4 5;5 6;6 7;7 8;4 9;9 10;10 11;10 12;12 13] +#### STEP 3.3 TEST Commit_order+rotation #### +SET GLOBAL binlog_transaction_dependency_history_size=25000; +SELECT @@local.transaction_write_set_extraction, +@@global.transaction_write_set_extraction, +@@binlog_transaction_dependency_tracking, +@@binlog_transaction_dependency_history_size; +@@local.transaction_write_set_extraction @@global.transaction_write_set_extraction @@binlog_transaction_dependency_tracking @@binlog_transaction_dependency_history_size +XXHASH64 XXHASH64 COMMIT_ORDER 25000 +CREATE TABLE `t1` (`id` int(11) NOT NULL, `val` int(11) NOT NULL, +PRIMARY KEY (`id`)) ENGINE=InnoDB; +#TRX2 (session A, independent) +BEGIN; +INSERT INTO t1(id, val) VALUES (1, 0),(2, 0),(3, 0); +#TRX1 (session B, independent) +BEGIN; +INSERT INTO t1(id, val) VALUES (4, 0),(5, 0); +COMMIT; +finish TRX2 after TRX1 +COMMIT; +#TRX3 (session B, no data dependency, depends on TRX1 (session)) +BEGIN; +INSERT INTO t1(id, val) VALUES (6, 0),(7, 0); +COMMIT; +#TRX5 (session A, depends on TRX2 (session and data) and TRX1(data)) +BEGIN; +INSERT INTO t1(id, val) VALUES (8, 1); +UPDATE t1 SET val=val+1 WHERE id=1; +UPDATE t1 SET val=val+1 WHERE id=4; +Flushing logs in the middle of the set +FLUSH LOGS; +#TRX4 (session C, depends on TRX2 (data)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=3; +INSERT INTO t1(id, val) VALUES (9, 1); +COMMIT; +finish TRX5 after TRX4 +COMMIT; +#TRX6 (session C, depends on TRX4 (session) and TRX3(data)) +BEGIN; +DELETE FROM t1 WHERE id=6; +COMMIT; +#TRX8 (session C, depends on TRX5 (data) and TRX6 (session)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=4; +#TRX7 (session B, depends on TRX1 and TRX6 (data) and TRX3 (session)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=5; +INSERT INTO t1(id, val) VALUES (6, 0); +COMMIT; +finish TRX8 after TRX7 +COMMIT; +Drop table and flush logs to force binlog to rotate +DROP TABLE t1; +Processing binlog master-bin.000015 +FLUSH LOGS; +include/include/assert_logical_timestamps.inc [0 1;0 2;2 3;3 4;3 5;5 6] +#### STEP 3.4 TEST Commit_order+history #### +SET GLOBAL binlog_transaction_dependency_history_size=25000; +History size reduced to 10 to test when it becomes full +SET GLOBAL binlog_transaction_dependency_history_size=10; +SELECT @@local.transaction_write_set_extraction, +@@global.transaction_write_set_extraction, +@@binlog_transaction_dependency_tracking, +@@binlog_transaction_dependency_history_size; +@@local.transaction_write_set_extraction @@global.transaction_write_set_extraction @@binlog_transaction_dependency_tracking @@binlog_transaction_dependency_history_size +XXHASH64 XXHASH64 COMMIT_ORDER 10 +CREATE TABLE `t1` (`id` int(11) NOT NULL, `val` int(11) NOT NULL, +PRIMARY KEY (`id`)) ENGINE=InnoDB; +#TRX2 (session A, independent) +BEGIN; +INSERT INTO t1(id, val) VALUES (1, 0),(2, 0),(3, 0); +#TRX1 (session B, independent) +BEGIN; +INSERT INTO t1(id, val) VALUES (4, 0),(5, 0); +COMMIT; +finish TRX2 after TRX1 +COMMIT; +#TRX3 (session B, no data dependency, depends on TRX1 (session)) +BEGIN; +INSERT INTO t1(id, val) VALUES (6, 0),(7, 0); +COMMIT; +#TRX5 (session A, depends on TRX2 (session and data) and TRX1(data)) +BEGIN; +INSERT INTO t1(id, val) VALUES (8, 1); +UPDATE t1 SET val=val+1 WHERE id=1; +UPDATE t1 SET val=val+1 WHERE id=4; +#TRX4 (session C, depends on TRX2 (data)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=3; +INSERT INTO t1(id, val) VALUES (9, 1); +COMMIT; +finish TRX5 after TRX4 +COMMIT; +#TRX6 (session C, depends on TRX4 (session) and TRX3(data)) +BEGIN; +DELETE FROM t1 WHERE id=6; +COMMIT; +#TRX8 (session C, depends on TRX5 (data) and TRX6 (session)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=4; +#TRX7 (session B, depends on TRX1 and TRX6 (data) and TRX3 (session)) +BEGIN; +UPDATE t1 SET val=val+1 WHERE id=5; +INSERT INTO t1(id, val) VALUES (6, 0); +COMMIT; +finish TRX8 after TRX7 +COMMIT; +Drop table and flush logs to force binlog to rotate +DROP TABLE t1; +Processing binlog master-bin.000016 +FLUSH LOGS; +include/include/assert_logical_timestamps.inc [0 1;1 2;1 3;3 4;4 5;4 6;6 7;7 8;7 9;9 10] + +#### Verify that replication was correct #### +include/start_slave.inc +include/sync_slave_sql_with_master.inc +include/diff_tables.inc [master:test.tests, slave:test.tests] +DROP TABLE `tests`; +include/sync_slave_sql_with_master.inc +SET GLOBAL binlog_transaction_dependency_tracking= WRITESET; +SET GLOBAL binlog_transaction_dependency_history_size= DEFAULT; +FLUSH LOGS; + +#### Bug#25616372, PART1 #### +CREATE TABLE t1 (a INT PRIMARY KEY NOT NULL AUTO_INCREMENT); +INSERT INTO t1 VALUES (null); +INSERT INTO t1 VALUES (null); +set global binlog_transaction_dependency_tracking=WRITESET; +INSERT INTO t1 VALUES (null); +INSERT INTO t1 VALUES (null); +Processing binlog master-bin.000018 +include/include/assert_logical_timestamps.inc [0 1;1 2;1 3;3 4;3 5] +FLUSH LOGS; + +#### Bug#25616372, PART2 #### +INSERT INTO t1 VALUES (null); +INSERT INTO t1 VALUES (null); +set global binlog_transaction_dependency_tracking=WRITESET; +INSERT INTO t1 VALUES (null); +INSERT INTO t1 VALUES (null); +INSERT INTO t1 VALUES (null); +Processing binlog master-bin.000019 +include/include/assert_logical_timestamps.inc [0 1;1 2;2 3;2 4;2 5] +DROP TABLE t1; +FLUSH LOGS; + +#### Test ROLLBACK TO SAVEPOINT #### +CREATE TABLE t1 (a INT PRIMARY KEY); +CREATE TABLE nopk (a INT); +CREATE TABLE parent (a INT PRIMARY KEY); +CREATE TABLE child (a INT PRIMARY KEY, FOREIGN KEY (a) REFERENCES parent(a)); +# 1. Hashes of rolled-back rows are removed from writeset +FLUSH LOGS; +INSERT INTO t1 VALUES (1); +BEGIN; +SAVEPOINT sp; +UPDATE t1 SET a = 2; +ROLLBACK TO sp; +INSERT INTO t1 VALUES (2); +COMMIT; +INSERT INTO t1 VALUES (3); +Processing binlog master-bin.000021 +include/include/assert_logical_timestamps.inc [0 1;1 2;1 3] +# 2. If transaction is flagged as updating a non-index table, the flag is not rolled-back +FLUSH LOGS; +INSERT INTO t1 VALUES (4); +BEGIN; +SAVEPOINT sp; +INSERT INTO nopk VALUES (1); +ROLLBACK TO sp; +INSERT INTO t1 VALUES (5); +COMMIT; +INSERT INTO t1 VALUES (6); +Processing binlog master-bin.000022 +include/include/assert_logical_timestamps.inc [0 1;1 2;1 3] +# 3. If transaction is flagged as updating a foreign key parent table, the flag is not rolled-back +FLUSH LOGS; +INSERT INTO t1 VALUES (7); +BEGIN; +SAVEPOINT sp; +INSERT INTO parent VALUES (1); +ROLLBACK TO sp; +INSERT INTO t1 VALUES (8); +COMMIT; +INSERT INTO t1 VALUES (9); +Processing binlog master-bin.000023 +include/include/assert_logical_timestamps.inc [0 1;1 2;2 3] +# Clean up SAVEPOINT tests +DROP TABLE t1; +DROP TABLE nopk; +DROP TABLE child; +DROP TABLE parent; + +#### CLEANUP #### +include/sync_slave_sql_with_master.inc +include/stop_slave.inc +SET @@GLOBAL.slave_parallel_type= @save_slave_parallel_type; +SET @@GLOBAL.slave_parallel_workers= @save_slave_parallel_workers; +SET @@GLOBAL.slave_transaction_retries= @save_slave_transaction_retries; +include/start_slave.inc +SET GLOBAL binlog_transaction_dependency_tracking = COMMIT_ORDER; +SET @@GLOBAL.transaction_write_set_extraction= @save_transaction_write_set_extraction; +SET @@GLOBAL.binlog_transaction_dependency_tracking= @save_binlog_transaction_dependency_tracking; +SET @@GLOBAL.binlog_transaction_dependency_history_size= @save_binlog_transaction_dependency_history_size; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl/r/rpl_binlog_transaction_dependency_tracking_with_empty_trxs.result b/mysql-test/suite/rpl/r/rpl_binlog_transaction_dependency_tracking_with_empty_trxs.result new file mode 100644 index 000000000000..a3ccab4077bd --- /dev/null +++ b/mysql-test/suite/rpl/r/rpl_binlog_transaction_dependency_tracking_with_empty_trxs.result @@ -0,0 +1,38 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +[connection slave] +RESET MASTER; +CHANGE REPLICATION FILTER REPLICATE_IGNORE_TABLE= (test.t1); +SET @save_binlog_transaction_dependency_tracking= @@GLOBAL.binlog_transaction_dependency_tracking; +SET @save_transaction_write_set_extraction= @@GLOBAL.transaction_write_set_extraction; +SET GLOBAL binlog_transaction_dependency_tracking= COMMIT_ORDER; +SET GLOBAL transaction_write_set_extraction= XXHASH64; +SET LOCAL transaction_write_set_extraction= XXHASH64; +SET GLOBAL binlog_transaction_dependency_tracking= WRITESET; +include/start_slave.inc +[connection master] +CREATE TABLE t1 (c1 INT); +INSERT INTO t1 VALUES (1); +INSERT INTO t1 VALUES (2); +INSERT INTO t1 VALUES (3); +include/sync_slave_sql_with_master.inc +# +# Verify that the value of last_committed is not increased, +# since writeset history is not cleared when applying +# these empty transactions on slave. +# +Processing binlog slave-bin.000001 +include/include/assert_logical_timestamps.inc [0 1;0 2;0 3;0 4] +[connection master] +DROP TABLE t1; +include/sync_slave_sql_with_master.inc +include/stop_slave_sql.inc +SET GLOBAL binlog_transaction_dependency_tracking= COMMIT_ORDER; +SET @@GLOBAL.transaction_write_set_extraction= @save_transaction_write_set_extraction; +SET @@GLOBAL.binlog_transaction_dependency_tracking= @save_binlog_transaction_dependency_tracking; +CHANGE REPLICATION FILTER REPLICATE_IGNORE_TABLE= (); +include/start_slave_sql.inc +include/rpl_end.inc diff --git a/mysql-test/suite/rpl/r/rpl_binlog_transaction_dependency_tracking_with_filters.result b/mysql-test/suite/rpl/r/rpl_binlog_transaction_dependency_tracking_with_filters.result new file mode 100644 index 000000000000..085ede182c77 --- /dev/null +++ b/mysql-test/suite/rpl/r/rpl_binlog_transaction_dependency_tracking_with_filters.result @@ -0,0 +1,109 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +[connection master] +SET @save_binlog_transaction_dependency_tracking = @@GLOBAL.binlog_transaction_dependency_tracking; +SET @save_transaction_write_set_extraction = @@GLOBAL.transaction_write_set_extraction; +SET GLOBAL binlog_transaction_dependency_tracking = COMMIT_ORDER; +SET GLOBAL transaction_write_set_extraction = XXHASH64; +SET LOCAL transaction_write_set_extraction = XXHASH64; +[connection slave] +include/stop_slave.inc +CHANGE REPLICATION FILTER REPLICATE_REWRITE_DB=((db1,db2)), +REPLICATE_IGNORE_DB=(nodb); +include/start_slave.inc +SET @save_binlog_transaction_dependency_tracking = @@GLOBAL.binlog_transaction_dependency_tracking; +SET @save_transaction_write_set_extraction = @@GLOBAL.transaction_write_set_extraction; +SET GLOBAL binlog_transaction_dependency_tracking = COMMIT_ORDER; +SET GLOBAL transaction_write_set_extraction = XXHASH64; +SET LOCAL transaction_write_set_extraction = XXHASH64; +[connection master] +# +# 1. Add transactions with different dependency tracking and empty transaction +# on master. +# +CREATE DATABASE nodb; +CREATE DATABASE db1; +CREATE DATABASE db2; +USE nodb; +CREATE TABLE nodbt1 (a INT PRIMARY KEY NOT NULL AUTO_INCREMENT); +USE db1; +CREATE TABLE db1t1 (a INT PRIMARY KEY NOT NULL AUTO_INCREMENT); +USE test; +CREATE TABLE t1 (a INT PRIMARY KEY NOT NULL AUTO_INCREMENT); +USE db1; +INSERT INTO db1t1 VALUES (NULL); +INSERT INTO db1t1 VALUES (NULL); +SET GLOBAL binlog_transaction_dependency_tracking= WRITESET_SESSION; +INSERT INTO db1t1 VALUES (NULL); +INSERT INTO db1t1 VALUES (NULL); +USE nodb; +INSERT INTO nodbt1 VALUES (NULL); +INSERT INTO nodbt1 VALUES (NULL); +SET GLOBAL binlog_transaction_dependency_tracking= WRITESET; +INSERT INTO nodbt1 VALUES (NULL); +INSERT INTO nodbt1 VALUES (NULL); +USE test; +INSERT INTO t1 VALUES (NULL); +INSERT INTO t1 VALUES (NULL); +SET GLOBAL binlog_transaction_dependency_tracking= COMMIT_ORDER; +INSERT INTO t1 VALUES (NULL); +INSERT INTO t1 VALUES (NULL); +DROP DATABASE nodb; +DROP DATABASE db1; +DROP DATABASE db2; +DROP TABLE test.t1; +SELECT @@global.transaction_write_set_extraction, @@binlog_transaction_dependency_tracking; +@@global.transaction_write_set_extraction @@binlog_transaction_dependency_tracking +XXHASH64 COMMIT_ORDER +include/include/assert_logical_timestamps.inc +# +# 2. Test timestamps order with filtered and non-filtered transactions on Slave. +# +include/sync_slave_sql_with_master.inc +[On Slave] +######## 2.1. COMMIT_ORDER with SLAVE ######## +SELECT @@global.transaction_write_set_extraction, @@binlog_transaction_dependency_tracking; +@@global.transaction_write_set_extraction @@binlog_transaction_dependency_tracking +XXHASH64 COMMIT_ORDER +include/include/assert_logical_timestamps.inc +include/stop_slave.inc +RESET SLAVE; +RESET MASTER; + +######## 2.2. WRITESET with SLAVE ######## +SET GLOBAL binlog_transaction_dependency_tracking = WRITESET; +include/start_slave.inc +include/sync_slave_sql_with_master.inc +SELECT @@global.transaction_write_set_extraction, @@binlog_transaction_dependency_tracking; +@@global.transaction_write_set_extraction @@binlog_transaction_dependency_tracking +XXHASH64 WRITESET +include/include/assert_logical_timestamps.inc +include/stop_slave.inc +RESET SLAVE; +RESET MASTER; + +######## 2.3. WRITESET_SESSION with SLAVE ######## +SET GLOBAL binlog_transaction_dependency_tracking = WRITESET_SESSION; +include/start_slave.inc +include/sync_slave_sql_with_master.inc +SELECT @@global.transaction_write_set_extraction, @@binlog_transaction_dependency_tracking; +@@global.transaction_write_set_extraction @@binlog_transaction_dependency_tracking +XXHASH64 WRITESET_SESSION +include/include/assert_logical_timestamps.inc + +# 3. Clean up. +[connection master] +SET @@GLOBAL.transaction_write_set_extraction= @save_transaction_write_set_extraction; +SET @@GLOBAL.binlog_transaction_dependency_tracking= @save_binlog_transaction_dependency_tracking; +include/sync_slave_sql_with_master.inc +[On Slave] +SET GLOBAL binlog_transaction_dependency_tracking = COMMIT_ORDER; +SET @@GLOBAL.binlog_transaction_dependency_tracking= @save_binlog_transaction_dependency_tracking; +SET @@GLOBAL.transaction_write_set_extraction= @save_transaction_write_set_extraction; +include/stop_slave.inc +CHANGE REPLICATION FILTER REPLICATE_REWRITE_DB=(), REPLICATE_IGNORE_DB=(); +include/start_slave.inc +include/rpl_end.inc diff --git a/mysql-test/suite/rpl/r/rpl_binlog_transaction_dependency_tracking_with_fk.result b/mysql-test/suite/rpl/r/rpl_binlog_transaction_dependency_tracking_with_fk.result new file mode 100644 index 000000000000..9740b82f84cd --- /dev/null +++ b/mysql-test/suite/rpl/r/rpl_binlog_transaction_dependency_tracking_with_fk.result @@ -0,0 +1,412 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +SET @save_binlog_transaction_dependency_tracking = @@GLOBAL.binlog_transaction_dependency_tracking; +SET @save_transaction_write_set_extraction = @@GLOBAL.transaction_write_set_extraction; + +SET GLOBAL binlog_transaction_dependency_tracking = WRITESET; +######## 1. Test referential action RESTRICT with WRITESET. ######## +SELECT @@local.transaction_write_set_extraction, +@@global.transaction_write_set_extraction, +@@binlog_transaction_dependency_tracking; +@@local.transaction_write_set_extraction @@global.transaction_write_set_extraction @@binlog_transaction_dependency_tracking +XXHASH64 XXHASH64 WRITESET +CREATE TABLE parent1 (a INT NOT NULL PRIMARY KEY, b VARCHAR(50)); +CREATE TABLE parent2 (a INT NOT NULL PRIMARY KEY, b VARCHAR(50)); +CREATE TABLE t1 (a INT PRIMARY KEY); +CREATE TABLE child1 (a INT PRIMARY KEY, b INT, FOREIGN KEY(b) REFERENCES parent1 (a) ON UPDATE RESTRICT); +CREATE TABLE child2 (a INT PRIMARY KEY, b INT, FOREIGN KEY(b) REFERENCES parent2 (a) ON DELETE RESTRICT); +INSERT INTO parent1 VALUES (1, 1), (2, 2); +INSERT INTO parent2 VALUES (1, 1), (2, 2); +FLUSH LOGS; +# Case 2.1, 2.2, 2.3 +INSERT INTO child1 VALUES (1, 1); +INSERT INTO child2 VALUES (1, 1); +UPDATE child1 SET a = 2; +UPDATE child2 SET a = 2; +DELETE FROM child1; +DELETE FROM child2; +# Case 1.1, 1.2, 1.3 +INSERT INTO t1 VALUES (1); +INSERT INTO parent1 VALUES (3, 3); +INSERT INTO t1 VALUES (2); +# Case 1.4, 1.5 +BEGIN; +INSERT INTO t1 VALUES (3); +INSERT INTO child1 VALUES (1, 1); +BEGIN; +INSERT INTO parent1 VALUEs (4, 4); +INSERT INTO child2 VALUES (1, 1); +BEGIN; +INSERT INTO t1 VALUES (4); +COMMIT; +COMMIT; +COMMIT; +INSERT INTO t1 VALUES (5); +UPDATE parent1 SET a=5 WHERE a=1; +ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`child1`, CONSTRAINT `child1_ibfk_1` FOREIGN KEY (`b`) REFERENCES `parent1` (`a`)) +DELETE FROM parent2 WHERE a=1; +ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`child2`, CONSTRAINT `child2_ibfk_1` FOREIGN KEY (`b`) REFERENCES `parent2` (`a`)) +# Drop table and flush logs to force binlog to rotate +DROP TABLE child2, parent2, child1, parent1, t1; +FLUSH LOGS; +# Processing binlog... +include/include/assert_logical_timestamps.inc [0 1;1 2;1 3;2 4;3 5;4 6;1 7;7 8;8 9;8 10;9 11;9 12;11 13;13 14] +# Verify that replication is correct +include/sync_slave_sql_with_master.inc + +SET GLOBAL binlog_transaction_dependency_tracking = WRITESET_SESSION; +######## 2. Test referential action RESTRICT with WRITESET_SESSION. ######## +SELECT @@local.transaction_write_set_extraction, +@@global.transaction_write_set_extraction, +@@binlog_transaction_dependency_tracking; +@@local.transaction_write_set_extraction @@global.transaction_write_set_extraction @@binlog_transaction_dependency_tracking +XXHASH64 XXHASH64 WRITESET_SESSION +CREATE TABLE parent1 (a INT NOT NULL PRIMARY KEY, b VARCHAR(50)); +CREATE TABLE parent2 (a INT NOT NULL PRIMARY KEY, b VARCHAR(50)); +CREATE TABLE t1 (a INT PRIMARY KEY); +CREATE TABLE child1 (a INT PRIMARY KEY, b INT, FOREIGN KEY(b) REFERENCES parent1 (a) ON UPDATE RESTRICT); +CREATE TABLE child2 (a INT PRIMARY KEY, b INT, FOREIGN KEY(b) REFERENCES parent2 (a) ON DELETE RESTRICT); +INSERT INTO parent1 VALUES (1, 1), (2, 2); +INSERT INTO parent2 VALUES (1, 1), (2, 2); +FLUSH LOGS; +# Case 2.1, 2.2, 2.3 +INSERT INTO child1 VALUES (1, 1); +INSERT INTO child2 VALUES (1, 1); +UPDATE child1 SET a = 2; +UPDATE child2 SET a = 2; +DELETE FROM child1; +DELETE FROM child2; +# Case 1.1, 1.2, 1.3 +INSERT INTO t1 VALUES (1); +INSERT INTO parent1 VALUES (3, 3); +INSERT INTO t1 VALUES (2); +# Case 1.4, 1.5 +BEGIN; +INSERT INTO t1 VALUES (3); +INSERT INTO child1 VALUES (1, 1); +BEGIN; +INSERT INTO parent1 VALUEs (4, 4); +INSERT INTO child2 VALUES (1, 1); +BEGIN; +INSERT INTO t1 VALUES (4); +COMMIT; +COMMIT; +COMMIT; +INSERT INTO t1 VALUES (5); +UPDATE parent1 SET a=5 WHERE a=1; +ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`child1`, CONSTRAINT `child1_ibfk_1` FOREIGN KEY (`b`) REFERENCES `parent1` (`a`)) +DELETE FROM parent2 WHERE a=1; +ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`child2`, CONSTRAINT `child2_ibfk_1` FOREIGN KEY (`b`) REFERENCES `parent2` (`a`)) +# Drop table and flush logs to force binlog to rotate +DROP TABLE child2, parent2, child1, parent1, t1; +FLUSH LOGS; +# Processing binlog... +include/include/assert_logical_timestamps.inc [0 1;1 2;1 3;2 4;3 5;4 6;1 7;7 8;8 9;8 10;9 11;9 12;11 13;13 14] +# Verify that replication is correct +include/sync_slave_sql_with_master.inc + +SET GLOBAL binlog_transaction_dependency_tracking = WRITESET; +######## 3. Test referential action NO ACTION with WRITESET. ######## +SELECT @@local.transaction_write_set_extraction, +@@global.transaction_write_set_extraction, +@@binlog_transaction_dependency_tracking; +@@local.transaction_write_set_extraction @@global.transaction_write_set_extraction @@binlog_transaction_dependency_tracking +XXHASH64 XXHASH64 WRITESET +CREATE TABLE parent1 (a INT NOT NULL PRIMARY KEY, b VARCHAR(50)); +CREATE TABLE parent2 (a INT NOT NULL PRIMARY KEY, b VARCHAR(50)); +CREATE TABLE t1 (a INT PRIMARY KEY); +CREATE TABLE child1 (a INT PRIMARY KEY, b INT, FOREIGN KEY(b) REFERENCES parent1 (a) ON UPDATE NO ACTION); +CREATE TABLE child2 (a INT PRIMARY KEY, b INT, FOREIGN KEY(b) REFERENCES parent2 (a) ON DELETE NO ACTION); +INSERT INTO parent1 VALUES (1, 1), (2, 2); +INSERT INTO parent2 VALUES (1, 1), (2, 2); +FLUSH LOGS; +# Case 2.1, 2.2, 2.3 +INSERT INTO child1 VALUES (1, 1); +INSERT INTO child2 VALUES (1, 1); +UPDATE child1 SET a = 2; +UPDATE child2 SET a = 2; +DELETE FROM child1; +DELETE FROM child2; +# Case 1.1, 1.2, 1.3 +INSERT INTO t1 VALUES (1); +INSERT INTO parent1 VALUES (3, 3); +INSERT INTO t1 VALUES (2); +# Case 1.4, 1.5 +BEGIN; +INSERT INTO t1 VALUES (3); +INSERT INTO child1 VALUES (1, 1); +BEGIN; +INSERT INTO parent1 VALUEs (4, 4); +INSERT INTO child2 VALUES (1, 1); +BEGIN; +INSERT INTO t1 VALUES (4); +COMMIT; +COMMIT; +COMMIT; +INSERT INTO t1 VALUES (5); +UPDATE parent1 SET a=5 WHERE a=1; +ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`child1`, CONSTRAINT `child1_ibfk_1` FOREIGN KEY (`b`) REFERENCES `parent1` (`a`) ON UPDATE NO ACTION) +DELETE FROM parent2 WHERE a=1; +ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`child2`, CONSTRAINT `child2_ibfk_1` FOREIGN KEY (`b`) REFERENCES `parent2` (`a`) ON DELETE NO ACTION) +# Drop table and flush logs to force binlog to rotate +DROP TABLE child2, parent2, child1, parent1, t1; +FLUSH LOGS; +# Processing binlog... +include/include/assert_logical_timestamps.inc [0 1;1 2;1 3;2 4;3 5;4 6;1 7;7 8;8 9;8 10;9 11;9 12;11 13;13 14] +# Verify that replication is correct +include/sync_slave_sql_with_master.inc + +SET GLOBAL binlog_transaction_dependency_tracking = WRITESET_SESSION; +######## 4. Test referential action NO ACTION with WRITESET_SESSION. ######## +SELECT @@local.transaction_write_set_extraction, +@@global.transaction_write_set_extraction, +@@binlog_transaction_dependency_tracking; +@@local.transaction_write_set_extraction @@global.transaction_write_set_extraction @@binlog_transaction_dependency_tracking +XXHASH64 XXHASH64 WRITESET_SESSION +CREATE TABLE parent1 (a INT NOT NULL PRIMARY KEY, b VARCHAR(50)); +CREATE TABLE parent2 (a INT NOT NULL PRIMARY KEY, b VARCHAR(50)); +CREATE TABLE t1 (a INT PRIMARY KEY); +CREATE TABLE child1 (a INT PRIMARY KEY, b INT, FOREIGN KEY(b) REFERENCES parent1 (a) ON UPDATE NO ACTION); +CREATE TABLE child2 (a INT PRIMARY KEY, b INT, FOREIGN KEY(b) REFERENCES parent2 (a) ON DELETE NO ACTION); +INSERT INTO parent1 VALUES (1, 1), (2, 2); +INSERT INTO parent2 VALUES (1, 1), (2, 2); +FLUSH LOGS; +# Case 2.1, 2.2, 2.3 +INSERT INTO child1 VALUES (1, 1); +INSERT INTO child2 VALUES (1, 1); +UPDATE child1 SET a = 2; +UPDATE child2 SET a = 2; +DELETE FROM child1; +DELETE FROM child2; +# Case 1.1, 1.2, 1.3 +INSERT INTO t1 VALUES (1); +INSERT INTO parent1 VALUES (3, 3); +INSERT INTO t1 VALUES (2); +# Case 1.4, 1.5 +BEGIN; +INSERT INTO t1 VALUES (3); +INSERT INTO child1 VALUES (1, 1); +BEGIN; +INSERT INTO parent1 VALUEs (4, 4); +INSERT INTO child2 VALUES (1, 1); +BEGIN; +INSERT INTO t1 VALUES (4); +COMMIT; +COMMIT; +COMMIT; +INSERT INTO t1 VALUES (5); +UPDATE parent1 SET a=5 WHERE a=1; +ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`child1`, CONSTRAINT `child1_ibfk_1` FOREIGN KEY (`b`) REFERENCES `parent1` (`a`) ON UPDATE NO ACTION) +DELETE FROM parent2 WHERE a=1; +ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`child2`, CONSTRAINT `child2_ibfk_1` FOREIGN KEY (`b`) REFERENCES `parent2` (`a`) ON DELETE NO ACTION) +# Drop table and flush logs to force binlog to rotate +DROP TABLE child2, parent2, child1, parent1, t1; +FLUSH LOGS; +# Processing binlog... +include/include/assert_logical_timestamps.inc [0 1;1 2;1 3;2 4;3 5;4 6;1 7;7 8;8 9;8 10;9 11;9 12;11 13;13 14] +# Verify that replication is correct +include/sync_slave_sql_with_master.inc + +SET GLOBAL binlog_transaction_dependency_tracking = WRITESET; +######## 5. Test referential action CASCADE with WRITESET. ######## +SELECT @@local.transaction_write_set_extraction, +@@global.transaction_write_set_extraction, +@@binlog_transaction_dependency_tracking; +@@local.transaction_write_set_extraction @@global.transaction_write_set_extraction @@binlog_transaction_dependency_tracking +XXHASH64 XXHASH64 WRITESET +CREATE TABLE parent1 (a INT NOT NULL PRIMARY KEY, b VARCHAR(50)); +CREATE TABLE parent2 (a INT NOT NULL PRIMARY KEY, b VARCHAR(50)); +CREATE TABLE t1 (a INT PRIMARY KEY); +CREATE TABLE child1 (a INT PRIMARY KEY, b INT, FOREIGN KEY(b) REFERENCES parent1 (a) ON UPDATE CASCADE); +CREATE TABLE child2 (a INT PRIMARY KEY, b INT, FOREIGN KEY(b) REFERENCES parent2 (a) ON DELETE CASCADE); +INSERT INTO parent1 VALUES (1, 1), (2, 2); +INSERT INTO parent2 VALUES (1, 1), (2, 2); +FLUSH LOGS; +# Case 2.1, 2.2, 2.3 +INSERT INTO child1 VALUES (1, 1); +INSERT INTO child2 VALUES (1, 1); +UPDATE child1 SET a = 2; +UPDATE child2 SET a = 2; +DELETE FROM child1; +DELETE FROM child2; +# Case 1.1, 1.2, 1.3 +INSERT INTO t1 VALUES (1); +INSERT INTO parent1 VALUES (3, 3); +INSERT INTO t1 VALUES (2); +# Case 1.4, 1.5 +BEGIN; +INSERT INTO t1 VALUES (3); +INSERT INTO child1 VALUES (1, 1); +BEGIN; +INSERT INTO parent1 VALUEs (4, 4); +INSERT INTO child2 VALUES (1, 1); +BEGIN; +INSERT INTO t1 VALUES (4); +COMMIT; +COMMIT; +COMMIT; +INSERT INTO t1 VALUES (5); +UPDATE parent1 SET a=5 WHERE a=1; +DELETE FROM parent2 WHERE a=1; +# Drop table and flush logs to force binlog to rotate +DROP TABLE child2, parent2, child1, parent1, t1; +FLUSH LOGS; +# Processing binlog... +include/include/assert_logical_timestamps.inc [0 1;1 2;1 3;2 4;3 5;4 6;1 7;7 8;8 9;8 10;9 11;9 12;11 13;13 14;14 15;15 16] +# Verify that replication is correct +include/sync_slave_sql_with_master.inc + +SET GLOBAL binlog_transaction_dependency_tracking = WRITESET_SESSION; +######## 6. Test referential action CASCADE with WRITESET_SESSION. ######## +SELECT @@local.transaction_write_set_extraction, +@@global.transaction_write_set_extraction, +@@binlog_transaction_dependency_tracking; +@@local.transaction_write_set_extraction @@global.transaction_write_set_extraction @@binlog_transaction_dependency_tracking +XXHASH64 XXHASH64 WRITESET_SESSION +CREATE TABLE parent1 (a INT NOT NULL PRIMARY KEY, b VARCHAR(50)); +CREATE TABLE parent2 (a INT NOT NULL PRIMARY KEY, b VARCHAR(50)); +CREATE TABLE t1 (a INT PRIMARY KEY); +CREATE TABLE child1 (a INT PRIMARY KEY, b INT, FOREIGN KEY(b) REFERENCES parent1 (a) ON UPDATE CASCADE); +CREATE TABLE child2 (a INT PRIMARY KEY, b INT, FOREIGN KEY(b) REFERENCES parent2 (a) ON DELETE CASCADE); +INSERT INTO parent1 VALUES (1, 1), (2, 2); +INSERT INTO parent2 VALUES (1, 1), (2, 2); +FLUSH LOGS; +# Case 2.1, 2.2, 2.3 +INSERT INTO child1 VALUES (1, 1); +INSERT INTO child2 VALUES (1, 1); +UPDATE child1 SET a = 2; +UPDATE child2 SET a = 2; +DELETE FROM child1; +DELETE FROM child2; +# Case 1.1, 1.2, 1.3 +INSERT INTO t1 VALUES (1); +INSERT INTO parent1 VALUES (3, 3); +INSERT INTO t1 VALUES (2); +# Case 1.4, 1.5 +BEGIN; +INSERT INTO t1 VALUES (3); +INSERT INTO child1 VALUES (1, 1); +BEGIN; +INSERT INTO parent1 VALUEs (4, 4); +INSERT INTO child2 VALUES (1, 1); +BEGIN; +INSERT INTO t1 VALUES (4); +COMMIT; +COMMIT; +COMMIT; +INSERT INTO t1 VALUES (5); +UPDATE parent1 SET a=5 WHERE a=1; +DELETE FROM parent2 WHERE a=1; +# Drop table and flush logs to force binlog to rotate +DROP TABLE child2, parent2, child1, parent1, t1; +FLUSH LOGS; +# Processing binlog... +include/include/assert_logical_timestamps.inc [0 1;1 2;1 3;2 4;3 5;4 6;1 7;7 8;8 9;8 10;9 11;9 12;11 13;13 14;14 15;15 16] +# Verify that replication is correct +include/sync_slave_sql_with_master.inc + +SET GLOBAL binlog_transaction_dependency_tracking = WRITESET; +######## 7. Test referential action SET NULL with WRITESET. ######## +SELECT @@local.transaction_write_set_extraction, +@@global.transaction_write_set_extraction, +@@binlog_transaction_dependency_tracking; +@@local.transaction_write_set_extraction @@global.transaction_write_set_extraction @@binlog_transaction_dependency_tracking +XXHASH64 XXHASH64 WRITESET +CREATE TABLE parent1 (a INT NOT NULL PRIMARY KEY, b VARCHAR(50)); +CREATE TABLE parent2 (a INT NOT NULL PRIMARY KEY, b VARCHAR(50)); +CREATE TABLE t1 (a INT PRIMARY KEY); +CREATE TABLE child1 (a INT PRIMARY KEY, b INT, FOREIGN KEY(b) REFERENCES parent1 (a) ON UPDATE SET NULL); +CREATE TABLE child2 (a INT PRIMARY KEY, b INT, FOREIGN KEY(b) REFERENCES parent2 (a) ON DELETE SET NULL); +INSERT INTO parent1 VALUES (1, 1), (2, 2); +INSERT INTO parent2 VALUES (1, 1), (2, 2); +FLUSH LOGS; +# Case 2.1, 2.2, 2.3 +INSERT INTO child1 VALUES (1, 1); +INSERT INTO child2 VALUES (1, 1); +UPDATE child1 SET a = 2; +UPDATE child2 SET a = 2; +DELETE FROM child1; +DELETE FROM child2; +# Case 1.1, 1.2, 1.3 +INSERT INTO t1 VALUES (1); +INSERT INTO parent1 VALUES (3, 3); +INSERT INTO t1 VALUES (2); +# Case 1.4, 1.5 +BEGIN; +INSERT INTO t1 VALUES (3); +INSERT INTO child1 VALUES (1, 1); +BEGIN; +INSERT INTO parent1 VALUEs (4, 4); +INSERT INTO child2 VALUES (1, 1); +BEGIN; +INSERT INTO t1 VALUES (4); +COMMIT; +COMMIT; +COMMIT; +INSERT INTO t1 VALUES (5); +UPDATE parent1 SET a=5 WHERE a=1; +DELETE FROM parent2 WHERE a=1; +# Drop table and flush logs to force binlog to rotate +DROP TABLE child2, parent2, child1, parent1, t1; +FLUSH LOGS; +# Processing binlog... +include/include/assert_logical_timestamps.inc [0 1;1 2;1 3;2 4;3 5;4 6;1 7;7 8;8 9;8 10;9 11;9 12;11 13;13 14;14 15;15 16] +# Verify that replication is correct +include/sync_slave_sql_with_master.inc + +SET GLOBAL binlog_transaction_dependency_tracking = WRITESET_SESSION; +######## 8. Test referential action SET NULL with WRITESET_SESSION. ######## +SELECT @@local.transaction_write_set_extraction, +@@global.transaction_write_set_extraction, +@@binlog_transaction_dependency_tracking; +@@local.transaction_write_set_extraction @@global.transaction_write_set_extraction @@binlog_transaction_dependency_tracking +XXHASH64 XXHASH64 WRITESET_SESSION +CREATE TABLE parent1 (a INT NOT NULL PRIMARY KEY, b VARCHAR(50)); +CREATE TABLE parent2 (a INT NOT NULL PRIMARY KEY, b VARCHAR(50)); +CREATE TABLE t1 (a INT PRIMARY KEY); +CREATE TABLE child1 (a INT PRIMARY KEY, b INT, FOREIGN KEY(b) REFERENCES parent1 (a) ON UPDATE SET NULL); +CREATE TABLE child2 (a INT PRIMARY KEY, b INT, FOREIGN KEY(b) REFERENCES parent2 (a) ON DELETE SET NULL); +INSERT INTO parent1 VALUES (1, 1), (2, 2); +INSERT INTO parent2 VALUES (1, 1), (2, 2); +FLUSH LOGS; +# Case 2.1, 2.2, 2.3 +INSERT INTO child1 VALUES (1, 1); +INSERT INTO child2 VALUES (1, 1); +UPDATE child1 SET a = 2; +UPDATE child2 SET a = 2; +DELETE FROM child1; +DELETE FROM child2; +# Case 1.1, 1.2, 1.3 +INSERT INTO t1 VALUES (1); +INSERT INTO parent1 VALUES (3, 3); +INSERT INTO t1 VALUES (2); +# Case 1.4, 1.5 +BEGIN; +INSERT INTO t1 VALUES (3); +INSERT INTO child1 VALUES (1, 1); +BEGIN; +INSERT INTO parent1 VALUEs (4, 4); +INSERT INTO child2 VALUES (1, 1); +BEGIN; +INSERT INTO t1 VALUES (4); +COMMIT; +COMMIT; +COMMIT; +INSERT INTO t1 VALUES (5); +UPDATE parent1 SET a=5 WHERE a=1; +DELETE FROM parent2 WHERE a=1; +# Drop table and flush logs to force binlog to rotate +DROP TABLE child2, parent2, child1, parent1, t1; +FLUSH LOGS; +# Processing binlog... +include/include/assert_logical_timestamps.inc [0 1;1 2;1 3;2 4;3 5;4 6;1 7;7 8;8 9;8 10;9 11;9 12;11 13;13 14;14 15;15 16] +# Verify that replication is correct +include/sync_slave_sql_with_master.inc + +# Clean up +SET @@GLOBAL.binlog_transaction_dependency_tracking= @save_binlog_transaction_dependency_tracking; +SET @@GLOBAL.transaction_write_set_extraction= @save_transaction_write_set_extraction; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl/r/rpl_binlog_transaction_dependency_tracking_with_indexes.result b/mysql-test/suite/rpl/r/rpl_binlog_transaction_dependency_tracking_with_indexes.result new file mode 100644 index 000000000000..8a6d204373c7 --- /dev/null +++ b/mysql-test/suite/rpl/r/rpl_binlog_transaction_dependency_tracking_with_indexes.result @@ -0,0 +1,824 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +#### INITIALIZE #### +[connection slave] +include/stop_slave.inc +SET @save_slave_parallel_workers= @@GLOBAL.slave_parallel_workers; +SET @@GLOBAL.slave_parallel_workers= 4; +include/start_slave.inc +[connection master] +SET @save_binlog_transaction_dependency_tracking = @@GLOBAL.binlog_transaction_dependency_tracking; +SET @save_transaction_write_set_extraction = @@GLOBAL.transaction_write_set_extraction; +SET GLOBAL binlog_transaction_dependency_tracking = COMMIT_ORDER; +SET GLOBAL transaction_write_set_extraction = XXHASH64; +SET SESSION transaction_write_set_extraction = XXHASH64; +SET GLOBAL binlog_transaction_dependency_tracking = WRITESET; + +#### 0.0.0.0: WITHOUT PK, NULLABLE, NOT UNIQUE, NO INDEX #### + +CREATE TABLE t1 (a INT, b INT , c INT ); +CREATE TABLE t2 (a INT PRIMARY KEY); +FLUSH LOGS; +include/save_binlog_position.inc +# TRX1: independent +INSERT INTO t1 VALUES (1, 1, 1); +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [0 1] +# TRX2: independent +BEGIN; +INSERT INTO t1 VALUES (2, 2, 2); +INSERT INTO t2 VALUES (1); +COMMIT; +# now t1 contains two rows: (1, 1, 1), (2, 2, 2) +include/include/assert_logical_timestamps.inc [1 2] +# TRX3: independent +INSERT INTO t2 VALUES (3); +# TRX4: depends on TRX2 +DELETE FROM t1 WHERE a = 2; +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [1 3;3 4] +# TRX5: independent +INSERT INTO t2 VALUES (5); +# TRX6: conflict with TRX4 if unique, else with TRX1 +UPDATE t1 SET b = 2, c = 2 WHERE a = 1; +# now t1 contains one row: (1, 2, 2) +include/include/assert_logical_timestamps.inc [1 5;5 6] +# TRX7: independent +INSERT INTO t1 VALUES (3, NULL, 2); +# now t1 contains two rows: (1, 2, 2), (3, NULL, 2) +include/include/assert_logical_timestamps.inc [6 7] +# TRX8: independent +INSERT INTO t2 VALUES (8); +# TRX9: independent (no conflict with TRX7 since multiple NULLs are allowed) +INSERT INTO t1 VALUES (4, NULL, 2); +# now t1 contains three rows: (1, 2, 2), (3, NULL, 2), (4, NULL, 2) +include/include/assert_logical_timestamps.inc [1 8;8 9] +# TRX10: independent +INSERT INTO t2 VALUES (10); +# TRX11: conflict with TRX7 (not with TRX9 since multiple NULLs are allowed) +DELETE FROM t1 WHERE a = 3; +# now t1 contains two rows: (1, 2, 2), (4, NULL, 2) +include/include/assert_logical_timestamps.inc [1 10;10 11] +DROP TABLE t1; +DROP TABLE t2; + +#### 0.0.0.1: WITHOUT PK, NULLABLE, NOT UNIQUE, 1-COLUMN INDEX #### + +CREATE TABLE t1 (a INT, b INT , c INT , INDEX(b)); +CREATE TABLE t2 (a INT PRIMARY KEY); +FLUSH LOGS; +include/save_binlog_position.inc +# TRX1: independent +INSERT INTO t1 VALUES (1, 1, 1); +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [0 1] +# TRX2: independent +BEGIN; +INSERT INTO t1 VALUES (2, 2, 2); +INSERT INTO t2 VALUES (1); +COMMIT; +# now t1 contains two rows: (1, 1, 1), (2, 2, 2) +include/include/assert_logical_timestamps.inc [1 2] +# TRX3: independent +INSERT INTO t2 VALUES (3); +# TRX4: depends on TRX2 +DELETE FROM t1 WHERE a = 2; +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [1 3;3 4] +# TRX5: independent +INSERT INTO t2 VALUES (5); +# TRX6: conflict with TRX4 if unique, else with TRX1 +UPDATE t1 SET b = 2, c = 2 WHERE a = 1; +# now t1 contains one row: (1, 2, 2) +include/include/assert_logical_timestamps.inc [1 5;5 6] +# TRX7: independent +INSERT INTO t1 VALUES (3, NULL, 2); +# now t1 contains two rows: (1, 2, 2), (3, NULL, 2) +include/include/assert_logical_timestamps.inc [6 7] +# TRX8: independent +INSERT INTO t2 VALUES (8); +# TRX9: independent (no conflict with TRX7 since multiple NULLs are allowed) +INSERT INTO t1 VALUES (4, NULL, 2); +# now t1 contains three rows: (1, 2, 2), (3, NULL, 2), (4, NULL, 2) +include/include/assert_logical_timestamps.inc [1 8;8 9] +# TRX10: independent +INSERT INTO t2 VALUES (10); +# TRX11: conflict with TRX7 (not with TRX9 since multiple NULLs are allowed) +DELETE FROM t1 WHERE a = 3; +# now t1 contains two rows: (1, 2, 2), (4, NULL, 2) +include/include/assert_logical_timestamps.inc [1 10;10 11] +DROP TABLE t1; +DROP TABLE t2; + +#### 0.0.0.2: WITHOUT PK, NULLABLE, NOT UNIQUE, 2-COLUMN INDEX #### + +CREATE TABLE t1 (a INT, b INT , c INT , INDEX(b, c)); +CREATE TABLE t2 (a INT PRIMARY KEY); +FLUSH LOGS; +include/save_binlog_position.inc +# TRX1: independent +INSERT INTO t1 VALUES (1, 1, 1); +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [0 1] +# TRX2: independent +BEGIN; +INSERT INTO t1 VALUES (2, 2, 2); +INSERT INTO t2 VALUES (1); +COMMIT; +# now t1 contains two rows: (1, 1, 1), (2, 2, 2) +include/include/assert_logical_timestamps.inc [1 2] +# TRX3: independent +INSERT INTO t2 VALUES (3); +# TRX4: depends on TRX2 +DELETE FROM t1 WHERE a = 2; +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [1 3;3 4] +# TRX5: independent +INSERT INTO t2 VALUES (5); +# TRX6: conflict with TRX4 if unique, else with TRX1 +UPDATE t1 SET b = 2, c = 2 WHERE a = 1; +# now t1 contains one row: (1, 2, 2) +include/include/assert_logical_timestamps.inc [1 5;5 6] +# TRX7: independent +INSERT INTO t1 VALUES (3, NULL, 2); +# now t1 contains two rows: (1, 2, 2), (3, NULL, 2) +include/include/assert_logical_timestamps.inc [6 7] +# TRX8: independent +INSERT INTO t2 VALUES (8); +# TRX9: independent (no conflict with TRX7 since multiple NULLs are allowed) +INSERT INTO t1 VALUES (4, NULL, 2); +# now t1 contains three rows: (1, 2, 2), (3, NULL, 2), (4, NULL, 2) +include/include/assert_logical_timestamps.inc [1 8;8 9] +# TRX10: independent +INSERT INTO t2 VALUES (10); +# TRX11: conflict with TRX7 (not with TRX9 since multiple NULLs are allowed) +DELETE FROM t1 WHERE a = 3; +# now t1 contains two rows: (1, 2, 2), (4, NULL, 2) +include/include/assert_logical_timestamps.inc [1 10;10 11] +DROP TABLE t1; +DROP TABLE t2; + +#### 0.0.1.1: WITHOUT PK, NULLABLE, UNIQUE, 1-COLUMN INDEX #### + +CREATE TABLE t1 (a INT, b INT , c INT , UNIQUE INDEX(b)); +CREATE TABLE t2 (a INT PRIMARY KEY); +FLUSH LOGS; +include/save_binlog_position.inc +# TRX1: independent +INSERT INTO t1 VALUES (1, 1, 1); +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [0 1] +# TRX2: independent +BEGIN; +INSERT INTO t1 VALUES (2, 2, 2); +INSERT INTO t2 VALUES (1); +COMMIT; +# now t1 contains two rows: (1, 1, 1), (2, 2, 2) +include/include/assert_logical_timestamps.inc [1 2] +# TRX3: independent +INSERT INTO t2 VALUES (3); +# TRX4: depends on TRX2 +DELETE FROM t1 WHERE a = 2; +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [1 3;3 4] +# TRX5: independent +INSERT INTO t2 VALUES (5); +# TRX6: conflict with TRX4 if unique, else with TRX1 +UPDATE t1 SET b = 2, c = 2 WHERE a = 1; +# now t1 contains one row: (1, 2, 2) +include/include/assert_logical_timestamps.inc [1 5;5 6] +# TRX7: independent +INSERT INTO t1 VALUES (3, NULL, 2); +# now t1 contains two rows: (1, 2, 2), (3, NULL, 2) +include/include/assert_logical_timestamps.inc [6 7] +# TRX8: independent +INSERT INTO t2 VALUES (8); +# TRX9: independent (no conflict with TRX7 since multiple NULLs are allowed) +INSERT INTO t1 VALUES (4, NULL, 2); +# now t1 contains three rows: (1, 2, 2), (3, NULL, 2), (4, NULL, 2) +include/include/assert_logical_timestamps.inc [1 8;8 9] +# TRX10: independent +INSERT INTO t2 VALUES (10); +# TRX11: conflict with TRX7 (not with TRX9 since multiple NULLs are allowed) +DELETE FROM t1 WHERE a = 3; +# now t1 contains two rows: (1, 2, 2), (4, NULL, 2) +include/include/assert_logical_timestamps.inc [1 10;10 11] +DROP TABLE t1; +DROP TABLE t2; + +#### 0.0.1.2: WITHOUT PK, NULLABLE, UNIQUE, 2-COLUMN INDEX #### + +CREATE TABLE t1 (a INT, b INT , c INT , UNIQUE INDEX(b, c)); +CREATE TABLE t2 (a INT PRIMARY KEY); +FLUSH LOGS; +include/save_binlog_position.inc +# TRX1: independent +INSERT INTO t1 VALUES (1, 1, 1); +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [0 1] +# TRX2: independent +BEGIN; +INSERT INTO t1 VALUES (2, 2, 2); +INSERT INTO t2 VALUES (1); +COMMIT; +# now t1 contains two rows: (1, 1, 1), (2, 2, 2) +include/include/assert_logical_timestamps.inc [1 2] +# TRX3: independent +INSERT INTO t2 VALUES (3); +# TRX4: depends on TRX2 +DELETE FROM t1 WHERE a = 2; +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [1 3;3 4] +# TRX5: independent +INSERT INTO t2 VALUES (5); +# TRX6: conflict with TRX4 if unique, else with TRX1 +UPDATE t1 SET b = 2, c = 2 WHERE a = 1; +# now t1 contains one row: (1, 2, 2) +include/include/assert_logical_timestamps.inc [1 5;5 6] +# TRX7: independent +INSERT INTO t1 VALUES (3, NULL, 2); +# now t1 contains two rows: (1, 2, 2), (3, NULL, 2) +include/include/assert_logical_timestamps.inc [6 7] +# TRX8: independent +INSERT INTO t2 VALUES (8); +# TRX9: independent (no conflict with TRX7 since multiple NULLs are allowed) +INSERT INTO t1 VALUES (4, NULL, 2); +# now t1 contains three rows: (1, 2, 2), (3, NULL, 2), (4, NULL, 2) +include/include/assert_logical_timestamps.inc [1 8;8 9] +# TRX10: independent +INSERT INTO t2 VALUES (10); +# TRX11: conflict with TRX7 (not with TRX9 since multiple NULLs are allowed) +DELETE FROM t1 WHERE a = 3; +# now t1 contains two rows: (1, 2, 2), (4, NULL, 2) +include/include/assert_logical_timestamps.inc [1 10;10 11] +DROP TABLE t1; +DROP TABLE t2; + +#### 0.1.0.0: WITHOUT PK, NOT NULL, NOT UNIQUE, NO INDEX #### + +CREATE TABLE t1 (a INT, b INT NOT NULL, c INT NOT NULL ); +CREATE TABLE t2 (a INT PRIMARY KEY); +FLUSH LOGS; +include/save_binlog_position.inc +# TRX1: independent +INSERT INTO t1 VALUES (1, 1, 1); +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [0 1] +# TRX2: independent +BEGIN; +INSERT INTO t1 VALUES (2, 2, 2); +INSERT INTO t2 VALUES (1); +COMMIT; +# now t1 contains two rows: (1, 1, 1), (2, 2, 2) +include/include/assert_logical_timestamps.inc [1 2] +# TRX3: independent +INSERT INTO t2 VALUES (3); +# TRX4: depends on TRX2 +DELETE FROM t1 WHERE a = 2; +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [1 3;3 4] +# TRX5: independent +INSERT INTO t2 VALUES (5); +# TRX6: conflict with TRX4 if unique, else with TRX1 +UPDATE t1 SET b = 2, c = 2 WHERE a = 1; +# now t1 contains one row: (1, 2, 2) +include/include/assert_logical_timestamps.inc [1 5;5 6] +DROP TABLE t1; +DROP TABLE t2; + +#### 0.1.0.1: WITHOUT PK, NOT NULL, NOT UNIQUE, 1-COLUMN INDEX #### + +CREATE TABLE t1 (a INT, b INT NOT NULL, c INT NOT NULL , INDEX(b)); +CREATE TABLE t2 (a INT PRIMARY KEY); +FLUSH LOGS; +include/save_binlog_position.inc +# TRX1: independent +INSERT INTO t1 VALUES (1, 1, 1); +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [0 1] +# TRX2: independent +BEGIN; +INSERT INTO t1 VALUES (2, 2, 2); +INSERT INTO t2 VALUES (1); +COMMIT; +# now t1 contains two rows: (1, 1, 1), (2, 2, 2) +include/include/assert_logical_timestamps.inc [1 2] +# TRX3: independent +INSERT INTO t2 VALUES (3); +# TRX4: depends on TRX2 +DELETE FROM t1 WHERE a = 2; +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [1 3;3 4] +# TRX5: independent +INSERT INTO t2 VALUES (5); +# TRX6: conflict with TRX4 if unique, else with TRX1 +UPDATE t1 SET b = 2, c = 2 WHERE a = 1; +# now t1 contains one row: (1, 2, 2) +include/include/assert_logical_timestamps.inc [1 5;5 6] +DROP TABLE t1; +DROP TABLE t2; + +#### 0.1.0.2: WITHOUT PK, NOT NULL, NOT UNIQUE, 2-COLUMN INDEX #### + +CREATE TABLE t1 (a INT, b INT NOT NULL, c INT NOT NULL , INDEX(b, c)); +CREATE TABLE t2 (a INT PRIMARY KEY); +FLUSH LOGS; +include/save_binlog_position.inc +# TRX1: independent +INSERT INTO t1 VALUES (1, 1, 1); +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [0 1] +# TRX2: independent +BEGIN; +INSERT INTO t1 VALUES (2, 2, 2); +INSERT INTO t2 VALUES (1); +COMMIT; +# now t1 contains two rows: (1, 1, 1), (2, 2, 2) +include/include/assert_logical_timestamps.inc [1 2] +# TRX3: independent +INSERT INTO t2 VALUES (3); +# TRX4: depends on TRX2 +DELETE FROM t1 WHERE a = 2; +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [1 3;3 4] +# TRX5: independent +INSERT INTO t2 VALUES (5); +# TRX6: conflict with TRX4 if unique, else with TRX1 +UPDATE t1 SET b = 2, c = 2 WHERE a = 1; +# now t1 contains one row: (1, 2, 2) +include/include/assert_logical_timestamps.inc [1 5;5 6] +DROP TABLE t1; +DROP TABLE t2; + +#### 0.1.1.1: WITHOUT PK, NOT NULL, UNIQUE, 1-COLUMN INDEX #### + +CREATE TABLE t1 (a INT, b INT NOT NULL, c INT NOT NULL , UNIQUE INDEX(b)); +CREATE TABLE t2 (a INT PRIMARY KEY); +FLUSH LOGS; +include/save_binlog_position.inc +# TRX1: independent +INSERT INTO t1 VALUES (1, 1, 1); +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [0 1] +# TRX2: independent +BEGIN; +INSERT INTO t1 VALUES (2, 2, 2); +INSERT INTO t2 VALUES (1); +COMMIT; +# now t1 contains two rows: (1, 1, 1), (2, 2, 2) +include/include/assert_logical_timestamps.inc [1 2] +# TRX3: independent +INSERT INTO t2 VALUES (3); +# TRX4: depends on TRX2 +DELETE FROM t1 WHERE a = 2; +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [1 3;2 4] +# TRX5: independent +INSERT INTO t2 VALUES (5); +# TRX6: conflict with TRX4 if unique, else with TRX1 +UPDATE t1 SET b = 2, c = 2 WHERE a = 1; +# now t1 contains one row: (1, 2, 2) +include/include/assert_logical_timestamps.inc [1 5;4 6] +DROP TABLE t1; +DROP TABLE t2; + +#### 0.1.1.2: WITHOUT PK, NOT NULL, UNIQUE, 2-COLUMN INDEX #### + +CREATE TABLE t1 (a INT, b INT NOT NULL, c INT NOT NULL , UNIQUE INDEX(b, c)); +CREATE TABLE t2 (a INT PRIMARY KEY); +FLUSH LOGS; +include/save_binlog_position.inc +# TRX1: independent +INSERT INTO t1 VALUES (1, 1, 1); +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [0 1] +# TRX2: independent +BEGIN; +INSERT INTO t1 VALUES (2, 2, 2); +INSERT INTO t2 VALUES (1); +COMMIT; +# now t1 contains two rows: (1, 1, 1), (2, 2, 2) +include/include/assert_logical_timestamps.inc [1 2] +# TRX3: independent +INSERT INTO t2 VALUES (3); +# TRX4: depends on TRX2 +DELETE FROM t1 WHERE a = 2; +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [1 3;2 4] +# TRX5: independent +INSERT INTO t2 VALUES (5); +# TRX6: conflict with TRX4 if unique, else with TRX1 +UPDATE t1 SET b = 2, c = 2 WHERE a = 1; +# now t1 contains one row: (1, 2, 2) +include/include/assert_logical_timestamps.inc [1 5;4 6] +DROP TABLE t1; +DROP TABLE t2; + +#### 1.0.0.0: WITH PK, NULLABLE, NOT UNIQUE, NO INDEX #### + +CREATE TABLE t1 (a INT PRIMARY KEY, b INT , c INT ); +CREATE TABLE t2 (a INT PRIMARY KEY); +FLUSH LOGS; +include/save_binlog_position.inc +# TRX1: independent +INSERT INTO t1 VALUES (1, 1, 1); +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [0 1] +# TRX2: independent +BEGIN; +INSERT INTO t1 VALUES (2, 2, 2); +INSERT INTO t2 VALUES (1); +COMMIT; +# now t1 contains two rows: (1, 1, 1), (2, 2, 2) +include/include/assert_logical_timestamps.inc [1 2] +# TRX3: independent +INSERT INTO t2 VALUES (3); +# TRX4: depends on TRX2 +DELETE FROM t1 WHERE a = 2; +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [1 3;2 4] +# TRX5: independent +INSERT INTO t2 VALUES (5); +# TRX6: conflict with TRX4 if unique, else with TRX1 +UPDATE t1 SET b = 2, c = 2 WHERE a = 1; +# now t1 contains one row: (1, 2, 2) +include/include/assert_logical_timestamps.inc [1 5;1 6] +# TRX7: independent +INSERT INTO t1 VALUES (3, NULL, 2); +# now t1 contains two rows: (1, 2, 2), (3, NULL, 2) +include/include/assert_logical_timestamps.inc [1 7] +# TRX8: independent +INSERT INTO t2 VALUES (8); +# TRX9: independent (no conflict with TRX7 since multiple NULLs are allowed) +INSERT INTO t1 VALUES (4, NULL, 2); +# now t1 contains three rows: (1, 2, 2), (3, NULL, 2), (4, NULL, 2) +include/include/assert_logical_timestamps.inc [1 8;1 9] +# TRX10: independent +INSERT INTO t2 VALUES (10); +# TRX11: conflict with TRX7 (not with TRX9 since multiple NULLs are allowed) +DELETE FROM t1 WHERE a = 3; +# now t1 contains two rows: (1, 2, 2), (4, NULL, 2) +include/include/assert_logical_timestamps.inc [1 10;7 11] +DROP TABLE t1; +DROP TABLE t2; + +#### 1.0.0.1: WITH PK, NULLABLE, NOT UNIQUE, 1-COLUMN INDEX #### + +CREATE TABLE t1 (a INT PRIMARY KEY, b INT , c INT , INDEX(b)); +CREATE TABLE t2 (a INT PRIMARY KEY); +FLUSH LOGS; +include/save_binlog_position.inc +# TRX1: independent +INSERT INTO t1 VALUES (1, 1, 1); +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [0 1] +# TRX2: independent +BEGIN; +INSERT INTO t1 VALUES (2, 2, 2); +INSERT INTO t2 VALUES (1); +COMMIT; +# now t1 contains two rows: (1, 1, 1), (2, 2, 2) +include/include/assert_logical_timestamps.inc [1 2] +# TRX3: independent +INSERT INTO t2 VALUES (3); +# TRX4: depends on TRX2 +DELETE FROM t1 WHERE a = 2; +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [1 3;2 4] +# TRX5: independent +INSERT INTO t2 VALUES (5); +# TRX6: conflict with TRX4 if unique, else with TRX1 +UPDATE t1 SET b = 2, c = 2 WHERE a = 1; +# now t1 contains one row: (1, 2, 2) +include/include/assert_logical_timestamps.inc [1 5;1 6] +# TRX7: independent +INSERT INTO t1 VALUES (3, NULL, 2); +# now t1 contains two rows: (1, 2, 2), (3, NULL, 2) +include/include/assert_logical_timestamps.inc [1 7] +# TRX8: independent +INSERT INTO t2 VALUES (8); +# TRX9: independent (no conflict with TRX7 since multiple NULLs are allowed) +INSERT INTO t1 VALUES (4, NULL, 2); +# now t1 contains three rows: (1, 2, 2), (3, NULL, 2), (4, NULL, 2) +include/include/assert_logical_timestamps.inc [1 8;1 9] +# TRX10: independent +INSERT INTO t2 VALUES (10); +# TRX11: conflict with TRX7 (not with TRX9 since multiple NULLs are allowed) +DELETE FROM t1 WHERE a = 3; +# now t1 contains two rows: (1, 2, 2), (4, NULL, 2) +include/include/assert_logical_timestamps.inc [1 10;7 11] +DROP TABLE t1; +DROP TABLE t2; + +#### 1.0.0.2: WITH PK, NULLABLE, NOT UNIQUE, 2-COLUMN INDEX #### + +CREATE TABLE t1 (a INT PRIMARY KEY, b INT , c INT , INDEX(b, c)); +CREATE TABLE t2 (a INT PRIMARY KEY); +FLUSH LOGS; +include/save_binlog_position.inc +# TRX1: independent +INSERT INTO t1 VALUES (1, 1, 1); +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [0 1] +# TRX2: independent +BEGIN; +INSERT INTO t1 VALUES (2, 2, 2); +INSERT INTO t2 VALUES (1); +COMMIT; +# now t1 contains two rows: (1, 1, 1), (2, 2, 2) +include/include/assert_logical_timestamps.inc [1 2] +# TRX3: independent +INSERT INTO t2 VALUES (3); +# TRX4: depends on TRX2 +DELETE FROM t1 WHERE a = 2; +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [1 3;2 4] +# TRX5: independent +INSERT INTO t2 VALUES (5); +# TRX6: conflict with TRX4 if unique, else with TRX1 +UPDATE t1 SET b = 2, c = 2 WHERE a = 1; +# now t1 contains one row: (1, 2, 2) +include/include/assert_logical_timestamps.inc [1 5;1 6] +# TRX7: independent +INSERT INTO t1 VALUES (3, NULL, 2); +# now t1 contains two rows: (1, 2, 2), (3, NULL, 2) +include/include/assert_logical_timestamps.inc [1 7] +# TRX8: independent +INSERT INTO t2 VALUES (8); +# TRX9: independent (no conflict with TRX7 since multiple NULLs are allowed) +INSERT INTO t1 VALUES (4, NULL, 2); +# now t1 contains three rows: (1, 2, 2), (3, NULL, 2), (4, NULL, 2) +include/include/assert_logical_timestamps.inc [1 8;1 9] +# TRX10: independent +INSERT INTO t2 VALUES (10); +# TRX11: conflict with TRX7 (not with TRX9 since multiple NULLs are allowed) +DELETE FROM t1 WHERE a = 3; +# now t1 contains two rows: (1, 2, 2), (4, NULL, 2) +include/include/assert_logical_timestamps.inc [1 10;7 11] +DROP TABLE t1; +DROP TABLE t2; + +#### 1.0.1.1: WITH PK, NULLABLE, UNIQUE, 1-COLUMN INDEX #### + +CREATE TABLE t1 (a INT PRIMARY KEY, b INT , c INT , UNIQUE INDEX(b)); +CREATE TABLE t2 (a INT PRIMARY KEY); +FLUSH LOGS; +include/save_binlog_position.inc +# TRX1: independent +INSERT INTO t1 VALUES (1, 1, 1); +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [0 1] +# TRX2: independent +BEGIN; +INSERT INTO t1 VALUES (2, 2, 2); +INSERT INTO t2 VALUES (1); +COMMIT; +# now t1 contains two rows: (1, 1, 1), (2, 2, 2) +include/include/assert_logical_timestamps.inc [1 2] +# TRX3: independent +INSERT INTO t2 VALUES (3); +# TRX4: depends on TRX2 +DELETE FROM t1 WHERE a = 2; +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [1 3;2 4] +# TRX5: independent +INSERT INTO t2 VALUES (5); +# TRX6: conflict with TRX4 if unique, else with TRX1 +UPDATE t1 SET b = 2, c = 2 WHERE a = 1; +# now t1 contains one row: (1, 2, 2) +include/include/assert_logical_timestamps.inc [1 5;4 6] +# TRX7: independent +INSERT INTO t1 VALUES (3, NULL, 2); +# now t1 contains two rows: (1, 2, 2), (3, NULL, 2) +include/include/assert_logical_timestamps.inc [1 7] +# TRX8: independent +INSERT INTO t2 VALUES (8); +# TRX9: independent (no conflict with TRX7 since multiple NULLs are allowed) +INSERT INTO t1 VALUES (4, NULL, 2); +# now t1 contains three rows: (1, 2, 2), (3, NULL, 2), (4, NULL, 2) +include/include/assert_logical_timestamps.inc [1 8;1 9] +# TRX10: independent +INSERT INTO t2 VALUES (10); +# TRX11: conflict with TRX7 (not with TRX9 since multiple NULLs are allowed) +DELETE FROM t1 WHERE a = 3; +# now t1 contains two rows: (1, 2, 2), (4, NULL, 2) +include/include/assert_logical_timestamps.inc [1 10;7 11] +DROP TABLE t1; +DROP TABLE t2; + +#### 1.0.1.2: WITH PK, NULLABLE, UNIQUE, 2-COLUMN INDEX #### + +CREATE TABLE t1 (a INT PRIMARY KEY, b INT , c INT , UNIQUE INDEX(b, c)); +CREATE TABLE t2 (a INT PRIMARY KEY); +FLUSH LOGS; +include/save_binlog_position.inc +# TRX1: independent +INSERT INTO t1 VALUES (1, 1, 1); +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [0 1] +# TRX2: independent +BEGIN; +INSERT INTO t1 VALUES (2, 2, 2); +INSERT INTO t2 VALUES (1); +COMMIT; +# now t1 contains two rows: (1, 1, 1), (2, 2, 2) +include/include/assert_logical_timestamps.inc [1 2] +# TRX3: independent +INSERT INTO t2 VALUES (3); +# TRX4: depends on TRX2 +DELETE FROM t1 WHERE a = 2; +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [1 3;2 4] +# TRX5: independent +INSERT INTO t2 VALUES (5); +# TRX6: conflict with TRX4 if unique, else with TRX1 +UPDATE t1 SET b = 2, c = 2 WHERE a = 1; +# now t1 contains one row: (1, 2, 2) +include/include/assert_logical_timestamps.inc [1 5;4 6] +# TRX7: independent +INSERT INTO t1 VALUES (3, NULL, 2); +# now t1 contains two rows: (1, 2, 2), (3, NULL, 2) +include/include/assert_logical_timestamps.inc [1 7] +# TRX8: independent +INSERT INTO t2 VALUES (8); +# TRX9: independent (no conflict with TRX7 since multiple NULLs are allowed) +INSERT INTO t1 VALUES (4, NULL, 2); +# now t1 contains three rows: (1, 2, 2), (3, NULL, 2), (4, NULL, 2) +include/include/assert_logical_timestamps.inc [1 8;1 9] +# TRX10: independent +INSERT INTO t2 VALUES (10); +# TRX11: conflict with TRX7 (not with TRX9 since multiple NULLs are allowed) +DELETE FROM t1 WHERE a = 3; +# now t1 contains two rows: (1, 2, 2), (4, NULL, 2) +include/include/assert_logical_timestamps.inc [1 10;7 11] +DROP TABLE t1; +DROP TABLE t2; + +#### 1.1.0.0: WITH PK, NOT NULL, NOT UNIQUE, NO INDEX #### + +CREATE TABLE t1 (a INT PRIMARY KEY, b INT NOT NULL, c INT NOT NULL ); +CREATE TABLE t2 (a INT PRIMARY KEY); +FLUSH LOGS; +include/save_binlog_position.inc +# TRX1: independent +INSERT INTO t1 VALUES (1, 1, 1); +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [0 1] +# TRX2: independent +BEGIN; +INSERT INTO t1 VALUES (2, 2, 2); +INSERT INTO t2 VALUES (1); +COMMIT; +# now t1 contains two rows: (1, 1, 1), (2, 2, 2) +include/include/assert_logical_timestamps.inc [1 2] +# TRX3: independent +INSERT INTO t2 VALUES (3); +# TRX4: depends on TRX2 +DELETE FROM t1 WHERE a = 2; +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [1 3;2 4] +# TRX5: independent +INSERT INTO t2 VALUES (5); +# TRX6: conflict with TRX4 if unique, else with TRX1 +UPDATE t1 SET b = 2, c = 2 WHERE a = 1; +# now t1 contains one row: (1, 2, 2) +include/include/assert_logical_timestamps.inc [1 5;1 6] +DROP TABLE t1; +DROP TABLE t2; + +#### 1.1.0.1: WITH PK, NOT NULL, NOT UNIQUE, 1-COLUMN INDEX #### + +CREATE TABLE t1 (a INT PRIMARY KEY, b INT NOT NULL, c INT NOT NULL , INDEX(b)); +CREATE TABLE t2 (a INT PRIMARY KEY); +FLUSH LOGS; +include/save_binlog_position.inc +# TRX1: independent +INSERT INTO t1 VALUES (1, 1, 1); +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [0 1] +# TRX2: independent +BEGIN; +INSERT INTO t1 VALUES (2, 2, 2); +INSERT INTO t2 VALUES (1); +COMMIT; +# now t1 contains two rows: (1, 1, 1), (2, 2, 2) +include/include/assert_logical_timestamps.inc [1 2] +# TRX3: independent +INSERT INTO t2 VALUES (3); +# TRX4: depends on TRX2 +DELETE FROM t1 WHERE a = 2; +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [1 3;2 4] +# TRX5: independent +INSERT INTO t2 VALUES (5); +# TRX6: conflict with TRX4 if unique, else with TRX1 +UPDATE t1 SET b = 2, c = 2 WHERE a = 1; +# now t1 contains one row: (1, 2, 2) +include/include/assert_logical_timestamps.inc [1 5;1 6] +DROP TABLE t1; +DROP TABLE t2; + +#### 1.1.0.2: WITH PK, NOT NULL, NOT UNIQUE, 2-COLUMN INDEX #### + +CREATE TABLE t1 (a INT PRIMARY KEY, b INT NOT NULL, c INT NOT NULL , INDEX(b, c)); +CREATE TABLE t2 (a INT PRIMARY KEY); +FLUSH LOGS; +include/save_binlog_position.inc +# TRX1: independent +INSERT INTO t1 VALUES (1, 1, 1); +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [0 1] +# TRX2: independent +BEGIN; +INSERT INTO t1 VALUES (2, 2, 2); +INSERT INTO t2 VALUES (1); +COMMIT; +# now t1 contains two rows: (1, 1, 1), (2, 2, 2) +include/include/assert_logical_timestamps.inc [1 2] +# TRX3: independent +INSERT INTO t2 VALUES (3); +# TRX4: depends on TRX2 +DELETE FROM t1 WHERE a = 2; +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [1 3;2 4] +# TRX5: independent +INSERT INTO t2 VALUES (5); +# TRX6: conflict with TRX4 if unique, else with TRX1 +UPDATE t1 SET b = 2, c = 2 WHERE a = 1; +# now t1 contains one row: (1, 2, 2) +include/include/assert_logical_timestamps.inc [1 5;1 6] +DROP TABLE t1; +DROP TABLE t2; + +#### 1.1.1.1: WITH PK, NOT NULL, UNIQUE, 1-COLUMN INDEX #### + +CREATE TABLE t1 (a INT PRIMARY KEY, b INT NOT NULL, c INT NOT NULL , UNIQUE INDEX(b)); +CREATE TABLE t2 (a INT PRIMARY KEY); +FLUSH LOGS; +include/save_binlog_position.inc +# TRX1: independent +INSERT INTO t1 VALUES (1, 1, 1); +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [0 1] +# TRX2: independent +BEGIN; +INSERT INTO t1 VALUES (2, 2, 2); +INSERT INTO t2 VALUES (1); +COMMIT; +# now t1 contains two rows: (1, 1, 1), (2, 2, 2) +include/include/assert_logical_timestamps.inc [1 2] +# TRX3: independent +INSERT INTO t2 VALUES (3); +# TRX4: depends on TRX2 +DELETE FROM t1 WHERE a = 2; +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [1 3;2 4] +# TRX5: independent +INSERT INTO t2 VALUES (5); +# TRX6: conflict with TRX4 if unique, else with TRX1 +UPDATE t1 SET b = 2, c = 2 WHERE a = 1; +# now t1 contains one row: (1, 2, 2) +include/include/assert_logical_timestamps.inc [1 5;4 6] +DROP TABLE t1; +DROP TABLE t2; + +#### 1.1.1.2: WITH PK, NOT NULL, UNIQUE, 2-COLUMN INDEX #### + +CREATE TABLE t1 (a INT PRIMARY KEY, b INT NOT NULL, c INT NOT NULL , UNIQUE INDEX(b, c)); +CREATE TABLE t2 (a INT PRIMARY KEY); +FLUSH LOGS; +include/save_binlog_position.inc +# TRX1: independent +INSERT INTO t1 VALUES (1, 1, 1); +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [0 1] +# TRX2: independent +BEGIN; +INSERT INTO t1 VALUES (2, 2, 2); +INSERT INTO t2 VALUES (1); +COMMIT; +# now t1 contains two rows: (1, 1, 1), (2, 2, 2) +include/include/assert_logical_timestamps.inc [1 2] +# TRX3: independent +INSERT INTO t2 VALUES (3); +# TRX4: depends on TRX2 +DELETE FROM t1 WHERE a = 2; +# now t1 contains one row: (1, 1, 1) +include/include/assert_logical_timestamps.inc [1 3;2 4] +# TRX5: independent +INSERT INTO t2 VALUES (5); +# TRX6: conflict with TRX4 if unique, else with TRX1 +UPDATE t1 SET b = 2, c = 2 WHERE a = 1; +# now t1 contains one row: (1, 2, 2) +include/include/assert_logical_timestamps.inc [1 5;4 6] +DROP TABLE t1; +DROP TABLE t2; +#### CLEAN UP #### +SET @@GLOBAL.binlog_transaction_dependency_tracking= @save_binlog_transaction_dependency_tracking; +SET @@GLOBAL.transaction_write_set_extraction= @save_transaction_write_set_extraction; +include/sync_slave_sql_with_master.inc +SET @@GLOBAL.slave_parallel_workers= @save_slave_parallel_workers; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_history_size-master.opt b/mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_history_size-master.opt new file mode 100644 index 000000000000..c465ea3fc7e3 --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_history_size-master.opt @@ -0,0 +1,3 @@ +--binlog_transaction_dependency_tracking=COMMIT_ORDER +--transaction_write_set_extraction=XXHASH64 +--binlog_transaction_dependency_history_size=6 diff --git a/mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_history_size.test b/mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_history_size.test new file mode 100644 index 000000000000..02c2f2e21363 --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_history_size.test @@ -0,0 +1,135 @@ +################################################################################ +# ==== Purpose ==== +# Test timestamps are generated as expected with smaller +# binlog_transaction_dependency_history_size. +# Test: +# 1. When the new writeset plus the existing history is less than the limit, +# the history is not cleared. +# 2. When the new writeset plus the existing history is equal to the limit, +# the history is not cleared. +# 3. When the history is less than the limit and the writeset plus the history +# is equal to the limit plus one: +# 3.1. the transaction is compared with existing history +# 3.2. the transaction is not inserted into history +# 3.3. the history is cleared +# 4. When the history is equal to the limit and the writeset is a singleton: +# 3.1. the transaction is compared with existing history +# 3.2. the transaction is not inserted into history +# 3.3. the history is cleared +# 5. When the history size is equal to the limit and a transaction updating +# only a key-less table happens, the history is not cleared. +# 6. After history is cleared, it may fallback to COMMIT_ORDER so that a new +# transaction may be found to be non-conflicting with transactions not in +# history. +# +# ==== References ==== +# WL#9556: Writeset-based MTS dependency tracking on master +################################################################################ +--let $rpl_extra_connections_per_server= 7 +--source include/master-slave.inc +--source include/have_binlog_format_row.inc + +--connection master +# Loop between binlog_transaction_dependency_tracking modes +--let $type= 0 +while ($type < 3) +{ + --inc $type + + --connection master + --echo + if ($type == 1) + { + SET GLOBAL binlog_transaction_dependency_tracking = WRITESET; + --echo ######## 1. WRITESET ######## + } + if ($type == 2) + { + SET GLOBAL binlog_transaction_dependency_tracking = WRITESET_SESSION; + --echo ######## 2. WRITESET_SESSION ######## + } + if ($type == 3) + { + SET GLOBAL binlog_transaction_dependency_tracking = COMMIT_ORDER; + --echo ######## 3. COMMIT_ORDER ######## + } + + SELECT @@local.transaction_write_set_extraction, + @@global.transaction_write_set_extraction, + @@binlog_transaction_dependency_tracking, + @@binlog_transaction_dependency_history_size; + + CREATE TABLE test.tab1 (a INT PRIMARY KEY AUTO_INCREMENT NOT NULL); + CREATE TABLE test.tab2 (a INT); + FLUSH LOGS; + + # Expected commit orders: + # for WRITESET and WRITESET_SESSION it is shown below in [] bracket. + # for COMMIT_ORDER it is shown below in {} bracket. + # [0 1] {0 1} Case 1 + --connection server_1_1 + INSERT INTO tab1 VALUES (NULL); # 0 + 1 = 1 + # [1 2] {1 2} Case 1 + --connection server_1_2 + INSERT INTO tab1 VALUES (NULL); # 1 + 1 = 2 + # [1 3] {2 3} Case 2 + --connection server_1_3 + INSERT INTO tab1 VALUES (NULL); # 2 + 1 = 3 + # [3 4] {3 4} Case 5 + --connection server_1_4 + INSERT INTO tab2 VALUES (1); # 3 + 0 = 3 + # [1 5] {4 5} Verify case 5 + 4.1: this should be scheduled in parallel with previous transactions. + --connection server_1_5 + INSERT INTO tab1 VALUES (NULL); # 3 + 1 = 4 -> reset to 0 + # [5 6] {5 6} Verify case 4.2 + 4.3: this should not be scheduled in parallel with previous transactions. + --connection server_1_6 + INSERT INTO tab1 VALUES (NULL); # 0 + 1 = 1 + # [5 7] {6 7} Case 3.1 + --connection server_1_1 + INSERT INTO tab1 VALUES (NULL), (NULL), (NULL); # 1 + 3 = 4 -> reset to 0 + # [7 8] {7 8} Verify case 3.2 + 3.3 + --connection server_1_2 + INSERT INTO tab1 VALUES (NULL); # 0 + 1 = 1 + # [7 9] {8 9} + --connection server_1_3 + INSERT INTO tab1 VALUES (NULL); # 1 + 1 = 2 + # [9 13] {9 13} Case 6 (this is not committed yet, and will be scheduled in parallel with the next + # three transactions even if two of them are not in history when this transaction commits). + --connection server_1_7 + BEGIN; + INSERT INTO tab1 VALUES (NULL); + # [7 10] {9 10} + --connection server_1_4 + INSERT INTO tab1 VALUES (NULL); # 2 + 1 = 3 + # [7 11] {10 11} + --connection server_1_5 + INSERT INTO tab1 VALUES (NULL); # 3 + 1 = 4 -> reset to 0 + # [11 12] {11 12} + --connection server_1_6 + INSERT INTO tab1 VALUES (NULL); # 0 + 1 = 1 + # [9 13] {9 13} Case 6 cont'd + --connection server_1_7 + COMMIT; + + --connection master + --echo # Drop table and flush logs to force binlog to rotate + DROP TABLE test.tab1, test.tab2; + + --let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1) + FLUSH LOGS; + + --echo # Processing binlog... + # For WRITESET and WRITESET_SESSION + --let $logical_timestamps=0 1;1 2;1 3;3 4;1 5;5 6;5 7;7 8;7 9;7 10;7 11;11 12;9 13;13 14 + if ($type == 3) + { # For COMMIT_ORDER + --let $logical_timestamps=0 1;1 2;2 3;3 4;4 5;5 6;6 7;7 8;8 9;9 10;10 11;11 12;9 13;13 14 + } + --source include/assert_logical_timestamps.inc + + --echo # Verify that replication is correct + --source include/sync_slave_sql_with_master.inc +} + +--connection master +--source include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_tracking.test b/mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_tracking.test new file mode 100644 index 000000000000..896d4896ff82 --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_tracking.test @@ -0,0 +1,385 @@ +# ==== Purpose ==== +# +# Test timestamps generated by binlog-transaction-dependency-tracking +# modes WRITESET, WRITESET_SESSION and COMMIT_ORDER. +# +# The following properties are tested: +# - With binlog-transaction-dependency-tracking=WRITESET, the logical timestamps +# are generated as expected, marking each transaction as conflicting with +# transactions having intersecting writesets. +# (type = 0) +# - With binlog-transaction-dependency-tracking=WRITESET_SESSION, transactions +# are additionally marked as conflicting with all previous transactions in the +# same session. +# (type = 1) +# - Additionally, transactions are marked as conflicting with any DDL. +# (step = 2) +# - Additionally, transactions are marked as conflicting if one appears before +# and the other after a binlog rotation. +# (step = 3) +# - Additionally, transactions are marked as conflicting if the writeset history +# was cleared between the transactions. +# (step = 4) +# +# - It tests this for INSERT, UPDATE and DELETE statements. +# +# ==== Implementation ==== +# +# 1. Apply 8 transactions with different data dependencies and check the binary +# log generated (step 1). Do the same with DDL in the middle (step 2), with +# rotation (step 3) and when writeset history becomes full (step 4). +# +# 2. Test Bug#2561672: POST RESET MASTER/FLUSH LOGS SETTING BTDT=WRITESET +# BEHAVES LIKE COMMIT_ORDER +# +# 3. Test ROLLBACK TO SAVEPOINT. +# +# ==== References ==== +# +# WL#9556: Writeset-based MTS dependency tracking on master +# + +--source include/master-slave.inc +--source include/have_binlog_format_row.inc + +--echo #### INITIALIZE #### + +--connection slave +call mtr.add_suppression("Transaction is tagged with inconsistent logical timestamps"); +call mtr.add_suppression("Cannot execute the current event group in the parallel mode."); + +--source include/stop_slave.inc + +SET @save_slave_parallel_type = @@GLOBAL.slave_parallel_type; +SET @save_slave_parallel_workers = @@GLOBAL.slave_parallel_workers; +SET @save_slave_transaction_retries = @@GLOBAL.slave_transaction_retries; + +SET GLOBAL slave_parallel_type = LOGICAL_CLOCK; +SET GLOBAL slave_parallel_workers = 3; +SET GLOBAL slave_transaction_retries = 0; + +--connection master + +SET @save_binlog_transaction_dependency_tracking = @@GLOBAL.binlog_transaction_dependency_tracking; +SET @save_binlog_transaction_dependency_history_size = @@GLOBAL.binlog_transaction_dependency_history_size; +SET @save_transaction_write_set_extraction = @@GLOBAL.transaction_write_set_extraction; + +# for step 4 +SET GLOBAL binlog_transaction_dependency_tracking = COMMIT_ORDER; + +SET GLOBAL transaction_write_set_extraction = XXHASH64; +SET LOCAL transaction_write_set_extraction = XXHASH64; + +--connection master1 +SET LOCAL transaction_write_set_extraction = XXHASH64; + +--connection server_1 +SET LOCAL transaction_write_set_extraction = XXHASH64; + +--connection master + +CREATE TABLE tests (`id` INT NOT NULL, `description` VARCHAR(50), `results` VARCHAR(100), PRIMARY KEY(`id`)); +INSERT INTO `tests` (`id`, `description`, `results`) VALUES +(1, 'Writeset', '0 1;1 2;1 3;1 4;3 5;3 6;4 7;7 8;6 9;9 10'), +(2, 'Writeset+DDL', '0 1;1 2;1 3;1 4;4 5;5 6;6 7;7 8;4 9;7 10;10 11;9 12;12 13'), +(3, 'Writeset+rotation', '0 1;0 2;1 3;3 4;2 5;5 6'), +(4, 'Writeset+history', '0 1;1 2;1 3;1 4;4 5;4 6;4 7;7 8;7 9;9 10'), +(5, 'Writeset_session', '0 1;1 2;1 3;2 4;3 5;3 6;5 7;7 8;7 9;9 10'), +(6, 'Writeset_session+DDL', '0 1;1 2;1 3;2 4;4 5;5 6;6 7;7 8;4 9;8 10;10 11;10 12;12 13'), +(7, 'Writeset_session+rotation', '0 1;0 2;1 3;3 4;3 5;5 6'), +(8, 'Writeset_session+history', '0 1;1 2;1 3;2 4;4 5;4 6;5 7;7 8;7 9;9 10'), +(9, 'Commit_order', '0 1;1 2;1 3;3 4;4 5;4 6;6 7;7 8;7 9;9 10'), +(10, 'Commit_order+DDL', '0 1;1 2;1 3;3 4;4 5;5 6;6 7;7 8;4 9;9 10;10 11;10 12;12 13'), +(11, 'Commit_order+rotation', '0 1;0 2;2 3;3 4;3 5;5 6'), +(12, 'Commit_order+history', '0 1;1 2;1 3;3 4;4 5;4 6;6 7;7 8;7 9;9 10'); + +# flush logs to clear previous transactions +FLUSH LOGS; + +--let $idx= 0 + +--echo #### TEST #### + +# loop between WRITESET and WRITESET_SESSION +--let $type= 0 +while ($type < 3) +{ + --inc $type + + --connection master + if ($type == 1) + { + SET GLOBAL binlog_transaction_dependency_tracking = WRITESET; + --echo ######## 1. WRITESET ######## + } + if ($type == 2) + { + SET GLOBAL binlog_transaction_dependency_tracking = WRITESET_SESSION; + --echo ######## 2. WRITESET_SESSION ######## + } + if ($type == 3) + { + SET GLOBAL binlog_transaction_dependency_tracking = COMMIT_ORDER; + --echo ######## 3. COMMIT_ORDER ######## + } + + # loop between steps + --let $step= 0 + while ($step < 4) + { + --inc $step + --inc $idx + + --let $testname=`SELECT description FROM tests WHERE id=$idx` + --echo #### STEP $type.$step TEST $testname #### + + SET GLOBAL binlog_transaction_dependency_history_size=25000; + if ($step == 4) + { + --echo History size reduced to 10 to test when it becomes full + SET GLOBAL binlog_transaction_dependency_history_size=10; + } + + SELECT @@local.transaction_write_set_extraction, + @@global.transaction_write_set_extraction, + @@binlog_transaction_dependency_tracking, + @@binlog_transaction_dependency_history_size; + + CREATE TABLE `t1` (`id` int(11) NOT NULL, `val` int(11) NOT NULL, + PRIMARY KEY (`id`)) ENGINE=InnoDB; + + --connection master + --echo #TRX2 (session A, independent) + BEGIN; + INSERT INTO t1(id, val) VALUES (1, 0),(2, 0),(3, 0); + + --connection master1 + --echo #TRX1 (session B, independent) + BEGIN; + INSERT INTO t1(id, val) VALUES (4, 0),(5, 0); + COMMIT; + + --connection master + --echo finish TRX2 after TRX1 + COMMIT; + + --connection master1 + --echo #TRX3 (session B, no data dependency, depends on TRX1 (session)) + BEGIN; + INSERT INTO t1(id, val) VALUES (6, 0),(7, 0); + COMMIT; + + --connection master + --echo #TRX5 (session A, depends on TRX2 (session and data) and TRX1(data)) + BEGIN; + INSERT INTO t1(id, val) VALUES (8, 1); + UPDATE t1 SET val=val+1 WHERE id=1; + UPDATE t1 SET val=val+1 WHERE id=4; + + if ($step == 2) + { + --connection master1 + --echo Inserted a DDL after TRX5 and check that they run in parallel due to commit_order + CREATE TABLE `t2` (`id` int(11) NOT NULL, `val` int(11) NOT NULL) ENGINE=InnoDB; + ALTER TABLE t2 ADD COLUMN b INT; + DROP TABLE `t2`; + } + + # flush logs in the middle + if ($step == 3) + { + --connection master1 + --echo Flushing logs in the middle of the set + FLUSH LOGS; + } + + --connection server_1 + --echo #TRX4 (session C, depends on TRX2 (data)) + BEGIN; + UPDATE t1 SET val=val+1 WHERE id=3; + INSERT INTO t1(id, val) VALUES (9, 1); + COMMIT; + + --connection master + --echo finish TRX5 after TRX4 + COMMIT; + + --connection server_1 + --echo #TRX6 (session C, depends on TRX4 (session) and TRX3(data)) + BEGIN; + DELETE FROM t1 WHERE id=6; + COMMIT; + + --connection server_1 + --echo #TRX8 (session C, depends on TRX5 (data) and TRX6 (session)) + BEGIN; + UPDATE t1 SET val=val+1 WHERE id=4; + + --connection master1 + --echo #TRX7 (session B, depends on TRX1 and TRX6 (data) and TRX3 (session)) + BEGIN; + UPDATE t1 SET val=val+1 WHERE id=5; + INSERT INTO t1(id, val) VALUES (6, 0); + COMMIT; + + --connection server_1 + --echo finish TRX8 after TRX7 + COMMIT; + + --connection master + --echo Drop table and flush logs to force binlog to rotate + DROP TABLE t1; + + --let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1) + --echo Processing binlog $binlog_file + FLUSH LOGS; + + --let $source_file= $server_1_datadir/$binlog_file + --let $logical_timestamps=`SELECT results FROM tests WHERE id=$idx` + --source include/assert_logical_timestamps.inc + } +} + +--echo +--echo #### Verify that replication was correct #### + +--connection slave +--source include/start_slave.inc + +--connection master +--source include/sync_slave_sql_with_master.inc + +--let $diff_tables= master:test.tests, slave:test.tests +--source include/diff_tables.inc + +--connection master +DROP TABLE `tests`; +--source include/sync_slave_sql_with_master.inc + +--connection master +SET GLOBAL binlog_transaction_dependency_tracking= WRITESET; +SET GLOBAL binlog_transaction_dependency_history_size= DEFAULT; +FLUSH LOGS; + +--echo +--echo #### Bug#25616372, PART1 #### +CREATE TABLE t1 (a INT PRIMARY KEY NOT NULL AUTO_INCREMENT); # 0 1 +INSERT INTO t1 VALUES (null); # 1 2 +INSERT INTO t1 VALUES (null); # 1 3 +set global binlog_transaction_dependency_tracking=WRITESET; +INSERT INTO t1 VALUES (null); # 3 4 +INSERT INTO t1 VALUES (null); # 3 5 +--let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1) +-- echo Processing binlog $binlog_file +--let $source_file= $server_1_datadir/$binlog_file +--let $logical_timestamps=0 1;1 2;1 3;3 4;3 5 +--source include/assert_logical_timestamps.inc +FLUSH LOGS; + +--echo +--echo #### Bug#25616372, PART2 #### +INSERT INTO t1 VALUES (null); # 0 1 +INSERT INTO t1 VALUES (null); # 0 2 +set global binlog_transaction_dependency_tracking=WRITESET; +INSERT INTO t1 VALUES (null); # 2 3 +INSERT INTO t1 VALUES (null); # 3 4. # It should be 2 4 +INSERT INTO t1 VALUES (null); # 4 5. # It should be 2 5 +--let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1) +-- echo Processing binlog $binlog_file +--let $source_file= $server_1_datadir/$binlog_file +--let $logical_timestamps=0 1;1 2;2 3;2 4;2 5 +--source include/assert_logical_timestamps.inc +DROP TABLE t1; +FLUSH LOGS; + +# +# Test ROLLBACK TO SAVEPOINT. The rolled-back rows will still have their +# hashes in the writeset and may cause spurious conflicts. +# +--echo +-- echo #### Test ROLLBACK TO SAVEPOINT #### +CREATE TABLE t1 (a INT PRIMARY KEY); +CREATE TABLE nopk (a INT); +CREATE TABLE parent (a INT PRIMARY KEY); +CREATE TABLE child (a INT PRIMARY KEY, FOREIGN KEY (a) REFERENCES parent(a)); + +--echo # 1. Hashes of rolled-back rows are removed from writeset +FLUSH LOGS; +INSERT INTO t1 VALUES (1); +BEGIN; + SAVEPOINT sp; + UPDATE t1 SET a = 2; + ROLLBACK TO sp; + INSERT INTO t1 VALUES (2); +COMMIT; +INSERT INTO t1 VALUES (3); + +--let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1) +--echo Processing binlog $binlog_file +--let $source_file= $server_1_datadir/$binlog_file +--let $logical_timestamps=0 1;1 2;1 3 +--source include/assert_logical_timestamps.inc + +--echo # 2. If transaction is flagged as updating a non-index table, the flag is not rolled-back +FLUSH LOGS; +INSERT INTO t1 VALUES (4); +BEGIN; + SAVEPOINT sp; + INSERT INTO nopk VALUES (1); + ROLLBACK TO sp; + INSERT INTO t1 VALUES (5); +COMMIT; +INSERT INTO t1 VALUES (6); + +--let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1) +--echo Processing binlog $binlog_file +--let $source_file= $server_1_datadir/$binlog_file +--let $logical_timestamps=0 1;1 2;1 3 +--source include/assert_logical_timestamps.inc + +--echo # 3. If transaction is flagged as updating a foreign key parent table, the flag is not rolled-back +FLUSH LOGS; +INSERT INTO t1 VALUES (7); +BEGIN; + SAVEPOINT sp; + INSERT INTO parent VALUES (1); + ROLLBACK TO sp; + INSERT INTO t1 VALUES (8); +COMMIT; +INSERT INTO t1 VALUES (9); + +--let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1) +--echo Processing binlog $binlog_file +--let $source_file= $server_1_datadir/$binlog_file +--let $logical_timestamps=0 1;1 2;2 3 +--source include/assert_logical_timestamps.inc + +--echo # Clean up SAVEPOINT tests +DROP TABLE t1; +DROP TABLE nopk; +DROP TABLE child; +DROP TABLE parent; + +# +# Cleanup +# +--echo +--echo #### CLEANUP #### + +--source include/sync_slave_sql_with_master.inc +--source include/stop_slave.inc + +SET @@GLOBAL.slave_parallel_type= @save_slave_parallel_type; +SET @@GLOBAL.slave_parallel_workers= @save_slave_parallel_workers; +SET @@GLOBAL.slave_transaction_retries= @save_slave_transaction_retries; + +--source include/start_slave.inc + +--connection master +SET GLOBAL binlog_transaction_dependency_tracking = COMMIT_ORDER; +SET @@GLOBAL.transaction_write_set_extraction= @save_transaction_write_set_extraction; +SET @@GLOBAL.binlog_transaction_dependency_tracking= @save_binlog_transaction_dependency_tracking; +SET @@GLOBAL.binlog_transaction_dependency_history_size= @save_binlog_transaction_dependency_history_size; + +--source include/rpl_end.inc + diff --git a/mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_tracking_with_empty_trxs.test b/mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_tracking_with_empty_trxs.test new file mode 100644 index 000000000000..0d9321656b6d --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_tracking_with_empty_trxs.test @@ -0,0 +1,71 @@ +# ==== Purpose ==== +# +# Verify that we can avoid clearing writeset history when executing an empty +# transaction if binlog-transaction-dependency-tracking is set to WRITESET. +# +# ==== Implementation ==== +# +# 1. Exectute some DDLs and DMls on master. +# 2. Sync slave sql with master and filter out these DDLs and DMls on slave, +# then they become empty transactions when applying them on slave. +# 3. Verify that last_committed is not increased, since writeset history +# is not cleared when applying these empty transactions on slave. +# +# ==== References ==== +# +# Bug #25982097 WRITESET DEPENDENCY TRACKING SUB-OPTIMAL AFTER ROTATION OR ON EMPTY TRANSACTIONS + +# Test in this file only makes sense in standard replication, +# so it is skipped in group replication. +--source include/not_group_replication_plugin.inc +# Test in this file is binlog format agnostic, thus no need +# to rerun it for every format. +--source include/have_binlog_format_row.inc +--source include/have_gtid.inc +--let $rpl_skip_start_slave= 1 +--source include/master-slave.inc + +--source include/rpl_connection_slave.inc +# The following logical timestamps check needs fresh slave server. +RESET MASTER; +# Set the filter rule to filter out these DDLs and DMls on slave. +CHANGE REPLICATION FILTER REPLICATE_IGNORE_TABLE= (test.t1); +SET @save_binlog_transaction_dependency_tracking= @@GLOBAL.binlog_transaction_dependency_tracking; +SET @save_transaction_write_set_extraction= @@GLOBAL.transaction_write_set_extraction; +SET GLOBAL binlog_transaction_dependency_tracking= COMMIT_ORDER; +SET GLOBAL transaction_write_set_extraction= XXHASH64; +SET LOCAL transaction_write_set_extraction= XXHASH64; +SET GLOBAL binlog_transaction_dependency_tracking= WRITESET; +--source include/start_slave.inc + +--source include/rpl_connection_master.inc +CREATE TABLE t1 (c1 INT); +INSERT INTO t1 VALUES (1); +INSERT INTO t1 VALUES (2); +INSERT INTO t1 VALUES (3); + +--source include/sync_slave_sql_with_master.inc +--echo # +--echo # Verify that the value of last_committed is not increased, +--echo # since writeset history is not cleared when applying +--echo # these empty transactions on slave. +--echo # +--let $logical_timestamps=0 1;0 2;0 3;0 4 +--let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1) +--echo Processing binlog $binlog_file +--let $source_file= $server_2_datadir/$binlog_file +--source include/assert_logical_timestamps.inc + +# Cleanup +--source include/rpl_connection_master.inc +DROP TABLE t1; + +--source include/sync_slave_sql_with_master.inc +--source include/stop_slave_sql.inc +SET GLOBAL binlog_transaction_dependency_tracking= COMMIT_ORDER; +SET @@GLOBAL.transaction_write_set_extraction= @save_transaction_write_set_extraction; +SET @@GLOBAL.binlog_transaction_dependency_tracking= @save_binlog_transaction_dependency_tracking; +CHANGE REPLICATION FILTER REPLICATE_IGNORE_TABLE= (); +--source include/start_slave_sql.inc + +--source include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_tracking_with_filters.test b/mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_tracking_with_filters.test new file mode 100644 index 000000000000..099dbd96e396 --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_tracking_with_filters.test @@ -0,0 +1,183 @@ +################################################################################ +# ==== Purpose ==== +# Test that filtered transaction resets commit_parent since it doesn't generate +# any writesets. +# Modes checked: +# COMMIT_ORDER | WRITESET | WRITESET_SESSION +# +# ==== Implementation ==== +# 1. Add transactions with different dependency tracking and empty transactions +# on master. +# 2. Test timestamps order with filtered and non-filtered transactions on Slave. +# a) No filtering: DDL and DMLs on 'test' database are not filtered. +# b) Empty transactions from master. +# c) Filtering (modified transactions): DDLs and DMLs due to rerwite rule +# 'db1->db2'. +# d) Filtering (empty transactions): DDLs and DMLs on 'nodb' database. +# 3. Clean up. +# +# ==== References ==== +# WL#9556: Writeset-based MTS dependency tracking on master +################################################################################ + +--source include/master-slave.inc +--source include/have_binlog_format_row.inc +--source include/not_mts_slave_parallel_workers.inc + +--source include/rpl_connection_master.inc +# Take backup of variables. +SET @save_binlog_transaction_dependency_tracking = @@GLOBAL.binlog_transaction_dependency_tracking; +SET @save_transaction_write_set_extraction = @@GLOBAL.transaction_write_set_extraction; +# Set variables. +SET GLOBAL binlog_transaction_dependency_tracking = COMMIT_ORDER; +SET GLOBAL transaction_write_set_extraction = XXHASH64; +SET LOCAL transaction_write_set_extraction = XXHASH64; + +--source include/rpl_connection_slave.inc +# Set filter rule. +--source include/stop_slave.inc +CHANGE REPLICATION FILTER REPLICATE_REWRITE_DB=((db1,db2)), + REPLICATE_IGNORE_DB=(nodb); +--source include/start_slave.inc +# Take backup of variables. +SET @save_binlog_transaction_dependency_tracking = @@GLOBAL.binlog_transaction_dependency_tracking; +SET @save_transaction_write_set_extraction = @@GLOBAL.transaction_write_set_extraction; +# Set variables. +SET GLOBAL binlog_transaction_dependency_tracking = COMMIT_ORDER; +SET GLOBAL transaction_write_set_extraction = XXHASH64; +SET LOCAL transaction_write_set_extraction = XXHASH64; + +--source include/rpl_connection_master.inc +--echo # +--echo # 1. Add transactions with different dependency tracking and empty transaction +--echo # on master. +--echo # +CREATE DATABASE nodb; # 0 1 +CREATE DATABASE db1; # 1 2 +CREATE DATABASE db2; # 2 3 +USE nodb; CREATE TABLE nodbt1 (a INT PRIMARY KEY NOT NULL AUTO_INCREMENT); # 3 4 +USE db1; CREATE TABLE db1t1 (a INT PRIMARY KEY NOT NULL AUTO_INCREMENT); # 4 5 +USE test; CREATE TABLE t1 (a INT PRIMARY KEY NOT NULL AUTO_INCREMENT); # 5 6 + +USE db1; +INSERT INTO db1t1 VALUES (NULL); # 6 7 +INSERT INTO db1t1 VALUES (NULL); # 7 8 +SET GLOBAL binlog_transaction_dependency_tracking= WRITESET_SESSION; +INSERT INTO db1t1 VALUES (NULL); # 8 9 +INSERT INTO db1t1 VALUES (NULL); # 9 10 +USE nodb; +INSERT INTO nodbt1 VALUES (NULL); # 10 11 +INSERT INTO nodbt1 VALUES (NULL); # 11 12 +SET GLOBAL binlog_transaction_dependency_tracking= WRITESET; +INSERT INTO nodbt1 VALUES (NULL); # 12 13 +INSERT INTO nodbt1 VALUES (NULL); # 12 14 +USE test; +INSERT INTO t1 VALUES (NULL); # 12 15 +INSERT INTO t1 VALUES (NULL); # 12 16 +SET GLOBAL binlog_transaction_dependency_tracking= COMMIT_ORDER; +INSERT INTO t1 VALUES (NULL); # 16 17 +INSERT INTO t1 VALUES (NULL); # 17 18 + +DROP DATABASE nodb; # 18 19 +DROP DATABASE db1; # 19 20 +DROP DATABASE db2; # 20 21 +DROP TABLE test.t1; # 21 22 + +if ( `SELECT @@GLOBAL.GTID_MODE = "ON"` ) +{ + --disable_query_log + SET @@SESSION.GTID_NEXT = 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1'; + COMMIT; # 22 23 + --let $server1_uuid= `SELECT @@GLOBAL.SERVER_UUID` + eval SET @@SESSION.GTID_NEXT = '$server1_uuid:23'; + COMMIT; # 23 24 + SET @@SESSION.GTID_NEXT = 'AUTOMATIC'; + --enable_query_log +} + +SELECT @@global.transaction_write_set_extraction, @@binlog_transaction_dependency_tracking; +--let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1) +--let $dont_print_logical_timestamps= 1 +--let $logical_timestamps=0 1;1 2;2 3;3 4;4 5;5 6;6 7;7 8;8 9;9 10;10 11;11 12;12 13;12 14;12 15;12 16;16 17;17 18;18 19;19 20;20 21;21 22 +if ( `SELECT @@GLOBAL.GTID_MODE = "ON"` ) +{ + --let $logical_timestamps=0 1;1 2;2 3;3 4;4 5;5 6;6 7;7 8;8 9;9 10;10 11;11 12;12 13;12 14;12 15;12 16;16 17;17 18;18 19;19 20;20 21;21 22;22 23;23 24 +} +--source include/assert_logical_timestamps.inc + +--echo # +--echo # 2. Test timestamps order with filtered and non-filtered transactions on Slave. +--echo # +--source include/sync_slave_sql_with_master.inc +--echo [On Slave] +--echo ######## 2.1. COMMIT_ORDER with SLAVE ######## +SELECT @@global.transaction_write_set_extraction, @@binlog_transaction_dependency_tracking; +--let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1) +--let $dont_print_logical_timestamps= 1 +--let $logical_timestamps=0 1;1 2;2 3;3 4;4 5;5 6;6 7;7 8;8 9;9 10;10 11;11 12;12 13;13 14;14 15 +if ( `SELECT @@GLOBAL.GTID_MODE = "ON"` ) +{ + --let $logical_timestamps=0 1;1 2;2 3;3 4;4 5;5 6;6 7;7 8;8 9;9 10;10 11;11 12;12 13;13 14;14 15;15 16;16 17;17 18;18 19;19 20;20 21;21 22;22 23;23 24 +} +--source include/assert_logical_timestamps.inc + +# Clean up logs to test with WRITESET in next step. +--source include/stop_slave.inc +RESET SLAVE; +RESET MASTER; + +--echo +--echo ######## 2.2. WRITESET with SLAVE ######## +SET GLOBAL binlog_transaction_dependency_tracking = WRITESET; +--source include/start_slave.inc +--connection master +--source include/sync_slave_sql_with_master.inc +SELECT @@global.transaction_write_set_extraction, @@binlog_transaction_dependency_tracking; +--let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1) +--let $dont_print_logical_timestamps= 1 +--let $logical_timestamps=0 1;1 2;2 3;3 4;4 5;4 6;4 7;4 8;4 9;4 10;4 11;4 12;12 13;13 14;14 15 +if ( `SELECT @@GLOBAL.GTID_MODE = "ON"` ) +{ + --let $logical_timestamps=0 1;1 2;2 3;3 4;4 5;5 6;6 7;6 8;6 9;6 10;6 11;6 12;6 13;6 14;6 15;6 16;6 17;6 18;6 19;19 20;20 21;21 22;22 23;22 24 +} +--source include/assert_logical_timestamps.inc + +# Clean up logs to test with WRITESET_SESSION in next step. +--source include/stop_slave.inc +RESET SLAVE; +RESET MASTER; + +--echo +--echo ######## 2.3. WRITESET_SESSION with SLAVE ######## +SET GLOBAL binlog_transaction_dependency_tracking = WRITESET_SESSION; +--source include/start_slave.inc +--connection master +--source include/sync_slave_sql_with_master.inc +SELECT @@global.transaction_write_set_extraction, @@binlog_transaction_dependency_tracking; +--let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1) +--let $dont_print_logical_timestamps= 1 +--let $logical_timestamps=0 1;1 2;2 3;3 4;4 5;5 6;6 7;7 8;8 9;9 10;10 11;11 12;12 13;13 14;14 15 +if ( `SELECT @@GLOBAL.GTID_MODE = "ON"` ) +{ + --let $logical_timestamps=0 1;1 2;2 3;3 4;4 5;5 6;6 7;7 8;8 9;9 10;10 11;11 12;12 13;13 14;14 15;15 16;16 17;17 18;18 19;19 20;20 21;21 22;22 23;23 24 +} +--source include/assert_logical_timestamps.inc + +--echo +--echo # 3. Clean up. +--source include/rpl_connection_master.inc +SET @@GLOBAL.transaction_write_set_extraction= @save_transaction_write_set_extraction; +SET @@GLOBAL.binlog_transaction_dependency_tracking= @save_binlog_transaction_dependency_tracking; + +--source include/sync_slave_sql_with_master.inc +--echo [On Slave] +--let $dont_print_logical_timestamps= +SET GLOBAL binlog_transaction_dependency_tracking = COMMIT_ORDER; +SET @@GLOBAL.binlog_transaction_dependency_tracking= @save_binlog_transaction_dependency_tracking; +SET @@GLOBAL.transaction_write_set_extraction= @save_transaction_write_set_extraction; + +--source include/stop_slave.inc +CHANGE REPLICATION FILTER REPLICATE_REWRITE_DB=(), REPLICATE_IGNORE_DB=(); +--source include/start_slave.inc + +--source include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_tracking_with_fk-master.opt b/mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_tracking_with_fk-master.opt new file mode 100644 index 000000000000..12099c2d182a --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_tracking_with_fk-master.opt @@ -0,0 +1,2 @@ +--binlog_transaction_dependency_tracking=COMMIT_ORDER +--transaction_write_set_extraction=XXHASH64 diff --git a/mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_tracking_with_fk.test b/mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_tracking_with_fk.test new file mode 100644 index 000000000000..70c552ae3596 --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_tracking_with_fk.test @@ -0,0 +1,212 @@ +################################################################################ +# ==== Purpose ==== +# Test referential actions of the foreign keys with different +# binlog_transaction_dependency_tracking modes. +# Referential actions: +# RESTRICT | NO ACTION | CASCADE | SET NULL | SET DEFAULT +# Note* Table definition containing SET DEFAULT gets rejected thus not tested. +# Modes: +# COMMIT_ORDER | WRITESET | WRITESET_SESSION +# Note* COMMIT_ORDER is purposefully not tested with this test. +# +# ==== Implementation ==== +# 1. FK parent table: +# 1.1. Marked as conflicting with previous transactions. +# 1.2. Clears history. +# 1.3. Marked as conflicting with later transactions. +# 1.4. Falls back to COMMIT_ORDER, so *not* marked as conflicting with previous transactions +# committing in parallel. +# 1.5. Later transactions fall back to COMMIT_ORDER, so they are *not* marked as conflicting with +# this transaction if executing in parallel with it. +# +# 2. FK child table: +# 2.1. Can run in parallel with previous transactions. +# 2.2. Does not clear history. +# 2.3. Can run in parallel with subsequent transactions. +# +# 3. All the above is tested with INSERT, UPDATE, and DELETEs. +# +# 4. All the above is tested with RESTRICT, NO ACTION, CASCADE, SET NULL. +# +# 5. All the above is tested with ON UPDATE and ON DELETE. +# +# 6. All the above is tested with WRITESET_SESSION and WRITESET. +# +# ==== References ==== +# WL#9556: Writeset-based MTS dependency tracking on master +################################################################################ +--let $rpl_extra_connections_per_server= 8 +--source include/master-slave.inc +--source include/have_binlog_format_row.inc + +--connection master +SET @save_binlog_transaction_dependency_tracking = @@GLOBAL.binlog_transaction_dependency_tracking; +SET @save_transaction_write_set_extraction = @@GLOBAL.transaction_write_set_extraction; + +--let $row_count= 1 +--let $referential_action= 0 +# RESTRICT, NO ACTION, CASCADE, SET NULL +while ($referential_action < 4) +{ + # WRITESET, WRITESET_SESSION + --let $dependency_tracking= 0 + while ($dependency_tracking < 2) + { + --connection master + if ($referential_action == 0) + { + --let $ref_action= RESTRICT + --let $error_success= ER_ROW_IS_REFERENCED_2 + } + if ($referential_action == 1) + { + --let $ref_action= NO ACTION + --let $error_success= ER_ROW_IS_REFERENCED_2 + } + if ($referential_action == 2) + { + --let $ref_action= CASCADE + --let $error_success= 0 + } + if ($referential_action == 3) + { + --let $ref_action= SET NULL + --let $error_success= 0 + } + + --echo + if ($dependency_tracking == 0) + { + SET GLOBAL binlog_transaction_dependency_tracking = WRITESET; + --let $text= $row_count. Test referential action $ref_action with WRITESET. + } + if ($dependency_tracking == 1) + { + SET GLOBAL binlog_transaction_dependency_tracking = WRITESET_SESSION; + --let $text= $row_count. Test referential action $ref_action with WRITESET_SESSION. + } + + # Header according to all the parameters. + --echo ######## $text ######## + SELECT @@local.transaction_write_set_extraction, + @@global.transaction_write_set_extraction, + @@binlog_transaction_dependency_tracking; + + # In all these 8 cases, behavior should be identical. + CREATE TABLE parent1 (a INT NOT NULL PRIMARY KEY, b VARCHAR(50)); + CREATE TABLE parent2 (a INT NOT NULL PRIMARY KEY, b VARCHAR(50)); + CREATE TABLE t1 (a INT PRIMARY KEY); + --eval CREATE TABLE child1 (a INT PRIMARY KEY, b INT, FOREIGN KEY(b) REFERENCES parent1 (a) ON UPDATE $ref_action) + --eval CREATE TABLE child2 (a INT PRIMARY KEY, b INT, FOREIGN KEY(b) REFERENCES parent2 (a) ON DELETE $ref_action) + INSERT INTO parent1 VALUES (1, 1), (2, 2); + INSERT INTO parent2 VALUES (1, 1), (2, 2); + FLUSH LOGS; + + --echo # Case 2.1, 2.2, 2.3 + # [0 1] + --connection server_1_1 + INSERT INTO child1 VALUES (1, 1); + + # [1 2] + --connection server_1_2 + INSERT INTO child2 VALUES (1, 1); + + # [1 3] + --connection server_1_1 + UPDATE child1 SET a = 2; + + # [2 4] + --connection server_1_2 + UPDATE child2 SET a = 2; + + # [3 5] + --connection server_1_1 + DELETE FROM child1; + + # [4 6] + --connection server_1_2 + DELETE FROM child2; + + --echo # Case 1.1, 1.2, 1.3 + # [1 7] + --connection server_1_3 + INSERT INTO t1 VALUES (1); + + # [7 8] + --connection server_1_4 + INSERT INTO parent1 VALUES (3, 3); + + # [8 9] + --connection server_1_5 + INSERT INTO t1 VALUES (2); + + --echo # Case 1.4, 1.5 + # [8 10] + --connection server_1_6 + BEGIN; + INSERT INTO t1 VALUES (3); + INSERT INTO child1 VALUES (1, 1); + # [9 11] + --connection server_1_7 + BEGIN; + INSERT INTO parent1 VALUEs (4, 4); + INSERT INTO child2 VALUES (1, 1); + # [9 12] + --connection server_1_8 + BEGIN; + INSERT INTO t1 VALUES (4); + # Commit the above. + --connection server_1_6 + COMMIT; + --connection server_1_7 + COMMIT; + --connection server_1_8 + COMMIT; + + # [11 13] Verify again that history is cleared + --connection server_1_1 + INSERT INTO t1 VALUES (5); + + # [13 14] With CASCADE and SET NULL + --connection server_1_2 + --error $error_success + UPDATE parent1 SET a=5 WHERE a=1; + + # [14 15] With CASCADE and SET NULL + --connection server_1_3 + --error $error_success + DELETE FROM parent2 WHERE a=1; + + --echo # Drop table and flush logs to force binlog to rotate + --connection master + DROP TABLE child2, parent2, child1, parent1, t1; + + --let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1) + FLUSH LOGS; + + --echo # Processing binlog... + # For RESTRICT and NO ACTION + --let $logical_timestamps=0 1;1 2;1 3;2 4;3 5;4 6;1 7;7 8;8 9;8 10;9 11;9 12;11 13;13 14 + if ($referential_action >= 2) + { + # For CASCADE and SET NULL + --let $logical_timestamps=0 1;1 2;1 3;2 4;3 5;4 6;1 7;7 8;8 9;8 10;9 11;9 12;11 13;13 14;14 15;15 16 + } + --source include/assert_logical_timestamps.inc + + --echo # Verify that replication is correct + --source include/sync_slave_sql_with_master.inc + + --inc $dependency_tracking + --inc $row_count + } + --inc $referential_action +} + +--echo +--echo # Clean up +--connection master +SET @@GLOBAL.binlog_transaction_dependency_tracking= @save_binlog_transaction_dependency_tracking; +SET @@GLOBAL.transaction_write_set_extraction= @save_transaction_write_set_extraction; + +--source include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_tracking_with_indexes.test b/mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_tracking_with_indexes.test new file mode 100644 index 000000000000..ed556e96d365 --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_binlog_transaction_dependency_tracking_with_indexes.test @@ -0,0 +1,319 @@ +# ==== Purpose ==== +# +# Verify that logical timestamps are generated correctly for all types +# of indexes when binlog_transaction_dependency_tracking=WRITESET. +# +# The following properties are tested: +# +# P1. Any transaction that updates a table having no primary key, must +# (a) depend on the previous transaction, but (b) must not clear +# history. +# +# P1.1. This must hold if the transaction has no writeset. +# (e.g. it updates only the no-pk table; a no-pk table will +# not add to the writeset). +# +# P1.2. This must hold if the transaction has a writeset. +# (e.g. it updates some other table too). +# +# P2. Any transaction that only updates tables having primary keys +# must compute its dependencies using the writeset. (In contrast +# with P1). +# +# P3. A UNIQUE index with NOT NULL constraints on all columns counts +# as a primary key too. +# +# P4. If there is both a primary key and other keys, then uniqueness +# constraints due to the other keys generate dependencies too. +# +# P5. If there is both a primary key and nullable columns, then NULL +# values in the same column do not conflict. +# +# ==== Implementation ==== +# +# Repeatedly define a table t1 with three columns a, b, c, using all +# combinations of the following parameters: +# +# A. Without/with explicit primary key on a. +# +# B. Without/with NOT NULL constraints on b and c. +# +# C. Without/with uniqueness constraints on b and/or c. +# +# D. Without index on b and c/with index on b/with index on c. +# (Skip the no-index case if uniqueness constraints are required). +# +# This gives 20 combinations. For each such combination, execute the +# following: +# +# INSERT (1, 1, 1) +# INSERT (2, 2, 2) +# -> should be independent +# DELETE (2, 2, 2) +# -> should depend on insert (2, 2, 2) +# UPDATE (1, 1, 1) to (1, 2, 2) +# -> if there are uniqueness constraints on b and/or c, this should +# depend on delete (2, 2, 2) (and that verifies P4). Otherwise, depend +# on insert (1, 1, 1). When there is a pk, this verifies P1.1, otherwise +# it verifies P2. +# if columns b and c are nullable: +# INSERT (3, NULL, 2) +# -> should be independent +# INSERT (4, NULL, 2) +# -> should be independent since multiple NULL values are allowed. +# This verifies P5. +# DELETE (3, NULL, 2) +# -> should depend on insert (3, NULL, 2) but not on insert (4, NULL, 2) +# This verifies P5. +# +# To verify P1(b), execute extra, independent transactions updating +# another table t2 after some of the statements above (e.g. after +# delete (2, 2, 2)). Verify that the extra transaction is marked as +# independent of all the previous ones. +# +# To verify P1.2, include a statement doing an independent insert into +# t2 within the same transaction that inserts (2, 2, 2) in t1. +# +# To distinguish the cases that DELETE (2, 2, 2) depends on INSERT (2, +# 2, 2) (when there is a pk) from the case that it is executed in +# isolation due to not having a pk, we precede it by an independent +# transaction updating another table, t2. Similar for UPDATE (1, 1, +# 1) to (2, 2, 2), for INSERT (4, NULL, 2), and for DELETE (3, NULL, +# 2). +# +# P3 is verified in the loop iterations where we use both NOT NULL and +# UNIQUE. +# +# ==== References ==== +# +# WL#9556: Writeset-based MTS dependency tracking on master + +--source include/have_binlog_format_row.inc +--source include/master-slave.inc + +--echo #### INITIALIZE #### + +--source include/rpl_connection_slave.inc +--source include/stop_slave.inc +SET @save_slave_parallel_workers= @@GLOBAL.slave_parallel_workers; +SET @@GLOBAL.slave_parallel_workers= 4; +--source include/start_slave.inc + +--source include/rpl_connection_master.inc +SET @save_binlog_transaction_dependency_tracking = @@GLOBAL.binlog_transaction_dependency_tracking; +SET @save_transaction_write_set_extraction = @@GLOBAL.transaction_write_set_extraction; + +SET GLOBAL binlog_transaction_dependency_tracking = COMMIT_ORDER; +SET GLOBAL transaction_write_set_extraction = XXHASH64; +SET SESSION transaction_write_set_extraction = XXHASH64; +SET GLOBAL binlog_transaction_dependency_tracking = WRITESET; + +# Tell assert_logical_timestamps to save the current position so that +# the next call will continue where the current ended. +--let $save_binlog_position= 1 + +# First without any explicit PRIMARY KEY, then with one on column a. +--let $explicit_pk= 0 +while ($explicit_pk < 2) +{ + + # First with columns b and c NULL-able, then with NOT NULL on both. + --let $nonnull= 0 + while ($nonnull < 2) + { + + # First without uniqueness constraints on second index, then with. + --let $unique= 0 + while ($unique < 2) + { + + # First without index (unless $unique==1), then with 1-column + # index, then with 2-column index. + --let $colcount= $unique + while ($colcount < 3) + { + + # Determine if there is a primary key. Unique non-null indexes + # count as primary if there is no explicit primary key. + --let $pk= 0 + if ($explicit_pk) + { + --let $pk= 1 + } + if ($unique) + { + if ($nonnull) + { + --let $pk= 1 + } + } + + # Compute table definition and header according to all the parameters. + --let $text= $explicit_pk.$nonnull.$unique.$colcount + if ($explicit_pk == 0) + { + --let $text= $text: WITHOUT PK + --let $first_column_def= a INT + } + if ($explicit_pk == 1) + { + --let $text= $text: WITH PK + --let $first_column_def= a INT PRIMARY KEY + } + if ($nonnull == 0) + { + --let $text= $text, NULLABLE + --let $not_null_def= + } + if ($nonnull == 1) + { + --let $text= $text, NOT NULL + --let $not_null_def= NOT NULL + } + if ($unique == 0) + { + --let $text= $text, NOT UNIQUE + --let $unique_def= + } + if ($unique == 1) + { + --let $text= $text, UNIQUE + --let $unique_def= UNIQUE + } + if ($colcount == 0) + { + --let $text= $text, NO INDEX + --let $second_index_def= + } + if ($colcount == 1) + { + --let $text= $text, 1-COLUMN INDEX + --let $second_index_def= , $unique_def INDEX(b) + } + if ($colcount == 2) + { + --let $text= $text, 2-COLUMN INDEX + --let $second_index_def= , $unique_def INDEX(b, c) + } + + --echo + --echo #### $text #### + --echo + + eval CREATE TABLE t1 ($first_column_def, b INT $not_null_def, c INT $not_null_def $second_index_def); + CREATE TABLE t2 (a INT PRIMARY KEY); + + FLUSH LOGS; + --source include/save_binlog_position.inc + + --echo # TRX1: independent + INSERT INTO t1 VALUES (1, 1, 1); + + --echo # now t1 contains one row: (1, 1, 1) + --let $logical_timestamps= 0 1 + --source include/assert_logical_timestamps.inc + + --echo # TRX2: independent + BEGIN; + INSERT INTO t1 VALUES (2, 2, 2); + INSERT INTO t2 VALUES (1); + COMMIT; + + --echo # now t1 contains two rows: (1, 1, 1), (2, 2, 2) + if ($pk) { --let $logical_timestamps= 1 2 + } + if (!$pk) { --let $logical_timestamps= 1 2 + } + --source include/assert_logical_timestamps.inc + + --echo # TRX3: independent + INSERT INTO t2 VALUES (3); + --echo # TRX4: depends on TRX2 + DELETE FROM t1 WHERE a = 2; + + --echo # now t1 contains one row: (1, 1, 1) + if ($pk) { --let $logical_timestamps= 1 3;2 4 + } + if (!$pk) { --let $logical_timestamps= 1 3;3 4 + } + --source include/assert_logical_timestamps.inc + + --echo # TRX5: independent + INSERT INTO t2 VALUES (5); + --echo # TRX6: conflict with TRX4 if unique, else with TRX1 + UPDATE t1 SET b = 2, c = 2 WHERE a = 1; + + --echo # now t1 contains one row: (1, 2, 2) + if ($pk) { + if ($unique) { --let $logical_timestamps= 1 5;4 6 + } + if (!$unique) { --let $logical_timestamps= 1 5;1 6 + } + } + if (!$pk) { --let $logical_timestamps= 1 5;5 6 + } + --source include/assert_logical_timestamps.inc + + if (!$nonnull) + { + + --echo # TRX7: independent + INSERT INTO t1 VALUES (3, NULL, 2); + + --echo # now t1 contains two rows: (1, 2, 2), (3, NULL, 2) + if ($pk) { --let $logical_timestamps= 1 7 + } + if (!$pk) { --let $logical_timestamps= 6 7 + } + --source include/assert_logical_timestamps.inc + + --echo # TRX8: independent + INSERT INTO t2 VALUES (8); + --echo # TRX9: independent (no conflict with TRX7 since multiple NULLs are allowed) + INSERT INTO t1 VALUES (4, NULL, 2); + + --echo # now t1 contains three rows: (1, 2, 2), (3, NULL, 2), (4, NULL, 2) + if ($pk) { --let $logical_timestamps= 1 8;1 9 + } + if (!$pk) { --let $logical_timestamps= 1 8;8 9 + } + --source include/assert_logical_timestamps.inc + + --echo # TRX10: independent + INSERT INTO t2 VALUES (10); + --echo # TRX11: conflict with TRX7 (not with TRX9 since multiple NULLs are allowed) + DELETE FROM t1 WHERE a = 3; + + --echo # now t1 contains two rows: (1, 2, 2), (4, NULL, 2) + if ($pk) { --let $logical_timestamps= 1 10;7 11 + } + if (!$pk) { --let $logical_timestamps= 1 10;10 11 + } + --source include/assert_logical_timestamps.inc + + } + + DROP TABLE t1; + DROP TABLE t2; + + --inc $colcount + } + --inc $unique + } + --inc $nonnull + } + --inc $explicit_pk +} + +--echo #### CLEAN UP #### + +SET @@GLOBAL.binlog_transaction_dependency_tracking= @save_binlog_transaction_dependency_tracking; +if (`SELECT @@GLOBAL.transaction_write_set_extraction != @save_transaction_write_set_extraction`) +{ + SET @@GLOBAL.transaction_write_set_extraction= @save_transaction_write_set_extraction; +} + +--source include/sync_slave_sql_with_master.inc +SET @@GLOBAL.slave_parallel_workers= @save_slave_parallel_workers; + +--source include/rpl_end.inc diff --git a/mysql-test/suite/sys_vars/r/binlog_transaction_dependency_h_size_basic.result b/mysql-test/suite/sys_vars/r/binlog_transaction_dependency_h_size_basic.result new file mode 100644 index 000000000000..6c7e620c74d3 --- /dev/null +++ b/mysql-test/suite/sys_vars/r/binlog_transaction_dependency_h_size_basic.result @@ -0,0 +1,43 @@ +SET @save_binlog_transaction_dependency_history_size= @@global.binlog_transaction_dependency_history_size; +SELECT COUNT(@@GLOBAL.binlog_transaction_dependency_history_size); +COUNT(@@GLOBAL.binlog_transaction_dependency_history_size) +1 +SELECT COUNT(@@SESSION.binlog_transaction_dependency_history_size); +ERROR HY000: Variable 'binlog_transaction_dependency_history_size' is a GLOBAL variable +SELECT VARIABLE_NAME FROM performance_schema.global_variables WHERE VARIABLE_NAME='binlog_transaction_dependency_history_size'; +VARIABLE_NAME +binlog_transaction_dependency_history_size +SELECT VARIABLE_NAME FROM performance_schema.session_variables WHERE variable_name='binlog_transaction_dependency_history_size'; +VARIABLE_NAME +binlog_transaction_dependency_history_size +SET @@GLOBAL.binlog_transaction_dependency_history_size= 1; +include/assert.inc ['binlog_transaction_dependency_history_size is a dynamic variable'] +SET @@GLOBAL.binlog_transaction_dependency_history_size= default; +include/assert.inc ['Default value is 25000'] +SET @@GLOBAL.binlog_transaction_dependency_history_size= ON; +ERROR 42000: Incorrect argument type to variable 'binlog_transaction_dependency_history_size' +SET @@GLOBAL.binlog_transaction_dependency_history_size= OFF; +ERROR 42000: Incorrect argument type to variable 'binlog_transaction_dependency_history_size' +SET @@GLOBAL.binlog_transaction_dependency_history_size= "foo"; +ERROR 42000: Incorrect argument type to variable 'binlog_transaction_dependency_history_size' +SET @@GLOBAL.binlog_transaction_dependency_history_size= NULL; +ERROR 42000: Incorrect argument type to variable 'binlog_transaction_dependency_history_size' +SET @@GLOBAL.binlog_transaction_dependency_history_size= 1.0; +ERROR 42000: Incorrect argument type to variable 'binlog_transaction_dependency_history_size' +Expect value still set to 25000 +SELECT @@GLOBAL.binlog_transaction_dependency_history_size; +@@GLOBAL.binlog_transaction_dependency_history_size +25000 +SET @@GLOBAL.binlog_transaction_dependency_history_size= 0; +Warnings: +Warning 1292 Truncated incorrect binlog_transaction_dependency_hi value: '0' +SET @@GLOBAL.binlog_transaction_dependency_history_size= -1; +Warnings: +Warning 1292 Truncated incorrect binlog_transaction_dependency_hi value: '-1' +SET @@GLOBAL.binlog_transaction_dependency_history_size= 2000000; +Warnings: +Warning 1292 Truncated incorrect binlog_transaction_dependency_hi value: '2000000' +SET @@GLOBAL.binlog_transaction_dependency_history_size= 1; +SET @@GLOBAL.binlog_transaction_dependency_history_size= 20000; +SET @@GLOBAL.binlog_transaction_dependency_history_size= 1000000; +SET @@GLOBAL.binlog_transaction_dependency_history_size= @save_binlog_transaction_dependency_history_size; diff --git a/mysql-test/suite/sys_vars/r/binlog_transaction_dependency_tracking_basic.result b/mysql-test/suite/sys_vars/r/binlog_transaction_dependency_tracking_basic.result new file mode 100644 index 000000000000..0eb296f92285 --- /dev/null +++ b/mysql-test/suite/sys_vars/r/binlog_transaction_dependency_tracking_basic.result @@ -0,0 +1,82 @@ +SET GLOBAL binlog_transaction_dependency_tracking= 'COMMIT_ORDER'; +SET GLOBAL transaction_write_set_extraction= 'XXHASH64'; +SELECT COUNT(@@GLOBAL.binlog_transaction_dependency_tracking); +COUNT(@@GLOBAL.binlog_transaction_dependency_tracking) +1 +SELECT COUNT(@@SESSION.binlog_transaction_dependency_tracking); +ERROR HY000: Variable 'binlog_transaction_dependency_tracking' is a GLOBAL variable +SELECT VARIABLE_NAME FROM performance_schema.global_variables WHERE VARIABLE_NAME='binlog_transaction_dependency_tracking'; +VARIABLE_NAME +binlog_transaction_dependency_tracking +SELECT VARIABLE_NAME FROM performance_schema.session_variables WHERE variable_name='binlog_transaction_dependency_tracking'; +VARIABLE_NAME +binlog_transaction_dependency_tracking +SET GLOBAL binlog_transaction_dependency_tracking= 'COMMIT_ORDER'; +include/assert.inc ['binlog_transaction_dependency_tracking is a dynamic variable'] +SET GLOBAL binlog_transaction_dependency_tracking= 'COMMIT_ORDER'; +include/assert.inc ['binlog_transaction_dependency_tracking should be COMMIT_ORDER'] +SET GLOBAL binlog_transaction_dependency_tracking= 0; +include/assert.inc ['binlog_transaction_dependency_tracking should be COMMIT_ORDER'] +SET GLOBAL binlog_transaction_dependency_tracking= 'WRITESET'; +include/assert.inc ['binlog_transaction_dependency_tracking should be WRITESET'] +SET GLOBAL binlog_transaction_dependency_tracking= 1; +include/assert.inc ['binlog_transaction_dependency_tracking should be WRITESET'] +SET GLOBAL binlog_transaction_dependency_tracking= 'WRITESET_SESSION'; +include/assert.inc ['binlog_transaction_dependency_tracking should be WRITESET_SESSION'] +SET GLOBAL binlog_transaction_dependency_tracking= 2; +include/assert.inc ['binlog_transaction_dependency_tracking should be WRITESET_SESSION'] +SET GLOBAL binlog_transaction_dependency_tracking= DEFAULT; +include/assert.inc ['binlog_transaction_dependency_tracking should be COMMIT_ORDER'] +SET GLOBAL binlog_transaction_dependency_tracking= NULL; +ERROR 42000: Variable 'binlog_transaction_dependency_tracking' can't be set to the value of 'NULL' +SET GLOBAL binlog_transaction_dependency_tracking= ''; +ERROR 42000: Variable 'binlog_transaction_dependency_tracking' can't be set to the value of '' +SET GLOBAL binlog_transaction_dependency_tracking= 1.0; +ERROR 42000: Incorrect argument type to variable 'binlog_transaction_dependency_tracking' +SET GLOBAL binlog_transaction_dependency_tracking= 'GARBAGE'; +ERROR 42000: Variable 'binlog_transaction_dependency_tracking' can't be set to the value of 'GARBAGE' +SET GLOBAL binlog_transaction_dependency_tracking= ON; +ERROR 42000: Variable 'binlog_transaction_dependency_tracking' can't be set to the value of 'ON' +SET GLOBAL binlog_transaction_dependency_tracking= OFF; +ERROR 42000: Variable 'binlog_transaction_dependency_tracking' can't be set to the value of 'OFF' +SET GLOBAL binlog_transaction_dependency_tracking= 3; +ERROR 42000: Variable 'binlog_transaction_dependency_tracking' can't be set to the value of '3' +Expect value still set to "COMMIT_ORDER" +SELECT @@global.binlog_transaction_dependency_tracking; +@@global.binlog_transaction_dependency_tracking +COMMIT_ORDER +Case1 a): "When binlog_transaction_dependency_tracking != COMMIT_ORDER, +transaction_write_set_extraction cannot be changed." +SET GLOBAL binlog_transaction_dependency_tracking= 'WRITESET'; +SET GLOBAL transaction_write_set_extraction= OFF; +ERROR HY000: Incorrect usage of transaction_write_set_extraction (changed) and binlog_transaction_dependency_tracking (!= COMMIT_ORDER) +SET GLOBAL transaction_write_set_extraction= MURMUR32; +ERROR HY000: Incorrect usage of transaction_write_set_extraction (changed) and binlog_transaction_dependency_tracking (!= COMMIT_ORDER) +Expect value still set to XXHASH64 +SELECT @@global.transaction_write_set_extraction; +@@global.transaction_write_set_extraction +XXHASH64 +Case1 b): "When binlog_transaction_dependency_tracking != COMMIT_ORDER, +transaction_write_set_extraction cannot be changed." +SET GLOBAL binlog_transaction_dependency_tracking= 'WRITESET_SESSION'; +SET GLOBAL transaction_write_set_extraction= OFF; +ERROR HY000: Incorrect usage of transaction_write_set_extraction (changed) and binlog_transaction_dependency_tracking (!= COMMIT_ORDER) +SET GLOBAL transaction_write_set_extraction= MURMUR32; +ERROR HY000: Incorrect usage of transaction_write_set_extraction (changed) and binlog_transaction_dependency_tracking (!= COMMIT_ORDER) +Expect value still set to XXHASH64 +SELECT @@global.transaction_write_set_extraction; +@@global.transaction_write_set_extraction +XXHASH64 +Case2: "When transaction_write_set_extraction = OFF, +binlog_transaction_dependency_tracking cannot be set to WRITESET%" +SET GLOBAL binlog_transaction_dependency_tracking= 'COMMIT_ORDER'; +SET GLOBAL transaction_write_set_extraction= OFF; +SET GLOBAL binlog_transaction_dependency_tracking= 'WRITESET'; +ERROR HY000: Incorrect usage of binlog_transaction_dependency_tracking (!= COMMIT_ORDER) and transaction_write_set_extraction (= OFF) +SET GLOBAL binlog_transaction_dependency_tracking= 'WRITESET_SESSION'; +ERROR HY000: Incorrect usage of binlog_transaction_dependency_tracking (!= COMMIT_ORDER) and transaction_write_set_extraction (= OFF) +Expect value still set to COMMIT_ORDER +SELECT @@global.binlog_transaction_dependency_tracking; +@@global.binlog_transaction_dependency_tracking +COMMIT_ORDER +SET GLOBAL transaction_write_set_extraction= XXHASH64; diff --git a/mysql-test/suite/sys_vars/t/binlog_transaction_dependency_h_size_basic.test b/mysql-test/suite/sys_vars/t/binlog_transaction_dependency_h_size_basic.test new file mode 100644 index 000000000000..9c8f4486632e --- /dev/null +++ b/mysql-test/suite/sys_vars/t/binlog_transaction_dependency_h_size_basic.test @@ -0,0 +1,106 @@ +############################################################################### +# Variable Name: binlog_transaction_dependency_history_size +# Scope: global +# Access Type: dynamic +# Data Type: Numeric +# Range: 1 - 1000000 +# +# Description: Test of Dynamic System Variable +# "binlog_transaction_dependency_history_size" that checks +# behavior of this variable in the following ways +# * Scope & Access type +# * Default value +# * Valid & Invalid values +# * Min & Max values +# +# Reference: WL#9556 +############################################################################### + +--source include/not_embedded.inc +--source include/have_binlog_format_row.inc + +# Save initial value +SET @save_binlog_transaction_dependency_history_size= @@global.binlog_transaction_dependency_history_size; + +# +# Scope: Global only +# +SELECT COUNT(@@GLOBAL.binlog_transaction_dependency_history_size); + +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +SELECT COUNT(@@SESSION.binlog_transaction_dependency_history_size); + +--disable_warnings +SELECT VARIABLE_NAME FROM performance_schema.global_variables WHERE VARIABLE_NAME='binlog_transaction_dependency_history_size'; +SELECT VARIABLE_NAME FROM performance_schema.session_variables WHERE variable_name='binlog_transaction_dependency_history_size'; +--enable_warnings + +# +# Access Type: Dynamic +# +SET @@GLOBAL.binlog_transaction_dependency_history_size= 1; +--let $assert_text= 'binlog_transaction_dependency_history_size is a dynamic variable' +--let $assert_cond= "[SELECT @@GLOBAL.binlog_transaction_dependency_history_size]" = 1 +--source include/assert.inc + +# +# Default value +# +SET @@GLOBAL.binlog_transaction_dependency_history_size= default; +--let $assert_text= 'Default value is 25000' +--let $assert_cond= "[SELECT @@GLOBAL.binlog_transaction_dependency_history_size]" = 25000 +--source include/assert.inc + +# +# Invalid values +# +--error ER_WRONG_TYPE_FOR_VAR +SET @@GLOBAL.binlog_transaction_dependency_history_size= ON; + +--error ER_WRONG_TYPE_FOR_VAR +SET @@GLOBAL.binlog_transaction_dependency_history_size= OFF; + +--error ER_WRONG_TYPE_FOR_VAR +SET @@GLOBAL.binlog_transaction_dependency_history_size= "foo"; + +--error ER_WRONG_TYPE_FOR_VAR +SET @@GLOBAL.binlog_transaction_dependency_history_size= NULL; + +--error ER_WRONG_TYPE_FOR_VAR +SET @@GLOBAL.binlog_transaction_dependency_history_size= 1.0; + +--echo Expect value still set to 25000 +SELECT @@GLOBAL.binlog_transaction_dependency_history_size; + +# +# Minimum value: 1. Maximum value: 1000000 +# +SET @@GLOBAL.binlog_transaction_dependency_history_size= 0; +--let $assert_text= 'Check minimum value of binlog_transaction_dependency_history_size' +--let $assert_cond= [SELECT @@GLOBAL.binlog_transaction_dependency_history_size] = 1 + +SET @@GLOBAL.binlog_transaction_dependency_history_size= -1; +--let $assert_text= 'Check minimum value of binlog_transaction_dependency_history_size' +--let $assert_cond= [SELECT @@GLOBAL.binlog_transaction_dependency_history_size] = 1 + +SET @@GLOBAL.binlog_transaction_dependency_history_size= 2000000; +--let $assert_text= 'Check maximum value of binlog_transaction_dependency_history_size' +--let $assert_cond= [SELECT @@GLOBAL.binlog_transaction_dependency_history_size] = 1000000 + +# +# Valid values +# +SET @@GLOBAL.binlog_transaction_dependency_history_size= 1; +--let $assert_text= 'binlog_transaction_dependency_history_size should be 1' +--let $assert_cond= [SELECT @@GLOBAL.binlog_transaction_dependency_history_size] = 1 + +SET @@GLOBAL.binlog_transaction_dependency_history_size= 20000; +--let $assert_text= 'binlog_transaction_dependency_history_size should be 20000' +--let $assert_cond= [SELECT @@GLOBAL.binlog_transaction_dependency_history_size] = 20000 + +SET @@GLOBAL.binlog_transaction_dependency_history_size= 1000000; +--let $assert_text= 'binlog_transaction_dependency_history_size should be 1000000' +--let $assert_cond= [SELECT @@GLOBAL.binlog_transaction_dependency_history_size] = 1000000 + +# Cleanup +eval SET @@GLOBAL.binlog_transaction_dependency_history_size= @save_binlog_transaction_dependency_history_size; diff --git a/mysql-test/suite/sys_vars/t/binlog_transaction_dependency_tracking_basic.test b/mysql-test/suite/sys_vars/t/binlog_transaction_dependency_tracking_basic.test new file mode 100644 index 000000000000..830c560683d7 --- /dev/null +++ b/mysql-test/suite/sys_vars/t/binlog_transaction_dependency_tracking_basic.test @@ -0,0 +1,155 @@ +############################################################################### +# Variable Name: binlog_transaction_dependency_tracking +# Scope: global +# Access Type: dynamic +# Data Type: enum +# +# Description: Test Cases of Dynamic System Variable +# "binlog_transaction_dependency_history_size" that checks +# behavior of this variable in the following ways +# * Scope & Access type +# * Valid & Default value +# * Invalid values +# * Dependency on transaction_write_set_extraction +# +# Reference: WL#9556 +############################################################################### + +--source include/not_embedded.inc +--source include/have_binlog_format_row.inc + +# Save initial value +--let $saved_binlog_transaction_dependency_tracking= `SELECT @@global.binlog_transaction_dependency_tracking` +--let $saved_transaction_write_set_extraction= `SELECT @@global.transaction_write_set_extraction` + +# Set initial values to test further +SET GLOBAL binlog_transaction_dependency_tracking= 'COMMIT_ORDER'; +SET GLOBAL transaction_write_set_extraction= 'XXHASH64'; + +# +# Scope: Global only +# +SELECT COUNT(@@GLOBAL.binlog_transaction_dependency_tracking); + +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +SELECT COUNT(@@SESSION.binlog_transaction_dependency_tracking); + +--disable_warnings +SELECT VARIABLE_NAME FROM performance_schema.global_variables WHERE VARIABLE_NAME='binlog_transaction_dependency_tracking'; +SELECT VARIABLE_NAME FROM performance_schema.session_variables WHERE variable_name='binlog_transaction_dependency_tracking'; +--enable_warnings + +# +# Access Type: Dynamic +# +SET GLOBAL binlog_transaction_dependency_tracking= 'COMMIT_ORDER'; +--let $assert_text= 'binlog_transaction_dependency_tracking is a dynamic variable' +--let $assert_cond= "[SELECT @@GLOBAL.binlog_transaction_dependency_tracking]" = "COMMIT_ORDER" +--source include/assert.inc + +# +# Valid values and Default value +# +SET GLOBAL binlog_transaction_dependency_tracking= 'COMMIT_ORDER'; +--let $assert_text= 'binlog_transaction_dependency_tracking should be COMMIT_ORDER' +--let $assert_cond= "[SELECT @@GLOBAL.binlog_transaction_dependency_tracking]" = "COMMIT_ORDER" +--source include/assert.inc + +SET GLOBAL binlog_transaction_dependency_tracking= 0; +--let $assert_text= 'binlog_transaction_dependency_tracking should be COMMIT_ORDER' +--let $assert_cond= "[SELECT @@GLOBAL.binlog_transaction_dependency_tracking]" = "COMMIT_ORDER" +--source include/assert.inc + +SET GLOBAL binlog_transaction_dependency_tracking= 'WRITESET'; +--let $assert_text= 'binlog_transaction_dependency_tracking should be WRITESET' +--let $assert_cond= "[SELECT @@GLOBAL.binlog_transaction_dependency_tracking]" = "WRITESET" +--source include/assert.inc + +SET GLOBAL binlog_transaction_dependency_tracking= 1; +--let $assert_text= 'binlog_transaction_dependency_tracking should be WRITESET' +--let $assert_cond= "[SELECT @@GLOBAL.binlog_transaction_dependency_tracking]" = "WRITESET" +--source include/assert.inc + +SET GLOBAL binlog_transaction_dependency_tracking= 'WRITESET_SESSION'; +--let $assert_text= 'binlog_transaction_dependency_tracking should be WRITESET_SESSION' +--let $assert_cond= "[SELECT @@GLOBAL.binlog_transaction_dependency_tracking]" = "WRITESET_SESSION" +--source include/assert.inc + +SET GLOBAL binlog_transaction_dependency_tracking= 2; +--let $assert_text= 'binlog_transaction_dependency_tracking should be WRITESET_SESSION' +--let $assert_cond= "[SELECT @@GLOBAL.binlog_transaction_dependency_tracking]" = "WRITESET_SESSION" +--source include/assert.inc + +SET GLOBAL binlog_transaction_dependency_tracking= DEFAULT; +--let $assert_text= 'binlog_transaction_dependency_tracking should be COMMIT_ORDER' +--let $assert_cond= "[SELECT @@GLOBAL.binlog_transaction_dependency_tracking]" = "COMMIT_ORDER" +--source include/assert.inc + +# +# Invalid values +# +--error ER_WRONG_VALUE_FOR_VAR +SET GLOBAL binlog_transaction_dependency_tracking= NULL; + +--error ER_WRONG_VALUE_FOR_VAR +SET GLOBAL binlog_transaction_dependency_tracking= ''; + +--error ER_WRONG_TYPE_FOR_VAR +SET GLOBAL binlog_transaction_dependency_tracking= 1.0; + +--error ER_WRONG_VALUE_FOR_VAR +SET GLOBAL binlog_transaction_dependency_tracking= 'GARBAGE'; + +--error ER_WRONG_VALUE_FOR_VAR +SET GLOBAL binlog_transaction_dependency_tracking= ON; + +--error ER_WRONG_VALUE_FOR_VAR +SET GLOBAL binlog_transaction_dependency_tracking= OFF; + +--error ER_WRONG_VALUE_FOR_VAR +SET GLOBAL binlog_transaction_dependency_tracking= 3; + +--echo Expect value still set to "COMMIT_ORDER" +SELECT @@global.binlog_transaction_dependency_tracking; + +# +# Test usage: Dependency on transaction_write_set_extraction +# +--echo Case1 a): "When binlog_transaction_dependency_tracking != COMMIT_ORDER, +--echo transaction_write_set_extraction cannot be changed." +SET GLOBAL binlog_transaction_dependency_tracking= 'WRITESET'; +--error ER_WRONG_USAGE +SET GLOBAL transaction_write_set_extraction= OFF; +--error ER_WRONG_USAGE +SET GLOBAL transaction_write_set_extraction= MURMUR32; +--echo Expect value still set to XXHASH64 +SELECT @@global.transaction_write_set_extraction; + +--echo Case1 b): "When binlog_transaction_dependency_tracking != COMMIT_ORDER, +--echo transaction_write_set_extraction cannot be changed." +SET GLOBAL binlog_transaction_dependency_tracking= 'WRITESET_SESSION'; +--error ER_WRONG_USAGE +SET GLOBAL transaction_write_set_extraction= OFF; +--error ER_WRONG_USAGE +SET GLOBAL transaction_write_set_extraction= MURMUR32; +--echo Expect value still set to XXHASH64 +SELECT @@global.transaction_write_set_extraction; + +--echo Case2: "When transaction_write_set_extraction = OFF, +--echo binlog_transaction_dependency_tracking cannot be set to WRITESET%" +SET GLOBAL binlog_transaction_dependency_tracking= 'COMMIT_ORDER'; +SET GLOBAL transaction_write_set_extraction= OFF; +--error ER_WRONG_USAGE +SET GLOBAL binlog_transaction_dependency_tracking= 'WRITESET'; +--error ER_WRONG_USAGE +SET GLOBAL binlog_transaction_dependency_tracking= 'WRITESET_SESSION'; +--echo Expect value still set to COMMIT_ORDER +SELECT @@global.binlog_transaction_dependency_tracking; + +SET GLOBAL transaction_write_set_extraction= XXHASH64; + +# Clean up +--disable_query_log +--eval SET GLOBAL binlog_transaction_dependency_tracking= '$saved_binlog_transaction_dependency_tracking'; +--eval SET GLOBAL transaction_write_set_extraction= '$saved_transaction_write_set_extraction'; +--enable_query_log diff --git a/rapid/plugin/group_replication/tests/collections/default.weekly b/rapid/plugin/group_replication/tests/collections/default.weekly index 6eb09492d2f6..e813b48b30d2 100644 --- a/rapid/plugin/group_replication/tests/collections/default.weekly +++ b/rapid/plugin/group_replication/tests/collections/default.weekly @@ -7,3 +7,4 @@ perl mysql-test-run.pl --timer --debug-server --force --parallel=6 --comment=gro perl mysql-test-run.pl --timer --debug-server --force --parallel=6 --comment=group_replication_parallel_applier-debug --vardir=var-group_replication_parallel_applier-debug --suite=group_replication --experimental=collections/default.experimental --skip-test-list=collections/disabled-per-push.list --big-test --testcase-timeout=60 --suite-timeout=360 --mysqld=--slave-parallel-workers=4 --mysqld=--slave-parallel-type=logical_clock --mysqld=--slave_preserve_commit_order=ON perl mysql-test-run.pl --timer --debug-server --force --parallel=6 --comment=group_replication_ssl_mode_required-debug --vardir=var-group_replication_ssl_mode_required-debug --suite=group_replication --experimental=collections/default.experimental --skip-test-list=collections/disabled-per-push.list --big-test --testcase-timeout=60 --suite-timeout=360 --mysqld=--loose-group_replication_ssl_mode=REQUIRED perl mysql-test-run.pl --timer --debug-server --force --parallel=6 --comment=group_replication_transaction-write-set-extraction_MURMUR32-debug --vardir=var-group_replication_transaction-write-set-extraction_MURMUR32-debug --suite=group_replication --experimental=collections/default.experimental --skip-test-list=collections/disabled-per-push.list --big-test --testcase-timeout=60 --suite-timeout=360 --mysqld=--transaction-write-set-extraction=MURMUR32 +perl mysql-test-run.pl --timer --force --parallel=6 --comment=group_replication_parallel_applier_binlog-txn-dependency-tracking --vardir=var-group_replication_parallel_applier_binlog-txn-dependency-tracking --suite=group_replication --experimental=collections/default.experimental --big-test --testcase-timeout=60 --suite-timeout=360 --mysqld=--slave-parallel-workers=4 --mysqld=--slave-parallel-type=logical_clock --mysqld=--slave_preserve_commit_order=ON --mysqld=--binlog-transaction-dependency-tracking=WRITESET diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_collations_key_conflict.test b/rapid/plugin/group_replication/tests/mtr/t/gr_collations_key_conflict.test index 9be9f37a98d3..e84c8276efee 100644 --- a/rapid/plugin/group_replication/tests/mtr/t/gr_collations_key_conflict.test +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_collations_key_conflict.test @@ -34,7 +34,6 @@ CREATE TABLE t1 ( --echo --echo ###################################################################### --echo # Execute in concurrency transaction with equivalent keys under latin1 - --let $local_server_connection1=server_1 --let $local_server_connection2=server1 --let $remote_server_connection=server2 diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_write_set_extraction_algorithm.test b/rapid/plugin/group_replication/tests/mtr/t/gr_write_set_extraction_algorithm.test index 765673a57960..914c6d4784ff 100644 --- a/rapid/plugin/group_replication/tests/mtr/t/gr_write_set_extraction_algorithm.test +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_write_set_extraction_algorithm.test @@ -6,6 +6,7 @@ # 2) Test that you cannot join a group if your algorithm is different. # +--source include/only_binlog_transaction_dependency_tracking_commit_order.inc --source ../inc/have_group_replication_plugin.inc --let $rpl_skip_group_replication_start= 1 --source ../inc/group_replication.inc diff --git a/rapid/plugin/x/tests/mtr/r/connection.result b/rapid/plugin/x/tests/mtr/r/connection.result index 32af025035b2..5950fc9fbcbe 100644 --- a/rapid/plugin/x/tests/mtr/r/connection.result +++ b/rapid/plugin/x/tests/mtr/r/connection.result @@ -688,7 +688,7 @@ Mysqlx_sessions_rejected 1 RUN SET @@session.session_track_system_variables='mysqlx_port,mysqlx_idle_worker_thread_timeout,mysqlx_max_allowed_packet,mysqlx_max_connections,mysqlx_min_worker_threads' 0 rows affected -RUN show variables like '%track%' +RUN show variables like '%session_track%' Variable_name Value session_track_gtids OFF session_track_schema ON diff --git a/rapid/plugin/x/tests/mtr/t/connection.test b/rapid/plugin/x/tests/mtr/t/connection.test index a9801d4cd87e..cb1bce3b0ac5 100644 --- a/rapid/plugin/x/tests/mtr/t/connection.test +++ b/rapid/plugin/x/tests/mtr/t/connection.test @@ -77,7 +77,7 @@ EOF --write_file $MYSQL_TMP_DIR/mysqlx-connection_session_track.tmp -->sql SET @@session.session_track_system_variables='mysqlx_port,mysqlx_idle_worker_thread_timeout,mysqlx_max_allowed_packet,mysqlx_max_connections,mysqlx_min_worker_threads'; -show variables like '%track%'; +show variables like '%session_track%'; -->endsql -->stmtsql uninstall plugin mysqlx; diff --git a/sql/CMakeLists.txt b/sql/CMakeLists.txt index 3e8ca40f13ec..c55bf1fa81da 100644 --- a/sql/CMakeLists.txt +++ b/sql/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2006, 2017, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 2018, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -151,6 +151,7 @@ SET(SQL_SHARED_SOURCES rpl_handler.cc rpl_transaction_ctx.cc rpl_transaction_write_set_ctx.cc + rpl_trx_tracking.cc rpl_write_set_handler.cc rules_table_service.cc session_tracker.cc @@ -422,7 +423,7 @@ SET (BINLOG_SOURCE rpl_gtid_misc.cc rpl_gtid_state.cc rpl_gtid_owned.cc rpl_gtid_execution.cc rpl_gtid_mutex_cond_array.cc rpl_gtid_persist.cc log_event.cc log_event_old.cc binlog.cc sql_binlog.cc - rpl_filter.cc rpl_record.cc rpl_record_old.cc + rpl_filter.cc rpl_record.cc rpl_record_old.cc rpl_trx_tracking.cc rpl_utility.cc rpl_injector.cc rpl_table_access.cc) ADD_CONVENIENCE_LIBRARY(binlog ${BINLOG_SOURCE}) TARGET_LINK_LIBRARIES(binlog binlogevents_static) diff --git a/sql/binlog.cc b/sql/binlog.cc index a40d8d14aa9b..8cd4ba933e01 100644 --- a/sql/binlog.cc +++ b/sql/binlog.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2009, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2009, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -26,6 +26,7 @@ #include "rpl_rli_pdb.h" // Slave_worker #include "rpl_slave_commit_order_manager.h" // Commit_order_manager #include "rpl_trx_boundary_parser.h" // Transaction_boundary_parser +#include "rpl_context.h" #include "sql_class.h" // THD #include "sql_parse.h" // sqlcom_can_generate_row_events #include "sql_show.h" // append_identifier @@ -364,6 +365,9 @@ class binlog_cache_data { flags.with_rbr= it->second.with_rbr; flags.with_sbr= it->second.with_sbr; + flags.with_start= it->second.with_start; + flags.with_end= it->second.with_end; + flags.with_content= it->second.with_content; } else DBUG_ASSERT(it == cache_state_map.end()); @@ -373,6 +377,9 @@ class binlog_cache_data { flags.with_rbr= false; flags.with_sbr= false; + flags.with_start= false; + flags.with_end= false; + flags.with_content= false; } } @@ -384,6 +391,9 @@ class binlog_cache_data cache_state state; state.with_rbr= flags.with_rbr; state.with_sbr= flags.with_sbr; + state.with_start= flags.with_start; + state.with_end= flags.with_end; + state.with_content= flags.with_content; cache_state_map[pos_to_checkpoint]= state; } } @@ -419,6 +429,9 @@ class binlog_cache_data flags.finalized= false; flags.with_sbr= false; flags.with_rbr= false; + flags.with_start= false; + flags.with_end= false; + flags.with_content= false; /* The truncate function calls reinit_io_cache that calls my_b_flush_io_cache which may increase disk_writes. This breaks the disk_writes use by the @@ -492,6 +505,52 @@ class binlog_cache_data return flags.with_sbr || !flags.with_rbr; } + /** + Check if the binlog cache contains an empty transaction, which has + two binlog events "BEGIN" and "COMMIT". + + @return true The binlog cache contains an empty transaction. + @return false Otherwise. + */ + bool has_empty_transaction() + { + /* + The empty transaction has two events in trx/stmt binlog cache + and no changes (no SBR changing content and no RBR events). + Other transaction should not have two events. So we can identify + if this is an empty transaction by the event counter and the + cache flags. + */ + if (flags.with_start && // Has transaction start statement + flags.with_end && // Has transaction end statement + !flags.with_sbr && // No statements changing content + !flags.with_rbr && // No rows changing content + !flags.immediate && // Not a DDL + !flags.with_xid && // Not a XID transaction and not an atomic DDL Query + !flags.with_content)// Does not have any content + { + DBUG_ASSERT(!flags.with_sbr); // No statements changing content + DBUG_ASSERT(!flags.with_rbr); // No rows changing content + DBUG_ASSERT(!flags.immediate);// Not a DDL + DBUG_ASSERT(!flags.with_xid); // Not a XID trx and not an atomic DDL Query + + return true; + } + return false; + } + + /** + Check if the binlog cache is empty or contains an empty transaction, + which has two binlog events "BEGIN" and "COMMIT". + + @return true The binlog cache is empty or contains an empty transaction. + @return false Otherwise. + */ + bool is_empty_or_has_empty_transaction() + { + return is_binlog_empty() || has_empty_transaction(); + } + protected: /* This structure should have all cache variables/flags that should be restored @@ -501,6 +560,9 @@ class binlog_cache_data { bool with_sbr; bool with_rbr; + bool with_start; + bool with_end; + bool with_content; }; /* For every SAVEPOINT used, we will store a cache_state for the current @@ -581,6 +643,21 @@ class binlog_cache_data This indicates that the cache contain RBR event changing content. */ bool with_rbr:1; + + /* + This indicates that the cache contain s transaction start statement. + */ + bool with_start:1; + + /* + This indicates that the cache contain a transaction end event. + */ + bool with_end:1; + + /* + This indicates that the cache contain content other than START/END. + */ + bool with_content:1; } flags; private: @@ -842,6 +919,23 @@ class binlog_cache_mngr { return 0; } + /** + Check if at least one of transacaction and statement binlog caches + contains an empty transaction, other one is empty or contains an + empty transaction. + + @return true At least one of transacaction and statement binlog + caches an empty transaction, other one is emptry + or contains an empty transaction. + @return false Otherwise. + */ + bool has_empty_transaction() + { + return (trx_cache.is_empty_or_has_empty_transaction() && + stmt_cache.is_empty_or_has_empty_transaction() && + !is_binlog_empty()); + } + binlog_stmt_cache_data stmt_cache; binlog_trx_cache_data trx_cache; /* @@ -1205,6 +1299,16 @@ int binlog_cache_data::write_event(THD *thd, Log_event *ev) flags.with_sbr= true; if (ev->is_rbr_logging_format()) flags.with_rbr= true; +#ifndef EMBEDDED_LIBRARY + /* With respect to empty transactions */ + if (ev->starts_group()) + flags.with_start= true; + if (ev->ends_group()) + flags.with_end= true; + if ((!ev->starts_group() && !ev->ends_group()) + ||ev->get_type_code() == binary_log::VIEW_CHANGE_EVENT) + flags.with_content= true; +#endif } DBUG_RETURN(0); } @@ -1287,29 +1391,10 @@ bool MYSQL_BIN_LOG::write_gtid(THD *thd, binlog_cache_data *cache_data, DBUG_ASSERT(thd->owned_gtid.sidno == THD::OWNED_SIDNO_ANONYMOUS || thd->owned_gtid.sidno > 0); + int64 sequence_number, last_committed; /* Generate logical timestamps for MTS */ + m_dependency_tracker.get_dependency(thd, sequence_number, last_committed); - /* - Prepare sequence_number and last_committed relative to the current - binlog. This is done by subtracting the binlog's clock offset - from the values. - - A transaction that commits after the binlog is rotated, can have a - commit parent in the previous binlog. In this case, subtracting - the offset from the sequence number results in a negative - number. The commit parent dependency gets lost in such - case. Therefore, we log the value SEQ_UNINIT in this case. - */ - - Transaction_ctx *trn_ctx= thd->get_transaction(); - Logical_clock& clock= mysql_bin_log.max_committed_transaction; - - DBUG_ASSERT(trn_ctx->sequence_number > clock.get_offset()); - - int64 relative_sequence_number= trn_ctx->sequence_number - clock.get_offset(); - int64 relative_last_committed= - trn_ctx->last_committed <= clock.get_offset() ? - SEQ_UNINIT : trn_ctx->last_committed - clock.get_offset(); /* In case both the transaction cache and the statement cache are non-empty, both will be flushed in sequence and logged as @@ -1321,13 +1406,14 @@ bool MYSQL_BIN_LOG::write_gtid(THD *thd, binlog_cache_data *cache_data, condition trn_ctx->last_committed==SEQ_UNINIT to detect this situation, hence the need to set it here. */ - trn_ctx->last_committed= SEQ_UNINIT; + thd->get_transaction()->last_committed= SEQ_UNINIT; + /* Generate and write the Gtid_log_event. */ Gtid_log_event gtid_event(thd, cache_data->is_trx_cache(), - relative_last_committed, relative_sequence_number, + last_committed, sequence_number, cache_data->may_have_sbr_stmts()); uchar buf[Gtid_log_event::MAX_EVENT_LENGTH]; uint32 buf_len= gtid_event.write_to_memory(buf); @@ -1518,7 +1604,7 @@ binlog_cache_data::flush(THD *thd, my_off_t *bytes_written, bool *wrote_xid) DBUG_PRINT("debug", ("bytes_in_cache: %llu", bytes_in_cache)); - trn_ctx->sequence_number= mysql_bin_log.transaction_counter.step(); + trn_ctx->sequence_number= mysql_bin_log.m_dependency_tracker.step(); /* In case of two caches the transaction is split into two groups. The 2nd group is considered to be a successor of the 1st rather @@ -1684,9 +1770,9 @@ static int binlog_prepare(handlerton *hton, THD *thd, bool all) DBUG_ENTER("binlog_prepare"); if (!all) { - Logical_clock& clock= mysql_bin_log.max_committed_transaction; - thd->get_transaction()-> - store_commit_parent(clock.get_timestamp()); + thd->get_transaction()->store_commit_parent(mysql_bin_log. + m_dependency_tracker.get_max_committed_timestamp()); + } DBUG_RETURN(all && is_loggable_xa_prepare(thd) ? @@ -2360,7 +2446,7 @@ int MYSQL_BIN_LOG::rollback(THD *thd, bool all) if (stuff_logged) { Transaction_ctx *trn_ctx= thd->get_transaction(); - trn_ctx->store_commit_parent(max_committed_transaction.get_timestamp()); + trn_ctx->store_commit_parent(m_dependency_tracker.get_max_committed_timestamp()); } DBUG_PRINT("debug", ("error: %d", error)); @@ -2755,6 +2841,21 @@ File open_binlog_file(IO_CACHE *log, const char *log_file_name, const char **err DBUG_RETURN(-1); } + +bool is_empty_transaction_in_binlog_cache(const THD* thd) +{ + DBUG_ENTER("is_empty_transaction_in_binlog_cache"); + + binlog_cache_mngr *const cache_mngr= thd_get_cache_mngr(thd); + if (cache_mngr != NULL && cache_mngr->has_empty_transaction()) + { + DBUG_RETURN(true); + } + + DBUG_RETURN(false); +} + + /** This function checks if a transactional table was updated by the current transaction. @@ -5056,8 +5157,7 @@ bool MYSQL_BIN_LOG::open_binlog(const char *log_name, At every rotate memorize the last transaction counter state to use it as offset at logging the transaction logical timestamps. */ - max_committed_transaction.update_offset(transaction_counter.get_timestamp()); - transaction_counter.update_offset(transaction_counter.get_timestamp()); + m_dependency_tracker.rotate(); #ifdef HAVE_REPLICATION close_purge_index_file(); #endif @@ -8407,7 +8507,7 @@ TC_LOG::enum_result MYSQL_BIN_LOG::commit(THD *thd, bool all) Commit parent identification of non-transactional query has been deferred until now, except for the mixed transaction case. */ - trn_ctx->store_commit_parent(max_committed_transaction.get_timestamp()); + trn_ctx->store_commit_parent(m_dependency_tracker.get_max_committed_timestamp()); if (cache_mngr->stmt_cache.finalize(thd)) DBUG_RETURN(RESULT_ABORTED); stmt_stuff_logged= true; @@ -8652,30 +8752,6 @@ MYSQL_BIN_LOG::process_flush_stage_queue(my_off_t *total_bytes_var, DBUG_RETURN(flush_error); } -/** - The method is to be executed right before committing time. - It must be invoked even if the transaction does not commit - to engine being merely logged into the binary log. - max_committed_transaction is updated with a greater timestamp - value. - As a side effect, the transaction context's sequence_number - is reset. - - @param THD a pointer to THD instance -*/ -void MYSQL_BIN_LOG::update_max_committed(THD *thd) -{ - Transaction_ctx *trn_ctx= thd->get_transaction(); - max_committed_transaction.set_if_greater(trn_ctx->sequence_number); - /* - sequence_number timestamp is unneeded anymore, so it's cleared off. - */ - trn_ctx->sequence_number= SEQ_UNINIT; - - DBUG_ASSERT(trn_ctx->last_committed == SEQ_UNINIT || - thd->commit_error == THD::CE_FLUSH_ERROR); -} - /** Commit a sequence of sessions. @@ -8716,7 +8792,7 @@ MYSQL_BIN_LOG::process_commit_stage_queue(THD *thd, THD *first) stage_manager.clear_preempt_status(head); #endif if (head->get_transaction()->sequence_number != SEQ_UNINIT) - update_max_committed(head); + m_dependency_tracker.update_max_committed(head); /* Flush/Sync error should be ignored and continue to commit phase. And thd->commit_error cannot be @@ -8973,7 +9049,7 @@ MYSQL_BIN_LOG::finish_commit(THD *thd) cache_mngr->reset(); } if (thd->get_transaction()->sequence_number != SEQ_UNINIT) - update_max_committed(thd); + m_dependency_tracker.update_max_committed(thd); if (thd->get_transaction()->m_flags.commit_low) { const bool all= thd->get_transaction()->m_flags.real_commit; @@ -11674,83 +11750,6 @@ void THD::issue_unsafe_warnings() DBUG_VOID_RETURN; } -Logical_clock::Logical_clock() - : state(SEQ_UNINIT), offset(0) -{} - -/** - Atomically fetch the current state. - @parms: None - @return not subtracted "absolute" value. - */ -inline int64 Logical_clock::get_timestamp() -{ - int64 retval= 0; - DBUG_ENTER("Logical_clock::get_timestamp"); - retval= my_atomic_load64(&state); - DBUG_RETURN(retval); -} - -/** - Steps the absolute value of the clock (state) to return - an updated value. - The caller must be sure to call the method in no concurrent - execution context so either offset and state can't change. - - @return incremented "absolute" value - */ -inline int64 Logical_clock::step() -{ - compile_time_assert(SEQ_UNINIT == 0); - DBUG_EXECUTE_IF("logical_clock_step_2", ++state;); - return ++state; -} - -/** - To try setting the clock *forward*. - The clock does not change when the new value is in the past - which is reflected by the new value and by offset. - In other words the function main effects is described as - state= max(state, new_value). - Offset that exceeds the new value indicates the binary log rotation - to render such new value useless. - - @param new_val a new value (offset included) - @return a (new) value of state member regardless whether it's changed or not. - */ -inline int64 Logical_clock::set_if_greater(int64 new_val) -{ - longlong old_val= new_val - 1; - bool cas_rc; - - DBUG_ENTER("Logical_clock::set_if_greater"); - - DBUG_ASSERT(new_val > 0); - - if (new_val <= offset) - { - /* - This function's invocation can be separated from the - transaction's flushing by few rotations. A late to log - transaction does not change the clock, similarly to how - its timestamps are handled at flushing. - */ - DBUG_RETURN(SEQ_UNINIT); - } - - DBUG_ASSERT(new_val > 0); - - while (!(cas_rc= my_atomic_cas64(&state, &old_val, new_val)) && - old_val < new_val) - {} - - DBUG_ASSERT(state >= new_val); // setting can't be done to past - - DBUG_ASSERT(cas_rc || old_val >= new_val); - - DBUG_RETURN(cas_rc ? new_val : old_val); -} - /** Log the current query. diff --git a/sql/binlog.h b/sql/binlog.h index 01236b2dd42c..15491b42dfe1 100644 --- a/sql/binlog.h +++ b/sql/binlog.h @@ -1,5 +1,5 @@ #ifndef BINLOG_H_INCLUDED -/* Copyright (c) 2010, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -24,6 +24,8 @@ #include "tc_log.h" // TC_LOG #include "atomic_class.h" #include "rpl_gtid.h" // Gtid_set, Sid_map +#include "rpl_trx_tracking.h" + class Relay_log_info; class Master_info; @@ -39,45 +41,6 @@ struct Gtid; typedef int64 query_id_t; -/** - Logical timestamp generator for logical timestamping binlog transactions. - A transaction is associated with two sequence numbers see - @c Transaction_ctx::last_committed and @c Transaction_ctx::sequence_number. - The class provides necessary interfaces including that of - generating a next consecutive value for the latter. -*/ -class Logical_clock -{ -private: - int64 state; - /* - Offset is subtracted from the actual "absolute time" value at - logging a replication event. That is the event holds logical - timestamps in the "relative" format. They are meaningful only in - the context of the current binlog. - The member is updated (incremented) per binary log rotation. - */ - int64 offset; -public: - Logical_clock(); - int64 step(); - int64 set_if_greater(int64 new_val); - int64 get_timestamp(); - int64 get_offset() { return offset; } - /* - Updates the offset. - This operation is invoked when binlog rotates and at that time - there can't any concurrent step() callers so no need to guard - the assignement. - */ - void update_offset(int64 new_offset) - { - DBUG_ASSERT(offset <= new_offset); - - offset= new_offset; - } - ~Logical_clock() { } -}; /** Class for maintaining the commit stages for binary log group commit. @@ -591,11 +554,8 @@ class MYSQL_BIN_LOG: public TC_LOG #endif public: - /* Committed transactions timestamp */ - Logical_clock max_committed_transaction; - /* "Prepared" transactions timestamp */ - Logical_clock transaction_counter; - void update_max_committed(THD *thd); + /** Manage the MTS dependency tracking */ + Transaction_dependency_tracker m_dependency_tracker; /** Find the oldest binary log that contains any GTID that @@ -973,6 +933,19 @@ typedef struct st_load_file_info extern MYSQL_PLUGIN_IMPORT MYSQL_BIN_LOG mysql_bin_log; +/** + Check if at least one of transacaction and statement binlog caches contains + an empty transaction, other one is empty or contains an empty transaction, + which has two binlog events "BEGIN" and "COMMIT". + + @param thd The client thread that executed the current statement. + + @retval true At least one of transacaction and statement binlog caches + contains an empty transaction, other one is empty or + contains an empty transaction. + @retval false Otherwise. +*/ +bool is_empty_transaction_in_binlog_cache(const THD* thd); bool trans_has_updated_trans_table(const THD* thd); bool stmt_has_updated_trans_table(Ha_trx_info* ha_list); bool ending_trans(THD* thd, const bool all); diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 738405031b55..4acff4e4d9bb 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -3080,6 +3080,16 @@ int init_common_variables() return 1; } + if (global_system_variables.transaction_write_set_extraction == HASH_ALGORITHM_OFF + && mysql_bin_log.m_dependency_tracker.m_opt_tracking_mode != DEPENDENCY_TRACKING_COMMIT_ORDER) + { + sql_print_error("The transaction_write_set_extraction must be set to XXHASH64 or MURMUR32" + " when binlog_transaction_dependency_tracking is WRITESET or WRITESET_SESSION."); + return 1; + } + else + mysql_bin_log.m_dependency_tracker.tracking_mode_changed(); + #define FIX_LOG_VAR(VAR, ALT) \ if (!VAR || !*VAR) \ VAR= ALT; diff --git a/sql/rpl_context.h b/sql/rpl_context.h index cc13907baaca..43928db8bcfb 100644 --- a/sql/rpl_context.h +++ b/sql/rpl_context.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as @@ -196,6 +196,29 @@ class Session_consistency_gtids_ctx Session_consistency_gtids_ctx& operator=(const Session_consistency_gtids_ctx& rsc); }; +/* + This object encapsulates the state kept between transactions of the same client in + order to compute logical timestamps based on WRITESET_SESSION. +*/ +class Dependency_tracker_ctx +{ +public: + Dependency_tracker_ctx(): m_last_session_sequence_number(0) { } + + void set_last_session_sequence_number(int64 sequence_number) + { + m_last_session_sequence_number= sequence_number; + } + + int64 get_last_session_sequence_number() + { + return m_last_session_sequence_number; + } + +private: + int64 m_last_session_sequence_number; +}; + /* This class SHALL encapsulate the replication context associated with the THD object. @@ -204,6 +227,7 @@ class Rpl_thd_context { private: Session_consistency_gtids_ctx m_session_gtids_ctx; + Dependency_tracker_ctx m_dependency_tracker_ctx; // make these private Rpl_thd_context(const Rpl_thd_context& rsc); @@ -216,6 +240,11 @@ class Rpl_thd_context { return m_session_gtids_ctx; } + + inline Dependency_tracker_ctx& dependency_tracker_ctx() + { + return m_dependency_tracker_ctx; + } }; #endif /* RPL_SESSION_H */ diff --git a/sql/rpl_transaction_write_set_ctx.cc b/sql/rpl_transaction_write_set_ctx.cc index 617d148946ea..3c50a5375e71 100644 --- a/sql/rpl_transaction_write_set_ctx.cc +++ b/sql/rpl_transaction_write_set_ctx.cc @@ -22,7 +22,8 @@ #include "debug_sync.h" // debug_sync_set_action -Rpl_transaction_write_set_ctx::Rpl_transaction_write_set_ctx() +Rpl_transaction_write_set_ctx::Rpl_transaction_write_set_ctx(): + m_has_missing_keys(false), m_has_related_foreign_keys(false) { DBUG_ENTER("Rpl_transaction_write_set_ctx::Rpl_transaction_write_set_ctx"); /* @@ -56,9 +57,36 @@ void Rpl_transaction_write_set_ctx::clear_write_set() write_set_unique.clear(); savepoint.clear(); savepoint_list.clear(); + m_has_missing_keys= m_has_related_foreign_keys= false; DBUG_VOID_RETURN; } +void Rpl_transaction_write_set_ctx::set_has_missing_keys() +{ + DBUG_ENTER("Transaction_context_log_event::set_has_missing_keys"); + m_has_missing_keys= true; + DBUG_VOID_RETURN; +} + +bool Rpl_transaction_write_set_ctx::get_has_missing_keys() +{ + DBUG_ENTER("Transaction_context_log_event::get_has_missing_keys"); + DBUG_RETURN(m_has_missing_keys); +} + +void Rpl_transaction_write_set_ctx::set_has_related_foreign_keys() +{ + DBUG_ENTER("Transaction_context_log_event::set_has_related_foreign_keys"); + m_has_related_foreign_keys= true; + DBUG_VOID_RETURN; +} + +bool Rpl_transaction_write_set_ctx::get_has_related_foreign_keys() +{ + DBUG_ENTER("Transaction_context_log_event::get_has_related_foreign_keys"); + DBUG_RETURN(m_has_related_foreign_keys); +} + /** Implementation of service_rpl_transaction_write_set, see @file include/mysql/service_rpl_transaction_write_set.h diff --git a/sql/rpl_transaction_write_set_ctx.h b/sql/rpl_transaction_write_set_ctx.h index 34736a6cffc1..563676ce3087 100644 --- a/sql/rpl_transaction_write_set_ctx.h +++ b/sql/rpl_transaction_write_set_ctx.h @@ -54,6 +54,31 @@ class Rpl_transaction_write_set_ctx */ void clear_write_set(); + /* + mark transactions that include tables with no pk + */ + void set_has_missing_keys(); + + /* + check if the transaction was marked as having missing keys. + + @retval true The transaction accesses tables with no PK. + @retval false All tables referenced in transaction have PK. + */ + bool get_has_missing_keys(); + + /* + mark transactions that include tables referenced by foreign keys + */ + void set_has_related_foreign_keys(); + + /* + function to check if the transaction was marked as having missing keys. + + @retval true If the transaction was marked as being referenced by a foreign key + */ + bool get_has_related_foreign_keys(); + /** Function to add a new SAVEPOINT identifier in the savepoint map in the transaction_ctx object. @@ -94,6 +119,9 @@ class Rpl_transaction_write_set_ctx std::vector write_set; std::set write_set_unique; + bool m_has_missing_keys; + bool m_has_related_foreign_keys; + /** Contains information related to SAVEPOINTs. The key on map is the identifier and the value is the size of write set when command was diff --git a/sql/rpl_trx_tracking.cc b/sql/rpl_trx_tracking.cc new file mode 100644 index 000000000000..673776be5cd9 --- /dev/null +++ b/sql/rpl_trx_tracking.cc @@ -0,0 +1,394 @@ +/* Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + + 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, + 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */ + +#include "rpl_trx_tracking.h" + +#include "mysqld.h" +#include "binlog.h" + + +Logical_clock::Logical_clock() + : state(SEQ_UNINIT), offset(0) +{} + +/** + Atomically fetch the current state. + @return not subtracted "absolute" value. + */ +inline int64 Logical_clock::get_timestamp() +{ + int64 retval= 0; + DBUG_ENTER("Logical_clock::get_timestamp"); + retval= my_atomic_load64(&state); + DBUG_RETURN(retval); +} + +/** + Steps the absolute value of the clock (state) to return + an updated value. + The caller must be sure to call the method in no concurrent + execution context so either offset and state can't change. + + @return incremented "absolute" value + */ +inline int64 Logical_clock::step() +{ + DBUG_ASSERT(SEQ_UNINIT == 0); + DBUG_EXECUTE_IF("logical_clock_step_2", ++state;); + return ++state; +} + +/** + To try setting the clock *forward*. + The clock does not change when the new value is in the past + which is reflected by the new value and by offset. + In other words the function main effects is described as + state= max(state, new_value). + Offset that exceeds the new value indicates the binary log rotation + to render such new value useless. + + @param new_val a new value (offset included) + @return a (new) value of state member regardless whether it's changed or not. + */ +inline int64 Logical_clock::set_if_greater(int64 new_val) +{ + longlong old_val= new_val - 1; + bool cas_rc; + + DBUG_ENTER("Logical_clock::set_if_greater"); + + DBUG_ASSERT(new_val > 0); + + if (new_val <= offset) + { + /* + This function's invocation can be separated from the + transaction's flushing by few rotations. A late to log + transaction does not change the clock, similarly to how + its timestamps are handled at flushing. + */ + DBUG_RETURN(SEQ_UNINIT); + } + + DBUG_ASSERT(new_val > 0); + + while (!(cas_rc= my_atomic_cas64(&state, &old_val, new_val)) && + old_val < new_val) + {} + + DBUG_ASSERT(state >= new_val); // setting can't be done to past + + DBUG_ASSERT(cas_rc || old_val >= new_val); + + DBUG_RETURN(cas_rc ? new_val : old_val); +} + + +/** + Get the sequence_number for a transaction, and get the last_commit based + on parallel committing transactions. + + @param[in] thd Current THD from which to extract trx context. + @param[in,out] sequence_number Sequence number of current transaction. + @param[in,out] commit_parent Commit_parent of current transaction, + pre-filled with the commit_parent calculated + by the logical clock logic. +*/ +void +Commit_order_trx_dependency_tracker::get_dependency(THD *thd, + int64 &sequence_number, + int64 &commit_parent) +{ + Transaction_ctx *trn_ctx= thd->get_transaction(); + + DBUG_ASSERT(trn_ctx->sequence_number + > m_max_committed_transaction.get_offset()); + /* + Prepare sequence_number and commit_parent relative to the current + binlog. This is done by subtracting the binlog's clock offset + from the values. + + A transaction that commits after the binlog is rotated, can have a + commit parent in the previous binlog. In this case, subtracting + the offset from the sequence number results in a negative + number. The commit parent dependency gets lost in such + case. Therefore, we log the value SEQ_UNINIT in this case. + */ + sequence_number= + trn_ctx->sequence_number - m_max_committed_transaction.get_offset(); + + commit_parent= + trn_ctx->last_committed <= m_max_committed_transaction.get_offset() + ? SEQ_UNINIT + : trn_ctx->last_committed - m_max_committed_transaction.get_offset(); +} + +int64 +Commit_order_trx_dependency_tracker::step() +{ + return m_transaction_counter.step(); +} + +void +Commit_order_trx_dependency_tracker::rotate() +{ + m_max_committed_transaction. + update_offset(m_transaction_counter.get_timestamp()); + + m_transaction_counter. + update_offset(m_transaction_counter.get_timestamp()); +} + +void +Commit_order_trx_dependency_tracker::update_max_committed(int64 sequence_number) +{ + m_max_committed_transaction.set_if_greater(sequence_number); +} + +/** + Get the writeset dependencies of a transaction. + This takes the commit_parent that must be previously set using + Commit_order_trx_dependency_tracker and tries to make the commit_parent as + low as possible, using the writesets of each transaction. + The commit_parent returned depends on how many row hashes are stored in the + writeset_history, which is cleared once it reaches the user-defined maximum. + + @param[in] thd Current THD from which to extract trx context. + @param[in,out] sequence_number Sequence number of current transaction. + @param[in,out] commit_parent Commit_parent of current transaction, + pre-filled with the commit_parent calculated by + Commit_order_trx_dependency_tracker to use when + the writeset commit_parent is not valid. +*/ +void +Writeset_trx_dependency_tracker::get_dependency(THD *thd, + int64 &sequence_number, + int64 &commit_parent) +{ + Rpl_transaction_write_set_ctx *write_set_ctx= + thd->get_transaction()->get_transaction_write_set_ctx(); + std::set *writeset= write_set_ctx->get_write_set(); + +#ifndef DBUG_OFF + /* The writeset of an empty transaction must be empty. */ + if (is_empty_transaction_in_binlog_cache(thd)) + DBUG_ASSERT(writeset->size() == 0); +#endif + + /* + Check if this transaction has a writeset, if the writeset will overflow the + history size, if the transaction_write_set_extraction is consistent + between session and global or if changes in the tables referenced in this + transaction cascade to other tables. If that happens revert to using the + COMMIT_ORDER and clear the history to keep data consistent. + */ + bool can_use_writesets= + // empty writeset implies DDL or similar, except if there are missing keys + (writeset->size() != 0 || write_set_ctx->get_has_missing_keys() || + /* + The empty transactions do not need to clear the writeset history, since + they can be executed in parallel. + */ + is_empty_transaction_in_binlog_cache(thd)) && + // hashing algorithm for the session must be the same as used by other rows in history + (global_system_variables.transaction_write_set_extraction == + thd->variables.transaction_write_set_extraction) && + // must not use foreign keys + !write_set_ctx->get_has_related_foreign_keys(); + bool exceeds_capacity= false; + + if (can_use_writesets) + { + /* + Check if adding this transaction exceeds the capacity of the writeset + history. If that happens, m_writeset_history will be cleared only after + using its information for current transaction. + */ + exceeds_capacity= + m_writeset_history.size() + writeset->size() > m_opt_max_history_size; + + /* + Compute the greatest sequence_number among all conflicts and add the + transaction's row hashes to the history. + */ + int64 last_parent= m_writeset_history_start; + for (std::set::iterator it= writeset->begin(); + it != writeset->end(); ++it) + { + Writeset_history::iterator hst= m_writeset_history.find(*it); + if (hst != m_writeset_history.end()) + { + if (hst->second > last_parent && hst->second < sequence_number) + last_parent= hst->second; + + hst->second= sequence_number; + } + else + { + if (!exceeds_capacity) + m_writeset_history.insert(std::pair(*it, sequence_number)); + } + } + + /* + If the transaction references tables with missing primary keys revert to + COMMIT_ORDER, update and not reset history, as it is unnecessary because + any transaction that refers this table will also revert to COMMIT_ORDER. + */ + if (!write_set_ctx->get_has_missing_keys()) + { + /* + The WRITESET commit_parent then becomes the minimum of largest parent + found using the hashes of the row touched by the transaction and the + commit parent calculated with COMMIT_ORDER. + */ + commit_parent= std::min(last_parent, commit_parent); + } + } + + if (exceeds_capacity || !can_use_writesets) + { + m_writeset_history_start= sequence_number; + m_writeset_history.clear(); + } +} + +void +Writeset_trx_dependency_tracker::rotate(int64 start) +{ + m_writeset_history_start= start; + m_writeset_history.clear(); +} + +/** + Get the writeset commit parent of transactions using the session dependencies. + + @param[in] thd Current THD from which to extract trx context. + @param[in,out] sequence_number Sequence number of current transaction. + @param[in,out] commit_parent Commit_parent of current transaction, + pre-filled with the commit_parent calculated + by the Write_set_trx_dependency_tracker as a + fall-back. +*/ +void +Writeset_session_trx_dependency_tracker::get_dependency(THD *thd, + int64 &sequence_number, + int64 &commit_parent) +{ + int64 session_parent= thd->rpl_thd_ctx.dependency_tracker_ctx(). + get_last_session_sequence_number(); + + if (session_parent != 0 && session_parent < sequence_number) + commit_parent= std::max(commit_parent, session_parent); + + thd->rpl_thd_ctx.dependency_tracker_ctx(). + set_last_session_sequence_number(sequence_number); +} + +/** + Get the dependencies in a transaction, the main entry point for the + dependency tracking work. +*/ +void +Transaction_dependency_tracker::get_dependency(THD *thd, + int64 &sequence_number, + int64 &commit_parent) +{ + sequence_number= commit_parent= 0; + + switch(m_opt_tracking_mode) + { + case DEPENDENCY_TRACKING_COMMIT_ORDER: + m_commit_order.get_dependency(thd, sequence_number, commit_parent); + break; + case DEPENDENCY_TRACKING_WRITESET: + m_commit_order.get_dependency(thd, sequence_number, commit_parent); + m_writeset.get_dependency(thd, sequence_number, commit_parent); + break; + case DEPENDENCY_TRACKING_WRITESET_SESSION: + m_commit_order.get_dependency(thd, sequence_number, commit_parent); + m_writeset.get_dependency(thd, sequence_number, commit_parent); + m_writeset_session.get_dependency(thd, sequence_number, commit_parent); + break; + default: + DBUG_ASSERT(0); // blow up on debug + /* + Fallback to commit order on production builds. + */ + m_commit_order.get_dependency(thd, sequence_number, commit_parent); + } +} + +void +Transaction_dependency_tracker::tracking_mode_changed() +{ + Logical_clock max_committed_transaction= + m_commit_order.get_max_committed_transaction(); + int64 timestamp= max_committed_transaction.get_timestamp() + - max_committed_transaction.get_offset(); + + m_writeset.rotate(timestamp); +} + +/** + The method is to be executed right before committing time. + It must be invoked even if the transaction does not commit + to engine being merely logged into the binary log. + max_committed_transaction is updated with a greater timestamp + value. + As a side effect, the transaction context's sequence_number + is reset. + + @param thd a pointer to THD instance +*/ +void +Transaction_dependency_tracker::update_max_committed(THD *thd) +{ + Transaction_ctx *trn_ctx= thd->get_transaction(); + m_commit_order.update_max_committed(trn_ctx->sequence_number); + /* + sequence_number timestamp isn't needed anymore, so it's cleared off. + */ + trn_ctx->sequence_number= SEQ_UNINIT; + + DBUG_ASSERT(trn_ctx->last_committed == SEQ_UNINIT || + thd->commit_error == THD::CE_FLUSH_ERROR); +} + +int64 +Transaction_dependency_tracker::step() +{ + return m_commit_order.step(); +} + +void +Transaction_dependency_tracker::rotate() +{ + m_commit_order.rotate(); + /* + To make slave appliers be able to execute transactions in parallel + after rotation, set the minimum commit_parent to 1 after rotation. + */ + m_writeset.rotate(1); + if (current_thd) + current_thd->get_transaction()->sequence_number= 2; +} + +int64 Transaction_dependency_tracker::get_max_committed_timestamp() +{ + return m_commit_order.get_max_committed_transaction().get_timestamp(); +} + + diff --git a/sql/rpl_trx_tracking.h b/sql/rpl_trx_tracking.h new file mode 100644 index 000000000000..e12cbd07f26d --- /dev/null +++ b/sql/rpl_trx_tracking.h @@ -0,0 +1,232 @@ +#ifndef RPL_TRX_TRACKING_INCLUDED +/* Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + + 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, + 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */ + +#define RPL_TRX_TRACKING_INCLUDED + +//#include +#include + +#include "my_dbug.h" +#include "sql_class.h" + + +/** + Logical timestamp generator for logical timestamping binlog transactions. + A transaction is associated with two sequence numbers see + @c Transaction_ctx::last_committed and @c Transaction_ctx::sequence_number. + The class provides necessary interfaces including that of + generating a next consecutive value for the latter. +*/ +class Logical_clock +{ +private: + int64 state; + /* + Offset is subtracted from the actual "absolute time" value at + logging a replication event. That is the event holds logical + timestamps in the "relative" format. They are meaningful only in + the context of the current binlog. + The member is updated (incremented) per binary log rotation. + */ + int64 offset; +public: + Logical_clock(); + int64 step(); + int64 set_if_greater(int64 new_val); + int64 get_timestamp(); + int64 get_offset() { return offset; } + /* + Updates the offset. + This operation is invoked when binlog rotates and at that time + there can't any concurrent step() callers so no need to guard + the assignement. + */ + void update_offset(int64 new_offset) + { + DBUG_ASSERT(offset <= new_offset); + + offset= new_offset; + } +}; + +/** + Generate logical timestamps for MTS using COMMIT_ORDER + in the binlog-transaction-dependency-tracking option. +*/ +class Commit_order_trx_dependency_tracker +{ +public: + /** + Main function that gets the dependencies using the COMMIT_ORDER tracker. + + @param [in] thd THD of the caller. + @param [in,out] sequence_number sequence_number initialized and returned. + @param [in,out] commit_parent commit_parent to be returned. + */ + void get_dependency(THD *thd, int64 &sequence_number, int64 &commit_parent); + + void update_max_committed(int64 sequence_number); + + Logical_clock get_max_committed_transaction() + { + return m_max_committed_transaction; + } + + int64 step(); + void rotate(); + +private: + /* Committed transactions timestamp */ + Logical_clock m_max_committed_transaction; + + /* "Prepared" transactions timestamp */ + Logical_clock m_transaction_counter; +}; + +/** + Generate logical timestamps for MTS using WRITESET + in the binlog-transaction-dependency-tracking option. +*/ +class Writeset_trx_dependency_tracker +{ +public: + Writeset_trx_dependency_tracker(uint64 max_history_size): + m_opt_max_history_size(max_history_size), + m_writeset_history_start(0) + {} + + /** + Main function that gets the dependencies using the WRITESET tracker. + + @param [in] thd THD of the caller. + @param [in,out] sequence_number sequence_number initialized and returned. + @param [in,out] commit_parent commit_parent to be returned. + */ + void get_dependency(THD *thd, int64 &sequence_number, int64 &commit_parent); + + void rotate(int64 start); + + /* option opt_binlog_transaction_dependency_history_size */ + ulong m_opt_max_history_size; + +private: + /* + Monitor the last transaction with write-set to use as the minimal + commit parent when logical clock source is WRITE_SET, i.e., the most recent + transaction that is not in the history, or 0 when the history is empty. + + The m_writeset_history_start must to be set to 0 initially and whenever the + binlog_transaction_dependency_tracking variable is changed or the history + is cleared, so that it is updated to the first transaction for which the + dependencies are checked. + */ + int64 m_writeset_history_start; + + /* + Track the last transaction sequence number that changed each row + in the database, using row hashes from the writeset as the index. + */ + typedef std::map Writeset_history; + Writeset_history m_writeset_history; +}; + +/** + Generate logical timestamps for MTS using WRITESET_SESSION + in the binlog-transaction-dependency-tracking option. +*/ +class Writeset_session_trx_dependency_tracker +{ +public: + /** + Main function that gets the dependencies using the WRITESET_SESSION tracker. + + @param [in] thd THD of the caller. + @param [in,out] sequence_number sequence_number initialized and returned. + @param [in,out] commit_parent commit_parent to be returned. + */ + void get_dependency(THD *thd, int64 &sequence_number, int64 &commit_parent); +}; + +/** + Modes for parallel transaction dependency tracking +*/ +enum enum_binlog_transaction_dependency_tracking +{ + /** + Tracks dependencies based on the commit order of transactions. + The time intervals during which any transaction holds all its locks are + tracked (the interval ends just before storage engine commit, when locks + are released. For an autocommit transaction it begins just before storage + engine prepare. For BEGIN..COMMIT transactions it begins at the end of the + last statement before COMMIT). Two transactions are marked as + non-conflicting if their respective intervals overlap. In other words, + if trx1 appears before trx2 in the binlog, and trx2 had acquired all its + locks before trx1 released its locks, then trx2 is marked such that the + slave can schedule it in parallel with trx1. + */ + DEPENDENCY_TRACKING_COMMIT_ORDER= 0, + /** + Tracks dependencies based on the set of rows updated. Any two transactions + that change disjoint sets of rows, are said concurrent and non-contending. + */ + DEPENDENCY_TRACKING_WRITESET= 1, + /** + Tracks dependencies based on the set of rows updated per session. Any two + transactions that change disjoint sets of rows, on different sessions, + are said concurrent and non-contending. Transactions from the same session + are always said to be dependent, i.e., are never concurrent and + non-contending. + */ + DEPENDENCY_TRACKING_WRITESET_SESSION= 2 +}; + +/** + Dependency tracker is a container singleton that dispatches between the three + methods associated with the binlog-transaction-dependency-tracking option. + There is a singleton instance of each of these classes. +*/ +class Transaction_dependency_tracker +{ +public: + Transaction_dependency_tracker(): + m_opt_tracking_mode(DEPENDENCY_TRACKING_COMMIT_ORDER), m_writeset(25000) {} + + void get_dependency(THD *thd, int64 &sequence_number, int64 &commit_parent); + + void tracking_mode_changed(); + + void update_max_committed(THD *thd); + int64 get_max_committed_timestamp(); + + int64 step(); + void rotate(); + +public: + /* option opt_binlog_transaction_dependency_tracking */ + long m_opt_tracking_mode; + + Writeset_trx_dependency_tracker *get_writeset() + { + return &m_writeset; + } + +private: + Writeset_trx_dependency_tracker m_writeset; + Commit_order_trx_dependency_tracker m_commit_order; + Writeset_session_trx_dependency_tracker m_writeset_session; +}; + +#endif /* RPL_TRX_TRACKING_INCLUDED */ diff --git a/sql/rpl_write_set_handler.cc b/sql/rpl_write_set_handler.cc index e9e9311042ef..0064906530ec 100644 --- a/sql/rpl_write_set_handler.cc +++ b/sql/rpl_write_set_handler.cc @@ -21,6 +21,7 @@ #include "sql_class.h" // THD #include "sql_list.h" // List #include "table.h" // TABLE +#include "rpl_handler.h" #include "my_murmur3.h" // murmur3_32 #include "../extra/lz4/my_xxhash.h" // xxHash @@ -471,6 +472,9 @@ void add_pke(TABLE *table, THD *thd) Finally these value are hashed using the murmur hash function to prevent sending more for certification algorithm. */ + Rpl_transaction_write_set_ctx* ws_ctx= + thd->get_transaction()->get_transaction_write_set_ctx(); + int writeset_hashes_added= 0; if(table->key_info && (table->s->primary_key < MAX_KEY)) { @@ -605,6 +609,7 @@ void add_pke(TABLE *table, THD *thd) if (i == table->key_info[key_number].user_defined_key_parts) { generate_hash_pke(pke, collation_conversion_algorithm, thd); + writeset_hashes_added++; #ifndef DBUG_OFF write_sets.push_back(pke); #endif @@ -706,6 +711,7 @@ void add_pke(TABLE *table, THD *thd) pke_prefix.append(value_length); generate_hash_pke(pke_prefix, collation_conversion_algorithm, thd); + writeset_hashes_added++; #ifndef DBUG_OFF write_sets.push_back(pke_prefix); #endif @@ -715,6 +721,9 @@ void add_pke(TABLE *table, THD *thd) } } + if (table->file->referenced_by_foreign_key()) + ws_ctx->set_has_related_foreign_keys(); + my_free(pk_value); #ifndef DBUG_OFF @@ -722,5 +731,8 @@ void add_pke(TABLE *table, THD *thd) #endif } + if (writeset_hashes_added == 0) + ws_ctx->set_has_missing_keys(); + DBUG_VOID_RETURN; } diff --git a/sql/sql_class.cc b/sql/sql_class.cc index 6bb2e06f8e0e..d8bd3c9b9df0 100644 --- a/sql/sql_class.cc +++ b/sql/sql_class.cc @@ -1584,6 +1584,8 @@ void THD::init(void) owned_gtid.clear(); owned_sid.clear(); owned_gtid.dbug_print(NULL, "set owned_gtid (clear) in THD::init"); + + rpl_thd_ctx.dependency_tracker_ctx().set_last_session_sequence_number(0); } diff --git a/sql/sys_vars.cc b/sql/sys_vars.cc index 5b1ab5f55cbe..0452ae55c2dd 100644 --- a/sql/sys_vars.cc +++ b/sql/sys_vars.cc @@ -1873,6 +1873,18 @@ static bool transaction_write_set_check(sys_var *self, THD *thd, set_var *var) var->var->name.str); return true; } + /* + Disallow changing variable 'transaction_write_set_extraction' while + binlog_transaction_dependency_tracking is different from COMMIT_ORDER. + */ + if (mysql_bin_log.m_dependency_tracker.m_opt_tracking_mode + != DEPENDENCY_TRACKING_COMMIT_ORDER) + { + my_error(ER_WRONG_USAGE, MYF(0), + "transaction_write_set_extraction (changed)", + "binlog_transaction_dependency_tracking (!= COMMIT_ORDER)"); + return true; + } return false; } @@ -3548,6 +3560,68 @@ static Sys_var_enum Mts_parallel_type( NOT_IN_BINLOG, ON_CHECK(check_slave_stopped), ON_UPDATE(NULL)); +static bool check_binlog_transaction_dependency_tracking(sys_var *self, THD *thd, set_var *var) +{ + if (global_system_variables.transaction_write_set_extraction == HASH_ALGORITHM_OFF + && var->save_result.ulonglong_value != DEPENDENCY_TRACKING_COMMIT_ORDER) + { + my_error(ER_WRONG_USAGE, MYF(0), + "binlog_transaction_dependency_tracking (!= COMMIT_ORDER)", + "transaction_write_set_extraction (= OFF)"); + + return true; + } + return false; +} + +static bool update_binlog_transaction_dependency_tracking(sys_var* var, THD* thd, enum_var_type v) +{ + /* + the writeset_history_start needs to be set to 0 whenever there is a + change in the transaction dependency source so that WS and COMMIT + transition smoothly. + */ + mysql_bin_log.m_dependency_tracker.tracking_mode_changed(); + return false; +} + +void PolyLock_lock_log::rdlock() +{ + mysql_mutex_lock(mysql_bin_log.get_log_lock()); +} + +void PolyLock_lock_log::wrlock() +{ + mysql_mutex_lock(mysql_bin_log.get_log_lock()); +} + +void PolyLock_lock_log::unlock() +{ + mysql_mutex_unlock(mysql_bin_log.get_log_lock()); +} + +static PolyLock_lock_log PLock_log; +static const char *opt_binlog_transaction_dependency_tracking_names[]= + {"COMMIT_ORDER", "WRITESET", "WRITESET_SESSION", NullS}; +static Sys_var_enum Binlog_transaction_dependency_tracking( + "binlog_transaction_dependency_tracking", + "Selects the source of dependency information from which to " + "assess which transactions can be executed in parallel by the " + "slave's multi-threaded applier. " + "Possible values are COMMIT_ORDER, WRITESET and WRITESET_SESSION.", + GLOBAL_VAR(mysql_bin_log.m_dependency_tracker.m_opt_tracking_mode), + CMD_LINE(REQUIRED_ARG), opt_binlog_transaction_dependency_tracking_names, + DEFAULT(DEPENDENCY_TRACKING_COMMIT_ORDER), &PLock_log, + NOT_IN_BINLOG, ON_CHECK(check_binlog_transaction_dependency_tracking), + ON_UPDATE(update_binlog_transaction_dependency_tracking)); +static Sys_var_ulong Binlog_transaction_dependency_history_size( + "binlog_transaction_dependency_history_size", + "Maximum number of rows to keep in the writeset history.", + GLOBAL_VAR(mysql_bin_log.m_dependency_tracker.get_writeset()->m_opt_max_history_size), + CMD_LINE(REQUIRED_ARG, 0), VALID_RANGE(1, 1000000), DEFAULT(25000), + BLOCK_SIZE(1), &PLock_log, NOT_IN_BINLOG, ON_CHECK(NULL), + ON_UPDATE(NULL)); + static Sys_var_mybool Sys_slave_preserve_commit_order( "slave_preserve_commit_order", "Force slave workers to make commits in the same order as on the master. " diff --git a/sql/sys_vars_shared.h b/sql/sys_vars_shared.h index 7936f7d13381..10fc19b9eea4 100644 --- a/sql/sys_vars_shared.h +++ b/sql/sys_vars_shared.h @@ -1,7 +1,7 @@ #ifndef SYS_VARS_SHARED_INCLUDED #define SYS_VARS_SHARED_INCLUDED -/* Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2002, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -66,6 +66,14 @@ class PolyLock_rwlock: public PolyLock void unlock() { mysql_rwlock_unlock(rwlock); } }; +class PolyLock_lock_log: public PolyLock +{ +public: + void rdlock(); + void wrlock(); + void unlock(); +}; + class AutoWLock { PolyLock *lock; From b827fe48e3efe138a20ac6e554e62513d24da2af Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Tue, 27 Feb 2018 11:54:51 +0100 Subject: [PATCH 0614/1221] From 8c60bf5fffe30255cc496dd272ccdaec3148cd4f Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Mon, 26 Feb 2018 16:07:55 +0100 Subject: [PATCH 0615/1221] PS-1125: mysqldump --innodb-optimize-keys will move all CONSTRAINT/FOREIGN KEY declarations to ALTER TABLE This commit also fixes PS-3863. It removes fixes for PS-605 which are not needed now. --- client/mysqldump.c | 149 +++++--------- ...cona_mysqldump_innodb_optimize_keys.result | 187 +++++++++++++++++- ...ercona_mysqldump_innodb_optimize_keys.test | 99 +++++++++- 3 files changed, 328 insertions(+), 107 deletions(-) diff --git a/client/mysqldump.c b/client/mysqldump.c index 42bc1227819b..e14c8c71fde7 100644 --- a/client/mysqldump.c +++ b/client/mysqldump.c @@ -88,7 +88,8 @@ typedef enum { KEY_TYPE_NONE, KEY_TYPE_PRIMARY, KEY_TYPE_UNIQUE, - KEY_TYPE_NON_UNIQUE + KEY_TYPE_NON_UNIQUE, + KEY_TYPE_CONSTRAINT } key_type_t; @@ -203,7 +204,8 @@ TYPELIB compatible_mode_typelib= {array_elements(compatible_mode_names) - 1, HASH ignore_table; -LIST *skipped_keys_list; +static LIST *skipped_keys_list = NULL; +static LIST *alter_constraints_list = NULL; static struct my_option my_long_options[] = { @@ -2584,42 +2586,6 @@ static my_bool contains_autoinc_column(const char *autoinc_column, } -/* - Find a node in the skipped keys list whose name matches a quoted - identifier specified as 'id_from' and 'id_to' arguments. -*/ - -static LIST *find_matching_skipped_key(const char *id_from, - const char *id_to) -{ - LIST *list; - size_t id_len; - - id_len= id_to - id_from + 1; - DBUG_ASSERT(id_len > 2); - - for (list= skipped_keys_list; list; list= list_rest(list)) - { - const char *keydef; - const char *keyname_from; - const char *keyname_to; - size_t keyname_len; - - keydef= list->data; - - if ((keyname_from= parse_quoted_identifier(keydef, &keyname_to))) - { - keyname_len= keyname_to - keyname_from + 1; - - if (id_len == keyname_len && - !strncmp(keyname_from, id_from, id_len)) - return list; - } - } - - return NULL; -} - /* Remove secondary/foreign key definitions from a given SHOW CREATE TABLE string and store them into a temporary list to be used later. @@ -2635,8 +2601,8 @@ static LIST *find_matching_skipped_key(const char *id_from, Stores all lines starting with "KEY" or "UNIQUE KEY" into skipped_keys_list and removes them from the input string. - Ignoring FOREIGN KEYS constraints when creating the table is ok, because - mysqldump sets foreign_key_checks to 0 anyway. + Stores all CONSTRAINT/FOREIGN KEYS declarations into + alter_constraints_list and removes them from the input string. */ static void skip_secondary_keys(char *create_str, my_bool has_pk) @@ -2647,9 +2613,6 @@ static void skip_secondary_keys(char *create_str, my_bool has_pk) char *autoinc_column= NULL; my_bool has_autoinc= FALSE; key_type_t type; - const char *constr_from; - const char *constr_to; - LIST *keydef_node; my_bool keys_processed= FALSE; strend= create_str + strlen(create_str); @@ -2670,45 +2633,8 @@ static void skip_secondary_keys(char *create_str, my_bool has_pk) c= *tmp; *tmp= '\0'; /* so strstr() only processes the current line */ - if (!strncmp(ptr, "CONSTRAINT ", sizeof("CONSTRAINT ") - 1) && - (constr_from= parse_quoted_identifier(ptr, &constr_to)) && - (keydef_node= find_matching_skipped_key(constr_from, constr_to))) - { - char *keydef; - size_t keydef_len; - - /* - There's a skipped key with the same name as the constraint name. Let's - put it back before the current constraint definition and remove from the - skipped keys list. - */ - keydef= keydef_node->data; - /* - The original key definition had the following format - " ,\n" - (" " (two spaces) followed by key definition, followed by ",\n"). - For instance " KEY `a` (`a`),\n". - Therefore, when the definition was removed, the data was shifted by - strlen(keydef) + 4 characters. - */ - keydef_len= strlen(keydef) + 4; - - memmove(orig_ptr + keydef_len, orig_ptr, strend - orig_ptr + 1); - memcpy(orig_ptr, " ", 2); - memcpy(orig_ptr + 2, keydef, keydef_len - 4); - memcpy(orig_ptr + keydef_len - 2, ",\n", 2); - - skipped_keys_list= list_delete(skipped_keys_list, keydef_node); - my_free(keydef); - my_free(keydef_node); - - strend+= keydef_len; - orig_ptr+= keydef_len; - ptr+= keydef_len; - tmp+= keydef_len; - - type= KEY_TYPE_NONE; - } + if (!strncmp(ptr, "CONSTRAINT ", sizeof("CONSTRAINT ") - 1)) + type= KEY_TYPE_CONSTRAINT; else if (!strncmp(ptr, "UNIQUE KEY ", sizeof("UNIQUE KEY ") - 1)) type= KEY_TYPE_UNIQUE; else if (!strncmp(ptr, "KEY ", sizeof("KEY ") - 1)) @@ -2722,9 +2648,9 @@ static void skip_secondary_keys(char *create_str, my_bool has_pk) contains_autoinc_column(autoinc_column, ptr, type) : FALSE; /* Is it a secondary index definition? */ - if (c == '\n' && + if (c == '\n' && !has_autoinc && ((type == KEY_TYPE_UNIQUE && (pk_processed || !has_pk)) || - type == KEY_TYPE_NON_UNIQUE) && !has_autoinc) + type == KEY_TYPE_NON_UNIQUE || type == KEY_TYPE_CONSTRAINT)) { char *data, *end= tmp - 1; @@ -2732,7 +2658,11 @@ static void skip_secondary_keys(char *create_str, my_bool has_pk) if (*end == ',') end--; data= my_strndup(ptr, end - ptr + 1, MYF(MY_FAE)); - skipped_keys_list= list_cons(data, skipped_keys_list); + + if (type == KEY_TYPE_CONSTRAINT) + alter_constraints_list= list_cons(data, alter_constraints_list); + else + skipped_keys_list= list_cons(data, skipped_keys_list); memmove(orig_ptr, tmp + 1, strend - tmp); ptr= orig_ptr; @@ -3781,27 +3711,56 @@ static void dump_skipped_keys(const char *table) { uint keys; - if (!skipped_keys_list) + if (!skipped_keys_list && !alter_constraints_list) return; verbose_msg("-- Dumping delayed secondary index definitions for table %s\n", table); - skipped_keys_list= list_reverse(skipped_keys_list); - fprintf(md_result_file, "ALTER TABLE %s ", table); - for (keys= list_length(skipped_keys_list); keys > 0; keys--) + if (skipped_keys_list) + { + uint sk_list_len= list_length(skipped_keys_list); + skipped_keys_list= list_reverse(skipped_keys_list); + fprintf(md_result_file, "ALTER TABLE %s%s", table, + (sk_list_len > 1) ? "\n" : " "); + + for (keys= sk_list_len; keys > 0; keys--) + { + LIST *node= skipped_keys_list; + char *def= node->data; + + fprintf(md_result_file, "%sADD %s%s", (sk_list_len > 1) ? " " : "", + def, (keys > 1) ? ",\n" : ";\n"); + + skipped_keys_list= list_delete(skipped_keys_list, node); + my_free(def); + my_free(node); + } + } + + if (alter_constraints_list) { - LIST *node= skipped_keys_list; - char *def= node->data; + uint ac_list_len= list_length(alter_constraints_list); + alter_constraints_list= list_reverse(alter_constraints_list); + fprintf(md_result_file, "ALTER TABLE %s%s", table, + (ac_list_len > 1) ? "\n" : " "); - fprintf(md_result_file, "ADD %s%s", def, (keys > 1) ? ", " : ";\n"); + for (keys= ac_list_len; keys > 0; keys--) + { + LIST *node= alter_constraints_list; + char *def= node->data; - skipped_keys_list= list_delete(skipped_keys_list, node); - my_free(def); - my_free(node); + fprintf(md_result_file, "%sADD %s%s", (ac_list_len > 1) ? " " : "", + def, (keys > 1) ? ",\n" : ";\n"); + + alter_constraints_list= list_delete(alter_constraints_list, node); + my_free(def); + my_free(node); + } } DBUG_ASSERT(skipped_keys_list == NULL); + DBUG_ASSERT(alter_constraints_list == NULL); } diff --git a/mysql-test/r/percona_mysqldump_innodb_optimize_keys.result b/mysql-test/r/percona_mysqldump_innodb_optimize_keys.result index f85ecde5a6ec..b319afcb8b6b 100644 --- a/mysql-test/r/percona_mysqldump_innodb_optimize_keys.result +++ b/mysql-test/r/percona_mysqldump_innodb_optimize_keys.result @@ -71,15 +71,18 @@ CREATE TABLE `t1` ( `a` int(11) DEFAULT NULL, `b` varchar(255) DEFAULT NULL, `c` decimal(10,3) DEFAULT NULL, - PRIMARY KEY (`id`), - CONSTRAINT `t1_ibfk_1` FOREIGN KEY (`a`) REFERENCES `t2` (`a`) ON DELETE CASCADE + PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; LOCK TABLES `t1` WRITE; /*!40000 ALTER TABLE `t1` DISABLE KEYS */; INSERT INTO `t1` VALUES (1,0,'0',0.000),(2,1,'1',1.100),(3,2,'2',2.200); -ALTER TABLE `t1` ADD UNIQUE KEY `uniq` (`c`,`a`), ADD KEY `b` (`b`), ADD KEY `a` (`a`); +ALTER TABLE `t1` + ADD UNIQUE KEY `uniq` (`c`,`a`), + ADD KEY `b` (`b`), + ADD KEY `a` (`a`); +ALTER TABLE `t1` ADD CONSTRAINT `t1_ibfk_1` FOREIGN KEY (`a`) REFERENCES `t2` (`a`) ON DELETE CASCADE; /*!40000 ALTER TABLE `t1` ENABLE KEYS */; UNLOCK TABLES; DROP TABLE IF EXISTS `t2`; @@ -342,8 +345,7 @@ DROP TABLE IF EXISTS `t2`; CREATE TABLE `t2` ( `id` int(11) NOT NULL AUTO_INCREMENT, `a` int(11) NOT NULL, - PRIMARY KEY (`id`), - CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`a`) REFERENCES `t2` (`id`) + PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; @@ -351,6 +353,7 @@ LOCK TABLES `t2` WRITE; /*!40000 ALTER TABLE `t2` DISABLE KEYS */; INSERT INTO `t2` VALUES (1,1),(2,2),(3,3); ALTER TABLE `t2` ADD KEY `a` (`a`); +ALTER TABLE `t2` ADD CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`a`) REFERENCES `t2` (`id`); /*!40000 ALTER TABLE `t2` ENABLE KEYS */; UNLOCK TABLES; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; @@ -410,7 +413,10 @@ CREATE TABLE `t1` ( LOCK TABLES `t1` WRITE; /*!40000 ALTER TABLE `t1` DISABLE KEYS */; -ALTER TABLE `t1` ADD KEY `k1` (```id`,`id`), ADD KEY `k2` (```id`,`id```), ADD KEY `k4` (`id`,`id```); +ALTER TABLE `t1` + ADD KEY `k1` (```id`,`id`), + ADD KEY `k2` (```id`,`id```), + ADD KEY `k4` (`id`,`id```); /*!40000 ALTER TABLE `t1` ENABLE KEYS */; UNLOCK TABLES; DROP TABLE IF EXISTS `t2`; @@ -424,7 +430,9 @@ CREATE TABLE `t2` ( LOCK TABLES `t2` WRITE; /*!40000 ALTER TABLE `t2` DISABLE KEYS */; -ALTER TABLE `t2` ADD KEY `k1` (`id`), ADD KEY `k2` (`id`); +ALTER TABLE `t2` + ADD KEY `k1` (`id`), + ADD KEY `k2` (`id`); /*!40000 ALTER TABLE `t2` ENABLE KEYS */; UNLOCK TABLES; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; @@ -482,6 +490,7 @@ PRIMARY KEY (`id`), KEY `a` (`a`), CONSTRAINT `a` FOREIGN KEY (`a`) REFERENCES `t1` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; +INSERT INTO t1(a) VALUES (1), (2), (3); ###################################### /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; @@ -500,14 +509,65 @@ DROP TABLE IF EXISTS `t1`; CREATE TABLE `t1` ( `id` int(11) NOT NULL AUTO_INCREMENT, `a` int(11) NOT NULL, - PRIMARY KEY (`id`), - KEY `a` (`a`), - CONSTRAINT `a` FOREIGN KEY (`a`) REFERENCES `t1` (`id`) + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +LOCK TABLES `t1` WRITE; +/*!40000 ALTER TABLE `t1` DISABLE KEYS */; +INSERT INTO `t1` VALUES (1,1),(2,2),(3,3); +ALTER TABLE `t1` ADD KEY `a` (`a`); +ALTER TABLE `t1` ADD CONSTRAINT `a` FOREIGN KEY (`a`) REFERENCES `t1` (`id`); +/*!40000 ALTER TABLE `t1` ENABLE KEYS */; +UNLOCK TABLES; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + +###################################### +DROP TABLE t1; +CREATE TABLE `t1` ( +`id` int(11) NOT NULL DEFAULT '0', +`a` int(11) DEFAULT NULL, +PRIMARY KEY (`id`), +KEY `a_index` (`a`), +CONSTRAINT `t1_const` FOREIGN KEY (`a`) REFERENCES `t1` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +INSERT INTO t1 VALUES (1,1), (2,2), (3,3); +INSERT INTO t1(`id`) VALUES (4); +###################################### + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; +DROP TABLE IF EXISTS `t1`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `t1` ( + `id` int(11) NOT NULL DEFAULT '0', + `a` int(11) DEFAULT NULL, + PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; LOCK TABLES `t1` WRITE; /*!40000 ALTER TABLE `t1` DISABLE KEYS */; +INSERT INTO `t1` VALUES (4,NULL),(1,1),(2,2),(3,3); +ALTER TABLE `t1` ADD KEY `a_index` (`a`); +ALTER TABLE `t1` ADD CONSTRAINT `t1_const` FOREIGN KEY (`a`) REFERENCES `t1` (`id`); /*!40000 ALTER TABLE `t1` ENABLE KEYS */; UNLOCK TABLES; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; @@ -571,3 +631,110 @@ UNLOCK TABLES; ###################################### DROP TABLE t1; +CREATE TABLE `t1` ( +`id` int(11) DEFAULT NULL, +`a` int(11) DEFAULT NULL, +KEY (`id`), +FOREIGN KEY (`a`) REFERENCES `t1` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +INSERT INTO t1 VALUES (1,1), (2,2), (3,3); +INSERT INTO t1(`id`) VALUES (4); +INSERT INTO t1(`a`) VALUES (4); +###################################### + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; +DROP TABLE IF EXISTS `t1`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `t1` ( + `id` int(11) DEFAULT NULL, + `a` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +LOCK TABLES `t1` WRITE; +/*!40000 ALTER TABLE `t1` DISABLE KEYS */; +INSERT INTO `t1` VALUES (1,1),(2,2),(3,3),(4,NULL),(NULL,4); +ALTER TABLE `t1` + ADD KEY `id` (`id`), + ADD KEY `a` (`a`); +ALTER TABLE `t1` ADD CONSTRAINT `t1_ibfk_1` FOREIGN KEY (`a`) REFERENCES `t1` (`id`); +/*!40000 ALTER TABLE `t1` ENABLE KEYS */; +UNLOCK TABLES; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + +###################################### +DROP TABLE t1; +CREATE TABLE `t1` ( +`id` int(11) NOT NULL DEFAULT '0', +`a` int(11) DEFAULT NULL, +`b` int(11) DEFAULT NULL, +PRIMARY KEY (`id`), +FOREIGN KEY (`a`) REFERENCES `t1` (`id`), +FOREIGN KEY (`b`) REFERENCES `t1` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +INSERT INTO t1 VALUES (1,1,1), (2,2,2), (3,3,3); +INSERT INTO t1(`id`) VALUES (4); +###################################### + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; +DROP TABLE IF EXISTS `t1`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `t1` ( + `id` int(11) NOT NULL DEFAULT '0', + `a` int(11) DEFAULT NULL, + `b` int(11) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +LOCK TABLES `t1` WRITE; +/*!40000 ALTER TABLE `t1` DISABLE KEYS */; +INSERT INTO `t1` VALUES (1,1,1),(2,2,2),(3,3,3),(4,NULL,NULL); +ALTER TABLE `t1` + ADD KEY `a` (`a`), + ADD KEY `b` (`b`); +ALTER TABLE `t1` + ADD CONSTRAINT `t1_ibfk_1` FOREIGN KEY (`a`) REFERENCES `t1` (`id`), + ADD CONSTRAINT `t1_ibfk_2` FOREIGN KEY (`b`) REFERENCES `t1` (`id`); +/*!40000 ALTER TABLE `t1` ENABLE KEYS */; +UNLOCK TABLES; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + +###################################### +DROP TABLE t1; diff --git a/mysql-test/t/percona_mysqldump_innodb_optimize_keys.test b/mysql-test/t/percona_mysqldump_innodb_optimize_keys.test index fdb4e19e7eb4..beffcfb50d82 100644 --- a/mysql-test/t/percona_mysqldump_innodb_optimize_keys.test +++ b/mysql-test/t/percona_mysqldump_innodb_optimize_keys.test @@ -245,8 +245,8 @@ INSERT INTO t1 VALUES (1, 1234); DROP TABLE t1; ############################################################################# -# Bug #1081016: mysqldump --innodb-optimize-keys may produce invalid SQL with -# explicitly named FK constraints +# Bug #1081016 (PS-605): mysqldump --innodb-optimize-keys may produce invalid +# SQL with explicitly named FK constraints ############################################################################# CREATE TABLE `t1` ( @@ -257,6 +257,38 @@ CREATE TABLE `t1` ( CONSTRAINT `a` FOREIGN KEY (`a`) REFERENCES `t1` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; +INSERT INTO t1(a) VALUES (1), (2), (3); + +--exec $MYSQL_DUMP --skip-comments --innodb-optimize-keys test t1 >$file + +--echo ###################################### +--cat_file $file +--echo ###################################### + +# Check that the resulting dump can be imported back + +--exec $MYSQL test < $file + +--remove_file $file + +DROP TABLE t1; + +############################################################################# +# Bug #1081016 (PS-605): mysqldump --innodb-optimize-keys may produce invalid +# SQL with explicitly named FK constraints +############################################################################# + +CREATE TABLE `t1` ( + `id` int(11) NOT NULL DEFAULT '0', + `a` int(11) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `a_index` (`a`), + CONSTRAINT `t1_const` FOREIGN KEY (`a`) REFERENCES `t1` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +INSERT INTO t1 VALUES (1,1), (2,2), (3,3); +INSERT INTO t1(`id`) VALUES (4); + --exec $MYSQL_DUMP --skip-comments --innodb-optimize-keys test t1 >$file --echo ###################################### @@ -298,5 +330,68 @@ PARTITIONS 2*/; --remove_file $file DROP TABLE t1; + +############################################################################# +# Bug PS-1125: mysqldump --innodb-optimize-keys mysqldump produces incorrect +# dumps with self-referenced foreign keys +############################################################################# + +CREATE TABLE `t1` ( + `id` int(11) DEFAULT NULL, + `a` int(11) DEFAULT NULL, + KEY (`id`), + FOREIGN KEY (`a`) REFERENCES `t1` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +INSERT INTO t1 VALUES (1,1), (2,2), (3,3); +INSERT INTO t1(`id`) VALUES (4); +INSERT INTO t1(`a`) VALUES (4); + +--exec $MYSQL_DUMP --skip-comments --innodb-optimize-keys test t1 >$file + +--echo ###################################### +--cat_file $file +--echo ###################################### + +# Check that the resulting dump can be imported back + +--exec $MYSQL test < $file + +--remove_file $file + +DROP TABLE t1; + +############################################################################# +# Bug PS-3863: mysqldump --innodb-optimize-keys may produce invalid SQL with +# implicitly named FK constraints +############################################################################# + +CREATE TABLE `t1` ( + `id` int(11) NOT NULL DEFAULT '0', + `a` int(11) DEFAULT NULL, + `b` int(11) DEFAULT NULL, + PRIMARY KEY (`id`), + FOREIGN KEY (`a`) REFERENCES `t1` (`id`), + FOREIGN KEY (`b`) REFERENCES `t1` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +INSERT INTO t1 VALUES (1,1,1), (2,2,2), (3,3,3); +INSERT INTO t1(`id`) VALUES (4); + +--exec $MYSQL_DUMP --skip-comments --innodb-optimize-keys test t1 >$file + +--echo ###################################### +--cat_file $file +--echo ###################################### + +# Check that the resulting dump can be imported back + +--exec $MYSQL test < $file + +--remove_file $file + +DROP TABLE t1; + + # Wait till we reached the initial number of concurrent sessions --source include/wait_until_count_sessions.inc From fe39617812cb0ae2ae0eb10d8124ed58142c2fdd Mon Sep 17 00:00:00 2001 From: Sergei Glushchenko Date: Tue, 19 Sep 2017 05:09:48 +0700 Subject: [PATCH 0616/1221] PS-3819: Encrypt temporary files generated for online DDL When InnoDB needs to create temporary table for online alter operation on encrypted table, temp table will be encrypted as well. New read-only global variable added `innodb_encrypt_online_alter_logs'. When it is `ON', temporary merge files and online alter logs are encrypted with the random key. Each block encrypted with AES256 in CBC mode with IV consisting of encrypted space_id+offset. This patch also turns on encryption for temporary InnoDB tables used for online alter operation if destination table for such operation has an encryption option. --- include/my_thread_os_id.h | 4 +- .../innodb_online_alter_encryption.inc | 77 +++++ .../include/innodb_row_log_encryption.inc | 82 +++++ .../r/innodb_online_alter_encryption.result | 131 ++++++++ .../innodb/r/innodb_row_log_encryption.result | 35 +++ .../innodb_online_alter_encryption-master.opt | 4 + .../t/innodb_online_alter_encryption.test | 8 + .../t/innodb_row_log_encryption-master.opt | 5 + .../innodb/t/innodb_row_log_encryption.test | 8 + .../suite/perfschema/t/show_sanity.test | 5 + ...odb_encrypt_online_alter_logs_basic.result | 11 + ...nnodb_encrypt_online_alter_logs_basic.test | 14 + .../innodb_online_alter_encryption-master.opt | 3 + .../mtr/innodb_online_alter_encryption.result | 132 ++++++++ .../mtr/innodb_online_alter_encryption.test | 25 ++ .../mtr/innodb_row_log_encryption-master.opt | 4 + .../mtr/innodb_row_log_encryption.result | 36 +++ .../tests/mtr/innodb_row_log_encryption.test | 25 ++ storage/innobase/handler/ha_innodb.cc | 14 + storage/innobase/handler/handler0alter.cc | 28 +- storage/innobase/include/row0ftsort.h | 4 + storage/innobase/include/row0log.h | 46 +++ storage/innobase/include/row0merge.h | 61 ++-- storage/innobase/include/srv0srv.h | 19 ++ storage/innobase/row/row0ftsort.cc | 54 +++- storage/innobase/row/row0log.cc | 264 +++++++++++++++- storage/innobase/row/row0merge.cc | 289 +++++++++++++----- storage/innobase/srv/srv0srv.cc | 13 + storage/innobase/srv/srv0start.cc | 3 + 29 files changed, 1284 insertions(+), 120 deletions(-) create mode 100644 mysql-test/include/innodb_online_alter_encryption.inc create mode 100644 mysql-test/include/innodb_row_log_encryption.inc create mode 100644 mysql-test/suite/innodb/r/innodb_online_alter_encryption.result create mode 100644 mysql-test/suite/innodb/r/innodb_row_log_encryption.result create mode 100644 mysql-test/suite/innodb/t/innodb_online_alter_encryption-master.opt create mode 100644 mysql-test/suite/innodb/t/innodb_online_alter_encryption.test create mode 100644 mysql-test/suite/innodb/t/innodb_row_log_encryption-master.opt create mode 100644 mysql-test/suite/innodb/t/innodb_row_log_encryption.test create mode 100644 mysql-test/suite/sys_vars/r/innodb_encrypt_online_alter_logs_basic.result create mode 100644 mysql-test/suite/sys_vars/t/innodb_encrypt_online_alter_logs_basic.test create mode 100644 plugin/keyring_vault/tests/mtr/innodb_online_alter_encryption-master.opt create mode 100644 plugin/keyring_vault/tests/mtr/innodb_online_alter_encryption.result create mode 100644 plugin/keyring_vault/tests/mtr/innodb_online_alter_encryption.test create mode 100644 plugin/keyring_vault/tests/mtr/innodb_row_log_encryption-master.opt create mode 100644 plugin/keyring_vault/tests/mtr/innodb_row_log_encryption.result create mode 100644 plugin/keyring_vault/tests/mtr/innodb_row_log_encryption.test diff --git a/include/my_thread_os_id.h b/include/my_thread_os_id.h index a0a2de31614d..97105dac8ee9 100644 --- a/include/my_thread_os_id.h +++ b/include/my_thread_os_id.h @@ -55,7 +55,9 @@ static inline my_thread_os_id_t my_thread_os_id() and to not use SYS_gettid on Mac OSX, as SYS_gettid has a different meaning compared to linux gettid(). */ - return syscall(SYS_thread_selfid); + uint64_t tid64; + pthread_threadid_np(NULL, &tid64); + return (my_thread_os_id_t)tid64; #else #ifdef HAVE_SYS_GETTID /* diff --git a/mysql-test/include/innodb_online_alter_encryption.inc b/mysql-test/include/innodb_online_alter_encryption.inc new file mode 100644 index 000000000000..066f78508879 --- /dev/null +++ b/mysql-test/include/innodb_online_alter_encryption.inc @@ -0,0 +1,77 @@ +--source include/have_innodb.inc +--source include/not_embedded.inc + +# Restart the server with keyring loaded +--let $restart_parameters="$KEYRING_RESTART_PARAM" +--let $restart_hide_args=1 +--source include/restart_mysqld.inc + +CREATE TABLE t1 (id INT NOT NULL PRIMARY KEY, a VARCHAR(255)) ENGINE=InnoDB ENCRYPTION='y'; +CREATE TABLE t2 (id INT NOT NULL PRIMARY KEY, a VARCHAR(255)) ENGINE=InnoDB; +CREATE TABLE t3 (id INT, a VARCHAR(255)) ENGINE=InnoDB ENCRYPTION='y'; +CREATE TABLE t4 (id INT, a VARCHAR(255)) ENGINE=InnoDB; +CREATE TABLE t5 (id INT NOT NULL PRIMARY KEY, a TEXT(500), b VARCHAR(255), FULLTEXT(b)) ENGINE=InnoDB ENCRYPTION='y'; +CREATE TABLE t6 (id INT, a TEXT(500), b VARCHAR(255), FULLTEXT(b)) ENGINE=InnoDB; +CREATE TABLE t7 (id INT NOT NULL PRIMARY KEY, a VARCHAR(255)) ENGINE=InnoDB ROW_FORMAT=COMPRESSED ENCRYPTION='y'; + +DELIMITER //; +CREATE PROCEDURE innodb_insert_proc (repeat_count INT) +BEGIN + DECLARE current_num INT; + SET current_num = 0; + WHILE current_num < repeat_count DO + INSERT INTO t1 VALUES (current_num, REPEAT('foobar', 42)); + INSERT INTO t2 VALUES (current_num, REPEAT('temp', 42)); + INSERT INTO t3 VALUES (current_num, REPEAT('barfoo', 42)); + INSERT INTO t4 VALUES (current_num, REPEAT('repeat', 42)); + INSERT INTO t5 VALUES (current_num, SUBSTRING('A BC DEF GHIJ KLM NOPQRS TUV WXYZ 012 3456789', RAND() * 36 + 1, 100), REPEAT('author new', 22)); + INSERT INTO t6 VALUES (current_num, SUBSTRING('A BC DEF GHIJ KLM NOPQRS TUV WXYZ 012 3456789', RAND() * 36 + 1, 100), REPEAT('mangled old', 22)); + INSERT INTO t7 VALUES (current_num, REPEAT('mysql', 42)); + SET current_num = current_num + 1; + END WHILE; +END// +DELIMITER ;// +COMMIT; + +SET autocommit=0; +CALL innodb_insert_proc(15000); +COMMIT; +SET autocommit=1; + +ALTER TABLE t1 ADD COLUMN b INT DEFAULT 2; +ALTER TABLE t2 ADD COLUMN b INT DEFAULT 2; +ALTER TABLE t7 ADD COLUMN b INT DEFAULT 2; +ALTER TABLE t1 ADD KEY a(a), ADD KEY b(b); +ALTER TABLE t2 ADD KEY a(a), ADD KEY b(b); +ALTER TABLE t3 ADD COLUMN c INT DEFAULT 5; +ALTER TABLE t4 ADD COLUMN c INT DEFAULT 5; +ALTER TABLE t3 ADD KEY (a), ADD KEY c(c); +ALTER TABLE t4 ADD KEY (a), ADD KEY c(c); +ALTER TABLE t5 ADD FULLTEXT(a); +ALTER TABLE t6 ADD FULLTEXT(a); +ALTER TABLE t7 ADD KEY a(a), ADD KEY b(b); + +SHOW CREATE TABLE t1; +SHOW CREATE TABLE t2; +SHOW CREATE TABLE t3; +SHOW CREATE TABLE t4; +SHOW CREATE TABLE t5; +SHOW CREATE TABLE t6; +SHOW CREATE TABLE t7; + +--echo # Restarting server +let $restart_parameters = restart: $KEYRING_PLUGIN_OPT $KEYRING_PLUGIN_LOAD --keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR $KEYRING_PLUGIN keyring_file.so +--source include/restart_mysqld.inc +--echo # Done restarting server + +SELECT COUNT(1) FROM t1; +SELECT COUNT(1) FROM t2; +SELECT COUNT(1) FROM t3; +SELECT COUNT(1) FROM t4; +SELECT COUNT(1) FROM t5; +SELECT COUNT(1) FROM t6; +SELECT COUNT(1) FROM t7; + +DROP PROCEDURE innodb_insert_proc; +DROP TABLE t1, t2, t3, t4, t5, t6, t7; diff --git a/mysql-test/include/innodb_row_log_encryption.inc b/mysql-test/include/innodb_row_log_encryption.inc new file mode 100644 index 000000000000..ca709cf5548c --- /dev/null +++ b/mysql-test/include/innodb_row_log_encryption.inc @@ -0,0 +1,82 @@ +--source include/have_innodb.inc +--source include/not_embedded.inc +--source include/have_debug_sync.inc +--source include/have_perfschema.inc + +# Restart the server with keyring loaded +--let $restart_parameters="$KEYRING_RESTART_PARAM" +--let $restart_hide_args=1 +--source include/restart_mysqld.inc + +--source include/count_sessions.inc + +# +# Create a table that will be encrypted and put some sensitive data to it (credit card numbers) +# + +CREATE TABLE t1(id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, credit_card VARCHAR(200), private VARCHAR(50)) ENGINE=InnoDB ENCRYPTION='y'; + +let $rows = 15000; +--disable_query_log +BEGIN; +while ($rows) +{ + eval INSERT INTO t1 VALUES (NULL, '0000-0000-0000-0000', 'private_data'); + dec $rows; +} +COMMIT; +--enable_query_log + +# +# Now we create secondary index for credit_card column in parallel we create new rows +# forcing alter table to wait so that row log is used. +# +SET DEBUG_SYNC= 'row_merge_after_scan SIGNAL opened WAIT_FOR rotated'; +send ALTER TABLE t1 ADD INDEX secret (credit_card), ALGORITHM=INPLACE, LOCK=NONE; +# +# Force key rotation and create second index for same table +# +connect (con2,localhost,root,,); +SET DEBUG_SYNC= 'now WAIT_FOR opened'; +# TODO: once we add key rotation and scrubbing make sure to add it to this test +ALTER INSTANCE ROTATE INNODB MASTER KEY; +SET DEBUG_SYNC= 'now SIGNAL rotated'; +CREATE TABLE t2(id int) ENGINE=InnoDB; +SET DEBUG_SYNC= 'row_merge_after_scan SIGNAL opened WAIT_FOR updated'; +send ALTER TABLE t1 ADD INDEX secret2 (private), ALGORITHM=INPLACE, LOCK=NONE; +# +# Create new rows to row log +# +connect (con1,localhost,root,,); +SET DEBUG_SYNC= 'now WAIT_FOR opened'; +INSERT INTO t1(credit_card) SELECT credit_card FROM t1; +INSERT INTO t1(credit_card) SELECT credit_card FROM t1; +INSERT INTO t1(credit_card) SELECT credit_card FROM t1; +SET DEBUG_SYNC= 'now SIGNAL updated'; + +connection default; +reap; +disconnect con1; + +connection con2; +reap; +DROP TABLE t2; + +connection default; +disconnect con2; + +# +# Verify that both merge blocks and row log blocks are encryted and decrypted +# + +SELECT variable_value > 0 FROM performance_schema.global_status WHERE variable_name = 'innodb_num_pages_encrypted'; +SELECT variable_value > 0 FROM performance_schema.global_status WHERE variable_name = 'innodb_encryption_n_merge_blocks_encrypted'; +SELECT variable_value > 0 FROM performance_schema.global_status WHERE variable_name = 'innodb_encryption_n_merge_blocks_decrypted'; +SELECT variable_value > 0 FROM performance_schema.global_status WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_encrypted'; +SELECT variable_value > 0 FROM performance_schema.global_status WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_decrypted'; + +DROP TABLE t1; + +SET DEBUG_SYNC= 'RESET'; + +-- source include/wait_until_count_sessions.inc diff --git a/mysql-test/suite/innodb/r/innodb_online_alter_encryption.result b/mysql-test/suite/innodb/r/innodb_online_alter_encryption.result new file mode 100644 index 000000000000..c9026f4e457b --- /dev/null +++ b/mysql-test/suite/innodb/r/innodb_online_alter_encryption.result @@ -0,0 +1,131 @@ +call mtr.add_suppression("\\[ERROR\\] Function 'keyring_file' already exists"); +call mtr.add_suppression("\\[ERROR\\] Couldn't load plugin named 'keyring_file' with soname 'keyring_file.*'."); +call mtr.add_suppression("Plugin keyring_file reported"); +# restart: +CREATE TABLE t1 (id INT NOT NULL PRIMARY KEY, a VARCHAR(255)) ENGINE=InnoDB ENCRYPTION='y'; +CREATE TABLE t2 (id INT NOT NULL PRIMARY KEY, a VARCHAR(255)) ENGINE=InnoDB; +CREATE TABLE t3 (id INT, a VARCHAR(255)) ENGINE=InnoDB ENCRYPTION='y'; +CREATE TABLE t4 (id INT, a VARCHAR(255)) ENGINE=InnoDB; +CREATE TABLE t5 (id INT NOT NULL PRIMARY KEY, a TEXT(500), b VARCHAR(255), FULLTEXT(b)) ENGINE=InnoDB ENCRYPTION='y'; +CREATE TABLE t6 (id INT, a TEXT(500), b VARCHAR(255), FULLTEXT(b)) ENGINE=InnoDB; +CREATE TABLE t7 (id INT NOT NULL PRIMARY KEY, a VARCHAR(255)) ENGINE=InnoDB ROW_FORMAT=COMPRESSED ENCRYPTION='y'; +CREATE PROCEDURE innodb_insert_proc (repeat_count INT) +BEGIN +DECLARE current_num INT; +SET current_num = 0; +WHILE current_num < repeat_count DO +INSERT INTO t1 VALUES (current_num, REPEAT('foobar', 42)); +INSERT INTO t2 VALUES (current_num, REPEAT('temp', 42)); +INSERT INTO t3 VALUES (current_num, REPEAT('barfoo', 42)); +INSERT INTO t4 VALUES (current_num, REPEAT('repeat', 42)); +INSERT INTO t5 VALUES (current_num, SUBSTRING('A BC DEF GHIJ KLM NOPQRS TUV WXYZ 012 3456789', RAND() * 36 + 1, 100), REPEAT('author new', 22)); +INSERT INTO t6 VALUES (current_num, SUBSTRING('A BC DEF GHIJ KLM NOPQRS TUV WXYZ 012 3456789', RAND() * 36 + 1, 100), REPEAT('mangled old', 22)); +INSERT INTO t7 VALUES (current_num, REPEAT('mysql', 42)); +SET current_num = current_num + 1; +END WHILE; +END// +COMMIT; +SET autocommit=0; +CALL innodb_insert_proc(15000); +COMMIT; +SET autocommit=1; +ALTER TABLE t1 ADD COLUMN b INT DEFAULT 2; +ALTER TABLE t2 ADD COLUMN b INT DEFAULT 2; +ALTER TABLE t7 ADD COLUMN b INT DEFAULT 2; +ALTER TABLE t1 ADD KEY a(a), ADD KEY b(b); +ALTER TABLE t2 ADD KEY a(a), ADD KEY b(b); +ALTER TABLE t3 ADD COLUMN c INT DEFAULT 5; +ALTER TABLE t4 ADD COLUMN c INT DEFAULT 5; +ALTER TABLE t3 ADD KEY (a), ADD KEY c(c); +ALTER TABLE t4 ADD KEY (a), ADD KEY c(c); +ALTER TABLE t5 ADD FULLTEXT(a); +ALTER TABLE t6 ADD FULLTEXT(a); +ALTER TABLE t7 ADD KEY a(a), ADD KEY b(b); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int(11) NOT NULL, + `a` varchar(255) DEFAULT NULL, + `b` int(11) DEFAULT '2', + PRIMARY KEY (`id`), + KEY `a` (`a`), + KEY `b` (`b`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='y' +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `id` int(11) NOT NULL, + `a` varchar(255) DEFAULT NULL, + `b` int(11) DEFAULT '2', + PRIMARY KEY (`id`), + KEY `a` (`a`), + KEY `b` (`b`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +SHOW CREATE TABLE t3; +Table Create Table +t3 CREATE TABLE `t3` ( + `id` int(11) DEFAULT NULL, + `a` varchar(255) DEFAULT NULL, + `c` int(11) DEFAULT '5', + KEY `a` (`a`), + KEY `c` (`c`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='y' +SHOW CREATE TABLE t4; +Table Create Table +t4 CREATE TABLE `t4` ( + `id` int(11) DEFAULT NULL, + `a` varchar(255) DEFAULT NULL, + `c` int(11) DEFAULT '5', + KEY `a` (`a`), + KEY `c` (`c`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +SHOW CREATE TABLE t5; +Table Create Table +t5 CREATE TABLE `t5` ( + `id` int(11) NOT NULL, + `a` text, + `b` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`), + FULLTEXT KEY `b` (`b`), + FULLTEXT KEY `a` (`a`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='y' +SHOW CREATE TABLE t6; +Table Create Table +t6 CREATE TABLE `t6` ( + `id` int(11) DEFAULT NULL, + `a` text, + `b` varchar(255) DEFAULT NULL, + FULLTEXT KEY `b` (`b`), + FULLTEXT KEY `a` (`a`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +SHOW CREATE TABLE t7; +Table Create Table +t7 CREATE TABLE `t7` ( + `id` int(11) NOT NULL, + `a` varchar(255) DEFAULT NULL, + `b` int(11) DEFAULT '2', + PRIMARY KEY (`id`), + KEY `a` (`a`), + KEY `b` (`b`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPRESSED ENCRYPTION='y' +# Restarting server +SELECT COUNT(1) FROM t2; +COUNT(1) +15000 +SELECT COUNT(1) FROM t3; +COUNT(1) +15000 +SELECT COUNT(1) FROM t4; +COUNT(1) +15000 +SELECT COUNT(1) FROM t5; +COUNT(1) +15000 +SELECT COUNT(1) FROM t6; +COUNT(1) +15000 +SELECT COUNT(1) FROM t7; +COUNT(1) +15000 +DROP PROCEDURE innodb_insert_proc; +DROP TABLE t1, t2, t3, t4, t5, t6, t7; diff --git a/mysql-test/suite/innodb/r/innodb_row_log_encryption.result b/mysql-test/suite/innodb/r/innodb_row_log_encryption.result new file mode 100644 index 000000000000..18992900543b --- /dev/null +++ b/mysql-test/suite/innodb/r/innodb_row_log_encryption.result @@ -0,0 +1,35 @@ +call mtr.add_suppression("\\[ERROR\\] Function 'keyring_file' already exists"); +call mtr.add_suppression("\\[ERROR\\] Couldn't load plugin named 'keyring_file' with soname 'keyring_file.*'."); +call mtr.add_suppression("Plugin keyring_file reported"); +# restart: +CREATE TABLE t1(id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, credit_card VARCHAR(200), private VARCHAR(50)) ENGINE=InnoDB ENCRYPTION='y'; +SET DEBUG_SYNC= 'row_merge_after_scan SIGNAL opened WAIT_FOR rotated'; +ALTER TABLE t1 ADD INDEX secret (credit_card), ALGORITHM=INPLACE, LOCK=NONE; +SET DEBUG_SYNC= 'now WAIT_FOR opened'; +ALTER INSTANCE ROTATE INNODB MASTER KEY; +SET DEBUG_SYNC= 'now SIGNAL rotated'; +CREATE TABLE t2(id int) ENGINE=InnoDB; +SET DEBUG_SYNC= 'row_merge_after_scan SIGNAL opened WAIT_FOR updated'; +ALTER TABLE t1 ADD INDEX secret2 (private), ALGORITHM=INPLACE, LOCK=NONE; +SET DEBUG_SYNC= 'now WAIT_FOR opened'; +INSERT INTO t1(credit_card) SELECT credit_card FROM t1; +INSERT INTO t1(credit_card) SELECT credit_card FROM t1; +INSERT INTO t1(credit_card) SELECT credit_card FROM t1; +SET DEBUG_SYNC= 'now SIGNAL updated'; +DROP TABLE t2; +SELECT variable_value > 0 FROM performance_schema.global_status WHERE variable_name = 'innodb_num_pages_encrypted'; +variable_value > 0 +SELECT variable_value > 0 FROM performance_schema.global_status WHERE variable_name = 'innodb_encryption_n_merge_blocks_encrypted'; +variable_value > 0 +1 +SELECT variable_value > 0 FROM performance_schema.global_status WHERE variable_name = 'innodb_encryption_n_merge_blocks_decrypted'; +variable_value > 0 +1 +SELECT variable_value > 0 FROM performance_schema.global_status WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_encrypted'; +variable_value > 0 +1 +SELECT variable_value > 0 FROM performance_schema.global_status WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_decrypted'; +variable_value > 0 +1 +DROP TABLE t1; +SET DEBUG_SYNC= 'RESET'; diff --git a/mysql-test/suite/innodb/t/innodb_online_alter_encryption-master.opt b/mysql-test/suite/innodb/t/innodb_online_alter_encryption-master.opt new file mode 100644 index 000000000000..abd4b61ec7d8 --- /dev/null +++ b/mysql-test/suite/innodb/t/innodb_online_alter_encryption-master.opt @@ -0,0 +1,4 @@ +$KEYRING_PLUGIN_OPT +$KEYRING_PLUGIN_LOAD +--keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring +--innodb-sort-buffer-size=64k diff --git a/mysql-test/suite/innodb/t/innodb_online_alter_encryption.test b/mysql-test/suite/innodb/t/innodb_online_alter_encryption.test new file mode 100644 index 000000000000..20c657ff2eb9 --- /dev/null +++ b/mysql-test/suite/innodb/t/innodb_online_alter_encryption.test @@ -0,0 +1,8 @@ + +call mtr.add_suppression("\\[ERROR\\] Function 'keyring_file' already exists"); +call mtr.add_suppression("\\[ERROR\\] Couldn't load plugin named 'keyring_file' with soname 'keyring_file.*'."); +call mtr.add_suppression("Plugin keyring_file reported"); + +--let $keyring_restart_param=restart: --early-plugin-load="keyring_file=$KEYRING_PLUGIN" --keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring $KEYRING_PLUGIN_OPT --innodb-sort-buffer-size=64k + +--source include/innodb_online_alter_encryption.inc diff --git a/mysql-test/suite/innodb/t/innodb_row_log_encryption-master.opt b/mysql-test/suite/innodb/t/innodb_row_log_encryption-master.opt new file mode 100644 index 000000000000..d2971c391f0e --- /dev/null +++ b/mysql-test/suite/innodb/t/innodb_row_log_encryption-master.opt @@ -0,0 +1,5 @@ +$KEYRING_PLUGIN_OPT +$KEYRING_PLUGIN_LOAD +--keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring +--innodb-sort-buffer-size=64k +--innodb_encrypt_online_alter_logs=ON diff --git a/mysql-test/suite/innodb/t/innodb_row_log_encryption.test b/mysql-test/suite/innodb/t/innodb_row_log_encryption.test new file mode 100644 index 000000000000..b098e0f62578 --- /dev/null +++ b/mysql-test/suite/innodb/t/innodb_row_log_encryption.test @@ -0,0 +1,8 @@ + +call mtr.add_suppression("\\[ERROR\\] Function 'keyring_file' already exists"); +call mtr.add_suppression("\\[ERROR\\] Couldn't load plugin named 'keyring_file' with soname 'keyring_file.*'."); +call mtr.add_suppression("Plugin keyring_file reported"); + +--let $keyring_restart_param=restart: --early-plugin-load="keyring_file=$KEYRING_PLUGIN" --keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring $KEYRING_PLUGIN_OPT --innodb-sort-buffer-size=64k --innodb_encrypt_online_alter_logs=ON + +--source include/innodb_row_log_encryption.inc diff --git a/mysql-test/suite/perfschema/t/show_sanity.test b/mysql-test/suite/perfschema/t/show_sanity.test index 192c1f9bef64..c70323f7c434 100644 --- a/mysql-test/suite/perfschema/t/show_sanity.test +++ b/mysql-test/suite/perfschema/t/show_sanity.test @@ -439,6 +439,7 @@ insert into test.sanity values ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_DOUBLEWRITE"), ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_DOUBLEWRITE_BATCH_SIZE"), ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_EMPTY_FREE_LIST_ALGORITHM"), + ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_ENCRYPT_ONLINE_ALTER_LOGS"), ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_ENCRYPT_TABLES"), ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_FAST_SHUTDOWN"), ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_FILE_FORMAT"), @@ -833,6 +834,10 @@ insert into test.sanity values ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_DATA_WRITTEN"), ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_DBLWR_PAGES_WRITTEN"), ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_DBLWR_WRITES"), + ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_ENCRYPTION_N_MERGE_BLOCKS_DECRYPTED"), + ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_ENCRYPTION_N_MERGE_BLOCKS_ENCRYPTED"), + ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_ENCRYPTION_N_ROWLOG_BLOCKS_DECRYPTED"), + ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_ENCRYPTION_N_ROWLOG_BLOCKS_ENCRYPTED"), ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_HAVE_ATOMIC_BUILTINS"), ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_IBUF_FREE_LIST"), ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_IBUF_SEGMENT_SIZE"), diff --git a/mysql-test/suite/sys_vars/r/innodb_encrypt_online_alter_logs_basic.result b/mysql-test/suite/sys_vars/r/innodb_encrypt_online_alter_logs_basic.result new file mode 100644 index 000000000000..9351f9f967d2 --- /dev/null +++ b/mysql-test/suite/sys_vars/r/innodb_encrypt_online_alter_logs_basic.result @@ -0,0 +1,11 @@ +SELECT @@global.innodb_encrypt_online_alter_logs; +@@global.innodb_encrypt_online_alter_logs +0 +SET GLOBAL innodb_encrypt_online_alter_logs = ON; +ERROR HY000: Variable 'innodb_encrypt_online_alter_logs' is a read only variable +Expected error 'read only variable' +SET GLOBAL innodb_encrypt_online_alter_logs = OFF; +ERROR HY000: Variable 'innodb_encrypt_online_alter_logs' is a read only variable +Expected error 'read only variable' +SET GLOBAL innodb_encrypt_online_alter_logs = "ENABLE"; +ERROR HY000: Variable 'innodb_encrypt_online_alter_logs' is a read only variable diff --git a/mysql-test/suite/sys_vars/t/innodb_encrypt_online_alter_logs_basic.test b/mysql-test/suite/sys_vars/t/innodb_encrypt_online_alter_logs_basic.test new file mode 100644 index 000000000000..8d4917e476c8 --- /dev/null +++ b/mysql-test/suite/sys_vars/t/innodb_encrypt_online_alter_logs_basic.test @@ -0,0 +1,14 @@ +--source include/have_innodb.inc + +SELECT @@global.innodb_encrypt_online_alter_logs; + +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +SET GLOBAL innodb_encrypt_online_alter_logs = ON; +--echo Expected error 'read only variable' + +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +SET GLOBAL innodb_encrypt_online_alter_logs = OFF; +--echo Expected error 'read only variable' + +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +SET GLOBAL innodb_encrypt_online_alter_logs = "ENABLE"; diff --git a/plugin/keyring_vault/tests/mtr/innodb_online_alter_encryption-master.opt b/plugin/keyring_vault/tests/mtr/innodb_online_alter_encryption-master.opt new file mode 100644 index 000000000000..5d9bbb435d6e --- /dev/null +++ b/plugin/keyring_vault/tests/mtr/innodb_online_alter_encryption-master.opt @@ -0,0 +1,3 @@ +$KEYRING_VAULT_PLUGIN_OPT +$KEYRING_VAULT_PLUGIN_LOAD +--innodb-sort-buffer-size=64k diff --git a/plugin/keyring_vault/tests/mtr/innodb_online_alter_encryption.result b/plugin/keyring_vault/tests/mtr/innodb_online_alter_encryption.result new file mode 100644 index 000000000000..fb250ac7ca5f --- /dev/null +++ b/plugin/keyring_vault/tests/mtr/innodb_online_alter_encryption.result @@ -0,0 +1,132 @@ +call mtr.add_suppression("\\[ERROR\\] Function 'keyring_vault' already exists"); +call mtr.add_suppression("\\[ERROR\\] Couldn't load plugin named 'keyring_vault' with soname 'keyring_vault.*'."); +call mtr.add_suppression("Plugin keyring_vault reported"); +SET @@global.keyring_vault_config="MYSQLTEST_VARDIR/std_data/keyring_vault_confs/keyring_vault1.conf"; +# restart: +CREATE TABLE t1 (id INT NOT NULL PRIMARY KEY, a VARCHAR(255)) ENGINE=InnoDB ENCRYPTION='y'; +CREATE TABLE t2 (id INT NOT NULL PRIMARY KEY, a VARCHAR(255)) ENGINE=InnoDB; +CREATE TABLE t3 (id INT, a VARCHAR(255)) ENGINE=InnoDB ENCRYPTION='y'; +CREATE TABLE t4 (id INT, a VARCHAR(255)) ENGINE=InnoDB; +CREATE TABLE t5 (id INT NOT NULL PRIMARY KEY, a TEXT(500), b VARCHAR(255), FULLTEXT(b)) ENGINE=InnoDB ENCRYPTION='y'; +CREATE TABLE t6 (id INT, a TEXT(500), b VARCHAR(255), FULLTEXT(b)) ENGINE=InnoDB; +CREATE TABLE t7 (id INT NOT NULL PRIMARY KEY, a VARCHAR(255)) ENGINE=InnoDB ROW_FORMAT=COMPRESSED ENCRYPTION='y'; +CREATE PROCEDURE innodb_insert_proc (repeat_count INT) +BEGIN +DECLARE current_num INT; +SET current_num = 0; +WHILE current_num < repeat_count DO +INSERT INTO t1 VALUES (current_num, REPEAT('foobar', 42)); +INSERT INTO t2 VALUES (current_num, REPEAT('temp', 42)); +INSERT INTO t3 VALUES (current_num, REPEAT('barfoo', 42)); +INSERT INTO t4 VALUES (current_num, REPEAT('repeat', 42)); +INSERT INTO t5 VALUES (current_num, SUBSTRING('A BC DEF GHIJ KLM NOPQRS TUV WXYZ 012 3456789', RAND() * 36 + 1, 100), REPEAT('author new', 22)); +INSERT INTO t6 VALUES (current_num, SUBSTRING('A BC DEF GHIJ KLM NOPQRS TUV WXYZ 012 3456789', RAND() * 36 + 1, 100), REPEAT('mangled old', 22)); +INSERT INTO t7 VALUES (current_num, REPEAT('mysql', 42)); +SET current_num = current_num + 1; +END WHILE; +END// +COMMIT; +SET autocommit=0; +CALL innodb_insert_proc(15000); +COMMIT; +SET autocommit=1; +ALTER TABLE t1 ADD COLUMN b INT DEFAULT 2; +ALTER TABLE t2 ADD COLUMN b INT DEFAULT 2; +ALTER TABLE t7 ADD COLUMN b INT DEFAULT 2; +ALTER TABLE t1 ADD KEY a(a), ADD KEY b(b); +ALTER TABLE t2 ADD KEY a(a), ADD KEY b(b); +ALTER TABLE t3 ADD COLUMN c INT DEFAULT 5; +ALTER TABLE t4 ADD COLUMN c INT DEFAULT 5; +ALTER TABLE t3 ADD KEY (a), ADD KEY c(c); +ALTER TABLE t4 ADD KEY (a), ADD KEY c(c); +ALTER TABLE t5 ADD FULLTEXT(a); +ALTER TABLE t6 ADD FULLTEXT(a); +ALTER TABLE t7 ADD KEY a(a), ADD KEY b(b); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int(11) NOT NULL, + `a` varchar(255) DEFAULT NULL, + `b` int(11) DEFAULT '2', + PRIMARY KEY (`id`), + KEY `a` (`a`), + KEY `b` (`b`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='y' +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `id` int(11) NOT NULL, + `a` varchar(255) DEFAULT NULL, + `b` int(11) DEFAULT '2', + PRIMARY KEY (`id`), + KEY `a` (`a`), + KEY `b` (`b`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +SHOW CREATE TABLE t3; +Table Create Table +t3 CREATE TABLE `t3` ( + `id` int(11) DEFAULT NULL, + `a` varchar(255) DEFAULT NULL, + `c` int(11) DEFAULT '5', + KEY `a` (`a`), + KEY `c` (`c`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='y' +SHOW CREATE TABLE t4; +Table Create Table +t4 CREATE TABLE `t4` ( + `id` int(11) DEFAULT NULL, + `a` varchar(255) DEFAULT NULL, + `c` int(11) DEFAULT '5', + KEY `a` (`a`), + KEY `c` (`c`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +SHOW CREATE TABLE t5; +Table Create Table +t5 CREATE TABLE `t5` ( + `id` int(11) NOT NULL, + `a` text, + `b` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`), + FULLTEXT KEY `b` (`b`), + FULLTEXT KEY `a` (`a`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='y' +SHOW CREATE TABLE t6; +Table Create Table +t6 CREATE TABLE `t6` ( + `id` int(11) DEFAULT NULL, + `a` text, + `b` varchar(255) DEFAULT NULL, + FULLTEXT KEY `b` (`b`), + FULLTEXT KEY `a` (`a`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +SHOW CREATE TABLE t7; +Table Create Table +t7 CREATE TABLE `t7` ( + `id` int(11) NOT NULL, + `a` varchar(255) DEFAULT NULL, + `b` int(11) DEFAULT '2', + PRIMARY KEY (`id`), + KEY `a` (`a`), + KEY `b` (`b`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPRESSED ENCRYPTION='y' +# Restarting server +SELECT COUNT(1) FROM t2; +COUNT(1) +15000 +SELECT COUNT(1) FROM t3; +COUNT(1) +15000 +SELECT COUNT(1) FROM t4; +COUNT(1) +15000 +SELECT COUNT(1) FROM t5; +COUNT(1) +15000 +SELECT COUNT(1) FROM t6; +COUNT(1) +15000 +SELECT COUNT(1) FROM t7; +COUNT(1) +15000 +DROP PROCEDURE innodb_insert_proc; +DROP TABLE t1, t2, t3, t4, t5, t6, t7; diff --git a/plugin/keyring_vault/tests/mtr/innodb_online_alter_encryption.test b/plugin/keyring_vault/tests/mtr/innodb_online_alter_encryption.test new file mode 100644 index 000000000000..212ba52afdb2 --- /dev/null +++ b/plugin/keyring_vault/tests/mtr/innodb_online_alter_encryption.test @@ -0,0 +1,25 @@ +--source include/have_keyring_vault_plugin.inc + +--source generate_default_conf_files.inc +--source is_vault_server_up.inc + +# Create mount points +--let MOUNT_POINT_SERVICE_OP=CREATE +--let $KEYRING_CONF_FILE=$KEYRING_CONF_FILE_1 +--source mount_point_service.inc + +--let $keyring_restart_param=restart:--early-plugin-load="keyring_vault=$KEYRING_VAULT_PLUGIN" --loose-keyring_vault_config=$KEYRING_CONF_FILE_1 $KEYRING_VAULT_PLUGIN_OPT --innodb-sort-buffer-size=64k --innodb_encrypt_online_alter_logs=ON + +call mtr.add_suppression("\\[ERROR\\] Function 'keyring_vault' already exists"); +call mtr.add_suppression("\\[ERROR\\] Couldn't load plugin named 'keyring_vault' with soname 'keyring_vault.*'."); +call mtr.add_suppression("Plugin keyring_vault reported"); + +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +eval SET @@global.keyring_vault_config="$KEYRING_CONF_FILE_1"; + +--source include/innodb_online_alter_encryption.inc + +# Delete mount points +--let MOUNT_POINT_SERVICE_OP=DELETE +--let $KEYRING_CONF_FILE=$KEYRING_CONF_FILE_1 +--source mount_point_service.inc diff --git a/plugin/keyring_vault/tests/mtr/innodb_row_log_encryption-master.opt b/plugin/keyring_vault/tests/mtr/innodb_row_log_encryption-master.opt new file mode 100644 index 000000000000..cdcb72ec4604 --- /dev/null +++ b/plugin/keyring_vault/tests/mtr/innodb_row_log_encryption-master.opt @@ -0,0 +1,4 @@ +$KEYRING_VAULT_PLUGIN_OPT +$KEYRING_VAULT_PLUGIN_LOAD +--innodb-sort-buffer-size=64k +--innodb_encrypt_online_alter_logs=ON diff --git a/plugin/keyring_vault/tests/mtr/innodb_row_log_encryption.result b/plugin/keyring_vault/tests/mtr/innodb_row_log_encryption.result new file mode 100644 index 000000000000..a1d7b4435210 --- /dev/null +++ b/plugin/keyring_vault/tests/mtr/innodb_row_log_encryption.result @@ -0,0 +1,36 @@ +call mtr.add_suppression("\\[ERROR\\] Function 'keyring_vault' already exists"); +call mtr.add_suppression("\\[ERROR\\] Couldn't load plugin named 'keyring_vault' with soname 'keyring_vault.*'."); +call mtr.add_suppression("Plugin keyring_vault reported"); +SET @@global.keyring_vault_config="MYSQLTEST_VARDIR/std_data/keyring_vault_confs/keyring_vault1.conf"; +# restart: +CREATE TABLE t1(id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, credit_card VARCHAR(200), private VARCHAR(50)) ENGINE=InnoDB ENCRYPTION='y'; +SET DEBUG_SYNC= 'row_merge_after_scan SIGNAL opened WAIT_FOR rotated'; +ALTER TABLE t1 ADD INDEX secret (credit_card), ALGORITHM=INPLACE, LOCK=NONE; +SET DEBUG_SYNC= 'now WAIT_FOR opened'; +ALTER INSTANCE ROTATE INNODB MASTER KEY; +SET DEBUG_SYNC= 'now SIGNAL rotated'; +CREATE TABLE t2(id int) ENGINE=InnoDB; +SET DEBUG_SYNC= 'row_merge_after_scan SIGNAL opened WAIT_FOR updated'; +ALTER TABLE t1 ADD INDEX secret2 (private), ALGORITHM=INPLACE, LOCK=NONE; +SET DEBUG_SYNC= 'now WAIT_FOR opened'; +INSERT INTO t1(credit_card) SELECT credit_card FROM t1; +INSERT INTO t1(credit_card) SELECT credit_card FROM t1; +INSERT INTO t1(credit_card) SELECT credit_card FROM t1; +SET DEBUG_SYNC= 'now SIGNAL updated'; +DROP TABLE t2; +SELECT variable_value > 0 FROM performance_schema.global_status WHERE variable_name = 'innodb_num_pages_encrypted'; +variable_value > 0 +SELECT variable_value > 0 FROM performance_schema.global_status WHERE variable_name = 'innodb_encryption_n_merge_blocks_encrypted'; +variable_value > 0 +1 +SELECT variable_value > 0 FROM performance_schema.global_status WHERE variable_name = 'innodb_encryption_n_merge_blocks_decrypted'; +variable_value > 0 +1 +SELECT variable_value > 0 FROM performance_schema.global_status WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_encrypted'; +variable_value > 0 +1 +SELECT variable_value > 0 FROM performance_schema.global_status WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_decrypted'; +variable_value > 0 +1 +DROP TABLE t1; +SET DEBUG_SYNC= 'RESET'; diff --git a/plugin/keyring_vault/tests/mtr/innodb_row_log_encryption.test b/plugin/keyring_vault/tests/mtr/innodb_row_log_encryption.test new file mode 100644 index 000000000000..7655df774329 --- /dev/null +++ b/plugin/keyring_vault/tests/mtr/innodb_row_log_encryption.test @@ -0,0 +1,25 @@ +--source include/have_keyring_vault_plugin.inc + +--source generate_default_conf_files.inc +--source is_vault_server_up.inc + +# Create mount points +--let MOUNT_POINT_SERVICE_OP=CREATE +--let $KEYRING_CONF_FILE=$KEYRING_CONF_FILE_1 +--source mount_point_service.inc + +--let $keyring_restart_param=restart:--early-plugin-load="keyring_vault=$KEYRING_VAULT_PLUGIN" --loose-keyring_vault_config=$KEYRING_CONF_FILE_1 $KEYRING_VAULT_PLUGIN_OPT --innodb-sort-buffer-size=64k --innodb_encrypt_online_alter_logs=ON + +call mtr.add_suppression("\\[ERROR\\] Function 'keyring_vault' already exists"); +call mtr.add_suppression("\\[ERROR\\] Couldn't load plugin named 'keyring_vault' with soname 'keyring_vault.*'."); +call mtr.add_suppression("Plugin keyring_vault reported"); + +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +eval SET @@global.keyring_vault_config="$KEYRING_CONF_FILE_1"; + +--source include/innodb_row_log_encryption.inc + +# Delete mount points +--let MOUNT_POINT_SERVICE_OP=DELETE +--let $KEYRING_CONF_FILE=$KEYRING_CONF_FILE_1 +--source mount_point_service.inc diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index 9a484161a482..2e9b64f2a6ff 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -1085,6 +1085,14 @@ static SHOW_VAR innodb_status_variables[]= { {"scan_deleted_recs_size", (char*) &export_vars.innodb_fragmentation_stats.scan_deleted_recs_size, SHOW_LONG, SHOW_SCOPE_GLOBAL}, + {"encryption_n_merge_blocks_encrypted", + (char*) &export_vars.innodb_n_merge_blocks_encrypted, SHOW_LONGLONG, SHOW_SCOPE_GLOBAL}, + {"encryption_n_merge_blocks_decrypted", + (char*) &export_vars.innodb_n_merge_blocks_decrypted, SHOW_LONGLONG, SHOW_SCOPE_GLOBAL}, + {"encryption_n_rowlog_blocks_encrypted", + (char*) &export_vars.innodb_n_rowlog_blocks_encrypted, SHOW_LONGLONG, SHOW_SCOPE_GLOBAL}, + {"encryption_n_rowlog_blocks_decrypted", + (char*) &export_vars.innodb_n_rowlog_blocks_decrypted, SHOW_LONGLONG, SHOW_SCOPE_GLOBAL}, {NullS, NullS, SHOW_LONG, SHOW_SCOPE_GLOBAL} }; @@ -21851,6 +21859,11 @@ static MYSQL_SYSVAR_ULONG(compressed_columns_threshold, "Compress column data if its length exceeds this value. Default is 96", NULL, NULL, 96, 1, ~0UL, 0); +static MYSQL_SYSVAR_BOOL(encrypt_online_alter_logs, + srv_encrypt_online_alter_logs, PLUGIN_VAR_NOCMDARG | PLUGIN_VAR_READONLY, + "Encrypt online alter logs.", + NULL, NULL, FALSE); + static struct st_mysql_sys_var* innobase_system_variables[]= { MYSQL_SYSVAR(api_trx_level), MYSQL_SYSVAR(api_bk_commit_interval), @@ -22050,6 +22063,7 @@ static struct st_mysql_sys_var* innobase_system_variables[]= { MYSQL_SYSVAR(compressed_columns_zip_level), MYSQL_SYSVAR(compressed_columns_threshold), MYSQL_SYSVAR(ft_ignore_stopwords), + MYSQL_SYSVAR(encrypt_online_alter_logs), MYSQL_SYSVAR(encrypt_tables), NULL }; diff --git a/storage/innobase/handler/handler0alter.cc b/storage/innobase/handler/handler0alter.cc index c1af82b0d9b4..9611bdb3f85a 100644 --- a/storage/innobase/handler/handler0alter.cc +++ b/storage/innobase/handler/handler0alter.cc @@ -5428,6 +5428,7 @@ ha_innobase::prepare_inplace_alter_table( bool add_fts_idx = false; dict_s_col_list*s_cols = NULL; mem_heap_t* s_heap = NULL; + ulint encrypt_flag = 0; DBUG_ENTER("prepare_inplace_alter_table"); DBUG_ASSERT(!ha_alter_info->handler_ctx); @@ -5605,6 +5606,31 @@ ha_innobase::prepare_inplace_alter_table( goto err_exit_no_heap; } + /* create_table_info_t::innobase_table_flags does not set encryption + flags. There are places where it is done afterwards, there are places + where it isn't done. We need to inspect all code paths and check if + encryption flag can be set in one place. */ + if (!Encryption::is_none( + ha_alter_info->create_info->encrypt_type.str)) { + + /* Set the encryption flag. */ + byte* master_key = NULL; + ulint master_key_id; + Encryption::Version version; + + /* Check if keyring is ready. */ + Encryption::get_master_key(&master_key_id, + &master_key, + &version); + + if (master_key == NULL) { + goto err_exit_no_heap; + } else { + my_free(master_key); + encrypt_flag = DICT_TF2_ENCRYPTION; + } + } + max_col_len = DICT_MAX_FIELD_LEN_BY_FORMAT_FLAG(info.flags()); /* Check each index's column length to make sure they do not @@ -6118,7 +6144,7 @@ ha_innobase::prepare_inplace_alter_table( DBUG_RETURN(prepare_inplace_alter_table_dict( ha_alter_info, altered_table, table, table_share->table_name.str, - info.flags(), info.flags2(), + info.flags(), info.flags2() | encrypt_flag, fts_doc_col_no, add_fts_doc_id, add_fts_doc_id_idx, m_prebuilt)); } diff --git a/storage/innobase/include/row0ftsort.h b/storage/innobase/include/row0ftsort.h index 09e89d2f640c..72454522ab5c 100644 --- a/storage/innobase/include/row0ftsort.h +++ b/storage/innobase/include/row0ftsort.h @@ -83,6 +83,10 @@ struct fts_psort_t { /*!< buffer to write to file */ row_merge_block_t* block_alloc[FTS_NUM_AUX_INDEX]; /*!< buffer to allocated */ + row_merge_block_t* crypt_block[FTS_NUM_AUX_INDEX]; + /*!< buffer to crypt data */ + row_merge_block_t* crypt_alloc[FTS_NUM_AUX_INDEX]; + /*!< buffer to allocated */ ulint child_status; /*!< child thread status */ ulint state; /*!< parent thread state */ fts_doc_list_t fts_doc_list; /*!< doc list to process */ diff --git a/storage/innobase/include/row0log.h b/storage/innobase/include/row0log.h index bc541316917a..67e0ca568fc0 100644 --- a/storage/innobase/include/row0log.h +++ b/storage/innobase/include/row0log.h @@ -34,6 +34,7 @@ Created 2011-05-26 Marko Makela #include "dict0types.h" #include "trx0types.h" #include "que0types.h" +#include "os0file.h" class ut_stage_alter_t; @@ -255,6 +256,51 @@ row_log_estimate_work( const dict_index_t* index); #endif /* HAVE_PSI_STAGE_INTERFACE */ +/** Find out if temporary log files encrypted. +@return true if temporary log file should be encrypted, false if not */ +MY_ATTRIBUTE((warn_unused_result)) +bool +log_tmp_is_encrypted(); + +/** Check the row log encryption is enabled or not. +It will enable the row log encryption. */ +void +log_tmp_enable_encryption_if_set(); + +/** Encrypt a temporary file block. +@param[in] src block to encrypt +@param[in] size size of the block +@param[out] dst destination block +@param[in] offs offset to block +@param[in] space_id tablespace id +@return whether the operation succeeded */ +MY_ATTRIBUTE((warn_unused_result)) +bool +log_tmp_block_encrypt( +/*==================*/ + const byte* src_block, + ulint size, + byte* dst_block, + os_offset_t offs, + ulint space_id); + +/** Decrypt a temporary file block. +@param[in] src block to decrypt +@param[in] size size of the block +@param[out] dst destination block +@param[in] offs offset to block +@param[in] space_id tablespace id +@return whether the operation succeeded */ +MY_ATTRIBUTE((warn_unused_result)) +bool +log_tmp_block_decrypt( +/*==================*/ + const byte* src_block, + ulint size, + byte* dst_block, + os_offset_t offs, + ulint space_id); + #ifndef UNIV_NONINL #include "row0log.ic" #endif diff --git a/storage/innobase/include/row0merge.h b/storage/innobase/include/row0merge.h index b03b98a1aa0f..49036d178043 100644 --- a/storage/innobase/include/row0merge.h +++ b/storage/innobase/include/row0merge.h @@ -339,10 +339,13 @@ Write a merge block to the file system. ibool row_merge_write( /*============*/ - int fd, /*!< in: file descriptor */ - ulint offset, /*!< in: offset where to write, - in number of row_merge_block_t elements */ - const void* buf); /*!< in: data */ + int fd, /*!< in: file descriptor */ + ulint offset, /*!< in: offset where to write, + in number of row_merge_block_t + elements */ + void* buf, /*!< in: data */ + void* crypt_buf, /*!< in: crypt buf or NULL */ + ulint space_id); /*!< in: tablespace id */ /********************************************************************//** Empty a sort buffer. @return sort buffer */ @@ -362,12 +365,14 @@ row_merge_file_create( const char* path); /** Merge disk files. -@param[in] trx transaction -@param[in] dup descriptor of index being created -@param[in,out] file file containing index entries -@param[in,out] block 3 buffers -@param[in,out] tmpfd temporary file handle -@param[in,out] stage performance schema accounting object, used by +@param[in] trx transaction +@param[in] dup descriptor of index being created +@param[in,out] file file containing index entries +@param[in,out] block 3 buffers +@param[in,out] crypt_block encrypted file buffer +@param[in] space_id tablespace id +@param[in,out] tmpfd temporary file handle +@param[in,out] stage performance schema accounting object, used by ALTER TABLE. If not NULL, stage->begin_phase_sort() will be called initially and then stage->inc() will be called for each record processed. @return DB_SUCCESS or error code */ @@ -377,6 +382,8 @@ row_merge_sort( const row_merge_dup_t* dup, merge_file_t* file, row_merge_block_t* block, + row_merge_block_t* crypt_block, + ulint space_id, int* tmpfd, ut_stage_alter_t* stage = NULL); @@ -406,26 +413,30 @@ Read a merge block from the file system. ibool row_merge_read( /*===========*/ - int fd, /*!< in: file descriptor */ - ulint offset, /*!< in: offset where to read - in number of row_merge_block_t - elements */ - row_merge_block_t* buf); /*!< out: data */ + int fd, /*!< in: file descriptor */ + ulint offset, /*!< in: offset where to read + in number of row_merge_block_t + elements */ + row_merge_block_t* buf, /*!< out: data */ + row_merge_block_t* crypt_buf, /*!< in: crypt buf or NULL */ + ulint space_id); /*!< in: tablespace id */ /********************************************************************//** Read a merge record. @return pointer to next record, or NULL on I/O error or end of list */ const byte* row_merge_read_rec( /*===============*/ - row_merge_block_t* block, /*!< in/out: file buffer */ - mrec_buf_t* buf, /*!< in/out: secondary buffer */ - const byte* b, /*!< in: pointer to record */ - const dict_index_t* index, /*!< in: index of the record */ - int fd, /*!< in: file descriptor */ - ulint* foffs, /*!< in/out: file offset */ - const mrec_t** mrec, /*!< out: pointer to merge record, - or NULL on end of list - (non-NULL on I/O error) */ - ulint* offsets)/*!< out: offsets of mrec */ + row_merge_block_t* block, /*!< in/out: file buffer */ + row_merge_block_t* crypt_block, /*!< in: crypt buf or NULL */ + ulint space_id, /*!< in: tablespace id */ + mrec_buf_t* buf, /*!< in/out: secondary buffer */ + const byte* b, /*!< in: pointer to record */ + const dict_index_t* index, /*!< in: index of the record */ + int fd, /*!< in: file descriptor */ + ulint* foffs, /*!< in/out: file offset */ + const mrec_t** mrec, /*!< out: pointer to merge + record, or NULL on end of list + (non-NULL on I/O error) */ + ulint* offsets) /*!< out: offsets of mrec */ MY_ATTRIBUTE((warn_unused_result)); #endif /* row0merge.h */ diff --git a/storage/innobase/include/srv0srv.h b/storage/innobase/include/srv0srv.h index 67c59d90180c..4d762c8f7288 100644 --- a/storage/innobase/include/srv0srv.h +++ b/storage/innobase/include/srv0srv.h @@ -141,6 +141,18 @@ struct srv_stats_t { /** Number of buffered aio requests submitted */ ulint_ctr_64_t n_aio_submitted; + + /* Number of merge blocks encrypted */ + ulint_ctr_64_t n_merge_blocks_encrypted; + + /* Number of merge blocks decrypted */ + ulint_ctr_64_t n_merge_blocks_decrypted; + + /* Number of row log blocks encrypted */ + ulint_ctr_64_t n_rowlog_blocks_encrypted; + + /* Number of row log blocks decrypted */ + ulint_ctr_64_t n_rowlog_blocks_decrypted; }; extern const char* srv_main_thread_op_info; @@ -520,6 +532,8 @@ extern ulint srv_fatal_semaphore_wait_threshold; extern ulint srv_dml_needed_delay; extern lint srv_kill_idle_transaction; +extern my_bool srv_encrypt_online_alter_logs; + #define SRV_MAX_N_IO_THREADS 130 #define SRV_MAX_N_PURGE_THREADS 32 @@ -1104,6 +1118,11 @@ struct export_var_t{ index lookups when freeing file pages */ #endif /* UNIV_DEBUG */ + ib_uint64_t innodb_n_merge_blocks_encrypted;/*!< Number of merge blocks encrypted */ + ib_uint64_t innodb_n_merge_blocks_decrypted;/*!< Number of merge blocks decrypted */ + ib_uint64_t innodb_n_rowlog_blocks_encrypted;/*!< Number of row log blocks encrypted */ + ib_uint64_t innodb_n_rowlog_blocks_decrypted;/*!< Number of row log blocks decrypted */ + ulint innodb_sec_rec_cluster_reads; /*!< srv_sec_rec_cluster_reads */ ulint innodb_sec_rec_cluster_reads_avoided; /*!< srv_sec_rec_cluster_reads_avoided */ diff --git a/storage/innobase/row/row0ftsort.cc b/storage/innobase/row/row0ftsort.cc index f3c67821e811..5292c48fcebd 100644 --- a/storage/innobase/row/row0ftsort.cc +++ b/storage/innobase/row/row0ftsort.cc @@ -40,8 +40,9 @@ Created 10/13/2010 Jimmy Yang #define ROW_MERGE_READ_GET_NEXT(N) \ do { \ b[N] = row_merge_read_rec( \ - block[N], buf[N], b[N], index, \ - fd[N], &foffs[N], &mrec[N], offsets[N]); \ + block[N], crypt_block[N], table->space, buf[N], \ + b[N], index, fd[N], &foffs[N], &mrec[N], \ + offsets[N]); \ if (UNIV_UNLIKELY(!b[N])) { \ if (mrec[N]) { \ goto exit; \ @@ -267,6 +268,31 @@ row_fts_psort_info_init( ret = FALSE; goto func_exit; } + + /* If tablespace is encrypted, allocate additional + buffer for encryption/decryption. */ + if (log_tmp_is_encrypted()) { + + /* Need to align memory for O_DIRECT write */ + psort_info[j].crypt_alloc[i] = + static_cast( + ut_malloc_nokey( + block_size + 1024)); + + if (psort_info[j].crypt_alloc[i] == NULL) { + ret = FALSE; + goto func_exit; + } + + psort_info[j].crypt_block[i] = + static_cast( + ut_align( + psort_info[j] + .crypt_alloc[i], 1024)); + } else { + psort_info[j].crypt_alloc[i] = NULL; + psort_info[j].crypt_block[i] = NULL; + } } psort_info[j].child_status = 0; @@ -318,6 +344,7 @@ row_fts_psort_info_destroy( ut_free(psort_info[j].block_alloc[i]); ut_free(psort_info[j].merge_file[i]); + ut_free(psort_info[j].crypt_alloc[i]); } mutex_free(&psort_info[j].mutex); @@ -776,6 +803,7 @@ fts_parallel_tokenization( ? DATA_VARCHAR : DATA_VARMYSQL; block = psort_info->merge_block; + row_merge_block_t** crypt_block = psort_info->crypt_block; const page_size_t& page_size = dict_table_page_size(table); @@ -869,7 +897,9 @@ fts_parallel_tokenization( if (!row_merge_write(merge_file[t_ctx.buf_used]->fd, merge_file[t_ctx.buf_used]->offset++, - block[t_ctx.buf_used])) { + block[t_ctx.buf_used], + crypt_block[t_ctx.buf_used], + table->space)) { error = DB_TEMP_FILE_WRITE_FAIL; goto func_exit; } @@ -961,13 +991,19 @@ fts_parallel_tokenization( if (merge_file[i]->offset != 0) { if (!row_merge_write(merge_file[i]->fd, merge_file[i]->offset++, - block[i])) { + block[i], crypt_block[i], + table->space)) { error = DB_TEMP_FILE_WRITE_FAIL; goto func_exit; } UNIV_MEM_INVALID(block[i][0], srv_sort_buf_size); + + if (crypt_block[i]) { + UNIV_MEM_INVALID(crypt_block[i][0], + srv_sort_buf_size); + } } buf[i] = row_merge_buf_empty(buf[i]); @@ -992,7 +1028,8 @@ fts_parallel_tokenization( error = row_merge_sort(psort_info->psort_common->trx, psort_info->psort_common->dup, - merge_file[i], block[i], &tmpfd[i]); + merge_file[i], block[i], crypt_block[i], + table->space, &tmpfd[i]); if (error != DB_SUCCESS) { close(tmpfd[i]); goto func_exit; @@ -1564,6 +1601,8 @@ row_fts_merge_insert( fd = (int*) mem_heap_alloc(heap, sizeof(*fd) * fts_sort_pll_degree); block = (byte**) mem_heap_alloc( heap, sizeof(*block) * fts_sort_pll_degree); + byte** crypt_block = (byte**) mem_heap_alloc( + heap, sizeof(*crypt_block) * fts_sort_pll_degree); mrec = (const mrec_t**) mem_heap_alloc( heap, sizeof(*mrec) * fts_sort_pll_degree); sel_tree = (int*) mem_heap_alloc( @@ -1584,6 +1623,7 @@ row_fts_merge_insert( offsets[i][0] = num; offsets[i][1] = dict_index_get_n_fields(index); block[i] = psort_info[i].merge_block[id]; + crypt_block[i] = psort_info[i].crypt_block[id]; b[i] = psort_info[i].merge_block[id]; fd[i] = psort_info[i].merge_file[id]->fd; foffs[i] = 0; @@ -1662,7 +1702,9 @@ row_fts_merge_insert( if (psort_info[i].merge_file[id]->offset > 0 && (!row_merge_read( fd[i], foffs[i], - (row_merge_block_t*) block[i]))) { + (row_merge_block_t*) block[i], + (row_merge_block_t*) crypt_block[i], + table->space))) { error = DB_CORRUPTION; goto exit; } diff --git a/storage/innobase/row/row0log.cc b/storage/innobase/row/row0log.cc index bb71a1b786c2..bd9991612d38 100644 --- a/storage/innobase/row/row0log.cc +++ b/storage/innobase/row/row0log.cc @@ -41,6 +41,9 @@ Created 2011-05-26 Marko Makela #include "ut0new.h" #include "ut0stage.h" #include "trx0rec.h" +#include "my_crypt.h" +#include "my_rnd.h" +#include "srv0start.h" #include #include @@ -179,6 +182,7 @@ struct row_log_t { dict_table_t* table; /*!< table that is being rebuilt, or NULL when this is a secondary index that is being created online */ + dict_index_t* index; /*!< index to be built */ bool same_pk;/*!< whether the definition of the PRIMARY KEY has remained the same */ const dtuple_t* add_cols; @@ -194,8 +198,14 @@ struct row_log_t { row_log_buf_t tail; /*!< writer context; protected by mutex and index->lock S-latch, or by index->lock X-latch only */ + byte* crypt_tail; /*!< writer context; + temporary buffer used in encryption, + decryption or NULL*/ row_log_buf_t head; /*!< reader context; protected by MDL only; modifiable by row_log_apply_ops() */ + byte* crypt_head; /*!< reader context; + temporary buffer used in encryption, + decryption or NULL */ ulint n_old_col; /*!< number of non-virtual column in old table */ @@ -205,6 +215,158 @@ struct row_log_t { log operation */ }; +struct crypt_info_t { + + /** Encryption algorithm */ + Encryption::Type encryption_type; + + /** Encryption key */ + byte encryption_key[ENCRYPTION_KEY_LEN]; + + /** Encryption key length*/ + ulint encryption_klen; +}; + +my_bool srv_encrypt_online_alter_logs = FALSE; + +crypt_info_t crypt_info = crypt_info_t(); + +/** Find out if temporary log files encrypted. +@return true if temporary log file should be encrypted, false if not */ +bool +log_tmp_is_encrypted() +{ + return (crypt_info.encryption_type != Encryption::NONE); +} + +/** Check the row log encryption is enabled or not. +It will enable the row log encryption. */ +void +log_tmp_enable_encryption_if_set() +{ + if (srv_encrypt_online_alter_logs) { + if (crypt_info.encryption_type == Encryption::NONE) { + crypt_info.encryption_type = Encryption::AES; + crypt_info.encryption_klen = ENCRYPTION_KEY_LEN; + my_rand_buffer(crypt_info.encryption_key, + ENCRYPTION_KEY_LEN); + } + } +} + +/** Encrypt a temporary file block. +@param[in] src block to encrypt +@param[in] size size of the block +@param[out] dst destination block +@param[in] offs offset to block +@param[in] space_id tablespace id +@return whether the operation succeeded */ +bool +log_tmp_block_encrypt( +/*==================*/ + const byte* src_block, + ulint size, + byte* dst_block, + os_offset_t offs, + ulint space_id) +{ + size_t dst_len; + byte iv[MY_AES_BLOCK_SIZE]; + + memset(iv, 0, MY_AES_BLOCK_SIZE); + + mach_write_to_8(iv, space_id); + mach_write_to_8(iv + 8, offs); + + int res = my_aes_crypt(MY_AES_ECB, + ENCRYPTION_FLAG_ENCRYPT | ENCRYPTION_FLAG_NOPAD, + iv, MY_AES_BLOCK_SIZE, iv, &dst_len, + crypt_info.encryption_key, crypt_info.encryption_klen, + NULL, 0); + + if (res != MY_AES_OK) { + ib::error() << "Unable to encrypt IV"; + return false; + } + + ut_ad(dst_len == MY_AES_BLOCK_SIZE); + + res = my_aes_crypt(MY_AES_CBC, + ENCRYPTION_FLAG_ENCRYPT | ENCRYPTION_FLAG_NOPAD, + src_block, size, dst_block, &dst_len, + crypt_info.encryption_key, crypt_info.encryption_klen, + iv, MY_AES_BLOCK_SIZE); + + if (res != MY_AES_OK) { + ib::error() + << "Unable to encrypt data block " + " src: " << static_cast(src_block) + << " srclen: " << size + << " buf: " << static_cast(dst_block) + << " buflen: " << dst_len + << "."; + return false; + } + + return true; +} + +/** Decrypt a temporary file block. +@param[in] src block to decrypt +@param[in] size size of the block +@param[out] dst destination block +@param[in] offs offset to block +@param[in] space_id tablespace id +@return whether the operation succeeded */ +bool +log_tmp_block_decrypt( +/*==================*/ + const byte* src_block, + ulint size, + byte* dst_block, + os_offset_t offs, + ulint space_id) +{ + size_t dst_len; + byte iv[MY_AES_BLOCK_SIZE]; + + memset(iv, 0, MY_AES_BLOCK_SIZE); + + mach_write_to_8(iv, space_id); + mach_write_to_8(iv + 8, offs); + + int res = my_aes_crypt(MY_AES_ECB, + ENCRYPTION_FLAG_ENCRYPT | ENCRYPTION_FLAG_NOPAD, + iv, MY_AES_BLOCK_SIZE, iv, &dst_len, + crypt_info.encryption_key, crypt_info.encryption_klen, + NULL, 0); + + if (res != MY_AES_OK) { + ib::error() << "Unable to encrypt IV"; + return false; + } + + ut_ad(dst_len == MY_AES_BLOCK_SIZE); + + res = my_aes_crypt(MY_AES_CBC, + ENCRYPTION_FLAG_DECRYPT | ENCRYPTION_FLAG_NOPAD, + src_block, size, dst_block, &dst_len, + crypt_info.encryption_key, crypt_info.encryption_klen, + iv, MY_AES_BLOCK_SIZE); + + if (res != MY_AES_OK) { + ib::error() + << "Unable to decrypt data block " + " src: " << static_cast(src_block) + << " srclen: " << srv_sort_buf_size + << " buf: " << static_cast(dst_block) + << " buflen: " << dst_len + << "."; + return false; + } + + return true; +} /** Create the file or online log if it does not exist. @param[in,out] log online rebuild log @@ -360,6 +522,7 @@ row_log_online_op( const os_offset_t byte_offset = (os_offset_t) log->tail.blocks * srv_sort_buf_size; + byte* buf = log->tail.block; if (byte_offset + srv_sort_buf_size >= srv_online_max_size) { goto write_failed; @@ -380,11 +543,27 @@ row_log_online_op( goto err_exit; } + /* If encryption is enabled encrypt buffer before writing it + to file system. */ + if (log_tmp_is_encrypted()) { + if (!log_tmp_block_encrypt(log->tail.block, + srv_sort_buf_size, + log->crypt_tail, + byte_offset, + index->table->space)) { + log->error = DB_IO_DECRYPT_FAIL; + goto err_exit; + } + + srv_stats.n_rowlog_blocks_encrypted.inc(); + buf = log->crypt_tail; + } + err = os_file_write_int_fd( request, "(modification log)", log->fd, - log->tail.block, byte_offset, srv_sort_buf_size); + buf, byte_offset, srv_sort_buf_size); log->tail.blocks++; if (err != DB_SUCCESS) { @@ -479,6 +658,7 @@ row_log_table_close_func( const os_offset_t byte_offset = (os_offset_t) log->tail.blocks * srv_sort_buf_size; + byte* buf = log->tail.block; if (byte_offset + srv_sort_buf_size >= srv_online_max_size) { goto write_failed; @@ -499,11 +679,27 @@ row_log_table_close_func( goto err_exit; } + /* If encryption is enabled encrypt buffer before writing it + to file system. */ + if (log_tmp_is_encrypted()) { + if (!log_tmp_block_encrypt(log->tail.block, + srv_sort_buf_size, + log->crypt_tail, + byte_offset, + log->index->table->space)) { + log->error = DB_IO_DECRYPT_FAIL; + goto err_exit; + } + + srv_stats.n_rowlog_blocks_encrypted.inc(); + buf = log->crypt_tail; + } + err = os_file_write_int_fd( request, "(modification log)", log->fd, - log->tail.block, byte_offset, srv_sort_buf_size); + buf, byte_offset, srv_sort_buf_size); log->tail.blocks++; if (err != DB_SUCCESS) { @@ -2888,13 +3084,32 @@ row_log_table_apply_ops( IORequest request; + byte* buf = index->online_log->head.block; + err = os_file_read_no_error_handling_int_fd( request, index->online_log->fd, - index->online_log->head.block, ofs, + buf, ofs, srv_sort_buf_size, NULL); + /* If encryption is enabled decrypt buffer after reading it + from file system. */ + if (log_tmp_is_encrypted()) { + if (!log_tmp_block_decrypt(buf, + srv_sort_buf_size, + index->online_log->crypt_head, + ofs, + index->table->space)) { + error = DB_IO_DECRYPT_FAIL; + goto func_exit; + } + + srv_stats.n_rowlog_blocks_decrypted.inc(); + memcpy(buf, index->online_log->crypt_head, + srv_sort_buf_size); + } + if (err != DB_SUCCESS) { ib::error() << "Unable to read temporary file" @@ -3202,10 +3417,23 @@ row_log_allocate( log->path = path; log->n_old_col = index->table->n_cols; log->n_old_vcol = index->table->n_v_cols; + log->crypt_tail = log->crypt_head = NULL; + log->index = index; dict_index_set_online_status(index, ONLINE_INDEX_CREATION); index->online_log = log; + if (log_tmp_is_encrypted()) { + ulint size = srv_sort_buf_size; + log->crypt_head = static_cast(os_mem_alloc_large(&size)); + log->crypt_tail = static_cast(os_mem_alloc_large(&size)); + + if (!log->crypt_head || !log->crypt_tail) { + row_log_free(log); + DBUG_RETURN(false); + } + } + /* While we might be holding an exclusive data dictionary lock here, in row_log_abort_sec() we will not always be holding it. Use atomic operations in both cases. */ @@ -3227,6 +3455,15 @@ row_log_free( row_log_block_free(log->tail); row_log_block_free(log->head); row_merge_file_destroy_low(log->fd); + + if (log->crypt_head) { + os_mem_free_large(log->crypt_head, srv_sort_buf_size); + } + + if (log->crypt_tail) { + os_mem_free_large(log->crypt_tail, srv_sort_buf_size); + } + mutex_free(&log->mutex); ut_free(log); log = NULL; @@ -3718,13 +3955,32 @@ row_log_apply_ops( } IORequest request; + + byte* buf = index->online_log->head.block; + dberr_t err = os_file_read_no_error_handling_int_fd( request, index->online_log->fd, - index->online_log->head.block, ofs, + buf, ofs, srv_sort_buf_size, NULL); + /* If encryption is enabled decrypt buffer after reading it + from file system. */ + if (log_tmp_is_encrypted()) { + if (!log_tmp_block_decrypt(buf, + srv_sort_buf_size, + index->online_log->crypt_head, + ofs, + index->table->space)) { + error = DB_IO_DECRYPT_FAIL; + goto func_exit; + } + + srv_stats.n_rowlog_blocks_decrypted.inc(); + memcpy(buf, index->online_log->crypt_head, srv_sort_buf_size); + } + if (err != DB_SUCCESS) { ib::error() << "Unable to read temporary file" diff --git a/storage/innobase/row/row0merge.cc b/storage/innobase/row/row0merge.cc index 5d8e2e3b817d..79a3fc4c2e47 100644 --- a/storage/innobase/row/row0merge.cc +++ b/storage/innobase/row/row0merge.cc @@ -45,6 +45,8 @@ Completed by Sunny Bains and Marko Makela #include "fsp0sysspace.h" #include "ut0new.h" #include "ut0stage.h" +#include "os0file.h" +#include "my_aes.h" /* Ignore posix_fadvise() on those platforms where it does not exist */ #if defined _WIN32 @@ -265,6 +267,8 @@ class index_tuple_info_t { @param[in] old_table old table @param[in] fd file descriptor @param[in,out] block file buffer +@param[in,out] crypt_block encrypted file buffer +@param[in] space_id tablespace id @param[in] row_buf row_buf the sorted data tuples, or NULL if fd, block will be used instead @param[in,out] btr_bulk btr bulk instance @@ -280,6 +284,8 @@ row_merge_insert_index_tuples( const dict_table_t* old_table, int fd, row_merge_block_t* block, + row_merge_block_t* crypt_block, + ulint space_id, const row_merge_buf_t* row_buf, BtrBulk* btr_bulk, ut_stage_alter_t* stage = NULL); @@ -1067,11 +1073,13 @@ Read a merge block from the file system. ibool row_merge_read( /*===========*/ - int fd, /*!< in: file descriptor */ - ulint offset, /*!< in: offset where to read - in number of row_merge_block_t - elements */ - row_merge_block_t* buf) /*!< out: data */ + int fd, /*!< in: file descriptor */ + ulint offset, /*!< in: offset where to read + in number of row_merge_block_t + elements */ + row_merge_block_t* buf, /*!< out: data */ + row_merge_block_t* crypt_buf, /*!< in: crypt buf or NULL */ + ulint space_id) /*!< in: tablespace id */ { os_offset_t ofs = ((os_offset_t) offset) * srv_sort_buf_size; dberr_t err; @@ -1089,6 +1097,19 @@ row_merge_read( request, fd, buf, ofs, srv_sort_buf_size, NULL); + /* For encrypted tables, decrypt data after reading and copy data */ + if (err == DB_SUCCESS && log_tmp_is_encrypted()) { + + if (log_tmp_block_decrypt(static_cast(buf), + srv_sort_buf_size, static_cast(crypt_buf), + offset, space_id)) { + srv_stats.n_merge_blocks_decrypted.inc(); + memcpy(buf, crypt_buf, srv_sort_buf_size); + } else { + err = DB_IO_DECRYPT_FAIL; + } + } + #ifdef POSIX_FADV_DONTNEED /* Each block is read exactly once. Free up the file cache. */ posix_fadvise(fd, ofs, srv_sort_buf_size, POSIX_FADV_DONTNEED); @@ -1107,14 +1128,18 @@ Write a merge block to the file system. ibool row_merge_write( /*============*/ - int fd, /*!< in: file descriptor */ - ulint offset, /*!< in: offset where to write, - in number of row_merge_block_t elements */ - const void* buf) /*!< in: data */ + int fd, /*!< in: file descriptor */ + ulint offset, /*!< in: offset where to write, + in number of row_merge_block_t + elements */ + void* buf, /*!< in/out: data */ + void* crypt_buf, /*!< in: crypt buf or NULL */ + ulint space_id) /*!< in: tablespace id */ { size_t buf_len = srv_sort_buf_size; os_offset_t ofs = buf_len * (os_offset_t) offset; dberr_t err; + void* out_buf = buf; DBUG_ENTER("row_merge_write"); DBUG_PRINT("ib_merge_sort", ("fd=%d ofs=" UINT64PF, fd, ofs)); @@ -1124,9 +1149,22 @@ row_merge_write( request.disable_compression(); + /* For encrypted tables, encrypt data before writing */ + if (log_tmp_is_encrypted()) { + if (!log_tmp_block_encrypt(static_cast(buf), + srv_sort_buf_size, + static_cast(crypt_buf), + offset, space_id)) { + ib::error() << "Failed encrypt block at " << offset; + DBUG_RETURN(FALSE); + } + srv_stats.n_merge_blocks_encrypted.inc(); + out_buf = crypt_buf; + } + err = os_file_write_int_fd( request, - "(merge)", fd, buf, ofs, buf_len); + "(merge)", fd, out_buf, ofs, buf_len); #ifdef POSIX_FADV_DONTNEED /* The block will be needed on the next merge pass, @@ -1143,16 +1181,18 @@ Read a merge record. const byte* row_merge_read_rec( /*===============*/ - row_merge_block_t* block, /*!< in/out: file buffer */ - mrec_buf_t* buf, /*!< in/out: secondary buffer */ - const byte* b, /*!< in: pointer to record */ - const dict_index_t* index, /*!< in: index of the record */ - int fd, /*!< in: file descriptor */ - ulint* foffs, /*!< in/out: file offset */ - const mrec_t** mrec, /*!< out: pointer to merge record, - or NULL on end of list - (non-NULL on I/O error) */ - ulint* offsets)/*!< out: offsets of mrec */ + row_merge_block_t* block, /*!< in/out: file buffer */ + row_merge_block_t* crypt_block, /*!< in: crypt buf or NULL */ + ulint space_id, /*!< in: tablespace id */ + mrec_buf_t* buf, /*!< in/out: secondary buffer */ + const byte* b, /*!< in: pointer to record */ + const dict_index_t* index, /*!< in: index of the record */ + int fd, /*!< in: file descriptor */ + ulint* foffs, /*!< in/out: file offset */ + const mrec_t** mrec, /*!< out: pointer to merge + record, or NULL on end of list + (non-NULL on I/O error) */ + ulint* offsets) /*!< out: offsets of mrec */ { ulint extra_size; ulint data_size; @@ -1189,7 +1229,8 @@ row_merge_read_rec( /* Read another byte of extra_size. */ if (UNIV_UNLIKELY(b >= &block[srv_sort_buf_size])) { - if (!row_merge_read(fd, ++(*foffs), block)) { + if (!row_merge_read(fd, ++(*foffs), block, + crypt_block, space_id)) { err_exit: /* Signal I/O error. */ *mrec = b; @@ -1218,7 +1259,8 @@ row_merge_read_rec( ut_ad(avail_size < sizeof *buf); memcpy(*buf, b, avail_size); - if (!row_merge_read(fd, ++(*foffs), block)) { + if (!row_merge_read(fd, ++(*foffs), block, crypt_block, + space_id)) { goto err_exit; } @@ -1278,7 +1320,7 @@ row_merge_read_rec( ut_d(offsets[2] = (ulint) *mrec); ut_d(offsets[3] = (ulint) index); - if (!row_merge_read(fd, ++(*foffs), block)) { + if (!row_merge_read(fd, ++(*foffs), block, crypt_block, space_id)) { goto err_exit; } @@ -1350,13 +1392,16 @@ static byte* row_merge_write_rec( /*================*/ - row_merge_block_t* block, /*!< in/out: file buffer */ - mrec_buf_t* buf, /*!< in/out: secondary buffer */ - byte* b, /*!< in: pointer to end of block */ - int fd, /*!< in: file descriptor */ - ulint* foffs, /*!< in/out: file offset */ - const mrec_t* mrec, /*!< in: record to write */ - const ulint* offsets)/*!< in: offsets of mrec */ + row_merge_block_t* block, /*!< in/out: file buffer */ + row_merge_block_t* crypt_block, /*!< in: crypt buf or NULL */ + ulint space_id, /*!< in: tablespace id */ + mrec_buf_t* buf, /*!< in/out: secondary buffer */ + byte* b, /*!< in: pointer to end of + block */ + int fd, /*!< in: file descriptor */ + ulint* foffs, /*!< in/out: file offset */ + const mrec_t* mrec, /*!< in: record to write */ + const ulint* offsets) /*!< in: offsets of mrec */ { ulint extra_size; ulint size; @@ -1391,12 +1436,17 @@ row_merge_write_rec( record to the head of the new block. */ memcpy(b, buf[0], avail_size); - if (!row_merge_write(fd, (*foffs)++, block)) { + if (!row_merge_write(fd, (*foffs)++, block, crypt_block, + space_id)) { return(NULL); } UNIV_MEM_INVALID(&block[0], srv_sort_buf_size); + if (crypt_block) { + UNIV_MEM_INVALID(&crypt_block[0], srv_sort_buf_size); + } + /* Copy the rest. */ b = &block[0]; memcpy(b, buf[0] + avail_size, size - avail_size); @@ -1417,10 +1467,13 @@ static byte* row_merge_write_eof( /*================*/ - row_merge_block_t* block, /*!< in/out: file buffer */ - byte* b, /*!< in: pointer to end of block */ - int fd, /*!< in: file descriptor */ - ulint* foffs) /*!< in/out: file offset */ + row_merge_block_t* block, /*!< in/out: file buffer */ + row_merge_block_t* crypt_block, /*!< in: crypt buf or NULL */ + ulint space_id, /*!< in: tablespace id */ + byte* b, /*!< in: pointer to end of + block */ + int fd, /*!< in: file descriptor */ + ulint* foffs) /*!< in/out: file offset */ { ut_ad(block); ut_ad(b >= &block[0]); @@ -1443,7 +1496,7 @@ row_merge_write_eof( memset(b, 0xff, &block[srv_sort_buf_size] - b); #endif /* UNIV_DEBUG_VALGRIND */ - if (!row_merge_write(fd, (*foffs)++, block)) { + if (!row_merge_write(fd, (*foffs)++, block, crypt_block, space_id)) { DBUG_RETURN(NULL); } @@ -1637,6 +1690,7 @@ NULL if old_table == new_table ULINT_UNDEFINED if none is added @param[in,out] sequence autoinc sequence @param[in,out] block file buffer +@param[in,out] crypt_block encrypted file buffer @param[in] skip_pk_sort whether the new PRIMARY KEY will follow existing order @param[in,out] tmpfd temporary file handle @@ -1667,6 +1721,7 @@ row_merge_read_clustered_index( ulint add_autoinc, ib_sequence_t& sequence, row_merge_block_t* block, + row_merge_block_t* crypt_block, bool skip_pk_sort, int* tmpfd, ut_stage_alter_t* stage, @@ -2341,7 +2396,9 @@ row_merge_read_clustered_index( err = row_merge_insert_index_tuples( trx->id, index[i], old_table, - -1, NULL, buf, clust_btr_bulk); + -1, NULL, NULL, + new_table->space, buf, + clust_btr_bulk); if (row == NULL) { err = clust_btr_bulk->finish( @@ -2447,7 +2504,9 @@ row_merge_read_clustered_index( err = row_merge_insert_index_tuples( trx->id, index[i], old_table, - -1, NULL, buf, &btr_bulk); + -1, NULL, NULL, + new_table->space, buf, + &btr_bulk); err = btr_bulk.finish(err); @@ -2480,7 +2539,8 @@ row_merge_read_clustered_index( if (!row_merge_write( file->fd, file->offset++, - block)) { + block, crypt_block, + new_table->space)) { err = DB_TEMP_FILE_WRITE_FAIL; trx->error_key_num = i; break; @@ -2676,6 +2736,10 @@ row_merge_read_clustered_index( #define ROW_MERGE_WRITE_GET_NEXT_LOW(N, INDEX, AT_END) \ do { \ b2 = row_merge_write_rec(&block[2 * srv_sort_buf_size], \ + crypt_block ? \ + &crypt_block[2 * srv_sort_buf_size] :\ + NULL, \ + space_id, \ &buf[2], b2, \ of->fd, &of->offset, \ mrec##N, offsets##N); \ @@ -2683,6 +2747,10 @@ row_merge_read_clustered_index( goto corrupt; \ } \ b##N = row_merge_read_rec(&block[N * srv_sort_buf_size],\ + crypt_block ? \ + &crypt_block[N * srv_sort_buf_size] :\ + NULL, \ + space_id, \ &buf[N], b##N, INDEX, \ file->fd, foffs##N, \ &mrec##N, offsets##N); \ @@ -2708,13 +2776,15 @@ row_merge_read_clustered_index( #endif /* HAVE_PSI_STAGE_INTERFACE */ /** Merge two blocks of records on disk and write a bigger block. -@param[in] dup descriptor of index being created -@param[in] file file containing index entries -@param[in,out] block 3 buffers -@param[in,out] foffs0 offset of first source list in the file -@param[in,out] foffs1 offset of second source list in the file -@param[in,out] of output file -@param[in,out] stage performance schema accounting object, used by +@param[in] dup descriptor of index being created +@param[in] file file containing index entries +@param[in,out] block 3 buffers +@param[in,out] crypt_block encrypted file buffer +@param[in] space_id tablespace id +@param[in,out] foffs0 offset of first source list in the file +@param[in,out] foffs1 offset of second source list in the file +@param[in,out] of output file +@param[in,out] stage performance schema accounting object, used by ALTER TABLE. If not NULL stage->inc() will be called for each record processed. @return DB_SUCCESS or error code */ @@ -2724,6 +2794,8 @@ row_merge_blocks( const row_merge_dup_t* dup, const merge_file_t* file, row_merge_block_t* block, + row_merge_block_t* crypt_block, + ulint space_id, ulint* foffs0, ulint* foffs1, merge_file_t* of, @@ -2753,8 +2825,11 @@ row_merge_blocks( /* Write a record and read the next record. Split the output file in two halves, which can be merged on the following pass. */ - if (!row_merge_read(file->fd, *foffs0, &block[0]) - || !row_merge_read(file->fd, *foffs1, &block[srv_sort_buf_size])) { + if (!row_merge_read(file->fd, *foffs0, &block[0], + &crypt_block[0], space_id) + || !row_merge_read(file->fd, *foffs1, &block[srv_sort_buf_size], + crypt_block ? &crypt_block[srv_sort_buf_size] : NULL, + space_id)) { corrupt: mem_heap_free(heap); DBUG_RETURN(DB_CORRUPTION); @@ -2765,11 +2840,12 @@ row_merge_blocks( b2 = &block[2 * srv_sort_buf_size]; b0 = row_merge_read_rec( - &block[0], &buf[0], b0, dup->index, + &block[0], &crypt_block[0], space_id, &buf[0], b0, dup->index, file->fd, foffs0, &mrec0, offsets0); b1 = row_merge_read_rec( &block[srv_sort_buf_size], - &buf[srv_sort_buf_size], b1, dup->index, + crypt_block ? &crypt_block[srv_sort_buf_size] : NULL, + space_id, &buf[srv_sort_buf_size], b1, dup->index, file->fd, foffs1, &mrec1, offsets1); if (UNIV_UNLIKELY(!b0 && mrec0) || UNIV_UNLIKELY(!b1 && mrec1)) { @@ -2809,17 +2885,21 @@ row_merge_blocks( mem_heap_free(heap); b2 = row_merge_write_eof(&block[2 * srv_sort_buf_size], - b2, of->fd, &of->offset); + crypt_block ? + &crypt_block[2 * srv_sort_buf_size] : NULL, + space_id, b2, of->fd, &of->offset); DBUG_RETURN(b2 ? DB_SUCCESS : DB_CORRUPTION); } /** Copy a block of index entries. -@param[in] index index being created -@param[in] file input file -@param[in,out] block 3 buffers -@param[in,out] foffs0 input file offset -@param[in,out] of output file -@param[in,out] stage performance schema accounting object, used by +@param[in] index index being created +@param[in] file input file +@param[in,out] block 3 buffers +@param[in,out] crypt_block encrypted file buffer +@param[in] space_id tablespace id +@param[in,out] foffs0 input file offset +@param[in,out] of output file +@param[in,out] stage performance schema accounting object, used by ALTER TABLE. If not NULL stage->inc() will be called for each record processed. @return TRUE on success, FALSE on failure */ @@ -2829,6 +2909,8 @@ row_merge_blocks_copy( const dict_index_t* index, const merge_file_t* file, row_merge_block_t* block, + row_merge_block_t* crypt_block, + ulint space_id, ulint* foffs0, merge_file_t* of, ut_stage_alter_t* stage) @@ -2854,7 +2936,8 @@ row_merge_blocks_copy( /* Write a record and read the next record. Split the output file in two halves, which can be merged on the following pass. */ - if (!row_merge_read(file->fd, *foffs0, &block[0])) { + if (!row_merge_read(file->fd, *foffs0, &block[0], &crypt_block[0], + space_id)) { corrupt: mem_heap_free(heap); DBUG_RETURN(FALSE); @@ -2864,8 +2947,8 @@ row_merge_blocks_copy( b2 = &block[2 * srv_sort_buf_size]; - b0 = row_merge_read_rec(&block[0], &buf[0], b0, index, - file->fd, foffs0, &mrec0, offsets0); + b0 = row_merge_read_rec(&block[0], &crypt_block[0], space_id, &buf[0], + b0, index, file->fd, foffs0, &mrec0, offsets0); if (UNIV_UNLIKELY(!b0 && mrec0)) { goto corrupt; @@ -2885,6 +2968,9 @@ row_merge_blocks_copy( mem_heap_free(heap); DBUG_RETURN(row_merge_write_eof(&block[2 * srv_sort_buf_size], + crypt_block ? + &crypt_block[2 * srv_sort_buf_size] : + NULL, space_id, b2, of->fd, &of->offset) != NULL); } @@ -2894,6 +2980,8 @@ row_merge_blocks_copy( @param[in] dup descriptor of index being created @param[in,out] file file containing index entries @param[in,out] block 3 buffers +@param[in,out] crypt_block encrypted file buffer +@param[in] space_id tablespace id @param[in,out] tmpfd temporary file handle @param[in,out] num_run Number of runs that remain to be merged @param[in,out] run_offset Array that contains the first offset number @@ -2909,6 +2997,8 @@ row_merge( const row_merge_dup_t* dup, merge_file_t* file, row_merge_block_t* block, + row_merge_block_t* crypt_block, + ulint space_id, int* tmpfd, ulint* num_run, ulint* run_offset, @@ -2924,6 +3014,9 @@ row_merge( /*!< num of runs generated from this merge */ UNIV_MEM_ASSERT_W(&block[0], 3 * srv_sort_buf_size); + if (crypt_block) { + UNIV_MEM_ASSERT_W(&crypt_block[0], 3 * srv_sort_buf_size); + } ut_ad(ihalf < file->offset); @@ -2954,8 +3047,9 @@ row_merge( /* Remember the offset number for this run */ run_offset[n_run++] = of.offset; - error = row_merge_blocks(dup, file, block, - &foffs0, &foffs1, &of, stage); + error = row_merge_blocks(dup, file, block, crypt_block, + space_id, &foffs0, &foffs1, &of, + stage); if (error != DB_SUCCESS) { return(error); @@ -2973,8 +3067,8 @@ row_merge( /* Remember the offset number for this run */ run_offset[n_run++] = of.offset; - if (!row_merge_blocks_copy(dup->index, file, block, - &foffs0, &of, stage)) { + if (!row_merge_blocks_copy(dup->index, file, block, crypt_block, + space_id, &foffs0, &of, stage)) { return(DB_CORRUPTION); } } @@ -2989,8 +3083,8 @@ row_merge( /* Remember the offset number for this run */ run_offset[n_run++] = of.offset; - if (!row_merge_blocks_copy(dup->index, file, block, - &foffs1, &of, stage)) { + if (!row_merge_blocks_copy(dup->index, file, block, crypt_block, + space_id, &foffs1, &of, stage)) { return(DB_CORRUPTION); } } @@ -3025,12 +3119,14 @@ row_merge( } /** Merge disk files. -@param[in] trx transaction -@param[in] dup descriptor of index being created -@param[in,out] file file containing index entries -@param[in,out] block 3 buffers -@param[in,out] tmpfd temporary file handle -@param[in,out] stage performance schema accounting object, used by +@param[in] trx transaction +@param[in] dup descriptor of index being created +@param[in,out] file file containing index entries +@param[in,out] block 3 buffers +@param[in,out] crypt_block crypt buf or NULL +@param[in] space_id tablespace id +@param[in,out] tmpfd temporary file handle +@param[in,out] stage performance schema accounting object, used by ALTER TABLE. If not NULL, stage->begin_phase_sort() will be called initially and then stage->inc() will be called for each record processed. @return DB_SUCCESS or error code */ @@ -3040,6 +3136,8 @@ row_merge_sort( const row_merge_dup_t* dup, merge_file_t* file, row_merge_block_t* block, + row_merge_block_t* crypt_block, + ulint space_id, int* tmpfd, ut_stage_alter_t* stage /* = NULL */) { @@ -3074,8 +3172,8 @@ row_merge_sort( /* Merge the runs until we have one big run */ do { - error = row_merge(trx, dup, file, block, tmpfd, - &num_runs, run_offset, stage); + error = row_merge(trx, dup, file, block, crypt_block, space_id, + tmpfd, &num_runs, run_offset, stage); if (error != DB_SUCCESS) { break; @@ -3180,6 +3278,8 @@ row_merge_mtuple_to_dtuple( @param[in] old_table old table @param[in] fd file descriptor @param[in,out] block file buffer +@param[in,out] crypt_block crypt buf or NULL +@param[in] space_id tablespace id @param[in] row_buf row_buf the sorted data tuples, or NULL if fd, block will be used instead @param[in,out] btr_bulk btr bulk instance @@ -3195,6 +3295,8 @@ row_merge_insert_index_tuples( const dict_table_t* old_table, int fd, row_merge_block_t* block, + row_merge_block_t* crypt_block, + ulint space_id, const row_merge_buf_t* row_buf, BtrBulk* btr_bulk, ut_stage_alter_t* stage /* = NULL */) @@ -3247,7 +3349,7 @@ row_merge_insert_index_tuples( b = block; dtuple = NULL; - if (!row_merge_read(fd, foffs, block)) { + if (!row_merge_read(fd, foffs, block, crypt_block, space_id)) { error = DB_CORRUPTION; goto err_exit; } else { @@ -3281,8 +3383,9 @@ row_merge_insert_index_tuples( /* BLOB pointers must be copied from dtuple */ mrec = NULL; } else { - b = row_merge_read_rec(block, buf, b, index, - fd, &foffs, &mrec, offsets); + b = row_merge_read_rec(block, crypt_block, space_id, + buf, b, index, fd, &foffs, &mrec, + offsets); if (UNIV_UNLIKELY(!b)) { /* End of list, or I/O error */ if (mrec) { @@ -4338,6 +4441,7 @@ row_merge_build_indexes( merge_file_t* merge_files; row_merge_block_t* block; ut_new_pfx_t block_pfx; + ut_new_pfx_t crypt_pfx; ulint i; ulint j; dberr_t error; @@ -4370,6 +4474,20 @@ row_merge_build_indexes( DBUG_RETURN(DB_OUT_OF_MEMORY); } + /* If online logs are set to be encrypted, allocate additional buffer + for encryption/decryption. */ + row_merge_block_t* crypt_block = NULL; + + if (log_tmp_is_encrypted()) { + crypt_block = static_cast( + alloc.allocate_large( + 3 * srv_sort_buf_size, &crypt_pfx)); + + if (crypt_block == NULL) { + DBUG_RETURN(DB_OUT_OF_MEMORY); + } + } + trx_start_if_not_started_xa(trx, true); /* Check if we need a flush observer to flush dirty pages. @@ -4448,8 +4566,8 @@ row_merge_build_indexes( trx, table, old_table, new_table, online, indexes, fts_sort_idx, psort_info, merge_files, key_numbers, n_indexes, add_cols, add_v, col_map, add_autoinc, - sequence, block, skip_pk_sort, &tmpfd, stage, eval_table, - prebuilt); + sequence, block, crypt_block, skip_pk_sort, &tmpfd, stage, + eval_table, prebuilt); stage->end_phase_read_pk(); @@ -4547,8 +4665,8 @@ row_merge_build_indexes( sort_idx, table, col_map, 0}; error = row_merge_sort( - trx, &dup, &merge_files[i], - block, &tmpfd, stage); + trx, &dup, &merge_files[i], block, crypt_block, + new_table->space, &tmpfd, stage); if (error == DB_SUCCESS) { BtrBulk btr_bulk(sort_idx, trx->id, @@ -4557,8 +4675,9 @@ row_merge_build_indexes( error = row_merge_insert_index_tuples( trx->id, sort_idx, old_table, - merge_files[i].fd, block, NULL, - &btr_bulk, stage); + merge_files[i].fd, block, crypt_block, + new_table->space, + NULL, &btr_bulk, stage); error = btr_bulk.finish(error); } @@ -4624,6 +4743,10 @@ row_merge_build_indexes( alloc.deallocate_large(block, &block_pfx); + if (crypt_block) { + alloc.deallocate_large(crypt_block, &crypt_pfx); + } + DICT_TF2_FLAG_UNSET(new_table, DICT_TF2_FTS_ADD_DOC_ID); if (online && old_table == new_table && error != DB_SUCCESS) { diff --git a/storage/innobase/srv/srv0srv.cc b/storage/innobase/srv/srv0srv.cc index a491bdb6bca2..5e70cd7f8d2b 100644 --- a/storage/innobase/srv/srv0srv.cc +++ b/storage/innobase/srv/srv0srv.cc @@ -64,6 +64,7 @@ Created 10/8/1995 Heikki Tuuri #include "que0que.h" #include "row0mysql.h" #include "row0trunc.h" +#include "row0log.h" #include "srv0mon.h" #include "srv0srv.h" #include "srv0start.h" @@ -1774,6 +1775,18 @@ srv_export_innodb_status(void) export_vars.innodb_available_undo_logs = srv_available_undo_logs; + export_vars.innodb_n_merge_blocks_encrypted = + srv_stats.n_merge_blocks_encrypted; + + export_vars.innodb_n_merge_blocks_decrypted = + srv_stats.n_merge_blocks_decrypted; + + export_vars.innodb_n_rowlog_blocks_encrypted = + srv_stats.n_rowlog_blocks_encrypted; + + export_vars.innodb_n_rowlog_blocks_decrypted = + srv_stats.n_rowlog_blocks_decrypted; + #ifdef UNIV_DEBUG rw_lock_s_lock(&purge_sys->latch); trx_id_t up_limit_id; diff --git a/storage/innobase/srv/srv0start.cc b/storage/innobase/srv/srv0start.cc index 7ce4820d372e..1d7f79e3ed28 100644 --- a/storage/innobase/srv/srv0start.cc +++ b/storage/innobase/srv/srv0start.cc @@ -2701,6 +2701,9 @@ innobase_start_or_create_for_mysql(void) srv_start_state_set(SRV_START_STATE_MASTER); } + /* Enable row log encryption if it is set */ + log_tmp_enable_encryption_if_set(); + if (!srv_read_only_mode && srv_force_recovery < SRV_FORCE_NO_BACKGROUND) { From 88ed1f07d4281f28f0cb5b494ccae4be7bd9129c Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Tue, 27 Feb 2018 10:19:36 +0100 Subject: [PATCH 0617/1221] PS-290: Added testcase --- mysql-test/suite/binlog/r/percona_bug_ps290.result | 5 +++++ mysql-test/suite/binlog/t/percona_bug_ps290.test | 10 ++++++++++ 2 files changed, 15 insertions(+) create mode 100644 mysql-test/suite/binlog/r/percona_bug_ps290.result create mode 100644 mysql-test/suite/binlog/t/percona_bug_ps290.test diff --git a/mysql-test/suite/binlog/r/percona_bug_ps290.result b/mysql-test/suite/binlog/r/percona_bug_ps290.result new file mode 100644 index 000000000000..0fd3c6566cf6 --- /dev/null +++ b/mysql-test/suite/binlog/r/percona_bug_ps290.result @@ -0,0 +1,5 @@ +CREATE TABLE t1(a BLOB); +CREATE VIEW v1 AS SELECT * FROM t1; +UPDATE v1 SET a=10 WHERE a=200 LIMIT 1; +DROP VIEW v1; +DROP TABLE t1; diff --git a/mysql-test/suite/binlog/t/percona_bug_ps290.test b/mysql-test/suite/binlog/t/percona_bug_ps290.test new file mode 100644 index 000000000000..e223b94c187d --- /dev/null +++ b/mysql-test/suite/binlog/t/percona_bug_ps290.test @@ -0,0 +1,10 @@ +# PS-290: Unsafe query warning improvements caused a crash + +--source include/have_binlog_format_statement.inc + +CREATE TABLE t1(a BLOB); +CREATE VIEW v1 AS SELECT * FROM t1; +UPDATE v1 SET a=10 WHERE a=200 LIMIT 1; + +DROP VIEW v1; +DROP TABLE t1; From c65e46831ac220bd5e54f851ad48de84f94011a6 Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Wed, 28 Feb 2018 12:55:05 +0100 Subject: [PATCH 0618/1221] PS-290: Crash in the unsafe query warning checks with views --- sql/sql_base.cc | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/sql/sql_base.cc b/sql/sql_base.cc index 7730520c06e9..767c66fe707b 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -10254,7 +10254,14 @@ inline Join_node::Join_node(const TABLE_LIST* table, Item* cond, const ORDER* order) { max_sort_length= current_thd->variables.max_sort_length; - add_table(table->table); + if (table->table) + { + add_table(table->table); + } + else + { + add_join_list(table->view_tables); + } add_ordered_columns(order); add_const_equi_columns(cond); } From 99db4db122b87ec8fae36bd48311ea415d31eb3d Mon Sep 17 00:00:00 2001 From: Harin Vadodaria Date: Thu, 1 Mar 2018 06:35:22 +0100 Subject: [PATCH 0619/1221] Bug#27306178: ERROR IN SERVER HANDSHAKE WHILE CONNECTING WITH AUTH_SOCK PLUGIN USER Description: On client side, if server's default plugin is different than that of client, client discards packet containing scramble information. This means that if server has default plugin caching_sha2_password and client has default plugin mysql_native_password, and if client is trying to connect to server using a user with plugin C (in this case auth_socket), following will happen: 1. Client will discard scramble data 2. Client will call native_password's client side authentication plugin 3. In client_mpvio_read_packet, client will send user details to server and wait for scramble 4. Server, having received user details, goes on to process client reply and finds that there are 3 plugins involved. It then triggers a RESTART of authentication on server side without sending anything to client. As a part of restart, server uses user's actual plugin (auth_socket) and calls authenticate API for the same. 5. auth_socket plugin, having received user details and connection info, performs verification and sends OK/ERROR. 6. On client side, since client expects random data of length 20 from server, native plugin's authentication API will report error upon receing OK/ERROR. 7. run_plugin_auth() won't find expected reply (because OK/ERROR was already read) and exit with error. Solution: In run_plugin_auth(), there is a check for auth-switch packet. Fix is to extend it to cover OK packet too. --- .../auth_sec/include/multiple_plugins.inc | 89 +++++++++ .../suite/auth_sec/r/multiple_plugins.result | 174 ++++++++++++++++++ .../auth_sec/t/multiple_plugins-master.opt | 4 + .../suite/auth_sec/t/multiple_plugins.test | 12 ++ sql-common/client.c | 37 ++-- 5 files changed, 294 insertions(+), 22 deletions(-) create mode 100644 mysql-test/suite/auth_sec/include/multiple_plugins.inc create mode 100644 mysql-test/suite/auth_sec/r/multiple_plugins.result create mode 100644 mysql-test/suite/auth_sec/t/multiple_plugins-master.opt create mode 100644 mysql-test/suite/auth_sec/t/multiple_plugins.test diff --git a/mysql-test/suite/auth_sec/include/multiple_plugins.inc b/mysql-test/suite/auth_sec/include/multiple_plugins.inc new file mode 100644 index 000000000000..e718c169d5ee --- /dev/null +++ b/mysql-test/suite/auth_sec/include/multiple_plugins.inc @@ -0,0 +1,89 @@ +# +# Input(s) : +# $server_default_authentication_plugin +# + +--echo # Restart the server with $server_default_authentication_plugin as default authnetication plugin +let $restart_file= $MYSQLTEST_VARDIR/tmp/mysqld.1.expect; +--exec echo "wait" > $restart_file +--shutdown_server +--source include/wait_until_disconnected.inc +--exec echo "restart:--default-authentication-plugin=$server_default_authentication_plugin" > $restart_file +--enable_reconnect +--source include/wait_until_connected_again.inc +--disable_reconnect + + +--echo # Create users +CREATE USER qa_test_1_user IDENTIFIED WITH qa_auth_interface AS 'qa_test_1_dest'; +CREATE USER qa_test_1_dest IDENTIFIED BY 'dest_passwd'; +GRANT ALL PRIVILEGES ON test_user_db.* TO qa_test_1_dest identified by 'dest_passwd'; +GRANT PROXY ON qa_test_1_dest TO qa_test_1_user; + +CREATE USER native@localhost IDENTIFIED WITH 'mysql_native_password' BY 'abcd'; +CREATE USER sha256@localhost IDENTIFIED WITH 'sha256_password' BY 'abcd'; + +--echo # Connection tests + +--exec $MYSQL $PLUGIN_AUTH_OPT --protocol=TCP --host=127.0.0.1 -P$MASTER_MYPORT -uqa_test_1_user -pqa_test_1_dest --ssl-mode=DISABLED --server-public-key-path=$MYSQL_TEST_DIR/std_data/rsa_public_key.pem -e "SELECT CURRENT_USER()" 2>&1 +--exec $MYSQL $PLUGIN_AUTH_OPT --default-auth=mysql_native_password --protocol=TCP --host=127.0.0.1 -P$MASTER_MYPORT -uqa_test_1_user -pqa_test_1_dest --ssl-mode=DISABLED --server-public-key-path=$MYSQL_TEST_DIR/std_data/rsa_public_key.pem -e "SELECT CURRENT_USER()" 2>&1 +--exec $MYSQL $PLUGIN_AUTH_OPT --default-auth=sha256_password --protocol=TCP --host=127.0.0.1 -P$MASTER_MYPORT -uqa_test_1_user -pqa_test_1_dest --ssl-mode=DISABLED --server-public-key-path=$MYSQL_TEST_DIR/std_data/rsa_public_key.pem -e "SELECT CURRENT_USER()" 2>&1 +FLUSH PRIVILEGES; + +--exec $MYSQL $PLUGIN_AUTH_OPT --protocol=TCP --host=127.0.0.1 -P$MASTER_MYPORT -uqa_test_1_user -pqa_test_1_dest --ssl-mode=DISABLED --server-public-key-path=$MYSQL_TEST_DIR/std_data/rsa_public_key.pem -e "SELECT CURRENT_USER()" 2>&1 +FLUSH PRIVILEGES; +--exec $MYSQL $PLUGIN_AUTH_OPT --default-auth=mysql_native_password --protocol=TCP --host=127.0.0.1 -P$MASTER_MYPORT -uqa_test_1_user -pqa_test_1_dest --ssl-mode=DISABLED --server-public-key-path=$MYSQL_TEST_DIR/std_data/rsa_public_key.pem -e "SELECT CURRENT_USER()" 2>&1 +FLUSH PRIVILEGES; +--exec $MYSQL $PLUGIN_AUTH_OPT --default-auth=sha256_password --protocol=TCP --host=127.0.0.1 -P$MASTER_MYPORT -uqa_test_1_user -pqa_test_1_dest --ssl-mode=DISABLED --server-public-key-path=$MYSQL_TEST_DIR/std_data/rsa_public_key.pem -e "SELECT CURRENT_USER()" 2>&1 +FLUSH PRIVILEGES; + + +--exec $MYSQL $PLUGIN_AUTH_OPT --protocol=TCP --host=127.0.0.1 -P$MASTER_MYPORT -unative -pabcd --ssl-mode=DISABLED --server-public-key-path=$MYSQL_TEST_DIR/std_data/rsa_public_key.pem -e "SELECT CURRENT_USER()" 2>&1 +--exec $MYSQL $PLUGIN_AUTH_OPT --default-auth=mysql_native_password --protocol=TCP --host=127.0.0.1 -P$MASTER_MYPORT -unative -pabcd --ssl-mode=DISABLED --server-public-key-path=$MYSQL_TEST_DIR/std_data/rsa_public_key.pem -e "SELECT CURRENT_USER()" 2>&1 +--exec $MYSQL $PLUGIN_AUTH_OPT --default-auth=sha256_password --protocol=TCP --host=127.0.0.1 -P$MASTER_MYPORT -unative -pabcd --ssl-mode=DISABLED --server-public-key-path=$MYSQL_TEST_DIR/std_data/rsa_public_key.pem -e "SELECT CURRENT_USER()" 2>&1 +FLUSH PRIVILEGES; + + +--exec $MYSQL $PLUGIN_AUTH_OPT --protocol=TCP --host=127.0.0.1 -P$MASTER_MYPORT -usha256 -pabcd --ssl-mode=DISABLED --server-public-key-path=$MYSQL_TEST_DIR/std_data/rsa_public_key.pem -e "SELECT CURRENT_USER()" 2>&1 +--exec $MYSQL $PLUGIN_AUTH_OPT --default-auth=mysql_native_password --protocol=TCP --host=127.0.0.1 -P$MASTER_MYPORT -usha256 -pabcd --ssl-mode=DISABLED --server-public-key-path=$MYSQL_TEST_DIR/std_data/rsa_public_key.pem -e "SELECT CURRENT_USER()" 2>&1 +--exec $MYSQL $PLUGIN_AUTH_OPT --default-auth=sha256_password --protocol=TCP --host=127.0.0.1 -P$MASTER_MYPORT -usha256 -pabcd --ssl-mode=DISABLED --server-public-key-path=$MYSQL_TEST_DIR/std_data/rsa_public_key.pem -e "SELECT CURRENT_USER()" 2>&1 +FLUSH PRIVILEGES; + +--echo # Change user tests + +--connect(qa_test_1_conn, localhost, qa_test_1_user, qa_test_1_dest,,,,SSL) +--change_user native, abcd +SELECT CURRENT_USER(); +--change_user sha256, abcd +SELECT CURRENT_USER(); +--change_user +SELECT CURRENT_USER(); + +--connect(native_conn, localhost, native, abcd,,,,SSL) +--change_user qa_test_1_user, qa_test_1_dest +SELECT CURRENT_USER(); +--change_user sha256, abcd +SELECT CURRENT_USER(); +--change_user +SELECT CURRENT_USER(); + +--connect(sha256_conn, localhost, sha256, abcd,,,,SSL) +--change_user qa_test_1_user, qa_test_1_dest +SELECT CURRENT_USER(); +--change_user native, abcd +SELECT CURRENT_USER(); +--change_user +SELECT CURRENT_USER(); + +--connection default +--disconnect qa_test_1_conn +--disconnect native_conn +--disconnect sha256_conn + +--echo # Drop users +DROP USER qa_test_1_user; +DROP USER qa_test_1_dest; +DROP USER native@localhost; +DROP USER sha256@localhost; + +--source include/force_restart.inc diff --git a/mysql-test/suite/auth_sec/r/multiple_plugins.result b/mysql-test/suite/auth_sec/r/multiple_plugins.result new file mode 100644 index 000000000000..2b4ce2750d3c --- /dev/null +++ b/mysql-test/suite/auth_sec/r/multiple_plugins.result @@ -0,0 +1,174 @@ +# Check with mysql_native_password as --default-authentication-plugin +# Restart the server with mysql_native_password as default authnetication plugin +# Create users +CREATE USER qa_test_1_user IDENTIFIED WITH qa_auth_interface AS 'qa_test_1_dest'; +CREATE USER qa_test_1_dest IDENTIFIED BY 'dest_passwd'; +GRANT ALL PRIVILEGES ON test_user_db.* TO qa_test_1_dest identified by 'dest_passwd'; +Warnings: +Warning 1287 Using GRANT statement to modify existing user's properties other than privileges is deprecated and will be removed in future release. Use ALTER USER statement for this operation. +GRANT PROXY ON qa_test_1_dest TO qa_test_1_user; +CREATE USER native@localhost IDENTIFIED WITH 'mysql_native_password' BY 'abcd'; +CREATE USER sha256@localhost IDENTIFIED WITH 'sha256_password' BY 'abcd'; +# Connection tests +mysql: [Warning] Using a password on the command line interface can be insecure. +CURRENT_USER() +qa_test_1_user@% +mysql: [Warning] Using a password on the command line interface can be insecure. +CURRENT_USER() +qa_test_1_user@% +mysql: [Warning] Using a password on the command line interface can be insecure. +CURRENT_USER() +qa_test_1_user@% +FLUSH PRIVILEGES; +mysql: [Warning] Using a password on the command line interface can be insecure. +CURRENT_USER() +qa_test_1_user@% +FLUSH PRIVILEGES; +mysql: [Warning] Using a password on the command line interface can be insecure. +CURRENT_USER() +qa_test_1_user@% +FLUSH PRIVILEGES; +mysql: [Warning] Using a password on the command line interface can be insecure. +CURRENT_USER() +qa_test_1_user@% +FLUSH PRIVILEGES; +mysql: [Warning] Using a password on the command line interface can be insecure. +CURRENT_USER() +native@localhost +mysql: [Warning] Using a password on the command line interface can be insecure. +CURRENT_USER() +native@localhost +mysql: [Warning] Using a password on the command line interface can be insecure. +CURRENT_USER() +native@localhost +FLUSH PRIVILEGES; +mysql: [Warning] Using a password on the command line interface can be insecure. +CURRENT_USER() +sha256@localhost +mysql: [Warning] Using a password on the command line interface can be insecure. +CURRENT_USER() +sha256@localhost +mysql: [Warning] Using a password on the command line interface can be insecure. +CURRENT_USER() +sha256@localhost +FLUSH PRIVILEGES; +# Change user tests +SELECT CURRENT_USER(); +CURRENT_USER() +native@localhost +SELECT CURRENT_USER(); +CURRENT_USER() +sha256@localhost +SELECT CURRENT_USER(); +CURRENT_USER() +sha256@localhost +SELECT CURRENT_USER(); +CURRENT_USER() +qa_test_1_user@% +SELECT CURRENT_USER(); +CURRENT_USER() +sha256@localhost +SELECT CURRENT_USER(); +CURRENT_USER() +sha256@localhost +SELECT CURRENT_USER(); +CURRENT_USER() +qa_test_1_user@% +SELECT CURRENT_USER(); +CURRENT_USER() +native@localhost +SELECT CURRENT_USER(); +CURRENT_USER() +native@localhost +# Drop users +DROP USER qa_test_1_user; +DROP USER qa_test_1_dest; +DROP USER native@localhost; +DROP USER sha256@localhost; +# Check with sha256_password as --default-authentication-plugin +# Restart the server with sha256_password as default authnetication plugin +# Create users +CREATE USER qa_test_1_user IDENTIFIED WITH qa_auth_interface AS 'qa_test_1_dest'; +CREATE USER qa_test_1_dest IDENTIFIED BY 'dest_passwd'; +GRANT ALL PRIVILEGES ON test_user_db.* TO qa_test_1_dest identified by 'dest_passwd'; +Warnings: +Warning 1287 Using GRANT statement to modify existing user's properties other than privileges is deprecated and will be removed in future release. Use ALTER USER statement for this operation. +GRANT PROXY ON qa_test_1_dest TO qa_test_1_user; +CREATE USER native@localhost IDENTIFIED WITH 'mysql_native_password' BY 'abcd'; +CREATE USER sha256@localhost IDENTIFIED WITH 'sha256_password' BY 'abcd'; +# Connection tests +mysql: [Warning] Using a password on the command line interface can be insecure. +CURRENT_USER() +qa_test_1_user@% +mysql: [Warning] Using a password on the command line interface can be insecure. +CURRENT_USER() +qa_test_1_user@% +mysql: [Warning] Using a password on the command line interface can be insecure. +CURRENT_USER() +qa_test_1_user@% +FLUSH PRIVILEGES; +mysql: [Warning] Using a password on the command line interface can be insecure. +CURRENT_USER() +qa_test_1_user@% +FLUSH PRIVILEGES; +mysql: [Warning] Using a password on the command line interface can be insecure. +CURRENT_USER() +qa_test_1_user@% +FLUSH PRIVILEGES; +mysql: [Warning] Using a password on the command line interface can be insecure. +CURRENT_USER() +qa_test_1_user@% +FLUSH PRIVILEGES; +mysql: [Warning] Using a password on the command line interface can be insecure. +CURRENT_USER() +native@localhost +mysql: [Warning] Using a password on the command line interface can be insecure. +CURRENT_USER() +native@localhost +mysql: [Warning] Using a password on the command line interface can be insecure. +CURRENT_USER() +native@localhost +FLUSH PRIVILEGES; +mysql: [Warning] Using a password on the command line interface can be insecure. +CURRENT_USER() +sha256@localhost +mysql: [Warning] Using a password on the command line interface can be insecure. +CURRENT_USER() +sha256@localhost +mysql: [Warning] Using a password on the command line interface can be insecure. +CURRENT_USER() +sha256@localhost +FLUSH PRIVILEGES; +# Change user tests +SELECT CURRENT_USER(); +CURRENT_USER() +native@localhost +SELECT CURRENT_USER(); +CURRENT_USER() +sha256@localhost +SELECT CURRENT_USER(); +CURRENT_USER() +sha256@localhost +SELECT CURRENT_USER(); +CURRENT_USER() +qa_test_1_user@% +SELECT CURRENT_USER(); +CURRENT_USER() +sha256@localhost +SELECT CURRENT_USER(); +CURRENT_USER() +sha256@localhost +SELECT CURRENT_USER(); +CURRENT_USER() +qa_test_1_user@% +SELECT CURRENT_USER(); +CURRENT_USER() +native@localhost +SELECT CURRENT_USER(); +CURRENT_USER() +native@localhost +# Drop users +DROP USER qa_test_1_user; +DROP USER qa_test_1_dest; +DROP USER native@localhost; +DROP USER sha256@localhost; diff --git a/mysql-test/suite/auth_sec/t/multiple_plugins-master.opt b/mysql-test/suite/auth_sec/t/multiple_plugins-master.opt new file mode 100644 index 000000000000..9075c82eeca9 --- /dev/null +++ b/mysql-test/suite/auth_sec/t/multiple_plugins-master.opt @@ -0,0 +1,4 @@ +$PLUGIN_AUTH_INTERFACE_OPT +$PLUGIN_AUTH_INTERFACE_LOAD +--loose-sha256_password_private_key_path=$MYSQL_TEST_DIR/std_data/rsa_private_key.pem +--loose-sha256_password_public_key_path=$MYSQL_TEST_DIR/std_data/rsa_public_key.pem diff --git a/mysql-test/suite/auth_sec/t/multiple_plugins.test b/mysql-test/suite/auth_sec/t/multiple_plugins.test new file mode 100644 index 000000000000..f3553b626689 --- /dev/null +++ b/mysql-test/suite/auth_sec/t/multiple_plugins.test @@ -0,0 +1,12 @@ +--source include/have_plugin_interface.inc +--source include/not_embedded.inc +--source include/have_ssl.inc +--source include/have_sha256_rsa_auth.inc + +--echo # Check with mysql_native_password as --default-authentication-plugin +let $server_default_authentication_plugin=mysql_native_password; +--source ../include/multiple_plugins.inc + +--echo # Check with sha256_password as --default-authentication-plugin +let $server_default_authentication_plugin=sha256_password; +--source ../include/multiple_plugins.inc diff --git a/sql-common/client.c b/sql-common/client.c index 25182c7dff63..19faefe8323d 100644 --- a/sql-common/client.c +++ b/sql-common/client.c @@ -4016,9 +4016,15 @@ int run_plugin_auth(MYSQL *mysql, char *data, uint data_len, /* The connection may be closed. If so: do not try to read from the buffer. + If server sends OK packet without sending auth-switch first, client side + auth plugin may not be able to process it correctly. + However, if server sends OK, it means server side authentication plugin + already performed required checks. Further, server side plugin did not + really care about plugin used by client in this case. */ if (res > CR_OK && - (!my_net_is_inited(&mysql->net) || mysql->net.read_pos[0] != 254)) + (!my_net_is_inited(&mysql->net) || + (mysql->net.read_pos[0] != 0 && mysql->net.read_pos[0] != 254))) { /* the plugin returned an error. write it down in mysql, @@ -6189,29 +6195,16 @@ static int native_password_auth_client(MYSQL_PLUGIN_VIO *vio, MYSQL *mysql) DBUG_ENTER("native_password_auth_client"); + /* read the scramble */ + if ((pkt_len= vio->read_packet(vio, &pkt)) < 0) + DBUG_RETURN(CR_ERROR); - if (((MCPVIO_EXT *)vio)->mysql_change_user) - { - /* - in mysql_change_user() the client sends the first packet. - we use the old scramble. - */ - pkt= (uchar*)mysql->scramble; - pkt_len= SCRAMBLE_LENGTH + 1; - } - else - { - /* read the scramble */ - if ((pkt_len= vio->read_packet(vio, &pkt)) < 0) - DBUG_RETURN(CR_ERROR); + if (pkt_len != SCRAMBLE_LENGTH + 1) + DBUG_RETURN(CR_SERVER_HANDSHAKE_ERR); - if (pkt_len != SCRAMBLE_LENGTH + 1) - DBUG_RETURN(CR_SERVER_HANDSHAKE_ERR); - - /* save it in MYSQL */ - memcpy(mysql->scramble, pkt, SCRAMBLE_LENGTH); - mysql->scramble[SCRAMBLE_LENGTH] = 0; - } + /* save it in MYSQL */ + memcpy(mysql->scramble, pkt, SCRAMBLE_LENGTH); + mysql->scramble[SCRAMBLE_LENGTH] = 0; if (mysql->passwd[0]) { From 8d81f3b9f1449a7de19aa0b1e1cd7f0b85f56fc6 Mon Sep 17 00:00:00 2001 From: Ramil Kalimullin Date: Wed, 28 Feb 2018 14:47:31 +0400 Subject: [PATCH 0620/1221] Bug#25094892 ADD SUPPORT FOR OPENSSL 1.1 Backport to mysql-5.7 --- extra/yassl/include/openssl/ssl.h | 4 +- extra/yassl/src/ssl.cpp | 4 +- mysql-test/r/ssl_crl.result | 4 +- .../auth_sec/t/mysql_ssl_connection.test | 2 +- .../auth_sec/t/openssl_cert_generation.test | 8 +-- .../suite/auth_sec/t/ssl_auto_detect.test | 6 +- mysql-test/suite/auth_sec/t/tls.test | 4 +- mysql-test/t/mysql_ssl_default.test | 6 +- mysql-test/t/openssl_1.test | 31 ++++----- mysql-test/t/plugin_auth_sha256_tls.test | 2 +- mysql-test/t/ssl.test | 4 +- mysql-test/t/ssl_8k_key.test | 2 +- mysql-test/t/ssl_ca.test | 8 +-- mysql-test/t/ssl_compress.test | 4 +- mysql-test/t/ssl_crl.test | 8 +-- mysys_ssl/my_aes_openssl.cc | 63 +++++++++++++------ .../bindings/xcom/xcom/xcom_ssl_transport.c | 28 ++++++--- .../x/tests/mtr/t/connection_tls_version.test | 2 +- sql-common/client.c | 4 ++ sql/auth/sql_authentication.cc | 19 +++++- .../connection_handler_per_thread.cc | 6 +- sql/mysqld.cc | 8 ++- sql/rpl_slave.cc | 12 +++- sql/ssl_wrapper_service.cc | 6 +- vio/viossl.c | 8 ++- vio/viosslfactories.c | 42 ++++++++++--- 26 files changed, 199 insertions(+), 96 deletions(-) diff --git a/extra/yassl/include/openssl/ssl.h b/extra/yassl/include/openssl/ssl.h index 10fa4913b7e7..ff6cb6966611 100644 --- a/extra/yassl/include/openssl/ssl.h +++ b/extra/yassl/include/openssl/ssl.h @@ -1,5 +1,5 @@ /* - Copyright (c) 2005, 2017, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2005, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -179,7 +179,7 @@ enum { /* X509 Constants */ unsigned long ERR_get_error_line_data(const char**, int*, const char**, int *); void ERR_print_errors_fp(FILE*); char* ERR_error_string(unsigned long,char*); -void ERR_remove_state(unsigned long); +void ERR_remove_thread_state(const void *); unsigned long ERR_get_error(void); unsigned long ERR_peek_error(void); int ERR_GET_REASON(int); diff --git a/extra/yassl/src/ssl.cpp b/extra/yassl/src/ssl.cpp index 39244a01b927..c992d4464870 100644 --- a/extra/yassl/src/ssl.cpp +++ b/extra/yassl/src/ssl.cpp @@ -1,5 +1,5 @@ /* - Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2005, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -1615,7 +1615,7 @@ int SSLeay_add_ssl_algorithms() // compatibility only } -void ERR_remove_state(unsigned long) +void ERR_remove_thread_state(const void *) { GetErrors().Remove(); } diff --git a/mysql-test/r/ssl_crl.result b/mysql-test/r/ssl_crl.result index 5a34bb785464..08b47ecd01a7 100644 --- a/mysql-test/r/ssl_crl.result +++ b/mysql-test/r/ssl_crl.result @@ -28,8 +28,8 @@ ssl_key MYSQL_TEST_DIR/std_data/crl-server-key.pem # try to connect with '--ssl-crl' option using tilde home directoy # path substitution : should connect Variable_name Value -Ssl_cipher DHE-RSA-AES128-GCM-SHA256 +Ssl_cipher SSL_CIPHER # try to connect with '--ssl-crlpath' option using tilde home directoy # path substitution : should connect Variable_name Value -Ssl_cipher DHE-RSA-AES128-GCM-SHA256 +Ssl_cipher SSL_CIPHER diff --git a/mysql-test/suite/auth_sec/t/mysql_ssl_connection.test b/mysql-test/suite/auth_sec/t/mysql_ssl_connection.test index 15148b8fdb14..97f14e76f1b9 100644 --- a/mysql-test/suite/auth_sec/t/mysql_ssl_connection.test +++ b/mysql-test/suite/auth_sec/t/mysql_ssl_connection.test @@ -7,7 +7,7 @@ connection default; CREATE USER u_20693153@localhost IDENTIFIED BY 'abcd'; ---replace_result DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER +--replace_result ECDHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER --exec $MYSQL --protocol=TCP -uu_20693153 -pabcd --ssl-ca=$MYSQL_TEST_DIR/std_data/cacert.pem -e "SHOW STATUS LIKE 'Ssl_cipher';" DROP USER u_20693153@localhost; diff --git a/mysql-test/suite/auth_sec/t/openssl_cert_generation.test b/mysql-test/suite/auth_sec/t/openssl_cert_generation.test index 9042b215ea67..baa3e0d604a1 100644 --- a/mysql-test/suite/auth_sec/t/openssl_cert_generation.test +++ b/mysql-test/suite/auth_sec/t/openssl_cert_generation.test @@ -183,7 +183,7 @@ let SEARCH_PATTERN= Auto generated SSL certificates are placed in data directory --file_exists $MYSQLTEST_VARDIR/mysqld.1/data/public_key.pem --echo # Ensure that server is ssl enabled ---replace_result DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER +--replace_result ECDHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER --exec $MYSQL -uroot --ssl-mode=REQUIRED -e "show status like 'Ssl_cipher'" #----------------------------------------------------------------------------- @@ -285,7 +285,7 @@ grant usage on *.* to wl7699_sha256 identified by 'abcd'; # Using SSL certificates --echo # Should be able to connect to server using generated SSL certificates. ---replace_result DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER +--replace_result ECDHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER --exec $MYSQL -uwl7699_sha256 -pabcd --ssl-mode=REQUIRED -e "show status like 'Ssl_cipher'" # Using RSA key pair --echo # Should be able to connect to server using RSA key pair. @@ -351,7 +351,7 @@ show variables like 'sha256%'; --echo # 6.3 : SSL connection --echo # Should be able to connect to server using generated SSL certificates. ---replace_result DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER +--replace_result ECDHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER --exec $MYSQL -uroot --ssl-mode=REQUIRED -e "show status like 'Ssl_cipher'" @@ -362,7 +362,7 @@ grant usage on *.* to wl7699_sha256 identified by 'abcd'; # Using SSL certificates --echo # Should be able to connect to server using generated SSL certificates. ---replace_result DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER +--replace_result ECDHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER --exec $MYSQL -uwl7699_sha256 -pabcd --ssl-mode=REQUIRED -e "show status like 'Ssl_cipher'" # Using RSA key pair --echo # Should be able to connect to server using RSA key pair. diff --git a/mysql-test/suite/auth_sec/t/ssl_auto_detect.test b/mysql-test/suite/auth_sec/t/ssl_auto_detect.test index 706f8b05ec1b..979bdf0feb7d 100644 --- a/mysql-test/suite/auth_sec/t/ssl_auto_detect.test +++ b/mysql-test/suite/auth_sec/t/ssl_auto_detect.test @@ -54,7 +54,7 @@ let SEARCH_PATTERN= CA certificate .* is self signed.; --echo # Try to establish SSL connection : This must succeed. connect (ssl_root_1,localhost,root,,,,,SSL); ---replace_result DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER +--replace_result ECDHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER SHOW STATUS LIKE 'Ssl_cipher'; SHOW VARIABLES LIKE 'have_ssl'; @@ -68,7 +68,7 @@ connection default; disconnect ssl_root_1; --echo # Connect using mysql client : This must succeed. ---replace_result DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER +--replace_result ECDHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER --exec $MYSQL -uroot --ssl-mode=REQUIRED -e "show status like 'Ssl_cipher';" @@ -140,7 +140,7 @@ let SEARCH_PATTERN= CA certificate .* is self signed.; --source include/search_pattern_in_file.inc --echo # Try creating SSL connection ---replace_result DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER +--replace_result ECDHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER --exec $MYSQL -uroot --ssl-mode=REQUIRED -e "show status like 'Ssl_cipher';" diff --git a/mysql-test/suite/auth_sec/t/tls.test b/mysql-test/suite/auth_sec/t/tls.test index cd9e9ee95065..d549dc39e734 100644 --- a/mysql-test/suite/auth_sec/t/tls.test +++ b/mysql-test/suite/auth_sec/t/tls.test @@ -32,11 +32,9 @@ let $MYSQLD_DATADIR= `SELECT @@datadir`; let $MYSQL_SOCKET= `SELECT @@socket`; let $MYSQL_PORT= `SELECT @@port`; -let $cipher_default= DHE-RSA-AES256-SHA; let $tls_default= TLSv1.1; let $openssl= query_get_value("SHOW STATUS LIKE 'Rsa_public_key'", Variable_name, 1); if ($openssl == 'Rsa_public_key'){ - let $cipher_default= DHE-RSA-AES128-GCM-SHA256; let $tls_default= TLSv1.2; } --echo #T1: Default TLS connection @@ -44,7 +42,7 @@ if ($openssl == 'Rsa_public_key'){ --exec $MYSQL --host=127.0.0.1 -P $MASTER_MYPORT -e "SHOW STATUS like 'Ssl_version'" --echo #T2: Default SSL cipher ---replace_result $cipher_default SSL_CIPHER +--replace_result ECDHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER --exec $MYSQL --host=127.0.0.1 -P $MASTER_MYPORT -e "SHOW STATUS like 'Ssl_cipher'" --echo #T3: Setting TLS version TLSv1.2 (for yassl TLSv1.1) from the client diff --git a/mysql-test/t/mysql_ssl_default.test b/mysql-test/t/mysql_ssl_default.test index 2fe345b6c0af..a8d2c19f1a84 100644 --- a/mysql-test/t/mysql_ssl_default.test +++ b/mysql-test/t/mysql_ssl_default.test @@ -14,15 +14,15 @@ --echo # verify that mysql default connect with ssl channel when using TCP/IP --echo # connection ---replace_result DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER +--replace_result ECDHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER --exec $MYSQL --host=127.0.0.1 -P $MASTER_MYPORT -e "SHOW STATUS like 'Ssl_cipher'" --echo # verify that mysql --ssl=0 connect with unencrypted channel ---replace_result DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER +--replace_result ECDHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER --exec $MYSQL --host=127.0.0.1 -P $MASTER_MYPORT -e "SHOW STATUS like 'Ssl_cipher'" --ssl-mode=DISABLED --echo # verify that mysql --ssl=1 connect with ssl channel ---replace_result DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER +--replace_result ECDHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER --exec $MYSQL --host=127.0.0.1 -P $MASTER_MYPORT -e "SHOW STATUS like 'Ssl_cipher'" --ssl-mode=REQUIRED CREATE USER u1@localhost IDENTIFIED BY 'secret' REQUIRE SSL; diff --git a/mysql-test/t/openssl_1.test b/mysql-test/t/openssl_1.test index 08ad2aec6e1b..cd53eeeb7550 100644 --- a/mysql-test/t/openssl_1.test +++ b/mysql-test/t/openssl_1.test @@ -16,20 +16,21 @@ drop table if exists t1; create table t1(f1 int); insert into t1 values (5); -let $cipher_val= "DHE-RSA-AES256-SHA"; -let $shavars= query_get_value("SHOW STATUS LIKE 'Rsa_public_key'", Variable_name, 1); -if ($shavars == 'Rsa_public_key'){ - let $cipher_val= "DHE-RSA-AES128-GCM-SHA256"; -} +connect (con0,localhost,root,,,,,SSL); +connection con0; +let $cipher= query_get_value("SHOW STATUS like 'Ssl_cipher'", Value, 1); +let $cipher_val= "$cipher"; +connection default; +disconnect con0; grant select on test.* to ssl_user1@localhost require SSL; ---replace_result DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER +--replace_result ECDHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER -- eval grant select on test.* to ssl_user2@localhost require cipher $cipher_val ---replace_result DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER +--replace_result ECDHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER -- eval grant select on test.* to ssl_user3@localhost require cipher $cipher_val AND SUBJECT "/C=SE/ST=Stockholm/L=Stockholm/O=Oracle/OU=MySQL/CN=Client" ---replace_result DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER +--replace_result ECDHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER -- eval grant select on test.* to ssl_user4@localhost require cipher $cipher_val AND SUBJECT "/C=SE/ST=Stockholm/L=Stockholm/O=Oracle/OU=MySQL/CN=Client" ISSUER "/C=SE/ST=Stockholm/L=Stockholm/O=Oracle/OU=MySQL/CN=CA" ---replace_result DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER +--replace_result ECDHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER -- eval grant select on test.* to ssl_user5@localhost require cipher $cipher_val AND SUBJECT "xxx" flush privileges; @@ -43,7 +44,7 @@ connect (con5,localhost,ssl_user5,,,,,SSL); connection con1; # Check ssl turned on ---replace_result DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER +--replace_result ECDHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER SHOW STATUS LIKE 'Ssl_cipher'; select * from t1; --error ER_TABLEACCESS_DENIED_ERROR @@ -51,7 +52,7 @@ delete from t1; connection con2; # Check ssl turned on ---replace_result DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER +--replace_result ECDHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER SHOW STATUS LIKE 'Ssl_cipher'; select * from t1; --error ER_TABLEACCESS_DENIED_ERROR @@ -59,7 +60,7 @@ delete from t1; connection con3; # Check ssl turned on ---replace_result DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER +--replace_result ECDHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER SHOW STATUS LIKE 'Ssl_cipher'; select * from t1; --error ER_TABLEACCESS_DENIED_ERROR @@ -67,7 +68,7 @@ delete from t1; connection con4; # Check ssl turned on ---replace_result DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER +--replace_result ECDHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER SHOW STATUS LIKE 'Ssl_cipher'; select * from t1; --error ER_TABLEACCESS_DENIED_ERROR @@ -142,7 +143,7 @@ drop table t1; # verification of servers certificate by setting both ca certificate # and ca path to NULL # ---replace_result DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER +--replace_result ECDHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER --exec $MYSQL --ssl-mode=REQUIRED --ssl-key=$MYSQL_TEST_DIR/std_data/client-key.pem --ssl-cert=$MYSQL_TEST_DIR/std_data/client-cert.pem -e "SHOW STATUS LIKE 'ssl_Cipher'" 2>&1 --echo End of 5.0 tests @@ -269,7 +270,7 @@ select 'is still running; no cipher request crashed the server' as result from d GRANT SELECT ON test.* TO bug42158@localhost REQUIRE X509; FLUSH PRIVILEGES; connect(con1,localhost,bug42158,,,,,SSL); ---replace_result DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER +--replace_result ECDHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER SHOW STATUS LIKE 'Ssl_cipher'; disconnect con1; connection default; diff --git a/mysql-test/t/plugin_auth_sha256_tls.test b/mysql-test/t/plugin_auth_sha256_tls.test index cd9055bffbf5..1a5ca96ac362 100644 --- a/mysql-test/t/plugin_auth_sha256_tls.test +++ b/mysql-test/t/plugin_auth_sha256_tls.test @@ -2,7 +2,7 @@ --source include/have_ssl.inc connect (ssl_con,localhost,root,,,,,SSL); ---replace_result DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER +--replace_result ECDHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER SHOW STATUS LIKE 'Ssl_cipher'; CREATE USER 'kristofer' IDENTIFIED WITH 'sha256_password'; diff --git a/mysql-test/t/ssl.test b/mysql-test/t/ssl.test index 80f11c70acd5..d1825bcabbbe 100644 --- a/mysql-test/t/ssl.test +++ b/mysql-test/t/ssl.test @@ -16,7 +16,7 @@ connect (ssl_con,localhost,root,,,,,SSL); # Check ssl turned on ---replace_result DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER +--replace_result ECDHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER SHOW STATUS LIKE 'Ssl_cipher'; # Check ssl expiration @@ -27,7 +27,7 @@ SHOW STATUS LIKE 'Ssl_server_not_after'; -- source include/common-tests.inc # Check ssl turned on ---replace_result DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER +--replace_result ECDHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER SHOW STATUS LIKE 'Ssl_cipher'; connection default; diff --git a/mysql-test/t/ssl_8k_key.test b/mysql-test/t/ssl_8k_key.test index 6750c1091d26..17a50f569506 100644 --- a/mysql-test/t/ssl_8k_key.test +++ b/mysql-test/t/ssl_8k_key.test @@ -4,7 +4,7 @@ # # Bug#29784 YaSSL assertion failure when reading 8k key. # ---replace_result DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER +--replace_result ECDHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER --exec $MYSQL --ssl-mode=REQUIRED --ssl-key=$MYSQL_TEST_DIR/std_data/client-key.pem --ssl-cert=$MYSQL_TEST_DIR/std_data/client-cert.pem -e "SHOW STATUS LIKE 'ssl_Cipher'" 2>&1 ## This test file is for testing encrypted communication only, not other diff --git a/mysql-test/t/ssl_ca.test b/mysql-test/t/ssl_ca.test index 87462d71aad6..6777cf479eb0 100644 --- a/mysql-test/t/ssl_ca.test +++ b/mysql-test/t/ssl_ca.test @@ -10,7 +10,7 @@ --exec $MYSQL --ssl-ca=$MYSQL_TEST_DIR/std_data/wrong-crl-ca-cert.pem --ssl-key=$MYSQL_TEST_DIR/std_data/crl-client-key.pem --ssl-cert=$MYSQL_TEST_DIR/std_data/crl-client-cert.pem test -e "SHOW STATUS LIKE 'Ssl_cipher'" 2>&1 --echo # try to connect with correct '--ssl-ca' path : should connect ---replace_result DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER +--replace_result ECDHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER --exec $MYSQL --ssl-ca=$MYSQL_TEST_DIR/std_data/crl-ca-cert.pem --ssl-key=$MYSQL_TEST_DIR/std_data/crl-client-key.pem --ssl-cert=$MYSQL_TEST_DIR/std_data/crl-client-cert.pem test -e "SHOW STATUS LIKE 'Ssl_cipher'" --echo # @@ -22,15 +22,15 @@ --echo # try to connect with '--ssl-ca' option using tilde home directoy --echo # path substitution : should connect ---replace_result DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER +--replace_result ECDHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER --exec $MYSQL --ssl-ca=$mysql_test_dir_path/std_data/crl-ca-cert.pem --ssl-key=$MYSQL_TEST_DIR/std_data/crl-client-key.pem --ssl-cert=$MYSQL_TEST_DIR/std_data/crl-client-cert.pem test -e "SHOW STATUS LIKE 'Ssl_cipher'" --echo # try to connect with '--ssl-key' option using tilde home directoy --echo # path substitution : should connect ---replace_result DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER +--replace_result ECDHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER --exec $MYSQL --ssl-ca=$MYSQL_TEST_DIR/std_data/crl-ca-cert.pem --ssl-key=$mysql_test_dir_path/std_data/crl-client-key.pem --ssl-cert=$MYSQL_TEST_DIR/std_data/crl-client-cert.pem test -e "SHOW STATUS LIKE 'Ssl_cipher'" --echo # try to connect with '--ssl-cert' option using tilde home directoy --echo # path substitution : should connect ---replace_result DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER +--replace_result ECDHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER --exec $MYSQL --ssl-ca=$MYSQL_TEST_DIR/std_data/crl-ca-cert.pem --ssl-key=$MYSQL_TEST_DIR/std_data/crl-client-key.pem --ssl-cert=$mysql_test_dir_path/std_data/crl-client-cert.pem test -e "SHOW STATUS LIKE 'Ssl_cipher'" diff --git a/mysql-test/t/ssl_compress.test b/mysql-test/t/ssl_compress.test index be9d8eede738..cd9cd22fcdb7 100644 --- a/mysql-test/t/ssl_compress.test +++ b/mysql-test/t/ssl_compress.test @@ -17,7 +17,7 @@ connect (ssl_compress_con,localhost,root,,,,,SSL COMPRESS); # Check ssl turned on ---replace_result DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER +--replace_result ECDHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER SHOW STATUS LIKE 'Ssl_cipher'; # Check compression turned on @@ -27,7 +27,7 @@ SHOW STATUS LIKE 'Compression'; -- source include/common-tests.inc # Check ssl turned on ---replace_result DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER +--replace_result ECDHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER SHOW STATUS LIKE 'Ssl_cipher'; # Check compression turned on diff --git a/mysql-test/t/ssl_crl.test b/mysql-test/t/ssl_crl.test index db7fd05b0334..fbe9bf1f2c0a 100644 --- a/mysql-test/t/ssl_crl.test +++ b/mysql-test/t/ssl_crl.test @@ -10,11 +10,11 @@ if (!$crllen) } --echo # test --crl for the client : should connect ---replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR +--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR ECDHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER --exec $MYSQL --ssl-mode=VERIFY_CA --ssl-ca=$MYSQL_TEST_DIR/std_data/crl-ca-cert.pem --ssl-key=$MYSQL_TEST_DIR/std_data/crl-client-key.pem --ssl-cert=$MYSQL_TEST_DIR/std_data/crl-client-cert.pem test --ssl-crl=$MYSQL_TEST_DIR/std_data/crl-client-revoked.crl -e "SHOW VARIABLES like '%ssl%';" --echo # test --crlpath for the client : should connect ---replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR +--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR ECDHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER --exec $MYSQL --ssl-mode=VERIFY_CA --ssl-ca=$MYSQL_TEST_DIR/std_data/crl-ca-cert.pem --ssl-key=$MYSQL_TEST_DIR/std_data/crl-client-key.pem --ssl-cert=$MYSQL_TEST_DIR/std_data/crl-client-cert.pem --ssl-crlpath=$MYSQL_TEST_DIR/std_data/crldir test -e "SHOW VARIABLES like '%ssl%';" --echo # try logging in with a certificate in the server's --ssl-crl : should fail @@ -31,10 +31,10 @@ if (!$crllen) --echo # try to connect with '--ssl-crl' option using tilde home directoy --echo # path substitution : should connect ---replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR +--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR ECDHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER --exec $MYSQL --ssl-ca=$MYSQL_TEST_DIR/std_data/crl-ca-cert.pem --ssl-key=$MYSQL_TEST_DIR/std_data/crl-client-key.pem --ssl-cert=$MYSQL_TEST_DIR/std_data/crl-client-cert.pem test --ssl-crl=$mysql_test_dir_path/std_data/crl-client-revoked.crl -e "SHOW STATUS LIKE 'Ssl_cipher'" --echo # try to connect with '--ssl-crlpath' option using tilde home directoy --echo # path substitution : should connect ---replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR +--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR ECDHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER --exec $MYSQL --ssl-ca=$MYSQL_TEST_DIR/std_data/crl-ca-cert.pem --ssl-key=$MYSQL_TEST_DIR/std_data/crl-client-key.pem --ssl-cert=$MYSQL_TEST_DIR/std_data/crl-client-cert.pem --ssl-crlpath=$mysql_test_dir_path/std_data/crldir test -e "SHOW STATUS LIKE 'Ssl_cipher'" diff --git a/mysys_ssl/my_aes_openssl.cc b/mysys_ssl/my_aes_openssl.cc index 261ba8ab732c..a0f8c147c7a2 100644 --- a/mysys_ssl/my_aes_openssl.cc +++ b/mysys_ssl/my_aes_openssl.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2015, 2016 Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2015, 2018 Oracle and/or its affiliates. All rights reserved. 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 @@ -122,33 +122,46 @@ int my_aes_encrypt(const unsigned char *source, uint32 source_length, enum my_aes_opmode mode, const unsigned char *iv, bool padding) { - EVP_CIPHER_CTX ctx; +#if OPENSSL_VERSION_NUMBER < 0x10100000L + EVP_CIPHER_CTX stack_ctx; + EVP_CIPHER_CTX *ctx= &stack_ctx; +#else /* OPENSSL_VERSION_NUMBER < 0x10100000L */ + EVP_CIPHER_CTX *ctx= EVP_CIPHER_CTX_new(); +#endif /* OPENSSL_VERSION_NUMBER < 0x10100000L */ const EVP_CIPHER *cipher= aes_evp_type(mode); int u_len, f_len; /* The real key to be used for encryption */ unsigned char rkey[MAX_AES_KEY_LENGTH / 8]; my_aes_create_key(key, key_length, rkey, mode); - if (!cipher || (EVP_CIPHER_iv_length(cipher) > 0 && !iv)) + if (!ctx || !cipher || (EVP_CIPHER_iv_length(cipher) > 0 && !iv)) return MY_AES_BAD_DATA; - if (!EVP_EncryptInit(&ctx, cipher, rkey, iv)) + if (!EVP_EncryptInit(ctx, cipher, rkey, iv)) goto aes_error; /* Error */ - if (!EVP_CIPHER_CTX_set_padding(&ctx, padding)) + if (!EVP_CIPHER_CTX_set_padding(ctx, padding)) goto aes_error; /* Error */ - if (!EVP_EncryptUpdate(&ctx, dest, &u_len, source, source_length)) + if (!EVP_EncryptUpdate(ctx, dest, &u_len, source, source_length)) goto aes_error; /* Error */ - if (!EVP_EncryptFinal(&ctx, dest + u_len, &f_len)) + if (!EVP_EncryptFinal(ctx, dest + u_len, &f_len)) goto aes_error; /* Error */ - EVP_CIPHER_CTX_cleanup(&ctx); +#if OPENSSL_VERSION_NUMBER < 0x10100000L + EVP_CIPHER_CTX_cleanup(ctx); +#else /* OPENSSL_VERSION_NUMBER < 0x10100000L */ + EVP_CIPHER_CTX_free(ctx); +#endif /* OPENSSL_VERSION_NUMBER < 0x10100000L */ return u_len + f_len; aes_error: /* need to explicitly clean up the error if we want to ignore it */ ERR_clear_error(); - EVP_CIPHER_CTX_cleanup(&ctx); +#if OPENSSL_VERSION_NUMBER < 0x10100000L + EVP_CIPHER_CTX_cleanup(ctx); +#else /* OPENSSL_VERSION_NUMBER < 0x10100000L */ + EVP_CIPHER_CTX_free(ctx); +#endif /* OPENSSL_VERSION_NUMBER < 0x10100000L */ return MY_AES_BAD_DATA; } @@ -159,7 +172,12 @@ int my_aes_decrypt(const unsigned char *source, uint32 source_length, bool padding) { - EVP_CIPHER_CTX ctx; +#if OPENSSL_VERSION_NUMBER < 0x10100000L + EVP_CIPHER_CTX stack_ctx; + EVP_CIPHER_CTX *ctx= &stack_ctx; +#else /* OPENSSL_VERSION_NUMBER < 0x10100000L */ + EVP_CIPHER_CTX *ctx= EVP_CIPHER_CTX_new(); +#endif /* OPENSSL_VERSION_NUMBER < 0x10100000L */ const EVP_CIPHER *cipher= aes_evp_type(mode); int u_len, f_len; @@ -167,27 +185,34 @@ int my_aes_decrypt(const unsigned char *source, uint32 source_length, unsigned char rkey[MAX_AES_KEY_LENGTH / 8]; my_aes_create_key(key, key_length, rkey, mode); - if (!cipher || (EVP_CIPHER_iv_length(cipher) > 0 && !iv)) + if (!ctx || !cipher || (EVP_CIPHER_iv_length(cipher) > 0 && !iv)) return MY_AES_BAD_DATA; - EVP_CIPHER_CTX_init(&ctx); - - if (!EVP_DecryptInit(&ctx, aes_evp_type(mode), rkey, iv)) + if (!EVP_DecryptInit(ctx, aes_evp_type(mode), rkey, iv)) goto aes_error; /* Error */ - if (!EVP_CIPHER_CTX_set_padding(&ctx, padding)) + if (!EVP_CIPHER_CTX_set_padding(ctx, padding)) goto aes_error; /* Error */ - if (!EVP_DecryptUpdate(&ctx, dest, &u_len, source, source_length)) + if (!EVP_DecryptUpdate(ctx, dest, &u_len, source, source_length)) goto aes_error; /* Error */ - if (!EVP_DecryptFinal_ex(&ctx, dest + u_len, &f_len)) + if (!EVP_DecryptFinal_ex(ctx, dest + u_len, &f_len)) goto aes_error; /* Error */ - EVP_CIPHER_CTX_cleanup(&ctx); +#if OPENSSL_VERSION_NUMBER < 0x10100000L + EVP_CIPHER_CTX_cleanup(ctx); +#else /* OPENSSL_VERSION_NUMBER < 0x10100000L */ + EVP_CIPHER_CTX_free(ctx); +#endif /* OPENSSL_VERSION_NUMBER < 0x10100000L */ + return u_len + f_len; aes_error: /* need to explicitly clean up the error if we want to ignore it */ ERR_clear_error(); - EVP_CIPHER_CTX_cleanup(&ctx); +#if OPENSSL_VERSION_NUMBER < 0x10100000L + EVP_CIPHER_CTX_cleanup(ctx); +#else /* OPENSSL_VERSION_NUMBER < 0x10100000L */ + EVP_CIPHER_CTX_free(ctx); +#endif /* OPENSSL_VERSION_NUMBER < 0x10100000L */ return MY_AES_BAD_DATA; } diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_ssl_transport.c b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_ssl_transport.c index 24f6e1c76989..58159aa3f582 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_ssl_transport.c +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_ssl_transport.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -140,13 +140,21 @@ static DH *get_dh2048(void) DH *dh; if ((dh=DH_new())) { - dh->p=BN_bin2bn(dh2048_p,sizeof(dh2048_p),NULL); - dh->g=BN_bin2bn(dh2048_g,sizeof(dh2048_g),NULL); - if (! dh->p || ! dh->g) - { + BIGNUM *p= BN_bin2bn(dh2048_p, sizeof(dh2048_p), NULL); + BIGNUM *g= BN_bin2bn(dh2048_g, sizeof(dh2048_g), NULL); + if (!p || !g +#if OPENSSL_VERSION_NUMBER >= 0x10100000L + || !DH_set0_pqg(dh, p, NULL, g) +#endif /* OPENSSL_VERSION_NUMBER >= 0x10100000L */ + ) { + /* DH_free() will free 'p' and 'g' at once. */ DH_free(dh); - dh=0; + return NULL; } +#if OPENSSL_VERSION_NUMBER < 0x10100000L + dh->p= p; + dh->g= g; +#endif /* OPENSSL_VERSION_NUMBER < 0x10100000L */ } return(dh); } @@ -567,7 +575,9 @@ void xcom_cleanup_ssl() if(!xcom_use_ssl()) return; - ERR_remove_state(0); +#if OPENSSL_VERSION_NUMBER < 0x10100000L + ERR_remove_thread_state(0); +#endif /* OPENSSL_VERSION_NUMBER < 0x10100000L */ } void xcom_destroy_ssl() @@ -677,7 +687,11 @@ int ssl_verify_server_cert(SSL *ssl, const char* server_hostname) goto error; } +#if OPENSSL_VERSION_NUMBER < 0x10100000L cn= (char *) ASN1_STRING_data(cn_asn1); +#else /* OPENSSL_VERSION_NUMBER < 0x10100000L */ + cn= (char *) ASN1_STRING_get0_data(cn_asn1); +#endif /* OPENSSL_VERSION_NUMBER < 0x10100000L */ /* There should not be any NULL embedded in the CN */ if ((size_t)ASN1_STRING_length(cn_asn1) != strlen(cn)) diff --git a/rapid/plugin/x/tests/mtr/t/connection_tls_version.test b/rapid/plugin/x/tests/mtr/t/connection_tls_version.test index 187affffc007..cfc9035437aa 100644 --- a/rapid/plugin/x/tests/mtr/t/connection_tls_version.test +++ b/rapid/plugin/x/tests/mtr/t/connection_tls_version.test @@ -31,7 +31,7 @@ EOF --let $XTESTPARAMS= -u user5_mysqlx --password='auth_string' --file=$xtest_file --ssl-cipher='DHE-RSA-AES256-SHA' --let $ERROR1= /in main, line 0:ERROR: error:00000001:lib\(0\):func\(0\):reason\(1\)/Application terminated with expected error: protocol version mismatch/ ---let $ERROR5= /in main, line 0:ERROR: error:00000005:lib\(0\):func\(0\):DH lib/Application terminated with expected error: socket layer receive error/ +--let $ERROR5= /in main, line 0:ERROR: error:00000005:lib\(0\):func\(0\):DH lib/Application terminated with expected error: socket layer receive error/ /in main, line 0:ERROR: error:00000001:lib\(0\):func\(0\):reason\(1\)/Application terminated with expected error: socket layer receive error/ --exec $MYSQLXTEST $XTESTPARAMS 2>&1 --exec $MYSQLXTEST --tls-version=TLSv1,TLSv1.1,TLSv1.2 $XTESTPARAMS 2>&1 diff --git a/sql-common/client.c b/sql-common/client.c index 19faefe8323d..f1192306ccb1 100644 --- a/sql-common/client.c +++ b/sql-common/client.c @@ -2744,7 +2744,11 @@ static int ssl_verify_server_cert(Vio *vio, const char* server_hostname, const c goto error; } +#if OPENSSL_VERSION_NUMBER < 0x10100000L cn= (char *) ASN1_STRING_data(cn_asn1); +#else /* OPENSSL_VERSION_NUMBER < 0x10100000L */ + cn= (char *) ASN1_STRING_get0_data(cn_asn1); +#endif /* OPENSSL_VERSION_NUMBER < 0x10100000L */ // There should not be any NULL embedded in the CN if ((size_t)ASN1_STRING_length(cn_asn1) != strlen(cn)) diff --git a/sql/auth/sql_authentication.cc b/sql/auth/sql_authentication.cc index 569d246ffecb..f161894344ff 100644 --- a/sql/auth/sql_authentication.cc +++ b/sql/auth/sql_authentication.cc @@ -3359,7 +3359,24 @@ class RSA_gen RSA *operator()(void) { /* generate RSA keys */ - RSA *rsa= RSA_generate_key(m_key_size, m_exponent, NULL, NULL); + RSA *rsa= RSA_new(); + if (!rsa) + return NULL; + BIGNUM *e= BN_new(); + if (!e) + { + RSA_free(rsa); + return NULL; + } + if (!BN_set_word(e, m_exponent) || + !RSA_generate_key_ex(rsa, m_key_size, e, NULL)) + { + RSA_free(rsa); + BN_free(e); + return NULL; + } + BN_free(e); + return rsa; // pass ownership } diff --git a/sql/conn_handler/connection_handler_per_thread.cc b/sql/conn_handler/connection_handler_per_thread.cc index 532873a34c58..43d748accfe8 100644 --- a/sql/conn_handler/connection_handler_per_thread.cc +++ b/sql/conn_handler/connection_handler_per_thread.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -308,7 +308,9 @@ extern "C" void *handle_connection(void *arg) thd->release_resources(); // Clean up errors now, before possibly waiting for a new connection. - ERR_remove_state(0); +#if OPENSSL_VERSION_NUMBER < 0x10100000L + ERR_remove_thread_state(0); +#endif /* OPENSSL_VERSION_NUMBER < 0x10100000L */ thd_manager->remove_thd(thd); Connection_handler_manager::dec_connection_count(); diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 4acff4e4d9bb..307778771bee 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -3408,7 +3408,11 @@ static int init_ssl() { #ifdef HAVE_OPENSSL #ifndef HAVE_YASSL +#if OPENSSL_VERSION_NUMBER < 0x10100000L CRYPTO_malloc_init(); +#else /* OPENSSL_VERSION_NUMBER < 0x10100000L */ + OPENSSL_malloc_init(); +#endif /* OPENSSL_VERSION_NUMBER < 0x10100000L */ #endif ssl_start(); #ifndef EMBEDDED_LIBRARY @@ -3434,7 +3438,9 @@ static int init_ssl() opt_ssl_cipher, &error, opt_ssl_crl, opt_ssl_crlpath, ssl_ctx_flags); DBUG_PRINT("info",("ssl_acceptor_fd: 0x%lx", (long) ssl_acceptor_fd)); - ERR_remove_state(0); +#if OPENSSL_VERSION_NUMBER < 0x10100000L + ERR_remove_thread_state(0); +#endif /* OPENSSL_VERSION_NUMBER < 0x10100000L */ if (!ssl_acceptor_fd) { /* diff --git a/sql/rpl_slave.cc b/sql/rpl_slave.cc index aee13e12cb25..37a20870bd4c 100644 --- a/sql/rpl_slave.cc +++ b/sql/rpl_slave.cc @@ -6026,7 +6026,9 @@ ignore_log_space_limit=%d", mysql_mutex_unlock(&mi->run_lock); DBUG_LEAVE; // Must match DBUG_ENTER() my_thread_end(); - ERR_remove_state(0); +#if OPENSSL_VERSION_NUMBER < 0x10100000L + ERR_remove_thread_state(0); +#endif /* OPENSSL_VERSION_NUMBER < 0x10100000L */ my_thread_exit(0); return(0); // Avoid compiler warnings } @@ -6256,7 +6258,9 @@ extern "C" void *handle_slave_worker(void *arg) } my_thread_end(); - ERR_remove_state(0); +#if OPENSSL_VERSION_NUMBER < 0x10100000L + ERR_remove_thread_state(0); +#endif /* OPENSSL_VERSION_NUMBER < 0x10100000L */ my_thread_exit(0); DBUG_RETURN(0); } @@ -7597,7 +7601,9 @@ llstr(rli->get_group_master_log_pos(), llbuff)); DBUG_LEAVE; // Must match DBUG_ENTER() my_thread_end(); - ERR_remove_state(0); +#if OPENSSL_VERSION_NUMBER < 0x10100000L + ERR_remove_thread_state(0); +#endif /* OPENSSL_VERSION_NUMBER < 0x10100000L */ my_thread_exit(0); return 0; // Avoid compiler warnings } diff --git a/sql/ssl_wrapper_service.cc b/sql/ssl_wrapper_service.cc index 772b4f145569..72820965060f 100644 --- a/sql/ssl_wrapper_service.cc +++ b/sql/ssl_wrapper_service.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as @@ -324,7 +324,9 @@ void ssl_wrapper_thread_cleanup() { #if !defined(HAVE_YASSL) ERR_clear_error(); - ERR_remove_state(0); +#if OPENSSL_VERSION_NUMBER < 0x10100000L + ERR_remove_thread_state(0); +#endif /* OPENSSL_VERSION_NUMBER < 0x10100000L */ #endif // !defined(HAVE_YASSL) } diff --git a/vio/viossl.c b/vio/viossl.c index 5622cb7ee92f..f738570f832e 100644 --- a/vio/viossl.c +++ b/vio/viossl.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -310,7 +310,9 @@ void vio_ssl_delete(Vio *vio) } #ifndef HAVE_YASSL +#if OPENSSL_VERSION_NUMBER < 0x10100000L ERR_remove_thread_state(0); +#endif /* OPENSSL_VERSION_NUMBER < 0x10100000L */ #endif vio_delete(vio); @@ -419,7 +421,11 @@ static int ssl_do(struct st_VioSSLFd *ptr, Vio *vio, long timeout, for (j = 0; j < n; j++) { SSL_COMP *c = sk_SSL_COMP_value(ssl_comp_methods, j); +#if OPENSSL_VERSION_NUMBER < 0x10100000L DBUG_PRINT("info", (" %d: %s\n", c->id, c->name)); +#else /* OPENSSL_VERSION_NUMBER < 0x10100000L */ + DBUG_PRINT("info", (" %d: %s\n", SSL_COMP_get_id(c), SSL_COMP_get0_name(c))); +#endif /* OPENSSL_VERSION_NUMBER < 0x10100000L */ } } #endif diff --git a/vio/viosslfactories.c b/vio/viosslfactories.c index f50678a37b32..d3891fd8b126 100644 --- a/vio/viosslfactories.c +++ b/vio/viosslfactories.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -121,13 +121,21 @@ static DH *get_dh2048(void) DH *dh; if ((dh=DH_new())) { - dh->p=BN_bin2bn(dh2048_p,sizeof(dh2048_p),NULL); - dh->g=BN_bin2bn(dh2048_g,sizeof(dh2048_g),NULL); - if (! dh->p || ! dh->g) - { + BIGNUM *p= BN_bin2bn(dh2048_p, sizeof(dh2048_p), NULL); + BIGNUM *g= BN_bin2bn(dh2048_g, sizeof(dh2048_g), NULL); + if (!p || !g +#if OPENSSL_VERSION_NUMBER >= 0x10100000L + || !DH_set0_pqg(dh, p, NULL, g) +#endif /* OPENSSL_VERSION_NUMBER >= 0x10100000L */ + ) { + /* DH_free() will free 'p' and 'g' at once. */ DH_free(dh); - dh=0; + return NULL; } +#if OPENSSL_VERSION_NUMBER < 0x10100000L + dh->p= p; + dh->g= g; +#endif /* OPENSSL_VERSION_NUMBER < 0x10100000L */ } return(dh); } @@ -229,6 +237,12 @@ vio_set_cert_stuff(SSL_CTX *ctx, const char *cert_file, const char *key_file, } #ifndef HAVE_YASSL + +/* + OpenSSL 1.1 supports native platform threads, + so we don't need the following callback functions. +*/ +#if OPENSSL_VERSION_NUMBER < 0x10100000L /* OpenSSL specific */ #ifdef HAVE_PSI_INTERFACE @@ -390,23 +404,29 @@ static void deinit_lock_callback_functions() set_lock_callback_functions(FALSE); } +#endif /* OPENSSL_VERSION_NUMBER < 0x10100000L */ + void vio_ssl_end() { - int i= 0; - if (ssl_initialized) { - ERR_remove_state(0); +#if OPENSSL_VERSION_NUMBER < 0x10100000L + int i; + + ERR_remove_thread_state(0); +#endif /* OPENSSL_VERSION_NUMBER < 0x10100000L */ ERR_free_strings(); EVP_cleanup(); CRYPTO_cleanup_all_ex_data(); +#if OPENSSL_VERSION_NUMBER < 0x10100000L deinit_lock_callback_functions(); - for (; i < CRYPTO_num_locks(); ++i) + for (i= 0; i < CRYPTO_num_locks(); ++i) mysql_rwlock_destroy(&openssl_stdlocks[i].lock); OPENSSL_free(openssl_stdlocks); +#endif /* OPENSSL_VERSION_NUMBER < 0x10100000L */ ssl_initialized= FALSE; } } @@ -424,8 +444,10 @@ void ssl_start() SSL_load_error_strings(); #ifndef HAVE_YASSL +#if OPENSSL_VERSION_NUMBER < 0x10100000L init_ssl_locks(); init_lock_callback_functions(); +#endif /* OPENSSL_VERSION_NUMBER < 0x10100000L */ #endif } } From d84a91096c56d26972d08bb63df44136c8543b98 Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Thu, 1 Mar 2018 13:23:05 +0100 Subject: [PATCH 0621/1221] From 41f8c180a9889e5fb733d7183c3a451147d90920 Mon Sep 17 00:00:00 2001 From: Tiago Jorge Date: Thu, 1 Mar 2018 14:55:47 +0100 Subject: [PATCH 0622/1221] BUG#26236857 - LRU_GET: ASSERTION `!IS_BUSY_MACHINE(&RETVAL->PAX)' FAILED (Post-Fix) This patch maintains the removal of the assertion code, but reverts the part of the patch that changes they way log_start is sent to other members and how new incarnations nodes are seen by the system within XCom. --- .../src/bindings/xcom/xcom/xcom_base.c | 13 +++------- .../src/bindings/xcom/xcom/xcom_base.h | 1 - .../src/bindings/xcom/xcom/xcom_detector.c | 24 +------------------ .../src/bindings/xcom/xcom/xcom_detector.h | 1 - .../src/bindings/xcom/xcom/xcom_proto_enum.h | 3 +-- .../src/bindings/xcom/xcom/xcom_transport.c | 17 +++---------- .../src/bindings/xcom/xcom/xcom_vp.h.gen | 3 +-- .../src/bindings/xcom/xcom/xcom_vp_str.c | 2 -- 8 files changed, 9 insertions(+), 55 deletions(-) diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.c b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.c index aea54cbe87df..917ea80a61a1 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.c +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.c @@ -425,10 +425,6 @@ static uint32_t my_id = 0; /* Unique id of this instance */ static synode_no current_message; /* Current message number */ static synode_no last_config_modification_id; /*Last configuration change proposal*/ -uint32_t get_my_id(){ - return my_id; -} - synode_no get_current_message() { return current_message; @@ -3964,9 +3960,6 @@ int acceptor_learner_task(task_arg arg) ceptor_learner_task. */ ep->srv = get_server(site, ep->p->from); - if(ep->rfd.x_proto > x_1_2){ /* Ignore nodes which do not send ID */ - update_xcom_id(ep->p->from, (uint32_t)ep->p->refcnt); /* Refcnt is really uuid */ - } ep->p->refcnt = 1; /* Refcnt from other end is void here */ MAY_DBG(FN; NDBG(ep->rfd.fd, d); NDBG(task_now(), f); @@ -4123,9 +4116,6 @@ int reply_handler_task(task_arg arg) add_event(string_arg("ep->s->con.fd")); add_event(int_arg(ep->s->con.fd)); ); - if(ep->s->con.x_proto > x_1_2){ /* Ignore nodes which do not send ID */ - update_xcom_id(ep->reply->from, (uint32_t)ep->reply->refcnt); /* Refcnt is really uuid */ - } ep->reply->refcnt = 1; /* Refcnt from other end is void here */ if (n <= 0) { shutdown_connection(&ep->s->con); @@ -4389,6 +4379,9 @@ static void server_handle_need_snapshot(server *srv, site_def const *s, node_no if (!synode_eq(null_synode, app_lsn) && synode_lt(app_lsn, gs->log_start)){ gs->log_start = app_lsn; } + else if (!synode_eq(null_synode, last_config_modification_id)) { + gs->log_start = last_config_modification_id; + } server_send_snapshot(srv, s, gs, node); server_push_log(srv, gs->log_start, node); diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.h b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.h index 7e6cec5622f5..7caf80f56744 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.h +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.h @@ -219,7 +219,6 @@ int64_t xcom_client_send_data(uint32_t size, char *data, connection_descriptor* fd); int xcom_client_terminate_and_exit(connection_descriptor* fd); int xcom_client_set_cache_limit(connection_descriptor *fd, uint64_t cache_limit); -uint32_t get_my_id(); static inline char *strerr_msg(char *buf, size_t len, int nr) { diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_detector.c b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_detector.c index 915d20997b2b..390ced5d50ad 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_detector.c +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_detector.c @@ -40,26 +40,6 @@ extern int xcom_shutdown; /* static double detected[NSERVERS]; */ -static struct{ - int changed; - uint32_t id[NSERVERS]; -}id_tracker; - -void update_xcom_id(node_no node, uint32_t id){ - if(node < NSERVERS && id_tracker.id[node] != id){ - id_tracker.changed = 1; - id_tracker.id[node] = id; - } -} - -static int xcom_id_changed(){ - return id_tracker.changed; -} - -static void reset_id_changed(){ - id_tracker.changed = 0; -} - /* See if node has been suspiciously still for some time */ int may_be_dead(detector_state const ds, node_no i, double seconds) { @@ -322,10 +302,8 @@ int detector_task(task_arg arg MY_ATTRIBUTE((unused))) DBGOHK(FN; NDBG(iamtheleader(x_site), d); NDBG(enough_live_nodes(x_site), d); ); /* Send xcom message if node has changed state */ DBGOHK(FN; NDBG(ep->notify,d)); - if ((xcom_id_changed() || ep->notify) && - enough_live_nodes(x_site) && iamtheleader(x_site)) { + if (ep->notify && iamtheleader(x_site) && enough_live_nodes(x_site)) { ep->notify = 0; - reset_id_changed(); send_my_view(x_site); } } diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_detector.h b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_detector.h index 7e64ace803c1..4eda7f930c4a 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_detector.h +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_detector.h @@ -29,7 +29,6 @@ void note_detected(struct site_def const *site, node_no node); int may_be_dead(detector_state const ds, node_no i, double seconds); void init_detector(detector_state ds); void invalidate_detector_sites(struct site_def *site); -void update_xcom_id(node_no node, uint32_t id); #ifdef __cplusplus } diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_proto_enum.h b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_proto_enum.h index e12675bf9303..8e3716e035e0 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_proto_enum.h +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_proto_enum.h @@ -17,8 +17,7 @@ enum xcom_proto { x_unknown_proto=0, x_1_0=1, x_1_1=2, - x_1_2=3, - x_1_3=4 + x_1_2=3 }; typedef enum xcom_proto xcom_proto; diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_transport.c b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_transport.c index fc8bd33df3aa..a29b024c6a33 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_transport.c +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_transport.c @@ -54,7 +54,7 @@ #include "xcom_ssl_transport.h" #endif -#define MY_XCOM_PROTO x_1_3 +#define MY_XCOM_PROTO x_1_2 xcom_proto const my_min_xcom_version = x_1_0; /* The minimum protocol version I am able to understand */ xcom_proto const my_xcom_version = MY_XCOM_PROTO; /* The maximun protocol version I am able to understand */ @@ -658,20 +658,11 @@ static inline int old_proto_knows(xcom_proto x_proto MY_ATTRIBUTE((unused)), int serialize_msg(pax_msg *p, xcom_proto x_proto, uint32_t *buflen, char **buf) { - int retval = 0; - *buflen = 0; *buf = 0; - if(old_proto_knows(x_proto, p->op)){ - /* We want to send the internal xcom ID instead of the reference count, - so we need to save and restore the count */ - int save = p->refcnt; - p->refcnt = (int) get_my_id(); - retval = serialize((void * )p, x_proto, buflen, (xdrproc_t)xdr_pax_msg, buf); - p->refcnt = save; - } - return retval; + return old_proto_knows(x_proto, p->op) && + serialize((void *)p, x_proto, buflen, (xdrproc_t)xdr_pax_msg, buf); } int deserialize_msg(pax_msg *p, xcom_proto x_proto, char *buf, uint32_t buflen) @@ -2162,7 +2153,6 @@ bool_t xdr_node_list_1_1(XDR *xdrs, node_list_1_1 *objp) sizeof (node_address), (xdrproc_t) xdr_node_address_with_1_0); case x_1_1: case x_1_2: - case x_1_3: return xdr_array (xdrs, (char **)&objp->node_list_val, (u_int *) &objp->node_list_len, NSERVERS, sizeof (node_address), (xdrproc_t) xdr_node_address); default: @@ -2195,7 +2185,6 @@ bool_t xdr_pax_msg(XDR *xdrs, pax_msg *objp) objp->delivered_msg = get_delivered_msg(); /* Use our own minimum */ return TRUE; case x_1_2: - case x_1_3: return xdr_pax_msg_1_2(xdrs, objp); default: return FALSE; diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_vp.h.gen b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_vp.h.gen index defbe1bd4cdd..f8ef407290e6 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_vp.h.gen +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_vp.h.gen @@ -34,8 +34,7 @@ enum xcom_proto { x_unknown_proto = 0, x_1_0 = 1, x_1_1 = 2, - x_1_2 = 3, - x_1_3 = 4, + x_1_2 = 3 }; typedef enum xcom_proto xcom_proto; diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_vp_str.c b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_vp_str.c index 0e52df85c188..c5bad74e42fd 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_vp_str.c +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_vp_str.c @@ -218,8 +218,6 @@ const char *xcom_proto_to_str(xcom_proto x) return "x_1_1"; case x_1_2: return "x_1_2"; - case x_1_3: - return "x_1_3"; default: return "???"; } From 189f413b6dbb94e5345388c56be4a9121cdf40ea Mon Sep 17 00:00:00 2001 From: Yura Sorokin Date: Thu, 1 Mar 2018 16:25:35 +0200 Subject: [PATCH 0623/1221] Fixed PS-3832 (Revert Percona fix for PS-990) https://jira.percona.com/browse/PS-3832 Reverted our fix for PS-990 "LP #1594964: percona 5.7.13-6-1 SLAVE SQL_THREAD memory leaks on the active server with Master-Master replication when relay_log_info_repository=TABLE" (https://jira.percona.com/browse/PS-990) (commit 4b08ef7) as original Bug #85251 "Memory leak in master-master GTID replication with sync_relay_log_info" (https://bugs.mysql.com/bug.php?id=85251) was fixed in 5.7.21 (commit mysql/mysql-server@f60bc04) and (commit mysql/mysql-server@be23d33). This should have been done during upstream 5.7.21 merge (PR #2137) but it was not. --- sql/rpl_info_table.cc | 60 ------------------------------------------- 1 file changed, 60 deletions(-) diff --git a/sql/rpl_info_table.cc b/sql/rpl_info_table.cc index 78cafdea79e7..204dd69c7570 100644 --- a/sql/rpl_info_table.cc +++ b/sql/rpl_info_table.cc @@ -22,50 +22,6 @@ #include "sql_class.h" // THD -class Thd_local_mem_root -{ - THD *m_thd; - MEM_ROOT *m_old_mem_root; - MEM_ROOT m_local_mem_root; - bool m_restored; - - Thd_local_mem_root(const Thd_local_mem_root&); - Thd_local_mem_root& operator=(const Thd_local_mem_root&); - -public: - - Thd_local_mem_root(THD *thd) : m_thd(thd), m_restored(false) - { - if (m_thd == current_thd) - { - m_old_mem_root= thd->mem_root; - init_sql_alloc(PSI_NOT_INSTRUMENTED, - &m_local_mem_root, - global_system_variables.query_alloc_block_size, - global_system_variables.query_prealloc_size); - m_thd->mem_root= &m_local_mem_root; - } - } - - ~Thd_local_mem_root() - { - if (!m_restored) - restore(); - } - - void restore() - { - if (m_thd == current_thd) - { - DBUG_ASSERT(m_thd->mem_root == &m_local_mem_root); - m_thd->mem_root= m_old_mem_root; - free_root(&m_local_mem_root, MYF(0)); - m_restored= true; - } - } - -}; - Rpl_info_table::Rpl_info_table(uint nparam, const char* param_schema, const char *param_table, @@ -139,7 +95,6 @@ int Rpl_info_table::do_init_info(enum_find_method method, uint instance) DBUG_ENTER("Rlp_info_table::do_init_info"); THD *thd= access->create_thd(); - Thd_local_mem_root local_mem_root(thd); saved_mode= thd->variables.sql_mode; tmp_disable_binlog(thd); @@ -192,7 +147,6 @@ int Rpl_info_table::do_init_info(enum_find_method method, uint instance) access->close_table(thd, table, &backup, error); reenable_binlog(thd); thd->variables.sql_mode= saved_mode; - local_mem_root.restore(); access->drop_thd(thd); DBUG_RETURN(error); } @@ -212,7 +166,6 @@ int Rpl_info_table::do_flush_info(const bool force) DBUG_RETURN(0); THD *thd= access->create_thd(); - Thd_local_mem_root local_mem_root(thd); sync_counter= 0; saved_mode= thd->variables.sql_mode; @@ -305,7 +258,6 @@ int Rpl_info_table::do_flush_info(const bool force) thd->is_operating_substatement_implicitly= false; reenable_binlog(thd); thd->variables.sql_mode= saved_mode; - local_mem_root.restore(); access->drop_thd(thd); DBUG_RETURN(error); } @@ -326,7 +278,6 @@ int Rpl_info_table::do_clean_info() DBUG_ENTER("Rpl_info_table::do_remove_info"); THD *thd= access->create_thd(); - Thd_local_mem_root local_mem_root(thd); saved_mode= thd->variables.sql_mode; tmp_disable_binlog(thd); @@ -362,7 +313,6 @@ int Rpl_info_table::do_clean_info() access->close_table(thd, table, &backup, error); reenable_binlog(thd); thd->variables.sql_mode= saved_mode; - local_mem_root.restore(); access->drop_thd(thd); DBUG_RETURN(error); } @@ -400,7 +350,6 @@ int Rpl_info_table::do_reset_info(uint nparam, DBUG_RETURN(1); thd= info->access->create_thd(); - Thd_local_mem_root local_mem_root(thd); saved_mode= thd->variables.sql_mode; tmp_disable_binlog(thd); @@ -477,7 +426,6 @@ int Rpl_info_table::do_reset_info(uint nparam, info->access->close_table(thd, table, &backup, error); reenable_binlog(thd); thd->variables.sql_mode= saved_mode; - local_mem_root.restore(); info->access->drop_thd(thd); delete info; DBUG_RETURN(error); @@ -493,7 +441,6 @@ enum_return_check Rpl_info_table::do_check_info() DBUG_ENTER("Rpl_info_table::do_check_info"); THD *thd= access->create_thd(); - Thd_local_mem_root local_mem_root(thd); saved_mode= thd->variables.sql_mode; /* @@ -535,7 +482,6 @@ enum_return_check Rpl_info_table::do_check_info() access->close_table(thd, table, &backup, return_check == ERROR_CHECKING_REPOSITORY); thd->variables.sql_mode= saved_mode; - local_mem_root.restore(); access->drop_thd(thd); DBUG_RETURN(return_check); } @@ -550,7 +496,6 @@ enum_return_check Rpl_info_table::do_check_info(uint instance) DBUG_ENTER("Rpl_info_table::do_check_info"); THD *thd= access->create_thd(); - Thd_local_mem_root local_mem_root(thd); saved_mode= thd->variables.sql_mode; /* @@ -598,7 +543,6 @@ enum_return_check Rpl_info_table::do_check_info(uint instance) access->close_table(thd, table, &backup, return_check == ERROR_CHECKING_REPOSITORY); thd->variables.sql_mode= saved_mode; - local_mem_root.restore(); access->drop_thd(thd); DBUG_RETURN(return_check); } @@ -621,7 +565,6 @@ bool Rpl_info_table::do_count_info(uint nparam, DBUG_RETURN(true); thd= info->access->create_thd(); - Thd_local_mem_root local_mem_root(thd); saved_mode= thd->variables.sql_mode; /* @@ -657,7 +600,6 @@ bool Rpl_info_table::do_count_info(uint nparam, */ info->access->close_table(thd, table, &backup, error); thd->variables.sql_mode= saved_mode; - local_mem_root.restore(); info->access->drop_thd(thd); delete info; DBUG_RETURN(error); @@ -835,7 +777,6 @@ bool Rpl_info_table::do_update_is_transactional() }); THD *thd= access->create_thd(); - Thd_local_mem_root local_mem_root(thd); saved_mode= thd->variables.sql_mode; tmp_disable_binlog(thd); @@ -854,7 +795,6 @@ bool Rpl_info_table::do_update_is_transactional() access->close_table(thd, table, &backup, 0); reenable_binlog(thd); thd->variables.sql_mode= saved_mode; - local_mem_root.restore(); access->drop_thd(thd); DBUG_RETURN(error); } From 5b596f96060f6529eeb560881db7617a9bd917da Mon Sep 17 00:00:00 2001 From: Maria Couceiro Date: Wed, 28 Feb 2018 14:12:31 +0000 Subject: [PATCH 0624/1221] BUG#20454797 WAIT_FOR_SLAVE_PARAM.INC IS NOT CHECKING FOR ERROR WHILE WAITING THE PARAMETER Post-push fix to stabilize rpl.rpl_semi_sync_after_sync test. --- mysql-test/suite/rpl/t/rpl_semi_sync_after_sync.test | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mysql-test/suite/rpl/t/rpl_semi_sync_after_sync.test b/mysql-test/suite/rpl/t/rpl_semi_sync_after_sync.test index de232e289619..7dab9d42e687 100644 --- a/mysql-test/suite/rpl/t/rpl_semi_sync_after_sync.test +++ b/mysql-test/suite/rpl/t/rpl_semi_sync_after_sync.test @@ -48,6 +48,8 @@ CALL mtr.add_suppression("Failed to run 'after_sync' hook"); # IO thread might have stopped. Restart it. --disable_result_log --source include/rpl_connection_slave.inc +--let $slave_io_errno= 2003 #CR_CONN_HOST_ERROR +--let $rpl_allow_error= 1 --source include/start_slave_io.inc --enable_result_log From 54b947743cc890703c96bc7c5d241e7825f83cc6 Mon Sep 17 00:00:00 2001 From: Harin Vadodaria Date: Fri, 2 Mar 2018 09:28:38 +0100 Subject: [PATCH 0625/1221] Bug#27306178: ERROR IN SERVER HANDSHAKE WHILE CONNECTING WITH AUTH_SOCK PLUGIN USER Post push fix: Fixing 5.7 test issues. --- .../auth_sec/include/multiple_plugins.inc | 4 --- .../suite/auth_sec/r/multiple_plugins.result | 16 ++-------- sql-common/client.c | 29 ++++++++++++++----- 3 files changed, 23 insertions(+), 26 deletions(-) diff --git a/mysql-test/suite/auth_sec/include/multiple_plugins.inc b/mysql-test/suite/auth_sec/include/multiple_plugins.inc index e718c169d5ee..6b34fb54f4b8 100644 --- a/mysql-test/suite/auth_sec/include/multiple_plugins.inc +++ b/mysql-test/suite/auth_sec/include/multiple_plugins.inc @@ -52,8 +52,6 @@ FLUSH PRIVILEGES; --echo # Change user tests --connect(qa_test_1_conn, localhost, qa_test_1_user, qa_test_1_dest,,,,SSL) ---change_user native, abcd -SELECT CURRENT_USER(); --change_user sha256, abcd SELECT CURRENT_USER(); --change_user @@ -70,8 +68,6 @@ SELECT CURRENT_USER(); --connect(sha256_conn, localhost, sha256, abcd,,,,SSL) --change_user qa_test_1_user, qa_test_1_dest SELECT CURRENT_USER(); ---change_user native, abcd -SELECT CURRENT_USER(); --change_user SELECT CURRENT_USER(); diff --git a/mysql-test/suite/auth_sec/r/multiple_plugins.result b/mysql-test/suite/auth_sec/r/multiple_plugins.result index 2b4ce2750d3c..c8255cee112c 100644 --- a/mysql-test/suite/auth_sec/r/multiple_plugins.result +++ b/mysql-test/suite/auth_sec/r/multiple_plugins.result @@ -55,9 +55,6 @@ FLUSH PRIVILEGES; # Change user tests SELECT CURRENT_USER(); CURRENT_USER() -native@localhost -SELECT CURRENT_USER(); -CURRENT_USER() sha256@localhost SELECT CURRENT_USER(); CURRENT_USER() @@ -76,10 +73,7 @@ CURRENT_USER() qa_test_1_user@% SELECT CURRENT_USER(); CURRENT_USER() -native@localhost -SELECT CURRENT_USER(); -CURRENT_USER() -native@localhost +qa_test_1_user@% # Drop users DROP USER qa_test_1_user; DROP USER qa_test_1_dest; @@ -142,9 +136,6 @@ FLUSH PRIVILEGES; # Change user tests SELECT CURRENT_USER(); CURRENT_USER() -native@localhost -SELECT CURRENT_USER(); -CURRENT_USER() sha256@localhost SELECT CURRENT_USER(); CURRENT_USER() @@ -163,10 +154,7 @@ CURRENT_USER() qa_test_1_user@% SELECT CURRENT_USER(); CURRENT_USER() -native@localhost -SELECT CURRENT_USER(); -CURRENT_USER() -native@localhost +qa_test_1_user@% # Drop users DROP USER qa_test_1_user; DROP USER qa_test_1_dest; diff --git a/sql-common/client.c b/sql-common/client.c index f1192306ccb1..a11bf174bb60 100644 --- a/sql-common/client.c +++ b/sql-common/client.c @@ -6199,16 +6199,29 @@ static int native_password_auth_client(MYSQL_PLUGIN_VIO *vio, MYSQL *mysql) DBUG_ENTER("native_password_auth_client"); - /* read the scramble */ - if ((pkt_len= vio->read_packet(vio, &pkt)) < 0) - DBUG_RETURN(CR_ERROR); - if (pkt_len != SCRAMBLE_LENGTH + 1) - DBUG_RETURN(CR_SERVER_HANDSHAKE_ERR); + if (((MCPVIO_EXT *)vio)->mysql_change_user) + { + /* + in mysql_change_user() the client sends the first packet. + we use the old scramble. + */ + pkt= (uchar*)mysql->scramble; + pkt_len= SCRAMBLE_LENGTH + 1; + } + else + { + /* read the scramble */ + if ((pkt_len= vio->read_packet(vio, &pkt)) < 0) + DBUG_RETURN(CR_ERROR); - /* save it in MYSQL */ - memcpy(mysql->scramble, pkt, SCRAMBLE_LENGTH); - mysql->scramble[SCRAMBLE_LENGTH] = 0; + if (pkt_len != SCRAMBLE_LENGTH + 1) + DBUG_RETURN(CR_SERVER_HANDSHAKE_ERR); + + /* save it in MYSQL */ + memcpy(mysql->scramble, pkt, SCRAMBLE_LENGTH); + mysql->scramble[SCRAMBLE_LENGTH] = 0; + } if (mysql->passwd[0]) { From 6a61fe377cd3936e17d736f46558622a10058a52 Mon Sep 17 00:00:00 2001 From: Dima Date: Wed, 28 Feb 2018 00:18:27 +0300 Subject: [PATCH 0626/1221] DOC-688 fix: added 3 missing env. variables for docker startup --- doc/source/installation/docker.rst | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/doc/source/installation/docker.rst b/doc/source/installation/docker.rst index df02a5aa70e3..a892aaf34d3e 100644 --- a/doc/source/installation/docker.rst +++ b/doc/source/installation/docker.rst @@ -165,12 +165,31 @@ except that you must specify at least one of the following: It is recommended to set a random password using the :variable:`MYSQL_RANDOM_ROOT_PASSWORD` variable. +.. variable:: MYSQL_ROOT_PASSWORD_FILE + + Specifies a file that will be read for the root user account. + This can be a mounted file when you run your container. This + can also be used in the scope of the Docker Secrets (Swarm mode) + functionality. + .. variable:: MYSQL_USER Specifies the name for the user with full access to the database specified by the :variable:`MYSQL_DATABASE` variable. Setting the :variable:`MYSQL_PASSWORD` variable is also required. +.. variable:: INIT_TOKUDB + + Specifies whether to allow the container to be started with + enabled TokuDB engine. Disabled by default. To enable, set + ``INIT_TOKUDB=yes``. + +.. variable:: INIT_ROCKSDB + + Specifies whether to allow the container to be started with + enabled RocksDB engine. Disabled by default. To enable, set + ``INIT_ROCKSDB=yes``. + Storing Data ============ From cfced87c497a699b013b5687398f303aa5e43366 Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Thu, 1 Mar 2018 13:23:05 +0100 Subject: [PATCH 0627/1221] From 708475d0d69d15d5226b4752bff7bf03833706f3 Mon Sep 17 00:00:00 2001 From: Harin Vadodaria Date: Thu, 1 Mar 2018 06:35:22 +0100 Subject: [PATCH 0628/1221] Bug#27306178: ERROR IN SERVER HANDSHAKE WHILE CONNECTING WITH AUTH_SOCK PLUGIN USER Description: On client side, if server's default plugin is different than that of client, client discards packet containing scramble information. This means that if server has default plugin caching_sha2_password and client has default plugin mysql_native_password, and if client is trying to connect to server using a user with plugin C (in this case auth_socket), following will happen: 1. Client will discard scramble data 2. Client will call native_password's client side authentication plugin 3. In client_mpvio_read_packet, client will send user details to server and wait for scramble 4. Server, having received user details, goes on to process client reply and finds that there are 3 plugins involved. It then triggers a RESTART of authentication on server side without sending anything to client. As a part of restart, server uses user's actual plugin (auth_socket) and calls authenticate API for the same. 5. auth_socket plugin, having received user details and connection info, performs verification and sends OK/ERROR. 6. On client side, since client expects random data of length 20 from server, native plugin's authentication API will report error upon receing OK/ERROR. 7. run_plugin_auth() won't find expected reply (because OK/ERROR was already read) and exit with error. Solution: In run_plugin_auth(), there is a check for auth-switch packet. Fix is to extend it to cover OK packet too. (cherry picked from commit b5840b451966469f4b527ba062147897750258cf) --- .../auth_sec/include/multiple_plugins.inc | 89 +++++++++ .../suite/auth_sec/r/multiple_plugins.result | 174 ++++++++++++++++++ .../auth_sec/t/multiple_plugins-master.opt | 4 + .../suite/auth_sec/t/multiple_plugins.test | 12 ++ sql-common/client.c | 37 ++-- 5 files changed, 294 insertions(+), 22 deletions(-) create mode 100644 mysql-test/suite/auth_sec/include/multiple_plugins.inc create mode 100644 mysql-test/suite/auth_sec/r/multiple_plugins.result create mode 100644 mysql-test/suite/auth_sec/t/multiple_plugins-master.opt create mode 100644 mysql-test/suite/auth_sec/t/multiple_plugins.test diff --git a/mysql-test/suite/auth_sec/include/multiple_plugins.inc b/mysql-test/suite/auth_sec/include/multiple_plugins.inc new file mode 100644 index 000000000000..e718c169d5ee --- /dev/null +++ b/mysql-test/suite/auth_sec/include/multiple_plugins.inc @@ -0,0 +1,89 @@ +# +# Input(s) : +# $server_default_authentication_plugin +# + +--echo # Restart the server with $server_default_authentication_plugin as default authnetication plugin +let $restart_file= $MYSQLTEST_VARDIR/tmp/mysqld.1.expect; +--exec echo "wait" > $restart_file +--shutdown_server +--source include/wait_until_disconnected.inc +--exec echo "restart:--default-authentication-plugin=$server_default_authentication_plugin" > $restart_file +--enable_reconnect +--source include/wait_until_connected_again.inc +--disable_reconnect + + +--echo # Create users +CREATE USER qa_test_1_user IDENTIFIED WITH qa_auth_interface AS 'qa_test_1_dest'; +CREATE USER qa_test_1_dest IDENTIFIED BY 'dest_passwd'; +GRANT ALL PRIVILEGES ON test_user_db.* TO qa_test_1_dest identified by 'dest_passwd'; +GRANT PROXY ON qa_test_1_dest TO qa_test_1_user; + +CREATE USER native@localhost IDENTIFIED WITH 'mysql_native_password' BY 'abcd'; +CREATE USER sha256@localhost IDENTIFIED WITH 'sha256_password' BY 'abcd'; + +--echo # Connection tests + +--exec $MYSQL $PLUGIN_AUTH_OPT --protocol=TCP --host=127.0.0.1 -P$MASTER_MYPORT -uqa_test_1_user -pqa_test_1_dest --ssl-mode=DISABLED --server-public-key-path=$MYSQL_TEST_DIR/std_data/rsa_public_key.pem -e "SELECT CURRENT_USER()" 2>&1 +--exec $MYSQL $PLUGIN_AUTH_OPT --default-auth=mysql_native_password --protocol=TCP --host=127.0.0.1 -P$MASTER_MYPORT -uqa_test_1_user -pqa_test_1_dest --ssl-mode=DISABLED --server-public-key-path=$MYSQL_TEST_DIR/std_data/rsa_public_key.pem -e "SELECT CURRENT_USER()" 2>&1 +--exec $MYSQL $PLUGIN_AUTH_OPT --default-auth=sha256_password --protocol=TCP --host=127.0.0.1 -P$MASTER_MYPORT -uqa_test_1_user -pqa_test_1_dest --ssl-mode=DISABLED --server-public-key-path=$MYSQL_TEST_DIR/std_data/rsa_public_key.pem -e "SELECT CURRENT_USER()" 2>&1 +FLUSH PRIVILEGES; + +--exec $MYSQL $PLUGIN_AUTH_OPT --protocol=TCP --host=127.0.0.1 -P$MASTER_MYPORT -uqa_test_1_user -pqa_test_1_dest --ssl-mode=DISABLED --server-public-key-path=$MYSQL_TEST_DIR/std_data/rsa_public_key.pem -e "SELECT CURRENT_USER()" 2>&1 +FLUSH PRIVILEGES; +--exec $MYSQL $PLUGIN_AUTH_OPT --default-auth=mysql_native_password --protocol=TCP --host=127.0.0.1 -P$MASTER_MYPORT -uqa_test_1_user -pqa_test_1_dest --ssl-mode=DISABLED --server-public-key-path=$MYSQL_TEST_DIR/std_data/rsa_public_key.pem -e "SELECT CURRENT_USER()" 2>&1 +FLUSH PRIVILEGES; +--exec $MYSQL $PLUGIN_AUTH_OPT --default-auth=sha256_password --protocol=TCP --host=127.0.0.1 -P$MASTER_MYPORT -uqa_test_1_user -pqa_test_1_dest --ssl-mode=DISABLED --server-public-key-path=$MYSQL_TEST_DIR/std_data/rsa_public_key.pem -e "SELECT CURRENT_USER()" 2>&1 +FLUSH PRIVILEGES; + + +--exec $MYSQL $PLUGIN_AUTH_OPT --protocol=TCP --host=127.0.0.1 -P$MASTER_MYPORT -unative -pabcd --ssl-mode=DISABLED --server-public-key-path=$MYSQL_TEST_DIR/std_data/rsa_public_key.pem -e "SELECT CURRENT_USER()" 2>&1 +--exec $MYSQL $PLUGIN_AUTH_OPT --default-auth=mysql_native_password --protocol=TCP --host=127.0.0.1 -P$MASTER_MYPORT -unative -pabcd --ssl-mode=DISABLED --server-public-key-path=$MYSQL_TEST_DIR/std_data/rsa_public_key.pem -e "SELECT CURRENT_USER()" 2>&1 +--exec $MYSQL $PLUGIN_AUTH_OPT --default-auth=sha256_password --protocol=TCP --host=127.0.0.1 -P$MASTER_MYPORT -unative -pabcd --ssl-mode=DISABLED --server-public-key-path=$MYSQL_TEST_DIR/std_data/rsa_public_key.pem -e "SELECT CURRENT_USER()" 2>&1 +FLUSH PRIVILEGES; + + +--exec $MYSQL $PLUGIN_AUTH_OPT --protocol=TCP --host=127.0.0.1 -P$MASTER_MYPORT -usha256 -pabcd --ssl-mode=DISABLED --server-public-key-path=$MYSQL_TEST_DIR/std_data/rsa_public_key.pem -e "SELECT CURRENT_USER()" 2>&1 +--exec $MYSQL $PLUGIN_AUTH_OPT --default-auth=mysql_native_password --protocol=TCP --host=127.0.0.1 -P$MASTER_MYPORT -usha256 -pabcd --ssl-mode=DISABLED --server-public-key-path=$MYSQL_TEST_DIR/std_data/rsa_public_key.pem -e "SELECT CURRENT_USER()" 2>&1 +--exec $MYSQL $PLUGIN_AUTH_OPT --default-auth=sha256_password --protocol=TCP --host=127.0.0.1 -P$MASTER_MYPORT -usha256 -pabcd --ssl-mode=DISABLED --server-public-key-path=$MYSQL_TEST_DIR/std_data/rsa_public_key.pem -e "SELECT CURRENT_USER()" 2>&1 +FLUSH PRIVILEGES; + +--echo # Change user tests + +--connect(qa_test_1_conn, localhost, qa_test_1_user, qa_test_1_dest,,,,SSL) +--change_user native, abcd +SELECT CURRENT_USER(); +--change_user sha256, abcd +SELECT CURRENT_USER(); +--change_user +SELECT CURRENT_USER(); + +--connect(native_conn, localhost, native, abcd,,,,SSL) +--change_user qa_test_1_user, qa_test_1_dest +SELECT CURRENT_USER(); +--change_user sha256, abcd +SELECT CURRENT_USER(); +--change_user +SELECT CURRENT_USER(); + +--connect(sha256_conn, localhost, sha256, abcd,,,,SSL) +--change_user qa_test_1_user, qa_test_1_dest +SELECT CURRENT_USER(); +--change_user native, abcd +SELECT CURRENT_USER(); +--change_user +SELECT CURRENT_USER(); + +--connection default +--disconnect qa_test_1_conn +--disconnect native_conn +--disconnect sha256_conn + +--echo # Drop users +DROP USER qa_test_1_user; +DROP USER qa_test_1_dest; +DROP USER native@localhost; +DROP USER sha256@localhost; + +--source include/force_restart.inc diff --git a/mysql-test/suite/auth_sec/r/multiple_plugins.result b/mysql-test/suite/auth_sec/r/multiple_plugins.result new file mode 100644 index 000000000000..2b4ce2750d3c --- /dev/null +++ b/mysql-test/suite/auth_sec/r/multiple_plugins.result @@ -0,0 +1,174 @@ +# Check with mysql_native_password as --default-authentication-plugin +# Restart the server with mysql_native_password as default authnetication plugin +# Create users +CREATE USER qa_test_1_user IDENTIFIED WITH qa_auth_interface AS 'qa_test_1_dest'; +CREATE USER qa_test_1_dest IDENTIFIED BY 'dest_passwd'; +GRANT ALL PRIVILEGES ON test_user_db.* TO qa_test_1_dest identified by 'dest_passwd'; +Warnings: +Warning 1287 Using GRANT statement to modify existing user's properties other than privileges is deprecated and will be removed in future release. Use ALTER USER statement for this operation. +GRANT PROXY ON qa_test_1_dest TO qa_test_1_user; +CREATE USER native@localhost IDENTIFIED WITH 'mysql_native_password' BY 'abcd'; +CREATE USER sha256@localhost IDENTIFIED WITH 'sha256_password' BY 'abcd'; +# Connection tests +mysql: [Warning] Using a password on the command line interface can be insecure. +CURRENT_USER() +qa_test_1_user@% +mysql: [Warning] Using a password on the command line interface can be insecure. +CURRENT_USER() +qa_test_1_user@% +mysql: [Warning] Using a password on the command line interface can be insecure. +CURRENT_USER() +qa_test_1_user@% +FLUSH PRIVILEGES; +mysql: [Warning] Using a password on the command line interface can be insecure. +CURRENT_USER() +qa_test_1_user@% +FLUSH PRIVILEGES; +mysql: [Warning] Using a password on the command line interface can be insecure. +CURRENT_USER() +qa_test_1_user@% +FLUSH PRIVILEGES; +mysql: [Warning] Using a password on the command line interface can be insecure. +CURRENT_USER() +qa_test_1_user@% +FLUSH PRIVILEGES; +mysql: [Warning] Using a password on the command line interface can be insecure. +CURRENT_USER() +native@localhost +mysql: [Warning] Using a password on the command line interface can be insecure. +CURRENT_USER() +native@localhost +mysql: [Warning] Using a password on the command line interface can be insecure. +CURRENT_USER() +native@localhost +FLUSH PRIVILEGES; +mysql: [Warning] Using a password on the command line interface can be insecure. +CURRENT_USER() +sha256@localhost +mysql: [Warning] Using a password on the command line interface can be insecure. +CURRENT_USER() +sha256@localhost +mysql: [Warning] Using a password on the command line interface can be insecure. +CURRENT_USER() +sha256@localhost +FLUSH PRIVILEGES; +# Change user tests +SELECT CURRENT_USER(); +CURRENT_USER() +native@localhost +SELECT CURRENT_USER(); +CURRENT_USER() +sha256@localhost +SELECT CURRENT_USER(); +CURRENT_USER() +sha256@localhost +SELECT CURRENT_USER(); +CURRENT_USER() +qa_test_1_user@% +SELECT CURRENT_USER(); +CURRENT_USER() +sha256@localhost +SELECT CURRENT_USER(); +CURRENT_USER() +sha256@localhost +SELECT CURRENT_USER(); +CURRENT_USER() +qa_test_1_user@% +SELECT CURRENT_USER(); +CURRENT_USER() +native@localhost +SELECT CURRENT_USER(); +CURRENT_USER() +native@localhost +# Drop users +DROP USER qa_test_1_user; +DROP USER qa_test_1_dest; +DROP USER native@localhost; +DROP USER sha256@localhost; +# Check with sha256_password as --default-authentication-plugin +# Restart the server with sha256_password as default authnetication plugin +# Create users +CREATE USER qa_test_1_user IDENTIFIED WITH qa_auth_interface AS 'qa_test_1_dest'; +CREATE USER qa_test_1_dest IDENTIFIED BY 'dest_passwd'; +GRANT ALL PRIVILEGES ON test_user_db.* TO qa_test_1_dest identified by 'dest_passwd'; +Warnings: +Warning 1287 Using GRANT statement to modify existing user's properties other than privileges is deprecated and will be removed in future release. Use ALTER USER statement for this operation. +GRANT PROXY ON qa_test_1_dest TO qa_test_1_user; +CREATE USER native@localhost IDENTIFIED WITH 'mysql_native_password' BY 'abcd'; +CREATE USER sha256@localhost IDENTIFIED WITH 'sha256_password' BY 'abcd'; +# Connection tests +mysql: [Warning] Using a password on the command line interface can be insecure. +CURRENT_USER() +qa_test_1_user@% +mysql: [Warning] Using a password on the command line interface can be insecure. +CURRENT_USER() +qa_test_1_user@% +mysql: [Warning] Using a password on the command line interface can be insecure. +CURRENT_USER() +qa_test_1_user@% +FLUSH PRIVILEGES; +mysql: [Warning] Using a password on the command line interface can be insecure. +CURRENT_USER() +qa_test_1_user@% +FLUSH PRIVILEGES; +mysql: [Warning] Using a password on the command line interface can be insecure. +CURRENT_USER() +qa_test_1_user@% +FLUSH PRIVILEGES; +mysql: [Warning] Using a password on the command line interface can be insecure. +CURRENT_USER() +qa_test_1_user@% +FLUSH PRIVILEGES; +mysql: [Warning] Using a password on the command line interface can be insecure. +CURRENT_USER() +native@localhost +mysql: [Warning] Using a password on the command line interface can be insecure. +CURRENT_USER() +native@localhost +mysql: [Warning] Using a password on the command line interface can be insecure. +CURRENT_USER() +native@localhost +FLUSH PRIVILEGES; +mysql: [Warning] Using a password on the command line interface can be insecure. +CURRENT_USER() +sha256@localhost +mysql: [Warning] Using a password on the command line interface can be insecure. +CURRENT_USER() +sha256@localhost +mysql: [Warning] Using a password on the command line interface can be insecure. +CURRENT_USER() +sha256@localhost +FLUSH PRIVILEGES; +# Change user tests +SELECT CURRENT_USER(); +CURRENT_USER() +native@localhost +SELECT CURRENT_USER(); +CURRENT_USER() +sha256@localhost +SELECT CURRENT_USER(); +CURRENT_USER() +sha256@localhost +SELECT CURRENT_USER(); +CURRENT_USER() +qa_test_1_user@% +SELECT CURRENT_USER(); +CURRENT_USER() +sha256@localhost +SELECT CURRENT_USER(); +CURRENT_USER() +sha256@localhost +SELECT CURRENT_USER(); +CURRENT_USER() +qa_test_1_user@% +SELECT CURRENT_USER(); +CURRENT_USER() +native@localhost +SELECT CURRENT_USER(); +CURRENT_USER() +native@localhost +# Drop users +DROP USER qa_test_1_user; +DROP USER qa_test_1_dest; +DROP USER native@localhost; +DROP USER sha256@localhost; diff --git a/mysql-test/suite/auth_sec/t/multiple_plugins-master.opt b/mysql-test/suite/auth_sec/t/multiple_plugins-master.opt new file mode 100644 index 000000000000..9075c82eeca9 --- /dev/null +++ b/mysql-test/suite/auth_sec/t/multiple_plugins-master.opt @@ -0,0 +1,4 @@ +$PLUGIN_AUTH_INTERFACE_OPT +$PLUGIN_AUTH_INTERFACE_LOAD +--loose-sha256_password_private_key_path=$MYSQL_TEST_DIR/std_data/rsa_private_key.pem +--loose-sha256_password_public_key_path=$MYSQL_TEST_DIR/std_data/rsa_public_key.pem diff --git a/mysql-test/suite/auth_sec/t/multiple_plugins.test b/mysql-test/suite/auth_sec/t/multiple_plugins.test new file mode 100644 index 000000000000..f3553b626689 --- /dev/null +++ b/mysql-test/suite/auth_sec/t/multiple_plugins.test @@ -0,0 +1,12 @@ +--source include/have_plugin_interface.inc +--source include/not_embedded.inc +--source include/have_ssl.inc +--source include/have_sha256_rsa_auth.inc + +--echo # Check with mysql_native_password as --default-authentication-plugin +let $server_default_authentication_plugin=mysql_native_password; +--source ../include/multiple_plugins.inc + +--echo # Check with sha256_password as --default-authentication-plugin +let $server_default_authentication_plugin=sha256_password; +--source ../include/multiple_plugins.inc diff --git a/sql-common/client.c b/sql-common/client.c index 25182c7dff63..19faefe8323d 100644 --- a/sql-common/client.c +++ b/sql-common/client.c @@ -4016,9 +4016,15 @@ int run_plugin_auth(MYSQL *mysql, char *data, uint data_len, /* The connection may be closed. If so: do not try to read from the buffer. + If server sends OK packet without sending auth-switch first, client side + auth plugin may not be able to process it correctly. + However, if server sends OK, it means server side authentication plugin + already performed required checks. Further, server side plugin did not + really care about plugin used by client in this case. */ if (res > CR_OK && - (!my_net_is_inited(&mysql->net) || mysql->net.read_pos[0] != 254)) + (!my_net_is_inited(&mysql->net) || + (mysql->net.read_pos[0] != 0 && mysql->net.read_pos[0] != 254))) { /* the plugin returned an error. write it down in mysql, @@ -6189,29 +6195,16 @@ static int native_password_auth_client(MYSQL_PLUGIN_VIO *vio, MYSQL *mysql) DBUG_ENTER("native_password_auth_client"); + /* read the scramble */ + if ((pkt_len= vio->read_packet(vio, &pkt)) < 0) + DBUG_RETURN(CR_ERROR); - if (((MCPVIO_EXT *)vio)->mysql_change_user) - { - /* - in mysql_change_user() the client sends the first packet. - we use the old scramble. - */ - pkt= (uchar*)mysql->scramble; - pkt_len= SCRAMBLE_LENGTH + 1; - } - else - { - /* read the scramble */ - if ((pkt_len= vio->read_packet(vio, &pkt)) < 0) - DBUG_RETURN(CR_ERROR); + if (pkt_len != SCRAMBLE_LENGTH + 1) + DBUG_RETURN(CR_SERVER_HANDSHAKE_ERR); - if (pkt_len != SCRAMBLE_LENGTH + 1) - DBUG_RETURN(CR_SERVER_HANDSHAKE_ERR); - - /* save it in MYSQL */ - memcpy(mysql->scramble, pkt, SCRAMBLE_LENGTH); - mysql->scramble[SCRAMBLE_LENGTH] = 0; - } + /* save it in MYSQL */ + memcpy(mysql->scramble, pkt, SCRAMBLE_LENGTH); + mysql->scramble[SCRAMBLE_LENGTH] = 0; if (mysql->passwd[0]) { From 9370465a6847ad6ae1b73a371b3c8a7d230c7414 Mon Sep 17 00:00:00 2001 From: Harin Vadodaria Date: Fri, 2 Mar 2018 09:28:38 +0100 Subject: [PATCH 0629/1221] Bug#27306178: ERROR IN SERVER HANDSHAKE WHILE CONNECTING WITH AUTH_SOCK PLUGIN USER Post push fix: Fixing 5.7 test issues. (cherry picked from commit 5c32d17f7d552acc1db9e52260f7d2601e0f1929) --- .../auth_sec/include/multiple_plugins.inc | 4 --- .../suite/auth_sec/r/multiple_plugins.result | 16 ++-------- sql-common/client.c | 29 ++++++++++++++----- 3 files changed, 23 insertions(+), 26 deletions(-) diff --git a/mysql-test/suite/auth_sec/include/multiple_plugins.inc b/mysql-test/suite/auth_sec/include/multiple_plugins.inc index e718c169d5ee..6b34fb54f4b8 100644 --- a/mysql-test/suite/auth_sec/include/multiple_plugins.inc +++ b/mysql-test/suite/auth_sec/include/multiple_plugins.inc @@ -52,8 +52,6 @@ FLUSH PRIVILEGES; --echo # Change user tests --connect(qa_test_1_conn, localhost, qa_test_1_user, qa_test_1_dest,,,,SSL) ---change_user native, abcd -SELECT CURRENT_USER(); --change_user sha256, abcd SELECT CURRENT_USER(); --change_user @@ -70,8 +68,6 @@ SELECT CURRENT_USER(); --connect(sha256_conn, localhost, sha256, abcd,,,,SSL) --change_user qa_test_1_user, qa_test_1_dest SELECT CURRENT_USER(); ---change_user native, abcd -SELECT CURRENT_USER(); --change_user SELECT CURRENT_USER(); diff --git a/mysql-test/suite/auth_sec/r/multiple_plugins.result b/mysql-test/suite/auth_sec/r/multiple_plugins.result index 2b4ce2750d3c..c8255cee112c 100644 --- a/mysql-test/suite/auth_sec/r/multiple_plugins.result +++ b/mysql-test/suite/auth_sec/r/multiple_plugins.result @@ -55,9 +55,6 @@ FLUSH PRIVILEGES; # Change user tests SELECT CURRENT_USER(); CURRENT_USER() -native@localhost -SELECT CURRENT_USER(); -CURRENT_USER() sha256@localhost SELECT CURRENT_USER(); CURRENT_USER() @@ -76,10 +73,7 @@ CURRENT_USER() qa_test_1_user@% SELECT CURRENT_USER(); CURRENT_USER() -native@localhost -SELECT CURRENT_USER(); -CURRENT_USER() -native@localhost +qa_test_1_user@% # Drop users DROP USER qa_test_1_user; DROP USER qa_test_1_dest; @@ -142,9 +136,6 @@ FLUSH PRIVILEGES; # Change user tests SELECT CURRENT_USER(); CURRENT_USER() -native@localhost -SELECT CURRENT_USER(); -CURRENT_USER() sha256@localhost SELECT CURRENT_USER(); CURRENT_USER() @@ -163,10 +154,7 @@ CURRENT_USER() qa_test_1_user@% SELECT CURRENT_USER(); CURRENT_USER() -native@localhost -SELECT CURRENT_USER(); -CURRENT_USER() -native@localhost +qa_test_1_user@% # Drop users DROP USER qa_test_1_user; DROP USER qa_test_1_dest; diff --git a/sql-common/client.c b/sql-common/client.c index 19faefe8323d..d65a20f806af 100644 --- a/sql-common/client.c +++ b/sql-common/client.c @@ -6195,16 +6195,29 @@ static int native_password_auth_client(MYSQL_PLUGIN_VIO *vio, MYSQL *mysql) DBUG_ENTER("native_password_auth_client"); - /* read the scramble */ - if ((pkt_len= vio->read_packet(vio, &pkt)) < 0) - DBUG_RETURN(CR_ERROR); - if (pkt_len != SCRAMBLE_LENGTH + 1) - DBUG_RETURN(CR_SERVER_HANDSHAKE_ERR); + if (((MCPVIO_EXT *)vio)->mysql_change_user) + { + /* + in mysql_change_user() the client sends the first packet. + we use the old scramble. + */ + pkt= (uchar*)mysql->scramble; + pkt_len= SCRAMBLE_LENGTH + 1; + } + else + { + /* read the scramble */ + if ((pkt_len= vio->read_packet(vio, &pkt)) < 0) + DBUG_RETURN(CR_ERROR); - /* save it in MYSQL */ - memcpy(mysql->scramble, pkt, SCRAMBLE_LENGTH); - mysql->scramble[SCRAMBLE_LENGTH] = 0; + if (pkt_len != SCRAMBLE_LENGTH + 1) + DBUG_RETURN(CR_SERVER_HANDSHAKE_ERR); + + /* save it in MYSQL */ + memcpy(mysql->scramble, pkt, SCRAMBLE_LENGTH); + mysql->scramble[SCRAMBLE_LENGTH] = 0; + } if (mysql->passwd[0]) { From df0bc0a67b5cca06665e1d501a2f74b712af5cf5 Mon Sep 17 00:00:00 2001 From: Tiago Jorge Date: Thu, 1 Mar 2018 14:55:47 +0100 Subject: [PATCH 0630/1221] BUG#26236857 - LRU_GET: ASSERTION `!IS_BUSY_MACHINE(&RETVAL->PAX)' FAILED (Post-Fix) This patch maintains the removal of the assertion code, but reverts the part of the patch that changes they way log_start is sent to other members and how new incarnations nodes are seen by the system within XCom. (cherry picked from commit 00d87720eecd2a411b7930574fc3b5c05296e651) --- .../src/bindings/xcom/xcom/xcom_base.c | 13 +++------- .../src/bindings/xcom/xcom/xcom_base.h | 1 - .../src/bindings/xcom/xcom/xcom_detector.c | 24 +------------------ .../src/bindings/xcom/xcom/xcom_detector.h | 1 - .../src/bindings/xcom/xcom/xcom_proto_enum.h | 3 +-- .../src/bindings/xcom/xcom/xcom_transport.c | 17 +++---------- .../src/bindings/xcom/xcom/xcom_vp.h.gen | 3 +-- .../src/bindings/xcom/xcom/xcom_vp_str.c | 2 -- 8 files changed, 9 insertions(+), 55 deletions(-) diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.c b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.c index aea54cbe87df..917ea80a61a1 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.c +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.c @@ -425,10 +425,6 @@ static uint32_t my_id = 0; /* Unique id of this instance */ static synode_no current_message; /* Current message number */ static synode_no last_config_modification_id; /*Last configuration change proposal*/ -uint32_t get_my_id(){ - return my_id; -} - synode_no get_current_message() { return current_message; @@ -3964,9 +3960,6 @@ int acceptor_learner_task(task_arg arg) ceptor_learner_task. */ ep->srv = get_server(site, ep->p->from); - if(ep->rfd.x_proto > x_1_2){ /* Ignore nodes which do not send ID */ - update_xcom_id(ep->p->from, (uint32_t)ep->p->refcnt); /* Refcnt is really uuid */ - } ep->p->refcnt = 1; /* Refcnt from other end is void here */ MAY_DBG(FN; NDBG(ep->rfd.fd, d); NDBG(task_now(), f); @@ -4123,9 +4116,6 @@ int reply_handler_task(task_arg arg) add_event(string_arg("ep->s->con.fd")); add_event(int_arg(ep->s->con.fd)); ); - if(ep->s->con.x_proto > x_1_2){ /* Ignore nodes which do not send ID */ - update_xcom_id(ep->reply->from, (uint32_t)ep->reply->refcnt); /* Refcnt is really uuid */ - } ep->reply->refcnt = 1; /* Refcnt from other end is void here */ if (n <= 0) { shutdown_connection(&ep->s->con); @@ -4389,6 +4379,9 @@ static void server_handle_need_snapshot(server *srv, site_def const *s, node_no if (!synode_eq(null_synode, app_lsn) && synode_lt(app_lsn, gs->log_start)){ gs->log_start = app_lsn; } + else if (!synode_eq(null_synode, last_config_modification_id)) { + gs->log_start = last_config_modification_id; + } server_send_snapshot(srv, s, gs, node); server_push_log(srv, gs->log_start, node); diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.h b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.h index 7e6cec5622f5..7caf80f56744 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.h +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.h @@ -219,7 +219,6 @@ int64_t xcom_client_send_data(uint32_t size, char *data, connection_descriptor* fd); int xcom_client_terminate_and_exit(connection_descriptor* fd); int xcom_client_set_cache_limit(connection_descriptor *fd, uint64_t cache_limit); -uint32_t get_my_id(); static inline char *strerr_msg(char *buf, size_t len, int nr) { diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_detector.c b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_detector.c index 915d20997b2b..390ced5d50ad 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_detector.c +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_detector.c @@ -40,26 +40,6 @@ extern int xcom_shutdown; /* static double detected[NSERVERS]; */ -static struct{ - int changed; - uint32_t id[NSERVERS]; -}id_tracker; - -void update_xcom_id(node_no node, uint32_t id){ - if(node < NSERVERS && id_tracker.id[node] != id){ - id_tracker.changed = 1; - id_tracker.id[node] = id; - } -} - -static int xcom_id_changed(){ - return id_tracker.changed; -} - -static void reset_id_changed(){ - id_tracker.changed = 0; -} - /* See if node has been suspiciously still for some time */ int may_be_dead(detector_state const ds, node_no i, double seconds) { @@ -322,10 +302,8 @@ int detector_task(task_arg arg MY_ATTRIBUTE((unused))) DBGOHK(FN; NDBG(iamtheleader(x_site), d); NDBG(enough_live_nodes(x_site), d); ); /* Send xcom message if node has changed state */ DBGOHK(FN; NDBG(ep->notify,d)); - if ((xcom_id_changed() || ep->notify) && - enough_live_nodes(x_site) && iamtheleader(x_site)) { + if (ep->notify && iamtheleader(x_site) && enough_live_nodes(x_site)) { ep->notify = 0; - reset_id_changed(); send_my_view(x_site); } } diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_detector.h b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_detector.h index 7e64ace803c1..4eda7f930c4a 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_detector.h +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_detector.h @@ -29,7 +29,6 @@ void note_detected(struct site_def const *site, node_no node); int may_be_dead(detector_state const ds, node_no i, double seconds); void init_detector(detector_state ds); void invalidate_detector_sites(struct site_def *site); -void update_xcom_id(node_no node, uint32_t id); #ifdef __cplusplus } diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_proto_enum.h b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_proto_enum.h index e12675bf9303..8e3716e035e0 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_proto_enum.h +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_proto_enum.h @@ -17,8 +17,7 @@ enum xcom_proto { x_unknown_proto=0, x_1_0=1, x_1_1=2, - x_1_2=3, - x_1_3=4 + x_1_2=3 }; typedef enum xcom_proto xcom_proto; diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_transport.c b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_transport.c index fc8bd33df3aa..a29b024c6a33 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_transport.c +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_transport.c @@ -54,7 +54,7 @@ #include "xcom_ssl_transport.h" #endif -#define MY_XCOM_PROTO x_1_3 +#define MY_XCOM_PROTO x_1_2 xcom_proto const my_min_xcom_version = x_1_0; /* The minimum protocol version I am able to understand */ xcom_proto const my_xcom_version = MY_XCOM_PROTO; /* The maximun protocol version I am able to understand */ @@ -658,20 +658,11 @@ static inline int old_proto_knows(xcom_proto x_proto MY_ATTRIBUTE((unused)), int serialize_msg(pax_msg *p, xcom_proto x_proto, uint32_t *buflen, char **buf) { - int retval = 0; - *buflen = 0; *buf = 0; - if(old_proto_knows(x_proto, p->op)){ - /* We want to send the internal xcom ID instead of the reference count, - so we need to save and restore the count */ - int save = p->refcnt; - p->refcnt = (int) get_my_id(); - retval = serialize((void * )p, x_proto, buflen, (xdrproc_t)xdr_pax_msg, buf); - p->refcnt = save; - } - return retval; + return old_proto_knows(x_proto, p->op) && + serialize((void *)p, x_proto, buflen, (xdrproc_t)xdr_pax_msg, buf); } int deserialize_msg(pax_msg *p, xcom_proto x_proto, char *buf, uint32_t buflen) @@ -2162,7 +2153,6 @@ bool_t xdr_node_list_1_1(XDR *xdrs, node_list_1_1 *objp) sizeof (node_address), (xdrproc_t) xdr_node_address_with_1_0); case x_1_1: case x_1_2: - case x_1_3: return xdr_array (xdrs, (char **)&objp->node_list_val, (u_int *) &objp->node_list_len, NSERVERS, sizeof (node_address), (xdrproc_t) xdr_node_address); default: @@ -2195,7 +2185,6 @@ bool_t xdr_pax_msg(XDR *xdrs, pax_msg *objp) objp->delivered_msg = get_delivered_msg(); /* Use our own minimum */ return TRUE; case x_1_2: - case x_1_3: return xdr_pax_msg_1_2(xdrs, objp); default: return FALSE; diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_vp.h.gen b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_vp.h.gen index defbe1bd4cdd..f8ef407290e6 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_vp.h.gen +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_vp.h.gen @@ -34,8 +34,7 @@ enum xcom_proto { x_unknown_proto = 0, x_1_0 = 1, x_1_1 = 2, - x_1_2 = 3, - x_1_3 = 4, + x_1_2 = 3 }; typedef enum xcom_proto xcom_proto; diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_vp_str.c b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_vp_str.c index 0e52df85c188..c5bad74e42fd 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_vp_str.c +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_vp_str.c @@ -218,8 +218,6 @@ const char *xcom_proto_to_str(xcom_proto x) return "x_1_1"; case x_1_2: return "x_1_2"; - case x_1_3: - return "x_1_3"; default: return "???"; } From 3f2e6c9395389db75b2e99239107f78299f4921b Mon Sep 17 00:00:00 2001 From: Dima Date: Mon, 5 Mar 2018 01:08:09 +0300 Subject: [PATCH 0631/1221] Fix for DOC-610 by referencing error section in part with making backup (to simplify search of the error cause) --- doc/source/tokudb/toku_backup.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/source/tokudb/toku_backup.rst b/doc/source/tokudb/toku_backup.rst index cf05952ee7c1..306291c817f1 100644 --- a/doc/source/tokudb/toku_backup.rst +++ b/doc/source/tokudb/toku_backup.rst @@ -73,6 +73,8 @@ To run |Percona TokuBackup|, the backup destination directory must exist, be wri .. note:: Setting the :variable:`tokudb_backup_dir` variable automatically starts the backup process to the specified directory. Percona TokuBackup will take full backup each time, currently there is no incremental backup option +If you get any error on this step (e.g. caused by some misconfiguration), the `Reporting Errors`_ section explains how to find out the reason. + Restoring From Backup --------------------- From 5031a021d883b7e7feadad1fa00747996ab0f2b5 Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Mon, 5 Mar 2018 12:20:48 +0100 Subject: [PATCH 0632/1221] PS-3871 (5.5): Fix typo in COMPILE_DEFINITIONS in cmake/plugin.cmake The MYSQL_ADD_PLUGIN macro has a spelling error causing the MYSQL_SERVER define not to be defined. This causes the storage engine plugins to be compiled without MYSQL_SERVER defined and thus may get a different set of function signatures, functions and symbols unless the source of the plugins themself define the MYSQL_SERVER define. --- cmake/plugin.cmake | 2 +- storage/innobase/CMakeLists.txt | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/cmake/plugin.cmake b/cmake/plugin.cmake index cc0892faa63c..ffcf7fd96e25 100644 --- a/cmake/plugin.cmake +++ b/cmake/plugin.cmake @@ -116,7 +116,7 @@ MACRO(MYSQL_ADD_PLUGIN) # Build either static library or module IF (WITH_${plugin} AND NOT ARG_MODULE_ONLY) ADD_LIBRARY(${target} STATIC ${SOURCES}) - SET_TARGET_PROPERTIES(${target} PROPERTIES COMPILE_DEFINITONS "MYSQL_SERVER") + SET_TARGET_PROPERTIES(${target} PROPERTIES COMPILE_DEFINITIONS "MYSQL_SERVER") IF (ARG_DTRACE_INSTRUMENTED) DTRACE_INSTRUMENT(${target}) ENDIF() diff --git a/storage/innobase/CMakeLists.txt b/storage/innobase/CMakeLists.txt index b97473849efc..2b32acfec31d 100644 --- a/storage/innobase/CMakeLists.txt +++ b/storage/innobase/CMakeLists.txt @@ -308,3 +308,6 @@ MYSQL_ADD_PLUGIN(innobase ${INNOBASE_SOURCES} STORAGE_ENGINE DEFAULT MODULE_OUTPUT_NAME ha_innodb LINK_LIBRARIES ${ZLIB_LIBRARY}) + +# Remove -DMYSQL_SERVER, it breaks embedded build +SET_TARGET_PROPERTIES(innobase PROPERTIES COMPILE_DEFINITIONS "") From 68805e2c60410ed60e6b6d407523ae9316151d94 Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Mon, 5 Mar 2018 15:04:14 +0100 Subject: [PATCH 0633/1221] From 6870ad67eafb708450fc75e61246511cdb3bc067 Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Mon, 5 Mar 2018 16:11:05 +0100 Subject: [PATCH 0634/1221] PS-3875: Build hp_test1/hp_test2 also if WITH_EMBEDDED_SERVER is not defined --- storage/heap/CMakeLists.txt | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/storage/heap/CMakeLists.txt b/storage/heap/CMakeLists.txt index 444a45337cb0..1c91cb9acda2 100644 --- a/storage/heap/CMakeLists.txt +++ b/storage/heap/CMakeLists.txt @@ -26,12 +26,20 @@ SET(HEAP_SOURCES _check.c _rectest.c hp_block.c hp_clear.c hp_close.c hp_create MYSQL_ADD_PLUGIN(heap ${HEAP_SOURCES} STORAGE_ENGINE MANDATORY RECOMPILE_FOR_EMBEDDED DTRACE_INSTRUMENTED) -IF(WITH_UNIT_TESTS AND WITH_EMBEDDED_SERVER) +IF(WITH_EMBEDDED_SERVER) + SET(HEAP_NOPFS heap_embedded) +ELSE() + ADD_CONVENIENCE_LIBRARY(heap_nopfs ${HEAP_SOURCES}) + ADD_DEPENDENCIES(heap_nopfs GenError) + SET(HEAP_NOPFS heap_nopfs) +ENDIF() + +IF(WITH_UNIT_TESTS) ADD_EXECUTABLE(hp_test1 hp_test1.c) - TARGET_LINK_LIBRARIES(hp_test1 heap_embedded mysys) + TARGET_LINK_LIBRARIES(hp_test1 ${HEAP_NOPFS} mysys) ADD_TEST(hp_test1 hp_test1) ADD_EXECUTABLE(hp_test2 hp_test2.c) - TARGET_LINK_LIBRARIES(hp_test2 heap_embedded mysys) + TARGET_LINK_LIBRARIES(hp_test2 ${HEAP_NOPFS} mysys) ADD_TEST(hp_test2 hp_test2) ENDIF() From 4eaadd0094ae13533056dc841fbb037009f00fe3 Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Mon, 5 Mar 2018 17:04:20 +0100 Subject: [PATCH 0635/1221] PS-3841 (5.6): Fix QRT compilation warning when linked statically --- plugin/query_response_time/plugin.cc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plugin/query_response_time/plugin.cc b/plugin/query_response_time/plugin.cc index 1d5dd8783c76..9b68babff73a 100644 --- a/plugin/query_response_time/plugin.cc +++ b/plugin/query_response_time/plugin.cc @@ -13,7 +13,9 @@ along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ +#ifndef MYSQL_SERVER #define MYSQL_SERVER +#endif #include #include #include From ca25ac80697860d01c4e4e9e80e7f2bebe6e40da Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Tue, 6 Mar 2018 13:54:20 +0100 Subject: [PATCH 0636/1221] From 955e335b5729a7d74e88f00e6bd46b88a0682670 Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Fri, 16 Feb 2018 13:41:53 +0100 Subject: [PATCH 0637/1221] Bug#27558169 BACKPORT TO 5.7 BUG #26826272: REMOVE GCC 8 WARNINGS [noclose] MySQL 5.7 should compile warning-free (ie., maintainer mode should work) also with GCC 8. This is a backport of similar patches from current MySQL trunk. Patches have been rewritten from C++11 to C++03 This patch fixes all warnings in Debug build Change-Id: I1eb110ec164cf74ee222f8f9a610e3d6903f4034 --- client/dump/CMakeLists.txt | 20 ++----- client/dump/program.cc | 4 +- include/my_sys.h | 3 +- libbinlogevents/src/rows_event.cpp | 20 ++++--- libmysqld/CMakeLists.txt | 20 ++----- plugin/keyring/buffered_file_io.h | 3 +- plugin/keyring/keyring_stat.h | 14 ++++- .../test_session_detach.cc | 4 +- .../test_service_sql_api/test_session_info.cc | 4 +- .../test_sql_2_sessions.cc | 4 +- .../test_sql_all_col_types.cc | 4 +- .../test_service_sql_api/test_sql_commit.cc | 4 +- .../test_service_sql_api/test_sql_complex.cc | 4 +- .../test_service_sql_api/test_sql_errors.cc | 4 +- plugin/test_service_sql_api/test_sql_lock.cc | 4 +- .../test_sql_processlist.cc | 4 +- .../test_sql_replication.cc | 4 +- .../test_service_sql_api/test_sql_shutdown.cc | 4 +- .../test_service_sql_api/test_sql_sqlmode.cc | 4 +- .../test_sql_stored_procedures_functions.cc | 4 +- .../test_sql_views_triggers.cc | 4 +- rapid/plugin/group_replication/CMakeLists.txt | 6 ++ sql/CMakeLists.txt | 18 ++---- sql/binlog.cc | 57 +++++++++++++------ sql/datadict.cc | 4 +- sql/debug_sync.cc | 13 +++-- sql/field.h | 8 +-- sql/handler.cc | 3 - sql/handler.h | 4 +- sql/mysqld.cc | 3 +- sql/opt_range.cc | 4 +- sql/partition_info.cc | 12 ++-- sql/records.cc | 6 +- sql/records.h | 4 +- sql/sp.cc | 5 +- sql/sp_head.cc | 2 +- sql/spatial.h | 10 +--- sql/sql_alloc.h | 11 ++-- sql/sql_alter.cc | 2 +- sql/sql_analyse.cc | 7 ++- sql/sql_analyse.h | 6 +- sql/sql_base.cc | 1 - sql/sql_cache.cc | 3 +- sql/sql_db.cc | 4 +- sql/sql_delete.cc | 3 +- sql/sql_executor.h | 3 +- sql/sql_insert.cc | 1 - sql/sql_load.cc | 6 +- sql/sql_parse.cc | 3 +- sql/sql_partition_admin.cc | 4 +- sql/sql_servers.cc | 4 +- sql/sql_show.cc | 13 +---- sql/sql_table.cc | 5 +- sql/sql_tmp_table.cc | 10 ++-- sql/sql_truncate.cc | 4 +- sql/sql_union.cc | 4 +- sql/sql_view.cc | 12 ++-- sql/sql_yacc.yy | 8 +-- sql/table.cc | 16 +++--- sql/table.h | 19 +++++-- sql/trigger.cc | 3 +- sql/tztime.cc | 6 +- sql/unireg.cc | 4 +- storage/blackhole/ha_blackhole.cc | 4 +- storage/innobase/CMakeLists.txt | 10 +++- storage/innobase/buf/buf0buddy.cc | 4 +- storage/innobase/buf/buf0buf.cc | 4 +- storage/innobase/buf/buf0dump.cc | 4 +- storage/innobase/buf/buf0lru.cc | 4 +- storage/innobase/gis/gis0rtree.cc | 6 +- storage/innobase/gis/gis0sea.cc | 4 +- storage/innobase/handler/ha_innodb.cc | 2 +- storage/innobase/handler/i_s.cc | 4 +- storage/innobase/include/btr0cur.h | 5 +- storage/innobase/include/btr0pcur.h | 4 +- storage/innobase/include/data0type.ic | 4 +- storage/innobase/include/dict0mem.h | 4 +- storage/innobase/include/row0ftsort.h | 4 +- storage/innobase/os/os0file.cc | 4 +- storage/innobase/row/row0ftsort.cc | 3 +- storage/innobase/row/row0import.cc | 26 ++++----- storage/innobase/row/row0uins.cc | 3 +- storage/myisam/CMakeLists.txt | 8 +++ storage/partition/ha_partition.cc | 3 +- unittest/gunit/CMakeLists.txt | 29 ++-------- unittest/gunit/decimal-t.cc | 12 ++-- unittest/gunit/fake_table.h | 4 +- unittest/gunit/table_cache-t.cc | 5 +- 88 files changed, 303 insertions(+), 322 deletions(-) diff --git a/client/dump/CMakeLists.txt b/client/dump/CMakeLists.txt index bae2ce763151..a2180505240e 100644 --- a/client/dump/CMakeLists.txt +++ b/client/dump/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -42,17 +42,17 @@ SET(BOOST_LIB_SOURCES ${BOOST_SOURCES_DIR}/libs/system/src/error_code.cpp ) +INCLUDE_DIRECTORIES(SYSTEM + ${BOOST_PATCHES_DIR} + ${BOOST_INCLUDE_DIR} + ) + IF(USING_LOCAL_BOOST) ADD_CONVENIENCE_LIBRARY(boost_lib ${BOOST_LIB_SOURCES}) # Do not build library unless it is needed by some other target. SET_PROPERTY(TARGET boost_lib PROPERTY EXCLUDE_FROM_ALL TRUE) - ADD_COMPILE_FLAGS( - ${BOOST_LIB_SOURCES} - COMPILE_FLAGS -I${BOOST_PATCHES_DIR} -I${BOOST_INCLUDE_DIR} - ) - IF(HAVE_clock_gettime_IN_rt) TARGET_LINK_LIBRARIES(boost_lib ${LIBRT}) ENDIF() @@ -143,11 +143,6 @@ ADD_CONVENIENCE_LIBRARY(mysqlpump_lib ${MYSQLPUMP_LIB_SOURCES}) TARGET_LINK_LIBRARIES(mysqlpump_lib client_base ${LZ4_LIBRARY}) -ADD_COMPILE_FLAGS( - ${MYSQLPUMP_LIB_SOURCES} - COMPILE_FLAGS -I${BOOST_PATCHES_DIR} -I${BOOST_INCLUDE_DIR} - ) - # Files that use Boost sources that trigger compilation warnings SET(MYSQLPUMP_BOOST_SOURCES abstract_crawler.cc @@ -178,9 +173,6 @@ ADD_COMPILE_FLAGS( COMPILE_FLAGS -I${LZ4_INCLUDE_DIR} ) MYSQL_ADD_EXECUTABLE(mysqlpump program.cc) -ADD_COMPILE_FLAGS( - program.cc COMPILE_FLAGS -I${BOOST_PATCHES_DIR} -I${BOOST_INCLUDE_DIR} -) TARGET_LINK_LIBRARIES(mysqlpump mysqlpump_lib ${LOCAL_BOOST_LIB}) IF(USING_SYSTEM_BOOST) diff --git a/client/dump/program.cc b/client/dump/program.cc index e348ee5b7ddc..0ec1bec94efa 100644 --- a/client/dump/program.cc +++ b/client/dump/program.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2015, 2016 Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -150,7 +150,7 @@ int Program::execute(std::vector positional_options) new Single_transaction_connection_provider(this, num_connections, message_handler) : new Thread_specific_connection_provider(this); } - catch (std::exception e) + catch (const std::exception &e) { this->error(Mysql::Tools::Base::Message_data( 0, "Error during creating connection.", diff --git a/include/my_sys.h b/include/my_sys.h index f43bc120bcfe..1b3a5a691e7f 100644 --- a/include/my_sys.h +++ b/include/my_sys.h @@ -174,9 +174,10 @@ extern PSI_memory_key key_memory_max_alloca; trashes value of B. */ #define TRASH(A,B) do { \ + void *p = (A); \ const size_t l= (B); \ MEM_CHECK_ADDRESSABLE(A, l); \ - memset(A, 0x8F, l); \ + memset(p, 0x8F, l); \ MEM_UNDEFINED(A, l); \ } while (0) #else diff --git a/libbinlogevents/src/rows_event.cpp b/libbinlogevents/src/rows_event.cpp index d9c88ff2c084..168652dfbb7f 100644 --- a/libbinlogevents/src/rows_event.cpp +++ b/libbinlogevents/src/rows_event.cpp @@ -91,15 +91,17 @@ Table_map_event::Table_map_event(const char *buf, unsigned int event_len, if (post_header_len == 6) { /* Master is of an intermediate source tree before 5.1.4. Id is 4 bytes */ - memcpy(&m_table_id, post_start, 4); - m_table_id= le64toh(m_table_id); + uint64_t table_id = 0; + memcpy(&table_id, post_start, 4); + m_table_id= le64toh(table_id); post_start+= 4; } else { BAPI_ASSERT(post_header_len == TABLE_MAP_HEADER_LEN); - memcpy(&m_table_id, post_start, 6); - m_table_id= le64toh(m_table_id); + uint64_t table_id = 0; + memcpy(&table_id, post_start, 6); + m_table_id= le64toh(table_id); post_start+= TM_FLAGS_OFFSET; } @@ -193,14 +195,16 @@ Rows_event::Rows_event(const char *buf, unsigned int event_len, if (post_header_len == 6) { /* Master is of an intermediate source tree before 5.1.4. Id is 4 bytes */ - memcpy(&m_table_id, post_start, 4); - m_table_id= le64toh(m_table_id); + uint64_t table_id = 0; + memcpy(&table_id, post_start, 4); + m_table_id= le64toh(table_id); post_start+= 4; } else { - memcpy(&m_table_id, post_start, 6); - m_table_id= le64toh(m_table_id); + uint64_t table_id = 0; + memcpy(&table_id, post_start, 6); + m_table_id= le64toh(table_id); post_start+= ROWS_FLAGS_OFFSET; } diff --git a/libmysqld/CMakeLists.txt b/libmysqld/CMakeLists.txt index 179fdf85d3c3..6c3a01534816 100644 --- a/libmysqld/CMakeLists.txt +++ b/libmysqld/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2006, 2017, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 2018, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -110,20 +110,10 @@ SET(SQL_EMBEDDED_SOURCES ) INCLUDE(${MYSQL_CMAKE_SCRIPT_DIR}/compile_flags.cmake) -ADD_COMPILE_FLAGS( - ../sql/debug_sync.cc - ../sql/handler.cc - ../sql/geometry_rtree.cc - ../sql/item_geofunc.cc - ../sql/item_geofunc_buffer.cc - ../sql/item_geofunc_internal.cc - ../sql/item_geofunc_relchecks.cc - ../sql/item_geofunc_relchecks_bgwrap.cc - ../sql/item_geofunc_setops.cc - ../sql/item_json_func.cc - ../sql/spatial.cc - COMPILE_FLAGS -I${BOOST_PATCHES_DIR} -I${BOOST_INCLUDE_DIR} -) +INCLUDE_DIRECTORIES(SYSTEM + ${BOOST_PATCHES_DIR} + ${BOOST_INCLUDE_DIR} + ) ADD_COMPILE_FLAGS( ../extra/lz4/xxhash.c diff --git a/plugin/keyring/buffered_file_io.h b/plugin/keyring/buffered_file_io.h index 6d006edb166c..15e3afd38c96 100644 --- a/plugin/keyring/buffered_file_io.h +++ b/plugin/keyring/buffered_file_io.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -40,7 +40,6 @@ class Buffered_file_io : public IKeyring_io , file_io(logger) , keyring_file(-1) { - memset(&saved_keyring_stat, 0, sizeof(MY_STAT)); } my_bool init(std::string *keyring_filename); diff --git a/plugin/keyring/keyring_stat.h b/plugin/keyring/keyring_stat.h index 8255447cf5ea..69a4322b8e6f 100644 --- a/plugin/keyring/keyring_stat.h +++ b/plugin/keyring/keyring_stat.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -25,7 +25,17 @@ typedef MY_STAT My_stat; struct Keyring_stat : public My_stat { Keyring_stat() : is_initialized(FALSE) - {} + { + // Initialize relevant fields in base class. + st_dev = 0; + st_ino = 0; + st_mode = 0; + st_uid = 0; + st_gid = 0; + st_rdev = 0; + st_size = 0; + st_mtime = 0; + } my_bool operator==(const MY_STAT& stat) { diff --git a/plugin/test_service_sql_api/test_session_detach.cc b/plugin/test_service_sql_api/test_session_detach.cc index 954d492c1475..d9fba7476b3b 100644 --- a/plugin/test_service_sql_api/test_session_detach.cc +++ b/plugin/test_service_sql_api/test_session_detach.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -246,7 +246,7 @@ static int sql_get_null(void *ctx) uint col= pctx->current_col; pctx->current_col++; - strncpy(pctx->sql_str_value[row][col], "[NULL]", sizeof("[NULL]")-1); + strcpy(pctx->sql_str_value[row][col], "[NULL]"); pctx->sql_str_len[row][col]= sizeof("[NULL]")-1; DBUG_RETURN(false); diff --git a/plugin/test_service_sql_api/test_session_info.cc b/plugin/test_service_sql_api/test_session_info.cc index 93db95d0c3d5..6e25e1b6f70e 100644 --- a/plugin/test_service_sql_api/test_session_info.cc +++ b/plugin/test_service_sql_api/test_session_info.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -267,7 +267,7 @@ static int sql_get_null(void *ctx) uint col= pctx->current_col; pctx->current_col++; - strncpy(pctx->sql_str_value[row][col], "[NULL]", sizeof("[NULL]")-1); + strcpy(pctx->sql_str_value[row][col], "[NULL]"); pctx->sql_str_len[row][col]= sizeof("[NULL]")-1; DBUG_RETURN(false); diff --git a/plugin/test_service_sql_api/test_sql_2_sessions.cc b/plugin/test_service_sql_api/test_sql_2_sessions.cc index 4f3ab4d4c7ad..ef2bbffdd685 100644 --- a/plugin/test_service_sql_api/test_sql_2_sessions.cc +++ b/plugin/test_service_sql_api/test_sql_2_sessions.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -268,7 +268,7 @@ static int sql_get_null(void *ctx) uint col= pctx->current_col; pctx->current_col++; - strncpy(pctx->sql_str_value[row][col], "[NULL]", sizeof("[NULL]")-1); + strcpy(pctx->sql_str_value[row][col], "[NULL]"); pctx->sql_str_len[row][col]= sizeof("[NULL]")-1; DBUG_RETURN(false); diff --git a/plugin/test_service_sql_api/test_sql_all_col_types.cc b/plugin/test_service_sql_api/test_sql_all_col_types.cc index 815ec890433e..ebfac2b2cede 100644 --- a/plugin/test_service_sql_api/test_sql_all_col_types.cc +++ b/plugin/test_service_sql_api/test_sql_all_col_types.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -248,7 +248,7 @@ static int sql_get_null(void *ctx) uint col= pctx->current_col; pctx->current_col++; - strncpy(pctx->sql_str_value[row][col], "[NULL]", sizeof("[NULL]")-1); + strcpy(pctx->sql_str_value[row][col], "[NULL]"); pctx->sql_str_len[row][col]= sizeof("[NULL]")-1; DBUG_RETURN(false); diff --git a/plugin/test_service_sql_api/test_sql_commit.cc b/plugin/test_service_sql_api/test_sql_commit.cc index ce0ba9a162ff..31ca399d623f 100644 --- a/plugin/test_service_sql_api/test_sql_commit.cc +++ b/plugin/test_service_sql_api/test_sql_commit.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -248,7 +248,7 @@ static int sql_get_null(void *ctx) uint col= pctx->current_col; pctx->current_col++; - strncpy(pctx->sql_str_value[row][col], "[NULL]", sizeof("[NULL]")-1); + strcpy(pctx->sql_str_value[row][col], "[NULL]"); pctx->sql_str_len[row][col]= sizeof("[NULL]")-1; DBUG_RETURN(false); diff --git a/plugin/test_service_sql_api/test_sql_complex.cc b/plugin/test_service_sql_api/test_sql_complex.cc index 4dfe7df6916a..7af862179355 100644 --- a/plugin/test_service_sql_api/test_sql_complex.cc +++ b/plugin/test_service_sql_api/test_sql_complex.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -316,7 +316,7 @@ static int sql_get_null(void *ctx) uint col= pctx->current_col; pctx->current_col++; - strncpy(pctx->sql_str_value[row][col], "[NULL]", sizeof("[NULL]")-1); + strcpy(pctx->sql_str_value[row][col], "[NULL]"); pctx->sql_str_len[row][col]= sizeof("[NULL]")-1; DBUG_RETURN(false); diff --git a/plugin/test_service_sql_api/test_sql_errors.cc b/plugin/test_service_sql_api/test_sql_errors.cc index a8983ce62502..d5b6cd886671 100644 --- a/plugin/test_service_sql_api/test_sql_errors.cc +++ b/plugin/test_service_sql_api/test_sql_errors.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -271,7 +271,7 @@ static int sql_get_null(void *ctx) uint col= pctx->current_col; pctx->current_col++; - strncpy(pctx->sql_str_value[row][col], "[NULL]", sizeof("[NULL]")-1); + strcpy(pctx->sql_str_value[row][col], "[NULL]"); pctx->sql_str_len[row][col]= sizeof("[NULL]")-1; DBUG_RETURN(false); diff --git a/plugin/test_service_sql_api/test_sql_lock.cc b/plugin/test_service_sql_api/test_sql_lock.cc index c97cc49448a2..ce326e2709bd 100644 --- a/plugin/test_service_sql_api/test_sql_lock.cc +++ b/plugin/test_service_sql_api/test_sql_lock.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -247,7 +247,7 @@ static int sql_get_null(void *ctx) uint col= pctx->current_col; pctx->current_col++; - strncpy(pctx->sql_str_value[row][col], "[NULL]", sizeof("[NULL]")-1); + strcpy(pctx->sql_str_value[row][col], "[NULL]"); pctx->sql_str_len[row][col]= sizeof("[NULL]")-1; DBUG_RETURN(false); diff --git a/plugin/test_service_sql_api/test_sql_processlist.cc b/plugin/test_service_sql_api/test_sql_processlist.cc index 8b4618dbcd43..9c71d370dd9b 100644 --- a/plugin/test_service_sql_api/test_sql_processlist.cc +++ b/plugin/test_service_sql_api/test_sql_processlist.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -261,7 +261,7 @@ static int sql_get_null(void *ctx) uint col= pctx->current_col; pctx->current_col++; - strncpy(pctx->sql_str_value[row][col], "[NULL]", sizeof("[NULL]")-1); + strcpy(pctx->sql_str_value[row][col], "[NULL]"); pctx->sql_str_len[row][col]= sizeof("[NULL]")-1; DBUG_RETURN(false); diff --git a/plugin/test_service_sql_api/test_sql_replication.cc b/plugin/test_service_sql_api/test_sql_replication.cc index ac9b4bbc9a3b..3bb35717f2d7 100644 --- a/plugin/test_service_sql_api/test_sql_replication.cc +++ b/plugin/test_service_sql_api/test_sql_replication.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -244,7 +244,7 @@ static int sql_get_null(void *ctx) uint col= pctx->current_col; pctx->current_col++; - strncpy(pctx->sql_str_value[row][col], "[NULL]", sizeof("[NULL]")-1); + strcpy(pctx->sql_str_value[row][col], "[NULL]"); pctx->sql_str_len[row][col]= sizeof("[NULL]")-1; DBUG_RETURN(false); diff --git a/plugin/test_service_sql_api/test_sql_shutdown.cc b/plugin/test_service_sql_api/test_sql_shutdown.cc index 7b47a161153c..9fe130c082cc 100644 --- a/plugin/test_service_sql_api/test_sql_shutdown.cc +++ b/plugin/test_service_sql_api/test_sql_shutdown.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -251,7 +251,7 @@ static int sql_get_null(void *ctx) uint col= pctx->current_col; pctx->current_col++; - strncpy(pctx->sql_str_value[row][col], "[NULL]", sizeof("[NULL]")-1); + strcpy(pctx->sql_str_value[row][col], "[NULL]"); pctx->sql_str_len[row][col]= sizeof("[NULL]")-1; DBUG_RETURN(false); diff --git a/plugin/test_service_sql_api/test_sql_sqlmode.cc b/plugin/test_service_sql_api/test_sql_sqlmode.cc index 8ec25a0e06dd..8bfe01da1aeb 100644 --- a/plugin/test_service_sql_api/test_sql_sqlmode.cc +++ b/plugin/test_service_sql_api/test_sql_sqlmode.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -304,7 +304,7 @@ static int sql_get_null(void *ctx) uint col= pctx->current_col; pctx->current_col++; - strncpy(pctx->sql_str_value[row][col], "[NULL]", sizeof("[NULL]")-1); + strcpy(pctx->sql_str_value[row][col], "[NULL]"); pctx->sql_str_len[row][col]= sizeof("[NULL]")-1; DBUG_RETURN(false); diff --git a/plugin/test_service_sql_api/test_sql_stored_procedures_functions.cc b/plugin/test_service_sql_api/test_sql_stored_procedures_functions.cc index ec2d1a4476e7..3c9ccf343e8f 100644 --- a/plugin/test_service_sql_api/test_sql_stored_procedures_functions.cc +++ b/plugin/test_service_sql_api/test_sql_stored_procedures_functions.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -268,7 +268,7 @@ static int sql_get_null(void *ctx) uint col= pctx->current_col; pctx->current_col++; - strncpy(pctx->sql_str_value[row][col], "[NULL]", sizeof("[NULL]")-1); + strcpy(pctx->sql_str_value[row][col], "[NULL]"); pctx->sql_str_len[row][col]= sizeof("[NULL]")-1; DBUG_RETURN(false); diff --git a/plugin/test_service_sql_api/test_sql_views_triggers.cc b/plugin/test_service_sql_api/test_sql_views_triggers.cc index 3fd3916e876c..e5a0f2663afe 100644 --- a/plugin/test_service_sql_api/test_sql_views_triggers.cc +++ b/plugin/test_service_sql_api/test_sql_views_triggers.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -268,7 +268,7 @@ static int sql_get_null(void *ctx) uint col= pctx->current_col; pctx->current_col++; - strncpy(pctx->sql_str_value[row][col], "[NULL]", sizeof("[NULL]")-1); + strcpy(pctx->sql_str_value[row][col], "[NULL]"); pctx->sql_str_len[row][col]= sizeof("[NULL]")-1; DBUG_RETURN(false); diff --git a/rapid/plugin/group_replication/CMakeLists.txt b/rapid/plugin/group_replication/CMakeLists.txt index bce9de48c25b..2cdcdd5d1b5d 100644 --- a/rapid/plugin/group_replication/CMakeLists.txt +++ b/rapid/plugin/group_replication/CMakeLists.txt @@ -197,6 +197,12 @@ ELSEIF(WITH_GCS_LOG_DEBUG) "-DWITH_LOG_DEBUG") ENDIF() +MY_CHECK_C_COMPILER_FLAG("-Wcast-function-type" HAVE_CAST_FUNCTION_TYPE) +IF(HAVE_CAST_FUNCTION_TYPE) + ADD_COMPILE_FLAGS(libmysqlgcs/src/bindings/xcom/xcom/xcom_transport.c + COMPILE_FLAGS "-Wno-cast-function-type") +ENDIF() + ### Configuration ### # disabling warnings for generated code diff --git a/sql/CMakeLists.txt b/sql/CMakeLists.txt index c55bf1fa81da..0bf31070d21b 100644 --- a/sql/CMakeLists.txt +++ b/sql/CMakeLists.txt @@ -305,20 +305,10 @@ IF(WIN32) ENDIF() INCLUDE(${MYSQL_CMAKE_SCRIPT_DIR}/compile_flags.cmake) -ADD_COMPILE_FLAGS( - debug_sync.cc - handler.cc - geometry_rtree.cc - item_geofunc.cc - item_geofunc_buffer.cc - item_geofunc_internal.cc - item_geofunc_relchecks.cc - item_geofunc_relchecks_bgwrap.cc - item_geofunc_setops.cc - item_json_func.cc - spatial.cc - COMPILE_FLAGS -I${BOOST_PATCHES_DIR} -I${BOOST_INCLUDE_DIR} -) +INCLUDE_DIRECTORIES(SYSTEM + ${BOOST_PATCHES_DIR} + ${BOOST_INCLUDE_DIR} + ) ADD_COMPILE_FLAGS( ../extra/lz4/xxhash.c diff --git a/sql/binlog.cc b/sql/binlog.cc index 8cd4ba933e01..3d87229ea6e2 100644 --- a/sql/binlog.cc +++ b/sql/binlog.cc @@ -285,8 +285,11 @@ class binlog_cache_data binlog_cache_data(bool trx_cache_arg, my_off_t max_binlog_cache_size_arg, ulong *ptr_binlog_cache_use_arg, - ulong *ptr_binlog_cache_disk_use_arg) - : m_pending(0), saved_max_binlog_cache_size(max_binlog_cache_size_arg), + ulong *ptr_binlog_cache_disk_use_arg, + const IO_CACHE &cache_log_arg) + : cache_log(cache_log_arg), + m_pending(0), + saved_max_binlog_cache_size(max_binlog_cache_size_arg), ptr_binlog_cache_use(ptr_binlog_cache_use_arg), ptr_binlog_cache_disk_use(ptr_binlog_cache_disk_use_arg) { @@ -713,11 +716,13 @@ class binlog_stmt_cache_data binlog_stmt_cache_data(bool trx_cache_arg, my_off_t max_binlog_cache_size_arg, ulong *ptr_binlog_cache_use_arg, - ulong *ptr_binlog_cache_disk_use_arg) + ulong *ptr_binlog_cache_disk_use_arg, + const IO_CACHE &cache_log) : binlog_cache_data(trx_cache_arg, max_binlog_cache_size_arg, ptr_binlog_cache_use_arg, - ptr_binlog_cache_disk_use_arg) + ptr_binlog_cache_disk_use_arg, + cache_log) { } @@ -752,11 +757,13 @@ class binlog_trx_cache_data : public binlog_cache_data binlog_trx_cache_data(bool trx_cache_arg, my_off_t max_binlog_cache_size_arg, ulong *ptr_binlog_cache_use_arg, - ulong *ptr_binlog_cache_disk_use_arg) + ulong *ptr_binlog_cache_disk_use_arg, + const IO_CACHE &cache_log) : binlog_cache_data(trx_cache_arg, max_binlog_cache_size_arg, ptr_binlog_cache_use_arg, - ptr_binlog_cache_disk_use_arg), + ptr_binlog_cache_disk_use_arg, + cache_log), m_cannot_rollback(FALSE), before_stmt_pos(MY_OFF_T_UNDEF) { } @@ -846,13 +853,17 @@ class binlog_cache_mngr { ulong *ptr_binlog_stmt_cache_disk_use_arg, my_off_t max_binlog_cache_size_arg, ulong *ptr_binlog_cache_use_arg, - ulong *ptr_binlog_cache_disk_use_arg) + ulong *ptr_binlog_cache_disk_use_arg, + const IO_CACHE &stmt_cache_log, + const IO_CACHE &trx_cache_log) : stmt_cache(FALSE, max_binlog_stmt_cache_size_arg, ptr_binlog_stmt_cache_use_arg, - ptr_binlog_stmt_cache_disk_use_arg), + ptr_binlog_stmt_cache_disk_use_arg, + stmt_cache_log), trx_cache(TRUE, max_binlog_cache_size_arg, ptr_binlog_cache_use_arg, - ptr_binlog_cache_disk_use_arg), + ptr_binlog_cache_disk_use_arg, + trx_cache_log), has_logged_xid(NULL) { } @@ -9176,7 +9187,7 @@ void MYSQL_BIN_LOG::handle_binlog_flush_or_sync_error(THD *thd, binlog_error_action == ABORT_SERVER ? "ABORT_SERVER" : "IGNORE_ERROR"); if (binlog_error_action == ABORT_SERVER) { - char err_buff[MYSQL_ERRMSG_SIZE]; + char err_buff[MYSQL_ERRMSG_SIZE + 27]; sprintf(err_buff, "%s Hence aborting the server.", errmsg); exec_binlog_error_action_abort(err_buff); } @@ -9721,17 +9732,29 @@ int THD::binlog_setup_trx_data() if (cache_mngr) DBUG_RETURN(0); // Already set up + IO_CACHE stmt_cache_log, trx_cache_log; + memset(&stmt_cache_log, 0, sizeof(stmt_cache_log)); + memset(&trx_cache_log, 0, sizeof(trx_cache_log)); + cache_mngr= (binlog_cache_mngr*) my_malloc(key_memory_binlog_cache_mngr, sizeof(binlog_cache_mngr), MYF(MY_ZEROFILL)); - if (!cache_mngr || - open_cached_file(&cache_mngr->stmt_cache.cache_log, mysql_tmpdir, - LOG_PREFIX, binlog_stmt_cache_size, MYF(MY_WME)) || - open_cached_file(&cache_mngr->trx_cache.cache_log, mysql_tmpdir, - LOG_PREFIX, binlog_cache_size, MYF(MY_WME))) + if (!cache_mngr) + { + DBUG_RETURN(1); + } + if (open_cached_file(&stmt_cache_log, mysql_tmpdir, + LOG_PREFIX, binlog_stmt_cache_size, MYF(MY_WME))) { my_free(cache_mngr); DBUG_RETURN(1); // Didn't manage to set it up } + if (open_cached_file(&trx_cache_log, mysql_tmpdir, + LOG_PREFIX, binlog_cache_size, MYF(MY_WME))) + { + close_cached_file(&stmt_cache_log); + my_free(cache_mngr); + DBUG_RETURN(1); + } DBUG_PRINT("debug", ("Set ha_data slot %d to 0x%llx", binlog_hton->slot, (ulonglong) cache_mngr)); thd_set_ha_data(this, binlog_hton, cache_mngr); @@ -9741,7 +9764,9 @@ int THD::binlog_setup_trx_data() &binlog_stmt_cache_disk_use, max_binlog_cache_size, &binlog_cache_use, - &binlog_cache_disk_use); + &binlog_cache_disk_use, + stmt_cache_log, + trx_cache_log); DBUG_RETURN(0); } diff --git a/sql/datadict.cc b/sql/datadict.cc index 6164e495910b..a9c972702512 100644 --- a/sql/datadict.cc +++ b/sql/datadict.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -182,8 +182,6 @@ bool dd_recreate_table(THD *thd, const char *db, const char *table_name) db, table_name, MDL_EXCLUSIVE)); - memset(&create_info, 0, sizeof(create_info)); - /* Create a path to the table, but without a extension. */ build_table_filename(path, sizeof(path) - 1, db, table_name, "", 0); diff --git a/sql/debug_sync.cc b/sql/debug_sync.cc index 3015c31815b9..12f054517f86 100644 --- a/sql/debug_sync.cc +++ b/sql/debug_sync.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2009, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2009, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -1015,8 +1015,9 @@ static void debug_sync_remove_action(st_debug_sync_control *ds_control, memmove(save_action, action, sizeof(st_debug_sync_action)); /* Move actions down. */ - memmove(ds_control->ds_action + dsp_idx, - ds_control->ds_action + dsp_idx + 1, + void *dest= ds_control->ds_action + dsp_idx; + const void *src= ds_control->ds_action + dsp_idx + 1; + memmove(dest, src, (ds_control->ds_active - dsp_idx) * sizeof(st_debug_sync_action)); @@ -1026,7 +1027,8 @@ static void debug_sync_remove_action(st_debug_sync_control *ds_control, produced by the shift. Again do not use an assignment operator to avoid string allocation/copy. */ - memmove(ds_control->ds_action + ds_control->ds_active, save_action, + dest= ds_control->ds_action + ds_control->ds_active; + memmove(dest, save_action, sizeof(st_debug_sync_action)); } @@ -1099,7 +1101,8 @@ static st_debug_sync_action *debug_sync_get_action(THD *thd, ds_control->ds_action= (st_debug_sync_action*) new_action; ds_control->ds_allocated= new_alloc; /* Clear memory as we do not run string constructors here. */ - memset((ds_control->ds_action + dsp_idx), 0, + void *dest= (ds_control->ds_action + dsp_idx); + memset(dest, 0, (new_alloc - dsp_idx) * sizeof(st_debug_sync_action)); } DBUG_PRINT("debug_sync", ("added action idx: %u", dsp_idx)); diff --git a/sql/field.h b/sql/field.h index 9a788aab0b91..f2d00dee8e5a 100644 --- a/sql/field.h +++ b/sql/field.h @@ -1,7 +1,7 @@ #ifndef FIELD_INCLUDED #define FIELD_INCLUDED -/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -3797,8 +3797,8 @@ class Field_blob :public Field_longstr { } void reset_fields() { - memset(&value, 0, sizeof(value)); - memset(&old_value, 0, sizeof(old_value)); + value= String(); + old_value= String(); } size_t get_field_buffer_size() { return value.alloced_length(); } #ifndef WORDS_BIGENDIAN @@ -3880,7 +3880,7 @@ class Field_blob :public Field_longstr { value.mem_free(); old_value.mem_free(); } - inline void clear_temporary() { memset(&value, 0, sizeof(value)); } + inline void clear_temporary() { value= String(); } friend type_conversion_status field_conv(Field *to,Field *from); bool has_charset(void) const { return charset() == &my_charset_bin ? FALSE : TRUE; } diff --git a/sql/handler.cc b/sql/handler.cc index 65cb65903f32..ebff62acda82 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -2573,8 +2573,6 @@ int ha_delete_table(THD *thd, handlerton *table_type, const char *path, TABLE_SHARE dummy_share; DBUG_ENTER("ha_delete_table"); - memset(&dummy_table, 0, sizeof(dummy_table)); - memset(&dummy_share, 0, sizeof(dummy_share)); dummy_table.s= &dummy_share; /* DB_TYPE_UNKNOWN is used in ALTER TABLE when renaming only .frm files */ @@ -5160,7 +5158,6 @@ int ha_create_table_from_engine(THD* thd, const char *db, const char *name) DBUG_ENTER("ha_create_table_from_engine"); DBUG_PRINT("enter", ("name '%s'.'%s'", db, name)); - memset(&create_info, 0, sizeof(create_info)); if ((error= ha_discover(thd, db, name, &frmblob, &frmlen))) { /* Table could not be discovered and thus not created */ diff --git a/sql/handler.h b/sql/handler.h index e787d4c3ebd0..92b433239554 100644 --- a/sql/handler.h +++ b/sql/handler.h @@ -2,7 +2,7 @@ #define HANDLER_INCLUDED /* - Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -1058,6 +1058,8 @@ enum enum_stats_auto_recalc { HA_STATS_AUTO_RECALC_DEFAULT= 0, typedef struct st_ha_create_information { + st_ha_create_information() { memset(this, 0, sizeof(*this)); } + const CHARSET_INFO *table_charset, *default_table_charset; LEX_STRING connect_string; const char *password, *tablespace; diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 307778771bee..7c88f052b5d8 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -3571,7 +3571,8 @@ static int generate_server_uuid() strncpy(server_uuid, uuid.c_ptr(), UUID_LENGTH); DBUG_EXECUTE_IF("server_uuid_deterministic", - strncpy(server_uuid, "00000000-1111-0000-1111-000000000000", UUID_LENGTH);); + memcpy(server_uuid, "00000000-1111-0000-1111-000000000000", + UUID_LENGTH);); server_uuid[UUID_LENGTH]= '\0'; return 0; } diff --git a/sql/opt_range.cc b/sql/opt_range.cc index 433ba0f2fd61..e4ab8a9fa830 100644 --- a/sql/opt_range.cc +++ b/sql/opt_range.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -1604,7 +1604,7 @@ QUICK_INDEX_MERGE_SELECT::QUICK_INDEX_MERGE_SELECT(THD *thd_param, DBUG_ENTER("QUICK_INDEX_MERGE_SELECT::QUICK_INDEX_MERGE_SELECT"); index= MAX_KEY; head= table; - memset(&read_record, 0, sizeof(read_record)); + init_sql_alloc(key_memory_quick_index_merge_root, &alloc, thd->variables.range_alloc_block_size, 0); DBUG_VOID_RETURN; diff --git a/sql/partition_info.cc b/sql/partition_info.cc index 81d6c1f3a119..b4064313a0fb 100644 --- a/sql/partition_info.cc +++ b/sql/partition_info.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2006, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2006, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -34,13 +34,12 @@ partition_info *partition_info::get_clone(bool reset /* = false */) DBUG_ENTER("partition_info::get_clone"); List_iterator part_it(partitions); partition_element *part; - partition_info *clone= new partition_info(); + partition_info *clone= new partition_info(*this); if (!clone) { mem_alloc_error(sizeof(partition_info)); DBUG_RETURN(NULL); } - memcpy(clone, this, sizeof(partition_info)); memset(&(clone->read_partitions), 0, sizeof(clone->read_partitions)); memset(&(clone->lock_partitions), 0, sizeof(clone->lock_partitions)); clone->bitmaps_are_initialized= FALSE; @@ -51,13 +50,12 @@ partition_info *partition_info::get_clone(bool reset /* = false */) { List_iterator subpart_it(part->subpartitions); partition_element *subpart; - partition_element *part_clone= new partition_element(); + partition_element *part_clone= new partition_element(*part); if (!part_clone) { mem_alloc_error(sizeof(partition_element)); DBUG_RETURN(NULL); } - memcpy(part_clone, part, sizeof(partition_element)); /* Mark that RANGE and LIST values needs to be fixed so that we don't @@ -81,13 +79,12 @@ partition_info *partition_info::get_clone(bool reset /* = false */) part_clone->subpartitions.empty(); while ((subpart= (subpart_it++))) { - partition_element *subpart_clone= new partition_element(); + partition_element *subpart_clone= new partition_element(*subpart); if (!subpart_clone) { mem_alloc_error(sizeof(partition_element)); DBUG_RETURN(NULL); } - memcpy(subpart_clone, subpart, sizeof(partition_element)); part_clone->subpartitions.push_back(subpart_clone); } clone->partitions.push_back(part_clone); @@ -1921,7 +1918,6 @@ void partition_info::print_no_partition_found(TABLE *table_arg) char *buf_ptr= (char*)&buf; TABLE_LIST table_list; - memset(&table_list, 0, sizeof(table_list)); table_list.db= table_arg->s->db.str; table_list.table_name= table_arg->s->table_name.str; diff --git a/sql/records.cc b/sql/records.cc index 34e499808d8a..5097892622dd 100644 --- a/sql/records.cc +++ b/sql/records.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -66,7 +66,7 @@ bool init_read_record_idx(READ_RECORD *info, THD *thd, TABLE *table, { int error; empty_record(table); - memset(info, 0, sizeof(*info)); + new (info) READ_RECORD; info->thd= thd; info->table= table; info->record= table->record[0]; @@ -191,7 +191,7 @@ bool init_read_record(READ_RECORD *info,THD *thd, if (!table) table= qep_tab->table(); - memset(info, 0, sizeof(*info)); + new (info) READ_RECORD; info->thd=thd; info->table=table; info->forms= &info->table; /* Only one table */ diff --git a/sql/records.h b/sql/records.h index b4612539b822..1e0645a4faa3 100644 --- a/sql/records.h +++ b/sql/records.h @@ -1,6 +1,6 @@ #ifndef SQL_RECORDS_H #define SQL_RECORDS_H -/* Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2008, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -71,7 +71,7 @@ struct READ_RECORD bool print_error, ignore_not_found_rows; public: - READ_RECORD() {} + READ_RECORD() { memset(this, 0, sizeof(*this)); } }; bool init_read_record(READ_RECORD *info, THD *thd, diff --git a/sql/sp.cc b/sql/sp.cc index 22f7ca01f622..e7caacff3e80 100644 --- a/sql/sp.cc +++ b/sql/sp.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2002, 2017, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2002, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -966,8 +966,7 @@ sp_returns_type(THD *thd, String &result, sp_head *sp) TABLE table; TABLE_SHARE share; Field *field; - memset(&table, 0, sizeof(table)); - memset(&share, 0, sizeof(share)); + table.in_use= thd; table.s = &share; field= sp->create_result_field(0, 0, &table); diff --git a/sql/sp_head.cc b/sql/sp_head.cc index ee2fa9d9cb23..470b1e0c4fc3 100644 --- a/sql/sp_head.cc +++ b/sql/sp_head.cc @@ -2169,7 +2169,7 @@ void sp_head::add_used_tables_to_table_list(THD *thd, bool sp_head::check_show_access(THD *thd, bool *full_access) { TABLE_LIST tables; - memset(&tables, 0, sizeof(tables)); + tables.db= (char*) "mysql"; tables.table_name= tables.alias= (char*) "proc"; diff --git a/sql/spatial.h b/sql/spatial.h index d996d4715636..0d73e340bf5a 100644 --- a/sql/spatial.h +++ b/sql/spatial.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2002, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -839,14 +839,6 @@ class Geometry nomem= 1; } - Flags_t &operator=(const Flags_t &rhs) - { - compile_time_assert(sizeof(*this) == sizeof(uint64)); - memcpy(this, &rhs, sizeof(rhs)); - return *this; - } - - uint64 bo:1; uint64 dim:2; uint64 nomem:1; diff --git a/sql/sql_alloc.h b/sql/sql_alloc.h index 629dfe104733..5e5a29425ba9 100644 --- a/sql/sql_alloc.h +++ b/sql/sql_alloc.h @@ -1,6 +1,6 @@ #ifndef SQL_ALLOC_INCLUDED #define SQL_ALLOC_INCLUDED -/* Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -37,15 +37,14 @@ class Sql_alloc { return alloc_root(mem_root, size); } static void *operator new(size_t size, MEM_ROOT *mem_root) throw () { return alloc_root(mem_root, size); } - static void operator delete(void *ptr, size_t size) { TRASH(ptr, size); } + static void operator delete(void *ptr, size_t size) + { if (ptr != NULL) TRASH(ptr, size); } static void operator delete(void *ptr, MEM_ROOT *mem_root) { /* never called */ } static void operator delete[](void *ptr, MEM_ROOT *mem_root) { /* never called */ } - static void operator delete[](void *ptr, size_t size) { TRASH(ptr, size); } - - inline Sql_alloc() {} - inline ~Sql_alloc() {} + static void operator delete[](void *ptr, size_t size) + { if (ptr != NULL) TRASH(ptr, size); } }; #endif // SQL_ALLOC_INCLUDED diff --git a/sql/sql_alter.cc b/sql/sql_alter.cc index a3ca2041d2b5..c896eaa0e2f1 100644 --- a/sql/sql_alter.cc +++ b/sql/sql_alter.cc @@ -294,7 +294,7 @@ bool Sql_cmd_alter_table::execute(THD *thd) { // Rename of table TABLE_LIST tmp_table; - memset(&tmp_table, 0, sizeof(tmp_table)); + tmp_table.table_name= lex->name.str; tmp_table.db= select_lex->db; tmp_table.grant.privilege= priv; diff --git a/sql/sql_analyse.cc b/sql/sql_analyse.cc index 875bfec9e1af..e006e3a55bc7 100644 --- a/sql/sql_analyse.cc +++ b/sql/sql_analyse.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -238,8 +238,9 @@ bool get_ev_num_info(EV_NUM_INFO *ev_info, NUM_INFO *info, const char *num) } // get_ev_num_info -void free_string(String *s) +void free_string(void *s_void, TREE_FREE, const void*) { + String *s= static_cast(s_void); s->mem_free(); } @@ -318,7 +319,7 @@ void field_str::add() } else { - memset(&s, 0, sizeof(s)); // Let tree handle free of this + ::new (&s) String; // Let tree handle free of this if ((treemem += length) > pc->max_treemem) { room_in_tree = 0; // Remove tree, too big tree diff --git a/sql/sql_analyse.h b/sql/sql_analyse.h index 804af88e86be..39ed7fa89ccc 100644 --- a/sql/sql_analyse.h +++ b/sql/sql_analyse.h @@ -1,7 +1,7 @@ #ifndef SQL_ANALYSE_INCLUDED #define SQL_ANALYSE_INCLUDED -/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -67,7 +67,7 @@ int compare_ulonglong(const ulonglong *s, const ulonglong *t); int compare_ulonglong2(void* cmp_arg MY_ATTRIBUTE((unused)), const ulonglong *s, const ulonglong *t); int compare_decimal2(int* len, const char *s, const char *t); -void free_string(String*); +void free_string(void*, TREE_FREE, const void*); class Query_result_analyse; class field_info :public Sql_alloc @@ -121,7 +121,7 @@ class field_str :public field_info must_be_blob(0), was_zero_fill(0), was_maybe_zerofill(0), can_be_still_num(1) { init_tree(&tree, 0, 0, sizeof(String), (qsort_cmp2) sortcmp2, - 0, (tree_element_free) free_string, NULL); }; + 0, free_string, NULL); }; void add(); void get_opt_type(String*, ha_rows); diff --git a/sql/sql_base.cc b/sql/sql_base.cc index 6ce06343bd78..f6eed77d5242 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -1042,7 +1042,6 @@ OPEN_TABLE_LIST *list_open_tables(THD *thd, const char *db, const char *wild) TABLE_LIST table_list; DBUG_ENTER("list_open_tables"); - memset(&table_list, 0, sizeof(table_list)); start_list= &open_list; open_list=0; diff --git a/sql/sql_cache.cc b/sql/sql_cache.cc index 00dbc807d9bc..9bd656df3c66 100644 --- a/sql/sql_cache.cc +++ b/sql/sql_cache.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -1801,7 +1801,6 @@ def_week_frmt: %lu, in_trans: %d, autocommit: %d", } } - memset(&table_list, 0, sizeof(table_list)); table_list.db = table->db(); table_list.alias= table_list.table_name= table->table(); #ifndef NO_EMBEDDED_ACCESS_CHECKS diff --git a/sql/sql_db.cc b/sql/sql_db.cc index 510eb8bfbfdf..e39afa716c3b 100644 --- a/sql/sql_db.cc +++ b/sql/sql_db.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -378,7 +378,7 @@ bool load_db_opt(THD *thd, const char *path, HA_CREATE_INFO *create) bool error=1; uint nbytes; - memset(create, 0, sizeof(*create)); + new (create) HA_CREATE_INFO; create->default_table_charset= thd->variables.collation_server; /* Check if options for this database are already in the hash */ diff --git a/sql/sql_delete.cc b/sql/sql_delete.cc index 9e3af2a97a7b..573f788bc6b2 100644 --- a/sql/sql_delete.cc +++ b/sql/sql_delete.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -661,7 +661,6 @@ bool Sql_cmd_delete::mysql_prepare_delete(THD *thd) List fields; List all_fields; - memset(&tables, 0, sizeof(tables)); tables.table = table_list->table; tables.alias = table_list->alias; diff --git a/sql/sql_executor.h b/sql/sql_executor.h index 135a81c96220..7c52b721d2ae 100644 --- a/sql/sql_executor.h +++ b/sql/sql_executor.h @@ -1,7 +1,7 @@ #ifndef SQL_EXECUTOR_INCLUDED #define SQL_EXECUTOR_INCLUDED -/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights +/* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights * reserved. This program is free software; you can redistribute it and/or modify @@ -381,7 +381,6 @@ class QEP_TAB : public Sql_alloc, public QEP_shared_owner All users do init_read_record(), which does memset(), rather than invoking a constructor. */ - memset(&read_record, 0, sizeof(read_record)); } /// Initializes the object from a JOIN_TAB diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index 4669a5204d9b..83f863388bd1 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -2930,7 +2930,6 @@ int Query_result_create::binlog_show_create_table(TABLE **tables, uint count) int result; TABLE_LIST tmp_table_list; - memset(&tmp_table_list, 0, sizeof(tmp_table_list)); tmp_table_list.table = *tables; query.length(0); // Have to zero it since constructor doesn't diff --git a/sql/sql_load.cc b/sql/sql_load.cc index 6cbce9217df0..653880e7b68e 100644 --- a/sql/sql_load.cc +++ b/sql/sql_load.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -447,8 +447,8 @@ int mysql_load(THD *thd,sql_exchange *ex,TABLE_LIST *table_list, MY_RETURN_REAL_PATH); } - if (thd->slave_thread & ((SYSTEM_THREAD_SLAVE_SQL | - (SYSTEM_THREAD_SLAVE_WORKER))!=0)) + if ((thd->slave_thread & + (SYSTEM_THREAD_SLAVE_SQL | SYSTEM_THREAD_SLAVE_WORKER)) != 0) { #if defined(HAVE_REPLICATION) && !defined(MYSQL_CLIENT) Relay_log_info* rli= thd->rli_slave->get_c_rli(); diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 00efd393f6d9..91561d1c8181 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -3294,7 +3294,6 @@ case SQLCOM_PREPARE: */ thd->enable_slow_log= opt_log_slow_admin_statements; - memset(&create_info, 0, sizeof(create_info)); create_info.db_type= 0; create_info.row_type= ROW_TYPE_NOT_USED; create_info.default_table_charset= thd->variables.collation_database; diff --git a/sql/sql_partition_admin.cc b/sql/sql_partition_admin.cc index a8913c6b4333..9cfa1cfc2b3c 100644 --- a/sql/sql_partition_admin.cc +++ b/sql/sql_partition_admin.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -157,8 +157,6 @@ static bool compare_table_with_partition(THD *thd, TABLE *table, DBUG_ENTER("compare_table_with_partition"); bool metadata_equal= false; - memset(&part_create_info, 0, sizeof(HA_CREATE_INFO)); - memset(&table_create_info, 0, sizeof(HA_CREATE_INFO)); update_create_info_from_table(&table_create_info, table); /* get the current auto_increment value */ diff --git a/sql/sql_servers.cc b/sql/sql_servers.cc index 8594e4a3f4ed..6b6652b2d4cf 100644 --- a/sql/sql_servers.cc +++ b/sql/sql_servers.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -366,8 +366,6 @@ static bool close_cached_connection_tables(THD *thd, DBUG_ENTER("close_cached_connection_tables"); DBUG_ASSERT(thd); - memset(&tmp, 0, sizeof(TABLE_LIST)); - mysql_mutex_lock(&LOCK_open); for (idx= 0; idx < table_def_cache.records; idx++) diff --git a/sql/sql_show.cc b/sql/sql_show.cc index 85dea44b8df1..3e430c2398bb 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -627,8 +627,6 @@ find_files(THD *thd, List *files, const char *db, - memset(&table_list, 0, sizeof(table_list)); - if (!(dirp = my_dir(path,MYF(dir ? MY_WANT_STAT : 0)))) { if (my_errno() == ENOENT) @@ -1670,7 +1668,6 @@ int store_create_info(THD *thd, TABLE_LIST *table_list, String *packet, } key_info= table->key_info; - memset(&create_info, 0, sizeof(create_info)); /* Allow update_create_info to update row type */ create_info.row_type= share->row_type; file->update_create_info(&create_info); @@ -2627,7 +2624,7 @@ int add_status_vars(const SHOW_VAR *list) while (list->name) all_status_vars.push_back(*list++); } - catch (std::bad_alloc) + catch (const std::bad_alloc &) { my_error(ER_OUTOFMEMORY, MYF(ME_FATALERROR), static_cast(sizeof(Status_var_array::value_type))); @@ -4253,8 +4250,6 @@ static int fill_schema_table_from_frm(THD *thd, TABLE_LIST *tables, size_t key_length; char db_name_buff[NAME_LEN + 1], table_name_buff[NAME_LEN + 1]; - memset(&table_list, 0, sizeof(TABLE_LIST)); - DBUG_ASSERT(db_name->length <= NAME_LEN); DBUG_ASSERT(table_name->length <= NAME_LEN); @@ -4320,7 +4315,6 @@ static int fill_schema_table_from_frm(THD *thd, TABLE_LIST *tables, { TABLE tbl; - memset(&tbl, 0, sizeof(TABLE)); init_sql_alloc(key_memory_table_triggers_list, &tbl.mem_root, TABLE_ALLOC_BLOCK_SIZE, 0); @@ -4401,7 +4395,6 @@ static int fill_schema_table_from_frm(THD *thd, TABLE_LIST *tables, { TABLE tbl; - memset(&tbl, 0, sizeof(TABLE)); init_sql_alloc(key_memory_table_triggers_list, &tbl.mem_root, TABLE_ALLOC_BLOCK_SIZE, 0); @@ -5684,7 +5677,6 @@ bool store_schema_params(THD *thd, TABLE *table, TABLE *proc_table, bool free_sp_head; DBUG_ENTER("store_schema_params"); - memset(&tbl, 0, sizeof(TABLE)); (void) build_table_filename(path, sizeof(path), "", "", "", 0); init_tmp_table_share(thd, &share, "", 0, "", path); @@ -5897,7 +5889,6 @@ bool store_schema_proc(THD *thd, TABLE *table, TABLE *proc_table, Field *field; Create_field *field_def= &sp->m_return_field_def; - memset(&tbl, 0, sizeof(TABLE)); (void) build_table_filename(path, sizeof(path), "", "", "", 0); init_tmp_table_share(thd, &share, "", 0, "", path); field= make_field(&share, (uchar*) 0, field_def->length, @@ -5982,7 +5973,6 @@ int fill_schema_proc(THD *thd, TABLE_LIST *tables, Item *cond) strxmov(definer, thd->security_context()->priv_user().str, "@", thd->security_context()->priv_host().str, NullS); /* We use this TABLE_LIST instance only for checking of privileges. */ - memset(&proc_tables, 0, sizeof(proc_tables)); proc_tables.db= (char*) "mysql"; proc_tables.db_length= 5; proc_tables.table_name= proc_tables.alias= (char*) "proc"; @@ -6170,7 +6160,6 @@ static int get_schema_views_record(THD *thd, TABLE_LIST *tables, { TABLE_LIST table_list; uint view_access; - memset(&table_list, 0, sizeof(table_list)); table_list.db= tables->db; table_list.table_name= tables->table_name; table_list.grant.privilege= thd->col_access; diff --git a/sql/sql_table.cc b/sql/sql_table.cc index 2d645013bd9f..18fce0de40c5 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2017 Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -5752,7 +5752,6 @@ bool mysql_create_like_table(THD* thd, TABLE_LIST* table, TABLE_LIST* src_table, } /* Fill HA_CREATE_INFO and Alter_info with description of source table. */ - memset(&local_create_info, 0, sizeof(local_create_info)); local_create_info.db_type= src_table->table->s->db_type(); local_create_info.row_type= src_table->table->s->row_type; if (mysql_prepare_alter_table(thd, src_table->table, &local_create_info, @@ -10266,7 +10265,6 @@ copy_data_between_tables(PSI_stage_progress *psi, from->sort.io_cache=(IO_CACHE*) my_malloc(key_memory_TABLE_sort_io_cache, sizeof(IO_CACHE), MYF(MY_FAE | MY_ZEROFILL)); - memset(&tables, 0, sizeof(tables)); tables.table= from; tables.alias= tables.table_name= from->s->table_name.str; tables.db= from->s->db.str; @@ -10433,7 +10431,6 @@ bool mysql_recreate_table(THD *thd, TABLE_LIST *table_list, bool table_copy) /* Same applies to MDL request. */ table_list->mdl_request.set_type(MDL_SHARED_NO_WRITE); - memset(&create_info, 0, sizeof(create_info)); create_info.row_type=ROW_TYPE_NOT_USED; create_info.default_table_charset=default_charset_info; /* Force alter table to recreate table */ diff --git a/sql/sql_tmp_table.cc b/sql/sql_tmp_table.cc index 257b27128e91..8f5153cc8c78 100644 --- a/sql/sql_tmp_table.cc +++ b/sql/sql_tmp_table.cc @@ -804,7 +804,7 @@ create_tmp_table(THD *thd, Temp_table_param *param, List &fields, my_stpcpy(tmpname,path); /* make table according to fields */ - memset(table, 0, sizeof(*table)); + new (table) TABLE; memset(reg_field, 0, sizeof(Field*)*(field_count + 2)); memset(default_field, 0, sizeof(Field*) * (field_count + 1)); memset(from_field, 0, sizeof(Field*)*(field_count + 1)); @@ -1643,7 +1643,7 @@ TABLE *create_duplicate_weedout_tmp_table(THD *thd, my_stpcpy(tmpname,path); /* STEP 4: Create TABLE description */ - memset(table, 0, sizeof(*table)); + new (table) TABLE; memset(reg_field, 0, sizeof(Field*) * 3); table->mem_root= own_root; @@ -1962,8 +1962,8 @@ TABLE *create_virtual_tmp_table(THD *thd, List &field_list) NullS)) return 0; - memset(table, 0, sizeof(*table)); - memset(share, 0, sizeof(*share)); + new (table) TABLE; + new (share) TABLE_SHARE; table->field= field; table->s= share; table->temp_pool_slot= MY_BIT_NONE; @@ -2243,8 +2243,6 @@ bool create_innodb_tmp_table(TABLE *table, KEY *keyinfo) HA_CREATE_INFO create_info; - memset(&create_info, 0, sizeof(create_info)); - create_info.db_type= table->s->db_type(); create_info.row_type= table->s->row_type; create_info.options|= HA_LEX_CREATE_TMP_TABLE | diff --git a/sql/sql_truncate.cc b/sql/sql_truncate.cc index 7ac17f9f10bf..c8eda2a77a8d 100644 --- a/sql/sql_truncate.cc +++ b/sql/sql_truncate.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -281,8 +281,6 @@ static bool recreate_temporary_table(THD *thd, TABLE *table) handlerton *table_type= table->s->db_type(); DBUG_ENTER("recreate_temporary_table"); - memset(&create_info, 0, sizeof(create_info)); - table->file->info(HA_STATUS_AUTO | HA_STATUS_NO_LOCK); /* diff --git a/sql/sql_union.cc b/sql/sql_union.cc index 709202d357f6..38fcf05fdb4b 100644 --- a/sql/sql_union.cc +++ b/sql/sql_union.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2001, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2001, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -631,7 +631,7 @@ bool st_select_lex_unit::prepare(THD *thd_arg, Query_result *sel_result, create_options, "", false, instantiate_tmp_table)) goto err; - memset(&result_table_list, 0, sizeof(result_table_list)); + new (&result_table_list) TABLE_LIST; result_table_list.db= (char*) ""; result_table_list.table_name= result_table_list.alias= (char*) "union"; result_table_list.table= table= union_result->table; diff --git a/sql/sql_view.cc b/sql/sql_view.cc index 5018a022753e..f1a4cd09a6f5 100644 --- a/sql/sql_view.cc +++ b/sql/sql_view.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2004, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2004, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -211,8 +211,13 @@ fill_defined_view_parts (THD *thd, TABLE_LIST *view) size_t key_length; LEX *lex= thd->lex; TABLE_LIST decoy; - - memcpy (&decoy, view, sizeof (TABLE_LIST)); + decoy= *view; + /* + It's not clear what the above assignment actually wants to + accomplish. What we do know is that it does *not* want to copy the MDL + request, so we overwrite it with an uninitialized request. + */ + decoy.mdl_request = MDL_request(); key_length= get_table_def_key(view, &key); @@ -2090,7 +2095,6 @@ mysql_rename_view(THD *thd, view definition parsing or use temporary 'view_def' object for it. */ - memset(&view_def, 0, sizeof(view_def)); view_def.timestamp.str= view_def.timestamp_buffer; view_def.view_suid= TRUE; diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index aed8ac121ef1..40eaa96fd0c5 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2018 Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -2274,7 +2274,7 @@ create: lex->alter_info.reset(); lex->col_list.empty(); lex->change=NullS; - memset(&lex->create_info, 0, sizeof(lex->create_info)); + new (&lex->create_info) HA_CREATE_INFO; lex->create_info.options=$2 | $4; lex->create_info.default_table_charset= NULL; lex->name.str= 0; @@ -7504,7 +7504,7 @@ alter: lex->select_lex->init_order(); lex->select_lex->db= const_cast((lex->select_lex->table_list.first)->db); - memset(&lex->create_info, 0, sizeof(lex->create_info)); + new (&lex->create_info) HA_CREATE_INFO; lex->create_info.db_type= 0; lex->create_info.default_table_charset= NULL; lex->create_info.row_type= ROW_TYPE_NOT_USED; @@ -11807,7 +11807,7 @@ show: SHOW { LEX *lex=Lex; - memset(&lex->create_info, 0, sizeof(lex->create_info)); + new (&lex->create_info) HA_CREATE_INFO; } show_param ; diff --git a/sql/table.cc b/sql/table.cc index 773a3201e483..698ed2988ee6 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -392,7 +392,7 @@ TABLE_SHARE *alloc_table_share(TABLE_LIST *table_list, const char *key, table_cache_instances * sizeof(*cache_element_array), NULL)) { - memset(share, 0, sizeof(*share)); + new (share) TABLE_SHARE; share->set_table_cache_key(key_buff, key, key_length); @@ -458,7 +458,7 @@ void init_tmp_table_share(THD *thd, TABLE_SHARE *share, const char *key, DBUG_ENTER("init_tmp_table_share"); DBUG_PRINT("enter", ("table: '%s'.'%s'", key, table_name)); - memset(share, 0, sizeof(*share)); + new (share) TABLE_SHARE; init_sql_alloc(key_memory_table_share, &share->mem_root, TABLE_ALLOC_BLOCK_SIZE, 0); share->table_category= TABLE_CATEGORY_TEMPORARY; @@ -3066,7 +3066,7 @@ int open_table_from_share(THD *thd, TABLE_SHARE *share, const char *alias, share->table_name.str, (long) outparam)); error= 1; - memset(outparam, 0, sizeof(*outparam)); + new (outparam) TABLE; outparam->in_use= thd; outparam->s= share; outparam->db_stat= db_stat; @@ -4895,14 +4895,16 @@ TABLE_LIST *TABLE_LIST::new_nested_join(MEM_ROOT *allocator, DBUG_ASSERT(belongs_to && select); TABLE_LIST *const join_nest= - (TABLE_LIST *) alloc_root(allocator, ALIGN_SIZE(sizeof(TABLE_LIST))+ - sizeof(NESTED_JOIN)); + (TABLE_LIST*) alloc_root(allocator, sizeof(TABLE_LIST)); if (join_nest == NULL) return NULL; + new (join_nest) TABLE_LIST; - memset(join_nest, 0, ALIGN_SIZE(sizeof(TABLE_LIST)) + sizeof(NESTED_JOIN)); join_nest->nested_join= - (NESTED_JOIN *) ((uchar *)join_nest + ALIGN_SIZE(sizeof(TABLE_LIST))); + (NESTED_JOIN*) alloc_root(allocator, sizeof(NESTED_JOIN)); + if (join_nest->nested_join == NULL) + return NULL; + new (join_nest->nested_join) NESTED_JOIN; join_nest->db= (char *)""; join_nest->db_length= 0; diff --git a/sql/table.h b/sql/table.h index 995256126e34..530e937309c4 100644 --- a/sql/table.h +++ b/sql/table.h @@ -1,7 +1,7 @@ #ifndef TABLE_INCLUDED #define TABLE_INCLUDED -/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -245,6 +245,13 @@ typedef struct st_order { */ struct st_grant_internal_info { + st_grant_internal_info() + : m_schema_lookup_done(false), + m_schema_access(NULL), + m_table_lookup_done(false), + m_table_access(NULL) + {} + /** True if the internal lookup by schema name was done. */ bool m_schema_lookup_done; /** Cached internal schema access. */ @@ -554,7 +561,7 @@ typedef I_P_List Field_map; struct TABLE { - TABLE() {} /* Remove gcc warning */ + TABLE() { memset(this, 0, sizeof(*this)); } /* Since TABLE instances are often cleared using memset(), do not add virtual members and do not inherit from TABLE. @@ -1733,7 +1740,7 @@ class Derived_key: public Sql_alloc { struct TABLE_LIST { - TABLE_LIST() {} /* Remove gcc warning */ + TABLE_LIST() { memset(this, 0, sizeof(*this)); } /** Prepare TABLE_LIST that consists of one table instance to use in @@ -1747,7 +1754,7 @@ struct TABLE_LIST enum thr_lock_type lock_type_arg, enum enum_mdl_type mdl_type_arg) { - memset(this, 0, sizeof(*this)); + new (this) TABLE_LIST; m_map= 1; db= (char*) db_name_arg; db_length= db_length_arg; @@ -2749,6 +2756,8 @@ struct Semijoin_mat_optimize */ typedef struct st_nested_join { + st_nested_join() { memset(this, 0, sizeof(*this)); } + List join_list; /* list of elements in the nested join */ table_map used_tables; /* bitmap of tables in the nested join */ table_map not_null_tables; /* tables that rejects nulls */ diff --git a/sql/trigger.cc b/sql/trigger.cc index 99e5c956c60d..305d9c3b97cd 100644 --- a/sql/trigger.cc +++ b/sql/trigger.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -426,7 +426,6 @@ Trigger::Trigger(MEM_ROOT *mem_root, m_on_table_name= NULL_STR; m_parse_error_message[0]= 0; - memset(&m_subject_table_grant, 0, sizeof (m_subject_table_grant)); } diff --git a/sql/tztime.cc b/sql/tztime.cc index 2261144ae2c4..94a407da5d1e 100644 --- a/sql/tztime.cc +++ b/sql/tztime.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2004, 2016, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2004, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -1537,10 +1537,9 @@ my_offset_tzs_get_key(Time_zone_offset *entry, static void tz_init_table_list(TABLE_LIST *tz_tabs) { - memset(tz_tabs, 0, sizeof(TABLE_LIST) * MY_TZ_TABLES_COUNT); - for (int i= 0; i < MY_TZ_TABLES_COUNT; i++) { + new (&tz_tabs[i]) TABLE_LIST; tz_tabs[i].alias= tz_tabs[i].table_name= tz_tables_names[i].str; tz_tabs[i].table_name_length= tz_tables_names[i].length; tz_tabs[i].db= tz_tables_db_name.str; @@ -1680,7 +1679,6 @@ my_tz_init(THD *org_thd, const char *default_tzname, my_bool bootstrap) leap seconds shared by all time zones. */ thd->set_db(db); - memset(&tz_tables[0], 0, sizeof(TABLE_LIST)); tz_tables[0].alias= tz_tables[0].table_name= (char*)"time_zone_leap_second"; tz_tables[0].table_name_length= 21; diff --git a/sql/unireg.cc b/sql/unireg.cc index 5dd4f1f8e1b0..ab03dc2c86c0 100644 --- a/sql/unireg.cc +++ b/sql/unireg.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -1287,8 +1287,6 @@ static bool make_empty_rec(THD *thd, File file, DBUG_ENTER("make_empty_rec"); /* We need a table to generate columns for default values */ - memset(&table, 0, sizeof(table)); - memset(&share, 0, sizeof(share)); table.s= &share; if (!(buff=(uchar*) my_malloc(key_memory_frm, diff --git a/storage/blackhole/ha_blackhole.cc b/storage/blackhole/ha_blackhole.cc index 53952450f4ac..acf85acf482a 100644 --- a/storage/blackhole/ha_blackhole.cc +++ b/storage/blackhole/ha_blackhole.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2005, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -181,7 +181,7 @@ int ha_blackhole::info(uint flag) { DBUG_ENTER("ha_blackhole::info"); - memset(&stats, 0, sizeof(stats)); + new (&stats) ha_statistics; if (flag & HA_STATUS_AUTO) stats.auto_increment_value= 1; DBUG_RETURN(0); diff --git a/storage/innobase/CMakeLists.txt b/storage/innobase/CMakeLists.txt index 463394bdff7a..ca186b1e4767 100644 --- a/storage/innobase/CMakeLists.txt +++ b/storage/innobase/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2006, 2016, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 2018, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -166,9 +166,9 @@ IF(WITH_INNOBASE_STORAGE_ENGINE) ADD_DEPENDENCIES(innobase GenError) ENDIF() +INCLUDE(${MYSQL_CMAKE_SCRIPT_DIR}/compile_flags.cmake) # Avoid generating Hardware Capabilities due to crc32 instructions IF(CMAKE_SYSTEM_NAME MATCHES "SunOS" AND CMAKE_SYSTEM_PROCESSOR MATCHES "i386") - INCLUDE(${MYSQL_CMAKE_SCRIPT_DIR}/compile_flags.cmake) MY_CHECK_CXX_COMPILER_FLAG("-Wa,-nH" HAVE_WA_NH) IF(HAVE_WA_NH) ADD_COMPILE_FLAGS( @@ -178,6 +178,12 @@ IF(CMAKE_SYSTEM_NAME MATCHES "SunOS" AND CMAKE_SYSTEM_PROCESSOR MATCHES "i386") ENDIF() ENDIF() +MY_CHECK_CXX_COMPILER_FLAG("-Wcast-function-type" HAVE_CAST_FUNCTION_TYPE) +IF(HAVE_CAST_FUNCTION_TYPE) + ADD_COMPILE_FLAGS(fts/fts0pars.cc + COMPILE_FLAGS "-Wno-cast-function-type") +ENDIF() + # A GCC bug causes crash when compiling these files on ARM64 with -O1+ # Compile them with -O0 as a workaround. IF(CMAKE_COMPILER_IS_GNUCXX AND CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64") diff --git a/storage/innobase/buf/buf0buddy.cc b/storage/innobase/buf/buf0buddy.cc index 1d6083a5f777..6e435cc948dc 100644 --- a/storage/innobase/buf/buf0buddy.cc +++ b/storage/innobase/buf/buf0buddy.cc @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2006, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2006, 2018, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -129,7 +129,7 @@ buf_buddy_stamp_free( buf_buddy_free_t* buf, /*!< in/out: block to stamp */ ulint i) /*!< in: block size */ { - ut_d(memset(buf, static_cast(i), BUF_BUDDY_LOW << i)); + ut_d(memset(&buf->stamp, static_cast(i), BUF_BUDDY_LOW << i)); buf_buddy_mem_invalid(buf, i); mach_write_to_4(buf->stamp.bytes + BUF_BUDDY_STAMP_OFFSET, BUF_BUDDY_STAMP_FREE); diff --git a/storage/innobase/buf/buf0buf.cc b/storage/innobase/buf/buf0buf.cc index 022f5da48f51..ddfebaf16d57 100644 --- a/storage/innobase/buf/buf0buf.cc +++ b/storage/innobase/buf/buf0buf.cc @@ -2024,7 +2024,7 @@ buf_page_realloc( mutex_enter(&new_block->mutex); memcpy(new_block->frame, block->frame, UNIV_PAGE_SIZE); - memcpy(&new_block->page, &block->page, sizeof block->page); + new (&new_block->page) buf_page_t(block->page); /* relocate LRU list */ ut_ad(block->page.in_LRU_list); @@ -3134,7 +3134,7 @@ buf_relocate( } #endif /* UNIV_DEBUG */ - memcpy(dpage, bpage, sizeof *dpage); + new (dpage) buf_page_t(*bpage); /* Important that we adjust the hazard pointer before removing bpage from LRU list. */ diff --git a/storage/innobase/buf/buf0dump.cc b/storage/innobase/buf/buf0dump.cc index 8606e0fe1fae..03025dc3ba82 100644 --- a/storage/innobase/buf/buf0dump.cc +++ b/storage/innobase/buf/buf0dump.cc @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2011, 2017, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2011, 2018, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -266,7 +266,7 @@ buf_dump( #define SHOULD_QUIT() (SHUTTING_DOWN() && obey_shutdown) char full_filename[OS_FILE_MAX_PATH]; - char tmp_filename[OS_FILE_MAX_PATH]; + char tmp_filename[OS_FILE_MAX_PATH + 11]; char now[32]; FILE* f; ulint i; diff --git a/storage/innobase/buf/buf0lru.cc b/storage/innobase/buf/buf0lru.cc index a78112746f5c..62695f3200d6 100644 --- a/storage/innobase/buf/buf0lru.cc +++ b/storage/innobase/buf/buf0lru.cc @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1995, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1995, 2018, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -1906,7 +1906,7 @@ buf_LRU_free_page( } else if (buf_page_get_state(bpage) == BUF_BLOCK_FILE_PAGE) { b = buf_page_alloc_descriptor(); ut_a(b); - memcpy(b, bpage, sizeof *b); + new (b) buf_page_t(*bpage); } ut_ad(buf_pool_mutex_own(buf_pool)); diff --git a/storage/innobase/gis/gis0rtree.cc b/storage/innobase/gis/gis0rtree.cc index ee89e0a913f5..4f0353e759ef 100644 --- a/storage/innobase/gis/gis0rtree.cc +++ b/storage/innobase/gis/gis0rtree.cc @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2016, 2018, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -663,7 +663,6 @@ rtr_adjust_upper_level( /* Create a memory heap where the data tuple is stored */ heap = mem_heap_create(1024); - memset(&cursor, 0, sizeof(cursor)); cursor.thr = sea_cur->thr; @@ -1346,7 +1345,6 @@ rtr_ins_enlarge_mbr( page_cur_t* page_cursor; ulint* offsets; node_visit_t* node_visit; - btr_cur_t cursor; page_t* page; ut_ad(dict_index_is_spatial(index)); @@ -1380,7 +1378,7 @@ rtr_ins_enlarge_mbr( rtr_page_cal_mbr(index, block, &new_mbr, heap); /* Get father block. */ - memset(&cursor, 0, sizeof(cursor)); + btr_cur_t cursor; offsets = rtr_page_get_father_block( NULL, heap, index, block, mtr, btr_cur, &cursor); diff --git a/storage/innobase/gis/gis0sea.cc b/storage/innobase/gis/gis0sea.cc index b7a061a8fef5..ed4ec02859f1 100644 --- a/storage/innobase/gis/gis0sea.cc +++ b/storage/innobase/gis/gis0sea.cc @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2017, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2017, 2018, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -1547,7 +1547,7 @@ rtr_copy_buf( will be copied. It is also undefined what will happen with the newly memcpy()ed mutex if the source mutex was acquired by (another) thread while it was copied. */ - memcpy(&matches->block.page, &block->page, sizeof(buf_page_t)); + new (&matches->block.page) buf_page_t(block->page); matches->block.frame = block->frame; #ifndef UNIV_HOTBACKUP matches->block.unzip_LRU = block->unzip_LRU; diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index 53398ab850e6..2d402a35472b 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -2883,7 +2883,7 @@ innobase_register_trx( THD* thd, /* in: MySQL thd (connection) object */ trx_t* trx) /* in: transaction to register */ { - const ulonglong trx_id = static_cast( + const ulonglong trx_id = static_cast( trx_get_id_for_print(trx)); trans_register_ha(thd, FALSE, hton, &trx_id); diff --git a/storage/innobase/handler/i_s.cc b/storage/innobase/handler/i_s.cc index 8f8a7223b545..22763724dd12 100644 --- a/storage/innobase/handler/i_s.cc +++ b/storage/innobase/handler/i_s.cc @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2007, 2017, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2007, 2018, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -1459,7 +1459,7 @@ i_s_cmp_fill_low( table->field[5]->store(zip_stat->decompressed_usec / 1000000, true); if (reset) { - memset(zip_stat, 0, sizeof *zip_stat); + new (zip_stat) page_zip_stat_t; } if (schema_table_store_record(thd, table)) { diff --git a/storage/innobase/include/btr0cur.h b/storage/innobase/include/btr0cur.h index 8e706d5f15b8..d8fd6c287c9b 100644 --- a/storage/innobase/include/btr0cur.h +++ b/storage/innobase/include/btr0cur.h @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1994, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1994, 2018, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -907,6 +907,8 @@ enum btr_cur_method { /** The tree cursor: the definition appears here only for the compiler to know struct size! */ struct btr_cur_t { + btr_cur_t() { memset(this, 0, sizeof(*this)); } + dict_index_t* index; /*!< index where positioned */ page_cur_t page_cur; /*!< page cursor */ purge_node_t* purge_node; /*!< purge node, for BTR_DELETE */ @@ -972,7 +974,6 @@ struct btr_cur_t { information of the path through the tree */ rtr_info_t* rtr_info; /*!< rtree search info */ - btr_cur_t():thr(NULL), rtr_info(NULL) {} /* default values */ }; diff --git a/storage/innobase/include/btr0pcur.h b/storage/innobase/include/btr0pcur.h index 956b7646bd92..eda78f73f237 100644 --- a/storage/innobase/include/btr0pcur.h +++ b/storage/innobase/include/btr0pcur.h @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2018, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -497,6 +497,8 @@ enum pcur_pos_t { selects, updates, and deletes. */ struct btr_pcur_t{ + btr_pcur_t() { memset(this, 0, sizeof(*this)); } + /** a B-tree cursor */ btr_cur_t btr_cur; /** see TODO note below! diff --git a/storage/innobase/include/data0type.ic b/storage/innobase/include/data0type.ic index 57770ec0e17f..90e1e6f06ffb 100644 --- a/storage/innobase/include/data0type.ic +++ b/storage/innobase/include/data0type.ic @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2014, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2018, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -505,6 +505,7 @@ dtype_get_fixed_size_low( return(0); } #endif /* UNIV_DEBUG */ + // Fall through. case DATA_CHAR: case DATA_FIXBINARY: case DATA_INT: @@ -585,6 +586,7 @@ dtype_get_min_size_low( return(0); } #endif /* UNIV_DEBUG */ + // Fall through. case DATA_CHAR: case DATA_FIXBINARY: case DATA_INT: diff --git a/storage/innobase/include/dict0mem.h b/storage/innobase/include/dict0mem.h index 1578b572b05a..d00a3efd505d 100644 --- a/storage/innobase/include/dict0mem.h +++ b/storage/innobase/include/dict0mem.h @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2017, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2018, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2012, Facebook Inc. This program is free software; you can redistribute it and/or modify it under @@ -688,6 +688,8 @@ be REC_VERSION_56_MAX_INDEX_COL_LEN (3072) bytes */ /** Data structure for a field in an index */ struct dict_field_t{ + dict_field_t() { memset(this, 0, sizeof(*this)); } + dict_col_t* col; /*!< pointer to the table column */ id_name_t name; /*!< name of the column */ unsigned prefix_len:12; /*!< 0 or the length of the column diff --git a/storage/innobase/include/row0ftsort.h b/storage/innobase/include/row0ftsort.h index 0ea266b28cbf..f7db719c162b 100644 --- a/storage/innobase/include/row0ftsort.h +++ b/storage/innobase/include/row0ftsort.h @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2010, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2010, 2018, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -105,6 +105,8 @@ typedef UT_LIST_BASE_NODE_T(row_fts_token_t) fts_token_list_t; /** Structure stores information from string tokenization operation */ struct fts_tokenize_ctx { + fts_tokenize_ctx() { memset(this, 0, sizeof(*this)); } + ulint processed_len; /*!< processed string length */ ulint init_pos; /*!< doc start position */ ulint buf_used; /*!< the sort buffer (ID) when diff --git a/storage/innobase/os/os0file.cc b/storage/innobase/os/os0file.cc index 091e6ee549b9..ad4d6ba28664 100644 --- a/storage/innobase/os/os0file.cc +++ b/storage/innobase/os/os0file.cc @@ -209,6 +209,8 @@ mysql_pfs_key_t innodb_temp_file_key; /** The asynchronous I/O context */ struct Slot { + Slot() { memset(this, 0, sizeof(*this)); } + /** index of the slot in the aio array */ uint16_t pos; @@ -6303,7 +6305,7 @@ AIO::AIO( m_not_full = os_event_create("aio_not_full"); m_is_empty = os_event_create("aio_is_empty"); - memset(&m_slots[0], 0x0, sizeof(m_slots[0]) * m_slots.size()); + std::uninitialized_fill(m_slots.begin(), m_slots.end(), Slot()); #ifdef LINUX_NATIVE_AIO memset(&m_events[0], 0x0, sizeof(m_events[0]) * m_events.size()); #endif /* LINUX_NATIVE_AIO */ diff --git a/storage/innobase/row/row0ftsort.cc b/storage/innobase/row/row0ftsort.cc index cea6a3062c59..40af3f947514 100644 --- a/storage/innobase/row/row0ftsort.cc +++ b/storage/innobase/row/row0ftsort.cc @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2010, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2010, 2018, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -758,7 +758,6 @@ fts_parallel_tokenization( merge_file = psort_info->merge_file; blob_heap = mem_heap_create(512); memset(&doc, 0, sizeof(doc)); - memset(&t_ctx, 0, sizeof(t_ctx)); memset(mycount, 0, FTS_NUM_AUX_INDEX * sizeof(int)); doc.charset = fts_index_get_charset( diff --git a/storage/innobase/row/row0import.cc b/storage/innobase/row/row0import.cc index 2668f302e51a..30fcaaef22d8 100644 --- a/storage/innobase/row/row0import.cc +++ b/storage/innobase/row/row0import.cc @@ -109,18 +109,18 @@ struct row_index_t { struct row_import { row_import() UNIV_NOTHROW : - m_table(), - m_version(), - m_hostname(), - m_table_name(), - m_autoinc(), + m_table(NULL), + m_version(0), + m_hostname(NULL), + m_table_name(NULL), + m_autoinc(0), m_page_size(0, 0, false), - m_flags(), - m_n_cols(), - m_cols(), - m_col_names(), - m_n_indexes(), - m_indexes(), + m_flags(0), + m_n_cols(0), + m_cols(NULL), + m_col_names(NULL), + m_n_indexes(0), + m_indexes(NULL), m_missing(true), m_cfp_missing(true) { } @@ -2498,7 +2498,7 @@ row_import_cfg_read_index_fields( dict_field_t* field = index->m_fields; - memset(field, 0x0, sizeof(*field) * n_fields); + std::uninitialized_fill_n(field, n_fields, dict_field_t()); for (ulint i = 0; i < n_fields; ++i, ++field) { byte* ptr = row; @@ -3618,8 +3618,6 @@ row_import_for_mysql( row_import cfg; ulint space_flags = 0; - memset(&cfg, 0x0, sizeof(cfg)); - err = row_import_read_cfg(table, trx->mysql_thd, cfg); /* Check if the table column definitions match the contents diff --git a/storage/innobase/row/row0uins.cc b/storage/innobase/row/row0uins.cc index 4615a4e233b0..5e4f57de6ce6 100644 --- a/storage/innobase/row/row0uins.cc +++ b/storage/innobase/row/row0uins.cc @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1997, 2017, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1997, 2018, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -200,7 +200,6 @@ row_undo_ins_remove_sec_low( ibool modify_leaf = false; log_free_check(); - memset(&pcur, 0, sizeof(pcur)); mtr_start(&mtr); mtr.set_named_space(index->space); diff --git a/storage/myisam/CMakeLists.txt b/storage/myisam/CMakeLists.txt index 9e7bce57e599..43eab56fde5b 100644 --- a/storage/myisam/CMakeLists.txt +++ b/storage/myisam/CMakeLists.txt @@ -27,6 +27,14 @@ SET(MYISAM_SOURCES ft_boolean_search.c ft_nlq_search.c ft_parser.c ft_static.c rt_split.c sort.cc sp_key.c mi_extrafunc.h myisamdef.h rt_index.h mi_rkey.c) +MY_CHECK_CXX_COMPILER_FLAG("-Wcast-function-type" HAVE_CAST_FUNCTION_TYPE) +IF(HAVE_CAST_FUNCTION_TYPE) + ADD_COMPILE_FLAGS( + mi_write.c + myisamlog.c + COMPILE_FLAGS "-Wno-cast-function-type") +ENDIF() + MYSQL_ADD_PLUGIN(myisam ${MYISAM_SOURCES} STORAGE_ENGINE MANDATORY diff --git a/storage/partition/ha_partition.cc b/storage/partition/ha_partition.cc index c0bbc7a7a2af..de8348ff988d 100644 --- a/storage/partition/ha_partition.cc +++ b/storage/partition/ha_partition.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2005, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -1401,7 +1401,6 @@ void ha_partition::update_create_info(HA_CREATE_INFO *create_info) uint num_parts = num_subparts ? m_file_tot_parts / num_subparts : m_file_tot_parts; HA_CREATE_INFO dummy_info; - memset(&dummy_info, 0, sizeof(dummy_info)); /* Since update_create_info() can be called from mysql_prepare_alter_table() diff --git a/unittest/gunit/CMakeLists.txt b/unittest/gunit/CMakeLists.txt index d60bbba57db8..d4840ebba95e 100644 --- a/unittest/gunit/CMakeLists.txt +++ b/unittest/gunit/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2010, 2017, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -191,26 +191,17 @@ SET(GMOCK_INCLUDE_DIRS CACHE INTERNAL "") # Build gmock/gtest libraries. -INCLUDE_DIRECTORIES( +INCLUDE_DIRECTORIES(SYSTEM ${GMOCK_SOURCE_DIR} ${GMOCK_SOURCE_DIR}/include ${GTEST_SOURCE_DIR} ${GTEST_SOURCE_DIR}/include ) -# Turn off some warning flags when compiling GUnit -MY_CHECK_CXX_COMPILER_FLAG("-Wno-unused-local-typedefs" HAVE_NO_UNUSED_TYPEDEFS) -IF(HAVE_NO_UNUSED_TYPEDEFS) - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-local-typedefs") -ENDIF() -MY_CHECK_CXX_COMPILER_FLAG("-Wno-missing-field-initializers" - HAVE_NO_MISSING_FIELD_INITIALIZERS) -IF(HAVE_NO_MISSING_FIELD_INITIALIZERS) - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-missing-field-initializers") -ENDIF() +# Some tests require Boost. +INCLUDE_DIRECTORIES(SYSTEM ${BOOST_PATCHES_DIR} ${BOOST_INCLUDE_DIR}) MY_CHECK_CXX_COMPILER_FLAG("-fno-builtin-memcmp" HAVE_NO_BUILTIN_MEMCMP) -MY_CHECK_CXX_COMPILER_FLAG("-Wempty-body" HAVE_EMPTY_BODY) ADD_LIBRARY(gmock STATIC ${GMOCK_SOURCE_DIR}/src/gmock-all.cc) ADD_LIBRARY(gtest STATIC ${GTEST_SOURCE_DIR}/src/gtest-all.cc) @@ -385,10 +376,6 @@ IF (MERGE_UNITTESTS) COMPILE_FLAGS "-Wno-empty-body" ) ENDIF() - ADD_COMPILE_FLAGS( - ${MERGE_SMALL_TESTS} - COMPILE_FLAGS -I${BOOST_PATCHES_DIR} -I${BOOST_INCLUDE_DIR} - ) # Fixes "C1128: number of sections exceeded object file format limit" in MSVC IF(WIN32) ADD_COMPILE_FLAGS( @@ -467,14 +454,6 @@ ENDIF(MERGE_UNITTESTS) COMPILE_FLAGS "-Wno-empty-body" ) ENDIF() - ADD_COMPILE_FLAGS( - bounded_queue-t.cc - COMPILE_FLAGS -I${BOOST_PATCHES_DIR} -I${BOOST_INCLUDE_DIR} - ) - ADD_COMPILE_FLAGS( - pump_object_filter-t.cc - COMPILE_FLAGS -I${BOOST_PATCHES_DIR} -I${BOOST_INCLUDE_DIR} - ) FOREACH(test ${SERVER_TESTS}) SET(SRC_FILES ${test}-t.cc) diff --git a/unittest/gunit/decimal-t.cc b/unittest/gunit/decimal-t.cc index fb0e5e0a0811..8cb31d924282 100644 --- a/unittest/gunit/decimal-t.cc +++ b/unittest/gunit/decimal-t.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -214,7 +214,7 @@ void do_test_d2f(const char *s, int ex) void do_test_d2b2d(const char *str, int p, int s, const char *orig, int ex) { char s1[100]; - char s2[100]; + char s2[100 * 2]; uchar buf[100]; char *end; int res, i, size=decimal_bin_size(p, s); @@ -247,7 +247,7 @@ void do_test_f2d(double from, int ex) void do_test_ull2d(ulonglong from, const char *orig, int ex) { char s[100]; - char s1[100]; + char s1[100 * 2]; int res; res=ulonglong2decimal(from, &a); @@ -259,7 +259,7 @@ void do_test_ull2d(ulonglong from, const char *orig, int ex) void do_test_ll2d(longlong from, const char *orig, int ex) { char s[100]; - char s1[100]; + char s1[100 * 2]; int res; res=longlong2decimal(from, &a); @@ -271,7 +271,7 @@ void do_test_ll2d(longlong from, const char *orig, int ex) void do_test_d2ull(const char *s, const char *orig, int ex) { char s1[100], *end; - char s2[100]; + char s2[100 * 2]; ulonglong x; int res; @@ -291,7 +291,7 @@ void do_test_d2ull(const char *s, const char *orig, int ex) void do_test_d2ll(const char *s, const char *orig, int ex) { char s1[100], *end; - char s2[100]; + char s2[100 * 2]; longlong x; int res; diff --git a/unittest/gunit/fake_table.h b/unittest/gunit/fake_table.h index 85dd10fe45b9..82559fbba0d5 100644 --- a/unittest/gunit/fake_table.h +++ b/unittest/gunit/fake_table.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -103,8 +103,6 @@ class Fake_TABLE: public TABLE void initialize() { - TABLE *as_table= static_cast(this); - memset(as_table, 0, sizeof(*as_table)); s= &table_share; in_use= current_thd; null_row= '\0'; diff --git a/unittest/gunit/table_cache-t.cc b/unittest/gunit/table_cache-t.cc index 72f2f1936438..5e93c65c7152 100644 --- a/unittest/gunit/table_cache-t.cc +++ b/unittest/gunit/table_cache-t.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -133,7 +133,6 @@ class Mock_share : public TABLE_SHARE public: Mock_share(const char *key) { - memset((TABLE_SHARE *)this, 0, sizeof(TABLE_SHARE)); /* Both table_cache_key and cache_element array are used by Table_cache code. @@ -162,7 +161,7 @@ class Mock_share : public TABLE_SHARE { TABLE *result= (TABLE *)my_malloc(PSI_NOT_INSTRUMENTED, sizeof(TABLE), MYF(0)); - memset(result, 0, sizeof(TABLE)); + ::new(result) TABLE; result->s= this; // We create TABLE which is already marked as used result->in_use= thd; From 1bd290603f894011add6232af51e550bd4ea0671 Mon Sep 17 00:00:00 2001 From: Yura Sorokin Date: Tue, 6 Mar 2018 15:40:59 +0200 Subject: [PATCH 0638/1221] Fixed PS-3824 (pfs-t LeakSanitizer error in test_file_instrumentation_leak) https://jira.percona.com/browse/PS-3824 Fixed memory leak in 'pfs-t' gunit test. --- storage/perfschema/unittest/pfs-t.cc | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/storage/perfschema/unittest/pfs-t.cc b/storage/perfschema/unittest/pfs-t.cc index 920c80bbe9d7..f2aea28e435e 100644 --- a/storage/perfschema/unittest/pfs-t.cc +++ b/storage/perfschema/unittest/pfs-t.cc @@ -1464,6 +1464,20 @@ void test_file_instrumentation_leak() file_locker= psi->get_thread_file_descriptor_locker(&file_state, (File) 12, PSI_FILE_WRITE); ok(file_locker == NULL, "no locker, no leak"); + PFS_file* aaa_file= lookup_file_by_name("AAA"); + ok(aaa_file != NULL, "AAA instrumented"); + /* + Destroying the file here does not free the node allocated when a new + entry was inserted into the filename hash. Instead, the node is put + into the purgatory. + */ + destroy_file(reinterpret_cast(psi->get_thread()), aaa_file); + /* + Deleting current thread is required to call lf_hash_put_pins() for + filename hash which in turn clears the purgatory. + */ + psi->delete_current_thread(); + unload_performance_schema(); } @@ -1666,7 +1680,7 @@ void do_all_tests() int main(int, char **) { - plan(216); + plan(217); MY_INIT("pfs-t"); do_all_tests(); return (exit_status()); From c62a013434186ddcd861a75f14e93784c25eafca Mon Sep 17 00:00:00 2001 From: Christopher Powers Date: Wed, 28 Feb 2018 12:53:59 -0600 Subject: [PATCH 0639/1221] Bug#27231036 HANDLE_FATAL_SIGNAL (SIG=11) IN DIRNAME_LENGTH Disabled the SOURCE columns in the Performance Schema to avoid stale __FILE__ pointers from unloaded plugins. --- .../suite/perfschema/r/csv_table_io.result | 66 ++++---- .../perfschema/r/global_read_lock.result | 2 +- .../suite/perfschema/r/innodb_table_io.result | 66 ++++---- .../suite/perfschema/r/memory_table_io.result | 66 ++++---- .../suite/perfschema/r/merge_table_io.result | 78 ++++----- .../suite/perfschema/r/multi_table_io.result | 38 ++--- .../suite/perfschema/r/myisam_file_io.result | 44 +++--- .../suite/perfschema/r/myisam_table_io.result | 66 ++++---- .../suite/perfschema/r/no_threads.result | 6 +- .../perfschema/r/one_thread_per_con.result | 6 +- .../suite/perfschema/r/part_table_io.result | 64 ++++---- .../perfschema/r/privilege_table_io.result | 46 +++--- .../perfschema/r/rollback_table_io.result | 24 +-- .../suite/perfschema/r/temp_table_io.result | 28 ++-- .../perfschema/r/trigger_table_io.result | 148 +++++++++--------- .../suite/perfschema/r/view_table_io.result | 70 ++++----- storage/perfschema/table_events_stages.cc | 15 +- storage/perfschema/table_events_statements.cc | 15 +- .../perfschema/table_events_transactions.cc | 15 +- storage/perfschema/table_events_waits.cc | 18 +-- storage/perfschema/table_md_locks.cc | 20 +-- 21 files changed, 424 insertions(+), 477 deletions(-) diff --git a/mysql-test/suite/perfschema/r/csv_table_io.result b/mysql-test/suite/perfschema/r/csv_table_io.result index cc8cebd680df..0e50dc249279 100644 --- a/mysql-test/suite/perfschema/r/csv_table_io.result +++ b/mysql-test/suite/perfschema/r/csv_table_io.result @@ -70,39 +70,39 @@ where event_name like 'wait/io/table/%' and object_schema in ("test") order by thread_id, event_id; event_name short_source object_type object_schema pretty_name operation number_of_bytes -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 3 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab update 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab update 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab update 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 2 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab delete 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 2 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 2 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 3 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 1 +wait/io/table/sql/handler TABLE test no_index_tab update 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 1 +wait/io/table/sql/handler TABLE test no_index_tab update 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 1 +wait/io/table/sql/handler TABLE test no_index_tab update 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 2 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 1 +wait/io/table/sql/handler TABLE test no_index_tab delete 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 2 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 2 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 show global status like 'performance_schema_%'; Variable_name Value Performance_schema_accounts_lost 0 diff --git a/mysql-test/suite/perfschema/r/global_read_lock.result b/mysql-test/suite/perfschema/r/global_read_lock.result index b1836f0d961d..f71601d281e9 100644 --- a/mysql-test/suite/perfschema/r/global_read_lock.result +++ b/mysql-test/suite/perfschema/r/global_read_lock.result @@ -35,7 +35,7 @@ operation from performance_schema.events_waits_current where event_name like "wait/synch/cond/sql/MDL_context::COND_wait_status"; event_name short_source timer_end timer_wait operation -wait/synch/cond/sql/MDL_context::COND_wait_status mdl.cc: SET SET timed_wait +wait/synch/cond/sql/MDL_context::COND_wait_status SET SET timed_wait unlock tables; update performance_schema.setup_instruments set enabled='NO'; update performance_schema.setup_instruments set enabled='YES'; diff --git a/mysql-test/suite/perfschema/r/innodb_table_io.result b/mysql-test/suite/perfschema/r/innodb_table_io.result index 2734a4ec79bc..286f0516e62f 100644 --- a/mysql-test/suite/perfschema/r/innodb_table_io.result +++ b/mysql-test/suite/perfschema/r/innodb_table_io.result @@ -71,39 +71,39 @@ where event_name like 'wait/io/table/%' and object_schema in ("test") order by thread_id, event_id; event_name short_source object_type object_schema pretty_name operation number_of_bytes -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 3 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab update 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab update 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab update 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 2 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab delete 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 2 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 2 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 3 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 1 +wait/io/table/sql/handler TABLE test no_index_tab update 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 1 +wait/io/table/sql/handler TABLE test no_index_tab update 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 1 +wait/io/table/sql/handler TABLE test no_index_tab update 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 2 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 1 +wait/io/table/sql/handler TABLE test no_index_tab delete 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 2 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 2 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 show global status like 'performance_schema_%'; Variable_name Value Performance_schema_accounts_lost 0 diff --git a/mysql-test/suite/perfschema/r/memory_table_io.result b/mysql-test/suite/perfschema/r/memory_table_io.result index 687f39fc3081..033c355dfa34 100644 --- a/mysql-test/suite/perfschema/r/memory_table_io.result +++ b/mysql-test/suite/perfschema/r/memory_table_io.result @@ -70,39 +70,39 @@ where event_name like 'wait/io/table/%' and object_schema in ("test") order by thread_id, event_id; event_name short_source object_type object_schema pretty_name operation number_of_bytes -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 3 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab update 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab update 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab update 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 2 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab delete 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 2 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 2 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 3 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 1 +wait/io/table/sql/handler TABLE test no_index_tab update 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 1 +wait/io/table/sql/handler TABLE test no_index_tab update 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 1 +wait/io/table/sql/handler TABLE test no_index_tab update 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 2 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 1 +wait/io/table/sql/handler TABLE test no_index_tab delete 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 2 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 2 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 show global status like 'performance_schema_%'; Variable_name Value Performance_schema_accounts_lost 0 diff --git a/mysql-test/suite/perfschema/r/merge_table_io.result b/mysql-test/suite/perfschema/r/merge_table_io.result index 3fb3b26b3a39..e65cc45dc842 100644 --- a/mysql-test/suite/perfschema/r/merge_table_io.result +++ b/mysql-test/suite/perfschema/r/merge_table_io.result @@ -96,45 +96,45 @@ where event_name like 'wait/io/table/%' and object_schema in ("test") order by thread_id, event_id; event_name short_source object_type object_schema pretty_name operation number_of_bytes -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 3 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab update 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab update 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab update 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 2 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab delete 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 2 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 2 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 3 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 1 +wait/io/table/sql/handler TABLE test no_index_tab update 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 1 +wait/io/table/sql/handler TABLE test no_index_tab update 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 1 +wait/io/table/sql/handler TABLE test no_index_tab update 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 2 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 1 +wait/io/table/sql/handler TABLE test no_index_tab delete 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 2 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 2 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 show global status like 'performance_schema_%'; Variable_name Value Performance_schema_accounts_lost 0 diff --git a/mysql-test/suite/perfschema/r/multi_table_io.result b/mysql-test/suite/perfschema/r/multi_table_io.result index ba9c5ba4ab40..3700d0eb06e1 100644 --- a/mysql-test/suite/perfschema/r/multi_table_io.result +++ b/mysql-test/suite/perfschema/r/multi_table_io.result @@ -52,25 +52,25 @@ where event_name like 'wait/io/table/%' and object_schema in ('test','test1') order by thread_id, event_id; event_name short_source object_type object_schema pretty_name operation number_of_bytes -wait/io/table/sql/handler handler.cc: TABLE test t1 fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test1 t2 insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test t1 fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test1 t2 fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test t1 fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test1 t2 fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test t1 fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test1 t2 fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test t1 update 1 -wait/io/table/sql/handler handler.cc: TABLE test1 t2 fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test1 t2 update 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test t1 fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test1 t2 fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test t1 delete 1 -wait/io/table/sql/handler handler.cc: TABLE test1 t2 delete 1 +wait/io/table/sql/handler TABLE test t1 fetch 1 +wait/io/table/sql/handler TABLE test1 t2 insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test t1 fetch 1 +wait/io/table/sql/handler TABLE test1 t2 fetch 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test t1 fetch 1 +wait/io/table/sql/handler TABLE test1 t2 fetch 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test t1 fetch 1 +wait/io/table/sql/handler TABLE test1 t2 fetch 1 +wait/io/table/sql/handler TABLE test t1 update 1 +wait/io/table/sql/handler TABLE test1 t2 fetch 1 +wait/io/table/sql/handler TABLE test1 t2 update 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test t1 fetch 1 +wait/io/table/sql/handler TABLE test1 t2 fetch 1 +wait/io/table/sql/handler TABLE test t1 delete 1 +wait/io/table/sql/handler TABLE test1 t2 delete 1 show global status like 'performance_schema_%'; Variable_name Value Performance_schema_accounts_lost 0 diff --git a/mysql-test/suite/perfschema/r/myisam_file_io.result b/mysql-test/suite/perfschema/r/myisam_file_io.result index 0fe8710fe281..71876d53af69 100644 --- a/mysql-test/suite/perfschema/r/myisam_file_io.result +++ b/mysql-test/suite/perfschema/r/myisam_file_io.result @@ -20,28 +20,28 @@ where operation not like "tell" and event_name like "wait/io/file/myisam/%" order by thread_id, event_id; event_name short_source operation number_of_bytes short_name -wait/io/file/myisam/kfile mi_create.c: create NULL no_index_tab.MYI -wait/io/file/myisam/dfile mi_create.c: create NULL no_index_tab.MYD -wait/io/file/myisam/kfile mi_open.c: write 176 no_index_tab.MYI -wait/io/file/myisam/kfile mi_open.c: write 100 no_index_tab.MYI -wait/io/file/myisam/kfile mi_open.c: write 7 no_index_tab.MYI -wait/io/file/myisam/kfile mi_open.c: write 7 no_index_tab.MYI -wait/io/file/myisam/kfile mi_open.c: write 7 no_index_tab.MYI -wait/io/file/myisam/kfile mi_create.c: chsize 1024 no_index_tab.MYI -wait/io/file/myisam/dfile mi_create.c: close NULL no_index_tab.MYD -wait/io/file/myisam/kfile mi_create.c: close NULL no_index_tab.MYI -wait/io/file/myisam/kfile mi_open.c: open NULL no_index_tab.MYI -wait/io/file/myisam/kfile mi_open.c: read 24 no_index_tab.MYI -wait/io/file/myisam/kfile mi_open.c: seek NULL no_index_tab.MYI -wait/io/file/myisam/kfile mi_open.c: read 297 no_index_tab.MYI -wait/io/file/myisam/dfile mi_open.c: open NULL no_index_tab.MYD -wait/io/file/myisam/kfile mi_locking.c: write 3 no_index_tab.MYI -wait/io/file/myisam/dfile mi_dynrec.c: write 20 no_index_tab.MYD -wait/io/file/myisam/kfile mi_open.c: write 124 no_index_tab.MYI -wait/io/file/myisam/dfile mi_dynrec.c: write 20 no_index_tab.MYD -wait/io/file/myisam/kfile mi_open.c: write 124 no_index_tab.MYI -wait/io/file/myisam/dfile mi_dynrec.c: write 20 no_index_tab.MYD -wait/io/file/myisam/kfile mi_open.c: write 124 no_index_tab.MYI +wait/io/file/myisam/kfile create NULL no_index_tab.MYI +wait/io/file/myisam/dfile create NULL no_index_tab.MYD +wait/io/file/myisam/kfile write 176 no_index_tab.MYI +wait/io/file/myisam/kfile write 100 no_index_tab.MYI +wait/io/file/myisam/kfile write 7 no_index_tab.MYI +wait/io/file/myisam/kfile write 7 no_index_tab.MYI +wait/io/file/myisam/kfile write 7 no_index_tab.MYI +wait/io/file/myisam/kfile chsize 1024 no_index_tab.MYI +wait/io/file/myisam/dfile close NULL no_index_tab.MYD +wait/io/file/myisam/kfile close NULL no_index_tab.MYI +wait/io/file/myisam/kfile open NULL no_index_tab.MYI +wait/io/file/myisam/kfile read 24 no_index_tab.MYI +wait/io/file/myisam/kfile seek NULL no_index_tab.MYI +wait/io/file/myisam/kfile read 297 no_index_tab.MYI +wait/io/file/myisam/dfile open NULL no_index_tab.MYD +wait/io/file/myisam/kfile write 3 no_index_tab.MYI +wait/io/file/myisam/dfile write 20 no_index_tab.MYD +wait/io/file/myisam/kfile write 124 no_index_tab.MYI +wait/io/file/myisam/dfile write 20 no_index_tab.MYD +wait/io/file/myisam/kfile write 124 no_index_tab.MYI +wait/io/file/myisam/dfile write 20 no_index_tab.MYD +wait/io/file/myisam/kfile write 124 no_index_tab.MYI show global status like 'performance_schema_%'; Variable_name Value Performance_schema_accounts_lost 0 diff --git a/mysql-test/suite/perfschema/r/myisam_table_io.result b/mysql-test/suite/perfschema/r/myisam_table_io.result index 7db74596a07c..9e5d95683edf 100644 --- a/mysql-test/suite/perfschema/r/myisam_table_io.result +++ b/mysql-test/suite/perfschema/r/myisam_table_io.result @@ -70,39 +70,39 @@ where event_name like 'wait/io/table/%' and object_schema in ("test") order by thread_id, event_id; event_name short_source object_type object_schema pretty_name operation number_of_bytes -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 3 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab update 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab update 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab update 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 2 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab delete 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 2 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 2 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 3 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 1 +wait/io/table/sql/handler TABLE test no_index_tab update 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 1 +wait/io/table/sql/handler TABLE test no_index_tab update 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 1 +wait/io/table/sql/handler TABLE test no_index_tab update 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 2 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 1 +wait/io/table/sql/handler TABLE test no_index_tab delete 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 2 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 2 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 show global status like 'performance_schema_%'; Variable_name Value Performance_schema_accounts_lost 0 diff --git a/mysql-test/suite/perfschema/r/no_threads.result b/mysql-test/suite/perfschema/r/no_threads.result index 4631a3c34b2b..21991b159311 100644 --- a/mysql-test/suite/perfschema/r/no_threads.result +++ b/mysql-test/suite/perfschema/r/no_threads.result @@ -32,16 +32,16 @@ select event_name, operation, left(source, locate(":", source)) as short_source from performance_schema.events_waits_current; event_name operation short_source -wait/synch/mutex/mysys/THR_LOCK_myisam lock mi_create.c: +wait/synch/mutex/mysys/THR_LOCK_myisam lock select event_name, operation, left(source, locate(":", source)) as short_source from performance_schema.events_waits_history; event_name operation short_source -wait/synch/mutex/mysys/THR_LOCK_myisam lock mi_create.c: +wait/synch/mutex/mysys/THR_LOCK_myisam lock select event_name, operation, left(source, locate(":", source)) as short_source from performance_schema.events_waits_history_long; event_name operation short_source -wait/synch/mutex/mysys/THR_LOCK_myisam lock mi_create.c: +wait/synch/mutex/mysys/THR_LOCK_myisam lock update performance_schema.setup_instruments set enabled='YES'; drop table test.t1; diff --git a/mysql-test/suite/perfschema/r/one_thread_per_con.result b/mysql-test/suite/perfschema/r/one_thread_per_con.result index d9b97a85d5f7..de8964c036ec 100644 --- a/mysql-test/suite/perfschema/r/one_thread_per_con.result +++ b/mysql-test/suite/perfschema/r/one_thread_per_con.result @@ -16,19 +16,19 @@ create table test.t3(a int) engine=MYISAM; "----------------- Connection default" execute stmt_dump_events using @tid; event_name short_source operation number_of_bytes -wait/synch/mutex/mysys/THR_LOCK_myisam mi_create.c: lock NULL +wait/synch/mutex/mysys/THR_LOCK_myisam lock NULL execute stmt_dump_thread using @tid; name thread/sql/one_connection execute stmt_dump_events using @tid; event_name short_source operation number_of_bytes -wait/synch/mutex/mysys/THR_LOCK_myisam mi_create.c: lock NULL +wait/synch/mutex/mysys/THR_LOCK_myisam lock NULL execute stmt_dump_thread using @tid; name thread/sql/one_connection execute stmt_dump_events using @tid; event_name short_source operation number_of_bytes -wait/synch/mutex/mysys/THR_LOCK_myisam mi_create.c: lock NULL +wait/synch/mutex/mysys/THR_LOCK_myisam lock NULL execute stmt_dump_thread using @tid; name thread/sql/one_connection diff --git a/mysql-test/suite/perfschema/r/part_table_io.result b/mysql-test/suite/perfschema/r/part_table_io.result index eae0ab5e2303..6a528e7928cb 100644 --- a/mysql-test/suite/perfschema/r/part_table_io.result +++ b/mysql-test/suite/perfschema/r/part_table_io.result @@ -82,38 +82,38 @@ where event_name like 'wait/io/table/%' and object_schema in ("test") order by thread_id, event_id; event_name short_source object_type object_schema pretty_name operation number_of_bytes -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 3 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab update 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab update 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab update 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 2 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab delete 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 2 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 2 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 3 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 1 +wait/io/table/sql/handler TABLE test no_index_tab update 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 1 +wait/io/table/sql/handler TABLE test no_index_tab update 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 1 +wait/io/table/sql/handler TABLE test no_index_tab update 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 2 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 1 +wait/io/table/sql/handler TABLE test no_index_tab delete 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 2 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 2 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 show global status like 'performance_schema_%'; Variable_name Value Performance_schema_accounts_lost 0 diff --git a/mysql-test/suite/perfschema/r/privilege_table_io.result b/mysql-test/suite/perfschema/r/privilege_table_io.result index ea6db524b531..f04aef0f1d3b 100644 --- a/mysql-test/suite/perfschema/r/privilege_table_io.result +++ b/mysql-test/suite/perfschema/r/privilege_table_io.result @@ -110,29 +110,29 @@ where event_name like 'wait/io/table/%' and object_schema in ("test", "mysql") order by thread_id, event_id; event_name short_source object_type object_schema pretty_name operation number_of_bytes -wait/io/table/sql/handler handler.cc: TABLE mysql user fetch 1 -wait/io/table/sql/handler handler.cc: TABLE mysql user fetch 1 -wait/io/table/sql/handler handler.cc: TABLE mysql user fetch 1 -wait/io/table/sql/handler handler.cc: TABLE mysql user fetch 1 -wait/io/table/sql/handler handler.cc: TABLE mysql user fetch 1 -wait/io/table/sql/handler handler.cc: TABLE mysql user fetch 1 -wait/io/table/sql/handler handler.cc: TABLE mysql user fetch 1 -wait/io/table/sql/handler handler.cc: TABLE mysql db fetch 1 -wait/io/table/sql/handler handler.cc: TABLE mysql db fetch 1 -wait/io/table/sql/handler handler.cc: TABLE mysql db fetch 1 -wait/io/table/sql/handler handler.cc: TABLE mysql db fetch 1 -wait/io/table/sql/handler handler.cc: TABLE mysql db fetch 1 -wait/io/table/sql/handler handler.cc: TABLE mysql proxies_priv fetch 1 -wait/io/table/sql/handler handler.cc: TABLE mysql proxies_priv fetch 1 -wait/io/table/sql/handler handler.cc: TABLE mysql proxies_priv fetch 1 -wait/io/table/sql/handler handler.cc: TABLE mysql tables_priv fetch 1 -wait/io/table/sql/handler handler.cc: TABLE mysql tables_priv fetch 1 -wait/io/table/sql/handler handler.cc: TABLE mysql tables_priv fetch 1 -wait/io/table/sql/handler handler.cc: TABLE mysql procs_priv fetch 1 -wait/io/table/sql/handler handler.cc: TABLE mysql servers fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 +wait/io/table/sql/handler TABLE mysql user fetch 1 +wait/io/table/sql/handler TABLE mysql user fetch 1 +wait/io/table/sql/handler TABLE mysql user fetch 1 +wait/io/table/sql/handler TABLE mysql user fetch 1 +wait/io/table/sql/handler TABLE mysql user fetch 1 +wait/io/table/sql/handler TABLE mysql user fetch 1 +wait/io/table/sql/handler TABLE mysql user fetch 1 +wait/io/table/sql/handler TABLE mysql db fetch 1 +wait/io/table/sql/handler TABLE mysql db fetch 1 +wait/io/table/sql/handler TABLE mysql db fetch 1 +wait/io/table/sql/handler TABLE mysql db fetch 1 +wait/io/table/sql/handler TABLE mysql db fetch 1 +wait/io/table/sql/handler TABLE mysql proxies_priv fetch 1 +wait/io/table/sql/handler TABLE mysql proxies_priv fetch 1 +wait/io/table/sql/handler TABLE mysql proxies_priv fetch 1 +wait/io/table/sql/handler TABLE mysql tables_priv fetch 1 +wait/io/table/sql/handler TABLE mysql tables_priv fetch 1 +wait/io/table/sql/handler TABLE mysql tables_priv fetch 1 +wait/io/table/sql/handler TABLE mysql procs_priv fetch 1 +wait/io/table/sql/handler TABLE mysql servers fetch 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 show global status like 'performance_schema_%'; Variable_name Value Performance_schema_accounts_lost 0 diff --git a/mysql-test/suite/perfschema/r/rollback_table_io.result b/mysql-test/suite/perfschema/r/rollback_table_io.result index cb70a9be37e5..6ec7dbdcad45 100644 --- a/mysql-test/suite/perfschema/r/rollback_table_io.result +++ b/mysql-test/suite/perfschema/r/rollback_table_io.result @@ -41,18 +41,18 @@ where event_name like 'wait/io/table/%' and object_schema in ('test') order by thread_id, event_id; event_name short_source object_type object_schema pretty_name operation number_of_bytes -wait/io/table/sql/handler handler.cc: TABLE test t1 fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test t1 delete 1 -wait/io/table/sql/handler handler.cc: TABLE test t1 fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test t1 fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test t1 update 1 -wait/io/table/sql/handler handler.cc: TABLE test t1 fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test t1 insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test t1 fetch 1 +wait/io/table/sql/handler TABLE test t1 delete 1 +wait/io/table/sql/handler TABLE test t1 fetch 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test t1 fetch 1 +wait/io/table/sql/handler TABLE test t1 update 1 +wait/io/table/sql/handler TABLE test t1 fetch 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test t1 insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 show global status like 'performance_schema_%'; Variable_name Value Performance_schema_accounts_lost 0 diff --git a/mysql-test/suite/perfschema/r/temp_table_io.result b/mysql-test/suite/perfschema/r/temp_table_io.result index 50ba7e1296b3..a1b16c421086 100644 --- a/mysql-test/suite/perfschema/r/temp_table_io.result +++ b/mysql-test/suite/perfschema/r/temp_table_io.result @@ -70,20 +70,20 @@ where event_name like 'wait/io/table/%' and object_schema in ("test") order by thread_id, event_id; event_name short_source object_type object_schema pretty_name operation number_of_bytes -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 show global status like 'performance_schema_%'; Variable_name Value Performance_schema_accounts_lost 0 diff --git a/mysql-test/suite/perfschema/r/trigger_table_io.result b/mysql-test/suite/perfschema/r/trigger_table_io.result index 70c78cb00c9f..02821a481af4 100644 --- a/mysql-test/suite/perfschema/r/trigger_table_io.result +++ b/mysql-test/suite/perfschema/r/trigger_table_io.result @@ -83,80 +83,80 @@ where event_name like 'wait/io/table/%' and object_schema in ("test") order by thread_id, event_id; event_name short_source object_type object_schema pretty_name operation number_of_bytes -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test t2 insert 1 -wait/io/table/sql/handler handler.cc: TABLE test t1 insert 1 -wait/io/table/sql/handler handler.cc: TABLE test t2 fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test t2 update 1 -wait/io/table/sql/handler handler.cc: TABLE test t2 fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test t2 insert 1 -wait/io/table/sql/handler handler.cc: TABLE test t1 insert 1 -wait/io/table/sql/handler handler.cc: TABLE test t2 fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test t2 fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test t2 update 1 -wait/io/table/sql/handler handler.cc: TABLE test t2 fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test t1 fetch 2 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test t2 fetch 2 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test t1 fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test t2 fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test t2 update 1 -wait/io/table/sql/handler handler.cc: TABLE test t2 fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test t2 fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test t1 update 1 -wait/io/table/sql/handler handler.cc: TABLE test t2 fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test t2 update 1 -wait/io/table/sql/handler handler.cc: TABLE test t2 fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test t2 fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test t1 fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test t2 fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test t2 fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test t2 update 1 -wait/io/table/sql/handler handler.cc: TABLE test t2 fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test t1 update 1 -wait/io/table/sql/handler handler.cc: TABLE test t2 fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test t2 fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test t2 update 1 -wait/io/table/sql/handler handler.cc: TABLE test t2 fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test t1 fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test t1 fetch 2 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test t2 fetch 2 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test t1 fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test t2 fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test t2 delete 1 -wait/io/table/sql/handler handler.cc: TABLE test t2 fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test t2 fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test t1 delete 1 -wait/io/table/sql/handler handler.cc: TABLE test t2 insert 1 -wait/io/table/sql/handler handler.cc: TABLE test t1 fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test t1 fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test t1 fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test t1 fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test t2 fetch 2 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test t1 fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test t1 fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test t2 fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test t2 fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test t2 delete 1 -wait/io/table/sql/handler handler.cc: TABLE test t2 fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test t1 delete 1 -wait/io/table/sql/handler handler.cc: TABLE test t2 insert 1 -wait/io/table/sql/handler handler.cc: TABLE test t1 fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test t1 fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test t1 fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test t1 fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test t2 fetch 2 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test t2 insert 1 +wait/io/table/sql/handler TABLE test t1 insert 1 +wait/io/table/sql/handler TABLE test t2 fetch 1 +wait/io/table/sql/handler TABLE test t2 update 1 +wait/io/table/sql/handler TABLE test t2 fetch 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test t2 insert 1 +wait/io/table/sql/handler TABLE test t1 insert 1 +wait/io/table/sql/handler TABLE test t2 fetch 1 +wait/io/table/sql/handler TABLE test t2 fetch 1 +wait/io/table/sql/handler TABLE test t2 update 1 +wait/io/table/sql/handler TABLE test t2 fetch 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test t1 fetch 2 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test t2 fetch 2 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test t1 fetch 1 +wait/io/table/sql/handler TABLE test t2 fetch 1 +wait/io/table/sql/handler TABLE test t2 update 1 +wait/io/table/sql/handler TABLE test t2 fetch 1 +wait/io/table/sql/handler TABLE test t2 fetch 1 +wait/io/table/sql/handler TABLE test t1 update 1 +wait/io/table/sql/handler TABLE test t2 fetch 1 +wait/io/table/sql/handler TABLE test t2 update 1 +wait/io/table/sql/handler TABLE test t2 fetch 1 +wait/io/table/sql/handler TABLE test t2 fetch 1 +wait/io/table/sql/handler TABLE test t1 fetch 1 +wait/io/table/sql/handler TABLE test t2 fetch 1 +wait/io/table/sql/handler TABLE test t2 fetch 1 +wait/io/table/sql/handler TABLE test t2 update 1 +wait/io/table/sql/handler TABLE test t2 fetch 1 +wait/io/table/sql/handler TABLE test t1 update 1 +wait/io/table/sql/handler TABLE test t2 fetch 1 +wait/io/table/sql/handler TABLE test t2 fetch 1 +wait/io/table/sql/handler TABLE test t2 update 1 +wait/io/table/sql/handler TABLE test t2 fetch 1 +wait/io/table/sql/handler TABLE test t1 fetch 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test t1 fetch 2 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test t2 fetch 2 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test t1 fetch 1 +wait/io/table/sql/handler TABLE test t2 fetch 1 +wait/io/table/sql/handler TABLE test t2 delete 1 +wait/io/table/sql/handler TABLE test t2 fetch 1 +wait/io/table/sql/handler TABLE test t2 fetch 1 +wait/io/table/sql/handler TABLE test t1 delete 1 +wait/io/table/sql/handler TABLE test t2 insert 1 +wait/io/table/sql/handler TABLE test t1 fetch 1 +wait/io/table/sql/handler TABLE test t1 fetch 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test t1 fetch 1 +wait/io/table/sql/handler TABLE test t1 fetch 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test t2 fetch 2 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test t1 fetch 1 +wait/io/table/sql/handler TABLE test t1 fetch 1 +wait/io/table/sql/handler TABLE test t2 fetch 1 +wait/io/table/sql/handler TABLE test t2 fetch 1 +wait/io/table/sql/handler TABLE test t2 delete 1 +wait/io/table/sql/handler TABLE test t2 fetch 1 +wait/io/table/sql/handler TABLE test t1 delete 1 +wait/io/table/sql/handler TABLE test t2 insert 1 +wait/io/table/sql/handler TABLE test t1 fetch 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test t1 fetch 1 +wait/io/table/sql/handler TABLE test t1 fetch 1 +wait/io/table/sql/handler TABLE test t1 fetch 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test t2 fetch 2 show global status like 'performance_schema_%'; Variable_name Value Performance_schema_accounts_lost 0 diff --git a/mysql-test/suite/perfschema/r/view_table_io.result b/mysql-test/suite/perfschema/r/view_table_io.result index ec2f227d0da6..5c13064a3577 100644 --- a/mysql-test/suite/perfschema/r/view_table_io.result +++ b/mysql-test/suite/perfschema/r/view_table_io.result @@ -77,41 +77,41 @@ where event_name like 'wait/io/table/%' and object_schema in ("test") order by thread_id, event_id; event_name short_source object_type object_schema pretty_name operation number_of_bytes -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 3 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab update 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab update 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab update 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 2 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab delete 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 2 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch 2 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 -wait/io/table/sql/handler handler.cc: TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 3 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 1 +wait/io/table/sql/handler TABLE test no_index_tab update 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 1 +wait/io/table/sql/handler TABLE test no_index_tab update 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 1 +wait/io/table/sql/handler TABLE test no_index_tab update 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 2 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 1 +wait/io/table/sql/handler TABLE test no_index_tab delete 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 2 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test no_index_tab fetch 2 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 +wait/io/table/sql/handler TABLE test marker insert 1 show global status like 'performance_schema_%'; Variable_name Value Performance_schema_accounts_lost 0 diff --git a/storage/perfschema/table_events_stages.cc b/storage/perfschema/table_events_stages.cc index aa8b2ca5b844..463891aab6f0 100644 --- a/storage/perfschema/table_events_stages.cc +++ b/storage/perfschema/table_events_stages.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -162,8 +162,6 @@ table_events_stages_common::table_events_stages_common */ void table_events_stages_common::make_row(PFS_events_stages *stage) { - const char *base; - const char *safe_source_file; ulonglong timer_end; m_row_exists= false; @@ -194,15 +192,8 @@ void table_events_stages_common::make_row(PFS_events_stages *stage) m_row.m_name= klass->m_name; m_row.m_name_length= klass->m_name_length; - safe_source_file= stage->m_source_file; - if (unlikely(safe_source_file == NULL)) - return; - - base= base_name(safe_source_file); - m_row.m_source_length= my_snprintf(m_row.m_source, sizeof(m_row.m_source), - "%s:%d", base, stage->m_source_line); - if (m_row.m_source_length > sizeof(m_row.m_source)) - m_row.m_source_length= sizeof(m_row.m_source); + /* Disable source file and line to avoid stale __FILE__ pointers. */ + m_row.m_source_length= 0; if (klass->is_progress()) { diff --git a/storage/perfschema/table_events_statements.cc b/storage/perfschema/table_events_statements.cc index fd78aa55e6d5..6df641da1d87 100644 --- a/storage/perfschema/table_events_statements.cc +++ b/storage/perfschema/table_events_statements.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -310,8 +310,6 @@ table_events_statements_common::table_events_statements_common void table_events_statements_common::make_row_part_1(PFS_events_statements *statement, sql_digest_storage *digest) { - const char *base; - const char *safe_source_file; ulonglong timer_end; m_row_exists= false; @@ -391,15 +389,8 @@ void table_events_statements_common::make_row_part_1(PFS_events_statements *stat if (m_row.m_object_name_length > 0) memcpy(m_row.m_object_name, statement->m_object_name, m_row.m_object_name_length); - safe_source_file= statement->m_source_file; - if (unlikely(safe_source_file == NULL)) - return; - - base= base_name(safe_source_file); - m_row.m_source_length= my_snprintf(m_row.m_source, sizeof(m_row.m_source), - "%s:%d", base, statement->m_source_line); - if (m_row.m_source_length > sizeof(m_row.m_source)) - m_row.m_source_length= sizeof(m_row.m_source); + /* Disable source file and line to avoid stale __FILE__ pointers. */ + m_row.m_source_length= 0; memcpy(m_row.m_message_text, statement->m_message_text, sizeof(m_row.m_message_text)); m_row.m_sql_errno= statement->m_sql_errno; diff --git a/storage/perfschema/table_events_transactions.cc b/storage/perfschema/table_events_transactions.cc index 7c258fc9b88d..0ba5bbc2e501 100644 --- a/storage/perfschema/table_events_transactions.cc +++ b/storage/perfschema/table_events_transactions.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -224,8 +224,6 @@ table_events_transactions_common::table_events_transactions_common */ void table_events_transactions_common::make_row(PFS_events_transactions *transaction) { - const char *base; - const char *safe_source_file; ulonglong timer_end; m_row_exists= false; @@ -255,15 +253,8 @@ void table_events_transactions_common::make_row(PFS_events_transactions *transac m_row.m_name= klass->m_name; m_row.m_name_length= klass->m_name_length; - safe_source_file= transaction->m_source_file; - if (unlikely(safe_source_file == NULL)) - return; - - base= base_name(safe_source_file); - m_row.m_source_length= (uint)my_snprintf(m_row.m_source, sizeof(m_row.m_source), - "%s:%d", base, transaction->m_source_line); - if (m_row.m_source_length > sizeof(m_row.m_source)) - m_row.m_source_length= sizeof(m_row.m_source); + /* Disable source file and line to avoid stale __FILE__ pointers. */ + m_row.m_source_length= 0; /* A GTID consists of the SID (source id) and GNO (transaction number). The SID is stored in transaction->m_sid and the GNO is stored in diff --git a/storage/perfschema/table_events_waits.cc b/storage/perfschema/table_events_waits.cc index c4e3eb90efb1..a6e5c304160f 100644 --- a/storage/perfschema/table_events_waits.cc +++ b/storage/perfschema/table_events_waits.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2008, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -481,8 +481,6 @@ int table_events_waits_common::make_metadata_lock_object_columns(PFS_events_wait void table_events_waits_common::make_row(PFS_events_waits *wait) { PFS_instr_class *safe_class; - const char *base; - const char *safe_source_file; enum_timer_name timer_name= wait_timer; ulonglong timer_end; @@ -585,19 +583,9 @@ void table_events_waits_common::make_row(PFS_events_waits *wait) m_row.m_name= safe_class->m_name; m_row.m_name_length= safe_class->m_name_length; - /* - We are assuming this pointer is sane, - since it comes from __FILE__. - */ - safe_source_file= wait->m_source_file; - if (unlikely(safe_source_file == NULL)) - return; + /* Disable source file and line to avoid stale __FILE__ pointers. */ + m_row.m_source_length= 0; - base= base_name(wait->m_source_file); - m_row.m_source_length= my_snprintf(m_row.m_source, sizeof(m_row.m_source), - "%s:%d", base, wait->m_source_line); - if (m_row.m_source_length > sizeof(m_row.m_source)) - m_row.m_source_length= sizeof(m_row.m_source); m_row.m_operation= wait->m_operation; m_row.m_number_of_bytes= wait->m_number_of_bytes; m_row.m_flags= wait->m_flags; diff --git a/storage/perfschema/table_md_locks.cc b/storage/perfschema/table_md_locks.cc index d0967af732de..2c3502022583 100644 --- a/storage/perfschema/table_md_locks.cc +++ b/storage/perfschema/table_md_locks.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -162,8 +162,6 @@ int table_metadata_locks::rnd_pos(const void *pos) void table_metadata_locks::make_row(PFS_metadata_lock *pfs) { pfs_optimistic_state lock; - const char *base; - const char *safe_source_file; m_row_exists= false; @@ -175,20 +173,8 @@ void table_metadata_locks::make_row(PFS_metadata_lock *pfs) m_row.m_mdl_duration= pfs->m_mdl_duration; m_row.m_mdl_status= pfs->m_mdl_status; - safe_source_file= pfs->m_src_file; - if (safe_source_file != NULL) - { - base= base_name(safe_source_file); - m_row.m_source_length= my_snprintf(m_row.m_source, - sizeof(m_row.m_source), - "%s:%d", base, pfs->m_src_line); - if (m_row.m_source_length > sizeof(m_row.m_source)) - m_row.m_source_length= sizeof(m_row.m_source); - } - else - { - m_row.m_source_length= 0; - } + /* Disable source file and line to avoid stale __FILE__ pointers. */ + m_row.m_source_length= 0; m_row.m_owner_thread_id= static_cast(pfs->m_owner_thread_id); m_row.m_owner_event_id= static_cast(pfs->m_owner_event_id); From ff348c12870f65af85fc53a9aa8c85f52c67da4f Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Mon, 5 Mar 2018 12:19:18 +0530 Subject: [PATCH 0640/1221] From 34d6abebfd8bfdbf23c3f02754bec245d2a63d05 Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Thu, 8 Mar 2018 12:17:08 +0530 Subject: [PATCH 0641/1221] From a091d6b213c0f2783d65d8b3754868f32683b987 Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Tue, 6 Mar 2018 17:08:01 +0100 Subject: [PATCH 0642/1221] Bug#27558169 BACKPORT TO 5.7 BUG #26826272: REMOVE GCC 8 WARNINGS [noclose] MySQL 5.7 should compile warning-free (ie., maintainer mode should work) also with GCC 8. This is a backport of similar patches from current MySQL trunk. This patch silences warnings in 3rd party code, and test plugins. Change-Id: I30aaa6697396028cc83e69e1236cbc8dc835cd21 --- cmd-line-utils/libedit/CMakeLists.txt | 14 ++++- extra/yassl/CMakeLists.txt | 13 +++- mysys/my_gethwaddr.c | 4 +- plugin/innodb_memcached/CMakeLists.txt | 62 ++++++++++++++++++- .../daemon_memcached/daemon/memcached.c | 7 ++- .../daemon_memcached/daemon/thread.c | 3 + .../innodb_memcache/src/hash_item_util.c | 18 ++++++ plugin/keyring/CMakeLists.txt | 4 +- plugin/test_service_sql_api/CMakeLists.txt | 9 ++- regex/CMakeLists.txt | 10 ++- unittest/gunit/keyring/CMakeLists.txt | 4 +- 11 files changed, 135 insertions(+), 13 deletions(-) diff --git a/cmd-line-utils/libedit/CMakeLists.txt b/cmd-line-utils/libedit/CMakeLists.txt index d7884850f2ee..9d8e29fd8d0e 100644 --- a/cmd-line-utils/libedit/CMakeLists.txt +++ b/cmd-line-utils/libedit/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2006, 2013, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 2018, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -18,6 +18,8 @@ INCLUDE(CheckIncludeFile) include(CheckFunctionExists) CHECK_INCLUDE_FILES(term.h HAVE_TERM_H) +INCLUDE(${MYSQL_CMAKE_SCRIPT_DIR}/compile_flags.cmake) + SET(CMAKE_REQUIRED_LIBRARIES ${CURSES_LIBRARY}) CHECK_CXX_SOURCE_COMPILES(" #include @@ -154,6 +156,16 @@ ${CMAKE_CURRENT_BINARY_DIR} ${CURSES_INCLUDE_PATH} ) +MY_CHECK_C_COMPILER_FLAG("-Wstringop-overflow" HAVE_STRINGOP_OVERFLOW) +IF(HAVE_STRINGOP_OVERFLOW) + ADD_COMPILE_FLAGS( + history.c + historyn.c + readline.c + COMPILE_FLAGS -Wno-stringop-overflow + ) +ENDIF() + SET(LIBEDIT_SOURCES chared.c chartype.c diff --git a/extra/yassl/CMakeLists.txt b/extra/yassl/CMakeLists.txt index f0339962404a..d3029d52fb34 100644 --- a/extra/yassl/CMakeLists.txt +++ b/extra/yassl/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2006, 2017, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 2018, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -25,11 +25,20 @@ ADD_DEFINITIONS(${SSL_DEFINES}) ADD_DEFINITIONS(-Dget_tty_password_ext=yassl_mysql_get_tty_password_ext) ADD_DEFINITIONS(-Dget_tty_password=yassl_mysql_get_tty_password) +INCLUDE(${MYSQL_CMAKE_SCRIPT_DIR}/compile_flags.cmake) + +MY_CHECK_CXX_COMPILER_FLAG("-Wstringop-overflow" HAVE_STRINGOP_OVERFLOW) +IF(HAVE_STRINGOP_OVERFLOW) + ADD_COMPILE_FLAGS( + src/ssl.cpp + src/yassl_imp.cpp + COMPILE_FLAGS -Wno-stringop-overflow + ) +ENDIF() MY_CHECK_CXX_COMPILER_FLAG("-Wno-unused-const-variable" HAVE_NO_UNUSED_CONST_VAR) IF(CMAKE_GENERATOR MATCHES "Xcode" AND HAVE_NO_UNUSED_CONST_VAR) - INCLUDE(${MYSQL_CMAKE_SCRIPT_DIR}/compile_flags.cmake) ADD_COMPILE_FLAGS( src/yassl_int.cpp src/socket_wrapper.cpp diff --git a/mysys/my_gethwaddr.c b/mysys/my_gethwaddr.c index 5b48e5b32512..95ea9c33afb9 100644 --- a/mysys/my_gethwaddr.c +++ b/mysys/my_gethwaddr.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2004, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2004, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -109,7 +109,7 @@ my_bool my_gethwaddr(uchar *to) { /* Reset struct, copy interface name */ memset(&ifr, 0, sizeof(ifr)); - strncpy(ifr.ifr_name, ifri->ifr_name, sizeof(ifr.ifr_name)); + memcpy(ifr.ifr_name, ifri->ifr_name, sizeof(ifr.ifr_name)); /* Get HW address, break if not 0 */ if (ioctl(fd, SIOCGIFHWADDR, &ifr) >= 0) diff --git a/plugin/innodb_memcached/CMakeLists.txt b/plugin/innodb_memcached/CMakeLists.txt index 7b3805bc5210..17e838bb269a 100644 --- a/plugin/innodb_memcached/CMakeLists.txt +++ b/plugin/innodb_memcached/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -13,6 +13,66 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA IF(WITH_INNODB_MEMCACHED AND UNIX) + MY_CHECK_C_COMPILER_FLAG("-Wdiscarded-qualifiers" HAVE_DISCARDED_QUALIFIERS) + IF (HAVE_DISCARDED_QUALIFIERS) + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-discarded-qualifiers") + ENDIF() + MY_CHECK_C_COMPILER_FLAG("-Wimplicit-fallthrough" HAVE_IMPLICIT_FALLTHROUGH) + IF (HAVE_IMPLICIT_FALLTHROUGH) + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-implicit-fallthrough") + ENDIF() + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-missing-field-initializers") + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-sign-compare") + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-undef") + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-parameter") + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-variable") + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-vla") + + MY_CHECK_C_COMPILER_FLAG("-Wdeclaration-after-statement" + HAVE_DECLARATION_AFTER_STATEMENT) + IF (HAVE_DECLARATION_AFTER_STATEMENT) + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-declaration-after-statement") + ENDIF() + + MY_CHECK_C_COMPILER_FLAG("-Wduplicate-decl-specifier" + HAVE_DUPLICATE_DECL_SPECIFIER) + IF(HAVE_DUPLICATE_DECL_SPECIFIER) + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-duplicate-decl-specifier") + ENDIF() + + MY_CHECK_C_COMPILER_FLAG("-Wint-conversion" HAVE_INT_CONVERSION) + IF(HAVE_INT_CONVERSION) + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-int-conversion") + ENDIF() + + MY_CHECK_C_COMPILER_FLAG("-Wstringop-overflow" HAVE_STRINGOP_OVERFLOW) + IF(HAVE_STRINGOP_OVERFLOW) + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-stringop-overflow") + ENDIF() + + MY_CHECK_C_COMPILER_FLAG("-Wstringop-truncation" HAVE_STRINGOP_TRUNCATION) + IF(HAVE_STRINGOP_TRUNCATION) + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-stringop-truncation") + ENDIF() + + MY_CHECK_C_COMPILER_FLAG("-Wsuggest-attribute=format" + HAVE_SUGGEST_ATTRIBUTE_FORMAT) + IF(HAVE_SUGGEST_ATTRIBUTE_FORMAT) + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-suggest-attribute=format") + ENDIF() + + MY_CHECK_C_COMPILER_FLAG("-Wunused-but-set-parameter" + HAVE_UNUSED_BUT_SET_PARAMETER) + IF(HAVE_UNUSED_BUT_SET_PARAMETER) + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-but-set-parameter") + ENDIF() + + MY_CHECK_C_COMPILER_FLAG("-Wunused-but-set-variable" + HAVE_UNUSED_BUT_SET_VARIABLE) + IF(HAVE_UNUSED_BUT_SET_VARIABLE) + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-but-set-variable") + ENDIF() + ADD_SUBDIRECTORY(daemon_memcached) ADD_SUBDIRECTORY(innodb_memcache) ENDIF() diff --git a/plugin/innodb_memcached/daemon_memcached/daemon/memcached.c b/plugin/innodb_memcached/daemon_memcached/daemon/memcached.c index 91461e1d8487..da144dbc39b1 100644 --- a/plugin/innodb_memcached/daemon_memcached/daemon/memcached.c +++ b/plugin/innodb_memcached/daemon_memcached/daemon/memcached.c @@ -3583,7 +3583,12 @@ static size_t tokenize_command(char *command, token_t *tokens, const size_t max_ return ntokens; } -static void detokenize(token_t *tokens, int ntokens, char **out, int *nbytes) { +#ifdef INNODB_MEMCACHED +static void detokenize(token_t *tokens, size_t ntokens, char **out, int *nbytes) +#else +static void detokenize(token_t *tokens, int ntokens, char **out, int *nbytes) +#endif +{ int i, nb; char *buf, *p; diff --git a/plugin/innodb_memcached/daemon_memcached/daemon/thread.c b/plugin/innodb_memcached/daemon_memcached/daemon/thread.c index 348d3ac6ea5f..ce870e775928 100644 --- a/plugin/innodb_memcached/daemon_memcached/daemon/thread.c +++ b/plugin/innodb_memcached/daemon_memcached/daemon/thread.c @@ -19,6 +19,9 @@ #define INNODB_MEMCACHED +extern void my_thread_end(); +extern void my_thread_init(); + static char devnull[8192]; extern volatile sig_atomic_t memcached_shutdown; diff --git a/plugin/innodb_memcached/innodb_memcache/src/hash_item_util.c b/plugin/innodb_memcached/innodb_memcache/src/hash_item_util.c index ab936a2b8ad9..59d03a2c5da9 100644 --- a/plugin/innodb_memcached/innodb_memcache/src/hash_item_util.c +++ b/plugin/innodb_memcached/innodb_memcache/src/hash_item_util.c @@ -1,7 +1,25 @@ +/* + Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved. + +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 Street, Suite 500, Boston, MA 02110-1335 USA +*/ + #include "hash_item_util.h" +#include + char * hash_item_get_key(const hash_item* item) { char *ret = (void*)(item + 1); if (item->iflag & ITEM_WITH_CAS) { diff --git a/plugin/keyring/CMakeLists.txt b/plugin/keyring/CMakeLists.txt index 2fa64797ffcc..466958ebb221 100644 --- a/plugin/keyring/CMakeLists.txt +++ b/plugin/keyring/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -15,7 +15,7 @@ INCLUDE(${MYSQL_CMAKE_SCRIPT_DIR}/compile_flags.cmake) -INCLUDE_DIRECTORIES(${BOOST_PATCHES_DIR} ${BOOST_INCLUDE_DIR}) +INCLUDE_DIRECTORIES(SYSTEM ${BOOST_PATCHES_DIR} ${BOOST_INCLUDE_DIR}) INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/common) SET( diff --git a/plugin/test_service_sql_api/CMakeLists.txt b/plugin/test_service_sql_api/CMakeLists.txt index 0dc43f3320b4..22c0f63869e3 100644 --- a/plugin/test_service_sql_api/CMakeLists.txt +++ b/plugin/test_service_sql_api/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -15,6 +15,13 @@ # # Test session API +# Silence warnings in test code for now. +# Bug#27572037 REFACTOR CODE IN TEST_SERVICE_SQL_API +MY_CHECK_CXX_COMPILER_FLAG("-Wstringop-truncation" HAVE_STRINGOP_TRUNCATION) +IF(HAVE_STRINGOP_TRUNCATION) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-stringop-truncation") +ENDIF() + MYSQL_ADD_PLUGIN(test_session_in_thd test_session_in_thd.cc MODULE_ONLY MODULE_OUTPUT_NAME "libtest_session_in_thd") diff --git a/regex/CMakeLists.txt b/regex/CMakeLists.txt index 5cb31037b6f6..b5ffabad135f 100644 --- a/regex/CMakeLists.txt +++ b/regex/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2006, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 2018, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -15,6 +15,14 @@ INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include) +MY_CHECK_C_COMPILER_FLAG("-Wstringop-truncation" HAVE_STRINGOP_TRUNCATION) +IF(HAVE_STRINGOP_TRUNCATION) + ADD_COMPILE_FLAGS( + main.c + COMPILE_FLAGS -Wno-stringop-truncation + ) +ENDIF() + SET(REGEX_SOURCES regcomp.c regerror.c regexec.c regfree.c reginit.c) ADD_CONVENIENCE_LIBRARY(regex ${REGEX_SOURCES}) diff --git a/unittest/gunit/keyring/CMakeLists.txt b/unittest/gunit/keyring/CMakeLists.txt index d2b818552736..9330afc6fda2 100644 --- a/unittest/gunit/keyring/CMakeLists.txt +++ b/unittest/gunit/keyring/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -18,7 +18,7 @@ IF(NOT GMOCK_FOUND) RETURN() ENDIF() -INCLUDE_DIRECTORIES(${BOOST_PATCHES_DIR} ${BOOST_INCLUDE_DIR}) +INCLUDE_DIRECTORIES(SYSTEM ${BOOST_PATCHES_DIR} ${BOOST_INCLUDE_DIR}) INCLUDE_DIRECTORIES( ${GMOCK_INCLUDE_DIRS} From d51c6189a68fba78a9b373a86035f47e1b1dc269 Mon Sep 17 00:00:00 2001 From: Evgeniy Patlan Date: Mon, 5 Mar 2018 11:16:21 +0200 Subject: [PATCH 0643/1221] [BLD-972] fix percona-server.cnf links --- .../debian/percona-server-common-5.7.postinst | 15 +++- .../debian/percona-server-server-5.7.preinst | 2 +- build-ps/percona-server.spec | 70 +++++++++++-------- .../ubuntu/percona-server-common-5.7.postinst | 17 +++-- .../ubuntu/percona-server-server-5.7.postinst | 2 +- .../ubuntu/percona-server-server-5.7.preinst | 2 +- 6 files changed, 70 insertions(+), 38 deletions(-) diff --git a/build-ps/debian/percona-server-common-5.7.postinst b/build-ps/debian/percona-server-common-5.7.postinst index 19d0240711c5..99b483415876 100644 --- a/build-ps/debian/percona-server-common-5.7.postinst +++ b/build-ps/debian/percona-server-common-5.7.postinst @@ -21,15 +21,23 @@ case "$1" in FILE=$(readlink -e /etc/mysql/my.cnf) PKG=$(dpkg -S $FILE | cut -d: -f 1) CONF_EXISTS=0 - if [ "$PKG" = "mysql-common" -o "$PKG" = "mariadb-common" ]; then + if [ "$PKG" = "mysql-common" -o "$PKG" = "mariadb-common" -o "$PKG" = "percona-server-common" ]; then MODIFIED=$(debsums --all $PKG | grep $FILE | awk '{print $2}') if [ $MODIFIED = "OK" ]; then - if [ "$PKG" = "mariadb-common" ]; then + if [ "$PKG" = "mariadb-common" -o "$PKG" = "mysql-common" ]; then for DIR in $(grep 'includedir' $FILE | awk '{print $2}'); do if [ -d $DIR ]; then COUNT=$(ls $DIR | wc -l) if [ $COUNT > 0 ]; then - CONF_EXISTS=1 + for file in $(ls $DIR); do + modified=$(debsums --all $PKG | grep $file | awk '{print $2}') + if [ $MODIFIED = "OK" ]; then + CONF_EXISTS=0 + else + CONF_EXISTS=1 + break + fi + done fi fi done @@ -45,6 +53,7 @@ case "$1" in fi fi if [ ! -f /etc/mysql/my.cnf -o -L /etc/mysql/my.cnf ]; then + rm -rf /etc/mysql/my.cnf update-alternatives --install /etc/mysql/my.cnf my.cnf "/etc/mysql/percona-server.cnf" 200 else print_message diff --git a/build-ps/debian/percona-server-server-5.7.preinst b/build-ps/debian/percona-server-server-5.7.preinst index b61a5bf659ae..f08e77bef91c 100755 --- a/build-ps/debian/percona-server-server-5.7.preinst +++ b/build-ps/debian/percona-server-server-5.7.preinst @@ -99,7 +99,7 @@ case "$1" in # but use the one from system mysql-common package # so we need to disable options that don't work for 5.7 MYSQLCONFIG=/etc/mysql/my.cnf - if [ -f ${MYSQLCONFIG} ]; + if [ -f ${MYSQLCONFIG} -a ! -L ${MYSQLCONFIG} ]; then cp -f ${MYSQLCONFIG} /etc/mysql/my.cnf.old sed -e '/^key_buffer[^_-]/s/^/#/g' -i ${MYSQLCONFIG} diff --git a/build-ps/percona-server.spec b/build-ps/percona-server.spec index 5efb5109f159..59254ca3f260 100644 --- a/build-ps/percona-server.spec +++ b/build-ps/percona-server.spec @@ -192,7 +192,8 @@ Requires: grep Requires: procps Requires: shadow-utils Requires: net-tools -Requires: Percona-Server-shared%{product_suffix} Percona-Server-client%{product_suffix} +Requires(pre): Percona-Server-shared%{product_suffix} +Requires: Percona-Server-client%{product_suffix} Provides: MySQL-server%{?_isa} = %{version}-%{release} Provides: mysql-server = %{version}-%{release} Provides: mysql-server%{?_isa} = %{version}-%{release} @@ -270,7 +271,7 @@ Provides: mysql-libs = %{version}-%{release} Provides: mysql-libs%{?_isa} = %{version}-%{release} Provides: mysql-shared %if 0%{?rhel} > 6 -Requires: Percona-Server-shared-compat%{product_suffix} +Requires(pre): Percona-Server-shared-compat%{product_suffix} %endif %description -n Percona-Server-shared%{product_suffix} @@ -458,9 +459,9 @@ install -D -m 0644 $MBD/%{src_dir}/build-ps/rpm/percona-server.cnf %{buildroot}% install -D -m 0644 $MBD/%{src_dir}/build-ps/rpm/mysqld.cnf %{buildroot}%{_sysconfdir}/percona-server.conf.d/mysqld.cnf install -D -m 0644 $MBD/%{src_dir}/build-ps/rpm/mysqld_safe.cnf %{buildroot}%{_sysconfdir}/percona-server.conf.d/mysqld_safe.cnf -%if 0%{?rhel} > 6 - install -D -m 0644 $MBD/%{src_dir}/build-ps/rpm/percona-server.cnf %{buildroot}%{_sysconfdir}/my.cnf -%endif +#%if 0%{?rhel} > 6 +# install -D -m 0644 $MBD/%{src_dir}/build-ps/rpm/percona-server.cnf %{buildroot}%{_sysconfdir}/my.cnf +#%endif install -d %{buildroot}%{_sysconfdir}/my.cnf.d %if 0%{?systemd} %else @@ -538,33 +539,45 @@ fi /sbin/chkconfig --add mysql fi %endif + +%if 0%{?rhel} > 6 + MYCNF_PACKAGE="mariadb-libs" +%else + MYCNF_PACKAGE="mysql-libs" +%endif + if [ -e /etc/my.cnf ]; then - MYCNF_PACKAGE=$(rpm -qi `rpm -qf /etc/my.cnf` | grep Name | awk '{print $3}') -else - MYCNF_PACKAGE='mariadb-libs' + MYCNF_PACKAGE=$(rpm -qi `rpm -qf /etc/my.cnf` | grep -m 1 Name | awk '{print $3}') fi -if [ "$MYCNF_PACKAGE" == "mariadb-libs" -o "$MYCNF_PACKAGE" == "mysql-libs" ] -then - rm -f /etc/my.cnf +if [ "$MYCNF_PACKAGE" == "mariadb-libs" -o "$MYCNF_PACKAGE" == "mysql-libs" -o "$MYCNF_PACKAGE" == "Percona-Server-server-57" ]; then + MODIFIED=$(rpm -Va "$MYCNF_PACKAGE" | grep '/etc/my.cnf' | awk '{print $1}' | grep -c 5) + if [ "$MODIFIED" == 0 ]; then + mv /etc/my.cnf /etc/my.cnf.old + fi fi -if [ ! -f /etc/my.cnf ] -then +if [ ! -f /etc/my.cnf ]; then + rm -rf /etc/my.cnf update-alternatives --install /etc/my.cnf my.cnf "/etc/percona-server.cnf" 200 else - echo " -------------" - echo " * The suggested mysql options and settings are in /etc/percona-server.conf.d/mysqld.cnf" - echo " * If you want to use mysqld.cnf as default configuration file please make backup of /etc/my.cnf" - echo " * Once it is done please execute the following commands:" - echo " rm -rf /etc/my.cnf" - echo " update-alternatives --install /etc/my.cnf my.cnf \"/etc/percona-server.cnf\" 200" - echo " -------------" - cnflog=$(/usr/bin/my_print_defaults mysqld|grep -c log-error) - if [ $cnflog = 0 -a -f /etc/my.cnf ]; then - sed -i "/^\[mysqld\]$/a log-error=/var/log/mysqld.log" /etc/my.cnf - fi - cnfpid=$(/usr/bin/my_print_defaults mysqld|grep -c pid-file) - if [ $cnfpid = 0 -a -f /etc/my.cnf ]; then - sed -i "/^\[mysqld\]$/a pid-file=/var/run/mysqld/mysqld.pid" /etc/my.cnf + if [ "$MYCNF_PACKAGE" == "Percona-Server-server-57" ]; then + rm -rf /etc/my.cnf + update-alternatives --install /etc/my.cnf my.cnf "/etc/percona-server.cnf" 200 + else + echo " -------------" + echo " * The suggested mysql options and settings are in /etc/percona-server.conf.d/mysqld.cnf" + echo " * If you want to use mysqld.cnf as default configuration file please make backup of /etc/my.cnf" + echo " * Once it is done please execute the following commands:" + echo " rm -rf /etc/my.cnf" + echo " update-alternatives --install /etc/my.cnf my.cnf \"/etc/percona-server.cnf\" 200" + echo " -------------" + cnflog=$(/usr/bin/my_print_defaults mysqld|grep -c log-error) + if [ $cnflog = 0 -a -f /etc/my.cnf -a ! -L /etc/my.cnf ]; then + sed -i "/^\[mysqld\]$/a log-error=/var/log/mysqld.log" /etc/my.cnf + fi + cnfpid=$(/usr/bin/my_print_defaults mysqld|grep -c pid-file) + if [ $cnfpid = 0 -a -f /etc/my.cnf -a ! -L /etc/my.cnf ]; then + sed -i "/^\[mysqld\]$/a pid-file=/var/run/mysqld/mysqld.pid" /etc/my.cnf + fi fi fi echo "Percona Server is distributed with several useful UDF (User Defined Function) from Percona Toolkit." @@ -672,7 +685,8 @@ fi %config(noreplace) %{_sysconfdir}/percona-server.conf.d/mysqld.cnf %config(noreplace) %{_sysconfdir}/percona-server.conf.d/mysqld_safe.cnf %if 0%{?rhel} > 6 -%config(noreplace) %{_sysconfdir}/my.cnf +#%ghost %config(noreplace) %{_sysconfdir}/my.cnf +%ghost %{_sysconfdir}/my.cnf %endif diff --git a/build-ps/ubuntu/percona-server-common-5.7.postinst b/build-ps/ubuntu/percona-server-common-5.7.postinst index 19d0240711c5..7757e92aadc9 100644 --- a/build-ps/ubuntu/percona-server-common-5.7.postinst +++ b/build-ps/ubuntu/percona-server-common-5.7.postinst @@ -21,15 +21,23 @@ case "$1" in FILE=$(readlink -e /etc/mysql/my.cnf) PKG=$(dpkg -S $FILE | cut -d: -f 1) CONF_EXISTS=0 - if [ "$PKG" = "mysql-common" -o "$PKG" = "mariadb-common" ]; then + if [ "$PKG" = "mysql-common" -o "$PKG" = "mariadb-common" -o "$PKG" = "percona-server-common" ]; then MODIFIED=$(debsums --all $PKG | grep $FILE | awk '{print $2}') if [ $MODIFIED = "OK" ]; then - if [ "$PKG" = "mariadb-common" ]; then + if [ "$PKG" = "mariadb-common" -o "$PKG" = "mysql-common" ]; then for DIR in $(grep 'includedir' $FILE | awk '{print $2}'); do if [ -d $DIR ]; then COUNT=$(ls $DIR | wc -l) - if [ $COUNT > 0 ]; then - CONF_EXISTS=1 + if [ $COUNT -gt 0 ]; then + for file in $(ls $DIR); do + modified=$(debsums --all $PKG | grep $file | awk '{print $2}') + if [ $MODIFIED = "OK" ]; then + CONF_EXISTS=0 + else + CONF_EXISTS=1 + break + fi + done fi fi done @@ -45,6 +53,7 @@ case "$1" in fi fi if [ ! -f /etc/mysql/my.cnf -o -L /etc/mysql/my.cnf ]; then + rm -rf /etc/mysql/my.cnf update-alternatives --install /etc/mysql/my.cnf my.cnf "/etc/mysql/percona-server.cnf" 200 else print_message diff --git a/build-ps/ubuntu/percona-server-server-5.7.postinst b/build-ps/ubuntu/percona-server-server-5.7.postinst index 0c737291ebb5..141e0c2b9324 100755 --- a/build-ps/ubuntu/percona-server-server-5.7.postinst +++ b/build-ps/ubuntu/percona-server-server-5.7.postinst @@ -18,7 +18,7 @@ take_upstart_job_backup () { check_exit_status() { errcode=$1 - if [ $errcode > 0 ]; + if [ $errcode -gt 0 ]; then exit $errcode fi diff --git a/build-ps/ubuntu/percona-server-server-5.7.preinst b/build-ps/ubuntu/percona-server-server-5.7.preinst index b61a5bf659ae..f08e77bef91c 100755 --- a/build-ps/ubuntu/percona-server-server-5.7.preinst +++ b/build-ps/ubuntu/percona-server-server-5.7.preinst @@ -99,7 +99,7 @@ case "$1" in # but use the one from system mysql-common package # so we need to disable options that don't work for 5.7 MYSQLCONFIG=/etc/mysql/my.cnf - if [ -f ${MYSQLCONFIG} ]; + if [ -f ${MYSQLCONFIG} -a ! -L ${MYSQLCONFIG} ]; then cp -f ${MYSQLCONFIG} /etc/mysql/my.cnf.old sed -e '/^key_buffer[^_-]/s/^/#/g' -i ${MYSQLCONFIG} From 1db5cc75ab1d3f1dcf7e3f57b5a42d56307e2839 Mon Sep 17 00:00:00 2001 From: Guilhem Bichot Date: Fri, 9 Mar 2018 09:46:43 +0100 Subject: [PATCH 0644/1221] Bug#26402045 MYSQLD CRASHES ON QUERY Patch is specific of 5.7. The root cause is mis-management of Item_field::result_field vs Item_field::field; in 5.7, save_in_field_inner() uses result_field as source; in 8.0 it uses field. result_field has wrong data, leading to server exit; even if fixing server exit is easy (by back-porting the fix for Bug#23183982), then query's result is wrong, and fixing this would require a back-port of the big code refactoring done in 8.0 (for Bug#26188578), which isn't possible in 5.7-GA (too high risk). Solution for 5.7: return error with suggestion of workaround. In 8.0, everything works already. No testcase as it's big. I verified the fix on my machine manually, though. --- sql/item_subselect.cc | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/sql/item_subselect.cc b/sql/item_subselect.cc index fb0929dd7373..35f40a1f0771 100644 --- a/sql/item_subselect.cc +++ b/sql/item_subselect.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2002, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2002, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -3315,7 +3315,16 @@ void subselect_indexsubquery_engine::copy_ref_key(bool *require_scan, - neither can it be outer, because this case is separately managed in subselect_hash_sj_engine::exec(). */ - DBUG_ASSERT(engine_type() != HASH_SJ_ENGINE); + if (engine_type() == HASH_SJ_ENGINE) + { + // See Bug#86975 . In 8.0 there is no problem. + my_printf_error(ER_UNKNOWN_ERROR, + "Error when materializing subquery; " + "please use \"SET OPTIMIZER_SWITCH=" + "'MATERIALIZATION=OFF'\".", MYF(0)); + *convert_error= true; + DBUG_VOID_RETURN; + } const bool *cond_guard= tab->ref().cond_guards[part_no]; From 1416ff5749dbfdb013fd1bd34fed2c6b9bb625e4 Mon Sep 17 00:00:00 2001 From: rik prohaska Date: Tue, 6 Mar 2018 14:23:10 -0700 Subject: [PATCH 0645/1221] TDB-114 : pre-8.0 : Change use of MySQL HASH to unordered_map - Harmless change that changes the container of currently opened TOKUDB_SHARE instances from themysql HASH to std::unordered_map to prep for the coming 8.0 change that alters the API to the HASH in ways we just don't want to deal with. - Part of a larger changeset to prep for 8.0 provided by Rik Prohaska This pull request implements the set of open tables as a std c++ unordered map since Mysql 8 renamed the API to its hash table and I did not want to deal with this ugly API change. The choice of data structure is a compile time option. Copyright (c) 2018, Rik Prohaska All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --- storage/tokudb/ha_tokudb.cc | 56 ++++++++++++--------------------- storage/tokudb/ha_tokudb.h | 9 +----- storage/tokudb/hatoku_defines.h | 3 ++ 3 files changed, 24 insertions(+), 44 deletions(-) diff --git a/storage/tokudb/ha_tokudb.cc b/storage/tokudb/ha_tokudb.cc index 8354a35cb704..b3bb92457656 100644 --- a/storage/tokudb/ha_tokudb.cc +++ b/storage/tokudb/ha_tokudb.cc @@ -34,7 +34,7 @@ Copyright (c) 2006, 2015, Percona and/or its affiliates. All rights reserved. pfs_key_t ha_tokudb_mutex_key; pfs_key_t num_DBs_lock_key; -HASH TOKUDB_SHARE::_open_tables; +std::unordered_map TOKUDB_SHARE::_open_tables; tokudb::thread::mutex_t TOKUDB_SHARE::_open_tables_mutex; static const char* ha_tokudb_exts[] = { @@ -139,30 +139,18 @@ static void free_key_and_col_info (KEY_AND_COL_INFO* kc_info) { } -uchar* TOKUDB_SHARE::hash_get_key( - TOKUDB_SHARE* share, - size_t* length, - TOKUDB_UNUSED(my_bool not_used)) { - - *length = share->_full_table_name.length(); - return (uchar *) share->_full_table_name.c_ptr(); -} -void TOKUDB_SHARE::hash_free_element(TOKUDB_SHARE* share) { - share->destroy(); - delete share; -} void TOKUDB_SHARE::static_init() { - my_hash_init( - &_open_tables, - table_alias_charset, - 32, - 0, - 0, - (my_hash_get_key)hash_get_key, - (my_hash_free_key)hash_free_element, 0); + assert_always(_open_tables.size() == 0); } void TOKUDB_SHARE::static_destroy() { - my_hash_free(&_open_tables); + for (auto it = _open_tables.cbegin(); it != _open_tables.cend(); it++) { + TOKUDB_TRACE("_open_tables %s %p", it->first.c_str(), it->second); + TOKUDB_SHARE* share = it->second; + share->destroy(); + delete share; + } + _open_tables.clear(); + assert_always(_open_tables.size() == 0); } const char* TOKUDB_SHARE::get_state_string(share_state_t state) { static const char* state_string[] = { @@ -217,12 +205,14 @@ TOKUDB_SHARE* TOKUDB_SHARE::get_share(const char* table_name, TABLE_SHARE* table_share, THR_LOCK_DATA* data, bool create_new) { + std::string find_table_name(table_name); mutex_t_lock(_open_tables_mutex); - int error = 0; - uint length = (uint)strlen(table_name); - TOKUDB_SHARE* share = (TOKUDB_SHARE*)my_hash_search( - &_open_tables, (uchar*)table_name, length); - + auto it = _open_tables.find(find_table_name); + TOKUDB_SHARE *share = nullptr; + if (it != _open_tables.end()) { + share = it->second; + assert_always(strcmp(table_name, share->full_table_name()) == 0); + } TOKUDB_TRACE_FOR_FLAGS( TOKUDB_DEBUG_SHARE, "existing share[%s] %s:share[%p]", @@ -240,14 +230,7 @@ TOKUDB_SHARE* TOKUDB_SHARE::get_share(const char* table_name, share->init(table_name); - error = my_hash_insert(&_open_tables, (uchar*)share); - if (error) { - free_key_and_col_info(&share->kc_info); - share->destroy(); - tokudb::memory::free((uchar*)share); - share = NULL; - goto exit; - } + _open_tables.insert({find_table_name, share}); } share->addref(); @@ -268,7 +251,8 @@ void TOKUDB_SHARE::drop_share(TOKUDB_SHARE* share) { share->_use_count); mutex_t_lock(_open_tables_mutex); - my_hash_delete(&_open_tables, (uchar*)share); + size_t n = _open_tables.erase(std::string(share->full_table_name())); + assert_always(n == 1); mutex_t_unlock(_open_tables_mutex); } TOKUDB_SHARE::share_state_t TOKUDB_SHARE::addref() { diff --git a/storage/tokudb/ha_tokudb.h b/storage/tokudb/ha_tokudb.h index 9c6af2550cdf..dd315cd90fca 100644 --- a/storage/tokudb/ha_tokudb.h +++ b/storage/tokudb/ha_tokudb.h @@ -274,16 +274,9 @@ class TOKUDB_SHARE { uint32_t num_DBs; private: - static HASH _open_tables; + static std::unordered_map _open_tables; static tokudb::thread::mutex_t _open_tables_mutex; - static uchar* hash_get_key( - TOKUDB_SHARE* share, - size_t* length, - TOKUDB_UNUSED(my_bool not_used)); - - static void hash_free_element(TOKUDB_SHARE* share); - //********************************* // Spans open-close-open mutable tokudb::thread::mutex_t _mutex; diff --git a/storage/tokudb/hatoku_defines.h b/storage/tokudb/hatoku_defines.h index 05a06ac8142e..2071673ee447 100644 --- a/storage/tokudb/hatoku_defines.h +++ b/storage/tokudb/hatoku_defines.h @@ -60,6 +60,9 @@ Copyright (c) 2006, 2015, Percona and/or its affiliates. All rights reserved. #include "misc.h" #endif +#include +#include + #include "db.h" #include "toku_os.h" #include "toku_time.h" From 4478f2ab27405e0527c490a5d3d623ff97815730 Mon Sep 17 00:00:00 2001 From: Vlad Lesin Date: Tue, 20 Feb 2018 08:23:29 +0300 Subject: [PATCH 0646/1221] TDB-63: UPSERT/NOAR The detailed feature explanation can be found here: https://www.percona.com/blog/2013/02/12/fast-updates-with-tokudb/ The current implementation contains the following changes: - NOAR keyword is removed - Instead of NOAR there are two separate system variables to turn on/off fast update/upsert modes correspondingly: tokudb_enable_fast_update, tokudb_enable_fast_upsert. - tokudb_disable_slow_update and tokudb_disable_slow_upsert system variables are removed. - the python generated tests are rewritten to perl and embedded in mtr tests - fast_update_blobs_fixed_varchar test is joined with fast_update_blobs_varchar - new mtr environment variable MYSQL_CURRENT_TEST_DIR is added, the value of this variable is the direcory path to the currently executed test --- include/my_compiler.h | 12 + mysql-test/mysql-test-run.pl | 1 + .../tokudb/include/fast_update_gen_footer.inc | 2 + .../include/fast_update_gen_footer_silent.inc | 9 + .../tokudb/include/fast_update_gen_header.inc | 6 + .../suite/tokudb/include/fast_update_int.inc | 48 + .../tokudb/include/fast_upsert_gen_header.inc | 6 + .../suite/tokudb/include/fast_upsert_int.inc | 19 + .../include/setup_fast_update_upsert.inc | 8 + .../tokudb/r/fast_update_binlog_mixed.result | 225 +- .../tokudb/r/fast_update_binlog_row.result | 19 +- .../r/fast_update_binlog_statement.result | 222 +- .../suite/tokudb/r/fast_update_blobs.result | 18253 +-------- .../r/fast_update_blobs_fixed_varchar.result | 33026 --------------- .../r/fast_update_blobs_with_varchar.result | 32771 +-------------- .../suite/tokudb/r/fast_update_char.result | 60 +- .../tokudb/r/fast_update_deadlock.result | 19 +- .../tokudb/r/fast_update_decr_floor.result | 314 +- .../r/fast_update_disable_slow_update.result | 7 - .../suite/tokudb/r/fast_update_error.result | 12 +- .../suite/tokudb/r/fast_update_int.result | 562 +- .../tokudb/r/fast_update_int_bounds.result | 52 +- .../suite/tokudb/r/fast_update_key.result | 54 +- .../suite/tokudb/r/fast_update_sqlmode.result | 21 +- .../tokudb/r/fast_update_uint_bounds.result | 36 +- .../suite/tokudb/r/fast_update_varchar.result | 13575 +------ .../suite/tokudb/r/fast_upsert_bin_pad.result | Bin 659 -> 738 bytes .../suite/tokudb/r/fast_upsert_char.result | 24 +- .../tokudb/r/fast_upsert_deadlock.result | 19 +- .../suite/tokudb/r/fast_upsert_int.result | 428 +- .../suite/tokudb/r/fast_upsert_key.result | 43 +- .../suite/tokudb/r/fast_upsert_sqlmode.result | 23 +- .../suite/tokudb/r/fast_upsert_values.result | 18 +- mysql-test/suite/tokudb/t/disabled.def | 24 - .../t/fast_update_binlog_mixed-master.opt | 2 + .../tokudb/t/fast_update_binlog_mixed.test | 15 +- .../t/fast_update_binlog_row-master.opt | 2 + .../tokudb/t/fast_update_binlog_row.test | 19 +- .../t/fast_update_binlog_statement-master.opt | 2 + .../t/fast_update_binlog_statement.test | 15 +- .../suite/tokudb/t/fast_update_blobs.py | 57 - .../suite/tokudb/t/fast_update_blobs.test | 18575 +-------- .../t/fast_update_blobs_fixed_varchar.py | 63 - .../t/fast_update_blobs_fixed_varchar.test | 33287 ---------------- .../t/fast_update_blobs_with_varchar.py | 62 - .../t/fast_update_blobs_with_varchar.test | 33115 +-------------- .../suite/tokudb/t/fast_update_char.test | 66 +- .../suite/tokudb/t/fast_update_deadlock.test | 21 +- .../suite/tokudb/t/fast_update_decr_floor.py | 58 - .../tokudb/t/fast_update_decr_floor.test | 409 +- .../t/fast_update_disable_slow_update.test | 17 - .../suite/tokudb/t/fast_update_error.test | 16 +- mysql-test/suite/tokudb/t/fast_update_int.py | 77 - .../suite/tokudb/t/fast_update_int.test | 682 +- .../tokudb/t/fast_update_int_bounds.test | 55 +- .../suite/tokudb/t/fast_update_key.test | 63 +- .../suite/tokudb/t/fast_update_sqlmode.test | 25 +- .../tokudb/t/fast_update_uint_bounds.test | 42 +- .../suite/tokudb/t/fast_update_varchar.py | 63 - .../suite/tokudb/t/fast_update_varchar.test | 7390 +--- .../suite/tokudb/t/fast_upsert_bin_pad.test | 19 +- .../suite/tokudb/t/fast_upsert_char.test | 27 +- .../suite/tokudb/t/fast_upsert_deadlock.test | 22 +- mysql-test/suite/tokudb/t/fast_upsert_int.py | 50 - .../suite/tokudb/t/fast_upsert_int.test | 486 +- .../suite/tokudb/t/fast_upsert_key.test | 46 +- .../suite/tokudb/t/fast_upsert_sqlmode.test | 27 +- .../suite/tokudb/t/fast_upsert_values.test | 21 +- sql/handler.cc | 27 + sql/handler.h | 64 + sql/item.h | 1 + sql/sql_insert.cc | 8 +- sql/sql_update.cc | 7 + storage/tokudb/ha_tokudb.h | 29 +- storage/tokudb/ha_tokudb_update.cc | 77 +- storage/tokudb/hatoku_defines.h | 1 + storage/tokudb/tokudb_sysvars.cc | 22 +- storage/tokudb/tokudb_sysvars.h | 4 +- 78 files changed, 1616 insertions(+), 193438 deletions(-) create mode 100644 mysql-test/suite/tokudb/include/fast_update_gen_footer.inc create mode 100644 mysql-test/suite/tokudb/include/fast_update_gen_footer_silent.inc create mode 100644 mysql-test/suite/tokudb/include/fast_update_gen_header.inc create mode 100644 mysql-test/suite/tokudb/include/fast_update_int.inc create mode 100644 mysql-test/suite/tokudb/include/fast_upsert_gen_header.inc create mode 100644 mysql-test/suite/tokudb/include/fast_upsert_int.inc create mode 100644 mysql-test/suite/tokudb/include/setup_fast_update_upsert.inc delete mode 100644 mysql-test/suite/tokudb/r/fast_update_blobs_fixed_varchar.result delete mode 100644 mysql-test/suite/tokudb/r/fast_update_disable_slow_update.result create mode 100644 mysql-test/suite/tokudb/t/fast_update_binlog_mixed-master.opt create mode 100644 mysql-test/suite/tokudb/t/fast_update_binlog_row-master.opt create mode 100644 mysql-test/suite/tokudb/t/fast_update_binlog_statement-master.opt delete mode 100644 mysql-test/suite/tokudb/t/fast_update_blobs.py delete mode 100644 mysql-test/suite/tokudb/t/fast_update_blobs_fixed_varchar.py delete mode 100644 mysql-test/suite/tokudb/t/fast_update_blobs_fixed_varchar.test delete mode 100644 mysql-test/suite/tokudb/t/fast_update_blobs_with_varchar.py delete mode 100644 mysql-test/suite/tokudb/t/fast_update_decr_floor.py delete mode 100644 mysql-test/suite/tokudb/t/fast_update_disable_slow_update.test delete mode 100644 mysql-test/suite/tokudb/t/fast_update_int.py delete mode 100644 mysql-test/suite/tokudb/t/fast_update_varchar.py delete mode 100644 mysql-test/suite/tokudb/t/fast_upsert_int.py diff --git a/include/my_compiler.h b/include/my_compiler.h index 000d4e42848d..2c370252625b 100644 --- a/include/my_compiler.h +++ b/include/my_compiler.h @@ -138,6 +138,14 @@ struct my_aligned_storage }; }; +#if __cpp_attributes && defined(__has_cpp_attribute) +#if __has_cpp_attribute(nodiscard) +#define MY_NODISCARD [[nodiscard]] +#elif __has_cpp_attribute(gnu::warn_unused_result) +#define MY_NODISCARD [[gnu::warn_unused_result]] +#endif /* __has_cpp_attribute(gnu::warn_unused_result) */ +#endif /* __cpp_attributes && defined(__has_cpp_attribute) */ + #endif /* __cplusplus */ # ifndef MY_ALIGNED @@ -150,4 +158,8 @@ struct my_aligned_storage #include +#ifndef MY_NODISCARD +#define MY_NODISCARD MY_ATTRIBUTE((warn_unused_result)) +#endif /* MY_NODISCARD */ + #endif /* MY_COMPILER_INCLUDED */ diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index be0f4221db66..5b2d45dfc16a 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -3827,6 +3827,7 @@ ($) { my $tinfo= shift; + $ENV{'MYSQL_CURRENT_TEST_DIR'} = dirname($tinfo->{'path'}); # Remove old files produced by mysqltest my $base_file= mtr_match_extension($tinfo->{result_file}, "result"); # Trim extension diff --git a/mysql-test/suite/tokudb/include/fast_update_gen_footer.inc b/mysql-test/suite/tokudb/include/fast_update_gen_footer.inc new file mode 100644 index 000000000000..6c7bc8aadda3 --- /dev/null +++ b/mysql-test/suite/tokudb/include/fast_update_gen_footer.inc @@ -0,0 +1,2 @@ +--source $GENERATED +--remove_file $GENERATED diff --git a/mysql-test/suite/tokudb/include/fast_update_gen_footer_silent.inc b/mysql-test/suite/tokudb/include/fast_update_gen_footer_silent.inc new file mode 100644 index 000000000000..0a5314dd8e34 --- /dev/null +++ b/mysql-test/suite/tokudb/include/fast_update_gen_footer_silent.inc @@ -0,0 +1,9 @@ +--echo This test does not produce any output on success +--disable_query_log +--disable_result_log +--let $old_include_silent= $include_silent +--let $include_silent= 1 +--source fast_update_gen_footer.inc +--let $include_silent= $old_include_silent +--enable_query_log +--enable_result_log diff --git a/mysql-test/suite/tokudb/include/fast_update_gen_header.inc b/mysql-test/suite/tokudb/include/fast_update_gen_header.inc new file mode 100644 index 000000000000..820385593c7c --- /dev/null +++ b/mysql-test/suite/tokudb/include/fast_update_gen_header.inc @@ -0,0 +1,6 @@ +--source include/have_tokudb.inc +--source include/have_innodb.inc +--disable_query_log +set tokudb_enable_fast_update=1; +--source setup_fast_update_upsert.inc +--enable_query_log diff --git a/mysql-test/suite/tokudb/include/fast_update_int.inc b/mysql-test/suite/tokudb/include/fast_update_int.inc new file mode 100644 index 000000000000..645a02a2a2bb --- /dev/null +++ b/mysql-test/suite/tokudb/include/fast_update_int.inc @@ -0,0 +1,48 @@ +insert into t values (1,0), (2,0), (3,0); +select * from t; + +# set is fast +update t set x = 100 where id = 2; +select * from t; + +# increment is fast +update t set x = x + 1 where id = 3; +select * from t; + +# decrement is fast +update t set x = x - 1 where id = 3; +select * from t; + +# field=field+constant is fast +update t set x = x + 100 where id = 3; +select * from t; + +# field=field-constant is fast +update t set x = x - 100 where id = 3; +select * from t; + +# field=constant+field is not yet fast +--replace_regex /MariaDB/XYZ/ /MySQL/XYZ/ +--error ER_UNSUPPORTED_EXTENSION +update t set x = 1 + x where id = 1; + +# field=-field is not yet fast +--replace_regex /MariaDB/XYZ/ /MySQL/XYZ/ +--error ER_UNSUPPORTED_EXTENSION +update t set x = -x where id = 1; + +# yes, we can update a field in a non-existent row and the row is not inserted +update t set x = x + 1 where id = 100; +select * from t; + +# range updates are not yet fast +--replace_regex /MariaDB/XYZ/ /MySQL/XYZ/ +--error ER_UNSUPPORTED_EXTENSION +update t set x = x + 1 where 1 <= id and id < 100; + +# full table updates are not yet fast +--replace_regex /MariaDB/XYZ/ /MySQL/XYZ/ +--error ER_UNSUPPORTED_EXTENSION +update t set x = x + 1; + +drop table t; diff --git a/mysql-test/suite/tokudb/include/fast_upsert_gen_header.inc b/mysql-test/suite/tokudb/include/fast_upsert_gen_header.inc new file mode 100644 index 000000000000..26b19c66efa5 --- /dev/null +++ b/mysql-test/suite/tokudb/include/fast_upsert_gen_header.inc @@ -0,0 +1,6 @@ +--source include/have_tokudb.inc +--source include/have_innodb.inc +--disable_query_log +set tokudb_enable_fast_upsert=1; +--source setup_fast_update_upsert.inc +--enable_query_log diff --git a/mysql-test/suite/tokudb/include/fast_upsert_int.inc b/mysql-test/suite/tokudb/include/fast_upsert_int.inc new file mode 100644 index 000000000000..45c206e496a2 --- /dev/null +++ b/mysql-test/suite/tokudb/include/fast_upsert_int.inc @@ -0,0 +1,19 @@ +insert into tt (id) values (1),(2),(3) on duplicate key update x = 0; +insert into tt (id) values (1) on duplicate key update y = 0, z = 42; +insert into tt (id) values (1) on duplicate key update y = y + 1, z = z + 50; +insert into tt (id) values (1) on duplicate key update y = y - 1; +insert into tt (id) values (1) on duplicate key update z = z - 50; + +create table ti like tt; +alter table ti engine=innodb; +insert into ti (id) values (1),(2),(3) on duplicate key update x = 0; +insert into ti (id) values (1) on duplicate key update y = 0, z = 42; +insert into ti (id) values (1) on duplicate key update y = y + 1, z = z + 50; +insert into ti (id) values (1) on duplicate key update y = y - 1; +insert into ti (id) values (1) on duplicate key update z = z - 50; + +let $diff_tables = test.tt, test.ti; +source include/diff_tables.inc; + +drop table tt, ti; + diff --git a/mysql-test/suite/tokudb/include/setup_fast_update_upsert.inc b/mysql-test/suite/tokudb/include/setup_fast_update_upsert.inc new file mode 100644 index 000000000000..7d1c53b9faf0 --- /dev/null +++ b/mysql-test/suite/tokudb/include/setup_fast_update_upsert.inc @@ -0,0 +1,8 @@ +# It's supposed that for strict mode some additional checks must be provided, +# what can lead to necessity to read some data from storage, +# while the general optimization for fast update and upsert is that +# there are no read operations during insert/update execution. +# That is why strict mode must be turned off for fast update/upsert testing. + +set session sql_mode=(select replace(@@sql_mode,'STRICT_TRANS_TABLES','')); +set session sql_mode=(select replace(@@sql_mode,'STRICT_ALL_TABLES','')); diff --git a/mysql-test/suite/tokudb/r/fast_update_binlog_mixed.result b/mysql-test/suite/tokudb/r/fast_update_binlog_mixed.result index 28fc4ebccf40..7d974affb9d0 100644 --- a/mysql-test/suite/tokudb/r/fast_update_binlog_mixed.result +++ b/mysql-test/suite/tokudb/r/fast_update_binlog_mixed.result @@ -1,20 +1,15 @@ include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. [connection master] -set default_storage_engine='tokudb'; -create table tt (id int primary key, x int); -set session tokudb_disable_slow_upsert=1; -show variables like 'binlog_format'; -Variable_name Value -binlog_format MIXED -show variables like 'server_id'; -Variable_name Value -server_id 1 -show variables like 'binlog_format'; -Variable_name Value -binlog_format MIXED -show variables like 'server_id'; -Variable_name Value -server_id 2 +create table tt (id int primary key, x int) engine = tokudb; +set session sql_mode=(select replace(@@sql_mode,'STRICT_TRANS_TABLES','')); +set session sql_mode=(select replace(@@sql_mode,'STRICT_ALL_TABLES','')); +set session tokudb_enable_fast_update=1; +set session sql_mode=(select replace(@@sql_mode,'STRICT_TRANS_TABLES','')); +set session sql_mode=(select replace(@@sql_mode,'STRICT_ALL_TABLES','')); +set session tokudb_enable_fast_update=1; insert into tt values (0,0) on duplicate key update x=x+1; insert into tt values (1,0) on duplicate key update x=x+1; insert into tt values (2,0) on duplicate key update x=x+1; @@ -215,106 +210,106 @@ insert into tt values (96,0) on duplicate key update x=x+1; insert into tt values (97,0) on duplicate key update x=x+1; insert into tt values (98,0) on duplicate key update x=x+1; insert into tt values (99,0) on duplicate key update x=x+1; -update noar tt set x=x+1 where id=0; -update noar tt set x=x+1 where id=1; -update noar tt set x=x+1 where id=2; -update noar tt set x=x+1 where id=3; -update noar tt set x=x+1 where id=4; -update noar tt set x=x+1 where id=5; -update noar tt set x=x+1 where id=6; -update noar tt set x=x+1 where id=7; -update noar tt set x=x+1 where id=8; -update noar tt set x=x+1 where id=9; -update noar tt set x=x+1 where id=10; -update noar tt set x=x+1 where id=11; -update noar tt set x=x+1 where id=12; -update noar tt set x=x+1 where id=13; -update noar tt set x=x+1 where id=14; -update noar tt set x=x+1 where id=15; -update noar tt set x=x+1 where id=16; -update noar tt set x=x+1 where id=17; -update noar tt set x=x+1 where id=18; -update noar tt set x=x+1 where id=19; -update noar tt set x=x+1 where id=20; -update noar tt set x=x+1 where id=21; -update noar tt set x=x+1 where id=22; -update noar tt set x=x+1 where id=23; -update noar tt set x=x+1 where id=24; -update noar tt set x=x+1 where id=25; -update noar tt set x=x+1 where id=26; -update noar tt set x=x+1 where id=27; -update noar tt set x=x+1 where id=28; -update noar tt set x=x+1 where id=29; -update noar tt set x=x+1 where id=30; -update noar tt set x=x+1 where id=31; -update noar tt set x=x+1 where id=32; -update noar tt set x=x+1 where id=33; -update noar tt set x=x+1 where id=34; -update noar tt set x=x+1 where id=35; -update noar tt set x=x+1 where id=36; -update noar tt set x=x+1 where id=37; -update noar tt set x=x+1 where id=38; -update noar tt set x=x+1 where id=39; -update noar tt set x=x+1 where id=40; -update noar tt set x=x+1 where id=41; -update noar tt set x=x+1 where id=42; -update noar tt set x=x+1 where id=43; -update noar tt set x=x+1 where id=44; -update noar tt set x=x+1 where id=45; -update noar tt set x=x+1 where id=46; -update noar tt set x=x+1 where id=47; -update noar tt set x=x+1 where id=48; -update noar tt set x=x+1 where id=49; -update noar tt set x=x+1 where id=50; -update noar tt set x=x+1 where id=51; -update noar tt set x=x+1 where id=52; -update noar tt set x=x+1 where id=53; -update noar tt set x=x+1 where id=54; -update noar tt set x=x+1 where id=55; -update noar tt set x=x+1 where id=56; -update noar tt set x=x+1 where id=57; -update noar tt set x=x+1 where id=58; -update noar tt set x=x+1 where id=59; -update noar tt set x=x+1 where id=60; -update noar tt set x=x+1 where id=61; -update noar tt set x=x+1 where id=62; -update noar tt set x=x+1 where id=63; -update noar tt set x=x+1 where id=64; -update noar tt set x=x+1 where id=65; -update noar tt set x=x+1 where id=66; -update noar tt set x=x+1 where id=67; -update noar tt set x=x+1 where id=68; -update noar tt set x=x+1 where id=69; -update noar tt set x=x+1 where id=70; -update noar tt set x=x+1 where id=71; -update noar tt set x=x+1 where id=72; -update noar tt set x=x+1 where id=73; -update noar tt set x=x+1 where id=74; -update noar tt set x=x+1 where id=75; -update noar tt set x=x+1 where id=76; -update noar tt set x=x+1 where id=77; -update noar tt set x=x+1 where id=78; -update noar tt set x=x+1 where id=79; -update noar tt set x=x+1 where id=80; -update noar tt set x=x+1 where id=81; -update noar tt set x=x+1 where id=82; -update noar tt set x=x+1 where id=83; -update noar tt set x=x+1 where id=84; -update noar tt set x=x+1 where id=85; -update noar tt set x=x+1 where id=86; -update noar tt set x=x+1 where id=87; -update noar tt set x=x+1 where id=88; -update noar tt set x=x+1 where id=89; -update noar tt set x=x+1 where id=90; -update noar tt set x=x+1 where id=91; -update noar tt set x=x+1 where id=92; -update noar tt set x=x+1 where id=93; -update noar tt set x=x+1 where id=94; -update noar tt set x=x+1 where id=95; -update noar tt set x=x+1 where id=96; -update noar tt set x=x+1 where id=97; -update noar tt set x=x+1 where id=98; -update noar tt set x=x+1 where id=99; +update tt set x=x+1 where id=0; +update tt set x=x+1 where id=1; +update tt set x=x+1 where id=2; +update tt set x=x+1 where id=3; +update tt set x=x+1 where id=4; +update tt set x=x+1 where id=5; +update tt set x=x+1 where id=6; +update tt set x=x+1 where id=7; +update tt set x=x+1 where id=8; +update tt set x=x+1 where id=9; +update tt set x=x+1 where id=10; +update tt set x=x+1 where id=11; +update tt set x=x+1 where id=12; +update tt set x=x+1 where id=13; +update tt set x=x+1 where id=14; +update tt set x=x+1 where id=15; +update tt set x=x+1 where id=16; +update tt set x=x+1 where id=17; +update tt set x=x+1 where id=18; +update tt set x=x+1 where id=19; +update tt set x=x+1 where id=20; +update tt set x=x+1 where id=21; +update tt set x=x+1 where id=22; +update tt set x=x+1 where id=23; +update tt set x=x+1 where id=24; +update tt set x=x+1 where id=25; +update tt set x=x+1 where id=26; +update tt set x=x+1 where id=27; +update tt set x=x+1 where id=28; +update tt set x=x+1 where id=29; +update tt set x=x+1 where id=30; +update tt set x=x+1 where id=31; +update tt set x=x+1 where id=32; +update tt set x=x+1 where id=33; +update tt set x=x+1 where id=34; +update tt set x=x+1 where id=35; +update tt set x=x+1 where id=36; +update tt set x=x+1 where id=37; +update tt set x=x+1 where id=38; +update tt set x=x+1 where id=39; +update tt set x=x+1 where id=40; +update tt set x=x+1 where id=41; +update tt set x=x+1 where id=42; +update tt set x=x+1 where id=43; +update tt set x=x+1 where id=44; +update tt set x=x+1 where id=45; +update tt set x=x+1 where id=46; +update tt set x=x+1 where id=47; +update tt set x=x+1 where id=48; +update tt set x=x+1 where id=49; +update tt set x=x+1 where id=50; +update tt set x=x+1 where id=51; +update tt set x=x+1 where id=52; +update tt set x=x+1 where id=53; +update tt set x=x+1 where id=54; +update tt set x=x+1 where id=55; +update tt set x=x+1 where id=56; +update tt set x=x+1 where id=57; +update tt set x=x+1 where id=58; +update tt set x=x+1 where id=59; +update tt set x=x+1 where id=60; +update tt set x=x+1 where id=61; +update tt set x=x+1 where id=62; +update tt set x=x+1 where id=63; +update tt set x=x+1 where id=64; +update tt set x=x+1 where id=65; +update tt set x=x+1 where id=66; +update tt set x=x+1 where id=67; +update tt set x=x+1 where id=68; +update tt set x=x+1 where id=69; +update tt set x=x+1 where id=70; +update tt set x=x+1 where id=71; +update tt set x=x+1 where id=72; +update tt set x=x+1 where id=73; +update tt set x=x+1 where id=74; +update tt set x=x+1 where id=75; +update tt set x=x+1 where id=76; +update tt set x=x+1 where id=77; +update tt set x=x+1 where id=78; +update tt set x=x+1 where id=79; +update tt set x=x+1 where id=80; +update tt set x=x+1 where id=81; +update tt set x=x+1 where id=82; +update tt set x=x+1 where id=83; +update tt set x=x+1 where id=84; +update tt set x=x+1 where id=85; +update tt set x=x+1 where id=86; +update tt set x=x+1 where id=87; +update tt set x=x+1 where id=88; +update tt set x=x+1 where id=89; +update tt set x=x+1 where id=90; +update tt set x=x+1 where id=91; +update tt set x=x+1 where id=92; +update tt set x=x+1 where id=93; +update tt set x=x+1 where id=94; +update tt set x=x+1 where id=95; +update tt set x=x+1 where id=96; +update tt set x=x+1 where id=97; +update tt set x=x+1 where id=98; +update tt set x=x+1 where id=99; select * from tt where x != 2; id x include/diff_tables.inc [master:test.tt, slave:test.tt] diff --git a/mysql-test/suite/tokudb/r/fast_update_binlog_row.result b/mysql-test/suite/tokudb/r/fast_update_binlog_row.result index a2185b0705f4..e48cfc01292f 100644 --- a/mysql-test/suite/tokudb/r/fast_update_binlog_row.result +++ b/mysql-test/suite/tokudb/r/fast_update_binlog_row.result @@ -1,14 +1,15 @@ -set default_storage_engine='tokudb'; -create table tt (id int primary key, x int); -set session tokudb_disable_slow_upsert=1; -insert noar into tt values (1,0); -insert noar into tt values (1,0) on duplicate key update x=x+1; +create table tt (id int primary key, x int) engine = tokudb; +set session sql_mode=(select replace(@@sql_mode,'STRICT_TRANS_TABLES','')); +set session sql_mode=(select replace(@@sql_mode,'STRICT_ALL_TABLES','')); +set session tokudb_enable_fast_update=1; +set session tokudb_enable_fast_upsert=1; +insert into tt values (1,0); +insert into tt values (1,0) on duplicate key update x=x+1; ERROR 42000: Table 'tt' uses an extension that doesn't exist in this XYZ version -insert noar into tt values (2,0) on duplicate key update x=x+1; +insert into tt values (2,0) on duplicate key update x=x+1; ERROR 42000: Table 'tt' uses an extension that doesn't exist in this XYZ version -set session tokudb_disable_slow_update=1; -update noar tt set x=x+1 where id=1; +update tt set x=x+1 where id=1; ERROR 42000: Table 'tt' uses an extension that doesn't exist in this XYZ version -update noar tt set x=x+1 where id=2; +update tt set x=x+1 where id=2; ERROR 42000: Table 'tt' uses an extension that doesn't exist in this XYZ version drop table tt; diff --git a/mysql-test/suite/tokudb/r/fast_update_binlog_statement.result b/mysql-test/suite/tokudb/r/fast_update_binlog_statement.result index b21d58d2754a..7d974affb9d0 100644 --- a/mysql-test/suite/tokudb/r/fast_update_binlog_statement.result +++ b/mysql-test/suite/tokudb/r/fast_update_binlog_statement.result @@ -3,21 +3,13 @@ Warnings: Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. [connection master] -set default_storage_engine='tokudb'; -create table tt (id int primary key, x int); -set session tokudb_disable_slow_upsert=1; -show variables like 'binlog_format'; -Variable_name Value -binlog_format STATEMENT -show variables like 'server_id'; -Variable_name Value -server_id 1 -show variables like 'binlog_format'; -Variable_name Value -binlog_format STATEMENT -show variables like 'server_id'; -Variable_name Value -server_id 2 +create table tt (id int primary key, x int) engine = tokudb; +set session sql_mode=(select replace(@@sql_mode,'STRICT_TRANS_TABLES','')); +set session sql_mode=(select replace(@@sql_mode,'STRICT_ALL_TABLES','')); +set session tokudb_enable_fast_update=1; +set session sql_mode=(select replace(@@sql_mode,'STRICT_TRANS_TABLES','')); +set session sql_mode=(select replace(@@sql_mode,'STRICT_ALL_TABLES','')); +set session tokudb_enable_fast_update=1; insert into tt values (0,0) on duplicate key update x=x+1; insert into tt values (1,0) on duplicate key update x=x+1; insert into tt values (2,0) on duplicate key update x=x+1; @@ -218,106 +210,106 @@ insert into tt values (96,0) on duplicate key update x=x+1; insert into tt values (97,0) on duplicate key update x=x+1; insert into tt values (98,0) on duplicate key update x=x+1; insert into tt values (99,0) on duplicate key update x=x+1; -update noar tt set x=x+1 where id=0; -update noar tt set x=x+1 where id=1; -update noar tt set x=x+1 where id=2; -update noar tt set x=x+1 where id=3; -update noar tt set x=x+1 where id=4; -update noar tt set x=x+1 where id=5; -update noar tt set x=x+1 where id=6; -update noar tt set x=x+1 where id=7; -update noar tt set x=x+1 where id=8; -update noar tt set x=x+1 where id=9; -update noar tt set x=x+1 where id=10; -update noar tt set x=x+1 where id=11; -update noar tt set x=x+1 where id=12; -update noar tt set x=x+1 where id=13; -update noar tt set x=x+1 where id=14; -update noar tt set x=x+1 where id=15; -update noar tt set x=x+1 where id=16; -update noar tt set x=x+1 where id=17; -update noar tt set x=x+1 where id=18; -update noar tt set x=x+1 where id=19; -update noar tt set x=x+1 where id=20; -update noar tt set x=x+1 where id=21; -update noar tt set x=x+1 where id=22; -update noar tt set x=x+1 where id=23; -update noar tt set x=x+1 where id=24; -update noar tt set x=x+1 where id=25; -update noar tt set x=x+1 where id=26; -update noar tt set x=x+1 where id=27; -update noar tt set x=x+1 where id=28; -update noar tt set x=x+1 where id=29; -update noar tt set x=x+1 where id=30; -update noar tt set x=x+1 where id=31; -update noar tt set x=x+1 where id=32; -update noar tt set x=x+1 where id=33; -update noar tt set x=x+1 where id=34; -update noar tt set x=x+1 where id=35; -update noar tt set x=x+1 where id=36; -update noar tt set x=x+1 where id=37; -update noar tt set x=x+1 where id=38; -update noar tt set x=x+1 where id=39; -update noar tt set x=x+1 where id=40; -update noar tt set x=x+1 where id=41; -update noar tt set x=x+1 where id=42; -update noar tt set x=x+1 where id=43; -update noar tt set x=x+1 where id=44; -update noar tt set x=x+1 where id=45; -update noar tt set x=x+1 where id=46; -update noar tt set x=x+1 where id=47; -update noar tt set x=x+1 where id=48; -update noar tt set x=x+1 where id=49; -update noar tt set x=x+1 where id=50; -update noar tt set x=x+1 where id=51; -update noar tt set x=x+1 where id=52; -update noar tt set x=x+1 where id=53; -update noar tt set x=x+1 where id=54; -update noar tt set x=x+1 where id=55; -update noar tt set x=x+1 where id=56; -update noar tt set x=x+1 where id=57; -update noar tt set x=x+1 where id=58; -update noar tt set x=x+1 where id=59; -update noar tt set x=x+1 where id=60; -update noar tt set x=x+1 where id=61; -update noar tt set x=x+1 where id=62; -update noar tt set x=x+1 where id=63; -update noar tt set x=x+1 where id=64; -update noar tt set x=x+1 where id=65; -update noar tt set x=x+1 where id=66; -update noar tt set x=x+1 where id=67; -update noar tt set x=x+1 where id=68; -update noar tt set x=x+1 where id=69; -update noar tt set x=x+1 where id=70; -update noar tt set x=x+1 where id=71; -update noar tt set x=x+1 where id=72; -update noar tt set x=x+1 where id=73; -update noar tt set x=x+1 where id=74; -update noar tt set x=x+1 where id=75; -update noar tt set x=x+1 where id=76; -update noar tt set x=x+1 where id=77; -update noar tt set x=x+1 where id=78; -update noar tt set x=x+1 where id=79; -update noar tt set x=x+1 where id=80; -update noar tt set x=x+1 where id=81; -update noar tt set x=x+1 where id=82; -update noar tt set x=x+1 where id=83; -update noar tt set x=x+1 where id=84; -update noar tt set x=x+1 where id=85; -update noar tt set x=x+1 where id=86; -update noar tt set x=x+1 where id=87; -update noar tt set x=x+1 where id=88; -update noar tt set x=x+1 where id=89; -update noar tt set x=x+1 where id=90; -update noar tt set x=x+1 where id=91; -update noar tt set x=x+1 where id=92; -update noar tt set x=x+1 where id=93; -update noar tt set x=x+1 where id=94; -update noar tt set x=x+1 where id=95; -update noar tt set x=x+1 where id=96; -update noar tt set x=x+1 where id=97; -update noar tt set x=x+1 where id=98; -update noar tt set x=x+1 where id=99; +update tt set x=x+1 where id=0; +update tt set x=x+1 where id=1; +update tt set x=x+1 where id=2; +update tt set x=x+1 where id=3; +update tt set x=x+1 where id=4; +update tt set x=x+1 where id=5; +update tt set x=x+1 where id=6; +update tt set x=x+1 where id=7; +update tt set x=x+1 where id=8; +update tt set x=x+1 where id=9; +update tt set x=x+1 where id=10; +update tt set x=x+1 where id=11; +update tt set x=x+1 where id=12; +update tt set x=x+1 where id=13; +update tt set x=x+1 where id=14; +update tt set x=x+1 where id=15; +update tt set x=x+1 where id=16; +update tt set x=x+1 where id=17; +update tt set x=x+1 where id=18; +update tt set x=x+1 where id=19; +update tt set x=x+1 where id=20; +update tt set x=x+1 where id=21; +update tt set x=x+1 where id=22; +update tt set x=x+1 where id=23; +update tt set x=x+1 where id=24; +update tt set x=x+1 where id=25; +update tt set x=x+1 where id=26; +update tt set x=x+1 where id=27; +update tt set x=x+1 where id=28; +update tt set x=x+1 where id=29; +update tt set x=x+1 where id=30; +update tt set x=x+1 where id=31; +update tt set x=x+1 where id=32; +update tt set x=x+1 where id=33; +update tt set x=x+1 where id=34; +update tt set x=x+1 where id=35; +update tt set x=x+1 where id=36; +update tt set x=x+1 where id=37; +update tt set x=x+1 where id=38; +update tt set x=x+1 where id=39; +update tt set x=x+1 where id=40; +update tt set x=x+1 where id=41; +update tt set x=x+1 where id=42; +update tt set x=x+1 where id=43; +update tt set x=x+1 where id=44; +update tt set x=x+1 where id=45; +update tt set x=x+1 where id=46; +update tt set x=x+1 where id=47; +update tt set x=x+1 where id=48; +update tt set x=x+1 where id=49; +update tt set x=x+1 where id=50; +update tt set x=x+1 where id=51; +update tt set x=x+1 where id=52; +update tt set x=x+1 where id=53; +update tt set x=x+1 where id=54; +update tt set x=x+1 where id=55; +update tt set x=x+1 where id=56; +update tt set x=x+1 where id=57; +update tt set x=x+1 where id=58; +update tt set x=x+1 where id=59; +update tt set x=x+1 where id=60; +update tt set x=x+1 where id=61; +update tt set x=x+1 where id=62; +update tt set x=x+1 where id=63; +update tt set x=x+1 where id=64; +update tt set x=x+1 where id=65; +update tt set x=x+1 where id=66; +update tt set x=x+1 where id=67; +update tt set x=x+1 where id=68; +update tt set x=x+1 where id=69; +update tt set x=x+1 where id=70; +update tt set x=x+1 where id=71; +update tt set x=x+1 where id=72; +update tt set x=x+1 where id=73; +update tt set x=x+1 where id=74; +update tt set x=x+1 where id=75; +update tt set x=x+1 where id=76; +update tt set x=x+1 where id=77; +update tt set x=x+1 where id=78; +update tt set x=x+1 where id=79; +update tt set x=x+1 where id=80; +update tt set x=x+1 where id=81; +update tt set x=x+1 where id=82; +update tt set x=x+1 where id=83; +update tt set x=x+1 where id=84; +update tt set x=x+1 where id=85; +update tt set x=x+1 where id=86; +update tt set x=x+1 where id=87; +update tt set x=x+1 where id=88; +update tt set x=x+1 where id=89; +update tt set x=x+1 where id=90; +update tt set x=x+1 where id=91; +update tt set x=x+1 where id=92; +update tt set x=x+1 where id=93; +update tt set x=x+1 where id=94; +update tt set x=x+1 where id=95; +update tt set x=x+1 where id=96; +update tt set x=x+1 where id=97; +update tt set x=x+1 where id=98; +update tt set x=x+1 where id=99; select * from tt where x != 2; id x include/diff_tables.inc [master:test.tt, slave:test.tt] diff --git a/mysql-test/suite/tokudb/r/fast_update_blobs.result b/mysql-test/suite/tokudb/r/fast_update_blobs.result index 39e0eadf9b83..4a963777fc08 100644 --- a/mysql-test/suite/tokudb/r/fast_update_blobs.result +++ b/mysql-test/suite/tokudb/r/fast_update_blobs.result @@ -1,18252 +1 @@ -set default_storage_engine='tokudb'; -drop table if exists t; -create table tt (id bigint unsigned primary key, -b0 tinyblob null, -b1 tinyblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='O3XN3EYXMGZTZN1K5U5MZVJSTCI' where id=1; -update noar ti set b0='O3XN3EYXMGZTZN1K5U5MZVJSTCI' where id=1; -update noar tt set b1='NUJSL2DPUO3Y2VJJMOXGIKD5' where id=1; -update noar ti set b1='NUJSL2DPUO3Y2VJJMOXGIKD5' where id=1; -update noar tt set b2='GYH1A64A160VD620KTYFI0LMWTHTQ' where id=1; -update noar ti set b2='GYH1A64A160VD620KTYFI0LMWTHTQ' where id=1; -update noar tt set b0='R6NPFB2F' where id=2; -update noar ti set b0='R6NPFB2F' where id=2; -update noar tt set b1='I2FJYHVA88B5QIRGWO' where id=2; -update noar ti set b1='I2FJYHVA88B5QIRGWO' where id=2; -update noar tt set b2='VXNCR7V92TOSSD4S9CP1LU2QS7OYWI' where id=2; -update noar ti set b2='VXNCR7V92TOSSD4S9CP1LU2QS7OYWI' where id=2; -update noar tt set b0='0UQ09GUSN08XS' where id=3; -update noar ti set b0='0UQ09GUSN08XS' where id=3; -update noar tt set b1='5LWNM0Y07MT1PW2' where id=3; -update noar ti set b1='5LWNM0Y07MT1PW2' where id=3; -update noar tt set b2='HN4' where id=3; -update noar ti set b2='HN4' where id=3; -update noar tt set b0='C1QZDQRLS0PTQBP' where id=4; -update noar ti set b0='C1QZDQRLS0PTQBP' where id=4; -update noar tt set b1='143H1LL68O8ZQJI7K99JQVLCZ9' where id=4; -update noar ti set b1='143H1LL68O8ZQJI7K99JQVLCZ9' where id=4; -update noar tt set b2='4YOVMJ' where id=4; -update noar ti set b2='4YOVMJ' where id=4; -update noar tt set b0='T9SL9H4JFRX5BXQBG' where id=5; -update noar ti set b0='T9SL9H4JFRX5BXQBG' where id=5; -update noar tt set b1='IERUZ3U5PS27T7' where id=5; -update noar ti set b1='IERUZ3U5PS27T7' where id=5; -update noar tt set b2='3FJ10AUIZ70MM9N11G4GZ2SD' where id=5; -update noar ti set b2='3FJ10AUIZ70MM9N11G4GZ2SD' where id=5; -update noar tt set b0='2NW6C3TI50EG0EP8UXI4LDLQ8Q6AG02' where id=6; -update noar ti set b0='2NW6C3TI50EG0EP8UXI4LDLQ8Q6AG02' where id=6; -update noar tt set b1='W52A7GZSPSTEMZU80PEM' where id=6; -update noar ti set b1='W52A7GZSPSTEMZU80PEM' where id=6; -update noar tt set b2='F24TFX952ZCB8LKYJK3V5RPLC216' where id=6; -update noar ti set b2='F24TFX952ZCB8LKYJK3V5RPLC216' where id=6; -update noar tt set b0='CLKM' where id=7; -update noar ti set b0='CLKM' where id=7; -update noar tt set b1='V922ZOJPOWQ8DYEU1WPLNUI2V' where id=7; -update noar ti set b1='V922ZOJPOWQ8DYEU1WPLNUI2V' where id=7; -update noar tt set b2='KJHGLHTC' where id=7; -update noar ti set b2='KJHGLHTC' where id=7; -update noar tt set b0='OGYBFJIZYQ' where id=8; -update noar ti set b0='OGYBFJIZYQ' where id=8; -update noar tt set b1='37VFBYBMAZ4I139RNG8URUOU' where id=8; -update noar ti set b1='37VFBYBMAZ4I139RNG8URUOU' where id=8; -update noar tt set b2='2IA' where id=8; -update noar ti set b2='2IA' where id=8; -update noar tt set b0='Q' where id=9; -update noar ti set b0='Q' where id=9; -update noar tt set b1='E' where id=9; -update noar ti set b1='E' where id=9; -update noar tt set b2='VICTYSWSPPYUHIPU0HCJE' where id=9; -update noar ti set b2='VICTYSWSPPYUHIPU0HCJE' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 tinyblob not null, -b1 tinyblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='78I7U' where id=1; -update noar ti set b0='78I7U' where id=1; -update noar tt set b1='2E' where id=1; -update noar ti set b1='2E' where id=1; -update noar tt set b2='Q2YKT0GTIOJXMLP' where id=1; -update noar ti set b2='Q2YKT0GTIOJXMLP' where id=1; -update noar tt set b0='E92J7SF7I48BP708TPG52I5' where id=2; -update noar ti set b0='E92J7SF7I48BP708TPG52I5' where id=2; -update noar tt set b1='R1Z9BSQKSB2SNUEYBP' where id=2; -update noar ti set b1='R1Z9BSQKSB2SNUEYBP' where id=2; -update noar tt set b2='4CE0T3D4V5LKBQKPR' where id=2; -update noar ti set b2='4CE0T3D4V5LKBQKPR' where id=2; -update noar tt set b0='T48NWMCR57OKPX5TYOV4U0' where id=3; -update noar ti set b0='T48NWMCR57OKPX5TYOV4U0' where id=3; -update noar tt set b1='81PWG56P2IG' where id=3; -update noar ti set b1='81PWG56P2IG' where id=3; -update noar tt set b2='RDGBM1UKE1JMOWHMX' where id=3; -update noar ti set b2='RDGBM1UKE1JMOWHMX' where id=3; -update noar tt set b0='I7SF7FI49T' where id=4; -update noar ti set b0='I7SF7FI49T' where id=4; -update noar tt set b1='7W2SY6IPNVID3Z9VA5VK51' where id=4; -update noar ti set b1='7W2SY6IPNVID3Z9VA5VK51' where id=4; -update noar tt set b2='J1SN8MNYDL69E7ZT1' where id=4; -update noar ti set b2='J1SN8MNYDL69E7ZT1' where id=4; -update noar tt set b0='ZQGK' where id=5; -update noar ti set b0='ZQGK' where id=5; -update noar tt set b1='V1H7K4A7VL5YC8' where id=5; -update noar ti set b1='V1H7K4A7VL5YC8' where id=5; -update noar tt set b2='WXXGE8SNSOG0SYKJTUUFP3TT' where id=5; -update noar ti set b2='WXXGE8SNSOG0SYKJTUUFP3TT' where id=5; -update noar tt set b0='I3JCH6NJX8M6675' where id=6; -update noar ti set b0='I3JCH6NJX8M6675' where id=6; -update noar tt set b1='ONSN97QXAQHJN' where id=6; -update noar ti set b1='ONSN97QXAQHJN' where id=6; -update noar tt set b2='SDSEY521KDIYIAJQ' where id=6; -update noar ti set b2='SDSEY521KDIYIAJQ' where id=6; -update noar tt set b0='7AUYSC9VLF0GUZXVWY1XGG125JDM2BD' where id=7; -update noar ti set b0='7AUYSC9VLF0GUZXVWY1XGG125JDM2BD' where id=7; -update noar tt set b1='TW2N' where id=7; -update noar ti set b1='TW2N' where id=7; -update noar tt set b2='UBOG0O1TQRMF44XE2LPILC5HUTB' where id=7; -update noar ti set b2='UBOG0O1TQRMF44XE2LPILC5HUTB' where id=7; -update noar tt set b0='RNILQ' where id=8; -update noar ti set b0='RNILQ' where id=8; -update noar tt set b1='Y4K42HA5ZBKY1GSCYHHRABS3' where id=8; -update noar ti set b1='Y4K42HA5ZBKY1GSCYHHRABS3' where id=8; -update noar tt set b2='K83J4' where id=8; -update noar ti set b2='K83J4' where id=8; -update noar tt set b0='SGIG8LERFZH5IN4' where id=9; -update noar ti set b0='SGIG8LERFZH5IN4' where id=9; -update noar tt set b1='DOB38I74JNL' where id=9; -update noar ti set b1='DOB38I74JNL' where id=9; -update noar tt set b2='NF7GFC2OWLCIL1FK' where id=9; -update noar ti set b2='NF7GFC2OWLCIL1FK' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 tinyblob null, -b1 tinyblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='2ZMNW7MOI7XPC1SFNTNERTRG' where id=1; -update noar ti set b0='2ZMNW7MOI7XPC1SFNTNERTRG' where id=1; -update noar tt set b1='BYMTR69R' where id=1; -update noar ti set b1='BYMTR69R' where id=1; -update noar tt set b2='HL7' where id=1; -update noar ti set b2='HL7' where id=1; -update noar tt set b0='OZY1X19RJPGK8X00FRJL2F2NX' where id=2; -update noar ti set b0='OZY1X19RJPGK8X00FRJL2F2NX' where id=2; -update noar tt set b1='O2' where id=2; -update noar ti set b1='O2' where id=2; -update noar tt set b2='OTXZ24LPI7XYS7R26PNZ8' where id=2; -update noar ti set b2='OTXZ24LPI7XYS7R26PNZ8' where id=2; -update noar tt set b0='WNS6QDEXUIN7XIPE6G7HCI7I9NANP214' where id=3; -update noar ti set b0='WNS6QDEXUIN7XIPE6G7HCI7I9NANP214' where id=3; -update noar tt set b1='XUH4VZ1V67H5YZEPT8OVG9H7KFJ' where id=3; -update noar ti set b1='XUH4VZ1V67H5YZEPT8OVG9H7KFJ' where id=3; -update noar tt set b2='0EAC437AZVUO' where id=3; -update noar ti set b2='0EAC437AZVUO' where id=3; -update noar tt set b0='WM9' where id=4; -update noar ti set b0='WM9' where id=4; -update noar tt set b1='DF' where id=4; -update noar ti set b1='DF' where id=4; -update noar tt set b2='JWDAVSRXZYL6JBCEYU6YJXI3XPAGQ' where id=4; -update noar ti set b2='JWDAVSRXZYL6JBCEYU6YJXI3XPAGQ' where id=4; -update noar tt set b0='1' where id=5; -update noar ti set b0='1' where id=5; -update noar tt set b1='HOMT' where id=5; -update noar ti set b1='HOMT' where id=5; -update noar tt set b2='611LSHXW6C6' where id=5; -update noar ti set b2='611LSHXW6C6' where id=5; -update noar tt set b0='JMSBV35M4WX32UTN6' where id=6; -update noar ti set b0='JMSBV35M4WX32UTN6' where id=6; -update noar tt set b1='JQXWCHWG29RUAFA505RJU' where id=6; -update noar ti set b1='JQXWCHWG29RUAFA505RJU' where id=6; -update noar tt set b2='J96ILGE2OIV4N806O9PDLOJ' where id=6; -update noar ti set b2='J96ILGE2OIV4N806O9PDLOJ' where id=6; -update noar tt set b0='XO1VG8FBRDZD0SPU81NM' where id=7; -update noar ti set b0='XO1VG8FBRDZD0SPU81NM' where id=7; -update noar tt set b1='KY0MJVN' where id=7; -update noar ti set b1='KY0MJVN' where id=7; -update noar tt set b2='DNQ' where id=7; -update noar ti set b2='DNQ' where id=7; -update noar tt set b0='8XEKKIYOYS' where id=8; -update noar ti set b0='8XEKKIYOYS' where id=8; -update noar tt set b1='COVKXI827HCTZXZN8JHAC934JESF' where id=8; -update noar ti set b1='COVKXI827HCTZXZN8JHAC934JESF' where id=8; -update noar tt set b2='MA9SYQHPSQPDZMA9X' where id=8; -update noar ti set b2='MA9SYQHPSQPDZMA9X' where id=8; -update noar tt set b0='JQSW65RE1F6DI275' where id=9; -update noar ti set b0='JQSW65RE1F6DI275' where id=9; -update noar tt set b1='1LTAL1EJVLMJ4DAQY1OTX4I8ZOEDDS' where id=9; -update noar ti set b1='1LTAL1EJVLMJ4DAQY1OTX4I8ZOEDDS' where id=9; -update noar tt set b2='A8' where id=9; -update noar ti set b2='A8' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 tinyblob not null, -b1 tinyblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='VQOCKPL5H5DVLKVGMILZB0GZIK623L' where id=1; -update noar ti set b0='VQOCKPL5H5DVLKVGMILZB0GZIK623L' where id=1; -update noar tt set b1='3MRBTKCK069RHIDH1G51E' where id=1; -update noar ti set b1='3MRBTKCK069RHIDH1G51E' where id=1; -update noar tt set b2='IRFBLSQK734N83DBVL9C7OM56726' where id=1; -update noar ti set b2='IRFBLSQK734N83DBVL9C7OM56726' where id=1; -update noar tt set b0='5E0MA' where id=2; -update noar ti set b0='5E0MA' where id=2; -update noar tt set b1='YCS1EEK83OL' where id=2; -update noar ti set b1='YCS1EEK83OL' where id=2; -update noar tt set b2='PSTHRKGQDURK' where id=2; -update noar ti set b2='PSTHRKGQDURK' where id=2; -update noar tt set b0='H' where id=3; -update noar ti set b0='H' where id=3; -update noar tt set b1='R8WJJVIJV98M2SG0KIZG0SC9' where id=3; -update noar ti set b1='R8WJJVIJV98M2SG0KIZG0SC9' where id=3; -update noar tt set b2='ZYNCPB2CR42I7EPP7UQYVMLM' where id=3; -update noar ti set b2='ZYNCPB2CR42I7EPP7UQYVMLM' where id=3; -update noar tt set b0='1B1H2FKGCWOICZ83MAHE3O' where id=4; -update noar ti set b0='1B1H2FKGCWOICZ83MAHE3O' where id=4; -update noar tt set b1='WRHNYKV2B5LXAH70GPSPGG5' where id=4; -update noar ti set b1='WRHNYKV2B5LXAH70GPSPGG5' where id=4; -update noar tt set b2='S7SYT3T4EZGZ7VOQ88T5J2Z6TIJD2JLJ' where id=4; -update noar ti set b2='S7SYT3T4EZGZ7VOQ88T5J2Z6TIJD2JLJ' where id=4; -update noar tt set b0='72SNGZS4Q6OYF6EKM6KCCZRRJ57' where id=5; -update noar ti set b0='72SNGZS4Q6OYF6EKM6KCCZRRJ57' where id=5; -update noar tt set b1='T8F3D1PBIYHWGFBF83G025W' where id=5; -update noar ti set b1='T8F3D1PBIYHWGFBF83G025W' where id=5; -update noar tt set b2='9' where id=5; -update noar ti set b2='9' where id=5; -update noar tt set b0='3PAQF3PS3D89H' where id=6; -update noar ti set b0='3PAQF3PS3D89H' where id=6; -update noar tt set b1='Z5Y8S9X56BBZ29BXTDN1P1V' where id=6; -update noar ti set b1='Z5Y8S9X56BBZ29BXTDN1P1V' where id=6; -update noar tt set b2='X252FUABR21UFQBQDP2WNGDXMT' where id=6; -update noar ti set b2='X252FUABR21UFQBQDP2WNGDXMT' where id=6; -update noar tt set b0='DALFKMTLJZ5BXRG4EKS2FHLMVXPQL' where id=7; -update noar ti set b0='DALFKMTLJZ5BXRG4EKS2FHLMVXPQL' where id=7; -update noar tt set b1='RPQ8H6VEL5O6' where id=7; -update noar ti set b1='RPQ8H6VEL5O6' where id=7; -update noar tt set b2='ZF0DNOYMWRDWNNIS3HZY6WGU0NKI6EJ' where id=7; -update noar ti set b2='ZF0DNOYMWRDWNNIS3HZY6WGU0NKI6EJ' where id=7; -update noar tt set b0='Z4O3V4T5W' where id=8; -update noar ti set b0='Z4O3V4T5W' where id=8; -update noar tt set b1='12YE' where id=8; -update noar ti set b1='12YE' where id=8; -update noar tt set b2='GX5T10S2D5OGE9J1AMUNU1JPCZQ2' where id=8; -update noar ti set b2='GX5T10S2D5OGE9J1AMUNU1JPCZQ2' where id=8; -update noar tt set b0='Y' where id=9; -update noar ti set b0='Y' where id=9; -update noar tt set b1='O9PN' where id=9; -update noar ti set b1='O9PN' where id=9; -update noar tt set b2='B30TY855SEBYUJ86K3AYSW84DQLZ' where id=9; -update noar ti set b2='B30TY855SEBYUJ86K3AYSW84DQLZ' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 tinyblob null, -b1 tinyblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='XHX7H' where id=1; -update noar ti set b0='XHX7H' where id=1; -update noar tt set b1='70248WWK1SJUXW5M7H75KWRJK' where id=1; -update noar ti set b1='70248WWK1SJUXW5M7H75KWRJK' where id=1; -update noar tt set b2='2NTMLCWX1FQ3XZXCR7D8HPK8ZQ' where id=1; -update noar ti set b2='2NTMLCWX1FQ3XZXCR7D8HPK8ZQ' where id=1; -update noar tt set b0='L4Z9' where id=2; -update noar ti set b0='L4Z9' where id=2; -update noar tt set b1='UOLOKXZIO4FR7YYXRKGNU8VYE4D9' where id=2; -update noar ti set b1='UOLOKXZIO4FR7YYXRKGNU8VYE4D9' where id=2; -update noar tt set b2='40XELRCMK59A8MW521P' where id=2; -update noar ti set b2='40XELRCMK59A8MW521P' where id=2; -update noar tt set b0='A8PKOY8Q5EVB2KZ2OFABA9LH3GOOHFS' where id=3; -update noar ti set b0='A8PKOY8Q5EVB2KZ2OFABA9LH3GOOHFS' where id=3; -update noar tt set b1='2FHUA1G4SC89LVA1OEZN48IYX6O5G3' where id=3; -update noar ti set b1='2FHUA1G4SC89LVA1OEZN48IYX6O5G3' where id=3; -update noar tt set b2='8I12GS5B9SPHRKB4WJ0PHVIUY8' where id=3; -update noar ti set b2='8I12GS5B9SPHRKB4WJ0PHVIUY8' where id=3; -update noar tt set b0='QSJ0IPK3WGQ5FR75EAD6TECBU074ZDD4' where id=4; -update noar ti set b0='QSJ0IPK3WGQ5FR75EAD6TECBU074ZDD4' where id=4; -update noar tt set b1='AB82KEF1B7K2MQHQT' where id=4; -update noar ti set b1='AB82KEF1B7K2MQHQT' where id=4; -update noar tt set b2='QC8GL01FICTFYDKD958ZA81J' where id=4; -update noar ti set b2='QC8GL01FICTFYDKD958ZA81J' where id=4; -update noar tt set b0='DQJM1A9YDKA2NDZU4IJ9NIYS3RAB' where id=5; -update noar ti set b0='DQJM1A9YDKA2NDZU4IJ9NIYS3RAB' where id=5; -update noar tt set b1='KYNBC' where id=5; -update noar ti set b1='KYNBC' where id=5; -update noar tt set b2='CGMBIPMI16L0JI3O1TB7LLO' where id=5; -update noar ti set b2='CGMBIPMI16L0JI3O1TB7LLO' where id=5; -update noar tt set b0='1I87DCEFLW' where id=6; -update noar ti set b0='1I87DCEFLW' where id=6; -update noar tt set b1='SFFIDXJU4CKXUZETTVYAL2WL' where id=6; -update noar ti set b1='SFFIDXJU4CKXUZETTVYAL2WL' where id=6; -update noar tt set b2='9LQK51TFID4GU' where id=6; -update noar ti set b2='9LQK51TFID4GU' where id=6; -update noar tt set b0='ZH3YEK8W' where id=7; -update noar ti set b0='ZH3YEK8W' where id=7; -update noar tt set b1='DH2DLTG3LX9QQCG55ZS4VNFRMF' where id=7; -update noar ti set b1='DH2DLTG3LX9QQCG55ZS4VNFRMF' where id=7; -update noar tt set b2='OLEFIDX' where id=7; -update noar ti set b2='OLEFIDX' where id=7; -update noar tt set b0='4G2DDE6S6' where id=8; -update noar ti set b0='4G2DDE6S6' where id=8; -update noar tt set b1='UQVXK0N7BZ6VL' where id=8; -update noar ti set b1='UQVXK0N7BZ6VL' where id=8; -update noar tt set b2='KERVJYBEOIYZI4RJIJAJACE86L5ZZ1LZ' where id=8; -update noar ti set b2='KERVJYBEOIYZI4RJIJAJACE86L5ZZ1LZ' where id=8; -update noar tt set b0='ZV5ZM' where id=9; -update noar ti set b0='ZV5ZM' where id=9; -update noar tt set b1='W' where id=9; -update noar ti set b1='W' where id=9; -update noar tt set b2='MT' where id=9; -update noar ti set b2='MT' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 tinyblob not null, -b1 tinyblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='NUXZ5RL0IJMYU45DPNFA96OOKUSEEH4' where id=1; -update noar ti set b0='NUXZ5RL0IJMYU45DPNFA96OOKUSEEH4' where id=1; -update noar tt set b1='HRCSHQZ43RE3M4JWWZH9X2U8' where id=1; -update noar ti set b1='HRCSHQZ43RE3M4JWWZH9X2U8' where id=1; -update noar tt set b2='A5E92XIT2SJGQHL' where id=1; -update noar ti set b2='A5E92XIT2SJGQHL' where id=1; -update noar tt set b0='LQKN4SPQ4D0' where id=2; -update noar ti set b0='LQKN4SPQ4D0' where id=2; -update noar tt set b1='XEGFM13YYUXX6DZ9' where id=2; -update noar ti set b1='XEGFM13YYUXX6DZ9' where id=2; -update noar tt set b2='03Q' where id=2; -update noar ti set b2='03Q' where id=2; -update noar tt set b0='LZ5MR01QEB7NW' where id=3; -update noar ti set b0='LZ5MR01QEB7NW' where id=3; -update noar tt set b1='4XRTJXIGD6FWLO20' where id=3; -update noar ti set b1='4XRTJXIGD6FWLO20' where id=3; -update noar tt set b2='8WLU8HWLI5OBSTUK1MIO' where id=3; -update noar ti set b2='8WLU8HWLI5OBSTUK1MIO' where id=3; -update noar tt set b0='QVDNHUKS4D' where id=4; -update noar ti set b0='QVDNHUKS4D' where id=4; -update noar tt set b1='ILQ3ZX70' where id=4; -update noar ti set b1='ILQ3ZX70' where id=4; -update noar tt set b2='2GP6' where id=4; -update noar ti set b2='2GP6' where id=4; -update noar tt set b0='FD' where id=5; -update noar ti set b0='FD' where id=5; -update noar tt set b1='IKKX' where id=5; -update noar ti set b1='IKKX' where id=5; -update noar tt set b2='9TVIX7LVDPXP' where id=5; -update noar ti set b2='9TVIX7LVDPXP' where id=5; -update noar tt set b0='IIO' where id=6; -update noar ti set b0='IIO' where id=6; -update noar tt set b1='HVH0RIDW2SEIPZWEXMV8S4R53FEE' where id=6; -update noar ti set b1='HVH0RIDW2SEIPZWEXMV8S4R53FEE' where id=6; -update noar tt set b2='NVZD7TBH0JXLDF36RM' where id=6; -update noar ti set b2='NVZD7TBH0JXLDF36RM' where id=6; -update noar tt set b0='5CGJYTET3XOUB7465GENRZOXH' where id=7; -update noar ti set b0='5CGJYTET3XOUB7465GENRZOXH' where id=7; -update noar tt set b1='Q81RZ584O113C9NPBF77GLU4AK' where id=7; -update noar ti set b1='Q81RZ584O113C9NPBF77GLU4AK' where id=7; -update noar tt set b2='MFHOY' where id=7; -update noar ti set b2='MFHOY' where id=7; -update noar tt set b0='G6T8VSVL58VIR' where id=8; -update noar ti set b0='G6T8VSVL58VIR' where id=8; -update noar tt set b1='7PB8QVUESXMQGHU6T' where id=8; -update noar ti set b1='7PB8QVUESXMQGHU6T' where id=8; -update noar tt set b2='FAWC4TYYMFOF0EMZTZOKZDGE693' where id=8; -update noar ti set b2='FAWC4TYYMFOF0EMZTZOKZDGE693' where id=8; -update noar tt set b0='3PHHB4DXRIH31KRNW4ERO4JP04ZF9ZC' where id=9; -update noar ti set b0='3PHHB4DXRIH31KRNW4ERO4JP04ZF9ZC' where id=9; -update noar tt set b1='WURT2JDSMEQJ72RCFX2' where id=9; -update noar ti set b1='WURT2JDSMEQJ72RCFX2' where id=9; -update noar tt set b2='Y9QEDVCOXUPKJWC7CVKWPTUGW8' where id=9; -update noar ti set b2='Y9QEDVCOXUPKJWC7CVKWPTUGW8' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 tinyblob null, -b1 tinyblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='E' where id=1; -update noar ti set b0='E' where id=1; -update noar tt set b1='DUYTE2MT0WSCRXZEN380DMUTSYT71B' where id=1; -update noar ti set b1='DUYTE2MT0WSCRXZEN380DMUTSYT71B' where id=1; -update noar tt set b2='348CU' where id=1; -update noar ti set b2='348CU' where id=1; -update noar tt set b0='OIBQKKYIY' where id=2; -update noar ti set b0='OIBQKKYIY' where id=2; -update noar tt set b1='R976ZBP25S0X9PPOY1NNAR' where id=2; -update noar ti set b1='R976ZBP25S0X9PPOY1NNAR' where id=2; -update noar tt set b2='FBBS' where id=2; -update noar ti set b2='FBBS' where id=2; -update noar tt set b0='PUGBX1YCQ2W353' where id=3; -update noar ti set b0='PUGBX1YCQ2W353' where id=3; -update noar tt set b1='1CQ' where id=3; -update noar ti set b1='1CQ' where id=3; -update noar tt set b2='7ANSC30V' where id=3; -update noar ti set b2='7ANSC30V' where id=3; -update noar tt set b0='6ZMFLWZVLJ6ZUGYDL5M5U31BWK' where id=4; -update noar ti set b0='6ZMFLWZVLJ6ZUGYDL5M5U31BWK' where id=4; -update noar tt set b1='40LVE0SITV4FXPFM1MSKTCF9ZGM3' where id=4; -update noar ti set b1='40LVE0SITV4FXPFM1MSKTCF9ZGM3' where id=4; -update noar tt set b2='1R8' where id=4; -update noar ti set b2='1R8' where id=4; -update noar tt set b0='FWD1SAM1BDI8' where id=5; -update noar ti set b0='FWD1SAM1BDI8' where id=5; -update noar tt set b1='1ZRU1LAVEVXQ2290WQYVWKYHS9DGP3' where id=5; -update noar ti set b1='1ZRU1LAVEVXQ2290WQYVWKYHS9DGP3' where id=5; -update noar tt set b2='XA' where id=5; -update noar ti set b2='XA' where id=5; -update noar tt set b0='BI7GAOW3G' where id=6; -update noar ti set b0='BI7GAOW3G' where id=6; -update noar tt set b1='KGB' where id=6; -update noar ti set b1='KGB' where id=6; -update noar tt set b2='WLYAZVYP27KDSUILDPHYLJFOERPQEYQ3' where id=6; -update noar ti set b2='WLYAZVYP27KDSUILDPHYLJFOERPQEYQ3' where id=6; -update noar tt set b0='7YISX5CUDJH' where id=7; -update noar ti set b0='7YISX5CUDJH' where id=7; -update noar tt set b1='VODNM1OUTLYDYGZPGH5LYS2Y5PACG' where id=7; -update noar ti set b1='VODNM1OUTLYDYGZPGH5LYS2Y5PACG' where id=7; -update noar tt set b2='8R24DIUHLITO0HUDNS' where id=7; -update noar ti set b2='8R24DIUHLITO0HUDNS' where id=7; -update noar tt set b0='2OB0A6PC6VJP7PK33V6' where id=8; -update noar ti set b0='2OB0A6PC6VJP7PK33V6' where id=8; -update noar tt set b1='2TFGQ3YXC0' where id=8; -update noar ti set b1='2TFGQ3YXC0' where id=8; -update noar tt set b2='N1PK7NXUONYKEYEZXZ3HU8' where id=8; -update noar ti set b2='N1PK7NXUONYKEYEZXZ3HU8' where id=8; -update noar tt set b0='SOE02A3GUY913QQLVLUGB' where id=9; -update noar ti set b0='SOE02A3GUY913QQLVLUGB' where id=9; -update noar tt set b1='VQ1JX' where id=9; -update noar ti set b1='VQ1JX' where id=9; -update noar tt set b2='64MNBYFJLP322NHM9' where id=9; -update noar ti set b2='64MNBYFJLP322NHM9' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 tinyblob not null, -b1 tinyblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='XDAQ' where id=1; -update noar ti set b0='XDAQ' where id=1; -update noar tt set b1='VMWKBKP7A88SQURQGQJF7EX' where id=1; -update noar ti set b1='VMWKBKP7A88SQURQGQJF7EX' where id=1; -update noar tt set b2='5894HPJ9CL6' where id=1; -update noar ti set b2='5894HPJ9CL6' where id=1; -update noar tt set b0='O0RC' where id=2; -update noar ti set b0='O0RC' where id=2; -update noar tt set b1='KHHIB46XQJXJITZSF0SP4IPHPZD2P' where id=2; -update noar ti set b1='KHHIB46XQJXJITZSF0SP4IPHPZD2P' where id=2; -update noar tt set b2='XEIJOG' where id=2; -update noar ti set b2='XEIJOG' where id=2; -update noar tt set b0='77' where id=3; -update noar ti set b0='77' where id=3; -update noar tt set b1='J6NWB9ECQ7HW' where id=3; -update noar ti set b1='J6NWB9ECQ7HW' where id=3; -update noar tt set b2='8IKTO5RFV60NZO' where id=3; -update noar ti set b2='8IKTO5RFV60NZO' where id=3; -update noar tt set b0='VL3J0U18MHNWHP4UY2' where id=4; -update noar ti set b0='VL3J0U18MHNWHP4UY2' where id=4; -update noar tt set b1='HQG2U2C2KEH1QGP32' where id=4; -update noar ti set b1='HQG2U2C2KEH1QGP32' where id=4; -update noar tt set b2='2EK40KX2QPWLSI5F94C2TFA6Y9CG' where id=4; -update noar ti set b2='2EK40KX2QPWLSI5F94C2TFA6Y9CG' where id=4; -update noar tt set b0='BTXSRAYF1NI69VSLKDXGZ' where id=5; -update noar ti set b0='BTXSRAYF1NI69VSLKDXGZ' where id=5; -update noar tt set b1='RE' where id=5; -update noar ti set b1='RE' where id=5; -update noar tt set b2='6KK727IC0J0M1WWR7EYI88MTQ87' where id=5; -update noar ti set b2='6KK727IC0J0M1WWR7EYI88MTQ87' where id=5; -update noar tt set b0='S8WTCV8C9NF1PIFEX2HIUZUITT5XS7' where id=6; -update noar ti set b0='S8WTCV8C9NF1PIFEX2HIUZUITT5XS7' where id=6; -update noar tt set b1='4' where id=6; -update noar ti set b1='4' where id=6; -update noar tt set b2='IMTR26ZDPHGP57C6E3Q' where id=6; -update noar ti set b2='IMTR26ZDPHGP57C6E3Q' where id=6; -update noar tt set b0='GO0OUK72C67QUVDM5KF4N52VD2' where id=7; -update noar ti set b0='GO0OUK72C67QUVDM5KF4N52VD2' where id=7; -update noar tt set b1='8290NN8J5246IOBBQJHUZV' where id=7; -update noar ti set b1='8290NN8J5246IOBBQJHUZV' where id=7; -update noar tt set b2='OYB0N7YX1L1M31QLMO7LJ0Z5IQWM' where id=7; -update noar ti set b2='OYB0N7YX1L1M31QLMO7LJ0Z5IQWM' where id=7; -update noar tt set b0='K7OYBCJRFMJCDJ1LHNKVNXXL' where id=8; -update noar ti set b0='K7OYBCJRFMJCDJ1LHNKVNXXL' where id=8; -update noar tt set b1='1QCDJ8VLZR14ERF4VW7' where id=8; -update noar ti set b1='1QCDJ8VLZR14ERF4VW7' where id=8; -update noar tt set b2='AJBATT' where id=8; -update noar ti set b2='AJBATT' where id=8; -update noar tt set b0='STHCKDVFEWH5F8OODT' where id=9; -update noar ti set b0='STHCKDVFEWH5F8OODT' where id=9; -update noar tt set b1='150UQWNDMIX3J4SAED' where id=9; -update noar ti set b1='150UQWNDMIX3J4SAED' where id=9; -update noar tt set b2='FW3S181UYHPGD7XS9US' where id=9; -update noar ti set b2='FW3S181UYHPGD7XS9US' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 tinyblob null, -b1 tinyblob null, -b2 text null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='T83' where id=1; -update noar ti set b0='T83' where id=1; -update noar tt set b1='X48LAEEHK3ZH4V0NJ2YMVD' where id=1; -update noar ti set b1='X48LAEEHK3ZH4V0NJ2YMVD' where id=1; -update noar tt set b2='E6WJPGMSRHRDB' where id=1; -update noar ti set b2='E6WJPGMSRHRDB' where id=1; -update noar tt set b0='P5PHN4PM2G77JGF8Q' where id=2; -update noar ti set b0='P5PHN4PM2G77JGF8Q' where id=2; -update noar tt set b1='7C41T' where id=2; -update noar ti set b1='7C41T' where id=2; -update noar tt set b2='OYFXXMWFB5CV' where id=2; -update noar ti set b2='OYFXXMWFB5CV' where id=2; -update noar tt set b0='Y0ZQ5U2RRARVF' where id=3; -update noar ti set b0='Y0ZQ5U2RRARVF' where id=3; -update noar tt set b1='8XX12WLULLQ' where id=3; -update noar ti set b1='8XX12WLULLQ' where id=3; -update noar tt set b2='U4WNXJUWJZP8I3NQ51OAV4U7KTX9C' where id=3; -update noar ti set b2='U4WNXJUWJZP8I3NQ51OAV4U7KTX9C' where id=3; -update noar tt set b0='N7BSKZ3Y67' where id=4; -update noar ti set b0='N7BSKZ3Y67' where id=4; -update noar tt set b1='K5936GKS' where id=4; -update noar ti set b1='K5936GKS' where id=4; -update noar tt set b2='1ZO' where id=4; -update noar ti set b2='1ZO' where id=4; -update noar tt set b0='NY9DL1EZPR5' where id=5; -update noar ti set b0='NY9DL1EZPR5' where id=5; -update noar tt set b1='TQ6W4Y6KVJ6AA9QAB' where id=5; -update noar ti set b1='TQ6W4Y6KVJ6AA9QAB' where id=5; -update noar tt set b2='GP9894AUG675QNW' where id=5; -update noar ti set b2='GP9894AUG675QNW' where id=5; -update noar tt set b0='CZGZ9L99X6P9J9L4K6' where id=6; -update noar ti set b0='CZGZ9L99X6P9J9L4K6' where id=6; -update noar tt set b1='VKXYTSCF7JWFNPP1MGBEUDF5C' where id=6; -update noar ti set b1='VKXYTSCF7JWFNPP1MGBEUDF5C' where id=6; -update noar tt set b2='SLC08ZH6ABF56M4ZA2T1BR' where id=6; -update noar ti set b2='SLC08ZH6ABF56M4ZA2T1BR' where id=6; -update noar tt set b0='L' where id=7; -update noar ti set b0='L' where id=7; -update noar tt set b1='KYDSUG' where id=7; -update noar ti set b1='KYDSUG' where id=7; -update noar tt set b2='I4ZSA23JNPV5QI4KFXQIB536YAYBIE2Q' where id=7; -update noar ti set b2='I4ZSA23JNPV5QI4KFXQIB536YAYBIE2Q' where id=7; -update noar tt set b0='39A7UTUCUG6PYCJ8NA5LS' where id=8; -update noar ti set b0='39A7UTUCUG6PYCJ8NA5LS' where id=8; -update noar tt set b1='25S89JJZ' where id=8; -update noar ti set b1='25S89JJZ' where id=8; -update noar tt set b2='YTE0JXKIJ0YTDO' where id=8; -update noar ti set b2='YTE0JXKIJ0YTDO' where id=8; -update noar tt set b0='TY8TL9W8NGZTE1QMFYK3D1W426Z' where id=9; -update noar ti set b0='TY8TL9W8NGZTE1QMFYK3D1W426Z' where id=9; -update noar tt set b1='SNN' where id=9; -update noar ti set b1='SNN' where id=9; -update noar tt set b2='GTS3LG8H85VPSD69EF3X34AKL93HMN8' where id=9; -update noar ti set b2='GTS3LG8H85VPSD69EF3X34AKL93HMN8' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 tinyblob not null, -b1 tinyblob not null, -b2 text not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='FLAD1DU9OIS5NG4U7BRH58WZ' where id=1; -update noar ti set b0='FLAD1DU9OIS5NG4U7BRH58WZ' where id=1; -update noar tt set b1='D6R0TPWR39QI4WELUE1N9139L337PIP' where id=1; -update noar ti set b1='D6R0TPWR39QI4WELUE1N9139L337PIP' where id=1; -update noar tt set b2='PT1PGFYPJIF0YQYHIZTX0CPER8NDK5' where id=1; -update noar ti set b2='PT1PGFYPJIF0YQYHIZTX0CPER8NDK5' where id=1; -update noar tt set b0='6PAC8KGF5EJZDZT' where id=2; -update noar ti set b0='6PAC8KGF5EJZDZT' where id=2; -update noar tt set b1='QB0RNZ0B76A73J7G3P9AAZQR220' where id=2; -update noar ti set b1='QB0RNZ0B76A73J7G3P9AAZQR220' where id=2; -update noar tt set b2='FWMXEQOZNZ' where id=2; -update noar ti set b2='FWMXEQOZNZ' where id=2; -update noar tt set b0='YVT4RPNTLO1G7HSQXE' where id=3; -update noar ti set b0='YVT4RPNTLO1G7HSQXE' where id=3; -update noar tt set b1='DPU3E51A9ZNWX1BJ9R3BS21GKDA' where id=3; -update noar ti set b1='DPU3E51A9ZNWX1BJ9R3BS21GKDA' where id=3; -update noar tt set b2='OB2VHDDM9SB0CI3HF3IAF' where id=3; -update noar ti set b2='OB2VHDDM9SB0CI3HF3IAF' where id=3; -update noar tt set b0='O6RM9IXR6EYFKYRAJP8DPBELZMK' where id=4; -update noar ti set b0='O6RM9IXR6EYFKYRAJP8DPBELZMK' where id=4; -update noar tt set b1='O8LUFAMEQVZOMJVUB4TGDBV' where id=4; -update noar ti set b1='O8LUFAMEQVZOMJVUB4TGDBV' where id=4; -update noar tt set b2='K6FRSLXB7BMOXMEZT7O3L0RVB' where id=4; -update noar ti set b2='K6FRSLXB7BMOXMEZT7O3L0RVB' where id=4; -update noar tt set b0='SZIE4M82QR3XSNZ3M' where id=5; -update noar ti set b0='SZIE4M82QR3XSNZ3M' where id=5; -update noar tt set b1='EODT7VSE8QDZURNG2I' where id=5; -update noar ti set b1='EODT7VSE8QDZURNG2I' where id=5; -update noar tt set b2='CQIYLXBZHF' where id=5; -update noar ti set b2='CQIYLXBZHF' where id=5; -update noar tt set b0='830KNDTN2VW2C' where id=6; -update noar ti set b0='830KNDTN2VW2C' where id=6; -update noar tt set b1='VML26A88V2GELPA2UM1E14J8' where id=6; -update noar ti set b1='VML26A88V2GELPA2UM1E14J8' where id=6; -update noar tt set b2='9OLDUH' where id=6; -update noar ti set b2='9OLDUH' where id=6; -update noar tt set b0='0C4NH6OS20EEXYT48MCGVTNT0NP' where id=7; -update noar ti set b0='0C4NH6OS20EEXYT48MCGVTNT0NP' where id=7; -update noar tt set b1='WIO6QBQUBOFRNFKKNSV' where id=7; -update noar ti set b1='WIO6QBQUBOFRNFKKNSV' where id=7; -update noar tt set b2='MHJZ6DF8JOCGG9G5NAJWT845PPWPFFN' where id=7; -update noar ti set b2='MHJZ6DF8JOCGG9G5NAJWT845PPWPFFN' where id=7; -update noar tt set b0='MGN3KRMZWRMZ59NU2ZWII' where id=8; -update noar ti set b0='MGN3KRMZWRMZ59NU2ZWII' where id=8; -update noar tt set b1='E1LLD5KHRL9E' where id=8; -update noar ti set b1='E1LLD5KHRL9E' where id=8; -update noar tt set b2='WKQWXX7U2PD9DETEEMZLI26' where id=8; -update noar ti set b2='WKQWXX7U2PD9DETEEMZLI26' where id=8; -update noar tt set b0='Z44ZNT67L2C' where id=9; -update noar ti set b0='Z44ZNT67L2C' where id=9; -update noar tt set b1='UC6X34E4EZOA1BXAGU62STY3' where id=9; -update noar ti set b1='UC6X34E4EZOA1BXAGU62STY3' where id=9; -update noar tt set b2='ZP795KUPO3' where id=9; -update noar ti set b2='ZP795KUPO3' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 tinyblob null, -b1 blob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='W3E1BRU0QDRV7U052ZO8IYDY8' where id=1; -update noar ti set b0='W3E1BRU0QDRV7U052ZO8IYDY8' where id=1; -update noar tt set b1='1I56MCIYGN1XJ2' where id=1; -update noar ti set b1='1I56MCIYGN1XJ2' where id=1; -update noar tt set b2='YO5BN084JGRG' where id=1; -update noar ti set b2='YO5BN084JGRG' where id=1; -update noar tt set b0='1VLFX19NQ30GNIY1I2IJO0' where id=2; -update noar ti set b0='1VLFX19NQ30GNIY1I2IJO0' where id=2; -update noar tt set b1='7X2X4Q0ECDQH9Z716ML2DVQG8K' where id=2; -update noar ti set b1='7X2X4Q0ECDQH9Z716ML2DVQG8K' where id=2; -update noar tt set b2='FOAZC78KKO4N7CPBI7PFAMR3' where id=2; -update noar ti set b2='FOAZC78KKO4N7CPBI7PFAMR3' where id=2; -update noar tt set b0='BILB6BB71S5WA8S1DGNUA' where id=3; -update noar ti set b0='BILB6BB71S5WA8S1DGNUA' where id=3; -update noar tt set b1='1J6KN' where id=3; -update noar ti set b1='1J6KN' where id=3; -update noar tt set b2='S3' where id=3; -update noar ti set b2='S3' where id=3; -update noar tt set b0='3S1J5OTZW0A9RXHX9V' where id=4; -update noar ti set b0='3S1J5OTZW0A9RXHX9V' where id=4; -update noar tt set b1='YOTTW35UFC746O4KV37ILBK1WXW' where id=4; -update noar ti set b1='YOTTW35UFC746O4KV37ILBK1WXW' where id=4; -update noar tt set b2='UVRDWL1UBNWVT' where id=4; -update noar ti set b2='UVRDWL1UBNWVT' where id=4; -update noar tt set b0='KUWJPYFNL4MQXXUOS70TBOKQ5KF9TR' where id=5; -update noar ti set b0='KUWJPYFNL4MQXXUOS70TBOKQ5KF9TR' where id=5; -update noar tt set b1='GJ0QJZHLAMJV5SGC' where id=5; -update noar ti set b1='GJ0QJZHLAMJV5SGC' where id=5; -update noar tt set b2='7YZ60YY22K0AEEOIU0ZDN5' where id=5; -update noar ti set b2='7YZ60YY22K0AEEOIU0ZDN5' where id=5; -update noar tt set b0='586F' where id=6; -update noar ti set b0='586F' where id=6; -update noar tt set b1='QYJ93MZVBQWTK9B602FL' where id=6; -update noar ti set b1='QYJ93MZVBQWTK9B602FL' where id=6; -update noar tt set b2='TFL4VBCSYKY38FQPDA' where id=6; -update noar ti set b2='TFL4VBCSYKY38FQPDA' where id=6; -update noar tt set b0='5TTWSW3DPO3NT9' where id=7; -update noar ti set b0='5TTWSW3DPO3NT9' where id=7; -update noar tt set b1='GBBBC4X06T3LPN1JRBSZ' where id=7; -update noar ti set b1='GBBBC4X06T3LPN1JRBSZ' where id=7; -update noar tt set b2='GCQXIJFWLPKKCERQTS34QU4XUFWG4R' where id=7; -update noar ti set b2='GCQXIJFWLPKKCERQTS34QU4XUFWG4R' where id=7; -update noar tt set b0='ILIQQ3' where id=8; -update noar ti set b0='ILIQQ3' where id=8; -update noar tt set b1='6CAGH4E7SGX' where id=8; -update noar ti set b1='6CAGH4E7SGX' where id=8; -update noar tt set b2='98' where id=8; -update noar ti set b2='98' where id=8; -update noar tt set b0='BBIG0PVO87K' where id=9; -update noar ti set b0='BBIG0PVO87K' where id=9; -update noar tt set b1='ARJ1CMNVXQGJF6NX82' where id=9; -update noar ti set b1='ARJ1CMNVXQGJF6NX82' where id=9; -update noar tt set b2='5W9S1AF' where id=9; -update noar ti set b2='5W9S1AF' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 tinyblob not null, -b1 blob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='G1' where id=1; -update noar ti set b0='G1' where id=1; -update noar tt set b1='LP4PGUIVD2KVEOHG4G33P' where id=1; -update noar ti set b1='LP4PGUIVD2KVEOHG4G33P' where id=1; -update noar tt set b2='96F7VE7YN15VB52PZOA3TAXH85C' where id=1; -update noar ti set b2='96F7VE7YN15VB52PZOA3TAXH85C' where id=1; -update noar tt set b0='W31SHEPO0HUY5GV39SOW2LDW1OBUL' where id=2; -update noar ti set b0='W31SHEPO0HUY5GV39SOW2LDW1OBUL' where id=2; -update noar tt set b1='8DK9G' where id=2; -update noar ti set b1='8DK9G' where id=2; -update noar tt set b2='4O7SVQTY' where id=2; -update noar ti set b2='4O7SVQTY' where id=2; -update noar tt set b0='FUKX6X' where id=3; -update noar ti set b0='FUKX6X' where id=3; -update noar tt set b1='TPKJ4' where id=3; -update noar ti set b1='TPKJ4' where id=3; -update noar tt set b2='F7Z4Y04F4XBHYAYKD8' where id=3; -update noar ti set b2='F7Z4Y04F4XBHYAYKD8' where id=3; -update noar tt set b0='S09TJEE3VM5CWIZ3JDZ8TJ02' where id=4; -update noar ti set b0='S09TJEE3VM5CWIZ3JDZ8TJ02' where id=4; -update noar tt set b1='996' where id=4; -update noar ti set b1='996' where id=4; -update noar tt set b2='8IB0BBSXQR8Z2C4FP3GGG1K3Y9' where id=4; -update noar ti set b2='8IB0BBSXQR8Z2C4FP3GGG1K3Y9' where id=4; -update noar tt set b0='QY5KX' where id=5; -update noar ti set b0='QY5KX' where id=5; -update noar tt set b1='FI0TK' where id=5; -update noar ti set b1='FI0TK' where id=5; -update noar tt set b2='46RKT9QZG' where id=5; -update noar ti set b2='46RKT9QZG' where id=5; -update noar tt set b0='70Y4WLLLWS7YI0H7NUZN87' where id=6; -update noar ti set b0='70Y4WLLLWS7YI0H7NUZN87' where id=6; -update noar tt set b1='65UMA352KWXTE3WINMO52KN' where id=6; -update noar ti set b1='65UMA352KWXTE3WINMO52KN' where id=6; -update noar tt set b2='0KL6P4LD5MGAJ03NPU9X03BEVCPNO2' where id=6; -update noar ti set b2='0KL6P4LD5MGAJ03NPU9X03BEVCPNO2' where id=6; -update noar tt set b0='H2' where id=7; -update noar ti set b0='H2' where id=7; -update noar tt set b1='M4G61' where id=7; -update noar ti set b1='M4G61' where id=7; -update noar tt set b2='SMPY8OYCK3E5OF6N1B2X' where id=7; -update noar ti set b2='SMPY8OYCK3E5OF6N1B2X' where id=7; -update noar tt set b0='N44T19OMKUEH' where id=8; -update noar ti set b0='N44T19OMKUEH' where id=8; -update noar tt set b1='CKVR10TK6483Z553RQYV579' where id=8; -update noar ti set b1='CKVR10TK6483Z553RQYV579' where id=8; -update noar tt set b2='J3U3ZGSS3ASI2EV7168C4PPTCP4K' where id=8; -update noar ti set b2='J3U3ZGSS3ASI2EV7168C4PPTCP4K' where id=8; -update noar tt set b0='MSVCREOPDHFM8SEIEM6079YJVT' where id=9; -update noar ti set b0='MSVCREOPDHFM8SEIEM6079YJVT' where id=9; -update noar tt set b1='JPLMM7HS' where id=9; -update noar ti set b1='JPLMM7HS' where id=9; -update noar tt set b2='W11DG4Z889J1DA0YRC23Y' where id=9; -update noar ti set b2='W11DG4Z889J1DA0YRC23Y' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 tinyblob null, -b1 blob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='CQQ20FBKF9CLXAO8H' where id=1; -update noar ti set b0='CQQ20FBKF9CLXAO8H' where id=1; -update noar tt set b1='7D28UR82M5EQG1U8TDV4' where id=1; -update noar ti set b1='7D28UR82M5EQG1U8TDV4' where id=1; -update noar tt set b2='W' where id=1; -update noar ti set b2='W' where id=1; -update noar tt set b0='98D763XQ' where id=2; -update noar ti set b0='98D763XQ' where id=2; -update noar tt set b1='NX81TXXVGYJXRTGCBKGY8FLEV2' where id=2; -update noar ti set b1='NX81TXXVGYJXRTGCBKGY8FLEV2' where id=2; -update noar tt set b2='MAO3HC' where id=2; -update noar ti set b2='MAO3HC' where id=2; -update noar tt set b0='Y0CI' where id=3; -update noar ti set b0='Y0CI' where id=3; -update noar tt set b1='SSVK0B556CS' where id=3; -update noar ti set b1='SSVK0B556CS' where id=3; -update noar tt set b2='NM8AFB2S6T6XR5I0CMEDN9MAY' where id=3; -update noar ti set b2='NM8AFB2S6T6XR5I0CMEDN9MAY' where id=3; -update noar tt set b0='M3IHPBO' where id=4; -update noar ti set b0='M3IHPBO' where id=4; -update noar tt set b1='CV1P92O9FWKCWKBV' where id=4; -update noar ti set b1='CV1P92O9FWKCWKBV' where id=4; -update noar tt set b2='N6LZWRY04OBC3171GL3OF4LMWOWKAC8K' where id=4; -update noar ti set b2='N6LZWRY04OBC3171GL3OF4LMWOWKAC8K' where id=4; -update noar tt set b0='QR1' where id=5; -update noar ti set b0='QR1' where id=5; -update noar tt set b1='ND0WUELCVPSU' where id=5; -update noar ti set b1='ND0WUELCVPSU' where id=5; -update noar tt set b2='J58WCUVVYKXOX23IEK3B' where id=5; -update noar ti set b2='J58WCUVVYKXOX23IEK3B' where id=5; -update noar tt set b0='YPF8UO33Z66JTM64W' where id=6; -update noar ti set b0='YPF8UO33Z66JTM64W' where id=6; -update noar tt set b1='RGPKQ9USTQKZ' where id=6; -update noar ti set b1='RGPKQ9USTQKZ' where id=6; -update noar tt set b2='MB88S2L5TXQHFXU30PP34TF6F7IUBG' where id=6; -update noar ti set b2='MB88S2L5TXQHFXU30PP34TF6F7IUBG' where id=6; -update noar tt set b0='O0FTPQUKUS6GBDYYD' where id=7; -update noar ti set b0='O0FTPQUKUS6GBDYYD' where id=7; -update noar tt set b1='XWKV8OENAIGM4' where id=7; -update noar ti set b1='XWKV8OENAIGM4' where id=7; -update noar tt set b2='VCXV6XC0NM48IG3WNUJNOY3JWXF98IQ9' where id=7; -update noar ti set b2='VCXV6XC0NM48IG3WNUJNOY3JWXF98IQ9' where id=7; -update noar tt set b0='LPTK4JADRI6HB0' where id=8; -update noar ti set b0='LPTK4JADRI6HB0' where id=8; -update noar tt set b1='CMP7BGPEH5HE4MCAFVKFOK567CBIQSUS' where id=8; -update noar ti set b1='CMP7BGPEH5HE4MCAFVKFOK567CBIQSUS' where id=8; -update noar tt set b2='EO' where id=8; -update noar ti set b2='EO' where id=8; -update noar tt set b0='UFZOWSXE0Y5QMFOWWW2L' where id=9; -update noar ti set b0='UFZOWSXE0Y5QMFOWWW2L' where id=9; -update noar tt set b1='XAXW6AREZZBVIHVE0J660IE0D46S04AB' where id=9; -update noar ti set b1='XAXW6AREZZBVIHVE0J660IE0D46S04AB' where id=9; -update noar tt set b2='G8ZSERN0TMTZ5MI3Q7TEEHRRH9Z' where id=9; -update noar ti set b2='G8ZSERN0TMTZ5MI3Q7TEEHRRH9Z' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 tinyblob not null, -b1 blob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='YB' where id=1; -update noar ti set b0='YB' where id=1; -update noar tt set b1='6NA7XYO28TKA75RND7MTI' where id=1; -update noar ti set b1='6NA7XYO28TKA75RND7MTI' where id=1; -update noar tt set b2='KL91GF8BLQRBOCE02JM3XRBBH' where id=1; -update noar ti set b2='KL91GF8BLQRBOCE02JM3XRBBH' where id=1; -update noar tt set b0='F1RI64V9YN7Y4VNIQ0IKLAI' where id=2; -update noar ti set b0='F1RI64V9YN7Y4VNIQ0IKLAI' where id=2; -update noar tt set b1='2U8Q9KD497XPFRJKC' where id=2; -update noar ti set b1='2U8Q9KD497XPFRJKC' where id=2; -update noar tt set b2='CTX86TY41S4COK62' where id=2; -update noar ti set b2='CTX86TY41S4COK62' where id=2; -update noar tt set b0='A1539Z2Y2C4KO' where id=3; -update noar ti set b0='A1539Z2Y2C4KO' where id=3; -update noar tt set b1='2VTLWM39ZJ1SW2D' where id=3; -update noar ti set b1='2VTLWM39ZJ1SW2D' where id=3; -update noar tt set b2='0PH0JTOTU1Q29H1TH' where id=3; -update noar ti set b2='0PH0JTOTU1Q29H1TH' where id=3; -update noar tt set b0='SIKAV8UZBK0J3RU' where id=4; -update noar ti set b0='SIKAV8UZBK0J3RU' where id=4; -update noar tt set b1='6H3M6N028SA1HT2' where id=4; -update noar ti set b1='6H3M6N028SA1HT2' where id=4; -update noar tt set b2='193J9L9FBGBYO5RX2HG07TV85VKV' where id=4; -update noar ti set b2='193J9L9FBGBYO5RX2HG07TV85VKV' where id=4; -update noar tt set b0='Q9SEGANQW35PGJSBJGLX48XH9' where id=5; -update noar ti set b0='Q9SEGANQW35PGJSBJGLX48XH9' where id=5; -update noar tt set b1='TIPBCO2X5NXW2B0CF' where id=5; -update noar ti set b1='TIPBCO2X5NXW2B0CF' where id=5; -update noar tt set b2='RB6GQK6PYEPRTMCE1' where id=5; -update noar ti set b2='RB6GQK6PYEPRTMCE1' where id=5; -update noar tt set b0='W' where id=6; -update noar ti set b0='W' where id=6; -update noar tt set b1='KTC8' where id=6; -update noar ti set b1='KTC8' where id=6; -update noar tt set b2='CR1RXZEDHFP6O' where id=6; -update noar ti set b2='CR1RXZEDHFP6O' where id=6; -update noar tt set b0='XKYNUGAKQL4' where id=7; -update noar ti set b0='XKYNUGAKQL4' where id=7; -update noar tt set b1='R2PER83QXP4YDUXYXXE' where id=7; -update noar ti set b1='R2PER83QXP4YDUXYXXE' where id=7; -update noar tt set b2='KF1J' where id=7; -update noar ti set b2='KF1J' where id=7; -update noar tt set b0='2HY6MVCXM6F2VLKIBSCV5BJ5APAT52X' where id=8; -update noar ti set b0='2HY6MVCXM6F2VLKIBSCV5BJ5APAT52X' where id=8; -update noar tt set b1='GV3FSDITS39B4E2152L9QQW9KR1' where id=8; -update noar ti set b1='GV3FSDITS39B4E2152L9QQW9KR1' where id=8; -update noar tt set b2='JVJGA13TXG' where id=8; -update noar ti set b2='JVJGA13TXG' where id=8; -update noar tt set b0='K07DD' where id=9; -update noar ti set b0='K07DD' where id=9; -update noar tt set b1='0DOL50' where id=9; -update noar ti set b1='0DOL50' where id=9; -update noar tt set b2='AKSCKJCMCP31EEULWVGME' where id=9; -update noar ti set b2='AKSCKJCMCP31EEULWVGME' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 tinyblob null, -b1 blob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='M0WI88R27XF17NNSYV4MWD4EHFYT4ZN' where id=1; -update noar ti set b0='M0WI88R27XF17NNSYV4MWD4EHFYT4ZN' where id=1; -update noar tt set b1='7B154ZQPG3CP500HVK6796PQ469Z' where id=1; -update noar ti set b1='7B154ZQPG3CP500HVK6796PQ469Z' where id=1; -update noar tt set b2='ZSOS2GSH2H6KDOYLQUHUC5FMDW5B6N' where id=1; -update noar ti set b2='ZSOS2GSH2H6KDOYLQUHUC5FMDW5B6N' where id=1; -update noar tt set b0='0JED16Q9M3OYDCE9ADWIT' where id=2; -update noar ti set b0='0JED16Q9M3OYDCE9ADWIT' where id=2; -update noar tt set b1='ISFL7F' where id=2; -update noar ti set b1='ISFL7F' where id=2; -update noar tt set b2='JMWKPL6H84T89CIXQSCBS8Y' where id=2; -update noar ti set b2='JMWKPL6H84T89CIXQSCBS8Y' where id=2; -update noar tt set b0='0B' where id=3; -update noar ti set b0='0B' where id=3; -update noar tt set b1='2Q' where id=3; -update noar ti set b1='2Q' where id=3; -update noar tt set b2='KLD' where id=3; -update noar ti set b2='KLD' where id=3; -update noar tt set b0='9YCRAMCH5VVJNX1777X9NOW5GWLR45' where id=4; -update noar ti set b0='9YCRAMCH5VVJNX1777X9NOW5GWLR45' where id=4; -update noar tt set b1='VTHEJP' where id=4; -update noar ti set b1='VTHEJP' where id=4; -update noar tt set b2='QY4JBID6XQJE' where id=4; -update noar ti set b2='QY4JBID6XQJE' where id=4; -update noar tt set b0='D2X9' where id=5; -update noar ti set b0='D2X9' where id=5; -update noar tt set b1='Y7V3O80H1460PLM1' where id=5; -update noar ti set b1='Y7V3O80H1460PLM1' where id=5; -update noar tt set b2='GK8F0SW6D9C35' where id=5; -update noar ti set b2='GK8F0SW6D9C35' where id=5; -update noar tt set b0='HBL6AF6AUDGJU1P2L4X7FJ2KDQY' where id=6; -update noar ti set b0='HBL6AF6AUDGJU1P2L4X7FJ2KDQY' where id=6; -update noar tt set b1='RVNZ660' where id=6; -update noar ti set b1='RVNZ660' where id=6; -update noar tt set b2='DQM3' where id=6; -update noar ti set b2='DQM3' where id=6; -update noar tt set b0='F12SFLDWC5GIUS' where id=7; -update noar ti set b0='F12SFLDWC5GIUS' where id=7; -update noar tt set b1='KNU' where id=7; -update noar ti set b1='KNU' where id=7; -update noar tt set b2='KKBEDHEZCQDMJIJZMJ1UQ12ARK916O' where id=7; -update noar ti set b2='KKBEDHEZCQDMJIJZMJ1UQ12ARK916O' where id=7; -update noar tt set b0='X75C7ZY1AT' where id=8; -update noar ti set b0='X75C7ZY1AT' where id=8; -update noar tt set b1='TH7KMW1IO9JRKXQR2NBE9X85S554NB1' where id=8; -update noar ti set b1='TH7KMW1IO9JRKXQR2NBE9X85S554NB1' where id=8; -update noar tt set b2='T1UBOPGPW4C8A95L3UW96VK7UCEGBQC' where id=8; -update noar ti set b2='T1UBOPGPW4C8A95L3UW96VK7UCEGBQC' where id=8; -update noar tt set b0='ZVSQRQV' where id=9; -update noar ti set b0='ZVSQRQV' where id=9; -update noar tt set b1='ED1WY0SU' where id=9; -update noar ti set b1='ED1WY0SU' where id=9; -update noar tt set b2='93A58OVP0SQPZAYWU6FFQO2WHAJW3' where id=9; -update noar ti set b2='93A58OVP0SQPZAYWU6FFQO2WHAJW3' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 tinyblob not null, -b1 blob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='PBZ5' where id=1; -update noar ti set b0='PBZ5' where id=1; -update noar tt set b1='WA4D' where id=1; -update noar ti set b1='WA4D' where id=1; -update noar tt set b2='5X22DH9QMGE6GL423VVZSX9SEL6D9W' where id=1; -update noar ti set b2='5X22DH9QMGE6GL423VVZSX9SEL6D9W' where id=1; -update noar tt set b0='5TDZI1NG8LA7' where id=2; -update noar ti set b0='5TDZI1NG8LA7' where id=2; -update noar tt set b1='DK6I6YQQAKU' where id=2; -update noar ti set b1='DK6I6YQQAKU' where id=2; -update noar tt set b2='QLUP' where id=2; -update noar ti set b2='QLUP' where id=2; -update noar tt set b0='NDU7RWPL6HLW2TNTQMHSUJ3' where id=3; -update noar ti set b0='NDU7RWPL6HLW2TNTQMHSUJ3' where id=3; -update noar tt set b1='XKSPE0UZP7KX7' where id=3; -update noar ti set b1='XKSPE0UZP7KX7' where id=3; -update noar tt set b2='0UFZOQ9V7U0RI1EYA9A1' where id=3; -update noar ti set b2='0UFZOQ9V7U0RI1EYA9A1' where id=3; -update noar tt set b0='Z1BMVZXFSLPWMKARLIJ3C521MH8R0' where id=4; -update noar ti set b0='Z1BMVZXFSLPWMKARLIJ3C521MH8R0' where id=4; -update noar tt set b1='J22MX2IK8OG' where id=4; -update noar ti set b1='J22MX2IK8OG' where id=4; -update noar tt set b2='4W' where id=4; -update noar ti set b2='4W' where id=4; -update noar tt set b0='C2KAH' where id=5; -update noar ti set b0='C2KAH' where id=5; -update noar tt set b1='WF8C0Z9H7X6486S335GUK9RGZJTQ8' where id=5; -update noar ti set b1='WF8C0Z9H7X6486S335GUK9RGZJTQ8' where id=5; -update noar tt set b2='PFKHD013QZ7L' where id=5; -update noar ti set b2='PFKHD013QZ7L' where id=5; -update noar tt set b0='4HJ8EFFYXPWXDB5IFZTYYA2' where id=6; -update noar ti set b0='4HJ8EFFYXPWXDB5IFZTYYA2' where id=6; -update noar tt set b1='4DFR9JEE9AD7193OUYVA9Z67JK3YR57M' where id=6; -update noar ti set b1='4DFR9JEE9AD7193OUYVA9Z67JK3YR57M' where id=6; -update noar tt set b2='GKDATR4GK5BQ5IHFQ8NJJR2' where id=6; -update noar ti set b2='GKDATR4GK5BQ5IHFQ8NJJR2' where id=6; -update noar tt set b0='48TDHZ' where id=7; -update noar ti set b0='48TDHZ' where id=7; -update noar tt set b1='FV2GTDI0QI0JC19' where id=7; -update noar ti set b1='FV2GTDI0QI0JC19' where id=7; -update noar tt set b2='JG8HXRTBB5YLSBM40PAOQW6LLSX9W3Y' where id=7; -update noar ti set b2='JG8HXRTBB5YLSBM40PAOQW6LLSX9W3Y' where id=7; -update noar tt set b0='SHKGZWRYV2EY2C4NOVBV0Z6QL77TT' where id=8; -update noar ti set b0='SHKGZWRYV2EY2C4NOVBV0Z6QL77TT' where id=8; -update noar tt set b1='LAJ37V0' where id=8; -update noar ti set b1='LAJ37V0' where id=8; -update noar tt set b2='31HVRWD3ROXFP7O5PJMC' where id=8; -update noar ti set b2='31HVRWD3ROXFP7O5PJMC' where id=8; -update noar tt set b0='YXAL3S6DOGZ4ZEUVO02LG' where id=9; -update noar ti set b0='YXAL3S6DOGZ4ZEUVO02LG' where id=9; -update noar tt set b1='G' where id=9; -update noar ti set b1='G' where id=9; -update noar tt set b2='46HIP9JK' where id=9; -update noar ti set b2='46HIP9JK' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 tinyblob null, -b1 blob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='BXJ7QD5CN60DC' where id=1; -update noar ti set b0='BXJ7QD5CN60DC' where id=1; -update noar tt set b1='SR7XRP327RKAHI0BSV2GQF9RXYO' where id=1; -update noar ti set b1='SR7XRP327RKAHI0BSV2GQF9RXYO' where id=1; -update noar tt set b2='NCPT4NVNV' where id=1; -update noar ti set b2='NCPT4NVNV' where id=1; -update noar tt set b0='TV4PGD9W3CJM1OANPKZDFKN8WNQYJNPN' where id=2; -update noar ti set b0='TV4PGD9W3CJM1OANPKZDFKN8WNQYJNPN' where id=2; -update noar tt set b1='8RI30V3ZQFAII43XWLCYB6TSI8' where id=2; -update noar ti set b1='8RI30V3ZQFAII43XWLCYB6TSI8' where id=2; -update noar tt set b2='LQO69OFXE2QSTP' where id=2; -update noar ti set b2='LQO69OFXE2QSTP' where id=2; -update noar tt set b0='QB4KJUGZSM' where id=3; -update noar ti set b0='QB4KJUGZSM' where id=3; -update noar tt set b1='3VCV77A89B8ECEGVQ6Y2GT51YFBCHN' where id=3; -update noar ti set b1='3VCV77A89B8ECEGVQ6Y2GT51YFBCHN' where id=3; -update noar tt set b2='DX0N7V13XEM009JORY262' where id=3; -update noar ti set b2='DX0N7V13XEM009JORY262' where id=3; -update noar tt set b0='HIG8U2GHT76BF8QRAB8H0949N' where id=4; -update noar ti set b0='HIG8U2GHT76BF8QRAB8H0949N' where id=4; -update noar tt set b1='9D6ESING7D2JSCM66JHARHIFFA8BBO9' where id=4; -update noar ti set b1='9D6ESING7D2JSCM66JHARHIFFA8BBO9' where id=4; -update noar tt set b2='I' where id=4; -update noar ti set b2='I' where id=4; -update noar tt set b0='LFFU3M3R23883RIO8Z00RXFF6OI7' where id=5; -update noar ti set b0='LFFU3M3R23883RIO8Z00RXFF6OI7' where id=5; -update noar tt set b1='943M5PMWQ' where id=5; -update noar ti set b1='943M5PMWQ' where id=5; -update noar tt set b2='08' where id=5; -update noar ti set b2='08' where id=5; -update noar tt set b0='PUQC49FYLWKBPV' where id=6; -update noar ti set b0='PUQC49FYLWKBPV' where id=6; -update noar tt set b1='LDVP4D7GYGHR33E' where id=6; -update noar ti set b1='LDVP4D7GYGHR33E' where id=6; -update noar tt set b2='9RDVM7GDHUGWPK7E8Q7IQ0' where id=6; -update noar ti set b2='9RDVM7GDHUGWPK7E8Q7IQ0' where id=6; -update noar tt set b0='E1U1N' where id=7; -update noar ti set b0='E1U1N' where id=7; -update noar tt set b1='KR68MDP85H1E' where id=7; -update noar ti set b1='KR68MDP85H1E' where id=7; -update noar tt set b2='3OGM7' where id=7; -update noar ti set b2='3OGM7' where id=7; -update noar tt set b0='96GPPR2SWZ0HGNLT7VWHPVMJF3S85W9' where id=8; -update noar ti set b0='96GPPR2SWZ0HGNLT7VWHPVMJF3S85W9' where id=8; -update noar tt set b1='N77AE7G57H2VW0PY' where id=8; -update noar ti set b1='N77AE7G57H2VW0PY' where id=8; -update noar tt set b2='5YCO' where id=8; -update noar ti set b2='5YCO' where id=8; -update noar tt set b0='CCY' where id=9; -update noar ti set b0='CCY' where id=9; -update noar tt set b1='MW7DKSWJV9KQA8IHRDI' where id=9; -update noar ti set b1='MW7DKSWJV9KQA8IHRDI' where id=9; -update noar tt set b2='2UVBD7RV9OQ1ET7YX4IU' where id=9; -update noar ti set b2='2UVBD7RV9OQ1ET7YX4IU' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 tinyblob not null, -b1 blob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='P3OR865OZCUSETY5' where id=1; -update noar ti set b0='P3OR865OZCUSETY5' where id=1; -update noar tt set b1='VIOG' where id=1; -update noar ti set b1='VIOG' where id=1; -update noar tt set b2='250TIVPKIXMPZ1C6Z5Y' where id=1; -update noar ti set b2='250TIVPKIXMPZ1C6Z5Y' where id=1; -update noar tt set b0='VM7I6NPR1XJN5JCHSUEH8PO38E0' where id=2; -update noar ti set b0='VM7I6NPR1XJN5JCHSUEH8PO38E0' where id=2; -update noar tt set b1='H' where id=2; -update noar ti set b1='H' where id=2; -update noar tt set b2='0P2NI' where id=2; -update noar ti set b2='0P2NI' where id=2; -update noar tt set b0='IGUVHY8524WPPGDPX5Q727IWK2' where id=3; -update noar ti set b0='IGUVHY8524WPPGDPX5Q727IWK2' where id=3; -update noar tt set b1='6TRDXA1NGYVYP8MU2PWR6Q33' where id=3; -update noar ti set b1='6TRDXA1NGYVYP8MU2PWR6Q33' where id=3; -update noar tt set b2='CDBAZME9LHTJ7SDMSQIPXT4AK' where id=3; -update noar ti set b2='CDBAZME9LHTJ7SDMSQIPXT4AK' where id=3; -update noar tt set b0='E17Q0M0GVPWZFVUPALGLF7Z' where id=4; -update noar ti set b0='E17Q0M0GVPWZFVUPALGLF7Z' where id=4; -update noar tt set b1='B138' where id=4; -update noar ti set b1='B138' where id=4; -update noar tt set b2='K28OT3' where id=4; -update noar ti set b2='K28OT3' where id=4; -update noar tt set b0='799NAUH9LZ6DQ2YM4YBDJXK0UP5C' where id=5; -update noar ti set b0='799NAUH9LZ6DQ2YM4YBDJXK0UP5C' where id=5; -update noar tt set b1='6ZN7TJLGBMFMI54KDBYH1' where id=5; -update noar ti set b1='6ZN7TJLGBMFMI54KDBYH1' where id=5; -update noar tt set b2='L3WOXG7WTTXC3IV' where id=5; -update noar ti set b2='L3WOXG7WTTXC3IV' where id=5; -update noar tt set b0='6DJX9N6ILL5TKHDKGEQFVFF3BT4' where id=6; -update noar ti set b0='6DJX9N6ILL5TKHDKGEQFVFF3BT4' where id=6; -update noar tt set b1='64MY4' where id=6; -update noar ti set b1='64MY4' where id=6; -update noar tt set b2='GOEJLSUYTIODH6NRU4N2ZQLV69EKRKU' where id=6; -update noar ti set b2='GOEJLSUYTIODH6NRU4N2ZQLV69EKRKU' where id=6; -update noar tt set b0='3M' where id=7; -update noar ti set b0='3M' where id=7; -update noar tt set b1='DZ88RA0VGO9OQAP1B877TIIJ' where id=7; -update noar ti set b1='DZ88RA0VGO9OQAP1B877TIIJ' where id=7; -update noar tt set b2='P7X3Y0U09' where id=7; -update noar ti set b2='P7X3Y0U09' where id=7; -update noar tt set b0='L1LTSJSTTAN' where id=8; -update noar ti set b0='L1LTSJSTTAN' where id=8; -update noar tt set b1='DIJE7V2X273ZJ5Q46LK526R8XAT0CD' where id=8; -update noar ti set b1='DIJE7V2X273ZJ5Q46LK526R8XAT0CD' where id=8; -update noar tt set b2='HDUWY57FI15DVFMH1X' where id=8; -update noar ti set b2='HDUWY57FI15DVFMH1X' where id=8; -update noar tt set b0='LWLFO7R2QHKNV87FR7S' where id=9; -update noar ti set b0='LWLFO7R2QHKNV87FR7S' where id=9; -update noar tt set b1='2RZUVK3S31BP6FB6Y0HSBW1NQ' where id=9; -update noar ti set b1='2RZUVK3S31BP6FB6Y0HSBW1NQ' where id=9; -update noar tt set b2='ZUY' where id=9; -update noar ti set b2='ZUY' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 tinyblob null, -b1 blob null, -b2 text null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='N5FAV' where id=1; -update noar ti set b0='N5FAV' where id=1; -update noar tt set b1='RYFWXW1F9RL' where id=1; -update noar ti set b1='RYFWXW1F9RL' where id=1; -update noar tt set b2='7DPV6J2QCEC5ADBFD3LGHEPQ45' where id=1; -update noar ti set b2='7DPV6J2QCEC5ADBFD3LGHEPQ45' where id=1; -update noar tt set b0='JIPOEWS3URK01XP4' where id=2; -update noar ti set b0='JIPOEWS3URK01XP4' where id=2; -update noar tt set b1='YOS5YFF2TLF' where id=2; -update noar ti set b1='YOS5YFF2TLF' where id=2; -update noar tt set b2='37NBJ61XX81S7MA1AYNE8JATUVML' where id=2; -update noar ti set b2='37NBJ61XX81S7MA1AYNE8JATUVML' where id=2; -update noar tt set b0='QQAF5MC' where id=3; -update noar ti set b0='QQAF5MC' where id=3; -update noar tt set b1='DY38O7X13Q9NQO435UNGT2GETFVEO80' where id=3; -update noar ti set b1='DY38O7X13Q9NQO435UNGT2GETFVEO80' where id=3; -update noar tt set b2='6JQECIJEBHAZ4XX45R6GUW19XG' where id=3; -update noar ti set b2='6JQECIJEBHAZ4XX45R6GUW19XG' where id=3; -update noar tt set b0='24AJA' where id=4; -update noar ti set b0='24AJA' where id=4; -update noar tt set b1='81E25ALZALDIW7SL2FOYANUMI0BEM1MD' where id=4; -update noar ti set b1='81E25ALZALDIW7SL2FOYANUMI0BEM1MD' where id=4; -update noar tt set b2='3BA2X' where id=4; -update noar ti set b2='3BA2X' where id=4; -update noar tt set b0='BNKHC8BMS5H28LNPCLY3DPJG0E86' where id=5; -update noar ti set b0='BNKHC8BMS5H28LNPCLY3DPJG0E86' where id=5; -update noar tt set b1='9CTRWMLS1FU634SKTZ0BHX' where id=5; -update noar ti set b1='9CTRWMLS1FU634SKTZ0BHX' where id=5; -update noar tt set b2='ZHIFCL6FCTUGV' where id=5; -update noar ti set b2='ZHIFCL6FCTUGV' where id=5; -update noar tt set b0='DQ9BCIUOL7UOB' where id=6; -update noar ti set b0='DQ9BCIUOL7UOB' where id=6; -update noar tt set b1='2Q5K2JDNDNMB79GEZO8S9E6SMU' where id=6; -update noar ti set b1='2Q5K2JDNDNMB79GEZO8S9E6SMU' where id=6; -update noar tt set b2='292UMJRNFY13ROE6ADFOF' where id=6; -update noar ti set b2='292UMJRNFY13ROE6ADFOF' where id=6; -update noar tt set b0='V1GX25GBFALLY0ANX95G454SE4F6H' where id=7; -update noar ti set b0='V1GX25GBFALLY0ANX95G454SE4F6H' where id=7; -update noar tt set b1='2OJI3LOTMTT2OB60P0N087EYP3' where id=7; -update noar ti set b1='2OJI3LOTMTT2OB60P0N087EYP3' where id=7; -update noar tt set b2='WS' where id=7; -update noar ti set b2='WS' where id=7; -update noar tt set b0='0Y5IB6UIQIKT58' where id=8; -update noar ti set b0='0Y5IB6UIQIKT58' where id=8; -update noar tt set b1='KIX01AKQWO8UAO4XBTA0' where id=8; -update noar ti set b1='KIX01AKQWO8UAO4XBTA0' where id=8; -update noar tt set b2='H0J8RBH3DTSM1XZ9CJZCJHEHFUR' where id=8; -update noar ti set b2='H0J8RBH3DTSM1XZ9CJZCJHEHFUR' where id=8; -update noar tt set b0='1EH88DP9RH' where id=9; -update noar ti set b0='1EH88DP9RH' where id=9; -update noar tt set b1='9N64S3DOR754' where id=9; -update noar ti set b1='9N64S3DOR754' where id=9; -update noar tt set b2='GFGUGUQVHR3JL50XHRY8SL3TEM' where id=9; -update noar ti set b2='GFGUGUQVHR3JL50XHRY8SL3TEM' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 tinyblob not null, -b1 blob not null, -b2 text not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='OHE09CVN1PE6SOQ0TQIDQ966YRR' where id=1; -update noar ti set b0='OHE09CVN1PE6SOQ0TQIDQ966YRR' where id=1; -update noar tt set b1='2OA1ZU9B69P4LKS45N5HY82Q77WE' where id=1; -update noar ti set b1='2OA1ZU9B69P4LKS45N5HY82Q77WE' where id=1; -update noar tt set b2='BDDR6TUDPRAV12BSO42SHUH20SFS1' where id=1; -update noar ti set b2='BDDR6TUDPRAV12BSO42SHUH20SFS1' where id=1; -update noar tt set b0='NATFMK64HO0H1' where id=2; -update noar ti set b0='NATFMK64HO0H1' where id=2; -update noar tt set b1='NRR2H7LOZ87FSGKKDKOMDEFXXV8X15L' where id=2; -update noar ti set b1='NRR2H7LOZ87FSGKKDKOMDEFXXV8X15L' where id=2; -update noar tt set b2='X9RQIR7QAXVLKE' where id=2; -update noar ti set b2='X9RQIR7QAXVLKE' where id=2; -update noar tt set b0='SMXBH03' where id=3; -update noar ti set b0='SMXBH03' where id=3; -update noar tt set b1='LMF8WXBU6UUSS05VLM4AWXNK' where id=3; -update noar ti set b1='LMF8WXBU6UUSS05VLM4AWXNK' where id=3; -update noar tt set b2='K25NU1I1A7G1H37X8J' where id=3; -update noar ti set b2='K25NU1I1A7G1H37X8J' where id=3; -update noar tt set b0='YCAQOFZJORR6GHNPB5W4S5SXLNQHKJ' where id=4; -update noar ti set b0='YCAQOFZJORR6GHNPB5W4S5SXLNQHKJ' where id=4; -update noar tt set b1='UKVS095MVDHQFY' where id=4; -update noar ti set b1='UKVS095MVDHQFY' where id=4; -update noar tt set b2='P8YU3T6VH7RJZP' where id=4; -update noar ti set b2='P8YU3T6VH7RJZP' where id=4; -update noar tt set b0='MQWW3T3OE39ACEE4ORTN7E6E00BKY0WE' where id=5; -update noar ti set b0='MQWW3T3OE39ACEE4ORTN7E6E00BKY0WE' where id=5; -update noar tt set b1='D1W8LB4' where id=5; -update noar ti set b1='D1W8LB4' where id=5; -update noar tt set b2='5PUG6EW1NKHLO' where id=5; -update noar ti set b2='5PUG6EW1NKHLO' where id=5; -update noar tt set b0='MJ' where id=6; -update noar ti set b0='MJ' where id=6; -update noar tt set b1='9T' where id=6; -update noar ti set b1='9T' where id=6; -update noar tt set b2='JS' where id=6; -update noar ti set b2='JS' where id=6; -update noar tt set b0='PWMQ9Y62JLYVANGVNW2P' where id=7; -update noar ti set b0='PWMQ9Y62JLYVANGVNW2P' where id=7; -update noar tt set b1='4LSY6RIPCNCUJMAIW168LP4V1J4GMA' where id=7; -update noar ti set b1='4LSY6RIPCNCUJMAIW168LP4V1J4GMA' where id=7; -update noar tt set b2='2K8VOWIRB' where id=7; -update noar ti set b2='2K8VOWIRB' where id=7; -update noar tt set b0='D3FWQY2N45AD234LMFR6EE' where id=8; -update noar ti set b0='D3FWQY2N45AD234LMFR6EE' where id=8; -update noar tt set b1='D8PFGU6K1FZROQI2OKBPE' where id=8; -update noar ti set b1='D8PFGU6K1FZROQI2OKBPE' where id=8; -update noar tt set b2='UI2QM6RXB63N35PG0ZR6AE' where id=8; -update noar ti set b2='UI2QM6RXB63N35PG0ZR6AE' where id=8; -update noar tt set b0='HW8QRKNLSCZLLKVFI2PPF8UUO8ZB' where id=9; -update noar ti set b0='HW8QRKNLSCZLLKVFI2PPF8UUO8ZB' where id=9; -update noar tt set b1='V5O58RH9M2DTNG1WCNHU6UYI3' where id=9; -update noar ti set b1='V5O58RH9M2DTNG1WCNHU6UYI3' where id=9; -update noar tt set b2='VYTJN24E' where id=9; -update noar ti set b2='VYTJN24E' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 tinyblob null, -b1 mediumblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='7H20YF66A9RXV7GQ5J' where id=1; -update noar ti set b0='7H20YF66A9RXV7GQ5J' where id=1; -update noar tt set b1='IOAO4KGB5V31WO5' where id=1; -update noar ti set b1='IOAO4KGB5V31WO5' where id=1; -update noar tt set b2='RV57OU' where id=1; -update noar ti set b2='RV57OU' where id=1; -update noar tt set b0='OKHLNT1VZWFLDA6V2KX9EBAOF' where id=2; -update noar ti set b0='OKHLNT1VZWFLDA6V2KX9EBAOF' where id=2; -update noar tt set b1='SXLOO2Q3QHBIYJOOF9R5EE35CJV9' where id=2; -update noar ti set b1='SXLOO2Q3QHBIYJOOF9R5EE35CJV9' where id=2; -update noar tt set b2='NLX3M8' where id=2; -update noar ti set b2='NLX3M8' where id=2; -update noar tt set b0='RA9J9RZXZOBMX1' where id=3; -update noar ti set b0='RA9J9RZXZOBMX1' where id=3; -update noar tt set b1='P8TTGU2N4HNZVDT6184YH' where id=3; -update noar ti set b1='P8TTGU2N4HNZVDT6184YH' where id=3; -update noar tt set b2='3' where id=3; -update noar ti set b2='3' where id=3; -update noar tt set b0='D' where id=4; -update noar ti set b0='D' where id=4; -update noar tt set b1='4CY862DE' where id=4; -update noar ti set b1='4CY862DE' where id=4; -update noar tt set b2='HJ6K7T1DOUIJ8FV82LJ5' where id=4; -update noar ti set b2='HJ6K7T1DOUIJ8FV82LJ5' where id=4; -update noar tt set b0='8J0HWDJ120V' where id=5; -update noar ti set b0='8J0HWDJ120V' where id=5; -update noar tt set b1='U3XHYGU5HD' where id=5; -update noar ti set b1='U3XHYGU5HD' where id=5; -update noar tt set b2='SR3CRVL6OV' where id=5; -update noar ti set b2='SR3CRVL6OV' where id=5; -update noar tt set b0='MI' where id=6; -update noar ti set b0='MI' where id=6; -update noar tt set b1='0IA4PJS6DZ' where id=6; -update noar ti set b1='0IA4PJS6DZ' where id=6; -update noar tt set b2='QJHUDCHA4IYE' where id=6; -update noar ti set b2='QJHUDCHA4IYE' where id=6; -update noar tt set b0='SW5E' where id=7; -update noar ti set b0='SW5E' where id=7; -update noar tt set b1='8LETY9NARJSWRKOMD9EPH98WC3CE' where id=7; -update noar ti set b1='8LETY9NARJSWRKOMD9EPH98WC3CE' where id=7; -update noar tt set b2='XZA2174D548YOBREK4XJI' where id=7; -update noar ti set b2='XZA2174D548YOBREK4XJI' where id=7; -update noar tt set b0='KSK' where id=8; -update noar ti set b0='KSK' where id=8; -update noar tt set b1='YS7GP2LEZA22K2T804VTMPPI' where id=8; -update noar ti set b1='YS7GP2LEZA22K2T804VTMPPI' where id=8; -update noar tt set b2='J15HJL0K7E5WLYRBS34RD5SKTAPMOR' where id=8; -update noar ti set b2='J15HJL0K7E5WLYRBS34RD5SKTAPMOR' where id=8; -update noar tt set b0='X8UBULN4DAPQJ4J0SKRF8XIA' where id=9; -update noar ti set b0='X8UBULN4DAPQJ4J0SKRF8XIA' where id=9; -update noar tt set b1='J69B8PDS4PG3HCX6NB0UF2G5YJ92X6' where id=9; -update noar ti set b1='J69B8PDS4PG3HCX6NB0UF2G5YJ92X6' where id=9; -update noar tt set b2='LNLBZUVT51QSB8J154H0GX6OG' where id=9; -update noar ti set b2='LNLBZUVT51QSB8J154H0GX6OG' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 tinyblob not null, -b1 mediumblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='D5NHT94GAYKZ0ZL8WJFOCP8C5Z955F' where id=1; -update noar ti set b0='D5NHT94GAYKZ0ZL8WJFOCP8C5Z955F' where id=1; -update noar tt set b1='E95' where id=1; -update noar ti set b1='E95' where id=1; -update noar tt set b2='E9S2FF4NARNCMNONETF904M547Y5A837' where id=1; -update noar ti set b2='E9S2FF4NARNCMNONETF904M547Y5A837' where id=1; -update noar tt set b0='DMVF21TT7UOOVLZG2M64' where id=2; -update noar ti set b0='DMVF21TT7UOOVLZG2M64' where id=2; -update noar tt set b1='7VVLJ672EB' where id=2; -update noar ti set b1='7VVLJ672EB' where id=2; -update noar tt set b2='K7' where id=2; -update noar ti set b2='K7' where id=2; -update noar tt set b0='NQI3T161XHZN5YHTZWD68SLXTNIN' where id=3; -update noar ti set b0='NQI3T161XHZN5YHTZWD68SLXTNIN' where id=3; -update noar tt set b1='T5I' where id=3; -update noar ti set b1='T5I' where id=3; -update noar tt set b2='20T3' where id=3; -update noar ti set b2='20T3' where id=3; -update noar tt set b0='EOS29XP3SERP0YJ2JAQRJ3' where id=4; -update noar ti set b0='EOS29XP3SERP0YJ2JAQRJ3' where id=4; -update noar tt set b1='QR379A0X6BVCODK1OPRW1LN6FD7PEZ2' where id=4; -update noar ti set b1='QR379A0X6BVCODK1OPRW1LN6FD7PEZ2' where id=4; -update noar tt set b2='82OANMH93' where id=4; -update noar ti set b2='82OANMH93' where id=4; -update noar tt set b0='31FIVXNTDC' where id=5; -update noar ti set b0='31FIVXNTDC' where id=5; -update noar tt set b1='5JZ8PZLP8IU50775QN0WPLMVOL7CJ9S' where id=5; -update noar ti set b1='5JZ8PZLP8IU50775QN0WPLMVOL7CJ9S' where id=5; -update noar tt set b2='EEEOV0XTLKJPEB07ZQ8P0D5O82A4BBTX' where id=5; -update noar ti set b2='EEEOV0XTLKJPEB07ZQ8P0D5O82A4BBTX' where id=5; -update noar tt set b0='AMMWWL6LQEJPRSTJLWFIGWT' where id=6; -update noar ti set b0='AMMWWL6LQEJPRSTJLWFIGWT' where id=6; -update noar tt set b1='HQPQZCS' where id=6; -update noar ti set b1='HQPQZCS' where id=6; -update noar tt set b2='HCVDS7GXPCLFTXB07WQCJX' where id=6; -update noar ti set b2='HCVDS7GXPCLFTXB07WQCJX' where id=6; -update noar tt set b0='OMNW' where id=7; -update noar ti set b0='OMNW' where id=7; -update noar tt set b1='2JTU2WCEE5T0A19' where id=7; -update noar ti set b1='2JTU2WCEE5T0A19' where id=7; -update noar tt set b2='27FB02D29NJBRT6F' where id=7; -update noar ti set b2='27FB02D29NJBRT6F' where id=7; -update noar tt set b0='R' where id=8; -update noar ti set b0='R' where id=8; -update noar tt set b1='FV' where id=8; -update noar ti set b1='FV' where id=8; -update noar tt set b2='QXYW88W2KI23FOGY04' where id=8; -update noar ti set b2='QXYW88W2KI23FOGY04' where id=8; -update noar tt set b0='3G01CANSG3FDFKHOODJKQB6FX' where id=9; -update noar ti set b0='3G01CANSG3FDFKHOODJKQB6FX' where id=9; -update noar tt set b1='UN6KUYV6UFWHVYWQKI7S1DDN6' where id=9; -update noar ti set b1='UN6KUYV6UFWHVYWQKI7S1DDN6' where id=9; -update noar tt set b2='EEUT1VDOTNJMTM5NFJPZH' where id=9; -update noar ti set b2='EEUT1VDOTNJMTM5NFJPZH' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 tinyblob null, -b1 mediumblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='G3V17GK52' where id=1; -update noar ti set b0='G3V17GK52' where id=1; -update noar tt set b1='QHKDP02I65QSN' where id=1; -update noar ti set b1='QHKDP02I65QSN' where id=1; -update noar tt set b2='0JZ0CNQSUBS' where id=1; -update noar ti set b2='0JZ0CNQSUBS' where id=1; -update noar tt set b0='FGH0FPCA02P' where id=2; -update noar ti set b0='FGH0FPCA02P' where id=2; -update noar tt set b1='T5FEBH06R2FOZ40' where id=2; -update noar ti set b1='T5FEBH06R2FOZ40' where id=2; -update noar tt set b2='6' where id=2; -update noar ti set b2='6' where id=2; -update noar tt set b0='6A0XBN3F4DS2V2S' where id=3; -update noar ti set b0='6A0XBN3F4DS2V2S' where id=3; -update noar tt set b1='HGXSH0G3Z7EHQAI09FLJX' where id=3; -update noar ti set b1='HGXSH0G3Z7EHQAI09FLJX' where id=3; -update noar tt set b2='RZ86H6959C4001UMGW5J12WKMV039VH' where id=3; -update noar ti set b2='RZ86H6959C4001UMGW5J12WKMV039VH' where id=3; -update noar tt set b0='3G' where id=4; -update noar ti set b0='3G' where id=4; -update noar tt set b1='2KFCAJ2Q9TG8E3GTL3GSEM28XU6IIC4A' where id=4; -update noar ti set b1='2KFCAJ2Q9TG8E3GTL3GSEM28XU6IIC4A' where id=4; -update noar tt set b2='TFH78N9S' where id=4; -update noar ti set b2='TFH78N9S' where id=4; -update noar tt set b0='FNUJ7W' where id=5; -update noar ti set b0='FNUJ7W' where id=5; -update noar tt set b1='PVOABGSIGWNVQ5Y' where id=5; -update noar ti set b1='PVOABGSIGWNVQ5Y' where id=5; -update noar tt set b2='IJS0H0N92DP9Y8SWNZBAUU' where id=5; -update noar ti set b2='IJS0H0N92DP9Y8SWNZBAUU' where id=5; -update noar tt set b0='AGZHX' where id=6; -update noar ti set b0='AGZHX' where id=6; -update noar tt set b1='KPT3LZVGI' where id=6; -update noar ti set b1='KPT3LZVGI' where id=6; -update noar tt set b2='TD60T4QZJNAGLC1UE299XV' where id=6; -update noar ti set b2='TD60T4QZJNAGLC1UE299XV' where id=6; -update noar tt set b0='NK7ZXDZGGHJ531MUPCB13' where id=7; -update noar ti set b0='NK7ZXDZGGHJ531MUPCB13' where id=7; -update noar tt set b1='789A10YLUFH44S' where id=7; -update noar ti set b1='789A10YLUFH44S' where id=7; -update noar tt set b2='2ZBHBA8PDC7T0RZ93T' where id=7; -update noar ti set b2='2ZBHBA8PDC7T0RZ93T' where id=7; -update noar tt set b0='7XYYW' where id=8; -update noar ti set b0='7XYYW' where id=8; -update noar tt set b1='EJJ' where id=8; -update noar ti set b1='EJJ' where id=8; -update noar tt set b2='TOG0E6BYRKJV' where id=8; -update noar ti set b2='TOG0E6BYRKJV' where id=8; -update noar tt set b0='P94KRHR' where id=9; -update noar ti set b0='P94KRHR' where id=9; -update noar tt set b1='WDGKG7UBRX3FKBC2HR' where id=9; -update noar ti set b1='WDGKG7UBRX3FKBC2HR' where id=9; -update noar tt set b2='HDRRZ8MNM2YQ5LDTS' where id=9; -update noar ti set b2='HDRRZ8MNM2YQ5LDTS' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 tinyblob not null, -b1 mediumblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='LR1F2C5AYWHSULZV972FP0LNDTQ93UEY' where id=1; -update noar ti set b0='LR1F2C5AYWHSULZV972FP0LNDTQ93UEY' where id=1; -update noar tt set b1='VNS2FD255YHT737ZJAXMC56' where id=1; -update noar ti set b1='VNS2FD255YHT737ZJAXMC56' where id=1; -update noar tt set b2='WMCUL9CKIUUL29E11KVCAAB0B' where id=1; -update noar ti set b2='WMCUL9CKIUUL29E11KVCAAB0B' where id=1; -update noar tt set b0='HKU9TSDFCW83P4ADM91QT2SVRQMVV' where id=2; -update noar ti set b0='HKU9TSDFCW83P4ADM91QT2SVRQMVV' where id=2; -update noar tt set b1='THK6Q0PI7NVU9PXBW3RK3IZ1PMB6X3' where id=2; -update noar ti set b1='THK6Q0PI7NVU9PXBW3RK3IZ1PMB6X3' where id=2; -update noar tt set b2='LLVLZ91MUSQXOXFE8BYBC2GSIU3U54XN' where id=2; -update noar ti set b2='LLVLZ91MUSQXOXFE8BYBC2GSIU3U54XN' where id=2; -update noar tt set b0='8DVOSZRLWSTIK' where id=3; -update noar ti set b0='8DVOSZRLWSTIK' where id=3; -update noar tt set b1='2BGTY67YW7KX5TX1U5MD5' where id=3; -update noar ti set b1='2BGTY67YW7KX5TX1U5MD5' where id=3; -update noar tt set b2='UV9UNZDQECM0N2' where id=3; -update noar ti set b2='UV9UNZDQECM0N2' where id=3; -update noar tt set b0='OYXPNG3IALFMOKKTKBZF' where id=4; -update noar ti set b0='OYXPNG3IALFMOKKTKBZF' where id=4; -update noar tt set b1='YEPI66UUA1A240GD48' where id=4; -update noar ti set b1='YEPI66UUA1A240GD48' where id=4; -update noar tt set b2='HE4J4W7ZRZWLZI26XR23' where id=4; -update noar ti set b2='HE4J4W7ZRZWLZI26XR23' where id=4; -update noar tt set b0='130E6Y38TW24D082' where id=5; -update noar ti set b0='130E6Y38TW24D082' where id=5; -update noar tt set b1='VG018IS8ZQN1D' where id=5; -update noar ti set b1='VG018IS8ZQN1D' where id=5; -update noar tt set b2='QH6X8N45BQEG6FD4XHGD2JRAZGN6W6' where id=5; -update noar ti set b2='QH6X8N45BQEG6FD4XHGD2JRAZGN6W6' where id=5; -update noar tt set b0='HZJNJ9QPUC94J' where id=6; -update noar ti set b0='HZJNJ9QPUC94J' where id=6; -update noar tt set b1='12AQKBWP7' where id=6; -update noar ti set b1='12AQKBWP7' where id=6; -update noar tt set b2='LDOGKBAG57B7UCCNAD56V' where id=6; -update noar ti set b2='LDOGKBAG57B7UCCNAD56V' where id=6; -update noar tt set b0='M72' where id=7; -update noar ti set b0='M72' where id=7; -update noar tt set b1='13W65YYJOH49XZ8LE' where id=7; -update noar ti set b1='13W65YYJOH49XZ8LE' where id=7; -update noar tt set b2='CFCY' where id=7; -update noar ti set b2='CFCY' where id=7; -update noar tt set b0='K82JOXYRGMBEONIOXKGI4E3L0J' where id=8; -update noar ti set b0='K82JOXYRGMBEONIOXKGI4E3L0J' where id=8; -update noar tt set b1='BPW' where id=8; -update noar ti set b1='BPW' where id=8; -update noar tt set b2='AB3TYGHITLU260KVRVHUZSALSTLO55C' where id=8; -update noar ti set b2='AB3TYGHITLU260KVRVHUZSALSTLO55C' where id=8; -update noar tt set b0='5KSA3BQ1X1F86XAS' where id=9; -update noar ti set b0='5KSA3BQ1X1F86XAS' where id=9; -update noar tt set b1='6R689A37RVWEZ8RK4' where id=9; -update noar ti set b1='6R689A37RVWEZ8RK4' where id=9; -update noar tt set b2='249XCEBEUHQLF413TJ74LP' where id=9; -update noar ti set b2='249XCEBEUHQLF413TJ74LP' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 tinyblob null, -b1 mediumblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='VCO0JPLDALLG' where id=1; -update noar ti set b0='VCO0JPLDALLG' where id=1; -update noar tt set b1='YZ73XB0JK6XYBGSGAS9MJJ' where id=1; -update noar ti set b1='YZ73XB0JK6XYBGSGAS9MJJ' where id=1; -update noar tt set b2='DUB9P3TDVP2KEI' where id=1; -update noar ti set b2='DUB9P3TDVP2KEI' where id=1; -update noar tt set b0='L1X84LWN8QRDM' where id=2; -update noar ti set b0='L1X84LWN8QRDM' where id=2; -update noar tt set b1='HOR89OUSLFZQ' where id=2; -update noar ti set b1='HOR89OUSLFZQ' where id=2; -update noar tt set b2='II07KOFF5BETPB24O77O8Z' where id=2; -update noar ti set b2='II07KOFF5BETPB24O77O8Z' where id=2; -update noar tt set b0='3C5G9CY6G9BZ50KLHRYE' where id=3; -update noar ti set b0='3C5G9CY6G9BZ50KLHRYE' where id=3; -update noar tt set b1='BOT9A33IKQNQ' where id=3; -update noar ti set b1='BOT9A33IKQNQ' where id=3; -update noar tt set b2='19HXK4IFAMY409SFK00ZPMG' where id=3; -update noar ti set b2='19HXK4IFAMY409SFK00ZPMG' where id=3; -update noar tt set b0='A9MNK5MS60QKEJCRAGF6H55' where id=4; -update noar ti set b0='A9MNK5MS60QKEJCRAGF6H55' where id=4; -update noar tt set b1='BFVYS6M7OO494V6SIV8O7A' where id=4; -update noar ti set b1='BFVYS6M7OO494V6SIV8O7A' where id=4; -update noar tt set b2='Q0ZJKOUJV2Y8WFFYIMV20VKZHASNYL7' where id=4; -update noar ti set b2='Q0ZJKOUJV2Y8WFFYIMV20VKZHASNYL7' where id=4; -update noar tt set b0='YQ5CWFGV4LA5YU' where id=5; -update noar ti set b0='YQ5CWFGV4LA5YU' where id=5; -update noar tt set b1='3VG46KQDCT6EZFRFCT93OGBYP' where id=5; -update noar ti set b1='3VG46KQDCT6EZFRFCT93OGBYP' where id=5; -update noar tt set b2='L0H' where id=5; -update noar ti set b2='L0H' where id=5; -update noar tt set b0='58WDO1GR881BAT6VMOE0JAIO1U8ATM' where id=6; -update noar ti set b0='58WDO1GR881BAT6VMOE0JAIO1U8ATM' where id=6; -update noar tt set b1='W04PPC20CNITELJ24TJE9' where id=6; -update noar ti set b1='W04PPC20CNITELJ24TJE9' where id=6; -update noar tt set b2='FKO06Y1WWP9EF9231X8FSOF' where id=6; -update noar ti set b2='FKO06Y1WWP9EF9231X8FSOF' where id=6; -update noar tt set b0='6YV3CFTPOQMYFJAP74132DZ' where id=7; -update noar ti set b0='6YV3CFTPOQMYFJAP74132DZ' where id=7; -update noar tt set b1='NPZCGPF1KDZAZ8THVONNE' where id=7; -update noar ti set b1='NPZCGPF1KDZAZ8THVONNE' where id=7; -update noar tt set b2='FXFENBCXULQ6THLA5N1RKX' where id=7; -update noar ti set b2='FXFENBCXULQ6THLA5N1RKX' where id=7; -update noar tt set b0='Q6FWAJY98GNLU8RH4' where id=8; -update noar ti set b0='Q6FWAJY98GNLU8RH4' where id=8; -update noar tt set b1='38ZHPSGDNKDMVCDJ4SV0LLKGS' where id=8; -update noar ti set b1='38ZHPSGDNKDMVCDJ4SV0LLKGS' where id=8; -update noar tt set b2='X8P14PZT9PTRVF' where id=8; -update noar ti set b2='X8P14PZT9PTRVF' where id=8; -update noar tt set b0='SDRKTAPHLVRD13SOAKS0WRCE' where id=9; -update noar ti set b0='SDRKTAPHLVRD13SOAKS0WRCE' where id=9; -update noar tt set b1='XXCT9B8IUTBHFEMQ7TH6L30XK9CP5' where id=9; -update noar ti set b1='XXCT9B8IUTBHFEMQ7TH6L30XK9CP5' where id=9; -update noar tt set b2='DC0L9V' where id=9; -update noar ti set b2='DC0L9V' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 tinyblob not null, -b1 mediumblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='8H5QEMP8Z93WE6J6H244WHNPLMNYIYA' where id=1; -update noar ti set b0='8H5QEMP8Z93WE6J6H244WHNPLMNYIYA' where id=1; -update noar tt set b1='M3Y4OT4' where id=1; -update noar ti set b1='M3Y4OT4' where id=1; -update noar tt set b2='0YFUJA8U3TZOPC6RXLJ3F69ZUPZYQPT' where id=1; -update noar ti set b2='0YFUJA8U3TZOPC6RXLJ3F69ZUPZYQPT' where id=1; -update noar tt set b0='FGGBOVA2XVGBH1E42QILO1N1BQ8CXBZI' where id=2; -update noar ti set b0='FGGBOVA2XVGBH1E42QILO1N1BQ8CXBZI' where id=2; -update noar tt set b1='VJ3D0R0JKTQ' where id=2; -update noar ti set b1='VJ3D0R0JKTQ' where id=2; -update noar tt set b2='8H8MPL0OG2CJJV5OQX05TNSUDVQL' where id=2; -update noar ti set b2='8H8MPL0OG2CJJV5OQX05TNSUDVQL' where id=2; -update noar tt set b0='6L12YITZKF4LDG44HCUIII78K' where id=3; -update noar ti set b0='6L12YITZKF4LDG44HCUIII78K' where id=3; -update noar tt set b1='WEX3OO556LIWHS8DPO6BBYTUY2X2' where id=3; -update noar ti set b1='WEX3OO556LIWHS8DPO6BBYTUY2X2' where id=3; -update noar tt set b2='NW' where id=3; -update noar ti set b2='NW' where id=3; -update noar tt set b0='MYDT5X143' where id=4; -update noar ti set b0='MYDT5X143' where id=4; -update noar tt set b1='04WKK4YFP4C807FZNQZPSVT' where id=4; -update noar ti set b1='04WKK4YFP4C807FZNQZPSVT' where id=4; -update noar tt set b2='R92M8YAE9YHF8JWHTU3YU' where id=4; -update noar ti set b2='R92M8YAE9YHF8JWHTU3YU' where id=4; -update noar tt set b0='PSFXPY89A39M0' where id=5; -update noar ti set b0='PSFXPY89A39M0' where id=5; -update noar tt set b1='T9QQ2P57OU67CJY' where id=5; -update noar ti set b1='T9QQ2P57OU67CJY' where id=5; -update noar tt set b2='MGYSY6VJUR4' where id=5; -update noar ti set b2='MGYSY6VJUR4' where id=5; -update noar tt set b0='8W37RYQ4JM9ITCP10PFJ5U2' where id=6; -update noar ti set b0='8W37RYQ4JM9ITCP10PFJ5U2' where id=6; -update noar tt set b1='H5O79F36HZS' where id=6; -update noar ti set b1='H5O79F36HZS' where id=6; -update noar tt set b2='WB9' where id=6; -update noar ti set b2='WB9' where id=6; -update noar tt set b0='AK7WTU9IVQNJXCE66XHKHYDQN0OE' where id=7; -update noar ti set b0='AK7WTU9IVQNJXCE66XHKHYDQN0OE' where id=7; -update noar tt set b1='UCJEYUVAOSM1UFXZPKPLOK4KOBFNLXP' where id=7; -update noar ti set b1='UCJEYUVAOSM1UFXZPKPLOK4KOBFNLXP' where id=7; -update noar tt set b2='23WBK' where id=7; -update noar ti set b2='23WBK' where id=7; -update noar tt set b0='Q276ZA93FRTBQNPYFWBI4Y2VF7N3' where id=8; -update noar ti set b0='Q276ZA93FRTBQNPYFWBI4Y2VF7N3' where id=8; -update noar tt set b1='97BBSW4XFX1C95TLO1T1LRAZLQ9NFN5A' where id=8; -update noar ti set b1='97BBSW4XFX1C95TLO1T1LRAZLQ9NFN5A' where id=8; -update noar tt set b2='DUKXEJK0JAC6W62BTZ5E' where id=8; -update noar ti set b2='DUKXEJK0JAC6W62BTZ5E' where id=8; -update noar tt set b0='M49S057P13EDI3DGCUS6UTA9N' where id=9; -update noar ti set b0='M49S057P13EDI3DGCUS6UTA9N' where id=9; -update noar tt set b1='BIT6W9BP45A04HII58G' where id=9; -update noar ti set b1='BIT6W9BP45A04HII58G' where id=9; -update noar tt set b2='0X24QVI' where id=9; -update noar ti set b2='0X24QVI' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 tinyblob null, -b1 mediumblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='RC3FJ0G' where id=1; -update noar ti set b0='RC3FJ0G' where id=1; -update noar tt set b1='4LWJ05NF59SO8A7N55B' where id=1; -update noar ti set b1='4LWJ05NF59SO8A7N55B' where id=1; -update noar tt set b2='V388YCB879EAURE' where id=1; -update noar ti set b2='V388YCB879EAURE' where id=1; -update noar tt set b0='GUUFRAJ' where id=2; -update noar ti set b0='GUUFRAJ' where id=2; -update noar tt set b1='YISROZ786YAUVSM' where id=2; -update noar ti set b1='YISROZ786YAUVSM' where id=2; -update noar tt set b2='FZ779HQ5MV1' where id=2; -update noar ti set b2='FZ779HQ5MV1' where id=2; -update noar tt set b0='TSXHOQGC4MOLERHFF7XCTKZK9U0' where id=3; -update noar ti set b0='TSXHOQGC4MOLERHFF7XCTKZK9U0' where id=3; -update noar tt set b1='TP9FIWYOXXOORH7ZFFT9X2UXJJR' where id=3; -update noar ti set b1='TP9FIWYOXXOORH7ZFFT9X2UXJJR' where id=3; -update noar tt set b2='ORZ37L3X9H101WX' where id=3; -update noar ti set b2='ORZ37L3X9H101WX' where id=3; -update noar tt set b0='8' where id=4; -update noar ti set b0='8' where id=4; -update noar tt set b1='QHVO7KU808904CP7MB503ELDJ79YKZ' where id=4; -update noar ti set b1='QHVO7KU808904CP7MB503ELDJ79YKZ' where id=4; -update noar tt set b2='ED0USKHRYPZWWNOHR6BJ' where id=4; -update noar ti set b2='ED0USKHRYPZWWNOHR6BJ' where id=4; -update noar tt set b0='F7UPEJ6THCHF' where id=5; -update noar ti set b0='F7UPEJ6THCHF' where id=5; -update noar tt set b1='UVGYAJTXTSD16SOSTB03' where id=5; -update noar ti set b1='UVGYAJTXTSD16SOSTB03' where id=5; -update noar tt set b2='382KK8' where id=5; -update noar ti set b2='382KK8' where id=5; -update noar tt set b0='ATAP386S4Q7XL5' where id=6; -update noar ti set b0='ATAP386S4Q7XL5' where id=6; -update noar tt set b1='J' where id=6; -update noar ti set b1='J' where id=6; -update noar tt set b2='QWB7VVS8VSVMWM' where id=6; -update noar ti set b2='QWB7VVS8VSVMWM' where id=6; -update noar tt set b0='Q42T35O3MXCHH0XUGPO0BE1T2Z3Y25I9' where id=7; -update noar ti set b0='Q42T35O3MXCHH0XUGPO0BE1T2Z3Y25I9' where id=7; -update noar tt set b1='VD5W0ZS' where id=7; -update noar ti set b1='VD5W0ZS' where id=7; -update noar tt set b2='Q7WDRS9XBHCF' where id=7; -update noar ti set b2='Q7WDRS9XBHCF' where id=7; -update noar tt set b0='U6DUHCZGKKZNAANMYNVZT7SVY8' where id=8; -update noar ti set b0='U6DUHCZGKKZNAANMYNVZT7SVY8' where id=8; -update noar tt set b1='M' where id=8; -update noar ti set b1='M' where id=8; -update noar tt set b2='3NXRJ' where id=8; -update noar ti set b2='3NXRJ' where id=8; -update noar tt set b0='99N97C7' where id=9; -update noar ti set b0='99N97C7' where id=9; -update noar tt set b1='7JKF57BEDGDX5DJ5PYV182F4Q5M8CUJ0' where id=9; -update noar ti set b1='7JKF57BEDGDX5DJ5PYV182F4Q5M8CUJ0' where id=9; -update noar tt set b2='VDB' where id=9; -update noar ti set b2='VDB' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 tinyblob not null, -b1 mediumblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='XKDY8ACXOX8ENOXXR8RYBH8FAMAL6N' where id=1; -update noar ti set b0='XKDY8ACXOX8ENOXXR8RYBH8FAMAL6N' where id=1; -update noar tt set b1='IMHPNCEL9' where id=1; -update noar ti set b1='IMHPNCEL9' where id=1; -update noar tt set b2='L7L62L800Z4WVCIHCVINV94XL' where id=1; -update noar ti set b2='L7L62L800Z4WVCIHCVINV94XL' where id=1; -update noar tt set b0='RBPSPQWGWPLTHQ6F' where id=2; -update noar ti set b0='RBPSPQWGWPLTHQ6F' where id=2; -update noar tt set b1='8W2JYOK4B3' where id=2; -update noar ti set b1='8W2JYOK4B3' where id=2; -update noar tt set b2='8RW6127MR8K3ZME6LSCPSY9QRMM' where id=2; -update noar ti set b2='8RW6127MR8K3ZME6LSCPSY9QRMM' where id=2; -update noar tt set b0='ZJFQLEMC9J3MUPKH02XRFPKJ1GPA2' where id=3; -update noar ti set b0='ZJFQLEMC9J3MUPKH02XRFPKJ1GPA2' where id=3; -update noar tt set b1='7VV561KMJX7VRDGAKBZBMPRA' where id=3; -update noar ti set b1='7VV561KMJX7VRDGAKBZBMPRA' where id=3; -update noar tt set b2='HO45A8DY59MXR' where id=3; -update noar ti set b2='HO45A8DY59MXR' where id=3; -update noar tt set b0='9YGFHMPAOJT' where id=4; -update noar ti set b0='9YGFHMPAOJT' where id=4; -update noar tt set b1='Q783BWI451RKUTIUORM0A1XH1D' where id=4; -update noar ti set b1='Q783BWI451RKUTIUORM0A1XH1D' where id=4; -update noar tt set b2='4Q4QGYUCLA8P2' where id=4; -update noar ti set b2='4Q4QGYUCLA8P2' where id=4; -update noar tt set b0='Z2LI0DW41QA3NF335ISKDALN94ID1B' where id=5; -update noar ti set b0='Z2LI0DW41QA3NF335ISKDALN94ID1B' where id=5; -update noar tt set b1='94X08DXN3JGSN6OX5TNY' where id=5; -update noar ti set b1='94X08DXN3JGSN6OX5TNY' where id=5; -update noar tt set b2='08XHC0A9QE61JNX0H8M65J85XT1RB' where id=5; -update noar ti set b2='08XHC0A9QE61JNX0H8M65J85XT1RB' where id=5; -update noar tt set b0='1FIX84TDQI' where id=6; -update noar ti set b0='1FIX84TDQI' where id=6; -update noar tt set b1='CJ' where id=6; -update noar ti set b1='CJ' where id=6; -update noar tt set b2='B3DWKDMOHVKR' where id=6; -update noar ti set b2='B3DWKDMOHVKR' where id=6; -update noar tt set b0='AAKRU7H1L5W69XQ' where id=7; -update noar ti set b0='AAKRU7H1L5W69XQ' where id=7; -update noar tt set b1='GKX5U1G9GNZ1NNM4JE' where id=7; -update noar ti set b1='GKX5U1G9GNZ1NNM4JE' where id=7; -update noar tt set b2='QZBFHDQM23R3O' where id=7; -update noar ti set b2='QZBFHDQM23R3O' where id=7; -update noar tt set b0='ZRK9EJLOLDOYIBUAJUUKO' where id=8; -update noar ti set b0='ZRK9EJLOLDOYIBUAJUUKO' where id=8; -update noar tt set b1='7XSY' where id=8; -update noar ti set b1='7XSY' where id=8; -update noar tt set b2='R996UUTNJO99CM8' where id=8; -update noar ti set b2='R996UUTNJO99CM8' where id=8; -update noar tt set b0='582YZLBRXAEEDBS' where id=9; -update noar ti set b0='582YZLBRXAEEDBS' where id=9; -update noar tt set b1='IYYTVFADGRGCWS1' where id=9; -update noar ti set b1='IYYTVFADGRGCWS1' where id=9; -update noar tt set b2='D1T' where id=9; -update noar ti set b2='D1T' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 tinyblob null, -b1 mediumblob null, -b2 text null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='WIRORQ4KM9V8XE7PMT3GTSNNMT5' where id=1; -update noar ti set b0='WIRORQ4KM9V8XE7PMT3GTSNNMT5' where id=1; -update noar tt set b1='A3251TI36XPC9HO2U' where id=1; -update noar ti set b1='A3251TI36XPC9HO2U' where id=1; -update noar tt set b2='DQUMFTXH3F8O2GAK310VY2WE7H' where id=1; -update noar ti set b2='DQUMFTXH3F8O2GAK310VY2WE7H' where id=1; -update noar tt set b0='L' where id=2; -update noar ti set b0='L' where id=2; -update noar tt set b1='64TO' where id=2; -update noar ti set b1='64TO' where id=2; -update noar tt set b2='RG5ZJ18J3T259N193KHQ' where id=2; -update noar ti set b2='RG5ZJ18J3T259N193KHQ' where id=2; -update noar tt set b0='3KNWN' where id=3; -update noar ti set b0='3KNWN' where id=3; -update noar tt set b1='U8CKKEJT3P6QOFST681FF7' where id=3; -update noar ti set b1='U8CKKEJT3P6QOFST681FF7' where id=3; -update noar tt set b2='NUFA1BREMJPZCKO4RNL4EYCENJ' where id=3; -update noar ti set b2='NUFA1BREMJPZCKO4RNL4EYCENJ' where id=3; -update noar tt set b0='UZYNXGAF' where id=4; -update noar ti set b0='UZYNXGAF' where id=4; -update noar tt set b1='SIVSRI6XXDU' where id=4; -update noar ti set b1='SIVSRI6XXDU' where id=4; -update noar tt set b2='B1V3JA96D' where id=4; -update noar ti set b2='B1V3JA96D' where id=4; -update noar tt set b0='LBU' where id=5; -update noar ti set b0='LBU' where id=5; -update noar tt set b1='R' where id=5; -update noar ti set b1='R' where id=5; -update noar tt set b2='8XXOBX49KD' where id=5; -update noar ti set b2='8XXOBX49KD' where id=5; -update noar tt set b0='0K0RQ1EO3VW0H1L218H8EN64Q' where id=6; -update noar ti set b0='0K0RQ1EO3VW0H1L218H8EN64Q' where id=6; -update noar tt set b1='EZT3PQVTFNRSHIVV5ZCXJXEMG12U1NYN' where id=6; -update noar ti set b1='EZT3PQVTFNRSHIVV5ZCXJXEMG12U1NYN' where id=6; -update noar tt set b2='AY2PLXYBQJBXDF8Z' where id=6; -update noar ti set b2='AY2PLXYBQJBXDF8Z' where id=6; -update noar tt set b0='VF4ULFAUOSVG7ZDTKQ' where id=7; -update noar ti set b0='VF4ULFAUOSVG7ZDTKQ' where id=7; -update noar tt set b1='C9A3AP6' where id=7; -update noar ti set b1='C9A3AP6' where id=7; -update noar tt set b2='8LXTB1' where id=7; -update noar ti set b2='8LXTB1' where id=7; -update noar tt set b0='ZDO9R2W21' where id=8; -update noar ti set b0='ZDO9R2W21' where id=8; -update noar tt set b1='F3R362HRMBMV3OV4WAG601DQQK' where id=8; -update noar ti set b1='F3R362HRMBMV3OV4WAG601DQQK' where id=8; -update noar tt set b2='XERMA9UCH8F1F2P2282VK' where id=8; -update noar ti set b2='XERMA9UCH8F1F2P2282VK' where id=8; -update noar tt set b0='B5CXB4Z1QOTWCHZQ22WV7' where id=9; -update noar ti set b0='B5CXB4Z1QOTWCHZQ22WV7' where id=9; -update noar tt set b1='AUKE2FUDO4ZXJ4JW8MTS8' where id=9; -update noar ti set b1='AUKE2FUDO4ZXJ4JW8MTS8' where id=9; -update noar tt set b2='M9Z4LORON659SNL' where id=9; -update noar ti set b2='M9Z4LORON659SNL' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 tinyblob not null, -b1 mediumblob not null, -b2 text not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='58VWJ07B' where id=1; -update noar ti set b0='58VWJ07B' where id=1; -update noar tt set b1='S962AC7' where id=1; -update noar ti set b1='S962AC7' where id=1; -update noar tt set b2='G4SZ7R35GUN3P26A' where id=1; -update noar ti set b2='G4SZ7R35GUN3P26A' where id=1; -update noar tt set b0='ALUHYRRH8HKH4Z51VK0I' where id=2; -update noar ti set b0='ALUHYRRH8HKH4Z51VK0I' where id=2; -update noar tt set b1='M3I11KSUB9' where id=2; -update noar ti set b1='M3I11KSUB9' where id=2; -update noar tt set b2='2T5TKRLXULPZ22T5STNLTUMQHKWEB1E' where id=2; -update noar ti set b2='2T5TKRLXULPZ22T5STNLTUMQHKWEB1E' where id=2; -update noar tt set b0='7CF' where id=3; -update noar ti set b0='7CF' where id=3; -update noar tt set b1='GTRZCS6U26EZX6BCEK9NO73M2' where id=3; -update noar ti set b1='GTRZCS6U26EZX6BCEK9NO73M2' where id=3; -update noar tt set b2='KDE' where id=3; -update noar ti set b2='KDE' where id=3; -update noar tt set b0='GLZV5M1WQFPJ3' where id=4; -update noar ti set b0='GLZV5M1WQFPJ3' where id=4; -update noar tt set b1='2GKJLOHPWK3PEE6' where id=4; -update noar ti set b1='2GKJLOHPWK3PEE6' where id=4; -update noar tt set b2='VCKWGAFKWEOFL1JQ9L' where id=4; -update noar ti set b2='VCKWGAFKWEOFL1JQ9L' where id=4; -update noar tt set b0='AX7RMVA9NQ61X7ZXVDCP2FI6L0PT' where id=5; -update noar ti set b0='AX7RMVA9NQ61X7ZXVDCP2FI6L0PT' where id=5; -update noar tt set b1='IMF0L3S64G6PUKRGFM2' where id=5; -update noar ti set b1='IMF0L3S64G6PUKRGFM2' where id=5; -update noar tt set b2='9LSKI5BR7DH3VQRLPW74OTLS' where id=5; -update noar ti set b2='9LSKI5BR7DH3VQRLPW74OTLS' where id=5; -update noar tt set b0='GQS3EC50U3BVCM6H3H4ZLYKI21C5' where id=6; -update noar ti set b0='GQS3EC50U3BVCM6H3H4ZLYKI21C5' where id=6; -update noar tt set b1='SAIMB8RE' where id=6; -update noar ti set b1='SAIMB8RE' where id=6; -update noar tt set b2='LBJJQ7MRSG8G0F38CDEB' where id=6; -update noar ti set b2='LBJJQ7MRSG8G0F38CDEB' where id=6; -update noar tt set b0='3D9XWMT0JF2Y5H2JLBTLZGP5K05J11' where id=7; -update noar ti set b0='3D9XWMT0JF2Y5H2JLBTLZGP5K05J11' where id=7; -update noar tt set b1='81FU' where id=7; -update noar ti set b1='81FU' where id=7; -update noar tt set b2='218UUTD8T4' where id=7; -update noar ti set b2='218UUTD8T4' where id=7; -update noar tt set b0='2K' where id=8; -update noar ti set b0='2K' where id=8; -update noar tt set b1='B2TWOZWNY6EAVO5KY8' where id=8; -update noar ti set b1='B2TWOZWNY6EAVO5KY8' where id=8; -update noar tt set b2='SPJCRCLHK5IPYSCN8CZR8WGRPD' where id=8; -update noar ti set b2='SPJCRCLHK5IPYSCN8CZR8WGRPD' where id=8; -update noar tt set b0='BYRBSWCWWWYLF5TXB6HHTVNU' where id=9; -update noar ti set b0='BYRBSWCWWWYLF5TXB6HHTVNU' where id=9; -update noar tt set b1='02G6UOLOEICXBBVFFG32U8PJKXKK6BMX' where id=9; -update noar ti set b1='02G6UOLOEICXBBVFFG32U8PJKXKK6BMX' where id=9; -update noar tt set b2='MP2GH63NZ64MDCC6YPBO1549AHVH3' where id=9; -update noar ti set b2='MP2GH63NZ64MDCC6YPBO1549AHVH3' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 tinyblob null, -b1 longblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='WXA7SP1HUDKEAHG00OY' where id=1; -update noar ti set b0='WXA7SP1HUDKEAHG00OY' where id=1; -update noar tt set b1='D4Y89QEGNY7DALJV2CDG' where id=1; -update noar ti set b1='D4Y89QEGNY7DALJV2CDG' where id=1; -update noar tt set b2='86CBXEO2MDCVKW52IWBJBFOE93W1' where id=1; -update noar ti set b2='86CBXEO2MDCVKW52IWBJBFOE93W1' where id=1; -update noar tt set b0='W0PGLR2FOPV8YF' where id=2; -update noar ti set b0='W0PGLR2FOPV8YF' where id=2; -update noar tt set b1='4D2LGR9Y' where id=2; -update noar ti set b1='4D2LGR9Y' where id=2; -update noar tt set b2='U7OYN1T7OI2895OSPWD' where id=2; -update noar ti set b2='U7OYN1T7OI2895OSPWD' where id=2; -update noar tt set b0='HJVNM9XM6PH7IEBZPG08CSM' where id=3; -update noar ti set b0='HJVNM9XM6PH7IEBZPG08CSM' where id=3; -update noar tt set b1='45PYSB58HTPHPWK60B4ORHPVJKVOJ' where id=3; -update noar ti set b1='45PYSB58HTPHPWK60B4ORHPVJKVOJ' where id=3; -update noar tt set b2='PCEJ7C' where id=3; -update noar ti set b2='PCEJ7C' where id=3; -update noar tt set b0='0ZCFY1TD0' where id=4; -update noar ti set b0='0ZCFY1TD0' where id=4; -update noar tt set b1='A5Y7D2VYANTWMF6RNS2DZBWYQ28' where id=4; -update noar ti set b1='A5Y7D2VYANTWMF6RNS2DZBWYQ28' where id=4; -update noar tt set b2='8L6RY6LDAOPWA' where id=4; -update noar ti set b2='8L6RY6LDAOPWA' where id=4; -update noar tt set b0='8OO5F3EUNAG0XNIWH36Q6O75O7A7' where id=5; -update noar ti set b0='8OO5F3EUNAG0XNIWH36Q6O75O7A7' where id=5; -update noar tt set b1='OLX5GHAATYOGGTF0PE2' where id=5; -update noar ti set b1='OLX5GHAATYOGGTF0PE2' where id=5; -update noar tt set b2='PQ7HLR2YXZ6BYEJF63CE' where id=5; -update noar ti set b2='PQ7HLR2YXZ6BYEJF63CE' where id=5; -update noar tt set b0='6H5S8G6F0F1F3W9PBUD8I0U' where id=6; -update noar ti set b0='6H5S8G6F0F1F3W9PBUD8I0U' where id=6; -update noar tt set b1='3W70ZQE2YSU' where id=6; -update noar ti set b1='3W70ZQE2YSU' where id=6; -update noar tt set b2='4' where id=6; -update noar ti set b2='4' where id=6; -update noar tt set b0='F93UERCGUA5H31QTL' where id=7; -update noar ti set b0='F93UERCGUA5H31QTL' where id=7; -update noar tt set b1='GMNM73XZLCJIF66AM6GZ14C6GX' where id=7; -update noar ti set b1='GMNM73XZLCJIF66AM6GZ14C6GX' where id=7; -update noar tt set b2='4OLM1P4' where id=7; -update noar ti set b2='4OLM1P4' where id=7; -update noar tt set b0='MW7YIKK8E2B78OGCH8Q8CQRMOQYG' where id=8; -update noar ti set b0='MW7YIKK8E2B78OGCH8Q8CQRMOQYG' where id=8; -update noar tt set b1='F84QH8AIP9Y83THER' where id=8; -update noar ti set b1='F84QH8AIP9Y83THER' where id=8; -update noar tt set b2='WDLC7KHUM5KDASBWVT7HTHT' where id=8; -update noar ti set b2='WDLC7KHUM5KDASBWVT7HTHT' where id=8; -update noar tt set b0='A6F58NLMH1' where id=9; -update noar ti set b0='A6F58NLMH1' where id=9; -update noar tt set b1='QW6F011ZNG4MLIQ53PHXSCHVEPLSDG5' where id=9; -update noar ti set b1='QW6F011ZNG4MLIQ53PHXSCHVEPLSDG5' where id=9; -update noar tt set b2='U89X7VALQUXVDMCJ0F3HV2D' where id=9; -update noar ti set b2='U89X7VALQUXVDMCJ0F3HV2D' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 tinyblob not null, -b1 longblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='166MH3AEDCXCP3O7GRTTQZRO6BJKU19' where id=1; -update noar ti set b0='166MH3AEDCXCP3O7GRTTQZRO6BJKU19' where id=1; -update noar tt set b1='3C396EJJX7P' where id=1; -update noar ti set b1='3C396EJJX7P' where id=1; -update noar tt set b2='78AI3H1XRXU4' where id=1; -update noar ti set b2='78AI3H1XRXU4' where id=1; -update noar tt set b0='7QA9XB7YAEA05MCW144SI' where id=2; -update noar ti set b0='7QA9XB7YAEA05MCW144SI' where id=2; -update noar tt set b1='5OJIX' where id=2; -update noar ti set b1='5OJIX' where id=2; -update noar tt set b2='9RW4R36P4ASMH3S' where id=2; -update noar ti set b2='9RW4R36P4ASMH3S' where id=2; -update noar tt set b0='9' where id=3; -update noar ti set b0='9' where id=3; -update noar tt set b1='M0IC' where id=3; -update noar ti set b1='M0IC' where id=3; -update noar tt set b2='2SHOH1OK9' where id=3; -update noar ti set b2='2SHOH1OK9' where id=3; -update noar tt set b0='LQXJ0MK7LTPFDU8ZUG24JK6D' where id=4; -update noar ti set b0='LQXJ0MK7LTPFDU8ZUG24JK6D' where id=4; -update noar tt set b1='9US7U8O3RXETUBRH4W' where id=4; -update noar ti set b1='9US7U8O3RXETUBRH4W' where id=4; -update noar tt set b2='OJXDY' where id=4; -update noar ti set b2='OJXDY' where id=4; -update noar tt set b0='N' where id=5; -update noar ti set b0='N' where id=5; -update noar tt set b1='M7N7HKM5T05ZIUCV9BER' where id=5; -update noar ti set b1='M7N7HKM5T05ZIUCV9BER' where id=5; -update noar tt set b2='53' where id=5; -update noar ti set b2='53' where id=5; -update noar tt set b0='ELN3RS21Y94U3P6O9L81G7ANC' where id=6; -update noar ti set b0='ELN3RS21Y94U3P6O9L81G7ANC' where id=6; -update noar tt set b1='27XQXUH7BQNE' where id=6; -update noar ti set b1='27XQXUH7BQNE' where id=6; -update noar tt set b2='1' where id=6; -update noar ti set b2='1' where id=6; -update noar tt set b0='NLML8' where id=7; -update noar ti set b0='NLML8' where id=7; -update noar tt set b1='JJIITAXW2HMSZ7L5UXR1QRR' where id=7; -update noar ti set b1='JJIITAXW2HMSZ7L5UXR1QRR' where id=7; -update noar tt set b2='TEWE7JN90' where id=7; -update noar ti set b2='TEWE7JN90' where id=7; -update noar tt set b0='U0AU7M00Z65JGLYM41VEC8V23V' where id=8; -update noar ti set b0='U0AU7M00Z65JGLYM41VEC8V23V' where id=8; -update noar tt set b1='QK' where id=8; -update noar ti set b1='QK' where id=8; -update noar tt set b2='TU6HO1ZWTHP0SQQOD7UKZK047' where id=8; -update noar ti set b2='TU6HO1ZWTHP0SQQOD7UKZK047' where id=8; -update noar tt set b0='YQ245XZBQLDXKCR' where id=9; -update noar ti set b0='YQ245XZBQLDXKCR' where id=9; -update noar tt set b1='VYJ3P7V5BWD6P908EKQEAQRS32HYB' where id=9; -update noar ti set b1='VYJ3P7V5BWD6P908EKQEAQRS32HYB' where id=9; -update noar tt set b2='OW6OAAE6YJMQ9QID' where id=9; -update noar ti set b2='OW6OAAE6YJMQ9QID' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 tinyblob null, -b1 longblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='3FYCUHVXJUWWR' where id=1; -update noar ti set b0='3FYCUHVXJUWWR' where id=1; -update noar tt set b1='OLSES8XDHIV' where id=1; -update noar ti set b1='OLSES8XDHIV' where id=1; -update noar tt set b2='T0KK244ZUAM9X84VJTUWY5IMH4' where id=1; -update noar ti set b2='T0KK244ZUAM9X84VJTUWY5IMH4' where id=1; -update noar tt set b0='A1SON62ULFVY1P' where id=2; -update noar ti set b0='A1SON62ULFVY1P' where id=2; -update noar tt set b1='BTQW520G58GQ1KN15C6GWPJ4DVH7W' where id=2; -update noar ti set b1='BTQW520G58GQ1KN15C6GWPJ4DVH7W' where id=2; -update noar tt set b2='0B' where id=2; -update noar ti set b2='0B' where id=2; -update noar tt set b0='5M996XG24LKZAC4L90IUW9' where id=3; -update noar ti set b0='5M996XG24LKZAC4L90IUW9' where id=3; -update noar tt set b1='QRJX14P243BP5E9WIAC' where id=3; -update noar ti set b1='QRJX14P243BP5E9WIAC' where id=3; -update noar tt set b2='QFXCMAXUBZTY6VK8GR3OXDJAPLE3RRP3' where id=3; -update noar ti set b2='QFXCMAXUBZTY6VK8GR3OXDJAPLE3RRP3' where id=3; -update noar tt set b0='Q8QFM1L5UOL36CL' where id=4; -update noar ti set b0='Q8QFM1L5UOL36CL' where id=4; -update noar tt set b1='SU6ADSJIBUKCP72OO44YJ' where id=4; -update noar ti set b1='SU6ADSJIBUKCP72OO44YJ' where id=4; -update noar tt set b2='T5BF45JTPVXPC2WQ4YUPB' where id=4; -update noar ti set b2='T5BF45JTPVXPC2WQ4YUPB' where id=4; -update noar tt set b0='OLQ2KW8KPS8X' where id=5; -update noar ti set b0='OLQ2KW8KPS8X' where id=5; -update noar tt set b1='LJPWC23XJT667T09MOI96' where id=5; -update noar ti set b1='LJPWC23XJT667T09MOI96' where id=5; -update noar tt set b2='FUU3MAMEX1QB9SBEO' where id=5; -update noar ti set b2='FUU3MAMEX1QB9SBEO' where id=5; -update noar tt set b0='84' where id=6; -update noar ti set b0='84' where id=6; -update noar tt set b1='O9SRSGIUITLXUFJIULAGGTVIBP' where id=6; -update noar ti set b1='O9SRSGIUITLXUFJIULAGGTVIBP' where id=6; -update noar tt set b2='TY7RHZI1PEJIP5D4S' where id=6; -update noar ti set b2='TY7RHZI1PEJIP5D4S' where id=6; -update noar tt set b0='BG6MCPR' where id=7; -update noar ti set b0='BG6MCPR' where id=7; -update noar tt set b1='GURK96DSFMDT5CR' where id=7; -update noar ti set b1='GURK96DSFMDT5CR' where id=7; -update noar tt set b2='M3D4NOFLZK3XF8' where id=7; -update noar ti set b2='M3D4NOFLZK3XF8' where id=7; -update noar tt set b0='6RGFQ9C5PC' where id=8; -update noar ti set b0='6RGFQ9C5PC' where id=8; -update noar tt set b1='TCC0934YN3IWLMSUB3' where id=8; -update noar ti set b1='TCC0934YN3IWLMSUB3' where id=8; -update noar tt set b2='AQ3' where id=8; -update noar ti set b2='AQ3' where id=8; -update noar tt set b0='PEM68STZNX358JKECE712MM' where id=9; -update noar ti set b0='PEM68STZNX358JKECE712MM' where id=9; -update noar tt set b1='IXNHU' where id=9; -update noar ti set b1='IXNHU' where id=9; -update noar tt set b2='EV6BAVDVJGXC8TN5XMG' where id=9; -update noar ti set b2='EV6BAVDVJGXC8TN5XMG' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 tinyblob not null, -b1 longblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='SH93XMF3AHVZ4S' where id=1; -update noar ti set b0='SH93XMF3AHVZ4S' where id=1; -update noar tt set b1='7IU3NH' where id=1; -update noar ti set b1='7IU3NH' where id=1; -update noar tt set b2='9PHIRPDK2' where id=1; -update noar ti set b2='9PHIRPDK2' where id=1; -update noar tt set b0='8ND8GZP1VYMHMKLEH72Y6Z' where id=2; -update noar ti set b0='8ND8GZP1VYMHMKLEH72Y6Z' where id=2; -update noar tt set b1='5Q7RKUTRI7SXBOV7Y9HCSURX3D' where id=2; -update noar ti set b1='5Q7RKUTRI7SXBOV7Y9HCSURX3D' where id=2; -update noar tt set b2='9V8K7PXD4SK4MRED6C48D612600' where id=2; -update noar ti set b2='9V8K7PXD4SK4MRED6C48D612600' where id=2; -update noar tt set b0='3H23IVIK467' where id=3; -update noar ti set b0='3H23IVIK467' where id=3; -update noar tt set b1='S5P8VXGG5MPIAP' where id=3; -update noar ti set b1='S5P8VXGG5MPIAP' where id=3; -update noar tt set b2='AHBTX5BTTYU5DXSP7PVNPJQ7AG' where id=3; -update noar ti set b2='AHBTX5BTTYU5DXSP7PVNPJQ7AG' where id=3; -update noar tt set b0='AANIZ1153DQ3IYBONFHYGOINVXRG' where id=4; -update noar ti set b0='AANIZ1153DQ3IYBONFHYGOINVXRG' where id=4; -update noar tt set b1='LGHOP7DNLW274' where id=4; -update noar ti set b1='LGHOP7DNLW274' where id=4; -update noar tt set b2='2AW8MQLKX9V95C4KW6Y1JB2O' where id=4; -update noar ti set b2='2AW8MQLKX9V95C4KW6Y1JB2O' where id=4; -update noar tt set b0='EPOP' where id=5; -update noar ti set b0='EPOP' where id=5; -update noar tt set b1='9G76VFO821Y2W0MVN48RCBB5V3TNB7M0' where id=5; -update noar ti set b1='9G76VFO821Y2W0MVN48RCBB5V3TNB7M0' where id=5; -update noar tt set b2='L0S8WT13TWB' where id=5; -update noar ti set b2='L0S8WT13TWB' where id=5; -update noar tt set b0='IYX9EI5N6YZJT0YU7BGDTL23JXEB9D3Y' where id=6; -update noar ti set b0='IYX9EI5N6YZJT0YU7BGDTL23JXEB9D3Y' where id=6; -update noar tt set b1='G08NUJECYUQTQZHQWMPPG0GUZWTBD7MO' where id=6; -update noar ti set b1='G08NUJECYUQTQZHQWMPPG0GUZWTBD7MO' where id=6; -update noar tt set b2='YAUH1BUM' where id=6; -update noar ti set b2='YAUH1BUM' where id=6; -update noar tt set b0='IKNVP7LCTZSZ1ROPVIP4U' where id=7; -update noar ti set b0='IKNVP7LCTZSZ1ROPVIP4U' where id=7; -update noar tt set b1='GOA0QNQF2M4' where id=7; -update noar ti set b1='GOA0QNQF2M4' where id=7; -update noar tt set b2='KJU92DVMH5' where id=7; -update noar ti set b2='KJU92DVMH5' where id=7; -update noar tt set b0='9R6573CAA5Q0W6PHM39M3W7O64U2E' where id=8; -update noar ti set b0='9R6573CAA5Q0W6PHM39M3W7O64U2E' where id=8; -update noar tt set b1='OP5NZWOTR4VV80RFSWGGK2MA' where id=8; -update noar ti set b1='OP5NZWOTR4VV80RFSWGGK2MA' where id=8; -update noar tt set b2='TN' where id=8; -update noar ti set b2='TN' where id=8; -update noar tt set b0='LSHJ5C0ZL' where id=9; -update noar ti set b0='LSHJ5C0ZL' where id=9; -update noar tt set b1='7SQA3937P0D8JU9V' where id=9; -update noar ti set b1='7SQA3937P0D8JU9V' where id=9; -update noar tt set b2='VKNSLMEA7' where id=9; -update noar ti set b2='VKNSLMEA7' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 tinyblob null, -b1 longblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='OK7AIIPW4IDXD1SD' where id=1; -update noar ti set b0='OK7AIIPW4IDXD1SD' where id=1; -update noar tt set b1='VWHFAOEC53GBBJDKAIMI3QSJU' where id=1; -update noar ti set b1='VWHFAOEC53GBBJDKAIMI3QSJU' where id=1; -update noar tt set b2='PKHPS' where id=1; -update noar ti set b2='PKHPS' where id=1; -update noar tt set b0='DTYNVT00GFQEYVVJPR2HMO2L8B' where id=2; -update noar ti set b0='DTYNVT00GFQEYVVJPR2HMO2L8B' where id=2; -update noar tt set b1='54KMF19CSD9K85686IE6F' where id=2; -update noar ti set b1='54KMF19CSD9K85686IE6F' where id=2; -update noar tt set b2='Z604T31AA' where id=2; -update noar ti set b2='Z604T31AA' where id=2; -update noar tt set b0='14KAF2Q16FY8FHA7M5GM36WHGONDJT4' where id=3; -update noar ti set b0='14KAF2Q16FY8FHA7M5GM36WHGONDJT4' where id=3; -update noar tt set b1='FJH98KFN9U5FLXWQ5U6LUYDE6B' where id=3; -update noar ti set b1='FJH98KFN9U5FLXWQ5U6LUYDE6B' where id=3; -update noar tt set b2='9' where id=3; -update noar ti set b2='9' where id=3; -update noar tt set b0='YE6NHHUSRJPXSX' where id=4; -update noar ti set b0='YE6NHHUSRJPXSX' where id=4; -update noar tt set b1='BO6YJZVDZGI8NXT0G' where id=4; -update noar ti set b1='BO6YJZVDZGI8NXT0G' where id=4; -update noar tt set b2='7Z' where id=4; -update noar ti set b2='7Z' where id=4; -update noar tt set b0='YTKGJI09L4O4GM6RB84YODFW9N' where id=5; -update noar ti set b0='YTKGJI09L4O4GM6RB84YODFW9N' where id=5; -update noar tt set b1='8DYMBLB' where id=5; -update noar ti set b1='8DYMBLB' where id=5; -update noar tt set b2='FR76TS6RN' where id=5; -update noar ti set b2='FR76TS6RN' where id=5; -update noar tt set b0='XM9L24AZEQNS9U6H' where id=6; -update noar ti set b0='XM9L24AZEQNS9U6H' where id=6; -update noar tt set b1='WT' where id=6; -update noar ti set b1='WT' where id=6; -update noar tt set b2='ZI' where id=6; -update noar ti set b2='ZI' where id=6; -update noar tt set b0='ONF0G' where id=7; -update noar ti set b0='ONF0G' where id=7; -update noar tt set b1='0G0G8QIEQ' where id=7; -update noar ti set b1='0G0G8QIEQ' where id=7; -update noar tt set b2='XOZIJ2F4M1E0MT3YOBQFWGR' where id=7; -update noar ti set b2='XOZIJ2F4M1E0MT3YOBQFWGR' where id=7; -update noar tt set b0='LYMRU' where id=8; -update noar ti set b0='LYMRU' where id=8; -update noar tt set b1='KT4J557BTJVDLMO1E7P' where id=8; -update noar ti set b1='KT4J557BTJVDLMO1E7P' where id=8; -update noar tt set b2='CTJ6JJB05GO' where id=8; -update noar ti set b2='CTJ6JJB05GO' where id=8; -update noar tt set b0='HQV4GGXN4BML' where id=9; -update noar ti set b0='HQV4GGXN4BML' where id=9; -update noar tt set b1='B98RQD4K' where id=9; -update noar ti set b1='B98RQD4K' where id=9; -update noar tt set b2='A4KVWSW2BCEDPL3DJ95' where id=9; -update noar ti set b2='A4KVWSW2BCEDPL3DJ95' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 tinyblob not null, -b1 longblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='QRJR3AY1WUSN' where id=1; -update noar ti set b0='QRJR3AY1WUSN' where id=1; -update noar tt set b1='YYB7SZSQ8E06W' where id=1; -update noar ti set b1='YYB7SZSQ8E06W' where id=1; -update noar tt set b2='O' where id=1; -update noar ti set b2='O' where id=1; -update noar tt set b0='GN441L3IV50M4DPFX2' where id=2; -update noar ti set b0='GN441L3IV50M4DPFX2' where id=2; -update noar tt set b1='QZA8UWIM1PW750X8FW' where id=2; -update noar ti set b1='QZA8UWIM1PW750X8FW' where id=2; -update noar tt set b2='IWZEUOSSFDT0U1NFX5VDUWMCH' where id=2; -update noar ti set b2='IWZEUOSSFDT0U1NFX5VDUWMCH' where id=2; -update noar tt set b0='VO3Z8QO804BWD3DLVPPE8SWKG1LD' where id=3; -update noar ti set b0='VO3Z8QO804BWD3DLVPPE8SWKG1LD' where id=3; -update noar tt set b1='L5' where id=3; -update noar ti set b1='L5' where id=3; -update noar tt set b2='PDGK50QTEHWYYKN68X78YQ' where id=3; -update noar ti set b2='PDGK50QTEHWYYKN68X78YQ' where id=3; -update noar tt set b0='HLCPXHF' where id=4; -update noar ti set b0='HLCPXHF' where id=4; -update noar tt set b1='HS17C8BFK9CSYKJ5KYR' where id=4; -update noar ti set b1='HS17C8BFK9CSYKJ5KYR' where id=4; -update noar tt set b2='YPPEDN0YAO4SB2' where id=4; -update noar ti set b2='YPPEDN0YAO4SB2' where id=4; -update noar tt set b0='2UGGI' where id=5; -update noar ti set b0='2UGGI' where id=5; -update noar tt set b1='7F4UBQ' where id=5; -update noar ti set b1='7F4UBQ' where id=5; -update noar tt set b2='3R' where id=5; -update noar ti set b2='3R' where id=5; -update noar tt set b0='KP2W7G86NB3QDVVXO' where id=6; -update noar ti set b0='KP2W7G86NB3QDVVXO' where id=6; -update noar tt set b1='AXZ9VG63F' where id=6; -update noar ti set b1='AXZ9VG63F' where id=6; -update noar tt set b2='04SEY1G66F73U0Z' where id=6; -update noar ti set b2='04SEY1G66F73U0Z' where id=6; -update noar tt set b0='2K56ILPAM9IB' where id=7; -update noar ti set b0='2K56ILPAM9IB' where id=7; -update noar tt set b1='ZECBKQNED5XGPBJETYT6IU' where id=7; -update noar ti set b1='ZECBKQNED5XGPBJETYT6IU' where id=7; -update noar tt set b2='N7HH5DJIWBIXSMUPTUO9D14BIOEEZB1G' where id=7; -update noar ti set b2='N7HH5DJIWBIXSMUPTUO9D14BIOEEZB1G' where id=7; -update noar tt set b0='D31RONWAQF995FZ5L' where id=8; -update noar ti set b0='D31RONWAQF995FZ5L' where id=8; -update noar tt set b1='XBSL1F8PXC2RX2Z0U9' where id=8; -update noar ti set b1='XBSL1F8PXC2RX2Z0U9' where id=8; -update noar tt set b2='Q0ECZR5CS6JDFVJR85E6NNUXB0OVQ' where id=8; -update noar ti set b2='Q0ECZR5CS6JDFVJR85E6NNUXB0OVQ' where id=8; -update noar tt set b0='0K9' where id=9; -update noar ti set b0='0K9' where id=9; -update noar tt set b1='QRR36PG66K4G8HLBCC14B62' where id=9; -update noar ti set b1='QRR36PG66K4G8HLBCC14B62' where id=9; -update noar tt set b2='PVTZ8AN9T0BI3GX6YVWC' where id=9; -update noar ti set b2='PVTZ8AN9T0BI3GX6YVWC' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 tinyblob null, -b1 longblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='V4EXPNC4DXHNG' where id=1; -update noar ti set b0='V4EXPNC4DXHNG' where id=1; -update noar tt set b1='SVZ5L6R' where id=1; -update noar ti set b1='SVZ5L6R' where id=1; -update noar tt set b2='77UESANOA857QU' where id=1; -update noar ti set b2='77UESANOA857QU' where id=1; -update noar tt set b0='0R5' where id=2; -update noar ti set b0='0R5' where id=2; -update noar tt set b1='Z87UOK84DW2JXSH02JVOA1K1SDGH34UD' where id=2; -update noar ti set b1='Z87UOK84DW2JXSH02JVOA1K1SDGH34UD' where id=2; -update noar tt set b2='AHQRBXA0L50JMFM96SR6TRBGN45YL' where id=2; -update noar ti set b2='AHQRBXA0L50JMFM96SR6TRBGN45YL' where id=2; -update noar tt set b0='U6BQMY1WGUB4S' where id=3; -update noar ti set b0='U6BQMY1WGUB4S' where id=3; -update noar tt set b1='64S7596QB0D0XEML' where id=3; -update noar ti set b1='64S7596QB0D0XEML' where id=3; -update noar tt set b2='BQ5F' where id=3; -update noar ti set b2='BQ5F' where id=3; -update noar tt set b0='Q3QASTAZZYK9QNAVIPGHAJYW7' where id=4; -update noar ti set b0='Q3QASTAZZYK9QNAVIPGHAJYW7' where id=4; -update noar tt set b1='J0HWO627U6P8HMRESVK6' where id=4; -update noar ti set b1='J0HWO627U6P8HMRESVK6' where id=4; -update noar tt set b2='O0ENHDV' where id=4; -update noar ti set b2='O0ENHDV' where id=4; -update noar tt set b0='C893AUEKROVS5' where id=5; -update noar ti set b0='C893AUEKROVS5' where id=5; -update noar tt set b1='6NR' where id=5; -update noar ti set b1='6NR' where id=5; -update noar tt set b2='8QC5NTX4C8SWCKT0P5ZFY44AN' where id=5; -update noar ti set b2='8QC5NTX4C8SWCKT0P5ZFY44AN' where id=5; -update noar tt set b0='KE1TGBH7FLN3QT7PWW' where id=6; -update noar ti set b0='KE1TGBH7FLN3QT7PWW' where id=6; -update noar tt set b1='64MWOKJI7' where id=6; -update noar ti set b1='64MWOKJI7' where id=6; -update noar tt set b2='VPZP0UTUG5PCLLHYJ4ZKINX6KN3D' where id=6; -update noar ti set b2='VPZP0UTUG5PCLLHYJ4ZKINX6KN3D' where id=6; -update noar tt set b0='5QMP3U3IAZR2M4BIN3K0QOZEG' where id=7; -update noar ti set b0='5QMP3U3IAZR2M4BIN3K0QOZEG' where id=7; -update noar tt set b1='78RKVS7SYP98EC4UI01' where id=7; -update noar ti set b1='78RKVS7SYP98EC4UI01' where id=7; -update noar tt set b2='3ZPI3WITUTNZ0AFXS2OZ' where id=7; -update noar ti set b2='3ZPI3WITUTNZ0AFXS2OZ' where id=7; -update noar tt set b0='017JE1G' where id=8; -update noar ti set b0='017JE1G' where id=8; -update noar tt set b1='60S' where id=8; -update noar ti set b1='60S' where id=8; -update noar tt set b2='UBDB3PKH5VYSU3LUKC7ABXR3JY3XFG' where id=8; -update noar ti set b2='UBDB3PKH5VYSU3LUKC7ABXR3JY3XFG' where id=8; -update noar tt set b0='0GAV03D' where id=9; -update noar ti set b0='0GAV03D' where id=9; -update noar tt set b1='WEA46YHICT9JRIJL' where id=9; -update noar ti set b1='WEA46YHICT9JRIJL' where id=9; -update noar tt set b2='3LRQ4CJIQIR7NHV' where id=9; -update noar ti set b2='3LRQ4CJIQIR7NHV' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 tinyblob not null, -b1 longblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='SIUOUQMQ94GMYUWWA4LL2JVURA2' where id=1; -update noar ti set b0='SIUOUQMQ94GMYUWWA4LL2JVURA2' where id=1; -update noar tt set b1='JIBD' where id=1; -update noar ti set b1='JIBD' where id=1; -update noar tt set b2='USWPA1J2AM9YOJHS65S' where id=1; -update noar ti set b2='USWPA1J2AM9YOJHS65S' where id=1; -update noar tt set b0='M4XC5M2VEZAR5SZZYWQ1MV78FGDEK' where id=2; -update noar ti set b0='M4XC5M2VEZAR5SZZYWQ1MV78FGDEK' where id=2; -update noar tt set b1='KA' where id=2; -update noar ti set b1='KA' where id=2; -update noar tt set b2='IG09OLU5DESH7L8RR29IG201DLWLMS' where id=2; -update noar ti set b2='IG09OLU5DESH7L8RR29IG201DLWLMS' where id=2; -update noar tt set b0='L9EDIO9IXIW8WZYQYVVW04N7DUY6' where id=3; -update noar ti set b0='L9EDIO9IXIW8WZYQYVVW04N7DUY6' where id=3; -update noar tt set b1='VJ' where id=3; -update noar ti set b1='VJ' where id=3; -update noar tt set b2='7P9P6E9B98VKB' where id=3; -update noar ti set b2='7P9P6E9B98VKB' where id=3; -update noar tt set b0='13' where id=4; -update noar ti set b0='13' where id=4; -update noar tt set b1='CHQUBL8UKBCBQE14D2JTPVXW33VKIOK' where id=4; -update noar ti set b1='CHQUBL8UKBCBQE14D2JTPVXW33VKIOK' where id=4; -update noar tt set b2='3F0OTCG0ERAZ9VLSG6JW6' where id=4; -update noar ti set b2='3F0OTCG0ERAZ9VLSG6JW6' where id=4; -update noar tt set b0='HH7GW75U' where id=5; -update noar ti set b0='HH7GW75U' where id=5; -update noar tt set b1='CLBXJJL209T9T1LE2UNZA' where id=5; -update noar ti set b1='CLBXJJL209T9T1LE2UNZA' where id=5; -update noar tt set b2='TIAVVOU3' where id=5; -update noar ti set b2='TIAVVOU3' where id=5; -update noar tt set b0='V8HDFCXHUJD8O8UJDG8UP89D2TR' where id=6; -update noar ti set b0='V8HDFCXHUJD8O8UJDG8UP89D2TR' where id=6; -update noar tt set b1='QA' where id=6; -update noar ti set b1='QA' where id=6; -update noar tt set b2='BQCG46E0D7GY8X7YES1OJ48SNJ4' where id=6; -update noar ti set b2='BQCG46E0D7GY8X7YES1OJ48SNJ4' where id=6; -update noar tt set b0='9FK5ZZV' where id=7; -update noar ti set b0='9FK5ZZV' where id=7; -update noar tt set b1='39GP3USPT5CI9YIV6LPI0D7PK0D2' where id=7; -update noar ti set b1='39GP3USPT5CI9YIV6LPI0D7PK0D2' where id=7; -update noar tt set b2='9C4C2R89T' where id=7; -update noar ti set b2='9C4C2R89T' where id=7; -update noar tt set b0='DJN0GRYNI07R99NWYRROPCNRFJMV1R' where id=8; -update noar ti set b0='DJN0GRYNI07R99NWYRROPCNRFJMV1R' where id=8; -update noar tt set b1='B9T7EZRIPV7SDL54BGW8M' where id=8; -update noar ti set b1='B9T7EZRIPV7SDL54BGW8M' where id=8; -update noar tt set b2='TAHG3DP0TNP9D35T3OG115246K9W27F' where id=8; -update noar ti set b2='TAHG3DP0TNP9D35T3OG115246K9W27F' where id=8; -update noar tt set b0='4GXJ5D2X27XZ6X0PV2LGURBYLG4XC1ZI' where id=9; -update noar ti set b0='4GXJ5D2X27XZ6X0PV2LGURBYLG4XC1ZI' where id=9; -update noar tt set b1='B6IZ1GE2X9LG17DRKQNA7RYZCT3EK4D5' where id=9; -update noar ti set b1='B6IZ1GE2X9LG17DRKQNA7RYZCT3EK4D5' where id=9; -update noar tt set b2='QHLK2DOD9AQQ0C' where id=9; -update noar ti set b2='QHLK2DOD9AQQ0C' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 tinyblob null, -b1 longblob null, -b2 text null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='TPJ3V1L' where id=1; -update noar ti set b0='TPJ3V1L' where id=1; -update noar tt set b1='LYLO3Q3638DJJYPSR9UH5X' where id=1; -update noar ti set b1='LYLO3Q3638DJJYPSR9UH5X' where id=1; -update noar tt set b2='HUF' where id=1; -update noar ti set b2='HUF' where id=1; -update noar tt set b0='NWU3N76SC4U0GPPMM43G5FIZ' where id=2; -update noar ti set b0='NWU3N76SC4U0GPPMM43G5FIZ' where id=2; -update noar tt set b1='B7GTI3IWHD1NRWZ29W2BQDP6F62OYR' where id=2; -update noar ti set b1='B7GTI3IWHD1NRWZ29W2BQDP6F62OYR' where id=2; -update noar tt set b2='FMQXSFXA4IH54Y' where id=2; -update noar ti set b2='FMQXSFXA4IH54Y' where id=2; -update noar tt set b0='UPDP71UGIPBOPC5YCH0M1DPEW4' where id=3; -update noar ti set b0='UPDP71UGIPBOPC5YCH0M1DPEW4' where id=3; -update noar tt set b1='9408YTEZ8T663GTS2QQX4746EK5J1F1S' where id=3; -update noar ti set b1='9408YTEZ8T663GTS2QQX4746EK5J1F1S' where id=3; -update noar tt set b2='7GUW9SK72J533N5FXC1K8LNULNVTICU' where id=3; -update noar ti set b2='7GUW9SK72J533N5FXC1K8LNULNVTICU' where id=3; -update noar tt set b0='5ZSOS8M4RL1XWQ8HY' where id=4; -update noar ti set b0='5ZSOS8M4RL1XWQ8HY' where id=4; -update noar tt set b1='X5Z5' where id=4; -update noar ti set b1='X5Z5' where id=4; -update noar tt set b2='LNRQ93XDBJDYQFXVO2RJ37H5HNMHVEJ' where id=4; -update noar ti set b2='LNRQ93XDBJDYQFXVO2RJ37H5HNMHVEJ' where id=4; -update noar tt set b0='94C2GL4YNGAASVN92IT2NW0QQP2RI' where id=5; -update noar ti set b0='94C2GL4YNGAASVN92IT2NW0QQP2RI' where id=5; -update noar tt set b1='X6ITDE7ABH53PF' where id=5; -update noar ti set b1='X6ITDE7ABH53PF' where id=5; -update noar tt set b2='W' where id=5; -update noar ti set b2='W' where id=5; -update noar tt set b0='CEG3XGBX6RQ7B1FENR3' where id=6; -update noar ti set b0='CEG3XGBX6RQ7B1FENR3' where id=6; -update noar tt set b1='CO4D27' where id=6; -update noar ti set b1='CO4D27' where id=6; -update noar tt set b2='DOIM41UC9' where id=6; -update noar ti set b2='DOIM41UC9' where id=6; -update noar tt set b0='0WADZ1INY29EM4NRYZQ3W5BSH9' where id=7; -update noar ti set b0='0WADZ1INY29EM4NRYZQ3W5BSH9' where id=7; -update noar tt set b1='BLV10XRZ11JW6GKD9PT2095822N8UKL' where id=7; -update noar ti set b1='BLV10XRZ11JW6GKD9PT2095822N8UKL' where id=7; -update noar tt set b2='XL0N1RL4UGLEEI4IMXOK0Q9CM8RD34W' where id=7; -update noar ti set b2='XL0N1RL4UGLEEI4IMXOK0Q9CM8RD34W' where id=7; -update noar tt set b0='QBL41UGAVZR93301XC' where id=8; -update noar ti set b0='QBL41UGAVZR93301XC' where id=8; -update noar tt set b1='LDHXR' where id=8; -update noar ti set b1='LDHXR' where id=8; -update noar tt set b2='N2QE8D3GV' where id=8; -update noar ti set b2='N2QE8D3GV' where id=8; -update noar tt set b0='9R10GK0V2OS1P0R' where id=9; -update noar ti set b0='9R10GK0V2OS1P0R' where id=9; -update noar tt set b1='MWZRTKITWAU26FG' where id=9; -update noar ti set b1='MWZRTKITWAU26FG' where id=9; -update noar tt set b2='JNN6LED3DUMX5MINF94PUSA2X8BISZ' where id=9; -update noar ti set b2='JNN6LED3DUMX5MINF94PUSA2X8BISZ' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 tinyblob not null, -b1 longblob not null, -b2 text not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='SY45AWJB48MZHC43VI5DW' where id=1; -update noar ti set b0='SY45AWJB48MZHC43VI5DW' where id=1; -update noar tt set b1='96H' where id=1; -update noar ti set b1='96H' where id=1; -update noar tt set b2='1689MM2JZTPDAE8MNJY0EGRDK4' where id=1; -update noar ti set b2='1689MM2JZTPDAE8MNJY0EGRDK4' where id=1; -update noar tt set b0='C0O19W54H7X2EO0PJCIKC7' where id=2; -update noar ti set b0='C0O19W54H7X2EO0PJCIKC7' where id=2; -update noar tt set b1='JZBUGA4LZ4A60UZLUY1FFL8HROP3WUTX' where id=2; -update noar ti set b1='JZBUGA4LZ4A60UZLUY1FFL8HROP3WUTX' where id=2; -update noar tt set b2='WHY8VQENSVNTT3QEBSP' where id=2; -update noar ti set b2='WHY8VQENSVNTT3QEBSP' where id=2; -update noar tt set b0='TJ1O' where id=3; -update noar ti set b0='TJ1O' where id=3; -update noar tt set b1='4W0PA0WW' where id=3; -update noar ti set b1='4W0PA0WW' where id=3; -update noar tt set b2='S' where id=3; -update noar ti set b2='S' where id=3; -update noar tt set b0='PA0HGG5DVJC' where id=4; -update noar ti set b0='PA0HGG5DVJC' where id=4; -update noar tt set b1='VJH47XXPJ2O44R' where id=4; -update noar ti set b1='VJH47XXPJ2O44R' where id=4; -update noar tt set b2='5WON0SLKQORMLW327OP0I5YE' where id=4; -update noar ti set b2='5WON0SLKQORMLW327OP0I5YE' where id=4; -update noar tt set b0='K0FNWKUDU6PGTKBTQTD4FLBY1' where id=5; -update noar ti set b0='K0FNWKUDU6PGTKBTQTD4FLBY1' where id=5; -update noar tt set b1='0W6L6LE' where id=5; -update noar ti set b1='0W6L6LE' where id=5; -update noar tt set b2='PJCQRB7UFFS2RJEL' where id=5; -update noar ti set b2='PJCQRB7UFFS2RJEL' where id=5; -update noar tt set b0='IL6TP1RFJR94HAG7VYK7DL6AHQVN635F' where id=6; -update noar ti set b0='IL6TP1RFJR94HAG7VYK7DL6AHQVN635F' where id=6; -update noar tt set b1='QZTO52EKP2Y2Y4557L1I9MTYVKWCD' where id=6; -update noar ti set b1='QZTO52EKP2Y2Y4557L1I9MTYVKWCD' where id=6; -update noar tt set b2='XSLJT3MNK6RK4HECD5E56ESQTG01PCEA' where id=6; -update noar ti set b2='XSLJT3MNK6RK4HECD5E56ESQTG01PCEA' where id=6; -update noar tt set b0='TMAQ9ZOG4XPOGRZ' where id=7; -update noar ti set b0='TMAQ9ZOG4XPOGRZ' where id=7; -update noar tt set b1='YXAQPPYBPDFGH9WA3NUL3BZCX' where id=7; -update noar ti set b1='YXAQPPYBPDFGH9WA3NUL3BZCX' where id=7; -update noar tt set b2='PID8CVM27K9RJ1UB' where id=7; -update noar ti set b2='PID8CVM27K9RJ1UB' where id=7; -update noar tt set b0='PHFJ0NU50ZKFNXO' where id=8; -update noar ti set b0='PHFJ0NU50ZKFNXO' where id=8; -update noar tt set b1='WPBV4VCJ6U7MT8E' where id=8; -update noar ti set b1='WPBV4VCJ6U7MT8E' where id=8; -update noar tt set b2='R' where id=8; -update noar ti set b2='R' where id=8; -update noar tt set b0='958GJCAH96O' where id=9; -update noar ti set b0='958GJCAH96O' where id=9; -update noar tt set b1='AIUQ5E7L5BC53HLU3VB1' where id=9; -update noar ti set b1='AIUQ5E7L5BC53HLU3VB1' where id=9; -update noar tt set b2='VBEYW2GGA5C' where id=9; -update noar ti set b2='VBEYW2GGA5C' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 tinyblob null, -b1 text null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='XACHNX1V8L2VN8CILGTLWM' where id=1; -update noar ti set b0='XACHNX1V8L2VN8CILGTLWM' where id=1; -update noar tt set b1='A9MTUNFL5EDEMLWLI9RU4SIP' where id=1; -update noar ti set b1='A9MTUNFL5EDEMLWLI9RU4SIP' where id=1; -update noar tt set b2='M2LZ26BJND1NFOJDYCVDYY2C' where id=1; -update noar ti set b2='M2LZ26BJND1NFOJDYCVDYY2C' where id=1; -update noar tt set b0='1CL0J9L' where id=2; -update noar ti set b0='1CL0J9L' where id=2; -update noar tt set b1='26AIX' where id=2; -update noar ti set b1='26AIX' where id=2; -update noar tt set b2='9FRXB7JIQLUJM002NJ5RMV' where id=2; -update noar ti set b2='9FRXB7JIQLUJM002NJ5RMV' where id=2; -update noar tt set b0='6ZAEY1SYBUQL9' where id=3; -update noar ti set b0='6ZAEY1SYBUQL9' where id=3; -update noar tt set b1='IVQ4JSP77Y7UULE9A1A' where id=3; -update noar ti set b1='IVQ4JSP77Y7UULE9A1A' where id=3; -update noar tt set b2='C' where id=3; -update noar ti set b2='C' where id=3; -update noar tt set b0='YACCA1YGYGN' where id=4; -update noar ti set b0='YACCA1YGYGN' where id=4; -update noar tt set b1='TXP' where id=4; -update noar ti set b1='TXP' where id=4; -update noar tt set b2='Y3SQ73D3M7IP510OJN9ITSQO' where id=4; -update noar ti set b2='Y3SQ73D3M7IP510OJN9ITSQO' where id=4; -update noar tt set b0='EEQTPLLTY9BL617N' where id=5; -update noar ti set b0='EEQTPLLTY9BL617N' where id=5; -update noar tt set b1='NLBYP5VR2UQV' where id=5; -update noar ti set b1='NLBYP5VR2UQV' where id=5; -update noar tt set b2='5HUWC9Z1YAFNNQJ4BSXTBH' where id=5; -update noar ti set b2='5HUWC9Z1YAFNNQJ4BSXTBH' where id=5; -update noar tt set b0='X2Q6MI0C3DA21AO64P92RSUG2' where id=6; -update noar ti set b0='X2Q6MI0C3DA21AO64P92RSUG2' where id=6; -update noar tt set b1='MYB0RH25CM5Q' where id=6; -update noar ti set b1='MYB0RH25CM5Q' where id=6; -update noar tt set b2='K' where id=6; -update noar ti set b2='K' where id=6; -update noar tt set b0='OXQD66LHD40N05OX0UZUIVOKJF25G7Z' where id=7; -update noar ti set b0='OXQD66LHD40N05OX0UZUIVOKJF25G7Z' where id=7; -update noar tt set b1='VXWOLY7TY4L56GYDDYVUAPV0YM' where id=7; -update noar ti set b1='VXWOLY7TY4L56GYDDYVUAPV0YM' where id=7; -update noar tt set b2='7T2MC1QTPL9RVZZ6VWQJ0N1EL' where id=7; -update noar ti set b2='7T2MC1QTPL9RVZZ6VWQJ0N1EL' where id=7; -update noar tt set b0='BDGIOLLOX41TG66DSIG97IZ3RLWXB' where id=8; -update noar ti set b0='BDGIOLLOX41TG66DSIG97IZ3RLWXB' where id=8; -update noar tt set b1='FLHNNI472K' where id=8; -update noar ti set b1='FLHNNI472K' where id=8; -update noar tt set b2='Z7PR1N6R5A7CXK' where id=8; -update noar ti set b2='Z7PR1N6R5A7CXK' where id=8; -update noar tt set b0='FVEOP338T7' where id=9; -update noar ti set b0='FVEOP338T7' where id=9; -update noar tt set b1='KY0LPIV' where id=9; -update noar ti set b1='KY0LPIV' where id=9; -update noar tt set b2='Q1Z5ZR294ITKWNUCG01ME' where id=9; -update noar ti set b2='Q1Z5ZR294ITKWNUCG01ME' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 tinyblob not null, -b1 text not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='4ZTREP' where id=1; -update noar ti set b0='4ZTREP' where id=1; -update noar tt set b1='L8X5S9IQ2RAHKD6XM3Z9KTQNO78YTW' where id=1; -update noar ti set b1='L8X5S9IQ2RAHKD6XM3Z9KTQNO78YTW' where id=1; -update noar tt set b2='41YMD8JTG51IEPGRGTQ6MM225E' where id=1; -update noar ti set b2='41YMD8JTG51IEPGRGTQ6MM225E' where id=1; -update noar tt set b0='2PLFJJ82CMFP42NE5018RC65' where id=2; -update noar ti set b0='2PLFJJ82CMFP42NE5018RC65' where id=2; -update noar tt set b1='8282NR6B' where id=2; -update noar ti set b1='8282NR6B' where id=2; -update noar tt set b2='4XGVY3J' where id=2; -update noar ti set b2='4XGVY3J' where id=2; -update noar tt set b0='29VMTNQG642ZYUT8PJWECJS' where id=3; -update noar ti set b0='29VMTNQG642ZYUT8PJWECJS' where id=3; -update noar tt set b1='JZW2D' where id=3; -update noar ti set b1='JZW2D' where id=3; -update noar tt set b2='BR1MP4ZC90V46MDG' where id=3; -update noar ti set b2='BR1MP4ZC90V46MDG' where id=3; -update noar tt set b0='NMS9QB' where id=4; -update noar ti set b0='NMS9QB' where id=4; -update noar tt set b1='3A26DG0S2XHI' where id=4; -update noar ti set b1='3A26DG0S2XHI' where id=4; -update noar tt set b2='QPJIUG' where id=4; -update noar ti set b2='QPJIUG' where id=4; -update noar tt set b0='O2OPXB1YLKS4PWF4' where id=5; -update noar ti set b0='O2OPXB1YLKS4PWF4' where id=5; -update noar tt set b1='VZQJMENLLJ8PZUYPVJQ6WRFQ5VYKLY' where id=5; -update noar ti set b1='VZQJMENLLJ8PZUYPVJQ6WRFQ5VYKLY' where id=5; -update noar tt set b2='RW2Y42NS7VZZ' where id=5; -update noar ti set b2='RW2Y42NS7VZZ' where id=5; -update noar tt set b0='JIU7D6LO5RA' where id=6; -update noar ti set b0='JIU7D6LO5RA' where id=6; -update noar tt set b1='RHLROSF28RI' where id=6; -update noar ti set b1='RHLROSF28RI' where id=6; -update noar tt set b2='3H5YMX4MZ94L35EAEAZLADR4D2TEP' where id=6; -update noar ti set b2='3H5YMX4MZ94L35EAEAZLADR4D2TEP' where id=6; -update noar tt set b0='N3J5GB7JGOT' where id=7; -update noar ti set b0='N3J5GB7JGOT' where id=7; -update noar tt set b1='74D0861LTF58RLG' where id=7; -update noar ti set b1='74D0861LTF58RLG' where id=7; -update noar tt set b2='OVU3UN' where id=7; -update noar ti set b2='OVU3UN' where id=7; -update noar tt set b0='UYP0FCWXVJXXVQ91653G1Q1' where id=8; -update noar ti set b0='UYP0FCWXVJXXVQ91653G1Q1' where id=8; -update noar tt set b1='MI45Q2XOB5LIYZR7HT6PRB' where id=8; -update noar ti set b1='MI45Q2XOB5LIYZR7HT6PRB' where id=8; -update noar tt set b2='RAGG7VXX7DZ40FALUEX' where id=8; -update noar ti set b2='RAGG7VXX7DZ40FALUEX' where id=8; -update noar tt set b0='NK' where id=9; -update noar ti set b0='NK' where id=9; -update noar tt set b1='ZGSZI1LMJ1BI82XFI6' where id=9; -update noar ti set b1='ZGSZI1LMJ1BI82XFI6' where id=9; -update noar tt set b2='CV1TLDFLXTRYFMYPEKI57U6YXX2FG' where id=9; -update noar ti set b2='CV1TLDFLXTRYFMYPEKI57U6YXX2FG' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 tinyblob null, -b1 text null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='J6UT4L0CV5TFE' where id=1; -update noar ti set b0='J6UT4L0CV5TFE' where id=1; -update noar tt set b1='ULUG7J2AP3RBZR9BEWG48N6' where id=1; -update noar ti set b1='ULUG7J2AP3RBZR9BEWG48N6' where id=1; -update noar tt set b2='B5PFGDG0FVSR' where id=1; -update noar ti set b2='B5PFGDG0FVSR' where id=1; -update noar tt set b0='ACILM35DA1RCEMX72QNYDS' where id=2; -update noar ti set b0='ACILM35DA1RCEMX72QNYDS' where id=2; -update noar tt set b1='UDL9EWXMJYR5' where id=2; -update noar ti set b1='UDL9EWXMJYR5' where id=2; -update noar tt set b2='O9ZMOIXEA' where id=2; -update noar ti set b2='O9ZMOIXEA' where id=2; -update noar tt set b0='45BESPEY2SBE' where id=3; -update noar ti set b0='45BESPEY2SBE' where id=3; -update noar tt set b1='O655ZSCFIE871GV4PT3FI' where id=3; -update noar ti set b1='O655ZSCFIE871GV4PT3FI' where id=3; -update noar tt set b2='JYUSOPL0UTP19Y2ZXZMI2UEPKF' where id=3; -update noar ti set b2='JYUSOPL0UTP19Y2ZXZMI2UEPKF' where id=3; -update noar tt set b0='NP' where id=4; -update noar ti set b0='NP' where id=4; -update noar tt set b1='U68SQCT' where id=4; -update noar ti set b1='U68SQCT' where id=4; -update noar tt set b2='TDPUMJLW0JAK3D7Y1IHR' where id=4; -update noar ti set b2='TDPUMJLW0JAK3D7Y1IHR' where id=4; -update noar tt set b0='J8EM359HBKQT0' where id=5; -update noar ti set b0='J8EM359HBKQT0' where id=5; -update noar tt set b1='MGCQE9TVGNA1PBOSCMGYNHJZD' where id=5; -update noar ti set b1='MGCQE9TVGNA1PBOSCMGYNHJZD' where id=5; -update noar tt set b2='H8JXMDJKJ84C28OAX' where id=5; -update noar ti set b2='H8JXMDJKJ84C28OAX' where id=5; -update noar tt set b0='X3YBKBN9J0' where id=6; -update noar ti set b0='X3YBKBN9J0' where id=6; -update noar tt set b1='9EN14YI0UBGRKRGZX1ET' where id=6; -update noar ti set b1='9EN14YI0UBGRKRGZX1ET' where id=6; -update noar tt set b2='UICXV153KI63KIA3YL9YN58IP5P14B' where id=6; -update noar ti set b2='UICXV153KI63KIA3YL9YN58IP5P14B' where id=6; -update noar tt set b0='4UU4G6MY8DTWZVASILHQ' where id=7; -update noar ti set b0='4UU4G6MY8DTWZVASILHQ' where id=7; -update noar tt set b1='8Z7LRW9ENCJA5VT25AKUUO04' where id=7; -update noar ti set b1='8Z7LRW9ENCJA5VT25AKUUO04' where id=7; -update noar tt set b2='BMER3TQ1A3FIH9O' where id=7; -update noar ti set b2='BMER3TQ1A3FIH9O' where id=7; -update noar tt set b0='FY1YP7EHHO2GSO13Q8UERG5GL1D' where id=8; -update noar ti set b0='FY1YP7EHHO2GSO13Q8UERG5GL1D' where id=8; -update noar tt set b1='VNA082E3LI9G' where id=8; -update noar ti set b1='VNA082E3LI9G' where id=8; -update noar tt set b2='91EDWQ87M' where id=8; -update noar ti set b2='91EDWQ87M' where id=8; -update noar tt set b0='RZ3YBHHYG5WWXOZJMIE' where id=9; -update noar ti set b0='RZ3YBHHYG5WWXOZJMIE' where id=9; -update noar tt set b1='XN8LKNMPI' where id=9; -update noar ti set b1='XN8LKNMPI' where id=9; -update noar tt set b2='5Z' where id=9; -update noar ti set b2='5Z' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 tinyblob not null, -b1 text not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='JAOF86PXKZMP1DCOGYPEX67EUZAZD' where id=1; -update noar ti set b0='JAOF86PXKZMP1DCOGYPEX67EUZAZD' where id=1; -update noar tt set b1='LDG5RVX8F' where id=1; -update noar ti set b1='LDG5RVX8F' where id=1; -update noar tt set b2='ZCR6M6394O' where id=1; -update noar ti set b2='ZCR6M6394O' where id=1; -update noar tt set b0='9ZSJM50B2Y3MFOUVKC' where id=2; -update noar ti set b0='9ZSJM50B2Y3MFOUVKC' where id=2; -update noar tt set b1='SCCEKNG6YF' where id=2; -update noar ti set b1='SCCEKNG6YF' where id=2; -update noar tt set b2='PKXDPVWGICX5LHIHZKRI' where id=2; -update noar ti set b2='PKXDPVWGICX5LHIHZKRI' where id=2; -update noar tt set b0='F98Q0DMX' where id=3; -update noar ti set b0='F98Q0DMX' where id=3; -update noar tt set b1='HSWFR62' where id=3; -update noar ti set b1='HSWFR62' where id=3; -update noar tt set b2='FOTDH' where id=3; -update noar ti set b2='FOTDH' where id=3; -update noar tt set b0='KCK' where id=4; -update noar ti set b0='KCK' where id=4; -update noar tt set b1='UQTU3ZCBGJX' where id=4; -update noar ti set b1='UQTU3ZCBGJX' where id=4; -update noar tt set b2='B37KUKFKMC3EET1IP6' where id=4; -update noar ti set b2='B37KUKFKMC3EET1IP6' where id=4; -update noar tt set b0='DBLPTXA' where id=5; -update noar ti set b0='DBLPTXA' where id=5; -update noar tt set b1='WW7SS8L91YKM' where id=5; -update noar ti set b1='WW7SS8L91YKM' where id=5; -update noar tt set b2='NA' where id=5; -update noar ti set b2='NA' where id=5; -update noar tt set b0='NRNCPQLLLBBL5YN36PC3L7P811HCETY' where id=6; -update noar ti set b0='NRNCPQLLLBBL5YN36PC3L7P811HCETY' where id=6; -update noar tt set b1='P2K8SUMEKQGRHS9H4IO7L5EPZ7' where id=6; -update noar ti set b1='P2K8SUMEKQGRHS9H4IO7L5EPZ7' where id=6; -update noar tt set b2='RXOJ5' where id=6; -update noar ti set b2='RXOJ5' where id=6; -update noar tt set b0='RDDNNT' where id=7; -update noar ti set b0='RDDNNT' where id=7; -update noar tt set b1='CGQK3MHL0A20NU' where id=7; -update noar ti set b1='CGQK3MHL0A20NU' where id=7; -update noar tt set b2='UFK0AUJ7ZITUZZOSBPMB6C1Q' where id=7; -update noar ti set b2='UFK0AUJ7ZITUZZOSBPMB6C1Q' where id=7; -update noar tt set b0='TDRVBP3' where id=8; -update noar ti set b0='TDRVBP3' where id=8; -update noar tt set b1='L4TJZ5AHCQKQ9YJ89M' where id=8; -update noar ti set b1='L4TJZ5AHCQKQ9YJ89M' where id=8; -update noar tt set b2='CJWQN82XPOZG88O27UV01NGJ02V2K' where id=8; -update noar ti set b2='CJWQN82XPOZG88O27UV01NGJ02V2K' where id=8; -update noar tt set b0='SS9YA7U3VCZSS34VJDDE' where id=9; -update noar ti set b0='SS9YA7U3VCZSS34VJDDE' where id=9; -update noar tt set b1='KL5OI2675CDMOGA234B2BR3Y8' where id=9; -update noar ti set b1='KL5OI2675CDMOGA234B2BR3Y8' where id=9; -update noar tt set b2='6FYOP' where id=9; -update noar ti set b2='6FYOP' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 tinyblob null, -b1 text null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='NQ6E2TT4QEUBCL0BM5QYMUXKUUC' where id=1; -update noar ti set b0='NQ6E2TT4QEUBCL0BM5QYMUXKUUC' where id=1; -update noar tt set b1='2OZH' where id=1; -update noar ti set b1='2OZH' where id=1; -update noar tt set b2='M' where id=1; -update noar ti set b2='M' where id=1; -update noar tt set b0='6FZANCNLQB5500WADDZAK' where id=2; -update noar ti set b0='6FZANCNLQB5500WADDZAK' where id=2; -update noar tt set b1='AQNIUDUTQIFS' where id=2; -update noar ti set b1='AQNIUDUTQIFS' where id=2; -update noar tt set b2='539MKB4ULIIPBQTQ9N' where id=2; -update noar ti set b2='539MKB4ULIIPBQTQ9N' where id=2; -update noar tt set b0='T9K4XVUEVWP' where id=3; -update noar ti set b0='T9K4XVUEVWP' where id=3; -update noar tt set b1='53UC17TUE2R' where id=3; -update noar ti set b1='53UC17TUE2R' where id=3; -update noar tt set b2='M9H86EJYS258IAST' where id=3; -update noar ti set b2='M9H86EJYS258IAST' where id=3; -update noar tt set b0='GRQEOSO0KL5T' where id=4; -update noar ti set b0='GRQEOSO0KL5T' where id=4; -update noar tt set b1='06T5RMX3X06GN0T3627I4GPAQHV' where id=4; -update noar ti set b1='06T5RMX3X06GN0T3627I4GPAQHV' where id=4; -update noar tt set b2='S71PWP7V0OPD0P6JW' where id=4; -update noar ti set b2='S71PWP7V0OPD0P6JW' where id=4; -update noar tt set b0='QA43317YFTZ8Z5YIISY' where id=5; -update noar ti set b0='QA43317YFTZ8Z5YIISY' where id=5; -update noar tt set b1='S0PDNFO517' where id=5; -update noar ti set b1='S0PDNFO517' where id=5; -update noar tt set b2='8RLSMA8BC8SXOMV7G' where id=5; -update noar ti set b2='8RLSMA8BC8SXOMV7G' where id=5; -update noar tt set b0='WA3MOZRQSM9TRED7L0H' where id=6; -update noar ti set b0='WA3MOZRQSM9TRED7L0H' where id=6; -update noar tt set b1='SQ9' where id=6; -update noar ti set b1='SQ9' where id=6; -update noar tt set b2='AI24SPUR5ELGV' where id=6; -update noar ti set b2='AI24SPUR5ELGV' where id=6; -update noar tt set b0='AK67' where id=7; -update noar ti set b0='AK67' where id=7; -update noar tt set b1='ZKN47H9X6KD6W' where id=7; -update noar ti set b1='ZKN47H9X6KD6W' where id=7; -update noar tt set b2='AVCJG4V34FIFWQLO3A4KDVB' where id=7; -update noar ti set b2='AVCJG4V34FIFWQLO3A4KDVB' where id=7; -update noar tt set b0='YGS9AS49D' where id=8; -update noar ti set b0='YGS9AS49D' where id=8; -update noar tt set b1='04G70' where id=8; -update noar ti set b1='04G70' where id=8; -update noar tt set b2='WUIG8UVJ5K3ESR4EA59G5GEK' where id=8; -update noar ti set b2='WUIG8UVJ5K3ESR4EA59G5GEK' where id=8; -update noar tt set b0='9Y59RWP' where id=9; -update noar ti set b0='9Y59RWP' where id=9; -update noar tt set b1='PO24Y3PXHMZ' where id=9; -update noar ti set b1='PO24Y3PXHMZ' where id=9; -update noar tt set b2='ZF9SWWE06ND4J1J4OW6Y5NDIR1B' where id=9; -update noar ti set b2='ZF9SWWE06ND4J1J4OW6Y5NDIR1B' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 tinyblob not null, -b1 text not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='CB7DR' where id=1; -update noar ti set b0='CB7DR' where id=1; -update noar tt set b1='3IV0V4FWCZSE8K63AQ2ABWB' where id=1; -update noar ti set b1='3IV0V4FWCZSE8K63AQ2ABWB' where id=1; -update noar tt set b2='JDTM2D021NWIIN' where id=1; -update noar ti set b2='JDTM2D021NWIIN' where id=1; -update noar tt set b0='BITNE28A94O6QUP' where id=2; -update noar ti set b0='BITNE28A94O6QUP' where id=2; -update noar tt set b1='UMNQHNDV' where id=2; -update noar ti set b1='UMNQHNDV' where id=2; -update noar tt set b2='JERM91Z2E5LU9CC' where id=2; -update noar ti set b2='JERM91Z2E5LU9CC' where id=2; -update noar tt set b0='2W2JH6VCFYO6QCE0DI0IWWJ07LQAVAQS' where id=3; -update noar ti set b0='2W2JH6VCFYO6QCE0DI0IWWJ07LQAVAQS' where id=3; -update noar tt set b1='5RYPYWU0361KJB44H9YC00AY3H8KYKB' where id=3; -update noar ti set b1='5RYPYWU0361KJB44H9YC00AY3H8KYKB' where id=3; -update noar tt set b2='I7V5B0TF' where id=3; -update noar ti set b2='I7V5B0TF' where id=3; -update noar tt set b0='GSHODRIHOYZRWESEQD6B0L' where id=4; -update noar ti set b0='GSHODRIHOYZRWESEQD6B0L' where id=4; -update noar tt set b1='P9OO2VK94SQX7954EITPZ1VWX9KQQ27' where id=4; -update noar ti set b1='P9OO2VK94SQX7954EITPZ1VWX9KQQ27' where id=4; -update noar tt set b2='2NBA9A86IJO6L' where id=4; -update noar ti set b2='2NBA9A86IJO6L' where id=4; -update noar tt set b0='3TDU4' where id=5; -update noar ti set b0='3TDU4' where id=5; -update noar tt set b1='CMCUYBXLGZUX2KZ0' where id=5; -update noar ti set b1='CMCUYBXLGZUX2KZ0' where id=5; -update noar tt set b2='4O4M2' where id=5; -update noar ti set b2='4O4M2' where id=5; -update noar tt set b0='WUVU8KP4WO' where id=6; -update noar ti set b0='WUVU8KP4WO' where id=6; -update noar tt set b1='NCCSZ' where id=6; -update noar ti set b1='NCCSZ' where id=6; -update noar tt set b2='3BFOMBUZAYFA1F36OSC5QJHU2MKP' where id=6; -update noar ti set b2='3BFOMBUZAYFA1F36OSC5QJHU2MKP' where id=6; -update noar tt set b0='GUX' where id=7; -update noar ti set b0='GUX' where id=7; -update noar tt set b1='CMKTB0YO39RHKZNY0M81ZW' where id=7; -update noar ti set b1='CMKTB0YO39RHKZNY0M81ZW' where id=7; -update noar tt set b2='KK7IRA9L20NW9R9ZGXP5' where id=7; -update noar ti set b2='KK7IRA9L20NW9R9ZGXP5' where id=7; -update noar tt set b0='GSI2IM6JPB2L' where id=8; -update noar ti set b0='GSI2IM6JPB2L' where id=8; -update noar tt set b1='U' where id=8; -update noar ti set b1='U' where id=8; -update noar tt set b2='Y70ZWZNCLRAU44ALT7SL9F2' where id=8; -update noar ti set b2='Y70ZWZNCLRAU44ALT7SL9F2' where id=8; -update noar tt set b0='CZKFARQ39XKQRYMEOPZ4ROXKTB4' where id=9; -update noar ti set b0='CZKFARQ39XKQRYMEOPZ4ROXKTB4' where id=9; -update noar tt set b1='C4T7JPODAU7C0PFY2FGG089NYSISK' where id=9; -update noar ti set b1='C4T7JPODAU7C0PFY2FGG089NYSISK' where id=9; -update noar tt set b2='AVIL6S41XDR' where id=9; -update noar ti set b2='AVIL6S41XDR' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 tinyblob null, -b1 text null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='ID15RM6NVRAE2G1SVR3ID6NMNE8' where id=1; -update noar ti set b0='ID15RM6NVRAE2G1SVR3ID6NMNE8' where id=1; -update noar tt set b1='5HM871AGHGOMW5M90ATJCQ94LLT' where id=1; -update noar ti set b1='5HM871AGHGOMW5M90ATJCQ94LLT' where id=1; -update noar tt set b2='N0ZJ8991LSCTIPFCEC59E3' where id=1; -update noar ti set b2='N0ZJ8991LSCTIPFCEC59E3' where id=1; -update noar tt set b0='KUTQ50HVQYE6COC26MBXCU1' where id=2; -update noar ti set b0='KUTQ50HVQYE6COC26MBXCU1' where id=2; -update noar tt set b1='YLDR7E378DNE' where id=2; -update noar ti set b1='YLDR7E378DNE' where id=2; -update noar tt set b2='NJJVF17WBMUWCSYY82F0' where id=2; -update noar ti set b2='NJJVF17WBMUWCSYY82F0' where id=2; -update noar tt set b0='3FQEA5CICF' where id=3; -update noar ti set b0='3FQEA5CICF' where id=3; -update noar tt set b1='ZQKVL3BTHCPO8R86RXMAGO' where id=3; -update noar ti set b1='ZQKVL3BTHCPO8R86RXMAGO' where id=3; -update noar tt set b2='SUDTA2Q17P8PC8EJXV3SQEQKGKQ' where id=3; -update noar ti set b2='SUDTA2Q17P8PC8EJXV3SQEQKGKQ' where id=3; -update noar tt set b0='ACZNH5S' where id=4; -update noar ti set b0='ACZNH5S' where id=4; -update noar tt set b1='7FLNC66NGQXBP6C9HM7EZW' where id=4; -update noar ti set b1='7FLNC66NGQXBP6C9HM7EZW' where id=4; -update noar tt set b2='1QVH7ZG3DBS8CYBKJH4' where id=4; -update noar ti set b2='1QVH7ZG3DBS8CYBKJH4' where id=4; -update noar tt set b0='SL2JPIFL9KJH9Y0ZNA' where id=5; -update noar ti set b0='SL2JPIFL9KJH9Y0ZNA' where id=5; -update noar tt set b1='74MXZYEC23I88SRDCDKL0KEN3XIGA' where id=5; -update noar ti set b1='74MXZYEC23I88SRDCDKL0KEN3XIGA' where id=5; -update noar tt set b2='F' where id=5; -update noar ti set b2='F' where id=5; -update noar tt set b0='ML4FYQJY' where id=6; -update noar ti set b0='ML4FYQJY' where id=6; -update noar tt set b1='J5A25CVP62XE15ZNWTDL' where id=6; -update noar ti set b1='J5A25CVP62XE15ZNWTDL' where id=6; -update noar tt set b2='AJ97L5X' where id=6; -update noar ti set b2='AJ97L5X' where id=6; -update noar tt set b0='4C1BU1FHDZGIWOB1UCOCK9' where id=7; -update noar ti set b0='4C1BU1FHDZGIWOB1UCOCK9' where id=7; -update noar tt set b1='RPP' where id=7; -update noar ti set b1='RPP' where id=7; -update noar tt set b2='TE76F0I8RK0YW680LKEPYMP2SFV6CO' where id=7; -update noar ti set b2='TE76F0I8RK0YW680LKEPYMP2SFV6CO' where id=7; -update noar tt set b0='X' where id=8; -update noar ti set b0='X' where id=8; -update noar tt set b1='O0X6BSPSO126CGGS2BG3KL' where id=8; -update noar ti set b1='O0X6BSPSO126CGGS2BG3KL' where id=8; -update noar tt set b2='JBJ0451' where id=8; -update noar ti set b2='JBJ0451' where id=8; -update noar tt set b0='F34MEXGXKFBM2UT' where id=9; -update noar ti set b0='F34MEXGXKFBM2UT' where id=9; -update noar tt set b1='BSRWZP0Z' where id=9; -update noar ti set b1='BSRWZP0Z' where id=9; -update noar tt set b2='37EEOCYR6T3PNEDX3FBQ92G4T53WODTW' where id=9; -update noar ti set b2='37EEOCYR6T3PNEDX3FBQ92G4T53WODTW' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 tinyblob not null, -b1 text not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='7JBUS90CC54ZP' where id=1; -update noar ti set b0='7JBUS90CC54ZP' where id=1; -update noar tt set b1='Q3GDRWNXSY5D6MN7NO6IFE1O4FKSJ' where id=1; -update noar ti set b1='Q3GDRWNXSY5D6MN7NO6IFE1O4FKSJ' where id=1; -update noar tt set b2='7O74JBSYLSGCO1BSEDBGUK7P4F8UPYHY' where id=1; -update noar ti set b2='7O74JBSYLSGCO1BSEDBGUK7P4F8UPYHY' where id=1; -update noar tt set b0='VZY0DWFNAZOFKNZ60GSQQYFFPJXM' where id=2; -update noar ti set b0='VZY0DWFNAZOFKNZ60GSQQYFFPJXM' where id=2; -update noar tt set b1='CALYLSO8EXTSLTJFPTPXDT302' where id=2; -update noar ti set b1='CALYLSO8EXTSLTJFPTPXDT302' where id=2; -update noar tt set b2='BCLO1TUGPY9PS6VMPB4H53' where id=2; -update noar ti set b2='BCLO1TUGPY9PS6VMPB4H53' where id=2; -update noar tt set b0='LDNC3KFAGW5I' where id=3; -update noar ti set b0='LDNC3KFAGW5I' where id=3; -update noar tt set b1='MUYKZMYSE05JY16RL9RPL' where id=3; -update noar ti set b1='MUYKZMYSE05JY16RL9RPL' where id=3; -update noar tt set b2='9V56GV2MB7ST6EQ0C373AW3VJYPIB3' where id=3; -update noar ti set b2='9V56GV2MB7ST6EQ0C373AW3VJYPIB3' where id=3; -update noar tt set b0='GEY8K2LOBOUWBYMIJ9562W4TF6OCBB5' where id=4; -update noar ti set b0='GEY8K2LOBOUWBYMIJ9562W4TF6OCBB5' where id=4; -update noar tt set b1='LJBIHLQ535ZNG1EK7BT' where id=4; -update noar ti set b1='LJBIHLQ535ZNG1EK7BT' where id=4; -update noar tt set b2='9N646DR7QUUOC' where id=4; -update noar ti set b2='9N646DR7QUUOC' where id=4; -update noar tt set b0='430HB1DAVS6CF' where id=5; -update noar ti set b0='430HB1DAVS6CF' where id=5; -update noar tt set b1='0OV3ZGF2JUUDEKR5L' where id=5; -update noar ti set b1='0OV3ZGF2JUUDEKR5L' where id=5; -update noar tt set b2='5CFJKPAREPGLQYBVV736BL01Z' where id=5; -update noar ti set b2='5CFJKPAREPGLQYBVV736BL01Z' where id=5; -update noar tt set b0='AD312BIYRDC' where id=6; -update noar ti set b0='AD312BIYRDC' where id=6; -update noar tt set b1='Z16' where id=6; -update noar ti set b1='Z16' where id=6; -update noar tt set b2='LGZWGGFJ5UF36HJDJYD2K' where id=6; -update noar ti set b2='LGZWGGFJ5UF36HJDJYD2K' where id=6; -update noar tt set b0='E3QALDLJUSKLJRLI3F5TXI1KF' where id=7; -update noar ti set b0='E3QALDLJUSKLJRLI3F5TXI1KF' where id=7; -update noar tt set b1='UWI9LX49HEZ49F1AJ21ZDWVXII42RL' where id=7; -update noar ti set b1='UWI9LX49HEZ49F1AJ21ZDWVXII42RL' where id=7; -update noar tt set b2='8W9Y' where id=7; -update noar ti set b2='8W9Y' where id=7; -update noar tt set b0='KHXNWY' where id=8; -update noar ti set b0='KHXNWY' where id=8; -update noar tt set b1='JY99H9VWYTEYZAP2P8ICC1' where id=8; -update noar ti set b1='JY99H9VWYTEYZAP2P8ICC1' where id=8; -update noar tt set b2='AXAF9HDTLTU' where id=8; -update noar ti set b2='AXAF9HDTLTU' where id=8; -update noar tt set b0='YYQTPL5FVDQS9OQ2HGAZT19I' where id=9; -update noar ti set b0='YYQTPL5FVDQS9OQ2HGAZT19I' where id=9; -update noar tt set b1='6J0DCU71M0ASWYCZPRML1G4KMWLKO9' where id=9; -update noar ti set b1='6J0DCU71M0ASWYCZPRML1G4KMWLKO9' where id=9; -update noar tt set b2='M0H5STWTOHCH9PC' where id=9; -update noar ti set b2='M0H5STWTOHCH9PC' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 tinyblob null, -b1 text null, -b2 text null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='91DCSZ52QOPUF59N8T' where id=1; -update noar ti set b0='91DCSZ52QOPUF59N8T' where id=1; -update noar tt set b1='91IHWVIPDW753US2CW9TDI' where id=1; -update noar ti set b1='91IHWVIPDW753US2CW9TDI' where id=1; -update noar tt set b2='00D2H' where id=1; -update noar ti set b2='00D2H' where id=1; -update noar tt set b0='XZDPPXL0GDH1QZL9DSQK60OI0M1X84X' where id=2; -update noar ti set b0='XZDPPXL0GDH1QZL9DSQK60OI0M1X84X' where id=2; -update noar tt set b1='I' where id=2; -update noar ti set b1='I' where id=2; -update noar tt set b2='AHEXM1L97KOTB9KXI29YGDSY6FOF' where id=2; -update noar ti set b2='AHEXM1L97KOTB9KXI29YGDSY6FOF' where id=2; -update noar tt set b0='VYILFYJM08X5A1ZURWVYE6X7ADXO2S' where id=3; -update noar ti set b0='VYILFYJM08X5A1ZURWVYE6X7ADXO2S' where id=3; -update noar tt set b1='VAV9I4VHTMEZ0U8IEZQV' where id=3; -update noar ti set b1='VAV9I4VHTMEZ0U8IEZQV' where id=3; -update noar tt set b2='3PP5X4QIEXYD6C93ASOSQZVZW4TINIY' where id=3; -update noar ti set b2='3PP5X4QIEXYD6C93ASOSQZVZW4TINIY' where id=3; -update noar tt set b0='0XLZV04KSUMJFY92AK71V5AN3' where id=4; -update noar ti set b0='0XLZV04KSUMJFY92AK71V5AN3' where id=4; -update noar tt set b1='C4M9BGY6GTKID0D8W7QFIG' where id=4; -update noar ti set b1='C4M9BGY6GTKID0D8W7QFIG' where id=4; -update noar tt set b2='B4UK' where id=4; -update noar ti set b2='B4UK' where id=4; -update noar tt set b0='KIF9PC0XV722MUNP8CKWAVX' where id=5; -update noar ti set b0='KIF9PC0XV722MUNP8CKWAVX' where id=5; -update noar tt set b1='ULKUU2EK' where id=5; -update noar ti set b1='ULKUU2EK' where id=5; -update noar tt set b2='0RP6EJLHGTFEZLSUJM3FV' where id=5; -update noar ti set b2='0RP6EJLHGTFEZLSUJM3FV' where id=5; -update noar tt set b0='EKB7' where id=6; -update noar ti set b0='EKB7' where id=6; -update noar tt set b1='94K' where id=6; -update noar ti set b1='94K' where id=6; -update noar tt set b2='PA9H' where id=6; -update noar ti set b2='PA9H' where id=6; -update noar tt set b0='OAQ9A2Z2WWDK2C05JYB1XVNCSCVOAX' where id=7; -update noar ti set b0='OAQ9A2Z2WWDK2C05JYB1XVNCSCVOAX' where id=7; -update noar tt set b1='3UG8NITM4B' where id=7; -update noar ti set b1='3UG8NITM4B' where id=7; -update noar tt set b2='PS6MJPIGPL7WBXD6QHCWEF5EZ7' where id=7; -update noar ti set b2='PS6MJPIGPL7WBXD6QHCWEF5EZ7' where id=7; -update noar tt set b0='29ZHZEZ6IXV50BXETX8' where id=8; -update noar ti set b0='29ZHZEZ6IXV50BXETX8' where id=8; -update noar tt set b1='8I3NM1AZEP' where id=8; -update noar ti set b1='8I3NM1AZEP' where id=8; -update noar tt set b2='ZIE8PAUV13PKXDSB' where id=8; -update noar ti set b2='ZIE8PAUV13PKXDSB' where id=8; -update noar tt set b0='P7ZZOLEGWA' where id=9; -update noar ti set b0='P7ZZOLEGWA' where id=9; -update noar tt set b1='ZEY1GVHHPTJMQ8YIXEODPKD6A893' where id=9; -update noar ti set b1='ZEY1GVHHPTJMQ8YIXEODPKD6A893' where id=9; -update noar tt set b2='3U3PCBQYYCMKR3SHEJ' where id=9; -update noar ti set b2='3U3PCBQYYCMKR3SHEJ' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 tinyblob not null, -b1 text not null, -b2 text not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='3VHW6PMZ2' where id=1; -update noar ti set b0='3VHW6PMZ2' where id=1; -update noar tt set b1='KOTGK0AV3UUROTM' where id=1; -update noar ti set b1='KOTGK0AV3UUROTM' where id=1; -update noar tt set b2='NQ2OJDDTWDURBJA4' where id=1; -update noar ti set b2='NQ2OJDDTWDURBJA4' where id=1; -update noar tt set b0='GTTPG2F21EXGXIMTS51HV5LYM452NMX' where id=2; -update noar ti set b0='GTTPG2F21EXGXIMTS51HV5LYM452NMX' where id=2; -update noar tt set b1='GBYE0' where id=2; -update noar ti set b1='GBYE0' where id=2; -update noar tt set b2='M9TO3FKFONZ5F3JQGZSOP2ILQRDBX' where id=2; -update noar ti set b2='M9TO3FKFONZ5F3JQGZSOP2ILQRDBX' where id=2; -update noar tt set b0='B4319RTBKXUV955KWWU2MKUO' where id=3; -update noar ti set b0='B4319RTBKXUV955KWWU2MKUO' where id=3; -update noar tt set b1='Q6PIZF4PZQZLK414RJEDFW' where id=3; -update noar ti set b1='Q6PIZF4PZQZLK414RJEDFW' where id=3; -update noar tt set b2='09UP4L2FGEJ53AFXVDMICCYCF5XV4' where id=3; -update noar ti set b2='09UP4L2FGEJ53AFXVDMICCYCF5XV4' where id=3; -update noar tt set b0='MF2U3X8OEE44EIJGW3F7I9T' where id=4; -update noar ti set b0='MF2U3X8OEE44EIJGW3F7I9T' where id=4; -update noar tt set b1='AQHCVO6WNYD4960ZQPP5' where id=4; -update noar ti set b1='AQHCVO6WNYD4960ZQPP5' where id=4; -update noar tt set b2='A04YIZ' where id=4; -update noar ti set b2='A04YIZ' where id=4; -update noar tt set b0='539WAPOAOKDJ5EYUSX4F' where id=5; -update noar ti set b0='539WAPOAOKDJ5EYUSX4F' where id=5; -update noar tt set b1='YX5DH' where id=5; -update noar ti set b1='YX5DH' where id=5; -update noar tt set b2='KBNW7EI9GT' where id=5; -update noar ti set b2='KBNW7EI9GT' where id=5; -update noar tt set b0='YTKJ4' where id=6; -update noar ti set b0='YTKJ4' where id=6; -update noar tt set b1='W8T941CRUZGE018BDESL26RYYQDLPR5K' where id=6; -update noar ti set b1='W8T941CRUZGE018BDESL26RYYQDLPR5K' where id=6; -update noar tt set b2='CIJ4JAYKUG' where id=6; -update noar ti set b2='CIJ4JAYKUG' where id=6; -update noar tt set b0='IMK5JCJD6FKDYH2KTTLFBCOPTOU' where id=7; -update noar ti set b0='IMK5JCJD6FKDYH2KTTLFBCOPTOU' where id=7; -update noar tt set b1='YQC2H44B78Z8PDTZ54FLH81BLYR28DK' where id=7; -update noar ti set b1='YQC2H44B78Z8PDTZ54FLH81BLYR28DK' where id=7; -update noar tt set b2='LT36URXKF16PVURRC61WUL' where id=7; -update noar ti set b2='LT36URXKF16PVURRC61WUL' where id=7; -update noar tt set b0='CK8JJ2RH79NGC3K79LZ9' where id=8; -update noar ti set b0='CK8JJ2RH79NGC3K79LZ9' where id=8; -update noar tt set b1='H' where id=8; -update noar ti set b1='H' where id=8; -update noar tt set b2='AOUJ2RUBOYPERTL02V7XPYSKHPLS4' where id=8; -update noar ti set b2='AOUJ2RUBOYPERTL02V7XPYSKHPLS4' where id=8; -update noar tt set b0='TYY4B20YTLT1WHX0I3E74O' where id=9; -update noar ti set b0='TYY4B20YTLT1WHX0I3E74O' where id=9; -update noar tt set b1='5MSSOO3CQILR74TVY86' where id=9; -update noar ti set b1='5MSSOO3CQILR74TVY86' where id=9; -update noar tt set b2='V21B9TTH2X612MTDW2Y' where id=9; -update noar ti set b2='V21B9TTH2X612MTDW2Y' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 blob null, -b1 tinyblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='LC8S6KPDD' where id=1; -update noar ti set b0='LC8S6KPDD' where id=1; -update noar tt set b1='TLLDEARF982' where id=1; -update noar ti set b1='TLLDEARF982' where id=1; -update noar tt set b2='ZVM3PFRK4JBRJJ48E129XZDDT' where id=1; -update noar ti set b2='ZVM3PFRK4JBRJJ48E129XZDDT' where id=1; -update noar tt set b0='XAQEJUH9CAW2CN2Y1OQ9QFBC' where id=2; -update noar ti set b0='XAQEJUH9CAW2CN2Y1OQ9QFBC' where id=2; -update noar tt set b1='33VKW0R95SXFZ' where id=2; -update noar ti set b1='33VKW0R95SXFZ' where id=2; -update noar tt set b2='AMGX9F' where id=2; -update noar ti set b2='AMGX9F' where id=2; -update noar tt set b0='1X1A6V' where id=3; -update noar ti set b0='1X1A6V' where id=3; -update noar tt set b1='J6T2XWFYLXJH6QREZ0' where id=3; -update noar ti set b1='J6T2XWFYLXJH6QREZ0' where id=3; -update noar tt set b2='RTBMVXOCOEISHDYKDTGE8' where id=3; -update noar ti set b2='RTBMVXOCOEISHDYKDTGE8' where id=3; -update noar tt set b0='BJM' where id=4; -update noar ti set b0='BJM' where id=4; -update noar tt set b1='KE50380QJ' where id=4; -update noar ti set b1='KE50380QJ' where id=4; -update noar tt set b2='87RJDL8EBX9XNJSKBAW9E30QOCS' where id=4; -update noar ti set b2='87RJDL8EBX9XNJSKBAW9E30QOCS' where id=4; -update noar tt set b0='O1VW0L1NLSGZLJBYQ9GNB917E' where id=5; -update noar ti set b0='O1VW0L1NLSGZLJBYQ9GNB917E' where id=5; -update noar tt set b1='XR321T8Z2WP5ZCKONENKVT4GV' where id=5; -update noar ti set b1='XR321T8Z2WP5ZCKONENKVT4GV' where id=5; -update noar tt set b2='NDF5N1R5OMSLJ04IWMZRVP' where id=5; -update noar ti set b2='NDF5N1R5OMSLJ04IWMZRVP' where id=5; -update noar tt set b0='2BB3BYC' where id=6; -update noar ti set b0='2BB3BYC' where id=6; -update noar tt set b1='BH2DF2O33A1S1VI8YUFQA4JWES9Z2LU' where id=6; -update noar ti set b1='BH2DF2O33A1S1VI8YUFQA4JWES9Z2LU' where id=6; -update noar tt set b2='XRYJSI04OJ74M1IL6F9ZS015GV' where id=6; -update noar ti set b2='XRYJSI04OJ74M1IL6F9ZS015GV' where id=6; -update noar tt set b0='PZKP9ERFSAJVOHCO7ONL' where id=7; -update noar ti set b0='PZKP9ERFSAJVOHCO7ONL' where id=7; -update noar tt set b1='WDMGY5HTUIN81RFPELXUE' where id=7; -update noar ti set b1='WDMGY5HTUIN81RFPELXUE' where id=7; -update noar tt set b2='FY774Z2PJ91O9XB817TZ078I' where id=7; -update noar ti set b2='FY774Z2PJ91O9XB817TZ078I' where id=7; -update noar tt set b0='4JJD618STH' where id=8; -update noar ti set b0='4JJD618STH' where id=8; -update noar tt set b1='OKLS4X' where id=8; -update noar ti set b1='OKLS4X' where id=8; -update noar tt set b2='UBMIJRROMCESRXBOI9AHQ4GC' where id=8; -update noar ti set b2='UBMIJRROMCESRXBOI9AHQ4GC' where id=8; -update noar tt set b0='Z3WSQBRPALJ2HLQ' where id=9; -update noar ti set b0='Z3WSQBRPALJ2HLQ' where id=9; -update noar tt set b1='8SWZFU0F0XUH' where id=9; -update noar ti set b1='8SWZFU0F0XUH' where id=9; -update noar tt set b2='TUHBCKAOBEYGP0RWXHC5R' where id=9; -update noar ti set b2='TUHBCKAOBEYGP0RWXHC5R' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 blob not null, -b1 tinyblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='R93JVVYJJGWJH' where id=1; -update noar ti set b0='R93JVVYJJGWJH' where id=1; -update noar tt set b1='Q7YYMWIZKRHL' where id=1; -update noar ti set b1='Q7YYMWIZKRHL' where id=1; -update noar tt set b2='IVYNOOU7MHO2VL29HBN' where id=1; -update noar ti set b2='IVYNOOU7MHO2VL29HBN' where id=1; -update noar tt set b0='DOZKTU7CZ5X1NQOBH4IWFS7YN5S' where id=2; -update noar ti set b0='DOZKTU7CZ5X1NQOBH4IWFS7YN5S' where id=2; -update noar tt set b1='O6' where id=2; -update noar ti set b1='O6' where id=2; -update noar tt set b2='6NF' where id=2; -update noar ti set b2='6NF' where id=2; -update noar tt set b0='R' where id=3; -update noar ti set b0='R' where id=3; -update noar tt set b1='GSRB8VQIA7SF7WRE3XW14MIHUG' where id=3; -update noar ti set b1='GSRB8VQIA7SF7WRE3XW14MIHUG' where id=3; -update noar tt set b2='Z4SEBK' where id=3; -update noar ti set b2='Z4SEBK' where id=3; -update noar tt set b0='EU0NG5RLNQ0FG93SIRDU9A' where id=4; -update noar ti set b0='EU0NG5RLNQ0FG93SIRDU9A' where id=4; -update noar tt set b1='IJL4UHLTW8BM4GA5657' where id=4; -update noar ti set b1='IJL4UHLTW8BM4GA5657' where id=4; -update noar tt set b2='23' where id=4; -update noar ti set b2='23' where id=4; -update noar tt set b0='ZDN5A5GS3OS7LQY88E01BHTQMFN5' where id=5; -update noar ti set b0='ZDN5A5GS3OS7LQY88E01BHTQMFN5' where id=5; -update noar tt set b1='V' where id=5; -update noar ti set b1='V' where id=5; -update noar tt set b2='BBKV7E3NK63DB7PTNB5ZD27X' where id=5; -update noar ti set b2='BBKV7E3NK63DB7PTNB5ZD27X' where id=5; -update noar tt set b0='VAFM6B2QNOD565NT' where id=6; -update noar ti set b0='VAFM6B2QNOD565NT' where id=6; -update noar tt set b1='NZXGAS' where id=6; -update noar ti set b1='NZXGAS' where id=6; -update noar tt set b2='2I1K' where id=6; -update noar ti set b2='2I1K' where id=6; -update noar tt set b0='2KHYAGWQDIRI7' where id=7; -update noar ti set b0='2KHYAGWQDIRI7' where id=7; -update noar tt set b1='Z1YJXP5X080O6TZZC6CXIH2' where id=7; -update noar ti set b1='Z1YJXP5X080O6TZZC6CXIH2' where id=7; -update noar tt set b2='MDPB0RZV9CYYPZKYVLW9OKU1NH' where id=7; -update noar ti set b2='MDPB0RZV9CYYPZKYVLW9OKU1NH' where id=7; -update noar tt set b0='E5XVD0B3DVXQ2' where id=8; -update noar ti set b0='E5XVD0B3DVXQ2' where id=8; -update noar tt set b1='P9T' where id=8; -update noar ti set b1='P9T' where id=8; -update noar tt set b2='YV20LJ44P09WMKTBX10YSXQ6628BSG' where id=8; -update noar ti set b2='YV20LJ44P09WMKTBX10YSXQ6628BSG' where id=8; -update noar tt set b0='90F4IHGCHNWIBXCKYHK6AOTXXSIRK' where id=9; -update noar ti set b0='90F4IHGCHNWIBXCKYHK6AOTXXSIRK' where id=9; -update noar tt set b1='CXCQVMV9GZ2GMKGXEDV3' where id=9; -update noar ti set b1='CXCQVMV9GZ2GMKGXEDV3' where id=9; -update noar tt set b2='2Y' where id=9; -update noar ti set b2='2Y' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 blob null, -b1 tinyblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='PEP5' where id=1; -update noar ti set b0='PEP5' where id=1; -update noar tt set b1='0M1I4BRP' where id=1; -update noar ti set b1='0M1I4BRP' where id=1; -update noar tt set b2='TG68K9G337OOXS41DJOR' where id=1; -update noar ti set b2='TG68K9G337OOXS41DJOR' where id=1; -update noar tt set b0='LAFGLX4X2RI0P0CCVW1C07N9' where id=2; -update noar ti set b0='LAFGLX4X2RI0P0CCVW1C07N9' where id=2; -update noar tt set b1='Z' where id=2; -update noar ti set b1='Z' where id=2; -update noar tt set b2='5A1RV7LFLWKYH5LYKJ' where id=2; -update noar ti set b2='5A1RV7LFLWKYH5LYKJ' where id=2; -update noar tt set b0='7FQUO63Y4J3F6XY5TK8WBL1JC' where id=3; -update noar ti set b0='7FQUO63Y4J3F6XY5TK8WBL1JC' where id=3; -update noar tt set b1='ZCFL2' where id=3; -update noar ti set b1='ZCFL2' where id=3; -update noar tt set b2='UAHJRG88YC' where id=3; -update noar ti set b2='UAHJRG88YC' where id=3; -update noar tt set b0='X8MRZEL6JK4171PBO1LZA' where id=4; -update noar ti set b0='X8MRZEL6JK4171PBO1LZA' where id=4; -update noar tt set b1='2XLXGEI' where id=4; -update noar ti set b1='2XLXGEI' where id=4; -update noar tt set b2='C975AHK0Z27QDSYVVA4L' where id=4; -update noar ti set b2='C975AHK0Z27QDSYVVA4L' where id=4; -update noar tt set b0='W51BKRA1Y0OFVGT45X7I' where id=5; -update noar ti set b0='W51BKRA1Y0OFVGT45X7I' where id=5; -update noar tt set b1='VH3YFW0ZYJGQAYTYCWEBCH' where id=5; -update noar ti set b1='VH3YFW0ZYJGQAYTYCWEBCH' where id=5; -update noar tt set b2='FRBI6B14RG9U9UR592ET15APGR8W' where id=5; -update noar ti set b2='FRBI6B14RG9U9UR592ET15APGR8W' where id=5; -update noar tt set b0='TETT3YQ7QK9NAJRBHKC26GKRIB8Q' where id=6; -update noar ti set b0='TETT3YQ7QK9NAJRBHKC26GKRIB8Q' where id=6; -update noar tt set b1='8QBHGJIDHZDIG8P5PQ0T' where id=6; -update noar ti set b1='8QBHGJIDHZDIG8P5PQ0T' where id=6; -update noar tt set b2='TTTCN0' where id=6; -update noar ti set b2='TTTCN0' where id=6; -update noar tt set b0='0HCXJ' where id=7; -update noar ti set b0='0HCXJ' where id=7; -update noar tt set b1='6M20GGPW' where id=7; -update noar ti set b1='6M20GGPW' where id=7; -update noar tt set b2='H4PLC08K2YNCTTSEKOOATSOZC' where id=7; -update noar ti set b2='H4PLC08K2YNCTTSEKOOATSOZC' where id=7; -update noar tt set b0='6ZT2BYN' where id=8; -update noar ti set b0='6ZT2BYN' where id=8; -update noar tt set b1='C' where id=8; -update noar ti set b1='C' where id=8; -update noar tt set b2='9O50YGHXIBRJ1JAJV6XSXWBVLQ10F' where id=8; -update noar ti set b2='9O50YGHXIBRJ1JAJV6XSXWBVLQ10F' where id=8; -update noar tt set b0='0V2590NK7A2R8CUD' where id=9; -update noar ti set b0='0V2590NK7A2R8CUD' where id=9; -update noar tt set b1='A25YFMPK4BFE5NSBM2F' where id=9; -update noar ti set b1='A25YFMPK4BFE5NSBM2F' where id=9; -update noar tt set b2='FUTR' where id=9; -update noar ti set b2='FUTR' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 blob not null, -b1 tinyblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='SEEJNAC9DJK5GNKNR8W' where id=1; -update noar ti set b0='SEEJNAC9DJK5GNKNR8W' where id=1; -update noar tt set b1='FHRNE3KON82' where id=1; -update noar ti set b1='FHRNE3KON82' where id=1; -update noar tt set b2='2VY2YKWAQHTL3ZMQYYUSH2X' where id=1; -update noar ti set b2='2VY2YKWAQHTL3ZMQYYUSH2X' where id=1; -update noar tt set b0='ECECHGW0JU383KKXKWP22J9DFT48020' where id=2; -update noar ti set b0='ECECHGW0JU383KKXKWP22J9DFT48020' where id=2; -update noar tt set b1='9UA4TJ5UNGWAEXSRT' where id=2; -update noar ti set b1='9UA4TJ5UNGWAEXSRT' where id=2; -update noar tt set b2='NUJ3C6NAEHY' where id=2; -update noar ti set b2='NUJ3C6NAEHY' where id=2; -update noar tt set b0='BM45KXCGD13W' where id=3; -update noar ti set b0='BM45KXCGD13W' where id=3; -update noar tt set b1='OTM8SVJQF5YJ7QWW2MG7OG5' where id=3; -update noar ti set b1='OTM8SVJQF5YJ7QWW2MG7OG5' where id=3; -update noar tt set b2='0GW3NNBC1IBDHBHQA4N26UNZLK6E14' where id=3; -update noar ti set b2='0GW3NNBC1IBDHBHQA4N26UNZLK6E14' where id=3; -update noar tt set b0='9F53FRNHTUMARSSHZWVODPVETVD3FZ' where id=4; -update noar ti set b0='9F53FRNHTUMARSSHZWVODPVETVD3FZ' where id=4; -update noar tt set b1='4D58G6ES' where id=4; -update noar ti set b1='4D58G6ES' where id=4; -update noar tt set b2='9LGGUHPFFS6C8Q' where id=4; -update noar ti set b2='9LGGUHPFFS6C8Q' where id=4; -update noar tt set b0='8BE9BDC8CUJ' where id=5; -update noar ti set b0='8BE9BDC8CUJ' where id=5; -update noar tt set b1='5U9GAOG25169IZ1DVKQS' where id=5; -update noar ti set b1='5U9GAOG25169IZ1DVKQS' where id=5; -update noar tt set b2='TU' where id=5; -update noar ti set b2='TU' where id=5; -update noar tt set b0='B5YH59M1N4D2STGW53AEU3LKJU' where id=6; -update noar ti set b0='B5YH59M1N4D2STGW53AEU3LKJU' where id=6; -update noar tt set b1='BAYSON04AWUZKZPIII1HV4S4TVHTS9V' where id=6; -update noar ti set b1='BAYSON04AWUZKZPIII1HV4S4TVHTS9V' where id=6; -update noar tt set b2='HTRN4Y8HJ9J13NLKE3K27JXDWJX' where id=6; -update noar ti set b2='HTRN4Y8HJ9J13NLKE3K27JXDWJX' where id=6; -update noar tt set b0='GPVBNFUQWO2I1J7JH6HSK' where id=7; -update noar ti set b0='GPVBNFUQWO2I1J7JH6HSK' where id=7; -update noar tt set b1='DFAX1A56JBW6Y7AO0S4JFMTGEXFCRQU' where id=7; -update noar ti set b1='DFAX1A56JBW6Y7AO0S4JFMTGEXFCRQU' where id=7; -update noar tt set b2='3BVI11ICJX659667G265' where id=7; -update noar ti set b2='3BVI11ICJX659667G265' where id=7; -update noar tt set b0='ZME9A' where id=8; -update noar ti set b0='ZME9A' where id=8; -update noar tt set b1='UPTYEY4UNJPCEMCI6NVVL5LW' where id=8; -update noar ti set b1='UPTYEY4UNJPCEMCI6NVVL5LW' where id=8; -update noar tt set b2='0V6JJU3Z3VE' where id=8; -update noar ti set b2='0V6JJU3Z3VE' where id=8; -update noar tt set b0='F2BKAP8T8R8T4R3WKMVOXZ' where id=9; -update noar ti set b0='F2BKAP8T8R8T4R3WKMVOXZ' where id=9; -update noar tt set b1='JDF2T0VFB7W2MKQMU' where id=9; -update noar ti set b1='JDF2T0VFB7W2MKQMU' where id=9; -update noar tt set b2='TJGGCMAD2XJ7NHZ' where id=9; -update noar ti set b2='TJGGCMAD2XJ7NHZ' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 blob null, -b1 tinyblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='89HQW2DZA6JSQRBZZ0GD0HGCGY3' where id=1; -update noar ti set b0='89HQW2DZA6JSQRBZZ0GD0HGCGY3' where id=1; -update noar tt set b1='NQX44RYUJENELUWJRR0PNEMBRLM5QX' where id=1; -update noar ti set b1='NQX44RYUJENELUWJRR0PNEMBRLM5QX' where id=1; -update noar tt set b2='OZ' where id=1; -update noar ti set b2='OZ' where id=1; -update noar tt set b0='PMB9FGECN5X7GF' where id=2; -update noar ti set b0='PMB9FGECN5X7GF' where id=2; -update noar tt set b1='61' where id=2; -update noar ti set b1='61' where id=2; -update noar tt set b2='6ESZLOBK2DN2XTVPB' where id=2; -update noar ti set b2='6ESZLOBK2DN2XTVPB' where id=2; -update noar tt set b0='JVZBP4BYUPKX' where id=3; -update noar ti set b0='JVZBP4BYUPKX' where id=3; -update noar tt set b1='24263MZNY58HDNO62BSFKWPJW77MXLN' where id=3; -update noar ti set b1='24263MZNY58HDNO62BSFKWPJW77MXLN' where id=3; -update noar tt set b2='D' where id=3; -update noar ti set b2='D' where id=3; -update noar tt set b0='2Y5C' where id=4; -update noar ti set b0='2Y5C' where id=4; -update noar tt set b1='B186EW3PAX2OVMHA05MQOC5DP' where id=4; -update noar ti set b1='B186EW3PAX2OVMHA05MQOC5DP' where id=4; -update noar tt set b2='LHCC7Y7I3GC70S8ZDJZ77GQT3K' where id=4; -update noar ti set b2='LHCC7Y7I3GC70S8ZDJZ77GQT3K' where id=4; -update noar tt set b0='9BA' where id=5; -update noar ti set b0='9BA' where id=5; -update noar tt set b1='FK' where id=5; -update noar ti set b1='FK' where id=5; -update noar tt set b2='JG9DVPO8S' where id=5; -update noar ti set b2='JG9DVPO8S' where id=5; -update noar tt set b0='K0ZPUBQQR21SOZOROVA0WDPW3ZIT' where id=6; -update noar ti set b0='K0ZPUBQQR21SOZOROVA0WDPW3ZIT' where id=6; -update noar tt set b1='9KM3XYBPW40G3' where id=6; -update noar ti set b1='9KM3XYBPW40G3' where id=6; -update noar tt set b2='6J96HOV' where id=6; -update noar ti set b2='6J96HOV' where id=6; -update noar tt set b0='CDKVHA3MZX' where id=7; -update noar ti set b0='CDKVHA3MZX' where id=7; -update noar tt set b1='2DU' where id=7; -update noar ti set b1='2DU' where id=7; -update noar tt set b2='55FNZK1VXBM0Z0UIHHRBZCANSNQDJW' where id=7; -update noar ti set b2='55FNZK1VXBM0Z0UIHHRBZCANSNQDJW' where id=7; -update noar tt set b0='OA89GY2RBCBE8H3OLTYCBEZ7TO7BH2X' where id=8; -update noar ti set b0='OA89GY2RBCBE8H3OLTYCBEZ7TO7BH2X' where id=8; -update noar tt set b1='I' where id=8; -update noar ti set b1='I' where id=8; -update noar tt set b2='21OL' where id=8; -update noar ti set b2='21OL' where id=8; -update noar tt set b0='X2JEQ9NJ0YM6E0E88F5' where id=9; -update noar ti set b0='X2JEQ9NJ0YM6E0E88F5' where id=9; -update noar tt set b1='26RRYIA42ZYNE571RKXIXL' where id=9; -update noar ti set b1='26RRYIA42ZYNE571RKXIXL' where id=9; -update noar tt set b2='1QOCKUXOB1PQXHSYKU13' where id=9; -update noar ti set b2='1QOCKUXOB1PQXHSYKU13' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 blob not null, -b1 tinyblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='QKJ2VXAUU54GLFSLNL' where id=1; -update noar ti set b0='QKJ2VXAUU54GLFSLNL' where id=1; -update noar tt set b1='VQHEADM5' where id=1; -update noar ti set b1='VQHEADM5' where id=1; -update noar tt set b2='4J3AR3P3CO' where id=1; -update noar ti set b2='4J3AR3P3CO' where id=1; -update noar tt set b0='V' where id=2; -update noar ti set b0='V' where id=2; -update noar tt set b1='Z5B9YFY7' where id=2; -update noar ti set b1='Z5B9YFY7' where id=2; -update noar tt set b2='5IZZ8O87R8H9JLOUKTACH89ZG' where id=2; -update noar ti set b2='5IZZ8O87R8H9JLOUKTACH89ZG' where id=2; -update noar tt set b0='0IKFJ6GBDKS1Q' where id=3; -update noar ti set b0='0IKFJ6GBDKS1Q' where id=3; -update noar tt set b1='BCAAXYSWPSNRPHU1S19E07HP' where id=3; -update noar ti set b1='BCAAXYSWPSNRPHU1S19E07HP' where id=3; -update noar tt set b2='9EKB1V28W8M7CGN' where id=3; -update noar ti set b2='9EKB1V28W8M7CGN' where id=3; -update noar tt set b0='WMZZ11JK' where id=4; -update noar ti set b0='WMZZ11JK' where id=4; -update noar tt set b1='X1RCX7ASBLJ1EGNP7' where id=4; -update noar ti set b1='X1RCX7ASBLJ1EGNP7' where id=4; -update noar tt set b2='4CB94JR2ZZ' where id=4; -update noar ti set b2='4CB94JR2ZZ' where id=4; -update noar tt set b0='M3' where id=5; -update noar ti set b0='M3' where id=5; -update noar tt set b1='6GAY6ZXVT1CMHYIWQ8XTGTDFI0WVQMKL' where id=5; -update noar ti set b1='6GAY6ZXVT1CMHYIWQ8XTGTDFI0WVQMKL' where id=5; -update noar tt set b2='UCDRVCSWHCWYC67SRAR' where id=5; -update noar ti set b2='UCDRVCSWHCWYC67SRAR' where id=5; -update noar tt set b0='D0W4JKELXUL' where id=6; -update noar ti set b0='D0W4JKELXUL' where id=6; -update noar tt set b1='HDA4YQQNXCIGWQ348Z' where id=6; -update noar ti set b1='HDA4YQQNXCIGWQ348Z' where id=6; -update noar tt set b2='JBAKJMPT2QNJ4IECLUY4JYNV' where id=6; -update noar ti set b2='JBAKJMPT2QNJ4IECLUY4JYNV' where id=6; -update noar tt set b0='WFO3OIB87X3DK6S1I' where id=7; -update noar ti set b0='WFO3OIB87X3DK6S1I' where id=7; -update noar tt set b1='RS3D5PBFZO9CJWVNLHYT' where id=7; -update noar ti set b1='RS3D5PBFZO9CJWVNLHYT' where id=7; -update noar tt set b2='G' where id=7; -update noar ti set b2='G' where id=7; -update noar tt set b0='2' where id=8; -update noar ti set b0='2' where id=8; -update noar tt set b1='DJRIBESMKXG8S' where id=8; -update noar ti set b1='DJRIBESMKXG8S' where id=8; -update noar tt set b2='KORZIRY4DCLUTCZKKYAY47RQR4XTE2KK' where id=8; -update noar ti set b2='KORZIRY4DCLUTCZKKYAY47RQR4XTE2KK' where id=8; -update noar tt set b0='706B' where id=9; -update noar ti set b0='706B' where id=9; -update noar tt set b1='5GMQUM37WM2XWG6HJV1JGG7AYBHADM5' where id=9; -update noar ti set b1='5GMQUM37WM2XWG6HJV1JGG7AYBHADM5' where id=9; -update noar tt set b2='T0508F2Q9KOGQZXN' where id=9; -update noar ti set b2='T0508F2Q9KOGQZXN' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 blob null, -b1 tinyblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='FDEE00SJGD9Y1W2K7VQSFM7BRF7' where id=1; -update noar ti set b0='FDEE00SJGD9Y1W2K7VQSFM7BRF7' where id=1; -update noar tt set b1='4VBS9YDTZEDRJJM7PZFOHR4YN' where id=1; -update noar ti set b1='4VBS9YDTZEDRJJM7PZFOHR4YN' where id=1; -update noar tt set b2='XMC33BXO5TD64AUOLM' where id=1; -update noar ti set b2='XMC33BXO5TD64AUOLM' where id=1; -update noar tt set b0='8KBB3HQLAWI69NSDRW2' where id=2; -update noar ti set b0='8KBB3HQLAWI69NSDRW2' where id=2; -update noar tt set b1='BQX7B0QR594IAITQCVRH6' where id=2; -update noar ti set b1='BQX7B0QR594IAITQCVRH6' where id=2; -update noar tt set b2='6ONNFQBSJLYNKSW57MJ35E' where id=2; -update noar ti set b2='6ONNFQBSJLYNKSW57MJ35E' where id=2; -update noar tt set b0='PRFTAF07EFUG74GO0' where id=3; -update noar ti set b0='PRFTAF07EFUG74GO0' where id=3; -update noar tt set b1='AE9388LG1Q1V6YZ6WPEIYS' where id=3; -update noar ti set b1='AE9388LG1Q1V6YZ6WPEIYS' where id=3; -update noar tt set b2='8BX07HRNM8WVGZDQQES5TT8IMLA' where id=3; -update noar ti set b2='8BX07HRNM8WVGZDQQES5TT8IMLA' where id=3; -update noar tt set b0='9UGBMVPXOGSEAMGBBF7KN59FK9P9' where id=4; -update noar ti set b0='9UGBMVPXOGSEAMGBBF7KN59FK9P9' where id=4; -update noar tt set b1='89JBHBYODU547JUCHIRHUZLGAKNVLSLH' where id=4; -update noar ti set b1='89JBHBYODU547JUCHIRHUZLGAKNVLSLH' where id=4; -update noar tt set b2='0UBOSKPIS51HKQHY91J99G4U1ERLFH' where id=4; -update noar ti set b2='0UBOSKPIS51HKQHY91J99G4U1ERLFH' where id=4; -update noar tt set b0='I8' where id=5; -update noar ti set b0='I8' where id=5; -update noar tt set b1='CTK5BOQ8BSRB3POABSCUGIVS09C' where id=5; -update noar ti set b1='CTK5BOQ8BSRB3POABSCUGIVS09C' where id=5; -update noar tt set b2='OU01N' where id=5; -update noar ti set b2='OU01N' where id=5; -update noar tt set b0='FMFS' where id=6; -update noar ti set b0='FMFS' where id=6; -update noar tt set b1='PHHGM8F60860CJEVB59B8QKM8T3ZP0' where id=6; -update noar ti set b1='PHHGM8F60860CJEVB59B8QKM8T3ZP0' where id=6; -update noar tt set b2='6KRPVX34JMJG41QBWZAJJ5' where id=6; -update noar ti set b2='6KRPVX34JMJG41QBWZAJJ5' where id=6; -update noar tt set b0='BV2VGQD' where id=7; -update noar ti set b0='BV2VGQD' where id=7; -update noar tt set b1='JY0VHUBJ0YZNNZ8VYAO6HSSYLMA6K' where id=7; -update noar ti set b1='JY0VHUBJ0YZNNZ8VYAO6HSSYLMA6K' where id=7; -update noar tt set b2='FGS7P4Q' where id=7; -update noar ti set b2='FGS7P4Q' where id=7; -update noar tt set b0='MQMZBVENUCJ8UJJ09XNW6IYU2HXQXO' where id=8; -update noar ti set b0='MQMZBVENUCJ8UJJ09XNW6IYU2HXQXO' where id=8; -update noar tt set b1='UASAGZ68COLPUOCTC55' where id=8; -update noar ti set b1='UASAGZ68COLPUOCTC55' where id=8; -update noar tt set b2='4Y8DGERP9R40MM24Z2' where id=8; -update noar ti set b2='4Y8DGERP9R40MM24Z2' where id=8; -update noar tt set b0='46R6F31ILFURWXRZ7SB2U2U' where id=9; -update noar ti set b0='46R6F31ILFURWXRZ7SB2U2U' where id=9; -update noar tt set b1='Y4Y4B3S7' where id=9; -update noar ti set b1='Y4Y4B3S7' where id=9; -update noar tt set b2='RYKIS12QMX' where id=9; -update noar ti set b2='RYKIS12QMX' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 blob not null, -b1 tinyblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='HSFH0ZTYWAWAHMCG7FMSPJF0Z8' where id=1; -update noar ti set b0='HSFH0ZTYWAWAHMCG7FMSPJF0Z8' where id=1; -update noar tt set b1='FW0A82DHRGPWW172BE37QY7NZWGS056Q' where id=1; -update noar ti set b1='FW0A82DHRGPWW172BE37QY7NZWGS056Q' where id=1; -update noar tt set b2='7WFSWBH1ZB5K9VGDERAZ3' where id=1; -update noar ti set b2='7WFSWBH1ZB5K9VGDERAZ3' where id=1; -update noar tt set b0='BNLQV27O4' where id=2; -update noar ti set b0='BNLQV27O4' where id=2; -update noar tt set b1='GCPGNML' where id=2; -update noar ti set b1='GCPGNML' where id=2; -update noar tt set b2='KBJSGMHY037OUXI19MIIC8G36EH2G5' where id=2; -update noar ti set b2='KBJSGMHY037OUXI19MIIC8G36EH2G5' where id=2; -update noar tt set b0='L4C5DMA0ZHTX80DOO28LEZ3DRHFX1' where id=3; -update noar ti set b0='L4C5DMA0ZHTX80DOO28LEZ3DRHFX1' where id=3; -update noar tt set b1='TIA737NKMB4NYWV0CUVZRZS17X' where id=3; -update noar ti set b1='TIA737NKMB4NYWV0CUVZRZS17X' where id=3; -update noar tt set b2='PI6XBD7ZO8VYFN94Z5DF6W' where id=3; -update noar ti set b2='PI6XBD7ZO8VYFN94Z5DF6W' where id=3; -update noar tt set b0='YAXJ29E6' where id=4; -update noar ti set b0='YAXJ29E6' where id=4; -update noar tt set b1='UOYZGEDRRATO' where id=4; -update noar ti set b1='UOYZGEDRRATO' where id=4; -update noar tt set b2='JJ8IYIEGMSQ' where id=4; -update noar ti set b2='JJ8IYIEGMSQ' where id=4; -update noar tt set b0='6' where id=5; -update noar ti set b0='6' where id=5; -update noar tt set b1='EWW35KLM88QKELLNH1NU9GASCGK09E' where id=5; -update noar ti set b1='EWW35KLM88QKELLNH1NU9GASCGK09E' where id=5; -update noar tt set b2='AEL3YG2NYESC8SGI6' where id=5; -update noar ti set b2='AEL3YG2NYESC8SGI6' where id=5; -update noar tt set b0='T0BWPQIK7V1OX2Q5QKID3B9' where id=6; -update noar ti set b0='T0BWPQIK7V1OX2Q5QKID3B9' where id=6; -update noar tt set b1='HJ' where id=6; -update noar ti set b1='HJ' where id=6; -update noar tt set b2='LNVTTVZ0V9TJ1M' where id=6; -update noar ti set b2='LNVTTVZ0V9TJ1M' where id=6; -update noar tt set b0='8ZDS806O8WM9ZS4IY07M' where id=7; -update noar ti set b0='8ZDS806O8WM9ZS4IY07M' where id=7; -update noar tt set b1='VV' where id=7; -update noar ti set b1='VV' where id=7; -update noar tt set b2='WCC2CJAU6D7YDWNU81XH4RKKLMM' where id=7; -update noar ti set b2='WCC2CJAU6D7YDWNU81XH4RKKLMM' where id=7; -update noar tt set b0='LWQ7NYFOBTX0YHXK9' where id=8; -update noar ti set b0='LWQ7NYFOBTX0YHXK9' where id=8; -update noar tt set b1='PGQYIJRK' where id=8; -update noar ti set b1='PGQYIJRK' where id=8; -update noar tt set b2='533Q0D' where id=8; -update noar ti set b2='533Q0D' where id=8; -update noar tt set b0='JTI9QQ9S5U57YJPX7SOLZ7YJWXL' where id=9; -update noar ti set b0='JTI9QQ9S5U57YJPX7SOLZ7YJWXL' where id=9; -update noar tt set b1='UQ8T18V5N' where id=9; -update noar ti set b1='UQ8T18V5N' where id=9; -update noar tt set b2='L6V03NK4BM686NRIL2XUL1TJ2UQZM4TH' where id=9; -update noar ti set b2='L6V03NK4BM686NRIL2XUL1TJ2UQZM4TH' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 blob null, -b1 tinyblob null, -b2 text null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='PJ1E2HNNBI4ELOR3D12XPPOAQ9DSV' where id=1; -update noar ti set b0='PJ1E2HNNBI4ELOR3D12XPPOAQ9DSV' where id=1; -update noar tt set b1='68BP87VDYTSIYZJKLIL60BN603I0' where id=1; -update noar ti set b1='68BP87VDYTSIYZJKLIL60BN603I0' where id=1; -update noar tt set b2='0BBFOY9HAG6VIXO6Q13PW' where id=1; -update noar ti set b2='0BBFOY9HAG6VIXO6Q13PW' where id=1; -update noar tt set b0='SR5XPP0YP76VA6V9NQBZ' where id=2; -update noar ti set b0='SR5XPP0YP76VA6V9NQBZ' where id=2; -update noar tt set b1='R1REPTM31Q5' where id=2; -update noar ti set b1='R1REPTM31Q5' where id=2; -update noar tt set b2='DI4RB2W63KPOZ6TVT68TR' where id=2; -update noar ti set b2='DI4RB2W63KPOZ6TVT68TR' where id=2; -update noar tt set b0='ZLVRXQHYMMPX3P81712GCLHLNSX0' where id=3; -update noar ti set b0='ZLVRXQHYMMPX3P81712GCLHLNSX0' where id=3; -update noar tt set b1='CPPOLKZE6ONH1I2N' where id=3; -update noar ti set b1='CPPOLKZE6ONH1I2N' where id=3; -update noar tt set b2='WSUHEQQM7Y7XGNVEV' where id=3; -update noar ti set b2='WSUHEQQM7Y7XGNVEV' where id=3; -update noar tt set b0='9MJJKQGO0' where id=4; -update noar ti set b0='9MJJKQGO0' where id=4; -update noar tt set b1='YSBTVV7YXKMQBJSXJCM6B59' where id=4; -update noar ti set b1='YSBTVV7YXKMQBJSXJCM6B59' where id=4; -update noar tt set b2='JO1RCM80UZKQGTYSQJ6' where id=4; -update noar ti set b2='JO1RCM80UZKQGTYSQJ6' where id=4; -update noar tt set b0='0YD46MV1XPS' where id=5; -update noar ti set b0='0YD46MV1XPS' where id=5; -update noar tt set b1='03' where id=5; -update noar ti set b1='03' where id=5; -update noar tt set b2='0JOLC82TINTME' where id=5; -update noar ti set b2='0JOLC82TINTME' where id=5; -update noar tt set b0='I0J37Y85HOMS847YR1D9XFWM' where id=6; -update noar ti set b0='I0J37Y85HOMS847YR1D9XFWM' where id=6; -update noar tt set b1='5GPA0UDONNC6XIF6' where id=6; -update noar ti set b1='5GPA0UDONNC6XIF6' where id=6; -update noar tt set b2='U425D3Z41P8OC' where id=6; -update noar ti set b2='U425D3Z41P8OC' where id=6; -update noar tt set b0='WG' where id=7; -update noar ti set b0='WG' where id=7; -update noar tt set b1='A8INT0H' where id=7; -update noar ti set b1='A8INT0H' where id=7; -update noar tt set b2='JMGT52ZFPU6T67Z0Y20LS7' where id=7; -update noar ti set b2='JMGT52ZFPU6T67Z0Y20LS7' where id=7; -update noar tt set b0='KT8EFTIRVHR3Q0ZJVTWPJUBKOYF97IG2' where id=8; -update noar ti set b0='KT8EFTIRVHR3Q0ZJVTWPJUBKOYF97IG2' where id=8; -update noar tt set b1='BK5GAXW' where id=8; -update noar ti set b1='BK5GAXW' where id=8; -update noar tt set b2='SMTYS20L9C06PH8RRN87' where id=8; -update noar ti set b2='SMTYS20L9C06PH8RRN87' where id=8; -update noar tt set b0='2UELG1RA45IC6FLK97PLSE87VD8ZAF' where id=9; -update noar ti set b0='2UELG1RA45IC6FLK97PLSE87VD8ZAF' where id=9; -update noar tt set b1='9' where id=9; -update noar ti set b1='9' where id=9; -update noar tt set b2='8LK5FLJIKUY6GL5' where id=9; -update noar ti set b2='8LK5FLJIKUY6GL5' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 blob not null, -b1 tinyblob not null, -b2 text not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='AAXLS5G0PPUS' where id=1; -update noar ti set b0='AAXLS5G0PPUS' where id=1; -update noar tt set b1='WBBO5Q' where id=1; -update noar ti set b1='WBBO5Q' where id=1; -update noar tt set b2='814OEE9XUVIGN3PU7U3APBPI' where id=1; -update noar ti set b2='814OEE9XUVIGN3PU7U3APBPI' where id=1; -update noar tt set b0='XPLJ89D046BAKOO3EVDW1' where id=2; -update noar ti set b0='XPLJ89D046BAKOO3EVDW1' where id=2; -update noar tt set b1='TT8X8VOJG' where id=2; -update noar ti set b1='TT8X8VOJG' where id=2; -update noar tt set b2='JVV0CL' where id=2; -update noar ti set b2='JVV0CL' where id=2; -update noar tt set b0='J' where id=3; -update noar ti set b0='J' where id=3; -update noar tt set b1='RSRIUJ' where id=3; -update noar ti set b1='RSRIUJ' where id=3; -update noar tt set b2='LR2ZIH' where id=3; -update noar ti set b2='LR2ZIH' where id=3; -update noar tt set b0='6GF9CAL1EJLYO' where id=4; -update noar ti set b0='6GF9CAL1EJLYO' where id=4; -update noar tt set b1='JQYFXCUBLAWP2B' where id=4; -update noar ti set b1='JQYFXCUBLAWP2B' where id=4; -update noar tt set b2='LICKD8USL37F5F3RYYPSQSN' where id=4; -update noar ti set b2='LICKD8USL37F5F3RYYPSQSN' where id=4; -update noar tt set b0='Y4LGGE9XBOZ4' where id=5; -update noar ti set b0='Y4LGGE9XBOZ4' where id=5; -update noar tt set b1='6ZC2MRJ' where id=5; -update noar ti set b1='6ZC2MRJ' where id=5; -update noar tt set b2='30X3EE19FXZQVYSDTLDNAUCXP97SW99' where id=5; -update noar ti set b2='30X3EE19FXZQVYSDTLDNAUCXP97SW99' where id=5; -update noar tt set b0='KD9RVH' where id=6; -update noar ti set b0='KD9RVH' where id=6; -update noar tt set b1='U8GYRTCCXBVL7D' where id=6; -update noar ti set b1='U8GYRTCCXBVL7D' where id=6; -update noar tt set b2='0Z822KQQ4CI3G20C290O05' where id=6; -update noar ti set b2='0Z822KQQ4CI3G20C290O05' where id=6; -update noar tt set b0='TOO353J5QJ5PXT7QR' where id=7; -update noar ti set b0='TOO353J5QJ5PXT7QR' where id=7; -update noar tt set b1='9L4KVXIM9E1WF6Z8EB5APXVEL' where id=7; -update noar ti set b1='9L4KVXIM9E1WF6Z8EB5APXVEL' where id=7; -update noar tt set b2='F9XI1K' where id=7; -update noar ti set b2='F9XI1K' where id=7; -update noar tt set b0='39IV1R3FSSA3SV' where id=8; -update noar ti set b0='39IV1R3FSSA3SV' where id=8; -update noar tt set b1='WM15C2NO3WMTQ1L56LAQ' where id=8; -update noar ti set b1='WM15C2NO3WMTQ1L56LAQ' where id=8; -update noar tt set b2='BEQ04' where id=8; -update noar ti set b2='BEQ04' where id=8; -update noar tt set b0='MCIDX6SA137ZUIDQH5VQNE3HNLDLV1S' where id=9; -update noar ti set b0='MCIDX6SA137ZUIDQH5VQNE3HNLDLV1S' where id=9; -update noar tt set b1='WLNH9CVRXRM4' where id=9; -update noar ti set b1='WLNH9CVRXRM4' where id=9; -update noar tt set b2='JY2IKQH2A1L6ENF0NF73' where id=9; -update noar ti set b2='JY2IKQH2A1L6ENF0NF73' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 blob null, -b1 blob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='IXZWHX4CZCW9ML2S65PTDI1HJ35U2ON' where id=1; -update noar ti set b0='IXZWHX4CZCW9ML2S65PTDI1HJ35U2ON' where id=1; -update noar tt set b1='QR3HW6I0KDWUK5' where id=1; -update noar ti set b1='QR3HW6I0KDWUK5' where id=1; -update noar tt set b2='U22MTI3N89H50N4BOYB7TUIS1PTV16EV' where id=1; -update noar ti set b2='U22MTI3N89H50N4BOYB7TUIS1PTV16EV' where id=1; -update noar tt set b0='QCS3D652TVA9DYYIYX87' where id=2; -update noar ti set b0='QCS3D652TVA9DYYIYX87' where id=2; -update noar tt set b1='DQGMST' where id=2; -update noar ti set b1='DQGMST' where id=2; -update noar tt set b2='LK9HJC4TVACHAHRATRA0TEB9K8OK' where id=2; -update noar ti set b2='LK9HJC4TVACHAHRATRA0TEB9K8OK' where id=2; -update noar tt set b0='SYTWGM7QYA9JO45UV85ED4' where id=3; -update noar ti set b0='SYTWGM7QYA9JO45UV85ED4' where id=3; -update noar tt set b1='MUB5JTTLW' where id=3; -update noar ti set b1='MUB5JTTLW' where id=3; -update noar tt set b2='YQR3ICEQA71' where id=3; -update noar ti set b2='YQR3ICEQA71' where id=3; -update noar tt set b0='SX' where id=4; -update noar ti set b0='SX' where id=4; -update noar tt set b1='IDG64I47X6PI0FYMB' where id=4; -update noar ti set b1='IDG64I47X6PI0FYMB' where id=4; -update noar tt set b2='2SHFW1M6UB437PA' where id=4; -update noar ti set b2='2SHFW1M6UB437PA' where id=4; -update noar tt set b0='43ZLUHPPBMAK6EA7SFID8' where id=5; -update noar ti set b0='43ZLUHPPBMAK6EA7SFID8' where id=5; -update noar tt set b1='H9L5L0KQG9IWXK46L1T' where id=5; -update noar ti set b1='H9L5L0KQG9IWXK46L1T' where id=5; -update noar tt set b2='8E09LXUMO' where id=5; -update noar ti set b2='8E09LXUMO' where id=5; -update noar tt set b0='CMCNAJWVO2QHB7C2UE2GFY' where id=6; -update noar ti set b0='CMCNAJWVO2QHB7C2UE2GFY' where id=6; -update noar tt set b1='JWVMMU' where id=6; -update noar ti set b1='JWVMMU' where id=6; -update noar tt set b2='7ER1I3QIR23P06LDKY1DMSGXR' where id=6; -update noar ti set b2='7ER1I3QIR23P06LDKY1DMSGXR' where id=6; -update noar tt set b0='Q8FPD00R73' where id=7; -update noar ti set b0='Q8FPD00R73' where id=7; -update noar tt set b1='1PXML1EAX7EVDACPEJV' where id=7; -update noar ti set b1='1PXML1EAX7EVDACPEJV' where id=7; -update noar tt set b2='Z84KEYJQRZA01CZR67' where id=7; -update noar ti set b2='Z84KEYJQRZA01CZR67' where id=7; -update noar tt set b0='Y5NA6ZHJ7M9X43' where id=8; -update noar ti set b0='Y5NA6ZHJ7M9X43' where id=8; -update noar tt set b1='GRNUNYHSFWWB6SJI37F5HBHHK3IJJ' where id=8; -update noar ti set b1='GRNUNYHSFWWB6SJI37F5HBHHK3IJJ' where id=8; -update noar tt set b2='I1XNSPT08' where id=8; -update noar ti set b2='I1XNSPT08' where id=8; -update noar tt set b0='8TBDS1ZAVCTZCZ8D' where id=9; -update noar ti set b0='8TBDS1ZAVCTZCZ8D' where id=9; -update noar tt set b1='W' where id=9; -update noar ti set b1='W' where id=9; -update noar tt set b2='95QSR3SL5KUZ' where id=9; -update noar ti set b2='95QSR3SL5KUZ' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 blob not null, -b1 blob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='WVAI8AEDFU6X1E4O6JYXNV7ELO90Q' where id=1; -update noar ti set b0='WVAI8AEDFU6X1E4O6JYXNV7ELO90Q' where id=1; -update noar tt set b1='6RHS0DF2OE1KKY6EKQO70' where id=1; -update noar ti set b1='6RHS0DF2OE1KKY6EKQO70' where id=1; -update noar tt set b2='Z1D4ZRTTRG3DAD8P6SO4FH1FV' where id=1; -update noar ti set b2='Z1D4ZRTTRG3DAD8P6SO4FH1FV' where id=1; -update noar tt set b0='GE89XGF9XIH8' where id=2; -update noar ti set b0='GE89XGF9XIH8' where id=2; -update noar tt set b1='AILJ5MACC5W' where id=2; -update noar ti set b1='AILJ5MACC5W' where id=2; -update noar tt set b2='9RGXWEA6CGO8G' where id=2; -update noar ti set b2='9RGXWEA6CGO8G' where id=2; -update noar tt set b0='043GDPRT3PN3UJCPQ6SUQB' where id=3; -update noar ti set b0='043GDPRT3PN3UJCPQ6SUQB' where id=3; -update noar tt set b1='WMCKIY0NQJI7J8T4J2' where id=3; -update noar ti set b1='WMCKIY0NQJI7J8T4J2' where id=3; -update noar tt set b2='COC9JP7DGW7E3LZU48449L' where id=3; -update noar ti set b2='COC9JP7DGW7E3LZU48449L' where id=3; -update noar tt set b0='IY4NG8VI1XELF8QKT9D42U5B3ERULKS' where id=4; -update noar ti set b0='IY4NG8VI1XELF8QKT9D42U5B3ERULKS' where id=4; -update noar tt set b1='L8ENZSLYV1KUT2849FO4A8DKHDYUDC5' where id=4; -update noar ti set b1='L8ENZSLYV1KUT2849FO4A8DKHDYUDC5' where id=4; -update noar tt set b2='DMNEG6' where id=4; -update noar ti set b2='DMNEG6' where id=4; -update noar tt set b0='U4NO' where id=5; -update noar ti set b0='U4NO' where id=5; -update noar tt set b1='I4X7OL' where id=5; -update noar ti set b1='I4X7OL' where id=5; -update noar tt set b2='SIG8DLU3EUFWPXA4AOD0' where id=5; -update noar ti set b2='SIG8DLU3EUFWPXA4AOD0' where id=5; -update noar tt set b0='2DSFS0IMOS' where id=6; -update noar ti set b0='2DSFS0IMOS' where id=6; -update noar tt set b1='LVTRKJA3QM8NS9GP3TOOYK9CYFKQQFOX' where id=6; -update noar ti set b1='LVTRKJA3QM8NS9GP3TOOYK9CYFKQQFOX' where id=6; -update noar tt set b2='ZTN7NFM8E584MLMPIVO0PDNX5XRVH' where id=6; -update noar ti set b2='ZTN7NFM8E584MLMPIVO0PDNX5XRVH' where id=6; -update noar tt set b0='R3UX8RP4PDR4CJK' where id=7; -update noar ti set b0='R3UX8RP4PDR4CJK' where id=7; -update noar tt set b1='16R9JH7' where id=7; -update noar ti set b1='16R9JH7' where id=7; -update noar tt set b2='U81LKIQVFI20UJEUO0VS2OAV' where id=7; -update noar ti set b2='U81LKIQVFI20UJEUO0VS2OAV' where id=7; -update noar tt set b0='HB9HCVU' where id=8; -update noar ti set b0='HB9HCVU' where id=8; -update noar tt set b1='470I0WQAP2666' where id=8; -update noar ti set b1='470I0WQAP2666' where id=8; -update noar tt set b2='SGZ1B0ARGAHV2YQ' where id=8; -update noar ti set b2='SGZ1B0ARGAHV2YQ' where id=8; -update noar tt set b0='1AY7PKEEPN32' where id=9; -update noar ti set b0='1AY7PKEEPN32' where id=9; -update noar tt set b1='VUQRLRXIHSJ6V264GOEJYWEWO0A' where id=9; -update noar ti set b1='VUQRLRXIHSJ6V264GOEJYWEWO0A' where id=9; -update noar tt set b2='7Y0W723Y23YVYJ6GPA4F' where id=9; -update noar ti set b2='7Y0W723Y23YVYJ6GPA4F' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 blob null, -b1 blob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='98P9O693V1NXZ9LP' where id=1; -update noar ti set b0='98P9O693V1NXZ9LP' where id=1; -update noar tt set b1='K9T6WBSQB7PVAK3JZVXN' where id=1; -update noar ti set b1='K9T6WBSQB7PVAK3JZVXN' where id=1; -update noar tt set b2='IPZGMVHE63DI5BDS05A487' where id=1; -update noar ti set b2='IPZGMVHE63DI5BDS05A487' where id=1; -update noar tt set b0='BSVY0QSL9W9GPFKMSO5A2BN7HMC1UX' where id=2; -update noar ti set b0='BSVY0QSL9W9GPFKMSO5A2BN7HMC1UX' where id=2; -update noar tt set b1='MIFHIG' where id=2; -update noar ti set b1='MIFHIG' where id=2; -update noar tt set b2='6139EB0SNTZEP0XKAOPM' where id=2; -update noar ti set b2='6139EB0SNTZEP0XKAOPM' where id=2; -update noar tt set b0='T73I1FL5AUDUA' where id=3; -update noar ti set b0='T73I1FL5AUDUA' where id=3; -update noar tt set b1='42ZUAEJSMHLR8N068TS7ZRVK47D' where id=3; -update noar ti set b1='42ZUAEJSMHLR8N068TS7ZRVK47D' where id=3; -update noar tt set b2='I6UK8YK5FO4OF' where id=3; -update noar ti set b2='I6UK8YK5FO4OF' where id=3; -update noar tt set b0='PTR8P4K3LALD285V' where id=4; -update noar ti set b0='PTR8P4K3LALD285V' where id=4; -update noar tt set b1='QGQ8M6WWTGIVZ9J11MRIAJZ7LYY' where id=4; -update noar ti set b1='QGQ8M6WWTGIVZ9J11MRIAJZ7LYY' where id=4; -update noar tt set b2='A54MBVPNYX02' where id=4; -update noar ti set b2='A54MBVPNYX02' where id=4; -update noar tt set b0='G2IRAH5HEZGV1' where id=5; -update noar ti set b0='G2IRAH5HEZGV1' where id=5; -update noar tt set b1='K7P8CWD3G1NEJ0B606NEC0AM9EWM' where id=5; -update noar ti set b1='K7P8CWD3G1NEJ0B606NEC0AM9EWM' where id=5; -update noar tt set b2='9WC5K0JYPSGEP0CTP59' where id=5; -update noar ti set b2='9WC5K0JYPSGEP0CTP59' where id=5; -update noar tt set b0='3S' where id=6; -update noar ti set b0='3S' where id=6; -update noar tt set b1='ZQ96C864' where id=6; -update noar ti set b1='ZQ96C864' where id=6; -update noar tt set b2='HHPMIIPN0ZDT6A9VVB675V29VS' where id=6; -update noar ti set b2='HHPMIIPN0ZDT6A9VVB675V29VS' where id=6; -update noar tt set b0='18XOL' where id=7; -update noar ti set b0='18XOL' where id=7; -update noar tt set b1='DXAXGVAYWAIEYDUQIJSH2J5J1K5' where id=7; -update noar ti set b1='DXAXGVAYWAIEYDUQIJSH2J5J1K5' where id=7; -update noar tt set b2='805OY0Y0B7J974FGTWN2QMO9' where id=7; -update noar ti set b2='805OY0Y0B7J974FGTWN2QMO9' where id=7; -update noar tt set b0='N1U6ZUL0MWO' where id=8; -update noar ti set b0='N1U6ZUL0MWO' where id=8; -update noar tt set b1='EBXY2S14913PV2MHYM8' where id=8; -update noar ti set b1='EBXY2S14913PV2MHYM8' where id=8; -update noar tt set b2='E6V25MRE8EGW4KRBEC744LST69R1HU5' where id=8; -update noar ti set b2='E6V25MRE8EGW4KRBEC744LST69R1HU5' where id=8; -update noar tt set b0='RFT7ZQI963AT85JNAQPO' where id=9; -update noar ti set b0='RFT7ZQI963AT85JNAQPO' where id=9; -update noar tt set b1='1S' where id=9; -update noar ti set b1='1S' where id=9; -update noar tt set b2='3ZC31H3O22' where id=9; -update noar ti set b2='3ZC31H3O22' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 blob not null, -b1 blob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='QAO3X5CJKILWGDLA' where id=1; -update noar ti set b0='QAO3X5CJKILWGDLA' where id=1; -update noar tt set b1='9F9E8DSZ48V4PI50' where id=1; -update noar ti set b1='9F9E8DSZ48V4PI50' where id=1; -update noar tt set b2='AP6SL7SAH96NR228TS1F6' where id=1; -update noar ti set b2='AP6SL7SAH96NR228TS1F6' where id=1; -update noar tt set b0='DYTLSR4NZ6RVVUAM' where id=2; -update noar ti set b0='DYTLSR4NZ6RVVUAM' where id=2; -update noar tt set b1='TA5VJ42QB227AMUHDPL0IRSZSEMC' where id=2; -update noar ti set b1='TA5VJ42QB227AMUHDPL0IRSZSEMC' where id=2; -update noar tt set b2='ETQ8U6W998SW28J48' where id=2; -update noar ti set b2='ETQ8U6W998SW28J48' where id=2; -update noar tt set b0='5FSBN03813OG12CF54PTN9' where id=3; -update noar ti set b0='5FSBN03813OG12CF54PTN9' where id=3; -update noar tt set b1='0HFJUX62W4V28TFU3E0XJY' where id=3; -update noar ti set b1='0HFJUX62W4V28TFU3E0XJY' where id=3; -update noar tt set b2='17N' where id=3; -update noar ti set b2='17N' where id=3; -update noar tt set b0='D' where id=4; -update noar ti set b0='D' where id=4; -update noar tt set b1='Z3JBC1MTM2XC746ONBL44' where id=4; -update noar ti set b1='Z3JBC1MTM2XC746ONBL44' where id=4; -update noar tt set b2='RTD' where id=4; -update noar ti set b2='RTD' where id=4; -update noar tt set b0='9CCBGMSK9F8Q2RUXFS5VDVLGEZ63KWMS' where id=5; -update noar ti set b0='9CCBGMSK9F8Q2RUXFS5VDVLGEZ63KWMS' where id=5; -update noar tt set b1='UB3EX0L1N71AYE6BM85OWAHPDPC' where id=5; -update noar ti set b1='UB3EX0L1N71AYE6BM85OWAHPDPC' where id=5; -update noar tt set b2='MID3MUDG' where id=5; -update noar ti set b2='MID3MUDG' where id=5; -update noar tt set b0='UDX1TX8O69PLNWCR03VE3B3Z8IYCF8O' where id=6; -update noar ti set b0='UDX1TX8O69PLNWCR03VE3B3Z8IYCF8O' where id=6; -update noar tt set b1='IO07JDTZD0YSCW7D7JULKH2XR8Q' where id=6; -update noar ti set b1='IO07JDTZD0YSCW7D7JULKH2XR8Q' where id=6; -update noar tt set b2='RG4DI8AJED6CSID7V3ZO4OGTTZ1' where id=6; -update noar ti set b2='RG4DI8AJED6CSID7V3ZO4OGTTZ1' where id=6; -update noar tt set b0='LPRTXX5' where id=7; -update noar ti set b0='LPRTXX5' where id=7; -update noar tt set b1='HHIXGFDHRB' where id=7; -update noar ti set b1='HHIXGFDHRB' where id=7; -update noar tt set b2='9H8NPOIGYBP6U487P1ZUROFOAT5SJW97' where id=7; -update noar ti set b2='9H8NPOIGYBP6U487P1ZUROFOAT5SJW97' where id=7; -update noar tt set b0='KK7Y06H' where id=8; -update noar ti set b0='KK7Y06H' where id=8; -update noar tt set b1='01SMRXUZ2R' where id=8; -update noar ti set b1='01SMRXUZ2R' where id=8; -update noar tt set b2='FRLFQZEXW7O2YP4M' where id=8; -update noar ti set b2='FRLFQZEXW7O2YP4M' where id=8; -update noar tt set b0='WM9K587L' where id=9; -update noar ti set b0='WM9K587L' where id=9; -update noar tt set b1='00BIDQXMH' where id=9; -update noar ti set b1='00BIDQXMH' where id=9; -update noar tt set b2='DKLS' where id=9; -update noar ti set b2='DKLS' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 blob null, -b1 blob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='ZI0WNWKEK8CLBNA8586IKD62TIMCSJ2B' where id=1; -update noar ti set b0='ZI0WNWKEK8CLBNA8586IKD62TIMCSJ2B' where id=1; -update noar tt set b1='Y2TW67X7' where id=1; -update noar ti set b1='Y2TW67X7' where id=1; -update noar tt set b2='PH' where id=1; -update noar ti set b2='PH' where id=1; -update noar tt set b0='VUIQ65K' where id=2; -update noar ti set b0='VUIQ65K' where id=2; -update noar tt set b1='0VGZ8KWSB' where id=2; -update noar ti set b1='0VGZ8KWSB' where id=2; -update noar tt set b2='C8DYRPU2JW1CP5' where id=2; -update noar ti set b2='C8DYRPU2JW1CP5' where id=2; -update noar tt set b0='X' where id=3; -update noar ti set b0='X' where id=3; -update noar tt set b1='Q5F3MZZ' where id=3; -update noar ti set b1='Q5F3MZZ' where id=3; -update noar tt set b2='YZ1R0TJLARJ61DHG6G39XW5N891Y' where id=3; -update noar ti set b2='YZ1R0TJLARJ61DHG6G39XW5N891Y' where id=3; -update noar tt set b0='O1K423U69LMMA5E1HKH' where id=4; -update noar ti set b0='O1K423U69LMMA5E1HKH' where id=4; -update noar tt set b1='R6VOP94BXWDICWTD1N' where id=4; -update noar ti set b1='R6VOP94BXWDICWTD1N' where id=4; -update noar tt set b2='I6SFGIYV5Z0R6FA17FT289Y2JKEMLD' where id=4; -update noar ti set b2='I6SFGIYV5Z0R6FA17FT289Y2JKEMLD' where id=4; -update noar tt set b0='P0PTIZBT0VBQ8Z5O1' where id=5; -update noar ti set b0='P0PTIZBT0VBQ8Z5O1' where id=5; -update noar tt set b1='Z3NM65FDT5ES2CCH0T1' where id=5; -update noar ti set b1='Z3NM65FDT5ES2CCH0T1' where id=5; -update noar tt set b2='CF2' where id=5; -update noar ti set b2='CF2' where id=5; -update noar tt set b0='LWK' where id=6; -update noar ti set b0='LWK' where id=6; -update noar tt set b1='3YF2DGHA' where id=6; -update noar ti set b1='3YF2DGHA' where id=6; -update noar tt set b2='DFQCONK04' where id=6; -update noar ti set b2='DFQCONK04' where id=6; -update noar tt set b0='5KAMOFWPXOP' where id=7; -update noar ti set b0='5KAMOFWPXOP' where id=7; -update noar tt set b1='BHU8F' where id=7; -update noar ti set b1='BHU8F' where id=7; -update noar tt set b2='NIRQ47GP' where id=7; -update noar ti set b2='NIRQ47GP' where id=7; -update noar tt set b0='T4OH01O811EB8H' where id=8; -update noar ti set b0='T4OH01O811EB8H' where id=8; -update noar tt set b1='0FHEH8U045T3Z3VECYRNXQYGU4WU' where id=8; -update noar ti set b1='0FHEH8U045T3Z3VECYRNXQYGU4WU' where id=8; -update noar tt set b2='14T35GPVUVPXONKOO0S7D4JM6TPHO7SH' where id=8; -update noar ti set b2='14T35GPVUVPXONKOO0S7D4JM6TPHO7SH' where id=8; -update noar tt set b0='6894B5HADGHLN' where id=9; -update noar ti set b0='6894B5HADGHLN' where id=9; -update noar tt set b1='V3F401GUM1H60HSYN5XMXN69P' where id=9; -update noar ti set b1='V3F401GUM1H60HSYN5XMXN69P' where id=9; -update noar tt set b2='BANDB' where id=9; -update noar ti set b2='BANDB' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 blob not null, -b1 blob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='YAX' where id=1; -update noar ti set b0='YAX' where id=1; -update noar tt set b1='UUA8JI8ZRUIL' where id=1; -update noar ti set b1='UUA8JI8ZRUIL' where id=1; -update noar tt set b2='Z5P2NI5V8AWINU6KLP' where id=1; -update noar ti set b2='Z5P2NI5V8AWINU6KLP' where id=1; -update noar tt set b0='JAWR6XH3F0TOPI47J6KEOQT82NW' where id=2; -update noar ti set b0='JAWR6XH3F0TOPI47J6KEOQT82NW' where id=2; -update noar tt set b1='QYP3K9BECZ9NS41BTMY27' where id=2; -update noar ti set b1='QYP3K9BECZ9NS41BTMY27' where id=2; -update noar tt set b2='8VUI5AMSC92RZX8GH1' where id=2; -update noar ti set b2='8VUI5AMSC92RZX8GH1' where id=2; -update noar tt set b0='D0W7G4U9SPQVLG6ZPAVN1LL' where id=3; -update noar ti set b0='D0W7G4U9SPQVLG6ZPAVN1LL' where id=3; -update noar tt set b1='R2YXFUKPZBADY6N1GCQFEXRY078FNA' where id=3; -update noar ti set b1='R2YXFUKPZBADY6N1GCQFEXRY078FNA' where id=3; -update noar tt set b2='R7PLQXEX25WHZ94HW7HYP' where id=3; -update noar ti set b2='R7PLQXEX25WHZ94HW7HYP' where id=3; -update noar tt set b0='U0W9ZVMKM7K8' where id=4; -update noar ti set b0='U0W9ZVMKM7K8' where id=4; -update noar tt set b1='U' where id=4; -update noar ti set b1='U' where id=4; -update noar tt set b2='3FOIEYZCL2X3UW' where id=4; -update noar ti set b2='3FOIEYZCL2X3UW' where id=4; -update noar tt set b0='P9NSYCPG1P0BFEQOHQ0YL5C9VMKZU' where id=5; -update noar ti set b0='P9NSYCPG1P0BFEQOHQ0YL5C9VMKZU' where id=5; -update noar tt set b1='4OY294SQFNFZM' where id=5; -update noar ti set b1='4OY294SQFNFZM' where id=5; -update noar tt set b2='XDK7' where id=5; -update noar ti set b2='XDK7' where id=5; -update noar tt set b0='MPY0FEGK1ZQ8CG90G' where id=6; -update noar ti set b0='MPY0FEGK1ZQ8CG90G' where id=6; -update noar tt set b1='N4MM4PIAHXR4GYYIQ8NP7RRY3RVWC' where id=6; -update noar ti set b1='N4MM4PIAHXR4GYYIQ8NP7RRY3RVWC' where id=6; -update noar tt set b2='HENDN4UMXS3BFHV9B4Z3ZUXKW927RM' where id=6; -update noar ti set b2='HENDN4UMXS3BFHV9B4Z3ZUXKW927RM' where id=6; -update noar tt set b0='CWW8WZ21JMGASA1EGAM6T8GPN37KXT65' where id=7; -update noar ti set b0='CWW8WZ21JMGASA1EGAM6T8GPN37KXT65' where id=7; -update noar tt set b1='GHXPI36S' where id=7; -update noar ti set b1='GHXPI36S' where id=7; -update noar tt set b2='1G8VRE7Y58F0' where id=7; -update noar ti set b2='1G8VRE7Y58F0' where id=7; -update noar tt set b0='V4IG5V8MPL6VYH8LK3198WTU' where id=8; -update noar ti set b0='V4IG5V8MPL6VYH8LK3198WTU' where id=8; -update noar tt set b1='M9LL14XZOAO9JY6COFRWECC' where id=8; -update noar ti set b1='M9LL14XZOAO9JY6COFRWECC' where id=8; -update noar tt set b2='NVRAKYIWYPFFOD0BT5T4Z' where id=8; -update noar ti set b2='NVRAKYIWYPFFOD0BT5T4Z' where id=8; -update noar tt set b0='M0JILK4VK7SVE557XUW908ZNHM4VD1TV' where id=9; -update noar ti set b0='M0JILK4VK7SVE557XUW908ZNHM4VD1TV' where id=9; -update noar tt set b1='K9U3DVOMLAVP8KGQ11NYEV6HE6JS' where id=9; -update noar ti set b1='K9U3DVOMLAVP8KGQ11NYEV6HE6JS' where id=9; -update noar tt set b2='N9ENZX5NTSTOHLVBPRY9' where id=9; -update noar ti set b2='N9ENZX5NTSTOHLVBPRY9' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 blob null, -b1 blob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='56AMJL983G85V1XPLSP0' where id=1; -update noar ti set b0='56AMJL983G85V1XPLSP0' where id=1; -update noar tt set b1='3FWFB4' where id=1; -update noar ti set b1='3FWFB4' where id=1; -update noar tt set b2='0DZO1YWIZDXEZSW6QL3R1JE' where id=1; -update noar ti set b2='0DZO1YWIZDXEZSW6QL3R1JE' where id=1; -update noar tt set b0='DH6YE' where id=2; -update noar ti set b0='DH6YE' where id=2; -update noar tt set b1='Z1Y31' where id=2; -update noar ti set b1='Z1Y31' where id=2; -update noar tt set b2='C6H46H7IPKQ9RTN' where id=2; -update noar ti set b2='C6H46H7IPKQ9RTN' where id=2; -update noar tt set b0='M2JTOSE3ZUE7Z8D' where id=3; -update noar ti set b0='M2JTOSE3ZUE7Z8D' where id=3; -update noar tt set b1='P6ITGSNVA97Z11AGIW5BZLTFNDVG9GZ0' where id=3; -update noar ti set b1='P6ITGSNVA97Z11AGIW5BZLTFNDVG9GZ0' where id=3; -update noar tt set b2='D8RUIFXX15BSYKOTZLM1J6YVECXQ' where id=3; -update noar ti set b2='D8RUIFXX15BSYKOTZLM1J6YVECXQ' where id=3; -update noar tt set b0='ZB' where id=4; -update noar ti set b0='ZB' where id=4; -update noar tt set b1='BY264UQW5RX5T2KB2M' where id=4; -update noar ti set b1='BY264UQW5RX5T2KB2M' where id=4; -update noar tt set b2='P4Y' where id=4; -update noar ti set b2='P4Y' where id=4; -update noar tt set b0='R0E536JU0' where id=5; -update noar ti set b0='R0E536JU0' where id=5; -update noar tt set b1='NE1TFYCHQG8VZIMH8KB1NDG' where id=5; -update noar ti set b1='NE1TFYCHQG8VZIMH8KB1NDG' where id=5; -update noar tt set b2='L9FE' where id=5; -update noar ti set b2='L9FE' where id=5; -update noar tt set b0='IOW7HK5VP3JMKWOWR' where id=6; -update noar ti set b0='IOW7HK5VP3JMKWOWR' where id=6; -update noar tt set b1='H5PH3OLPW2' where id=6; -update noar ti set b1='H5PH3OLPW2' where id=6; -update noar tt set b2='A4SJ6UOC' where id=6; -update noar ti set b2='A4SJ6UOC' where id=6; -update noar tt set b0='OGXACY' where id=7; -update noar ti set b0='OGXACY' where id=7; -update noar tt set b1='1HDURLDWQFU6W0R68' where id=7; -update noar ti set b1='1HDURLDWQFU6W0R68' where id=7; -update noar tt set b2='9KSVB3P8GBVL7WSS29W6E' where id=7; -update noar ti set b2='9KSVB3P8GBVL7WSS29W6E' where id=7; -update noar tt set b0='AZ60M6KYCGAB08GR' where id=8; -update noar ti set b0='AZ60M6KYCGAB08GR' where id=8; -update noar tt set b1='5ET0Q4B4IE8BI4TG8' where id=8; -update noar ti set b1='5ET0Q4B4IE8BI4TG8' where id=8; -update noar tt set b2='KM8' where id=8; -update noar ti set b2='KM8' where id=8; -update noar tt set b0='Z2LE2LISQB2VTFH2M022RRN76BOQB' where id=9; -update noar ti set b0='Z2LE2LISQB2VTFH2M022RRN76BOQB' where id=9; -update noar tt set b1='B02MWV49R10TWTQZGDEMHFO1G4' where id=9; -update noar ti set b1='B02MWV49R10TWTQZGDEMHFO1G4' where id=9; -update noar tt set b2='9' where id=9; -update noar ti set b2='9' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 blob not null, -b1 blob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='D5RQ5CZ' where id=1; -update noar ti set b0='D5RQ5CZ' where id=1; -update noar tt set b1='M3XX7GMJ6LGX2GY75V20W4Q0LFBIX65' where id=1; -update noar ti set b1='M3XX7GMJ6LGX2GY75V20W4Q0LFBIX65' where id=1; -update noar tt set b2='PW' where id=1; -update noar ti set b2='PW' where id=1; -update noar tt set b0='RP7G3Z93X41UAZDJH' where id=2; -update noar ti set b0='RP7G3Z93X41UAZDJH' where id=2; -update noar tt set b1='3F310XIFVRVS663KAOF' where id=2; -update noar ti set b1='3F310XIFVRVS663KAOF' where id=2; -update noar tt set b2='ZN' where id=2; -update noar ti set b2='ZN' where id=2; -update noar tt set b0='HCO5RM66HFYY21VCRYK8IE274CUI0Z45' where id=3; -update noar ti set b0='HCO5RM66HFYY21VCRYK8IE274CUI0Z45' where id=3; -update noar tt set b1='O2HHP099ZWSR4AV7QTY' where id=3; -update noar ti set b1='O2HHP099ZWSR4AV7QTY' where id=3; -update noar tt set b2='I9AY8RMGX3YBY6DC104JW4UX' where id=3; -update noar ti set b2='I9AY8RMGX3YBY6DC104JW4UX' where id=3; -update noar tt set b0='Q4GH6SWGDV6' where id=4; -update noar ti set b0='Q4GH6SWGDV6' where id=4; -update noar tt set b1='NZGJYI3Z8PPAERH4WBKGH17O6RXN3RRD' where id=4; -update noar ti set b1='NZGJYI3Z8PPAERH4WBKGH17O6RXN3RRD' where id=4; -update noar tt set b2='M0VB12ETATHJXPV71C' where id=4; -update noar ti set b2='M0VB12ETATHJXPV71C' where id=4; -update noar tt set b0='CRT1768U969' where id=5; -update noar ti set b0='CRT1768U969' where id=5; -update noar tt set b1='9G5190KKG4KY7VYLNRTRDAYGRZLMRVN' where id=5; -update noar ti set b1='9G5190KKG4KY7VYLNRTRDAYGRZLMRVN' where id=5; -update noar tt set b2='MDH77KMMKEUX0WLYNL9ZHP7GTZ5' where id=5; -update noar ti set b2='MDH77KMMKEUX0WLYNL9ZHP7GTZ5' where id=5; -update noar tt set b0='E' where id=6; -update noar ti set b0='E' where id=6; -update noar tt set b1='AG1HPZKJZI2V3I2OY2KYZMF6R60R' where id=6; -update noar ti set b1='AG1HPZKJZI2V3I2OY2KYZMF6R60R' where id=6; -update noar tt set b2='ELA3ZVF41SQIDZSQ40' where id=6; -update noar ti set b2='ELA3ZVF41SQIDZSQ40' where id=6; -update noar tt set b0='3S' where id=7; -update noar ti set b0='3S' where id=7; -update noar tt set b1='NV' where id=7; -update noar ti set b1='NV' where id=7; -update noar tt set b2='0NXW8QE' where id=7; -update noar ti set b2='0NXW8QE' where id=7; -update noar tt set b0='YWF1WJL1YAHW5S' where id=8; -update noar ti set b0='YWF1WJL1YAHW5S' where id=8; -update noar tt set b1='QT18FZ87HUWU09YV50P' where id=8; -update noar ti set b1='QT18FZ87HUWU09YV50P' where id=8; -update noar tt set b2='F44MCHPPP4NVX0MGQX3YDHKK0ZX3' where id=8; -update noar ti set b2='F44MCHPPP4NVX0MGQX3YDHKK0ZX3' where id=8; -update noar tt set b0='HJ' where id=9; -update noar ti set b0='HJ' where id=9; -update noar tt set b1='399DX' where id=9; -update noar ti set b1='399DX' where id=9; -update noar tt set b2='D' where id=9; -update noar ti set b2='D' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 blob null, -b1 blob null, -b2 text null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='KUL9R62R5XHT9TLKXWAJ2' where id=1; -update noar ti set b0='KUL9R62R5XHT9TLKXWAJ2' where id=1; -update noar tt set b1='I16AISVK0C84JN94O' where id=1; -update noar ti set b1='I16AISVK0C84JN94O' where id=1; -update noar tt set b2='DZBSYN6XM3LQRMUOHVS' where id=1; -update noar ti set b2='DZBSYN6XM3LQRMUOHVS' where id=1; -update noar tt set b0='9QX7EWVD01RNO0K31H1C46P5Y' where id=2; -update noar ti set b0='9QX7EWVD01RNO0K31H1C46P5Y' where id=2; -update noar tt set b1='T5W4UV' where id=2; -update noar ti set b1='T5W4UV' where id=2; -update noar tt set b2='NSM3QUAFH69G13E71ZQ5FT' where id=2; -update noar ti set b2='NSM3QUAFH69G13E71ZQ5FT' where id=2; -update noar tt set b0='FZMG4K9M9' where id=3; -update noar ti set b0='FZMG4K9M9' where id=3; -update noar tt set b1='KDK2I3CZ5ODM4COM' where id=3; -update noar ti set b1='KDK2I3CZ5ODM4COM' where id=3; -update noar tt set b2='Q8CHH3VNZXM5JBOAK' where id=3; -update noar ti set b2='Q8CHH3VNZXM5JBOAK' where id=3; -update noar tt set b0='Z' where id=4; -update noar ti set b0='Z' where id=4; -update noar tt set b1='T9Z' where id=4; -update noar ti set b1='T9Z' where id=4; -update noar tt set b2='26PX3YLA2DBLW2KQ9T8ER825PG5AU2VX' where id=4; -update noar ti set b2='26PX3YLA2DBLW2KQ9T8ER825PG5AU2VX' where id=4; -update noar tt set b0='IYOSIQVCY0QYKLDMDBVTR5CKP47YC9C' where id=5; -update noar ti set b0='IYOSIQVCY0QYKLDMDBVTR5CKP47YC9C' where id=5; -update noar tt set b1='NEOGGYNOPY4JC1JXJ' where id=5; -update noar ti set b1='NEOGGYNOPY4JC1JXJ' where id=5; -update noar tt set b2='QD8W0VPV' where id=5; -update noar ti set b2='QD8W0VPV' where id=5; -update noar tt set b0='OHEIOC8XO6C7RTLXBIH99777UU7WZE3I' where id=6; -update noar ti set b0='OHEIOC8XO6C7RTLXBIH99777UU7WZE3I' where id=6; -update noar tt set b1='GDVTQ' where id=6; -update noar ti set b1='GDVTQ' where id=6; -update noar tt set b2='KSON25ZJHPPV2VCA1MADX2BGAGOEZ' where id=6; -update noar ti set b2='KSON25ZJHPPV2VCA1MADX2BGAGOEZ' where id=6; -update noar tt set b0='BYN85BOSV1PLLQB2AGSJLXBIHQUR' where id=7; -update noar ti set b0='BYN85BOSV1PLLQB2AGSJLXBIHQUR' where id=7; -update noar tt set b1='18EPY4WOA0PRS4UEH8IDQWFRMONY' where id=7; -update noar ti set b1='18EPY4WOA0PRS4UEH8IDQWFRMONY' where id=7; -update noar tt set b2='2K1WWKV3FFQ9GE1IVCG0' where id=7; -update noar ti set b2='2K1WWKV3FFQ9GE1IVCG0' where id=7; -update noar tt set b0='6O50X7JG01O476B92PVF' where id=8; -update noar ti set b0='6O50X7JG01O476B92PVF' where id=8; -update noar tt set b1='JF1' where id=8; -update noar ti set b1='JF1' where id=8; -update noar tt set b2='O8JXY5CFDL20' where id=8; -update noar ti set b2='O8JXY5CFDL20' where id=8; -update noar tt set b0='V27DZ' where id=9; -update noar ti set b0='V27DZ' where id=9; -update noar tt set b1='NBZCN2ASHLBS0SFFZ87R0D98' where id=9; -update noar ti set b1='NBZCN2ASHLBS0SFFZ87R0D98' where id=9; -update noar tt set b2='GEL' where id=9; -update noar ti set b2='GEL' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 blob not null, -b1 blob not null, -b2 text not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='2J50PUSKS4CLILJ8BE' where id=1; -update noar ti set b0='2J50PUSKS4CLILJ8BE' where id=1; -update noar tt set b1='IZ7O58ECHPB9EJEF8H43UMVWC' where id=1; -update noar ti set b1='IZ7O58ECHPB9EJEF8H43UMVWC' where id=1; -update noar tt set b2='KSB8DY5VBCSVTJ' where id=1; -update noar ti set b2='KSB8DY5VBCSVTJ' where id=1; -update noar tt set b0='OP4RAOMGCIBUS9WP8O3GE8' where id=2; -update noar ti set b0='OP4RAOMGCIBUS9WP8O3GE8' where id=2; -update noar tt set b1='YXPLOGN9198B' where id=2; -update noar ti set b1='YXPLOGN9198B' where id=2; -update noar tt set b2='LA3M88Q' where id=2; -update noar ti set b2='LA3M88Q' where id=2; -update noar tt set b0='KHVIJHK6JLLYEGNG59QD6C6BXQFOD' where id=3; -update noar ti set b0='KHVIJHK6JLLYEGNG59QD6C6BXQFOD' where id=3; -update noar tt set b1='AQWK4196CLH31W5OF0K' where id=3; -update noar ti set b1='AQWK4196CLH31W5OF0K' where id=3; -update noar tt set b2='WQ3TDBB7I9' where id=3; -update noar ti set b2='WQ3TDBB7I9' where id=3; -update noar tt set b0='83D0GE8JEZBMPUGRXWAGACZB8TBSNMN' where id=4; -update noar ti set b0='83D0GE8JEZBMPUGRXWAGACZB8TBSNMN' where id=4; -update noar tt set b1='I6QS32TU' where id=4; -update noar ti set b1='I6QS32TU' where id=4; -update noar tt set b2='SV6UBP82JBWED' where id=4; -update noar ti set b2='SV6UBP82JBWED' where id=4; -update noar tt set b0='U' where id=5; -update noar ti set b0='U' where id=5; -update noar tt set b1='G5PVDKYQE2SFB5W445VJEK22JABFMB' where id=5; -update noar ti set b1='G5PVDKYQE2SFB5W445VJEK22JABFMB' where id=5; -update noar tt set b2='EOGDCBZLP7EB4O2V8SN' where id=5; -update noar ti set b2='EOGDCBZLP7EB4O2V8SN' where id=5; -update noar tt set b0='SA56' where id=6; -update noar ti set b0='SA56' where id=6; -update noar tt set b1='AAD24XLTEBO3R3HXZ2BHV0QY0J' where id=6; -update noar ti set b1='AAD24XLTEBO3R3HXZ2BHV0QY0J' where id=6; -update noar tt set b2='6TTM4VGMWV44BX457MNLAHN35KT' where id=6; -update noar ti set b2='6TTM4VGMWV44BX457MNLAHN35KT' where id=6; -update noar tt set b0='1G32Y30YJMQZKCV60V6RMHTY34' where id=7; -update noar ti set b0='1G32Y30YJMQZKCV60V6RMHTY34' where id=7; -update noar tt set b1='FRBYVQX0L2XTWWQJ0MNBTE13BUCCW' where id=7; -update noar ti set b1='FRBYVQX0L2XTWWQJ0MNBTE13BUCCW' where id=7; -update noar tt set b2='2C1PB72YP3XJPYDLS5Q90SDMSM5O275H' where id=7; -update noar ti set b2='2C1PB72YP3XJPYDLS5Q90SDMSM5O275H' where id=7; -update noar tt set b0='34QQYD9ABXX820FRK278269SY5RZ3' where id=8; -update noar ti set b0='34QQYD9ABXX820FRK278269SY5RZ3' where id=8; -update noar tt set b1='UQG9UCA6JER9C6AWJP9QLXV' where id=8; -update noar ti set b1='UQG9UCA6JER9C6AWJP9QLXV' where id=8; -update noar tt set b2='QIMCR0S7' where id=8; -update noar ti set b2='QIMCR0S7' where id=8; -update noar tt set b0='UHXB' where id=9; -update noar ti set b0='UHXB' where id=9; -update noar tt set b1='V8STWNA1AEQVKVDB7ZL8' where id=9; -update noar ti set b1='V8STWNA1AEQVKVDB7ZL8' where id=9; -update noar tt set b2='8KZE20JFQ7F80V' where id=9; -update noar ti set b2='8KZE20JFQ7F80V' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 blob null, -b1 mediumblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='7CDYYCLYVV3P' where id=1; -update noar ti set b0='7CDYYCLYVV3P' where id=1; -update noar tt set b1='GBZFHZ9' where id=1; -update noar ti set b1='GBZFHZ9' where id=1; -update noar tt set b2='T4BUQYE' where id=1; -update noar ti set b2='T4BUQYE' where id=1; -update noar tt set b0='S2EZBRBRWZ021679I5BNYZCP1VIUTJ' where id=2; -update noar ti set b0='S2EZBRBRWZ021679I5BNYZCP1VIUTJ' where id=2; -update noar tt set b1='G7LQ' where id=2; -update noar ti set b1='G7LQ' where id=2; -update noar tt set b2='XMN08ZVS2TRN6HE4JX9L' where id=2; -update noar ti set b2='XMN08ZVS2TRN6HE4JX9L' where id=2; -update noar tt set b0='O0P' where id=3; -update noar ti set b0='O0P' where id=3; -update noar tt set b1='S4OTKHKYR5UWJYEI2ILP04YL3JLT' where id=3; -update noar ti set b1='S4OTKHKYR5UWJYEI2ILP04YL3JLT' where id=3; -update noar tt set b2='J2EZDFMNI04QC35' where id=3; -update noar ti set b2='J2EZDFMNI04QC35' where id=3; -update noar tt set b0='AA7754SASPCBQ3KQRP21M' where id=4; -update noar ti set b0='AA7754SASPCBQ3KQRP21M' where id=4; -update noar tt set b1='1F358JYFLDLOXI' where id=4; -update noar ti set b1='1F358JYFLDLOXI' where id=4; -update noar tt set b2='HR0AQW8FX1E' where id=4; -update noar ti set b2='HR0AQW8FX1E' where id=4; -update noar tt set b0='PVMT' where id=5; -update noar ti set b0='PVMT' where id=5; -update noar tt set b1='2XR3QS' where id=5; -update noar ti set b1='2XR3QS' where id=5; -update noar tt set b2='ITAGAD' where id=5; -update noar ti set b2='ITAGAD' where id=5; -update noar tt set b0='6L68VMJY3SYTRRDC4HYA' where id=6; -update noar ti set b0='6L68VMJY3SYTRRDC4HYA' where id=6; -update noar tt set b1='WJUHNDSXWWAG' where id=6; -update noar ti set b1='WJUHNDSXWWAG' where id=6; -update noar tt set b2='58RVBGH37AO139VKFAQSK' where id=6; -update noar ti set b2='58RVBGH37AO139VKFAQSK' where id=6; -update noar tt set b0='67UD1' where id=7; -update noar ti set b0='67UD1' where id=7; -update noar tt set b1='2I8W7ESDGFM4Y5E' where id=7; -update noar ti set b1='2I8W7ESDGFM4Y5E' where id=7; -update noar tt set b2='X9EX9UGJEVO1OFNBW2A2GC2HARGT1' where id=7; -update noar ti set b2='X9EX9UGJEVO1OFNBW2A2GC2HARGT1' where id=7; -update noar tt set b0='0VR9B5RD28PB4W4QMWVRRFPVCL' where id=8; -update noar ti set b0='0VR9B5RD28PB4W4QMWVRRFPVCL' where id=8; -update noar tt set b1='5C7BUUI807GM63M' where id=8; -update noar ti set b1='5C7BUUI807GM63M' where id=8; -update noar tt set b2='K' where id=8; -update noar ti set b2='K' where id=8; -update noar tt set b0='ER' where id=9; -update noar ti set b0='ER' where id=9; -update noar tt set b1='OQ3MYTZL4ESWL6Z8V' where id=9; -update noar ti set b1='OQ3MYTZL4ESWL6Z8V' where id=9; -update noar tt set b2='JIDOINACMUZU' where id=9; -update noar ti set b2='JIDOINACMUZU' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 blob not null, -b1 mediumblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='C6' where id=1; -update noar ti set b0='C6' where id=1; -update noar tt set b1='SOU6MIDKZC2SRYNIPESS8XSDENUA4' where id=1; -update noar ti set b1='SOU6MIDKZC2SRYNIPESS8XSDENUA4' where id=1; -update noar tt set b2='ARIUNWKSHU12NXO3RMMAPORPTP6GW' where id=1; -update noar ti set b2='ARIUNWKSHU12NXO3RMMAPORPTP6GW' where id=1; -update noar tt set b0='QO39RTKRAI' where id=2; -update noar ti set b0='QO39RTKRAI' where id=2; -update noar tt set b1='Y3XLVR33AXH7TVD9U07C2UO' where id=2; -update noar ti set b1='Y3XLVR33AXH7TVD9U07C2UO' where id=2; -update noar tt set b2='RT9ZNAF' where id=2; -update noar ti set b2='RT9ZNAF' where id=2; -update noar tt set b0='L987SRYNJVZ2P3E3SIY5I3' where id=3; -update noar ti set b0='L987SRYNJVZ2P3E3SIY5I3' where id=3; -update noar tt set b1='GLGA44' where id=3; -update noar ti set b1='GLGA44' where id=3; -update noar tt set b2='RU6U5' where id=3; -update noar ti set b2='RU6U5' where id=3; -update noar tt set b0='LZKU6COFRGCPOZK1VMVMS0F7' where id=4; -update noar ti set b0='LZKU6COFRGCPOZK1VMVMS0F7' where id=4; -update noar tt set b1='PYDZ60VDWUDKA9FQWP06A0I' where id=4; -update noar ti set b1='PYDZ60VDWUDKA9FQWP06A0I' where id=4; -update noar tt set b2='6JH9Q' where id=4; -update noar ti set b2='6JH9Q' where id=4; -update noar tt set b0='L0RESOTBTQV' where id=5; -update noar ti set b0='L0RESOTBTQV' where id=5; -update noar tt set b1='D2' where id=5; -update noar ti set b1='D2' where id=5; -update noar tt set b2='UG2GQNWXSYM' where id=5; -update noar ti set b2='UG2GQNWXSYM' where id=5; -update noar tt set b0='T8J' where id=6; -update noar ti set b0='T8J' where id=6; -update noar tt set b1='A3V96R26JYETEC7BRJNUOU3CYHXU5OR' where id=6; -update noar ti set b1='A3V96R26JYETEC7BRJNUOU3CYHXU5OR' where id=6; -update noar tt set b2='LCALHV6OS4RAO2MQSAX93NP334Q' where id=6; -update noar ti set b2='LCALHV6OS4RAO2MQSAX93NP334Q' where id=6; -update noar tt set b0='1YYQCPJV7OUC' where id=7; -update noar ti set b0='1YYQCPJV7OUC' where id=7; -update noar tt set b1='J76VDPWGNVZ81' where id=7; -update noar ti set b1='J76VDPWGNVZ81' where id=7; -update noar tt set b2='BG56WWJXFXMIHG4VUFK10XP' where id=7; -update noar ti set b2='BG56WWJXFXMIHG4VUFK10XP' where id=7; -update noar tt set b0='6BBHJLWDH8QZZH' where id=8; -update noar ti set b0='6BBHJLWDH8QZZH' where id=8; -update noar tt set b1='71P23X3Q77XFK3S0QQEO9MZVC88' where id=8; -update noar ti set b1='71P23X3Q77XFK3S0QQEO9MZVC88' where id=8; -update noar tt set b2='LZXU4W69N2DR' where id=8; -update noar ti set b2='LZXU4W69N2DR' where id=8; -update noar tt set b0='HETGMBF3GSCNU2C4DASNP' where id=9; -update noar ti set b0='HETGMBF3GSCNU2C4DASNP' where id=9; -update noar tt set b1='22GV5RJOB5H7741' where id=9; -update noar ti set b1='22GV5RJOB5H7741' where id=9; -update noar tt set b2='IDDR5KA9OHDG70M5ZC' where id=9; -update noar ti set b2='IDDR5KA9OHDG70M5ZC' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 blob null, -b1 mediumblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='QHY19YQGCFEAQNPCDES9WSB7W7D7' where id=1; -update noar ti set b0='QHY19YQGCFEAQNPCDES9WSB7W7D7' where id=1; -update noar tt set b1='AF' where id=1; -update noar ti set b1='AF' where id=1; -update noar tt set b2='Y7KFGW5T7SV' where id=1; -update noar ti set b2='Y7KFGW5T7SV' where id=1; -update noar tt set b0='VC0IUSILD4PN81LG48YUY' where id=2; -update noar ti set b0='VC0IUSILD4PN81LG48YUY' where id=2; -update noar tt set b1='HRQ45I18BYA7GQBSMS' where id=2; -update noar ti set b1='HRQ45I18BYA7GQBSMS' where id=2; -update noar tt set b2='TF2HGCXUXXICVYW7PJG50K7BN' where id=2; -update noar ti set b2='TF2HGCXUXXICVYW7PJG50K7BN' where id=2; -update noar tt set b0='DM28KDBKQ71' where id=3; -update noar ti set b0='DM28KDBKQ71' where id=3; -update noar tt set b1='ZOTKU2Z25LMH78I1EGKTSVE7U0' where id=3; -update noar ti set b1='ZOTKU2Z25LMH78I1EGKTSVE7U0' where id=3; -update noar tt set b2='GPP6VN80AFJMNJ168695' where id=3; -update noar ti set b2='GPP6VN80AFJMNJ168695' where id=3; -update noar tt set b0='LRNFCS3D8HJL28' where id=4; -update noar ti set b0='LRNFCS3D8HJL28' where id=4; -update noar tt set b1='8EWKJ5ORQNDO158EJN0' where id=4; -update noar ti set b1='8EWKJ5ORQNDO158EJN0' where id=4; -update noar tt set b2='16JQ36TDSTKNJ780L2N9U' where id=4; -update noar ti set b2='16JQ36TDSTKNJ780L2N9U' where id=4; -update noar tt set b0='56RW5' where id=5; -update noar ti set b0='56RW5' where id=5; -update noar tt set b1='R7TL1XXDTN005D74MY9L' where id=5; -update noar ti set b1='R7TL1XXDTN005D74MY9L' where id=5; -update noar tt set b2='R0C' where id=5; -update noar ti set b2='R0C' where id=5; -update noar tt set b0='8ISFYDRRMQW0NDBPEC9L' where id=6; -update noar ti set b0='8ISFYDRRMQW0NDBPEC9L' where id=6; -update noar tt set b1='9PZLQTMB3RQHAP8XV5NI61LMQ0OM5' where id=6; -update noar ti set b1='9PZLQTMB3RQHAP8XV5NI61LMQ0OM5' where id=6; -update noar tt set b2='JUN9TLDZDV2N0RW9' where id=6; -update noar ti set b2='JUN9TLDZDV2N0RW9' where id=6; -update noar tt set b0='QCQ1GDVCVPDJH87QV' where id=7; -update noar ti set b0='QCQ1GDVCVPDJH87QV' where id=7; -update noar tt set b1='LOVX89LS6NE' where id=7; -update noar ti set b1='LOVX89LS6NE' where id=7; -update noar tt set b2='P' where id=7; -update noar ti set b2='P' where id=7; -update noar tt set b0='H7J22C64A28FAJ0TPGZC4N09EW7HP6Y' where id=8; -update noar ti set b0='H7J22C64A28FAJ0TPGZC4N09EW7HP6Y' where id=8; -update noar tt set b1='Z8DU5NMHP8XOI' where id=8; -update noar ti set b1='Z8DU5NMHP8XOI' where id=8; -update noar tt set b2='J205717P18L' where id=8; -update noar ti set b2='J205717P18L' where id=8; -update noar tt set b0='BAEHP6VAXCU2PC79GRQJ4TFE4ZTTPHB' where id=9; -update noar ti set b0='BAEHP6VAXCU2PC79GRQJ4TFE4ZTTPHB' where id=9; -update noar tt set b1='D4IJGT76XBJ9WSIC' where id=9; -update noar ti set b1='D4IJGT76XBJ9WSIC' where id=9; -update noar tt set b2='ERZ182THFSO1X1C' where id=9; -update noar ti set b2='ERZ182THFSO1X1C' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 blob not null, -b1 mediumblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='17AJDBI9' where id=1; -update noar ti set b0='17AJDBI9' where id=1; -update noar tt set b1='A53RGXM55SQQ16PE98R4ILCHOJL9KK27' where id=1; -update noar ti set b1='A53RGXM55SQQ16PE98R4ILCHOJL9KK27' where id=1; -update noar tt set b2='UIVSAMSD5SONPH0OYYX' where id=1; -update noar ti set b2='UIVSAMSD5SONPH0OYYX' where id=1; -update noar tt set b0='9W1O62Y4CR2FV5K0XEYXB' where id=2; -update noar ti set b0='9W1O62Y4CR2FV5K0XEYXB' where id=2; -update noar tt set b1='HOTTZNLX4PU3T68ZL8IAIHZQ' where id=2; -update noar ti set b1='HOTTZNLX4PU3T68ZL8IAIHZQ' where id=2; -update noar tt set b2='5KZ' where id=2; -update noar ti set b2='5KZ' where id=2; -update noar tt set b0='8XWIIERQXFLK8AKC1R1' where id=3; -update noar ti set b0='8XWIIERQXFLK8AKC1R1' where id=3; -update noar tt set b1='ZMEA7VELZYAQFHH1' where id=3; -update noar ti set b1='ZMEA7VELZYAQFHH1' where id=3; -update noar tt set b2='25O1X' where id=3; -update noar ti set b2='25O1X' where id=3; -update noar tt set b0='2FGED7D2KGPDLN' where id=4; -update noar ti set b0='2FGED7D2KGPDLN' where id=4; -update noar tt set b1='LN' where id=4; -update noar ti set b1='LN' where id=4; -update noar tt set b2='REZOU5LK3VX1ALEWM' where id=4; -update noar ti set b2='REZOU5LK3VX1ALEWM' where id=4; -update noar tt set b0='YCG' where id=5; -update noar ti set b0='YCG' where id=5; -update noar tt set b1='BAYLK1X9WTBT4TVG21V' where id=5; -update noar ti set b1='BAYLK1X9WTBT4TVG21V' where id=5; -update noar tt set b2='KWXST8PVYOSNRI0' where id=5; -update noar ti set b2='KWXST8PVYOSNRI0' where id=5; -update noar tt set b0='0I45AIEGXIA5UXC2' where id=6; -update noar ti set b0='0I45AIEGXIA5UXC2' where id=6; -update noar tt set b1='D5V346' where id=6; -update noar ti set b1='D5V346' where id=6; -update noar tt set b2='8' where id=6; -update noar ti set b2='8' where id=6; -update noar tt set b0='O891VTQKFH' where id=7; -update noar ti set b0='O891VTQKFH' where id=7; -update noar tt set b1='DS1EWMZR9RL5DA47Y3XP6UWEUQ5RDP' where id=7; -update noar ti set b1='DS1EWMZR9RL5DA47Y3XP6UWEUQ5RDP' where id=7; -update noar tt set b2='4Z34HE15BBU6YR31SKKFO2NMUZU2' where id=7; -update noar ti set b2='4Z34HE15BBU6YR31SKKFO2NMUZU2' where id=7; -update noar tt set b0='DP5H34ZBD9RXLQ80J3I3XHZLXIXBM' where id=8; -update noar ti set b0='DP5H34ZBD9RXLQ80J3I3XHZLXIXBM' where id=8; -update noar tt set b1='483RCPP45FUATV7YG5L' where id=8; -update noar ti set b1='483RCPP45FUATV7YG5L' where id=8; -update noar tt set b2='VC4D88' where id=8; -update noar ti set b2='VC4D88' where id=8; -update noar tt set b0='P' where id=9; -update noar ti set b0='P' where id=9; -update noar tt set b1='QMTZBK6UYYYW8Z' where id=9; -update noar ti set b1='QMTZBK6UYYYW8Z' where id=9; -update noar tt set b2='NSU' where id=9; -update noar ti set b2='NSU' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 blob null, -b1 mediumblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='65YJEE13IWQUE' where id=1; -update noar ti set b0='65YJEE13IWQUE' where id=1; -update noar tt set b1='TCTC1A' where id=1; -update noar ti set b1='TCTC1A' where id=1; -update noar tt set b2='OZXJ' where id=1; -update noar ti set b2='OZXJ' where id=1; -update noar tt set b0='TMS' where id=2; -update noar ti set b0='TMS' where id=2; -update noar tt set b1='ZWERA63F20BCAV3' where id=2; -update noar ti set b1='ZWERA63F20BCAV3' where id=2; -update noar tt set b2='L05MPNDVRUXSHD4P1RH' where id=2; -update noar ti set b2='L05MPNDVRUXSHD4P1RH' where id=2; -update noar tt set b0='EDLHA' where id=3; -update noar ti set b0='EDLHA' where id=3; -update noar tt set b1='73FRWPOG3' where id=3; -update noar ti set b1='73FRWPOG3' where id=3; -update noar tt set b2='DKHW3HVOO7YI1SR9V4LRU14E09ECG' where id=3; -update noar ti set b2='DKHW3HVOO7YI1SR9V4LRU14E09ECG' where id=3; -update noar tt set b0='YXF0VZISJ08NI6SEFLYM1GXPO' where id=4; -update noar ti set b0='YXF0VZISJ08NI6SEFLYM1GXPO' where id=4; -update noar tt set b1='XI5GWIEERUB19Y98ZMC' where id=4; -update noar ti set b1='XI5GWIEERUB19Y98ZMC' where id=4; -update noar tt set b2='WAV8FKTKQEACKL5IKKQ0E' where id=4; -update noar ti set b2='WAV8FKTKQEACKL5IKKQ0E' where id=4; -update noar tt set b0='06KHAXKMQTNW8B58CH1TATN9HHRU' where id=5; -update noar ti set b0='06KHAXKMQTNW8B58CH1TATN9HHRU' where id=5; -update noar tt set b1='NSNJ1PC01PN4NH' where id=5; -update noar ti set b1='NSNJ1PC01PN4NH' where id=5; -update noar tt set b2='LIVS5P695JXJXC7TXX975PBAMW' where id=5; -update noar ti set b2='LIVS5P695JXJXC7TXX975PBAMW' where id=5; -update noar tt set b0='L1CGVE' where id=6; -update noar ti set b0='L1CGVE' where id=6; -update noar tt set b1='K62BND8ATNVYH82TJL7JP2BQFP' where id=6; -update noar ti set b1='K62BND8ATNVYH82TJL7JP2BQFP' where id=6; -update noar tt set b2='69W77LR0AIXSUV3J6LW7UZNVE30' where id=6; -update noar ti set b2='69W77LR0AIXSUV3J6LW7UZNVE30' where id=6; -update noar tt set b0='1B6BH39B' where id=7; -update noar ti set b0='1B6BH39B' where id=7; -update noar tt set b1='JSYHA6JRTBYIMRBDTU' where id=7; -update noar ti set b1='JSYHA6JRTBYIMRBDTU' where id=7; -update noar tt set b2='P7O2D' where id=7; -update noar ti set b2='P7O2D' where id=7; -update noar tt set b0='ZR2GCW88R0V' where id=8; -update noar ti set b0='ZR2GCW88R0V' where id=8; -update noar tt set b1='WIFGDOLS5XXEJBG' where id=8; -update noar ti set b1='WIFGDOLS5XXEJBG' where id=8; -update noar tt set b2='6XGD7H0202357X9R6VSUKSR' where id=8; -update noar ti set b2='6XGD7H0202357X9R6VSUKSR' where id=8; -update noar tt set b0='ZYXY9PE3HP4870TLBPKEB7JVNCF' where id=9; -update noar ti set b0='ZYXY9PE3HP4870TLBPKEB7JVNCF' where id=9; -update noar tt set b1='E5GNDGEL12YEX3F6MCR4G4' where id=9; -update noar ti set b1='E5GNDGEL12YEX3F6MCR4G4' where id=9; -update noar tt set b2='LI34MJ75ED0C3MPTR30BS9RQV02I' where id=9; -update noar ti set b2='LI34MJ75ED0C3MPTR30BS9RQV02I' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 blob not null, -b1 mediumblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='TOBQKN42SUUGP63XRGHY1J5' where id=1; -update noar ti set b0='TOBQKN42SUUGP63XRGHY1J5' where id=1; -update noar tt set b1='G4FKD' where id=1; -update noar ti set b1='G4FKD' where id=1; -update noar tt set b2='G' where id=1; -update noar ti set b2='G' where id=1; -update noar tt set b0='900SYJ5N0CTFSSW0IIFEB6U4E8' where id=2; -update noar ti set b0='900SYJ5N0CTFSSW0IIFEB6U4E8' where id=2; -update noar tt set b1='PNTRT71405K6SHAEBVAX' where id=2; -update noar ti set b1='PNTRT71405K6SHAEBVAX' where id=2; -update noar tt set b2='0D7T1OCJDHV6VIV9DZ5' where id=2; -update noar ti set b2='0D7T1OCJDHV6VIV9DZ5' where id=2; -update noar tt set b0='YHPBGEIAYMWFE2RR3W3S4IB' where id=3; -update noar ti set b0='YHPBGEIAYMWFE2RR3W3S4IB' where id=3; -update noar tt set b1='VAN8EKUEXNKRE' where id=3; -update noar ti set b1='VAN8EKUEXNKRE' where id=3; -update noar tt set b2='XJCR2JHJW5' where id=3; -update noar ti set b2='XJCR2JHJW5' where id=3; -update noar tt set b0='OXG5W7JU' where id=4; -update noar ti set b0='OXG5W7JU' where id=4; -update noar tt set b1='2L0QK0ZGS2GNH9CJG6JDZ1' where id=4; -update noar ti set b1='2L0QK0ZGS2GNH9CJG6JDZ1' where id=4; -update noar tt set b2='L2B7CLE3Q955XDFE2UR' where id=4; -update noar ti set b2='L2B7CLE3Q955XDFE2UR' where id=4; -update noar tt set b0='556B7WWPS5ZMMLMMH9Y6R86TTVI' where id=5; -update noar ti set b0='556B7WWPS5ZMMLMMH9Y6R86TTVI' where id=5; -update noar tt set b1='A5H2HTJ7NXYC1TDTE8RTYK0RIPXE' where id=5; -update noar ti set b1='A5H2HTJ7NXYC1TDTE8RTYK0RIPXE' where id=5; -update noar tt set b2='BXGQDZ3NYE0ORJ9Q7L3GTQ' where id=5; -update noar ti set b2='BXGQDZ3NYE0ORJ9Q7L3GTQ' where id=5; -update noar tt set b0='J13DGJMKK' where id=6; -update noar ti set b0='J13DGJMKK' where id=6; -update noar tt set b1='OKXKB36SIBQ6DYTAWWNCQRN' where id=6; -update noar ti set b1='OKXKB36SIBQ6DYTAWWNCQRN' where id=6; -update noar tt set b2='X' where id=6; -update noar ti set b2='X' where id=6; -update noar tt set b0='MQF' where id=7; -update noar ti set b0='MQF' where id=7; -update noar tt set b1='DF4BYC54BPBT16UGQDLQTT' where id=7; -update noar ti set b1='DF4BYC54BPBT16UGQDLQTT' where id=7; -update noar tt set b2='B6QFZ6D8JNN5ZP66R8G0A0HT6' where id=7; -update noar ti set b2='B6QFZ6D8JNN5ZP66R8G0A0HT6' where id=7; -update noar tt set b0='1P4JOLC1RP' where id=8; -update noar ti set b0='1P4JOLC1RP' where id=8; -update noar tt set b1='TSZ73EN' where id=8; -update noar ti set b1='TSZ73EN' where id=8; -update noar tt set b2='6CGX2FBTI8Y0VY2EUU4' where id=8; -update noar ti set b2='6CGX2FBTI8Y0VY2EUU4' where id=8; -update noar tt set b0='IE9PE17JCCSZZNYWWN7OFYZ0NHGDHM' where id=9; -update noar ti set b0='IE9PE17JCCSZZNYWWN7OFYZ0NHGDHM' where id=9; -update noar tt set b1='8PT11CX4KBBLGB0' where id=9; -update noar ti set b1='8PT11CX4KBBLGB0' where id=9; -update noar tt set b2='W4' where id=9; -update noar ti set b2='W4' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 blob null, -b1 mediumblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='9RMD' where id=1; -update noar ti set b0='9RMD' where id=1; -update noar tt set b1='TYIPDO3YUIUCVODS4' where id=1; -update noar ti set b1='TYIPDO3YUIUCVODS4' where id=1; -update noar tt set b2='6IV' where id=1; -update noar ti set b2='6IV' where id=1; -update noar tt set b0='6QH0E2YXDJNOCEHTAR2NTKDK20P9VWBQ' where id=2; -update noar ti set b0='6QH0E2YXDJNOCEHTAR2NTKDK20P9VWBQ' where id=2; -update noar tt set b1='3CIQ61ZPJ2XEIJEIVAZM17QAN' where id=2; -update noar ti set b1='3CIQ61ZPJ2XEIJEIVAZM17QAN' where id=2; -update noar tt set b2='EIHD06DJEAK5K1' where id=2; -update noar ti set b2='EIHD06DJEAK5K1' where id=2; -update noar tt set b0='RKKOEX2AIKMYTOK2LX' where id=3; -update noar ti set b0='RKKOEX2AIKMYTOK2LX' where id=3; -update noar tt set b1='I' where id=3; -update noar ti set b1='I' where id=3; -update noar tt set b2='W2R8SPPSDARAW20IL2PDHYQ1N5LZWDDT' where id=3; -update noar ti set b2='W2R8SPPSDARAW20IL2PDHYQ1N5LZWDDT' where id=3; -update noar tt set b0='1BHBGALM' where id=4; -update noar ti set b0='1BHBGALM' where id=4; -update noar tt set b1='NC23ZCD8' where id=4; -update noar ti set b1='NC23ZCD8' where id=4; -update noar tt set b2='XZ' where id=4; -update noar ti set b2='XZ' where id=4; -update noar tt set b0='1PQ0BA7' where id=5; -update noar ti set b0='1PQ0BA7' where id=5; -update noar tt set b1='187K13162HY8VE7HX7U7TX1N4OGGTXY' where id=5; -update noar ti set b1='187K13162HY8VE7HX7U7TX1N4OGGTXY' where id=5; -update noar tt set b2='H8TN56V' where id=5; -update noar ti set b2='H8TN56V' where id=5; -update noar tt set b0='1' where id=6; -update noar ti set b0='1' where id=6; -update noar tt set b1='OBY25SU3KGENETDEX6GHZA2D1D1MZJNO' where id=6; -update noar ti set b1='OBY25SU3KGENETDEX6GHZA2D1D1MZJNO' where id=6; -update noar tt set b2='V1P3HAQRATR52GGRFHM6SG' where id=6; -update noar ti set b2='V1P3HAQRATR52GGRFHM6SG' where id=6; -update noar tt set b0='83KD5K1Y137GDQKR8AA0VOYRZ6R6LYKC' where id=7; -update noar ti set b0='83KD5K1Y137GDQKR8AA0VOYRZ6R6LYKC' where id=7; -update noar tt set b1='JTLVFSMCVBHO' where id=7; -update noar ti set b1='JTLVFSMCVBHO' where id=7; -update noar tt set b2='EZIZDAKTNMEDTR91HB5AJJBM' where id=7; -update noar ti set b2='EZIZDAKTNMEDTR91HB5AJJBM' where id=7; -update noar tt set b0='C8GCJOOI0T4N8O' where id=8; -update noar ti set b0='C8GCJOOI0T4N8O' where id=8; -update noar tt set b1='8Q0C3NVR8' where id=8; -update noar ti set b1='8Q0C3NVR8' where id=8; -update noar tt set b2='NID37C0FSL14ZSTGY' where id=8; -update noar ti set b2='NID37C0FSL14ZSTGY' where id=8; -update noar tt set b0='J00I6E86QOY27A9H7O82YQSRFXVY' where id=9; -update noar ti set b0='J00I6E86QOY27A9H7O82YQSRFXVY' where id=9; -update noar tt set b1='PGV9HBB4WLB' where id=9; -update noar ti set b1='PGV9HBB4WLB' where id=9; -update noar tt set b2='T' where id=9; -update noar ti set b2='T' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 blob not null, -b1 mediumblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='JRQ8DE4AB8NKCJXNHTNFTW5V8OKOX5K' where id=1; -update noar ti set b0='JRQ8DE4AB8NKCJXNHTNFTW5V8OKOX5K' where id=1; -update noar tt set b1='AIF22OVYI11YHRPD2LXXA0V3' where id=1; -update noar ti set b1='AIF22OVYI11YHRPD2LXXA0V3' where id=1; -update noar tt set b2='7DTC5DJ5G7TIDO8' where id=1; -update noar ti set b2='7DTC5DJ5G7TIDO8' where id=1; -update noar tt set b0='8' where id=2; -update noar ti set b0='8' where id=2; -update noar tt set b1='JXQOS9' where id=2; -update noar ti set b1='JXQOS9' where id=2; -update noar tt set b2='12O2O1T3N0P8KRRGEJS7B' where id=2; -update noar ti set b2='12O2O1T3N0P8KRRGEJS7B' where id=2; -update noar tt set b0='AX1T88VFY7RI3QB' where id=3; -update noar ti set b0='AX1T88VFY7RI3QB' where id=3; -update noar tt set b1='N4CMM2U1WGGXI7EKQ' where id=3; -update noar ti set b1='N4CMM2U1WGGXI7EKQ' where id=3; -update noar tt set b2='197JHL39G90FSL8VYQMQS' where id=3; -update noar ti set b2='197JHL39G90FSL8VYQMQS' where id=3; -update noar tt set b0='TDCNRDGPMRN9RU' where id=4; -update noar ti set b0='TDCNRDGPMRN9RU' where id=4; -update noar tt set b1='ZKKNM' where id=4; -update noar ti set b1='ZKKNM' where id=4; -update noar tt set b2='ULG0UUUE5Z7GVJGAALB6TGTK4' where id=4; -update noar ti set b2='ULG0UUUE5Z7GVJGAALB6TGTK4' where id=4; -update noar tt set b0='DIPOUWJYOMHHDIE6' where id=5; -update noar ti set b0='DIPOUWJYOMHHDIE6' where id=5; -update noar tt set b1='1X1SFHWKJ3NMQX510XRJENT4S' where id=5; -update noar ti set b1='1X1SFHWKJ3NMQX510XRJENT4S' where id=5; -update noar tt set b2='QCBUTH8YUR263U05GNOB5Q' where id=5; -update noar ti set b2='QCBUTH8YUR263U05GNOB5Q' where id=5; -update noar tt set b0='W1ZQ' where id=6; -update noar ti set b0='W1ZQ' where id=6; -update noar tt set b1='7NV0B333' where id=6; -update noar ti set b1='7NV0B333' where id=6; -update noar tt set b2='IF6OH1I4CMIVJ5HQBCKEWA' where id=6; -update noar ti set b2='IF6OH1I4CMIVJ5HQBCKEWA' where id=6; -update noar tt set b0='A1XWKO7' where id=7; -update noar ti set b0='A1XWKO7' where id=7; -update noar tt set b1='26LZNFVSG8P1Y0ZD9PGRV' where id=7; -update noar ti set b1='26LZNFVSG8P1Y0ZD9PGRV' where id=7; -update noar tt set b2='5G6O2RKTG' where id=7; -update noar ti set b2='5G6O2RKTG' where id=7; -update noar tt set b0='FKQV6DP5VRD364PVGTQG48MTQ' where id=8; -update noar ti set b0='FKQV6DP5VRD364PVGTQG48MTQ' where id=8; -update noar tt set b1='14IBLVPMUDIL14GN1' where id=8; -update noar ti set b1='14IBLVPMUDIL14GN1' where id=8; -update noar tt set b2='SX4PM3NPHD638' where id=8; -update noar ti set b2='SX4PM3NPHD638' where id=8; -update noar tt set b0='HLV213O72HW7YRQSGJD5M' where id=9; -update noar ti set b0='HLV213O72HW7YRQSGJD5M' where id=9; -update noar tt set b1='IBQ8NKFYS' where id=9; -update noar ti set b1='IBQ8NKFYS' where id=9; -update noar tt set b2='CJ3AW0YAXK7GZ3NR4V0KNVZGO08HTG' where id=9; -update noar ti set b2='CJ3AW0YAXK7GZ3NR4V0KNVZGO08HTG' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 blob null, -b1 mediumblob null, -b2 text null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='XW0PG070O391K72FDZIS7' where id=1; -update noar ti set b0='XW0PG070O391K72FDZIS7' where id=1; -update noar tt set b1='S' where id=1; -update noar ti set b1='S' where id=1; -update noar tt set b2='KTI8Z92T69FLTCDFN2PARZB5GZY44' where id=1; -update noar ti set b2='KTI8Z92T69FLTCDFN2PARZB5GZY44' where id=1; -update noar tt set b0='ZHF4' where id=2; -update noar ti set b0='ZHF4' where id=2; -update noar tt set b1='UBNUJQRVDRETQRXWOAXTW59G02CB0' where id=2; -update noar ti set b1='UBNUJQRVDRETQRXWOAXTW59G02CB0' where id=2; -update noar tt set b2='805FBNL1W' where id=2; -update noar ti set b2='805FBNL1W' where id=2; -update noar tt set b0='TIZLMT55R8LBU4H6LYJNJC7JBAJZEPK9' where id=3; -update noar ti set b0='TIZLMT55R8LBU4H6LYJNJC7JBAJZEPK9' where id=3; -update noar tt set b1='5P1W37GHJCY' where id=3; -update noar ti set b1='5P1W37GHJCY' where id=3; -update noar tt set b2='UHQ' where id=3; -update noar ti set b2='UHQ' where id=3; -update noar tt set b0='2J1T0B6BXK0T13K' where id=4; -update noar ti set b0='2J1T0B6BXK0T13K' where id=4; -update noar tt set b1='KVFQGXVV2NMWTEW6PORP' where id=4; -update noar ti set b1='KVFQGXVV2NMWTEW6PORP' where id=4; -update noar tt set b2='GC0E5VURDYYC' where id=4; -update noar ti set b2='GC0E5VURDYYC' where id=4; -update noar tt set b0='Y' where id=5; -update noar ti set b0='Y' where id=5; -update noar tt set b1='09MCJ2IEPNZQ302ES9QD6O35EDKJAXU' where id=5; -update noar ti set b1='09MCJ2IEPNZQ302ES9QD6O35EDKJAXU' where id=5; -update noar tt set b2='16YGB78H3H3FXKO8JXLH36QOY8O9LMFT' where id=5; -update noar ti set b2='16YGB78H3H3FXKO8JXLH36QOY8O9LMFT' where id=5; -update noar tt set b0='E9H7' where id=6; -update noar ti set b0='E9H7' where id=6; -update noar tt set b1='782SIPI2PQUIHBKX014RRI' where id=6; -update noar ti set b1='782SIPI2PQUIHBKX014RRI' where id=6; -update noar tt set b2='PKYYVDSWF00V5VDJTEVMFB5SOFPP9' where id=6; -update noar ti set b2='PKYYVDSWF00V5VDJTEVMFB5SOFPP9' where id=6; -update noar tt set b0='LRQSJNM8IJ' where id=7; -update noar ti set b0='LRQSJNM8IJ' where id=7; -update noar tt set b1='7YM0CR7635FYELLOA6N4N155OM7ODA2' where id=7; -update noar ti set b1='7YM0CR7635FYELLOA6N4N155OM7ODA2' where id=7; -update noar tt set b2='52SET7KYZ' where id=7; -update noar ti set b2='52SET7KYZ' where id=7; -update noar tt set b0='QA0WV6' where id=8; -update noar ti set b0='QA0WV6' where id=8; -update noar tt set b1='NOELJ7UF1S1V8F0JX21CN5XVI4UJ490Q' where id=8; -update noar ti set b1='NOELJ7UF1S1V8F0JX21CN5XVI4UJ490Q' where id=8; -update noar tt set b2='1TZ110V6J7BL' where id=8; -update noar ti set b2='1TZ110V6J7BL' where id=8; -update noar tt set b0='864XZ0BNOSHR' where id=9; -update noar ti set b0='864XZ0BNOSHR' where id=9; -update noar tt set b1='ZTYAMK4TO8OMA0KWLV8' where id=9; -update noar ti set b1='ZTYAMK4TO8OMA0KWLV8' where id=9; -update noar tt set b2='C6IFCKRZH7Q9RVXU6C' where id=9; -update noar ti set b2='C6IFCKRZH7Q9RVXU6C' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 blob not null, -b1 mediumblob not null, -b2 text not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='8A3E7GNRJNWH1LICL603SIMW' where id=1; -update noar ti set b0='8A3E7GNRJNWH1LICL603SIMW' where id=1; -update noar tt set b1='L5ZUIANIN7YPH08SF6FACDJ' where id=1; -update noar ti set b1='L5ZUIANIN7YPH08SF6FACDJ' where id=1; -update noar tt set b2='5TT18' where id=1; -update noar ti set b2='5TT18' where id=1; -update noar tt set b0='COZY' where id=2; -update noar ti set b0='COZY' where id=2; -update noar tt set b1='6J29CSX73NBUF4R28PY4CVHAVI26U' where id=2; -update noar ti set b1='6J29CSX73NBUF4R28PY4CVHAVI26U' where id=2; -update noar tt set b2='4NYPYLX6Z100VQFH9Y2E' where id=2; -update noar ti set b2='4NYPYLX6Z100VQFH9Y2E' where id=2; -update noar tt set b0='59CCV5112PZRDB' where id=3; -update noar ti set b0='59CCV5112PZRDB' where id=3; -update noar tt set b1='9QAT315TO4C8N5HNJ0H36FZOJ39JISR' where id=3; -update noar ti set b1='9QAT315TO4C8N5HNJ0H36FZOJ39JISR' where id=3; -update noar tt set b2='E' where id=3; -update noar ti set b2='E' where id=3; -update noar tt set b0='1Z5AGHX' where id=4; -update noar ti set b0='1Z5AGHX' where id=4; -update noar tt set b1='I5MCPCL0HDHW' where id=4; -update noar ti set b1='I5MCPCL0HDHW' where id=4; -update noar tt set b2='BRJWNH91X5TD4Q4CBUIV5HG' where id=4; -update noar ti set b2='BRJWNH91X5TD4Q4CBUIV5HG' where id=4; -update noar tt set b0='ZJ2LCP' where id=5; -update noar ti set b0='ZJ2LCP' where id=5; -update noar tt set b1='9PFOHP58' where id=5; -update noar ti set b1='9PFOHP58' where id=5; -update noar tt set b2='E5D5IM5RZ6' where id=5; -update noar ti set b2='E5D5IM5RZ6' where id=5; -update noar tt set b0='0JI1' where id=6; -update noar ti set b0='0JI1' where id=6; -update noar tt set b1='Q81T' where id=6; -update noar ti set b1='Q81T' where id=6; -update noar tt set b2='HI5SXOMFVM7XSS2VFNAS661' where id=6; -update noar ti set b2='HI5SXOMFVM7XSS2VFNAS661' where id=6; -update noar tt set b0='WKROC99QPP' where id=7; -update noar ti set b0='WKROC99QPP' where id=7; -update noar tt set b1='MJLUQLTA65R9KKD40XB49OOOIR8624' where id=7; -update noar ti set b1='MJLUQLTA65R9KKD40XB49OOOIR8624' where id=7; -update noar tt set b2='84UCRON6EQMN0PCX1I6PYIWK96' where id=7; -update noar ti set b2='84UCRON6EQMN0PCX1I6PYIWK96' where id=7; -update noar tt set b0='3ZX7YSDOSBLK2O3163I' where id=8; -update noar ti set b0='3ZX7YSDOSBLK2O3163I' where id=8; -update noar tt set b1='6ODEIKVWGIBWHCH0ER20A7L' where id=8; -update noar ti set b1='6ODEIKVWGIBWHCH0ER20A7L' where id=8; -update noar tt set b2='6ORJ6ML11Y' where id=8; -update noar ti set b2='6ORJ6ML11Y' where id=8; -update noar tt set b0='DD5PRF62PI' where id=9; -update noar ti set b0='DD5PRF62PI' where id=9; -update noar tt set b1='KM7GBCPJ46P00L' where id=9; -update noar ti set b1='KM7GBCPJ46P00L' where id=9; -update noar tt set b2='V00KLD1QT7R3N81W4YKNV2KAO1ZBZ' where id=9; -update noar ti set b2='V00KLD1QT7R3N81W4YKNV2KAO1ZBZ' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 blob null, -b1 longblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='S9D8CGW60YGMTQMWKRDREED6A5QO' where id=1; -update noar ti set b0='S9D8CGW60YGMTQMWKRDREED6A5QO' where id=1; -update noar tt set b1='NVCBR4MERA08P7131Q3MRU3OCV14S38P' where id=1; -update noar ti set b1='NVCBR4MERA08P7131Q3MRU3OCV14S38P' where id=1; -update noar tt set b2='KLIM06OJPKVKFTUOD1VHGBKL3GR8VRGX' where id=1; -update noar ti set b2='KLIM06OJPKVKFTUOD1VHGBKL3GR8VRGX' where id=1; -update noar tt set b0='SWKR3YCK3UU8WMEU4UC3DBO32ZY0C' where id=2; -update noar ti set b0='SWKR3YCK3UU8WMEU4UC3DBO32ZY0C' where id=2; -update noar tt set b1='SYL2HJYD06L70ERBKTIKFFAI6' where id=2; -update noar ti set b1='SYL2HJYD06L70ERBKTIKFFAI6' where id=2; -update noar tt set b2='CPIVVNQX4TZR' where id=2; -update noar ti set b2='CPIVVNQX4TZR' where id=2; -update noar tt set b0='O6LZEOFE332J' where id=3; -update noar ti set b0='O6LZEOFE332J' where id=3; -update noar tt set b1='6K1TG4' where id=3; -update noar ti set b1='6K1TG4' where id=3; -update noar tt set b2='Y8WRN3DZ7SG60NHPYCQMRZ42S9FV' where id=3; -update noar ti set b2='Y8WRN3DZ7SG60NHPYCQMRZ42S9FV' where id=3; -update noar tt set b0='BPFSXIEV9EE2AXHQY48P' where id=4; -update noar ti set b0='BPFSXIEV9EE2AXHQY48P' where id=4; -update noar tt set b1='4QK0J7786RI3U8GL8' where id=4; -update noar ti set b1='4QK0J7786RI3U8GL8' where id=4; -update noar tt set b2='7BZQ3Y5PQM5545IZ' where id=4; -update noar ti set b2='7BZQ3Y5PQM5545IZ' where id=4; -update noar tt set b0='F9X5Y0PDAZPVSALW7ZG6ORKE' where id=5; -update noar ti set b0='F9X5Y0PDAZPVSALW7ZG6ORKE' where id=5; -update noar tt set b1='RNVNCLSRAZMG4B1ERM1KEI3' where id=5; -update noar ti set b1='RNVNCLSRAZMG4B1ERM1KEI3' where id=5; -update noar tt set b2='DVMQ8L' where id=5; -update noar ti set b2='DVMQ8L' where id=5; -update noar tt set b0='TKLUQHR44TEAJARKF' where id=6; -update noar ti set b0='TKLUQHR44TEAJARKF' where id=6; -update noar tt set b1='AN6T3S7PWCZYMO7J' where id=6; -update noar ti set b1='AN6T3S7PWCZYMO7J' where id=6; -update noar tt set b2='VG7J5A5JM6GSPYP29LLIB4' where id=6; -update noar ti set b2='VG7J5A5JM6GSPYP29LLIB4' where id=6; -update noar tt set b0='8LCRSAMFP8CG984YF7Z' where id=7; -update noar ti set b0='8LCRSAMFP8CG984YF7Z' where id=7; -update noar tt set b1='3YEF6XOJ80V074X' where id=7; -update noar ti set b1='3YEF6XOJ80V074X' where id=7; -update noar tt set b2='4X293VJ' where id=7; -update noar ti set b2='4X293VJ' where id=7; -update noar tt set b0='8V7KDWK7' where id=8; -update noar ti set b0='8V7KDWK7' where id=8; -update noar tt set b1='UGVZ2Y6A' where id=8; -update noar ti set b1='UGVZ2Y6A' where id=8; -update noar tt set b2='TWL2XU3NQ34Y9O' where id=8; -update noar ti set b2='TWL2XU3NQ34Y9O' where id=8; -update noar tt set b0='J8LIS3KDS' where id=9; -update noar ti set b0='J8LIS3KDS' where id=9; -update noar tt set b1='8D2ED4075IL' where id=9; -update noar ti set b1='8D2ED4075IL' where id=9; -update noar tt set b2='33P6MMTEXXA0PQ778QFWBTJ' where id=9; -update noar ti set b2='33P6MMTEXXA0PQ778QFWBTJ' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 blob not null, -b1 longblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='7IZSEFD' where id=1; -update noar ti set b0='7IZSEFD' where id=1; -update noar tt set b1='4GJL9N7FHSIDG61M0XNTZ' where id=1; -update noar ti set b1='4GJL9N7FHSIDG61M0XNTZ' where id=1; -update noar tt set b2='YS9AII1CJDMF' where id=1; -update noar ti set b2='YS9AII1CJDMF' where id=1; -update noar tt set b0='H434P0HTV6OT92R09TQUS' where id=2; -update noar ti set b0='H434P0HTV6OT92R09TQUS' where id=2; -update noar tt set b1='HWW7IR4R5PFSPX' where id=2; -update noar ti set b1='HWW7IR4R5PFSPX' where id=2; -update noar tt set b2='8V51UP8H379U89BKY4BW50T' where id=2; -update noar ti set b2='8V51UP8H379U89BKY4BW50T' where id=2; -update noar tt set b0='3MG9NIUOU90SA8JCYL0V' where id=3; -update noar ti set b0='3MG9NIUOU90SA8JCYL0V' where id=3; -update noar tt set b1='0V1R4520PXY9TMM2CR7SB' where id=3; -update noar ti set b1='0V1R4520PXY9TMM2CR7SB' where id=3; -update noar tt set b2='3VTGYLUQVS41PFOYC4K5' where id=3; -update noar ti set b2='3VTGYLUQVS41PFOYC4K5' where id=3; -update noar tt set b0='UCLRQEJMTV6QFYXTHZ06L6GF' where id=4; -update noar ti set b0='UCLRQEJMTV6QFYXTHZ06L6GF' where id=4; -update noar tt set b1='ICAQ96TZUI32UHDO6NAKL' where id=4; -update noar ti set b1='ICAQ96TZUI32UHDO6NAKL' where id=4; -update noar tt set b2='HN55NKJC45LKROJ1DSTU84C' where id=4; -update noar ti set b2='HN55NKJC45LKROJ1DSTU84C' where id=4; -update noar tt set b0='N8JOW3KH' where id=5; -update noar ti set b0='N8JOW3KH' where id=5; -update noar tt set b1='T7ERDYJXVZ6JW0Z3M' where id=5; -update noar ti set b1='T7ERDYJXVZ6JW0Z3M' where id=5; -update noar tt set b2='EVR9BR8BKLEX50EMD674W1' where id=5; -update noar ti set b2='EVR9BR8BKLEX50EMD674W1' where id=5; -update noar tt set b0='SK0794NV4R7T' where id=6; -update noar ti set b0='SK0794NV4R7T' where id=6; -update noar tt set b1='1V4XK5PFGI1' where id=6; -update noar ti set b1='1V4XK5PFGI1' where id=6; -update noar tt set b2='WF7977XX5Q65S' where id=6; -update noar ti set b2='WF7977XX5Q65S' where id=6; -update noar tt set b0='0LLPSQ3VOIY' where id=7; -update noar ti set b0='0LLPSQ3VOIY' where id=7; -update noar tt set b1='LRDKSH1VM3GUY2LVWUPC4FK64FOA2' where id=7; -update noar ti set b1='LRDKSH1VM3GUY2LVWUPC4FK64FOA2' where id=7; -update noar tt set b2='P4T488LX0D34' where id=7; -update noar ti set b2='P4T488LX0D34' where id=7; -update noar tt set b0='EBQCITCU3W' where id=8; -update noar ti set b0='EBQCITCU3W' where id=8; -update noar tt set b1='A' where id=8; -update noar ti set b1='A' where id=8; -update noar tt set b2='B7' where id=8; -update noar ti set b2='B7' where id=8; -update noar tt set b0='K8KPAL103WSS9PIAL9M70K3W639MPFUY' where id=9; -update noar ti set b0='K8KPAL103WSS9PIAL9M70K3W639MPFUY' where id=9; -update noar tt set b1='CZYNCMLPJBRTATMTQCVQ3J7L94J3R' where id=9; -update noar ti set b1='CZYNCMLPJBRTATMTQCVQ3J7L94J3R' where id=9; -update noar tt set b2='H1KGAR37TJ6GVGWFC6DFYHC6PXE' where id=9; -update noar ti set b2='H1KGAR37TJ6GVGWFC6DFYHC6PXE' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 blob null, -b1 longblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='S6BGCNQML5VSMTO' where id=1; -update noar ti set b0='S6BGCNQML5VSMTO' where id=1; -update noar tt set b1='VD1EVKRC2TFQ1CC6FKCZRYI8' where id=1; -update noar ti set b1='VD1EVKRC2TFQ1CC6FKCZRYI8' where id=1; -update noar tt set b2='X67SI5CDCJVVYCV' where id=1; -update noar ti set b2='X67SI5CDCJVVYCV' where id=1; -update noar tt set b0='68IYT2VTPGU53XUWLB4LQAK' where id=2; -update noar ti set b0='68IYT2VTPGU53XUWLB4LQAK' where id=2; -update noar tt set b1='XOZO8CN6N3' where id=2; -update noar ti set b1='XOZO8CN6N3' where id=2; -update noar tt set b2='PACFQEVFS4B2CZFNFOMYN5Z2' where id=2; -update noar ti set b2='PACFQEVFS4B2CZFNFOMYN5Z2' where id=2; -update noar tt set b0='1X96A1W1Y9907GZTISROBGP' where id=3; -update noar ti set b0='1X96A1W1Y9907GZTISROBGP' where id=3; -update noar tt set b1='4VM' where id=3; -update noar ti set b1='4VM' where id=3; -update noar tt set b2='52Y8Q' where id=3; -update noar ti set b2='52Y8Q' where id=3; -update noar tt set b0='0WOWESWQE6LGRUID7M7C93EVWLXUMYEN' where id=4; -update noar ti set b0='0WOWESWQE6LGRUID7M7C93EVWLXUMYEN' where id=4; -update noar tt set b1='J9B4WWK0LRQ9ET8MMAA' where id=4; -update noar ti set b1='J9B4WWK0LRQ9ET8MMAA' where id=4; -update noar tt set b2='ULGR71U7E70H6DZQ' where id=4; -update noar ti set b2='ULGR71U7E70H6DZQ' where id=4; -update noar tt set b0='4QYK2JM7JX7' where id=5; -update noar ti set b0='4QYK2JM7JX7' where id=5; -update noar tt set b1='C22ZY4W56PJHRKR' where id=5; -update noar ti set b1='C22ZY4W56PJHRKR' where id=5; -update noar tt set b2='C8RW9DEW2Q0DH2IRJJ' where id=5; -update noar ti set b2='C8RW9DEW2Q0DH2IRJJ' where id=5; -update noar tt set b0='82KG51AFJ7RP4ZEEJR7B6IK1M18OG0R1' where id=6; -update noar ti set b0='82KG51AFJ7RP4ZEEJR7B6IK1M18OG0R1' where id=6; -update noar tt set b1='XQP12ZWUTZ13WP8ZT5L' where id=6; -update noar ti set b1='XQP12ZWUTZ13WP8ZT5L' where id=6; -update noar tt set b2='O6KDED44V4SDF25HGK6H9N9B1IYOPYLS' where id=6; -update noar ti set b2='O6KDED44V4SDF25HGK6H9N9B1IYOPYLS' where id=6; -update noar tt set b0='RR5YOKA5L07KO78' where id=7; -update noar ti set b0='RR5YOKA5L07KO78' where id=7; -update noar tt set b1='DWS2FO1AF0YWUPUULKXWH' where id=7; -update noar ti set b1='DWS2FO1AF0YWUPUULKXWH' where id=7; -update noar tt set b2='HBHBYW0M' where id=7; -update noar ti set b2='HBHBYW0M' where id=7; -update noar tt set b0='KT17UQ5YLCA829XDOP4VDICS' where id=8; -update noar ti set b0='KT17UQ5YLCA829XDOP4VDICS' where id=8; -update noar tt set b1='HF6X3YCI9LCT5GPP8KTMYH63WI' where id=8; -update noar ti set b1='HF6X3YCI9LCT5GPP8KTMYH63WI' where id=8; -update noar tt set b2='WV3HEI8VOTJ9BYWON1LDPT4E' where id=8; -update noar ti set b2='WV3HEI8VOTJ9BYWON1LDPT4E' where id=8; -update noar tt set b0='2EOX3GK1TWM74' where id=9; -update noar ti set b0='2EOX3GK1TWM74' where id=9; -update noar tt set b1='T' where id=9; -update noar ti set b1='T' where id=9; -update noar tt set b2='NIYO3ETGFOO3B' where id=9; -update noar ti set b2='NIYO3ETGFOO3B' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 blob not null, -b1 longblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='0O5V16R4A5DALWQDBH5RQKD8X08GI4' where id=1; -update noar ti set b0='0O5V16R4A5DALWQDBH5RQKD8X08GI4' where id=1; -update noar tt set b1='D6L6LAGOD4311SH9' where id=1; -update noar ti set b1='D6L6LAGOD4311SH9' where id=1; -update noar tt set b2='JP58UA92HK6VLBUXHOVG62K4S4' where id=1; -update noar ti set b2='JP58UA92HK6VLBUXHOVG62K4S4' where id=1; -update noar tt set b0='XH' where id=2; -update noar ti set b0='XH' where id=2; -update noar tt set b1='VF6FH7OU' where id=2; -update noar ti set b1='VF6FH7OU' where id=2; -update noar tt set b2='4B34ABOY1LEM2Q7VQYA1AG50S1' where id=2; -update noar ti set b2='4B34ABOY1LEM2Q7VQYA1AG50S1' where id=2; -update noar tt set b0='QQ' where id=3; -update noar ti set b0='QQ' where id=3; -update noar tt set b1='618U8RXFJ01SV' where id=3; -update noar ti set b1='618U8RXFJ01SV' where id=3; -update noar tt set b2='0CBTO' where id=3; -update noar ti set b2='0CBTO' where id=3; -update noar tt set b0='59MT12LIVYGU705D8' where id=4; -update noar ti set b0='59MT12LIVYGU705D8' where id=4; -update noar tt set b1='WGBTAYK4GEJBPZC41Z3C85' where id=4; -update noar ti set b1='WGBTAYK4GEJBPZC41Z3C85' where id=4; -update noar tt set b2='S6' where id=4; -update noar ti set b2='S6' where id=4; -update noar tt set b0='KR0DUUTWSZCL2OJT0XIYDYT' where id=5; -update noar ti set b0='KR0DUUTWSZCL2OJT0XIYDYT' where id=5; -update noar tt set b1='5' where id=5; -update noar ti set b1='5' where id=5; -update noar tt set b2='YG9' where id=5; -update noar ti set b2='YG9' where id=5; -update noar tt set b0='REFVO3MHK1GJZQQAAKE' where id=6; -update noar ti set b0='REFVO3MHK1GJZQQAAKE' where id=6; -update noar tt set b1='F0DCOBO00MT8HZ' where id=6; -update noar ti set b1='F0DCOBO00MT8HZ' where id=6; -update noar tt set b2='E7AG8DSHYH8' where id=6; -update noar ti set b2='E7AG8DSHYH8' where id=6; -update noar tt set b0='BI0CX22WA4D' where id=7; -update noar ti set b0='BI0CX22WA4D' where id=7; -update noar tt set b1='R96V1S' where id=7; -update noar ti set b1='R96V1S' where id=7; -update noar tt set b2='JBLZKZXNWX21TJLET97XQ0K' where id=7; -update noar ti set b2='JBLZKZXNWX21TJLET97XQ0K' where id=7; -update noar tt set b0='K2KV2' where id=8; -update noar ti set b0='K2KV2' where id=8; -update noar tt set b1='7HTCOWTR9L3HQUY4OU5SA7' where id=8; -update noar ti set b1='7HTCOWTR9L3HQUY4OU5SA7' where id=8; -update noar tt set b2='2PZW8Y' where id=8; -update noar ti set b2='2PZW8Y' where id=8; -update noar tt set b0='JEO' where id=9; -update noar ti set b0='JEO' where id=9; -update noar tt set b1='9BQQX' where id=9; -update noar ti set b1='9BQQX' where id=9; -update noar tt set b2='KCRXVZNI72E022VFZME7ESUL' where id=9; -update noar ti set b2='KCRXVZNI72E022VFZME7ESUL' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 blob null, -b1 longblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='Z9DRIG2' where id=1; -update noar ti set b0='Z9DRIG2' where id=1; -update noar tt set b1='59RW2H' where id=1; -update noar ti set b1='59RW2H' where id=1; -update noar tt set b2='ZAFZPRWT' where id=1; -update noar ti set b2='ZAFZPRWT' where id=1; -update noar tt set b0='DRHEAF' where id=2; -update noar ti set b0='DRHEAF' where id=2; -update noar tt set b1='8IJPRLI86NV7MSSTP3S4' where id=2; -update noar ti set b1='8IJPRLI86NV7MSSTP3S4' where id=2; -update noar tt set b2='XISFCCV64GTIND6K3FGFEF1M4M' where id=2; -update noar ti set b2='XISFCCV64GTIND6K3FGFEF1M4M' where id=2; -update noar tt set b0='B6LZN46M309RX510TN0DZQSC49C83RT' where id=3; -update noar ti set b0='B6LZN46M309RX510TN0DZQSC49C83RT' where id=3; -update noar tt set b1='6W3357AR8SM9276W5Q03' where id=3; -update noar ti set b1='6W3357AR8SM9276W5Q03' where id=3; -update noar tt set b2='O1Y1YU1Q17QHYYHIA8L5O' where id=3; -update noar ti set b2='O1Y1YU1Q17QHYYHIA8L5O' where id=3; -update noar tt set b0='1OK0VTISQKQX' where id=4; -update noar ti set b0='1OK0VTISQKQX' where id=4; -update noar tt set b1='N8QVL' where id=4; -update noar ti set b1='N8QVL' where id=4; -update noar tt set b2='GAKWM18ZYD92YY0SFPISSW' where id=4; -update noar ti set b2='GAKWM18ZYD92YY0SFPISSW' where id=4; -update noar tt set b0='2JB1OQJLFEOE80KAEX5TMXED' where id=5; -update noar ti set b0='2JB1OQJLFEOE80KAEX5TMXED' where id=5; -update noar tt set b1='I3EAL2Y40NRP6C5EE9Y7VHKCX0H3O9A' where id=5; -update noar ti set b1='I3EAL2Y40NRP6C5EE9Y7VHKCX0H3O9A' where id=5; -update noar tt set b2='H2SDNMO7VWVZECEO57M41U0748SV1S' where id=5; -update noar ti set b2='H2SDNMO7VWVZECEO57M41U0748SV1S' where id=5; -update noar tt set b0='RK3WZ8QHQ3H73IUKKMQ' where id=6; -update noar ti set b0='RK3WZ8QHQ3H73IUKKMQ' where id=6; -update noar tt set b1='NDYVM09MKNQ1AFLZ6JFXSN69R9HV' where id=6; -update noar ti set b1='NDYVM09MKNQ1AFLZ6JFXSN69R9HV' where id=6; -update noar tt set b2='8UCX79SYBO0X8' where id=6; -update noar ti set b2='8UCX79SYBO0X8' where id=6; -update noar tt set b0='Z6G' where id=7; -update noar ti set b0='Z6G' where id=7; -update noar tt set b1='T' where id=7; -update noar ti set b1='T' where id=7; -update noar tt set b2='ILF218J65OX74' where id=7; -update noar ti set b2='ILF218J65OX74' where id=7; -update noar tt set b0='FTYIY590VAJY0616MBDOC7Q' where id=8; -update noar ti set b0='FTYIY590VAJY0616MBDOC7Q' where id=8; -update noar tt set b1='II7YNFI2SXTLYADNGM9W91' where id=8; -update noar ti set b1='II7YNFI2SXTLYADNGM9W91' where id=8; -update noar tt set b2='WYSX1ZJZ69CLFZGE2OO1K9BNZ' where id=8; -update noar ti set b2='WYSX1ZJZ69CLFZGE2OO1K9BNZ' where id=8; -update noar tt set b0='70VICVAIWLJOZRY5XFCLRYG' where id=9; -update noar ti set b0='70VICVAIWLJOZRY5XFCLRYG' where id=9; -update noar tt set b1='HA41' where id=9; -update noar ti set b1='HA41' where id=9; -update noar tt set b2='LJN5OANDXOAWWYE8P5L4T6DLXV' where id=9; -update noar ti set b2='LJN5OANDXOAWWYE8P5L4T6DLXV' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 blob not null, -b1 longblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='IGFPUXUTPHXORPXDS9PZDB' where id=1; -update noar ti set b0='IGFPUXUTPHXORPXDS9PZDB' where id=1; -update noar tt set b1='3UUEPV5RDZB90S' where id=1; -update noar ti set b1='3UUEPV5RDZB90S' where id=1; -update noar tt set b2='7' where id=1; -update noar ti set b2='7' where id=1; -update noar tt set b0='EQK99PG8CYOJQ5RIRRX7TQCS' where id=2; -update noar ti set b0='EQK99PG8CYOJQ5RIRRX7TQCS' where id=2; -update noar tt set b1='MD' where id=2; -update noar ti set b1='MD' where id=2; -update noar tt set b2='EJ51C9I' where id=2; -update noar ti set b2='EJ51C9I' where id=2; -update noar tt set b0='CDD' where id=3; -update noar ti set b0='CDD' where id=3; -update noar tt set b1='VGPPO49NP8E4MUV0W3' where id=3; -update noar ti set b1='VGPPO49NP8E4MUV0W3' where id=3; -update noar tt set b2='9BQBGZ5E6DGQ5AZJYAMKN3GX' where id=3; -update noar ti set b2='9BQBGZ5E6DGQ5AZJYAMKN3GX' where id=3; -update noar tt set b0='MC5C6EKTD4HB7ZUF3' where id=4; -update noar ti set b0='MC5C6EKTD4HB7ZUF3' where id=4; -update noar tt set b1='BT2D0BK11557' where id=4; -update noar ti set b1='BT2D0BK11557' where id=4; -update noar tt set b2='A3BH399UBJ3JPMJ' where id=4; -update noar ti set b2='A3BH399UBJ3JPMJ' where id=4; -update noar tt set b0='48820CW4C7P7LWG' where id=5; -update noar ti set b0='48820CW4C7P7LWG' where id=5; -update noar tt set b1='LKNWTC1XWMX15NI7C7AQR9T' where id=5; -update noar ti set b1='LKNWTC1XWMX15NI7C7AQR9T' where id=5; -update noar tt set b2='TXO4L8OSFV3YPT' where id=5; -update noar ti set b2='TXO4L8OSFV3YPT' where id=5; -update noar tt set b0='I303F0E8UJRK6H8YHH70EPEIK' where id=6; -update noar ti set b0='I303F0E8UJRK6H8YHH70EPEIK' where id=6; -update noar tt set b1='2M4D2Q6XEA2OL4Z9KO4VB' where id=6; -update noar ti set b1='2M4D2Q6XEA2OL4Z9KO4VB' where id=6; -update noar tt set b2='ZMOUB7ETM94F719ULVOB1HG4AL3PP' where id=6; -update noar ti set b2='ZMOUB7ETM94F719ULVOB1HG4AL3PP' where id=6; -update noar tt set b0='GSL6NOHLUIPLJF6DM81UZQUN73XZP' where id=7; -update noar ti set b0='GSL6NOHLUIPLJF6DM81UZQUN73XZP' where id=7; -update noar tt set b1='ZHITRPU6JETS90OH' where id=7; -update noar ti set b1='ZHITRPU6JETS90OH' where id=7; -update noar tt set b2='0GVVNAK1K7DW7CBYZ9Z77H1' where id=7; -update noar ti set b2='0GVVNAK1K7DW7CBYZ9Z77H1' where id=7; -update noar tt set b0='PYXSEUBVM1ELYZO634W4AEDBXKW9WR' where id=8; -update noar ti set b0='PYXSEUBVM1ELYZO634W4AEDBXKW9WR' where id=8; -update noar tt set b1='GW465TWLHZB52' where id=8; -update noar ti set b1='GW465TWLHZB52' where id=8; -update noar tt set b2='QX41Q57G8ZNW8M9JV3WGR4SC6K' where id=8; -update noar ti set b2='QX41Q57G8ZNW8M9JV3WGR4SC6K' where id=8; -update noar tt set b0='ZCARQTAIX15MNWZRD9V7BYXEBS' where id=9; -update noar ti set b0='ZCARQTAIX15MNWZRD9V7BYXEBS' where id=9; -update noar tt set b1='00OFNNG1B0' where id=9; -update noar ti set b1='00OFNNG1B0' where id=9; -update noar tt set b2='X' where id=9; -update noar ti set b2='X' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 blob null, -b1 longblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='RV4HLLCLNSEZBKOOROTQSDA5' where id=1; -update noar ti set b0='RV4HLLCLNSEZBKOOROTQSDA5' where id=1; -update noar tt set b1='OSJ5BTRV3D' where id=1; -update noar ti set b1='OSJ5BTRV3D' where id=1; -update noar tt set b2='ZXFRGMI' where id=1; -update noar ti set b2='ZXFRGMI' where id=1; -update noar tt set b0='OKD966601VZDTT4QJREZ2Z0EW4TF' where id=2; -update noar ti set b0='OKD966601VZDTT4QJREZ2Z0EW4TF' where id=2; -update noar tt set b1='Z1' where id=2; -update noar ti set b1='Z1' where id=2; -update noar tt set b2='DBW0' where id=2; -update noar ti set b2='DBW0' where id=2; -update noar tt set b0='LTUVFUI6K8MEJGR39OB' where id=3; -update noar ti set b0='LTUVFUI6K8MEJGR39OB' where id=3; -update noar tt set b1='4E6OI5IG99V8H68NV13' where id=3; -update noar ti set b1='4E6OI5IG99V8H68NV13' where id=3; -update noar tt set b2='RT6LPPT36V9JDZMFJGXIAYW34H0EE' where id=3; -update noar ti set b2='RT6LPPT36V9JDZMFJGXIAYW34H0EE' where id=3; -update noar tt set b0='74JUQ5ARCZ' where id=4; -update noar ti set b0='74JUQ5ARCZ' where id=4; -update noar tt set b1='Z7BW2' where id=4; -update noar ti set b1='Z7BW2' where id=4; -update noar tt set b2='EMZH0U' where id=4; -update noar ti set b2='EMZH0U' where id=4; -update noar tt set b0='60V7CY06Z' where id=5; -update noar ti set b0='60V7CY06Z' where id=5; -update noar tt set b1='TAEP7THUV2OCI533QOA4NU3AQSAX2' where id=5; -update noar ti set b1='TAEP7THUV2OCI533QOA4NU3AQSAX2' where id=5; -update noar tt set b2='74' where id=5; -update noar ti set b2='74' where id=5; -update noar tt set b0='QPV50ZSO6P5VDHMCK7EB2E1' where id=6; -update noar ti set b0='QPV50ZSO6P5VDHMCK7EB2E1' where id=6; -update noar tt set b1='B3O9FWA9XMVTMAB3COZBB4ZDQTMRLVR5' where id=6; -update noar ti set b1='B3O9FWA9XMVTMAB3COZBB4ZDQTMRLVR5' where id=6; -update noar tt set b2='48DES2TG9T31KZA615CWY802H35' where id=6; -update noar ti set b2='48DES2TG9T31KZA615CWY802H35' where id=6; -update noar tt set b0='ZWZD85HMA4WLB' where id=7; -update noar ti set b0='ZWZD85HMA4WLB' where id=7; -update noar tt set b1='HFVM9E6AKPKJR80QEK1VNN6LA' where id=7; -update noar ti set b1='HFVM9E6AKPKJR80QEK1VNN6LA' where id=7; -update noar tt set b2='MUSG' where id=7; -update noar ti set b2='MUSG' where id=7; -update noar tt set b0='H1PHGFV745FIURX2L' where id=8; -update noar ti set b0='H1PHGFV745FIURX2L' where id=8; -update noar tt set b1='KXNAZMARY6PEWFPD1TU' where id=8; -update noar ti set b1='KXNAZMARY6PEWFPD1TU' where id=8; -update noar tt set b2='IR274' where id=8; -update noar ti set b2='IR274' where id=8; -update noar tt set b0='6B1HS' where id=9; -update noar ti set b0='6B1HS' where id=9; -update noar tt set b1='UWSHKJCUSXC4TUNN73MW1LXBKK1VXE' where id=9; -update noar ti set b1='UWSHKJCUSXC4TUNN73MW1LXBKK1VXE' where id=9; -update noar tt set b2='ENGXWAL5H3' where id=9; -update noar ti set b2='ENGXWAL5H3' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 blob not null, -b1 longblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='I65YP8Q6RMOPP1' where id=1; -update noar ti set b0='I65YP8Q6RMOPP1' where id=1; -update noar tt set b1='A6S5VGN45FOYI2WH08ZIUUNS' where id=1; -update noar ti set b1='A6S5VGN45FOYI2WH08ZIUUNS' where id=1; -update noar tt set b2='D' where id=1; -update noar ti set b2='D' where id=1; -update noar tt set b0='3VVR' where id=2; -update noar ti set b0='3VVR' where id=2; -update noar tt set b1='YJ166H' where id=2; -update noar ti set b1='YJ166H' where id=2; -update noar tt set b2='YQL8AUSTOTDZFC5X1L75488DWHTYD' where id=2; -update noar ti set b2='YQL8AUSTOTDZFC5X1L75488DWHTYD' where id=2; -update noar tt set b0='9WXXI59' where id=3; -update noar ti set b0='9WXXI59' where id=3; -update noar tt set b1='43UCYDP6' where id=3; -update noar ti set b1='43UCYDP6' where id=3; -update noar tt set b2='44DJIDPX6X' where id=3; -update noar ti set b2='44DJIDPX6X' where id=3; -update noar tt set b0='X9EM2Q7DN6XA9EYTMKON9LES7' where id=4; -update noar ti set b0='X9EM2Q7DN6XA9EYTMKON9LES7' where id=4; -update noar tt set b1='YB8D3BOZ80HWSU1MESE05NTECJJAN6' where id=4; -update noar ti set b1='YB8D3BOZ80HWSU1MESE05NTECJJAN6' where id=4; -update noar tt set b2='FXL1UX9BB5LWE48O9F956ZRBE1S1SVA' where id=4; -update noar ti set b2='FXL1UX9BB5LWE48O9F956ZRBE1S1SVA' where id=4; -update noar tt set b0='10KPQ' where id=5; -update noar ti set b0='10KPQ' where id=5; -update noar tt set b1='GY0POJ8NM3J061AFL' where id=5; -update noar ti set b1='GY0POJ8NM3J061AFL' where id=5; -update noar tt set b2='104SXWP9IT9NNPA518U' where id=5; -update noar ti set b2='104SXWP9IT9NNPA518U' where id=5; -update noar tt set b0='LRKHUZ1X' where id=6; -update noar ti set b0='LRKHUZ1X' where id=6; -update noar tt set b1='GB' where id=6; -update noar ti set b1='GB' where id=6; -update noar tt set b2='6OLMUD' where id=6; -update noar ti set b2='6OLMUD' where id=6; -update noar tt set b0='121LKKWOJF0GK5J5MFZ7TG6U' where id=7; -update noar ti set b0='121LKKWOJF0GK5J5MFZ7TG6U' where id=7; -update noar tt set b1='2HH' where id=7; -update noar ti set b1='2HH' where id=7; -update noar tt set b2='QLBB99UECVAL0AGMINQK8YFH8' where id=7; -update noar ti set b2='QLBB99UECVAL0AGMINQK8YFH8' where id=7; -update noar tt set b0='1JLLP564VGPC1NSC4MO' where id=8; -update noar ti set b0='1JLLP564VGPC1NSC4MO' where id=8; -update noar tt set b1='V0RBCUR9R7ERSVEX' where id=8; -update noar ti set b1='V0RBCUR9R7ERSVEX' where id=8; -update noar tt set b2='UYYO7EG7XEF4PA6' where id=8; -update noar ti set b2='UYYO7EG7XEF4PA6' where id=8; -update noar tt set b0='Z1KLG' where id=9; -update noar ti set b0='Z1KLG' where id=9; -update noar tt set b1='G31ZEHD8RYC' where id=9; -update noar ti set b1='G31ZEHD8RYC' where id=9; -update noar tt set b2='0EOG74086EN49' where id=9; -update noar ti set b2='0EOG74086EN49' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 blob null, -b1 longblob null, -b2 text null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='ND3WYA' where id=1; -update noar ti set b0='ND3WYA' where id=1; -update noar tt set b1='O0WNNIJXSCQL0KNGXT4AHUCS9NNLWJ' where id=1; -update noar ti set b1='O0WNNIJXSCQL0KNGXT4AHUCS9NNLWJ' where id=1; -update noar tt set b2='LN6H5B6' where id=1; -update noar ti set b2='LN6H5B6' where id=1; -update noar tt set b0='G5HP1ZNNSX' where id=2; -update noar ti set b0='G5HP1ZNNSX' where id=2; -update noar tt set b1='C567L66GSSVNQL1D8UHVOZKLGWA9C' where id=2; -update noar ti set b1='C567L66GSSVNQL1D8UHVOZKLGWA9C' where id=2; -update noar tt set b2='85MHG8F3FUPGJKHEC' where id=2; -update noar ti set b2='85MHG8F3FUPGJKHEC' where id=2; -update noar tt set b0='T2ZH0DDO35XS3P1K' where id=3; -update noar ti set b0='T2ZH0DDO35XS3P1K' where id=3; -update noar tt set b1='RD5Y7CJ2TK6NRSPGNFTDJ3UX3J' where id=3; -update noar ti set b1='RD5Y7CJ2TK6NRSPGNFTDJ3UX3J' where id=3; -update noar tt set b2='78HFOQGARPMT790A' where id=3; -update noar ti set b2='78HFOQGARPMT790A' where id=3; -update noar tt set b0='A1008GD7MFMG0ZMP8CFZ0910FOXYZNA2' where id=4; -update noar ti set b0='A1008GD7MFMG0ZMP8CFZ0910FOXYZNA2' where id=4; -update noar tt set b1='Z8PY55DXURH15XSJBZ5O2SBT8K9B' where id=4; -update noar ti set b1='Z8PY55DXURH15XSJBZ5O2SBT8K9B' where id=4; -update noar tt set b2='R9ZKAJ69OL0KUFMXARKW4NWHWK' where id=4; -update noar ti set b2='R9ZKAJ69OL0KUFMXARKW4NWHWK' where id=4; -update noar tt set b0='DZK70UFCTD' where id=5; -update noar ti set b0='DZK70UFCTD' where id=5; -update noar tt set b1='L48I5RC2EA2TVF' where id=5; -update noar ti set b1='L48I5RC2EA2TVF' where id=5; -update noar tt set b2='1IOM92TI8BDNQEUMWWS' where id=5; -update noar ti set b2='1IOM92TI8BDNQEUMWWS' where id=5; -update noar tt set b0='PDO' where id=6; -update noar ti set b0='PDO' where id=6; -update noar tt set b1='WWH9Y6YZVMT56' where id=6; -update noar ti set b1='WWH9Y6YZVMT56' where id=6; -update noar tt set b2='2Z20PMRNSKD0BV38EITE6OOVD1Z8CQIN' where id=6; -update noar ti set b2='2Z20PMRNSKD0BV38EITE6OOVD1Z8CQIN' where id=6; -update noar tt set b0='CV4UQ523CL9UZUSJX88OXXU9J' where id=7; -update noar ti set b0='CV4UQ523CL9UZUSJX88OXXU9J' where id=7; -update noar tt set b1='RTNVM4KHK5OAMMRMOBSN' where id=7; -update noar ti set b1='RTNVM4KHK5OAMMRMOBSN' where id=7; -update noar tt set b2='K1KDUQ1TJP04Z2G48' where id=7; -update noar ti set b2='K1KDUQ1TJP04Z2G48' where id=7; -update noar tt set b0='GS4QQFS5F5PHTZEDCY95OIWVRCFCFA' where id=8; -update noar ti set b0='GS4QQFS5F5PHTZEDCY95OIWVRCFCFA' where id=8; -update noar tt set b1='NNM0V2MZUM76Y1JLHB2UQLXIPU0016' where id=8; -update noar ti set b1='NNM0V2MZUM76Y1JLHB2UQLXIPU0016' where id=8; -update noar tt set b2='O14734HMEVI' where id=8; -update noar ti set b2='O14734HMEVI' where id=8; -update noar tt set b0='JK0GUW' where id=9; -update noar ti set b0='JK0GUW' where id=9; -update noar tt set b1='D9UEO2TCB1NTVJUQNSMSO7O' where id=9; -update noar ti set b1='D9UEO2TCB1NTVJUQNSMSO7O' where id=9; -update noar tt set b2='5GWVO7U0DHDK69Y2H053EE' where id=9; -update noar ti set b2='5GWVO7U0DHDK69Y2H053EE' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 blob not null, -b1 longblob not null, -b2 text not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='A6JGJ5JYDYG9M1D5ZY1G5X8LBK' where id=1; -update noar ti set b0='A6JGJ5JYDYG9M1D5ZY1G5X8LBK' where id=1; -update noar tt set b1='3CNMX8YH9BGGVEHS4CE' where id=1; -update noar ti set b1='3CNMX8YH9BGGVEHS4CE' where id=1; -update noar tt set b2='ZUA' where id=1; -update noar ti set b2='ZUA' where id=1; -update noar tt set b0='JJVUTKSYA4' where id=2; -update noar ti set b0='JJVUTKSYA4' where id=2; -update noar tt set b1='EDPEUCVHKFNP4IL2UE3' where id=2; -update noar ti set b1='EDPEUCVHKFNP4IL2UE3' where id=2; -update noar tt set b2='O2KVM93RDC4WGYV7LZ05G8B3N4E7X' where id=2; -update noar ti set b2='O2KVM93RDC4WGYV7LZ05G8B3N4E7X' where id=2; -update noar tt set b0='0T4JUDAIU' where id=3; -update noar ti set b0='0T4JUDAIU' where id=3; -update noar tt set b1='B0X21O' where id=3; -update noar ti set b1='B0X21O' where id=3; -update noar tt set b2='UXE1HG7IFDKNVRKB' where id=3; -update noar ti set b2='UXE1HG7IFDKNVRKB' where id=3; -update noar tt set b0='0QSQOR5Y2T93MAPCVPS2ZV' where id=4; -update noar ti set b0='0QSQOR5Y2T93MAPCVPS2ZV' where id=4; -update noar tt set b1='5U334HV76C0F3YGNF8GKLCF4BZ08QR' where id=4; -update noar ti set b1='5U334HV76C0F3YGNF8GKLCF4BZ08QR' where id=4; -update noar tt set b2='M113B8LRIMZOZX0G' where id=4; -update noar ti set b2='M113B8LRIMZOZX0G' where id=4; -update noar tt set b0='V4ZINFU59S' where id=5; -update noar ti set b0='V4ZINFU59S' where id=5; -update noar tt set b1='G6LJC9P5LLWJV9ANSPSQPPPAWYHGON' where id=5; -update noar ti set b1='G6LJC9P5LLWJV9ANSPSQPPPAWYHGON' where id=5; -update noar tt set b2='KZFNNN85SCLW4LFM458TII7NNK' where id=5; -update noar ti set b2='KZFNNN85SCLW4LFM458TII7NNK' where id=5; -update noar tt set b0='R0' where id=6; -update noar ti set b0='R0' where id=6; -update noar tt set b1='BA4KGZFQEBLX2XRD1QOR' where id=6; -update noar ti set b1='BA4KGZFQEBLX2XRD1QOR' where id=6; -update noar tt set b2='X2XC3F94D' where id=6; -update noar ti set b2='X2XC3F94D' where id=6; -update noar tt set b0='2YRLUJK6SLF3XC7M' where id=7; -update noar ti set b0='2YRLUJK6SLF3XC7M' where id=7; -update noar tt set b1='J2NT4C7PLLBGEDU3GOMEU6JP' where id=7; -update noar ti set b1='J2NT4C7PLLBGEDU3GOMEU6JP' where id=7; -update noar tt set b2='6JO97FFNJHTQMCC2AM01G3F4D0A9XXUW' where id=7; -update noar ti set b2='6JO97FFNJHTQMCC2AM01G3F4D0A9XXUW' where id=7; -update noar tt set b0='4QLZZPL3DNR22B3LX3XC85K5' where id=8; -update noar ti set b0='4QLZZPL3DNR22B3LX3XC85K5' where id=8; -update noar tt set b1='8C1MDIF7N0' where id=8; -update noar ti set b1='8C1MDIF7N0' where id=8; -update noar tt set b2='6YXGDYIXWAJP2LI2MI6Q0' where id=8; -update noar ti set b2='6YXGDYIXWAJP2LI2MI6Q0' where id=8; -update noar tt set b0='5WH4145AGVDBEG3BHV4JYMMF' where id=9; -update noar ti set b0='5WH4145AGVDBEG3BHV4JYMMF' where id=9; -update noar tt set b1='QNR4O6DPU' where id=9; -update noar ti set b1='QNR4O6DPU' where id=9; -update noar tt set b2='HFLXU8R1G' where id=9; -update noar ti set b2='HFLXU8R1G' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 blob null, -b1 text null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='B1EUCR' where id=1; -update noar ti set b0='B1EUCR' where id=1; -update noar tt set b1='VKU0K8YVVJ1M1DI79BEYHB0ZW' where id=1; -update noar ti set b1='VKU0K8YVVJ1M1DI79BEYHB0ZW' where id=1; -update noar tt set b2='YH88B551C' where id=1; -update noar ti set b2='YH88B551C' where id=1; -update noar tt set b0='9X67O7K6W2EYW4' where id=2; -update noar ti set b0='9X67O7K6W2EYW4' where id=2; -update noar tt set b1='9GYG9F44' where id=2; -update noar ti set b1='9GYG9F44' where id=2; -update noar tt set b2='JDOAQ6KUC5CMFR03CM' where id=2; -update noar ti set b2='JDOAQ6KUC5CMFR03CM' where id=2; -update noar tt set b0='9CPHQ7B8Z3' where id=3; -update noar ti set b0='9CPHQ7B8Z3' where id=3; -update noar tt set b1='2TVWNIGSVHZLJ' where id=3; -update noar ti set b1='2TVWNIGSVHZLJ' where id=3; -update noar tt set b2='VQR6C5W17KDJ2L32' where id=3; -update noar ti set b2='VQR6C5W17KDJ2L32' where id=3; -update noar tt set b0='TV2' where id=4; -update noar ti set b0='TV2' where id=4; -update noar tt set b1='JN415DV9HPR8PLHX61HJ7GG092' where id=4; -update noar ti set b1='JN415DV9HPR8PLHX61HJ7GG092' where id=4; -update noar tt set b2='1UO' where id=4; -update noar ti set b2='1UO' where id=4; -update noar tt set b0='XTPCW9609D79KN7TU' where id=5; -update noar ti set b0='XTPCW9609D79KN7TU' where id=5; -update noar tt set b1='JKMU2DGEMAB' where id=5; -update noar ti set b1='JKMU2DGEMAB' where id=5; -update noar tt set b2='S3O716HW0MFK6CSLDIIP3YYCXXA' where id=5; -update noar ti set b2='S3O716HW0MFK6CSLDIIP3YYCXXA' where id=5; -update noar tt set b0='VP3F77ZOTLX0' where id=6; -update noar ti set b0='VP3F77ZOTLX0' where id=6; -update noar tt set b1='WFFD8W3B4C9SYSH2VDJFT64V' where id=6; -update noar ti set b1='WFFD8W3B4C9SYSH2VDJFT64V' where id=6; -update noar tt set b2='D3VR83F2X8X5PPVOKT' where id=6; -update noar ti set b2='D3VR83F2X8X5PPVOKT' where id=6; -update noar tt set b0='YRIZ03REJNJHGSZS7NBVCVXKW' where id=7; -update noar ti set b0='YRIZ03REJNJHGSZS7NBVCVXKW' where id=7; -update noar tt set b1='U2P9IPQ85ADK' where id=7; -update noar ti set b1='U2P9IPQ85ADK' where id=7; -update noar tt set b2='F74G2GNZ' where id=7; -update noar ti set b2='F74G2GNZ' where id=7; -update noar tt set b0='0120V4BYBR' where id=8; -update noar ti set b0='0120V4BYBR' where id=8; -update noar tt set b1='7496AO8CA9ZAJIX8CJEYAGGIXGST4' where id=8; -update noar ti set b1='7496AO8CA9ZAJIX8CJEYAGGIXGST4' where id=8; -update noar tt set b2='FZZ8MZCTVE8AQN3162GABOPRJ9C6T' where id=8; -update noar ti set b2='FZZ8MZCTVE8AQN3162GABOPRJ9C6T' where id=8; -update noar tt set b0='IR4G6VQBK8DLV6' where id=9; -update noar ti set b0='IR4G6VQBK8DLV6' where id=9; -update noar tt set b1='157A149HUF2MJVOBRTSB3A' where id=9; -update noar ti set b1='157A149HUF2MJVOBRTSB3A' where id=9; -update noar tt set b2='ESD9EIVNV2G3MK9Z86SC13ZSMICFXUA' where id=9; -update noar ti set b2='ESD9EIVNV2G3MK9Z86SC13ZSMICFXUA' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 blob not null, -b1 text not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='T4RZHTYOV92D077ZVD43JFF' where id=1; -update noar ti set b0='T4RZHTYOV92D077ZVD43JFF' where id=1; -update noar tt set b1='TQFD' where id=1; -update noar ti set b1='TQFD' where id=1; -update noar tt set b2='A' where id=1; -update noar ti set b2='A' where id=1; -update noar tt set b0='XHRCV97MTPE21A16TGZJ' where id=2; -update noar ti set b0='XHRCV97MTPE21A16TGZJ' where id=2; -update noar tt set b1='5BPP1' where id=2; -update noar ti set b1='5BPP1' where id=2; -update noar tt set b2='YZE70KE20TX4OZGW' where id=2; -update noar ti set b2='YZE70KE20TX4OZGW' where id=2; -update noar tt set b0='S9Z7D1A7OSZI58RJ21WYHDBMBAWK' where id=3; -update noar ti set b0='S9Z7D1A7OSZI58RJ21WYHDBMBAWK' where id=3; -update noar tt set b1='UGKFG7Y5YMQF0D1NQGCVJNEUS' where id=3; -update noar ti set b1='UGKFG7Y5YMQF0D1NQGCVJNEUS' where id=3; -update noar tt set b2='Y' where id=3; -update noar ti set b2='Y' where id=3; -update noar tt set b0='DRJ6HDNKW' where id=4; -update noar ti set b0='DRJ6HDNKW' where id=4; -update noar tt set b1='ILT47' where id=4; -update noar ti set b1='ILT47' where id=4; -update noar tt set b2='QQMJQGI7EV2C51MJ75VIF10N6' where id=4; -update noar ti set b2='QQMJQGI7EV2C51MJ75VIF10N6' where id=4; -update noar tt set b0='FAZB86899K4' where id=5; -update noar ti set b0='FAZB86899K4' where id=5; -update noar tt set b1='GCHLZYZPY8QJ60W' where id=5; -update noar ti set b1='GCHLZYZPY8QJ60W' where id=5; -update noar tt set b2='98O8PX' where id=5; -update noar ti set b2='98O8PX' where id=5; -update noar tt set b0='S' where id=6; -update noar ti set b0='S' where id=6; -update noar tt set b1='RSRBLPT172OA5SXM' where id=6; -update noar ti set b1='RSRBLPT172OA5SXM' where id=6; -update noar tt set b2='ZTCQAVC1TYKN938RLJCGNJ' where id=6; -update noar ti set b2='ZTCQAVC1TYKN938RLJCGNJ' where id=6; -update noar tt set b0='YFT9WPF81' where id=7; -update noar ti set b0='YFT9WPF81' where id=7; -update noar tt set b1='EF4E9DUGS3UWKLIM150G' where id=7; -update noar ti set b1='EF4E9DUGS3UWKLIM150G' where id=7; -update noar tt set b2='RW3EYE3UGWS' where id=7; -update noar ti set b2='RW3EYE3UGWS' where id=7; -update noar tt set b0='P' where id=8; -update noar ti set b0='P' where id=8; -update noar tt set b1='CG9P7SYZCK0MMHYZRO' where id=8; -update noar ti set b1='CG9P7SYZCK0MMHYZRO' where id=8; -update noar tt set b2='2FBGWQ8S6BRIK23BF3AZ4ODUDQBX' where id=8; -update noar ti set b2='2FBGWQ8S6BRIK23BF3AZ4ODUDQBX' where id=8; -update noar tt set b0='5HDPAV2625DUZ3IWP17M4XOUC' where id=9; -update noar ti set b0='5HDPAV2625DUZ3IWP17M4XOUC' where id=9; -update noar tt set b1='D5' where id=9; -update noar ti set b1='D5' where id=9; -update noar tt set b2='Z62O27HTVQ8EP7I' where id=9; -update noar ti set b2='Z62O27HTVQ8EP7I' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 blob null, -b1 text null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='HA1HIAMV2HH' where id=1; -update noar ti set b0='HA1HIAMV2HH' where id=1; -update noar tt set b1='45EX2GGUMF6882GXEWHEAH4T7K8T6LH' where id=1; -update noar ti set b1='45EX2GGUMF6882GXEWHEAH4T7K8T6LH' where id=1; -update noar tt set b2='KEIQI2K' where id=1; -update noar ti set b2='KEIQI2K' where id=1; -update noar tt set b0='ARTUUP4SGQK77PH9I' where id=2; -update noar ti set b0='ARTUUP4SGQK77PH9I' where id=2; -update noar tt set b1='JFGHH15' where id=2; -update noar ti set b1='JFGHH15' where id=2; -update noar tt set b2='4W7BS4VZC02701' where id=2; -update noar ti set b2='4W7BS4VZC02701' where id=2; -update noar tt set b0='QDUL0ORSDP' where id=3; -update noar ti set b0='QDUL0ORSDP' where id=3; -update noar tt set b1='7FOK3YA' where id=3; -update noar ti set b1='7FOK3YA' where id=3; -update noar tt set b2='7J1B4IB5WCXU5S3JL7CUNQGF1' where id=3; -update noar ti set b2='7J1B4IB5WCXU5S3JL7CUNQGF1' where id=3; -update noar tt set b0='HX7UFX4SMJZ1QVHYQBY' where id=4; -update noar ti set b0='HX7UFX4SMJZ1QVHYQBY' where id=4; -update noar tt set b1='O9M' where id=4; -update noar ti set b1='O9M' where id=4; -update noar tt set b2='8ULWYUKC8H6Q9CIY8PLNKG9Z988AO' where id=4; -update noar ti set b2='8ULWYUKC8H6Q9CIY8PLNKG9Z988AO' where id=4; -update noar tt set b0='WEGH8P35N6G6K' where id=5; -update noar ti set b0='WEGH8P35N6G6K' where id=5; -update noar tt set b1='N' where id=5; -update noar ti set b1='N' where id=5; -update noar tt set b2='LYMBO5R67XEDQ641CUCXJ' where id=5; -update noar ti set b2='LYMBO5R67XEDQ641CUCXJ' where id=5; -update noar tt set b0='112IOFAN' where id=6; -update noar ti set b0='112IOFAN' where id=6; -update noar tt set b1='MSGCHV0NCZ7ZP74KIIARPW0P96FJGUO' where id=6; -update noar ti set b1='MSGCHV0NCZ7ZP74KIIARPW0P96FJGUO' where id=6; -update noar tt set b2='56F' where id=6; -update noar ti set b2='56F' where id=6; -update noar tt set b0='WSC6E7Q2Y3ZTVF6QVOQ' where id=7; -update noar ti set b0='WSC6E7Q2Y3ZTVF6QVOQ' where id=7; -update noar tt set b1='TJ6HKNWSOSLM0EEN5EL' where id=7; -update noar ti set b1='TJ6HKNWSOSLM0EEN5EL' where id=7; -update noar tt set b2='T9W9HDQTZG1I82HW6DGCWXMVS4FC' where id=7; -update noar ti set b2='T9W9HDQTZG1I82HW6DGCWXMVS4FC' where id=7; -update noar tt set b0='53ZT4AD' where id=8; -update noar ti set b0='53ZT4AD' where id=8; -update noar tt set b1='P1GGPXU5WFC43718F5O4O' where id=8; -update noar ti set b1='P1GGPXU5WFC43718F5O4O' where id=8; -update noar tt set b2='MVHG2E' where id=8; -update noar ti set b2='MVHG2E' where id=8; -update noar tt set b0='I5BL2WISRM5EVQJRVV84WXO57T4N' where id=9; -update noar ti set b0='I5BL2WISRM5EVQJRVV84WXO57T4N' where id=9; -update noar tt set b1='FYYJ0J3YKDDUYD7PWQCAM' where id=9; -update noar ti set b1='FYYJ0J3YKDDUYD7PWQCAM' where id=9; -update noar tt set b2='XRNJSJNUOPHMJ0H1W0QTME19' where id=9; -update noar ti set b2='XRNJSJNUOPHMJ0H1W0QTME19' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 blob not null, -b1 text not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='8EGO5L81728RPV4062RFW871PJYU9' where id=1; -update noar ti set b0='8EGO5L81728RPV4062RFW871PJYU9' where id=1; -update noar tt set b1='NX8UVM1AYN3CNYWRMJ2Y02Z0CNR5YS' where id=1; -update noar ti set b1='NX8UVM1AYN3CNYWRMJ2Y02Z0CNR5YS' where id=1; -update noar tt set b2='Y12LXQQ' where id=1; -update noar ti set b2='Y12LXQQ' where id=1; -update noar tt set b0='0BVQ7MB38GA' where id=2; -update noar ti set b0='0BVQ7MB38GA' where id=2; -update noar tt set b1='C01ZDY' where id=2; -update noar ti set b1='C01ZDY' where id=2; -update noar tt set b2='SETD4N39CHLM318H5E1WLWX' where id=2; -update noar ti set b2='SETD4N39CHLM318H5E1WLWX' where id=2; -update noar tt set b0='HA2LVP7NDKTXO1HHY3KAWQAIW' where id=3; -update noar ti set b0='HA2LVP7NDKTXO1HHY3KAWQAIW' where id=3; -update noar tt set b1='E9TWBDPA' where id=3; -update noar ti set b1='E9TWBDPA' where id=3; -update noar tt set b2='31' where id=3; -update noar ti set b2='31' where id=3; -update noar tt set b0='N1RBV1E57FFZMECMYPVBQCMCL57T6X' where id=4; -update noar ti set b0='N1RBV1E57FFZMECMYPVBQCMCL57T6X' where id=4; -update noar tt set b1='TN4OXKOF9NANKFX' where id=4; -update noar ti set b1='TN4OXKOF9NANKFX' where id=4; -update noar tt set b2='D21Q8HTGK' where id=4; -update noar ti set b2='D21Q8HTGK' where id=4; -update noar tt set b0='FHJ22A160B62SM72QI' where id=5; -update noar ti set b0='FHJ22A160B62SM72QI' where id=5; -update noar tt set b1='2BG2W7FF30EWYUS' where id=5; -update noar ti set b1='2BG2W7FF30EWYUS' where id=5; -update noar tt set b2='9VI9BG5VTQBZKGTLIOXUKE' where id=5; -update noar ti set b2='9VI9BG5VTQBZKGTLIOXUKE' where id=5; -update noar tt set b0='0ACIBLG2ISBH7U0' where id=6; -update noar ti set b0='0ACIBLG2ISBH7U0' where id=6; -update noar tt set b1='TP6FONDAL2KJVOM2NVMD5M3G' where id=6; -update noar ti set b1='TP6FONDAL2KJVOM2NVMD5M3G' where id=6; -update noar tt set b2='KC' where id=6; -update noar ti set b2='KC' where id=6; -update noar tt set b0='3A8GWSCW78AMUF' where id=7; -update noar ti set b0='3A8GWSCW78AMUF' where id=7; -update noar tt set b1='DV9QLRMQNQS' where id=7; -update noar ti set b1='DV9QLRMQNQS' where id=7; -update noar tt set b2='HOIUMKDXKZFBB6211T' where id=7; -update noar ti set b2='HOIUMKDXKZFBB6211T' where id=7; -update noar tt set b0='6P' where id=8; -update noar ti set b0='6P' where id=8; -update noar tt set b1='Y4MJE9N6CTPU2QIUHKD4SR7VQZK8S81' where id=8; -update noar ti set b1='Y4MJE9N6CTPU2QIUHKD4SR7VQZK8S81' where id=8; -update noar tt set b2='8BLLILMS7MI02V6RRQQDPWEE' where id=8; -update noar ti set b2='8BLLILMS7MI02V6RRQQDPWEE' where id=8; -update noar tt set b0='05HGJ2ZTCPITH5I18CTSP1' where id=9; -update noar ti set b0='05HGJ2ZTCPITH5I18CTSP1' where id=9; -update noar tt set b1='NVTJO9JHT3BCDGFVML9MNO' where id=9; -update noar ti set b1='NVTJO9JHT3BCDGFVML9MNO' where id=9; -update noar tt set b2='I6LVEERZ3J6E8' where id=9; -update noar ti set b2='I6LVEERZ3J6E8' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 blob null, -b1 text null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='UDJ5W3RPHI02CA' where id=1; -update noar ti set b0='UDJ5W3RPHI02CA' where id=1; -update noar tt set b1='IWKOODAOFT4RS5T6E6YF6FM7GWK' where id=1; -update noar ti set b1='IWKOODAOFT4RS5T6E6YF6FM7GWK' where id=1; -update noar tt set b2='0HUQAGALI' where id=1; -update noar ti set b2='0HUQAGALI' where id=1; -update noar tt set b0='UIQZ18K5FC02J2LU' where id=2; -update noar ti set b0='UIQZ18K5FC02J2LU' where id=2; -update noar tt set b1='DEK6BPTJ' where id=2; -update noar ti set b1='DEK6BPTJ' where id=2; -update noar tt set b2='F2H7NWIDZL9AWYZ4JQ0XMG3FB' where id=2; -update noar ti set b2='F2H7NWIDZL9AWYZ4JQ0XMG3FB' where id=2; -update noar tt set b0='Z8D1C4J6IC7NY7OKY5AB43FSKSMBSXXF' where id=3; -update noar ti set b0='Z8D1C4J6IC7NY7OKY5AB43FSKSMBSXXF' where id=3; -update noar tt set b1='VR0P9KPR510FU9QSTFEH4' where id=3; -update noar ti set b1='VR0P9KPR510FU9QSTFEH4' where id=3; -update noar tt set b2='I6UMQ59YSDFJ4LO4543VV2L' where id=3; -update noar ti set b2='I6UMQ59YSDFJ4LO4543VV2L' where id=3; -update noar tt set b0='R6YPBQ2OV5AT22VENGQO4GOJ' where id=4; -update noar ti set b0='R6YPBQ2OV5AT22VENGQO4GOJ' where id=4; -update noar tt set b1='XJ0TAIIVXJNDE2J836SE7' where id=4; -update noar ti set b1='XJ0TAIIVXJNDE2J836SE7' where id=4; -update noar tt set b2='1OQ73M' where id=4; -update noar ti set b2='1OQ73M' where id=4; -update noar tt set b0='LVE5T9HMVMI5HWMHTWZU5YY3VH' where id=5; -update noar ti set b0='LVE5T9HMVMI5HWMHTWZU5YY3VH' where id=5; -update noar tt set b1='FEA8YTBLNJU258GUGUJ70GV9B' where id=5; -update noar ti set b1='FEA8YTBLNJU258GUGUJ70GV9B' where id=5; -update noar tt set b2='P9TAHRCDJ2K69XF1NL1' where id=5; -update noar ti set b2='P9TAHRCDJ2K69XF1NL1' where id=5; -update noar tt set b0='VWED1OTEDB62D6JJ66' where id=6; -update noar ti set b0='VWED1OTEDB62D6JJ66' where id=6; -update noar tt set b1='1M8JPPLK1OT5PUL7TW2L1MX32NXCXD' where id=6; -update noar ti set b1='1M8JPPLK1OT5PUL7TW2L1MX32NXCXD' where id=6; -update noar tt set b2='CPIKRKHJKGCPQUGK1672HN' where id=6; -update noar ti set b2='CPIKRKHJKGCPQUGK1672HN' where id=6; -update noar tt set b0='O7TZFIEFB0ZTFFZ6EU9A7L2PNX' where id=7; -update noar ti set b0='O7TZFIEFB0ZTFFZ6EU9A7L2PNX' where id=7; -update noar tt set b1='YXTJ9S5VW2KD09D2B9Z7S8AW7RQW9NQE' where id=7; -update noar ti set b1='YXTJ9S5VW2KD09D2B9Z7S8AW7RQW9NQE' where id=7; -update noar tt set b2='NRLTOPISL5NGANN' where id=7; -update noar ti set b2='NRLTOPISL5NGANN' where id=7; -update noar tt set b0='11BPELVZ6JV8NUGFMK2YO' where id=8; -update noar ti set b0='11BPELVZ6JV8NUGFMK2YO' where id=8; -update noar tt set b1='BENH3OXMOT40J' where id=8; -update noar ti set b1='BENH3OXMOT40J' where id=8; -update noar tt set b2='QWQ5UMZB0Q80AG3Q0UZDTF63YK8S8J5' where id=8; -update noar ti set b2='QWQ5UMZB0Q80AG3Q0UZDTF63YK8S8J5' where id=8; -update noar tt set b0='T2' where id=9; -update noar ti set b0='T2' where id=9; -update noar tt set b1='5VMBH0X6340U4E9UA95L1NSUDRSD' where id=9; -update noar ti set b1='5VMBH0X6340U4E9UA95L1NSUDRSD' where id=9; -update noar tt set b2='07XICTUD4CK6XTTEC2JDV' where id=9; -update noar ti set b2='07XICTUD4CK6XTTEC2JDV' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 blob not null, -b1 text not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='EDZTEJZONZLOLHZDY' where id=1; -update noar ti set b0='EDZTEJZONZLOLHZDY' where id=1; -update noar tt set b1='W3B52JOBRQUFLE7R' where id=1; -update noar ti set b1='W3B52JOBRQUFLE7R' where id=1; -update noar tt set b2='Z4ALPLU' where id=1; -update noar ti set b2='Z4ALPLU' where id=1; -update noar tt set b0='I2DO4X2E08E6NKCN7' where id=2; -update noar ti set b0='I2DO4X2E08E6NKCN7' where id=2; -update noar tt set b1='1ABP' where id=2; -update noar ti set b1='1ABP' where id=2; -update noar tt set b2='CT8Y369UVG1S015BRQOIYA' where id=2; -update noar ti set b2='CT8Y369UVG1S015BRQOIYA' where id=2; -update noar tt set b0='VAPEDI' where id=3; -update noar ti set b0='VAPEDI' where id=3; -update noar tt set b1='J4GLCT0A04SL' where id=3; -update noar ti set b1='J4GLCT0A04SL' where id=3; -update noar tt set b2='CPLUX8JR8BXT' where id=3; -update noar ti set b2='CPLUX8JR8BXT' where id=3; -update noar tt set b0='STGMGI3F1SMIT4FGGHLJ' where id=4; -update noar ti set b0='STGMGI3F1SMIT4FGGHLJ' where id=4; -update noar tt set b1='ZIVAR7XEOSZ2' where id=4; -update noar ti set b1='ZIVAR7XEOSZ2' where id=4; -update noar tt set b2='M5SIDWZ0BQQ048S7JKR74F8' where id=4; -update noar ti set b2='M5SIDWZ0BQQ048S7JKR74F8' where id=4; -update noar tt set b0='EW2RE7WEXNG4QBNZMVWD' where id=5; -update noar ti set b0='EW2RE7WEXNG4QBNZMVWD' where id=5; -update noar tt set b1='SM0RIHD7BN771MC56JYDE1PIHHWEV' where id=5; -update noar ti set b1='SM0RIHD7BN771MC56JYDE1PIHHWEV' where id=5; -update noar tt set b2='2ZCP4' where id=5; -update noar ti set b2='2ZCP4' where id=5; -update noar tt set b0='F8LZUXTWNUJHIB9JAQPC' where id=6; -update noar ti set b0='F8LZUXTWNUJHIB9JAQPC' where id=6; -update noar tt set b1='U' where id=6; -update noar ti set b1='U' where id=6; -update noar tt set b2='EVJPU4C94LR9' where id=6; -update noar ti set b2='EVJPU4C94LR9' where id=6; -update noar tt set b0='7QOMWZPD1QR63NZ9LAC96IZY6CO8154T' where id=7; -update noar ti set b0='7QOMWZPD1QR63NZ9LAC96IZY6CO8154T' where id=7; -update noar tt set b1='BKRGK9UL' where id=7; -update noar ti set b1='BKRGK9UL' where id=7; -update noar tt set b2='WHJQS5A' where id=7; -update noar ti set b2='WHJQS5A' where id=7; -update noar tt set b0='J820YVR6DJK7SQ9EW6XV9H045I1D2' where id=8; -update noar ti set b0='J820YVR6DJK7SQ9EW6XV9H045I1D2' where id=8; -update noar tt set b1='6E4O0ES2BJ5YRG24X' where id=8; -update noar ti set b1='6E4O0ES2BJ5YRG24X' where id=8; -update noar tt set b2='A46S4C7PIWHDL4YV' where id=8; -update noar ti set b2='A46S4C7PIWHDL4YV' where id=8; -update noar tt set b0='5D5D' where id=9; -update noar ti set b0='5D5D' where id=9; -update noar tt set b1='L1DP8MN2K' where id=9; -update noar ti set b1='L1DP8MN2K' where id=9; -update noar tt set b2='1WU6NWLJCALZUG0H5AX9W9YPL6PMSM2' where id=9; -update noar ti set b2='1WU6NWLJCALZUG0H5AX9W9YPL6PMSM2' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 blob null, -b1 text null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='W3IA19UIZY1KC751B' where id=1; -update noar ti set b0='W3IA19UIZY1KC751B' where id=1; -update noar tt set b1='E5HC1LONEX9AZ65D0AAISY99RHT' where id=1; -update noar ti set b1='E5HC1LONEX9AZ65D0AAISY99RHT' where id=1; -update noar tt set b2='X5NGFGVUUJQHLFUHMTMPFDZ9J' where id=1; -update noar ti set b2='X5NGFGVUUJQHLFUHMTMPFDZ9J' where id=1; -update noar tt set b0='52UJSV3' where id=2; -update noar ti set b0='52UJSV3' where id=2; -update noar tt set b1='L37XA72ODF426OEHTEC' where id=2; -update noar ti set b1='L37XA72ODF426OEHTEC' where id=2; -update noar tt set b2='F0F9M43TNV8UIB' where id=2; -update noar ti set b2='F0F9M43TNV8UIB' where id=2; -update noar tt set b0='SZ5SSAIW9QPDS5Y' where id=3; -update noar ti set b0='SZ5SSAIW9QPDS5Y' where id=3; -update noar tt set b1='TUNEO04475K426O4I6' where id=3; -update noar ti set b1='TUNEO04475K426O4I6' where id=3; -update noar tt set b2='NIETHOR663IPECZR8U9UUBU1VG6EBDK' where id=3; -update noar ti set b2='NIETHOR663IPECZR8U9UUBU1VG6EBDK' where id=3; -update noar tt set b0='U3C53R' where id=4; -update noar ti set b0='U3C53R' where id=4; -update noar tt set b1='1P3WNES2T32XMGOYHIUC755TP' where id=4; -update noar ti set b1='1P3WNES2T32XMGOYHIUC755TP' where id=4; -update noar tt set b2='6UAHCBWF2JBOPM' where id=4; -update noar ti set b2='6UAHCBWF2JBOPM' where id=4; -update noar tt set b0='J0AG2NX' where id=5; -update noar ti set b0='J0AG2NX' where id=5; -update noar tt set b1='W' where id=5; -update noar ti set b1='W' where id=5; -update noar tt set b2='9X0G5J' where id=5; -update noar ti set b2='9X0G5J' where id=5; -update noar tt set b0='80OCZLO2X8A5VVDWOH1' where id=6; -update noar ti set b0='80OCZLO2X8A5VVDWOH1' where id=6; -update noar tt set b1='4PULS' where id=6; -update noar ti set b1='4PULS' where id=6; -update noar tt set b2='54BV' where id=6; -update noar ti set b2='54BV' where id=6; -update noar tt set b0='IQYR2839P0VA35JB69GABVJE' where id=7; -update noar ti set b0='IQYR2839P0VA35JB69GABVJE' where id=7; -update noar tt set b1='X4WV9QNADO' where id=7; -update noar ti set b1='X4WV9QNADO' where id=7; -update noar tt set b2='E0W9' where id=7; -update noar ti set b2='E0W9' where id=7; -update noar tt set b0='GNSUWQ85FIPJANX58RFZ1PY1PT8' where id=8; -update noar ti set b0='GNSUWQ85FIPJANX58RFZ1PY1PT8' where id=8; -update noar tt set b1='JSTLNO9ZCBWPRBYXYXFKF5EJX936YS' where id=8; -update noar ti set b1='JSTLNO9ZCBWPRBYXYXFKF5EJX936YS' where id=8; -update noar tt set b2='XFFW' where id=8; -update noar ti set b2='XFFW' where id=8; -update noar tt set b0='20BGNJ' where id=9; -update noar ti set b0='20BGNJ' where id=9; -update noar tt set b1='DL8A3XINIRN44W275IA' where id=9; -update noar ti set b1='DL8A3XINIRN44W275IA' where id=9; -update noar tt set b2='K16' where id=9; -update noar ti set b2='K16' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 blob not null, -b1 text not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='YAI1RJVG5HVWK2DOOTFI' where id=1; -update noar ti set b0='YAI1RJVG5HVWK2DOOTFI' where id=1; -update noar tt set b1='7F9NKS90DULKGW' where id=1; -update noar ti set b1='7F9NKS90DULKGW' where id=1; -update noar tt set b2='LZD1WD' where id=1; -update noar ti set b2='LZD1WD' where id=1; -update noar tt set b0='T8RY05QML9R2JAAAC0ZS' where id=2; -update noar ti set b0='T8RY05QML9R2JAAAC0ZS' where id=2; -update noar tt set b1='NUHRN3200BKNTEF9KGHIC00KL6455S' where id=2; -update noar ti set b1='NUHRN3200BKNTEF9KGHIC00KL6455S' where id=2; -update noar tt set b2='VKG2SP1O' where id=2; -update noar ti set b2='VKG2SP1O' where id=2; -update noar tt set b0='M45XTWC67ERX6' where id=3; -update noar ti set b0='M45XTWC67ERX6' where id=3; -update noar tt set b1='7T3A3OZM6L8CZ618LR445W72EEOCW7' where id=3; -update noar ti set b1='7T3A3OZM6L8CZ618LR445W72EEOCW7' where id=3; -update noar tt set b2='UQRWCK4ON8EOULPQFO2ST' where id=3; -update noar ti set b2='UQRWCK4ON8EOULPQFO2ST' where id=3; -update noar tt set b0='3J9X4TSW9OASS7XE4L' where id=4; -update noar ti set b0='3J9X4TSW9OASS7XE4L' where id=4; -update noar tt set b1='20HQSVWXEL585YIMX1N' where id=4; -update noar ti set b1='20HQSVWXEL585YIMX1N' where id=4; -update noar tt set b2='6G' where id=4; -update noar ti set b2='6G' where id=4; -update noar tt set b0='VE' where id=5; -update noar ti set b0='VE' where id=5; -update noar tt set b1='P2K9F0PI0I' where id=5; -update noar ti set b1='P2K9F0PI0I' where id=5; -update noar tt set b2='O957F' where id=5; -update noar ti set b2='O957F' where id=5; -update noar tt set b0='2ZAGNW74LF62AI0Q0MIUFUENHMVQE' where id=6; -update noar ti set b0='2ZAGNW74LF62AI0Q0MIUFUENHMVQE' where id=6; -update noar tt set b1='BHVD6PM' where id=6; -update noar ti set b1='BHVD6PM' where id=6; -update noar tt set b2='0TUXEQ1' where id=6; -update noar ti set b2='0TUXEQ1' where id=6; -update noar tt set b0='WE178WBM64YFNA0VR8R72' where id=7; -update noar ti set b0='WE178WBM64YFNA0VR8R72' where id=7; -update noar tt set b1='CEOBRM8B5RJPJIOWG5J201BX4H' where id=7; -update noar ti set b1='CEOBRM8B5RJPJIOWG5J201BX4H' where id=7; -update noar tt set b2='8OFITYK0IFVKCEYEEC' where id=7; -update noar ti set b2='8OFITYK0IFVKCEYEEC' where id=7; -update noar tt set b0='55N14DB5S1ZPLBF8YCK6DQBD1AU' where id=8; -update noar ti set b0='55N14DB5S1ZPLBF8YCK6DQBD1AU' where id=8; -update noar tt set b1='CE8CUTQ8T' where id=8; -update noar ti set b1='CE8CUTQ8T' where id=8; -update noar tt set b2='R44PRV4S8UJJVCFEY6OUD72' where id=8; -update noar ti set b2='R44PRV4S8UJJVCFEY6OUD72' where id=8; -update noar tt set b0='HT3BB1NSR1WYIWD7R2NKB' where id=9; -update noar ti set b0='HT3BB1NSR1WYIWD7R2NKB' where id=9; -update noar tt set b1='1V1AYK88R4B77I2' where id=9; -update noar ti set b1='1V1AYK88R4B77I2' where id=9; -update noar tt set b2='OL0F' where id=9; -update noar ti set b2='OL0F' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 blob null, -b1 text null, -b2 text null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='BG2X' where id=1; -update noar ti set b0='BG2X' where id=1; -update noar tt set b1='UY6IKKOSWBTTL2VW00' where id=1; -update noar ti set b1='UY6IKKOSWBTTL2VW00' where id=1; -update noar tt set b2='NF7WJICX71U' where id=1; -update noar ti set b2='NF7WJICX71U' where id=1; -update noar tt set b0='VHD07HKZCKMCOQ2E2UP' where id=2; -update noar ti set b0='VHD07HKZCKMCOQ2E2UP' where id=2; -update noar tt set b1='63WNHJM' where id=2; -update noar ti set b1='63WNHJM' where id=2; -update noar tt set b2='UNUV7RTG3CR0190G94TRQ0WPYG' where id=2; -update noar ti set b2='UNUV7RTG3CR0190G94TRQ0WPYG' where id=2; -update noar tt set b0='QG' where id=3; -update noar ti set b0='QG' where id=3; -update noar tt set b1='WZ0' where id=3; -update noar ti set b1='WZ0' where id=3; -update noar tt set b2='IVJNO9' where id=3; -update noar ti set b2='IVJNO9' where id=3; -update noar tt set b0='CGL' where id=4; -update noar ti set b0='CGL' where id=4; -update noar tt set b1='SULWDBXVXPT7UTR51' where id=4; -update noar ti set b1='SULWDBXVXPT7UTR51' where id=4; -update noar tt set b2='YTIG5IC9V19N6BKH7SK7MPKCDJ60YYCI' where id=4; -update noar ti set b2='YTIG5IC9V19N6BKH7SK7MPKCDJ60YYCI' where id=4; -update noar tt set b0='D2J9TR4KJH3VUF4KPQVXS0H687DUODC' where id=5; -update noar ti set b0='D2J9TR4KJH3VUF4KPQVXS0H687DUODC' where id=5; -update noar tt set b1='8JGAWQGIZG' where id=5; -update noar ti set b1='8JGAWQGIZG' where id=5; -update noar tt set b2='DTWP3ROISNNVRIQ8GJ1GT0' where id=5; -update noar ti set b2='DTWP3ROISNNVRIQ8GJ1GT0' where id=5; -update noar tt set b0='X9KK4D8' where id=6; -update noar ti set b0='X9KK4D8' where id=6; -update noar tt set b1='1D5WN511SYYH1U6R1Y82' where id=6; -update noar ti set b1='1D5WN511SYYH1U6R1Y82' where id=6; -update noar tt set b2='U1' where id=6; -update noar ti set b2='U1' where id=6; -update noar tt set b0='PVK9HKH22ZN' where id=7; -update noar ti set b0='PVK9HKH22ZN' where id=7; -update noar tt set b1='S6TGWWSYE9JNT16' where id=7; -update noar ti set b1='S6TGWWSYE9JNT16' where id=7; -update noar tt set b2='W48ZH6UD1N1W95' where id=7; -update noar ti set b2='W48ZH6UD1N1W95' where id=7; -update noar tt set b0='F9RERUVB0D' where id=8; -update noar ti set b0='F9RERUVB0D' where id=8; -update noar tt set b1='TKQS9USU7ZO6PDMSOXA9' where id=8; -update noar ti set b1='TKQS9USU7ZO6PDMSOXA9' where id=8; -update noar tt set b2='7' where id=8; -update noar ti set b2='7' where id=8; -update noar tt set b0='BO7H134KVBQJ' where id=9; -update noar ti set b0='BO7H134KVBQJ' where id=9; -update noar tt set b1='EQXK7T8KGWIVKGLHKYQLVZ4VYUOA1' where id=9; -update noar ti set b1='EQXK7T8KGWIVKGLHKYQLVZ4VYUOA1' where id=9; -update noar tt set b2='9R0K9R32A1NXM7PVO' where id=9; -update noar ti set b2='9R0K9R32A1NXM7PVO' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 blob not null, -b1 text not null, -b2 text not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='6YJIUM3DXU5L88YZDGUK3Y4PI5R7' where id=1; -update noar ti set b0='6YJIUM3DXU5L88YZDGUK3Y4PI5R7' where id=1; -update noar tt set b1='WC89MCBB' where id=1; -update noar ti set b1='WC89MCBB' where id=1; -update noar tt set b2='RO44MTP21CU27' where id=1; -update noar ti set b2='RO44MTP21CU27' where id=1; -update noar tt set b0='HN9DXG0IU5WOFZO1Y3BJR9W' where id=2; -update noar ti set b0='HN9DXG0IU5WOFZO1Y3BJR9W' where id=2; -update noar tt set b1='XBN68N8' where id=2; -update noar ti set b1='XBN68N8' where id=2; -update noar tt set b2='3WG4Z' where id=2; -update noar ti set b2='3WG4Z' where id=2; -update noar tt set b0='R6Z546BGZ9YCCC6NGJ75ZV73QZ2' where id=3; -update noar ti set b0='R6Z546BGZ9YCCC6NGJ75ZV73QZ2' where id=3; -update noar tt set b1='OX8IO1YEL' where id=3; -update noar ti set b1='OX8IO1YEL' where id=3; -update noar tt set b2='2CV' where id=3; -update noar ti set b2='2CV' where id=3; -update noar tt set b0='NR45N4L93KTP91NT8XXE' where id=4; -update noar ti set b0='NR45N4L93KTP91NT8XXE' where id=4; -update noar tt set b1='OU7ER9' where id=4; -update noar ti set b1='OU7ER9' where id=4; -update noar tt set b2='DYU92F9A4NW230YJ3KZ20SI23' where id=4; -update noar ti set b2='DYU92F9A4NW230YJ3KZ20SI23' where id=4; -update noar tt set b0='TMBV' where id=5; -update noar ti set b0='TMBV' where id=5; -update noar tt set b1='2C0QQZE' where id=5; -update noar ti set b1='2C0QQZE' where id=5; -update noar tt set b2='2GCGV48N9OXXOM03HUGRDN' where id=5; -update noar ti set b2='2GCGV48N9OXXOM03HUGRDN' where id=5; -update noar tt set b0='75DRF204E30BJUAM67Z7JUW8CHIH4RK' where id=6; -update noar ti set b0='75DRF204E30BJUAM67Z7JUW8CHIH4RK' where id=6; -update noar tt set b1='HSZMFUUO5U2MU' where id=6; -update noar ti set b1='HSZMFUUO5U2MU' where id=6; -update noar tt set b2='0WGW88OQZBIX32MVN3EDUXF0' where id=6; -update noar ti set b2='0WGW88OQZBIX32MVN3EDUXF0' where id=6; -update noar tt set b0='PZL6E' where id=7; -update noar ti set b0='PZL6E' where id=7; -update noar tt set b1='2LC5JHCES1XOJE42QZCJ44ANKR0S' where id=7; -update noar ti set b1='2LC5JHCES1XOJE42QZCJ44ANKR0S' where id=7; -update noar tt set b2='4M20PZCX5GXE84L1L173OA8J5B' where id=7; -update noar ti set b2='4M20PZCX5GXE84L1L173OA8J5B' where id=7; -update noar tt set b0='OUUCMWSID2GYBV6IHR69' where id=8; -update noar ti set b0='OUUCMWSID2GYBV6IHR69' where id=8; -update noar tt set b1='MUVOME2X' where id=8; -update noar ti set b1='MUVOME2X' where id=8; -update noar tt set b2='SD9' where id=8; -update noar ti set b2='SD9' where id=8; -update noar tt set b0='2L1DV5DJU' where id=9; -update noar ti set b0='2L1DV5DJU' where id=9; -update noar tt set b1='1R5K1GNYARBRPEWQSU5' where id=9; -update noar ti set b1='1R5K1GNYARBRPEWQSU5' where id=9; -update noar tt set b2='13YB' where id=9; -update noar ti set b2='13YB' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 mediumblob null, -b1 tinyblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='126ME164I4' where id=1; -update noar ti set b0='126ME164I4' where id=1; -update noar tt set b1='5NI66P9XPXF0LMIPFBMO5OA5X1PF6SFW' where id=1; -update noar ti set b1='5NI66P9XPXF0LMIPFBMO5OA5X1PF6SFW' where id=1; -update noar tt set b2='8YF8TEGHBTFDVJEIKTWARSDFGAW7REVD' where id=1; -update noar ti set b2='8YF8TEGHBTFDVJEIKTWARSDFGAW7REVD' where id=1; -update noar tt set b0='SBSQERN72IRK8MD4D58UDJK7IMHQ' where id=2; -update noar ti set b0='SBSQERN72IRK8MD4D58UDJK7IMHQ' where id=2; -update noar tt set b1='B3BXCV3T' where id=2; -update noar ti set b1='B3BXCV3T' where id=2; -update noar tt set b2='IYCJVFA32U57A9JS1M8EY3YF0V7K' where id=2; -update noar ti set b2='IYCJVFA32U57A9JS1M8EY3YF0V7K' where id=2; -update noar tt set b0='VHLMO42D04HF7LDU54BHCYNHUG2ASE' where id=3; -update noar ti set b0='VHLMO42D04HF7LDU54BHCYNHUG2ASE' where id=3; -update noar tt set b1='USJ' where id=3; -update noar ti set b1='USJ' where id=3; -update noar tt set b2='EDI2X7Y2P33G1LEQLCQDFAJ2WFR3Z' where id=3; -update noar ti set b2='EDI2X7Y2P33G1LEQLCQDFAJ2WFR3Z' where id=3; -update noar tt set b0='B75PU0T58A30P91UMPPBEM6G3LD7' where id=4; -update noar ti set b0='B75PU0T58A30P91UMPPBEM6G3LD7' where id=4; -update noar tt set b1='4P4JMLBO' where id=4; -update noar ti set b1='4P4JMLBO' where id=4; -update noar tt set b2='T4JFWGIP21' where id=4; -update noar ti set b2='T4JFWGIP21' where id=4; -update noar tt set b0='E4FIGD9SAOF5RBU' where id=5; -update noar ti set b0='E4FIGD9SAOF5RBU' where id=5; -update noar tt set b1='Y7N4' where id=5; -update noar ti set b1='Y7N4' where id=5; -update noar tt set b2='TBT41O8HP1VJNRSL3' where id=5; -update noar ti set b2='TBT41O8HP1VJNRSL3' where id=5; -update noar tt set b0='F3' where id=6; -update noar ti set b0='F3' where id=6; -update noar tt set b1='WCJWOWHR3IEUD3HCL5FG2' where id=6; -update noar ti set b1='WCJWOWHR3IEUD3HCL5FG2' where id=6; -update noar tt set b2='MJVUIUQ3Y' where id=6; -update noar ti set b2='MJVUIUQ3Y' where id=6; -update noar tt set b0='CVJQTXFGZI97QJ9IVOM3EXYO18J3VNFP' where id=7; -update noar ti set b0='CVJQTXFGZI97QJ9IVOM3EXYO18J3VNFP' where id=7; -update noar tt set b1='LGV1H1P3SVY732SYFQW8FG1PK' where id=7; -update noar ti set b1='LGV1H1P3SVY732SYFQW8FG1PK' where id=7; -update noar tt set b2='3UVVSSE4ZFWIJ' where id=7; -update noar ti set b2='3UVVSSE4ZFWIJ' where id=7; -update noar tt set b0='ARSKK4U17TCPVXJVK1HBUJ3RY37AQ6JM' where id=8; -update noar ti set b0='ARSKK4U17TCPVXJVK1HBUJ3RY37AQ6JM' where id=8; -update noar tt set b1='JTAG1CNAU9T86A04D' where id=8; -update noar ti set b1='JTAG1CNAU9T86A04D' where id=8; -update noar tt set b2='JF1ELTCLJIGLHGX0TP1' where id=8; -update noar ti set b2='JF1ELTCLJIGLHGX0TP1' where id=8; -update noar tt set b0='MUWM8RW' where id=9; -update noar ti set b0='MUWM8RW' where id=9; -update noar tt set b1='R6I8D0F4O58R1S52QZ' where id=9; -update noar ti set b1='R6I8D0F4O58R1S52QZ' where id=9; -update noar tt set b2='BDFN2OAM3MV7XUSM0UBGT9' where id=9; -update noar ti set b2='BDFN2OAM3MV7XUSM0UBGT9' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 mediumblob not null, -b1 tinyblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='TOQXPL0YQ84X8FISSQD3GP6G91D6WKL' where id=1; -update noar ti set b0='TOQXPL0YQ84X8FISSQD3GP6G91D6WKL' where id=1; -update noar tt set b1='XMJLU8FO5KU6CD243EU1KD4Z8H2C7V4L' where id=1; -update noar ti set b1='XMJLU8FO5KU6CD243EU1KD4Z8H2C7V4L' where id=1; -update noar tt set b2='8MS82E' where id=1; -update noar ti set b2='8MS82E' where id=1; -update noar tt set b0='J8UF5IWND19R10PSELGPVDJ6ENB' where id=2; -update noar ti set b0='J8UF5IWND19R10PSELGPVDJ6ENB' where id=2; -update noar tt set b1='AWS8T6V6HBG6FVJNFO66QEBT' where id=2; -update noar ti set b1='AWS8T6V6HBG6FVJNFO66QEBT' where id=2; -update noar tt set b2='SY2IHCUK6XSDN1TW' where id=2; -update noar ti set b2='SY2IHCUK6XSDN1TW' where id=2; -update noar tt set b0='1W7U5M66BHCAL6F' where id=3; -update noar ti set b0='1W7U5M66BHCAL6F' where id=3; -update noar tt set b1='UG102ERN' where id=3; -update noar ti set b1='UG102ERN' where id=3; -update noar tt set b2='COWHSG43NDFYMU2NHJC9NZJG' where id=3; -update noar ti set b2='COWHSG43NDFYMU2NHJC9NZJG' where id=3; -update noar tt set b0='067CYMTKJ0Y92LJ80B7V48F' where id=4; -update noar ti set b0='067CYMTKJ0Y92LJ80B7V48F' where id=4; -update noar tt set b1='RO8ZISHJ6E7FN3UZ0MJW' where id=4; -update noar ti set b1='RO8ZISHJ6E7FN3UZ0MJW' where id=4; -update noar tt set b2='KHCXPGTELK560WL7KR81RCGQDVXY0PMZ' where id=4; -update noar ti set b2='KHCXPGTELK560WL7KR81RCGQDVXY0PMZ' where id=4; -update noar tt set b0='BZBW1Q' where id=5; -update noar ti set b0='BZBW1Q' where id=5; -update noar tt set b1='08X74ERR6FHVR9QP2YA4' where id=5; -update noar ti set b1='08X74ERR6FHVR9QP2YA4' where id=5; -update noar tt set b2='YE2G0D98A84X56DIRSMS5M0EVJ3M' where id=5; -update noar ti set b2='YE2G0D98A84X56DIRSMS5M0EVJ3M' where id=5; -update noar tt set b0='IL2HM8MBPP' where id=6; -update noar ti set b0='IL2HM8MBPP' where id=6; -update noar tt set b1='6O5VGK0NU4ML5O0SU6GIRFK9WS' where id=6; -update noar ti set b1='6O5VGK0NU4ML5O0SU6GIRFK9WS' where id=6; -update noar tt set b2='Y3BGTN41TEZQM0W34639M' where id=6; -update noar ti set b2='Y3BGTN41TEZQM0W34639M' where id=6; -update noar tt set b0='O0' where id=7; -update noar ti set b0='O0' where id=7; -update noar tt set b1='PVL9B5P9995TI73QC5LEHE2ZAUTVD2' where id=7; -update noar ti set b1='PVL9B5P9995TI73QC5LEHE2ZAUTVD2' where id=7; -update noar tt set b2='UES' where id=7; -update noar ti set b2='UES' where id=7; -update noar tt set b0='6NGK3R3Y4M3WM3O' where id=8; -update noar ti set b0='6NGK3R3Y4M3WM3O' where id=8; -update noar tt set b1='9ASX73COHOYHL1ZVLSWQ4IBE1WZ2JON' where id=8; -update noar ti set b1='9ASX73COHOYHL1ZVLSWQ4IBE1WZ2JON' where id=8; -update noar tt set b2='RLSQUW1J3DKRJWE7Q' where id=8; -update noar ti set b2='RLSQUW1J3DKRJWE7Q' where id=8; -update noar tt set b0='RGFVE460GQ' where id=9; -update noar ti set b0='RGFVE460GQ' where id=9; -update noar tt set b1='8RST9AV224' where id=9; -update noar ti set b1='8RST9AV224' where id=9; -update noar tt set b2='WIPY25E3TV' where id=9; -update noar ti set b2='WIPY25E3TV' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 mediumblob null, -b1 tinyblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='O8U' where id=1; -update noar ti set b0='O8U' where id=1; -update noar tt set b1='2RDLA1ZYPNBKZ9U2TP' where id=1; -update noar ti set b1='2RDLA1ZYPNBKZ9U2TP' where id=1; -update noar tt set b2='TT' where id=1; -update noar ti set b2='TT' where id=1; -update noar tt set b0='V7X' where id=2; -update noar ti set b0='V7X' where id=2; -update noar tt set b1='3KFLKNJ6KCZXH0' where id=2; -update noar ti set b1='3KFLKNJ6KCZXH0' where id=2; -update noar tt set b2='05TUBMQPNJXR6SRT4' where id=2; -update noar ti set b2='05TUBMQPNJXR6SRT4' where id=2; -update noar tt set b0='P4DV6' where id=3; -update noar ti set b0='P4DV6' where id=3; -update noar tt set b1='KGNRCMY21J2SI3VOUUS54S8AI' where id=3; -update noar ti set b1='KGNRCMY21J2SI3VOUUS54S8AI' where id=3; -update noar tt set b2='FV39CR' where id=3; -update noar ti set b2='FV39CR' where id=3; -update noar tt set b0='7' where id=4; -update noar ti set b0='7' where id=4; -update noar tt set b1='9TVGWWTKV3V25IR' where id=4; -update noar ti set b1='9TVGWWTKV3V25IR' where id=4; -update noar tt set b2='MZZ7M612OWBWZF931G' where id=4; -update noar ti set b2='MZZ7M612OWBWZF931G' where id=4; -update noar tt set b0='X0' where id=5; -update noar ti set b0='X0' where id=5; -update noar tt set b1='8CHXGXO1LC4312NU' where id=5; -update noar ti set b1='8CHXGXO1LC4312NU' where id=5; -update noar tt set b2='SAB' where id=5; -update noar ti set b2='SAB' where id=5; -update noar tt set b0='5SSOUP01IVG7QUI134XMH8PQLKX42HRX' where id=6; -update noar ti set b0='5SSOUP01IVG7QUI134XMH8PQLKX42HRX' where id=6; -update noar tt set b1='0I7NQP6ZL9VU414QT2PMSOIWEH7' where id=6; -update noar ti set b1='0I7NQP6ZL9VU414QT2PMSOIWEH7' where id=6; -update noar tt set b2='5RT2Y' where id=6; -update noar ti set b2='5RT2Y' where id=6; -update noar tt set b0='BMYG6OOGJHIFI2W0HUEWJI60ER' where id=7; -update noar ti set b0='BMYG6OOGJHIFI2W0HUEWJI60ER' where id=7; -update noar tt set b1='CJ7TRWQFN4OKMUU0QF23Q' where id=7; -update noar ti set b1='CJ7TRWQFN4OKMUU0QF23Q' where id=7; -update noar tt set b2='ILZII8X3UDMDN4HBMYNVC76M4TEV96' where id=7; -update noar ti set b2='ILZII8X3UDMDN4HBMYNVC76M4TEV96' where id=7; -update noar tt set b0='TQERA9KMBRN08NS3IEBHB' where id=8; -update noar ti set b0='TQERA9KMBRN08NS3IEBHB' where id=8; -update noar tt set b1='5GDI4H' where id=8; -update noar ti set b1='5GDI4H' where id=8; -update noar tt set b2='614OMCY3CUIEIMIZOLBTU' where id=8; -update noar ti set b2='614OMCY3CUIEIMIZOLBTU' where id=8; -update noar tt set b0='JM1TLRQZY8TCS1' where id=9; -update noar ti set b0='JM1TLRQZY8TCS1' where id=9; -update noar tt set b1='1FPOMFV0XC' where id=9; -update noar ti set b1='1FPOMFV0XC' where id=9; -update noar tt set b2='RK2TXCE90OYM0N0QYHIC' where id=9; -update noar ti set b2='RK2TXCE90OYM0N0QYHIC' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 mediumblob not null, -b1 tinyblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='3NO3QE8SVFDP7USX4Z5Y0NT2PI9M3X' where id=1; -update noar ti set b0='3NO3QE8SVFDP7USX4Z5Y0NT2PI9M3X' where id=1; -update noar tt set b1='MZDRHIQHVE1U' where id=1; -update noar ti set b1='MZDRHIQHVE1U' where id=1; -update noar tt set b2='AE866SA8O' where id=1; -update noar ti set b2='AE866SA8O' where id=1; -update noar tt set b0='3MJ97O5TMFUM9R7RGG97PLKOIY1EU4L' where id=2; -update noar ti set b0='3MJ97O5TMFUM9R7RGG97PLKOIY1EU4L' where id=2; -update noar tt set b1='N3YX' where id=2; -update noar ti set b1='N3YX' where id=2; -update noar tt set b2='VGJPIXFSRYGC9XESK5FFMSODQJJUAJ' where id=2; -update noar ti set b2='VGJPIXFSRYGC9XESK5FFMSODQJJUAJ' where id=2; -update noar tt set b0='U0DZTNTHT4KMB' where id=3; -update noar ti set b0='U0DZTNTHT4KMB' where id=3; -update noar tt set b1='BTBNSJ0Q02XJ7UIW' where id=3; -update noar ti set b1='BTBNSJ0Q02XJ7UIW' where id=3; -update noar tt set b2='BGW9PLDYAF74HXISD5XZV8E' where id=3; -update noar ti set b2='BGW9PLDYAF74HXISD5XZV8E' where id=3; -update noar tt set b0='TYF9WD0BV3392SLDR6C9R65ZBB35NP' where id=4; -update noar ti set b0='TYF9WD0BV3392SLDR6C9R65ZBB35NP' where id=4; -update noar tt set b1='IEOVT9T8A2LD1RKOL800XK' where id=4; -update noar ti set b1='IEOVT9T8A2LD1RKOL800XK' where id=4; -update noar tt set b2='45MQPXAQ3MK' where id=4; -update noar ti set b2='45MQPXAQ3MK' where id=4; -update noar tt set b0='UO9TMG2FPUXKO7VQAS0RVUT0C44' where id=5; -update noar ti set b0='UO9TMG2FPUXKO7VQAS0RVUT0C44' where id=5; -update noar tt set b1='HG6MW3CZMT076DKQ63MP6U' where id=5; -update noar ti set b1='HG6MW3CZMT076DKQ63MP6U' where id=5; -update noar tt set b2='ACOBS79' where id=5; -update noar ti set b2='ACOBS79' where id=5; -update noar tt set b0='N9UBNU31' where id=6; -update noar ti set b0='N9UBNU31' where id=6; -update noar tt set b1='QGQ5JJOP' where id=6; -update noar ti set b1='QGQ5JJOP' where id=6; -update noar tt set b2='3ORB5GAHWR45Q3F0G03IVPKU9S55E' where id=6; -update noar ti set b2='3ORB5GAHWR45Q3F0G03IVPKU9S55E' where id=6; -update noar tt set b0='ZG3LA4' where id=7; -update noar ti set b0='ZG3LA4' where id=7; -update noar tt set b1='RJEM7X6SO79WNCZ1EJ7YG' where id=7; -update noar ti set b1='RJEM7X6SO79WNCZ1EJ7YG' where id=7; -update noar tt set b2='RZQ2TFUB6I9S1ND9GE97LHW8TI4VG3' where id=7; -update noar ti set b2='RZQ2TFUB6I9S1ND9GE97LHW8TI4VG3' where id=7; -update noar tt set b0='M8CFRB67TF6VUIAZGQLA96Q' where id=8; -update noar ti set b0='M8CFRB67TF6VUIAZGQLA96Q' where id=8; -update noar tt set b1='CE39QBK72IY3A9R83BUGODRZ8T843V' where id=8; -update noar ti set b1='CE39QBK72IY3A9R83BUGODRZ8T843V' where id=8; -update noar tt set b2='3XL5CFCM' where id=8; -update noar ti set b2='3XL5CFCM' where id=8; -update noar tt set b0='ZLBDLDB0LTRNVUT1HMT41B09' where id=9; -update noar ti set b0='ZLBDLDB0LTRNVUT1HMT41B09' where id=9; -update noar tt set b1='LZUWC4R2DLQSCA7DA7G17WL' where id=9; -update noar ti set b1='LZUWC4R2DLQSCA7DA7G17WL' where id=9; -update noar tt set b2='90T1TPKPL' where id=9; -update noar ti set b2='90T1TPKPL' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 mediumblob null, -b1 tinyblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='LZT3B24BZJ58MTFPI0AY15ND7' where id=1; -update noar ti set b0='LZT3B24BZJ58MTFPI0AY15ND7' where id=1; -update noar tt set b1='C' where id=1; -update noar ti set b1='C' where id=1; -update noar tt set b2='H' where id=1; -update noar ti set b2='H' where id=1; -update noar tt set b0='PL9HXR38V96OMJLOCE' where id=2; -update noar ti set b0='PL9HXR38V96OMJLOCE' where id=2; -update noar tt set b1='64TYG5GXTSBSQL0U5' where id=2; -update noar ti set b1='64TYG5GXTSBSQL0U5' where id=2; -update noar tt set b2='5EXFNEJWFK1EW6O24BAUUQXTKHLIR' where id=2; -update noar ti set b2='5EXFNEJWFK1EW6O24BAUUQXTKHLIR' where id=2; -update noar tt set b0='JLAT3P' where id=3; -update noar ti set b0='JLAT3P' where id=3; -update noar tt set b1='CZZFILH6V2QJ6KQGGB4LZNQ' where id=3; -update noar ti set b1='CZZFILH6V2QJ6KQGGB4LZNQ' where id=3; -update noar tt set b2='T6GT6GX054H6KTZO' where id=3; -update noar ti set b2='T6GT6GX054H6KTZO' where id=3; -update noar tt set b0='KCLTZS' where id=4; -update noar ti set b0='KCLTZS' where id=4; -update noar tt set b1='ETMHSQZ89W3A67GEUFU9GOEZJ751YID' where id=4; -update noar ti set b1='ETMHSQZ89W3A67GEUFU9GOEZJ751YID' where id=4; -update noar tt set b2='ZUPQR2C3' where id=4; -update noar ti set b2='ZUPQR2C3' where id=4; -update noar tt set b0='P6Z7HZCAWM8TT4MR' where id=5; -update noar ti set b0='P6Z7HZCAWM8TT4MR' where id=5; -update noar tt set b1='9OZI2KZV0BJXPNDP8D5' where id=5; -update noar ti set b1='9OZI2KZV0BJXPNDP8D5' where id=5; -update noar tt set b2='SJB4SAACJX0033SGL5FS7Z4OW' where id=5; -update noar ti set b2='SJB4SAACJX0033SGL5FS7Z4OW' where id=5; -update noar tt set b0='Z5HY3UTTJM4SZJI4P7B' where id=6; -update noar ti set b0='Z5HY3UTTJM4SZJI4P7B' where id=6; -update noar tt set b1='SR3XY' where id=6; -update noar ti set b1='SR3XY' where id=6; -update noar tt set b2='7H2Y' where id=6; -update noar ti set b2='7H2Y' where id=6; -update noar tt set b0='9S0YRAE9BRVAEO2P62PJL1TNNPZ' where id=7; -update noar ti set b0='9S0YRAE9BRVAEO2P62PJL1TNNPZ' where id=7; -update noar tt set b1='TFF9CRW0R3UUGEFKMMSQDKA3' where id=7; -update noar ti set b1='TFF9CRW0R3UUGEFKMMSQDKA3' where id=7; -update noar tt set b2='KSSI31U8XGN' where id=7; -update noar ti set b2='KSSI31U8XGN' where id=7; -update noar tt set b0='GZODJABN6ERHMG' where id=8; -update noar ti set b0='GZODJABN6ERHMG' where id=8; -update noar tt set b1='2LFOYJUNKYNWA' where id=8; -update noar ti set b1='2LFOYJUNKYNWA' where id=8; -update noar tt set b2='JM2WLM7FFHNER' where id=8; -update noar ti set b2='JM2WLM7FFHNER' where id=8; -update noar tt set b0='Y' where id=9; -update noar ti set b0='Y' where id=9; -update noar tt set b1='WTRPBE2GYCSZNGSWFHXOLDB6YEMX1K' where id=9; -update noar ti set b1='WTRPBE2GYCSZNGSWFHXOLDB6YEMX1K' where id=9; -update noar tt set b2='F0Q0U4GUEJWOY4YPGLFZ8NPEUAZTO3O' where id=9; -update noar ti set b2='F0Q0U4GUEJWOY4YPGLFZ8NPEUAZTO3O' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 mediumblob not null, -b1 tinyblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='A05SRQJGZ7' where id=1; -update noar ti set b0='A05SRQJGZ7' where id=1; -update noar tt set b1='V01D0Q6H28EVEIHQN1W6J' where id=1; -update noar ti set b1='V01D0Q6H28EVEIHQN1W6J' where id=1; -update noar tt set b2='2CUKXE4TXHAERP8PCR3OOLFGWQ5' where id=1; -update noar ti set b2='2CUKXE4TXHAERP8PCR3OOLFGWQ5' where id=1; -update noar tt set b0='NHD3V11P0FFD2UY6L21XZ2EMEYJIXKL5' where id=2; -update noar ti set b0='NHD3V11P0FFD2UY6L21XZ2EMEYJIXKL5' where id=2; -update noar tt set b1='5NJQ8QVAPV2TVK' where id=2; -update noar ti set b1='5NJQ8QVAPV2TVK' where id=2; -update noar tt set b2='VM4X3FQVC4' where id=2; -update noar ti set b2='VM4X3FQVC4' where id=2; -update noar tt set b0='DJ' where id=3; -update noar ti set b0='DJ' where id=3; -update noar tt set b1='NESZVJJD4B1ZM9O4E0VXOE' where id=3; -update noar ti set b1='NESZVJJD4B1ZM9O4E0VXOE' where id=3; -update noar tt set b2='3YJGJN' where id=3; -update noar ti set b2='3YJGJN' where id=3; -update noar tt set b0='RQ35TNJS' where id=4; -update noar ti set b0='RQ35TNJS' where id=4; -update noar tt set b1='5MM41JVC6R55EQE08PCS92RSQ' where id=4; -update noar ti set b1='5MM41JVC6R55EQE08PCS92RSQ' where id=4; -update noar tt set b2='KVCYVFNB43W' where id=4; -update noar ti set b2='KVCYVFNB43W' where id=4; -update noar tt set b0='3XZOC52CW' where id=5; -update noar ti set b0='3XZOC52CW' where id=5; -update noar tt set b1='0QJCD82UR6RIYAJLD1LDN1F1O' where id=5; -update noar ti set b1='0QJCD82UR6RIYAJLD1LDN1F1O' where id=5; -update noar tt set b2='E1KFF5C5EHAD1G6C6GTM9W9M5FT36D' where id=5; -update noar ti set b2='E1KFF5C5EHAD1G6C6GTM9W9M5FT36D' where id=5; -update noar tt set b0='HMK9NUY' where id=6; -update noar ti set b0='HMK9NUY' where id=6; -update noar tt set b1='G5D5RADDHGMMHWWBD' where id=6; -update noar ti set b1='G5D5RADDHGMMHWWBD' where id=6; -update noar tt set b2='FMMC3WMBIZSY' where id=6; -update noar ti set b2='FMMC3WMBIZSY' where id=6; -update noar tt set b0='PAQMG3JHRTOHM' where id=7; -update noar ti set b0='PAQMG3JHRTOHM' where id=7; -update noar tt set b1='HIUOWXIA1JV' where id=7; -update noar ti set b1='HIUOWXIA1JV' where id=7; -update noar tt set b2='QWG53YIKUC0G2WJI0L22SGGUI3P5' where id=7; -update noar ti set b2='QWG53YIKUC0G2WJI0L22SGGUI3P5' where id=7; -update noar tt set b0='L8ZNTB2Y' where id=8; -update noar ti set b0='L8ZNTB2Y' where id=8; -update noar tt set b1='Z779' where id=8; -update noar ti set b1='Z779' where id=8; -update noar tt set b2='JU43J7HCRRF' where id=8; -update noar ti set b2='JU43J7HCRRF' where id=8; -update noar tt set b0='14BF' where id=9; -update noar ti set b0='14BF' where id=9; -update noar tt set b1='LT47822OH70XCY5B1CYE3WGJZ168R0' where id=9; -update noar ti set b1='LT47822OH70XCY5B1CYE3WGJZ168R0' where id=9; -update noar tt set b2='FAEQNRP4HL2WW' where id=9; -update noar ti set b2='FAEQNRP4HL2WW' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 mediumblob null, -b1 tinyblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='AMECKXNV9YV8MTFOXZRYRJ0LCRHSDERU' where id=1; -update noar ti set b0='AMECKXNV9YV8MTFOXZRYRJ0LCRHSDERU' where id=1; -update noar tt set b1='HATOGF668ZZ2GO9YY8VGFH2MQTKTS1W3' where id=1; -update noar ti set b1='HATOGF668ZZ2GO9YY8VGFH2MQTKTS1W3' where id=1; -update noar tt set b2='VAIP2NN40' where id=1; -update noar ti set b2='VAIP2NN40' where id=1; -update noar tt set b0='7SS6BBCLKC5HGH7X406GXH0BCJWH' where id=2; -update noar ti set b0='7SS6BBCLKC5HGH7X406GXH0BCJWH' where id=2; -update noar tt set b1='EXY0XM' where id=2; -update noar ti set b1='EXY0XM' where id=2; -update noar tt set b2='HPY9F7NHPJJS8LA8V5' where id=2; -update noar ti set b2='HPY9F7NHPJJS8LA8V5' where id=2; -update noar tt set b0='9972H5GWJ0SHHLUHL5D06QE3VN' where id=3; -update noar ti set b0='9972H5GWJ0SHHLUHL5D06QE3VN' where id=3; -update noar tt set b1='7FJON' where id=3; -update noar ti set b1='7FJON' where id=3; -update noar tt set b2='CXWT5EMH0ADR8TM3IP5MP4L1N90G5U' where id=3; -update noar ti set b2='CXWT5EMH0ADR8TM3IP5MP4L1N90G5U' where id=3; -update noar tt set b0='7JFY99S8Q7SM5BWUB5MMFUSI10IVMD' where id=4; -update noar ti set b0='7JFY99S8Q7SM5BWUB5MMFUSI10IVMD' where id=4; -update noar tt set b1='10EZS17XQVRZ' where id=4; -update noar ti set b1='10EZS17XQVRZ' where id=4; -update noar tt set b2='8VQLS0BOACK9ZHM9I' where id=4; -update noar ti set b2='8VQLS0BOACK9ZHM9I' where id=4; -update noar tt set b0='D' where id=5; -update noar ti set b0='D' where id=5; -update noar tt set b1='JUYCRU4LNJ4SQTMB' where id=5; -update noar ti set b1='JUYCRU4LNJ4SQTMB' where id=5; -update noar tt set b2='VSTKFPQU5U06H2EUOPZI29TER4OAF' where id=5; -update noar ti set b2='VSTKFPQU5U06H2EUOPZI29TER4OAF' where id=5; -update noar tt set b0='VZSIYE' where id=6; -update noar ti set b0='VZSIYE' where id=6; -update noar tt set b1='LT' where id=6; -update noar ti set b1='LT' where id=6; -update noar tt set b2='ZCH2UWLV0HL8VHBZAS2FQMYV61' where id=6; -update noar ti set b2='ZCH2UWLV0HL8VHBZAS2FQMYV61' where id=6; -update noar tt set b0='4HR2T3HCBO9LAYMI2BFUYJ' where id=7; -update noar ti set b0='4HR2T3HCBO9LAYMI2BFUYJ' where id=7; -update noar tt set b1='W4NGL9JPIQPV70VYQYFE0T9W' where id=7; -update noar ti set b1='W4NGL9JPIQPV70VYQYFE0T9W' where id=7; -update noar tt set b2='V2011CWV9PD0Z' where id=7; -update noar ti set b2='V2011CWV9PD0Z' where id=7; -update noar tt set b0='VESMIIJH65VN' where id=8; -update noar ti set b0='VESMIIJH65VN' where id=8; -update noar tt set b1='EWJ' where id=8; -update noar ti set b1='EWJ' where id=8; -update noar tt set b2='NHNQMWJYDNOCDIJ2Y9I4LG05THXX' where id=8; -update noar ti set b2='NHNQMWJYDNOCDIJ2Y9I4LG05THXX' where id=8; -update noar tt set b0='BJ6IVVLXARD45JHT' where id=9; -update noar ti set b0='BJ6IVVLXARD45JHT' where id=9; -update noar tt set b1='XFOF22HUDV3ZR8SX9' where id=9; -update noar ti set b1='XFOF22HUDV3ZR8SX9' where id=9; -update noar tt set b2='QZ77HKNP39KE7UVQYM1130J9' where id=9; -update noar ti set b2='QZ77HKNP39KE7UVQYM1130J9' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 mediumblob not null, -b1 tinyblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='U2T' where id=1; -update noar ti set b0='U2T' where id=1; -update noar tt set b1='903ENKDKW1' where id=1; -update noar ti set b1='903ENKDKW1' where id=1; -update noar tt set b2='6M2K5BL4YI1SKN' where id=1; -update noar ti set b2='6M2K5BL4YI1SKN' where id=1; -update noar tt set b0='FIC0G5YWH' where id=2; -update noar ti set b0='FIC0G5YWH' where id=2; -update noar tt set b1='135P99OLVSS1ZU55' where id=2; -update noar ti set b1='135P99OLVSS1ZU55' where id=2; -update noar tt set b2='8NQSORKUCSYNZNT70SHQA9ZYEKHG3' where id=2; -update noar ti set b2='8NQSORKUCSYNZNT70SHQA9ZYEKHG3' where id=2; -update noar tt set b0='HNB4TYD1GJIM3YPFVVEGHM9X8RQ3DXF' where id=3; -update noar ti set b0='HNB4TYD1GJIM3YPFVVEGHM9X8RQ3DXF' where id=3; -update noar tt set b1='AA1XX' where id=3; -update noar ti set b1='AA1XX' where id=3; -update noar tt set b2='CSBECP1H4RBYP' where id=3; -update noar ti set b2='CSBECP1H4RBYP' where id=3; -update noar tt set b0='E31BK1N0M' where id=4; -update noar ti set b0='E31BK1N0M' where id=4; -update noar tt set b1='GI8' where id=4; -update noar ti set b1='GI8' where id=4; -update noar tt set b2='PXX' where id=4; -update noar ti set b2='PXX' where id=4; -update noar tt set b0='0ULS' where id=5; -update noar ti set b0='0ULS' where id=5; -update noar tt set b1='CDC9' where id=5; -update noar ti set b1='CDC9' where id=5; -update noar tt set b2='NP57DQX' where id=5; -update noar ti set b2='NP57DQX' where id=5; -update noar tt set b0='ST2S4FTE8UMSK05NJOEP3TC' where id=6; -update noar ti set b0='ST2S4FTE8UMSK05NJOEP3TC' where id=6; -update noar tt set b1='BHMOD23PJERY6U' where id=6; -update noar ti set b1='BHMOD23PJERY6U' where id=6; -update noar tt set b2='J8B0V34HODM0H48O0DDW6J6FS9CDM' where id=6; -update noar ti set b2='J8B0V34HODM0H48O0DDW6J6FS9CDM' where id=6; -update noar tt set b0='0YIOYTP6GAAHQXPUNFL5D8FNMI' where id=7; -update noar ti set b0='0YIOYTP6GAAHQXPUNFL5D8FNMI' where id=7; -update noar tt set b1='9XBT9BHAY1MXWT2OK' where id=7; -update noar ti set b1='9XBT9BHAY1MXWT2OK' where id=7; -update noar tt set b2='AM' where id=7; -update noar ti set b2='AM' where id=7; -update noar tt set b0='KMM0M9' where id=8; -update noar ti set b0='KMM0M9' where id=8; -update noar tt set b1='EQN5AKY0CN75AZGCRHM4I8DL7ILLROW' where id=8; -update noar ti set b1='EQN5AKY0CN75AZGCRHM4I8DL7ILLROW' where id=8; -update noar tt set b2='AA0EWJ12' where id=8; -update noar ti set b2='AA0EWJ12' where id=8; -update noar tt set b0='QMPP9ZOZR4XGEWGVRZ5E6OTFFMBD' where id=9; -update noar ti set b0='QMPP9ZOZR4XGEWGVRZ5E6OTFFMBD' where id=9; -update noar tt set b1='GK9R9BWB6H1EKA2' where id=9; -update noar ti set b1='GK9R9BWB6H1EKA2' where id=9; -update noar tt set b2='4LV3Q2F79VOD02IU3393PJF7OITV2AUU' where id=9; -update noar ti set b2='4LV3Q2F79VOD02IU3393PJF7OITV2AUU' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 mediumblob null, -b1 tinyblob null, -b2 text null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='AA5HG6QGVVMLY53N966G96TI' where id=1; -update noar ti set b0='AA5HG6QGVVMLY53N966G96TI' where id=1; -update noar tt set b1='RG' where id=1; -update noar ti set b1='RG' where id=1; -update noar tt set b2='FCMJM' where id=1; -update noar ti set b2='FCMJM' where id=1; -update noar tt set b0='HUFIUZSQVH00107P0ZP652GD' where id=2; -update noar ti set b0='HUFIUZSQVH00107P0ZP652GD' where id=2; -update noar tt set b1='SDY3WEXZRP46DQPJG0GJB7A6T' where id=2; -update noar ti set b1='SDY3WEXZRP46DQPJG0GJB7A6T' where id=2; -update noar tt set b2='ZEEAA' where id=2; -update noar ti set b2='ZEEAA' where id=2; -update noar tt set b0='B4T419WE0' where id=3; -update noar ti set b0='B4T419WE0' where id=3; -update noar tt set b1='LWNTY2FYA7Q6OCDPIMVQV3Q' where id=3; -update noar ti set b1='LWNTY2FYA7Q6OCDPIMVQV3Q' where id=3; -update noar tt set b2='0NG74UWP9589JI' where id=3; -update noar ti set b2='0NG74UWP9589JI' where id=3; -update noar tt set b0='RO1KN9C4O9X0EGJG9F5API' where id=4; -update noar ti set b0='RO1KN9C4O9X0EGJG9F5API' where id=4; -update noar tt set b1='VSI5TA5PCAJ5FB' where id=4; -update noar ti set b1='VSI5TA5PCAJ5FB' where id=4; -update noar tt set b2='4VV276B51YDWQTA52JWTTGTMM5DH' where id=4; -update noar ti set b2='4VV276B51YDWQTA52JWTTGTMM5DH' where id=4; -update noar tt set b0='8L42EF8W1ITHIBI' where id=5; -update noar ti set b0='8L42EF8W1ITHIBI' where id=5; -update noar tt set b1='B4FFOD8XJ87EZ0MOCVGE1A' where id=5; -update noar ti set b1='B4FFOD8XJ87EZ0MOCVGE1A' where id=5; -update noar tt set b2='Q5Z' where id=5; -update noar ti set b2='Q5Z' where id=5; -update noar tt set b0='28DVY1MKS2IWSSVT8J' where id=6; -update noar ti set b0='28DVY1MKS2IWSSVT8J' where id=6; -update noar tt set b1='LD' where id=6; -update noar ti set b1='LD' where id=6; -update noar tt set b2='PAVN' where id=6; -update noar ti set b2='PAVN' where id=6; -update noar tt set b0='3FB' where id=7; -update noar ti set b0='3FB' where id=7; -update noar tt set b1='MXJ32CKR9F85QOEQW7QKK87' where id=7; -update noar ti set b1='MXJ32CKR9F85QOEQW7QKK87' where id=7; -update noar tt set b2='1B8M8R7XGPDKEXRLN' where id=7; -update noar ti set b2='1B8M8R7XGPDKEXRLN' where id=7; -update noar tt set b0='KFMHZJIDOOS' where id=8; -update noar ti set b0='KFMHZJIDOOS' where id=8; -update noar tt set b1='N81W91SLJE98SMGGD' where id=8; -update noar ti set b1='N81W91SLJE98SMGGD' where id=8; -update noar tt set b2='YRARYP' where id=8; -update noar ti set b2='YRARYP' where id=8; -update noar tt set b0='JJPJSULAEU6' where id=9; -update noar ti set b0='JJPJSULAEU6' where id=9; -update noar tt set b1='JZI' where id=9; -update noar ti set b1='JZI' where id=9; -update noar tt set b2='FAZS8L0NNL09Y0OXSLSFQHXGCR' where id=9; -update noar ti set b2='FAZS8L0NNL09Y0OXSLSFQHXGCR' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 mediumblob not null, -b1 tinyblob not null, -b2 text not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='YMYCE8P8GMI7' where id=1; -update noar ti set b0='YMYCE8P8GMI7' where id=1; -update noar tt set b1='UZTBJ4THRVTSY20Q7Q2ZO8FYOA' where id=1; -update noar ti set b1='UZTBJ4THRVTSY20Q7Q2ZO8FYOA' where id=1; -update noar tt set b2='AJGXMDZ7X8' where id=1; -update noar ti set b2='AJGXMDZ7X8' where id=1; -update noar tt set b0='Y8O5HW3L4KBNEINC7M4GE7LZI' where id=2; -update noar ti set b0='Y8O5HW3L4KBNEINC7M4GE7LZI' where id=2; -update noar tt set b1='X2ZTV5HOCD6SPLDNOQYGMEG' where id=2; -update noar ti set b1='X2ZTV5HOCD6SPLDNOQYGMEG' where id=2; -update noar tt set b2='8HH8H71W0558C58N6ST9QZQJ39J6NXMP' where id=2; -update noar ti set b2='8HH8H71W0558C58N6ST9QZQJ39J6NXMP' where id=2; -update noar tt set b0='TNFY7' where id=3; -update noar ti set b0='TNFY7' where id=3; -update noar tt set b1='JEAB54UV1ENN8S6F' where id=3; -update noar ti set b1='JEAB54UV1ENN8S6F' where id=3; -update noar tt set b2='4SRC5NPY2N6JS2VGSC5BD7' where id=3; -update noar ti set b2='4SRC5NPY2N6JS2VGSC5BD7' where id=3; -update noar tt set b0='5NLP436C0GTZJE3NO9462NV' where id=4; -update noar ti set b0='5NLP436C0GTZJE3NO9462NV' where id=4; -update noar tt set b1='2PPH2R' where id=4; -update noar ti set b1='2PPH2R' where id=4; -update noar tt set b2='FT8B55Q97K5F01FLQXN6IB5IHX' where id=4; -update noar ti set b2='FT8B55Q97K5F01FLQXN6IB5IHX' where id=4; -update noar tt set b0='68VIBY5PW8W143FHF3YG' where id=5; -update noar ti set b0='68VIBY5PW8W143FHF3YG' where id=5; -update noar tt set b1='UT' where id=5; -update noar ti set b1='UT' where id=5; -update noar tt set b2='K4RPOHHTSRDIGQYO753GWG72U' where id=5; -update noar ti set b2='K4RPOHHTSRDIGQYO753GWG72U' where id=5; -update noar tt set b0='MO7YS' where id=6; -update noar ti set b0='MO7YS' where id=6; -update noar tt set b1='MQQ2O46FB9LA' where id=6; -update noar ti set b1='MQQ2O46FB9LA' where id=6; -update noar tt set b2='7ROGCMX0C9WFU3CZS3FVZCFW' where id=6; -update noar ti set b2='7ROGCMX0C9WFU3CZS3FVZCFW' where id=6; -update noar tt set b0='2PFN9A7BA8D3U8JEW2' where id=7; -update noar ti set b0='2PFN9A7BA8D3U8JEW2' where id=7; -update noar tt set b1='R6L460429H8J7HKTAX' where id=7; -update noar ti set b1='R6L460429H8J7HKTAX' where id=7; -update noar tt set b2='KS95ZJOYHZ2757URU18' where id=7; -update noar ti set b2='KS95ZJOYHZ2757URU18' where id=7; -update noar tt set b0='SPDC5UL0ICY5WAAXEWEL3W9C0' where id=8; -update noar ti set b0='SPDC5UL0ICY5WAAXEWEL3W9C0' where id=8; -update noar tt set b1='DJS2KYQ9VLMP8HFP4IT427FM' where id=8; -update noar ti set b1='DJS2KYQ9VLMP8HFP4IT427FM' where id=8; -update noar tt set b2='35' where id=8; -update noar ti set b2='35' where id=8; -update noar tt set b0='RLYZGX4MUS4V7M4MLCVNHMWSGDDK9' where id=9; -update noar ti set b0='RLYZGX4MUS4V7M4MLCVNHMWSGDDK9' where id=9; -update noar tt set b1='H' where id=9; -update noar ti set b1='H' where id=9; -update noar tt set b2='NEH1YQIO2YJDPUSQ' where id=9; -update noar ti set b2='NEH1YQIO2YJDPUSQ' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 mediumblob null, -b1 blob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='VKPLK3N1ZIKT2H' where id=1; -update noar ti set b0='VKPLK3N1ZIKT2H' where id=1; -update noar tt set b1='LGT0YSN2PZLV1J6J8' where id=1; -update noar ti set b1='LGT0YSN2PZLV1J6J8' where id=1; -update noar tt set b2='7CSRRNGWYEVRH685AZQ98VU3U' where id=1; -update noar ti set b2='7CSRRNGWYEVRH685AZQ98VU3U' where id=1; -update noar tt set b0='LJVZZS65CV9L0LXT72I2O' where id=2; -update noar ti set b0='LJVZZS65CV9L0LXT72I2O' where id=2; -update noar tt set b1='PYFD8X2RUNJTGL78L' where id=2; -update noar ti set b1='PYFD8X2RUNJTGL78L' where id=2; -update noar tt set b2='HMNGSQ67GORBH8NYBOJTQNOLV0' where id=2; -update noar ti set b2='HMNGSQ67GORBH8NYBOJTQNOLV0' where id=2; -update noar tt set b0='QUQT1BMGCF7QD5RH3E2FDCYG2HTKE' where id=3; -update noar ti set b0='QUQT1BMGCF7QD5RH3E2FDCYG2HTKE' where id=3; -update noar tt set b1='RK7AK1N0S27WUR9V' where id=3; -update noar ti set b1='RK7AK1N0S27WUR9V' where id=3; -update noar tt set b2='3L' where id=3; -update noar ti set b2='3L' where id=3; -update noar tt set b0='JP4ZP7R9DG019H6S6DVUK9N9' where id=4; -update noar ti set b0='JP4ZP7R9DG019H6S6DVUK9N9' where id=4; -update noar tt set b1='6OK2GAJ85EXM5LQLNEU3' where id=4; -update noar ti set b1='6OK2GAJ85EXM5LQLNEU3' where id=4; -update noar tt set b2='2ML1QL1EQNBMTWE3VW6V9EZBC6V' where id=4; -update noar ti set b2='2ML1QL1EQNBMTWE3VW6V9EZBC6V' where id=4; -update noar tt set b0='8V3Q9BISTIOVU30EGGER4QO' where id=5; -update noar ti set b0='8V3Q9BISTIOVU30EGGER4QO' where id=5; -update noar tt set b1='LYW0RNG6K4FHMJH4L4MNJBX1O339' where id=5; -update noar ti set b1='LYW0RNG6K4FHMJH4L4MNJBX1O339' where id=5; -update noar tt set b2='DXJVMTC5RA8K6Z0' where id=5; -update noar ti set b2='DXJVMTC5RA8K6Z0' where id=5; -update noar tt set b0='BTT' where id=6; -update noar ti set b0='BTT' where id=6; -update noar tt set b1='EDSDMIZT' where id=6; -update noar ti set b1='EDSDMIZT' where id=6; -update noar tt set b2='RJ8GH25E83V36B7L0OM1F8IUJ' where id=6; -update noar ti set b2='RJ8GH25E83V36B7L0OM1F8IUJ' where id=6; -update noar tt set b0='RY' where id=7; -update noar ti set b0='RY' where id=7; -update noar tt set b1='FETAKMZA1TAYVC' where id=7; -update noar ti set b1='FETAKMZA1TAYVC' where id=7; -update noar tt set b2='D4ON5F2LHUWNGYSK659NMD26EMJR' where id=7; -update noar ti set b2='D4ON5F2LHUWNGYSK659NMD26EMJR' where id=7; -update noar tt set b0='6' where id=8; -update noar ti set b0='6' where id=8; -update noar tt set b1='NP7Q' where id=8; -update noar ti set b1='NP7Q' where id=8; -update noar tt set b2='92GHAK3UC41BQQQ74WDJKEZU4004W' where id=8; -update noar ti set b2='92GHAK3UC41BQQQ74WDJKEZU4004W' where id=8; -update noar tt set b0='4I70HF60JPC5AXVS' where id=9; -update noar ti set b0='4I70HF60JPC5AXVS' where id=9; -update noar tt set b1='XG5KV63MIR4' where id=9; -update noar ti set b1='XG5KV63MIR4' where id=9; -update noar tt set b2='M' where id=9; -update noar ti set b2='M' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 mediumblob not null, -b1 blob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='MDFIB' where id=1; -update noar ti set b0='MDFIB' where id=1; -update noar tt set b1='OQGVS0EOTEIM4N2UDZRMYZUR2ELJ1ZKI' where id=1; -update noar ti set b1='OQGVS0EOTEIM4N2UDZRMYZUR2ELJ1ZKI' where id=1; -update noar tt set b2='2UYHY7Q8SHCVVXMW38PD4TJP8IDT6IT' where id=1; -update noar ti set b2='2UYHY7Q8SHCVVXMW38PD4TJP8IDT6IT' where id=1; -update noar tt set b0='0AHCRI641CCOI4E7LNU55HZLOB' where id=2; -update noar ti set b0='0AHCRI641CCOI4E7LNU55HZLOB' where id=2; -update noar tt set b1='5BRY' where id=2; -update noar ti set b1='5BRY' where id=2; -update noar tt set b2='2W4GA02T952WC3LB8ZB7' where id=2; -update noar ti set b2='2W4GA02T952WC3LB8ZB7' where id=2; -update noar tt set b0='T9N54ULE3FM7QW9I6R65VZT0R' where id=3; -update noar ti set b0='T9N54ULE3FM7QW9I6R65VZT0R' where id=3; -update noar tt set b1='MIIUIJFI6Q0' where id=3; -update noar ti set b1='MIIUIJFI6Q0' where id=3; -update noar tt set b2='Y33MADV1S88N77O7BDV97RPA24' where id=3; -update noar ti set b2='Y33MADV1S88N77O7BDV97RPA24' where id=3; -update noar tt set b0='0OW7KECKABL7H25IV77X' where id=4; -update noar ti set b0='0OW7KECKABL7H25IV77X' where id=4; -update noar tt set b1='Z69J3UK9C0FQLMHK6DACGO' where id=4; -update noar ti set b1='Z69J3UK9C0FQLMHK6DACGO' where id=4; -update noar tt set b2='FKNZ3E0HAVK2F7OQF81HGY' where id=4; -update noar ti set b2='FKNZ3E0HAVK2F7OQF81HGY' where id=4; -update noar tt set b0='SJEG65Q5XMVJDMSNIPE2PA4' where id=5; -update noar ti set b0='SJEG65Q5XMVJDMSNIPE2PA4' where id=5; -update noar tt set b1='X0LAU7QAE' where id=5; -update noar ti set b1='X0LAU7QAE' where id=5; -update noar tt set b2='VA4TZ0' where id=5; -update noar ti set b2='VA4TZ0' where id=5; -update noar tt set b0='S67IEBZ5VE9E6KXVN69C6IKBXNC79' where id=6; -update noar ti set b0='S67IEBZ5VE9E6KXVN69C6IKBXNC79' where id=6; -update noar tt set b1='JS1T1T9WUJ0ONCALCWXRIP61' where id=6; -update noar ti set b1='JS1T1T9WUJ0ONCALCWXRIP61' where id=6; -update noar tt set b2='41IM1TLAGJRUF' where id=6; -update noar ti set b2='41IM1TLAGJRUF' where id=6; -update noar tt set b0='O4B6EQJIG6YGTE24JBUE9USP8YCXAYO' where id=7; -update noar ti set b0='O4B6EQJIG6YGTE24JBUE9USP8YCXAYO' where id=7; -update noar tt set b1='M1AGL5R1WUX8VPH2PD07K9' where id=7; -update noar ti set b1='M1AGL5R1WUX8VPH2PD07K9' where id=7; -update noar tt set b2='56JGZ0WFQ0CO' where id=7; -update noar ti set b2='56JGZ0WFQ0CO' where id=7; -update noar tt set b0='98WQGN0SEA3KWPX9' where id=8; -update noar ti set b0='98WQGN0SEA3KWPX9' where id=8; -update noar tt set b1='M' where id=8; -update noar ti set b1='M' where id=8; -update noar tt set b2='CCMBWCMP8EBLDBROU87X51YJ0PFGQDQ' where id=8; -update noar ti set b2='CCMBWCMP8EBLDBROU87X51YJ0PFGQDQ' where id=8; -update noar tt set b0='7EZ975GBTEZ8WNXJLPAGT7DBHS38BI' where id=9; -update noar ti set b0='7EZ975GBTEZ8WNXJLPAGT7DBHS38BI' where id=9; -update noar tt set b1='31ZGLQA6MNJCMHWH' where id=9; -update noar ti set b1='31ZGLQA6MNJCMHWH' where id=9; -update noar tt set b2='V2HSZ2ARKWL9ELN' where id=9; -update noar ti set b2='V2HSZ2ARKWL9ELN' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 mediumblob null, -b1 blob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='7AKGPPU11NCCRVU' where id=1; -update noar ti set b0='7AKGPPU11NCCRVU' where id=1; -update noar tt set b1='6IFGUZKQ2QOVLP492MIQ1OGMLKX' where id=1; -update noar ti set b1='6IFGUZKQ2QOVLP492MIQ1OGMLKX' where id=1; -update noar tt set b2='82DX861HZI' where id=1; -update noar ti set b2='82DX861HZI' where id=1; -update noar tt set b0='SKZ2I5L' where id=2; -update noar ti set b0='SKZ2I5L' where id=2; -update noar tt set b1='P9' where id=2; -update noar ti set b1='P9' where id=2; -update noar tt set b2='S93P0NASDKH91NAD03EUP4IRN' where id=2; -update noar ti set b2='S93P0NASDKH91NAD03EUP4IRN' where id=2; -update noar tt set b0='XE8FRXQ7NQPYZ' where id=3; -update noar ti set b0='XE8FRXQ7NQPYZ' where id=3; -update noar tt set b1='9AX6HGJ9XXMMGOSR658RH8H6KU' where id=3; -update noar ti set b1='9AX6HGJ9XXMMGOSR658RH8H6KU' where id=3; -update noar tt set b2='HHEI5' where id=3; -update noar ti set b2='HHEI5' where id=3; -update noar tt set b0='CYKKBK7S7S7D' where id=4; -update noar ti set b0='CYKKBK7S7S7D' where id=4; -update noar tt set b1='1C67J3MPCG4NKAQ0KYLDYNY' where id=4; -update noar ti set b1='1C67J3MPCG4NKAQ0KYLDYNY' where id=4; -update noar tt set b2='FVTB3MJI5A4UZBLLVHEK26QJ8Y3606G' where id=4; -update noar ti set b2='FVTB3MJI5A4UZBLLVHEK26QJ8Y3606G' where id=4; -update noar tt set b0='F5AXCNHWHF831HHCO4' where id=5; -update noar ti set b0='F5AXCNHWHF831HHCO4' where id=5; -update noar tt set b1='4Y7L42E36MZT6DM49H66V3B4L' where id=5; -update noar ti set b1='4Y7L42E36MZT6DM49H66V3B4L' where id=5; -update noar tt set b2='P' where id=5; -update noar ti set b2='P' where id=5; -update noar tt set b0='GRX6JREF7TMQ1FLW8' where id=6; -update noar ti set b0='GRX6JREF7TMQ1FLW8' where id=6; -update noar tt set b1='4YC0XH6C8' where id=6; -update noar ti set b1='4YC0XH6C8' where id=6; -update noar tt set b2='C' where id=6; -update noar ti set b2='C' where id=6; -update noar tt set b0='ICYOVFN1IZ48H8RQQESGDHL1N4IXT' where id=7; -update noar ti set b0='ICYOVFN1IZ48H8RQQESGDHL1N4IXT' where id=7; -update noar tt set b1='N1OL87YNVZY17DE5XIUTMB9KLPTIIW' where id=7; -update noar ti set b1='N1OL87YNVZY17DE5XIUTMB9KLPTIIW' where id=7; -update noar tt set b2='0IPWNZQWWODVEFLHVHVUOZ4CDDOB1Z' where id=7; -update noar ti set b2='0IPWNZQWWODVEFLHVHVUOZ4CDDOB1Z' where id=7; -update noar tt set b0='2L540LSQDZ9D7' where id=8; -update noar ti set b0='2L540LSQDZ9D7' where id=8; -update noar tt set b1='4O69ZESBJCLEWZFHZBR3' where id=8; -update noar ti set b1='4O69ZESBJCLEWZFHZBR3' where id=8; -update noar tt set b2='J' where id=8; -update noar ti set b2='J' where id=8; -update noar tt set b0='RLJ7OMM5RG9NS3JU6JNGNDKS' where id=9; -update noar ti set b0='RLJ7OMM5RG9NS3JU6JNGNDKS' where id=9; -update noar tt set b1='BK3SQAX98YDFZG6C0YA6YRSNF0SE' where id=9; -update noar ti set b1='BK3SQAX98YDFZG6C0YA6YRSNF0SE' where id=9; -update noar tt set b2='3G5AHBMBABMFAYASK1S8P18' where id=9; -update noar ti set b2='3G5AHBMBABMFAYASK1S8P18' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 mediumblob not null, -b1 blob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='O91C7UOF2' where id=1; -update noar ti set b0='O91C7UOF2' where id=1; -update noar tt set b1='FDOELIS4SXL88' where id=1; -update noar ti set b1='FDOELIS4SXL88' where id=1; -update noar tt set b2='KETCLYBDCEUP4UX6DUV8JXAY' where id=1; -update noar ti set b2='KETCLYBDCEUP4UX6DUV8JXAY' where id=1; -update noar tt set b0='FVS8NGVZS3NS1C' where id=2; -update noar ti set b0='FVS8NGVZS3NS1C' where id=2; -update noar tt set b1='18RUXF2PF' where id=2; -update noar ti set b1='18RUXF2PF' where id=2; -update noar tt set b2='NAO' where id=2; -update noar ti set b2='NAO' where id=2; -update noar tt set b0='KHPPOP8K1F0OK9Z' where id=3; -update noar ti set b0='KHPPOP8K1F0OK9Z' where id=3; -update noar tt set b1='L7TEXY6O2G' where id=3; -update noar ti set b1='L7TEXY6O2G' where id=3; -update noar tt set b2='K6J6MY4ISE3' where id=3; -update noar ti set b2='K6J6MY4ISE3' where id=3; -update noar tt set b0='NVHHMT6GV0WN' where id=4; -update noar ti set b0='NVHHMT6GV0WN' where id=4; -update noar tt set b1='FP65XW87J8RLCQ7EQP' where id=4; -update noar ti set b1='FP65XW87J8RLCQ7EQP' where id=4; -update noar tt set b2='63CIMN' where id=4; -update noar ti set b2='63CIMN' where id=4; -update noar tt set b0='TRP2PJEMO' where id=5; -update noar ti set b0='TRP2PJEMO' where id=5; -update noar tt set b1='I2HA' where id=5; -update noar ti set b1='I2HA' where id=5; -update noar tt set b2='42XNK4KW1' where id=5; -update noar ti set b2='42XNK4KW1' where id=5; -update noar tt set b0='W3U' where id=6; -update noar ti set b0='W3U' where id=6; -update noar tt set b1='ALQ8C4RHKDP9NFX8561SJGJ' where id=6; -update noar ti set b1='ALQ8C4RHKDP9NFX8561SJGJ' where id=6; -update noar tt set b2='DGE1WSFZIPJ5AL' where id=6; -update noar ti set b2='DGE1WSFZIPJ5AL' where id=6; -update noar tt set b0='NLW2JZHCG3PM1TWA5' where id=7; -update noar ti set b0='NLW2JZHCG3PM1TWA5' where id=7; -update noar tt set b1='9999KA9DY' where id=7; -update noar ti set b1='9999KA9DY' where id=7; -update noar tt set b2='XELOLNNA' where id=7; -update noar ti set b2='XELOLNNA' where id=7; -update noar tt set b0='NQYSBME4MRMEIL1T5AG4QEDES0TUOSI5' where id=8; -update noar ti set b0='NQYSBME4MRMEIL1T5AG4QEDES0TUOSI5' where id=8; -update noar tt set b1='B8SH6SJLUCZ3CVFKX7' where id=8; -update noar ti set b1='B8SH6SJLUCZ3CVFKX7' where id=8; -update noar tt set b2='S5UK' where id=8; -update noar ti set b2='S5UK' where id=8; -update noar tt set b0='J24J15XUVQ4TWAYJZO3E9OF6UHT96' where id=9; -update noar ti set b0='J24J15XUVQ4TWAYJZO3E9OF6UHT96' where id=9; -update noar tt set b1='P40V3QGZKN2IWXVEVDZJD18SD237U6N' where id=9; -update noar ti set b1='P40V3QGZKN2IWXVEVDZJD18SD237U6N' where id=9; -update noar tt set b2='V1L0KAX6TW70B3U3HH4989AIQL' where id=9; -update noar ti set b2='V1L0KAX6TW70B3U3HH4989AIQL' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 mediumblob null, -b1 blob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='3X26JF2IKOEJXR8RI8SJD4K1RQTZL77' where id=1; -update noar ti set b0='3X26JF2IKOEJXR8RI8SJD4K1RQTZL77' where id=1; -update noar tt set b1='1H89K0' where id=1; -update noar ti set b1='1H89K0' where id=1; -update noar tt set b2='AEBSTU3QJ7J' where id=1; -update noar ti set b2='AEBSTU3QJ7J' where id=1; -update noar tt set b0='IOVPXM9H' where id=2; -update noar ti set b0='IOVPXM9H' where id=2; -update noar tt set b1='DB03N79WJTM2' where id=2; -update noar ti set b1='DB03N79WJTM2' where id=2; -update noar tt set b2='6YZ' where id=2; -update noar ti set b2='6YZ' where id=2; -update noar tt set b0='MZBW4' where id=3; -update noar ti set b0='MZBW4' where id=3; -update noar tt set b1='VMGNKDF879CIPWM' where id=3; -update noar ti set b1='VMGNKDF879CIPWM' where id=3; -update noar tt set b2='9TAQQZ3YLFC8BZFSFP0OMH18E89QR2' where id=3; -update noar ti set b2='9TAQQZ3YLFC8BZFSFP0OMH18E89QR2' where id=3; -update noar tt set b0='QKALGN8UWXN5HK' where id=4; -update noar ti set b0='QKALGN8UWXN5HK' where id=4; -update noar tt set b1='DPYQX3EAGFPK3V09JGI3KOGNVSH3' where id=4; -update noar ti set b1='DPYQX3EAGFPK3V09JGI3KOGNVSH3' where id=4; -update noar tt set b2='XL9I080FF1ZPPQE1XXFXKTM14ETEU7R8' where id=4; -update noar ti set b2='XL9I080FF1ZPPQE1XXFXKTM14ETEU7R8' where id=4; -update noar tt set b0='LICZX7Z6L3UN9FGWFZMWA5' where id=5; -update noar ti set b0='LICZX7Z6L3UN9FGWFZMWA5' where id=5; -update noar tt set b1='W5HCDPWAYHRNLLEO' where id=5; -update noar ti set b1='W5HCDPWAYHRNLLEO' where id=5; -update noar tt set b2='Q38DFVLCJZWIS' where id=5; -update noar ti set b2='Q38DFVLCJZWIS' where id=5; -update noar tt set b0='XCWFUJEO7WH7I582SLGQMFOPAWSH' where id=6; -update noar ti set b0='XCWFUJEO7WH7I582SLGQMFOPAWSH' where id=6; -update noar tt set b1='W5TW0ZVH2KJJ9EM' where id=6; -update noar ti set b1='W5TW0ZVH2KJJ9EM' where id=6; -update noar tt set b2='3UQ32GZEYCEJR1F6GZ9D20Y4F' where id=6; -update noar ti set b2='3UQ32GZEYCEJR1F6GZ9D20Y4F' where id=6; -update noar tt set b0='VWA2Z4A7RG3LUMQSOACV8' where id=7; -update noar ti set b0='VWA2Z4A7RG3LUMQSOACV8' where id=7; -update noar tt set b1='74OBJ3' where id=7; -update noar ti set b1='74OBJ3' where id=7; -update noar tt set b2='DQ2FS82GDOWDKLFGT36X8Z3WBY5NHFZ' where id=7; -update noar ti set b2='DQ2FS82GDOWDKLFGT36X8Z3WBY5NHFZ' where id=7; -update noar tt set b0='847XT' where id=8; -update noar ti set b0='847XT' where id=8; -update noar tt set b1='DEFNGHAXTWVF7T5CFXD1YZIBXFWOE' where id=8; -update noar ti set b1='DEFNGHAXTWVF7T5CFXD1YZIBXFWOE' where id=8; -update noar tt set b2='I8Y94A9M12EE2PA8KH4LDCP' where id=8; -update noar ti set b2='I8Y94A9M12EE2PA8KH4LDCP' where id=8; -update noar tt set b0='6IWV2H0OSVESQUNFNIDM8SHM99MSEJG' where id=9; -update noar ti set b0='6IWV2H0OSVESQUNFNIDM8SHM99MSEJG' where id=9; -update noar tt set b1='X95F5RRP6BQRCL9ZGTR9FW' where id=9; -update noar ti set b1='X95F5RRP6BQRCL9ZGTR9FW' where id=9; -update noar tt set b2='EZ7MCODQ4T370IYQK0Q3Z4GE1TY4' where id=9; -update noar ti set b2='EZ7MCODQ4T370IYQK0Q3Z4GE1TY4' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 mediumblob not null, -b1 blob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='EJAYT73EFQF0JXCSHI6FCN68I' where id=1; -update noar ti set b0='EJAYT73EFQF0JXCSHI6FCN68I' where id=1; -update noar tt set b1='IZ4DWL82DMXQWHO39WJ' where id=1; -update noar ti set b1='IZ4DWL82DMXQWHO39WJ' where id=1; -update noar tt set b2='SW9AN82TRMA3O2' where id=1; -update noar ti set b2='SW9AN82TRMA3O2' where id=1; -update noar tt set b0='WJJ0LQEQMCCLZ3CYQOFAQM9RCQE2S5QK' where id=2; -update noar ti set b0='WJJ0LQEQMCCLZ3CYQOFAQM9RCQE2S5QK' where id=2; -update noar tt set b1='IKUX9' where id=2; -update noar ti set b1='IKUX9' where id=2; -update noar tt set b2='TBKO9S9YME5VMUMNM' where id=2; -update noar ti set b2='TBKO9S9YME5VMUMNM' where id=2; -update noar tt set b0='V4K0MSWCYRKVLAR1SDGD6VI8UIB6WKTV' where id=3; -update noar ti set b0='V4K0MSWCYRKVLAR1SDGD6VI8UIB6WKTV' where id=3; -update noar tt set b1='82DRWXJLWU0' where id=3; -update noar ti set b1='82DRWXJLWU0' where id=3; -update noar tt set b2='7CJLP30J0DEZ8DHXY9QL0REB1IP6C7' where id=3; -update noar ti set b2='7CJLP30J0DEZ8DHXY9QL0REB1IP6C7' where id=3; -update noar tt set b0='2W1KES6ZG' where id=4; -update noar ti set b0='2W1KES6ZG' where id=4; -update noar tt set b1='H6S8HZOE1OC12DLH' where id=4; -update noar ti set b1='H6S8HZOE1OC12DLH' where id=4; -update noar tt set b2='4KCV' where id=4; -update noar ti set b2='4KCV' where id=4; -update noar tt set b0='E1D1' where id=5; -update noar ti set b0='E1D1' where id=5; -update noar tt set b1='6R93XA7P7XS56BN9RE7L8CVU30UN6' where id=5; -update noar ti set b1='6R93XA7P7XS56BN9RE7L8CVU30UN6' where id=5; -update noar tt set b2='12D8WBNCCKT4VDTFTN2OUY41VKL' where id=5; -update noar ti set b2='12D8WBNCCKT4VDTFTN2OUY41VKL' where id=5; -update noar tt set b0='7AAB27VV' where id=6; -update noar ti set b0='7AAB27VV' where id=6; -update noar tt set b1='6JJVG4X4O9GG' where id=6; -update noar ti set b1='6JJVG4X4O9GG' where id=6; -update noar tt set b2='UUJW9L1LQUN0V6CBPPYYKL' where id=6; -update noar ti set b2='UUJW9L1LQUN0V6CBPPYYKL' where id=6; -update noar tt set b0='H7LKPK14' where id=7; -update noar ti set b0='H7LKPK14' where id=7; -update noar tt set b1='NNIC' where id=7; -update noar ti set b1='NNIC' where id=7; -update noar tt set b2='912R7JF3SGDANWMX' where id=7; -update noar ti set b2='912R7JF3SGDANWMX' where id=7; -update noar tt set b0='WR68BE4JVU9LR75NRIORVNL2' where id=8; -update noar ti set b0='WR68BE4JVU9LR75NRIORVNL2' where id=8; -update noar tt set b1='VI5' where id=8; -update noar ti set b1='VI5' where id=8; -update noar tt set b2='N3PA4V290N1' where id=8; -update noar ti set b2='N3PA4V290N1' where id=8; -update noar tt set b0='C1SFTQNYT6CYT21WLXUJCYIMF6' where id=9; -update noar ti set b0='C1SFTQNYT6CYT21WLXUJCYIMF6' where id=9; -update noar tt set b1='TN13NYRJ' where id=9; -update noar ti set b1='TN13NYRJ' where id=9; -update noar tt set b2='D6ZM8YMGN8DKA0669II8' where id=9; -update noar ti set b2='D6ZM8YMGN8DKA0669II8' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 mediumblob null, -b1 blob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='1' where id=1; -update noar ti set b0='1' where id=1; -update noar tt set b1='L0N' where id=1; -update noar ti set b1='L0N' where id=1; -update noar tt set b2='AQQKVUJ9J' where id=1; -update noar ti set b2='AQQKVUJ9J' where id=1; -update noar tt set b0='E1PEZCW' where id=2; -update noar ti set b0='E1PEZCW' where id=2; -update noar tt set b1='4XBXLQHGD8YVSEQH88' where id=2; -update noar ti set b1='4XBXLQHGD8YVSEQH88' where id=2; -update noar tt set b2='QRLE9CRZAW0CP0CZK75' where id=2; -update noar ti set b2='QRLE9CRZAW0CP0CZK75' where id=2; -update noar tt set b0='4DWWUJ8FIP4H7C08QLID9' where id=3; -update noar ti set b0='4DWWUJ8FIP4H7C08QLID9' where id=3; -update noar tt set b1='ZWN0ARCSA4EBX52BLK36QVDRNDK7O3CW' where id=3; -update noar ti set b1='ZWN0ARCSA4EBX52BLK36QVDRNDK7O3CW' where id=3; -update noar tt set b2='Z' where id=3; -update noar ti set b2='Z' where id=3; -update noar tt set b0='UZNR324660DTPQ' where id=4; -update noar ti set b0='UZNR324660DTPQ' where id=4; -update noar tt set b1='ULR0Z' where id=4; -update noar ti set b1='ULR0Z' where id=4; -update noar tt set b2='S0WF13' where id=4; -update noar ti set b2='S0WF13' where id=4; -update noar tt set b0='YBO0YM' where id=5; -update noar ti set b0='YBO0YM' where id=5; -update noar tt set b1='GB4FX7AVD' where id=5; -update noar ti set b1='GB4FX7AVD' where id=5; -update noar tt set b2='WZX9U35NHLDLV4NK1ND1PL35A' where id=5; -update noar ti set b2='WZX9U35NHLDLV4NK1ND1PL35A' where id=5; -update noar tt set b0='9QSDYIK0X9N2SC' where id=6; -update noar ti set b0='9QSDYIK0X9N2SC' where id=6; -update noar tt set b1='W818Y' where id=6; -update noar ti set b1='W818Y' where id=6; -update noar tt set b2='KC7UY55SPKOJ' where id=6; -update noar ti set b2='KC7UY55SPKOJ' where id=6; -update noar tt set b0='THR6G359C' where id=7; -update noar ti set b0='THR6G359C' where id=7; -update noar tt set b1='9C6H4G78JPKM' where id=7; -update noar ti set b1='9C6H4G78JPKM' where id=7; -update noar tt set b2='8S9TGUB85I60MCM9' where id=7; -update noar ti set b2='8S9TGUB85I60MCM9' where id=7; -update noar tt set b0='TDL' where id=8; -update noar ti set b0='TDL' where id=8; -update noar tt set b1='85THFM0SKT34ARK2H1U3FIK72D9' where id=8; -update noar ti set b1='85THFM0SKT34ARK2H1U3FIK72D9' where id=8; -update noar tt set b2='7Y8X23H2FTD2T786JSW1R47PDBYFQ' where id=8; -update noar ti set b2='7Y8X23H2FTD2T786JSW1R47PDBYFQ' where id=8; -update noar tt set b0='S3Z15XFEBPYEW2NZM' where id=9; -update noar ti set b0='S3Z15XFEBPYEW2NZM' where id=9; -update noar tt set b1='R' where id=9; -update noar ti set b1='R' where id=9; -update noar tt set b2='QWIRW1T84WI9KTZ0W20Y2' where id=9; -update noar ti set b2='QWIRW1T84WI9KTZ0W20Y2' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 mediumblob not null, -b1 blob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='22WZ3FQ0ZUBMHZV9' where id=1; -update noar ti set b0='22WZ3FQ0ZUBMHZV9' where id=1; -update noar tt set b1='RSR1JAJDTRHLXTSGXJZ6WQTZHUGC' where id=1; -update noar ti set b1='RSR1JAJDTRHLXTSGXJZ6WQTZHUGC' where id=1; -update noar tt set b2='C3KE1GRUKMX24YJ207NB0BFIGLCOJ4F' where id=1; -update noar ti set b2='C3KE1GRUKMX24YJ207NB0BFIGLCOJ4F' where id=1; -update noar tt set b0='K09S3DYTK7MY7GAF' where id=2; -update noar ti set b0='K09S3DYTK7MY7GAF' where id=2; -update noar tt set b1='6EQHPW' where id=2; -update noar ti set b1='6EQHPW' where id=2; -update noar tt set b2='C6TNIL' where id=2; -update noar ti set b2='C6TNIL' where id=2; -update noar tt set b0='CVC79L9RD8S6WHRYUKWBIB08' where id=3; -update noar ti set b0='CVC79L9RD8S6WHRYUKWBIB08' where id=3; -update noar tt set b1='9P6JZ6B9LP9EQ6H' where id=3; -update noar ti set b1='9P6JZ6B9LP9EQ6H' where id=3; -update noar tt set b2='LTR15JO1CM5LLVKS7TDVYLFG8I79ZA' where id=3; -update noar ti set b2='LTR15JO1CM5LLVKS7TDVYLFG8I79ZA' where id=3; -update noar tt set b0='CJ3ECLJKIC73ZSX' where id=4; -update noar ti set b0='CJ3ECLJKIC73ZSX' where id=4; -update noar tt set b1='MI60P6L28O1D0UQ9NPW6XDLSA67FPO85' where id=4; -update noar ti set b1='MI60P6L28O1D0UQ9NPW6XDLSA67FPO85' where id=4; -update noar tt set b2='CQEZH6R6A9IH00WEK8JASF5PD0' where id=4; -update noar ti set b2='CQEZH6R6A9IH00WEK8JASF5PD0' where id=4; -update noar tt set b0='PQBFU01JRLDBRP5' where id=5; -update noar ti set b0='PQBFU01JRLDBRP5' where id=5; -update noar tt set b1='ZAWCQ9NOHB7' where id=5; -update noar ti set b1='ZAWCQ9NOHB7' where id=5; -update noar tt set b2='ACAAP0DFRUASTFUWJKIKAG' where id=5; -update noar ti set b2='ACAAP0DFRUASTFUWJKIKAG' where id=5; -update noar tt set b0='NH2TH' where id=6; -update noar ti set b0='NH2TH' where id=6; -update noar tt set b1='SEMC3JGTY5ET8PRRTMMR0TYJ' where id=6; -update noar ti set b1='SEMC3JGTY5ET8PRRTMMR0TYJ' where id=6; -update noar tt set b2='I0TOS1V1SM' where id=6; -update noar ti set b2='I0TOS1V1SM' where id=6; -update noar tt set b0='7V30E5Q' where id=7; -update noar ti set b0='7V30E5Q' where id=7; -update noar tt set b1='SX' where id=7; -update noar ti set b1='SX' where id=7; -update noar tt set b2='Q0IG' where id=7; -update noar ti set b2='Q0IG' where id=7; -update noar tt set b0='9AYRVW331LKLZ' where id=8; -update noar ti set b0='9AYRVW331LKLZ' where id=8; -update noar tt set b1='1Z7WEU11JK9S4QS21GZV' where id=8; -update noar ti set b1='1Z7WEU11JK9S4QS21GZV' where id=8; -update noar tt set b2='2Q78XXOA' where id=8; -update noar ti set b2='2Q78XXOA' where id=8; -update noar tt set b0='7R' where id=9; -update noar ti set b0='7R' where id=9; -update noar tt set b1='QSC' where id=9; -update noar ti set b1='QSC' where id=9; -update noar tt set b2='4A2DJWOV1UP6BE59HQ' where id=9; -update noar ti set b2='4A2DJWOV1UP6BE59HQ' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 mediumblob null, -b1 blob null, -b2 text null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='MSIMS2NJBQ6G' where id=1; -update noar ti set b0='MSIMS2NJBQ6G' where id=1; -update noar tt set b1='Y5IIO7KZ46GNNTAX5XNBF8SWL2BPKFT' where id=1; -update noar ti set b1='Y5IIO7KZ46GNNTAX5XNBF8SWL2BPKFT' where id=1; -update noar tt set b2='SPCOX5B8PCDRZ49S' where id=1; -update noar ti set b2='SPCOX5B8PCDRZ49S' where id=1; -update noar tt set b0='KM5F7FYPG24L46MRK5DVAH' where id=2; -update noar ti set b0='KM5F7FYPG24L46MRK5DVAH' where id=2; -update noar tt set b1='V6R5EMQB' where id=2; -update noar ti set b1='V6R5EMQB' where id=2; -update noar tt set b2='XAY2Q60TILQGUZSILTC7YXP' where id=2; -update noar ti set b2='XAY2Q60TILQGUZSILTC7YXP' where id=2; -update noar tt set b0='VMHYRIMI5XQKQ1TMZAEA20' where id=3; -update noar ti set b0='VMHYRIMI5XQKQ1TMZAEA20' where id=3; -update noar tt set b1='0FZF4RH7GEFW6U232Y' where id=3; -update noar ti set b1='0FZF4RH7GEFW6U232Y' where id=3; -update noar tt set b2='Q3MMINMGRD7PCYZMQL89VY6T' where id=3; -update noar ti set b2='Q3MMINMGRD7PCYZMQL89VY6T' where id=3; -update noar tt set b0='UPO2F4KASA7POVOGHMFU' where id=4; -update noar ti set b0='UPO2F4KASA7POVOGHMFU' where id=4; -update noar tt set b1='4ASTYO' where id=4; -update noar ti set b1='4ASTYO' where id=4; -update noar tt set b2='V5FT7N4F2N2F2SE37RQIT3YK' where id=4; -update noar ti set b2='V5FT7N4F2N2F2SE37RQIT3YK' where id=4; -update noar tt set b0='UMY5ONQU217ZGJZLU097' where id=5; -update noar ti set b0='UMY5ONQU217ZGJZLU097' where id=5; -update noar tt set b1='PSIFNNQIUM2YS4ITLEMXXZ92K' where id=5; -update noar ti set b1='PSIFNNQIUM2YS4ITLEMXXZ92K' where id=5; -update noar tt set b2='TCFFM6RBB6M1XOLMIUW' where id=5; -update noar ti set b2='TCFFM6RBB6M1XOLMIUW' where id=5; -update noar tt set b0='82JBQJR5KY7VHPDLR6W5' where id=6; -update noar ti set b0='82JBQJR5KY7VHPDLR6W5' where id=6; -update noar tt set b1='DME03HOM3Z9XOMCT53FT2T' where id=6; -update noar ti set b1='DME03HOM3Z9XOMCT53FT2T' where id=6; -update noar tt set b2='O5R4TX3ORZR1' where id=6; -update noar ti set b2='O5R4TX3ORZR1' where id=6; -update noar tt set b0='SLP' where id=7; -update noar ti set b0='SLP' where id=7; -update noar tt set b1='DYCNPMKRY12UGG9Y02AP8E2Y' where id=7; -update noar ti set b1='DYCNPMKRY12UGG9Y02AP8E2Y' where id=7; -update noar tt set b2='FFNU' where id=7; -update noar ti set b2='FFNU' where id=7; -update noar tt set b0='S8G07KK16CPD0KMT054BQQX4BQV' where id=8; -update noar ti set b0='S8G07KK16CPD0KMT054BQQX4BQV' where id=8; -update noar tt set b1='HB2H5C7HI01TZ4KNXIFKVF0ZCL' where id=8; -update noar ti set b1='HB2H5C7HI01TZ4KNXIFKVF0ZCL' where id=8; -update noar tt set b2='9JSROBS45G4M878HRRYDLAYS' where id=8; -update noar ti set b2='9JSROBS45G4M878HRRYDLAYS' where id=8; -update noar tt set b0='ZUD7W4N1ATN' where id=9; -update noar ti set b0='ZUD7W4N1ATN' where id=9; -update noar tt set b1='7D7MPVZ7LIJY41ANQPC83APJM' where id=9; -update noar ti set b1='7D7MPVZ7LIJY41ANQPC83APJM' where id=9; -update noar tt set b2='7E83N26' where id=9; -update noar ti set b2='7E83N26' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 mediumblob not null, -b1 blob not null, -b2 text not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='P' where id=1; -update noar ti set b0='P' where id=1; -update noar tt set b1='P5GXUISHA' where id=1; -update noar ti set b1='P5GXUISHA' where id=1; -update noar tt set b2='AMKV' where id=1; -update noar ti set b2='AMKV' where id=1; -update noar tt set b0='1M' where id=2; -update noar ti set b0='1M' where id=2; -update noar tt set b1='ZLEERLPLTTANHGEC1' where id=2; -update noar ti set b1='ZLEERLPLTTANHGEC1' where id=2; -update noar tt set b2='E9MAJQCI94PY45VT1HU1782Y11O' where id=2; -update noar ti set b2='E9MAJQCI94PY45VT1HU1782Y11O' where id=2; -update noar tt set b0='Z4S528S2502' where id=3; -update noar ti set b0='Z4S528S2502' where id=3; -update noar tt set b1='2V7M3LQPCA5R4K1KMZ421RD' where id=3; -update noar ti set b1='2V7M3LQPCA5R4K1KMZ421RD' where id=3; -update noar tt set b2='SP0RNMDX0NFV1K' where id=3; -update noar ti set b2='SP0RNMDX0NFV1K' where id=3; -update noar tt set b0='GXA0MTKXAS9S26FODNE' where id=4; -update noar ti set b0='GXA0MTKXAS9S26FODNE' where id=4; -update noar tt set b1='2UE2V5MBC' where id=4; -update noar ti set b1='2UE2V5MBC' where id=4; -update noar tt set b2='91U6BU5TSUXJN35WXO4U872K3' where id=4; -update noar ti set b2='91U6BU5TSUXJN35WXO4U872K3' where id=4; -update noar tt set b0='FDRN6' where id=5; -update noar ti set b0='FDRN6' where id=5; -update noar tt set b1='UUBC4ORQHCTQP1' where id=5; -update noar ti set b1='UUBC4ORQHCTQP1' where id=5; -update noar tt set b2='27NP2S41' where id=5; -update noar ti set b2='27NP2S41' where id=5; -update noar tt set b0='7' where id=6; -update noar ti set b0='7' where id=6; -update noar tt set b1='QM84AD1VSB556AWDB03WYCUJ' where id=6; -update noar ti set b1='QM84AD1VSB556AWDB03WYCUJ' where id=6; -update noar tt set b2='2S4DPYHBAX4EOLDX0RMWIOK' where id=6; -update noar ti set b2='2S4DPYHBAX4EOLDX0RMWIOK' where id=6; -update noar tt set b0='QD' where id=7; -update noar ti set b0='QD' where id=7; -update noar tt set b1='28CGS888QNM6Z99UNARO' where id=7; -update noar ti set b1='28CGS888QNM6Z99UNARO' where id=7; -update noar tt set b2='MVLD78E1J' where id=7; -update noar ti set b2='MVLD78E1J' where id=7; -update noar tt set b0='LJ66FSSAA170ELUMEPIWZP0OZ8P2DUL' where id=8; -update noar ti set b0='LJ66FSSAA170ELUMEPIWZP0OZ8P2DUL' where id=8; -update noar tt set b1='GDNJAHWG' where id=8; -update noar ti set b1='GDNJAHWG' where id=8; -update noar tt set b2='LGD' where id=8; -update noar ti set b2='LGD' where id=8; -update noar tt set b0='Y0P4H' where id=9; -update noar ti set b0='Y0P4H' where id=9; -update noar tt set b1='F2QNF3D1BQGC' where id=9; -update noar ti set b1='F2QNF3D1BQGC' where id=9; -update noar tt set b2='ZJPHA58THT4GPYHW6MNEH5CBJ0' where id=9; -update noar ti set b2='ZJPHA58THT4GPYHW6MNEH5CBJ0' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 mediumblob null, -b1 mediumblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='346' where id=1; -update noar ti set b0='346' where id=1; -update noar tt set b1='84P9J' where id=1; -update noar ti set b1='84P9J' where id=1; -update noar tt set b2='IQWRE' where id=1; -update noar ti set b2='IQWRE' where id=1; -update noar tt set b0='H2W8A0RDIBPXG6O0U2U3E4R224' where id=2; -update noar ti set b0='H2W8A0RDIBPXG6O0U2U3E4R224' where id=2; -update noar tt set b1='P450GN9OV9' where id=2; -update noar ti set b1='P450GN9OV9' where id=2; -update noar tt set b2='KQ5M' where id=2; -update noar ti set b2='KQ5M' where id=2; -update noar tt set b0='JW4F0728JTXKM5LS3MJM3ZDKP6YKQU' where id=3; -update noar ti set b0='JW4F0728JTXKM5LS3MJM3ZDKP6YKQU' where id=3; -update noar tt set b1='T274QNQKO7Z86FJP42CE3XQ3DR5AES' where id=3; -update noar ti set b1='T274QNQKO7Z86FJP42CE3XQ3DR5AES' where id=3; -update noar tt set b2='4J' where id=3; -update noar ti set b2='4J' where id=3; -update noar tt set b0='9EFS5L36GAFM' where id=4; -update noar ti set b0='9EFS5L36GAFM' where id=4; -update noar tt set b1='D2UJVNS01272WL' where id=4; -update noar ti set b1='D2UJVNS01272WL' where id=4; -update noar tt set b2='7H8S2RDEH56IK9IJ6WMK6B1W77' where id=4; -update noar ti set b2='7H8S2RDEH56IK9IJ6WMK6B1W77' where id=4; -update noar tt set b0='WEU7FNNNUOW5FC' where id=5; -update noar ti set b0='WEU7FNNNUOW5FC' where id=5; -update noar tt set b1='VJLDG5FDJR41ZVYK' where id=5; -update noar ti set b1='VJLDG5FDJR41ZVYK' where id=5; -update noar tt set b2='505CKWK5SYJ1H33XP8YE4A9' where id=5; -update noar ti set b2='505CKWK5SYJ1H33XP8YE4A9' where id=5; -update noar tt set b0='VE4C61TWA5J5CM6' where id=6; -update noar ti set b0='VE4C61TWA5J5CM6' where id=6; -update noar tt set b1='W' where id=6; -update noar ti set b1='W' where id=6; -update noar tt set b2='9IM9MHLNVEJLORYR2' where id=6; -update noar ti set b2='9IM9MHLNVEJLORYR2' where id=6; -update noar tt set b0='PRJ18M7J9BOG7YE' where id=7; -update noar ti set b0='PRJ18M7J9BOG7YE' where id=7; -update noar tt set b1='LFTA28KX75B9TPTWXFG4Q' where id=7; -update noar ti set b1='LFTA28KX75B9TPTWXFG4Q' where id=7; -update noar tt set b2='LHVJ7NXTRNOKGBMDEWJQ' where id=7; -update noar ti set b2='LHVJ7NXTRNOKGBMDEWJQ' where id=7; -update noar tt set b0='BG9I68B' where id=8; -update noar ti set b0='BG9I68B' where id=8; -update noar tt set b1='ISCD8G04JC794SIL3LX8MLI7' where id=8; -update noar ti set b1='ISCD8G04JC794SIL3LX8MLI7' where id=8; -update noar tt set b2='DG' where id=8; -update noar ti set b2='DG' where id=8; -update noar tt set b0='YGKP2NRFBRT84' where id=9; -update noar ti set b0='YGKP2NRFBRT84' where id=9; -update noar tt set b1='03VF' where id=9; -update noar ti set b1='03VF' where id=9; -update noar tt set b2='90UQKJYBNHND17GAR' where id=9; -update noar ti set b2='90UQKJYBNHND17GAR' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 mediumblob not null, -b1 mediumblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='6YRU50V3ATPC501BOQVTXL8868L52' where id=1; -update noar ti set b0='6YRU50V3ATPC501BOQVTXL8868L52' where id=1; -update noar tt set b1='08BIC1P1Q' where id=1; -update noar ti set b1='08BIC1P1Q' where id=1; -update noar tt set b2='QPDNDN7EYKKAHIJT0VRSGTUWDP06QHQ8' where id=1; -update noar ti set b2='QPDNDN7EYKKAHIJT0VRSGTUWDP06QHQ8' where id=1; -update noar tt set b0='NKZDG9CXZA' where id=2; -update noar ti set b0='NKZDG9CXZA' where id=2; -update noar tt set b1='BG825UXM2D' where id=2; -update noar ti set b1='BG825UXM2D' where id=2; -update noar tt set b2='K2NJILYK234B' where id=2; -update noar ti set b2='K2NJILYK234B' where id=2; -update noar tt set b0='15NIC8087P5' where id=3; -update noar ti set b0='15NIC8087P5' where id=3; -update noar tt set b1='B8YX3XP' where id=3; -update noar ti set b1='B8YX3XP' where id=3; -update noar tt set b2='CRDN503VDT' where id=3; -update noar ti set b2='CRDN503VDT' where id=3; -update noar tt set b0='AYT6AIF9FWQVV' where id=4; -update noar ti set b0='AYT6AIF9FWQVV' where id=4; -update noar tt set b1='E6O0' where id=4; -update noar ti set b1='E6O0' where id=4; -update noar tt set b2='OQ6A2BIUO3SVK0PD0OJ8DEFSXPUHUE' where id=4; -update noar ti set b2='OQ6A2BIUO3SVK0PD0OJ8DEFSXPUHUE' where id=4; -update noar tt set b0='P1LP9441U28B3EUW6CGMYACKB0' where id=5; -update noar ti set b0='P1LP9441U28B3EUW6CGMYACKB0' where id=5; -update noar tt set b1='YMP9WH9TM5VO2S0GEMK76P76H9MZ' where id=5; -update noar ti set b1='YMP9WH9TM5VO2S0GEMK76P76H9MZ' where id=5; -update noar tt set b2='BDIH' where id=5; -update noar ti set b2='BDIH' where id=5; -update noar tt set b0='1SDQR5' where id=6; -update noar ti set b0='1SDQR5' where id=6; -update noar tt set b1='0X9NCUXZIG22B5' where id=6; -update noar ti set b1='0X9NCUXZIG22B5' where id=6; -update noar tt set b2='TOUZPMSNGRWDR' where id=6; -update noar ti set b2='TOUZPMSNGRWDR' where id=6; -update noar tt set b0='CPO187XAHQEGW1S1FDAZDSPYQ' where id=7; -update noar ti set b0='CPO187XAHQEGW1S1FDAZDSPYQ' where id=7; -update noar tt set b1='3QIV1PEBAB0L' where id=7; -update noar ti set b1='3QIV1PEBAB0L' where id=7; -update noar tt set b2='GMMB0GKL315' where id=7; -update noar ti set b2='GMMB0GKL315' where id=7; -update noar tt set b0='RS13W6Z1AUXR' where id=8; -update noar ti set b0='RS13W6Z1AUXR' where id=8; -update noar tt set b1='4Z2H3V52XRMAUMY763NOO3GV' where id=8; -update noar ti set b1='4Z2H3V52XRMAUMY763NOO3GV' where id=8; -update noar tt set b2='GIW1FTH8TB' where id=8; -update noar ti set b2='GIW1FTH8TB' where id=8; -update noar tt set b0='92G26S3NU86O7DGGURQ71' where id=9; -update noar ti set b0='92G26S3NU86O7DGGURQ71' where id=9; -update noar tt set b1='K5R79G5VTHRSCP' where id=9; -update noar ti set b1='K5R79G5VTHRSCP' where id=9; -update noar tt set b2='2TOUXTX37XZ7W6Q' where id=9; -update noar ti set b2='2TOUXTX37XZ7W6Q' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 mediumblob null, -b1 mediumblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='K20XMQ5ICM14FF' where id=1; -update noar ti set b0='K20XMQ5ICM14FF' where id=1; -update noar tt set b1='0NR' where id=1; -update noar ti set b1='0NR' where id=1; -update noar tt set b2='YKOUNOC' where id=1; -update noar ti set b2='YKOUNOC' where id=1; -update noar tt set b0='2CT8R' where id=2; -update noar ti set b0='2CT8R' where id=2; -update noar tt set b1='TZYUMDD' where id=2; -update noar ti set b1='TZYUMDD' where id=2; -update noar tt set b2='O4MWZJS' where id=2; -update noar ti set b2='O4MWZJS' where id=2; -update noar tt set b0='3K8UTRHBGC352I4A9ZL4OTCY2P' where id=3; -update noar ti set b0='3K8UTRHBGC352I4A9ZL4OTCY2P' where id=3; -update noar tt set b1='YFA5ZHPQNH4SIXSM5J5B5JC6NOS4JCH9' where id=3; -update noar ti set b1='YFA5ZHPQNH4SIXSM5J5B5JC6NOS4JCH9' where id=3; -update noar tt set b2='0Y478KRDRJM5E9HUGFQW83415' where id=3; -update noar ti set b2='0Y478KRDRJM5E9HUGFQW83415' where id=3; -update noar tt set b0='89V0' where id=4; -update noar ti set b0='89V0' where id=4; -update noar tt set b1='YOCMJQV9DMNGBXH6L' where id=4; -update noar ti set b1='YOCMJQV9DMNGBXH6L' where id=4; -update noar tt set b2='6KRBZ6KSR3K1UH327XJ8RXRM' where id=4; -update noar ti set b2='6KRBZ6KSR3K1UH327XJ8RXRM' where id=4; -update noar tt set b0='7M6EI4TJBNVQIZE3FA1TCCT0ABAW9EJ6' where id=5; -update noar ti set b0='7M6EI4TJBNVQIZE3FA1TCCT0ABAW9EJ6' where id=5; -update noar tt set b1='BHCJENERCZ2FDYWH7CH51FSL' where id=5; -update noar ti set b1='BHCJENERCZ2FDYWH7CH51FSL' where id=5; -update noar tt set b2='YXMUXG3P' where id=5; -update noar ti set b2='YXMUXG3P' where id=5; -update noar tt set b0='5' where id=6; -update noar ti set b0='5' where id=6; -update noar tt set b1='MSO2AU2INQ8KQFHQFEKC1' where id=6; -update noar ti set b1='MSO2AU2INQ8KQFHQFEKC1' where id=6; -update noar tt set b2='YQC2SIYODUIG88' where id=6; -update noar ti set b2='YQC2SIYODUIG88' where id=6; -update noar tt set b0='BZGP0N0WW94' where id=7; -update noar ti set b0='BZGP0N0WW94' where id=7; -update noar tt set b1='OSWCW9CV7KLK1RZ9MECOP5' where id=7; -update noar ti set b1='OSWCW9CV7KLK1RZ9MECOP5' where id=7; -update noar tt set b2='9X2HWBJ7OC1PBQ4' where id=7; -update noar ti set b2='9X2HWBJ7OC1PBQ4' where id=7; -update noar tt set b0='FQIUY7LUR3KKEG2E7KEFED5V0MW' where id=8; -update noar ti set b0='FQIUY7LUR3KKEG2E7KEFED5V0MW' where id=8; -update noar tt set b1='AUZSU' where id=8; -update noar ti set b1='AUZSU' where id=8; -update noar tt set b2='FGRCY' where id=8; -update noar ti set b2='FGRCY' where id=8; -update noar tt set b0='H5E6IJMPXJC' where id=9; -update noar ti set b0='H5E6IJMPXJC' where id=9; -update noar tt set b1='G62F1053W7' where id=9; -update noar ti set b1='G62F1053W7' where id=9; -update noar tt set b2='NPHPQ560DCNFGUEA' where id=9; -update noar ti set b2='NPHPQ560DCNFGUEA' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 mediumblob not null, -b1 mediumblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='UEPOWINI' where id=1; -update noar ti set b0='UEPOWINI' where id=1; -update noar tt set b1='WKGVV76LB4UBMC48HIBLD4M2QE' where id=1; -update noar ti set b1='WKGVV76LB4UBMC48HIBLD4M2QE' where id=1; -update noar tt set b2='5V37M1DQ' where id=1; -update noar ti set b2='5V37M1DQ' where id=1; -update noar tt set b0='OBULB2GPD7Y0PV4V79DLOLMT9' where id=2; -update noar ti set b0='OBULB2GPD7Y0PV4V79DLOLMT9' where id=2; -update noar tt set b1='IWQW2X42COGFS0A8F0N3KN6PG' where id=2; -update noar ti set b1='IWQW2X42COGFS0A8F0N3KN6PG' where id=2; -update noar tt set b2='AD4X5P' where id=2; -update noar ti set b2='AD4X5P' where id=2; -update noar tt set b0='LG1LPJUAI4MQXKO9D1O8Z08P18UM8Y' where id=3; -update noar ti set b0='LG1LPJUAI4MQXKO9D1O8Z08P18UM8Y' where id=3; -update noar tt set b1='CTGY99WEBKZH4SNWY' where id=3; -update noar ti set b1='CTGY99WEBKZH4SNWY' where id=3; -update noar tt set b2='L7GNOLVYTONCJ5MDK3ODKX2X' where id=3; -update noar ti set b2='L7GNOLVYTONCJ5MDK3ODKX2X' where id=3; -update noar tt set b0='OHUPUAZC2TARNQ' where id=4; -update noar ti set b0='OHUPUAZC2TARNQ' where id=4; -update noar tt set b1='F6R9J9' where id=4; -update noar ti set b1='F6R9J9' where id=4; -update noar tt set b2='WX' where id=4; -update noar ti set b2='WX' where id=4; -update noar tt set b0='4UARZDMBUV2RQRU49623Y0VMSQ' where id=5; -update noar ti set b0='4UARZDMBUV2RQRU49623Y0VMSQ' where id=5; -update noar tt set b1='VP34VK10RASDCQI3X7J0JO8X' where id=5; -update noar ti set b1='VP34VK10RASDCQI3X7J0JO8X' where id=5; -update noar tt set b2='WJFFRJB3AJQQGAN3NOHS3N9D86G' where id=5; -update noar ti set b2='WJFFRJB3AJQQGAN3NOHS3N9D86G' where id=5; -update noar tt set b0='V7TA9' where id=6; -update noar ti set b0='V7TA9' where id=6; -update noar tt set b1='IK3UI59XXL9H5T6CWY8M1WIUP7OJK' where id=6; -update noar ti set b1='IK3UI59XXL9H5T6CWY8M1WIUP7OJK' where id=6; -update noar tt set b2='1ACTUFUYBTQCY2R8S1K2ACLF' where id=6; -update noar ti set b2='1ACTUFUYBTQCY2R8S1K2ACLF' where id=6; -update noar tt set b0='T625PDFFOBDUJK2A1KVE' where id=7; -update noar ti set b0='T625PDFFOBDUJK2A1KVE' where id=7; -update noar tt set b1='23SSDBWB4TSWB8YIPAD5T3ZGHOH2FI9O' where id=7; -update noar ti set b1='23SSDBWB4TSWB8YIPAD5T3ZGHOH2FI9O' where id=7; -update noar tt set b2='U68BHPDQ6KDFQI865PZQ1DA' where id=7; -update noar ti set b2='U68BHPDQ6KDFQI865PZQ1DA' where id=7; -update noar tt set b0='4AFE5FF6SUQWPVRX9DY7PTS647D29H1I' where id=8; -update noar ti set b0='4AFE5FF6SUQWPVRX9DY7PTS647D29H1I' where id=8; -update noar tt set b1='2JY8X3GADKY0S1VT8Q' where id=8; -update noar ti set b1='2JY8X3GADKY0S1VT8Q' where id=8; -update noar tt set b2='ZIF9BYLNGX154X8K' where id=8; -update noar ti set b2='ZIF9BYLNGX154X8K' where id=8; -update noar tt set b0='7H1TU8YP5A0D' where id=9; -update noar ti set b0='7H1TU8YP5A0D' where id=9; -update noar tt set b1='ADW9A33GI' where id=9; -update noar ti set b1='ADW9A33GI' where id=9; -update noar tt set b2='6IU5TYU9OCB3F4UN9A10HLRF' where id=9; -update noar ti set b2='6IU5TYU9OCB3F4UN9A10HLRF' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 mediumblob null, -b1 mediumblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='P6WFN8S6301YT6PTL2H19SDUG1L' where id=1; -update noar ti set b0='P6WFN8S6301YT6PTL2H19SDUG1L' where id=1; -update noar tt set b1='WT4OI' where id=1; -update noar ti set b1='WT4OI' where id=1; -update noar tt set b2='GNZ' where id=1; -update noar ti set b2='GNZ' where id=1; -update noar tt set b0='POPSLHFW5QON1FT7AYJ6Y' where id=2; -update noar ti set b0='POPSLHFW5QON1FT7AYJ6Y' where id=2; -update noar tt set b1='HY3' where id=2; -update noar ti set b1='HY3' where id=2; -update noar tt set b2='ARFF5BETLD8AJJM' where id=2; -update noar ti set b2='ARFF5BETLD8AJJM' where id=2; -update noar tt set b0='HZ3U9ACQD0RZ' where id=3; -update noar ti set b0='HZ3U9ACQD0RZ' where id=3; -update noar tt set b1='Y730TNJRJFZT8LHDQHDDBD68JBF7G00' where id=3; -update noar ti set b1='Y730TNJRJFZT8LHDQHDDBD68JBF7G00' where id=3; -update noar tt set b2='3Y9W090ESO0SDFNCUJJN' where id=3; -update noar ti set b2='3Y9W090ESO0SDFNCUJJN' where id=3; -update noar tt set b0='TX753P8Y6OEJRGCRQ36FJGP0M11L' where id=4; -update noar ti set b0='TX753P8Y6OEJRGCRQ36FJGP0M11L' where id=4; -update noar tt set b1='O4SSRIWGVDZTTA9VZP7' where id=4; -update noar ti set b1='O4SSRIWGVDZTTA9VZP7' where id=4; -update noar tt set b2='2KHD2MAZPKM6EGWVU47WVF' where id=4; -update noar ti set b2='2KHD2MAZPKM6EGWVU47WVF' where id=4; -update noar tt set b0='4QVZKM' where id=5; -update noar ti set b0='4QVZKM' where id=5; -update noar tt set b1='0NJVRH' where id=5; -update noar ti set b1='0NJVRH' where id=5; -update noar tt set b2='V' where id=5; -update noar ti set b2='V' where id=5; -update noar tt set b0='85RL2F4OBNK' where id=6; -update noar ti set b0='85RL2F4OBNK' where id=6; -update noar tt set b1='PYGDSSP9E9' where id=6; -update noar ti set b1='PYGDSSP9E9' where id=6; -update noar tt set b2='2N5XN6O' where id=6; -update noar ti set b2='2N5XN6O' where id=6; -update noar tt set b0='QQG91P0SP1AXBV34X7I' where id=7; -update noar ti set b0='QQG91P0SP1AXBV34X7I' where id=7; -update noar tt set b1='QJ1RI65PXRIB3XNSIPJ05V5M' where id=7; -update noar ti set b1='QJ1RI65PXRIB3XNSIPJ05V5M' where id=7; -update noar tt set b2='NL13BN1UF870L4WD' where id=7; -update noar ti set b2='NL13BN1UF870L4WD' where id=7; -update noar tt set b0='OSZALWNP8A' where id=8; -update noar ti set b0='OSZALWNP8A' where id=8; -update noar tt set b1='UP1EOBGBI73I3QMI8G0P1' where id=8; -update noar ti set b1='UP1EOBGBI73I3QMI8G0P1' where id=8; -update noar tt set b2='1DTP8Z5509706J5MDAS4733S7Q2JEKF3' where id=8; -update noar ti set b2='1DTP8Z5509706J5MDAS4733S7Q2JEKF3' where id=8; -update noar tt set b0='PKDZWEWQW3FAGDMI5QLSLWQZP0' where id=9; -update noar ti set b0='PKDZWEWQW3FAGDMI5QLSLWQZP0' where id=9; -update noar tt set b1='W3GGOEW4YI6WM09QR51DU2VCH6N6T4FZ' where id=9; -update noar ti set b1='W3GGOEW4YI6WM09QR51DU2VCH6N6T4FZ' where id=9; -update noar tt set b2='TOR4GCUAWVDT2TTR8HGUK38T0QVS3D1Z' where id=9; -update noar ti set b2='TOR4GCUAWVDT2TTR8HGUK38T0QVS3D1Z' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 mediumblob not null, -b1 mediumblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='GXSOQ7Y8MU0T2NYW81VXE7' where id=1; -update noar ti set b0='GXSOQ7Y8MU0T2NYW81VXE7' where id=1; -update noar tt set b1='9IKISSJJP94ULPMVA3PY' where id=1; -update noar ti set b1='9IKISSJJP94ULPMVA3PY' where id=1; -update noar tt set b2='6F0A1XO70VDST4Y' where id=1; -update noar ti set b2='6F0A1XO70VDST4Y' where id=1; -update noar tt set b0='2658MQ8OLXXWUYZS2' where id=2; -update noar ti set b0='2658MQ8OLXXWUYZS2' where id=2; -update noar tt set b1='2' where id=2; -update noar ti set b1='2' where id=2; -update noar tt set b2='XYNDTRKJ7N4C4JK' where id=2; -update noar ti set b2='XYNDTRKJ7N4C4JK' where id=2; -update noar tt set b0='G' where id=3; -update noar ti set b0='G' where id=3; -update noar tt set b1='1ZWM1CMIOZ1L70L' where id=3; -update noar ti set b1='1ZWM1CMIOZ1L70L' where id=3; -update noar tt set b2='KZEPB0CKY04QY3T406ZJ7QPP49UE' where id=3; -update noar ti set b2='KZEPB0CKY04QY3T406ZJ7QPP49UE' where id=3; -update noar tt set b0='DN6TGQGWLFC7FNCDVB4V1H1RUNTT' where id=4; -update noar ti set b0='DN6TGQGWLFC7FNCDVB4V1H1RUNTT' where id=4; -update noar tt set b1='SE0A7EG7OJHQS' where id=4; -update noar ti set b1='SE0A7EG7OJHQS' where id=4; -update noar tt set b2='3LDB8TIZUDRDCXM15U' where id=4; -update noar ti set b2='3LDB8TIZUDRDCXM15U' where id=4; -update noar tt set b0='RMQV63TKMJ6J' where id=5; -update noar ti set b0='RMQV63TKMJ6J' where id=5; -update noar tt set b1='R13LT1CXL6OUC737DD3C5A' where id=5; -update noar ti set b1='R13LT1CXL6OUC737DD3C5A' where id=5; -update noar tt set b2='GL2HS67PERDK2WI2P423ZLXL' where id=5; -update noar ti set b2='GL2HS67PERDK2WI2P423ZLXL' where id=5; -update noar tt set b0='SVDK4ZRGTOY4V7ZJ2XQQUKE0UL0EMJ' where id=6; -update noar ti set b0='SVDK4ZRGTOY4V7ZJ2XQQUKE0UL0EMJ' where id=6; -update noar tt set b1='W70M' where id=6; -update noar ti set b1='W70M' where id=6; -update noar tt set b2='QADLOFC4Q' where id=6; -update noar ti set b2='QADLOFC4Q' where id=6; -update noar tt set b0='3MIAR00DAZ' where id=7; -update noar ti set b0='3MIAR00DAZ' where id=7; -update noar tt set b1='01PA8WLFSFEZN2XA' where id=7; -update noar ti set b1='01PA8WLFSFEZN2XA' where id=7; -update noar tt set b2='8R1GFIUYGLP' where id=7; -update noar ti set b2='8R1GFIUYGLP' where id=7; -update noar tt set b0='KRMIL9JIRJJB5HW8BXCXK61VM1YYV2XR' where id=8; -update noar ti set b0='KRMIL9JIRJJB5HW8BXCXK61VM1YYV2XR' where id=8; -update noar tt set b1='8T1FA8H9B75Y191OC48Z738' where id=8; -update noar ti set b1='8T1FA8H9B75Y191OC48Z738' where id=8; -update noar tt set b2='C' where id=8; -update noar ti set b2='C' where id=8; -update noar tt set b0='CMOIIWX5R96XEN7GDP7O0' where id=9; -update noar ti set b0='CMOIIWX5R96XEN7GDP7O0' where id=9; -update noar tt set b1='PQNHV3TGXWYVB207C3KIXO0E6UFOG92J' where id=9; -update noar ti set b1='PQNHV3TGXWYVB207C3KIXO0E6UFOG92J' where id=9; -update noar tt set b2='QV1KYD2TXGLPZ' where id=9; -update noar ti set b2='QV1KYD2TXGLPZ' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 mediumblob null, -b1 mediumblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='YVZSPRURV56CHEXFPAJNC91114ZFQ48' where id=1; -update noar ti set b0='YVZSPRURV56CHEXFPAJNC91114ZFQ48' where id=1; -update noar tt set b1='DGL1F7Z08WLV5IQMJ5OQ9' where id=1; -update noar ti set b1='DGL1F7Z08WLV5IQMJ5OQ9' where id=1; -update noar tt set b2='YHU0YFWJ36TZBUY39RURXU3F' where id=1; -update noar ti set b2='YHU0YFWJ36TZBUY39RURXU3F' where id=1; -update noar tt set b0='1KDWZ6' where id=2; -update noar ti set b0='1KDWZ6' where id=2; -update noar tt set b1='WPKIJGS8U6OW0KQ' where id=2; -update noar ti set b1='WPKIJGS8U6OW0KQ' where id=2; -update noar tt set b2='UKNXU2D6' where id=2; -update noar ti set b2='UKNXU2D6' where id=2; -update noar tt set b0='DNXQTCNIILPE3' where id=3; -update noar ti set b0='DNXQTCNIILPE3' where id=3; -update noar tt set b1='VVTVVMZB8ZJ1C4N80DUWUL' where id=3; -update noar ti set b1='VVTVVMZB8ZJ1C4N80DUWUL' where id=3; -update noar tt set b2='1IYDTB9RW' where id=3; -update noar ti set b2='1IYDTB9RW' where id=3; -update noar tt set b0='SM9S4RM2OLJHH82OK1VV' where id=4; -update noar ti set b0='SM9S4RM2OLJHH82OK1VV' where id=4; -update noar tt set b1='ZGVH' where id=4; -update noar ti set b1='ZGVH' where id=4; -update noar tt set b2='BVJLZ3DPZ457XP92SFPLVA6GK' where id=4; -update noar ti set b2='BVJLZ3DPZ457XP92SFPLVA6GK' where id=4; -update noar tt set b0='VPQSA3J7S0CCZ8Q71AD0XJQS' where id=5; -update noar ti set b0='VPQSA3J7S0CCZ8Q71AD0XJQS' where id=5; -update noar tt set b1='0J53AY66ZO18P4G1CIW1U1N9Q9PBQ' where id=5; -update noar ti set b1='0J53AY66ZO18P4G1CIW1U1N9Q9PBQ' where id=5; -update noar tt set b2='2UH3OD3L49N2KVWVVNDTGYSX9' where id=5; -update noar ti set b2='2UH3OD3L49N2KVWVVNDTGYSX9' where id=5; -update noar tt set b0='027HVWMX' where id=6; -update noar ti set b0='027HVWMX' where id=6; -update noar tt set b1='0EWP60VWSG' where id=6; -update noar ti set b1='0EWP60VWSG' where id=6; -update noar tt set b2='SBWDFAWDP2PW8PC1LYZ' where id=6; -update noar ti set b2='SBWDFAWDP2PW8PC1LYZ' where id=6; -update noar tt set b0='VC224VNW0C118R1ABKF1MEX' where id=7; -update noar ti set b0='VC224VNW0C118R1ABKF1MEX' where id=7; -update noar tt set b1='YJAVPB3O' where id=7; -update noar ti set b1='YJAVPB3O' where id=7; -update noar tt set b2='XOH8YK' where id=7; -update noar ti set b2='XOH8YK' where id=7; -update noar tt set b0='I4PTT0OYGANXEAGYHO191GY' where id=8; -update noar ti set b0='I4PTT0OYGANXEAGYHO191GY' where id=8; -update noar tt set b1='97' where id=8; -update noar ti set b1='97' where id=8; -update noar tt set b2='0G4US9C6ME2U9UW8ASP0O89' where id=8; -update noar ti set b2='0G4US9C6ME2U9UW8ASP0O89' where id=8; -update noar tt set b0='MHIHYR7MNOZXNZDRRKVCJB1GQANIA12' where id=9; -update noar ti set b0='MHIHYR7MNOZXNZDRRKVCJB1GQANIA12' where id=9; -update noar tt set b1='RV9YGBTMGKJZ8U11TJMECE' where id=9; -update noar ti set b1='RV9YGBTMGKJZ8U11TJMECE' where id=9; -update noar tt set b2='ZT9BB6HA1L80DAEKJFME' where id=9; -update noar ti set b2='ZT9BB6HA1L80DAEKJFME' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 mediumblob not null, -b1 mediumblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='6CAUYPW6EL' where id=1; -update noar ti set b0='6CAUYPW6EL' where id=1; -update noar tt set b1='NV9BR1BI6UJ' where id=1; -update noar ti set b1='NV9BR1BI6UJ' where id=1; -update noar tt set b2='JOXP2S3T0ZCVVKF' where id=1; -update noar ti set b2='JOXP2S3T0ZCVVKF' where id=1; -update noar tt set b0='736HKDM40' where id=2; -update noar ti set b0='736HKDM40' where id=2; -update noar tt set b1='999TXVGNA1FPQR' where id=2; -update noar ti set b1='999TXVGNA1FPQR' where id=2; -update noar tt set b2='8EQOQLECSGYGZT38X7YJPQ5FKFX1P1' where id=2; -update noar ti set b2='8EQOQLECSGYGZT38X7YJPQ5FKFX1P1' where id=2; -update noar tt set b0='VG0' where id=3; -update noar ti set b0='VG0' where id=3; -update noar tt set b1='5FRJYS' where id=3; -update noar ti set b1='5FRJYS' where id=3; -update noar tt set b2='EECZUH6K5PZ7CTY' where id=3; -update noar ti set b2='EECZUH6K5PZ7CTY' where id=3; -update noar tt set b0='M9T0HGZZGR' where id=4; -update noar ti set b0='M9T0HGZZGR' where id=4; -update noar tt set b1='QSDMVSYKJXJWIOO9K9' where id=4; -update noar ti set b1='QSDMVSYKJXJWIOO9K9' where id=4; -update noar tt set b2='6VWOLASJWXEEE2KGIEHXJUFO' where id=4; -update noar ti set b2='6VWOLASJWXEEE2KGIEHXJUFO' where id=4; -update noar tt set b0='AASGZL6TG912HM2MOCXUR' where id=5; -update noar ti set b0='AASGZL6TG912HM2MOCXUR' where id=5; -update noar tt set b1='P5KHI1V4LZF02XW' where id=5; -update noar ti set b1='P5KHI1V4LZF02XW' where id=5; -update noar tt set b2='EXSL7PAYETH8I' where id=5; -update noar ti set b2='EXSL7PAYETH8I' where id=5; -update noar tt set b0='0XN1YJICC01KGESUZF0H0L4OR5ML8K' where id=6; -update noar ti set b0='0XN1YJICC01KGESUZF0H0L4OR5ML8K' where id=6; -update noar tt set b1='G34DBPX8CQB2G02ZXZ4UMEL' where id=6; -update noar ti set b1='G34DBPX8CQB2G02ZXZ4UMEL' where id=6; -update noar tt set b2='N7' where id=6; -update noar ti set b2='N7' where id=6; -update noar tt set b0='Z5' where id=7; -update noar ti set b0='Z5' where id=7; -update noar tt set b1='NY3XMNT4PULZ2A9GBSX9JUS9LH' where id=7; -update noar ti set b1='NY3XMNT4PULZ2A9GBSX9JUS9LH' where id=7; -update noar tt set b2='L6EMKMTZ1M28N3HJE5XQLSB1FI' where id=7; -update noar ti set b2='L6EMKMTZ1M28N3HJE5XQLSB1FI' where id=7; -update noar tt set b0='Z6EFHLC10ZTTSL4JAQ9KPDE4' where id=8; -update noar ti set b0='Z6EFHLC10ZTTSL4JAQ9KPDE4' where id=8; -update noar tt set b1='4CBBYRA9VK6WY2DNRLLX4C79C8EV' where id=8; -update noar ti set b1='4CBBYRA9VK6WY2DNRLLX4C79C8EV' where id=8; -update noar tt set b2='2U4U02WW1EY1M8SCZKTAZDCGIMF4L8' where id=8; -update noar ti set b2='2U4U02WW1EY1M8SCZKTAZDCGIMF4L8' where id=8; -update noar tt set b0='OJ00U7A71MXNCE01YGFX8NBN90' where id=9; -update noar ti set b0='OJ00U7A71MXNCE01YGFX8NBN90' where id=9; -update noar tt set b1='8V6' where id=9; -update noar ti set b1='8V6' where id=9; -update noar tt set b2='9549E1OMTCYIYB21E3O2PV5N8CER30XY' where id=9; -update noar ti set b2='9549E1OMTCYIYB21E3O2PV5N8CER30XY' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 mediumblob null, -b1 mediumblob null, -b2 text null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='F7' where id=1; -update noar ti set b0='F7' where id=1; -update noar tt set b1='LSKALVO1TA' where id=1; -update noar ti set b1='LSKALVO1TA' where id=1; -update noar tt set b2='VQ0ENLI6G0E' where id=1; -update noar ti set b2='VQ0ENLI6G0E' where id=1; -update noar tt set b0='XAAZKI' where id=2; -update noar ti set b0='XAAZKI' where id=2; -update noar tt set b1='B5LTVGXCICBTRK05JY12' where id=2; -update noar ti set b1='B5LTVGXCICBTRK05JY12' where id=2; -update noar tt set b2='FCEQWB' where id=2; -update noar ti set b2='FCEQWB' where id=2; -update noar tt set b0='ZKDS5HAQ1UHL046JLEFBCFK8G' where id=3; -update noar ti set b0='ZKDS5HAQ1UHL046JLEFBCFK8G' where id=3; -update noar tt set b1='001IR8BY' where id=3; -update noar ti set b1='001IR8BY' where id=3; -update noar tt set b2='K9EA' where id=3; -update noar ti set b2='K9EA' where id=3; -update noar tt set b0='8UDFO9BE2EP87B2PQTBTY7W11B4GZI9' where id=4; -update noar ti set b0='8UDFO9BE2EP87B2PQTBTY7W11B4GZI9' where id=4; -update noar tt set b1='J3XPCEUY0X0ZO53Q' where id=4; -update noar ti set b1='J3XPCEUY0X0ZO53Q' where id=4; -update noar tt set b2='7030KX1FA0C6HRY6G6SEJ0Y9U' where id=4; -update noar ti set b2='7030KX1FA0C6HRY6G6SEJ0Y9U' where id=4; -update noar tt set b0='V' where id=5; -update noar ti set b0='V' where id=5; -update noar tt set b1='2J8MSZ134CBYT3CHZ0VQ' where id=5; -update noar ti set b1='2J8MSZ134CBYT3CHZ0VQ' where id=5; -update noar tt set b2='TH93LXEQ81W7JD9B5U7N6LRGYCZD' where id=5; -update noar ti set b2='TH93LXEQ81W7JD9B5U7N6LRGYCZD' where id=5; -update noar tt set b0='L3A50UKS2KTGPWOWS9QBA1L2XR' where id=6; -update noar ti set b0='L3A50UKS2KTGPWOWS9QBA1L2XR' where id=6; -update noar tt set b1='T9XOWRH' where id=6; -update noar ti set b1='T9XOWRH' where id=6; -update noar tt set b2='W9N92P6W2EDFRJYQ3P9CZ' where id=6; -update noar ti set b2='W9N92P6W2EDFRJYQ3P9CZ' where id=6; -update noar tt set b0='U37OKI2NHSGMGBTUND' where id=7; -update noar ti set b0='U37OKI2NHSGMGBTUND' where id=7; -update noar tt set b1='MROWBFH9FIJMCGFJAZN7CI38Q' where id=7; -update noar ti set b1='MROWBFH9FIJMCGFJAZN7CI38Q' where id=7; -update noar tt set b2='NE2FE3ADN2HLAJFBRJAH4C' where id=7; -update noar ti set b2='NE2FE3ADN2HLAJFBRJAH4C' where id=7; -update noar tt set b0='MEWI2ZWW8PGN' where id=8; -update noar ti set b0='MEWI2ZWW8PGN' where id=8; -update noar tt set b1='IOK449PT5AZK1SXOJD1Q' where id=8; -update noar ti set b1='IOK449PT5AZK1SXOJD1Q' where id=8; -update noar tt set b2='06DW4LX6WNB' where id=8; -update noar ti set b2='06DW4LX6WNB' where id=8; -update noar tt set b0='EENSHC0IGEUWW77OFGJBRFKA4DB4D' where id=9; -update noar ti set b0='EENSHC0IGEUWW77OFGJBRFKA4DB4D' where id=9; -update noar tt set b1='VT9EYPF9B6CYHKZ7UG5YCM97UXFI0PCT' where id=9; -update noar ti set b1='VT9EYPF9B6CYHKZ7UG5YCM97UXFI0PCT' where id=9; -update noar tt set b2='QMYR' where id=9; -update noar ti set b2='QMYR' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 mediumblob not null, -b1 mediumblob not null, -b2 text not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='S' where id=1; -update noar ti set b0='S' where id=1; -update noar tt set b1='1I1YHX9UNR369ZS5FT' where id=1; -update noar ti set b1='1I1YHX9UNR369ZS5FT' where id=1; -update noar tt set b2='VQFOVRR10NADRRHBEKBMA06DTY2Q' where id=1; -update noar ti set b2='VQFOVRR10NADRRHBEKBMA06DTY2Q' where id=1; -update noar tt set b0='E97K7Q93YPFA9B3PUV' where id=2; -update noar ti set b0='E97K7Q93YPFA9B3PUV' where id=2; -update noar tt set b1='CY1OM0INXGW9XB6THLMNMM441' where id=2; -update noar ti set b1='CY1OM0INXGW9XB6THLMNMM441' where id=2; -update noar tt set b2='RCALC83TID0GSFMQHJA' where id=2; -update noar ti set b2='RCALC83TID0GSFMQHJA' where id=2; -update noar tt set b0='O2H2V79N2WO07QCCA' where id=3; -update noar ti set b0='O2H2V79N2WO07QCCA' where id=3; -update noar tt set b1='CK' where id=3; -update noar ti set b1='CK' where id=3; -update noar tt set b2='6QEDY4T0EHC4POKF2GFMCQ' where id=3; -update noar ti set b2='6QEDY4T0EHC4POKF2GFMCQ' where id=3; -update noar tt set b0='47DNAX5TQJLSWWV8NDASSTFH9VIF' where id=4; -update noar ti set b0='47DNAX5TQJLSWWV8NDASSTFH9VIF' where id=4; -update noar tt set b1='AES2MT4MCUQ7WBCJDBK' where id=4; -update noar ti set b1='AES2MT4MCUQ7WBCJDBK' where id=4; -update noar tt set b2='1WAV830TBGMFYHHD' where id=4; -update noar ti set b2='1WAV830TBGMFYHHD' where id=4; -update noar tt set b0='8IGASXFEQCJZLIPF4XTU7SK' where id=5; -update noar ti set b0='8IGASXFEQCJZLIPF4XTU7SK' where id=5; -update noar tt set b1='86TE048W4WEG5PW3YYUKUTRSYQ' where id=5; -update noar ti set b1='86TE048W4WEG5PW3YYUKUTRSYQ' where id=5; -update noar tt set b2='8T5' where id=5; -update noar ti set b2='8T5' where id=5; -update noar tt set b0='WMQO8O9B9FELFGIX2F' where id=6; -update noar ti set b0='WMQO8O9B9FELFGIX2F' where id=6; -update noar tt set b1='I616XPHHLS9D9FSW5BO20ERJRGF' where id=6; -update noar ti set b1='I616XPHHLS9D9FSW5BO20ERJRGF' where id=6; -update noar tt set b2='2A0' where id=6; -update noar ti set b2='2A0' where id=6; -update noar tt set b0='1E13TBB' where id=7; -update noar ti set b0='1E13TBB' where id=7; -update noar tt set b1='R34SV9Q079NDH9QLAYGIVG' where id=7; -update noar ti set b1='R34SV9Q079NDH9QLAYGIVG' where id=7; -update noar tt set b2='GI7Y6OOIN3B1IIUCA8S2KM5A0F9CV82' where id=7; -update noar ti set b2='GI7Y6OOIN3B1IIUCA8S2KM5A0F9CV82' where id=7; -update noar tt set b0='J8O3H9YC51NJQFX4Z7BEPS' where id=8; -update noar ti set b0='J8O3H9YC51NJQFX4Z7BEPS' where id=8; -update noar tt set b1='08WE5QAF3GFETJNGGO2BVFAFAOOOVZAU' where id=8; -update noar ti set b1='08WE5QAF3GFETJNGGO2BVFAFAOOOVZAU' where id=8; -update noar tt set b2='U7X78FYM' where id=8; -update noar ti set b2='U7X78FYM' where id=8; -update noar tt set b0='GSO6' where id=9; -update noar ti set b0='GSO6' where id=9; -update noar tt set b1='T7511LP29OS6VKSCC' where id=9; -update noar ti set b1='T7511LP29OS6VKSCC' where id=9; -update noar tt set b2='JMQ1' where id=9; -update noar ti set b2='JMQ1' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 mediumblob null, -b1 longblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='NA618TEHZX90CZFHBQDTC1V8XG9J75' where id=1; -update noar ti set b0='NA618TEHZX90CZFHBQDTC1V8XG9J75' where id=1; -update noar tt set b1='YTVASEIF' where id=1; -update noar ti set b1='YTVASEIF' where id=1; -update noar tt set b2='Y9RI6C78SD02T3X7KGTYQD76EQ7S' where id=1; -update noar ti set b2='Y9RI6C78SD02T3X7KGTYQD76EQ7S' where id=1; -update noar tt set b0='OO' where id=2; -update noar ti set b0='OO' where id=2; -update noar tt set b1='361GKY38WX0ED5S1DGA' where id=2; -update noar ti set b1='361GKY38WX0ED5S1DGA' where id=2; -update noar tt set b2='92Q' where id=2; -update noar ti set b2='92Q' where id=2; -update noar tt set b0='R0KDIDIA760DSETGB4PLOW5' where id=3; -update noar ti set b0='R0KDIDIA760DSETGB4PLOW5' where id=3; -update noar tt set b1='C' where id=3; -update noar ti set b1='C' where id=3; -update noar tt set b2='I4444EF9C2I' where id=3; -update noar ti set b2='I4444EF9C2I' where id=3; -update noar tt set b0='WVSTWO3BG' where id=4; -update noar ti set b0='WVSTWO3BG' where id=4; -update noar tt set b1='2XI3ZORR0BO5I245GEKZ' where id=4; -update noar ti set b1='2XI3ZORR0BO5I245GEKZ' where id=4; -update noar tt set b2='RRLDJ8' where id=4; -update noar ti set b2='RRLDJ8' where id=4; -update noar tt set b0='7' where id=5; -update noar ti set b0='7' where id=5; -update noar tt set b1='QI6MAPFBO3CP' where id=5; -update noar ti set b1='QI6MAPFBO3CP' where id=5; -update noar tt set b2='98TA4DPA5ON9BCVMA0Z' where id=5; -update noar ti set b2='98TA4DPA5ON9BCVMA0Z' where id=5; -update noar tt set b0='2G' where id=6; -update noar ti set b0='2G' where id=6; -update noar tt set b1='MYXD4ARGJWS55L9EXYC38RN4KMP' where id=6; -update noar ti set b1='MYXD4ARGJWS55L9EXYC38RN4KMP' where id=6; -update noar tt set b2='Y6481' where id=6; -update noar ti set b2='Y6481' where id=6; -update noar tt set b0='QH75' where id=7; -update noar ti set b0='QH75' where id=7; -update noar tt set b1='X3VFIAB337LYD7DBF' where id=7; -update noar ti set b1='X3VFIAB337LYD7DBF' where id=7; -update noar tt set b2='W6PWF0DV78' where id=7; -update noar ti set b2='W6PWF0DV78' where id=7; -update noar tt set b0='VUH87V5F' where id=8; -update noar ti set b0='VUH87V5F' where id=8; -update noar tt set b1='9TIEGAW1MPASPDCVI8' where id=8; -update noar ti set b1='9TIEGAW1MPASPDCVI8' where id=8; -update noar tt set b2='T53N9R4A6GX9AFHJAXSBV05NWGTQ8MY5' where id=8; -update noar ti set b2='T53N9R4A6GX9AFHJAXSBV05NWGTQ8MY5' where id=8; -update noar tt set b0='GR' where id=9; -update noar ti set b0='GR' where id=9; -update noar tt set b1='Z79RVKK5BPSGF3J3ORK08OE58SL' where id=9; -update noar ti set b1='Z79RVKK5BPSGF3J3ORK08OE58SL' where id=9; -update noar tt set b2='RA' where id=9; -update noar ti set b2='RA' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 mediumblob not null, -b1 longblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='ZBGN66XH999Q9NEUF2RPNPP0ZW' where id=1; -update noar ti set b0='ZBGN66XH999Q9NEUF2RPNPP0ZW' where id=1; -update noar tt set b1='3Q0JKSO2Z5URP' where id=1; -update noar ti set b1='3Q0JKSO2Z5URP' where id=1; -update noar tt set b2='62S31IO5R7GSO4T67R9MSNGIRMWM' where id=1; -update noar ti set b2='62S31IO5R7GSO4T67R9MSNGIRMWM' where id=1; -update noar tt set b0='8JUBE94QLIIZRIZHH91HKDULEI82' where id=2; -update noar ti set b0='8JUBE94QLIIZRIZHH91HKDULEI82' where id=2; -update noar tt set b1='SRY8TJ2P2U0GNNMY7UQ06RJ5' where id=2; -update noar ti set b1='SRY8TJ2P2U0GNNMY7UQ06RJ5' where id=2; -update noar tt set b2='3E3582KWGAV' where id=2; -update noar ti set b2='3E3582KWGAV' where id=2; -update noar tt set b0='KRR08HTNGOQFATE' where id=3; -update noar ti set b0='KRR08HTNGOQFATE' where id=3; -update noar tt set b1='LHRC9549LTIAX408KGYLXC95ALVNOFD' where id=3; -update noar ti set b1='LHRC9549LTIAX408KGYLXC95ALVNOFD' where id=3; -update noar tt set b2='2FXVSY' where id=3; -update noar ti set b2='2FXVSY' where id=3; -update noar tt set b0='IU85IK7Q3' where id=4; -update noar ti set b0='IU85IK7Q3' where id=4; -update noar tt set b1='FXQ3XVXUK' where id=4; -update noar ti set b1='FXQ3XVXUK' where id=4; -update noar tt set b2='CZ47BC8ORPQPX8UVG0Q3ZTUC' where id=4; -update noar ti set b2='CZ47BC8ORPQPX8UVG0Q3ZTUC' where id=4; -update noar tt set b0='UXUUWQYNFZBGTIK41QZIEFTU6E35K6T' where id=5; -update noar ti set b0='UXUUWQYNFZBGTIK41QZIEFTU6E35K6T' where id=5; -update noar tt set b1='36L35ZIKE9' where id=5; -update noar ti set b1='36L35ZIKE9' where id=5; -update noar tt set b2='JGHEW6KHAMN6I0JRNM' where id=5; -update noar ti set b2='JGHEW6KHAMN6I0JRNM' where id=5; -update noar tt set b0='0K99Q2CWX3QGLH0CAGQW9JO73' where id=6; -update noar ti set b0='0K99Q2CWX3QGLH0CAGQW9JO73' where id=6; -update noar tt set b1='V8X4FUEET36BYH6IHCHOWLKMQURAOJLQ' where id=6; -update noar ti set b1='V8X4FUEET36BYH6IHCHOWLKMQURAOJLQ' where id=6; -update noar tt set b2='V9T4CJV55OTC' where id=6; -update noar ti set b2='V9T4CJV55OTC' where id=6; -update noar tt set b0='KEO9CF4VUE92ZBNNR23LPPZXX7VI25XB' where id=7; -update noar ti set b0='KEO9CF4VUE92ZBNNR23LPPZXX7VI25XB' where id=7; -update noar tt set b1='B8' where id=7; -update noar ti set b1='B8' where id=7; -update noar tt set b2='1P' where id=7; -update noar ti set b2='1P' where id=7; -update noar tt set b0='9JU5XTJQ8K4HH2LJ7A' where id=8; -update noar ti set b0='9JU5XTJQ8K4HH2LJ7A' where id=8; -update noar tt set b1='V5K2CS3ID7EFEA7D1MM4QNQVLES' where id=8; -update noar ti set b1='V5K2CS3ID7EFEA7D1MM4QNQVLES' where id=8; -update noar tt set b2='3VPWI83QLNJU4WJ1' where id=8; -update noar ti set b2='3VPWI83QLNJU4WJ1' where id=8; -update noar tt set b0='633PXANQAGN60YC35L' where id=9; -update noar ti set b0='633PXANQAGN60YC35L' where id=9; -update noar tt set b1='ZP9ZHVA05KAL' where id=9; -update noar ti set b1='ZP9ZHVA05KAL' where id=9; -update noar tt set b2='J5KPZMNK1UPHXM2QHPSF1' where id=9; -update noar ti set b2='J5KPZMNK1UPHXM2QHPSF1' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 mediumblob null, -b1 longblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='NXQQRD3M53K6NF7IG92WK2' where id=1; -update noar ti set b0='NXQQRD3M53K6NF7IG92WK2' where id=1; -update noar tt set b1='I67SVCO2K1ZJ' where id=1; -update noar ti set b1='I67SVCO2K1ZJ' where id=1; -update noar tt set b2='I8P8YDS6KM6IRE7MNGCF' where id=1; -update noar ti set b2='I8P8YDS6KM6IRE7MNGCF' where id=1; -update noar tt set b0='Y2BA9' where id=2; -update noar ti set b0='Y2BA9' where id=2; -update noar tt set b1='HX5EKYFMQ3VRMNZFE6FH834TU' where id=2; -update noar ti set b1='HX5EKYFMQ3VRMNZFE6FH834TU' where id=2; -update noar tt set b2='338MG5UD1568BKI7Q7VXRH' where id=2; -update noar ti set b2='338MG5UD1568BKI7Q7VXRH' where id=2; -update noar tt set b0='UPT2SBB0WCVVNIT5Q13LA3ADYP' where id=3; -update noar ti set b0='UPT2SBB0WCVVNIT5Q13LA3ADYP' where id=3; -update noar tt set b1='EAVNHGU4MBF' where id=3; -update noar ti set b1='EAVNHGU4MBF' where id=3; -update noar tt set b2='GMIK44SYDK5UVA5C73J1VLJ4' where id=3; -update noar ti set b2='GMIK44SYDK5UVA5C73J1VLJ4' where id=3; -update noar tt set b0='J5NTXPBKQWD4CXLXSTE9GLZI8' where id=4; -update noar ti set b0='J5NTXPBKQWD4CXLXSTE9GLZI8' where id=4; -update noar tt set b1='FJ3SS8Y33FI5EK2M7IINN3Q7ALX' where id=4; -update noar ti set b1='FJ3SS8Y33FI5EK2M7IINN3Q7ALX' where id=4; -update noar tt set b2='NC16L3DLGP0KTW6O' where id=4; -update noar ti set b2='NC16L3DLGP0KTW6O' where id=4; -update noar tt set b0='Y32B7DG1B96EVU6436R7URQURO3MLYB' where id=5; -update noar ti set b0='Y32B7DG1B96EVU6436R7URQURO3MLYB' where id=5; -update noar tt set b1='GTWXKLA41ZRP8M22XSQQIM65' where id=5; -update noar ti set b1='GTWXKLA41ZRP8M22XSQQIM65' where id=5; -update noar tt set b2='YZD' where id=5; -update noar ti set b2='YZD' where id=5; -update noar tt set b0='B491VCNL4OYTZ5O1FF5RRF7U6' where id=6; -update noar ti set b0='B491VCNL4OYTZ5O1FF5RRF7U6' where id=6; -update noar tt set b1='EN3G0PC30KQ34XLFUAQR4' where id=6; -update noar ti set b1='EN3G0PC30KQ34XLFUAQR4' where id=6; -update noar tt set b2='LJ41D97' where id=6; -update noar ti set b2='LJ41D97' where id=6; -update noar tt set b0='WHBH65AFVEQ6H4P' where id=7; -update noar ti set b0='WHBH65AFVEQ6H4P' where id=7; -update noar tt set b1='8U59FI0LWKLVLNF5' where id=7; -update noar ti set b1='8U59FI0LWKLVLNF5' where id=7; -update noar tt set b2='15OVTL4S' where id=7; -update noar ti set b2='15OVTL4S' where id=7; -update noar tt set b0='L3UXTOFNSL251GMFH' where id=8; -update noar ti set b0='L3UXTOFNSL251GMFH' where id=8; -update noar tt set b1='J' where id=8; -update noar ti set b1='J' where id=8; -update noar tt set b2='KF1RO4N7WEO6QCWVUL' where id=8; -update noar ti set b2='KF1RO4N7WEO6QCWVUL' where id=8; -update noar tt set b0='4MSXYR4ABDFQXRVCZP5' where id=9; -update noar ti set b0='4MSXYR4ABDFQXRVCZP5' where id=9; -update noar tt set b1='7ISP2DR3001KSVQ6OHBS4JP' where id=9; -update noar ti set b1='7ISP2DR3001KSVQ6OHBS4JP' where id=9; -update noar tt set b2='48JY9SSEJZZXR80DWU' where id=9; -update noar ti set b2='48JY9SSEJZZXR80DWU' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 mediumblob not null, -b1 longblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='KO4OLH6SJXNY1R9UUQBLYGORMD' where id=1; -update noar ti set b0='KO4OLH6SJXNY1R9UUQBLYGORMD' where id=1; -update noar tt set b1='LZH9L4K002Q2ZZPBGZO27GRD' where id=1; -update noar ti set b1='LZH9L4K002Q2ZZPBGZO27GRD' where id=1; -update noar tt set b2='17A95DDREMLFVFG' where id=1; -update noar ti set b2='17A95DDREMLFVFG' where id=1; -update noar tt set b0='XCWFW6N02XT1JJZDCUTM1JN84ODHX' where id=2; -update noar ti set b0='XCWFW6N02XT1JJZDCUTM1JN84ODHX' where id=2; -update noar tt set b1='D788' where id=2; -update noar ti set b1='D788' where id=2; -update noar tt set b2='V6XZ' where id=2; -update noar ti set b2='V6XZ' where id=2; -update noar tt set b0='2DK1UBRVDBHVUENY4UEG2' where id=3; -update noar ti set b0='2DK1UBRVDBHVUENY4UEG2' where id=3; -update noar tt set b1='D3WJD5P3Q' where id=3; -update noar ti set b1='D3WJD5P3Q' where id=3; -update noar tt set b2='09QYU' where id=3; -update noar ti set b2='09QYU' where id=3; -update noar tt set b0='4KNVGVL' where id=4; -update noar ti set b0='4KNVGVL' where id=4; -update noar tt set b1='PNP3XAT1W' where id=4; -update noar ti set b1='PNP3XAT1W' where id=4; -update noar tt set b2='YSUCD8BDH63M98XA' where id=4; -update noar ti set b2='YSUCD8BDH63M98XA' where id=4; -update noar tt set b0='08R0L2BP967A' where id=5; -update noar ti set b0='08R0L2BP967A' where id=5; -update noar tt set b1='6J35EG97AWMVXOCCMMC6MLLDSF' where id=5; -update noar ti set b1='6J35EG97AWMVXOCCMMC6MLLDSF' where id=5; -update noar tt set b2='Q447UQ604H3UXLNAJ' where id=5; -update noar ti set b2='Q447UQ604H3UXLNAJ' where id=5; -update noar tt set b0='69MG7R9JH3UD2VYOTE0KNBVCB53M696B' where id=6; -update noar ti set b0='69MG7R9JH3UD2VYOTE0KNBVCB53M696B' where id=6; -update noar tt set b1='GLGGL6U1SG' where id=6; -update noar ti set b1='GLGGL6U1SG' where id=6; -update noar tt set b2='R00O9ECHZSYM5FIMSQY' where id=6; -update noar ti set b2='R00O9ECHZSYM5FIMSQY' where id=6; -update noar tt set b0='AH2W33QDICC269L69B9N0MFRVCW' where id=7; -update noar ti set b0='AH2W33QDICC269L69B9N0MFRVCW' where id=7; -update noar tt set b1='T6J2WH2I3Z5RWXVTSI7S4C6T7STOXXD' where id=7; -update noar ti set b1='T6J2WH2I3Z5RWXVTSI7S4C6T7STOXXD' where id=7; -update noar tt set b2='KSWRONRU4N7' where id=7; -update noar ti set b2='KSWRONRU4N7' where id=7; -update noar tt set b0='W6GGGMFZYS4OV6IJQG9VM' where id=8; -update noar ti set b0='W6GGGMFZYS4OV6IJQG9VM' where id=8; -update noar tt set b1='ZDHL3' where id=8; -update noar ti set b1='ZDHL3' where id=8; -update noar tt set b2='BCEOMRP0N01ZN1IB4A0' where id=8; -update noar ti set b2='BCEOMRP0N01ZN1IB4A0' where id=8; -update noar tt set b0='274URTSFZNZXXFUUODCLOKRLB753' where id=9; -update noar ti set b0='274URTSFZNZXXFUUODCLOKRLB753' where id=9; -update noar tt set b1='EEP0A' where id=9; -update noar ti set b1='EEP0A' where id=9; -update noar tt set b2='3H60DMQDZM35FQECAOFUJ0' where id=9; -update noar ti set b2='3H60DMQDZM35FQECAOFUJ0' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 mediumblob null, -b1 longblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='QEB3L4H90L8M9GEJTO0XIPE' where id=1; -update noar ti set b0='QEB3L4H90L8M9GEJTO0XIPE' where id=1; -update noar tt set b1='R3R24PNNIG8N65EIDJT' where id=1; -update noar ti set b1='R3R24PNNIG8N65EIDJT' where id=1; -update noar tt set b2='AZWFBDKVQ0E' where id=1; -update noar ti set b2='AZWFBDKVQ0E' where id=1; -update noar tt set b0='A36IN830DMYRBZC' where id=2; -update noar ti set b0='A36IN830DMYRBZC' where id=2; -update noar tt set b1='QLM8JTATMNIES9XESY' where id=2; -update noar ti set b1='QLM8JTATMNIES9XESY' where id=2; -update noar tt set b2='C26XNJX2NPBZILAYVHGKRS' where id=2; -update noar ti set b2='C26XNJX2NPBZILAYVHGKRS' where id=2; -update noar tt set b0='QT49FWECT9BS7A05NJ50FR7PG' where id=3; -update noar ti set b0='QT49FWECT9BS7A05NJ50FR7PG' where id=3; -update noar tt set b1='ATVWFNDOQ1R8' where id=3; -update noar ti set b1='ATVWFNDOQ1R8' where id=3; -update noar tt set b2='V' where id=3; -update noar ti set b2='V' where id=3; -update noar tt set b0='LPQKBR4IPN82SYO6A13W' where id=4; -update noar ti set b0='LPQKBR4IPN82SYO6A13W' where id=4; -update noar tt set b1='S7GAZ1INVKTJ' where id=4; -update noar ti set b1='S7GAZ1INVKTJ' where id=4; -update noar tt set b2='UYGU0JI9AI' where id=4; -update noar ti set b2='UYGU0JI9AI' where id=4; -update noar tt set b0='84T1AHYMJ' where id=5; -update noar ti set b0='84T1AHYMJ' where id=5; -update noar tt set b1='XW15XWNAKM' where id=5; -update noar ti set b1='XW15XWNAKM' where id=5; -update noar tt set b2='TXCEOAXNJ0CBRD31PEK3ZV0' where id=5; -update noar ti set b2='TXCEOAXNJ0CBRD31PEK3ZV0' where id=5; -update noar tt set b0='CPYZNWJBWN0O6X4ZSSZ4TDFCZMPIQ' where id=6; -update noar ti set b0='CPYZNWJBWN0O6X4ZSSZ4TDFCZMPIQ' where id=6; -update noar tt set b1='X9IDKTBK074WCZ92NWS6' where id=6; -update noar ti set b1='X9IDKTBK074WCZ92NWS6' where id=6; -update noar tt set b2='OT3QWO2' where id=6; -update noar ti set b2='OT3QWO2' where id=6; -update noar tt set b0='K4Z0SRYW9X39WDR6M1XI31DIY0Q6' where id=7; -update noar ti set b0='K4Z0SRYW9X39WDR6M1XI31DIY0Q6' where id=7; -update noar tt set b1='9KJPW50GJF28FJXP60KWP4MNVIR' where id=7; -update noar ti set b1='9KJPW50GJF28FJXP60KWP4MNVIR' where id=7; -update noar tt set b2='NKTGTP6Z88L73QKR' where id=7; -update noar ti set b2='NKTGTP6Z88L73QKR' where id=7; -update noar tt set b0='7A01' where id=8; -update noar ti set b0='7A01' where id=8; -update noar tt set b1='XDXY5DJHJXXGJTXK' where id=8; -update noar ti set b1='XDXY5DJHJXXGJTXK' where id=8; -update noar tt set b2='3O' where id=8; -update noar ti set b2='3O' where id=8; -update noar tt set b0='0K0SZ6N1NJEZCTNXA0B8M41N2IKJ' where id=9; -update noar ti set b0='0K0SZ6N1NJEZCTNXA0B8M41N2IKJ' where id=9; -update noar tt set b1='LLM7F8LF' where id=9; -update noar ti set b1='LLM7F8LF' where id=9; -update noar tt set b2='DJBWF1AI23LB4IF1O81RLJXTP2V2S9U' where id=9; -update noar ti set b2='DJBWF1AI23LB4IF1O81RLJXTP2V2S9U' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 mediumblob not null, -b1 longblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='S2GNWID48DVN' where id=1; -update noar ti set b0='S2GNWID48DVN' where id=1; -update noar tt set b1='OP7BN4PVZJ75AAFBMV1749B1OASG' where id=1; -update noar ti set b1='OP7BN4PVZJ75AAFBMV1749B1OASG' where id=1; -update noar tt set b2='6BWBHHCPT' where id=1; -update noar ti set b2='6BWBHHCPT' where id=1; -update noar tt set b0='87' where id=2; -update noar ti set b0='87' where id=2; -update noar tt set b1='R70I2AXYVJS' where id=2; -update noar ti set b1='R70I2AXYVJS' where id=2; -update noar tt set b2='S8X0XMCORSW5Z' where id=2; -update noar ti set b2='S8X0XMCORSW5Z' where id=2; -update noar tt set b0='Q8KA8L1ZO0OTCO1K0RTPAAS033GKXYX' where id=3; -update noar ti set b0='Q8KA8L1ZO0OTCO1K0RTPAAS033GKXYX' where id=3; -update noar tt set b1='DAJCJIW60JU1NUO0EHA7B2SWSPH2' where id=3; -update noar ti set b1='DAJCJIW60JU1NUO0EHA7B2SWSPH2' where id=3; -update noar tt set b2='56854R' where id=3; -update noar ti set b2='56854R' where id=3; -update noar tt set b0='MA64632MHVXC' where id=4; -update noar ti set b0='MA64632MHVXC' where id=4; -update noar tt set b1='8Z5DPNB' where id=4; -update noar ti set b1='8Z5DPNB' where id=4; -update noar tt set b2='IY44E3' where id=4; -update noar ti set b2='IY44E3' where id=4; -update noar tt set b0='5WE6S5' where id=5; -update noar ti set b0='5WE6S5' where id=5; -update noar tt set b1='NPX' where id=5; -update noar ti set b1='NPX' where id=5; -update noar tt set b2='1BAKLV9JYJFDZQHRIRKCZQ9EMAOEM32' where id=5; -update noar ti set b2='1BAKLV9JYJFDZQHRIRKCZQ9EMAOEM32' where id=5; -update noar tt set b0='JCY' where id=6; -update noar ti set b0='JCY' where id=6; -update noar tt set b1='LAHAK6KVY73SBNQHV7B2AC3UQ1LQY' where id=6; -update noar ti set b1='LAHAK6KVY73SBNQHV7B2AC3UQ1LQY' where id=6; -update noar tt set b2='1S7EMKKQHB9L' where id=6; -update noar ti set b2='1S7EMKKQHB9L' where id=6; -update noar tt set b0='G5QJOG8H2KTWKQA86R8ND14SHO' where id=7; -update noar ti set b0='G5QJOG8H2KTWKQA86R8ND14SHO' where id=7; -update noar tt set b1='CSXYJQZFL45CIIJ' where id=7; -update noar ti set b1='CSXYJQZFL45CIIJ' where id=7; -update noar tt set b2='RVLHD7DKC8KE6I5SA00T3XKF2SJQAIC' where id=7; -update noar ti set b2='RVLHD7DKC8KE6I5SA00T3XKF2SJQAIC' where id=7; -update noar tt set b0='645EV2FJ72QLO24F58RVKODYAHZ' where id=8; -update noar ti set b0='645EV2FJ72QLO24F58RVKODYAHZ' where id=8; -update noar tt set b1='TN' where id=8; -update noar ti set b1='TN' where id=8; -update noar tt set b2='9SD7ZYLA9JTKZ7KINPRLKQCEYBSLTHXM' where id=8; -update noar ti set b2='9SD7ZYLA9JTKZ7KINPRLKQCEYBSLTHXM' where id=8; -update noar tt set b0='VFZEHQZZ4MAKFGEOHZ4VTHT55' where id=9; -update noar ti set b0='VFZEHQZZ4MAKFGEOHZ4VTHT55' where id=9; -update noar tt set b1='GJI4MEN8D4554SKXD' where id=9; -update noar ti set b1='GJI4MEN8D4554SKXD' where id=9; -update noar tt set b2='PU2UXKL4TJ' where id=9; -update noar ti set b2='PU2UXKL4TJ' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 mediumblob null, -b1 longblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='QGP605SFDMORJVG1X4A8HFF47R1GMXU' where id=1; -update noar ti set b0='QGP605SFDMORJVG1X4A8HFF47R1GMXU' where id=1; -update noar tt set b1='RMND1JHVZFKU5MRUTY2X6KXD5NOVD4RP' where id=1; -update noar ti set b1='RMND1JHVZFKU5MRUTY2X6KXD5NOVD4RP' where id=1; -update noar tt set b2='XC5RRXD4UIJNYYVXO' where id=1; -update noar ti set b2='XC5RRXD4UIJNYYVXO' where id=1; -update noar tt set b0='L1D' where id=2; -update noar ti set b0='L1D' where id=2; -update noar tt set b1='3' where id=2; -update noar ti set b1='3' where id=2; -update noar tt set b2='J4FURTLO7LOHFI6WCDVX5' where id=2; -update noar ti set b2='J4FURTLO7LOHFI6WCDVX5' where id=2; -update noar tt set b0='CPKZBHO1AE8FOMDX6QOTAE' where id=3; -update noar ti set b0='CPKZBHO1AE8FOMDX6QOTAE' where id=3; -update noar tt set b1='Z0Z83M4987340NEB2637' where id=3; -update noar ti set b1='Z0Z83M4987340NEB2637' where id=3; -update noar tt set b2='0E9G11M74UYE3IE9EEDL' where id=3; -update noar ti set b2='0E9G11M74UYE3IE9EEDL' where id=3; -update noar tt set b0='6N99N5I' where id=4; -update noar ti set b0='6N99N5I' where id=4; -update noar tt set b1='SFLEK27' where id=4; -update noar ti set b1='SFLEK27' where id=4; -update noar tt set b2='9TNERZ7UCPFT09TXNB' where id=4; -update noar ti set b2='9TNERZ7UCPFT09TXNB' where id=4; -update noar tt set b0='WRRLSIN' where id=5; -update noar ti set b0='WRRLSIN' where id=5; -update noar tt set b1='20UD58MVO' where id=5; -update noar ti set b1='20UD58MVO' where id=5; -update noar tt set b2='O22I3AAI91GPOPJW5VE' where id=5; -update noar ti set b2='O22I3AAI91GPOPJW5VE' where id=5; -update noar tt set b0='48X5A0KD6HNRA0PYRO34' where id=6; -update noar ti set b0='48X5A0KD6HNRA0PYRO34' where id=6; -update noar tt set b1='RUVCMGC05CKVUTKGFH8NH1CF' where id=6; -update noar ti set b1='RUVCMGC05CKVUTKGFH8NH1CF' where id=6; -update noar tt set b2='ERCBW35363OYOBYREBDJRDCNTSGUB8N8' where id=6; -update noar ti set b2='ERCBW35363OYOBYREBDJRDCNTSGUB8N8' where id=6; -update noar tt set b0='PHGE90JKAE14EVI' where id=7; -update noar ti set b0='PHGE90JKAE14EVI' where id=7; -update noar tt set b1='PUX8' where id=7; -update noar ti set b1='PUX8' where id=7; -update noar tt set b2='U562PGF7JNY3XPDA7ONZ' where id=7; -update noar ti set b2='U562PGF7JNY3XPDA7ONZ' where id=7; -update noar tt set b0='LJKEHRQUK58A7KLG6JQGN' where id=8; -update noar ti set b0='LJKEHRQUK58A7KLG6JQGN' where id=8; -update noar tt set b1='3IK2Q' where id=8; -update noar ti set b1='3IK2Q' where id=8; -update noar tt set b2='9LUEWCJIP1KKV6JNZXRYOEZW7YUG8Z7M' where id=8; -update noar ti set b2='9LUEWCJIP1KKV6JNZXRYOEZW7YUG8Z7M' where id=8; -update noar tt set b0='GJY3JNVBRPI1GR44YATZTW12IVA5P' where id=9; -update noar ti set b0='GJY3JNVBRPI1GR44YATZTW12IVA5P' where id=9; -update noar tt set b1='QMKPYZAGVG89OSFIFPBXY74SRT7' where id=9; -update noar ti set b1='QMKPYZAGVG89OSFIFPBXY74SRT7' where id=9; -update noar tt set b2='3KJTATITCH2IG90S' where id=9; -update noar ti set b2='3KJTATITCH2IG90S' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 mediumblob not null, -b1 longblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='XLSSZRO' where id=1; -update noar ti set b0='XLSSZRO' where id=1; -update noar tt set b1='8' where id=1; -update noar ti set b1='8' where id=1; -update noar tt set b2='S8Q4QRFZYUFT36KU4EO78UPHHTX1F9C' where id=1; -update noar ti set b2='S8Q4QRFZYUFT36KU4EO78UPHHTX1F9C' where id=1; -update noar tt set b0='MAZR66TUMVRHAVG' where id=2; -update noar ti set b0='MAZR66TUMVRHAVG' where id=2; -update noar tt set b1='P8L5Y36PX' where id=2; -update noar ti set b1='P8L5Y36PX' where id=2; -update noar tt set b2='R0QWA98' where id=2; -update noar ti set b2='R0QWA98' where id=2; -update noar tt set b0='5XFZQ2UIQV6KLOQC3IJSIO84J66' where id=3; -update noar ti set b0='5XFZQ2UIQV6KLOQC3IJSIO84J66' where id=3; -update noar tt set b1='NV0WHD413MZ5UG0Q' where id=3; -update noar ti set b1='NV0WHD413MZ5UG0Q' where id=3; -update noar tt set b2='Q58X4R1NKDN07' where id=3; -update noar ti set b2='Q58X4R1NKDN07' where id=3; -update noar tt set b0='6LPVBTEW8' where id=4; -update noar ti set b0='6LPVBTEW8' where id=4; -update noar tt set b1='3UD320' where id=4; -update noar ti set b1='3UD320' where id=4; -update noar tt set b2='Z5U' where id=4; -update noar ti set b2='Z5U' where id=4; -update noar tt set b0='ZZ0F8BTA696P7' where id=5; -update noar ti set b0='ZZ0F8BTA696P7' where id=5; -update noar tt set b1='ERZ63IQCGM5GJSM73PBNWQVV2TDR' where id=5; -update noar ti set b1='ERZ63IQCGM5GJSM73PBNWQVV2TDR' where id=5; -update noar tt set b2='EH0T8993' where id=5; -update noar ti set b2='EH0T8993' where id=5; -update noar tt set b0='2XHTI3RA3ONPUTYQSQJDBIU0D' where id=6; -update noar ti set b0='2XHTI3RA3ONPUTYQSQJDBIU0D' where id=6; -update noar tt set b1='HN82VINZLWBNA69TOPU' where id=6; -update noar ti set b1='HN82VINZLWBNA69TOPU' where id=6; -update noar tt set b2='EAHU7YT1YP91SYEIOI29F6188' where id=6; -update noar ti set b2='EAHU7YT1YP91SYEIOI29F6188' where id=6; -update noar tt set b0='7GXGKG54FPDRKXJ' where id=7; -update noar ti set b0='7GXGKG54FPDRKXJ' where id=7; -update noar tt set b1='8QOHIX9AJ3030XGQZAAYKE8VEGX9' where id=7; -update noar ti set b1='8QOHIX9AJ3030XGQZAAYKE8VEGX9' where id=7; -update noar tt set b2='W8VM84Q' where id=7; -update noar ti set b2='W8VM84Q' where id=7; -update noar tt set b0='EV' where id=8; -update noar ti set b0='EV' where id=8; -update noar tt set b1='8HG0P' where id=8; -update noar ti set b1='8HG0P' where id=8; -update noar tt set b2='6J8XB9T2VKOGZ64AX7TJEB' where id=8; -update noar ti set b2='6J8XB9T2VKOGZ64AX7TJEB' where id=8; -update noar tt set b0='ECQLJ96HLRXI51N43K0ROIOESK6U' where id=9; -update noar ti set b0='ECQLJ96HLRXI51N43K0ROIOESK6U' where id=9; -update noar tt set b1='DRML428XG4R67BX0FN2G9GU' where id=9; -update noar ti set b1='DRML428XG4R67BX0FN2G9GU' where id=9; -update noar tt set b2='EW2G0TEWQ8GBQCRIH0083N5O' where id=9; -update noar ti set b2='EW2G0TEWQ8GBQCRIH0083N5O' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 mediumblob null, -b1 longblob null, -b2 text null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='MAXMPF7TUV0MCI56H1YFPH5' where id=1; -update noar ti set b0='MAXMPF7TUV0MCI56H1YFPH5' where id=1; -update noar tt set b1='S5EKMHZJ8CLDJ9MNKIFDL2H550SLET' where id=1; -update noar ti set b1='S5EKMHZJ8CLDJ9MNKIFDL2H550SLET' where id=1; -update noar tt set b2='C8KWQI6XUM04JT7OVZ' where id=1; -update noar ti set b2='C8KWQI6XUM04JT7OVZ' where id=1; -update noar tt set b0='LQEYSD1WNZTEGU2H67LBR6FZ0TX68Q' where id=2; -update noar ti set b0='LQEYSD1WNZTEGU2H67LBR6FZ0TX68Q' where id=2; -update noar tt set b1='4UYF6' where id=2; -update noar ti set b1='4UYF6' where id=2; -update noar tt set b2='X4S07Q4BPNVLFI70RX3GZHT8' where id=2; -update noar ti set b2='X4S07Q4BPNVLFI70RX3GZHT8' where id=2; -update noar tt set b0='F6MZ9NJELPT20WGF06OJQEK' where id=3; -update noar ti set b0='F6MZ9NJELPT20WGF06OJQEK' where id=3; -update noar tt set b1='S5O0BME9J8LYOAUECGIE26ZJ5HT' where id=3; -update noar ti set b1='S5O0BME9J8LYOAUECGIE26ZJ5HT' where id=3; -update noar tt set b2='6X8PYH566263PDZCHLKSYGAD9BMZP1' where id=3; -update noar ti set b2='6X8PYH566263PDZCHLKSYGAD9BMZP1' where id=3; -update noar tt set b0='R4K3C5YXY' where id=4; -update noar ti set b0='R4K3C5YXY' where id=4; -update noar tt set b1='BZ3VDZCVF33MFAJID27VS98' where id=4; -update noar ti set b1='BZ3VDZCVF33MFAJID27VS98' where id=4; -update noar tt set b2='919DT0JYDNP83TDYULW7ADCKU0KONWI' where id=4; -update noar ti set b2='919DT0JYDNP83TDYULW7ADCKU0KONWI' where id=4; -update noar tt set b0='X4' where id=5; -update noar ti set b0='X4' where id=5; -update noar tt set b1='Y8EMEG189APTMZQZNOZC8BEWRE' where id=5; -update noar ti set b1='Y8EMEG189APTMZQZNOZC8BEWRE' where id=5; -update noar tt set b2='O8G8767UNH2EGP51EDKM73' where id=5; -update noar ti set b2='O8G8767UNH2EGP51EDKM73' where id=5; -update noar tt set b0='T' where id=6; -update noar ti set b0='T' where id=6; -update noar tt set b1='UCOOJ2XL5I' where id=6; -update noar ti set b1='UCOOJ2XL5I' where id=6; -update noar tt set b2='GOAHWCD3HAT' where id=6; -update noar ti set b2='GOAHWCD3HAT' where id=6; -update noar tt set b0='RLWOZRXGBWP4U' where id=7; -update noar ti set b0='RLWOZRXGBWP4U' where id=7; -update noar tt set b1='003TSEHK4X0IN' where id=7; -update noar ti set b1='003TSEHK4X0IN' where id=7; -update noar tt set b2='VVRVGIUJXC1AQ9VEOM6Z50H7GDA6GOMD' where id=7; -update noar ti set b2='VVRVGIUJXC1AQ9VEOM6Z50H7GDA6GOMD' where id=7; -update noar tt set b0='DUX0L' where id=8; -update noar ti set b0='DUX0L' where id=8; -update noar tt set b1='JAZY2' where id=8; -update noar ti set b1='JAZY2' where id=8; -update noar tt set b2='KOSRX1CYE3IYSQ52O4NXSQH' where id=8; -update noar ti set b2='KOSRX1CYE3IYSQ52O4NXSQH' where id=8; -update noar tt set b0='T' where id=9; -update noar ti set b0='T' where id=9; -update noar tt set b1='I1' where id=9; -update noar ti set b1='I1' where id=9; -update noar tt set b2='M6IJVN179XNMABFH77B7XYQRO3ZPK6PX' where id=9; -update noar ti set b2='M6IJVN179XNMABFH77B7XYQRO3ZPK6PX' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 mediumblob not null, -b1 longblob not null, -b2 text not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='ARF2OX6I4NCXXOJABZ3CJ' where id=1; -update noar ti set b0='ARF2OX6I4NCXXOJABZ3CJ' where id=1; -update noar tt set b1='NWIX38X5JHKFVS2J3K0HSXSF' where id=1; -update noar ti set b1='NWIX38X5JHKFVS2J3K0HSXSF' where id=1; -update noar tt set b2='T3QSG3MSW4GR4KOY7' where id=1; -update noar ti set b2='T3QSG3MSW4GR4KOY7' where id=1; -update noar tt set b0='TB4KUIEG0P3RJE9O8TJFCK2A6SD66WPN' where id=2; -update noar ti set b0='TB4KUIEG0P3RJE9O8TJFCK2A6SD66WPN' where id=2; -update noar tt set b1='ZB38GFHO5G25' where id=2; -update noar ti set b1='ZB38GFHO5G25' where id=2; -update noar tt set b2='DOXK2H4BDYPQ' where id=2; -update noar ti set b2='DOXK2H4BDYPQ' where id=2; -update noar tt set b0='HI2INZC3LV' where id=3; -update noar ti set b0='HI2INZC3LV' where id=3; -update noar tt set b1='SEYL29YL09' where id=3; -update noar ti set b1='SEYL29YL09' where id=3; -update noar tt set b2='Q373ECQ6WFJYBTX33IHAW9VV1Z74Y' where id=3; -update noar ti set b2='Q373ECQ6WFJYBTX33IHAW9VV1Z74Y' where id=3; -update noar tt set b0='IOFI267CHU6NYW5XD' where id=4; -update noar ti set b0='IOFI267CHU6NYW5XD' where id=4; -update noar tt set b1='1AZDD78RDDKF' where id=4; -update noar ti set b1='1AZDD78RDDKF' where id=4; -update noar tt set b2='J5XXCDGGQ' where id=4; -update noar ti set b2='J5XXCDGGQ' where id=4; -update noar tt set b0='COVLBUULRWR9ET91497QKD1ARXA24FX' where id=5; -update noar ti set b0='COVLBUULRWR9ET91497QKD1ARXA24FX' where id=5; -update noar tt set b1='FO87IWC9NOFOQ7H7LMWBHQTL0DMRV' where id=5; -update noar ti set b1='FO87IWC9NOFOQ7H7LMWBHQTL0DMRV' where id=5; -update noar tt set b2='NGRXKNKH8F' where id=5; -update noar ti set b2='NGRXKNKH8F' where id=5; -update noar tt set b0='B14N1BBIV' where id=6; -update noar ti set b0='B14N1BBIV' where id=6; -update noar tt set b1='GQGLP8AILOUJX7KR' where id=6; -update noar ti set b1='GQGLP8AILOUJX7KR' where id=6; -update noar tt set b2='VEZ00YSQH91RP854VU6WYX3O6WV' where id=6; -update noar ti set b2='VEZ00YSQH91RP854VU6WYX3O6WV' where id=6; -update noar tt set b0='HGG16UAO75AXAWXNHN2BJH6NF8' where id=7; -update noar ti set b0='HGG16UAO75AXAWXNHN2BJH6NF8' where id=7; -update noar tt set b1='HE69FHE59A62' where id=7; -update noar ti set b1='HE69FHE59A62' where id=7; -update noar tt set b2='QGYJUGF4SH2FVAIOSIUH7RIHQGAYT4IF' where id=7; -update noar ti set b2='QGYJUGF4SH2FVAIOSIUH7RIHQGAYT4IF' where id=7; -update noar tt set b0='0QPCNEPH4HS3Y95056PYHD' where id=8; -update noar ti set b0='0QPCNEPH4HS3Y95056PYHD' where id=8; -update noar tt set b1='76VVLV9EUICA8VI14EWHOZ981S' where id=8; -update noar ti set b1='76VVLV9EUICA8VI14EWHOZ981S' where id=8; -update noar tt set b2='FP9GJ88TSSXHZ6IG78HZL8LOE' where id=8; -update noar ti set b2='FP9GJ88TSSXHZ6IG78HZL8LOE' where id=8; -update noar tt set b0='9MK5D1D120TUO930' where id=9; -update noar ti set b0='9MK5D1D120TUO930' where id=9; -update noar tt set b1='ZIKXPL7092J9X5HGM0M8K3JGJY7C7L5' where id=9; -update noar ti set b1='ZIKXPL7092J9X5HGM0M8K3JGJY7C7L5' where id=9; -update noar tt set b2='896QEL8BV8U' where id=9; -update noar ti set b2='896QEL8BV8U' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 mediumblob null, -b1 text null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='W0QJFVJ' where id=1; -update noar ti set b0='W0QJFVJ' where id=1; -update noar tt set b1='YM1BF3D6W4TQOFK93FGYD8' where id=1; -update noar ti set b1='YM1BF3D6W4TQOFK93FGYD8' where id=1; -update noar tt set b2='FB6EQWNT30U4J' where id=1; -update noar ti set b2='FB6EQWNT30U4J' where id=1; -update noar tt set b0='P6P5PTOVMOWYREA5WLZA6MLJE8' where id=2; -update noar ti set b0='P6P5PTOVMOWYREA5WLZA6MLJE8' where id=2; -update noar tt set b1='HF' where id=2; -update noar ti set b1='HF' where id=2; -update noar tt set b2='RX470Z0SCFQ8A73FP2QVNTAVCV' where id=2; -update noar ti set b2='RX470Z0SCFQ8A73FP2QVNTAVCV' where id=2; -update noar tt set b0='9LKU6FRQVHWPBCYT915SINB9PZT3' where id=3; -update noar ti set b0='9LKU6FRQVHWPBCYT915SINB9PZT3' where id=3; -update noar tt set b1='OI' where id=3; -update noar ti set b1='OI' where id=3; -update noar tt set b2='7RJ1V' where id=3; -update noar ti set b2='7RJ1V' where id=3; -update noar tt set b0='Z7F9J8HST42KX4CR9CF97J48' where id=4; -update noar ti set b0='Z7F9J8HST42KX4CR9CF97J48' where id=4; -update noar tt set b1='OJUDCULJW2F' where id=4; -update noar ti set b1='OJUDCULJW2F' where id=4; -update noar tt set b2='2YBFLBOTWURCB0WGXIZU5L' where id=4; -update noar ti set b2='2YBFLBOTWURCB0WGXIZU5L' where id=4; -update noar tt set b0='WM3J2U097STSKM6U6DW7UJZ82S3' where id=5; -update noar ti set b0='WM3J2U097STSKM6U6DW7UJZ82S3' where id=5; -update noar tt set b1='UPF2RESCJ328IRRF0JE4' where id=5; -update noar ti set b1='UPF2RESCJ328IRRF0JE4' where id=5; -update noar tt set b2='E51TQ8CWY2O9370GPECYGE' where id=5; -update noar ti set b2='E51TQ8CWY2O9370GPECYGE' where id=5; -update noar tt set b0='6B5D7SRKWBVRD' where id=6; -update noar ti set b0='6B5D7SRKWBVRD' where id=6; -update noar tt set b1='BOKNV90GOXK7LS9DE94JZ4E3H130' where id=6; -update noar ti set b1='BOKNV90GOXK7LS9DE94JZ4E3H130' where id=6; -update noar tt set b2='0973T91EOUKAJ21KTO3UVDG2138XDE0P' where id=6; -update noar ti set b2='0973T91EOUKAJ21KTO3UVDG2138XDE0P' where id=6; -update noar tt set b0='E5EJ5O2KSMY301OH82D7QTLINLLAXO8' where id=7; -update noar ti set b0='E5EJ5O2KSMY301OH82D7QTLINLLAXO8' where id=7; -update noar tt set b1='2OO1VI791DPW' where id=7; -update noar ti set b1='2OO1VI791DPW' where id=7; -update noar tt set b2='M4L3WADCIDTSKP0K4B' where id=7; -update noar ti set b2='M4L3WADCIDTSKP0K4B' where id=7; -update noar tt set b0='OHLFBDOPP8LDRSVGFUKYF' where id=8; -update noar ti set b0='OHLFBDOPP8LDRSVGFUKYF' where id=8; -update noar tt set b1='HNGAG0PI2P14' where id=8; -update noar ti set b1='HNGAG0PI2P14' where id=8; -update noar tt set b2='LHO4A4W1ABLSI8OFLHLJ7ITQ0AJS08L' where id=8; -update noar ti set b2='LHO4A4W1ABLSI8OFLHLJ7ITQ0AJS08L' where id=8; -update noar tt set b0='1L4U80T47PB7QH9UB8EELVY6ZDF' where id=9; -update noar ti set b0='1L4U80T47PB7QH9UB8EELVY6ZDF' where id=9; -update noar tt set b1='4D8M2CDJ3HGPO9I8Q1IOBCIA' where id=9; -update noar ti set b1='4D8M2CDJ3HGPO9I8Q1IOBCIA' where id=9; -update noar tt set b2='XC8FQAYG7ZIJ33Y9GFND89NEZ' where id=9; -update noar ti set b2='XC8FQAYG7ZIJ33Y9GFND89NEZ' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 mediumblob not null, -b1 text not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='QGWQDDONQL5X25L8VNYUUXU' where id=1; -update noar ti set b0='QGWQDDONQL5X25L8VNYUUXU' where id=1; -update noar tt set b1='EBL959YUAGUP1EPG2520JJDFH7OTM7XZ' where id=1; -update noar ti set b1='EBL959YUAGUP1EPG2520JJDFH7OTM7XZ' where id=1; -update noar tt set b2='1M3E1RBQE4UQAEIYNL7ESD03J' where id=1; -update noar ti set b2='1M3E1RBQE4UQAEIYNL7ESD03J' where id=1; -update noar tt set b0='8TJ' where id=2; -update noar ti set b0='8TJ' where id=2; -update noar tt set b1='1Q3Y77861R3AA9GCECZZ6E9MDLZP' where id=2; -update noar ti set b1='1Q3Y77861R3AA9GCECZZ6E9MDLZP' where id=2; -update noar tt set b2='HUN0WK1W5DUDLPUOHW' where id=2; -update noar ti set b2='HUN0WK1W5DUDLPUOHW' where id=2; -update noar tt set b0='GEQB5UIWO18S2JCI4O8536FTLVF0CR9K' where id=3; -update noar ti set b0='GEQB5UIWO18S2JCI4O8536FTLVF0CR9K' where id=3; -update noar tt set b1='P1YBSPIH2ZRKBN6ES' where id=3; -update noar ti set b1='P1YBSPIH2ZRKBN6ES' where id=3; -update noar tt set b2='LB5AASRDMOTT2POT3HED081HMHY49YN' where id=3; -update noar ti set b2='LB5AASRDMOTT2POT3HED081HMHY49YN' where id=3; -update noar tt set b0='5DYIRSIV5ZXMTKHL90FJ3K23' where id=4; -update noar ti set b0='5DYIRSIV5ZXMTKHL90FJ3K23' where id=4; -update noar tt set b1='YRAOVCPOBGHZZXDJRBTE8ZOR9KLD2' where id=4; -update noar ti set b1='YRAOVCPOBGHZZXDJRBTE8ZOR9KLD2' where id=4; -update noar tt set b2='8S35YGWXSQY22PPWC8SR5V20' where id=4; -update noar ti set b2='8S35YGWXSQY22PPWC8SR5V20' where id=4; -update noar tt set b0='CM1P4AU' where id=5; -update noar ti set b0='CM1P4AU' where id=5; -update noar tt set b1='TFQBR6' where id=5; -update noar ti set b1='TFQBR6' where id=5; -update noar tt set b2='PBGEKEEWEJGA' where id=5; -update noar ti set b2='PBGEKEEWEJGA' where id=5; -update noar tt set b0='A1KAGH5DTD510F2AH7TI6Q6Z13LA27T' where id=6; -update noar ti set b0='A1KAGH5DTD510F2AH7TI6Q6Z13LA27T' where id=6; -update noar tt set b1='X8FD0OFUZ64GWTW2RY5JP' where id=6; -update noar ti set b1='X8FD0OFUZ64GWTW2RY5JP' where id=6; -update noar tt set b2='3P7CJ7PKQIDQZVSQUQIT6QC4EEIVX26' where id=6; -update noar ti set b2='3P7CJ7PKQIDQZVSQUQIT6QC4EEIVX26' where id=6; -update noar tt set b0='06136OVB9R' where id=7; -update noar ti set b0='06136OVB9R' where id=7; -update noar tt set b1='ECTIILXY4HY8NH11H' where id=7; -update noar ti set b1='ECTIILXY4HY8NH11H' where id=7; -update noar tt set b2='IC2P5EB' where id=7; -update noar ti set b2='IC2P5EB' where id=7; -update noar tt set b0='IGP12N09O1SVH' where id=8; -update noar ti set b0='IGP12N09O1SVH' where id=8; -update noar tt set b1='JRMWRF4CYVMU2IL2OJC331G8GC5' where id=8; -update noar ti set b1='JRMWRF4CYVMU2IL2OJC331G8GC5' where id=8; -update noar tt set b2='TRRJCPEGX3N13TX8' where id=8; -update noar ti set b2='TRRJCPEGX3N13TX8' where id=8; -update noar tt set b0='D563TB8' where id=9; -update noar ti set b0='D563TB8' where id=9; -update noar tt set b1='TNY' where id=9; -update noar ti set b1='TNY' where id=9; -update noar tt set b2='PBLTJHGO6UE' where id=9; -update noar ti set b2='PBLTJHGO6UE' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 mediumblob null, -b1 text null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='OJYDB8MWAB63YTG0E1JHFAPSEN8O39LG' where id=1; -update noar ti set b0='OJYDB8MWAB63YTG0E1JHFAPSEN8O39LG' where id=1; -update noar tt set b1='WEGWFTFTVR8TW7SII56CXYW' where id=1; -update noar ti set b1='WEGWFTFTVR8TW7SII56CXYW' where id=1; -update noar tt set b2='Y3NR81I9IF0XUF0MHY4IGB36' where id=1; -update noar ti set b2='Y3NR81I9IF0XUF0MHY4IGB36' where id=1; -update noar tt set b0='D' where id=2; -update noar ti set b0='D' where id=2; -update noar tt set b1='EKVU3NT3N0VK0YT4WI4V208D6P' where id=2; -update noar ti set b1='EKVU3NT3N0VK0YT4WI4V208D6P' where id=2; -update noar tt set b2='7N7CWUOSN0U30AEWR23F3J25' where id=2; -update noar ti set b2='7N7CWUOSN0U30AEWR23F3J25' where id=2; -update noar tt set b0='0DFBT' where id=3; -update noar ti set b0='0DFBT' where id=3; -update noar tt set b1='49QW73ZWRP501FZ62RV932VXQ80ZZZ1T' where id=3; -update noar ti set b1='49QW73ZWRP501FZ62RV932VXQ80ZZZ1T' where id=3; -update noar tt set b2='ITX2UTXA4USKKPCN9W0REEUYJSMSPJ' where id=3; -update noar ti set b2='ITX2UTXA4USKKPCN9W0REEUYJSMSPJ' where id=3; -update noar tt set b0='XRYLIKBG' where id=4; -update noar ti set b0='XRYLIKBG' where id=4; -update noar tt set b1='D1L4AVKB3PY29' where id=4; -update noar ti set b1='D1L4AVKB3PY29' where id=4; -update noar tt set b2='DY6P9IFKZGHA0O9QSP7Y48E2K0O3' where id=4; -update noar ti set b2='DY6P9IFKZGHA0O9QSP7Y48E2K0O3' where id=4; -update noar tt set b0='G' where id=5; -update noar ti set b0='G' where id=5; -update noar tt set b1='30DKW9NKEH2PLYT67' where id=5; -update noar ti set b1='30DKW9NKEH2PLYT67' where id=5; -update noar tt set b2='UYLWN4VI7YOJDY98BYC06H' where id=5; -update noar ti set b2='UYLWN4VI7YOJDY98BYC06H' where id=5; -update noar tt set b0='HD5C5FO62R60MV32' where id=6; -update noar ti set b0='HD5C5FO62R60MV32' where id=6; -update noar tt set b1='JPMT3ORK6X6B' where id=6; -update noar ti set b1='JPMT3ORK6X6B' where id=6; -update noar tt set b2='JMCN7IEYYPX5A7P7AKU' where id=6; -update noar ti set b2='JMCN7IEYYPX5A7P7AKU' where id=6; -update noar tt set b0='6ZT2CAC6SPGFJT' where id=7; -update noar ti set b0='6ZT2CAC6SPGFJT' where id=7; -update noar tt set b1='VWXZURFZ05JU1O2NEQUKAPUV4' where id=7; -update noar ti set b1='VWXZURFZ05JU1O2NEQUKAPUV4' where id=7; -update noar tt set b2='ZZ8DDB6FQC50ER9KZMX285' where id=7; -update noar ti set b2='ZZ8DDB6FQC50ER9KZMX285' where id=7; -update noar tt set b0='DZJGBEZX6I7UPE9TA' where id=8; -update noar ti set b0='DZJGBEZX6I7UPE9TA' where id=8; -update noar tt set b1='L27Q' where id=8; -update noar ti set b1='L27Q' where id=8; -update noar tt set b2='7UHPKHZWJY4H0P8VP7U4NULH19R0M' where id=8; -update noar ti set b2='7UHPKHZWJY4H0P8VP7U4NULH19R0M' where id=8; -update noar tt set b0='C0G51KDVAZ2BKY03FAY4E' where id=9; -update noar ti set b0='C0G51KDVAZ2BKY03FAY4E' where id=9; -update noar tt set b1='M5PCQ9U0G1VSKJ5RHL4HENT' where id=9; -update noar ti set b1='M5PCQ9U0G1VSKJ5RHL4HENT' where id=9; -update noar tt set b2='7PG5GFY0BINV4A' where id=9; -update noar ti set b2='7PG5GFY0BINV4A' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 mediumblob not null, -b1 text not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='WPLDP7C9S5COMWMF8L0UUJ' where id=1; -update noar ti set b0='WPLDP7C9S5COMWMF8L0UUJ' where id=1; -update noar tt set b1='S4QEXH0J9T' where id=1; -update noar ti set b1='S4QEXH0J9T' where id=1; -update noar tt set b2='ADA4K9BMN6Y7IR98WL' where id=1; -update noar ti set b2='ADA4K9BMN6Y7IR98WL' where id=1; -update noar tt set b0='1NN67JASBVRJ' where id=2; -update noar ti set b0='1NN67JASBVRJ' where id=2; -update noar tt set b1='DJP9MTVJMNF7M6DP4BRCKGT53' where id=2; -update noar ti set b1='DJP9MTVJMNF7M6DP4BRCKGT53' where id=2; -update noar tt set b2='X3YFQC62W25L2OMCZISXI2WP' where id=2; -update noar ti set b2='X3YFQC62W25L2OMCZISXI2WP' where id=2; -update noar tt set b0='KLCDLI5TTTM3TLT6PULCOHW' where id=3; -update noar ti set b0='KLCDLI5TTTM3TLT6PULCOHW' where id=3; -update noar tt set b1='8A4KA8V4DWXNK2UCMSNXDNZ0XIUMCK' where id=3; -update noar ti set b1='8A4KA8V4DWXNK2UCMSNXDNZ0XIUMCK' where id=3; -update noar tt set b2='WSKRRRSTW1VW4UJ9XBNUX3M' where id=3; -update noar ti set b2='WSKRRRSTW1VW4UJ9XBNUX3M' where id=3; -update noar tt set b0='ZDMKXU8JYR891BTOIZ050Y6EDB' where id=4; -update noar ti set b0='ZDMKXU8JYR891BTOIZ050Y6EDB' where id=4; -update noar tt set b1='J4XUPSONCZZDEI6IFW' where id=4; -update noar ti set b1='J4XUPSONCZZDEI6IFW' where id=4; -update noar tt set b2='U9WKYA6' where id=4; -update noar ti set b2='U9WKYA6' where id=4; -update noar tt set b0='G66' where id=5; -update noar ti set b0='G66' where id=5; -update noar tt set b1='KIFJN1NZGZDY5MVDRJQ' where id=5; -update noar ti set b1='KIFJN1NZGZDY5MVDRJQ' where id=5; -update noar tt set b2='QI2KOTI' where id=5; -update noar ti set b2='QI2KOTI' where id=5; -update noar tt set b0='6LI7VNF5DE7J4IBMOSKCR9693XCVVRE' where id=6; -update noar ti set b0='6LI7VNF5DE7J4IBMOSKCR9693XCVVRE' where id=6; -update noar tt set b1='JLIJWW1ENFYVXUX0O4FOW' where id=6; -update noar ti set b1='JLIJWW1ENFYVXUX0O4FOW' where id=6; -update noar tt set b2='7IML6T4324046OECV9J5RP0KRAL0' where id=6; -update noar ti set b2='7IML6T4324046OECV9J5RP0KRAL0' where id=6; -update noar tt set b0='FQVFWHN88E9XZ9KT' where id=7; -update noar ti set b0='FQVFWHN88E9XZ9KT' where id=7; -update noar tt set b1='ZCORTFD9TO' where id=7; -update noar ti set b1='ZCORTFD9TO' where id=7; -update noar tt set b2='NZWVZV5M7UEGZE412K48' where id=7; -update noar ti set b2='NZWVZV5M7UEGZE412K48' where id=7; -update noar tt set b0='14ZWGXXU02SJGP1R7ETFU5' where id=8; -update noar ti set b0='14ZWGXXU02SJGP1R7ETFU5' where id=8; -update noar tt set b1='MW9IVFHIBZDAYGC1F2KIV0E' where id=8; -update noar ti set b1='MW9IVFHIBZDAYGC1F2KIV0E' where id=8; -update noar tt set b2='OY' where id=8; -update noar ti set b2='OY' where id=8; -update noar tt set b0='ZCE1Z1' where id=9; -update noar ti set b0='ZCE1Z1' where id=9; -update noar tt set b1='ID6VRJF66OU8SN60EY' where id=9; -update noar ti set b1='ID6VRJF66OU8SN60EY' where id=9; -update noar tt set b2='DM39LR37P6XB7KQXY' where id=9; -update noar ti set b2='DM39LR37P6XB7KQXY' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 mediumblob null, -b1 text null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='MO26TDAU' where id=1; -update noar ti set b0='MO26TDAU' where id=1; -update noar tt set b1='OLY4PJ9DUHJRJ4MAT1WYDO8T03R69' where id=1; -update noar ti set b1='OLY4PJ9DUHJRJ4MAT1WYDO8T03R69' where id=1; -update noar tt set b2='M6JJZ08IG2MO99XAETZ70RM' where id=1; -update noar ti set b2='M6JJZ08IG2MO99XAETZ70RM' where id=1; -update noar tt set b0='B77CGU2C3' where id=2; -update noar ti set b0='B77CGU2C3' where id=2; -update noar tt set b1='9FGMC9UV' where id=2; -update noar ti set b1='9FGMC9UV' where id=2; -update noar tt set b2='PJXELC' where id=2; -update noar ti set b2='PJXELC' where id=2; -update noar tt set b0='HXGLD' where id=3; -update noar ti set b0='HXGLD' where id=3; -update noar tt set b1='C36IY80' where id=3; -update noar ti set b1='C36IY80' where id=3; -update noar tt set b2='PJPIRG2MO' where id=3; -update noar ti set b2='PJPIRG2MO' where id=3; -update noar tt set b0='7QZ1UONC' where id=4; -update noar ti set b0='7QZ1UONC' where id=4; -update noar tt set b1='DKSZ13EZV0H86XZG5E10U' where id=4; -update noar ti set b1='DKSZ13EZV0H86XZG5E10U' where id=4; -update noar tt set b2='WAX1MPIF2N2SXAI3NX' where id=4; -update noar ti set b2='WAX1MPIF2N2SXAI3NX' where id=4; -update noar tt set b0='P' where id=5; -update noar ti set b0='P' where id=5; -update noar tt set b1='WCNF845CIL32MU11UUST7' where id=5; -update noar ti set b1='WCNF845CIL32MU11UUST7' where id=5; -update noar tt set b2='7DPY2HIGM' where id=5; -update noar ti set b2='7DPY2HIGM' where id=5; -update noar tt set b0='XC9REDW3OFHXI08CWH4Q' where id=6; -update noar ti set b0='XC9REDW3OFHXI08CWH4Q' where id=6; -update noar tt set b1='R5N915M1Q0QI4EOP7' where id=6; -update noar ti set b1='R5N915M1Q0QI4EOP7' where id=6; -update noar tt set b2='TTK8KG5CCCN71SWMIK' where id=6; -update noar ti set b2='TTK8KG5CCCN71SWMIK' where id=6; -update noar tt set b0='RJPKUXAVTW252NE' where id=7; -update noar ti set b0='RJPKUXAVTW252NE' where id=7; -update noar tt set b1='HWCQBI7B965LGCS8UU3A' where id=7; -update noar ti set b1='HWCQBI7B965LGCS8UU3A' where id=7; -update noar tt set b2='G3P7O9PG4LD5Z8IMLTVT0K5E6' where id=7; -update noar ti set b2='G3P7O9PG4LD5Z8IMLTVT0K5E6' where id=7; -update noar tt set b0='QOBKPBE6VF45GYCNC' where id=8; -update noar ti set b0='QOBKPBE6VF45GYCNC' where id=8; -update noar tt set b1='A7MG33' where id=8; -update noar ti set b1='A7MG33' where id=8; -update noar tt set b2='6YTS36DH0ZTJ1JVF3PD07T968A' where id=8; -update noar ti set b2='6YTS36DH0ZTJ1JVF3PD07T968A' where id=8; -update noar tt set b0='9HQ3TSV' where id=9; -update noar ti set b0='9HQ3TSV' where id=9; -update noar tt set b1='VM82BLAHGL5T97UYA' where id=9; -update noar ti set b1='VM82BLAHGL5T97UYA' where id=9; -update noar tt set b2='BV7B20OH71VL3A7J' where id=9; -update noar ti set b2='BV7B20OH71VL3A7J' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 mediumblob not null, -b1 text not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='SQSFIG54XSZ1E' where id=1; -update noar ti set b0='SQSFIG54XSZ1E' where id=1; -update noar tt set b1='6BXXLC212IQEQ' where id=1; -update noar ti set b1='6BXXLC212IQEQ' where id=1; -update noar tt set b2='GYVTR' where id=1; -update noar ti set b2='GYVTR' where id=1; -update noar tt set b0='LMF3IIR5HK225OXPP' where id=2; -update noar ti set b0='LMF3IIR5HK225OXPP' where id=2; -update noar tt set b1='RR0F06FJBW' where id=2; -update noar ti set b1='RR0F06FJBW' where id=2; -update noar tt set b2='4AMQY64RN6LUME5TYAB519Q' where id=2; -update noar ti set b2='4AMQY64RN6LUME5TYAB519Q' where id=2; -update noar tt set b0='RYQU2MQ' where id=3; -update noar ti set b0='RYQU2MQ' where id=3; -update noar tt set b1='Z3T' where id=3; -update noar ti set b1='Z3T' where id=3; -update noar tt set b2='FEKQEZ1V3AXGTRZ' where id=3; -update noar ti set b2='FEKQEZ1V3AXGTRZ' where id=3; -update noar tt set b0='J0FM9KOZUR7RO7JRSOVL0UJ' where id=4; -update noar ti set b0='J0FM9KOZUR7RO7JRSOVL0UJ' where id=4; -update noar tt set b1='24QUOXMREDZ5AS2BMQHYMW' where id=4; -update noar ti set b1='24QUOXMREDZ5AS2BMQHYMW' where id=4; -update noar tt set b2='ECOGBNK9IPH0WQIXW7' where id=4; -update noar ti set b2='ECOGBNK9IPH0WQIXW7' where id=4; -update noar tt set b0='OCY6M8H3GGQ57T8HJG5YF9' where id=5; -update noar ti set b0='OCY6M8H3GGQ57T8HJG5YF9' where id=5; -update noar tt set b1='9J3GLLT7QGGNL5' where id=5; -update noar ti set b1='9J3GLLT7QGGNL5' where id=5; -update noar tt set b2='O' where id=5; -update noar ti set b2='O' where id=5; -update noar tt set b0='38G39L714NT2F6TJ2' where id=6; -update noar ti set b0='38G39L714NT2F6TJ2' where id=6; -update noar tt set b1='Y5O1P9JY' where id=6; -update noar ti set b1='Y5O1P9JY' where id=6; -update noar tt set b2='HPKLJ3M2LLA24J93N6AL5D' where id=6; -update noar ti set b2='HPKLJ3M2LLA24J93N6AL5D' where id=6; -update noar tt set b0='84FQUWELNZGNWUHXWCB4N4YQ5S' where id=7; -update noar ti set b0='84FQUWELNZGNWUHXWCB4N4YQ5S' where id=7; -update noar tt set b1='QNE3' where id=7; -update noar ti set b1='QNE3' where id=7; -update noar tt set b2='A4VSP8T3SSXQ' where id=7; -update noar ti set b2='A4VSP8T3SSXQ' where id=7; -update noar tt set b0='EXFL3VSS21ZYCLRW2UW4OVYYT' where id=8; -update noar ti set b0='EXFL3VSS21ZYCLRW2UW4OVYYT' where id=8; -update noar tt set b1='HCAHS6X6M92VVSC7P2' where id=8; -update noar ti set b1='HCAHS6X6M92VVSC7P2' where id=8; -update noar tt set b2='J8TWW74' where id=8; -update noar ti set b2='J8TWW74' where id=8; -update noar tt set b0='9LXGXJ4ERVU7D9Z' where id=9; -update noar ti set b0='9LXGXJ4ERVU7D9Z' where id=9; -update noar tt set b1='E' where id=9; -update noar ti set b1='E' where id=9; -update noar tt set b2='4STJCY7EQ74FUNJHA9C' where id=9; -update noar ti set b2='4STJCY7EQ74FUNJHA9C' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 mediumblob null, -b1 text null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='MEY' where id=1; -update noar ti set b0='MEY' where id=1; -update noar tt set b1='WO8KREUBEIEZLLN7BOSUO05FXSTMGX' where id=1; -update noar ti set b1='WO8KREUBEIEZLLN7BOSUO05FXSTMGX' where id=1; -update noar tt set b2='BHEXCELMKQZQ2FI9XCIZ' where id=1; -update noar ti set b2='BHEXCELMKQZQ2FI9XCIZ' where id=1; -update noar tt set b0='GR35XAX7DH0IVGCZXE' where id=2; -update noar ti set b0='GR35XAX7DH0IVGCZXE' where id=2; -update noar tt set b1='KIZHZ1' where id=2; -update noar ti set b1='KIZHZ1' where id=2; -update noar tt set b2='JVIUV8JDRF7LSREK43L7YEA8R0P' where id=2; -update noar ti set b2='JVIUV8JDRF7LSREK43L7YEA8R0P' where id=2; -update noar tt set b0='DCVA0MAQ' where id=3; -update noar ti set b0='DCVA0MAQ' where id=3; -update noar tt set b1='VSIV4KCPQVJN' where id=3; -update noar ti set b1='VSIV4KCPQVJN' where id=3; -update noar tt set b2='NURPT' where id=3; -update noar ti set b2='NURPT' where id=3; -update noar tt set b0='CBX256Z5QSS8TDK547BLJ8USDF' where id=4; -update noar ti set b0='CBX256Z5QSS8TDK547BLJ8USDF' where id=4; -update noar tt set b1='W' where id=4; -update noar ti set b1='W' where id=4; -update noar tt set b2='PHL73DJ8MIFYBXS8GQN00' where id=4; -update noar ti set b2='PHL73DJ8MIFYBXS8GQN00' where id=4; -update noar tt set b0='PDAPO' where id=5; -update noar ti set b0='PDAPO' where id=5; -update noar tt set b1='75BOFPWVTS0SX9H13U' where id=5; -update noar ti set b1='75BOFPWVTS0SX9H13U' where id=5; -update noar tt set b2='U' where id=5; -update noar ti set b2='U' where id=5; -update noar tt set b0='6TTBI9QBDL8YC0BQ' where id=6; -update noar ti set b0='6TTBI9QBDL8YC0BQ' where id=6; -update noar tt set b1='R0RFXKIK8Q229G84HCG65GPFYHYPV4' where id=6; -update noar ti set b1='R0RFXKIK8Q229G84HCG65GPFYHYPV4' where id=6; -update noar tt set b2='YLVD17U4C2J9OQWTEPB3LURN0XL0Y3G' where id=6; -update noar ti set b2='YLVD17U4C2J9OQWTEPB3LURN0XL0Y3G' where id=6; -update noar tt set b0='LK1DQH34TFB0CK5BA1I' where id=7; -update noar ti set b0='LK1DQH34TFB0CK5BA1I' where id=7; -update noar tt set b1='NQ3HCK' where id=7; -update noar ti set b1='NQ3HCK' where id=7; -update noar tt set b2='KNDF1DKQRH5PO92' where id=7; -update noar ti set b2='KNDF1DKQRH5PO92' where id=7; -update noar tt set b0='UEMG' where id=8; -update noar ti set b0='UEMG' where id=8; -update noar tt set b1='8CXCKX5NRK9NTZ6IQE5R' where id=8; -update noar ti set b1='8CXCKX5NRK9NTZ6IQE5R' where id=8; -update noar tt set b2='ENVP2Z6ADCZ7N' where id=8; -update noar ti set b2='ENVP2Z6ADCZ7N' where id=8; -update noar tt set b0='TH4AGQYIC2VTL' where id=9; -update noar ti set b0='TH4AGQYIC2VTL' where id=9; -update noar tt set b1='NO3XHO0U' where id=9; -update noar ti set b1='NO3XHO0U' where id=9; -update noar tt set b2='FOS0YAIHPEJ4GXN47ME6S2I34KDCRF5' where id=9; -update noar ti set b2='FOS0YAIHPEJ4GXN47ME6S2I34KDCRF5' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 mediumblob not null, -b1 text not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='47GCPQAS8Z' where id=1; -update noar ti set b0='47GCPQAS8Z' where id=1; -update noar tt set b1='RUUX6W0XPRGR1T' where id=1; -update noar ti set b1='RUUX6W0XPRGR1T' where id=1; -update noar tt set b2='O1OLWMDZE4N4KQTQ6V5SSQQ' where id=1; -update noar ti set b2='O1OLWMDZE4N4KQTQ6V5SSQQ' where id=1; -update noar tt set b0='5' where id=2; -update noar ti set b0='5' where id=2; -update noar tt set b1='2C16JT7MNVVYOOFGMCUH4H17UV2' where id=2; -update noar ti set b1='2C16JT7MNVVYOOFGMCUH4H17UV2' where id=2; -update noar tt set b2='HX4ZXAAAPJRGAEPNYGW' where id=2; -update noar ti set b2='HX4ZXAAAPJRGAEPNYGW' where id=2; -update noar tt set b0='UOEWA5QXDC' where id=3; -update noar ti set b0='UOEWA5QXDC' where id=3; -update noar tt set b1='Z6XUNYQK6CCEMFY1' where id=3; -update noar ti set b1='Z6XUNYQK6CCEMFY1' where id=3; -update noar tt set b2='VYBYWHFYAH8NZQSYSKBMI0X6T4V5PB' where id=3; -update noar ti set b2='VYBYWHFYAH8NZQSYSKBMI0X6T4V5PB' where id=3; -update noar tt set b0='RC28XF0SK9PK0ADQ' where id=4; -update noar ti set b0='RC28XF0SK9PK0ADQ' where id=4; -update noar tt set b1='Z3MJHR9Y' where id=4; -update noar ti set b1='Z3MJHR9Y' where id=4; -update noar tt set b2='PGVG9TYDNRXL4PHSNE2' where id=4; -update noar ti set b2='PGVG9TYDNRXL4PHSNE2' where id=4; -update noar tt set b0='Z8HXG3YMG81O' where id=5; -update noar ti set b0='Z8HXG3YMG81O' where id=5; -update noar tt set b1='HANBKEQB' where id=5; -update noar ti set b1='HANBKEQB' where id=5; -update noar tt set b2='WET8XPK0U46O04F2PWLYO' where id=5; -update noar ti set b2='WET8XPK0U46O04F2PWLYO' where id=5; -update noar tt set b0='1ZDVLUAH7SA3Y3C' where id=6; -update noar ti set b0='1ZDVLUAH7SA3Y3C' where id=6; -update noar tt set b1='7UXYUP8DL' where id=6; -update noar ti set b1='7UXYUP8DL' where id=6; -update noar tt set b2='43IEZTC48NRTT' where id=6; -update noar ti set b2='43IEZTC48NRTT' where id=6; -update noar tt set b0='CN0U6MFEDO87QXBTFV' where id=7; -update noar ti set b0='CN0U6MFEDO87QXBTFV' where id=7; -update noar tt set b1='12IR' where id=7; -update noar ti set b1='12IR' where id=7; -update noar tt set b2='AJ781Y60NOULD5D4EB6TRJ' where id=7; -update noar ti set b2='AJ781Y60NOULD5D4EB6TRJ' where id=7; -update noar tt set b0='F2R0ODT21WYB7UTUMMAX9QUT' where id=8; -update noar ti set b0='F2R0ODT21WYB7UTUMMAX9QUT' where id=8; -update noar tt set b1='UX96QNPUSYZ5N6' where id=8; -update noar ti set b1='UX96QNPUSYZ5N6' where id=8; -update noar tt set b2='KJPX7L' where id=8; -update noar ti set b2='KJPX7L' where id=8; -update noar tt set b0='HS9MW0WYQW1SOPDL9AFQ09RM' where id=9; -update noar ti set b0='HS9MW0WYQW1SOPDL9AFQ09RM' where id=9; -update noar tt set b1='2BN1M4X3C5151D634XWJ0F' where id=9; -update noar ti set b1='2BN1M4X3C5151D634XWJ0F' where id=9; -update noar tt set b2='3TF8SXGPMCDCUYXQVXFKYA1NX' where id=9; -update noar ti set b2='3TF8SXGPMCDCUYXQVXFKYA1NX' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 mediumblob null, -b1 text null, -b2 text null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='MV18' where id=1; -update noar ti set b0='MV18' where id=1; -update noar tt set b1='BBFXPWAZSE6R3KFIMM2KPW5' where id=1; -update noar ti set b1='BBFXPWAZSE6R3KFIMM2KPW5' where id=1; -update noar tt set b2='KM0ZBQMDVQBIZS80IHP2C' where id=1; -update noar ti set b2='KM0ZBQMDVQBIZS80IHP2C' where id=1; -update noar tt set b0='DRFLPZY511AXR8X722' where id=2; -update noar ti set b0='DRFLPZY511AXR8X722' where id=2; -update noar tt set b1='UZYAY9KJN6GN05N2Q4N15TK1FIGTQOK' where id=2; -update noar ti set b1='UZYAY9KJN6GN05N2Q4N15TK1FIGTQOK' where id=2; -update noar tt set b2='IW2GAUW4F83SDJML05MJNHVJLEH' where id=2; -update noar ti set b2='IW2GAUW4F83SDJML05MJNHVJLEH' where id=2; -update noar tt set b0='D06OK45UXZ52A1DTP7M1' where id=3; -update noar ti set b0='D06OK45UXZ52A1DTP7M1' where id=3; -update noar tt set b1='U' where id=3; -update noar ti set b1='U' where id=3; -update noar tt set b2='MOTJ7AML' where id=3; -update noar ti set b2='MOTJ7AML' where id=3; -update noar tt set b0='NJFIU7G28CN' where id=4; -update noar ti set b0='NJFIU7G28CN' where id=4; -update noar tt set b1='2RCIF4W' where id=4; -update noar ti set b1='2RCIF4W' where id=4; -update noar tt set b2='REBFM32' where id=4; -update noar ti set b2='REBFM32' where id=4; -update noar tt set b0='IVQMCZ9EFCI8BGMJ9Y8QVQVM4UGBAOD' where id=5; -update noar ti set b0='IVQMCZ9EFCI8BGMJ9Y8QVQVM4UGBAOD' where id=5; -update noar tt set b1='E5' where id=5; -update noar ti set b1='E5' where id=5; -update noar tt set b2='RL0RVKCO6UTR9B3TJ' where id=5; -update noar ti set b2='RL0RVKCO6UTR9B3TJ' where id=5; -update noar tt set b0='G' where id=6; -update noar ti set b0='G' where id=6; -update noar tt set b1='ZF' where id=6; -update noar ti set b1='ZF' where id=6; -update noar tt set b2='9M58ZXGHXIQZKMUH1ZJMM6BDQX4I' where id=6; -update noar ti set b2='9M58ZXGHXIQZKMUH1ZJMM6BDQX4I' where id=6; -update noar tt set b0='4NUHJK9Q4UBU9776I0ILL7OADOM33G' where id=7; -update noar ti set b0='4NUHJK9Q4UBU9776I0ILL7OADOM33G' where id=7; -update noar tt set b1='I4VIYZXAEF3RKS9PGRHQUZWMS5RNLT' where id=7; -update noar ti set b1='I4VIYZXAEF3RKS9PGRHQUZWMS5RNLT' where id=7; -update noar tt set b2='ER0OE7' where id=7; -update noar ti set b2='ER0OE7' where id=7; -update noar tt set b0='ZME8Q' where id=8; -update noar ti set b0='ZME8Q' where id=8; -update noar tt set b1='ESLK1' where id=8; -update noar ti set b1='ESLK1' where id=8; -update noar tt set b2='CAGDTXCI2MJ' where id=8; -update noar ti set b2='CAGDTXCI2MJ' where id=8; -update noar tt set b0='WEDXNTS76L0J55CIWBHJ7' where id=9; -update noar ti set b0='WEDXNTS76L0J55CIWBHJ7' where id=9; -update noar tt set b1='CDYAACCVDNH' where id=9; -update noar ti set b1='CDYAACCVDNH' where id=9; -update noar tt set b2='CREPE4E97E' where id=9; -update noar ti set b2='CREPE4E97E' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 mediumblob not null, -b1 text not null, -b2 text not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='QC8Y8WMF2K31HRB8K1BABCIFEK2O7ZT1' where id=1; -update noar ti set b0='QC8Y8WMF2K31HRB8K1BABCIFEK2O7ZT1' where id=1; -update noar tt set b1='FJHT4U2MD3E001UC840968924PVD' where id=1; -update noar ti set b1='FJHT4U2MD3E001UC840968924PVD' where id=1; -update noar tt set b2='7VVN5F4TJKXVG' where id=1; -update noar ti set b2='7VVN5F4TJKXVG' where id=1; -update noar tt set b0='KAO8X7OYFBI2WHB3UQN47J1M4J' where id=2; -update noar ti set b0='KAO8X7OYFBI2WHB3UQN47J1M4J' where id=2; -update noar tt set b1='VSRFYUKV8VT46VWAV' where id=2; -update noar ti set b1='VSRFYUKV8VT46VWAV' where id=2; -update noar tt set b2='F1FXID9F' where id=2; -update noar ti set b2='F1FXID9F' where id=2; -update noar tt set b0='C' where id=3; -update noar ti set b0='C' where id=3; -update noar tt set b1='LYQLD3MOJHFTLYQJZTW7D' where id=3; -update noar ti set b1='LYQLD3MOJHFTLYQJZTW7D' where id=3; -update noar tt set b2='AOR38IUWZXLUIQIV1' where id=3; -update noar ti set b2='AOR38IUWZXLUIQIV1' where id=3; -update noar tt set b0='0MPJ71PDA0Z6663Q' where id=4; -update noar ti set b0='0MPJ71PDA0Z6663Q' where id=4; -update noar tt set b1='P2AD5S' where id=4; -update noar ti set b1='P2AD5S' where id=4; -update noar tt set b2='TZQ4LHVDN2UFLZ0P' where id=4; -update noar ti set b2='TZQ4LHVDN2UFLZ0P' where id=4; -update noar tt set b0='CSGGA6LH3FDSKN9AXVMDQ1JJ314AB2BJ' where id=5; -update noar ti set b0='CSGGA6LH3FDSKN9AXVMDQ1JJ314AB2BJ' where id=5; -update noar tt set b1='XK9P4BMU6RC424CNBO0POJL8' where id=5; -update noar ti set b1='XK9P4BMU6RC424CNBO0POJL8' where id=5; -update noar tt set b2='DALCTHKLU5RT3P' where id=5; -update noar ti set b2='DALCTHKLU5RT3P' where id=5; -update noar tt set b0='DFZUWI09WO' where id=6; -update noar ti set b0='DFZUWI09WO' where id=6; -update noar tt set b1='PQDNREGTFT0A' where id=6; -update noar ti set b1='PQDNREGTFT0A' where id=6; -update noar tt set b2='TUI2HHEO4H1IIFWTQA3' where id=6; -update noar ti set b2='TUI2HHEO4H1IIFWTQA3' where id=6; -update noar tt set b0='77' where id=7; -update noar ti set b0='77' where id=7; -update noar tt set b1='NGZNLFE318H8VHKLU1Y8X6RCJI0L25B' where id=7; -update noar ti set b1='NGZNLFE318H8VHKLU1Y8X6RCJI0L25B' where id=7; -update noar tt set b2='L1MV' where id=7; -update noar ti set b2='L1MV' where id=7; -update noar tt set b0='EABNWWR5W8YP94LBL8A4S4BLEBCYCVI2' where id=8; -update noar ti set b0='EABNWWR5W8YP94LBL8A4S4BLEBCYCVI2' where id=8; -update noar tt set b1='E8IGWGKYLN6RH275FMCHYDSTW' where id=8; -update noar ti set b1='E8IGWGKYLN6RH275FMCHYDSTW' where id=8; -update noar tt set b2='HTRDE033P5NLT0ZXTCZ' where id=8; -update noar ti set b2='HTRDE033P5NLT0ZXTCZ' where id=8; -update noar tt set b0='GODI9RMP6' where id=9; -update noar ti set b0='GODI9RMP6' where id=9; -update noar tt set b1='XZRQT0PIFZHJI23FG' where id=9; -update noar ti set b1='XZRQT0PIFZHJI23FG' where id=9; -update noar tt set b2='XOWPY1BNL679JDHKBKY8G95EG3' where id=9; -update noar ti set b2='XOWPY1BNL679JDHKBKY8G95EG3' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 longblob null, -b1 tinyblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='AO1Q5U9DUO' where id=1; -update noar ti set b0='AO1Q5U9DUO' where id=1; -update noar tt set b1='2V80' where id=1; -update noar ti set b1='2V80' where id=1; -update noar tt set b2='H2DJRSWGQE31N4DCMGJG4E5' where id=1; -update noar ti set b2='H2DJRSWGQE31N4DCMGJG4E5' where id=1; -update noar tt set b0='C1EB85YC9F4E2A06H7NZJA' where id=2; -update noar ti set b0='C1EB85YC9F4E2A06H7NZJA' where id=2; -update noar tt set b1='0C95J97UME2LZXM' where id=2; -update noar ti set b1='0C95J97UME2LZXM' where id=2; -update noar tt set b2='DYAMC3LJ8JB7IIDXZWR7' where id=2; -update noar ti set b2='DYAMC3LJ8JB7IIDXZWR7' where id=2; -update noar tt set b0='8JGN0M2QJ6' where id=3; -update noar ti set b0='8JGN0M2QJ6' where id=3; -update noar tt set b1='1ZSV3C' where id=3; -update noar ti set b1='1ZSV3C' where id=3; -update noar tt set b2='WLXCGC4INPCHJIGZF04D53ROXCD' where id=3; -update noar ti set b2='WLXCGC4INPCHJIGZF04D53ROXCD' where id=3; -update noar tt set b0='BOBD4YMJPPVU5JUXOQ5Z7YDO' where id=4; -update noar ti set b0='BOBD4YMJPPVU5JUXOQ5Z7YDO' where id=4; -update noar tt set b1='TY3749KD8QI3IP16CXJH5' where id=4; -update noar ti set b1='TY3749KD8QI3IP16CXJH5' where id=4; -update noar tt set b2='8GH9PU1C7PSZB3BJ' where id=4; -update noar ti set b2='8GH9PU1C7PSZB3BJ' where id=4; -update noar tt set b0='7YA56URK0CR5VMXI8R7VATMWUVNT3BAN' where id=5; -update noar ti set b0='7YA56URK0CR5VMXI8R7VATMWUVNT3BAN' where id=5; -update noar tt set b1='5WJFTNMHH' where id=5; -update noar ti set b1='5WJFTNMHH' where id=5; -update noar tt set b2='IYX' where id=5; -update noar ti set b2='IYX' where id=5; -update noar tt set b0='5X0O7GYS66631NP8066L7EVYCMEZHCY' where id=6; -update noar ti set b0='5X0O7GYS66631NP8066L7EVYCMEZHCY' where id=6; -update noar tt set b1='4BLUDKH4CCCHU8E4K2F' where id=6; -update noar ti set b1='4BLUDKH4CCCHU8E4K2F' where id=6; -update noar tt set b2='B4IR' where id=6; -update noar ti set b2='B4IR' where id=6; -update noar tt set b0='7CYJF6U7DCZA3F9AXO9J' where id=7; -update noar ti set b0='7CYJF6U7DCZA3F9AXO9J' where id=7; -update noar tt set b1='Y0VE4DUYQWYVBLZ4SGAY' where id=7; -update noar ti set b1='Y0VE4DUYQWYVBLZ4SGAY' where id=7; -update noar tt set b2='W58MCELG8SR963AIJVXD8Q2U' where id=7; -update noar ti set b2='W58MCELG8SR963AIJVXD8Q2U' where id=7; -update noar tt set b0='CP8E8FM2XFYNHUP0K7YOFVVYEIZB0' where id=8; -update noar ti set b0='CP8E8FM2XFYNHUP0K7YOFVVYEIZB0' where id=8; -update noar tt set b1='ASQQ1O' where id=8; -update noar ti set b1='ASQQ1O' where id=8; -update noar tt set b2='KC528T2F40C5G8QMK75OM98T7B' where id=8; -update noar ti set b2='KC528T2F40C5G8QMK75OM98T7B' where id=8; -update noar tt set b0='BY1DWN2568BVQ860EZ12F5E7Q94MQ' where id=9; -update noar ti set b0='BY1DWN2568BVQ860EZ12F5E7Q94MQ' where id=9; -update noar tt set b1='OVKD6KYWHN' where id=9; -update noar ti set b1='OVKD6KYWHN' where id=9; -update noar tt set b2='J4NLTRTR2L8BCN0TX0A7OBQJXSDU4QMH' where id=9; -update noar ti set b2='J4NLTRTR2L8BCN0TX0A7OBQJXSDU4QMH' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 longblob not null, -b1 tinyblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='9K9' where id=1; -update noar ti set b0='9K9' where id=1; -update noar tt set b1='9DLH0DX2RCO' where id=1; -update noar ti set b1='9DLH0DX2RCO' where id=1; -update noar tt set b2='E' where id=1; -update noar ti set b2='E' where id=1; -update noar tt set b0='5FHW3MDI9WW4VAQJIQK9FS8WY0JHP3' where id=2; -update noar ti set b0='5FHW3MDI9WW4VAQJIQK9FS8WY0JHP3' where id=2; -update noar tt set b1='RWZ' where id=2; -update noar ti set b1='RWZ' where id=2; -update noar tt set b2='C1ZTZJF2THA1C' where id=2; -update noar ti set b2='C1ZTZJF2THA1C' where id=2; -update noar tt set b0='NHRAJ' where id=3; -update noar ti set b0='NHRAJ' where id=3; -update noar tt set b1='M9IFM79TMCWCV8IZZUSFUY0ST' where id=3; -update noar ti set b1='M9IFM79TMCWCV8IZZUSFUY0ST' where id=3; -update noar tt set b2='4F9H7I1K' where id=3; -update noar ti set b2='4F9H7I1K' where id=3; -update noar tt set b0='9COAH4ZYBHBLYZUSWTCYKL9KHX30SN' where id=4; -update noar ti set b0='9COAH4ZYBHBLYZUSWTCYKL9KHX30SN' where id=4; -update noar tt set b1='AVA5JQE5VTV76I1B18JKYWEPLMXK' where id=4; -update noar ti set b1='AVA5JQE5VTV76I1B18JKYWEPLMXK' where id=4; -update noar tt set b2='YPC1JFEN' where id=4; -update noar ti set b2='YPC1JFEN' where id=4; -update noar tt set b0='6R6FQ7OGEW5ZYPGRCGB8KIXVMJ' where id=5; -update noar ti set b0='6R6FQ7OGEW5ZYPGRCGB8KIXVMJ' where id=5; -update noar tt set b1='900SKJ4S' where id=5; -update noar ti set b1='900SKJ4S' where id=5; -update noar tt set b2='L8LUY297DXC6DMH24GQA5LDZFLDGY' where id=5; -update noar ti set b2='L8LUY297DXC6DMH24GQA5LDZFLDGY' where id=5; -update noar tt set b0='15B2E38A9PWIR2ZT5E02' where id=6; -update noar ti set b0='15B2E38A9PWIR2ZT5E02' where id=6; -update noar tt set b1='K3EQT3HVFNCOKX7KVEBPVV0623DC' where id=6; -update noar ti set b1='K3EQT3HVFNCOKX7KVEBPVV0623DC' where id=6; -update noar tt set b2='O1YW52AJF' where id=6; -update noar ti set b2='O1YW52AJF' where id=6; -update noar tt set b0='MPDOF2HY4G706LF4FTSSFCH4UAJ' where id=7; -update noar ti set b0='MPDOF2HY4G706LF4FTSSFCH4UAJ' where id=7; -update noar tt set b1='PGH2B44H' where id=7; -update noar ti set b1='PGH2B44H' where id=7; -update noar tt set b2='ZWM5D8B' where id=7; -update noar ti set b2='ZWM5D8B' where id=7; -update noar tt set b0='PMI296281Z1MZNC9FEZQI' where id=8; -update noar ti set b0='PMI296281Z1MZNC9FEZQI' where id=8; -update noar tt set b1='WUTL8LBBT4E6L5OCQ7' where id=8; -update noar ti set b1='WUTL8LBBT4E6L5OCQ7' where id=8; -update noar tt set b2='81633JX' where id=8; -update noar ti set b2='81633JX' where id=8; -update noar tt set b0='4C6HTXWGN3W8R9HE' where id=9; -update noar ti set b0='4C6HTXWGN3W8R9HE' where id=9; -update noar tt set b1='VCEE6B2423S' where id=9; -update noar ti set b1='VCEE6B2423S' where id=9; -update noar tt set b2='OHT2X' where id=9; -update noar ti set b2='OHT2X' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 longblob null, -b1 tinyblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='SAM56HN8BG7QD80G8' where id=1; -update noar ti set b0='SAM56HN8BG7QD80G8' where id=1; -update noar tt set b1='R15XSOH2OSR4YAFE9ODY' where id=1; -update noar ti set b1='R15XSOH2OSR4YAFE9ODY' where id=1; -update noar tt set b2='0IQ6JWUO9BB6KZOJPV08P4XNHKK71U' where id=1; -update noar ti set b2='0IQ6JWUO9BB6KZOJPV08P4XNHKK71U' where id=1; -update noar tt set b0='LZ9T40P9' where id=2; -update noar ti set b0='LZ9T40P9' where id=2; -update noar tt set b1='D3SMXZ78I4S4K7WOMHW5T4C9R4WS9V' where id=2; -update noar ti set b1='D3SMXZ78I4S4K7WOMHW5T4C9R4WS9V' where id=2; -update noar tt set b2='8NPZFBYPQ3YSV6FO' where id=2; -update noar ti set b2='8NPZFBYPQ3YSV6FO' where id=2; -update noar tt set b0='TC5IHPDFRQWI3HKXLI9HC' where id=3; -update noar ti set b0='TC5IHPDFRQWI3HKXLI9HC' where id=3; -update noar tt set b1='7K2L0X8U0OVOIEDSMW86X' where id=3; -update noar ti set b1='7K2L0X8U0OVOIEDSMW86X' where id=3; -update noar tt set b2='W6HVMDLNMEFES8CRS' where id=3; -update noar ti set b2='W6HVMDLNMEFES8CRS' where id=3; -update noar tt set b0='OT53A2L1E5PVH' where id=4; -update noar ti set b0='OT53A2L1E5PVH' where id=4; -update noar tt set b1='5PUH44ZFM' where id=4; -update noar ti set b1='5PUH44ZFM' where id=4; -update noar tt set b2='VSEGOVEEN2O' where id=4; -update noar ti set b2='VSEGOVEEN2O' where id=4; -update noar tt set b0='45CGK5WD3YGL06' where id=5; -update noar ti set b0='45CGK5WD3YGL06' where id=5; -update noar tt set b1='BBYC0LCVOI5' where id=5; -update noar ti set b1='BBYC0LCVOI5' where id=5; -update noar tt set b2='AM151X28L4TXXXN7TU746X0MNZPM' where id=5; -update noar ti set b2='AM151X28L4TXXXN7TU746X0MNZPM' where id=5; -update noar tt set b0='1Y6' where id=6; -update noar ti set b0='1Y6' where id=6; -update noar tt set b1='HZ633R2Q9C' where id=6; -update noar ti set b1='HZ633R2Q9C' where id=6; -update noar tt set b2='8LMDSC8SR5JAR2OGHOMPEY5L5NBL6' where id=6; -update noar ti set b2='8LMDSC8SR5JAR2OGHOMPEY5L5NBL6' where id=6; -update noar tt set b0='PLPHB' where id=7; -update noar ti set b0='PLPHB' where id=7; -update noar tt set b1='1W8KXWQ7J2QK4N1JXGS2I6FCOIN' where id=7; -update noar ti set b1='1W8KXWQ7J2QK4N1JXGS2I6FCOIN' where id=7; -update noar tt set b2='GH8F6FJ29MY' where id=7; -update noar ti set b2='GH8F6FJ29MY' where id=7; -update noar tt set b0='O4CI9KUCGCW0V3JF8NBHXXMM51' where id=8; -update noar ti set b0='O4CI9KUCGCW0V3JF8NBHXXMM51' where id=8; -update noar tt set b1='OOVHQN9YMUXP0EDWNBCN7S8V' where id=8; -update noar ti set b1='OOVHQN9YMUXP0EDWNBCN7S8V' where id=8; -update noar tt set b2='LMMRQYAYYLWUS6' where id=8; -update noar ti set b2='LMMRQYAYYLWUS6' where id=8; -update noar tt set b0='YPG2VBTQGS' where id=9; -update noar ti set b0='YPG2VBTQGS' where id=9; -update noar tt set b1='O1WJ4JTW3AA0USFZNPCHB6IXNL' where id=9; -update noar ti set b1='O1WJ4JTW3AA0USFZNPCHB6IXNL' where id=9; -update noar tt set b2='1WQCD2FF' where id=9; -update noar ti set b2='1WQCD2FF' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 longblob not null, -b1 tinyblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='6S8VG4MAQA84CDN6UBD3J' where id=1; -update noar ti set b0='6S8VG4MAQA84CDN6UBD3J' where id=1; -update noar tt set b1='YFPFW55NM' where id=1; -update noar ti set b1='YFPFW55NM' where id=1; -update noar tt set b2='I9VI569FANSAE3XRWT2' where id=1; -update noar ti set b2='I9VI569FANSAE3XRWT2' where id=1; -update noar tt set b0='S' where id=2; -update noar ti set b0='S' where id=2; -update noar tt set b1='7K0MJV3C8P693M778O5V6K9ERG' where id=2; -update noar ti set b1='7K0MJV3C8P693M778O5V6K9ERG' where id=2; -update noar tt set b2='22IIESGLKV655X6ILO3RF5H1F' where id=2; -update noar ti set b2='22IIESGLKV655X6ILO3RF5H1F' where id=2; -update noar tt set b0='4SPA43Y1P4AAX4SNX8RPQ8QN9' where id=3; -update noar ti set b0='4SPA43Y1P4AAX4SNX8RPQ8QN9' where id=3; -update noar tt set b1='6' where id=3; -update noar ti set b1='6' where id=3; -update noar tt set b2='PAISUR28Z3FJXQWQ8SGP' where id=3; -update noar ti set b2='PAISUR28Z3FJXQWQ8SGP' where id=3; -update noar tt set b0='BOG3GB1AVT4PW' where id=4; -update noar ti set b0='BOG3GB1AVT4PW' where id=4; -update noar tt set b1='N8RWDFKEN4KP3OJQH' where id=4; -update noar ti set b1='N8RWDFKEN4KP3OJQH' where id=4; -update noar tt set b2='PNX3VV' where id=4; -update noar ti set b2='PNX3VV' where id=4; -update noar tt set b0='M' where id=5; -update noar ti set b0='M' where id=5; -update noar tt set b1='NXHRY6WIRK8DTGKKT7J2ASZ5I3F' where id=5; -update noar ti set b1='NXHRY6WIRK8DTGKKT7J2ASZ5I3F' where id=5; -update noar tt set b2='C0OMGNA85F' where id=5; -update noar ti set b2='C0OMGNA85F' where id=5; -update noar tt set b0='X7E9PF5W81VPECZ5U4G' where id=6; -update noar ti set b0='X7E9PF5W81VPECZ5U4G' where id=6; -update noar tt set b1='NM4038656KF77157N6' where id=6; -update noar ti set b1='NM4038656KF77157N6' where id=6; -update noar tt set b2='UX1VR87WWOZ50LBTIJE70M' where id=6; -update noar ti set b2='UX1VR87WWOZ50LBTIJE70M' where id=6; -update noar tt set b0='E0E5E9YUWLF' where id=7; -update noar ti set b0='E0E5E9YUWLF' where id=7; -update noar tt set b1='7WZJMK' where id=7; -update noar ti set b1='7WZJMK' where id=7; -update noar tt set b2='OO95XV6PACZH79YCRK' where id=7; -update noar ti set b2='OO95XV6PACZH79YCRK' where id=7; -update noar tt set b0='ZHDPAYP57BF29STXJYI' where id=8; -update noar ti set b0='ZHDPAYP57BF29STXJYI' where id=8; -update noar tt set b1='YRPQ10EMVCC0FM837T' where id=8; -update noar ti set b1='YRPQ10EMVCC0FM837T' where id=8; -update noar tt set b2='M6549RAU5ZTZ92W' where id=8; -update noar ti set b2='M6549RAU5ZTZ92W' where id=8; -update noar tt set b0='XWGAR890BTT2E2IF5PXSIFA' where id=9; -update noar ti set b0='XWGAR890BTT2E2IF5PXSIFA' where id=9; -update noar tt set b1='M3J35HC6BFQ1K900' where id=9; -update noar ti set b1='M3J35HC6BFQ1K900' where id=9; -update noar tt set b2='MPCC44697O40O' where id=9; -update noar ti set b2='MPCC44697O40O' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 longblob null, -b1 tinyblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='2QQUGS60TPE' where id=1; -update noar ti set b0='2QQUGS60TPE' where id=1; -update noar tt set b1='OD' where id=1; -update noar ti set b1='OD' where id=1; -update noar tt set b2='2QIIC55' where id=1; -update noar ti set b2='2QIIC55' where id=1; -update noar tt set b0='MRJLC2Z' where id=2; -update noar ti set b0='MRJLC2Z' where id=2; -update noar tt set b1='FUKJ2' where id=2; -update noar ti set b1='FUKJ2' where id=2; -update noar tt set b2='MC4M' where id=2; -update noar ti set b2='MC4M' where id=2; -update noar tt set b0='L2TXBHOASM14BLBVH3F92HX' where id=3; -update noar ti set b0='L2TXBHOASM14BLBVH3F92HX' where id=3; -update noar tt set b1='KRC' where id=3; -update noar ti set b1='KRC' where id=3; -update noar tt set b2='CH905BEE0YZBWE5UQTEY' where id=3; -update noar ti set b2='CH905BEE0YZBWE5UQTEY' where id=3; -update noar tt set b0='1K9V2T0HARGXHT7W' where id=4; -update noar ti set b0='1K9V2T0HARGXHT7W' where id=4; -update noar tt set b1='6RD3VD1E' where id=4; -update noar ti set b1='6RD3VD1E' where id=4; -update noar tt set b2='S0Q5NQFY7EC1DSNKR80' where id=4; -update noar ti set b2='S0Q5NQFY7EC1DSNKR80' where id=4; -update noar tt set b0='6S' where id=5; -update noar ti set b0='6S' where id=5; -update noar tt set b1='H7TXMBG5AQKYX0MEQ6S7DBS' where id=5; -update noar ti set b1='H7TXMBG5AQKYX0MEQ6S7DBS' where id=5; -update noar tt set b2='T6VF1E1J7WPOJGV22G2HN6R11WSRMU6' where id=5; -update noar ti set b2='T6VF1E1J7WPOJGV22G2HN6R11WSRMU6' where id=5; -update noar tt set b0='TSEVF' where id=6; -update noar ti set b0='TSEVF' where id=6; -update noar tt set b1='28JC0KDPQP0SIKD849TFGOGXM' where id=6; -update noar ti set b1='28JC0KDPQP0SIKD849TFGOGXM' where id=6; -update noar tt set b2='ZTSGA0RR1PYFAXAA1RJ7WZ' where id=6; -update noar ti set b2='ZTSGA0RR1PYFAXAA1RJ7WZ' where id=6; -update noar tt set b0='1RC5JR1NWDGQ2' where id=7; -update noar ti set b0='1RC5JR1NWDGQ2' where id=7; -update noar tt set b1='IO8V0YARYH1YLO6DXX' where id=7; -update noar ti set b1='IO8V0YARYH1YLO6DXX' where id=7; -update noar tt set b2='M50' where id=7; -update noar ti set b2='M50' where id=7; -update noar tt set b0='TCV53HBRVIRICVOH4N6K7ZIDW' where id=8; -update noar ti set b0='TCV53HBRVIRICVOH4N6K7ZIDW' where id=8; -update noar tt set b1='5AYQP99305I' where id=8; -update noar ti set b1='5AYQP99305I' where id=8; -update noar tt set b2='N0R323A7CLL1SL4YRG3' where id=8; -update noar ti set b2='N0R323A7CLL1SL4YRG3' where id=8; -update noar tt set b0='F0JZW67YWB7' where id=9; -update noar ti set b0='F0JZW67YWB7' where id=9; -update noar tt set b1='1ENYGRL9' where id=9; -update noar ti set b1='1ENYGRL9' where id=9; -update noar tt set b2='C6ECU7ZXZ528I26WI' where id=9; -update noar ti set b2='C6ECU7ZXZ528I26WI' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 longblob not null, -b1 tinyblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='T8NSVY70MOJ2ETMHEP0N' where id=1; -update noar ti set b0='T8NSVY70MOJ2ETMHEP0N' where id=1; -update noar tt set b1='1Y5N5CVJRI590G' where id=1; -update noar ti set b1='1Y5N5CVJRI590G' where id=1; -update noar tt set b2='GHM8OHW' where id=1; -update noar ti set b2='GHM8OHW' where id=1; -update noar tt set b0='6S74ZO0I' where id=2; -update noar ti set b0='6S74ZO0I' where id=2; -update noar tt set b1='SB0ZH000IQ18NN0AH6P6ESHKCUC8E2AH' where id=2; -update noar ti set b1='SB0ZH000IQ18NN0AH6P6ESHKCUC8E2AH' where id=2; -update noar tt set b2='S1RD2FS' where id=2; -update noar ti set b2='S1RD2FS' where id=2; -update noar tt set b0='9ALNRHQEF5XLPH6' where id=3; -update noar ti set b0='9ALNRHQEF5XLPH6' where id=3; -update noar tt set b1='9O76H' where id=3; -update noar ti set b1='9O76H' where id=3; -update noar tt set b2='ABX4J7DTW7WBWC' where id=3; -update noar ti set b2='ABX4J7DTW7WBWC' where id=3; -update noar tt set b0='2FK59KPVTTB2C73ADSD5KA4C' where id=4; -update noar ti set b0='2FK59KPVTTB2C73ADSD5KA4C' where id=4; -update noar tt set b1='PMQFFW' where id=4; -update noar ti set b1='PMQFFW' where id=4; -update noar tt set b2='JR2JK8MNHH6J6VED29M0V17QZIV' where id=4; -update noar ti set b2='JR2JK8MNHH6J6VED29M0V17QZIV' where id=4; -update noar tt set b0='J0J949UY7HY6PL' where id=5; -update noar ti set b0='J0J949UY7HY6PL' where id=5; -update noar tt set b1='GEG9TMW8R0' where id=5; -update noar ti set b1='GEG9TMW8R0' where id=5; -update noar tt set b2='TPIYH7UZ0YRZUE6BCX' where id=5; -update noar ti set b2='TPIYH7UZ0YRZUE6BCX' where id=5; -update noar tt set b0='5IDJCQP4QIS9INXHNM' where id=6; -update noar ti set b0='5IDJCQP4QIS9INXHNM' where id=6; -update noar tt set b1='2' where id=6; -update noar ti set b1='2' where id=6; -update noar tt set b2='EG0LA5PCMA4CF7' where id=6; -update noar ti set b2='EG0LA5PCMA4CF7' where id=6; -update noar tt set b0='ZR2R6V753JDT3RJ' where id=7; -update noar ti set b0='ZR2R6V753JDT3RJ' where id=7; -update noar tt set b1='ECOV20CT003622M2SC37POU1US' where id=7; -update noar ti set b1='ECOV20CT003622M2SC37POU1US' where id=7; -update noar tt set b2='KD4GA34DSP' where id=7; -update noar ti set b2='KD4GA34DSP' where id=7; -update noar tt set b0='Z6DMP9' where id=8; -update noar ti set b0='Z6DMP9' where id=8; -update noar tt set b1='GEA9LTKCUY355LRH' where id=8; -update noar ti set b1='GEA9LTKCUY355LRH' where id=8; -update noar tt set b2='WDOW8PNXTWDZZ8GP1NPL5R26LIS9' where id=8; -update noar ti set b2='WDOW8PNXTWDZZ8GP1NPL5R26LIS9' where id=8; -update noar tt set b0='5LL1EAPYJ61KWOKKBPHZ2KA' where id=9; -update noar ti set b0='5LL1EAPYJ61KWOKKBPHZ2KA' where id=9; -update noar tt set b1='3H9IOO' where id=9; -update noar ti set b1='3H9IOO' where id=9; -update noar tt set b2='DDVWEORJ0YX7RJWSGOR' where id=9; -update noar ti set b2='DDVWEORJ0YX7RJWSGOR' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 longblob null, -b1 tinyblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='0BWCLHYO278EPHVO6URJ24' where id=1; -update noar ti set b0='0BWCLHYO278EPHVO6URJ24' where id=1; -update noar tt set b1='8AK0YL81MIJWH2RMMNWCYHYY1GYVG' where id=1; -update noar ti set b1='8AK0YL81MIJWH2RMMNWCYHYY1GYVG' where id=1; -update noar tt set b2='01SK8MRA9HBWHBEYJQ2RPL' where id=1; -update noar ti set b2='01SK8MRA9HBWHBEYJQ2RPL' where id=1; -update noar tt set b0='IV2RDYXOMOR877BW9R' where id=2; -update noar ti set b0='IV2RDYXOMOR877BW9R' where id=2; -update noar tt set b1='PN76KOCRHYZXJB2MNE' where id=2; -update noar ti set b1='PN76KOCRHYZXJB2MNE' where id=2; -update noar tt set b2='4' where id=2; -update noar ti set b2='4' where id=2; -update noar tt set b0='TJVXQKNV544V6I1EMB' where id=3; -update noar ti set b0='TJVXQKNV544V6I1EMB' where id=3; -update noar tt set b1='3NVX1LKP89REHKNQYNIW' where id=3; -update noar ti set b1='3NVX1LKP89REHKNQYNIW' where id=3; -update noar tt set b2='SIBATQUYCPQUKIVGL32L42Q2U7OSRPZ7' where id=3; -update noar ti set b2='SIBATQUYCPQUKIVGL32L42Q2U7OSRPZ7' where id=3; -update noar tt set b0='YGNWP03WN4OV' where id=4; -update noar ti set b0='YGNWP03WN4OV' where id=4; -update noar tt set b1='KBBY3SLSIO3H9VW760427DML07APJ' where id=4; -update noar ti set b1='KBBY3SLSIO3H9VW760427DML07APJ' where id=4; -update noar tt set b2='I4C6STI5EZPIUCB47' where id=4; -update noar ti set b2='I4C6STI5EZPIUCB47' where id=4; -update noar tt set b0='6HMYTMBOHK7ZG7HI' where id=5; -update noar ti set b0='6HMYTMBOHK7ZG7HI' where id=5; -update noar tt set b1='2YBE6W2LISOLJ2TOL83ANX' where id=5; -update noar ti set b1='2YBE6W2LISOLJ2TOL83ANX' where id=5; -update noar tt set b2='N4LBGJIRV5UJUC6ZU0N5UIDH' where id=5; -update noar ti set b2='N4LBGJIRV5UJUC6ZU0N5UIDH' where id=5; -update noar tt set b0='KYIJLX' where id=6; -update noar ti set b0='KYIJLX' where id=6; -update noar tt set b1='2EG3NAKA7XLIJZZ0GENA5KPY' where id=6; -update noar ti set b1='2EG3NAKA7XLIJZZ0GENA5KPY' where id=6; -update noar tt set b2='WCBFPTLC7' where id=6; -update noar ti set b2='WCBFPTLC7' where id=6; -update noar tt set b0='A5Y9ZQM0G5AHPM2JMEDKLMBWCCRI' where id=7; -update noar ti set b0='A5Y9ZQM0G5AHPM2JMEDKLMBWCCRI' where id=7; -update noar tt set b1='Q7M' where id=7; -update noar ti set b1='Q7M' where id=7; -update noar tt set b2='GC1P5' where id=7; -update noar ti set b2='GC1P5' where id=7; -update noar tt set b0='QMXRY5M8PLXZ7LGTNWNWELOXPE' where id=8; -update noar ti set b0='QMXRY5M8PLXZ7LGTNWNWELOXPE' where id=8; -update noar tt set b1='FURDKNG4YI35XMOKPJ' where id=8; -update noar ti set b1='FURDKNG4YI35XMOKPJ' where id=8; -update noar tt set b2='Q7MV00AYRYNPZR6B5GW4ID2S2QA' where id=8; -update noar ti set b2='Q7MV00AYRYNPZR6B5GW4ID2S2QA' where id=8; -update noar tt set b0='801F3' where id=9; -update noar ti set b0='801F3' where id=9; -update noar tt set b1='ABGSOMIFS2TEFZLG2OH4S28ND' where id=9; -update noar ti set b1='ABGSOMIFS2TEFZLG2OH4S28ND' where id=9; -update noar tt set b2='0B' where id=9; -update noar ti set b2='0B' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 longblob not null, -b1 tinyblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='HYULH0EP5M8' where id=1; -update noar ti set b0='HYULH0EP5M8' where id=1; -update noar tt set b1='T9QEY2GNZ09V6SQ7SP' where id=1; -update noar ti set b1='T9QEY2GNZ09V6SQ7SP' where id=1; -update noar tt set b2='9FY4MXBQ82NZDO8ZQOY1B' where id=1; -update noar ti set b2='9FY4MXBQ82NZDO8ZQOY1B' where id=1; -update noar tt set b0='091LJ8FUTIA30IXFB2SY6' where id=2; -update noar ti set b0='091LJ8FUTIA30IXFB2SY6' where id=2; -update noar tt set b1='01BTTHIHI52M8ZLMVLO08ROL82NMC7F' where id=2; -update noar ti set b1='01BTTHIHI52M8ZLMVLO08ROL82NMC7F' where id=2; -update noar tt set b2='8VT8Y' where id=2; -update noar ti set b2='8VT8Y' where id=2; -update noar tt set b0='99OT5FQ' where id=3; -update noar ti set b0='99OT5FQ' where id=3; -update noar tt set b1='WICHM8MB6Q3F5M3OCECL7CO5' where id=3; -update noar ti set b1='WICHM8MB6Q3F5M3OCECL7CO5' where id=3; -update noar tt set b2='3RWK9JB3W7M4ZYSPU73ESH8RMWSW2N4' where id=3; -update noar ti set b2='3RWK9JB3W7M4ZYSPU73ESH8RMWSW2N4' where id=3; -update noar tt set b0='RT28R567061I' where id=4; -update noar ti set b0='RT28R567061I' where id=4; -update noar tt set b1='2G7BY2I79' where id=4; -update noar ti set b1='2G7BY2I79' where id=4; -update noar tt set b2='T' where id=4; -update noar ti set b2='T' where id=4; -update noar tt set b0='SHQW8BAXW6RYLN48O24LO8' where id=5; -update noar ti set b0='SHQW8BAXW6RYLN48O24LO8' where id=5; -update noar tt set b1='JOUTFFQZQCPCLMZRP' where id=5; -update noar ti set b1='JOUTFFQZQCPCLMZRP' where id=5; -update noar tt set b2='QNPC00ZJQ' where id=5; -update noar ti set b2='QNPC00ZJQ' where id=5; -update noar tt set b0='U4CQNM' where id=6; -update noar ti set b0='U4CQNM' where id=6; -update noar tt set b1='LBTTDH' where id=6; -update noar ti set b1='LBTTDH' where id=6; -update noar tt set b2='X25T0ZP3SMSWW7TE3IAB6GG151X' where id=6; -update noar ti set b2='X25T0ZP3SMSWW7TE3IAB6GG151X' where id=6; -update noar tt set b0='VSEYXELJNC4RO37RI6VTCIWQ9K9DD' where id=7; -update noar ti set b0='VSEYXELJNC4RO37RI6VTCIWQ9K9DD' where id=7; -update noar tt set b1='AM1K2Y78M0NYXTH6CG' where id=7; -update noar ti set b1='AM1K2Y78M0NYXTH6CG' where id=7; -update noar tt set b2='I5PCD9F3T9N8O7SYHB9QSU9J' where id=7; -update noar ti set b2='I5PCD9F3T9N8O7SYHB9QSU9J' where id=7; -update noar tt set b0='ECDO82LO' where id=8; -update noar ti set b0='ECDO82LO' where id=8; -update noar tt set b1='5UGU7XK' where id=8; -update noar ti set b1='5UGU7XK' where id=8; -update noar tt set b2='8AUBTFNUGF36SGSO3S' where id=8; -update noar ti set b2='8AUBTFNUGF36SGSO3S' where id=8; -update noar tt set b0='XRPVTL9V4WJP5C1W5Z5W1MWYNKU8' where id=9; -update noar ti set b0='XRPVTL9V4WJP5C1W5Z5W1MWYNKU8' where id=9; -update noar tt set b1='JQ3QW5VNJML1' where id=9; -update noar ti set b1='JQ3QW5VNJML1' where id=9; -update noar tt set b2='YY4NJ6VQEVAG6R182ACA8GHB' where id=9; -update noar ti set b2='YY4NJ6VQEVAG6R182ACA8GHB' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 longblob null, -b1 tinyblob null, -b2 text null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='9OAH7ZQKU326WS89' where id=1; -update noar ti set b0='9OAH7ZQKU326WS89' where id=1; -update noar tt set b1='URDN20WMFHSVETY' where id=1; -update noar ti set b1='URDN20WMFHSVETY' where id=1; -update noar tt set b2='C58B2DR2VTZ1JWLDXWD25UCL7O4SSV7' where id=1; -update noar ti set b2='C58B2DR2VTZ1JWLDXWD25UCL7O4SSV7' where id=1; -update noar tt set b0='N9USYEY1NWE' where id=2; -update noar ti set b0='N9USYEY1NWE' where id=2; -update noar tt set b1='YXAA801C8NCNCGK84C94IOWPP' where id=2; -update noar ti set b1='YXAA801C8NCNCGK84C94IOWPP' where id=2; -update noar tt set b2='YN3PCLXOTCVCJ5OWXOIUIPLYWPOP' where id=2; -update noar ti set b2='YN3PCLXOTCVCJ5OWXOIUIPLYWPOP' where id=2; -update noar tt set b0='N6UY69VK70TDUTXXR26JTGI2GE' where id=3; -update noar ti set b0='N6UY69VK70TDUTXXR26JTGI2GE' where id=3; -update noar tt set b1='QOGCPSDN5VPFW7611SXRCMMT1GGL6TC' where id=3; -update noar ti set b1='QOGCPSDN5VPFW7611SXRCMMT1GGL6TC' where id=3; -update noar tt set b2='AFM28GUN26CSE3' where id=3; -update noar ti set b2='AFM28GUN26CSE3' where id=3; -update noar tt set b0='UWOPMSTKSSMHGL0MWI15AD' where id=4; -update noar ti set b0='UWOPMSTKSSMHGL0MWI15AD' where id=4; -update noar tt set b1='26XMMIWK0Q' where id=4; -update noar ti set b1='26XMMIWK0Q' where id=4; -update noar tt set b2='MRFDVNRRVDNO3H' where id=4; -update noar ti set b2='MRFDVNRRVDNO3H' where id=4; -update noar tt set b0='V96NNPMYCA9ZMLJ9D01QD' where id=5; -update noar ti set b0='V96NNPMYCA9ZMLJ9D01QD' where id=5; -update noar tt set b1='0' where id=5; -update noar ti set b1='0' where id=5; -update noar tt set b2='2F2RML5OI48950RIF378W' where id=5; -update noar ti set b2='2F2RML5OI48950RIF378W' where id=5; -update noar tt set b0='BPY695C7AHD' where id=6; -update noar ti set b0='BPY695C7AHD' where id=6; -update noar tt set b1='248OQ9GSR2RYXBWDC4KL8X1IZ' where id=6; -update noar ti set b1='248OQ9GSR2RYXBWDC4KL8X1IZ' where id=6; -update noar tt set b2='VVG3V' where id=6; -update noar ti set b2='VVG3V' where id=6; -update noar tt set b0='IU8' where id=7; -update noar ti set b0='IU8' where id=7; -update noar tt set b1='2MDLCF1HBPK' where id=7; -update noar ti set b1='2MDLCF1HBPK' where id=7; -update noar tt set b2='DHANDJYN13HKRGMHU97XU7LTHFJ04' where id=7; -update noar ti set b2='DHANDJYN13HKRGMHU97XU7LTHFJ04' where id=7; -update noar tt set b0='PMKN6JH7M8LRSAUI77NKWG0' where id=8; -update noar ti set b0='PMKN6JH7M8LRSAUI77NKWG0' where id=8; -update noar tt set b1='CWP6S5YLYR' where id=8; -update noar ti set b1='CWP6S5YLYR' where id=8; -update noar tt set b2='8NDVQJY' where id=8; -update noar ti set b2='8NDVQJY' where id=8; -update noar tt set b0='95OQ48VEO5NUU5O' where id=9; -update noar ti set b0='95OQ48VEO5NUU5O' where id=9; -update noar tt set b1='QLS' where id=9; -update noar ti set b1='QLS' where id=9; -update noar tt set b2='3T9RVG' where id=9; -update noar ti set b2='3T9RVG' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 longblob not null, -b1 tinyblob not null, -b2 text not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='PDSTKPDZE91' where id=1; -update noar ti set b0='PDSTKPDZE91' where id=1; -update noar tt set b1='E3' where id=1; -update noar ti set b1='E3' where id=1; -update noar tt set b2='JS' where id=1; -update noar ti set b2='JS' where id=1; -update noar tt set b0='F58' where id=2; -update noar ti set b0='F58' where id=2; -update noar tt set b1='2TO70GQPNANV2N66MMM6BO' where id=2; -update noar ti set b1='2TO70GQPNANV2N66MMM6BO' where id=2; -update noar tt set b2='BRZRB0HCX575NDPLZO3O475AH' where id=2; -update noar ti set b2='BRZRB0HCX575NDPLZO3O475AH' where id=2; -update noar tt set b0='E1NFTPA91D722R84FGZLIC' where id=3; -update noar ti set b0='E1NFTPA91D722R84FGZLIC' where id=3; -update noar tt set b1='ZXT03M7HGKP4SMTPQVR5L' where id=3; -update noar ti set b1='ZXT03M7HGKP4SMTPQVR5L' where id=3; -update noar tt set b2='FZK0NDUE7AF' where id=3; -update noar ti set b2='FZK0NDUE7AF' where id=3; -update noar tt set b0='IWPG63U6C8D' where id=4; -update noar ti set b0='IWPG63U6C8D' where id=4; -update noar tt set b1='0P4' where id=4; -update noar ti set b1='0P4' where id=4; -update noar tt set b2='N2QF' where id=4; -update noar ti set b2='N2QF' where id=4; -update noar tt set b0='OGR8QE52KQN0MOI1CBQ0CVERT2' where id=5; -update noar ti set b0='OGR8QE52KQN0MOI1CBQ0CVERT2' where id=5; -update noar tt set b1='9' where id=5; -update noar ti set b1='9' where id=5; -update noar tt set b2='523RCD1AE' where id=5; -update noar ti set b2='523RCD1AE' where id=5; -update noar tt set b0='1ZDG0QNTS3N7HZSLOS' where id=6; -update noar ti set b0='1ZDG0QNTS3N7HZSLOS' where id=6; -update noar tt set b1='42SRZSWXYCCB4H3JQWXPEV1H' where id=6; -update noar ti set b1='42SRZSWXYCCB4H3JQWXPEV1H' where id=6; -update noar tt set b2='YFO' where id=6; -update noar ti set b2='YFO' where id=6; -update noar tt set b0='ILFGIKC3CXIWBZ5N68XCAG' where id=7; -update noar ti set b0='ILFGIKC3CXIWBZ5N68XCAG' where id=7; -update noar tt set b1='69WLZBPZE06Y2ILA5X6T' where id=7; -update noar ti set b1='69WLZBPZE06Y2ILA5X6T' where id=7; -update noar tt set b2='CB2RZSYO060H04L' where id=7; -update noar ti set b2='CB2RZSYO060H04L' where id=7; -update noar tt set b0='T49IQ0OD1KBKBW1G87S9HN0TMXC6' where id=8; -update noar ti set b0='T49IQ0OD1KBKBW1G87S9HN0TMXC6' where id=8; -update noar tt set b1='13' where id=8; -update noar ti set b1='13' where id=8; -update noar tt set b2='BSQD1YMXZ2NX0S9OGW50BAJ' where id=8; -update noar ti set b2='BSQD1YMXZ2NX0S9OGW50BAJ' where id=8; -update noar tt set b0='O6' where id=9; -update noar ti set b0='O6' where id=9; -update noar tt set b1='CK1I41K4KL0IN2NLYRXTAXWLW' where id=9; -update noar ti set b1='CK1I41K4KL0IN2NLYRXTAXWLW' where id=9; -update noar tt set b2='II8LMTGKMBFQ1E02RFB2N2Q0CLUZ' where id=9; -update noar ti set b2='II8LMTGKMBFQ1E02RFB2N2Q0CLUZ' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 longblob null, -b1 blob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='FYCQ4S8' where id=1; -update noar ti set b0='FYCQ4S8' where id=1; -update noar tt set b1='35B' where id=1; -update noar ti set b1='35B' where id=1; -update noar tt set b2='P8VN7P687AL48LX5GSZADPBNXFPD4C' where id=1; -update noar ti set b2='P8VN7P687AL48LX5GSZADPBNXFPD4C' where id=1; -update noar tt set b0='PLLTKRB02' where id=2; -update noar ti set b0='PLLTKRB02' where id=2; -update noar tt set b1='X8E6V5OVJL2GHBI2P6' where id=2; -update noar ti set b1='X8E6V5OVJL2GHBI2P6' where id=2; -update noar tt set b2='TIJ8MT3MGQGUB3AFEX' where id=2; -update noar ti set b2='TIJ8MT3MGQGUB3AFEX' where id=2; -update noar tt set b0='H78VKU4401' where id=3; -update noar ti set b0='H78VKU4401' where id=3; -update noar tt set b1='CCM22' where id=3; -update noar ti set b1='CCM22' where id=3; -update noar tt set b2='7A03CT9XZH3ER1SFY' where id=3; -update noar ti set b2='7A03CT9XZH3ER1SFY' where id=3; -update noar tt set b0='EYT4P9YTVTJTNULH59N1K' where id=4; -update noar ti set b0='EYT4P9YTVTJTNULH59N1K' where id=4; -update noar tt set b1='84O63N84MW6G1RCTN' where id=4; -update noar ti set b1='84O63N84MW6G1RCTN' where id=4; -update noar tt set b2='HPBKWC2CXFUFUDFOISLA05CHIBMQ6' where id=4; -update noar ti set b2='HPBKWC2CXFUFUDFOISLA05CHIBMQ6' where id=4; -update noar tt set b0='N8MF9PCA4Z6YX134' where id=5; -update noar ti set b0='N8MF9PCA4Z6YX134' where id=5; -update noar tt set b1='VVN9233GFFLJTF73H' where id=5; -update noar ti set b1='VVN9233GFFLJTF73H' where id=5; -update noar tt set b2='RHTNFYN2JJ7S3EHDZY696YHM82Y' where id=5; -update noar ti set b2='RHTNFYN2JJ7S3EHDZY696YHM82Y' where id=5; -update noar tt set b0='8FKKBVSQ2DD82Y3D853FEYWLH' where id=6; -update noar ti set b0='8FKKBVSQ2DD82Y3D853FEYWLH' where id=6; -update noar tt set b1='R7OZFKH0BXI2HTLSHY40TQUEZ6F' where id=6; -update noar ti set b1='R7OZFKH0BXI2HTLSHY40TQUEZ6F' where id=6; -update noar tt set b2='CQBC461FFJYUM68O0VR1ECIDMD2UIQ' where id=6; -update noar ti set b2='CQBC461FFJYUM68O0VR1ECIDMD2UIQ' where id=6; -update noar tt set b0='0RPIXAGCIBDD7U7J2' where id=7; -update noar ti set b0='0RPIXAGCIBDD7U7J2' where id=7; -update noar tt set b1='1ZR196R3BKHH349JP9PRJWD' where id=7; -update noar ti set b1='1ZR196R3BKHH349JP9PRJWD' where id=7; -update noar tt set b2='ND352LZPIGODOAE87MJS0EKH8LT676L' where id=7; -update noar ti set b2='ND352LZPIGODOAE87MJS0EKH8LT676L' where id=7; -update noar tt set b0='7DH3TV' where id=8; -update noar ti set b0='7DH3TV' where id=8; -update noar tt set b1='XRT54KYS58Y9FM4OOJC0U8C6DCND' where id=8; -update noar ti set b1='XRT54KYS58Y9FM4OOJC0U8C6DCND' where id=8; -update noar tt set b2='QS5702EDN5GBQMBSMNXT' where id=8; -update noar ti set b2='QS5702EDN5GBQMBSMNXT' where id=8; -update noar tt set b0='V45OU6BZ1P' where id=9; -update noar ti set b0='V45OU6BZ1P' where id=9; -update noar tt set b1='J85UR68X4N3RF5QNNLM4OPE8QV' where id=9; -update noar ti set b1='J85UR68X4N3RF5QNNLM4OPE8QV' where id=9; -update noar tt set b2='QO' where id=9; -update noar ti set b2='QO' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 longblob not null, -b1 blob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='KI3LKGOFDHFP9648RD2N48BBBP8F' where id=1; -update noar ti set b0='KI3LKGOFDHFP9648RD2N48BBBP8F' where id=1; -update noar tt set b1='1AGDVES6MMFRDUFDTBHGBC43BIN2' where id=1; -update noar ti set b1='1AGDVES6MMFRDUFDTBHGBC43BIN2' where id=1; -update noar tt set b2='BDQI5O1ALFOEWZHNMF7Q42ERH9' where id=1; -update noar ti set b2='BDQI5O1ALFOEWZHNMF7Q42ERH9' where id=1; -update noar tt set b0='TH8MZGQ7RARK9F0A088LHWJXTU7RQ9Y' where id=2; -update noar ti set b0='TH8MZGQ7RARK9F0A088LHWJXTU7RQ9Y' where id=2; -update noar tt set b1='OYB7L67O8RP9OAQ' where id=2; -update noar ti set b1='OYB7L67O8RP9OAQ' where id=2; -update noar tt set b2='3U5RHVIDLFNU3RDLCY' where id=2; -update noar ti set b2='3U5RHVIDLFNU3RDLCY' where id=2; -update noar tt set b0='82IM1ATOAOWSVWR62TXT9T' where id=3; -update noar ti set b0='82IM1ATOAOWSVWR62TXT9T' where id=3; -update noar tt set b1='Q4A' where id=3; -update noar ti set b1='Q4A' where id=3; -update noar tt set b2='32U53FTIF90QIF9DBFYDQ51' where id=3; -update noar ti set b2='32U53FTIF90QIF9DBFYDQ51' where id=3; -update noar tt set b0='OL5LBLVZOKDEM66RV39' where id=4; -update noar ti set b0='OL5LBLVZOKDEM66RV39' where id=4; -update noar tt set b1='ZG6T9O9WG7W8KX0ANYRD' where id=4; -update noar ti set b1='ZG6T9O9WG7W8KX0ANYRD' where id=4; -update noar tt set b2='HZQ34JJ9RVX003VKTGQKZPV9Q' where id=4; -update noar ti set b2='HZQ34JJ9RVX003VKTGQKZPV9Q' where id=4; -update noar tt set b0='W0UTC7ZE9UQQO' where id=5; -update noar ti set b0='W0UTC7ZE9UQQO' where id=5; -update noar tt set b1='SF9M1332U3LPWMA5Y7' where id=5; -update noar ti set b1='SF9M1332U3LPWMA5Y7' where id=5; -update noar tt set b2='TOA7NBKVBY953' where id=5; -update noar ti set b2='TOA7NBKVBY953' where id=5; -update noar tt set b0='XJ' where id=6; -update noar ti set b0='XJ' where id=6; -update noar tt set b1='3INUXN7RBVWIBI6VH85' where id=6; -update noar ti set b1='3INUXN7RBVWIBI6VH85' where id=6; -update noar tt set b2='1DPZSY9Z7XPB0VHMQQBOF8W7XZOH' where id=6; -update noar ti set b2='1DPZSY9Z7XPB0VHMQQBOF8W7XZOH' where id=6; -update noar tt set b0='X3E875' where id=7; -update noar ti set b0='X3E875' where id=7; -update noar tt set b1='8S1M9VHOUC3RK3DRZZ' where id=7; -update noar ti set b1='8S1M9VHOUC3RK3DRZZ' where id=7; -update noar tt set b2='DAXXE30KXBCJ2GSK7T64YKHKGDBLGC2' where id=7; -update noar ti set b2='DAXXE30KXBCJ2GSK7T64YKHKGDBLGC2' where id=7; -update noar tt set b0='84Y7F35ABG9BYK04EFFOGLI89N' where id=8; -update noar ti set b0='84Y7F35ABG9BYK04EFFOGLI89N' where id=8; -update noar tt set b1='99LFZWRY9WGSHLHFPP6QKGZVLLHU747D' where id=8; -update noar ti set b1='99LFZWRY9WGSHLHFPP6QKGZVLLHU747D' where id=8; -update noar tt set b2='H0RBGA2BY1396M48VC3E4ZGRXTJHVSF' where id=8; -update noar ti set b2='H0RBGA2BY1396M48VC3E4ZGRXTJHVSF' where id=8; -update noar tt set b0='H' where id=9; -update noar ti set b0='H' where id=9; -update noar tt set b1='BI8090ZMCTBV6A8O0M1FZQU' where id=9; -update noar ti set b1='BI8090ZMCTBV6A8O0M1FZQU' where id=9; -update noar tt set b2='1YNO52GZFN80LITZ69' where id=9; -update noar ti set b2='1YNO52GZFN80LITZ69' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 longblob null, -b1 blob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='P7GBXU2I' where id=1; -update noar ti set b0='P7GBXU2I' where id=1; -update noar tt set b1='H' where id=1; -update noar ti set b1='H' where id=1; -update noar tt set b2='ZL5RMN4PU' where id=1; -update noar ti set b2='ZL5RMN4PU' where id=1; -update noar tt set b0='KTMJ7DC693YHSIDX' where id=2; -update noar ti set b0='KTMJ7DC693YHSIDX' where id=2; -update noar tt set b1='61DW7JEP4JTXVSD94ZVGYN9' where id=2; -update noar ti set b1='61DW7JEP4JTXVSD94ZVGYN9' where id=2; -update noar tt set b2='RVHWFX8LCL8F' where id=2; -update noar ti set b2='RVHWFX8LCL8F' where id=2; -update noar tt set b0='CSEUQIHDL6XISQG1FY' where id=3; -update noar ti set b0='CSEUQIHDL6XISQG1FY' where id=3; -update noar tt set b1='9XO7KNHSNOUCXWZGT2VXK8Z3YUI' where id=3; -update noar ti set b1='9XO7KNHSNOUCXWZGT2VXK8Z3YUI' where id=3; -update noar tt set b2='814IJMG93S' where id=3; -update noar ti set b2='814IJMG93S' where id=3; -update noar tt set b0='6WXCOYCDPYB9DZJMWJDPFH6KV90RMS5' where id=4; -update noar ti set b0='6WXCOYCDPYB9DZJMWJDPFH6KV90RMS5' where id=4; -update noar tt set b1='H2YLU8VFWJQQUP' where id=4; -update noar ti set b1='H2YLU8VFWJQQUP' where id=4; -update noar tt set b2='QNNZKNW62JDZAS' where id=4; -update noar ti set b2='QNNZKNW62JDZAS' where id=4; -update noar tt set b0='0CLBPFMSZCFQ7VP' where id=5; -update noar ti set b0='0CLBPFMSZCFQ7VP' where id=5; -update noar tt set b1='TLPWMYSFOBTN' where id=5; -update noar ti set b1='TLPWMYSFOBTN' where id=5; -update noar tt set b2='AZZ2' where id=5; -update noar ti set b2='AZZ2' where id=5; -update noar tt set b0='VI54HTTGSSG9FGXEA' where id=6; -update noar ti set b0='VI54HTTGSSG9FGXEA' where id=6; -update noar tt set b1='W43M91NONCI4B6GA6GMMNPCOY38QP0' where id=6; -update noar ti set b1='W43M91NONCI4B6GA6GMMNPCOY38QP0' where id=6; -update noar tt set b2='6B1S2LJXDI7Z4M4N5BYW9M5' where id=6; -update noar ti set b2='6B1S2LJXDI7Z4M4N5BYW9M5' where id=6; -update noar tt set b0='BJ98ALF1' where id=7; -update noar ti set b0='BJ98ALF1' where id=7; -update noar tt set b1='IBQ6YU36AGR11W' where id=7; -update noar ti set b1='IBQ6YU36AGR11W' where id=7; -update noar tt set b2='RHUP7LK5KRYMIYQZH1ZM5Y8' where id=7; -update noar ti set b2='RHUP7LK5KRYMIYQZH1ZM5Y8' where id=7; -update noar tt set b0='6SV3Y7UQT779WX0G3' where id=8; -update noar ti set b0='6SV3Y7UQT779WX0G3' where id=8; -update noar tt set b1='11M1EZXN5X1RMN81LDS610C' where id=8; -update noar ti set b1='11M1EZXN5X1RMN81LDS610C' where id=8; -update noar tt set b2='UUH14XTJVMG9IMJF7' where id=8; -update noar ti set b2='UUH14XTJVMG9IMJF7' where id=8; -update noar tt set b0='FJSCNC5D96ALI50BUDBG' where id=9; -update noar ti set b0='FJSCNC5D96ALI50BUDBG' where id=9; -update noar tt set b1='0D3NY2R2903CQ4S2A3AR' where id=9; -update noar ti set b1='0D3NY2R2903CQ4S2A3AR' where id=9; -update noar tt set b2='Y4YN1R' where id=9; -update noar ti set b2='Y4YN1R' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 longblob not null, -b1 blob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='RSV1XSY00FF' where id=1; -update noar ti set b0='RSV1XSY00FF' where id=1; -update noar tt set b1='STZUCWW' where id=1; -update noar ti set b1='STZUCWW' where id=1; -update noar tt set b2='W7ANLT9PJHKJW3CZUS' where id=1; -update noar ti set b2='W7ANLT9PJHKJW3CZUS' where id=1; -update noar tt set b0='YZ9A7ISZME1H4' where id=2; -update noar ti set b0='YZ9A7ISZME1H4' where id=2; -update noar tt set b1='DRNP7XEK7BIY8Q3TS6GGJWF0169BP' where id=2; -update noar ti set b1='DRNP7XEK7BIY8Q3TS6GGJWF0169BP' where id=2; -update noar tt set b2='PYZ9O7WNWH1DE' where id=2; -update noar ti set b2='PYZ9O7WNWH1DE' where id=2; -update noar tt set b0='37' where id=3; -update noar ti set b0='37' where id=3; -update noar tt set b1='G2XHVK9WREITW4FW' where id=3; -update noar ti set b1='G2XHVK9WREITW4FW' where id=3; -update noar tt set b2='TGJC7WT5XP0OXLKI' where id=3; -update noar ti set b2='TGJC7WT5XP0OXLKI' where id=3; -update noar tt set b0='RUYO092MKJ2D4NZBYVNRDE1E3' where id=4; -update noar ti set b0='RUYO092MKJ2D4NZBYVNRDE1E3' where id=4; -update noar tt set b1='80F8GBYCNKU3X2I39' where id=4; -update noar ti set b1='80F8GBYCNKU3X2I39' where id=4; -update noar tt set b2='KZN8BYISTCYF7OBIU' where id=4; -update noar ti set b2='KZN8BYISTCYF7OBIU' where id=4; -update noar tt set b0='FZ4AFEU65A' where id=5; -update noar ti set b0='FZ4AFEU65A' where id=5; -update noar tt set b1='RU' where id=5; -update noar ti set b1='RU' where id=5; -update noar tt set b2='PGN28I70YFPT7HSR1FMU0CQH' where id=5; -update noar ti set b2='PGN28I70YFPT7HSR1FMU0CQH' where id=5; -update noar tt set b0='G083EX25WVGXC5F7Y' where id=6; -update noar ti set b0='G083EX25WVGXC5F7Y' where id=6; -update noar tt set b1='7YLRA7BHA0NW5' where id=6; -update noar ti set b1='7YLRA7BHA0NW5' where id=6; -update noar tt set b2='CR1CE5JY04K' where id=6; -update noar ti set b2='CR1CE5JY04K' where id=6; -update noar tt set b0='F' where id=7; -update noar ti set b0='F' where id=7; -update noar tt set b1='CY68LEQMQ224DKWJM' where id=7; -update noar ti set b1='CY68LEQMQ224DKWJM' where id=7; -update noar tt set b2='7WEQT8U' where id=7; -update noar ti set b2='7WEQT8U' where id=7; -update noar tt set b0='7ARPD9VPZO' where id=8; -update noar ti set b0='7ARPD9VPZO' where id=8; -update noar tt set b1='HUORAOXM13NQM6TIUAHRUVYFCMAL6KE4' where id=8; -update noar ti set b1='HUORAOXM13NQM6TIUAHRUVYFCMAL6KE4' where id=8; -update noar tt set b2='9BPCXLB' where id=8; -update noar ti set b2='9BPCXLB' where id=8; -update noar tt set b0='CEZLV1BOUKKQ30EJ' where id=9; -update noar ti set b0='CEZLV1BOUKKQ30EJ' where id=9; -update noar tt set b1='H0Y' where id=9; -update noar ti set b1='H0Y' where id=9; -update noar tt set b2='2H0F' where id=9; -update noar ti set b2='2H0F' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 longblob null, -b1 blob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='PKZ07U' where id=1; -update noar ti set b0='PKZ07U' where id=1; -update noar tt set b1='RQDZV72DDNECMNRL' where id=1; -update noar ti set b1='RQDZV72DDNECMNRL' where id=1; -update noar tt set b2='DFGTB33X' where id=1; -update noar ti set b2='DFGTB33X' where id=1; -update noar tt set b0='FH4EO7Y9RAC6TUYUWWZ5C13J70' where id=2; -update noar ti set b0='FH4EO7Y9RAC6TUYUWWZ5C13J70' where id=2; -update noar tt set b1='O9AZUPNJRM5D' where id=2; -update noar ti set b1='O9AZUPNJRM5D' where id=2; -update noar tt set b2='8CQTJ3HKHVML5E89' where id=2; -update noar ti set b2='8CQTJ3HKHVML5E89' where id=2; -update noar tt set b0='5EN' where id=3; -update noar ti set b0='5EN' where id=3; -update noar tt set b1='3' where id=3; -update noar ti set b1='3' where id=3; -update noar tt set b2='BLLT2PIIJ9SET531ICELVCUL' where id=3; -update noar ti set b2='BLLT2PIIJ9SET531ICELVCUL' where id=3; -update noar tt set b0='HHHB7DOZ41OT9K0ZT6AXHO' where id=4; -update noar ti set b0='HHHB7DOZ41OT9K0ZT6AXHO' where id=4; -update noar tt set b1='QWL89319SJ07NLNF' where id=4; -update noar ti set b1='QWL89319SJ07NLNF' where id=4; -update noar tt set b2='Q8XM48VXSM87QNZJFD1MIUWEUSZ8SJ0' where id=4; -update noar ti set b2='Q8XM48VXSM87QNZJFD1MIUWEUSZ8SJ0' where id=4; -update noar tt set b0='MI7V9CGT' where id=5; -update noar ti set b0='MI7V9CGT' where id=5; -update noar tt set b1='F4D2TA' where id=5; -update noar ti set b1='F4D2TA' where id=5; -update noar tt set b2='75' where id=5; -update noar ti set b2='75' where id=5; -update noar tt set b0='X5' where id=6; -update noar ti set b0='X5' where id=6; -update noar tt set b1='GSGBU4CLLDRZC2' where id=6; -update noar ti set b1='GSGBU4CLLDRZC2' where id=6; -update noar tt set b2='U8OADT7WWE5WQDAYMCK9F0Q04ZFEN' where id=6; -update noar ti set b2='U8OADT7WWE5WQDAYMCK9F0Q04ZFEN' where id=6; -update noar tt set b0='Y7OPDYU47AQF' where id=7; -update noar ti set b0='Y7OPDYU47AQF' where id=7; -update noar tt set b1='TQAA04AE3VZAS14Y71ITL0' where id=7; -update noar ti set b1='TQAA04AE3VZAS14Y71ITL0' where id=7; -update noar tt set b2='WGQJI40Y16NUIZAAQKSKXNN39' where id=7; -update noar ti set b2='WGQJI40Y16NUIZAAQKSKXNN39' where id=7; -update noar tt set b0='E2O' where id=8; -update noar ti set b0='E2O' where id=8; -update noar tt set b1='64M7YPD8' where id=8; -update noar ti set b1='64M7YPD8' where id=8; -update noar tt set b2='J' where id=8; -update noar ti set b2='J' where id=8; -update noar tt set b0='Z' where id=9; -update noar ti set b0='Z' where id=9; -update noar tt set b1='XLDS2S24' where id=9; -update noar ti set b1='XLDS2S24' where id=9; -update noar tt set b2='HLA2LL5N7QS3LK9T14AX' where id=9; -update noar ti set b2='HLA2LL5N7QS3LK9T14AX' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 longblob not null, -b1 blob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='ODFQBMOJ9C5HW2GEUTIO1ULWZJG5EMY' where id=1; -update noar ti set b0='ODFQBMOJ9C5HW2GEUTIO1ULWZJG5EMY' where id=1; -update noar tt set b1='1CK2HUAF52QFKLOEEXLI6IU20TN5VZB' where id=1; -update noar ti set b1='1CK2HUAF52QFKLOEEXLI6IU20TN5VZB' where id=1; -update noar tt set b2='ZQNKH9GGAFKINFTVSZV' where id=1; -update noar ti set b2='ZQNKH9GGAFKINFTVSZV' where id=1; -update noar tt set b0='JAQ1XIYE4OH28' where id=2; -update noar ti set b0='JAQ1XIYE4OH28' where id=2; -update noar tt set b1='95FGL5Y924ZKR3ZGVC7O6JRK3U98FR1G' where id=2; -update noar ti set b1='95FGL5Y924ZKR3ZGVC7O6JRK3U98FR1G' where id=2; -update noar tt set b2='GUH2I' where id=2; -update noar ti set b2='GUH2I' where id=2; -update noar tt set b0='XHVFXPRGELBLWQZTRQQRAS' where id=3; -update noar ti set b0='XHVFXPRGELBLWQZTRQQRAS' where id=3; -update noar tt set b1='FYNGE6QKP7I8LYPLDY9KUV7CBNL' where id=3; -update noar ti set b1='FYNGE6QKP7I8LYPLDY9KUV7CBNL' where id=3; -update noar tt set b2='HLC302TMZOWGF77P94723' where id=3; -update noar ti set b2='HLC302TMZOWGF77P94723' where id=3; -update noar tt set b0='V42L6H9ESXZE6YM0TI0HJ' where id=4; -update noar ti set b0='V42L6H9ESXZE6YM0TI0HJ' where id=4; -update noar tt set b1='J8ELZNRLVTMR0G19UKVYJJ7P3FPZJZY8' where id=4; -update noar ti set b1='J8ELZNRLVTMR0G19UKVYJJ7P3FPZJZY8' where id=4; -update noar tt set b2='WGDX39SEMN43IY4LU' where id=4; -update noar ti set b2='WGDX39SEMN43IY4LU' where id=4; -update noar tt set b0='3' where id=5; -update noar ti set b0='3' where id=5; -update noar tt set b1='FXRP3U89IL019Y8ASAC8OOG8LQLBGXP5' where id=5; -update noar ti set b1='FXRP3U89IL019Y8ASAC8OOG8LQLBGXP5' where id=5; -update noar tt set b2='N315G9MWFAND8BRWWXGXF4EB2' where id=5; -update noar ti set b2='N315G9MWFAND8BRWWXGXF4EB2' where id=5; -update noar tt set b0='L' where id=6; -update noar ti set b0='L' where id=6; -update noar tt set b1='BKRKBGQT29V2T47BLETD1OD1A51Q9GT' where id=6; -update noar ti set b1='BKRKBGQT29V2T47BLETD1OD1A51Q9GT' where id=6; -update noar tt set b2='SH2EYK' where id=6; -update noar ti set b2='SH2EYK' where id=6; -update noar tt set b0='SX85B75' where id=7; -update noar ti set b0='SX85B75' where id=7; -update noar tt set b1='9LBMIUWTN4KZY2V8P6C4WS95EP6V' where id=7; -update noar ti set b1='9LBMIUWTN4KZY2V8P6C4WS95EP6V' where id=7; -update noar tt set b2='23CSPD2RUC1RSK2VQJFSCAGSNLK8D69' where id=7; -update noar ti set b2='23CSPD2RUC1RSK2VQJFSCAGSNLK8D69' where id=7; -update noar tt set b0='4NVAXNV2A0C09GEV7AQ7SC6J' where id=8; -update noar ti set b0='4NVAXNV2A0C09GEV7AQ7SC6J' where id=8; -update noar tt set b1='C9F1B2PWUMTITLMF2T8ZS' where id=8; -update noar ti set b1='C9F1B2PWUMTITLMF2T8ZS' where id=8; -update noar tt set b2='9C' where id=8; -update noar ti set b2='9C' where id=8; -update noar tt set b0='EU3IC1JKD1PHPYL65KC14XV' where id=9; -update noar ti set b0='EU3IC1JKD1PHPYL65KC14XV' where id=9; -update noar tt set b1='POL7NS1S5' where id=9; -update noar ti set b1='POL7NS1S5' where id=9; -update noar tt set b2='AMTX' where id=9; -update noar ti set b2='AMTX' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 longblob null, -b1 blob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='ENPIQ87BJMOJQJX67HP' where id=1; -update noar ti set b0='ENPIQ87BJMOJQJX67HP' where id=1; -update noar tt set b1='JEIMVJVNDOP72K9' where id=1; -update noar ti set b1='JEIMVJVNDOP72K9' where id=1; -update noar tt set b2='3' where id=1; -update noar ti set b2='3' where id=1; -update noar tt set b0='ED4T34F1922DFW9A' where id=2; -update noar ti set b0='ED4T34F1922DFW9A' where id=2; -update noar tt set b1='OL' where id=2; -update noar ti set b1='OL' where id=2; -update noar tt set b2='D7ZIWCL33J9XFNWTRV029RSZ2' where id=2; -update noar ti set b2='D7ZIWCL33J9XFNWTRV029RSZ2' where id=2; -update noar tt set b0='TZVW' where id=3; -update noar ti set b0='TZVW' where id=3; -update noar tt set b1='FSPC4SJW32E3OVJ6H' where id=3; -update noar ti set b1='FSPC4SJW32E3OVJ6H' where id=3; -update noar tt set b2='XOQUAXRI421KQIJ4694QSRQTM5Z66V' where id=3; -update noar ti set b2='XOQUAXRI421KQIJ4694QSRQTM5Z66V' where id=3; -update noar tt set b0='CIRXJL4IV6A8HE29TNNWFRBGJ' where id=4; -update noar ti set b0='CIRXJL4IV6A8HE29TNNWFRBGJ' where id=4; -update noar tt set b1='VMW8FZS' where id=4; -update noar ti set b1='VMW8FZS' where id=4; -update noar tt set b2='1ROB5A1JYBGM9M1NR2YDN9NVA' where id=4; -update noar ti set b2='1ROB5A1JYBGM9M1NR2YDN9NVA' where id=4; -update noar tt set b0='OEAENQ23ZWDRANJ' where id=5; -update noar ti set b0='OEAENQ23ZWDRANJ' where id=5; -update noar tt set b1='USZ3ULJNCRSIA0H70AVZZP4V' where id=5; -update noar ti set b1='USZ3ULJNCRSIA0H70AVZZP4V' where id=5; -update noar tt set b2='SR942GZFO3HKOX' where id=5; -update noar ti set b2='SR942GZFO3HKOX' where id=5; -update noar tt set b0='DCVOP' where id=6; -update noar ti set b0='DCVOP' where id=6; -update noar tt set b1='CSOTEHAHFHCL' where id=6; -update noar ti set b1='CSOTEHAHFHCL' where id=6; -update noar tt set b2='6Y2DXL4DXG17LCX1MAJ1Y' where id=6; -update noar ti set b2='6Y2DXL4DXG17LCX1MAJ1Y' where id=6; -update noar tt set b0='WC74ECVEP6YQ82' where id=7; -update noar ti set b0='WC74ECVEP6YQ82' where id=7; -update noar tt set b1='8TRH69PAVJE6904C66G7XBAPXX62FC' where id=7; -update noar ti set b1='8TRH69PAVJE6904C66G7XBAPXX62FC' where id=7; -update noar tt set b2='0NGH9WS' where id=7; -update noar ti set b2='0NGH9WS' where id=7; -update noar tt set b0='2E7IKLF7QZ3VRH8W88G5H7HK' where id=8; -update noar ti set b0='2E7IKLF7QZ3VRH8W88G5H7HK' where id=8; -update noar tt set b1='NNGNDKL' where id=8; -update noar ti set b1='NNGNDKL' where id=8; -update noar tt set b2='K4ODJ2XYSUVXJR0ZQ3510' where id=8; -update noar ti set b2='K4ODJ2XYSUVXJR0ZQ3510' where id=8; -update noar tt set b0='UNFTM5' where id=9; -update noar ti set b0='UNFTM5' where id=9; -update noar tt set b1='1K9PRBHKHVPOH5D2UJ0JSCPFCMN8VHW' where id=9; -update noar ti set b1='1K9PRBHKHVPOH5D2UJ0JSCPFCMN8VHW' where id=9; -update noar tt set b2='8J49AWQSEHADA09EQO6T8B2AYZYRIV39' where id=9; -update noar ti set b2='8J49AWQSEHADA09EQO6T8B2AYZYRIV39' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 longblob not null, -b1 blob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='4YR5OV2' where id=1; -update noar ti set b0='4YR5OV2' where id=1; -update noar tt set b1='TMH04BZ7KMMEJHF3XPKQZ1HK63AJQ' where id=1; -update noar ti set b1='TMH04BZ7KMMEJHF3XPKQZ1HK63AJQ' where id=1; -update noar tt set b2='4MSGH' where id=1; -update noar ti set b2='4MSGH' where id=1; -update noar tt set b0='HGP145XAWG5JIZQSGYYTBKNH0' where id=2; -update noar ti set b0='HGP145XAWG5JIZQSGYYTBKNH0' where id=2; -update noar tt set b1='4UFAD8B2A9FHOU8462HZ' where id=2; -update noar ti set b1='4UFAD8B2A9FHOU8462HZ' where id=2; -update noar tt set b2='O2Q77QH9BVOKYVVUCP4X' where id=2; -update noar ti set b2='O2Q77QH9BVOKYVVUCP4X' where id=2; -update noar tt set b0='DSINLDN0953FXRWNADCVP8LXLHH83ETA' where id=3; -update noar ti set b0='DSINLDN0953FXRWNADCVP8LXLHH83ETA' where id=3; -update noar tt set b1='8ZAIILLVTWNJBVV2Y7C2LP82M3PD' where id=3; -update noar ti set b1='8ZAIILLVTWNJBVV2Y7C2LP82M3PD' where id=3; -update noar tt set b2='HDVS3WLSS2OFR01C' where id=3; -update noar ti set b2='HDVS3WLSS2OFR01C' where id=3; -update noar tt set b0='66CG2YLNL4MAXVWW4SF2' where id=4; -update noar ti set b0='66CG2YLNL4MAXVWW4SF2' where id=4; -update noar tt set b1='3IS7GBN5JYNECRVUCVI7GIO86DB0R9' where id=4; -update noar ti set b1='3IS7GBN5JYNECRVUCVI7GIO86DB0R9' where id=4; -update noar tt set b2='FX2LL' where id=4; -update noar ti set b2='FX2LL' where id=4; -update noar tt set b0='7' where id=5; -update noar ti set b0='7' where id=5; -update noar tt set b1='RHBCYBESGLJNP9L' where id=5; -update noar ti set b1='RHBCYBESGLJNP9L' where id=5; -update noar tt set b2='DA9SKWUNC4LG' where id=5; -update noar ti set b2='DA9SKWUNC4LG' where id=5; -update noar tt set b0='1KEGXR44Y9MT9AX9YLPBI5DPT' where id=6; -update noar ti set b0='1KEGXR44Y9MT9AX9YLPBI5DPT' where id=6; -update noar tt set b1='4MW6F3KY6GDVOILZGGD4IZNFBKT' where id=6; -update noar ti set b1='4MW6F3KY6GDVOILZGGD4IZNFBKT' where id=6; -update noar tt set b2='FP9KL111TZD' where id=6; -update noar ti set b2='FP9KL111TZD' where id=6; -update noar tt set b0='B169' where id=7; -update noar ti set b0='B169' where id=7; -update noar tt set b1='SYTMF9HKR5OV04MSX' where id=7; -update noar ti set b1='SYTMF9HKR5OV04MSX' where id=7; -update noar tt set b2='8Z5MGK3Y3P2Y2JJ73WPG4TROKUYX6' where id=7; -update noar ti set b2='8Z5MGK3Y3P2Y2JJ73WPG4TROKUYX6' where id=7; -update noar tt set b0='UISFEX1OH47N6XLH8Z6R3UKDY' where id=8; -update noar ti set b0='UISFEX1OH47N6XLH8Z6R3UKDY' where id=8; -update noar tt set b1='TDWONE8LK71QK0Z2O4ACJEMSO' where id=8; -update noar ti set b1='TDWONE8LK71QK0Z2O4ACJEMSO' where id=8; -update noar tt set b2='7' where id=8; -update noar ti set b2='7' where id=8; -update noar tt set b0='1DIFDQ33SJ' where id=9; -update noar ti set b0='1DIFDQ33SJ' where id=9; -update noar tt set b1='YW' where id=9; -update noar ti set b1='YW' where id=9; -update noar tt set b2='2YBNPH4B4K9J' where id=9; -update noar ti set b2='2YBNPH4B4K9J' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 longblob null, -b1 blob null, -b2 text null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='QAXRZK5KTF05RY' where id=1; -update noar ti set b0='QAXRZK5KTF05RY' where id=1; -update noar tt set b1='0HVVWKQ9R2ZCY78VWGH4W8IO4F8BFI6' where id=1; -update noar ti set b1='0HVVWKQ9R2ZCY78VWGH4W8IO4F8BFI6' where id=1; -update noar tt set b2='BIME7O4DB5UYBR59F51VQ35G0X9SESE6' where id=1; -update noar ti set b2='BIME7O4DB5UYBR59F51VQ35G0X9SESE6' where id=1; -update noar tt set b0='Z4TH37UC8OQBPM9MKYEU' where id=2; -update noar ti set b0='Z4TH37UC8OQBPM9MKYEU' where id=2; -update noar tt set b1='CE6C8IAX4G6HHKABWNSX8' where id=2; -update noar ti set b1='CE6C8IAX4G6HHKABWNSX8' where id=2; -update noar tt set b2='K1LUOIOBRXYV2VXYK7O6T9P' where id=2; -update noar ti set b2='K1LUOIOBRXYV2VXYK7O6T9P' where id=2; -update noar tt set b0='0YXQE4HK7Z4' where id=3; -update noar ti set b0='0YXQE4HK7Z4' where id=3; -update noar tt set b1='DBQ2IKRP0ZSATUWH4FNF' where id=3; -update noar ti set b1='DBQ2IKRP0ZSATUWH4FNF' where id=3; -update noar tt set b2='UNM' where id=3; -update noar ti set b2='UNM' where id=3; -update noar tt set b0='8M6HWWJ5YW4Q0P2T0OCEHUTFWCKK' where id=4; -update noar ti set b0='8M6HWWJ5YW4Q0P2T0OCEHUTFWCKK' where id=4; -update noar tt set b1='8O' where id=4; -update noar ti set b1='8O' where id=4; -update noar tt set b2='K6AF' where id=4; -update noar ti set b2='K6AF' where id=4; -update noar tt set b0='W6IXIPZDQ1JKSJTMSXNF4XQ7XRJU' where id=5; -update noar ti set b0='W6IXIPZDQ1JKSJTMSXNF4XQ7XRJU' where id=5; -update noar tt set b1='7UF2W5SGY39DV93RIIRD5PB5DUWBQ47' where id=5; -update noar ti set b1='7UF2W5SGY39DV93RIIRD5PB5DUWBQ47' where id=5; -update noar tt set b2='VCCOWF' where id=5; -update noar ti set b2='VCCOWF' where id=5; -update noar tt set b0='QIQ2WRN2JG5' where id=6; -update noar ti set b0='QIQ2WRN2JG5' where id=6; -update noar tt set b1='9NVFK9Z7OD' where id=6; -update noar ti set b1='9NVFK9Z7OD' where id=6; -update noar tt set b2='HAPWZICVOCREFE1FYVZFVJ' where id=6; -update noar ti set b2='HAPWZICVOCREFE1FYVZFVJ' where id=6; -update noar tt set b0='TRKE5YSBPNENH9N' where id=7; -update noar ti set b0='TRKE5YSBPNENH9N' where id=7; -update noar tt set b1='AUOOJFP42U6846T5FRIZYY3' where id=7; -update noar ti set b1='AUOOJFP42U6846T5FRIZYY3' where id=7; -update noar tt set b2='5RC6PKF2' where id=7; -update noar ti set b2='5RC6PKF2' where id=7; -update noar tt set b0='Z5U3DBBB67QB' where id=8; -update noar ti set b0='Z5U3DBBB67QB' where id=8; -update noar tt set b1='B28TS61AQUL3E4WIKX8G6EJJ' where id=8; -update noar ti set b1='B28TS61AQUL3E4WIKX8G6EJJ' where id=8; -update noar tt set b2='WADXA8MBY2ZSFPJQCBVU8DJWY4YLFTV' where id=8; -update noar ti set b2='WADXA8MBY2ZSFPJQCBVU8DJWY4YLFTV' where id=8; -update noar tt set b0='3JY1IXFGGJV00F281OFEJX7EQ6CTB8J' where id=9; -update noar ti set b0='3JY1IXFGGJV00F281OFEJX7EQ6CTB8J' where id=9; -update noar tt set b1='YDQC52Q6V3QMAKCFI6TWHI6LD25E' where id=9; -update noar ti set b1='YDQC52Q6V3QMAKCFI6TWHI6LD25E' where id=9; -update noar tt set b2='ZM50PVKOJ1' where id=9; -update noar ti set b2='ZM50PVKOJ1' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 longblob not null, -b1 blob not null, -b2 text not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='UIN6LSZOIQALWMSJYZGS9H' where id=1; -update noar ti set b0='UIN6LSZOIQALWMSJYZGS9H' where id=1; -update noar tt set b1='N6IIRBLCWO8C6OL8Z6A' where id=1; -update noar ti set b1='N6IIRBLCWO8C6OL8Z6A' where id=1; -update noar tt set b2='NJ1RWAC' where id=1; -update noar ti set b2='NJ1RWAC' where id=1; -update noar tt set b0='K691ZTWVMOCSR3DPI2' where id=2; -update noar ti set b0='K691ZTWVMOCSR3DPI2' where id=2; -update noar tt set b1='P8TYGH4OZ9NX95D19VYWI8' where id=2; -update noar ti set b1='P8TYGH4OZ9NX95D19VYWI8' where id=2; -update noar tt set b2='1CK27Z61SFUOJNEAODL3R8' where id=2; -update noar ti set b2='1CK27Z61SFUOJNEAODL3R8' where id=2; -update noar tt set b0='NGDGM03E25T' where id=3; -update noar ti set b0='NGDGM03E25T' where id=3; -update noar tt set b1='CS51C9XZP0S' where id=3; -update noar ti set b1='CS51C9XZP0S' where id=3; -update noar tt set b2='S0V6YWRP' where id=3; -update noar ti set b2='S0V6YWRP' where id=3; -update noar tt set b0='CP87S787CQJDQUI985I9E6' where id=4; -update noar ti set b0='CP87S787CQJDQUI985I9E6' where id=4; -update noar tt set b1='J8WW7NK1ELXNM323' where id=4; -update noar ti set b1='J8WW7NK1ELXNM323' where id=4; -update noar tt set b2='63IFZJ' where id=4; -update noar ti set b2='63IFZJ' where id=4; -update noar tt set b0='449VMKOWBMC80SYHI0C1HZ' where id=5; -update noar ti set b0='449VMKOWBMC80SYHI0C1HZ' where id=5; -update noar tt set b1='W8NUI2R1' where id=5; -update noar ti set b1='W8NUI2R1' where id=5; -update noar tt set b2='K89UZY6B1C4RBE' where id=5; -update noar ti set b2='K89UZY6B1C4RBE' where id=5; -update noar tt set b0='VUNXE4G05Y39HWW6X' where id=6; -update noar ti set b0='VUNXE4G05Y39HWW6X' where id=6; -update noar tt set b1='6WDUD8ZLY9UHNWO8UIG1OKMLMX' where id=6; -update noar ti set b1='6WDUD8ZLY9UHNWO8UIG1OKMLMX' where id=6; -update noar tt set b2='1GPF0Q' where id=6; -update noar ti set b2='1GPF0Q' where id=6; -update noar tt set b0='W9RXONTWFWDXVPPZQLP2NO2' where id=7; -update noar ti set b0='W9RXONTWFWDXVPPZQLP2NO2' where id=7; -update noar tt set b1='GFSKHX9AAAD5OM' where id=7; -update noar ti set b1='GFSKHX9AAAD5OM' where id=7; -update noar tt set b2='CRPQKMNOXWU56WQ5TF' where id=7; -update noar ti set b2='CRPQKMNOXWU56WQ5TF' where id=7; -update noar tt set b0='N9X1GX' where id=8; -update noar ti set b0='N9X1GX' where id=8; -update noar tt set b1='EDB9GS4SB40XX37XZOQNT04I' where id=8; -update noar ti set b1='EDB9GS4SB40XX37XZOQNT04I' where id=8; -update noar tt set b2='KVIN' where id=8; -update noar ti set b2='KVIN' where id=8; -update noar tt set b0='KC9L880VLFID96SBPHU6I' where id=9; -update noar ti set b0='KC9L880VLFID96SBPHU6I' where id=9; -update noar tt set b1='F1BU01H40ZR9WVSV3AA2' where id=9; -update noar ti set b1='F1BU01H40ZR9WVSV3AA2' where id=9; -update noar tt set b2='REJHZA0MTF5DIFXK2X8FKZV' where id=9; -update noar ti set b2='REJHZA0MTF5DIFXK2X8FKZV' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 longblob null, -b1 mediumblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='9WY4UVN1N6RW5' where id=1; -update noar ti set b0='9WY4UVN1N6RW5' where id=1; -update noar tt set b1='FVM6Z7YO4528HX' where id=1; -update noar ti set b1='FVM6Z7YO4528HX' where id=1; -update noar tt set b2='TNYUO4' where id=1; -update noar ti set b2='TNYUO4' where id=1; -update noar tt set b0='EIDJG721JXO29ITLO' where id=2; -update noar ti set b0='EIDJG721JXO29ITLO' where id=2; -update noar tt set b1='QEB2334H' where id=2; -update noar ti set b1='QEB2334H' where id=2; -update noar tt set b2='DCOZ8GG0VL7481JMB2CWHEU7ZOWD' where id=2; -update noar ti set b2='DCOZ8GG0VL7481JMB2CWHEU7ZOWD' where id=2; -update noar tt set b0='LVTV0WFBRWN461VD37' where id=3; -update noar ti set b0='LVTV0WFBRWN461VD37' where id=3; -update noar tt set b1='9' where id=3; -update noar ti set b1='9' where id=3; -update noar tt set b2='LQBPEW1ZQZNVFJZI8RN6' where id=3; -update noar ti set b2='LQBPEW1ZQZNVFJZI8RN6' where id=3; -update noar tt set b0='IH0WQNH' where id=4; -update noar ti set b0='IH0WQNH' where id=4; -update noar tt set b1='UA4K6FIFQV' where id=4; -update noar ti set b1='UA4K6FIFQV' where id=4; -update noar tt set b2='CL' where id=4; -update noar ti set b2='CL' where id=4; -update noar tt set b0='9VQ7PPXO667V7E94PYUFQK4FL' where id=5; -update noar ti set b0='9VQ7PPXO667V7E94PYUFQK4FL' where id=5; -update noar tt set b1='52EY8YFMX8X3M06IL' where id=5; -update noar ti set b1='52EY8YFMX8X3M06IL' where id=5; -update noar tt set b2='2RH9M1Y' where id=5; -update noar ti set b2='2RH9M1Y' where id=5; -update noar tt set b0='HZ16E873PXHA3K8VNRAD1' where id=6; -update noar ti set b0='HZ16E873PXHA3K8VNRAD1' where id=6; -update noar tt set b1='9RO5173ZYP' where id=6; -update noar ti set b1='9RO5173ZYP' where id=6; -update noar tt set b2='CVTKD0N0YFRNCB5DZF2HXA' where id=6; -update noar ti set b2='CVTKD0N0YFRNCB5DZF2HXA' where id=6; -update noar tt set b0='BX' where id=7; -update noar ti set b0='BX' where id=7; -update noar tt set b1='8PW8ADO9HBH' where id=7; -update noar ti set b1='8PW8ADO9HBH' where id=7; -update noar tt set b2='93C5R66R9BFTK1YNQ' where id=7; -update noar ti set b2='93C5R66R9BFTK1YNQ' where id=7; -update noar tt set b0='SK49SRN2SZB5HCUMI7HU' where id=8; -update noar ti set b0='SK49SRN2SZB5HCUMI7HU' where id=8; -update noar tt set b1='I6ZT6F73PDU80RMC38DA' where id=8; -update noar ti set b1='I6ZT6F73PDU80RMC38DA' where id=8; -update noar tt set b2='WGOSTZH26245ZYRS46ZPOR' where id=8; -update noar ti set b2='WGOSTZH26245ZYRS46ZPOR' where id=8; -update noar tt set b0='H1' where id=9; -update noar ti set b0='H1' where id=9; -update noar tt set b1='6VEFOJINMX1U5DT7' where id=9; -update noar ti set b1='6VEFOJINMX1U5DT7' where id=9; -update noar tt set b2='68FL5VYHZ89SKA645Y0LKWD' where id=9; -update noar ti set b2='68FL5VYHZ89SKA645Y0LKWD' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 longblob not null, -b1 mediumblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='8DQW5WBMTRXJY9KRANK8H3YMKLZ30K1' where id=1; -update noar ti set b0='8DQW5WBMTRXJY9KRANK8H3YMKLZ30K1' where id=1; -update noar tt set b1='A98Z60U1JET53XA09YSD15QSE9YL' where id=1; -update noar ti set b1='A98Z60U1JET53XA09YSD15QSE9YL' where id=1; -update noar tt set b2='7AA264A0XNUBWHB2DHW' where id=1; -update noar ti set b2='7AA264A0XNUBWHB2DHW' where id=1; -update noar tt set b0='M' where id=2; -update noar ti set b0='M' where id=2; -update noar tt set b1='KJ89S07OE2IMKF924P2M2UF9' where id=2; -update noar ti set b1='KJ89S07OE2IMKF924P2M2UF9' where id=2; -update noar tt set b2='ICM92DK4' where id=2; -update noar ti set b2='ICM92DK4' where id=2; -update noar tt set b0='8NMQ1GGNDVGKP0SGP2GSGQNC' where id=3; -update noar ti set b0='8NMQ1GGNDVGKP0SGP2GSGQNC' where id=3; -update noar tt set b1='GP1QPEHS59MT1ZDCYJHWJOG7NHPE7' where id=3; -update noar ti set b1='GP1QPEHS59MT1ZDCYJHWJOG7NHPE7' where id=3; -update noar tt set b2='6OX5W6789XIVV010LA' where id=3; -update noar ti set b2='6OX5W6789XIVV010LA' where id=3; -update noar tt set b0='0RWA0540MONOTNWPIWA50VFGDHEM4SS' where id=4; -update noar ti set b0='0RWA0540MONOTNWPIWA50VFGDHEM4SS' where id=4; -update noar tt set b1='OW7' where id=4; -update noar ti set b1='OW7' where id=4; -update noar tt set b2='U2CQK2WYCG1L913208IET42' where id=4; -update noar ti set b2='U2CQK2WYCG1L913208IET42' where id=4; -update noar tt set b0='KAYKUL0J9OQ45B1' where id=5; -update noar ti set b0='KAYKUL0J9OQ45B1' where id=5; -update noar tt set b1='R7H30DYSCZE6QJQWOGW53RBLZY49' where id=5; -update noar ti set b1='R7H30DYSCZE6QJQWOGW53RBLZY49' where id=5; -update noar tt set b2='A8TUNVR1F0F1AQA4XA5M860' where id=5; -update noar ti set b2='A8TUNVR1F0F1AQA4XA5M860' where id=5; -update noar tt set b0='9F2A1G' where id=6; -update noar ti set b0='9F2A1G' where id=6; -update noar tt set b1='58UQG6XST8Z0C9YY' where id=6; -update noar ti set b1='58UQG6XST8Z0C9YY' where id=6; -update noar tt set b2='782RIGIQPIF8P116W85F' where id=6; -update noar ti set b2='782RIGIQPIF8P116W85F' where id=6; -update noar tt set b0='A7U4LM1J265LO' where id=7; -update noar ti set b0='A7U4LM1J265LO' where id=7; -update noar tt set b1='F690H' where id=7; -update noar ti set b1='F690H' where id=7; -update noar tt set b2='B312GJFW7NG002WBK' where id=7; -update noar ti set b2='B312GJFW7NG002WBK' where id=7; -update noar tt set b0='EFP9BPPSA1X0339VXXBOT' where id=8; -update noar ti set b0='EFP9BPPSA1X0339VXXBOT' where id=8; -update noar tt set b1='6HL7H1H7FL5EH77D' where id=8; -update noar ti set b1='6HL7H1H7FL5EH77D' where id=8; -update noar tt set b2='CL' where id=8; -update noar ti set b2='CL' where id=8; -update noar tt set b0='22OS4QLQOSGS6BOX' where id=9; -update noar ti set b0='22OS4QLQOSGS6BOX' where id=9; -update noar tt set b1='S05M97K' where id=9; -update noar ti set b1='S05M97K' where id=9; -update noar tt set b2='93VZTP0QCC5N5NGRQI' where id=9; -update noar ti set b2='93VZTP0QCC5N5NGRQI' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 longblob null, -b1 mediumblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='7KVAM' where id=1; -update noar ti set b0='7KVAM' where id=1; -update noar tt set b1='AG7GAKAU8VXENX9HHIS7WSZRG6UWC9' where id=1; -update noar ti set b1='AG7GAKAU8VXENX9HHIS7WSZRG6UWC9' where id=1; -update noar tt set b2='JBKF2DYN1GF9P' where id=1; -update noar ti set b2='JBKF2DYN1GF9P' where id=1; -update noar tt set b0='1HU5' where id=2; -update noar ti set b0='1HU5' where id=2; -update noar tt set b1='0D59PARTH7HZ625LCZJMUO' where id=2; -update noar ti set b1='0D59PARTH7HZ625LCZJMUO' where id=2; -update noar tt set b2='VNTG6FNKZ5V22GZLR3A80TYZPI2' where id=2; -update noar ti set b2='VNTG6FNKZ5V22GZLR3A80TYZPI2' where id=2; -update noar tt set b0='HBGYWSH2QZDTH6VGDO1W2RF70GW' where id=3; -update noar ti set b0='HBGYWSH2QZDTH6VGDO1W2RF70GW' where id=3; -update noar tt set b1='V629VCCC3OVMPE1' where id=3; -update noar ti set b1='V629VCCC3OVMPE1' where id=3; -update noar tt set b2='2J95W41W66' where id=3; -update noar ti set b2='2J95W41W66' where id=3; -update noar tt set b0='XYYF16JGDCI2JYLYLWT8K7YFG' where id=4; -update noar ti set b0='XYYF16JGDCI2JYLYLWT8K7YFG' where id=4; -update noar tt set b1='M6FK0245FQ7MZLB7GQSFIL' where id=4; -update noar ti set b1='M6FK0245FQ7MZLB7GQSFIL' where id=4; -update noar tt set b2='FQRK' where id=4; -update noar ti set b2='FQRK' where id=4; -update noar tt set b0='HU2873TTB' where id=5; -update noar ti set b0='HU2873TTB' where id=5; -update noar tt set b1='27IQQ' where id=5; -update noar ti set b1='27IQQ' where id=5; -update noar tt set b2='Y8' where id=5; -update noar ti set b2='Y8' where id=5; -update noar tt set b0='7H' where id=6; -update noar ti set b0='7H' where id=6; -update noar tt set b1='24LS7IHXF' where id=6; -update noar ti set b1='24LS7IHXF' where id=6; -update noar tt set b2='T' where id=6; -update noar ti set b2='T' where id=6; -update noar tt set b0='0Z62IIV4ST' where id=7; -update noar ti set b0='0Z62IIV4ST' where id=7; -update noar tt set b1='7AV29C1IU984FXHCSRGWFSAX' where id=7; -update noar ti set b1='7AV29C1IU984FXHCSRGWFSAX' where id=7; -update noar tt set b2='U2WOU7' where id=7; -update noar ti set b2='U2WOU7' where id=7; -update noar tt set b0='F1FKZMXR' where id=8; -update noar ti set b0='F1FKZMXR' where id=8; -update noar tt set b1='WCS0NN0UFCT' where id=8; -update noar ti set b1='WCS0NN0UFCT' where id=8; -update noar tt set b2='PU2U87VVY90Y' where id=8; -update noar ti set b2='PU2U87VVY90Y' where id=8; -update noar tt set b0='P4IWAARBSZ1PUB' where id=9; -update noar ti set b0='P4IWAARBSZ1PUB' where id=9; -update noar tt set b1='KTQD8GIMBS2FP1PTJKKXFRSWAN6N' where id=9; -update noar ti set b1='KTQD8GIMBS2FP1PTJKKXFRSWAN6N' where id=9; -update noar tt set b2='N8YRTE0KJR0RJU' where id=9; -update noar ti set b2='N8YRTE0KJR0RJU' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 longblob not null, -b1 mediumblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='4X44KD5PUV2AB59GLIS' where id=1; -update noar ti set b0='4X44KD5PUV2AB59GLIS' where id=1; -update noar tt set b1='GUZFZEOPFFMR2CBAZM1IZQTD' where id=1; -update noar ti set b1='GUZFZEOPFFMR2CBAZM1IZQTD' where id=1; -update noar tt set b2='Q72YBK0TSJYHHY8PU' where id=1; -update noar ti set b2='Q72YBK0TSJYHHY8PU' where id=1; -update noar tt set b0='K19LDDP5C' where id=2; -update noar ti set b0='K19LDDP5C' where id=2; -update noar tt set b1='J6OBZKSTJ2JMO6QON' where id=2; -update noar ti set b1='J6OBZKSTJ2JMO6QON' where id=2; -update noar tt set b2='UDMV2VF31' where id=2; -update noar ti set b2='UDMV2VF31' where id=2; -update noar tt set b0='L5WGNU4WNIWH' where id=3; -update noar ti set b0='L5WGNU4WNIWH' where id=3; -update noar tt set b1='K75U2I' where id=3; -update noar ti set b1='K75U2I' where id=3; -update noar tt set b2='NZ55E' where id=3; -update noar ti set b2='NZ55E' where id=3; -update noar tt set b0='YQOB' where id=4; -update noar ti set b0='YQOB' where id=4; -update noar tt set b1='NXRM03CJW9' where id=4; -update noar ti set b1='NXRM03CJW9' where id=4; -update noar tt set b2='JGLE0BDVC72BQL379W' where id=4; -update noar ti set b2='JGLE0BDVC72BQL379W' where id=4; -update noar tt set b0='SYL3LQZYLJXJADASRPY7UUOO494HU' where id=5; -update noar ti set b0='SYL3LQZYLJXJADASRPY7UUOO494HU' where id=5; -update noar tt set b1='74NYBECENCTMECVHTANU0U' where id=5; -update noar ti set b1='74NYBECENCTMECVHTANU0U' where id=5; -update noar tt set b2='I1LS6BVPIU6AAFK2' where id=5; -update noar ti set b2='I1LS6BVPIU6AAFK2' where id=5; -update noar tt set b0='MCBSWZ3K3BOLH688CUKIBWS8ACODDFZ' where id=6; -update noar ti set b0='MCBSWZ3K3BOLH688CUKIBWS8ACODDFZ' where id=6; -update noar tt set b1='WIFT09PZWS2C42Q2PO6G2JF7QBEFO0' where id=6; -update noar ti set b1='WIFT09PZWS2C42Q2PO6G2JF7QBEFO0' where id=6; -update noar tt set b2='RYC8MM85X2QJE4OGS247UK42WU4X' where id=6; -update noar ti set b2='RYC8MM85X2QJE4OGS247UK42WU4X' where id=6; -update noar tt set b0='KVPZC4ZXTAOMSINCDGVNJ1OI' where id=7; -update noar ti set b0='KVPZC4ZXTAOMSINCDGVNJ1OI' where id=7; -update noar tt set b1='S60E9CU30Z4MYLX4' where id=7; -update noar ti set b1='S60E9CU30Z4MYLX4' where id=7; -update noar tt set b2='DW90E' where id=7; -update noar ti set b2='DW90E' where id=7; -update noar tt set b0='8YLSKDT5MR0TGVFG5WE3EORCEE' where id=8; -update noar ti set b0='8YLSKDT5MR0TGVFG5WE3EORCEE' where id=8; -update noar tt set b1='XLJSPV40KBLNNML' where id=8; -update noar ti set b1='XLJSPV40KBLNNML' where id=8; -update noar tt set b2='3TWZ1ZI' where id=8; -update noar ti set b2='3TWZ1ZI' where id=8; -update noar tt set b0='AOS56W' where id=9; -update noar ti set b0='AOS56W' where id=9; -update noar tt set b1='P379HOGZL9OGNTP23PUBSELFL' where id=9; -update noar ti set b1='P379HOGZL9OGNTP23PUBSELFL' where id=9; -update noar tt set b2='6NX5LO2H7U447EB34ZTX5' where id=9; -update noar ti set b2='6NX5LO2H7U447EB34ZTX5' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 longblob null, -b1 mediumblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='2HRCAP0905VZZN' where id=1; -update noar ti set b0='2HRCAP0905VZZN' where id=1; -update noar tt set b1='AX5W379S76BX' where id=1; -update noar ti set b1='AX5W379S76BX' where id=1; -update noar tt set b2='U3RA' where id=1; -update noar ti set b2='U3RA' where id=1; -update noar tt set b0='9G' where id=2; -update noar ti set b0='9G' where id=2; -update noar tt set b1='EKD8MUW0VE43O8YX54TZLOBSV2BC' where id=2; -update noar ti set b1='EKD8MUW0VE43O8YX54TZLOBSV2BC' where id=2; -update noar tt set b2='N63O2K45Y8G1SOR' where id=2; -update noar ti set b2='N63O2K45Y8G1SOR' where id=2; -update noar tt set b0='0MG0AN' where id=3; -update noar ti set b0='0MG0AN' where id=3; -update noar tt set b1='G6U9MCHSN76DXGP2DJ58T7JW' where id=3; -update noar ti set b1='G6U9MCHSN76DXGP2DJ58T7JW' where id=3; -update noar tt set b2='T005F4' where id=3; -update noar ti set b2='T005F4' where id=3; -update noar tt set b0='4PRQXZ9UI4HQYZ0C2L' where id=4; -update noar ti set b0='4PRQXZ9UI4HQYZ0C2L' where id=4; -update noar tt set b1='MF75X11414E' where id=4; -update noar ti set b1='MF75X11414E' where id=4; -update noar tt set b2='YGZUB2BJ72L24KA' where id=4; -update noar ti set b2='YGZUB2BJ72L24KA' where id=4; -update noar tt set b0='OTTOY3SL23GRFCG' where id=5; -update noar ti set b0='OTTOY3SL23GRFCG' where id=5; -update noar tt set b1='D457VTVI86PIOT0NHTU' where id=5; -update noar ti set b1='D457VTVI86PIOT0NHTU' where id=5; -update noar tt set b2='EJ4MQJGBAFHJGWKAZO2SDV' where id=5; -update noar ti set b2='EJ4MQJGBAFHJGWKAZO2SDV' where id=5; -update noar tt set b0='N86' where id=6; -update noar ti set b0='N86' where id=6; -update noar tt set b1='0JLVBVQ6HBOA3L' where id=6; -update noar ti set b1='0JLVBVQ6HBOA3L' where id=6; -update noar tt set b2='P52JAO' where id=6; -update noar ti set b2='P52JAO' where id=6; -update noar tt set b0='CIXD6375TYSKN2D0B2AM09NYD8FAJ6' where id=7; -update noar ti set b0='CIXD6375TYSKN2D0B2AM09NYD8FAJ6' where id=7; -update noar tt set b1='5DPK0NP' where id=7; -update noar ti set b1='5DPK0NP' where id=7; -update noar tt set b2='3ISKSVQO9UUWV70MZB' where id=7; -update noar ti set b2='3ISKSVQO9UUWV70MZB' where id=7; -update noar tt set b0='VMSZNXG67HA1H2PE90YJ9HI0P' where id=8; -update noar ti set b0='VMSZNXG67HA1H2PE90YJ9HI0P' where id=8; -update noar tt set b1='IHCGN1QMFZZ9IF81OAREN93IWONP4' where id=8; -update noar ti set b1='IHCGN1QMFZZ9IF81OAREN93IWONP4' where id=8; -update noar tt set b2='2Y7IVAILB1AEE4WS23' where id=8; -update noar ti set b2='2Y7IVAILB1AEE4WS23' where id=8; -update noar tt set b0='KQJY9VW30LCGNUBT6K8BKPRAHWGFWLT' where id=9; -update noar ti set b0='KQJY9VW30LCGNUBT6K8BKPRAHWGFWLT' where id=9; -update noar tt set b1='55SQU999SQM' where id=9; -update noar ti set b1='55SQU999SQM' where id=9; -update noar tt set b2='5Q' where id=9; -update noar ti set b2='5Q' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 longblob not null, -b1 mediumblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='FA1E95MXS945VHWE13CFX2IM1' where id=1; -update noar ti set b0='FA1E95MXS945VHWE13CFX2IM1' where id=1; -update noar tt set b1='7RIHIQWB0OGWMN' where id=1; -update noar ti set b1='7RIHIQWB0OGWMN' where id=1; -update noar tt set b2='O5T7ZU9MUCT7RQP4' where id=1; -update noar ti set b2='O5T7ZU9MUCT7RQP4' where id=1; -update noar tt set b0='I1594G1NTW' where id=2; -update noar ti set b0='I1594G1NTW' where id=2; -update noar tt set b1='XMJGF9BO5T67ZEDM0FDT832N4HJE' where id=2; -update noar ti set b1='XMJGF9BO5T67ZEDM0FDT832N4HJE' where id=2; -update noar tt set b2='5JFWAF4NVPYNN7BZQQKW3Y0R1G' where id=2; -update noar ti set b2='5JFWAF4NVPYNN7BZQQKW3Y0R1G' where id=2; -update noar tt set b0='INBO28LEJ5522W2HGPJNZV' where id=3; -update noar ti set b0='INBO28LEJ5522W2HGPJNZV' where id=3; -update noar tt set b1='3GV7KD1RP3W' where id=3; -update noar ti set b1='3GV7KD1RP3W' where id=3; -update noar tt set b2='KQ8' where id=3; -update noar ti set b2='KQ8' where id=3; -update noar tt set b0='8SAC48T7RQV4NE66GSC4SWHR45F50T5' where id=4; -update noar ti set b0='8SAC48T7RQV4NE66GSC4SWHR45F50T5' where id=4; -update noar tt set b1='Y3EOTNDEXTG' where id=4; -update noar ti set b1='Y3EOTNDEXTG' where id=4; -update noar tt set b2='F23Q' where id=4; -update noar ti set b2='F23Q' where id=4; -update noar tt set b0='BQYNBGCE8IG0EQ6WY0QUYE5BJZ9B3' where id=5; -update noar ti set b0='BQYNBGCE8IG0EQ6WY0QUYE5BJZ9B3' where id=5; -update noar tt set b1='CCA67' where id=5; -update noar ti set b1='CCA67' where id=5; -update noar tt set b2='BMPL9SFXQA4U53F9TZFQ8A' where id=5; -update noar ti set b2='BMPL9SFXQA4U53F9TZFQ8A' where id=5; -update noar tt set b0='Z' where id=6; -update noar ti set b0='Z' where id=6; -update noar tt set b1='RKZ85JF1DHJGFGEL3' where id=6; -update noar ti set b1='RKZ85JF1DHJGFGEL3' where id=6; -update noar tt set b2='HUKZT97AVB9FG' where id=6; -update noar ti set b2='HUKZT97AVB9FG' where id=6; -update noar tt set b0='F5PIC6IVDAIG' where id=7; -update noar ti set b0='F5PIC6IVDAIG' where id=7; -update noar tt set b1='B8DC39H7HL857V4LIDV1H9AADDRAPRRN' where id=7; -update noar ti set b1='B8DC39H7HL857V4LIDV1H9AADDRAPRRN' where id=7; -update noar tt set b2='IBMAFBKRP9110OT3' where id=7; -update noar ti set b2='IBMAFBKRP9110OT3' where id=7; -update noar tt set b0='7XCQKY8QM4LD7' where id=8; -update noar ti set b0='7XCQKY8QM4LD7' where id=8; -update noar tt set b1='FNJW' where id=8; -update noar ti set b1='FNJW' where id=8; -update noar tt set b2='T8X8C4KNVP12Y0OSPGNJ' where id=8; -update noar ti set b2='T8X8C4KNVP12Y0OSPGNJ' where id=8; -update noar tt set b0='OTF42VCU9TVRLL24AINGU5L' where id=9; -update noar ti set b0='OTF42VCU9TVRLL24AINGU5L' where id=9; -update noar tt set b1='6CIR6DVLXFNI58BS7YN8LFWOJB8XI4C' where id=9; -update noar ti set b1='6CIR6DVLXFNI58BS7YN8LFWOJB8XI4C' where id=9; -update noar tt set b2='7XOC4WSG9PWL' where id=9; -update noar ti set b2='7XOC4WSG9PWL' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 longblob null, -b1 mediumblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='7P7VWR46M3K33Z3BYF' where id=1; -update noar ti set b0='7P7VWR46M3K33Z3BYF' where id=1; -update noar tt set b1='0IYUYTC8SX5UK5' where id=1; -update noar ti set b1='0IYUYTC8SX5UK5' where id=1; -update noar tt set b2='NXB1JU8NQJ85USRBVRFAF0N7XGD' where id=1; -update noar ti set b2='NXB1JU8NQJ85USRBVRFAF0N7XGD' where id=1; -update noar tt set b0='LYZDZIU8T1C9KNFPX8TGD32YGBWVZK' where id=2; -update noar ti set b0='LYZDZIU8T1C9KNFPX8TGD32YGBWVZK' where id=2; -update noar tt set b1='SKGQPIWP9974I3CMY90UHE423JM' where id=2; -update noar ti set b1='SKGQPIWP9974I3CMY90UHE423JM' where id=2; -update noar tt set b2='69WQFYV4PC0LBPVMKFF' where id=2; -update noar ti set b2='69WQFYV4PC0LBPVMKFF' where id=2; -update noar tt set b0='A6V959GEP86BDYAN373' where id=3; -update noar ti set b0='A6V959GEP86BDYAN373' where id=3; -update noar tt set b1='XJPR38131Q1BQR4FIW57YNJ4O' where id=3; -update noar ti set b1='XJPR38131Q1BQR4FIW57YNJ4O' where id=3; -update noar tt set b2='ES6XBCEW90EBS' where id=3; -update noar ti set b2='ES6XBCEW90EBS' where id=3; -update noar tt set b0='DYYUF2KGPQCUKCGW1HGVU9EFOH3BEKRH' where id=4; -update noar ti set b0='DYYUF2KGPQCUKCGW1HGVU9EFOH3BEKRH' where id=4; -update noar tt set b1='T' where id=4; -update noar ti set b1='T' where id=4; -update noar tt set b2='8806HIZCYWQGP84Y' where id=4; -update noar ti set b2='8806HIZCYWQGP84Y' where id=4; -update noar tt set b0='K66RLI8C8ZBW' where id=5; -update noar ti set b0='K66RLI8C8ZBW' where id=5; -update noar tt set b1='VZ' where id=5; -update noar ti set b1='VZ' where id=5; -update noar tt set b2='R6V30DDMUPYS1OIVE6E8R1VBVP6DA4' where id=5; -update noar ti set b2='R6V30DDMUPYS1OIVE6E8R1VBVP6DA4' where id=5; -update noar tt set b0='O1SAV3HZIXG' where id=6; -update noar ti set b0='O1SAV3HZIXG' where id=6; -update noar tt set b1='UP62E8JWIIRCVK74XPUCI' where id=6; -update noar ti set b1='UP62E8JWIIRCVK74XPUCI' where id=6; -update noar tt set b2='Y4D' where id=6; -update noar ti set b2='Y4D' where id=6; -update noar tt set b0='V' where id=7; -update noar ti set b0='V' where id=7; -update noar tt set b1='YCI' where id=7; -update noar ti set b1='YCI' where id=7; -update noar tt set b2='R' where id=7; -update noar ti set b2='R' where id=7; -update noar tt set b0='FMBEURZ2KGJ5PS380XBMU6Y' where id=8; -update noar ti set b0='FMBEURZ2KGJ5PS380XBMU6Y' where id=8; -update noar tt set b1='T106L5CAST5PFE0VS623TFGEYZZ32C' where id=8; -update noar ti set b1='T106L5CAST5PFE0VS623TFGEYZZ32C' where id=8; -update noar tt set b2='385N53THZY79SF5RIM5ODBXDAKJ' where id=8; -update noar ti set b2='385N53THZY79SF5RIM5ODBXDAKJ' where id=8; -update noar tt set b0='QC5RZNFNU7UXGLT8FCDP9E7JY4ZWE0OE' where id=9; -update noar ti set b0='QC5RZNFNU7UXGLT8FCDP9E7JY4ZWE0OE' where id=9; -update noar tt set b1='NP2THCZJI400L9HELKYX' where id=9; -update noar ti set b1='NP2THCZJI400L9HELKYX' where id=9; -update noar tt set b2='28GR' where id=9; -update noar ti set b2='28GR' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 longblob not null, -b1 mediumblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='9WCJKFAZWB2KC' where id=1; -update noar ti set b0='9WCJKFAZWB2KC' where id=1; -update noar tt set b1='8TEX' where id=1; -update noar ti set b1='8TEX' where id=1; -update noar tt set b2='J1' where id=1; -update noar ti set b2='J1' where id=1; -update noar tt set b0='J0NC0MH' where id=2; -update noar ti set b0='J0NC0MH' where id=2; -update noar tt set b1='E00Y2O6J02D7RWMT' where id=2; -update noar ti set b1='E00Y2O6J02D7RWMT' where id=2; -update noar tt set b2='53IQCEG9BGXA4' where id=2; -update noar ti set b2='53IQCEG9BGXA4' where id=2; -update noar tt set b0='A499G37C' where id=3; -update noar ti set b0='A499G37C' where id=3; -update noar tt set b1='LO3X3BK4EL1RGMUWHQQERQXG' where id=3; -update noar ti set b1='LO3X3BK4EL1RGMUWHQQERQXG' where id=3; -update noar tt set b2='A7CV61DBVY33PLHL7MJD1AGVJNX0S2' where id=3; -update noar ti set b2='A7CV61DBVY33PLHL7MJD1AGVJNX0S2' where id=3; -update noar tt set b0='O5WZ459K4UF' where id=4; -update noar ti set b0='O5WZ459K4UF' where id=4; -update noar tt set b1='GLWJT8EO' where id=4; -update noar ti set b1='GLWJT8EO' where id=4; -update noar tt set b2='JI1RAX70CHL7IJRXPJ' where id=4; -update noar ti set b2='JI1RAX70CHL7IJRXPJ' where id=4; -update noar tt set b0='I39' where id=5; -update noar ti set b0='I39' where id=5; -update noar tt set b1='V096YO741VT2C33N4108QYSYHIGH' where id=5; -update noar ti set b1='V096YO741VT2C33N4108QYSYHIGH' where id=5; -update noar tt set b2='MV9JJ23SGNJ3IXJIDWN9HEUA50WZRY2' where id=5; -update noar ti set b2='MV9JJ23SGNJ3IXJIDWN9HEUA50WZRY2' where id=5; -update noar tt set b0='CEGX6WPZ0GGA' where id=6; -update noar ti set b0='CEGX6WPZ0GGA' where id=6; -update noar tt set b1='W' where id=6; -update noar ti set b1='W' where id=6; -update noar tt set b2='AVEHC3N2865I' where id=6; -update noar ti set b2='AVEHC3N2865I' where id=6; -update noar tt set b0='TWT3XE24F8CPDECQ' where id=7; -update noar ti set b0='TWT3XE24F8CPDECQ' where id=7; -update noar tt set b1='ED27COR9YM5ZA' where id=7; -update noar ti set b1='ED27COR9YM5ZA' where id=7; -update noar tt set b2='EAY35MSNQLGHD3LS2FV30J7JE1Y' where id=7; -update noar ti set b2='EAY35MSNQLGHD3LS2FV30J7JE1Y' where id=7; -update noar tt set b0='MW31JXELXP51Q754' where id=8; -update noar ti set b0='MW31JXELXP51Q754' where id=8; -update noar tt set b1='W8BGOASW' where id=8; -update noar ti set b1='W8BGOASW' where id=8; -update noar tt set b2='ZEMOYL4B2JI40MT70A' where id=8; -update noar ti set b2='ZEMOYL4B2JI40MT70A' where id=8; -update noar tt set b0='7F8R2KBX4NN1NYIDQ9IP3D' where id=9; -update noar ti set b0='7F8R2KBX4NN1NYIDQ9IP3D' where id=9; -update noar tt set b1='S07MWS3K0' where id=9; -update noar ti set b1='S07MWS3K0' where id=9; -update noar tt set b2='KPD1BFOIDVMWCY8RBXW5EA' where id=9; -update noar ti set b2='KPD1BFOIDVMWCY8RBXW5EA' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 longblob null, -b1 mediumblob null, -b2 text null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='0S' where id=1; -update noar ti set b0='0S' where id=1; -update noar tt set b1='Y8SP5F1GMZULHWT5' where id=1; -update noar ti set b1='Y8SP5F1GMZULHWT5' where id=1; -update noar tt set b2='YMWNAFC5PM7ZSZMTV' where id=1; -update noar ti set b2='YMWNAFC5PM7ZSZMTV' where id=1; -update noar tt set b0='GN102Z3FDV5KJ5F4RTSGNL08HN7O3' where id=2; -update noar ti set b0='GN102Z3FDV5KJ5F4RTSGNL08HN7O3' where id=2; -update noar tt set b1='HR1PNWRJGCBVZ5J9QN7' where id=2; -update noar ti set b1='HR1PNWRJGCBVZ5J9QN7' where id=2; -update noar tt set b2='URZ73ZIZO5F' where id=2; -update noar ti set b2='URZ73ZIZO5F' where id=2; -update noar tt set b0='NXPQ8ZCKPO96L' where id=3; -update noar ti set b0='NXPQ8ZCKPO96L' where id=3; -update noar tt set b1='72X8GEOOW9UULY7KVQ8EBBG' where id=3; -update noar ti set b1='72X8GEOOW9UULY7KVQ8EBBG' where id=3; -update noar tt set b2='42MODMQL9YNUQYX32P2HHROR1G5' where id=3; -update noar ti set b2='42MODMQL9YNUQYX32P2HHROR1G5' where id=3; -update noar tt set b0='DN3X7ZX2HT' where id=4; -update noar ti set b0='DN3X7ZX2HT' where id=4; -update noar tt set b1='3KYIR' where id=4; -update noar ti set b1='3KYIR' where id=4; -update noar tt set b2='BFEVJMPSSZK9FOUO' where id=4; -update noar ti set b2='BFEVJMPSSZK9FOUO' where id=4; -update noar tt set b0='TYBWSAX4R77B15BO' where id=5; -update noar ti set b0='TYBWSAX4R77B15BO' where id=5; -update noar tt set b1='6O8WFI6INKLBFTWPAJJNP26UXU' where id=5; -update noar ti set b1='6O8WFI6INKLBFTWPAJJNP26UXU' where id=5; -update noar tt set b2='SA97NF74WKQBKL1QU666AUUBDU3WAN' where id=5; -update noar ti set b2='SA97NF74WKQBKL1QU666AUUBDU3WAN' where id=5; -update noar tt set b0='JMXI7' where id=6; -update noar ti set b0='JMXI7' where id=6; -update noar tt set b1='5IKDW03TKYOG6RI84W6O' where id=6; -update noar ti set b1='5IKDW03TKYOG6RI84W6O' where id=6; -update noar tt set b2='AG' where id=6; -update noar ti set b2='AG' where id=6; -update noar tt set b0='4TQKM38CZJG1FXFV8FFB64IQGAT7P' where id=7; -update noar ti set b0='4TQKM38CZJG1FXFV8FFB64IQGAT7P' where id=7; -update noar tt set b1='OSEDUHZY6' where id=7; -update noar ti set b1='OSEDUHZY6' where id=7; -update noar tt set b2='9W64VN' where id=7; -update noar ti set b2='9W64VN' where id=7; -update noar tt set b0='MB3UDSMUYX25WW' where id=8; -update noar ti set b0='MB3UDSMUYX25WW' where id=8; -update noar tt set b1='TZIH9H9RV603LUG4TTF' where id=8; -update noar ti set b1='TZIH9H9RV603LUG4TTF' where id=8; -update noar tt set b2='1XIRUAKWKP63OY57X3HDDL5V' where id=8; -update noar ti set b2='1XIRUAKWKP63OY57X3HDDL5V' where id=8; -update noar tt set b0='KAL85OSD6' where id=9; -update noar ti set b0='KAL85OSD6' where id=9; -update noar tt set b1='3DIRBRFFUGO6SIP6JZ' where id=9; -update noar ti set b1='3DIRBRFFUGO6SIP6JZ' where id=9; -update noar tt set b2='T9YUML9EFXX96OTX' where id=9; -update noar ti set b2='T9YUML9EFXX96OTX' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 longblob not null, -b1 mediumblob not null, -b2 text not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='3Z1O' where id=1; -update noar ti set b0='3Z1O' where id=1; -update noar tt set b1='K3RZVY05DRXGKFIS' where id=1; -update noar ti set b1='K3RZVY05DRXGKFIS' where id=1; -update noar tt set b2='7' where id=1; -update noar ti set b2='7' where id=1; -update noar tt set b0='6' where id=2; -update noar ti set b0='6' where id=2; -update noar tt set b1='4W1UFA6SHFBSR6BEF' where id=2; -update noar ti set b1='4W1UFA6SHFBSR6BEF' where id=2; -update noar tt set b2='4' where id=2; -update noar ti set b2='4' where id=2; -update noar tt set b0='68E5ZSX9SXXBRAU2QNMX8WFU2OQV' where id=3; -update noar ti set b0='68E5ZSX9SXXBRAU2QNMX8WFU2OQV' where id=3; -update noar tt set b1='ZXLJKNPT7ZDT0N8WKS' where id=3; -update noar ti set b1='ZXLJKNPT7ZDT0N8WKS' where id=3; -update noar tt set b2='AN7CC6P6S259WQ18QINXNOVBAB' where id=3; -update noar ti set b2='AN7CC6P6S259WQ18QINXNOVBAB' where id=3; -update noar tt set b0='A19RJCOIBN2' where id=4; -update noar ti set b0='A19RJCOIBN2' where id=4; -update noar tt set b1='K7HU9SO' where id=4; -update noar ti set b1='K7HU9SO' where id=4; -update noar tt set b2='Y3F5F6UD0K7' where id=4; -update noar ti set b2='Y3F5F6UD0K7' where id=4; -update noar tt set b0='V3AFEWALPM' where id=5; -update noar ti set b0='V3AFEWALPM' where id=5; -update noar tt set b1='EGY18YN7VO7IMW56N4ZEZFZPPITX' where id=5; -update noar ti set b1='EGY18YN7VO7IMW56N4ZEZFZPPITX' where id=5; -update noar tt set b2='RH' where id=5; -update noar ti set b2='RH' where id=5; -update noar tt set b0='3I3BWXW00BN2' where id=6; -update noar ti set b0='3I3BWXW00BN2' where id=6; -update noar tt set b1='YK8H7G4GVLP2DJTK' where id=6; -update noar ti set b1='YK8H7G4GVLP2DJTK' where id=6; -update noar tt set b2='TKOLZBD33YYLZHOCH1ENWJ4WUDJG9VF' where id=6; -update noar ti set b2='TKOLZBD33YYLZHOCH1ENWJ4WUDJG9VF' where id=6; -update noar tt set b0='7XDDUD7K0QUC' where id=7; -update noar ti set b0='7XDDUD7K0QUC' where id=7; -update noar tt set b1='12Y5TLV5S9DFULS' where id=7; -update noar ti set b1='12Y5TLV5S9DFULS' where id=7; -update noar tt set b2='Y45B2N81B4L4B5H6JPD5DMK67' where id=7; -update noar ti set b2='Y45B2N81B4L4B5H6JPD5DMK67' where id=7; -update noar tt set b0='E0JHKNVFAR3KPTD637' where id=8; -update noar ti set b0='E0JHKNVFAR3KPTD637' where id=8; -update noar tt set b1='PYMF51R3FE94PYB4R' where id=8; -update noar ti set b1='PYMF51R3FE94PYB4R' where id=8; -update noar tt set b2='G02HEX4P7' where id=8; -update noar ti set b2='G02HEX4P7' where id=8; -update noar tt set b0='KECZD' where id=9; -update noar ti set b0='KECZD' where id=9; -update noar tt set b1='WGYB464SCYUGEW8JNFHIX24SRE8H8MF' where id=9; -update noar ti set b1='WGYB464SCYUGEW8JNFHIX24SRE8H8MF' where id=9; -update noar tt set b2='XJST2DY' where id=9; -update noar ti set b2='XJST2DY' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 longblob null, -b1 longblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='R0HJK7N43O5' where id=1; -update noar ti set b0='R0HJK7N43O5' where id=1; -update noar tt set b1='67YBE4PLEFK' where id=1; -update noar ti set b1='67YBE4PLEFK' where id=1; -update noar tt set b2='928WX319S0DVW1E5O' where id=1; -update noar ti set b2='928WX319S0DVW1E5O' where id=1; -update noar tt set b0='ZN7XB' where id=2; -update noar ti set b0='ZN7XB' where id=2; -update noar tt set b1='W05UKU6L8' where id=2; -update noar ti set b1='W05UKU6L8' where id=2; -update noar tt set b2='ZT9Y8WIK1NALC6WR6AEQT0V0' where id=2; -update noar ti set b2='ZT9Y8WIK1NALC6WR6AEQT0V0' where id=2; -update noar tt set b0='LJBJTTIK39YLBVONT5NF7MA' where id=3; -update noar ti set b0='LJBJTTIK39YLBVONT5NF7MA' where id=3; -update noar tt set b1='GU75XPE8' where id=3; -update noar ti set b1='GU75XPE8' where id=3; -update noar tt set b2='VYGB51BKSA0UQEASS8UPM0SHRCSJ99N' where id=3; -update noar ti set b2='VYGB51BKSA0UQEASS8UPM0SHRCSJ99N' where id=3; -update noar tt set b0='R5RXTZ0RP7QC598B6V3' where id=4; -update noar ti set b0='R5RXTZ0RP7QC598B6V3' where id=4; -update noar tt set b1='2WE2S4YIMM4IQ9U' where id=4; -update noar ti set b1='2WE2S4YIMM4IQ9U' where id=4; -update noar tt set b2='AN02UDUSCHR' where id=4; -update noar ti set b2='AN02UDUSCHR' where id=4; -update noar tt set b0='BELMINE0LSCPU6KYF68V2P4PNZ7' where id=5; -update noar ti set b0='BELMINE0LSCPU6KYF68V2P4PNZ7' where id=5; -update noar tt set b1='1UH7BBSEOY' where id=5; -update noar ti set b1='1UH7BBSEOY' where id=5; -update noar tt set b2='JOB7D3J6NS0O4YFZKN' where id=5; -update noar ti set b2='JOB7D3J6NS0O4YFZKN' where id=5; -update noar tt set b0='VD9K1CA15D7VVWMM' where id=6; -update noar ti set b0='VD9K1CA15D7VVWMM' where id=6; -update noar tt set b1='96M5MVE8IFCKR438W9PE2L' where id=6; -update noar ti set b1='96M5MVE8IFCKR438W9PE2L' where id=6; -update noar tt set b2='XHENFSNRZZ2CCXVP5O' where id=6; -update noar ti set b2='XHENFSNRZZ2CCXVP5O' where id=6; -update noar tt set b0='6JWEQLBSCFJSHH8' where id=7; -update noar ti set b0='6JWEQLBSCFJSHH8' where id=7; -update noar tt set b1='ZS87OOWG6JI0WKEEWD' where id=7; -update noar ti set b1='ZS87OOWG6JI0WKEEWD' where id=7; -update noar tt set b2='RB3CBJ5PHG7OWQV94DUI04PSLHB8' where id=7; -update noar ti set b2='RB3CBJ5PHG7OWQV94DUI04PSLHB8' where id=7; -update noar tt set b0='LOAVEIF79OAJNXETED48D6J6F' where id=8; -update noar ti set b0='LOAVEIF79OAJNXETED48D6J6F' where id=8; -update noar tt set b1='KUXTEM64U080052KJSLRDZOQGR5M9H' where id=8; -update noar ti set b1='KUXTEM64U080052KJSLRDZOQGR5M9H' where id=8; -update noar tt set b2='7P3IHE7N' where id=8; -update noar ti set b2='7P3IHE7N' where id=8; -update noar tt set b0='GJJPZ0U8XA6ML5O6D02KH0' where id=9; -update noar ti set b0='GJJPZ0U8XA6ML5O6D02KH0' where id=9; -update noar tt set b1='CBVU8V2TPJ97924S64YJND0Z4MBA9NG5' where id=9; -update noar ti set b1='CBVU8V2TPJ97924S64YJND0Z4MBA9NG5' where id=9; -update noar tt set b2='L0IIEXDAY4K3K5J95XYI2QHQB3ON0A' where id=9; -update noar ti set b2='L0IIEXDAY4K3K5J95XYI2QHQB3ON0A' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 longblob not null, -b1 longblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='O8WKUP0OJPHVO' where id=1; -update noar ti set b0='O8WKUP0OJPHVO' where id=1; -update noar tt set b1='KK9WTL5IKLWMW' where id=1; -update noar ti set b1='KK9WTL5IKLWMW' where id=1; -update noar tt set b2='HVQUD0PE0XWBN1MWD' where id=1; -update noar ti set b2='HVQUD0PE0XWBN1MWD' where id=1; -update noar tt set b0='HM3G7ACS9SU0YAWOPG' where id=2; -update noar ti set b0='HM3G7ACS9SU0YAWOPG' where id=2; -update noar tt set b1='JLHCSX7S69K6B86LCDKBL' where id=2; -update noar ti set b1='JLHCSX7S69K6B86LCDKBL' where id=2; -update noar tt set b2='8A4V7OQHV57EV9LQ17CJQQ' where id=2; -update noar ti set b2='8A4V7OQHV57EV9LQ17CJQQ' where id=2; -update noar tt set b0='C3W9X9RDX3OCY1BNWGDJVL8BRZ7E7B' where id=3; -update noar ti set b0='C3W9X9RDX3OCY1BNWGDJVL8BRZ7E7B' where id=3; -update noar tt set b1='H7ZHP5YILHI' where id=3; -update noar ti set b1='H7ZHP5YILHI' where id=3; -update noar tt set b2='CJNLQD2EWZ0DD03PC' where id=3; -update noar ti set b2='CJNLQD2EWZ0DD03PC' where id=3; -update noar tt set b0='TNIHXTKU8YA8K2G1BUSGIPM98GHP6' where id=4; -update noar ti set b0='TNIHXTKU8YA8K2G1BUSGIPM98GHP6' where id=4; -update noar tt set b1='8' where id=4; -update noar ti set b1='8' where id=4; -update noar tt set b2='Y2RP22TQM8EZC6IK2XR' where id=4; -update noar ti set b2='Y2RP22TQM8EZC6IK2XR' where id=4; -update noar tt set b0='JWIMKLKO' where id=5; -update noar ti set b0='JWIMKLKO' where id=5; -update noar tt set b1='DIIDNP0' where id=5; -update noar ti set b1='DIIDNP0' where id=5; -update noar tt set b2='7GG5758KKWFWZZS8BI282Q3TY' where id=5; -update noar ti set b2='7GG5758KKWFWZZS8BI282Q3TY' where id=5; -update noar tt set b0='HRU8N95LXV2L4BEP6Z3ACGNGI0OAFW9H' where id=6; -update noar ti set b0='HRU8N95LXV2L4BEP6Z3ACGNGI0OAFW9H' where id=6; -update noar tt set b1='YRHIWZFD59A7MQDYM0M' where id=6; -update noar ti set b1='YRHIWZFD59A7MQDYM0M' where id=6; -update noar tt set b2='M7MIYJRVFCZ8S' where id=6; -update noar ti set b2='M7MIYJRVFCZ8S' where id=6; -update noar tt set b0='4LF6QFJ49V1FWXX3P' where id=7; -update noar ti set b0='4LF6QFJ49V1FWXX3P' where id=7; -update noar tt set b1='B' where id=7; -update noar ti set b1='B' where id=7; -update noar tt set b2='Z7VKCPZWJYUA51NNSZ4I57RMT' where id=7; -update noar ti set b2='Z7VKCPZWJYUA51NNSZ4I57RMT' where id=7; -update noar tt set b0='O' where id=8; -update noar ti set b0='O' where id=8; -update noar tt set b1='79JWR7V3O' where id=8; -update noar ti set b1='79JWR7V3O' where id=8; -update noar tt set b2='E6KLVRC66LD60AMTJFWRPGRCJM' where id=8; -update noar ti set b2='E6KLVRC66LD60AMTJFWRPGRCJM' where id=8; -update noar tt set b0='KCCDWV' where id=9; -update noar ti set b0='KCCDWV' where id=9; -update noar tt set b1='XWQK9QSHLF1TOX5ZM54JS6S7UTWU' where id=9; -update noar ti set b1='XWQK9QSHLF1TOX5ZM54JS6S7UTWU' where id=9; -update noar tt set b2='4B9XB25G1LF7N8535CUPD003IH51L' where id=9; -update noar ti set b2='4B9XB25G1LF7N8535CUPD003IH51L' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 longblob null, -b1 longblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='M6' where id=1; -update noar ti set b0='M6' where id=1; -update noar tt set b1='6WB5YDKXASEESOEIB0CGQ9FQB9BM0' where id=1; -update noar ti set b1='6WB5YDKXASEESOEIB0CGQ9FQB9BM0' where id=1; -update noar tt set b2='MWRV1ZC71KY' where id=1; -update noar ti set b2='MWRV1ZC71KY' where id=1; -update noar tt set b0='P' where id=2; -update noar ti set b0='P' where id=2; -update noar tt set b1='PBG23HPBYPJFWGGTTVQAVA1221A' where id=2; -update noar ti set b1='PBG23HPBYPJFWGGTTVQAVA1221A' where id=2; -update noar tt set b2='N5ODQH4CJNW3Y043G748CKFM55' where id=2; -update noar ti set b2='N5ODQH4CJNW3Y043G748CKFM55' where id=2; -update noar tt set b0='JFGNBFXQZY41RCK7EEZ3UMB5YS' where id=3; -update noar ti set b0='JFGNBFXQZY41RCK7EEZ3UMB5YS' where id=3; -update noar tt set b1='KYS6VKGUWE0O' where id=3; -update noar ti set b1='KYS6VKGUWE0O' where id=3; -update noar tt set b2='24KE6M2' where id=3; -update noar ti set b2='24KE6M2' where id=3; -update noar tt set b0='9PE715FW0LW8' where id=4; -update noar ti set b0='9PE715FW0LW8' where id=4; -update noar tt set b1='6S4QWFKRY7CQCHRTE8' where id=4; -update noar ti set b1='6S4QWFKRY7CQCHRTE8' where id=4; -update noar tt set b2='Z6HYGVQMIH8ZZRVIZCQH2517JVAM6WAF' where id=4; -update noar ti set b2='Z6HYGVQMIH8ZZRVIZCQH2517JVAM6WAF' where id=4; -update noar tt set b0='0' where id=5; -update noar ti set b0='0' where id=5; -update noar tt set b1='JM8G7EZOUK' where id=5; -update noar ti set b1='JM8G7EZOUK' where id=5; -update noar tt set b2='J2QLZXW1BS77WRCPFWDK0R7R40XWL5G' where id=5; -update noar ti set b2='J2QLZXW1BS77WRCPFWDK0R7R40XWL5G' where id=5; -update noar tt set b0='64WAV8VYYW4SJ9AXC7GAYXV66JT' where id=6; -update noar ti set b0='64WAV8VYYW4SJ9AXC7GAYXV66JT' where id=6; -update noar tt set b1='IRCO0S0B62VWHKKY4LQ' where id=6; -update noar ti set b1='IRCO0S0B62VWHKKY4LQ' where id=6; -update noar tt set b2='YE7TSIK8J3T6PPJYK5HXWORSGSH' where id=6; -update noar ti set b2='YE7TSIK8J3T6PPJYK5HXWORSGSH' where id=6; -update noar tt set b0='UQ2LESGHE' where id=7; -update noar ti set b0='UQ2LESGHE' where id=7; -update noar tt set b1='ZNQKKJGEPZX7KHW0QKJ5J3G62H' where id=7; -update noar ti set b1='ZNQKKJGEPZX7KHW0QKJ5J3G62H' where id=7; -update noar tt set b2='1U' where id=7; -update noar ti set b2='1U' where id=7; -update noar tt set b0='EGLLD3VTQG94' where id=8; -update noar ti set b0='EGLLD3VTQG94' where id=8; -update noar tt set b1='OFPKB092PQ' where id=8; -update noar ti set b1='OFPKB092PQ' where id=8; -update noar tt set b2='27FUKE1Q4N0K9VMYZNBNVN0TZ1' where id=8; -update noar ti set b2='27FUKE1Q4N0K9VMYZNBNVN0TZ1' where id=8; -update noar tt set b0='O46O' where id=9; -update noar ti set b0='O46O' where id=9; -update noar tt set b1='FCMBEMW0OFUVPO4HFG1' where id=9; -update noar ti set b1='FCMBEMW0OFUVPO4HFG1' where id=9; -update noar tt set b2='8HFH5IXT25D51NJ2' where id=9; -update noar ti set b2='8HFH5IXT25D51NJ2' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 longblob not null, -b1 longblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='LOIGPTMH2X0PVMR' where id=1; -update noar ti set b0='LOIGPTMH2X0PVMR' where id=1; -update noar tt set b1='57RGHKZE8M3OXGE' where id=1; -update noar ti set b1='57RGHKZE8M3OXGE' where id=1; -update noar tt set b2='LJHDI' where id=1; -update noar ti set b2='LJHDI' where id=1; -update noar tt set b0='9Y08OP0C3TPM0I67GKS52J9IBDWESIQ5' where id=2; -update noar ti set b0='9Y08OP0C3TPM0I67GKS52J9IBDWESIQ5' where id=2; -update noar tt set b1='63JJSAJFUBT00N5A63FV4' where id=2; -update noar ti set b1='63JJSAJFUBT00N5A63FV4' where id=2; -update noar tt set b2='TMQ47D4PZ7BKVK' where id=2; -update noar ti set b2='TMQ47D4PZ7BKVK' where id=2; -update noar tt set b0='7AFUGYCRF7ITUP9UBU9RQV' where id=3; -update noar ti set b0='7AFUGYCRF7ITUP9UBU9RQV' where id=3; -update noar tt set b1='XUTWM' where id=3; -update noar ti set b1='XUTWM' where id=3; -update noar tt set b2='EMGLMKTYRPSOI2OOULQZ' where id=3; -update noar ti set b2='EMGLMKTYRPSOI2OOULQZ' where id=3; -update noar tt set b0='0JE8HS' where id=4; -update noar ti set b0='0JE8HS' where id=4; -update noar tt set b1='YH0VA0DYH3F0A266D0TH1X5DP1W3CAT9' where id=4; -update noar ti set b1='YH0VA0DYH3F0A266D0TH1X5DP1W3CAT9' where id=4; -update noar tt set b2='6N33REG8SD4FHOS' where id=4; -update noar ti set b2='6N33REG8SD4FHOS' where id=4; -update noar tt set b0='MD4KNI3O3YPL3RPZPRVKL03' where id=5; -update noar ti set b0='MD4KNI3O3YPL3RPZPRVKL03' where id=5; -update noar tt set b1='RORK4YSJCSVRT' where id=5; -update noar ti set b1='RORK4YSJCSVRT' where id=5; -update noar tt set b2='C8ID8J2N7' where id=5; -update noar ti set b2='C8ID8J2N7' where id=5; -update noar tt set b0='ZU8F3BTWZG3P4018BBZPC' where id=6; -update noar ti set b0='ZU8F3BTWZG3P4018BBZPC' where id=6; -update noar tt set b1='0Z1FIOWA' where id=6; -update noar ti set b1='0Z1FIOWA' where id=6; -update noar tt set b2='TSGTY6PRQP4AT1HSNAO5WFB00JIQ2' where id=6; -update noar ti set b2='TSGTY6PRQP4AT1HSNAO5WFB00JIQ2' where id=6; -update noar tt set b0='N07TZK' where id=7; -update noar ti set b0='N07TZK' where id=7; -update noar tt set b1='GQ9OF7L2C' where id=7; -update noar ti set b1='GQ9OF7L2C' where id=7; -update noar tt set b2='6DZ2EY' where id=7; -update noar ti set b2='6DZ2EY' where id=7; -update noar tt set b0='T2QJSVQC4C1C6' where id=8; -update noar ti set b0='T2QJSVQC4C1C6' where id=8; -update noar tt set b1='DAO' where id=8; -update noar ti set b1='DAO' where id=8; -update noar tt set b2='OGCR9' where id=8; -update noar ti set b2='OGCR9' where id=8; -update noar tt set b0='2M' where id=9; -update noar ti set b0='2M' where id=9; -update noar tt set b1='Y4UB9DLPJVU77PS0EOENBQ5KZ' where id=9; -update noar ti set b1='Y4UB9DLPJVU77PS0EOENBQ5KZ' where id=9; -update noar tt set b2='05TWF3FI3IU6GS0VCVY5E4R9VJHT' where id=9; -update noar ti set b2='05TWF3FI3IU6GS0VCVY5E4R9VJHT' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 longblob null, -b1 longblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='TCW6EBVP9UP9QGMUS51KORF' where id=1; -update noar ti set b0='TCW6EBVP9UP9QGMUS51KORF' where id=1; -update noar tt set b1='8C3LUI4LKPTXEZLKMN55GYB' where id=1; -update noar ti set b1='8C3LUI4LKPTXEZLKMN55GYB' where id=1; -update noar tt set b2='42B6N2JQJNSCLKPA4PS3NL' where id=1; -update noar ti set b2='42B6N2JQJNSCLKPA4PS3NL' where id=1; -update noar tt set b0='QVSDA9OP9GA1497N' where id=2; -update noar ti set b0='QVSDA9OP9GA1497N' where id=2; -update noar tt set b1='O7VYDWML6GQR47VSOGLOOXYGT7NV' where id=2; -update noar ti set b1='O7VYDWML6GQR47VSOGLOOXYGT7NV' where id=2; -update noar tt set b2='HOSWBF1OKMCPINYL8ZSPFZJ' where id=2; -update noar ti set b2='HOSWBF1OKMCPINYL8ZSPFZJ' where id=2; -update noar tt set b0='Q8LK2JFAMAA1Q7GHC9VUUIZ12D' where id=3; -update noar ti set b0='Q8LK2JFAMAA1Q7GHC9VUUIZ12D' where id=3; -update noar tt set b1='I4N6RHTNI4QZELU0O194UHQ29R4O' where id=3; -update noar ti set b1='I4N6RHTNI4QZELU0O194UHQ29R4O' where id=3; -update noar tt set b2='1TPSL' where id=3; -update noar ti set b2='1TPSL' where id=3; -update noar tt set b0='OZRGLMGJUUDWXHU1TK' where id=4; -update noar ti set b0='OZRGLMGJUUDWXHU1TK' where id=4; -update noar tt set b1='MJ60Q5R2WH0MNTO1ORB230HXDL84L' where id=4; -update noar ti set b1='MJ60Q5R2WH0MNTO1ORB230HXDL84L' where id=4; -update noar tt set b2='041ND2IUG5F4RMG58N5' where id=4; -update noar ti set b2='041ND2IUG5F4RMG58N5' where id=4; -update noar tt set b0='SNZE32A' where id=5; -update noar ti set b0='SNZE32A' where id=5; -update noar tt set b1='KE66HRYN6CR' where id=5; -update noar ti set b1='KE66HRYN6CR' where id=5; -update noar tt set b2='KEZMOKYAOMVCIST330EO2PWW7' where id=5; -update noar ti set b2='KEZMOKYAOMVCIST330EO2PWW7' where id=5; -update noar tt set b0='9P2XB5CPWOZWV3GYYFI0RW0U4B63NDI8' where id=6; -update noar ti set b0='9P2XB5CPWOZWV3GYYFI0RW0U4B63NDI8' where id=6; -update noar tt set b1='KH1XS0JT' where id=6; -update noar ti set b1='KH1XS0JT' where id=6; -update noar tt set b2='USXE69YTV7FHGNQ' where id=6; -update noar ti set b2='USXE69YTV7FHGNQ' where id=6; -update noar tt set b0='DRPVW0RCXA8MDIBI' where id=7; -update noar ti set b0='DRPVW0RCXA8MDIBI' where id=7; -update noar tt set b1='8HBE24DW4SMQAR684WBOG8AOW20ZW1' where id=7; -update noar ti set b1='8HBE24DW4SMQAR684WBOG8AOW20ZW1' where id=7; -update noar tt set b2='T5Q9A00' where id=7; -update noar ti set b2='T5Q9A00' where id=7; -update noar tt set b0='AEJTADFSQO58GJ8RUWL8QF77Y679G9' where id=8; -update noar ti set b0='AEJTADFSQO58GJ8RUWL8QF77Y679G9' where id=8; -update noar tt set b1='VYCQ17FLWVL' where id=8; -update noar ti set b1='VYCQ17FLWVL' where id=8; -update noar tt set b2='ZT8NI2P9IXQW7ABNZDBG3' where id=8; -update noar ti set b2='ZT8NI2P9IXQW7ABNZDBG3' where id=8; -update noar tt set b0='YN1W59WFGNGAXBYCTPZSB' where id=9; -update noar ti set b0='YN1W59WFGNGAXBYCTPZSB' where id=9; -update noar tt set b1='K1K4E0L52QD4Z2S2XT3P0PAW0D51P5' where id=9; -update noar ti set b1='K1K4E0L52QD4Z2S2XT3P0PAW0D51P5' where id=9; -update noar tt set b2='QX0U6J6ES7HECXBYHZG221SVAQC14' where id=9; -update noar ti set b2='QX0U6J6ES7HECXBYHZG221SVAQC14' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 longblob not null, -b1 longblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='XHH8E0XSN2I4NSK8A5DVRCP' where id=1; -update noar ti set b0='XHH8E0XSN2I4NSK8A5DVRCP' where id=1; -update noar tt set b1='AZERK72OLM48' where id=1; -update noar ti set b1='AZERK72OLM48' where id=1; -update noar tt set b2='FKE252EO' where id=1; -update noar ti set b2='FKE252EO' where id=1; -update noar tt set b0='PP9EED' where id=2; -update noar ti set b0='PP9EED' where id=2; -update noar tt set b1='5R' where id=2; -update noar ti set b1='5R' where id=2; -update noar tt set b2='4I6XG7D5R37RG3LU00J80' where id=2; -update noar ti set b2='4I6XG7D5R37RG3LU00J80' where id=2; -update noar tt set b0='HY8A2JS8YGQ1X950WNQQV' where id=3; -update noar ti set b0='HY8A2JS8YGQ1X950WNQQV' where id=3; -update noar tt set b1='70MXOM7E5EFKICV4ZZ1VXRXYBXFBWV5' where id=3; -update noar ti set b1='70MXOM7E5EFKICV4ZZ1VXRXYBXFBWV5' where id=3; -update noar tt set b2='KH' where id=3; -update noar ti set b2='KH' where id=3; -update noar tt set b0='CLUWPWGVV0VQS70AZXP4L' where id=4; -update noar ti set b0='CLUWPWGVV0VQS70AZXP4L' where id=4; -update noar tt set b1='6IBA3QKDFC86' where id=4; -update noar ti set b1='6IBA3QKDFC86' where id=4; -update noar tt set b2='8RAKOD46SSM011UG402AE' where id=4; -update noar ti set b2='8RAKOD46SSM011UG402AE' where id=4; -update noar tt set b0='47OOAO3OY7F71LSYTSH8G2CD42IVVGLD' where id=5; -update noar ti set b0='47OOAO3OY7F71LSYTSH8G2CD42IVVGLD' where id=5; -update noar tt set b1='5DCEX' where id=5; -update noar ti set b1='5DCEX' where id=5; -update noar tt set b2='936' where id=5; -update noar ti set b2='936' where id=5; -update noar tt set b0='OKXI7BSNF8VFXV9071ENG9E8RPM3' where id=6; -update noar ti set b0='OKXI7BSNF8VFXV9071ENG9E8RPM3' where id=6; -update noar tt set b1='ZNVFE7YGFHV' where id=6; -update noar ti set b1='ZNVFE7YGFHV' where id=6; -update noar tt set b2='48SD6JZNU6ZCBARXSSAZ4XCAAP' where id=6; -update noar ti set b2='48SD6JZNU6ZCBARXSSAZ4XCAAP' where id=6; -update noar tt set b0='PO5Y4CKD9CEUJK3UKCSJJ' where id=7; -update noar ti set b0='PO5Y4CKD9CEUJK3UKCSJJ' where id=7; -update noar tt set b1='GTMT0N7G0SN49C86N6XE1Y5R3HBCN' where id=7; -update noar ti set b1='GTMT0N7G0SN49C86N6XE1Y5R3HBCN' where id=7; -update noar tt set b2='EXI9CZZ7HTL9YDLMJNEGUSJU6' where id=7; -update noar ti set b2='EXI9CZZ7HTL9YDLMJNEGUSJU6' where id=7; -update noar tt set b0='GT3GZU2LPMI4HKCEHZZUFGLEC0O' where id=8; -update noar ti set b0='GT3GZU2LPMI4HKCEHZZUFGLEC0O' where id=8; -update noar tt set b1='BFWH8096KEUJPQHYFIMTTYU8WEY' where id=8; -update noar ti set b1='BFWH8096KEUJPQHYFIMTTYU8WEY' where id=8; -update noar tt set b2='S' where id=8; -update noar ti set b2='S' where id=8; -update noar tt set b0='1K45W48ID7H1EDY' where id=9; -update noar ti set b0='1K45W48ID7H1EDY' where id=9; -update noar tt set b1='GYLG39VE0JBO1MB5QLWTY' where id=9; -update noar ti set b1='GYLG39VE0JBO1MB5QLWTY' where id=9; -update noar tt set b2='RC0IPBSC' where id=9; -update noar ti set b2='RC0IPBSC' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 longblob null, -b1 longblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='VH69R' where id=1; -update noar ti set b0='VH69R' where id=1; -update noar tt set b1='1' where id=1; -update noar ti set b1='1' where id=1; -update noar tt set b2='KU0KOINH1J33J' where id=1; -update noar ti set b2='KU0KOINH1J33J' where id=1; -update noar tt set b0='3J39WA7HOWMUDVO4TD5R5JAXAR' where id=2; -update noar ti set b0='3J39WA7HOWMUDVO4TD5R5JAXAR' where id=2; -update noar tt set b1='2GEGVMH7T3K' where id=2; -update noar ti set b1='2GEGVMH7T3K' where id=2; -update noar tt set b2='BHLG33DTOJTJ2I15' where id=2; -update noar ti set b2='BHLG33DTOJTJ2I15' where id=2; -update noar tt set b0='2QLPTOEITFGJJSVACZ2' where id=3; -update noar ti set b0='2QLPTOEITFGJJSVACZ2' where id=3; -update noar tt set b1='KXCDLQIKEI0YCWT' where id=3; -update noar ti set b1='KXCDLQIKEI0YCWT' where id=3; -update noar tt set b2='AOM956HPGAV178JJ4LBQJOTA' where id=3; -update noar ti set b2='AOM956HPGAV178JJ4LBQJOTA' where id=3; -update noar tt set b0='M1KU9H' where id=4; -update noar ti set b0='M1KU9H' where id=4; -update noar tt set b1='OICW0BW5CU2C' where id=4; -update noar ti set b1='OICW0BW5CU2C' where id=4; -update noar tt set b2='M' where id=4; -update noar ti set b2='M' where id=4; -update noar tt set b0='RAEZSIUWDXWC8' where id=5; -update noar ti set b0='RAEZSIUWDXWC8' where id=5; -update noar tt set b1='PKCRYIL7FQP8UOHPHCI7' where id=5; -update noar ti set b1='PKCRYIL7FQP8UOHPHCI7' where id=5; -update noar tt set b2='PM3S0ZZABNWW2SJSMJR7QRGZZW' where id=5; -update noar ti set b2='PM3S0ZZABNWW2SJSMJR7QRGZZW' where id=5; -update noar tt set b0='Q1VR6YF' where id=6; -update noar ti set b0='Q1VR6YF' where id=6; -update noar tt set b1='ZF8PIXB4QVUL' where id=6; -update noar ti set b1='ZF8PIXB4QVUL' where id=6; -update noar tt set b2='9PIY24FPU2NLO5DFR' where id=6; -update noar ti set b2='9PIY24FPU2NLO5DFR' where id=6; -update noar tt set b0='R8ELXK9S618HG1NC6KRDKRVYJCNL1I' where id=7; -update noar ti set b0='R8ELXK9S618HG1NC6KRDKRVYJCNL1I' where id=7; -update noar tt set b1='IQQRKI9KAR7FMSNYBP0T' where id=7; -update noar ti set b1='IQQRKI9KAR7FMSNYBP0T' where id=7; -update noar tt set b2='OXF525BKZ3CHRMS9HIOHY' where id=7; -update noar ti set b2='OXF525BKZ3CHRMS9HIOHY' where id=7; -update noar tt set b0='KSJGXCHACNFN7AM' where id=8; -update noar ti set b0='KSJGXCHACNFN7AM' where id=8; -update noar tt set b1='4QBJRH2QXN95JFQM4' where id=8; -update noar ti set b1='4QBJRH2QXN95JFQM4' where id=8; -update noar tt set b2='SLG1MNLMALG3T5' where id=8; -update noar ti set b2='SLG1MNLMALG3T5' where id=8; -update noar tt set b0='0SUC73T9V41OF0YYW8BKEYNGA3L' where id=9; -update noar ti set b0='0SUC73T9V41OF0YYW8BKEYNGA3L' where id=9; -update noar tt set b1='UMU77' where id=9; -update noar ti set b1='UMU77' where id=9; -update noar tt set b2='2VD77658L33TDFZ267T51S9OQ0A8' where id=9; -update noar ti set b2='2VD77658L33TDFZ267T51S9OQ0A8' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 longblob not null, -b1 longblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='RX' where id=1; -update noar ti set b0='RX' where id=1; -update noar tt set b1='7SFJKQ7NGLUF72G' where id=1; -update noar ti set b1='7SFJKQ7NGLUF72G' where id=1; -update noar tt set b2='0PS3ZQ82RIRXU3QZ2HXT7JT25' where id=1; -update noar ti set b2='0PS3ZQ82RIRXU3QZ2HXT7JT25' where id=1; -update noar tt set b0='P8IPKEVX6GG08UY4X1LR3XRPHOO1ODHH' where id=2; -update noar ti set b0='P8IPKEVX6GG08UY4X1LR3XRPHOO1ODHH' where id=2; -update noar tt set b1='XK6IA9WF7UVL7WSTM' where id=2; -update noar ti set b1='XK6IA9WF7UVL7WSTM' where id=2; -update noar tt set b2='VDIY64XOB7BLIJXFRI721NH' where id=2; -update noar ti set b2='VDIY64XOB7BLIJXFRI721NH' where id=2; -update noar tt set b0='J821WCG' where id=3; -update noar ti set b0='J821WCG' where id=3; -update noar tt set b1='80EX56MFC7IUZH92Y6JGYVH4U8' where id=3; -update noar ti set b1='80EX56MFC7IUZH92Y6JGYVH4U8' where id=3; -update noar tt set b2='XHS44SE0OG7VZ6AW6S431GUDH' where id=3; -update noar ti set b2='XHS44SE0OG7VZ6AW6S431GUDH' where id=3; -update noar tt set b0='EH3NET' where id=4; -update noar ti set b0='EH3NET' where id=4; -update noar tt set b1='TRR4VRBAHIKACQK9POT0H9SH0S1UEI4K' where id=4; -update noar ti set b1='TRR4VRBAHIKACQK9POT0H9SH0S1UEI4K' where id=4; -update noar tt set b2='PTOXLSHDOZVJ4LWT' where id=4; -update noar ti set b2='PTOXLSHDOZVJ4LWT' where id=4; -update noar tt set b0='GYZI' where id=5; -update noar ti set b0='GYZI' where id=5; -update noar tt set b1='YAEMFXIFLF4' where id=5; -update noar ti set b1='YAEMFXIFLF4' where id=5; -update noar tt set b2='ZVSIY6IF0' where id=5; -update noar ti set b2='ZVSIY6IF0' where id=5; -update noar tt set b0='IXOY98PLQ9OS9WUVBI397UQTN' where id=6; -update noar ti set b0='IXOY98PLQ9OS9WUVBI397UQTN' where id=6; -update noar tt set b1='XNSK1FW6XABO1HJGHYMRT' where id=6; -update noar ti set b1='XNSK1FW6XABO1HJGHYMRT' where id=6; -update noar tt set b2='B2HUPDHI42ICSX9KTZUD2EO4' where id=6; -update noar ti set b2='B2HUPDHI42ICSX9KTZUD2EO4' where id=6; -update noar tt set b0='1KV9NUL8DBR1699UPBH8FY8VZMKO' where id=7; -update noar ti set b0='1KV9NUL8DBR1699UPBH8FY8VZMKO' where id=7; -update noar tt set b1='7MAVLJXTDOQT5W5OW7FLCE4MC8558HGM' where id=7; -update noar ti set b1='7MAVLJXTDOQT5W5OW7FLCE4MC8558HGM' where id=7; -update noar tt set b2='7F99MF82OI64IFU37Q7DHASXMIRU' where id=7; -update noar ti set b2='7F99MF82OI64IFU37Q7DHASXMIRU' where id=7; -update noar tt set b0='OW0FE9S45ZTL5NBR7952SMGH0A5GYGNB' where id=8; -update noar ti set b0='OW0FE9S45ZTL5NBR7952SMGH0A5GYGNB' where id=8; -update noar tt set b1='KHZEVA47Y3G3EB4TTG47L890L8SVH' where id=8; -update noar ti set b1='KHZEVA47Y3G3EB4TTG47L890L8SVH' where id=8; -update noar tt set b2='3YYY52H1O9Z7TDJ63UT8' where id=8; -update noar ti set b2='3YYY52H1O9Z7TDJ63UT8' where id=8; -update noar tt set b0='KV5CBWGS2' where id=9; -update noar ti set b0='KV5CBWGS2' where id=9; -update noar tt set b1='K01P1ADJHBX9BCU2H579SUMF' where id=9; -update noar ti set b1='K01P1ADJHBX9BCU2H579SUMF' where id=9; -update noar tt set b2='ZTM617SXJQO962JQILLLJ51' where id=9; -update noar ti set b2='ZTM617SXJQO962JQILLLJ51' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 longblob null, -b1 longblob null, -b2 text null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='2WIKWBMMPT0BTDOSXDMBT0C' where id=1; -update noar ti set b0='2WIKWBMMPT0BTDOSXDMBT0C' where id=1; -update noar tt set b1='TGLJ1KJOGBEQKJP2LL' where id=1; -update noar ti set b1='TGLJ1KJOGBEQKJP2LL' where id=1; -update noar tt set b2='XKOKP4L285RBK8' where id=1; -update noar ti set b2='XKOKP4L285RBK8' where id=1; -update noar tt set b0='100MFWVG1L' where id=2; -update noar ti set b0='100MFWVG1L' where id=2; -update noar tt set b1='9XAKCPD3' where id=2; -update noar ti set b1='9XAKCPD3' where id=2; -update noar tt set b2='FUYFBZRR5TFCOHPC' where id=2; -update noar ti set b2='FUYFBZRR5TFCOHPC' where id=2; -update noar tt set b0='7I15R7YPIB8HO7OAJM5F0KL' where id=3; -update noar ti set b0='7I15R7YPIB8HO7OAJM5F0KL' where id=3; -update noar tt set b1='SU' where id=3; -update noar ti set b1='SU' where id=3; -update noar tt set b2='LP63XBPZ6R9SA6TFXL' where id=3; -update noar ti set b2='LP63XBPZ6R9SA6TFXL' where id=3; -update noar tt set b0='M70TWLABYGZ5HTH2DY4EZR' where id=4; -update noar ti set b0='M70TWLABYGZ5HTH2DY4EZR' where id=4; -update noar tt set b1='KX2I8N7TUCJRTF6E5T8TCEBY8XSE74CH' where id=4; -update noar ti set b1='KX2I8N7TUCJRTF6E5T8TCEBY8XSE74CH' where id=4; -update noar tt set b2='78Y7C6Q7IPA5X0VGSY4X5U70JSN9X8' where id=4; -update noar ti set b2='78Y7C6Q7IPA5X0VGSY4X5U70JSN9X8' where id=4; -update noar tt set b0='TRQ31J29CXMTFFQR1BRKZ4OLS3VNJ' where id=5; -update noar ti set b0='TRQ31J29CXMTFFQR1BRKZ4OLS3VNJ' where id=5; -update noar tt set b1='9KRQKLE71' where id=5; -update noar ti set b1='9KRQKLE71' where id=5; -update noar tt set b2='CW8BYP2AK41K43IGUP' where id=5; -update noar ti set b2='CW8BYP2AK41K43IGUP' where id=5; -update noar tt set b0='X3UO96CRHWBGZAY9H98S2' where id=6; -update noar ti set b0='X3UO96CRHWBGZAY9H98S2' where id=6; -update noar tt set b1='2MLWK3MDDBZ6' where id=6; -update noar ti set b1='2MLWK3MDDBZ6' where id=6; -update noar tt set b2='D7GGF1B6GJBUQK91TZZYFAWXN8ZJ' where id=6; -update noar ti set b2='D7GGF1B6GJBUQK91TZZYFAWXN8ZJ' where id=6; -update noar tt set b0='R9H5MTFZ3ZT80MCI' where id=7; -update noar ti set b0='R9H5MTFZ3ZT80MCI' where id=7; -update noar tt set b1='FXZSVI7TP' where id=7; -update noar ti set b1='FXZSVI7TP' where id=7; -update noar tt set b2='ON84ZS5BOJOYDICM' where id=7; -update noar ti set b2='ON84ZS5BOJOYDICM' where id=7; -update noar tt set b0='MDL5FYSRTB1HXSLSTW' where id=8; -update noar ti set b0='MDL5FYSRTB1HXSLSTW' where id=8; -update noar tt set b1='1HYNFP' where id=8; -update noar ti set b1='1HYNFP' where id=8; -update noar tt set b2='6FW32QWAD5QAUSHGFSAGBV3NW2Y4' where id=8; -update noar ti set b2='6FW32QWAD5QAUSHGFSAGBV3NW2Y4' where id=8; -update noar tt set b0='E9ZPTE6UYGOZN71HT7RKNRATSMG7T' where id=9; -update noar ti set b0='E9ZPTE6UYGOZN71HT7RKNRATSMG7T' where id=9; -update noar tt set b1='Z35NU7RZK9S0DIKZBDGRFH' where id=9; -update noar ti set b1='Z35NU7RZK9S0DIKZBDGRFH' where id=9; -update noar tt set b2='46GB' where id=9; -update noar ti set b2='46GB' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 longblob not null, -b1 longblob not null, -b2 text not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='BH' where id=1; -update noar ti set b0='BH' where id=1; -update noar tt set b1='XX7RVUO4SIWCIVA7DMFFN3V6U' where id=1; -update noar ti set b1='XX7RVUO4SIWCIVA7DMFFN3V6U' where id=1; -update noar tt set b2='3LKF5' where id=1; -update noar ti set b2='3LKF5' where id=1; -update noar tt set b0='C8IJZ8LM08' where id=2; -update noar ti set b0='C8IJZ8LM08' where id=2; -update noar tt set b1='XPW4AV1YV3V' where id=2; -update noar ti set b1='XPW4AV1YV3V' where id=2; -update noar tt set b2='R3M39UVD5VSPO1WHGFXC47HBJOLBE' where id=2; -update noar ti set b2='R3M39UVD5VSPO1WHGFXC47HBJOLBE' where id=2; -update noar tt set b0='MDYZ4UMN' where id=3; -update noar ti set b0='MDYZ4UMN' where id=3; -update noar tt set b1='8U4G9SL1ECWR7MQPUWVUKM64ZF' where id=3; -update noar ti set b1='8U4G9SL1ECWR7MQPUWVUKM64ZF' where id=3; -update noar tt set b2='5' where id=3; -update noar ti set b2='5' where id=3; -update noar tt set b0='1CKYP7OR7TV7WOE' where id=4; -update noar ti set b0='1CKYP7OR7TV7WOE' where id=4; -update noar tt set b1='N8S' where id=4; -update noar ti set b1='N8S' where id=4; -update noar tt set b2='Y9KNQYN1TIJ8R3MMY9' where id=4; -update noar ti set b2='Y9KNQYN1TIJ8R3MMY9' where id=4; -update noar tt set b0='2J34U29IYY78WEVDEM2MMOQJDSTA' where id=5; -update noar ti set b0='2J34U29IYY78WEVDEM2MMOQJDSTA' where id=5; -update noar tt set b1='4Y68T5KGB9AMO2RQJ4YTOZYI' where id=5; -update noar ti set b1='4Y68T5KGB9AMO2RQJ4YTOZYI' where id=5; -update noar tt set b2='QBLXNG' where id=5; -update noar ti set b2='QBLXNG' where id=5; -update noar tt set b0='OVKTJB6EMLIBSKX' where id=6; -update noar ti set b0='OVKTJB6EMLIBSKX' where id=6; -update noar tt set b1='1LU91IHNHXOIALCCKCPUTTRVB' where id=6; -update noar ti set b1='1LU91IHNHXOIALCCKCPUTTRVB' where id=6; -update noar tt set b2='1YHRCT7' where id=6; -update noar ti set b2='1YHRCT7' where id=6; -update noar tt set b0='LT2QECPJ8ZGPE23R9MDQCW9LPG51DYN' where id=7; -update noar ti set b0='LT2QECPJ8ZGPE23R9MDQCW9LPG51DYN' where id=7; -update noar tt set b1='2XH2JJL3' where id=7; -update noar ti set b1='2XH2JJL3' where id=7; -update noar tt set b2='FY6D293RBNTB3SXH5Z7KW' where id=7; -update noar ti set b2='FY6D293RBNTB3SXH5Z7KW' where id=7; -update noar tt set b0='C7QF' where id=8; -update noar ti set b0='C7QF' where id=8; -update noar tt set b1='XAW65IM9JAAZ6V86R0F223WOO' where id=8; -update noar ti set b1='XAW65IM9JAAZ6V86R0F223WOO' where id=8; -update noar tt set b2='KV5OJN4B' where id=8; -update noar ti set b2='KV5OJN4B' where id=8; -update noar tt set b0='JAHB8FQT2D36DV4UX' where id=9; -update noar ti set b0='JAHB8FQT2D36DV4UX' where id=9; -update noar tt set b1='4PPNZJ' where id=9; -update noar ti set b1='4PPNZJ' where id=9; -update noar tt set b2='PPGI736QC17GGCA' where id=9; -update noar ti set b2='PPGI736QC17GGCA' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 longblob null, -b1 text null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='3YRR7GNBKJZOIQLADTO' where id=1; -update noar ti set b0='3YRR7GNBKJZOIQLADTO' where id=1; -update noar tt set b1='3E' where id=1; -update noar ti set b1='3E' where id=1; -update noar tt set b2='ELLO9IKPCOX11HV64LS5RVLQ40H8FG' where id=1; -update noar ti set b2='ELLO9IKPCOX11HV64LS5RVLQ40H8FG' where id=1; -update noar tt set b0='9W0E' where id=2; -update noar ti set b0='9W0E' where id=2; -update noar tt set b1='C07K9E2R61X7P' where id=2; -update noar ti set b1='C07K9E2R61X7P' where id=2; -update noar tt set b2='0IHZU2DFEP0ZK8DZMYXYN4H' where id=2; -update noar ti set b2='0IHZU2DFEP0ZK8DZMYXYN4H' where id=2; -update noar tt set b0='EVVN8BOWTNO4' where id=3; -update noar ti set b0='EVVN8BOWTNO4' where id=3; -update noar tt set b1='5UA3' where id=3; -update noar ti set b1='5UA3' where id=3; -update noar tt set b2='BQNR3PGGO' where id=3; -update noar ti set b2='BQNR3PGGO' where id=3; -update noar tt set b0='6WYQXCORSR8IDTF4M83P12073P' where id=4; -update noar ti set b0='6WYQXCORSR8IDTF4M83P12073P' where id=4; -update noar tt set b1='0F0F7E' where id=4; -update noar ti set b1='0F0F7E' where id=4; -update noar tt set b2='8MUPWP77CNI74YHCRTTBG0OQL7' where id=4; -update noar ti set b2='8MUPWP77CNI74YHCRTTBG0OQL7' where id=4; -update noar tt set b0='8J' where id=5; -update noar ti set b0='8J' where id=5; -update noar tt set b1='T1XJR0DQTPH' where id=5; -update noar ti set b1='T1XJR0DQTPH' where id=5; -update noar tt set b2='RTXMS51KBXM7TLOWDO34V7C3SYM' where id=5; -update noar ti set b2='RTXMS51KBXM7TLOWDO34V7C3SYM' where id=5; -update noar tt set b0='64ENRG818K' where id=6; -update noar ti set b0='64ENRG818K' where id=6; -update noar tt set b1='V359EERFLGTGF86GU' where id=6; -update noar ti set b1='V359EERFLGTGF86GU' where id=6; -update noar tt set b2='OKEWJ5HPG82BW9Q' where id=6; -update noar ti set b2='OKEWJ5HPG82BW9Q' where id=6; -update noar tt set b0='B2T0Z4F2MQ4' where id=7; -update noar ti set b0='B2T0Z4F2MQ4' where id=7; -update noar tt set b1='EE' where id=7; -update noar ti set b1='EE' where id=7; -update noar tt set b2='LHBI3' where id=7; -update noar ti set b2='LHBI3' where id=7; -update noar tt set b0='O3O' where id=8; -update noar ti set b0='O3O' where id=8; -update noar tt set b1='WRQMGL0UL1QC' where id=8; -update noar ti set b1='WRQMGL0UL1QC' where id=8; -update noar tt set b2='ITBDHX2' where id=8; -update noar ti set b2='ITBDHX2' where id=8; -update noar tt set b0='FJQD1PUN9UNRPTY4O6RBAF6' where id=9; -update noar ti set b0='FJQD1PUN9UNRPTY4O6RBAF6' where id=9; -update noar tt set b1='U72IE' where id=9; -update noar ti set b1='U72IE' where id=9; -update noar tt set b2='MHW3V5H4RX7BK1KHXD8FHR3C9SK4Y84' where id=9; -update noar ti set b2='MHW3V5H4RX7BK1KHXD8FHR3C9SK4Y84' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 longblob not null, -b1 text not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='UGA5RP5GQVX6K5C3SK' where id=1; -update noar ti set b0='UGA5RP5GQVX6K5C3SK' where id=1; -update noar tt set b1='Q037HZVZMPDHWOD30D7JSKJ17KRIHWEG' where id=1; -update noar ti set b1='Q037HZVZMPDHWOD30D7JSKJ17KRIHWEG' where id=1; -update noar tt set b2='J' where id=1; -update noar ti set b2='J' where id=1; -update noar tt set b0='BH5Z6SC5AK87FK0' where id=2; -update noar ti set b0='BH5Z6SC5AK87FK0' where id=2; -update noar tt set b1='H7W3NNOGOSOXO' where id=2; -update noar ti set b1='H7W3NNOGOSOXO' where id=2; -update noar tt set b2='MPYY2' where id=2; -update noar ti set b2='MPYY2' where id=2; -update noar tt set b0='PYF0UJLUISPVI' where id=3; -update noar ti set b0='PYF0UJLUISPVI' where id=3; -update noar tt set b1='QTRQYD3JWZQGETKDFZE3MZIG9N0PH' where id=3; -update noar ti set b1='QTRQYD3JWZQGETKDFZE3MZIG9N0PH' where id=3; -update noar tt set b2='2NNT7DJT6R4KHXDXO6KY1723QATECD' where id=3; -update noar ti set b2='2NNT7DJT6R4KHXDXO6KY1723QATECD' where id=3; -update noar tt set b0='V3' where id=4; -update noar ti set b0='V3' where id=4; -update noar tt set b1='AHASUQ1OXD1GCV6X1Y915FT' where id=4; -update noar ti set b1='AHASUQ1OXD1GCV6X1Y915FT' where id=4; -update noar tt set b2='MGJMYRBTVQJ34CBBL9GJ8GEP07349' where id=4; -update noar ti set b2='MGJMYRBTVQJ34CBBL9GJ8GEP07349' where id=4; -update noar tt set b0='2Q5SVI4IRZAM2TISEABH0UG99O15' where id=5; -update noar ti set b0='2Q5SVI4IRZAM2TISEABH0UG99O15' where id=5; -update noar tt set b1='0RDD50BFQQRDJXD6R' where id=5; -update noar ti set b1='0RDD50BFQQRDJXD6R' where id=5; -update noar tt set b2='S13IBYF6UWKOOGF' where id=5; -update noar ti set b2='S13IBYF6UWKOOGF' where id=5; -update noar tt set b0='A73KY6' where id=6; -update noar ti set b0='A73KY6' where id=6; -update noar tt set b1='KQA5MY6GWPGUVBITQ0QOMNIJK' where id=6; -update noar ti set b1='KQA5MY6GWPGUVBITQ0QOMNIJK' where id=6; -update noar tt set b2='F8JSSGO75DT3FUP8CRBMB6U9SI7AF9' where id=6; -update noar ti set b2='F8JSSGO75DT3FUP8CRBMB6U9SI7AF9' where id=6; -update noar tt set b0='ODHO2TOU5E2' where id=7; -update noar ti set b0='ODHO2TOU5E2' where id=7; -update noar tt set b1='1C49DCZSASYUAFWVQHV0' where id=7; -update noar ti set b1='1C49DCZSASYUAFWVQHV0' where id=7; -update noar tt set b2='EKT76EMAVIM' where id=7; -update noar ti set b2='EKT76EMAVIM' where id=7; -update noar tt set b0='MV1I9WNI2RN3SU5J' where id=8; -update noar ti set b0='MV1I9WNI2RN3SU5J' where id=8; -update noar tt set b1='ZB0BIWVWKPY' where id=8; -update noar ti set b1='ZB0BIWVWKPY' where id=8; -update noar tt set b2='R2A7L5SCDKUBFRXVFZ078XI4F0Q' where id=8; -update noar ti set b2='R2A7L5SCDKUBFRXVFZ078XI4F0Q' where id=8; -update noar tt set b0='EDROEI5PKGT0' where id=9; -update noar ti set b0='EDROEI5PKGT0' where id=9; -update noar tt set b1='68Z9IRV04BRXGYK' where id=9; -update noar ti set b1='68Z9IRV04BRXGYK' where id=9; -update noar tt set b2='CUY50A2L5LSZUG3E4410X43Z62VQ' where id=9; -update noar ti set b2='CUY50A2L5LSZUG3E4410X43Z62VQ' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 longblob null, -b1 text null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='J6FCD74UVB5' where id=1; -update noar ti set b0='J6FCD74UVB5' where id=1; -update noar tt set b1='H5WHS10JQM60O9' where id=1; -update noar ti set b1='H5WHS10JQM60O9' where id=1; -update noar tt set b2='9686UOK9UONR7398POIO4JL4J7FHVG0C' where id=1; -update noar ti set b2='9686UOK9UONR7398POIO4JL4J7FHVG0C' where id=1; -update noar tt set b0='ZUIYRD' where id=2; -update noar ti set b0='ZUIYRD' where id=2; -update noar tt set b1='L2SB3MFF01' where id=2; -update noar ti set b1='L2SB3MFF01' where id=2; -update noar tt set b2='7FT9HU6PL82VRXXO1YX5SVWEL3OWF7R' where id=2; -update noar ti set b2='7FT9HU6PL82VRXXO1YX5SVWEL3OWF7R' where id=2; -update noar tt set b0='EKT64H605JFTJEE' where id=3; -update noar ti set b0='EKT64H605JFTJEE' where id=3; -update noar tt set b1='FKY5TXTC5ZQ7JLRWFKOA862IV92HR' where id=3; -update noar ti set b1='FKY5TXTC5ZQ7JLRWFKOA862IV92HR' where id=3; -update noar tt set b2='1JUNHV1O1DHI56M' where id=3; -update noar ti set b2='1JUNHV1O1DHI56M' where id=3; -update noar tt set b0='E48CPX4JO' where id=4; -update noar ti set b0='E48CPX4JO' where id=4; -update noar tt set b1='1J264W' where id=4; -update noar ti set b1='1J264W' where id=4; -update noar tt set b2='SOP6F9TFH9371RJAL7XEQLWUHC' where id=4; -update noar ti set b2='SOP6F9TFH9371RJAL7XEQLWUHC' where id=4; -update noar tt set b0='DMDLFB85GFGXYO56FFFQQ' where id=5; -update noar ti set b0='DMDLFB85GFGXYO56FFFQQ' where id=5; -update noar tt set b1='PTQK6PEZ250WEAXPQR6M2O' where id=5; -update noar ti set b1='PTQK6PEZ250WEAXPQR6M2O' where id=5; -update noar tt set b2='QJ9J7' where id=5; -update noar ti set b2='QJ9J7' where id=5; -update noar tt set b0='1N' where id=6; -update noar ti set b0='1N' where id=6; -update noar tt set b1='ZRDECDH' where id=6; -update noar ti set b1='ZRDECDH' where id=6; -update noar tt set b2='FP0KL0ON9BM273YWP' where id=6; -update noar ti set b2='FP0KL0ON9BM273YWP' where id=6; -update noar tt set b0='LZP10T28A8R' where id=7; -update noar ti set b0='LZP10T28A8R' where id=7; -update noar tt set b1='XH3LBXFYZMBB' where id=7; -update noar ti set b1='XH3LBXFYZMBB' where id=7; -update noar tt set b2='KZB8' where id=7; -update noar ti set b2='KZB8' where id=7; -update noar tt set b0='SLO162JR7QM8P5VAPNZQY4M3IAXXXGS' where id=8; -update noar ti set b0='SLO162JR7QM8P5VAPNZQY4M3IAXXXGS' where id=8; -update noar tt set b1='7HKRTCHTFMHN' where id=8; -update noar ti set b1='7HKRTCHTFMHN' where id=8; -update noar tt set b2='LRWG6FPRCJJI0XYD' where id=8; -update noar ti set b2='LRWG6FPRCJJI0XYD' where id=8; -update noar tt set b0='TMC2R9T9J' where id=9; -update noar ti set b0='TMC2R9T9J' where id=9; -update noar tt set b1='CK38ZD95JWM' where id=9; -update noar ti set b1='CK38ZD95JWM' where id=9; -update noar tt set b2='8JCWBVUMYZDFA' where id=9; -update noar ti set b2='8JCWBVUMYZDFA' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 longblob not null, -b1 text not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='W5H0A7QOV7Z4GRUSWPB4C4' where id=1; -update noar ti set b0='W5H0A7QOV7Z4GRUSWPB4C4' where id=1; -update noar tt set b1='QWM' where id=1; -update noar ti set b1='QWM' where id=1; -update noar tt set b2='LPJ' where id=1; -update noar ti set b2='LPJ' where id=1; -update noar tt set b0='51FZQGI1HE76MSJFSB67K9BR' where id=2; -update noar ti set b0='51FZQGI1HE76MSJFSB67K9BR' where id=2; -update noar tt set b1='WP7VCQL3K7FXY78ZX5JZ7FT8I36G' where id=2; -update noar ti set b1='WP7VCQL3K7FXY78ZX5JZ7FT8I36G' where id=2; -update noar tt set b2='P6GIVWFKV4GOJH01UIJK' where id=2; -update noar ti set b2='P6GIVWFKV4GOJH01UIJK' where id=2; -update noar tt set b0='NPZSZOA2CFE1MFMEO9UIFY4RKW21I3' where id=3; -update noar ti set b0='NPZSZOA2CFE1MFMEO9UIFY4RKW21I3' where id=3; -update noar tt set b1='2CHULP14F0' where id=3; -update noar ti set b1='2CHULP14F0' where id=3; -update noar tt set b2='2VN4' where id=3; -update noar ti set b2='2VN4' where id=3; -update noar tt set b0='B346T0F3GH7HUGVSXP8E2KWYY7PX48WH' where id=4; -update noar ti set b0='B346T0F3GH7HUGVSXP8E2KWYY7PX48WH' where id=4; -update noar tt set b1='QMH04RIB0L1B' where id=4; -update noar ti set b1='QMH04RIB0L1B' where id=4; -update noar tt set b2='JU9MQ' where id=4; -update noar ti set b2='JU9MQ' where id=4; -update noar tt set b0='KOY2CD' where id=5; -update noar ti set b0='KOY2CD' where id=5; -update noar tt set b1='NF' where id=5; -update noar ti set b1='NF' where id=5; -update noar tt set b2='FA0RSJUT1S9I04N7WR58BVUOW4B3Q' where id=5; -update noar ti set b2='FA0RSJUT1S9I04N7WR58BVUOW4B3Q' where id=5; -update noar tt set b0='QZVQ' where id=6; -update noar ti set b0='QZVQ' where id=6; -update noar tt set b1='QWCIK63XQRC9LUPBGGQ058BV10' where id=6; -update noar ti set b1='QWCIK63XQRC9LUPBGGQ058BV10' where id=6; -update noar tt set b2='5QD9IKRLULQ' where id=6; -update noar ti set b2='5QD9IKRLULQ' where id=6; -update noar tt set b0='IVVMK5K6GU1' where id=7; -update noar ti set b0='IVVMK5K6GU1' where id=7; -update noar tt set b1='OR8KI32IW987HBEH4YTP' where id=7; -update noar ti set b1='OR8KI32IW987HBEH4YTP' where id=7; -update noar tt set b2='LX10XK7NIIPZFM1MU9G3BSCTB61988P' where id=7; -update noar ti set b2='LX10XK7NIIPZFM1MU9G3BSCTB61988P' where id=7; -update noar tt set b0='QP83DRFFB1B9SPU68JC' where id=8; -update noar ti set b0='QP83DRFFB1B9SPU68JC' where id=8; -update noar tt set b1='C6VSDYJ7A3928BYS' where id=8; -update noar ti set b1='C6VSDYJ7A3928BYS' where id=8; -update noar tt set b2='Y6A4' where id=8; -update noar ti set b2='Y6A4' where id=8; -update noar tt set b0='R1IEXEDHKURI5PIGU1QI319S' where id=9; -update noar ti set b0='R1IEXEDHKURI5PIGU1QI319S' where id=9; -update noar tt set b1='DYOXZHN4WEJTGQY5Z0K56WX1UNN4O' where id=9; -update noar ti set b1='DYOXZHN4WEJTGQY5Z0K56WX1UNN4O' where id=9; -update noar tt set b2='9SIJVBSVNZ2DPPITJAOL7NZI' where id=9; -update noar ti set b2='9SIJVBSVNZ2DPPITJAOL7NZI' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 longblob null, -b1 text null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='SD8LNOMFZJMJIN7A76Q6C2' where id=1; -update noar ti set b0='SD8LNOMFZJMJIN7A76Q6C2' where id=1; -update noar tt set b1='7CG' where id=1; -update noar ti set b1='7CG' where id=1; -update noar tt set b2='EJ1XQC1QEVLKCNWFAT4XY90HTW' where id=1; -update noar ti set b2='EJ1XQC1QEVLKCNWFAT4XY90HTW' where id=1; -update noar tt set b0='1R1TWOIZ48RSM6L1LX5XAGB4X' where id=2; -update noar ti set b0='1R1TWOIZ48RSM6L1LX5XAGB4X' where id=2; -update noar tt set b1='XVSF67DEFB3O2FA20USQTI6BEBSZI8' where id=2; -update noar ti set b1='XVSF67DEFB3O2FA20USQTI6BEBSZI8' where id=2; -update noar tt set b2='YZ9TSCBHD904R07GM' where id=2; -update noar ti set b2='YZ9TSCBHD904R07GM' where id=2; -update noar tt set b0='KSOIIEM36HWG4OC5VRNBWPV6PXHBIM5H' where id=3; -update noar ti set b0='KSOIIEM36HWG4OC5VRNBWPV6PXHBIM5H' where id=3; -update noar tt set b1='A8N01RR1WCSU1SS2I8VHNG3E7' where id=3; -update noar ti set b1='A8N01RR1WCSU1SS2I8VHNG3E7' where id=3; -update noar tt set b2='W8FZZ0N50CZ573683OC77B' where id=3; -update noar ti set b2='W8FZZ0N50CZ573683OC77B' where id=3; -update noar tt set b0='JIVJMP5E6SE9SQR8ABXH9AIHPJ3UBST4' where id=4; -update noar ti set b0='JIVJMP5E6SE9SQR8ABXH9AIHPJ3UBST4' where id=4; -update noar tt set b1='4TDI0M9YG3MTI51JYRL5A0Y43B30' where id=4; -update noar ti set b1='4TDI0M9YG3MTI51JYRL5A0Y43B30' where id=4; -update noar tt set b2='RTD' where id=4; -update noar ti set b2='RTD' where id=4; -update noar tt set b0='O' where id=5; -update noar ti set b0='O' where id=5; -update noar tt set b1='GZIHJPGN9B' where id=5; -update noar ti set b1='GZIHJPGN9B' where id=5; -update noar tt set b2='5MD2VBPM' where id=5; -update noar ti set b2='5MD2VBPM' where id=5; -update noar tt set b0='KKVFF6E27078NKO2MA4' where id=6; -update noar ti set b0='KKVFF6E27078NKO2MA4' where id=6; -update noar tt set b1='PMWX4ZHPF5GB4WNB1OPT5DROV' where id=6; -update noar ti set b1='PMWX4ZHPF5GB4WNB1OPT5DROV' where id=6; -update noar tt set b2='A' where id=6; -update noar ti set b2='A' where id=6; -update noar tt set b0='X' where id=7; -update noar ti set b0='X' where id=7; -update noar tt set b1='GG24EDPR' where id=7; -update noar ti set b1='GG24EDPR' where id=7; -update noar tt set b2='NN437ZTIVTN' where id=7; -update noar ti set b2='NN437ZTIVTN' where id=7; -update noar tt set b0='K876776IE07' where id=8; -update noar ti set b0='K876776IE07' where id=8; -update noar tt set b1='4TA2MKQ5CJIY6LB4A0U7DRWJK5T6' where id=8; -update noar ti set b1='4TA2MKQ5CJIY6LB4A0U7DRWJK5T6' where id=8; -update noar tt set b2='SUC7B4NVT36O96SX' where id=8; -update noar ti set b2='SUC7B4NVT36O96SX' where id=8; -update noar tt set b0='KVN53LB8RRYZUUR' where id=9; -update noar ti set b0='KVN53LB8RRYZUUR' where id=9; -update noar tt set b1='7QFOZ7' where id=9; -update noar ti set b1='7QFOZ7' where id=9; -update noar tt set b2='KIKSK89TRP93IRB7QBYUO4JP7X518Z' where id=9; -update noar ti set b2='KIKSK89TRP93IRB7QBYUO4JP7X518Z' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 longblob not null, -b1 text not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='J836QLFGB91' where id=1; -update noar ti set b0='J836QLFGB91' where id=1; -update noar tt set b1='DVE18VX1C3YUYUHM4LHGZ9F57UHFT' where id=1; -update noar ti set b1='DVE18VX1C3YUYUHM4LHGZ9F57UHFT' where id=1; -update noar tt set b2='2HOCJ' where id=1; -update noar ti set b2='2HOCJ' where id=1; -update noar tt set b0='RWE7U2ZOVVLUUCH94BHPZQJC' where id=2; -update noar ti set b0='RWE7U2ZOVVLUUCH94BHPZQJC' where id=2; -update noar tt set b1='47FHIZ02XZXPDIJ25PQAJQ67QTT40K' where id=2; -update noar ti set b1='47FHIZ02XZXPDIJ25PQAJQ67QTT40K' where id=2; -update noar tt set b2='B0C4I' where id=2; -update noar ti set b2='B0C4I' where id=2; -update noar tt set b0='B04J7EPS19Y9JXYVZCBSB49L6SO6WTB6' where id=3; -update noar ti set b0='B04J7EPS19Y9JXYVZCBSB49L6SO6WTB6' where id=3; -update noar tt set b1='5ZBZ' where id=3; -update noar ti set b1='5ZBZ' where id=3; -update noar tt set b2='A8UH8AMVZFSYEILYY4NAOID14OUBBR' where id=3; -update noar ti set b2='A8UH8AMVZFSYEILYY4NAOID14OUBBR' where id=3; -update noar tt set b0='QF4N6K' where id=4; -update noar ti set b0='QF4N6K' where id=4; -update noar tt set b1='7JR0SLTGZY8JD2I' where id=4; -update noar ti set b1='7JR0SLTGZY8JD2I' where id=4; -update noar tt set b2='6AR' where id=4; -update noar ti set b2='6AR' where id=4; -update noar tt set b0='NL3RV98YUI46IJZMW33VCHA' where id=5; -update noar ti set b0='NL3RV98YUI46IJZMW33VCHA' where id=5; -update noar tt set b1='E9ZBPZ988HVR' where id=5; -update noar ti set b1='E9ZBPZ988HVR' where id=5; -update noar tt set b2='5JAIYR4H9R49JX3QU' where id=5; -update noar ti set b2='5JAIYR4H9R49JX3QU' where id=5; -update noar tt set b0='DX5XM' where id=6; -update noar ti set b0='DX5XM' where id=6; -update noar tt set b1='M430F56IMR' where id=6; -update noar ti set b1='M430F56IMR' where id=6; -update noar tt set b2='MTYQ51J8NKRRX2' where id=6; -update noar ti set b2='MTYQ51J8NKRRX2' where id=6; -update noar tt set b0='1VZ8NRAO3O72AL8EDUVFHROS94' where id=7; -update noar ti set b0='1VZ8NRAO3O72AL8EDUVFHROS94' where id=7; -update noar tt set b1='X5ORGUCXSLQTO' where id=7; -update noar ti set b1='X5ORGUCXSLQTO' where id=7; -update noar tt set b2='YIXNY' where id=7; -update noar ti set b2='YIXNY' where id=7; -update noar tt set b0='B1OGLBDU3BWA7DBFGMZ4OCB' where id=8; -update noar ti set b0='B1OGLBDU3BWA7DBFGMZ4OCB' where id=8; -update noar tt set b1='Q6DKOT844' where id=8; -update noar ti set b1='Q6DKOT844' where id=8; -update noar tt set b2='0ML0O877PF4D3H0PG1MIX6S' where id=8; -update noar ti set b2='0ML0O877PF4D3H0PG1MIX6S' where id=8; -update noar tt set b0='IW6GNF0DLNK5G5IUHLXJXD52OK' where id=9; -update noar ti set b0='IW6GNF0DLNK5G5IUHLXJXD52OK' where id=9; -update noar tt set b1='N8HRAHAHZX5SKMEVJI3TY6WKP78' where id=9; -update noar ti set b1='N8HRAHAHZX5SKMEVJI3TY6WKP78' where id=9; -update noar tt set b2='LDT2L5CSYWBJSK6' where id=9; -update noar ti set b2='LDT2L5CSYWBJSK6' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 longblob null, -b1 text null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='VHUPQMV3EEHHVAFA3AFTTID59CUOERXJ' where id=1; -update noar ti set b0='VHUPQMV3EEHHVAFA3AFTTID59CUOERXJ' where id=1; -update noar tt set b1='K991DO78VPO7SZSCVCFY8P1CGSL' where id=1; -update noar ti set b1='K991DO78VPO7SZSCVCFY8P1CGSL' where id=1; -update noar tt set b2='W5' where id=1; -update noar ti set b2='W5' where id=1; -update noar tt set b0='97WVCGVLTCIGYR' where id=2; -update noar ti set b0='97WVCGVLTCIGYR' where id=2; -update noar tt set b1='S5G' where id=2; -update noar ti set b1='S5G' where id=2; -update noar tt set b2='K1ESXBK3S19ZC2' where id=2; -update noar ti set b2='K1ESXBK3S19ZC2' where id=2; -update noar tt set b0='8V5GOVFP0VMSTBZFIYL3JYPBIPFKUM4P' where id=3; -update noar ti set b0='8V5GOVFP0VMSTBZFIYL3JYPBIPFKUM4P' where id=3; -update noar tt set b1='5J6YE826HEGAJNBER86T6Y3LZDVWZ4Z' where id=3; -update noar ti set b1='5J6YE826HEGAJNBER86T6Y3LZDVWZ4Z' where id=3; -update noar tt set b2='5MNX2IZ' where id=3; -update noar ti set b2='5MNX2IZ' where id=3; -update noar tt set b0='PLZB7' where id=4; -update noar ti set b0='PLZB7' where id=4; -update noar tt set b1='GVP7YDHSWIKB3P81P54M5TCDY0Z' where id=4; -update noar ti set b1='GVP7YDHSWIKB3P81P54M5TCDY0Z' where id=4; -update noar tt set b2='MIFCZ5FSG29F6A92V' where id=4; -update noar ti set b2='MIFCZ5FSG29F6A92V' where id=4; -update noar tt set b0='T4Z6JRZ8A528NLII5I' where id=5; -update noar ti set b0='T4Z6JRZ8A528NLII5I' where id=5; -update noar tt set b1='XA71' where id=5; -update noar ti set b1='XA71' where id=5; -update noar tt set b2='5CO1SE0TV4F0SCVSD' where id=5; -update noar ti set b2='5CO1SE0TV4F0SCVSD' where id=5; -update noar tt set b0='YKTEE7GXJLN9PB' where id=6; -update noar ti set b0='YKTEE7GXJLN9PB' where id=6; -update noar tt set b1='BZPJSGBLX732JERF3UJ2Z2FN' where id=6; -update noar ti set b1='BZPJSGBLX732JERF3UJ2Z2FN' where id=6; -update noar tt set b2='CVCVEAA4' where id=6; -update noar ti set b2='CVCVEAA4' where id=6; -update noar tt set b0='TOJL6M1VYI1' where id=7; -update noar ti set b0='TOJL6M1VYI1' where id=7; -update noar tt set b1='HRW0SQCE4CQE7U' where id=7; -update noar ti set b1='HRW0SQCE4CQE7U' where id=7; -update noar tt set b2='8VW59GFHIVBILH29LNDQ28KMYFXQU193' where id=7; -update noar ti set b2='8VW59GFHIVBILH29LNDQ28KMYFXQU193' where id=7; -update noar tt set b0='TM93JZRXAAWWG7HZY' where id=8; -update noar ti set b0='TM93JZRXAAWWG7HZY' where id=8; -update noar tt set b1='A69J5XKEIFLLT33RW7P8' where id=8; -update noar ti set b1='A69J5XKEIFLLT33RW7P8' where id=8; -update noar tt set b2='LPJTU0ZY5SX70NSM3I26NQSWRS' where id=8; -update noar ti set b2='LPJTU0ZY5SX70NSM3I26NQSWRS' where id=8; -update noar tt set b0='W65TICZSD1YDI' where id=9; -update noar ti set b0='W65TICZSD1YDI' where id=9; -update noar tt set b1='QIXKROMIO9P' where id=9; -update noar ti set b1='QIXKROMIO9P' where id=9; -update noar tt set b2='Y2' where id=9; -update noar ti set b2='Y2' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 longblob not null, -b1 text not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='IXLQ' where id=1; -update noar ti set b0='IXLQ' where id=1; -update noar tt set b1='0GV8ET59V74TSL6UAKVQK7IA' where id=1; -update noar ti set b1='0GV8ET59V74TSL6UAKVQK7IA' where id=1; -update noar tt set b2='J5LLXL9C0Z' where id=1; -update noar ti set b2='J5LLXL9C0Z' where id=1; -update noar tt set b0='GN1' where id=2; -update noar ti set b0='GN1' where id=2; -update noar tt set b1='GCEHA6AQ8BC7ZJVBSH5TN0YBB' where id=2; -update noar ti set b1='GCEHA6AQ8BC7ZJVBSH5TN0YBB' where id=2; -update noar tt set b2='RRUM0MZ3F6UIBCGYY1ZRB6' where id=2; -update noar ti set b2='RRUM0MZ3F6UIBCGYY1ZRB6' where id=2; -update noar tt set b0='CHTLDYNLKO070GRYHN5AO' where id=3; -update noar ti set b0='CHTLDYNLKO070GRYHN5AO' where id=3; -update noar tt set b1='T6R74' where id=3; -update noar ti set b1='T6R74' where id=3; -update noar tt set b2='02QEW3K4JAZBMDPI3U34ITG' where id=3; -update noar ti set b2='02QEW3K4JAZBMDPI3U34ITG' where id=3; -update noar tt set b0='F86MITJKWEBY571S4' where id=4; -update noar ti set b0='F86MITJKWEBY571S4' where id=4; -update noar tt set b1='WCMSVXB2KATELVUDFXNR4B1CLLOTV' where id=4; -update noar ti set b1='WCMSVXB2KATELVUDFXNR4B1CLLOTV' where id=4; -update noar tt set b2='PWC' where id=4; -update noar ti set b2='PWC' where id=4; -update noar tt set b0='WPIL3JE320Z' where id=5; -update noar ti set b0='WPIL3JE320Z' where id=5; -update noar tt set b1='DNNVGHQWIHL2VB' where id=5; -update noar ti set b1='DNNVGHQWIHL2VB' where id=5; -update noar tt set b2='1Y1Z' where id=5; -update noar ti set b2='1Y1Z' where id=5; -update noar tt set b0='8I14EXD02CS' where id=6; -update noar ti set b0='8I14EXD02CS' where id=6; -update noar tt set b1='OPCV6ODUMXJ4' where id=6; -update noar ti set b1='OPCV6ODUMXJ4' where id=6; -update noar tt set b2='HTG0EQPAKHZ13DXTGLTXU7OW601PES' where id=6; -update noar ti set b2='HTG0EQPAKHZ13DXTGLTXU7OW601PES' where id=6; -update noar tt set b0='DPBY7XPODUL' where id=7; -update noar ti set b0='DPBY7XPODUL' where id=7; -update noar tt set b1='Y' where id=7; -update noar ti set b1='Y' where id=7; -update noar tt set b2='LJWJWLS3BRN' where id=7; -update noar ti set b2='LJWJWLS3BRN' where id=7; -update noar tt set b0='YKRGG60SV7370054Z10FO' where id=8; -update noar ti set b0='YKRGG60SV7370054Z10FO' where id=8; -update noar tt set b1='TUCXJJOP1ZZXTC9S1IOT3H' where id=8; -update noar ti set b1='TUCXJJOP1ZZXTC9S1IOT3H' where id=8; -update noar tt set b2='UQ7N2WEJFIOS3FDP9' where id=8; -update noar ti set b2='UQ7N2WEJFIOS3FDP9' where id=8; -update noar tt set b0='E40AN7BDA3PITTUSCD9ZZMMMKD9K' where id=9; -update noar ti set b0='E40AN7BDA3PITTUSCD9ZZMMMKD9K' where id=9; -update noar tt set b1='I93Z1FXE2HHMHCP8524DH1LV' where id=9; -update noar ti set b1='I93Z1FXE2HHMHCP8524DH1LV' where id=9; -update noar tt set b2='F8GN2' where id=9; -update noar ti set b2='F8GN2' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 longblob null, -b1 text null, -b2 text null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='W725N51H71T565X5T9X1' where id=1; -update noar ti set b0='W725N51H71T565X5T9X1' where id=1; -update noar tt set b1='HUELY9ZD20MVBVDI' where id=1; -update noar ti set b1='HUELY9ZD20MVBVDI' where id=1; -update noar tt set b2='GRL5E7IA5W12INXDIK0ZQ2Z5V6J1' where id=1; -update noar ti set b2='GRL5E7IA5W12INXDIK0ZQ2Z5V6J1' where id=1; -update noar tt set b0='OW' where id=2; -update noar ti set b0='OW' where id=2; -update noar tt set b1='N3O0NU0EPNA60BYWWC1Y97TV' where id=2; -update noar ti set b1='N3O0NU0EPNA60BYWWC1Y97TV' where id=2; -update noar tt set b2='P' where id=2; -update noar ti set b2='P' where id=2; -update noar tt set b0='ZQPCWFYWD9W' where id=3; -update noar ti set b0='ZQPCWFYWD9W' where id=3; -update noar tt set b1='MFWBI8N0QN14D4B94UMMNT6RW4BWXA' where id=3; -update noar ti set b1='MFWBI8N0QN14D4B94UMMNT6RW4BWXA' where id=3; -update noar tt set b2='YBX3QB40G25OSXCJ1K4FD297Z0L' where id=3; -update noar ti set b2='YBX3QB40G25OSXCJ1K4FD297Z0L' where id=3; -update noar tt set b0='KMR7G47F42Y' where id=4; -update noar ti set b0='KMR7G47F42Y' where id=4; -update noar tt set b1='U291AF6KA' where id=4; -update noar ti set b1='U291AF6KA' where id=4; -update noar tt set b2='UZIA1WNZ7QT4' where id=4; -update noar ti set b2='UZIA1WNZ7QT4' where id=4; -update noar tt set b0='NQ6DWZO45XCVWZIU6KNJM' where id=5; -update noar ti set b0='NQ6DWZO45XCVWZIU6KNJM' where id=5; -update noar tt set b1='UW9F7U' where id=5; -update noar ti set b1='UW9F7U' where id=5; -update noar tt set b2='K1IIRFTCWD7MB4X7' where id=5; -update noar ti set b2='K1IIRFTCWD7MB4X7' where id=5; -update noar tt set b0='2MN2UKF6N5SZWRU7' where id=6; -update noar ti set b0='2MN2UKF6N5SZWRU7' where id=6; -update noar tt set b1='233OZPX30ZW3284HGVODFHT' where id=6; -update noar ti set b1='233OZPX30ZW3284HGVODFHT' where id=6; -update noar tt set b2='Q0R0SO9R8Z50FFZ1TNFBZ4T5' where id=6; -update noar ti set b2='Q0R0SO9R8Z50FFZ1TNFBZ4T5' where id=6; -update noar tt set b0='90TJKR5AUJIB740YG5' where id=7; -update noar ti set b0='90TJKR5AUJIB740YG5' where id=7; -update noar tt set b1='Q3G5HYWMM8ZT51OND73QG7RQF8MH5' where id=7; -update noar ti set b1='Q3G5HYWMM8ZT51OND73QG7RQF8MH5' where id=7; -update noar tt set b2='FC0Z6LO041XJBG5O1ALZYTM15TRK0ZGN' where id=7; -update noar ti set b2='FC0Z6LO041XJBG5O1ALZYTM15TRK0ZGN' where id=7; -update noar tt set b0='RPGEPQ5JE5EZGPHHHE1KPZELS5J' where id=8; -update noar ti set b0='RPGEPQ5JE5EZGPHHHE1KPZELS5J' where id=8; -update noar tt set b1='I' where id=8; -update noar ti set b1='I' where id=8; -update noar tt set b2='BM7SW4MQ8YTUU4X4WTH' where id=8; -update noar ti set b2='BM7SW4MQ8YTUU4X4WTH' where id=8; -update noar tt set b0='XHOI1Y3UOSLIFVORTA4X6Q8KWNZVH6L' where id=9; -update noar ti set b0='XHOI1Y3UOSLIFVORTA4X6Q8KWNZVH6L' where id=9; -update noar tt set b1='A8BPZX77AZQO' where id=9; -update noar ti set b1='A8BPZX77AZQO' where id=9; -update noar tt set b2='N' where id=9; -update noar ti set b2='N' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 longblob not null, -b1 text not null, -b2 text not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='S2FIIC4M2KV' where id=1; -update noar ti set b0='S2FIIC4M2KV' where id=1; -update noar tt set b1='YQSR' where id=1; -update noar ti set b1='YQSR' where id=1; -update noar tt set b2='FZC5TKJVBMB1WW7L' where id=1; -update noar ti set b2='FZC5TKJVBMB1WW7L' where id=1; -update noar tt set b0='7B1L17ADXH' where id=2; -update noar ti set b0='7B1L17ADXH' where id=2; -update noar tt set b1='NCRLGJ0HPRNA9FCM3' where id=2; -update noar ti set b1='NCRLGJ0HPRNA9FCM3' where id=2; -update noar tt set b2='HKBJCG1I2W4BLOV9' where id=2; -update noar ti set b2='HKBJCG1I2W4BLOV9' where id=2; -update noar tt set b0='NOPYPMB90PM7YHZK5AMVLP7NETD2' where id=3; -update noar ti set b0='NOPYPMB90PM7YHZK5AMVLP7NETD2' where id=3; -update noar tt set b1='RBU04MRNSEH4ZWJKJFIUS8G26KKDZ6N3' where id=3; -update noar ti set b1='RBU04MRNSEH4ZWJKJFIUS8G26KKDZ6N3' where id=3; -update noar tt set b2='DSPMVAY35RJLC8727' where id=3; -update noar ti set b2='DSPMVAY35RJLC8727' where id=3; -update noar tt set b0='X' where id=4; -update noar ti set b0='X' where id=4; -update noar tt set b1='M4YT2XF6B3' where id=4; -update noar ti set b1='M4YT2XF6B3' where id=4; -update noar tt set b2='LHB' where id=4; -update noar ti set b2='LHB' where id=4; -update noar tt set b0='6NUWYOVU7XBGL56IS' where id=5; -update noar ti set b0='6NUWYOVU7XBGL56IS' where id=5; -update noar tt set b1='WPU226NBPDPFHKPUZOASR4B' where id=5; -update noar ti set b1='WPU226NBPDPFHKPUZOASR4B' where id=5; -update noar tt set b2='F767Y2X1Z3U' where id=5; -update noar ti set b2='F767Y2X1Z3U' where id=5; -update noar tt set b0='LKIIMW3J090F6O3SMNQ3M' where id=6; -update noar ti set b0='LKIIMW3J090F6O3SMNQ3M' where id=6; -update noar tt set b1='N' where id=6; -update noar ti set b1='N' where id=6; -update noar tt set b2='6TZ6PIQ4VV2T' where id=6; -update noar ti set b2='6TZ6PIQ4VV2T' where id=6; -update noar tt set b0='X3V2F9U5OLX35QQG4ULCET0WIRK97' where id=7; -update noar ti set b0='X3V2F9U5OLX35QQG4ULCET0WIRK97' where id=7; -update noar tt set b1='7S54PCK5URKOHY6PVO5K' where id=7; -update noar ti set b1='7S54PCK5URKOHY6PVO5K' where id=7; -update noar tt set b2='NOYD7G7I' where id=7; -update noar ti set b2='NOYD7G7I' where id=7; -update noar tt set b0='IDE4A5' where id=8; -update noar ti set b0='IDE4A5' where id=8; -update noar tt set b1='0WZ0JADT8' where id=8; -update noar ti set b1='0WZ0JADT8' where id=8; -update noar tt set b2='DRJ85FAS8RN6BA2I0HWEA2Q' where id=8; -update noar ti set b2='DRJ85FAS8RN6BA2I0HWEA2Q' where id=8; -update noar tt set b0='BF39NXSJIP8OLCVGBN00' where id=9; -update noar ti set b0='BF39NXSJIP8OLCVGBN00' where id=9; -update noar tt set b1='PLLY62BC0UM8BLGJGGJ7LU15MG' where id=9; -update noar ti set b1='PLLY62BC0UM8BLGJGGJ7LU15MG' where id=9; -update noar tt set b2='0JBCQDQWFGODF' where id=9; -update noar ti set b2='0JBCQDQWFGODF' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 text null, -b1 tinyblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='WS9RHW5CQ7AKYJKMRXL2RZLLR' where id=1; -update noar ti set b0='WS9RHW5CQ7AKYJKMRXL2RZLLR' where id=1; -update noar tt set b1='0B7HZ582I1M0U6KM7D' where id=1; -update noar ti set b1='0B7HZ582I1M0U6KM7D' where id=1; -update noar tt set b2='2308KMB641OE' where id=1; -update noar ti set b2='2308KMB641OE' where id=1; -update noar tt set b0='52PYZU3ZQ4H6NUDU1P3XH' where id=2; -update noar ti set b0='52PYZU3ZQ4H6NUDU1P3XH' where id=2; -update noar tt set b1='X4NJAT8JN8L4B0BB' where id=2; -update noar ti set b1='X4NJAT8JN8L4B0BB' where id=2; -update noar tt set b2='K' where id=2; -update noar ti set b2='K' where id=2; -update noar tt set b0='ZWCR50LDMJ0' where id=3; -update noar ti set b0='ZWCR50LDMJ0' where id=3; -update noar tt set b1='ERHQ1Z45GDSPN4NUGP5YO4V4CDGKK3V' where id=3; -update noar ti set b1='ERHQ1Z45GDSPN4NUGP5YO4V4CDGKK3V' where id=3; -update noar tt set b2='W' where id=3; -update noar ti set b2='W' where id=3; -update noar tt set b0='PPQMNYBOOH69' where id=4; -update noar ti set b0='PPQMNYBOOH69' where id=4; -update noar tt set b1='Z7ZZTK8473T0T76Y0TF27' where id=4; -update noar ti set b1='Z7ZZTK8473T0T76Y0TF27' where id=4; -update noar tt set b2='AO5UEGO9BDNB2WMYVJF4ZPLA' where id=4; -update noar ti set b2='AO5UEGO9BDNB2WMYVJF4ZPLA' where id=4; -update noar tt set b0='FMDR0GVWPQ6QYPK0K9AASP4KJJZO71C9' where id=5; -update noar ti set b0='FMDR0GVWPQ6QYPK0K9AASP4KJJZO71C9' where id=5; -update noar tt set b1='BXM5OQMOV2H3T31NMV02Y' where id=5; -update noar ti set b1='BXM5OQMOV2H3T31NMV02Y' where id=5; -update noar tt set b2='3AEF5NH2KER56WAGNAQ' where id=5; -update noar ti set b2='3AEF5NH2KER56WAGNAQ' where id=5; -update noar tt set b0='K2DGUVO2ITLS5JMV54I4OKH' where id=6; -update noar ti set b0='K2DGUVO2ITLS5JMV54I4OKH' where id=6; -update noar tt set b1='MRUR5S6ZXDBMA' where id=6; -update noar ti set b1='MRUR5S6ZXDBMA' where id=6; -update noar tt set b2='B4K8Q80ATJJFD9F29L8ZQS98H0FXX2K5' where id=6; -update noar ti set b2='B4K8Q80ATJJFD9F29L8ZQS98H0FXX2K5' where id=6; -update noar tt set b0='I5GYSX' where id=7; -update noar ti set b0='I5GYSX' where id=7; -update noar tt set b1='RL' where id=7; -update noar ti set b1='RL' where id=7; -update noar tt set b2='C9DV9LB2YGHVDDQBUIEF' where id=7; -update noar ti set b2='C9DV9LB2YGHVDDQBUIEF' where id=7; -update noar tt set b0='7Q' where id=8; -update noar ti set b0='7Q' where id=8; -update noar tt set b1='3U90HTAFIVXNAXU3J0RHFJ' where id=8; -update noar ti set b1='3U90HTAFIVXNAXU3J0RHFJ' where id=8; -update noar tt set b2='9FFX6765EPY7' where id=8; -update noar ti set b2='9FFX6765EPY7' where id=8; -update noar tt set b0='XCYOVGDHDNKKB0BGPYI102JR7EIXZET' where id=9; -update noar ti set b0='XCYOVGDHDNKKB0BGPYI102JR7EIXZET' where id=9; -update noar tt set b1='48NH5Z5OJ80HSJ8AH4OH1U3' where id=9; -update noar ti set b1='48NH5Z5OJ80HSJ8AH4OH1U3' where id=9; -update noar tt set b2='EE6K02P5AB' where id=9; -update noar ti set b2='EE6K02P5AB' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 text not null, -b1 tinyblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='W' where id=1; -update noar ti set b0='W' where id=1; -update noar tt set b1='LMTP0HBUV' where id=1; -update noar ti set b1='LMTP0HBUV' where id=1; -update noar tt set b2='HSVVBHU73SE6IWY621FX' where id=1; -update noar ti set b2='HSVVBHU73SE6IWY621FX' where id=1; -update noar tt set b0='N4CSLN' where id=2; -update noar ti set b0='N4CSLN' where id=2; -update noar tt set b1='UJABUUEUV18WB' where id=2; -update noar ti set b1='UJABUUEUV18WB' where id=2; -update noar tt set b2='V48QOLP0DP7QZDZSW4QCE' where id=2; -update noar ti set b2='V48QOLP0DP7QZDZSW4QCE' where id=2; -update noar tt set b0='9TZTJNYHJ3' where id=3; -update noar ti set b0='9TZTJNYHJ3' where id=3; -update noar tt set b1='6XH9OPDVC' where id=3; -update noar ti set b1='6XH9OPDVC' where id=3; -update noar tt set b2='HCOUDQ' where id=3; -update noar ti set b2='HCOUDQ' where id=3; -update noar tt set b0='99PQGD56BU7FHQGWOYJC' where id=4; -update noar ti set b0='99PQGD56BU7FHQGWOYJC' where id=4; -update noar tt set b1='LAHI6UJO6EKB7Z5WH5D334Q4UJM7LA' where id=4; -update noar ti set b1='LAHI6UJO6EKB7Z5WH5D334Q4UJM7LA' where id=4; -update noar tt set b2='J7RXGNDEBS3XZNRS7M3CUU1' where id=4; -update noar ti set b2='J7RXGNDEBS3XZNRS7M3CUU1' where id=4; -update noar tt set b0='V9EFS' where id=5; -update noar ti set b0='V9EFS' where id=5; -update noar tt set b1='BFJ3' where id=5; -update noar ti set b1='BFJ3' where id=5; -update noar tt set b2='OXPR9QS654' where id=5; -update noar ti set b2='OXPR9QS654' where id=5; -update noar tt set b0='806K' where id=6; -update noar ti set b0='806K' where id=6; -update noar tt set b1='7K94TPJ741TEI' where id=6; -update noar ti set b1='7K94TPJ741TEI' where id=6; -update noar tt set b2='3JN63UR0DNOXZPP683742HJ' where id=6; -update noar ti set b2='3JN63UR0DNOXZPP683742HJ' where id=6; -update noar tt set b0='Z4SMHSB06M5O59UM952HQS5608KH' where id=7; -update noar ti set b0='Z4SMHSB06M5O59UM952HQS5608KH' where id=7; -update noar tt set b1='DWG0ADX0ZJQORJL' where id=7; -update noar ti set b1='DWG0ADX0ZJQORJL' where id=7; -update noar tt set b2='CA4ITK2UZFGKJMM01FZ' where id=7; -update noar ti set b2='CA4ITK2UZFGKJMM01FZ' where id=7; -update noar tt set b0='30ARYOKSVNFNJNL' where id=8; -update noar ti set b0='30ARYOKSVNFNJNL' where id=8; -update noar tt set b1='7EF0MV6535YX1QYTOOVG4QK1' where id=8; -update noar ti set b1='7EF0MV6535YX1QYTOOVG4QK1' where id=8; -update noar tt set b2='I2INHN7R09XBX' where id=8; -update noar ti set b2='I2INHN7R09XBX' where id=8; -update noar tt set b0='VCOHKSB7V3I87ORQ2CN0N7LHNXA7HWF' where id=9; -update noar ti set b0='VCOHKSB7V3I87ORQ2CN0N7LHNXA7HWF' where id=9; -update noar tt set b1='LA5ILHAA31QU2ZFYL' where id=9; -update noar ti set b1='LA5ILHAA31QU2ZFYL' where id=9; -update noar tt set b2='SPZD17HVKKU' where id=9; -update noar ti set b2='SPZD17HVKKU' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 text null, -b1 tinyblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='GCXZ895YBASD0IK1ELMFLN0UC' where id=1; -update noar ti set b0='GCXZ895YBASD0IK1ELMFLN0UC' where id=1; -update noar tt set b1='Y876W40Z5VYB2GDI9BV' where id=1; -update noar ti set b1='Y876W40Z5VYB2GDI9BV' where id=1; -update noar tt set b2='71C1KOZ3B8VEJP5Z2QYBMP78UGB1Y' where id=1; -update noar ti set b2='71C1KOZ3B8VEJP5Z2QYBMP78UGB1Y' where id=1; -update noar tt set b0='FI1Z0OS5D8U1D4SSCL' where id=2; -update noar ti set b0='FI1Z0OS5D8U1D4SSCL' where id=2; -update noar tt set b1='HXVYGU' where id=2; -update noar ti set b1='HXVYGU' where id=2; -update noar tt set b2='ZKCU' where id=2; -update noar ti set b2='ZKCU' where id=2; -update noar tt set b0='QUPNV94G' where id=3; -update noar ti set b0='QUPNV94G' where id=3; -update noar tt set b1='4SO1QP7AW08GCUPQ' where id=3; -update noar ti set b1='4SO1QP7AW08GCUPQ' where id=3; -update noar tt set b2='9I8MMI4DPDXFSK6U1TDXMVSSM' where id=3; -update noar ti set b2='9I8MMI4DPDXFSK6U1TDXMVSSM' where id=3; -update noar tt set b0='V9' where id=4; -update noar ti set b0='V9' where id=4; -update noar tt set b1='FAWA8YRHOX2I63H6EF93' where id=4; -update noar ti set b1='FAWA8YRHOX2I63H6EF93' where id=4; -update noar tt set b2='FAXSY62Q3LKKC68I3W991MACWTD37L' where id=4; -update noar ti set b2='FAXSY62Q3LKKC68I3W991MACWTD37L' where id=4; -update noar tt set b0='NYMONSDQ4MQ' where id=5; -update noar ti set b0='NYMONSDQ4MQ' where id=5; -update noar tt set b1='0HHYNS4VL7JFIW36PHZB88C7J' where id=5; -update noar ti set b1='0HHYNS4VL7JFIW36PHZB88C7J' where id=5; -update noar tt set b2='IZNWS78X9LDDVGLQDBRW2K83TDAM' where id=5; -update noar ti set b2='IZNWS78X9LDDVGLQDBRW2K83TDAM' where id=5; -update noar tt set b0='GGIQ4EY772KPSG501T9RQAEKDVQX' where id=6; -update noar ti set b0='GGIQ4EY772KPSG501T9RQAEKDVQX' where id=6; -update noar tt set b1='CF13HBZHJGB2ERMND9WZ4VOMV6QH' where id=6; -update noar ti set b1='CF13HBZHJGB2ERMND9WZ4VOMV6QH' where id=6; -update noar tt set b2='M9MN72C' where id=6; -update noar ti set b2='M9MN72C' where id=6; -update noar tt set b0='8H6G54PQQHAT196FPL4Y60DD9BMT' where id=7; -update noar ti set b0='8H6G54PQQHAT196FPL4Y60DD9BMT' where id=7; -update noar tt set b1='XFZ' where id=7; -update noar ti set b1='XFZ' where id=7; -update noar tt set b2='XH5' where id=7; -update noar ti set b2='XH5' where id=7; -update noar tt set b0='CBTBDHU5WNR9DPKSTLUNPIT0N7J7O77P' where id=8; -update noar ti set b0='CBTBDHU5WNR9DPKSTLUNPIT0N7J7O77P' where id=8; -update noar tt set b1='0V0W2UYBT' where id=8; -update noar ti set b1='0V0W2UYBT' where id=8; -update noar tt set b2='TAGL08D35XLRRKLUPITQBKR3DZUZ' where id=8; -update noar ti set b2='TAGL08D35XLRRKLUPITQBKR3DZUZ' where id=8; -update noar tt set b0='873B3' where id=9; -update noar ti set b0='873B3' where id=9; -update noar tt set b1='G2RCWFZX2UEOPX6FMS71PVXM' where id=9; -update noar ti set b1='G2RCWFZX2UEOPX6FMS71PVXM' where id=9; -update noar tt set b2='JI969NWTEN1RZ8BUTPZTK' where id=9; -update noar ti set b2='JI969NWTEN1RZ8BUTPZTK' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 text not null, -b1 tinyblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='W02CNZAIFE6IA3XPHR1HFZL4DEJKP1' where id=1; -update noar ti set b0='W02CNZAIFE6IA3XPHR1HFZL4DEJKP1' where id=1; -update noar tt set b1='2S0RGEC2NWEMOKIVLCNGA98NE5ZUADK' where id=1; -update noar ti set b1='2S0RGEC2NWEMOKIVLCNGA98NE5ZUADK' where id=1; -update noar tt set b2='6ALIGAHIG7OU6CYHHB46A0CO7FM7' where id=1; -update noar ti set b2='6ALIGAHIG7OU6CYHHB46A0CO7FM7' where id=1; -update noar tt set b0='7MI8UGUB6D9CM' where id=2; -update noar ti set b0='7MI8UGUB6D9CM' where id=2; -update noar tt set b1='9OZOGGDN05L0KC4YV17EG7ARPURZJ' where id=2; -update noar ti set b1='9OZOGGDN05L0KC4YV17EG7ARPURZJ' where id=2; -update noar tt set b2='KJWDCTGKH' where id=2; -update noar ti set b2='KJWDCTGKH' where id=2; -update noar tt set b0='SRLFGXFU' where id=3; -update noar ti set b0='SRLFGXFU' where id=3; -update noar tt set b1='NRAXYY33FI76750' where id=3; -update noar ti set b1='NRAXYY33FI76750' where id=3; -update noar tt set b2='HJOX9BI6KCST6M9VH2HBM0' where id=3; -update noar ti set b2='HJOX9BI6KCST6M9VH2HBM0' where id=3; -update noar tt set b0='1' where id=4; -update noar ti set b0='1' where id=4; -update noar tt set b1='7OPKY500TN6QA5LIVTE608C' where id=4; -update noar ti set b1='7OPKY500TN6QA5LIVTE608C' where id=4; -update noar tt set b2='N1TP86ODBIETCM4A6KH' where id=4; -update noar ti set b2='N1TP86ODBIETCM4A6KH' where id=4; -update noar tt set b0='91TQYZYM7GJLU99Q' where id=5; -update noar ti set b0='91TQYZYM7GJLU99Q' where id=5; -update noar tt set b1='HJIC7GF' where id=5; -update noar ti set b1='HJIC7GF' where id=5; -update noar tt set b2='DUT1H546UGUP0' where id=5; -update noar ti set b2='DUT1H546UGUP0' where id=5; -update noar tt set b0='I4KL0FJMFN7G88CM8A1YZRJFI' where id=6; -update noar ti set b0='I4KL0FJMFN7G88CM8A1YZRJFI' where id=6; -update noar tt set b1='Y5GX9NCQ2MH03' where id=6; -update noar ti set b1='Y5GX9NCQ2MH03' where id=6; -update noar tt set b2='3Y6G0GLO' where id=6; -update noar ti set b2='3Y6G0GLO' where id=6; -update noar tt set b0='COVBM' where id=7; -update noar ti set b0='COVBM' where id=7; -update noar tt set b1='VSRX00E6' where id=7; -update noar ti set b1='VSRX00E6' where id=7; -update noar tt set b2='IYNB6AJG90M6HI' where id=7; -update noar ti set b2='IYNB6AJG90M6HI' where id=7; -update noar tt set b0='UQK1HUF1EM04BEV4HA27' where id=8; -update noar ti set b0='UQK1HUF1EM04BEV4HA27' where id=8; -update noar tt set b1='UMPI' where id=8; -update noar ti set b1='UMPI' where id=8; -update noar tt set b2='BETVTQP5FSD6Q79XM' where id=8; -update noar ti set b2='BETVTQP5FSD6Q79XM' where id=8; -update noar tt set b0='6JZAY3R6UU5O3H' where id=9; -update noar ti set b0='6JZAY3R6UU5O3H' where id=9; -update noar tt set b1='EDXP5TEFI4OL0KLHVGJ5I2DB2SU' where id=9; -update noar ti set b1='EDXP5TEFI4OL0KLHVGJ5I2DB2SU' where id=9; -update noar tt set b2='W82SEP' where id=9; -update noar ti set b2='W82SEP' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 text null, -b1 tinyblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='R2BWLS' where id=1; -update noar ti set b0='R2BWLS' where id=1; -update noar tt set b1='ZDF9RS0NKL2GN0WG03BX' where id=1; -update noar ti set b1='ZDF9RS0NKL2GN0WG03BX' where id=1; -update noar tt set b2='OAI' where id=1; -update noar ti set b2='OAI' where id=1; -update noar tt set b0='1646ESR6RAL2PLJQHBFPG' where id=2; -update noar ti set b0='1646ESR6RAL2PLJQHBFPG' where id=2; -update noar tt set b1='3AZX293T2' where id=2; -update noar ti set b1='3AZX293T2' where id=2; -update noar tt set b2='L3AIYOZLK5' where id=2; -update noar ti set b2='L3AIYOZLK5' where id=2; -update noar tt set b0='S' where id=3; -update noar ti set b0='S' where id=3; -update noar tt set b1='XLYS9DA8I2I3NB3K09RUDZP26X' where id=3; -update noar ti set b1='XLYS9DA8I2I3NB3K09RUDZP26X' where id=3; -update noar tt set b2='9E' where id=3; -update noar ti set b2='9E' where id=3; -update noar tt set b0='7CIX6DFZ4P' where id=4; -update noar ti set b0='7CIX6DFZ4P' where id=4; -update noar tt set b1='CBAGXJS52VC4CCE3294TPMW7JCW' where id=4; -update noar ti set b1='CBAGXJS52VC4CCE3294TPMW7JCW' where id=4; -update noar tt set b2='96RZW66O6YKB6S1F4Q4ROSOANN951KE3' where id=4; -update noar ti set b2='96RZW66O6YKB6S1F4Q4ROSOANN951KE3' where id=4; -update noar tt set b0='CN4IMBRA6VFRQCAHTYX0FKRPI6GLI1' where id=5; -update noar ti set b0='CN4IMBRA6VFRQCAHTYX0FKRPI6GLI1' where id=5; -update noar tt set b1='UI' where id=5; -update noar ti set b1='UI' where id=5; -update noar tt set b2='6HGTWM1WK873UOEHXJILP7UT' where id=5; -update noar ti set b2='6HGTWM1WK873UOEHXJILP7UT' where id=5; -update noar tt set b0='J' where id=6; -update noar ti set b0='J' where id=6; -update noar tt set b1='QO9F2ZTHGUQS7ZV' where id=6; -update noar ti set b1='QO9F2ZTHGUQS7ZV' where id=6; -update noar tt set b2='RW0T7PHY31X2ZLMK3FGK8OL' where id=6; -update noar ti set b2='RW0T7PHY31X2ZLMK3FGK8OL' where id=6; -update noar tt set b0='6L5M21FO7GRRK1BGWQ' where id=7; -update noar ti set b0='6L5M21FO7GRRK1BGWQ' where id=7; -update noar tt set b1='YHZKTIH6MSL4V0FMJSNPLA' where id=7; -update noar ti set b1='YHZKTIH6MSL4V0FMJSNPLA' where id=7; -update noar tt set b2='PLKQZJOBU75APK3UK5GUU' where id=7; -update noar ti set b2='PLKQZJOBU75APK3UK5GUU' where id=7; -update noar tt set b0='Q01INRM3YFONS4OMY8AT84' where id=8; -update noar ti set b0='Q01INRM3YFONS4OMY8AT84' where id=8; -update noar tt set b1='YDLY7AEMS' where id=8; -update noar ti set b1='YDLY7AEMS' where id=8; -update noar tt set b2='JDMIJAFT0' where id=8; -update noar ti set b2='JDMIJAFT0' where id=8; -update noar tt set b0='LYMGXEHWIPSU0' where id=9; -update noar ti set b0='LYMGXEHWIPSU0' where id=9; -update noar tt set b1='NSVKLSVLJNGDU' where id=9; -update noar ti set b1='NSVKLSVLJNGDU' where id=9; -update noar tt set b2='JCNMN0PNRDM4ZUD37AD0I4SCL34' where id=9; -update noar ti set b2='JCNMN0PNRDM4ZUD37AD0I4SCL34' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 text not null, -b1 tinyblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='KZLVWSLYP' where id=1; -update noar ti set b0='KZLVWSLYP' where id=1; -update noar tt set b1='PRIGWZX2' where id=1; -update noar ti set b1='PRIGWZX2' where id=1; -update noar tt set b2='ORQZVPP0JOJCXEOIBISVBO' where id=1; -update noar ti set b2='ORQZVPP0JOJCXEOIBISVBO' where id=1; -update noar tt set b0='BR2ZBJSWSOBQ' where id=2; -update noar ti set b0='BR2ZBJSWSOBQ' where id=2; -update noar tt set b1='LNQ85NN3W0' where id=2; -update noar ti set b1='LNQ85NN3W0' where id=2; -update noar tt set b2='E' where id=2; -update noar ti set b2='E' where id=2; -update noar tt set b0='3NHG5H' where id=3; -update noar ti set b0='3NHG5H' where id=3; -update noar tt set b1='T8GJE56GLP0MUOD0L700H25L7IYWZR' where id=3; -update noar ti set b1='T8GJE56GLP0MUOD0L700H25L7IYWZR' where id=3; -update noar tt set b2='OGMXEXZ6N4GZLC0FCGJYCM6DQ4F' where id=3; -update noar ti set b2='OGMXEXZ6N4GZLC0FCGJYCM6DQ4F' where id=3; -update noar tt set b0='AKFH' where id=4; -update noar ti set b0='AKFH' where id=4; -update noar tt set b1='MJ6KLHS7Z' where id=4; -update noar ti set b1='MJ6KLHS7Z' where id=4; -update noar tt set b2='JUBQVRKCG' where id=4; -update noar ti set b2='JUBQVRKCG' where id=4; -update noar tt set b0='FKMRKIMU' where id=5; -update noar ti set b0='FKMRKIMU' where id=5; -update noar tt set b1='U50ZE5FFO9W8E4K6AFP2EFYW08QOJUO' where id=5; -update noar ti set b1='U50ZE5FFO9W8E4K6AFP2EFYW08QOJUO' where id=5; -update noar tt set b2='CM1SWIRPXU5' where id=5; -update noar ti set b2='CM1SWIRPXU5' where id=5; -update noar tt set b0='M5PCMRB' where id=6; -update noar ti set b0='M5PCMRB' where id=6; -update noar tt set b1='FBURUI3K4GA0FVDWT' where id=6; -update noar ti set b1='FBURUI3K4GA0FVDWT' where id=6; -update noar tt set b2='C4O14LBKH942WDPOHTA7727RO5' where id=6; -update noar ti set b2='C4O14LBKH942WDPOHTA7727RO5' where id=6; -update noar tt set b0='8NW0SXJJVB6BIGXN86O7WFI' where id=7; -update noar ti set b0='8NW0SXJJVB6BIGXN86O7WFI' where id=7; -update noar tt set b1='HX7U13QFVN' where id=7; -update noar ti set b1='HX7U13QFVN' where id=7; -update noar tt set b2='3YLV3HUTQZ0HBDP83IMZKSWROKD' where id=7; -update noar ti set b2='3YLV3HUTQZ0HBDP83IMZKSWROKD' where id=7; -update noar tt set b0='861WKMVZYTDRCL218STCI5Q37TG' where id=8; -update noar ti set b0='861WKMVZYTDRCL218STCI5Q37TG' where id=8; -update noar tt set b1='G' where id=8; -update noar ti set b1='G' where id=8; -update noar tt set b2='28J7TPGOZY1L2H5NI4BXO' where id=8; -update noar ti set b2='28J7TPGOZY1L2H5NI4BXO' where id=8; -update noar tt set b0='9WU9K6AVXMHLHE' where id=9; -update noar ti set b0='9WU9K6AVXMHLHE' where id=9; -update noar tt set b1='V6W2F0RW2OI6' where id=9; -update noar ti set b1='V6W2F0RW2OI6' where id=9; -update noar tt set b2='TO6RY9SO8EUZG' where id=9; -update noar ti set b2='TO6RY9SO8EUZG' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 text null, -b1 tinyblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='P026RGI7' where id=1; -update noar ti set b0='P026RGI7' where id=1; -update noar tt set b1='HMB9' where id=1; -update noar ti set b1='HMB9' where id=1; -update noar tt set b2='9WXAOR36R22G4KIOMF61CJOPPREE1FPV' where id=1; -update noar ti set b2='9WXAOR36R22G4KIOMF61CJOPPREE1FPV' where id=1; -update noar tt set b0='Z7SLVMLJI90YXKSME4U5JSWW1NDAGPOJ' where id=2; -update noar ti set b0='Z7SLVMLJI90YXKSME4U5JSWW1NDAGPOJ' where id=2; -update noar tt set b1='L6GG3W5SD1J9KNDX9N86EHFF4IJ0G' where id=2; -update noar ti set b1='L6GG3W5SD1J9KNDX9N86EHFF4IJ0G' where id=2; -update noar tt set b2='I2EJVK6KO9CLLBW1GBL2VDW1JZXV' where id=2; -update noar ti set b2='I2EJVK6KO9CLLBW1GBL2VDW1JZXV' where id=2; -update noar tt set b0='7WT8QY6JHLN4PL' where id=3; -update noar ti set b0='7WT8QY6JHLN4PL' where id=3; -update noar tt set b1='ESYH9FOXUA' where id=3; -update noar ti set b1='ESYH9FOXUA' where id=3; -update noar tt set b2='VKU89BAEF0SML8GWML1M2O8U05NAN5F0' where id=3; -update noar ti set b2='VKU89BAEF0SML8GWML1M2O8U05NAN5F0' where id=3; -update noar tt set b0='NBQI1ETMT9YQTOJEMRMSV' where id=4; -update noar ti set b0='NBQI1ETMT9YQTOJEMRMSV' where id=4; -update noar tt set b1='5NBGCT6QI8I' where id=4; -update noar ti set b1='5NBGCT6QI8I' where id=4; -update noar tt set b2='G99KPIG3B1R3AMCH69LH9BUNFXC2G' where id=4; -update noar ti set b2='G99KPIG3B1R3AMCH69LH9BUNFXC2G' where id=4; -update noar tt set b0='AX5IKUQ7814AJMG8VJTY' where id=5; -update noar ti set b0='AX5IKUQ7814AJMG8VJTY' where id=5; -update noar tt set b1='0HRT' where id=5; -update noar ti set b1='0HRT' where id=5; -update noar tt set b2='JI0LRN' where id=5; -update noar ti set b2='JI0LRN' where id=5; -update noar tt set b0='ZLLRV' where id=6; -update noar ti set b0='ZLLRV' where id=6; -update noar tt set b1='AZO0WPETD1IEU2W0E' where id=6; -update noar ti set b1='AZO0WPETD1IEU2W0E' where id=6; -update noar tt set b2='2QWQNWUT7LJEJ0OMLZVANPHYRH' where id=6; -update noar ti set b2='2QWQNWUT7LJEJ0OMLZVANPHYRH' where id=6; -update noar tt set b0='VYCG8MQ1NXT4UG431981BA1CELN9X8' where id=7; -update noar ti set b0='VYCG8MQ1NXT4UG431981BA1CELN9X8' where id=7; -update noar tt set b1='N6FO' where id=7; -update noar ti set b1='N6FO' where id=7; -update noar tt set b2='YLLY98BWGIO81FAP6' where id=7; -update noar ti set b2='YLLY98BWGIO81FAP6' where id=7; -update noar tt set b0='18AF2WKP4MMXGCOWAL4' where id=8; -update noar ti set b0='18AF2WKP4MMXGCOWAL4' where id=8; -update noar tt set b1='5KVYXVMIUE8KC05A4JJY' where id=8; -update noar ti set b1='5KVYXVMIUE8KC05A4JJY' where id=8; -update noar tt set b2='C6X19L' where id=8; -update noar ti set b2='C6X19L' where id=8; -update noar tt set b0='U9B' where id=9; -update noar ti set b0='U9B' where id=9; -update noar tt set b1='P03ERPU' where id=9; -update noar ti set b1='P03ERPU' where id=9; -update noar tt set b2='2K926FRYLL80CNFU7V' where id=9; -update noar ti set b2='2K926FRYLL80CNFU7V' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 text not null, -b1 tinyblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='LDZQ62' where id=1; -update noar ti set b0='LDZQ62' where id=1; -update noar tt set b1='TSHQCJAKBWKNSP' where id=1; -update noar ti set b1='TSHQCJAKBWKNSP' where id=1; -update noar tt set b2='V925Z2RR' where id=1; -update noar ti set b2='V925Z2RR' where id=1; -update noar tt set b0='8TA2EGNM082' where id=2; -update noar ti set b0='8TA2EGNM082' where id=2; -update noar tt set b1='ROPWSPB4JF7YPB4TM0PRPO' where id=2; -update noar ti set b1='ROPWSPB4JF7YPB4TM0PRPO' where id=2; -update noar tt set b2='NY0MFA6FH8UA' where id=2; -update noar ti set b2='NY0MFA6FH8UA' where id=2; -update noar tt set b0='9J0NTMDNSGDPJGRF' where id=3; -update noar ti set b0='9J0NTMDNSGDPJGRF' where id=3; -update noar tt set b1='GXXXJPHPV0JUJMP' where id=3; -update noar ti set b1='GXXXJPHPV0JUJMP' where id=3; -update noar tt set b2='01YM61LJ38X6' where id=3; -update noar ti set b2='01YM61LJ38X6' where id=3; -update noar tt set b0='N' where id=4; -update noar ti set b0='N' where id=4; -update noar tt set b1='G7UPQ9Y44OKF0TXUMZ2' where id=4; -update noar ti set b1='G7UPQ9Y44OKF0TXUMZ2' where id=4; -update noar tt set b2='TB5J' where id=4; -update noar ti set b2='TB5J' where id=4; -update noar tt set b0='A' where id=5; -update noar ti set b0='A' where id=5; -update noar tt set b1='6V70U56BSZGKY7NS5WVMQATXSXZ4' where id=5; -update noar ti set b1='6V70U56BSZGKY7NS5WVMQATXSXZ4' where id=5; -update noar tt set b2='WZIUE5OYFUQ4UA9CZVUBM1613ZP' where id=5; -update noar ti set b2='WZIUE5OYFUQ4UA9CZVUBM1613ZP' where id=5; -update noar tt set b0='ZTMC5C5Y67ZTOZHY' where id=6; -update noar ti set b0='ZTMC5C5Y67ZTOZHY' where id=6; -update noar tt set b1='147TP9MG12D7ATN5RB4HUHQRV' where id=6; -update noar ti set b1='147TP9MG12D7ATN5RB4HUHQRV' where id=6; -update noar tt set b2='VMHDCJ1J' where id=6; -update noar ti set b2='VMHDCJ1J' where id=6; -update noar tt set b0='UVK2JX29QW0W4DHOW2BQ4N' where id=7; -update noar ti set b0='UVK2JX29QW0W4DHOW2BQ4N' where id=7; -update noar tt set b1='A1EN6R7ABSBIK1JZY1CGSKWXBSGH' where id=7; -update noar ti set b1='A1EN6R7ABSBIK1JZY1CGSKWXBSGH' where id=7; -update noar tt set b2='EJ59VT5YXEEAM6BO86W6T' where id=7; -update noar ti set b2='EJ59VT5YXEEAM6BO86W6T' where id=7; -update noar tt set b0='U' where id=8; -update noar ti set b0='U' where id=8; -update noar tt set b1='78YUR0Q3D3K9U' where id=8; -update noar ti set b1='78YUR0Q3D3K9U' where id=8; -update noar tt set b2='IUM9GL98NMSU2ZY3BBN4SBLP3N' where id=8; -update noar ti set b2='IUM9GL98NMSU2ZY3BBN4SBLP3N' where id=8; -update noar tt set b0='FWVPAF0F0M3MKIUOVF4W1P' where id=9; -update noar ti set b0='FWVPAF0F0M3MKIUOVF4W1P' where id=9; -update noar tt set b1='WEXY9Y' where id=9; -update noar ti set b1='WEXY9Y' where id=9; -update noar tt set b2='J5RTQE5QAS' where id=9; -update noar ti set b2='J5RTQE5QAS' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 text null, -b1 tinyblob null, -b2 text null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='5C19WLU0CCGOFGGXQFW' where id=1; -update noar ti set b0='5C19WLU0CCGOFGGXQFW' where id=1; -update noar tt set b1='JZ11HN04EHQ61FA7QZFCT7TDJR' where id=1; -update noar ti set b1='JZ11HN04EHQ61FA7QZFCT7TDJR' where id=1; -update noar tt set b2='OFEOC45Q7USIYH5GLN6Q' where id=1; -update noar ti set b2='OFEOC45Q7USIYH5GLN6Q' where id=1; -update noar tt set b0='GL95P5IC6C8MDD7LWVLX9UEJO9IY5N1' where id=2; -update noar ti set b0='GL95P5IC6C8MDD7LWVLX9UEJO9IY5N1' where id=2; -update noar tt set b1='J4EJLSR2' where id=2; -update noar ti set b1='J4EJLSR2' where id=2; -update noar tt set b2='71153JRQONJ8DJZX37W6TLRLH' where id=2; -update noar ti set b2='71153JRQONJ8DJZX37W6TLRLH' where id=2; -update noar tt set b0='SGZVUKASDZQJTYFSL0XOE' where id=3; -update noar ti set b0='SGZVUKASDZQJTYFSL0XOE' where id=3; -update noar tt set b1='BFOB7FKIUVCB' where id=3; -update noar ti set b1='BFOB7FKIUVCB' where id=3; -update noar tt set b2='CTZDNML' where id=3; -update noar ti set b2='CTZDNML' where id=3; -update noar tt set b0='VFC8ZT5EFNA91HDN0ME2' where id=4; -update noar ti set b0='VFC8ZT5EFNA91HDN0ME2' where id=4; -update noar tt set b1='9HYIJD02YJC0TT5A' where id=4; -update noar ti set b1='9HYIJD02YJC0TT5A' where id=4; -update noar tt set b2='BGGBA3B6IK' where id=4; -update noar ti set b2='BGGBA3B6IK' where id=4; -update noar tt set b0='1ZAG871BYX00E0CHQ528B76JLWIYIGK' where id=5; -update noar ti set b0='1ZAG871BYX00E0CHQ528B76JLWIYIGK' where id=5; -update noar tt set b1='QR0QXSBRJDS5YDQ' where id=5; -update noar ti set b1='QR0QXSBRJDS5YDQ' where id=5; -update noar tt set b2='P1X' where id=5; -update noar ti set b2='P1X' where id=5; -update noar tt set b0='NMK41PD5HFO4A0L20JK46QB3FDN5AB' where id=6; -update noar ti set b0='NMK41PD5HFO4A0L20JK46QB3FDN5AB' where id=6; -update noar tt set b1='UQMAPQ3INLUX85L4RS2H' where id=6; -update noar ti set b1='UQMAPQ3INLUX85L4RS2H' where id=6; -update noar tt set b2='WG7KRKI3J51ZPWVE8NEE7OHW4GF' where id=6; -update noar ti set b2='WG7KRKI3J51ZPWVE8NEE7OHW4GF' where id=6; -update noar tt set b0='VYXOSHBDRNGO6P3HSYQ53GHWGODXG7KU' where id=7; -update noar ti set b0='VYXOSHBDRNGO6P3HSYQ53GHWGODXG7KU' where id=7; -update noar tt set b1='E9WE4QJ4' where id=7; -update noar ti set b1='E9WE4QJ4' where id=7; -update noar tt set b2='VM71160W2HBBWXQO735I' where id=7; -update noar ti set b2='VM71160W2HBBWXQO735I' where id=7; -update noar tt set b0='A11YB1TQEHRRY88A2F1YZB5U3' where id=8; -update noar ti set b0='A11YB1TQEHRRY88A2F1YZB5U3' where id=8; -update noar tt set b1='EKDSPE0BMY' where id=8; -update noar ti set b1='EKDSPE0BMY' where id=8; -update noar tt set b2='QOUAQXFP8GE8M8GESVCOIIV5C6V5' where id=8; -update noar ti set b2='QOUAQXFP8GE8M8GESVCOIIV5C6V5' where id=8; -update noar tt set b0='2JT6TY' where id=9; -update noar ti set b0='2JT6TY' where id=9; -update noar tt set b1='SZTYLSBW7VQ' where id=9; -update noar ti set b1='SZTYLSBW7VQ' where id=9; -update noar tt set b2='87' where id=9; -update noar ti set b2='87' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 text not null, -b1 tinyblob not null, -b2 text not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='IUUKUIZIUNFRBJA1' where id=1; -update noar ti set b0='IUUKUIZIUNFRBJA1' where id=1; -update noar tt set b1='I7VEUQV1I2I3SIK1D3R0' where id=1; -update noar ti set b1='I7VEUQV1I2I3SIK1D3R0' where id=1; -update noar tt set b2='RLD962Z' where id=1; -update noar ti set b2='RLD962Z' where id=1; -update noar tt set b0='GIDBPR6XSWNT2P54' where id=2; -update noar ti set b0='GIDBPR6XSWNT2P54' where id=2; -update noar tt set b1='WNZ4B1WM31A2H9N6F6WPMCHY1Q' where id=2; -update noar ti set b1='WNZ4B1WM31A2H9N6F6WPMCHY1Q' where id=2; -update noar tt set b2='1J9DP0GVU3FZY' where id=2; -update noar ti set b2='1J9DP0GVU3FZY' where id=2; -update noar tt set b0='VSXJHTPJKYEDGP4SLHG0JLS54X' where id=3; -update noar ti set b0='VSXJHTPJKYEDGP4SLHG0JLS54X' where id=3; -update noar tt set b1='M4L3E3C6MFGX5GDIS9OGPHQ7F1' where id=3; -update noar ti set b1='M4L3E3C6MFGX5GDIS9OGPHQ7F1' where id=3; -update noar tt set b2='MJNMPY1T' where id=3; -update noar ti set b2='MJNMPY1T' where id=3; -update noar tt set b0='95OKX9T8U40BF' where id=4; -update noar ti set b0='95OKX9T8U40BF' where id=4; -update noar tt set b1='MUU1NMS69K' where id=4; -update noar ti set b1='MUU1NMS69K' where id=4; -update noar tt set b2='VKO8L48K29YTD1GJWRF1ZKZVYJFHFIK' where id=4; -update noar ti set b2='VKO8L48K29YTD1GJWRF1ZKZVYJFHFIK' where id=4; -update noar tt set b0='ECAFMVP' where id=5; -update noar ti set b0='ECAFMVP' where id=5; -update noar tt set b1='NMVUYN6DF9NA1GYAK8L5N0PI4J5FXB' where id=5; -update noar ti set b1='NMVUYN6DF9NA1GYAK8L5N0PI4J5FXB' where id=5; -update noar tt set b2='76E5XR398OY1ZRR5M4O5' where id=5; -update noar ti set b2='76E5XR398OY1ZRR5M4O5' where id=5; -update noar tt set b0='5MACI4J4S8MISFHETAA8F' where id=6; -update noar ti set b0='5MACI4J4S8MISFHETAA8F' where id=6; -update noar tt set b1='YB136' where id=6; -update noar ti set b1='YB136' where id=6; -update noar tt set b2='46' where id=6; -update noar ti set b2='46' where id=6; -update noar tt set b0='RYJ2E9MU62OCUPE3Q15NXSOWPJ' where id=7; -update noar ti set b0='RYJ2E9MU62OCUPE3Q15NXSOWPJ' where id=7; -update noar tt set b1='ANJ4DJQDDA1URAHXU9LB79V8DFCTTL' where id=7; -update noar ti set b1='ANJ4DJQDDA1URAHXU9LB79V8DFCTTL' where id=7; -update noar tt set b2='Q3I5RKQOAJN' where id=7; -update noar ti set b2='Q3I5RKQOAJN' where id=7; -update noar tt set b0='JVD6Y3GRUG' where id=8; -update noar ti set b0='JVD6Y3GRUG' where id=8; -update noar tt set b1='1QJ4SAN6Q' where id=8; -update noar ti set b1='1QJ4SAN6Q' where id=8; -update noar tt set b2='1CAWYWTL2Y1DZ4ER5JH1QXZ6RZKM6Y' where id=8; -update noar ti set b2='1CAWYWTL2Y1DZ4ER5JH1QXZ6RZKM6Y' where id=8; -update noar tt set b0='XFPY1Y0USG87O18SAACSQ' where id=9; -update noar ti set b0='XFPY1Y0USG87O18SAACSQ' where id=9; -update noar tt set b1='YX2JU92LEPE0PAH0JRMCG4C0I9XEU' where id=9; -update noar ti set b1='YX2JU92LEPE0PAH0JRMCG4C0I9XEU' where id=9; -update noar tt set b2='IUELD0ATIF341LF0RT86YJXO4F2' where id=9; -update noar ti set b2='IUELD0ATIF341LF0RT86YJXO4F2' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 text null, -b1 blob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='639LW3SSYAH9ZKNWZOOH9A5WRT8HDZ9' where id=1; -update noar ti set b0='639LW3SSYAH9ZKNWZOOH9A5WRT8HDZ9' where id=1; -update noar tt set b1='OO4NXLDGOLPR0JCAHG724X174EAH2EI6' where id=1; -update noar ti set b1='OO4NXLDGOLPR0JCAHG724X174EAH2EI6' where id=1; -update noar tt set b2='BWE' where id=1; -update noar ti set b2='BWE' where id=1; -update noar tt set b0='70RQS' where id=2; -update noar ti set b0='70RQS' where id=2; -update noar tt set b1='959F09ZP' where id=2; -update noar ti set b1='959F09ZP' where id=2; -update noar tt set b2='LUJ8FWF3JKHTX' where id=2; -update noar ti set b2='LUJ8FWF3JKHTX' where id=2; -update noar tt set b0='R501GHKFLRXMYI3EV6DAO6F6A5W90PF' where id=3; -update noar ti set b0='R501GHKFLRXMYI3EV6DAO6F6A5W90PF' where id=3; -update noar tt set b1='VHXCSQXP765CQE0X9W2D' where id=3; -update noar ti set b1='VHXCSQXP765CQE0X9W2D' where id=3; -update noar tt set b2='VV' where id=3; -update noar ti set b2='VV' where id=3; -update noar tt set b0='UMN6WVI' where id=4; -update noar ti set b0='UMN6WVI' where id=4; -update noar tt set b1='VSCSC' where id=4; -update noar ti set b1='VSCSC' where id=4; -update noar tt set b2='QQILSU15ZC13OFR' where id=4; -update noar ti set b2='QQILSU15ZC13OFR' where id=4; -update noar tt set b0='3TFOOURBK' where id=5; -update noar ti set b0='3TFOOURBK' where id=5; -update noar tt set b1='OJKB44779HHS85NU2QQPTMH8GACK' where id=5; -update noar ti set b1='OJKB44779HHS85NU2QQPTMH8GACK' where id=5; -update noar tt set b2='4QE0RQ' where id=5; -update noar ti set b2='4QE0RQ' where id=5; -update noar tt set b0='JWDMXPXGJZH5V6I6DG9N' where id=6; -update noar ti set b0='JWDMXPXGJZH5V6I6DG9N' where id=6; -update noar tt set b1='7P3JUWPHCRI8AYNVR6' where id=6; -update noar ti set b1='7P3JUWPHCRI8AYNVR6' where id=6; -update noar tt set b2='3NUA5984ZRUPB4GF' where id=6; -update noar ti set b2='3NUA5984ZRUPB4GF' where id=6; -update noar tt set b0='VQQFLPAJ735O8V1DLRVLX84D557O' where id=7; -update noar ti set b0='VQQFLPAJ735O8V1DLRVLX84D557O' where id=7; -update noar tt set b1='76IHAPI4OJVP' where id=7; -update noar ti set b1='76IHAPI4OJVP' where id=7; -update noar tt set b2='RV0GX0ET1ESQ9LD' where id=7; -update noar ti set b2='RV0GX0ET1ESQ9LD' where id=7; -update noar tt set b0='M725JA0F' where id=8; -update noar ti set b0='M725JA0F' where id=8; -update noar tt set b1='DGNJ34BNQV3ZRFVYQD' where id=8; -update noar ti set b1='DGNJ34BNQV3ZRFVYQD' where id=8; -update noar tt set b2='EXSXZ3T3' where id=8; -update noar ti set b2='EXSXZ3T3' where id=8; -update noar tt set b0='GLUJBG3CD6P9ASKO0IHK8NG' where id=9; -update noar ti set b0='GLUJBG3CD6P9ASKO0IHK8NG' where id=9; -update noar tt set b1='XF' where id=9; -update noar ti set b1='XF' where id=9; -update noar tt set b2='01GLNOYMINL2LWTP14XTMQP5ZCD82NQD' where id=9; -update noar ti set b2='01GLNOYMINL2LWTP14XTMQP5ZCD82NQD' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 text not null, -b1 blob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='CVK0WBAQCY9D0VNT' where id=1; -update noar ti set b0='CVK0WBAQCY9D0VNT' where id=1; -update noar tt set b1='1GNE' where id=1; -update noar ti set b1='1GNE' where id=1; -update noar tt set b2='GMW1G9UIPYXAHTB4DNFEFQK5DD' where id=1; -update noar ti set b2='GMW1G9UIPYXAHTB4DNFEFQK5DD' where id=1; -update noar tt set b0='N7C0NKZFYQTI4DVBAWDS' where id=2; -update noar ti set b0='N7C0NKZFYQTI4DVBAWDS' where id=2; -update noar tt set b1='V8M4JV7Z91G9FM' where id=2; -update noar ti set b1='V8M4JV7Z91G9FM' where id=2; -update noar tt set b2='OC1KN7W3GZTGU8H5O' where id=2; -update noar ti set b2='OC1KN7W3GZTGU8H5O' where id=2; -update noar tt set b0='RA4XEY38I' where id=3; -update noar ti set b0='RA4XEY38I' where id=3; -update noar tt set b1='4067UUNNJ2Z1OMDG902WZ' where id=3; -update noar ti set b1='4067UUNNJ2Z1OMDG902WZ' where id=3; -update noar tt set b2='Z8Q7X1864VLQLA44K1OLU7HR7P5C' where id=3; -update noar ti set b2='Z8Q7X1864VLQLA44K1OLU7HR7P5C' where id=3; -update noar tt set b0='MKXU68RGV2JFUBLAFKW' where id=4; -update noar ti set b0='MKXU68RGV2JFUBLAFKW' where id=4; -update noar tt set b1='WY' where id=4; -update noar ti set b1='WY' where id=4; -update noar tt set b2='94PLXX31OLV9ZNOKKNF4QQJCPZC1RZ64' where id=4; -update noar ti set b2='94PLXX31OLV9ZNOKKNF4QQJCPZC1RZ64' where id=4; -update noar tt set b0='EVSIMUTGQJ8H2BDE3W4NU0RB48WZEIF3' where id=5; -update noar ti set b0='EVSIMUTGQJ8H2BDE3W4NU0RB48WZEIF3' where id=5; -update noar tt set b1='KBFS7C9CW7VTA8FVGRC5GWT4TRCB0KQO' where id=5; -update noar ti set b1='KBFS7C9CW7VTA8FVGRC5GWT4TRCB0KQO' where id=5; -update noar tt set b2='9CE3ITZNPH4THWMAM69F' where id=5; -update noar ti set b2='9CE3ITZNPH4THWMAM69F' where id=5; -update noar tt set b0='2AJ1IT271KPC49SNXMPLWI8' where id=6; -update noar ti set b0='2AJ1IT271KPC49SNXMPLWI8' where id=6; -update noar tt set b1='H68KJGZZ82QT0' where id=6; -update noar ti set b1='H68KJGZZ82QT0' where id=6; -update noar tt set b2='DRF8L7I40BJ68OXRSMC2MQV' where id=6; -update noar ti set b2='DRF8L7I40BJ68OXRSMC2MQV' where id=6; -update noar tt set b0='8VDUN8L' where id=7; -update noar ti set b0='8VDUN8L' where id=7; -update noar tt set b1='DQYXN1SVB' where id=7; -update noar ti set b1='DQYXN1SVB' where id=7; -update noar tt set b2='DFZQS9F1N3XSRS9CTCR' where id=7; -update noar ti set b2='DFZQS9F1N3XSRS9CTCR' where id=7; -update noar tt set b0='YUDJ16IKZSM77ZYJMA3XEJAPG1' where id=8; -update noar ti set b0='YUDJ16IKZSM77ZYJMA3XEJAPG1' where id=8; -update noar tt set b1='PEDQ01X' where id=8; -update noar ti set b1='PEDQ01X' where id=8; -update noar tt set b2='OB6UCNX3OLZPPGREZT5XPJ4' where id=8; -update noar ti set b2='OB6UCNX3OLZPPGREZT5XPJ4' where id=8; -update noar tt set b0='JDG1OW' where id=9; -update noar ti set b0='JDG1OW' where id=9; -update noar tt set b1='P5UQAPXFURKWC2VAIEZBHBIIU8' where id=9; -update noar ti set b1='P5UQAPXFURKWC2VAIEZBHBIIU8' where id=9; -update noar tt set b2='27' where id=9; -update noar ti set b2='27' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 text null, -b1 blob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='6604SEUPOJ1NH' where id=1; -update noar ti set b0='6604SEUPOJ1NH' where id=1; -update noar tt set b1='U9UKP73' where id=1; -update noar ti set b1='U9UKP73' where id=1; -update noar tt set b2='D20SE4B542DH5VQNU20KOSF6' where id=1; -update noar ti set b2='D20SE4B542DH5VQNU20KOSF6' where id=1; -update noar tt set b0='NF9XX' where id=2; -update noar ti set b0='NF9XX' where id=2; -update noar tt set b1='24ZM1CL7P' where id=2; -update noar ti set b1='24ZM1CL7P' where id=2; -update noar tt set b2='GIV9E0CEGWFO2APSS62LB2YDOU' where id=2; -update noar ti set b2='GIV9E0CEGWFO2APSS62LB2YDOU' where id=2; -update noar tt set b0='7FYNCVTSF75RXRBU94F3ILDL25GWMF' where id=3; -update noar ti set b0='7FYNCVTSF75RXRBU94F3ILDL25GWMF' where id=3; -update noar tt set b1='TM' where id=3; -update noar ti set b1='TM' where id=3; -update noar tt set b2='BZ0PGFK3NFMCWN5A57HD0QT777TO4' where id=3; -update noar ti set b2='BZ0PGFK3NFMCWN5A57HD0QT777TO4' where id=3; -update noar tt set b0='LMMPIO1Z3' where id=4; -update noar ti set b0='LMMPIO1Z3' where id=4; -update noar tt set b1='CPKDUI5UVT37Q2WF0UICR4T' where id=4; -update noar ti set b1='CPKDUI5UVT37Q2WF0UICR4T' where id=4; -update noar tt set b2='PXZRXSAO7R4LK5AG' where id=4; -update noar ti set b2='PXZRXSAO7R4LK5AG' where id=4; -update noar tt set b0='7SWE1SWALSTRY' where id=5; -update noar ti set b0='7SWE1SWALSTRY' where id=5; -update noar tt set b1='8IAPWSFR66EV4G' where id=5; -update noar ti set b1='8IAPWSFR66EV4G' where id=5; -update noar tt set b2='WLXCIO2HMZTHQ752H' where id=5; -update noar ti set b2='WLXCIO2HMZTHQ752H' where id=5; -update noar tt set b0='X1K5ULAKDCTH' where id=6; -update noar ti set b0='X1K5ULAKDCTH' where id=6; -update noar tt set b1='VU5GM75G7X5RBO8BSBYBUPEQ13V70R' where id=6; -update noar ti set b1='VU5GM75G7X5RBO8BSBYBUPEQ13V70R' where id=6; -update noar tt set b2='OSZE1IM69X' where id=6; -update noar ti set b2='OSZE1IM69X' where id=6; -update noar tt set b0='N4G6CRZX4K7YQ25ZEMGR674U9EFAPYKF' where id=7; -update noar ti set b0='N4G6CRZX4K7YQ25ZEMGR674U9EFAPYKF' where id=7; -update noar tt set b1='F8K1ETN3HQ62M' where id=7; -update noar ti set b1='F8K1ETN3HQ62M' where id=7; -update noar tt set b2='J8B5XCR' where id=7; -update noar ti set b2='J8B5XCR' where id=7; -update noar tt set b0='EGGSUMHTUZ2Z49D0P2NNMWPNU29' where id=8; -update noar ti set b0='EGGSUMHTUZ2Z49D0P2NNMWPNU29' where id=8; -update noar tt set b1='TSP0V0F7YFFP1KC' where id=8; -update noar ti set b1='TSP0V0F7YFFP1KC' where id=8; -update noar tt set b2='X6VM77DCFUFWE9OME' where id=8; -update noar ti set b2='X6VM77DCFUFWE9OME' where id=8; -update noar tt set b0='F695SRM8F6RMKMTDGEUWRWQIUSIBJZ' where id=9; -update noar ti set b0='F695SRM8F6RMKMTDGEUWRWQIUSIBJZ' where id=9; -update noar tt set b1='XP427W4M6C7JWKLNHC39VH6E2QQVXW23' where id=9; -update noar ti set b1='XP427W4M6C7JWKLNHC39VH6E2QQVXW23' where id=9; -update noar tt set b2='PL4S46' where id=9; -update noar ti set b2='PL4S46' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 text not null, -b1 blob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='ZPW4ZC0FLWL' where id=1; -update noar ti set b0='ZPW4ZC0FLWL' where id=1; -update noar tt set b1='HRCFD' where id=1; -update noar ti set b1='HRCFD' where id=1; -update noar tt set b2='XMYRIB8X7DBYPENWR0E4N90SN27517W7' where id=1; -update noar ti set b2='XMYRIB8X7DBYPENWR0E4N90SN27517W7' where id=1; -update noar tt set b0='ANWYLJ7F3OVWYZZ15V27SZV1C2' where id=2; -update noar ti set b0='ANWYLJ7F3OVWYZZ15V27SZV1C2' where id=2; -update noar tt set b1='PBBDLSO9N7' where id=2; -update noar ti set b1='PBBDLSO9N7' where id=2; -update noar tt set b2='B4PBXG3NFGWOYQ5G6R1CSB' where id=2; -update noar ti set b2='B4PBXG3NFGWOYQ5G6R1CSB' where id=2; -update noar tt set b0='PENOUEMLJ5B1RC9L' where id=3; -update noar ti set b0='PENOUEMLJ5B1RC9L' where id=3; -update noar tt set b1='W95CKPSD7LJZNZEOPYDT3U' where id=3; -update noar ti set b1='W95CKPSD7LJZNZEOPYDT3U' where id=3; -update noar tt set b2='AO2ZUAJ44T3J' where id=3; -update noar ti set b2='AO2ZUAJ44T3J' where id=3; -update noar tt set b0='639I9XEB8NUM31TDPVVXPNANX3RSWH' where id=4; -update noar ti set b0='639I9XEB8NUM31TDPVVXPNANX3RSWH' where id=4; -update noar tt set b1='FZTY6' where id=4; -update noar ti set b1='FZTY6' where id=4; -update noar tt set b2='SEUWCXV7KAP' where id=4; -update noar ti set b2='SEUWCXV7KAP' where id=4; -update noar tt set b0='7NJI84HPMG99STTH370A3VVPULZE' where id=5; -update noar ti set b0='7NJI84HPMG99STTH370A3VVPULZE' where id=5; -update noar tt set b1='DMS1X1CR52AS25OOABXADW' where id=5; -update noar ti set b1='DMS1X1CR52AS25OOABXADW' where id=5; -update noar tt set b2='IME633' where id=5; -update noar ti set b2='IME633' where id=5; -update noar tt set b0='ZACORRE3QOAL71KOB4D7AK2UXXESWF' where id=6; -update noar ti set b0='ZACORRE3QOAL71KOB4D7AK2UXXESWF' where id=6; -update noar tt set b1='8S7W28XKIMSS085OXY4VCMXD49AXN' where id=6; -update noar ti set b1='8S7W28XKIMSS085OXY4VCMXD49AXN' where id=6; -update noar tt set b2='L91NFDQTXW849L0TDVC8QKSD9SCR6' where id=6; -update noar ti set b2='L91NFDQTXW849L0TDVC8QKSD9SCR6' where id=6; -update noar tt set b0='9GZG8PCEQNFJU7EQLI9ARFGST' where id=7; -update noar ti set b0='9GZG8PCEQNFJU7EQLI9ARFGST' where id=7; -update noar tt set b1='IX16SA4' where id=7; -update noar ti set b1='IX16SA4' where id=7; -update noar tt set b2='VG4EI3Q1H' where id=7; -update noar ti set b2='VG4EI3Q1H' where id=7; -update noar tt set b0='MY8HU0U2WH38W' where id=8; -update noar ti set b0='MY8HU0U2WH38W' where id=8; -update noar tt set b1='V' where id=8; -update noar ti set b1='V' where id=8; -update noar tt set b2='U5YFNFL3RU9794DGIG2E6KZW85QPLM' where id=8; -update noar ti set b2='U5YFNFL3RU9794DGIG2E6KZW85QPLM' where id=8; -update noar tt set b0='JE94WZHA6G75VPEXZAVV' where id=9; -update noar ti set b0='JE94WZHA6G75VPEXZAVV' where id=9; -update noar tt set b1='3QT5' where id=9; -update noar ti set b1='3QT5' where id=9; -update noar tt set b2='8HUO9PI' where id=9; -update noar ti set b2='8HUO9PI' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 text null, -b1 blob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='Z0YMM5JM2NXUZRYPR' where id=1; -update noar ti set b0='Z0YMM5JM2NXUZRYPR' where id=1; -update noar tt set b1='ZI4QU' where id=1; -update noar ti set b1='ZI4QU' where id=1; -update noar tt set b2='IWLYQGF4F9XR' where id=1; -update noar ti set b2='IWLYQGF4F9XR' where id=1; -update noar tt set b0='8DF7PDUAK1Q8JO08I' where id=2; -update noar ti set b0='8DF7PDUAK1Q8JO08I' where id=2; -update noar tt set b1='CZ53T' where id=2; -update noar ti set b1='CZ53T' where id=2; -update noar tt set b2='2C8CV37B302RT4BES' where id=2; -update noar ti set b2='2C8CV37B302RT4BES' where id=2; -update noar tt set b0='GHYTKCC1RU62343XDLQ' where id=3; -update noar ti set b0='GHYTKCC1RU62343XDLQ' where id=3; -update noar tt set b1='ZPIC05VC4073GRPEVDLU1YY097ZQ' where id=3; -update noar ti set b1='ZPIC05VC4073GRPEVDLU1YY097ZQ' where id=3; -update noar tt set b2='68Y8EOS4ATCPDD' where id=3; -update noar ti set b2='68Y8EOS4ATCPDD' where id=3; -update noar tt set b0='TVO3MA44RIQC7B57ZSBDHVBG49JQEYJ' where id=4; -update noar ti set b0='TVO3MA44RIQC7B57ZSBDHVBG49JQEYJ' where id=4; -update noar tt set b1='2MF3' where id=4; -update noar ti set b1='2MF3' where id=4; -update noar tt set b2='HKSV7BZFVNLUXJU6OGVPGYRN' where id=4; -update noar ti set b2='HKSV7BZFVNLUXJU6OGVPGYRN' where id=4; -update noar tt set b0='BDC859S7' where id=5; -update noar ti set b0='BDC859S7' where id=5; -update noar tt set b1='AL3TQ1FEOB29PY811DZDD7L' where id=5; -update noar ti set b1='AL3TQ1FEOB29PY811DZDD7L' where id=5; -update noar tt set b2='ISINVKF23GAJLFF8KEC2FCY0' where id=5; -update noar ti set b2='ISINVKF23GAJLFF8KEC2FCY0' where id=5; -update noar tt set b0='NLJX7SF5ILDY6SHUPBFJLU' where id=6; -update noar ti set b0='NLJX7SF5ILDY6SHUPBFJLU' where id=6; -update noar tt set b1='NYE6E34KK7MJFTIC6UC8ZHUQ0H' where id=6; -update noar ti set b1='NYE6E34KK7MJFTIC6UC8ZHUQ0H' where id=6; -update noar tt set b2='ZR' where id=6; -update noar ti set b2='ZR' where id=6; -update noar tt set b0='7U3BBQI5DH4H' where id=7; -update noar ti set b0='7U3BBQI5DH4H' where id=7; -update noar tt set b1='MPYYN6Y92SG6ADA6WOBB9DS1RBF1E2' where id=7; -update noar ti set b1='MPYYN6Y92SG6ADA6WOBB9DS1RBF1E2' where id=7; -update noar tt set b2='P911GC' where id=7; -update noar ti set b2='P911GC' where id=7; -update noar tt set b0='YXYGPU9KQUXG' where id=8; -update noar ti set b0='YXYGPU9KQUXG' where id=8; -update noar tt set b1='15W4' where id=8; -update noar ti set b1='15W4' where id=8; -update noar tt set b2='22MEOHC9T3BTK0VPSVOPH9LR' where id=8; -update noar ti set b2='22MEOHC9T3BTK0VPSVOPH9LR' where id=8; -update noar tt set b0='JILIU' where id=9; -update noar ti set b0='JILIU' where id=9; -update noar tt set b1='O2GGP60RF2R7W4Z3R' where id=9; -update noar ti set b1='O2GGP60RF2R7W4Z3R' where id=9; -update noar tt set b2='7' where id=9; -update noar ti set b2='7' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 text not null, -b1 blob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='OEWYKUULY0Q7E3Y1NU8LX1EF2P4R6PD' where id=1; -update noar ti set b0='OEWYKUULY0Q7E3Y1NU8LX1EF2P4R6PD' where id=1; -update noar tt set b1='DN' where id=1; -update noar ti set b1='DN' where id=1; -update noar tt set b2='P7QT77VLUR2BGCXW9M1' where id=1; -update noar ti set b2='P7QT77VLUR2BGCXW9M1' where id=1; -update noar tt set b0='FPV99KYKUFTOQU' where id=2; -update noar ti set b0='FPV99KYKUFTOQU' where id=2; -update noar tt set b1='AY25HWDKZFVHYI4KUFOOLBR' where id=2; -update noar ti set b1='AY25HWDKZFVHYI4KUFOOLBR' where id=2; -update noar tt set b2='KWWNEU9SU8N9JLPH6D0' where id=2; -update noar ti set b2='KWWNEU9SU8N9JLPH6D0' where id=2; -update noar tt set b0='V34O7O5F7TC89GWNXK14A5WS' where id=3; -update noar ti set b0='V34O7O5F7TC89GWNXK14A5WS' where id=3; -update noar tt set b1='JWASTWP6EIIOH609BA7LX7CQI' where id=3; -update noar ti set b1='JWASTWP6EIIOH609BA7LX7CQI' where id=3; -update noar tt set b2='YIY0HZBFA' where id=3; -update noar ti set b2='YIY0HZBFA' where id=3; -update noar tt set b0='8H7DXS102TU3IXV0CCIZJXK' where id=4; -update noar ti set b0='8H7DXS102TU3IXV0CCIZJXK' where id=4; -update noar tt set b1='W' where id=4; -update noar ti set b1='W' where id=4; -update noar tt set b2='6QPG4F8JY0XBI5ZUCY4' where id=4; -update noar ti set b2='6QPG4F8JY0XBI5ZUCY4' where id=4; -update noar tt set b0='AW2KK' where id=5; -update noar ti set b0='AW2KK' where id=5; -update noar tt set b1='TJ6S4ZFS4486CBCD6AXJFI' where id=5; -update noar ti set b1='TJ6S4ZFS4486CBCD6AXJFI' where id=5; -update noar tt set b2='IS5W52VX669CAB8PJSSJMJ6ZQQ741QH' where id=5; -update noar ti set b2='IS5W52VX669CAB8PJSSJMJ6ZQQ741QH' where id=5; -update noar tt set b0='7A6Z6VEZJRSM' where id=6; -update noar ti set b0='7A6Z6VEZJRSM' where id=6; -update noar tt set b1='G696QBIK2QTVEVIZOWG9E2S' where id=6; -update noar ti set b1='G696QBIK2QTVEVIZOWG9E2S' where id=6; -update noar tt set b2='IZ073IH8YIOA' where id=6; -update noar ti set b2='IZ073IH8YIOA' where id=6; -update noar tt set b0='22I7VKEJDLR8WR891QMXIK8B0ESL70L' where id=7; -update noar ti set b0='22I7VKEJDLR8WR891QMXIK8B0ESL70L' where id=7; -update noar tt set b1='KZ4P7UQ391WEFSY797W2M3Q8PU' where id=7; -update noar ti set b1='KZ4P7UQ391WEFSY797W2M3Q8PU' where id=7; -update noar tt set b2='UD4U6MQMX89' where id=7; -update noar ti set b2='UD4U6MQMX89' where id=7; -update noar tt set b0='N026JXH0BVWP' where id=8; -update noar ti set b0='N026JXH0BVWP' where id=8; -update noar tt set b1='FYTUD' where id=8; -update noar ti set b1='FYTUD' where id=8; -update noar tt set b2='54' where id=8; -update noar ti set b2='54' where id=8; -update noar tt set b0='C1BT' where id=9; -update noar ti set b0='C1BT' where id=9; -update noar tt set b1='V0' where id=9; -update noar ti set b1='V0' where id=9; -update noar tt set b2='S6MOT0M8JOH8JN3DPS7P3A' where id=9; -update noar ti set b2='S6MOT0M8JOH8JN3DPS7P3A' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 text null, -b1 blob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='ZBRG79B9G5RZEND4O7GQ9L' where id=1; -update noar ti set b0='ZBRG79B9G5RZEND4O7GQ9L' where id=1; -update noar tt set b1='40M' where id=1; -update noar ti set b1='40M' where id=1; -update noar tt set b2='AGW99IRGKV36OHW186A9CDMF1W' where id=1; -update noar ti set b2='AGW99IRGKV36OHW186A9CDMF1W' where id=1; -update noar tt set b0='4RHC85920A6RF' where id=2; -update noar ti set b0='4RHC85920A6RF' where id=2; -update noar tt set b1='X613EFQG9X5G7B92Y8M5U3A' where id=2; -update noar ti set b1='X613EFQG9X5G7B92Y8M5U3A' where id=2; -update noar tt set b2='ZXAKH' where id=2; -update noar ti set b2='ZXAKH' where id=2; -update noar tt set b0='S1DWBV0EOJCSXTWZ2P8TX4B' where id=3; -update noar ti set b0='S1DWBV0EOJCSXTWZ2P8TX4B' where id=3; -update noar tt set b1='O0DDZ53H3OKX0KDO6MK4OR' where id=3; -update noar ti set b1='O0DDZ53H3OKX0KDO6MK4OR' where id=3; -update noar tt set b2='J18WK' where id=3; -update noar ti set b2='J18WK' where id=3; -update noar tt set b0='969OH' where id=4; -update noar ti set b0='969OH' where id=4; -update noar tt set b1='DWJCHH7TVC3CWTBCPO6R0WK' where id=4; -update noar ti set b1='DWJCHH7TVC3CWTBCPO6R0WK' where id=4; -update noar tt set b2='GTT15TVKP' where id=4; -update noar ti set b2='GTT15TVKP' where id=4; -update noar tt set b0='25IL7ZXWJN9YWSPEZ26P8CSUKW0E' where id=5; -update noar ti set b0='25IL7ZXWJN9YWSPEZ26P8CSUKW0E' where id=5; -update noar tt set b1='LLC89' where id=5; -update noar ti set b1='LLC89' where id=5; -update noar tt set b2='CRY8702G6LVMB' where id=5; -update noar ti set b2='CRY8702G6LVMB' where id=5; -update noar tt set b0='HFE' where id=6; -update noar ti set b0='HFE' where id=6; -update noar tt set b1='EBWZ' where id=6; -update noar ti set b1='EBWZ' where id=6; -update noar tt set b2='FD' where id=6; -update noar ti set b2='FD' where id=6; -update noar tt set b0='LP3QOJEELP' where id=7; -update noar ti set b0='LP3QOJEELP' where id=7; -update noar tt set b1='R2OPGOQETJP' where id=7; -update noar ti set b1='R2OPGOQETJP' where id=7; -update noar tt set b2='2C2VXCUH1B9XL3YFW3NNJ4QNMB09QF' where id=7; -update noar ti set b2='2C2VXCUH1B9XL3YFW3NNJ4QNMB09QF' where id=7; -update noar tt set b0='7WVMQOGLF632B99IG3UDBPWR5RUL58QM' where id=8; -update noar ti set b0='7WVMQOGLF632B99IG3UDBPWR5RUL58QM' where id=8; -update noar tt set b1='GJBCRUWTQXDBEL1G7JU9MYP5AV7L0D8' where id=8; -update noar ti set b1='GJBCRUWTQXDBEL1G7JU9MYP5AV7L0D8' where id=8; -update noar tt set b2='T2EAB1E9L3MD4BIK1' where id=8; -update noar ti set b2='T2EAB1E9L3MD4BIK1' where id=8; -update noar tt set b0='M40E8H6JM6' where id=9; -update noar ti set b0='M40E8H6JM6' where id=9; -update noar tt set b1='HTYWYY9D0BSZMO0XRAZG2LXZMWS' where id=9; -update noar ti set b1='HTYWYY9D0BSZMO0XRAZG2LXZMWS' where id=9; -update noar tt set b2='XUB8ZSSJNJDAJ45PVYXN4GR2O1GBQT9' where id=9; -update noar ti set b2='XUB8ZSSJNJDAJ45PVYXN4GR2O1GBQT9' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 text not null, -b1 blob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='ECB3EOOST' where id=1; -update noar ti set b0='ECB3EOOST' where id=1; -update noar tt set b1='3' where id=1; -update noar ti set b1='3' where id=1; -update noar tt set b2='DT7AZRXV235GNTCG' where id=1; -update noar ti set b2='DT7AZRXV235GNTCG' where id=1; -update noar tt set b0='AJ' where id=2; -update noar ti set b0='AJ' where id=2; -update noar tt set b1='ZKRBO8BSF1QTD1O2YH8S3EQ' where id=2; -update noar ti set b1='ZKRBO8BSF1QTD1O2YH8S3EQ' where id=2; -update noar tt set b2='SWW2Y9S1NJ9CEEPL4X798V9' where id=2; -update noar ti set b2='SWW2Y9S1NJ9CEEPL4X798V9' where id=2; -update noar tt set b0='6MNNRV73AF0VZ3Z' where id=3; -update noar ti set b0='6MNNRV73AF0VZ3Z' where id=3; -update noar tt set b1='WKI' where id=3; -update noar ti set b1='WKI' where id=3; -update noar tt set b2='LDO005JI41OV6K099DZJQ4IS85' where id=3; -update noar ti set b2='LDO005JI41OV6K099DZJQ4IS85' where id=3; -update noar tt set b0='FZRNQGH6GJAE4S1XGOKZFCOR0' where id=4; -update noar ti set b0='FZRNQGH6GJAE4S1XGOKZFCOR0' where id=4; -update noar tt set b1='Y9HQ8FFNO3E53VLIGW4Q' where id=4; -update noar ti set b1='Y9HQ8FFNO3E53VLIGW4Q' where id=4; -update noar tt set b2='51282NTOVOEY77F' where id=4; -update noar ti set b2='51282NTOVOEY77F' where id=4; -update noar tt set b0='AZN4K5RY2OK' where id=5; -update noar ti set b0='AZN4K5RY2OK' where id=5; -update noar tt set b1='ULQ1KDH8Q' where id=5; -update noar ti set b1='ULQ1KDH8Q' where id=5; -update noar tt set b2='B0O0E15KI' where id=5; -update noar ti set b2='B0O0E15KI' where id=5; -update noar tt set b0='D36PS8GP5A85BT4PWGACGLD' where id=6; -update noar ti set b0='D36PS8GP5A85BT4PWGACGLD' where id=6; -update noar tt set b1='HJA2EVLGSMIMW' where id=6; -update noar ti set b1='HJA2EVLGSMIMW' where id=6; -update noar tt set b2='4X' where id=6; -update noar ti set b2='4X' where id=6; -update noar tt set b0='TDSTY3C9AMSBLWX83U2CBPI46' where id=7; -update noar ti set b0='TDSTY3C9AMSBLWX83U2CBPI46' where id=7; -update noar tt set b1='QJQL6O7A4AH9YVGKD72IU9P' where id=7; -update noar ti set b1='QJQL6O7A4AH9YVGKD72IU9P' where id=7; -update noar tt set b2='DIP13EXSBZEEM0K8NR0W23631K1J' where id=7; -update noar ti set b2='DIP13EXSBZEEM0K8NR0W23631K1J' where id=7; -update noar tt set b0='UQK9W7AR0H3I4UFPNCF1' where id=8; -update noar ti set b0='UQK9W7AR0H3I4UFPNCF1' where id=8; -update noar tt set b1='HJAZ' where id=8; -update noar ti set b1='HJAZ' where id=8; -update noar tt set b2='A569YD19ZF23K67YWVY' where id=8; -update noar ti set b2='A569YD19ZF23K67YWVY' where id=8; -update noar tt set b0='8WQW4RKLPDM2NL9B484D1MBM6UGMB3B4' where id=9; -update noar ti set b0='8WQW4RKLPDM2NL9B484D1MBM6UGMB3B4' where id=9; -update noar tt set b1='BNKWZ' where id=9; -update noar ti set b1='BNKWZ' where id=9; -update noar tt set b2='AVV955VSW47QH1CI42D0JZPG5C' where id=9; -update noar ti set b2='AVV955VSW47QH1CI42D0JZPG5C' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 text null, -b1 blob null, -b2 text null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='NBT461F4JIGF6B3KY70D3HCE25HVJ' where id=1; -update noar ti set b0='NBT461F4JIGF6B3KY70D3HCE25HVJ' where id=1; -update noar tt set b1='L41VQCK6DMMFND1KRV45H4' where id=1; -update noar ti set b1='L41VQCK6DMMFND1KRV45H4' where id=1; -update noar tt set b2='761E2M' where id=1; -update noar ti set b2='761E2M' where id=1; -update noar tt set b0='823Y9MXU' where id=2; -update noar ti set b0='823Y9MXU' where id=2; -update noar tt set b1='W165L' where id=2; -update noar ti set b1='W165L' where id=2; -update noar tt set b2='EJ66JI8AEI31YA' where id=2; -update noar ti set b2='EJ66JI8AEI31YA' where id=2; -update noar tt set b0='P7TRKT' where id=3; -update noar ti set b0='P7TRKT' where id=3; -update noar tt set b1='7RXAVJO' where id=3; -update noar ti set b1='7RXAVJO' where id=3; -update noar tt set b2='N' where id=3; -update noar ti set b2='N' where id=3; -update noar tt set b0='C24JOPE1FAY8WG39A4A0VNN85MMQPCN' where id=4; -update noar ti set b0='C24JOPE1FAY8WG39A4A0VNN85MMQPCN' where id=4; -update noar tt set b1='L0BYK' where id=4; -update noar ti set b1='L0BYK' where id=4; -update noar tt set b2='R' where id=4; -update noar ti set b2='R' where id=4; -update noar tt set b0='ZNPL0YRH2DX97MFQZDF5VH' where id=5; -update noar ti set b0='ZNPL0YRH2DX97MFQZDF5VH' where id=5; -update noar tt set b1='U2PAATZ1CQER202LLVBGE6A4HFDNOTH' where id=5; -update noar ti set b1='U2PAATZ1CQER202LLVBGE6A4HFDNOTH' where id=5; -update noar tt set b2='QRFL' where id=5; -update noar ti set b2='QRFL' where id=5; -update noar tt set b0='4WF5ZDFTYJ5TTDBSLLQ' where id=6; -update noar ti set b0='4WF5ZDFTYJ5TTDBSLLQ' where id=6; -update noar tt set b1='MTSA8YVP7XR0FHYE1' where id=6; -update noar ti set b1='MTSA8YVP7XR0FHYE1' where id=6; -update noar tt set b2='8MCJOJTMW7R42ALI0LZPVKJLYDMVZ9' where id=6; -update noar ti set b2='8MCJOJTMW7R42ALI0LZPVKJLYDMVZ9' where id=6; -update noar tt set b0='5CZIS' where id=7; -update noar ti set b0='5CZIS' where id=7; -update noar tt set b1='867FEWDBMDXK81MP8DQNH5CU4HT986AN' where id=7; -update noar ti set b1='867FEWDBMDXK81MP8DQNH5CU4HT986AN' where id=7; -update noar tt set b2='G43YTE6FP1WXH9JBV' where id=7; -update noar ti set b2='G43YTE6FP1WXH9JBV' where id=7; -update noar tt set b0='65K8A6QLXGX6439IDJ433TOO5AA' where id=8; -update noar ti set b0='65K8A6QLXGX6439IDJ433TOO5AA' where id=8; -update noar tt set b1='9W76O63W7V4Y0Q31U1WEHQR7' where id=8; -update noar ti set b1='9W76O63W7V4Y0Q31U1WEHQR7' where id=8; -update noar tt set b2='NLBIYQ8G3FZXP' where id=8; -update noar ti set b2='NLBIYQ8G3FZXP' where id=8; -update noar tt set b0='8M9OLVIMC4IPQ9' where id=9; -update noar ti set b0='8M9OLVIMC4IPQ9' where id=9; -update noar tt set b1='IA2SK9O1XLB2NVLOWQDECFEZ6WN6' where id=9; -update noar ti set b1='IA2SK9O1XLB2NVLOWQDECFEZ6WN6' where id=9; -update noar tt set b2='Y6HM4KI0DIOAST57MU29OXNVP8' where id=9; -update noar ti set b2='Y6HM4KI0DIOAST57MU29OXNVP8' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 text not null, -b1 blob not null, -b2 text not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='9220T0A2HMH8PIR46F' where id=1; -update noar ti set b0='9220T0A2HMH8PIR46F' where id=1; -update noar tt set b1='QN7FF6OFKXBZC83EEVMF93YIHE' where id=1; -update noar ti set b1='QN7FF6OFKXBZC83EEVMF93YIHE' where id=1; -update noar tt set b2='DG71G8XOKJWL3PXPGWUIIXRQP4H' where id=1; -update noar ti set b2='DG71G8XOKJWL3PXPGWUIIXRQP4H' where id=1; -update noar tt set b0='C8IGFNSQMW7T5XSRPR3J99D22P' where id=2; -update noar ti set b0='C8IGFNSQMW7T5XSRPR3J99D22P' where id=2; -update noar tt set b1='PSB6Q2NC' where id=2; -update noar ti set b1='PSB6Q2NC' where id=2; -update noar tt set b2='RG0K57VG0HQUOUD0' where id=2; -update noar ti set b2='RG0K57VG0HQUOUD0' where id=2; -update noar tt set b0='VFXLJ1AM44AG1UHGDRYDU3GRG7KON4ZF' where id=3; -update noar ti set b0='VFXLJ1AM44AG1UHGDRYDU3GRG7KON4ZF' where id=3; -update noar tt set b1='ELHQO7Q7ZSIH7TB52VZZVY9' where id=3; -update noar ti set b1='ELHQO7Q7ZSIH7TB52VZZVY9' where id=3; -update noar tt set b2='72ST27NWEE6HBXYW051' where id=3; -update noar ti set b2='72ST27NWEE6HBXYW051' where id=3; -update noar tt set b0='XB' where id=4; -update noar ti set b0='XB' where id=4; -update noar tt set b1='59LZB2HU5IE2F5' where id=4; -update noar ti set b1='59LZB2HU5IE2F5' where id=4; -update noar tt set b2='M1VLCBAGLK6H1HXW' where id=4; -update noar ti set b2='M1VLCBAGLK6H1HXW' where id=4; -update noar tt set b0='VRJPWTGN' where id=5; -update noar ti set b0='VRJPWTGN' where id=5; -update noar tt set b1='QI8U81BF4LPXPIZYKK' where id=5; -update noar ti set b1='QI8U81BF4LPXPIZYKK' where id=5; -update noar tt set b2='82CDXLP59L5CKGP9BVO22B3J0GB0ZW' where id=5; -update noar ti set b2='82CDXLP59L5CKGP9BVO22B3J0GB0ZW' where id=5; -update noar tt set b0='02OYPKBNKR7E0Z1ZPBZDZ' where id=6; -update noar ti set b0='02OYPKBNKR7E0Z1ZPBZDZ' where id=6; -update noar tt set b1='9Z3WM5VSE' where id=6; -update noar ti set b1='9Z3WM5VSE' where id=6; -update noar tt set b2='63ZIB046VLTD4O5VPKX' where id=6; -update noar ti set b2='63ZIB046VLTD4O5VPKX' where id=6; -update noar tt set b0='MG5HS2' where id=7; -update noar ti set b0='MG5HS2' where id=7; -update noar tt set b1='5LIXBE4DGTF84UI7WRN8WB48LG94C' where id=7; -update noar ti set b1='5LIXBE4DGTF84UI7WRN8WB48LG94C' where id=7; -update noar tt set b2='X3HA80ZMJA6YR83XKMGGRIKIPG' where id=7; -update noar ti set b2='X3HA80ZMJA6YR83XKMGGRIKIPG' where id=7; -update noar tt set b0='KPWLLJG6B8L9VV' where id=8; -update noar ti set b0='KPWLLJG6B8L9VV' where id=8; -update noar tt set b1='0Z1AU57IVCBBFGX0ZBO' where id=8; -update noar ti set b1='0Z1AU57IVCBBFGX0ZBO' where id=8; -update noar tt set b2='YNCNTIX7KLQXD1' where id=8; -update noar ti set b2='YNCNTIX7KLQXD1' where id=8; -update noar tt set b0='U4QFAL1Y64SK2OJ0MH0NF' where id=9; -update noar ti set b0='U4QFAL1Y64SK2OJ0MH0NF' where id=9; -update noar tt set b1='IKS12Y0VM2' where id=9; -update noar ti set b1='IKS12Y0VM2' where id=9; -update noar tt set b2='1H6QA' where id=9; -update noar ti set b2='1H6QA' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 text null, -b1 mediumblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='X0S5ABI3AUYI83844TSV30978RGAXM' where id=1; -update noar ti set b0='X0S5ABI3AUYI83844TSV30978RGAXM' where id=1; -update noar tt set b1='YE8F7WZ2YPR4PUL2Q32SL5IA8' where id=1; -update noar ti set b1='YE8F7WZ2YPR4PUL2Q32SL5IA8' where id=1; -update noar tt set b2='NMP3QFUB3LZKUFS' where id=1; -update noar ti set b2='NMP3QFUB3LZKUFS' where id=1; -update noar tt set b0='HM48YMB8GUD7MHTFPZTB' where id=2; -update noar ti set b0='HM48YMB8GUD7MHTFPZTB' where id=2; -update noar tt set b1='KWBDN6VO7TRXXSNUS05IWZA850FS' where id=2; -update noar ti set b1='KWBDN6VO7TRXXSNUS05IWZA850FS' where id=2; -update noar tt set b2='1KH9YBYVOOST1712HSE0C96D4RJ6JM' where id=2; -update noar ti set b2='1KH9YBYVOOST1712HSE0C96D4RJ6JM' where id=2; -update noar tt set b0='WMG2UWPRYDO' where id=3; -update noar ti set b0='WMG2UWPRYDO' where id=3; -update noar tt set b1='T1IW3XTE281R5IGAB22VV88A0QB28IFN' where id=3; -update noar ti set b1='T1IW3XTE281R5IGAB22VV88A0QB28IFN' where id=3; -update noar tt set b2='TL0X2V9P577U3' where id=3; -update noar ti set b2='TL0X2V9P577U3' where id=3; -update noar tt set b0='XQU3M65OYG41OLHKRS4L' where id=4; -update noar ti set b0='XQU3M65OYG41OLHKRS4L' where id=4; -update noar tt set b1='HQ6J3M0SGEYYKBKUP52G6D59' where id=4; -update noar ti set b1='HQ6J3M0SGEYYKBKUP52G6D59' where id=4; -update noar tt set b2='26P8LE1L36' where id=4; -update noar ti set b2='26P8LE1L36' where id=4; -update noar tt set b0='YM77UE0' where id=5; -update noar ti set b0='YM77UE0' where id=5; -update noar tt set b1='Q0ALCATADV3XED' where id=5; -update noar ti set b1='Q0ALCATADV3XED' where id=5; -update noar tt set b2='HA9S7Y8TJJQ95S' where id=5; -update noar ti set b2='HA9S7Y8TJJQ95S' where id=5; -update noar tt set b0='UUD' where id=6; -update noar ti set b0='UUD' where id=6; -update noar tt set b1='IO3FHBCQ4CGWW' where id=6; -update noar ti set b1='IO3FHBCQ4CGWW' where id=6; -update noar tt set b2='J8CK17GJ8FOJ' where id=6; -update noar ti set b2='J8CK17GJ8FOJ' where id=6; -update noar tt set b0='6JDL18UKAH7TXORDN40Q' where id=7; -update noar ti set b0='6JDL18UKAH7TXORDN40Q' where id=7; -update noar tt set b1='87FZAU27' where id=7; -update noar ti set b1='87FZAU27' where id=7; -update noar tt set b2='WWQ2OS784LL8OGJTLN2QSBKZXCVB3A' where id=7; -update noar ti set b2='WWQ2OS784LL8OGJTLN2QSBKZXCVB3A' where id=7; -update noar tt set b0='UQYXETVAH8CZVRIUI1S' where id=8; -update noar ti set b0='UQYXETVAH8CZVRIUI1S' where id=8; -update noar tt set b1='S88GEIRLHWWG0Q' where id=8; -update noar ti set b1='S88GEIRLHWWG0Q' where id=8; -update noar tt set b2='1PLMDYYZJ2' where id=8; -update noar ti set b2='1PLMDYYZJ2' where id=8; -update noar tt set b0='B50CSRX8IIUOF7PL65MVCULH0WTRJ60' where id=9; -update noar ti set b0='B50CSRX8IIUOF7PL65MVCULH0WTRJ60' where id=9; -update noar tt set b1='SJD3MPLDIGV6IQE8' where id=9; -update noar ti set b1='SJD3MPLDIGV6IQE8' where id=9; -update noar tt set b2='CI2V0IC6FY0I4' where id=9; -update noar ti set b2='CI2V0IC6FY0I4' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 text not null, -b1 mediumblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='CJTE' where id=1; -update noar ti set b0='CJTE' where id=1; -update noar tt set b1='PYQ0MDVWL9EEJWAX9HC82' where id=1; -update noar ti set b1='PYQ0MDVWL9EEJWAX9HC82' where id=1; -update noar tt set b2='PPZZLUOUNT8C3JP44' where id=1; -update noar ti set b2='PPZZLUOUNT8C3JP44' where id=1; -update noar tt set b0='A4ZF0SL49YRGNKR4B34836CHQUC6PD0' where id=2; -update noar ti set b0='A4ZF0SL49YRGNKR4B34836CHQUC6PD0' where id=2; -update noar tt set b1='TP5W92IJKPCMCJNI6CQLW' where id=2; -update noar ti set b1='TP5W92IJKPCMCJNI6CQLW' where id=2; -update noar tt set b2='CS5UF' where id=2; -update noar ti set b2='CS5UF' where id=2; -update noar tt set b0='JZGUSQTIA5Z15LO2NMYPJ' where id=3; -update noar ti set b0='JZGUSQTIA5Z15LO2NMYPJ' where id=3; -update noar tt set b1='M8T' where id=3; -update noar ti set b1='M8T' where id=3; -update noar tt set b2='B8E4NGYG9LXNKSUO6S' where id=3; -update noar ti set b2='B8E4NGYG9LXNKSUO6S' where id=3; -update noar tt set b0='9YON3RE0W896TOFMDSF4OFCR3QEH' where id=4; -update noar ti set b0='9YON3RE0W896TOFMDSF4OFCR3QEH' where id=4; -update noar tt set b1='QACCCZ91KH0U1G21I4TCYQ4Y5' where id=4; -update noar ti set b1='QACCCZ91KH0U1G21I4TCYQ4Y5' where id=4; -update noar tt set b2='YPQN1PD04GSNH' where id=4; -update noar ti set b2='YPQN1PD04GSNH' where id=4; -update noar tt set b0='HFOVI3S23LZMOQ84N3L3U4CEZNTJ' where id=5; -update noar ti set b0='HFOVI3S23LZMOQ84N3L3U4CEZNTJ' where id=5; -update noar tt set b1='QG5NI275LUGTJ10C6U' where id=5; -update noar ti set b1='QG5NI275LUGTJ10C6U' where id=5; -update noar tt set b2='IE5USMKZNBCMKQHBZ10EWQRFIZX2S1' where id=5; -update noar ti set b2='IE5USMKZNBCMKQHBZ10EWQRFIZX2S1' where id=5; -update noar tt set b0='I6EVI' where id=6; -update noar ti set b0='I6EVI' where id=6; -update noar tt set b1='YMSRQSIS9R6AIX9M0QV' where id=6; -update noar ti set b1='YMSRQSIS9R6AIX9M0QV' where id=6; -update noar tt set b2='OGF' where id=6; -update noar ti set b2='OGF' where id=6; -update noar tt set b0='KP5VR5MK2WKAFW6YM7OJRU' where id=7; -update noar ti set b0='KP5VR5MK2WKAFW6YM7OJRU' where id=7; -update noar tt set b1='AX49E3OSHZ1DXX8FBODUPEQ' where id=7; -update noar ti set b1='AX49E3OSHZ1DXX8FBODUPEQ' where id=7; -update noar tt set b2='KHXKNFBOQ8M3Y5HSZJ' where id=7; -update noar ti set b2='KHXKNFBOQ8M3Y5HSZJ' where id=7; -update noar tt set b0='6IDJH8EZVIOFDTTPNOTGH9H1YKP7SVW7' where id=8; -update noar ti set b0='6IDJH8EZVIOFDTTPNOTGH9H1YKP7SVW7' where id=8; -update noar tt set b1='870PQEAXH6XU' where id=8; -update noar ti set b1='870PQEAXH6XU' where id=8; -update noar tt set b2='K3N4W0JN' where id=8; -update noar ti set b2='K3N4W0JN' where id=8; -update noar tt set b0='UA4OBVP' where id=9; -update noar ti set b0='UA4OBVP' where id=9; -update noar tt set b1='JFOUKEJFILNPC' where id=9; -update noar ti set b1='JFOUKEJFILNPC' where id=9; -update noar tt set b2='3J7KDIVWZEI1LTDRLQZH' where id=9; -update noar ti set b2='3J7KDIVWZEI1LTDRLQZH' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 text null, -b1 mediumblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='BF8FMI5OV3MNRME81W0TRC7XTQ7SBCBA' where id=1; -update noar ti set b0='BF8FMI5OV3MNRME81W0TRC7XTQ7SBCBA' where id=1; -update noar tt set b1='0S9BFER54JXZV' where id=1; -update noar ti set b1='0S9BFER54JXZV' where id=1; -update noar tt set b2='8H1M7N20Y8P3H80UMZ9M' where id=1; -update noar ti set b2='8H1M7N20Y8P3H80UMZ9M' where id=1; -update noar tt set b0='GHYTFR6FP6S0WJUNGE' where id=2; -update noar ti set b0='GHYTFR6FP6S0WJUNGE' where id=2; -update noar tt set b1='CCNSS' where id=2; -update noar ti set b1='CCNSS' where id=2; -update noar tt set b2='8O8TZ1RAZMM41CM' where id=2; -update noar ti set b2='8O8TZ1RAZMM41CM' where id=2; -update noar tt set b0='C2ESVEREHWQCQTOYGN6' where id=3; -update noar ti set b0='C2ESVEREHWQCQTOYGN6' where id=3; -update noar tt set b1='SANT9F' where id=3; -update noar ti set b1='SANT9F' where id=3; -update noar tt set b2='RGQYTEC8LSXXDHB3ABBP4U4C66ENGL1' where id=3; -update noar ti set b2='RGQYTEC8LSXXDHB3ABBP4U4C66ENGL1' where id=3; -update noar tt set b0='0VDZUGXVXAN4HW4A9ITEK2E209' where id=4; -update noar ti set b0='0VDZUGXVXAN4HW4A9ITEK2E209' where id=4; -update noar tt set b1='VEOSK9FXWFPW6U1KUF' where id=4; -update noar ti set b1='VEOSK9FXWFPW6U1KUF' where id=4; -update noar tt set b2='2JEOMXXOWTVU58XLY9NKA6VP' where id=4; -update noar ti set b2='2JEOMXXOWTVU58XLY9NKA6VP' where id=4; -update noar tt set b0='AAMQLFWQPZEC7XF77IC49B3YIFB' where id=5; -update noar ti set b0='AAMQLFWQPZEC7XF77IC49B3YIFB' where id=5; -update noar tt set b1='FIX' where id=5; -update noar ti set b1='FIX' where id=5; -update noar tt set b2='RAA95L9XGL7HY1SPB4PTQB97JD36N0' where id=5; -update noar ti set b2='RAA95L9XGL7HY1SPB4PTQB97JD36N0' where id=5; -update noar tt set b0='NIN0ME935VFQHL79UHMHVUMIX6OV4' where id=6; -update noar ti set b0='NIN0ME935VFQHL79UHMHVUMIX6OV4' where id=6; -update noar tt set b1='XFHGM' where id=6; -update noar ti set b1='XFHGM' where id=6; -update noar tt set b2='7NY2O3YR' where id=6; -update noar ti set b2='7NY2O3YR' where id=6; -update noar tt set b0='4TDJXIXKTGZTVP7FD9O6QWB' where id=7; -update noar ti set b0='4TDJXIXKTGZTVP7FD9O6QWB' where id=7; -update noar tt set b1='4JV4UC8Z2MMM0B4T9E7D6MC3NPYQXL8' where id=7; -update noar ti set b1='4JV4UC8Z2MMM0B4T9E7D6MC3NPYQXL8' where id=7; -update noar tt set b2='WEF5RKFXNTMBIQ06GJE5DQUV' where id=7; -update noar ti set b2='WEF5RKFXNTMBIQ06GJE5DQUV' where id=7; -update noar tt set b0='M8F9BRE7FG02AE2XMJKI4SGIMI65S' where id=8; -update noar ti set b0='M8F9BRE7FG02AE2XMJKI4SGIMI65S' where id=8; -update noar tt set b1='GK5WRIKSK4XUH2VRJVUFW' where id=8; -update noar ti set b1='GK5WRIKSK4XUH2VRJVUFW' where id=8; -update noar tt set b2='JTI37YQD0I2J' where id=8; -update noar ti set b2='JTI37YQD0I2J' where id=8; -update noar tt set b0='DQD9M7CWCBGS7NT1ZMEKF' where id=9; -update noar ti set b0='DQD9M7CWCBGS7NT1ZMEKF' where id=9; -update noar tt set b1='PBA1AEQJJCPGDV5E4' where id=9; -update noar ti set b1='PBA1AEQJJCPGDV5E4' where id=9; -update noar tt set b2='YZH1ZEZROAUD' where id=9; -update noar ti set b2='YZH1ZEZROAUD' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 text not null, -b1 mediumblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='2WI8IZ9' where id=1; -update noar ti set b0='2WI8IZ9' where id=1; -update noar tt set b1='VIVEZ0Y3JU9E8OH4C88TUS0LZIVR' where id=1; -update noar ti set b1='VIVEZ0Y3JU9E8OH4C88TUS0LZIVR' where id=1; -update noar tt set b2='8CFENFZ7FR5UOSZ7CNHTPX5UFJ1AC5I' where id=1; -update noar ti set b2='8CFENFZ7FR5UOSZ7CNHTPX5UFJ1AC5I' where id=1; -update noar tt set b0='X8LZ6OL0VQ6C' where id=2; -update noar ti set b0='X8LZ6OL0VQ6C' where id=2; -update noar tt set b1='XNIIY2XNSQTV8I8FBONZIAX' where id=2; -update noar ti set b1='XNIIY2XNSQTV8I8FBONZIAX' where id=2; -update noar tt set b2='S4J8EKR2SJXDT1K7VK4K2CAAB' where id=2; -update noar ti set b2='S4J8EKR2SJXDT1K7VK4K2CAAB' where id=2; -update noar tt set b0='W9PTO2QCQ8R' where id=3; -update noar ti set b0='W9PTO2QCQ8R' where id=3; -update noar tt set b1='AEDBOLJJ' where id=3; -update noar ti set b1='AEDBOLJJ' where id=3; -update noar tt set b2='8D8PFX89G0EW4R0R3XJG9CC1ASR' where id=3; -update noar ti set b2='8D8PFX89G0EW4R0R3XJG9CC1ASR' where id=3; -update noar tt set b0='LPRIH2I' where id=4; -update noar ti set b0='LPRIH2I' where id=4; -update noar tt set b1='IH12BTA0NKKFEQNQV4XMM' where id=4; -update noar ti set b1='IH12BTA0NKKFEQNQV4XMM' where id=4; -update noar tt set b2='YHOWHQSF' where id=4; -update noar ti set b2='YHOWHQSF' where id=4; -update noar tt set b0='HU2B02V9JZI7HR2TZKHD5ZVSCTKSQCL' where id=5; -update noar ti set b0='HU2B02V9JZI7HR2TZKHD5ZVSCTKSQCL' where id=5; -update noar tt set b1='V3T8UDWF95ZD3WSQZY6ZSZ5' where id=5; -update noar ti set b1='V3T8UDWF95ZD3WSQZY6ZSZ5' where id=5; -update noar tt set b2='F3HY8QP040TBJWRCCQQRTNVL' where id=5; -update noar ti set b2='F3HY8QP040TBJWRCCQQRTNVL' where id=5; -update noar tt set b0='6VK' where id=6; -update noar ti set b0='6VK' where id=6; -update noar tt set b1='DMYKRP3A31UU8LRZ5FE3RF8BFRX' where id=6; -update noar ti set b1='DMYKRP3A31UU8LRZ5FE3RF8BFRX' where id=6; -update noar tt set b2='RXZEP8UDXX4QAEHN0DHM6FUMMRUQN2' where id=6; -update noar ti set b2='RXZEP8UDXX4QAEHN0DHM6FUMMRUQN2' where id=6; -update noar tt set b0='MFEGY0' where id=7; -update noar ti set b0='MFEGY0' where id=7; -update noar tt set b1='AKOPUMQQDOC0V0T28NS5MY9YT5DRKSX0' where id=7; -update noar ti set b1='AKOPUMQQDOC0V0T28NS5MY9YT5DRKSX0' where id=7; -update noar tt set b2='2VYB4WHU77LZQ1P' where id=7; -update noar ti set b2='2VYB4WHU77LZQ1P' where id=7; -update noar tt set b0='H9SJQCBGJ6D7' where id=8; -update noar ti set b0='H9SJQCBGJ6D7' where id=8; -update noar tt set b1='1785LTCHMHA2Q' where id=8; -update noar ti set b1='1785LTCHMHA2Q' where id=8; -update noar tt set b2='JEJJ' where id=8; -update noar ti set b2='JEJJ' where id=8; -update noar tt set b0='QB7BP2WL' where id=9; -update noar ti set b0='QB7BP2WL' where id=9; -update noar tt set b1='JX' where id=9; -update noar ti set b1='JX' where id=9; -update noar tt set b2='XY87SOQ4NONQ3X7' where id=9; -update noar ti set b2='XY87SOQ4NONQ3X7' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 text null, -b1 mediumblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='NS7MMJRW5IIECP3GD1J22IKZOB' where id=1; -update noar ti set b0='NS7MMJRW5IIECP3GD1J22IKZOB' where id=1; -update noar tt set b1='N4J1BJJR7X34JAL970LXJYFYHGR' where id=1; -update noar ti set b1='N4J1BJJR7X34JAL970LXJYFYHGR' where id=1; -update noar tt set b2='AAGYHPJ3E0FQTZO' where id=1; -update noar ti set b2='AAGYHPJ3E0FQTZO' where id=1; -update noar tt set b0='UX3O5GNNSPL6TWHX85' where id=2; -update noar ti set b0='UX3O5GNNSPL6TWHX85' where id=2; -update noar tt set b1='B8XLIKSYCBB9BLG8FYV20N1WKEG6HWN' where id=2; -update noar ti set b1='B8XLIKSYCBB9BLG8FYV20N1WKEG6HWN' where id=2; -update noar tt set b2='BX3WLY05L16NKO2YU3K8' where id=2; -update noar ti set b2='BX3WLY05L16NKO2YU3K8' where id=2; -update noar tt set b0='VSZIM8W2A1' where id=3; -update noar ti set b0='VSZIM8W2A1' where id=3; -update noar tt set b1='FK37F7FG9OHDZTDW' where id=3; -update noar ti set b1='FK37F7FG9OHDZTDW' where id=3; -update noar tt set b2='NW2XMFHPL4PX1LOKVQ00V5JZNOTU' where id=3; -update noar ti set b2='NW2XMFHPL4PX1LOKVQ00V5JZNOTU' where id=3; -update noar tt set b0='YYWG58MPQKES63' where id=4; -update noar ti set b0='YYWG58MPQKES63' where id=4; -update noar tt set b1='W4CQ9KMF' where id=4; -update noar ti set b1='W4CQ9KMF' where id=4; -update noar tt set b2='EQDCYJ7AJ15D9' where id=4; -update noar ti set b2='EQDCYJ7AJ15D9' where id=4; -update noar tt set b0='K' where id=5; -update noar ti set b0='K' where id=5; -update noar tt set b1='I3ITBINECVO' where id=5; -update noar ti set b1='I3ITBINECVO' where id=5; -update noar tt set b2='Y006C4KR03U9' where id=5; -update noar ti set b2='Y006C4KR03U9' where id=5; -update noar tt set b0='DAQI8IUSWQ' where id=6; -update noar ti set b0='DAQI8IUSWQ' where id=6; -update noar tt set b1='Q4ERIJ' where id=6; -update noar ti set b1='Q4ERIJ' where id=6; -update noar tt set b2='69ALED3PKX2Z2UWZBE0WFZ' where id=6; -update noar ti set b2='69ALED3PKX2Z2UWZBE0WFZ' where id=6; -update noar tt set b0='5UUYI36GIYQCQJT5A6FGD62R9OD71ASC' where id=7; -update noar ti set b0='5UUYI36GIYQCQJT5A6FGD62R9OD71ASC' where id=7; -update noar tt set b1='MLM1KTXNMJNQ4WORGUP3J0DL0' where id=7; -update noar ti set b1='MLM1KTXNMJNQ4WORGUP3J0DL0' where id=7; -update noar tt set b2='XBC8HFTAQ7LF5O2YP6E' where id=7; -update noar ti set b2='XBC8HFTAQ7LF5O2YP6E' where id=7; -update noar tt set b0='KBKZN58GN4Q' where id=8; -update noar ti set b0='KBKZN58GN4Q' where id=8; -update noar tt set b1='Z79TSD2SZ29DJ' where id=8; -update noar ti set b1='Z79TSD2SZ29DJ' where id=8; -update noar tt set b2='Q1IKFP' where id=8; -update noar ti set b2='Q1IKFP' where id=8; -update noar tt set b0='0A1YV' where id=9; -update noar ti set b0='0A1YV' where id=9; -update noar tt set b1='VA8N2UFZPHUOSXDY40W2TJ3S' where id=9; -update noar ti set b1='VA8N2UFZPHUOSXDY40W2TJ3S' where id=9; -update noar tt set b2='JUPWBP15V' where id=9; -update noar ti set b2='JUPWBP15V' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 text not null, -b1 mediumblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='B42YXTJ11558L3SS2A755' where id=1; -update noar ti set b0='B42YXTJ11558L3SS2A755' where id=1; -update noar tt set b1='6URJO63N2UCB8SV' where id=1; -update noar ti set b1='6URJO63N2UCB8SV' where id=1; -update noar tt set b2='7ZXAW9LETGZO323WWWL' where id=1; -update noar ti set b2='7ZXAW9LETGZO323WWWL' where id=1; -update noar tt set b0='9C61BPXPEER0VS2ZM51IRC4TVY83RJ8' where id=2; -update noar ti set b0='9C61BPXPEER0VS2ZM51IRC4TVY83RJ8' where id=2; -update noar tt set b1='DSZYS96XN' where id=2; -update noar ti set b1='DSZYS96XN' where id=2; -update noar tt set b2='5EO8S394DJRP' where id=2; -update noar ti set b2='5EO8S394DJRP' where id=2; -update noar tt set b0='12V4R9NGD682JLSLFY' where id=3; -update noar ti set b0='12V4R9NGD682JLSLFY' where id=3; -update noar tt set b1='IAO7RKWYU95SIF8C3' where id=3; -update noar ti set b1='IAO7RKWYU95SIF8C3' where id=3; -update noar tt set b2='SEBEDH6FAHGS6WIJTYAEUXSUQEPOR' where id=3; -update noar ti set b2='SEBEDH6FAHGS6WIJTYAEUXSUQEPOR' where id=3; -update noar tt set b0='6S04A0WC4P8TZN3T1EN9J4M' where id=4; -update noar ti set b0='6S04A0WC4P8TZN3T1EN9J4M' where id=4; -update noar tt set b1='EQ16VY3H89ZC4ADZFN6DSSB2FC9TK' where id=4; -update noar ti set b1='EQ16VY3H89ZC4ADZFN6DSSB2FC9TK' where id=4; -update noar tt set b2='3MSE9TBIVEXULDHAZZDBPYJM0QO' where id=4; -update noar ti set b2='3MSE9TBIVEXULDHAZZDBPYJM0QO' where id=4; -update noar tt set b0='1SDS1DXSA5' where id=5; -update noar ti set b0='1SDS1DXSA5' where id=5; -update noar tt set b1='DYU26KP9DJC0FMCOI3' where id=5; -update noar ti set b1='DYU26KP9DJC0FMCOI3' where id=5; -update noar tt set b2='U51619EWS8X5ARJSCQQZSOUZ377IR7L' where id=5; -update noar ti set b2='U51619EWS8X5ARJSCQQZSOUZ377IR7L' where id=5; -update noar tt set b0='FB6T8RZMCACBCEHI22X' where id=6; -update noar ti set b0='FB6T8RZMCACBCEHI22X' where id=6; -update noar tt set b1='ZI4' where id=6; -update noar ti set b1='ZI4' where id=6; -update noar tt set b2='6UMZPCXPEFLDM2RN5OFOQ' where id=6; -update noar ti set b2='6UMZPCXPEFLDM2RN5OFOQ' where id=6; -update noar tt set b0='2SOF3TELW33KHF63BL' where id=7; -update noar ti set b0='2SOF3TELW33KHF63BL' where id=7; -update noar tt set b1='7U' where id=7; -update noar ti set b1='7U' where id=7; -update noar tt set b2='1EYMATWT9BW6Z7X5WE3' where id=7; -update noar ti set b2='1EYMATWT9BW6Z7X5WE3' where id=7; -update noar tt set b0='7Z443FLV86ZH2501EOKGXXZ' where id=8; -update noar ti set b0='7Z443FLV86ZH2501EOKGXXZ' where id=8; -update noar tt set b1='PLV57' where id=8; -update noar ti set b1='PLV57' where id=8; -update noar tt set b2='KWB04L' where id=8; -update noar ti set b2='KWB04L' where id=8; -update noar tt set b0='EAFY9MI42W52M' where id=9; -update noar ti set b0='EAFY9MI42W52M' where id=9; -update noar tt set b1='1Y1C5C1U0MNW9XV3FKZ1Q23' where id=9; -update noar ti set b1='1Y1C5C1U0MNW9XV3FKZ1Q23' where id=9; -update noar tt set b2='2C8XFM53DUH' where id=9; -update noar ti set b2='2C8XFM53DUH' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 text null, -b1 mediumblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='Q1ZTCN9' where id=1; -update noar ti set b0='Q1ZTCN9' where id=1; -update noar tt set b1='VUIEEFQRXCE8689D87D8SLJ5' where id=1; -update noar ti set b1='VUIEEFQRXCE8689D87D8SLJ5' where id=1; -update noar tt set b2='Q4MIDSUO6EY337N1B3O1' where id=1; -update noar ti set b2='Q4MIDSUO6EY337N1B3O1' where id=1; -update noar tt set b0='Y1CZXZIJJBSJ79X' where id=2; -update noar ti set b0='Y1CZXZIJJBSJ79X' where id=2; -update noar tt set b1='PYOBZ2F212PX6O0M2E' where id=2; -update noar ti set b1='PYOBZ2F212PX6O0M2E' where id=2; -update noar tt set b2='2AAZYS99XL83EYF9Z4' where id=2; -update noar ti set b2='2AAZYS99XL83EYF9Z4' where id=2; -update noar tt set b0='HMDFCWFA8DRTJRZC8MA3' where id=3; -update noar ti set b0='HMDFCWFA8DRTJRZC8MA3' where id=3; -update noar tt set b1='267XDLG5AHJQ6HFC0INFC0HYWU1A2CRU' where id=3; -update noar ti set b1='267XDLG5AHJQ6HFC0INFC0HYWU1A2CRU' where id=3; -update noar tt set b2='J3AE3V7TPOVCDG37T6NB' where id=3; -update noar ti set b2='J3AE3V7TPOVCDG37T6NB' where id=3; -update noar tt set b0='FO20IT04ORHJMM12COG088YT' where id=4; -update noar ti set b0='FO20IT04ORHJMM12COG088YT' where id=4; -update noar tt set b1='6SNE0H24TV2CTJDG' where id=4; -update noar ti set b1='6SNE0H24TV2CTJDG' where id=4; -update noar tt set b2='ZIS2ET5324LHUGQ3VDE8G' where id=4; -update noar ti set b2='ZIS2ET5324LHUGQ3VDE8G' where id=4; -update noar tt set b0='V5N6AZLRRE3TV' where id=5; -update noar ti set b0='V5N6AZLRRE3TV' where id=5; -update noar tt set b1='EELN' where id=5; -update noar ti set b1='EELN' where id=5; -update noar tt set b2='67HZJK73HWS6KSYZK96' where id=5; -update noar ti set b2='67HZJK73HWS6KSYZK96' where id=5; -update noar tt set b0='UX4ANK1BE69TVFB13H9F1AEZRX5' where id=6; -update noar ti set b0='UX4ANK1BE69TVFB13H9F1AEZRX5' where id=6; -update noar tt set b1='OH2I1R8CL4EG94SO2LKNJUDVTFY' where id=6; -update noar ti set b1='OH2I1R8CL4EG94SO2LKNJUDVTFY' where id=6; -update noar tt set b2='0Q2EGS9T9C6FZ973KPBN56GVZK' where id=6; -update noar ti set b2='0Q2EGS9T9C6FZ973KPBN56GVZK' where id=6; -update noar tt set b0='JB53U7R6' where id=7; -update noar ti set b0='JB53U7R6' where id=7; -update noar tt set b1='T77JK24HG6L5GHRJU' where id=7; -update noar ti set b1='T77JK24HG6L5GHRJU' where id=7; -update noar tt set b2='0YFM97NAKHEB22G4T13857O58WHOCI' where id=7; -update noar ti set b2='0YFM97NAKHEB22G4T13857O58WHOCI' where id=7; -update noar tt set b0='4SECL86MXMMEP7KA12TP7' where id=8; -update noar ti set b0='4SECL86MXMMEP7KA12TP7' where id=8; -update noar tt set b1='AY6CPI4POOCV2H399OCF6V' where id=8; -update noar ti set b1='AY6CPI4POOCV2H399OCF6V' where id=8; -update noar tt set b2='TR' where id=8; -update noar ti set b2='TR' where id=8; -update noar tt set b0='MCU578SYBED9RSWNCRO4264' where id=9; -update noar ti set b0='MCU578SYBED9RSWNCRO4264' where id=9; -update noar tt set b1='9V0QU7VILY7GVPVKQFYJ8J4144RV2D' where id=9; -update noar ti set b1='9V0QU7VILY7GVPVKQFYJ8J4144RV2D' where id=9; -update noar tt set b2='6E9Q9M8Q8WQAFR0W1KQZF9D4L8' where id=9; -update noar ti set b2='6E9Q9M8Q8WQAFR0W1KQZF9D4L8' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 text not null, -b1 mediumblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='PTLIFNY16MRL2495OL31JBA6EUFZQ' where id=1; -update noar ti set b0='PTLIFNY16MRL2495OL31JBA6EUFZQ' where id=1; -update noar tt set b1='3ICDB1LDOJMWSHUKC2J' where id=1; -update noar ti set b1='3ICDB1LDOJMWSHUKC2J' where id=1; -update noar tt set b2='FUTAZ' where id=1; -update noar ti set b2='FUTAZ' where id=1; -update noar tt set b0='RW4661J70687XJB7NU50WY56' where id=2; -update noar ti set b0='RW4661J70687XJB7NU50WY56' where id=2; -update noar tt set b1='KNAFYUXHDXJ750YHU1' where id=2; -update noar ti set b1='KNAFYUXHDXJ750YHU1' where id=2; -update noar tt set b2='HHXFF9P9JSZ3VO' where id=2; -update noar ti set b2='HHXFF9P9JSZ3VO' where id=2; -update noar tt set b0='LCW646' where id=3; -update noar ti set b0='LCW646' where id=3; -update noar tt set b1='4CDWTYITSHA9Z' where id=3; -update noar ti set b1='4CDWTYITSHA9Z' where id=3; -update noar tt set b2='237R8Y' where id=3; -update noar ti set b2='237R8Y' where id=3; -update noar tt set b0='QSYCQ' where id=4; -update noar ti set b0='QSYCQ' where id=4; -update noar tt set b1='H9E9KGGOBFVG' where id=4; -update noar ti set b1='H9E9KGGOBFVG' where id=4; -update noar tt set b2='AF01ZHN0GRUFD4CNNJ1431' where id=4; -update noar ti set b2='AF01ZHN0GRUFD4CNNJ1431' where id=4; -update noar tt set b0='5KI19YN7HZ32ZR259' where id=5; -update noar ti set b0='5KI19YN7HZ32ZR259' where id=5; -update noar tt set b1='ESYEW3U9G' where id=5; -update noar ti set b1='ESYEW3U9G' where id=5; -update noar tt set b2='41RLKV' where id=5; -update noar ti set b2='41RLKV' where id=5; -update noar tt set b0='B8EOH268AMN' where id=6; -update noar ti set b0='B8EOH268AMN' where id=6; -update noar tt set b1='QF2RQF8Q6704HRSEYNQJH441YFNF0' where id=6; -update noar ti set b1='QF2RQF8Q6704HRSEYNQJH441YFNF0' where id=6; -update noar tt set b2='CI8NO7V' where id=6; -update noar ti set b2='CI8NO7V' where id=6; -update noar tt set b0='8JUE0UOR0ECQ90J6ZTE097CJXPA' where id=7; -update noar ti set b0='8JUE0UOR0ECQ90J6ZTE097CJXPA' where id=7; -update noar tt set b1='FG6FFBVYM9A' where id=7; -update noar ti set b1='FG6FFBVYM9A' where id=7; -update noar tt set b2='V1ZZPJ73LZC0W76H9XF' where id=7; -update noar ti set b2='V1ZZPJ73LZC0W76H9XF' where id=7; -update noar tt set b0='G9CGK3PV9FABT7VG5NN1219LL' where id=8; -update noar ti set b0='G9CGK3PV9FABT7VG5NN1219LL' where id=8; -update noar tt set b1='Q3ZH5Q8J2ORJZ' where id=8; -update noar ti set b1='Q3ZH5Q8J2ORJZ' where id=8; -update noar tt set b2='FVQI3MYISE9ESOYSB' where id=8; -update noar ti set b2='FVQI3MYISE9ESOYSB' where id=8; -update noar tt set b0='4HHTTK' where id=9; -update noar ti set b0='4HHTTK' where id=9; -update noar tt set b1='5VT67S0S7YC5CHQ9VJRE' where id=9; -update noar ti set b1='5VT67S0S7YC5CHQ9VJRE' where id=9; -update noar tt set b2='5KWG061WWAGNL521A' where id=9; -update noar ti set b2='5KWG061WWAGNL521A' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 text null, -b1 mediumblob null, -b2 text null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='F1KPE' where id=1; -update noar ti set b0='F1KPE' where id=1; -update noar tt set b1='UZKD4TK45MYMKZPQ9F6I' where id=1; -update noar ti set b1='UZKD4TK45MYMKZPQ9F6I' where id=1; -update noar tt set b2='IQPWGKQME4SRRB4NQRI45ZTZJE' where id=1; -update noar ti set b2='IQPWGKQME4SRRB4NQRI45ZTZJE' where id=1; -update noar tt set b0='3YXNF7LEJ9ULZ2A' where id=2; -update noar ti set b0='3YXNF7LEJ9ULZ2A' where id=2; -update noar tt set b1='0O4I29IFUTX5GOEL' where id=2; -update noar ti set b1='0O4I29IFUTX5GOEL' where id=2; -update noar tt set b2='K60S8RLS8C86VU96Y9XAC05O55T' where id=2; -update noar ti set b2='K60S8RLS8C86VU96Y9XAC05O55T' where id=2; -update noar tt set b0='86TSE9D6M2' where id=3; -update noar ti set b0='86TSE9D6M2' where id=3; -update noar tt set b1='QY8XQICM17' where id=3; -update noar ti set b1='QY8XQICM17' where id=3; -update noar tt set b2='S3YIF43WK8LV617A7YY7LZ9J' where id=3; -update noar ti set b2='S3YIF43WK8LV617A7YY7LZ9J' where id=3; -update noar tt set b0='9VWXP37V' where id=4; -update noar ti set b0='9VWXP37V' where id=4; -update noar tt set b1='JX6384SVV3KLY9HMWVE8XQKX892ZZ' where id=4; -update noar ti set b1='JX6384SVV3KLY9HMWVE8XQKX892ZZ' where id=4; -update noar tt set b2='JR6JIHS7ZGPZTML4H9OPFYYW' where id=4; -update noar ti set b2='JR6JIHS7ZGPZTML4H9OPFYYW' where id=4; -update noar tt set b0='9PMJ81BFSRW07WT6UG0ICGWNV2Q1QX5' where id=5; -update noar ti set b0='9PMJ81BFSRW07WT6UG0ICGWNV2Q1QX5' where id=5; -update noar tt set b1='9ACHG9FTHCVYX0ICE4NHW1L' where id=5; -update noar ti set b1='9ACHG9FTHCVYX0ICE4NHW1L' where id=5; -update noar tt set b2='5' where id=5; -update noar ti set b2='5' where id=5; -update noar tt set b0='YF6GZE6QL4BXXXSOK9B1' where id=6; -update noar ti set b0='YF6GZE6QL4BXXXSOK9B1' where id=6; -update noar tt set b1='X8' where id=6; -update noar ti set b1='X8' where id=6; -update noar tt set b2='2I0NDLS8' where id=6; -update noar ti set b2='2I0NDLS8' where id=6; -update noar tt set b0='38CVZ57NIZOWZ7WK6' where id=7; -update noar ti set b0='38CVZ57NIZOWZ7WK6' where id=7; -update noar tt set b1='4AS06GZAUQJ0' where id=7; -update noar ti set b1='4AS06GZAUQJ0' where id=7; -update noar tt set b2='K3TME' where id=7; -update noar ti set b2='K3TME' where id=7; -update noar tt set b0='JP9O7DK2NP7ZEY' where id=8; -update noar ti set b0='JP9O7DK2NP7ZEY' where id=8; -update noar tt set b1='REZUKM5Z4X28OOLKJ2PKDIGGYC2D' where id=8; -update noar ti set b1='REZUKM5Z4X28OOLKJ2PKDIGGYC2D' where id=8; -update noar tt set b2='CNHLKRIFD2Q0M5FVTEOLC09IPDEH' where id=8; -update noar ti set b2='CNHLKRIFD2Q0M5FVTEOLC09IPDEH' where id=8; -update noar tt set b0='TENQM314ZB7PL5XIX' where id=9; -update noar ti set b0='TENQM314ZB7PL5XIX' where id=9; -update noar tt set b1='BKR3OVXX64UUIWWF' where id=9; -update noar ti set b1='BKR3OVXX64UUIWWF' where id=9; -update noar tt set b2='U' where id=9; -update noar ti set b2='U' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 text not null, -b1 mediumblob not null, -b2 text not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='FZLG1JJ6REQTI4C6FIFBIC8NVVSCG4' where id=1; -update noar ti set b0='FZLG1JJ6REQTI4C6FIFBIC8NVVSCG4' where id=1; -update noar tt set b1='E5EYERVZOMPYYHN5XOUBF' where id=1; -update noar ti set b1='E5EYERVZOMPYYHN5XOUBF' where id=1; -update noar tt set b2='QFGWX7ZONIZW17M7QF9KMKLTNAH' where id=1; -update noar ti set b2='QFGWX7ZONIZW17M7QF9KMKLTNAH' where id=1; -update noar tt set b0='QD4H9HIP95Y4' where id=2; -update noar ti set b0='QD4H9HIP95Y4' where id=2; -update noar tt set b1='4TPXNUPI517KMFAA7T8P03MHU' where id=2; -update noar ti set b1='4TPXNUPI517KMFAA7T8P03MHU' where id=2; -update noar tt set b2='9MCF0LPM66GFQU49DV4F' where id=2; -update noar ti set b2='9MCF0LPM66GFQU49DV4F' where id=2; -update noar tt set b0='ODT' where id=3; -update noar ti set b0='ODT' where id=3; -update noar tt set b1='C1D0P0076RHFD9CDVQ9II0L1OF3LL' where id=3; -update noar ti set b1='C1D0P0076RHFD9CDVQ9II0L1OF3LL' where id=3; -update noar tt set b2='JMYFWQWMNCDZYEP4ZNW50F895OW' where id=3; -update noar ti set b2='JMYFWQWMNCDZYEP4ZNW50F895OW' where id=3; -update noar tt set b0='PAIPB3NQN' where id=4; -update noar ti set b0='PAIPB3NQN' where id=4; -update noar tt set b1='EC0NJU5USYIWDBXYZFPQQGKIR8' where id=4; -update noar ti set b1='EC0NJU5USYIWDBXYZFPQQGKIR8' where id=4; -update noar tt set b2='ZAPDPQR0GWVPQ7JOZBYF' where id=4; -update noar ti set b2='ZAPDPQR0GWVPQ7JOZBYF' where id=4; -update noar tt set b0='ZVG0E2G4YSFWXXI48FIOYYQ1JBBSWK' where id=5; -update noar ti set b0='ZVG0E2G4YSFWXXI48FIOYYQ1JBBSWK' where id=5; -update noar tt set b1='E1SM6MHM04' where id=5; -update noar ti set b1='E1SM6MHM04' where id=5; -update noar tt set b2='Q0YZ1WU25RVIF0SHOR8P2OXIN' where id=5; -update noar ti set b2='Q0YZ1WU25RVIF0SHOR8P2OXIN' where id=5; -update noar tt set b0='WFYU' where id=6; -update noar ti set b0='WFYU' where id=6; -update noar tt set b1='WNV76YAIUJN0ICYEXVQUQKXN7U6D' where id=6; -update noar ti set b1='WNV76YAIUJN0ICYEXVQUQKXN7U6D' where id=6; -update noar tt set b2='0R3B34FEFCZ4UN' where id=6; -update noar ti set b2='0R3B34FEFCZ4UN' where id=6; -update noar tt set b0='J2ZGLJJG8IUP7UHK4219VRVB9MM' where id=7; -update noar ti set b0='J2ZGLJJG8IUP7UHK4219VRVB9MM' where id=7; -update noar tt set b1='T623353FCRJGLPU676D8WALK6Z23VVQL' where id=7; -update noar ti set b1='T623353FCRJGLPU676D8WALK6Z23VVQL' where id=7; -update noar tt set b2='DZ' where id=7; -update noar ti set b2='DZ' where id=7; -update noar tt set b0='BY5HHOCT3093NKT' where id=8; -update noar ti set b0='BY5HHOCT3093NKT' where id=8; -update noar tt set b1='XBSIJGQJWZK7E0X1Z7' where id=8; -update noar ti set b1='XBSIJGQJWZK7E0X1Z7' where id=8; -update noar tt set b2='IQWMK3YBNTHPCOC9SE3LKQCOFZH' where id=8; -update noar ti set b2='IQWMK3YBNTHPCOC9SE3LKQCOFZH' where id=8; -update noar tt set b0='1YNRS1GX9Y2DHX0XB5BP29IULIYXH87Z' where id=9; -update noar ti set b0='1YNRS1GX9Y2DHX0XB5BP29IULIYXH87Z' where id=9; -update noar tt set b1='FA8PCZAUHHN847DPVD20V' where id=9; -update noar ti set b1='FA8PCZAUHHN847DPVD20V' where id=9; -update noar tt set b2='7HPTYCMEJDA8ACGI4AUYXD89XAESI' where id=9; -update noar ti set b2='7HPTYCMEJDA8ACGI4AUYXD89XAESI' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 text null, -b1 longblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='UUGMOZ1P3' where id=1; -update noar ti set b0='UUGMOZ1P3' where id=1; -update noar tt set b1='PBWC9AMOAT0NJTZRFDHAYJI9YNBYOPXW' where id=1; -update noar ti set b1='PBWC9AMOAT0NJTZRFDHAYJI9YNBYOPXW' where id=1; -update noar tt set b2='8F6X32CU7TLEJYCKSUWR' where id=1; -update noar ti set b2='8F6X32CU7TLEJYCKSUWR' where id=1; -update noar tt set b0='SNC6LN383ACJ4K0Y1NJ' where id=2; -update noar ti set b0='SNC6LN383ACJ4K0Y1NJ' where id=2; -update noar tt set b1='0HJPYQPGGOO40O26ZQK438L1LB0' where id=2; -update noar ti set b1='0HJPYQPGGOO40O26ZQK438L1LB0' where id=2; -update noar tt set b2='EAYEUB079Q6ULB' where id=2; -update noar ti set b2='EAYEUB079Q6ULB' where id=2; -update noar tt set b0='FBK0CKXVMY0NCQM7' where id=3; -update noar ti set b0='FBK0CKXVMY0NCQM7' where id=3; -update noar tt set b1='TM' where id=3; -update noar ti set b1='TM' where id=3; -update noar tt set b2='YL22GZAQSVO2JASQCI3FZX8HPSI' where id=3; -update noar ti set b2='YL22GZAQSVO2JASQCI3FZX8HPSI' where id=3; -update noar tt set b0='9QR2QL9QQR6BF' where id=4; -update noar ti set b0='9QR2QL9QQR6BF' where id=4; -update noar tt set b1='2F4LIFNIHGDSUSTINS0WUQMIV' where id=4; -update noar ti set b1='2F4LIFNIHGDSUSTINS0WUQMIV' where id=4; -update noar tt set b2='K4' where id=4; -update noar ti set b2='K4' where id=4; -update noar tt set b0='GDCE31TWJT' where id=5; -update noar ti set b0='GDCE31TWJT' where id=5; -update noar tt set b1='71Z3FE5XK6L9' where id=5; -update noar ti set b1='71Z3FE5XK6L9' where id=5; -update noar tt set b2='DBX91DP6TO' where id=5; -update noar ti set b2='DBX91DP6TO' where id=5; -update noar tt set b0='WO06OFL' where id=6; -update noar ti set b0='WO06OFL' where id=6; -update noar tt set b1='34' where id=6; -update noar ti set b1='34' where id=6; -update noar tt set b2='JNH9' where id=6; -update noar ti set b2='JNH9' where id=6; -update noar tt set b0='Y1Q2QPCMLDXGVVKEL026QTVCZMEE' where id=7; -update noar ti set b0='Y1Q2QPCMLDXGVVKEL026QTVCZMEE' where id=7; -update noar tt set b1='RI1RYZG3L2GFW18Z03HOYC5' where id=7; -update noar ti set b1='RI1RYZG3L2GFW18Z03HOYC5' where id=7; -update noar tt set b2='10OCM08ETI7GHGB3FA' where id=7; -update noar ti set b2='10OCM08ETI7GHGB3FA' where id=7; -update noar tt set b0='LU6L0URZ9S3OQFK24YINC1' where id=8; -update noar ti set b0='LU6L0URZ9S3OQFK24YINC1' where id=8; -update noar tt set b1='QX7RVVV' where id=8; -update noar ti set b1='QX7RVVV' where id=8; -update noar tt set b2='KX0MPDVWDG3MX7NLVTI5SQ4' where id=8; -update noar ti set b2='KX0MPDVWDG3MX7NLVTI5SQ4' where id=8; -update noar tt set b0='036' where id=9; -update noar ti set b0='036' where id=9; -update noar tt set b1='0W0UZUP2HSA22U0IAS5' where id=9; -update noar ti set b1='0W0UZUP2HSA22U0IAS5' where id=9; -update noar tt set b2='OZ0F' where id=9; -update noar ti set b2='OZ0F' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 text not null, -b1 longblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='FG5GFLPIXT02' where id=1; -update noar ti set b0='FG5GFLPIXT02' where id=1; -update noar tt set b1='KYGJ4KO2M5K9699II6AGHI5T' where id=1; -update noar ti set b1='KYGJ4KO2M5K9699II6AGHI5T' where id=1; -update noar tt set b2='TJS03JSU2' where id=1; -update noar ti set b2='TJS03JSU2' where id=1; -update noar tt set b0='GSB' where id=2; -update noar ti set b0='GSB' where id=2; -update noar tt set b1='YO' where id=2; -update noar ti set b1='YO' where id=2; -update noar tt set b2='P99PYJZHXZFHQBDUQX' where id=2; -update noar ti set b2='P99PYJZHXZFHQBDUQX' where id=2; -update noar tt set b0='QQTGTYCEZHO7DS5Z0BT0HI' where id=3; -update noar ti set b0='QQTGTYCEZHO7DS5Z0BT0HI' where id=3; -update noar tt set b1='O42TZUJVKA7YEHVGYZ9' where id=3; -update noar ti set b1='O42TZUJVKA7YEHVGYZ9' where id=3; -update noar tt set b2='COKYO8BHKV5UBBOFBD3G7' where id=3; -update noar ti set b2='COKYO8BHKV5UBBOFBD3G7' where id=3; -update noar tt set b0='YTS9FYDEO87B599JY7V5JMXE' where id=4; -update noar ti set b0='YTS9FYDEO87B599JY7V5JMXE' where id=4; -update noar tt set b1='H14MBK1' where id=4; -update noar ti set b1='H14MBK1' where id=4; -update noar tt set b2='J1UUIK1W5JIETHQZ4HDRZWA' where id=4; -update noar ti set b2='J1UUIK1W5JIETHQZ4HDRZWA' where id=4; -update noar tt set b0='WW6S001TL1QV' where id=5; -update noar ti set b0='WW6S001TL1QV' where id=5; -update noar tt set b1='3SL' where id=5; -update noar ti set b1='3SL' where id=5; -update noar tt set b2='2350D0PGAD' where id=5; -update noar ti set b2='2350D0PGAD' where id=5; -update noar tt set b0='PY7KV6DLP' where id=6; -update noar ti set b0='PY7KV6DLP' where id=6; -update noar tt set b1='CJ5W6JZF203YL2E1JMBZKA483VH3JRI' where id=6; -update noar ti set b1='CJ5W6JZF203YL2E1JMBZKA483VH3JRI' where id=6; -update noar tt set b2='QGXI0Q8YJ' where id=6; -update noar ti set b2='QGXI0Q8YJ' where id=6; -update noar tt set b0='BU6WFNRGHPBWILUDPHBSIHRDI2ZGU6I' where id=7; -update noar ti set b0='BU6WFNRGHPBWILUDPHBSIHRDI2ZGU6I' where id=7; -update noar tt set b1='IVKCI5SIWEMS6Z677N0B1DME8JJ25L2I' where id=7; -update noar ti set b1='IVKCI5SIWEMS6Z677N0B1DME8JJ25L2I' where id=7; -update noar tt set b2='U8' where id=7; -update noar ti set b2='U8' where id=7; -update noar tt set b0='92PT815NVI59ES' where id=8; -update noar ti set b0='92PT815NVI59ES' where id=8; -update noar tt set b1='U3E9DZ4H37O8KYNPI' where id=8; -update noar ti set b1='U3E9DZ4H37O8KYNPI' where id=8; -update noar tt set b2='M1P1AL8RI5GT28OMG38PVPAKGJM8OY' where id=8; -update noar ti set b2='M1P1AL8RI5GT28OMG38PVPAKGJM8OY' where id=8; -update noar tt set b0='NJ97NFK6QUZ' where id=9; -update noar ti set b0='NJ97NFK6QUZ' where id=9; -update noar tt set b1='9N1MYO' where id=9; -update noar ti set b1='9N1MYO' where id=9; -update noar tt set b2='BDMG7MDSYCCHVJY2TEI7' where id=9; -update noar ti set b2='BDMG7MDSYCCHVJY2TEI7' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 text null, -b1 longblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='EDIY6' where id=1; -update noar ti set b0='EDIY6' where id=1; -update noar tt set b1='58TPY5G' where id=1; -update noar ti set b1='58TPY5G' where id=1; -update noar tt set b2='8' where id=1; -update noar ti set b2='8' where id=1; -update noar tt set b0='TED6CUCZ2YTLEWABEODOHKPY' where id=2; -update noar ti set b0='TED6CUCZ2YTLEWABEODOHKPY' where id=2; -update noar tt set b1='MFNK' where id=2; -update noar ti set b1='MFNK' where id=2; -update noar tt set b2='CP2P45YB5RDFB2EKL4836' where id=2; -update noar ti set b2='CP2P45YB5RDFB2EKL4836' where id=2; -update noar tt set b0='TBQ9QWAZE2E26H3185DTTU2FCX' where id=3; -update noar ti set b0='TBQ9QWAZE2E26H3185DTTU2FCX' where id=3; -update noar tt set b1='8X44NE7RGRDRF4BCBZE3HPZZGLG9ZP9' where id=3; -update noar ti set b1='8X44NE7RGRDRF4BCBZE3HPZZGLG9ZP9' where id=3; -update noar tt set b2='4B9HKB4FOT05OTXEUVYTKD2YXQK' where id=3; -update noar ti set b2='4B9HKB4FOT05OTXEUVYTKD2YXQK' where id=3; -update noar tt set b0='P1EGDBQWU8Y98WCZ74W' where id=4; -update noar ti set b0='P1EGDBQWU8Y98WCZ74W' where id=4; -update noar tt set b1='X' where id=4; -update noar ti set b1='X' where id=4; -update noar tt set b2='K33PV3VRODEC3AWYU4LX3' where id=4; -update noar ti set b2='K33PV3VRODEC3AWYU4LX3' where id=4; -update noar tt set b0='AAD3SCXGXZ7KHLELVA' where id=5; -update noar ti set b0='AAD3SCXGXZ7KHLELVA' where id=5; -update noar tt set b1='NFB49OZR7JWU0ONDOJT6H' where id=5; -update noar ti set b1='NFB49OZR7JWU0ONDOJT6H' where id=5; -update noar tt set b2='97FWTMW3O2BQDFJCPAHA7ORR917EI' where id=5; -update noar ti set b2='97FWTMW3O2BQDFJCPAHA7ORR917EI' where id=5; -update noar tt set b0='1MEIX05A06L1KHZB767GB2Y' where id=6; -update noar ti set b0='1MEIX05A06L1KHZB767GB2Y' where id=6; -update noar tt set b1='KYUPVOMHNKWTEBF1' where id=6; -update noar ti set b1='KYUPVOMHNKWTEBF1' where id=6; -update noar tt set b2='GOL' where id=6; -update noar ti set b2='GOL' where id=6; -update noar tt set b0='S991AE337P7VLMOQ' where id=7; -update noar ti set b0='S991AE337P7VLMOQ' where id=7; -update noar tt set b1='26EB8QJTV5KOTXZJDH2N' where id=7; -update noar ti set b1='26EB8QJTV5KOTXZJDH2N' where id=7; -update noar tt set b2='6W8J8R68' where id=7; -update noar ti set b2='6W8J8R68' where id=7; -update noar tt set b0='BO3TGF' where id=8; -update noar ti set b0='BO3TGF' where id=8; -update noar tt set b1='ZUFG02URD9W4WJSFZ6XVR8V1PH1VXONT' where id=8; -update noar ti set b1='ZUFG02URD9W4WJSFZ6XVR8V1PH1VXONT' where id=8; -update noar tt set b2='WCNKT1RP4CZ035P2KRDTQF2A' where id=8; -update noar ti set b2='WCNKT1RP4CZ035P2KRDTQF2A' where id=8; -update noar tt set b0='3RV4SVJNFH5807' where id=9; -update noar ti set b0='3RV4SVJNFH5807' where id=9; -update noar tt set b1='HH0E8QCB9INLB' where id=9; -update noar ti set b1='HH0E8QCB9INLB' where id=9; -update noar tt set b2='9' where id=9; -update noar ti set b2='9' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 text not null, -b1 longblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='S1BZX1GMU2YND3ET9RJBOP7Q2S' where id=1; -update noar ti set b0='S1BZX1GMU2YND3ET9RJBOP7Q2S' where id=1; -update noar tt set b1='V0K31OUURZTPZO' where id=1; -update noar ti set b1='V0K31OUURZTPZO' where id=1; -update noar tt set b2='4ZZWYX4XPJHEYA88GMBDB5E' where id=1; -update noar ti set b2='4ZZWYX4XPJHEYA88GMBDB5E' where id=1; -update noar tt set b0='UNS8VQ6BTRS7LQRZH0Y' where id=2; -update noar ti set b0='UNS8VQ6BTRS7LQRZH0Y' where id=2; -update noar tt set b1='98H7FEP5HT' where id=2; -update noar ti set b1='98H7FEP5HT' where id=2; -update noar tt set b2='QTPIF0' where id=2; -update noar ti set b2='QTPIF0' where id=2; -update noar tt set b0='I6VATVQRU1VXHUIGYTBKE5' where id=3; -update noar ti set b0='I6VATVQRU1VXHUIGYTBKE5' where id=3; -update noar tt set b1='PYCER' where id=3; -update noar ti set b1='PYCER' where id=3; -update noar tt set b2='7CDT8FFD9OS19F1T2XIYJ' where id=3; -update noar ti set b2='7CDT8FFD9OS19F1T2XIYJ' where id=3; -update noar tt set b0='N0B501K95GPMN51NW' where id=4; -update noar ti set b0='N0B501K95GPMN51NW' where id=4; -update noar tt set b1='YD87UKN4S0' where id=4; -update noar ti set b1='YD87UKN4S0' where id=4; -update noar tt set b2='CZ7L9BHYOTL45P3P5HVCI77PV45R' where id=4; -update noar ti set b2='CZ7L9BHYOTL45P3P5HVCI77PV45R' where id=4; -update noar tt set b0='292MSMHCG9J7W8JV24Q' where id=5; -update noar ti set b0='292MSMHCG9J7W8JV24Q' where id=5; -update noar tt set b1='MWCPOCMY' where id=5; -update noar ti set b1='MWCPOCMY' where id=5; -update noar tt set b2='PG' where id=5; -update noar ti set b2='PG' where id=5; -update noar tt set b0='YBKSVEI6S76HXMT7J' where id=6; -update noar ti set b0='YBKSVEI6S76HXMT7J' where id=6; -update noar tt set b1='ASIL8EPIEP' where id=6; -update noar ti set b1='ASIL8EPIEP' where id=6; -update noar tt set b2='XEFHH7CNNMOYS0FQ4JGIRPZ' where id=6; -update noar ti set b2='XEFHH7CNNMOYS0FQ4JGIRPZ' where id=6; -update noar tt set b0='SVK3OKVD592V3DLJGZWI' where id=7; -update noar ti set b0='SVK3OKVD592V3DLJGZWI' where id=7; -update noar tt set b1='ZDN6T0H31T6U6SPT319GJS8AO6' where id=7; -update noar ti set b1='ZDN6T0H31T6U6SPT319GJS8AO6' where id=7; -update noar tt set b2='PTZED93DMLC9MH25D2H0' where id=7; -update noar ti set b2='PTZED93DMLC9MH25D2H0' where id=7; -update noar tt set b0='Z2257C73FE768H3OGQYRQYJ' where id=8; -update noar ti set b0='Z2257C73FE768H3OGQYRQYJ' where id=8; -update noar tt set b1='JFE2BNXQ6F6QO4F36PV' where id=8; -update noar ti set b1='JFE2BNXQ6F6QO4F36PV' where id=8; -update noar tt set b2='YNYCFK4IEVWDEK2I2NPGYPMDF' where id=8; -update noar ti set b2='YNYCFK4IEVWDEK2I2NPGYPMDF' where id=8; -update noar tt set b0='P7TEHC1E7H' where id=9; -update noar ti set b0='P7TEHC1E7H' where id=9; -update noar tt set b1='GAMS' where id=9; -update noar ti set b1='GAMS' where id=9; -update noar tt set b2='ISQVEH5DWMZA9CFO6TX' where id=9; -update noar ti set b2='ISQVEH5DWMZA9CFO6TX' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 text null, -b1 longblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='VEV9WU59A5QRVQHC' where id=1; -update noar ti set b0='VEV9WU59A5QRVQHC' where id=1; -update noar tt set b1='WV6Q5JD1392NNJMAKJ5' where id=1; -update noar ti set b1='WV6Q5JD1392NNJMAKJ5' where id=1; -update noar tt set b2='WN52ORPN75BUDPO8E1T29' where id=1; -update noar ti set b2='WN52ORPN75BUDPO8E1T29' where id=1; -update noar tt set b0='LNFEZR474NVFI' where id=2; -update noar ti set b0='LNFEZR474NVFI' where id=2; -update noar tt set b1='I4J85LC7Y5C6UAFAYW86GG8M7O0OUTN' where id=2; -update noar ti set b1='I4J85LC7Y5C6UAFAYW86GG8M7O0OUTN' where id=2; -update noar tt set b2='3DZU6' where id=2; -update noar ti set b2='3DZU6' where id=2; -update noar tt set b0='P6XMKGEREU7AA7ROKVRWVTAAN' where id=3; -update noar ti set b0='P6XMKGEREU7AA7ROKVRWVTAAN' where id=3; -update noar tt set b1='U32B4Y8PRCDZV5I3M29ITBE1' where id=3; -update noar ti set b1='U32B4Y8PRCDZV5I3M29ITBE1' where id=3; -update noar tt set b2='K9U3T4I6J3CG' where id=3; -update noar ti set b2='K9U3T4I6J3CG' where id=3; -update noar tt set b0='CR' where id=4; -update noar ti set b0='CR' where id=4; -update noar tt set b1='B38BF9K2P' where id=4; -update noar ti set b1='B38BF9K2P' where id=4; -update noar tt set b2='1IFYUVT2064YST' where id=4; -update noar ti set b2='1IFYUVT2064YST' where id=4; -update noar tt set b0='NT' where id=5; -update noar ti set b0='NT' where id=5; -update noar tt set b1='W9X11NURLXPNWPXN30' where id=5; -update noar ti set b1='W9X11NURLXPNWPXN30' where id=5; -update noar tt set b2='ZWI9O' where id=5; -update noar ti set b2='ZWI9O' where id=5; -update noar tt set b0='RN600UL03M' where id=6; -update noar ti set b0='RN600UL03M' where id=6; -update noar tt set b1='6FQDTUI' where id=6; -update noar ti set b1='6FQDTUI' where id=6; -update noar tt set b2='ITYTZVLJTMG9QY5TG00JVHIZTH' where id=6; -update noar ti set b2='ITYTZVLJTMG9QY5TG00JVHIZTH' where id=6; -update noar tt set b0='H8EKMVY2SZ7JW4YXVRO7Q' where id=7; -update noar ti set b0='H8EKMVY2SZ7JW4YXVRO7Q' where id=7; -update noar tt set b1='R18EEVGLUATFI1JRR2VJE16NVJO' where id=7; -update noar ti set b1='R18EEVGLUATFI1JRR2VJE16NVJO' where id=7; -update noar tt set b2='FG4G' where id=7; -update noar ti set b2='FG4G' where id=7; -update noar tt set b0='5NM000UZDLIF' where id=8; -update noar ti set b0='5NM000UZDLIF' where id=8; -update noar tt set b1='HYXNAJ8QYF' where id=8; -update noar ti set b1='HYXNAJ8QYF' where id=8; -update noar tt set b2='URU0KZ4NK2U' where id=8; -update noar ti set b2='URU0KZ4NK2U' where id=8; -update noar tt set b0='LRQK35RR' where id=9; -update noar ti set b0='LRQK35RR' where id=9; -update noar tt set b1='QACJ71GE6K5Z' where id=9; -update noar ti set b1='QACJ71GE6K5Z' where id=9; -update noar tt set b2='MSTWYPU' where id=9; -update noar ti set b2='MSTWYPU' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 text not null, -b1 longblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='QDV1DW52NO1MN4WBTEHIA3' where id=1; -update noar ti set b0='QDV1DW52NO1MN4WBTEHIA3' where id=1; -update noar tt set b1='8Y23EXK4M9OJUBIEX1040CN7O0KIHVY' where id=1; -update noar ti set b1='8Y23EXK4M9OJUBIEX1040CN7O0KIHVY' where id=1; -update noar tt set b2='G1ZFVE1R9JMUG' where id=1; -update noar ti set b2='G1ZFVE1R9JMUG' where id=1; -update noar tt set b0='G1VTP8VER9X5XF76IHM' where id=2; -update noar ti set b0='G1VTP8VER9X5XF76IHM' where id=2; -update noar tt set b1='SA73SUE0VCNOE7BFNMD51ECOCHLO' where id=2; -update noar ti set b1='SA73SUE0VCNOE7BFNMD51ECOCHLO' where id=2; -update noar tt set b2='HPKDPWSVCQV' where id=2; -update noar ti set b2='HPKDPWSVCQV' where id=2; -update noar tt set b0='1FYN8LDJ6DNLJ34' where id=3; -update noar ti set b0='1FYN8LDJ6DNLJ34' where id=3; -update noar tt set b1='Z1SZ9WQ7VX' where id=3; -update noar ti set b1='Z1SZ9WQ7VX' where id=3; -update noar tt set b2='C4II1NMNM6JKNDQ5C80TZXKYZT' where id=3; -update noar ti set b2='C4II1NMNM6JKNDQ5C80TZXKYZT' where id=3; -update noar tt set b0='4XFAFZ8EF4QFK6XHLWC6BGH' where id=4; -update noar ti set b0='4XFAFZ8EF4QFK6XHLWC6BGH' where id=4; -update noar tt set b1='EMH5CJKDFI387I7LFB3A9HUQOCWQSJ' where id=4; -update noar ti set b1='EMH5CJKDFI387I7LFB3A9HUQOCWQSJ' where id=4; -update noar tt set b2='0JHKEL816XK' where id=4; -update noar ti set b2='0JHKEL816XK' where id=4; -update noar tt set b0='LPZCG1NJLEJ93YM9YWZ8C' where id=5; -update noar ti set b0='LPZCG1NJLEJ93YM9YWZ8C' where id=5; -update noar tt set b1='4I26Y2BZUYJDWBB5R9OZIBN9E' where id=5; -update noar ti set b1='4I26Y2BZUYJDWBB5R9OZIBN9E' where id=5; -update noar tt set b2='PPJJ82O7WFYXZK4D6LF44EZ' where id=5; -update noar ti set b2='PPJJ82O7WFYXZK4D6LF44EZ' where id=5; -update noar tt set b0='DE3306BZ9H185S' where id=6; -update noar ti set b0='DE3306BZ9H185S' where id=6; -update noar tt set b1='DC6RPIWT22VB9MRF5EL5V' where id=6; -update noar ti set b1='DC6RPIWT22VB9MRF5EL5V' where id=6; -update noar tt set b2='F5VQ' where id=6; -update noar ti set b2='F5VQ' where id=6; -update noar tt set b0='I3ZX4DBGGUQA39FDULDSD' where id=7; -update noar ti set b0='I3ZX4DBGGUQA39FDULDSD' where id=7; -update noar tt set b1='T4F' where id=7; -update noar ti set b1='T4F' where id=7; -update noar tt set b2='D1VR6GGTXT8Z4F' where id=7; -update noar ti set b2='D1VR6GGTXT8Z4F' where id=7; -update noar tt set b0='VSC6LZCV2ZE416NVFT764' where id=8; -update noar ti set b0='VSC6LZCV2ZE416NVFT764' where id=8; -update noar tt set b1='AUYFPW84B73M6HJ1OAT7F4L2940KLE' where id=8; -update noar ti set b1='AUYFPW84B73M6HJ1OAT7F4L2940KLE' where id=8; -update noar tt set b2='KX63IC4RB0PVY5D3FNGUJLEK2DMFY9' where id=8; -update noar ti set b2='KX63IC4RB0PVY5D3FNGUJLEK2DMFY9' where id=8; -update noar tt set b0='CY4P7S18Q9XA28M5XXG1N9CO8' where id=9; -update noar ti set b0='CY4P7S18Q9XA28M5XXG1N9CO8' where id=9; -update noar tt set b1='YFHB0JI3ZYNUZ404MZ4AAF' where id=9; -update noar ti set b1='YFHB0JI3ZYNUZ404MZ4AAF' where id=9; -update noar tt set b2='D9GAS0S5ROW' where id=9; -update noar ti set b2='D9GAS0S5ROW' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 text null, -b1 longblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='2NGUMPZUZX0TL260L' where id=1; -update noar ti set b0='2NGUMPZUZX0TL260L' where id=1; -update noar tt set b1='DW8W78O1G5OQ2EF0V3ID8DSH48O' where id=1; -update noar ti set b1='DW8W78O1G5OQ2EF0V3ID8DSH48O' where id=1; -update noar tt set b2='2JSMC5IUQBXOL1MX16TGXAJH' where id=1; -update noar ti set b2='2JSMC5IUQBXOL1MX16TGXAJH' where id=1; -update noar tt set b0='HIAH3SCF1YAVTQ3E1DZNGNVW' where id=2; -update noar ti set b0='HIAH3SCF1YAVTQ3E1DZNGNVW' where id=2; -update noar tt set b1='5EKU2AC' where id=2; -update noar ti set b1='5EKU2AC' where id=2; -update noar tt set b2='PGZ4HGDFR5MG9RFQPSW1J48E' where id=2; -update noar ti set b2='PGZ4HGDFR5MG9RFQPSW1J48E' where id=2; -update noar tt set b0='ZTTHM7B3BXVE' where id=3; -update noar ti set b0='ZTTHM7B3BXVE' where id=3; -update noar tt set b1='ZSNFZI9EUVQNEJNS26723HR' where id=3; -update noar ti set b1='ZSNFZI9EUVQNEJNS26723HR' where id=3; -update noar tt set b2='DKATUL9WLR81U5AO9H7FI' where id=3; -update noar ti set b2='DKATUL9WLR81U5AO9H7FI' where id=3; -update noar tt set b0='9R' where id=4; -update noar ti set b0='9R' where id=4; -update noar tt set b1='BZXBHWT' where id=4; -update noar ti set b1='BZXBHWT' where id=4; -update noar tt set b2='VC663OJ8UT9EW5P07LZ7B38JS2' where id=4; -update noar ti set b2='VC663OJ8UT9EW5P07LZ7B38JS2' where id=4; -update noar tt set b0='M2T' where id=5; -update noar ti set b0='M2T' where id=5; -update noar tt set b1='H6CXFZ725MF1PPCSZF' where id=5; -update noar ti set b1='H6CXFZ725MF1PPCSZF' where id=5; -update noar tt set b2='0VVHL1FA457G06IJETDPD45C0V5EUU' where id=5; -update noar ti set b2='0VVHL1FA457G06IJETDPD45C0V5EUU' where id=5; -update noar tt set b0='VJW3KOMHUQL4RW' where id=6; -update noar ti set b0='VJW3KOMHUQL4RW' where id=6; -update noar tt set b1='2B28D758GWHYYCXM4X' where id=6; -update noar ti set b1='2B28D758GWHYYCXM4X' where id=6; -update noar tt set b2='Y3J29IF87PC' where id=6; -update noar ti set b2='Y3J29IF87PC' where id=6; -update noar tt set b0='1' where id=7; -update noar ti set b0='1' where id=7; -update noar tt set b1='TQHPLGW8PLJQB9A' where id=7; -update noar ti set b1='TQHPLGW8PLJQB9A' where id=7; -update noar tt set b2='I89R20VLFWTEJ6WPY6VPW' where id=7; -update noar ti set b2='I89R20VLFWTEJ6WPY6VPW' where id=7; -update noar tt set b0='EQVFQ13R5L66IC7P9SNQ90GXFJ2VMV' where id=8; -update noar ti set b0='EQVFQ13R5L66IC7P9SNQ90GXFJ2VMV' where id=8; -update noar tt set b1='HXUSMNLI22HYEONA2GA6' where id=8; -update noar ti set b1='HXUSMNLI22HYEONA2GA6' where id=8; -update noar tt set b2='5DH9JOODED0Q7FM82I7ZKGYWWTG1' where id=8; -update noar ti set b2='5DH9JOODED0Q7FM82I7ZKGYWWTG1' where id=8; -update noar tt set b0='JSRU0RMHB3DZDIW13R3Q7BC3SAA' where id=9; -update noar ti set b0='JSRU0RMHB3DZDIW13R3Q7BC3SAA' where id=9; -update noar tt set b1='Z2JW8XTSL51UPV7B9OS3D' where id=9; -update noar ti set b1='Z2JW8XTSL51UPV7B9OS3D' where id=9; -update noar tt set b2='ZMU' where id=9; -update noar ti set b2='ZMU' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 text not null, -b1 longblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='LJKN0KJFQ' where id=1; -update noar ti set b0='LJKN0KJFQ' where id=1; -update noar tt set b1='J8PFJQGICL' where id=1; -update noar ti set b1='J8PFJQGICL' where id=1; -update noar tt set b2='4AA3XU1LOHABMVAHPBZ631ALUFCZO9V' where id=1; -update noar ti set b2='4AA3XU1LOHABMVAHPBZ631ALUFCZO9V' where id=1; -update noar tt set b0='7O6' where id=2; -update noar ti set b0='7O6' where id=2; -update noar tt set b1='M6D2N2N4W5VYB06EKI' where id=2; -update noar ti set b1='M6D2N2N4W5VYB06EKI' where id=2; -update noar tt set b2='8E0TC8I31M6L572PHIXMRA' where id=2; -update noar ti set b2='8E0TC8I31M6L572PHIXMRA' where id=2; -update noar tt set b0='22BVZD36B74GL8467REMX1O4' where id=3; -update noar ti set b0='22BVZD36B74GL8467REMX1O4' where id=3; -update noar tt set b1='H17E70BNU9039OJG89UF3K3TI' where id=3; -update noar ti set b1='H17E70BNU9039OJG89UF3K3TI' where id=3; -update noar tt set b2='26M8B15CDHG5YEK' where id=3; -update noar ti set b2='26M8B15CDHG5YEK' where id=3; -update noar tt set b0='QTA5LHL4PILPW7NPQQ90PITP012M' where id=4; -update noar ti set b0='QTA5LHL4PILPW7NPQQ90PITP012M' where id=4; -update noar tt set b1='O68YTNV7MS2D' where id=4; -update noar ti set b1='O68YTNV7MS2D' where id=4; -update noar tt set b2='LOVI692I2W67ICLBID' where id=4; -update noar ti set b2='LOVI692I2W67ICLBID' where id=4; -update noar tt set b0='GKH3D' where id=5; -update noar ti set b0='GKH3D' where id=5; -update noar tt set b1='X0CMCGJM773FR99DV4BIAB' where id=5; -update noar ti set b1='X0CMCGJM773FR99DV4BIAB' where id=5; -update noar tt set b2='DRRUR4GR9BSW' where id=5; -update noar ti set b2='DRRUR4GR9BSW' where id=5; -update noar tt set b0='QDZR' where id=6; -update noar ti set b0='QDZR' where id=6; -update noar tt set b1='8OW73WTSBTU6LAXIK79J516X' where id=6; -update noar ti set b1='8OW73WTSBTU6LAXIK79J516X' where id=6; -update noar tt set b2='NLHR487IVFOBOF9OQ69SQ8R8WJP6X' where id=6; -update noar ti set b2='NLHR487IVFOBOF9OQ69SQ8R8WJP6X' where id=6; -update noar tt set b0='U2U1O0SBSAG' where id=7; -update noar ti set b0='U2U1O0SBSAG' where id=7; -update noar tt set b1='5GE0IWAZ1M6M126RGXLE' where id=7; -update noar ti set b1='5GE0IWAZ1M6M126RGXLE' where id=7; -update noar tt set b2='N279NXUJ2SWUAYUOXEPLYEUO' where id=7; -update noar ti set b2='N279NXUJ2SWUAYUOXEPLYEUO' where id=7; -update noar tt set b0='2C18JJE3CF6Q92UMJ9' where id=8; -update noar ti set b0='2C18JJE3CF6Q92UMJ9' where id=8; -update noar tt set b1='XIIXQGXKOT7G2P5JANVOS8X' where id=8; -update noar ti set b1='XIIXQGXKOT7G2P5JANVOS8X' where id=8; -update noar tt set b2='AC6CJR5Z8J81S4RK31F8M' where id=8; -update noar ti set b2='AC6CJR5Z8J81S4RK31F8M' where id=8; -update noar tt set b0='T595' where id=9; -update noar ti set b0='T595' where id=9; -update noar tt set b1='6HUCK6POCSAFHSZLNRVPLMGO8B' where id=9; -update noar ti set b1='6HUCK6POCSAFHSZLNRVPLMGO8B' where id=9; -update noar tt set b2='GQ89J3PPUW17294K0H7A9Z8J8XEP0M' where id=9; -update noar ti set b2='GQ89J3PPUW17294K0H7A9Z8J8XEP0M' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 text null, -b1 longblob null, -b2 text null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='HL0FNP7CE9H9B3G9BDLETK' where id=1; -update noar ti set b0='HL0FNP7CE9H9B3G9BDLETK' where id=1; -update noar tt set b1='PVO' where id=1; -update noar ti set b1='PVO' where id=1; -update noar tt set b2='S8YNFEYYWLMVIYGUMBDT8WQG5L6QKU5' where id=1; -update noar ti set b2='S8YNFEYYWLMVIYGUMBDT8WQG5L6QKU5' where id=1; -update noar tt set b0='GM184QL0VV6TSWV' where id=2; -update noar ti set b0='GM184QL0VV6TSWV' where id=2; -update noar tt set b1='SJZW15OHPP3MCWYRES9NMM7VEIE4' where id=2; -update noar ti set b1='SJZW15OHPP3MCWYRES9NMM7VEIE4' where id=2; -update noar tt set b2='DVHRUQ1BPVBB8PIC51F3RCYUE7T6ZOHT' where id=2; -update noar ti set b2='DVHRUQ1BPVBB8PIC51F3RCYUE7T6ZOHT' where id=2; -update noar tt set b0='T3SUCNTHSHUW9S5VRBV97SC' where id=3; -update noar ti set b0='T3SUCNTHSHUW9S5VRBV97SC' where id=3; -update noar tt set b1='OP8VT8F4AH9J9D9' where id=3; -update noar ti set b1='OP8VT8F4AH9J9D9' where id=3; -update noar tt set b2='5IW2MK4C7Q5Z3Q3W9M1JEOCNGIB4R' where id=3; -update noar ti set b2='5IW2MK4C7Q5Z3Q3W9M1JEOCNGIB4R' where id=3; -update noar tt set b0='01JNLPY3FC07Q7MR7SEUOG4' where id=4; -update noar ti set b0='01JNLPY3FC07Q7MR7SEUOG4' where id=4; -update noar tt set b1='BIMVQMYKY778883059GDKSWIPX47S' where id=4; -update noar ti set b1='BIMVQMYKY778883059GDKSWIPX47S' where id=4; -update noar tt set b2='00YU0I95PUABBNAMI1GCKCABOVUS' where id=4; -update noar ti set b2='00YU0I95PUABBNAMI1GCKCABOVUS' where id=4; -update noar tt set b0='3U6BE' where id=5; -update noar ti set b0='3U6BE' where id=5; -update noar tt set b1='FG334ISBNVVT2ROXCSJ' where id=5; -update noar ti set b1='FG334ISBNVVT2ROXCSJ' where id=5; -update noar tt set b2='T53RHR1265QK2VRI1W36QP77MAK7X' where id=5; -update noar ti set b2='T53RHR1265QK2VRI1W36QP77MAK7X' where id=5; -update noar tt set b0='H8JW' where id=6; -update noar ti set b0='H8JW' where id=6; -update noar tt set b1='GAKIJANPJVG1W3HJZG22SF1K2VPM7HT' where id=6; -update noar ti set b1='GAKIJANPJVG1W3HJZG22SF1K2VPM7HT' where id=6; -update noar tt set b2='WD94AI6BDICDEZ6IG8J9IZPJQC' where id=6; -update noar ti set b2='WD94AI6BDICDEZ6IG8J9IZPJQC' where id=6; -update noar tt set b0='YABRBGGTPYX522I3V' where id=7; -update noar ti set b0='YABRBGGTPYX522I3V' where id=7; -update noar tt set b1='G7E7PGPLOW4958282' where id=7; -update noar ti set b1='G7E7PGPLOW4958282' where id=7; -update noar tt set b2='MCB9TKDZBXHLW' where id=7; -update noar ti set b2='MCB9TKDZBXHLW' where id=7; -update noar tt set b0='ADN8PPM' where id=8; -update noar ti set b0='ADN8PPM' where id=8; -update noar tt set b1='42XRCNNAUE1F6KOEL2GQNX' where id=8; -update noar ti set b1='42XRCNNAUE1F6KOEL2GQNX' where id=8; -update noar tt set b2='S30726STKNXAZUAG6MKT8P5Y65PK0M' where id=8; -update noar ti set b2='S30726STKNXAZUAG6MKT8P5Y65PK0M' where id=8; -update noar tt set b0='F7C1E0GW6YKTZMNMLB8WKJKKEIKY' where id=9; -update noar ti set b0='F7C1E0GW6YKTZMNMLB8WKJKKEIKY' where id=9; -update noar tt set b1='KE5E8S9LXN2GZCCH' where id=9; -update noar ti set b1='KE5E8S9LXN2GZCCH' where id=9; -update noar tt set b2='QL3' where id=9; -update noar ti set b2='QL3' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 text not null, -b1 longblob not null, -b2 text not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='X6LMVB76NTAXAGOR8DN5PL3X3TTUXCB' where id=1; -update noar ti set b0='X6LMVB76NTAXAGOR8DN5PL3X3TTUXCB' where id=1; -update noar tt set b1='LS566VGAAI6RQ7JP1J10OGE' where id=1; -update noar ti set b1='LS566VGAAI6RQ7JP1J10OGE' where id=1; -update noar tt set b2='7MH' where id=1; -update noar ti set b2='7MH' where id=1; -update noar tt set b0='4K4OMGG0PIO2ZSAGP' where id=2; -update noar ti set b0='4K4OMGG0PIO2ZSAGP' where id=2; -update noar tt set b1='U2L8X89150GACC6BIDKI0XSV5P094' where id=2; -update noar ti set b1='U2L8X89150GACC6BIDKI0XSV5P094' where id=2; -update noar tt set b2='G2T1I8Q8S9IBYQECZ86RZ4TTIACVZ' where id=2; -update noar ti set b2='G2T1I8Q8S9IBYQECZ86RZ4TTIACVZ' where id=2; -update noar tt set b0='3OHI6SLJZIA3OVB' where id=3; -update noar ti set b0='3OHI6SLJZIA3OVB' where id=3; -update noar tt set b1='MILHDQXXBYL0RA82IGQDO' where id=3; -update noar ti set b1='MILHDQXXBYL0RA82IGQDO' where id=3; -update noar tt set b2='0LX36X4AO' where id=3; -update noar ti set b2='0LX36X4AO' where id=3; -update noar tt set b0='KY3MG5742LGRZBC232TXTE1BH60SV' where id=4; -update noar ti set b0='KY3MG5742LGRZBC232TXTE1BH60SV' where id=4; -update noar tt set b1='P' where id=4; -update noar ti set b1='P' where id=4; -update noar tt set b2='927QY4ZJXANNGEHQM8JTGGE1B' where id=4; -update noar ti set b2='927QY4ZJXANNGEHQM8JTGGE1B' where id=4; -update noar tt set b0='R9JQPMS4KQFWF4ABBF6' where id=5; -update noar ti set b0='R9JQPMS4KQFWF4ABBF6' where id=5; -update noar tt set b1='J' where id=5; -update noar ti set b1='J' where id=5; -update noar tt set b2='SPF2VKZTAAR' where id=5; -update noar ti set b2='SPF2VKZTAAR' where id=5; -update noar tt set b0='EJ5YBRPHR' where id=6; -update noar ti set b0='EJ5YBRPHR' where id=6; -update noar tt set b1='GV2' where id=6; -update noar ti set b1='GV2' where id=6; -update noar tt set b2='HI90YAE5DF2WA7OIV2DDJHZKNM8EADH' where id=6; -update noar ti set b2='HI90YAE5DF2WA7OIV2DDJHZKNM8EADH' where id=6; -update noar tt set b0='R' where id=7; -update noar ti set b0='R' where id=7; -update noar tt set b1='5R2ZMNI8U4OSCN1RSXHA79OC66ACH' where id=7; -update noar ti set b1='5R2ZMNI8U4OSCN1RSXHA79OC66ACH' where id=7; -update noar tt set b2='9YFCAX' where id=7; -update noar ti set b2='9YFCAX' where id=7; -update noar tt set b0='Y1RN6IF8X31Y3DKNZ5GGPB3I2Z3DOA' where id=8; -update noar ti set b0='Y1RN6IF8X31Y3DKNZ5GGPB3I2Z3DOA' where id=8; -update noar tt set b1='B45L2BGXIR6AGB18MIL4IJ1YIE' where id=8; -update noar ti set b1='B45L2BGXIR6AGB18MIL4IJ1YIE' where id=8; -update noar tt set b2='3H02CTVAJ1UYT2BS8SJX5JB4V4JXXFA' where id=8; -update noar ti set b2='3H02CTVAJ1UYT2BS8SJX5JB4V4JXXFA' where id=8; -update noar tt set b0='954IT78G5DN4D' where id=9; -update noar ti set b0='954IT78G5DN4D' where id=9; -update noar tt set b1='S0ONUXIFI67G7T' where id=9; -update noar ti set b1='S0ONUXIFI67G7T' where id=9; -update noar tt set b2='K41RZTCZ61FMR' where id=9; -update noar ti set b2='K41RZTCZ61FMR' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 text null, -b1 text null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='9PDRR' where id=1; -update noar ti set b0='9PDRR' where id=1; -update noar tt set b1='YJWT6F3FJF6O69D4L2' where id=1; -update noar ti set b1='YJWT6F3FJF6O69D4L2' where id=1; -update noar tt set b2='N4QR' where id=1; -update noar ti set b2='N4QR' where id=1; -update noar tt set b0='B5R9FO1' where id=2; -update noar ti set b0='B5R9FO1' where id=2; -update noar tt set b1='0Q39EW' where id=2; -update noar ti set b1='0Q39EW' where id=2; -update noar tt set b2='96LO1MFORWSRU0JKFVNDX2KX1XGNINJ' where id=2; -update noar ti set b2='96LO1MFORWSRU0JKFVNDX2KX1XGNINJ' where id=2; -update noar tt set b0='Y4YX8921BJM4DW3Z7Z0W' where id=3; -update noar ti set b0='Y4YX8921BJM4DW3Z7Z0W' where id=3; -update noar tt set b1='ITM8GR2EDW8L7QA7QTD1JRFCC7NR6AZD' where id=3; -update noar ti set b1='ITM8GR2EDW8L7QA7QTD1JRFCC7NR6AZD' where id=3; -update noar tt set b2='9WWY7BGR7JMDIIZCF4A7FQPZN64N' where id=3; -update noar ti set b2='9WWY7BGR7JMDIIZCF4A7FQPZN64N' where id=3; -update noar tt set b0='Z6L250O1S' where id=4; -update noar ti set b0='Z6L250O1S' where id=4; -update noar tt set b1='YQL6L44N9XX39G6L23CZC5QOKY' where id=4; -update noar ti set b1='YQL6L44N9XX39G6L23CZC5QOKY' where id=4; -update noar tt set b2='2J0V08Z6RZD5WBKCXTEZW1FZLRDW7Y' where id=4; -update noar ti set b2='2J0V08Z6RZD5WBKCXTEZW1FZLRDW7Y' where id=4; -update noar tt set b0='IW5Q65CI0THXPBGQ3NAXXDNI06' where id=5; -update noar ti set b0='IW5Q65CI0THXPBGQ3NAXXDNI06' where id=5; -update noar tt set b1='U3B9K0CFSOOJ0RLKZW0MKUHEPYQ' where id=5; -update noar ti set b1='U3B9K0CFSOOJ0RLKZW0MKUHEPYQ' where id=5; -update noar tt set b2='PCPIC5BCS23NVUGXK4' where id=5; -update noar ti set b2='PCPIC5BCS23NVUGXK4' where id=5; -update noar tt set b0='29YI53POYKDJXB6DOKPEYBZSB9C' where id=6; -update noar ti set b0='29YI53POYKDJXB6DOKPEYBZSB9C' where id=6; -update noar tt set b1='UU4WGE7FUQVIFXD98O' where id=6; -update noar ti set b1='UU4WGE7FUQVIFXD98O' where id=6; -update noar tt set b2='MX3WNZ' where id=6; -update noar ti set b2='MX3WNZ' where id=6; -update noar tt set b0='3KV07CY5WSTUUUSD67DBEG6B' where id=7; -update noar ti set b0='3KV07CY5WSTUUUSD67DBEG6B' where id=7; -update noar tt set b1='9H8LBF7IPVSJVEWCEDDFKWOS' where id=7; -update noar ti set b1='9H8LBF7IPVSJVEWCEDDFKWOS' where id=7; -update noar tt set b2='8AN159KCL5KERUVC' where id=7; -update noar ti set b2='8AN159KCL5KERUVC' where id=7; -update noar tt set b0='7MMD31CWOVRTHTGM6CDAX35W7' where id=8; -update noar ti set b0='7MMD31CWOVRTHTGM6CDAX35W7' where id=8; -update noar tt set b1='XHM8L9CUJURAT' where id=8; -update noar ti set b1='XHM8L9CUJURAT' where id=8; -update noar tt set b2='CB3VD5FFE9T9WW3GGDZW09DWAQO' where id=8; -update noar ti set b2='CB3VD5FFE9T9WW3GGDZW09DWAQO' where id=8; -update noar tt set b0='767TM4RMFEBRS4NSYVSI6U8MKB8C' where id=9; -update noar ti set b0='767TM4RMFEBRS4NSYVSI6U8MKB8C' where id=9; -update noar tt set b1='D7X2NO5F6V6S01APM6O30EG5BHKM' where id=9; -update noar ti set b1='D7X2NO5F6V6S01APM6O30EG5BHKM' where id=9; -update noar tt set b2='6SDB8NYHYVZWXZEFTYC50X8YN' where id=9; -update noar ti set b2='6SDB8NYHYVZWXZEFTYC50X8YN' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 text not null, -b1 text not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='9YTTXBH3O0JP8JHED' where id=1; -update noar ti set b0='9YTTXBH3O0JP8JHED' where id=1; -update noar tt set b1='BDSIF9GRHQ4SE0FO0PTW9GK' where id=1; -update noar ti set b1='BDSIF9GRHQ4SE0FO0PTW9GK' where id=1; -update noar tt set b2='9X3XHHY7BETNSR30NA44GUDFLCZRMFZ' where id=1; -update noar ti set b2='9X3XHHY7BETNSR30NA44GUDFLCZRMFZ' where id=1; -update noar tt set b0='NV3MVBDLV7FNH6PB8J5O06IVRV' where id=2; -update noar ti set b0='NV3MVBDLV7FNH6PB8J5O06IVRV' where id=2; -update noar tt set b1='LKXSN4SGRH2S8CRG' where id=2; -update noar ti set b1='LKXSN4SGRH2S8CRG' where id=2; -update noar tt set b2='U4Z0FNP2LK3PG' where id=2; -update noar ti set b2='U4Z0FNP2LK3PG' where id=2; -update noar tt set b0='50ZUMS' where id=3; -update noar ti set b0='50ZUMS' where id=3; -update noar tt set b1='60TXDK826A8NIVQ0ITO79H7S0VBQY93' where id=3; -update noar ti set b1='60TXDK826A8NIVQ0ITO79H7S0VBQY93' where id=3; -update noar tt set b2='HVJIGK1ZZ1C' where id=3; -update noar ti set b2='HVJIGK1ZZ1C' where id=3; -update noar tt set b0='K0MB' where id=4; -update noar ti set b0='K0MB' where id=4; -update noar tt set b1='XXGFNIO' where id=4; -update noar ti set b1='XXGFNIO' where id=4; -update noar tt set b2='AVHY40W9J7Z' where id=4; -update noar ti set b2='AVHY40W9J7Z' where id=4; -update noar tt set b0='Q' where id=5; -update noar ti set b0='Q' where id=5; -update noar tt set b1='5BLHLE' where id=5; -update noar ti set b1='5BLHLE' where id=5; -update noar tt set b2='TT6I' where id=5; -update noar ti set b2='TT6I' where id=5; -update noar tt set b0='TR6TBKNST5US9OF6J19AFF34K8KZH' where id=6; -update noar ti set b0='TR6TBKNST5US9OF6J19AFF34K8KZH' where id=6; -update noar tt set b1='08VYPDAD' where id=6; -update noar ti set b1='08VYPDAD' where id=6; -update noar tt set b2='SC2IP6C' where id=6; -update noar ti set b2='SC2IP6C' where id=6; -update noar tt set b0='WQYRGW4BHD17YJC8U1KMXUWE2WH' where id=7; -update noar ti set b0='WQYRGW4BHD17YJC8U1KMXUWE2WH' where id=7; -update noar tt set b1='0I1VKWQ5YCC9RQCFXXDQ0OGIE0EYSEM1' where id=7; -update noar ti set b1='0I1VKWQ5YCC9RQCFXXDQ0OGIE0EYSEM1' where id=7; -update noar tt set b2='TAIIGOZ1IVKIZCQJ0VPB1Y59Y' where id=7; -update noar ti set b2='TAIIGOZ1IVKIZCQJ0VPB1Y59Y' where id=7; -update noar tt set b0='MYPFFRUD9U9JQUCIE2VB1' where id=8; -update noar ti set b0='MYPFFRUD9U9JQUCIE2VB1' where id=8; -update noar tt set b1='AJXFU5274YAHNGLY64KL4QVWY14DQI' where id=8; -update noar ti set b1='AJXFU5274YAHNGLY64KL4QVWY14DQI' where id=8; -update noar tt set b2='XMKA9NAK0CUECYB0QLBCUZZKZ8M0IO7' where id=8; -update noar ti set b2='XMKA9NAK0CUECYB0QLBCUZZKZ8M0IO7' where id=8; -update noar tt set b0='ZAQ' where id=9; -update noar ti set b0='ZAQ' where id=9; -update noar tt set b1='UKJZ1K865PGML0CR' where id=9; -update noar ti set b1='UKJZ1K865PGML0CR' where id=9; -update noar tt set b2='3JZNQ6KYFI5CVIPW2' where id=9; -update noar ti set b2='3JZNQ6KYFI5CVIPW2' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 text null, -b1 text null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='TKPI1SH2U0AA0QK5AAFPL3Z6DJIG4C' where id=1; -update noar ti set b0='TKPI1SH2U0AA0QK5AAFPL3Z6DJIG4C' where id=1; -update noar tt set b1='5VTYJ7IAH' where id=1; -update noar ti set b1='5VTYJ7IAH' where id=1; -update noar tt set b2='IWIH3TXEVUEOUB57FW6YO3O0XU2WXXWL' where id=1; -update noar ti set b2='IWIH3TXEVUEOUB57FW6YO3O0XU2WXXWL' where id=1; -update noar tt set b0='6PAXYU1552ZPFC8LHU3EB9V65NX262JA' where id=2; -update noar ti set b0='6PAXYU1552ZPFC8LHU3EB9V65NX262JA' where id=2; -update noar tt set b1='53UX1QOKRL7X8TXY85EZ' where id=2; -update noar ti set b1='53UX1QOKRL7X8TXY85EZ' where id=2; -update noar tt set b2='IHKV66Q2MTXPGWJJ' where id=2; -update noar ti set b2='IHKV66Q2MTXPGWJJ' where id=2; -update noar tt set b0='I0BGQKWU5L5JOKJWDLGXUKJDIP' where id=3; -update noar ti set b0='I0BGQKWU5L5JOKJWDLGXUKJDIP' where id=3; -update noar tt set b1='I18ATAJ20NKWC798E8EPIKQ4PYRH1EIZ' where id=3; -update noar ti set b1='I18ATAJ20NKWC798E8EPIKQ4PYRH1EIZ' where id=3; -update noar tt set b2='5' where id=3; -update noar ti set b2='5' where id=3; -update noar tt set b0='XSLQBWR13ENOHEY2W' where id=4; -update noar ti set b0='XSLQBWR13ENOHEY2W' where id=4; -update noar tt set b1='Z' where id=4; -update noar ti set b1='Z' where id=4; -update noar tt set b2='J54QREWMG121FEVNRC0SOAPBWB00YML8' where id=4; -update noar ti set b2='J54QREWMG121FEVNRC0SOAPBWB00YML8' where id=4; -update noar tt set b0='COAA589ST1CR0KT9I8RV0YU' where id=5; -update noar ti set b0='COAA589ST1CR0KT9I8RV0YU' where id=5; -update noar tt set b1='ZE72TSPZOVD50KLOKOP' where id=5; -update noar ti set b1='ZE72TSPZOVD50KLOKOP' where id=5; -update noar tt set b2='JH9ILCHR9WOVD55OOY34ZKVNU6' where id=5; -update noar ti set b2='JH9ILCHR9WOVD55OOY34ZKVNU6' where id=5; -update noar tt set b0='BVLQB5IZ7FYRS7YHET0PWZ' where id=6; -update noar ti set b0='BVLQB5IZ7FYRS7YHET0PWZ' where id=6; -update noar tt set b1='ORKV' where id=6; -update noar ti set b1='ORKV' where id=6; -update noar tt set b2='ZAPAO0VY74V2GNBM204HIE9NEO3OL1S' where id=6; -update noar ti set b2='ZAPAO0VY74V2GNBM204HIE9NEO3OL1S' where id=6; -update noar tt set b0='CP06CLD2RARFYGE8' where id=7; -update noar ti set b0='CP06CLD2RARFYGE8' where id=7; -update noar tt set b1='GTKGXWTKS14QVAHPND5' where id=7; -update noar ti set b1='GTKGXWTKS14QVAHPND5' where id=7; -update noar tt set b2='CM' where id=7; -update noar ti set b2='CM' where id=7; -update noar tt set b0='A3SJHCG64MY3SDDGP1H4TMFRJ9309D1S' where id=8; -update noar ti set b0='A3SJHCG64MY3SDDGP1H4TMFRJ9309D1S' where id=8; -update noar tt set b1='QR6J3GUTI8PHITP' where id=8; -update noar ti set b1='QR6J3GUTI8PHITP' where id=8; -update noar tt set b2='INP2JHVS1KGJ8F2X7AHYX8WMEVMOI87V' where id=8; -update noar ti set b2='INP2JHVS1KGJ8F2X7AHYX8WMEVMOI87V' where id=8; -update noar tt set b0='4OOENX85VMTHK0YOO4VASHQJ6FW4JTG' where id=9; -update noar ti set b0='4OOENX85VMTHK0YOO4VASHQJ6FW4JTG' where id=9; -update noar tt set b1='QY1D23A7XH3X' where id=9; -update noar ti set b1='QY1D23A7XH3X' where id=9; -update noar tt set b2='IZJJRU7DRVI3F2' where id=9; -update noar ti set b2='IZJJRU7DRVI3F2' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 text not null, -b1 text not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='ZOJ9SW49HXQQAZFK' where id=1; -update noar ti set b0='ZOJ9SW49HXQQAZFK' where id=1; -update noar tt set b1='6YP47XZYE1MVTK65OERJKIL2YET80BK' where id=1; -update noar ti set b1='6YP47XZYE1MVTK65OERJKIL2YET80BK' where id=1; -update noar tt set b2='K6B2HO6PT' where id=1; -update noar ti set b2='K6B2HO6PT' where id=1; -update noar tt set b0='G7UWUB4' where id=2; -update noar ti set b0='G7UWUB4' where id=2; -update noar tt set b1='H5NY6M6N96BLF9ICD2M8Y66VE' where id=2; -update noar ti set b1='H5NY6M6N96BLF9ICD2M8Y66VE' where id=2; -update noar tt set b2='DH0SBB0MMP09FDKGYRXGVNU1G92P44' where id=2; -update noar ti set b2='DH0SBB0MMP09FDKGYRXGVNU1G92P44' where id=2; -update noar tt set b0='GPHWBK8' where id=3; -update noar ti set b0='GPHWBK8' where id=3; -update noar tt set b1='TQ2JG9D0WP48GOR04L3GTDRBHG' where id=3; -update noar ti set b1='TQ2JG9D0WP48GOR04L3GTDRBHG' where id=3; -update noar tt set b2='AT1V1LM2K3G' where id=3; -update noar ti set b2='AT1V1LM2K3G' where id=3; -update noar tt set b0='QI4AM1Q8W5L4ENGSCR6KPQZOL9S6IF' where id=4; -update noar ti set b0='QI4AM1Q8W5L4ENGSCR6KPQZOL9S6IF' where id=4; -update noar tt set b1='PA2IBLRSF2USL6W32J7DSNLUVPUONY7H' where id=4; -update noar ti set b1='PA2IBLRSF2USL6W32J7DSNLUVPUONY7H' where id=4; -update noar tt set b2='735WPLOM' where id=4; -update noar ti set b2='735WPLOM' where id=4; -update noar tt set b0='U8MXOUAJU8Q0HLQZ8U5SLN9' where id=5; -update noar ti set b0='U8MXOUAJU8Q0HLQZ8U5SLN9' where id=5; -update noar tt set b1='G15702GA2MAUTTE9L87GY' where id=5; -update noar ti set b1='G15702GA2MAUTTE9L87GY' where id=5; -update noar tt set b2='NCWJ661R' where id=5; -update noar ti set b2='NCWJ661R' where id=5; -update noar tt set b0='939WN2' where id=6; -update noar ti set b0='939WN2' where id=6; -update noar tt set b1='01RSWCKNG7KR6GRAV7FLB901IYQV' where id=6; -update noar ti set b1='01RSWCKNG7KR6GRAV7FLB901IYQV' where id=6; -update noar tt set b2='B' where id=6; -update noar ti set b2='B' where id=6; -update noar tt set b0='1RNSOBU73X' where id=7; -update noar ti set b0='1RNSOBU73X' where id=7; -update noar tt set b1='3W606F9XRYI89205LMZNG1BS19XNU' where id=7; -update noar ti set b1='3W606F9XRYI89205LMZNG1BS19XNU' where id=7; -update noar tt set b2='JH4HDYDVZT9ITR' where id=7; -update noar ti set b2='JH4HDYDVZT9ITR' where id=7; -update noar tt set b0='PHJU3GC28F97RFABA2V69GGB0BUT235' where id=8; -update noar ti set b0='PHJU3GC28F97RFABA2V69GGB0BUT235' where id=8; -update noar tt set b1='53XB8R8PWE1NNNB7' where id=8; -update noar ti set b1='53XB8R8PWE1NNNB7' where id=8; -update noar tt set b2='UFPD2BL4SIOGE4VBF7O2O6L68VT' where id=8; -update noar ti set b2='UFPD2BL4SIOGE4VBF7O2O6L68VT' where id=8; -update noar tt set b0='V4F3D791' where id=9; -update noar ti set b0='V4F3D791' where id=9; -update noar tt set b1='9H4PC2PS3YEKU' where id=9; -update noar ti set b1='9H4PC2PS3YEKU' where id=9; -update noar tt set b2='6YVZOJIQCVDTPSX6N6GRG' where id=9; -update noar ti set b2='6YVZOJIQCVDTPSX6N6GRG' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 text null, -b1 text null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='8PFJXWHPTLME3MS7VAJ9ONHHQQ' where id=1; -update noar ti set b0='8PFJXWHPTLME3MS7VAJ9ONHHQQ' where id=1; -update noar tt set b1='C6RF5LRN62Q7TTG' where id=1; -update noar ti set b1='C6RF5LRN62Q7TTG' where id=1; -update noar tt set b2='X' where id=1; -update noar ti set b2='X' where id=1; -update noar tt set b0='YR4KE' where id=2; -update noar ti set b0='YR4KE' where id=2; -update noar tt set b1='R1WEIKTVQNOODULE' where id=2; -update noar ti set b1='R1WEIKTVQNOODULE' where id=2; -update noar tt set b2='0E2RPX0CRPKS5XXAAA9YDC5HL' where id=2; -update noar ti set b2='0E2RPX0CRPKS5XXAAA9YDC5HL' where id=2; -update noar tt set b0='ZQ80K8E8KJSMFXX' where id=3; -update noar ti set b0='ZQ80K8E8KJSMFXX' where id=3; -update noar tt set b1='13' where id=3; -update noar ti set b1='13' where id=3; -update noar tt set b2='2P1LXI' where id=3; -update noar ti set b2='2P1LXI' where id=3; -update noar tt set b0='YJMVH7FHL83P7DAR6BE396792V5FTXXE' where id=4; -update noar ti set b0='YJMVH7FHL83P7DAR6BE396792V5FTXXE' where id=4; -update noar tt set b1='1O32R1Q57Y6VBUG49PIIQ' where id=4; -update noar ti set b1='1O32R1Q57Y6VBUG49PIIQ' where id=4; -update noar tt set b2='J2Q' where id=4; -update noar ti set b2='J2Q' where id=4; -update noar tt set b0='JHZ60NXWD1Z1AU1' where id=5; -update noar ti set b0='JHZ60NXWD1Z1AU1' where id=5; -update noar tt set b1='KWRSEAMTEJR2FA7' where id=5; -update noar ti set b1='KWRSEAMTEJR2FA7' where id=5; -update noar tt set b2='IPIYGP01EUO' where id=5; -update noar ti set b2='IPIYGP01EUO' where id=5; -update noar tt set b0='S1P0MAEVOEQKFWAMRFHQA99ZB' where id=6; -update noar ti set b0='S1P0MAEVOEQKFWAMRFHQA99ZB' where id=6; -update noar tt set b1='DQOJ2V96R8H' where id=6; -update noar ti set b1='DQOJ2V96R8H' where id=6; -update noar tt set b2='70T9DR7KCA7WS5RLA40IPSJP' where id=6; -update noar ti set b2='70T9DR7KCA7WS5RLA40IPSJP' where id=6; -update noar tt set b0='TRMSFWV66PF' where id=7; -update noar ti set b0='TRMSFWV66PF' where id=7; -update noar tt set b1='8WSO2LT0VUHP1RMIM' where id=7; -update noar ti set b1='8WSO2LT0VUHP1RMIM' where id=7; -update noar tt set b2='DHKM3N3IJVJC' where id=7; -update noar ti set b2='DHKM3N3IJVJC' where id=7; -update noar tt set b0='T9GZ47NM' where id=8; -update noar ti set b0='T9GZ47NM' where id=8; -update noar tt set b1='68I4PDRVJE2' where id=8; -update noar ti set b1='68I4PDRVJE2' where id=8; -update noar tt set b2='ALPRPCMWH4I9OCHFRJ5WSRP4KORZFO7A' where id=8; -update noar ti set b2='ALPRPCMWH4I9OCHFRJ5WSRP4KORZFO7A' where id=8; -update noar tt set b0='2PH7G3W' where id=9; -update noar ti set b0='2PH7G3W' where id=9; -update noar tt set b1='VF4MQFQB9V6XA64VZV73Q6V1B037E9VO' where id=9; -update noar ti set b1='VF4MQFQB9V6XA64VZV73Q6V1B037E9VO' where id=9; -update noar tt set b2='S' where id=9; -update noar ti set b2='S' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 text not null, -b1 text not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='QUJ9LBDNAXIHUFMR991SEHLDPJM' where id=1; -update noar ti set b0='QUJ9LBDNAXIHUFMR991SEHLDPJM' where id=1; -update noar tt set b1='UWA642K8WUJN78WE2R0A3AC1Z' where id=1; -update noar ti set b1='UWA642K8WUJN78WE2R0A3AC1Z' where id=1; -update noar tt set b2='RDZ9US' where id=1; -update noar ti set b2='RDZ9US' where id=1; -update noar tt set b0='4EW1J0I8' where id=2; -update noar ti set b0='4EW1J0I8' where id=2; -update noar tt set b1='P0IRCH8UR9KU52478' where id=2; -update noar ti set b1='P0IRCH8UR9KU52478' where id=2; -update noar tt set b2='HJOZI2OW98D7' where id=2; -update noar ti set b2='HJOZI2OW98D7' where id=2; -update noar tt set b0='9RJ9D9369596' where id=3; -update noar ti set b0='9RJ9D9369596' where id=3; -update noar tt set b1='TVXNJ5BU691U8Z01S' where id=3; -update noar ti set b1='TVXNJ5BU691U8Z01S' where id=3; -update noar tt set b2='C9LZXIVO2R1F3BDLA1HDR7' where id=3; -update noar ti set b2='C9LZXIVO2R1F3BDLA1HDR7' where id=3; -update noar tt set b0='IML54WVA5PRYNRPE0R7VAVD7DGL' where id=4; -update noar ti set b0='IML54WVA5PRYNRPE0R7VAVD7DGL' where id=4; -update noar tt set b1='FUOSDQBJ203P' where id=4; -update noar ti set b1='FUOSDQBJ203P' where id=4; -update noar tt set b2='QC11' where id=4; -update noar ti set b2='QC11' where id=4; -update noar tt set b0='OL2UZNX6J19SWR90S5ECPB2HC' where id=5; -update noar ti set b0='OL2UZNX6J19SWR90S5ECPB2HC' where id=5; -update noar tt set b1='A' where id=5; -update noar ti set b1='A' where id=5; -update noar tt set b2='68N06E5CUAV792AO' where id=5; -update noar ti set b2='68N06E5CUAV792AO' where id=5; -update noar tt set b0='H4U5K' where id=6; -update noar ti set b0='H4U5K' where id=6; -update noar tt set b1='6CTY54R1CV7MP8IRSITGY2E' where id=6; -update noar ti set b1='6CTY54R1CV7MP8IRSITGY2E' where id=6; -update noar tt set b2='Y50MFVAV039SF9YQUXIXIQP' where id=6; -update noar ti set b2='Y50MFVAV039SF9YQUXIXIQP' where id=6; -update noar tt set b0='VJ934C6XP73X7IHALF2008YX1RXCHKLL' where id=7; -update noar ti set b0='VJ934C6XP73X7IHALF2008YX1RXCHKLL' where id=7; -update noar tt set b1='F1FBJUSLMKORRUK0F2PF5JQWAV' where id=7; -update noar ti set b1='F1FBJUSLMKORRUK0F2PF5JQWAV' where id=7; -update noar tt set b2='8I1VRK' where id=7; -update noar ti set b2='8I1VRK' where id=7; -update noar tt set b0='1IFCV5OWSCDA0H69FP2L' where id=8; -update noar ti set b0='1IFCV5OWSCDA0H69FP2L' where id=8; -update noar tt set b1='U6ZE3HIWNQPFS0VMSV' where id=8; -update noar ti set b1='U6ZE3HIWNQPFS0VMSV' where id=8; -update noar tt set b2='OPO075JAZXT62TEHK' where id=8; -update noar ti set b2='OPO075JAZXT62TEHK' where id=8; -update noar tt set b0='UDXBKR5BT' where id=9; -update noar ti set b0='UDXBKR5BT' where id=9; -update noar tt set b1='M5M687DEUEBDZJ0OMCR71DGGDN84YG0' where id=9; -update noar ti set b1='M5M687DEUEBDZJ0OMCR71DGGDN84YG0' where id=9; -update noar tt set b2='3YV1IT' where id=9; -update noar ti set b2='3YV1IT' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 text null, -b1 text null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='P4AD2RGQ5Z8FCJFHPY1XPBFQ' where id=1; -update noar ti set b0='P4AD2RGQ5Z8FCJFHPY1XPBFQ' where id=1; -update noar tt set b1='00MV75PG3' where id=1; -update noar ti set b1='00MV75PG3' where id=1; -update noar tt set b2='RYVYLRSWKBTDMYEC1L1JT9D5ZMFX' where id=1; -update noar ti set b2='RYVYLRSWKBTDMYEC1L1JT9D5ZMFX' where id=1; -update noar tt set b0='U2TANQAGA77NH1K58V2R3' where id=2; -update noar ti set b0='U2TANQAGA77NH1K58V2R3' where id=2; -update noar tt set b1='63VLXO1C3D54A2' where id=2; -update noar ti set b1='63VLXO1C3D54A2' where id=2; -update noar tt set b2='JK2HLGFR8KK9F3KM3THI8' where id=2; -update noar ti set b2='JK2HLGFR8KK9F3KM3THI8' where id=2; -update noar tt set b0='BFIDS55EUYYHFCPQ7RVFZTZY35SDFP' where id=3; -update noar ti set b0='BFIDS55EUYYHFCPQ7RVFZTZY35SDFP' where id=3; -update noar tt set b1='UU6H2SZWJTX7MT8CH' where id=3; -update noar ti set b1='UU6H2SZWJTX7MT8CH' where id=3; -update noar tt set b2='JISET1GTB2PXR' where id=3; -update noar ti set b2='JISET1GTB2PXR' where id=3; -update noar tt set b0='E8PGHJ00E0EV8D9PJG44XKMWC1ZFPECH' where id=4; -update noar ti set b0='E8PGHJ00E0EV8D9PJG44XKMWC1ZFPECH' where id=4; -update noar tt set b1='XCO5EK1BCRPXK' where id=4; -update noar ti set b1='XCO5EK1BCRPXK' where id=4; -update noar tt set b2='N4DKM' where id=4; -update noar ti set b2='N4DKM' where id=4; -update noar tt set b0='4LGHUC2' where id=5; -update noar ti set b0='4LGHUC2' where id=5; -update noar tt set b1='SQG1PEBF3X44D0P4QI6936S93' where id=5; -update noar ti set b1='SQG1PEBF3X44D0P4QI6936S93' where id=5; -update noar tt set b2='V1SNEVI1QR31ZKJ5ZP4' where id=5; -update noar ti set b2='V1SNEVI1QR31ZKJ5ZP4' where id=5; -update noar tt set b0='8' where id=6; -update noar ti set b0='8' where id=6; -update noar tt set b1='LI9M938N2DY6O63RYS3' where id=6; -update noar ti set b1='LI9M938N2DY6O63RYS3' where id=6; -update noar tt set b2='I91ME1ZUAD6H2XO86WJK5BHEQS' where id=6; -update noar ti set b2='I91ME1ZUAD6H2XO86WJK5BHEQS' where id=6; -update noar tt set b0='ZDH6QOA6V42TN' where id=7; -update noar ti set b0='ZDH6QOA6V42TN' where id=7; -update noar tt set b1='OCIJD' where id=7; -update noar ti set b1='OCIJD' where id=7; -update noar tt set b2='NA9621YEEDZGASGE0' where id=7; -update noar ti set b2='NA9621YEEDZGASGE0' where id=7; -update noar tt set b0='7FGZFLEPTGIZZKZMRSMY9' where id=8; -update noar ti set b0='7FGZFLEPTGIZZKZMRSMY9' where id=8; -update noar tt set b1='61U3PWW00LL731GIOCZG' where id=8; -update noar ti set b1='61U3PWW00LL731GIOCZG' where id=8; -update noar tt set b2='4573VI901F86GDSDO4NL9661B' where id=8; -update noar ti set b2='4573VI901F86GDSDO4NL9661B' where id=8; -update noar tt set b0='BB1T3VLBBTF3J1JQIIM3' where id=9; -update noar ti set b0='BB1T3VLBBTF3J1JQIIM3' where id=9; -update noar tt set b1='YODBR' where id=9; -update noar ti set b1='YODBR' where id=9; -update noar tt set b2='PB6SXV8USIP4U0UQLUSONBQ0' where id=9; -update noar ti set b2='PB6SXV8USIP4U0UQLUSONBQ0' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 text not null, -b1 text not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='31PKJM51YE4' where id=1; -update noar ti set b0='31PKJM51YE4' where id=1; -update noar tt set b1='WXXEI' where id=1; -update noar ti set b1='WXXEI' where id=1; -update noar tt set b2='YLN3FHUROB2FO2BR3DFS6' where id=1; -update noar ti set b2='YLN3FHUROB2FO2BR3DFS6' where id=1; -update noar tt set b0='HF4HBXQ6IS' where id=2; -update noar ti set b0='HF4HBXQ6IS' where id=2; -update noar tt set b1='Q8PDD' where id=2; -update noar ti set b1='Q8PDD' where id=2; -update noar tt set b2='O3X1SR3BJI2ZV9' where id=2; -update noar ti set b2='O3X1SR3BJI2ZV9' where id=2; -update noar tt set b0='UKDG5PRMIO4I' where id=3; -update noar ti set b0='UKDG5PRMIO4I' where id=3; -update noar tt set b1='JNO5J8O4NFBJEUN5QC8YH3VTBS4Y4' where id=3; -update noar ti set b1='JNO5J8O4NFBJEUN5QC8YH3VTBS4Y4' where id=3; -update noar tt set b2='MAEOTNCLB30YK2AP8N' where id=3; -update noar ti set b2='MAEOTNCLB30YK2AP8N' where id=3; -update noar tt set b0='NUBEYHPAOZOXHSY1TOLMN6F3JHXJ0Y72' where id=4; -update noar ti set b0='NUBEYHPAOZOXHSY1TOLMN6F3JHXJ0Y72' where id=4; -update noar tt set b1='RBR0JR6F6B8GWHK1W40BW4' where id=4; -update noar ti set b1='RBR0JR6F6B8GWHK1W40BW4' where id=4; -update noar tt set b2='X7WECAGSM9P5' where id=4; -update noar ti set b2='X7WECAGSM9P5' where id=4; -update noar tt set b0='DRVXBSP42P' where id=5; -update noar ti set b0='DRVXBSP42P' where id=5; -update noar tt set b1='MEO5' where id=5; -update noar ti set b1='MEO5' where id=5; -update noar tt set b2='NWR7410JBM0QX101I' where id=5; -update noar ti set b2='NWR7410JBM0QX101I' where id=5; -update noar tt set b0='U4LM8OY6H744' where id=6; -update noar ti set b0='U4LM8OY6H744' where id=6; -update noar tt set b1='JZLIYZVWLOSH7RQ6' where id=6; -update noar ti set b1='JZLIYZVWLOSH7RQ6' where id=6; -update noar tt set b2='AK7ERXV9UDLOAUFC6ZD8Z' where id=6; -update noar ti set b2='AK7ERXV9UDLOAUFC6ZD8Z' where id=6; -update noar tt set b0='EI13RVZEBO' where id=7; -update noar ti set b0='EI13RVZEBO' where id=7; -update noar tt set b1='MOKVMZ9NOFBE5MZ1R3' where id=7; -update noar ti set b1='MOKVMZ9NOFBE5MZ1R3' where id=7; -update noar tt set b2='IS1909KHX46Y52T75' where id=7; -update noar ti set b2='IS1909KHX46Y52T75' where id=7; -update noar tt set b0='7IAF' where id=8; -update noar ti set b0='7IAF' where id=8; -update noar tt set b1='V53X6XCV3KSPPXJV' where id=8; -update noar ti set b1='V53X6XCV3KSPPXJV' where id=8; -update noar tt set b2='F15HUXD0D2Z' where id=8; -update noar ti set b2='F15HUXD0D2Z' where id=8; -update noar tt set b0='7SA2WI9HJ16JCG92O78I0' where id=9; -update noar ti set b0='7SA2WI9HJ16JCG92O78I0' where id=9; -update noar tt set b1='QYVUDKJ' where id=9; -update noar ti set b1='QYVUDKJ' where id=9; -update noar tt set b2='75EKSBDTZEY6ZMUSR9RG99LKG3I' where id=9; -update noar ti set b2='75EKSBDTZEY6ZMUSR9RG99LKG3I' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 text null, -b1 text null, -b2 text null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='KGT2OUVZ4RW75Z720HTRXUEUT0C9L' where id=1; -update noar ti set b0='KGT2OUVZ4RW75Z720HTRXUEUT0C9L' where id=1; -update noar tt set b1='7VVLWMQ5RZI49LQ3CYGTBW37VRV1C08Y' where id=1; -update noar ti set b1='7VVLWMQ5RZI49LQ3CYGTBW37VRV1C08Y' where id=1; -update noar tt set b2='UHM3PVVOFK' where id=1; -update noar ti set b2='UHM3PVVOFK' where id=1; -update noar tt set b0='3WLFBVTSTFOAR1H6LZJII57' where id=2; -update noar ti set b0='3WLFBVTSTFOAR1H6LZJII57' where id=2; -update noar tt set b1='3RV5I3S44HLJ5C22YE1V1LZHV4XU5O7' where id=2; -update noar ti set b1='3RV5I3S44HLJ5C22YE1V1LZHV4XU5O7' where id=2; -update noar tt set b2='EH' where id=2; -update noar ti set b2='EH' where id=2; -update noar tt set b0='04K67BHVGEVC2IIE' where id=3; -update noar ti set b0='04K67BHVGEVC2IIE' where id=3; -update noar tt set b1='VQRJQFRDPSN2EO88GU84C' where id=3; -update noar ti set b1='VQRJQFRDPSN2EO88GU84C' where id=3; -update noar tt set b2='0E' where id=3; -update noar ti set b2='0E' where id=3; -update noar tt set b0='Z4KC4F123J711' where id=4; -update noar ti set b0='Z4KC4F123J711' where id=4; -update noar tt set b1='K07' where id=4; -update noar ti set b1='K07' where id=4; -update noar tt set b2='3CEN03R' where id=4; -update noar ti set b2='3CEN03R' where id=4; -update noar tt set b0='LZXPD2UT' where id=5; -update noar ti set b0='LZXPD2UT' where id=5; -update noar tt set b1='E386' where id=5; -update noar ti set b1='E386' where id=5; -update noar tt set b2='N6V64UW' where id=5; -update noar ti set b2='N6V64UW' where id=5; -update noar tt set b0='MZE3EVZ0GTQ847GEAHQ' where id=6; -update noar ti set b0='MZE3EVZ0GTQ847GEAHQ' where id=6; -update noar tt set b1='4J0F9WUCWY06C5IV9QBLUXXE1' where id=6; -update noar ti set b1='4J0F9WUCWY06C5IV9QBLUXXE1' where id=6; -update noar tt set b2='FRCJF1683XAKVEE' where id=6; -update noar ti set b2='FRCJF1683XAKVEE' where id=6; -update noar tt set b0='DR8V3B9VRB8UWPKDYNWN9VN14B' where id=7; -update noar ti set b0='DR8V3B9VRB8UWPKDYNWN9VN14B' where id=7; -update noar tt set b1='OTNQCJDJRKVUXXPU' where id=7; -update noar ti set b1='OTNQCJDJRKVUXXPU' where id=7; -update noar tt set b2='BIIJLOMAME661KQ7A2' where id=7; -update noar ti set b2='BIIJLOMAME661KQ7A2' where id=7; -update noar tt set b0='IS17X2UTDBJQBKOHQ997MQAFM7XK' where id=8; -update noar ti set b0='IS17X2UTDBJQBKOHQ997MQAFM7XK' where id=8; -update noar tt set b1='4103QO4O9HPIZ7Z970RORJ85J99QU2J2' where id=8; -update noar ti set b1='4103QO4O9HPIZ7Z970RORJ85J99QU2J2' where id=8; -update noar tt set b2='AWCPPC74S89S7GBV9ZZMJJN2CZX' where id=8; -update noar ti set b2='AWCPPC74S89S7GBV9ZZMJJN2CZX' where id=8; -update noar tt set b0='7373' where id=9; -update noar ti set b0='7373' where id=9; -update noar tt set b1='42O9AXDJDCC6GCTD7FI7' where id=9; -update noar ti set b1='42O9AXDJDCC6GCTD7FI7' where id=9; -update noar tt set b2='GO6MZKMUBB318SARJ' where id=9; -update noar ti set b2='GO6MZKMUBB318SARJ' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -b0 text not null, -b1 text not null, -b2 text not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='BN5I0IAG1H81K6N61ZL5DLGEEMR' where id=1; -update noar ti set b0='BN5I0IAG1H81K6N61ZL5DLGEEMR' where id=1; -update noar tt set b1='VI48T0MVLTMP21BJS607BACKW8' where id=1; -update noar ti set b1='VI48T0MVLTMP21BJS607BACKW8' where id=1; -update noar tt set b2='LR' where id=1; -update noar ti set b2='LR' where id=1; -update noar tt set b0='AOJ79MI3DOM7BB6IVCV4CN8' where id=2; -update noar ti set b0='AOJ79MI3DOM7BB6IVCV4CN8' where id=2; -update noar tt set b1='WSXB92NDOIWDCLCQGD2LM4CZX' where id=2; -update noar ti set b1='WSXB92NDOIWDCLCQGD2LM4CZX' where id=2; -update noar tt set b2='KNHK' where id=2; -update noar ti set b2='KNHK' where id=2; -update noar tt set b0='2G9N7R6EFQA7JE13ATMA3AH357VDS' where id=3; -update noar ti set b0='2G9N7R6EFQA7JE13ATMA3AH357VDS' where id=3; -update noar tt set b1='WJYP9XQVJ8RKEPQAGV' where id=3; -update noar ti set b1='WJYP9XQVJ8RKEPQAGV' where id=3; -update noar tt set b2='BFXR1STWUZY9RM' where id=3; -update noar ti set b2='BFXR1STWUZY9RM' where id=3; -update noar tt set b0='K0F3W234B0LZY6' where id=4; -update noar ti set b0='K0F3W234B0LZY6' where id=4; -update noar tt set b1='O5T9Y10C8OED2OC92ZJ8AB5WBCXCOB9S' where id=4; -update noar ti set b1='O5T9Y10C8OED2OC92ZJ8AB5WBCXCOB9S' where id=4; -update noar tt set b2='GBUS6Y9ECF' where id=4; -update noar ti set b2='GBUS6Y9ECF' where id=4; -update noar tt set b0='ZHC' where id=5; -update noar ti set b0='ZHC' where id=5; -update noar tt set b1='DQR9P5VSSBA01WQ' where id=5; -update noar ti set b1='DQR9P5VSSBA01WQ' where id=5; -update noar tt set b2='5' where id=5; -update noar ti set b2='5' where id=5; -update noar tt set b0='6T62BGHYI4JSUP45AT2ANX5' where id=6; -update noar ti set b0='6T62BGHYI4JSUP45AT2ANX5' where id=6; -update noar tt set b1='2XP9KMPQM56VQAPFI9H4CMMM4BW' where id=6; -update noar ti set b1='2XP9KMPQM56VQAPFI9H4CMMM4BW' where id=6; -update noar tt set b2='0QZ5R40' where id=6; -update noar ti set b2='0QZ5R40' where id=6; -update noar tt set b0='CXCL4RYSR57W7V3G1QK3M5W0ZH7' where id=7; -update noar ti set b0='CXCL4RYSR57W7V3G1QK3M5W0ZH7' where id=7; -update noar tt set b1='0HJLH1JK' where id=7; -update noar ti set b1='0HJLH1JK' where id=7; -update noar tt set b2='R09YIQW78' where id=7; -update noar ti set b2='R09YIQW78' where id=7; -update noar tt set b0='QLDCVCMHCISPBS8H9I' where id=8; -update noar ti set b0='QLDCVCMHCISPBS8H9I' where id=8; -update noar tt set b1='9Z1MCQY6GN5CVGWTE266LIE' where id=8; -update noar ti set b1='9Z1MCQY6GN5CVGWTE266LIE' where id=8; -update noar tt set b2='2IQ4JF3X0RK181I7DKZY' where id=8; -update noar ti set b2='2IQ4JF3X0RK181I7DKZY' where id=8; -update noar tt set b0='UDWIQTSM59BA8DBSPNLYS0EEJDFCFG' where id=9; -update noar ti set b0='UDWIQTSM59BA8DBSPNLYS0EEJDFCFG' where id=9; -update noar tt set b1='L' where id=9; -update noar ti set b1='L' where id=9; -update noar tt set b2='OQ22J6SMTSA0KSHTMU' where id=9; -update noar ti set b2='OQ22J6SMTSA0KSHTMU' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; +This test does not produce any output on success diff --git a/mysql-test/suite/tokudb/r/fast_update_blobs_fixed_varchar.result b/mysql-test/suite/tokudb/r/fast_update_blobs_fixed_varchar.result deleted file mode 100644 index 94e5da921a0b..000000000000 --- a/mysql-test/suite/tokudb/r/fast_update_blobs_fixed_varchar.result +++ /dev/null @@ -1,33026 +0,0 @@ -set default_storage_engine='tokudb'; -drop table if exists t; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 tinyblob null, -b1 tinyblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='UP9F5O0JN4QXD8HH' where id=1; -update noar ti set v0='UP9F5O0JN4QXD8HH' where id=1; -update noar tt set b0='EQGX2U37E6GA0YSE85' where id=1; -update noar ti set b0='EQGX2U37E6GA0YSE85' where id=1; -update noar tt set v0='EAYWOECTE' where id=1; -update noar ti set v0='EAYWOECTE' where id=1; -update noar tt set b1='3DQMQ1AYYQMVH7KIDGQRPPYR2DG5L4FX' where id=1; -update noar ti set b1='3DQMQ1AYYQMVH7KIDGQRPPYR2DG5L4FX' where id=1; -update noar tt set v0='QAAYX2OSCJTKYCHQPOEVKQBB13B4U' where id=1; -update noar ti set v0='QAAYX2OSCJTKYCHQPOEVKQBB13B4U' where id=1; -update noar tt set b2='R7P1J6O112EUCRDX0WCD7IDVXRJ68' where id=1; -update noar ti set b2='R7P1J6O112EUCRDX0WCD7IDVXRJ68' where id=1; -update noar tt set v0='C2G3ODA9SGFXDOKM15LR9ZD8X' where id=2; -update noar ti set v0='C2G3ODA9SGFXDOKM15LR9ZD8X' where id=2; -update noar tt set b0='P2AACV03N5JCQ' where id=2; -update noar ti set b0='P2AACV03N5JCQ' where id=2; -update noar tt set v0='B6I2SNUZO7BF17MH8EN7WHCPCIE1NB' where id=2; -update noar ti set v0='B6I2SNUZO7BF17MH8EN7WHCPCIE1NB' where id=2; -update noar tt set b1='P39L5F08ZPVJE010T1ACA9ROE5Y5KWK' where id=2; -update noar ti set b1='P39L5F08ZPVJE010T1ACA9ROE5Y5KWK' where id=2; -update noar tt set v0='UEX612R01T443' where id=2; -update noar ti set v0='UEX612R01T443' where id=2; -update noar tt set b2='9BXWW9NT7MJPZH6E4LW' where id=2; -update noar ti set b2='9BXWW9NT7MJPZH6E4LW' where id=2; -update noar tt set v0='8VRY65Q0PZXYZMEWB7PAD08KK5T90973' where id=3; -update noar ti set v0='8VRY65Q0PZXYZMEWB7PAD08KK5T90973' where id=3; -update noar tt set b0='VN13VOB0DINTY1UYRUZQF1ASFG' where id=3; -update noar ti set b0='VN13VOB0DINTY1UYRUZQF1ASFG' where id=3; -update noar tt set v0='NKWSR6DE2RCFOSHBOWLUUDZ9CL4T8' where id=3; -update noar ti set v0='NKWSR6DE2RCFOSHBOWLUUDZ9CL4T8' where id=3; -update noar tt set b1='QB' where id=3; -update noar ti set b1='QB' where id=3; -update noar tt set v0='2EKWUEP95ULXGJB4OF' where id=3; -update noar ti set v0='2EKWUEP95ULXGJB4OF' where id=3; -update noar tt set b2='Q6IYFN' where id=3; -update noar ti set b2='Q6IYFN' where id=3; -update noar tt set v0='IKQCVMC' where id=4; -update noar ti set v0='IKQCVMC' where id=4; -update noar tt set b0='N535EEK3NPFVSLTB2FAFWRROGD744ZN' where id=4; -update noar ti set b0='N535EEK3NPFVSLTB2FAFWRROGD744ZN' where id=4; -update noar tt set v0='QHNVMNDLY3G4WOVP' where id=4; -update noar ti set v0='QHNVMNDLY3G4WOVP' where id=4; -update noar tt set b1='HDPRGT6XXXGVMZKEN9DN9' where id=4; -update noar ti set b1='HDPRGT6XXXGVMZKEN9DN9' where id=4; -update noar tt set v0='CV12CSM2AVQGZPHXA3Y2' where id=4; -update noar ti set v0='CV12CSM2AVQGZPHXA3Y2' where id=4; -update noar tt set b2='CW7Z0PVFFDQ8CK' where id=4; -update noar ti set b2='CW7Z0PVFFDQ8CK' where id=4; -update noar tt set v0='7SC69BS2SHACUDZVAT8KFC4' where id=5; -update noar ti set v0='7SC69BS2SHACUDZVAT8KFC4' where id=5; -update noar tt set b0='JDNI7VC' where id=5; -update noar ti set b0='JDNI7VC' where id=5; -update noar tt set v0='5SBZI8TP' where id=5; -update noar ti set v0='5SBZI8TP' where id=5; -update noar tt set b1='RTFVTNJXKCRHBSGJRY0IZN' where id=5; -update noar ti set b1='RTFVTNJXKCRHBSGJRY0IZN' where id=5; -update noar tt set v0='56VE0IR8LWSTMCHM' where id=5; -update noar ti set v0='56VE0IR8LWSTMCHM' where id=5; -update noar tt set b2='3FSJ78' where id=5; -update noar ti set b2='3FSJ78' where id=5; -update noar tt set v0='2X4Q8S76IL22ER5A2GVT' where id=6; -update noar ti set v0='2X4Q8S76IL22ER5A2GVT' where id=6; -update noar tt set b0='Y9101E34S6Z2OYB5MDYQPZGCM3IZL7' where id=6; -update noar ti set b0='Y9101E34S6Z2OYB5MDYQPZGCM3IZL7' where id=6; -update noar tt set v0='YQQR77N2QTM' where id=6; -update noar ti set v0='YQQR77N2QTM' where id=6; -update noar tt set b1='1ZALS3OP2JRCSCO8H66BE09WV8HC' where id=6; -update noar ti set b1='1ZALS3OP2JRCSCO8H66BE09WV8HC' where id=6; -update noar tt set v0='D8QT15LKKEJFNJG298Q77ZU' where id=6; -update noar ti set v0='D8QT15LKKEJFNJG298Q77ZU' where id=6; -update noar tt set b2='HYLO1AYTN' where id=6; -update noar ti set b2='HYLO1AYTN' where id=6; -update noar tt set v0='UFIWRPMOVW5C' where id=7; -update noar ti set v0='UFIWRPMOVW5C' where id=7; -update noar tt set b0='PES1N2P9GMTJDLGJAP5QDVQ4BNG' where id=7; -update noar ti set b0='PES1N2P9GMTJDLGJAP5QDVQ4BNG' where id=7; -update noar tt set v0='VLAQQZAT' where id=7; -update noar ti set v0='VLAQQZAT' where id=7; -update noar tt set b1='73FP' where id=7; -update noar ti set b1='73FP' where id=7; -update noar tt set v0='4DU1OB96AM6WMHZDR24WNN7NPI4' where id=7; -update noar ti set v0='4DU1OB96AM6WMHZDR24WNN7NPI4' where id=7; -update noar tt set b2='G1RF3N24F1U8L9I589U8WMO' where id=7; -update noar ti set b2='G1RF3N24F1U8L9I589U8WMO' where id=7; -update noar tt set v0='UYF92O382IWRRQ6MM1ZFAPQNZ8' where id=8; -update noar ti set v0='UYF92O382IWRRQ6MM1ZFAPQNZ8' where id=8; -update noar tt set b0='8KTWN9NSBQT6' where id=8; -update noar ti set b0='8KTWN9NSBQT6' where id=8; -update noar tt set v0='942BQ1D9B' where id=8; -update noar ti set v0='942BQ1D9B' where id=8; -update noar tt set b1='3IFV1B2FJY' where id=8; -update noar ti set b1='3IFV1B2FJY' where id=8; -update noar tt set v0='87I84MN9HJUQKYIFDPBRHR1' where id=8; -update noar ti set v0='87I84MN9HJUQKYIFDPBRHR1' where id=8; -update noar tt set b2='LYY8ML7GUN7UJ7IX53RYP2L' where id=8; -update noar ti set b2='LYY8ML7GUN7UJ7IX53RYP2L' where id=8; -update noar tt set v0='2XKR0RNJJPIN3Y4H' where id=9; -update noar ti set v0='2XKR0RNJJPIN3Y4H' where id=9; -update noar tt set b0='LDO4E' where id=9; -update noar ti set b0='LDO4E' where id=9; -update noar tt set v0='WHMJ' where id=9; -update noar ti set v0='WHMJ' where id=9; -update noar tt set b1='J2LM4S9MV' where id=9; -update noar ti set b1='J2LM4S9MV' where id=9; -update noar tt set v0='XXZEOMP3LRDU' where id=9; -update noar ti set v0='XXZEOMP3LRDU' where id=9; -update noar tt set b2='IE' where id=9; -update noar ti set b2='IE' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 tinyblob null, -b1 tinyblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='FV4DRG1LHP44HGV4NZR7TVIEWZ' where id=1; -update noar ti set v0='FV4DRG1LHP44HGV4NZR7TVIEWZ' where id=1; -update noar tt set b0='FS5PN4X2B32UINXW99V' where id=1; -update noar ti set b0='FS5PN4X2B32UINXW99V' where id=1; -update noar tt set v0='8MUQ8W189DGFJ5A8N8UO7NX2196MC07X' where id=1; -update noar ti set v0='8MUQ8W189DGFJ5A8N8UO7NX2196MC07X' where id=1; -update noar tt set b1='GZ3JC972E2NQEJ11M9IBZBTCXN' where id=1; -update noar ti set b1='GZ3JC972E2NQEJ11M9IBZBTCXN' where id=1; -update noar tt set v0='RHDYV4J2V78CSQI64WTQQV5MXGCR' where id=1; -update noar ti set v0='RHDYV4J2V78CSQI64WTQQV5MXGCR' where id=1; -update noar tt set b2='8MRPKVQM95Z6KHLNISO' where id=1; -update noar ti set b2='8MRPKVQM95Z6KHLNISO' where id=1; -update noar tt set v0='DXDUTO3S' where id=2; -update noar ti set v0='DXDUTO3S' where id=2; -update noar tt set b0='0I3UWLX861OUTPKVS4BN0XY' where id=2; -update noar ti set b0='0I3UWLX861OUTPKVS4BN0XY' where id=2; -update noar tt set v0='JXTIVEBV5XAVAO5D8' where id=2; -update noar ti set v0='JXTIVEBV5XAVAO5D8' where id=2; -update noar tt set b1='OLK6YMPAX' where id=2; -update noar ti set b1='OLK6YMPAX' where id=2; -update noar tt set v0='PKSX8' where id=2; -update noar ti set v0='PKSX8' where id=2; -update noar tt set b2='TR3HACE395' where id=2; -update noar ti set b2='TR3HACE395' where id=2; -update noar tt set v0='RVDWQJWJ7WJ31' where id=3; -update noar ti set v0='RVDWQJWJ7WJ31' where id=3; -update noar tt set b0='IWLR3WDB4URQJ325UVOPSAAQFE75K' where id=3; -update noar ti set b0='IWLR3WDB4URQJ325UVOPSAAQFE75K' where id=3; -update noar tt set v0='ICKMSBE7BB6XKU20326K' where id=3; -update noar ti set v0='ICKMSBE7BB6XKU20326K' where id=3; -update noar tt set b1='UNCMR8LMHNRPIV7TPUEA0WETDA' where id=3; -update noar ti set b1='UNCMR8LMHNRPIV7TPUEA0WETDA' where id=3; -update noar tt set v0='U8J0B0QD78HJJUJHB7A9R4CW27PBCEI' where id=3; -update noar ti set v0='U8J0B0QD78HJJUJHB7A9R4CW27PBCEI' where id=3; -update noar tt set b2='9O6QERAE1N5HA2ZX8XFOUVM90UANZQ' where id=3; -update noar ti set b2='9O6QERAE1N5HA2ZX8XFOUVM90UANZQ' where id=3; -update noar tt set v0='7AHJNKB1Z8U' where id=4; -update noar ti set v0='7AHJNKB1Z8U' where id=4; -update noar tt set b0='ZCTM9I' where id=4; -update noar ti set b0='ZCTM9I' where id=4; -update noar tt set v0='I8831J2C65TMWH9QG' where id=4; -update noar ti set v0='I8831J2C65TMWH9QG' where id=4; -update noar tt set b1='57GZ4NT0' where id=4; -update noar ti set b1='57GZ4NT0' where id=4; -update noar tt set v0='4ALMNYRG2AIWX1X5PUL7' where id=4; -update noar ti set v0='4ALMNYRG2AIWX1X5PUL7' where id=4; -update noar tt set b2='G8VLK2UJHDKN0CKREQU2V05HMDXT' where id=4; -update noar ti set b2='G8VLK2UJHDKN0CKREQU2V05HMDXT' where id=4; -update noar tt set v0='IFK8SRQR7OLE' where id=5; -update noar ti set v0='IFK8SRQR7OLE' where id=5; -update noar tt set b0='357P3X2S0R9V6ZXUWS' where id=5; -update noar ti set b0='357P3X2S0R9V6ZXUWS' where id=5; -update noar tt set v0='LFFTV125YF8EWV8U5PWY7LFHI5O5' where id=5; -update noar ti set v0='LFFTV125YF8EWV8U5PWY7LFHI5O5' where id=5; -update noar tt set b1='UG7KBKA931KNNT8TES3GY8XTQ' where id=5; -update noar ti set b1='UG7KBKA931KNNT8TES3GY8XTQ' where id=5; -update noar tt set v0='RK0Z2K1' where id=5; -update noar ti set v0='RK0Z2K1' where id=5; -update noar tt set b2='U6RCPA' where id=5; -update noar ti set b2='U6RCPA' where id=5; -update noar tt set v0='4MVHJPMHU72F5WMTA' where id=6; -update noar ti set v0='4MVHJPMHU72F5WMTA' where id=6; -update noar tt set b0='KCBTKDVRMH95K92' where id=6; -update noar ti set b0='KCBTKDVRMH95K92' where id=6; -update noar tt set v0='PDEJJ3T7IRI1LH4FVNM904PEN3ST108' where id=6; -update noar ti set v0='PDEJJ3T7IRI1LH4FVNM904PEN3ST108' where id=6; -update noar tt set b1='XM9OQPKZOBE' where id=6; -update noar ti set b1='XM9OQPKZOBE' where id=6; -update noar tt set v0='SZ7FDMF2E62FOJ8' where id=6; -update noar ti set v0='SZ7FDMF2E62FOJ8' where id=6; -update noar tt set b2='0C' where id=6; -update noar ti set b2='0C' where id=6; -update noar tt set v0='H9PXC7IBJFEPO' where id=7; -update noar ti set v0='H9PXC7IBJFEPO' where id=7; -update noar tt set b0='BIAS' where id=7; -update noar ti set b0='BIAS' where id=7; -update noar tt set v0='FZTAA5N6G74ZAF96QTK' where id=7; -update noar ti set v0='FZTAA5N6G74ZAF96QTK' where id=7; -update noar tt set b1='91IPC' where id=7; -update noar ti set b1='91IPC' where id=7; -update noar tt set v0='FZ5J' where id=7; -update noar ti set v0='FZ5J' where id=7; -update noar tt set b2='9B8XON1A2SIVAXVL6SOUSATA4JABU' where id=7; -update noar ti set b2='9B8XON1A2SIVAXVL6SOUSATA4JABU' where id=7; -update noar tt set v0='7UE62ORJT08A5' where id=8; -update noar ti set v0='7UE62ORJT08A5' where id=8; -update noar tt set b0='R7' where id=8; -update noar ti set b0='R7' where id=8; -update noar tt set v0='HUAN1GQIYG97GDIZA8RDTZSWPPY' where id=8; -update noar ti set v0='HUAN1GQIYG97GDIZA8RDTZSWPPY' where id=8; -update noar tt set b1='Y90' where id=8; -update noar ti set b1='Y90' where id=8; -update noar tt set v0='4TPOP' where id=8; -update noar ti set v0='4TPOP' where id=8; -update noar tt set b2='25CO3E822C8V0U51C0EOES2ZTAB4CZ0' where id=8; -update noar ti set b2='25CO3E822C8V0U51C0EOES2ZTAB4CZ0' where id=8; -update noar tt set v0='TTSNQKRUK85MVP9IPBMRY94C59' where id=9; -update noar ti set v0='TTSNQKRUK85MVP9IPBMRY94C59' where id=9; -update noar tt set b0='5D6JG1GGEMMH1X' where id=9; -update noar ti set b0='5D6JG1GGEMMH1X' where id=9; -update noar tt set v0='06RZDZW60' where id=9; -update noar ti set v0='06RZDZW60' where id=9; -update noar tt set b1='BNZ0U' where id=9; -update noar ti set b1='BNZ0U' where id=9; -update noar tt set v0='78Y8EGDRPM14PNR2DMXOZ1NC2FKF' where id=9; -update noar ti set v0='78Y8EGDRPM14PNR2DMXOZ1NC2FKF' where id=9; -update noar tt set b2='OOT1X' where id=9; -update noar ti set b2='OOT1X' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 tinyblob not null, -b1 tinyblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='VAKDKACN7UGM3' where id=1; -update noar ti set v0='VAKDKACN7UGM3' where id=1; -update noar tt set b0='2INNKXHAQ9C6QM' where id=1; -update noar ti set b0='2INNKXHAQ9C6QM' where id=1; -update noar tt set v0='W3SXABYIYYNHYMO1Q1XUMRTA0Z' where id=1; -update noar ti set v0='W3SXABYIYYNHYMO1Q1XUMRTA0Z' where id=1; -update noar tt set b1='FXWR8OYZTZ4BC8I5OBL3VM0AU' where id=1; -update noar ti set b1='FXWR8OYZTZ4BC8I5OBL3VM0AU' where id=1; -update noar tt set v0='UPTOQLZMLDGIHUPJZCK1Q' where id=1; -update noar ti set v0='UPTOQLZMLDGIHUPJZCK1Q' where id=1; -update noar tt set b2='P52EODM7ILUW9D3HJPK3PX3ZYP2M9J4V' where id=1; -update noar ti set b2='P52EODM7ILUW9D3HJPK3PX3ZYP2M9J4V' where id=1; -update noar tt set v0='G10QH4YXOPZW' where id=2; -update noar ti set v0='G10QH4YXOPZW' where id=2; -update noar tt set b0='4KEAGOEA922JI911K5PJ439' where id=2; -update noar ti set b0='4KEAGOEA922JI911K5PJ439' where id=2; -update noar tt set v0='CHOEPH6F' where id=2; -update noar ti set v0='CHOEPH6F' where id=2; -update noar tt set b1='KU1B83' where id=2; -update noar ti set b1='KU1B83' where id=2; -update noar tt set v0='HB5QQAP698WR4AVNF6' where id=2; -update noar ti set v0='HB5QQAP698WR4AVNF6' where id=2; -update noar tt set b2='WEIJ1BMVXJBDAKK2R7' where id=2; -update noar ti set b2='WEIJ1BMVXJBDAKK2R7' where id=2; -update noar tt set v0='JHSI1SUOPI8L8ACQPUB05HNP0B59' where id=3; -update noar ti set v0='JHSI1SUOPI8L8ACQPUB05HNP0B59' where id=3; -update noar tt set b0='T6FJIH8XKBRTG5WIOB' where id=3; -update noar ti set b0='T6FJIH8XKBRTG5WIOB' where id=3; -update noar tt set v0='OQLCJ4W6EM5' where id=3; -update noar ti set v0='OQLCJ4W6EM5' where id=3; -update noar tt set b1='GC84AGICWXQM1PKZH7382T1NZH8J' where id=3; -update noar ti set b1='GC84AGICWXQM1PKZH7382T1NZH8J' where id=3; -update noar tt set v0='RVW26FZ1FYIP7LWEDXN5DKT' where id=3; -update noar ti set v0='RVW26FZ1FYIP7LWEDXN5DKT' where id=3; -update noar tt set b2='ALVUZTUO87J1HFHLIVTOMI2P' where id=3; -update noar ti set b2='ALVUZTUO87J1HFHLIVTOMI2P' where id=3; -update noar tt set v0='UPQFDFLILA9GMY8ZP' where id=4; -update noar ti set v0='UPQFDFLILA9GMY8ZP' where id=4; -update noar tt set b0='8VO13VMPUE0RNQTR66Q5FG5CUMWIKUIG' where id=4; -update noar ti set b0='8VO13VMPUE0RNQTR66Q5FG5CUMWIKUIG' where id=4; -update noar tt set v0='28WY6FGO5LO7TY9F6ADVHSHHZLF0BDF' where id=4; -update noar ti set v0='28WY6FGO5LO7TY9F6ADVHSHHZLF0BDF' where id=4; -update noar tt set b1='6A' where id=4; -update noar ti set b1='6A' where id=4; -update noar tt set v0='NVQ2G891R7J1VFPWIQMPRKZ9P6U3' where id=4; -update noar ti set v0='NVQ2G891R7J1VFPWIQMPRKZ9P6U3' where id=4; -update noar tt set b2='VACFHQB260KA8FSHD' where id=4; -update noar ti set b2='VACFHQB260KA8FSHD' where id=4; -update noar tt set v0='UQ04H702XE3' where id=5; -update noar ti set v0='UQ04H702XE3' where id=5; -update noar tt set b0='4WK90T' where id=5; -update noar ti set b0='4WK90T' where id=5; -update noar tt set v0='G0X4UU92GBWF7MRMXLRIKFMTVL9QVFWO' where id=5; -update noar ti set v0='G0X4UU92GBWF7MRMXLRIKFMTVL9QVFWO' where id=5; -update noar tt set b1='67' where id=5; -update noar ti set b1='67' where id=5; -update noar tt set v0='62SKJ7JK11UR43YI385HCHI' where id=5; -update noar ti set v0='62SKJ7JK11UR43YI385HCHI' where id=5; -update noar tt set b2='FSB6QPRBEE6DY' where id=5; -update noar ti set b2='FSB6QPRBEE6DY' where id=5; -update noar tt set v0='TNSFYZTZO13PJCOXL6CV3O1RTU8UW' where id=6; -update noar ti set v0='TNSFYZTZO13PJCOXL6CV3O1RTU8UW' where id=6; -update noar tt set b0='BS1DL0BE35ID9SHB5ZE5FRASU' where id=6; -update noar ti set b0='BS1DL0BE35ID9SHB5ZE5FRASU' where id=6; -update noar tt set v0='ZY239H2DDXXYG' where id=6; -update noar ti set v0='ZY239H2DDXXYG' where id=6; -update noar tt set b1='KXFX21DFWC009FAH3KRZ7EBF3GR' where id=6; -update noar ti set b1='KXFX21DFWC009FAH3KRZ7EBF3GR' where id=6; -update noar tt set v0='TWFH53ICC' where id=6; -update noar ti set v0='TWFH53ICC' where id=6; -update noar tt set b2='Q4HWKTLFCKNOS' where id=6; -update noar ti set b2='Q4HWKTLFCKNOS' where id=6; -update noar tt set v0='LNTCIVFWR1FIX1XX588G43KVKI36F0NT' where id=7; -update noar ti set v0='LNTCIVFWR1FIX1XX588G43KVKI36F0NT' where id=7; -update noar tt set b0='0WHO6CZVMUFYHG22V9TJ7' where id=7; -update noar ti set b0='0WHO6CZVMUFYHG22V9TJ7' where id=7; -update noar tt set v0='7EQZZANQLD8BACAZ71OOALT0X' where id=7; -update noar ti set v0='7EQZZANQLD8BACAZ71OOALT0X' where id=7; -update noar tt set b1='PSPD411S51' where id=7; -update noar ti set b1='PSPD411S51' where id=7; -update noar tt set v0='WCKC4UWEQ02PSDDBTY8E' where id=7; -update noar ti set v0='WCKC4UWEQ02PSDDBTY8E' where id=7; -update noar tt set b2='C' where id=7; -update noar ti set b2='C' where id=7; -update noar tt set v0='IOEQJD1QBNUYBMYN3H' where id=8; -update noar ti set v0='IOEQJD1QBNUYBMYN3H' where id=8; -update noar tt set b0='ODNNLZR7LV8HC0I3TWHW' where id=8; -update noar ti set b0='ODNNLZR7LV8HC0I3TWHW' where id=8; -update noar tt set v0='OJRL9VSISYGV19' where id=8; -update noar ti set v0='OJRL9VSISYGV19' where id=8; -update noar tt set b1='92HSSW48949ZJ' where id=8; -update noar ti set b1='92HSSW48949ZJ' where id=8; -update noar tt set v0='R8MEEA3PLQJUZAOAU5UB4TZNO5RK0' where id=8; -update noar ti set v0='R8MEEA3PLQJUZAOAU5UB4TZNO5RK0' where id=8; -update noar tt set b2='VILUT4VXEUZ7WVQKC' where id=8; -update noar ti set b2='VILUT4VXEUZ7WVQKC' where id=8; -update noar tt set v0='5XXICQ2TY' where id=9; -update noar ti set v0='5XXICQ2TY' where id=9; -update noar tt set b0='JJRLLY6ZTS4' where id=9; -update noar ti set b0='JJRLLY6ZTS4' where id=9; -update noar tt set v0='S8QDOSBA' where id=9; -update noar ti set v0='S8QDOSBA' where id=9; -update noar tt set b1='2I65NAZ8H87BWLM7KBU0KSJUC5F6Q' where id=9; -update noar ti set b1='2I65NAZ8H87BWLM7KBU0KSJUC5F6Q' where id=9; -update noar tt set v0='ULKFH' where id=9; -update noar ti set v0='ULKFH' where id=9; -update noar tt set b2='TVTWI14US' where id=9; -update noar ti set b2='TVTWI14US' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 tinyblob not null, -b1 tinyblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='QETZC' where id=1; -update noar ti set v0='QETZC' where id=1; -update noar tt set b0='TBFFSKY5BH9W3ULR' where id=1; -update noar ti set b0='TBFFSKY5BH9W3ULR' where id=1; -update noar tt set v0='W0MFEVQ5CS168WH5KFMIKAWH9JQNN4W' where id=1; -update noar ti set v0='W0MFEVQ5CS168WH5KFMIKAWH9JQNN4W' where id=1; -update noar tt set b1='8QP6I5ASCMN83IZ3USHA21VI2' where id=1; -update noar ti set b1='8QP6I5ASCMN83IZ3USHA21VI2' where id=1; -update noar tt set v0='9JWYOU3K6WZI' where id=1; -update noar ti set v0='9JWYOU3K6WZI' where id=1; -update noar tt set b2='IN4KR562PBMSF' where id=1; -update noar ti set b2='IN4KR562PBMSF' where id=1; -update noar tt set v0='EIKL96PTPQ794B' where id=2; -update noar ti set v0='EIKL96PTPQ794B' where id=2; -update noar tt set b0='KN8188232Q8' where id=2; -update noar ti set b0='KN8188232Q8' where id=2; -update noar tt set v0='FF3' where id=2; -update noar ti set v0='FF3' where id=2; -update noar tt set b1='TB' where id=2; -update noar ti set b1='TB' where id=2; -update noar tt set v0='QPV4RBSX4125AWTY834' where id=2; -update noar ti set v0='QPV4RBSX4125AWTY834' where id=2; -update noar tt set b2='XU9S3BBQ' where id=2; -update noar ti set b2='XU9S3BBQ' where id=2; -update noar tt set v0='JZJGSUJLBWEIA4IX17ZJAUXWT' where id=3; -update noar ti set v0='JZJGSUJLBWEIA4IX17ZJAUXWT' where id=3; -update noar tt set b0='F2KY1HSC4PTG' where id=3; -update noar ti set b0='F2KY1HSC4PTG' where id=3; -update noar tt set v0='90G8C3HR' where id=3; -update noar ti set v0='90G8C3HR' where id=3; -update noar tt set b1='BX6Y2M3C1J85QTCJQDTO9FJ' where id=3; -update noar ti set b1='BX6Y2M3C1J85QTCJQDTO9FJ' where id=3; -update noar tt set v0='T7Y8' where id=3; -update noar ti set v0='T7Y8' where id=3; -update noar tt set b2='6IQY88FIXBUZP9PPR' where id=3; -update noar ti set b2='6IQY88FIXBUZP9PPR' where id=3; -update noar tt set v0='UBN41YI25' where id=4; -update noar ti set v0='UBN41YI25' where id=4; -update noar tt set b0='D36WQNQHAUZZXT26ZT8S69ZOKYN' where id=4; -update noar ti set b0='D36WQNQHAUZZXT26ZT8S69ZOKYN' where id=4; -update noar tt set v0='PC9PZZF8FD42E1RTYLHEDC' where id=4; -update noar ti set v0='PC9PZZF8FD42E1RTYLHEDC' where id=4; -update noar tt set b1='XYS7CK3GL4WRO' where id=4; -update noar ti set b1='XYS7CK3GL4WRO' where id=4; -update noar tt set v0='O7FOKS2XW4AJY6DOBITB8ZKLU' where id=4; -update noar ti set v0='O7FOKS2XW4AJY6DOBITB8ZKLU' where id=4; -update noar tt set b2='33CYAEQV38XU9YQYUQ50C1' where id=4; -update noar ti set b2='33CYAEQV38XU9YQYUQ50C1' where id=4; -update noar tt set v0='E83ZUZD7ZR1DCUFF0HR0U8ODLKOING' where id=5; -update noar ti set v0='E83ZUZD7ZR1DCUFF0HR0U8ODLKOING' where id=5; -update noar tt set b0='MZ69' where id=5; -update noar ti set b0='MZ69' where id=5; -update noar tt set v0='ACDSD99DMU1SSANQ4CGNR0YGIFSWIP3' where id=5; -update noar ti set v0='ACDSD99DMU1SSANQ4CGNR0YGIFSWIP3' where id=5; -update noar tt set b1='R' where id=5; -update noar ti set b1='R' where id=5; -update noar tt set v0='PJJP7H9OBOPBLD1XJX9' where id=5; -update noar ti set v0='PJJP7H9OBOPBLD1XJX9' where id=5; -update noar tt set b2='FPSV3B0P2NY7ZQT' where id=5; -update noar ti set b2='FPSV3B0P2NY7ZQT' where id=5; -update noar tt set v0='F4VDWWI3I75P4RR3GVHLGH' where id=6; -update noar ti set v0='F4VDWWI3I75P4RR3GVHLGH' where id=6; -update noar tt set b0='5VB87QH59H29RQLCAX4' where id=6; -update noar ti set b0='5VB87QH59H29RQLCAX4' where id=6; -update noar tt set v0='3HLJ0VCMM0OHQSK20R7MA91' where id=6; -update noar ti set v0='3HLJ0VCMM0OHQSK20R7MA91' where id=6; -update noar tt set b1='C7QKBMEGNQ7XV8Y4IYF' where id=6; -update noar ti set b1='C7QKBMEGNQ7XV8Y4IYF' where id=6; -update noar tt set v0='JRGEXWSFP2YZHMXO' where id=6; -update noar ti set v0='JRGEXWSFP2YZHMXO' where id=6; -update noar tt set b2='S8206U7YHC0' where id=6; -update noar ti set b2='S8206U7YHC0' where id=6; -update noar tt set v0='NTXQQX' where id=7; -update noar ti set v0='NTXQQX' where id=7; -update noar tt set b0='QURBVUCJWX9RK19R8N4B072VITFP41' where id=7; -update noar ti set b0='QURBVUCJWX9RK19R8N4B072VITFP41' where id=7; -update noar tt set v0='8GG30NBC7R059IZIP8' where id=7; -update noar ti set v0='8GG30NBC7R059IZIP8' where id=7; -update noar tt set b1='RJBP9AORKOYEHOPSKDRBUEYQMF34P' where id=7; -update noar ti set b1='RJBP9AORKOYEHOPSKDRBUEYQMF34P' where id=7; -update noar tt set v0='5C2NDN3WNS5XP3AS' where id=7; -update noar ti set v0='5C2NDN3WNS5XP3AS' where id=7; -update noar tt set b2='SE62H4S14' where id=7; -update noar ti set b2='SE62H4S14' where id=7; -update noar tt set v0='LGDNOAIMMRYGY3YKGDVTXOWD05WPA1N' where id=8; -update noar ti set v0='LGDNOAIMMRYGY3YKGDVTXOWD05WPA1N' where id=8; -update noar tt set b0='V4M5BI8QZ41Q' where id=8; -update noar ti set b0='V4M5BI8QZ41Q' where id=8; -update noar tt set v0='EE7RPU1GWTK7CH' where id=8; -update noar ti set v0='EE7RPU1GWTK7CH' where id=8; -update noar tt set b1='9BVHAABUKRU4G1T0MCKIELXWM5G' where id=8; -update noar ti set b1='9BVHAABUKRU4G1T0MCKIELXWM5G' where id=8; -update noar tt set v0='G8VF6M6W9JC6WBYD2O3KRA7AT' where id=8; -update noar ti set v0='G8VF6M6W9JC6WBYD2O3KRA7AT' where id=8; -update noar tt set b2='Z1OE5UXP5JM' where id=8; -update noar ti set b2='Z1OE5UXP5JM' where id=8; -update noar tt set v0='7MRC91R7MC1HEP6MKEMRQ5R4OR7PC' where id=9; -update noar ti set v0='7MRC91R7MC1HEP6MKEMRQ5R4OR7PC' where id=9; -update noar tt set b0='XNYR0LL6' where id=9; -update noar ti set b0='XNYR0LL6' where id=9; -update noar tt set v0='30PDV' where id=9; -update noar ti set v0='30PDV' where id=9; -update noar tt set b1='I2FTDXR0JKWPOPM9OAUB9EGSD6' where id=9; -update noar ti set b1='I2FTDXR0JKWPOPM9OAUB9EGSD6' where id=9; -update noar tt set v0='PT' where id=9; -update noar ti set v0='PT' where id=9; -update noar tt set b2='915O3J8G6EJH8FA' where id=9; -update noar ti set b2='915O3J8G6EJH8FA' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 tinyblob null, -b1 tinyblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='GWUF6Q87WWWUX1QXW' where id=1; -update noar ti set v0='GWUF6Q87WWWUX1QXW' where id=1; -update noar tt set b0='ZCU3V6ZFNSEGV8FE8CTAIK7UUF1VF6' where id=1; -update noar ti set b0='ZCU3V6ZFNSEGV8FE8CTAIK7UUF1VF6' where id=1; -update noar tt set v0='BVQFNY3G0F8M9TY2V39YI' where id=1; -update noar ti set v0='BVQFNY3G0F8M9TY2V39YI' where id=1; -update noar tt set b1='PUAY76GUN6LT7W5TW6V9T' where id=1; -update noar ti set b1='PUAY76GUN6LT7W5TW6V9T' where id=1; -update noar tt set v0='CSPTN1ZPILA7VHVI77ELIEQZDKY' where id=1; -update noar ti set v0='CSPTN1ZPILA7VHVI77ELIEQZDKY' where id=1; -update noar tt set b2='2HTW962P9V' where id=1; -update noar ti set b2='2HTW962P9V' where id=1; -update noar tt set v0='4P7V99N74CHERVHHO0D4KBW28' where id=2; -update noar ti set v0='4P7V99N74CHERVHHO0D4KBW28' where id=2; -update noar tt set b0='BE6T2P053ZZK228F' where id=2; -update noar ti set b0='BE6T2P053ZZK228F' where id=2; -update noar tt set v0='4Y1' where id=2; -update noar ti set v0='4Y1' where id=2; -update noar tt set b1='V68Q9IZ7AZYZTWZIYJBF4MWD' where id=2; -update noar ti set b1='V68Q9IZ7AZYZTWZIYJBF4MWD' where id=2; -update noar tt set v0='HQ301L35BQHC79' where id=2; -update noar ti set v0='HQ301L35BQHC79' where id=2; -update noar tt set b2='PU6I' where id=2; -update noar ti set b2='PU6I' where id=2; -update noar tt set v0='9KN' where id=3; -update noar ti set v0='9KN' where id=3; -update noar tt set b0='WSYIPK2J' where id=3; -update noar ti set b0='WSYIPK2J' where id=3; -update noar tt set v0='YUG48SU6GAH' where id=3; -update noar ti set v0='YUG48SU6GAH' where id=3; -update noar tt set b1='6QBKIJO' where id=3; -update noar ti set b1='6QBKIJO' where id=3; -update noar tt set v0='INT' where id=3; -update noar ti set v0='INT' where id=3; -update noar tt set b2='691YYKB36QQ3' where id=3; -update noar ti set b2='691YYKB36QQ3' where id=3; -update noar tt set v0='GV6A2LQ1BICRHSG5' where id=4; -update noar ti set v0='GV6A2LQ1BICRHSG5' where id=4; -update noar tt set b0='VJX07MIPR0' where id=4; -update noar ti set b0='VJX07MIPR0' where id=4; -update noar tt set v0='6O6HXB7T8HSDSIA0I' where id=4; -update noar ti set v0='6O6HXB7T8HSDSIA0I' where id=4; -update noar tt set b1='SPB1RRMHM' where id=4; -update noar ti set b1='SPB1RRMHM' where id=4; -update noar tt set v0='VRS6VBF9CX5RZ491MVSOWQ4040XB2DWB' where id=4; -update noar ti set v0='VRS6VBF9CX5RZ491MVSOWQ4040XB2DWB' where id=4; -update noar tt set b2='3UNO4AL1AYIGYFXOJ14FLKCKLE76' where id=4; -update noar ti set b2='3UNO4AL1AYIGYFXOJ14FLKCKLE76' where id=4; -update noar tt set v0='EUFVIWUJ9335G1O8B8ICTPPMNAHAO3' where id=5; -update noar ti set v0='EUFVIWUJ9335G1O8B8ICTPPMNAHAO3' where id=5; -update noar tt set b0='ZEWP6Y21KJLMKMJ' where id=5; -update noar ti set b0='ZEWP6Y21KJLMKMJ' where id=5; -update noar tt set v0='PNPFO72319BVC7NBE34YD6VC5LYI6' where id=5; -update noar ti set v0='PNPFO72319BVC7NBE34YD6VC5LYI6' where id=5; -update noar tt set b1='4SIXIJIG5B' where id=5; -update noar ti set b1='4SIXIJIG5B' where id=5; -update noar tt set v0='JJJBYJAQ' where id=5; -update noar ti set v0='JJJBYJAQ' where id=5; -update noar tt set b2='E2M6LMONX38NXAA96VNZ8L0J' where id=5; -update noar ti set b2='E2M6LMONX38NXAA96VNZ8L0J' where id=5; -update noar tt set v0='7RMJUCAMFMEO7UH2GK8MLGDWM5I46Y' where id=6; -update noar ti set v0='7RMJUCAMFMEO7UH2GK8MLGDWM5I46Y' where id=6; -update noar tt set b0='IXVG0MCJE9F1DIIZ' where id=6; -update noar ti set b0='IXVG0MCJE9F1DIIZ' where id=6; -update noar tt set v0='NTFS5XE6GX74Z4Q1A2KD' where id=6; -update noar ti set v0='NTFS5XE6GX74Z4Q1A2KD' where id=6; -update noar tt set b1='J28C3O26G65K91CMD29UB0Z' where id=6; -update noar ti set b1='J28C3O26G65K91CMD29UB0Z' where id=6; -update noar tt set v0='05MEPHCVARQ' where id=6; -update noar ti set v0='05MEPHCVARQ' where id=6; -update noar tt set b2='LCKD2ORUDT0A4FSJF26F76J979LU8' where id=6; -update noar ti set b2='LCKD2ORUDT0A4FSJF26F76J979LU8' where id=6; -update noar tt set v0='M4L5K355LPYM8Q6KDSG93M68VV4Z' where id=7; -update noar ti set v0='M4L5K355LPYM8Q6KDSG93M68VV4Z' where id=7; -update noar tt set b0='NE531CI' where id=7; -update noar ti set b0='NE531CI' where id=7; -update noar tt set v0='WUM7D8NR' where id=7; -update noar ti set v0='WUM7D8NR' where id=7; -update noar tt set b1='3QDV0YC7W23L0CD2P5' where id=7; -update noar ti set b1='3QDV0YC7W23L0CD2P5' where id=7; -update noar tt set v0='18XOOA4BJ91AKRTT6DWUWLD5T5Q9' where id=7; -update noar ti set v0='18XOOA4BJ91AKRTT6DWUWLD5T5Q9' where id=7; -update noar tt set b2='767' where id=7; -update noar ti set b2='767' where id=7; -update noar tt set v0='KCVSPID558BWCE7VQS13LZFXT2F' where id=8; -update noar ti set v0='KCVSPID558BWCE7VQS13LZFXT2F' where id=8; -update noar tt set b0='149RUW7I1B89USG2N3X' where id=8; -update noar ti set b0='149RUW7I1B89USG2N3X' where id=8; -update noar tt set v0='GDMK0X9B4EUQGWSM4OB6A6NK1HLXO' where id=8; -update noar ti set v0='GDMK0X9B4EUQGWSM4OB6A6NK1HLXO' where id=8; -update noar tt set b1='X7R' where id=8; -update noar ti set b1='X7R' where id=8; -update noar tt set v0='6AFQRMNSGZZ92X42ENI83QK78MJL' where id=8; -update noar ti set v0='6AFQRMNSGZZ92X42ENI83QK78MJL' where id=8; -update noar tt set b2='WASUL5O52II3Y9N6LTVKIX' where id=8; -update noar ti set b2='WASUL5O52II3Y9N6LTVKIX' where id=8; -update noar tt set v0='ETPO6VXV54BD6' where id=9; -update noar ti set v0='ETPO6VXV54BD6' where id=9; -update noar tt set b0='IT5H87V' where id=9; -update noar ti set b0='IT5H87V' where id=9; -update noar tt set v0='H13F1498WH29X6VJW12Y7A97801N10VO' where id=9; -update noar ti set v0='H13F1498WH29X6VJW12Y7A97801N10VO' where id=9; -update noar tt set b1='NO4TCPZ8XBLG33PP2CWYCNF4P' where id=9; -update noar ti set b1='NO4TCPZ8XBLG33PP2CWYCNF4P' where id=9; -update noar tt set v0='V4ZQFEQ2X1IK0W' where id=9; -update noar ti set v0='V4ZQFEQ2X1IK0W' where id=9; -update noar tt set b2='0Q49W1U8M1NS7E8BAR2MY7PDZM6' where id=9; -update noar ti set b2='0Q49W1U8M1NS7E8BAR2MY7PDZM6' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 tinyblob null, -b1 tinyblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='94937Y8ZS6B8UT3JNU43LY47TSY' where id=1; -update noar ti set v0='94937Y8ZS6B8UT3JNU43LY47TSY' where id=1; -update noar tt set b0='9TP198CFJR' where id=1; -update noar ti set b0='9TP198CFJR' where id=1; -update noar tt set v0='55H1YW4YSH4Q' where id=1; -update noar ti set v0='55H1YW4YSH4Q' where id=1; -update noar tt set b1='QX8CYN553IJSAIE4HQZFX8JAONPFP' where id=1; -update noar ti set b1='QX8CYN553IJSAIE4HQZFX8JAONPFP' where id=1; -update noar tt set v0='FPVDOM2S1S3E74' where id=1; -update noar ti set v0='FPVDOM2S1S3E74' where id=1; -update noar tt set b2='E1BWI9D39XI50' where id=1; -update noar ti set b2='E1BWI9D39XI50' where id=1; -update noar tt set v0='MBYDYL' where id=2; -update noar ti set v0='MBYDYL' where id=2; -update noar tt set b0='X' where id=2; -update noar ti set b0='X' where id=2; -update noar tt set v0='W0VI4WEWXSJNGVMKFH' where id=2; -update noar ti set v0='W0VI4WEWXSJNGVMKFH' where id=2; -update noar tt set b1='63R' where id=2; -update noar ti set b1='63R' where id=2; -update noar tt set v0='1K5TT2MRENM87JOSQ57HGU86HBBWH8' where id=2; -update noar ti set v0='1K5TT2MRENM87JOSQ57HGU86HBBWH8' where id=2; -update noar tt set b2='5QZG9QFLIQ2KER1TJ9VH' where id=2; -update noar ti set b2='5QZG9QFLIQ2KER1TJ9VH' where id=2; -update noar tt set v0='YRZGVC7LBEY88Q0T4QPBBTXXBSNN8' where id=3; -update noar ti set v0='YRZGVC7LBEY88Q0T4QPBBTXXBSNN8' where id=3; -update noar tt set b0='AKOKNIY8PBGCU' where id=3; -update noar ti set b0='AKOKNIY8PBGCU' where id=3; -update noar tt set v0='27B79PBL4QNS4G7AV0K43' where id=3; -update noar ti set v0='27B79PBL4QNS4G7AV0K43' where id=3; -update noar tt set b1='EVRHBFSETK' where id=3; -update noar ti set b1='EVRHBFSETK' where id=3; -update noar tt set v0='H8B8WSH' where id=3; -update noar ti set v0='H8B8WSH' where id=3; -update noar tt set b2='YULW7LTJCZJA02VNX3V0M' where id=3; -update noar ti set b2='YULW7LTJCZJA02VNX3V0M' where id=3; -update noar tt set v0='JPYZUZUC97RT6JA23OU' where id=4; -update noar ti set v0='JPYZUZUC97RT6JA23OU' where id=4; -update noar tt set b0='04NA8NXBG78MU' where id=4; -update noar ti set b0='04NA8NXBG78MU' where id=4; -update noar tt set v0='FED98K4MP' where id=4; -update noar ti set v0='FED98K4MP' where id=4; -update noar tt set b1='F1VR6TZ1K52' where id=4; -update noar ti set b1='F1VR6TZ1K52' where id=4; -update noar tt set v0='7HO0WY6D1XK' where id=4; -update noar ti set v0='7HO0WY6D1XK' where id=4; -update noar tt set b2='Q8IHI4A7' where id=4; -update noar ti set b2='Q8IHI4A7' where id=4; -update noar tt set v0='R82G' where id=5; -update noar ti set v0='R82G' where id=5; -update noar tt set b0='9UX6PFYQT' where id=5; -update noar ti set b0='9UX6PFYQT' where id=5; -update noar tt set v0='O90SP331MXJD8' where id=5; -update noar ti set v0='O90SP331MXJD8' where id=5; -update noar tt set b1='VSP2X9' where id=5; -update noar ti set b1='VSP2X9' where id=5; -update noar tt set v0='9O7HNUAFE7EZPNVL4H' where id=5; -update noar ti set v0='9O7HNUAFE7EZPNVL4H' where id=5; -update noar tt set b2='CWWNWYAEUT7X' where id=5; -update noar ti set b2='CWWNWYAEUT7X' where id=5; -update noar tt set v0='I4G1MRWGHIGAA' where id=6; -update noar ti set v0='I4G1MRWGHIGAA' where id=6; -update noar tt set b0='8F9GWX6YPAUDER17K5' where id=6; -update noar ti set b0='8F9GWX6YPAUDER17K5' where id=6; -update noar tt set v0='YL1NHUXMJYVR004AV5MB' where id=6; -update noar ti set v0='YL1NHUXMJYVR004AV5MB' where id=6; -update noar tt set b1='74YG2583WJ0EWNUWYQMWC5DKZ1BHYQ0' where id=6; -update noar ti set b1='74YG2583WJ0EWNUWYQMWC5DKZ1BHYQ0' where id=6; -update noar tt set v0='GXN9V3VYIH0DWMBFT9H91IJKN' where id=6; -update noar ti set v0='GXN9V3VYIH0DWMBFT9H91IJKN' where id=6; -update noar tt set b2='TC8U32U98FGXV6B94YDZOKPOSPL' where id=6; -update noar ti set b2='TC8U32U98FGXV6B94YDZOKPOSPL' where id=6; -update noar tt set v0='39MFY6FJT7PV6XZ4T' where id=7; -update noar ti set v0='39MFY6FJT7PV6XZ4T' where id=7; -update noar tt set b0='CVWHPW97GJ' where id=7; -update noar ti set b0='CVWHPW97GJ' where id=7; -update noar tt set v0='Q4GP' where id=7; -update noar ti set v0='Q4GP' where id=7; -update noar tt set b1='6AM3C7F2NO1NDD1DXIM' where id=7; -update noar ti set b1='6AM3C7F2NO1NDD1DXIM' where id=7; -update noar tt set v0='CCLP2TUG' where id=7; -update noar ti set v0='CCLP2TUG' where id=7; -update noar tt set b2='BV7UA' where id=7; -update noar ti set b2='BV7UA' where id=7; -update noar tt set v0='H5TIU1HN5H6S' where id=8; -update noar ti set v0='H5TIU1HN5H6S' where id=8; -update noar tt set b0='TPNQ6PKGDH7FRN' where id=8; -update noar ti set b0='TPNQ6PKGDH7FRN' where id=8; -update noar tt set v0='YATXKM3ZO4M2WSKJ4AJJRIMKJ1WWZ' where id=8; -update noar ti set v0='YATXKM3ZO4M2WSKJ4AJJRIMKJ1WWZ' where id=8; -update noar tt set b1='IUBVN' where id=8; -update noar ti set b1='IUBVN' where id=8; -update noar tt set v0='NJ' where id=8; -update noar ti set v0='NJ' where id=8; -update noar tt set b2='WI2WZ8ZC9IRVU3OJU04Q2IGIY' where id=8; -update noar ti set b2='WI2WZ8ZC9IRVU3OJU04Q2IGIY' where id=8; -update noar tt set v0='LOHGD82GJ9HE4P70Y9GX2HNEGYJDA0F' where id=9; -update noar ti set v0='LOHGD82GJ9HE4P70Y9GX2HNEGYJDA0F' where id=9; -update noar tt set b0='XIG3K30QJ3N3J7AWRBDQEKFNXYY' where id=9; -update noar ti set b0='XIG3K30QJ3N3J7AWRBDQEKFNXYY' where id=9; -update noar tt set v0='WDVP5U92KZNYU' where id=9; -update noar ti set v0='WDVP5U92KZNYU' where id=9; -update noar tt set b1='P4X1Z8SNE' where id=9; -update noar ti set b1='P4X1Z8SNE' where id=9; -update noar tt set v0='ZO' where id=9; -update noar ti set v0='ZO' where id=9; -update noar tt set b2='DHYMQIK7RBAZ12G8ISTU' where id=9; -update noar ti set b2='DHYMQIK7RBAZ12G8ISTU' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 tinyblob not null, -b1 tinyblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='OD7U2GWRE4VBNUF1Q2OLW2GX0NIZG' where id=1; -update noar ti set v0='OD7U2GWRE4VBNUF1Q2OLW2GX0NIZG' where id=1; -update noar tt set b0='Z' where id=1; -update noar ti set b0='Z' where id=1; -update noar tt set v0='0NMBXJKAJ5ECX' where id=1; -update noar ti set v0='0NMBXJKAJ5ECX' where id=1; -update noar tt set b1='96' where id=1; -update noar ti set b1='96' where id=1; -update noar tt set v0='SQZC1FUZK' where id=1; -update noar ti set v0='SQZC1FUZK' where id=1; -update noar tt set b2='U3UEF26K59HNGYQ' where id=1; -update noar ti set b2='U3UEF26K59HNGYQ' where id=1; -update noar tt set v0='CUM51DE70R0P98N8QLW85VLUJJ85A4FA' where id=2; -update noar ti set v0='CUM51DE70R0P98N8QLW85VLUJJ85A4FA' where id=2; -update noar tt set b0='RY29M' where id=2; -update noar ti set b0='RY29M' where id=2; -update noar tt set v0='69SSVPI88KJPYU3CBPBZ' where id=2; -update noar ti set v0='69SSVPI88KJPYU3CBPBZ' where id=2; -update noar tt set b1='0PWCMD59CY5GJD0JR4EG6P7SIBX9QXC' where id=2; -update noar ti set b1='0PWCMD59CY5GJD0JR4EG6P7SIBX9QXC' where id=2; -update noar tt set v0='NQ9TP' where id=2; -update noar ti set v0='NQ9TP' where id=2; -update noar tt set b2='395' where id=2; -update noar ti set b2='395' where id=2; -update noar tt set v0='XZ3W5IEF' where id=3; -update noar ti set v0='XZ3W5IEF' where id=3; -update noar tt set b0='1EV8' where id=3; -update noar ti set b0='1EV8' where id=3; -update noar tt set v0='3GC1X' where id=3; -update noar ti set v0='3GC1X' where id=3; -update noar tt set b1='V6L5I2CMX3T876B5F6LXNN0ZUJ012Q9B' where id=3; -update noar ti set b1='V6L5I2CMX3T876B5F6LXNN0ZUJ012Q9B' where id=3; -update noar tt set v0='M764Q230O59PS78ZI' where id=3; -update noar ti set v0='M764Q230O59PS78ZI' where id=3; -update noar tt set b2='GQP5BGSGJWJ3W59BQ' where id=3; -update noar ti set b2='GQP5BGSGJWJ3W59BQ' where id=3; -update noar tt set v0='3BOP3AUY2' where id=4; -update noar ti set v0='3BOP3AUY2' where id=4; -update noar tt set b0='R47OJ1DD26TDV0KAD0DYFZXUHVBL5' where id=4; -update noar ti set b0='R47OJ1DD26TDV0KAD0DYFZXUHVBL5' where id=4; -update noar tt set v0='48AB02Z4WGF36W671LL23NGOP4' where id=4; -update noar ti set v0='48AB02Z4WGF36W671LL23NGOP4' where id=4; -update noar tt set b1='KBG3FMVLCMF735RE' where id=4; -update noar ti set b1='KBG3FMVLCMF735RE' where id=4; -update noar tt set v0='3GBRRDA1G7DXILQT02ZOB2JK1N' where id=4; -update noar ti set v0='3GBRRDA1G7DXILQT02ZOB2JK1N' where id=4; -update noar tt set b2='PZJ0T31G5LAQUCK2H53QUPTD8W6UJ' where id=4; -update noar ti set b2='PZJ0T31G5LAQUCK2H53QUPTD8W6UJ' where id=4; -update noar tt set v0='X6WDT9ZZEA6RZ2PSQ6BD80P03DSD29K' where id=5; -update noar ti set v0='X6WDT9ZZEA6RZ2PSQ6BD80P03DSD29K' where id=5; -update noar tt set b0='IGS' where id=5; -update noar ti set b0='IGS' where id=5; -update noar tt set v0='I84RXOJQCBFT9VA67SL37278K1FUPH' where id=5; -update noar ti set v0='I84RXOJQCBFT9VA67SL37278K1FUPH' where id=5; -update noar tt set b1='0QRESRYD1B8V34P09YT68ZK' where id=5; -update noar ti set b1='0QRESRYD1B8V34P09YT68ZK' where id=5; -update noar tt set v0='5AV5YLOLWC' where id=5; -update noar ti set v0='5AV5YLOLWC' where id=5; -update noar tt set b2='7' where id=5; -update noar ti set b2='7' where id=5; -update noar tt set v0='1E' where id=6; -update noar ti set v0='1E' where id=6; -update noar tt set b0='7XRZ3WJCKRTBRP' where id=6; -update noar ti set b0='7XRZ3WJCKRTBRP' where id=6; -update noar tt set v0='RUBPZ0C2' where id=6; -update noar ti set v0='RUBPZ0C2' where id=6; -update noar tt set b1='BDDVDB6TCQFJ69D3' where id=6; -update noar ti set b1='BDDVDB6TCQFJ69D3' where id=6; -update noar tt set v0='E' where id=6; -update noar ti set v0='E' where id=6; -update noar tt set b2='S03UXBDW18QC8ZVASS2T7R1HMY' where id=6; -update noar ti set b2='S03UXBDW18QC8ZVASS2T7R1HMY' where id=6; -update noar tt set v0='55' where id=7; -update noar ti set v0='55' where id=7; -update noar tt set b0='JFATL6SREEOIDZ6A9UN4CC' where id=7; -update noar ti set b0='JFATL6SREEOIDZ6A9UN4CC' where id=7; -update noar tt set v0='11S' where id=7; -update noar ti set v0='11S' where id=7; -update noar tt set b1='5KGSQ' where id=7; -update noar ti set b1='5KGSQ' where id=7; -update noar tt set v0='1' where id=7; -update noar ti set v0='1' where id=7; -update noar tt set b2='6HGM2NSDU52ESTP396DDXUDGG38ORY3' where id=7; -update noar ti set b2='6HGM2NSDU52ESTP396DDXUDGG38ORY3' where id=7; -update noar tt set v0='WDPYZ17V' where id=8; -update noar ti set v0='WDPYZ17V' where id=8; -update noar tt set b0='2HIKX2GKUXHKDQJJX2GYC7MRUI' where id=8; -update noar ti set b0='2HIKX2GKUXHKDQJJX2GYC7MRUI' where id=8; -update noar tt set v0='5MW6WUHMT4IIM48UID3P' where id=8; -update noar ti set v0='5MW6WUHMT4IIM48UID3P' where id=8; -update noar tt set b1='TZYAHU6LCH' where id=8; -update noar ti set b1='TZYAHU6LCH' where id=8; -update noar tt set v0='MZ0N8EAAUTTXFIQYAFO8HCCJ3IVX' where id=8; -update noar ti set v0='MZ0N8EAAUTTXFIQYAFO8HCCJ3IVX' where id=8; -update noar tt set b2='KKN4SQ8FXK3O0LFM8ULFIOT08X7MEA' where id=8; -update noar ti set b2='KKN4SQ8FXK3O0LFM8ULFIOT08X7MEA' where id=8; -update noar tt set v0='ZGPM8Q2DECD4GNAM' where id=9; -update noar ti set v0='ZGPM8Q2DECD4GNAM' where id=9; -update noar tt set b0='CGBIZU3S5I34' where id=9; -update noar ti set b0='CGBIZU3S5I34' where id=9; -update noar tt set v0='BO8OIBJJ' where id=9; -update noar ti set v0='BO8OIBJJ' where id=9; -update noar tt set b1='VBDU42CL7M3DST3CZX' where id=9; -update noar ti set b1='VBDU42CL7M3DST3CZX' where id=9; -update noar tt set v0='8UXMPQEC7VPCL78DN7V1HIQF' where id=9; -update noar ti set v0='8UXMPQEC7VPCL78DN7V1HIQF' where id=9; -update noar tt set b2='LS1O9ISP2F0VMVAVZCPXOQPBD2ELA' where id=9; -update noar ti set b2='LS1O9ISP2F0VMVAVZCPXOQPBD2ELA' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 tinyblob not null, -b1 tinyblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='L' where id=1; -update noar ti set v0='L' where id=1; -update noar tt set b0='2FL5A671O3BLN70Z' where id=1; -update noar ti set b0='2FL5A671O3BLN70Z' where id=1; -update noar tt set v0='QXX2ACY06ZJYJNA6J374KEPB8' where id=1; -update noar ti set v0='QXX2ACY06ZJYJNA6J374KEPB8' where id=1; -update noar tt set b1='Z88LKRG9PVV' where id=1; -update noar ti set b1='Z88LKRG9PVV' where id=1; -update noar tt set v0='ITJVKBDE8V9GRU' where id=1; -update noar ti set v0='ITJVKBDE8V9GRU' where id=1; -update noar tt set b2='4NB2Z321QTPS33VXP5CLC1Z2G' where id=1; -update noar ti set b2='4NB2Z321QTPS33VXP5CLC1Z2G' where id=1; -update noar tt set v0='XJZT' where id=2; -update noar ti set v0='XJZT' where id=2; -update noar tt set b0='ZZ581EA78P1C4JQ' where id=2; -update noar ti set b0='ZZ581EA78P1C4JQ' where id=2; -update noar tt set v0='3CTYFUJY7LGYH5M6W' where id=2; -update noar ti set v0='3CTYFUJY7LGYH5M6W' where id=2; -update noar tt set b1='TB3I44RRHR4KJ' where id=2; -update noar ti set b1='TB3I44RRHR4KJ' where id=2; -update noar tt set v0='1CIW99I4R' where id=2; -update noar ti set v0='1CIW99I4R' where id=2; -update noar tt set b2='ZWIH2IPVXOOP8U8II' where id=2; -update noar ti set b2='ZWIH2IPVXOOP8U8II' where id=2; -update noar tt set v0='94LBME0N20NQMBR2BJQ49VZFK0ALI' where id=3; -update noar ti set v0='94LBME0N20NQMBR2BJQ49VZFK0ALI' where id=3; -update noar tt set b0='AFQI5X' where id=3; -update noar ti set b0='AFQI5X' where id=3; -update noar tt set v0='7AEDRDU66H00O9' where id=3; -update noar ti set v0='7AEDRDU66H00O9' where id=3; -update noar tt set b1='N1KM9GDCMUQTJ0LR' where id=3; -update noar ti set b1='N1KM9GDCMUQTJ0LR' where id=3; -update noar tt set v0='T5JGMRMIE016C2507BU7ILNEXI4G7X' where id=3; -update noar ti set v0='T5JGMRMIE016C2507BU7ILNEXI4G7X' where id=3; -update noar tt set b2='YV71Y' where id=3; -update noar ti set b2='YV71Y' where id=3; -update noar tt set v0='W' where id=4; -update noar ti set v0='W' where id=4; -update noar tt set b0='FZIWANCO77X4I5GHWTXV70L1UP0' where id=4; -update noar ti set b0='FZIWANCO77X4I5GHWTXV70L1UP0' where id=4; -update noar tt set v0='9K6BSUMDAZXGRC4W59RFL2C6GMXC524' where id=4; -update noar ti set v0='9K6BSUMDAZXGRC4W59RFL2C6GMXC524' where id=4; -update noar tt set b1='U2SBKAUALJ4Y5Q5OFU7KDF' where id=4; -update noar ti set b1='U2SBKAUALJ4Y5Q5OFU7KDF' where id=4; -update noar tt set v0='8R' where id=4; -update noar ti set v0='8R' where id=4; -update noar tt set b2='APZGIGFP18' where id=4; -update noar ti set b2='APZGIGFP18' where id=4; -update noar tt set v0='P' where id=5; -update noar ti set v0='P' where id=5; -update noar tt set b0='X8KG1HVY63KSFC08JOCAD' where id=5; -update noar ti set b0='X8KG1HVY63KSFC08JOCAD' where id=5; -update noar tt set v0='LS1U' where id=5; -update noar ti set v0='LS1U' where id=5; -update noar tt set b1='CWT3RKAZOCJS1TL' where id=5; -update noar ti set b1='CWT3RKAZOCJS1TL' where id=5; -update noar tt set v0='9MPSX9LPAGGJ8DJDO' where id=5; -update noar ti set v0='9MPSX9LPAGGJ8DJDO' where id=5; -update noar tt set b2='4V5YJ4953RQOMBG5O5' where id=5; -update noar ti set b2='4V5YJ4953RQOMBG5O5' where id=5; -update noar tt set v0='X81V6DQB9QG' where id=6; -update noar ti set v0='X81V6DQB9QG' where id=6; -update noar tt set b0='BTZQ83C0SCNSPLB103N4ADSXTJC1ACYM' where id=6; -update noar ti set b0='BTZQ83C0SCNSPLB103N4ADSXTJC1ACYM' where id=6; -update noar tt set v0='5CIDA4LCP7L8R6UBZ8LOZZ' where id=6; -update noar ti set v0='5CIDA4LCP7L8R6UBZ8LOZZ' where id=6; -update noar tt set b1='THX6T8NMBMS12NVSFCFM49OA5JVZ1' where id=6; -update noar ti set b1='THX6T8NMBMS12NVSFCFM49OA5JVZ1' where id=6; -update noar tt set v0='IRTO5W6GB1R6RZRVEXQPM6QQNKRLXTAS' where id=6; -update noar ti set v0='IRTO5W6GB1R6RZRVEXQPM6QQNKRLXTAS' where id=6; -update noar tt set b2='676QFRVGJ2EOCIXM0FOROPQ06' where id=6; -update noar ti set b2='676QFRVGJ2EOCIXM0FOROPQ06' where id=6; -update noar tt set v0='BAUNIP8914WKN5J52DGOWUGF' where id=7; -update noar ti set v0='BAUNIP8914WKN5J52DGOWUGF' where id=7; -update noar tt set b0='2EQ2M3WYFNOV' where id=7; -update noar ti set b0='2EQ2M3WYFNOV' where id=7; -update noar tt set v0='ZNN2Y9N5U55UUI6BPR' where id=7; -update noar ti set v0='ZNN2Y9N5U55UUI6BPR' where id=7; -update noar tt set b1='C47TW' where id=7; -update noar ti set b1='C47TW' where id=7; -update noar tt set v0='OU0NFUMIG7A2LW2T7P8BKDNCSSWLENT' where id=7; -update noar ti set v0='OU0NFUMIG7A2LW2T7P8BKDNCSSWLENT' where id=7; -update noar tt set b2='R5Q9Z2KD5OFHVPCUNIHHTD2MS52SDT' where id=7; -update noar ti set b2='R5Q9Z2KD5OFHVPCUNIHHTD2MS52SDT' where id=7; -update noar tt set v0='PT30PI2W8B0' where id=8; -update noar ti set v0='PT30PI2W8B0' where id=8; -update noar tt set b0='HK3C2VEG' where id=8; -update noar ti set b0='HK3C2VEG' where id=8; -update noar tt set v0='DCCLO9RUZ8O' where id=8; -update noar ti set v0='DCCLO9RUZ8O' where id=8; -update noar tt set b1='IZJYZPBRDCIWKIQJQS' where id=8; -update noar ti set b1='IZJYZPBRDCIWKIQJQS' where id=8; -update noar tt set v0='SDQIQC9XF0JYZ85TTKJ9Q8AW4ZFYRFUB' where id=8; -update noar ti set v0='SDQIQC9XF0JYZ85TTKJ9Q8AW4ZFYRFUB' where id=8; -update noar tt set b2='4ALWL4JIDD4IBGULTO08RN95RS2' where id=8; -update noar ti set b2='4ALWL4JIDD4IBGULTO08RN95RS2' where id=8; -update noar tt set v0='FVH3MLV0Q6RV3S8WL9VQ29JDOSJ' where id=9; -update noar ti set v0='FVH3MLV0Q6RV3S8WL9VQ29JDOSJ' where id=9; -update noar tt set b0='HPA6RHHBVPMWCLJTXDR' where id=9; -update noar ti set b0='HPA6RHHBVPMWCLJTXDR' where id=9; -update noar tt set v0='5XAGO1' where id=9; -update noar ti set v0='5XAGO1' where id=9; -update noar tt set b1='64G01OQJKHYJOEKVPCQV0' where id=9; -update noar ti set b1='64G01OQJKHYJOEKVPCQV0' where id=9; -update noar tt set v0='YQHPG0SW6QBGRDYF' where id=9; -update noar ti set v0='YQHPG0SW6QBGRDYF' where id=9; -update noar tt set b2='D9MJMYKITVI9H' where id=9; -update noar ti set b2='D9MJMYKITVI9H' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 tinyblob null, -b1 tinyblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='NY6I53I6NQ43Z3NE3GK27BS' where id=1; -update noar ti set v0='NY6I53I6NQ43Z3NE3GK27BS' where id=1; -update noar tt set b0='9M5A' where id=1; -update noar ti set b0='9M5A' where id=1; -update noar tt set v0='3WC52KXRYED8N4RG578' where id=1; -update noar ti set v0='3WC52KXRYED8N4RG578' where id=1; -update noar tt set b1='CFCQHJ1ZGY6X62BCX4WEQMHYHCZB77DL' where id=1; -update noar ti set b1='CFCQHJ1ZGY6X62BCX4WEQMHYHCZB77DL' where id=1; -update noar tt set v0='WZK8Z06Q8V6VZBVYPNSIKF7' where id=1; -update noar ti set v0='WZK8Z06Q8V6VZBVYPNSIKF7' where id=1; -update noar tt set b2='D' where id=1; -update noar ti set b2='D' where id=1; -update noar tt set v0='HIO6O0DZTZI25BMQP9' where id=2; -update noar ti set v0='HIO6O0DZTZI25BMQP9' where id=2; -update noar tt set b0='IHQ0FPU6WDRRMCJ7W6KB' where id=2; -update noar ti set b0='IHQ0FPU6WDRRMCJ7W6KB' where id=2; -update noar tt set v0='EYOP5UD' where id=2; -update noar ti set v0='EYOP5UD' where id=2; -update noar tt set b1='134X8Q' where id=2; -update noar ti set b1='134X8Q' where id=2; -update noar tt set v0='YSC2TV' where id=2; -update noar ti set v0='YSC2TV' where id=2; -update noar tt set b2='RDF9KMIH13Q2K0RBFBQHCCW' where id=2; -update noar ti set b2='RDF9KMIH13Q2K0RBFBQHCCW' where id=2; -update noar tt set v0='TU7CLC265Z3KYCTSK4P5VRXDU85PDY' where id=3; -update noar ti set v0='TU7CLC265Z3KYCTSK4P5VRXDU85PDY' where id=3; -update noar tt set b0='RYN4YHF35587CHO89H8584YBOZ' where id=3; -update noar ti set b0='RYN4YHF35587CHO89H8584YBOZ' where id=3; -update noar tt set v0='WJKXQNWJAP' where id=3; -update noar ti set v0='WJKXQNWJAP' where id=3; -update noar tt set b1='VX43Y650ZF9MJ48AC2VJPSPA1V4' where id=3; -update noar ti set b1='VX43Y650ZF9MJ48AC2VJPSPA1V4' where id=3; -update noar tt set v0='SINUFU60YCD0XB' where id=3; -update noar ti set v0='SINUFU60YCD0XB' where id=3; -update noar tt set b2='4QTRL' where id=3; -update noar ti set b2='4QTRL' where id=3; -update noar tt set v0='6DZMOESLINOXOFI6R24TM7C' where id=4; -update noar ti set v0='6DZMOESLINOXOFI6R24TM7C' where id=4; -update noar tt set b0='A1W13TZV' where id=4; -update noar ti set b0='A1W13TZV' where id=4; -update noar tt set v0='U7Q8H' where id=4; -update noar ti set v0='U7Q8H' where id=4; -update noar tt set b1='3DY7QYLMAX8DKVBUQOYFECB1C1Y' where id=4; -update noar ti set b1='3DY7QYLMAX8DKVBUQOYFECB1C1Y' where id=4; -update noar tt set v0='14VXFJCVMF469L8A6' where id=4; -update noar ti set v0='14VXFJCVMF469L8A6' where id=4; -update noar tt set b2='PABFN3XZWBL2PDY3OKT2H83' where id=4; -update noar ti set b2='PABFN3XZWBL2PDY3OKT2H83' where id=4; -update noar tt set v0='0JBOS89X8' where id=5; -update noar ti set v0='0JBOS89X8' where id=5; -update noar tt set b0='Z65DHL101QK76IJEW1' where id=5; -update noar ti set b0='Z65DHL101QK76IJEW1' where id=5; -update noar tt set v0='841064AI51KZRXWEXON66WF843HUN5O' where id=5; -update noar ti set v0='841064AI51KZRXWEXON66WF843HUN5O' where id=5; -update noar tt set b1='OYL3NDMKKYNQP6WHO8DUMRSDEV0SHG' where id=5; -update noar ti set b1='OYL3NDMKKYNQP6WHO8DUMRSDEV0SHG' where id=5; -update noar tt set v0='WCTD1IC' where id=5; -update noar ti set v0='WCTD1IC' where id=5; -update noar tt set b2='14Z8NAC5EFJYDOV5L23295W99FCRV' where id=5; -update noar ti set b2='14Z8NAC5EFJYDOV5L23295W99FCRV' where id=5; -update noar tt set v0='3HGRO53DFO' where id=6; -update noar ti set v0='3HGRO53DFO' where id=6; -update noar tt set b0='MWRAVX2J4XN9' where id=6; -update noar ti set b0='MWRAVX2J4XN9' where id=6; -update noar tt set v0='UFY8TS2D3Q4C77B' where id=6; -update noar ti set v0='UFY8TS2D3Q4C77B' where id=6; -update noar tt set b1='Y5L5J2RVN2CGT' where id=6; -update noar ti set b1='Y5L5J2RVN2CGT' where id=6; -update noar tt set v0='IH8I6XP1X691O' where id=6; -update noar ti set v0='IH8I6XP1X691O' where id=6; -update noar tt set b2='LMYYGGAOUEBWZ8CQHL0LINSW' where id=6; -update noar ti set b2='LMYYGGAOUEBWZ8CQHL0LINSW' where id=6; -update noar tt set v0='5P2Z1M0OS' where id=7; -update noar ti set v0='5P2Z1M0OS' where id=7; -update noar tt set b0='OPO722WMQXDTSQS9W4' where id=7; -update noar ti set b0='OPO722WMQXDTSQS9W4' where id=7; -update noar tt set v0='KYSAKL' where id=7; -update noar ti set v0='KYSAKL' where id=7; -update noar tt set b1='99YMP8FRZV03O7LG1' where id=7; -update noar ti set b1='99YMP8FRZV03O7LG1' where id=7; -update noar tt set v0='XQJT7NW4HYTNRM' where id=7; -update noar ti set v0='XQJT7NW4HYTNRM' where id=7; -update noar tt set b2='88OMWNINWYCJW2MDOPTB4TLCZDLG' where id=7; -update noar ti set b2='88OMWNINWYCJW2MDOPTB4TLCZDLG' where id=7; -update noar tt set v0='G6PHZFSV0CO6VZCL8C3Q3N3P' where id=8; -update noar ti set v0='G6PHZFSV0CO6VZCL8C3Q3N3P' where id=8; -update noar tt set b0='Q8LQNIPP0YCOKNI' where id=8; -update noar ti set b0='Q8LQNIPP0YCOKNI' where id=8; -update noar tt set v0='IRS2SKGU6898WQKKN104AA1IQZTIY' where id=8; -update noar ti set v0='IRS2SKGU6898WQKKN104AA1IQZTIY' where id=8; -update noar tt set b1='579Z2G7VN' where id=8; -update noar ti set b1='579Z2G7VN' where id=8; -update noar tt set v0='T5MYDI' where id=8; -update noar ti set v0='T5MYDI' where id=8; -update noar tt set b2='879OJ6J76ZCY' where id=8; -update noar ti set b2='879OJ6J76ZCY' where id=8; -update noar tt set v0='AXM4E' where id=9; -update noar ti set v0='AXM4E' where id=9; -update noar tt set b0='JM79E52Y1J8M07GMMPIHI7K8GGUEA' where id=9; -update noar ti set b0='JM79E52Y1J8M07GMMPIHI7K8GGUEA' where id=9; -update noar tt set v0='7X016' where id=9; -update noar ti set v0='7X016' where id=9; -update noar tt set b1='TQN4UF00YDS' where id=9; -update noar ti set b1='TQN4UF00YDS' where id=9; -update noar tt set v0='B6CKV5SWBUO024WIGOXOH7E5J' where id=9; -update noar ti set v0='B6CKV5SWBUO024WIGOXOH7E5J' where id=9; -update noar tt set b2='22YNXHK2BJYE4EY44U9ZV' where id=9; -update noar ti set b2='22YNXHK2BJYE4EY44U9ZV' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 tinyblob null, -b1 tinyblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='AH0QPE6' where id=1; -update noar ti set v0='AH0QPE6' where id=1; -update noar tt set b0='KOW0OPILMP' where id=1; -update noar ti set b0='KOW0OPILMP' where id=1; -update noar tt set v0='VYQRZ53O' where id=1; -update noar ti set v0='VYQRZ53O' where id=1; -update noar tt set b1='XHRJUZU506VQ7VXXYBWOY768JYPC' where id=1; -update noar ti set b1='XHRJUZU506VQ7VXXYBWOY768JYPC' where id=1; -update noar tt set v0='NSQMQ7M1QYKO5D' where id=1; -update noar ti set v0='NSQMQ7M1QYKO5D' where id=1; -update noar tt set b2='3170DAEAV68K1Z9' where id=1; -update noar ti set b2='3170DAEAV68K1Z9' where id=1; -update noar tt set v0='ZYPJOYEQQRLV1C9IUB' where id=2; -update noar ti set v0='ZYPJOYEQQRLV1C9IUB' where id=2; -update noar tt set b0='ME1D9ZSQZXG2SAS4WWKIJ' where id=2; -update noar ti set b0='ME1D9ZSQZXG2SAS4WWKIJ' where id=2; -update noar tt set v0='7S7XA8UK' where id=2; -update noar ti set v0='7S7XA8UK' where id=2; -update noar tt set b1='WOSI7SGUGD0Y' where id=2; -update noar ti set b1='WOSI7SGUGD0Y' where id=2; -update noar tt set v0='CM6' where id=2; -update noar ti set v0='CM6' where id=2; -update noar tt set b2='CVZONN07AXKD8A' where id=2; -update noar ti set b2='CVZONN07AXKD8A' where id=2; -update noar tt set v0='ACUP1MTUXUHQ' where id=3; -update noar ti set v0='ACUP1MTUXUHQ' where id=3; -update noar tt set b0='TB8DF8XOT5BJIJTM4GXT' where id=3; -update noar ti set b0='TB8DF8XOT5BJIJTM4GXT' where id=3; -update noar tt set v0='SVI24A1XH3WQN' where id=3; -update noar ti set v0='SVI24A1XH3WQN' where id=3; -update noar tt set b1='QSTAFZKF' where id=3; -update noar ti set b1='QSTAFZKF' where id=3; -update noar tt set v0='5R9ZK' where id=3; -update noar ti set v0='5R9ZK' where id=3; -update noar tt set b2='5IH15FMEGO5PW' where id=3; -update noar ti set b2='5IH15FMEGO5PW' where id=3; -update noar tt set v0='OLMD96PZ7V9ZVKQF3TLL8' where id=4; -update noar ti set v0='OLMD96PZ7V9ZVKQF3TLL8' where id=4; -update noar tt set b0='17KW3KEH52VIT21YEELVTQVVP' where id=4; -update noar ti set b0='17KW3KEH52VIT21YEELVTQVVP' where id=4; -update noar tt set v0='8XN2L5H4O74S' where id=4; -update noar ti set v0='8XN2L5H4O74S' where id=4; -update noar tt set b1='FHGZV50WE1VQ0CP9FKOPL8BJ' where id=4; -update noar ti set b1='FHGZV50WE1VQ0CP9FKOPL8BJ' where id=4; -update noar tt set v0='7EPKTYU7WG80OEBZ5' where id=4; -update noar ti set v0='7EPKTYU7WG80OEBZ5' where id=4; -update noar tt set b2='NJ1PU' where id=4; -update noar ti set b2='NJ1PU' where id=4; -update noar tt set v0='0JTXLLPR33Z' where id=5; -update noar ti set v0='0JTXLLPR33Z' where id=5; -update noar tt set b0='THOKSU8N2WAZI52R7B16D3LSAEU3ONO' where id=5; -update noar ti set b0='THOKSU8N2WAZI52R7B16D3LSAEU3ONO' where id=5; -update noar tt set v0='08KBBM4VSCYWENBVR' where id=5; -update noar ti set v0='08KBBM4VSCYWENBVR' where id=5; -update noar tt set b1='18UQ4HTXH05RMT' where id=5; -update noar ti set b1='18UQ4HTXH05RMT' where id=5; -update noar tt set v0='XZGKBSVKB6IA' where id=5; -update noar ti set v0='XZGKBSVKB6IA' where id=5; -update noar tt set b2='G' where id=5; -update noar ti set b2='G' where id=5; -update noar tt set v0='0AIUVJK8353JJHBZG11R44EV5OVQXV' where id=6; -update noar ti set v0='0AIUVJK8353JJHBZG11R44EV5OVQXV' where id=6; -update noar tt set b0='2' where id=6; -update noar ti set b0='2' where id=6; -update noar tt set v0='67TC4RXIU4J' where id=6; -update noar ti set v0='67TC4RXIU4J' where id=6; -update noar tt set b1='D09O3Q69M5HRNB06FTBMG' where id=6; -update noar ti set b1='D09O3Q69M5HRNB06FTBMG' where id=6; -update noar tt set v0='G1XBK8HV3' where id=6; -update noar ti set v0='G1XBK8HV3' where id=6; -update noar tt set b2='ZD53QVOY3K2IQ9Z9JJ6R1A' where id=6; -update noar ti set b2='ZD53QVOY3K2IQ9Z9JJ6R1A' where id=6; -update noar tt set v0='L9VOXIQHG7KL49BR23' where id=7; -update noar ti set v0='L9VOXIQHG7KL49BR23' where id=7; -update noar tt set b0='7HWQ5QUZV4XCCP7FOW' where id=7; -update noar ti set b0='7HWQ5QUZV4XCCP7FOW' where id=7; -update noar tt set v0='Y6E00MR1TKSTHC0NFXPGY892' where id=7; -update noar ti set v0='Y6E00MR1TKSTHC0NFXPGY892' where id=7; -update noar tt set b1='37VZIDMPXDBKGM' where id=7; -update noar ti set b1='37VZIDMPXDBKGM' where id=7; -update noar tt set v0='ZH7JNDM75ZPKNSXOPGENYV' where id=7; -update noar ti set v0='ZH7JNDM75ZPKNSXOPGENYV' where id=7; -update noar tt set b2='T1MO7TLWKGNY4ELCKW0' where id=7; -update noar ti set b2='T1MO7TLWKGNY4ELCKW0' where id=7; -update noar tt set v0='BUNE0RBQ1BZHKPE' where id=8; -update noar ti set v0='BUNE0RBQ1BZHKPE' where id=8; -update noar tt set b0='079SASB411YF18C2L00ZFZW59WJCRC' where id=8; -update noar ti set b0='079SASB411YF18C2L00ZFZW59WJCRC' where id=8; -update noar tt set v0='HO92F0CTWJ27ZWXFX8RX782EAOPR2YQ' where id=8; -update noar ti set v0='HO92F0CTWJ27ZWXFX8RX782EAOPR2YQ' where id=8; -update noar tt set b1='TASLAWC7CR250B0W9SEQOCMLCHTHNV' where id=8; -update noar ti set b1='TASLAWC7CR250B0W9SEQOCMLCHTHNV' where id=8; -update noar tt set v0='GFM5181G1KR' where id=8; -update noar ti set v0='GFM5181G1KR' where id=8; -update noar tt set b2='EGGELRME' where id=8; -update noar ti set b2='EGGELRME' where id=8; -update noar tt set v0='NU' where id=9; -update noar ti set v0='NU' where id=9; -update noar tt set b0='WXQ' where id=9; -update noar ti set b0='WXQ' where id=9; -update noar tt set v0='LYAW83V0ESNKSV42' where id=9; -update noar ti set v0='LYAW83V0ESNKSV42' where id=9; -update noar tt set b1='Q30QVJU432J' where id=9; -update noar ti set b1='Q30QVJU432J' where id=9; -update noar tt set v0='Y4AM8CYHHHGIH58OOJGMPWT' where id=9; -update noar ti set v0='Y4AM8CYHHHGIH58OOJGMPWT' where id=9; -update noar tt set b2='PJ1KK9M8DISBU6R8NP7BQM03' where id=9; -update noar ti set b2='PJ1KK9M8DISBU6R8NP7BQM03' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 tinyblob not null, -b1 tinyblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='EBDMVSE8SRS7' where id=1; -update noar ti set v0='EBDMVSE8SRS7' where id=1; -update noar tt set b0='3LLM47LYOHNHCMTKWDDL7J0PI3' where id=1; -update noar ti set b0='3LLM47LYOHNHCMTKWDDL7J0PI3' where id=1; -update noar tt set v0='ISMD5S9F3YHP8N61T60QIRWRW2YYI8' where id=1; -update noar ti set v0='ISMD5S9F3YHP8N61T60QIRWRW2YYI8' where id=1; -update noar tt set b1='YPTNHMJ6DEG2Z' where id=1; -update noar ti set b1='YPTNHMJ6DEG2Z' where id=1; -update noar tt set v0='MT58845PR24AZKRA0CXGGK2VOW' where id=1; -update noar ti set v0='MT58845PR24AZKRA0CXGGK2VOW' where id=1; -update noar tt set b2='U5PJTBALJ6G6S3R1G5GBI2KY5GHBT' where id=1; -update noar ti set b2='U5PJTBALJ6G6S3R1G5GBI2KY5GHBT' where id=1; -update noar tt set v0='JL4YOZB838MTJPSX9YK5INP54D' where id=2; -update noar ti set v0='JL4YOZB838MTJPSX9YK5INP54D' where id=2; -update noar tt set b0='6JNJRKL8L' where id=2; -update noar ti set b0='6JNJRKL8L' where id=2; -update noar tt set v0='97B6OSWMVOJ7P' where id=2; -update noar ti set v0='97B6OSWMVOJ7P' where id=2; -update noar tt set b1='BBZHEEZ58' where id=2; -update noar ti set b1='BBZHEEZ58' where id=2; -update noar tt set v0='K8H4AEJIG88D6L54' where id=2; -update noar ti set v0='K8H4AEJIG88D6L54' where id=2; -update noar tt set b2='OBVWZ9IS75O7OXGIEAE' where id=2; -update noar ti set b2='OBVWZ9IS75O7OXGIEAE' where id=2; -update noar tt set v0='R5W6007CPK3SKCC197EKYF6IIML' where id=3; -update noar ti set v0='R5W6007CPK3SKCC197EKYF6IIML' where id=3; -update noar tt set b0='0RPTS8X76FNYKXJESBQ6IJCZJ6466DFQ' where id=3; -update noar ti set b0='0RPTS8X76FNYKXJESBQ6IJCZJ6466DFQ' where id=3; -update noar tt set v0='1QXF0V6' where id=3; -update noar ti set v0='1QXF0V6' where id=3; -update noar tt set b1='545MG8ERXEY0ES2GWU6' where id=3; -update noar ti set b1='545MG8ERXEY0ES2GWU6' where id=3; -update noar tt set v0='9OER' where id=3; -update noar ti set v0='9OER' where id=3; -update noar tt set b2='2XLQR2ZLSAAF1J' where id=3; -update noar ti set b2='2XLQR2ZLSAAF1J' where id=3; -update noar tt set v0='AIG6T' where id=4; -update noar ti set v0='AIG6T' where id=4; -update noar tt set b0='UAA3DJVM4A67LENS9IQE4O34DAAZHE' where id=4; -update noar ti set b0='UAA3DJVM4A67LENS9IQE4O34DAAZHE' where id=4; -update noar tt set v0='Z8MH6087LWNL' where id=4; -update noar ti set v0='Z8MH6087LWNL' where id=4; -update noar tt set b1='2TO7O2GWF1S' where id=4; -update noar ti set b1='2TO7O2GWF1S' where id=4; -update noar tt set v0='112DGTZZFIGU6UW' where id=4; -update noar ti set v0='112DGTZZFIGU6UW' where id=4; -update noar tt set b2='ZUX' where id=4; -update noar ti set b2='ZUX' where id=4; -update noar tt set v0='5R812U1J4KC3I98Q9CD4Z5' where id=5; -update noar ti set v0='5R812U1J4KC3I98Q9CD4Z5' where id=5; -update noar tt set b0='W19LR394V1PUNQ5TOST08LK4JJ81' where id=5; -update noar ti set b0='W19LR394V1PUNQ5TOST08LK4JJ81' where id=5; -update noar tt set v0='N046OAF7KWWTFCHAK7M1MNEFUX6' where id=5; -update noar ti set v0='N046OAF7KWWTFCHAK7M1MNEFUX6' where id=5; -update noar tt set b1='BEX90' where id=5; -update noar ti set b1='BEX90' where id=5; -update noar tt set v0='W6ZJC283GG6XDRKDA00CU' where id=5; -update noar ti set v0='W6ZJC283GG6XDRKDA00CU' where id=5; -update noar tt set b2='SW6YF65ZZR' where id=5; -update noar ti set b2='SW6YF65ZZR' where id=5; -update noar tt set v0='FN4SQB7CLT' where id=6; -update noar ti set v0='FN4SQB7CLT' where id=6; -update noar tt set b0='91ESNOZG2HT8W5C3IL61K' where id=6; -update noar ti set b0='91ESNOZG2HT8W5C3IL61K' where id=6; -update noar tt set v0='OA0GW' where id=6; -update noar ti set v0='OA0GW' where id=6; -update noar tt set b1='KYB42T420M2S0RG5MVHEH8' where id=6; -update noar ti set b1='KYB42T420M2S0RG5MVHEH8' where id=6; -update noar tt set v0='SNXZDT6LXH' where id=6; -update noar ti set v0='SNXZDT6LXH' where id=6; -update noar tt set b2='3VXMULO4' where id=6; -update noar ti set b2='3VXMULO4' where id=6; -update noar tt set v0='24X59TQ4AO7TXEA8N' where id=7; -update noar ti set v0='24X59TQ4AO7TXEA8N' where id=7; -update noar tt set b0='OJNXGIEWCEJP0BO2ETUL2DRH3254VQ3' where id=7; -update noar ti set b0='OJNXGIEWCEJP0BO2ETUL2DRH3254VQ3' where id=7; -update noar tt set v0='C4ED5SOI' where id=7; -update noar ti set v0='C4ED5SOI' where id=7; -update noar tt set b1='FDEMF79SMDVEDRZV' where id=7; -update noar ti set b1='FDEMF79SMDVEDRZV' where id=7; -update noar tt set v0='45NRX77NHZ9DPO91YW24SFVC7R6PJ' where id=7; -update noar ti set v0='45NRX77NHZ9DPO91YW24SFVC7R6PJ' where id=7; -update noar tt set b2='H5DO1XGPAND5QL9ID' where id=7; -update noar ti set b2='H5DO1XGPAND5QL9ID' where id=7; -update noar tt set v0='735' where id=8; -update noar ti set v0='735' where id=8; -update noar tt set b0='F33F1LGLFK6MISSLGLQNIESWEGGNC59C' where id=8; -update noar ti set b0='F33F1LGLFK6MISSLGLQNIESWEGGNC59C' where id=8; -update noar tt set v0='Z74TECDZ0XQHY6B51AFC8B7G3A09GG2F' where id=8; -update noar ti set v0='Z74TECDZ0XQHY6B51AFC8B7G3A09GG2F' where id=8; -update noar tt set b1='OWZBVCAL9IARJLEV7J9RUGC' where id=8; -update noar ti set b1='OWZBVCAL9IARJLEV7J9RUGC' where id=8; -update noar tt set v0='HSG8G82JQIJEMQUMZMQ5ILG1UW' where id=8; -update noar ti set v0='HSG8G82JQIJEMQUMZMQ5ILG1UW' where id=8; -update noar tt set b2='1LZKUV2MNSKPN' where id=8; -update noar ti set b2='1LZKUV2MNSKPN' where id=8; -update noar tt set v0='1KMVQ13VKUTNUD8' where id=9; -update noar ti set v0='1KMVQ13VKUTNUD8' where id=9; -update noar tt set b0='8P7A9S32XDJZT44BQFQXMUMQ72' where id=9; -update noar ti set b0='8P7A9S32XDJZT44BQFQXMUMQ72' where id=9; -update noar tt set v0='HN7EL' where id=9; -update noar ti set v0='HN7EL' where id=9; -update noar tt set b1='YR8SBTP58NJMXP5BV24OL0K5B' where id=9; -update noar ti set b1='YR8SBTP58NJMXP5BV24OL0K5B' where id=9; -update noar tt set v0='MI782QHDFKDKX866T9KBZ09XVFJ' where id=9; -update noar ti set v0='MI782QHDFKDKX866T9KBZ09XVFJ' where id=9; -update noar tt set b2='9RE0JEAC4TGJ' where id=9; -update noar ti set b2='9RE0JEAC4TGJ' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 tinyblob not null, -b1 tinyblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='K8NSPJ189F8KM6OROEJOJ1NMIV9Y8K6' where id=1; -update noar ti set v0='K8NSPJ189F8KM6OROEJOJ1NMIV9Y8K6' where id=1; -update noar tt set b0='6LMF64A8OS2X3' where id=1; -update noar ti set b0='6LMF64A8OS2X3' where id=1; -update noar tt set v0='NNI1BGFAA9OM1JWZHRSDSL2KUVM44FI' where id=1; -update noar ti set v0='NNI1BGFAA9OM1JWZHRSDSL2KUVM44FI' where id=1; -update noar tt set b1='ZBROJ6Q3HRIT4GZ9V' where id=1; -update noar ti set b1='ZBROJ6Q3HRIT4GZ9V' where id=1; -update noar tt set v0='Q11983622ERSVR05GIPBXR' where id=1; -update noar ti set v0='Q11983622ERSVR05GIPBXR' where id=1; -update noar tt set b2='KN7KF' where id=1; -update noar ti set b2='KN7KF' where id=1; -update noar tt set v0='SB5ISHJJV44VO77GE8SKA7139TC38OL' where id=2; -update noar ti set v0='SB5ISHJJV44VO77GE8SKA7139TC38OL' where id=2; -update noar tt set b0='53Z8NQIBR7D10BD414BY' where id=2; -update noar ti set b0='53Z8NQIBR7D10BD414BY' where id=2; -update noar tt set v0='STPDGQUQ0LAO6SA402T1P8' where id=2; -update noar ti set v0='STPDGQUQ0LAO6SA402T1P8' where id=2; -update noar tt set b1='MKEXV3R8IK08W2J0QYJU362' where id=2; -update noar ti set b1='MKEXV3R8IK08W2J0QYJU362' where id=2; -update noar tt set v0='AP6Y9D9785T6W7FK6O1FPMGQOTLSWD' where id=2; -update noar ti set v0='AP6Y9D9785T6W7FK6O1FPMGQOTLSWD' where id=2; -update noar tt set b2='G59NTPAVZ95H2I82Q5B' where id=2; -update noar ti set b2='G59NTPAVZ95H2I82Q5B' where id=2; -update noar tt set v0='P7009TG4BTBWX' where id=3; -update noar ti set v0='P7009TG4BTBWX' where id=3; -update noar tt set b0='0SABYIY6HXY6M' where id=3; -update noar ti set b0='0SABYIY6HXY6M' where id=3; -update noar tt set v0='089COAGUJXOHIHSX9Y1VOR1O6' where id=3; -update noar ti set v0='089COAGUJXOHIHSX9Y1VOR1O6' where id=3; -update noar tt set b1='KWQEBDL877LC' where id=3; -update noar ti set b1='KWQEBDL877LC' where id=3; -update noar tt set v0='Y711VK8VM4KZYRYQB2CJG8J36' where id=3; -update noar ti set v0='Y711VK8VM4KZYRYQB2CJG8J36' where id=3; -update noar tt set b2='ZWXUKT4BQBTER9N6V' where id=3; -update noar ti set b2='ZWXUKT4BQBTER9N6V' where id=3; -update noar tt set v0='8TH9CZFHVO6LTLFZB73M7Q' where id=4; -update noar ti set v0='8TH9CZFHVO6LTLFZB73M7Q' where id=4; -update noar tt set b0='DPO8UJ6ZHYN3J0BL92' where id=4; -update noar ti set b0='DPO8UJ6ZHYN3J0BL92' where id=4; -update noar tt set v0='E2N' where id=4; -update noar ti set v0='E2N' where id=4; -update noar tt set b1='HBOUE8ABT5Q5DBGKN' where id=4; -update noar ti set b1='HBOUE8ABT5Q5DBGKN' where id=4; -update noar tt set v0='C6DA97JFDC' where id=4; -update noar ti set v0='C6DA97JFDC' where id=4; -update noar tt set b2='KJ47WRCHX9CDVXU99LMU' where id=4; -update noar ti set b2='KJ47WRCHX9CDVXU99LMU' where id=4; -update noar tt set v0='XFR3J' where id=5; -update noar ti set v0='XFR3J' where id=5; -update noar tt set b0='P78MA' where id=5; -update noar ti set b0='P78MA' where id=5; -update noar tt set v0='VGJFEI8BSG3VHUBNEPTI' where id=5; -update noar ti set v0='VGJFEI8BSG3VHUBNEPTI' where id=5; -update noar tt set b1='3EG2W3DYKCVK' where id=5; -update noar ti set b1='3EG2W3DYKCVK' where id=5; -update noar tt set v0='7M8LRFW9XOL945G' where id=5; -update noar ti set v0='7M8LRFW9XOL945G' where id=5; -update noar tt set b2='92LZO2S465NJ3ZZNVTH' where id=5; -update noar ti set b2='92LZO2S465NJ3ZZNVTH' where id=5; -update noar tt set v0='E5KTDNHV8YRLR8MS185F886N' where id=6; -update noar ti set v0='E5KTDNHV8YRLR8MS185F886N' where id=6; -update noar tt set b0='84W3KV27G41M470O5UM2MV58' where id=6; -update noar ti set b0='84W3KV27G41M470O5UM2MV58' where id=6; -update noar tt set v0='8WL1S7VOITW3A0V9EKAYZ5WSH5AVABKI' where id=6; -update noar ti set v0='8WL1S7VOITW3A0V9EKAYZ5WSH5AVABKI' where id=6; -update noar tt set b1='HVAUU0T8RUA7KFWQHXH102UCQZNP' where id=6; -update noar ti set b1='HVAUU0T8RUA7KFWQHXH102UCQZNP' where id=6; -update noar tt set v0='YRBNYN9OQEX299P95WWZ16GG1XEU' where id=6; -update noar ti set v0='YRBNYN9OQEX299P95WWZ16GG1XEU' where id=6; -update noar tt set b2='1JZW6RL836Y0B' where id=6; -update noar ti set b2='1JZW6RL836Y0B' where id=6; -update noar tt set v0='9AO0PMC1U3NK5VU6Y0A' where id=7; -update noar ti set v0='9AO0PMC1U3NK5VU6Y0A' where id=7; -update noar tt set b0='DXED3P' where id=7; -update noar ti set b0='DXED3P' where id=7; -update noar tt set v0='N91HXSDSGQ8957CF4SH' where id=7; -update noar ti set v0='N91HXSDSGQ8957CF4SH' where id=7; -update noar tt set b1='19RTEBXJ' where id=7; -update noar ti set b1='19RTEBXJ' where id=7; -update noar tt set v0='NA583' where id=7; -update noar ti set v0='NA583' where id=7; -update noar tt set b2='A8PIRU08HHI8P4NH1H7M8' where id=7; -update noar ti set b2='A8PIRU08HHI8P4NH1H7M8' where id=7; -update noar tt set v0='TCKTNX00RS7OCBZS6R' where id=8; -update noar ti set v0='TCKTNX00RS7OCBZS6R' where id=8; -update noar tt set b0='PFH2ECI5PSYY5X6RVW' where id=8; -update noar ti set b0='PFH2ECI5PSYY5X6RVW' where id=8; -update noar tt set v0='ZJLFP22U5MOVF' where id=8; -update noar ti set v0='ZJLFP22U5MOVF' where id=8; -update noar tt set b1='89XI3QPR7JM7LJD596FDN' where id=8; -update noar ti set b1='89XI3QPR7JM7LJD596FDN' where id=8; -update noar tt set v0='DNMX5QSFKDQJ' where id=8; -update noar ti set v0='DNMX5QSFKDQJ' where id=8; -update noar tt set b2='PMANK0RF34GV' where id=8; -update noar ti set b2='PMANK0RF34GV' where id=8; -update noar tt set v0='CP9OR4' where id=9; -update noar ti set v0='CP9OR4' where id=9; -update noar tt set b0='UBARS9EYH43DRZ4RQJQIP1X2JP2CP' where id=9; -update noar ti set b0='UBARS9EYH43DRZ4RQJQIP1X2JP2CP' where id=9; -update noar tt set v0='CIXEAVKVXU' where id=9; -update noar ti set v0='CIXEAVKVXU' where id=9; -update noar tt set b1='S9RGTGFSCE8CUTA2ZTQ934BBPGG' where id=9; -update noar ti set b1='S9RGTGFSCE8CUTA2ZTQ934BBPGG' where id=9; -update noar tt set v0='O6TZ8JM8A4W1' where id=9; -update noar ti set v0='O6TZ8JM8A4W1' where id=9; -update noar tt set b2='3QWTT010XHC5UHLN4S06' where id=9; -update noar ti set b2='3QWTT010XHC5UHLN4S06' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 tinyblob null, -b1 tinyblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='IO183H14D1WS' where id=1; -update noar ti set v0='IO183H14D1WS' where id=1; -update noar tt set b0='4659HHPODFOX7H28I' where id=1; -update noar ti set b0='4659HHPODFOX7H28I' where id=1; -update noar tt set v0='V794014B20ZPL8UA93XN4D4GN452ISBM' where id=1; -update noar ti set v0='V794014B20ZPL8UA93XN4D4GN452ISBM' where id=1; -update noar tt set b1='NP' where id=1; -update noar ti set b1='NP' where id=1; -update noar tt set v0='HZD70LUSY' where id=1; -update noar ti set v0='HZD70LUSY' where id=1; -update noar tt set b2='2W7TW' where id=1; -update noar ti set b2='2W7TW' where id=1; -update noar tt set v0='LG5Y5UAYTY0JI' where id=2; -update noar ti set v0='LG5Y5UAYTY0JI' where id=2; -update noar tt set b0='LI0' where id=2; -update noar ti set b0='LI0' where id=2; -update noar tt set v0='V0PQLUP624SPBJTVPYY6LWZ' where id=2; -update noar ti set v0='V0PQLUP624SPBJTVPYY6LWZ' where id=2; -update noar tt set b1='FFGMF67N' where id=2; -update noar ti set b1='FFGMF67N' where id=2; -update noar tt set v0='9ILULRIJ49FOWO701RS8US6EN0CLC' where id=2; -update noar ti set v0='9ILULRIJ49FOWO701RS8US6EN0CLC' where id=2; -update noar tt set b2='R2XLNNPFM35QH9PTFG7429YES3' where id=2; -update noar ti set b2='R2XLNNPFM35QH9PTFG7429YES3' where id=2; -update noar tt set v0='GO60CLY8UW1IE5DMDM' where id=3; -update noar ti set v0='GO60CLY8UW1IE5DMDM' where id=3; -update noar tt set b0='G7HTHTB611JX19W6CETJPCTDYFTC5' where id=3; -update noar ti set b0='G7HTHTB611JX19W6CETJPCTDYFTC5' where id=3; -update noar tt set v0='FPR08WZUWZD' where id=3; -update noar ti set v0='FPR08WZUWZD' where id=3; -update noar tt set b1='RFELQ2O9XNWVT8E1AO43S7O' where id=3; -update noar ti set b1='RFELQ2O9XNWVT8E1AO43S7O' where id=3; -update noar tt set v0='6JCMUIRX4CDT8R5V334OSNEQ8C' where id=3; -update noar ti set v0='6JCMUIRX4CDT8R5V334OSNEQ8C' where id=3; -update noar tt set b2='1W0RNVBQ9UQT0BXI' where id=3; -update noar ti set b2='1W0RNVBQ9UQT0BXI' where id=3; -update noar tt set v0='RHM' where id=4; -update noar ti set v0='RHM' where id=4; -update noar tt set b0='8O1VS8JKLHNNVEI2VTQIVBIK0' where id=4; -update noar ti set b0='8O1VS8JKLHNNVEI2VTQIVBIK0' where id=4; -update noar tt set v0='F1Y45M' where id=4; -update noar ti set v0='F1Y45M' where id=4; -update noar tt set b1='0AISSMOOX1GNSOIUN7B4C2708U8U1' where id=4; -update noar ti set b1='0AISSMOOX1GNSOIUN7B4C2708U8U1' where id=4; -update noar tt set v0='4FPJ12U2KXUUF34UUCF2HA7SU' where id=4; -update noar ti set v0='4FPJ12U2KXUUF34UUCF2HA7SU' where id=4; -update noar tt set b2='KEL3VYHM' where id=4; -update noar ti set b2='KEL3VYHM' where id=4; -update noar tt set v0='YSR5UG5GCIWVQB1VKWW4O0HEPU57A2' where id=5; -update noar ti set v0='YSR5UG5GCIWVQB1VKWW4O0HEPU57A2' where id=5; -update noar tt set b0='OW8NRFQ7RUF4WW0' where id=5; -update noar ti set b0='OW8NRFQ7RUF4WW0' where id=5; -update noar tt set v0='ZSLIWZKVJWS0XXD' where id=5; -update noar ti set v0='ZSLIWZKVJWS0XXD' where id=5; -update noar tt set b1='TW5TC0P8LQ7LK41H3NDGL5CC' where id=5; -update noar ti set b1='TW5TC0P8LQ7LK41H3NDGL5CC' where id=5; -update noar tt set v0='CR' where id=5; -update noar ti set v0='CR' where id=5; -update noar tt set b2='3A62GE0' where id=5; -update noar ti set b2='3A62GE0' where id=5; -update noar tt set v0='JIT6Z9A8DFG084KW7G' where id=6; -update noar ti set v0='JIT6Z9A8DFG084KW7G' where id=6; -update noar tt set b0='HM' where id=6; -update noar ti set b0='HM' where id=6; -update noar tt set v0='WJH3UE76ZSG' where id=6; -update noar ti set v0='WJH3UE76ZSG' where id=6; -update noar tt set b1='4NGYH5TWD57ZRWRV' where id=6; -update noar ti set b1='4NGYH5TWD57ZRWRV' where id=6; -update noar tt set v0='119K6HXZD492URWUT1ZEIOG' where id=6; -update noar ti set v0='119K6HXZD492URWUT1ZEIOG' where id=6; -update noar tt set b2='RCO3B5MT2DGXQZ' where id=6; -update noar ti set b2='RCO3B5MT2DGXQZ' where id=6; -update noar tt set v0='OJ291GEPK1RMR07OFH9' where id=7; -update noar ti set v0='OJ291GEPK1RMR07OFH9' where id=7; -update noar tt set b0='H24GEC0NZHAGY4QC757OI2QNFY74' where id=7; -update noar ti set b0='H24GEC0NZHAGY4QC757OI2QNFY74' where id=7; -update noar tt set v0='3P19Y7OJYE' where id=7; -update noar ti set v0='3P19Y7OJYE' where id=7; -update noar tt set b1='JH' where id=7; -update noar ti set b1='JH' where id=7; -update noar tt set v0='5' where id=7; -update noar ti set v0='5' where id=7; -update noar tt set b2='TAYUPP3H7J5RE70I8WWPKXEAA' where id=7; -update noar ti set b2='TAYUPP3H7J5RE70I8WWPKXEAA' where id=7; -update noar tt set v0='CFG0DPZS0CMB' where id=8; -update noar ti set v0='CFG0DPZS0CMB' where id=8; -update noar tt set b0='J6GJABCR9SJKK6BO5' where id=8; -update noar ti set b0='J6GJABCR9SJKK6BO5' where id=8; -update noar tt set v0='ERVZ4EV9HZXZS6YTS9P' where id=8; -update noar ti set v0='ERVZ4EV9HZXZS6YTS9P' where id=8; -update noar tt set b1='47TDQS84MGAB9Z4TC' where id=8; -update noar ti set b1='47TDQS84MGAB9Z4TC' where id=8; -update noar tt set v0='8GNSVLA8IHMYTUOYIM' where id=8; -update noar ti set v0='8GNSVLA8IHMYTUOYIM' where id=8; -update noar tt set b2='O475F' where id=8; -update noar ti set b2='O475F' where id=8; -update noar tt set v0='GG4GDZ4CSPDY2MGGS6L9QBH5W6' where id=9; -update noar ti set v0='GG4GDZ4CSPDY2MGGS6L9QBH5W6' where id=9; -update noar tt set b0='GES24NIWZ0FJ09HTB8' where id=9; -update noar ti set b0='GES24NIWZ0FJ09HTB8' where id=9; -update noar tt set v0='S2NHJIET' where id=9; -update noar ti set v0='S2NHJIET' where id=9; -update noar tt set b1='LZSCMC5B3MGLGS68WDDLX122GHBW8WR' where id=9; -update noar ti set b1='LZSCMC5B3MGLGS68WDDLX122GHBW8WR' where id=9; -update noar tt set v0='NNRHRO87YKM9ZHMXIXY94GO6T84EXDU7' where id=9; -update noar ti set v0='NNRHRO87YKM9ZHMXIXY94GO6T84EXDU7' where id=9; -update noar tt set b2='DUYWTHBGQTFWY0F7WBBRUIKL9CA5' where id=9; -update noar ti set b2='DUYWTHBGQTFWY0F7WBBRUIKL9CA5' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 tinyblob null, -b1 tinyblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='FQJEBWZ5H9QATEP' where id=1; -update noar ti set v0='FQJEBWZ5H9QATEP' where id=1; -update noar tt set b0='94KXNTAJHCFX3JG458XUZGAGAFFX' where id=1; -update noar ti set b0='94KXNTAJHCFX3JG458XUZGAGAFFX' where id=1; -update noar tt set v0='S4WX0KP4IYHF7WPV7WLVOZ79K81' where id=1; -update noar ti set v0='S4WX0KP4IYHF7WPV7WLVOZ79K81' where id=1; -update noar tt set b1='NF' where id=1; -update noar ti set b1='NF' where id=1; -update noar tt set v0='FYD1C8XIBYI16SHIVJJYNPY6P' where id=1; -update noar ti set v0='FYD1C8XIBYI16SHIVJJYNPY6P' where id=1; -update noar tt set b2='YXXQPI18CCSAAKIC5R3N52LUMGF7AJW' where id=1; -update noar ti set b2='YXXQPI18CCSAAKIC5R3N52LUMGF7AJW' where id=1; -update noar tt set v0='JRPGR9ZV6VQLXX4UZ5S229ZQB0SZ2' where id=2; -update noar ti set v0='JRPGR9ZV6VQLXX4UZ5S229ZQB0SZ2' where id=2; -update noar tt set b0='WEN30AFXA6DLGXWGAZ' where id=2; -update noar ti set b0='WEN30AFXA6DLGXWGAZ' where id=2; -update noar tt set v0='VP0W5C5TY' where id=2; -update noar ti set v0='VP0W5C5TY' where id=2; -update noar tt set b1='SX79T2M' where id=2; -update noar ti set b1='SX79T2M' where id=2; -update noar tt set v0='SMA1R3STCSPCR84YO8J9C26L2' where id=2; -update noar ti set v0='SMA1R3STCSPCR84YO8J9C26L2' where id=2; -update noar tt set b2='UZFK1OQXFUZG' where id=2; -update noar ti set b2='UZFK1OQXFUZG' where id=2; -update noar tt set v0='EGWWLFQJ0B1' where id=3; -update noar ti set v0='EGWWLFQJ0B1' where id=3; -update noar tt set b0='4V8RMAL' where id=3; -update noar ti set b0='4V8RMAL' where id=3; -update noar tt set v0='72GDUYZ86W8RJQYXL6QEE' where id=3; -update noar ti set v0='72GDUYZ86W8RJQYXL6QEE' where id=3; -update noar tt set b1='BZKLCI' where id=3; -update noar ti set b1='BZKLCI' where id=3; -update noar tt set v0='IHBKYL1BDZ6UT672YO' where id=3; -update noar ti set v0='IHBKYL1BDZ6UT672YO' where id=3; -update noar tt set b2='ULBHM2GQSZE57FYYBC7R2' where id=3; -update noar ti set b2='ULBHM2GQSZE57FYYBC7R2' where id=3; -update noar tt set v0='KX1L5YMHYO5TWA2NFF2ZC' where id=4; -update noar ti set v0='KX1L5YMHYO5TWA2NFF2ZC' where id=4; -update noar tt set b0='V8DA0B9D' where id=4; -update noar ti set b0='V8DA0B9D' where id=4; -update noar tt set v0='J7FI7Z46YLY5591JREZCXU55L7' where id=4; -update noar ti set v0='J7FI7Z46YLY5591JREZCXU55L7' where id=4; -update noar tt set b1='LYMOJ2NBZ3QSJHPUK2L2' where id=4; -update noar ti set b1='LYMOJ2NBZ3QSJHPUK2L2' where id=4; -update noar tt set v0='C1PDF82HCNUMTX7TD0IAUGU8781' where id=4; -update noar ti set v0='C1PDF82HCNUMTX7TD0IAUGU8781' where id=4; -update noar tt set b2='SHV4DZNX2T26CR0BA7GWG5139PTNG' where id=4; -update noar ti set b2='SHV4DZNX2T26CR0BA7GWG5139PTNG' where id=4; -update noar tt set v0='T772XEVGTFV' where id=5; -update noar ti set v0='T772XEVGTFV' where id=5; -update noar tt set b0='CFMKN8LUFBEBNRE4FJG7V7YU17IIE' where id=5; -update noar ti set b0='CFMKN8LUFBEBNRE4FJG7V7YU17IIE' where id=5; -update noar tt set v0='D' where id=5; -update noar ti set v0='D' where id=5; -update noar tt set b1='B6P2Y36S7LV04DBT' where id=5; -update noar ti set b1='B6P2Y36S7LV04DBT' where id=5; -update noar tt set v0='FUSTNCDCMYB00USXC9SG' where id=5; -update noar ti set v0='FUSTNCDCMYB00USXC9SG' where id=5; -update noar tt set b2='45X6B9C9CKO7ACSDYWF2C0UPEWBVD' where id=5; -update noar ti set b2='45X6B9C9CKO7ACSDYWF2C0UPEWBVD' where id=5; -update noar tt set v0='YRF' where id=6; -update noar ti set v0='YRF' where id=6; -update noar tt set b0='FIT19WCTO' where id=6; -update noar ti set b0='FIT19WCTO' where id=6; -update noar tt set v0='HUT7DKH54G3SEE08R8U1SCOJY' where id=6; -update noar ti set v0='HUT7DKH54G3SEE08R8U1SCOJY' where id=6; -update noar tt set b1='K5PWHFU4QXCT8PULYCJN845' where id=6; -update noar ti set b1='K5PWHFU4QXCT8PULYCJN845' where id=6; -update noar tt set v0='1ZV6T12OVT0O9J7WKV' where id=6; -update noar ti set v0='1ZV6T12OVT0O9J7WKV' where id=6; -update noar tt set b2='3AMDBYZFPO2GDDZGHKC7GBNJ' where id=6; -update noar ti set b2='3AMDBYZFPO2GDDZGHKC7GBNJ' where id=6; -update noar tt set v0='62649G70QT23G598IR5CKLPND4SFUKQ' where id=7; -update noar ti set v0='62649G70QT23G598IR5CKLPND4SFUKQ' where id=7; -update noar tt set b0='Q7PI30WPVLNLW00' where id=7; -update noar ti set b0='Q7PI30WPVLNLW00' where id=7; -update noar tt set v0='U4DU6U03LW0GDV' where id=7; -update noar ti set v0='U4DU6U03LW0GDV' where id=7; -update noar tt set b1='581AR1P21X8HKGJYNDH0AGXB' where id=7; -update noar ti set b1='581AR1P21X8HKGJYNDH0AGXB' where id=7; -update noar tt set v0='OEOCXX8MB38GTMW' where id=7; -update noar ti set v0='OEOCXX8MB38GTMW' where id=7; -update noar tt set b2='Y6G8ZWVI5EGH7NMJ326OQKJWZMCCO5IA' where id=7; -update noar ti set b2='Y6G8ZWVI5EGH7NMJ326OQKJWZMCCO5IA' where id=7; -update noar tt set v0='CM8RUHC2HEH2MSY47BATWMXMXIWV' where id=8; -update noar ti set v0='CM8RUHC2HEH2MSY47BATWMXMXIWV' where id=8; -update noar tt set b0='J48HOSOIR8ITD' where id=8; -update noar ti set b0='J48HOSOIR8ITD' where id=8; -update noar tt set v0='CJ7DM7VIS5FVFFTSC1A9T3IPOX512' where id=8; -update noar ti set v0='CJ7DM7VIS5FVFFTSC1A9T3IPOX512' where id=8; -update noar tt set b1='DDDA0C1KCQAGLX02PUPYX9JOTH1Q4WBY' where id=8; -update noar ti set b1='DDDA0C1KCQAGLX02PUPYX9JOTH1Q4WBY' where id=8; -update noar tt set v0='5WMFIGARIK08F4WOA1' where id=8; -update noar ti set v0='5WMFIGARIK08F4WOA1' where id=8; -update noar tt set b2='3C74W5EAAU06EEK745CEYPKEMQD' where id=8; -update noar ti set b2='3C74W5EAAU06EEK745CEYPKEMQD' where id=8; -update noar tt set v0='8YQL4C2UA838FLPTK8' where id=9; -update noar ti set v0='8YQL4C2UA838FLPTK8' where id=9; -update noar tt set b0='6MIA72A297ZYL2VLGDJ3HD1XR' where id=9; -update noar ti set b0='6MIA72A297ZYL2VLGDJ3HD1XR' where id=9; -update noar tt set v0='MW5PFU7AUWFDGRE6' where id=9; -update noar ti set v0='MW5PFU7AUWFDGRE6' where id=9; -update noar tt set b1='OTBG4W5FF1ZY6OML4FVJP1H14IBH' where id=9; -update noar ti set b1='OTBG4W5FF1ZY6OML4FVJP1H14IBH' where id=9; -update noar tt set v0='UGMRBVTEORP6EM3TJ' where id=9; -update noar ti set v0='UGMRBVTEORP6EM3TJ' where id=9; -update noar tt set b2='V' where id=9; -update noar ti set b2='V' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 tinyblob not null, -b1 tinyblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='7XTT73TB6O2ZROIS6Y' where id=1; -update noar ti set v0='7XTT73TB6O2ZROIS6Y' where id=1; -update noar tt set b0='Q7KGHH' where id=1; -update noar ti set b0='Q7KGHH' where id=1; -update noar tt set v0='XY1VOS09GPAWLXEETTVSP3T0' where id=1; -update noar ti set v0='XY1VOS09GPAWLXEETTVSP3T0' where id=1; -update noar tt set b1='1TK8D' where id=1; -update noar ti set b1='1TK8D' where id=1; -update noar tt set v0='16XA06KSW6NIT' where id=1; -update noar ti set v0='16XA06KSW6NIT' where id=1; -update noar tt set b2='7T3DDNQPF4OYECMNFGX5OXJF' where id=1; -update noar ti set b2='7T3DDNQPF4OYECMNFGX5OXJF' where id=1; -update noar tt set v0='IIN4XULFRSR58UT4H6XTFOFSNAYMMQBB' where id=2; -update noar ti set v0='IIN4XULFRSR58UT4H6XTFOFSNAYMMQBB' where id=2; -update noar tt set b0='ZFCOTEUO684CUJBGJSDWO7W' where id=2; -update noar ti set b0='ZFCOTEUO684CUJBGJSDWO7W' where id=2; -update noar tt set v0='X9FHNE7G6YYWCBP9EWH8RD4W' where id=2; -update noar ti set v0='X9FHNE7G6YYWCBP9EWH8RD4W' where id=2; -update noar tt set b1='M4OYBT793CUJ1674PHUUEAM8J55MS' where id=2; -update noar ti set b1='M4OYBT793CUJ1674PHUUEAM8J55MS' where id=2; -update noar tt set v0='F' where id=2; -update noar ti set v0='F' where id=2; -update noar tt set b2='2GX93CUWKA7GKHTWMR' where id=2; -update noar ti set b2='2GX93CUWKA7GKHTWMR' where id=2; -update noar tt set v0='3S8UD79J7ZMYZ' where id=3; -update noar ti set v0='3S8UD79J7ZMYZ' where id=3; -update noar tt set b0='6TBMQGKGL2JMT' where id=3; -update noar ti set b0='6TBMQGKGL2JMT' where id=3; -update noar tt set v0='Z950E9IRHP5L1VTLMJ0MECLQC51' where id=3; -update noar ti set v0='Z950E9IRHP5L1VTLMJ0MECLQC51' where id=3; -update noar tt set b1='4TZ3B' where id=3; -update noar ti set b1='4TZ3B' where id=3; -update noar tt set v0='V' where id=3; -update noar ti set v0='V' where id=3; -update noar tt set b2='4GU1VTRD5GF87HNJPJYP2SXK0IRBQPY' where id=3; -update noar ti set b2='4GU1VTRD5GF87HNJPJYP2SXK0IRBQPY' where id=3; -update noar tt set v0='ECEYJOFA504OPSNOEAOJ' where id=4; -update noar ti set v0='ECEYJOFA504OPSNOEAOJ' where id=4; -update noar tt set b0='OUYV5F' where id=4; -update noar ti set b0='OUYV5F' where id=4; -update noar tt set v0='7Y6J6LXKONTTGEVEUA9Z' where id=4; -update noar ti set v0='7Y6J6LXKONTTGEVEUA9Z' where id=4; -update noar tt set b1='P3LW' where id=4; -update noar ti set b1='P3LW' where id=4; -update noar tt set v0='SZ38GAN2EM51' where id=4; -update noar ti set v0='SZ38GAN2EM51' where id=4; -update noar tt set b2='9E' where id=4; -update noar ti set b2='9E' where id=4; -update noar tt set v0='2' where id=5; -update noar ti set v0='2' where id=5; -update noar tt set b0='IF7YOOD8UCL7FL' where id=5; -update noar ti set b0='IF7YOOD8UCL7FL' where id=5; -update noar tt set v0='HUHXW5QJF7P' where id=5; -update noar ti set v0='HUHXW5QJF7P' where id=5; -update noar tt set b1='54I625COL1E' where id=5; -update noar ti set b1='54I625COL1E' where id=5; -update noar tt set v0='T61CCMJU0FWNX' where id=5; -update noar ti set v0='T61CCMJU0FWNX' where id=5; -update noar tt set b2='Y1G0RDSE184U3EI21NQWJS7' where id=5; -update noar ti set b2='Y1G0RDSE184U3EI21NQWJS7' where id=5; -update noar tt set v0='HUHMVG3C6KFUIWZYPSJWAJFILVTWW0' where id=6; -update noar ti set v0='HUHMVG3C6KFUIWZYPSJWAJFILVTWW0' where id=6; -update noar tt set b0='SSS4' where id=6; -update noar ti set b0='SSS4' where id=6; -update noar tt set v0='22Q3QFMX9O6EK8JH5J' where id=6; -update noar ti set v0='22Q3QFMX9O6EK8JH5J' where id=6; -update noar tt set b1='GFQYG61MUE3BO5' where id=6; -update noar ti set b1='GFQYG61MUE3BO5' where id=6; -update noar tt set v0='MJ6RUYCTN1B04IXPBI6K7VONB3RZO' where id=6; -update noar ti set v0='MJ6RUYCTN1B04IXPBI6K7VONB3RZO' where id=6; -update noar tt set b2='QC1UN0X0ZDF6YK' where id=6; -update noar ti set b2='QC1UN0X0ZDF6YK' where id=6; -update noar tt set v0='16GAUCR1A7FZV3BN0' where id=7; -update noar ti set v0='16GAUCR1A7FZV3BN0' where id=7; -update noar tt set b0='4S71LZQD1MV4PLZ9K273TF0I' where id=7; -update noar ti set b0='4S71LZQD1MV4PLZ9K273TF0I' where id=7; -update noar tt set v0='B3DX22JT9KMPOMG4YQNQSEZD8I' where id=7; -update noar ti set v0='B3DX22JT9KMPOMG4YQNQSEZD8I' where id=7; -update noar tt set b1='901DP42WV97QFW1NLYDRR88AWP' where id=7; -update noar ti set b1='901DP42WV97QFW1NLYDRR88AWP' where id=7; -update noar tt set v0='RH1H99MQBOWGDNA6F0ZCAU0EHY' where id=7; -update noar ti set v0='RH1H99MQBOWGDNA6F0ZCAU0EHY' where id=7; -update noar tt set b2='UTJ24G95SZK28WIZTEG7FQAS2G5AFH' where id=7; -update noar ti set b2='UTJ24G95SZK28WIZTEG7FQAS2G5AFH' where id=7; -update noar tt set v0='5INBHYAFHU6UNXWXW82' where id=8; -update noar ti set v0='5INBHYAFHU6UNXWXW82' where id=8; -update noar tt set b0='R8' where id=8; -update noar ti set b0='R8' where id=8; -update noar tt set v0='86J3XWPQBDAE7DH6N4BSWCNKQ0DSICR4' where id=8; -update noar ti set v0='86J3XWPQBDAE7DH6N4BSWCNKQ0DSICR4' where id=8; -update noar tt set b1='XO9ADPIOC15W65' where id=8; -update noar ti set b1='XO9ADPIOC15W65' where id=8; -update noar tt set v0='ZWX' where id=8; -update noar ti set v0='ZWX' where id=8; -update noar tt set b2='DI02PG5UHYGW26QIP7RFN5' where id=8; -update noar ti set b2='DI02PG5UHYGW26QIP7RFN5' where id=8; -update noar tt set v0='23B' where id=9; -update noar ti set v0='23B' where id=9; -update noar tt set b0='OK7CO7B605S05ZEA2R' where id=9; -update noar ti set b0='OK7CO7B605S05ZEA2R' where id=9; -update noar tt set v0='MRAVTBHQJ2KMBQ' where id=9; -update noar ti set v0='MRAVTBHQJ2KMBQ' where id=9; -update noar tt set b1='VBVVXR' where id=9; -update noar ti set b1='VBVVXR' where id=9; -update noar tt set v0='WVYRUL7OKPOCAG' where id=9; -update noar ti set v0='WVYRUL7OKPOCAG' where id=9; -update noar tt set b2='AZYZ2TNI4' where id=9; -update noar ti set b2='AZYZ2TNI4' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 tinyblob not null, -b1 tinyblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='P8ERNEXJX0' where id=1; -update noar ti set v0='P8ERNEXJX0' where id=1; -update noar tt set b0='46LLDX6PU5W3C1AK8' where id=1; -update noar ti set b0='46LLDX6PU5W3C1AK8' where id=1; -update noar tt set v0='89DEUI' where id=1; -update noar ti set v0='89DEUI' where id=1; -update noar tt set b1='51OIFUHAFC' where id=1; -update noar ti set b1='51OIFUHAFC' where id=1; -update noar tt set v0='YDG1IG3BOYA8D9J7LNZM' where id=1; -update noar ti set v0='YDG1IG3BOYA8D9J7LNZM' where id=1; -update noar tt set b2='Q31K7LUKOKN63WE0536ZJVXE4VFGYJL' where id=1; -update noar ti set b2='Q31K7LUKOKN63WE0536ZJVXE4VFGYJL' where id=1; -update noar tt set v0='V' where id=2; -update noar ti set v0='V' where id=2; -update noar tt set b0='4' where id=2; -update noar ti set b0='4' where id=2; -update noar tt set v0='HF3LV51L9NUVQ16H' where id=2; -update noar ti set v0='HF3LV51L9NUVQ16H' where id=2; -update noar tt set b1='9TLL9T' where id=2; -update noar ti set b1='9TLL9T' where id=2; -update noar tt set v0='NJD6IG' where id=2; -update noar ti set v0='NJD6IG' where id=2; -update noar tt set b2='ZZ0LN5ILJ7E1WWMME26J6BFR5' where id=2; -update noar ti set b2='ZZ0LN5ILJ7E1WWMME26J6BFR5' where id=2; -update noar tt set v0='BMZSSN5DZ68AAZHDFVDKT6AOIN4' where id=3; -update noar ti set v0='BMZSSN5DZ68AAZHDFVDKT6AOIN4' where id=3; -update noar tt set b0='IYBES7D33F' where id=3; -update noar ti set b0='IYBES7D33F' where id=3; -update noar tt set v0='VRV9J3OELG82TP49NIIL93K0ILZK8OEH' where id=3; -update noar ti set v0='VRV9J3OELG82TP49NIIL93K0ILZK8OEH' where id=3; -update noar tt set b1='BAZMSYZ9' where id=3; -update noar ti set b1='BAZMSYZ9' where id=3; -update noar tt set v0='71TVIPM60CDQ' where id=3; -update noar ti set v0='71TVIPM60CDQ' where id=3; -update noar tt set b2='PQ0CQ9TQJ30QHIE6VMFKUZ0VM24' where id=3; -update noar ti set b2='PQ0CQ9TQJ30QHIE6VMFKUZ0VM24' where id=3; -update noar tt set v0='FK2QS2M38MG4SB' where id=4; -update noar ti set v0='FK2QS2M38MG4SB' where id=4; -update noar tt set b0='BJ53EUSXGLSJT2DK0HRSTKVNOC' where id=4; -update noar ti set b0='BJ53EUSXGLSJT2DK0HRSTKVNOC' where id=4; -update noar tt set v0='AW0JKGZG' where id=4; -update noar ti set v0='AW0JKGZG' where id=4; -update noar tt set b1='QYF22DIANJZJDLW' where id=4; -update noar ti set b1='QYF22DIANJZJDLW' where id=4; -update noar tt set v0='UOKB2TZJGOAY7W0CCY13IM6DCN83RNV' where id=4; -update noar ti set v0='UOKB2TZJGOAY7W0CCY13IM6DCN83RNV' where id=4; -update noar tt set b2='QFGB82ROQMFRJ' where id=4; -update noar ti set b2='QFGB82ROQMFRJ' where id=4; -update noar tt set v0='GCT1' where id=5; -update noar ti set v0='GCT1' where id=5; -update noar tt set b0='4AY3G3TMA6K1KLOG' where id=5; -update noar ti set b0='4AY3G3TMA6K1KLOG' where id=5; -update noar tt set v0='E2NQGKV9NQ' where id=5; -update noar ti set v0='E2NQGKV9NQ' where id=5; -update noar tt set b1='0FZXXTL56A9FDWQWTV8VDE5' where id=5; -update noar ti set b1='0FZXXTL56A9FDWQWTV8VDE5' where id=5; -update noar tt set v0='2' where id=5; -update noar ti set v0='2' where id=5; -update noar tt set b2='XNHFGL9O4331TJ8O5WGJ' where id=5; -update noar ti set b2='XNHFGL9O4331TJ8O5WGJ' where id=5; -update noar tt set v0='3WN2' where id=6; -update noar ti set v0='3WN2' where id=6; -update noar tt set b0='4OHP6FSU5QAPFHYGW3' where id=6; -update noar ti set b0='4OHP6FSU5QAPFHYGW3' where id=6; -update noar tt set v0='6LZLS7JDJZMXTEL09' where id=6; -update noar ti set v0='6LZLS7JDJZMXTEL09' where id=6; -update noar tt set b1='E56W' where id=6; -update noar ti set b1='E56W' where id=6; -update noar tt set v0='Z' where id=6; -update noar ti set v0='Z' where id=6; -update noar tt set b2='QL4P44RMBNPTM1BGXORDXA' where id=6; -update noar ti set b2='QL4P44RMBNPTM1BGXORDXA' where id=6; -update noar tt set v0='V72KAJT49Q3XNJJH3BZ38UIDBR' where id=7; -update noar ti set v0='V72KAJT49Q3XNJJH3BZ38UIDBR' where id=7; -update noar tt set b0='A8ZHTF28G2ESEKC2P' where id=7; -update noar ti set b0='A8ZHTF28G2ESEKC2P' where id=7; -update noar tt set v0='MSU2TK7T7X8H2PO002' where id=7; -update noar ti set v0='MSU2TK7T7X8H2PO002' where id=7; -update noar tt set b1='OEIVQ9JNR12TLNS9F9TRBO' where id=7; -update noar ti set b1='OEIVQ9JNR12TLNS9F9TRBO' where id=7; -update noar tt set v0='ORMWQRG' where id=7; -update noar ti set v0='ORMWQRG' where id=7; -update noar tt set b2='2TGJ' where id=7; -update noar ti set b2='2TGJ' where id=7; -update noar tt set v0='DM8NIYDI3UY7VYOP6CA' where id=8; -update noar ti set v0='DM8NIYDI3UY7VYOP6CA' where id=8; -update noar tt set b0='0R8SCQQHS2' where id=8; -update noar ti set b0='0R8SCQQHS2' where id=8; -update noar tt set v0='73V4GP8ZGHQUPGHJQNEMSNB6ZDC09RB' where id=8; -update noar ti set v0='73V4GP8ZGHQUPGHJQNEMSNB6ZDC09RB' where id=8; -update noar tt set b1='T5PUHSVI2D42NGLBRORMZ5QYC5DTXTZ' where id=8; -update noar ti set b1='T5PUHSVI2D42NGLBRORMZ5QYC5DTXTZ' where id=8; -update noar tt set v0='VQFLD8QM79CJWYS' where id=8; -update noar ti set v0='VQFLD8QM79CJWYS' where id=8; -update noar tt set b2='U71T03E3B7RY' where id=8; -update noar ti set b2='U71T03E3B7RY' where id=8; -update noar tt set v0='040Z9WA6YSCGWQ9B5W4NU423DTFI' where id=9; -update noar ti set v0='040Z9WA6YSCGWQ9B5W4NU423DTFI' where id=9; -update noar tt set b0='7S5ZH62ONHLKBLLQM6J9ME9PA2EP' where id=9; -update noar ti set b0='7S5ZH62ONHLKBLLQM6J9ME9PA2EP' where id=9; -update noar tt set v0='EPH88UO2JBO4A45I1MH7U9LLQT' where id=9; -update noar ti set v0='EPH88UO2JBO4A45I1MH7U9LLQT' where id=9; -update noar tt set b1='KBVAOHS4TOMRVITUY9PFOU9HHF' where id=9; -update noar ti set b1='KBVAOHS4TOMRVITUY9PFOU9HHF' where id=9; -update noar tt set v0='0JGT7D8SMB9C3EIG54GE57U12' where id=9; -update noar ti set v0='0JGT7D8SMB9C3EIG54GE57U12' where id=9; -update noar tt set b2='2Y57' where id=9; -update noar ti set b2='2Y57' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 tinyblob null, -b1 blob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='BROUDSR' where id=1; -update noar ti set v0='BROUDSR' where id=1; -update noar tt set b0='RIX5UPSX8W3TD609MDRNEN' where id=1; -update noar ti set b0='RIX5UPSX8W3TD609MDRNEN' where id=1; -update noar tt set v0='FA2DJ12YMS4AGIP0AP38FZ4OG' where id=1; -update noar ti set v0='FA2DJ12YMS4AGIP0AP38FZ4OG' where id=1; -update noar tt set b1='MF3RMRFVZ1DL9FGW2IPNCF' where id=1; -update noar ti set b1='MF3RMRFVZ1DL9FGW2IPNCF' where id=1; -update noar tt set v0='2FGI' where id=1; -update noar ti set v0='2FGI' where id=1; -update noar tt set b2='DUJD9TNRDDT7IRA5SG429RDYRKPF7YYS' where id=1; -update noar ti set b2='DUJD9TNRDDT7IRA5SG429RDYRKPF7YYS' where id=1; -update noar tt set v0='KZA3SVRJMGZ' where id=2; -update noar ti set v0='KZA3SVRJMGZ' where id=2; -update noar tt set b0='BDM6QA64CL' where id=2; -update noar ti set b0='BDM6QA64CL' where id=2; -update noar tt set v0='KJDHM84OLBFC8HEV0U0' where id=2; -update noar ti set v0='KJDHM84OLBFC8HEV0U0' where id=2; -update noar tt set b1='G1SL9DX1N3O0CHC5I' where id=2; -update noar ti set b1='G1SL9DX1N3O0CHC5I' where id=2; -update noar tt set v0='1740XYPAI2DR1C' where id=2; -update noar ti set v0='1740XYPAI2DR1C' where id=2; -update noar tt set b2='UU' where id=2; -update noar ti set b2='UU' where id=2; -update noar tt set v0='HSHCU568NJ4QCQC9HDIU236FWGWW' where id=3; -update noar ti set v0='HSHCU568NJ4QCQC9HDIU236FWGWW' where id=3; -update noar tt set b0='4WPHC740' where id=3; -update noar ti set b0='4WPHC740' where id=3; -update noar tt set v0='SG33S788P0HN1B3AQX6' where id=3; -update noar ti set v0='SG33S788P0HN1B3AQX6' where id=3; -update noar tt set b1='44SHY2BBA9BLFRYF1FKKA5TE' where id=3; -update noar ti set b1='44SHY2BBA9BLFRYF1FKKA5TE' where id=3; -update noar tt set v0='ITFEBA8WACVKR67GS5QQ0OTQBAHB' where id=3; -update noar ti set v0='ITFEBA8WACVKR67GS5QQ0OTQBAHB' where id=3; -update noar tt set b2='YA4KQWU4AFP6SIO8' where id=3; -update noar ti set b2='YA4KQWU4AFP6SIO8' where id=3; -update noar tt set v0='BQ7W9X' where id=4; -update noar ti set v0='BQ7W9X' where id=4; -update noar tt set b0='QFUTQUZZF71D5J' where id=4; -update noar ti set b0='QFUTQUZZF71D5J' where id=4; -update noar tt set v0='2NPYTD9N3OJPUBJHSRH4RWMBOWQFT2P' where id=4; -update noar ti set v0='2NPYTD9N3OJPUBJHSRH4RWMBOWQFT2P' where id=4; -update noar tt set b1='1L98HMNCNYU' where id=4; -update noar ti set b1='1L98HMNCNYU' where id=4; -update noar tt set v0='6QIPIGAAFURBQ7DCUFBKHE7FTUEQWMB' where id=4; -update noar ti set v0='6QIPIGAAFURBQ7DCUFBKHE7FTUEQWMB' where id=4; -update noar tt set b2='60PQQJWWA9AZ' where id=4; -update noar ti set b2='60PQQJWWA9AZ' where id=4; -update noar tt set v0='WWQCW66A' where id=5; -update noar ti set v0='WWQCW66A' where id=5; -update noar tt set b0='M1MY4PN8NFJP' where id=5; -update noar ti set b0='M1MY4PN8NFJP' where id=5; -update noar tt set v0='DHTNK6F7SEKJVX0SIWCPGWA77IAQKY2U' where id=5; -update noar ti set v0='DHTNK6F7SEKJVX0SIWCPGWA77IAQKY2U' where id=5; -update noar tt set b1='B' where id=5; -update noar ti set b1='B' where id=5; -update noar tt set v0='6BYP' where id=5; -update noar ti set v0='6BYP' where id=5; -update noar tt set b2='HICT9Z5K4E' where id=5; -update noar ti set b2='HICT9Z5K4E' where id=5; -update noar tt set v0='F' where id=6; -update noar ti set v0='F' where id=6; -update noar tt set b0='MQZO2RFT36J' where id=6; -update noar ti set b0='MQZO2RFT36J' where id=6; -update noar tt set v0='ABFV2ZBHW67QVLBTGQMS662N2X' where id=6; -update noar ti set v0='ABFV2ZBHW67QVLBTGQMS662N2X' where id=6; -update noar tt set b1='7BKQ3B8NSXP3DVP94W67' where id=6; -update noar ti set b1='7BKQ3B8NSXP3DVP94W67' where id=6; -update noar tt set v0='4VSCO3SE9ENG1RHBJCDVHFVOEGJLX0' where id=6; -update noar ti set v0='4VSCO3SE9ENG1RHBJCDVHFVOEGJLX0' where id=6; -update noar tt set b2='9LFYQYL80G82XGFQ' where id=6; -update noar ti set b2='9LFYQYL80G82XGFQ' where id=6; -update noar tt set v0='OBREEN9N8JK5PF4TFS27FOI' where id=7; -update noar ti set v0='OBREEN9N8JK5PF4TFS27FOI' where id=7; -update noar tt set b0='WBJPALYRNREZ1DG97W22LW3YNPZ' where id=7; -update noar ti set b0='WBJPALYRNREZ1DG97W22LW3YNPZ' where id=7; -update noar tt set v0='G30MQH1Z3NTR7XBKHF' where id=7; -update noar ti set v0='G30MQH1Z3NTR7XBKHF' where id=7; -update noar tt set b1='0' where id=7; -update noar ti set b1='0' where id=7; -update noar tt set v0='JE7YZ' where id=7; -update noar ti set v0='JE7YZ' where id=7; -update noar tt set b2='KZK' where id=7; -update noar ti set b2='KZK' where id=7; -update noar tt set v0='W16ESY' where id=8; -update noar ti set v0='W16ESY' where id=8; -update noar tt set b0='2KHZO6WI' where id=8; -update noar ti set b0='2KHZO6WI' where id=8; -update noar tt set v0='0CPXCSLBIS5K522R' where id=8; -update noar ti set v0='0CPXCSLBIS5K522R' where id=8; -update noar tt set b1='A58CI6K4NQ7FQAPKWE9LG8OO' where id=8; -update noar ti set b1='A58CI6K4NQ7FQAPKWE9LG8OO' where id=8; -update noar tt set v0='BZRNYKOYM83Y93UCTAR1' where id=8; -update noar ti set v0='BZRNYKOYM83Y93UCTAR1' where id=8; -update noar tt set b2='JC2R1Z090XG8TBIPREB8RVM0LCGW' where id=8; -update noar ti set b2='JC2R1Z090XG8TBIPREB8RVM0LCGW' where id=8; -update noar tt set v0='1BS' where id=9; -update noar ti set v0='1BS' where id=9; -update noar tt set b0='3KLCZHEJFGRE1RWD27IFY0' where id=9; -update noar ti set b0='3KLCZHEJFGRE1RWD27IFY0' where id=9; -update noar tt set v0='IIPL2GQ7RWMNSAAZM2EBN9LWMHY7EXVE' where id=9; -update noar ti set v0='IIPL2GQ7RWMNSAAZM2EBN9LWMHY7EXVE' where id=9; -update noar tt set b1='OSRXH' where id=9; -update noar ti set b1='OSRXH' where id=9; -update noar tt set v0='MOJUUCMQUO0' where id=9; -update noar ti set v0='MOJUUCMQUO0' where id=9; -update noar tt set b2='EFKIQ6TG9RBD1N0IRU5QFJS7' where id=9; -update noar ti set b2='EFKIQ6TG9RBD1N0IRU5QFJS7' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 tinyblob null, -b1 blob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='SRYJIKT9UMDUUVMJWKG' where id=1; -update noar ti set v0='SRYJIKT9UMDUUVMJWKG' where id=1; -update noar tt set b0='I6IK9FCUHYKXOM' where id=1; -update noar ti set b0='I6IK9FCUHYKXOM' where id=1; -update noar tt set v0='HUV9FWP3J26VL' where id=1; -update noar ti set v0='HUV9FWP3J26VL' where id=1; -update noar tt set b1='3WOW43V1QDPD6ZJ' where id=1; -update noar ti set b1='3WOW43V1QDPD6ZJ' where id=1; -update noar tt set v0='3J2NLWHDFJE0EH8ZAXD2U1827USBPIV' where id=1; -update noar ti set v0='3J2NLWHDFJE0EH8ZAXD2U1827USBPIV' where id=1; -update noar tt set b2='Y497E01' where id=1; -update noar ti set b2='Y497E01' where id=1; -update noar tt set v0='H1JY' where id=2; -update noar ti set v0='H1JY' where id=2; -update noar tt set b0='YI35EOFSQB7EZ7CRW7S9QI' where id=2; -update noar ti set b0='YI35EOFSQB7EZ7CRW7S9QI' where id=2; -update noar tt set v0='7LKGN6KR7MLI3XZVXA3TFYM' where id=2; -update noar ti set v0='7LKGN6KR7MLI3XZVXA3TFYM' where id=2; -update noar tt set b1='BE2S48NUFB7XPK9OUQSVE41PAZN0W' where id=2; -update noar ti set b1='BE2S48NUFB7XPK9OUQSVE41PAZN0W' where id=2; -update noar tt set v0='TAV8CKC1CEXWQF6G5R0QJ93' where id=2; -update noar ti set v0='TAV8CKC1CEXWQF6G5R0QJ93' where id=2; -update noar tt set b2='0DQPMM' where id=2; -update noar ti set b2='0DQPMM' where id=2; -update noar tt set v0='NY7MI21QOVN15AYK6A64' where id=3; -update noar ti set v0='NY7MI21QOVN15AYK6A64' where id=3; -update noar tt set b0='NEEQHUG6JF4GM7MH6KH63WQU604A' where id=3; -update noar ti set b0='NEEQHUG6JF4GM7MH6KH63WQU604A' where id=3; -update noar tt set v0='6H6SHGNTN7' where id=3; -update noar ti set v0='6H6SHGNTN7' where id=3; -update noar tt set b1='KT0GOJI68W5RVC9OU25240RLD5WJBR2' where id=3; -update noar ti set b1='KT0GOJI68W5RVC9OU25240RLD5WJBR2' where id=3; -update noar tt set v0='F5TC01JDVCVGUZN1WSTEXZ' where id=3; -update noar ti set v0='F5TC01JDVCVGUZN1WSTEXZ' where id=3; -update noar tt set b2='XUKBAL579EL1D' where id=3; -update noar ti set b2='XUKBAL579EL1D' where id=3; -update noar tt set v0='0VJEEDOX1YX1C2IRBUD' where id=4; -update noar ti set v0='0VJEEDOX1YX1C2IRBUD' where id=4; -update noar tt set b0='CHG' where id=4; -update noar ti set b0='CHG' where id=4; -update noar tt set v0='CPBEFBD' where id=4; -update noar ti set v0='CPBEFBD' where id=4; -update noar tt set b1='4I6' where id=4; -update noar ti set b1='4I6' where id=4; -update noar tt set v0='6UAQ6M4IWS1ILD798ZRF29YI73ZGFP2P' where id=4; -update noar ti set v0='6UAQ6M4IWS1ILD798ZRF29YI73ZGFP2P' where id=4; -update noar tt set b2='7RZBWU77YZSE' where id=4; -update noar ti set b2='7RZBWU77YZSE' where id=4; -update noar tt set v0='IHCY' where id=5; -update noar ti set v0='IHCY' where id=5; -update noar tt set b0='NF7MX9803ULIJCVUTSVGHDX6DGY0HCA7' where id=5; -update noar ti set b0='NF7MX9803ULIJCVUTSVGHDX6DGY0HCA7' where id=5; -update noar tt set v0='9HW38U6NN7' where id=5; -update noar ti set v0='9HW38U6NN7' where id=5; -update noar tt set b1='W5QHTB383UTHMHTA51STZFE' where id=5; -update noar ti set b1='W5QHTB383UTHMHTA51STZFE' where id=5; -update noar tt set v0='6H662CU5AK0ZVSLO91' where id=5; -update noar ti set v0='6H662CU5AK0ZVSLO91' where id=5; -update noar tt set b2='R' where id=5; -update noar ti set b2='R' where id=5; -update noar tt set v0='NIE1Y2RAXOXDF53KQE68GDYJ6QSP' where id=6; -update noar ti set v0='NIE1Y2RAXOXDF53KQE68GDYJ6QSP' where id=6; -update noar tt set b0='1HJIHCTB9UQ7SP77OO1GCB0XGZ' where id=6; -update noar ti set b0='1HJIHCTB9UQ7SP77OO1GCB0XGZ' where id=6; -update noar tt set v0='0' where id=6; -update noar ti set v0='0' where id=6; -update noar tt set b1='E5' where id=6; -update noar ti set b1='E5' where id=6; -update noar tt set v0='K5' where id=6; -update noar ti set v0='K5' where id=6; -update noar tt set b2='JDWGFIUQ58ZFW619J5V4N63' where id=6; -update noar ti set b2='JDWGFIUQ58ZFW619J5V4N63' where id=6; -update noar tt set v0='B486QLU' where id=7; -update noar ti set v0='B486QLU' where id=7; -update noar tt set b0='BYGMXZ2AJ55VN0DL8HHNGYNXAEAA7Z9' where id=7; -update noar ti set b0='BYGMXZ2AJ55VN0DL8HHNGYNXAEAA7Z9' where id=7; -update noar tt set v0='PF' where id=7; -update noar ti set v0='PF' where id=7; -update noar tt set b1='B384EWQEFMAH7SIHFGK98YQ3YY6CX7EA' where id=7; -update noar ti set b1='B384EWQEFMAH7SIHFGK98YQ3YY6CX7EA' where id=7; -update noar tt set v0='H5GZVSYQAXU24' where id=7; -update noar ti set v0='H5GZVSYQAXU24' where id=7; -update noar tt set b2='LLOXPNDN3SFLP29YOML' where id=7; -update noar ti set b2='LLOXPNDN3SFLP29YOML' where id=7; -update noar tt set v0='I5D7YUMCCM6B' where id=8; -update noar ti set v0='I5D7YUMCCM6B' where id=8; -update noar tt set b0='C5SM3TMLLRRSHROTJ' where id=8; -update noar ti set b0='C5SM3TMLLRRSHROTJ' where id=8; -update noar tt set v0='XSEOI' where id=8; -update noar ti set v0='XSEOI' where id=8; -update noar tt set b1='VTQ' where id=8; -update noar ti set b1='VTQ' where id=8; -update noar tt set v0='GQ23CUQG4O' where id=8; -update noar ti set v0='GQ23CUQG4O' where id=8; -update noar tt set b2='RGTFQ1BLW25X72BHAUHHD8' where id=8; -update noar ti set b2='RGTFQ1BLW25X72BHAUHHD8' where id=8; -update noar tt set v0='K7828F3XRT6XEE4PWP9J2T' where id=9; -update noar ti set v0='K7828F3XRT6XEE4PWP9J2T' where id=9; -update noar tt set b0='KDVF7O1W6S6JSRVV1EE' where id=9; -update noar ti set b0='KDVF7O1W6S6JSRVV1EE' where id=9; -update noar tt set v0='RS84B7KKF' where id=9; -update noar ti set v0='RS84B7KKF' where id=9; -update noar tt set b1='4V1QC9TC1O7J7C' where id=9; -update noar ti set b1='4V1QC9TC1O7J7C' where id=9; -update noar tt set v0='2IUL5W04RM34NU6M9QGQSX1' where id=9; -update noar ti set v0='2IUL5W04RM34NU6M9QGQSX1' where id=9; -update noar tt set b2='0RYE2TOC' where id=9; -update noar ti set b2='0RYE2TOC' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 tinyblob not null, -b1 blob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='1M3BDN2LYVWHKCQ75NL' where id=1; -update noar ti set v0='1M3BDN2LYVWHKCQ75NL' where id=1; -update noar tt set b0='WIP8ZSUE5TWWDFRZ5PRGQ2' where id=1; -update noar ti set b0='WIP8ZSUE5TWWDFRZ5PRGQ2' where id=1; -update noar tt set v0='IVBVLGZYOJ0KOLDC1EJ2' where id=1; -update noar ti set v0='IVBVLGZYOJ0KOLDC1EJ2' where id=1; -update noar tt set b1='B2UVWA7PX2U2Y7I8XW5U' where id=1; -update noar ti set b1='B2UVWA7PX2U2Y7I8XW5U' where id=1; -update noar tt set v0='EYITE2Z9PS2' where id=1; -update noar ti set v0='EYITE2Z9PS2' where id=1; -update noar tt set b2='GIJ6XAP' where id=1; -update noar ti set b2='GIJ6XAP' where id=1; -update noar tt set v0='L3N86NTCWANSI9YAV' where id=2; -update noar ti set v0='L3N86NTCWANSI9YAV' where id=2; -update noar tt set b0='G' where id=2; -update noar ti set b0='G' where id=2; -update noar tt set v0='P7IGSKL6V3E4PEE9FLJRBDLJZ' where id=2; -update noar ti set v0='P7IGSKL6V3E4PEE9FLJRBDLJZ' where id=2; -update noar tt set b1='UKRP' where id=2; -update noar ti set b1='UKRP' where id=2; -update noar tt set v0='VSPIM7XWS63UKL78BZE09C2T' where id=2; -update noar ti set v0='VSPIM7XWS63UKL78BZE09C2T' where id=2; -update noar tt set b2='MBMPE7OE18X3YOF19' where id=2; -update noar ti set b2='MBMPE7OE18X3YOF19' where id=2; -update noar tt set v0='N0MTRRTI6GQVUXQ8' where id=3; -update noar ti set v0='N0MTRRTI6GQVUXQ8' where id=3; -update noar tt set b0='DLWFSYJEJ' where id=3; -update noar ti set b0='DLWFSYJEJ' where id=3; -update noar tt set v0='LFN' where id=3; -update noar ti set v0='LFN' where id=3; -update noar tt set b1='9E' where id=3; -update noar ti set b1='9E' where id=3; -update noar tt set v0='3V9YIBI3NSG14PLAUT8AF9' where id=3; -update noar ti set v0='3V9YIBI3NSG14PLAUT8AF9' where id=3; -update noar tt set b2='GFCL5OSNEESH' where id=3; -update noar ti set b2='GFCL5OSNEESH' where id=3; -update noar tt set v0='JL' where id=4; -update noar ti set v0='JL' where id=4; -update noar tt set b0='QOXK7Q0RHTN6B9LI' where id=4; -update noar ti set b0='QOXK7Q0RHTN6B9LI' where id=4; -update noar tt set v0='6HRO' where id=4; -update noar ti set v0='6HRO' where id=4; -update noar tt set b1='99VDLOCABCSKGDIZV2FAH6JP23YI' where id=4; -update noar ti set b1='99VDLOCABCSKGDIZV2FAH6JP23YI' where id=4; -update noar tt set v0='XA62B38YU0A0E' where id=4; -update noar ti set v0='XA62B38YU0A0E' where id=4; -update noar tt set b2='R6NPUAIAMBBVO1YGHA' where id=4; -update noar ti set b2='R6NPUAIAMBBVO1YGHA' where id=4; -update noar tt set v0='MJU' where id=5; -update noar ti set v0='MJU' where id=5; -update noar tt set b0='9BGE34Y6HBP' where id=5; -update noar ti set b0='9BGE34Y6HBP' where id=5; -update noar tt set v0='643ONEEBMJ513YTII3AYC6' where id=5; -update noar ti set v0='643ONEEBMJ513YTII3AYC6' where id=5; -update noar tt set b1='KR5OW82C9TJZ' where id=5; -update noar ti set b1='KR5OW82C9TJZ' where id=5; -update noar tt set v0='TKQJ2WHKB32H243G' where id=5; -update noar ti set v0='TKQJ2WHKB32H243G' where id=5; -update noar tt set b2='JOZZLIU466' where id=5; -update noar ti set b2='JOZZLIU466' where id=5; -update noar tt set v0='MXUCG5TGOAZPLNJOQ6DR2D' where id=6; -update noar ti set v0='MXUCG5TGOAZPLNJOQ6DR2D' where id=6; -update noar tt set b0='6ZSWB' where id=6; -update noar ti set b0='6ZSWB' where id=6; -update noar tt set v0='5' where id=6; -update noar ti set v0='5' where id=6; -update noar tt set b1='7YDUL' where id=6; -update noar ti set b1='7YDUL' where id=6; -update noar tt set v0='ATNVMUR03DOQWJYH2R0GKEQ5BAMDL' where id=6; -update noar ti set v0='ATNVMUR03DOQWJYH2R0GKEQ5BAMDL' where id=6; -update noar tt set b2='SLYHPNHJGA5C4' where id=6; -update noar ti set b2='SLYHPNHJGA5C4' where id=6; -update noar tt set v0='3XK9Y53' where id=7; -update noar ti set v0='3XK9Y53' where id=7; -update noar tt set b0='0ERE' where id=7; -update noar ti set b0='0ERE' where id=7; -update noar tt set v0='HRA20YBAAOA9AAO9BV' where id=7; -update noar ti set v0='HRA20YBAAOA9AAO9BV' where id=7; -update noar tt set b1='ECZBAA43XYZM52IU8W02KTHQMSJDLJB0' where id=7; -update noar ti set b1='ECZBAA43XYZM52IU8W02KTHQMSJDLJB0' where id=7; -update noar tt set v0='US8W3DHMGUB5' where id=7; -update noar ti set v0='US8W3DHMGUB5' where id=7; -update noar tt set b2='U1W12ER0A2C27' where id=7; -update noar ti set b2='U1W12ER0A2C27' where id=7; -update noar tt set v0='ZKOSAEBJLNUI0ASUBF2KMSVFT7D' where id=8; -update noar ti set v0='ZKOSAEBJLNUI0ASUBF2KMSVFT7D' where id=8; -update noar tt set b0='8MOJRLW5ZS8' where id=8; -update noar ti set b0='8MOJRLW5ZS8' where id=8; -update noar tt set v0='YLZ67TXQD5KM3TMFBMWTMO9HT05Z3GO' where id=8; -update noar ti set v0='YLZ67TXQD5KM3TMFBMWTMO9HT05Z3GO' where id=8; -update noar tt set b1='QYPWFX16YXC6UDQL5YD6AS204Q15' where id=8; -update noar ti set b1='QYPWFX16YXC6UDQL5YD6AS204Q15' where id=8; -update noar tt set v0='FY07OGWCSW' where id=8; -update noar ti set v0='FY07OGWCSW' where id=8; -update noar tt set b2='E69NUAPLPQYMZ3' where id=8; -update noar ti set b2='E69NUAPLPQYMZ3' where id=8; -update noar tt set v0='4ZUMNJ9QV6NN9H6JJVI' where id=9; -update noar ti set v0='4ZUMNJ9QV6NN9H6JJVI' where id=9; -update noar tt set b0='4' where id=9; -update noar ti set b0='4' where id=9; -update noar tt set v0='2UCK' where id=9; -update noar ti set v0='2UCK' where id=9; -update noar tt set b1='7B5YOYFVS9F5M' where id=9; -update noar ti set b1='7B5YOYFVS9F5M' where id=9; -update noar tt set v0='9CJWUGM69HNBDGLKO38TE5L12ADO' where id=9; -update noar ti set v0='9CJWUGM69HNBDGLKO38TE5L12ADO' where id=9; -update noar tt set b2='5E9QX8EC1OCFS9HNY2' where id=9; -update noar ti set b2='5E9QX8EC1OCFS9HNY2' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 tinyblob not null, -b1 blob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='D16B' where id=1; -update noar ti set v0='D16B' where id=1; -update noar tt set b0='1GLRM' where id=1; -update noar ti set b0='1GLRM' where id=1; -update noar tt set v0='BWI' where id=1; -update noar ti set v0='BWI' where id=1; -update noar tt set b1='93XR68CG95P1FQ1AHRBWGQTBLZTBDCOZ' where id=1; -update noar ti set b1='93XR68CG95P1FQ1AHRBWGQTBLZTBDCOZ' where id=1; -update noar tt set v0='51CTWC3F4GJES8K4WAAZRFLR7C' where id=1; -update noar ti set v0='51CTWC3F4GJES8K4WAAZRFLR7C' where id=1; -update noar tt set b2='6Q050V' where id=1; -update noar ti set b2='6Q050V' where id=1; -update noar tt set v0='5KQRMV9R310WGQP8XOL' where id=2; -update noar ti set v0='5KQRMV9R310WGQP8XOL' where id=2; -update noar tt set b0='3X1HAD54DRB4MPS' where id=2; -update noar ti set b0='3X1HAD54DRB4MPS' where id=2; -update noar tt set v0='ID3PCB7AMA47VPDJKRCB87J1JVH4XZW' where id=2; -update noar ti set v0='ID3PCB7AMA47VPDJKRCB87J1JVH4XZW' where id=2; -update noar tt set b1='DRCLLAJP082OGQOFP' where id=2; -update noar ti set b1='DRCLLAJP082OGQOFP' where id=2; -update noar tt set v0='TIZ09' where id=2; -update noar ti set v0='TIZ09' where id=2; -update noar tt set b2='FITZRU85OZ3C' where id=2; -update noar ti set b2='FITZRU85OZ3C' where id=2; -update noar tt set v0='OMX9HNFQMFE0XTB' where id=3; -update noar ti set v0='OMX9HNFQMFE0XTB' where id=3; -update noar tt set b0='C2TINHJMIKHWBMK9PCPU7XS2O' where id=3; -update noar ti set b0='C2TINHJMIKHWBMK9PCPU7XS2O' where id=3; -update noar tt set v0='Z365ZS7F30D0IGO7WX81LD8RFHVT' where id=3; -update noar ti set v0='Z365ZS7F30D0IGO7WX81LD8RFHVT' where id=3; -update noar tt set b1='Z5W2JOI' where id=3; -update noar ti set b1='Z5W2JOI' where id=3; -update noar tt set v0='NZH2S8YRKZ29OBRX62M0HLTV7MMPW7' where id=3; -update noar ti set v0='NZH2S8YRKZ29OBRX62M0HLTV7MMPW7' where id=3; -update noar tt set b2='B104PRWOJMAPGY1VRDAOZC6GF5QM1W' where id=3; -update noar ti set b2='B104PRWOJMAPGY1VRDAOZC6GF5QM1W' where id=3; -update noar tt set v0='5V75N3V' where id=4; -update noar ti set v0='5V75N3V' where id=4; -update noar tt set b0='OUZT2ZB4TRH8KAE4LLPHI1' where id=4; -update noar ti set b0='OUZT2ZB4TRH8KAE4LLPHI1' where id=4; -update noar tt set v0='RDWE9JTRLPEHSMD1X7WN3' where id=4; -update noar ti set v0='RDWE9JTRLPEHSMD1X7WN3' where id=4; -update noar tt set b1='T5WR21RGSA7GUO7X' where id=4; -update noar ti set b1='T5WR21RGSA7GUO7X' where id=4; -update noar tt set v0='8FV' where id=4; -update noar ti set v0='8FV' where id=4; -update noar tt set b2='AK7P964L' where id=4; -update noar ti set b2='AK7P964L' where id=4; -update noar tt set v0='I4TT8488NY40' where id=5; -update noar ti set v0='I4TT8488NY40' where id=5; -update noar tt set b0='B057L4QV' where id=5; -update noar ti set b0='B057L4QV' where id=5; -update noar tt set v0='9ZCQXIJUON2TLU394' where id=5; -update noar ti set v0='9ZCQXIJUON2TLU394' where id=5; -update noar tt set b1='VKBNM' where id=5; -update noar ti set b1='VKBNM' where id=5; -update noar tt set v0='FW0E5N2LVX703UIAI44XY' where id=5; -update noar ti set v0='FW0E5N2LVX703UIAI44XY' where id=5; -update noar tt set b2='6GD5MNMXP4CSJEMVOP7IPUFD' where id=5; -update noar ti set b2='6GD5MNMXP4CSJEMVOP7IPUFD' where id=5; -update noar tt set v0='Y' where id=6; -update noar ti set v0='Y' where id=6; -update noar tt set b0='N778ONW15IE4' where id=6; -update noar ti set b0='N778ONW15IE4' where id=6; -update noar tt set v0='KDWKCNG464TOLSF46N9' where id=6; -update noar ti set v0='KDWKCNG464TOLSF46N9' where id=6; -update noar tt set b1='V7ADAMKHGLH0CXKWEVMCA9W' where id=6; -update noar ti set b1='V7ADAMKHGLH0CXKWEVMCA9W' where id=6; -update noar tt set v0='1UVE4PLGLR7V2OTFW7FB8' where id=6; -update noar ti set v0='1UVE4PLGLR7V2OTFW7FB8' where id=6; -update noar tt set b2='0H4ZY8F62LTM6V1093P2EEVGAY036A0' where id=6; -update noar ti set b2='0H4ZY8F62LTM6V1093P2EEVGAY036A0' where id=6; -update noar tt set v0='FBRSFD24Q603JJJQJA0U6MJ1U3Y' where id=7; -update noar ti set v0='FBRSFD24Q603JJJQJA0U6MJ1U3Y' where id=7; -update noar tt set b0='Z7KPMID44AT' where id=7; -update noar ti set b0='Z7KPMID44AT' where id=7; -update noar tt set v0='715A4JQ0HMSC7HOY0' where id=7; -update noar ti set v0='715A4JQ0HMSC7HOY0' where id=7; -update noar tt set b1='3C7UVSJNTN' where id=7; -update noar ti set b1='3C7UVSJNTN' where id=7; -update noar tt set v0='1S5ZS' where id=7; -update noar ti set v0='1S5ZS' where id=7; -update noar tt set b2='5X45ZRH6V8UQFK0767S0IRPTVBT62RE0' where id=7; -update noar ti set b2='5X45ZRH6V8UQFK0767S0IRPTVBT62RE0' where id=7; -update noar tt set v0='MUIHBB9LOF' where id=8; -update noar ti set v0='MUIHBB9LOF' where id=8; -update noar tt set b0='58Q8' where id=8; -update noar ti set b0='58Q8' where id=8; -update noar tt set v0='0TX' where id=8; -update noar ti set v0='0TX' where id=8; -update noar tt set b1='OIY8EE3' where id=8; -update noar ti set b1='OIY8EE3' where id=8; -update noar tt set v0='CFKBOCQP9O' where id=8; -update noar ti set v0='CFKBOCQP9O' where id=8; -update noar tt set b2='W0WCO3LKT0D8OHVX5' where id=8; -update noar ti set b2='W0WCO3LKT0D8OHVX5' where id=8; -update noar tt set v0='VH8XQZ' where id=9; -update noar ti set v0='VH8XQZ' where id=9; -update noar tt set b0='1BA3N' where id=9; -update noar ti set b0='1BA3N' where id=9; -update noar tt set v0='12YQQ23GYSM9M7T3SY0CAYCFQ5WJ4W' where id=9; -update noar ti set v0='12YQQ23GYSM9M7T3SY0CAYCFQ5WJ4W' where id=9; -update noar tt set b1='6TPTEJV2MA9AZ0K9JQ9KEKK9GK6' where id=9; -update noar ti set b1='6TPTEJV2MA9AZ0K9JQ9KEKK9GK6' where id=9; -update noar tt set v0='Q' where id=9; -update noar ti set v0='Q' where id=9; -update noar tt set b2='JUQP2VLQXK5M4DPBNZA71V023' where id=9; -update noar ti set b2='JUQP2VLQXK5M4DPBNZA71V023' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 tinyblob null, -b1 blob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='U50AJQ1JN1G0YH' where id=1; -update noar ti set v0='U50AJQ1JN1G0YH' where id=1; -update noar tt set b0='VAF3V1GU' where id=1; -update noar ti set b0='VAF3V1GU' where id=1; -update noar tt set v0='WJNS9B6981XFM1M1GF0XUI0' where id=1; -update noar ti set v0='WJNS9B6981XFM1M1GF0XUI0' where id=1; -update noar tt set b1='ZS5NQBM9YRUEMMGCSBFQYZS1T' where id=1; -update noar ti set b1='ZS5NQBM9YRUEMMGCSBFQYZS1T' where id=1; -update noar tt set v0='BX9VN7U7F4H1EU0CZ2VXLX36SMT' where id=1; -update noar ti set v0='BX9VN7U7F4H1EU0CZ2VXLX36SMT' where id=1; -update noar tt set b2='3G4CDC88E6435QRY' where id=1; -update noar ti set b2='3G4CDC88E6435QRY' where id=1; -update noar tt set v0='8J43KAUNM9' where id=2; -update noar ti set v0='8J43KAUNM9' where id=2; -update noar tt set b0='TH' where id=2; -update noar ti set b0='TH' where id=2; -update noar tt set v0='VS' where id=2; -update noar ti set v0='VS' where id=2; -update noar tt set b1='YOZ59SCEO8MVYNKIKJR' where id=2; -update noar ti set b1='YOZ59SCEO8MVYNKIKJR' where id=2; -update noar tt set v0='CMKKFCMT1K17U' where id=2; -update noar ti set v0='CMKKFCMT1K17U' where id=2; -update noar tt set b2='PYK0ACLSWCG22BKK9ITELHJ1' where id=2; -update noar ti set b2='PYK0ACLSWCG22BKK9ITELHJ1' where id=2; -update noar tt set v0='7QZUQ7SX6KTKPM6YLE31KVR3SLZRLOQ' where id=3; -update noar ti set v0='7QZUQ7SX6KTKPM6YLE31KVR3SLZRLOQ' where id=3; -update noar tt set b0='0OEV8YCO4T0HC8LKP47MY036MKEVES' where id=3; -update noar ti set b0='0OEV8YCO4T0HC8LKP47MY036MKEVES' where id=3; -update noar tt set v0='TDIPGQKTPH6CHWO4A5N4WNZ6UW' where id=3; -update noar ti set v0='TDIPGQKTPH6CHWO4A5N4WNZ6UW' where id=3; -update noar tt set b1='8PHCVSWXKSC8KL7PUOH' where id=3; -update noar ti set b1='8PHCVSWXKSC8KL7PUOH' where id=3; -update noar tt set v0='UOSA8ZTCO7684' where id=3; -update noar ti set v0='UOSA8ZTCO7684' where id=3; -update noar tt set b2='RGNKGWGGTXRNKA' where id=3; -update noar ti set b2='RGNKGWGGTXRNKA' where id=3; -update noar tt set v0='ABMW' where id=4; -update noar ti set v0='ABMW' where id=4; -update noar tt set b0='MAIY1I7W3YQA1QCKC3HUOPXQE02TQ6T' where id=4; -update noar ti set b0='MAIY1I7W3YQA1QCKC3HUOPXQE02TQ6T' where id=4; -update noar tt set v0='IHN7FTEI1D5M4JCTHNBY5GIDLHCLK5J9' where id=4; -update noar ti set v0='IHN7FTEI1D5M4JCTHNBY5GIDLHCLK5J9' where id=4; -update noar tt set b1='0PVBMVE' where id=4; -update noar ti set b1='0PVBMVE' where id=4; -update noar tt set v0='K' where id=4; -update noar ti set v0='K' where id=4; -update noar tt set b2='KA9J0D8SW7H4X6KMTG387N8EIG2Y' where id=4; -update noar ti set b2='KA9J0D8SW7H4X6KMTG387N8EIG2Y' where id=4; -update noar tt set v0='XECTDXBWT04EQJ8HQKXGGQ19NVIRDB' where id=5; -update noar ti set v0='XECTDXBWT04EQJ8HQKXGGQ19NVIRDB' where id=5; -update noar tt set b0='6K5XICS4' where id=5; -update noar ti set b0='6K5XICS4' where id=5; -update noar tt set v0='6WKS2DY0EPK3W' where id=5; -update noar ti set v0='6WKS2DY0EPK3W' where id=5; -update noar tt set b1='RD1PEV' where id=5; -update noar ti set b1='RD1PEV' where id=5; -update noar tt set v0='PSXIERURXWIWAJLZOHU7VSD' where id=5; -update noar ti set v0='PSXIERURXWIWAJLZOHU7VSD' where id=5; -update noar tt set b2='TX88HBADG4Y9N4FNKRQEB2' where id=5; -update noar ti set b2='TX88HBADG4Y9N4FNKRQEB2' where id=5; -update noar tt set v0='9UVEYD7AWTYQZOFBST08SJFWP2GD6J' where id=6; -update noar ti set v0='9UVEYD7AWTYQZOFBST08SJFWP2GD6J' where id=6; -update noar tt set b0='BQGUELQ0NJY0NCVTXTUNI3Q7ZLJUT' where id=6; -update noar ti set b0='BQGUELQ0NJY0NCVTXTUNI3Q7ZLJUT' where id=6; -update noar tt set v0='P4S5FGG0HC8BPUH6OE2FSI' where id=6; -update noar ti set v0='P4S5FGG0HC8BPUH6OE2FSI' where id=6; -update noar tt set b1='DB66VV0DE1Y3LPPP6JBNY1K' where id=6; -update noar ti set b1='DB66VV0DE1Y3LPPP6JBNY1K' where id=6; -update noar tt set v0='WPN' where id=6; -update noar ti set v0='WPN' where id=6; -update noar tt set b2='VHRHD6PZ3KO4M3Z' where id=6; -update noar ti set b2='VHRHD6PZ3KO4M3Z' where id=6; -update noar tt set v0='96AJTQZKM' where id=7; -update noar ti set v0='96AJTQZKM' where id=7; -update noar tt set b0='KH9K6' where id=7; -update noar ti set b0='KH9K6' where id=7; -update noar tt set v0='9EAE' where id=7; -update noar ti set v0='9EAE' where id=7; -update noar tt set b1='OP4NVCVKSFROYVOFM7GD0QJYKAVN3Y' where id=7; -update noar ti set b1='OP4NVCVKSFROYVOFM7GD0QJYKAVN3Y' where id=7; -update noar tt set v0='9ZANWI5' where id=7; -update noar ti set v0='9ZANWI5' where id=7; -update noar tt set b2='EMIAHLYA9R7OZ3KS8BDMAYMU22LY5Z' where id=7; -update noar ti set b2='EMIAHLYA9R7OZ3KS8BDMAYMU22LY5Z' where id=7; -update noar tt set v0='N92XHAMJE561R2Q0OJV2F95TSL58' where id=8; -update noar ti set v0='N92XHAMJE561R2Q0OJV2F95TSL58' where id=8; -update noar tt set b0='13K46DNSTTDOG' where id=8; -update noar ti set b0='13K46DNSTTDOG' where id=8; -update noar tt set v0='S18HGU8671HPALLH' where id=8; -update noar ti set v0='S18HGU8671HPALLH' where id=8; -update noar tt set b1='5TCFNGVDEQE71KW71YQUY6RFUGX' where id=8; -update noar ti set b1='5TCFNGVDEQE71KW71YQUY6RFUGX' where id=8; -update noar tt set v0='MR2EE98P9' where id=8; -update noar ti set v0='MR2EE98P9' where id=8; -update noar tt set b2='07JYA894MPURF4' where id=8; -update noar ti set b2='07JYA894MPURF4' where id=8; -update noar tt set v0='K67V75EW1A89BAB596N0X' where id=9; -update noar ti set v0='K67V75EW1A89BAB596N0X' where id=9; -update noar tt set b0='SY2QCCXKBEK2DT36U37J9MZUU' where id=9; -update noar ti set b0='SY2QCCXKBEK2DT36U37J9MZUU' where id=9; -update noar tt set v0='Q9HR' where id=9; -update noar ti set v0='Q9HR' where id=9; -update noar tt set b1='TB474GT9P915JA7' where id=9; -update noar ti set b1='TB474GT9P915JA7' where id=9; -update noar tt set v0='EIXA2H2E0XLCBJ3REOGVLSOCL2VYQGR' where id=9; -update noar ti set v0='EIXA2H2E0XLCBJ3REOGVLSOCL2VYQGR' where id=9; -update noar tt set b2='64MAF15KBC5Y8ZH236Q9KWRNL9Q' where id=9; -update noar ti set b2='64MAF15KBC5Y8ZH236Q9KWRNL9Q' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 tinyblob null, -b1 blob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='2I' where id=1; -update noar ti set v0='2I' where id=1; -update noar tt set b0='P1VI3KLF905KLGIKEXXXLI' where id=1; -update noar ti set b0='P1VI3KLF905KLGIKEXXXLI' where id=1; -update noar tt set v0='ZL66BQBQM17YN8NN' where id=1; -update noar ti set v0='ZL66BQBQM17YN8NN' where id=1; -update noar tt set b1='ZLNEVXTXK7OZJJ2NXOW75P20MA0AII' where id=1; -update noar ti set b1='ZLNEVXTXK7OZJJ2NXOW75P20MA0AII' where id=1; -update noar tt set v0='JYM' where id=1; -update noar ti set v0='JYM' where id=1; -update noar tt set b2='O7EZG' where id=1; -update noar ti set b2='O7EZG' where id=1; -update noar tt set v0='OJQX6UFC' where id=2; -update noar ti set v0='OJQX6UFC' where id=2; -update noar tt set b0='UA5Z9GE' where id=2; -update noar ti set b0='UA5Z9GE' where id=2; -update noar tt set v0='QKP63Y2BX56XFNX2T8WFHRTAQ' where id=2; -update noar ti set v0='QKP63Y2BX56XFNX2T8WFHRTAQ' where id=2; -update noar tt set b1='AZ92EZ1WD5462TBK4OJ3S5A4EMY20V' where id=2; -update noar ti set b1='AZ92EZ1WD5462TBK4OJ3S5A4EMY20V' where id=2; -update noar tt set v0='OFKREEXUWFEGP' where id=2; -update noar ti set v0='OFKREEXUWFEGP' where id=2; -update noar tt set b2='XGQ4D6WQ1U1N' where id=2; -update noar ti set b2='XGQ4D6WQ1U1N' where id=2; -update noar tt set v0='HB' where id=3; -update noar ti set v0='HB' where id=3; -update noar tt set b0='5NFEO3XO' where id=3; -update noar ti set b0='5NFEO3XO' where id=3; -update noar tt set v0='B3QNL6UGV5HTUJ4K7F9LDAF7RI57IMS' where id=3; -update noar ti set v0='B3QNL6UGV5HTUJ4K7F9LDAF7RI57IMS' where id=3; -update noar tt set b1='LB' where id=3; -update noar ti set b1='LB' where id=3; -update noar tt set v0='JNO3Q2YQLGP8XKMBULG' where id=3; -update noar ti set v0='JNO3Q2YQLGP8XKMBULG' where id=3; -update noar tt set b2='AS8IA3VPRLP4RRUQ73KA9499JQTU5IZ' where id=3; -update noar ti set b2='AS8IA3VPRLP4RRUQ73KA9499JQTU5IZ' where id=3; -update noar tt set v0='X0YQZQOCBTAVPPYD3ITSP19B6FGJZ4' where id=4; -update noar ti set v0='X0YQZQOCBTAVPPYD3ITSP19B6FGJZ4' where id=4; -update noar tt set b0='UO3BO1GU1' where id=4; -update noar ti set b0='UO3BO1GU1' where id=4; -update noar tt set v0='QT6NUID7WWRIPAKTKXI' where id=4; -update noar ti set v0='QT6NUID7WWRIPAKTKXI' where id=4; -update noar tt set b1='7OY2KLZUCP237I4FQC526E' where id=4; -update noar ti set b1='7OY2KLZUCP237I4FQC526E' where id=4; -update noar tt set v0='C8GU5JOE7M5FWUC2F' where id=4; -update noar ti set v0='C8GU5JOE7M5FWUC2F' where id=4; -update noar tt set b2='U824PWKGO1JY' where id=4; -update noar ti set b2='U824PWKGO1JY' where id=4; -update noar tt set v0='XL4GSK0MSY7FV' where id=5; -update noar ti set v0='XL4GSK0MSY7FV' where id=5; -update noar tt set b0='L48Q7HUKLKEWXDLILEVTOVRMCNYGKA' where id=5; -update noar ti set b0='L48Q7HUKLKEWXDLILEVTOVRMCNYGKA' where id=5; -update noar tt set v0='09YWQBVCZD4UBJE0J8' where id=5; -update noar ti set v0='09YWQBVCZD4UBJE0J8' where id=5; -update noar tt set b1='8DIWKYPD7E' where id=5; -update noar ti set b1='8DIWKYPD7E' where id=5; -update noar tt set v0='C3WXE4WDIUZY0XTPPDY42TOSIPP7QTS' where id=5; -update noar ti set v0='C3WXE4WDIUZY0XTPPDY42TOSIPP7QTS' where id=5; -update noar tt set b2='TDF3LPX43QS' where id=5; -update noar ti set b2='TDF3LPX43QS' where id=5; -update noar tt set v0='83HIYUSKT5XZ9AJH3U0' where id=6; -update noar ti set v0='83HIYUSKT5XZ9AJH3U0' where id=6; -update noar tt set b0='EQ5BGX62ZD4I' where id=6; -update noar ti set b0='EQ5BGX62ZD4I' where id=6; -update noar tt set v0='0P65' where id=6; -update noar ti set v0='0P65' where id=6; -update noar tt set b1='OLQUJG4V840WOZ5KQDDT2Z' where id=6; -update noar ti set b1='OLQUJG4V840WOZ5KQDDT2Z' where id=6; -update noar tt set v0='JKY8DKPSU5ZCSE4RZY7UWTECQROJSV' where id=6; -update noar ti set v0='JKY8DKPSU5ZCSE4RZY7UWTECQROJSV' where id=6; -update noar tt set b2='HWR99ZT6212ZD03XNDJ0HE6PBJ2XA' where id=6; -update noar ti set b2='HWR99ZT6212ZD03XNDJ0HE6PBJ2XA' where id=6; -update noar tt set v0='W9P1NM' where id=7; -update noar ti set v0='W9P1NM' where id=7; -update noar tt set b0='1DR7JOE0K3I6LHHPV6YTAOK39YN6' where id=7; -update noar ti set b0='1DR7JOE0K3I6LHHPV6YTAOK39YN6' where id=7; -update noar tt set v0='I6X4RWB7KNGMX' where id=7; -update noar ti set v0='I6X4RWB7KNGMX' where id=7; -update noar tt set b1='2M1L5Q6IE6RKXXCARG3G' where id=7; -update noar ti set b1='2M1L5Q6IE6RKXXCARG3G' where id=7; -update noar tt set v0='HB89KGI' where id=7; -update noar ti set v0='HB89KGI' where id=7; -update noar tt set b2='E3F4X52INZYBPN' where id=7; -update noar ti set b2='E3F4X52INZYBPN' where id=7; -update noar tt set v0='94Q79ZPQ' where id=8; -update noar ti set v0='94Q79ZPQ' where id=8; -update noar tt set b0='MF2NV06' where id=8; -update noar ti set b0='MF2NV06' where id=8; -update noar tt set v0='WHC1TTOU9WB5G7V1L' where id=8; -update noar ti set v0='WHC1TTOU9WB5G7V1L' where id=8; -update noar tt set b1='UOFP6Q' where id=8; -update noar ti set b1='UOFP6Q' where id=8; -update noar tt set v0='TFAA7CBYCM' where id=8; -update noar ti set v0='TFAA7CBYCM' where id=8; -update noar tt set b2='UBXAVUGQZ3K1R6O42YOTDPAKB' where id=8; -update noar ti set b2='UBXAVUGQZ3K1R6O42YOTDPAKB' where id=8; -update noar tt set v0='NP0R2D4L39UZ5KHB3FGNKJJW8X0MKD' where id=9; -update noar ti set v0='NP0R2D4L39UZ5KHB3FGNKJJW8X0MKD' where id=9; -update noar tt set b0='W54TD8RFZJPL0CH' where id=9; -update noar ti set b0='W54TD8RFZJPL0CH' where id=9; -update noar tt set v0='HHP7FFFJLG6XAW' where id=9; -update noar ti set v0='HHP7FFFJLG6XAW' where id=9; -update noar tt set b1='QVM199Y8KLB' where id=9; -update noar ti set b1='QVM199Y8KLB' where id=9; -update noar tt set v0='BVLR61' where id=9; -update noar ti set v0='BVLR61' where id=9; -update noar tt set b2='4F4EMXB23ZMBZ' where id=9; -update noar ti set b2='4F4EMXB23ZMBZ' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 tinyblob not null, -b1 blob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='JGZ22PUX22RVYWUQ90NI0W' where id=1; -update noar ti set v0='JGZ22PUX22RVYWUQ90NI0W' where id=1; -update noar tt set b0='Y6Y491PDVJKINUAGF4HXB1' where id=1; -update noar ti set b0='Y6Y491PDVJKINUAGF4HXB1' where id=1; -update noar tt set v0='3MEOHP6BVGLTOWGWX' where id=1; -update noar ti set v0='3MEOHP6BVGLTOWGWX' where id=1; -update noar tt set b1='6IFIC' where id=1; -update noar ti set b1='6IFIC' where id=1; -update noar tt set v0='0QFO1J' where id=1; -update noar ti set v0='0QFO1J' where id=1; -update noar tt set b2='GP7V8FP358G5S6ZE123UZMMUT50V' where id=1; -update noar ti set b2='GP7V8FP358G5S6ZE123UZMMUT50V' where id=1; -update noar tt set v0='HR8' where id=2; -update noar ti set v0='HR8' where id=2; -update noar tt set b0='SGUB2' where id=2; -update noar ti set b0='SGUB2' where id=2; -update noar tt set v0='EQ' where id=2; -update noar ti set v0='EQ' where id=2; -update noar tt set b1='9AB7D4IVRSRRSZ99' where id=2; -update noar ti set b1='9AB7D4IVRSRRSZ99' where id=2; -update noar tt set v0='YIYKIYQ3NPQTDXT4SKP1EE4' where id=2; -update noar ti set v0='YIYKIYQ3NPQTDXT4SKP1EE4' where id=2; -update noar tt set b2='9BO4H8QVM64IMSIWATXXI3D5' where id=2; -update noar ti set b2='9BO4H8QVM64IMSIWATXXI3D5' where id=2; -update noar tt set v0='00CSJNTU00LPOWDN2' where id=3; -update noar ti set v0='00CSJNTU00LPOWDN2' where id=3; -update noar tt set b0='WDY4KP6TI6T0NJQ4' where id=3; -update noar ti set b0='WDY4KP6TI6T0NJQ4' where id=3; -update noar tt set v0='ROUAJGDG2ZAHLU8MBWV09ZKMBUQ8IXW9' where id=3; -update noar ti set v0='ROUAJGDG2ZAHLU8MBWV09ZKMBUQ8IXW9' where id=3; -update noar tt set b1='W3RM35S3XD7055ENC9QGD4RQUYMOSXY' where id=3; -update noar ti set b1='W3RM35S3XD7055ENC9QGD4RQUYMOSXY' where id=3; -update noar tt set v0='KCBO8YT5QQ3XX8UR303CN32TJ' where id=3; -update noar ti set v0='KCBO8YT5QQ3XX8UR303CN32TJ' where id=3; -update noar tt set b2='3QVT7VU4HNAA9M4K3RY' where id=3; -update noar ti set b2='3QVT7VU4HNAA9M4K3RY' where id=3; -update noar tt set v0='19HAA3' where id=4; -update noar ti set v0='19HAA3' where id=4; -update noar tt set b0='PHN1UGAGK91H1YG3SM0O5FOPDSSJN' where id=4; -update noar ti set b0='PHN1UGAGK91H1YG3SM0O5FOPDSSJN' where id=4; -update noar tt set v0='UH24UTV72RU4O52HF' where id=4; -update noar ti set v0='UH24UTV72RU4O52HF' where id=4; -update noar tt set b1='D' where id=4; -update noar ti set b1='D' where id=4; -update noar tt set v0='P7DVWXYY5AVEGL35CAY36R' where id=4; -update noar ti set v0='P7DVWXYY5AVEGL35CAY36R' where id=4; -update noar tt set b2='9MCHIPI' where id=4; -update noar ti set b2='9MCHIPI' where id=4; -update noar tt set v0='PLQ8YYR4VTVMUJX8WRAT75BL8BJ2WH03' where id=5; -update noar ti set v0='PLQ8YYR4VTVMUJX8WRAT75BL8BJ2WH03' where id=5; -update noar tt set b0='NJKSRC2YQ0' where id=5; -update noar ti set b0='NJKSRC2YQ0' where id=5; -update noar tt set v0='98C64' where id=5; -update noar ti set v0='98C64' where id=5; -update noar tt set b1='KXQCT7XYWHLOJSNEDRIUML' where id=5; -update noar ti set b1='KXQCT7XYWHLOJSNEDRIUML' where id=5; -update noar tt set v0='FI3' where id=5; -update noar ti set v0='FI3' where id=5; -update noar tt set b2='3B8B4' where id=5; -update noar ti set b2='3B8B4' where id=5; -update noar tt set v0='HB033COOVWJKICWALPEO' where id=6; -update noar ti set v0='HB033COOVWJKICWALPEO' where id=6; -update noar tt set b0='VVJTVSDU6V090WRVK6BXW07RYJH' where id=6; -update noar ti set b0='VVJTVSDU6V090WRVK6BXW07RYJH' where id=6; -update noar tt set v0='WFK7YDQ3N6STR' where id=6; -update noar ti set v0='WFK7YDQ3N6STR' where id=6; -update noar tt set b1='QBULJ4330JUTOYL1M' where id=6; -update noar ti set b1='QBULJ4330JUTOYL1M' where id=6; -update noar tt set v0='C3M9DJJ' where id=6; -update noar ti set v0='C3M9DJJ' where id=6; -update noar tt set b2='2P74326LDCSTLA7OK4' where id=6; -update noar ti set b2='2P74326LDCSTLA7OK4' where id=6; -update noar tt set v0='46BJOC70NG5DP4HM68ARTTP6L8HXHYII' where id=7; -update noar ti set v0='46BJOC70NG5DP4HM68ARTTP6L8HXHYII' where id=7; -update noar tt set b0='CUP3DH234BCVBMZ' where id=7; -update noar ti set b0='CUP3DH234BCVBMZ' where id=7; -update noar tt set v0='PER6R2JCKVZGB7J' where id=7; -update noar ti set v0='PER6R2JCKVZGB7J' where id=7; -update noar tt set b1='53NRH80AK7AXT1QXSDUOE38' where id=7; -update noar ti set b1='53NRH80AK7AXT1QXSDUOE38' where id=7; -update noar tt set v0='VT748Z0BGB1O802K' where id=7; -update noar ti set v0='VT748Z0BGB1O802K' where id=7; -update noar tt set b2='D' where id=7; -update noar ti set b2='D' where id=7; -update noar tt set v0='KSU4N' where id=8; -update noar ti set v0='KSU4N' where id=8; -update noar tt set b0='K1H6OGC9P1ZFQ' where id=8; -update noar ti set b0='K1H6OGC9P1ZFQ' where id=8; -update noar tt set v0='SOIS7YSD7Z' where id=8; -update noar ti set v0='SOIS7YSD7Z' where id=8; -update noar tt set b1='EHE6QU8O27TY20L051T2535SOKO5JMG' where id=8; -update noar ti set b1='EHE6QU8O27TY20L051T2535SOKO5JMG' where id=8; -update noar tt set v0='B8LZU3VOWWKN' where id=8; -update noar ti set v0='B8LZU3VOWWKN' where id=8; -update noar tt set b2='XUIIUYK5UH8G7' where id=8; -update noar ti set b2='XUIIUYK5UH8G7' where id=8; -update noar tt set v0='L9EPDQWUXG6R8U2Q' where id=9; -update noar ti set v0='L9EPDQWUXG6R8U2Q' where id=9; -update noar tt set b0='NUP1ZFAUNKWKSLU4OGWAO4N21' where id=9; -update noar ti set b0='NUP1ZFAUNKWKSLU4OGWAO4N21' where id=9; -update noar tt set v0='8XRYAZ' where id=9; -update noar ti set v0='8XRYAZ' where id=9; -update noar tt set b1='RN6TXKN4' where id=9; -update noar ti set b1='RN6TXKN4' where id=9; -update noar tt set v0='93H5657J0AOL4ZPI4SRA' where id=9; -update noar ti set v0='93H5657J0AOL4ZPI4SRA' where id=9; -update noar tt set b2='DUE35HFWL6GGA6RJ9R' where id=9; -update noar ti set b2='DUE35HFWL6GGA6RJ9R' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 tinyblob not null, -b1 blob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='PCDEW2UXS4MRD2769QUFSNV1NV2J' where id=1; -update noar ti set v0='PCDEW2UXS4MRD2769QUFSNV1NV2J' where id=1; -update noar tt set b0='8AEVLOYIXTK51YZ5XLYBP148GJK' where id=1; -update noar ti set b0='8AEVLOYIXTK51YZ5XLYBP148GJK' where id=1; -update noar tt set v0='Y56OUJ7X6KC5B5PNKV' where id=1; -update noar ti set v0='Y56OUJ7X6KC5B5PNKV' where id=1; -update noar tt set b1='46275Z336R900LG0' where id=1; -update noar ti set b1='46275Z336R900LG0' where id=1; -update noar tt set v0='N0QEM7KWBPBOSZJQOFMFII' where id=1; -update noar ti set v0='N0QEM7KWBPBOSZJQOFMFII' where id=1; -update noar tt set b2='SAN4NOL' where id=1; -update noar ti set b2='SAN4NOL' where id=1; -update noar tt set v0='75A1BLXT2CI1MY352DRWGH' where id=2; -update noar ti set v0='75A1BLXT2CI1MY352DRWGH' where id=2; -update noar tt set b0='BJSL60TCELZ06IWA2NVTQ1LW92C' where id=2; -update noar ti set b0='BJSL60TCELZ06IWA2NVTQ1LW92C' where id=2; -update noar tt set v0='INK' where id=2; -update noar ti set v0='INK' where id=2; -update noar tt set b1='UX3W0WU9F9R27SVY3' where id=2; -update noar ti set b1='UX3W0WU9F9R27SVY3' where id=2; -update noar tt set v0='202MO30MWSJ3RBGJ' where id=2; -update noar ti set v0='202MO30MWSJ3RBGJ' where id=2; -update noar tt set b2='U971UM3IOS7LSP0ABARE5SU1' where id=2; -update noar ti set b2='U971UM3IOS7LSP0ABARE5SU1' where id=2; -update noar tt set v0='J7N199SON5ZMNWW' where id=3; -update noar ti set v0='J7N199SON5ZMNWW' where id=3; -update noar tt set b0='TSCTQCKWTIA16HDFF3HQZLT7ZAO9ZLUA' where id=3; -update noar ti set b0='TSCTQCKWTIA16HDFF3HQZLT7ZAO9ZLUA' where id=3; -update noar tt set v0='7SYK77QJZL8CI5TFBB7Q92' where id=3; -update noar ti set v0='7SYK77QJZL8CI5TFBB7Q92' where id=3; -update noar tt set b1='STG' where id=3; -update noar ti set b1='STG' where id=3; -update noar tt set v0='3JQ4HGVAFN77' where id=3; -update noar ti set v0='3JQ4HGVAFN77' where id=3; -update noar tt set b2='ALTL3UIEV3DE3PJNS7X3ZD13M51D6X' where id=3; -update noar ti set b2='ALTL3UIEV3DE3PJNS7X3ZD13M51D6X' where id=3; -update noar tt set v0='NMHW6POKCLRE0SG5D' where id=4; -update noar ti set v0='NMHW6POKCLRE0SG5D' where id=4; -update noar tt set b0='9T1LN0NHL0WFPC4R0LF92RP49L3' where id=4; -update noar ti set b0='9T1LN0NHL0WFPC4R0LF92RP49L3' where id=4; -update noar tt set v0='IFV9V7M47G6LS1PIDA7L1LUMCNMV' where id=4; -update noar ti set v0='IFV9V7M47G6LS1PIDA7L1LUMCNMV' where id=4; -update noar tt set b1='E' where id=4; -update noar ti set b1='E' where id=4; -update noar tt set v0='LKSJSI3W6G2T6G1A4OFY4' where id=4; -update noar ti set v0='LKSJSI3W6G2T6G1A4OFY4' where id=4; -update noar tt set b2='O90GIRSQJFHMRRAZ3N22SC9XZV6WLI4N' where id=4; -update noar ti set b2='O90GIRSQJFHMRRAZ3N22SC9XZV6WLI4N' where id=4; -update noar tt set v0='S9GK6K05JI7NVTLWZU9F0HSM1H0Z' where id=5; -update noar ti set v0='S9GK6K05JI7NVTLWZU9F0HSM1H0Z' where id=5; -update noar tt set b0='Y943RBCB56KZWNP0OR58JQHFXI1' where id=5; -update noar ti set b0='Y943RBCB56KZWNP0OR58JQHFXI1' where id=5; -update noar tt set v0='XR0LUZ3NRULEL13F' where id=5; -update noar ti set v0='XR0LUZ3NRULEL13F' where id=5; -update noar tt set b1='UEU3FSKSTFUG34QK8S1' where id=5; -update noar ti set b1='UEU3FSKSTFUG34QK8S1' where id=5; -update noar tt set v0='NDS' where id=5; -update noar ti set v0='NDS' where id=5; -update noar tt set b2='1KH365LZF35GJPDCRK0VN48KILJL' where id=5; -update noar ti set b2='1KH365LZF35GJPDCRK0VN48KILJL' where id=5; -update noar tt set v0='TNPCV1Z4ZMYJCAOQRBP' where id=6; -update noar ti set v0='TNPCV1Z4ZMYJCAOQRBP' where id=6; -update noar tt set b0='P1E0YW' where id=6; -update noar ti set b0='P1E0YW' where id=6; -update noar tt set v0='Y8G0MAGA3EVQKQXP1YKWKMIGR' where id=6; -update noar ti set v0='Y8G0MAGA3EVQKQXP1YKWKMIGR' where id=6; -update noar tt set b1='BXQ8EB8GZ9KU6' where id=6; -update noar ti set b1='BXQ8EB8GZ9KU6' where id=6; -update noar tt set v0='P9EDQX45D649GHOK9QXV5KNGB' where id=6; -update noar ti set v0='P9EDQX45D649GHOK9QXV5KNGB' where id=6; -update noar tt set b2='8NVA' where id=6; -update noar ti set b2='8NVA' where id=6; -update noar tt set v0='9U' where id=7; -update noar ti set v0='9U' where id=7; -update noar tt set b0='CZE082LCU1ICVFMUJNAZ4L0MA7ZPJ' where id=7; -update noar ti set b0='CZE082LCU1ICVFMUJNAZ4L0MA7ZPJ' where id=7; -update noar tt set v0='7KA025ITKEY7XSO5DEJXF5' where id=7; -update noar ti set v0='7KA025ITKEY7XSO5DEJXF5' where id=7; -update noar tt set b1='QDPJWOZA785IWSOD74VGM4' where id=7; -update noar ti set b1='QDPJWOZA785IWSOD74VGM4' where id=7; -update noar tt set v0='5028WYOHG3QSDHY4IKO41BJ6UCRU' where id=7; -update noar ti set v0='5028WYOHG3QSDHY4IKO41BJ6UCRU' where id=7; -update noar tt set b2='D80FF0YB163LD844VQ573TL' where id=7; -update noar ti set b2='D80FF0YB163LD844VQ573TL' where id=7; -update noar tt set v0='A0BCIUZX8RYKAMDOOA1VTQ8I5Y' where id=8; -update noar ti set v0='A0BCIUZX8RYKAMDOOA1VTQ8I5Y' where id=8; -update noar tt set b0='6QJEW9' where id=8; -update noar ti set b0='6QJEW9' where id=8; -update noar tt set v0='W5IXOQAA4OBYPGB8' where id=8; -update noar ti set v0='W5IXOQAA4OBYPGB8' where id=8; -update noar tt set b1='4IN2M2UD' where id=8; -update noar ti set b1='4IN2M2UD' where id=8; -update noar tt set v0='05TE675X1A1DM' where id=8; -update noar ti set v0='05TE675X1A1DM' where id=8; -update noar tt set b2='3JYYJZ' where id=8; -update noar ti set b2='3JYYJZ' where id=8; -update noar tt set v0='EPFKWCVOPGXJCWGW' where id=9; -update noar ti set v0='EPFKWCVOPGXJCWGW' where id=9; -update noar tt set b0='D6N26Y0EB6XXR4EF2G' where id=9; -update noar ti set b0='D6N26Y0EB6XXR4EF2G' where id=9; -update noar tt set v0='0BW' where id=9; -update noar ti set v0='0BW' where id=9; -update noar tt set b1='U3' where id=9; -update noar ti set b1='U3' where id=9; -update noar tt set v0='OPITJ9GXYBBZLWD8VQOAIWVFW1P63' where id=9; -update noar ti set v0='OPITJ9GXYBBZLWD8VQOAIWVFW1P63' where id=9; -update noar tt set b2='7FDVO1BS5JVV08LUEU77BV' where id=9; -update noar ti set b2='7FDVO1BS5JVV08LUEU77BV' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 tinyblob null, -b1 blob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='6B5LYFZEER6TF1OIDUAP8HD' where id=1; -update noar ti set v0='6B5LYFZEER6TF1OIDUAP8HD' where id=1; -update noar tt set b0='XFPXPKBN3792X8PNCA0TZ1TTHA9295R7' where id=1; -update noar ti set b0='XFPXPKBN3792X8PNCA0TZ1TTHA9295R7' where id=1; -update noar tt set v0='T82NXGLCTBNWD59' where id=1; -update noar ti set v0='T82NXGLCTBNWD59' where id=1; -update noar tt set b1='34F670' where id=1; -update noar ti set b1='34F670' where id=1; -update noar tt set v0='UR7FPKM' where id=1; -update noar ti set v0='UR7FPKM' where id=1; -update noar tt set b2='IIF0G8F0U1MSQ' where id=1; -update noar ti set b2='IIF0G8F0U1MSQ' where id=1; -update noar tt set v0='9KE2DXE' where id=2; -update noar ti set v0='9KE2DXE' where id=2; -update noar tt set b0='X58CN7EJI5TX4RY5VGFEOV2OPJ' where id=2; -update noar ti set b0='X58CN7EJI5TX4RY5VGFEOV2OPJ' where id=2; -update noar tt set v0='FM0PE' where id=2; -update noar ti set v0='FM0PE' where id=2; -update noar tt set b1='2HI8LRAFUFFGME20KEVE7PVUCEZ' where id=2; -update noar ti set b1='2HI8LRAFUFFGME20KEVE7PVUCEZ' where id=2; -update noar tt set v0='M2QL' where id=2; -update noar ti set v0='M2QL' where id=2; -update noar tt set b2='4QRFDXKH0GJBVB' where id=2; -update noar ti set b2='4QRFDXKH0GJBVB' where id=2; -update noar tt set v0='080BP' where id=3; -update noar ti set v0='080BP' where id=3; -update noar tt set b0='V2VN' where id=3; -update noar ti set b0='V2VN' where id=3; -update noar tt set v0='JPUGCY0NCBHGLVQO' where id=3; -update noar ti set v0='JPUGCY0NCBHGLVQO' where id=3; -update noar tt set b1='G5HAS6QK0BUWGF8' where id=3; -update noar ti set b1='G5HAS6QK0BUWGF8' where id=3; -update noar tt set v0='RYJASUZR' where id=3; -update noar ti set v0='RYJASUZR' where id=3; -update noar tt set b2='B2PUJJILJDPQGT4' where id=3; -update noar ti set b2='B2PUJJILJDPQGT4' where id=3; -update noar tt set v0='FQUAAEZQSUEP69LAOAQN' where id=4; -update noar ti set v0='FQUAAEZQSUEP69LAOAQN' where id=4; -update noar tt set b0='JXDCUFFWA8Q86SGAA8RBI' where id=4; -update noar ti set b0='JXDCUFFWA8Q86SGAA8RBI' where id=4; -update noar tt set v0='1VINNTSHBZ9H4' where id=4; -update noar ti set v0='1VINNTSHBZ9H4' where id=4; -update noar tt set b1='G7DZ3NE8JFO7P' where id=4; -update noar ti set b1='G7DZ3NE8JFO7P' where id=4; -update noar tt set v0='99F91LAHG944QVUL' where id=4; -update noar ti set v0='99F91LAHG944QVUL' where id=4; -update noar tt set b2='PZV' where id=4; -update noar ti set b2='PZV' where id=4; -update noar tt set v0='MWL6NQ8WFTJ6T' where id=5; -update noar ti set v0='MWL6NQ8WFTJ6T' where id=5; -update noar tt set b0='7FB36L2GM5JSHQD6Q3C3WT' where id=5; -update noar ti set b0='7FB36L2GM5JSHQD6Q3C3WT' where id=5; -update noar tt set v0='04298HR9ZRFL3PSD2GDV53B1MEP058' where id=5; -update noar ti set v0='04298HR9ZRFL3PSD2GDV53B1MEP058' where id=5; -update noar tt set b1='EUBD1KUO1S2J' where id=5; -update noar ti set b1='EUBD1KUO1S2J' where id=5; -update noar tt set v0='0VZ3ECY2IU1EMZA85TFWGLX6VKO5EP' where id=5; -update noar ti set v0='0VZ3ECY2IU1EMZA85TFWGLX6VKO5EP' where id=5; -update noar tt set b2='TRSJN9Z4HF16F' where id=5; -update noar ti set b2='TRSJN9Z4HF16F' where id=5; -update noar tt set v0='Y4U6AZ4DR8F' where id=6; -update noar ti set v0='Y4U6AZ4DR8F' where id=6; -update noar tt set b0='7LEFKGWT94FVEBOKYVR0IC' where id=6; -update noar ti set b0='7LEFKGWT94FVEBOKYVR0IC' where id=6; -update noar tt set v0='MV7F' where id=6; -update noar ti set v0='MV7F' where id=6; -update noar tt set b1='I7QR' where id=6; -update noar ti set b1='I7QR' where id=6; -update noar tt set v0='SCP3UDJLZJH0M2ZYEL41PDJU' where id=6; -update noar ti set v0='SCP3UDJLZJH0M2ZYEL41PDJU' where id=6; -update noar tt set b2='HYJTBRJ84KMJ0' where id=6; -update noar ti set b2='HYJTBRJ84KMJ0' where id=6; -update noar tt set v0='68XV89D4TG6JY' where id=7; -update noar ti set v0='68XV89D4TG6JY' where id=7; -update noar tt set b0='J4DAA' where id=7; -update noar ti set b0='J4DAA' where id=7; -update noar tt set v0='HOOS0S27Z1IQ' where id=7; -update noar ti set v0='HOOS0S27Z1IQ' where id=7; -update noar tt set b1='M5WVHVJQ' where id=7; -update noar ti set b1='M5WVHVJQ' where id=7; -update noar tt set v0='FZGNYL9XKC1IFGP5RMAWCJ28PCSTUSP' where id=7; -update noar ti set v0='FZGNYL9XKC1IFGP5RMAWCJ28PCSTUSP' where id=7; -update noar tt set b2='4H9JSEGPGIW0AQT95URDXWDCG3B129' where id=7; -update noar ti set b2='4H9JSEGPGIW0AQT95URDXWDCG3B129' where id=7; -update noar tt set v0='Q41UB2MFEMYICSMH8B5LSW6C288M4MV' where id=8; -update noar ti set v0='Q41UB2MFEMYICSMH8B5LSW6C288M4MV' where id=8; -update noar tt set b0='0W8CHC2R5O9RLJOJARXFSFX' where id=8; -update noar ti set b0='0W8CHC2R5O9RLJOJARXFSFX' where id=8; -update noar tt set v0='HAFBFNG' where id=8; -update noar ti set v0='HAFBFNG' where id=8; -update noar tt set b1='3UKFNBNFD96F1LG577F9SFC9F43H8P3A' where id=8; -update noar ti set b1='3UKFNBNFD96F1LG577F9SFC9F43H8P3A' where id=8; -update noar tt set v0='0SJK2YS5XP19S83RZP3SJ4' where id=8; -update noar ti set v0='0SJK2YS5XP19S83RZP3SJ4' where id=8; -update noar tt set b2='LKSR9R' where id=8; -update noar ti set b2='LKSR9R' where id=8; -update noar tt set v0='3' where id=9; -update noar ti set v0='3' where id=9; -update noar tt set b0='BUHAUWE' where id=9; -update noar ti set b0='BUHAUWE' where id=9; -update noar tt set v0='6KNM5ZR7TGKPYWQ7A5E08U76A' where id=9; -update noar ti set v0='6KNM5ZR7TGKPYWQ7A5E08U76A' where id=9; -update noar tt set b1='S' where id=9; -update noar ti set b1='S' where id=9; -update noar tt set v0='I' where id=9; -update noar ti set v0='I' where id=9; -update noar tt set b2='PUZIW8ML' where id=9; -update noar ti set b2='PUZIW8ML' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 tinyblob null, -b1 blob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='C3DXT5S' where id=1; -update noar ti set v0='C3DXT5S' where id=1; -update noar tt set b0='8EO1WTUFC0LWN' where id=1; -update noar ti set b0='8EO1WTUFC0LWN' where id=1; -update noar tt set v0='DA2XQOYGHAL' where id=1; -update noar ti set v0='DA2XQOYGHAL' where id=1; -update noar tt set b1='LBVLH18GCGVCQMTRNA9' where id=1; -update noar ti set b1='LBVLH18GCGVCQMTRNA9' where id=1; -update noar tt set v0='WDOI0FG44RUVMDH04PQXXWFSPIHGY6BY' where id=1; -update noar ti set v0='WDOI0FG44RUVMDH04PQXXWFSPIHGY6BY' where id=1; -update noar tt set b2='R229LSDCR' where id=1; -update noar ti set b2='R229LSDCR' where id=1; -update noar tt set v0='5IDZ5YW0J7D6WMPET66JYLPH8Q5QCS' where id=2; -update noar ti set v0='5IDZ5YW0J7D6WMPET66JYLPH8Q5QCS' where id=2; -update noar tt set b0='HX' where id=2; -update noar ti set b0='HX' where id=2; -update noar tt set v0='VQMNJXZ8FEJODOCFVS4T5MOIRAXG' where id=2; -update noar ti set v0='VQMNJXZ8FEJODOCFVS4T5MOIRAXG' where id=2; -update noar tt set b1='RGI92TQN81' where id=2; -update noar ti set b1='RGI92TQN81' where id=2; -update noar tt set v0='2V2AJEC57QHJXHGTA' where id=2; -update noar ti set v0='2V2AJEC57QHJXHGTA' where id=2; -update noar tt set b2='C6PX0G' where id=2; -update noar ti set b2='C6PX0G' where id=2; -update noar tt set v0='F6UTTEO8JTKGDF36Y3X1E9PIIBX' where id=3; -update noar ti set v0='F6UTTEO8JTKGDF36Y3X1E9PIIBX' where id=3; -update noar tt set b0='7E1IVSHIIZ8ZZU52' where id=3; -update noar ti set b0='7E1IVSHIIZ8ZZU52' where id=3; -update noar tt set v0='5QT1NDMGX29M0XHTYOCYH' where id=3; -update noar ti set v0='5QT1NDMGX29M0XHTYOCYH' where id=3; -update noar tt set b1='EKC' where id=3; -update noar ti set b1='EKC' where id=3; -update noar tt set v0='5L4YFFLX3X4NMZNR1MPQG35' where id=3; -update noar ti set v0='5L4YFFLX3X4NMZNR1MPQG35' where id=3; -update noar tt set b2='XQ64OCC6NGJJN0E7C4TGVRWG2KXCQ6' where id=3; -update noar ti set b2='XQ64OCC6NGJJN0E7C4TGVRWG2KXCQ6' where id=3; -update noar tt set v0='OLUKY7GTN04KJE3TG' where id=4; -update noar ti set v0='OLUKY7GTN04KJE3TG' where id=4; -update noar tt set b0='66QXTP6BBCW95F' where id=4; -update noar ti set b0='66QXTP6BBCW95F' where id=4; -update noar tt set v0='K' where id=4; -update noar ti set v0='K' where id=4; -update noar tt set b1='GON6T3UBR1SNJLPOD32LK' where id=4; -update noar ti set b1='GON6T3UBR1SNJLPOD32LK' where id=4; -update noar tt set v0='VNRAU1JZB02LNK4E32PBV00Z9EEHBUKX' where id=4; -update noar ti set v0='VNRAU1JZB02LNK4E32PBV00Z9EEHBUKX' where id=4; -update noar tt set b2='F0PP9G4BKJGUN' where id=4; -update noar ti set b2='F0PP9G4BKJGUN' where id=4; -update noar tt set v0='HOEC' where id=5; -update noar ti set v0='HOEC' where id=5; -update noar tt set b0='E2CI2TNI8DHORJ' where id=5; -update noar ti set b0='E2CI2TNI8DHORJ' where id=5; -update noar tt set v0='CR0K0KDJ86VV201QK8XE06' where id=5; -update noar ti set v0='CR0K0KDJ86VV201QK8XE06' where id=5; -update noar tt set b1='SIU7Q73K80' where id=5; -update noar ti set b1='SIU7Q73K80' where id=5; -update noar tt set v0='F9RTRGD0KM4FJX9LR5TWH50IIFEUDX1M' where id=5; -update noar ti set v0='F9RTRGD0KM4FJX9LR5TWH50IIFEUDX1M' where id=5; -update noar tt set b2='ADPS5DX10VWCY46M1JMLHIDW336CA' where id=5; -update noar ti set b2='ADPS5DX10VWCY46M1JMLHIDW336CA' where id=5; -update noar tt set v0='QQS9FY9IEXNBYT6QDU9Q89' where id=6; -update noar ti set v0='QQS9FY9IEXNBYT6QDU9Q89' where id=6; -update noar tt set b0='CAPVR994XAZ17D97KIBW89A2D' where id=6; -update noar ti set b0='CAPVR994XAZ17D97KIBW89A2D' where id=6; -update noar tt set v0='SO6' where id=6; -update noar ti set v0='SO6' where id=6; -update noar tt set b1='OBJC0N9RL82WOX3226WVK0SEEELZRI' where id=6; -update noar ti set b1='OBJC0N9RL82WOX3226WVK0SEEELZRI' where id=6; -update noar tt set v0='LHUBM79WKW1GIS7W7NZJ0SLK' where id=6; -update noar ti set v0='LHUBM79WKW1GIS7W7NZJ0SLK' where id=6; -update noar tt set b2='7IIIVNPZOY7Y6PQOEGKT' where id=6; -update noar ti set b2='7IIIVNPZOY7Y6PQOEGKT' where id=6; -update noar tt set v0='GQGXDN6FKY0E5W8UX92R8C4DG3MMOSTS' where id=7; -update noar ti set v0='GQGXDN6FKY0E5W8UX92R8C4DG3MMOSTS' where id=7; -update noar tt set b0='4ASI9COMIRVZCJ9HUDU2RE3AOODA8S0' where id=7; -update noar ti set b0='4ASI9COMIRVZCJ9HUDU2RE3AOODA8S0' where id=7; -update noar tt set v0='KSWFSU' where id=7; -update noar ti set v0='KSWFSU' where id=7; -update noar tt set b1='B6TAA473WR' where id=7; -update noar ti set b1='B6TAA473WR' where id=7; -update noar tt set v0='XI2CF6BS8Q94IG664R7BFHI4EZ3LB' where id=7; -update noar ti set v0='XI2CF6BS8Q94IG664R7BFHI4EZ3LB' where id=7; -update noar tt set b2='C3JB6EZ31V0LN2Y9GIN' where id=7; -update noar ti set b2='C3JB6EZ31V0LN2Y9GIN' where id=7; -update noar tt set v0='6I2Z81YA2UPRQOVI' where id=8; -update noar ti set v0='6I2Z81YA2UPRQOVI' where id=8; -update noar tt set b0='162Z4MPQADM' where id=8; -update noar ti set b0='162Z4MPQADM' where id=8; -update noar tt set v0='23GRKMS' where id=8; -update noar ti set v0='23GRKMS' where id=8; -update noar tt set b1='0YAYYLOQ5FR2K6LNRDZU2' where id=8; -update noar ti set b1='0YAYYLOQ5FR2K6LNRDZU2' where id=8; -update noar tt set v0='JIJDACY9Y0ULYG6DIETHY474' where id=8; -update noar ti set v0='JIJDACY9Y0ULYG6DIETHY474' where id=8; -update noar tt set b2='59M2PBKEX2HYURXMS0J7AZ1KXMF8' where id=8; -update noar ti set b2='59M2PBKEX2HYURXMS0J7AZ1KXMF8' where id=8; -update noar tt set v0='3KX7I4EMHI1TCEAZYR504DP7N' where id=9; -update noar ti set v0='3KX7I4EMHI1TCEAZYR504DP7N' where id=9; -update noar tt set b0='4GE5EQ7VU2L' where id=9; -update noar ti set b0='4GE5EQ7VU2L' where id=9; -update noar tt set v0='NPH7MHLZXCI5ZLK4X' where id=9; -update noar ti set v0='NPH7MHLZXCI5ZLK4X' where id=9; -update noar tt set b1='QS67A8QQYKBTSONRU8P' where id=9; -update noar ti set b1='QS67A8QQYKBTSONRU8P' where id=9; -update noar tt set v0='IYH360I' where id=9; -update noar ti set v0='IYH360I' where id=9; -update noar tt set b2='ZH' where id=9; -update noar ti set b2='ZH' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 tinyblob not null, -b1 blob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='EY2KOT82FZ4FU' where id=1; -update noar ti set v0='EY2KOT82FZ4FU' where id=1; -update noar tt set b0='M9Y9H' where id=1; -update noar ti set b0='M9Y9H' where id=1; -update noar tt set v0='V4CPWY9' where id=1; -update noar ti set v0='V4CPWY9' where id=1; -update noar tt set b1='RLOVRWMKZNLNL9AY9F' where id=1; -update noar ti set b1='RLOVRWMKZNLNL9AY9F' where id=1; -update noar tt set v0='HVKEPSI' where id=1; -update noar ti set v0='HVKEPSI' where id=1; -update noar tt set b2='FSUWSIP1N8LH1RGTZP' where id=1; -update noar ti set b2='FSUWSIP1N8LH1RGTZP' where id=1; -update noar tt set v0='GV0H6I0L4DR0G' where id=2; -update noar ti set v0='GV0H6I0L4DR0G' where id=2; -update noar tt set b0='X0ITOY' where id=2; -update noar ti set b0='X0ITOY' where id=2; -update noar tt set v0='W' where id=2; -update noar ti set v0='W' where id=2; -update noar tt set b1='ZE2WQ9' where id=2; -update noar ti set b1='ZE2WQ9' where id=2; -update noar tt set v0='AXT1DCWHH6ADJED' where id=2; -update noar ti set v0='AXT1DCWHH6ADJED' where id=2; -update noar tt set b2='BQLKNKZU5P' where id=2; -update noar ti set b2='BQLKNKZU5P' where id=2; -update noar tt set v0='EV655YZBBY9' where id=3; -update noar ti set v0='EV655YZBBY9' where id=3; -update noar tt set b0='YVL' where id=3; -update noar ti set b0='YVL' where id=3; -update noar tt set v0='5BM4SI9T74QYJ5DO' where id=3; -update noar ti set v0='5BM4SI9T74QYJ5DO' where id=3; -update noar tt set b1='K2I08J6D' where id=3; -update noar ti set b1='K2I08J6D' where id=3; -update noar tt set v0='7YHPSP' where id=3; -update noar ti set v0='7YHPSP' where id=3; -update noar tt set b2='GSZA' where id=3; -update noar ti set b2='GSZA' where id=3; -update noar tt set v0='KW837W77GBTV3YIVT0M6DBXLLLUPO' where id=4; -update noar ti set v0='KW837W77GBTV3YIVT0M6DBXLLLUPO' where id=4; -update noar tt set b0='BW0S60WQ2SKCT75DZBJ2V' where id=4; -update noar ti set b0='BW0S60WQ2SKCT75DZBJ2V' where id=4; -update noar tt set v0='XLVI9UGH2QT8DIHLZOFVS0RLIS0HK0XB' where id=4; -update noar ti set v0='XLVI9UGH2QT8DIHLZOFVS0RLIS0HK0XB' where id=4; -update noar tt set b1='KELX3DWU3221X6DRMFHCR3FKUZ3Y6MM5' where id=4; -update noar ti set b1='KELX3DWU3221X6DRMFHCR3FKUZ3Y6MM5' where id=4; -update noar tt set v0='NMYYLI' where id=4; -update noar ti set v0='NMYYLI' where id=4; -update noar tt set b2='R8GB1X56EK2' where id=4; -update noar ti set b2='R8GB1X56EK2' where id=4; -update noar tt set v0='T7HS2RGP' where id=5; -update noar ti set v0='T7HS2RGP' where id=5; -update noar tt set b0='MAWBUNW' where id=5; -update noar ti set b0='MAWBUNW' where id=5; -update noar tt set v0='RHUV9VBFZWIVS0PQM3AQ' where id=5; -update noar ti set v0='RHUV9VBFZWIVS0PQM3AQ' where id=5; -update noar tt set b1='W1GTO1E' where id=5; -update noar ti set b1='W1GTO1E' where id=5; -update noar tt set v0='MI' where id=5; -update noar ti set v0='MI' where id=5; -update noar tt set b2='2FMUZ' where id=5; -update noar ti set b2='2FMUZ' where id=5; -update noar tt set v0='5UHFDUT' where id=6; -update noar ti set v0='5UHFDUT' where id=6; -update noar tt set b0='PO82BUFTM8UW4T9CW5CE' where id=6; -update noar ti set b0='PO82BUFTM8UW4T9CW5CE' where id=6; -update noar tt set v0='5O6JJ0OLDL87SD' where id=6; -update noar ti set v0='5O6JJ0OLDL87SD' where id=6; -update noar tt set b1='TBKKH643Y5MLRMDH5NZIVJZ9HP1N1' where id=6; -update noar ti set b1='TBKKH643Y5MLRMDH5NZIVJZ9HP1N1' where id=6; -update noar tt set v0='AE3' where id=6; -update noar ti set v0='AE3' where id=6; -update noar tt set b2='XZQ' where id=6; -update noar ti set b2='XZQ' where id=6; -update noar tt set v0='IK71I8BNGAO' where id=7; -update noar ti set v0='IK71I8BNGAO' where id=7; -update noar tt set b0='LKRWNU7LSVDDS1AV6SSL0VZJRK271CCL' where id=7; -update noar ti set b0='LKRWNU7LSVDDS1AV6SSL0VZJRK271CCL' where id=7; -update noar tt set v0='XBHNEAGTQH' where id=7; -update noar ti set v0='XBHNEAGTQH' where id=7; -update noar tt set b1='TZ7HA' where id=7; -update noar ti set b1='TZ7HA' where id=7; -update noar tt set v0='UZGTIP3CTTI8296N3W64WI1FBED' where id=7; -update noar ti set v0='UZGTIP3CTTI8296N3W64WI1FBED' where id=7; -update noar tt set b2='1HO' where id=7; -update noar ti set b2='1HO' where id=7; -update noar tt set v0='QZGTOMM6CA' where id=8; -update noar ti set v0='QZGTOMM6CA' where id=8; -update noar tt set b0='QNS2ENVLTD11WO' where id=8; -update noar ti set b0='QNS2ENVLTD11WO' where id=8; -update noar tt set v0='2F77494RHWG06SAGISA' where id=8; -update noar ti set v0='2F77494RHWG06SAGISA' where id=8; -update noar tt set b1='U' where id=8; -update noar ti set b1='U' where id=8; -update noar tt set v0='JHV3S2WSK1Q1FTMOZQMT' where id=8; -update noar ti set v0='JHV3S2WSK1Q1FTMOZQMT' where id=8; -update noar tt set b2='8G3144RP88EOQI3IJX2PKFEJJCMBZFFA' where id=8; -update noar ti set b2='8G3144RP88EOQI3IJX2PKFEJJCMBZFFA' where id=8; -update noar tt set v0='4H5EGT9UOKKP2F113ZE3RWOAQ5G' where id=9; -update noar ti set v0='4H5EGT9UOKKP2F113ZE3RWOAQ5G' where id=9; -update noar tt set b0='MS' where id=9; -update noar ti set b0='MS' where id=9; -update noar tt set v0='27YMHNTMO' where id=9; -update noar ti set v0='27YMHNTMO' where id=9; -update noar tt set b1='0WMAH17RW0XSEK67M5DWE8FM312S' where id=9; -update noar ti set b1='0WMAH17RW0XSEK67M5DWE8FM312S' where id=9; -update noar tt set v0='72H94E7RWBSWH' where id=9; -update noar ti set v0='72H94E7RWBSWH' where id=9; -update noar tt set b2='KKN1RK271JNFCFA8CFLAMS85' where id=9; -update noar ti set b2='KKN1RK271JNFCFA8CFLAMS85' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 tinyblob not null, -b1 blob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='F47PP3MSOMOXLF0VPVO5HR2XMQ' where id=1; -update noar ti set v0='F47PP3MSOMOXLF0VPVO5HR2XMQ' where id=1; -update noar tt set b0='JHO0QT5EDZE9HC0DA1EUQ' where id=1; -update noar ti set b0='JHO0QT5EDZE9HC0DA1EUQ' where id=1; -update noar tt set v0='PPKUUXRW3JI' where id=1; -update noar ti set v0='PPKUUXRW3JI' where id=1; -update noar tt set b1='5ENA40PFDZQ7BEAS' where id=1; -update noar ti set b1='5ENA40PFDZQ7BEAS' where id=1; -update noar tt set v0='8' where id=1; -update noar ti set v0='8' where id=1; -update noar tt set b2='QYXB85F79E8K1O9VV58F53YVMY811NZR' where id=1; -update noar ti set b2='QYXB85F79E8K1O9VV58F53YVMY811NZR' where id=1; -update noar tt set v0='ZJWX' where id=2; -update noar ti set v0='ZJWX' where id=2; -update noar tt set b0='AHDNUCOCHS0U8GLH' where id=2; -update noar ti set b0='AHDNUCOCHS0U8GLH' where id=2; -update noar tt set v0='HNGZ2XPYQ' where id=2; -update noar ti set v0='HNGZ2XPYQ' where id=2; -update noar tt set b1='YB0WZHGHEBC6JQIZ' where id=2; -update noar ti set b1='YB0WZHGHEBC6JQIZ' where id=2; -update noar tt set v0='ZB5UW3UVZ7CPYXZ4TEIXW6BP' where id=2; -update noar ti set v0='ZB5UW3UVZ7CPYXZ4TEIXW6BP' where id=2; -update noar tt set b2='BQYI0XVEATBV1S8V45LZFAZUFV5FF' where id=2; -update noar ti set b2='BQYI0XVEATBV1S8V45LZFAZUFV5FF' where id=2; -update noar tt set v0='QCSNGR51XP22R0PJH5VKLZ61IILWLV' where id=3; -update noar ti set v0='QCSNGR51XP22R0PJH5VKLZ61IILWLV' where id=3; -update noar tt set b0='8BHWG3YMZ9S5Y' where id=3; -update noar ti set b0='8BHWG3YMZ9S5Y' where id=3; -update noar tt set v0='4LJQKTEWJIDBICUEJ4JVMAR' where id=3; -update noar ti set v0='4LJQKTEWJIDBICUEJ4JVMAR' where id=3; -update noar tt set b1='P7X4LP2CPD4M3O' where id=3; -update noar ti set b1='P7X4LP2CPD4M3O' where id=3; -update noar tt set v0='NAJH6NAG93V' where id=3; -update noar ti set v0='NAJH6NAG93V' where id=3; -update noar tt set b2='NM5R9HVG' where id=3; -update noar ti set b2='NM5R9HVG' where id=3; -update noar tt set v0='F0W7KZJLT7W37YWETQRIC7YIOFLFJ' where id=4; -update noar ti set v0='F0W7KZJLT7W37YWETQRIC7YIOFLFJ' where id=4; -update noar tt set b0='V1S' where id=4; -update noar ti set b0='V1S' where id=4; -update noar tt set v0='QG939T0RCTZZOK45OI' where id=4; -update noar ti set v0='QG939T0RCTZZOK45OI' where id=4; -update noar tt set b1='SNNLYMMNJH' where id=4; -update noar ti set b1='SNNLYMMNJH' where id=4; -update noar tt set v0='HJM1CT8RBSCD2VT9A9S1GQY' where id=4; -update noar ti set v0='HJM1CT8RBSCD2VT9A9S1GQY' where id=4; -update noar tt set b2='Z2JQCR43FP91R0PYW0JWFQ6H84N4' where id=4; -update noar ti set b2='Z2JQCR43FP91R0PYW0JWFQ6H84N4' where id=4; -update noar tt set v0='A' where id=5; -update noar ti set v0='A' where id=5; -update noar tt set b0='4A27OKHX0IXYTLXDQTC1JD0V' where id=5; -update noar ti set b0='4A27OKHX0IXYTLXDQTC1JD0V' where id=5; -update noar tt set v0='BDM4L1S9S6PC' where id=5; -update noar ti set v0='BDM4L1S9S6PC' where id=5; -update noar tt set b1='SWM1UC59OEZF99YJ' where id=5; -update noar ti set b1='SWM1UC59OEZF99YJ' where id=5; -update noar tt set v0='LBA8NGT8OS5AG239F' where id=5; -update noar ti set v0='LBA8NGT8OS5AG239F' where id=5; -update noar tt set b2='6K63LDEO5V857YD65CCJPLPIM78NQHYL' where id=5; -update noar ti set b2='6K63LDEO5V857YD65CCJPLPIM78NQHYL' where id=5; -update noar tt set v0='5B' where id=6; -update noar ti set v0='5B' where id=6; -update noar tt set b0='DE1ZCYS7YGC0RIJSOQ4B1R6VTYR6C' where id=6; -update noar ti set b0='DE1ZCYS7YGC0RIJSOQ4B1R6VTYR6C' where id=6; -update noar tt set v0='TNSW6MX2025GN4FAHQV7VO4CP' where id=6; -update noar ti set v0='TNSW6MX2025GN4FAHQV7VO4CP' where id=6; -update noar tt set b1='AVJW' where id=6; -update noar ti set b1='AVJW' where id=6; -update noar tt set v0='170QOOJCSKFNFBDELG9DU38DB75' where id=6; -update noar ti set v0='170QOOJCSKFNFBDELG9DU38DB75' where id=6; -update noar tt set b2='86B4OYLL764FGSPLRTJW3SSAKLE1YFT' where id=6; -update noar ti set b2='86B4OYLL764FGSPLRTJW3SSAKLE1YFT' where id=6; -update noar tt set v0='I' where id=7; -update noar ti set v0='I' where id=7; -update noar tt set b0='L1X29TN9QIECOHR2UFKYB12DMQV0O' where id=7; -update noar ti set b0='L1X29TN9QIECOHR2UFKYB12DMQV0O' where id=7; -update noar tt set v0='EJRE4JFNAOAK847M55GLUWBNWE' where id=7; -update noar ti set v0='EJRE4JFNAOAK847M55GLUWBNWE' where id=7; -update noar tt set b1='UKTH3YBA3W1771A' where id=7; -update noar ti set b1='UKTH3YBA3W1771A' where id=7; -update noar tt set v0='OWCQ6OYM0BXPA3F18K0ZAZIGHKOD' where id=7; -update noar ti set v0='OWCQ6OYM0BXPA3F18K0ZAZIGHKOD' where id=7; -update noar tt set b2='MJMJIHWB6QJNN8RBO67FHA' where id=7; -update noar ti set b2='MJMJIHWB6QJNN8RBO67FHA' where id=7; -update noar tt set v0='UAIS15X33YK46N' where id=8; -update noar ti set v0='UAIS15X33YK46N' where id=8; -update noar tt set b0='7ATDEB4XSSL8MYRN' where id=8; -update noar ti set b0='7ATDEB4XSSL8MYRN' where id=8; -update noar tt set v0='MV5LZ4XYDJ' where id=8; -update noar ti set v0='MV5LZ4XYDJ' where id=8; -update noar tt set b1='5T' where id=8; -update noar ti set b1='5T' where id=8; -update noar tt set v0='NHS2853EAA' where id=8; -update noar ti set v0='NHS2853EAA' where id=8; -update noar tt set b2='H7F8K8NZOFTNW6X1VJ6LAC' where id=8; -update noar ti set b2='H7F8K8NZOFTNW6X1VJ6LAC' where id=8; -update noar tt set v0='0AE69HV' where id=9; -update noar ti set v0='0AE69HV' where id=9; -update noar tt set b0='RSKND4QZZ8U98W80Q' where id=9; -update noar ti set b0='RSKND4QZZ8U98W80Q' where id=9; -update noar tt set v0='417IGVZ8QR8ER9Q2U' where id=9; -update noar ti set v0='417IGVZ8QR8ER9Q2U' where id=9; -update noar tt set b1='ABR1A1MUSQHULUDYEP7NVNC9ZJ5' where id=9; -update noar ti set b1='ABR1A1MUSQHULUDYEP7NVNC9ZJ5' where id=9; -update noar tt set v0='PQRCI081DPZJGQYNV8KZHN' where id=9; -update noar ti set v0='PQRCI081DPZJGQYNV8KZHN' where id=9; -update noar tt set b2='505DPHW1EXFMR' where id=9; -update noar ti set b2='505DPHW1EXFMR' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 tinyblob null, -b1 blob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='WDHRS33KNLU32YXJP21A768C' where id=1; -update noar ti set v0='WDHRS33KNLU32YXJP21A768C' where id=1; -update noar tt set b0='MT48Z8JVYERY' where id=1; -update noar ti set b0='MT48Z8JVYERY' where id=1; -update noar tt set v0='IBO854VLI1' where id=1; -update noar ti set v0='IBO854VLI1' where id=1; -update noar tt set b1='MOZBITZUWASZ9JYCMX80' where id=1; -update noar ti set b1='MOZBITZUWASZ9JYCMX80' where id=1; -update noar tt set v0='RIF9NKVN88ENLI75WZ2OXDL92EQQWIW' where id=1; -update noar ti set v0='RIF9NKVN88ENLI75WZ2OXDL92EQQWIW' where id=1; -update noar tt set b2='K8SXDWAT7' where id=1; -update noar ti set b2='K8SXDWAT7' where id=1; -update noar tt set v0='X22TLC9EGL16' where id=2; -update noar ti set v0='X22TLC9EGL16' where id=2; -update noar tt set b0='08L4YG2DL6QRHQ0XO9S84GR' where id=2; -update noar ti set b0='08L4YG2DL6QRHQ0XO9S84GR' where id=2; -update noar tt set v0='ILB75339J325GRXFYRFFWWN9WEDA3' where id=2; -update noar ti set v0='ILB75339J325GRXFYRFFWWN9WEDA3' where id=2; -update noar tt set b1='MIYQRPKROHMWFRPBJH8Z9TFC' where id=2; -update noar ti set b1='MIYQRPKROHMWFRPBJH8Z9TFC' where id=2; -update noar tt set v0='VGZMHDKLJD4' where id=2; -update noar ti set v0='VGZMHDKLJD4' where id=2; -update noar tt set b2='1' where id=2; -update noar ti set b2='1' where id=2; -update noar tt set v0='9TJW89D1O' where id=3; -update noar ti set v0='9TJW89D1O' where id=3; -update noar tt set b0='ADJJ0Q417KDF39P96SLWHVTALR1X' where id=3; -update noar ti set b0='ADJJ0Q417KDF39P96SLWHVTALR1X' where id=3; -update noar tt set v0='P2V' where id=3; -update noar ti set v0='P2V' where id=3; -update noar tt set b1='BMQN6LGMA96C381159TO5AP9K' where id=3; -update noar ti set b1='BMQN6LGMA96C381159TO5AP9K' where id=3; -update noar tt set v0='XHA42IO' where id=3; -update noar ti set v0='XHA42IO' where id=3; -update noar tt set b2='P2W54ORD96LT3SNG84F1' where id=3; -update noar ti set b2='P2W54ORD96LT3SNG84F1' where id=3; -update noar tt set v0='NGGBXXO71SJZOTSQXI1NG6UCHCN91' where id=4; -update noar ti set v0='NGGBXXO71SJZOTSQXI1NG6UCHCN91' where id=4; -update noar tt set b0='L1ZPXHQ1JL' where id=4; -update noar ti set b0='L1ZPXHQ1JL' where id=4; -update noar tt set v0='O6BD1XKCK5FBOY6H54ETMMRN6' where id=4; -update noar ti set v0='O6BD1XKCK5FBOY6H54ETMMRN6' where id=4; -update noar tt set b1='UH3BS8VNNKX3ASL9' where id=4; -update noar ti set b1='UH3BS8VNNKX3ASL9' where id=4; -update noar tt set v0='GPBTD6L8RYD5QCIPK6VD3HZ8IGTUGA' where id=4; -update noar ti set v0='GPBTD6L8RYD5QCIPK6VD3HZ8IGTUGA' where id=4; -update noar tt set b2='9AZIG1SYZ9HG' where id=4; -update noar ti set b2='9AZIG1SYZ9HG' where id=4; -update noar tt set v0='NNZLTH' where id=5; -update noar ti set v0='NNZLTH' where id=5; -update noar tt set b0='94BZ3UMM7SWIRCHEDYFII' where id=5; -update noar ti set b0='94BZ3UMM7SWIRCHEDYFII' where id=5; -update noar tt set v0='HY2UPSP89T4BENWNM21FV5FQDLC' where id=5; -update noar ti set v0='HY2UPSP89T4BENWNM21FV5FQDLC' where id=5; -update noar tt set b1='I1TDJM' where id=5; -update noar ti set b1='I1TDJM' where id=5; -update noar tt set v0='CG6EOB89HUB7RA6RI64JK4O' where id=5; -update noar ti set v0='CG6EOB89HUB7RA6RI64JK4O' where id=5; -update noar tt set b2='ALSO4' where id=5; -update noar ti set b2='ALSO4' where id=5; -update noar tt set v0='UAB5AOOZLXNN7BXTEBDB' where id=6; -update noar ti set v0='UAB5AOOZLXNN7BXTEBDB' where id=6; -update noar tt set b0='I7' where id=6; -update noar ti set b0='I7' where id=6; -update noar tt set v0='8AEU5SN6QL4HZ3ZRY52GX2LBJIL' where id=6; -update noar ti set v0='8AEU5SN6QL4HZ3ZRY52GX2LBJIL' where id=6; -update noar tt set b1='UEPO6' where id=6; -update noar ti set b1='UEPO6' where id=6; -update noar tt set v0='CRK9W1DT' where id=6; -update noar ti set v0='CRK9W1DT' where id=6; -update noar tt set b2='P9Y7TLVVIFW8' where id=6; -update noar ti set b2='P9Y7TLVVIFW8' where id=6; -update noar tt set v0='XT5J63Z5H38I3TQWP3WDUO355V1J' where id=7; -update noar ti set v0='XT5J63Z5H38I3TQWP3WDUO355V1J' where id=7; -update noar tt set b0='20YY3GGQH2Z' where id=7; -update noar ti set b0='20YY3GGQH2Z' where id=7; -update noar tt set v0='ZE09IM92WRDK4FLPU73B8MYQ8KEFZB' where id=7; -update noar ti set v0='ZE09IM92WRDK4FLPU73B8MYQ8KEFZB' where id=7; -update noar tt set b1='LQ72X3FWAC2XW5KJDC3IU9PAUJVR4' where id=7; -update noar ti set b1='LQ72X3FWAC2XW5KJDC3IU9PAUJVR4' where id=7; -update noar tt set v0='U' where id=7; -update noar ti set v0='U' where id=7; -update noar tt set b2='2ROGFED5' where id=7; -update noar ti set b2='2ROGFED5' where id=7; -update noar tt set v0='ZONDL0IBOLZDU9H273IVP74YMNOI3BS9' where id=8; -update noar ti set v0='ZONDL0IBOLZDU9H273IVP74YMNOI3BS9' where id=8; -update noar tt set b0='6O25X1RVAIHQ' where id=8; -update noar ti set b0='6O25X1RVAIHQ' where id=8; -update noar tt set v0='6ZD6IJP43TW' where id=8; -update noar ti set v0='6ZD6IJP43TW' where id=8; -update noar tt set b1='6I0S1FVOFA8RB0' where id=8; -update noar ti set b1='6I0S1FVOFA8RB0' where id=8; -update noar tt set v0='RLXHM9HN2LM7T026A05ITRDTV' where id=8; -update noar ti set v0='RLXHM9HN2LM7T026A05ITRDTV' where id=8; -update noar tt set b2='WGT957DVXGCAA7HT' where id=8; -update noar ti set b2='WGT957DVXGCAA7HT' where id=8; -update noar tt set v0='PASDGS5HN57VJM2UMWJ388' where id=9; -update noar ti set v0='PASDGS5HN57VJM2UMWJ388' where id=9; -update noar tt set b0='R3HCKR5HHB7G591NWRUHM0' where id=9; -update noar ti set b0='R3HCKR5HHB7G591NWRUHM0' where id=9; -update noar tt set v0='3Q4UCD7DOJJ1DQFRTEUVZU4IFB' where id=9; -update noar ti set v0='3Q4UCD7DOJJ1DQFRTEUVZU4IFB' where id=9; -update noar tt set b1='SCW0N5NDPKB0NHK9TJ' where id=9; -update noar ti set b1='SCW0N5NDPKB0NHK9TJ' where id=9; -update noar tt set v0='2YAYTWYB2XF3RBQYMSA78X5WRCWS' where id=9; -update noar ti set v0='2YAYTWYB2XF3RBQYMSA78X5WRCWS' where id=9; -update noar tt set b2='U8W5KH07VVXYT4LRTUAFIPCVII7YPS8F' where id=9; -update noar ti set b2='U8W5KH07VVXYT4LRTUAFIPCVII7YPS8F' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 tinyblob null, -b1 blob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='NTBA40QD64OZI9SOUMH' where id=1; -update noar ti set v0='NTBA40QD64OZI9SOUMH' where id=1; -update noar tt set b0='Q4LM' where id=1; -update noar ti set b0='Q4LM' where id=1; -update noar tt set v0='UD6C9R8TS93UM62PGW51KV78' where id=1; -update noar ti set v0='UD6C9R8TS93UM62PGW51KV78' where id=1; -update noar tt set b1='WTU0GJ3QIS4M' where id=1; -update noar ti set b1='WTU0GJ3QIS4M' where id=1; -update noar tt set v0='0AJU' where id=1; -update noar ti set v0='0AJU' where id=1; -update noar tt set b2='U803RIBS0KKX3VXBW' where id=1; -update noar ti set b2='U803RIBS0KKX3VXBW' where id=1; -update noar tt set v0='XW82C4PGSSYF8A85Z3TB8LTH07GU' where id=2; -update noar ti set v0='XW82C4PGSSYF8A85Z3TB8LTH07GU' where id=2; -update noar tt set b0='6CWV' where id=2; -update noar ti set b0='6CWV' where id=2; -update noar tt set v0='CPE' where id=2; -update noar ti set v0='CPE' where id=2; -update noar tt set b1='09I17I8ZA4O33EXT4ANNMA0Y5' where id=2; -update noar ti set b1='09I17I8ZA4O33EXT4ANNMA0Y5' where id=2; -update noar tt set v0='R' where id=2; -update noar ti set v0='R' where id=2; -update noar tt set b2='OABDSQSZ14' where id=2; -update noar ti set b2='OABDSQSZ14' where id=2; -update noar tt set v0='LKZ7QI0PERNZQY' where id=3; -update noar ti set v0='LKZ7QI0PERNZQY' where id=3; -update noar tt set b0='RUPT58G4NO9KBTDLO2T7AM7T' where id=3; -update noar ti set b0='RUPT58G4NO9KBTDLO2T7AM7T' where id=3; -update noar tt set v0='1E4REOGM52K' where id=3; -update noar ti set v0='1E4REOGM52K' where id=3; -update noar tt set b1='HYO3NDK2' where id=3; -update noar ti set b1='HYO3NDK2' where id=3; -update noar tt set v0='SC1Z' where id=3; -update noar ti set v0='SC1Z' where id=3; -update noar tt set b2='0' where id=3; -update noar ti set b2='0' where id=3; -update noar tt set v0='C' where id=4; -update noar ti set v0='C' where id=4; -update noar tt set b0='ARJMG8ZXXRKLDXZ' where id=4; -update noar ti set b0='ARJMG8ZXXRKLDXZ' where id=4; -update noar tt set v0='ZP1R308EZ87A82Q' where id=4; -update noar ti set v0='ZP1R308EZ87A82Q' where id=4; -update noar tt set b1='GN6BS59HGGAGDO' where id=4; -update noar ti set b1='GN6BS59HGGAGDO' where id=4; -update noar tt set v0='4DXJ8N43JPC57LX1A8T3OSM28KI' where id=4; -update noar ti set v0='4DXJ8N43JPC57LX1A8T3OSM28KI' where id=4; -update noar tt set b2='G8YQXBW25N' where id=4; -update noar ti set b2='G8YQXBW25N' where id=4; -update noar tt set v0='2679RC1V' where id=5; -update noar ti set v0='2679RC1V' where id=5; -update noar tt set b0='BBOF' where id=5; -update noar ti set b0='BBOF' where id=5; -update noar tt set v0='E2HNQTT8I' where id=5; -update noar ti set v0='E2HNQTT8I' where id=5; -update noar tt set b1='1AHUEVCVNZVQYVO7SX2VZE5' where id=5; -update noar ti set b1='1AHUEVCVNZVQYVO7SX2VZE5' where id=5; -update noar tt set v0='PXAWT9OF9D' where id=5; -update noar ti set v0='PXAWT9OF9D' where id=5; -update noar tt set b2='RUAFNTPYGD3JQGOVWLHLBP8KI' where id=5; -update noar ti set b2='RUAFNTPYGD3JQGOVWLHLBP8KI' where id=5; -update noar tt set v0='6QR3JYQHJLY6MCTG3BLZZ3K4TMJVGE6' where id=6; -update noar ti set v0='6QR3JYQHJLY6MCTG3BLZZ3K4TMJVGE6' where id=6; -update noar tt set b0='C80B6B4RRADS9XYF97LD4XOG' where id=6; -update noar ti set b0='C80B6B4RRADS9XYF97LD4XOG' where id=6; -update noar tt set v0='PJKX0YZ4SSIL' where id=6; -update noar ti set v0='PJKX0YZ4SSIL' where id=6; -update noar tt set b1='HWGFOS06UTONKW7MA9GAC1TXDZZM37PJ' where id=6; -update noar ti set b1='HWGFOS06UTONKW7MA9GAC1TXDZZM37PJ' where id=6; -update noar tt set v0='G' where id=6; -update noar ti set v0='G' where id=6; -update noar tt set b2='H3LS006JS4' where id=6; -update noar ti set b2='H3LS006JS4' where id=6; -update noar tt set v0='94KUF' where id=7; -update noar ti set v0='94KUF' where id=7; -update noar tt set b0='MH3ETLZNK4HLK68QAQZRRNO5' where id=7; -update noar ti set b0='MH3ETLZNK4HLK68QAQZRRNO5' where id=7; -update noar tt set v0='SPAFV9SF4ZQTUSGFRFF1A9' where id=7; -update noar ti set v0='SPAFV9SF4ZQTUSGFRFF1A9' where id=7; -update noar tt set b1='2' where id=7; -update noar ti set b1='2' where id=7; -update noar tt set v0='35RV386OX75TTP' where id=7; -update noar ti set v0='35RV386OX75TTP' where id=7; -update noar tt set b2='T3JEQU9QQ6P1XSXK3SJ6I' where id=7; -update noar ti set b2='T3JEQU9QQ6P1XSXK3SJ6I' where id=7; -update noar tt set v0='J8KONOV8F4PE' where id=8; -update noar ti set v0='J8KONOV8F4PE' where id=8; -update noar tt set b0='DA56BXX0MSX6PZDCI3IE' where id=8; -update noar ti set b0='DA56BXX0MSX6PZDCI3IE' where id=8; -update noar tt set v0='LDHS1OLTXTVZA852X' where id=8; -update noar ti set v0='LDHS1OLTXTVZA852X' where id=8; -update noar tt set b1='244JSQ3DWZ4B6ICJO2YUANJPZ' where id=8; -update noar ti set b1='244JSQ3DWZ4B6ICJO2YUANJPZ' where id=8; -update noar tt set v0='93QP6V6E5R21NZFPEN7JC' where id=8; -update noar ti set v0='93QP6V6E5R21NZFPEN7JC' where id=8; -update noar tt set b2='TIQQF5TEZ' where id=8; -update noar ti set b2='TIQQF5TEZ' where id=8; -update noar tt set v0='58JV6TXHDF4W62HWKHEUSZMZ' where id=9; -update noar ti set v0='58JV6TXHDF4W62HWKHEUSZMZ' where id=9; -update noar tt set b0='Y917I60YNKO2V7DERIC0OGE62J9RR' where id=9; -update noar ti set b0='Y917I60YNKO2V7DERIC0OGE62J9RR' where id=9; -update noar tt set v0='0UHU3' where id=9; -update noar ti set v0='0UHU3' where id=9; -update noar tt set b1='Z5U4DA9C8E2FSF2MSG0KJ' where id=9; -update noar ti set b1='Z5U4DA9C8E2FSF2MSG0KJ' where id=9; -update noar tt set v0='7G34N83XULZK89V8MKVKHJEY' where id=9; -update noar ti set v0='7G34N83XULZK89V8MKVKHJEY' where id=9; -update noar tt set b2='708DN748AGPTIB4YK' where id=9; -update noar ti set b2='708DN748AGPTIB4YK' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 tinyblob not null, -b1 blob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='TU6AGUZJNNAZ7MW2N2UQ' where id=1; -update noar ti set v0='TU6AGUZJNNAZ7MW2N2UQ' where id=1; -update noar tt set b0='FL9RXSX' where id=1; -update noar ti set b0='FL9RXSX' where id=1; -update noar tt set v0='3K58VLTO58QYNOJNLHCV3LNZS' where id=1; -update noar ti set v0='3K58VLTO58QYNOJNLHCV3LNZS' where id=1; -update noar tt set b1='NN19J06QIO0UI8' where id=1; -update noar ti set b1='NN19J06QIO0UI8' where id=1; -update noar tt set v0='0671GVZ45D' where id=1; -update noar ti set v0='0671GVZ45D' where id=1; -update noar tt set b2='VOQLA6NMSO7XKGF6Y4CMS' where id=1; -update noar ti set b2='VOQLA6NMSO7XKGF6Y4CMS' where id=1; -update noar tt set v0='4MQ27LH8MN1F1DC9HZMDIMOKX0P' where id=2; -update noar ti set v0='4MQ27LH8MN1F1DC9HZMDIMOKX0P' where id=2; -update noar tt set b0='DGOOLVFI1' where id=2; -update noar ti set b0='DGOOLVFI1' where id=2; -update noar tt set v0='GJPSHLI' where id=2; -update noar ti set v0='GJPSHLI' where id=2; -update noar tt set b1='BZOXOYVV4BDOERKF4UY' where id=2; -update noar ti set b1='BZOXOYVV4BDOERKF4UY' where id=2; -update noar tt set v0='9BT3K9GY6LUSENS0J6UVDQQ5IGO' where id=2; -update noar ti set v0='9BT3K9GY6LUSENS0J6UVDQQ5IGO' where id=2; -update noar tt set b2='0DFSFATOIB' where id=2; -update noar ti set b2='0DFSFATOIB' where id=2; -update noar tt set v0='2' where id=3; -update noar ti set v0='2' where id=3; -update noar tt set b0='ETKXJ9P0V138UQLZ6' where id=3; -update noar ti set b0='ETKXJ9P0V138UQLZ6' where id=3; -update noar tt set v0='GYE2910FGUIVYQDYI663P4LW2LK3S' where id=3; -update noar ti set v0='GYE2910FGUIVYQDYI663P4LW2LK3S' where id=3; -update noar tt set b1='L' where id=3; -update noar ti set b1='L' where id=3; -update noar tt set v0='VAARRI' where id=3; -update noar ti set v0='VAARRI' where id=3; -update noar tt set b2='A' where id=3; -update noar ti set b2='A' where id=3; -update noar tt set v0='HWUE5JK9PRW27NAZV' where id=4; -update noar ti set v0='HWUE5JK9PRW27NAZV' where id=4; -update noar tt set b0='J5XQ6ISFQGK0MCXS3' where id=4; -update noar ti set b0='J5XQ6ISFQGK0MCXS3' where id=4; -update noar tt set v0='Z5STV9X' where id=4; -update noar ti set v0='Z5STV9X' where id=4; -update noar tt set b1='SEUNDD' where id=4; -update noar ti set b1='SEUNDD' where id=4; -update noar tt set v0='TQ0RW9DNG' where id=4; -update noar ti set v0='TQ0RW9DNG' where id=4; -update noar tt set b2='TPG9ZBD5S38EB' where id=4; -update noar ti set b2='TPG9ZBD5S38EB' where id=4; -update noar tt set v0='Y026IPMF3FPDEVS8DRU' where id=5; -update noar ti set v0='Y026IPMF3FPDEVS8DRU' where id=5; -update noar tt set b0='E4F0GXRULUMQ4CD8X08F50NJ' where id=5; -update noar ti set b0='E4F0GXRULUMQ4CD8X08F50NJ' where id=5; -update noar tt set v0='Q8ITIU8FFQMY8VI8YAIYX9JE473' where id=5; -update noar ti set v0='Q8ITIU8FFQMY8VI8YAIYX9JE473' where id=5; -update noar tt set b1='B85Z57UMWSFJLIIRM18FL4153L3' where id=5; -update noar ti set b1='B85Z57UMWSFJLIIRM18FL4153L3' where id=5; -update noar tt set v0='NE6IRZS' where id=5; -update noar ti set v0='NE6IRZS' where id=5; -update noar tt set b2='GKMVZB26W90COI5NIYXQ4G9IS9H5O1' where id=5; -update noar ti set b2='GKMVZB26W90COI5NIYXQ4G9IS9H5O1' where id=5; -update noar tt set v0='KC41VLR3T0' where id=6; -update noar ti set v0='KC41VLR3T0' where id=6; -update noar tt set b0='FLBLCNSV' where id=6; -update noar ti set b0='FLBLCNSV' where id=6; -update noar tt set v0='5ME6W4JJSG5GPTTPNK2TCURNWP' where id=6; -update noar ti set v0='5ME6W4JJSG5GPTTPNK2TCURNWP' where id=6; -update noar tt set b1='UA11OKFXPVQERX2GT3NQ1ZKF' where id=6; -update noar ti set b1='UA11OKFXPVQERX2GT3NQ1ZKF' where id=6; -update noar tt set v0='4B7FQBLJEU9KMAE7RHCJU8' where id=6; -update noar ti set v0='4B7FQBLJEU9KMAE7RHCJU8' where id=6; -update noar tt set b2='W60F2' where id=6; -update noar ti set b2='W60F2' where id=6; -update noar tt set v0='M' where id=7; -update noar ti set v0='M' where id=7; -update noar tt set b0='4W' where id=7; -update noar ti set b0='4W' where id=7; -update noar tt set v0='6FEVIL132IP5NS' where id=7; -update noar ti set v0='6FEVIL132IP5NS' where id=7; -update noar tt set b1='2PREOOKF7I' where id=7; -update noar ti set b1='2PREOOKF7I' where id=7; -update noar tt set v0='CD3DF9GLUASVAW1H' where id=7; -update noar ti set v0='CD3DF9GLUASVAW1H' where id=7; -update noar tt set b2='CGPUGUIZO7IPE' where id=7; -update noar ti set b2='CGPUGUIZO7IPE' where id=7; -update noar tt set v0='695UXWCGK' where id=8; -update noar ti set v0='695UXWCGK' where id=8; -update noar tt set b0='JOVPMBRAQF' where id=8; -update noar ti set b0='JOVPMBRAQF' where id=8; -update noar tt set v0='FC6NCXPX7TCMV42ODDUFK5UT6F7Q' where id=8; -update noar ti set v0='FC6NCXPX7TCMV42ODDUFK5UT6F7Q' where id=8; -update noar tt set b1='ETOJUFCE2YVPNBX7J' where id=8; -update noar ti set b1='ETOJUFCE2YVPNBX7J' where id=8; -update noar tt set v0='2' where id=8; -update noar ti set v0='2' where id=8; -update noar tt set b2='B7L9C6VIY9H94QVAADP6XXF6NSO' where id=8; -update noar ti set b2='B7L9C6VIY9H94QVAADP6XXF6NSO' where id=8; -update noar tt set v0='6KGBP' where id=9; -update noar ti set v0='6KGBP' where id=9; -update noar tt set b0='MFJNPF81H' where id=9; -update noar ti set b0='MFJNPF81H' where id=9; -update noar tt set v0='QHZ1CW3VWA' where id=9; -update noar ti set v0='QHZ1CW3VWA' where id=9; -update noar tt set b1='60HGFVDQ9' where id=9; -update noar ti set b1='60HGFVDQ9' where id=9; -update noar tt set v0='7JXN5T3AEDJKU2H3MW8' where id=9; -update noar ti set v0='7JXN5T3AEDJKU2H3MW8' where id=9; -update noar tt set b2='A9' where id=9; -update noar ti set b2='A9' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 tinyblob not null, -b1 blob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='ML14I87M52OI3LOV' where id=1; -update noar ti set v0='ML14I87M52OI3LOV' where id=1; -update noar tt set b0='T2LNXF' where id=1; -update noar ti set b0='T2LNXF' where id=1; -update noar tt set v0='COW30MX' where id=1; -update noar ti set v0='COW30MX' where id=1; -update noar tt set b1='56GS6CYR054HPMAGJ4RH7J' where id=1; -update noar ti set b1='56GS6CYR054HPMAGJ4RH7J' where id=1; -update noar tt set v0='O8V74TFYBTIJY5HBNFZRK' where id=1; -update noar ti set v0='O8V74TFYBTIJY5HBNFZRK' where id=1; -update noar tt set b2='R2HV8TFSBPO9H25DZC4NDJNBKBK' where id=1; -update noar ti set b2='R2HV8TFSBPO9H25DZC4NDJNBKBK' where id=1; -update noar tt set v0='0M945P8TLQCZA5' where id=2; -update noar ti set v0='0M945P8TLQCZA5' where id=2; -update noar tt set b0='TMQSAXK3O6CV2VWUN8EGU' where id=2; -update noar ti set b0='TMQSAXK3O6CV2VWUN8EGU' where id=2; -update noar tt set v0='2BL1YR8ICTX9QJ91Y1P0V0S0FLXCAE' where id=2; -update noar ti set v0='2BL1YR8ICTX9QJ91Y1P0V0S0FLXCAE' where id=2; -update noar tt set b1='CSP8Y9V9E84MJLYWIYPF25JG87L0II' where id=2; -update noar ti set b1='CSP8Y9V9E84MJLYWIYPF25JG87L0II' where id=2; -update noar tt set v0='QNY1AVCIOXDBR0' where id=2; -update noar ti set v0='QNY1AVCIOXDBR0' where id=2; -update noar tt set b2='KP1CKU61O697A01X1EBIHXJ' where id=2; -update noar ti set b2='KP1CKU61O697A01X1EBIHXJ' where id=2; -update noar tt set v0='R95XHB9Z4X' where id=3; -update noar ti set v0='R95XHB9Z4X' where id=3; -update noar tt set b0='W978LDZMI4MB' where id=3; -update noar ti set b0='W978LDZMI4MB' where id=3; -update noar tt set v0='P5F1OZWC0LD38GND4D6I4M4URG3J2R' where id=3; -update noar ti set v0='P5F1OZWC0LD38GND4D6I4M4URG3J2R' where id=3; -update noar tt set b1='QXAQYTQZI' where id=3; -update noar ti set b1='QXAQYTQZI' where id=3; -update noar tt set v0='E7BQ2O7FO169' where id=3; -update noar ti set v0='E7BQ2O7FO169' where id=3; -update noar tt set b2='QE79JY1OL6F8SBI698' where id=3; -update noar ti set b2='QE79JY1OL6F8SBI698' where id=3; -update noar tt set v0='731ZKG3HSTTV5Q3C' where id=4; -update noar ti set v0='731ZKG3HSTTV5Q3C' where id=4; -update noar tt set b0='YQRTSFL4I6VQT9YSPP9ZUX63VVPCJ' where id=4; -update noar ti set b0='YQRTSFL4I6VQT9YSPP9ZUX63VVPCJ' where id=4; -update noar tt set v0='L3HTQW1NYIC0JVIW07' where id=4; -update noar ti set v0='L3HTQW1NYIC0JVIW07' where id=4; -update noar tt set b1='QNQT640' where id=4; -update noar ti set b1='QNQT640' where id=4; -update noar tt set v0='9EN0UFDTMKH9Z8QXMC6GIO' where id=4; -update noar ti set v0='9EN0UFDTMKH9Z8QXMC6GIO' where id=4; -update noar tt set b2='Q2AJ9GTIIEGIP4XYJXGUZGMSU' where id=4; -update noar ti set b2='Q2AJ9GTIIEGIP4XYJXGUZGMSU' where id=4; -update noar tt set v0='MSRAE8U85OQ6DH4GR' where id=5; -update noar ti set v0='MSRAE8U85OQ6DH4GR' where id=5; -update noar tt set b0='WKM' where id=5; -update noar ti set b0='WKM' where id=5; -update noar tt set v0='TC3S69MW6Y' where id=5; -update noar ti set v0='TC3S69MW6Y' where id=5; -update noar tt set b1='VPFE729THU' where id=5; -update noar ti set b1='VPFE729THU' where id=5; -update noar tt set v0='RQPXLU' where id=5; -update noar ti set v0='RQPXLU' where id=5; -update noar tt set b2='DPQ5VOOHOQH991K91M' where id=5; -update noar ti set b2='DPQ5VOOHOQH991K91M' where id=5; -update noar tt set v0='578R66NDCDOTU7K3E6Q' where id=6; -update noar ti set v0='578R66NDCDOTU7K3E6Q' where id=6; -update noar tt set b0='NL3QLUXO30S9YS8U84E23MVDYFIHZI' where id=6; -update noar ti set b0='NL3QLUXO30S9YS8U84E23MVDYFIHZI' where id=6; -update noar tt set v0='UND1DXNIOZ3A3XXBJLP' where id=6; -update noar ti set v0='UND1DXNIOZ3A3XXBJLP' where id=6; -update noar tt set b1='XKRDXYOAD7C7JG12QWG8E' where id=6; -update noar ti set b1='XKRDXYOAD7C7JG12QWG8E' where id=6; -update noar tt set v0='Y0XWR' where id=6; -update noar ti set v0='Y0XWR' where id=6; -update noar tt set b2='CFVG5P6V32N0BQB' where id=6; -update noar ti set b2='CFVG5P6V32N0BQB' where id=6; -update noar tt set v0='A0JJQPEMKG9I0YM8RQ0S0W' where id=7; -update noar ti set v0='A0JJQPEMKG9I0YM8RQ0S0W' where id=7; -update noar tt set b0='J616TJ3PI' where id=7; -update noar ti set b0='J616TJ3PI' where id=7; -update noar tt set v0='TEW3GCB8J7NELIG8BFNO44BU61E4' where id=7; -update noar ti set v0='TEW3GCB8J7NELIG8BFNO44BU61E4' where id=7; -update noar tt set b1='SD7JBTBO4MFD' where id=7; -update noar ti set b1='SD7JBTBO4MFD' where id=7; -update noar tt set v0='0E4S75CQ' where id=7; -update noar ti set v0='0E4S75CQ' where id=7; -update noar tt set b2='TYPD5454GII' where id=7; -update noar ti set b2='TYPD5454GII' where id=7; -update noar tt set v0='7B3DJPI7UW986UWKMNW9SF0MKDEEWT' where id=8; -update noar ti set v0='7B3DJPI7UW986UWKMNW9SF0MKDEEWT' where id=8; -update noar tt set b0='U' where id=8; -update noar ti set b0='U' where id=8; -update noar tt set v0='RRHU3ZNOK3TECPWR8M4PKTGZBN2TQ' where id=8; -update noar ti set v0='RRHU3ZNOK3TECPWR8M4PKTGZBN2TQ' where id=8; -update noar tt set b1='IF5Q7D7386XB5W702' where id=8; -update noar ti set b1='IF5Q7D7386XB5W702' where id=8; -update noar tt set v0='HZOWIY1VLZ2RMP' where id=8; -update noar ti set v0='HZOWIY1VLZ2RMP' where id=8; -update noar tt set b2='2E' where id=8; -update noar ti set b2='2E' where id=8; -update noar tt set v0='D70ZQ2CR172AUAH9' where id=9; -update noar ti set v0='D70ZQ2CR172AUAH9' where id=9; -update noar tt set b0='U84LRLN262APJLEUPBEBDHY' where id=9; -update noar ti set b0='U84LRLN262APJLEUPBEBDHY' where id=9; -update noar tt set v0='RHCMI' where id=9; -update noar ti set v0='RHCMI' where id=9; -update noar tt set b1='MWM' where id=9; -update noar ti set b1='MWM' where id=9; -update noar tt set v0='UFHKTSEXQ67JF8HUYH1DTB' where id=9; -update noar ti set v0='UFHKTSEXQ67JF8HUYH1DTB' where id=9; -update noar tt set b2='MDU8' where id=9; -update noar ti set b2='MDU8' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 tinyblob null, -b1 mediumblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='1VRMFX4G4AFLE4E5MY80XC5' where id=1; -update noar ti set v0='1VRMFX4G4AFLE4E5MY80XC5' where id=1; -update noar tt set b0='95WWKVA6F9FI8Q' where id=1; -update noar ti set b0='95WWKVA6F9FI8Q' where id=1; -update noar tt set v0='Q92TF1A61BHBRNJS7EXPI2I6' where id=1; -update noar ti set v0='Q92TF1A61BHBRNJS7EXPI2I6' where id=1; -update noar tt set b1='6TQB8PLTSONSD5TSE5NWM' where id=1; -update noar ti set b1='6TQB8PLTSONSD5TSE5NWM' where id=1; -update noar tt set v0='7QEMA86' where id=1; -update noar ti set v0='7QEMA86' where id=1; -update noar tt set b2='45QK8EPONXV' where id=1; -update noar ti set b2='45QK8EPONXV' where id=1; -update noar tt set v0='WZUKY9G5QH1KS4O05TN9QS5HZVJU6FQ' where id=2; -update noar ti set v0='WZUKY9G5QH1KS4O05TN9QS5HZVJU6FQ' where id=2; -update noar tt set b0='Z5OFP9S8' where id=2; -update noar ti set b0='Z5OFP9S8' where id=2; -update noar tt set v0='TU3STU3KUFBCFYIRYWEU' where id=2; -update noar ti set v0='TU3STU3KUFBCFYIRYWEU' where id=2; -update noar tt set b1='BRE0DWJNFEWE9YRH' where id=2; -update noar ti set b1='BRE0DWJNFEWE9YRH' where id=2; -update noar tt set v0='J7IEQE5703' where id=2; -update noar ti set v0='J7IEQE5703' where id=2; -update noar tt set b2='C107VTIDCQ8' where id=2; -update noar ti set b2='C107VTIDCQ8' where id=2; -update noar tt set v0='TCQLXXI8L80Z51K3C52O1P42SK4HD' where id=3; -update noar ti set v0='TCQLXXI8L80Z51K3C52O1P42SK4HD' where id=3; -update noar tt set b0='NSR9322' where id=3; -update noar ti set b0='NSR9322' where id=3; -update noar tt set v0='ZUZPG4LPXP723W5XIP3E6WEPVJAV' where id=3; -update noar ti set v0='ZUZPG4LPXP723W5XIP3E6WEPVJAV' where id=3; -update noar tt set b1='01PAEMGO52JMRX3EQQQPDQJ' where id=3; -update noar ti set b1='01PAEMGO52JMRX3EQQQPDQJ' where id=3; -update noar tt set v0='EK47LGXJP7731RW5V4Y' where id=3; -update noar ti set v0='EK47LGXJP7731RW5V4Y' where id=3; -update noar tt set b2='TEQLRLO0I72QHO1QMBI6DVKX1I' where id=3; -update noar ti set b2='TEQLRLO0I72QHO1QMBI6DVKX1I' where id=3; -update noar tt set v0='93OREX1ON9856K418AN8THCUHBO9VKC' where id=4; -update noar ti set v0='93OREX1ON9856K418AN8THCUHBO9VKC' where id=4; -update noar tt set b0='H21OQD37G4AVZDPEQ' where id=4; -update noar ti set b0='H21OQD37G4AVZDPEQ' where id=4; -update noar tt set v0='01FX4KUTJAN7' where id=4; -update noar ti set v0='01FX4KUTJAN7' where id=4; -update noar tt set b1='S' where id=4; -update noar ti set b1='S' where id=4; -update noar tt set v0='N8W' where id=4; -update noar ti set v0='N8W' where id=4; -update noar tt set b2='C67OG9AQW2XHSX788EC8M7F6QCM' where id=4; -update noar ti set b2='C67OG9AQW2XHSX788EC8M7F6QCM' where id=4; -update noar tt set v0='K6LC3SY0XEENCU4K6ZZ' where id=5; -update noar ti set v0='K6LC3SY0XEENCU4K6ZZ' where id=5; -update noar tt set b0='0974UPAJ3XD891G0' where id=5; -update noar ti set b0='0974UPAJ3XD891G0' where id=5; -update noar tt set v0='5BKCZY9NSXADUMATIWDY' where id=5; -update noar ti set v0='5BKCZY9NSXADUMATIWDY' where id=5; -update noar tt set b1='4T055CZ9LV8JJSWRNQBY379G' where id=5; -update noar ti set b1='4T055CZ9LV8JJSWRNQBY379G' where id=5; -update noar tt set v0='Z8VLTI10CF49ZQWN3' where id=5; -update noar ti set v0='Z8VLTI10CF49ZQWN3' where id=5; -update noar tt set b2='E7KJVJ33LKFN' where id=5; -update noar ti set b2='E7KJVJ33LKFN' where id=5; -update noar tt set v0='TZF1F8LC9NF3XGPMEGYJOP5YA' where id=6; -update noar ti set v0='TZF1F8LC9NF3XGPMEGYJOP5YA' where id=6; -update noar tt set b0='Y1HFKWOK2H7E6FQOIFXM3L3PDH9718J' where id=6; -update noar ti set b0='Y1HFKWOK2H7E6FQOIFXM3L3PDH9718J' where id=6; -update noar tt set v0='X4LTQQIHHNBXYLEUQ89C528Z76' where id=6; -update noar ti set v0='X4LTQQIHHNBXYLEUQ89C528Z76' where id=6; -update noar tt set b1='PSI9VQIR0IGSZ5KYE5QH164X' where id=6; -update noar ti set b1='PSI9VQIR0IGSZ5KYE5QH164X' where id=6; -update noar tt set v0='B8CYNXMT0RY75ZZMJN' where id=6; -update noar ti set v0='B8CYNXMT0RY75ZZMJN' where id=6; -update noar tt set b2='PAO8I6IZL5VGPUMB2TICK86C9UE00' where id=6; -update noar ti set b2='PAO8I6IZL5VGPUMB2TICK86C9UE00' where id=6; -update noar tt set v0='GGHTK97KZU34ISSAS7' where id=7; -update noar ti set v0='GGHTK97KZU34ISSAS7' where id=7; -update noar tt set b0='JRDP0EG' where id=7; -update noar ti set b0='JRDP0EG' where id=7; -update noar tt set v0='AF71GQ22W2Y5GYZT8EU4XKWHVHWBB' where id=7; -update noar ti set v0='AF71GQ22W2Y5GYZT8EU4XKWHVHWBB' where id=7; -update noar tt set b1='L1V93SPN2HITIYAN6P77YC' where id=7; -update noar ti set b1='L1V93SPN2HITIYAN6P77YC' where id=7; -update noar tt set v0='0RAPR9TJY' where id=7; -update noar ti set v0='0RAPR9TJY' where id=7; -update noar tt set b2='UPN14PREIP49OWNVE0' where id=7; -update noar ti set b2='UPN14PREIP49OWNVE0' where id=7; -update noar tt set v0='VQHCIUT0L87M8I5U06PJ' where id=8; -update noar ti set v0='VQHCIUT0L87M8I5U06PJ' where id=8; -update noar tt set b0='L7RBJILG0TX4QL2' where id=8; -update noar ti set b0='L7RBJILG0TX4QL2' where id=8; -update noar tt set v0='Z3ZW2I4VVBS5JD70Z48R6C7' where id=8; -update noar ti set v0='Z3ZW2I4VVBS5JD70Z48R6C7' where id=8; -update noar tt set b1='2DZKW' where id=8; -update noar ti set b1='2DZKW' where id=8; -update noar tt set v0='52KZVFC596F1WJNAKYE9CX25' where id=8; -update noar ti set v0='52KZVFC596F1WJNAKYE9CX25' where id=8; -update noar tt set b2='WEBHH5442FRO7W93AKRFLKP0' where id=8; -update noar ti set b2='WEBHH5442FRO7W93AKRFLKP0' where id=8; -update noar tt set v0='DZX0S0Q' where id=9; -update noar ti set v0='DZX0S0Q' where id=9; -update noar tt set b0='PCI0KO7' where id=9; -update noar ti set b0='PCI0KO7' where id=9; -update noar tt set v0='30RGI' where id=9; -update noar ti set v0='30RGI' where id=9; -update noar tt set b1='40SDA' where id=9; -update noar ti set b1='40SDA' where id=9; -update noar tt set v0='SZ16SPALTGY95V1QK3VWPYJXPZOHM' where id=9; -update noar ti set v0='SZ16SPALTGY95V1QK3VWPYJXPZOHM' where id=9; -update noar tt set b2='AEMV' where id=9; -update noar ti set b2='AEMV' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 tinyblob null, -b1 mediumblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='2W15VZFAGXO1IC20U6K3SN8' where id=1; -update noar ti set v0='2W15VZFAGXO1IC20U6K3SN8' where id=1; -update noar tt set b0='8EF9STP63WTU0KLDZYIH8UW0675OP7CV' where id=1; -update noar ti set b0='8EF9STP63WTU0KLDZYIH8UW0675OP7CV' where id=1; -update noar tt set v0='9Y1PSK6UUVNV8BYG0YIDEP2Q7BY' where id=1; -update noar ti set v0='9Y1PSK6UUVNV8BYG0YIDEP2Q7BY' where id=1; -update noar tt set b1='2AFZH5L727JLNJ8KZL36F9' where id=1; -update noar ti set b1='2AFZH5L727JLNJ8KZL36F9' where id=1; -update noar tt set v0='BIQB6B7FHO' where id=1; -update noar ti set v0='BIQB6B7FHO' where id=1; -update noar tt set b2='GL6LI1VFUX5IH' where id=1; -update noar ti set b2='GL6LI1VFUX5IH' where id=1; -update noar tt set v0='0PWUOCW9D37V21PQCSVP49FR' where id=2; -update noar ti set v0='0PWUOCW9D37V21PQCSVP49FR' where id=2; -update noar tt set b0='E0KJHOP8OJ0ENAJT' where id=2; -update noar ti set b0='E0KJHOP8OJ0ENAJT' where id=2; -update noar tt set v0='N3DOFVD7SJSY975RY53ZLC2CIZ6W' where id=2; -update noar ti set v0='N3DOFVD7SJSY975RY53ZLC2CIZ6W' where id=2; -update noar tt set b1='1CUKK1JN2WM0NLZ8' where id=2; -update noar ti set b1='1CUKK1JN2WM0NLZ8' where id=2; -update noar tt set v0='7K82' where id=2; -update noar ti set v0='7K82' where id=2; -update noar tt set b2='OOTEM3T1FZPX4D697UOEY5QX' where id=2; -update noar ti set b2='OOTEM3T1FZPX4D697UOEY5QX' where id=2; -update noar tt set v0='62HM5Y6NQTGHLEVYLZGIJ' where id=3; -update noar ti set v0='62HM5Y6NQTGHLEVYLZGIJ' where id=3; -update noar tt set b0='86V67W2YUT' where id=3; -update noar ti set b0='86V67W2YUT' where id=3; -update noar tt set v0='P' where id=3; -update noar ti set v0='P' where id=3; -update noar tt set b1='O5RQZC' where id=3; -update noar ti set b1='O5RQZC' where id=3; -update noar tt set v0='945WIBXTP57Y' where id=3; -update noar ti set v0='945WIBXTP57Y' where id=3; -update noar tt set b2='8SKKNV1X48PYBW' where id=3; -update noar ti set b2='8SKKNV1X48PYBW' where id=3; -update noar tt set v0='O1454YCYQHV4LOE1JYI' where id=4; -update noar ti set v0='O1454YCYQHV4LOE1JYI' where id=4; -update noar tt set b0='VG' where id=4; -update noar ti set b0='VG' where id=4; -update noar tt set v0='3R0ORL518D133GW7RGUD1JU8L' where id=4; -update noar ti set v0='3R0ORL518D133GW7RGUD1JU8L' where id=4; -update noar tt set b1='R1CKQ46TYP66UY8G' where id=4; -update noar ti set b1='R1CKQ46TYP66UY8G' where id=4; -update noar tt set v0='B8J8X695GO46DTG72M4MD0CUCSOXJ7J' where id=4; -update noar ti set v0='B8J8X695GO46DTG72M4MD0CUCSOXJ7J' where id=4; -update noar tt set b2='U4JE' where id=4; -update noar ti set b2='U4JE' where id=4; -update noar tt set v0='DVVZN8SWPMJA51SH69TM' where id=5; -update noar ti set v0='DVVZN8SWPMJA51SH69TM' where id=5; -update noar tt set b0='7WAOKHFI0TTXPMT10T5NFW5' where id=5; -update noar ti set b0='7WAOKHFI0TTXPMT10T5NFW5' where id=5; -update noar tt set v0='85VVXM0YGWDTT051NDPSVR2R6O' where id=5; -update noar ti set v0='85VVXM0YGWDTT051NDPSVR2R6O' where id=5; -update noar tt set b1='2BAZF' where id=5; -update noar ti set b1='2BAZF' where id=5; -update noar tt set v0='A1Z9ULRVF5LIXAYC6NC8J6K0PYM1DPP' where id=5; -update noar ti set v0='A1Z9ULRVF5LIXAYC6NC8J6K0PYM1DPP' where id=5; -update noar tt set b2='FV0L1XNPL8PKXJJ7F' where id=5; -update noar ti set b2='FV0L1XNPL8PKXJJ7F' where id=5; -update noar tt set v0='7MNF3R3DB2I051ETSS1K57' where id=6; -update noar ti set v0='7MNF3R3DB2I051ETSS1K57' where id=6; -update noar tt set b0='PHTK3TVC5DV1KRTKY4AMVY793' where id=6; -update noar ti set b0='PHTK3TVC5DV1KRTKY4AMVY793' where id=6; -update noar tt set v0='Z7QR3SPPNVA7ZWWNCMFYKOC' where id=6; -update noar ti set v0='Z7QR3SPPNVA7ZWWNCMFYKOC' where id=6; -update noar tt set b1='4P8ESDAC4UL' where id=6; -update noar ti set b1='4P8ESDAC4UL' where id=6; -update noar tt set v0='AYHVDJ9Z69E68F8G1I82BZQF' where id=6; -update noar ti set v0='AYHVDJ9Z69E68F8G1I82BZQF' where id=6; -update noar tt set b2='B7G7E9ZZJEO2LK66A' where id=6; -update noar ti set b2='B7G7E9ZZJEO2LK66A' where id=6; -update noar tt set v0='SHS2CK4' where id=7; -update noar ti set v0='SHS2CK4' where id=7; -update noar tt set b0='9FMVEOKOHMDLHXPP' where id=7; -update noar ti set b0='9FMVEOKOHMDLHXPP' where id=7; -update noar tt set v0='EWEL' where id=7; -update noar ti set v0='EWEL' where id=7; -update noar tt set b1='53NGDLL6TPJ' where id=7; -update noar ti set b1='53NGDLL6TPJ' where id=7; -update noar tt set v0='BCJP0' where id=7; -update noar ti set v0='BCJP0' where id=7; -update noar tt set b2='GMEY' where id=7; -update noar ti set b2='GMEY' where id=7; -update noar tt set v0='6DMI660WV9OQ0H7YO7YNRFP8UMOJA8NJ' where id=8; -update noar ti set v0='6DMI660WV9OQ0H7YO7YNRFP8UMOJA8NJ' where id=8; -update noar tt set b0='YZPW8BPV4K25EII9QH72P1' where id=8; -update noar ti set b0='YZPW8BPV4K25EII9QH72P1' where id=8; -update noar tt set v0='JGE0' where id=8; -update noar ti set v0='JGE0' where id=8; -update noar tt set b1='5D5EM68LJM8NOT0APW1VW56MPT' where id=8; -update noar ti set b1='5D5EM68LJM8NOT0APW1VW56MPT' where id=8; -update noar tt set v0='R2I5CBP4OPLTOO9LI3O' where id=8; -update noar ti set v0='R2I5CBP4OPLTOO9LI3O' where id=8; -update noar tt set b2='9RL6EL0WFKYGLGQR26' where id=8; -update noar ti set b2='9RL6EL0WFKYGLGQR26' where id=8; -update noar tt set v0='GBNPRCQ2ZGKE7KWD25D087JLSK1SEG3' where id=9; -update noar ti set v0='GBNPRCQ2ZGKE7KWD25D087JLSK1SEG3' where id=9; -update noar tt set b0='02VBYZ4TEGFVJ6953O7500B5UI13NZ' where id=9; -update noar ti set b0='02VBYZ4TEGFVJ6953O7500B5UI13NZ' where id=9; -update noar tt set v0='ACZS0HW6KVOPED80B' where id=9; -update noar ti set v0='ACZS0HW6KVOPED80B' where id=9; -update noar tt set b1='65L4NEL' where id=9; -update noar ti set b1='65L4NEL' where id=9; -update noar tt set v0='RR93HUL3GKJK4H59F' where id=9; -update noar ti set v0='RR93HUL3GKJK4H59F' where id=9; -update noar tt set b2='KEXJK79LG6Z7SQVON9OGBIFHDH882' where id=9; -update noar ti set b2='KEXJK79LG6Z7SQVON9OGBIFHDH882' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 tinyblob not null, -b1 mediumblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='KB7NNFEPFGD30AN5' where id=1; -update noar ti set v0='KB7NNFEPFGD30AN5' where id=1; -update noar tt set b0='HM33PSO674GLJB2NSXDY3VYEIRA7C1' where id=1; -update noar ti set b0='HM33PSO674GLJB2NSXDY3VYEIRA7C1' where id=1; -update noar tt set v0='0G1GH0BHIFS2JC62VY6XXPETSNYQI89' where id=1; -update noar ti set v0='0G1GH0BHIFS2JC62VY6XXPETSNYQI89' where id=1; -update noar tt set b1='QTQK1OM2RRCECOB9PJ2KZ' where id=1; -update noar ti set b1='QTQK1OM2RRCECOB9PJ2KZ' where id=1; -update noar tt set v0='0WZ8SVUCDJQFV7E5X6JAQEYFZN5XE' where id=1; -update noar ti set v0='0WZ8SVUCDJQFV7E5X6JAQEYFZN5XE' where id=1; -update noar tt set b2='BPDGHY' where id=1; -update noar ti set b2='BPDGHY' where id=1; -update noar tt set v0='FQUCKXGA' where id=2; -update noar ti set v0='FQUCKXGA' where id=2; -update noar tt set b0='4DWH' where id=2; -update noar ti set b0='4DWH' where id=2; -update noar tt set v0='ZZGNZV' where id=2; -update noar ti set v0='ZZGNZV' where id=2; -update noar tt set b1='Y9C3MRKYGBB9WLADG9' where id=2; -update noar ti set b1='Y9C3MRKYGBB9WLADG9' where id=2; -update noar tt set v0='AWCYQGFU2L92560YWRYH42Z' where id=2; -update noar ti set v0='AWCYQGFU2L92560YWRYH42Z' where id=2; -update noar tt set b2='N4S' where id=2; -update noar ti set b2='N4S' where id=2; -update noar tt set v0='I0DW85196WMNH03Q33PF2L6VQGKV3' where id=3; -update noar ti set v0='I0DW85196WMNH03Q33PF2L6VQGKV3' where id=3; -update noar tt set b0='LNPO' where id=3; -update noar ti set b0='LNPO' where id=3; -update noar tt set v0='QB5OKN4BP8E9' where id=3; -update noar ti set v0='QB5OKN4BP8E9' where id=3; -update noar tt set b1='AN7N10DQ31LVRQF9E5ZMN5TYHRU162W' where id=3; -update noar ti set b1='AN7N10DQ31LVRQF9E5ZMN5TYHRU162W' where id=3; -update noar tt set v0='HOL454K4D4PN' where id=3; -update noar ti set v0='HOL454K4D4PN' where id=3; -update noar tt set b2='8EKNE77L5LIZQ' where id=3; -update noar ti set b2='8EKNE77L5LIZQ' where id=3; -update noar tt set v0='E232C91K3JZSREE1U' where id=4; -update noar ti set v0='E232C91K3JZSREE1U' where id=4; -update noar tt set b0='LHRPTQVPOVMJV3' where id=4; -update noar ti set b0='LHRPTQVPOVMJV3' where id=4; -update noar tt set v0='S1GT6D3Z2IERK1TU88K2CUG30D6A4' where id=4; -update noar ti set v0='S1GT6D3Z2IERK1TU88K2CUG30D6A4' where id=4; -update noar tt set b1='JZ49KQ9FPJWOA45Y' where id=4; -update noar ti set b1='JZ49KQ9FPJWOA45Y' where id=4; -update noar tt set v0='ADD4RRT' where id=4; -update noar ti set v0='ADD4RRT' where id=4; -update noar tt set b2='KJC1YB8A' where id=4; -update noar ti set b2='KJC1YB8A' where id=4; -update noar tt set v0='7BPQZJG8VNYA4LH' where id=5; -update noar ti set v0='7BPQZJG8VNYA4LH' where id=5; -update noar tt set b0='29AN65ZZ6C2TO05YUGM8NREB3YT7I' where id=5; -update noar ti set b0='29AN65ZZ6C2TO05YUGM8NREB3YT7I' where id=5; -update noar tt set v0='K26EJK6SD8Z38E0C' where id=5; -update noar ti set v0='K26EJK6SD8Z38E0C' where id=5; -update noar tt set b1='XRT0QPQK4QJMYQF4MKG58P' where id=5; -update noar ti set b1='XRT0QPQK4QJMYQF4MKG58P' where id=5; -update noar tt set v0='AIZQ7FSGEWH7OPWSFKG2D' where id=5; -update noar ti set v0='AIZQ7FSGEWH7OPWSFKG2D' where id=5; -update noar tt set b2='JKZCGQL6P3IMWUHOY8Z2HARF' where id=5; -update noar ti set b2='JKZCGQL6P3IMWUHOY8Z2HARF' where id=5; -update noar tt set v0='CQ' where id=6; -update noar ti set v0='CQ' where id=6; -update noar tt set b0='58HUYQY8B2MABOG4' where id=6; -update noar ti set b0='58HUYQY8B2MABOG4' where id=6; -update noar tt set v0='PS0HAVDN8RH' where id=6; -update noar ti set v0='PS0HAVDN8RH' where id=6; -update noar tt set b1='N3CP3PP1S8DQWJCZW4EUWJD68Y' where id=6; -update noar ti set b1='N3CP3PP1S8DQWJCZW4EUWJD68Y' where id=6; -update noar tt set v0='02WB2K89S0JD4CFTKMKV' where id=6; -update noar ti set v0='02WB2K89S0JD4CFTKMKV' where id=6; -update noar tt set b2='CHFMR6F387X5LZLH2RMKXNTY0N0XIH' where id=6; -update noar ti set b2='CHFMR6F387X5LZLH2RMKXNTY0N0XIH' where id=6; -update noar tt set v0='HVNT8ORVFHSWZ382K1D7Q8WWIHSVUI' where id=7; -update noar ti set v0='HVNT8ORVFHSWZ382K1D7Q8WWIHSVUI' where id=7; -update noar tt set b0='4820B5WHWAKY' where id=7; -update noar ti set b0='4820B5WHWAKY' where id=7; -update noar tt set v0='QJBZZWA8054FOQENMYA7EM05U' where id=7; -update noar ti set v0='QJBZZWA8054FOQENMYA7EM05U' where id=7; -update noar tt set b1='DBU55XYF' where id=7; -update noar ti set b1='DBU55XYF' where id=7; -update noar tt set v0='FKS68V' where id=7; -update noar ti set v0='FKS68V' where id=7; -update noar tt set b2='HR7ZOPG2AGXHD6EGWGJW8PZT5FZ3' where id=7; -update noar ti set b2='HR7ZOPG2AGXHD6EGWGJW8PZT5FZ3' where id=7; -update noar tt set v0='X8RD' where id=8; -update noar ti set v0='X8RD' where id=8; -update noar tt set b0='ESSZY48XWLJXWBO9914EI0EM7JN' where id=8; -update noar ti set b0='ESSZY48XWLJXWBO9914EI0EM7JN' where id=8; -update noar tt set v0='5KTRQOQER14ZGDSVUFR4J6K4ZZASRO32' where id=8; -update noar ti set v0='5KTRQOQER14ZGDSVUFR4J6K4ZZASRO32' where id=8; -update noar tt set b1='LVC13F6' where id=8; -update noar ti set b1='LVC13F6' where id=8; -update noar tt set v0='PAVVSO76NPBUAZE4QXEF4' where id=8; -update noar ti set v0='PAVVSO76NPBUAZE4QXEF4' where id=8; -update noar tt set b2='QB2RXEPZ7UWINA677EIS3E02B0W3H19A' where id=8; -update noar ti set b2='QB2RXEPZ7UWINA677EIS3E02B0W3H19A' where id=8; -update noar tt set v0='VVVCTAITDEJHR3EQ6Z0M' where id=9; -update noar ti set v0='VVVCTAITDEJHR3EQ6Z0M' where id=9; -update noar tt set b0='7Y2Y21FL1MOZD7OAV580P5I' where id=9; -update noar ti set b0='7Y2Y21FL1MOZD7OAV580P5I' where id=9; -update noar tt set v0='PC7YS2BJ8I8ETJ7K8D647RGVUOAA4T' where id=9; -update noar ti set v0='PC7YS2BJ8I8ETJ7K8D647RGVUOAA4T' where id=9; -update noar tt set b1='6X5SUSZ7J4LIO9TJ31C629ZBZQ5LT' where id=9; -update noar ti set b1='6X5SUSZ7J4LIO9TJ31C629ZBZQ5LT' where id=9; -update noar tt set v0='6OSYYISFEW37TE' where id=9; -update noar ti set v0='6OSYYISFEW37TE' where id=9; -update noar tt set b2='AU4V744OWFIATF00E7WFHT' where id=9; -update noar ti set b2='AU4V744OWFIATF00E7WFHT' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 tinyblob not null, -b1 mediumblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='5RAQUY' where id=1; -update noar ti set v0='5RAQUY' where id=1; -update noar tt set b0='PDYSWCEONZER' where id=1; -update noar ti set b0='PDYSWCEONZER' where id=1; -update noar tt set v0='RT1W2I6N6L7FE5FN' where id=1; -update noar ti set v0='RT1W2I6N6L7FE5FN' where id=1; -update noar tt set b1='ZE' where id=1; -update noar ti set b1='ZE' where id=1; -update noar tt set v0='LI4EQR4LRI26X5TG06YL9DQ' where id=1; -update noar ti set v0='LI4EQR4LRI26X5TG06YL9DQ' where id=1; -update noar tt set b2='WTBVKL9M8J6LA' where id=1; -update noar ti set b2='WTBVKL9M8J6LA' where id=1; -update noar tt set v0='J13WWK7MCA' where id=2; -update noar ti set v0='J13WWK7MCA' where id=2; -update noar tt set b0='S' where id=2; -update noar ti set b0='S' where id=2; -update noar tt set v0='IUZCTB13WJCPZIL6OK7YRV7QF0XRF090' where id=2; -update noar ti set v0='IUZCTB13WJCPZIL6OK7YRV7QF0XRF090' where id=2; -update noar tt set b1='2UQ2U5BHGQUO0TG5' where id=2; -update noar ti set b1='2UQ2U5BHGQUO0TG5' where id=2; -update noar tt set v0='LI8F3G0SJODO3Y' where id=2; -update noar ti set v0='LI8F3G0SJODO3Y' where id=2; -update noar tt set b2='QNG3Q9AXRNH3IN1T4V' where id=2; -update noar ti set b2='QNG3Q9AXRNH3IN1T4V' where id=2; -update noar tt set v0='7A7VMT3260TBMEEOJ1GKN' where id=3; -update noar ti set v0='7A7VMT3260TBMEEOJ1GKN' where id=3; -update noar tt set b0='Y7' where id=3; -update noar ti set b0='Y7' where id=3; -update noar tt set v0='0LHVCF9EVYL5' where id=3; -update noar ti set v0='0LHVCF9EVYL5' where id=3; -update noar tt set b1='LR4NJ0' where id=3; -update noar ti set b1='LR4NJ0' where id=3; -update noar tt set v0='N784Z87F5EZ8XRQ' where id=3; -update noar ti set v0='N784Z87F5EZ8XRQ' where id=3; -update noar tt set b2='XUQU9JZ789P' where id=3; -update noar ti set b2='XUQU9JZ789P' where id=3; -update noar tt set v0='T5097HTJOUECSV4MA11LNILA47S4' where id=4; -update noar ti set v0='T5097HTJOUECSV4MA11LNILA47S4' where id=4; -update noar tt set b0='BOJIMD1NI78B' where id=4; -update noar ti set b0='BOJIMD1NI78B' where id=4; -update noar tt set v0='5LCKAANXHBAF18B1K' where id=4; -update noar ti set v0='5LCKAANXHBAF18B1K' where id=4; -update noar tt set b1='Q94N8AJHT9' where id=4; -update noar ti set b1='Q94N8AJHT9' where id=4; -update noar tt set v0='DXLTI183PJLSM1DNTPDOV' where id=4; -update noar ti set v0='DXLTI183PJLSM1DNTPDOV' where id=4; -update noar tt set b2='1I1Q7ANREC' where id=4; -update noar ti set b2='1I1Q7ANREC' where id=4; -update noar tt set v0='6KSXNGN5EOREL9' where id=5; -update noar ti set v0='6KSXNGN5EOREL9' where id=5; -update noar tt set b0='6XWD45L6SE0KOQSHQ25ZLSG5Q1' where id=5; -update noar ti set b0='6XWD45L6SE0KOQSHQ25ZLSG5Q1' where id=5; -update noar tt set v0='8Y321P6' where id=5; -update noar ti set v0='8Y321P6' where id=5; -update noar tt set b1='05P' where id=5; -update noar ti set b1='05P' where id=5; -update noar tt set v0='F' where id=5; -update noar ti set v0='F' where id=5; -update noar tt set b2='9LH195JEGW9TY0K9HFO3' where id=5; -update noar ti set b2='9LH195JEGW9TY0K9HFO3' where id=5; -update noar tt set v0='WHQ9P6JPQ6AEUOS661OW187HA757TYNY' where id=6; -update noar ti set v0='WHQ9P6JPQ6AEUOS661OW187HA757TYNY' where id=6; -update noar tt set b0='5YIFUMY9FN7' where id=6; -update noar ti set b0='5YIFUMY9FN7' where id=6; -update noar tt set v0='6F4Z0HU8ZJLEP5MNX0OX' where id=6; -update noar ti set v0='6F4Z0HU8ZJLEP5MNX0OX' where id=6; -update noar tt set b1='17YBZ9N' where id=6; -update noar ti set b1='17YBZ9N' where id=6; -update noar tt set v0='SXBC549EQOCE' where id=6; -update noar ti set v0='SXBC549EQOCE' where id=6; -update noar tt set b2='A6UGNGV4RLTPT6KV4D8W' where id=6; -update noar ti set b2='A6UGNGV4RLTPT6KV4D8W' where id=6; -update noar tt set v0='VQ7SSCUM1A9NRCT9Q' where id=7; -update noar ti set v0='VQ7SSCUM1A9NRCT9Q' where id=7; -update noar tt set b0='XZVPF9XQO6RZPHXAIWYCANXB2YMD' where id=7; -update noar ti set b0='XZVPF9XQO6RZPHXAIWYCANXB2YMD' where id=7; -update noar tt set v0='TPXWN6G2JUKH7K1AFIN3JXVL' where id=7; -update noar ti set v0='TPXWN6G2JUKH7K1AFIN3JXVL' where id=7; -update noar tt set b1='ITXCSQGBCPB4H8964PVM6' where id=7; -update noar ti set b1='ITXCSQGBCPB4H8964PVM6' where id=7; -update noar tt set v0='8N82MIQXQTQRVQ9EZK2FF81OYEIH' where id=7; -update noar ti set v0='8N82MIQXQTQRVQ9EZK2FF81OYEIH' where id=7; -update noar tt set b2='9TU66KR2O411WN' where id=7; -update noar ti set b2='9TU66KR2O411WN' where id=7; -update noar tt set v0='8PZEVNMGRINNDE' where id=8; -update noar ti set v0='8PZEVNMGRINNDE' where id=8; -update noar tt set b0='RP' where id=8; -update noar ti set b0='RP' where id=8; -update noar tt set v0='CPE0M5UJWR0LJNXC' where id=8; -update noar ti set v0='CPE0M5UJWR0LJNXC' where id=8; -update noar tt set b1='4SINDZR9PVFA8EV35HBG7N' where id=8; -update noar ti set b1='4SINDZR9PVFA8EV35HBG7N' where id=8; -update noar tt set v0='0IUD1QG' where id=8; -update noar ti set v0='0IUD1QG' where id=8; -update noar tt set b2='8XB67B5M' where id=8; -update noar ti set b2='8XB67B5M' where id=8; -update noar tt set v0='VALP9O' where id=9; -update noar ti set v0='VALP9O' where id=9; -update noar tt set b0='F0' where id=9; -update noar ti set b0='F0' where id=9; -update noar tt set v0='IJ9EA919X' where id=9; -update noar ti set v0='IJ9EA919X' where id=9; -update noar tt set b1='WB9XJK9L1WG2S3D4CCKADWWSQ0' where id=9; -update noar ti set b1='WB9XJK9L1WG2S3D4CCKADWWSQ0' where id=9; -update noar tt set v0='PB0T1ONB3VMV49VP704KWX0EXO' where id=9; -update noar ti set v0='PB0T1ONB3VMV49VP704KWX0EXO' where id=9; -update noar tt set b2='OT' where id=9; -update noar ti set b2='OT' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 tinyblob null, -b1 mediumblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='LFO6J9LUCSDMJ9KO6DE6QQA' where id=1; -update noar ti set v0='LFO6J9LUCSDMJ9KO6DE6QQA' where id=1; -update noar tt set b0='HP1UH3I8E921KJQHJPBIRJE1Q0' where id=1; -update noar ti set b0='HP1UH3I8E921KJQHJPBIRJE1Q0' where id=1; -update noar tt set v0='RBGFPQA' where id=1; -update noar ti set v0='RBGFPQA' where id=1; -update noar tt set b1='MW5TZKCIXC8LEH1' where id=1; -update noar ti set b1='MW5TZKCIXC8LEH1' where id=1; -update noar tt set v0='5ZUA5ENER506ZMBIIA66DP91' where id=1; -update noar ti set v0='5ZUA5ENER506ZMBIIA66DP91' where id=1; -update noar tt set b2='A5PK3C44I2E' where id=1; -update noar ti set b2='A5PK3C44I2E' where id=1; -update noar tt set v0='VZKPMUB5ERASO1OZUMHH05DH' where id=2; -update noar ti set v0='VZKPMUB5ERASO1OZUMHH05DH' where id=2; -update noar tt set b0='D0NF45PFAURFIO6QVIAR1V9Y9WJUW' where id=2; -update noar ti set b0='D0NF45PFAURFIO6QVIAR1V9Y9WJUW' where id=2; -update noar tt set v0='W55OHMMA7YGNXDM9Z3YHIX7U4KXU3' where id=2; -update noar ti set v0='W55OHMMA7YGNXDM9Z3YHIX7U4KXU3' where id=2; -update noar tt set b1='D2BV6AT541R3QSPJQLNBQQ7BE31TCTZU' where id=2; -update noar ti set b1='D2BV6AT541R3QSPJQLNBQQ7BE31TCTZU' where id=2; -update noar tt set v0='9SITWNATENASOMPBGTA6' where id=2; -update noar ti set v0='9SITWNATENASOMPBGTA6' where id=2; -update noar tt set b2='U5KN6JV' where id=2; -update noar ti set b2='U5KN6JV' where id=2; -update noar tt set v0='4AZC0LR5YTQDH0780SWTF1G' where id=3; -update noar ti set v0='4AZC0LR5YTQDH0780SWTF1G' where id=3; -update noar tt set b0='J8VHEVVO' where id=3; -update noar ti set b0='J8VHEVVO' where id=3; -update noar tt set v0='7IM' where id=3; -update noar ti set v0='7IM' where id=3; -update noar tt set b1='U816FOYS' where id=3; -update noar ti set b1='U816FOYS' where id=3; -update noar tt set v0='0PTO9VCHOC7' where id=3; -update noar ti set v0='0PTO9VCHOC7' where id=3; -update noar tt set b2='AAQ' where id=3; -update noar ti set b2='AAQ' where id=3; -update noar tt set v0='1VTVFGJ8YDKFSKL41SW9' where id=4; -update noar ti set v0='1VTVFGJ8YDKFSKL41SW9' where id=4; -update noar tt set b0='9WHQZPZVMY5852X' where id=4; -update noar ti set b0='9WHQZPZVMY5852X' where id=4; -update noar tt set v0='3R936A7QG76F29' where id=4; -update noar ti set v0='3R936A7QG76F29' where id=4; -update noar tt set b1='GBOUZUXI00115FAVGV37ZL2RIJIK6I' where id=4; -update noar ti set b1='GBOUZUXI00115FAVGV37ZL2RIJIK6I' where id=4; -update noar tt set v0='LHVZKVLE0' where id=4; -update noar ti set v0='LHVZKVLE0' where id=4; -update noar tt set b2='PVD3A7HFZFZ74IEM3ZV0WL7O7T' where id=4; -update noar ti set b2='PVD3A7HFZFZ74IEM3ZV0WL7O7T' where id=4; -update noar tt set v0='UOMIE5BI4ASD' where id=5; -update noar ti set v0='UOMIE5BI4ASD' where id=5; -update noar tt set b0='GR' where id=5; -update noar ti set b0='GR' where id=5; -update noar tt set v0='6RDPF0C8QIJK7GLJG0WNW7V4LR3UMNK' where id=5; -update noar ti set v0='6RDPF0C8QIJK7GLJG0WNW7V4LR3UMNK' where id=5; -update noar tt set b1='AILNU53' where id=5; -update noar ti set b1='AILNU53' where id=5; -update noar tt set v0='OCUVH5L74DYX7FJKPHE2BVL' where id=5; -update noar ti set v0='OCUVH5L74DYX7FJKPHE2BVL' where id=5; -update noar tt set b2='3S8OJDXQIZX2D6ISY4Z352GCOR2SN' where id=5; -update noar ti set b2='3S8OJDXQIZX2D6ISY4Z352GCOR2SN' where id=5; -update noar tt set v0='1QQGMJYOOU6S067CKX' where id=6; -update noar ti set v0='1QQGMJYOOU6S067CKX' where id=6; -update noar tt set b0='L6KX28HGI3QCN8D8K0COPCL3Y1OO5V7' where id=6; -update noar ti set b0='L6KX28HGI3QCN8D8K0COPCL3Y1OO5V7' where id=6; -update noar tt set v0='OXNGWK0D' where id=6; -update noar ti set v0='OXNGWK0D' where id=6; -update noar tt set b1='L2O8MRM9IQ' where id=6; -update noar ti set b1='L2O8MRM9IQ' where id=6; -update noar tt set v0='KUB6QUNG8HF7' where id=6; -update noar ti set v0='KUB6QUNG8HF7' where id=6; -update noar tt set b2='NH7T9Z2YW9V' where id=6; -update noar ti set b2='NH7T9Z2YW9V' where id=6; -update noar tt set v0='8EUWNWJJBYQ' where id=7; -update noar ti set v0='8EUWNWJJBYQ' where id=7; -update noar tt set b0='EI27UT8EEF4DPTD3PJS9YQ1TQVL' where id=7; -update noar ti set b0='EI27UT8EEF4DPTD3PJS9YQ1TQVL' where id=7; -update noar tt set v0='8T5M2VQL8DRNKE9NPV3' where id=7; -update noar ti set v0='8T5M2VQL8DRNKE9NPV3' where id=7; -update noar tt set b1='BIVGNZ270YUUGWZF' where id=7; -update noar ti set b1='BIVGNZ270YUUGWZF' where id=7; -update noar tt set v0='RBDOR8F27YUR6B' where id=7; -update noar ti set v0='RBDOR8F27YUR6B' where id=7; -update noar tt set b2='T8G0UQV2FFA1J2DMH5TFTJGAG' where id=7; -update noar ti set b2='T8G0UQV2FFA1J2DMH5TFTJGAG' where id=7; -update noar tt set v0='W0Q68WXLP' where id=8; -update noar ti set v0='W0Q68WXLP' where id=8; -update noar tt set b0='PYC' where id=8; -update noar ti set b0='PYC' where id=8; -update noar tt set v0='N9I5SB3KJD6Z87X7GC40UMUEOLMVI' where id=8; -update noar ti set v0='N9I5SB3KJD6Z87X7GC40UMUEOLMVI' where id=8; -update noar tt set b1='WLJAO1WQE6' where id=8; -update noar ti set b1='WLJAO1WQE6' where id=8; -update noar tt set v0='F89YEUYOT3RY413X6Z9RBG0UL05H5Y0' where id=8; -update noar ti set v0='F89YEUYOT3RY413X6Z9RBG0UL05H5Y0' where id=8; -update noar tt set b2='ABXDN951SMBYK1HJIHE2AU5EXB2XCVP2' where id=8; -update noar ti set b2='ABXDN951SMBYK1HJIHE2AU5EXB2XCVP2' where id=8; -update noar tt set v0='232' where id=9; -update noar ti set v0='232' where id=9; -update noar tt set b0='9YX5O1CY26QL63OCD288PJFT6U1' where id=9; -update noar ti set b0='9YX5O1CY26QL63OCD288PJFT6U1' where id=9; -update noar tt set v0='MC68RVH1J96EZK89NAKZBMBJ50WSWY' where id=9; -update noar ti set v0='MC68RVH1J96EZK89NAKZBMBJ50WSWY' where id=9; -update noar tt set b1='28OSL1M5NDHP48VWBF1FYYCR1ZN9O' where id=9; -update noar ti set b1='28OSL1M5NDHP48VWBF1FYYCR1ZN9O' where id=9; -update noar tt set v0='5SYHN8JCZBH5ARMLEI' where id=9; -update noar ti set v0='5SYHN8JCZBH5ARMLEI' where id=9; -update noar tt set b2='CDVZL1LR3UZEHCRR' where id=9; -update noar ti set b2='CDVZL1LR3UZEHCRR' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 tinyblob null, -b1 mediumblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='0BWP0' where id=1; -update noar ti set v0='0BWP0' where id=1; -update noar tt set b0='SGA' where id=1; -update noar ti set b0='SGA' where id=1; -update noar tt set v0='A8VSWYDJLGTX19M35PMCOSMV1ENIO0' where id=1; -update noar ti set v0='A8VSWYDJLGTX19M35PMCOSMV1ENIO0' where id=1; -update noar tt set b1='H58D9MOWNNZD5QDT' where id=1; -update noar ti set b1='H58D9MOWNNZD5QDT' where id=1; -update noar tt set v0='977V76KUAY4ZP52OOEMR0Q' where id=1; -update noar ti set v0='977V76KUAY4ZP52OOEMR0Q' where id=1; -update noar tt set b2='U5UT8HSNUKLTNG' where id=1; -update noar ti set b2='U5UT8HSNUKLTNG' where id=1; -update noar tt set v0='JR3OTPUDTD6JDW5M9KA22J' where id=2; -update noar ti set v0='JR3OTPUDTD6JDW5M9KA22J' where id=2; -update noar tt set b0='IPS6IJ5UJVQF' where id=2; -update noar ti set b0='IPS6IJ5UJVQF' where id=2; -update noar tt set v0='JYTX' where id=2; -update noar ti set v0='JYTX' where id=2; -update noar tt set b1='D0' where id=2; -update noar ti set b1='D0' where id=2; -update noar tt set v0='BAHUFJ8LWHPITWIHUV7WNL08O50FBA6J' where id=2; -update noar ti set v0='BAHUFJ8LWHPITWIHUV7WNL08O50FBA6J' where id=2; -update noar tt set b2='OXS9M6IHACX0T3E2Y6VG3N5T5UEA7' where id=2; -update noar ti set b2='OXS9M6IHACX0T3E2Y6VG3N5T5UEA7' where id=2; -update noar tt set v0='TB6JGCA1JSUK7GF4RUBBXG' where id=3; -update noar ti set v0='TB6JGCA1JSUK7GF4RUBBXG' where id=3; -update noar tt set b0='PG4AL8PCFDW0S84N' where id=3; -update noar ti set b0='PG4AL8PCFDW0S84N' where id=3; -update noar tt set v0='94TVPUOBVA266HK87ZGSP1M8W1P5GA' where id=3; -update noar ti set v0='94TVPUOBVA266HK87ZGSP1M8W1P5GA' where id=3; -update noar tt set b1='IQWYNVVP' where id=3; -update noar ti set b1='IQWYNVVP' where id=3; -update noar tt set v0='7P4MG6PZK6EE6TMMEVAJEVGCLPOKHSN' where id=3; -update noar ti set v0='7P4MG6PZK6EE6TMMEVAJEVGCLPOKHSN' where id=3; -update noar tt set b2='SRJF0WZPPW4L' where id=3; -update noar ti set b2='SRJF0WZPPW4L' where id=3; -update noar tt set v0='UKMLTWAK0KQJM73W0EO1B' where id=4; -update noar ti set v0='UKMLTWAK0KQJM73W0EO1B' where id=4; -update noar tt set b0='8Q5GOWZVNIT3T' where id=4; -update noar ti set b0='8Q5GOWZVNIT3T' where id=4; -update noar tt set v0='7YE8' where id=4; -update noar ti set v0='7YE8' where id=4; -update noar tt set b1='295AY9U2' where id=4; -update noar ti set b1='295AY9U2' where id=4; -update noar tt set v0='M36S9OMALWBMN' where id=4; -update noar ti set v0='M36S9OMALWBMN' where id=4; -update noar tt set b2='LEA5QF6IZZV8VJ7CBPKIOW8K5' where id=4; -update noar ti set b2='LEA5QF6IZZV8VJ7CBPKIOW8K5' where id=4; -update noar tt set v0='ARHJH1T2YE2EKK0OA69' where id=5; -update noar ti set v0='ARHJH1T2YE2EKK0OA69' where id=5; -update noar tt set b0='9NXOTRT6ZE7ET7N' where id=5; -update noar ti set b0='9NXOTRT6ZE7ET7N' where id=5; -update noar tt set v0='9Y' where id=5; -update noar ti set v0='9Y' where id=5; -update noar tt set b1='U7J9X28TW6C0E8Z62BL455TPX' where id=5; -update noar ti set b1='U7J9X28TW6C0E8Z62BL455TPX' where id=5; -update noar tt set v0='V282' where id=5; -update noar ti set v0='V282' where id=5; -update noar tt set b2='OBRSGLZQSM0UW4J6IK6RY' where id=5; -update noar ti set b2='OBRSGLZQSM0UW4J6IK6RY' where id=5; -update noar tt set v0='P' where id=6; -update noar ti set v0='P' where id=6; -update noar tt set b0='WZSX7DM8MPLD7' where id=6; -update noar ti set b0='WZSX7DM8MPLD7' where id=6; -update noar tt set v0='J1NZ' where id=6; -update noar ti set v0='J1NZ' where id=6; -update noar tt set b1='X' where id=6; -update noar ti set b1='X' where id=6; -update noar tt set v0='PFYED' where id=6; -update noar ti set v0='PFYED' where id=6; -update noar tt set b2='2VBL40UJ8RZXK7K3O8V8K' where id=6; -update noar ti set b2='2VBL40UJ8RZXK7K3O8V8K' where id=6; -update noar tt set v0='BMTT6HKT' where id=7; -update noar ti set v0='BMTT6HKT' where id=7; -update noar tt set b0='Y09GSCNXJ7KVNS' where id=7; -update noar ti set b0='Y09GSCNXJ7KVNS' where id=7; -update noar tt set v0='VRTJL0' where id=7; -update noar ti set v0='VRTJL0' where id=7; -update noar tt set b1='V73BY90FHEWCL7CW' where id=7; -update noar ti set b1='V73BY90FHEWCL7CW' where id=7; -update noar tt set v0='TJX7LSW5X23PUIRLY7UDFVJT2QP' where id=7; -update noar ti set v0='TJX7LSW5X23PUIRLY7UDFVJT2QP' where id=7; -update noar tt set b2='A1L6VGE' where id=7; -update noar ti set b2='A1L6VGE' where id=7; -update noar tt set v0='PORL6H2CVBVDS' where id=8; -update noar ti set v0='PORL6H2CVBVDS' where id=8; -update noar tt set b0='2V6HTENJ' where id=8; -update noar ti set b0='2V6HTENJ' where id=8; -update noar tt set v0='X1ZAQEV0NKO11' where id=8; -update noar ti set v0='X1ZAQEV0NKO11' where id=8; -update noar tt set b1='OO1NEXWRHUGL8IR5E7' where id=8; -update noar ti set b1='OO1NEXWRHUGL8IR5E7' where id=8; -update noar tt set v0='8OTFC9C' where id=8; -update noar ti set v0='8OTFC9C' where id=8; -update noar tt set b2='RAYG7R5179GCEQXWX4M6BF448RY7I' where id=8; -update noar ti set b2='RAYG7R5179GCEQXWX4M6BF448RY7I' where id=8; -update noar tt set v0='EY89HUXM9UKM' where id=9; -update noar ti set v0='EY89HUXM9UKM' where id=9; -update noar tt set b0='R4MD71HZJLPJKYL5' where id=9; -update noar ti set b0='R4MD71HZJLPJKYL5' where id=9; -update noar tt set v0='Y7IPXM05N1' where id=9; -update noar ti set v0='Y7IPXM05N1' where id=9; -update noar tt set b1='GNLY9GZEI7ZKDP05K' where id=9; -update noar ti set b1='GNLY9GZEI7ZKDP05K' where id=9; -update noar tt set v0='63BA8YP1LQQLR8BL2AJ62U' where id=9; -update noar ti set v0='63BA8YP1LQQLR8BL2AJ62U' where id=9; -update noar tt set b2='F93M70Q39H8HR9' where id=9; -update noar ti set b2='F93M70Q39H8HR9' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 tinyblob not null, -b1 mediumblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='DIXB7DVORSS0YJ6M4KO3LYBKQKEYW' where id=1; -update noar ti set v0='DIXB7DVORSS0YJ6M4KO3LYBKQKEYW' where id=1; -update noar tt set b0='RAOXPW2H0XA60DKRFI985' where id=1; -update noar ti set b0='RAOXPW2H0XA60DKRFI985' where id=1; -update noar tt set v0='E9Q0J7M0ZF0IK1AF2N2FZFS8GZ' where id=1; -update noar ti set v0='E9Q0J7M0ZF0IK1AF2N2FZFS8GZ' where id=1; -update noar tt set b1='L1PKSET9ADDWPC3102' where id=1; -update noar ti set b1='L1PKSET9ADDWPC3102' where id=1; -update noar tt set v0='7WUS' where id=1; -update noar ti set v0='7WUS' where id=1; -update noar tt set b2='P6VLAF7TTL29DU2Q2PJTL13GPB' where id=1; -update noar ti set b2='P6VLAF7TTL29DU2Q2PJTL13GPB' where id=1; -update noar tt set v0='ADHAL' where id=2; -update noar ti set v0='ADHAL' where id=2; -update noar tt set b0='HVKTO64PQW87YILTMJTXGTSMAJ' where id=2; -update noar ti set b0='HVKTO64PQW87YILTMJTXGTSMAJ' where id=2; -update noar tt set v0='JO6NO69OOA29' where id=2; -update noar ti set v0='JO6NO69OOA29' where id=2; -update noar tt set b1='RO28C' where id=2; -update noar ti set b1='RO28C' where id=2; -update noar tt set v0='KO0A0MKPDPKM' where id=2; -update noar ti set v0='KO0A0MKPDPKM' where id=2; -update noar tt set b2='RMN6W3' where id=2; -update noar ti set b2='RMN6W3' where id=2; -update noar tt set v0='Q78ASDJS6ON6A3R9NQ00' where id=3; -update noar ti set v0='Q78ASDJS6ON6A3R9NQ00' where id=3; -update noar tt set b0='YDBM7OZL0QNGSJ' where id=3; -update noar ti set b0='YDBM7OZL0QNGSJ' where id=3; -update noar tt set v0='89K9AFEMUAGQBJ9WI47CMF1QFB065W5C' where id=3; -update noar ti set v0='89K9AFEMUAGQBJ9WI47CMF1QFB065W5C' where id=3; -update noar tt set b1='140AK8AJOWX8EBHJXQR0R8BYOAYUT4' where id=3; -update noar ti set b1='140AK8AJOWX8EBHJXQR0R8BYOAYUT4' where id=3; -update noar tt set v0='Y4R3W1CSM8Y' where id=3; -update noar ti set v0='Y4R3W1CSM8Y' where id=3; -update noar tt set b2='K1' where id=3; -update noar ti set b2='K1' where id=3; -update noar tt set v0='8A1I3X8I3Z6QXNA' where id=4; -update noar ti set v0='8A1I3X8I3Z6QXNA' where id=4; -update noar tt set b0='LIB' where id=4; -update noar ti set b0='LIB' where id=4; -update noar tt set v0='N9BTGQYBJXNEOIHM' where id=4; -update noar ti set v0='N9BTGQYBJXNEOIHM' where id=4; -update noar tt set b1='16H4Y5J8' where id=4; -update noar ti set b1='16H4Y5J8' where id=4; -update noar tt set v0='E' where id=4; -update noar ti set v0='E' where id=4; -update noar tt set b2='AERU7CMEE3QOTK' where id=4; -update noar ti set b2='AERU7CMEE3QOTK' where id=4; -update noar tt set v0='TCBQ' where id=5; -update noar ti set v0='TCBQ' where id=5; -update noar tt set b0='5CAWV3T0BMU66ULL6MJ9X4PUWHYFU' where id=5; -update noar ti set b0='5CAWV3T0BMU66ULL6MJ9X4PUWHYFU' where id=5; -update noar tt set v0='88ZQSJ8I' where id=5; -update noar ti set v0='88ZQSJ8I' where id=5; -update noar tt set b1='5AUFKZTTNFBC8TGSN1QIO' where id=5; -update noar ti set b1='5AUFKZTTNFBC8TGSN1QIO' where id=5; -update noar tt set v0='Q1TRAVTHCUZZPY927L6OASZP0UH2WYIF' where id=5; -update noar ti set v0='Q1TRAVTHCUZZPY927L6OASZP0UH2WYIF' where id=5; -update noar tt set b2='41OQMMNQKF72PCUCTQL897RNUC1TQK' where id=5; -update noar ti set b2='41OQMMNQKF72PCUCTQL897RNUC1TQK' where id=5; -update noar tt set v0='RF' where id=6; -update noar ti set v0='RF' where id=6; -update noar tt set b0='3YIE0OGJAQ2L1P9I94YKB9NIT90O3LZ' where id=6; -update noar ti set b0='3YIE0OGJAQ2L1P9I94YKB9NIT90O3LZ' where id=6; -update noar tt set v0='RP4TD8F5X04312BOD8HU07R553WS' where id=6; -update noar ti set v0='RP4TD8F5X04312BOD8HU07R553WS' where id=6; -update noar tt set b1='U' where id=6; -update noar ti set b1='U' where id=6; -update noar tt set v0='A3O9SE4QRROMO3NKKC07S3H' where id=6; -update noar ti set v0='A3O9SE4QRROMO3NKKC07S3H' where id=6; -update noar tt set b2='9NH68AXM8EHXT72N6BSZT6AELME' where id=6; -update noar ti set b2='9NH68AXM8EHXT72N6BSZT6AELME' where id=6; -update noar tt set v0='V' where id=7; -update noar ti set v0='V' where id=7; -update noar tt set b0='447352BQN1SO5O3ZO7UGJ' where id=7; -update noar ti set b0='447352BQN1SO5O3ZO7UGJ' where id=7; -update noar tt set v0='TF4W75LL5OZTWW8BD86BWDGA88' where id=7; -update noar ti set v0='TF4W75LL5OZTWW8BD86BWDGA88' where id=7; -update noar tt set b1='VSQHZD7SKSQSOXJ' where id=7; -update noar ti set b1='VSQHZD7SKSQSOXJ' where id=7; -update noar tt set v0='3F' where id=7; -update noar ti set v0='3F' where id=7; -update noar tt set b2='BDIT3UNK2D15JL1X8OILFX9T9754MX' where id=7; -update noar ti set b2='BDIT3UNK2D15JL1X8OILFX9T9754MX' where id=7; -update noar tt set v0='4IOV74FCTZ3IS71ZXB6EMRE0J1375GPH' where id=8; -update noar ti set v0='4IOV74FCTZ3IS71ZXB6EMRE0J1375GPH' where id=8; -update noar tt set b0='IJCV7JI0U6HY' where id=8; -update noar ti set b0='IJCV7JI0U6HY' where id=8; -update noar tt set v0='DI9UWF52HRT' where id=8; -update noar ti set v0='DI9UWF52HRT' where id=8; -update noar tt set b1='19SHPH1FM7' where id=8; -update noar ti set b1='19SHPH1FM7' where id=8; -update noar tt set v0='8GPCCD8U6SOISS43KG6CL9GHDD0H' where id=8; -update noar ti set v0='8GPCCD8U6SOISS43KG6CL9GHDD0H' where id=8; -update noar tt set b2='RSYLJ' where id=8; -update noar ti set b2='RSYLJ' where id=8; -update noar tt set v0='D1OQ4U29CZKC6GLL6FCVFKXAKEJ6L' where id=9; -update noar ti set v0='D1OQ4U29CZKC6GLL6FCVFKXAKEJ6L' where id=9; -update noar tt set b0='M0W61AUZK7SKBS0Z1FY' where id=9; -update noar ti set b0='M0W61AUZK7SKBS0Z1FY' where id=9; -update noar tt set v0='L' where id=9; -update noar ti set v0='L' where id=9; -update noar tt set b1='7KYOPIBM99BCQ0LIWVDSQFZW449070' where id=9; -update noar ti set b1='7KYOPIBM99BCQ0LIWVDSQFZW449070' where id=9; -update noar tt set v0='JVSK7PKW6XHNF5WAG3IOLCIFNZ' where id=9; -update noar ti set v0='JVSK7PKW6XHNF5WAG3IOLCIFNZ' where id=9; -update noar tt set b2='BVQ6R7TNV60ODTT1FRDA73ET6QVSZ87' where id=9; -update noar ti set b2='BVQ6R7TNV60ODTT1FRDA73ET6QVSZ87' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 tinyblob not null, -b1 mediumblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='7I16QVHZR66AL41ZH4FTZHPZ201AC' where id=1; -update noar ti set v0='7I16QVHZR66AL41ZH4FTZHPZ201AC' where id=1; -update noar tt set b0='KKD' where id=1; -update noar ti set b0='KKD' where id=1; -update noar tt set v0='3XPM6HMVDVFTJMEJEJUAR5HSU1' where id=1; -update noar ti set v0='3XPM6HMVDVFTJMEJEJUAR5HSU1' where id=1; -update noar tt set b1='QTDWBVMXDK5KT' where id=1; -update noar ti set b1='QTDWBVMXDK5KT' where id=1; -update noar tt set v0='KVG9MK7S8C3I1JB0ESDJ7DAI' where id=1; -update noar ti set v0='KVG9MK7S8C3I1JB0ESDJ7DAI' where id=1; -update noar tt set b2='7J1P1MMJMA172' where id=1; -update noar ti set b2='7J1P1MMJMA172' where id=1; -update noar tt set v0='RNR6' where id=2; -update noar ti set v0='RNR6' where id=2; -update noar tt set b0='21JTA51SGQ46OYG25PU' where id=2; -update noar ti set b0='21JTA51SGQ46OYG25PU' where id=2; -update noar tt set v0='XC86ZUWD8FWPA26N8ZVGO2COGP' where id=2; -update noar ti set v0='XC86ZUWD8FWPA26N8ZVGO2COGP' where id=2; -update noar tt set b1='94YTJP5ITMAWX4V2YJ1YJSW44IBI' where id=2; -update noar ti set b1='94YTJP5ITMAWX4V2YJ1YJSW44IBI' where id=2; -update noar tt set v0='6WTGLOXR5UFCZEUQ2T3GVR' where id=2; -update noar ti set v0='6WTGLOXR5UFCZEUQ2T3GVR' where id=2; -update noar tt set b2='SK8T3XW9OUPIQDJ' where id=2; -update noar ti set b2='SK8T3XW9OUPIQDJ' where id=2; -update noar tt set v0='BMYNVI' where id=3; -update noar ti set v0='BMYNVI' where id=3; -update noar tt set b0='K11Z908MZVTSK5T3QGCFN5155A' where id=3; -update noar ti set b0='K11Z908MZVTSK5T3QGCFN5155A' where id=3; -update noar tt set v0='UNIUDPNGVDDXMWG' where id=3; -update noar ti set v0='UNIUDPNGVDDXMWG' where id=3; -update noar tt set b1='POVPBA1G1J4IQMX8J2S0G5M8O' where id=3; -update noar ti set b1='POVPBA1G1J4IQMX8J2S0G5M8O' where id=3; -update noar tt set v0='GDHVCKE2LV1N796' where id=3; -update noar ti set v0='GDHVCKE2LV1N796' where id=3; -update noar tt set b2='5YXYVVVP1IW2OG' where id=3; -update noar ti set b2='5YXYVVVP1IW2OG' where id=3; -update noar tt set v0='1DM7APHTV4Y8U4AUYDPU5SE7D9929H' where id=4; -update noar ti set v0='1DM7APHTV4Y8U4AUYDPU5SE7D9929H' where id=4; -update noar tt set b0='BCJSYPO4XS6D4BDP6NHA0QEIUJK6LD' where id=4; -update noar ti set b0='BCJSYPO4XS6D4BDP6NHA0QEIUJK6LD' where id=4; -update noar tt set v0='5WCB04GX2QW5VZAWMN4QB9EBOAK6M9' where id=4; -update noar ti set v0='5WCB04GX2QW5VZAWMN4QB9EBOAK6M9' where id=4; -update noar tt set b1='H' where id=4; -update noar ti set b1='H' where id=4; -update noar tt set v0='DT7945J17KV' where id=4; -update noar ti set v0='DT7945J17KV' where id=4; -update noar tt set b2='OB8KMNU' where id=4; -update noar ti set b2='OB8KMNU' where id=4; -update noar tt set v0='7SPXSUCMJ0JJ1ACSMHTSMXNZZ3VLO34' where id=5; -update noar ti set v0='7SPXSUCMJ0JJ1ACSMHTSMXNZZ3VLO34' where id=5; -update noar tt set b0='CXKK13O8DT7W75JSPRP2G' where id=5; -update noar ti set b0='CXKK13O8DT7W75JSPRP2G' where id=5; -update noar tt set v0='XQFOTKSCBERE1YV9' where id=5; -update noar ti set v0='XQFOTKSCBERE1YV9' where id=5; -update noar tt set b1='BU5UMGDCO6N8T5CWBHI76OAC0NUL2X' where id=5; -update noar ti set b1='BU5UMGDCO6N8T5CWBHI76OAC0NUL2X' where id=5; -update noar tt set v0='A' where id=5; -update noar ti set v0='A' where id=5; -update noar tt set b2='L6UCV41J66P4V5' where id=5; -update noar ti set b2='L6UCV41J66P4V5' where id=5; -update noar tt set v0='VRXJDL118RS' where id=6; -update noar ti set v0='VRXJDL118RS' where id=6; -update noar tt set b0='JXU89PSCQPDOWTJZ54DPTV0GH8RT' where id=6; -update noar ti set b0='JXU89PSCQPDOWTJZ54DPTV0GH8RT' where id=6; -update noar tt set v0='RVX0X9XSRBD05K2OUK' where id=6; -update noar ti set v0='RVX0X9XSRBD05K2OUK' where id=6; -update noar tt set b1='4T8GB3K' where id=6; -update noar ti set b1='4T8GB3K' where id=6; -update noar tt set v0='4GP5MACVYNWWMRC' where id=6; -update noar ti set v0='4GP5MACVYNWWMRC' where id=6; -update noar tt set b2='EE9J56' where id=6; -update noar ti set b2='EE9J56' where id=6; -update noar tt set v0='UA1YFZPY8YG3D4YNV' where id=7; -update noar ti set v0='UA1YFZPY8YG3D4YNV' where id=7; -update noar tt set b0='OEH7V6QFRRYP' where id=7; -update noar ti set b0='OEH7V6QFRRYP' where id=7; -update noar tt set v0='G482J8GK4GOQF' where id=7; -update noar ti set v0='G482J8GK4GOQF' where id=7; -update noar tt set b1='1QAOG3C6H4FPXM1FV0W38223HM205D0M' where id=7; -update noar ti set b1='1QAOG3C6H4FPXM1FV0W38223HM205D0M' where id=7; -update noar tt set v0='D' where id=7; -update noar ti set v0='D' where id=7; -update noar tt set b2='J2PJKPD3IJDWJ2FVG790O1511DZ0' where id=7; -update noar ti set b2='J2PJKPD3IJDWJ2FVG790O1511DZ0' where id=7; -update noar tt set v0='IWF4TMZ3U' where id=8; -update noar ti set v0='IWF4TMZ3U' where id=8; -update noar tt set b0='6SMHHEEM5Y' where id=8; -update noar ti set b0='6SMHHEEM5Y' where id=8; -update noar tt set v0='HAQIPOOEOB8A2Y5GSQUA7XEZF5' where id=8; -update noar ti set v0='HAQIPOOEOB8A2Y5GSQUA7XEZF5' where id=8; -update noar tt set b1='H650P' where id=8; -update noar ti set b1='H650P' where id=8; -update noar tt set v0='OWZIQYDZO' where id=8; -update noar ti set v0='OWZIQYDZO' where id=8; -update noar tt set b2='2KRH0CML7JQQFVAYJG8SSV' where id=8; -update noar ti set b2='2KRH0CML7JQQFVAYJG8SSV' where id=8; -update noar tt set v0='DT06CMEN433K' where id=9; -update noar ti set v0='DT06CMEN433K' where id=9; -update noar tt set b0='J' where id=9; -update noar ti set b0='J' where id=9; -update noar tt set v0='GFEVOXFXTZSUAYX65NSZU389LA6SE' where id=9; -update noar ti set v0='GFEVOXFXTZSUAYX65NSZU389LA6SE' where id=9; -update noar tt set b1='OB' where id=9; -update noar ti set b1='OB' where id=9; -update noar tt set v0='QE8HQV' where id=9; -update noar ti set v0='QE8HQV' where id=9; -update noar tt set b2='PWL00I4' where id=9; -update noar ti set b2='PWL00I4' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 tinyblob null, -b1 mediumblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='7Z858Y5VZ8NKN5L99R5XT4' where id=1; -update noar ti set v0='7Z858Y5VZ8NKN5L99R5XT4' where id=1; -update noar tt set b0='E9LDR1BDEV8I8X1S5CYQD91PSVL5I' where id=1; -update noar ti set b0='E9LDR1BDEV8I8X1S5CYQD91PSVL5I' where id=1; -update noar tt set v0='KKFUNM9NIBCJSOZEC04T4YYR3RW' where id=1; -update noar ti set v0='KKFUNM9NIBCJSOZEC04T4YYR3RW' where id=1; -update noar tt set b1='S5MD95WOAGVP8TVHKP9VRK8N9' where id=1; -update noar ti set b1='S5MD95WOAGVP8TVHKP9VRK8N9' where id=1; -update noar tt set v0='QW6GROI0CP183Z48ESY2DW366F' where id=1; -update noar ti set v0='QW6GROI0CP183Z48ESY2DW366F' where id=1; -update noar tt set b2='2EJ8VKCNME5O94UXNRMIS3FS' where id=1; -update noar ti set b2='2EJ8VKCNME5O94UXNRMIS3FS' where id=1; -update noar tt set v0='LAG' where id=2; -update noar ti set v0='LAG' where id=2; -update noar tt set b0='YJW9G' where id=2; -update noar ti set b0='YJW9G' where id=2; -update noar tt set v0='3BSFC8SOOBVX5YXHM534D6TMR5KHZKR' where id=2; -update noar ti set v0='3BSFC8SOOBVX5YXHM534D6TMR5KHZKR' where id=2; -update noar tt set b1='0O3IIKEMQ3DQNAIFD2L' where id=2; -update noar ti set b1='0O3IIKEMQ3DQNAIFD2L' where id=2; -update noar tt set v0='K4ZKQTSDAPJXS7HRVZ2UGN885HF' where id=2; -update noar ti set v0='K4ZKQTSDAPJXS7HRVZ2UGN885HF' where id=2; -update noar tt set b2='YRS616TBSWJQZ' where id=2; -update noar ti set b2='YRS616TBSWJQZ' where id=2; -update noar tt set v0='EIHFPEU65' where id=3; -update noar ti set v0='EIHFPEU65' where id=3; -update noar tt set b0='78XU0Y' where id=3; -update noar ti set b0='78XU0Y' where id=3; -update noar tt set v0='L146AC11XZA' where id=3; -update noar ti set v0='L146AC11XZA' where id=3; -update noar tt set b1='3LP149XR4UY2NJ3PJVNZ9X1BIJREG' where id=3; -update noar ti set b1='3LP149XR4UY2NJ3PJVNZ9X1BIJREG' where id=3; -update noar tt set v0='0C9EMH17SJWTEQC45SXTFEFQXCAG' where id=3; -update noar ti set v0='0C9EMH17SJWTEQC45SXTFEFQXCAG' where id=3; -update noar tt set b2='LTE5WKHH77PTEF3SX3S8' where id=3; -update noar ti set b2='LTE5WKHH77PTEF3SX3S8' where id=3; -update noar tt set v0='MZJDL7WLKQH9QXU' where id=4; -update noar ti set v0='MZJDL7WLKQH9QXU' where id=4; -update noar tt set b0='S9TAMM1IXUG8N6EKL' where id=4; -update noar ti set b0='S9TAMM1IXUG8N6EKL' where id=4; -update noar tt set v0='WZ8' where id=4; -update noar ti set v0='WZ8' where id=4; -update noar tt set b1='N1DVAOUGP6IZQ' where id=4; -update noar ti set b1='N1DVAOUGP6IZQ' where id=4; -update noar tt set v0='U8YKS397AIG' where id=4; -update noar ti set v0='U8YKS397AIG' where id=4; -update noar tt set b2='CB2P9CK3TKGGCJAT1GCM5TVHPTL' where id=4; -update noar ti set b2='CB2P9CK3TKGGCJAT1GCM5TVHPTL' where id=4; -update noar tt set v0='A672DWVSQKD8UI9DKFSTE4QO04MVYR' where id=5; -update noar ti set v0='A672DWVSQKD8UI9DKFSTE4QO04MVYR' where id=5; -update noar tt set b0='PZDSXVTKO6X8N8AFHR0I4HT' where id=5; -update noar ti set b0='PZDSXVTKO6X8N8AFHR0I4HT' where id=5; -update noar tt set v0='9XB3PM8WDU12' where id=5; -update noar ti set v0='9XB3PM8WDU12' where id=5; -update noar tt set b1='G5Z20O4X25BYJZXYERMG39WY3RK4KS' where id=5; -update noar ti set b1='G5Z20O4X25BYJZXYERMG39WY3RK4KS' where id=5; -update noar tt set v0='M1TL1CGO3H907GOXFMZ24MEVE48' where id=5; -update noar ti set v0='M1TL1CGO3H907GOXFMZ24MEVE48' where id=5; -update noar tt set b2='2JI1XUJWWSBH8SQ0WF25KOVJVT8QP8V' where id=5; -update noar ti set b2='2JI1XUJWWSBH8SQ0WF25KOVJVT8QP8V' where id=5; -update noar tt set v0='VC9XCXGJI' where id=6; -update noar ti set v0='VC9XCXGJI' where id=6; -update noar tt set b0='G0LI6NX6NXY6N5UH4K' where id=6; -update noar ti set b0='G0LI6NX6NXY6N5UH4K' where id=6; -update noar tt set v0='2WUB3FLDW522V8258FRA4Q' where id=6; -update noar ti set v0='2WUB3FLDW522V8258FRA4Q' where id=6; -update noar tt set b1='NYUOA5ISGOIHQVE4A' where id=6; -update noar ti set b1='NYUOA5ISGOIHQVE4A' where id=6; -update noar tt set v0='BZIHQRIAC64ECGOXMP55XK25L8V15' where id=6; -update noar ti set v0='BZIHQRIAC64ECGOXMP55XK25L8V15' where id=6; -update noar tt set b2='ST1XVS1Y6BRN352WDU0K' where id=6; -update noar ti set b2='ST1XVS1Y6BRN352WDU0K' where id=6; -update noar tt set v0='44UM' where id=7; -update noar ti set v0='44UM' where id=7; -update noar tt set b0='I5CQYP' where id=7; -update noar ti set b0='I5CQYP' where id=7; -update noar tt set v0='TJ343D1B3VWBIGG7NM' where id=7; -update noar ti set v0='TJ343D1B3VWBIGG7NM' where id=7; -update noar tt set b1='BXRYO2WNW36J1LWGYFTSD' where id=7; -update noar ti set b1='BXRYO2WNW36J1LWGYFTSD' where id=7; -update noar tt set v0='1E5D4PGNE4K4PPF5Y7' where id=7; -update noar ti set v0='1E5D4PGNE4K4PPF5Y7' where id=7; -update noar tt set b2='X64IMDG6OY1AXORNE' where id=7; -update noar ti set b2='X64IMDG6OY1AXORNE' where id=7; -update noar tt set v0='C87D6PCJ1CQ7CE9W2G487UM7GR160O' where id=8; -update noar ti set v0='C87D6PCJ1CQ7CE9W2G487UM7GR160O' where id=8; -update noar tt set b0='G' where id=8; -update noar ti set b0='G' where id=8; -update noar tt set v0='6WVA84SF805DAE43GF0LZB77H2D23' where id=8; -update noar ti set v0='6WVA84SF805DAE43GF0LZB77H2D23' where id=8; -update noar tt set b1='RJXO1WV60MHO7QJDMLLS5864KTPIX6' where id=8; -update noar ti set b1='RJXO1WV60MHO7QJDMLLS5864KTPIX6' where id=8; -update noar tt set v0='Y8' where id=8; -update noar ti set v0='Y8' where id=8; -update noar tt set b2='L3F5NGAUCR0O7F9EZB7' where id=8; -update noar ti set b2='L3F5NGAUCR0O7F9EZB7' where id=8; -update noar tt set v0='JTWG7CW' where id=9; -update noar ti set v0='JTWG7CW' where id=9; -update noar tt set b0='1EHDDNDS308FLBSJYSONAN3K1N97' where id=9; -update noar ti set b0='1EHDDNDS308FLBSJYSONAN3K1N97' where id=9; -update noar tt set v0='HXZJJ3Z02TW0RR4NYL9T5MXH2MSM62V' where id=9; -update noar ti set v0='HXZJJ3Z02TW0RR4NYL9T5MXH2MSM62V' where id=9; -update noar tt set b1='53W417XTIZNEAWWCG6K1SY0DO3F5' where id=9; -update noar ti set b1='53W417XTIZNEAWWCG6K1SY0DO3F5' where id=9; -update noar tt set v0='2JS79G5' where id=9; -update noar ti set v0='2JS79G5' where id=9; -update noar tt set b2='M4TTSJFI' where id=9; -update noar ti set b2='M4TTSJFI' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 tinyblob null, -b1 mediumblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='D68GG5Q9SOQATAJUIA71FZ0LEDUJV' where id=1; -update noar ti set v0='D68GG5Q9SOQATAJUIA71FZ0LEDUJV' where id=1; -update noar tt set b0='M6L7IKRR77JHURU1PAHKKO5' where id=1; -update noar ti set b0='M6L7IKRR77JHURU1PAHKKO5' where id=1; -update noar tt set v0='B32PCJG2QFKW056ZAR' where id=1; -update noar ti set v0='B32PCJG2QFKW056ZAR' where id=1; -update noar tt set b1='N7QS2BWRG3SLC' where id=1; -update noar ti set b1='N7QS2BWRG3SLC' where id=1; -update noar tt set v0='UQ64Y7DPBKG5' where id=1; -update noar ti set v0='UQ64Y7DPBKG5' where id=1; -update noar tt set b2='HD4QCS8BRY5XK5XIEVOFB' where id=1; -update noar ti set b2='HD4QCS8BRY5XK5XIEVOFB' where id=1; -update noar tt set v0='QXX6SFI6IGJTYGB78V9N' where id=2; -update noar ti set v0='QXX6SFI6IGJTYGB78V9N' where id=2; -update noar tt set b0='CE0I08TZ70OMNBVXH' where id=2; -update noar ti set b0='CE0I08TZ70OMNBVXH' where id=2; -update noar tt set v0='X4LAQGDSRN4SUR1GMJMDBUSQX5WWFI4' where id=2; -update noar ti set v0='X4LAQGDSRN4SUR1GMJMDBUSQX5WWFI4' where id=2; -update noar tt set b1='F74' where id=2; -update noar ti set b1='F74' where id=2; -update noar tt set v0='XFKZW' where id=2; -update noar ti set v0='XFKZW' where id=2; -update noar tt set b2='CWOHV9JOST77Z6DRWXBGPVTGWTAE3668' where id=2; -update noar ti set b2='CWOHV9JOST77Z6DRWXBGPVTGWTAE3668' where id=2; -update noar tt set v0='113R56G447OXN' where id=3; -update noar ti set v0='113R56G447OXN' where id=3; -update noar tt set b0='1J4VS2HN0H1GLX' where id=3; -update noar ti set b0='1J4VS2HN0H1GLX' where id=3; -update noar tt set v0='5I8UK79FU3EPV2P01DIL8TVZ5RPQK40' where id=3; -update noar ti set v0='5I8UK79FU3EPV2P01DIL8TVZ5RPQK40' where id=3; -update noar tt set b1='DT6GZG4F7VVXKSODBPXFONXT' where id=3; -update noar ti set b1='DT6GZG4F7VVXKSODBPXFONXT' where id=3; -update noar tt set v0='ZV62DWN8NDA2TZH51GP9' where id=3; -update noar ti set v0='ZV62DWN8NDA2TZH51GP9' where id=3; -update noar tt set b2='HV6VBZEX23A' where id=3; -update noar ti set b2='HV6VBZEX23A' where id=3; -update noar tt set v0='BE' where id=4; -update noar ti set v0='BE' where id=4; -update noar tt set b0='9D2YHOQIKL978QDU7WBGDZ9' where id=4; -update noar ti set b0='9D2YHOQIKL978QDU7WBGDZ9' where id=4; -update noar tt set v0='H8Z0P33VT7Z0R17DA8' where id=4; -update noar ti set v0='H8Z0P33VT7Z0R17DA8' where id=4; -update noar tt set b1='BQ2HZ2WMKRUU76I0PEYLZGB' where id=4; -update noar ti set b1='BQ2HZ2WMKRUU76I0PEYLZGB' where id=4; -update noar tt set v0='MM' where id=4; -update noar ti set v0='MM' where id=4; -update noar tt set b2='OAB3M7JQTU2UT4YPG' where id=4; -update noar ti set b2='OAB3M7JQTU2UT4YPG' where id=4; -update noar tt set v0='ESJHULU968AI45R' where id=5; -update noar ti set v0='ESJHULU968AI45R' where id=5; -update noar tt set b0='4IG69AXMK2PFPGJITJF5VN7H4LC' where id=5; -update noar ti set b0='4IG69AXMK2PFPGJITJF5VN7H4LC' where id=5; -update noar tt set v0='GWO4X' where id=5; -update noar ti set v0='GWO4X' where id=5; -update noar tt set b1='VIPWYMLC' where id=5; -update noar ti set b1='VIPWYMLC' where id=5; -update noar tt set v0='UI7W299N46VA4115O3' where id=5; -update noar ti set v0='UI7W299N46VA4115O3' where id=5; -update noar tt set b2='IRHYWH9112H5AT' where id=5; -update noar ti set b2='IRHYWH9112H5AT' where id=5; -update noar tt set v0='RLPAXD7BR7ZNBE28CVROUTKAI7WA7A9' where id=6; -update noar ti set v0='RLPAXD7BR7ZNBE28CVROUTKAI7WA7A9' where id=6; -update noar tt set b0='Y10NRZSOYNI' where id=6; -update noar ti set b0='Y10NRZSOYNI' where id=6; -update noar tt set v0='5' where id=6; -update noar ti set v0='5' where id=6; -update noar tt set b1='KBVSUGQ46GM' where id=6; -update noar ti set b1='KBVSUGQ46GM' where id=6; -update noar tt set v0='MXBS7CXSSB9ONXTGE55L3GNGW' where id=6; -update noar ti set v0='MXBS7CXSSB9ONXTGE55L3GNGW' where id=6; -update noar tt set b2='7A' where id=6; -update noar ti set b2='7A' where id=6; -update noar tt set v0='W74N269MMSYJ9LRXXA' where id=7; -update noar ti set v0='W74N269MMSYJ9LRXXA' where id=7; -update noar tt set b0='FWDL5' where id=7; -update noar ti set b0='FWDL5' where id=7; -update noar tt set v0='8ULHZH9MCXPG3' where id=7; -update noar ti set v0='8ULHZH9MCXPG3' where id=7; -update noar tt set b1='Y6J2M' where id=7; -update noar ti set b1='Y6J2M' where id=7; -update noar tt set v0='YV51SWJN7W4GULEZ2RKUD12I' where id=7; -update noar ti set v0='YV51SWJN7W4GULEZ2RKUD12I' where id=7; -update noar tt set b2='DE9I19TJR75FQTQDQ0HWZADBY' where id=7; -update noar ti set b2='DE9I19TJR75FQTQDQ0HWZADBY' where id=7; -update noar tt set v0='BLECES8XEXKTB2KY7FK9SQ16WY3JV' where id=8; -update noar ti set v0='BLECES8XEXKTB2KY7FK9SQ16WY3JV' where id=8; -update noar tt set b0='AR' where id=8; -update noar ti set b0='AR' where id=8; -update noar tt set v0='09IRF87DNC' where id=8; -update noar ti set v0='09IRF87DNC' where id=8; -update noar tt set b1='OICBIIUGDPPOAVGSWOSL1UCI2ICEPQ' where id=8; -update noar ti set b1='OICBIIUGDPPOAVGSWOSL1UCI2ICEPQ' where id=8; -update noar tt set v0='S16J2' where id=8; -update noar ti set v0='S16J2' where id=8; -update noar tt set b2='9RY8PFPAA9UAGNVT5UYSB2KNNDGQ1K' where id=8; -update noar ti set b2='9RY8PFPAA9UAGNVT5UYSB2KNNDGQ1K' where id=8; -update noar tt set v0='6D26BW19C2H9E0YB2' where id=9; -update noar ti set v0='6D26BW19C2H9E0YB2' where id=9; -update noar tt set b0='MED6' where id=9; -update noar ti set b0='MED6' where id=9; -update noar tt set v0='M0QWIXGOO068AXGB528E704V8MX' where id=9; -update noar ti set v0='M0QWIXGOO068AXGB528E704V8MX' where id=9; -update noar tt set b1='ZJC4W89KJC2FHJGB' where id=9; -update noar ti set b1='ZJC4W89KJC2FHJGB' where id=9; -update noar tt set v0='HQKDA2Y4S338AX76RUFTW3DTU44N40' where id=9; -update noar ti set v0='HQKDA2Y4S338AX76RUFTW3DTU44N40' where id=9; -update noar tt set b2='QZFMIAIEGLEXXTNT' where id=9; -update noar ti set b2='QZFMIAIEGLEXXTNT' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 tinyblob not null, -b1 mediumblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='S3F7S9AK0YP' where id=1; -update noar ti set v0='S3F7S9AK0YP' where id=1; -update noar tt set b0='Z5UUTMGMKKZJ' where id=1; -update noar ti set b0='Z5UUTMGMKKZJ' where id=1; -update noar tt set v0='K3L7RJO' where id=1; -update noar ti set v0='K3L7RJO' where id=1; -update noar tt set b1='1622058N4DPL7H55O5OOL4VUR51RBIIV' where id=1; -update noar ti set b1='1622058N4DPL7H55O5OOL4VUR51RBIIV' where id=1; -update noar tt set v0='K31R9YMPUNN98F01KA0FIZ' where id=1; -update noar ti set v0='K31R9YMPUNN98F01KA0FIZ' where id=1; -update noar tt set b2='NFJ72P3VX50PQTU3JREOK7DO77' where id=1; -update noar ti set b2='NFJ72P3VX50PQTU3JREOK7DO77' where id=1; -update noar tt set v0='3W6OXZC779BHQLZ2YDX774J7TULGDCX' where id=2; -update noar ti set v0='3W6OXZC779BHQLZ2YDX774J7TULGDCX' where id=2; -update noar tt set b0='Y2WB054PXLQ0Q2RL40280TYRK7' where id=2; -update noar ti set b0='Y2WB054PXLQ0Q2RL40280TYRK7' where id=2; -update noar tt set v0='IK4' where id=2; -update noar ti set v0='IK4' where id=2; -update noar tt set b1='ETBRSMGLTFRUPHTTP' where id=2; -update noar ti set b1='ETBRSMGLTFRUPHTTP' where id=2; -update noar tt set v0='B79HM6DJD4NWN8' where id=2; -update noar ti set v0='B79HM6DJD4NWN8' where id=2; -update noar tt set b2='V2MKIYITZS0M3L5JCLF3S' where id=2; -update noar ti set b2='V2MKIYITZS0M3L5JCLF3S' where id=2; -update noar tt set v0='2ZB67WCYT37M61OMFBBIAYWP3' where id=3; -update noar ti set v0='2ZB67WCYT37M61OMFBBIAYWP3' where id=3; -update noar tt set b0='EV4WGVR93A8CAG9FUL' where id=3; -update noar ti set b0='EV4WGVR93A8CAG9FUL' where id=3; -update noar tt set v0='IPVFRLP' where id=3; -update noar ti set v0='IPVFRLP' where id=3; -update noar tt set b1='31LU3C' where id=3; -update noar ti set b1='31LU3C' where id=3; -update noar tt set v0='OO7ZU06UD77M1RQZZFY03A' where id=3; -update noar ti set v0='OO7ZU06UD77M1RQZZFY03A' where id=3; -update noar tt set b2='60VHD7B5Y4W' where id=3; -update noar ti set b2='60VHD7B5Y4W' where id=3; -update noar tt set v0='BB94V2JU6ALPIBTLG' where id=4; -update noar ti set v0='BB94V2JU6ALPIBTLG' where id=4; -update noar tt set b0='6IXQYM3N0IV8PTZ2I' where id=4; -update noar ti set b0='6IXQYM3N0IV8PTZ2I' where id=4; -update noar tt set v0='BVHUE64X6' where id=4; -update noar ti set v0='BVHUE64X6' where id=4; -update noar tt set b1='S8TZAY1QNUV8' where id=4; -update noar ti set b1='S8TZAY1QNUV8' where id=4; -update noar tt set v0='YN5PRCVKAX5V4316L2IB' where id=4; -update noar ti set v0='YN5PRCVKAX5V4316L2IB' where id=4; -update noar tt set b2='AFUO' where id=4; -update noar ti set b2='AFUO' where id=4; -update noar tt set v0='OPJDDYQQD1TNGIU7IVLX94E' where id=5; -update noar ti set v0='OPJDDYQQD1TNGIU7IVLX94E' where id=5; -update noar tt set b0='8O2QDIE193WD6M75RXMNO54FPD' where id=5; -update noar ti set b0='8O2QDIE193WD6M75RXMNO54FPD' where id=5; -update noar tt set v0='6FHUDYMHQ' where id=5; -update noar ti set v0='6FHUDYMHQ' where id=5; -update noar tt set b1='961WQOFE' where id=5; -update noar ti set b1='961WQOFE' where id=5; -update noar tt set v0='13BNPH6SG2' where id=5; -update noar ti set v0='13BNPH6SG2' where id=5; -update noar tt set b2='FT7GPE0L3' where id=5; -update noar ti set b2='FT7GPE0L3' where id=5; -update noar tt set v0='CNZOKRHRC9WWZZRCRHPQ1' where id=6; -update noar ti set v0='CNZOKRHRC9WWZZRCRHPQ1' where id=6; -update noar tt set b0='3LO2V4LLBZMRPMGL3QQSDDKM05' where id=6; -update noar ti set b0='3LO2V4LLBZMRPMGL3QQSDDKM05' where id=6; -update noar tt set v0='6APG6HGWLJTIIBDS9' where id=6; -update noar ti set v0='6APG6HGWLJTIIBDS9' where id=6; -update noar tt set b1='XIUSQTJ3KQRAM3BIDUU5STK6Z' where id=6; -update noar ti set b1='XIUSQTJ3KQRAM3BIDUU5STK6Z' where id=6; -update noar tt set v0='WIHRFWOM6RIQT02NNT1' where id=6; -update noar ti set v0='WIHRFWOM6RIQT02NNT1' where id=6; -update noar tt set b2='GLC41' where id=6; -update noar ti set b2='GLC41' where id=6; -update noar tt set v0='HXU2ON7XXF45V07QK1FTHPYZ06VNY24J' where id=7; -update noar ti set v0='HXU2ON7XXF45V07QK1FTHPYZ06VNY24J' where id=7; -update noar tt set b0='B3URBSGX1J' where id=7; -update noar ti set b0='B3URBSGX1J' where id=7; -update noar tt set v0='LL36B' where id=7; -update noar ti set v0='LL36B' where id=7; -update noar tt set b1='8XH7466YFSOORGNOAGIW' where id=7; -update noar ti set b1='8XH7466YFSOORGNOAGIW' where id=7; -update noar tt set v0='1ZSQIMUMTW81HPTQ5BGQQU4KL8OWBD' where id=7; -update noar ti set v0='1ZSQIMUMTW81HPTQ5BGQQU4KL8OWBD' where id=7; -update noar tt set b2='4JSJLNDWQHXVZZ' where id=7; -update noar ti set b2='4JSJLNDWQHXVZZ' where id=7; -update noar tt set v0='RK7PKKVKDH3SYN0GLKQ6VNS' where id=8; -update noar ti set v0='RK7PKKVKDH3SYN0GLKQ6VNS' where id=8; -update noar tt set b0='YL1E91R8B9SNTZZ7K8BDF6JME86CET2' where id=8; -update noar ti set b0='YL1E91R8B9SNTZZ7K8BDF6JME86CET2' where id=8; -update noar tt set v0='EDSER' where id=8; -update noar ti set v0='EDSER' where id=8; -update noar tt set b1='L47ZLG9SZ6LXO2I8VKPZ7G' where id=8; -update noar ti set b1='L47ZLG9SZ6LXO2I8VKPZ7G' where id=8; -update noar tt set v0='U' where id=8; -update noar ti set v0='U' where id=8; -update noar tt set b2='R7U7QIA4BC5ILV' where id=8; -update noar ti set b2='R7U7QIA4BC5ILV' where id=8; -update noar tt set v0='L34A926M4' where id=9; -update noar ti set v0='L34A926M4' where id=9; -update noar tt set b0='V3P35UFHF9B44UGPV' where id=9; -update noar ti set b0='V3P35UFHF9B44UGPV' where id=9; -update noar tt set v0='HK81AJ' where id=9; -update noar ti set v0='HK81AJ' where id=9; -update noar tt set b1='E68MZTQEMU3J6NQY0JD7RBQ7' where id=9; -update noar ti set b1='E68MZTQEMU3J6NQY0JD7RBQ7' where id=9; -update noar tt set v0='87UJ1M' where id=9; -update noar ti set v0='87UJ1M' where id=9; -update noar tt set b2='HEPA59RITMM9FYMS6O1' where id=9; -update noar ti set b2='HEPA59RITMM9FYMS6O1' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 tinyblob not null, -b1 mediumblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='KR6CD6J84QBMHHZMQPX56F4TH20' where id=1; -update noar ti set v0='KR6CD6J84QBMHHZMQPX56F4TH20' where id=1; -update noar tt set b0='YKLJEKDQMMTVB66Q1Y8RO' where id=1; -update noar ti set b0='YKLJEKDQMMTVB66Q1Y8RO' where id=1; -update noar tt set v0='I87' where id=1; -update noar ti set v0='I87' where id=1; -update noar tt set b1='FIH4E146YD9XAI8WTZ6EI7ZT8E6H' where id=1; -update noar ti set b1='FIH4E146YD9XAI8WTZ6EI7ZT8E6H' where id=1; -update noar tt set v0='7Z4Y2IVOA28OHY0NRCVK9WDV056' where id=1; -update noar ti set v0='7Z4Y2IVOA28OHY0NRCVK9WDV056' where id=1; -update noar tt set b2='9MR583L9POAYT06HVFZU8AMA' where id=1; -update noar ti set b2='9MR583L9POAYT06HVFZU8AMA' where id=1; -update noar tt set v0='ZUI9ETVQ5ML65N' where id=2; -update noar ti set v0='ZUI9ETVQ5ML65N' where id=2; -update noar tt set b0='G96KUMZ' where id=2; -update noar ti set b0='G96KUMZ' where id=2; -update noar tt set v0='VDOV3MDT3' where id=2; -update noar ti set v0='VDOV3MDT3' where id=2; -update noar tt set b1='IH06FHS8' where id=2; -update noar ti set b1='IH06FHS8' where id=2; -update noar tt set v0='PMLW0AO0IO6K8OIS4G353MK6C' where id=2; -update noar ti set v0='PMLW0AO0IO6K8OIS4G353MK6C' where id=2; -update noar tt set b2='DSILZ9VZD3YPV7UKRX3M' where id=2; -update noar ti set b2='DSILZ9VZD3YPV7UKRX3M' where id=2; -update noar tt set v0='TWLJHR0FL' where id=3; -update noar ti set v0='TWLJHR0FL' where id=3; -update noar tt set b0='7488CW' where id=3; -update noar ti set b0='7488CW' where id=3; -update noar tt set v0='U151TG' where id=3; -update noar ti set v0='U151TG' where id=3; -update noar tt set b1='DNCZUGXB9G1OI9WQNM6XEO' where id=3; -update noar ti set b1='DNCZUGXB9G1OI9WQNM6XEO' where id=3; -update noar tt set v0='EPOBTSF40D33J8474BYRVTI85V' where id=3; -update noar ti set v0='EPOBTSF40D33J8474BYRVTI85V' where id=3; -update noar tt set b2='XI' where id=3; -update noar ti set b2='XI' where id=3; -update noar tt set v0='R0W5P3E' where id=4; -update noar ti set v0='R0W5P3E' where id=4; -update noar tt set b0='9HINPQNXGA9XVJ5A3VJIP8JS' where id=4; -update noar ti set b0='9HINPQNXGA9XVJ5A3VJIP8JS' where id=4; -update noar tt set v0='LGXWKJWGM48NZ4D3IN470WGA8B0P5' where id=4; -update noar ti set v0='LGXWKJWGM48NZ4D3IN470WGA8B0P5' where id=4; -update noar tt set b1='TTFV7HNFFF1TZS2TNQQN47IGRE' where id=4; -update noar ti set b1='TTFV7HNFFF1TZS2TNQQN47IGRE' where id=4; -update noar tt set v0='VJ0SQ2LI65VG9V' where id=4; -update noar ti set v0='VJ0SQ2LI65VG9V' where id=4; -update noar tt set b2='OC8G060CPO0T7NV' where id=4; -update noar ti set b2='OC8G060CPO0T7NV' where id=4; -update noar tt set v0='A76VH8AT62PN7X6SO' where id=5; -update noar ti set v0='A76VH8AT62PN7X6SO' where id=5; -update noar tt set b0='HQI' where id=5; -update noar ti set b0='HQI' where id=5; -update noar tt set v0='PPEUE809UU' where id=5; -update noar ti set v0='PPEUE809UU' where id=5; -update noar tt set b1='MBG' where id=5; -update noar ti set b1='MBG' where id=5; -update noar tt set v0='YL0FNAO8K0OD8OX7SQHGPO' where id=5; -update noar ti set v0='YL0FNAO8K0OD8OX7SQHGPO' where id=5; -update noar tt set b2='IW203FVPO0ZC80BQC9' where id=5; -update noar ti set b2='IW203FVPO0ZC80BQC9' where id=5; -update noar tt set v0='9' where id=6; -update noar ti set v0='9' where id=6; -update noar tt set b0='RA173ND740XTMO6TVAF3A121PZEO1' where id=6; -update noar ti set b0='RA173ND740XTMO6TVAF3A121PZEO1' where id=6; -update noar tt set v0='9ZZUQYADGJVNH' where id=6; -update noar ti set v0='9ZZUQYADGJVNH' where id=6; -update noar tt set b1='41LB5CSJ1KKXUA0FHUZ0LFVP0UN1' where id=6; -update noar ti set b1='41LB5CSJ1KKXUA0FHUZ0LFVP0UN1' where id=6; -update noar tt set v0='1MHTHUQFUE7NDVBKGWTLS20P' where id=6; -update noar ti set v0='1MHTHUQFUE7NDVBKGWTLS20P' where id=6; -update noar tt set b2='FZNWI0T7D8HEGGXCDLW5V8' where id=6; -update noar ti set b2='FZNWI0T7D8HEGGXCDLW5V8' where id=6; -update noar tt set v0='PYG168I5HPMQZJ50WTW' where id=7; -update noar ti set v0='PYG168I5HPMQZJ50WTW' where id=7; -update noar tt set b0='AIP4G' where id=7; -update noar ti set b0='AIP4G' where id=7; -update noar tt set v0='RLL56UBNGW9V0H5B1JFTJ8T45' where id=7; -update noar ti set v0='RLL56UBNGW9V0H5B1JFTJ8T45' where id=7; -update noar tt set b1='8R04DYD8WXDL9J8GA9K46' where id=7; -update noar ti set b1='8R04DYD8WXDL9J8GA9K46' where id=7; -update noar tt set v0='1440DQZJA75KEPZ' where id=7; -update noar ti set v0='1440DQZJA75KEPZ' where id=7; -update noar tt set b2='1RRLN29GGT5510H1HGJQRN' where id=7; -update noar ti set b2='1RRLN29GGT5510H1HGJQRN' where id=7; -update noar tt set v0='A7FP' where id=8; -update noar ti set v0='A7FP' where id=8; -update noar tt set b0='ANJCN9' where id=8; -update noar ti set b0='ANJCN9' where id=8; -update noar tt set v0='MOTAOXADB7OLGUA' where id=8; -update noar ti set v0='MOTAOXADB7OLGUA' where id=8; -update noar tt set b1='VKZ6KTY4RY' where id=8; -update noar ti set b1='VKZ6KTY4RY' where id=8; -update noar tt set v0='3UZR27J18RDXFZYM9R9O8YDJ5ZQ' where id=8; -update noar ti set v0='3UZR27J18RDXFZYM9R9O8YDJ5ZQ' where id=8; -update noar tt set b2='4FG0QHESKSZWVQXPYLO94LDQ3EJH' where id=8; -update noar ti set b2='4FG0QHESKSZWVQXPYLO94LDQ3EJH' where id=8; -update noar tt set v0='9QTTIQVM2X5445E1301' where id=9; -update noar ti set v0='9QTTIQVM2X5445E1301' where id=9; -update noar tt set b0='0ZUTGBTKWPV6DNOU368JF9' where id=9; -update noar ti set b0='0ZUTGBTKWPV6DNOU368JF9' where id=9; -update noar tt set v0='EOKS4EH9CAB58NNTO6' where id=9; -update noar ti set v0='EOKS4EH9CAB58NNTO6' where id=9; -update noar tt set b1='QV9JKQS7TFIZEI' where id=9; -update noar ti set b1='QV9JKQS7TFIZEI' where id=9; -update noar tt set v0='523I0MUVJGEERQWURHOKW2XA17U2L' where id=9; -update noar ti set v0='523I0MUVJGEERQWURHOKW2XA17U2L' where id=9; -update noar tt set b2='DJPLTJ3B3ZI5KDSGN3J' where id=9; -update noar ti set b2='DJPLTJ3B3ZI5KDSGN3J' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 tinyblob null, -b1 mediumblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='QI1D524Q1F0N1ZCQRQQBJHCO' where id=1; -update noar ti set v0='QI1D524Q1F0N1ZCQRQQBJHCO' where id=1; -update noar tt set b0='PAFV69S' where id=1; -update noar ti set b0='PAFV69S' where id=1; -update noar tt set v0='409ATEAANPGR91AX0A0M' where id=1; -update noar ti set v0='409ATEAANPGR91AX0A0M' where id=1; -update noar tt set b1='LB21FBR33M95CARMU64NI' where id=1; -update noar ti set b1='LB21FBR33M95CARMU64NI' where id=1; -update noar tt set v0='Z6HOGCQD4CD' where id=1; -update noar ti set v0='Z6HOGCQD4CD' where id=1; -update noar tt set b2='VPQZG88' where id=1; -update noar ti set b2='VPQZG88' where id=1; -update noar tt set v0='R9P0OHVUEQS4L63EA0RE93N' where id=2; -update noar ti set v0='R9P0OHVUEQS4L63EA0RE93N' where id=2; -update noar tt set b0='F0' where id=2; -update noar ti set b0='F0' where id=2; -update noar tt set v0='P28R16ZVLNQG03ZLOUQWMW' where id=2; -update noar ti set v0='P28R16ZVLNQG03ZLOUQWMW' where id=2; -update noar tt set b1='QIT57VJ4' where id=2; -update noar ti set b1='QIT57VJ4' where id=2; -update noar tt set v0='VFK7784E8XA1Y78T4KZ9X9F1JC1DW9' where id=2; -update noar ti set v0='VFK7784E8XA1Y78T4KZ9X9F1JC1DW9' where id=2; -update noar tt set b2='Q54H9KI1LH' where id=2; -update noar ti set b2='Q54H9KI1LH' where id=2; -update noar tt set v0='XSG3KHPK3SDS462XWJSDDK' where id=3; -update noar ti set v0='XSG3KHPK3SDS462XWJSDDK' where id=3; -update noar tt set b0='PMFR2O1H9EW9OIP1RHT6LOPF4ZJSQ' where id=3; -update noar ti set b0='PMFR2O1H9EW9OIP1RHT6LOPF4ZJSQ' where id=3; -update noar tt set v0='5HL3KNE693HPYYQ1WAJH' where id=3; -update noar ti set v0='5HL3KNE693HPYYQ1WAJH' where id=3; -update noar tt set b1='CWA86VXD80VCBODCTRZ2KH507K' where id=3; -update noar ti set b1='CWA86VXD80VCBODCTRZ2KH507K' where id=3; -update noar tt set v0='4JXQ0USI6W4NDSZ8SALR0ARP' where id=3; -update noar ti set v0='4JXQ0USI6W4NDSZ8SALR0ARP' where id=3; -update noar tt set b2='OE10V' where id=3; -update noar ti set b2='OE10V' where id=3; -update noar tt set v0='1PDUHI59GTBI3JKOKFW0' where id=4; -update noar ti set v0='1PDUHI59GTBI3JKOKFW0' where id=4; -update noar tt set b0='JDQBUVHWHW56AMEIODVTZVI2B1F' where id=4; -update noar ti set b0='JDQBUVHWHW56AMEIODVTZVI2B1F' where id=4; -update noar tt set v0='E45XB8CQV9ICXLVTEGF' where id=4; -update noar ti set v0='E45XB8CQV9ICXLVTEGF' where id=4; -update noar tt set b1='GQYJ04AD9B' where id=4; -update noar ti set b1='GQYJ04AD9B' where id=4; -update noar tt set v0='C88UGD7EP3W2SY2W' where id=4; -update noar ti set v0='C88UGD7EP3W2SY2W' where id=4; -update noar tt set b2='C6H1EG1PS62NB1NP1LZH7' where id=4; -update noar ti set b2='C6H1EG1PS62NB1NP1LZH7' where id=4; -update noar tt set v0='EGBAY8M07WWQ8FELS7BSO2ZFU' where id=5; -update noar ti set v0='EGBAY8M07WWQ8FELS7BSO2ZFU' where id=5; -update noar tt set b0='ITK60WIK' where id=5; -update noar ti set b0='ITK60WIK' where id=5; -update noar tt set v0='MHCY2LN8RDAS159QSJNNO5XL7ROVA81' where id=5; -update noar ti set v0='MHCY2LN8RDAS159QSJNNO5XL7ROVA81' where id=5; -update noar tt set b1='M3ZE1' where id=5; -update noar ti set b1='M3ZE1' where id=5; -update noar tt set v0='3TQW87CF8R6NRTA3MGSWKL' where id=5; -update noar ti set v0='3TQW87CF8R6NRTA3MGSWKL' where id=5; -update noar tt set b2='XF5EV84RRH46WSU' where id=5; -update noar ti set b2='XF5EV84RRH46WSU' where id=5; -update noar tt set v0='GAQPM9PEZ9J9' where id=6; -update noar ti set v0='GAQPM9PEZ9J9' where id=6; -update noar tt set b0='JNFM9DOS07CX' where id=6; -update noar ti set b0='JNFM9DOS07CX' where id=6; -update noar tt set v0='EKTA2JA' where id=6; -update noar ti set v0='EKTA2JA' where id=6; -update noar tt set b1='9TI64C8W' where id=6; -update noar ti set b1='9TI64C8W' where id=6; -update noar tt set v0='QPQO6L45ERCQ' where id=6; -update noar ti set v0='QPQO6L45ERCQ' where id=6; -update noar tt set b2='YU6O322N84' where id=6; -update noar ti set b2='YU6O322N84' where id=6; -update noar tt set v0='9MOPKEC3YHUC7JCBDE3DNAWYIQ5JGRLJ' where id=7; -update noar ti set v0='9MOPKEC3YHUC7JCBDE3DNAWYIQ5JGRLJ' where id=7; -update noar tt set b0='K1VOH19RCN5M0H9' where id=7; -update noar ti set b0='K1VOH19RCN5M0H9' where id=7; -update noar tt set v0='Z1PEO653XQ' where id=7; -update noar ti set v0='Z1PEO653XQ' where id=7; -update noar tt set b1='E7FTONJM9D5YK4XSC7B232MAHZEQBI' where id=7; -update noar ti set b1='E7FTONJM9D5YK4XSC7B232MAHZEQBI' where id=7; -update noar tt set v0='1CHPH7IBAKB5MJD7CER4ZW' where id=7; -update noar ti set v0='1CHPH7IBAKB5MJD7CER4ZW' where id=7; -update noar tt set b2='H8I2AB424FIW1G0Y06QAVQ' where id=7; -update noar ti set b2='H8I2AB424FIW1G0Y06QAVQ' where id=7; -update noar tt set v0='P9C6M01CH7T3O00LP9FSBMHZM' where id=8; -update noar ti set v0='P9C6M01CH7T3O00LP9FSBMHZM' where id=8; -update noar tt set b0='P1K19RV7VCEZTO7Z93Q1VMT' where id=8; -update noar ti set b0='P1K19RV7VCEZTO7Z93Q1VMT' where id=8; -update noar tt set v0='SYEX0YYSQ2027AF8R662XUHY38' where id=8; -update noar ti set v0='SYEX0YYSQ2027AF8R662XUHY38' where id=8; -update noar tt set b1='Z46W8IVOU102' where id=8; -update noar ti set b1='Z46W8IVOU102' where id=8; -update noar tt set v0='3FC82NFQVXW92HK4TLP4FI8AWWRKJ5' where id=8; -update noar ti set v0='3FC82NFQVXW92HK4TLP4FI8AWWRKJ5' where id=8; -update noar tt set b2='Z1F4CV84KTF' where id=8; -update noar ti set b2='Z1F4CV84KTF' where id=8; -update noar tt set v0='9WJE2BGKD' where id=9; -update noar ti set v0='9WJE2BGKD' where id=9; -update noar tt set b0='XHZX1I8N23X7PYXIZMSGJVTSG9YBPP' where id=9; -update noar ti set b0='XHZX1I8N23X7PYXIZMSGJVTSG9YBPP' where id=9; -update noar tt set v0='3ZC3UYU38PXORS1U5GC997LTW6QU3' where id=9; -update noar ti set v0='3ZC3UYU38PXORS1U5GC997LTW6QU3' where id=9; -update noar tt set b1='4MRXLH' where id=9; -update noar ti set b1='4MRXLH' where id=9; -update noar tt set v0='HX1SEM5J857LF8MG4EDN' where id=9; -update noar ti set v0='HX1SEM5J857LF8MG4EDN' where id=9; -update noar tt set b2='TLHBOX3UVX879TGT3W' where id=9; -update noar ti set b2='TLHBOX3UVX879TGT3W' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 tinyblob null, -b1 mediumblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='UGNW0NVR9CGHXEE' where id=1; -update noar ti set v0='UGNW0NVR9CGHXEE' where id=1; -update noar tt set b0='JZP1DF02Q2G08DC4J' where id=1; -update noar ti set b0='JZP1DF02Q2G08DC4J' where id=1; -update noar tt set v0='OUK5P1NMIKTAYB0LUOD' where id=1; -update noar ti set v0='OUK5P1NMIKTAYB0LUOD' where id=1; -update noar tt set b1='3RC0S4F0T9GKAFI3DGEWMYR6E4' where id=1; -update noar ti set b1='3RC0S4F0T9GKAFI3DGEWMYR6E4' where id=1; -update noar tt set v0='RXAQ2ZJKPIEGLGDS6GB6N' where id=1; -update noar ti set v0='RXAQ2ZJKPIEGLGDS6GB6N' where id=1; -update noar tt set b2='6X3Q836J0HJAMIO32I9MQ59PF' where id=1; -update noar ti set b2='6X3Q836J0HJAMIO32I9MQ59PF' where id=1; -update noar tt set v0='J' where id=2; -update noar ti set v0='J' where id=2; -update noar tt set b0='4EE1BFRMWLI12I1M7Y8LIJ7GCLD0' where id=2; -update noar ti set b0='4EE1BFRMWLI12I1M7Y8LIJ7GCLD0' where id=2; -update noar tt set v0='DVCWYO' where id=2; -update noar ti set v0='DVCWYO' where id=2; -update noar tt set b1='AV615JHC8H0YVWUZ8LCT6YEQV' where id=2; -update noar ti set b1='AV615JHC8H0YVWUZ8LCT6YEQV' where id=2; -update noar tt set v0='SQ32WAZI0XC9UCZOW57AK' where id=2; -update noar ti set v0='SQ32WAZI0XC9UCZOW57AK' where id=2; -update noar tt set b2='H8QNRP06IZ98HU' where id=2; -update noar ti set b2='H8QNRP06IZ98HU' where id=2; -update noar tt set v0='GCSIQH4HQGOVW6LOUMIFI3DNLK8PQJ' where id=3; -update noar ti set v0='GCSIQH4HQGOVW6LOUMIFI3DNLK8PQJ' where id=3; -update noar tt set b0='SR5BE2' where id=3; -update noar ti set b0='SR5BE2' where id=3; -update noar tt set v0='FUK4CPT09' where id=3; -update noar ti set v0='FUK4CPT09' where id=3; -update noar tt set b1='FK93J39T' where id=3; -update noar ti set b1='FK93J39T' where id=3; -update noar tt set v0='Y8MPUQX06QU93ISM' where id=3; -update noar ti set v0='Y8MPUQX06QU93ISM' where id=3; -update noar tt set b2='AQOM794MF6' where id=3; -update noar ti set b2='AQOM794MF6' where id=3; -update noar tt set v0='YGNZ37H2EY' where id=4; -update noar ti set v0='YGNZ37H2EY' where id=4; -update noar tt set b0='ISTM731LD2T0VS9GTV1127IZ31D7' where id=4; -update noar ti set b0='ISTM731LD2T0VS9GTV1127IZ31D7' where id=4; -update noar tt set v0='EVMR7QIFIA5ET' where id=4; -update noar ti set v0='EVMR7QIFIA5ET' where id=4; -update noar tt set b1='OEE8YI2NTBI830RQ50EOTJ' where id=4; -update noar ti set b1='OEE8YI2NTBI830RQ50EOTJ' where id=4; -update noar tt set v0='CM340O76' where id=4; -update noar ti set v0='CM340O76' where id=4; -update noar tt set b2='MTVH671' where id=4; -update noar ti set b2='MTVH671' where id=4; -update noar tt set v0='NUXIT7YXBWNU7JSSEG' where id=5; -update noar ti set v0='NUXIT7YXBWNU7JSSEG' where id=5; -update noar tt set b0='5Q2Q6V7687QVIXLKZ' where id=5; -update noar ti set b0='5Q2Q6V7687QVIXLKZ' where id=5; -update noar tt set v0='DRLXXKEFR' where id=5; -update noar ti set v0='DRLXXKEFR' where id=5; -update noar tt set b1='NKU03MBYK' where id=5; -update noar ti set b1='NKU03MBYK' where id=5; -update noar tt set v0='JVR3WRCQDPZRNM' where id=5; -update noar ti set v0='JVR3WRCQDPZRNM' where id=5; -update noar tt set b2='2EEAQS3Z3CAKPH6X5' where id=5; -update noar ti set b2='2EEAQS3Z3CAKPH6X5' where id=5; -update noar tt set v0='5MPNKQWARIS25H67PT69WJGFYFS68393' where id=6; -update noar ti set v0='5MPNKQWARIS25H67PT69WJGFYFS68393' where id=6; -update noar tt set b0='L0WOAUA8WXYQ79E8L' where id=6; -update noar ti set b0='L0WOAUA8WXYQ79E8L' where id=6; -update noar tt set v0='90K71NJ4WWF0T2EAP5' where id=6; -update noar ti set v0='90K71NJ4WWF0T2EAP5' where id=6; -update noar tt set b1='XHAOECLN4YC7LRK8U8CHX0C349' where id=6; -update noar ti set b1='XHAOECLN4YC7LRK8U8CHX0C349' where id=6; -update noar tt set v0='8734P' where id=6; -update noar ti set v0='8734P' where id=6; -update noar tt set b2='C' where id=6; -update noar ti set b2='C' where id=6; -update noar tt set v0='R' where id=7; -update noar ti set v0='R' where id=7; -update noar tt set b0='L3X5DO95UYNEIE48SV2R5' where id=7; -update noar ti set b0='L3X5DO95UYNEIE48SV2R5' where id=7; -update noar tt set v0='9GMTQFPDXZ5RZY6ELJ2UD8BEHIU' where id=7; -update noar ti set v0='9GMTQFPDXZ5RZY6ELJ2UD8BEHIU' where id=7; -update noar tt set b1='48TEU3QD39KNR7223EPV' where id=7; -update noar ti set b1='48TEU3QD39KNR7223EPV' where id=7; -update noar tt set v0='2T92WIU6XOLA5VU' where id=7; -update noar ti set v0='2T92WIU6XOLA5VU' where id=7; -update noar tt set b2='WMA40QRLVM937BKUZVF444M8A81QKX' where id=7; -update noar ti set b2='WMA40QRLVM937BKUZVF444M8A81QKX' where id=7; -update noar tt set v0='BPPUE21RWWR0NXYWDA' where id=8; -update noar ti set v0='BPPUE21RWWR0NXYWDA' where id=8; -update noar tt set b0='ZG9QN48YJM13AYU5YYQVM7BM145HVYOT' where id=8; -update noar ti set b0='ZG9QN48YJM13AYU5YYQVM7BM145HVYOT' where id=8; -update noar tt set v0='W97MQZ' where id=8; -update noar ti set v0='W97MQZ' where id=8; -update noar tt set b1='Q2652ZRV6NHLCVEN0212YE' where id=8; -update noar ti set b1='Q2652ZRV6NHLCVEN0212YE' where id=8; -update noar tt set v0='5TRGJOZFXF64CHGHVTGR6WQ55PU6' where id=8; -update noar ti set v0='5TRGJOZFXF64CHGHVTGR6WQ55PU6' where id=8; -update noar tt set b2='2Z2MHTS9A8M7AYJV' where id=8; -update noar ti set b2='2Z2MHTS9A8M7AYJV' where id=8; -update noar tt set v0='1SRR' where id=9; -update noar ti set v0='1SRR' where id=9; -update noar tt set b0='K0RGO5EAPJ9QXFISR2RBVI6Q1P' where id=9; -update noar ti set b0='K0RGO5EAPJ9QXFISR2RBVI6Q1P' where id=9; -update noar tt set v0='PFVSYT0IF6ZB' where id=9; -update noar ti set v0='PFVSYT0IF6ZB' where id=9; -update noar tt set b1='CE6AP' where id=9; -update noar ti set b1='CE6AP' where id=9; -update noar tt set v0='WSLG7UVT8HD4TT9X0C1' where id=9; -update noar ti set v0='WSLG7UVT8HD4TT9X0C1' where id=9; -update noar tt set b2='P7F7NRQYGF1TFO8ZOGBRJV' where id=9; -update noar ti set b2='P7F7NRQYGF1TFO8ZOGBRJV' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 tinyblob not null, -b1 mediumblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='07J9' where id=1; -update noar ti set v0='07J9' where id=1; -update noar tt set b0='DUNKPINS' where id=1; -update noar ti set b0='DUNKPINS' where id=1; -update noar tt set v0='YD9BMR9BDMAZ4LVFCUJG9GVNTM' where id=1; -update noar ti set v0='YD9BMR9BDMAZ4LVFCUJG9GVNTM' where id=1; -update noar tt set b1='T4EWDSW5IX2STVK1TPIL717N5N3VP' where id=1; -update noar ti set b1='T4EWDSW5IX2STVK1TPIL717N5N3VP' where id=1; -update noar tt set v0='3I9WPSAUCBCP9Y' where id=1; -update noar ti set v0='3I9WPSAUCBCP9Y' where id=1; -update noar tt set b2='89KVC0QT2EFKMSO846PA8GLF6FWBOVHS' where id=1; -update noar ti set b2='89KVC0QT2EFKMSO846PA8GLF6FWBOVHS' where id=1; -update noar tt set v0='AUDY6GSLY' where id=2; -update noar ti set v0='AUDY6GSLY' where id=2; -update noar tt set b0='IS3TCTF4X1Y5' where id=2; -update noar ti set b0='IS3TCTF4X1Y5' where id=2; -update noar tt set v0='L7KOQ5B' where id=2; -update noar ti set v0='L7KOQ5B' where id=2; -update noar tt set b1='C4398W6L1EQTAH6' where id=2; -update noar ti set b1='C4398W6L1EQTAH6' where id=2; -update noar tt set v0='1YV3LGXWK9G4JLPSU1YQ9T3IU2EK3GI' where id=2; -update noar ti set v0='1YV3LGXWK9G4JLPSU1YQ9T3IU2EK3GI' where id=2; -update noar tt set b2='8E8HPFSUFTRCF0ZTEJ2BWJB0L3DMB4OK' where id=2; -update noar ti set b2='8E8HPFSUFTRCF0ZTEJ2BWJB0L3DMB4OK' where id=2; -update noar tt set v0='KGDBMO3SQWHJN5F6JU3U70K' where id=3; -update noar ti set v0='KGDBMO3SQWHJN5F6JU3U70K' where id=3; -update noar tt set b0='EK55ZT' where id=3; -update noar ti set b0='EK55ZT' where id=3; -update noar tt set v0='K' where id=3; -update noar ti set v0='K' where id=3; -update noar tt set b1='079DI85RQAQ5ID094U1W9' where id=3; -update noar ti set b1='079DI85RQAQ5ID094U1W9' where id=3; -update noar tt set v0='7UVJRKSQ26BTR1L8H8' where id=3; -update noar ti set v0='7UVJRKSQ26BTR1L8H8' where id=3; -update noar tt set b2='84F' where id=3; -update noar ti set b2='84F' where id=3; -update noar tt set v0='OPQTY9S0013' where id=4; -update noar ti set v0='OPQTY9S0013' where id=4; -update noar tt set b0='3E03NQ5OUYGN7E' where id=4; -update noar ti set b0='3E03NQ5OUYGN7E' where id=4; -update noar tt set v0='IBMJ' where id=4; -update noar ti set v0='IBMJ' where id=4; -update noar tt set b1='GQO72754ZJRHIO1D1WQ' where id=4; -update noar ti set b1='GQO72754ZJRHIO1D1WQ' where id=4; -update noar tt set v0='659P2XRROO0W0IETQNNHPSRB5WIG8MC' where id=4; -update noar ti set v0='659P2XRROO0W0IETQNNHPSRB5WIG8MC' where id=4; -update noar tt set b2='SX8N2G6EG3PJ' where id=4; -update noar ti set b2='SX8N2G6EG3PJ' where id=4; -update noar tt set v0='R5VN14NT4BRCZ3HT79JTHVO2W9H4X' where id=5; -update noar ti set v0='R5VN14NT4BRCZ3HT79JTHVO2W9H4X' where id=5; -update noar tt set b0='Z1KDZ4QEXRFZ1WYE0O81' where id=5; -update noar ti set b0='Z1KDZ4QEXRFZ1WYE0O81' where id=5; -update noar tt set v0='OQ5K08AX2NLXEF0Y7TZ8AWEFOW5UL' where id=5; -update noar ti set v0='OQ5K08AX2NLXEF0Y7TZ8AWEFOW5UL' where id=5; -update noar tt set b1='QY5' where id=5; -update noar ti set b1='QY5' where id=5; -update noar tt set v0='68ABPZVUNIOF' where id=5; -update noar ti set v0='68ABPZVUNIOF' where id=5; -update noar tt set b2='U5MSBBG' where id=5; -update noar ti set b2='U5MSBBG' where id=5; -update noar tt set v0='0M60K' where id=6; -update noar ti set v0='0M60K' where id=6; -update noar tt set b0='CQE8YSG0P8FIEPK' where id=6; -update noar ti set b0='CQE8YSG0P8FIEPK' where id=6; -update noar tt set v0='TCGONP' where id=6; -update noar ti set v0='TCGONP' where id=6; -update noar tt set b1='WTUDN93FH9WR5EIVCC' where id=6; -update noar ti set b1='WTUDN93FH9WR5EIVCC' where id=6; -update noar tt set v0='UDBYJ2NP0L13M67FROEDNJ' where id=6; -update noar ti set v0='UDBYJ2NP0L13M67FROEDNJ' where id=6; -update noar tt set b2='KB7857KMDAE2A4ZP4H872LASYZIKI' where id=6; -update noar ti set b2='KB7857KMDAE2A4ZP4H872LASYZIKI' where id=6; -update noar tt set v0='CJN0Q' where id=7; -update noar ti set v0='CJN0Q' where id=7; -update noar tt set b0='UEX4LLVH' where id=7; -update noar ti set b0='UEX4LLVH' where id=7; -update noar tt set v0='FBDZA4KGFLK9VDBA6YF1BCB' where id=7; -update noar ti set v0='FBDZA4KGFLK9VDBA6YF1BCB' where id=7; -update noar tt set b1='Z' where id=7; -update noar ti set b1='Z' where id=7; -update noar tt set v0='PTHB1U2FB238V5AY8YWNPUD3BZZRWT' where id=7; -update noar ti set v0='PTHB1U2FB238V5AY8YWNPUD3BZZRWT' where id=7; -update noar tt set b2='OWJTW5N6I0MUL7' where id=7; -update noar ti set b2='OWJTW5N6I0MUL7' where id=7; -update noar tt set v0='I5Y0GD5PFS4148N3IX8Y0M' where id=8; -update noar ti set v0='I5Y0GD5PFS4148N3IX8Y0M' where id=8; -update noar tt set b0='JMG6XCLCSOTI7X' where id=8; -update noar ti set b0='JMG6XCLCSOTI7X' where id=8; -update noar tt set v0='7V' where id=8; -update noar ti set v0='7V' where id=8; -update noar tt set b1='L' where id=8; -update noar ti set b1='L' where id=8; -update noar tt set v0='H4F5IV445QI46N30L1A77HX' where id=8; -update noar ti set v0='H4F5IV445QI46N30L1A77HX' where id=8; -update noar tt set b2='CNBLU0YN0TW3TVZA7' where id=8; -update noar ti set b2='CNBLU0YN0TW3TVZA7' where id=8; -update noar tt set v0='A7PUDKEI861Z9JY1YPN0PTTG24SMQV' where id=9; -update noar ti set v0='A7PUDKEI861Z9JY1YPN0PTTG24SMQV' where id=9; -update noar tt set b0='YIHPA9MJ752BQCWTCFS6Z' where id=9; -update noar ti set b0='YIHPA9MJ752BQCWTCFS6Z' where id=9; -update noar tt set v0='UCHJNTO63C2M5HDX0MID5NGZTO82L5X' where id=9; -update noar ti set v0='UCHJNTO63C2M5HDX0MID5NGZTO82L5X' where id=9; -update noar tt set b1='5BQ9J410YDMIQLH5JYAK9JTNMTZ2GPFO' where id=9; -update noar ti set b1='5BQ9J410YDMIQLH5JYAK9JTNMTZ2GPFO' where id=9; -update noar tt set v0='HLUUN5PSG2EBDAER' where id=9; -update noar ti set v0='HLUUN5PSG2EBDAER' where id=9; -update noar tt set b2='HUXWVIJAC91WLWGWZ6Y' where id=9; -update noar ti set b2='HUXWVIJAC91WLWGWZ6Y' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 tinyblob not null, -b1 mediumblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='Y1HELL2FKSCKFYWHK81CHJL7TTB3C4JI' where id=1; -update noar ti set v0='Y1HELL2FKSCKFYWHK81CHJL7TTB3C4JI' where id=1; -update noar tt set b0='B1J2G22QAZLVOVP03K' where id=1; -update noar ti set b0='B1J2G22QAZLVOVP03K' where id=1; -update noar tt set v0='32M7T6IAS8' where id=1; -update noar ti set v0='32M7T6IAS8' where id=1; -update noar tt set b1='F41H0X9C4JYJ3' where id=1; -update noar ti set b1='F41H0X9C4JYJ3' where id=1; -update noar tt set v0='9YL7' where id=1; -update noar ti set v0='9YL7' where id=1; -update noar tt set b2='3' where id=1; -update noar ti set b2='3' where id=1; -update noar tt set v0='JF7H5N41N' where id=2; -update noar ti set v0='JF7H5N41N' where id=2; -update noar tt set b0='GORM0ID' where id=2; -update noar ti set b0='GORM0ID' where id=2; -update noar tt set v0='PSYD' where id=2; -update noar ti set v0='PSYD' where id=2; -update noar tt set b1='VWYUNAFKQCS5VJQ1YVM4DGT34' where id=2; -update noar ti set b1='VWYUNAFKQCS5VJQ1YVM4DGT34' where id=2; -update noar tt set v0='FKX75B0' where id=2; -update noar ti set v0='FKX75B0' where id=2; -update noar tt set b2='S' where id=2; -update noar ti set b2='S' where id=2; -update noar tt set v0='GQ3C2VIOTO' where id=3; -update noar ti set v0='GQ3C2VIOTO' where id=3; -update noar tt set b0='U0080HKSK66S1WLDI4' where id=3; -update noar ti set b0='U0080HKSK66S1WLDI4' where id=3; -update noar tt set v0='RIOXR7U1154H6' where id=3; -update noar ti set v0='RIOXR7U1154H6' where id=3; -update noar tt set b1='92OUPM55WJFZ93FVNM599USZRVTI29FD' where id=3; -update noar ti set b1='92OUPM55WJFZ93FVNM599USZRVTI29FD' where id=3; -update noar tt set v0='INSI9L7YES4S6M72OH2SB3BK8L' where id=3; -update noar ti set v0='INSI9L7YES4S6M72OH2SB3BK8L' where id=3; -update noar tt set b2='D0YFA7B23SBA7EZOYVK' where id=3; -update noar ti set b2='D0YFA7B23SBA7EZOYVK' where id=3; -update noar tt set v0='UWFW1YT9TR' where id=4; -update noar ti set v0='UWFW1YT9TR' where id=4; -update noar tt set b0='LC0JKL1H189YWRGASK7' where id=4; -update noar ti set b0='LC0JKL1H189YWRGASK7' where id=4; -update noar tt set v0='RJ0LOLIEIEI0VPYIOCEKSOSL' where id=4; -update noar ti set v0='RJ0LOLIEIEI0VPYIOCEKSOSL' where id=4; -update noar tt set b1='QI1Z6HHW7YL6J1GVMFPC4HE2110' where id=4; -update noar ti set b1='QI1Z6HHW7YL6J1GVMFPC4HE2110' where id=4; -update noar tt set v0='OLB3X9' where id=4; -update noar ti set v0='OLB3X9' where id=4; -update noar tt set b2='FR77ASOFM8DHX4WKEWXZCEQU81' where id=4; -update noar ti set b2='FR77ASOFM8DHX4WKEWXZCEQU81' where id=4; -update noar tt set v0='75EQXYSTLF9L' where id=5; -update noar ti set v0='75EQXYSTLF9L' where id=5; -update noar tt set b0='QLA96AONO9FMTQ1REJ8T9FOASIIP' where id=5; -update noar ti set b0='QLA96AONO9FMTQ1REJ8T9FOASIIP' where id=5; -update noar tt set v0='52F5SOPZCEJHDO85B80ZD9' where id=5; -update noar ti set v0='52F5SOPZCEJHDO85B80ZD9' where id=5; -update noar tt set b1='DX3P56C8RTV' where id=5; -update noar ti set b1='DX3P56C8RTV' where id=5; -update noar tt set v0='5CIRDRFLI46' where id=5; -update noar ti set v0='5CIRDRFLI46' where id=5; -update noar tt set b2='TSFZN780' where id=5; -update noar ti set b2='TSFZN780' where id=5; -update noar tt set v0='LERXY7N33M94X' where id=6; -update noar ti set v0='LERXY7N33M94X' where id=6; -update noar tt set b0='7OTMGUWQGSDQJHIRNE5F4DU7DZHPXHHZ' where id=6; -update noar ti set b0='7OTMGUWQGSDQJHIRNE5F4DU7DZHPXHHZ' where id=6; -update noar tt set v0='DJDFOB26H7LXNTX' where id=6; -update noar ti set v0='DJDFOB26H7LXNTX' where id=6; -update noar tt set b1='M3JBUKUU' where id=6; -update noar ti set b1='M3JBUKUU' where id=6; -update noar tt set v0='E2ARTWETV6PF' where id=6; -update noar ti set v0='E2ARTWETV6PF' where id=6; -update noar tt set b2='DPPCLK1SUW0VUPQ63' where id=6; -update noar ti set b2='DPPCLK1SUW0VUPQ63' where id=6; -update noar tt set v0='0LQ6P493JPNCO7YX5PFPRN8LNPL' where id=7; -update noar ti set v0='0LQ6P493JPNCO7YX5PFPRN8LNPL' where id=7; -update noar tt set b0='1QF5OTOLTC80E' where id=7; -update noar ti set b0='1QF5OTOLTC80E' where id=7; -update noar tt set v0='YKY6' where id=7; -update noar ti set v0='YKY6' where id=7; -update noar tt set b1='QT6R3RUR6BF27B' where id=7; -update noar ti set b1='QT6R3RUR6BF27B' where id=7; -update noar tt set v0='CPS2F8IV6BGIMYZP3GMJVB4I' where id=7; -update noar ti set v0='CPS2F8IV6BGIMYZP3GMJVB4I' where id=7; -update noar tt set b2='RKTFHR1Z1NP0P7VU20Z' where id=7; -update noar ti set b2='RKTFHR1Z1NP0P7VU20Z' where id=7; -update noar tt set v0='W4FR22244IVXF86053WMHMN9A6Y5LBT' where id=8; -update noar ti set v0='W4FR22244IVXF86053WMHMN9A6Y5LBT' where id=8; -update noar tt set b0='Q6K7UJDG9RPA5C1J' where id=8; -update noar ti set b0='Q6K7UJDG9RPA5C1J' where id=8; -update noar tt set v0='5Z5' where id=8; -update noar ti set v0='5Z5' where id=8; -update noar tt set b1='9ZP2C5ZOBGIKIHNG5A1HUN' where id=8; -update noar ti set b1='9ZP2C5ZOBGIKIHNG5A1HUN' where id=8; -update noar tt set v0='95ES6ZYFJS9Z9L9AM95E4YUAZS8J8' where id=8; -update noar ti set v0='95ES6ZYFJS9Z9L9AM95E4YUAZS8J8' where id=8; -update noar tt set b2='5G85BF4ME' where id=8; -update noar ti set b2='5G85BF4ME' where id=8; -update noar tt set v0='PO6I5UU' where id=9; -update noar ti set v0='PO6I5UU' where id=9; -update noar tt set b0='G8UNHO346VDSQY' where id=9; -update noar ti set b0='G8UNHO346VDSQY' where id=9; -update noar tt set v0='RU7' where id=9; -update noar ti set v0='RU7' where id=9; -update noar tt set b1='HZZ9VVU6WZPDGJVFY4CODI8ZH' where id=9; -update noar ti set b1='HZZ9VVU6WZPDGJVFY4CODI8ZH' where id=9; -update noar tt set v0='2L7ZQABVFBPMEA6UZ' where id=9; -update noar ti set v0='2L7ZQABVFBPMEA6UZ' where id=9; -update noar tt set b2='PS0LKOIW4HGSJJ27DFDX7XV5EJ' where id=9; -update noar ti set b2='PS0LKOIW4HGSJJ27DFDX7XV5EJ' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 tinyblob null, -b1 longblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='O499U2CZ1W0U5UI2Z' where id=1; -update noar ti set v0='O499U2CZ1W0U5UI2Z' where id=1; -update noar tt set b0='HOGQ6ZM7PN9OFRYJ' where id=1; -update noar ti set b0='HOGQ6ZM7PN9OFRYJ' where id=1; -update noar tt set v0='CBNRM20N' where id=1; -update noar ti set v0='CBNRM20N' where id=1; -update noar tt set b1='B1EGGLEC19FD' where id=1; -update noar ti set b1='B1EGGLEC19FD' where id=1; -update noar tt set v0='QH144WL15HL2' where id=1; -update noar ti set v0='QH144WL15HL2' where id=1; -update noar tt set b2='QW' where id=1; -update noar ti set b2='QW' where id=1; -update noar tt set v0='NN4RBU45QV5T' where id=2; -update noar ti set v0='NN4RBU45QV5T' where id=2; -update noar tt set b0='4IRAIOI2DEDW028P2Y0P4I9PW' where id=2; -update noar ti set b0='4IRAIOI2DEDW028P2Y0P4I9PW' where id=2; -update noar tt set v0='UXDZ86EVPLUYKPYG1BLB0P171MWI73' where id=2; -update noar ti set v0='UXDZ86EVPLUYKPYG1BLB0P171MWI73' where id=2; -update noar tt set b1='1CV3KS5OY6PV984WGM1V6J4H65WAWRJ' where id=2; -update noar ti set b1='1CV3KS5OY6PV984WGM1V6J4H65WAWRJ' where id=2; -update noar tt set v0='1GLZUW4P2BME97A9' where id=2; -update noar ti set v0='1GLZUW4P2BME97A9' where id=2; -update noar tt set b2='BA' where id=2; -update noar ti set b2='BA' where id=2; -update noar tt set v0='ABF9F8LHJ2FXCBXA4K12WIJLZCU3ZJ' where id=3; -update noar ti set v0='ABF9F8LHJ2FXCBXA4K12WIJLZCU3ZJ' where id=3; -update noar tt set b0='DW7C9KSN5F4F' where id=3; -update noar ti set b0='DW7C9KSN5F4F' where id=3; -update noar tt set v0='ILZZLX6XAMWY8MXTF8NQ4' where id=3; -update noar ti set v0='ILZZLX6XAMWY8MXTF8NQ4' where id=3; -update noar tt set b1='4EK0FH63EC4224EIEBE' where id=3; -update noar ti set b1='4EK0FH63EC4224EIEBE' where id=3; -update noar tt set v0='N2B6ZXIN2XPGMFXJFEZT7KXZ6R' where id=3; -update noar ti set v0='N2B6ZXIN2XPGMFXJFEZT7KXZ6R' where id=3; -update noar tt set b2='8BZS8XFLDG5NM47F20VL' where id=3; -update noar ti set b2='8BZS8XFLDG5NM47F20VL' where id=3; -update noar tt set v0='CFRL1' where id=4; -update noar ti set v0='CFRL1' where id=4; -update noar tt set b0='D6IHVPTY3E4OEHCVCG2XZI5CTX7' where id=4; -update noar ti set b0='D6IHVPTY3E4OEHCVCG2XZI5CTX7' where id=4; -update noar tt set v0='8XQWCT32XM5GUY' where id=4; -update noar ti set v0='8XQWCT32XM5GUY' where id=4; -update noar tt set b1='XU3B0LMV6' where id=4; -update noar ti set b1='XU3B0LMV6' where id=4; -update noar tt set v0='HNS54CLWPG' where id=4; -update noar ti set v0='HNS54CLWPG' where id=4; -update noar tt set b2='OCN93J' where id=4; -update noar ti set b2='OCN93J' where id=4; -update noar tt set v0='3NC3111G0' where id=5; -update noar ti set v0='3NC3111G0' where id=5; -update noar tt set b0='E7P4G7HSADKZ33JP' where id=5; -update noar ti set b0='E7P4G7HSADKZ33JP' where id=5; -update noar tt set v0='OQJOKYD3ZMO4ULOBOI5U0QE' where id=5; -update noar ti set v0='OQJOKYD3ZMO4ULOBOI5U0QE' where id=5; -update noar tt set b1='FUTBSPFJW9' where id=5; -update noar ti set b1='FUTBSPFJW9' where id=5; -update noar tt set v0='D2B382WPFCJFWUNF6DYWCU1JNRA5ZU7S' where id=5; -update noar ti set v0='D2B382WPFCJFWUNF6DYWCU1JNRA5ZU7S' where id=5; -update noar tt set b2='UGKLD2ZMDAXL8J' where id=5; -update noar ti set b2='UGKLD2ZMDAXL8J' where id=5; -update noar tt set v0='NL0' where id=6; -update noar ti set v0='NL0' where id=6; -update noar tt set b0='AFRT5VNZI6M9HBYGLNXW8S7F2AH4' where id=6; -update noar ti set b0='AFRT5VNZI6M9HBYGLNXW8S7F2AH4' where id=6; -update noar tt set v0='V9BWD3VTY6BJ3AWD1PNR' where id=6; -update noar ti set v0='V9BWD3VTY6BJ3AWD1PNR' where id=6; -update noar tt set b1='6FNDCH8SF5XB429IA5X' where id=6; -update noar ti set b1='6FNDCH8SF5XB429IA5X' where id=6; -update noar tt set v0='IF2ZL2R5MP1K2C4PEQ4SRPFI4CVW' where id=6; -update noar ti set v0='IF2ZL2R5MP1K2C4PEQ4SRPFI4CVW' where id=6; -update noar tt set b2='Z1X' where id=6; -update noar ti set b2='Z1X' where id=6; -update noar tt set v0='JP3L46DYRU57IMQUH6F11V6LD8I5PQFA' where id=7; -update noar ti set v0='JP3L46DYRU57IMQUH6F11V6LD8I5PQFA' where id=7; -update noar tt set b0='W8FEU2QI41UU' where id=7; -update noar ti set b0='W8FEU2QI41UU' where id=7; -update noar tt set v0='DTN5493H62FR4QMPLM0SHNBAY' where id=7; -update noar ti set v0='DTN5493H62FR4QMPLM0SHNBAY' where id=7; -update noar tt set b1='L' where id=7; -update noar ti set b1='L' where id=7; -update noar tt set v0='28N78LGK5681XW2O0ZQ3413N' where id=7; -update noar ti set v0='28N78LGK5681XW2O0ZQ3413N' where id=7; -update noar tt set b2='LB' where id=7; -update noar ti set b2='LB' where id=7; -update noar tt set v0='K0PXWYPVVS6UKSZXDVAD0KRCES18' where id=8; -update noar ti set v0='K0PXWYPVVS6UKSZXDVAD0KRCES18' where id=8; -update noar tt set b0='BE41M2NILQBGIFZKUVWWAXW5V' where id=8; -update noar ti set b0='BE41M2NILQBGIFZKUVWWAXW5V' where id=8; -update noar tt set v0='EA764I8854CN12SM61ZYUOLIM' where id=8; -update noar ti set v0='EA764I8854CN12SM61ZYUOLIM' where id=8; -update noar tt set b1='62C44ERE9T9B6OKFOFMJJ' where id=8; -update noar ti set b1='62C44ERE9T9B6OKFOFMJJ' where id=8; -update noar tt set v0='Z' where id=8; -update noar ti set v0='Z' where id=8; -update noar tt set b2='F' where id=8; -update noar ti set b2='F' where id=8; -update noar tt set v0='D' where id=9; -update noar ti set v0='D' where id=9; -update noar tt set b0='WLJ3G7B27FAP7' where id=9; -update noar ti set b0='WLJ3G7B27FAP7' where id=9; -update noar tt set v0='J4VVG' where id=9; -update noar ti set v0='J4VVG' where id=9; -update noar tt set b1='RW953YD6XQ8ZEYIJOTXF03TB6KX1' where id=9; -update noar ti set b1='RW953YD6XQ8ZEYIJOTXF03TB6KX1' where id=9; -update noar tt set v0='UW3BP' where id=9; -update noar ti set v0='UW3BP' where id=9; -update noar tt set b2='M5KQT1FW5W7U7JP6UU526891R' where id=9; -update noar ti set b2='M5KQT1FW5W7U7JP6UU526891R' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 tinyblob null, -b1 longblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='XF' where id=1; -update noar ti set v0='XF' where id=1; -update noar tt set b0='3' where id=1; -update noar ti set b0='3' where id=1; -update noar tt set v0='A6QOWZN4S58T5I9O1SYU' where id=1; -update noar ti set v0='A6QOWZN4S58T5I9O1SYU' where id=1; -update noar tt set b1='976UZYZWOTVTRXJXN7HZKE8I85A0K' where id=1; -update noar ti set b1='976UZYZWOTVTRXJXN7HZKE8I85A0K' where id=1; -update noar tt set v0='KASQOJAZYLH7522ZGJR7C0S' where id=1; -update noar ti set v0='KASQOJAZYLH7522ZGJR7C0S' where id=1; -update noar tt set b2='3WZ397NXLG3N' where id=1; -update noar ti set b2='3WZ397NXLG3N' where id=1; -update noar tt set v0='G15ZR759C18GH7ZRUBRMPI6' where id=2; -update noar ti set v0='G15ZR759C18GH7ZRUBRMPI6' where id=2; -update noar tt set b0='L9HOSVU9UFY82J60ER71CEO' where id=2; -update noar ti set b0='L9HOSVU9UFY82J60ER71CEO' where id=2; -update noar tt set v0='QGBSN1SYLXVBZHXF5QSE29GN4AGN' where id=2; -update noar ti set v0='QGBSN1SYLXVBZHXF5QSE29GN4AGN' where id=2; -update noar tt set b1='34LMM06001ZZ1' where id=2; -update noar ti set b1='34LMM06001ZZ1' where id=2; -update noar tt set v0='JOWCDZRHUAJS' where id=2; -update noar ti set v0='JOWCDZRHUAJS' where id=2; -update noar tt set b2='L0YP9JOAI' where id=2; -update noar ti set b2='L0YP9JOAI' where id=2; -update noar tt set v0='WS9OFMFTEA8' where id=3; -update noar ti set v0='WS9OFMFTEA8' where id=3; -update noar tt set b0='FPKZO1OKSF' where id=3; -update noar ti set b0='FPKZO1OKSF' where id=3; -update noar tt set v0='X' where id=3; -update noar ti set v0='X' where id=3; -update noar tt set b1='KTE0LMG' where id=3; -update noar ti set b1='KTE0LMG' where id=3; -update noar tt set v0='NFT97P3N' where id=3; -update noar ti set v0='NFT97P3N' where id=3; -update noar tt set b2='M0BKYAH9LAOAVA8HAFQ8' where id=3; -update noar ti set b2='M0BKYAH9LAOAVA8HAFQ8' where id=3; -update noar tt set v0='VWP5TMV4JPTEC' where id=4; -update noar ti set v0='VWP5TMV4JPTEC' where id=4; -update noar tt set b0='C863YPMAR8FZB14TSR04ILM' where id=4; -update noar ti set b0='C863YPMAR8FZB14TSR04ILM' where id=4; -update noar tt set v0='IFO2Z1JZT256W2ID6M2MPM17SJHJMS' where id=4; -update noar ti set v0='IFO2Z1JZT256W2ID6M2MPM17SJHJMS' where id=4; -update noar tt set b1='NVJGJ4BFA3LCV8G904HXRFVR' where id=4; -update noar ti set b1='NVJGJ4BFA3LCV8G904HXRFVR' where id=4; -update noar tt set v0='0NKJIY3PU9MX631CEARFT7ZSYV7BD' where id=4; -update noar ti set v0='0NKJIY3PU9MX631CEARFT7ZSYV7BD' where id=4; -update noar tt set b2='IXFWSLZ8BPF7SE5PAUO6JQ4JT10KG7FN' where id=4; -update noar ti set b2='IXFWSLZ8BPF7SE5PAUO6JQ4JT10KG7FN' where id=4; -update noar tt set v0='007UEFQYUZTFIC170KBWMHGVZ52DD' where id=5; -update noar ti set v0='007UEFQYUZTFIC170KBWMHGVZ52DD' where id=5; -update noar tt set b0='45R6A9J2WR5WFIY59L27NZCUJR76SF' where id=5; -update noar ti set b0='45R6A9J2WR5WFIY59L27NZCUJR76SF' where id=5; -update noar tt set v0='KXGQKB7M7J9' where id=5; -update noar ti set v0='KXGQKB7M7J9' where id=5; -update noar tt set b1='TTH7CLMJ55BJT90X3NPK2H' where id=5; -update noar ti set b1='TTH7CLMJ55BJT90X3NPK2H' where id=5; -update noar tt set v0='Z0JG' where id=5; -update noar ti set v0='Z0JG' where id=5; -update noar tt set b2='8V12WQ' where id=5; -update noar ti set b2='8V12WQ' where id=5; -update noar tt set v0='T5RDQMTUS4I6GG8A' where id=6; -update noar ti set v0='T5RDQMTUS4I6GG8A' where id=6; -update noar tt set b0='RXCSZUFA' where id=6; -update noar ti set b0='RXCSZUFA' where id=6; -update noar tt set v0='A78GCCEC3DFH3PBYRRJ' where id=6; -update noar ti set v0='A78GCCEC3DFH3PBYRRJ' where id=6; -update noar tt set b1='1WYJKHJ' where id=6; -update noar ti set b1='1WYJKHJ' where id=6; -update noar tt set v0='T8H438' where id=6; -update noar ti set v0='T8H438' where id=6; -update noar tt set b2='0U1C086J0CVWO667TVGWF2NCWR' where id=6; -update noar ti set b2='0U1C086J0CVWO667TVGWF2NCWR' where id=6; -update noar tt set v0='ZV9DD2K' where id=7; -update noar ti set v0='ZV9DD2K' where id=7; -update noar tt set b0='GAZRV51LRM2W7XARPJI96Q2W56JO1S' where id=7; -update noar ti set b0='GAZRV51LRM2W7XARPJI96Q2W56JO1S' where id=7; -update noar tt set v0='5B23WF2AV83ASMM86569CEWSOPD1IO' where id=7; -update noar ti set v0='5B23WF2AV83ASMM86569CEWSOPD1IO' where id=7; -update noar tt set b1='C319BC2GP5VNWH4B7K' where id=7; -update noar ti set b1='C319BC2GP5VNWH4B7K' where id=7; -update noar tt set v0='6' where id=7; -update noar ti set v0='6' where id=7; -update noar tt set b2='Q3SZ2DHXOIVE75P7PYMBD7A1LSLY' where id=7; -update noar ti set b2='Q3SZ2DHXOIVE75P7PYMBD7A1LSLY' where id=7; -update noar tt set v0='AOUSMNYZ1O3NG' where id=8; -update noar ti set v0='AOUSMNYZ1O3NG' where id=8; -update noar tt set b0='T5S15UY76FRGODV8PWRTD' where id=8; -update noar ti set b0='T5S15UY76FRGODV8PWRTD' where id=8; -update noar tt set v0='OHTUWHZ5QGM1IJ1' where id=8; -update noar ti set v0='OHTUWHZ5QGM1IJ1' where id=8; -update noar tt set b1='D5BDQWNSHW48MEC7YYKP7TH9' where id=8; -update noar ti set b1='D5BDQWNSHW48MEC7YYKP7TH9' where id=8; -update noar tt set v0='7GLJRK22AX' where id=8; -update noar ti set v0='7GLJRK22AX' where id=8; -update noar tt set b2='QTP9SXDN9KMZ2XLSCFEYQBN3S40RXZE3' where id=8; -update noar ti set b2='QTP9SXDN9KMZ2XLSCFEYQBN3S40RXZE3' where id=8; -update noar tt set v0='K9GFV5MCVWOGNW02OSARQTXIXD5MJGOA' where id=9; -update noar ti set v0='K9GFV5MCVWOGNW02OSARQTXIXD5MJGOA' where id=9; -update noar tt set b0='HW' where id=9; -update noar ti set b0='HW' where id=9; -update noar tt set v0='SMJKXITBLWIDWXTKHVFO' where id=9; -update noar ti set v0='SMJKXITBLWIDWXTKHVFO' where id=9; -update noar tt set b1='1KKUBT' where id=9; -update noar ti set b1='1KKUBT' where id=9; -update noar tt set v0='YSKSZJ54FUI5M3ZUJMRMB95T2WEOC1X8' where id=9; -update noar ti set v0='YSKSZJ54FUI5M3ZUJMRMB95T2WEOC1X8' where id=9; -update noar tt set b2='2FRG1Z3KBKZAZONJW910UZRZ5S8Z' where id=9; -update noar ti set b2='2FRG1Z3KBKZAZONJW910UZRZ5S8Z' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 tinyblob not null, -b1 longblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='AGORYO3XICF546JO' where id=1; -update noar ti set v0='AGORYO3XICF546JO' where id=1; -update noar tt set b0='DT4TGFZ02FOEZQ1YZHKUU2PM' where id=1; -update noar ti set b0='DT4TGFZ02FOEZQ1YZHKUU2PM' where id=1; -update noar tt set v0='3N4N9GK1ODC5UR7U03LY7MRTBBR125' where id=1; -update noar ti set v0='3N4N9GK1ODC5UR7U03LY7MRTBBR125' where id=1; -update noar tt set b1='L2NQR' where id=1; -update noar ti set b1='L2NQR' where id=1; -update noar tt set v0='ZF' where id=1; -update noar ti set v0='ZF' where id=1; -update noar tt set b2='5OEALYIG2NUOU1L42IED6ODGLMWVU' where id=1; -update noar ti set b2='5OEALYIG2NUOU1L42IED6ODGLMWVU' where id=1; -update noar tt set v0='VA37BM8OEW' where id=2; -update noar ti set v0='VA37BM8OEW' where id=2; -update noar tt set b0='SU4ER' where id=2; -update noar ti set b0='SU4ER' where id=2; -update noar tt set v0='ZVZ' where id=2; -update noar ti set v0='ZVZ' where id=2; -update noar tt set b1='1N0WILVRGEDP0KWFLHCVJNM' where id=2; -update noar ti set b1='1N0WILVRGEDP0KWFLHCVJNM' where id=2; -update noar tt set v0='V58CNNCU' where id=2; -update noar ti set v0='V58CNNCU' where id=2; -update noar tt set b2='8QIODIN7JXTNFF5ZY11' where id=2; -update noar ti set b2='8QIODIN7JXTNFF5ZY11' where id=2; -update noar tt set v0='WHBVGQWJ9V9' where id=3; -update noar ti set v0='WHBVGQWJ9V9' where id=3; -update noar tt set b0='FRXY4PBPM' where id=3; -update noar ti set b0='FRXY4PBPM' where id=3; -update noar tt set v0='TG4VPGMDOPZ7U0YP3FQKXP' where id=3; -update noar ti set v0='TG4VPGMDOPZ7U0YP3FQKXP' where id=3; -update noar tt set b1='BKKIPWCNZCOM4SFG6I1685' where id=3; -update noar ti set b1='BKKIPWCNZCOM4SFG6I1685' where id=3; -update noar tt set v0='FB51XUOQM8JSVNURD' where id=3; -update noar ti set v0='FB51XUOQM8JSVNURD' where id=3; -update noar tt set b2='JF466JG8VJLUTFA7RYSX' where id=3; -update noar ti set b2='JF466JG8VJLUTFA7RYSX' where id=3; -update noar tt set v0='Y19X8K12I3DJN41CB0M10M' where id=4; -update noar ti set v0='Y19X8K12I3DJN41CB0M10M' where id=4; -update noar tt set b0='G5TKU140GTS2OLMGI5LN6ROLC' where id=4; -update noar ti set b0='G5TKU140GTS2OLMGI5LN6ROLC' where id=4; -update noar tt set v0='00X' where id=4; -update noar ti set v0='00X' where id=4; -update noar tt set b1='UPK0Y' where id=4; -update noar ti set b1='UPK0Y' where id=4; -update noar tt set v0='ARLX6XOGACL8OT0NO16S' where id=4; -update noar ti set v0='ARLX6XOGACL8OT0NO16S' where id=4; -update noar tt set b2='TZNHOLJPYJN2LFQ0' where id=4; -update noar ti set b2='TZNHOLJPYJN2LFQ0' where id=4; -update noar tt set v0='WCVZS5WOX2DKE5WMAHHVHQ9SJ2DC6' where id=5; -update noar ti set v0='WCVZS5WOX2DKE5WMAHHVHQ9SJ2DC6' where id=5; -update noar tt set b0='FDTGFFYFCVKE39XRU4GU2' where id=5; -update noar ti set b0='FDTGFFYFCVKE39XRU4GU2' where id=5; -update noar tt set v0='67JQTYB3669A9ILN2ENV0ABPI3X54AH' where id=5; -update noar ti set v0='67JQTYB3669A9ILN2ENV0ABPI3X54AH' where id=5; -update noar tt set b1='CXRZ7CDSQMXTS03' where id=5; -update noar ti set b1='CXRZ7CDSQMXTS03' where id=5; -update noar tt set v0='Y5ZNL0M1AXRYWDNFPHNO67K86IEJXE0' where id=5; -update noar ti set v0='Y5ZNL0M1AXRYWDNFPHNO67K86IEJXE0' where id=5; -update noar tt set b2='S3IJ6AU434W0NNR' where id=5; -update noar ti set b2='S3IJ6AU434W0NNR' where id=5; -update noar tt set v0='OO' where id=6; -update noar ti set v0='OO' where id=6; -update noar tt set b0='0U' where id=6; -update noar ti set b0='0U' where id=6; -update noar tt set v0='BPRFO7AX' where id=6; -update noar ti set v0='BPRFO7AX' where id=6; -update noar tt set b1='HA43QB11MJGMWHOYM0UXTTZL5CG4XND' where id=6; -update noar ti set b1='HA43QB11MJGMWHOYM0UXTTZL5CG4XND' where id=6; -update noar tt set v0='FKLAWT88071J5FIWK4YPDRN8ZFVGH' where id=6; -update noar ti set v0='FKLAWT88071J5FIWK4YPDRN8ZFVGH' where id=6; -update noar tt set b2='SFDCA0GYJQ2NEKYPD0FCF947ACIAJIQQ' where id=6; -update noar ti set b2='SFDCA0GYJQ2NEKYPD0FCF947ACIAJIQQ' where id=6; -update noar tt set v0='0XOIHMW2VDC6ZV7M' where id=7; -update noar ti set v0='0XOIHMW2VDC6ZV7M' where id=7; -update noar tt set b0='3Q3QHT8UQ' where id=7; -update noar ti set b0='3Q3QHT8UQ' where id=7; -update noar tt set v0='DVPZT' where id=7; -update noar ti set v0='DVPZT' where id=7; -update noar tt set b1='PZJBM894C0ITAPPR1AC1L9YG0FD0' where id=7; -update noar ti set b1='PZJBM894C0ITAPPR1AC1L9YG0FD0' where id=7; -update noar tt set v0='DPO7CDC6JA419135ITNXEZH' where id=7; -update noar ti set v0='DPO7CDC6JA419135ITNXEZH' where id=7; -update noar tt set b2='7JEZQR1JD0O9QP' where id=7; -update noar ti set b2='7JEZQR1JD0O9QP' where id=7; -update noar tt set v0='HW5P3SW7XGW5DPDCLWZE14M3U' where id=8; -update noar ti set v0='HW5P3SW7XGW5DPDCLWZE14M3U' where id=8; -update noar tt set b0='VN1KPJ27EEYGT' where id=8; -update noar ti set b0='VN1KPJ27EEYGT' where id=8; -update noar tt set v0='A5TNYVJ5CE29Q' where id=8; -update noar ti set v0='A5TNYVJ5CE29Q' where id=8; -update noar tt set b1='91DT3KTEDGKG' where id=8; -update noar ti set b1='91DT3KTEDGKG' where id=8; -update noar tt set v0='BWVY' where id=8; -update noar ti set v0='BWVY' where id=8; -update noar tt set b2='NXBDW2864XZ65K3GBTR' where id=8; -update noar ti set b2='NXBDW2864XZ65K3GBTR' where id=8; -update noar tt set v0='C4LJBWGZI' where id=9; -update noar ti set v0='C4LJBWGZI' where id=9; -update noar tt set b0='MMFX1' where id=9; -update noar ti set b0='MMFX1' where id=9; -update noar tt set v0='PQYGKMNLJ6A3PB434R0ZZ3' where id=9; -update noar ti set v0='PQYGKMNLJ6A3PB434R0ZZ3' where id=9; -update noar tt set b1='CXLTIUK5KACD4' where id=9; -update noar ti set b1='CXLTIUK5KACD4' where id=9; -update noar tt set v0='FBC2TMO17MRZ5DP90GCLZVBUX17XE' where id=9; -update noar ti set v0='FBC2TMO17MRZ5DP90GCLZVBUX17XE' where id=9; -update noar tt set b2='6Z56T4PFMITOGQ' where id=9; -update noar ti set b2='6Z56T4PFMITOGQ' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 tinyblob not null, -b1 longblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='1IN6JSX20VB' where id=1; -update noar ti set v0='1IN6JSX20VB' where id=1; -update noar tt set b0='L9E5CTQTIXE4E8L6Z6EI76PFZHBC' where id=1; -update noar ti set b0='L9E5CTQTIXE4E8L6Z6EI76PFZHBC' where id=1; -update noar tt set v0='VB5' where id=1; -update noar ti set v0='VB5' where id=1; -update noar tt set b1='Z2XH055S871J974MO61IMS' where id=1; -update noar ti set b1='Z2XH055S871J974MO61IMS' where id=1; -update noar tt set v0='AV' where id=1; -update noar ti set v0='AV' where id=1; -update noar tt set b2='6KDRDIMINIHO908M' where id=1; -update noar ti set b2='6KDRDIMINIHO908M' where id=1; -update noar tt set v0='IS64XN3WH8N5OF1J1R' where id=2; -update noar ti set v0='IS64XN3WH8N5OF1J1R' where id=2; -update noar tt set b0='NVU2VCFUQ1B9RHO0M0PISUOG3KTK' where id=2; -update noar ti set b0='NVU2VCFUQ1B9RHO0M0PISUOG3KTK' where id=2; -update noar tt set v0='NCXQ0OXOXHLQNVE9N14V' where id=2; -update noar ti set v0='NCXQ0OXOXHLQNVE9N14V' where id=2; -update noar tt set b1='Q1N7955HTTRMSE4CR' where id=2; -update noar ti set b1='Q1N7955HTTRMSE4CR' where id=2; -update noar tt set v0='M1PHHA' where id=2; -update noar ti set v0='M1PHHA' where id=2; -update noar tt set b2='PBIO8SVVJOYWBDTHS2OJ51' where id=2; -update noar ti set b2='PBIO8SVVJOYWBDTHS2OJ51' where id=2; -update noar tt set v0='R' where id=3; -update noar ti set v0='R' where id=3; -update noar tt set b0='GA' where id=3; -update noar ti set b0='GA' where id=3; -update noar tt set v0='GMG16V2X12GR7TZ5B5F1X3IDQQMS4' where id=3; -update noar ti set v0='GMG16V2X12GR7TZ5B5F1X3IDQQMS4' where id=3; -update noar tt set b1='6IJHJ' where id=3; -update noar ti set b1='6IJHJ' where id=3; -update noar tt set v0='LTE7A9QFCWXBKC20VIMFGAVS9' where id=3; -update noar ti set v0='LTE7A9QFCWXBKC20VIMFGAVS9' where id=3; -update noar tt set b2='LG512WWLSUT8J' where id=3; -update noar ti set b2='LG512WWLSUT8J' where id=3; -update noar tt set v0='4NDWU0GK2I7RRABNP6TXUT1ZHJZZP9' where id=4; -update noar ti set v0='4NDWU0GK2I7RRABNP6TXUT1ZHJZZP9' where id=4; -update noar tt set b0='1BW56UHYXEV63T7SNH3S7AY' where id=4; -update noar ti set b0='1BW56UHYXEV63T7SNH3S7AY' where id=4; -update noar tt set v0='44XHNZ4NKEM3' where id=4; -update noar ti set v0='44XHNZ4NKEM3' where id=4; -update noar tt set b1='HQQMPW2F05HKZ97MEO12DC23TYCG' where id=4; -update noar ti set b1='HQQMPW2F05HKZ97MEO12DC23TYCG' where id=4; -update noar tt set v0='DH67CX5I5R84XPZEPQK' where id=4; -update noar ti set v0='DH67CX5I5R84XPZEPQK' where id=4; -update noar tt set b2='HMY3CDVT3GU0EQC25P' where id=4; -update noar ti set b2='HMY3CDVT3GU0EQC25P' where id=4; -update noar tt set v0='8TVGVRFK8F1STKHB6JCHTAG22D8' where id=5; -update noar ti set v0='8TVGVRFK8F1STKHB6JCHTAG22D8' where id=5; -update noar tt set b0='3AVTASCWQN6DL8QJANECKXNRLQVMFTP' where id=5; -update noar ti set b0='3AVTASCWQN6DL8QJANECKXNRLQVMFTP' where id=5; -update noar tt set v0='1OZF43HR25LIBWHR4' where id=5; -update noar ti set v0='1OZF43HR25LIBWHR4' where id=5; -update noar tt set b1='YUG1X33' where id=5; -update noar ti set b1='YUG1X33' where id=5; -update noar tt set v0='ZDCGL0AEMSJ1H5RIODK8N99DWEE04J9' where id=5; -update noar ti set v0='ZDCGL0AEMSJ1H5RIODK8N99DWEE04J9' where id=5; -update noar tt set b2='BQIF4A94AKY5' where id=5; -update noar ti set b2='BQIF4A94AKY5' where id=5; -update noar tt set v0='Y4XUS33LRKQESG22BJINOYYCW3' where id=6; -update noar ti set v0='Y4XUS33LRKQESG22BJINOYYCW3' where id=6; -update noar tt set b0='PT0250A8HK' where id=6; -update noar ti set b0='PT0250A8HK' where id=6; -update noar tt set v0='KQK1OBS0BCNQA630' where id=6; -update noar ti set v0='KQK1OBS0BCNQA630' where id=6; -update noar tt set b1='76GBXY8UG9VXVDDX5EKK4M' where id=6; -update noar ti set b1='76GBXY8UG9VXVDDX5EKK4M' where id=6; -update noar tt set v0='UXKBIB1BWBEE2VTLNWP4TEX' where id=6; -update noar ti set v0='UXKBIB1BWBEE2VTLNWP4TEX' where id=6; -update noar tt set b2='CZ4M3CIIYMCPTOO06' where id=6; -update noar ti set b2='CZ4M3CIIYMCPTOO06' where id=6; -update noar tt set v0='QAFP51MW' where id=7; -update noar ti set v0='QAFP51MW' where id=7; -update noar tt set b0='828GG2ODI1U' where id=7; -update noar ti set b0='828GG2ODI1U' where id=7; -update noar tt set v0='M2W97A2DI27EZFEA5220TSWGE' where id=7; -update noar ti set v0='M2W97A2DI27EZFEA5220TSWGE' where id=7; -update noar tt set b1='2Q2IAWITM' where id=7; -update noar ti set b1='2Q2IAWITM' where id=7; -update noar tt set v0='K8YU1VEF28VK07LAZSQG5QQLYOU8YI0J' where id=7; -update noar ti set v0='K8YU1VEF28VK07LAZSQG5QQLYOU8YI0J' where id=7; -update noar tt set b2='QS3Q6T' where id=7; -update noar ti set b2='QS3Q6T' where id=7; -update noar tt set v0='65CDRWY8HCF49GDNROB' where id=8; -update noar ti set v0='65CDRWY8HCF49GDNROB' where id=8; -update noar tt set b0='UMYRM4ZVF1O57UTEWBVJ' where id=8; -update noar ti set b0='UMYRM4ZVF1O57UTEWBVJ' where id=8; -update noar tt set v0='SECC406XNGDCQYL' where id=8; -update noar ti set v0='SECC406XNGDCQYL' where id=8; -update noar tt set b1='D391ZS4F9M352RM7LH99MC' where id=8; -update noar ti set b1='D391ZS4F9M352RM7LH99MC' where id=8; -update noar tt set v0='IK46SHTC3T8JM3DJ3' where id=8; -update noar ti set v0='IK46SHTC3T8JM3DJ3' where id=8; -update noar tt set b2='FPRI30GGVK3HKA9AH6OYIKFHPRPQF' where id=8; -update noar ti set b2='FPRI30GGVK3HKA9AH6OYIKFHPRPQF' where id=8; -update noar tt set v0='FP2L49GV21JEOLY3R8' where id=9; -update noar ti set v0='FP2L49GV21JEOLY3R8' where id=9; -update noar tt set b0='1YU0GUNLKUJXXLKX' where id=9; -update noar ti set b0='1YU0GUNLKUJXXLKX' where id=9; -update noar tt set v0='4P4U47' where id=9; -update noar ti set v0='4P4U47' where id=9; -update noar tt set b1='YJNOD22J' where id=9; -update noar ti set b1='YJNOD22J' where id=9; -update noar tt set v0='K0W7B6J3Q82M' where id=9; -update noar ti set v0='K0W7B6J3Q82M' where id=9; -update noar tt set b2='S2V60' where id=9; -update noar ti set b2='S2V60' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 tinyblob null, -b1 longblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='1K3XH' where id=1; -update noar ti set v0='1K3XH' where id=1; -update noar tt set b0='Q5U7UL4OJZDEQ1UJ4KI' where id=1; -update noar ti set b0='Q5U7UL4OJZDEQ1UJ4KI' where id=1; -update noar tt set v0='GD9SVD3KL9QT6G9DDKFL' where id=1; -update noar ti set v0='GD9SVD3KL9QT6G9DDKFL' where id=1; -update noar tt set b1='AQNDP6H' where id=1; -update noar ti set b1='AQNDP6H' where id=1; -update noar tt set v0='T0MRA5CA30' where id=1; -update noar ti set v0='T0MRA5CA30' where id=1; -update noar tt set b2='NW' where id=1; -update noar ti set b2='NW' where id=1; -update noar tt set v0='EQ2KELGR7HJORF7' where id=2; -update noar ti set v0='EQ2KELGR7HJORF7' where id=2; -update noar tt set b0='O2M1YY' where id=2; -update noar ti set b0='O2M1YY' where id=2; -update noar tt set v0='S60MYWQR1GIB50DV4P6MH' where id=2; -update noar ti set v0='S60MYWQR1GIB50DV4P6MH' where id=2; -update noar tt set b1='CXY746' where id=2; -update noar ti set b1='CXY746' where id=2; -update noar tt set v0='INY09QPW8DOZ3OE6117SAR7P3F7BRZO' where id=2; -update noar ti set v0='INY09QPW8DOZ3OE6117SAR7P3F7BRZO' where id=2; -update noar tt set b2='1JILTTMNZ7HXC' where id=2; -update noar ti set b2='1JILTTMNZ7HXC' where id=2; -update noar tt set v0='UKY0' where id=3; -update noar ti set v0='UKY0' where id=3; -update noar tt set b0='XEZM3L55QWKP1GZGD60OYE2NL0ZRTS' where id=3; -update noar ti set b0='XEZM3L55QWKP1GZGD60OYE2NL0ZRTS' where id=3; -update noar tt set v0='5' where id=3; -update noar ti set v0='5' where id=3; -update noar tt set b1='OPW0WKQKP' where id=3; -update noar ti set b1='OPW0WKQKP' where id=3; -update noar tt set v0='J' where id=3; -update noar ti set v0='J' where id=3; -update noar tt set b2='RDYGAB6NJ3T' where id=3; -update noar ti set b2='RDYGAB6NJ3T' where id=3; -update noar tt set v0='NCRHZZPZA6ROJK8UPE5CR1MSCAHC66WH' where id=4; -update noar ti set v0='NCRHZZPZA6ROJK8UPE5CR1MSCAHC66WH' where id=4; -update noar tt set b0='EZEQ9NGJY' where id=4; -update noar ti set b0='EZEQ9NGJY' where id=4; -update noar tt set v0='CR87QQSP1V8F11S98FN2ZA0FK9BO34D' where id=4; -update noar ti set v0='CR87QQSP1V8F11S98FN2ZA0FK9BO34D' where id=4; -update noar tt set b1='CU8OAFJ0UR8WVPA3KRQ7VBQYCOT' where id=4; -update noar ti set b1='CU8OAFJ0UR8WVPA3KRQ7VBQYCOT' where id=4; -update noar tt set v0='C6SR' where id=4; -update noar ti set v0='C6SR' where id=4; -update noar tt set b2='O4KC2O0Z077GMO' where id=4; -update noar ti set b2='O4KC2O0Z077GMO' where id=4; -update noar tt set v0='WPFSK' where id=5; -update noar ti set v0='WPFSK' where id=5; -update noar tt set b0='AGKZJQAUEWKZN3T' where id=5; -update noar ti set b0='AGKZJQAUEWKZN3T' where id=5; -update noar tt set v0='8TOZML' where id=5; -update noar ti set v0='8TOZML' where id=5; -update noar tt set b1='GXK' where id=5; -update noar ti set b1='GXK' where id=5; -update noar tt set v0='1F2' where id=5; -update noar ti set v0='1F2' where id=5; -update noar tt set b2='WW5K3Y46PTQNZWM4L3LC4S9O' where id=5; -update noar ti set b2='WW5K3Y46PTQNZWM4L3LC4S9O' where id=5; -update noar tt set v0='4R00D4EW2TQELDS0VRM23VBIJ3BG' where id=6; -update noar ti set v0='4R00D4EW2TQELDS0VRM23VBIJ3BG' where id=6; -update noar tt set b0='UXC7ZCMRJV997TH2L' where id=6; -update noar ti set b0='UXC7ZCMRJV997TH2L' where id=6; -update noar tt set v0='A4ZJTONCH8KVRQ5I2OP1J0H0OEG3DHZ1' where id=6; -update noar ti set v0='A4ZJTONCH8KVRQ5I2OP1J0H0OEG3DHZ1' where id=6; -update noar tt set b1='A8TPPHWCFZO9M3OVKU2WSBW' where id=6; -update noar ti set b1='A8TPPHWCFZO9M3OVKU2WSBW' where id=6; -update noar tt set v0='EK' where id=6; -update noar ti set v0='EK' where id=6; -update noar tt set b2='A5C8R19EGHH1EY13X' where id=6; -update noar ti set b2='A5C8R19EGHH1EY13X' where id=6; -update noar tt set v0='84K5KZCH' where id=7; -update noar ti set v0='84K5KZCH' where id=7; -update noar tt set b0='ZRN6I9' where id=7; -update noar ti set b0='ZRN6I9' where id=7; -update noar tt set v0='62C9J9SRW1T5G9' where id=7; -update noar ti set v0='62C9J9SRW1T5G9' where id=7; -update noar tt set b1='C8JZHUY1CSPLFA67W' where id=7; -update noar ti set b1='C8JZHUY1CSPLFA67W' where id=7; -update noar tt set v0='NRV5DNF0P8WVIZGD2FU59' where id=7; -update noar ti set v0='NRV5DNF0P8WVIZGD2FU59' where id=7; -update noar tt set b2='IGQAM71M6XU18' where id=7; -update noar ti set b2='IGQAM71M6XU18' where id=7; -update noar tt set v0='BVW7GMN482797DMHX78' where id=8; -update noar ti set v0='BVW7GMN482797DMHX78' where id=8; -update noar tt set b0='WIYVLKRBP5GOOHQAMHHHRUII' where id=8; -update noar ti set b0='WIYVLKRBP5GOOHQAMHHHRUII' where id=8; -update noar tt set v0='8O8XNMRAAZ554P8WNYXMO' where id=8; -update noar ti set v0='8O8XNMRAAZ554P8WNYXMO' where id=8; -update noar tt set b1='642HII6FZYOKV' where id=8; -update noar ti set b1='642HII6FZYOKV' where id=8; -update noar tt set v0='2KVAEW3HIJZQX' where id=8; -update noar ti set v0='2KVAEW3HIJZQX' where id=8; -update noar tt set b2='JAT4IRM4' where id=8; -update noar ti set b2='JAT4IRM4' where id=8; -update noar tt set v0='VWJMDDHFZV4LLK88' where id=9; -update noar ti set v0='VWJMDDHFZV4LLK88' where id=9; -update noar tt set b0='289MZ3YXSMQ3YCQ7PN' where id=9; -update noar ti set b0='289MZ3YXSMQ3YCQ7PN' where id=9; -update noar tt set v0='INP8LKVJ38CMMVRVVKSZ4XWCAX31P' where id=9; -update noar ti set v0='INP8LKVJ38CMMVRVVKSZ4XWCAX31P' where id=9; -update noar tt set b1='99NJUURHWDZQ1JH' where id=9; -update noar ti set b1='99NJUURHWDZQ1JH' where id=9; -update noar tt set v0='YOE6EQOHL92NVVYUHJ15O' where id=9; -update noar ti set v0='YOE6EQOHL92NVVYUHJ15O' where id=9; -update noar tt set b2='CF9RUGIO' where id=9; -update noar ti set b2='CF9RUGIO' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 tinyblob null, -b1 longblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='SLN938UF43CAA3ZH69NA16FWNMTF' where id=1; -update noar ti set v0='SLN938UF43CAA3ZH69NA16FWNMTF' where id=1; -update noar tt set b0='89O4V2FOJHTDSYI5T1C3JPSMO8J0RG4' where id=1; -update noar ti set b0='89O4V2FOJHTDSYI5T1C3JPSMO8J0RG4' where id=1; -update noar tt set v0='F9BLE' where id=1; -update noar ti set v0='F9BLE' where id=1; -update noar tt set b1='B6OJ4H6J7SFX6Q4A' where id=1; -update noar ti set b1='B6OJ4H6J7SFX6Q4A' where id=1; -update noar tt set v0='C0M2LB' where id=1; -update noar ti set v0='C0M2LB' where id=1; -update noar tt set b2='0ZREMSTZ3GWTYEY1NMT9ALSVC2T5' where id=1; -update noar ti set b2='0ZREMSTZ3GWTYEY1NMT9ALSVC2T5' where id=1; -update noar tt set v0='HOO0V05EYENEV677X9LWO88' where id=2; -update noar ti set v0='HOO0V05EYENEV677X9LWO88' where id=2; -update noar tt set b0='LXB94SJFEN87YRQGXL3BIC' where id=2; -update noar ti set b0='LXB94SJFEN87YRQGXL3BIC' where id=2; -update noar tt set v0='I4YRZD8Y2SIF66SDBFPKLB1OH4EW' where id=2; -update noar ti set v0='I4YRZD8Y2SIF66SDBFPKLB1OH4EW' where id=2; -update noar tt set b1='NC9BWOVFHD3E' where id=2; -update noar ti set b1='NC9BWOVFHD3E' where id=2; -update noar tt set v0='9XFD6MZLSP3JZOQCDKB0C8YG9H' where id=2; -update noar ti set v0='9XFD6MZLSP3JZOQCDKB0C8YG9H' where id=2; -update noar tt set b2='TOMK' where id=2; -update noar ti set b2='TOMK' where id=2; -update noar tt set v0='R0BK3AC03U8R2FYG7TLJMWG5SMMUM' where id=3; -update noar ti set v0='R0BK3AC03U8R2FYG7TLJMWG5SMMUM' where id=3; -update noar tt set b0='L78JB90Q' where id=3; -update noar ti set b0='L78JB90Q' where id=3; -update noar tt set v0='72SKBQ1KFHQUZEYOLU0' where id=3; -update noar ti set v0='72SKBQ1KFHQUZEYOLU0' where id=3; -update noar tt set b1='1X95L93FRD2BOMW1SKS' where id=3; -update noar ti set b1='1X95L93FRD2BOMW1SKS' where id=3; -update noar tt set v0='1LQ7M5PPXZQQYN1P5SMU6N8UN4' where id=3; -update noar ti set v0='1LQ7M5PPXZQQYN1P5SMU6N8UN4' where id=3; -update noar tt set b2='4A6F5WYDIL3Q220V5HI98G006MLK4IT' where id=3; -update noar ti set b2='4A6F5WYDIL3Q220V5HI98G006MLK4IT' where id=3; -update noar tt set v0='LIB92L6Z1RI8Y' where id=4; -update noar ti set v0='LIB92L6Z1RI8Y' where id=4; -update noar tt set b0='WEZM97NCABEO5SQERN' where id=4; -update noar ti set b0='WEZM97NCABEO5SQERN' where id=4; -update noar tt set v0='VJAHFANOBTHQ5RGQCSM49DNE7NOFXQ7' where id=4; -update noar ti set v0='VJAHFANOBTHQ5RGQCSM49DNE7NOFXQ7' where id=4; -update noar tt set b1='L2' where id=4; -update noar ti set b1='L2' where id=4; -update noar tt set v0='MVZ0O8' where id=4; -update noar ti set v0='MVZ0O8' where id=4; -update noar tt set b2='CRR6TN3HD8H9EKC1' where id=4; -update noar ti set b2='CRR6TN3HD8H9EKC1' where id=4; -update noar tt set v0='KQJ8A6MN6LNI0U42OXS71WVB9B520FY' where id=5; -update noar ti set v0='KQJ8A6MN6LNI0U42OXS71WVB9B520FY' where id=5; -update noar tt set b0='IDA02ZVBTMEBLLIQDE' where id=5; -update noar ti set b0='IDA02ZVBTMEBLLIQDE' where id=5; -update noar tt set v0='SWXDDGE00EXOIIWW' where id=5; -update noar ti set v0='SWXDDGE00EXOIIWW' where id=5; -update noar tt set b1='9ERJ55NSCT314' where id=5; -update noar ti set b1='9ERJ55NSCT314' where id=5; -update noar tt set v0='3TJ2CZNWZRZ' where id=5; -update noar ti set v0='3TJ2CZNWZRZ' where id=5; -update noar tt set b2='YG17' where id=5; -update noar ti set b2='YG17' where id=5; -update noar tt set v0='4SC4CW' where id=6; -update noar ti set v0='4SC4CW' where id=6; -update noar tt set b0='4V65D577IAX81KHQVECWP' where id=6; -update noar ti set b0='4V65D577IAX81KHQVECWP' where id=6; -update noar tt set v0='7Q9764PH4T3H38WB' where id=6; -update noar ti set v0='7Q9764PH4T3H38WB' where id=6; -update noar tt set b1='MBLDT' where id=6; -update noar ti set b1='MBLDT' where id=6; -update noar tt set v0='UK1QCP4I60TX2NAI6L8HLNB50EBT' where id=6; -update noar ti set v0='UK1QCP4I60TX2NAI6L8HLNB50EBT' where id=6; -update noar tt set b2='GWZ39V3CDED0ITA' where id=6; -update noar ti set b2='GWZ39V3CDED0ITA' where id=6; -update noar tt set v0='45JYABDDR9QQK7T' where id=7; -update noar ti set v0='45JYABDDR9QQK7T' where id=7; -update noar tt set b0='DTB3RO1ZFXGIJB' where id=7; -update noar ti set b0='DTB3RO1ZFXGIJB' where id=7; -update noar tt set v0='LZPHTCDNRHPQ8EM5R3OH8QCR3' where id=7; -update noar ti set v0='LZPHTCDNRHPQ8EM5R3OH8QCR3' where id=7; -update noar tt set b1='XH2FAF5QL9BT66CZLKHW97F4K92LP' where id=7; -update noar ti set b1='XH2FAF5QL9BT66CZLKHW97F4K92LP' where id=7; -update noar tt set v0='RG6991DPUJN9ZG3SSWTAXXXLDZ3G1ET' where id=7; -update noar ti set v0='RG6991DPUJN9ZG3SSWTAXXXLDZ3G1ET' where id=7; -update noar tt set b2='JNQEPXX' where id=7; -update noar ti set b2='JNQEPXX' where id=7; -update noar tt set v0='L2HHZ16U76YLMUHI58R5CMMV828' where id=8; -update noar ti set v0='L2HHZ16U76YLMUHI58R5CMMV828' where id=8; -update noar tt set b0='M0KKGLB80XBHUPNX5HS2F8VNO4UE31' where id=8; -update noar ti set b0='M0KKGLB80XBHUPNX5HS2F8VNO4UE31' where id=8; -update noar tt set v0='BVCIG' where id=8; -update noar ti set v0='BVCIG' where id=8; -update noar tt set b1='R' where id=8; -update noar ti set b1='R' where id=8; -update noar tt set v0='BKY3QTZ3QT8Z83YNQ134D' where id=8; -update noar ti set v0='BKY3QTZ3QT8Z83YNQ134D' where id=8; -update noar tt set b2='0E6WF2PBP966OKFLQIC64L5' where id=8; -update noar ti set b2='0E6WF2PBP966OKFLQIC64L5' where id=8; -update noar tt set v0='LTGS1HS06SBG4RUPSL' where id=9; -update noar ti set v0='LTGS1HS06SBG4RUPSL' where id=9; -update noar tt set b0='600YNT1CG9I8II1Q484T7S20' where id=9; -update noar ti set b0='600YNT1CG9I8II1Q484T7S20' where id=9; -update noar tt set v0='FBJ36E57STTYLNMWY7MV7VOEN' where id=9; -update noar ti set v0='FBJ36E57STTYLNMWY7MV7VOEN' where id=9; -update noar tt set b1='8EKRQ6Q7ZVDO44F21D1' where id=9; -update noar ti set b1='8EKRQ6Q7ZVDO44F21D1' where id=9; -update noar tt set v0='U808FK96FC96ZU504UG2FTBRLY3X' where id=9; -update noar ti set v0='U808FK96FC96ZU504UG2FTBRLY3X' where id=9; -update noar tt set b2='K52LZKUW3JEC6NJJPGBL4S2O5TELU81' where id=9; -update noar ti set b2='K52LZKUW3JEC6NJJPGBL4S2O5TELU81' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 tinyblob not null, -b1 longblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='Z' where id=1; -update noar ti set v0='Z' where id=1; -update noar tt set b0='MWC0GOHOIZ2KSDX44PMNF' where id=1; -update noar ti set b0='MWC0GOHOIZ2KSDX44PMNF' where id=1; -update noar tt set v0='8V3JEWQ4P8KEZDX7K3S1MW8W4LXS' where id=1; -update noar ti set v0='8V3JEWQ4P8KEZDX7K3S1MW8W4LXS' where id=1; -update noar tt set b1='MTXKVRB8DQGQ5C9BO' where id=1; -update noar ti set b1='MTXKVRB8DQGQ5C9BO' where id=1; -update noar tt set v0='HSTZL' where id=1; -update noar ti set v0='HSTZL' where id=1; -update noar tt set b2='H' where id=1; -update noar ti set b2='H' where id=1; -update noar tt set v0='EZ4H0M4CW2S8ONRN7VVN6XJOUJ3Y6' where id=2; -update noar ti set v0='EZ4H0M4CW2S8ONRN7VVN6XJOUJ3Y6' where id=2; -update noar tt set b0='MHDZET29WB0ZCZG' where id=2; -update noar ti set b0='MHDZET29WB0ZCZG' where id=2; -update noar tt set v0='MR' where id=2; -update noar ti set v0='MR' where id=2; -update noar tt set b1='4L92MFYN5WB07LL0RV927K3RWYZV' where id=2; -update noar ti set b1='4L92MFYN5WB07LL0RV927K3RWYZV' where id=2; -update noar tt set v0='55GKF9GTDJUGGS9496' where id=2; -update noar ti set v0='55GKF9GTDJUGGS9496' where id=2; -update noar tt set b2='5TV8A' where id=2; -update noar ti set b2='5TV8A' where id=2; -update noar tt set v0='MIRICDCTY8J5E8' where id=3; -update noar ti set v0='MIRICDCTY8J5E8' where id=3; -update noar tt set b0='V6' where id=3; -update noar ti set b0='V6' where id=3; -update noar tt set v0='JWCA09Y6L6MV38EZVG9RP9UOMX' where id=3; -update noar ti set v0='JWCA09Y6L6MV38EZVG9RP9UOMX' where id=3; -update noar tt set b1='UP8QQ41AK4KLP9WH5B2E04LFRC5' where id=3; -update noar ti set b1='UP8QQ41AK4KLP9WH5B2E04LFRC5' where id=3; -update noar tt set v0='V68' where id=3; -update noar ti set v0='V68' where id=3; -update noar tt set b2='TDZDTU8YFECPDPVL52K5' where id=3; -update noar ti set b2='TDZDTU8YFECPDPVL52K5' where id=3; -update noar tt set v0='EG3U3V50H965OMD9QUNDBE1Y9KZXL9R' where id=4; -update noar ti set v0='EG3U3V50H965OMD9QUNDBE1Y9KZXL9R' where id=4; -update noar tt set b0='SIVPZXBFQOEL' where id=4; -update noar ti set b0='SIVPZXBFQOEL' where id=4; -update noar tt set v0='L88CJ2NJ85SU' where id=4; -update noar ti set v0='L88CJ2NJ85SU' where id=4; -update noar tt set b1='81V74GX0AT66SVTWGCCL' where id=4; -update noar ti set b1='81V74GX0AT66SVTWGCCL' where id=4; -update noar tt set v0='UPSVGRDDU9SRJZ01FRLATCALF1P2' where id=4; -update noar ti set v0='UPSVGRDDU9SRJZ01FRLATCALF1P2' where id=4; -update noar tt set b2='ORFOLCIW' where id=4; -update noar ti set b2='ORFOLCIW' where id=4; -update noar tt set v0='8X' where id=5; -update noar ti set v0='8X' where id=5; -update noar tt set b0='F1X7' where id=5; -update noar ti set b0='F1X7' where id=5; -update noar tt set v0='ALS6T3RQ3A5CG0ZI74I4C4J' where id=5; -update noar ti set v0='ALS6T3RQ3A5CG0ZI74I4C4J' where id=5; -update noar tt set b1='5A1U3PEWESFRAVHPBA' where id=5; -update noar ti set b1='5A1U3PEWESFRAVHPBA' where id=5; -update noar tt set v0='LGY1R7' where id=5; -update noar ti set v0='LGY1R7' where id=5; -update noar tt set b2='CSFWX30MJ' where id=5; -update noar ti set b2='CSFWX30MJ' where id=5; -update noar tt set v0='H2OWF5OLGG6XLG7R8UQRTF' where id=6; -update noar ti set v0='H2OWF5OLGG6XLG7R8UQRTF' where id=6; -update noar tt set b0='W839EDPSSNWA' where id=6; -update noar ti set b0='W839EDPSSNWA' where id=6; -update noar tt set v0='D80GYNUPX2GHWFLLE' where id=6; -update noar ti set v0='D80GYNUPX2GHWFLLE' where id=6; -update noar tt set b1='LY9THUCD8X6IS53HAGJE6B' where id=6; -update noar ti set b1='LY9THUCD8X6IS53HAGJE6B' where id=6; -update noar tt set v0='4YU' where id=6; -update noar ti set v0='4YU' where id=6; -update noar tt set b2='XSRFHTT' where id=6; -update noar ti set b2='XSRFHTT' where id=6; -update noar tt set v0='UX' where id=7; -update noar ti set v0='UX' where id=7; -update noar tt set b0='ACXLW8SH2MVIS7XSVQ' where id=7; -update noar ti set b0='ACXLW8SH2MVIS7XSVQ' where id=7; -update noar tt set v0='IRNCEZSXKV4WVR3CKP3654W2RCNJ5U' where id=7; -update noar ti set v0='IRNCEZSXKV4WVR3CKP3654W2RCNJ5U' where id=7; -update noar tt set b1='88SC6AJQG57A' where id=7; -update noar ti set b1='88SC6AJQG57A' where id=7; -update noar tt set v0='UY4QV4LL491RGY' where id=7; -update noar ti set v0='UY4QV4LL491RGY' where id=7; -update noar tt set b2='I17JTP4YDM56EFP3WJ1BELH053' where id=7; -update noar ti set b2='I17JTP4YDM56EFP3WJ1BELH053' where id=7; -update noar tt set v0='JQBBY5MLRO8HKVADD5LEX368V6NXO2F' where id=8; -update noar ti set v0='JQBBY5MLRO8HKVADD5LEX368V6NXO2F' where id=8; -update noar tt set b0='KZA5M8WAGWY' where id=8; -update noar ti set b0='KZA5M8WAGWY' where id=8; -update noar tt set v0='V6' where id=8; -update noar ti set v0='V6' where id=8; -update noar tt set b1='3PXA0SJ2PYYR9OVQNCZ51Q2XMI6AWXNU' where id=8; -update noar ti set b1='3PXA0SJ2PYYR9OVQNCZ51Q2XMI6AWXNU' where id=8; -update noar tt set v0='C0OQTZ7PPS1JGK5YSVU7OZ84AJ5X' where id=8; -update noar ti set v0='C0OQTZ7PPS1JGK5YSVU7OZ84AJ5X' where id=8; -update noar tt set b2='ZHX07RQ25QI7RO4PUS0V8M8T47X3XOO' where id=8; -update noar ti set b2='ZHX07RQ25QI7RO4PUS0V8M8T47X3XOO' where id=8; -update noar tt set v0='3ET1ZHMW09EJ' where id=9; -update noar ti set v0='3ET1ZHMW09EJ' where id=9; -update noar tt set b0='NKXSINV04QK95AVATWGARD' where id=9; -update noar ti set b0='NKXSINV04QK95AVATWGARD' where id=9; -update noar tt set v0='LXM35YTGNEKVHK65' where id=9; -update noar ti set v0='LXM35YTGNEKVHK65' where id=9; -update noar tt set b1='TQ9JDEX54TAHD2' where id=9; -update noar ti set b1='TQ9JDEX54TAHD2' where id=9; -update noar tt set v0='VDV' where id=9; -update noar ti set v0='VDV' where id=9; -update noar tt set b2='5' where id=9; -update noar ti set b2='5' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 tinyblob not null, -b1 longblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='Q8IZKFPYW8BP8Q9Y7II8PRW1OWMR' where id=1; -update noar ti set v0='Q8IZKFPYW8BP8Q9Y7II8PRW1OWMR' where id=1; -update noar tt set b0='97DW2HLBA4O52WW5WK55LW524SRIUCF' where id=1; -update noar ti set b0='97DW2HLBA4O52WW5WK55LW524SRIUCF' where id=1; -update noar tt set v0='AXARTAO2RYJ40' where id=1; -update noar ti set v0='AXARTAO2RYJ40' where id=1; -update noar tt set b1='C13RQ' where id=1; -update noar ti set b1='C13RQ' where id=1; -update noar tt set v0='YJTXBC5B635DO8VPCTAC' where id=1; -update noar ti set v0='YJTXBC5B635DO8VPCTAC' where id=1; -update noar tt set b2='W5QZGI4LZYDBY8N' where id=1; -update noar ti set b2='W5QZGI4LZYDBY8N' where id=1; -update noar tt set v0='X3' where id=2; -update noar ti set v0='X3' where id=2; -update noar tt set b0='829' where id=2; -update noar ti set b0='829' where id=2; -update noar tt set v0='RPS6P' where id=2; -update noar ti set v0='RPS6P' where id=2; -update noar tt set b1='8HY84DB' where id=2; -update noar ti set b1='8HY84DB' where id=2; -update noar tt set v0='J7VXIEA6J5SYCEHLK1Y1W5BIQNCW' where id=2; -update noar ti set v0='J7VXIEA6J5SYCEHLK1Y1W5BIQNCW' where id=2; -update noar tt set b2='0RX3S1RMN648ADDVP3C2' where id=2; -update noar ti set b2='0RX3S1RMN648ADDVP3C2' where id=2; -update noar tt set v0='SC000MTAOA4Q6WIFCK9R80UHKC77HJ' where id=3; -update noar ti set v0='SC000MTAOA4Q6WIFCK9R80UHKC77HJ' where id=3; -update noar tt set b0='5T4' where id=3; -update noar ti set b0='5T4' where id=3; -update noar tt set v0='P9SZCCJ73N54DOSPBOM' where id=3; -update noar ti set v0='P9SZCCJ73N54DOSPBOM' where id=3; -update noar tt set b1='K1AMYTXXLXKV8FBPCWWYXEN4OP' where id=3; -update noar ti set b1='K1AMYTXXLXKV8FBPCWWYXEN4OP' where id=3; -update noar tt set v0='TFTNEC8BTU12BVLOERWD0Q7R3RCY' where id=3; -update noar ti set v0='TFTNEC8BTU12BVLOERWD0Q7R3RCY' where id=3; -update noar tt set b2='ZVCI1F43D0' where id=3; -update noar ti set b2='ZVCI1F43D0' where id=3; -update noar tt set v0='INJX9LLZMYWDTISDYW3J7' where id=4; -update noar ti set v0='INJX9LLZMYWDTISDYW3J7' where id=4; -update noar tt set b0='JCV2DU400JNN3SF2IZS00CAX59SCM' where id=4; -update noar ti set b0='JCV2DU400JNN3SF2IZS00CAX59SCM' where id=4; -update noar tt set v0='IRO' where id=4; -update noar ti set v0='IRO' where id=4; -update noar tt set b1='RD' where id=4; -update noar ti set b1='RD' where id=4; -update noar tt set v0='FORC4GNQDHSLW89H0IU08KCO' where id=4; -update noar ti set v0='FORC4GNQDHSLW89H0IU08KCO' where id=4; -update noar tt set b2='5O0P5YAAUE7O8SOOB7DH' where id=4; -update noar ti set b2='5O0P5YAAUE7O8SOOB7DH' where id=4; -update noar tt set v0='KRNKVK767N6I9WDC3T' where id=5; -update noar ti set v0='KRNKVK767N6I9WDC3T' where id=5; -update noar tt set b0='GGARGL' where id=5; -update noar ti set b0='GGARGL' where id=5; -update noar tt set v0='SLAXT7PPBMGGM' where id=5; -update noar ti set v0='SLAXT7PPBMGGM' where id=5; -update noar tt set b1='0H21PROOMP' where id=5; -update noar ti set b1='0H21PROOMP' where id=5; -update noar tt set v0='71BHTI3ZOKO' where id=5; -update noar ti set v0='71BHTI3ZOKO' where id=5; -update noar tt set b2='QUW8ASXOBC6W0QLOQKZP' where id=5; -update noar ti set b2='QUW8ASXOBC6W0QLOQKZP' where id=5; -update noar tt set v0='STTEY' where id=6; -update noar ti set v0='STTEY' where id=6; -update noar tt set b0='YFTA6WN5EFU214PUXNNKYL9J1S' where id=6; -update noar ti set b0='YFTA6WN5EFU214PUXNNKYL9J1S' where id=6; -update noar tt set v0='CLFCX08EPBKVI1XLY6QOE0G5PDWZZT5O' where id=6; -update noar ti set v0='CLFCX08EPBKVI1XLY6QOE0G5PDWZZT5O' where id=6; -update noar tt set b1='A8R8Z2XSAMS48' where id=6; -update noar ti set b1='A8R8Z2XSAMS48' where id=6; -update noar tt set v0='5R984I49V63I80N8FUNAXIDLWJRGE7H' where id=6; -update noar ti set v0='5R984I49V63I80N8FUNAXIDLWJRGE7H' where id=6; -update noar tt set b2='U4RBM4FEJ4B2H1XKRNFBDBTDP6WDP' where id=6; -update noar ti set b2='U4RBM4FEJ4B2H1XKRNFBDBTDP6WDP' where id=6; -update noar tt set v0='0WIKF1SKKAEZ1PM395GVMBMOIKEWJAU3' where id=7; -update noar ti set v0='0WIKF1SKKAEZ1PM395GVMBMOIKEWJAU3' where id=7; -update noar tt set b0='UKP176O557YP6KBEMYIK9POX' where id=7; -update noar ti set b0='UKP176O557YP6KBEMYIK9POX' where id=7; -update noar tt set v0='ASAQVXKLI' where id=7; -update noar ti set v0='ASAQVXKLI' where id=7; -update noar tt set b1='C4WAEUP3M3P8LF4Z08QIUN2ED3YVKP' where id=7; -update noar ti set b1='C4WAEUP3M3P8LF4Z08QIUN2ED3YVKP' where id=7; -update noar tt set v0='ERBWVMV8PZKBNRU' where id=7; -update noar ti set v0='ERBWVMV8PZKBNRU' where id=7; -update noar tt set b2='ICYRTU273A6QYMF1ANM' where id=7; -update noar ti set b2='ICYRTU273A6QYMF1ANM' where id=7; -update noar tt set v0='H62G8Z2D41MNUW34Y0K4' where id=8; -update noar ti set v0='H62G8Z2D41MNUW34Y0K4' where id=8; -update noar tt set b0='RCCGMG7C660YW3YM' where id=8; -update noar ti set b0='RCCGMG7C660YW3YM' where id=8; -update noar tt set v0='NVGVE9OMW4' where id=8; -update noar ti set v0='NVGVE9OMW4' where id=8; -update noar tt set b1='WFEMB92JM0PGU11NWVP911JLL' where id=8; -update noar ti set b1='WFEMB92JM0PGU11NWVP911JLL' where id=8; -update noar tt set v0='EUH4PS' where id=8; -update noar ti set v0='EUH4PS' where id=8; -update noar tt set b2='L0KPVX9TNA8LNRFEPCDOE2' where id=8; -update noar ti set b2='L0KPVX9TNA8LNRFEPCDOE2' where id=8; -update noar tt set v0='ARUSH6QG7Q4F5CHMULLPGU4XYBYHFUUF' where id=9; -update noar ti set v0='ARUSH6QG7Q4F5CHMULLPGU4XYBYHFUUF' where id=9; -update noar tt set b0='CSUNA2WONWB1HI71AY9XIXQ' where id=9; -update noar ti set b0='CSUNA2WONWB1HI71AY9XIXQ' where id=9; -update noar tt set v0='HXIBODJW23HMDFPJXK4LV6N9H1P0VT5' where id=9; -update noar ti set v0='HXIBODJW23HMDFPJXK4LV6N9H1P0VT5' where id=9; -update noar tt set b1='ALFBWLRFVLG' where id=9; -update noar ti set b1='ALFBWLRFVLG' where id=9; -update noar tt set v0='NE38IOVOVJLOFBZVV09VZ' where id=9; -update noar ti set v0='NE38IOVOVJLOFBZVV09VZ' where id=9; -update noar tt set b2='7C4PRT4R1A8769FV5RS0' where id=9; -update noar ti set b2='7C4PRT4R1A8769FV5RS0' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 tinyblob null, -b1 longblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='Z4OWMSJVX9KRJJLO9' where id=1; -update noar ti set v0='Z4OWMSJVX9KRJJLO9' where id=1; -update noar tt set b0='OXZ9F50W0SN' where id=1; -update noar ti set b0='OXZ9F50W0SN' where id=1; -update noar tt set v0='B19NDVZGJ9MFH' where id=1; -update noar ti set v0='B19NDVZGJ9MFH' where id=1; -update noar tt set b1='A8UHWDIG' where id=1; -update noar ti set b1='A8UHWDIG' where id=1; -update noar tt set v0='4GMZUQ5XGOXH2SU' where id=1; -update noar ti set v0='4GMZUQ5XGOXH2SU' where id=1; -update noar tt set b2='4LN8PYCOB' where id=1; -update noar ti set b2='4LN8PYCOB' where id=1; -update noar tt set v0='0E3Z4OUAWMEVB88II4G3XIH' where id=2; -update noar ti set v0='0E3Z4OUAWMEVB88II4G3XIH' where id=2; -update noar tt set b0='U7KMZF23WVFEPDKA16VHEB9Z' where id=2; -update noar ti set b0='U7KMZF23WVFEPDKA16VHEB9Z' where id=2; -update noar tt set v0='2LH5OJ9O8ZM9O512DKJ0' where id=2; -update noar ti set v0='2LH5OJ9O8ZM9O512DKJ0' where id=2; -update noar tt set b1='HDIG0' where id=2; -update noar ti set b1='HDIG0' where id=2; -update noar tt set v0='SA8Q828YDWOXRGR' where id=2; -update noar ti set v0='SA8Q828YDWOXRGR' where id=2; -update noar tt set b2='U' where id=2; -update noar ti set b2='U' where id=2; -update noar tt set v0='2XV3IJQFPB6U6O00HU66HH' where id=3; -update noar ti set v0='2XV3IJQFPB6U6O00HU66HH' where id=3; -update noar tt set b0='LXV5SYE119AF3VJJV29' where id=3; -update noar ti set b0='LXV5SYE119AF3VJJV29' where id=3; -update noar tt set v0='Y1BSH7OL6JF0GK3DW0SCCCE3CVL' where id=3; -update noar ti set v0='Y1BSH7OL6JF0GK3DW0SCCCE3CVL' where id=3; -update noar tt set b1='PFW1HS5706UVI42' where id=3; -update noar ti set b1='PFW1HS5706UVI42' where id=3; -update noar tt set v0='RW5' where id=3; -update noar ti set v0='RW5' where id=3; -update noar tt set b2='XFVWGA4PZVGGTZDZZQBK8FNIF5VELKTY' where id=3; -update noar ti set b2='XFVWGA4PZVGGTZDZZQBK8FNIF5VELKTY' where id=3; -update noar tt set v0='UQF' where id=4; -update noar ti set v0='UQF' where id=4; -update noar tt set b0='B88LE1L5IUOB0IMB' where id=4; -update noar ti set b0='B88LE1L5IUOB0IMB' where id=4; -update noar tt set v0='PI7RHD03X9QXWBE3B3YCBH' where id=4; -update noar ti set v0='PI7RHD03X9QXWBE3B3YCBH' where id=4; -update noar tt set b1='LRALB8FRE8LH84YTS2UW61' where id=4; -update noar ti set b1='LRALB8FRE8LH84YTS2UW61' where id=4; -update noar tt set v0='J28U8MKQPMFJM51FUR4T71VX5DJ' where id=4; -update noar ti set v0='J28U8MKQPMFJM51FUR4T71VX5DJ' where id=4; -update noar tt set b2='TU7OQK63' where id=4; -update noar ti set b2='TU7OQK63' where id=4; -update noar tt set v0='GM' where id=5; -update noar ti set v0='GM' where id=5; -update noar tt set b0='YX10VFTH4C' where id=5; -update noar ti set b0='YX10VFTH4C' where id=5; -update noar tt set v0='870' where id=5; -update noar ti set v0='870' where id=5; -update noar tt set b1='T0P40G' where id=5; -update noar ti set b1='T0P40G' where id=5; -update noar tt set v0='A5PB4RCW1GD0YN1VSC3BSP8APEIK' where id=5; -update noar ti set v0='A5PB4RCW1GD0YN1VSC3BSP8APEIK' where id=5; -update noar tt set b2='1CT58EU6E6J2DSSQ2' where id=5; -update noar ti set b2='1CT58EU6E6J2DSSQ2' where id=5; -update noar tt set v0='S' where id=6; -update noar ti set v0='S' where id=6; -update noar tt set b0='WYOC32VVE80T6KL5L53GXVLUP48' where id=6; -update noar ti set b0='WYOC32VVE80T6KL5L53GXVLUP48' where id=6; -update noar tt set v0='LR7BOL' where id=6; -update noar ti set v0='LR7BOL' where id=6; -update noar tt set b1='GOUEP9F' where id=6; -update noar ti set b1='GOUEP9F' where id=6; -update noar tt set v0='120MD4F' where id=6; -update noar ti set v0='120MD4F' where id=6; -update noar tt set b2='MRULR4Z133' where id=6; -update noar ti set b2='MRULR4Z133' where id=6; -update noar tt set v0='MNPVYRN0W7S7M0K' where id=7; -update noar ti set v0='MNPVYRN0W7S7M0K' where id=7; -update noar tt set b0='978O6F8PYYAZ5HKNCKQ2YEHBNF6SX' where id=7; -update noar ti set b0='978O6F8PYYAZ5HKNCKQ2YEHBNF6SX' where id=7; -update noar tt set v0='8TEAZN78DE2445UB0FRSE8FPXHM' where id=7; -update noar ti set v0='8TEAZN78DE2445UB0FRSE8FPXHM' where id=7; -update noar tt set b1='6Y8ZKJU3CUA4APVY' where id=7; -update noar ti set b1='6Y8ZKJU3CUA4APVY' where id=7; -update noar tt set v0='78RH586WLY' where id=7; -update noar ti set v0='78RH586WLY' where id=7; -update noar tt set b2='Z0' where id=7; -update noar ti set b2='Z0' where id=7; -update noar tt set v0='7QA3MTJ7B' where id=8; -update noar ti set v0='7QA3MTJ7B' where id=8; -update noar tt set b0='C53LS0W4' where id=8; -update noar ti set b0='C53LS0W4' where id=8; -update noar tt set v0='Z' where id=8; -update noar ti set v0='Z' where id=8; -update noar tt set b1='5C5HZF9AMURYW8860MKXMXLJ1D4' where id=8; -update noar ti set b1='5C5HZF9AMURYW8860MKXMXLJ1D4' where id=8; -update noar tt set v0='2OK6C72SA49D2956Y28FXO6JW57Y5RM6' where id=8; -update noar ti set v0='2OK6C72SA49D2956Y28FXO6JW57Y5RM6' where id=8; -update noar tt set b2='L2' where id=8; -update noar ti set b2='L2' where id=8; -update noar tt set v0='OR0AX8CR32A47VCFYP35F569G7XPH' where id=9; -update noar ti set v0='OR0AX8CR32A47VCFYP35F569G7XPH' where id=9; -update noar tt set b0='DJ66RI8L' where id=9; -update noar ti set b0='DJ66RI8L' where id=9; -update noar tt set v0='WZNUXG82TH5JXKMK1T5GXQT93F6NEA6C' where id=9; -update noar ti set v0='WZNUXG82TH5JXKMK1T5GXQT93F6NEA6C' where id=9; -update noar tt set b1='V9HDF' where id=9; -update noar ti set b1='V9HDF' where id=9; -update noar tt set v0='C1OBESVQ7Z16P1RSVWE5HVPCCR' where id=9; -update noar ti set v0='C1OBESVQ7Z16P1RSVWE5HVPCCR' where id=9; -update noar tt set b2='9LY3OTQNKWO6ZO5V2R6B7TY' where id=9; -update noar ti set b2='9LY3OTQNKWO6ZO5V2R6B7TY' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 tinyblob null, -b1 longblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='PHR5V7JY1WU073QOJIB56S73IF' where id=1; -update noar ti set v0='PHR5V7JY1WU073QOJIB56S73IF' where id=1; -update noar tt set b0='YDPEE02N29K5MWCWGYB1BTPW' where id=1; -update noar ti set b0='YDPEE02N29K5MWCWGYB1BTPW' where id=1; -update noar tt set v0='N6B' where id=1; -update noar ti set v0='N6B' where id=1; -update noar tt set b1='ZT2GN1XWKX76P886YGOBEG' where id=1; -update noar ti set b1='ZT2GN1XWKX76P886YGOBEG' where id=1; -update noar tt set v0='5J9' where id=1; -update noar ti set v0='5J9' where id=1; -update noar tt set b2='WIW2SI8KC14TTO8RMIR4V92WX4' where id=1; -update noar ti set b2='WIW2SI8KC14TTO8RMIR4V92WX4' where id=1; -update noar tt set v0='PE0MBBHL7MLCEJRXN7R3UJ' where id=2; -update noar ti set v0='PE0MBBHL7MLCEJRXN7R3UJ' where id=2; -update noar tt set b0='R2DC21AAZ6N9ALWARJP1QTNGML1WD' where id=2; -update noar ti set b0='R2DC21AAZ6N9ALWARJP1QTNGML1WD' where id=2; -update noar tt set v0='3WYBJXG52KK58V2BP' where id=2; -update noar ti set v0='3WYBJXG52KK58V2BP' where id=2; -update noar tt set b1='JDG' where id=2; -update noar ti set b1='JDG' where id=2; -update noar tt set v0='I210H2HYGTGKCL' where id=2; -update noar ti set v0='I210H2HYGTGKCL' where id=2; -update noar tt set b2='R1V9KA520TI2M4B' where id=2; -update noar ti set b2='R1V9KA520TI2M4B' where id=2; -update noar tt set v0='7P935LES9682SG' where id=3; -update noar ti set v0='7P935LES9682SG' where id=3; -update noar tt set b0='IWKWJE4' where id=3; -update noar ti set b0='IWKWJE4' where id=3; -update noar tt set v0='VUYA3' where id=3; -update noar ti set v0='VUYA3' where id=3; -update noar tt set b1='VJFQM' where id=3; -update noar ti set b1='VJFQM' where id=3; -update noar tt set v0='96NBM9QT1' where id=3; -update noar ti set v0='96NBM9QT1' where id=3; -update noar tt set b2='SZU' where id=3; -update noar ti set b2='SZU' where id=3; -update noar tt set v0='T9B8YK9CJ7XBG7G6RR2CF4' where id=4; -update noar ti set v0='T9B8YK9CJ7XBG7G6RR2CF4' where id=4; -update noar tt set b0='4QCRVLMJ9IJS50BTP' where id=4; -update noar ti set b0='4QCRVLMJ9IJS50BTP' where id=4; -update noar tt set v0='D96S383WHP6U6PK' where id=4; -update noar ti set v0='D96S383WHP6U6PK' where id=4; -update noar tt set b1='I5QOIHOX2ZA3PE' where id=4; -update noar ti set b1='I5QOIHOX2ZA3PE' where id=4; -update noar tt set v0='SKZJEFY75XN10' where id=4; -update noar ti set v0='SKZJEFY75XN10' where id=4; -update noar tt set b2='U04EZLXCQMYW3V3H4DALLQQMY7Q1KP6' where id=4; -update noar ti set b2='U04EZLXCQMYW3V3H4DALLQQMY7Q1KP6' where id=4; -update noar tt set v0='RMYBX5NQ8IBF6OQ1T08SBL' where id=5; -update noar ti set v0='RMYBX5NQ8IBF6OQ1T08SBL' where id=5; -update noar tt set b0='AD3N27TIWLDLLTSTAR17UIY4UH' where id=5; -update noar ti set b0='AD3N27TIWLDLLTSTAR17UIY4UH' where id=5; -update noar tt set v0='G011RPM26RZ' where id=5; -update noar ti set v0='G011RPM26RZ' where id=5; -update noar tt set b1='BDPPIL44T9VM90MCVMO7O3C' where id=5; -update noar ti set b1='BDPPIL44T9VM90MCVMO7O3C' where id=5; -update noar tt set v0='4C18KYFF0ME' where id=5; -update noar ti set v0='4C18KYFF0ME' where id=5; -update noar tt set b2='H84V0J5G64HOZPJH8IV9ZW' where id=5; -update noar ti set b2='H84V0J5G64HOZPJH8IV9ZW' where id=5; -update noar tt set v0='7MN53ZUSX1UGTHGNM2Q9' where id=6; -update noar ti set v0='7MN53ZUSX1UGTHGNM2Q9' where id=6; -update noar tt set b0='FAO3BUBZPHDUP7YF53599JA64UW1' where id=6; -update noar ti set b0='FAO3BUBZPHDUP7YF53599JA64UW1' where id=6; -update noar tt set v0='RL11BMUJI3RK87KFSRV74' where id=6; -update noar ti set v0='RL11BMUJI3RK87KFSRV74' where id=6; -update noar tt set b1='5I7' where id=6; -update noar ti set b1='5I7' where id=6; -update noar tt set v0='CD3XKD3DHJBRJBACFV24Y53HS2Q76R' where id=6; -update noar ti set v0='CD3XKD3DHJBRJBACFV24Y53HS2Q76R' where id=6; -update noar tt set b2='SP' where id=6; -update noar ti set b2='SP' where id=6; -update noar tt set v0='4VBV1HBP6MK2MGEV' where id=7; -update noar ti set v0='4VBV1HBP6MK2MGEV' where id=7; -update noar tt set b0='PMRNL0S4DFX43CEQ70E92LBO15S63' where id=7; -update noar ti set b0='PMRNL0S4DFX43CEQ70E92LBO15S63' where id=7; -update noar tt set v0='ZZCY1HXTUP629SUD1IPS5Y' where id=7; -update noar ti set v0='ZZCY1HXTUP629SUD1IPS5Y' where id=7; -update noar tt set b1='XBA19L7AOK96ZQRJI8IUCZ5X0' where id=7; -update noar ti set b1='XBA19L7AOK96ZQRJI8IUCZ5X0' where id=7; -update noar tt set v0='P06VTFH86K' where id=7; -update noar ti set v0='P06VTFH86K' where id=7; -update noar tt set b2='AD5PMS2XVLGB' where id=7; -update noar ti set b2='AD5PMS2XVLGB' where id=7; -update noar tt set v0='0QC20FZPXBIKCODRBJONNR0NUXC2SDSY' where id=8; -update noar ti set v0='0QC20FZPXBIKCODRBJONNR0NUXC2SDSY' where id=8; -update noar tt set b0='PZXM5598GDZSPH2RK' where id=8; -update noar ti set b0='PZXM5598GDZSPH2RK' where id=8; -update noar tt set v0='F346V5J05UXC749ALV' where id=8; -update noar ti set v0='F346V5J05UXC749ALV' where id=8; -update noar tt set b1='MNGKLUHW' where id=8; -update noar ti set b1='MNGKLUHW' where id=8; -update noar tt set v0='VF5RQKP6U1JC665EMC' where id=8; -update noar ti set v0='VF5RQKP6U1JC665EMC' where id=8; -update noar tt set b2='KPKFVA52DZQYAM7' where id=8; -update noar ti set b2='KPKFVA52DZQYAM7' where id=8; -update noar tt set v0='9JAUDHG1' where id=9; -update noar ti set v0='9JAUDHG1' where id=9; -update noar tt set b0='TEIH533FXWNAYHS6103XOVRG' where id=9; -update noar ti set b0='TEIH533FXWNAYHS6103XOVRG' where id=9; -update noar tt set v0='3HCG7' where id=9; -update noar ti set v0='3HCG7' where id=9; -update noar tt set b1='R5G5B45OC71VNE0XL' where id=9; -update noar ti set b1='R5G5B45OC71VNE0XL' where id=9; -update noar tt set v0='SHM2S6J5B0TD7E' where id=9; -update noar ti set v0='SHM2S6J5B0TD7E' where id=9; -update noar tt set b2='W75YOSOZM14Q43PVVOA5IS' where id=9; -update noar ti set b2='W75YOSOZM14Q43PVVOA5IS' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 tinyblob not null, -b1 longblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='WLU26SY' where id=1; -update noar ti set v0='WLU26SY' where id=1; -update noar tt set b0='YZ4TDUAVDJZG8G1YXCGI3DEPA8ZRIO' where id=1; -update noar ti set b0='YZ4TDUAVDJZG8G1YXCGI3DEPA8ZRIO' where id=1; -update noar tt set v0='0BRD64W' where id=1; -update noar ti set v0='0BRD64W' where id=1; -update noar tt set b1='RRM593JN698L1X' where id=1; -update noar ti set b1='RRM593JN698L1X' where id=1; -update noar tt set v0='UM7XVGQ5Z' where id=1; -update noar ti set v0='UM7XVGQ5Z' where id=1; -update noar tt set b2='KZQPGD' where id=1; -update noar ti set b2='KZQPGD' where id=1; -update noar tt set v0='97B7EGPHGKKVT' where id=2; -update noar ti set v0='97B7EGPHGKKVT' where id=2; -update noar tt set b0='CDALQLH7KEZRR342VS0A92C68OH' where id=2; -update noar ti set b0='CDALQLH7KEZRR342VS0A92C68OH' where id=2; -update noar tt set v0='2ETM' where id=2; -update noar ti set v0='2ETM' where id=2; -update noar tt set b1='EFQ11YOD94UJ523TC' where id=2; -update noar ti set b1='EFQ11YOD94UJ523TC' where id=2; -update noar tt set v0='VX39CALAZQIETW0VZQ8A18M9JF3Q65' where id=2; -update noar ti set v0='VX39CALAZQIETW0VZQ8A18M9JF3Q65' where id=2; -update noar tt set b2='EVT' where id=2; -update noar ti set b2='EVT' where id=2; -update noar tt set v0='HS7KQ' where id=3; -update noar ti set v0='HS7KQ' where id=3; -update noar tt set b0='NJ71T813LJVA9D2UB' where id=3; -update noar ti set b0='NJ71T813LJVA9D2UB' where id=3; -update noar tt set v0='6WL8H78VZNK40LSBMTTIGDVXE47' where id=3; -update noar ti set v0='6WL8H78VZNK40LSBMTTIGDVXE47' where id=3; -update noar tt set b1='ISW' where id=3; -update noar ti set b1='ISW' where id=3; -update noar tt set v0='MVNBNIZW619OYAD' where id=3; -update noar ti set v0='MVNBNIZW619OYAD' where id=3; -update noar tt set b2='TJRDN7EIQ16P28RO09RPOXC1PRRI5' where id=3; -update noar ti set b2='TJRDN7EIQ16P28RO09RPOXC1PRRI5' where id=3; -update noar tt set v0='6RA35JCA0GLZKT36IKSMGZE2ZI7A' where id=4; -update noar ti set v0='6RA35JCA0GLZKT36IKSMGZE2ZI7A' where id=4; -update noar tt set b0='ISM0MO' where id=4; -update noar ti set b0='ISM0MO' where id=4; -update noar tt set v0='QHECUZHAGRLIPND8POGCCHL5G4BKLUU' where id=4; -update noar ti set v0='QHECUZHAGRLIPND8POGCCHL5G4BKLUU' where id=4; -update noar tt set b1='RC0VVC355Q9EVQSJP3IIV4' where id=4; -update noar ti set b1='RC0VVC355Q9EVQSJP3IIV4' where id=4; -update noar tt set v0='6EJAXY8U078JRBAQFUFLBU6CP' where id=4; -update noar ti set v0='6EJAXY8U078JRBAQFUFLBU6CP' where id=4; -update noar tt set b2='ZQU0NF5W3' where id=4; -update noar ti set b2='ZQU0NF5W3' where id=4; -update noar tt set v0='LYIB' where id=5; -update noar ti set v0='LYIB' where id=5; -update noar tt set b0='YTTKYT' where id=5; -update noar ti set b0='YTTKYT' where id=5; -update noar tt set v0='Y5J' where id=5; -update noar ti set v0='Y5J' where id=5; -update noar tt set b1='RN3PU8YSC8YFYM1SR4WCOV' where id=5; -update noar ti set b1='RN3PU8YSC8YFYM1SR4WCOV' where id=5; -update noar tt set v0='9CKJ' where id=5; -update noar ti set v0='9CKJ' where id=5; -update noar tt set b2='X88L7YCEJE2K388800Z7FTVC233S4D2' where id=5; -update noar ti set b2='X88L7YCEJE2K388800Z7FTVC233S4D2' where id=5; -update noar tt set v0='S9VXSIGQ0RETGCC1EG3XERMJ9' where id=6; -update noar ti set v0='S9VXSIGQ0RETGCC1EG3XERMJ9' where id=6; -update noar tt set b0='KY43ISWEA2G53V6UNCVAEU' where id=6; -update noar ti set b0='KY43ISWEA2G53V6UNCVAEU' where id=6; -update noar tt set v0='LX39MDR0EP9B7UXACN83CEMWJDFFCXL' where id=6; -update noar ti set v0='LX39MDR0EP9B7UXACN83CEMWJDFFCXL' where id=6; -update noar tt set b1='FJEK0INZ48GXEYOOMFM8UJI4E71329G' where id=6; -update noar ti set b1='FJEK0INZ48GXEYOOMFM8UJI4E71329G' where id=6; -update noar tt set v0='8KXEL4T9OHE20' where id=6; -update noar ti set v0='8KXEL4T9OHE20' where id=6; -update noar tt set b2='XI' where id=6; -update noar ti set b2='XI' where id=6; -update noar tt set v0='1YZRB46JK8MLB7P6L184L4Q63IQ7' where id=7; -update noar ti set v0='1YZRB46JK8MLB7P6L184L4Q63IQ7' where id=7; -update noar tt set b0='EI' where id=7; -update noar ti set b0='EI' where id=7; -update noar tt set v0='0UEQV48I3657S45RI1UP6PBWTJJ6IE' where id=7; -update noar ti set v0='0UEQV48I3657S45RI1UP6PBWTJJ6IE' where id=7; -update noar tt set b1='03J03' where id=7; -update noar ti set b1='03J03' where id=7; -update noar tt set v0='RX5HY5' where id=7; -update noar ti set v0='RX5HY5' where id=7; -update noar tt set b2='57XF2C0DRU6WDN' where id=7; -update noar ti set b2='57XF2C0DRU6WDN' where id=7; -update noar tt set v0='9LG602GNKZHEQ0YB9ZOX' where id=8; -update noar ti set v0='9LG602GNKZHEQ0YB9ZOX' where id=8; -update noar tt set b0='MPHI3ONGH861VF' where id=8; -update noar ti set b0='MPHI3ONGH861VF' where id=8; -update noar tt set v0='5MITBB25PO5OWYPU242HZ' where id=8; -update noar ti set v0='5MITBB25PO5OWYPU242HZ' where id=8; -update noar tt set b1='2XXTYD' where id=8; -update noar ti set b1='2XXTYD' where id=8; -update noar tt set v0='MHFEI2AT1R9KLW0T6MY5U9V3YUUTA5H' where id=8; -update noar ti set v0='MHFEI2AT1R9KLW0T6MY5U9V3YUUTA5H' where id=8; -update noar tt set b2='PAQ0CTDBBQF' where id=8; -update noar ti set b2='PAQ0CTDBBQF' where id=8; -update noar tt set v0='1TG665CKQ5XN58Q' where id=9; -update noar ti set v0='1TG665CKQ5XN58Q' where id=9; -update noar tt set b0='C4TR0D0P' where id=9; -update noar ti set b0='C4TR0D0P' where id=9; -update noar tt set v0='4CI2VEBY60XZEZ44TY16X02CH921X' where id=9; -update noar ti set v0='4CI2VEBY60XZEZ44TY16X02CH921X' where id=9; -update noar tt set b1='UH9VKXEP17E' where id=9; -update noar ti set b1='UH9VKXEP17E' where id=9; -update noar tt set v0='W4SJ5OKSKXRQMUL' where id=9; -update noar ti set v0='W4SJ5OKSKXRQMUL' where id=9; -update noar tt set b2='MNULS18' where id=9; -update noar ti set b2='MNULS18' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 tinyblob not null, -b1 longblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='2YFR7YFNVBMABVD94CZ' where id=1; -update noar ti set v0='2YFR7YFNVBMABVD94CZ' where id=1; -update noar tt set b0='D1C352ZX6A4NXMJ07K2' where id=1; -update noar ti set b0='D1C352ZX6A4NXMJ07K2' where id=1; -update noar tt set v0='EDNM56X8XKUISQI1GRR2B5BD6CGBXI' where id=1; -update noar ti set v0='EDNM56X8XKUISQI1GRR2B5BD6CGBXI' where id=1; -update noar tt set b1='UWW2IIMZ' where id=1; -update noar ti set b1='UWW2IIMZ' where id=1; -update noar tt set v0='73Z1ME44RLDFYFONGR43' where id=1; -update noar ti set v0='73Z1ME44RLDFYFONGR43' where id=1; -update noar tt set b2='GLTX7S07N4TO3KS4EOCMYCZVO09T9M4' where id=1; -update noar ti set b2='GLTX7S07N4TO3KS4EOCMYCZVO09T9M4' where id=1; -update noar tt set v0='NAHVPZBIZFE9YKW9ETMZTZWQ7C4' where id=2; -update noar ti set v0='NAHVPZBIZFE9YKW9ETMZTZWQ7C4' where id=2; -update noar tt set b0='IU0G6YHBK1J9YS' where id=2; -update noar ti set b0='IU0G6YHBK1J9YS' where id=2; -update noar tt set v0='RGSAN0IW2JZ5V44L5YDP' where id=2; -update noar ti set v0='RGSAN0IW2JZ5V44L5YDP' where id=2; -update noar tt set b1='4CB53D2WRZW' where id=2; -update noar ti set b1='4CB53D2WRZW' where id=2; -update noar tt set v0='ILKAVIJV9WAJEF2PL5KZNSY' where id=2; -update noar ti set v0='ILKAVIJV9WAJEF2PL5KZNSY' where id=2; -update noar tt set b2='U1DD6E096K9BZEWNH' where id=2; -update noar ti set b2='U1DD6E096K9BZEWNH' where id=2; -update noar tt set v0='U7LJ1KK5C13EZOMEXM89QT1P08EZ' where id=3; -update noar ti set v0='U7LJ1KK5C13EZOMEXM89QT1P08EZ' where id=3; -update noar tt set b0='VRHT' where id=3; -update noar ti set b0='VRHT' where id=3; -update noar tt set v0='TY1FS55IE' where id=3; -update noar ti set v0='TY1FS55IE' where id=3; -update noar tt set b1='FNTVRMKQSSQN3Z7QXT' where id=3; -update noar ti set b1='FNTVRMKQSSQN3Z7QXT' where id=3; -update noar tt set v0='5D7G5VB9G2FOZ3VHF' where id=3; -update noar ti set v0='5D7G5VB9G2FOZ3VHF' where id=3; -update noar tt set b2='2KHZG4FU2NSE9CWHO' where id=3; -update noar ti set b2='2KHZG4FU2NSE9CWHO' where id=3; -update noar tt set v0='TAXA8L0K08MNRW6V5' where id=4; -update noar ti set v0='TAXA8L0K08MNRW6V5' where id=4; -update noar tt set b0='U5KJM4G20UPOIRIKR0XZ' where id=4; -update noar ti set b0='U5KJM4G20UPOIRIKR0XZ' where id=4; -update noar tt set v0='FASAEZ1A8E838PIIH6YB9KUO' where id=4; -update noar ti set v0='FASAEZ1A8E838PIIH6YB9KUO' where id=4; -update noar tt set b1='Y4XAX79W20RPOTLPADOKBHGX3AZBD' where id=4; -update noar ti set b1='Y4XAX79W20RPOTLPADOKBHGX3AZBD' where id=4; -update noar tt set v0='BP4TM' where id=4; -update noar ti set v0='BP4TM' where id=4; -update noar tt set b2='L1E8EAJCDCEZJBKDE993OH59WL' where id=4; -update noar ti set b2='L1E8EAJCDCEZJBKDE993OH59WL' where id=4; -update noar tt set v0='FSP6AHI4JKVAEYLP7YWH9BGMD4CH' where id=5; -update noar ti set v0='FSP6AHI4JKVAEYLP7YWH9BGMD4CH' where id=5; -update noar tt set b0='EAUUIB1B06ENPYLTKGW9HP3676Y3RGL' where id=5; -update noar ti set b0='EAUUIB1B06ENPYLTKGW9HP3676Y3RGL' where id=5; -update noar tt set v0='SJ0N28ERRQEO7CEZ6J6CBTIY0XENL7L' where id=5; -update noar ti set v0='SJ0N28ERRQEO7CEZ6J6CBTIY0XENL7L' where id=5; -update noar tt set b1='W0XNGYC' where id=5; -update noar ti set b1='W0XNGYC' where id=5; -update noar tt set v0='U84RKJTWQB9R5NWHWTN2JI6' where id=5; -update noar ti set v0='U84RKJTWQB9R5NWHWTN2JI6' where id=5; -update noar tt set b2='7WI0' where id=5; -update noar ti set b2='7WI0' where id=5; -update noar tt set v0='2ZJVWZ' where id=6; -update noar ti set v0='2ZJVWZ' where id=6; -update noar tt set b0='S6SKLIDK76UNZVFS6ES8OZBGVMS7' where id=6; -update noar ti set b0='S6SKLIDK76UNZVFS6ES8OZBGVMS7' where id=6; -update noar tt set v0='IPJORAM60NQXJI' where id=6; -update noar ti set v0='IPJORAM60NQXJI' where id=6; -update noar tt set b1='2Y0WW1' where id=6; -update noar ti set b1='2Y0WW1' where id=6; -update noar tt set v0='AEZMWB4EQIGWO8G' where id=6; -update noar ti set v0='AEZMWB4EQIGWO8G' where id=6; -update noar tt set b2='AGDY6STMHIKIS23HOJEYRJEWWCK4' where id=6; -update noar ti set b2='AGDY6STMHIKIS23HOJEYRJEWWCK4' where id=6; -update noar tt set v0='9XVL670GR8AVWKSA3662F4LYO' where id=7; -update noar ti set v0='9XVL670GR8AVWKSA3662F4LYO' where id=7; -update noar tt set b0='T' where id=7; -update noar ti set b0='T' where id=7; -update noar tt set v0='D5YVQG5QRNHRQRTP' where id=7; -update noar ti set v0='D5YVQG5QRNHRQRTP' where id=7; -update noar tt set b1='5GULAJQEFO16E7V2JRU8756SRBNWV2P' where id=7; -update noar ti set b1='5GULAJQEFO16E7V2JRU8756SRBNWV2P' where id=7; -update noar tt set v0='CEGHCLZ3Z48YEVB' where id=7; -update noar ti set v0='CEGHCLZ3Z48YEVB' where id=7; -update noar tt set b2='HSQTJAQ0B7BD' where id=7; -update noar ti set b2='HSQTJAQ0B7BD' where id=7; -update noar tt set v0='D73LVLM7' where id=8; -update noar ti set v0='D73LVLM7' where id=8; -update noar tt set b0='OQGJZH8QN8ABAFAP0NQC13P4' where id=8; -update noar ti set b0='OQGJZH8QN8ABAFAP0NQC13P4' where id=8; -update noar tt set v0='0KTTY' where id=8; -update noar ti set v0='0KTTY' where id=8; -update noar tt set b1='980R9UERD1Q' where id=8; -update noar ti set b1='980R9UERD1Q' where id=8; -update noar tt set v0='NHBXX0WNEF207MRLM0O' where id=8; -update noar ti set v0='NHBXX0WNEF207MRLM0O' where id=8; -update noar tt set b2='G9UZG8FZKV6G6187JTKJDCGCEKOZR0WX' where id=8; -update noar ti set b2='G9UZG8FZKV6G6187JTKJDCGCEKOZR0WX' where id=8; -update noar tt set v0='IR4KTP4LZO' where id=9; -update noar ti set v0='IR4KTP4LZO' where id=9; -update noar tt set b0='9OFE64610RU69' where id=9; -update noar ti set b0='9OFE64610RU69' where id=9; -update noar tt set v0='3J5P8KQB0ROFPY' where id=9; -update noar ti set v0='3J5P8KQB0ROFPY' where id=9; -update noar tt set b1='P0I23GYR6UO6NNDUE4VG' where id=9; -update noar ti set b1='P0I23GYR6UO6NNDUE4VG' where id=9; -update noar tt set v0='LV23IQFNKKCLA3RR' where id=9; -update noar ti set v0='LV23IQFNKKCLA3RR' where id=9; -update noar tt set b2='HXJPTZ45LOYP44OK8DPQSE1B1R7' where id=9; -update noar ti set b2='HXJPTZ45LOYP44OK8DPQSE1B1R7' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 tinyblob null, -b1 longblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='WKB6QCXEDAX7BKAZ7FBYFMXJ54JIZ4' where id=1; -update noar ti set v0='WKB6QCXEDAX7BKAZ7FBYFMXJ54JIZ4' where id=1; -update noar tt set b0='DAARWNBBKGNY0JBR1CD6W' where id=1; -update noar ti set b0='DAARWNBBKGNY0JBR1CD6W' where id=1; -update noar tt set v0='4YGA2EABOXMSCKOA' where id=1; -update noar ti set v0='4YGA2EABOXMSCKOA' where id=1; -update noar tt set b1='NFFFZVKDVLR' where id=1; -update noar ti set b1='NFFFZVKDVLR' where id=1; -update noar tt set v0='9I6KRK9IAX12CG7I2M7QITVNNNBXIG' where id=1; -update noar ti set v0='9I6KRK9IAX12CG7I2M7QITVNNNBXIG' where id=1; -update noar tt set b2='ETBQGKPB0A9Q2YULI8BHZ' where id=1; -update noar ti set b2='ETBQGKPB0A9Q2YULI8BHZ' where id=1; -update noar tt set v0='7S5KZ52Z2NNIIXV5XZBS' where id=2; -update noar ti set v0='7S5KZ52Z2NNIIXV5XZBS' where id=2; -update noar tt set b0='GDFU' where id=2; -update noar ti set b0='GDFU' where id=2; -update noar tt set v0='IM5YJ456Q7A0OZRTTEK7' where id=2; -update noar ti set v0='IM5YJ456Q7A0OZRTTEK7' where id=2; -update noar tt set b1='4Q4M2ZU4ODH33NYFX1MGDY1O967OE' where id=2; -update noar ti set b1='4Q4M2ZU4ODH33NYFX1MGDY1O967OE' where id=2; -update noar tt set v0='5L' where id=2; -update noar ti set v0='5L' where id=2; -update noar tt set b2='Q8XV5WET3W2ARGFM' where id=2; -update noar ti set b2='Q8XV5WET3W2ARGFM' where id=2; -update noar tt set v0='RRE0FA0' where id=3; -update noar ti set v0='RRE0FA0' where id=3; -update noar tt set b0='77LG4G1XJ1GN58QXHZEK7WF657GLL' where id=3; -update noar ti set b0='77LG4G1XJ1GN58QXHZEK7WF657GLL' where id=3; -update noar tt set v0='JO' where id=3; -update noar ti set v0='JO' where id=3; -update noar tt set b1='O230MX7LSTX8F3MY4R3N1' where id=3; -update noar ti set b1='O230MX7LSTX8F3MY4R3N1' where id=3; -update noar tt set v0='J3JEPDQ028UY4MT9MM' where id=3; -update noar ti set v0='J3JEPDQ028UY4MT9MM' where id=3; -update noar tt set b2='LBKFFTPKEVT760XOGV2' where id=3; -update noar ti set b2='LBKFFTPKEVT760XOGV2' where id=3; -update noar tt set v0='FD5P55NA3IIYPAR9WNOKGN21K' where id=4; -update noar ti set v0='FD5P55NA3IIYPAR9WNOKGN21K' where id=4; -update noar tt set b0='FM1CGVMA25LKCJPW06TM3S11' where id=4; -update noar ti set b0='FM1CGVMA25LKCJPW06TM3S11' where id=4; -update noar tt set v0='N' where id=4; -update noar ti set v0='N' where id=4; -update noar tt set b1='8FGHZT4SDT' where id=4; -update noar ti set b1='8FGHZT4SDT' where id=4; -update noar tt set v0='JGM5NWCYN0OFWKR417AJHODI75D' where id=4; -update noar ti set v0='JGM5NWCYN0OFWKR417AJHODI75D' where id=4; -update noar tt set b2='T7CWNK' where id=4; -update noar ti set b2='T7CWNK' where id=4; -update noar tt set v0='57W4FXI' where id=5; -update noar ti set v0='57W4FXI' where id=5; -update noar tt set b0='0MVW2VNB2FJHNONA' where id=5; -update noar ti set b0='0MVW2VNB2FJHNONA' where id=5; -update noar tt set v0='AHZWOCT' where id=5; -update noar ti set v0='AHZWOCT' where id=5; -update noar tt set b1='1WPFSUBUWOSGNWMSTGTGZ5' where id=5; -update noar ti set b1='1WPFSUBUWOSGNWMSTGTGZ5' where id=5; -update noar tt set v0='V4C6EK' where id=5; -update noar ti set v0='V4C6EK' where id=5; -update noar tt set b2='WFLN792PV0T7SZH1D' where id=5; -update noar ti set b2='WFLN792PV0T7SZH1D' where id=5; -update noar tt set v0='KEE87BO2779WDXH4DFKJJJQ2Z95T' where id=6; -update noar ti set v0='KEE87BO2779WDXH4DFKJJJQ2Z95T' where id=6; -update noar tt set b0='X' where id=6; -update noar ti set b0='X' where id=6; -update noar tt set v0='U7PLXDX4B0EPOGEHSI' where id=6; -update noar ti set v0='U7PLXDX4B0EPOGEHSI' where id=6; -update noar tt set b1='51NY1VUXRQGPYO' where id=6; -update noar ti set b1='51NY1VUXRQGPYO' where id=6; -update noar tt set v0='3GPYI35AKG3018X8BYVL5' where id=6; -update noar ti set v0='3GPYI35AKG3018X8BYVL5' where id=6; -update noar tt set b2='PHVNHICZ1MY39XI0JQV0E' where id=6; -update noar ti set b2='PHVNHICZ1MY39XI0JQV0E' where id=6; -update noar tt set v0='BAPY2FCG8BJ3ZR3DMI1MB' where id=7; -update noar ti set v0='BAPY2FCG8BJ3ZR3DMI1MB' where id=7; -update noar tt set b0='IOJH0GMSX9H2HZT' where id=7; -update noar ti set b0='IOJH0GMSX9H2HZT' where id=7; -update noar tt set v0='LO1908ZMFVVWW1OX3ZJZGJ0TS2J2QH' where id=7; -update noar ti set v0='LO1908ZMFVVWW1OX3ZJZGJ0TS2J2QH' where id=7; -update noar tt set b1='S7XAKSSGSXNIMPWBN7ULY95ETF3U2' where id=7; -update noar ti set b1='S7XAKSSGSXNIMPWBN7ULY95ETF3U2' where id=7; -update noar tt set v0='URKDP2MZNHHA3BLJM' where id=7; -update noar ti set v0='URKDP2MZNHHA3BLJM' where id=7; -update noar tt set b2='OUPA298IPRTHVWA5WUK0IS' where id=7; -update noar ti set b2='OUPA298IPRTHVWA5WUK0IS' where id=7; -update noar tt set v0='I9N2HBC11AYL24SX5M1NOPFD3M' where id=8; -update noar ti set v0='I9N2HBC11AYL24SX5M1NOPFD3M' where id=8; -update noar tt set b0='UUCWYUY0NR1DM8ZJ2WQ5' where id=8; -update noar ti set b0='UUCWYUY0NR1DM8ZJ2WQ5' where id=8; -update noar tt set v0='N7XFLJ' where id=8; -update noar ti set v0='N7XFLJ' where id=8; -update noar tt set b1='3VQY8R26AZ' where id=8; -update noar ti set b1='3VQY8R26AZ' where id=8; -update noar tt set v0='L3GG39QTMJAK3GMA46ZDPU' where id=8; -update noar ti set v0='L3GG39QTMJAK3GMA46ZDPU' where id=8; -update noar tt set b2='NMMCGNOWUTG19E9L266G4YPLKMY5A' where id=8; -update noar ti set b2='NMMCGNOWUTG19E9L266G4YPLKMY5A' where id=8; -update noar tt set v0='C2FQ96XNGUYC84D7HA9' where id=9; -update noar ti set v0='C2FQ96XNGUYC84D7HA9' where id=9; -update noar tt set b0='6U2M544B1UHZ' where id=9; -update noar ti set b0='6U2M544B1UHZ' where id=9; -update noar tt set v0='8JWSNHHEVZJS9PWV8VOW2GYGKRJ' where id=9; -update noar ti set v0='8JWSNHHEVZJS9PWV8VOW2GYGKRJ' where id=9; -update noar tt set b1='KHT6ABJV82' where id=9; -update noar ti set b1='KHT6ABJV82' where id=9; -update noar tt set v0='IDSLWB500SW2' where id=9; -update noar ti set v0='IDSLWB500SW2' where id=9; -update noar tt set b2='V8N7Q3W2' where id=9; -update noar ti set b2='V8N7Q3W2' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 tinyblob null, -b1 longblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='ZZQW0' where id=1; -update noar ti set v0='ZZQW0' where id=1; -update noar tt set b0='7W4HXNM2XQK5AH7NK1NP4OTXY85O4' where id=1; -update noar ti set b0='7W4HXNM2XQK5AH7NK1NP4OTXY85O4' where id=1; -update noar tt set v0='B51PLR39FSU741IED7JECCK7I3AFW6X' where id=1; -update noar ti set v0='B51PLR39FSU741IED7JECCK7I3AFW6X' where id=1; -update noar tt set b1='RQXOPJA6BWUOFKRY9VAZ' where id=1; -update noar ti set b1='RQXOPJA6BWUOFKRY9VAZ' where id=1; -update noar tt set v0='47O53I7DQFNDKOE9C91FTL03TES83OY' where id=1; -update noar ti set v0='47O53I7DQFNDKOE9C91FTL03TES83OY' where id=1; -update noar tt set b2='61GNDMNKWG59R5' where id=1; -update noar ti set b2='61GNDMNKWG59R5' where id=1; -update noar tt set v0='XM' where id=2; -update noar ti set v0='XM' where id=2; -update noar tt set b0='8X1WG83G2J' where id=2; -update noar ti set b0='8X1WG83G2J' where id=2; -update noar tt set v0='QAT1XOC' where id=2; -update noar ti set v0='QAT1XOC' where id=2; -update noar tt set b1='E7RZJTH1OUESGS9C7RV' where id=2; -update noar ti set b1='E7RZJTH1OUESGS9C7RV' where id=2; -update noar tt set v0='M8U02EG0' where id=2; -update noar ti set v0='M8U02EG0' where id=2; -update noar tt set b2='34O31HYEZYA6OJ3S9MLMUX' where id=2; -update noar ti set b2='34O31HYEZYA6OJ3S9MLMUX' where id=2; -update noar tt set v0='NOOIGJ1O42AEW7W5' where id=3; -update noar ti set v0='NOOIGJ1O42AEW7W5' where id=3; -update noar tt set b0='CETXM13QUCLHFNKMLWBWFDR' where id=3; -update noar ti set b0='CETXM13QUCLHFNKMLWBWFDR' where id=3; -update noar tt set v0='33GYEI3CBGMM4U5K' where id=3; -update noar ti set v0='33GYEI3CBGMM4U5K' where id=3; -update noar tt set b1='1HCE9MO3N' where id=3; -update noar ti set b1='1HCE9MO3N' where id=3; -update noar tt set v0='V' where id=3; -update noar ti set v0='V' where id=3; -update noar tt set b2='R9YTXMJLWQYR4C3S' where id=3; -update noar ti set b2='R9YTXMJLWQYR4C3S' where id=3; -update noar tt set v0='E81P6G145R87UTORECCZD66' where id=4; -update noar ti set v0='E81P6G145R87UTORECCZD66' where id=4; -update noar tt set b0='UHJDD49RGA3O5' where id=4; -update noar ti set b0='UHJDD49RGA3O5' where id=4; -update noar tt set v0='MJNR' where id=4; -update noar ti set v0='MJNR' where id=4; -update noar tt set b1='U5ZGGNWWXDGNQ2L3KVBUS' where id=4; -update noar ti set b1='U5ZGGNWWXDGNQ2L3KVBUS' where id=4; -update noar tt set v0='9JBZ2V72NV487MCABXNJFAGO88AAOWKZ' where id=4; -update noar ti set v0='9JBZ2V72NV487MCABXNJFAGO88AAOWKZ' where id=4; -update noar tt set b2='988U81QQL4IQ0ADZC7R0X3G0P' where id=4; -update noar ti set b2='988U81QQL4IQ0ADZC7R0X3G0P' where id=4; -update noar tt set v0='P5NDB15L65' where id=5; -update noar ti set v0='P5NDB15L65' where id=5; -update noar tt set b0='6DE6IE9M5I8BMNWEEHD94LFLZTYNYB' where id=5; -update noar ti set b0='6DE6IE9M5I8BMNWEEHD94LFLZTYNYB' where id=5; -update noar tt set v0='JJ78W2LVS1PNB3E7QBQFZH9MF877GV' where id=5; -update noar ti set v0='JJ78W2LVS1PNB3E7QBQFZH9MF877GV' where id=5; -update noar tt set b1='YRJPD7M76CU1G41PTS7ACSW2R30MZK1' where id=5; -update noar ti set b1='YRJPD7M76CU1G41PTS7ACSW2R30MZK1' where id=5; -update noar tt set v0='NLFLSAHM3Z7ST1BUEDUJF9' where id=5; -update noar ti set v0='NLFLSAHM3Z7ST1BUEDUJF9' where id=5; -update noar tt set b2='1DCP49QBNMLDZ507ECDLB7' where id=5; -update noar ti set b2='1DCP49QBNMLDZ507ECDLB7' where id=5; -update noar tt set v0='5OZBK90SEOWDD1E8WMSFCXLM' where id=6; -update noar ti set v0='5OZBK90SEOWDD1E8WMSFCXLM' where id=6; -update noar tt set b0='NUW1486JETPZFX50QPY6MXMMX' where id=6; -update noar ti set b0='NUW1486JETPZFX50QPY6MXMMX' where id=6; -update noar tt set v0='WDW7UDYLT6' where id=6; -update noar ti set v0='WDW7UDYLT6' where id=6; -update noar tt set b1='16205VJ3A0H7AZHA2' where id=6; -update noar ti set b1='16205VJ3A0H7AZHA2' where id=6; -update noar tt set v0='8QDJ' where id=6; -update noar ti set v0='8QDJ' where id=6; -update noar tt set b2='81575WF9W996JIP69N8E7R9CK2GA5PZ' where id=6; -update noar ti set b2='81575WF9W996JIP69N8E7R9CK2GA5PZ' where id=6; -update noar tt set v0='6GX3TE227BR0JBHVOZL5B5XUE8C7HMX' where id=7; -update noar ti set v0='6GX3TE227BR0JBHVOZL5B5XUE8C7HMX' where id=7; -update noar tt set b0='PAZR4B5S0' where id=7; -update noar ti set b0='PAZR4B5S0' where id=7; -update noar tt set v0='WI7OK8UVVDDBOBP5AYOMTKMS' where id=7; -update noar ti set v0='WI7OK8UVVDDBOBP5AYOMTKMS' where id=7; -update noar tt set b1='4' where id=7; -update noar ti set b1='4' where id=7; -update noar tt set v0='799XGAZ' where id=7; -update noar ti set v0='799XGAZ' where id=7; -update noar tt set b2='FZNOA' where id=7; -update noar ti set b2='FZNOA' where id=7; -update noar tt set v0='3FYM7UQLA91GXXIPHLXNPC9DMCCCM' where id=8; -update noar ti set v0='3FYM7UQLA91GXXIPHLXNPC9DMCCCM' where id=8; -update noar tt set b0='VPA5DHCSJLSJXIQDRSNSZMUHAXDW0PV' where id=8; -update noar ti set b0='VPA5DHCSJLSJXIQDRSNSZMUHAXDW0PV' where id=8; -update noar tt set v0='388H8ZC0KXRDBSG0JM58S9BJ29CIC2' where id=8; -update noar ti set v0='388H8ZC0KXRDBSG0JM58S9BJ29CIC2' where id=8; -update noar tt set b1='TIS1BLSO4F5HR1EG6ILDA6' where id=8; -update noar ti set b1='TIS1BLSO4F5HR1EG6ILDA6' where id=8; -update noar tt set v0='WDCJXV7J' where id=8; -update noar ti set v0='WDCJXV7J' where id=8; -update noar tt set b2='1VMSSOHVNHSEC0UC' where id=8; -update noar ti set b2='1VMSSOHVNHSEC0UC' where id=8; -update noar tt set v0='HQW9COPGPDMPTEEYGCVDUGJZAEPP' where id=9; -update noar ti set v0='HQW9COPGPDMPTEEYGCVDUGJZAEPP' where id=9; -update noar tt set b0='OSV32IDKYFMCG9PUGAT' where id=9; -update noar ti set b0='OSV32IDKYFMCG9PUGAT' where id=9; -update noar tt set v0='RNTGZDG3C5RFPE3EJS5N' where id=9; -update noar ti set v0='RNTGZDG3C5RFPE3EJS5N' where id=9; -update noar tt set b1='KKB7D0T3X4K09AE274GUS4PGB7OG6' where id=9; -update noar ti set b1='KKB7D0T3X4K09AE274GUS4PGB7OG6' where id=9; -update noar tt set v0='EGJJMA4IGGHY75QJAT211' where id=9; -update noar ti set v0='EGJJMA4IGGHY75QJAT211' where id=9; -update noar tt set b2='X9MA2TTQ19F50H' where id=9; -update noar ti set b2='X9MA2TTQ19F50H' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 tinyblob not null, -b1 longblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='ZBU2S38J3Q' where id=1; -update noar ti set v0='ZBU2S38J3Q' where id=1; -update noar tt set b0='Q2APNIMUSV2BHWZBZN6D8CDV' where id=1; -update noar ti set b0='Q2APNIMUSV2BHWZBZN6D8CDV' where id=1; -update noar tt set v0='DFYL6ZEYN7KA7LUONEJDAYEI0ZZMDWO' where id=1; -update noar ti set v0='DFYL6ZEYN7KA7LUONEJDAYEI0ZZMDWO' where id=1; -update noar tt set b1='M4OMQCR4GF2P60O895UZB' where id=1; -update noar ti set b1='M4OMQCR4GF2P60O895UZB' where id=1; -update noar tt set v0='CDDEHV' where id=1; -update noar ti set v0='CDDEHV' where id=1; -update noar tt set b2='M' where id=1; -update noar ti set b2='M' where id=1; -update noar tt set v0='KJ1S' where id=2; -update noar ti set v0='KJ1S' where id=2; -update noar tt set b0='TCZYCUZHHXKZ9G4JQDE' where id=2; -update noar ti set b0='TCZYCUZHHXKZ9G4JQDE' where id=2; -update noar tt set v0='7A58D22DZGY88D841RTD37OTLTH2R' where id=2; -update noar ti set v0='7A58D22DZGY88D841RTD37OTLTH2R' where id=2; -update noar tt set b1='9JLXP35NVDZ8VVI3H4QHMW' where id=2; -update noar ti set b1='9JLXP35NVDZ8VVI3H4QHMW' where id=2; -update noar tt set v0='AWMYMUIE7R7P59MM7XLCZ6' where id=2; -update noar ti set v0='AWMYMUIE7R7P59MM7XLCZ6' where id=2; -update noar tt set b2='P0U3H2NB0' where id=2; -update noar ti set b2='P0U3H2NB0' where id=2; -update noar tt set v0='WCOGGI5M' where id=3; -update noar ti set v0='WCOGGI5M' where id=3; -update noar tt set b0='TJRGZCN2SK2MMZON' where id=3; -update noar ti set b0='TJRGZCN2SK2MMZON' where id=3; -update noar tt set v0='7Q9' where id=3; -update noar ti set v0='7Q9' where id=3; -update noar tt set b1='IUC1ZAA0ZA6GNXWBBLHSKSBCP0SZ' where id=3; -update noar ti set b1='IUC1ZAA0ZA6GNXWBBLHSKSBCP0SZ' where id=3; -update noar tt set v0='HY1WKSR1H41EK28ZT' where id=3; -update noar ti set v0='HY1WKSR1H41EK28ZT' where id=3; -update noar tt set b2='630P3T988T7BBXM316RYT204' where id=3; -update noar ti set b2='630P3T988T7BBXM316RYT204' where id=3; -update noar tt set v0='6YEHRUFDST3B494335LRIMI9B519GW' where id=4; -update noar ti set v0='6YEHRUFDST3B494335LRIMI9B519GW' where id=4; -update noar tt set b0='BFKSIKTHXNVWFK7BU7CNB' where id=4; -update noar ti set b0='BFKSIKTHXNVWFK7BU7CNB' where id=4; -update noar tt set v0='0UEFCV' where id=4; -update noar ti set v0='0UEFCV' where id=4; -update noar tt set b1='30QD8KKVKXK8RXV597RRSTDKWP' where id=4; -update noar ti set b1='30QD8KKVKXK8RXV597RRSTDKWP' where id=4; -update noar tt set v0='1B8XNQ68X3REHRKV88G' where id=4; -update noar ti set v0='1B8XNQ68X3REHRKV88G' where id=4; -update noar tt set b2='7FELDTKWBV0KDTUR9OVC386L84EOV' where id=4; -update noar ti set b2='7FELDTKWBV0KDTUR9OVC386L84EOV' where id=4; -update noar tt set v0='BTNXKAWFSF9OGPRA5O1W2V32' where id=5; -update noar ti set v0='BTNXKAWFSF9OGPRA5O1W2V32' where id=5; -update noar tt set b0='29DZCELJRA522PU4OBJN6LEAMX5' where id=5; -update noar ti set b0='29DZCELJRA522PU4OBJN6LEAMX5' where id=5; -update noar tt set v0='422P9V03QR5Z3EVXW3KS92UE4' where id=5; -update noar ti set v0='422P9V03QR5Z3EVXW3KS92UE4' where id=5; -update noar tt set b1='MWWS1' where id=5; -update noar ti set b1='MWWS1' where id=5; -update noar tt set v0='DH9ZSREW1GJE0D24N5ERMRN1HZ' where id=5; -update noar ti set v0='DH9ZSREW1GJE0D24N5ERMRN1HZ' where id=5; -update noar tt set b2='7Z5BKGMF8AN1DQVG14A2ZTHW493E3K3C' where id=5; -update noar ti set b2='7Z5BKGMF8AN1DQVG14A2ZTHW493E3K3C' where id=5; -update noar tt set v0='JLB' where id=6; -update noar ti set v0='JLB' where id=6; -update noar tt set b0='AK4LL4Q12KMBV8LZYJ72Y4N0K' where id=6; -update noar ti set b0='AK4LL4Q12KMBV8LZYJ72Y4N0K' where id=6; -update noar tt set v0='YTXSMOJRCPR9W07XF1YMBPNSA9NBPZ' where id=6; -update noar ti set v0='YTXSMOJRCPR9W07XF1YMBPNSA9NBPZ' where id=6; -update noar tt set b1='BSQAMBT0ADXTQ5JUG0D8OXMICJ7C' where id=6; -update noar ti set b1='BSQAMBT0ADXTQ5JUG0D8OXMICJ7C' where id=6; -update noar tt set v0='JKCE76V6TKL2QSVB5' where id=6; -update noar ti set v0='JKCE76V6TKL2QSVB5' where id=6; -update noar tt set b2='XT69OFIKI1K3UVKOFAC2D0FHQ2DK6D2F' where id=6; -update noar ti set b2='XT69OFIKI1K3UVKOFAC2D0FHQ2DK6D2F' where id=6; -update noar tt set v0='HMUV51G' where id=7; -update noar ti set v0='HMUV51G' where id=7; -update noar tt set b0='47L401XYM4' where id=7; -update noar ti set b0='47L401XYM4' where id=7; -update noar tt set v0='VA' where id=7; -update noar ti set v0='VA' where id=7; -update noar tt set b1='3BJCHX32M543VN4J47RT5SB67ZOH' where id=7; -update noar ti set b1='3BJCHX32M543VN4J47RT5SB67ZOH' where id=7; -update noar tt set v0='OLDPGST7KC751HT4WHPPP676KJRWM' where id=7; -update noar ti set v0='OLDPGST7KC751HT4WHPPP676KJRWM' where id=7; -update noar tt set b2='1V1P8CLQYR66I6VDS5W1Z' where id=7; -update noar ti set b2='1V1P8CLQYR66I6VDS5W1Z' where id=7; -update noar tt set v0='5SHE97RIA' where id=8; -update noar ti set v0='5SHE97RIA' where id=8; -update noar tt set b0='MBU3B80UNT8R8VX' where id=8; -update noar ti set b0='MBU3B80UNT8R8VX' where id=8; -update noar tt set v0='6OX7NAC7UZZ' where id=8; -update noar ti set v0='6OX7NAC7UZZ' where id=8; -update noar tt set b1='UTIXFV5NU1SBAL7ETJC5XCCLCQ0OYJ' where id=8; -update noar ti set b1='UTIXFV5NU1SBAL7ETJC5XCCLCQ0OYJ' where id=8; -update noar tt set v0='Y' where id=8; -update noar ti set v0='Y' where id=8; -update noar tt set b2='LQDZFYUJMFOZR1DIJPGP945ZX' where id=8; -update noar ti set b2='LQDZFYUJMFOZR1DIJPGP945ZX' where id=8; -update noar tt set v0='2C408TQ76RR813WZHA3QAU' where id=9; -update noar ti set v0='2C408TQ76RR813WZHA3QAU' where id=9; -update noar tt set b0='YZCMPXZSCQ8219T5UOIW7FRE' where id=9; -update noar ti set b0='YZCMPXZSCQ8219T5UOIW7FRE' where id=9; -update noar tt set v0='L5RUTZ4B7B58J0UTKX1CK933AIYQ0DAI' where id=9; -update noar ti set v0='L5RUTZ4B7B58J0UTKX1CK933AIYQ0DAI' where id=9; -update noar tt set b1='L' where id=9; -update noar ti set b1='L' where id=9; -update noar tt set v0='E6V1T1DC' where id=9; -update noar ti set v0='E6V1T1DC' where id=9; -update noar tt set b2='FWL0BWE9J4KN' where id=9; -update noar ti set b2='FWL0BWE9J4KN' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 tinyblob not null, -b1 longblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='I49JXK16Y1VC' where id=1; -update noar ti set v0='I49JXK16Y1VC' where id=1; -update noar tt set b0='K48M' where id=1; -update noar ti set b0='K48M' where id=1; -update noar tt set v0='57JXV2GGDZTCZE7NEMX2' where id=1; -update noar ti set v0='57JXV2GGDZTCZE7NEMX2' where id=1; -update noar tt set b1='6L20A510ET1Y' where id=1; -update noar ti set b1='6L20A510ET1Y' where id=1; -update noar tt set v0='JGPA8GW7T' where id=1; -update noar ti set v0='JGPA8GW7T' where id=1; -update noar tt set b2='7B3GTBR8XCF8VCX0V3ROV0S853VWVQ9N' where id=1; -update noar ti set b2='7B3GTBR8XCF8VCX0V3ROV0S853VWVQ9N' where id=1; -update noar tt set v0='P5R0MD29EBY5KC5IV9PX1C' where id=2; -update noar ti set v0='P5R0MD29EBY5KC5IV9PX1C' where id=2; -update noar tt set b0='7MR1X5VEKVWWOFB84PM8VYQ' where id=2; -update noar ti set b0='7MR1X5VEKVWWOFB84PM8VYQ' where id=2; -update noar tt set v0='7' where id=2; -update noar ti set v0='7' where id=2; -update noar tt set b1='OOKDU' where id=2; -update noar ti set b1='OOKDU' where id=2; -update noar tt set v0='GLKBB4F' where id=2; -update noar ti set v0='GLKBB4F' where id=2; -update noar tt set b2='2DR80FS5SJHQLPMQ866PTWW' where id=2; -update noar ti set b2='2DR80FS5SJHQLPMQ866PTWW' where id=2; -update noar tt set v0='37JGHREY5Q3CXAYWKY5V' where id=3; -update noar ti set v0='37JGHREY5Q3CXAYWKY5V' where id=3; -update noar tt set b0='T5YYF79I6TPQ4B8DMX4WD1WAO9U5G' where id=3; -update noar ti set b0='T5YYF79I6TPQ4B8DMX4WD1WAO9U5G' where id=3; -update noar tt set v0='LAA6CDJQ5HVHGA2TRZ' where id=3; -update noar ti set v0='LAA6CDJQ5HVHGA2TRZ' where id=3; -update noar tt set b1='9QUOEBUNMJ0A4IVL8KYZ' where id=3; -update noar ti set b1='9QUOEBUNMJ0A4IVL8KYZ' where id=3; -update noar tt set v0='5VYYBY2VF96V6' where id=3; -update noar ti set v0='5VYYBY2VF96V6' where id=3; -update noar tt set b2='2JVMSDI15FSGS4HPFO7R8HILXVE' where id=3; -update noar ti set b2='2JVMSDI15FSGS4HPFO7R8HILXVE' where id=3; -update noar tt set v0='JV8KJ0D3PLWHUS7TDGC9V' where id=4; -update noar ti set v0='JV8KJ0D3PLWHUS7TDGC9V' where id=4; -update noar tt set b0='DB0ZTNMP24JG4PF' where id=4; -update noar ti set b0='DB0ZTNMP24JG4PF' where id=4; -update noar tt set v0='SJ46XX5' where id=4; -update noar ti set v0='SJ46XX5' where id=4; -update noar tt set b1='WZ8U' where id=4; -update noar ti set b1='WZ8U' where id=4; -update noar tt set v0='STCYR0T188C0' where id=4; -update noar ti set v0='STCYR0T188C0' where id=4; -update noar tt set b2='6LXB2BJLKDD' where id=4; -update noar ti set b2='6LXB2BJLKDD' where id=4; -update noar tt set v0='51E1IX2FFCJ9H9YAVTN' where id=5; -update noar ti set v0='51E1IX2FFCJ9H9YAVTN' where id=5; -update noar tt set b0='B7P6UM' where id=5; -update noar ti set b0='B7P6UM' where id=5; -update noar tt set v0='4AZD5NOM1' where id=5; -update noar ti set v0='4AZD5NOM1' where id=5; -update noar tt set b1='UPRKWJ3VB84ZRC0CBVLKRF8SCWH' where id=5; -update noar ti set b1='UPRKWJ3VB84ZRC0CBVLKRF8SCWH' where id=5; -update noar tt set v0='NOCBN1A79A2II3B' where id=5; -update noar ti set v0='NOCBN1A79A2II3B' where id=5; -update noar tt set b2='ZS' where id=5; -update noar ti set b2='ZS' where id=5; -update noar tt set v0='CB7IHOBJ4ATUTLQUWN' where id=6; -update noar ti set v0='CB7IHOBJ4ATUTLQUWN' where id=6; -update noar tt set b0='W9IUBJ4NU8YH3QO' where id=6; -update noar ti set b0='W9IUBJ4NU8YH3QO' where id=6; -update noar tt set v0='V7BIZO3MS1U' where id=6; -update noar ti set v0='V7BIZO3MS1U' where id=6; -update noar tt set b1='G4RIHF1818QC6TEQT3AA4' where id=6; -update noar ti set b1='G4RIHF1818QC6TEQT3AA4' where id=6; -update noar tt set v0='E510KMDIJ08JXHXBMJJUMOXF7VS' where id=6; -update noar ti set v0='E510KMDIJ08JXHXBMJJUMOXF7VS' where id=6; -update noar tt set b2='OVJN' where id=6; -update noar ti set b2='OVJN' where id=6; -update noar tt set v0='R25SBGXEV309CW1RBE6890P63KTBU3' where id=7; -update noar ti set v0='R25SBGXEV309CW1RBE6890P63KTBU3' where id=7; -update noar tt set b0='5998KF3KPFL08' where id=7; -update noar ti set b0='5998KF3KPFL08' where id=7; -update noar tt set v0='QHOHI8JYPQI' where id=7; -update noar ti set v0='QHOHI8JYPQI' where id=7; -update noar tt set b1='BUBHPPJXWY2RZHV606VMG5' where id=7; -update noar ti set b1='BUBHPPJXWY2RZHV606VMG5' where id=7; -update noar tt set v0='0FU2249A' where id=7; -update noar ti set v0='0FU2249A' where id=7; -update noar tt set b2='53SK5F83MS5QNW0DM' where id=7; -update noar ti set b2='53SK5F83MS5QNW0DM' where id=7; -update noar tt set v0='9466KNN1G8EVUQ4368' where id=8; -update noar ti set v0='9466KNN1G8EVUQ4368' where id=8; -update noar tt set b0='HI5PC' where id=8; -update noar ti set b0='HI5PC' where id=8; -update noar tt set v0='MOWF74G2NNABGLI2NYMJ57OO2' where id=8; -update noar ti set v0='MOWF74G2NNABGLI2NYMJ57OO2' where id=8; -update noar tt set b1='46WV457IVX5SEAD9' where id=8; -update noar ti set b1='46WV457IVX5SEAD9' where id=8; -update noar tt set v0='DKW6MKAU5PBEWF043CC8' where id=8; -update noar ti set v0='DKW6MKAU5PBEWF043CC8' where id=8; -update noar tt set b2='RVQQHZG' where id=8; -update noar ti set b2='RVQQHZG' where id=8; -update noar tt set v0='1V1IUMS1WRTQRDUIEHF' where id=9; -update noar ti set v0='1V1IUMS1WRTQRDUIEHF' where id=9; -update noar tt set b0='94PL9F5UNSZBRZX3JI5ACF38' where id=9; -update noar ti set b0='94PL9F5UNSZBRZX3JI5ACF38' where id=9; -update noar tt set v0='0OV' where id=9; -update noar ti set v0='0OV' where id=9; -update noar tt set b1='E' where id=9; -update noar ti set b1='E' where id=9; -update noar tt set v0='BHAFL3' where id=9; -update noar ti set v0='BHAFL3' where id=9; -update noar tt set b2='S5VBF9H' where id=9; -update noar ti set b2='S5VBF9H' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 blob null, -b1 tinyblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='AIP5C6GK1EXDR4VX' where id=1; -update noar ti set v0='AIP5C6GK1EXDR4VX' where id=1; -update noar tt set b0='IVBDVXHA0FE3JDGN2GBH6TEBJ' where id=1; -update noar ti set b0='IVBDVXHA0FE3JDGN2GBH6TEBJ' where id=1; -update noar tt set v0='X3A4XMHNLU' where id=1; -update noar ti set v0='X3A4XMHNLU' where id=1; -update noar tt set b1='8394I5M7P' where id=1; -update noar ti set b1='8394I5M7P' where id=1; -update noar tt set v0='BXNJZCUO5CBF' where id=1; -update noar ti set v0='BXNJZCUO5CBF' where id=1; -update noar tt set b2='X6Y3GJ8' where id=1; -update noar ti set b2='X6Y3GJ8' where id=1; -update noar tt set v0='ROG6OVJ3YA6A1TCOUYW4ZA0R' where id=2; -update noar ti set v0='ROG6OVJ3YA6A1TCOUYW4ZA0R' where id=2; -update noar tt set b0='Z1QVQX0KZ22YD6XVBDX0B8CQWYMA0' where id=2; -update noar ti set b0='Z1QVQX0KZ22YD6XVBDX0B8CQWYMA0' where id=2; -update noar tt set v0='NRT4JCBDDX7QHBH9YR8MRA0757D7' where id=2; -update noar ti set v0='NRT4JCBDDX7QHBH9YR8MRA0757D7' where id=2; -update noar tt set b1='3Z7BEXVVKVPM88DP8JZMAS' where id=2; -update noar ti set b1='3Z7BEXVVKVPM88DP8JZMAS' where id=2; -update noar tt set v0='9VJIEYZC9MDJDDPHKDGO2XS' where id=2; -update noar ti set v0='9VJIEYZC9MDJDDPHKDGO2XS' where id=2; -update noar tt set b2='RLATNT3J5YR4XU8' where id=2; -update noar ti set b2='RLATNT3J5YR4XU8' where id=2; -update noar tt set v0='7Y42XF9DUYYE' where id=3; -update noar ti set v0='7Y42XF9DUYYE' where id=3; -update noar tt set b0='SLULLESINTOCHUT518R3MH18E3QI' where id=3; -update noar ti set b0='SLULLESINTOCHUT518R3MH18E3QI' where id=3; -update noar tt set v0='QCRZX' where id=3; -update noar ti set v0='QCRZX' where id=3; -update noar tt set b1='VZW65' where id=3; -update noar ti set b1='VZW65' where id=3; -update noar tt set v0='MWYZIBW7Q0UL6EXUIDF369' where id=3; -update noar ti set v0='MWYZIBW7Q0UL6EXUIDF369' where id=3; -update noar tt set b2='NVQOPFMD4TJI3V6KYGW21IHOT' where id=3; -update noar ti set b2='NVQOPFMD4TJI3V6KYGW21IHOT' where id=3; -update noar tt set v0='S4L6DON8MM836D8XH0SPMMCHH59K' where id=4; -update noar ti set v0='S4L6DON8MM836D8XH0SPMMCHH59K' where id=4; -update noar tt set b0='THSF98AEOX8AOB9C9H23' where id=4; -update noar ti set b0='THSF98AEOX8AOB9C9H23' where id=4; -update noar tt set v0='R3WT8E31WJ3QVV66E7' where id=4; -update noar ti set v0='R3WT8E31WJ3QVV66E7' where id=4; -update noar tt set b1='DPQVDHE' where id=4; -update noar ti set b1='DPQVDHE' where id=4; -update noar tt set v0='3OMDLXE28A6JLJ1TPROBW8KX5CL9VXO' where id=4; -update noar ti set v0='3OMDLXE28A6JLJ1TPROBW8KX5CL9VXO' where id=4; -update noar tt set b2='D967J0OU' where id=4; -update noar ti set b2='D967J0OU' where id=4; -update noar tt set v0='WLGCRVF8VZEIZYDX0RN9XYUCX5R5' where id=5; -update noar ti set v0='WLGCRVF8VZEIZYDX0RN9XYUCX5R5' where id=5; -update noar tt set b0='7RM6M6RW' where id=5; -update noar ti set b0='7RM6M6RW' where id=5; -update noar tt set v0='W4LIVDNV' where id=5; -update noar ti set v0='W4LIVDNV' where id=5; -update noar tt set b1='O65D4Z' where id=5; -update noar ti set b1='O65D4Z' where id=5; -update noar tt set v0='VNNEBEGAL1PJ238' where id=5; -update noar ti set v0='VNNEBEGAL1PJ238' where id=5; -update noar tt set b2='E4FMJDQC1JF' where id=5; -update noar ti set b2='E4FMJDQC1JF' where id=5; -update noar tt set v0='FCXDF1VBUM3I4GPI0ZEPAG7QI7' where id=6; -update noar ti set v0='FCXDF1VBUM3I4GPI0ZEPAG7QI7' where id=6; -update noar tt set b0='DSYQVFY0BOFU1C5FABY' where id=6; -update noar ti set b0='DSYQVFY0BOFU1C5FABY' where id=6; -update noar tt set v0='7VSCKT9O' where id=6; -update noar ti set v0='7VSCKT9O' where id=6; -update noar tt set b1='ENV60KRC2RFTSP3ON3SNB4QM3W' where id=6; -update noar ti set b1='ENV60KRC2RFTSP3ON3SNB4QM3W' where id=6; -update noar tt set v0='JE7' where id=6; -update noar ti set v0='JE7' where id=6; -update noar tt set b2='U588UPEKEY9YBJSIOPWD7WIHR49' where id=6; -update noar ti set b2='U588UPEKEY9YBJSIOPWD7WIHR49' where id=6; -update noar tt set v0='PQPWMOTLZOU' where id=7; -update noar ti set v0='PQPWMOTLZOU' where id=7; -update noar tt set b0='KMTRBVMCE9LG2ZHYO8B9' where id=7; -update noar ti set b0='KMTRBVMCE9LG2ZHYO8B9' where id=7; -update noar tt set v0='4PWYQ8H1TQ6' where id=7; -update noar ti set v0='4PWYQ8H1TQ6' where id=7; -update noar tt set b1='D' where id=7; -update noar ti set b1='D' where id=7; -update noar tt set v0='QW3GY6QRU92OJX6QOJBTLFZ8ES8EGIGI' where id=7; -update noar ti set v0='QW3GY6QRU92OJX6QOJBTLFZ8ES8EGIGI' where id=7; -update noar tt set b2='8WI1XJJK' where id=7; -update noar ti set b2='8WI1XJJK' where id=7; -update noar tt set v0='ISTV' where id=8; -update noar ti set v0='ISTV' where id=8; -update noar tt set b0='X50QVX0K3FY3B' where id=8; -update noar ti set b0='X50QVX0K3FY3B' where id=8; -update noar tt set v0='5GTPVAA2IOUR03TI2IDBXQQF' where id=8; -update noar ti set v0='5GTPVAA2IOUR03TI2IDBXQQF' where id=8; -update noar tt set b1='7' where id=8; -update noar ti set b1='7' where id=8; -update noar tt set v0='I3MM0MBUXVTQR2GTIKOYWY3' where id=8; -update noar ti set v0='I3MM0MBUXVTQR2GTIKOYWY3' where id=8; -update noar tt set b2='CY907' where id=8; -update noar ti set b2='CY907' where id=8; -update noar tt set v0='XEUK6ZYDRQOCYYLZKBBW' where id=9; -update noar ti set v0='XEUK6ZYDRQOCYYLZKBBW' where id=9; -update noar tt set b0='18PMD' where id=9; -update noar ti set b0='18PMD' where id=9; -update noar tt set v0='ZAQFD' where id=9; -update noar ti set v0='ZAQFD' where id=9; -update noar tt set b1='HRQ' where id=9; -update noar ti set b1='HRQ' where id=9; -update noar tt set v0='2' where id=9; -update noar ti set v0='2' where id=9; -update noar tt set b2='E87IXO4MNDE8INLC3NKSHY' where id=9; -update noar ti set b2='E87IXO4MNDE8INLC3NKSHY' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 blob null, -b1 tinyblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='M7MUQB5XL' where id=1; -update noar ti set v0='M7MUQB5XL' where id=1; -update noar tt set b0='8RRKI0MIJIVXSWVFLKJDGMOA3EC6F' where id=1; -update noar ti set b0='8RRKI0MIJIVXSWVFLKJDGMOA3EC6F' where id=1; -update noar tt set v0='PDY' where id=1; -update noar ti set v0='PDY' where id=1; -update noar tt set b1='AJVAF0R' where id=1; -update noar ti set b1='AJVAF0R' where id=1; -update noar tt set v0='75GT' where id=1; -update noar ti set v0='75GT' where id=1; -update noar tt set b2='KV6LEQSGJ1KQ4W7VSIU' where id=1; -update noar ti set b2='KV6LEQSGJ1KQ4W7VSIU' where id=1; -update noar tt set v0='U4S83AXPC20ZG1' where id=2; -update noar ti set v0='U4S83AXPC20ZG1' where id=2; -update noar tt set b0='PGZA4LT' where id=2; -update noar ti set b0='PGZA4LT' where id=2; -update noar tt set v0='N1' where id=2; -update noar ti set v0='N1' where id=2; -update noar tt set b1='WI' where id=2; -update noar ti set b1='WI' where id=2; -update noar tt set v0='7Y6DSN6Q6S03QD04SYG6' where id=2; -update noar ti set v0='7Y6DSN6Q6S03QD04SYG6' where id=2; -update noar tt set b2='4KY9BKG36' where id=2; -update noar ti set b2='4KY9BKG36' where id=2; -update noar tt set v0='DYBLV' where id=3; -update noar ti set v0='DYBLV' where id=3; -update noar tt set b0='MPEDLK4AHMCVN9ETRH' where id=3; -update noar ti set b0='MPEDLK4AHMCVN9ETRH' where id=3; -update noar tt set v0='16CGQW78FW8BFSQY9RM' where id=3; -update noar ti set v0='16CGQW78FW8BFSQY9RM' where id=3; -update noar tt set b1='ZTQDP7HFVV7UOX4FAS' where id=3; -update noar ti set b1='ZTQDP7HFVV7UOX4FAS' where id=3; -update noar tt set v0='17BU0L3J' where id=3; -update noar ti set v0='17BU0L3J' where id=3; -update noar tt set b2='V87MKUB5RCASG' where id=3; -update noar ti set b2='V87MKUB5RCASG' where id=3; -update noar tt set v0='WJ2UP' where id=4; -update noar ti set v0='WJ2UP' where id=4; -update noar tt set b0='94T81QNS55HXC1CWNJFU0' where id=4; -update noar ti set b0='94T81QNS55HXC1CWNJFU0' where id=4; -update noar tt set v0='PHLBUEH' where id=4; -update noar ti set v0='PHLBUEH' where id=4; -update noar tt set b1='9PLNQ7WD2AY1CLRV5FD' where id=4; -update noar ti set b1='9PLNQ7WD2AY1CLRV5FD' where id=4; -update noar tt set v0='F' where id=4; -update noar ti set v0='F' where id=4; -update noar tt set b2='5JOYSH3W8H8' where id=4; -update noar ti set b2='5JOYSH3W8H8' where id=4; -update noar tt set v0='S3J8QTBHCLPWG755' where id=5; -update noar ti set v0='S3J8QTBHCLPWG755' where id=5; -update noar tt set b0='9Q00S9AXC4NU7C7RSFJC1U2' where id=5; -update noar ti set b0='9Q00S9AXC4NU7C7RSFJC1U2' where id=5; -update noar tt set v0='4LQ7C40AF49YCRYMCWTZU1O7' where id=5; -update noar ti set v0='4LQ7C40AF49YCRYMCWTZU1O7' where id=5; -update noar tt set b1='34NTH1KQ80DKYWJ' where id=5; -update noar ti set b1='34NTH1KQ80DKYWJ' where id=5; -update noar tt set v0='O' where id=5; -update noar ti set v0='O' where id=5; -update noar tt set b2='ROY5D1P1NTM2KZ' where id=5; -update noar ti set b2='ROY5D1P1NTM2KZ' where id=5; -update noar tt set v0='W7I54ILS7B5SIKDK99' where id=6; -update noar ti set v0='W7I54ILS7B5SIKDK99' where id=6; -update noar tt set b0='4SKRCDT62GMMYSHOFM94S' where id=6; -update noar ti set b0='4SKRCDT62GMMYSHOFM94S' where id=6; -update noar tt set v0='0H75SK7FMLDCGRYPSQBEYXX' where id=6; -update noar ti set v0='0H75SK7FMLDCGRYPSQBEYXX' where id=6; -update noar tt set b1='PTIHXY' where id=6; -update noar ti set b1='PTIHXY' where id=6; -update noar tt set v0='W1WRJIAHLAAPMFDKS' where id=6; -update noar ti set v0='W1WRJIAHLAAPMFDKS' where id=6; -update noar tt set b2='0ZJLUKU44YF8NWP' where id=6; -update noar ti set b2='0ZJLUKU44YF8NWP' where id=6; -update noar tt set v0='7W1WHIRQAZLR3X' where id=7; -update noar ti set v0='7W1WHIRQAZLR3X' where id=7; -update noar tt set b0='95PEAGL06CXI8XQFSA' where id=7; -update noar ti set b0='95PEAGL06CXI8XQFSA' where id=7; -update noar tt set v0='IIP76CEI5FS5B4TKZIQBPR24' where id=7; -update noar ti set v0='IIP76CEI5FS5B4TKZIQBPR24' where id=7; -update noar tt set b1='7QFL2IS8EZW3' where id=7; -update noar ti set b1='7QFL2IS8EZW3' where id=7; -update noar tt set v0='XVSYYHGZCZ4D0RJ49ASRPIVATP88XW0' where id=7; -update noar ti set v0='XVSYYHGZCZ4D0RJ49ASRPIVATP88XW0' where id=7; -update noar tt set b2='MGRU2JL9QW8J0W0HP6P' where id=7; -update noar ti set b2='MGRU2JL9QW8J0W0HP6P' where id=7; -update noar tt set v0='XDK7HERTKA2TVCJBMXB0XJZD' where id=8; -update noar ti set v0='XDK7HERTKA2TVCJBMXB0XJZD' where id=8; -update noar tt set b0='3SB' where id=8; -update noar ti set b0='3SB' where id=8; -update noar tt set v0='DMQCNLC' where id=8; -update noar ti set v0='DMQCNLC' where id=8; -update noar tt set b1='3OABOBW651QRPCXJSDWV' where id=8; -update noar ti set b1='3OABOBW651QRPCXJSDWV' where id=8; -update noar tt set v0='7MWPINXQH6JQTPV' where id=8; -update noar ti set v0='7MWPINXQH6JQTPV' where id=8; -update noar tt set b2='DCB7TW' where id=8; -update noar ti set b2='DCB7TW' where id=8; -update noar tt set v0='OFHRRZ3T' where id=9; -update noar ti set v0='OFHRRZ3T' where id=9; -update noar tt set b0='8ZXQ8PZ30KHP4' where id=9; -update noar ti set b0='8ZXQ8PZ30KHP4' where id=9; -update noar tt set v0='0A3BSZKOPA565O2K2' where id=9; -update noar ti set v0='0A3BSZKOPA565O2K2' where id=9; -update noar tt set b1='4H3O5WCZL1PXNVO87O' where id=9; -update noar ti set b1='4H3O5WCZL1PXNVO87O' where id=9; -update noar tt set v0='RGIOSFSPJN8A75F' where id=9; -update noar ti set v0='RGIOSFSPJN8A75F' where id=9; -update noar tt set b2='75' where id=9; -update noar ti set b2='75' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 blob not null, -b1 tinyblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='OKXV' where id=1; -update noar ti set v0='OKXV' where id=1; -update noar tt set b0='FUKXRMT3J9L2CZZL' where id=1; -update noar ti set b0='FUKXRMT3J9L2CZZL' where id=1; -update noar tt set v0='BJBMDJPN' where id=1; -update noar ti set v0='BJBMDJPN' where id=1; -update noar tt set b1='1A90D0KQ' where id=1; -update noar ti set b1='1A90D0KQ' where id=1; -update noar tt set v0='M' where id=1; -update noar ti set v0='M' where id=1; -update noar tt set b2='7TGZGXI29CF0SY91' where id=1; -update noar ti set b2='7TGZGXI29CF0SY91' where id=1; -update noar tt set v0='RML45IQYQKDYALTRW70VFX06H9RP' where id=2; -update noar ti set v0='RML45IQYQKDYALTRW70VFX06H9RP' where id=2; -update noar tt set b0='E0RJIW9JCDM9YCLCWWG9' where id=2; -update noar ti set b0='E0RJIW9JCDM9YCLCWWG9' where id=2; -update noar tt set v0='5' where id=2; -update noar ti set v0='5' where id=2; -update noar tt set b1='7A2N7ZMIF6MCYH' where id=2; -update noar ti set b1='7A2N7ZMIF6MCYH' where id=2; -update noar tt set v0='OMR68JHA0KVKW5YGVWNDFYFPQG' where id=2; -update noar ti set v0='OMR68JHA0KVKW5YGVWNDFYFPQG' where id=2; -update noar tt set b2='FC7X1G472Q5JDSKMM4CQJP46LO5W' where id=2; -update noar ti set b2='FC7X1G472Q5JDSKMM4CQJP46LO5W' where id=2; -update noar tt set v0='X5LSB4N2IBWBWM9Y9GVHZM3OE4D0W8' where id=3; -update noar ti set v0='X5LSB4N2IBWBWM9Y9GVHZM3OE4D0W8' where id=3; -update noar tt set b0='AMSVFHFMV0OM4RGF19KOGSMRD2FOMX4O' where id=3; -update noar ti set b0='AMSVFHFMV0OM4RGF19KOGSMRD2FOMX4O' where id=3; -update noar tt set v0='11O38AOC2F671ZJHE7YQD1HW724' where id=3; -update noar ti set v0='11O38AOC2F671ZJHE7YQD1HW724' where id=3; -update noar tt set b1='FD9S7YVCEM6CZ' where id=3; -update noar ti set b1='FD9S7YVCEM6CZ' where id=3; -update noar tt set v0='TGOHYDG4RKY' where id=3; -update noar ti set v0='TGOHYDG4RKY' where id=3; -update noar tt set b2='EI6VW8IZMIE6STV' where id=3; -update noar ti set b2='EI6VW8IZMIE6STV' where id=3; -update noar tt set v0='W' where id=4; -update noar ti set v0='W' where id=4; -update noar tt set b0='USLMDEQQBJ72IJHSU6NN9MF27LTUR' where id=4; -update noar ti set b0='USLMDEQQBJ72IJHSU6NN9MF27LTUR' where id=4; -update noar tt set v0='ZM3DG7C8NXX66S8PP' where id=4; -update noar ti set v0='ZM3DG7C8NXX66S8PP' where id=4; -update noar tt set b1='NCGWGBWT87J30J5ZCD' where id=4; -update noar ti set b1='NCGWGBWT87J30J5ZCD' where id=4; -update noar tt set v0='IGKISGROXONEIFJVHNW91D' where id=4; -update noar ti set v0='IGKISGROXONEIFJVHNW91D' where id=4; -update noar tt set b2='DMX8RSD9XDXTPU4Q1TZFI' where id=4; -update noar ti set b2='DMX8RSD9XDXTPU4Q1TZFI' where id=4; -update noar tt set v0='RULR' where id=5; -update noar ti set v0='RULR' where id=5; -update noar tt set b0='H' where id=5; -update noar ti set b0='H' where id=5; -update noar tt set v0='AV9RJMPNX84FSS' where id=5; -update noar ti set v0='AV9RJMPNX84FSS' where id=5; -update noar tt set b1='GW7AGVJWY13AFZHPCO5' where id=5; -update noar ti set b1='GW7AGVJWY13AFZHPCO5' where id=5; -update noar tt set v0='SZY7MANJ7J02PK' where id=5; -update noar ti set v0='SZY7MANJ7J02PK' where id=5; -update noar tt set b2='77EF6UPM830MUH5KS3R6Y9BD0D' where id=5; -update noar ti set b2='77EF6UPM830MUH5KS3R6Y9BD0D' where id=5; -update noar tt set v0='3I0K7MU758X33' where id=6; -update noar ti set v0='3I0K7MU758X33' where id=6; -update noar tt set b0='7X3KAJAECBTT5ATDFT' where id=6; -update noar ti set b0='7X3KAJAECBTT5ATDFT' where id=6; -update noar tt set v0='WZZ0S18EE78UNPJXDVDJIL4CTNRPY3T' where id=6; -update noar ti set v0='WZZ0S18EE78UNPJXDVDJIL4CTNRPY3T' where id=6; -update noar tt set b1='N4OGX8' where id=6; -update noar ti set b1='N4OGX8' where id=6; -update noar tt set v0='YVUTVNAFZ9PA5M2YXDUG3FICT7JLND' where id=6; -update noar ti set v0='YVUTVNAFZ9PA5M2YXDUG3FICT7JLND' where id=6; -update noar tt set b2='I' where id=6; -update noar ti set b2='I' where id=6; -update noar tt set v0='571OT26XF38KSOH4' where id=7; -update noar ti set v0='571OT26XF38KSOH4' where id=7; -update noar tt set b0='EQ4290L2UV' where id=7; -update noar ti set b0='EQ4290L2UV' where id=7; -update noar tt set v0='PBF10' where id=7; -update noar ti set v0='PBF10' where id=7; -update noar tt set b1='JWT5A' where id=7; -update noar ti set b1='JWT5A' where id=7; -update noar tt set v0='QZN66125ZD0' where id=7; -update noar ti set v0='QZN66125ZD0' where id=7; -update noar tt set b2='8O8RWW2NIXVDJ1TV' where id=7; -update noar ti set b2='8O8RWW2NIXVDJ1TV' where id=7; -update noar tt set v0='8TZCM0VKHMFQXNHZA047T2' where id=8; -update noar ti set v0='8TZCM0VKHMFQXNHZA047T2' where id=8; -update noar tt set b0='MCH' where id=8; -update noar ti set b0='MCH' where id=8; -update noar tt set v0='8CHUGB4Q2Q33O6YD9JCB' where id=8; -update noar ti set v0='8CHUGB4Q2Q33O6YD9JCB' where id=8; -update noar tt set b1='FAFTHFI4DRDXY1NFGIGHIS6L02H42IY' where id=8; -update noar ti set b1='FAFTHFI4DRDXY1NFGIGHIS6L02H42IY' where id=8; -update noar tt set v0='H098LT1TD40' where id=8; -update noar ti set v0='H098LT1TD40' where id=8; -update noar tt set b2='CI0B' where id=8; -update noar ti set b2='CI0B' where id=8; -update noar tt set v0='N1559NH1EOJB' where id=9; -update noar ti set v0='N1559NH1EOJB' where id=9; -update noar tt set b0='8J1VLZB1K' where id=9; -update noar ti set b0='8J1VLZB1K' where id=9; -update noar tt set v0='7CGE6Q04TEPCJ7VW' where id=9; -update noar ti set v0='7CGE6Q04TEPCJ7VW' where id=9; -update noar tt set b1='OLOUA' where id=9; -update noar ti set b1='OLOUA' where id=9; -update noar tt set v0='2FTAIAF90EHM2EYGL13FL7J' where id=9; -update noar ti set v0='2FTAIAF90EHM2EYGL13FL7J' where id=9; -update noar tt set b2='GQ8EA' where id=9; -update noar ti set b2='GQ8EA' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 blob not null, -b1 tinyblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='ZO7U7D3DNLFTD2MFBGV5P68WK8NY' where id=1; -update noar ti set v0='ZO7U7D3DNLFTD2MFBGV5P68WK8NY' where id=1; -update noar tt set b0='ZZ169AMK3LRNVY4LLEOQKTM5WWTEM' where id=1; -update noar ti set b0='ZZ169AMK3LRNVY4LLEOQKTM5WWTEM' where id=1; -update noar tt set v0='IYUB' where id=1; -update noar ti set v0='IYUB' where id=1; -update noar tt set b1='ZJOQEHT1LA5K5WTDHQ' where id=1; -update noar ti set b1='ZJOQEHT1LA5K5WTDHQ' where id=1; -update noar tt set v0='VLP3VPHCM' where id=1; -update noar ti set v0='VLP3VPHCM' where id=1; -update noar tt set b2='PG36567LNULM3L6' where id=1; -update noar ti set b2='PG36567LNULM3L6' where id=1; -update noar tt set v0='V8HCGT3WT41FJMEH' where id=2; -update noar ti set v0='V8HCGT3WT41FJMEH' where id=2; -update noar tt set b0='5QISCELYU8KDCIHLLN409LY0Y2LFM' where id=2; -update noar ti set b0='5QISCELYU8KDCIHLLN409LY0Y2LFM' where id=2; -update noar tt set v0='HTWZTQ4CD551X00W9I44YSM9E' where id=2; -update noar ti set v0='HTWZTQ4CD551X00W9I44YSM9E' where id=2; -update noar tt set b1='0V9BUYQ40D3BDUL4XLDV7DXV5T0ABD' where id=2; -update noar ti set b1='0V9BUYQ40D3BDUL4XLDV7DXV5T0ABD' where id=2; -update noar tt set v0='YSCA6E0PU' where id=2; -update noar ti set v0='YSCA6E0PU' where id=2; -update noar tt set b2='US6NQ61QWUE' where id=2; -update noar ti set b2='US6NQ61QWUE' where id=2; -update noar tt set v0='YZSKOG' where id=3; -update noar ti set v0='YZSKOG' where id=3; -update noar tt set b0='DUJCBW9IPF' where id=3; -update noar ti set b0='DUJCBW9IPF' where id=3; -update noar tt set v0='STQ05NUV' where id=3; -update noar ti set v0='STQ05NUV' where id=3; -update noar tt set b1='ZG8R2I1J' where id=3; -update noar ti set b1='ZG8R2I1J' where id=3; -update noar tt set v0='UMI2VHBWV304D889A2E85S6YCT27' where id=3; -update noar ti set v0='UMI2VHBWV304D889A2E85S6YCT27' where id=3; -update noar tt set b2='W5QN2MP754SU2EI113QE0WXUYX' where id=3; -update noar ti set b2='W5QN2MP754SU2EI113QE0WXUYX' where id=3; -update noar tt set v0='16DL356E5HE0RHQLVVHA4JIP73H' where id=4; -update noar ti set v0='16DL356E5HE0RHQLVVHA4JIP73H' where id=4; -update noar tt set b0='P91NYVJ' where id=4; -update noar ti set b0='P91NYVJ' where id=4; -update noar tt set v0='ZL2G24XEZJDM1GUZVT5047SD9' where id=4; -update noar ti set v0='ZL2G24XEZJDM1GUZVT5047SD9' where id=4; -update noar tt set b1='F5DXRNVBJ1QI9' where id=4; -update noar ti set b1='F5DXRNVBJ1QI9' where id=4; -update noar tt set v0='E6DKDKT5GH' where id=4; -update noar ti set v0='E6DKDKT5GH' where id=4; -update noar tt set b2='J7A3VSMEUCAXBJV98O3FT6NLUW' where id=4; -update noar ti set b2='J7A3VSMEUCAXBJV98O3FT6NLUW' where id=4; -update noar tt set v0='WBLV' where id=5; -update noar ti set v0='WBLV' where id=5; -update noar tt set b0='I5L6TZIL4NICY' where id=5; -update noar ti set b0='I5L6TZIL4NICY' where id=5; -update noar tt set v0='10TM8VPCA26948BVGPNM7UY5PFXYH' where id=5; -update noar ti set v0='10TM8VPCA26948BVGPNM7UY5PFXYH' where id=5; -update noar tt set b1='DFBDCAN540J5SC' where id=5; -update noar ti set b1='DFBDCAN540J5SC' where id=5; -update noar tt set v0='SCORH6ALK3CPVIIQ' where id=5; -update noar ti set v0='SCORH6ALK3CPVIIQ' where id=5; -update noar tt set b2='9NQ' where id=5; -update noar ti set b2='9NQ' where id=5; -update noar tt set v0='L9FU1YJPDN24JL2PARHTAFX' where id=6; -update noar ti set v0='L9FU1YJPDN24JL2PARHTAFX' where id=6; -update noar tt set b0='LJ82BOTS1LRZ4ZLO23J0JHO6Y878V' where id=6; -update noar ti set b0='LJ82BOTS1LRZ4ZLO23J0JHO6Y878V' where id=6; -update noar tt set v0='KWJMR5QAE3441O7W293V9B9' where id=6; -update noar ti set v0='KWJMR5QAE3441O7W293V9B9' where id=6; -update noar tt set b1='W7KLN4YPSEP' where id=6; -update noar ti set b1='W7KLN4YPSEP' where id=6; -update noar tt set v0='H5USTX' where id=6; -update noar ti set v0='H5USTX' where id=6; -update noar tt set b2='5PA377A2OWQZIJHGPGC4' where id=6; -update noar ti set b2='5PA377A2OWQZIJHGPGC4' where id=6; -update noar tt set v0='CEL4LFVC6UIFGQSWWITGVN' where id=7; -update noar ti set v0='CEL4LFVC6UIFGQSWWITGVN' where id=7; -update noar tt set b0='OY9YJKK28R9UIU2OZBVH7N0ZZLTE4P6' where id=7; -update noar ti set b0='OY9YJKK28R9UIU2OZBVH7N0ZZLTE4P6' where id=7; -update noar tt set v0='HU053GU4X63YLETGZMX91HYS4M4HX' where id=7; -update noar ti set v0='HU053GU4X63YLETGZMX91HYS4M4HX' where id=7; -update noar tt set b1='C8EDJXRWGHCQ7' where id=7; -update noar ti set b1='C8EDJXRWGHCQ7' where id=7; -update noar tt set v0='B9OSOCDT4BO3CF' where id=7; -update noar ti set v0='B9OSOCDT4BO3CF' where id=7; -update noar tt set b2='792MGR8IKDB4M' where id=7; -update noar ti set b2='792MGR8IKDB4M' where id=7; -update noar tt set v0='0ZCT6UEIP7H5S75' where id=8; -update noar ti set v0='0ZCT6UEIP7H5S75' where id=8; -update noar tt set b0='W66J664SQTDF6G' where id=8; -update noar ti set b0='W66J664SQTDF6G' where id=8; -update noar tt set v0='WAH3824ZXNFEIWQ' where id=8; -update noar ti set v0='WAH3824ZXNFEIWQ' where id=8; -update noar tt set b1='RJHS70ITMWVG0S6N4TMPDODPL' where id=8; -update noar ti set b1='RJHS70ITMWVG0S6N4TMPDODPL' where id=8; -update noar tt set v0='1Z4' where id=8; -update noar ti set v0='1Z4' where id=8; -update noar tt set b2='Y' where id=8; -update noar ti set b2='Y' where id=8; -update noar tt set v0='AG2' where id=9; -update noar ti set v0='AG2' where id=9; -update noar tt set b0='L6NZPTLWR0TY8' where id=9; -update noar ti set b0='L6NZPTLWR0TY8' where id=9; -update noar tt set v0='HVKQFH8SJKCTJEYQ1R' where id=9; -update noar ti set v0='HVKQFH8SJKCTJEYQ1R' where id=9; -update noar tt set b1='VXF0WMDS64J65N' where id=9; -update noar ti set b1='VXF0WMDS64J65N' where id=9; -update noar tt set v0='YABL8SFYRJGGEHFS3CW' where id=9; -update noar ti set v0='YABL8SFYRJGGEHFS3CW' where id=9; -update noar tt set b2='63Y1IBC3XEKPXYQV4KH7' where id=9; -update noar ti set b2='63Y1IBC3XEKPXYQV4KH7' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 blob null, -b1 tinyblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='4V3' where id=1; -update noar ti set v0='4V3' where id=1; -update noar tt set b0='IPYCM' where id=1; -update noar ti set b0='IPYCM' where id=1; -update noar tt set v0='MJD71YVRMFSMTMBSQWF251ZJEKTFXB' where id=1; -update noar ti set v0='MJD71YVRMFSMTMBSQWF251ZJEKTFXB' where id=1; -update noar tt set b1='WZUN0' where id=1; -update noar ti set b1='WZUN0' where id=1; -update noar tt set v0='EATAB' where id=1; -update noar ti set v0='EATAB' where id=1; -update noar tt set b2='3A2XFVKANR0MJYXGT59FBC4KB' where id=1; -update noar ti set b2='3A2XFVKANR0MJYXGT59FBC4KB' where id=1; -update noar tt set v0='Q40MBD' where id=2; -update noar ti set v0='Q40MBD' where id=2; -update noar tt set b0='YQAZCMOUEVDDP6S0ZZI6RVCY' where id=2; -update noar ti set b0='YQAZCMOUEVDDP6S0ZZI6RVCY' where id=2; -update noar tt set v0='580L6YWAWE6TXDIQBHVAQ1HHSGAH8VC' where id=2; -update noar ti set v0='580L6YWAWE6TXDIQBHVAQ1HHSGAH8VC' where id=2; -update noar tt set b1='79F0HCZPAAK2XRCL' where id=2; -update noar ti set b1='79F0HCZPAAK2XRCL' where id=2; -update noar tt set v0='ACY8HN5C11JJ0GDNY' where id=2; -update noar ti set v0='ACY8HN5C11JJ0GDNY' where id=2; -update noar tt set b2='CMSUT' where id=2; -update noar ti set b2='CMSUT' where id=2; -update noar tt set v0='XEFIJ4K2QVKTHHIS7MF1A86JFZPFN7' where id=3; -update noar ti set v0='XEFIJ4K2QVKTHHIS7MF1A86JFZPFN7' where id=3; -update noar tt set b0='3IZGGWII' where id=3; -update noar ti set b0='3IZGGWII' where id=3; -update noar tt set v0='BBOOSJU4Y3J' where id=3; -update noar ti set v0='BBOOSJU4Y3J' where id=3; -update noar tt set b1='KFMQ92VC57EN8YV02MWYAZGQJ4TBVY' where id=3; -update noar ti set b1='KFMQ92VC57EN8YV02MWYAZGQJ4TBVY' where id=3; -update noar tt set v0='EKK0FFP1XFUMQ0UUIBVH2OTJTJRXE80I' where id=3; -update noar ti set v0='EKK0FFP1XFUMQ0UUIBVH2OTJTJRXE80I' where id=3; -update noar tt set b2='1P2NXYCR8I2AI039PC5A' where id=3; -update noar ti set b2='1P2NXYCR8I2AI039PC5A' where id=3; -update noar tt set v0='IO7R' where id=4; -update noar ti set v0='IO7R' where id=4; -update noar tt set b0='W6X' where id=4; -update noar ti set b0='W6X' where id=4; -update noar tt set v0='P9PJ71I2J3VPVBHVPKFCO8K9T01T73TU' where id=4; -update noar ti set v0='P9PJ71I2J3VPVBHVPKFCO8K9T01T73TU' where id=4; -update noar tt set b1='V2XRL80933' where id=4; -update noar ti set b1='V2XRL80933' where id=4; -update noar tt set v0='UJYED2HRLBX4VX99NN3CYTBVZ' where id=4; -update noar ti set v0='UJYED2HRLBX4VX99NN3CYTBVZ' where id=4; -update noar tt set b2='5OHLTABSL40' where id=4; -update noar ti set b2='5OHLTABSL40' where id=4; -update noar tt set v0='YUJGL68DCOF' where id=5; -update noar ti set v0='YUJGL68DCOF' where id=5; -update noar tt set b0='CSWMHVZEFWG18YWXYJ9S4QSQRT' where id=5; -update noar ti set b0='CSWMHVZEFWG18YWXYJ9S4QSQRT' where id=5; -update noar tt set v0='0DPY8BQBSCD5O' where id=5; -update noar ti set v0='0DPY8BQBSCD5O' where id=5; -update noar tt set b1='T65QKAUW4OLYFT8' where id=5; -update noar ti set b1='T65QKAUW4OLYFT8' where id=5; -update noar tt set v0='Q3QA4ATUD' where id=5; -update noar ti set v0='Q3QA4ATUD' where id=5; -update noar tt set b2='G1D8R7C4I2G73KW' where id=5; -update noar ti set b2='G1D8R7C4I2G73KW' where id=5; -update noar tt set v0='L0KR' where id=6; -update noar ti set v0='L0KR' where id=6; -update noar tt set b0='V07U6MPNIVMTR2YHOA580CEFYZ5ZBE' where id=6; -update noar ti set b0='V07U6MPNIVMTR2YHOA580CEFYZ5ZBE' where id=6; -update noar tt set v0='T' where id=6; -update noar ti set v0='T' where id=6; -update noar tt set b1='B' where id=6; -update noar ti set b1='B' where id=6; -update noar tt set v0='7OUJFDFIZ6WN4JOP6L1N3RE6B5X97' where id=6; -update noar ti set v0='7OUJFDFIZ6WN4JOP6L1N3RE6B5X97' where id=6; -update noar tt set b2='N4' where id=6; -update noar ti set b2='N4' where id=6; -update noar tt set v0='JCDE5C81LYQU6N71BD3D0PJDNV95VV' where id=7; -update noar ti set v0='JCDE5C81LYQU6N71BD3D0PJDNV95VV' where id=7; -update noar tt set b0='Z' where id=7; -update noar ti set b0='Z' where id=7; -update noar tt set v0='WCC0XI' where id=7; -update noar ti set v0='WCC0XI' where id=7; -update noar tt set b1='SLD6C' where id=7; -update noar ti set b1='SLD6C' where id=7; -update noar tt set v0='BXA4QJZWCW0259' where id=7; -update noar ti set v0='BXA4QJZWCW0259' where id=7; -update noar tt set b2='HXUFL' where id=7; -update noar ti set b2='HXUFL' where id=7; -update noar tt set v0='U96URWV2KJY7PXDOIHE' where id=8; -update noar ti set v0='U96URWV2KJY7PXDOIHE' where id=8; -update noar tt set b0='NU4BE16QA' where id=8; -update noar ti set b0='NU4BE16QA' where id=8; -update noar tt set v0='1LGOF20CN' where id=8; -update noar ti set v0='1LGOF20CN' where id=8; -update noar tt set b1='RMSAGLSKXX51TIN0SKNQ1XENXZ' where id=8; -update noar ti set b1='RMSAGLSKXX51TIN0SKNQ1XENXZ' where id=8; -update noar tt set v0='QLJL' where id=8; -update noar ti set v0='QLJL' where id=8; -update noar tt set b2='EWIW876964QKSZLTVRXDLRZY4NK6F' where id=8; -update noar ti set b2='EWIW876964QKSZLTVRXDLRZY4NK6F' where id=8; -update noar tt set v0='SV5PMFK697' where id=9; -update noar ti set v0='SV5PMFK697' where id=9; -update noar tt set b0='14QQG7QFB' where id=9; -update noar ti set b0='14QQG7QFB' where id=9; -update noar tt set v0='DDON01WFZ' where id=9; -update noar ti set v0='DDON01WFZ' where id=9; -update noar tt set b1='0MSE3ILJSMC' where id=9; -update noar ti set b1='0MSE3ILJSMC' where id=9; -update noar tt set v0='CKP' where id=9; -update noar ti set v0='CKP' where id=9; -update noar tt set b2='IJQCFGBGPQKI61STIUC2XGBT7' where id=9; -update noar ti set b2='IJQCFGBGPQKI61STIUC2XGBT7' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 blob null, -b1 tinyblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='9XDFQHRZ' where id=1; -update noar ti set v0='9XDFQHRZ' where id=1; -update noar tt set b0='AEY7FS3YGODFKFOKNDDJF' where id=1; -update noar ti set b0='AEY7FS3YGODFKFOKNDDJF' where id=1; -update noar tt set v0='RUULZNA5ORJSRYXLUOQWXO85VJTJK15N' where id=1; -update noar ti set v0='RUULZNA5ORJSRYXLUOQWXO85VJTJK15N' where id=1; -update noar tt set b1='VPW5EDB97XAMAT5R67ZAVFOW7' where id=1; -update noar ti set b1='VPW5EDB97XAMAT5R67ZAVFOW7' where id=1; -update noar tt set v0='2OC1UQX7' where id=1; -update noar ti set v0='2OC1UQX7' where id=1; -update noar tt set b2='2DKRI' where id=1; -update noar ti set b2='2DKRI' where id=1; -update noar tt set v0='U4WJJ1' where id=2; -update noar ti set v0='U4WJJ1' where id=2; -update noar tt set b0='WEI' where id=2; -update noar ti set b0='WEI' where id=2; -update noar tt set v0='DOC' where id=2; -update noar ti set v0='DOC' where id=2; -update noar tt set b1='3MH8T' where id=2; -update noar ti set b1='3MH8T' where id=2; -update noar tt set v0='2' where id=2; -update noar ti set v0='2' where id=2; -update noar tt set b2='BHADQ1Y9WC2E9RWLCAUB97W2GMS2' where id=2; -update noar ti set b2='BHADQ1Y9WC2E9RWLCAUB97W2GMS2' where id=2; -update noar tt set v0='88VAS8IKNLBXD43R43HOK6' where id=3; -update noar ti set v0='88VAS8IKNLBXD43R43HOK6' where id=3; -update noar tt set b0='83EUI8ZFTT3WQSLEP0VJ' where id=3; -update noar ti set b0='83EUI8ZFTT3WQSLEP0VJ' where id=3; -update noar tt set v0='LMK14CTG9D90JG62SPGHTC' where id=3; -update noar ti set v0='LMK14CTG9D90JG62SPGHTC' where id=3; -update noar tt set b1='SH2K3JUEZ90G2' where id=3; -update noar ti set b1='SH2K3JUEZ90G2' where id=3; -update noar tt set v0='FR6GBB6OD2CMQEPK' where id=3; -update noar ti set v0='FR6GBB6OD2CMQEPK' where id=3; -update noar tt set b2='MP' where id=3; -update noar ti set b2='MP' where id=3; -update noar tt set v0='1W408VSWFUH30W49KRMGA7JSYT7' where id=4; -update noar ti set v0='1W408VSWFUH30W49KRMGA7JSYT7' where id=4; -update noar tt set b0='6L' where id=4; -update noar ti set b0='6L' where id=4; -update noar tt set v0='1PER18ILUB7TD5E1SX' where id=4; -update noar ti set v0='1PER18ILUB7TD5E1SX' where id=4; -update noar tt set b1='926K6RMUXV1HIA4OYK9PTTVKJA06EGM' where id=4; -update noar ti set b1='926K6RMUXV1HIA4OYK9PTTVKJA06EGM' where id=4; -update noar tt set v0='ZALNBXJMGKO' where id=4; -update noar ti set v0='ZALNBXJMGKO' where id=4; -update noar tt set b2='GPURKAN1YXECTLB6LF0UJ9SR5D13ANJ' where id=4; -update noar ti set b2='GPURKAN1YXECTLB6LF0UJ9SR5D13ANJ' where id=4; -update noar tt set v0='IYR' where id=5; -update noar ti set v0='IYR' where id=5; -update noar tt set b0='7L1HYF' where id=5; -update noar ti set b0='7L1HYF' where id=5; -update noar tt set v0='5MRO0E9ZU40IDPRIZO4LC9H8C673' where id=5; -update noar ti set v0='5MRO0E9ZU40IDPRIZO4LC9H8C673' where id=5; -update noar tt set b1='7GOL1TOIYIVVAKOA1MK' where id=5; -update noar ti set b1='7GOL1TOIYIVVAKOA1MK' where id=5; -update noar tt set v0='ZB0Z4B3S5K8' where id=5; -update noar ti set v0='ZB0Z4B3S5K8' where id=5; -update noar tt set b2='GPNONS6AC5BW47UWMMO2BG1CTX' where id=5; -update noar ti set b2='GPNONS6AC5BW47UWMMO2BG1CTX' where id=5; -update noar tt set v0='I0S7IWJX' where id=6; -update noar ti set v0='I0S7IWJX' where id=6; -update noar tt set b0='U9NUFNMZUO' where id=6; -update noar ti set b0='U9NUFNMZUO' where id=6; -update noar tt set v0='YA4Q7DF9HAX' where id=6; -update noar ti set v0='YA4Q7DF9HAX' where id=6; -update noar tt set b1='24RZ77VCJUQDR421R9CFL2BK' where id=6; -update noar ti set b1='24RZ77VCJUQDR421R9CFL2BK' where id=6; -update noar tt set v0='OVMIQQSA466D9V2TXC6GSO756XS' where id=6; -update noar ti set v0='OVMIQQSA466D9V2TXC6GSO756XS' where id=6; -update noar tt set b2='YTRR7P0GK3Y2DV72RE0T9052ZAYZ0Z' where id=6; -update noar ti set b2='YTRR7P0GK3Y2DV72RE0T9052ZAYZ0Z' where id=6; -update noar tt set v0='E41L6VELCJNGSDJGDRNRFD6ZJ2K251LU' where id=7; -update noar ti set v0='E41L6VELCJNGSDJGDRNRFD6ZJ2K251LU' where id=7; -update noar tt set b0='GRVD2LD' where id=7; -update noar ti set b0='GRVD2LD' where id=7; -update noar tt set v0='MOA1LDYHYD1YJMAHWU6V1BY5XFWC' where id=7; -update noar ti set v0='MOA1LDYHYD1YJMAHWU6V1BY5XFWC' where id=7; -update noar tt set b1='G5KK8NSOTNEE' where id=7; -update noar ti set b1='G5KK8NSOTNEE' where id=7; -update noar tt set v0='DWT98IBJOLGJ5PV90VPS8KAFQ8ENX8' where id=7; -update noar ti set v0='DWT98IBJOLGJ5PV90VPS8KAFQ8ENX8' where id=7; -update noar tt set b2='RCK8V6TBBQOLF4HL18G56K8GN6WQF7' where id=7; -update noar ti set b2='RCK8V6TBBQOLF4HL18G56K8GN6WQF7' where id=7; -update noar tt set v0='7KAQKL' where id=8; -update noar ti set v0='7KAQKL' where id=8; -update noar tt set b0='1QK3WK4X7H9ESZLU664' where id=8; -update noar ti set b0='1QK3WK4X7H9ESZLU664' where id=8; -update noar tt set v0='0K8GNCDSCR6HOT6T' where id=8; -update noar ti set v0='0K8GNCDSCR6HOT6T' where id=8; -update noar tt set b1='5FO39K' where id=8; -update noar ti set b1='5FO39K' where id=8; -update noar tt set v0='AMYERIXKF7WF0B3K' where id=8; -update noar ti set v0='AMYERIXKF7WF0B3K' where id=8; -update noar tt set b2='W7Y6K' where id=8; -update noar ti set b2='W7Y6K' where id=8; -update noar tt set v0='05F33BCNFEJLE7C6' where id=9; -update noar ti set v0='05F33BCNFEJLE7C6' where id=9; -update noar tt set b0='BPYFI7GUO7NJ39H22DJAZA575' where id=9; -update noar ti set b0='BPYFI7GUO7NJ39H22DJAZA575' where id=9; -update noar tt set v0='C1HM7JT' where id=9; -update noar ti set v0='C1HM7JT' where id=9; -update noar tt set b1='86NV1CKWSU1H2' where id=9; -update noar ti set b1='86NV1CKWSU1H2' where id=9; -update noar tt set v0='8N8GD' where id=9; -update noar ti set v0='8N8GD' where id=9; -update noar tt set b2='PO' where id=9; -update noar ti set b2='PO' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 blob not null, -b1 tinyblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='ODV7UPZ7EQHSMLPPJISN7H33KN1DWL' where id=1; -update noar ti set v0='ODV7UPZ7EQHSMLPPJISN7H33KN1DWL' where id=1; -update noar tt set b0='NOMJ14GOTT' where id=1; -update noar ti set b0='NOMJ14GOTT' where id=1; -update noar tt set v0='A4WJYQDLIKP4KE3B2Y' where id=1; -update noar ti set v0='A4WJYQDLIKP4KE3B2Y' where id=1; -update noar tt set b1='3VPZR1RFYV5N3J2GPE' where id=1; -update noar ti set b1='3VPZR1RFYV5N3J2GPE' where id=1; -update noar tt set v0='A41YVCQYFG116I8L5' where id=1; -update noar ti set v0='A41YVCQYFG116I8L5' where id=1; -update noar tt set b2='VXPLF1PRL6ONXYUDMQGU4UZ6CJUX2E' where id=1; -update noar ti set b2='VXPLF1PRL6ONXYUDMQGU4UZ6CJUX2E' where id=1; -update noar tt set v0='F00WR8Y127NFVLB9LPDLSK6QS516O4' where id=2; -update noar ti set v0='F00WR8Y127NFVLB9LPDLSK6QS516O4' where id=2; -update noar tt set b0='GQ2Q' where id=2; -update noar ti set b0='GQ2Q' where id=2; -update noar tt set v0='8Q8UE61TB7C3MBLUAKQA6VDI' where id=2; -update noar ti set v0='8Q8UE61TB7C3MBLUAKQA6VDI' where id=2; -update noar tt set b1='R' where id=2; -update noar ti set b1='R' where id=2; -update noar tt set v0='F8LDN0I' where id=2; -update noar ti set v0='F8LDN0I' where id=2; -update noar tt set b2='PVJTI3VB6BC' where id=2; -update noar ti set b2='PVJTI3VB6BC' where id=2; -update noar tt set v0='ZNRYIVVL05C6KS228393WZ' where id=3; -update noar ti set v0='ZNRYIVVL05C6KS228393WZ' where id=3; -update noar tt set b0='DZL50VC9OUDR8QOP' where id=3; -update noar ti set b0='DZL50VC9OUDR8QOP' where id=3; -update noar tt set v0='VE' where id=3; -update noar ti set v0='VE' where id=3; -update noar tt set b1='SMJQGFR' where id=3; -update noar ti set b1='SMJQGFR' where id=3; -update noar tt set v0='AZ738MJ3ZEFMC4ZMBKDF38Y' where id=3; -update noar ti set v0='AZ738MJ3ZEFMC4ZMBKDF38Y' where id=3; -update noar tt set b2='4ZKQ61RGQ' where id=3; -update noar ti set b2='4ZKQ61RGQ' where id=3; -update noar tt set v0='IXIGZ9FZ' where id=4; -update noar ti set v0='IXIGZ9FZ' where id=4; -update noar tt set b0='QK244O0B0JZ0XAQY98' where id=4; -update noar ti set b0='QK244O0B0JZ0XAQY98' where id=4; -update noar tt set v0='XDVDW8RS54769WL993Q5' where id=4; -update noar ti set v0='XDVDW8RS54769WL993Q5' where id=4; -update noar tt set b1='PR1175' where id=4; -update noar ti set b1='PR1175' where id=4; -update noar tt set v0='29H7DBRF77936UVQUW' where id=4; -update noar ti set v0='29H7DBRF77936UVQUW' where id=4; -update noar tt set b2='BT2GAW54DFR9KYRCTN6517U6CIOW' where id=4; -update noar ti set b2='BT2GAW54DFR9KYRCTN6517U6CIOW' where id=4; -update noar tt set v0='ZE97K91' where id=5; -update noar ti set v0='ZE97K91' where id=5; -update noar tt set b0='6W9MIP3YW' where id=5; -update noar ti set b0='6W9MIP3YW' where id=5; -update noar tt set v0='SZTHASRIIJB6IWKTRKDHG29O3NEVP' where id=5; -update noar ti set v0='SZTHASRIIJB6IWKTRKDHG29O3NEVP' where id=5; -update noar tt set b1='IX0ET6JRLBQAE4U8MHDZVZNF0I8O' where id=5; -update noar ti set b1='IX0ET6JRLBQAE4U8MHDZVZNF0I8O' where id=5; -update noar tt set v0='W7KY2H9W7CK6K9P2BXXB9CYKY9' where id=5; -update noar ti set v0='W7KY2H9W7CK6K9P2BXXB9CYKY9' where id=5; -update noar tt set b2='84' where id=5; -update noar ti set b2='84' where id=5; -update noar tt set v0='RZRDIVG6ODN0SF8UOJX16K04B5X' where id=6; -update noar ti set v0='RZRDIVG6ODN0SF8UOJX16K04B5X' where id=6; -update noar tt set b0='SQFF04JOJ1IJXKG8VQSZB0TINX' where id=6; -update noar ti set b0='SQFF04JOJ1IJXKG8VQSZB0TINX' where id=6; -update noar tt set v0='T12NKR7DAXXQ' where id=6; -update noar ti set v0='T12NKR7DAXXQ' where id=6; -update noar tt set b1='UFLYIJVHAGE0JE5K4H6BZGC5LLYY' where id=6; -update noar ti set b1='UFLYIJVHAGE0JE5K4H6BZGC5LLYY' where id=6; -update noar tt set v0='FK2DCYYAYRR3KK' where id=6; -update noar ti set v0='FK2DCYYAYRR3KK' where id=6; -update noar tt set b2='7J' where id=6; -update noar ti set b2='7J' where id=6; -update noar tt set v0='KIR385LYTO2AK7L91' where id=7; -update noar ti set v0='KIR385LYTO2AK7L91' where id=7; -update noar tt set b0='4RXSJKU6XR8VZHJX10917N2FOFXS4YN' where id=7; -update noar ti set b0='4RXSJKU6XR8VZHJX10917N2FOFXS4YN' where id=7; -update noar tt set v0='PDCQIAUNNHVM7A8O1M0QAFW4IABLWX' where id=7; -update noar ti set v0='PDCQIAUNNHVM7A8O1M0QAFW4IABLWX' where id=7; -update noar tt set b1='FJVN7GTNZFMU46135YV35GH417G1T' where id=7; -update noar ti set b1='FJVN7GTNZFMU46135YV35GH417G1T' where id=7; -update noar tt set v0='S045UNV956NY4XKKLKJZBPGOBJ0J6CH' where id=7; -update noar ti set v0='S045UNV956NY4XKKLKJZBPGOBJ0J6CH' where id=7; -update noar tt set b2='9WMSZHX3WH2I35EG9O1' where id=7; -update noar ti set b2='9WMSZHX3WH2I35EG9O1' where id=7; -update noar tt set v0='1SFRKQD3NA1M48WH4FIXK5QY1BK' where id=8; -update noar ti set v0='1SFRKQD3NA1M48WH4FIXK5QY1BK' where id=8; -update noar tt set b0='LVYZFAB8I77YXFVO3O71WXNWCP0B' where id=8; -update noar ti set b0='LVYZFAB8I77YXFVO3O71WXNWCP0B' where id=8; -update noar tt set v0='XDS2HZ2MLTVU0EBGFB8AVYDX5FRCXK' where id=8; -update noar ti set v0='XDS2HZ2MLTVU0EBGFB8AVYDX5FRCXK' where id=8; -update noar tt set b1='4FS6QG3M8Q' where id=8; -update noar ti set b1='4FS6QG3M8Q' where id=8; -update noar tt set v0='RB5ZSM7NYGHDVSLGWRODNCD8' where id=8; -update noar ti set v0='RB5ZSM7NYGHDVSLGWRODNCD8' where id=8; -update noar tt set b2='O628V85DSK1' where id=8; -update noar ti set b2='O628V85DSK1' where id=8; -update noar tt set v0='7JP47VJLJRBTUI4S4SD8X4TN7GR5FDV' where id=9; -update noar ti set v0='7JP47VJLJRBTUI4S4SD8X4TN7GR5FDV' where id=9; -update noar tt set b0='7IDGS' where id=9; -update noar ti set b0='7IDGS' where id=9; -update noar tt set v0='TGJRIIRWWT4H0UYYH' where id=9; -update noar ti set v0='TGJRIIRWWT4H0UYYH' where id=9; -update noar tt set b1='CWFNXGFKIYSLTVM0AODZNRYH91F' where id=9; -update noar ti set b1='CWFNXGFKIYSLTVM0AODZNRYH91F' where id=9; -update noar tt set v0='D4IFZ9UQ08CA5' where id=9; -update noar ti set v0='D4IFZ9UQ08CA5' where id=9; -update noar tt set b2='ANVVLU062TAZOYGEN8ACB5C' where id=9; -update noar ti set b2='ANVVLU062TAZOYGEN8ACB5C' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 blob not null, -b1 tinyblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='4M8YLA24RDDDL' where id=1; -update noar ti set v0='4M8YLA24RDDDL' where id=1; -update noar tt set b0='D4TP2IW6' where id=1; -update noar ti set b0='D4TP2IW6' where id=1; -update noar tt set v0='USQLL20Y9WEOOQJP9TE29YON1QB5IIS' where id=1; -update noar ti set v0='USQLL20Y9WEOOQJP9TE29YON1QB5IIS' where id=1; -update noar tt set b1='9CJPKGQ3W' where id=1; -update noar ti set b1='9CJPKGQ3W' where id=1; -update noar tt set v0='X0UP' where id=1; -update noar ti set v0='X0UP' where id=1; -update noar tt set b2='OKWPTR2D' where id=1; -update noar ti set b2='OKWPTR2D' where id=1; -update noar tt set v0='AF4ZO89HLZUL2R69POVU' where id=2; -update noar ti set v0='AF4ZO89HLZUL2R69POVU' where id=2; -update noar tt set b0='OU9P29YYO0' where id=2; -update noar ti set b0='OU9P29YYO0' where id=2; -update noar tt set v0='WRV5NIK57C8HU' where id=2; -update noar ti set v0='WRV5NIK57C8HU' where id=2; -update noar tt set b1='3NDY8RJLSAADPNBQRDDBD4PM333R1B' where id=2; -update noar ti set b1='3NDY8RJLSAADPNBQRDDBD4PM333R1B' where id=2; -update noar tt set v0='LSG95QU89O8GKJ9DDM32S561JXNR3T4B' where id=2; -update noar ti set v0='LSG95QU89O8GKJ9DDM32S561JXNR3T4B' where id=2; -update noar tt set b2='4UJ0BCHI3FUXJVN2H7Z2I7YN' where id=2; -update noar ti set b2='4UJ0BCHI3FUXJVN2H7Z2I7YN' where id=2; -update noar tt set v0='WEBJ' where id=3; -update noar ti set v0='WEBJ' where id=3; -update noar tt set b0='AG62V7OP8YSOGHHTBRDD9NH90M' where id=3; -update noar ti set b0='AG62V7OP8YSOGHHTBRDD9NH90M' where id=3; -update noar tt set v0='I9OFH' where id=3; -update noar ti set v0='I9OFH' where id=3; -update noar tt set b1='70D7UOBABGBCPMYGAL53EBJXWLMT' where id=3; -update noar ti set b1='70D7UOBABGBCPMYGAL53EBJXWLMT' where id=3; -update noar tt set v0='MV0BE2G5T3ZH69PLRH99KH6G4J8' where id=3; -update noar ti set v0='MV0BE2G5T3ZH69PLRH99KH6G4J8' where id=3; -update noar tt set b2='2BHYFO5VOCEO986NH4E6W77ZL6' where id=3; -update noar ti set b2='2BHYFO5VOCEO986NH4E6W77ZL6' where id=3; -update noar tt set v0='EF6DN0FYBD59BGLGQR' where id=4; -update noar ti set v0='EF6DN0FYBD59BGLGQR' where id=4; -update noar tt set b0='DYUOA3M5' where id=4; -update noar ti set b0='DYUOA3M5' where id=4; -update noar tt set v0='VKZ0EFQ4IB2NMUY1PSE43U2Q' where id=4; -update noar ti set v0='VKZ0EFQ4IB2NMUY1PSE43U2Q' where id=4; -update noar tt set b1='9XYPYQZQ360YTCSMHAK1HHNCL20POR' where id=4; -update noar ti set b1='9XYPYQZQ360YTCSMHAK1HHNCL20POR' where id=4; -update noar tt set v0='F372VYQTVDPGYJ6YJEWN1BP7OIMUUI' where id=4; -update noar ti set v0='F372VYQTVDPGYJ6YJEWN1BP7OIMUUI' where id=4; -update noar tt set b2='7ZYPK9Q' where id=4; -update noar ti set b2='7ZYPK9Q' where id=4; -update noar tt set v0='69O5' where id=5; -update noar ti set v0='69O5' where id=5; -update noar tt set b0='KSNF96TJ6HMRC9' where id=5; -update noar ti set b0='KSNF96TJ6HMRC9' where id=5; -update noar tt set v0='P0Q54' where id=5; -update noar ti set v0='P0Q54' where id=5; -update noar tt set b1='Z6' where id=5; -update noar ti set b1='Z6' where id=5; -update noar tt set v0='EOS2HQE0FNIXLRPI' where id=5; -update noar ti set v0='EOS2HQE0FNIXLRPI' where id=5; -update noar tt set b2='OY946LJQ3MQ555ZHHJEGPSO2E7ZTP' where id=5; -update noar ti set b2='OY946LJQ3MQ555ZHHJEGPSO2E7ZTP' where id=5; -update noar tt set v0='3JOTKETQCGE27KEUDNJYXXCKSJVUIA' where id=6; -update noar ti set v0='3JOTKETQCGE27KEUDNJYXXCKSJVUIA' where id=6; -update noar tt set b0='YHQDCVI' where id=6; -update noar ti set b0='YHQDCVI' where id=6; -update noar tt set v0='O2P00KQLPWIS6XCHJN78EFEUPJX7G8ND' where id=6; -update noar ti set v0='O2P00KQLPWIS6XCHJN78EFEUPJX7G8ND' where id=6; -update noar tt set b1='KPECLAOA' where id=6; -update noar ti set b1='KPECLAOA' where id=6; -update noar tt set v0='VGSOA0ZC' where id=6; -update noar ti set v0='VGSOA0ZC' where id=6; -update noar tt set b2='RUPIDL7O5UGPY' where id=6; -update noar ti set b2='RUPIDL7O5UGPY' where id=6; -update noar tt set v0='339AJBNX5BLY4OJ9IAQWQY' where id=7; -update noar ti set v0='339AJBNX5BLY4OJ9IAQWQY' where id=7; -update noar tt set b0='OZZNDH9KJ9NONF322ONYO3R7' where id=7; -update noar ti set b0='OZZNDH9KJ9NONF322ONYO3R7' where id=7; -update noar tt set v0='96' where id=7; -update noar ti set v0='96' where id=7; -update noar tt set b1='5REZ7R8JAZGCKN86H3' where id=7; -update noar ti set b1='5REZ7R8JAZGCKN86H3' where id=7; -update noar tt set v0='Z3FX9XT7MR3JIMCS8' where id=7; -update noar ti set v0='Z3FX9XT7MR3JIMCS8' where id=7; -update noar tt set b2='UJSTK5XOL5ZBFOSLUZX5N' where id=7; -update noar ti set b2='UJSTK5XOL5ZBFOSLUZX5N' where id=7; -update noar tt set v0='CGCYXO2SQ75H8GGE97SIO' where id=8; -update noar ti set v0='CGCYXO2SQ75H8GGE97SIO' where id=8; -update noar tt set b0='TGFIKBRLL' where id=8; -update noar ti set b0='TGFIKBRLL' where id=8; -update noar tt set v0='HRFE9X742SWXI0L1KSK7XUIN' where id=8; -update noar ti set v0='HRFE9X742SWXI0L1KSK7XUIN' where id=8; -update noar tt set b1='9ECT3260X69' where id=8; -update noar ti set b1='9ECT3260X69' where id=8; -update noar tt set v0='EIHZ1DCJ5MRT' where id=8; -update noar ti set v0='EIHZ1DCJ5MRT' where id=8; -update noar tt set b2='S7FMCMBWO' where id=8; -update noar ti set b2='S7FMCMBWO' where id=8; -update noar tt set v0='2NPSJYS8LQ' where id=9; -update noar ti set v0='2NPSJYS8LQ' where id=9; -update noar tt set b0='AHUV6N' where id=9; -update noar ti set b0='AHUV6N' where id=9; -update noar tt set v0='NBSMH39QV6CFZSCTWNTOIC3MGHISMRSJ' where id=9; -update noar ti set v0='NBSMH39QV6CFZSCTWNTOIC3MGHISMRSJ' where id=9; -update noar tt set b1='7VQZ487C6NWN02T6DJ6YI4BF' where id=9; -update noar ti set b1='7VQZ487C6NWN02T6DJ6YI4BF' where id=9; -update noar tt set v0='SAOX07KTBIV040IBBWIID8' where id=9; -update noar ti set v0='SAOX07KTBIV040IBBWIID8' where id=9; -update noar tt set b2='0937' where id=9; -update noar ti set b2='0937' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 blob null, -b1 tinyblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='JQZKF4OF4I1HY5' where id=1; -update noar ti set v0='JQZKF4OF4I1HY5' where id=1; -update noar tt set b0='QO3A' where id=1; -update noar ti set b0='QO3A' where id=1; -update noar tt set v0='64Q02FVIQJXQ5V' where id=1; -update noar ti set v0='64Q02FVIQJXQ5V' where id=1; -update noar tt set b1='YISKHI6URNRY0C22XGVH997WJ9HJROT' where id=1; -update noar ti set b1='YISKHI6URNRY0C22XGVH997WJ9HJROT' where id=1; -update noar tt set v0='CKKZN' where id=1; -update noar ti set v0='CKKZN' where id=1; -update noar tt set b2='HS' where id=1; -update noar ti set b2='HS' where id=1; -update noar tt set v0='T62APNUZGXYDEDGZW' where id=2; -update noar ti set v0='T62APNUZGXYDEDGZW' where id=2; -update noar tt set b0='S0PZCLTW' where id=2; -update noar ti set b0='S0PZCLTW' where id=2; -update noar tt set v0='6BZDJEJBTOQB1BB8ATW6WTP2' where id=2; -update noar ti set v0='6BZDJEJBTOQB1BB8ATW6WTP2' where id=2; -update noar tt set b1='4KZSC0E8W5VVPG1EK3R9FO8' where id=2; -update noar ti set b1='4KZSC0E8W5VVPG1EK3R9FO8' where id=2; -update noar tt set v0='3APFGA41351E35UKW9GNYR8' where id=2; -update noar ti set v0='3APFGA41351E35UKW9GNYR8' where id=2; -update noar tt set b2='FUN2K93OFXEZWLSCQ46N' where id=2; -update noar ti set b2='FUN2K93OFXEZWLSCQ46N' where id=2; -update noar tt set v0='3RBPJYLTC9Z' where id=3; -update noar ti set v0='3RBPJYLTC9Z' where id=3; -update noar tt set b0='DOYCKN0TFXCL63SG2HTVD3V' where id=3; -update noar ti set b0='DOYCKN0TFXCL63SG2HTVD3V' where id=3; -update noar tt set v0='85KW55IBZ6J2DLA3N5P7' where id=3; -update noar ti set v0='85KW55IBZ6J2DLA3N5P7' where id=3; -update noar tt set b1='DBVAH1A0V21O' where id=3; -update noar ti set b1='DBVAH1A0V21O' where id=3; -update noar tt set v0='HPK4HGY6BR9O5AZMC5HIU' where id=3; -update noar ti set v0='HPK4HGY6BR9O5AZMC5HIU' where id=3; -update noar tt set b2='YIPB2XUE3E42CFP9S8QNMEB8P' where id=3; -update noar ti set b2='YIPB2XUE3E42CFP9S8QNMEB8P' where id=3; -update noar tt set v0='DTU60U3L8B3GS3TVQ1CEKNOPP6' where id=4; -update noar ti set v0='DTU60U3L8B3GS3TVQ1CEKNOPP6' where id=4; -update noar tt set b0='WQFEFIK' where id=4; -update noar ti set b0='WQFEFIK' where id=4; -update noar tt set v0='N' where id=4; -update noar ti set v0='N' where id=4; -update noar tt set b1='G1P' where id=4; -update noar ti set b1='G1P' where id=4; -update noar tt set v0='LVG069PMOYPFNUJJ' where id=4; -update noar ti set v0='LVG069PMOYPFNUJJ' where id=4; -update noar tt set b2='17N4KB5YXDCAFFPN6VR' where id=4; -update noar ti set b2='17N4KB5YXDCAFFPN6VR' where id=4; -update noar tt set v0='NAL2IETRW4AW' where id=5; -update noar ti set v0='NAL2IETRW4AW' where id=5; -update noar tt set b0='27CI4KSS9ARHQVVM5K7' where id=5; -update noar ti set b0='27CI4KSS9ARHQVVM5K7' where id=5; -update noar tt set v0='AQ' where id=5; -update noar ti set v0='AQ' where id=5; -update noar tt set b1='0WWOL64LIXTQAP' where id=5; -update noar ti set b1='0WWOL64LIXTQAP' where id=5; -update noar tt set v0='W9IN034RPM5EEE8616Y3HRMNCRQ' where id=5; -update noar ti set v0='W9IN034RPM5EEE8616Y3HRMNCRQ' where id=5; -update noar tt set b2='9KEK93ZX' where id=5; -update noar ti set b2='9KEK93ZX' where id=5; -update noar tt set v0='PT' where id=6; -update noar ti set v0='PT' where id=6; -update noar tt set b0='HSCGIIQLA7HDBXD8OD76BLBL71NR1V' where id=6; -update noar ti set b0='HSCGIIQLA7HDBXD8OD76BLBL71NR1V' where id=6; -update noar tt set v0='ORYP20BYRK5WZMCT0NLRXM17SQUV' where id=6; -update noar ti set v0='ORYP20BYRK5WZMCT0NLRXM17SQUV' where id=6; -update noar tt set b1='1RC8HR6W8PEX1ESIJKI59' where id=6; -update noar ti set b1='1RC8HR6W8PEX1ESIJKI59' where id=6; -update noar tt set v0='Q3BOBVB4JTSSW9SA' where id=6; -update noar ti set v0='Q3BOBVB4JTSSW9SA' where id=6; -update noar tt set b2='J' where id=6; -update noar ti set b2='J' where id=6; -update noar tt set v0='D1EFQ3' where id=7; -update noar ti set v0='D1EFQ3' where id=7; -update noar tt set b0='BQE81RMMANSTYPPJKMJY' where id=7; -update noar ti set b0='BQE81RMMANSTYPPJKMJY' where id=7; -update noar tt set v0='7D52MJWV22ALOWVGQ21AEQTGOV5' where id=7; -update noar ti set v0='7D52MJWV22ALOWVGQ21AEQTGOV5' where id=7; -update noar tt set b1='MIDSBIHN0PG0Z831SUT5SPAA' where id=7; -update noar ti set b1='MIDSBIHN0PG0Z831SUT5SPAA' where id=7; -update noar tt set v0='UNTWDR' where id=7; -update noar ti set v0='UNTWDR' where id=7; -update noar tt set b2='K' where id=7; -update noar ti set b2='K' where id=7; -update noar tt set v0='AGY8E' where id=8; -update noar ti set v0='AGY8E' where id=8; -update noar tt set b0='TZCZEWYVWF5' where id=8; -update noar ti set b0='TZCZEWYVWF5' where id=8; -update noar tt set v0='YGA1WRO' where id=8; -update noar ti set v0='YGA1WRO' where id=8; -update noar tt set b1='QEZUWVP5Z62YHFHZDK' where id=8; -update noar ti set b1='QEZUWVP5Z62YHFHZDK' where id=8; -update noar tt set v0='86RZ' where id=8; -update noar ti set v0='86RZ' where id=8; -update noar tt set b2='0RWFZ7TPE63V6EEGKUYDHNHKL9VC' where id=8; -update noar ti set b2='0RWFZ7TPE63V6EEGKUYDHNHKL9VC' where id=8; -update noar tt set v0='DJLR7ZN66VHP5SJ52T1SJHXT6FFA' where id=9; -update noar ti set v0='DJLR7ZN66VHP5SJ52T1SJHXT6FFA' where id=9; -update noar tt set b0='ZXE0OG6EKSIR6J7Q1J0O2L5L' where id=9; -update noar ti set b0='ZXE0OG6EKSIR6J7Q1J0O2L5L' where id=9; -update noar tt set v0='F2XC3WBW3HC3RJNH' where id=9; -update noar ti set v0='F2XC3WBW3HC3RJNH' where id=9; -update noar tt set b1='F0I7I9R5XRXEH7WLIV00HC' where id=9; -update noar ti set b1='F0I7I9R5XRXEH7WLIV00HC' where id=9; -update noar tt set v0='T2NMZ9CR6MSWJ1I4D8N0IX8' where id=9; -update noar ti set v0='T2NMZ9CR6MSWJ1I4D8N0IX8' where id=9; -update noar tt set b2='XPFUETP3' where id=9; -update noar ti set b2='XPFUETP3' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 blob null, -b1 tinyblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='AQKVGZ6XDYVP' where id=1; -update noar ti set v0='AQKVGZ6XDYVP' where id=1; -update noar tt set b0='RBDJUEY5' where id=1; -update noar ti set b0='RBDJUEY5' where id=1; -update noar tt set v0='CQT4S9WM3IQUH3V40V4BW51WM' where id=1; -update noar ti set v0='CQT4S9WM3IQUH3V40V4BW51WM' where id=1; -update noar tt set b1='UQD5Y83TYJAJKZBJHMR171ZLSM' where id=1; -update noar ti set b1='UQD5Y83TYJAJKZBJHMR171ZLSM' where id=1; -update noar tt set v0='52K1R59WZ76P2GNL' where id=1; -update noar ti set v0='52K1R59WZ76P2GNL' where id=1; -update noar tt set b2='28RU6X7TPTCVKG8UMNFF36P' where id=1; -update noar ti set b2='28RU6X7TPTCVKG8UMNFF36P' where id=1; -update noar tt set v0='36AINGN9ZBYYFONO3JMRVXK4' where id=2; -update noar ti set v0='36AINGN9ZBYYFONO3JMRVXK4' where id=2; -update noar tt set b0='YIYS3UU6H' where id=2; -update noar ti set b0='YIYS3UU6H' where id=2; -update noar tt set v0='M1SYAHOU0961UPPGEXP' where id=2; -update noar ti set v0='M1SYAHOU0961UPPGEXP' where id=2; -update noar tt set b1='TJ81E5JY0X7XZJCDIE' where id=2; -update noar ti set b1='TJ81E5JY0X7XZJCDIE' where id=2; -update noar tt set v0='LG0TMT' where id=2; -update noar ti set v0='LG0TMT' where id=2; -update noar tt set b2='07ITRA1Y' where id=2; -update noar ti set b2='07ITRA1Y' where id=2; -update noar tt set v0='68XHZKEH98X4TKD' where id=3; -update noar ti set v0='68XHZKEH98X4TKD' where id=3; -update noar tt set b0='Q1X1SSM4P' where id=3; -update noar ti set b0='Q1X1SSM4P' where id=3; -update noar tt set v0='BHUGLWAG9IM' where id=3; -update noar ti set v0='BHUGLWAG9IM' where id=3; -update noar tt set b1='OR1TW6KTV4R7LM' where id=3; -update noar ti set b1='OR1TW6KTV4R7LM' where id=3; -update noar tt set v0='0361U4' where id=3; -update noar ti set v0='0361U4' where id=3; -update noar tt set b2='IH732A3V2MGGAGU8KKA8W' where id=3; -update noar ti set b2='IH732A3V2MGGAGU8KKA8W' where id=3; -update noar tt set v0='11EH8WAD5X0C6D8L3I3S' where id=4; -update noar ti set v0='11EH8WAD5X0C6D8L3I3S' where id=4; -update noar tt set b0='QVW7DDBC5' where id=4; -update noar ti set b0='QVW7DDBC5' where id=4; -update noar tt set v0='J0VYFHP35ATPVPKTCTJA9T2MQ09SW2' where id=4; -update noar ti set v0='J0VYFHP35ATPVPKTCTJA9T2MQ09SW2' where id=4; -update noar tt set b1='NHRQEPGF65BAAFBM317QIHWZ5T' where id=4; -update noar ti set b1='NHRQEPGF65BAAFBM317QIHWZ5T' where id=4; -update noar tt set v0='G0WOKPSIH2WJM2KP74CNE4VG64DD7MKT' where id=4; -update noar ti set v0='G0WOKPSIH2WJM2KP74CNE4VG64DD7MKT' where id=4; -update noar tt set b2='2UREJR0VTFHVY1Y8BW' where id=4; -update noar ti set b2='2UREJR0VTFHVY1Y8BW' where id=4; -update noar tt set v0='PEIABRO5VVBGRX2L556BFPJCC' where id=5; -update noar ti set v0='PEIABRO5VVBGRX2L556BFPJCC' where id=5; -update noar tt set b0='S0N67UTCBDKPWZLX0' where id=5; -update noar ti set b0='S0N67UTCBDKPWZLX0' where id=5; -update noar tt set v0='6Y6RNTSBC74' where id=5; -update noar ti set v0='6Y6RNTSBC74' where id=5; -update noar tt set b1='2JOF0P' where id=5; -update noar ti set b1='2JOF0P' where id=5; -update noar tt set v0='O9VXISL7JSAS2SA4VVS37CTC' where id=5; -update noar ti set v0='O9VXISL7JSAS2SA4VVS37CTC' where id=5; -update noar tt set b2='IAXLA99RXUBLC266TWBAMA5WHDXAA2ZD' where id=5; -update noar ti set b2='IAXLA99RXUBLC266TWBAMA5WHDXAA2ZD' where id=5; -update noar tt set v0='306AFPW' where id=6; -update noar ti set v0='306AFPW' where id=6; -update noar tt set b0='N5CP6VWDJJ9Y2JEJUPASJECMTXU6AMF' where id=6; -update noar ti set b0='N5CP6VWDJJ9Y2JEJUPASJECMTXU6AMF' where id=6; -update noar tt set v0='K1LM42BJW3EZWKU6' where id=6; -update noar ti set v0='K1LM42BJW3EZWKU6' where id=6; -update noar tt set b1='A3T7DGBY857NX1S' where id=6; -update noar ti set b1='A3T7DGBY857NX1S' where id=6; -update noar tt set v0='2U14QTNCNU2' where id=6; -update noar ti set v0='2U14QTNCNU2' where id=6; -update noar tt set b2='Z5BKVUHN6EDLVIT7UT9TUJK3' where id=6; -update noar ti set b2='Z5BKVUHN6EDLVIT7UT9TUJK3' where id=6; -update noar tt set v0='Q39KXSZKKW6W7ZVV' where id=7; -update noar ti set v0='Q39KXSZKKW6W7ZVV' where id=7; -update noar tt set b0='DY7E0' where id=7; -update noar ti set b0='DY7E0' where id=7; -update noar tt set v0='BP02QLIKA3GSK9IBRM0O4YI1' where id=7; -update noar ti set v0='BP02QLIKA3GSK9IBRM0O4YI1' where id=7; -update noar tt set b1='JZWJW34TDPV4NDSPK59L6' where id=7; -update noar ti set b1='JZWJW34TDPV4NDSPK59L6' where id=7; -update noar tt set v0='AMSO269EUQLFWBS1H6' where id=7; -update noar ti set v0='AMSO269EUQLFWBS1H6' where id=7; -update noar tt set b2='PSOXACLVZFR1LKX4LE7WIUSHWCS6U6R8' where id=7; -update noar ti set b2='PSOXACLVZFR1LKX4LE7WIUSHWCS6U6R8' where id=7; -update noar tt set v0='NF1976' where id=8; -update noar ti set v0='NF1976' where id=8; -update noar tt set b0='L2ADQY8GAIKROUZW74NATT7HE3CW6YC' where id=8; -update noar ti set b0='L2ADQY8GAIKROUZW74NATT7HE3CW6YC' where id=8; -update noar tt set v0='25E7C4AMBKJ6Q' where id=8; -update noar ti set v0='25E7C4AMBKJ6Q' where id=8; -update noar tt set b1='DAX' where id=8; -update noar ti set b1='DAX' where id=8; -update noar tt set v0='2BF186R9DC15VUHUZ4IWAICEQT' where id=8; -update noar ti set v0='2BF186R9DC15VUHUZ4IWAICEQT' where id=8; -update noar tt set b2='IETXCKKXSE81ZDM04A4V5J13PH' where id=8; -update noar ti set b2='IETXCKKXSE81ZDM04A4V5J13PH' where id=8; -update noar tt set v0='LC3OYXYDW26M0QJ8RC2F2' where id=9; -update noar ti set v0='LC3OYXYDW26M0QJ8RC2F2' where id=9; -update noar tt set b0='MOA1WS3U3YSSLT05' where id=9; -update noar ti set b0='MOA1WS3U3YSSLT05' where id=9; -update noar tt set v0='DFO4RL9FOZ9BW6TYMP58GSJJW6' where id=9; -update noar ti set v0='DFO4RL9FOZ9BW6TYMP58GSJJW6' where id=9; -update noar tt set b1='Z5HQE' where id=9; -update noar ti set b1='Z5HQE' where id=9; -update noar tt set v0='AFB3ADFRP7H' where id=9; -update noar ti set v0='AFB3ADFRP7H' where id=9; -update noar tt set b2='YLQTW6457I0M05Y5A4NZG6KE' where id=9; -update noar ti set b2='YLQTW6457I0M05Y5A4NZG6KE' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 blob not null, -b1 tinyblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='1QFLEOZY95V7GPXG' where id=1; -update noar ti set v0='1QFLEOZY95V7GPXG' where id=1; -update noar tt set b0='5N8T3FBDVP3D54MDD8VDP' where id=1; -update noar ti set b0='5N8T3FBDVP3D54MDD8VDP' where id=1; -update noar tt set v0='ES2HN9AFEBGV' where id=1; -update noar ti set v0='ES2HN9AFEBGV' where id=1; -update noar tt set b1='65WISW1WR30DZZN2OX' where id=1; -update noar ti set b1='65WISW1WR30DZZN2OX' where id=1; -update noar tt set v0='XEQRFC411G4VTSM0' where id=1; -update noar ti set v0='XEQRFC411G4VTSM0' where id=1; -update noar tt set b2='HBCU' where id=1; -update noar ti set b2='HBCU' where id=1; -update noar tt set v0='GEBTNO62' where id=2; -update noar ti set v0='GEBTNO62' where id=2; -update noar tt set b0='VZE9RJMBAWUF81G' where id=2; -update noar ti set b0='VZE9RJMBAWUF81G' where id=2; -update noar tt set v0='H3F3473K1OJG3FJG18' where id=2; -update noar ti set v0='H3F3473K1OJG3FJG18' where id=2; -update noar tt set b1='SNERJMZOPU' where id=2; -update noar ti set b1='SNERJMZOPU' where id=2; -update noar tt set v0='R' where id=2; -update noar ti set v0='R' where id=2; -update noar tt set b2='U6' where id=2; -update noar ti set b2='U6' where id=2; -update noar tt set v0='XXQVK9YR491UB0WIM0A2' where id=3; -update noar ti set v0='XXQVK9YR491UB0WIM0A2' where id=3; -update noar tt set b0='XJYZLCRXTR02LGTY4G' where id=3; -update noar ti set b0='XJYZLCRXTR02LGTY4G' where id=3; -update noar tt set v0='V4NMM9TEVFDH5OQ5C8Q05B' where id=3; -update noar ti set v0='V4NMM9TEVFDH5OQ5C8Q05B' where id=3; -update noar tt set b1='YYSUSK7XQJ' where id=3; -update noar ti set b1='YYSUSK7XQJ' where id=3; -update noar tt set v0='L7ZD' where id=3; -update noar ti set v0='L7ZD' where id=3; -update noar tt set b2='NCDYVN0FZ95CJU2O25H9M433RZYYZ' where id=3; -update noar ti set b2='NCDYVN0FZ95CJU2O25H9M433RZYYZ' where id=3; -update noar tt set v0='O7N' where id=4; -update noar ti set v0='O7N' where id=4; -update noar tt set b0='V68GBFWGO496QSP6TRUVUKQNVC' where id=4; -update noar ti set b0='V68GBFWGO496QSP6TRUVUKQNVC' where id=4; -update noar tt set v0='C55665A2VZVF' where id=4; -update noar ti set v0='C55665A2VZVF' where id=4; -update noar tt set b1='SHNHOWL5ZEAWGT57WH5MC' where id=4; -update noar ti set b1='SHNHOWL5ZEAWGT57WH5MC' where id=4; -update noar tt set v0='ILANGQBVR0U' where id=4; -update noar ti set v0='ILANGQBVR0U' where id=4; -update noar tt set b2='IGIUA0GJ9' where id=4; -update noar ti set b2='IGIUA0GJ9' where id=4; -update noar tt set v0='PM9L27OCD0NDFID' where id=5; -update noar ti set v0='PM9L27OCD0NDFID' where id=5; -update noar tt set b0='W3PD8K8' where id=5; -update noar ti set b0='W3PD8K8' where id=5; -update noar tt set v0='5QKI33GKH9DZVQZ' where id=5; -update noar ti set v0='5QKI33GKH9DZVQZ' where id=5; -update noar tt set b1='AORLPK' where id=5; -update noar ti set b1='AORLPK' where id=5; -update noar tt set v0='8AHJM7ONR1IGKZYSV89NC3WDY86FD1XG' where id=5; -update noar ti set v0='8AHJM7ONR1IGKZYSV89NC3WDY86FD1XG' where id=5; -update noar tt set b2='VGJUULSPU0B2' where id=5; -update noar ti set b2='VGJUULSPU0B2' where id=5; -update noar tt set v0='SOGNKNK0JTPD' where id=6; -update noar ti set v0='SOGNKNK0JTPD' where id=6; -update noar tt set b0='O' where id=6; -update noar ti set b0='O' where id=6; -update noar tt set v0='VGR7K16GHINUZDF97K' where id=6; -update noar ti set v0='VGR7K16GHINUZDF97K' where id=6; -update noar tt set b1='T924XEYY82I00GBQ4PHMY9KT3U188' where id=6; -update noar ti set b1='T924XEYY82I00GBQ4PHMY9KT3U188' where id=6; -update noar tt set v0='R76CM1FLVLG' where id=6; -update noar ti set v0='R76CM1FLVLG' where id=6; -update noar tt set b2='9W2K46LUBPULEUD2JHZNDBP1A39X0W' where id=6; -update noar ti set b2='9W2K46LUBPULEUD2JHZNDBP1A39X0W' where id=6; -update noar tt set v0='7PAW' where id=7; -update noar ti set v0='7PAW' where id=7; -update noar tt set b0='RB7HX7LZ0DO7V2H5RMPI' where id=7; -update noar ti set b0='RB7HX7LZ0DO7V2H5RMPI' where id=7; -update noar tt set v0='N2QDKTNJD6B' where id=7; -update noar ti set v0='N2QDKTNJD6B' where id=7; -update noar tt set b1='JIQB3SIBSFD1FRJZM6MD9IP8WM' where id=7; -update noar ti set b1='JIQB3SIBSFD1FRJZM6MD9IP8WM' where id=7; -update noar tt set v0='7XYRR9DB0P8ROJOQEK40HF' where id=7; -update noar ti set v0='7XYRR9DB0P8ROJOQEK40HF' where id=7; -update noar tt set b2='6UYR1QXWADW9P0V' where id=7; -update noar ti set b2='6UYR1QXWADW9P0V' where id=7; -update noar tt set v0='HX8KNLP6SQTLK8YIAD' where id=8; -update noar ti set v0='HX8KNLP6SQTLK8YIAD' where id=8; -update noar tt set b0='5QF1XQY8EEFN5V4AS7OXBQJREBSL9157' where id=8; -update noar ti set b0='5QF1XQY8EEFN5V4AS7OXBQJREBSL9157' where id=8; -update noar tt set v0='5S3RPTKS8623Q9CCIDTOA3O9JXDQD' where id=8; -update noar ti set v0='5S3RPTKS8623Q9CCIDTOA3O9JXDQD' where id=8; -update noar tt set b1='TCVWWZXMSNRC6B9MPP' where id=8; -update noar ti set b1='TCVWWZXMSNRC6B9MPP' where id=8; -update noar tt set v0='TXXCDN4SCMU79E' where id=8; -update noar ti set v0='TXXCDN4SCMU79E' where id=8; -update noar tt set b2='990E4IXCJKWENKUSTQL1NMFLS0HU4ZMG' where id=8; -update noar ti set b2='990E4IXCJKWENKUSTQL1NMFLS0HU4ZMG' where id=8; -update noar tt set v0='QH3JA7DFIKS8FX3G' where id=9; -update noar ti set v0='QH3JA7DFIKS8FX3G' where id=9; -update noar tt set b0='3UBRY77M38VEDTJJD6CSQ5OIG95T6' where id=9; -update noar ti set b0='3UBRY77M38VEDTJJD6CSQ5OIG95T6' where id=9; -update noar tt set v0='ZHNJMTJJNOGV82IWLWDB19AW9H2OFT0B' where id=9; -update noar ti set v0='ZHNJMTJJNOGV82IWLWDB19AW9H2OFT0B' where id=9; -update noar tt set b1='GO0ONIGKPY267V3UN3IP6S9' where id=9; -update noar ti set b1='GO0ONIGKPY267V3UN3IP6S9' where id=9; -update noar tt set v0='3B5Q7PIB4T2' where id=9; -update noar ti set v0='3B5Q7PIB4T2' where id=9; -update noar tt set b2='ATKB1B' where id=9; -update noar ti set b2='ATKB1B' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 blob not null, -b1 tinyblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='OI7J12' where id=1; -update noar ti set v0='OI7J12' where id=1; -update noar tt set b0='L2H2X0Q65JS27' where id=1; -update noar ti set b0='L2H2X0Q65JS27' where id=1; -update noar tt set v0='KG' where id=1; -update noar ti set v0='KG' where id=1; -update noar tt set b1='CURZAL8QB5H1I7CVQCMXRW4O' where id=1; -update noar ti set b1='CURZAL8QB5H1I7CVQCMXRW4O' where id=1; -update noar tt set v0='Y8ZTRWBC4711' where id=1; -update noar ti set v0='Y8ZTRWBC4711' where id=1; -update noar tt set b2='MTZ1GXBKO8OT70JR7' where id=1; -update noar ti set b2='MTZ1GXBKO8OT70JR7' where id=1; -update noar tt set v0='9II7AO8CJZ0IK9EH' where id=2; -update noar ti set v0='9II7AO8CJZ0IK9EH' where id=2; -update noar tt set b0='SZUCK76WLQH5Y6VMV546G50KH0251H9B' where id=2; -update noar ti set b0='SZUCK76WLQH5Y6VMV546G50KH0251H9B' where id=2; -update noar tt set v0='1LPE3' where id=2; -update noar ti set v0='1LPE3' where id=2; -update noar tt set b1='SQCT' where id=2; -update noar ti set b1='SQCT' where id=2; -update noar tt set v0='LOHJ0T' where id=2; -update noar ti set v0='LOHJ0T' where id=2; -update noar tt set b2='6VNDAK651XOCRRXG8J8WHXY2' where id=2; -update noar ti set b2='6VNDAK651XOCRRXG8J8WHXY2' where id=2; -update noar tt set v0='O1A9LK789AAVXFTZ2OTM' where id=3; -update noar ti set v0='O1A9LK789AAVXFTZ2OTM' where id=3; -update noar tt set b0='ZAB81UFY4Y62I5L1V' where id=3; -update noar ti set b0='ZAB81UFY4Y62I5L1V' where id=3; -update noar tt set v0='Y4AMEX5NGPS7YYPM8AKV0P3TQJ3U1D' where id=3; -update noar ti set v0='Y4AMEX5NGPS7YYPM8AKV0P3TQJ3U1D' where id=3; -update noar tt set b1='5N4EHOOG7S7MPJI0100TAILLME6' where id=3; -update noar ti set b1='5N4EHOOG7S7MPJI0100TAILLME6' where id=3; -update noar tt set v0='O' where id=3; -update noar ti set v0='O' where id=3; -update noar tt set b2='NA4BCU1Z2' where id=3; -update noar ti set b2='NA4BCU1Z2' where id=3; -update noar tt set v0='AOTVEXN0CF7VRDIDW64TV0H' where id=4; -update noar ti set v0='AOTVEXN0CF7VRDIDW64TV0H' where id=4; -update noar tt set b0='ALA3NK7N8WC7GP2CBRI7CX1V3' where id=4; -update noar ti set b0='ALA3NK7N8WC7GP2CBRI7CX1V3' where id=4; -update noar tt set v0='AR5KO486K' where id=4; -update noar ti set v0='AR5KO486K' where id=4; -update noar tt set b1='RCR3YKANN' where id=4; -update noar ti set b1='RCR3YKANN' where id=4; -update noar tt set v0='TLGJC19GVS6SLFK1O' where id=4; -update noar ti set v0='TLGJC19GVS6SLFK1O' where id=4; -update noar tt set b2='X3J231' where id=4; -update noar ti set b2='X3J231' where id=4; -update noar tt set v0='QMM8LAQS' where id=5; -update noar ti set v0='QMM8LAQS' where id=5; -update noar tt set b0='J2E7NVBTONPU6V425LE' where id=5; -update noar ti set b0='J2E7NVBTONPU6V425LE' where id=5; -update noar tt set v0='3EZNJ2PFM27PC1P26I9VODKBABQ0E9YW' where id=5; -update noar ti set v0='3EZNJ2PFM27PC1P26I9VODKBABQ0E9YW' where id=5; -update noar tt set b1='W2HSFYASIJKDGOUBVXFQMFNZ' where id=5; -update noar ti set b1='W2HSFYASIJKDGOUBVXFQMFNZ' where id=5; -update noar tt set v0='ZQSOMD43GFMFGJJ' where id=5; -update noar ti set v0='ZQSOMD43GFMFGJJ' where id=5; -update noar tt set b2='I6SI6YPOEPLT3GHC9707EM0FGVY' where id=5; -update noar ti set b2='I6SI6YPOEPLT3GHC9707EM0FGVY' where id=5; -update noar tt set v0='8MRACZEDAMCELBDHMVHGOPDR6XNVQXRK' where id=6; -update noar ti set v0='8MRACZEDAMCELBDHMVHGOPDR6XNVQXRK' where id=6; -update noar tt set b0='4ZEO72K7O4V37WKJB3J0QZ' where id=6; -update noar ti set b0='4ZEO72K7O4V37WKJB3J0QZ' where id=6; -update noar tt set v0='2K2LPBHY5XRWRFB64VF3RC7NPU' where id=6; -update noar ti set v0='2K2LPBHY5XRWRFB64VF3RC7NPU' where id=6; -update noar tt set b1='B' where id=6; -update noar ti set b1='B' where id=6; -update noar tt set v0='2RUM' where id=6; -update noar ti set v0='2RUM' where id=6; -update noar tt set b2='8Y' where id=6; -update noar ti set b2='8Y' where id=6; -update noar tt set v0='2AHJ44M79LR' where id=7; -update noar ti set v0='2AHJ44M79LR' where id=7; -update noar tt set b0='B3QRQU6XO' where id=7; -update noar ti set b0='B3QRQU6XO' where id=7; -update noar tt set v0='ZQMAN6W9DQO' where id=7; -update noar ti set v0='ZQMAN6W9DQO' where id=7; -update noar tt set b1='V78MZZW3CQBX0BZY' where id=7; -update noar ti set b1='V78MZZW3CQBX0BZY' where id=7; -update noar tt set v0='LJFDJPSEHKCBR1UQMLJC' where id=7; -update noar ti set v0='LJFDJPSEHKCBR1UQMLJC' where id=7; -update noar tt set b2='Y4DKDBXP7CN1XAH4G' where id=7; -update noar ti set b2='Y4DKDBXP7CN1XAH4G' where id=7; -update noar tt set v0='IK7AZ5XBBROYQ8F4IOC129ZJ' where id=8; -update noar ti set v0='IK7AZ5XBBROYQ8F4IOC129ZJ' where id=8; -update noar tt set b0='XT' where id=8; -update noar ti set b0='XT' where id=8; -update noar tt set v0='CTTTOX4FXK9Y3034TS4E7IDHKC' where id=8; -update noar ti set v0='CTTTOX4FXK9Y3034TS4E7IDHKC' where id=8; -update noar tt set b1='5UIAANG50UDRGFN' where id=8; -update noar ti set b1='5UIAANG50UDRGFN' where id=8; -update noar tt set v0='G' where id=8; -update noar ti set v0='G' where id=8; -update noar tt set b2='B' where id=8; -update noar ti set b2='B' where id=8; -update noar tt set v0='8TG7Z7T1' where id=9; -update noar ti set v0='8TG7Z7T1' where id=9; -update noar tt set b0='RDNYBT9KF8LK3CQ3OSZ' where id=9; -update noar ti set b0='RDNYBT9KF8LK3CQ3OSZ' where id=9; -update noar tt set v0='SAURT414' where id=9; -update noar ti set v0='SAURT414' where id=9; -update noar tt set b1='1UCRL3PWIYG' where id=9; -update noar ti set b1='1UCRL3PWIYG' where id=9; -update noar tt set v0='WJ3DK1' where id=9; -update noar ti set v0='WJ3DK1' where id=9; -update noar tt set b2='NYAZJ5HH60OQ3DS05LEXNKHDA2KH' where id=9; -update noar ti set b2='NYAZJ5HH60OQ3DS05LEXNKHDA2KH' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 blob null, -b1 tinyblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='HL08ND7Q6DMT3OHAN0JXSEN' where id=1; -update noar ti set v0='HL08ND7Q6DMT3OHAN0JXSEN' where id=1; -update noar tt set b0='DP58QF' where id=1; -update noar ti set b0='DP58QF' where id=1; -update noar tt set v0='TOBFDTZ' where id=1; -update noar ti set v0='TOBFDTZ' where id=1; -update noar tt set b1='C0T1VR7XJY2I5TZPSAWH6QP5SY5C' where id=1; -update noar ti set b1='C0T1VR7XJY2I5TZPSAWH6QP5SY5C' where id=1; -update noar tt set v0='O6M533' where id=1; -update noar ti set v0='O6M533' where id=1; -update noar tt set b2='J1QCYXJOTCHW2TG6ER49E3I8' where id=1; -update noar ti set b2='J1QCYXJOTCHW2TG6ER49E3I8' where id=1; -update noar tt set v0='1MLG4QUYLS5' where id=2; -update noar ti set v0='1MLG4QUYLS5' where id=2; -update noar tt set b0='JIZF' where id=2; -update noar ti set b0='JIZF' where id=2; -update noar tt set v0='KKZH' where id=2; -update noar ti set v0='KKZH' where id=2; -update noar tt set b1='VTY' where id=2; -update noar ti set b1='VTY' where id=2; -update noar tt set v0='JCIDR0Q' where id=2; -update noar ti set v0='JCIDR0Q' where id=2; -update noar tt set b2='AY783DZSX' where id=2; -update noar ti set b2='AY783DZSX' where id=2; -update noar tt set v0='G77SF9DW3V' where id=3; -update noar ti set v0='G77SF9DW3V' where id=3; -update noar tt set b0='W7AKNMEO8ZQRM2HAUI' where id=3; -update noar ti set b0='W7AKNMEO8ZQRM2HAUI' where id=3; -update noar tt set v0='GP2RCDN95RFE6Q2FORET3BQBUT' where id=3; -update noar ti set v0='GP2RCDN95RFE6Q2FORET3BQBUT' where id=3; -update noar tt set b1='QQ' where id=3; -update noar ti set b1='QQ' where id=3; -update noar tt set v0='DUXLNXEO' where id=3; -update noar ti set v0='DUXLNXEO' where id=3; -update noar tt set b2='IOXMLUCCUWG9190X' where id=3; -update noar ti set b2='IOXMLUCCUWG9190X' where id=3; -update noar tt set v0='2M8TGMTYRAE35B' where id=4; -update noar ti set v0='2M8TGMTYRAE35B' where id=4; -update noar tt set b0='P367R1OG' where id=4; -update noar ti set b0='P367R1OG' where id=4; -update noar tt set v0='DLUXSXJ' where id=4; -update noar ti set v0='DLUXSXJ' where id=4; -update noar tt set b1='A6DTY8XI3DO6K68I8SPJQD8HNL03K1' where id=4; -update noar ti set b1='A6DTY8XI3DO6K68I8SPJQD8HNL03K1' where id=4; -update noar tt set v0='RG49W6MANVB1NFRV1AKRGV3YGPC83' where id=4; -update noar ti set v0='RG49W6MANVB1NFRV1AKRGV3YGPC83' where id=4; -update noar tt set b2='UX7K28G' where id=4; -update noar ti set b2='UX7K28G' where id=4; -update noar tt set v0='R' where id=5; -update noar ti set v0='R' where id=5; -update noar tt set b0='DG27ZCOVM9WQGA' where id=5; -update noar ti set b0='DG27ZCOVM9WQGA' where id=5; -update noar tt set v0='GEBFAD60Z40LU0OB' where id=5; -update noar ti set v0='GEBFAD60Z40LU0OB' where id=5; -update noar tt set b1='0VDD84SRRGSAKPR6ZD3IJUKSG4' where id=5; -update noar ti set b1='0VDD84SRRGSAKPR6ZD3IJUKSG4' where id=5; -update noar tt set v0='V0MW93JK1OBS0OHC1KL' where id=5; -update noar ti set v0='V0MW93JK1OBS0OHC1KL' where id=5; -update noar tt set b2='WGV3M79OBFRIF18PO3STY4AU3T' where id=5; -update noar ti set b2='WGV3M79OBFRIF18PO3STY4AU3T' where id=5; -update noar tt set v0='X3RM6OE32' where id=6; -update noar ti set v0='X3RM6OE32' where id=6; -update noar tt set b0='PTODADEPHDB9D54DN5' where id=6; -update noar ti set b0='PTODADEPHDB9D54DN5' where id=6; -update noar tt set v0='YTUW1SVWSWCLJ143I20FL07EI0B5N' where id=6; -update noar ti set v0='YTUW1SVWSWCLJ143I20FL07EI0B5N' where id=6; -update noar tt set b1='565W558WPQ6KE3RZ5IXDHDPO' where id=6; -update noar ti set b1='565W558WPQ6KE3RZ5IXDHDPO' where id=6; -update noar tt set v0='TYRUWQTWTTN3HXCL1G5XSKK5ZN0H' where id=6; -update noar ti set v0='TYRUWQTWTTN3HXCL1G5XSKK5ZN0H' where id=6; -update noar tt set b2='19K9FVKBRVDPD6ATLMT0' where id=6; -update noar ti set b2='19K9FVKBRVDPD6ATLMT0' where id=6; -update noar tt set v0='LBIF0X8L' where id=7; -update noar ti set v0='LBIF0X8L' where id=7; -update noar tt set b0='R1985DLV' where id=7; -update noar ti set b0='R1985DLV' where id=7; -update noar tt set v0='V' where id=7; -update noar ti set v0='V' where id=7; -update noar tt set b1='FCQB1KVURQYSAFUL62ZDAC9E' where id=7; -update noar ti set b1='FCQB1KVURQYSAFUL62ZDAC9E' where id=7; -update noar tt set v0='L' where id=7; -update noar ti set v0='L' where id=7; -update noar tt set b2='J9POC94SSMTFZEY15Z' where id=7; -update noar ti set b2='J9POC94SSMTFZEY15Z' where id=7; -update noar tt set v0='0' where id=8; -update noar ti set v0='0' where id=8; -update noar tt set b0='4UZ2QBF6D8U5ONNKYS' where id=8; -update noar ti set b0='4UZ2QBF6D8U5ONNKYS' where id=8; -update noar tt set v0='E6POTG7BV3AWLSIYQKE' where id=8; -update noar ti set v0='E6POTG7BV3AWLSIYQKE' where id=8; -update noar tt set b1='6E1CXYETZS2L7' where id=8; -update noar ti set b1='6E1CXYETZS2L7' where id=8; -update noar tt set v0='Z855OK' where id=8; -update noar ti set v0='Z855OK' where id=8; -update noar tt set b2='M5C40FOV3EWMCRAN6O5RCM8P6H8' where id=8; -update noar ti set b2='M5C40FOV3EWMCRAN6O5RCM8P6H8' where id=8; -update noar tt set v0='LG8FIZK5SBLSHGYRXPZBOL96MI' where id=9; -update noar ti set v0='LG8FIZK5SBLSHGYRXPZBOL96MI' where id=9; -update noar tt set b0='Z3OSHXRBIJKE5WE01HGXZV' where id=9; -update noar ti set b0='Z3OSHXRBIJKE5WE01HGXZV' where id=9; -update noar tt set v0='NF2FK5MYMCVES2EAXB5C4D40T' where id=9; -update noar ti set v0='NF2FK5MYMCVES2EAXB5C4D40T' where id=9; -update noar tt set b1='S3ZSV00T' where id=9; -update noar ti set b1='S3ZSV00T' where id=9; -update noar tt set v0='TWVUKPSZ3Y8HF42O' where id=9; -update noar ti set v0='TWVUKPSZ3Y8HF42O' where id=9; -update noar tt set b2='LH02L19SD27935X7SNF' where id=9; -update noar ti set b2='LH02L19SD27935X7SNF' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 blob null, -b1 tinyblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='037BSCOD6UAEM5LDNURR' where id=1; -update noar ti set v0='037BSCOD6UAEM5LDNURR' where id=1; -update noar tt set b0='4YW3JEUTBJ1D4VHHA7QT9' where id=1; -update noar ti set b0='4YW3JEUTBJ1D4VHHA7QT9' where id=1; -update noar tt set v0='15Z94IRR19WZMA2NHVX1AULREG5L9J8' where id=1; -update noar ti set v0='15Z94IRR19WZMA2NHVX1AULREG5L9J8' where id=1; -update noar tt set b1='W7Z1RXA3ZTUBXYHNA' where id=1; -update noar ti set b1='W7Z1RXA3ZTUBXYHNA' where id=1; -update noar tt set v0='GZ1WBPP8PO7834SJKRADPAUBUJZ' where id=1; -update noar ti set v0='GZ1WBPP8PO7834SJKRADPAUBUJZ' where id=1; -update noar tt set b2='X9USN1N' where id=1; -update noar ti set b2='X9USN1N' where id=1; -update noar tt set v0='DK3OYIWLRKOX5CKZVFQ2TGE8AD' where id=2; -update noar ti set v0='DK3OYIWLRKOX5CKZVFQ2TGE8AD' where id=2; -update noar tt set b0='R5QHA0UTZKDO99Y2ETN0SQT9Q3' where id=2; -update noar ti set b0='R5QHA0UTZKDO99Y2ETN0SQT9Q3' where id=2; -update noar tt set v0='9OL0HBZOGLM13CZRIRDOJOZ1KU9' where id=2; -update noar ti set v0='9OL0HBZOGLM13CZRIRDOJOZ1KU9' where id=2; -update noar tt set b1='8Y33' where id=2; -update noar ti set b1='8Y33' where id=2; -update noar tt set v0='NK45G6F9KE5BE9C855NZ8S' where id=2; -update noar ti set v0='NK45G6F9KE5BE9C855NZ8S' where id=2; -update noar tt set b2='2IGA' where id=2; -update noar ti set b2='2IGA' where id=2; -update noar tt set v0='B67ULN' where id=3; -update noar ti set v0='B67ULN' where id=3; -update noar tt set b0='AF20HMLSZZFY' where id=3; -update noar ti set b0='AF20HMLSZZFY' where id=3; -update noar tt set v0='EL2LYNNMTGW6Z93QJ9B4C' where id=3; -update noar ti set v0='EL2LYNNMTGW6Z93QJ9B4C' where id=3; -update noar tt set b1='303BQITLZ9XIYWUU4L' where id=3; -update noar ti set b1='303BQITLZ9XIYWUU4L' where id=3; -update noar tt set v0='P9' where id=3; -update noar ti set v0='P9' where id=3; -update noar tt set b2='MO77HNMLFU1Q4SLEOTNH' where id=3; -update noar ti set b2='MO77HNMLFU1Q4SLEOTNH' where id=3; -update noar tt set v0='QSUWI3N' where id=4; -update noar ti set v0='QSUWI3N' where id=4; -update noar tt set b0='NROB647Y21JP6ZG8PS2H0PRA2E5FJJ0' where id=4; -update noar ti set b0='NROB647Y21JP6ZG8PS2H0PRA2E5FJJ0' where id=4; -update noar tt set v0='8J' where id=4; -update noar ti set v0='8J' where id=4; -update noar tt set b1='JBZHI9II7Y6YJE3QGWDOMAWW' where id=4; -update noar ti set b1='JBZHI9II7Y6YJE3QGWDOMAWW' where id=4; -update noar tt set v0='SXFNP56G12R0VV' where id=4; -update noar ti set v0='SXFNP56G12R0VV' where id=4; -update noar tt set b2='0J0FS6GRE5QLSG2CP2D93NNEH6AH' where id=4; -update noar ti set b2='0J0FS6GRE5QLSG2CP2D93NNEH6AH' where id=4; -update noar tt set v0='9PXH' where id=5; -update noar ti set v0='9PXH' where id=5; -update noar tt set b0='QZMT5GN9E' where id=5; -update noar ti set b0='QZMT5GN9E' where id=5; -update noar tt set v0='46G0EW2JW00712HPI' where id=5; -update noar ti set v0='46G0EW2JW00712HPI' where id=5; -update noar tt set b1='2TGWA4XA1LPIHAZ2819IK' where id=5; -update noar ti set b1='2TGWA4XA1LPIHAZ2819IK' where id=5; -update noar tt set v0='M2YNH389JT9C6D' where id=5; -update noar ti set v0='M2YNH389JT9C6D' where id=5; -update noar tt set b2='W' where id=5; -update noar ti set b2='W' where id=5; -update noar tt set v0='A8VH18SOSSTZC1I22OU8JZ6PTLEI3M' where id=6; -update noar ti set v0='A8VH18SOSSTZC1I22OU8JZ6PTLEI3M' where id=6; -update noar tt set b0='LQD9' where id=6; -update noar ti set b0='LQD9' where id=6; -update noar tt set v0='AZLK9SC06349JCTZHOZK1O0RM1ATWSDF' where id=6; -update noar ti set v0='AZLK9SC06349JCTZHOZK1O0RM1ATWSDF' where id=6; -update noar tt set b1='IK' where id=6; -update noar ti set b1='IK' where id=6; -update noar tt set v0='M4O' where id=6; -update noar ti set v0='M4O' where id=6; -update noar tt set b2='ORVTI5FU5YL0CR10PYNB1O' where id=6; -update noar ti set b2='ORVTI5FU5YL0CR10PYNB1O' where id=6; -update noar tt set v0='D8KM4C' where id=7; -update noar ti set v0='D8KM4C' where id=7; -update noar tt set b0='Q0LHBY3KXH' where id=7; -update noar ti set b0='Q0LHBY3KXH' where id=7; -update noar tt set v0='6GNDTR367H6K3N6J4SF1IK8Y' where id=7; -update noar ti set v0='6GNDTR367H6K3N6J4SF1IK8Y' where id=7; -update noar tt set b1='VNN6O2OFAPDZNMXFPZOJ' where id=7; -update noar ti set b1='VNN6O2OFAPDZNMXFPZOJ' where id=7; -update noar tt set v0='M66Z6ZUWVD8Z' where id=7; -update noar ti set v0='M66Z6ZUWVD8Z' where id=7; -update noar tt set b2='R1MUU63KRJCD0WVQ' where id=7; -update noar ti set b2='R1MUU63KRJCD0WVQ' where id=7; -update noar tt set v0='VW' where id=8; -update noar ti set v0='VW' where id=8; -update noar tt set b0='23EXKZTUHGSI2XCZJ6QC5' where id=8; -update noar ti set b0='23EXKZTUHGSI2XCZJ6QC5' where id=8; -update noar tt set v0='VM0IYDTL' where id=8; -update noar ti set v0='VM0IYDTL' where id=8; -update noar tt set b1='GHCI5XAPG83KZEFQDWCA7' where id=8; -update noar ti set b1='GHCI5XAPG83KZEFQDWCA7' where id=8; -update noar tt set v0='6W98FHZJ9VG' where id=8; -update noar ti set v0='6W98FHZJ9VG' where id=8; -update noar tt set b2='JKADCJ7TR1DYO4B9P4I' where id=8; -update noar ti set b2='JKADCJ7TR1DYO4B9P4I' where id=8; -update noar tt set v0='DJHM5O81KQ8' where id=9; -update noar ti set v0='DJHM5O81KQ8' where id=9; -update noar tt set b0='4UEFMIAVF93HL7PWE9FRJEWS3YNZTG' where id=9; -update noar ti set b0='4UEFMIAVF93HL7PWE9FRJEWS3YNZTG' where id=9; -update noar tt set v0='WZQ82KSAFPZXW08560P0NEQK6HHE5GSP' where id=9; -update noar ti set v0='WZQ82KSAFPZXW08560P0NEQK6HHE5GSP' where id=9; -update noar tt set b1='ZUY6KSNP80OXP4L4HZDY' where id=9; -update noar ti set b1='ZUY6KSNP80OXP4L4HZDY' where id=9; -update noar tt set v0='PLNEBEM31RDO2VK9QLN0I7MDZ' where id=9; -update noar ti set v0='PLNEBEM31RDO2VK9QLN0I7MDZ' where id=9; -update noar tt set b2='Q9I731ITHUFZM2INAGWF7' where id=9; -update noar ti set b2='Q9I731ITHUFZM2INAGWF7' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 blob not null, -b1 tinyblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='C42GOAGO' where id=1; -update noar ti set v0='C42GOAGO' where id=1; -update noar tt set b0='HN4WLXTY' where id=1; -update noar ti set b0='HN4WLXTY' where id=1; -update noar tt set v0='RH90QRFRIR83WY2C' where id=1; -update noar ti set v0='RH90QRFRIR83WY2C' where id=1; -update noar tt set b1='3B3T5GL6QCLKMR12FV7QJJLO7F' where id=1; -update noar ti set b1='3B3T5GL6QCLKMR12FV7QJJLO7F' where id=1; -update noar tt set v0='R02MJE6VKFBHN' where id=1; -update noar ti set v0='R02MJE6VKFBHN' where id=1; -update noar tt set b2='EVPJ1NGLYQ8MSPRRW0KEE9LQ' where id=1; -update noar ti set b2='EVPJ1NGLYQ8MSPRRW0KEE9LQ' where id=1; -update noar tt set v0='U33E21IEBDSBE26' where id=2; -update noar ti set v0='U33E21IEBDSBE26' where id=2; -update noar tt set b0='T7FN00HFEF7QE6ZNL4MLO9HIXYZHXB' where id=2; -update noar ti set b0='T7FN00HFEF7QE6ZNL4MLO9HIXYZHXB' where id=2; -update noar tt set v0='VFRBHOKTJTZ3FVZUYQI49LEO0KRZKA' where id=2; -update noar ti set v0='VFRBHOKTJTZ3FVZUYQI49LEO0KRZKA' where id=2; -update noar tt set b1='FE5WO0GZ24DV50CQUYH6ER' where id=2; -update noar ti set b1='FE5WO0GZ24DV50CQUYH6ER' where id=2; -update noar tt set v0='1D8H0' where id=2; -update noar ti set v0='1D8H0' where id=2; -update noar tt set b2='2RJ4C' where id=2; -update noar ti set b2='2RJ4C' where id=2; -update noar tt set v0='H6ZSWP2SY6LY7' where id=3; -update noar ti set v0='H6ZSWP2SY6LY7' where id=3; -update noar tt set b0='4L0WJMP0J' where id=3; -update noar ti set b0='4L0WJMP0J' where id=3; -update noar tt set v0='0782FAFVBIYP' where id=3; -update noar ti set v0='0782FAFVBIYP' where id=3; -update noar tt set b1='A' where id=3; -update noar ti set b1='A' where id=3; -update noar tt set v0='4SJ3C724XCY2OO6ZAKL2' where id=3; -update noar ti set v0='4SJ3C724XCY2OO6ZAKL2' where id=3; -update noar tt set b2='AI25R77LVHKWCJ5IT90OHAEGB0HFP' where id=3; -update noar ti set b2='AI25R77LVHKWCJ5IT90OHAEGB0HFP' where id=3; -update noar tt set v0='IP2PHUURA9TG2BYRSIXHN69VCR4' where id=4; -update noar ti set v0='IP2PHUURA9TG2BYRSIXHN69VCR4' where id=4; -update noar tt set b0='7ZKWYQM855KDNU0' where id=4; -update noar ti set b0='7ZKWYQM855KDNU0' where id=4; -update noar tt set v0='8TFKU3MM1UCNXO15' where id=4; -update noar ti set v0='8TFKU3MM1UCNXO15' where id=4; -update noar tt set b1='XOL13FKECZXFKXDTJVSN91MRZT' where id=4; -update noar ti set b1='XOL13FKECZXFKXDTJVSN91MRZT' where id=4; -update noar tt set v0='E' where id=4; -update noar ti set v0='E' where id=4; -update noar tt set b2='VC5PVJIQ0QZBPB4M602' where id=4; -update noar ti set b2='VC5PVJIQ0QZBPB4M602' where id=4; -update noar tt set v0='7IBXIAIYOMS0NEBK5QZSEHHP39J' where id=5; -update noar ti set v0='7IBXIAIYOMS0NEBK5QZSEHHP39J' where id=5; -update noar tt set b0='SSLR2AGMFPWOGIW15HQE' where id=5; -update noar ti set b0='SSLR2AGMFPWOGIW15HQE' where id=5; -update noar tt set v0='PG98BQTP' where id=5; -update noar ti set v0='PG98BQTP' where id=5; -update noar tt set b1='VJG5N8LIIMQ73NVRRU' where id=5; -update noar ti set b1='VJG5N8LIIMQ73NVRRU' where id=5; -update noar tt set v0='SCWX0YJFYQ9RJGWC13IG' where id=5; -update noar ti set v0='SCWX0YJFYQ9RJGWC13IG' where id=5; -update noar tt set b2='0REQYL6GMWRWVDU9GE' where id=5; -update noar ti set b2='0REQYL6GMWRWVDU9GE' where id=5; -update noar tt set v0='0ZOBV9YX' where id=6; -update noar ti set v0='0ZOBV9YX' where id=6; -update noar tt set b0='0MZZ2XV18L' where id=6; -update noar ti set b0='0MZZ2XV18L' where id=6; -update noar tt set v0='TGCUTH6145YS7' where id=6; -update noar ti set v0='TGCUTH6145YS7' where id=6; -update noar tt set b1='0YN7LFXSSES7FEHT4PFVV97Y0QU' where id=6; -update noar ti set b1='0YN7LFXSSES7FEHT4PFVV97Y0QU' where id=6; -update noar tt set v0='LYT0TI8TMD98EL3OCBNBJ774E6CAY51' where id=6; -update noar ti set v0='LYT0TI8TMD98EL3OCBNBJ774E6CAY51' where id=6; -update noar tt set b2='5HV9RBXVH1BPMRVU6ASD8J05ILORL' where id=6; -update noar ti set b2='5HV9RBXVH1BPMRVU6ASD8J05ILORL' where id=6; -update noar tt set v0='W26' where id=7; -update noar ti set v0='W26' where id=7; -update noar tt set b0='WUAVE5EXZ' where id=7; -update noar ti set b0='WUAVE5EXZ' where id=7; -update noar tt set v0='R14ATCQNG2MM8NAW2NM5PDSCOY' where id=7; -update noar ti set v0='R14ATCQNG2MM8NAW2NM5PDSCOY' where id=7; -update noar tt set b1='F08J9BB5D2C7708NZ05I5139R9N' where id=7; -update noar ti set b1='F08J9BB5D2C7708NZ05I5139R9N' where id=7; -update noar tt set v0='48NJAGD6GQMUK6VF3T8VJ' where id=7; -update noar ti set v0='48NJAGD6GQMUK6VF3T8VJ' where id=7; -update noar tt set b2='8SLDH' where id=7; -update noar ti set b2='8SLDH' where id=7; -update noar tt set v0='90WO80HNX4KHRGVLJ3T9' where id=8; -update noar ti set v0='90WO80HNX4KHRGVLJ3T9' where id=8; -update noar tt set b0='30XHF9SZ17MVI35B95ZVJRSLI' where id=8; -update noar ti set b0='30XHF9SZ17MVI35B95ZVJRSLI' where id=8; -update noar tt set v0='ZXOJZJIBRCUSDKQDDVR' where id=8; -update noar ti set v0='ZXOJZJIBRCUSDKQDDVR' where id=8; -update noar tt set b1='IV3M432DY0OK8ICM8P6BSPK' where id=8; -update noar ti set b1='IV3M432DY0OK8ICM8P6BSPK' where id=8; -update noar tt set v0='UXPRYKZRYDP0WQHCTDPBX9DJTD' where id=8; -update noar ti set v0='UXPRYKZRYDP0WQHCTDPBX9DJTD' where id=8; -update noar tt set b2='UMOL55ZDX9P3SMMKIYSFJRGC57C8YCL' where id=8; -update noar ti set b2='UMOL55ZDX9P3SMMKIYSFJRGC57C8YCL' where id=8; -update noar tt set v0='8Y0WO' where id=9; -update noar ti set v0='8Y0WO' where id=9; -update noar tt set b0='JEGB8G10FA01Y1NR2' where id=9; -update noar ti set b0='JEGB8G10FA01Y1NR2' where id=9; -update noar tt set v0='YF6E1B64NLQCTXNBNNXE6LVRLK62GKH8' where id=9; -update noar ti set v0='YF6E1B64NLQCTXNBNNXE6LVRLK62GKH8' where id=9; -update noar tt set b1='6UXFHBXAJ66' where id=9; -update noar ti set b1='6UXFHBXAJ66' where id=9; -update noar tt set v0='1R17PH0MGTJO0Y0IQ4EZW' where id=9; -update noar ti set v0='1R17PH0MGTJO0Y0IQ4EZW' where id=9; -update noar tt set b2='61MNMCQS6KD' where id=9; -update noar ti set b2='61MNMCQS6KD' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 blob not null, -b1 tinyblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='9RS28RMI8FV3XJ8ABG' where id=1; -update noar ti set v0='9RS28RMI8FV3XJ8ABG' where id=1; -update noar tt set b0='BZX6RZKXAZHRXW4FGY4L' where id=1; -update noar ti set b0='BZX6RZKXAZHRXW4FGY4L' where id=1; -update noar tt set v0='Q1B7M163EEEXWA7QH51PWXMF55FXM' where id=1; -update noar ti set v0='Q1B7M163EEEXWA7QH51PWXMF55FXM' where id=1; -update noar tt set b1='9LHC55YZ9508WHEGXP4LZ6IHMYKG6KTY' where id=1; -update noar ti set b1='9LHC55YZ9508WHEGXP4LZ6IHMYKG6KTY' where id=1; -update noar tt set v0='ODGERP7Z4RL2I8QNJ9FT5OQK' where id=1; -update noar ti set v0='ODGERP7Z4RL2I8QNJ9FT5OQK' where id=1; -update noar tt set b2='OKG' where id=1; -update noar ti set b2='OKG' where id=1; -update noar tt set v0='SXNPWX7JCVHVDTDGNHP' where id=2; -update noar ti set v0='SXNPWX7JCVHVDTDGNHP' where id=2; -update noar tt set b0='1' where id=2; -update noar ti set b0='1' where id=2; -update noar tt set v0='9' where id=2; -update noar ti set v0='9' where id=2; -update noar tt set b1='PDI0PNQTRKI1T56O8FBQAPZU9B' where id=2; -update noar ti set b1='PDI0PNQTRKI1T56O8FBQAPZU9B' where id=2; -update noar tt set v0='G2KKSDJN70FFTWQ3IQIPD6G8HZYGX' where id=2; -update noar ti set v0='G2KKSDJN70FFTWQ3IQIPD6G8HZYGX' where id=2; -update noar tt set b2='3DYCLBKT780I4D7GTQ5EPS2ZO5G7' where id=2; -update noar ti set b2='3DYCLBKT780I4D7GTQ5EPS2ZO5G7' where id=2; -update noar tt set v0='SCZOV67Y12P3H05HLPXTQWU2V1XC' where id=3; -update noar ti set v0='SCZOV67Y12P3H05HLPXTQWU2V1XC' where id=3; -update noar tt set b0='VFSCFM6UDB20W3C4C3X3H' where id=3; -update noar ti set b0='VFSCFM6UDB20W3C4C3X3H' where id=3; -update noar tt set v0='ZKS8CC0X7569A0IZ4AAKVGTIH3W2' where id=3; -update noar ti set v0='ZKS8CC0X7569A0IZ4AAKVGTIH3W2' where id=3; -update noar tt set b1='R30VRG7J5C4' where id=3; -update noar ti set b1='R30VRG7J5C4' where id=3; -update noar tt set v0='XSKMNRK7CDE8L7TUMG4ZB4IJQ' where id=3; -update noar ti set v0='XSKMNRK7CDE8L7TUMG4ZB4IJQ' where id=3; -update noar tt set b2='CN1IU44OUU4' where id=3; -update noar ti set b2='CN1IU44OUU4' where id=3; -update noar tt set v0='RCXYR8IC6XO9FMKFSHAXGSO6GRU' where id=4; -update noar ti set v0='RCXYR8IC6XO9FMKFSHAXGSO6GRU' where id=4; -update noar tt set b0='QUPEP6FCRTGAB5J2S7STT6K5EP4LRF' where id=4; -update noar ti set b0='QUPEP6FCRTGAB5J2S7STT6K5EP4LRF' where id=4; -update noar tt set v0='JHT9YYT07VE105BB58HCT' where id=4; -update noar ti set v0='JHT9YYT07VE105BB58HCT' where id=4; -update noar tt set b1='8RIYAFXTRB6MPG4ASFCHSWO1E6' where id=4; -update noar ti set b1='8RIYAFXTRB6MPG4ASFCHSWO1E6' where id=4; -update noar tt set v0='YM4WEQ19IMB92L876C6I0M82EGICZ' where id=4; -update noar ti set v0='YM4WEQ19IMB92L876C6I0M82EGICZ' where id=4; -update noar tt set b2='YZ4FUSYJPAXNS0D5SQKHWDBOU8' where id=4; -update noar ti set b2='YZ4FUSYJPAXNS0D5SQKHWDBOU8' where id=4; -update noar tt set v0='3CMWWGZ814VCI1FNGENS14CG' where id=5; -update noar ti set v0='3CMWWGZ814VCI1FNGENS14CG' where id=5; -update noar tt set b0='OH' where id=5; -update noar ti set b0='OH' where id=5; -update noar tt set v0='92LZBFM4CX90FKE4' where id=5; -update noar ti set v0='92LZBFM4CX90FKE4' where id=5; -update noar tt set b1='KX6' where id=5; -update noar ti set b1='KX6' where id=5; -update noar tt set v0='FVE272YWOB4B9V5WQ4E' where id=5; -update noar ti set v0='FVE272YWOB4B9V5WQ4E' where id=5; -update noar tt set b2='0OE' where id=5; -update noar ti set b2='0OE' where id=5; -update noar tt set v0='78IGGTMKJ' where id=6; -update noar ti set v0='78IGGTMKJ' where id=6; -update noar tt set b0='K05EWZ5D8FH' where id=6; -update noar ti set b0='K05EWZ5D8FH' where id=6; -update noar tt set v0='06YMKXNIV2V267E4STPLV5' where id=6; -update noar ti set v0='06YMKXNIV2V267E4STPLV5' where id=6; -update noar tt set b1='J1P507ATNGWP173LGF6B9MDVB0U6B0VC' where id=6; -update noar ti set b1='J1P507ATNGWP173LGF6B9MDVB0U6B0VC' where id=6; -update noar tt set v0='UUMKNRYHYIA0QKROO9Y238S6I' where id=6; -update noar ti set v0='UUMKNRYHYIA0QKROO9Y238S6I' where id=6; -update noar tt set b2='98AQGQKPWEGMCZQ4LZ' where id=6; -update noar ti set b2='98AQGQKPWEGMCZQ4LZ' where id=6; -update noar tt set v0='BGKM5YOE222Z4IN0PZPKZHLBO3GT0V76' where id=7; -update noar ti set v0='BGKM5YOE222Z4IN0PZPKZHLBO3GT0V76' where id=7; -update noar tt set b0='SCP57762NEZA2W16RJV10IX7QG29ME' where id=7; -update noar ti set b0='SCP57762NEZA2W16RJV10IX7QG29ME' where id=7; -update noar tt set v0='VJKJ' where id=7; -update noar ti set v0='VJKJ' where id=7; -update noar tt set b1='0FHCBD20XLCPYL' where id=7; -update noar ti set b1='0FHCBD20XLCPYL' where id=7; -update noar tt set v0='NQCJIQ5C18AFPZCJM5Z' where id=7; -update noar ti set v0='NQCJIQ5C18AFPZCJM5Z' where id=7; -update noar tt set b2='0AGMRCKUS4JU7BPIM5BB83ERIRQLLT' where id=7; -update noar ti set b2='0AGMRCKUS4JU7BPIM5BB83ERIRQLLT' where id=7; -update noar tt set v0='WCCB23VS' where id=8; -update noar ti set v0='WCCB23VS' where id=8; -update noar tt set b0='8FEI66J3P5MM7LAVVZCTKHU' where id=8; -update noar ti set b0='8FEI66J3P5MM7LAVVZCTKHU' where id=8; -update noar tt set v0='LSJPD3FMY6QU4TIQW' where id=8; -update noar ti set v0='LSJPD3FMY6QU4TIQW' where id=8; -update noar tt set b1='E84TBAO4LBA15TKDSUXD8' where id=8; -update noar ti set b1='E84TBAO4LBA15TKDSUXD8' where id=8; -update noar tt set v0='SJQ2FOI81BZY8DF2Y4S' where id=8; -update noar ti set v0='SJQ2FOI81BZY8DF2Y4S' where id=8; -update noar tt set b2='Q4AWTOP19YC1RF2' where id=8; -update noar ti set b2='Q4AWTOP19YC1RF2' where id=8; -update noar tt set v0='F2CMRQXJ7L2OBOARXJJS6FJ7K' where id=9; -update noar ti set v0='F2CMRQXJ7L2OBOARXJJS6FJ7K' where id=9; -update noar tt set b0='UXQ72ZJ1OL3D83U1J1TX30UB' where id=9; -update noar ti set b0='UXQ72ZJ1OL3D83U1J1TX30UB' where id=9; -update noar tt set v0='7D4N1BVA5UMHJLC7Y5ELXUBONSBEV3CI' where id=9; -update noar ti set v0='7D4N1BVA5UMHJLC7Y5ELXUBONSBEV3CI' where id=9; -update noar tt set b1='K7A253B9V9B' where id=9; -update noar ti set b1='K7A253B9V9B' where id=9; -update noar tt set v0='SWHHS1X89YUT4P' where id=9; -update noar ti set v0='SWHHS1X89YUT4P' where id=9; -update noar tt set b2='5LDJHY07T' where id=9; -update noar ti set b2='5LDJHY07T' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 blob null, -b1 blob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='FTSNLX48FPC3Z59GRC00S3IWI8FOW8' where id=1; -update noar ti set v0='FTSNLX48FPC3Z59GRC00S3IWI8FOW8' where id=1; -update noar tt set b0='CBUDFPIL6G97OCZCTSFDPHLY' where id=1; -update noar ti set b0='CBUDFPIL6G97OCZCTSFDPHLY' where id=1; -update noar tt set v0='8VMHYNNDLEIF65WOEO2T' where id=1; -update noar ti set v0='8VMHYNNDLEIF65WOEO2T' where id=1; -update noar tt set b1='NIO9XQ' where id=1; -update noar ti set b1='NIO9XQ' where id=1; -update noar tt set v0='2WOFGZ7JB97UO1GPBYWEDWUYLE97A' where id=1; -update noar ti set v0='2WOFGZ7JB97UO1GPBYWEDWUYLE97A' where id=1; -update noar tt set b2='MX2CD2IYFNDUS5QL3SY1CQ5ZRWJ1BX' where id=1; -update noar ti set b2='MX2CD2IYFNDUS5QL3SY1CQ5ZRWJ1BX' where id=1; -update noar tt set v0='TWYXVR' where id=2; -update noar ti set v0='TWYXVR' where id=2; -update noar tt set b0='3DW7WN0SXKSZIMSVV' where id=2; -update noar ti set b0='3DW7WN0SXKSZIMSVV' where id=2; -update noar tt set v0='WOPYJ5ZTU7GBTV17' where id=2; -update noar ti set v0='WOPYJ5ZTU7GBTV17' where id=2; -update noar tt set b1='73L1459XU3O' where id=2; -update noar ti set b1='73L1459XU3O' where id=2; -update noar tt set v0='5A6EB' where id=2; -update noar ti set v0='5A6EB' where id=2; -update noar tt set b2='KNW8GW9MO644GJXEZVZ66NUO0D' where id=2; -update noar ti set b2='KNW8GW9MO644GJXEZVZ66NUO0D' where id=2; -update noar tt set v0='9X' where id=3; -update noar ti set v0='9X' where id=3; -update noar tt set b0='BR2YZKECOQ1DQ3U4JQSU0H40XGD89HT4' where id=3; -update noar ti set b0='BR2YZKECOQ1DQ3U4JQSU0H40XGD89HT4' where id=3; -update noar tt set v0='E317U' where id=3; -update noar ti set v0='E317U' where id=3; -update noar tt set b1='3SUXST' where id=3; -update noar ti set b1='3SUXST' where id=3; -update noar tt set v0='5JRFR7I9' where id=3; -update noar ti set v0='5JRFR7I9' where id=3; -update noar tt set b2='D8U6CDS' where id=3; -update noar ti set b2='D8U6CDS' where id=3; -update noar tt set v0='ZLTAFG8XKFQXLYXG4UXEFUGCP0L' where id=4; -update noar ti set v0='ZLTAFG8XKFQXLYXG4UXEFUGCP0L' where id=4; -update noar tt set b0='VX1YO3X13EDJX8USCGL9C8' where id=4; -update noar ti set b0='VX1YO3X13EDJX8USCGL9C8' where id=4; -update noar tt set v0='GWWGOFU9BJYVAK2JI9WKB1ODOJ0W5Y1' where id=4; -update noar ti set v0='GWWGOFU9BJYVAK2JI9WKB1ODOJ0W5Y1' where id=4; -update noar tt set b1='VKD6KSPB' where id=4; -update noar ti set b1='VKD6KSPB' where id=4; -update noar tt set v0='8YEQTSKBU2FWTO' where id=4; -update noar ti set v0='8YEQTSKBU2FWTO' where id=4; -update noar tt set b2='BGBHO7HM8U4F1OSBNASQDM2GIKLK3A0U' where id=4; -update noar ti set b2='BGBHO7HM8U4F1OSBNASQDM2GIKLK3A0U' where id=4; -update noar tt set v0='ALG' where id=5; -update noar ti set v0='ALG' where id=5; -update noar tt set b0='F4X' where id=5; -update noar ti set b0='F4X' where id=5; -update noar tt set v0='HGRTD2CA7KC' where id=5; -update noar ti set v0='HGRTD2CA7KC' where id=5; -update noar tt set b1='5M0ML18KQBLF35WRC' where id=5; -update noar ti set b1='5M0ML18KQBLF35WRC' where id=5; -update noar tt set v0='P5RMTMLEQEDBKCQKVP2C20' where id=5; -update noar ti set v0='P5RMTMLEQEDBKCQKVP2C20' where id=5; -update noar tt set b2='HE' where id=5; -update noar ti set b2='HE' where id=5; -update noar tt set v0='3H2WY7SZ65L' where id=6; -update noar ti set v0='3H2WY7SZ65L' where id=6; -update noar tt set b0='IT0M7CAWNCAKWVWOZSM6DYHH3P' where id=6; -update noar ti set b0='IT0M7CAWNCAKWVWOZSM6DYHH3P' where id=6; -update noar tt set v0='RB5HMOK29MILNHN2OSEYLUPPP4H' where id=6; -update noar ti set v0='RB5HMOK29MILNHN2OSEYLUPPP4H' where id=6; -update noar tt set b1='ZDXD5Y5U0LSXDM39KPJ62BSF0MI' where id=6; -update noar ti set b1='ZDXD5Y5U0LSXDM39KPJ62BSF0MI' where id=6; -update noar tt set v0='COT1BBYWGSTDATDQ4F1' where id=6; -update noar ti set v0='COT1BBYWGSTDATDQ4F1' where id=6; -update noar tt set b2='3IAST7R5MWTOR44ZGIF' where id=6; -update noar ti set b2='3IAST7R5MWTOR44ZGIF' where id=6; -update noar tt set v0='M' where id=7; -update noar ti set v0='M' where id=7; -update noar tt set b0='9D' where id=7; -update noar ti set b0='9D' where id=7; -update noar tt set v0='YL2DP77HVMK26RKN' where id=7; -update noar ti set v0='YL2DP77HVMK26RKN' where id=7; -update noar tt set b1='LG4KK022RYACFBWG3ZQH72Y7OG' where id=7; -update noar ti set b1='LG4KK022RYACFBWG3ZQH72Y7OG' where id=7; -update noar tt set v0='U6PVA70E7LPNVWS7FCZDWBDBLGEO' where id=7; -update noar ti set v0='U6PVA70E7LPNVWS7FCZDWBDBLGEO' where id=7; -update noar tt set b2='DXC34V' where id=7; -update noar ti set b2='DXC34V' where id=7; -update noar tt set v0='4NWU5HFSQBMVL0K54XJV4' where id=8; -update noar ti set v0='4NWU5HFSQBMVL0K54XJV4' where id=8; -update noar tt set b0='LXCZAUC2L4RM13NA70PW' where id=8; -update noar ti set b0='LXCZAUC2L4RM13NA70PW' where id=8; -update noar tt set v0='4PRBAPDWA' where id=8; -update noar ti set v0='4PRBAPDWA' where id=8; -update noar tt set b1='UMGIE5XK7MOTSYHEHHZTGJ1' where id=8; -update noar ti set b1='UMGIE5XK7MOTSYHEHHZTGJ1' where id=8; -update noar tt set v0='LFZX38DXDO0NIT' where id=8; -update noar ti set v0='LFZX38DXDO0NIT' where id=8; -update noar tt set b2='M3K4TLSYY5XJKOU6VAQSD55C' where id=8; -update noar ti set b2='M3K4TLSYY5XJKOU6VAQSD55C' where id=8; -update noar tt set v0='UXB1LCVR0U045R8Q1PXHUZKCZMPEJO' where id=9; -update noar ti set v0='UXB1LCVR0U045R8Q1PXHUZKCZMPEJO' where id=9; -update noar tt set b0='BY' where id=9; -update noar ti set b0='BY' where id=9; -update noar tt set v0='B1NMD9UAFP7JVAIEDD' where id=9; -update noar ti set v0='B1NMD9UAFP7JVAIEDD' where id=9; -update noar tt set b1='143KXIY2AV73KDRZP76CD57' where id=9; -update noar ti set b1='143KXIY2AV73KDRZP76CD57' where id=9; -update noar tt set v0='O6YTPMGO8C8T2ZJ6TL4WK3KV0HSFQ' where id=9; -update noar ti set v0='O6YTPMGO8C8T2ZJ6TL4WK3KV0HSFQ' where id=9; -update noar tt set b2='Q6YARMIVCGLZ44BFH9' where id=9; -update noar ti set b2='Q6YARMIVCGLZ44BFH9' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 blob null, -b1 blob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='9EP71TJU73HKT5T30J2ZS8G2YXNAF' where id=1; -update noar ti set v0='9EP71TJU73HKT5T30J2ZS8G2YXNAF' where id=1; -update noar tt set b0='OX4N3QZ' where id=1; -update noar ti set b0='OX4N3QZ' where id=1; -update noar tt set v0='GR5GL4A1P9HOJSSI72XFN7Y43Z' where id=1; -update noar ti set v0='GR5GL4A1P9HOJSSI72XFN7Y43Z' where id=1; -update noar tt set b1='61D7POE3DH44KZRLFBXHX1P55B317EPX' where id=1; -update noar ti set b1='61D7POE3DH44KZRLFBXHX1P55B317EPX' where id=1; -update noar tt set v0='KUOSAQTI4ABBG2G9XCAB0FVAAGQ' where id=1; -update noar ti set v0='KUOSAQTI4ABBG2G9XCAB0FVAAGQ' where id=1; -update noar tt set b2='ORBA85WI0PUKLF00D3Q' where id=1; -update noar ti set b2='ORBA85WI0PUKLF00D3Q' where id=1; -update noar tt set v0='2XJSKST1WXO1Y' where id=2; -update noar ti set v0='2XJSKST1WXO1Y' where id=2; -update noar tt set b0='1CCD5E' where id=2; -update noar ti set b0='1CCD5E' where id=2; -update noar tt set v0='GFRXM5Q' where id=2; -update noar ti set v0='GFRXM5Q' where id=2; -update noar tt set b1='NL6U52NRV8' where id=2; -update noar ti set b1='NL6U52NRV8' where id=2; -update noar tt set v0='Q43S6HH4MNGO2VHWO9YR' where id=2; -update noar ti set v0='Q43S6HH4MNGO2VHWO9YR' where id=2; -update noar tt set b2='7EQWXQFWAZBKN' where id=2; -update noar ti set b2='7EQWXQFWAZBKN' where id=2; -update noar tt set v0='79RFKXOTL' where id=3; -update noar ti set v0='79RFKXOTL' where id=3; -update noar tt set b0='WTIMW24TP7I' where id=3; -update noar ti set b0='WTIMW24TP7I' where id=3; -update noar tt set v0='ELXQDU7CJAATSGK060LTLYQ' where id=3; -update noar ti set v0='ELXQDU7CJAATSGK060LTLYQ' where id=3; -update noar tt set b1='8SPYN6TFKGZ7ZA9XJ' where id=3; -update noar ti set b1='8SPYN6TFKGZ7ZA9XJ' where id=3; -update noar tt set v0='47ZAOIW5T4A42WJA4KISBUA5PL' where id=3; -update noar ti set v0='47ZAOIW5T4A42WJA4KISBUA5PL' where id=3; -update noar tt set b2='5GK3R97EGZKGSZFVA2N' where id=3; -update noar ti set b2='5GK3R97EGZKGSZFVA2N' where id=3; -update noar tt set v0='3OFTVEMAJFPFD84' where id=4; -update noar ti set v0='3OFTVEMAJFPFD84' where id=4; -update noar tt set b0='LD8XBJNMTKYX05' where id=4; -update noar ti set b0='LD8XBJNMTKYX05' where id=4; -update noar tt set v0='9UEGUHFUI4XGU255JCPSJW1VHDMWA' where id=4; -update noar ti set v0='9UEGUHFUI4XGU255JCPSJW1VHDMWA' where id=4; -update noar tt set b1='72U93SWVMQI6Q8K5HKBVB3LSYZMJU9F' where id=4; -update noar ti set b1='72U93SWVMQI6Q8K5HKBVB3LSYZMJU9F' where id=4; -update noar tt set v0='KNM88YL' where id=4; -update noar ti set v0='KNM88YL' where id=4; -update noar tt set b2='OG5IMCGVAXVF0E338CVH3JFGLQ' where id=4; -update noar ti set b2='OG5IMCGVAXVF0E338CVH3JFGLQ' where id=4; -update noar tt set v0='BF3LIFMQS7TD5MQWI7AXQ' where id=5; -update noar ti set v0='BF3LIFMQS7TD5MQWI7AXQ' where id=5; -update noar tt set b0='KT475U6FTQ3XR' where id=5; -update noar ti set b0='KT475U6FTQ3XR' where id=5; -update noar tt set v0='LVAY6YGCJJ0' where id=5; -update noar ti set v0='LVAY6YGCJJ0' where id=5; -update noar tt set b1='3JB476R7U1DUP97R' where id=5; -update noar ti set b1='3JB476R7U1DUP97R' where id=5; -update noar tt set v0='R3CB1GDQKTC6YSE0OSRH12QGJ4HD' where id=5; -update noar ti set v0='R3CB1GDQKTC6YSE0OSRH12QGJ4HD' where id=5; -update noar tt set b2='P4YX' where id=5; -update noar ti set b2='P4YX' where id=5; -update noar tt set v0='51VF6SUAHRQXG4HNUYFL1' where id=6; -update noar ti set v0='51VF6SUAHRQXG4HNUYFL1' where id=6; -update noar tt set b0='MBCKD91X' where id=6; -update noar ti set b0='MBCKD91X' where id=6; -update noar tt set v0='03PEHCGE6UVUI4905IXSR' where id=6; -update noar ti set v0='03PEHCGE6UVUI4905IXSR' where id=6; -update noar tt set b1='R59' where id=6; -update noar ti set b1='R59' where id=6; -update noar tt set v0='EYRVSM7TRBGC' where id=6; -update noar ti set v0='EYRVSM7TRBGC' where id=6; -update noar tt set b2='21FMKLL3QGXMHM3FDG' where id=6; -update noar ti set b2='21FMKLL3QGXMHM3FDG' where id=6; -update noar tt set v0='7AL01Y16PL8XI66ZQH3GKND42QF357' where id=7; -update noar ti set v0='7AL01Y16PL8XI66ZQH3GKND42QF357' where id=7; -update noar tt set b0='4CN7Y4WFF5JHJFCTJHLQ' where id=7; -update noar ti set b0='4CN7Y4WFF5JHJFCTJHLQ' where id=7; -update noar tt set v0='H99GE2OPVIJKUCLD' where id=7; -update noar ti set v0='H99GE2OPVIJKUCLD' where id=7; -update noar tt set b1='1NRK0WK98' where id=7; -update noar ti set b1='1NRK0WK98' where id=7; -update noar tt set v0='UWZTGH2XOT45Q0IUYSCY1' where id=7; -update noar ti set v0='UWZTGH2XOT45Q0IUYSCY1' where id=7; -update noar tt set b2='G4GZ4PBOYK7FS9O181I8F1A' where id=7; -update noar ti set b2='G4GZ4PBOYK7FS9O181I8F1A' where id=7; -update noar tt set v0='89MMK4CRYCK' where id=8; -update noar ti set v0='89MMK4CRYCK' where id=8; -update noar tt set b0='PTN65PFD87EFYCBME7YY0DR7Y2C8F0' where id=8; -update noar ti set b0='PTN65PFD87EFYCBME7YY0DR7Y2C8F0' where id=8; -update noar tt set v0='TZSXY1' where id=8; -update noar ti set v0='TZSXY1' where id=8; -update noar tt set b1='3' where id=8; -update noar ti set b1='3' where id=8; -update noar tt set v0='BTA4UXKGGNH0P54DA5SW2629OTM3' where id=8; -update noar ti set v0='BTA4UXKGGNH0P54DA5SW2629OTM3' where id=8; -update noar tt set b2='MUB1EKPITPMWVOH1QQZ3SR4D' where id=8; -update noar ti set b2='MUB1EKPITPMWVOH1QQZ3SR4D' where id=8; -update noar tt set v0='XP1Y3BIE4L0E' where id=9; -update noar ti set v0='XP1Y3BIE4L0E' where id=9; -update noar tt set b0='UUAHHACS7KK1RVSNWGX0XOJW03N' where id=9; -update noar ti set b0='UUAHHACS7KK1RVSNWGX0XOJW03N' where id=9; -update noar tt set v0='K9H6PGY9HJ' where id=9; -update noar ti set v0='K9H6PGY9HJ' where id=9; -update noar tt set b1='KDHDJTCIV25LY6OW6D4KEXSC' where id=9; -update noar ti set b1='KDHDJTCIV25LY6OW6D4KEXSC' where id=9; -update noar tt set v0='4DXN4LW' where id=9; -update noar ti set v0='4DXN4LW' where id=9; -update noar tt set b2='09IPJ7O62MUZINSQW3X4' where id=9; -update noar ti set b2='09IPJ7O62MUZINSQW3X4' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 blob not null, -b1 blob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='YD' where id=1; -update noar ti set v0='YD' where id=1; -update noar tt set b0='JKKP2PL7WTT4A' where id=1; -update noar ti set b0='JKKP2PL7WTT4A' where id=1; -update noar tt set v0='NDSE90YJG2N2Y' where id=1; -update noar ti set v0='NDSE90YJG2N2Y' where id=1; -update noar tt set b1='EDSVO' where id=1; -update noar ti set b1='EDSVO' where id=1; -update noar tt set v0='LC3RVYFJGOXYE7K' where id=1; -update noar ti set v0='LC3RVYFJGOXYE7K' where id=1; -update noar tt set b2='TD2T' where id=1; -update noar ti set b2='TD2T' where id=1; -update noar tt set v0='NZ8' where id=2; -update noar ti set v0='NZ8' where id=2; -update noar tt set b0='OJ' where id=2; -update noar ti set b0='OJ' where id=2; -update noar tt set v0='KL8573' where id=2; -update noar ti set v0='KL8573' where id=2; -update noar tt set b1='1KF8ONUVJ9QGHESI4F3CH' where id=2; -update noar ti set b1='1KF8ONUVJ9QGHESI4F3CH' where id=2; -update noar tt set v0='LQLXIURUB45BFZUL4L103HQ29VCF2H' where id=2; -update noar ti set v0='LQLXIURUB45BFZUL4L103HQ29VCF2H' where id=2; -update noar tt set b2='0WSUSP6VZTDXP3' where id=2; -update noar ti set b2='0WSUSP6VZTDXP3' where id=2; -update noar tt set v0='6104383MNNBXXQ7G4D4BA5DJ2H' where id=3; -update noar ti set v0='6104383MNNBXXQ7G4D4BA5DJ2H' where id=3; -update noar tt set b0='R3SKHJ0K91VB8BVCDTOU' where id=3; -update noar ti set b0='R3SKHJ0K91VB8BVCDTOU' where id=3; -update noar tt set v0='ZMRU4860W2' where id=3; -update noar ti set v0='ZMRU4860W2' where id=3; -update noar tt set b1='9H0J8S9NNQTVAMWMBV1D' where id=3; -update noar ti set b1='9H0J8S9NNQTVAMWMBV1D' where id=3; -update noar tt set v0='8H' where id=3; -update noar ti set v0='8H' where id=3; -update noar tt set b2='B6BA0OQTNZFBS' where id=3; -update noar ti set b2='B6BA0OQTNZFBS' where id=3; -update noar tt set v0='WVW7D0CXPQKP0NSIECODW5FF16J' where id=4; -update noar ti set v0='WVW7D0CXPQKP0NSIECODW5FF16J' where id=4; -update noar tt set b0='BG9JZ5NLGWSCLR0MT0ORZ1W' where id=4; -update noar ti set b0='BG9JZ5NLGWSCLR0MT0ORZ1W' where id=4; -update noar tt set v0='8D2CUBQKV4' where id=4; -update noar ti set v0='8D2CUBQKV4' where id=4; -update noar tt set b1='KDWYWWWJF8KL' where id=4; -update noar ti set b1='KDWYWWWJF8KL' where id=4; -update noar tt set v0='NTJU5M' where id=4; -update noar ti set v0='NTJU5M' where id=4; -update noar tt set b2='8IKTEHCHCW' where id=4; -update noar ti set b2='8IKTEHCHCW' where id=4; -update noar tt set v0='KRMXQUNAHZE' where id=5; -update noar ti set v0='KRMXQUNAHZE' where id=5; -update noar tt set b0='SD9CD19UAT' where id=5; -update noar ti set b0='SD9CD19UAT' where id=5; -update noar tt set v0='5G77M' where id=5; -update noar ti set v0='5G77M' where id=5; -update noar tt set b1='2SUORZ4NKGK3B4R325XRSRNFTXWU' where id=5; -update noar ti set b1='2SUORZ4NKGK3B4R325XRSRNFTXWU' where id=5; -update noar tt set v0='YNO0RVZ6XRE3' where id=5; -update noar ti set v0='YNO0RVZ6XRE3' where id=5; -update noar tt set b2='X' where id=5; -update noar ti set b2='X' where id=5; -update noar tt set v0='1TYAGCJUWZ1K5IYLZP65SVKYQ' where id=6; -update noar ti set v0='1TYAGCJUWZ1K5IYLZP65SVKYQ' where id=6; -update noar tt set b0='I1BBXO0FDMCF2SQA4H8N00W73SY' where id=6; -update noar ti set b0='I1BBXO0FDMCF2SQA4H8N00W73SY' where id=6; -update noar tt set v0='8E6VZGXF31M' where id=6; -update noar ti set v0='8E6VZGXF31M' where id=6; -update noar tt set b1='AGQT35MHC54PRCUZNV4LS' where id=6; -update noar ti set b1='AGQT35MHC54PRCUZNV4LS' where id=6; -update noar tt set v0='UCHUW3EWIJ' where id=6; -update noar ti set v0='UCHUW3EWIJ' where id=6; -update noar tt set b2='VX5R1OM5FESHQVLQC9JFBRYMFP0ZH3XB' where id=6; -update noar ti set b2='VX5R1OM5FESHQVLQC9JFBRYMFP0ZH3XB' where id=6; -update noar tt set v0='2C0F' where id=7; -update noar ti set v0='2C0F' where id=7; -update noar tt set b0='TH5W7UZ7MTRT52YI1AF0534C1Z7AF' where id=7; -update noar ti set b0='TH5W7UZ7MTRT52YI1AF0534C1Z7AF' where id=7; -update noar tt set v0='VFAWG' where id=7; -update noar ti set v0='VFAWG' where id=7; -update noar tt set b1='P0RXNBWKZHA' where id=7; -update noar ti set b1='P0RXNBWKZHA' where id=7; -update noar tt set v0='2NATG' where id=7; -update noar ti set v0='2NATG' where id=7; -update noar tt set b2='GPCJ2ZBQO1VCB3R' where id=7; -update noar ti set b2='GPCJ2ZBQO1VCB3R' where id=7; -update noar tt set v0='6ZXMM5T' where id=8; -update noar ti set v0='6ZXMM5T' where id=8; -update noar tt set b0='BDK4CIHZ7OD9F7CTV' where id=8; -update noar ti set b0='BDK4CIHZ7OD9F7CTV' where id=8; -update noar tt set v0='9W' where id=8; -update noar ti set v0='9W' where id=8; -update noar tt set b1='PIJIKVA51RYQKB' where id=8; -update noar ti set b1='PIJIKVA51RYQKB' where id=8; -update noar tt set v0='SB9J9HMBEF10UKA' where id=8; -update noar ti set v0='SB9J9HMBEF10UKA' where id=8; -update noar tt set b2='VTRFSXTBYR73UBHUGE1DSPTBAI8HQJ' where id=8; -update noar ti set b2='VTRFSXTBYR73UBHUGE1DSPTBAI8HQJ' where id=8; -update noar tt set v0='SF3ZDLRX0KQX2IXFNRPTH' where id=9; -update noar ti set v0='SF3ZDLRX0KQX2IXFNRPTH' where id=9; -update noar tt set b0='BB0ONZFAF2' where id=9; -update noar ti set b0='BB0ONZFAF2' where id=9; -update noar tt set v0='X9ZIMD9MVPQW' where id=9; -update noar ti set v0='X9ZIMD9MVPQW' where id=9; -update noar tt set b1='B3H7OLTI' where id=9; -update noar ti set b1='B3H7OLTI' where id=9; -update noar tt set v0='WF0SLXFB397F' where id=9; -update noar ti set v0='WF0SLXFB397F' where id=9; -update noar tt set b2='J5TEJYU3M2I5K1V0CLLRN9B' where id=9; -update noar ti set b2='J5TEJYU3M2I5K1V0CLLRN9B' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 blob not null, -b1 blob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='7ZY2N10WJFL3W7O5QE4P7G89UUHHPY' where id=1; -update noar ti set v0='7ZY2N10WJFL3W7O5QE4P7G89UUHHPY' where id=1; -update noar tt set b0='DXU33E2O7DYWD7WWW7965P3V394UH7V' where id=1; -update noar ti set b0='DXU33E2O7DYWD7WWW7965P3V394UH7V' where id=1; -update noar tt set v0='F9IYKKFYVHOQDHB' where id=1; -update noar ti set v0='F9IYKKFYVHOQDHB' where id=1; -update noar tt set b1='FGT40NAVGIG8EEFXD' where id=1; -update noar ti set b1='FGT40NAVGIG8EEFXD' where id=1; -update noar tt set v0='4X9NAY2Q4' where id=1; -update noar ti set v0='4X9NAY2Q4' where id=1; -update noar tt set b2='7TOHMB7' where id=1; -update noar ti set b2='7TOHMB7' where id=1; -update noar tt set v0='RM2O6DRPX3FSKOL031DGXYELDHM' where id=2; -update noar ti set v0='RM2O6DRPX3FSKOL031DGXYELDHM' where id=2; -update noar tt set b0='JZ11GJZDIC8VM24SR6IUJZ0WZO11' where id=2; -update noar ti set b0='JZ11GJZDIC8VM24SR6IUJZ0WZO11' where id=2; -update noar tt set v0='3UDTOQ5Y374TFOPIJIRZNV' where id=2; -update noar ti set v0='3UDTOQ5Y374TFOPIJIRZNV' where id=2; -update noar tt set b1='NL2LU02OF0TNID16A04XWGRG' where id=2; -update noar ti set b1='NL2LU02OF0TNID16A04XWGRG' where id=2; -update noar tt set v0='D7DY7EH2CG553QHJHV5' where id=2; -update noar ti set v0='D7DY7EH2CG553QHJHV5' where id=2; -update noar tt set b2='0S9I52JNFOKSRDORSRI8JC6D1W865CX' where id=2; -update noar ti set b2='0S9I52JNFOKSRDORSRI8JC6D1W865CX' where id=2; -update noar tt set v0='P77FPAAA6F2075P35ZV08B4P' where id=3; -update noar ti set v0='P77FPAAA6F2075P35ZV08B4P' where id=3; -update noar tt set b0='XOX' where id=3; -update noar ti set b0='XOX' where id=3; -update noar tt set v0='EGAGEV7C43CD5Z5U7O' where id=3; -update noar ti set v0='EGAGEV7C43CD5Z5U7O' where id=3; -update noar tt set b1='ZMT' where id=3; -update noar ti set b1='ZMT' where id=3; -update noar tt set v0='YVL5LFTE6YABM256048GZBVMRJ5SK' where id=3; -update noar ti set v0='YVL5LFTE6YABM256048GZBVMRJ5SK' where id=3; -update noar tt set b2='83RFGIGF' where id=3; -update noar ti set b2='83RFGIGF' where id=3; -update noar tt set v0='HYOQUL7INO0GH15GRHWB9XGG5YN' where id=4; -update noar ti set v0='HYOQUL7INO0GH15GRHWB9XGG5YN' where id=4; -update noar tt set b0='DHWDSY9DYCBFJ8UECW2ONLCXJW47' where id=4; -update noar ti set b0='DHWDSY9DYCBFJ8UECW2ONLCXJW47' where id=4; -update noar tt set v0='SFW3LQ0LAFFY79UF4' where id=4; -update noar ti set v0='SFW3LQ0LAFFY79UF4' where id=4; -update noar tt set b1='Q' where id=4; -update noar ti set b1='Q' where id=4; -update noar tt set v0='4MO2IAB5HVTQ16F' where id=4; -update noar ti set v0='4MO2IAB5HVTQ16F' where id=4; -update noar tt set b2='IF4' where id=4; -update noar ti set b2='IF4' where id=4; -update noar tt set v0='W7' where id=5; -update noar ti set v0='W7' where id=5; -update noar tt set b0='Y349Y' where id=5; -update noar ti set b0='Y349Y' where id=5; -update noar tt set v0='W6C63B6WDOKKLN02ZPE384ZOWOGHJ5C' where id=5; -update noar ti set v0='W6C63B6WDOKKLN02ZPE384ZOWOGHJ5C' where id=5; -update noar tt set b1='21BWMO8C47OW8Y9M83FHKBC9COWL7R' where id=5; -update noar ti set b1='21BWMO8C47OW8Y9M83FHKBC9COWL7R' where id=5; -update noar tt set v0='5GL0F5Z9MAMRP0I1HJX' where id=5; -update noar ti set v0='5GL0F5Z9MAMRP0I1HJX' where id=5; -update noar tt set b2='AAR57DP24PV5JAXPVL4U0SAM5V' where id=5; -update noar ti set b2='AAR57DP24PV5JAXPVL4U0SAM5V' where id=5; -update noar tt set v0='WQCMIC4TVW' where id=6; -update noar ti set v0='WQCMIC4TVW' where id=6; -update noar tt set b0='G281WN097XXGNA4NHOMFTTRS13D5' where id=6; -update noar ti set b0='G281WN097XXGNA4NHOMFTTRS13D5' where id=6; -update noar tt set v0='JQPRV1S9K0X6IMIM7JFPIX47HXW' where id=6; -update noar ti set v0='JQPRV1S9K0X6IMIM7JFPIX47HXW' where id=6; -update noar tt set b1='DMMZ' where id=6; -update noar ti set b1='DMMZ' where id=6; -update noar tt set v0='35KVTIA4F1HKC' where id=6; -update noar ti set v0='35KVTIA4F1HKC' where id=6; -update noar tt set b2='F9N1' where id=6; -update noar ti set b2='F9N1' where id=6; -update noar tt set v0='PKVQ4' where id=7; -update noar ti set v0='PKVQ4' where id=7; -update noar tt set b0='01CBOANC05OQ4MRYO719IP687GRZ' where id=7; -update noar ti set b0='01CBOANC05OQ4MRYO719IP687GRZ' where id=7; -update noar tt set v0='PW0X2YDQSM8B6642EGIYY728ETZ6D1' where id=7; -update noar ti set v0='PW0X2YDQSM8B6642EGIYY728ETZ6D1' where id=7; -update noar tt set b1='44OF0D7' where id=7; -update noar ti set b1='44OF0D7' where id=7; -update noar tt set v0='CCV' where id=7; -update noar ti set v0='CCV' where id=7; -update noar tt set b2='JRWZX' where id=7; -update noar ti set b2='JRWZX' where id=7; -update noar tt set v0='ZQ9TFF53XW53AUJ2O1J7BZF3RDI92C' where id=8; -update noar ti set v0='ZQ9TFF53XW53AUJ2O1J7BZF3RDI92C' where id=8; -update noar tt set b0='OO0V1G' where id=8; -update noar ti set b0='OO0V1G' where id=8; -update noar tt set v0='V' where id=8; -update noar ti set v0='V' where id=8; -update noar tt set b1='6RZL7O0QSA' where id=8; -update noar ti set b1='6RZL7O0QSA' where id=8; -update noar tt set v0='IG7SF370IQO' where id=8; -update noar ti set v0='IG7SF370IQO' where id=8; -update noar tt set b2='F4VK' where id=8; -update noar ti set b2='F4VK' where id=8; -update noar tt set v0='AJOOR3YRNX8YB71LGMAAN6MJHV9ID' where id=9; -update noar ti set v0='AJOOR3YRNX8YB71LGMAAN6MJHV9ID' where id=9; -update noar tt set b0='8GAP83BNYJCH85P2' where id=9; -update noar ti set b0='8GAP83BNYJCH85P2' where id=9; -update noar tt set v0='T27BL1YT' where id=9; -update noar ti set v0='T27BL1YT' where id=9; -update noar tt set b1='P4LJ9MBV3AIOQ79' where id=9; -update noar ti set b1='P4LJ9MBV3AIOQ79' where id=9; -update noar tt set v0='8Y1HDDLXFBHR3EP6' where id=9; -update noar ti set v0='8Y1HDDLXFBHR3EP6' where id=9; -update noar tt set b2='PEMLQ7A2CEYAJLG9S' where id=9; -update noar ti set b2='PEMLQ7A2CEYAJLG9S' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 blob null, -b1 blob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='OHILF04F60NXEJRL6F' where id=1; -update noar ti set v0='OHILF04F60NXEJRL6F' where id=1; -update noar tt set b0='C8I3P4ITSKDS8ORHDT0W9G5' where id=1; -update noar ti set b0='C8I3P4ITSKDS8ORHDT0W9G5' where id=1; -update noar tt set v0='XL10OB0' where id=1; -update noar ti set v0='XL10OB0' where id=1; -update noar tt set b1='OGP68635LUQ1KYQ8VV31LO52ISV' where id=1; -update noar ti set b1='OGP68635LUQ1KYQ8VV31LO52ISV' where id=1; -update noar tt set v0='FRU' where id=1; -update noar ti set v0='FRU' where id=1; -update noar tt set b2='JY54DILVUGLQPNSD1VSY6G' where id=1; -update noar ti set b2='JY54DILVUGLQPNSD1VSY6G' where id=1; -update noar tt set v0='4HJ1KMDM9LNE5ZSABV6C' where id=2; -update noar ti set v0='4HJ1KMDM9LNE5ZSABV6C' where id=2; -update noar tt set b0='XVB0SARTERFOSG6NJT5XAGU49V0AV' where id=2; -update noar ti set b0='XVB0SARTERFOSG6NJT5XAGU49V0AV' where id=2; -update noar tt set v0='AGIZS88F8CRH33T9OVH2O0JDRA3Q6' where id=2; -update noar ti set v0='AGIZS88F8CRH33T9OVH2O0JDRA3Q6' where id=2; -update noar tt set b1='XFUZ' where id=2; -update noar ti set b1='XFUZ' where id=2; -update noar tt set v0='WRNNPI53MB1Q5BZVUCJM90IM4M1D' where id=2; -update noar ti set v0='WRNNPI53MB1Q5BZVUCJM90IM4M1D' where id=2; -update noar tt set b2='ZUNFTPAWM8JUPD820CTVY' where id=2; -update noar ti set b2='ZUNFTPAWM8JUPD820CTVY' where id=2; -update noar tt set v0='FS2BT489HS0S2RFWMF67GR00U9IH' where id=3; -update noar ti set v0='FS2BT489HS0S2RFWMF67GR00U9IH' where id=3; -update noar tt set b0='7Z2LUM8K46K8V3AEN74DGKGNWPAE40' where id=3; -update noar ti set b0='7Z2LUM8K46K8V3AEN74DGKGNWPAE40' where id=3; -update noar tt set v0='LSO1AKTYIJJO2IA7' where id=3; -update noar ti set v0='LSO1AKTYIJJO2IA7' where id=3; -update noar tt set b1='JB' where id=3; -update noar ti set b1='JB' where id=3; -update noar tt set v0='41L7PJA1LI73S8JF1KXUE' where id=3; -update noar ti set v0='41L7PJA1LI73S8JF1KXUE' where id=3; -update noar tt set b2='QKGXEY' where id=3; -update noar ti set b2='QKGXEY' where id=3; -update noar tt set v0='3FXQ6VWJ1CSU' where id=4; -update noar ti set v0='3FXQ6VWJ1CSU' where id=4; -update noar tt set b0='R1GZA9AD76DJUBM' where id=4; -update noar ti set b0='R1GZA9AD76DJUBM' where id=4; -update noar tt set v0='RO6PR48BBWTJT' where id=4; -update noar ti set v0='RO6PR48BBWTJT' where id=4; -update noar tt set b1='DD3NLHSN3A8MQ4VKZ3N' where id=4; -update noar ti set b1='DD3NLHSN3A8MQ4VKZ3N' where id=4; -update noar tt set v0='J5C9U04KYK400MO47SA6' where id=4; -update noar ti set v0='J5C9U04KYK400MO47SA6' where id=4; -update noar tt set b2='9' where id=4; -update noar ti set b2='9' where id=4; -update noar tt set v0='LV9YVQ7Q263C26I02318HP69Y3FP2QC' where id=5; -update noar ti set v0='LV9YVQ7Q263C26I02318HP69Y3FP2QC' where id=5; -update noar tt set b0='CCE' where id=5; -update noar ti set b0='CCE' where id=5; -update noar tt set v0='IXKG3KA3GSUXAIEA438P4WBN6ITHJ5' where id=5; -update noar ti set v0='IXKG3KA3GSUXAIEA438P4WBN6ITHJ5' where id=5; -update noar tt set b1='ITV76CAQZVFQFE4VCU1HCSE3DG' where id=5; -update noar ti set b1='ITV76CAQZVFQFE4VCU1HCSE3DG' where id=5; -update noar tt set v0='8KWVNJJTY4Z86' where id=5; -update noar ti set v0='8KWVNJJTY4Z86' where id=5; -update noar tt set b2='WSTT2TG6IPKP7VVNGT' where id=5; -update noar ti set b2='WSTT2TG6IPKP7VVNGT' where id=5; -update noar tt set v0='CM' where id=6; -update noar ti set v0='CM' where id=6; -update noar tt set b0='NXIK5VOBE' where id=6; -update noar ti set b0='NXIK5VOBE' where id=6; -update noar tt set v0='GVNB6' where id=6; -update noar ti set v0='GVNB6' where id=6; -update noar tt set b1='Q99' where id=6; -update noar ti set b1='Q99' where id=6; -update noar tt set v0='AK' where id=6; -update noar ti set v0='AK' where id=6; -update noar tt set b2='DVPR4YH8FCR6YFTBG1B4BDH8IP' where id=6; -update noar ti set b2='DVPR4YH8FCR6YFTBG1B4BDH8IP' where id=6; -update noar tt set v0='EHB6BL3GYLRDONWF' where id=7; -update noar ti set v0='EHB6BL3GYLRDONWF' where id=7; -update noar tt set b0='1VT0U80Y9MD6NQ0QX5JO' where id=7; -update noar ti set b0='1VT0U80Y9MD6NQ0QX5JO' where id=7; -update noar tt set v0='T' where id=7; -update noar ti set v0='T' where id=7; -update noar tt set b1='HYDQGXSWL8' where id=7; -update noar ti set b1='HYDQGXSWL8' where id=7; -update noar tt set v0='16Z1PJZCLZ87W2EAIWJOCL36ML1M' where id=7; -update noar ti set v0='16Z1PJZCLZ87W2EAIWJOCL36ML1M' where id=7; -update noar tt set b2='FB' where id=7; -update noar ti set b2='FB' where id=7; -update noar tt set v0='LVANGGM7YQQ4OKAV0E8MZ' where id=8; -update noar ti set v0='LVANGGM7YQQ4OKAV0E8MZ' where id=8; -update noar tt set b0='FNX2VFNQSRPHLU1CX' where id=8; -update noar ti set b0='FNX2VFNQSRPHLU1CX' where id=8; -update noar tt set v0='ADUVBROBXM' where id=8; -update noar ti set v0='ADUVBROBXM' where id=8; -update noar tt set b1='52AKHOTG3' where id=8; -update noar ti set b1='52AKHOTG3' where id=8; -update noar tt set v0='AUY577K9AA7ZZRG8I94' where id=8; -update noar ti set v0='AUY577K9AA7ZZRG8I94' where id=8; -update noar tt set b2='8C4K90555ZLV1KPGHQ6KJIGAGM9I8J1' where id=8; -update noar ti set b2='8C4K90555ZLV1KPGHQ6KJIGAGM9I8J1' where id=8; -update noar tt set v0='XF04BXXZFNG7L0OLQJ2DWFKPA' where id=9; -update noar ti set v0='XF04BXXZFNG7L0OLQJ2DWFKPA' where id=9; -update noar tt set b0='6VZJQ1WTMMPYW0PQBU673TMCHJ2QQY' where id=9; -update noar ti set b0='6VZJQ1WTMMPYW0PQBU673TMCHJ2QQY' where id=9; -update noar tt set v0='L1SONQIKQPKYGQLK8UIZK851HNT5Q' where id=9; -update noar ti set v0='L1SONQIKQPKYGQLK8UIZK851HNT5Q' where id=9; -update noar tt set b1='EJ0GL9FU3AGQX9TXFJKZ4FQRIKSBB2J' where id=9; -update noar ti set b1='EJ0GL9FU3AGQX9TXFJKZ4FQRIKSBB2J' where id=9; -update noar tt set v0='YLU1JHLC' where id=9; -update noar ti set v0='YLU1JHLC' where id=9; -update noar tt set b2='69YT' where id=9; -update noar ti set b2='69YT' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 blob null, -b1 blob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='VK78QUVI77ZN4BF6D1JOS8UN' where id=1; -update noar ti set v0='VK78QUVI77ZN4BF6D1JOS8UN' where id=1; -update noar tt set b0='YZEFHBAU7VW7QX1LMAVAMZ5AFOW7PPWC' where id=1; -update noar ti set b0='YZEFHBAU7VW7QX1LMAVAMZ5AFOW7PPWC' where id=1; -update noar tt set v0='HVC3ZWEZR45QMEONCRHKW3WR' where id=1; -update noar ti set v0='HVC3ZWEZR45QMEONCRHKW3WR' where id=1; -update noar tt set b1='VMM6XW1NFF863B2ZDJK5LH' where id=1; -update noar ti set b1='VMM6XW1NFF863B2ZDJK5LH' where id=1; -update noar tt set v0='ABECRXSVLXS3OK6A4VMOEPQ' where id=1; -update noar ti set v0='ABECRXSVLXS3OK6A4VMOEPQ' where id=1; -update noar tt set b2='805Y6RS1MLESLG4K8SQWB9' where id=1; -update noar ti set b2='805Y6RS1MLESLG4K8SQWB9' where id=1; -update noar tt set v0='148T7RW05854PEGF3' where id=2; -update noar ti set v0='148T7RW05854PEGF3' where id=2; -update noar tt set b0='3H' where id=2; -update noar ti set b0='3H' where id=2; -update noar tt set v0='9NIFKEGJQRZTUJTRVH7' where id=2; -update noar ti set v0='9NIFKEGJQRZTUJTRVH7' where id=2; -update noar tt set b1='MQR1C' where id=2; -update noar ti set b1='MQR1C' where id=2; -update noar tt set v0='XI0YT5ZMXLZKKAETDAS' where id=2; -update noar ti set v0='XI0YT5ZMXLZKKAETDAS' where id=2; -update noar tt set b2='0JC2RRT9AZYLTTAI' where id=2; -update noar ti set b2='0JC2RRT9AZYLTTAI' where id=2; -update noar tt set v0='T0G0NWX4IS3AF9495ZKDI1K' where id=3; -update noar ti set v0='T0G0NWX4IS3AF9495ZKDI1K' where id=3; -update noar tt set b0='47F60' where id=3; -update noar ti set b0='47F60' where id=3; -update noar tt set v0='371MW2SWY668OLPBBIG' where id=3; -update noar ti set v0='371MW2SWY668OLPBBIG' where id=3; -update noar tt set b1='2W' where id=3; -update noar ti set b1='2W' where id=3; -update noar tt set v0='IQ7' where id=3; -update noar ti set v0='IQ7' where id=3; -update noar tt set b2='5P04YDSA' where id=3; -update noar ti set b2='5P04YDSA' where id=3; -update noar tt set v0='3UW' where id=4; -update noar ti set v0='3UW' where id=4; -update noar tt set b0='SYILSORIIM7FAX8WKDUCV9VENY' where id=4; -update noar ti set b0='SYILSORIIM7FAX8WKDUCV9VENY' where id=4; -update noar tt set v0='AWA7UIJ9F33VV4P3WOKHISAE6' where id=4; -update noar ti set v0='AWA7UIJ9F33VV4P3WOKHISAE6' where id=4; -update noar tt set b1='CD8NI' where id=4; -update noar ti set b1='CD8NI' where id=4; -update noar tt set v0='R6ITDVE394UNGYZROOSHMXBG7LBDD6' where id=4; -update noar ti set v0='R6ITDVE394UNGYZROOSHMXBG7LBDD6' where id=4; -update noar tt set b2='RUG30GRB078XSRE4XQEMLC9AO4GY2R1' where id=4; -update noar ti set b2='RUG30GRB078XSRE4XQEMLC9AO4GY2R1' where id=4; -update noar tt set v0='HST854VB108C' where id=5; -update noar ti set v0='HST854VB108C' where id=5; -update noar tt set b0='D7' where id=5; -update noar ti set b0='D7' where id=5; -update noar tt set v0='KNCWJQT513GRUJIW8LDG9O0RB3DZ1M' where id=5; -update noar ti set v0='KNCWJQT513GRUJIW8LDG9O0RB3DZ1M' where id=5; -update noar tt set b1='EYZ8LC9ZBD4DNILTKGNZE93QNYPS' where id=5; -update noar ti set b1='EYZ8LC9ZBD4DNILTKGNZE93QNYPS' where id=5; -update noar tt set v0='2C2G5PLZU2E3TRY' where id=5; -update noar ti set v0='2C2G5PLZU2E3TRY' where id=5; -update noar tt set b2='16Z3Z4HIPKBBHXHPXNM7TNZUZX48' where id=5; -update noar ti set b2='16Z3Z4HIPKBBHXHPXNM7TNZUZX48' where id=5; -update noar tt set v0='0RHDKGUPVQ8XMC15GW5DAJDF' where id=6; -update noar ti set v0='0RHDKGUPVQ8XMC15GW5DAJDF' where id=6; -update noar tt set b0='GEO5636JY3SWSY1IRJWTNAMP' where id=6; -update noar ti set b0='GEO5636JY3SWSY1IRJWTNAMP' where id=6; -update noar tt set v0='NO1CS3PBA' where id=6; -update noar ti set v0='NO1CS3PBA' where id=6; -update noar tt set b1='RWPFII00Q2NO24PWXEFDW7M00' where id=6; -update noar ti set b1='RWPFII00Q2NO24PWXEFDW7M00' where id=6; -update noar tt set v0='2T8MTSX152AB8THITMTIFD7QQN404' where id=6; -update noar ti set v0='2T8MTSX152AB8THITMTIFD7QQN404' where id=6; -update noar tt set b2='P6IC' where id=6; -update noar ti set b2='P6IC' where id=6; -update noar tt set v0='D2HH5M8CH01W8IC89MT' where id=7; -update noar ti set v0='D2HH5M8CH01W8IC89MT' where id=7; -update noar tt set b0='YIQB0M4KWBZ6YXBY8EYT62EI707BCE' where id=7; -update noar ti set b0='YIQB0M4KWBZ6YXBY8EYT62EI707BCE' where id=7; -update noar tt set v0='6BSXBGQK' where id=7; -update noar ti set v0='6BSXBGQK' where id=7; -update noar tt set b1='YHQW6AU6K913C3GX3EMQCWBQ' where id=7; -update noar ti set b1='YHQW6AU6K913C3GX3EMQCWBQ' where id=7; -update noar tt set v0='BU5VTADN' where id=7; -update noar ti set v0='BU5VTADN' where id=7; -update noar tt set b2='2X6OBIB1EQW6G5OQ7B9ZBT6Y' where id=7; -update noar ti set b2='2X6OBIB1EQW6G5OQ7B9ZBT6Y' where id=7; -update noar tt set v0='H5MIFDOWE3G' where id=8; -update noar ti set v0='H5MIFDOWE3G' where id=8; -update noar tt set b0='JR9R55XL3MU9C14O' where id=8; -update noar ti set b0='JR9R55XL3MU9C14O' where id=8; -update noar tt set v0='757K0OIKSJQDRJ8HGMLX2K2SUYQ' where id=8; -update noar ti set v0='757K0OIKSJQDRJ8HGMLX2K2SUYQ' where id=8; -update noar tt set b1='WY3' where id=8; -update noar ti set b1='WY3' where id=8; -update noar tt set v0='3QVHTO3FQ5YLUA' where id=8; -update noar ti set v0='3QVHTO3FQ5YLUA' where id=8; -update noar tt set b2='3MKUV' where id=8; -update noar ti set b2='3MKUV' where id=8; -update noar tt set v0='PQZ7UCD72P2RRLLOTDR5QPIE0BJ5' where id=9; -update noar ti set v0='PQZ7UCD72P2RRLLOTDR5QPIE0BJ5' where id=9; -update noar tt set b0='1HCMZ4YZ7' where id=9; -update noar ti set b0='1HCMZ4YZ7' where id=9; -update noar tt set v0='KQW7T8CY9ZWP63N00F97' where id=9; -update noar ti set v0='KQW7T8CY9ZWP63N00F97' where id=9; -update noar tt set b1='LIXNRRJC3BLTMWCA0FJMH0BWBFG91YS' where id=9; -update noar ti set b1='LIXNRRJC3BLTMWCA0FJMH0BWBFG91YS' where id=9; -update noar tt set v0='QH156VY8U8ZL89719A6COFXJ2M' where id=9; -update noar ti set v0='QH156VY8U8ZL89719A6COFXJ2M' where id=9; -update noar tt set b2='UCCP3G084WAKSFS9' where id=9; -update noar ti set b2='UCCP3G084WAKSFS9' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 blob not null, -b1 blob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='B5XWHWKNJK1PTAAW3WE2LR2J6HFAJ1KB' where id=1; -update noar ti set v0='B5XWHWKNJK1PTAAW3WE2LR2J6HFAJ1KB' where id=1; -update noar tt set b0='AQK8983Q5PY5B0R7' where id=1; -update noar ti set b0='AQK8983Q5PY5B0R7' where id=1; -update noar tt set v0='IP8OWZPLPHZX08TXADD687XTUE' where id=1; -update noar ti set v0='IP8OWZPLPHZX08TXADD687XTUE' where id=1; -update noar tt set b1='4RLR' where id=1; -update noar ti set b1='4RLR' where id=1; -update noar tt set v0='TTAFDB4FN9JF5C8878TIBJ' where id=1; -update noar ti set v0='TTAFDB4FN9JF5C8878TIBJ' where id=1; -update noar tt set b2='UM91JULKWUQS86JS01ERWEM0HKKFTA2' where id=1; -update noar ti set b2='UM91JULKWUQS86JS01ERWEM0HKKFTA2' where id=1; -update noar tt set v0='V2UXBYWMPOWS06HIIRI3' where id=2; -update noar ti set v0='V2UXBYWMPOWS06HIIRI3' where id=2; -update noar tt set b0='HJHRQ8PV6JHB9DO0L5REVCGSR' where id=2; -update noar ti set b0='HJHRQ8PV6JHB9DO0L5REVCGSR' where id=2; -update noar tt set v0='6ZPN2DJDX5C9RUO' where id=2; -update noar ti set v0='6ZPN2DJDX5C9RUO' where id=2; -update noar tt set b1='B98DODIGBA' where id=2; -update noar ti set b1='B98DODIGBA' where id=2; -update noar tt set v0='KBMTV956BWQYH4IJXTIYJ0Q3O' where id=2; -update noar ti set v0='KBMTV956BWQYH4IJXTIYJ0Q3O' where id=2; -update noar tt set b2='7AN5TAY95NZ' where id=2; -update noar ti set b2='7AN5TAY95NZ' where id=2; -update noar tt set v0='BVLR72H4Z0FASJESJU2DOUKOB6GCMB' where id=3; -update noar ti set v0='BVLR72H4Z0FASJESJU2DOUKOB6GCMB' where id=3; -update noar tt set b0='R23GLO' where id=3; -update noar ti set b0='R23GLO' where id=3; -update noar tt set v0='SWIC1LY6CB222UBSVEA88CKWSHCI73J' where id=3; -update noar ti set v0='SWIC1LY6CB222UBSVEA88CKWSHCI73J' where id=3; -update noar tt set b1='68KKE7M9L7BX2MKZNK9V8CE5UC' where id=3; -update noar ti set b1='68KKE7M9L7BX2MKZNK9V8CE5UC' where id=3; -update noar tt set v0='KFRJRFKWZX9J67QNGE091IEQSQBTR6' where id=3; -update noar ti set v0='KFRJRFKWZX9J67QNGE091IEQSQBTR6' where id=3; -update noar tt set b2='B1LMRJAC7AB7UGP9G1VSYITAFFTF3P2' where id=3; -update noar ti set b2='B1LMRJAC7AB7UGP9G1VSYITAFFTF3P2' where id=3; -update noar tt set v0='MSG8KH2QHKM24IUKFNTQ8' where id=4; -update noar ti set v0='MSG8KH2QHKM24IUKFNTQ8' where id=4; -update noar tt set b0='I7' where id=4; -update noar ti set b0='I7' where id=4; -update noar tt set v0='PYXXJR6FTHTH' where id=4; -update noar ti set v0='PYXXJR6FTHTH' where id=4; -update noar tt set b1='X4P2X' where id=4; -update noar ti set b1='X4P2X' where id=4; -update noar tt set v0='M55060DV5VQIRPHUAWR0F5UKLKH' where id=4; -update noar ti set v0='M55060DV5VQIRPHUAWR0F5UKLKH' where id=4; -update noar tt set b2='56NSLOR' where id=4; -update noar ti set b2='56NSLOR' where id=4; -update noar tt set v0='QH36L2YOAWU06RR48JCSQYG' where id=5; -update noar ti set v0='QH36L2YOAWU06RR48JCSQYG' where id=5; -update noar tt set b0='2LCECGVHIAFWLKMIXTTT3BYU5' where id=5; -update noar ti set b0='2LCECGVHIAFWLKMIXTTT3BYU5' where id=5; -update noar tt set v0='GLKR0M2RG0IUN3IOH' where id=5; -update noar ti set v0='GLKR0M2RG0IUN3IOH' where id=5; -update noar tt set b1='ZCNWUWA14AQ' where id=5; -update noar ti set b1='ZCNWUWA14AQ' where id=5; -update noar tt set v0='ZWRT6V7UMML' where id=5; -update noar ti set v0='ZWRT6V7UMML' where id=5; -update noar tt set b2='DHXQZ16C5P2JJURQTU' where id=5; -update noar ti set b2='DHXQZ16C5P2JJURQTU' where id=5; -update noar tt set v0='RU30IHVPF8JHJGMLZKOU55R6WW20DW' where id=6; -update noar ti set v0='RU30IHVPF8JHJGMLZKOU55R6WW20DW' where id=6; -update noar tt set b0='K7GJAPHJY1ZCZMPZOBR5U' where id=6; -update noar ti set b0='K7GJAPHJY1ZCZMPZOBR5U' where id=6; -update noar tt set v0='IQ' where id=6; -update noar ti set v0='IQ' where id=6; -update noar tt set b1='ZT2H1ROSHU1ODB231F591' where id=6; -update noar ti set b1='ZT2H1ROSHU1ODB231F591' where id=6; -update noar tt set v0='8UTCDLMXU17E' where id=6; -update noar ti set v0='8UTCDLMXU17E' where id=6; -update noar tt set b2='3U5LUDCE6AQK366' where id=6; -update noar ti set b2='3U5LUDCE6AQK366' where id=6; -update noar tt set v0='WYF3G4OSDUYMDMLQ' where id=7; -update noar ti set v0='WYF3G4OSDUYMDMLQ' where id=7; -update noar tt set b0='890M8R8857IUJ70D0R1EO6359' where id=7; -update noar ti set b0='890M8R8857IUJ70D0R1EO6359' where id=7; -update noar tt set v0='GAKJP' where id=7; -update noar ti set v0='GAKJP' where id=7; -update noar tt set b1='XAF' where id=7; -update noar ti set b1='XAF' where id=7; -update noar tt set v0='CO83M' where id=7; -update noar ti set v0='CO83M' where id=7; -update noar tt set b2='371Y58KL7UAFIVULL2UW4R' where id=7; -update noar ti set b2='371Y58KL7UAFIVULL2UW4R' where id=7; -update noar tt set v0='WQBVS64ACCNCTC3D9SV53X8W0WD' where id=8; -update noar ti set v0='WQBVS64ACCNCTC3D9SV53X8W0WD' where id=8; -update noar tt set b0='RNW6XQ2XV1AS9DV0' where id=8; -update noar ti set b0='RNW6XQ2XV1AS9DV0' where id=8; -update noar tt set v0='LCNOX19GU690FN2NIQRA3QKMP9FUNVDZ' where id=8; -update noar ti set v0='LCNOX19GU690FN2NIQRA3QKMP9FUNVDZ' where id=8; -update noar tt set b1='EOMGAJHOPKPSVL99' where id=8; -update noar ti set b1='EOMGAJHOPKPSVL99' where id=8; -update noar tt set v0='VDJG5ZCF3S6PTJOV' where id=8; -update noar ti set v0='VDJG5ZCF3S6PTJOV' where id=8; -update noar tt set b2='Q0HJLIWI2BE553NIPGDXQOOJGJ' where id=8; -update noar ti set b2='Q0HJLIWI2BE553NIPGDXQOOJGJ' where id=8; -update noar tt set v0='UJO9DQD1TU15WJKC' where id=9; -update noar ti set v0='UJO9DQD1TU15WJKC' where id=9; -update noar tt set b0='PGTZGOTNUPLUUDVRJTDCES61UL1' where id=9; -update noar ti set b0='PGTZGOTNUPLUUDVRJTDCES61UL1' where id=9; -update noar tt set v0='4JA99KW3OHT06PG4IRSV' where id=9; -update noar ti set v0='4JA99KW3OHT06PG4IRSV' where id=9; -update noar tt set b1='HSHJIRXKIY2IF1G0KY9P' where id=9; -update noar ti set b1='HSHJIRXKIY2IF1G0KY9P' where id=9; -update noar tt set v0='8MCAYW972R5T' where id=9; -update noar ti set v0='8MCAYW972R5T' where id=9; -update noar tt set b2='2VCOWY8HEVHJSPX5MYW4L7HI' where id=9; -update noar ti set b2='2VCOWY8HEVHJSPX5MYW4L7HI' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 blob not null, -b1 blob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='ENG49' where id=1; -update noar ti set v0='ENG49' where id=1; -update noar tt set b0='CC500FPMVMNWMSGW424KY2TO4M9UM1I' where id=1; -update noar ti set b0='CC500FPMVMNWMSGW424KY2TO4M9UM1I' where id=1; -update noar tt set v0='N35ZIBQB' where id=1; -update noar ti set v0='N35ZIBQB' where id=1; -update noar tt set b1='KBMT6QF7K2S3MWCAVA3' where id=1; -update noar ti set b1='KBMT6QF7K2S3MWCAVA3' where id=1; -update noar tt set v0='9W839TN2URY' where id=1; -update noar ti set v0='9W839TN2URY' where id=1; -update noar tt set b2='P3S0AXGAUQ91SA3VW' where id=1; -update noar ti set b2='P3S0AXGAUQ91SA3VW' where id=1; -update noar tt set v0='Q8QLH334JIMV81KILO7AU06LOC4Z1O1O' where id=2; -update noar ti set v0='Q8QLH334JIMV81KILO7AU06LOC4Z1O1O' where id=2; -update noar tt set b0='5BY3E035HCQQ4L4' where id=2; -update noar ti set b0='5BY3E035HCQQ4L4' where id=2; -update noar tt set v0='M5FEIQEDND1P8UWOVN3P' where id=2; -update noar ti set v0='M5FEIQEDND1P8UWOVN3P' where id=2; -update noar tt set b1='R7EBVNKM3HNZ5L2AFQEON2UI7HD36K9E' where id=2; -update noar ti set b1='R7EBVNKM3HNZ5L2AFQEON2UI7HD36K9E' where id=2; -update noar tt set v0='DHHDQ3CQMQCK' where id=2; -update noar ti set v0='DHHDQ3CQMQCK' where id=2; -update noar tt set b2='CG4GXAPLZKCM24PCDQ1I8A1JLKVMJ6Q' where id=2; -update noar ti set b2='CG4GXAPLZKCM24PCDQ1I8A1JLKVMJ6Q' where id=2; -update noar tt set v0='D20TQ70E2LNLI3QF18LPVXFBDSSCU' where id=3; -update noar ti set v0='D20TQ70E2LNLI3QF18LPVXFBDSSCU' where id=3; -update noar tt set b0='S0F6W6' where id=3; -update noar ti set b0='S0F6W6' where id=3; -update noar tt set v0='8TXFK8J3YQE' where id=3; -update noar ti set v0='8TXFK8J3YQE' where id=3; -update noar tt set b1='L9AZE8OV907G' where id=3; -update noar ti set b1='L9AZE8OV907G' where id=3; -update noar tt set v0='6Z' where id=3; -update noar ti set v0='6Z' where id=3; -update noar tt set b2='HYR' where id=3; -update noar ti set b2='HYR' where id=3; -update noar tt set v0='1IUL5P' where id=4; -update noar ti set v0='1IUL5P' where id=4; -update noar tt set b0='LFU6C4D28N' where id=4; -update noar ti set b0='LFU6C4D28N' where id=4; -update noar tt set v0='ZGT0Q9C8MAV' where id=4; -update noar ti set v0='ZGT0Q9C8MAV' where id=4; -update noar tt set b1='3Q1CIJU2ET0QY2ET4F0M' where id=4; -update noar ti set b1='3Q1CIJU2ET0QY2ET4F0M' where id=4; -update noar tt set v0='L3TPCI2P' where id=4; -update noar ti set v0='L3TPCI2P' where id=4; -update noar tt set b2='BV' where id=4; -update noar ti set b2='BV' where id=4; -update noar tt set v0='OLX65KBZY06B4KDG5FZXOE' where id=5; -update noar ti set v0='OLX65KBZY06B4KDG5FZXOE' where id=5; -update noar tt set b0='5D' where id=5; -update noar ti set b0='5D' where id=5; -update noar tt set v0='DXUJXA204RFEN0IGC2ISZ' where id=5; -update noar ti set v0='DXUJXA204RFEN0IGC2ISZ' where id=5; -update noar tt set b1='T9B8J1J29GAH1GTF24ZRXT' where id=5; -update noar ti set b1='T9B8J1J29GAH1GTF24ZRXT' where id=5; -update noar tt set v0='3EE6K56HE' where id=5; -update noar ti set v0='3EE6K56HE' where id=5; -update noar tt set b2='XNXG479PGDSVM' where id=5; -update noar ti set b2='XNXG479PGDSVM' where id=5; -update noar tt set v0='TU519WQ6YW7X' where id=6; -update noar ti set v0='TU519WQ6YW7X' where id=6; -update noar tt set b0='D80AY6WP' where id=6; -update noar ti set b0='D80AY6WP' where id=6; -update noar tt set v0='OSLSZUUNTMAMBJTKL9P2P8FG1KME9BRZ' where id=6; -update noar ti set v0='OSLSZUUNTMAMBJTKL9P2P8FG1KME9BRZ' where id=6; -update noar tt set b1='YO2I2OY2A' where id=6; -update noar ti set b1='YO2I2OY2A' where id=6; -update noar tt set v0='R0A4ZAK0TNLTO6D1' where id=6; -update noar ti set v0='R0A4ZAK0TNLTO6D1' where id=6; -update noar tt set b2='ORM5UFLVZL' where id=6; -update noar ti set b2='ORM5UFLVZL' where id=6; -update noar tt set v0='TWNRHB4VTSV3TNI' where id=7; -update noar ti set v0='TWNRHB4VTSV3TNI' where id=7; -update noar tt set b0='WLBEJX29J9LH' where id=7; -update noar ti set b0='WLBEJX29J9LH' where id=7; -update noar tt set v0='4SEBSEP726' where id=7; -update noar ti set v0='4SEBSEP726' where id=7; -update noar tt set b1='WQJ4FZ3EN' where id=7; -update noar ti set b1='WQJ4FZ3EN' where id=7; -update noar tt set v0='I2UON3E46X9W1FV9OJ' where id=7; -update noar ti set v0='I2UON3E46X9W1FV9OJ' where id=7; -update noar tt set b2='6FSY81G28EGA82XS4LF52PPSSADGD5K' where id=7; -update noar ti set b2='6FSY81G28EGA82XS4LF52PPSSADGD5K' where id=7; -update noar tt set v0='GBBQ2D31H' where id=8; -update noar ti set v0='GBBQ2D31H' where id=8; -update noar tt set b0='1NQBHYLDY0JE' where id=8; -update noar ti set b0='1NQBHYLDY0JE' where id=8; -update noar tt set v0='ENOVCTT9B3' where id=8; -update noar ti set v0='ENOVCTT9B3' where id=8; -update noar tt set b1='SJH2ZOTLTP9D02' where id=8; -update noar ti set b1='SJH2ZOTLTP9D02' where id=8; -update noar tt set v0='MSCQXU7VJ38WSMX' where id=8; -update noar ti set v0='MSCQXU7VJ38WSMX' where id=8; -update noar tt set b2='FBT7QAYDD2U5S22C1QF9NS7' where id=8; -update noar ti set b2='FBT7QAYDD2U5S22C1QF9NS7' where id=8; -update noar tt set v0='Y0SJA2IOKECPIS5QW2PTYE5' where id=9; -update noar ti set v0='Y0SJA2IOKECPIS5QW2PTYE5' where id=9; -update noar tt set b0='6GLYG' where id=9; -update noar ti set b0='6GLYG' where id=9; -update noar tt set v0='LDP7KC70MWPL3R4686063RI' where id=9; -update noar ti set v0='LDP7KC70MWPL3R4686063RI' where id=9; -update noar tt set b1='S9MLH5GW19JH2HIHQ0YXIZV0Z6CT94E' where id=9; -update noar ti set b1='S9MLH5GW19JH2HIHQ0YXIZV0Z6CT94E' where id=9; -update noar tt set v0='GI52HNS13DFOWW8DKGSYZXD8W5JRDSHZ' where id=9; -update noar ti set v0='GI52HNS13DFOWW8DKGSYZXD8W5JRDSHZ' where id=9; -update noar tt set b2='P0HCZMA4VF' where id=9; -update noar ti set b2='P0HCZMA4VF' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 blob null, -b1 blob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='KZT4TITWSAVW' where id=1; -update noar ti set v0='KZT4TITWSAVW' where id=1; -update noar tt set b0='MS2OUXU7H' where id=1; -update noar ti set b0='MS2OUXU7H' where id=1; -update noar tt set v0='RY' where id=1; -update noar ti set v0='RY' where id=1; -update noar tt set b1='BSHEN5MCKW9CQP29YR167VE7OUDS2A8' where id=1; -update noar ti set b1='BSHEN5MCKW9CQP29YR167VE7OUDS2A8' where id=1; -update noar tt set v0='CGPE5W5TTQ1EC76HOL6MUMFSVEOH1ZY' where id=1; -update noar ti set v0='CGPE5W5TTQ1EC76HOL6MUMFSVEOH1ZY' where id=1; -update noar tt set b2='6PJPF2HUYQNROCDVBG885HGVZAA1' where id=1; -update noar ti set b2='6PJPF2HUYQNROCDVBG885HGVZAA1' where id=1; -update noar tt set v0='19A8GWJU54GNZ4UPXPEV15RAOXN9TB' where id=2; -update noar ti set v0='19A8GWJU54GNZ4UPXPEV15RAOXN9TB' where id=2; -update noar tt set b0='YIKOB' where id=2; -update noar ti set b0='YIKOB' where id=2; -update noar tt set v0='F7AZ48ZE2R07' where id=2; -update noar ti set v0='F7AZ48ZE2R07' where id=2; -update noar tt set b1='HVFXLESGBGUUCNI2O' where id=2; -update noar ti set b1='HVFXLESGBGUUCNI2O' where id=2; -update noar tt set v0='E' where id=2; -update noar ti set v0='E' where id=2; -update noar tt set b2='32NVYGC7UFWUF' where id=2; -update noar ti set b2='32NVYGC7UFWUF' where id=2; -update noar tt set v0='OAWFILZI2' where id=3; -update noar ti set v0='OAWFILZI2' where id=3; -update noar tt set b0='F5MGCCZC3QRC0G7O7DXNV5' where id=3; -update noar ti set b0='F5MGCCZC3QRC0G7O7DXNV5' where id=3; -update noar tt set v0='S4GGFIZV' where id=3; -update noar ti set v0='S4GGFIZV' where id=3; -update noar tt set b1='A05BY29833UWJI' where id=3; -update noar ti set b1='A05BY29833UWJI' where id=3; -update noar tt set v0='A2U5BBM5CO530IDG0L' where id=3; -update noar ti set v0='A2U5BBM5CO530IDG0L' where id=3; -update noar tt set b2='7YUCW7R' where id=3; -update noar ti set b2='7YUCW7R' where id=3; -update noar tt set v0='VUT491Y62VENDE771WY7NLRRNLHAVSR' where id=4; -update noar ti set v0='VUT491Y62VENDE771WY7NLRRNLHAVSR' where id=4; -update noar tt set b0='4DWXPSGTTRKGHF9BFBP' where id=4; -update noar ti set b0='4DWXPSGTTRKGHF9BFBP' where id=4; -update noar tt set v0='ASBOMH781KLEZG0' where id=4; -update noar ti set v0='ASBOMH781KLEZG0' where id=4; -update noar tt set b1='OGREEJZ8RQ09U5JUZ7' where id=4; -update noar ti set b1='OGREEJZ8RQ09U5JUZ7' where id=4; -update noar tt set v0='A7AGXSU' where id=4; -update noar ti set v0='A7AGXSU' where id=4; -update noar tt set b2='LCK4BHD71I43QITRTL8J2RPF7NW' where id=4; -update noar ti set b2='LCK4BHD71I43QITRTL8J2RPF7NW' where id=4; -update noar tt set v0='JAAU91Z614BWAJH62SJ71ACXIWV7963Z' where id=5; -update noar ti set v0='JAAU91Z614BWAJH62SJ71ACXIWV7963Z' where id=5; -update noar tt set b0='LWF1RT6HAO61NQLSX4Q' where id=5; -update noar ti set b0='LWF1RT6HAO61NQLSX4Q' where id=5; -update noar tt set v0='7U7YXPLPZTU0YWTF62GTY' where id=5; -update noar ti set v0='7U7YXPLPZTU0YWTF62GTY' where id=5; -update noar tt set b1='3COYWTUBNXWU7X7TWVK9VMAU1YFB' where id=5; -update noar ti set b1='3COYWTUBNXWU7X7TWVK9VMAU1YFB' where id=5; -update noar tt set v0='6QPMHGUWTKBKH4AN5NOID9F' where id=5; -update noar ti set v0='6QPMHGUWTKBKH4AN5NOID9F' where id=5; -update noar tt set b2='EC9BO0421XEECDWTKT0' where id=5; -update noar ti set b2='EC9BO0421XEECDWTKT0' where id=5; -update noar tt set v0='B16EWXV2LGK4VC7MR' where id=6; -update noar ti set v0='B16EWXV2LGK4VC7MR' where id=6; -update noar tt set b0='21YMLLW5I0751DD0QL8LF2TNZTF5' where id=6; -update noar ti set b0='21YMLLW5I0751DD0QL8LF2TNZTF5' where id=6; -update noar tt set v0='9Y80NY2KR11EOZQVYZEB' where id=6; -update noar ti set v0='9Y80NY2KR11EOZQVYZEB' where id=6; -update noar tt set b1='EDL7NLGZBGIODSCYAC3RLC5407FC' where id=6; -update noar ti set b1='EDL7NLGZBGIODSCYAC3RLC5407FC' where id=6; -update noar tt set v0='S' where id=6; -update noar ti set v0='S' where id=6; -update noar tt set b2='F0D2IUT8' where id=6; -update noar ti set b2='F0D2IUT8' where id=6; -update noar tt set v0='93LTA852LOLF0IESR722O61Y2VK' where id=7; -update noar ti set v0='93LTA852LOLF0IESR722O61Y2VK' where id=7; -update noar tt set b0='OVK9LD' where id=7; -update noar ti set b0='OVK9LD' where id=7; -update noar tt set v0='N4AFLHOQ4FHMG1NK6I9K8XD1816O9MJ0' where id=7; -update noar ti set v0='N4AFLHOQ4FHMG1NK6I9K8XD1816O9MJ0' where id=7; -update noar tt set b1='BPGSSJF0S7L3QETMS2QPI1QJSV8UCXSI' where id=7; -update noar ti set b1='BPGSSJF0S7L3QETMS2QPI1QJSV8UCXSI' where id=7; -update noar tt set v0='4GLFBFZ0GPO0GNAZ5K7UX' where id=7; -update noar ti set v0='4GLFBFZ0GPO0GNAZ5K7UX' where id=7; -update noar tt set b2='WVWQ2LLDE3VBP9P' where id=7; -update noar ti set b2='WVWQ2LLDE3VBP9P' where id=7; -update noar tt set v0='NQ6' where id=8; -update noar ti set v0='NQ6' where id=8; -update noar tt set b0='BOXGC4GCCCRQM6T0LDBPUJF75' where id=8; -update noar ti set b0='BOXGC4GCCCRQM6T0LDBPUJF75' where id=8; -update noar tt set v0='7QLX07FRSBDU38ORE' where id=8; -update noar ti set v0='7QLX07FRSBDU38ORE' where id=8; -update noar tt set b1='1ILLBG9' where id=8; -update noar ti set b1='1ILLBG9' where id=8; -update noar tt set v0='FDGID' where id=8; -update noar ti set v0='FDGID' where id=8; -update noar tt set b2='87ZTUHZWGN0CX0YNEOFHO8IXL' where id=8; -update noar ti set b2='87ZTUHZWGN0CX0YNEOFHO8IXL' where id=8; -update noar tt set v0='NKZR2PECZ' where id=9; -update noar ti set v0='NKZR2PECZ' where id=9; -update noar tt set b0='484DD78SBLNA35RJQBLVGQCVA1QL' where id=9; -update noar ti set b0='484DD78SBLNA35RJQBLVGQCVA1QL' where id=9; -update noar tt set v0='18X4UT9C0J' where id=9; -update noar ti set v0='18X4UT9C0J' where id=9; -update noar tt set b1='E3AYHM3R9W9OKRLVKDRVAGAXA8I' where id=9; -update noar ti set b1='E3AYHM3R9W9OKRLVKDRVAGAXA8I' where id=9; -update noar tt set v0='8N5JKPFXKDYCYKUCCOC' where id=9; -update noar ti set v0='8N5JKPFXKDYCYKUCCOC' where id=9; -update noar tt set b2='SCY40ATF' where id=9; -update noar ti set b2='SCY40ATF' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 blob null, -b1 blob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='4VBEPI09G8SPPCW5FXZHBLP' where id=1; -update noar ti set v0='4VBEPI09G8SPPCW5FXZHBLP' where id=1; -update noar tt set b0='381N4RLRMC0D' where id=1; -update noar ti set b0='381N4RLRMC0D' where id=1; -update noar tt set v0='DHJ7C' where id=1; -update noar ti set v0='DHJ7C' where id=1; -update noar tt set b1='LU07O32FRLKX9HOGTN3C2O' where id=1; -update noar ti set b1='LU07O32FRLKX9HOGTN3C2O' where id=1; -update noar tt set v0='I58R' where id=1; -update noar ti set v0='I58R' where id=1; -update noar tt set b2='H12L' where id=1; -update noar ti set b2='H12L' where id=1; -update noar tt set v0='S4E0LXUEP4TR7' where id=2; -update noar ti set v0='S4E0LXUEP4TR7' where id=2; -update noar tt set b0='LD' where id=2; -update noar ti set b0='LD' where id=2; -update noar tt set v0='13JTXWVY' where id=2; -update noar ti set v0='13JTXWVY' where id=2; -update noar tt set b1='264Z2OB6' where id=2; -update noar ti set b1='264Z2OB6' where id=2; -update noar tt set v0='7GSMC2W1SF05' where id=2; -update noar ti set v0='7GSMC2W1SF05' where id=2; -update noar tt set b2='P2KSDF6IVFF4VJAHV33OOHO8FUXWFV' where id=2; -update noar ti set b2='P2KSDF6IVFF4VJAHV33OOHO8FUXWFV' where id=2; -update noar tt set v0='MQQQQ' where id=3; -update noar ti set v0='MQQQQ' where id=3; -update noar tt set b0='VARZC6C3Y' where id=3; -update noar ti set b0='VARZC6C3Y' where id=3; -update noar tt set v0='94ZHFDNQC5W09VUX8' where id=3; -update noar ti set v0='94ZHFDNQC5W09VUX8' where id=3; -update noar tt set b1='SZFP38YO' where id=3; -update noar ti set b1='SZFP38YO' where id=3; -update noar tt set v0='B3MHLTZF4D4W5M3ZBI47RIL' where id=3; -update noar ti set v0='B3MHLTZF4D4W5M3ZBI47RIL' where id=3; -update noar tt set b2='94CW2MS7OBE27RATU2K' where id=3; -update noar ti set b2='94CW2MS7OBE27RATU2K' where id=3; -update noar tt set v0='3VGGAK2BTYF' where id=4; -update noar ti set v0='3VGGAK2BTYF' where id=4; -update noar tt set b0='TBWDT3KUPZ9EHA0Y3YK2BRL3B149F' where id=4; -update noar ti set b0='TBWDT3KUPZ9EHA0Y3YK2BRL3B149F' where id=4; -update noar tt set v0='JPUAMYXPU' where id=4; -update noar ti set v0='JPUAMYXPU' where id=4; -update noar tt set b1='M5186X143OMHX2Q98B' where id=4; -update noar ti set b1='M5186X143OMHX2Q98B' where id=4; -update noar tt set v0='ZFDZ7' where id=4; -update noar ti set v0='ZFDZ7' where id=4; -update noar tt set b2='NCCKPHFEGEPORMH4V' where id=4; -update noar ti set b2='NCCKPHFEGEPORMH4V' where id=4; -update noar tt set v0='GHQAPQOX6JEV40OEJRPUP' where id=5; -update noar ti set v0='GHQAPQOX6JEV40OEJRPUP' where id=5; -update noar tt set b0='SMGA31AX' where id=5; -update noar ti set b0='SMGA31AX' where id=5; -update noar tt set v0='3A15NHFIOVRW99JYUA7JQ9Y15XGX9LA' where id=5; -update noar ti set v0='3A15NHFIOVRW99JYUA7JQ9Y15XGX9LA' where id=5; -update noar tt set b1='BA' where id=5; -update noar ti set b1='BA' where id=5; -update noar tt set v0='HSCKK0YJLWM2E1ZFYWEK7AR75FKNXHB' where id=5; -update noar ti set v0='HSCKK0YJLWM2E1ZFYWEK7AR75FKNXHB' where id=5; -update noar tt set b2='4IE6YTZW3CTEGXJIEYQALLFLEM0B78Q' where id=5; -update noar ti set b2='4IE6YTZW3CTEGXJIEYQALLFLEM0B78Q' where id=5; -update noar tt set v0='CBCSJHTN2BBEAJ9V4QEIYTZ' where id=6; -update noar ti set v0='CBCSJHTN2BBEAJ9V4QEIYTZ' where id=6; -update noar tt set b0='RKUVTNPX4GR1GAX8BS2IT93U3' where id=6; -update noar ti set b0='RKUVTNPX4GR1GAX8BS2IT93U3' where id=6; -update noar tt set v0='UQXMATR53GSSZMHQKTE4M4N3626E6ZU' where id=6; -update noar ti set v0='UQXMATR53GSSZMHQKTE4M4N3626E6ZU' where id=6; -update noar tt set b1='ZW' where id=6; -update noar ti set b1='ZW' where id=6; -update noar tt set v0='6J9B03ZBROAKM4HQQQ959FGUNOM7V' where id=6; -update noar ti set v0='6J9B03ZBROAKM4HQQQ959FGUNOM7V' where id=6; -update noar tt set b2='07RU3USF09KPQZ7' where id=6; -update noar ti set b2='07RU3USF09KPQZ7' where id=6; -update noar tt set v0='RLL8IP6UB' where id=7; -update noar ti set v0='RLL8IP6UB' where id=7; -update noar tt set b0='P3DQGX3L' where id=7; -update noar ti set b0='P3DQGX3L' where id=7; -update noar tt set v0='95M3L' where id=7; -update noar ti set v0='95M3L' where id=7; -update noar tt set b1='VDCAY' where id=7; -update noar ti set b1='VDCAY' where id=7; -update noar tt set v0='7WR5VZBXN0SVY0DD7UXTPQYHKDC2W' where id=7; -update noar ti set v0='7WR5VZBXN0SVY0DD7UXTPQYHKDC2W' where id=7; -update noar tt set b2='X51HMOWCX' where id=7; -update noar ti set b2='X51HMOWCX' where id=7; -update noar tt set v0='VPTFJZK29D3MMNMD77E0UT0J' where id=8; -update noar ti set v0='VPTFJZK29D3MMNMD77E0UT0J' where id=8; -update noar tt set b0='HB' where id=8; -update noar ti set b0='HB' where id=8; -update noar tt set v0='N3HTNHHNY9BUUM5QQ3MTLMBJSDH' where id=8; -update noar ti set v0='N3HTNHHNY9BUUM5QQ3MTLMBJSDH' where id=8; -update noar tt set b1='MWHWBCVEFHQVYVQBBWF8XZCC3' where id=8; -update noar ti set b1='MWHWBCVEFHQVYVQBBWF8XZCC3' where id=8; -update noar tt set v0='TZO' where id=8; -update noar ti set v0='TZO' where id=8; -update noar tt set b2='6LK6355' where id=8; -update noar ti set b2='6LK6355' where id=8; -update noar tt set v0='D55XI3MV' where id=9; -update noar ti set v0='D55XI3MV' where id=9; -update noar tt set b0='3XNAX8XQ' where id=9; -update noar ti set b0='3XNAX8XQ' where id=9; -update noar tt set v0='623IIHDLWODSZUZ70NCJRD1SW6WD' where id=9; -update noar ti set v0='623IIHDLWODSZUZ70NCJRD1SW6WD' where id=9; -update noar tt set b1='C8MXNIQUVCCV2USUQDALLU7ED0YYMAW' where id=9; -update noar ti set b1='C8MXNIQUVCCV2USUQDALLU7ED0YYMAW' where id=9; -update noar tt set v0='8K8' where id=9; -update noar ti set v0='8K8' where id=9; -update noar tt set b2='HM48O4S280' where id=9; -update noar ti set b2='HM48O4S280' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 blob not null, -b1 blob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='B2JJ0IGT466DD342NIHJ400FPS8S' where id=1; -update noar ti set v0='B2JJ0IGT466DD342NIHJ400FPS8S' where id=1; -update noar tt set b0='FO755' where id=1; -update noar ti set b0='FO755' where id=1; -update noar tt set v0='89' where id=1; -update noar ti set v0='89' where id=1; -update noar tt set b1='7946EO9X7PL581IWEZ3QTRXSK6A11' where id=1; -update noar ti set b1='7946EO9X7PL581IWEZ3QTRXSK6A11' where id=1; -update noar tt set v0='COQN6PNGXOQXES6' where id=1; -update noar ti set v0='COQN6PNGXOQXES6' where id=1; -update noar tt set b2='XG9D3WDSSW5Z21EUEQEJ892RQ' where id=1; -update noar ti set b2='XG9D3WDSSW5Z21EUEQEJ892RQ' where id=1; -update noar tt set v0='V' where id=2; -update noar ti set v0='V' where id=2; -update noar tt set b0='NIN' where id=2; -update noar ti set b0='NIN' where id=2; -update noar tt set v0='Z5ZTHUP' where id=2; -update noar ti set v0='Z5ZTHUP' where id=2; -update noar tt set b1='SHSQU3S' where id=2; -update noar ti set b1='SHSQU3S' where id=2; -update noar tt set v0='ZSTBY' where id=2; -update noar ti set v0='ZSTBY' where id=2; -update noar tt set b2='DNAHKYH' where id=2; -update noar ti set b2='DNAHKYH' where id=2; -update noar tt set v0='1E' where id=3; -update noar ti set v0='1E' where id=3; -update noar tt set b0='9NWJEJLUQ3KAVOGLK' where id=3; -update noar ti set b0='9NWJEJLUQ3KAVOGLK' where id=3; -update noar tt set v0='NOQSB3S67WPMDZM6A036SMYSGU80B' where id=3; -update noar ti set v0='NOQSB3S67WPMDZM6A036SMYSGU80B' where id=3; -update noar tt set b1='8I7YP47E3CQBFANVYEKZOZLJP8' where id=3; -update noar ti set b1='8I7YP47E3CQBFANVYEKZOZLJP8' where id=3; -update noar tt set v0='LZ9ETUNO1IWKIAK0ZRDAB3O96A' where id=3; -update noar ti set v0='LZ9ETUNO1IWKIAK0ZRDAB3O96A' where id=3; -update noar tt set b2='64I3VO6HNCPPA0DE1PX5S' where id=3; -update noar ti set b2='64I3VO6HNCPPA0DE1PX5S' where id=3; -update noar tt set v0='PC' where id=4; -update noar ti set v0='PC' where id=4; -update noar tt set b0='JOCZYPPDR7NFLDAT5IG1' where id=4; -update noar ti set b0='JOCZYPPDR7NFLDAT5IG1' where id=4; -update noar tt set v0='URXU7X4PYID73D97NZ50T86CX4OPJ4' where id=4; -update noar ti set v0='URXU7X4PYID73D97NZ50T86CX4OPJ4' where id=4; -update noar tt set b1='0S7UQTKIGW' where id=4; -update noar ti set b1='0S7UQTKIGW' where id=4; -update noar tt set v0='O5F8E7YXH2D6063EZ20WUQCN2DW' where id=4; -update noar ti set v0='O5F8E7YXH2D6063EZ20WUQCN2DW' where id=4; -update noar tt set b2='K' where id=4; -update noar ti set b2='K' where id=4; -update noar tt set v0='7YHFQU3I4EH17J' where id=5; -update noar ti set v0='7YHFQU3I4EH17J' where id=5; -update noar tt set b0='JAALZOAOZI17GTLPFQTCWR' where id=5; -update noar ti set b0='JAALZOAOZI17GTLPFQTCWR' where id=5; -update noar tt set v0='4U8709VO9FIYKA7T9Z99PS59' where id=5; -update noar ti set v0='4U8709VO9FIYKA7T9Z99PS59' where id=5; -update noar tt set b1='UXW7' where id=5; -update noar ti set b1='UXW7' where id=5; -update noar tt set v0='YVFKHHOIEIMABGM4WZRX1O9' where id=5; -update noar ti set v0='YVFKHHOIEIMABGM4WZRX1O9' where id=5; -update noar tt set b2='3GCA4MWQN128COX' where id=5; -update noar ti set b2='3GCA4MWQN128COX' where id=5; -update noar tt set v0='ZYR9GELTCZP2NWRW5QOTLLS3ZF' where id=6; -update noar ti set v0='ZYR9GELTCZP2NWRW5QOTLLS3ZF' where id=6; -update noar tt set b0='BTMAHZR2EK3MAIUXOX8E7EG' where id=6; -update noar ti set b0='BTMAHZR2EK3MAIUXOX8E7EG' where id=6; -update noar tt set v0='UBVGUXSKIE68E1CG7WOKZRJ1QSBPA252' where id=6; -update noar ti set v0='UBVGUXSKIE68E1CG7WOKZRJ1QSBPA252' where id=6; -update noar tt set b1='KQ7OEZ03N8YPTLINJ7' where id=6; -update noar ti set b1='KQ7OEZ03N8YPTLINJ7' where id=6; -update noar tt set v0='0XMSEDDO7HX8GH1QM6117FJ6YK8VTM' where id=6; -update noar ti set v0='0XMSEDDO7HX8GH1QM6117FJ6YK8VTM' where id=6; -update noar tt set b2='RWAT2ATCZWTNLY9A91RK79C' where id=6; -update noar ti set b2='RWAT2ATCZWTNLY9A91RK79C' where id=6; -update noar tt set v0='4A5G3ZF7L9RXF' where id=7; -update noar ti set v0='4A5G3ZF7L9RXF' where id=7; -update noar tt set b0='FDVTNNXXLTQB3HKOPMA34SFHVRGC' where id=7; -update noar ti set b0='FDVTNNXXLTQB3HKOPMA34SFHVRGC' where id=7; -update noar tt set v0='O545BWFODY258MOQWZ26KP8Y4QPYY7B' where id=7; -update noar ti set v0='O545BWFODY258MOQWZ26KP8Y4QPYY7B' where id=7; -update noar tt set b1='60YVF7NMPB' where id=7; -update noar ti set b1='60YVF7NMPB' where id=7; -update noar tt set v0='OHTHMKDOEGGX9M7VLR64FK4M2DUB' where id=7; -update noar ti set v0='OHTHMKDOEGGX9M7VLR64FK4M2DUB' where id=7; -update noar tt set b2='NLDSV2MQM36K02HEYDSD' where id=7; -update noar ti set b2='NLDSV2MQM36K02HEYDSD' where id=7; -update noar tt set v0='NSVK00ZZHXTIDSF1' where id=8; -update noar ti set v0='NSVK00ZZHXTIDSF1' where id=8; -update noar tt set b0='OZ59JEWF82GC2DJ1' where id=8; -update noar ti set b0='OZ59JEWF82GC2DJ1' where id=8; -update noar tt set v0='6M8' where id=8; -update noar ti set v0='6M8' where id=8; -update noar tt set b1='TU5AVI81UW' where id=8; -update noar ti set b1='TU5AVI81UW' where id=8; -update noar tt set v0='5WHYY1VSTGCA62RV0' where id=8; -update noar ti set v0='5WHYY1VSTGCA62RV0' where id=8; -update noar tt set b2='9PJX6OWQDJLM' where id=8; -update noar ti set b2='9PJX6OWQDJLM' where id=8; -update noar tt set v0='VZ' where id=9; -update noar ti set v0='VZ' where id=9; -update noar tt set b0='P0' where id=9; -update noar ti set b0='P0' where id=9; -update noar tt set v0='L71F' where id=9; -update noar ti set v0='L71F' where id=9; -update noar tt set b1='7GTH98IMQ0U3ARQCD1XHK55RU' where id=9; -update noar ti set b1='7GTH98IMQ0U3ARQCD1XHK55RU' where id=9; -update noar tt set v0='VVQJPK9ZTNHS64JB3ILOAQP' where id=9; -update noar ti set v0='VVQJPK9ZTNHS64JB3ILOAQP' where id=9; -update noar tt set b2='EW05R5GNAKQQNJRGVUY38Y7' where id=9; -update noar ti set b2='EW05R5GNAKQQNJRGVUY38Y7' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 blob not null, -b1 blob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='SA3X4JGOB68SJY9L5HH' where id=1; -update noar ti set v0='SA3X4JGOB68SJY9L5HH' where id=1; -update noar tt set b0='MDBK6YRQI3R883' where id=1; -update noar ti set b0='MDBK6YRQI3R883' where id=1; -update noar tt set v0='QRY6Y5CO8TA' where id=1; -update noar ti set v0='QRY6Y5CO8TA' where id=1; -update noar tt set b1='QLAZUHHET2' where id=1; -update noar ti set b1='QLAZUHHET2' where id=1; -update noar tt set v0='SZ5M12GN5B6DGH3329T884PHFYEMUGH' where id=1; -update noar ti set v0='SZ5M12GN5B6DGH3329T884PHFYEMUGH' where id=1; -update noar tt set b2='HQMX8QA' where id=1; -update noar ti set b2='HQMX8QA' where id=1; -update noar tt set v0='MA7W92O6V4W3KB9JMJVU' where id=2; -update noar ti set v0='MA7W92O6V4W3KB9JMJVU' where id=2; -update noar tt set b0='6RWRVGTSP2SXMPRQMV608NV' where id=2; -update noar ti set b0='6RWRVGTSP2SXMPRQMV608NV' where id=2; -update noar tt set v0='7KHCP15BW5NCCG' where id=2; -update noar ti set v0='7KHCP15BW5NCCG' where id=2; -update noar tt set b1='2H77WGLS' where id=2; -update noar ti set b1='2H77WGLS' where id=2; -update noar tt set v0='6Z2Q2ZVR8G2T9HW0OA0' where id=2; -update noar ti set v0='6Z2Q2ZVR8G2T9HW0OA0' where id=2; -update noar tt set b2='9KM7P452BH00P4S6J' where id=2; -update noar ti set b2='9KM7P452BH00P4S6J' where id=2; -update noar tt set v0='OI' where id=3; -update noar ti set v0='OI' where id=3; -update noar tt set b0='HKHGIYJ9D8OMDHT' where id=3; -update noar ti set b0='HKHGIYJ9D8OMDHT' where id=3; -update noar tt set v0='KXENQHSIISGF2UVUAA1C' where id=3; -update noar ti set v0='KXENQHSIISGF2UVUAA1C' where id=3; -update noar tt set b1='RFEAWVGCKFFWT2FD5' where id=3; -update noar ti set b1='RFEAWVGCKFFWT2FD5' where id=3; -update noar tt set v0='WGOPQYEVF59CN4AC4FYUPH3N' where id=3; -update noar ti set v0='WGOPQYEVF59CN4AC4FYUPH3N' where id=3; -update noar tt set b2='IC9KI8QNHH4YE8DJOW8RFVH' where id=3; -update noar ti set b2='IC9KI8QNHH4YE8DJOW8RFVH' where id=3; -update noar tt set v0='L' where id=4; -update noar ti set v0='L' where id=4; -update noar tt set b0='SZGCK' where id=4; -update noar ti set b0='SZGCK' where id=4; -update noar tt set v0='U3UI6YWDMOF55ONPCYL' where id=4; -update noar ti set v0='U3UI6YWDMOF55ONPCYL' where id=4; -update noar tt set b1='H332P8KJISM69S3VHN3Y' where id=4; -update noar ti set b1='H332P8KJISM69S3VHN3Y' where id=4; -update noar tt set v0='TDEDM0BJUP0VDDQZIU009AZ2CNZDUB' where id=4; -update noar ti set v0='TDEDM0BJUP0VDDQZIU009AZ2CNZDUB' where id=4; -update noar tt set b2='AGF1441A4990UCXPN' where id=4; -update noar ti set b2='AGF1441A4990UCXPN' where id=4; -update noar tt set v0='GIRGT90YQ1VM9JJ3PGCZHKPSN' where id=5; -update noar ti set v0='GIRGT90YQ1VM9JJ3PGCZHKPSN' where id=5; -update noar tt set b0='CDDA4VW6N38CNX2V3MD' where id=5; -update noar ti set b0='CDDA4VW6N38CNX2V3MD' where id=5; -update noar tt set v0='FKGNWPUYDNM5YQPHWD74MCI' where id=5; -update noar ti set v0='FKGNWPUYDNM5YQPHWD74MCI' where id=5; -update noar tt set b1='5ZMOIGPW6JGFRYHEFZVNG9B77QTFZ' where id=5; -update noar ti set b1='5ZMOIGPW6JGFRYHEFZVNG9B77QTFZ' where id=5; -update noar tt set v0='PD0H55' where id=5; -update noar ti set v0='PD0H55' where id=5; -update noar tt set b2='OTW' where id=5; -update noar ti set b2='OTW' where id=5; -update noar tt set v0='OIKN0KUSI7XLZM7M' where id=6; -update noar ti set v0='OIKN0KUSI7XLZM7M' where id=6; -update noar tt set b0='LGG9X8' where id=6; -update noar ti set b0='LGG9X8' where id=6; -update noar tt set v0='JIF0M0ODF9FDON4SE0GRI4E' where id=6; -update noar ti set v0='JIF0M0ODF9FDON4SE0GRI4E' where id=6; -update noar tt set b1='7JW506T2RLP7ITWGWS4LC300C' where id=6; -update noar ti set b1='7JW506T2RLP7ITWGWS4LC300C' where id=6; -update noar tt set v0='8JYGGZ1OXWZWU' where id=6; -update noar ti set v0='8JYGGZ1OXWZWU' where id=6; -update noar tt set b2='XOUNAM288C3N7GTYIG494KGPZJ4O' where id=6; -update noar ti set b2='XOUNAM288C3N7GTYIG494KGPZJ4O' where id=6; -update noar tt set v0='ULCNOU1BOU6L900G15Q3W' where id=7; -update noar ti set v0='ULCNOU1BOU6L900G15Q3W' where id=7; -update noar tt set b0='WRSR0UPPI' where id=7; -update noar ti set b0='WRSR0UPPI' where id=7; -update noar tt set v0='HS6S2L897G2' where id=7; -update noar ti set v0='HS6S2L897G2' where id=7; -update noar tt set b1='469U152024V' where id=7; -update noar ti set b1='469U152024V' where id=7; -update noar tt set v0='I775LNVNL22PT' where id=7; -update noar ti set v0='I775LNVNL22PT' where id=7; -update noar tt set b2='RYNAD77YXGVFD6G' where id=7; -update noar ti set b2='RYNAD77YXGVFD6G' where id=7; -update noar tt set v0='ZVBNJMMKJY4OTM' where id=8; -update noar ti set v0='ZVBNJMMKJY4OTM' where id=8; -update noar tt set b0='4FR8UG043GI5J29TZFM5XI4QFRO0DG2' where id=8; -update noar ti set b0='4FR8UG043GI5J29TZFM5XI4QFRO0DG2' where id=8; -update noar tt set v0='LOV9' where id=8; -update noar ti set v0='LOV9' where id=8; -update noar tt set b1='9TXUMOBU' where id=8; -update noar ti set b1='9TXUMOBU' where id=8; -update noar tt set v0='U8A3Z6S9LPOG5ROV9RS2' where id=8; -update noar ti set v0='U8A3Z6S9LPOG5ROV9RS2' where id=8; -update noar tt set b2='RDT9OVGBGGT8YMKR9XKKD' where id=8; -update noar ti set b2='RDT9OVGBGGT8YMKR9XKKD' where id=8; -update noar tt set v0='T1E45YGYID0C' where id=9; -update noar ti set v0='T1E45YGYID0C' where id=9; -update noar tt set b0='51G51Z38LETUJVGQ4GTB884G5' where id=9; -update noar ti set b0='51G51Z38LETUJVGQ4GTB884G5' where id=9; -update noar tt set v0='N5PR7Y6CEOXCAHZ68XSRFPGR76' where id=9; -update noar ti set v0='N5PR7Y6CEOXCAHZ68XSRFPGR76' where id=9; -update noar tt set b1='59WZ35V8VSGNBMJPTXS0YMD0Z2XUME' where id=9; -update noar ti set b1='59WZ35V8VSGNBMJPTXS0YMD0Z2XUME' where id=9; -update noar tt set v0='OSCI2H1G2BECV97JMQIG2SE88LW89T4M' where id=9; -update noar ti set v0='OSCI2H1G2BECV97JMQIG2SE88LW89T4M' where id=9; -update noar tt set b2='J1' where id=9; -update noar ti set b2='J1' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 blob null, -b1 blob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='XZSOYQBUV8XCR7DD7S' where id=1; -update noar ti set v0='XZSOYQBUV8XCR7DD7S' where id=1; -update noar tt set b0='XM5A45SR6JKDGOQ7NWLYGXM4BT7WQ5' where id=1; -update noar ti set b0='XM5A45SR6JKDGOQ7NWLYGXM4BT7WQ5' where id=1; -update noar tt set v0='74AV89LKECW3' where id=1; -update noar ti set v0='74AV89LKECW3' where id=1; -update noar tt set b1='UEURZIUTR' where id=1; -update noar ti set b1='UEURZIUTR' where id=1; -update noar tt set v0='35JKMMRB7230OXVD5KDXBLYYSGNP5' where id=1; -update noar ti set v0='35JKMMRB7230OXVD5KDXBLYYSGNP5' where id=1; -update noar tt set b2='KY83QPADSIYWXPL0D5DBHUMH4L4O4' where id=1; -update noar ti set b2='KY83QPADSIYWXPL0D5DBHUMH4L4O4' where id=1; -update noar tt set v0='AEHZWNJ3L' where id=2; -update noar ti set v0='AEHZWNJ3L' where id=2; -update noar tt set b0='BIJ' where id=2; -update noar ti set b0='BIJ' where id=2; -update noar tt set v0='6' where id=2; -update noar ti set v0='6' where id=2; -update noar tt set b1='EQRCHAIQKLLTW3M07DOCFXK1O' where id=2; -update noar ti set b1='EQRCHAIQKLLTW3M07DOCFXK1O' where id=2; -update noar tt set v0='1K' where id=2; -update noar ti set v0='1K' where id=2; -update noar tt set b2='6S2GLXJSGK8' where id=2; -update noar ti set b2='6S2GLXJSGK8' where id=2; -update noar tt set v0='LYMQRDOJ229DZ55YCC9CCGVC' where id=3; -update noar ti set v0='LYMQRDOJ229DZ55YCC9CCGVC' where id=3; -update noar tt set b0='YVX5GXUVV8BGAZ8JSN8S6QD2L519' where id=3; -update noar ti set b0='YVX5GXUVV8BGAZ8JSN8S6QD2L519' where id=3; -update noar tt set v0='46R8WYY8LMLFFF' where id=3; -update noar ti set v0='46R8WYY8LMLFFF' where id=3; -update noar tt set b1='3Z6FBHA2LF8QK8N7XOLTBKZ6P' where id=3; -update noar ti set b1='3Z6FBHA2LF8QK8N7XOLTBKZ6P' where id=3; -update noar tt set v0='O9Q6MNEL7JH8Y3ND9SJYP2ASHXT7BVZ' where id=3; -update noar ti set v0='O9Q6MNEL7JH8Y3ND9SJYP2ASHXT7BVZ' where id=3; -update noar tt set b2='8XV0K6BP' where id=3; -update noar ti set b2='8XV0K6BP' where id=3; -update noar tt set v0='67' where id=4; -update noar ti set v0='67' where id=4; -update noar tt set b0='EZYTLWP8JKROGYM4TYP' where id=4; -update noar ti set b0='EZYTLWP8JKROGYM4TYP' where id=4; -update noar tt set v0='OWYZHKL4RS79SSXKNOTT7G6T4B029' where id=4; -update noar ti set v0='OWYZHKL4RS79SSXKNOTT7G6T4B029' where id=4; -update noar tt set b1='AXCJMJ9I9QAANRQ' where id=4; -update noar ti set b1='AXCJMJ9I9QAANRQ' where id=4; -update noar tt set v0='86ZYTIALIYTFWKL6KX' where id=4; -update noar ti set v0='86ZYTIALIYTFWKL6KX' where id=4; -update noar tt set b2='4' where id=4; -update noar ti set b2='4' where id=4; -update noar tt set v0='OLOJE8RCKL1OEJ' where id=5; -update noar ti set v0='OLOJE8RCKL1OEJ' where id=5; -update noar tt set b0='0ZTDBK1T3XMM' where id=5; -update noar ti set b0='0ZTDBK1T3XMM' where id=5; -update noar tt set v0='KHSIRMYH1FXRWTCWYYOR375U13N38QBL' where id=5; -update noar ti set v0='KHSIRMYH1FXRWTCWYYOR375U13N38QBL' where id=5; -update noar tt set b1='GNG2TMEPDG7847VW' where id=5; -update noar ti set b1='GNG2TMEPDG7847VW' where id=5; -update noar tt set v0='4Y79BZ6' where id=5; -update noar ti set v0='4Y79BZ6' where id=5; -update noar tt set b2='7RPOLXS4GFG8CEVYAD7LEE0FCDZHSNY' where id=5; -update noar ti set b2='7RPOLXS4GFG8CEVYAD7LEE0FCDZHSNY' where id=5; -update noar tt set v0='PMU7301VX' where id=6; -update noar ti set v0='PMU7301VX' where id=6; -update noar tt set b0='ZDNEEOJ9IUU49THGVGEJ8W' where id=6; -update noar ti set b0='ZDNEEOJ9IUU49THGVGEJ8W' where id=6; -update noar tt set v0='KZD' where id=6; -update noar ti set v0='KZD' where id=6; -update noar tt set b1='YWQI579QM13IYIJHQ1KOYHFK8RM9K' where id=6; -update noar ti set b1='YWQI579QM13IYIJHQ1KOYHFK8RM9K' where id=6; -update noar tt set v0='DE16UEYJBYCYQ0F' where id=6; -update noar ti set v0='DE16UEYJBYCYQ0F' where id=6; -update noar tt set b2='AYB1X13P5P397D' where id=6; -update noar ti set b2='AYB1X13P5P397D' where id=6; -update noar tt set v0='VP6I3BWBWZZ8FO0Z' where id=7; -update noar ti set v0='VP6I3BWBWZZ8FO0Z' where id=7; -update noar tt set b0='SWVIGSPVUE0WI82DDFQQ2F4YYAXCRE' where id=7; -update noar ti set b0='SWVIGSPVUE0WI82DDFQQ2F4YYAXCRE' where id=7; -update noar tt set v0='72231WR5LUPEOM7J9UWQKJ6' where id=7; -update noar ti set v0='72231WR5LUPEOM7J9UWQKJ6' where id=7; -update noar tt set b1='ZKLUL7PU16AT2FSY02VJ77UE1BLUTE3' where id=7; -update noar ti set b1='ZKLUL7PU16AT2FSY02VJ77UE1BLUTE3' where id=7; -update noar tt set v0='TQ68D6UR48TA' where id=7; -update noar ti set v0='TQ68D6UR48TA' where id=7; -update noar tt set b2='8K6VCI2ZHYEPGKBC84Q5LR1' where id=7; -update noar ti set b2='8K6VCI2ZHYEPGKBC84Q5LR1' where id=7; -update noar tt set v0='ERW2BHQPAV9UFD4ZNYRXHALG95H1YN' where id=8; -update noar ti set v0='ERW2BHQPAV9UFD4ZNYRXHALG95H1YN' where id=8; -update noar tt set b0='3JX94NKAISVA0W' where id=8; -update noar ti set b0='3JX94NKAISVA0W' where id=8; -update noar tt set v0='RJ4E0UWMPONKU0IHRLW79H7R0KPMZZOY' where id=8; -update noar ti set v0='RJ4E0UWMPONKU0IHRLW79H7R0KPMZZOY' where id=8; -update noar tt set b1='0QHFWBDNQZHKUIPJDHQOH8RV0IR6Y8VA' where id=8; -update noar ti set b1='0QHFWBDNQZHKUIPJDHQOH8RV0IR6Y8VA' where id=8; -update noar tt set v0='RSQNOGQGXU6J89TZEEJYRL4920A6ZJU1' where id=8; -update noar ti set v0='RSQNOGQGXU6J89TZEEJYRL4920A6ZJU1' where id=8; -update noar tt set b2='XCPLKDR5M7J0NYHBI6Z6' where id=8; -update noar ti set b2='XCPLKDR5M7J0NYHBI6Z6' where id=8; -update noar tt set v0='SKIHNALLGOL6K58E70G5SIA6HNEHW' where id=9; -update noar ti set v0='SKIHNALLGOL6K58E70G5SIA6HNEHW' where id=9; -update noar tt set b0='01CPNP6EORHNBG5VQA48KYXJXO2WJ' where id=9; -update noar ti set b0='01CPNP6EORHNBG5VQA48KYXJXO2WJ' where id=9; -update noar tt set v0='0XNX8NBSN' where id=9; -update noar ti set v0='0XNX8NBSN' where id=9; -update noar tt set b1='9HCNW4WI3GFHY0RHCA' where id=9; -update noar ti set b1='9HCNW4WI3GFHY0RHCA' where id=9; -update noar tt set v0='XBU93Q3RFISOBT3283Q9' where id=9; -update noar ti set v0='XBU93Q3RFISOBT3283Q9' where id=9; -update noar tt set b2='PGWTKEJI58S1X3GZL9QW' where id=9; -update noar ti set b2='PGWTKEJI58S1X3GZL9QW' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 blob null, -b1 blob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='5Z6RPD3X' where id=1; -update noar ti set v0='5Z6RPD3X' where id=1; -update noar tt set b0='UCT91WU' where id=1; -update noar ti set b0='UCT91WU' where id=1; -update noar tt set v0='77HADWM7P6HD2' where id=1; -update noar ti set v0='77HADWM7P6HD2' where id=1; -update noar tt set b1='TYYGFRN0NJWVOR1GXG59VGFST47PEL2J' where id=1; -update noar ti set b1='TYYGFRN0NJWVOR1GXG59VGFST47PEL2J' where id=1; -update noar tt set v0='N7HX0T9W61WDKUBJ7XXH2T8' where id=1; -update noar ti set v0='N7HX0T9W61WDKUBJ7XXH2T8' where id=1; -update noar tt set b2='C7P2IJCXUQ' where id=1; -update noar ti set b2='C7P2IJCXUQ' where id=1; -update noar tt set v0='1GUS2YRG' where id=2; -update noar ti set v0='1GUS2YRG' where id=2; -update noar tt set b0='T3JX3WRU3ZZ' where id=2; -update noar ti set b0='T3JX3WRU3ZZ' where id=2; -update noar tt set v0='1QHPG6' where id=2; -update noar ti set v0='1QHPG6' where id=2; -update noar tt set b1='QYET3NE' where id=2; -update noar ti set b1='QYET3NE' where id=2; -update noar tt set v0='FGB16UNM0EUVAVK0UANCROUTT4X' where id=2; -update noar ti set v0='FGB16UNM0EUVAVK0UANCROUTT4X' where id=2; -update noar tt set b2='L0N0DEAD' where id=2; -update noar ti set b2='L0N0DEAD' where id=2; -update noar tt set v0='RPJA1IVLHM3S0XFR9BOGFO' where id=3; -update noar ti set v0='RPJA1IVLHM3S0XFR9BOGFO' where id=3; -update noar tt set b0='W71K5VTHQAPL921M0ZF0CO23MCDMFXSU' where id=3; -update noar ti set b0='W71K5VTHQAPL921M0ZF0CO23MCDMFXSU' where id=3; -update noar tt set v0='EEOSSHLVQQ67BHT9H6BPMI7CLWXRTBYS' where id=3; -update noar ti set v0='EEOSSHLVQQ67BHT9H6BPMI7CLWXRTBYS' where id=3; -update noar tt set b1='8VYHSBMMEQM2Y' where id=3; -update noar ti set b1='8VYHSBMMEQM2Y' where id=3; -update noar tt set v0='33DIQ1PHA7JI38I4TTP6I1FUUNGQ' where id=3; -update noar ti set v0='33DIQ1PHA7JI38I4TTP6I1FUUNGQ' where id=3; -update noar tt set b2='AH1J86Q7HFPPTLFPVAR2TW8RJO' where id=3; -update noar ti set b2='AH1J86Q7HFPPTLFPVAR2TW8RJO' where id=3; -update noar tt set v0='V8DI4NXOZYJSKNY6ID6GWY00H5V851' where id=4; -update noar ti set v0='V8DI4NXOZYJSKNY6ID6GWY00H5V851' where id=4; -update noar tt set b0='BTM30K' where id=4; -update noar ti set b0='BTM30K' where id=4; -update noar tt set v0='6VL' where id=4; -update noar ti set v0='6VL' where id=4; -update noar tt set b1='DT4VOQ3Y' where id=4; -update noar ti set b1='DT4VOQ3Y' where id=4; -update noar tt set v0='HXNBMVA0' where id=4; -update noar ti set v0='HXNBMVA0' where id=4; -update noar tt set b2='488OR2H88P9WKDSJTJ3NN44XMD' where id=4; -update noar ti set b2='488OR2H88P9WKDSJTJ3NN44XMD' where id=4; -update noar tt set v0='49Y2C9C3FBN' where id=5; -update noar ti set v0='49Y2C9C3FBN' where id=5; -update noar tt set b0='2QLQPVAAIS3NXFEN2W9ELV4XW' where id=5; -update noar ti set b0='2QLQPVAAIS3NXFEN2W9ELV4XW' where id=5; -update noar tt set v0='XS54RZZBV0' where id=5; -update noar ti set v0='XS54RZZBV0' where id=5; -update noar tt set b1='S4A5X0EUT8ENTPUBKB5QP6LW8YOOFS' where id=5; -update noar ti set b1='S4A5X0EUT8ENTPUBKB5QP6LW8YOOFS' where id=5; -update noar tt set v0='ZNW2BYORH' where id=5; -update noar ti set v0='ZNW2BYORH' where id=5; -update noar tt set b2='6FW37Y57' where id=5; -update noar ti set b2='6FW37Y57' where id=5; -update noar tt set v0='9WNPHACK' where id=6; -update noar ti set v0='9WNPHACK' where id=6; -update noar tt set b0='ONDSRYWJL33TL6ZBI5UDCVXSRIJ7PYJ' where id=6; -update noar ti set b0='ONDSRYWJL33TL6ZBI5UDCVXSRIJ7PYJ' where id=6; -update noar tt set v0='4' where id=6; -update noar ti set v0='4' where id=6; -update noar tt set b1='QCHSP4DROBUU3JKEG1D59RZQFKDVM' where id=6; -update noar ti set b1='QCHSP4DROBUU3JKEG1D59RZQFKDVM' where id=6; -update noar tt set v0='P0HSXMTH763OZWWE3THANU4YMHSOC' where id=6; -update noar ti set v0='P0HSXMTH763OZWWE3THANU4YMHSOC' where id=6; -update noar tt set b2='MU9C' where id=6; -update noar ti set b2='MU9C' where id=6; -update noar tt set v0='2IDJ4YVYN71K2JCRIHFR' where id=7; -update noar ti set v0='2IDJ4YVYN71K2JCRIHFR' where id=7; -update noar tt set b0='085XPJMWG4EAVDICW3X2MV6' where id=7; -update noar ti set b0='085XPJMWG4EAVDICW3X2MV6' where id=7; -update noar tt set v0='I3G6' where id=7; -update noar ti set v0='I3G6' where id=7; -update noar tt set b1='03EV0G' where id=7; -update noar ti set b1='03EV0G' where id=7; -update noar tt set v0='ZRA' where id=7; -update noar ti set v0='ZRA' where id=7; -update noar tt set b2='1HO9ESSC7ZNQGMJS2WDUPQLXV' where id=7; -update noar ti set b2='1HO9ESSC7ZNQGMJS2WDUPQLXV' where id=7; -update noar tt set v0='BXCISN1XCRZPD47TEA7NG1Y1Q' where id=8; -update noar ti set v0='BXCISN1XCRZPD47TEA7NG1Y1Q' where id=8; -update noar tt set b0='KA0JJNF2GIK4N3RMMI' where id=8; -update noar ti set b0='KA0JJNF2GIK4N3RMMI' where id=8; -update noar tt set v0='5HJDWSFEXIA' where id=8; -update noar ti set v0='5HJDWSFEXIA' where id=8; -update noar tt set b1='Q2A1AF40HLUPBYF0DCJKNSC4' where id=8; -update noar ti set b1='Q2A1AF40HLUPBYF0DCJKNSC4' where id=8; -update noar tt set v0='UKT' where id=8; -update noar ti set v0='UKT' where id=8; -update noar tt set b2='O86UDDD7C7Z' where id=8; -update noar ti set b2='O86UDDD7C7Z' where id=8; -update noar tt set v0='L7TC' where id=9; -update noar ti set v0='L7TC' where id=9; -update noar tt set b0='3TD99CICLNR5YY2F7SE79REJSBJ6EQ' where id=9; -update noar ti set b0='3TD99CICLNR5YY2F7SE79REJSBJ6EQ' where id=9; -update noar tt set v0='RYM970UI38Z4PBQCDRLCLSXE14M0' where id=9; -update noar ti set v0='RYM970UI38Z4PBQCDRLCLSXE14M0' where id=9; -update noar tt set b1='65QVVVL6' where id=9; -update noar ti set b1='65QVVVL6' where id=9; -update noar tt set v0='MMVW0VMXH9C4EF8QZ' where id=9; -update noar ti set v0='MMVW0VMXH9C4EF8QZ' where id=9; -update noar tt set b2='OGXCDIENDG7HIS4V' where id=9; -update noar ti set b2='OGXCDIENDG7HIS4V' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 blob not null, -b1 blob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='MRFA4NQEG02TO3MG482KEWAX84CFXQ' where id=1; -update noar ti set v0='MRFA4NQEG02TO3MG482KEWAX84CFXQ' where id=1; -update noar tt set b0='60J3CU4GW0C2UXD6G1G' where id=1; -update noar ti set b0='60J3CU4GW0C2UXD6G1G' where id=1; -update noar tt set v0='HBWJGUX36S5CMNC3159B62M5PA' where id=1; -update noar ti set v0='HBWJGUX36S5CMNC3159B62M5PA' where id=1; -update noar tt set b1='38XV123' where id=1; -update noar ti set b1='38XV123' where id=1; -update noar tt set v0='28LP' where id=1; -update noar ti set v0='28LP' where id=1; -update noar tt set b2='V' where id=1; -update noar ti set b2='V' where id=1; -update noar tt set v0='H2CX0EI0BE5E0500NBVZ52AG0Z045Z' where id=2; -update noar ti set v0='H2CX0EI0BE5E0500NBVZ52AG0Z045Z' where id=2; -update noar tt set b0='TOYY8QRR' where id=2; -update noar ti set b0='TOYY8QRR' where id=2; -update noar tt set v0='BDEGJ8PZHAXUH0IT8J08546E' where id=2; -update noar ti set v0='BDEGJ8PZHAXUH0IT8J08546E' where id=2; -update noar tt set b1='E9425ENC3G8T' where id=2; -update noar ti set b1='E9425ENC3G8T' where id=2; -update noar tt set v0='40ILIJWUC5ZF0U4P8Z6HG1GI6530V' where id=2; -update noar ti set v0='40ILIJWUC5ZF0U4P8Z6HG1GI6530V' where id=2; -update noar tt set b2='79ID' where id=2; -update noar ti set b2='79ID' where id=2; -update noar tt set v0='FK7Q68DSV6VFFGN8ZJFDWGH6BVHVJBAR' where id=3; -update noar ti set v0='FK7Q68DSV6VFFGN8ZJFDWGH6BVHVJBAR' where id=3; -update noar tt set b0='ODKXSQM86X3EVDGD' where id=3; -update noar ti set b0='ODKXSQM86X3EVDGD' where id=3; -update noar tt set v0='3HF4O5KWQCC2U2GA8' where id=3; -update noar ti set v0='3HF4O5KWQCC2U2GA8' where id=3; -update noar tt set b1='9PLRZBE9O3A4KVLJ' where id=3; -update noar ti set b1='9PLRZBE9O3A4KVLJ' where id=3; -update noar tt set v0='RX2QCYKB6WC5YE3ALHKIK' where id=3; -update noar ti set v0='RX2QCYKB6WC5YE3ALHKIK' where id=3; -update noar tt set b2='DQGVF5NS79RI9CHT7SG6J8VS' where id=3; -update noar ti set b2='DQGVF5NS79RI9CHT7SG6J8VS' where id=3; -update noar tt set v0='3VYP5GBPXC2RQZ9YKB4UVY' where id=4; -update noar ti set v0='3VYP5GBPXC2RQZ9YKB4UVY' where id=4; -update noar tt set b0='6W' where id=4; -update noar ti set b0='6W' where id=4; -update noar tt set v0='EXTZWLBKOJASKTSCNYDWV' where id=4; -update noar ti set v0='EXTZWLBKOJASKTSCNYDWV' where id=4; -update noar tt set b1='0VG7XQ2W1' where id=4; -update noar ti set b1='0VG7XQ2W1' where id=4; -update noar tt set v0='TJQ0BYJHKAMQFVZ3YNG1N' where id=4; -update noar ti set v0='TJQ0BYJHKAMQFVZ3YNG1N' where id=4; -update noar tt set b2='RVOBLQ06SNSXEXQ3F2RVIBQ0LVP' where id=4; -update noar ti set b2='RVOBLQ06SNSXEXQ3F2RVIBQ0LVP' where id=4; -update noar tt set v0='Z0MGERB' where id=5; -update noar ti set v0='Z0MGERB' where id=5; -update noar tt set b0='QWX5X6C1J3' where id=5; -update noar ti set b0='QWX5X6C1J3' where id=5; -update noar tt set v0='ILJQY9I5MG53AFYU7I2N' where id=5; -update noar ti set v0='ILJQY9I5MG53AFYU7I2N' where id=5; -update noar tt set b1='KC6BN6TFX7PHU' where id=5; -update noar ti set b1='KC6BN6TFX7PHU' where id=5; -update noar tt set v0='HDWZDH5HEHNM' where id=5; -update noar ti set v0='HDWZDH5HEHNM' where id=5; -update noar tt set b2='63SERHO0YBUJB9PYSYRRTQ61J' where id=5; -update noar ti set b2='63SERHO0YBUJB9PYSYRRTQ61J' where id=5; -update noar tt set v0='87FGO0VZZB42' where id=6; -update noar ti set v0='87FGO0VZZB42' where id=6; -update noar tt set b0='IDLWK6863KXO1D5C5' where id=6; -update noar ti set b0='IDLWK6863KXO1D5C5' where id=6; -update noar tt set v0='0YU9NO' where id=6; -update noar ti set v0='0YU9NO' where id=6; -update noar tt set b1='NPTBKDIVWXRXYKBNT77LBKMLTTWH85RA' where id=6; -update noar ti set b1='NPTBKDIVWXRXYKBNT77LBKMLTTWH85RA' where id=6; -update noar tt set v0='E9QTHKC8EGOV4741EH375LQ43NWV' where id=6; -update noar ti set v0='E9QTHKC8EGOV4741EH375LQ43NWV' where id=6; -update noar tt set b2='JQ13AXVDH2GTN8UGD4' where id=6; -update noar ti set b2='JQ13AXVDH2GTN8UGD4' where id=6; -update noar tt set v0='VTTTDQ' where id=7; -update noar ti set v0='VTTTDQ' where id=7; -update noar tt set b0='UPS7JT5GTW' where id=7; -update noar ti set b0='UPS7JT5GTW' where id=7; -update noar tt set v0='RLKLLWKW5ZXUG3KSXGH' where id=7; -update noar ti set v0='RLKLLWKW5ZXUG3KSXGH' where id=7; -update noar tt set b1='JJC8BWFMC9FXWDDMXRL1URXCEO2' where id=7; -update noar ti set b1='JJC8BWFMC9FXWDDMXRL1URXCEO2' where id=7; -update noar tt set v0='KU6B7A7KTIZJU6LGKR25LHQTYS6M' where id=7; -update noar ti set v0='KU6B7A7KTIZJU6LGKR25LHQTYS6M' where id=7; -update noar tt set b2='LYBVMWSAQ0R630F' where id=7; -update noar ti set b2='LYBVMWSAQ0R630F' where id=7; -update noar tt set v0='YOTXIA2W2VYOY' where id=8; -update noar ti set v0='YOTXIA2W2VYOY' where id=8; -update noar tt set b0='9JIPEW8EDE1YYZZ' where id=8; -update noar ti set b0='9JIPEW8EDE1YYZZ' where id=8; -update noar tt set v0='Z9' where id=8; -update noar ti set v0='Z9' where id=8; -update noar tt set b1='DD8JD0X' where id=8; -update noar ti set b1='DD8JD0X' where id=8; -update noar tt set v0='55NQRT2SEOFG588R' where id=8; -update noar ti set v0='55NQRT2SEOFG588R' where id=8; -update noar tt set b2='VF3DCAM54AWFZNY90I740RM' where id=8; -update noar ti set b2='VF3DCAM54AWFZNY90I740RM' where id=8; -update noar tt set v0='6U0VND' where id=9; -update noar ti set v0='6U0VND' where id=9; -update noar tt set b0='CU9AC7VOWSXIM1TPPDOIZKQMDV47NYH' where id=9; -update noar ti set b0='CU9AC7VOWSXIM1TPPDOIZKQMDV47NYH' where id=9; -update noar tt set v0='DV5SZ3T6GG9D7O8' where id=9; -update noar ti set v0='DV5SZ3T6GG9D7O8' where id=9; -update noar tt set b1='JTK51YZ3MH7EPV38ZA3' where id=9; -update noar ti set b1='JTK51YZ3MH7EPV38ZA3' where id=9; -update noar tt set v0='P82AFYAR1SWYN3HVKU4KNPS5R' where id=9; -update noar ti set v0='P82AFYAR1SWYN3HVKU4KNPS5R' where id=9; -update noar tt set b2='9XJURTXR95AO6UC4SMN' where id=9; -update noar ti set b2='9XJURTXR95AO6UC4SMN' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 blob not null, -b1 blob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='E4EXF3DQ5EZRK780' where id=1; -update noar ti set v0='E4EXF3DQ5EZRK780' where id=1; -update noar tt set b0='1C9CPGVIUDGPO1LF1ENEDI' where id=1; -update noar ti set b0='1C9CPGVIUDGPO1LF1ENEDI' where id=1; -update noar tt set v0='002Q3NZEQJYRA6696QCXDGM6VF6P' where id=1; -update noar ti set v0='002Q3NZEQJYRA6696QCXDGM6VF6P' where id=1; -update noar tt set b1='V9KP' where id=1; -update noar ti set b1='V9KP' where id=1; -update noar tt set v0='F2A0L606CZEN4IHJ89JXFJW' where id=1; -update noar ti set v0='F2A0L606CZEN4IHJ89JXFJW' where id=1; -update noar tt set b2='75OJNCY' where id=1; -update noar ti set b2='75OJNCY' where id=1; -update noar tt set v0='4GSPODX06S79' where id=2; -update noar ti set v0='4GSPODX06S79' where id=2; -update noar tt set b0='LNIDCUASEW0XACQ7XK5ZMKGE' where id=2; -update noar ti set b0='LNIDCUASEW0XACQ7XK5ZMKGE' where id=2; -update noar tt set v0='O' where id=2; -update noar ti set v0='O' where id=2; -update noar tt set b1='PM' where id=2; -update noar ti set b1='PM' where id=2; -update noar tt set v0='CQJM6AIB' where id=2; -update noar ti set v0='CQJM6AIB' where id=2; -update noar tt set b2='OOK843ZBAQWQOWWKSE7M0C6GE' where id=2; -update noar ti set b2='OOK843ZBAQWQOWWKSE7M0C6GE' where id=2; -update noar tt set v0='C0DRBIBVEQQ' where id=3; -update noar ti set v0='C0DRBIBVEQQ' where id=3; -update noar tt set b0='7TLZ460RY6F3UQ854VDSZCW7UKA8VZC' where id=3; -update noar ti set b0='7TLZ460RY6F3UQ854VDSZCW7UKA8VZC' where id=3; -update noar tt set v0='KESKC9LQP' where id=3; -update noar ti set v0='KESKC9LQP' where id=3; -update noar tt set b1='GWE91K7T6IA3TU3KO34WUK' where id=3; -update noar ti set b1='GWE91K7T6IA3TU3KO34WUK' where id=3; -update noar tt set v0='Z' where id=3; -update noar ti set v0='Z' where id=3; -update noar tt set b2='YP4M0UJPD55M96EY85SCXASV5' where id=3; -update noar ti set b2='YP4M0UJPD55M96EY85SCXASV5' where id=3; -update noar tt set v0='WSHKMHTX45HT40N907ZU6D8' where id=4; -update noar ti set v0='WSHKMHTX45HT40N907ZU6D8' where id=4; -update noar tt set b0='IA8X2PE4V9QDDOCLSK' where id=4; -update noar ti set b0='IA8X2PE4V9QDDOCLSK' where id=4; -update noar tt set v0='EA2ZTC5F5IZL' where id=4; -update noar ti set v0='EA2ZTC5F5IZL' where id=4; -update noar tt set b1='45V9KS2XGKQEW127UZVB5KVNL0DFK6Y4' where id=4; -update noar ti set b1='45V9KS2XGKQEW127UZVB5KVNL0DFK6Y4' where id=4; -update noar tt set v0='1JN6FVFO77UU39NN01OMB' where id=4; -update noar ti set v0='1JN6FVFO77UU39NN01OMB' where id=4; -update noar tt set b2='1LIN9GX6SED2A6ZGQTJVAT5KL' where id=4; -update noar ti set b2='1LIN9GX6SED2A6ZGQTJVAT5KL' where id=4; -update noar tt set v0='06PN8G66U6S' where id=5; -update noar ti set v0='06PN8G66U6S' where id=5; -update noar tt set b0='DQMYC40O2SPY4OUWGPH7W' where id=5; -update noar ti set b0='DQMYC40O2SPY4OUWGPH7W' where id=5; -update noar tt set v0='1CATTVVN3TUR5B2JUXG9IP' where id=5; -update noar ti set v0='1CATTVVN3TUR5B2JUXG9IP' where id=5; -update noar tt set b1='MLFD5HUO' where id=5; -update noar ti set b1='MLFD5HUO' where id=5; -update noar tt set v0='X' where id=5; -update noar ti set v0='X' where id=5; -update noar tt set b2='X4XFUD2H8FP9XX6TN3Y55UO6MCD' where id=5; -update noar ti set b2='X4XFUD2H8FP9XX6TN3Y55UO6MCD' where id=5; -update noar tt set v0='3121FM8PL49' where id=6; -update noar ti set v0='3121FM8PL49' where id=6; -update noar tt set b0='4YKXWSOKD23' where id=6; -update noar ti set b0='4YKXWSOKD23' where id=6; -update noar tt set v0='SIT58PSG071K3R3F9' where id=6; -update noar ti set v0='SIT58PSG071K3R3F9' where id=6; -update noar tt set b1='0CLF64KDZI3F70SJMJAPXAE4' where id=6; -update noar ti set b1='0CLF64KDZI3F70SJMJAPXAE4' where id=6; -update noar tt set v0='JI' where id=6; -update noar ti set v0='JI' where id=6; -update noar tt set b2='4W8EDUIBLU2JGY1XB3IL' where id=6; -update noar ti set b2='4W8EDUIBLU2JGY1XB3IL' where id=6; -update noar tt set v0='FRM83WBO0FJIZU8ZY' where id=7; -update noar ti set v0='FRM83WBO0FJIZU8ZY' where id=7; -update noar tt set b0='R1E1Q6BYNPR76Y6QTUSF' where id=7; -update noar ti set b0='R1E1Q6BYNPR76Y6QTUSF' where id=7; -update noar tt set v0='NT34Y1IK' where id=7; -update noar ti set v0='NT34Y1IK' where id=7; -update noar tt set b1='6IDUJC0L9W8' where id=7; -update noar ti set b1='6IDUJC0L9W8' where id=7; -update noar tt set v0='6A9OV4AA8X2A3RAJ4M' where id=7; -update noar ti set v0='6A9OV4AA8X2A3RAJ4M' where id=7; -update noar tt set b2='LFZX87JR7U2JD8XBYWSA2' where id=7; -update noar ti set b2='LFZX87JR7U2JD8XBYWSA2' where id=7; -update noar tt set v0='39OQP' where id=8; -update noar ti set v0='39OQP' where id=8; -update noar tt set b0='HYOSCL6MQX' where id=8; -update noar ti set b0='HYOSCL6MQX' where id=8; -update noar tt set v0='JK6W9DTRVATP' where id=8; -update noar ti set v0='JK6W9DTRVATP' where id=8; -update noar tt set b1='U' where id=8; -update noar ti set b1='U' where id=8; -update noar tt set v0='6GGV' where id=8; -update noar ti set v0='6GGV' where id=8; -update noar tt set b2='KUHL' where id=8; -update noar ti set b2='KUHL' where id=8; -update noar tt set v0='EHUA546TZ959J9VT' where id=9; -update noar ti set v0='EHUA546TZ959J9VT' where id=9; -update noar tt set b0='C89CQKID907R936YRPZQ4KHSOS81' where id=9; -update noar ti set b0='C89CQKID907R936YRPZQ4KHSOS81' where id=9; -update noar tt set v0='0SXIMJUMZZW38IDV' where id=9; -update noar ti set v0='0SXIMJUMZZW38IDV' where id=9; -update noar tt set b1='8KOTJ8X6MSRVZV' where id=9; -update noar ti set b1='8KOTJ8X6MSRVZV' where id=9; -update noar tt set v0='7ZFRE2CGEQH5I2' where id=9; -update noar ti set v0='7ZFRE2CGEQH5I2' where id=9; -update noar tt set b2='P4FC4FWF2STJZ4ZGBWZS' where id=9; -update noar ti set b2='P4FC4FWF2STJZ4ZGBWZS' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 blob null, -b1 mediumblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='YHU8CYU5OFONA4UEP4E4KNP99F' where id=1; -update noar ti set v0='YHU8CYU5OFONA4UEP4E4KNP99F' where id=1; -update noar tt set b0='VGFYNO6LMPHIQI0HBTK0EIWT50F9MZ' where id=1; -update noar ti set b0='VGFYNO6LMPHIQI0HBTK0EIWT50F9MZ' where id=1; -update noar tt set v0='EXEMNGGMU62GRIBQ994QVIPH865LEG3' where id=1; -update noar ti set v0='EXEMNGGMU62GRIBQ994QVIPH865LEG3' where id=1; -update noar tt set b1='V5OQNLG5LK9MQBEKKV' where id=1; -update noar ti set b1='V5OQNLG5LK9MQBEKKV' where id=1; -update noar tt set v0='Q914BHJY7G5XWPP94IJT9DYOME8I6JPS' where id=1; -update noar ti set v0='Q914BHJY7G5XWPP94IJT9DYOME8I6JPS' where id=1; -update noar tt set b2='CDS' where id=1; -update noar ti set b2='CDS' where id=1; -update noar tt set v0='LONTOQ8OEUG' where id=2; -update noar ti set v0='LONTOQ8OEUG' where id=2; -update noar tt set b0='5YGQ8UZ7' where id=2; -update noar ti set b0='5YGQ8UZ7' where id=2; -update noar tt set v0='DXYQ02YV' where id=2; -update noar ti set v0='DXYQ02YV' where id=2; -update noar tt set b1='DL' where id=2; -update noar ti set b1='DL' where id=2; -update noar tt set v0='9LIPFVKDFF78NUU95FAY0S' where id=2; -update noar ti set v0='9LIPFVKDFF78NUU95FAY0S' where id=2; -update noar tt set b2='KYWHW6WC' where id=2; -update noar ti set b2='KYWHW6WC' where id=2; -update noar tt set v0='CLW9C' where id=3; -update noar ti set v0='CLW9C' where id=3; -update noar tt set b0='40BMCZXNX' where id=3; -update noar ti set b0='40BMCZXNX' where id=3; -update noar tt set v0='LUW9NWULY36DTK' where id=3; -update noar ti set v0='LUW9NWULY36DTK' where id=3; -update noar tt set b1='P28PVAY24X9798HBJENN' where id=3; -update noar ti set b1='P28PVAY24X9798HBJENN' where id=3; -update noar tt set v0='Z8OF7HXD4LHHE69MPVX1094O' where id=3; -update noar ti set v0='Z8OF7HXD4LHHE69MPVX1094O' where id=3; -update noar tt set b2='OLEE2RX5NS0YEAW50HYY0VKFKQ9B' where id=3; -update noar ti set b2='OLEE2RX5NS0YEAW50HYY0VKFKQ9B' where id=3; -update noar tt set v0='FAKJNV' where id=4; -update noar ti set v0='FAKJNV' where id=4; -update noar tt set b0='FZYOH7OHONINERAV7OVYU0' where id=4; -update noar ti set b0='FZYOH7OHONINERAV7OVYU0' where id=4; -update noar tt set v0='W7EY8OZDI886261DGTK10OJ04XI6' where id=4; -update noar ti set v0='W7EY8OZDI886261DGTK10OJ04XI6' where id=4; -update noar tt set b1='VGW' where id=4; -update noar ti set b1='VGW' where id=4; -update noar tt set v0='LRHKZOU735YTIHGHUJNZ1AD' where id=4; -update noar ti set v0='LRHKZOU735YTIHGHUJNZ1AD' where id=4; -update noar tt set b2='TOKSC7DEMGLW9TU0V6XCR' where id=4; -update noar ti set b2='TOKSC7DEMGLW9TU0V6XCR' where id=4; -update noar tt set v0='BZSQ9HL1SG3KFRHWP' where id=5; -update noar ti set v0='BZSQ9HL1SG3KFRHWP' where id=5; -update noar tt set b0='PAVSZY4' where id=5; -update noar ti set b0='PAVSZY4' where id=5; -update noar tt set v0='9RE' where id=5; -update noar ti set v0='9RE' where id=5; -update noar tt set b1='NCJWIQHW2GAYGVW9RAF5C6RC' where id=5; -update noar ti set b1='NCJWIQHW2GAYGVW9RAF5C6RC' where id=5; -update noar tt set v0='V4AZCZRGD' where id=5; -update noar ti set v0='V4AZCZRGD' where id=5; -update noar tt set b2='F5MO8T0O1THEGRWIJAD' where id=5; -update noar ti set b2='F5MO8T0O1THEGRWIJAD' where id=5; -update noar tt set v0='529' where id=6; -update noar ti set v0='529' where id=6; -update noar tt set b0='ZI3A21TG' where id=6; -update noar ti set b0='ZI3A21TG' where id=6; -update noar tt set v0='7LW67NCE736' where id=6; -update noar ti set v0='7LW67NCE736' where id=6; -update noar tt set b1='SOYRELC04KJ6VO7' where id=6; -update noar ti set b1='SOYRELC04KJ6VO7' where id=6; -update noar tt set v0='YCVNQOOGR05W1S3KDO' where id=6; -update noar ti set v0='YCVNQOOGR05W1S3KDO' where id=6; -update noar tt set b2='0J7U647CCWN7TXTZ6KUUUPZ925PBP' where id=6; -update noar ti set b2='0J7U647CCWN7TXTZ6KUUUPZ925PBP' where id=6; -update noar tt set v0='2V8MSSLQQOSCUWVNCKMD2IE0M' where id=7; -update noar ti set v0='2V8MSSLQQOSCUWVNCKMD2IE0M' where id=7; -update noar tt set b0='5TVUR2ZB4Y' where id=7; -update noar ti set b0='5TVUR2ZB4Y' where id=7; -update noar tt set v0='5DASH0' where id=7; -update noar ti set v0='5DASH0' where id=7; -update noar tt set b1='Y3D46R3CYV4TP4QLU' where id=7; -update noar ti set b1='Y3D46R3CYV4TP4QLU' where id=7; -update noar tt set v0='L0YRTL8EVG3RGFMCD4A' where id=7; -update noar ti set v0='L0YRTL8EVG3RGFMCD4A' where id=7; -update noar tt set b2='QCVHDFCYHVGBAG19EORT0HIPP0O77NJZ' where id=7; -update noar ti set b2='QCVHDFCYHVGBAG19EORT0HIPP0O77NJZ' where id=7; -update noar tt set v0='4HSSP' where id=8; -update noar ti set v0='4HSSP' where id=8; -update noar tt set b0='XUKDKTJ72I8YQDLEX4WFIXU06RK6Q' where id=8; -update noar ti set b0='XUKDKTJ72I8YQDLEX4WFIXU06RK6Q' where id=8; -update noar tt set v0='7SLV9Z1PN0TZL4X29WPLDJYURW' where id=8; -update noar ti set v0='7SLV9Z1PN0TZL4X29WPLDJYURW' where id=8; -update noar tt set b1='IDWOB1JL' where id=8; -update noar ti set b1='IDWOB1JL' where id=8; -update noar tt set v0='C7WB8SH4' where id=8; -update noar ti set v0='C7WB8SH4' where id=8; -update noar tt set b2='9Y' where id=8; -update noar ti set b2='9Y' where id=8; -update noar tt set v0='KHV9VAA2WB0YJT6CJU0G34SIAWYTE' where id=9; -update noar ti set v0='KHV9VAA2WB0YJT6CJU0G34SIAWYTE' where id=9; -update noar tt set b0='G9SKYUJCLMKU2OIG61Q' where id=9; -update noar ti set b0='G9SKYUJCLMKU2OIG61Q' where id=9; -update noar tt set v0='DWM7YOVLTTJ4DMKZ4NNTUISN' where id=9; -update noar ti set v0='DWM7YOVLTTJ4DMKZ4NNTUISN' where id=9; -update noar tt set b1='L12X9YZ6ZGK49GBK9LIUM3ODNGLKBQKK' where id=9; -update noar ti set b1='L12X9YZ6ZGK49GBK9LIUM3ODNGLKBQKK' where id=9; -update noar tt set v0='N8EAWSXZCMZF' where id=9; -update noar ti set v0='N8EAWSXZCMZF' where id=9; -update noar tt set b2='J6Z1NMUWPWV' where id=9; -update noar ti set b2='J6Z1NMUWPWV' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 blob null, -b1 mediumblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='8GUQR0FCMDI2RGD' where id=1; -update noar ti set v0='8GUQR0FCMDI2RGD' where id=1; -update noar tt set b0='DWJ' where id=1; -update noar ti set b0='DWJ' where id=1; -update noar tt set v0='8AU5Y3GFRRC8D3XCQ1' where id=1; -update noar ti set v0='8AU5Y3GFRRC8D3XCQ1' where id=1; -update noar tt set b1='68UZXR1K53PEKKLRN0Z0' where id=1; -update noar ti set b1='68UZXR1K53PEKKLRN0Z0' where id=1; -update noar tt set v0='3LOHEBRD85U9FVXXCHNBFB9' where id=1; -update noar ti set v0='3LOHEBRD85U9FVXXCHNBFB9' where id=1; -update noar tt set b2='V41' where id=1; -update noar ti set b2='V41' where id=1; -update noar tt set v0='SESYZM8NFW' where id=2; -update noar ti set v0='SESYZM8NFW' where id=2; -update noar tt set b0='8H1FO471WQ9XCT' where id=2; -update noar ti set b0='8H1FO471WQ9XCT' where id=2; -update noar tt set v0='HJY3X0CBPKG1SIXQW7J6' where id=2; -update noar ti set v0='HJY3X0CBPKG1SIXQW7J6' where id=2; -update noar tt set b1='OQ7E682BAOTGSJL0D7UXGLDT' where id=2; -update noar ti set b1='OQ7E682BAOTGSJL0D7UXGLDT' where id=2; -update noar tt set v0='ALI81HA5HJFJPQ9' where id=2; -update noar ti set v0='ALI81HA5HJFJPQ9' where id=2; -update noar tt set b2='88UM590LAJ0JMQYO5561IXXL9RY' where id=2; -update noar ti set b2='88UM590LAJ0JMQYO5561IXXL9RY' where id=2; -update noar tt set v0='I4' where id=3; -update noar ti set v0='I4' where id=3; -update noar tt set b0='ZHYB9SFIF3WMK35XBCILM' where id=3; -update noar ti set b0='ZHYB9SFIF3WMK35XBCILM' where id=3; -update noar tt set v0='OC' where id=3; -update noar ti set v0='OC' where id=3; -update noar tt set b1='9DOENC0JNBEXYYZYSB6ZGK' where id=3; -update noar ti set b1='9DOENC0JNBEXYYZYSB6ZGK' where id=3; -update noar tt set v0='J9FORFWH1RV6Z6B8IEW8Y' where id=3; -update noar ti set v0='J9FORFWH1RV6Z6B8IEW8Y' where id=3; -update noar tt set b2='6CXDR5K0' where id=3; -update noar ti set b2='6CXDR5K0' where id=3; -update noar tt set v0='FWN25C' where id=4; -update noar ti set v0='FWN25C' where id=4; -update noar tt set b0='HSXJ18OLZFYKXAFMTUL23XG8L7LGG' where id=4; -update noar ti set b0='HSXJ18OLZFYKXAFMTUL23XG8L7LGG' where id=4; -update noar tt set v0='RJ25O7CM54CCWYDF47YF79AK2V' where id=4; -update noar ti set v0='RJ25O7CM54CCWYDF47YF79AK2V' where id=4; -update noar tt set b1='LJ14H2H219TXFR54J3' where id=4; -update noar ti set b1='LJ14H2H219TXFR54J3' where id=4; -update noar tt set v0='48RKTO3H8SJW1L' where id=4; -update noar ti set v0='48RKTO3H8SJW1L' where id=4; -update noar tt set b2='1H2Q0KIIX16BW21GR' where id=4; -update noar ti set b2='1H2Q0KIIX16BW21GR' where id=4; -update noar tt set v0='GSX0DYF61NT9FKDMKV9EAR2P35' where id=5; -update noar ti set v0='GSX0DYF61NT9FKDMKV9EAR2P35' where id=5; -update noar tt set b0='YTQIY' where id=5; -update noar ti set b0='YTQIY' where id=5; -update noar tt set v0='2KQ2KY3NRXK3KFYNKHLF' where id=5; -update noar ti set v0='2KQ2KY3NRXK3KFYNKHLF' where id=5; -update noar tt set b1='4PUKW8G' where id=5; -update noar ti set b1='4PUKW8G' where id=5; -update noar tt set v0='36YDO7TSCKND29VOGDOW438SY0' where id=5; -update noar ti set v0='36YDO7TSCKND29VOGDOW438SY0' where id=5; -update noar tt set b2='I0JJEBZT4V95FJHW' where id=5; -update noar ti set b2='I0JJEBZT4V95FJHW' where id=5; -update noar tt set v0='OHXSQJRC6FZ6MRA3MWW5A65B0' where id=6; -update noar ti set v0='OHXSQJRC6FZ6MRA3MWW5A65B0' where id=6; -update noar tt set b0='15PL4CVY3IQOOX2T9M7WWX6CHK' where id=6; -update noar ti set b0='15PL4CVY3IQOOX2T9M7WWX6CHK' where id=6; -update noar tt set v0='4XGG656T0W5NGNEVQHFG' where id=6; -update noar ti set v0='4XGG656T0W5NGNEVQHFG' where id=6; -update noar tt set b1='8P12WV8G1YI7H4T270EL5OPUFF4N' where id=6; -update noar ti set b1='8P12WV8G1YI7H4T270EL5OPUFF4N' where id=6; -update noar tt set v0='VHPNY6WQAAM' where id=6; -update noar ti set v0='VHPNY6WQAAM' where id=6; -update noar tt set b2='C1GXCW7ZJO3YRBGZK43YLC4JRCHHN' where id=6; -update noar ti set b2='C1GXCW7ZJO3YRBGZK43YLC4JRCHHN' where id=6; -update noar tt set v0='KP07N9Z78GZZD3O0R9PCLZQE88E3' where id=7; -update noar ti set v0='KP07N9Z78GZZD3O0R9PCLZQE88E3' where id=7; -update noar tt set b0='E1534PDCYYKEY6HMK8ERQ5FH3DXTN7VC' where id=7; -update noar ti set b0='E1534PDCYYKEY6HMK8ERQ5FH3DXTN7VC' where id=7; -update noar tt set v0='XCON96ZERYB4Y89FGAKS8' where id=7; -update noar ti set v0='XCON96ZERYB4Y89FGAKS8' where id=7; -update noar tt set b1='959VVUQDCGZE36X5KODWM4KK4UKAM2PU' where id=7; -update noar ti set b1='959VVUQDCGZE36X5KODWM4KK4UKAM2PU' where id=7; -update noar tt set v0='TL2HKYMKM3G1PH2H' where id=7; -update noar ti set v0='TL2HKYMKM3G1PH2H' where id=7; -update noar tt set b2='TDUTHXS52LP61BC5IW7YB2V' where id=7; -update noar ti set b2='TDUTHXS52LP61BC5IW7YB2V' where id=7; -update noar tt set v0='C9D1R' where id=8; -update noar ti set v0='C9D1R' where id=8; -update noar tt set b0='ZC64X5FMTIN08K7HRQ90S1BBPWCH1' where id=8; -update noar ti set b0='ZC64X5FMTIN08K7HRQ90S1BBPWCH1' where id=8; -update noar tt set v0='C1' where id=8; -update noar ti set v0='C1' where id=8; -update noar tt set b1='20JRYK6EEXRMQG' where id=8; -update noar ti set b1='20JRYK6EEXRMQG' where id=8; -update noar tt set v0='1H' where id=8; -update noar ti set v0='1H' where id=8; -update noar tt set b2='5HEF65UEGQ8JY4YNG7' where id=8; -update noar ti set b2='5HEF65UEGQ8JY4YNG7' where id=8; -update noar tt set v0='B7LEOT1OTK2BXBS' where id=9; -update noar ti set v0='B7LEOT1OTK2BXBS' where id=9; -update noar tt set b0='JNIJ2N45E03U4ZR30OTAVS1' where id=9; -update noar ti set b0='JNIJ2N45E03U4ZR30OTAVS1' where id=9; -update noar tt set v0='DRU2IPXDFGL7YX50O' where id=9; -update noar ti set v0='DRU2IPXDFGL7YX50O' where id=9; -update noar tt set b1='NKTU6IXVVHFW15IES' where id=9; -update noar ti set b1='NKTU6IXVVHFW15IES' where id=9; -update noar tt set v0='49L35R8HI855WAK' where id=9; -update noar ti set v0='49L35R8HI855WAK' where id=9; -update noar tt set b2='WOVRVP459QYK7YH3NCTUKBWVS7BS0ORL' where id=9; -update noar ti set b2='WOVRVP459QYK7YH3NCTUKBWVS7BS0ORL' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 blob not null, -b1 mediumblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='LENCHJMQGGCJ303MFPAUJWZ5BJ5EW' where id=1; -update noar ti set v0='LENCHJMQGGCJ303MFPAUJWZ5BJ5EW' where id=1; -update noar tt set b0='F8CE2ZW3PJPUIPTU2E' where id=1; -update noar ti set b0='F8CE2ZW3PJPUIPTU2E' where id=1; -update noar tt set v0='QVO5DP5LH5S57TLRTQ5JEXXXYMWX8G' where id=1; -update noar ti set v0='QVO5DP5LH5S57TLRTQ5JEXXXYMWX8G' where id=1; -update noar tt set b1='BCMZJAYS7EEY9' where id=1; -update noar ti set b1='BCMZJAYS7EEY9' where id=1; -update noar tt set v0='8Z4P1C0HXXB9JHRMGQKDM' where id=1; -update noar ti set v0='8Z4P1C0HXXB9JHRMGQKDM' where id=1; -update noar tt set b2='OEY' where id=1; -update noar ti set b2='OEY' where id=1; -update noar tt set v0='ZOCWCU9OZVY45W4JT' where id=2; -update noar ti set v0='ZOCWCU9OZVY45W4JT' where id=2; -update noar tt set b0='OL9IV' where id=2; -update noar ti set b0='OL9IV' where id=2; -update noar tt set v0='XQJRV2PKCWR2Q1T6STZOP2P7VYJKHG' where id=2; -update noar ti set v0='XQJRV2PKCWR2Q1T6STZOP2P7VYJKHG' where id=2; -update noar tt set b1='2X0KL88GKI2ACT3JIC5H9YNV0' where id=2; -update noar ti set b1='2X0KL88GKI2ACT3JIC5H9YNV0' where id=2; -update noar tt set v0='JO1BQEGX1160ZXTFVW8S75' where id=2; -update noar ti set v0='JO1BQEGX1160ZXTFVW8S75' where id=2; -update noar tt set b2='4EN84QTXSYD6Z' where id=2; -update noar ti set b2='4EN84QTXSYD6Z' where id=2; -update noar tt set v0='8VWIPY3HJBD' where id=3; -update noar ti set v0='8VWIPY3HJBD' where id=3; -update noar tt set b0='JZTMAX12E' where id=3; -update noar ti set b0='JZTMAX12E' where id=3; -update noar tt set v0='2' where id=3; -update noar ti set v0='2' where id=3; -update noar tt set b1='HRZXJOLSTZLJPPL5316EO' where id=3; -update noar ti set b1='HRZXJOLSTZLJPPL5316EO' where id=3; -update noar tt set v0='EM86XP33CAOD6M1ENO7Y' where id=3; -update noar ti set v0='EM86XP33CAOD6M1ENO7Y' where id=3; -update noar tt set b2='OW620YFSMA69YHF' where id=3; -update noar ti set b2='OW620YFSMA69YHF' where id=3; -update noar tt set v0='1637J6' where id=4; -update noar ti set v0='1637J6' where id=4; -update noar tt set b0='MQ1R5OB9ZKUFKYTT20RJ6' where id=4; -update noar ti set b0='MQ1R5OB9ZKUFKYTT20RJ6' where id=4; -update noar tt set v0='UQMF31RVBD12BSFJRYMQIV4C' where id=4; -update noar ti set v0='UQMF31RVBD12BSFJRYMQIV4C' where id=4; -update noar tt set b1='B6XHCI5JPW5POLPWYL46A64M' where id=4; -update noar ti set b1='B6XHCI5JPW5POLPWYL46A64M' where id=4; -update noar tt set v0='2DJB86' where id=4; -update noar ti set v0='2DJB86' where id=4; -update noar tt set b2='6HNL2C' where id=4; -update noar ti set b2='6HNL2C' where id=4; -update noar tt set v0='0UI' where id=5; -update noar ti set v0='0UI' where id=5; -update noar tt set b0='B4' where id=5; -update noar ti set b0='B4' where id=5; -update noar tt set v0='8SDVFDD4LE53VREW5SKEL4Q' where id=5; -update noar ti set v0='8SDVFDD4LE53VREW5SKEL4Q' where id=5; -update noar tt set b1='103KHBOZLLOAXXX6S6M' where id=5; -update noar ti set b1='103KHBOZLLOAXXX6S6M' where id=5; -update noar tt set v0='2RKD4ISGZH22E50208WFO978URY' where id=5; -update noar ti set v0='2RKD4ISGZH22E50208WFO978URY' where id=5; -update noar tt set b2='GE4EIB1TDHL' where id=5; -update noar ti set b2='GE4EIB1TDHL' where id=5; -update noar tt set v0='VQLU' where id=6; -update noar ti set v0='VQLU' where id=6; -update noar tt set b0='9NSR79YXU78F4JPMWL' where id=6; -update noar ti set b0='9NSR79YXU78F4JPMWL' where id=6; -update noar tt set v0='3BJY0SUVRNY5POX' where id=6; -update noar ti set v0='3BJY0SUVRNY5POX' where id=6; -update noar tt set b1='3YFD9U4V5' where id=6; -update noar ti set b1='3YFD9U4V5' where id=6; -update noar tt set v0='SKET5AFRD8YLN3Q717DFLVNVML' where id=6; -update noar ti set v0='SKET5AFRD8YLN3Q717DFLVNVML' where id=6; -update noar tt set b2='0WLWS5E2YQWN' where id=6; -update noar ti set b2='0WLWS5E2YQWN' where id=6; -update noar tt set v0='IM07ZOBJQLSKD' where id=7; -update noar ti set v0='IM07ZOBJQLSKD' where id=7; -update noar tt set b0='N9HCNH6435OB5B' where id=7; -update noar ti set b0='N9HCNH6435OB5B' where id=7; -update noar tt set v0='Y4JH8PSVCG34S0DSX43ENKQ4Z' where id=7; -update noar ti set v0='Y4JH8PSVCG34S0DSX43ENKQ4Z' where id=7; -update noar tt set b1='R3YBDYYBLXOSJZV' where id=7; -update noar ti set b1='R3YBDYYBLXOSJZV' where id=7; -update noar tt set v0='SKSVUX8K27' where id=7; -update noar ti set v0='SKSVUX8K27' where id=7; -update noar tt set b2='1ZIAT4BP9KNQ7ZZLPO95' where id=7; -update noar ti set b2='1ZIAT4BP9KNQ7ZZLPO95' where id=7; -update noar tt set v0='UPVJHEGO8XSSKQ0HIT0TW7PHJM' where id=8; -update noar ti set v0='UPVJHEGO8XSSKQ0HIT0TW7PHJM' where id=8; -update noar tt set b0='8Q2J4SVUB' where id=8; -update noar ti set b0='8Q2J4SVUB' where id=8; -update noar tt set v0='4T5' where id=8; -update noar ti set v0='4T5' where id=8; -update noar tt set b1='LOJCOJMQQVTGQZHQ16AEYH53CZ3OQFTW' where id=8; -update noar ti set b1='LOJCOJMQQVTGQZHQ16AEYH53CZ3OQFTW' where id=8; -update noar tt set v0='46GCM7JYG3A5VMCTR' where id=8; -update noar ti set v0='46GCM7JYG3A5VMCTR' where id=8; -update noar tt set b2='7M3YITAX5NT20RYJKXJWJ18LU87' where id=8; -update noar ti set b2='7M3YITAX5NT20RYJKXJWJ18LU87' where id=8; -update noar tt set v0='VTNEF76C0Q086YPQO7X' where id=9; -update noar ti set v0='VTNEF76C0Q086YPQO7X' where id=9; -update noar tt set b0='JASX0YR' where id=9; -update noar ti set b0='JASX0YR' where id=9; -update noar tt set v0='TE61595SIGRAQV1SGXJ5SZF' where id=9; -update noar ti set v0='TE61595SIGRAQV1SGXJ5SZF' where id=9; -update noar tt set b1='80I8VQNZNEUEG5IV07HF6L1ELJCK' where id=9; -update noar ti set b1='80I8VQNZNEUEG5IV07HF6L1ELJCK' where id=9; -update noar tt set v0='QA99Q6AW' where id=9; -update noar ti set v0='QA99Q6AW' where id=9; -update noar tt set b2='HPRKSGR8K' where id=9; -update noar ti set b2='HPRKSGR8K' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 blob not null, -b1 mediumblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='7KE3LHTP5IY9' where id=1; -update noar ti set v0='7KE3LHTP5IY9' where id=1; -update noar tt set b0='21I8J2CB' where id=1; -update noar ti set b0='21I8J2CB' where id=1; -update noar tt set v0='APIXTPBM3718M8KQ72ZQZR4TX4' where id=1; -update noar ti set v0='APIXTPBM3718M8KQ72ZQZR4TX4' where id=1; -update noar tt set b1='XIKAH6SSWNAE7JXLOQ3JZV' where id=1; -update noar ti set b1='XIKAH6SSWNAE7JXLOQ3JZV' where id=1; -update noar tt set v0='V7QJGK07FNLEN2E1VL5A9YL' where id=1; -update noar ti set v0='V7QJGK07FNLEN2E1VL5A9YL' where id=1; -update noar tt set b2='GVVDX3X2ZLO6828Q' where id=1; -update noar ti set b2='GVVDX3X2ZLO6828Q' where id=1; -update noar tt set v0='1XZV8X0OUWP9OILZELIHLFKI6B551V' where id=2; -update noar ti set v0='1XZV8X0OUWP9OILZELIHLFKI6B551V' where id=2; -update noar tt set b0='04B9BCVC6UF' where id=2; -update noar ti set b0='04B9BCVC6UF' where id=2; -update noar tt set v0='XACGUK6JZ39S' where id=2; -update noar ti set v0='XACGUK6JZ39S' where id=2; -update noar tt set b1='5TDCAD12HYZ1KK4RZOL37QHHU4F' where id=2; -update noar ti set b1='5TDCAD12HYZ1KK4RZOL37QHHU4F' where id=2; -update noar tt set v0='817G1ZPRB1P9' where id=2; -update noar ti set v0='817G1ZPRB1P9' where id=2; -update noar tt set b2='7G7IQBSRB' where id=2; -update noar ti set b2='7G7IQBSRB' where id=2; -update noar tt set v0='RIKSRC' where id=3; -update noar ti set v0='RIKSRC' where id=3; -update noar tt set b0='ERYPUE9L9E03PG538PHCV5O4HT99I' where id=3; -update noar ti set b0='ERYPUE9L9E03PG538PHCV5O4HT99I' where id=3; -update noar tt set v0='NMOX7V4L' where id=3; -update noar ti set v0='NMOX7V4L' where id=3; -update noar tt set b1='SFI314YVRWT5EC8LFZOBM8Q36L93I' where id=3; -update noar ti set b1='SFI314YVRWT5EC8LFZOBM8Q36L93I' where id=3; -update noar tt set v0='2' where id=3; -update noar ti set v0='2' where id=3; -update noar tt set b2='UC78XHGAYM59XXY2G5GFTQSB46' where id=3; -update noar ti set b2='UC78XHGAYM59XXY2G5GFTQSB46' where id=3; -update noar tt set v0='0E5LWC0QCM' where id=4; -update noar ti set v0='0E5LWC0QCM' where id=4; -update noar tt set b0='P836SEON6ZCG0877253UU28VRT' where id=4; -update noar ti set b0='P836SEON6ZCG0877253UU28VRT' where id=4; -update noar tt set v0='ARP9ZZDBVM1JWICL' where id=4; -update noar ti set v0='ARP9ZZDBVM1JWICL' where id=4; -update noar tt set b1='SU9JTW21GLI' where id=4; -update noar ti set b1='SU9JTW21GLI' where id=4; -update noar tt set v0='BK4CRYAFI7YY1BKAWKR' where id=4; -update noar ti set v0='BK4CRYAFI7YY1BKAWKR' where id=4; -update noar tt set b2='Y9I49WR8XO6XH0OIG6VEOJVOOIBVRQE' where id=4; -update noar ti set b2='Y9I49WR8XO6XH0OIG6VEOJVOOIBVRQE' where id=4; -update noar tt set v0='5BUOI381SO8' where id=5; -update noar ti set v0='5BUOI381SO8' where id=5; -update noar tt set b0='31O58AJ2GTUFR' where id=5; -update noar ti set b0='31O58AJ2GTUFR' where id=5; -update noar tt set v0='IOI2X2W2IQ1G4LDKH7WL' where id=5; -update noar ti set v0='IOI2X2W2IQ1G4LDKH7WL' where id=5; -update noar tt set b1='9S34' where id=5; -update noar ti set b1='9S34' where id=5; -update noar tt set v0='W058N7ZIR8F72K0H9J' where id=5; -update noar ti set v0='W058N7ZIR8F72K0H9J' where id=5; -update noar tt set b2='WLLLPR99ZUFVFA6XU' where id=5; -update noar ti set b2='WLLLPR99ZUFVFA6XU' where id=5; -update noar tt set v0='DBN29FX4B9RMM9OW6EPSDEUMWPL71Y' where id=6; -update noar ti set v0='DBN29FX4B9RMM9OW6EPSDEUMWPL71Y' where id=6; -update noar tt set b0='B547NZRK7B47GNWAPCWRLFRIC7SSRW' where id=6; -update noar ti set b0='B547NZRK7B47GNWAPCWRLFRIC7SSRW' where id=6; -update noar tt set v0='8K4B0I7FVMXWLSYJVBPNA' where id=6; -update noar ti set v0='8K4B0I7FVMXWLSYJVBPNA' where id=6; -update noar tt set b1='2C8DYVNWBTJ5QY3YMOM2WINC' where id=6; -update noar ti set b1='2C8DYVNWBTJ5QY3YMOM2WINC' where id=6; -update noar tt set v0='7VH7LLE4VFMXRZWGGAT99QE534GI57' where id=6; -update noar ti set v0='7VH7LLE4VFMXRZWGGAT99QE534GI57' where id=6; -update noar tt set b2='FCVFYSR' where id=6; -update noar ti set b2='FCVFYSR' where id=6; -update noar tt set v0='I' where id=7; -update noar ti set v0='I' where id=7; -update noar tt set b0='JQ32WTDI8T22UAHTM0W' where id=7; -update noar ti set b0='JQ32WTDI8T22UAHTM0W' where id=7; -update noar tt set v0='NNT16P3VU25BLZHJ2LC67' where id=7; -update noar ti set v0='NNT16P3VU25BLZHJ2LC67' where id=7; -update noar tt set b1='95ZHCB616' where id=7; -update noar ti set b1='95ZHCB616' where id=7; -update noar tt set v0='QYPQTKA0PT52151U552C7RIL0X' where id=7; -update noar ti set v0='QYPQTKA0PT52151U552C7RIL0X' where id=7; -update noar tt set b2='NS78ZGRVCB10FE5YXZCYBBXOJ35G5LB' where id=7; -update noar ti set b2='NS78ZGRVCB10FE5YXZCYBBXOJ35G5LB' where id=7; -update noar tt set v0='DKQ4ROWI42' where id=8; -update noar ti set v0='DKQ4ROWI42' where id=8; -update noar tt set b0='16OZZDQI94RKL1I072N32A' where id=8; -update noar ti set b0='16OZZDQI94RKL1I072N32A' where id=8; -update noar tt set v0='R8NC3U2IGMULREWYQKS6F8N9K7' where id=8; -update noar ti set v0='R8NC3U2IGMULREWYQKS6F8N9K7' where id=8; -update noar tt set b1='LHI3MLYH2LWJBIBVXJC7X6JTURMOXUL' where id=8; -update noar ti set b1='LHI3MLYH2LWJBIBVXJC7X6JTURMOXUL' where id=8; -update noar tt set v0='PEBLZ83Y6MQJ3OA69SBGB2RTXDCTPAXF' where id=8; -update noar ti set v0='PEBLZ83Y6MQJ3OA69SBGB2RTXDCTPAXF' where id=8; -update noar tt set b2='9ZAJYA' where id=8; -update noar ti set b2='9ZAJYA' where id=8; -update noar tt set v0='CGJB4SNM2E5P1JUU2N3CUIE827' where id=9; -update noar ti set v0='CGJB4SNM2E5P1JUU2N3CUIE827' where id=9; -update noar tt set b0='SINX94DOZ3QX308YSXDPO4' where id=9; -update noar ti set b0='SINX94DOZ3QX308YSXDPO4' where id=9; -update noar tt set v0='LR4SUXDK2K6HL' where id=9; -update noar ti set v0='LR4SUXDK2K6HL' where id=9; -update noar tt set b1='9F6Z3M4FV1R79SWU2N4Z' where id=9; -update noar ti set b1='9F6Z3M4FV1R79SWU2N4Z' where id=9; -update noar tt set v0='DA' where id=9; -update noar ti set v0='DA' where id=9; -update noar tt set b2='W5W64F4V2TSZ5MON' where id=9; -update noar ti set b2='W5W64F4V2TSZ5MON' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 blob null, -b1 mediumblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='ITOG3R3GJXZ8F8X7A9706KE6PP6RI6' where id=1; -update noar ti set v0='ITOG3R3GJXZ8F8X7A9706KE6PP6RI6' where id=1; -update noar tt set b0='1UDVLBTE4BSQODU42ZKHBKXF0L6KFHGO' where id=1; -update noar ti set b0='1UDVLBTE4BSQODU42ZKHBKXF0L6KFHGO' where id=1; -update noar tt set v0='NL54S1X9CBX12MLSOG4P9B5' where id=1; -update noar ti set v0='NL54S1X9CBX12MLSOG4P9B5' where id=1; -update noar tt set b1='8U05N' where id=1; -update noar ti set b1='8U05N' where id=1; -update noar tt set v0='YB6F96FWM1MB6E8YJPRVG6' where id=1; -update noar ti set v0='YB6F96FWM1MB6E8YJPRVG6' where id=1; -update noar tt set b2='Z3WLIR' where id=1; -update noar ti set b2='Z3WLIR' where id=1; -update noar tt set v0='T94CJK2G2GHLXFLL' where id=2; -update noar ti set v0='T94CJK2G2GHLXFLL' where id=2; -update noar tt set b0='Q7KFYALKLHPJXO' where id=2; -update noar ti set b0='Q7KFYALKLHPJXO' where id=2; -update noar tt set v0='58INGAY6W' where id=2; -update noar ti set v0='58INGAY6W' where id=2; -update noar tt set b1='S' where id=2; -update noar ti set b1='S' where id=2; -update noar tt set v0='QRNDPMADAAAJKWHAL2CVQ9MS' where id=2; -update noar ti set v0='QRNDPMADAAAJKWHAL2CVQ9MS' where id=2; -update noar tt set b2='0N2TXCY81M41S' where id=2; -update noar ti set b2='0N2TXCY81M41S' where id=2; -update noar tt set v0='S8FL4WPHM86RI1R4K' where id=3; -update noar ti set v0='S8FL4WPHM86RI1R4K' where id=3; -update noar tt set b0='MG2FV' where id=3; -update noar ti set b0='MG2FV' where id=3; -update noar tt set v0='EJKUC8DHX4PI' where id=3; -update noar ti set v0='EJKUC8DHX4PI' where id=3; -update noar tt set b1='FEGUSYFOI5CTMZMVVYAWE' where id=3; -update noar ti set b1='FEGUSYFOI5CTMZMVVYAWE' where id=3; -update noar tt set v0='KCH8UXZI1R8XPS8509D3X5JQ' where id=3; -update noar ti set v0='KCH8UXZI1R8XPS8509D3X5JQ' where id=3; -update noar tt set b2='9672KLS2' where id=3; -update noar ti set b2='9672KLS2' where id=3; -update noar tt set v0='D2HB7TL852QVJR0' where id=4; -update noar ti set v0='D2HB7TL852QVJR0' where id=4; -update noar tt set b0='BDQ6MIROG1R1PKP8EMQIETZB' where id=4; -update noar ti set b0='BDQ6MIROG1R1PKP8EMQIETZB' where id=4; -update noar tt set v0='DJDM' where id=4; -update noar ti set v0='DJDM' where id=4; -update noar tt set b1='K' where id=4; -update noar ti set b1='K' where id=4; -update noar tt set v0='PQ0W0KDBR9AQ09F' where id=4; -update noar ti set v0='PQ0W0KDBR9AQ09F' where id=4; -update noar tt set b2='69XW7K4HJG0AWKEJ' where id=4; -update noar ti set b2='69XW7K4HJG0AWKEJ' where id=4; -update noar tt set v0='QR15ZOIDRJTJDL6V' where id=5; -update noar ti set v0='QR15ZOIDRJTJDL6V' where id=5; -update noar tt set b0='O45HSTJ8QWWBUMYDVZTNLV9T2EYMV' where id=5; -update noar ti set b0='O45HSTJ8QWWBUMYDVZTNLV9T2EYMV' where id=5; -update noar tt set v0='SNPC1FHWOH0KHXXVJ92' where id=5; -update noar ti set v0='SNPC1FHWOH0KHXXVJ92' where id=5; -update noar tt set b1='C213DZQCL9IOXOB4SH7XYVG' where id=5; -update noar ti set b1='C213DZQCL9IOXOB4SH7XYVG' where id=5; -update noar tt set v0='WO6WWH28S6LPS96Y22BY' where id=5; -update noar ti set v0='WO6WWH28S6LPS96Y22BY' where id=5; -update noar tt set b2='UVMBWD5WY0' where id=5; -update noar ti set b2='UVMBWD5WY0' where id=5; -update noar tt set v0='W1AHLWPMFAS' where id=6; -update noar ti set v0='W1AHLWPMFAS' where id=6; -update noar tt set b0='0IZTDWZMH1C1BU' where id=6; -update noar ti set b0='0IZTDWZMH1C1BU' where id=6; -update noar tt set v0='YSBSYJAF' where id=6; -update noar ti set v0='YSBSYJAF' where id=6; -update noar tt set b1='2' where id=6; -update noar ti set b1='2' where id=6; -update noar tt set v0='XASLZDRI' where id=6; -update noar ti set v0='XASLZDRI' where id=6; -update noar tt set b2='BG' where id=6; -update noar ti set b2='BG' where id=6; -update noar tt set v0='1KIX3X5DS' where id=7; -update noar ti set v0='1KIX3X5DS' where id=7; -update noar tt set b0='BOIH' where id=7; -update noar ti set b0='BOIH' where id=7; -update noar tt set v0='VK' where id=7; -update noar ti set v0='VK' where id=7; -update noar tt set b1='17U86DE' where id=7; -update noar ti set b1='17U86DE' where id=7; -update noar tt set v0='OYS54B7AMPCSDG19O' where id=7; -update noar ti set v0='OYS54B7AMPCSDG19O' where id=7; -update noar tt set b2='5I8HTVOCNAO6XAO8K1JLO84AKMWIB9W5' where id=7; -update noar ti set b2='5I8HTVOCNAO6XAO8K1JLO84AKMWIB9W5' where id=7; -update noar tt set v0='DIYL5GB5FG530' where id=8; -update noar ti set v0='DIYL5GB5FG530' where id=8; -update noar tt set b0='78BMSMAW3UWGE4OF3KS8C2Y740' where id=8; -update noar ti set b0='78BMSMAW3UWGE4OF3KS8C2Y740' where id=8; -update noar tt set v0='KEBWB7FHP2PSEHOO5LHIS' where id=8; -update noar ti set v0='KEBWB7FHP2PSEHOO5LHIS' where id=8; -update noar tt set b1='OCI7ZNYO4G0WT5XXFFWEJKCX' where id=8; -update noar ti set b1='OCI7ZNYO4G0WT5XXFFWEJKCX' where id=8; -update noar tt set v0='X' where id=8; -update noar ti set v0='X' where id=8; -update noar tt set b2='JTWRO3Y52IO' where id=8; -update noar ti set b2='JTWRO3Y52IO' where id=8; -update noar tt set v0='2GTHJS3I3FT610VCWU929' where id=9; -update noar ti set v0='2GTHJS3I3FT610VCWU929' where id=9; -update noar tt set b0='HIC9EZ' where id=9; -update noar ti set b0='HIC9EZ' where id=9; -update noar tt set v0='02M2R965' where id=9; -update noar ti set v0='02M2R965' where id=9; -update noar tt set b1='2OBNUP6QP5CRHZ13F60B05YER4M9' where id=9; -update noar ti set b1='2OBNUP6QP5CRHZ13F60B05YER4M9' where id=9; -update noar tt set v0='N1XNJEB1EPLORB8' where id=9; -update noar ti set v0='N1XNJEB1EPLORB8' where id=9; -update noar tt set b2='CODJ3KO7G94' where id=9; -update noar ti set b2='CODJ3KO7G94' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 blob null, -b1 mediumblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='59U' where id=1; -update noar ti set v0='59U' where id=1; -update noar tt set b0='OVOSKGHWA0W' where id=1; -update noar ti set b0='OVOSKGHWA0W' where id=1; -update noar tt set v0='6AW' where id=1; -update noar ti set v0='6AW' where id=1; -update noar tt set b1='CPSHR5QXFDQGR63' where id=1; -update noar ti set b1='CPSHR5QXFDQGR63' where id=1; -update noar tt set v0='Z' where id=1; -update noar ti set v0='Z' where id=1; -update noar tt set b2='Y6OPCJCGB9KYZ1XQR9AB323NE8R4Y' where id=1; -update noar ti set b2='Y6OPCJCGB9KYZ1XQR9AB323NE8R4Y' where id=1; -update noar tt set v0='9' where id=2; -update noar ti set v0='9' where id=2; -update noar tt set b0='T6LJ1P99EHE5QCYYF9WLOWC1O' where id=2; -update noar ti set b0='T6LJ1P99EHE5QCYYF9WLOWC1O' where id=2; -update noar tt set v0='PUN2GUFBEJFWKG58SZ0IBKUVVN42HD' where id=2; -update noar ti set v0='PUN2GUFBEJFWKG58SZ0IBKUVVN42HD' where id=2; -update noar tt set b1='VADBHP' where id=2; -update noar ti set b1='VADBHP' where id=2; -update noar tt set v0='LSXUG781WLGC7S2BQ99U3PEIRRGBA' where id=2; -update noar ti set v0='LSXUG781WLGC7S2BQ99U3PEIRRGBA' where id=2; -update noar tt set b2='BKOX26PEZW0VUBW4GZB' where id=2; -update noar ti set b2='BKOX26PEZW0VUBW4GZB' where id=2; -update noar tt set v0='RSQ1CT699EQ4QCV' where id=3; -update noar ti set v0='RSQ1CT699EQ4QCV' where id=3; -update noar tt set b0='8SGM6RHWQ0ZKUQL3145Q2QUI3' where id=3; -update noar ti set b0='8SGM6RHWQ0ZKUQL3145Q2QUI3' where id=3; -update noar tt set v0='A7BKUNKLZMN5RP0VN2V5HEHHB5TX6E28' where id=3; -update noar ti set v0='A7BKUNKLZMN5RP0VN2V5HEHHB5TX6E28' where id=3; -update noar tt set b1='4G61POD3IA3WY3HZDYXU01XFJTT4' where id=3; -update noar ti set b1='4G61POD3IA3WY3HZDYXU01XFJTT4' where id=3; -update noar tt set v0='HJMS65VUXQA617KERLP4Z' where id=3; -update noar ti set v0='HJMS65VUXQA617KERLP4Z' where id=3; -update noar tt set b2='PXDCNY811KVX3A8X' where id=3; -update noar ti set b2='PXDCNY811KVX3A8X' where id=3; -update noar tt set v0='ET9WOOJ72IJWE6G2L4OPOBNW3BL884S' where id=4; -update noar ti set v0='ET9WOOJ72IJWE6G2L4OPOBNW3BL884S' where id=4; -update noar tt set b0='E5U73MKDE0Z' where id=4; -update noar ti set b0='E5U73MKDE0Z' where id=4; -update noar tt set v0='6YXLPCT4LCFXRUHH' where id=4; -update noar ti set v0='6YXLPCT4LCFXRUHH' where id=4; -update noar tt set b1='Z1I9HJTI' where id=4; -update noar ti set b1='Z1I9HJTI' where id=4; -update noar tt set v0='OA2CVH35HBKFMYIE5YIIGV375V5' where id=4; -update noar ti set v0='OA2CVH35HBKFMYIE5YIIGV375V5' where id=4; -update noar tt set b2='QWWTS6AMLM8S8DJ38YNYHFAHHO' where id=4; -update noar ti set b2='QWWTS6AMLM8S8DJ38YNYHFAHHO' where id=4; -update noar tt set v0='M886E0A0IW' where id=5; -update noar ti set v0='M886E0A0IW' where id=5; -update noar tt set b0='D4NWLPMWF4TZSS9X' where id=5; -update noar ti set b0='D4NWLPMWF4TZSS9X' where id=5; -update noar tt set v0='NI3PFYM1' where id=5; -update noar ti set v0='NI3PFYM1' where id=5; -update noar tt set b1='Y1TL9GGE01FKO43' where id=5; -update noar ti set b1='Y1TL9GGE01FKO43' where id=5; -update noar tt set v0='N' where id=5; -update noar ti set v0='N' where id=5; -update noar tt set b2='XM9' where id=5; -update noar ti set b2='XM9' where id=5; -update noar tt set v0='ASACW0Z0UVVUH6CQJ2ZS3F9ORVG0Z' where id=6; -update noar ti set v0='ASACW0Z0UVVUH6CQJ2ZS3F9ORVG0Z' where id=6; -update noar tt set b0='23HG3VOO99BEW2S3C65S8WTRO7FV3AGT' where id=6; -update noar ti set b0='23HG3VOO99BEW2S3C65S8WTRO7FV3AGT' where id=6; -update noar tt set v0='P1NUMMGTINZQ1D4M5CO8GU' where id=6; -update noar ti set v0='P1NUMMGTINZQ1D4M5CO8GU' where id=6; -update noar tt set b1='C0ZE64AMXX222F8CMXB7FPC497G4L5' where id=6; -update noar ti set b1='C0ZE64AMXX222F8CMXB7FPC497G4L5' where id=6; -update noar tt set v0='T6EL2' where id=6; -update noar ti set v0='T6EL2' where id=6; -update noar tt set b2='9W8HCI1K71VQ4CJ9HCXZU8H1A' where id=6; -update noar ti set b2='9W8HCI1K71VQ4CJ9HCXZU8H1A' where id=6; -update noar tt set v0='W9LL4NP3MFHBO01MH2VYN5W5PR4P' where id=7; -update noar ti set v0='W9LL4NP3MFHBO01MH2VYN5W5PR4P' where id=7; -update noar tt set b0='OL2YROBHGOVWY' where id=7; -update noar ti set b0='OL2YROBHGOVWY' where id=7; -update noar tt set v0='GQMOZ4H09WV3MJ' where id=7; -update noar ti set v0='GQMOZ4H09WV3MJ' where id=7; -update noar tt set b1='U4PW0K0XRG8A9DOVKBR0T34RP1QWTHL' where id=7; -update noar ti set b1='U4PW0K0XRG8A9DOVKBR0T34RP1QWTHL' where id=7; -update noar tt set v0='LSYG2AW8' where id=7; -update noar ti set v0='LSYG2AW8' where id=7; -update noar tt set b2='J64ILDEI186574IIPWSN' where id=7; -update noar ti set b2='J64ILDEI186574IIPWSN' where id=7; -update noar tt set v0='UP995JT0UA760VU8CVU69YMQUA3RK85' where id=8; -update noar ti set v0='UP995JT0UA760VU8CVU69YMQUA3RK85' where id=8; -update noar tt set b0='00ZL4MB8LPEKI47IQCRY4PZ0J' where id=8; -update noar ti set b0='00ZL4MB8LPEKI47IQCRY4PZ0J' where id=8; -update noar tt set v0='90YRASU6UNNBG43FYHLKJJY' where id=8; -update noar ti set v0='90YRASU6UNNBG43FYHLKJJY' where id=8; -update noar tt set b1='55GLKAGYF1Y9UCS4' where id=8; -update noar ti set b1='55GLKAGYF1Y9UCS4' where id=8; -update noar tt set v0='K80' where id=8; -update noar ti set v0='K80' where id=8; -update noar tt set b2='C2BFRWRRAUVRW7RD' where id=8; -update noar ti set b2='C2BFRWRRAUVRW7RD' where id=8; -update noar tt set v0='5U3ZZ10VJ2D3GDU0DQP2Q7X5BHBE' where id=9; -update noar ti set v0='5U3ZZ10VJ2D3GDU0DQP2Q7X5BHBE' where id=9; -update noar tt set b0='LT2AZ2VG91XJLFJT2YJDUQ00I2CZ5W5' where id=9; -update noar ti set b0='LT2AZ2VG91XJLFJT2YJDUQ00I2CZ5W5' where id=9; -update noar tt set v0='4F62RVEULDMZH7D80L18AZ54BRL' where id=9; -update noar ti set v0='4F62RVEULDMZH7D80L18AZ54BRL' where id=9; -update noar tt set b1='9906C' where id=9; -update noar ti set b1='9906C' where id=9; -update noar tt set v0='AP1K8SG3P1315FSIE1SHQJ7' where id=9; -update noar ti set v0='AP1K8SG3P1315FSIE1SHQJ7' where id=9; -update noar tt set b2='LRTG' where id=9; -update noar ti set b2='LRTG' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 blob not null, -b1 mediumblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='MY536V' where id=1; -update noar ti set v0='MY536V' where id=1; -update noar tt set b0='XQAOXVVXMXTHF0QBYFLLQMQBN52DJMVJ' where id=1; -update noar ti set b0='XQAOXVVXMXTHF0QBYFLLQMQBN52DJMVJ' where id=1; -update noar tt set v0='QDD84ZQMV3YO4UH5UJ0LOQNL' where id=1; -update noar ti set v0='QDD84ZQMV3YO4UH5UJ0LOQNL' where id=1; -update noar tt set b1='CN7UKL2EOKGVZ3' where id=1; -update noar ti set b1='CN7UKL2EOKGVZ3' where id=1; -update noar tt set v0='NRMTOG6H4WZBHK' where id=1; -update noar ti set v0='NRMTOG6H4WZBHK' where id=1; -update noar tt set b2='K9518GHCZKVKVHZXY16KGROOO5D' where id=1; -update noar ti set b2='K9518GHCZKVKVHZXY16KGROOO5D' where id=1; -update noar tt set v0='TQ9I4CV2BO7' where id=2; -update noar ti set v0='TQ9I4CV2BO7' where id=2; -update noar tt set b0='SEX6EIVX4C9F0' where id=2; -update noar ti set b0='SEX6EIVX4C9F0' where id=2; -update noar tt set v0='5T06JQ' where id=2; -update noar ti set v0='5T06JQ' where id=2; -update noar tt set b1='Z11OZ' where id=2; -update noar ti set b1='Z11OZ' where id=2; -update noar tt set v0='IJ805IE7TSYAL' where id=2; -update noar ti set v0='IJ805IE7TSYAL' where id=2; -update noar tt set b2='1O6TFXDUBS7YS385N96DCFWQ' where id=2; -update noar ti set b2='1O6TFXDUBS7YS385N96DCFWQ' where id=2; -update noar tt set v0='UCQK3OU3AF5IIEPXBCZGLA62YFOJ' where id=3; -update noar ti set v0='UCQK3OU3AF5IIEPXBCZGLA62YFOJ' where id=3; -update noar tt set b0='H9BW62UMJXU3NO1DSPYBM8X68' where id=3; -update noar ti set b0='H9BW62UMJXU3NO1DSPYBM8X68' where id=3; -update noar tt set v0='QHPRE2OQGPDQSSQLHE8Z34SWKIH9G' where id=3; -update noar ti set v0='QHPRE2OQGPDQSSQLHE8Z34SWKIH9G' where id=3; -update noar tt set b1='LB0RO' where id=3; -update noar ti set b1='LB0RO' where id=3; -update noar tt set v0='TW44BF90VR0WCBE1J0JOXKH2W9E' where id=3; -update noar ti set v0='TW44BF90VR0WCBE1J0JOXKH2W9E' where id=3; -update noar tt set b2='WXGUET' where id=3; -update noar ti set b2='WXGUET' where id=3; -update noar tt set v0='XASQQH6' where id=4; -update noar ti set v0='XASQQH6' where id=4; -update noar tt set b0='Y' where id=4; -update noar ti set b0='Y' where id=4; -update noar tt set v0='KYTV4S9YGW7IH0YSE5MPHJF72' where id=4; -update noar ti set v0='KYTV4S9YGW7IH0YSE5MPHJF72' where id=4; -update noar tt set b1='DOKMBRIXB9MV3EH91C4HG' where id=4; -update noar ti set b1='DOKMBRIXB9MV3EH91C4HG' where id=4; -update noar tt set v0='SPYUWU2ZHQ07FEQMK' where id=4; -update noar ti set v0='SPYUWU2ZHQ07FEQMK' where id=4; -update noar tt set b2='IH5ISXX3VSMBCGYYTILYHOAAMBU' where id=4; -update noar ti set b2='IH5ISXX3VSMBCGYYTILYHOAAMBU' where id=4; -update noar tt set v0='J4' where id=5; -update noar ti set v0='J4' where id=5; -update noar tt set b0='EIX3' where id=5; -update noar ti set b0='EIX3' where id=5; -update noar tt set v0='J2' where id=5; -update noar ti set v0='J2' where id=5; -update noar tt set b1='FG0E1' where id=5; -update noar ti set b1='FG0E1' where id=5; -update noar tt set v0='XTNT961RTWDJ32T0X7' where id=5; -update noar ti set v0='XTNT961RTWDJ32T0X7' where id=5; -update noar tt set b2='VXCTXR7XMSY' where id=5; -update noar ti set b2='VXCTXR7XMSY' where id=5; -update noar tt set v0='HL9AB5FDWTZC0KG8Q54J8BNY0PI7K' where id=6; -update noar ti set v0='HL9AB5FDWTZC0KG8Q54J8BNY0PI7K' where id=6; -update noar tt set b0='0EPNIQOMICMFJBDCVURVLESQUWYEHK9O' where id=6; -update noar ti set b0='0EPNIQOMICMFJBDCVURVLESQUWYEHK9O' where id=6; -update noar tt set v0='HADYSO2P237N8NR821EOX7' where id=6; -update noar ti set v0='HADYSO2P237N8NR821EOX7' where id=6; -update noar tt set b1='AT3PUFU92JYRZSAF9RRX7H365K' where id=6; -update noar ti set b1='AT3PUFU92JYRZSAF9RRX7H365K' where id=6; -update noar tt set v0='3BHHRAI89K17ID4FQO4P2NMF7' where id=6; -update noar ti set v0='3BHHRAI89K17ID4FQO4P2NMF7' where id=6; -update noar tt set b2='SA9P560TS' where id=6; -update noar ti set b2='SA9P560TS' where id=6; -update noar tt set v0='YYDOY5LRUMJYTZW1DTVN0BXZ' where id=7; -update noar ti set v0='YYDOY5LRUMJYTZW1DTVN0BXZ' where id=7; -update noar tt set b0='HFFJ3U' where id=7; -update noar ti set b0='HFFJ3U' where id=7; -update noar tt set v0='BRC5QUDL6NJNKFOWJ4XW9ST5' where id=7; -update noar ti set v0='BRC5QUDL6NJNKFOWJ4XW9ST5' where id=7; -update noar tt set b1='BQXYLD31N617' where id=7; -update noar ti set b1='BQXYLD31N617' where id=7; -update noar tt set v0='V27M4X71O4PMPA46F8REVC553R' where id=7; -update noar ti set v0='V27M4X71O4PMPA46F8REVC553R' where id=7; -update noar tt set b2='2BK' where id=7; -update noar ti set b2='2BK' where id=7; -update noar tt set v0='IX' where id=8; -update noar ti set v0='IX' where id=8; -update noar tt set b0='HNHW' where id=8; -update noar ti set b0='HNHW' where id=8; -update noar tt set v0='9UN8DNWIYR5P7R0' where id=8; -update noar ti set v0='9UN8DNWIYR5P7R0' where id=8; -update noar tt set b1='LYL' where id=8; -update noar ti set b1='LYL' where id=8; -update noar tt set v0='RCVMRAS41NP63HZNGNS1TZOOUMRYG0' where id=8; -update noar ti set v0='RCVMRAS41NP63HZNGNS1TZOOUMRYG0' where id=8; -update noar tt set b2='IIEYS30P0VSFAIII7S8JWV8EIC7FW6' where id=8; -update noar ti set b2='IIEYS30P0VSFAIII7S8JWV8EIC7FW6' where id=8; -update noar tt set v0='NP3MYIX6KYGRVPG0TIH7YX4MXJI59' where id=9; -update noar ti set v0='NP3MYIX6KYGRVPG0TIH7YX4MXJI59' where id=9; -update noar tt set b0='W23EIGBK' where id=9; -update noar ti set b0='W23EIGBK' where id=9; -update noar tt set v0='9M' where id=9; -update noar ti set v0='9M' where id=9; -update noar tt set b1='LFLWK5KQ3NMAFHHO4YDEXSMAXLZJ4ADW' where id=9; -update noar ti set b1='LFLWK5KQ3NMAFHHO4YDEXSMAXLZJ4ADW' where id=9; -update noar tt set v0='OMD4L0EBGB25S86VEKD8A09HFNI6MD' where id=9; -update noar ti set v0='OMD4L0EBGB25S86VEKD8A09HFNI6MD' where id=9; -update noar tt set b2='2TSGHR55W5TB8WBF0HEQEGOHC0DBZO20' where id=9; -update noar ti set b2='2TSGHR55W5TB8WBF0HEQEGOHC0DBZO20' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 blob not null, -b1 mediumblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='IRV5CW5YBR' where id=1; -update noar ti set v0='IRV5CW5YBR' where id=1; -update noar tt set b0='XVSQJ' where id=1; -update noar ti set b0='XVSQJ' where id=1; -update noar tt set v0='Z1LYOC5JTUF3SPKEL' where id=1; -update noar ti set v0='Z1LYOC5JTUF3SPKEL' where id=1; -update noar tt set b1='EZVPDSJ979XMSMAO' where id=1; -update noar ti set b1='EZVPDSJ979XMSMAO' where id=1; -update noar tt set v0='BN1SJ' where id=1; -update noar ti set v0='BN1SJ' where id=1; -update noar tt set b2='KTC68LPMFS0' where id=1; -update noar ti set b2='KTC68LPMFS0' where id=1; -update noar tt set v0='71P3GWXEQKCD918IIV' where id=2; -update noar ti set v0='71P3GWXEQKCD918IIV' where id=2; -update noar tt set b0='LE9GFFDW0Z4H81352W5E9ISJB3KGKYTP' where id=2; -update noar ti set b0='LE9GFFDW0Z4H81352W5E9ISJB3KGKYTP' where id=2; -update noar tt set v0='Y8NU1CW6KLH6EY7' where id=2; -update noar ti set v0='Y8NU1CW6KLH6EY7' where id=2; -update noar tt set b1='932ZZW83D24GDQS13S' where id=2; -update noar ti set b1='932ZZW83D24GDQS13S' where id=2; -update noar tt set v0='VL675IMIE9LBRG9SJSJ1VSMG' where id=2; -update noar ti set v0='VL675IMIE9LBRG9SJSJ1VSMG' where id=2; -update noar tt set b2='34L9GGYG900581VF' where id=2; -update noar ti set b2='34L9GGYG900581VF' where id=2; -update noar tt set v0='J4946MQM1HZ7453N75BER0867IE4L' where id=3; -update noar ti set v0='J4946MQM1HZ7453N75BER0867IE4L' where id=3; -update noar tt set b0='O8UXHUVTNTD' where id=3; -update noar ti set b0='O8UXHUVTNTD' where id=3; -update noar tt set v0='DOH8' where id=3; -update noar ti set v0='DOH8' where id=3; -update noar tt set b1='KNKTAGHKP2RIN0X7WLE7KO9W' where id=3; -update noar ti set b1='KNKTAGHKP2RIN0X7WLE7KO9W' where id=3; -update noar tt set v0='FZM1JRRQ9B1FZLQBOI149AG' where id=3; -update noar ti set v0='FZM1JRRQ9B1FZLQBOI149AG' where id=3; -update noar tt set b2='4GMCG7OFL2FI9GB1BC1ONAM9' where id=3; -update noar ti set b2='4GMCG7OFL2FI9GB1BC1ONAM9' where id=3; -update noar tt set v0='PC2LW9SMOYE0' where id=4; -update noar ti set v0='PC2LW9SMOYE0' where id=4; -update noar tt set b0='DWID8FBCFAJRIVK6FOIQ2NAI4FI6RQE' where id=4; -update noar ti set b0='DWID8FBCFAJRIVK6FOIQ2NAI4FI6RQE' where id=4; -update noar tt set v0='4FG' where id=4; -update noar ti set v0='4FG' where id=4; -update noar tt set b1='DH3HL4ONMAJX' where id=4; -update noar ti set b1='DH3HL4ONMAJX' where id=4; -update noar tt set v0='WSDZ403' where id=4; -update noar ti set v0='WSDZ403' where id=4; -update noar tt set b2='T43AP9568KY3FQ8G0X36PF5RBIXM1Q' where id=4; -update noar ti set b2='T43AP9568KY3FQ8G0X36PF5RBIXM1Q' where id=4; -update noar tt set v0='P9QRJ5701B4D30VXF9W0WLG5P3OIIO02' where id=5; -update noar ti set v0='P9QRJ5701B4D30VXF9W0WLG5P3OIIO02' where id=5; -update noar tt set b0='OH5GQFHRM8Y7JPSAQQ' where id=5; -update noar ti set b0='OH5GQFHRM8Y7JPSAQQ' where id=5; -update noar tt set v0='F0ZSA5RB44XCL8KW368FKKQL0ZM2' where id=5; -update noar ti set v0='F0ZSA5RB44XCL8KW368FKKQL0ZM2' where id=5; -update noar tt set b1='1MYBRNTIDMYCWK8SELNPX7XJSN0K2T3' where id=5; -update noar ti set b1='1MYBRNTIDMYCWK8SELNPX7XJSN0K2T3' where id=5; -update noar tt set v0='KCLUN9ODJSDJULWYVLEA' where id=5; -update noar ti set v0='KCLUN9ODJSDJULWYVLEA' where id=5; -update noar tt set b2='FSMJM9AFL3QFXGP6YQHIHVMEZ6LI' where id=5; -update noar ti set b2='FSMJM9AFL3QFXGP6YQHIHVMEZ6LI' where id=5; -update noar tt set v0='QMJ3MHMYT9OY4CWYTB8I' where id=6; -update noar ti set v0='QMJ3MHMYT9OY4CWYTB8I' where id=6; -update noar tt set b0='CA1NN9R3EG2BQHPIA' where id=6; -update noar ti set b0='CA1NN9R3EG2BQHPIA' where id=6; -update noar tt set v0='M9CEK4R2IQ5CC6QCC2UP6CBZZK9OSEH' where id=6; -update noar ti set v0='M9CEK4R2IQ5CC6QCC2UP6CBZZK9OSEH' where id=6; -update noar tt set b1='LO61' where id=6; -update noar ti set b1='LO61' where id=6; -update noar tt set v0='VMGKHFCXMOCD0YGYG6RYNF' where id=6; -update noar ti set v0='VMGKHFCXMOCD0YGYG6RYNF' where id=6; -update noar tt set b2='9ZX80L1XM4CAYL0SJJI' where id=6; -update noar ti set b2='9ZX80L1XM4CAYL0SJJI' where id=6; -update noar tt set v0='B9LK2JKCVFZYA' where id=7; -update noar ti set v0='B9LK2JKCVFZYA' where id=7; -update noar tt set b0='ISO8IMFU5PYYHSYQ1LY6MQ6Y' where id=7; -update noar ti set b0='ISO8IMFU5PYYHSYQ1LY6MQ6Y' where id=7; -update noar tt set v0='DOIZXF7D' where id=7; -update noar ti set v0='DOIZXF7D' where id=7; -update noar tt set b1='ZG9X21TM07G9O1YYNAW' where id=7; -update noar ti set b1='ZG9X21TM07G9O1YYNAW' where id=7; -update noar tt set v0='KYR3INXS16NLC99XK7IODNBL' where id=7; -update noar ti set v0='KYR3INXS16NLC99XK7IODNBL' where id=7; -update noar tt set b2='TKOZMA0ZSK7IS1W7DFVZZ72' where id=7; -update noar ti set b2='TKOZMA0ZSK7IS1W7DFVZZ72' where id=7; -update noar tt set v0='NJX' where id=8; -update noar ti set v0='NJX' where id=8; -update noar tt set b0='472' where id=8; -update noar ti set b0='472' where id=8; -update noar tt set v0='401I8DPN0WPVS' where id=8; -update noar ti set v0='401I8DPN0WPVS' where id=8; -update noar tt set b1='1OEM4Z4Q7U4BRQJ56ZX38D6YVE' where id=8; -update noar ti set b1='1OEM4Z4Q7U4BRQJ56ZX38D6YVE' where id=8; -update noar tt set v0='6F6VM1ODPTHEQC861QN2APT3Z4JU0' where id=8; -update noar ti set v0='6F6VM1ODPTHEQC861QN2APT3Z4JU0' where id=8; -update noar tt set b2='BHK220T0ML55B0KVAAVVSTV7EXGYSOY' where id=8; -update noar ti set b2='BHK220T0ML55B0KVAAVVSTV7EXGYSOY' where id=8; -update noar tt set v0='Q97QHWA1Q' where id=9; -update noar ti set v0='Q97QHWA1Q' where id=9; -update noar tt set b0='8LM2W1' where id=9; -update noar ti set b0='8LM2W1' where id=9; -update noar tt set v0='WIZWGFDIWV' where id=9; -update noar ti set v0='WIZWGFDIWV' where id=9; -update noar tt set b1='4LIFZ7YDW17HONV5YLMNQR8T7HI' where id=9; -update noar ti set b1='4LIFZ7YDW17HONV5YLMNQR8T7HI' where id=9; -update noar tt set v0='WCNMCPSQKTHNEAY6UOMLNMJEA63LO' where id=9; -update noar ti set v0='WCNMCPSQKTHNEAY6UOMLNMJEA63LO' where id=9; -update noar tt set b2='9PCXMC44LON4AQTZMWKRXO931BLFTM' where id=9; -update noar ti set b2='9PCXMC44LON4AQTZMWKRXO931BLFTM' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 blob null, -b1 mediumblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='N5KJMZ1KDS4OJJX71QUYNWYU19HH' where id=1; -update noar ti set v0='N5KJMZ1KDS4OJJX71QUYNWYU19HH' where id=1; -update noar tt set b0='ERIADJNWSBR' where id=1; -update noar ti set b0='ERIADJNWSBR' where id=1; -update noar tt set v0='ORD4TEHMBZD6VWB9ZUPM83' where id=1; -update noar ti set v0='ORD4TEHMBZD6VWB9ZUPM83' where id=1; -update noar tt set b1='CR4QHT2FNSS23' where id=1; -update noar ti set b1='CR4QHT2FNSS23' where id=1; -update noar tt set v0='WP' where id=1; -update noar ti set v0='WP' where id=1; -update noar tt set b2='JCHFLPB1VBB27B' where id=1; -update noar ti set b2='JCHFLPB1VBB27B' where id=1; -update noar tt set v0='A3G' where id=2; -update noar ti set v0='A3G' where id=2; -update noar tt set b0='Z8NQFOH7D6K' where id=2; -update noar ti set b0='Z8NQFOH7D6K' where id=2; -update noar tt set v0='KS72XRPIRXJDEND59O463JY' where id=2; -update noar ti set v0='KS72XRPIRXJDEND59O463JY' where id=2; -update noar tt set b1='KHACXVRCJE5HRB6N5P9ZQ2JTTYHZ8Q9' where id=2; -update noar ti set b1='KHACXVRCJE5HRB6N5P9ZQ2JTTYHZ8Q9' where id=2; -update noar tt set v0='81FGKA05Y7D31P13H' where id=2; -update noar ti set v0='81FGKA05Y7D31P13H' where id=2; -update noar tt set b2='2PZKYZF4MSHAPDPBU3' where id=2; -update noar ti set b2='2PZKYZF4MSHAPDPBU3' where id=2; -update noar tt set v0='F6PA8' where id=3; -update noar ti set v0='F6PA8' where id=3; -update noar tt set b0='GH4J94IV' where id=3; -update noar ti set b0='GH4J94IV' where id=3; -update noar tt set v0='EDU3VNBQSG9CRMDM8S0A1WQYMYJCWII' where id=3; -update noar ti set v0='EDU3VNBQSG9CRMDM8S0A1WQYMYJCWII' where id=3; -update noar tt set b1='1I6S9B' where id=3; -update noar ti set b1='1I6S9B' where id=3; -update noar tt set v0='7Y6NRB96JB97' where id=3; -update noar ti set v0='7Y6NRB96JB97' where id=3; -update noar tt set b2='B33LA4YBDIJ7MOACCDW1Z' where id=3; -update noar ti set b2='B33LA4YBDIJ7MOACCDW1Z' where id=3; -update noar tt set v0='5SL2JK24Z' where id=4; -update noar ti set v0='5SL2JK24Z' where id=4; -update noar tt set b0='JSNCEDBH3P0FO3K4LF1PWG07HR33O' where id=4; -update noar ti set b0='JSNCEDBH3P0FO3K4LF1PWG07HR33O' where id=4; -update noar tt set v0='FTGZ620E59NGNVA1' where id=4; -update noar ti set v0='FTGZ620E59NGNVA1' where id=4; -update noar tt set b1='8E5JR8KU95HZC73IMJSP09HQZ' where id=4; -update noar ti set b1='8E5JR8KU95HZC73IMJSP09HQZ' where id=4; -update noar tt set v0='NAOODGFOOQ8IPIPSDEF2GPGN11U' where id=4; -update noar ti set v0='NAOODGFOOQ8IPIPSDEF2GPGN11U' where id=4; -update noar tt set b2='RY8' where id=4; -update noar ti set b2='RY8' where id=4; -update noar tt set v0='AZ1VPEZU3Z2T5JQIX4Q9DVGFBZEQI21N' where id=5; -update noar ti set v0='AZ1VPEZU3Z2T5JQIX4Q9DVGFBZEQI21N' where id=5; -update noar tt set b0='2BWV68W' where id=5; -update noar ti set b0='2BWV68W' where id=5; -update noar tt set v0='DBC76KL8TMHZV1GVPQ' where id=5; -update noar ti set v0='DBC76KL8TMHZV1GVPQ' where id=5; -update noar tt set b1='HGBHO0BDZ68C88XA03MPAQY9X' where id=5; -update noar ti set b1='HGBHO0BDZ68C88XA03MPAQY9X' where id=5; -update noar tt set v0='R8DBA8L' where id=5; -update noar ti set v0='R8DBA8L' where id=5; -update noar tt set b2='31A4I' where id=5; -update noar ti set b2='31A4I' where id=5; -update noar tt set v0='WA636V15B9GDCI1ITU2G7' where id=6; -update noar ti set v0='WA636V15B9GDCI1ITU2G7' where id=6; -update noar tt set b0='T0F9Y2OK7LSGSJSQWAR' where id=6; -update noar ti set b0='T0F9Y2OK7LSGSJSQWAR' where id=6; -update noar tt set v0='DL9C99TBK48600UA' where id=6; -update noar ti set v0='DL9C99TBK48600UA' where id=6; -update noar tt set b1='VSPXKBDP4LRLNWBX' where id=6; -update noar ti set b1='VSPXKBDP4LRLNWBX' where id=6; -update noar tt set v0='XC6BG2Z82OR1Q2C71CBVNXVIXTUVGDH' where id=6; -update noar ti set v0='XC6BG2Z82OR1Q2C71CBVNXVIXTUVGDH' where id=6; -update noar tt set b2='99PV51V6SRK8LPLFZ4S5V88RE2SC' where id=6; -update noar ti set b2='99PV51V6SRK8LPLFZ4S5V88RE2SC' where id=6; -update noar tt set v0='MJJH0NSVS8ZAN3MB3MG9S8P5KZOMQ' where id=7; -update noar ti set v0='MJJH0NSVS8ZAN3MB3MG9S8P5KZOMQ' where id=7; -update noar tt set b0='HO0CC' where id=7; -update noar ti set b0='HO0CC' where id=7; -update noar tt set v0='5611U' where id=7; -update noar ti set v0='5611U' where id=7; -update noar tt set b1='O' where id=7; -update noar ti set b1='O' where id=7; -update noar tt set v0='17YU2' where id=7; -update noar ti set v0='17YU2' where id=7; -update noar tt set b2='WA4' where id=7; -update noar ti set b2='WA4' where id=7; -update noar tt set v0='402ZOE20KD0GOYHOMNQ' where id=8; -update noar ti set v0='402ZOE20KD0GOYHOMNQ' where id=8; -update noar tt set b0='AKQTYVEO3O51208L74FY1GEMGK6QRA' where id=8; -update noar ti set b0='AKQTYVEO3O51208L74FY1GEMGK6QRA' where id=8; -update noar tt set v0='EHJAQJ' where id=8; -update noar ti set v0='EHJAQJ' where id=8; -update noar tt set b1='WSN7JX9S5SNAX05' where id=8; -update noar ti set b1='WSN7JX9S5SNAX05' where id=8; -update noar tt set v0='KD3C1TUP1481SXP1JNR' where id=8; -update noar ti set v0='KD3C1TUP1481SXP1JNR' where id=8; -update noar tt set b2='5TK1C32O1A' where id=8; -update noar ti set b2='5TK1C32O1A' where id=8; -update noar tt set v0='BQOUTX5LM5OU6JBBMNDFTGS7XY6ZHVEV' where id=9; -update noar ti set v0='BQOUTX5LM5OU6JBBMNDFTGS7XY6ZHVEV' where id=9; -update noar tt set b0='SH' where id=9; -update noar ti set b0='SH' where id=9; -update noar tt set v0='D2V98LQTQD0DWC4C' where id=9; -update noar ti set v0='D2V98LQTQD0DWC4C' where id=9; -update noar tt set b1='FSZ3HRXXNZQ6XY1U4LW7DGKM' where id=9; -update noar ti set b1='FSZ3HRXXNZQ6XY1U4LW7DGKM' where id=9; -update noar tt set v0='8NM652E0VAO4H6FV23IHDKTWY' where id=9; -update noar ti set v0='8NM652E0VAO4H6FV23IHDKTWY' where id=9; -update noar tt set b2='3OC5BFRUE0W1EG0U0N5BCNHG49102N63' where id=9; -update noar ti set b2='3OC5BFRUE0W1EG0U0N5BCNHG49102N63' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 blob null, -b1 mediumblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='SW2PV7VHXKWNJ23MNV5IX4YGGDY86Z' where id=1; -update noar ti set v0='SW2PV7VHXKWNJ23MNV5IX4YGGDY86Z' where id=1; -update noar tt set b0='F8H2' where id=1; -update noar ti set b0='F8H2' where id=1; -update noar tt set v0='17H7X' where id=1; -update noar ti set v0='17H7X' where id=1; -update noar tt set b1='EZOUM34' where id=1; -update noar ti set b1='EZOUM34' where id=1; -update noar tt set v0='AC10Y6VLZ6JN70CRMC1HY2ZHTGB491' where id=1; -update noar ti set v0='AC10Y6VLZ6JN70CRMC1HY2ZHTGB491' where id=1; -update noar tt set b2='NHAXZIMNOJ0U0SNF' where id=1; -update noar ti set b2='NHAXZIMNOJ0U0SNF' where id=1; -update noar tt set v0='B0KZHQGF6CYR03RY1' where id=2; -update noar ti set v0='B0KZHQGF6CYR03RY1' where id=2; -update noar tt set b0='BL797J4RQ9452NIS1LF' where id=2; -update noar ti set b0='BL797J4RQ9452NIS1LF' where id=2; -update noar tt set v0='YPBYOXK63Y9UG1ITKTRLIJL' where id=2; -update noar ti set v0='YPBYOXK63Y9UG1ITKTRLIJL' where id=2; -update noar tt set b1='4OWQBA84VV' where id=2; -update noar ti set b1='4OWQBA84VV' where id=2; -update noar tt set v0='M3QOBSZY9B9GOKJ' where id=2; -update noar ti set v0='M3QOBSZY9B9GOKJ' where id=2; -update noar tt set b2='LE9462VD99GUBWG03177F' where id=2; -update noar ti set b2='LE9462VD99GUBWG03177F' where id=2; -update noar tt set v0='WIJC872X7EQJY9B7502OKDI' where id=3; -update noar ti set v0='WIJC872X7EQJY9B7502OKDI' where id=3; -update noar tt set b0='6CHA0I7H36CQIQFBGEOR9M76' where id=3; -update noar ti set b0='6CHA0I7H36CQIQFBGEOR9M76' where id=3; -update noar tt set v0='RV94JD6BIAGURU9HE1KO5HY9' where id=3; -update noar ti set v0='RV94JD6BIAGURU9HE1KO5HY9' where id=3; -update noar tt set b1='E13OL5JNLHVRLYXT7V28ZZNHMSJ7' where id=3; -update noar ti set b1='E13OL5JNLHVRLYXT7V28ZZNHMSJ7' where id=3; -update noar tt set v0='DEDP674JVTGL' where id=3; -update noar ti set v0='DEDP674JVTGL' where id=3; -update noar tt set b2='OWXM3KD' where id=3; -update noar ti set b2='OWXM3KD' where id=3; -update noar tt set v0='IHH2ZNP2XT' where id=4; -update noar ti set v0='IHH2ZNP2XT' where id=4; -update noar tt set b0='BQMMFEFAS8AQ' where id=4; -update noar ti set b0='BQMMFEFAS8AQ' where id=4; -update noar tt set v0='0UB1YYL5SJALUI' where id=4; -update noar ti set v0='0UB1YYL5SJALUI' where id=4; -update noar tt set b1='ZNL7NF3V1BX10YGQ3ADPIDE2I4A3O' where id=4; -update noar ti set b1='ZNL7NF3V1BX10YGQ3ADPIDE2I4A3O' where id=4; -update noar tt set v0='WYRXJ25ESZOQ5CUDS1LX' where id=4; -update noar ti set v0='WYRXJ25ESZOQ5CUDS1LX' where id=4; -update noar tt set b2='5ID2J1FTROF2BBYHO9P0M34' where id=4; -update noar ti set b2='5ID2J1FTROF2BBYHO9P0M34' where id=4; -update noar tt set v0='B' where id=5; -update noar ti set v0='B' where id=5; -update noar tt set b0='7V08' where id=5; -update noar ti set b0='7V08' where id=5; -update noar tt set v0='IUU93QFVD2V3IFG' where id=5; -update noar ti set v0='IUU93QFVD2V3IFG' where id=5; -update noar tt set b1='PI4MJIM991QXVXGHXYXNQTTPXSUGUMH' where id=5; -update noar ti set b1='PI4MJIM991QXVXGHXYXNQTTPXSUGUMH' where id=5; -update noar tt set v0='QJUMN7YWH8MRUHNQ39K7U7G0G7ZS' where id=5; -update noar ti set v0='QJUMN7YWH8MRUHNQ39K7U7G0G7ZS' where id=5; -update noar tt set b2='5CBIQ1H9XNHU' where id=5; -update noar ti set b2='5CBIQ1H9XNHU' where id=5; -update noar tt set v0='8XSK4CG' where id=6; -update noar ti set v0='8XSK4CG' where id=6; -update noar tt set b0='QJRXEQPBIAJEFCEAIVFK63DZCIB6Q' where id=6; -update noar ti set b0='QJRXEQPBIAJEFCEAIVFK63DZCIB6Q' where id=6; -update noar tt set v0='4SI2HE185PFQ9F832CUSS064BVFIH9VN' where id=6; -update noar ti set v0='4SI2HE185PFQ9F832CUSS064BVFIH9VN' where id=6; -update noar tt set b1='RIG8HQV1OCET8XRFGOTX8K' where id=6; -update noar ti set b1='RIG8HQV1OCET8XRFGOTX8K' where id=6; -update noar tt set v0='PPZJ1SVAFD45VGRA6T1GTZN6WQ3' where id=6; -update noar ti set v0='PPZJ1SVAFD45VGRA6T1GTZN6WQ3' where id=6; -update noar tt set b2='VORIRPQL6YTQU3' where id=6; -update noar ti set b2='VORIRPQL6YTQU3' where id=6; -update noar tt set v0='4L' where id=7; -update noar ti set v0='4L' where id=7; -update noar tt set b0='1D' where id=7; -update noar ti set b0='1D' where id=7; -update noar tt set v0='X68J2K7YHY44O8KP' where id=7; -update noar ti set v0='X68J2K7YHY44O8KP' where id=7; -update noar tt set b1='B1TFG4RH04TMLGINF6MN7V21PCE' where id=7; -update noar ti set b1='B1TFG4RH04TMLGINF6MN7V21PCE' where id=7; -update noar tt set v0='DAK2H2CANSHHZF' where id=7; -update noar ti set v0='DAK2H2CANSHHZF' where id=7; -update noar tt set b2='MRRWI' where id=7; -update noar ti set b2='MRRWI' where id=7; -update noar tt set v0='47029PLPUXTMO3' where id=8; -update noar ti set v0='47029PLPUXTMO3' where id=8; -update noar tt set b0='PU8RWT88B49Y7JS2MJGN3ZP8IF8ZP' where id=8; -update noar ti set b0='PU8RWT88B49Y7JS2MJGN3ZP8IF8ZP' where id=8; -update noar tt set v0='YLUZAQ3K5187UVSJ2DRNGQHIG09' where id=8; -update noar ti set v0='YLUZAQ3K5187UVSJ2DRNGQHIG09' where id=8; -update noar tt set b1='213NHTTL3XU5CEALLCL9ASL6ZRD' where id=8; -update noar ti set b1='213NHTTL3XU5CEALLCL9ASL6ZRD' where id=8; -update noar tt set v0='1JUWQCLVPCFZ3NWIOL6HFEGDTHAFMJZY' where id=8; -update noar ti set v0='1JUWQCLVPCFZ3NWIOL6HFEGDTHAFMJZY' where id=8; -update noar tt set b2='WVQFOJ2M' where id=8; -update noar ti set b2='WVQFOJ2M' where id=8; -update noar tt set v0='QVB7ZL6KW39JAUAVVIEW' where id=9; -update noar ti set v0='QVB7ZL6KW39JAUAVVIEW' where id=9; -update noar tt set b0='NZC789TBRYH9UEARWEEW29JDB' where id=9; -update noar ti set b0='NZC789TBRYH9UEARWEEW29JDB' where id=9; -update noar tt set v0='V' where id=9; -update noar ti set v0='V' where id=9; -update noar tt set b1='VLNMWZEIS8N' where id=9; -update noar ti set b1='VLNMWZEIS8N' where id=9; -update noar tt set v0='UBRT' where id=9; -update noar ti set v0='UBRT' where id=9; -update noar tt set b2='2KS' where id=9; -update noar ti set b2='2KS' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 blob not null, -b1 mediumblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='6D' where id=1; -update noar ti set v0='6D' where id=1; -update noar tt set b0='CZJP6U7EQG1VS0M' where id=1; -update noar ti set b0='CZJP6U7EQG1VS0M' where id=1; -update noar tt set v0='TE0M8ZPFM5N1ECJ16V' where id=1; -update noar ti set v0='TE0M8ZPFM5N1ECJ16V' where id=1; -update noar tt set b1='IR3QPVQITLAQZKNP4EURIO9VDD' where id=1; -update noar ti set b1='IR3QPVQITLAQZKNP4EURIO9VDD' where id=1; -update noar tt set v0='XICTDK24N8LCJEKUSV0I9A31FZK' where id=1; -update noar ti set v0='XICTDK24N8LCJEKUSV0I9A31FZK' where id=1; -update noar tt set b2='87XEHIEXPU1ZRXXZ8A1SUON0J6FFE5Z' where id=1; -update noar ti set b2='87XEHIEXPU1ZRXXZ8A1SUON0J6FFE5Z' where id=1; -update noar tt set v0='TSKU5P3DH09' where id=2; -update noar ti set v0='TSKU5P3DH09' where id=2; -update noar tt set b0='8WAKINKY' where id=2; -update noar ti set b0='8WAKINKY' where id=2; -update noar tt set v0='GHAVEO37WC2DVU457H8' where id=2; -update noar ti set v0='GHAVEO37WC2DVU457H8' where id=2; -update noar tt set b1='KZIEEZK6O10DLXXM3VT34OZ740EF54ZS' where id=2; -update noar ti set b1='KZIEEZK6O10DLXXM3VT34OZ740EF54ZS' where id=2; -update noar tt set v0='0X5GW' where id=2; -update noar ti set v0='0X5GW' where id=2; -update noar tt set b2='T1FIJ98O85PRWJKKU81BTM' where id=2; -update noar ti set b2='T1FIJ98O85PRWJKKU81BTM' where id=2; -update noar tt set v0='PT8THOOEEYT' where id=3; -update noar ti set v0='PT8THOOEEYT' where id=3; -update noar tt set b0='0U985NFT6MZ7EQ8BGEIAD' where id=3; -update noar ti set b0='0U985NFT6MZ7EQ8BGEIAD' where id=3; -update noar tt set v0='MZ' where id=3; -update noar ti set v0='MZ' where id=3; -update noar tt set b1='FQI0VEJ' where id=3; -update noar ti set b1='FQI0VEJ' where id=3; -update noar tt set v0='AN4YWWXOUIH7SBVK5XCRRZFG055D611Z' where id=3; -update noar ti set v0='AN4YWWXOUIH7SBVK5XCRRZFG055D611Z' where id=3; -update noar tt set b2='5U' where id=3; -update noar ti set b2='5U' where id=3; -update noar tt set v0='8I' where id=4; -update noar ti set v0='8I' where id=4; -update noar tt set b0='KM8NE8283ULA6DSASU5P4RFX8H6L9V' where id=4; -update noar ti set b0='KM8NE8283ULA6DSASU5P4RFX8H6L9V' where id=4; -update noar tt set v0='ERIS9HADIZWSBCBTSQZOEXQFKI' where id=4; -update noar ti set v0='ERIS9HADIZWSBCBTSQZOEXQFKI' where id=4; -update noar tt set b1='2SZJWI94RJLNS' where id=4; -update noar ti set b1='2SZJWI94RJLNS' where id=4; -update noar tt set v0='USWCFOEDAHHR' where id=4; -update noar ti set v0='USWCFOEDAHHR' where id=4; -update noar tt set b2='PPF3GR12GMF6OJDPGI8E0PPYKZCQ' where id=4; -update noar ti set b2='PPF3GR12GMF6OJDPGI8E0PPYKZCQ' where id=4; -update noar tt set v0='ROCN1XQKX1MBYHZXDUJSSB87UDEY8CR' where id=5; -update noar ti set v0='ROCN1XQKX1MBYHZXDUJSSB87UDEY8CR' where id=5; -update noar tt set b0='NV0GFI' where id=5; -update noar ti set b0='NV0GFI' where id=5; -update noar tt set v0='N8T87BRHF3Q3SQCR0W' where id=5; -update noar ti set v0='N8T87BRHF3Q3SQCR0W' where id=5; -update noar tt set b1='XXJBEY5Z3UMGHOR7X45K8M' where id=5; -update noar ti set b1='XXJBEY5Z3UMGHOR7X45K8M' where id=5; -update noar tt set v0='P98TEYUOP3W60HGNW7V1EC8' where id=5; -update noar ti set v0='P98TEYUOP3W60HGNW7V1EC8' where id=5; -update noar tt set b2='3IYH0F0KMJJKZ621RJAAC6ZLSV' where id=5; -update noar ti set b2='3IYH0F0KMJJKZ621RJAAC6ZLSV' where id=5; -update noar tt set v0='GAAK6QY2S14UAR' where id=6; -update noar ti set v0='GAAK6QY2S14UAR' where id=6; -update noar tt set b0='RMH4M0WQ330UF' where id=6; -update noar ti set b0='RMH4M0WQ330UF' where id=6; -update noar tt set v0='3CA2NADO' where id=6; -update noar ti set v0='3CA2NADO' where id=6; -update noar tt set b1='6TDHSCS7K27JXY88C9P35JO' where id=6; -update noar ti set b1='6TDHSCS7K27JXY88C9P35JO' where id=6; -update noar tt set v0='JS9H6JEL4JUG9EO1YJ' where id=6; -update noar ti set v0='JS9H6JEL4JUG9EO1YJ' where id=6; -update noar tt set b2='7SPM' where id=6; -update noar ti set b2='7SPM' where id=6; -update noar tt set v0='15YPH9FN2MBHPI' where id=7; -update noar ti set v0='15YPH9FN2MBHPI' where id=7; -update noar tt set b0='FU32E5KY4H96Y96J45LMKL' where id=7; -update noar ti set b0='FU32E5KY4H96Y96J45LMKL' where id=7; -update noar tt set v0='UR4ZFQI36WJ' where id=7; -update noar ti set v0='UR4ZFQI36WJ' where id=7; -update noar tt set b1='MIWL503XT51Q1BZOS9JD45JGI2EEJQJ' where id=7; -update noar ti set b1='MIWL503XT51Q1BZOS9JD45JGI2EEJQJ' where id=7; -update noar tt set v0='H1VNR2' where id=7; -update noar ti set v0='H1VNR2' where id=7; -update noar tt set b2='EC' where id=7; -update noar ti set b2='EC' where id=7; -update noar tt set v0='ELEV9QVTWUGZAANIBJUVB6' where id=8; -update noar ti set v0='ELEV9QVTWUGZAANIBJUVB6' where id=8; -update noar tt set b0='1TYUDZGJTV1HFLIBSBNNJX5' where id=8; -update noar ti set b0='1TYUDZGJTV1HFLIBSBNNJX5' where id=8; -update noar tt set v0='PO1U6484WLGTWW' where id=8; -update noar ti set v0='PO1U6484WLGTWW' where id=8; -update noar tt set b1='MPEH9668VLH4Z70DYZ5ICFJUE7RJJM' where id=8; -update noar ti set b1='MPEH9668VLH4Z70DYZ5ICFJUE7RJJM' where id=8; -update noar tt set v0='Q2EBTHWBH9AVBYG27DNEV69' where id=8; -update noar ti set v0='Q2EBTHWBH9AVBYG27DNEV69' where id=8; -update noar tt set b2='BUE1Y8' where id=8; -update noar ti set b2='BUE1Y8' where id=8; -update noar tt set v0='8716G' where id=9; -update noar ti set v0='8716G' where id=9; -update noar tt set b0='7B25VLGCY765O8X8QK1GZ01WP' where id=9; -update noar ti set b0='7B25VLGCY765O8X8QK1GZ01WP' where id=9; -update noar tt set v0='J47OLD' where id=9; -update noar ti set v0='J47OLD' where id=9; -update noar tt set b1='CNC6F3YOZM0ZBJQXNYCN1SK6B' where id=9; -update noar ti set b1='CNC6F3YOZM0ZBJQXNYCN1SK6B' where id=9; -update noar tt set v0='OUPFB1GV82TGS0R' where id=9; -update noar ti set v0='OUPFB1GV82TGS0R' where id=9; -update noar tt set b2='5OV5SO869OHGPBH3EEU1STWA7223TWID' where id=9; -update noar ti set b2='5OV5SO869OHGPBH3EEU1STWA7223TWID' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 blob not null, -b1 mediumblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='BQIG0V48MQ' where id=1; -update noar ti set v0='BQIG0V48MQ' where id=1; -update noar tt set b0='U' where id=1; -update noar ti set b0='U' where id=1; -update noar tt set v0='KJ70PJMRUE9CG3QVAIWZCHCB94SNP' where id=1; -update noar ti set v0='KJ70PJMRUE9CG3QVAIWZCHCB94SNP' where id=1; -update noar tt set b1='7BVHTXKW0FGX5AH1QBZIRSB4H45CB8D' where id=1; -update noar ti set b1='7BVHTXKW0FGX5AH1QBZIRSB4H45CB8D' where id=1; -update noar tt set v0='UKZOK7WDUMP4CHYTGFA693ISOCQ5SJR' where id=1; -update noar ti set v0='UKZOK7WDUMP4CHYTGFA693ISOCQ5SJR' where id=1; -update noar tt set b2='LSVX4CP3AFZ1MJRPJ1M03345OBN7056S' where id=1; -update noar ti set b2='LSVX4CP3AFZ1MJRPJ1M03345OBN7056S' where id=1; -update noar tt set v0='IY22HYGFBU2J91G4RVA7L' where id=2; -update noar ti set v0='IY22HYGFBU2J91G4RVA7L' where id=2; -update noar tt set b0='96TX' where id=2; -update noar ti set b0='96TX' where id=2; -update noar tt set v0='6F26Y3SF30AORMCLT3P0QBW' where id=2; -update noar ti set v0='6F26Y3SF30AORMCLT3P0QBW' where id=2; -update noar tt set b1='37' where id=2; -update noar ti set b1='37' where id=2; -update noar tt set v0='GM1VUV4IE2Z8TSLDKPIC8O3LEE' where id=2; -update noar ti set v0='GM1VUV4IE2Z8TSLDKPIC8O3LEE' where id=2; -update noar tt set b2='7XTV' where id=2; -update noar ti set b2='7XTV' where id=2; -update noar tt set v0='2OJDOPU4W5U2QAAGQS' where id=3; -update noar ti set v0='2OJDOPU4W5U2QAAGQS' where id=3; -update noar tt set b0='STO31HDZ9' where id=3; -update noar ti set b0='STO31HDZ9' where id=3; -update noar tt set v0='BEV9C295UUTGU6JKSSXP0RTHFM' where id=3; -update noar ti set v0='BEV9C295UUTGU6JKSSXP0RTHFM' where id=3; -update noar tt set b1='3IS6GS' where id=3; -update noar ti set b1='3IS6GS' where id=3; -update noar tt set v0='KXMB3YLGU5Q08Q0K2GRKYX' where id=3; -update noar ti set v0='KXMB3YLGU5Q08Q0K2GRKYX' where id=3; -update noar tt set b2='26PKN10' where id=3; -update noar ti set b2='26PKN10' where id=3; -update noar tt set v0='D429CLUHMO8ZI4HY4NX0QM7BGV11' where id=4; -update noar ti set v0='D429CLUHMO8ZI4HY4NX0QM7BGV11' where id=4; -update noar tt set b0='QBDPZTZU3S3F' where id=4; -update noar ti set b0='QBDPZTZU3S3F' where id=4; -update noar tt set v0='J282VL9NUXXG4VA933TZQ' where id=4; -update noar ti set v0='J282VL9NUXXG4VA933TZQ' where id=4; -update noar tt set b1='MBFGCOZQJGZX2L7E2MEOOR6VZVNJW' where id=4; -update noar ti set b1='MBFGCOZQJGZX2L7E2MEOOR6VZVNJW' where id=4; -update noar tt set v0='ZWXY974S38FMBFV' where id=4; -update noar ti set v0='ZWXY974S38FMBFV' where id=4; -update noar tt set b2='XHU6OPXEQ080X266J04A0KH' where id=4; -update noar ti set b2='XHU6OPXEQ080X266J04A0KH' where id=4; -update noar tt set v0='1M6B87GOIVIPCSZ1F9' where id=5; -update noar ti set v0='1M6B87GOIVIPCSZ1F9' where id=5; -update noar tt set b0='4WLW2SH71KNBDY3QIX2EYPKGW' where id=5; -update noar ti set b0='4WLW2SH71KNBDY3QIX2EYPKGW' where id=5; -update noar tt set v0='R55W4ZB' where id=5; -update noar ti set v0='R55W4ZB' where id=5; -update noar tt set b1='E' where id=5; -update noar ti set b1='E' where id=5; -update noar tt set v0='O5UJTSY' where id=5; -update noar ti set v0='O5UJTSY' where id=5; -update noar tt set b2='ECGI50WCOC6QZ5GIRKRRD9DBZSJK' where id=5; -update noar ti set b2='ECGI50WCOC6QZ5GIRKRRD9DBZSJK' where id=5; -update noar tt set v0='X60PKVKDN7SUFYB' where id=6; -update noar ti set v0='X60PKVKDN7SUFYB' where id=6; -update noar tt set b0='V06T6G9KYONYW7S5YI2' where id=6; -update noar ti set b0='V06T6G9KYONYW7S5YI2' where id=6; -update noar tt set v0='EHTX6L1Q087I8QD13YTLC99F' where id=6; -update noar ti set v0='EHTX6L1Q087I8QD13YTLC99F' where id=6; -update noar tt set b1='G520YS1MHUT7O11WYC' where id=6; -update noar ti set b1='G520YS1MHUT7O11WYC' where id=6; -update noar tt set v0='MPOIMTQBBJGX0RX6RTO1Z0O' where id=6; -update noar ti set v0='MPOIMTQBBJGX0RX6RTO1Z0O' where id=6; -update noar tt set b2='38I' where id=6; -update noar ti set b2='38I' where id=6; -update noar tt set v0='01VEGNGP53I4DT3XWTFO4802RW' where id=7; -update noar ti set v0='01VEGNGP53I4DT3XWTFO4802RW' where id=7; -update noar tt set b0='L5C75GGHCZ9SWIJVTAXTI' where id=7; -update noar ti set b0='L5C75GGHCZ9SWIJVTAXTI' where id=7; -update noar tt set v0='H' where id=7; -update noar ti set v0='H' where id=7; -update noar tt set b1='JRXS4NN4KWTDW3010HQZA2JFS' where id=7; -update noar ti set b1='JRXS4NN4KWTDW3010HQZA2JFS' where id=7; -update noar tt set v0='XKGDKH6AO98944HFOBH' where id=7; -update noar ti set v0='XKGDKH6AO98944HFOBH' where id=7; -update noar tt set b2='NXG04X' where id=7; -update noar ti set b2='NXG04X' where id=7; -update noar tt set v0='8T6K0ZTSNZMZOQVT6QE' where id=8; -update noar ti set v0='8T6K0ZTSNZMZOQVT6QE' where id=8; -update noar tt set b0='EBCF1LXUI3BW7ZG9' where id=8; -update noar ti set b0='EBCF1LXUI3BW7ZG9' where id=8; -update noar tt set v0='4H93DK64' where id=8; -update noar ti set v0='4H93DK64' where id=8; -update noar tt set b1='TY5085JCOHSIURQRINI1' where id=8; -update noar ti set b1='TY5085JCOHSIURQRINI1' where id=8; -update noar tt set v0='EG4DI9M18EIDKLSI3ACB3Y6MW4YYUJ' where id=8; -update noar ti set v0='EG4DI9M18EIDKLSI3ACB3Y6MW4YYUJ' where id=8; -update noar tt set b2='DXKYOVX2P4PF' where id=8; -update noar ti set b2='DXKYOVX2P4PF' where id=8; -update noar tt set v0='5W0' where id=9; -update noar ti set v0='5W0' where id=9; -update noar tt set b0='V002D73J66' where id=9; -update noar ti set b0='V002D73J66' where id=9; -update noar tt set v0='VEX5KQOZYNC1NJ1YJHXEEG92W199ACHS' where id=9; -update noar ti set v0='VEX5KQOZYNC1NJ1YJHXEEG92W199ACHS' where id=9; -update noar tt set b1='QSIBF6VC44RR6J3THXL55QDN9ISGAHX0' where id=9; -update noar ti set b1='QSIBF6VC44RR6J3THXL55QDN9ISGAHX0' where id=9; -update noar tt set v0='AUMWUDDXSX7751FZ292NOZ7GK3C' where id=9; -update noar ti set v0='AUMWUDDXSX7751FZ292NOZ7GK3C' where id=9; -update noar tt set b2='K021K' where id=9; -update noar ti set b2='K021K' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 blob null, -b1 mediumblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='0WE13K3D0WQ79RMKLJB94AVWB1' where id=1; -update noar ti set v0='0WE13K3D0WQ79RMKLJB94AVWB1' where id=1; -update noar tt set b0='WTPMT9GNO2SX4L704AO8' where id=1; -update noar ti set b0='WTPMT9GNO2SX4L704AO8' where id=1; -update noar tt set v0='UPP6' where id=1; -update noar ti set v0='UPP6' where id=1; -update noar tt set b1='5SNSUW0D35GFQL4YVJMA5KMXE' where id=1; -update noar ti set b1='5SNSUW0D35GFQL4YVJMA5KMXE' where id=1; -update noar tt set v0='791AWJYXW0OLL9A6BUPDU' where id=1; -update noar ti set v0='791AWJYXW0OLL9A6BUPDU' where id=1; -update noar tt set b2='6N0TMADS' where id=1; -update noar ti set b2='6N0TMADS' where id=1; -update noar tt set v0='0UPUGWCOPUTSO' where id=2; -update noar ti set v0='0UPUGWCOPUTSO' where id=2; -update noar tt set b0='BHW81UO6TMVGGTLB0V8CB56VH' where id=2; -update noar ti set b0='BHW81UO6TMVGGTLB0V8CB56VH' where id=2; -update noar tt set v0='L1Q' where id=2; -update noar ti set v0='L1Q' where id=2; -update noar tt set b1='DKQK78FKYWKL3MNE4WLS' where id=2; -update noar ti set b1='DKQK78FKYWKL3MNE4WLS' where id=2; -update noar tt set v0='ZMZ3ZCRE6DU0LESKX7OFE76CMUS' where id=2; -update noar ti set v0='ZMZ3ZCRE6DU0LESKX7OFE76CMUS' where id=2; -update noar tt set b2='U5YYORW586TJJYAHMSZZ83' where id=2; -update noar ti set b2='U5YYORW586TJJYAHMSZZ83' where id=2; -update noar tt set v0='TK2MS' where id=3; -update noar ti set v0='TK2MS' where id=3; -update noar tt set b0='RT6ZI1IRXFAVG' where id=3; -update noar ti set b0='RT6ZI1IRXFAVG' where id=3; -update noar tt set v0='DNHVUO348NNKBURNBZJ2XTSOTFBG11Q' where id=3; -update noar ti set v0='DNHVUO348NNKBURNBZJ2XTSOTFBG11Q' where id=3; -update noar tt set b1='59OBESBU4ZLIUM9NUU4BXQP' where id=3; -update noar ti set b1='59OBESBU4ZLIUM9NUU4BXQP' where id=3; -update noar tt set v0='MJ5FY2R8BQ2V9WZNEZGE82LJ87JZPWC4' where id=3; -update noar ti set v0='MJ5FY2R8BQ2V9WZNEZGE82LJ87JZPWC4' where id=3; -update noar tt set b2='9CBAXDODBKZCTJLVI2K2' where id=3; -update noar ti set b2='9CBAXDODBKZCTJLVI2K2' where id=3; -update noar tt set v0='LJG7HWD8Z5SM0F8R4O79UPED' where id=4; -update noar ti set v0='LJG7HWD8Z5SM0F8R4O79UPED' where id=4; -update noar tt set b0='XQ3VBWD93A2IDW9' where id=4; -update noar ti set b0='XQ3VBWD93A2IDW9' where id=4; -update noar tt set v0='I5X' where id=4; -update noar ti set v0='I5X' where id=4; -update noar tt set b1='FGT79W7UXB5U35CWY' where id=4; -update noar ti set b1='FGT79W7UXB5U35CWY' where id=4; -update noar tt set v0='5JWPVJDMJI7LEDHPMI1RA5FA6G5EGHEB' where id=4; -update noar ti set v0='5JWPVJDMJI7LEDHPMI1RA5FA6G5EGHEB' where id=4; -update noar tt set b2='GL7SJT' where id=4; -update noar ti set b2='GL7SJT' where id=4; -update noar tt set v0='NDMJXT8BQVZ0GKBD0RJ4E8KZL' where id=5; -update noar ti set v0='NDMJXT8BQVZ0GKBD0RJ4E8KZL' where id=5; -update noar tt set b0='JJHB9BLEFUUJYBNEEZALJQ5R17' where id=5; -update noar ti set b0='JJHB9BLEFUUJYBNEEZALJQ5R17' where id=5; -update noar tt set v0='2BLNFM2N6MNU2T' where id=5; -update noar ti set v0='2BLNFM2N6MNU2T' where id=5; -update noar tt set b1='P6YDETIJZ015' where id=5; -update noar ti set b1='P6YDETIJZ015' where id=5; -update noar tt set v0='7OD1C0FVLAI2J87OBF1TY39H' where id=5; -update noar ti set v0='7OD1C0FVLAI2J87OBF1TY39H' where id=5; -update noar tt set b2='NYMBT1' where id=5; -update noar ti set b2='NYMBT1' where id=5; -update noar tt set v0='T0LQILREIUB0OA9T2U7A' where id=6; -update noar ti set v0='T0LQILREIUB0OA9T2U7A' where id=6; -update noar tt set b0='2' where id=6; -update noar ti set b0='2' where id=6; -update noar tt set v0='QQM4507UPABZ30K7OG' where id=6; -update noar ti set v0='QQM4507UPABZ30K7OG' where id=6; -update noar tt set b1='BQIESDUYAEN' where id=6; -update noar ti set b1='BQIESDUYAEN' where id=6; -update noar tt set v0='Q02BFLEZ23IXYNPX2' where id=6; -update noar ti set v0='Q02BFLEZ23IXYNPX2' where id=6; -update noar tt set b2='HFLGOSNLQ8CUD7ZC4B1RDJG' where id=6; -update noar ti set b2='HFLGOSNLQ8CUD7ZC4B1RDJG' where id=6; -update noar tt set v0='29' where id=7; -update noar ti set v0='29' where id=7; -update noar tt set b0='PM8VWHIOIAQUQHZDOE2E2O0QPCG46W' where id=7; -update noar ti set b0='PM8VWHIOIAQUQHZDOE2E2O0QPCG46W' where id=7; -update noar tt set v0='OW39W1EZXS' where id=7; -update noar ti set v0='OW39W1EZXS' where id=7; -update noar tt set b1='OJOHE7DCQG76ZL61IO4BT1S4G5' where id=7; -update noar ti set b1='OJOHE7DCQG76ZL61IO4BT1S4G5' where id=7; -update noar tt set v0='CO93IP1J4XOLTM2QPU49NGUJRFN1' where id=7; -update noar ti set v0='CO93IP1J4XOLTM2QPU49NGUJRFN1' where id=7; -update noar tt set b2='Y' where id=7; -update noar ti set b2='Y' where id=7; -update noar tt set v0='500ZCJ2RPANJ4OXGA2CU66O7XW9ELZEP' where id=8; -update noar ti set v0='500ZCJ2RPANJ4OXGA2CU66O7XW9ELZEP' where id=8; -update noar tt set b0='OANLK0Y' where id=8; -update noar ti set b0='OANLK0Y' where id=8; -update noar tt set v0='8Z9J6S' where id=8; -update noar ti set v0='8Z9J6S' where id=8; -update noar tt set b1='H1D159L47A0AZRJUHQECXX38DQ4R3' where id=8; -update noar ti set b1='H1D159L47A0AZRJUHQECXX38DQ4R3' where id=8; -update noar tt set v0='KR1UA5IF' where id=8; -update noar ti set v0='KR1UA5IF' where id=8; -update noar tt set b2='QRSQOZJMEA6ABGQUMYN' where id=8; -update noar ti set b2='QRSQOZJMEA6ABGQUMYN' where id=8; -update noar tt set v0='M8LT4DQSM093C5T' where id=9; -update noar ti set v0='M8LT4DQSM093C5T' where id=9; -update noar tt set b0='A05A27K1U2U' where id=9; -update noar ti set b0='A05A27K1U2U' where id=9; -update noar tt set v0='7OJULO' where id=9; -update noar ti set v0='7OJULO' where id=9; -update noar tt set b1='MG1Y3' where id=9; -update noar ti set b1='MG1Y3' where id=9; -update noar tt set v0='5JJMFU06GXV4OQL20O8E1J' where id=9; -update noar ti set v0='5JJMFU06GXV4OQL20O8E1J' where id=9; -update noar tt set b2='3XA5SYLOVMRZUS' where id=9; -update noar ti set b2='3XA5SYLOVMRZUS' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 blob null, -b1 mediumblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='97E1XUJ9XDI1W147HASZVGKQ91WCTU1R' where id=1; -update noar ti set v0='97E1XUJ9XDI1W147HASZVGKQ91WCTU1R' where id=1; -update noar tt set b0='KM' where id=1; -update noar ti set b0='KM' where id=1; -update noar tt set v0='0C' where id=1; -update noar ti set v0='0C' where id=1; -update noar tt set b1='IMR' where id=1; -update noar ti set b1='IMR' where id=1; -update noar tt set v0='GR' where id=1; -update noar ti set v0='GR' where id=1; -update noar tt set b2='CUGV1US' where id=1; -update noar ti set b2='CUGV1US' where id=1; -update noar tt set v0='Q8KGM96QGRPDN7QDCKYGKXR' where id=2; -update noar ti set v0='Q8KGM96QGRPDN7QDCKYGKXR' where id=2; -update noar tt set b0='MUZ5WXICBS2WBB1GPR48OEMVJSHN6NRJ' where id=2; -update noar ti set b0='MUZ5WXICBS2WBB1GPR48OEMVJSHN6NRJ' where id=2; -update noar tt set v0='E6FESUB7U988XRFL3XYC' where id=2; -update noar ti set v0='E6FESUB7U988XRFL3XYC' where id=2; -update noar tt set b1='OQMLS9NS5BYY' where id=2; -update noar ti set b1='OQMLS9NS5BYY' where id=2; -update noar tt set v0='MOIC92LMU2QS44ZUFSGC23EH7YAT' where id=2; -update noar ti set v0='MOIC92LMU2QS44ZUFSGC23EH7YAT' where id=2; -update noar tt set b2='R5G0CJO331FI' where id=2; -update noar ti set b2='R5G0CJO331FI' where id=2; -update noar tt set v0='LR8UZMQF5QYGVR6NA62T2' where id=3; -update noar ti set v0='LR8UZMQF5QYGVR6NA62T2' where id=3; -update noar tt set b0='EGCBWS7D1ET1PQL1J' where id=3; -update noar ti set b0='EGCBWS7D1ET1PQL1J' where id=3; -update noar tt set v0='CI2MG09ZO' where id=3; -update noar ti set v0='CI2MG09ZO' where id=3; -update noar tt set b1='LMAF' where id=3; -update noar ti set b1='LMAF' where id=3; -update noar tt set v0='MC0RXWCTJHYR0FDNSN7WBTMXQ4BZ7E' where id=3; -update noar ti set v0='MC0RXWCTJHYR0FDNSN7WBTMXQ4BZ7E' where id=3; -update noar tt set b2='GC8UP' where id=3; -update noar ti set b2='GC8UP' where id=3; -update noar tt set v0='JJ0I4Y48D1S' where id=4; -update noar ti set v0='JJ0I4Y48D1S' where id=4; -update noar tt set b0='X' where id=4; -update noar ti set b0='X' where id=4; -update noar tt set v0='FW' where id=4; -update noar ti set v0='FW' where id=4; -update noar tt set b1='NQYPVRA9ICAVR5CNXU9PUQWOK11' where id=4; -update noar ti set b1='NQYPVRA9ICAVR5CNXU9PUQWOK11' where id=4; -update noar tt set v0='TMYFTZC47R0SL1RLJKGH101QQ9CDILM' where id=4; -update noar ti set v0='TMYFTZC47R0SL1RLJKGH101QQ9CDILM' where id=4; -update noar tt set b2='REDHGMH0J94R05GBYRMV31PP' where id=4; -update noar ti set b2='REDHGMH0J94R05GBYRMV31PP' where id=4; -update noar tt set v0='LCC13I41I2XPNQ6' where id=5; -update noar ti set v0='LCC13I41I2XPNQ6' where id=5; -update noar tt set b0='NMDYFPN4KNCKGY' where id=5; -update noar ti set b0='NMDYFPN4KNCKGY' where id=5; -update noar tt set v0='R85LLOZ1YPPDZNXRGD4PZA19EH9VITR' where id=5; -update noar ti set v0='R85LLOZ1YPPDZNXRGD4PZA19EH9VITR' where id=5; -update noar tt set b1='8XZLATWQBYJN' where id=5; -update noar ti set b1='8XZLATWQBYJN' where id=5; -update noar tt set v0='731YTQFDAV7TG60HL2DTG' where id=5; -update noar ti set v0='731YTQFDAV7TG60HL2DTG' where id=5; -update noar tt set b2='1LR7EA' where id=5; -update noar ti set b2='1LR7EA' where id=5; -update noar tt set v0='WXS3LI82FMETYPW' where id=6; -update noar ti set v0='WXS3LI82FMETYPW' where id=6; -update noar tt set b0='92TQ0TVCY82PO6DZI1HOMDO' where id=6; -update noar ti set b0='92TQ0TVCY82PO6DZI1HOMDO' where id=6; -update noar tt set v0='8U8QE01IQ0' where id=6; -update noar ti set v0='8U8QE01IQ0' where id=6; -update noar tt set b1='4GTENHIUJP6U' where id=6; -update noar ti set b1='4GTENHIUJP6U' where id=6; -update noar tt set v0='DR07ASCBKRZ9U51O9G7' where id=6; -update noar ti set v0='DR07ASCBKRZ9U51O9G7' where id=6; -update noar tt set b2='DHAHWE4' where id=6; -update noar ti set b2='DHAHWE4' where id=6; -update noar tt set v0='Y5N0ERXN7FKT' where id=7; -update noar ti set v0='Y5N0ERXN7FKT' where id=7; -update noar tt set b0='PCXS9N2C1IVE1KS28WD' where id=7; -update noar ti set b0='PCXS9N2C1IVE1KS28WD' where id=7; -update noar tt set v0='71FR6QH1KQD581Y144X51PI8YWHSK' where id=7; -update noar ti set v0='71FR6QH1KQD581Y144X51PI8YWHSK' where id=7; -update noar tt set b1='J429Q3RB3FV' where id=7; -update noar ti set b1='J429Q3RB3FV' where id=7; -update noar tt set v0='271YT7XLN7IW2VBG0C1K9YAR19Z1C' where id=7; -update noar ti set v0='271YT7XLN7IW2VBG0C1K9YAR19Z1C' where id=7; -update noar tt set b2='M77C' where id=7; -update noar ti set b2='M77C' where id=7; -update noar tt set v0='SX1I46X0P3BQ3A1DNZ5URHN08' where id=8; -update noar ti set v0='SX1I46X0P3BQ3A1DNZ5URHN08' where id=8; -update noar tt set b0='LI66Y7W93T' where id=8; -update noar ti set b0='LI66Y7W93T' where id=8; -update noar tt set v0='5DC5GIO5PIWAWOX' where id=8; -update noar ti set v0='5DC5GIO5PIWAWOX' where id=8; -update noar tt set b1='W5DJV7YMJVTZKOEXHI7PRNDRB' where id=8; -update noar ti set b1='W5DJV7YMJVTZKOEXHI7PRNDRB' where id=8; -update noar tt set v0='RM3WVK573' where id=8; -update noar ti set v0='RM3WVK573' where id=8; -update noar tt set b2='1' where id=8; -update noar ti set b2='1' where id=8; -update noar tt set v0='4W2QI5PAA' where id=9; -update noar ti set v0='4W2QI5PAA' where id=9; -update noar tt set b0='BGAWIR' where id=9; -update noar ti set b0='BGAWIR' where id=9; -update noar tt set v0='L0BM2G10OYDC2YIS8CV192VBFWOX93P' where id=9; -update noar ti set v0='L0BM2G10OYDC2YIS8CV192VBFWOX93P' where id=9; -update noar tt set b1='8V3550SQJ6RXO96DUBW8XMMLVSG' where id=9; -update noar ti set b1='8V3550SQJ6RXO96DUBW8XMMLVSG' where id=9; -update noar tt set v0='VHD' where id=9; -update noar ti set v0='VHD' where id=9; -update noar tt set b2='QM0T3O' where id=9; -update noar ti set b2='QM0T3O' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 blob not null, -b1 mediumblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='HDMWJEJYITMNNYX1U' where id=1; -update noar ti set v0='HDMWJEJYITMNNYX1U' where id=1; -update noar tt set b0='0CS51LUJW7T19KR9E01PJH' where id=1; -update noar ti set b0='0CS51LUJW7T19KR9E01PJH' where id=1; -update noar tt set v0='A8KX4XZW1DJH751UEJ4HZ1SX' where id=1; -update noar ti set v0='A8KX4XZW1DJH751UEJ4HZ1SX' where id=1; -update noar tt set b1='34KYR48KNOCK4' where id=1; -update noar ti set b1='34KYR48KNOCK4' where id=1; -update noar tt set v0='I1WQ9IZL0OIBEXOB244CVAZE0BKMVO' where id=1; -update noar ti set v0='I1WQ9IZL0OIBEXOB244CVAZE0BKMVO' where id=1; -update noar tt set b2='Y7ATFNYO7' where id=1; -update noar ti set b2='Y7ATFNYO7' where id=1; -update noar tt set v0='J9RS8XGCJQ6' where id=2; -update noar ti set v0='J9RS8XGCJQ6' where id=2; -update noar tt set b0='HXVFI3ST5Z5P3YLH7GE2J3OGHTD0IW1' where id=2; -update noar ti set b0='HXVFI3ST5Z5P3YLH7GE2J3OGHTD0IW1' where id=2; -update noar tt set v0='JABWAPPSQ1V4K7FC68ZLO5JL' where id=2; -update noar ti set v0='JABWAPPSQ1V4K7FC68ZLO5JL' where id=2; -update noar tt set b1='M77MS2' where id=2; -update noar ti set b1='M77MS2' where id=2; -update noar tt set v0='F0QU' where id=2; -update noar ti set v0='F0QU' where id=2; -update noar tt set b2='P88ZN2NN3KLP3OSRR33QJQ9P0SB' where id=2; -update noar ti set b2='P88ZN2NN3KLP3OSRR33QJQ9P0SB' where id=2; -update noar tt set v0='3JLU366FB18V4ZTEK601WB' where id=3; -update noar ti set v0='3JLU366FB18V4ZTEK601WB' where id=3; -update noar tt set b0='5ESQRKIXY8H13ZGCB9Z' where id=3; -update noar ti set b0='5ESQRKIXY8H13ZGCB9Z' where id=3; -update noar tt set v0='A4NE543FUM' where id=3; -update noar ti set v0='A4NE543FUM' where id=3; -update noar tt set b1='Q9AXGAPOHCY' where id=3; -update noar ti set b1='Q9AXGAPOHCY' where id=3; -update noar tt set v0='H1BGXUBT1HR4GSVZDMU2LVVVWT5NKPLU' where id=3; -update noar ti set v0='H1BGXUBT1HR4GSVZDMU2LVVVWT5NKPLU' where id=3; -update noar tt set b2='O7SQ5ML' where id=3; -update noar ti set b2='O7SQ5ML' where id=3; -update noar tt set v0='3AF' where id=4; -update noar ti set v0='3AF' where id=4; -update noar tt set b0='24JPTNJHV4Q1FIPZB7Q' where id=4; -update noar ti set b0='24JPTNJHV4Q1FIPZB7Q' where id=4; -update noar tt set v0='CCNO07GXFY' where id=4; -update noar ti set v0='CCNO07GXFY' where id=4; -update noar tt set b1='7QPS4' where id=4; -update noar ti set b1='7QPS4' where id=4; -update noar tt set v0='MDE24SRIYDSB9ZPH82253JJV' where id=4; -update noar ti set v0='MDE24SRIYDSB9ZPH82253JJV' where id=4; -update noar tt set b2='VFRMUS9P5H27USAPL8BOTXYHBC' where id=4; -update noar ti set b2='VFRMUS9P5H27USAPL8BOTXYHBC' where id=4; -update noar tt set v0='3HGOMKYBF' where id=5; -update noar ti set v0='3HGOMKYBF' where id=5; -update noar tt set b0='K47L33M365G' where id=5; -update noar ti set b0='K47L33M365G' where id=5; -update noar tt set v0='1M9B6O16X' where id=5; -update noar ti set v0='1M9B6O16X' where id=5; -update noar tt set b1='YHGWSUZ7S4' where id=5; -update noar ti set b1='YHGWSUZ7S4' where id=5; -update noar tt set v0='1D20' where id=5; -update noar ti set v0='1D20' where id=5; -update noar tt set b2='3OTDQC8B22SHV9HO1SDOI6VFDZAE' where id=5; -update noar ti set b2='3OTDQC8B22SHV9HO1SDOI6VFDZAE' where id=5; -update noar tt set v0='8GT639GS7HP' where id=6; -update noar ti set v0='8GT639GS7HP' where id=6; -update noar tt set b0='KL1DV74H8' where id=6; -update noar ti set b0='KL1DV74H8' where id=6; -update noar tt set v0='9GSU3G915K9PI5O6VVZ83RMOFHD9U' where id=6; -update noar ti set v0='9GSU3G915K9PI5O6VVZ83RMOFHD9U' where id=6; -update noar tt set b1='9ML6HBFTGEETGA5J5KC7RXOK' where id=6; -update noar ti set b1='9ML6HBFTGEETGA5J5KC7RXOK' where id=6; -update noar tt set v0='L09UQWOTR5K9R526RESABLN' where id=6; -update noar ti set v0='L09UQWOTR5K9R526RESABLN' where id=6; -update noar tt set b2='G46BCWJHCQBUWL6X8NC607N' where id=6; -update noar ti set b2='G46BCWJHCQBUWL6X8NC607N' where id=6; -update noar tt set v0='N1' where id=7; -update noar ti set v0='N1' where id=7; -update noar tt set b0='VEP93ONIHZF02XFHZ' where id=7; -update noar ti set b0='VEP93ONIHZF02XFHZ' where id=7; -update noar tt set v0='RIC7B5NAEHXR' where id=7; -update noar ti set v0='RIC7B5NAEHXR' where id=7; -update noar tt set b1='74MCMDA5RH2QLUWSNJA1NN2H21XP' where id=7; -update noar ti set b1='74MCMDA5RH2QLUWSNJA1NN2H21XP' where id=7; -update noar tt set v0='M72KS5ODPA8MB' where id=7; -update noar ti set v0='M72KS5ODPA8MB' where id=7; -update noar tt set b2='5SGGCFJN7X1' where id=7; -update noar ti set b2='5SGGCFJN7X1' where id=7; -update noar tt set v0='DAZX3NSXB0OBPPQ' where id=8; -update noar ti set v0='DAZX3NSXB0OBPPQ' where id=8; -update noar tt set b0='U61RD7IEXFT7Y7Y6QTRJ' where id=8; -update noar ti set b0='U61RD7IEXFT7Y7Y6QTRJ' where id=8; -update noar tt set v0='FR445O9YLXSF2R0GASN041L7KCRNP' where id=8; -update noar ti set v0='FR445O9YLXSF2R0GASN041L7KCRNP' where id=8; -update noar tt set b1='V18NFTREY61U0D9D93SSDWIE' where id=8; -update noar ti set b1='V18NFTREY61U0D9D93SSDWIE' where id=8; -update noar tt set v0='7OV4IW9A6S7AY7LFNOK3SCNE18G' where id=8; -update noar ti set v0='7OV4IW9A6S7AY7LFNOK3SCNE18G' where id=8; -update noar tt set b2='U9G9JWXJ43QUD5I9' where id=8; -update noar ti set b2='U9G9JWXJ43QUD5I9' where id=8; -update noar tt set v0='6ZGELJ9UVDG9D3L87PWDO' where id=9; -update noar ti set v0='6ZGELJ9UVDG9D3L87PWDO' where id=9; -update noar tt set b0='K2HD65SB2KCR9BEWN1H' where id=9; -update noar ti set b0='K2HD65SB2KCR9BEWN1H' where id=9; -update noar tt set v0='OSC2HAI079QH0RJHEB' where id=9; -update noar ti set v0='OSC2HAI079QH0RJHEB' where id=9; -update noar tt set b1='JJEJM4' where id=9; -update noar ti set b1='JJEJM4' where id=9; -update noar tt set v0='0IA' where id=9; -update noar ti set v0='0IA' where id=9; -update noar tt set b2='ZSGMQ5V2SLVBWMI7C2OY0YV' where id=9; -update noar ti set b2='ZSGMQ5V2SLVBWMI7C2OY0YV' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 blob not null, -b1 mediumblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='H2EIRBSKSKXRKA9SQRHZSHO' where id=1; -update noar ti set v0='H2EIRBSKSKXRKA9SQRHZSHO' where id=1; -update noar tt set b0='H' where id=1; -update noar ti set b0='H' where id=1; -update noar tt set v0='CV0YRCOWJVNF7RC5Y58V' where id=1; -update noar ti set v0='CV0YRCOWJVNF7RC5Y58V' where id=1; -update noar tt set b1='4P7XXZZBYOGRSDGDM513I2' where id=1; -update noar ti set b1='4P7XXZZBYOGRSDGDM513I2' where id=1; -update noar tt set v0='QWIZJ' where id=1; -update noar ti set v0='QWIZJ' where id=1; -update noar tt set b2='S6H44KS9ZJ0BWR8LCNPNIUOW53' where id=1; -update noar ti set b2='S6H44KS9ZJ0BWR8LCNPNIUOW53' where id=1; -update noar tt set v0='IDKCNNQ22UU4EF0EC7AS' where id=2; -update noar ti set v0='IDKCNNQ22UU4EF0EC7AS' where id=2; -update noar tt set b0='EXW08T6PWVVKKZVOH' where id=2; -update noar ti set b0='EXW08T6PWVVKKZVOH' where id=2; -update noar tt set v0='CO0C27QLQ' where id=2; -update noar ti set v0='CO0C27QLQ' where id=2; -update noar tt set b1='B2VN22Y4JG5Q' where id=2; -update noar ti set b1='B2VN22Y4JG5Q' where id=2; -update noar tt set v0='9D29IU2CEZ4' where id=2; -update noar ti set v0='9D29IU2CEZ4' where id=2; -update noar tt set b2='F' where id=2; -update noar ti set b2='F' where id=2; -update noar tt set v0='FMT2OIVXT7J90ZY5MCM' where id=3; -update noar ti set v0='FMT2OIVXT7J90ZY5MCM' where id=3; -update noar tt set b0='L9A2UWTTWYNY6SPB1KXZYB9Z9R6HSI6' where id=3; -update noar ti set b0='L9A2UWTTWYNY6SPB1KXZYB9Z9R6HSI6' where id=3; -update noar tt set v0='FQ2N' where id=3; -update noar ti set v0='FQ2N' where id=3; -update noar tt set b1='WPQRVGG1HT8S0Z2Y02QWA217T3' where id=3; -update noar ti set b1='WPQRVGG1HT8S0Z2Y02QWA217T3' where id=3; -update noar tt set v0='AZSSCSR' where id=3; -update noar ti set v0='AZSSCSR' where id=3; -update noar tt set b2='QYHN' where id=3; -update noar ti set b2='QYHN' where id=3; -update noar tt set v0='T1SQFDTWO' where id=4; -update noar ti set v0='T1SQFDTWO' where id=4; -update noar tt set b0='PE5YVFTX9PU504DYZM67TRLKBIS0' where id=4; -update noar ti set b0='PE5YVFTX9PU504DYZM67TRLKBIS0' where id=4; -update noar tt set v0='RY09VV1M0' where id=4; -update noar ti set v0='RY09VV1M0' where id=4; -update noar tt set b1='Z1GXL7Y3SS1VUMB' where id=4; -update noar ti set b1='Z1GXL7Y3SS1VUMB' where id=4; -update noar tt set v0='RP3JS5W5HB8JW1DJA426635I0Y0VL' where id=4; -update noar ti set v0='RP3JS5W5HB8JW1DJA426635I0Y0VL' where id=4; -update noar tt set b2='JC9EYKF3PHEONPH4U' where id=4; -update noar ti set b2='JC9EYKF3PHEONPH4U' where id=4; -update noar tt set v0='L9BU76R32OKWI145AMTUMENCZPIPU' where id=5; -update noar ti set v0='L9BU76R32OKWI145AMTUMENCZPIPU' where id=5; -update noar tt set b0='BWBEEIHFSBDTMLGXWBJSIMZ' where id=5; -update noar ti set b0='BWBEEIHFSBDTMLGXWBJSIMZ' where id=5; -update noar tt set v0='XNIY1IQLB9U513LC7I4OFFGHK9PWS' where id=5; -update noar ti set v0='XNIY1IQLB9U513LC7I4OFFGHK9PWS' where id=5; -update noar tt set b1='SWH' where id=5; -update noar ti set b1='SWH' where id=5; -update noar tt set v0='QD' where id=5; -update noar ti set v0='QD' where id=5; -update noar tt set b2='DBZTO4VYF3' where id=5; -update noar ti set b2='DBZTO4VYF3' where id=5; -update noar tt set v0='UYNJCADJ2D03DRBAEFABUQ8CEWMFUJ' where id=6; -update noar ti set v0='UYNJCADJ2D03DRBAEFABUQ8CEWMFUJ' where id=6; -update noar tt set b0='1OH5KC7V2RCIM9QOYSIF' where id=6; -update noar ti set b0='1OH5KC7V2RCIM9QOYSIF' where id=6; -update noar tt set v0='E' where id=6; -update noar ti set v0='E' where id=6; -update noar tt set b1='9WJFHKSFXB9058XHVNFG06' where id=6; -update noar ti set b1='9WJFHKSFXB9058XHVNFG06' where id=6; -update noar tt set v0='7WG8NT0LTVDQIVSDNKX249RNOZ' where id=6; -update noar ti set v0='7WG8NT0LTVDQIVSDNKX249RNOZ' where id=6; -update noar tt set b2='MDIXJ8G66' where id=6; -update noar ti set b2='MDIXJ8G66' where id=6; -update noar tt set v0='TODOH8LKNYXSOFZULC2NZWJ40J2L8' where id=7; -update noar ti set v0='TODOH8LKNYXSOFZULC2NZWJ40J2L8' where id=7; -update noar tt set b0='T885HND' where id=7; -update noar ti set b0='T885HND' where id=7; -update noar tt set v0='ZP' where id=7; -update noar ti set v0='ZP' where id=7; -update noar tt set b1='82VL5YJC94RTOPB6DY7' where id=7; -update noar ti set b1='82VL5YJC94RTOPB6DY7' where id=7; -update noar tt set v0='ZU' where id=7; -update noar ti set v0='ZU' where id=7; -update noar tt set b2='0' where id=7; -update noar ti set b2='0' where id=7; -update noar tt set v0='PHO63' where id=8; -update noar ti set v0='PHO63' where id=8; -update noar tt set b0='8X6XYAOUAAT6ZV9AB2C8DVDCM8YX6N' where id=8; -update noar ti set b0='8X6XYAOUAAT6ZV9AB2C8DVDCM8YX6N' where id=8; -update noar tt set v0='AXU6EPJ56US0X1WA7N2Q1' where id=8; -update noar ti set v0='AXU6EPJ56US0X1WA7N2Q1' where id=8; -update noar tt set b1='Z0581T7D7PV' where id=8; -update noar ti set b1='Z0581T7D7PV' where id=8; -update noar tt set v0='X6TCA2VEVIIVK' where id=8; -update noar ti set v0='X6TCA2VEVIIVK' where id=8; -update noar tt set b2='DFAH72C18' where id=8; -update noar ti set b2='DFAH72C18' where id=8; -update noar tt set v0='Q2AITF9FSIFZZW1ZIY04AOYSV26' where id=9; -update noar ti set v0='Q2AITF9FSIFZZW1ZIY04AOYSV26' where id=9; -update noar tt set b0='KJFKEYMSX4H8YEKOWUXM' where id=9; -update noar ti set b0='KJFKEYMSX4H8YEKOWUXM' where id=9; -update noar tt set v0='M7QZV2W8' where id=9; -update noar ti set v0='M7QZV2W8' where id=9; -update noar tt set b1='GJJWLMCX7KHXZI' where id=9; -update noar ti set b1='GJJWLMCX7KHXZI' where id=9; -update noar tt set v0='VM0Y4KKC8D8MRTZVSALGRKUKNWQ' where id=9; -update noar ti set v0='VM0Y4KKC8D8MRTZVSALGRKUKNWQ' where id=9; -update noar tt set b2='2' where id=9; -update noar ti set b2='2' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 blob null, -b1 longblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='8PS5LIM97XCVWW4SN' where id=1; -update noar ti set v0='8PS5LIM97XCVWW4SN' where id=1; -update noar tt set b0='EAPSA49721L' where id=1; -update noar ti set b0='EAPSA49721L' where id=1; -update noar tt set v0='2VN2R0CX' where id=1; -update noar ti set v0='2VN2R0CX' where id=1; -update noar tt set b1='SJ' where id=1; -update noar ti set b1='SJ' where id=1; -update noar tt set v0='KYGQC6ZPX8LEI8' where id=1; -update noar ti set v0='KYGQC6ZPX8LEI8' where id=1; -update noar tt set b2='T915HILYU61P9OC74KEB' where id=1; -update noar ti set b2='T915HILYU61P9OC74KEB' where id=1; -update noar tt set v0='XNHQUSQL5VIE6KB5Y1QS' where id=2; -update noar ti set v0='XNHQUSQL5VIE6KB5Y1QS' where id=2; -update noar tt set b0='B7N3BW0W1LDKY3USEQ0U9EWGUKB' where id=2; -update noar ti set b0='B7N3BW0W1LDKY3USEQ0U9EWGUKB' where id=2; -update noar tt set v0='DAEA418JD95MM1VWO8KI0CS' where id=2; -update noar ti set v0='DAEA418JD95MM1VWO8KI0CS' where id=2; -update noar tt set b1='Q63OHX2EHXSRM17MQOT' where id=2; -update noar ti set b1='Q63OHX2EHXSRM17MQOT' where id=2; -update noar tt set v0='XK4A0R0PH1UMR76PWN8GLANQ0XTSYG' where id=2; -update noar ti set v0='XK4A0R0PH1UMR76PWN8GLANQ0XTSYG' where id=2; -update noar tt set b2='DOXYPOK8UEMGKK2LTZDWA3K9ZWSYOIO' where id=2; -update noar ti set b2='DOXYPOK8UEMGKK2LTZDWA3K9ZWSYOIO' where id=2; -update noar tt set v0='DF0ZFJ' where id=3; -update noar ti set v0='DF0ZFJ' where id=3; -update noar tt set b0='KX76YECE7L2ZYWWXSGO0X1W' where id=3; -update noar ti set b0='KX76YECE7L2ZYWWXSGO0X1W' where id=3; -update noar tt set v0='RZO9VQN8PP5QOBAIKIKJ2J' where id=3; -update noar ti set v0='RZO9VQN8PP5QOBAIKIKJ2J' where id=3; -update noar tt set b1='FYFVU7CMTVP5LFXJO' where id=3; -update noar ti set b1='FYFVU7CMTVP5LFXJO' where id=3; -update noar tt set v0='I6OK' where id=3; -update noar ti set v0='I6OK' where id=3; -update noar tt set b2='QHACU8HI0N5' where id=3; -update noar ti set b2='QHACU8HI0N5' where id=3; -update noar tt set v0='61BGS6Q1W340FGXCBU2V' where id=4; -update noar ti set v0='61BGS6Q1W340FGXCBU2V' where id=4; -update noar tt set b0='MXB91ANCYFM4LJ8MGPFBYP6DD9' where id=4; -update noar ti set b0='MXB91ANCYFM4LJ8MGPFBYP6DD9' where id=4; -update noar tt set v0='0AQK9ICMO7VWI4E' where id=4; -update noar ti set v0='0AQK9ICMO7VWI4E' where id=4; -update noar tt set b1='6L' where id=4; -update noar ti set b1='6L' where id=4; -update noar tt set v0='Q7R9YKWYDPNBRFALA89XXTJNB' where id=4; -update noar ti set v0='Q7R9YKWYDPNBRFALA89XXTJNB' where id=4; -update noar tt set b2='LYOZ8RS2BI567UM2LBUH7K' where id=4; -update noar ti set b2='LYOZ8RS2BI567UM2LBUH7K' where id=4; -update noar tt set v0='U' where id=5; -update noar ti set v0='U' where id=5; -update noar tt set b0='QLFO85GTIAK78WBOX5Y8VUUB4' where id=5; -update noar ti set b0='QLFO85GTIAK78WBOX5Y8VUUB4' where id=5; -update noar tt set v0='0FRNZL62' where id=5; -update noar ti set v0='0FRNZL62' where id=5; -update noar tt set b1='UIVZF5ANZ9ELJ6BMFMF' where id=5; -update noar ti set b1='UIVZF5ANZ9ELJ6BMFMF' where id=5; -update noar tt set v0='M1MD5PKP173' where id=5; -update noar ti set v0='M1MD5PKP173' where id=5; -update noar tt set b2='LMI5KJTU' where id=5; -update noar ti set b2='LMI5KJTU' where id=5; -update noar tt set v0='GD3RYUP6BJ9JAOSW4TO' where id=6; -update noar ti set v0='GD3RYUP6BJ9JAOSW4TO' where id=6; -update noar tt set b0='SR8' where id=6; -update noar ti set b0='SR8' where id=6; -update noar tt set v0='6CNB6VSRXDCJLB7EHC5OADJ4E' where id=6; -update noar ti set v0='6CNB6VSRXDCJLB7EHC5OADJ4E' where id=6; -update noar tt set b1='W9VW779LBHJLSHQK94UAMHWCGAEX3' where id=6; -update noar ti set b1='W9VW779LBHJLSHQK94UAMHWCGAEX3' where id=6; -update noar tt set v0='0B2ILT82R3' where id=6; -update noar ti set v0='0B2ILT82R3' where id=6; -update noar tt set b2='TGI97HZ' where id=6; -update noar ti set b2='TGI97HZ' where id=6; -update noar tt set v0='FAFZ3XL4M4' where id=7; -update noar ti set v0='FAFZ3XL4M4' where id=7; -update noar tt set b0='OCGZ' where id=7; -update noar ti set b0='OCGZ' where id=7; -update noar tt set v0='SDKVIWY6PZ40ZKH3EUR' where id=7; -update noar ti set v0='SDKVIWY6PZ40ZKH3EUR' where id=7; -update noar tt set b1='P261PRNROR6RNUPDMVBN8' where id=7; -update noar ti set b1='P261PRNROR6RNUPDMVBN8' where id=7; -update noar tt set v0='RBFUH' where id=7; -update noar ti set v0='RBFUH' where id=7; -update noar tt set b2='24B7V2NL' where id=7; -update noar ti set b2='24B7V2NL' where id=7; -update noar tt set v0='40Y15OF35FLX4Y90L58U2R2XYL5KQFJ' where id=8; -update noar ti set v0='40Y15OF35FLX4Y90L58U2R2XYL5KQFJ' where id=8; -update noar tt set b0='2TKRA8AMMPVBZLFA6' where id=8; -update noar ti set b0='2TKRA8AMMPVBZLFA6' where id=8; -update noar tt set v0='8EOGL83MPGHUL3LJ' where id=8; -update noar ti set v0='8EOGL83MPGHUL3LJ' where id=8; -update noar tt set b1='4KP252TBDA0XUH905GBOBEE' where id=8; -update noar ti set b1='4KP252TBDA0XUH905GBOBEE' where id=8; -update noar tt set v0='BMFHSF0DF' where id=8; -update noar ti set v0='BMFHSF0DF' where id=8; -update noar tt set b2='PBXCGKQG17PXSPP8414N' where id=8; -update noar ti set b2='PBXCGKQG17PXSPP8414N' where id=8; -update noar tt set v0='WCLX8KXI3TAW1TQ70PXP0' where id=9; -update noar ti set v0='WCLX8KXI3TAW1TQ70PXP0' where id=9; -update noar tt set b0='BFVHGBX3XSTZRMIPC52CGQO5SM2F' where id=9; -update noar ti set b0='BFVHGBX3XSTZRMIPC52CGQO5SM2F' where id=9; -update noar tt set v0='VI33D4FBYY29OPRHB0KX7FFE' where id=9; -update noar ti set v0='VI33D4FBYY29OPRHB0KX7FFE' where id=9; -update noar tt set b1='D2VJFNFHJ1VJ' where id=9; -update noar ti set b1='D2VJFNFHJ1VJ' where id=9; -update noar tt set v0='DAMO' where id=9; -update noar ti set v0='DAMO' where id=9; -update noar tt set b2='HZGDDJC9LOX03Z1T6FV' where id=9; -update noar ti set b2='HZGDDJC9LOX03Z1T6FV' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 blob null, -b1 longblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='EO35151XGXNWNVBQ' where id=1; -update noar ti set v0='EO35151XGXNWNVBQ' where id=1; -update noar tt set b0='HP24C0IDRAOPS41SMCDLP76ZHXEZ' where id=1; -update noar ti set b0='HP24C0IDRAOPS41SMCDLP76ZHXEZ' where id=1; -update noar tt set v0='59RZ38K1EN8X2TAZHF3R' where id=1; -update noar ti set v0='59RZ38K1EN8X2TAZHF3R' where id=1; -update noar tt set b1='6T2VPG1YK5' where id=1; -update noar ti set b1='6T2VPG1YK5' where id=1; -update noar tt set v0='ZBJIEF9BTW2Q9R1L6PVYBK067GND' where id=1; -update noar ti set v0='ZBJIEF9BTW2Q9R1L6PVYBK067GND' where id=1; -update noar tt set b2='JLIN0B15OLBA0LWA' where id=1; -update noar ti set b2='JLIN0B15OLBA0LWA' where id=1; -update noar tt set v0='PY2Q5I' where id=2; -update noar ti set v0='PY2Q5I' where id=2; -update noar tt set b0='NS' where id=2; -update noar ti set b0='NS' where id=2; -update noar tt set v0='W2DS' where id=2; -update noar ti set v0='W2DS' where id=2; -update noar tt set b1='0GN7SNIJ5H3539L4' where id=2; -update noar ti set b1='0GN7SNIJ5H3539L4' where id=2; -update noar tt set v0='XDE3ETOXZNK29RTXMM591W6CGSKKBZ' where id=2; -update noar ti set v0='XDE3ETOXZNK29RTXMM591W6CGSKKBZ' where id=2; -update noar tt set b2='SV72XPP4' where id=2; -update noar ti set b2='SV72XPP4' where id=2; -update noar tt set v0='JCSKFFSTO98U1S4CWW5WI2ETM' where id=3; -update noar ti set v0='JCSKFFSTO98U1S4CWW5WI2ETM' where id=3; -update noar tt set b0='MPVGTETTY7WSHDTI4DHGEGI' where id=3; -update noar ti set b0='MPVGTETTY7WSHDTI4DHGEGI' where id=3; -update noar tt set v0='TJPJ3H3IRXU0UY3ZDYRQZSD9S' where id=3; -update noar ti set v0='TJPJ3H3IRXU0UY3ZDYRQZSD9S' where id=3; -update noar tt set b1='VTU62' where id=3; -update noar ti set b1='VTU62' where id=3; -update noar tt set v0='AD' where id=3; -update noar ti set v0='AD' where id=3; -update noar tt set b2='F036JBM6EZCJ5W9EBNH2' where id=3; -update noar ti set b2='F036JBM6EZCJ5W9EBNH2' where id=3; -update noar tt set v0='ANCJZOJN4T1FHNRC87521K2I5' where id=4; -update noar ti set v0='ANCJZOJN4T1FHNRC87521K2I5' where id=4; -update noar tt set b0='99YAW8NHFSZIRBNUQZT6Q57AKMB9B7' where id=4; -update noar ti set b0='99YAW8NHFSZIRBNUQZT6Q57AKMB9B7' where id=4; -update noar tt set v0='SJ4PFBUSIVNC96K' where id=4; -update noar ti set v0='SJ4PFBUSIVNC96K' where id=4; -update noar tt set b1='3316AOE23OWPVBP5C' where id=4; -update noar ti set b1='3316AOE23OWPVBP5C' where id=4; -update noar tt set v0='AP5' where id=4; -update noar ti set v0='AP5' where id=4; -update noar tt set b2='GF5AR' where id=4; -update noar ti set b2='GF5AR' where id=4; -update noar tt set v0='7YLDFU952E9EOOL2H0B2KOGXPIX8YAE' where id=5; -update noar ti set v0='7YLDFU952E9EOOL2H0B2KOGXPIX8YAE' where id=5; -update noar tt set b0='G56336ZWCDEO0L81GQRLYGX' where id=5; -update noar ti set b0='G56336ZWCDEO0L81GQRLYGX' where id=5; -update noar tt set v0='HFUAIK2NWGGBDB' where id=5; -update noar ti set v0='HFUAIK2NWGGBDB' where id=5; -update noar tt set b1='SRFMFGZB7D5IN42V2LFA96U860MA' where id=5; -update noar ti set b1='SRFMFGZB7D5IN42V2LFA96U860MA' where id=5; -update noar tt set v0='C25M16UN5OW6NJ2' where id=5; -update noar ti set v0='C25M16UN5OW6NJ2' where id=5; -update noar tt set b2='35WMBZBN449HQHPFEN55ZV' where id=5; -update noar ti set b2='35WMBZBN449HQHPFEN55ZV' where id=5; -update noar tt set v0='DFN6' where id=6; -update noar ti set v0='DFN6' where id=6; -update noar tt set b0='MC8QTALEWA6O' where id=6; -update noar ti set b0='MC8QTALEWA6O' where id=6; -update noar tt set v0='H3R64PPQ3F5SHVRT6YSK7TS' where id=6; -update noar ti set v0='H3R64PPQ3F5SHVRT6YSK7TS' where id=6; -update noar tt set b1='6XRUP' where id=6; -update noar ti set b1='6XRUP' where id=6; -update noar tt set v0='IAS1906LURE5CP21CNWFL' where id=6; -update noar ti set v0='IAS1906LURE5CP21CNWFL' where id=6; -update noar tt set b2='M' where id=6; -update noar ti set b2='M' where id=6; -update noar tt set v0='LC1SGKPUUEWO24V8OBFHV0FGIXD' where id=7; -update noar ti set v0='LC1SGKPUUEWO24V8OBFHV0FGIXD' where id=7; -update noar tt set b0='8F66VWZAL' where id=7; -update noar ti set b0='8F66VWZAL' where id=7; -update noar tt set v0='D5BDQV1ZHCJ5T6F0QU2XM' where id=7; -update noar ti set v0='D5BDQV1ZHCJ5T6F0QU2XM' where id=7; -update noar tt set b1='OMVXBQCLI4' where id=7; -update noar ti set b1='OMVXBQCLI4' where id=7; -update noar tt set v0='ZRTTNABSPS4012QQSU118' where id=7; -update noar ti set v0='ZRTTNABSPS4012QQSU118' where id=7; -update noar tt set b2='5YG47300AA9XRQLEBQSY7RNE' where id=7; -update noar ti set b2='5YG47300AA9XRQLEBQSY7RNE' where id=7; -update noar tt set v0='X' where id=8; -update noar ti set v0='X' where id=8; -update noar tt set b0='DDX1JVXC3UME' where id=8; -update noar ti set b0='DDX1JVXC3UME' where id=8; -update noar tt set v0='6ICFLBOKN' where id=8; -update noar ti set v0='6ICFLBOKN' where id=8; -update noar tt set b1='GULF4ORP4WL19KNDOFD1OEZKAAIE2' where id=8; -update noar ti set b1='GULF4ORP4WL19KNDOFD1OEZKAAIE2' where id=8; -update noar tt set v0='Z7WSTX0RWQ3S03P17TZQ6DH5Q6PT5' where id=8; -update noar ti set v0='Z7WSTX0RWQ3S03P17TZQ6DH5Q6PT5' where id=8; -update noar tt set b2='O' where id=8; -update noar ti set b2='O' where id=8; -update noar tt set v0='U7QNS' where id=9; -update noar ti set v0='U7QNS' where id=9; -update noar tt set b0='H8P7RYPEFKJZ91SKF7KM0IYZJZY' where id=9; -update noar ti set b0='H8P7RYPEFKJZ91SKF7KM0IYZJZY' where id=9; -update noar tt set v0='P7N032KMP7DNVE8CTGWXBLGT3JSQ2Q' where id=9; -update noar ti set v0='P7N032KMP7DNVE8CTGWXBLGT3JSQ2Q' where id=9; -update noar tt set b1='GLQFG8ZVW0ZXM20JHLDQ7I' where id=9; -update noar ti set b1='GLQFG8ZVW0ZXM20JHLDQ7I' where id=9; -update noar tt set v0='90V15OL6OXEPHKHKHZZAFYW5BY5D8D' where id=9; -update noar ti set v0='90V15OL6OXEPHKHKHZZAFYW5BY5D8D' where id=9; -update noar tt set b2='FIHEU9H20H2VLWQ' where id=9; -update noar ti set b2='FIHEU9H20H2VLWQ' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 blob not null, -b1 longblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='GA7V0GLVX1GV9N26RMWKWI5EOAO3OA00' where id=1; -update noar ti set v0='GA7V0GLVX1GV9N26RMWKWI5EOAO3OA00' where id=1; -update noar tt set b0='5Q' where id=1; -update noar ti set b0='5Q' where id=1; -update noar tt set v0='16HFLSMCC9XYTXXOF' where id=1; -update noar ti set v0='16HFLSMCC9XYTXXOF' where id=1; -update noar tt set b1='VTTXU10D7BP' where id=1; -update noar ti set b1='VTTXU10D7BP' where id=1; -update noar tt set v0='QALVJYSPL9NT3NYDC' where id=1; -update noar ti set v0='QALVJYSPL9NT3NYDC' where id=1; -update noar tt set b2='C0QH2L' where id=1; -update noar ti set b2='C0QH2L' where id=1; -update noar tt set v0='I61UE3V1RIPKSXIVTKMS' where id=2; -update noar ti set v0='I61UE3V1RIPKSXIVTKMS' where id=2; -update noar tt set b0='391P428Y3V1J54' where id=2; -update noar ti set b0='391P428Y3V1J54' where id=2; -update noar tt set v0='5WAJJYDAV6PYFJR4KX2CDS9FT9AGD0HU' where id=2; -update noar ti set v0='5WAJJYDAV6PYFJR4KX2CDS9FT9AGD0HU' where id=2; -update noar tt set b1='BUATSX' where id=2; -update noar ti set b1='BUATSX' where id=2; -update noar tt set v0='GZGPA1PVX2Q50C6D2' where id=2; -update noar ti set v0='GZGPA1PVX2Q50C6D2' where id=2; -update noar tt set b2='TH4MFGV5HE' where id=2; -update noar ti set b2='TH4MFGV5HE' where id=2; -update noar tt set v0='GFX' where id=3; -update noar ti set v0='GFX' where id=3; -update noar tt set b0='3MGY24NBRN46WPKI' where id=3; -update noar ti set b0='3MGY24NBRN46WPKI' where id=3; -update noar tt set v0='FM6PPJUBE9FGEB' where id=3; -update noar ti set v0='FM6PPJUBE9FGEB' where id=3; -update noar tt set b1='T8HTP4A7M34N4MIWP6' where id=3; -update noar ti set b1='T8HTP4A7M34N4MIWP6' where id=3; -update noar tt set v0='53UZH8HAPKV1WX50E3B15' where id=3; -update noar ti set v0='53UZH8HAPKV1WX50E3B15' where id=3; -update noar tt set b2='Y1OG47300PATBI5P5YOMM' where id=3; -update noar ti set b2='Y1OG47300PATBI5P5YOMM' where id=3; -update noar tt set v0='976AQV38MW7NNVGY' where id=4; -update noar ti set v0='976AQV38MW7NNVGY' where id=4; -update noar tt set b0='TDISXZCDNW' where id=4; -update noar ti set b0='TDISXZCDNW' where id=4; -update noar tt set v0='USJJHE0TZM6C9EQ7PYOVF2WE' where id=4; -update noar ti set v0='USJJHE0TZM6C9EQ7PYOVF2WE' where id=4; -update noar tt set b1='OBFIP9IU5MARHUNQR' where id=4; -update noar ti set b1='OBFIP9IU5MARHUNQR' where id=4; -update noar tt set v0='3SDZJQ' where id=4; -update noar ti set v0='3SDZJQ' where id=4; -update noar tt set b2='11IVV' where id=4; -update noar ti set b2='11IVV' where id=4; -update noar tt set v0='LK9G2JFA0T' where id=5; -update noar ti set v0='LK9G2JFA0T' where id=5; -update noar tt set b0='QSGVCBUDBXTLI0RTV7E903JU' where id=5; -update noar ti set b0='QSGVCBUDBXTLI0RTV7E903JU' where id=5; -update noar tt set v0='Q0H' where id=5; -update noar ti set v0='Q0H' where id=5; -update noar tt set b1='MVD5U1JO509POLUF7GISSHSZI3VE11GA' where id=5; -update noar ti set b1='MVD5U1JO509POLUF7GISSHSZI3VE11GA' where id=5; -update noar tt set v0='B1QKH4XHUD1OCA3C3M6UHO5' where id=5; -update noar ti set v0='B1QKH4XHUD1OCA3C3M6UHO5' where id=5; -update noar tt set b2='IIC0X' where id=5; -update noar ti set b2='IIC0X' where id=5; -update noar tt set v0='92XC2H' where id=6; -update noar ti set v0='92XC2H' where id=6; -update noar tt set b0='02MVSPMKNPJFWP' where id=6; -update noar ti set b0='02MVSPMKNPJFWP' where id=6; -update noar tt set v0='H4UXF2SZSLG06ZKVPYG519KZGAQ3ZGT' where id=6; -update noar ti set v0='H4UXF2SZSLG06ZKVPYG519KZGAQ3ZGT' where id=6; -update noar tt set b1='TVEMKEGELF0XQWMZ69ZU4AS3EM' where id=6; -update noar ti set b1='TVEMKEGELF0XQWMZ69ZU4AS3EM' where id=6; -update noar tt set v0='I' where id=6; -update noar ti set v0='I' where id=6; -update noar tt set b2='8PY5YXWWQR0E8BT4850MOT' where id=6; -update noar ti set b2='8PY5YXWWQR0E8BT4850MOT' where id=6; -update noar tt set v0='JG' where id=7; -update noar ti set v0='JG' where id=7; -update noar tt set b0='9B5BVF2' where id=7; -update noar ti set b0='9B5BVF2' where id=7; -update noar tt set v0='EICUIUC1PZ9HBA1Z9CFKRZBP1PX6' where id=7; -update noar ti set v0='EICUIUC1PZ9HBA1Z9CFKRZBP1PX6' where id=7; -update noar tt set b1='SL5AEVL1GPDAMDCZ6O0MNZ512OXQF1' where id=7; -update noar ti set b1='SL5AEVL1GPDAMDCZ6O0MNZ512OXQF1' where id=7; -update noar tt set v0='NBB0Y501BC98UZBNV76GBEJQDGEQ447' where id=7; -update noar ti set v0='NBB0Y501BC98UZBNV76GBEJQDGEQ447' where id=7; -update noar tt set b2='2WQ19E38FZHQRQBIJSSWJIQV3LV1WW' where id=7; -update noar ti set b2='2WQ19E38FZHQRQBIJSSWJIQV3LV1WW' where id=7; -update noar tt set v0='MFPPEGLKB6EUQJPYWASJ' where id=8; -update noar ti set v0='MFPPEGLKB6EUQJPYWASJ' where id=8; -update noar tt set b0='RRLQ' where id=8; -update noar ti set b0='RRLQ' where id=8; -update noar tt set v0='U15QKE7E7CX6F9M1U2PRVE' where id=8; -update noar ti set v0='U15QKE7E7CX6F9M1U2PRVE' where id=8; -update noar tt set b1='HG' where id=8; -update noar ti set b1='HG' where id=8; -update noar tt set v0='D3D' where id=8; -update noar ti set v0='D3D' where id=8; -update noar tt set b2='6I71R60QRS1QEB53W5XCAQA3' where id=8; -update noar ti set b2='6I71R60QRS1QEB53W5XCAQA3' where id=8; -update noar tt set v0='BC2TROQ5J' where id=9; -update noar ti set v0='BC2TROQ5J' where id=9; -update noar tt set b0='DBKL0WVJHLHHZBU158HXCTC' where id=9; -update noar ti set b0='DBKL0WVJHLHHZBU158HXCTC' where id=9; -update noar tt set v0='Q86QF0H' where id=9; -update noar ti set v0='Q86QF0H' where id=9; -update noar tt set b1='DVKXRXENQFY6HUB9BC' where id=9; -update noar ti set b1='DVKXRXENQFY6HUB9BC' where id=9; -update noar tt set v0='Q5GAC9A0MFXD1ISX0A7R4GDOI8XFGZUA' where id=9; -update noar ti set v0='Q5GAC9A0MFXD1ISX0A7R4GDOI8XFGZUA' where id=9; -update noar tt set b2='O3UKR2' where id=9; -update noar ti set b2='O3UKR2' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 blob not null, -b1 longblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='GT78ZCXRR3SK9A9EPSY7PDVY8K' where id=1; -update noar ti set v0='GT78ZCXRR3SK9A9EPSY7PDVY8K' where id=1; -update noar tt set b0='A' where id=1; -update noar ti set b0='A' where id=1; -update noar tt set v0='WIW0DNI' where id=1; -update noar ti set v0='WIW0DNI' where id=1; -update noar tt set b1='69R2XAL6UYYNSGMJM7H9' where id=1; -update noar ti set b1='69R2XAL6UYYNSGMJM7H9' where id=1; -update noar tt set v0='GN4' where id=1; -update noar ti set v0='GN4' where id=1; -update noar tt set b2='7MQYPD2W9BDBIIWQD' where id=1; -update noar ti set b2='7MQYPD2W9BDBIIWQD' where id=1; -update noar tt set v0='F' where id=2; -update noar ti set v0='F' where id=2; -update noar tt set b0='R3915QKQK9VAVM9A92NHXKWTPX32RT' where id=2; -update noar ti set b0='R3915QKQK9VAVM9A92NHXKWTPX32RT' where id=2; -update noar tt set v0='MG53LSY6HH' where id=2; -update noar ti set v0='MG53LSY6HH' where id=2; -update noar tt set b1='JKTMH876L9YY5LS3O3' where id=2; -update noar ti set b1='JKTMH876L9YY5LS3O3' where id=2; -update noar tt set v0='LQRPM5CU3' where id=2; -update noar ti set v0='LQRPM5CU3' where id=2; -update noar tt set b2='E2JYMUF3WOWBQKKDSAWFXHT7DI5RBXP' where id=2; -update noar ti set b2='E2JYMUF3WOWBQKKDSAWFXHT7DI5RBXP' where id=2; -update noar tt set v0='AY2WR33JL7162Q254BPVNW4M81QUZW' where id=3; -update noar ti set v0='AY2WR33JL7162Q254BPVNW4M81QUZW' where id=3; -update noar tt set b0='YXGHCE2NBRXEDIBRHH5TGO4' where id=3; -update noar ti set b0='YXGHCE2NBRXEDIBRHH5TGO4' where id=3; -update noar tt set v0='K4PL40ZEC5' where id=3; -update noar ti set v0='K4PL40ZEC5' where id=3; -update noar tt set b1='B478WS19IJFHQBFWHGH9VCE' where id=3; -update noar ti set b1='B478WS19IJFHQBFWHGH9VCE' where id=3; -update noar tt set v0='XWDL' where id=3; -update noar ti set v0='XWDL' where id=3; -update noar tt set b2='3QRY2X' where id=3; -update noar ti set b2='3QRY2X' where id=3; -update noar tt set v0='XN7XEWKTET' where id=4; -update noar ti set v0='XN7XEWKTET' where id=4; -update noar tt set b0='N5IK4PK9OUMZ4E0N' where id=4; -update noar ti set b0='N5IK4PK9OUMZ4E0N' where id=4; -update noar tt set v0='F6MLS7F08G1Y7SFGLHZ' where id=4; -update noar ti set v0='F6MLS7F08G1Y7SFGLHZ' where id=4; -update noar tt set b1='OY0MSTB90LJ8XZ8HC0K' where id=4; -update noar ti set b1='OY0MSTB90LJ8XZ8HC0K' where id=4; -update noar tt set v0='9CPZ6KLPA62RVPDNSU3QSE28' where id=4; -update noar ti set v0='9CPZ6KLPA62RVPDNSU3QSE28' where id=4; -update noar tt set b2='09H' where id=4; -update noar ti set b2='09H' where id=4; -update noar tt set v0='0CASECR6AEU9H93GYO' where id=5; -update noar ti set v0='0CASECR6AEU9H93GYO' where id=5; -update noar tt set b0='BOMIRTM6WXSYR4N08K2C74JAZC45' where id=5; -update noar ti set b0='BOMIRTM6WXSYR4N08K2C74JAZC45' where id=5; -update noar tt set v0='UWR075JQW2KXULXYXXU9AVBVWWX7SD' where id=5; -update noar ti set v0='UWR075JQW2KXULXYXXU9AVBVWWX7SD' where id=5; -update noar tt set b1='3Q8M7VVQ63G1P6L067D' where id=5; -update noar ti set b1='3Q8M7VVQ63G1P6L067D' where id=5; -update noar tt set v0='J8OR5YIL1CQXKS99U' where id=5; -update noar ti set v0='J8OR5YIL1CQXKS99U' where id=5; -update noar tt set b2='3FGU0QIE65G9LU' where id=5; -update noar ti set b2='3FGU0QIE65G9LU' where id=5; -update noar tt set v0='18V36V8P5' where id=6; -update noar ti set v0='18V36V8P5' where id=6; -update noar tt set b0='0UAJED77GUAIQTE7ZM2L4ZHVJRIDP8' where id=6; -update noar ti set b0='0UAJED77GUAIQTE7ZM2L4ZHVJRIDP8' where id=6; -update noar tt set v0='FRZGUT0NEEJRZ2KMV4ULIZ' where id=6; -update noar ti set v0='FRZGUT0NEEJRZ2KMV4ULIZ' where id=6; -update noar tt set b1='22HT12J432ZQMWTATX7B3D1JKRC6DG' where id=6; -update noar ti set b1='22HT12J432ZQMWTATX7B3D1JKRC6DG' where id=6; -update noar tt set v0='WTKIR5E' where id=6; -update noar ti set v0='WTKIR5E' where id=6; -update noar tt set b2='6' where id=6; -update noar ti set b2='6' where id=6; -update noar tt set v0='L8DZP8UC2KYA9ZYJO89QJM6JR' where id=7; -update noar ti set v0='L8DZP8UC2KYA9ZYJO89QJM6JR' where id=7; -update noar tt set b0='MRFCSM0VL0XK9SKBWVF38FYGW2UQU' where id=7; -update noar ti set b0='MRFCSM0VL0XK9SKBWVF38FYGW2UQU' where id=7; -update noar tt set v0='6T8BM' where id=7; -update noar ti set v0='6T8BM' where id=7; -update noar tt set b1='OIC607YT9KM5BPX27XZNZ1YRLLPWU' where id=7; -update noar ti set b1='OIC607YT9KM5BPX27XZNZ1YRLLPWU' where id=7; -update noar tt set v0='LUFTRKXOPVCA' where id=7; -update noar ti set v0='LUFTRKXOPVCA' where id=7; -update noar tt set b2='T295EWPNS33SQ1ODAIU' where id=7; -update noar ti set b2='T295EWPNS33SQ1ODAIU' where id=7; -update noar tt set v0='1GEH0CM6583MELPXY0' where id=8; -update noar ti set v0='1GEH0CM6583MELPXY0' where id=8; -update noar tt set b0='7O2VVWLCTZQLC3Z4EPOX72FO' where id=8; -update noar ti set b0='7O2VVWLCTZQLC3Z4EPOX72FO' where id=8; -update noar tt set v0='ITNM5XP3K6FE9H' where id=8; -update noar ti set v0='ITNM5XP3K6FE9H' where id=8; -update noar tt set b1='IT2U6T2VC60CO5W77E' where id=8; -update noar ti set b1='IT2U6T2VC60CO5W77E' where id=8; -update noar tt set v0='R5L3VX0' where id=8; -update noar ti set v0='R5L3VX0' where id=8; -update noar tt set b2='EWZL5PV1NFIPT5GP2AERUC9HOU' where id=8; -update noar ti set b2='EWZL5PV1NFIPT5GP2AERUC9HOU' where id=8; -update noar tt set v0='S4AT689IDOAY4EF' where id=9; -update noar ti set v0='S4AT689IDOAY4EF' where id=9; -update noar tt set b0='E33ICTT04MQNA0H905DTP8' where id=9; -update noar ti set b0='E33ICTT04MQNA0H905DTP8' where id=9; -update noar tt set v0='PWANA7K2W3ST7FOBCH' where id=9; -update noar ti set v0='PWANA7K2W3ST7FOBCH' where id=9; -update noar tt set b1='HNCRVBHT8OP93KA5N' where id=9; -update noar ti set b1='HNCRVBHT8OP93KA5N' where id=9; -update noar tt set v0='HYR66Y8N1CXQS7NVB9PJET41Q1KB0HT3' where id=9; -update noar ti set v0='HYR66Y8N1CXQS7NVB9PJET41Q1KB0HT3' where id=9; -update noar tt set b2='51U0I' where id=9; -update noar ti set b2='51U0I' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 blob null, -b1 longblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='C36HZUEST1Q8EC2HG5G90QEHF0UEPM' where id=1; -update noar ti set v0='C36HZUEST1Q8EC2HG5G90QEHF0UEPM' where id=1; -update noar tt set b0='36J8JV9H7D5XAT9FT' where id=1; -update noar ti set b0='36J8JV9H7D5XAT9FT' where id=1; -update noar tt set v0='GEE8KPNXHKV4' where id=1; -update noar ti set v0='GEE8KPNXHKV4' where id=1; -update noar tt set b1='CI5FA2O3WT80G' where id=1; -update noar ti set b1='CI5FA2O3WT80G' where id=1; -update noar tt set v0='TO9' where id=1; -update noar ti set v0='TO9' where id=1; -update noar tt set b2='H61E9OWLF53K1LSZ81H6455ZVX5TX0' where id=1; -update noar ti set b2='H61E9OWLF53K1LSZ81H6455ZVX5TX0' where id=1; -update noar tt set v0='L5STQPKFZO3' where id=2; -update noar ti set v0='L5STQPKFZO3' where id=2; -update noar tt set b0='4MPAC26ADRUH' where id=2; -update noar ti set b0='4MPAC26ADRUH' where id=2; -update noar tt set v0='45GNQO833T2YBXQCY' where id=2; -update noar ti set v0='45GNQO833T2YBXQCY' where id=2; -update noar tt set b1='PVHSKPZFXQOPX4S6G0U70XWWC' where id=2; -update noar ti set b1='PVHSKPZFXQOPX4S6G0U70XWWC' where id=2; -update noar tt set v0='94D8D9Z2CCQ' where id=2; -update noar ti set v0='94D8D9Z2CCQ' where id=2; -update noar tt set b2='POU6TEUFEZQTRSCYJ' where id=2; -update noar ti set b2='POU6TEUFEZQTRSCYJ' where id=2; -update noar tt set v0='N2WYWRJXRF4RCYWIZCNZ' where id=3; -update noar ti set v0='N2WYWRJXRF4RCYWIZCNZ' where id=3; -update noar tt set b0='BX05GCHRSVNI6O57N9YLHRENNYT5' where id=3; -update noar ti set b0='BX05GCHRSVNI6O57N9YLHRENNYT5' where id=3; -update noar tt set v0='4AKF9ZHRX4UCAQ6JDW' where id=3; -update noar ti set v0='4AKF9ZHRX4UCAQ6JDW' where id=3; -update noar tt set b1='NDWYANAY0DVBOJYFGCIGJR1MTJ3OQV' where id=3; -update noar ti set b1='NDWYANAY0DVBOJYFGCIGJR1MTJ3OQV' where id=3; -update noar tt set v0='X6I' where id=3; -update noar ti set v0='X6I' where id=3; -update noar tt set b2='DBUDX1WO3' where id=3; -update noar ti set b2='DBUDX1WO3' where id=3; -update noar tt set v0='6SFF' where id=4; -update noar ti set v0='6SFF' where id=4; -update noar tt set b0='NEGS' where id=4; -update noar ti set b0='NEGS' where id=4; -update noar tt set v0='385AH0O2Y7FILZ' where id=4; -update noar ti set v0='385AH0O2Y7FILZ' where id=4; -update noar tt set b1='585' where id=4; -update noar ti set b1='585' where id=4; -update noar tt set v0='KI48I2P9C732XWNYCMBDD5JCN2E' where id=4; -update noar ti set v0='KI48I2P9C732XWNYCMBDD5JCN2E' where id=4; -update noar tt set b2='0Y86B1ER520HP1' where id=4; -update noar ti set b2='0Y86B1ER520HP1' where id=4; -update noar tt set v0='A95PPO36G56FH' where id=5; -update noar ti set v0='A95PPO36G56FH' where id=5; -update noar tt set b0='I55BFWUUMEPTCVFLLONIOWW1' where id=5; -update noar ti set b0='I55BFWUUMEPTCVFLLONIOWW1' where id=5; -update noar tt set v0='DRDVL57LT3XKW6VIWG1QDJF7' where id=5; -update noar ti set v0='DRDVL57LT3XKW6VIWG1QDJF7' where id=5; -update noar tt set b1='IF3UHWP5JMHIY' where id=5; -update noar ti set b1='IF3UHWP5JMHIY' where id=5; -update noar tt set v0='R4OA1UY3M' where id=5; -update noar ti set v0='R4OA1UY3M' where id=5; -update noar tt set b2='CPTRMBQY5N7YCM' where id=5; -update noar ti set b2='CPTRMBQY5N7YCM' where id=5; -update noar tt set v0='81Z' where id=6; -update noar ti set v0='81Z' where id=6; -update noar tt set b0='S5KJGLJIR9' where id=6; -update noar ti set b0='S5KJGLJIR9' where id=6; -update noar tt set v0='NHU' where id=6; -update noar ti set v0='NHU' where id=6; -update noar tt set b1='0EUZV632ERWLB1' where id=6; -update noar ti set b1='0EUZV632ERWLB1' where id=6; -update noar tt set v0='8QP4PM' where id=6; -update noar ti set v0='8QP4PM' where id=6; -update noar tt set b2='EIQGP4WULQLLUCFPCB' where id=6; -update noar ti set b2='EIQGP4WULQLLUCFPCB' where id=6; -update noar tt set v0='P9129VX9AV' where id=7; -update noar ti set v0='P9129VX9AV' where id=7; -update noar tt set b0='OGNDP01FAQVB0U5JIEVVYF4WD9V3' where id=7; -update noar ti set b0='OGNDP01FAQVB0U5JIEVVYF4WD9V3' where id=7; -update noar tt set v0='4NGNQ' where id=7; -update noar ti set v0='4NGNQ' where id=7; -update noar tt set b1='YHJUSH1TW5VTFR3ZJ72H8GIO4JNMR5Z' where id=7; -update noar ti set b1='YHJUSH1TW5VTFR3ZJ72H8GIO4JNMR5Z' where id=7; -update noar tt set v0='U' where id=7; -update noar ti set v0='U' where id=7; -update noar tt set b2='IQILSVHC4XDZ7WC3IYPQXHP2TWUQ' where id=7; -update noar ti set b2='IQILSVHC4XDZ7WC3IYPQXHP2TWUQ' where id=7; -update noar tt set v0='8LUENSHEX9S688SM78A' where id=8; -update noar ti set v0='8LUENSHEX9S688SM78A' where id=8; -update noar tt set b0='XLVG4OJ4ZFUF7ZHE3HPU1D5OER7XRHB' where id=8; -update noar ti set b0='XLVG4OJ4ZFUF7ZHE3HPU1D5OER7XRHB' where id=8; -update noar tt set v0='1LEQX' where id=8; -update noar ti set v0='1LEQX' where id=8; -update noar tt set b1='9JGWRVXLZV' where id=8; -update noar ti set b1='9JGWRVXLZV' where id=8; -update noar tt set v0='PW1HZUORRP39YX9P241NP7TJRCE0' where id=8; -update noar ti set v0='PW1HZUORRP39YX9P241NP7TJRCE0' where id=8; -update noar tt set b2='R88X9PPI' where id=8; -update noar ti set b2='R88X9PPI' where id=8; -update noar tt set v0='WKNZBTGV4UBC97X7U6PNHKBEZF' where id=9; -update noar ti set v0='WKNZBTGV4UBC97X7U6PNHKBEZF' where id=9; -update noar tt set b0='26S02F8E' where id=9; -update noar ti set b0='26S02F8E' where id=9; -update noar tt set v0='R4AV9PCU5A' where id=9; -update noar ti set v0='R4AV9PCU5A' where id=9; -update noar tt set b1='7L' where id=9; -update noar ti set b1='7L' where id=9; -update noar tt set v0='3NOUSJXWDRAAWI48CEDPULQ54Y6CZ' where id=9; -update noar ti set v0='3NOUSJXWDRAAWI48CEDPULQ54Y6CZ' where id=9; -update noar tt set b2='Y' where id=9; -update noar ti set b2='Y' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 blob null, -b1 longblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='FUPYHDGNF1A06G' where id=1; -update noar ti set v0='FUPYHDGNF1A06G' where id=1; -update noar tt set b0='F43ST7XYO' where id=1; -update noar ti set b0='F43ST7XYO' where id=1; -update noar tt set v0='HLWBWJU3' where id=1; -update noar ti set v0='HLWBWJU3' where id=1; -update noar tt set b1='9DY77CE8KVVVBNTJ4T2QDWU5XZWCQX6Z' where id=1; -update noar ti set b1='9DY77CE8KVVVBNTJ4T2QDWU5XZWCQX6Z' where id=1; -update noar tt set v0='I03CD1MEE1OQUYW56HE8C1R7BIT7FQFJ' where id=1; -update noar ti set v0='I03CD1MEE1OQUYW56HE8C1R7BIT7FQFJ' where id=1; -update noar tt set b2='9V9X35I5XURE' where id=1; -update noar ti set b2='9V9X35I5XURE' where id=1; -update noar tt set v0='9B8X4BB' where id=2; -update noar ti set v0='9B8X4BB' where id=2; -update noar tt set b0='97O' where id=2; -update noar ti set b0='97O' where id=2; -update noar tt set v0='WYFH' where id=2; -update noar ti set v0='WYFH' where id=2; -update noar tt set b1='H1WR5' where id=2; -update noar ti set b1='H1WR5' where id=2; -update noar tt set v0='MDRL1M5SJ8F' where id=2; -update noar ti set v0='MDRL1M5SJ8F' where id=2; -update noar tt set b2='0HZNM33WJQN0' where id=2; -update noar ti set b2='0HZNM33WJQN0' where id=2; -update noar tt set v0='8LT3EP7YEXMAE2I0I7M14D' where id=3; -update noar ti set v0='8LT3EP7YEXMAE2I0I7M14D' where id=3; -update noar tt set b0='7C4I5AKJMUWR9286XQ70SAS2M' where id=3; -update noar ti set b0='7C4I5AKJMUWR9286XQ70SAS2M' where id=3; -update noar tt set v0='MVEG6KJCG2RIC34ODHCMIGY' where id=3; -update noar ti set v0='MVEG6KJCG2RIC34ODHCMIGY' where id=3; -update noar tt set b1='PGOKP785' where id=3; -update noar ti set b1='PGOKP785' where id=3; -update noar tt set v0='CCTK7UWCEFUVB45O9NYOI' where id=3; -update noar ti set v0='CCTK7UWCEFUVB45O9NYOI' where id=3; -update noar tt set b2='T13VC' where id=3; -update noar ti set b2='T13VC' where id=3; -update noar tt set v0='VEI303DC6XMZ0HBYE4SKH' where id=4; -update noar ti set v0='VEI303DC6XMZ0HBYE4SKH' where id=4; -update noar tt set b0='914GUTMT1DOB1OLPE' where id=4; -update noar ti set b0='914GUTMT1DOB1OLPE' where id=4; -update noar tt set v0='7IUU' where id=4; -update noar ti set v0='7IUU' where id=4; -update noar tt set b1='2VN2UWTC4TRE' where id=4; -update noar ti set b1='2VN2UWTC4TRE' where id=4; -update noar tt set v0='O66JHIVO1AGBFCQ4EZQBG0B' where id=4; -update noar ti set v0='O66JHIVO1AGBFCQ4EZQBG0B' where id=4; -update noar tt set b2='C5P8' where id=4; -update noar ti set b2='C5P8' where id=4; -update noar tt set v0='QR05WA5PD' where id=5; -update noar ti set v0='QR05WA5PD' where id=5; -update noar tt set b0='84JTVN8ATF' where id=5; -update noar ti set b0='84JTVN8ATF' where id=5; -update noar tt set v0='JT94DMCHFIMFVLI2RFC5FPVCBXOCP' where id=5; -update noar ti set v0='JT94DMCHFIMFVLI2RFC5FPVCBXOCP' where id=5; -update noar tt set b1='DVYT7VF0VDS2G9' where id=5; -update noar ti set b1='DVYT7VF0VDS2G9' where id=5; -update noar tt set v0='7BX67U528R6ROEAHW0II9ZR9' where id=5; -update noar ti set v0='7BX67U528R6ROEAHW0II9ZR9' where id=5; -update noar tt set b2='G2DCYIM9E5A0XIER438YC' where id=5; -update noar ti set b2='G2DCYIM9E5A0XIER438YC' where id=5; -update noar tt set v0='3L64' where id=6; -update noar ti set v0='3L64' where id=6; -update noar tt set b0='DKDMRE' where id=6; -update noar ti set b0='DKDMRE' where id=6; -update noar tt set v0='LSV1G944Q' where id=6; -update noar ti set v0='LSV1G944Q' where id=6; -update noar tt set b1='OXY68XHZL5GFO3XQ1G182TX' where id=6; -update noar ti set b1='OXY68XHZL5GFO3XQ1G182TX' where id=6; -update noar tt set v0='XNEOTPHKBPLPZ7UFYE9M9E' where id=6; -update noar ti set v0='XNEOTPHKBPLPZ7UFYE9M9E' where id=6; -update noar tt set b2='V9M2EEEO1HG7M1KHP8EBLKHJT8' where id=6; -update noar ti set b2='V9M2EEEO1HG7M1KHP8EBLKHJT8' where id=6; -update noar tt set v0='11SAC4M26X2X9RZJ7K23OK' where id=7; -update noar ti set v0='11SAC4M26X2X9RZJ7K23OK' where id=7; -update noar tt set b0='IK5XR3J130Y3LKRKTG8L1X187NQJ' where id=7; -update noar ti set b0='IK5XR3J130Y3LKRKTG8L1X187NQJ' where id=7; -update noar tt set v0='3D9QRSJ' where id=7; -update noar ti set v0='3D9QRSJ' where id=7; -update noar tt set b1='NTSTZI07ZQI4BDILUXDIKWC7PCLTA' where id=7; -update noar ti set b1='NTSTZI07ZQI4BDILUXDIKWC7PCLTA' where id=7; -update noar tt set v0='H6D1XBTNP8SZDINQXUO4I' where id=7; -update noar ti set v0='H6D1XBTNP8SZDINQXUO4I' where id=7; -update noar tt set b2='8FT' where id=7; -update noar ti set b2='8FT' where id=7; -update noar tt set v0='CLQN8TD9WRT8GOVGA9OMWAN9LTM100' where id=8; -update noar ti set v0='CLQN8TD9WRT8GOVGA9OMWAN9LTM100' where id=8; -update noar tt set b0='4L7LCGMES48M' where id=8; -update noar ti set b0='4L7LCGMES48M' where id=8; -update noar tt set v0='VUJ87D0CMPOFNG' where id=8; -update noar ti set v0='VUJ87D0CMPOFNG' where id=8; -update noar tt set b1='SYB3DUANMPK4IXEJMOZO7MOT' where id=8; -update noar ti set b1='SYB3DUANMPK4IXEJMOZO7MOT' where id=8; -update noar tt set v0='LJ29Y07Q6DJAE30N' where id=8; -update noar ti set v0='LJ29Y07Q6DJAE30N' where id=8; -update noar tt set b2='5AWE6LXUB6FIR' where id=8; -update noar ti set b2='5AWE6LXUB6FIR' where id=8; -update noar tt set v0='473NI0VBUSDFZ23K1AJI' where id=9; -update noar ti set v0='473NI0VBUSDFZ23K1AJI' where id=9; -update noar tt set b0='P51Z' where id=9; -update noar ti set b0='P51Z' where id=9; -update noar tt set v0='FRAA6BL9WJNW41FVYV9QOD' where id=9; -update noar ti set v0='FRAA6BL9WJNW41FVYV9QOD' where id=9; -update noar tt set b1='6' where id=9; -update noar ti set b1='6' where id=9; -update noar tt set v0='1PBUUP4FQ7JM0X7UI74' where id=9; -update noar ti set v0='1PBUUP4FQ7JM0X7UI74' where id=9; -update noar tt set b2='QR0UZI72K5L29M5OLZ4SVRK' where id=9; -update noar ti set b2='QR0UZI72K5L29M5OLZ4SVRK' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 blob not null, -b1 longblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='AWFE8OQ1E1FO616TR7OA8ZTDT' where id=1; -update noar ti set v0='AWFE8OQ1E1FO616TR7OA8ZTDT' where id=1; -update noar tt set b0='7M102Z0M5R8EXZA4MI' where id=1; -update noar ti set b0='7M102Z0M5R8EXZA4MI' where id=1; -update noar tt set v0='BZG96LW0GOYAO' where id=1; -update noar ti set v0='BZG96LW0GOYAO' where id=1; -update noar tt set b1='T7Z89JTW0OEH13HF' where id=1; -update noar ti set b1='T7Z89JTW0OEH13HF' where id=1; -update noar tt set v0='91320WY5GSJA6N65DXCONIX163S7' where id=1; -update noar ti set v0='91320WY5GSJA6N65DXCONIX163S7' where id=1; -update noar tt set b2='IF0X0DEUDQOP2BIFVD' where id=1; -update noar ti set b2='IF0X0DEUDQOP2BIFVD' where id=1; -update noar tt set v0='Q0TQ9DG5BEENYOCHS03TUWRJG3A' where id=2; -update noar ti set v0='Q0TQ9DG5BEENYOCHS03TUWRJG3A' where id=2; -update noar tt set b0='YE4X5D3SMYWLRW2ZP5' where id=2; -update noar ti set b0='YE4X5D3SMYWLRW2ZP5' where id=2; -update noar tt set v0='SSLVY5' where id=2; -update noar ti set v0='SSLVY5' where id=2; -update noar tt set b1='7WZ18ILWYI5GC61L7VET3' where id=2; -update noar ti set b1='7WZ18ILWYI5GC61L7VET3' where id=2; -update noar tt set v0='J' where id=2; -update noar ti set v0='J' where id=2; -update noar tt set b2='05X1RO4GKWOYUP3K0SKDLA86Z1XX6BT' where id=2; -update noar ti set b2='05X1RO4GKWOYUP3K0SKDLA86Z1XX6BT' where id=2; -update noar tt set v0='M5MQVR' where id=3; -update noar ti set v0='M5MQVR' where id=3; -update noar tt set b0='TIR2UKCSOFMYUGO5472TD5RT' where id=3; -update noar ti set b0='TIR2UKCSOFMYUGO5472TD5RT' where id=3; -update noar tt set v0='FT2LNNOJWJFVG14IW' where id=3; -update noar ti set v0='FT2LNNOJWJFVG14IW' where id=3; -update noar tt set b1='9TOOWAH' where id=3; -update noar ti set b1='9TOOWAH' where id=3; -update noar tt set v0='XJ9K78' where id=3; -update noar ti set v0='XJ9K78' where id=3; -update noar tt set b2='ESBLTK' where id=3; -update noar ti set b2='ESBLTK' where id=3; -update noar tt set v0='7O29PDQQNPO0NFH4DPQXZVVE9F' where id=4; -update noar ti set v0='7O29PDQQNPO0NFH4DPQXZVVE9F' where id=4; -update noar tt set b0='0HBYFECN9ASG0NR4TQDID0ZCM9L' where id=4; -update noar ti set b0='0HBYFECN9ASG0NR4TQDID0ZCM9L' where id=4; -update noar tt set v0='VSPY1QPYTK3YQ9K6JB5H4DM73R' where id=4; -update noar ti set v0='VSPY1QPYTK3YQ9K6JB5H4DM73R' where id=4; -update noar tt set b1='WK7AB8INJZCO3DL' where id=4; -update noar ti set b1='WK7AB8INJZCO3DL' where id=4; -update noar tt set v0='HM8L2S28FSA2HDQS7MINDGT' where id=4; -update noar ti set v0='HM8L2S28FSA2HDQS7MINDGT' where id=4; -update noar tt set b2='ACW' where id=4; -update noar ti set b2='ACW' where id=4; -update noar tt set v0='OAOKG5L8IRQ8OZ18ZI2BRF' where id=5; -update noar ti set v0='OAOKG5L8IRQ8OZ18ZI2BRF' where id=5; -update noar tt set b0='K1' where id=5; -update noar ti set b0='K1' where id=5; -update noar tt set v0='L0Q6TG79RL' where id=5; -update noar ti set v0='L0Q6TG79RL' where id=5; -update noar tt set b1='WDCNMFM31AKKEDRPI3ZIQ16M' where id=5; -update noar ti set b1='WDCNMFM31AKKEDRPI3ZIQ16M' where id=5; -update noar tt set v0='GRB3S6LSLPCLQDNAMLM0DRK9IH' where id=5; -update noar ti set v0='GRB3S6LSLPCLQDNAMLM0DRK9IH' where id=5; -update noar tt set b2='7NNEEXBI0ERDRW23FWRNP2KQRBLEQ' where id=5; -update noar ti set b2='7NNEEXBI0ERDRW23FWRNP2KQRBLEQ' where id=5; -update noar tt set v0='PHZD7ULA1W51VT6PMI739XZS' where id=6; -update noar ti set v0='PHZD7ULA1W51VT6PMI739XZS' where id=6; -update noar tt set b0='3945SX04W11J04Y' where id=6; -update noar ti set b0='3945SX04W11J04Y' where id=6; -update noar tt set v0='WUZ70OI7ZTV0KWOEMI' where id=6; -update noar ti set v0='WUZ70OI7ZTV0KWOEMI' where id=6; -update noar tt set b1='T' where id=6; -update noar ti set b1='T' where id=6; -update noar tt set v0='EZMOHX14Y0FR' where id=6; -update noar ti set v0='EZMOHX14Y0FR' where id=6; -update noar tt set b2='C74Q08PFU7SBTAEG52OAAHCO' where id=6; -update noar ti set b2='C74Q08PFU7SBTAEG52OAAHCO' where id=6; -update noar tt set v0='P' where id=7; -update noar ti set v0='P' where id=7; -update noar tt set b0='R6GJD95LYE46' where id=7; -update noar ti set b0='R6GJD95LYE46' where id=7; -update noar tt set v0='WG1CHOSEPFH36RKB6RY51WS' where id=7; -update noar ti set v0='WG1CHOSEPFH36RKB6RY51WS' where id=7; -update noar tt set b1='7XTOK' where id=7; -update noar ti set b1='7XTOK' where id=7; -update noar tt set v0='06YRMX0QP6SG6QUJJ19NKZXHR6' where id=7; -update noar ti set v0='06YRMX0QP6SG6QUJJ19NKZXHR6' where id=7; -update noar tt set b2='Q2HM9KS8CBTGYVCL3C31X' where id=7; -update noar ti set b2='Q2HM9KS8CBTGYVCL3C31X' where id=7; -update noar tt set v0='327KGVFXPA0316FT1ZA8XIAIX0H' where id=8; -update noar ti set v0='327KGVFXPA0316FT1ZA8XIAIX0H' where id=8; -update noar tt set b0='X3X361PXNR44Q6G5WIN5IRAVFIS5I' where id=8; -update noar ti set b0='X3X361PXNR44Q6G5WIN5IRAVFIS5I' where id=8; -update noar tt set v0='98UZSF9BUM1ROH0OV2' where id=8; -update noar ti set v0='98UZSF9BUM1ROH0OV2' where id=8; -update noar tt set b1='ZNCHZH8NQL' where id=8; -update noar ti set b1='ZNCHZH8NQL' where id=8; -update noar tt set v0='48FBHIG0N5XHHEA' where id=8; -update noar ti set v0='48FBHIG0N5XHHEA' where id=8; -update noar tt set b2='HUQ0S0HOHKD61ZZEOVR1LNV14H' where id=8; -update noar ti set b2='HUQ0S0HOHKD61ZZEOVR1LNV14H' where id=8; -update noar tt set v0='WIHJDOI6ILQLS833AI2R' where id=9; -update noar ti set v0='WIHJDOI6ILQLS833AI2R' where id=9; -update noar tt set b0='0UNZKDPCS' where id=9; -update noar ti set b0='0UNZKDPCS' where id=9; -update noar tt set v0='FZTQKCGIQS7HZGS2WF' where id=9; -update noar ti set v0='FZTQKCGIQS7HZGS2WF' where id=9; -update noar tt set b1='4IGWIHGSWCD96XWQVST4VQF5' where id=9; -update noar ti set b1='4IGWIHGSWCD96XWQVST4VQF5' where id=9; -update noar tt set v0='M9J50DDC5GT8KBKXWT97728CEEJ' where id=9; -update noar ti set v0='M9J50DDC5GT8KBKXWT97728CEEJ' where id=9; -update noar tt set b2='EKL1PKSRVRH40RFY' where id=9; -update noar ti set b2='EKL1PKSRVRH40RFY' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 blob not null, -b1 longblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='ON34SW6GOI6YEEYHIT4T' where id=1; -update noar ti set v0='ON34SW6GOI6YEEYHIT4T' where id=1; -update noar tt set b0='3EEMUY3P90' where id=1; -update noar ti set b0='3EEMUY3P90' where id=1; -update noar tt set v0='TS' where id=1; -update noar ti set v0='TS' where id=1; -update noar tt set b1='RLHOOZDTBQ' where id=1; -update noar ti set b1='RLHOOZDTBQ' where id=1; -update noar tt set v0='NRWUFVX65P9X8MOWQ5GPFV' where id=1; -update noar ti set v0='NRWUFVX65P9X8MOWQ5GPFV' where id=1; -update noar tt set b2='Q4GQLMZ5BJIMDC' where id=1; -update noar ti set b2='Q4GQLMZ5BJIMDC' where id=1; -update noar tt set v0='K5NIM86I5JB1T2X8L6G8NS6OG6W' where id=2; -update noar ti set v0='K5NIM86I5JB1T2X8L6G8NS6OG6W' where id=2; -update noar tt set b0='FT36QBK4MBMEEM0SPLDRNJ' where id=2; -update noar ti set b0='FT36QBK4MBMEEM0SPLDRNJ' where id=2; -update noar tt set v0='7ZV6MWYKYGTW5BPOFL' where id=2; -update noar ti set v0='7ZV6MWYKYGTW5BPOFL' where id=2; -update noar tt set b1='X0RXBN4YT8MR8GKIGX2ZCCDG5DH' where id=2; -update noar ti set b1='X0RXBN4YT8MR8GKIGX2ZCCDG5DH' where id=2; -update noar tt set v0='G9AKVXO3' where id=2; -update noar ti set v0='G9AKVXO3' where id=2; -update noar tt set b2='OOBQ3OEFKS7E1H0SQYTJVPPJMEN4' where id=2; -update noar ti set b2='OOBQ3OEFKS7E1H0SQYTJVPPJMEN4' where id=2; -update noar tt set v0='4' where id=3; -update noar ti set v0='4' where id=3; -update noar tt set b0='X7IAILF08583IT1IY17V5ZFGIGHDWLX3' where id=3; -update noar ti set b0='X7IAILF08583IT1IY17V5ZFGIGHDWLX3' where id=3; -update noar tt set v0='NWXHVFO9Z' where id=3; -update noar ti set v0='NWXHVFO9Z' where id=3; -update noar tt set b1='XNIIUSPF3GWN2K1AFIEMS41' where id=3; -update noar ti set b1='XNIIUSPF3GWN2K1AFIEMS41' where id=3; -update noar tt set v0='LIGMTF924REBH0J' where id=3; -update noar ti set v0='LIGMTF924REBH0J' where id=3; -update noar tt set b2='RS10M9NA5F1J0GV' where id=3; -update noar ti set b2='RS10M9NA5F1J0GV' where id=3; -update noar tt set v0='LQ0MQIWDN98C408QFP' where id=4; -update noar ti set v0='LQ0MQIWDN98C408QFP' where id=4; -update noar tt set b0='RR9OW' where id=4; -update noar ti set b0='RR9OW' where id=4; -update noar tt set v0='BOYZEYFH2XSTMHCU71XKPZ6FD90QTV9X' where id=4; -update noar ti set v0='BOYZEYFH2XSTMHCU71XKPZ6FD90QTV9X' where id=4; -update noar tt set b1='W2QU4XKNZ511' where id=4; -update noar ti set b1='W2QU4XKNZ511' where id=4; -update noar tt set v0='1RWRMZD0KA5Y0BAU2WYJTP2ZWR' where id=4; -update noar ti set v0='1RWRMZD0KA5Y0BAU2WYJTP2ZWR' where id=4; -update noar tt set b2='7' where id=4; -update noar ti set b2='7' where id=4; -update noar tt set v0='EE' where id=5; -update noar ti set v0='EE' where id=5; -update noar tt set b0='5AL7CE92GT' where id=5; -update noar ti set b0='5AL7CE92GT' where id=5; -update noar tt set v0='BJIS15P17SGQP38FL1QPGZQODUGW4XZS' where id=5; -update noar ti set v0='BJIS15P17SGQP38FL1QPGZQODUGW4XZS' where id=5; -update noar tt set b1='Z1O6X4NWGQDI9I43JMSE4GN' where id=5; -update noar ti set b1='Z1O6X4NWGQDI9I43JMSE4GN' where id=5; -update noar tt set v0='FJTJIDC2ZPM9LXFGGQWRA' where id=5; -update noar ti set v0='FJTJIDC2ZPM9LXFGGQWRA' where id=5; -update noar tt set b2='T77QTT7V5LRZUAVHBVPD0ACV4F' where id=5; -update noar ti set b2='T77QTT7V5LRZUAVHBVPD0ACV4F' where id=5; -update noar tt set v0='GNT4L4J0V3' where id=6; -update noar ti set v0='GNT4L4J0V3' where id=6; -update noar tt set b0='FSGQ40SAQ2PW8G6BQJ3HOM302' where id=6; -update noar ti set b0='FSGQ40SAQ2PW8G6BQJ3HOM302' where id=6; -update noar tt set v0='YQ5' where id=6; -update noar ti set v0='YQ5' where id=6; -update noar tt set b1='XR80YMUF92' where id=6; -update noar ti set b1='XR80YMUF92' where id=6; -update noar tt set v0='PF309N31UIMVFI8EOHJOWQ6LO6NBMB5' where id=6; -update noar ti set v0='PF309N31UIMVFI8EOHJOWQ6LO6NBMB5' where id=6; -update noar tt set b2='VJC6LHQM9UZ3' where id=6; -update noar ti set b2='VJC6LHQM9UZ3' where id=6; -update noar tt set v0='YGQFQJG3Z7ZIBCL5EXT8' where id=7; -update noar ti set v0='YGQFQJG3Z7ZIBCL5EXT8' where id=7; -update noar tt set b0='FTGCCRU' where id=7; -update noar ti set b0='FTGCCRU' where id=7; -update noar tt set v0='WZAKE46509' where id=7; -update noar ti set v0='WZAKE46509' where id=7; -update noar tt set b1='CBUPWWIAHJVE67SCZ9G4TN7P' where id=7; -update noar ti set b1='CBUPWWIAHJVE67SCZ9G4TN7P' where id=7; -update noar tt set v0='RTJ03' where id=7; -update noar ti set v0='RTJ03' where id=7; -update noar tt set b2='VIB' where id=7; -update noar ti set b2='VIB' where id=7; -update noar tt set v0='NUCUQDLQF2TOBMSPFZ' where id=8; -update noar ti set v0='NUCUQDLQF2TOBMSPFZ' where id=8; -update noar tt set b0='5GHZ2PI8TS4L8WY4W' where id=8; -update noar ti set b0='5GHZ2PI8TS4L8WY4W' where id=8; -update noar tt set v0='JU40VR5TNNZKJCHMJ8' where id=8; -update noar ti set v0='JU40VR5TNNZKJCHMJ8' where id=8; -update noar tt set b1='QNG6B2' where id=8; -update noar ti set b1='QNG6B2' where id=8; -update noar tt set v0='CN4JHQQT26FW7AMLMDOCUJ83YB' where id=8; -update noar ti set v0='CN4JHQQT26FW7AMLMDOCUJ83YB' where id=8; -update noar tt set b2='IO6QT9W' where id=8; -update noar ti set b2='IO6QT9W' where id=8; -update noar tt set v0='GLT2IXMGUJKZF0ZO6Y0LIMPUR2RAR' where id=9; -update noar ti set v0='GLT2IXMGUJKZF0ZO6Y0LIMPUR2RAR' where id=9; -update noar tt set b0='GQOZIU419CI8AX' where id=9; -update noar ti set b0='GQOZIU419CI8AX' where id=9; -update noar tt set v0='G1847DTXD5K4TNE4DZKR7LW' where id=9; -update noar ti set v0='G1847DTXD5K4TNE4DZKR7LW' where id=9; -update noar tt set b1='N' where id=9; -update noar ti set b1='N' where id=9; -update noar tt set v0='CMHG24TNY0HE9JCV1K8QC2B3G' where id=9; -update noar ti set v0='CMHG24TNY0HE9JCV1K8QC2B3G' where id=9; -update noar tt set b2='YG759HGELB06KCMH0AGY' where id=9; -update noar ti set b2='YG759HGELB06KCMH0AGY' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 blob null, -b1 longblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='8Y3' where id=1; -update noar ti set v0='8Y3' where id=1; -update noar tt set b0='C7M20TP5NKK' where id=1; -update noar ti set b0='C7M20TP5NKK' where id=1; -update noar tt set v0='2ISG42PKQUYJ3' where id=1; -update noar ti set v0='2ISG42PKQUYJ3' where id=1; -update noar tt set b1='DJFRKU8X' where id=1; -update noar ti set b1='DJFRKU8X' where id=1; -update noar tt set v0='PEZLQW4KNI8KS99CT2C6AKZ1OK1' where id=1; -update noar ti set v0='PEZLQW4KNI8KS99CT2C6AKZ1OK1' where id=1; -update noar tt set b2='0FCRQVLB5DFDS3K6N26BCA1M1VMB403' where id=1; -update noar ti set b2='0FCRQVLB5DFDS3K6N26BCA1M1VMB403' where id=1; -update noar tt set v0='2U5V9ZSPD2MY3O25XXL2N6ZWB4Q6DWGE' where id=2; -update noar ti set v0='2U5V9ZSPD2MY3O25XXL2N6ZWB4Q6DWGE' where id=2; -update noar tt set b0='60O315' where id=2; -update noar ti set b0='60O315' where id=2; -update noar tt set v0='PFV4BEXLLRRNEEWTITGFSTS6' where id=2; -update noar ti set v0='PFV4BEXLLRRNEEWTITGFSTS6' where id=2; -update noar tt set b1='GFO8M01KOUXFD5A02OU3C4ZTGQZ8O' where id=2; -update noar ti set b1='GFO8M01KOUXFD5A02OU3C4ZTGQZ8O' where id=2; -update noar tt set v0='IZR1' where id=2; -update noar ti set v0='IZR1' where id=2; -update noar tt set b2='F6SCCPN2NFEKZP79N' where id=2; -update noar ti set b2='F6SCCPN2NFEKZP79N' where id=2; -update noar tt set v0='1IYS8D2OL30ZWU' where id=3; -update noar ti set v0='1IYS8D2OL30ZWU' where id=3; -update noar tt set b0='DMPWIBQCEAZ9RTHU' where id=3; -update noar ti set b0='DMPWIBQCEAZ9RTHU' where id=3; -update noar tt set v0='ONDJ7B94EN77IXSXEF23' where id=3; -update noar ti set v0='ONDJ7B94EN77IXSXEF23' where id=3; -update noar tt set b1='UR0WSHTBS4QZ' where id=3; -update noar ti set b1='UR0WSHTBS4QZ' where id=3; -update noar tt set v0='7TXALEXNOTPQFQG1YOTBCC' where id=3; -update noar ti set v0='7TXALEXNOTPQFQG1YOTBCC' where id=3; -update noar tt set b2='Y51ZCWRUE6UNVFLQE8QFGJBUTW7KEEW1' where id=3; -update noar ti set b2='Y51ZCWRUE6UNVFLQE8QFGJBUTW7KEEW1' where id=3; -update noar tt set v0='GQ4J9YUIOHP1XMALJDZG2' where id=4; -update noar ti set v0='GQ4J9YUIOHP1XMALJDZG2' where id=4; -update noar tt set b0='5D77OFM2RCP8K34C4877' where id=4; -update noar ti set b0='5D77OFM2RCP8K34C4877' where id=4; -update noar tt set v0='DPWBEJKK1' where id=4; -update noar ti set v0='DPWBEJKK1' where id=4; -update noar tt set b1='4PY93OUIDUL' where id=4; -update noar ti set b1='4PY93OUIDUL' where id=4; -update noar tt set v0='9B3QUDM74XNPELR4FOJ7YNUA8OAQQ' where id=4; -update noar ti set v0='9B3QUDM74XNPELR4FOJ7YNUA8OAQQ' where id=4; -update noar tt set b2='U2P' where id=4; -update noar ti set b2='U2P' where id=4; -update noar tt set v0='MVLAAO6ZZW0EP54ZHQW2QASI9HHFSSZK' where id=5; -update noar ti set v0='MVLAAO6ZZW0EP54ZHQW2QASI9HHFSSZK' where id=5; -update noar tt set b0='5DEZK0A28PXP9R45E4H' where id=5; -update noar ti set b0='5DEZK0A28PXP9R45E4H' where id=5; -update noar tt set v0='YL2LGG579J7' where id=5; -update noar ti set v0='YL2LGG579J7' where id=5; -update noar tt set b1='0N3U8H04ENSBB0J67AJU517IT81VU7W' where id=5; -update noar ti set b1='0N3U8H04ENSBB0J67AJU517IT81VU7W' where id=5; -update noar tt set v0='GGGSMOO69KWTJGNBRNNWLOG8PA' where id=5; -update noar ti set v0='GGGSMOO69KWTJGNBRNNWLOG8PA' where id=5; -update noar tt set b2='3BUA5Q' where id=5; -update noar ti set b2='3BUA5Q' where id=5; -update noar tt set v0='2AIXGG2USKTI8A' where id=6; -update noar ti set v0='2AIXGG2USKTI8A' where id=6; -update noar tt set b0='511JOA3UVHFJXLI2GYXZOXXL19' where id=6; -update noar ti set b0='511JOA3UVHFJXLI2GYXZOXXL19' where id=6; -update noar tt set v0='YJ8YG420YXZAPER' where id=6; -update noar ti set v0='YJ8YG420YXZAPER' where id=6; -update noar tt set b1='TV52WC6AA7HTQ7RWVVZBUMS0N0H4IU' where id=6; -update noar ti set b1='TV52WC6AA7HTQ7RWVVZBUMS0N0H4IU' where id=6; -update noar tt set v0='9NTD8DMB8PTECD5MXFOEUJ5L87' where id=6; -update noar ti set v0='9NTD8DMB8PTECD5MXFOEUJ5L87' where id=6; -update noar tt set b2='HQXNBEL9KYL2DPIHAVNLEKBAM1' where id=6; -update noar ti set b2='HQXNBEL9KYL2DPIHAVNLEKBAM1' where id=6; -update noar tt set v0='WY3LFGM0OTK3RXC8KO7TX3' where id=7; -update noar ti set v0='WY3LFGM0OTK3RXC8KO7TX3' where id=7; -update noar tt set b0='UYICPWZAKPO1DRVSEJRMFG88' where id=7; -update noar ti set b0='UYICPWZAKPO1DRVSEJRMFG88' where id=7; -update noar tt set v0='H4XGE' where id=7; -update noar ti set v0='H4XGE' where id=7; -update noar tt set b1='HKJEJF6' where id=7; -update noar ti set b1='HKJEJF6' where id=7; -update noar tt set v0='Q713SG03E' where id=7; -update noar ti set v0='Q713SG03E' where id=7; -update noar tt set b2='S4BAN' where id=7; -update noar ti set b2='S4BAN' where id=7; -update noar tt set v0='GC' where id=8; -update noar ti set v0='GC' where id=8; -update noar tt set b0='CR5YQDGXFHQ56V77W4LU1FZSR4GBRC2' where id=8; -update noar ti set b0='CR5YQDGXFHQ56V77W4LU1FZSR4GBRC2' where id=8; -update noar tt set v0='QVRCYS8SH1GYKWKLPQ6' where id=8; -update noar ti set v0='QVRCYS8SH1GYKWKLPQ6' where id=8; -update noar tt set b1='6CNGJHSOMOQSCZAN4' where id=8; -update noar ti set b1='6CNGJHSOMOQSCZAN4' where id=8; -update noar tt set v0='N' where id=8; -update noar ti set v0='N' where id=8; -update noar tt set b2='LF8JOERZ8TANILPUAN3I2O56F7YBBG4G' where id=8; -update noar ti set b2='LF8JOERZ8TANILPUAN3I2O56F7YBBG4G' where id=8; -update noar tt set v0='RZ5TQBROVDMBNWF2F6BE8MNG946' where id=9; -update noar ti set v0='RZ5TQBROVDMBNWF2F6BE8MNG946' where id=9; -update noar tt set b0='OOHO1L' where id=9; -update noar ti set b0='OOHO1L' where id=9; -update noar tt set v0='18VCHBJ7W4KJY6CQDY' where id=9; -update noar ti set v0='18VCHBJ7W4KJY6CQDY' where id=9; -update noar tt set b1='X5BCUCM9VEDYYIAY5FZTNJ5W' where id=9; -update noar ti set b1='X5BCUCM9VEDYYIAY5FZTNJ5W' where id=9; -update noar tt set v0='Y3887D8R2CGZYP7AO4G8TTO7' where id=9; -update noar ti set v0='Y3887D8R2CGZYP7AO4G8TTO7' where id=9; -update noar tt set b2='MEOZ2COU46VAAX4' where id=9; -update noar ti set b2='MEOZ2COU46VAAX4' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 blob null, -b1 longblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='RP7CWTP0UNYRTSVWJ' where id=1; -update noar ti set v0='RP7CWTP0UNYRTSVWJ' where id=1; -update noar tt set b0='H2' where id=1; -update noar ti set b0='H2' where id=1; -update noar tt set v0='0BYL4R8G9HND4VMWMNEOQYO9' where id=1; -update noar ti set v0='0BYL4R8G9HND4VMWMNEOQYO9' where id=1; -update noar tt set b1='74PLQCVRJCRFHKJ07980K4' where id=1; -update noar ti set b1='74PLQCVRJCRFHKJ07980K4' where id=1; -update noar tt set v0='MK7QYEG8UCHEHAMZ2JQKP' where id=1; -update noar ti set v0='MK7QYEG8UCHEHAMZ2JQKP' where id=1; -update noar tt set b2='VNS6MMZLULKB5SU9' where id=1; -update noar ti set b2='VNS6MMZLULKB5SU9' where id=1; -update noar tt set v0='96EA6JRIE0MHA74K2KZXMWBSBK' where id=2; -update noar ti set v0='96EA6JRIE0MHA74K2KZXMWBSBK' where id=2; -update noar tt set b0='3M1LFR91' where id=2; -update noar ti set b0='3M1LFR91' where id=2; -update noar tt set v0='06YHVUESSO3LYS396W6BT1N5' where id=2; -update noar ti set v0='06YHVUESSO3LYS396W6BT1N5' where id=2; -update noar tt set b1='I90L6' where id=2; -update noar ti set b1='I90L6' where id=2; -update noar tt set v0='QJLNAMAIIDUG' where id=2; -update noar ti set v0='QJLNAMAIIDUG' where id=2; -update noar tt set b2='A171AT8ZDPY2OBR4S9' where id=2; -update noar ti set b2='A171AT8ZDPY2OBR4S9' where id=2; -update noar tt set v0='IKZBS4K2' where id=3; -update noar ti set v0='IKZBS4K2' where id=3; -update noar tt set b0='20LSQ9JLF7U0XTML' where id=3; -update noar ti set b0='20LSQ9JLF7U0XTML' where id=3; -update noar tt set v0='EXFXU7IHYHLM1Q7DSIXH5RKJJICBH6' where id=3; -update noar ti set v0='EXFXU7IHYHLM1Q7DSIXH5RKJJICBH6' where id=3; -update noar tt set b1='TJ8ZKT1NVUS918LZTFZ' where id=3; -update noar ti set b1='TJ8ZKT1NVUS918LZTFZ' where id=3; -update noar tt set v0='E30DI811ATKH5LX37NGY9COGEK' where id=3; -update noar ti set v0='E30DI811ATKH5LX37NGY9COGEK' where id=3; -update noar tt set b2='GEN6IEOKW3R' where id=3; -update noar ti set b2='GEN6IEOKW3R' where id=3; -update noar tt set v0='VLBNSU6647' where id=4; -update noar ti set v0='VLBNSU6647' where id=4; -update noar tt set b0='F7BZVRUAUUJGS2ZIVILP7U' where id=4; -update noar ti set b0='F7BZVRUAUUJGS2ZIVILP7U' where id=4; -update noar tt set v0='6VGCON4QPOA483EDJVG1CS6L03L' where id=4; -update noar ti set v0='6VGCON4QPOA483EDJVG1CS6L03L' where id=4; -update noar tt set b1='6VOAVF' where id=4; -update noar ti set b1='6VOAVF' where id=4; -update noar tt set v0='DHGRTS4E1MLFO' where id=4; -update noar ti set v0='DHGRTS4E1MLFO' where id=4; -update noar tt set b2='VSNUPD' where id=4; -update noar ti set b2='VSNUPD' where id=4; -update noar tt set v0='X6RI4L2Z05NM5K0Y84K6W8R2' where id=5; -update noar ti set v0='X6RI4L2Z05NM5K0Y84K6W8R2' where id=5; -update noar tt set b0='Q3CPKIN7AWZC' where id=5; -update noar ti set b0='Q3CPKIN7AWZC' where id=5; -update noar tt set v0='MP8YMBMBNS' where id=5; -update noar ti set v0='MP8YMBMBNS' where id=5; -update noar tt set b1='A4OPRVH33' where id=5; -update noar ti set b1='A4OPRVH33' where id=5; -update noar tt set v0='ITJG7Y1DTTGHZ9HAXAOOFJVQ01HF4G' where id=5; -update noar ti set v0='ITJG7Y1DTTGHZ9HAXAOOFJVQ01HF4G' where id=5; -update noar tt set b2='5RGR4DZQ43CDXC' where id=5; -update noar ti set b2='5RGR4DZQ43CDXC' where id=5; -update noar tt set v0='D87Y5WN' where id=6; -update noar ti set v0='D87Y5WN' where id=6; -update noar tt set b0='G' where id=6; -update noar ti set b0='G' where id=6; -update noar tt set v0='YQ752CPTFT1WSLNV6' where id=6; -update noar ti set v0='YQ752CPTFT1WSLNV6' where id=6; -update noar tt set b1='RA3HNHL8I52HH9JK' where id=6; -update noar ti set b1='RA3HNHL8I52HH9JK' where id=6; -update noar tt set v0='NX90WCPXSPNQRAB0ATBXRA7UYV2DSE' where id=6; -update noar ti set v0='NX90WCPXSPNQRAB0ATBXRA7UYV2DSE' where id=6; -update noar tt set b2='BBUGZA' where id=6; -update noar ti set b2='BBUGZA' where id=6; -update noar tt set v0='EJBS46I' where id=7; -update noar ti set v0='EJBS46I' where id=7; -update noar tt set b0='ZKBUAPNC4GXPS2M23143M7SQID' where id=7; -update noar ti set b0='ZKBUAPNC4GXPS2M23143M7SQID' where id=7; -update noar tt set v0='53U' where id=7; -update noar ti set v0='53U' where id=7; -update noar tt set b1='30GQ4PWIB6DFFUDL4GSPNEJCLIELT' where id=7; -update noar ti set b1='30GQ4PWIB6DFFUDL4GSPNEJCLIELT' where id=7; -update noar tt set v0='MEN8ZFINIGCU5YBK' where id=7; -update noar ti set v0='MEN8ZFINIGCU5YBK' where id=7; -update noar tt set b2='8TZX5AAU' where id=7; -update noar ti set b2='8TZX5AAU' where id=7; -update noar tt set v0='QQIRMPX87NJUOM7D5YU60G' where id=8; -update noar ti set v0='QQIRMPX87NJUOM7D5YU60G' where id=8; -update noar tt set b0='OPP90DRY9PMJ' where id=8; -update noar ti set b0='OPP90DRY9PMJ' where id=8; -update noar tt set v0='S5SZXMSXGTGAQAN10B3WGRF' where id=8; -update noar ti set v0='S5SZXMSXGTGAQAN10B3WGRF' where id=8; -update noar tt set b1='YQHIORNSVLA9L3' where id=8; -update noar ti set b1='YQHIORNSVLA9L3' where id=8; -update noar tt set v0='LWH7YTTWDTZGOVMB9CV' where id=8; -update noar ti set v0='LWH7YTTWDTZGOVMB9CV' where id=8; -update noar tt set b2='IR85OPJI921MQBRY88DK' where id=8; -update noar ti set b2='IR85OPJI921MQBRY88DK' where id=8; -update noar tt set v0='2BHA6BWS0PIGZCO42TQM38RUD25QD' where id=9; -update noar ti set v0='2BHA6BWS0PIGZCO42TQM38RUD25QD' where id=9; -update noar tt set b0='I6KHR6I' where id=9; -update noar ti set b0='I6KHR6I' where id=9; -update noar tt set v0='10LFBX0LYRDXGF4BJFKZQJNH0H' where id=9; -update noar ti set v0='10LFBX0LYRDXGF4BJFKZQJNH0H' where id=9; -update noar tt set b1='BLLTY4V80DHCX3DKDTMO1W0C66' where id=9; -update noar ti set b1='BLLTY4V80DHCX3DKDTMO1W0C66' where id=9; -update noar tt set v0='Q7JDC3F3C406B5OT10ALKRW64' where id=9; -update noar ti set v0='Q7JDC3F3C406B5OT10ALKRW64' where id=9; -update noar tt set b2='FO9726N1GEAAEUJ8ZVT84A' where id=9; -update noar ti set b2='FO9726N1GEAAEUJ8ZVT84A' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 blob not null, -b1 longblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='YVHFGA42' where id=1; -update noar ti set v0='YVHFGA42' where id=1; -update noar tt set b0='HPI' where id=1; -update noar ti set b0='HPI' where id=1; -update noar tt set v0='9KCNJW1XEJNCTJ' where id=1; -update noar ti set v0='9KCNJW1XEJNCTJ' where id=1; -update noar tt set b1='5HM7OIWEYRIJSF5YMFLYDPCVC' where id=1; -update noar ti set b1='5HM7OIWEYRIJSF5YMFLYDPCVC' where id=1; -update noar tt set v0='FARLMBQ' where id=1; -update noar ti set v0='FARLMBQ' where id=1; -update noar tt set b2='B0U7' where id=1; -update noar ti set b2='B0U7' where id=1; -update noar tt set v0='8DQNPHJFW9NZ' where id=2; -update noar ti set v0='8DQNPHJFW9NZ' where id=2; -update noar tt set b0='32PJQ7I' where id=2; -update noar ti set b0='32PJQ7I' where id=2; -update noar tt set v0='F3Z80HY0GY5SP54HPQU' where id=2; -update noar ti set v0='F3Z80HY0GY5SP54HPQU' where id=2; -update noar tt set b1='GIVWCKC8KQ4PM0H09D7SDG4' where id=2; -update noar ti set b1='GIVWCKC8KQ4PM0H09D7SDG4' where id=2; -update noar tt set v0='C27ZNH7GEPTN3CO5OPT58TYN83' where id=2; -update noar ti set v0='C27ZNH7GEPTN3CO5OPT58TYN83' where id=2; -update noar tt set b2='0FAX88NDEI52FNB66D064YQW' where id=2; -update noar ti set b2='0FAX88NDEI52FNB66D064YQW' where id=2; -update noar tt set v0='7Z04R5C2FY11XMMR0HA340YMR' where id=3; -update noar ti set v0='7Z04R5C2FY11XMMR0HA340YMR' where id=3; -update noar tt set b0='SHFIZYCW92IFDXA9UH0FDLVUXB' where id=3; -update noar ti set b0='SHFIZYCW92IFDXA9UH0FDLVUXB' where id=3; -update noar tt set v0='FE6TR27YNM1UJXY5HPJ2EU01BD' where id=3; -update noar ti set v0='FE6TR27YNM1UJXY5HPJ2EU01BD' where id=3; -update noar tt set b1='XNLAQ0QDRM502A' where id=3; -update noar ti set b1='XNLAQ0QDRM502A' where id=3; -update noar tt set v0='P8HOG53Z2OAN70M1M' where id=3; -update noar ti set v0='P8HOG53Z2OAN70M1M' where id=3; -update noar tt set b2='M' where id=3; -update noar ti set b2='M' where id=3; -update noar tt set v0='M0B5P0BNTNWKXVZY1SFGAF5TC0W4WT' where id=4; -update noar ti set v0='M0B5P0BNTNWKXVZY1SFGAF5TC0W4WT' where id=4; -update noar tt set b0='Y3Q16O' where id=4; -update noar ti set b0='Y3Q16O' where id=4; -update noar tt set v0='9M24D39D' where id=4; -update noar ti set v0='9M24D39D' where id=4; -update noar tt set b1='AUBI2H1VOR96B6PA4UKU0GLG4D' where id=4; -update noar ti set b1='AUBI2H1VOR96B6PA4UKU0GLG4D' where id=4; -update noar tt set v0='LBXCA1WZQT66K7PH2M1BHZKDWA7KAHH' where id=4; -update noar ti set v0='LBXCA1WZQT66K7PH2M1BHZKDWA7KAHH' where id=4; -update noar tt set b2='0P76Y65Y80Z8DWTM887J1ZD67BITJIK5' where id=4; -update noar ti set b2='0P76Y65Y80Z8DWTM887J1ZD67BITJIK5' where id=4; -update noar tt set v0='MKOA85VC40EUBGFZ08N5B6Y47THV' where id=5; -update noar ti set v0='MKOA85VC40EUBGFZ08N5B6Y47THV' where id=5; -update noar tt set b0='NKSCZJW6YW7O1BQ5FD' where id=5; -update noar ti set b0='NKSCZJW6YW7O1BQ5FD' where id=5; -update noar tt set v0='KG5U7CLTSLBNPASK6J00' where id=5; -update noar ti set v0='KG5U7CLTSLBNPASK6J00' where id=5; -update noar tt set b1='N7WKLPO9F5M6G7NNBQ4PS92O0' where id=5; -update noar ti set b1='N7WKLPO9F5M6G7NNBQ4PS92O0' where id=5; -update noar tt set v0='3GF7X10QAZCAEOJYHR' where id=5; -update noar ti set v0='3GF7X10QAZCAEOJYHR' where id=5; -update noar tt set b2='5E9UZGJVSA961R' where id=5; -update noar ti set b2='5E9UZGJVSA961R' where id=5; -update noar tt set v0='INOMBPQ13' where id=6; -update noar ti set v0='INOMBPQ13' where id=6; -update noar tt set b0='RV0VI8DJOQTFY1VRUBW8GPIQRIM' where id=6; -update noar ti set b0='RV0VI8DJOQTFY1VRUBW8GPIQRIM' where id=6; -update noar tt set v0='SLZYIEH0GSQO9Y976SJM7OY8WCAMC9P' where id=6; -update noar ti set v0='SLZYIEH0GSQO9Y976SJM7OY8WCAMC9P' where id=6; -update noar tt set b1='GQX6P0XBP8' where id=6; -update noar ti set b1='GQX6P0XBP8' where id=6; -update noar tt set v0='V5LX63EOP5E6HS2' where id=6; -update noar ti set v0='V5LX63EOP5E6HS2' where id=6; -update noar tt set b2='6GWMAJ3669T307F' where id=6; -update noar ti set b2='6GWMAJ3669T307F' where id=6; -update noar tt set v0='E9TZWKCMRA044PE' where id=7; -update noar ti set v0='E9TZWKCMRA044PE' where id=7; -update noar tt set b0='CYFARUDS8CWCU9DORMII02N' where id=7; -update noar ti set b0='CYFARUDS8CWCU9DORMII02N' where id=7; -update noar tt set v0='X0CD7MR8FBLJFLQE135KUJ' where id=7; -update noar ti set v0='X0CD7MR8FBLJFLQE135KUJ' where id=7; -update noar tt set b1='874BRIOJU3INV0ZO6RB6SRN8CW' where id=7; -update noar ti set b1='874BRIOJU3INV0ZO6RB6SRN8CW' where id=7; -update noar tt set v0='FCNKRMJ' where id=7; -update noar ti set v0='FCNKRMJ' where id=7; -update noar tt set b2='VIYE91QZ7VLSV65FV' where id=7; -update noar ti set b2='VIYE91QZ7VLSV65FV' where id=7; -update noar tt set v0='LO9ZZY3E49X86LDO7DPJL2' where id=8; -update noar ti set v0='LO9ZZY3E49X86LDO7DPJL2' where id=8; -update noar tt set b0='KEGTD0' where id=8; -update noar ti set b0='KEGTD0' where id=8; -update noar tt set v0='XTDJQZCQUBQJKY0MV7FF2GA8A2' where id=8; -update noar ti set v0='XTDJQZCQUBQJKY0MV7FF2GA8A2' where id=8; -update noar tt set b1='CR6RYHAGWYQCIC6MJXWZTXC75FJA' where id=8; -update noar ti set b1='CR6RYHAGWYQCIC6MJXWZTXC75FJA' where id=8; -update noar tt set v0='59DD448RJKL' where id=8; -update noar ti set v0='59DD448RJKL' where id=8; -update noar tt set b2='TYWB' where id=8; -update noar ti set b2='TYWB' where id=8; -update noar tt set v0='YCZ0R65OSXPKXYY8N' where id=9; -update noar ti set v0='YCZ0R65OSXPKXYY8N' where id=9; -update noar tt set b0='HVQ3C5DNERP4C' where id=9; -update noar ti set b0='HVQ3C5DNERP4C' where id=9; -update noar tt set v0='U4E9M3DB6978B0T' where id=9; -update noar ti set v0='U4E9M3DB6978B0T' where id=9; -update noar tt set b1='VQ2UVBMRQHOHUJ795XYEPJ40J71DX' where id=9; -update noar ti set b1='VQ2UVBMRQHOHUJ795XYEPJ40J71DX' where id=9; -update noar tt set v0='YD46X1R2QUQNP8M6G1LJWNA1WRXP3Y5A' where id=9; -update noar ti set v0='YD46X1R2QUQNP8M6G1LJWNA1WRXP3Y5A' where id=9; -update noar tt set b2='N1IIZHXVX1K4G0' where id=9; -update noar ti set b2='N1IIZHXVX1K4G0' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 blob not null, -b1 longblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='NZXJ90XMYGTZB0RPJ0SP' where id=1; -update noar ti set v0='NZXJ90XMYGTZB0RPJ0SP' where id=1; -update noar tt set b0='899T3TVG2LTTORAWL0EGI' where id=1; -update noar ti set b0='899T3TVG2LTTORAWL0EGI' where id=1; -update noar tt set v0='5WFSQGFMY56Z1' where id=1; -update noar ti set v0='5WFSQGFMY56Z1' where id=1; -update noar tt set b1='ZL4YN6BLROC' where id=1; -update noar ti set b1='ZL4YN6BLROC' where id=1; -update noar tt set v0='PB824GVF4HHU3Y2UVN' where id=1; -update noar ti set v0='PB824GVF4HHU3Y2UVN' where id=1; -update noar tt set b2='19GG3J899DOC8WC99RNU0RK26' where id=1; -update noar ti set b2='19GG3J899DOC8WC99RNU0RK26' where id=1; -update noar tt set v0='UY7IA5MSI3' where id=2; -update noar ti set v0='UY7IA5MSI3' where id=2; -update noar tt set b0='DAYFUPLX' where id=2; -update noar ti set b0='DAYFUPLX' where id=2; -update noar tt set v0='ST' where id=2; -update noar ti set v0='ST' where id=2; -update noar tt set b1='AJEDD3ZC41' where id=2; -update noar ti set b1='AJEDD3ZC41' where id=2; -update noar tt set v0='4HO1RIGUZBMM' where id=2; -update noar ti set v0='4HO1RIGUZBMM' where id=2; -update noar tt set b2='7MH6L7XZKI6' where id=2; -update noar ti set b2='7MH6L7XZKI6' where id=2; -update noar tt set v0='FYJO84BHH5XUW564WW6590JZC374' where id=3; -update noar ti set v0='FYJO84BHH5XUW564WW6590JZC374' where id=3; -update noar tt set b0='F78S' where id=3; -update noar ti set b0='F78S' where id=3; -update noar tt set v0='04AHZK5P' where id=3; -update noar ti set v0='04AHZK5P' where id=3; -update noar tt set b1='4Q27EG2ZAA470C0Q7CZIQFDQ' where id=3; -update noar ti set b1='4Q27EG2ZAA470C0Q7CZIQFDQ' where id=3; -update noar tt set v0='SE798L3AERBT' where id=3; -update noar ti set v0='SE798L3AERBT' where id=3; -update noar tt set b2='69NY2N5FI7NZSXDHX7WAFO4T2FX3GDJ' where id=3; -update noar ti set b2='69NY2N5FI7NZSXDHX7WAFO4T2FX3GDJ' where id=3; -update noar tt set v0='D1CS' where id=4; -update noar ti set v0='D1CS' where id=4; -update noar tt set b0='YZTDGG649QB218Y' where id=4; -update noar ti set b0='YZTDGG649QB218Y' where id=4; -update noar tt set v0='YYKDWWOPOCWEG' where id=4; -update noar ti set v0='YYKDWWOPOCWEG' where id=4; -update noar tt set b1='BGBJIOYDJ2ERACX1K2M' where id=4; -update noar ti set b1='BGBJIOYDJ2ERACX1K2M' where id=4; -update noar tt set v0='JJDK5' where id=4; -update noar ti set v0='JJDK5' where id=4; -update noar tt set b2='QHOYQLYML19MXXSKS43J59J' where id=4; -update noar ti set b2='QHOYQLYML19MXXSKS43J59J' where id=4; -update noar tt set v0='VCK2G203AHNV7EX891M730A193LV' where id=5; -update noar ti set v0='VCK2G203AHNV7EX891M730A193LV' where id=5; -update noar tt set b0='T2S0' where id=5; -update noar ti set b0='T2S0' where id=5; -update noar tt set v0='8' where id=5; -update noar ti set v0='8' where id=5; -update noar tt set b1='ELNBDW3T2PMKSEAQU' where id=5; -update noar ti set b1='ELNBDW3T2PMKSEAQU' where id=5; -update noar tt set v0='LFQ' where id=5; -update noar ti set v0='LFQ' where id=5; -update noar tt set b2='SJUBUB3UBQWIQA31KPVI9H' where id=5; -update noar ti set b2='SJUBUB3UBQWIQA31KPVI9H' where id=5; -update noar tt set v0='ZP3ZSSQZFF0T7D0YKQXH304XCO' where id=6; -update noar ti set v0='ZP3ZSSQZFF0T7D0YKQXH304XCO' where id=6; -update noar tt set b0='L0I6318E4K78XR0SLC9O17' where id=6; -update noar ti set b0='L0I6318E4K78XR0SLC9O17' where id=6; -update noar tt set v0='92XSYU2J9AKJWFFIK8KCWDC2VDQLU9' where id=6; -update noar ti set v0='92XSYU2J9AKJWFFIK8KCWDC2VDQLU9' where id=6; -update noar tt set b1='S2EH5G24' where id=6; -update noar ti set b1='S2EH5G24' where id=6; -update noar tt set v0='I2AWY65O5PQH64U7NA8Q8VHV8BRB8IBN' where id=6; -update noar ti set v0='I2AWY65O5PQH64U7NA8Q8VHV8BRB8IBN' where id=6; -update noar tt set b2='FRF1CMSYYDWPVO050SGL' where id=6; -update noar ti set b2='FRF1CMSYYDWPVO050SGL' where id=6; -update noar tt set v0='0RJQEC8XWVE' where id=7; -update noar ti set v0='0RJQEC8XWVE' where id=7; -update noar tt set b0='BGYPMLS81YE0UD9O0MQS' where id=7; -update noar ti set b0='BGYPMLS81YE0UD9O0MQS' where id=7; -update noar tt set v0='CTTJCMWL5PRDAHRQJZB' where id=7; -update noar ti set v0='CTTJCMWL5PRDAHRQJZB' where id=7; -update noar tt set b1='AXO03UIKOVM54NNSMY' where id=7; -update noar ti set b1='AXO03UIKOVM54NNSMY' where id=7; -update noar tt set v0='S' where id=7; -update noar ti set v0='S' where id=7; -update noar tt set b2='0FH7H9L93D6M7QQOKU5MBRLL' where id=7; -update noar ti set b2='0FH7H9L93D6M7QQOKU5MBRLL' where id=7; -update noar tt set v0='PABN14PGJECJNR2NVYGBR1IW9FXLH' where id=8; -update noar ti set v0='PABN14PGJECJNR2NVYGBR1IW9FXLH' where id=8; -update noar tt set b0='66ZN5LOOHOQJLVEBVV2MT7ZOS16OD' where id=8; -update noar ti set b0='66ZN5LOOHOQJLVEBVV2MT7ZOS16OD' where id=8; -update noar tt set v0='NDYQOZG3I453DTRYOUJB' where id=8; -update noar ti set v0='NDYQOZG3I453DTRYOUJB' where id=8; -update noar tt set b1='13XJRQY1BLHQOQJ' where id=8; -update noar ti set b1='13XJRQY1BLHQOQJ' where id=8; -update noar tt set v0='YGN19TJZC6WB94WKQAFG52SXDY2AX8O9' where id=8; -update noar ti set v0='YGN19TJZC6WB94WKQAFG52SXDY2AX8O9' where id=8; -update noar tt set b2='DKRRR284ZNLL4H6892' where id=8; -update noar ti set b2='DKRRR284ZNLL4H6892' where id=8; -update noar tt set v0='OJPSA' where id=9; -update noar ti set v0='OJPSA' where id=9; -update noar tt set b0='7ORBM8TWGMI73CHH4ER4' where id=9; -update noar ti set b0='7ORBM8TWGMI73CHH4ER4' where id=9; -update noar tt set v0='4HN7HS70D8UEW5ZQ84YG4T9IY8NDQ' where id=9; -update noar ti set v0='4HN7HS70D8UEW5ZQ84YG4T9IY8NDQ' where id=9; -update noar tt set b1='ZFVVPTZJI' where id=9; -update noar ti set b1='ZFVVPTZJI' where id=9; -update noar tt set v0='CU8YLJVTI98PLG7R7QCGSPAH3' where id=9; -update noar ti set v0='CU8YLJVTI98PLG7R7QCGSPAH3' where id=9; -update noar tt set b2='O9ZCW1UZH396XV0HQ8JWR6OF4V0S9QFV' where id=9; -update noar ti set b2='O9ZCW1UZH396XV0HQ8JWR6OF4V0S9QFV' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 blob null, -b1 longblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='36KMNYF5NQKSZRZ8B3NT6BQ5WWLV93Y' where id=1; -update noar ti set v0='36KMNYF5NQKSZRZ8B3NT6BQ5WWLV93Y' where id=1; -update noar tt set b0='VWGRXG0U33O5W4IQKEG0ZULMK' where id=1; -update noar ti set b0='VWGRXG0U33O5W4IQKEG0ZULMK' where id=1; -update noar tt set v0='27MIGXJ3DB00VUCM7PQ0ZFXI84OVCDUJ' where id=1; -update noar ti set v0='27MIGXJ3DB00VUCM7PQ0ZFXI84OVCDUJ' where id=1; -update noar tt set b1='9GK4QDNY7' where id=1; -update noar ti set b1='9GK4QDNY7' where id=1; -update noar tt set v0='220TDAQR0S228' where id=1; -update noar ti set v0='220TDAQR0S228' where id=1; -update noar tt set b2='Q7WA0N66ESPQVU1YUMEK8AMG1538J' where id=1; -update noar ti set b2='Q7WA0N66ESPQVU1YUMEK8AMG1538J' where id=1; -update noar tt set v0='T8PKEN7YQ2DBHUV' where id=2; -update noar ti set v0='T8PKEN7YQ2DBHUV' where id=2; -update noar tt set b0='WL01LKNKI8' where id=2; -update noar ti set b0='WL01LKNKI8' where id=2; -update noar tt set v0='W7RC63VP494IICS1' where id=2; -update noar ti set v0='W7RC63VP494IICS1' where id=2; -update noar tt set b1='8QZDJ6AIXM2G0BHSOTQ0' where id=2; -update noar ti set b1='8QZDJ6AIXM2G0BHSOTQ0' where id=2; -update noar tt set v0='Q9X' where id=2; -update noar ti set v0='Q9X' where id=2; -update noar tt set b2='XWOOLZJTO6PNJWE4S' where id=2; -update noar ti set b2='XWOOLZJTO6PNJWE4S' where id=2; -update noar tt set v0='TGJQV42' where id=3; -update noar ti set v0='TGJQV42' where id=3; -update noar tt set b0='VU0VTJE' where id=3; -update noar ti set b0='VU0VTJE' where id=3; -update noar tt set v0='FTX5462YZHTVU1QR93APBM' where id=3; -update noar ti set v0='FTX5462YZHTVU1QR93APBM' where id=3; -update noar tt set b1='OYJ37WNO7OTI' where id=3; -update noar ti set b1='OYJ37WNO7OTI' where id=3; -update noar tt set v0='L82CWAAF' where id=3; -update noar ti set v0='L82CWAAF' where id=3; -update noar tt set b2='RNEZY454' where id=3; -update noar ti set b2='RNEZY454' where id=3; -update noar tt set v0='RLIQ5GKZCTI07UW9Q' where id=4; -update noar ti set v0='RLIQ5GKZCTI07UW9Q' where id=4; -update noar tt set b0='D5FJAZPUPS8TJ7WY8P1ZY1SUSRHCBW' where id=4; -update noar ti set b0='D5FJAZPUPS8TJ7WY8P1ZY1SUSRHCBW' where id=4; -update noar tt set v0='GS' where id=4; -update noar ti set v0='GS' where id=4; -update noar tt set b1='33JH8B09ERBN1LBNN8H281M5AE' where id=4; -update noar ti set b1='33JH8B09ERBN1LBNN8H281M5AE' where id=4; -update noar tt set v0='GI564DW56VC' where id=4; -update noar ti set v0='GI564DW56VC' where id=4; -update noar tt set b2='TX01EYJTTJX' where id=4; -update noar ti set b2='TX01EYJTTJX' where id=4; -update noar tt set v0='0F8VHUHJ6CUIHQLR9PZT' where id=5; -update noar ti set v0='0F8VHUHJ6CUIHQLR9PZT' where id=5; -update noar tt set b0='Z69YU9VI8ZHM' where id=5; -update noar ti set b0='Z69YU9VI8ZHM' where id=5; -update noar tt set v0='Y35VBO01MV4C10508UFR3OTFTMFWP7' where id=5; -update noar ti set v0='Y35VBO01MV4C10508UFR3OTFTMFWP7' where id=5; -update noar tt set b1='2P6WTYSX3PMUDI187GJJR4' where id=5; -update noar ti set b1='2P6WTYSX3PMUDI187GJJR4' where id=5; -update noar tt set v0='FOMM99M2AK9LMR2SOM557ZK9PR9UAMFV' where id=5; -update noar ti set v0='FOMM99M2AK9LMR2SOM557ZK9PR9UAMFV' where id=5; -update noar tt set b2='D' where id=5; -update noar ti set b2='D' where id=5; -update noar tt set v0='U4GVVIMBZVBJ4HW6B993N8KOYGT3' where id=6; -update noar ti set v0='U4GVVIMBZVBJ4HW6B993N8KOYGT3' where id=6; -update noar tt set b0='LUOLZXIZ30H' where id=6; -update noar ti set b0='LUOLZXIZ30H' where id=6; -update noar tt set v0='TZDUN3455DA96FRNMHSJTKW121' where id=6; -update noar ti set v0='TZDUN3455DA96FRNMHSJTKW121' where id=6; -update noar tt set b1='FU3BZXDWC6GL2D2M0R6EC' where id=6; -update noar ti set b1='FU3BZXDWC6GL2D2M0R6EC' where id=6; -update noar tt set v0='O' where id=6; -update noar ti set v0='O' where id=6; -update noar tt set b2='5Q79G9LOE5A6CJZLIFK9M4M2' where id=6; -update noar ti set b2='5Q79G9LOE5A6CJZLIFK9M4M2' where id=6; -update noar tt set v0='33DS53D2Q8Q4ZTA993KH3DBPG6F' where id=7; -update noar ti set v0='33DS53D2Q8Q4ZTA993KH3DBPG6F' where id=7; -update noar tt set b0='510IELL5TIQ' where id=7; -update noar ti set b0='510IELL5TIQ' where id=7; -update noar tt set v0='LA' where id=7; -update noar ti set v0='LA' where id=7; -update noar tt set b1='NAKPR7XF101' where id=7; -update noar ti set b1='NAKPR7XF101' where id=7; -update noar tt set v0='2I66AU2BE0I4Q2AAH7QUU' where id=7; -update noar ti set v0='2I66AU2BE0I4Q2AAH7QUU' where id=7; -update noar tt set b2='X2UW2JDND' where id=7; -update noar ti set b2='X2UW2JDND' where id=7; -update noar tt set v0='2' where id=8; -update noar ti set v0='2' where id=8; -update noar tt set b0='ZS3ZF156GO6ZAYVJ00Y790DIRY2Q' where id=8; -update noar ti set b0='ZS3ZF156GO6ZAYVJ00Y790DIRY2Q' where id=8; -update noar tt set v0='AK7UEQIXG2MEVJL30USL2AQI15HX' where id=8; -update noar ti set v0='AK7UEQIXG2MEVJL30USL2AQI15HX' where id=8; -update noar tt set b1='Z59OU7MLQBBYG7M2KH7T08QAF' where id=8; -update noar ti set b1='Z59OU7MLQBBYG7M2KH7T08QAF' where id=8; -update noar tt set v0='AHSHR' where id=8; -update noar ti set v0='AHSHR' where id=8; -update noar tt set b2='TA37' where id=8; -update noar ti set b2='TA37' where id=8; -update noar tt set v0='V' where id=9; -update noar ti set v0='V' where id=9; -update noar tt set b0='E5IK99NWBORU2GYA086QGPO95431GYI' where id=9; -update noar ti set b0='E5IK99NWBORU2GYA086QGPO95431GYI' where id=9; -update noar tt set v0='M9VWOEWL017NV1MUF4XD4M28J8ZGKFWB' where id=9; -update noar ti set v0='M9VWOEWL017NV1MUF4XD4M28J8ZGKFWB' where id=9; -update noar tt set b1='OE9AZQG51FA7N' where id=9; -update noar ti set b1='OE9AZQG51FA7N' where id=9; -update noar tt set v0='QBCNTLTYHXJ91NB' where id=9; -update noar ti set v0='QBCNTLTYHXJ91NB' where id=9; -update noar tt set b2='7GNGQJHI1VGP8KAT6NOG3JTS' where id=9; -update noar ti set b2='7GNGQJHI1VGP8KAT6NOG3JTS' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 blob null, -b1 longblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='F9SRLA1L6XW8G7I' where id=1; -update noar ti set v0='F9SRLA1L6XW8G7I' where id=1; -update noar tt set b0='1R0FIE9LHUS1E0TJ2J5V' where id=1; -update noar ti set b0='1R0FIE9LHUS1E0TJ2J5V' where id=1; -update noar tt set v0='GFGRMUYF8LFZ4MTH' where id=1; -update noar ti set v0='GFGRMUYF8LFZ4MTH' where id=1; -update noar tt set b1='ZAX573ZJ8BWE9CEHMV2G' where id=1; -update noar ti set b1='ZAX573ZJ8BWE9CEHMV2G' where id=1; -update noar tt set v0='N75WAONFYAW9VNVFZ32F0C969V7J' where id=1; -update noar ti set v0='N75WAONFYAW9VNVFZ32F0C969V7J' where id=1; -update noar tt set b2='VJRFNWXXRVT244W' where id=1; -update noar ti set b2='VJRFNWXXRVT244W' where id=1; -update noar tt set v0='NHHV' where id=2; -update noar ti set v0='NHHV' where id=2; -update noar tt set b0='QRXI3XWRJC178QDPJUCHACA4I' where id=2; -update noar ti set b0='QRXI3XWRJC178QDPJUCHACA4I' where id=2; -update noar tt set v0='4W1RJI4O' where id=2; -update noar ti set v0='4W1RJI4O' where id=2; -update noar tt set b1='6UNKUOUYQ8LOK8493O3XRAP4G' where id=2; -update noar ti set b1='6UNKUOUYQ8LOK8493O3XRAP4G' where id=2; -update noar tt set v0='L8T4NICFI7R0FFJ3E0JTE4HQS7MKAVNQ' where id=2; -update noar ti set v0='L8T4NICFI7R0FFJ3E0JTE4HQS7MKAVNQ' where id=2; -update noar tt set b2='YS0BD73CG' where id=2; -update noar ti set b2='YS0BD73CG' where id=2; -update noar tt set v0='BFA8GU' where id=3; -update noar ti set v0='BFA8GU' where id=3; -update noar tt set b0='3TGDMLX3MVSBD7N' where id=3; -update noar ti set b0='3TGDMLX3MVSBD7N' where id=3; -update noar tt set v0='DDINNLNT6' where id=3; -update noar ti set v0='DDINNLNT6' where id=3; -update noar tt set b1='HFFJNY1SGGMLS1LQE1YE544F5V' where id=3; -update noar ti set b1='HFFJNY1SGGMLS1LQE1YE544F5V' where id=3; -update noar tt set v0='ANCK0PGOZK' where id=3; -update noar ti set v0='ANCK0PGOZK' where id=3; -update noar tt set b2='R2ASFCSZKFXYJBDG2FZRLR5B' where id=3; -update noar ti set b2='R2ASFCSZKFXYJBDG2FZRLR5B' where id=3; -update noar tt set v0='KM3T2BH7R' where id=4; -update noar ti set v0='KM3T2BH7R' where id=4; -update noar tt set b0='9QR92IX522BZ7AIPZZXO1B5AI' where id=4; -update noar ti set b0='9QR92IX522BZ7AIPZZXO1B5AI' where id=4; -update noar tt set v0='7MQYNJ9RQXNHDZ68ETY' where id=4; -update noar ti set v0='7MQYNJ9RQXNHDZ68ETY' where id=4; -update noar tt set b1='0BMRIM' where id=4; -update noar ti set b1='0BMRIM' where id=4; -update noar tt set v0='2TN0H' where id=4; -update noar ti set v0='2TN0H' where id=4; -update noar tt set b2='23HGJ7Y1Z3FX' where id=4; -update noar ti set b2='23HGJ7Y1Z3FX' where id=4; -update noar tt set v0='LH2XL3XT5I47KPX2TVIIQPXZDC3K39GB' where id=5; -update noar ti set v0='LH2XL3XT5I47KPX2TVIIQPXZDC3K39GB' where id=5; -update noar tt set b0='AH5LZY459R' where id=5; -update noar ti set b0='AH5LZY459R' where id=5; -update noar tt set v0='275SHUBF9TBQHCS5Y2VUZLLO4ZO8WB' where id=5; -update noar ti set v0='275SHUBF9TBQHCS5Y2VUZLLO4ZO8WB' where id=5; -update noar tt set b1='1BAZ4G' where id=5; -update noar ti set b1='1BAZ4G' where id=5; -update noar tt set v0='D1T565BLUVDR4SOB8FHYHC4WR7MJ' where id=5; -update noar ti set v0='D1T565BLUVDR4SOB8FHYHC4WR7MJ' where id=5; -update noar tt set b2='LUKV' where id=5; -update noar ti set b2='LUKV' where id=5; -update noar tt set v0='SUQQLE' where id=6; -update noar ti set v0='SUQQLE' where id=6; -update noar tt set b0='8VWUK367J11K' where id=6; -update noar ti set b0='8VWUK367J11K' where id=6; -update noar tt set v0='KKZYFQ8HEXUX5L48RYGP278Y5D0J' where id=6; -update noar ti set v0='KKZYFQ8HEXUX5L48RYGP278Y5D0J' where id=6; -update noar tt set b1='CKP1A21X9AIW' where id=6; -update noar ti set b1='CKP1A21X9AIW' where id=6; -update noar tt set v0='K96G2ALJ44L06PBS5VA0KH9CSM2SB' where id=6; -update noar ti set v0='K96G2ALJ44L06PBS5VA0KH9CSM2SB' where id=6; -update noar tt set b2='0FMYLMDSORQLHY7JT187WLC3WJG' where id=6; -update noar ti set b2='0FMYLMDSORQLHY7JT187WLC3WJG' where id=6; -update noar tt set v0='JST20FUIF8GXL2VD5I0W9AS74ZTJ4Z' where id=7; -update noar ti set v0='JST20FUIF8GXL2VD5I0W9AS74ZTJ4Z' where id=7; -update noar tt set b0='IX4BGOC6G4E6VPV' where id=7; -update noar ti set b0='IX4BGOC6G4E6VPV' where id=7; -update noar tt set v0='J8L0PFWFN97' where id=7; -update noar ti set v0='J8L0PFWFN97' where id=7; -update noar tt set b1='KJNKRUW' where id=7; -update noar ti set b1='KJNKRUW' where id=7; -update noar tt set v0='TMN8DX' where id=7; -update noar ti set v0='TMN8DX' where id=7; -update noar tt set b2='QEFNIA4ERU' where id=7; -update noar ti set b2='QEFNIA4ERU' where id=7; -update noar tt set v0='MY55UD7WQD71PFOJQRD9LM2ILO6D13' where id=8; -update noar ti set v0='MY55UD7WQD71PFOJQRD9LM2ILO6D13' where id=8; -update noar tt set b0='9O168LWC0QCZ9NAOK' where id=8; -update noar ti set b0='9O168LWC0QCZ9NAOK' where id=8; -update noar tt set v0='175I7P3ZZVOXUQDPJ' where id=8; -update noar ti set v0='175I7P3ZZVOXUQDPJ' where id=8; -update noar tt set b1='N1NU66JIEZN50OA033HHMGQBBMQZ' where id=8; -update noar ti set b1='N1NU66JIEZN50OA033HHMGQBBMQZ' where id=8; -update noar tt set v0='O53YWI64GQXZ28PMG' where id=8; -update noar ti set v0='O53YWI64GQXZ28PMG' where id=8; -update noar tt set b2='6M39DYZQFD0NBDO4BT1TIFPU6MA3FZN' where id=8; -update noar ti set b2='6M39DYZQFD0NBDO4BT1TIFPU6MA3FZN' where id=8; -update noar tt set v0='QGS20CI8JOGZ2LN' where id=9; -update noar ti set v0='QGS20CI8JOGZ2LN' where id=9; -update noar tt set b0='KIB8R1IQL40HELLBSAY4' where id=9; -update noar ti set b0='KIB8R1IQL40HELLBSAY4' where id=9; -update noar tt set v0='R1YQ39NFTA5HJ3Q39TOO' where id=9; -update noar ti set v0='R1YQ39NFTA5HJ3Q39TOO' where id=9; -update noar tt set b1='MH9UJ5OOLBNZX23HNO0E3SB' where id=9; -update noar ti set b1='MH9UJ5OOLBNZX23HNO0E3SB' where id=9; -update noar tt set v0='LHF' where id=9; -update noar ti set v0='LHF' where id=9; -update noar tt set b2='DQQGUYRR7FK' where id=9; -update noar ti set b2='DQQGUYRR7FK' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 blob not null, -b1 longblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='8GPLQ2H6LCXQQLUCX6H2434S' where id=1; -update noar ti set v0='8GPLQ2H6LCXQQLUCX6H2434S' where id=1; -update noar tt set b0='OWH8WXM0V0G671FPP70N' where id=1; -update noar ti set b0='OWH8WXM0V0G671FPP70N' where id=1; -update noar tt set v0='WKLTCEGNAPP' where id=1; -update noar ti set v0='WKLTCEGNAPP' where id=1; -update noar tt set b1='4LELLB9RSCP01SH92F8B' where id=1; -update noar ti set b1='4LELLB9RSCP01SH92F8B' where id=1; -update noar tt set v0='804B4UA7K8' where id=1; -update noar ti set v0='804B4UA7K8' where id=1; -update noar tt set b2='G422L880BT609WEAFFBUPVZ7GHTA1EA' where id=1; -update noar ti set b2='G422L880BT609WEAFFBUPVZ7GHTA1EA' where id=1; -update noar tt set v0='EF7BZ2K2GIYMQ8EJJDHMDYF' where id=2; -update noar ti set v0='EF7BZ2K2GIYMQ8EJJDHMDYF' where id=2; -update noar tt set b0='019XDLGIAZNU1' where id=2; -update noar ti set b0='019XDLGIAZNU1' where id=2; -update noar tt set v0='D78JVO6AGD0XB2ZGTBE6Q' where id=2; -update noar ti set v0='D78JVO6AGD0XB2ZGTBE6Q' where id=2; -update noar tt set b1='QFKJ29' where id=2; -update noar ti set b1='QFKJ29' where id=2; -update noar tt set v0='KODEDFT5AVALRJE642GBAY53PK0RR9' where id=2; -update noar ti set v0='KODEDFT5AVALRJE642GBAY53PK0RR9' where id=2; -update noar tt set b2='15AP6UCOLW810J1PTG' where id=2; -update noar ti set b2='15AP6UCOLW810J1PTG' where id=2; -update noar tt set v0='XAL' where id=3; -update noar ti set v0='XAL' where id=3; -update noar tt set b0='7J26PRN8C83FX9NTDGA2MTYO' where id=3; -update noar ti set b0='7J26PRN8C83FX9NTDGA2MTYO' where id=3; -update noar tt set v0='9NEEYNNPVW8OYO2MXZ' where id=3; -update noar ti set v0='9NEEYNNPVW8OYO2MXZ' where id=3; -update noar tt set b1='RZYPB09VJK8S0I5DPFTESBDQ9I' where id=3; -update noar ti set b1='RZYPB09VJK8S0I5DPFTESBDQ9I' where id=3; -update noar tt set v0='LA96L307Q927TU' where id=3; -update noar ti set v0='LA96L307Q927TU' where id=3; -update noar tt set b2='ULVU8VA4GEJXXTCGNHPFZC59IOK' where id=3; -update noar ti set b2='ULVU8VA4GEJXXTCGNHPFZC59IOK' where id=3; -update noar tt set v0='L3JDAZ0UVBF4R6VBG2NAY8' where id=4; -update noar ti set v0='L3JDAZ0UVBF4R6VBG2NAY8' where id=4; -update noar tt set b0='RPFSCVC8PI1HJ2780I40ZXYCPDA4D' where id=4; -update noar ti set b0='RPFSCVC8PI1HJ2780I40ZXYCPDA4D' where id=4; -update noar tt set v0='PH6L9IJMI1BORWBE6JUKD814KIL7YGL' where id=4; -update noar ti set v0='PH6L9IJMI1BORWBE6JUKD814KIL7YGL' where id=4; -update noar tt set b1='Y9AZEIZKYP0H0VB' where id=4; -update noar ti set b1='Y9AZEIZKYP0H0VB' where id=4; -update noar tt set v0='D2JE4G1XVQRM16MB0XZNTN6' where id=4; -update noar ti set v0='D2JE4G1XVQRM16MB0XZNTN6' where id=4; -update noar tt set b2='S9NH5SHX' where id=4; -update noar ti set b2='S9NH5SHX' where id=4; -update noar tt set v0='V9F2ZSL37WLS0X0SK6G' where id=5; -update noar ti set v0='V9F2ZSL37WLS0X0SK6G' where id=5; -update noar tt set b0='DX2' where id=5; -update noar ti set b0='DX2' where id=5; -update noar tt set v0='JWO3EVP5FP4KQ4YSQ3G1' where id=5; -update noar ti set v0='JWO3EVP5FP4KQ4YSQ3G1' where id=5; -update noar tt set b1='SBK3GDH7956ACJVK3E4M9J3PSQ7XF4' where id=5; -update noar ti set b1='SBK3GDH7956ACJVK3E4M9J3PSQ7XF4' where id=5; -update noar tt set v0='PCSJTMOGEAB' where id=5; -update noar ti set v0='PCSJTMOGEAB' where id=5; -update noar tt set b2='07C940PPX' where id=5; -update noar ti set b2='07C940PPX' where id=5; -update noar tt set v0='8THA7J0M3BWE5' where id=6; -update noar ti set v0='8THA7J0M3BWE5' where id=6; -update noar tt set b0='WKKLD98GM7JZ2YOQQC6JXWISIYJDIT' where id=6; -update noar ti set b0='WKKLD98GM7JZ2YOQQC6JXWISIYJDIT' where id=6; -update noar tt set v0='L50POLU0VDY3IFU' where id=6; -update noar ti set v0='L50POLU0VDY3IFU' where id=6; -update noar tt set b1='1X3ZIUSKN6EMJA5UU3JWF21F7VT761S' where id=6; -update noar ti set b1='1X3ZIUSKN6EMJA5UU3JWF21F7VT761S' where id=6; -update noar tt set v0='PMS7' where id=6; -update noar ti set v0='PMS7' where id=6; -update noar tt set b2='PJJND65FI1RSKM' where id=6; -update noar ti set b2='PJJND65FI1RSKM' where id=6; -update noar tt set v0='WMRC9AMUZKFOU5NZEGJ6L6' where id=7; -update noar ti set v0='WMRC9AMUZKFOU5NZEGJ6L6' where id=7; -update noar tt set b0='PJC8' where id=7; -update noar ti set b0='PJC8' where id=7; -update noar tt set v0='TIF00BS3S3RQ37N427XB2' where id=7; -update noar ti set v0='TIF00BS3S3RQ37N427XB2' where id=7; -update noar tt set b1='78XD267G1' where id=7; -update noar ti set b1='78XD267G1' where id=7; -update noar tt set v0='1ZN70DJC6' where id=7; -update noar ti set v0='1ZN70DJC6' where id=7; -update noar tt set b2='DP851L3AKBXNIVAF' where id=7; -update noar ti set b2='DP851L3AKBXNIVAF' where id=7; -update noar tt set v0='MESI2ZCXKXYYQXCDZN2L1C0KRD' where id=8; -update noar ti set v0='MESI2ZCXKXYYQXCDZN2L1C0KRD' where id=8; -update noar tt set b0='D6N' where id=8; -update noar ti set b0='D6N' where id=8; -update noar tt set v0='88WP5W36R47SP0QAYZDN11' where id=8; -update noar ti set v0='88WP5W36R47SP0QAYZDN11' where id=8; -update noar tt set b1='ZYGGU58Q3X0N261OA98ALJ4' where id=8; -update noar ti set b1='ZYGGU58Q3X0N261OA98ALJ4' where id=8; -update noar tt set v0='L082YDCPXZXWI' where id=8; -update noar ti set v0='L082YDCPXZXWI' where id=8; -update noar tt set b2='EENU1' where id=8; -update noar ti set b2='EENU1' where id=8; -update noar tt set v0='S5G3N7S9LN' where id=9; -update noar ti set v0='S5G3N7S9LN' where id=9; -update noar tt set b0='X988JCHG8CCJQP87E0QQOCB' where id=9; -update noar ti set b0='X988JCHG8CCJQP87E0QQOCB' where id=9; -update noar tt set v0='B' where id=9; -update noar ti set v0='B' where id=9; -update noar tt set b1='0111U1F9LIVZPDB5QBM6' where id=9; -update noar ti set b1='0111U1F9LIVZPDB5QBM6' where id=9; -update noar tt set v0='4' where id=9; -update noar ti set v0='4' where id=9; -update noar tt set b2='JIUCXC4UYQC0G2TY99LSPE2Y' where id=9; -update noar ti set b2='JIUCXC4UYQC0G2TY99LSPE2Y' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 blob not null, -b1 longblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='WZSWH6Y00NEN6LW041Y2X' where id=1; -update noar ti set v0='WZSWH6Y00NEN6LW041Y2X' where id=1; -update noar tt set b0='6Z34AM8J5KEB9L6ZG9BTY421' where id=1; -update noar ti set b0='6Z34AM8J5KEB9L6ZG9BTY421' where id=1; -update noar tt set v0='CJYE3HDWFIT105T5G755UH4BJF5F' where id=1; -update noar ti set v0='CJYE3HDWFIT105T5G755UH4BJF5F' where id=1; -update noar tt set b1='OAJMFRLU76X9' where id=1; -update noar ti set b1='OAJMFRLU76X9' where id=1; -update noar tt set v0='1MNBR3R5PO' where id=1; -update noar ti set v0='1MNBR3R5PO' where id=1; -update noar tt set b2='UAJ0SK7Q2' where id=1; -update noar ti set b2='UAJ0SK7Q2' where id=1; -update noar tt set v0='BHYUFIWO' where id=2; -update noar ti set v0='BHYUFIWO' where id=2; -update noar tt set b0='WDARKHG2KHYJ8SNPGW4CP5MQ6U' where id=2; -update noar ti set b0='WDARKHG2KHYJ8SNPGW4CP5MQ6U' where id=2; -update noar tt set v0='OPGVKNTX6C09DTKID835RMKNMOC' where id=2; -update noar ti set v0='OPGVKNTX6C09DTKID835RMKNMOC' where id=2; -update noar tt set b1='O9QYKCBWEX9I7M9YFMT79L0ZK9DBQ9K' where id=2; -update noar ti set b1='O9QYKCBWEX9I7M9YFMT79L0ZK9DBQ9K' where id=2; -update noar tt set v0='KOMB6YDSB9NN25J0AACL0ZXPAMWUS' where id=2; -update noar ti set v0='KOMB6YDSB9NN25J0AACL0ZXPAMWUS' where id=2; -update noar tt set b2='K8O8Z21YGQ36EGFN3N9ZLMD37CNR' where id=2; -update noar ti set b2='K8O8Z21YGQ36EGFN3N9ZLMD37CNR' where id=2; -update noar tt set v0='4V' where id=3; -update noar ti set v0='4V' where id=3; -update noar tt set b0='QGTAV0H4GYZ5MYRK' where id=3; -update noar ti set b0='QGTAV0H4GYZ5MYRK' where id=3; -update noar tt set v0='NTIH0EZO4UEGW7X' where id=3; -update noar ti set v0='NTIH0EZO4UEGW7X' where id=3; -update noar tt set b1='6' where id=3; -update noar ti set b1='6' where id=3; -update noar tt set v0='56FU430NGWJRUJ98FOV3RJO' where id=3; -update noar ti set v0='56FU430NGWJRUJ98FOV3RJO' where id=3; -update noar tt set b2='CXQ2G9K' where id=3; -update noar ti set b2='CXQ2G9K' where id=3; -update noar tt set v0='VOUUQ' where id=4; -update noar ti set v0='VOUUQ' where id=4; -update noar tt set b0='WXY8ZT0BCLM6R6W' where id=4; -update noar ti set b0='WXY8ZT0BCLM6R6W' where id=4; -update noar tt set v0='U0OCHRKJ1HJHD' where id=4; -update noar ti set v0='U0OCHRKJ1HJHD' where id=4; -update noar tt set b1='B6PXT' where id=4; -update noar ti set b1='B6PXT' where id=4; -update noar tt set v0='52F3' where id=4; -update noar ti set v0='52F3' where id=4; -update noar tt set b2='YLR1YSS8E' where id=4; -update noar ti set b2='YLR1YSS8E' where id=4; -update noar tt set v0='7OOCKIMW0WV7GOZ115YQ' where id=5; -update noar ti set v0='7OOCKIMW0WV7GOZ115YQ' where id=5; -update noar tt set b0='7OU06252VWH6UEVZICURW' where id=5; -update noar ti set b0='7OU06252VWH6UEVZICURW' where id=5; -update noar tt set v0='T1EGP3NK0IDPR272KG5CO3GNRMTNLXHL' where id=5; -update noar ti set v0='T1EGP3NK0IDPR272KG5CO3GNRMTNLXHL' where id=5; -update noar tt set b1='H8W88NALHVHLLHPRIB3RY4VVME' where id=5; -update noar ti set b1='H8W88NALHVHLLHPRIB3RY4VVME' where id=5; -update noar tt set v0='F5GCOHL7KHQ4S' where id=5; -update noar ti set v0='F5GCOHL7KHQ4S' where id=5; -update noar tt set b2='RW7B6C6P' where id=5; -update noar ti set b2='RW7B6C6P' where id=5; -update noar tt set v0='2WQJM2GDHN9Q3UWBPEAIP78WB39O' where id=6; -update noar ti set v0='2WQJM2GDHN9Q3UWBPEAIP78WB39O' where id=6; -update noar tt set b0='87OJCS' where id=6; -update noar ti set b0='87OJCS' where id=6; -update noar tt set v0='472AN273NG5Q' where id=6; -update noar ti set v0='472AN273NG5Q' where id=6; -update noar tt set b1='HNT294IXJ8N4EJYHQKO9YYE255' where id=6; -update noar ti set b1='HNT294IXJ8N4EJYHQKO9YYE255' where id=6; -update noar tt set v0='H0QD5UIMN6UCPXOOXDTG8W4W3P9HBCM' where id=6; -update noar ti set v0='H0QD5UIMN6UCPXOOXDTG8W4W3P9HBCM' where id=6; -update noar tt set b2='F0R9PBV0LPL7N9' where id=6; -update noar ti set b2='F0R9PBV0LPL7N9' where id=6; -update noar tt set v0='XIVVI6VRIFLQ6IMMI2Z63T9XK23' where id=7; -update noar ti set v0='XIVVI6VRIFLQ6IMMI2Z63T9XK23' where id=7; -update noar tt set b0='WRFHS6Q8UI876' where id=7; -update noar ti set b0='WRFHS6Q8UI876' where id=7; -update noar tt set v0='888748F25DODKPN6GWTK2CV' where id=7; -update noar ti set v0='888748F25DODKPN6GWTK2CV' where id=7; -update noar tt set b1='VKGMSYXPVF6ZDHNB60W9N3H' where id=7; -update noar ti set b1='VKGMSYXPVF6ZDHNB60W9N3H' where id=7; -update noar tt set v0='GX74AFF1DT6RN05U6B09Z25EEBQLHVNE' where id=7; -update noar ti set v0='GX74AFF1DT6RN05U6B09Z25EEBQLHVNE' where id=7; -update noar tt set b2='KX3CHWY' where id=7; -update noar ti set b2='KX3CHWY' where id=7; -update noar tt set v0='W26GMIS4TJ8SZ0NTB0' where id=8; -update noar ti set v0='W26GMIS4TJ8SZ0NTB0' where id=8; -update noar tt set b0='PE4M1VGOJHB827SC4OVO6PHOIIS6P' where id=8; -update noar ti set b0='PE4M1VGOJHB827SC4OVO6PHOIIS6P' where id=8; -update noar tt set v0='J2M1J648DI7SEYI' where id=8; -update noar ti set v0='J2M1J648DI7SEYI' where id=8; -update noar tt set b1='OL0DGZV9FUUUMRMFR0IC3T' where id=8; -update noar ti set b1='OL0DGZV9FUUUMRMFR0IC3T' where id=8; -update noar tt set v0='ART112HVZFQJ4WHZQ8O4E58CRJ2HT3CR' where id=8; -update noar ti set v0='ART112HVZFQJ4WHZQ8O4E58CRJ2HT3CR' where id=8; -update noar tt set b2='PMGAH6PHG49M7E17D5VG' where id=8; -update noar ti set b2='PMGAH6PHG49M7E17D5VG' where id=8; -update noar tt set v0='KZCETM9WZ0BRXYLZE0DVJ' where id=9; -update noar ti set v0='KZCETM9WZ0BRXYLZE0DVJ' where id=9; -update noar tt set b0='FLCCW8KG3E52QZ9QEMY1RS9' where id=9; -update noar ti set b0='FLCCW8KG3E52QZ9QEMY1RS9' where id=9; -update noar tt set v0='4SGDM' where id=9; -update noar ti set v0='4SGDM' where id=9; -update noar tt set b1='FZ0EYPWU4MCQXIBM6EXH5' where id=9; -update noar ti set b1='FZ0EYPWU4MCQXIBM6EXH5' where id=9; -update noar tt set v0='JJC0E3MZZM550RW7' where id=9; -update noar ti set v0='JJC0E3MZZM550RW7' where id=9; -update noar tt set b2='YJIWRO3B4K1' where id=9; -update noar ti set b2='YJIWRO3B4K1' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 mediumblob null, -b1 tinyblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='87OKZU5TLETJ9T' where id=1; -update noar ti set v0='87OKZU5TLETJ9T' where id=1; -update noar tt set b0='JQ3N4CVUKEV191GYDB36' where id=1; -update noar ti set b0='JQ3N4CVUKEV191GYDB36' where id=1; -update noar tt set v0='6H2VA1BO0JDX6D191H' where id=1; -update noar ti set v0='6H2VA1BO0JDX6D191H' where id=1; -update noar tt set b1='Q2O7HQXK5T29DUJUMAXI2DK9Y' where id=1; -update noar ti set b1='Q2O7HQXK5T29DUJUMAXI2DK9Y' where id=1; -update noar tt set v0='P2H5DRX87YA0Z6RE7J45LNOAG4' where id=1; -update noar ti set v0='P2H5DRX87YA0Z6RE7J45LNOAG4' where id=1; -update noar tt set b2='ENZPNC6850Q' where id=1; -update noar ti set b2='ENZPNC6850Q' where id=1; -update noar tt set v0='BSURJH' where id=2; -update noar ti set v0='BSURJH' where id=2; -update noar tt set b0='1GPTGGJZ9DVDZ' where id=2; -update noar ti set b0='1GPTGGJZ9DVDZ' where id=2; -update noar tt set v0='X7590G2SM4C5I9ED6ZU21K' where id=2; -update noar ti set v0='X7590G2SM4C5I9ED6ZU21K' where id=2; -update noar tt set b1='VJ50XM9WA2UJ' where id=2; -update noar ti set b1='VJ50XM9WA2UJ' where id=2; -update noar tt set v0='1LC' where id=2; -update noar ti set v0='1LC' where id=2; -update noar tt set b2='7CWQ1OOI3JNDILNDZ0DS' where id=2; -update noar ti set b2='7CWQ1OOI3JNDILNDZ0DS' where id=2; -update noar tt set v0='JWHWY6A036' where id=3; -update noar ti set v0='JWHWY6A036' where id=3; -update noar tt set b0='V0KAVOMO1LF74M1GMHHWF49B8X698I' where id=3; -update noar ti set b0='V0KAVOMO1LF74M1GMHHWF49B8X698I' where id=3; -update noar tt set v0='L17TX1AB6SHJ7M8HFZSJAFLFT4BE94Q' where id=3; -update noar ti set v0='L17TX1AB6SHJ7M8HFZSJAFLFT4BE94Q' where id=3; -update noar tt set b1='BJIT5VAWNMBSXKLZR4L' where id=3; -update noar ti set b1='BJIT5VAWNMBSXKLZR4L' where id=3; -update noar tt set v0='CI2T0ELF18IQMKK3SSG3998CF08VHY' where id=3; -update noar ti set v0='CI2T0ELF18IQMKK3SSG3998CF08VHY' where id=3; -update noar tt set b2='CNGJ9SOUI919F1F9RVPMORH7KFQI' where id=3; -update noar ti set b2='CNGJ9SOUI919F1F9RVPMORH7KFQI' where id=3; -update noar tt set v0='ZCQVS5L34ZTA1O7' where id=4; -update noar ti set v0='ZCQVS5L34ZTA1O7' where id=4; -update noar tt set b0='DUJ5T13XWFYQPH' where id=4; -update noar ti set b0='DUJ5T13XWFYQPH' where id=4; -update noar tt set v0='P0TI13' where id=4; -update noar ti set v0='P0TI13' where id=4; -update noar tt set b1='EW8VT5JNIA28TOFGL7WF0M' where id=4; -update noar ti set b1='EW8VT5JNIA28TOFGL7WF0M' where id=4; -update noar tt set v0='GRDLZOYORX' where id=4; -update noar ti set v0='GRDLZOYORX' where id=4; -update noar tt set b2='H777G5JWFCWAD7CT' where id=4; -update noar ti set b2='H777G5JWFCWAD7CT' where id=4; -update noar tt set v0='AOZLW58C3TA5WIJC' where id=5; -update noar ti set v0='AOZLW58C3TA5WIJC' where id=5; -update noar tt set b0='H9K1BEKCFP81GKZU7IFLT01HUDMEM' where id=5; -update noar ti set b0='H9K1BEKCFP81GKZU7IFLT01HUDMEM' where id=5; -update noar tt set v0='LEJ2LA26IS7CIER8' where id=5; -update noar ti set v0='LEJ2LA26IS7CIER8' where id=5; -update noar tt set b1='KR2P94MCZWOOHA7PDJC5AVTEC7' where id=5; -update noar ti set b1='KR2P94MCZWOOHA7PDJC5AVTEC7' where id=5; -update noar tt set v0='HAY0ECTW0P4X4W8NEM6WQRBVEERES41' where id=5; -update noar ti set v0='HAY0ECTW0P4X4W8NEM6WQRBVEERES41' where id=5; -update noar tt set b2='AGKM4732V' where id=5; -update noar ti set b2='AGKM4732V' where id=5; -update noar tt set v0='U0O' where id=6; -update noar ti set v0='U0O' where id=6; -update noar tt set b0='WAL3O8CHEENU20HYW9D9J4H8J8' where id=6; -update noar ti set b0='WAL3O8CHEENU20HYW9D9J4H8J8' where id=6; -update noar tt set v0='OQQKKH6C5GYZSMLX55WCSE4819' where id=6; -update noar ti set v0='OQQKKH6C5GYZSMLX55WCSE4819' where id=6; -update noar tt set b1='SUOM5TXOSVKS' where id=6; -update noar ti set b1='SUOM5TXOSVKS' where id=6; -update noar tt set v0='BA1P531' where id=6; -update noar ti set v0='BA1P531' where id=6; -update noar tt set b2='I5KHIU' where id=6; -update noar ti set b2='I5KHIU' where id=6; -update noar tt set v0='H3H77I10D7KRFLLSO' where id=7; -update noar ti set v0='H3H77I10D7KRFLLSO' where id=7; -update noar tt set b0='VXZP4KOH103TP4Z51FMW3M5FMWR7' where id=7; -update noar ti set b0='VXZP4KOH103TP4Z51FMW3M5FMWR7' where id=7; -update noar tt set v0='D4RS0KLDZ' where id=7; -update noar ti set v0='D4RS0KLDZ' where id=7; -update noar tt set b1='7651JKONMR6YVQCI2DQ0OFW' where id=7; -update noar ti set b1='7651JKONMR6YVQCI2DQ0OFW' where id=7; -update noar tt set v0='6F43F5' where id=7; -update noar ti set v0='6F43F5' where id=7; -update noar tt set b2='5' where id=7; -update noar ti set b2='5' where id=7; -update noar tt set v0='DI1D4FLY1Z8' where id=8; -update noar ti set v0='DI1D4FLY1Z8' where id=8; -update noar tt set b0='FB1YJ7E9W798NQL4TW8F74KMMH7R' where id=8; -update noar ti set b0='FB1YJ7E9W798NQL4TW8F74KMMH7R' where id=8; -update noar tt set v0='QC28GGVYIPJM4ZYJHC0W7EJKH' where id=8; -update noar ti set v0='QC28GGVYIPJM4ZYJHC0W7EJKH' where id=8; -update noar tt set b1='N3E0PL' where id=8; -update noar ti set b1='N3E0PL' where id=8; -update noar tt set v0='MOQX7FSSX3QI8' where id=8; -update noar ti set v0='MOQX7FSSX3QI8' where id=8; -update noar tt set b2='5CDFC24QUIYV2FMNGIZJD2J3H' where id=8; -update noar ti set b2='5CDFC24QUIYV2FMNGIZJD2J3H' where id=8; -update noar tt set v0='WPSCP04B3GBJB' where id=9; -update noar ti set v0='WPSCP04B3GBJB' where id=9; -update noar tt set b0='Q1J' where id=9; -update noar ti set b0='Q1J' where id=9; -update noar tt set v0='3JFAM9DDGY90ICTOPP645I1AI1N' where id=9; -update noar ti set v0='3JFAM9DDGY90ICTOPP645I1AI1N' where id=9; -update noar tt set b1='OJTTYWDTQE079C790LB6ZF3NAIOLHF6O' where id=9; -update noar ti set b1='OJTTYWDTQE079C790LB6ZF3NAIOLHF6O' where id=9; -update noar tt set v0='HG0R66VTQS0QK8P49YQ' where id=9; -update noar ti set v0='HG0R66VTQS0QK8P49YQ' where id=9; -update noar tt set b2='39PANN16' where id=9; -update noar ti set b2='39PANN16' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 mediumblob null, -b1 tinyblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='1SC4OSLOMRIC' where id=1; -update noar ti set v0='1SC4OSLOMRIC' where id=1; -update noar tt set b0='W4IZAY3GJFUTN0PKPKA' where id=1; -update noar ti set b0='W4IZAY3GJFUTN0PKPKA' where id=1; -update noar tt set v0='3J82CFDHJNPM6' where id=1; -update noar ti set v0='3J82CFDHJNPM6' where id=1; -update noar tt set b1='05JNHG0MK6QV' where id=1; -update noar ti set b1='05JNHG0MK6QV' where id=1; -update noar tt set v0='Z1RIZD' where id=1; -update noar ti set v0='Z1RIZD' where id=1; -update noar tt set b2='AMFDBY6BREDVYGVO' where id=1; -update noar ti set b2='AMFDBY6BREDVYGVO' where id=1; -update noar tt set v0='WH' where id=2; -update noar ti set v0='WH' where id=2; -update noar tt set b0='RGCYH72AXAI5VYD6F9LDDU' where id=2; -update noar ti set b0='RGCYH72AXAI5VYD6F9LDDU' where id=2; -update noar tt set v0='HW7NN44BG' where id=2; -update noar ti set v0='HW7NN44BG' where id=2; -update noar tt set b1='ML' where id=2; -update noar ti set b1='ML' where id=2; -update noar tt set v0='KRBSJ8ULZ2FE68Q2GD06K' where id=2; -update noar ti set v0='KRBSJ8ULZ2FE68Q2GD06K' where id=2; -update noar tt set b2='T47' where id=2; -update noar ti set b2='T47' where id=2; -update noar tt set v0='O8PDWBEIIMC3RJK8JX6KSM536' where id=3; -update noar ti set v0='O8PDWBEIIMC3RJK8JX6KSM536' where id=3; -update noar tt set b0='6M0H1FUWM05MX01IF' where id=3; -update noar ti set b0='6M0H1FUWM05MX01IF' where id=3; -update noar tt set v0='86KYXXKKNNEPZB' where id=3; -update noar ti set v0='86KYXXKKNNEPZB' where id=3; -update noar tt set b1='OP5MZRMIEH' where id=3; -update noar ti set b1='OP5MZRMIEH' where id=3; -update noar tt set v0='ZH129JAQNONQF8D9AYTZZNZ6V9BLR' where id=3; -update noar ti set v0='ZH129JAQNONQF8D9AYTZZNZ6V9BLR' where id=3; -update noar tt set b2='X7NC09C2W38OZ' where id=3; -update noar ti set b2='X7NC09C2W38OZ' where id=3; -update noar tt set v0='0LIVJXNT9RXHPU909ETBT75G' where id=4; -update noar ti set v0='0LIVJXNT9RXHPU909ETBT75G' where id=4; -update noar tt set b0='PO89BPI4R0LFEQCGYJ1M8JSYN3N' where id=4; -update noar ti set b0='PO89BPI4R0LFEQCGYJ1M8JSYN3N' where id=4; -update noar tt set v0='L9LLZVTAYZTFKCI452TY' where id=4; -update noar ti set v0='L9LLZVTAYZTFKCI452TY' where id=4; -update noar tt set b1='35' where id=4; -update noar ti set b1='35' where id=4; -update noar tt set v0='Y4PUSRZXTGVSOXPCS7OHOP0R0JL51Z' where id=4; -update noar ti set v0='Y4PUSRZXTGVSOXPCS7OHOP0R0JL51Z' where id=4; -update noar tt set b2='94JHPDLD3STCMOROLB' where id=4; -update noar ti set b2='94JHPDLD3STCMOROLB' where id=4; -update noar tt set v0='CKT1' where id=5; -update noar ti set v0='CKT1' where id=5; -update noar tt set b0='11D9FTIXH7V' where id=5; -update noar ti set b0='11D9FTIXH7V' where id=5; -update noar tt set v0='VO8UZ54U0TSUUD763IMWC9UGT' where id=5; -update noar ti set v0='VO8UZ54U0TSUUD763IMWC9UGT' where id=5; -update noar tt set b1='7P86AOIY7MZJ9JX7' where id=5; -update noar ti set b1='7P86AOIY7MZJ9JX7' where id=5; -update noar tt set v0='0476SFW7S92U3QH8DX9' where id=5; -update noar ti set v0='0476SFW7S92U3QH8DX9' where id=5; -update noar tt set b2='D3BFGXLKSZ55TZ53' where id=5; -update noar ti set b2='D3BFGXLKSZ55TZ53' where id=5; -update noar tt set v0='C7BMNNG2BWPUKRTKHWKY8189D' where id=6; -update noar ti set v0='C7BMNNG2BWPUKRTKHWKY8189D' where id=6; -update noar tt set b0='FR2ZMC5' where id=6; -update noar ti set b0='FR2ZMC5' where id=6; -update noar tt set v0='0EGU' where id=6; -update noar ti set v0='0EGU' where id=6; -update noar tt set b1='5NRSN8T801KDK1CCBPWK32FUZCI' where id=6; -update noar ti set b1='5NRSN8T801KDK1CCBPWK32FUZCI' where id=6; -update noar tt set v0='HAZ8RJS9G1NYB96MYS2ND8' where id=6; -update noar ti set v0='HAZ8RJS9G1NYB96MYS2ND8' where id=6; -update noar tt set b2='67IRM5RI2EL34IK9IYNEDL7CJAYR88J' where id=6; -update noar ti set b2='67IRM5RI2EL34IK9IYNEDL7CJAYR88J' where id=6; -update noar tt set v0='ZQL10LCTJP1BJCQO53YX5RQF0' where id=7; -update noar ti set v0='ZQL10LCTJP1BJCQO53YX5RQF0' where id=7; -update noar tt set b0='RG5SM' where id=7; -update noar ti set b0='RG5SM' where id=7; -update noar tt set v0='IMOZA0B1Y' where id=7; -update noar ti set v0='IMOZA0B1Y' where id=7; -update noar tt set b1='1WNU0S5ETE9ABI3NWWPI1IP7V4AZYP9' where id=7; -update noar ti set b1='1WNU0S5ETE9ABI3NWWPI1IP7V4AZYP9' where id=7; -update noar tt set v0='DCPGQQEIYPHZ37X0F' where id=7; -update noar ti set v0='DCPGQQEIYPHZ37X0F' where id=7; -update noar tt set b2='6TQDJJZ' where id=7; -update noar ti set b2='6TQDJJZ' where id=7; -update noar tt set v0='IKHIFJ7SJ42' where id=8; -update noar ti set v0='IKHIFJ7SJ42' where id=8; -update noar tt set b0='LS9196MG8SXLJDVFXFBI' where id=8; -update noar ti set b0='LS9196MG8SXLJDVFXFBI' where id=8; -update noar tt set v0='6NDVGYGMQKKKSINXS' where id=8; -update noar ti set v0='6NDVGYGMQKKKSINXS' where id=8; -update noar tt set b1='LWGCQZTBWFCTTI2XMA' where id=8; -update noar ti set b1='LWGCQZTBWFCTTI2XMA' where id=8; -update noar tt set v0='GMMJATMW3LMD56CFV7YA4KJXL' where id=8; -update noar ti set v0='GMMJATMW3LMD56CFV7YA4KJXL' where id=8; -update noar tt set b2='PI40S3HHIIPC0UE5DENQ8H' where id=8; -update noar ti set b2='PI40S3HHIIPC0UE5DENQ8H' where id=8; -update noar tt set v0='B8G5H0RSC4NZGG1DP' where id=9; -update noar ti set v0='B8G5H0RSC4NZGG1DP' where id=9; -update noar tt set b0='KE2C6OU262H5J2EPY9VWW2K2V3D4' where id=9; -update noar ti set b0='KE2C6OU262H5J2EPY9VWW2K2V3D4' where id=9; -update noar tt set v0='3H4X' where id=9; -update noar ti set v0='3H4X' where id=9; -update noar tt set b1='RXTM' where id=9; -update noar ti set b1='RXTM' where id=9; -update noar tt set v0='TGMHBYX' where id=9; -update noar ti set v0='TGMHBYX' where id=9; -update noar tt set b2='WHHM9MCZ5CYDTOY' where id=9; -update noar ti set b2='WHHM9MCZ5CYDTOY' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 mediumblob not null, -b1 tinyblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='HUO79V9G6XHM5008O8JBDWJ6' where id=1; -update noar ti set v0='HUO79V9G6XHM5008O8JBDWJ6' where id=1; -update noar tt set b0='1N844DQVF5GB' where id=1; -update noar ti set b0='1N844DQVF5GB' where id=1; -update noar tt set v0='J877HK48ASEOQHGXKHQPJDDHM08YJ' where id=1; -update noar ti set v0='J877HK48ASEOQHGXKHQPJDDHM08YJ' where id=1; -update noar tt set b1='VPI5TB059X1IEFOQISDA09KEX7Q' where id=1; -update noar ti set b1='VPI5TB059X1IEFOQISDA09KEX7Q' where id=1; -update noar tt set v0='PWUG8S' where id=1; -update noar ti set v0='PWUG8S' where id=1; -update noar tt set b2='ER0E0OV515GXRPIRJN42' where id=1; -update noar ti set b2='ER0E0OV515GXRPIRJN42' where id=1; -update noar tt set v0='UR5KI248ZZTD84X' where id=2; -update noar ti set v0='UR5KI248ZZTD84X' where id=2; -update noar tt set b0='H1MYN52M96HWSCPAE3XWQCBVXX1PK70E' where id=2; -update noar ti set b0='H1MYN52M96HWSCPAE3XWQCBVXX1PK70E' where id=2; -update noar tt set v0='CSNXT5R5BI' where id=2; -update noar ti set v0='CSNXT5R5BI' where id=2; -update noar tt set b1='LJ1U4GXCRTOKI1DZ73MUKEF0DVAR' where id=2; -update noar ti set b1='LJ1U4GXCRTOKI1DZ73MUKEF0DVAR' where id=2; -update noar tt set v0='QBQ2FJKMPKTDTYDQ9BFUZBVOFGYTG4' where id=2; -update noar ti set v0='QBQ2FJKMPKTDTYDQ9BFUZBVOFGYTG4' where id=2; -update noar tt set b2='VE' where id=2; -update noar ti set b2='VE' where id=2; -update noar tt set v0='S1TUW7B4RAR3QRUOLRTR3XX273' where id=3; -update noar ti set v0='S1TUW7B4RAR3QRUOLRTR3XX273' where id=3; -update noar tt set b0='G9AHPIVCCKHMYY7IW' where id=3; -update noar ti set b0='G9AHPIVCCKHMYY7IW' where id=3; -update noar tt set v0='OHH092Y76OOVJ4R' where id=3; -update noar ti set v0='OHH092Y76OOVJ4R' where id=3; -update noar tt set b1='0' where id=3; -update noar ti set b1='0' where id=3; -update noar tt set v0='X87UNEMY6HHSLEQ8L' where id=3; -update noar ti set v0='X87UNEMY6HHSLEQ8L' where id=3; -update noar tt set b2='M9FYLGXQG1TC2IR8ID333J75RWV8' where id=3; -update noar ti set b2='M9FYLGXQG1TC2IR8ID333J75RWV8' where id=3; -update noar tt set v0='8XV4GNN8748FOINVN9' where id=4; -update noar ti set v0='8XV4GNN8748FOINVN9' where id=4; -update noar tt set b0='6WGZV0' where id=4; -update noar ti set b0='6WGZV0' where id=4; -update noar tt set v0='UFVBMBYZ6Y8ARWVED1PZ4L4A92GE4Q' where id=4; -update noar ti set v0='UFVBMBYZ6Y8ARWVED1PZ4L4A92GE4Q' where id=4; -update noar tt set b1='LT33PK4' where id=4; -update noar ti set b1='LT33PK4' where id=4; -update noar tt set v0='JVG17O' where id=4; -update noar ti set v0='JVG17O' where id=4; -update noar tt set b2='SHA4ZUW1PU5C82K57W85Z5FL15UPVG' where id=4; -update noar ti set b2='SHA4ZUW1PU5C82K57W85Z5FL15UPVG' where id=4; -update noar tt set v0='W21X0J71JT' where id=5; -update noar ti set v0='W21X0J71JT' where id=5; -update noar tt set b0='EHQ2K8SM' where id=5; -update noar ti set b0='EHQ2K8SM' where id=5; -update noar tt set v0='J5KTHW9IMWW8UWGIKT68I2049XW0P41T' where id=5; -update noar ti set v0='J5KTHW9IMWW8UWGIKT68I2049XW0P41T' where id=5; -update noar tt set b1='WPJPELW3D8VL3YY0UFE' where id=5; -update noar ti set b1='WPJPELW3D8VL3YY0UFE' where id=5; -update noar tt set v0='B6VQ14U40CG9ZRI94TM94' where id=5; -update noar ti set v0='B6VQ14U40CG9ZRI94TM94' where id=5; -update noar tt set b2='ZAGVLBV4N89JTI' where id=5; -update noar ti set b2='ZAGVLBV4N89JTI' where id=5; -update noar tt set v0='XY' where id=6; -update noar ti set v0='XY' where id=6; -update noar tt set b0='U' where id=6; -update noar ti set b0='U' where id=6; -update noar tt set v0='CMN03HKL3KEYK7WOH0RLVEBZX0CMTPPL' where id=6; -update noar ti set v0='CMN03HKL3KEYK7WOH0RLVEBZX0CMTPPL' where id=6; -update noar tt set b1='5I4HRRDQ6CO68KS8XDL47GO1YG' where id=6; -update noar ti set b1='5I4HRRDQ6CO68KS8XDL47GO1YG' where id=6; -update noar tt set v0='IVXNJYTDPC8K9KFGN2BYBS76R7OZ58PA' where id=6; -update noar ti set v0='IVXNJYTDPC8K9KFGN2BYBS76R7OZ58PA' where id=6; -update noar tt set b2='VSQHTRZ9QV6SM02BZ1HE' where id=6; -update noar ti set b2='VSQHTRZ9QV6SM02BZ1HE' where id=6; -update noar tt set v0='6URRVG' where id=7; -update noar ti set v0='6URRVG' where id=7; -update noar tt set b0='IBOX55CAOW3' where id=7; -update noar ti set b0='IBOX55CAOW3' where id=7; -update noar tt set v0='P02GH' where id=7; -update noar ti set v0='P02GH' where id=7; -update noar tt set b1='2ANUWZINQHN7FRGGLGNA' where id=7; -update noar ti set b1='2ANUWZINQHN7FRGGLGNA' where id=7; -update noar tt set v0='3MUKWM36X2UWDWN' where id=7; -update noar ti set v0='3MUKWM36X2UWDWN' where id=7; -update noar tt set b2='E7VF5JWD009BD4MTC6YUQBMMQHKH3YDQ' where id=7; -update noar ti set b2='E7VF5JWD009BD4MTC6YUQBMMQHKH3YDQ' where id=7; -update noar tt set v0='K9Z7XG10UT02FG4WSF8LJ06Z4OR1H8XV' where id=8; -update noar ti set v0='K9Z7XG10UT02FG4WSF8LJ06Z4OR1H8XV' where id=8; -update noar tt set b0='QME6SVVQ56J80OH2AY45T6F01KSV6X' where id=8; -update noar ti set b0='QME6SVVQ56J80OH2AY45T6F01KSV6X' where id=8; -update noar tt set v0='9IH2RI42ORV0ZNTMA6AJAEQZ98JHVPU' where id=8; -update noar ti set v0='9IH2RI42ORV0ZNTMA6AJAEQZ98JHVPU' where id=8; -update noar tt set b1='7GDL2UJLKHKJISW5' where id=8; -update noar ti set b1='7GDL2UJLKHKJISW5' where id=8; -update noar tt set v0='HAZA9MY1Y9HW1EIE' where id=8; -update noar ti set v0='HAZA9MY1Y9HW1EIE' where id=8; -update noar tt set b2='29TAXOAZVHD3OMKETO' where id=8; -update noar ti set b2='29TAXOAZVHD3OMKETO' where id=8; -update noar tt set v0='PAN' where id=9; -update noar ti set v0='PAN' where id=9; -update noar tt set b0='KJAPU6C4H3YW03PSPV91K' where id=9; -update noar ti set b0='KJAPU6C4H3YW03PSPV91K' where id=9; -update noar tt set v0='47K63WLB7UJUKJ93FA' where id=9; -update noar ti set v0='47K63WLB7UJUKJ93FA' where id=9; -update noar tt set b1='AF2X8BOMV4VERYWXA7JOIFZI3' where id=9; -update noar ti set b1='AF2X8BOMV4VERYWXA7JOIFZI3' where id=9; -update noar tt set v0='4H' where id=9; -update noar ti set v0='4H' where id=9; -update noar tt set b2='A2DLGH05Q3Y6XTL0O4271OBF' where id=9; -update noar ti set b2='A2DLGH05Q3Y6XTL0O4271OBF' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 mediumblob not null, -b1 tinyblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='ITZV7T' where id=1; -update noar ti set v0='ITZV7T' where id=1; -update noar tt set b0='ON850QZ46IRH51HQJFA6PGIIXPOC8RIM' where id=1; -update noar ti set b0='ON850QZ46IRH51HQJFA6PGIIXPOC8RIM' where id=1; -update noar tt set v0='4PLKPTNKUSL0M0AF7' where id=1; -update noar ti set v0='4PLKPTNKUSL0M0AF7' where id=1; -update noar tt set b1='XGX7OX65W6JUR42TWG0' where id=1; -update noar ti set b1='XGX7OX65W6JUR42TWG0' where id=1; -update noar tt set v0='8IYJJGBDE2TNF7KW' where id=1; -update noar ti set v0='8IYJJGBDE2TNF7KW' where id=1; -update noar tt set b2='5DYP4BWA' where id=1; -update noar ti set b2='5DYP4BWA' where id=1; -update noar tt set v0='EA007E1RYR0HIGH6PAII0MJOARG7' where id=2; -update noar ti set v0='EA007E1RYR0HIGH6PAII0MJOARG7' where id=2; -update noar tt set b0='ZW3V8FA6PX4LK13WRO' where id=2; -update noar ti set b0='ZW3V8FA6PX4LK13WRO' where id=2; -update noar tt set v0='1WQ2G861492YFWCOWPRL7I93Y7ZH7' where id=2; -update noar ti set v0='1WQ2G861492YFWCOWPRL7I93Y7ZH7' where id=2; -update noar tt set b1='FR6DA85JDALGBQ5DBBWUSPECEEL646H' where id=2; -update noar ti set b1='FR6DA85JDALGBQ5DBBWUSPECEEL646H' where id=2; -update noar tt set v0='GM51N1IVE2D8UEWC4W93E2T3R6' where id=2; -update noar ti set v0='GM51N1IVE2D8UEWC4W93E2T3R6' where id=2; -update noar tt set b2='LKALLE4WOJ4Z9XWGN0L9IO9K' where id=2; -update noar ti set b2='LKALLE4WOJ4Z9XWGN0L9IO9K' where id=2; -update noar tt set v0='XAOIA17PZYG7I7O2' where id=3; -update noar ti set v0='XAOIA17PZYG7I7O2' where id=3; -update noar tt set b0='HEOCWGUCQYFJVUT0' where id=3; -update noar ti set b0='HEOCWGUCQYFJVUT0' where id=3; -update noar tt set v0='7A85306HEHF' where id=3; -update noar ti set v0='7A85306HEHF' where id=3; -update noar tt set b1='IOOAC94MPF58H6NR3PRP78D2' where id=3; -update noar ti set b1='IOOAC94MPF58H6NR3PRP78D2' where id=3; -update noar tt set v0='BQHTKVG0J78DABNHLCHC65B4' where id=3; -update noar ti set v0='BQHTKVG0J78DABNHLCHC65B4' where id=3; -update noar tt set b2='8YCQR3' where id=3; -update noar ti set b2='8YCQR3' where id=3; -update noar tt set v0='D9BIK' where id=4; -update noar ti set v0='D9BIK' where id=4; -update noar tt set b0='S2KYY07XA4I8' where id=4; -update noar ti set b0='S2KYY07XA4I8' where id=4; -update noar tt set v0='4M5MTGJ6YKK3T04TV4AH' where id=4; -update noar ti set v0='4M5MTGJ6YKK3T04TV4AH' where id=4; -update noar tt set b1='PDF6XMXQ0TV5T0AX3M8SDD2VMOXCFE' where id=4; -update noar ti set b1='PDF6XMXQ0TV5T0AX3M8SDD2VMOXCFE' where id=4; -update noar tt set v0='NDA6YMNSL3DLRU1BHFY8D2RFJ0X36AGX' where id=4; -update noar ti set v0='NDA6YMNSL3DLRU1BHFY8D2RFJ0X36AGX' where id=4; -update noar tt set b2='LET' where id=4; -update noar ti set b2='LET' where id=4; -update noar tt set v0='JPLAI' where id=5; -update noar ti set v0='JPLAI' where id=5; -update noar tt set b0='6JNJZFU0V42VL5563Y3FR6UBG' where id=5; -update noar ti set b0='6JNJZFU0V42VL5563Y3FR6UBG' where id=5; -update noar tt set v0='376615FHEH784C91UCM0RTC07TM4AI' where id=5; -update noar ti set v0='376615FHEH784C91UCM0RTC07TM4AI' where id=5; -update noar tt set b1='KVX1UZZKLOCXMPB3OIB' where id=5; -update noar ti set b1='KVX1UZZKLOCXMPB3OIB' where id=5; -update noar tt set v0='4HNFR2QGG6DA5IL681IVGNX' where id=5; -update noar ti set v0='4HNFR2QGG6DA5IL681IVGNX' where id=5; -update noar tt set b2='KQI6JR24387IH' where id=5; -update noar ti set b2='KQI6JR24387IH' where id=5; -update noar tt set v0='JKTC94MRJX6R' where id=6; -update noar ti set v0='JKTC94MRJX6R' where id=6; -update noar tt set b0='JGBCTL3Z139UFNWFF56PNAV06YVM7OH' where id=6; -update noar ti set b0='JGBCTL3Z139UFNWFF56PNAV06YVM7OH' where id=6; -update noar tt set v0='GH' where id=6; -update noar ti set v0='GH' where id=6; -update noar tt set b1='QR5C62BWM0QZMWMXAY4IL' where id=6; -update noar ti set b1='QR5C62BWM0QZMWMXAY4IL' where id=6; -update noar tt set v0='IWXHVO8FMLTP5SU8' where id=6; -update noar ti set v0='IWXHVO8FMLTP5SU8' where id=6; -update noar tt set b2='V96ZQR5GSVZ5K9MKECJ133OO2OH6E9' where id=6; -update noar ti set b2='V96ZQR5GSVZ5K9MKECJ133OO2OH6E9' where id=6; -update noar tt set v0='KRB1B8AE7WP7NUTEGMG2EUWI01I5V' where id=7; -update noar ti set v0='KRB1B8AE7WP7NUTEGMG2EUWI01I5V' where id=7; -update noar tt set b0='J0CFBHE1F' where id=7; -update noar ti set b0='J0CFBHE1F' where id=7; -update noar tt set v0='YPN5Y' where id=7; -update noar ti set v0='YPN5Y' where id=7; -update noar tt set b1='FHW' where id=7; -update noar ti set b1='FHW' where id=7; -update noar tt set v0='84FR7714FR78NAFQRKPBQSKODZXNS' where id=7; -update noar ti set v0='84FR7714FR78NAFQRKPBQSKODZXNS' where id=7; -update noar tt set b2='VXA7V7YZXURWDT' where id=7; -update noar ti set b2='VXA7V7YZXURWDT' where id=7; -update noar tt set v0='2Y279KGG4Y3YC3KYQDFDYQUYGHHOP5O' where id=8; -update noar ti set v0='2Y279KGG4Y3YC3KYQDFDYQUYGHHOP5O' where id=8; -update noar tt set b0='KXUMI50M49RBI35RIC' where id=8; -update noar ti set b0='KXUMI50M49RBI35RIC' where id=8; -update noar tt set v0='OYVHVNZ05NW62X4HSMED0PJ7L' where id=8; -update noar ti set v0='OYVHVNZ05NW62X4HSMED0PJ7L' where id=8; -update noar tt set b1='3IYBZCIUMGOBJ0S4GG1ZQ5I9ZGLM9I' where id=8; -update noar ti set b1='3IYBZCIUMGOBJ0S4GG1ZQ5I9ZGLM9I' where id=8; -update noar tt set v0='UOYDRBK' where id=8; -update noar ti set v0='UOYDRBK' where id=8; -update noar tt set b2='7CHZJJDZOJ0GN978Z' where id=8; -update noar ti set b2='7CHZJJDZOJ0GN978Z' where id=8; -update noar tt set v0='6Y7S9ZBMMUKY0ZILT6BR' where id=9; -update noar ti set v0='6Y7S9ZBMMUKY0ZILT6BR' where id=9; -update noar tt set b0='I9X11SW1EODQG98RHHOEXT7IIXXBXOP' where id=9; -update noar ti set b0='I9X11SW1EODQG98RHHOEXT7IIXXBXOP' where id=9; -update noar tt set v0='VA9W3B5T' where id=9; -update noar ti set v0='VA9W3B5T' where id=9; -update noar tt set b1='F6EM4P9ZTZRB4OHTDUP8OKEM' where id=9; -update noar ti set b1='F6EM4P9ZTZRB4OHTDUP8OKEM' where id=9; -update noar tt set v0='B6FE9DDY2CX51O0PU78M14H2JE' where id=9; -update noar ti set v0='B6FE9DDY2CX51O0PU78M14H2JE' where id=9; -update noar tt set b2='R80JMKEGT9LJP1YET4' where id=9; -update noar ti set b2='R80JMKEGT9LJP1YET4' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 mediumblob null, -b1 tinyblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='F31RGXE0MLWRAO2FIZJ850K2PBBKK9' where id=1; -update noar ti set v0='F31RGXE0MLWRAO2FIZJ850K2PBBKK9' where id=1; -update noar tt set b0='AYB' where id=1; -update noar ti set b0='AYB' where id=1; -update noar tt set v0='UQRRD4R0SF7FTZ4K9W8JOGTWSOFO82' where id=1; -update noar ti set v0='UQRRD4R0SF7FTZ4K9W8JOGTWSOFO82' where id=1; -update noar tt set b1='66PBTAZWWP4UAZR1SMYP2ZZ4H0FYFD' where id=1; -update noar ti set b1='66PBTAZWWP4UAZR1SMYP2ZZ4H0FYFD' where id=1; -update noar tt set v0='GHLAT1APUGZGESDBK9WXF4NJQKS27' where id=1; -update noar ti set v0='GHLAT1APUGZGESDBK9WXF4NJQKS27' where id=1; -update noar tt set b2='XU2MJ8RT03C5SJ5XGC5' where id=1; -update noar ti set b2='XU2MJ8RT03C5SJ5XGC5' where id=1; -update noar tt set v0='HGWGS1TRENA1HWTHMYDHD05NY' where id=2; -update noar ti set v0='HGWGS1TRENA1HWTHMYDHD05NY' where id=2; -update noar tt set b0='1F6DMY0O53385QDOKPEMSO4W' where id=2; -update noar ti set b0='1F6DMY0O53385QDOKPEMSO4W' where id=2; -update noar tt set v0='9LZZ' where id=2; -update noar ti set v0='9LZZ' where id=2; -update noar tt set b1='6TPP760126T7' where id=2; -update noar ti set b1='6TPP760126T7' where id=2; -update noar tt set v0='NIGOG9MOPDJJTK0IPPJSV07TN' where id=2; -update noar ti set v0='NIGOG9MOPDJJTK0IPPJSV07TN' where id=2; -update noar tt set b2='YKYYTR3PBSW8OOXOTNLP27' where id=2; -update noar ti set b2='YKYYTR3PBSW8OOXOTNLP27' where id=2; -update noar tt set v0='UQ9SFQ03' where id=3; -update noar ti set v0='UQ9SFQ03' where id=3; -update noar tt set b0='Y' where id=3; -update noar ti set b0='Y' where id=3; -update noar tt set v0='B5GT' where id=3; -update noar ti set v0='B5GT' where id=3; -update noar tt set b1='6QFZAM' where id=3; -update noar ti set b1='6QFZAM' where id=3; -update noar tt set v0='0PONGRCRT0JCWJN7ER47OOL07LV9WCBA' where id=3; -update noar ti set v0='0PONGRCRT0JCWJN7ER47OOL07LV9WCBA' where id=3; -update noar tt set b2='LJFIPSOJSB40I7OZ4B3EUA8UCJ' where id=3; -update noar ti set b2='LJFIPSOJSB40I7OZ4B3EUA8UCJ' where id=3; -update noar tt set v0='6S57PV63EXYW' where id=4; -update noar ti set v0='6S57PV63EXYW' where id=4; -update noar tt set b0='15SNQWWN219H8JY' where id=4; -update noar ti set b0='15SNQWWN219H8JY' where id=4; -update noar tt set v0='JDQIOHTOYCE' where id=4; -update noar ti set v0='JDQIOHTOYCE' where id=4; -update noar tt set b1='Y' where id=4; -update noar ti set b1='Y' where id=4; -update noar tt set v0='MCKHXA73DR8N' where id=4; -update noar ti set v0='MCKHXA73DR8N' where id=4; -update noar tt set b2='EEJC' where id=4; -update noar ti set b2='EEJC' where id=4; -update noar tt set v0='26UI08CQN9JY97POUWKXW93ISQOQ' where id=5; -update noar ti set v0='26UI08CQN9JY97POUWKXW93ISQOQ' where id=5; -update noar tt set b0='FRCBLSNC' where id=5; -update noar ti set b0='FRCBLSNC' where id=5; -update noar tt set v0='A9ZPAT6' where id=5; -update noar ti set v0='A9ZPAT6' where id=5; -update noar tt set b1='XD9CGHREL' where id=5; -update noar ti set b1='XD9CGHREL' where id=5; -update noar tt set v0='UU0KFX068A4GWA88RA9214B747EY' where id=5; -update noar ti set v0='UU0KFX068A4GWA88RA9214B747EY' where id=5; -update noar tt set b2='J303Y0Y4BR8YXE' where id=5; -update noar ti set b2='J303Y0Y4BR8YXE' where id=5; -update noar tt set v0='GQ809Y4QBFP' where id=6; -update noar ti set v0='GQ809Y4QBFP' where id=6; -update noar tt set b0='VPHF8W7W7QVS' where id=6; -update noar ti set b0='VPHF8W7W7QVS' where id=6; -update noar tt set v0='00IDXVYQMVQX63L6CFB3IEYFPXEQ' where id=6; -update noar ti set v0='00IDXVYQMVQX63L6CFB3IEYFPXEQ' where id=6; -update noar tt set b1='37X4X3' where id=6; -update noar ti set b1='37X4X3' where id=6; -update noar tt set v0='XIRP8TC5L0TF52WLHJVTP5Y' where id=6; -update noar ti set v0='XIRP8TC5L0TF52WLHJVTP5Y' where id=6; -update noar tt set b2='5XXCIRA13RH5VT70PUT8Z4K2ZRS6M' where id=6; -update noar ti set b2='5XXCIRA13RH5VT70PUT8Z4K2ZRS6M' where id=6; -update noar tt set v0='745Z3D41KF8Z' where id=7; -update noar ti set v0='745Z3D41KF8Z' where id=7; -update noar tt set b0='TQTF5X03QYY' where id=7; -update noar ti set b0='TQTF5X03QYY' where id=7; -update noar tt set v0='K06L6R6' where id=7; -update noar ti set v0='K06L6R6' where id=7; -update noar tt set b1='OPC3' where id=7; -update noar ti set b1='OPC3' where id=7; -update noar tt set v0='R61JV3CPNDAL1MGY1' where id=7; -update noar ti set v0='R61JV3CPNDAL1MGY1' where id=7; -update noar tt set b2='L3GM6T2J' where id=7; -update noar ti set b2='L3GM6T2J' where id=7; -update noar tt set v0='CA6VYJIQOWPIBZ7UAS3N1J9Q' where id=8; -update noar ti set v0='CA6VYJIQOWPIBZ7UAS3N1J9Q' where id=8; -update noar tt set b0='D9CA' where id=8; -update noar ti set b0='D9CA' where id=8; -update noar tt set v0='IUAG7AUZ9TRO' where id=8; -update noar ti set v0='IUAG7AUZ9TRO' where id=8; -update noar tt set b1='WLFBZS74UBDLJFFF' where id=8; -update noar ti set b1='WLFBZS74UBDLJFFF' where id=8; -update noar tt set v0='5YLIFGQCFY6ER8YDGUARM85DU64O0D8' where id=8; -update noar ti set v0='5YLIFGQCFY6ER8YDGUARM85DU64O0D8' where id=8; -update noar tt set b2='KIUOUPS4J5E6FC5' where id=8; -update noar ti set b2='KIUOUPS4J5E6FC5' where id=8; -update noar tt set v0='7D8JAA7IWTQNQ2RR8I' where id=9; -update noar ti set v0='7D8JAA7IWTQNQ2RR8I' where id=9; -update noar tt set b0='R2M' where id=9; -update noar ti set b0='R2M' where id=9; -update noar tt set v0='QMO' where id=9; -update noar ti set v0='QMO' where id=9; -update noar tt set b1='QRG5IONJV3GI45PW' where id=9; -update noar ti set b1='QRG5IONJV3GI45PW' where id=9; -update noar tt set v0='6S907LXNKUSGHQPHFR8UHG' where id=9; -update noar ti set v0='6S907LXNKUSGHQPHFR8UHG' where id=9; -update noar tt set b2='T2EYYQR' where id=9; -update noar ti set b2='T2EYYQR' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 mediumblob null, -b1 tinyblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='SY0OPAECW338K1XNKXFE' where id=1; -update noar ti set v0='SY0OPAECW338K1XNKXFE' where id=1; -update noar tt set b0='L1QASV' where id=1; -update noar ti set b0='L1QASV' where id=1; -update noar tt set v0='YUV' where id=1; -update noar ti set v0='YUV' where id=1; -update noar tt set b1='8ANLEZ1RWE6IQ16VE7BI' where id=1; -update noar ti set b1='8ANLEZ1RWE6IQ16VE7BI' where id=1; -update noar tt set v0='DRVINSKIA0FAIO481IB' where id=1; -update noar ti set v0='DRVINSKIA0FAIO481IB' where id=1; -update noar tt set b2='LPR99FNTUJ8XXU931SPARSXX9QQ' where id=1; -update noar ti set b2='LPR99FNTUJ8XXU931SPARSXX9QQ' where id=1; -update noar tt set v0='X9AY2FBI6OSTRBE' where id=2; -update noar ti set v0='X9AY2FBI6OSTRBE' where id=2; -update noar tt set b0='WK33TOH9INBWUJ696EZM6U0V' where id=2; -update noar ti set b0='WK33TOH9INBWUJ696EZM6U0V' where id=2; -update noar tt set v0='J4WPEAZBLQQWUNJYB3N2J1YUOD61ZQ67' where id=2; -update noar ti set v0='J4WPEAZBLQQWUNJYB3N2J1YUOD61ZQ67' where id=2; -update noar tt set b1='4OJGGIDH8D3NB1M038997V' where id=2; -update noar ti set b1='4OJGGIDH8D3NB1M038997V' where id=2; -update noar tt set v0='8PT4K7LKFPUNENSV2UQ0AXCLF1' where id=2; -update noar ti set v0='8PT4K7LKFPUNENSV2UQ0AXCLF1' where id=2; -update noar tt set b2='N2NLV' where id=2; -update noar ti set b2='N2NLV' where id=2; -update noar tt set v0='5GUX8M7ZB2F' where id=3; -update noar ti set v0='5GUX8M7ZB2F' where id=3; -update noar tt set b0='ZTXXIH8H' where id=3; -update noar ti set b0='ZTXXIH8H' where id=3; -update noar tt set v0='FZ3ZJ258O0J' where id=3; -update noar ti set v0='FZ3ZJ258O0J' where id=3; -update noar tt set b1='JRK8TF9OFW71MWQPNNNRB4YD0UYVGY' where id=3; -update noar ti set b1='JRK8TF9OFW71MWQPNNNRB4YD0UYVGY' where id=3; -update noar tt set v0='RUQJLT89XRUD8KDYZLE15PS6G3' where id=3; -update noar ti set v0='RUQJLT89XRUD8KDYZLE15PS6G3' where id=3; -update noar tt set b2='7ASOO6UQTNUQK9' where id=3; -update noar ti set b2='7ASOO6UQTNUQK9' where id=3; -update noar tt set v0='EP48AAT33SMTSXOO6OAG4BPVFA' where id=4; -update noar ti set v0='EP48AAT33SMTSXOO6OAG4BPVFA' where id=4; -update noar tt set b0='6S9FC8150NDF6YTJVN20QRUXRIQ1' where id=4; -update noar ti set b0='6S9FC8150NDF6YTJVN20QRUXRIQ1' where id=4; -update noar tt set v0='QE87L6EHRF4O55MEEYYOMOPBN' where id=4; -update noar ti set v0='QE87L6EHRF4O55MEEYYOMOPBN' where id=4; -update noar tt set b1='1QO32MJMKK0EYTFG3K6TEWIFQUX' where id=4; -update noar ti set b1='1QO32MJMKK0EYTFG3K6TEWIFQUX' where id=4; -update noar tt set v0='LQWU7' where id=4; -update noar ti set v0='LQWU7' where id=4; -update noar tt set b2='5DLPN0Q9HOJSY7ZZMD6Y70CEZB8K7' where id=4; -update noar ti set b2='5DLPN0Q9HOJSY7ZZMD6Y70CEZB8K7' where id=4; -update noar tt set v0='F5J0W63FVTERMBVLC53Y' where id=5; -update noar ti set v0='F5J0W63FVTERMBVLC53Y' where id=5; -update noar tt set b0='9LZYMVO' where id=5; -update noar ti set b0='9LZYMVO' where id=5; -update noar tt set v0='O' where id=5; -update noar ti set v0='O' where id=5; -update noar tt set b1='B9DCAQVX5IPR6EVE67KNU' where id=5; -update noar ti set b1='B9DCAQVX5IPR6EVE67KNU' where id=5; -update noar tt set v0='V2DZXICDR4PSRG0D8DOJZ' where id=5; -update noar ti set v0='V2DZXICDR4PSRG0D8DOJZ' where id=5; -update noar tt set b2='FGCZ64X2T00' where id=5; -update noar ti set b2='FGCZ64X2T00' where id=5; -update noar tt set v0='OKKOZ2CHPHL9GQ' where id=6; -update noar ti set v0='OKKOZ2CHPHL9GQ' where id=6; -update noar tt set b0='6UVNF9Z8HSJ6GKXHMFYS' where id=6; -update noar ti set b0='6UVNF9Z8HSJ6GKXHMFYS' where id=6; -update noar tt set v0='WNZA3LDNI9C03KT8BQPMQ0PB' where id=6; -update noar ti set v0='WNZA3LDNI9C03KT8BQPMQ0PB' where id=6; -update noar tt set b1='LQHXETX' where id=6; -update noar ti set b1='LQHXETX' where id=6; -update noar tt set v0='PC1N' where id=6; -update noar ti set v0='PC1N' where id=6; -update noar tt set b2='1C757WM190NZV' where id=6; -update noar ti set b2='1C757WM190NZV' where id=6; -update noar tt set v0='6UHRX9DY' where id=7; -update noar ti set v0='6UHRX9DY' where id=7; -update noar tt set b0='5DCC8W12ZVMVVNVEVDZ44D1QQY1S253' where id=7; -update noar ti set b0='5DCC8W12ZVMVVNVEVDZ44D1QQY1S253' where id=7; -update noar tt set v0='V9UT22S9778O3JFERB' where id=7; -update noar ti set v0='V9UT22S9778O3JFERB' where id=7; -update noar tt set b1='184RX3MH1MJKBOLZ35OF68B' where id=7; -update noar ti set b1='184RX3MH1MJKBOLZ35OF68B' where id=7; -update noar tt set v0='VO9IMQNE1Z80ACMEV7KYB3O9' where id=7; -update noar ti set v0='VO9IMQNE1Z80ACMEV7KYB3O9' where id=7; -update noar tt set b2='WD8Q' where id=7; -update noar ti set b2='WD8Q' where id=7; -update noar tt set v0='WMILX6' where id=8; -update noar ti set v0='WMILX6' where id=8; -update noar tt set b0='16SB' where id=8; -update noar ti set b0='16SB' where id=8; -update noar tt set v0='2ONKX0D2L82NPE4FFDR2HI2QXLF6YNB' where id=8; -update noar ti set v0='2ONKX0D2L82NPE4FFDR2HI2QXLF6YNB' where id=8; -update noar tt set b1='RJKALFDDI6FPCGHS' where id=8; -update noar ti set b1='RJKALFDDI6FPCGHS' where id=8; -update noar tt set v0='IL97UQZV7BQ86' where id=8; -update noar ti set v0='IL97UQZV7BQ86' where id=8; -update noar tt set b2='A' where id=8; -update noar ti set b2='A' where id=8; -update noar tt set v0='Q7OLHBQS590OZONM' where id=9; -update noar ti set v0='Q7OLHBQS590OZONM' where id=9; -update noar tt set b0='OOHBCUU5TKSD' where id=9; -update noar ti set b0='OOHBCUU5TKSD' where id=9; -update noar tt set v0='22BQU9' where id=9; -update noar ti set v0='22BQU9' where id=9; -update noar tt set b1='7RG0' where id=9; -update noar ti set b1='7RG0' where id=9; -update noar tt set v0='1H8HFYKMPFAE2O3LFW095UQ2' where id=9; -update noar ti set v0='1H8HFYKMPFAE2O3LFW095UQ2' where id=9; -update noar tt set b2='9AHD0WO4HWHD0EZVRRNIYJ1Z' where id=9; -update noar ti set b2='9AHD0WO4HWHD0EZVRRNIYJ1Z' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 mediumblob not null, -b1 tinyblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='SIVJHAUK7P' where id=1; -update noar ti set v0='SIVJHAUK7P' where id=1; -update noar tt set b0='EV2X' where id=1; -update noar ti set b0='EV2X' where id=1; -update noar tt set v0='F21KLMSSA9MEC5Y4GHS17Z0I2NUG430' where id=1; -update noar ti set v0='F21KLMSSA9MEC5Y4GHS17Z0I2NUG430' where id=1; -update noar tt set b1='PYR9SM5M261MGJP' where id=1; -update noar ti set b1='PYR9SM5M261MGJP' where id=1; -update noar tt set v0='MU86PYFVX8SAVBZ' where id=1; -update noar ti set v0='MU86PYFVX8SAVBZ' where id=1; -update noar tt set b2='SQRRWZKR93O3N' where id=1; -update noar ti set b2='SQRRWZKR93O3N' where id=1; -update noar tt set v0='4PURI39PXJAWZQO586MXD2DR0C7EDF0' where id=2; -update noar ti set v0='4PURI39PXJAWZQO586MXD2DR0C7EDF0' where id=2; -update noar tt set b0='EWNV1M8DWR799Z4OICLDK96H' where id=2; -update noar ti set b0='EWNV1M8DWR799Z4OICLDK96H' where id=2; -update noar tt set v0='WC1UUNO5Y4' where id=2; -update noar ti set v0='WC1UUNO5Y4' where id=2; -update noar tt set b1='I51S8KYIXFJUOMN633HJ7N' where id=2; -update noar ti set b1='I51S8KYIXFJUOMN633HJ7N' where id=2; -update noar tt set v0='IZDFCQ2LCRQHYF0XQIDTSUAF2R' where id=2; -update noar ti set v0='IZDFCQ2LCRQHYF0XQIDTSUAF2R' where id=2; -update noar tt set b2='3PRI0FSUOQGSB8OR9242E' where id=2; -update noar ti set b2='3PRI0FSUOQGSB8OR9242E' where id=2; -update noar tt set v0='KUR546DX91YCD3A2VDUCSTW2IT' where id=3; -update noar ti set v0='KUR546DX91YCD3A2VDUCSTW2IT' where id=3; -update noar tt set b0='C8P3PPVR5EXZ' where id=3; -update noar ti set b0='C8P3PPVR5EXZ' where id=3; -update noar tt set v0='WFEIFJ3ONX3W8VUPGA' where id=3; -update noar ti set v0='WFEIFJ3ONX3W8VUPGA' where id=3; -update noar tt set b1='0G474G6GJV4' where id=3; -update noar ti set b1='0G474G6GJV4' where id=3; -update noar tt set v0='J4DNHZ1' where id=3; -update noar ti set v0='J4DNHZ1' where id=3; -update noar tt set b2='FIZUCBVDBH3AIQ0IV5QQMJVORL' where id=3; -update noar ti set b2='FIZUCBVDBH3AIQ0IV5QQMJVORL' where id=3; -update noar tt set v0='OU6IZFZ22Q8VVXYEO8E9MH2VS' where id=4; -update noar ti set v0='OU6IZFZ22Q8VVXYEO8E9MH2VS' where id=4; -update noar tt set b0='WGJJ3H3FUN0V9KG7788M283WEP' where id=4; -update noar ti set b0='WGJJ3H3FUN0V9KG7788M283WEP' where id=4; -update noar tt set v0='31DQIR06TS3YVPNODRS0SS806M1' where id=4; -update noar ti set v0='31DQIR06TS3YVPNODRS0SS806M1' where id=4; -update noar tt set b1='AAFPM2UDEWFQV414522M6NU' where id=4; -update noar ti set b1='AAFPM2UDEWFQV414522M6NU' where id=4; -update noar tt set v0='BHOOWY' where id=4; -update noar ti set v0='BHOOWY' where id=4; -update noar tt set b2='PYT' where id=4; -update noar ti set b2='PYT' where id=4; -update noar tt set v0='LMW4K1NGY0BMYO6X91J6IEF1M21I' where id=5; -update noar ti set v0='LMW4K1NGY0BMYO6X91J6IEF1M21I' where id=5; -update noar tt set b0='MSUFZBIC63FZIGHRC45TCRG' where id=5; -update noar ti set b0='MSUFZBIC63FZIGHRC45TCRG' where id=5; -update noar tt set v0='A5DQWZXTRBDR7CJSPU7Y2' where id=5; -update noar ti set v0='A5DQWZXTRBDR7CJSPU7Y2' where id=5; -update noar tt set b1='0WO' where id=5; -update noar ti set b1='0WO' where id=5; -update noar tt set v0='M24YXCB3X' where id=5; -update noar ti set v0='M24YXCB3X' where id=5; -update noar tt set b2='CHTSZY2SWDXR0YOPIAZ67VGSEIZTEZKR' where id=5; -update noar ti set b2='CHTSZY2SWDXR0YOPIAZ67VGSEIZTEZKR' where id=5; -update noar tt set v0='77EGNRM73Q6DZFXBJEC52D213Z' where id=6; -update noar ti set v0='77EGNRM73Q6DZFXBJEC52D213Z' where id=6; -update noar tt set b0='T5680CNGJY' where id=6; -update noar ti set b0='T5680CNGJY' where id=6; -update noar tt set v0='TWLXY1PLHZ52JOU' where id=6; -update noar ti set v0='TWLXY1PLHZ52JOU' where id=6; -update noar tt set b1='3Z7TMCO8F8CWS7I6V90C' where id=6; -update noar ti set b1='3Z7TMCO8F8CWS7I6V90C' where id=6; -update noar tt set v0='VHFKN3IQ' where id=6; -update noar ti set v0='VHFKN3IQ' where id=6; -update noar tt set b2='251I63TA628PO2ZOJKQSPQRL0GPB1RP' where id=6; -update noar ti set b2='251I63TA628PO2ZOJKQSPQRL0GPB1RP' where id=6; -update noar tt set v0='SRS2RZX58ZX1JSMU' where id=7; -update noar ti set v0='SRS2RZX58ZX1JSMU' where id=7; -update noar tt set b0='7KWUNO5PHGZNWAH15EH0Q80YUAVVSP' where id=7; -update noar ti set b0='7KWUNO5PHGZNWAH15EH0Q80YUAVVSP' where id=7; -update noar tt set v0='IO95UWAGBCCAD' where id=7; -update noar ti set v0='IO95UWAGBCCAD' where id=7; -update noar tt set b1='S5GOD79CX' where id=7; -update noar ti set b1='S5GOD79CX' where id=7; -update noar tt set v0='6W4HWAOAC23V7Z01OUDZEYVCDE5238O' where id=7; -update noar ti set v0='6W4HWAOAC23V7Z01OUDZEYVCDE5238O' where id=7; -update noar tt set b2='3JYP1BKFW1D71LEHXCLQFNBGO8' where id=7; -update noar ti set b2='3JYP1BKFW1D71LEHXCLQFNBGO8' where id=7; -update noar tt set v0='35OA6F64XFIRJPDA5YISMR' where id=8; -update noar ti set v0='35OA6F64XFIRJPDA5YISMR' where id=8; -update noar tt set b0='ANK' where id=8; -update noar ti set b0='ANK' where id=8; -update noar tt set v0='6JR3GM8AL73DN4W4DIL6GNS' where id=8; -update noar ti set v0='6JR3GM8AL73DN4W4DIL6GNS' where id=8; -update noar tt set b1='UG' where id=8; -update noar ti set b1='UG' where id=8; -update noar tt set v0='WTUK9EIZ8CS82V0857WII3OX07X4MG5T' where id=8; -update noar ti set v0='WTUK9EIZ8CS82V0857WII3OX07X4MG5T' where id=8; -update noar tt set b2='WIKG54ZG12I02' where id=8; -update noar ti set b2='WIKG54ZG12I02' where id=8; -update noar tt set v0='TOC5QBGYG' where id=9; -update noar ti set v0='TOC5QBGYG' where id=9; -update noar tt set b0='3G9613IVZ7VJ4YPJ8YQU6LJLPMS3B87' where id=9; -update noar ti set b0='3G9613IVZ7VJ4YPJ8YQU6LJLPMS3B87' where id=9; -update noar tt set v0='K7TCPDM03GS0ZJNAYSQEKW5' where id=9; -update noar ti set v0='K7TCPDM03GS0ZJNAYSQEKW5' where id=9; -update noar tt set b1='QIELXT6HBET73' where id=9; -update noar ti set b1='QIELXT6HBET73' where id=9; -update noar tt set v0='W8AK1C6K8HZ' where id=9; -update noar ti set v0='W8AK1C6K8HZ' where id=9; -update noar tt set b2='0A4MFE944U0I6V' where id=9; -update noar ti set b2='0A4MFE944U0I6V' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 mediumblob not null, -b1 tinyblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='LTHSBR8' where id=1; -update noar ti set v0='LTHSBR8' where id=1; -update noar tt set b0='T' where id=1; -update noar ti set b0='T' where id=1; -update noar tt set v0='4' where id=1; -update noar ti set v0='4' where id=1; -update noar tt set b1='Q2IDNVGZMHDLWXHA8Q7' where id=1; -update noar ti set b1='Q2IDNVGZMHDLWXHA8Q7' where id=1; -update noar tt set v0='QQN' where id=1; -update noar ti set v0='QQN' where id=1; -update noar tt set b2='XVMAK6L1B5GGJBWOMXIXGK' where id=1; -update noar ti set b2='XVMAK6L1B5GGJBWOMXIXGK' where id=1; -update noar tt set v0='ETPY1WJ6UYWW34W3YSRJ1PLK' where id=2; -update noar ti set v0='ETPY1WJ6UYWW34W3YSRJ1PLK' where id=2; -update noar tt set b0='BOEBAHREXS3DM5SLXR4M99FP9B' where id=2; -update noar ti set b0='BOEBAHREXS3DM5SLXR4M99FP9B' where id=2; -update noar tt set v0='ZME2X6HC' where id=2; -update noar ti set v0='ZME2X6HC' where id=2; -update noar tt set b1='JZPJ1OV5WON7SWVWB6HLBNR5' where id=2; -update noar ti set b1='JZPJ1OV5WON7SWVWB6HLBNR5' where id=2; -update noar tt set v0='QSOA' where id=2; -update noar ti set v0='QSOA' where id=2; -update noar tt set b2='G56LST5' where id=2; -update noar ti set b2='G56LST5' where id=2; -update noar tt set v0='RUWST3D1QMOLNS4ZOJSKOL91T9' where id=3; -update noar ti set v0='RUWST3D1QMOLNS4ZOJSKOL91T9' where id=3; -update noar tt set b0='45942MACD3LSGZ7RWC' where id=3; -update noar ti set b0='45942MACD3LSGZ7RWC' where id=3; -update noar tt set v0='5QMJX2C360JAAAEWCT8Y17' where id=3; -update noar ti set v0='5QMJX2C360JAAAEWCT8Y17' where id=3; -update noar tt set b1='SZHW1BGHFXSN0K7SZ83VAM21B' where id=3; -update noar ti set b1='SZHW1BGHFXSN0K7SZ83VAM21B' where id=3; -update noar tt set v0='J905FUTQ' where id=3; -update noar ti set v0='J905FUTQ' where id=3; -update noar tt set b2='W9YCRC7UDZJJNB1XZ3CU5J' where id=3; -update noar ti set b2='W9YCRC7UDZJJNB1XZ3CU5J' where id=3; -update noar tt set v0='IXGR24PS08CNJJD8K8D' where id=4; -update noar ti set v0='IXGR24PS08CNJJD8K8D' where id=4; -update noar tt set b0='DAJLYHP' where id=4; -update noar ti set b0='DAJLYHP' where id=4; -update noar tt set v0='EDMEWL3XAI8C5ZOI8SO9H9B5VJU' where id=4; -update noar ti set v0='EDMEWL3XAI8C5ZOI8SO9H9B5VJU' where id=4; -update noar tt set b1='PEZAD8JNDVOE0Z7IZMD51QLIJ8' where id=4; -update noar ti set b1='PEZAD8JNDVOE0Z7IZMD51QLIJ8' where id=4; -update noar tt set v0='OYTPFN5PQ03ISDPVZ652H4MZ2XEW3C' where id=4; -update noar ti set v0='OYTPFN5PQ03ISDPVZ652H4MZ2XEW3C' where id=4; -update noar tt set b2='O5F8JJ46Y6VJV8TPISGGBD' where id=4; -update noar ti set b2='O5F8JJ46Y6VJV8TPISGGBD' where id=4; -update noar tt set v0='YR48H4C377UKCR5BV2HPEG' where id=5; -update noar ti set v0='YR48H4C377UKCR5BV2HPEG' where id=5; -update noar tt set b0='80I5UVGAM4TVZY825D0Y70NWGQCIB' where id=5; -update noar ti set b0='80I5UVGAM4TVZY825D0Y70NWGQCIB' where id=5; -update noar tt set v0='JKQGPBOEKIVUBONHEPUTQS1' where id=5; -update noar ti set v0='JKQGPBOEKIVUBONHEPUTQS1' where id=5; -update noar tt set b1='J9QMX1YME34LU' where id=5; -update noar ti set b1='J9QMX1YME34LU' where id=5; -update noar tt set v0='4PQJPJ6XYEHYCLN' where id=5; -update noar ti set v0='4PQJPJ6XYEHYCLN' where id=5; -update noar tt set b2='RRLK08F7GAV4SPN1JOIXZY' where id=5; -update noar ti set b2='RRLK08F7GAV4SPN1JOIXZY' where id=5; -update noar tt set v0='YWM9UGC' where id=6; -update noar ti set v0='YWM9UGC' where id=6; -update noar tt set b0='7BLZ60JRV1XZ8WJL79ZH6DM' where id=6; -update noar ti set b0='7BLZ60JRV1XZ8WJL79ZH6DM' where id=6; -update noar tt set v0='K1' where id=6; -update noar ti set v0='K1' where id=6; -update noar tt set b1='UD0QN' where id=6; -update noar ti set b1='UD0QN' where id=6; -update noar tt set v0='H790' where id=6; -update noar ti set v0='H790' where id=6; -update noar tt set b2='02HTOXE8' where id=6; -update noar ti set b2='02HTOXE8' where id=6; -update noar tt set v0='XZBE09N6DDPS3O94KERZSB2Q' where id=7; -update noar ti set v0='XZBE09N6DDPS3O94KERZSB2Q' where id=7; -update noar tt set b0='V0HQI5IWHMZ' where id=7; -update noar ti set b0='V0HQI5IWHMZ' where id=7; -update noar tt set v0='Q2GREC4R7ACG58H' where id=7; -update noar ti set v0='Q2GREC4R7ACG58H' where id=7; -update noar tt set b1='HG0W6FB' where id=7; -update noar ti set b1='HG0W6FB' where id=7; -update noar tt set v0='UVM9NDSZXJ' where id=7; -update noar ti set v0='UVM9NDSZXJ' where id=7; -update noar tt set b2='KAAO386YRDS9ZF0DXW' where id=7; -update noar ti set b2='KAAO386YRDS9ZF0DXW' where id=7; -update noar tt set v0='ERPS' where id=8; -update noar ti set v0='ERPS' where id=8; -update noar tt set b0='B7M' where id=8; -update noar ti set b0='B7M' where id=8; -update noar tt set v0='1XQHWEZ7HCZ' where id=8; -update noar ti set v0='1XQHWEZ7HCZ' where id=8; -update noar tt set b1='7N0AC0ONOTQWVMZJ86' where id=8; -update noar ti set b1='7N0AC0ONOTQWVMZJ86' where id=8; -update noar tt set v0='GC' where id=8; -update noar ti set v0='GC' where id=8; -update noar tt set b2='2ILH6YR07S' where id=8; -update noar ti set b2='2ILH6YR07S' where id=8; -update noar tt set v0='LCRCXKT25DSSYFY80JJ' where id=9; -update noar ti set v0='LCRCXKT25DSSYFY80JJ' where id=9; -update noar tt set b0='3X' where id=9; -update noar ti set b0='3X' where id=9; -update noar tt set v0='DCI2GYN5Z712HZI2QP4MDRO' where id=9; -update noar ti set v0='DCI2GYN5Z712HZI2QP4MDRO' where id=9; -update noar tt set b1='E7LAWRMNPGJLGSBB3N2D5H0SL3AIMB' where id=9; -update noar ti set b1='E7LAWRMNPGJLGSBB3N2D5H0SL3AIMB' where id=9; -update noar tt set v0='2ROT25R3QCUD1S' where id=9; -update noar ti set v0='2ROT25R3QCUD1S' where id=9; -update noar tt set b2='IUNYUI9OAE3' where id=9; -update noar ti set b2='IUNYUI9OAE3' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 mediumblob null, -b1 tinyblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='O4GVM81UCTZNBS' where id=1; -update noar ti set v0='O4GVM81UCTZNBS' where id=1; -update noar tt set b0='9K' where id=1; -update noar ti set b0='9K' where id=1; -update noar tt set v0='P2JV' where id=1; -update noar ti set v0='P2JV' where id=1; -update noar tt set b1='XBAVC2D8RYRB9ROTHP8AGFAH2' where id=1; -update noar ti set b1='XBAVC2D8RYRB9ROTHP8AGFAH2' where id=1; -update noar tt set v0='R23G0NG9XG' where id=1; -update noar ti set v0='R23G0NG9XG' where id=1; -update noar tt set b2='JRB7KPMBFW98BW18T8' where id=1; -update noar ti set b2='JRB7KPMBFW98BW18T8' where id=1; -update noar tt set v0='5N5' where id=2; -update noar ti set v0='5N5' where id=2; -update noar tt set b0='XLIV0VDVLL1G5NRW4GEAER9Z' where id=2; -update noar ti set b0='XLIV0VDVLL1G5NRW4GEAER9Z' where id=2; -update noar tt set v0='O907FMR99IMCWOTN' where id=2; -update noar ti set v0='O907FMR99IMCWOTN' where id=2; -update noar tt set b1='4FPZ962VXP3JD8R7PN33' where id=2; -update noar ti set b1='4FPZ962VXP3JD8R7PN33' where id=2; -update noar tt set v0='682ZF4PXU9E' where id=2; -update noar ti set v0='682ZF4PXU9E' where id=2; -update noar tt set b2='TGHZMRDNJB1U4I681HWZ9PCJPP' where id=2; -update noar ti set b2='TGHZMRDNJB1U4I681HWZ9PCJPP' where id=2; -update noar tt set v0='JCC1JYTJXUT4FJBHNDZNM3H69OYNF' where id=3; -update noar ti set v0='JCC1JYTJXUT4FJBHNDZNM3H69OYNF' where id=3; -update noar tt set b0='A3PWQD0FD52HO3CS1' where id=3; -update noar ti set b0='A3PWQD0FD52HO3CS1' where id=3; -update noar tt set v0='KLIN79H57E8F5TBMK6TC' where id=3; -update noar ti set v0='KLIN79H57E8F5TBMK6TC' where id=3; -update noar tt set b1='46D02H8JXD3GNBMUX' where id=3; -update noar ti set b1='46D02H8JXD3GNBMUX' where id=3; -update noar tt set v0='13QF' where id=3; -update noar ti set v0='13QF' where id=3; -update noar tt set b2='RPCRYIH5PZZL54F8EYA4FQEN062' where id=3; -update noar ti set b2='RPCRYIH5PZZL54F8EYA4FQEN062' where id=3; -update noar tt set v0='T089OJE05FFC' where id=4; -update noar ti set v0='T089OJE05FFC' where id=4; -update noar tt set b0='I5A4TY2BT262V6IOOMEMO8B3IL1M6VA2' where id=4; -update noar ti set b0='I5A4TY2BT262V6IOOMEMO8B3IL1M6VA2' where id=4; -update noar tt set v0='DFLPZ' where id=4; -update noar ti set v0='DFLPZ' where id=4; -update noar tt set b1='MF3QMJRLYYZJY829Y' where id=4; -update noar ti set b1='MF3QMJRLYYZJY829Y' where id=4; -update noar tt set v0='7EXDTR' where id=4; -update noar ti set v0='7EXDTR' where id=4; -update noar tt set b2='U9099VOC' where id=4; -update noar ti set b2='U9099VOC' where id=4; -update noar tt set v0='X5D9ZZY5ED1' where id=5; -update noar ti set v0='X5D9ZZY5ED1' where id=5; -update noar tt set b0='QUSPOQAPIA01ZBLVB3R8' where id=5; -update noar ti set b0='QUSPOQAPIA01ZBLVB3R8' where id=5; -update noar tt set v0='4VFO7WDD7KMO103N3UEH8SNZ1L6MU' where id=5; -update noar ti set v0='4VFO7WDD7KMO103N3UEH8SNZ1L6MU' where id=5; -update noar tt set b1='X25A10QVYXYOASUJ' where id=5; -update noar ti set b1='X25A10QVYXYOASUJ' where id=5; -update noar tt set v0='7UR' where id=5; -update noar ti set v0='7UR' where id=5; -update noar tt set b2='O0VI' where id=5; -update noar ti set b2='O0VI' where id=5; -update noar tt set v0='IZHOZJITXW79RME1' where id=6; -update noar ti set v0='IZHOZJITXW79RME1' where id=6; -update noar tt set b0='5AGDB4' where id=6; -update noar ti set b0='5AGDB4' where id=6; -update noar tt set v0='JEPUJ4R1XY7UQ' where id=6; -update noar ti set v0='JEPUJ4R1XY7UQ' where id=6; -update noar tt set b1='8O9ZNLCUC1SCDI04PRS1PMFWF23S0RA' where id=6; -update noar ti set b1='8O9ZNLCUC1SCDI04PRS1PMFWF23S0RA' where id=6; -update noar tt set v0='HQKAE0IZSN' where id=6; -update noar ti set v0='HQKAE0IZSN' where id=6; -update noar tt set b2='H63P6PWO7JJFYI32J2V65HWC5' where id=6; -update noar ti set b2='H63P6PWO7JJFYI32J2V65HWC5' where id=6; -update noar tt set v0='SOSSWIQ8' where id=7; -update noar ti set v0='SOSSWIQ8' where id=7; -update noar tt set b0='014EKNDZTZN9I25H' where id=7; -update noar ti set b0='014EKNDZTZN9I25H' where id=7; -update noar tt set v0='P0D3PG1N1EP5CF56' where id=7; -update noar ti set v0='P0D3PG1N1EP5CF56' where id=7; -update noar tt set b1='6YQ8IXU4JNW' where id=7; -update noar ti set b1='6YQ8IXU4JNW' where id=7; -update noar tt set v0='U8KEWEFUJ' where id=7; -update noar ti set v0='U8KEWEFUJ' where id=7; -update noar tt set b2='FK1Y' where id=7; -update noar ti set b2='FK1Y' where id=7; -update noar tt set v0='HXA9OWTUP7GK' where id=8; -update noar ti set v0='HXA9OWTUP7GK' where id=8; -update noar tt set b0='RV9Y4ZEOW37P4JZ0BA75ZLZX0' where id=8; -update noar ti set b0='RV9Y4ZEOW37P4JZ0BA75ZLZX0' where id=8; -update noar tt set v0='2K' where id=8; -update noar ti set v0='2K' where id=8; -update noar tt set b1='XMYON35ZQZCH8D' where id=8; -update noar ti set b1='XMYON35ZQZCH8D' where id=8; -update noar tt set v0='35' where id=8; -update noar ti set v0='35' where id=8; -update noar tt set b2='5F489KFTJ2LG2' where id=8; -update noar ti set b2='5F489KFTJ2LG2' where id=8; -update noar tt set v0='G0G0VLM17EFBU' where id=9; -update noar ti set v0='G0G0VLM17EFBU' where id=9; -update noar tt set b0='KN6XI62R' where id=9; -update noar ti set b0='KN6XI62R' where id=9; -update noar tt set v0='EBXVDUMPWUP53ZRX' where id=9; -update noar ti set v0='EBXVDUMPWUP53ZRX' where id=9; -update noar tt set b1='J' where id=9; -update noar ti set b1='J' where id=9; -update noar tt set v0='X8ZX2S' where id=9; -update noar ti set v0='X8ZX2S' where id=9; -update noar tt set b2='ABNA85AE8H25AY4D83FJONELG1FBU3L7' where id=9; -update noar ti set b2='ABNA85AE8H25AY4D83FJONELG1FBU3L7' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 mediumblob null, -b1 tinyblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='BRNJ' where id=1; -update noar ti set v0='BRNJ' where id=1; -update noar tt set b0='R0ZEP9T' where id=1; -update noar ti set b0='R0ZEP9T' where id=1; -update noar tt set v0='ADQXWREPB637SILIJQ5N05NBGT' where id=1; -update noar ti set v0='ADQXWREPB637SILIJQ5N05NBGT' where id=1; -update noar tt set b1='2JWOBDTVSVAE6T8RN8QCPXIF1DYDES9' where id=1; -update noar ti set b1='2JWOBDTVSVAE6T8RN8QCPXIF1DYDES9' where id=1; -update noar tt set v0='YISO92KUL2QB35L5S57PI6DWM' where id=1; -update noar ti set v0='YISO92KUL2QB35L5S57PI6DWM' where id=1; -update noar tt set b2='HZ3OVMOBWG3WSAA32' where id=1; -update noar ti set b2='HZ3OVMOBWG3WSAA32' where id=1; -update noar tt set v0='0QY2NKDXBDTCQKS9UEMOQD7' where id=2; -update noar ti set v0='0QY2NKDXBDTCQKS9UEMOQD7' where id=2; -update noar tt set b0='ZEQA9Y8FDD694ZLKY2M8P9H3' where id=2; -update noar ti set b0='ZEQA9Y8FDD694ZLKY2M8P9H3' where id=2; -update noar tt set v0='ITOPJXOYH' where id=2; -update noar ti set v0='ITOPJXOYH' where id=2; -update noar tt set b1='HQGSGMLH0PGPB8' where id=2; -update noar ti set b1='HQGSGMLH0PGPB8' where id=2; -update noar tt set v0='44KJN' where id=2; -update noar ti set v0='44KJN' where id=2; -update noar tt set b2='Q23BYKABZ' where id=2; -update noar ti set b2='Q23BYKABZ' where id=2; -update noar tt set v0='3DLUCW0V529HOY0J' where id=3; -update noar ti set v0='3DLUCW0V529HOY0J' where id=3; -update noar tt set b0='M7OM2WQ' where id=3; -update noar ti set b0='M7OM2WQ' where id=3; -update noar tt set v0='F3C4D0Z0DC25L6XD3C' where id=3; -update noar ti set v0='F3C4D0Z0DC25L6XD3C' where id=3; -update noar tt set b1='WC41P1WQNRMHIFLDGZWY7OT3A783U' where id=3; -update noar ti set b1='WC41P1WQNRMHIFLDGZWY7OT3A783U' where id=3; -update noar tt set v0='N313TH' where id=3; -update noar ti set v0='N313TH' where id=3; -update noar tt set b2='8WGJ2P1P' where id=3; -update noar ti set b2='8WGJ2P1P' where id=3; -update noar tt set v0='PZ47VRUVV0W21MZVZ' where id=4; -update noar ti set v0='PZ47VRUVV0W21MZVZ' where id=4; -update noar tt set b0='U4Z2' where id=4; -update noar ti set b0='U4Z2' where id=4; -update noar tt set v0='6QVYTY3BBX1KJ7SLW9IU2HQ' where id=4; -update noar ti set v0='6QVYTY3BBX1KJ7SLW9IU2HQ' where id=4; -update noar tt set b1='KKO6A2QFSR1INUQ17' where id=4; -update noar ti set b1='KKO6A2QFSR1INUQ17' where id=4; -update noar tt set v0='TTN9F9KHFXV' where id=4; -update noar ti set v0='TTN9F9KHFXV' where id=4; -update noar tt set b2='NQVCQZYGXAO9NIMGHR0TK' where id=4; -update noar ti set b2='NQVCQZYGXAO9NIMGHR0TK' where id=4; -update noar tt set v0='LEGRO7N8Z69VB80L' where id=5; -update noar ti set v0='LEGRO7N8Z69VB80L' where id=5; -update noar tt set b0='8908XTYODQO0' where id=5; -update noar ti set b0='8908XTYODQO0' where id=5; -update noar tt set v0='SR' where id=5; -update noar ti set v0='SR' where id=5; -update noar tt set b1='QF5SXFVPA98' where id=5; -update noar ti set b1='QF5SXFVPA98' where id=5; -update noar tt set v0='5KNUMGRJ8683IZGDJS' where id=5; -update noar ti set v0='5KNUMGRJ8683IZGDJS' where id=5; -update noar tt set b2='F5CIDVNCIJ4WDXG' where id=5; -update noar ti set b2='F5CIDVNCIJ4WDXG' where id=5; -update noar tt set v0='XY9EYTT5WRX2QXTXDG09CDKMOYB' where id=6; -update noar ti set v0='XY9EYTT5WRX2QXTXDG09CDKMOYB' where id=6; -update noar tt set b0='985BSDRIFUAC70MH11TGFCN3P6' where id=6; -update noar ti set b0='985BSDRIFUAC70MH11TGFCN3P6' where id=6; -update noar tt set v0='AW7EIJ4HNW' where id=6; -update noar ti set v0='AW7EIJ4HNW' where id=6; -update noar tt set b1='X6BFNKFP2VS00SAYLMAJOO' where id=6; -update noar ti set b1='X6BFNKFP2VS00SAYLMAJOO' where id=6; -update noar tt set v0='DNO34BG10QBJO54977AI6M3KBA5VYHQ3' where id=6; -update noar ti set v0='DNO34BG10QBJO54977AI6M3KBA5VYHQ3' where id=6; -update noar tt set b2='SVZDG45A3505DQZ' where id=6; -update noar ti set b2='SVZDG45A3505DQZ' where id=6; -update noar tt set v0='UHJNP7T9KPC72M5HR' where id=7; -update noar ti set v0='UHJNP7T9KPC72M5HR' where id=7; -update noar tt set b0='0SOMHBCZV7T8STTP610F33CF5Z8' where id=7; -update noar ti set b0='0SOMHBCZV7T8STTP610F33CF5Z8' where id=7; -update noar tt set v0='GYWMS3LQIXTVLW8CH70' where id=7; -update noar ti set v0='GYWMS3LQIXTVLW8CH70' where id=7; -update noar tt set b1='PH2A949QDC5CB7YSQ041SBHLDV' where id=7; -update noar ti set b1='PH2A949QDC5CB7YSQ041SBHLDV' where id=7; -update noar tt set v0='DIXSDMFQSHD8' where id=7; -update noar ti set v0='DIXSDMFQSHD8' where id=7; -update noar tt set b2='HFIO8EBDF8BZZRPCZ75VC' where id=7; -update noar ti set b2='HFIO8EBDF8BZZRPCZ75VC' where id=7; -update noar tt set v0='8FQHKJ95U' where id=8; -update noar ti set v0='8FQHKJ95U' where id=8; -update noar tt set b0='BI8A545TJ9PU' where id=8; -update noar ti set b0='BI8A545TJ9PU' where id=8; -update noar tt set v0='WDTW2XQ7OW0UFA5CG' where id=8; -update noar ti set v0='WDTW2XQ7OW0UFA5CG' where id=8; -update noar tt set b1='MW843BW73P9EMAMJUD74TZKXJ9R3TW' where id=8; -update noar ti set b1='MW843BW73P9EMAMJUD74TZKXJ9R3TW' where id=8; -update noar tt set v0='QCP0VM2JKA0Z94CMUZXQ9XWBO1VXYY7' where id=8; -update noar ti set v0='QCP0VM2JKA0Z94CMUZXQ9XWBO1VXYY7' where id=8; -update noar tt set b2='ZGZ4LOJ6ULEM8HH8UBOS9EHYZLQ' where id=8; -update noar ti set b2='ZGZ4LOJ6ULEM8HH8UBOS9EHYZLQ' where id=8; -update noar tt set v0='K6' where id=9; -update noar ti set v0='K6' where id=9; -update noar tt set b0='LPZQ2' where id=9; -update noar ti set b0='LPZQ2' where id=9; -update noar tt set v0='WU8NI46FNT' where id=9; -update noar ti set v0='WU8NI46FNT' where id=9; -update noar tt set b1='ONSU5ENQH5AC3GREDTK1YASH' where id=9; -update noar ti set b1='ONSU5ENQH5AC3GREDTK1YASH' where id=9; -update noar tt set v0='UC8ALF0VFUA981K8D0JMA8FP8' where id=9; -update noar ti set v0='UC8ALF0VFUA981K8D0JMA8FP8' where id=9; -update noar tt set b2='CNBZG6GP3IG' where id=9; -update noar ti set b2='CNBZG6GP3IG' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 mediumblob not null, -b1 tinyblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='TH7UVMIEIKOWKWC6D0HS' where id=1; -update noar ti set v0='TH7UVMIEIKOWKWC6D0HS' where id=1; -update noar tt set b0='8C3Q698B5AZWC69VJ15OBMFDTC' where id=1; -update noar ti set b0='8C3Q698B5AZWC69VJ15OBMFDTC' where id=1; -update noar tt set v0='CS' where id=1; -update noar ti set v0='CS' where id=1; -update noar tt set b1='IM454LYD6X5S2U4XC165Q' where id=1; -update noar ti set b1='IM454LYD6X5S2U4XC165Q' where id=1; -update noar tt set v0='6' where id=1; -update noar ti set v0='6' where id=1; -update noar tt set b2='VYY9WRU623S4B094RHYYW' where id=1; -update noar ti set b2='VYY9WRU623S4B094RHYYW' where id=1; -update noar tt set v0='7D2AA' where id=2; -update noar ti set v0='7D2AA' where id=2; -update noar tt set b0='24UUWTHBBLKGX8OEMYIRTM8S0XGT' where id=2; -update noar ti set b0='24UUWTHBBLKGX8OEMYIRTM8S0XGT' where id=2; -update noar tt set v0='B59P527ZW8R9' where id=2; -update noar ti set v0='B59P527ZW8R9' where id=2; -update noar tt set b1='9UURG9ZUJSQEZ7Z5BSSZYL3OOFB' where id=2; -update noar ti set b1='9UURG9ZUJSQEZ7Z5BSSZYL3OOFB' where id=2; -update noar tt set v0='UDPTMLINC5EE' where id=2; -update noar ti set v0='UDPTMLINC5EE' where id=2; -update noar tt set b2='0WZM2RXM7CXM5NXQ8IG' where id=2; -update noar ti set b2='0WZM2RXM7CXM5NXQ8IG' where id=2; -update noar tt set v0='2' where id=3; -update noar ti set v0='2' where id=3; -update noar tt set b0='XVMVMSX9E' where id=3; -update noar ti set b0='XVMVMSX9E' where id=3; -update noar tt set v0='Q9JPLXDKTN' where id=3; -update noar ti set v0='Q9JPLXDKTN' where id=3; -update noar tt set b1='4CZVQ20XZ1GEP63L4Q8D94VTYAVQ' where id=3; -update noar ti set b1='4CZVQ20XZ1GEP63L4Q8D94VTYAVQ' where id=3; -update noar tt set v0='1SFSJS' where id=3; -update noar ti set v0='1SFSJS' where id=3; -update noar tt set b2='V' where id=3; -update noar ti set b2='V' where id=3; -update noar tt set v0='JN4BJM70W10T15C15EKMVUNGSH' where id=4; -update noar ti set v0='JN4BJM70W10T15C15EKMVUNGSH' where id=4; -update noar tt set b0='LYD6Q1' where id=4; -update noar ti set b0='LYD6Q1' where id=4; -update noar tt set v0='6WJPTLDWMLIX8344U25HMW3XZA' where id=4; -update noar ti set v0='6WJPTLDWMLIX8344U25HMW3XZA' where id=4; -update noar tt set b1='7' where id=4; -update noar ti set b1='7' where id=4; -update noar tt set v0='644EE3PPAXKGXJQ3M8B0XY' where id=4; -update noar ti set v0='644EE3PPAXKGXJQ3M8B0XY' where id=4; -update noar tt set b2='33HIWBVW7ZUN8AM4NVDIA7JCU6OV' where id=4; -update noar ti set b2='33HIWBVW7ZUN8AM4NVDIA7JCU6OV' where id=4; -update noar tt set v0='Y9ETXJCII3MC58' where id=5; -update noar ti set v0='Y9ETXJCII3MC58' where id=5; -update noar tt set b0='0N0HGVJLLBH37CD1VAA8VK5U5TC' where id=5; -update noar ti set b0='0N0HGVJLLBH37CD1VAA8VK5U5TC' where id=5; -update noar tt set v0='AFTZA16CIX1W' where id=5; -update noar ti set v0='AFTZA16CIX1W' where id=5; -update noar tt set b1='4' where id=5; -update noar ti set b1='4' where id=5; -update noar tt set v0='FY75YOMMXG9OLMDD1Z' where id=5; -update noar ti set v0='FY75YOMMXG9OLMDD1Z' where id=5; -update noar tt set b2='4IWO74GU7GZP9PIRRX9US4YW' where id=5; -update noar ti set b2='4IWO74GU7GZP9PIRRX9US4YW' where id=5; -update noar tt set v0='M9A' where id=6; -update noar ti set v0='M9A' where id=6; -update noar tt set b0='U' where id=6; -update noar ti set b0='U' where id=6; -update noar tt set v0='I3A0RXR95B2R5DLSSG5' where id=6; -update noar ti set v0='I3A0RXR95B2R5DLSSG5' where id=6; -update noar tt set b1='W5MTAI14B4O7LJVMP1H' where id=6; -update noar ti set b1='W5MTAI14B4O7LJVMP1H' where id=6; -update noar tt set v0='U' where id=6; -update noar ti set v0='U' where id=6; -update noar tt set b2='81Z1R' where id=6; -update noar ti set b2='81Z1R' where id=6; -update noar tt set v0='Z3HU22K7BN64IBJTE2' where id=7; -update noar ti set v0='Z3HU22K7BN64IBJTE2' where id=7; -update noar tt set b0='2QFGR9DI' where id=7; -update noar ti set b0='2QFGR9DI' where id=7; -update noar tt set v0='W64Y4HRF4XMQ2O' where id=7; -update noar ti set v0='W64Y4HRF4XMQ2O' where id=7; -update noar tt set b1='7NKKHVW9SNPP6OJZH1G' where id=7; -update noar ti set b1='7NKKHVW9SNPP6OJZH1G' where id=7; -update noar tt set v0='U6LF1' where id=7; -update noar ti set v0='U6LF1' where id=7; -update noar tt set b2='X22XVF5SE0NXWLLIII8S9UH79JUMT' where id=7; -update noar ti set b2='X22XVF5SE0NXWLLIII8S9UH79JUMT' where id=7; -update noar tt set v0='TMMVCKDIVAS4P' where id=8; -update noar ti set v0='TMMVCKDIVAS4P' where id=8; -update noar tt set b0='FGX8YR7MD9T68' where id=8; -update noar ti set b0='FGX8YR7MD9T68' where id=8; -update noar tt set v0='7C01B' where id=8; -update noar ti set v0='7C01B' where id=8; -update noar tt set b1='D423L38DIHGBLZWNY71P66VH5BMNOMG' where id=8; -update noar ti set b1='D423L38DIHGBLZWNY71P66VH5BMNOMG' where id=8; -update noar tt set v0='EJGNO9SXMFSG0FMB0VVB' where id=8; -update noar ti set v0='EJGNO9SXMFSG0FMB0VVB' where id=8; -update noar tt set b2='AA32BL9UJBHRJ3T' where id=8; -update noar ti set b2='AA32BL9UJBHRJ3T' where id=8; -update noar tt set v0='4UST1' where id=9; -update noar ti set v0='4UST1' where id=9; -update noar tt set b0='8U6X4AWR4QC7DVRGN5PXIY9E5' where id=9; -update noar ti set b0='8U6X4AWR4QC7DVRGN5PXIY9E5' where id=9; -update noar tt set v0='IK9INHJ4GI46WRT9F89CO56CLJ1' where id=9; -update noar ti set v0='IK9INHJ4GI46WRT9F89CO56CLJ1' where id=9; -update noar tt set b1='J7BM4P3M5UAOWETNSNKM9G6FQAIB' where id=9; -update noar ti set b1='J7BM4P3M5UAOWETNSNKM9G6FQAIB' where id=9; -update noar tt set v0='E8GIZWM0T' where id=9; -update noar ti set v0='E8GIZWM0T' where id=9; -update noar tt set b2='0342DNAD3R3VQ0FSG' where id=9; -update noar ti set b2='0342DNAD3R3VQ0FSG' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 mediumblob not null, -b1 tinyblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='6KVFIRTZ354LYTPXK2FM6F97F' where id=1; -update noar ti set v0='6KVFIRTZ354LYTPXK2FM6F97F' where id=1; -update noar tt set b0='4LMHLFRN56JGAYHAS0JBO2UZPX72NSA' where id=1; -update noar ti set b0='4LMHLFRN56JGAYHAS0JBO2UZPX72NSA' where id=1; -update noar tt set v0='XRZO7583' where id=1; -update noar ti set v0='XRZO7583' where id=1; -update noar tt set b1='TP97NN39JN5O54' where id=1; -update noar ti set b1='TP97NN39JN5O54' where id=1; -update noar tt set v0='M7NQMI3AKMZLAFMZYCRBUP' where id=1; -update noar ti set v0='M7NQMI3AKMZLAFMZYCRBUP' where id=1; -update noar tt set b2='2JT09K00UUG5Y2' where id=1; -update noar ti set b2='2JT09K00UUG5Y2' where id=1; -update noar tt set v0='QQDS1' where id=2; -update noar ti set v0='QQDS1' where id=2; -update noar tt set b0='14YAZ0UDWUR1PWNWF5AABRS' where id=2; -update noar ti set b0='14YAZ0UDWUR1PWNWF5AABRS' where id=2; -update noar tt set v0='2HPFLNOI' where id=2; -update noar ti set v0='2HPFLNOI' where id=2; -update noar tt set b1='VW' where id=2; -update noar ti set b1='VW' where id=2; -update noar tt set v0='D7EDMNGL5HOJ7QZGUSWKBZ1VQMVKDW' where id=2; -update noar ti set v0='D7EDMNGL5HOJ7QZGUSWKBZ1VQMVKDW' where id=2; -update noar tt set b2='TKQHZBAB7UII22N' where id=2; -update noar ti set b2='TKQHZBAB7UII22N' where id=2; -update noar tt set v0='GATB8QG4K12HS44HIJ54R8W' where id=3; -update noar ti set v0='GATB8QG4K12HS44HIJ54R8W' where id=3; -update noar tt set b0='N8R' where id=3; -update noar ti set b0='N8R' where id=3; -update noar tt set v0='OAZT' where id=3; -update noar ti set v0='OAZT' where id=3; -update noar tt set b1='1V1HVIW6735HX67NZTU' where id=3; -update noar ti set b1='1V1HVIW6735HX67NZTU' where id=3; -update noar tt set v0='A4Q3RW6RG7' where id=3; -update noar ti set v0='A4Q3RW6RG7' where id=3; -update noar tt set b2='X33R0KLS8Z9GG4P25FY7O279GN1Y' where id=3; -update noar ti set b2='X33R0KLS8Z9GG4P25FY7O279GN1Y' where id=3; -update noar tt set v0='CM5TSXRMW1B0ONLI9KYOUGC' where id=4; -update noar ti set v0='CM5TSXRMW1B0ONLI9KYOUGC' where id=4; -update noar tt set b0='GV7U3UZBN8OPMV3ZFQT7CH3RVVHQG' where id=4; -update noar ti set b0='GV7U3UZBN8OPMV3ZFQT7CH3RVVHQG' where id=4; -update noar tt set v0='LOIQWJJ9808COO0NY78QD9OISPK0BW' where id=4; -update noar ti set v0='LOIQWJJ9808COO0NY78QD9OISPK0BW' where id=4; -update noar tt set b1='SQR93' where id=4; -update noar ti set b1='SQR93' where id=4; -update noar tt set v0='QGCI76U34C9FB6' where id=4; -update noar ti set v0='QGCI76U34C9FB6' where id=4; -update noar tt set b2='6KUIT' where id=4; -update noar ti set b2='6KUIT' where id=4; -update noar tt set v0='3QT0K8O' where id=5; -update noar ti set v0='3QT0K8O' where id=5; -update noar tt set b0='SQDLGBEULRU2EFQ440' where id=5; -update noar ti set b0='SQDLGBEULRU2EFQ440' where id=5; -update noar tt set v0='DTD1RKDYV4KC1' where id=5; -update noar ti set v0='DTD1RKDYV4KC1' where id=5; -update noar tt set b1='X0GFUQGAL5WHK' where id=5; -update noar ti set b1='X0GFUQGAL5WHK' where id=5; -update noar tt set v0='B8H6KHRET1P5XKIQ3CCHCTIZTAUA2' where id=5; -update noar ti set v0='B8H6KHRET1P5XKIQ3CCHCTIZTAUA2' where id=5; -update noar tt set b2='VATYHMH8N7A2877NMEU2JFB891U' where id=5; -update noar ti set b2='VATYHMH8N7A2877NMEU2JFB891U' where id=5; -update noar tt set v0='67HUVP3PJU0N' where id=6; -update noar ti set v0='67HUVP3PJU0N' where id=6; -update noar tt set b0='HUPD22HZD' where id=6; -update noar ti set b0='HUPD22HZD' where id=6; -update noar tt set v0='J3P70REANLB2I348DELB20PO' where id=6; -update noar ti set v0='J3P70REANLB2I348DELB20PO' where id=6; -update noar tt set b1='3UFYMMM8RQP530AU08RZEF716TDSH4' where id=6; -update noar ti set b1='3UFYMMM8RQP530AU08RZEF716TDSH4' where id=6; -update noar tt set v0='LD' where id=6; -update noar ti set v0='LD' where id=6; -update noar tt set b2='KJ53P' where id=6; -update noar ti set b2='KJ53P' where id=6; -update noar tt set v0='I' where id=7; -update noar ti set v0='I' where id=7; -update noar tt set b0='RC4COSJJY' where id=7; -update noar ti set b0='RC4COSJJY' where id=7; -update noar tt set v0='QJ3YEZ4BYIVWBN3UCNT3QJ5BUZ3' where id=7; -update noar ti set v0='QJ3YEZ4BYIVWBN3UCNT3QJ5BUZ3' where id=7; -update noar tt set b1='II1L6B1V0MG2B24F4S0H0FDY' where id=7; -update noar ti set b1='II1L6B1V0MG2B24F4S0H0FDY' where id=7; -update noar tt set v0='9713QXUKOK3UME' where id=7; -update noar ti set v0='9713QXUKOK3UME' where id=7; -update noar tt set b2='CTN6M9KSTBDPI3B6QOSFJYQ' where id=7; -update noar ti set b2='CTN6M9KSTBDPI3B6QOSFJYQ' where id=7; -update noar tt set v0='SOU5QQ2PUUR9FV7QCZ' where id=8; -update noar ti set v0='SOU5QQ2PUUR9FV7QCZ' where id=8; -update noar tt set b0='Z6P5' where id=8; -update noar ti set b0='Z6P5' where id=8; -update noar tt set v0='LYFA21YOE9Y1Q484CH6WJK' where id=8; -update noar ti set v0='LYFA21YOE9Y1Q484CH6WJK' where id=8; -update noar tt set b1='ZQJBW970U8KO82' where id=8; -update noar ti set b1='ZQJBW970U8KO82' where id=8; -update noar tt set v0='Z9LKVD62S3B7ZIFL' where id=8; -update noar ti set v0='Z9LKVD62S3B7ZIFL' where id=8; -update noar tt set b2='GPGBBO8B1R2WG5MGSZGC2P28' where id=8; -update noar ti set b2='GPGBBO8B1R2WG5MGSZGC2P28' where id=8; -update noar tt set v0='0949Y6VFL63EZGIGDDZSXE4OUNRUTL0C' where id=9; -update noar ti set v0='0949Y6VFL63EZGIGDDZSXE4OUNRUTL0C' where id=9; -update noar tt set b0='NO' where id=9; -update noar ti set b0='NO' where id=9; -update noar tt set v0='3SXZAU2MA481SH8XBX7O569DFSFX' where id=9; -update noar ti set v0='3SXZAU2MA481SH8XBX7O569DFSFX' where id=9; -update noar tt set b1='Q333A2Q8' where id=9; -update noar ti set b1='Q333A2Q8' where id=9; -update noar tt set v0='NLLGJR235L' where id=9; -update noar ti set v0='NLLGJR235L' where id=9; -update noar tt set b2='4SM7WEFTVMSNRPHZJOBF3BFZ8EYVAO' where id=9; -update noar ti set b2='4SM7WEFTVMSNRPHZJOBF3BFZ8EYVAO' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 mediumblob null, -b1 tinyblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='GIAIMRY' where id=1; -update noar ti set v0='GIAIMRY' where id=1; -update noar tt set b0='MQ2R6P6CYS1GOBM0' where id=1; -update noar ti set b0='MQ2R6P6CYS1GOBM0' where id=1; -update noar tt set v0='J6TX9Z74YL3XLT1BVL4QOM2NIU' where id=1; -update noar ti set v0='J6TX9Z74YL3XLT1BVL4QOM2NIU' where id=1; -update noar tt set b1='V8S21JGOUIJD0J66VXD68FM0T3I' where id=1; -update noar ti set b1='V8S21JGOUIJD0J66VXD68FM0T3I' where id=1; -update noar tt set v0='7LPDBCFNA70OE97CT' where id=1; -update noar ti set v0='7LPDBCFNA70OE97CT' where id=1; -update noar tt set b2='ZR69U74BCO' where id=1; -update noar ti set b2='ZR69U74BCO' where id=1; -update noar tt set v0='UOKZD0DDO3E49RAFA8OR3HRKLO8PSRSV' where id=2; -update noar ti set v0='UOKZD0DDO3E49RAFA8OR3HRKLO8PSRSV' where id=2; -update noar tt set b0='F3XBXIPQ48QMUMW8S6JI8JIU5' where id=2; -update noar ti set b0='F3XBXIPQ48QMUMW8S6JI8JIU5' where id=2; -update noar tt set v0='0GEQQBJQ2MQEEBTEPK2' where id=2; -update noar ti set v0='0GEQQBJQ2MQEEBTEPK2' where id=2; -update noar tt set b1='M5JGSJWRAZIVHTZNPXIELWA' where id=2; -update noar ti set b1='M5JGSJWRAZIVHTZNPXIELWA' where id=2; -update noar tt set v0='VWVXBHKJL68XCP0W8BY' where id=2; -update noar ti set v0='VWVXBHKJL68XCP0W8BY' where id=2; -update noar tt set b2='RL4R431VDKQHBN1' where id=2; -update noar ti set b2='RL4R431VDKQHBN1' where id=2; -update noar tt set v0='USCYELR8BY07HI1R6' where id=3; -update noar ti set v0='USCYELR8BY07HI1R6' where id=3; -update noar tt set b0='QRFHDFW' where id=3; -update noar ti set b0='QRFHDFW' where id=3; -update noar tt set v0='I8FDSW3GO5MX76024G1TSNOGV3FXK' where id=3; -update noar ti set v0='I8FDSW3GO5MX76024G1TSNOGV3FXK' where id=3; -update noar tt set b1='U3NLW608YCBIJO6ZO7Y8HO' where id=3; -update noar ti set b1='U3NLW608YCBIJO6ZO7Y8HO' where id=3; -update noar tt set v0='VJQW8B0TRHU' where id=3; -update noar ti set v0='VJQW8B0TRHU' where id=3; -update noar tt set b2='19EL7ZQELWN' where id=3; -update noar ti set b2='19EL7ZQELWN' where id=3; -update noar tt set v0='KQ9WZM60583O3QP' where id=4; -update noar ti set v0='KQ9WZM60583O3QP' where id=4; -update noar tt set b0='XMJSL2ZPKOTM0996LF' where id=4; -update noar ti set b0='XMJSL2ZPKOTM0996LF' where id=4; -update noar tt set v0='4BPGHZWRCAYJBF8' where id=4; -update noar ti set v0='4BPGHZWRCAYJBF8' where id=4; -update noar tt set b1='L5E014TG7U5KZ7F7LC' where id=4; -update noar ti set b1='L5E014TG7U5KZ7F7LC' where id=4; -update noar tt set v0='PXKJIV0140NLLQDCR830INOHTB' where id=4; -update noar ti set v0='PXKJIV0140NLLQDCR830INOHTB' where id=4; -update noar tt set b2='RW4C' where id=4; -update noar ti set b2='RW4C' where id=4; -update noar tt set v0='3RWBK0BJY1PRLOJZZ' where id=5; -update noar ti set v0='3RWBK0BJY1PRLOJZZ' where id=5; -update noar tt set b0='A' where id=5; -update noar ti set b0='A' where id=5; -update noar tt set v0='SK8YEBOP1HU601TMMF5SMOQ9' where id=5; -update noar ti set v0='SK8YEBOP1HU601TMMF5SMOQ9' where id=5; -update noar tt set b1='INR0H0' where id=5; -update noar ti set b1='INR0H0' where id=5; -update noar tt set v0='JRB1J3N0' where id=5; -update noar ti set v0='JRB1J3N0' where id=5; -update noar tt set b2='NBVXYTYWGLIGGJHRA2C0' where id=5; -update noar ti set b2='NBVXYTYWGLIGGJHRA2C0' where id=5; -update noar tt set v0='RQLW' where id=6; -update noar ti set v0='RQLW' where id=6; -update noar tt set b0='SSLIJIZW3I8Z13LC2RM577' where id=6; -update noar ti set b0='SSLIJIZW3I8Z13LC2RM577' where id=6; -update noar tt set v0='2BO5N3W8WI4N6OME2MKD1NC' where id=6; -update noar ti set v0='2BO5N3W8WI4N6OME2MKD1NC' where id=6; -update noar tt set b1='IGAKA851VXVNQNPZH5DWRH65' where id=6; -update noar ti set b1='IGAKA851VXVNQNPZH5DWRH65' where id=6; -update noar tt set v0='NSMUJPVQC' where id=6; -update noar ti set v0='NSMUJPVQC' where id=6; -update noar tt set b2='ID5IN1AB2LDFAEUR2G' where id=6; -update noar ti set b2='ID5IN1AB2LDFAEUR2G' where id=6; -update noar tt set v0='RMO' where id=7; -update noar ti set v0='RMO' where id=7; -update noar tt set b0='5Y3J41T33RPMQ' where id=7; -update noar ti set b0='5Y3J41T33RPMQ' where id=7; -update noar tt set v0='1' where id=7; -update noar ti set v0='1' where id=7; -update noar tt set b1='7UNXD8539M1AQVAKJ2K5XNQ' where id=7; -update noar ti set b1='7UNXD8539M1AQVAKJ2K5XNQ' where id=7; -update noar tt set v0='02UNVRHFT9MLHAY6J8' where id=7; -update noar ti set v0='02UNVRHFT9MLHAY6J8' where id=7; -update noar tt set b2='3Z6EL36QQSE8CDT8' where id=7; -update noar ti set b2='3Z6EL36QQSE8CDT8' where id=7; -update noar tt set v0='SZCHT9NJLJN2A7N7XZYF1RL6' where id=8; -update noar ti set v0='SZCHT9NJLJN2A7N7XZYF1RL6' where id=8; -update noar tt set b0='43LZI9FW6X7VK33RMGFXX56V' where id=8; -update noar ti set b0='43LZI9FW6X7VK33RMGFXX56V' where id=8; -update noar tt set v0='3ZLCOU6F7W7O7S3C5HJPL51QM0H1M' where id=8; -update noar ti set v0='3ZLCOU6F7W7O7S3C5HJPL51QM0H1M' where id=8; -update noar tt set b1='I4YIYKNQBOK8T1OOGR5' where id=8; -update noar ti set b1='I4YIYKNQBOK8T1OOGR5' where id=8; -update noar tt set v0='KCEW67CD9YUS' where id=8; -update noar ti set v0='KCEW67CD9YUS' where id=8; -update noar tt set b2='Q75FX4L9CUPC8B' where id=8; -update noar ti set b2='Q75FX4L9CUPC8B' where id=8; -update noar tt set v0='PWEUDK6CSU7SMTFE8MHRDRI6' where id=9; -update noar ti set v0='PWEUDK6CSU7SMTFE8MHRDRI6' where id=9; -update noar tt set b0='CN46TH3KF31A81KW0Q2BNXGRE5' where id=9; -update noar ti set b0='CN46TH3KF31A81KW0Q2BNXGRE5' where id=9; -update noar tt set v0='6FSSBVOPALV64D' where id=9; -update noar ti set v0='6FSSBVOPALV64D' where id=9; -update noar tt set b1='2BHVYYA53WPZY8R' where id=9; -update noar ti set b1='2BHVYYA53WPZY8R' where id=9; -update noar tt set v0='KN2OPHKMAK3AKEEE1CV0E5B8L' where id=9; -update noar ti set v0='KN2OPHKMAK3AKEEE1CV0E5B8L' where id=9; -update noar tt set b2='I847C7HSS26WCT' where id=9; -update noar ti set b2='I847C7HSS26WCT' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 mediumblob null, -b1 tinyblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='QH6K36CVT4MOFWFPT7ASIGBMTQ' where id=1; -update noar ti set v0='QH6K36CVT4MOFWFPT7ASIGBMTQ' where id=1; -update noar tt set b0='KYWWIJPJPJFC740FUSHV13C' where id=1; -update noar ti set b0='KYWWIJPJPJFC740FUSHV13C' where id=1; -update noar tt set v0='BVIR3ZIFIK5LQPP5L8XE94CFQX' where id=1; -update noar ti set v0='BVIR3ZIFIK5LQPP5L8XE94CFQX' where id=1; -update noar tt set b1='BHDWN391SU' where id=1; -update noar ti set b1='BHDWN391SU' where id=1; -update noar tt set v0='YD1V8YJY9FJ0LAO0NGKBLQ67CVWCGW' where id=1; -update noar ti set v0='YD1V8YJY9FJ0LAO0NGKBLQ67CVWCGW' where id=1; -update noar tt set b2='L5QS406J4LPEKBWBD' where id=1; -update noar ti set b2='L5QS406J4LPEKBWBD' where id=1; -update noar tt set v0='1AC0DQ33PWSR' where id=2; -update noar ti set v0='1AC0DQ33PWSR' where id=2; -update noar tt set b0='43Q4CLY7QFSV6G4W84CBHJGX' where id=2; -update noar ti set b0='43Q4CLY7QFSV6G4W84CBHJGX' where id=2; -update noar tt set v0='YL5YNZST4U2HM02KAEL344B' where id=2; -update noar ti set v0='YL5YNZST4U2HM02KAEL344B' where id=2; -update noar tt set b1='J' where id=2; -update noar ti set b1='J' where id=2; -update noar tt set v0='NEWUL' where id=2; -update noar ti set v0='NEWUL' where id=2; -update noar tt set b2='2O' where id=2; -update noar ti set b2='2O' where id=2; -update noar tt set v0='I2OMK9JODMVRJFVXVZ0C82MOWZ8MYS1A' where id=3; -update noar ti set v0='I2OMK9JODMVRJFVXVZ0C82MOWZ8MYS1A' where id=3; -update noar tt set b0='OJRCJGW' where id=3; -update noar ti set b0='OJRCJGW' where id=3; -update noar tt set v0='JEE1YC2ZN0J71DUVEH' where id=3; -update noar ti set v0='JEE1YC2ZN0J71DUVEH' where id=3; -update noar tt set b1='3QYLUDZR3B18RDIH7B7YEBYJ4W8HJ' where id=3; -update noar ti set b1='3QYLUDZR3B18RDIH7B7YEBYJ4W8HJ' where id=3; -update noar tt set v0='S594BSI16QSX4W4G' where id=3; -update noar ti set v0='S594BSI16QSX4W4G' where id=3; -update noar tt set b2='QP6RCNTURLSL' where id=3; -update noar ti set b2='QP6RCNTURLSL' where id=3; -update noar tt set v0='T' where id=4; -update noar ti set v0='T' where id=4; -update noar tt set b0='5' where id=4; -update noar ti set b0='5' where id=4; -update noar tt set v0='OOJ0IIMQ914CNHNC6QG2BG423LEW49' where id=4; -update noar ti set v0='OOJ0IIMQ914CNHNC6QG2BG423LEW49' where id=4; -update noar tt set b1='DAKMMKFRPIENJI2' where id=4; -update noar ti set b1='DAKMMKFRPIENJI2' where id=4; -update noar tt set v0='V17OVNSOEHPEGA81' where id=4; -update noar ti set v0='V17OVNSOEHPEGA81' where id=4; -update noar tt set b2='P6Q0' where id=4; -update noar ti set b2='P6Q0' where id=4; -update noar tt set v0='JDWALEQEYOSUHM' where id=5; -update noar ti set v0='JDWALEQEYOSUHM' where id=5; -update noar tt set b0='8UX4O6B' where id=5; -update noar ti set b0='8UX4O6B' where id=5; -update noar tt set v0='D5IUH8VXUFCD2A3DRXL39' where id=5; -update noar ti set v0='D5IUH8VXUFCD2A3DRXL39' where id=5; -update noar tt set b1='E5GK5A4UOAFU21JAJFMIJ4' where id=5; -update noar ti set b1='E5GK5A4UOAFU21JAJFMIJ4' where id=5; -update noar tt set v0='37G6QITT8UWJAQSPO6W9QMJLHHF74KB3' where id=5; -update noar ti set v0='37G6QITT8UWJAQSPO6W9QMJLHHF74KB3' where id=5; -update noar tt set b2='WXOLDPZBH7O6WE1A54RUJ3QVYKT8E' where id=5; -update noar ti set b2='WXOLDPZBH7O6WE1A54RUJ3QVYKT8E' where id=5; -update noar tt set v0='C8VRMW3LVHOC5S4' where id=6; -update noar ti set v0='C8VRMW3LVHOC5S4' where id=6; -update noar tt set b0='0YV87CFU2XYDSHJV1BM0M160BKF4' where id=6; -update noar ti set b0='0YV87CFU2XYDSHJV1BM0M160BKF4' where id=6; -update noar tt set v0='KO6V0ME4R2PFB0J0W8I5V2X4RL5REZLU' where id=6; -update noar ti set v0='KO6V0ME4R2PFB0J0W8I5V2X4RL5REZLU' where id=6; -update noar tt set b1='XXJ4R8IY69HZFWEP8VT1NNY' where id=6; -update noar ti set b1='XXJ4R8IY69HZFWEP8VT1NNY' where id=6; -update noar tt set v0='TWOV' where id=6; -update noar ti set v0='TWOV' where id=6; -update noar tt set b2='0EMX3IAEC2NFEZP' where id=6; -update noar ti set b2='0EMX3IAEC2NFEZP' where id=6; -update noar tt set v0='C6OJ2A' where id=7; -update noar ti set v0='C6OJ2A' where id=7; -update noar tt set b0='CQSIZ3GYCN3QOEQUC0B558PUM4NRPAG9' where id=7; -update noar ti set b0='CQSIZ3GYCN3QOEQUC0B558PUM4NRPAG9' where id=7; -update noar tt set v0='O0TZ6YK6Y7Y5WL7DGB7BHGAJX0N' where id=7; -update noar ti set v0='O0TZ6YK6Y7Y5WL7DGB7BHGAJX0N' where id=7; -update noar tt set b1='KAKJT3PO15XEAX6H06XYSASU8GY' where id=7; -update noar ti set b1='KAKJT3PO15XEAX6H06XYSASU8GY' where id=7; -update noar tt set v0='BSEVL' where id=7; -update noar ti set v0='BSEVL' where id=7; -update noar tt set b2='8YZUJYMYW' where id=7; -update noar ti set b2='8YZUJYMYW' where id=7; -update noar tt set v0='BSTI1E' where id=8; -update noar ti set v0='BSTI1E' where id=8; -update noar tt set b0='KLN0LA8' where id=8; -update noar ti set b0='KLN0LA8' where id=8; -update noar tt set v0='4EKCYHA04LRFBWGN6Z' where id=8; -update noar ti set v0='4EKCYHA04LRFBWGN6Z' where id=8; -update noar tt set b1='EZZRX914WC5F7V26A6TESEUQD' where id=8; -update noar ti set b1='EZZRX914WC5F7V26A6TESEUQD' where id=8; -update noar tt set v0='3M9BPW5V46K6XHA' where id=8; -update noar ti set v0='3M9BPW5V46K6XHA' where id=8; -update noar tt set b2='TSKCIU5Y5N6KYRPKDRJQ19HBVYS3C' where id=8; -update noar ti set b2='TSKCIU5Y5N6KYRPKDRJQ19HBVYS3C' where id=8; -update noar tt set v0='0LXC71ITYRX7UFGLNUGRWWVHG19B' where id=9; -update noar ti set v0='0LXC71ITYRX7UFGLNUGRWWVHG19B' where id=9; -update noar tt set b0='INH4GNQWU19CZCONEVI2X3BMH4' where id=9; -update noar ti set b0='INH4GNQWU19CZCONEVI2X3BMH4' where id=9; -update noar tt set v0='YEMOKFWHBEO9K' where id=9; -update noar ti set v0='YEMOKFWHBEO9K' where id=9; -update noar tt set b1='2CWV7QJWYPW1VP7SWH3SI3I' where id=9; -update noar ti set b1='2CWV7QJWYPW1VP7SWH3SI3I' where id=9; -update noar tt set v0='R1MN2YW8QMAVWHW1' where id=9; -update noar ti set v0='R1MN2YW8QMAVWHW1' where id=9; -update noar tt set b2='9WUD29' where id=9; -update noar ti set b2='9WUD29' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 mediumblob not null, -b1 tinyblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='B5T8' where id=1; -update noar ti set v0='B5T8' where id=1; -update noar tt set b0='CO660TAJODWYREKTIL8MWIW5P2AE87' where id=1; -update noar ti set b0='CO660TAJODWYREKTIL8MWIW5P2AE87' where id=1; -update noar tt set v0='T804NWS769TX4' where id=1; -update noar ti set v0='T804NWS769TX4' where id=1; -update noar tt set b1='MRIT7' where id=1; -update noar ti set b1='MRIT7' where id=1; -update noar tt set v0='P965465JJWB3B0OGMUKJYERD6A9JJQWH' where id=1; -update noar ti set v0='P965465JJWB3B0OGMUKJYERD6A9JJQWH' where id=1; -update noar tt set b2='L3VSL' where id=1; -update noar ti set b2='L3VSL' where id=1; -update noar tt set v0='A0LGKO8Q8K64CBGE41CO3QP0' where id=2; -update noar ti set v0='A0LGKO8Q8K64CBGE41CO3QP0' where id=2; -update noar tt set b0='FOWFJ0K0T2PUQ1RXKBPZFXUK1R2' where id=2; -update noar ti set b0='FOWFJ0K0T2PUQ1RXKBPZFXUK1R2' where id=2; -update noar tt set v0='C9H904Q' where id=2; -update noar ti set v0='C9H904Q' where id=2; -update noar tt set b1='G5VF3NYLN7C1VWF80P348IWXXZD9' where id=2; -update noar ti set b1='G5VF3NYLN7C1VWF80P348IWXXZD9' where id=2; -update noar tt set v0='Q8W5VA3JQ7ITF899ATZUA6304' where id=2; -update noar ti set v0='Q8W5VA3JQ7ITF899ATZUA6304' where id=2; -update noar tt set b2='F' where id=2; -update noar ti set b2='F' where id=2; -update noar tt set v0='PD2ERK4ZXXWISLGO24E18P' where id=3; -update noar ti set v0='PD2ERK4ZXXWISLGO24E18P' where id=3; -update noar tt set b0='LA67KMQ5B65VQYOWE0B' where id=3; -update noar ti set b0='LA67KMQ5B65VQYOWE0B' where id=3; -update noar tt set v0='PWN6NKI9Z4T' where id=3; -update noar ti set v0='PWN6NKI9Z4T' where id=3; -update noar tt set b1='F7Y2IVQB3LHPM23A' where id=3; -update noar ti set b1='F7Y2IVQB3LHPM23A' where id=3; -update noar tt set v0='SVJ' where id=3; -update noar ti set v0='SVJ' where id=3; -update noar tt set b2='UF7DA6ZNGPMGEV3FKZ1BSIYF6EQH5BM' where id=3; -update noar ti set b2='UF7DA6ZNGPMGEV3FKZ1BSIYF6EQH5BM' where id=3; -update noar tt set v0='KIDNWJM4D9' where id=4; -update noar ti set v0='KIDNWJM4D9' where id=4; -update noar tt set b0='E747G3' where id=4; -update noar ti set b0='E747G3' where id=4; -update noar tt set v0='Z4H3CQ0FE1H11JIZAIBDLMFDCJP55G' where id=4; -update noar ti set v0='Z4H3CQ0FE1H11JIZAIBDLMFDCJP55G' where id=4; -update noar tt set b1='524HM3B33V0O69AHSIKA' where id=4; -update noar ti set b1='524HM3B33V0O69AHSIKA' where id=4; -update noar tt set v0='VOL4RLSSP0HVD60WPW894AD34RB9' where id=4; -update noar ti set v0='VOL4RLSSP0HVD60WPW894AD34RB9' where id=4; -update noar tt set b2='4' where id=4; -update noar ti set b2='4' where id=4; -update noar tt set v0='9TE1U5U9NFQMZFHSR1R' where id=5; -update noar ti set v0='9TE1U5U9NFQMZFHSR1R' where id=5; -update noar tt set b0='X7UTGX47OC2A2F' where id=5; -update noar ti set b0='X7UTGX47OC2A2F' where id=5; -update noar tt set v0='S4CAA2KY4ZJJF5KA23R9GNEKK0IOG' where id=5; -update noar ti set v0='S4CAA2KY4ZJJF5KA23R9GNEKK0IOG' where id=5; -update noar tt set b1='94VNW042WE6Q77VSK57PCZTODOHJH' where id=5; -update noar ti set b1='94VNW042WE6Q77VSK57PCZTODOHJH' where id=5; -update noar tt set v0='7QHFHI6RCUBYZV' where id=5; -update noar ti set v0='7QHFHI6RCUBYZV' where id=5; -update noar tt set b2='TMNH1U3HUJYYF3N09S7W24' where id=5; -update noar ti set b2='TMNH1U3HUJYYF3N09S7W24' where id=5; -update noar tt set v0='BTB2NO9491ICN5IP8WZJMSLU6XP' where id=6; -update noar ti set v0='BTB2NO9491ICN5IP8WZJMSLU6XP' where id=6; -update noar tt set b0='76IMRVZPAVNFZ8UMXV' where id=6; -update noar ti set b0='76IMRVZPAVNFZ8UMXV' where id=6; -update noar tt set v0='7SZV42' where id=6; -update noar ti set v0='7SZV42' where id=6; -update noar tt set b1='E7J6TRPPXVE7O0GNXKIJF' where id=6; -update noar ti set b1='E7J6TRPPXVE7O0GNXKIJF' where id=6; -update noar tt set v0='E2O7AJASI' where id=6; -update noar ti set v0='E2O7AJASI' where id=6; -update noar tt set b2='DJXDN1UEJADMCZHZ9ID94YKV63RXITE' where id=6; -update noar ti set b2='DJXDN1UEJADMCZHZ9ID94YKV63RXITE' where id=6; -update noar tt set v0='MLRH7GDXVXLN1OC' where id=7; -update noar ti set v0='MLRH7GDXVXLN1OC' where id=7; -update noar tt set b0='DUACNJ2UV7AF4SK1SIE9PV' where id=7; -update noar ti set b0='DUACNJ2UV7AF4SK1SIE9PV' where id=7; -update noar tt set v0='A4DXTA3SN6ZT2A8B0YR69YKW57DBM' where id=7; -update noar ti set v0='A4DXTA3SN6ZT2A8B0YR69YKW57DBM' where id=7; -update noar tt set b1='EOJR5YXUNWA1R' where id=7; -update noar ti set b1='EOJR5YXUNWA1R' where id=7; -update noar tt set v0='D0LQEI2S' where id=7; -update noar ti set v0='D0LQEI2S' where id=7; -update noar tt set b2='QVNAUUOJESJ9' where id=7; -update noar ti set b2='QVNAUUOJESJ9' where id=7; -update noar tt set v0='L9BL' where id=8; -update noar ti set v0='L9BL' where id=8; -update noar tt set b0='1IN4MACQGCPUZFK5JB' where id=8; -update noar ti set b0='1IN4MACQGCPUZFK5JB' where id=8; -update noar tt set v0='4KS0T9XZOZUR73ZL4DDI4MSZZ' where id=8; -update noar ti set v0='4KS0T9XZOZUR73ZL4DDI4MSZZ' where id=8; -update noar tt set b1='C9QX5Q83QEABX0KA1Z9U' where id=8; -update noar ti set b1='C9QX5Q83QEABX0KA1Z9U' where id=8; -update noar tt set v0='87674KIIE7PMNBVEKFZCCB0Q3' where id=8; -update noar ti set v0='87674KIIE7PMNBVEKFZCCB0Q3' where id=8; -update noar tt set b2='90CJOZW8OSS' where id=8; -update noar ti set b2='90CJOZW8OSS' where id=8; -update noar tt set v0='3RKWDA8MDQLJ4OJFXUEM7KK7EBPTM74F' where id=9; -update noar ti set v0='3RKWDA8MDQLJ4OJFXUEM7KK7EBPTM74F' where id=9; -update noar tt set b0='YKBU49YBLGBEFCE' where id=9; -update noar ti set b0='YKBU49YBLGBEFCE' where id=9; -update noar tt set v0='EWEX6U9JT' where id=9; -update noar ti set v0='EWEX6U9JT' where id=9; -update noar tt set b1='PEYDDLZ4BY3958T5N44F' where id=9; -update noar ti set b1='PEYDDLZ4BY3958T5N44F' where id=9; -update noar tt set v0='UMJGWE19' where id=9; -update noar ti set v0='UMJGWE19' where id=9; -update noar tt set b2='URP014FRP0VT' where id=9; -update noar ti set b2='URP014FRP0VT' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 mediumblob not null, -b1 tinyblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='6ICUD1RCNYUXD5G8QH2U' where id=1; -update noar ti set v0='6ICUD1RCNYUXD5G8QH2U' where id=1; -update noar tt set b0='T1' where id=1; -update noar ti set b0='T1' where id=1; -update noar tt set v0='TK6WHZBR7W2AX7GQ9Y6HVN0Z7' where id=1; -update noar ti set v0='TK6WHZBR7W2AX7GQ9Y6HVN0Z7' where id=1; -update noar tt set b1='6018X9W9Z9MCMN3H6' where id=1; -update noar ti set b1='6018X9W9Z9MCMN3H6' where id=1; -update noar tt set v0='O09X4V22OY3' where id=1; -update noar ti set v0='O09X4V22OY3' where id=1; -update noar tt set b2='WV92NADHCLKMYZV' where id=1; -update noar ti set b2='WV92NADHCLKMYZV' where id=1; -update noar tt set v0='I8YHO0RNDEN' where id=2; -update noar ti set v0='I8YHO0RNDEN' where id=2; -update noar tt set b0='L7WIUK5PF1F17IAEMZ6QYZ3VS' where id=2; -update noar ti set b0='L7WIUK5PF1F17IAEMZ6QYZ3VS' where id=2; -update noar tt set v0='IHSJ84PGBL5BTYL54TN2IX' where id=2; -update noar ti set v0='IHSJ84PGBL5BTYL54TN2IX' where id=2; -update noar tt set b1='36YOFM5O' where id=2; -update noar ti set b1='36YOFM5O' where id=2; -update noar tt set v0='HEQL7ODFJE3EO' where id=2; -update noar ti set v0='HEQL7ODFJE3EO' where id=2; -update noar tt set b2='7GPCM6K' where id=2; -update noar ti set b2='7GPCM6K' where id=2; -update noar tt set v0='UIPTAMOL3IC39LAV' where id=3; -update noar ti set v0='UIPTAMOL3IC39LAV' where id=3; -update noar tt set b0='66BOACX' where id=3; -update noar ti set b0='66BOACX' where id=3; -update noar tt set v0='4FS' where id=3; -update noar ti set v0='4FS' where id=3; -update noar tt set b1='GG' where id=3; -update noar ti set b1='GG' where id=3; -update noar tt set v0='2ZVCNCKHBSAOQL' where id=3; -update noar ti set v0='2ZVCNCKHBSAOQL' where id=3; -update noar tt set b2='RPGCLKP5CEC6L2N1TI7FQ0L1I' where id=3; -update noar ti set b2='RPGCLKP5CEC6L2N1TI7FQ0L1I' where id=3; -update noar tt set v0='SCKOIL5H5K8B90YVHJ0MZU00R6H' where id=4; -update noar ti set v0='SCKOIL5H5K8B90YVHJ0MZU00R6H' where id=4; -update noar tt set b0='LR6Z972L5FG' where id=4; -update noar ti set b0='LR6Z972L5FG' where id=4; -update noar tt set v0='BY4CVT' where id=4; -update noar ti set v0='BY4CVT' where id=4; -update noar tt set b1='SDC' where id=4; -update noar ti set b1='SDC' where id=4; -update noar tt set v0='Y352PRISAM7MWMUYZERKSGTIXHPA1OZ' where id=4; -update noar ti set v0='Y352PRISAM7MWMUYZERKSGTIXHPA1OZ' where id=4; -update noar tt set b2='H1B7J070BUNTWK8E' where id=4; -update noar ti set b2='H1B7J070BUNTWK8E' where id=4; -update noar tt set v0='4AQH50' where id=5; -update noar ti set v0='4AQH50' where id=5; -update noar tt set b0='84IVLFZQRRJ9SH1I9J' where id=5; -update noar ti set b0='84IVLFZQRRJ9SH1I9J' where id=5; -update noar tt set v0='837GEMP8JCRPN9D4V5C' where id=5; -update noar ti set v0='837GEMP8JCRPN9D4V5C' where id=5; -update noar tt set b1='O5FKFCJ18SWQA0CKWSEXJTI3OQ4' where id=5; -update noar ti set b1='O5FKFCJ18SWQA0CKWSEXJTI3OQ4' where id=5; -update noar tt set v0='T5P7O7ITWTZAO3LJWJV1BK0' where id=5; -update noar ti set v0='T5P7O7ITWTZAO3LJWJV1BK0' where id=5; -update noar tt set b2='HMTQXKEX' where id=5; -update noar ti set b2='HMTQXKEX' where id=5; -update noar tt set v0='RJXBPTV9XI31S7T1F45F0C7A41' where id=6; -update noar ti set v0='RJXBPTV9XI31S7T1F45F0C7A41' where id=6; -update noar tt set b0='H5VNEK4OM60IZPXQR2' where id=6; -update noar ti set b0='H5VNEK4OM60IZPXQR2' where id=6; -update noar tt set v0='P03NT7AEHRHX4WM6UI2C' where id=6; -update noar ti set v0='P03NT7AEHRHX4WM6UI2C' where id=6; -update noar tt set b1='2UL7' where id=6; -update noar ti set b1='2UL7' where id=6; -update noar tt set v0='KSSES9' where id=6; -update noar ti set v0='KSSES9' where id=6; -update noar tt set b2='0R1CE' where id=6; -update noar ti set b2='0R1CE' where id=6; -update noar tt set v0='004ASRUTRXET8B55A5L2EHS' where id=7; -update noar ti set v0='004ASRUTRXET8B55A5L2EHS' where id=7; -update noar tt set b0='KMCPFG23ITA' where id=7; -update noar ti set b0='KMCPFG23ITA' where id=7; -update noar tt set v0='02Q6RRXZ402OX2D6D9I2KRVDXA4C' where id=7; -update noar ti set v0='02Q6RRXZ402OX2D6D9I2KRVDXA4C' where id=7; -update noar tt set b1='PHMMX' where id=7; -update noar ti set b1='PHMMX' where id=7; -update noar tt set v0='I699IXJ56C1EWL3IR8EASD5' where id=7; -update noar ti set v0='I699IXJ56C1EWL3IR8EASD5' where id=7; -update noar tt set b2='G4ZDG2KLOJLWCTR' where id=7; -update noar ti set b2='G4ZDG2KLOJLWCTR' where id=7; -update noar tt set v0='U48AZW3XYEDI' where id=8; -update noar ti set v0='U48AZW3XYEDI' where id=8; -update noar tt set b0='ZAQBZNMNUVV3WFJML' where id=8; -update noar ti set b0='ZAQBZNMNUVV3WFJML' where id=8; -update noar tt set v0='8B' where id=8; -update noar ti set v0='8B' where id=8; -update noar tt set b1='SH9LRS6WMZWBYYOP' where id=8; -update noar ti set b1='SH9LRS6WMZWBYYOP' where id=8; -update noar tt set v0='RCSLSOK7UM7EV5YC' where id=8; -update noar ti set v0='RCSLSOK7UM7EV5YC' where id=8; -update noar tt set b2='9RFV4DRC2QWZ78ULQFPWX' where id=8; -update noar ti set b2='9RFV4DRC2QWZ78ULQFPWX' where id=8; -update noar tt set v0='3JP8TX9UYXC01HRKUJS4FWWFLP0' where id=9; -update noar ti set v0='3JP8TX9UYXC01HRKUJS4FWWFLP0' where id=9; -update noar tt set b0='2VVWHN4JC486SPQRGB7USS42W6XYC' where id=9; -update noar ti set b0='2VVWHN4JC486SPQRGB7USS42W6XYC' where id=9; -update noar tt set v0='3' where id=9; -update noar ti set v0='3' where id=9; -update noar tt set b1='44IXRD64PHO1BZ6MQJXIR9NNT6X9' where id=9; -update noar ti set b1='44IXRD64PHO1BZ6MQJXIR9NNT6X9' where id=9; -update noar tt set v0='7SQLH7E3EL1MAMTKS9RHQ' where id=9; -update noar ti set v0='7SQLH7E3EL1MAMTKS9RHQ' where id=9; -update noar tt set b2='6F5K8QQMN5ROZ8YJUB8M3UG' where id=9; -update noar ti set b2='6F5K8QQMN5ROZ8YJUB8M3UG' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 mediumblob null, -b1 blob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='R8QC2LK3FJ9TUON4F' where id=1; -update noar ti set v0='R8QC2LK3FJ9TUON4F' where id=1; -update noar tt set b0='XW095Q43CN08D6SWVNGMYTFWFZUY' where id=1; -update noar ti set b0='XW095Q43CN08D6SWVNGMYTFWFZUY' where id=1; -update noar tt set v0='P6IOMB9' where id=1; -update noar ti set v0='P6IOMB9' where id=1; -update noar tt set b1='ZRSNSV45CAK063WFF1EBPIVO2X' where id=1; -update noar ti set b1='ZRSNSV45CAK063WFF1EBPIVO2X' where id=1; -update noar tt set v0='X781BE65UV0H8ODU2890' where id=1; -update noar ti set v0='X781BE65UV0H8ODU2890' where id=1; -update noar tt set b2='9JA9HXZOF4VLLMIC2DMDBMYARQ6ZC45' where id=1; -update noar ti set b2='9JA9HXZOF4VLLMIC2DMDBMYARQ6ZC45' where id=1; -update noar tt set v0='8W0K6RVWR1' where id=2; -update noar ti set v0='8W0K6RVWR1' where id=2; -update noar tt set b0='Z5Q7SQY8TQ052H2ELWVQ' where id=2; -update noar ti set b0='Z5Q7SQY8TQ052H2ELWVQ' where id=2; -update noar tt set v0='CEHVCWEL0B' where id=2; -update noar ti set v0='CEHVCWEL0B' where id=2; -update noar tt set b1='VM6T54E7KMJ' where id=2; -update noar ti set b1='VM6T54E7KMJ' where id=2; -update noar tt set v0='VE22WDZ' where id=2; -update noar ti set v0='VE22WDZ' where id=2; -update noar tt set b2='A9RZQCNNJBKDMB995J1V' where id=2; -update noar ti set b2='A9RZQCNNJBKDMB995J1V' where id=2; -update noar tt set v0='GOYN6CB99Q2KSG' where id=3; -update noar ti set v0='GOYN6CB99Q2KSG' where id=3; -update noar tt set b0='Z3ZLMFUD3M0' where id=3; -update noar ti set b0='Z3ZLMFUD3M0' where id=3; -update noar tt set v0='2T2TKFUYFZSDXBRGRBX9' where id=3; -update noar ti set v0='2T2TKFUYFZSDXBRGRBX9' where id=3; -update noar tt set b1='8X1UYGUVV61YPTHI' where id=3; -update noar ti set b1='8X1UYGUVV61YPTHI' where id=3; -update noar tt set v0='UK9V1XOPRP' where id=3; -update noar ti set v0='UK9V1XOPRP' where id=3; -update noar tt set b2='IIK3I7K1EHBLJ04LO038GRFILXDWPC2I' where id=3; -update noar ti set b2='IIK3I7K1EHBLJ04LO038GRFILXDWPC2I' where id=3; -update noar tt set v0='V6Z5C0' where id=4; -update noar ti set v0='V6Z5C0' where id=4; -update noar tt set b0='OK' where id=4; -update noar ti set b0='OK' where id=4; -update noar tt set v0='SM4CK413M1DQ3I41Y5AQ8KV' where id=4; -update noar ti set v0='SM4CK413M1DQ3I41Y5AQ8KV' where id=4; -update noar tt set b1='KOCCH34SMIW' where id=4; -update noar ti set b1='KOCCH34SMIW' where id=4; -update noar tt set v0='T77UAO0HF4FG' where id=4; -update noar ti set v0='T77UAO0HF4FG' where id=4; -update noar tt set b2='E8L0JOV5ZRCF7IJ1CMB' where id=4; -update noar ti set b2='E8L0JOV5ZRCF7IJ1CMB' where id=4; -update noar tt set v0='TCDIADG65A2GNZ009XE49D' where id=5; -update noar ti set v0='TCDIADG65A2GNZ009XE49D' where id=5; -update noar tt set b0='8MXEFNSR2ZWXB0A4RUTURVKGT' where id=5; -update noar ti set b0='8MXEFNSR2ZWXB0A4RUTURVKGT' where id=5; -update noar tt set v0='R40STLD0E' where id=5; -update noar ti set v0='R40STLD0E' where id=5; -update noar tt set b1='ENSYOB814N3L5DS55' where id=5; -update noar ti set b1='ENSYOB814N3L5DS55' where id=5; -update noar tt set v0='DWL' where id=5; -update noar ti set v0='DWL' where id=5; -update noar tt set b2='O3IKTL' where id=5; -update noar ti set b2='O3IKTL' where id=5; -update noar tt set v0='I625QTG0ZNOSYY6' where id=6; -update noar ti set v0='I625QTG0ZNOSYY6' where id=6; -update noar tt set b0='KJSS' where id=6; -update noar ti set b0='KJSS' where id=6; -update noar tt set v0='MEG' where id=6; -update noar ti set v0='MEG' where id=6; -update noar tt set b1='YAVEXA' where id=6; -update noar ti set b1='YAVEXA' where id=6; -update noar tt set v0='K2HVIJE7XZ2SEQUK6CHR4WNQ521' where id=6; -update noar ti set v0='K2HVIJE7XZ2SEQUK6CHR4WNQ521' where id=6; -update noar tt set b2='3GY9BAIKRSKX7QIX27GQMZQFZIZIA2CV' where id=6; -update noar ti set b2='3GY9BAIKRSKX7QIX27GQMZQFZIZIA2CV' where id=6; -update noar tt set v0='H5KTNKJIU37H4NMK8MA3SB1ZX' where id=7; -update noar ti set v0='H5KTNKJIU37H4NMK8MA3SB1ZX' where id=7; -update noar tt set b0='4DLSCD5A' where id=7; -update noar ti set b0='4DLSCD5A' where id=7; -update noar tt set v0='027' where id=7; -update noar ti set v0='027' where id=7; -update noar tt set b1='R577GJ8DRRXOUOADUDGO' where id=7; -update noar ti set b1='R577GJ8DRRXOUOADUDGO' where id=7; -update noar tt set v0='VMX38I58JTEQ' where id=7; -update noar ti set v0='VMX38I58JTEQ' where id=7; -update noar tt set b2='D' where id=7; -update noar ti set b2='D' where id=7; -update noar tt set v0='0HUB528TLU' where id=8; -update noar ti set v0='0HUB528TLU' where id=8; -update noar tt set b0='SISMFBBG9IJ' where id=8; -update noar ti set b0='SISMFBBG9IJ' where id=8; -update noar tt set v0='SH' where id=8; -update noar ti set v0='SH' where id=8; -update noar tt set b1='5PKBSY13703MGH1RR21OGJ3PGA' where id=8; -update noar ti set b1='5PKBSY13703MGH1RR21OGJ3PGA' where id=8; -update noar tt set v0='06PXG73FRVAYONSA24X' where id=8; -update noar ti set v0='06PXG73FRVAYONSA24X' where id=8; -update noar tt set b2='7OYLAEPV3PU8FTBORQAL8CUF70MKPPG' where id=8; -update noar ti set b2='7OYLAEPV3PU8FTBORQAL8CUF70MKPPG' where id=8; -update noar tt set v0='1M5OC' where id=9; -update noar ti set v0='1M5OC' where id=9; -update noar tt set b0='P4B2KFW3D11ZUI5S08ER3NK' where id=9; -update noar ti set b0='P4B2KFW3D11ZUI5S08ER3NK' where id=9; -update noar tt set v0='B7GKKTX1EDIUQ7QSZ55GP7DXZ6LM4' where id=9; -update noar ti set v0='B7GKKTX1EDIUQ7QSZ55GP7DXZ6LM4' where id=9; -update noar tt set b1='MGLPJ' where id=9; -update noar ti set b1='MGLPJ' where id=9; -update noar tt set v0='0JEJ1C0S' where id=9; -update noar ti set v0='0JEJ1C0S' where id=9; -update noar tt set b2='P13R2' where id=9; -update noar ti set b2='P13R2' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 mediumblob null, -b1 blob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='67BTHJWFWE0HGKZEYMU' where id=1; -update noar ti set v0='67BTHJWFWE0HGKZEYMU' where id=1; -update noar tt set b0='GAP0E1KP8L90MYLFMC6N01LDEC7KOT1' where id=1; -update noar ti set b0='GAP0E1KP8L90MYLFMC6N01LDEC7KOT1' where id=1; -update noar tt set v0='KQ7JCZ6YGQUK' where id=1; -update noar ti set v0='KQ7JCZ6YGQUK' where id=1; -update noar tt set b1='ZE0OUQIZZXN' where id=1; -update noar ti set b1='ZE0OUQIZZXN' where id=1; -update noar tt set v0='ZQLCYPCRT22QNN5GYUEBZXBLOZK48' where id=1; -update noar ti set v0='ZQLCYPCRT22QNN5GYUEBZXBLOZK48' where id=1; -update noar tt set b2='PXC5H5I9K0HPV243NF20IN6JY8' where id=1; -update noar ti set b2='PXC5H5I9K0HPV243NF20IN6JY8' where id=1; -update noar tt set v0='QPA2ZM9B2' where id=2; -update noar ti set v0='QPA2ZM9B2' where id=2; -update noar tt set b0='VNEXOVNAKX526KFG84' where id=2; -update noar ti set b0='VNEXOVNAKX526KFG84' where id=2; -update noar tt set v0='CJ58BVSXDAX02ZGK645N1JDQ' where id=2; -update noar ti set v0='CJ58BVSXDAX02ZGK645N1JDQ' where id=2; -update noar tt set b1='MDHDCKAS59ABXUXMGWPT' where id=2; -update noar ti set b1='MDHDCKAS59ABXUXMGWPT' where id=2; -update noar tt set v0='ALU' where id=2; -update noar ti set v0='ALU' where id=2; -update noar tt set b2='RNJR9E97ZPOL6L6KMU' where id=2; -update noar ti set b2='RNJR9E97ZPOL6L6KMU' where id=2; -update noar tt set v0='I377CVOQZIN8TRT9B7ZRKW27B' where id=3; -update noar ti set v0='I377CVOQZIN8TRT9B7ZRKW27B' where id=3; -update noar tt set b0='AE0VVV7WZLPFC51675YUZ2' where id=3; -update noar ti set b0='AE0VVV7WZLPFC51675YUZ2' where id=3; -update noar tt set v0='CSDAJS86J1590XZP' where id=3; -update noar ti set v0='CSDAJS86J1590XZP' where id=3; -update noar tt set b1='XI815HQWI9RUXNNPSFT05XVM6GLO' where id=3; -update noar ti set b1='XI815HQWI9RUXNNPSFT05XVM6GLO' where id=3; -update noar tt set v0='DVZAGDMMTQEM8OU916DJJET570YUW0T' where id=3; -update noar ti set v0='DVZAGDMMTQEM8OU916DJJET570YUW0T' where id=3; -update noar tt set b2='HCR5OV3FSQC5FP8155RAP' where id=3; -update noar ti set b2='HCR5OV3FSQC5FP8155RAP' where id=3; -update noar tt set v0='QUHWAN4EYATR' where id=4; -update noar ti set v0='QUHWAN4EYATR' where id=4; -update noar tt set b0='34CM0GT6WJOUHH5F4P6MWY97J' where id=4; -update noar ti set b0='34CM0GT6WJOUHH5F4P6MWY97J' where id=4; -update noar tt set v0='XK4Q00TBJNKJUSGVLH' where id=4; -update noar ti set v0='XK4Q00TBJNKJUSGVLH' where id=4; -update noar tt set b1='3WCXG6AA5X1M6JO9YZ' where id=4; -update noar ti set b1='3WCXG6AA5X1M6JO9YZ' where id=4; -update noar tt set v0='DAZ3DJH0ABMB' where id=4; -update noar ti set v0='DAZ3DJH0ABMB' where id=4; -update noar tt set b2='C5VM9LBTMDJT6OQJ8K6QW3GSO4' where id=4; -update noar ti set b2='C5VM9LBTMDJT6OQJ8K6QW3GSO4' where id=4; -update noar tt set v0='1IL299' where id=5; -update noar ti set v0='1IL299' where id=5; -update noar tt set b0='KZOM0QTTBJ90ZB' where id=5; -update noar ti set b0='KZOM0QTTBJ90ZB' where id=5; -update noar tt set v0='EUNJNXOBVA31QN3408LUHOW8B2S6' where id=5; -update noar ti set v0='EUNJNXOBVA31QN3408LUHOW8B2S6' where id=5; -update noar tt set b1='8SXR8JKCFA39FFEO3L1OID8W4DVQP8BP' where id=5; -update noar ti set b1='8SXR8JKCFA39FFEO3L1OID8W4DVQP8BP' where id=5; -update noar tt set v0='IJ6GYZP35IIFATQWH' where id=5; -update noar ti set v0='IJ6GYZP35IIFATQWH' where id=5; -update noar tt set b2='S08HKTK84JDUNPEYBP926B6FL4LDXBED' where id=5; -update noar ti set b2='S08HKTK84JDUNPEYBP926B6FL4LDXBED' where id=5; -update noar tt set v0='NNV29Q20BZ' where id=6; -update noar ti set v0='NNV29Q20BZ' where id=6; -update noar tt set b0='DI79XD7HSQTEXTDWO3A4AKBL' where id=6; -update noar ti set b0='DI79XD7HSQTEXTDWO3A4AKBL' where id=6; -update noar tt set v0='Q' where id=6; -update noar ti set v0='Q' where id=6; -update noar tt set b1='L6YXGO74SG4D6C8N5VN9FP7' where id=6; -update noar ti set b1='L6YXGO74SG4D6C8N5VN9FP7' where id=6; -update noar tt set v0='75UJEYIXOVO1QW6R6FAJ1' where id=6; -update noar ti set v0='75UJEYIXOVO1QW6R6FAJ1' where id=6; -update noar tt set b2='0M' where id=6; -update noar ti set b2='0M' where id=6; -update noar tt set v0='T00L1NMMO3GHS2QP' where id=7; -update noar ti set v0='T00L1NMMO3GHS2QP' where id=7; -update noar tt set b0='MRG1SJXK14E6VXIQ0S' where id=7; -update noar ti set b0='MRG1SJXK14E6VXIQ0S' where id=7; -update noar tt set v0='G5JNUYA44UH' where id=7; -update noar ti set v0='G5JNUYA44UH' where id=7; -update noar tt set b1='JYZ' where id=7; -update noar ti set b1='JYZ' where id=7; -update noar tt set v0='AF4KTNJDOVNZMSB' where id=7; -update noar ti set v0='AF4KTNJDOVNZMSB' where id=7; -update noar tt set b2='AJXGITWFG4JWQIZBR5H' where id=7; -update noar ti set b2='AJXGITWFG4JWQIZBR5H' where id=7; -update noar tt set v0='O50HPL6' where id=8; -update noar ti set v0='O50HPL6' where id=8; -update noar tt set b0='GR8YO1YKJWEELAFIO48G' where id=8; -update noar ti set b0='GR8YO1YKJWEELAFIO48G' where id=8; -update noar tt set v0='3R1X2BQFZKA6P0LNM' where id=8; -update noar ti set v0='3R1X2BQFZKA6P0LNM' where id=8; -update noar tt set b1='KUOVK84V5W75M' where id=8; -update noar ti set b1='KUOVK84V5W75M' where id=8; -update noar tt set v0='HUSA2VJFUP32S5AM1GROM3UR' where id=8; -update noar ti set v0='HUSA2VJFUP32S5AM1GROM3UR' where id=8; -update noar tt set b2='NLMGMJGPGPPFLIG806PCCRG5W' where id=8; -update noar ti set b2='NLMGMJGPGPPFLIG806PCCRG5W' where id=8; -update noar tt set v0='991152K' where id=9; -update noar ti set v0='991152K' where id=9; -update noar tt set b0='3F1258VOJH4DXW' where id=9; -update noar ti set b0='3F1258VOJH4DXW' where id=9; -update noar tt set v0='0VXXFX3UF4H' where id=9; -update noar ti set v0='0VXXFX3UF4H' where id=9; -update noar tt set b1='EYV771VH5QVAO8J6Q' where id=9; -update noar ti set b1='EYV771VH5QVAO8J6Q' where id=9; -update noar tt set v0='6JL311MCJIW' where id=9; -update noar ti set v0='6JL311MCJIW' where id=9; -update noar tt set b2='NOBKY' where id=9; -update noar ti set b2='NOBKY' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 mediumblob not null, -b1 blob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='FQN6G7XJ37Y3YMRZO5A6CNLW60VDB5U' where id=1; -update noar ti set v0='FQN6G7XJ37Y3YMRZO5A6CNLW60VDB5U' where id=1; -update noar tt set b0='M52KWNIGXZ3MQDL6WLRXGUZ9XN9W5URQ' where id=1; -update noar ti set b0='M52KWNIGXZ3MQDL6WLRXGUZ9XN9W5URQ' where id=1; -update noar tt set v0='PR4AUXMX58G2IRMCCGGGA4OY2G' where id=1; -update noar ti set v0='PR4AUXMX58G2IRMCCGGGA4OY2G' where id=1; -update noar tt set b1='YLOEKANQP40LMJZK6HKC' where id=1; -update noar ti set b1='YLOEKANQP40LMJZK6HKC' where id=1; -update noar tt set v0='Y96RZF9X5F7GOH' where id=1; -update noar ti set v0='Y96RZF9X5F7GOH' where id=1; -update noar tt set b2='QMJLIHBXNF5T3FF5O5DS9ZY5A740C' where id=1; -update noar ti set b2='QMJLIHBXNF5T3FF5O5DS9ZY5A740C' where id=1; -update noar tt set v0='IRBK3A6SSL19AVVZK7882CN4GLHTUI' where id=2; -update noar ti set v0='IRBK3A6SSL19AVVZK7882CN4GLHTUI' where id=2; -update noar tt set b0='2650IYQGBQF3EB4407E50SP4DVD' where id=2; -update noar ti set b0='2650IYQGBQF3EB4407E50SP4DVD' where id=2; -update noar tt set v0='H2' where id=2; -update noar ti set v0='H2' where id=2; -update noar tt set b1='MLJC4538GVQOJC1QIZCFA6AD372A7L' where id=2; -update noar ti set b1='MLJC4538GVQOJC1QIZCFA6AD372A7L' where id=2; -update noar tt set v0='RTE19UD32WW93E3T2ZZ' where id=2; -update noar ti set v0='RTE19UD32WW93E3T2ZZ' where id=2; -update noar tt set b2='F' where id=2; -update noar ti set b2='F' where id=2; -update noar tt set v0='0BJYLKRJNX2TB2O47MJJ' where id=3; -update noar ti set v0='0BJYLKRJNX2TB2O47MJJ' where id=3; -update noar tt set b0='WTV1' where id=3; -update noar ti set b0='WTV1' where id=3; -update noar tt set v0='ZWUXOL6' where id=3; -update noar ti set v0='ZWUXOL6' where id=3; -update noar tt set b1='11SUJQO4YFTLMOOVF3LNULU86TT8' where id=3; -update noar ti set b1='11SUJQO4YFTLMOOVF3LNULU86TT8' where id=3; -update noar tt set v0='KXDQWZ16V42ZW32Q5QILJEYJ1SKBLND' where id=3; -update noar ti set v0='KXDQWZ16V42ZW32Q5QILJEYJ1SKBLND' where id=3; -update noar tt set b2='RD35802WDOU28WJ9JHNEAJOP9NS' where id=3; -update noar ti set b2='RD35802WDOU28WJ9JHNEAJOP9NS' where id=3; -update noar tt set v0='Y26QIP7X25UGQPBGVKCSRAM0QLE' where id=4; -update noar ti set v0='Y26QIP7X25UGQPBGVKCSRAM0QLE' where id=4; -update noar tt set b0='22QEXO3717O24F1VCJ889W83405' where id=4; -update noar ti set b0='22QEXO3717O24F1VCJ889W83405' where id=4; -update noar tt set v0='YT1' where id=4; -update noar ti set v0='YT1' where id=4; -update noar tt set b1='NLKP' where id=4; -update noar ti set b1='NLKP' where id=4; -update noar tt set v0='QJGMUBBM1L755499R' where id=4; -update noar ti set v0='QJGMUBBM1L755499R' where id=4; -update noar tt set b2='9LI09Y1GQWU0LZ6OSYU6Z31' where id=4; -update noar ti set b2='9LI09Y1GQWU0LZ6OSYU6Z31' where id=4; -update noar tt set v0='28NT8TAU8' where id=5; -update noar ti set v0='28NT8TAU8' where id=5; -update noar tt set b0='MHKU5RZP0EOMFXZR' where id=5; -update noar ti set b0='MHKU5RZP0EOMFXZR' where id=5; -update noar tt set v0='LBFX92TK76BVIN11V3SZ' where id=5; -update noar ti set v0='LBFX92TK76BVIN11V3SZ' where id=5; -update noar tt set b1='UJK' where id=5; -update noar ti set b1='UJK' where id=5; -update noar tt set v0='ASX6X96L6L5FQF0N1' where id=5; -update noar ti set v0='ASX6X96L6L5FQF0N1' where id=5; -update noar tt set b2='FXDF1YA' where id=5; -update noar ti set b2='FXDF1YA' where id=5; -update noar tt set v0='CSRDWM89AT5WXH9HI5XPTZ66DT8' where id=6; -update noar ti set v0='CSRDWM89AT5WXH9HI5XPTZ66DT8' where id=6; -update noar tt set b0='PKKO6' where id=6; -update noar ti set b0='PKKO6' where id=6; -update noar tt set v0='OXR74IFCKYZ' where id=6; -update noar ti set v0='OXR74IFCKYZ' where id=6; -update noar tt set b1='H4IS5L9ZQJIPMRGUP' where id=6; -update noar ti set b1='H4IS5L9ZQJIPMRGUP' where id=6; -update noar tt set v0='67RFAEBELGL1WQ7FVFO63A16384H9I' where id=6; -update noar ti set v0='67RFAEBELGL1WQ7FVFO63A16384H9I' where id=6; -update noar tt set b2='A4B6XL43IRA1751' where id=6; -update noar ti set b2='A4B6XL43IRA1751' where id=6; -update noar tt set v0='RIZP7PPK6OUP66EIUZS' where id=7; -update noar ti set v0='RIZP7PPK6OUP66EIUZS' where id=7; -update noar tt set b0='KP8M' where id=7; -update noar ti set b0='KP8M' where id=7; -update noar tt set v0='PH50J3BKXTSQ0W8USNS0IQW6' where id=7; -update noar ti set v0='PH50J3BKXTSQ0W8USNS0IQW6' where id=7; -update noar tt set b1='LS44E8TM6H94XBZP1MNHPDBTLJM' where id=7; -update noar ti set b1='LS44E8TM6H94XBZP1MNHPDBTLJM' where id=7; -update noar tt set v0='LJWN3SR3OC8' where id=7; -update noar ti set v0='LJWN3SR3OC8' where id=7; -update noar tt set b2='EQ4IMRHUQ1ANBUAI33JNIYM2J8P8R1' where id=7; -update noar ti set b2='EQ4IMRHUQ1ANBUAI33JNIYM2J8P8R1' where id=7; -update noar tt set v0='1D1IPKY643I7J050MOSRUC5M' where id=8; -update noar ti set v0='1D1IPKY643I7J050MOSRUC5M' where id=8; -update noar tt set b0='HX5G00MH71VBWAHGH4DK0SM' where id=8; -update noar ti set b0='HX5G00MH71VBWAHGH4DK0SM' where id=8; -update noar tt set v0='YHWLKLPWT1YMOS88A64' where id=8; -update noar ti set v0='YHWLKLPWT1YMOS88A64' where id=8; -update noar tt set b1='3P7ZN47QWV' where id=8; -update noar ti set b1='3P7ZN47QWV' where id=8; -update noar tt set v0='HET5NB5YKRUWLYPA4SBULLXE' where id=8; -update noar ti set v0='HET5NB5YKRUWLYPA4SBULLXE' where id=8; -update noar tt set b2='B2YRQAAOSYKOVPN906' where id=8; -update noar ti set b2='B2YRQAAOSYKOVPN906' where id=8; -update noar tt set v0='D7S7ER7RAEI4FCE9' where id=9; -update noar ti set v0='D7S7ER7RAEI4FCE9' where id=9; -update noar tt set b0='3A8CWYTL4PSVB' where id=9; -update noar ti set b0='3A8CWYTL4PSVB' where id=9; -update noar tt set v0='EAUGZ4AJUJG4P8E9X58EI96QZ0L5' where id=9; -update noar ti set v0='EAUGZ4AJUJG4P8E9X58EI96QZ0L5' where id=9; -update noar tt set b1='D8NRDPO7FAPIAFJJB6MIGS' where id=9; -update noar ti set b1='D8NRDPO7FAPIAFJJB6MIGS' where id=9; -update noar tt set v0='OINIE' where id=9; -update noar ti set v0='OINIE' where id=9; -update noar tt set b2='5NVE03D0PPWS0O' where id=9; -update noar ti set b2='5NVE03D0PPWS0O' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 mediumblob not null, -b1 blob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='BZV2Q' where id=1; -update noar ti set v0='BZV2Q' where id=1; -update noar tt set b0='70HPAHMYEBGQ7DAZWPDUIKX4D4DAQU0' where id=1; -update noar ti set b0='70HPAHMYEBGQ7DAZWPDUIKX4D4DAQU0' where id=1; -update noar tt set v0='NPJTHWRK3A5Q7YVYAR4V2RJBKCXSLPR' where id=1; -update noar ti set v0='NPJTHWRK3A5Q7YVYAR4V2RJBKCXSLPR' where id=1; -update noar tt set b1='OLCCW9884V' where id=1; -update noar ti set b1='OLCCW9884V' where id=1; -update noar tt set v0='Y4QFAS4R3Q0UA2QIS1' where id=1; -update noar ti set v0='Y4QFAS4R3Q0UA2QIS1' where id=1; -update noar tt set b2='39PWV6V9' where id=1; -update noar ti set b2='39PWV6V9' where id=1; -update noar tt set v0='XS8N49YFK56H2CPKC' where id=2; -update noar ti set v0='XS8N49YFK56H2CPKC' where id=2; -update noar tt set b0='8F26IUJ3304SI1MJHC9VZN5TI06KW' where id=2; -update noar ti set b0='8F26IUJ3304SI1MJHC9VZN5TI06KW' where id=2; -update noar tt set v0='L1YZIY1AZ8IV' where id=2; -update noar ti set v0='L1YZIY1AZ8IV' where id=2; -update noar tt set b1='9E25QUAW7ZKWVV' where id=2; -update noar ti set b1='9E25QUAW7ZKWVV' where id=2; -update noar tt set v0='XYDESP2FWID57U2KJ0F4E7B' where id=2; -update noar ti set v0='XYDESP2FWID57U2KJ0F4E7B' where id=2; -update noar tt set b2='MZOD78TXP5X9UAL8QGUPEARGVG' where id=2; -update noar ti set b2='MZOD78TXP5X9UAL8QGUPEARGVG' where id=2; -update noar tt set v0='RDO0O4NIIXFLZTF4H4J7PF' where id=3; -update noar ti set v0='RDO0O4NIIXFLZTF4H4J7PF' where id=3; -update noar tt set b0='XRAJSP2D27E59PQ69P' where id=3; -update noar ti set b0='XRAJSP2D27E59PQ69P' where id=3; -update noar tt set v0='RSLUEJ2HYFSXHV2LZDXR5A6' where id=3; -update noar ti set v0='RSLUEJ2HYFSXHV2LZDXR5A6' where id=3; -update noar tt set b1='UCWRU80ERD5VP9I59A5XWA7VF2PQR1DD' where id=3; -update noar ti set b1='UCWRU80ERD5VP9I59A5XWA7VF2PQR1DD' where id=3; -update noar tt set v0='6Q0EVNDWO7SRQ5MHKRZ97N5M55' where id=3; -update noar ti set v0='6Q0EVNDWO7SRQ5MHKRZ97N5M55' where id=3; -update noar tt set b2='UIDKH' where id=3; -update noar ti set b2='UIDKH' where id=3; -update noar tt set v0='771WVJSIQ7LV6070SQ3A0E2WUBOF' where id=4; -update noar ti set v0='771WVJSIQ7LV6070SQ3A0E2WUBOF' where id=4; -update noar tt set b0='QZBPQNJTWVFUW415A9D' where id=4; -update noar ti set b0='QZBPQNJTWVFUW415A9D' where id=4; -update noar tt set v0='XCPT4BZLB64K' where id=4; -update noar ti set v0='XCPT4BZLB64K' where id=4; -update noar tt set b1='19UR7J9MT' where id=4; -update noar ti set b1='19UR7J9MT' where id=4; -update noar tt set v0='VOIN4KBV4X5ELC' where id=4; -update noar ti set v0='VOIN4KBV4X5ELC' where id=4; -update noar tt set b2='B0E9BCE6CX24HQ8JI' where id=4; -update noar ti set b2='B0E9BCE6CX24HQ8JI' where id=4; -update noar tt set v0='CEBPVBLWAKS42NQE6FBIIIYH814' where id=5; -update noar ti set v0='CEBPVBLWAKS42NQE6FBIIIYH814' where id=5; -update noar tt set b0='VZKRPII9Q3EC7S82BU1W2LR' where id=5; -update noar ti set b0='VZKRPII9Q3EC7S82BU1W2LR' where id=5; -update noar tt set v0='YJU85T81LMUJMPVSX4A' where id=5; -update noar ti set v0='YJU85T81LMUJMPVSX4A' where id=5; -update noar tt set b1='OCYV' where id=5; -update noar ti set b1='OCYV' where id=5; -update noar tt set v0='QNTBSI5K9YLYH5845VEV2N7LECABL9Y' where id=5; -update noar ti set v0='QNTBSI5K9YLYH5845VEV2N7LECABL9Y' where id=5; -update noar tt set b2='P65VWA3W7INEXCCFCNKTO9' where id=5; -update noar ti set b2='P65VWA3W7INEXCCFCNKTO9' where id=5; -update noar tt set v0='SU1FIL' where id=6; -update noar ti set v0='SU1FIL' where id=6; -update noar tt set b0='YZHYRTNBVSX1YA85U665VZ6' where id=6; -update noar ti set b0='YZHYRTNBVSX1YA85U665VZ6' where id=6; -update noar tt set v0='YM3VQ6KPLKNUFLHI6324' where id=6; -update noar ti set v0='YM3VQ6KPLKNUFLHI6324' where id=6; -update noar tt set b1='NEOWM' where id=6; -update noar ti set b1='NEOWM' where id=6; -update noar tt set v0='QV8W07IHSM40YC05O8R78C' where id=6; -update noar ti set v0='QV8W07IHSM40YC05O8R78C' where id=6; -update noar tt set b2='X99HHGF84VDAH91LD2M71IU107ERG8L' where id=6; -update noar ti set b2='X99HHGF84VDAH91LD2M71IU107ERG8L' where id=6; -update noar tt set v0='FU30S66VQYDKNJREU6LSPIUKBENQ' where id=7; -update noar ti set v0='FU30S66VQYDKNJREU6LSPIUKBENQ' where id=7; -update noar tt set b0='O31TH' where id=7; -update noar ti set b0='O31TH' where id=7; -update noar tt set v0='A797AJILPK6XYSNDTWZ2YII4456SY' where id=7; -update noar ti set v0='A797AJILPK6XYSNDTWZ2YII4456SY' where id=7; -update noar tt set b1='YXOHM6ECVM' where id=7; -update noar ti set b1='YXOHM6ECVM' where id=7; -update noar tt set v0='7C95XJ2LRIV6' where id=7; -update noar ti set v0='7C95XJ2LRIV6' where id=7; -update noar tt set b2='PQ435VKTYGV7YPPGIXX2SK14X' where id=7; -update noar ti set b2='PQ435VKTYGV7YPPGIXX2SK14X' where id=7; -update noar tt set v0='XGB0Y5T01LJJWBH' where id=8; -update noar ti set v0='XGB0Y5T01LJJWBH' where id=8; -update noar tt set b0='XQT4OVI4' where id=8; -update noar ti set b0='XQT4OVI4' where id=8; -update noar tt set v0='RP0YWBXHY92QPDBD04VADJQPA' where id=8; -update noar ti set v0='RP0YWBXHY92QPDBD04VADJQPA' where id=8; -update noar tt set b1='A5O9RGDGZH2F6AHI7LLW' where id=8; -update noar ti set b1='A5O9RGDGZH2F6AHI7LLW' where id=8; -update noar tt set v0='R4ZG1' where id=8; -update noar ti set v0='R4ZG1' where id=8; -update noar tt set b2='OSA7VEHFHG5U' where id=8; -update noar ti set b2='OSA7VEHFHG5U' where id=8; -update noar tt set v0='N1QKLVG' where id=9; -update noar ti set v0='N1QKLVG' where id=9; -update noar tt set b0='7YPU4WI' where id=9; -update noar ti set b0='7YPU4WI' where id=9; -update noar tt set v0='L1PPQ' where id=9; -update noar ti set v0='L1PPQ' where id=9; -update noar tt set b1='RF7W812XL67EC1CNJ3X98DR5Q' where id=9; -update noar ti set b1='RF7W812XL67EC1CNJ3X98DR5Q' where id=9; -update noar tt set v0='PAZIHGWAOVO96' where id=9; -update noar ti set v0='PAZIHGWAOVO96' where id=9; -update noar tt set b2='RPAFE' where id=9; -update noar ti set b2='RPAFE' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 mediumblob null, -b1 blob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='6PHBSQ7Y4VCUYALN6KYBOV521QF' where id=1; -update noar ti set v0='6PHBSQ7Y4VCUYALN6KYBOV521QF' where id=1; -update noar tt set b0='U7NO' where id=1; -update noar ti set b0='U7NO' where id=1; -update noar tt set v0='ZRC49GNPMY0FUQLO120EHOZSDM5127IR' where id=1; -update noar ti set v0='ZRC49GNPMY0FUQLO120EHOZSDM5127IR' where id=1; -update noar tt set b1='2N86J09RSRSZGE2DI6QBMRM8SVBTHN' where id=1; -update noar ti set b1='2N86J09RSRSZGE2DI6QBMRM8SVBTHN' where id=1; -update noar tt set v0='56CU7CK8YRW6XAS' where id=1; -update noar ti set v0='56CU7CK8YRW6XAS' where id=1; -update noar tt set b2='140HE0B0CTFZODPX' where id=1; -update noar ti set b2='140HE0B0CTFZODPX' where id=1; -update noar tt set v0='XSIBHV2I4BEQWHFBV057H1PMYKJV' where id=2; -update noar ti set v0='XSIBHV2I4BEQWHFBV057H1PMYKJV' where id=2; -update noar tt set b0='EDP8OE6' where id=2; -update noar ti set b0='EDP8OE6' where id=2; -update noar tt set v0='UNW7SHM336OW4M03V1KM' where id=2; -update noar ti set v0='UNW7SHM336OW4M03V1KM' where id=2; -update noar tt set b1='PKZZCG1GVZZCXLDT5' where id=2; -update noar ti set b1='PKZZCG1GVZZCXLDT5' where id=2; -update noar tt set v0='6R21CV7VK0BZ8PATQ' where id=2; -update noar ti set v0='6R21CV7VK0BZ8PATQ' where id=2; -update noar tt set b2='WVRZ37OICTKFJ5PUPSU3' where id=2; -update noar ti set b2='WVRZ37OICTKFJ5PUPSU3' where id=2; -update noar tt set v0='Y2UWX6N8RN9KHGUYIYT' where id=3; -update noar ti set v0='Y2UWX6N8RN9KHGUYIYT' where id=3; -update noar tt set b0='CY7IEJAYPZWD908MQO' where id=3; -update noar ti set b0='CY7IEJAYPZWD908MQO' where id=3; -update noar tt set v0='SC04XJTKFABZB5CFL0LHXVV1N2I5U' where id=3; -update noar ti set v0='SC04XJTKFABZB5CFL0LHXVV1N2I5U' where id=3; -update noar tt set b1='I2ANSGNBNY4TCLOB3' where id=3; -update noar ti set b1='I2ANSGNBNY4TCLOB3' where id=3; -update noar tt set v0='TEFS2EAPKQKA2UTQPEC31' where id=3; -update noar ti set v0='TEFS2EAPKQKA2UTQPEC31' where id=3; -update noar tt set b2='0BTYJPL0EU0YM1DNCD' where id=3; -update noar ti set b2='0BTYJPL0EU0YM1DNCD' where id=3; -update noar tt set v0='AEHJEOJ9J06' where id=4; -update noar ti set v0='AEHJEOJ9J06' where id=4; -update noar tt set b0='UF0468UDNV6' where id=4; -update noar ti set b0='UF0468UDNV6' where id=4; -update noar tt set v0='1ZJ0F8NQ0QQL72VM5ML' where id=4; -update noar ti set v0='1ZJ0F8NQ0QQL72VM5ML' where id=4; -update noar tt set b1='539S5OWUAOJQKJL8ZV7H8E0KJ357' where id=4; -update noar ti set b1='539S5OWUAOJQKJL8ZV7H8E0KJ357' where id=4; -update noar tt set v0='HX86B' where id=4; -update noar ti set v0='HX86B' where id=4; -update noar tt set b2='6KLR0SSIW79DQQUD75WGHG10H5X' where id=4; -update noar ti set b2='6KLR0SSIW79DQQUD75WGHG10H5X' where id=4; -update noar tt set v0='JTMC9WMMI5TAZWD0KXQY' where id=5; -update noar ti set v0='JTMC9WMMI5TAZWD0KXQY' where id=5; -update noar tt set b0='UOXYRCHEQMAPMK' where id=5; -update noar ti set b0='UOXYRCHEQMAPMK' where id=5; -update noar tt set v0='QHQ1B524526G2PIJC0GFWIY' where id=5; -update noar ti set v0='QHQ1B524526G2PIJC0GFWIY' where id=5; -update noar tt set b1='3USO7LM7XHRMYG1B7J0' where id=5; -update noar ti set b1='3USO7LM7XHRMYG1B7J0' where id=5; -update noar tt set v0='OL3GGMER2A3GJVAXK' where id=5; -update noar ti set v0='OL3GGMER2A3GJVAXK' where id=5; -update noar tt set b2='DMSE7U0ACHESDK' where id=5; -update noar ti set b2='DMSE7U0ACHESDK' where id=5; -update noar tt set v0='SR0SQ523IBKW2JE' where id=6; -update noar ti set v0='SR0SQ523IBKW2JE' where id=6; -update noar tt set b0='4359SBJQOHRT9ZFWTG' where id=6; -update noar ti set b0='4359SBJQOHRT9ZFWTG' where id=6; -update noar tt set v0='B0KW0SJ08MW340IP9GHO7IDZDRLUW3G' where id=6; -update noar ti set v0='B0KW0SJ08MW340IP9GHO7IDZDRLUW3G' where id=6; -update noar tt set b1='R7A2OW21XWPAN' where id=6; -update noar ti set b1='R7A2OW21XWPAN' where id=6; -update noar tt set v0='9OSQPO81YR11PLLYE2FD82CIU' where id=6; -update noar ti set v0='9OSQPO81YR11PLLYE2FD82CIU' where id=6; -update noar tt set b2='AKH4F4D58KIFJSBLMHPATP94S62CX' where id=6; -update noar ti set b2='AKH4F4D58KIFJSBLMHPATP94S62CX' where id=6; -update noar tt set v0='R9KO2K6MHY8ZKTTJHO2VD' where id=7; -update noar ti set v0='R9KO2K6MHY8ZKTTJHO2VD' where id=7; -update noar tt set b0='RFMU4U7385YOGELC9YZ40HW55Z81' where id=7; -update noar ti set b0='RFMU4U7385YOGELC9YZ40HW55Z81' where id=7; -update noar tt set v0='X' where id=7; -update noar ti set v0='X' where id=7; -update noar tt set b1='ZVCZVCMTN18OAD' where id=7; -update noar ti set b1='ZVCZVCMTN18OAD' where id=7; -update noar tt set v0='AG6Z6N621BYD' where id=7; -update noar ti set v0='AG6Z6N621BYD' where id=7; -update noar tt set b2='S1R2JVZBXB4SDY2QN8XZ2PQ97EOHR' where id=7; -update noar ti set b2='S1R2JVZBXB4SDY2QN8XZ2PQ97EOHR' where id=7; -update noar tt set v0='HIK5Q3LVC640VF5YFMHYDT7B0' where id=8; -update noar ti set v0='HIK5Q3LVC640VF5YFMHYDT7B0' where id=8; -update noar tt set b0='BZR3VGEQ28WWRL8YQL4QEW9Y' where id=8; -update noar ti set b0='BZR3VGEQ28WWRL8YQL4QEW9Y' where id=8; -update noar tt set v0='Z' where id=8; -update noar ti set v0='Z' where id=8; -update noar tt set b1='RITL86P5LOCCTJRS97PX857VCERWJ1M' where id=8; -update noar ti set b1='RITL86P5LOCCTJRS97PX857VCERWJ1M' where id=8; -update noar tt set v0='CB353NB8P28' where id=8; -update noar ti set v0='CB353NB8P28' where id=8; -update noar tt set b2='KAWXRL0GFD6HO1' where id=8; -update noar ti set b2='KAWXRL0GFD6HO1' where id=8; -update noar tt set v0='W5S7LRXW8U7R88985CVOFWH0' where id=9; -update noar ti set v0='W5S7LRXW8U7R88985CVOFWH0' where id=9; -update noar tt set b0='7XC' where id=9; -update noar ti set b0='7XC' where id=9; -update noar tt set v0='IT' where id=9; -update noar ti set v0='IT' where id=9; -update noar tt set b1='MI6U3DTH' where id=9; -update noar ti set b1='MI6U3DTH' where id=9; -update noar tt set v0='KZH' where id=9; -update noar ti set v0='KZH' where id=9; -update noar tt set b2='R8B05M265W2UKRNGMGPAAZLMROPNPL6' where id=9; -update noar ti set b2='R8B05M265W2UKRNGMGPAAZLMROPNPL6' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 mediumblob null, -b1 blob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='Y4TZBZMBF9G455X' where id=1; -update noar ti set v0='Y4TZBZMBF9G455X' where id=1; -update noar tt set b0='ES984128VENB0O3QE46YSJKTFVPVSDK' where id=1; -update noar ti set b0='ES984128VENB0O3QE46YSJKTFVPVSDK' where id=1; -update noar tt set v0='1XX2SL5AA92HNCL369LI3UFJQZM1ZAU' where id=1; -update noar ti set v0='1XX2SL5AA92HNCL369LI3UFJQZM1ZAU' where id=1; -update noar tt set b1='YR8HB73TGRC' where id=1; -update noar ti set b1='YR8HB73TGRC' where id=1; -update noar tt set v0='HGN' where id=1; -update noar ti set v0='HGN' where id=1; -update noar tt set b2='B0QL4TDP2' where id=1; -update noar ti set b2='B0QL4TDP2' where id=1; -update noar tt set v0='RR2GA9SPHKWJOX9LQK6FW1T4GOAS3CA' where id=2; -update noar ti set v0='RR2GA9SPHKWJOX9LQK6FW1T4GOAS3CA' where id=2; -update noar tt set b0='NQSEROAA6FSF' where id=2; -update noar ti set b0='NQSEROAA6FSF' where id=2; -update noar tt set v0='B35I4BRVSG0KKND7JINAP3DPGG5BAM3' where id=2; -update noar ti set v0='B35I4BRVSG0KKND7JINAP3DPGG5BAM3' where id=2; -update noar tt set b1='6QSJEX0HFNW7FH104T4INL8C' where id=2; -update noar ti set b1='6QSJEX0HFNW7FH104T4INL8C' where id=2; -update noar tt set v0='8PCOHQINEVNHHH64ZJN6QUCM' where id=2; -update noar ti set v0='8PCOHQINEVNHHH64ZJN6QUCM' where id=2; -update noar tt set b2='GL' where id=2; -update noar ti set b2='GL' where id=2; -update noar tt set v0='8Y5A8V98BP7EW2TCPN5R0MXX5CEOM' where id=3; -update noar ti set v0='8Y5A8V98BP7EW2TCPN5R0MXX5CEOM' where id=3; -update noar tt set b0='T2F0EYNFVUJLJ6NQEIAIEJNOFA6' where id=3; -update noar ti set b0='T2F0EYNFVUJLJ6NQEIAIEJNOFA6' where id=3; -update noar tt set v0='IPFSEQAHHX4SDFLSWDAL' where id=3; -update noar ti set v0='IPFSEQAHHX4SDFLSWDAL' where id=3; -update noar tt set b1='V0EFFTRX5VOWYDB2067' where id=3; -update noar ti set b1='V0EFFTRX5VOWYDB2067' where id=3; -update noar tt set v0='PV41I8M1W' where id=3; -update noar ti set v0='PV41I8M1W' where id=3; -update noar tt set b2='JUA25967FMTBO7NJAOZL' where id=3; -update noar ti set b2='JUA25967FMTBO7NJAOZL' where id=3; -update noar tt set v0='CSU9SD2PYH363GU0DJDLFIZ5CFRVBG5E' where id=4; -update noar ti set v0='CSU9SD2PYH363GU0DJDLFIZ5CFRVBG5E' where id=4; -update noar tt set b0='EDK7W3NPMYPBZYMFF8LB9J3YEVNR' where id=4; -update noar ti set b0='EDK7W3NPMYPBZYMFF8LB9J3YEVNR' where id=4; -update noar tt set v0='N0LOA5RZQWY6PUDV5D1G1DHLI8' where id=4; -update noar ti set v0='N0LOA5RZQWY6PUDV5D1G1DHLI8' where id=4; -update noar tt set b1='2UNC3' where id=4; -update noar ti set b1='2UNC3' where id=4; -update noar tt set v0='U0SDKJVX9MWJ7C6G1DD30H5251NO8X' where id=4; -update noar ti set v0='U0SDKJVX9MWJ7C6G1DD30H5251NO8X' where id=4; -update noar tt set b2='34QWF0BX23CJD7O47ICQHKM21EMEK' where id=4; -update noar ti set b2='34QWF0BX23CJD7O47ICQHKM21EMEK' where id=4; -update noar tt set v0='4ZWP6TENOTG4KUO44H7VV2F8QE7P87J' where id=5; -update noar ti set v0='4ZWP6TENOTG4KUO44H7VV2F8QE7P87J' where id=5; -update noar tt set b0='DCEOZ8QWMACAJ8YEDYQOHR5' where id=5; -update noar ti set b0='DCEOZ8QWMACAJ8YEDYQOHR5' where id=5; -update noar tt set v0='20L2FONG4TR6R51A' where id=5; -update noar ti set v0='20L2FONG4TR6R51A' where id=5; -update noar tt set b1='GNYN' where id=5; -update noar ti set b1='GNYN' where id=5; -update noar tt set v0='1CE3NRRDXST3J' where id=5; -update noar ti set v0='1CE3NRRDXST3J' where id=5; -update noar tt set b2='ZL9Z473SC' where id=5; -update noar ti set b2='ZL9Z473SC' where id=5; -update noar tt set v0='CXG89W7K117LAW4PM4' where id=6; -update noar ti set v0='CXG89W7K117LAW4PM4' where id=6; -update noar tt set b0='4HYCL4K5I' where id=6; -update noar ti set b0='4HYCL4K5I' where id=6; -update noar tt set v0='4MUTIM4AVW6EM325PCKKPRBBE' where id=6; -update noar ti set v0='4MUTIM4AVW6EM325PCKKPRBBE' where id=6; -update noar tt set b1='CZMUB7LQDSO8NXPZHFFF0R3E3H5' where id=6; -update noar ti set b1='CZMUB7LQDSO8NXPZHFFF0R3E3H5' where id=6; -update noar tt set v0='22QA6ORL' where id=6; -update noar ti set v0='22QA6ORL' where id=6; -update noar tt set b2='HF3RCHN' where id=6; -update noar ti set b2='HF3RCHN' where id=6; -update noar tt set v0='AO2AK2AJKSJ5SRVZDV4MTAX0TLUY' where id=7; -update noar ti set v0='AO2AK2AJKSJ5SRVZDV4MTAX0TLUY' where id=7; -update noar tt set b0='TXNBPAKFEMVH8074UA3FS' where id=7; -update noar ti set b0='TXNBPAKFEMVH8074UA3FS' where id=7; -update noar tt set v0='36DD99P3KEX8WEFFVF' where id=7; -update noar ti set v0='36DD99P3KEX8WEFFVF' where id=7; -update noar tt set b1='W7ZI2WD' where id=7; -update noar ti set b1='W7ZI2WD' where id=7; -update noar tt set v0='W3EF5RGS' where id=7; -update noar ti set v0='W3EF5RGS' where id=7; -update noar tt set b2='IRPNKBRGTFQMAPB57MYKVD' where id=7; -update noar ti set b2='IRPNKBRGTFQMAPB57MYKVD' where id=7; -update noar tt set v0='NHU93TBBFQ7RJBC4A562GOLNSDZRGFM' where id=8; -update noar ti set v0='NHU93TBBFQ7RJBC4A562GOLNSDZRGFM' where id=8; -update noar tt set b0='MG5ILW6D4BEFDQGVF' where id=8; -update noar ti set b0='MG5ILW6D4BEFDQGVF' where id=8; -update noar tt set v0='C0QA' where id=8; -update noar ti set v0='C0QA' where id=8; -update noar tt set b1='7Q0JVX7VLC' where id=8; -update noar ti set b1='7Q0JVX7VLC' where id=8; -update noar tt set v0='2CIXW0ML6XY71' where id=8; -update noar ti set v0='2CIXW0ML6XY71' where id=8; -update noar tt set b2='3BYHJDKFSJDX1ZH52' where id=8; -update noar ti set b2='3BYHJDKFSJDX1ZH52' where id=8; -update noar tt set v0='XF7NHJ9X25DG9EW' where id=9; -update noar ti set v0='XF7NHJ9X25DG9EW' where id=9; -update noar tt set b0='BMDKZ71VYRXAZ853WHJEF131' where id=9; -update noar ti set b0='BMDKZ71VYRXAZ853WHJEF131' where id=9; -update noar tt set v0='HTOTNKI7' where id=9; -update noar ti set v0='HTOTNKI7' where id=9; -update noar tt set b1='2AAVR46M5AMJM7Z54TNJ' where id=9; -update noar ti set b1='2AAVR46M5AMJM7Z54TNJ' where id=9; -update noar tt set v0='FFNMAEX8F18QQUUQM8K09CSQI4' where id=9; -update noar ti set v0='FFNMAEX8F18QQUUQM8K09CSQI4' where id=9; -update noar tt set b2='SD05IDPKDIOFHK1AD7' where id=9; -update noar ti set b2='SD05IDPKDIOFHK1AD7' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 mediumblob not null, -b1 blob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='TDB0XNEKN6SEIE6J13SCC44P' where id=1; -update noar ti set v0='TDB0XNEKN6SEIE6J13SCC44P' where id=1; -update noar tt set b0='HF1Z1I6DH15D7SC4XZ7NSSBXKFT' where id=1; -update noar ti set b0='HF1Z1I6DH15D7SC4XZ7NSSBXKFT' where id=1; -update noar tt set v0='VL6D1ABM7O0DCTC3B9F6Y2' where id=1; -update noar ti set v0='VL6D1ABM7O0DCTC3B9F6Y2' where id=1; -update noar tt set b1='J6KQC03N9WS5T' where id=1; -update noar ti set b1='J6KQC03N9WS5T' where id=1; -update noar tt set v0='6QDTKE' where id=1; -update noar ti set v0='6QDTKE' where id=1; -update noar tt set b2='9BXKL13NWBW8X427QPWHEWXJS4' where id=1; -update noar ti set b2='9BXKL13NWBW8X427QPWHEWXJS4' where id=1; -update noar tt set v0='YU5UJPEXI1RK9Y30' where id=2; -update noar ti set v0='YU5UJPEXI1RK9Y30' where id=2; -update noar tt set b0='LHS80SHX18' where id=2; -update noar ti set b0='LHS80SHX18' where id=2; -update noar tt set v0='NS3V5N9GAT1NKNNP4KXFH5MPV9I' where id=2; -update noar ti set v0='NS3V5N9GAT1NKNNP4KXFH5MPV9I' where id=2; -update noar tt set b1='WXLEEXPX0W8PRVFSBFRZUB1' where id=2; -update noar ti set b1='WXLEEXPX0W8PRVFSBFRZUB1' where id=2; -update noar tt set v0='BBZG9VV93QW06CEUYKT0ERCSZC4HF' where id=2; -update noar ti set v0='BBZG9VV93QW06CEUYKT0ERCSZC4HF' where id=2; -update noar tt set b2='62DESWXL6R1JXMRC' where id=2; -update noar ti set b2='62DESWXL6R1JXMRC' where id=2; -update noar tt set v0='D3B93X' where id=3; -update noar ti set v0='D3B93X' where id=3; -update noar tt set b0='VMRUKMU0QM0EALZIKKEUEHZJ' where id=3; -update noar ti set b0='VMRUKMU0QM0EALZIKKEUEHZJ' where id=3; -update noar tt set v0='0A86ZGSPK94NZPA' where id=3; -update noar ti set v0='0A86ZGSPK94NZPA' where id=3; -update noar tt set b1='KRH6037' where id=3; -update noar ti set b1='KRH6037' where id=3; -update noar tt set v0='F529R0SW0' where id=3; -update noar ti set v0='F529R0SW0' where id=3; -update noar tt set b2='LE' where id=3; -update noar ti set b2='LE' where id=3; -update noar tt set v0='O51K98R1D53XEHVWLDI8T' where id=4; -update noar ti set v0='O51K98R1D53XEHVWLDI8T' where id=4; -update noar tt set b0='IZ4' where id=4; -update noar ti set b0='IZ4' where id=4; -update noar tt set v0='OP3' where id=4; -update noar ti set v0='OP3' where id=4; -update noar tt set b1='KOO39KB4M40ZTOK5W57E3K' where id=4; -update noar ti set b1='KOO39KB4M40ZTOK5W57E3K' where id=4; -update noar tt set v0='9HNNVU' where id=4; -update noar ti set v0='9HNNVU' where id=4; -update noar tt set b2='BL72X6R33KN7M0MDGUQG1844PEMUK' where id=4; -update noar ti set b2='BL72X6R33KN7M0MDGUQG1844PEMUK' where id=4; -update noar tt set v0='IB8JAVD6B11P1CKNKQ1Z7WE6COA7K' where id=5; -update noar ti set v0='IB8JAVD6B11P1CKNKQ1Z7WE6COA7K' where id=5; -update noar tt set b0='2H2I2B0QK' where id=5; -update noar ti set b0='2H2I2B0QK' where id=5; -update noar tt set v0='KZE88XM8DOPVXGH98H6XJF' where id=5; -update noar ti set v0='KZE88XM8DOPVXGH98H6XJF' where id=5; -update noar tt set b1='U0' where id=5; -update noar ti set b1='U0' where id=5; -update noar tt set v0='PXL4AOB2VX2LZAWOY' where id=5; -update noar ti set v0='PXL4AOB2VX2LZAWOY' where id=5; -update noar tt set b2='DMZPNS6RQ' where id=5; -update noar ti set b2='DMZPNS6RQ' where id=5; -update noar tt set v0='N4J5MQ' where id=6; -update noar ti set v0='N4J5MQ' where id=6; -update noar tt set b0='XTP4Q6DJ1H6NHH1DZ2X7E' where id=6; -update noar ti set b0='XTP4Q6DJ1H6NHH1DZ2X7E' where id=6; -update noar tt set v0='MFFCTTILOEY4II3F58VRQBC7WW6IPH6K' where id=6; -update noar ti set v0='MFFCTTILOEY4II3F58VRQBC7WW6IPH6K' where id=6; -update noar tt set b1='U9BN90SLUZJ' where id=6; -update noar ti set b1='U9BN90SLUZJ' where id=6; -update noar tt set v0='O7205UUWHX55MYYLOEAAEQ5DW' where id=6; -update noar ti set v0='O7205UUWHX55MYYLOEAAEQ5DW' where id=6; -update noar tt set b2='D6EBJ0N3KAQ1DFZRTSY3PH' where id=6; -update noar ti set b2='D6EBJ0N3KAQ1DFZRTSY3PH' where id=6; -update noar tt set v0='H1IEGU70Y8EKE0VQSAY' where id=7; -update noar ti set v0='H1IEGU70Y8EKE0VQSAY' where id=7; -update noar tt set b0='ACHG6DW7QLMIPUO3UOMJ7DYS9CDGPB70' where id=7; -update noar ti set b0='ACHG6DW7QLMIPUO3UOMJ7DYS9CDGPB70' where id=7; -update noar tt set v0='E5ZI' where id=7; -update noar ti set v0='E5ZI' where id=7; -update noar tt set b1='VG34IT6J6C33WOAFK' where id=7; -update noar ti set b1='VG34IT6J6C33WOAFK' where id=7; -update noar tt set v0='4H2' where id=7; -update noar ti set v0='4H2' where id=7; -update noar tt set b2='ZVWYMD' where id=7; -update noar ti set b2='ZVWYMD' where id=7; -update noar tt set v0='OF2T87N0H2TAJ7R87' where id=8; -update noar ti set v0='OF2T87N0H2TAJ7R87' where id=8; -update noar tt set b0='6F70BEJW0WBGZUJEFP3MOO' where id=8; -update noar ti set b0='6F70BEJW0WBGZUJEFP3MOO' where id=8; -update noar tt set v0='5SCFF5' where id=8; -update noar ti set v0='5SCFF5' where id=8; -update noar tt set b1='F9' where id=8; -update noar ti set b1='F9' where id=8; -update noar tt set v0='VCEYC' where id=8; -update noar ti set v0='VCEYC' where id=8; -update noar tt set b2='LYFXXSAX3KF4LCG2WG6' where id=8; -update noar ti set b2='LYFXXSAX3KF4LCG2WG6' where id=8; -update noar tt set v0='Q7HBDAKR3WKUFG8E7J' where id=9; -update noar ti set v0='Q7HBDAKR3WKUFG8E7J' where id=9; -update noar tt set b0='ZS4ZO6M2Y6O07842Y4' where id=9; -update noar ti set b0='ZS4ZO6M2Y6O07842Y4' where id=9; -update noar tt set v0='1YP259TLCFZ' where id=9; -update noar ti set v0='1YP259TLCFZ' where id=9; -update noar tt set b1='Z4I9Q13AZVG65UV8O8XJCIJQNU' where id=9; -update noar ti set b1='Z4I9Q13AZVG65UV8O8XJCIJQNU' where id=9; -update noar tt set v0='Y1CSBR491TD2P7O7PBVX5GZOYTWC6' where id=9; -update noar ti set v0='Y1CSBR491TD2P7O7PBVX5GZOYTWC6' where id=9; -update noar tt set b2='T86II1W97FJ' where id=9; -update noar ti set b2='T86II1W97FJ' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 mediumblob not null, -b1 blob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='IGKFL4WG3' where id=1; -update noar ti set v0='IGKFL4WG3' where id=1; -update noar tt set b0='DVPJCQFD' where id=1; -update noar ti set b0='DVPJCQFD' where id=1; -update noar tt set v0='QF338QJ1VB0D050POMBUHWAXF' where id=1; -update noar ti set v0='QF338QJ1VB0D050POMBUHWAXF' where id=1; -update noar tt set b1='QM8H7W5NXQJ44KV' where id=1; -update noar ti set b1='QM8H7W5NXQJ44KV' where id=1; -update noar tt set v0='XT8ZUPD38WDTQ' where id=1; -update noar ti set v0='XT8ZUPD38WDTQ' where id=1; -update noar tt set b2='BT7CH7FQ53' where id=1; -update noar ti set b2='BT7CH7FQ53' where id=1; -update noar tt set v0='LCF861RM1M8FJAE82PQ' where id=2; -update noar ti set v0='LCF861RM1M8FJAE82PQ' where id=2; -update noar tt set b0='P7PRND4OFZ8GA62MIK96FSB6PX4' where id=2; -update noar ti set b0='P7PRND4OFZ8GA62MIK96FSB6PX4' where id=2; -update noar tt set v0='41LF' where id=2; -update noar ti set v0='41LF' where id=2; -update noar tt set b1='WF1U' where id=2; -update noar ti set b1='WF1U' where id=2; -update noar tt set v0='M' where id=2; -update noar ti set v0='M' where id=2; -update noar tt set b2='GR0VTMZ270BTZ0UPJDHELM1QV7SJ6O' where id=2; -update noar ti set b2='GR0VTMZ270BTZ0UPJDHELM1QV7SJ6O' where id=2; -update noar tt set v0='70ROSZ254I4NTDZLZZRAL0F03F' where id=3; -update noar ti set v0='70ROSZ254I4NTDZLZZRAL0F03F' where id=3; -update noar tt set b0='CVDAN1DN9' where id=3; -update noar ti set b0='CVDAN1DN9' where id=3; -update noar tt set v0='B9' where id=3; -update noar ti set v0='B9' where id=3; -update noar tt set b1='9BNQ' where id=3; -update noar ti set b1='9BNQ' where id=3; -update noar tt set v0='ISDDR7MD2IV7QU' where id=3; -update noar ti set v0='ISDDR7MD2IV7QU' where id=3; -update noar tt set b2='IY37D93XDNFNW' where id=3; -update noar ti set b2='IY37D93XDNFNW' where id=3; -update noar tt set v0='MNAX' where id=4; -update noar ti set v0='MNAX' where id=4; -update noar tt set b0='OJA4P1VJYH7C2VCBDU4EPNF5UAYDXPJ' where id=4; -update noar ti set b0='OJA4P1VJYH7C2VCBDU4EPNF5UAYDXPJ' where id=4; -update noar tt set v0='MU8ZVRAQ1RZKEVPH6NRSAK8X0' where id=4; -update noar ti set v0='MU8ZVRAQ1RZKEVPH6NRSAK8X0' where id=4; -update noar tt set b1='QHXII8ZKIBZF9GA73NZ' where id=4; -update noar ti set b1='QHXII8ZKIBZF9GA73NZ' where id=4; -update noar tt set v0='1SR1KNF7DAWK2J60ZZDMKIE9N0VPGVI' where id=4; -update noar ti set v0='1SR1KNF7DAWK2J60ZZDMKIE9N0VPGVI' where id=4; -update noar tt set b2='NFEUT3ZV6WGU4ZGC3A05NJA29MVJM7J' where id=4; -update noar ti set b2='NFEUT3ZV6WGU4ZGC3A05NJA29MVJM7J' where id=4; -update noar tt set v0='0QVJ8144RLXMSE99' where id=5; -update noar ti set v0='0QVJ8144RLXMSE99' where id=5; -update noar tt set b0='LUH7C7XZOSD8ZHEE2A77XPU1R46ADGL9' where id=5; -update noar ti set b0='LUH7C7XZOSD8ZHEE2A77XPU1R46ADGL9' where id=5; -update noar tt set v0='NCVEQTQ128JHYQ7VCMNC6RG' where id=5; -update noar ti set v0='NCVEQTQ128JHYQ7VCMNC6RG' where id=5; -update noar tt set b1='E3AUDPD5GU4PJIW0XIY6TH4' where id=5; -update noar ti set b1='E3AUDPD5GU4PJIW0XIY6TH4' where id=5; -update noar tt set v0='ALAKKAPWJR9FYXE6VP85LOW' where id=5; -update noar ti set v0='ALAKKAPWJR9FYXE6VP85LOW' where id=5; -update noar tt set b2='MQN' where id=5; -update noar ti set b2='MQN' where id=5; -update noar tt set v0='IWVWJ9ZVXW2JOAYJFG8KYMWXUF' where id=6; -update noar ti set v0='IWVWJ9ZVXW2JOAYJFG8KYMWXUF' where id=6; -update noar tt set b0='P8IW5K5TSW8PMEKGP4ZWGFR671WUQJ' where id=6; -update noar ti set b0='P8IW5K5TSW8PMEKGP4ZWGFR671WUQJ' where id=6; -update noar tt set v0='0' where id=6; -update noar ti set v0='0' where id=6; -update noar tt set b1='DBTIGJ3OL' where id=6; -update noar ti set b1='DBTIGJ3OL' where id=6; -update noar tt set v0='K9TU8ICNYTNOQK678IRSWUHQZSTLT' where id=6; -update noar ti set v0='K9TU8ICNYTNOQK678IRSWUHQZSTLT' where id=6; -update noar tt set b2='G1SPT1' where id=6; -update noar ti set b2='G1SPT1' where id=6; -update noar tt set v0='B6H2FJ0H9SW' where id=7; -update noar ti set v0='B6H2FJ0H9SW' where id=7; -update noar tt set b0='SGO7ZYPAFTA5BRQ4TQH2QT1CF3' where id=7; -update noar ti set b0='SGO7ZYPAFTA5BRQ4TQH2QT1CF3' where id=7; -update noar tt set v0='6GJPV9ERN72T0LB1UBL5YSQXO76I' where id=7; -update noar ti set v0='6GJPV9ERN72T0LB1UBL5YSQXO76I' where id=7; -update noar tt set b1='CO3Y7S0NQNM' where id=7; -update noar ti set b1='CO3Y7S0NQNM' where id=7; -update noar tt set v0='JQ4JAI0DKXGZAF54ZN1WM3TV3MSI' where id=7; -update noar ti set v0='JQ4JAI0DKXGZAF54ZN1WM3TV3MSI' where id=7; -update noar tt set b2='KPZ03UC4Z6CIV07JR2P54AR0R95' where id=7; -update noar ti set b2='KPZ03UC4Z6CIV07JR2P54AR0R95' where id=7; -update noar tt set v0='BICODOUW059Y0PEO4Q4WS' where id=8; -update noar ti set v0='BICODOUW059Y0PEO4Q4WS' where id=8; -update noar tt set b0='J0SCKLLLTZY2MNZS3WUR' where id=8; -update noar ti set b0='J0SCKLLLTZY2MNZS3WUR' where id=8; -update noar tt set v0='27ANXJ26DAL9JL5D6F10867EYI85' where id=8; -update noar ti set v0='27ANXJ26DAL9JL5D6F10867EYI85' where id=8; -update noar tt set b1='WQVV09UCZ3' where id=8; -update noar ti set b1='WQVV09UCZ3' where id=8; -update noar tt set v0='KXI126UJEIBYGEK0UN2M9RA2ZE6' where id=8; -update noar ti set v0='KXI126UJEIBYGEK0UN2M9RA2ZE6' where id=8; -update noar tt set b2='02CWRB6EEJZAHRUWK0QAN5XBCGD5H' where id=8; -update noar ti set b2='02CWRB6EEJZAHRUWK0QAN5XBCGD5H' where id=8; -update noar tt set v0='RUB04G2OPFFPVZLLFB' where id=9; -update noar ti set v0='RUB04G2OPFFPVZLLFB' where id=9; -update noar tt set b0='WIEK856NKM586SBBOY7UKMWXQ8D74LWX' where id=9; -update noar ti set b0='WIEK856NKM586SBBOY7UKMWXQ8D74LWX' where id=9; -update noar tt set v0='HCZEHMFLF' where id=9; -update noar ti set v0='HCZEHMFLF' where id=9; -update noar tt set b1='WP039LEGOIQUESIV4OQU0ECTQH' where id=9; -update noar ti set b1='WP039LEGOIQUESIV4OQU0ECTQH' where id=9; -update noar tt set v0='RFKHKT' where id=9; -update noar ti set v0='RFKHKT' where id=9; -update noar tt set b2='QOXKBTVJPDJU7' where id=9; -update noar ti set b2='QOXKBTVJPDJU7' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 mediumblob null, -b1 blob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='90JH9JCXYSQHPI5XRY02G3S8834ZNRVH' where id=1; -update noar ti set v0='90JH9JCXYSQHPI5XRY02G3S8834ZNRVH' where id=1; -update noar tt set b0='NFS7IENZ933UAA2G7201TFFVKZ' where id=1; -update noar ti set b0='NFS7IENZ933UAA2G7201TFFVKZ' where id=1; -update noar tt set v0='V8BDNVM' where id=1; -update noar ti set v0='V8BDNVM' where id=1; -update noar tt set b1='S33OPPVOY' where id=1; -update noar ti set b1='S33OPPVOY' where id=1; -update noar tt set v0='G45V1J19G0KF3AT' where id=1; -update noar ti set v0='G45V1J19G0KF3AT' where id=1; -update noar tt set b2='D7OKFH4KWB' where id=1; -update noar ti set b2='D7OKFH4KWB' where id=1; -update noar tt set v0='ULE71DP70EUEV3' where id=2; -update noar ti set v0='ULE71DP70EUEV3' where id=2; -update noar tt set b0='KQNMZYVTGAJ' where id=2; -update noar ti set b0='KQNMZYVTGAJ' where id=2; -update noar tt set v0='PB53TL593ZQDB4MUJBHUAKVU39XE2P8' where id=2; -update noar ti set v0='PB53TL593ZQDB4MUJBHUAKVU39XE2P8' where id=2; -update noar tt set b1='AFPDV' where id=2; -update noar ti set b1='AFPDV' where id=2; -update noar tt set v0='8V3DIQB9I9AMHL2WOPC62ZPU' where id=2; -update noar ti set v0='8V3DIQB9I9AMHL2WOPC62ZPU' where id=2; -update noar tt set b2='035LJ8JWYVC4KTMUU' where id=2; -update noar ti set b2='035LJ8JWYVC4KTMUU' where id=2; -update noar tt set v0='TI4W' where id=3; -update noar ti set v0='TI4W' where id=3; -update noar tt set b0='HPHIYCBE3GHQF8FRJRQB4' where id=3; -update noar ti set b0='HPHIYCBE3GHQF8FRJRQB4' where id=3; -update noar tt set v0='5WZOJN4' where id=3; -update noar ti set v0='5WZOJN4' where id=3; -update noar tt set b1='XT2' where id=3; -update noar ti set b1='XT2' where id=3; -update noar tt set v0='260YNAXJ0HTEBQL' where id=3; -update noar ti set v0='260YNAXJ0HTEBQL' where id=3; -update noar tt set b2='KZFE7Z3VZNQBSSA3OPAU' where id=3; -update noar ti set b2='KZFE7Z3VZNQBSSA3OPAU' where id=3; -update noar tt set v0='WZ23GI' where id=4; -update noar ti set v0='WZ23GI' where id=4; -update noar tt set b0='SVTOQ0JEJJKZFHVOYN96NU98ZKK1' where id=4; -update noar ti set b0='SVTOQ0JEJJKZFHVOYN96NU98ZKK1' where id=4; -update noar tt set v0='Q9' where id=4; -update noar ti set v0='Q9' where id=4; -update noar tt set b1='4' where id=4; -update noar ti set b1='4' where id=4; -update noar tt set v0='TW206QEY0AHCEF3R6597V9GYUG62' where id=4; -update noar ti set v0='TW206QEY0AHCEF3R6597V9GYUG62' where id=4; -update noar tt set b2='2Z2XOO650CW6KL79V' where id=4; -update noar ti set b2='2Z2XOO650CW6KL79V' where id=4; -update noar tt set v0='4IRSK87QL41S61MX5IHDE0XRFLC' where id=5; -update noar ti set v0='4IRSK87QL41S61MX5IHDE0XRFLC' where id=5; -update noar tt set b0='IJO' where id=5; -update noar ti set b0='IJO' where id=5; -update noar tt set v0='A7A58GH43OTRJRL' where id=5; -update noar ti set v0='A7A58GH43OTRJRL' where id=5; -update noar tt set b1='K8VS8QQYJHBL5YRS' where id=5; -update noar ti set b1='K8VS8QQYJHBL5YRS' where id=5; -update noar tt set v0='41RFQRYTQLSWYWAU5' where id=5; -update noar ti set v0='41RFQRYTQLSWYWAU5' where id=5; -update noar tt set b2='9I307GJ2RR87G' where id=5; -update noar ti set b2='9I307GJ2RR87G' where id=5; -update noar tt set v0='IJXHXCX416P4L1YITQXJM' where id=6; -update noar ti set v0='IJXHXCX416P4L1YITQXJM' where id=6; -update noar tt set b0='OE3NV57EM9KUJC9BGYQ190DY3IE' where id=6; -update noar ti set b0='OE3NV57EM9KUJC9BGYQ190DY3IE' where id=6; -update noar tt set v0='3TS87BVZDP2KFBY9OSLGBXRE' where id=6; -update noar ti set v0='3TS87BVZDP2KFBY9OSLGBXRE' where id=6; -update noar tt set b1='FMS1EY3RZ5GT8FS' where id=6; -update noar ti set b1='FMS1EY3RZ5GT8FS' where id=6; -update noar tt set v0='MQXQV9X81EUG2WLCZEBWC9R3FKDL' where id=6; -update noar ti set v0='MQXQV9X81EUG2WLCZEBWC9R3FKDL' where id=6; -update noar tt set b2='X3IJJZP37MMKTL' where id=6; -update noar ti set b2='X3IJJZP37MMKTL' where id=6; -update noar tt set v0='X7' where id=7; -update noar ti set v0='X7' where id=7; -update noar tt set b0='CB7KZXWCEAZOGJQQUF' where id=7; -update noar ti set b0='CB7KZXWCEAZOGJQQUF' where id=7; -update noar tt set v0='ZN1EXMEX3I78YNO57WFO8J1' where id=7; -update noar ti set v0='ZN1EXMEX3I78YNO57WFO8J1' where id=7; -update noar tt set b1='PHZ5BT8KXLLCKARPTI61U6AN' where id=7; -update noar ti set b1='PHZ5BT8KXLLCKARPTI61U6AN' where id=7; -update noar tt set v0='49PDZV4AN1TF59OIY0U' where id=7; -update noar ti set v0='49PDZV4AN1TF59OIY0U' where id=7; -update noar tt set b2='NUWZ3EM87ZOQDZP02GA' where id=7; -update noar ti set b2='NUWZ3EM87ZOQDZP02GA' where id=7; -update noar tt set v0='0HQ8ZSP8TF8WXMLN2LAFP3URKT888TT5' where id=8; -update noar ti set v0='0HQ8ZSP8TF8WXMLN2LAFP3URKT888TT5' where id=8; -update noar tt set b0='ZQ4SWQW8GPQW3G4RTBM7WC' where id=8; -update noar ti set b0='ZQ4SWQW8GPQW3G4RTBM7WC' where id=8; -update noar tt set v0='EC9I07HL5JCIKBG107OKZHY3JC' where id=8; -update noar ti set v0='EC9I07HL5JCIKBG107OKZHY3JC' where id=8; -update noar tt set b1='N7IHW8R8758T' where id=8; -update noar ti set b1='N7IHW8R8758T' where id=8; -update noar tt set v0='XQU68C3V8BMY1' where id=8; -update noar ti set v0='XQU68C3V8BMY1' where id=8; -update noar tt set b2='X6SMDBM47TP4SUYWHFLZBSO' where id=8; -update noar ti set b2='X6SMDBM47TP4SUYWHFLZBSO' where id=8; -update noar tt set v0='S7HM16ES' where id=9; -update noar ti set v0='S7HM16ES' where id=9; -update noar tt set b0='EBI6UIYSAKYHSLFHNER6E' where id=9; -update noar ti set b0='EBI6UIYSAKYHSLFHNER6E' where id=9; -update noar tt set v0='1X3AYKJ0H291Z1B' where id=9; -update noar ti set v0='1X3AYKJ0H291Z1B' where id=9; -update noar tt set b1='YW91JJKQ3G27RLB93BO0AH' where id=9; -update noar ti set b1='YW91JJKQ3G27RLB93BO0AH' where id=9; -update noar tt set v0='TS22Q27WI2T' where id=9; -update noar ti set v0='TS22Q27WI2T' where id=9; -update noar tt set b2='7OBW6SE79MTOPZ8Z5XKB0' where id=9; -update noar ti set b2='7OBW6SE79MTOPZ8Z5XKB0' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 mediumblob null, -b1 blob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='G4' where id=1; -update noar ti set v0='G4' where id=1; -update noar tt set b0='XH6LPCWIBGE7U3AR' where id=1; -update noar ti set b0='XH6LPCWIBGE7U3AR' where id=1; -update noar tt set v0='MMKJLE2N6DP8' where id=1; -update noar ti set v0='MMKJLE2N6DP8' where id=1; -update noar tt set b1='AVXULQ6J9FP4MFR8IDCVEM7K8' where id=1; -update noar ti set b1='AVXULQ6J9FP4MFR8IDCVEM7K8' where id=1; -update noar tt set v0='VQJ' where id=1; -update noar ti set v0='VQJ' where id=1; -update noar tt set b2='LDWWWO36CLHH3L5H24QY2' where id=1; -update noar ti set b2='LDWWWO36CLHH3L5H24QY2' where id=1; -update noar tt set v0='03E1MHHYX6R49QGW6H7LYM6NUDKLE6' where id=2; -update noar ti set v0='03E1MHHYX6R49QGW6H7LYM6NUDKLE6' where id=2; -update noar tt set b0='3VN6K5WUEGSWEJY7245' where id=2; -update noar ti set b0='3VN6K5WUEGSWEJY7245' where id=2; -update noar tt set v0='9S7032YS8T4JCKJCUST9XJ5' where id=2; -update noar ti set v0='9S7032YS8T4JCKJCUST9XJ5' where id=2; -update noar tt set b1='6' where id=2; -update noar ti set b1='6' where id=2; -update noar tt set v0='0M7MZB' where id=2; -update noar ti set v0='0M7MZB' where id=2; -update noar tt set b2='28J2KK5LULHTNW' where id=2; -update noar ti set b2='28J2KK5LULHTNW' where id=2; -update noar tt set v0='GEAQPS0MZ3' where id=3; -update noar ti set v0='GEAQPS0MZ3' where id=3; -update noar tt set b0='IO6J' where id=3; -update noar ti set b0='IO6J' where id=3; -update noar tt set v0='4B1HER5' where id=3; -update noar ti set v0='4B1HER5' where id=3; -update noar tt set b1='RCGLKC3DBFLRT4XE5CTVEL3KKDR' where id=3; -update noar ti set b1='RCGLKC3DBFLRT4XE5CTVEL3KKDR' where id=3; -update noar tt set v0='RITASI9U8PUUZ380ERYUD5' where id=3; -update noar ti set v0='RITASI9U8PUUZ380ERYUD5' where id=3; -update noar tt set b2='8XEQG44B8U1K4U5RJ1' where id=3; -update noar ti set b2='8XEQG44B8U1K4U5RJ1' where id=3; -update noar tt set v0='MSS0S0VYE8NUX' where id=4; -update noar ti set v0='MSS0S0VYE8NUX' where id=4; -update noar tt set b0='L' where id=4; -update noar ti set b0='L' where id=4; -update noar tt set v0='1JS3WP30RW08VIPB' where id=4; -update noar ti set v0='1JS3WP30RW08VIPB' where id=4; -update noar tt set b1='VUC7XW6P' where id=4; -update noar ti set b1='VUC7XW6P' where id=4; -update noar tt set v0='J8GKS6C9NINBCJBSKNSP8UR4ODQ63S' where id=4; -update noar ti set v0='J8GKS6C9NINBCJBSKNSP8UR4ODQ63S' where id=4; -update noar tt set b2='MFDJ3WFZL6BIW4N' where id=4; -update noar ti set b2='MFDJ3WFZL6BIW4N' where id=4; -update noar tt set v0='HUPTWNX9D' where id=5; -update noar ti set v0='HUPTWNX9D' where id=5; -update noar tt set b0='0' where id=5; -update noar ti set b0='0' where id=5; -update noar tt set v0='9E1PA6K5TBTO3E' where id=5; -update noar ti set v0='9E1PA6K5TBTO3E' where id=5; -update noar tt set b1='TG5HB6BO0U8SBZUCC' where id=5; -update noar ti set b1='TG5HB6BO0U8SBZUCC' where id=5; -update noar tt set v0='Z0N1Z0TDQ551OX82R04B5CNP' where id=5; -update noar ti set v0='Z0N1Z0TDQ551OX82R04B5CNP' where id=5; -update noar tt set b2='YJW7SAQ' where id=5; -update noar ti set b2='YJW7SAQ' where id=5; -update noar tt set v0='5JN863S' where id=6; -update noar ti set v0='5JN863S' where id=6; -update noar tt set b0='G5419V4S4HPN8I45EOD01' where id=6; -update noar ti set b0='G5419V4S4HPN8I45EOD01' where id=6; -update noar tt set v0='A5JY24D06HBDSVT6CEJI95O4PY7V6' where id=6; -update noar ti set v0='A5JY24D06HBDSVT6CEJI95O4PY7V6' where id=6; -update noar tt set b1='BQH1023SCHEIP7VZ9CL' where id=6; -update noar ti set b1='BQH1023SCHEIP7VZ9CL' where id=6; -update noar tt set v0='4GMD35TKQS3GL5EXZD' where id=6; -update noar ti set v0='4GMD35TKQS3GL5EXZD' where id=6; -update noar tt set b2='U4' where id=6; -update noar ti set b2='U4' where id=6; -update noar tt set v0='YQY91HGT6CZXPZ6FS654PI222M5JN' where id=7; -update noar ti set v0='YQY91HGT6CZXPZ6FS654PI222M5JN' where id=7; -update noar tt set b0='OCS6' where id=7; -update noar ti set b0='OCS6' where id=7; -update noar tt set v0='O9OD4U5EBJ163500XCIGXLY16E0WZ5PG' where id=7; -update noar ti set v0='O9OD4U5EBJ163500XCIGXLY16E0WZ5PG' where id=7; -update noar tt set b1='M5TC854Z3OIMPUH7OY1BFMZZDA' where id=7; -update noar ti set b1='M5TC854Z3OIMPUH7OY1BFMZZDA' where id=7; -update noar tt set v0='XL814W' where id=7; -update noar ti set v0='XL814W' where id=7; -update noar tt set b2='VK0ET6BNDNTEAW2MHXH3EQNM0G' where id=7; -update noar ti set b2='VK0ET6BNDNTEAW2MHXH3EQNM0G' where id=7; -update noar tt set v0='P7F53' where id=8; -update noar ti set v0='P7F53' where id=8; -update noar tt set b0='5RYHDUJ06' where id=8; -update noar ti set b0='5RYHDUJ06' where id=8; -update noar tt set v0='5G4X0PNV1DF5YDXBI80FFIYJAB3T7' where id=8; -update noar ti set v0='5G4X0PNV1DF5YDXBI80FFIYJAB3T7' where id=8; -update noar tt set b1='2WF5UJ0FN150C' where id=8; -update noar ti set b1='2WF5UJ0FN150C' where id=8; -update noar tt set v0='6Q2HOPX09K3ZYJP18LZ5HW4W3HI6' where id=8; -update noar ti set v0='6Q2HOPX09K3ZYJP18LZ5HW4W3HI6' where id=8; -update noar tt set b2='86TITEDXSTRL1EJ7EK76X2Z9L72LI' where id=8; -update noar ti set b2='86TITEDXSTRL1EJ7EK76X2Z9L72LI' where id=8; -update noar tt set v0='4' where id=9; -update noar ti set v0='4' where id=9; -update noar tt set b0='LIZ6X7OOK1GBKH' where id=9; -update noar ti set b0='LIZ6X7OOK1GBKH' where id=9; -update noar tt set v0='9NHM1W' where id=9; -update noar ti set v0='9NHM1W' where id=9; -update noar tt set b1='EUSA3G4DCKIFBC79MHH' where id=9; -update noar ti set b1='EUSA3G4DCKIFBC79MHH' where id=9; -update noar tt set v0='6ZF0OC6RE7' where id=9; -update noar ti set v0='6ZF0OC6RE7' where id=9; -update noar tt set b2='W3CQ5DV9L5IYL5O46PRS7OOH' where id=9; -update noar ti set b2='W3CQ5DV9L5IYL5O46PRS7OOH' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 mediumblob not null, -b1 blob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='7B8FQ73YEJGZHENXAJ43UG3ZWS' where id=1; -update noar ti set v0='7B8FQ73YEJGZHENXAJ43UG3ZWS' where id=1; -update noar tt set b0='C1XZECMEXQQ85MWO702HDNF42II' where id=1; -update noar ti set b0='C1XZECMEXQQ85MWO702HDNF42II' where id=1; -update noar tt set v0='NJ1O4XLSF8AK' where id=1; -update noar ti set v0='NJ1O4XLSF8AK' where id=1; -update noar tt set b1='UB1I471NRUS' where id=1; -update noar ti set b1='UB1I471NRUS' where id=1; -update noar tt set v0='TY2ASUFN9JITJKX673UE' where id=1; -update noar ti set v0='TY2ASUFN9JITJKX673UE' where id=1; -update noar tt set b2='0H2RIMLRBQHRHZK03MYDGDZJTZ' where id=1; -update noar ti set b2='0H2RIMLRBQHRHZK03MYDGDZJTZ' where id=1; -update noar tt set v0='3FGT69LXG0L9XYPA09562K' where id=2; -update noar ti set v0='3FGT69LXG0L9XYPA09562K' where id=2; -update noar tt set b0='24NWM5SYSH99NY6NFQYSMSLDFL4P' where id=2; -update noar ti set b0='24NWM5SYSH99NY6NFQYSMSLDFL4P' where id=2; -update noar tt set v0='SRRX01W2BP76FAXDO' where id=2; -update noar ti set v0='SRRX01W2BP76FAXDO' where id=2; -update noar tt set b1='XRKFA1V97JLR3YLEK9BT37866T7O' where id=2; -update noar ti set b1='XRKFA1V97JLR3YLEK9BT37866T7O' where id=2; -update noar tt set v0='XHBWXK2YDGJL8K34GPC6B2D24Z4H5T91' where id=2; -update noar ti set v0='XHBWXK2YDGJL8K34GPC6B2D24Z4H5T91' where id=2; -update noar tt set b2='V3GBL9VLPU' where id=2; -update noar ti set b2='V3GBL9VLPU' where id=2; -update noar tt set v0='65VU4N4740WRVHVLDHA1I3' where id=3; -update noar ti set v0='65VU4N4740WRVHVLDHA1I3' where id=3; -update noar tt set b0='NIZU7BVBJUWX' where id=3; -update noar ti set b0='NIZU7BVBJUWX' where id=3; -update noar tt set v0='3T8QAATEOX7RYZKGAAVWKGFKB2' where id=3; -update noar ti set v0='3T8QAATEOX7RYZKGAAVWKGFKB2' where id=3; -update noar tt set b1='LKIFY' where id=3; -update noar ti set b1='LKIFY' where id=3; -update noar tt set v0='2VE' where id=3; -update noar ti set v0='2VE' where id=3; -update noar tt set b2='23PKF53QJK07BFDEF0TTV5' where id=3; -update noar ti set b2='23PKF53QJK07BFDEF0TTV5' where id=3; -update noar tt set v0='77' where id=4; -update noar ti set v0='77' where id=4; -update noar tt set b0='XIHVIHJ3L4LF1B6ES3' where id=4; -update noar ti set b0='XIHVIHJ3L4LF1B6ES3' where id=4; -update noar tt set v0='SKAUW22O1639PDHUM1FEZT2TKN44KN6O' where id=4; -update noar ti set v0='SKAUW22O1639PDHUM1FEZT2TKN44KN6O' where id=4; -update noar tt set b1='YI23NFUNCOEW3DGYJ51PPBOX27H' where id=4; -update noar ti set b1='YI23NFUNCOEW3DGYJ51PPBOX27H' where id=4; -update noar tt set v0='CEBPYVVT9DKIFF7YR3X2HVQ9' where id=4; -update noar ti set v0='CEBPYVVT9DKIFF7YR3X2HVQ9' where id=4; -update noar tt set b2='W33XOOJ' where id=4; -update noar ti set b2='W33XOOJ' where id=4; -update noar tt set v0='DYQO4K9X81VBRDEL' where id=5; -update noar ti set v0='DYQO4K9X81VBRDEL' where id=5; -update noar tt set b0='MD1CAIOSPXH1EX3YQGIJ9C' where id=5; -update noar ti set b0='MD1CAIOSPXH1EX3YQGIJ9C' where id=5; -update noar tt set v0='CEYMXL' where id=5; -update noar ti set v0='CEYMXL' where id=5; -update noar tt set b1='1TKM9O70B' where id=5; -update noar ti set b1='1TKM9O70B' where id=5; -update noar tt set v0='D15WZM1ZZAJYEB7E5OCJ' where id=5; -update noar ti set v0='D15WZM1ZZAJYEB7E5OCJ' where id=5; -update noar tt set b2='02' where id=5; -update noar ti set b2='02' where id=5; -update noar tt set v0='ZMGH3HEHNCWOB73J69KS' where id=6; -update noar ti set v0='ZMGH3HEHNCWOB73J69KS' where id=6; -update noar tt set b0='6ZRSRCKXIFVT33H9009L2FVLV' where id=6; -update noar ti set b0='6ZRSRCKXIFVT33H9009L2FVLV' where id=6; -update noar tt set v0='TVMU0MUTHDP71DB9LO' where id=6; -update noar ti set v0='TVMU0MUTHDP71DB9LO' where id=6; -update noar tt set b1='BBQXANP967V1SJL04RFQ32Z5NNG4M1T' where id=6; -update noar ti set b1='BBQXANP967V1SJL04RFQ32Z5NNG4M1T' where id=6; -update noar tt set v0='CNY3METERU7LAQ' where id=6; -update noar ti set v0='CNY3METERU7LAQ' where id=6; -update noar tt set b2='8L7J1EA9I4' where id=6; -update noar ti set b2='8L7J1EA9I4' where id=6; -update noar tt set v0='BZYO0JBFR3C92Z5KTYLZ' where id=7; -update noar ti set v0='BZYO0JBFR3C92Z5KTYLZ' where id=7; -update noar tt set b0='RYA22F622D1NE7JA8Y62A0EK8' where id=7; -update noar ti set b0='RYA22F622D1NE7JA8Y62A0EK8' where id=7; -update noar tt set v0='A3BZKLMK7DDTK4V510NOH1GBRYSE9JJ' where id=7; -update noar ti set v0='A3BZKLMK7DDTK4V510NOH1GBRYSE9JJ' where id=7; -update noar tt set b1='EMVLE7F3J9W3HZRXZQRBRX' where id=7; -update noar ti set b1='EMVLE7F3J9W3HZRXZQRBRX' where id=7; -update noar tt set v0='K' where id=7; -update noar ti set v0='K' where id=7; -update noar tt set b2='LXAVN' where id=7; -update noar ti set b2='LXAVN' where id=7; -update noar tt set v0='K' where id=8; -update noar ti set v0='K' where id=8; -update noar tt set b0='80YAXMS7Z6' where id=8; -update noar ti set b0='80YAXMS7Z6' where id=8; -update noar tt set v0='00HV5QHL7BGDF7KK6' where id=8; -update noar ti set v0='00HV5QHL7BGDF7KK6' where id=8; -update noar tt set b1='94O3H18FPQ2JVDSXQ1FPO8IN7TK' where id=8; -update noar ti set b1='94O3H18FPQ2JVDSXQ1FPO8IN7TK' where id=8; -update noar tt set v0='YRF744QRP1QD1M' where id=8; -update noar ti set v0='YRF744QRP1QD1M' where id=8; -update noar tt set b2='A71EQS4QAL7N' where id=8; -update noar ti set b2='A71EQS4QAL7N' where id=8; -update noar tt set v0='A7OP6WTJTPCW35089J' where id=9; -update noar ti set v0='A7OP6WTJTPCW35089J' where id=9; -update noar tt set b0='T7HJ691SN1T7' where id=9; -update noar ti set b0='T7HJ691SN1T7' where id=9; -update noar tt set v0='XUYEHWRRDKMB00MC4' where id=9; -update noar ti set v0='XUYEHWRRDKMB00MC4' where id=9; -update noar tt set b1='F4BA1MN632ESHVT7NVD4ZIA4' where id=9; -update noar ti set b1='F4BA1MN632ESHVT7NVD4ZIA4' where id=9; -update noar tt set v0='YR4OIB04J3A9E7U2U' where id=9; -update noar ti set v0='YR4OIB04J3A9E7U2U' where id=9; -update noar tt set b2='8' where id=9; -update noar ti set b2='8' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 mediumblob not null, -b1 blob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='7S14B59AS35GC' where id=1; -update noar ti set v0='7S14B59AS35GC' where id=1; -update noar tt set b0='KN8YTWFLVPSGN4JUXHGF9T8YE' where id=1; -update noar ti set b0='KN8YTWFLVPSGN4JUXHGF9T8YE' where id=1; -update noar tt set v0='Z3Z' where id=1; -update noar ti set v0='Z3Z' where id=1; -update noar tt set b1='24S6JMFII5HYNSI' where id=1; -update noar ti set b1='24S6JMFII5HYNSI' where id=1; -update noar tt set v0='WKS' where id=1; -update noar ti set v0='WKS' where id=1; -update noar tt set b2='1DHIDHUA8X1AEXYVAHM6X7Q' where id=1; -update noar ti set b2='1DHIDHUA8X1AEXYVAHM6X7Q' where id=1; -update noar tt set v0='OC9EXECYRG4FQ2V8R2J3WERD' where id=2; -update noar ti set v0='OC9EXECYRG4FQ2V8R2J3WERD' where id=2; -update noar tt set b0='EET6UW7Y3078K3H9J7' where id=2; -update noar ti set b0='EET6UW7Y3078K3H9J7' where id=2; -update noar tt set v0='FA8X2M9M' where id=2; -update noar ti set v0='FA8X2M9M' where id=2; -update noar tt set b1='G' where id=2; -update noar ti set b1='G' where id=2; -update noar tt set v0='7XR4CKJ6IFDD1UM25F7' where id=2; -update noar ti set v0='7XR4CKJ6IFDD1UM25F7' where id=2; -update noar tt set b2='MSL0FLBNQ6NE2PG839WDNLPK6O2ENW' where id=2; -update noar ti set b2='MSL0FLBNQ6NE2PG839WDNLPK6O2ENW' where id=2; -update noar tt set v0='WDJKZXXI4FE' where id=3; -update noar ti set v0='WDJKZXXI4FE' where id=3; -update noar tt set b0='OSXR6QWOSPHFF' where id=3; -update noar ti set b0='OSXR6QWOSPHFF' where id=3; -update noar tt set v0='USU3W' where id=3; -update noar ti set v0='USU3W' where id=3; -update noar tt set b1='VX' where id=3; -update noar ti set b1='VX' where id=3; -update noar tt set v0='ZCQG3VMYJ2CR4LSBUQW44' where id=3; -update noar ti set v0='ZCQG3VMYJ2CR4LSBUQW44' where id=3; -update noar tt set b2='FFVQG21R9JISEKPKADFIJZVZGEO5J3BW' where id=3; -update noar ti set b2='FFVQG21R9JISEKPKADFIJZVZGEO5J3BW' where id=3; -update noar tt set v0='3PGN5LMSE' where id=4; -update noar ti set v0='3PGN5LMSE' where id=4; -update noar tt set b0='F3JGST' where id=4; -update noar ti set b0='F3JGST' where id=4; -update noar tt set v0='6WFBZVU50BEDL5US0AHBR94E3TJ' where id=4; -update noar ti set v0='6WFBZVU50BEDL5US0AHBR94E3TJ' where id=4; -update noar tt set b1='4P9QMI8ND' where id=4; -update noar ti set b1='4P9QMI8ND' where id=4; -update noar tt set v0='QZ8VMGWFLML6MS0KXG6IR8VVIVI' where id=4; -update noar ti set v0='QZ8VMGWFLML6MS0KXG6IR8VVIVI' where id=4; -update noar tt set b2='B0AQGVNEIHKFC8GNLOTW' where id=4; -update noar ti set b2='B0AQGVNEIHKFC8GNLOTW' where id=4; -update noar tt set v0='ULWJ4O4GZPO74SQYVX5R2C' where id=5; -update noar ti set v0='ULWJ4O4GZPO74SQYVX5R2C' where id=5; -update noar tt set b0='B47P87GW7HGNCJ7Q6J1V4R3HAN0Z' where id=5; -update noar ti set b0='B47P87GW7HGNCJ7Q6J1V4R3HAN0Z' where id=5; -update noar tt set v0='SPIOZOFBJ751HYZK4GXY0WW' where id=5; -update noar ti set v0='SPIOZOFBJ751HYZK4GXY0WW' where id=5; -update noar tt set b1='7O0ZNTD787TSZ0S0KI3WMD4VBQ' where id=5; -update noar ti set b1='7O0ZNTD787TSZ0S0KI3WMD4VBQ' where id=5; -update noar tt set v0='3F' where id=5; -update noar ti set v0='3F' where id=5; -update noar tt set b2='MDU46LH5OILXALG4O89A' where id=5; -update noar ti set b2='MDU46LH5OILXALG4O89A' where id=5; -update noar tt set v0='GO87SKZD39NOF2VNSXW54ZRI8HFYLM' where id=6; -update noar ti set v0='GO87SKZD39NOF2VNSXW54ZRI8HFYLM' where id=6; -update noar tt set b0='1B299U729Y5GTU9XYQ6WKP' where id=6; -update noar ti set b0='1B299U729Y5GTU9XYQ6WKP' where id=6; -update noar tt set v0='3QL1SSQ3J8ILZ' where id=6; -update noar ti set v0='3QL1SSQ3J8ILZ' where id=6; -update noar tt set b1='YW5OI10T1UVD6N35JOGCB' where id=6; -update noar ti set b1='YW5OI10T1UVD6N35JOGCB' where id=6; -update noar tt set v0='M81OQ457829G5ODMAV7GP3XJWH' where id=6; -update noar ti set v0='M81OQ457829G5ODMAV7GP3XJWH' where id=6; -update noar tt set b2='207VU3YLGSE9KQ9GT7N14QYB0MWS' where id=6; -update noar ti set b2='207VU3YLGSE9KQ9GT7N14QYB0MWS' where id=6; -update noar tt set v0='3' where id=7; -update noar ti set v0='3' where id=7; -update noar tt set b0='IB' where id=7; -update noar ti set b0='IB' where id=7; -update noar tt set v0='DD58LRPU16LY' where id=7; -update noar ti set v0='DD58LRPU16LY' where id=7; -update noar tt set b1='6VHXF4Q2K7XYGSK' where id=7; -update noar ti set b1='6VHXF4Q2K7XYGSK' where id=7; -update noar tt set v0='IRF1JKPNFPIF0SX0BYB36M' where id=7; -update noar ti set v0='IRF1JKPNFPIF0SX0BYB36M' where id=7; -update noar tt set b2='TC875JYEI4I7ENIOCG' where id=7; -update noar ti set b2='TC875JYEI4I7ENIOCG' where id=7; -update noar tt set v0='V2A6AMVQ8H5EG' where id=8; -update noar ti set v0='V2A6AMVQ8H5EG' where id=8; -update noar tt set b0='D7P56RTHEZ96ERKIAGGNQN5KBFG3TN' where id=8; -update noar ti set b0='D7P56RTHEZ96ERKIAGGNQN5KBFG3TN' where id=8; -update noar tt set v0='XC0Y8RA39VRI418' where id=8; -update noar ti set v0='XC0Y8RA39VRI418' where id=8; -update noar tt set b1='TB2IRT9CGTZSKFLOBHZZXRO0K' where id=8; -update noar ti set b1='TB2IRT9CGTZSKFLOBHZZXRO0K' where id=8; -update noar tt set v0='IGFJQ148M4ORWD' where id=8; -update noar ti set v0='IGFJQ148M4ORWD' where id=8; -update noar tt set b2='EQUEHWHEOUSTB1J0NEZ35MK9Z8NSJUU6' where id=8; -update noar ti set b2='EQUEHWHEOUSTB1J0NEZ35MK9Z8NSJUU6' where id=8; -update noar tt set v0='H8L4A07GPSM3R2TTS5GIQMZ8' where id=9; -update noar ti set v0='H8L4A07GPSM3R2TTS5GIQMZ8' where id=9; -update noar tt set b0='B33HHKKYZ11VOCLB9XKBKZD' where id=9; -update noar ti set b0='B33HHKKYZ11VOCLB9XKBKZD' where id=9; -update noar tt set v0='W0XDM4A9WI9MGZFSMG' where id=9; -update noar ti set v0='W0XDM4A9WI9MGZFSMG' where id=9; -update noar tt set b1='OKMDTPM' where id=9; -update noar ti set b1='OKMDTPM' where id=9; -update noar tt set v0='2FYVQD4MBNK3X1N994' where id=9; -update noar ti set v0='2FYVQD4MBNK3X1N994' where id=9; -update noar tt set b2='6WS7B7Y6QIOZWUML6IG899IWARPWY' where id=9; -update noar ti set b2='6WS7B7Y6QIOZWUML6IG899IWARPWY' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 mediumblob null, -b1 blob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='8UR9KRLJLDKXKC' where id=1; -update noar ti set v0='8UR9KRLJLDKXKC' where id=1; -update noar tt set b0='IW2PDF5NKZA2S7DBB1Q' where id=1; -update noar ti set b0='IW2PDF5NKZA2S7DBB1Q' where id=1; -update noar tt set v0='80OU09IVF5YC9631JHKUOX4T0' where id=1; -update noar ti set v0='80OU09IVF5YC9631JHKUOX4T0' where id=1; -update noar tt set b1='1E6JDLVULNGIADOIRV2YS7E' where id=1; -update noar ti set b1='1E6JDLVULNGIADOIRV2YS7E' where id=1; -update noar tt set v0='478YRFWB761UFCQ8Q4RC6US3NV1ZG' where id=1; -update noar ti set v0='478YRFWB761UFCQ8Q4RC6US3NV1ZG' where id=1; -update noar tt set b2='L' where id=1; -update noar ti set b2='L' where id=1; -update noar tt set v0='VG7JMSSA40PC8QIRIDFZZE2FPEDHM7' where id=2; -update noar ti set v0='VG7JMSSA40PC8QIRIDFZZE2FPEDHM7' where id=2; -update noar tt set b0='JSWRJFOCTCBQ5KCD1H' where id=2; -update noar ti set b0='JSWRJFOCTCBQ5KCD1H' where id=2; -update noar tt set v0='FCGDWNEQH8JWZAHKBM' where id=2; -update noar ti set v0='FCGDWNEQH8JWZAHKBM' where id=2; -update noar tt set b1='Q48G07O10R8PXLI' where id=2; -update noar ti set b1='Q48G07O10R8PXLI' where id=2; -update noar tt set v0='9MK7ZXQA11TBMX0W73X118YE' where id=2; -update noar ti set v0='9MK7ZXQA11TBMX0W73X118YE' where id=2; -update noar tt set b2='C6941HH7MM7H0K6QFR5Y' where id=2; -update noar ti set b2='C6941HH7MM7H0K6QFR5Y' where id=2; -update noar tt set v0='GKNZ' where id=3; -update noar ti set v0='GKNZ' where id=3; -update noar tt set b0='EV5RZK5WMXJ7MC96C7L' where id=3; -update noar ti set b0='EV5RZK5WMXJ7MC96C7L' where id=3; -update noar tt set v0='6M7NBNE5IXGW981NCUH1THKFVJTXHO' where id=3; -update noar ti set v0='6M7NBNE5IXGW981NCUH1THKFVJTXHO' where id=3; -update noar tt set b1='2G3BXPL43AYT' where id=3; -update noar ti set b1='2G3BXPL43AYT' where id=3; -update noar tt set v0='1C361A31AHEV5SI6QZO47VXDTBKFD03' where id=3; -update noar ti set v0='1C361A31AHEV5SI6QZO47VXDTBKFD03' where id=3; -update noar tt set b2='3NCH' where id=3; -update noar ti set b2='3NCH' where id=3; -update noar tt set v0='497S15D5IBFH1JAOPY4KKFIUEK' where id=4; -update noar ti set v0='497S15D5IBFH1JAOPY4KKFIUEK' where id=4; -update noar tt set b0='FH' where id=4; -update noar ti set b0='FH' where id=4; -update noar tt set v0='WPZASKJ0GKT3R9YRCUM4WLYY2MG' where id=4; -update noar ti set v0='WPZASKJ0GKT3R9YRCUM4WLYY2MG' where id=4; -update noar tt set b1='F31K3A4HQP9AWPSH2Z28XAA7JYUR' where id=4; -update noar ti set b1='F31K3A4HQP9AWPSH2Z28XAA7JYUR' where id=4; -update noar tt set v0='48X3SY' where id=4; -update noar ti set v0='48X3SY' where id=4; -update noar tt set b2='D1W1JDMTTX3YPW96OODLDJK' where id=4; -update noar ti set b2='D1W1JDMTTX3YPW96OODLDJK' where id=4; -update noar tt set v0='CWVELQR6UGSHBWXL9X94R7W54ZIM8D' where id=5; -update noar ti set v0='CWVELQR6UGSHBWXL9X94R7W54ZIM8D' where id=5; -update noar tt set b0='N2NFABMYWYW2U8SHQ7LQ2JQSUFC' where id=5; -update noar ti set b0='N2NFABMYWYW2U8SHQ7LQ2JQSUFC' where id=5; -update noar tt set v0='B1L' where id=5; -update noar ti set v0='B1L' where id=5; -update noar tt set b1='1CS7NV5YO05SWF' where id=5; -update noar ti set b1='1CS7NV5YO05SWF' where id=5; -update noar tt set v0='ZPZIA8HUB8WAKF5LKB1V0KS' where id=5; -update noar ti set v0='ZPZIA8HUB8WAKF5LKB1V0KS' where id=5; -update noar tt set b2='1BM6MLZHYFJC9P7E58WC' where id=5; -update noar ti set b2='1BM6MLZHYFJC9P7E58WC' where id=5; -update noar tt set v0='TUO29W31B8XINLH' where id=6; -update noar ti set v0='TUO29W31B8XINLH' where id=6; -update noar tt set b0='GQ531HW8F82O6' where id=6; -update noar ti set b0='GQ531HW8F82O6' where id=6; -update noar tt set v0='IA' where id=6; -update noar ti set v0='IA' where id=6; -update noar tt set b1='B33DK98SAWJHKFL1YVGFWM' where id=6; -update noar ti set b1='B33DK98SAWJHKFL1YVGFWM' where id=6; -update noar tt set v0='TV4GKDE9H1OBU' where id=6; -update noar ti set v0='TV4GKDE9H1OBU' where id=6; -update noar tt set b2='6AOTB3AERUJC92K2LOKK' where id=6; -update noar ti set b2='6AOTB3AERUJC92K2LOKK' where id=6; -update noar tt set v0='MD6UNO940OBMWIF6NSE2A8V9EL' where id=7; -update noar ti set v0='MD6UNO940OBMWIF6NSE2A8V9EL' where id=7; -update noar tt set b0='QQL13XE45GBT1TQ2MWIAIB' where id=7; -update noar ti set b0='QQL13XE45GBT1TQ2MWIAIB' where id=7; -update noar tt set v0='EI' where id=7; -update noar ti set v0='EI' where id=7; -update noar tt set b1='RNM652MLJZT0' where id=7; -update noar ti set b1='RNM652MLJZT0' where id=7; -update noar tt set v0='FQYKNTX3A9GKZ5SPC19AXYUCPV' where id=7; -update noar ti set v0='FQYKNTX3A9GKZ5SPC19AXYUCPV' where id=7; -update noar tt set b2='JNNOHSDRG64OXE0OB' where id=7; -update noar ti set b2='JNNOHSDRG64OXE0OB' where id=7; -update noar tt set v0='2HZDFN8KN6PM61FR3A2' where id=8; -update noar ti set v0='2HZDFN8KN6PM61FR3A2' where id=8; -update noar tt set b0='2' where id=8; -update noar ti set b0='2' where id=8; -update noar tt set v0='P51974RMYC4L7HHQMQKDKM8JHHQGUP' where id=8; -update noar ti set v0='P51974RMYC4L7HHQMQKDKM8JHHQGUP' where id=8; -update noar tt set b1='M' where id=8; -update noar ti set b1='M' where id=8; -update noar tt set v0='HGOO5962UPC2X3V' where id=8; -update noar ti set v0='HGOO5962UPC2X3V' where id=8; -update noar tt set b2='A52KYQ50PN0' where id=8; -update noar ti set b2='A52KYQ50PN0' where id=8; -update noar tt set v0='J073' where id=9; -update noar ti set v0='J073' where id=9; -update noar tt set b0='N544CFIGEXJSF0TT6M67KERQ69FQNY1' where id=9; -update noar ti set b0='N544CFIGEXJSF0TT6M67KERQ69FQNY1' where id=9; -update noar tt set v0='OIZK769PG' where id=9; -update noar ti set v0='OIZK769PG' where id=9; -update noar tt set b1='KJM0MPAE2BY205YCVEENTT6TNFR1' where id=9; -update noar ti set b1='KJM0MPAE2BY205YCVEENTT6TNFR1' where id=9; -update noar tt set v0='2G6NVTY6AC0U0M9GRVB1NSZ62GC2NK' where id=9; -update noar ti set v0='2G6NVTY6AC0U0M9GRVB1NSZ62GC2NK' where id=9; -update noar tt set b2='79P1V68U0' where id=9; -update noar ti set b2='79P1V68U0' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 mediumblob null, -b1 blob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='ISR9WXX6PGU' where id=1; -update noar ti set v0='ISR9WXX6PGU' where id=1; -update noar tt set b0='8Z1N0UMH54VIAAKXUQOMQ3' where id=1; -update noar ti set b0='8Z1N0UMH54VIAAKXUQOMQ3' where id=1; -update noar tt set v0='9JYGYBM' where id=1; -update noar ti set v0='9JYGYBM' where id=1; -update noar tt set b1='OGVAZSKD2' where id=1; -update noar ti set b1='OGVAZSKD2' where id=1; -update noar tt set v0='WNJS0UUMDUA7GANHY6HM6OL6C5LZ' where id=1; -update noar ti set v0='WNJS0UUMDUA7GANHY6HM6OL6C5LZ' where id=1; -update noar tt set b2='S32' where id=1; -update noar ti set b2='S32' where id=1; -update noar tt set v0='I2J0STKJAZDOVQH4QZ27PR6T8' where id=2; -update noar ti set v0='I2J0STKJAZDOVQH4QZ27PR6T8' where id=2; -update noar tt set b0='NKVX1YV7F20DRRGY' where id=2; -update noar ti set b0='NKVX1YV7F20DRRGY' where id=2; -update noar tt set v0='92T1NMQ78Q5OAMG9' where id=2; -update noar ti set v0='92T1NMQ78Q5OAMG9' where id=2; -update noar tt set b1='U36L4WFXYIJQRPN7TJ71F1' where id=2; -update noar ti set b1='U36L4WFXYIJQRPN7TJ71F1' where id=2; -update noar tt set v0='VYOZ88ZMKKRABK0VBP0' where id=2; -update noar ti set v0='VYOZ88ZMKKRABK0VBP0' where id=2; -update noar tt set b2='HGJ1H6PW0J24CGMP1DHSZ24BYI49R' where id=2; -update noar ti set b2='HGJ1H6PW0J24CGMP1DHSZ24BYI49R' where id=2; -update noar tt set v0='SS7BOL6H7N0XCR4SFVA2Z94NVP40E' where id=3; -update noar ti set v0='SS7BOL6H7N0XCR4SFVA2Z94NVP40E' where id=3; -update noar tt set b0='4ZE1WNY0JQMNRASFYM4HL6' where id=3; -update noar ti set b0='4ZE1WNY0JQMNRASFYM4HL6' where id=3; -update noar tt set v0='J7QNHGSIAGQFK8MUAKU530FLS5Q47GL' where id=3; -update noar ti set v0='J7QNHGSIAGQFK8MUAKU530FLS5Q47GL' where id=3; -update noar tt set b1='PC6BA9R5LLFR3GUDH' where id=3; -update noar ti set b1='PC6BA9R5LLFR3GUDH' where id=3; -update noar tt set v0='P4926J2FC3PIZPATF9Q8WA8CKB' where id=3; -update noar ti set v0='P4926J2FC3PIZPATF9Q8WA8CKB' where id=3; -update noar tt set b2='S15' where id=3; -update noar ti set b2='S15' where id=3; -update noar tt set v0='L7YR' where id=4; -update noar ti set v0='L7YR' where id=4; -update noar tt set b0='SP35PUJV65' where id=4; -update noar ti set b0='SP35PUJV65' where id=4; -update noar tt set v0='9' where id=4; -update noar ti set v0='9' where id=4; -update noar tt set b1='VH9EZQ4JNE' where id=4; -update noar ti set b1='VH9EZQ4JNE' where id=4; -update noar tt set v0='YFJNI1D' where id=4; -update noar ti set v0='YFJNI1D' where id=4; -update noar tt set b2='L79RVMADYMG3ZB1FYIMM' where id=4; -update noar ti set b2='L79RVMADYMG3ZB1FYIMM' where id=4; -update noar tt set v0='H4QSO5PO546ZL6L' where id=5; -update noar ti set v0='H4QSO5PO546ZL6L' where id=5; -update noar tt set b0='DRWAD8MAYLAOXBTPCMPQZR87' where id=5; -update noar ti set b0='DRWAD8MAYLAOXBTPCMPQZR87' where id=5; -update noar tt set v0='XR0OCXAGQR' where id=5; -update noar ti set v0='XR0OCXAGQR' where id=5; -update noar tt set b1='SDQUEK7CI1DZ8AWS1TW' where id=5; -update noar ti set b1='SDQUEK7CI1DZ8AWS1TW' where id=5; -update noar tt set v0='PJ6D3SK79R8LRTU0' where id=5; -update noar ti set v0='PJ6D3SK79R8LRTU0' where id=5; -update noar tt set b2='RV2AEIERE7' where id=5; -update noar ti set b2='RV2AEIERE7' where id=5; -update noar tt set v0='Y1NB36ESX4AVRM2TW6N' where id=6; -update noar ti set v0='Y1NB36ESX4AVRM2TW6N' where id=6; -update noar tt set b0='FZBOACYRVYUE3P9AAY' where id=6; -update noar ti set b0='FZBOACYRVYUE3P9AAY' where id=6; -update noar tt set v0='IDCAQXXEEDIVD1RNS61G01GYYNNB' where id=6; -update noar ti set v0='IDCAQXXEEDIVD1RNS61G01GYYNNB' where id=6; -update noar tt set b1='4X3OUQ8NFKW45PMYD4' where id=6; -update noar ti set b1='4X3OUQ8NFKW45PMYD4' where id=6; -update noar tt set v0='RTU5J32' where id=6; -update noar ti set v0='RTU5J32' where id=6; -update noar tt set b2='0N' where id=6; -update noar ti set b2='0N' where id=6; -update noar tt set v0='ZZNVIX3IHKY3FOV1LV6AQ' where id=7; -update noar ti set v0='ZZNVIX3IHKY3FOV1LV6AQ' where id=7; -update noar tt set b0='HME4D4PV12W9NAE' where id=7; -update noar ti set b0='HME4D4PV12W9NAE' where id=7; -update noar tt set v0='I40IIF6SJP' where id=7; -update noar ti set v0='I40IIF6SJP' where id=7; -update noar tt set b1='5FDYKBU' where id=7; -update noar ti set b1='5FDYKBU' where id=7; -update noar tt set v0='HMFGH' where id=7; -update noar ti set v0='HMFGH' where id=7; -update noar tt set b2='M2KA7GDORAC' where id=7; -update noar ti set b2='M2KA7GDORAC' where id=7; -update noar tt set v0='43I' where id=8; -update noar ti set v0='43I' where id=8; -update noar tt set b0='LAIWPXQITAO5D4ZJ' where id=8; -update noar ti set b0='LAIWPXQITAO5D4ZJ' where id=8; -update noar tt set v0='RR6W70RXF9H75ILON9NOWNCUQ7H7D2JV' where id=8; -update noar ti set v0='RR6W70RXF9H75ILON9NOWNCUQ7H7D2JV' where id=8; -update noar tt set b1='1R0JD6888CXA2LXO6IQBF0YBODMGKE' where id=8; -update noar ti set b1='1R0JD6888CXA2LXO6IQBF0YBODMGKE' where id=8; -update noar tt set v0='OKI77PW8XCTR' where id=8; -update noar ti set v0='OKI77PW8XCTR' where id=8; -update noar tt set b2='PQJ0CM1LNWYCS27' where id=8; -update noar ti set b2='PQJ0CM1LNWYCS27' where id=8; -update noar tt set v0='JO7I' where id=9; -update noar ti set v0='JO7I' where id=9; -update noar tt set b0='YCQ8SU2E' where id=9; -update noar ti set b0='YCQ8SU2E' where id=9; -update noar tt set v0='PA' where id=9; -update noar ti set v0='PA' where id=9; -update noar tt set b1='NXH2QQTC9XAM' where id=9; -update noar ti set b1='NXH2QQTC9XAM' where id=9; -update noar tt set v0='SCCAESY87D4S3' where id=9; -update noar ti set v0='SCCAESY87D4S3' where id=9; -update noar tt set b2='G' where id=9; -update noar ti set b2='G' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 mediumblob not null, -b1 blob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='VD7WAWF5C6G' where id=1; -update noar ti set v0='VD7WAWF5C6G' where id=1; -update noar tt set b0='O95PK0VNM' where id=1; -update noar ti set b0='O95PK0VNM' where id=1; -update noar tt set v0='QDPE7AEOVBU6Z' where id=1; -update noar ti set v0='QDPE7AEOVBU6Z' where id=1; -update noar tt set b1='ZQ4FMANLXB5Y855V1AF' where id=1; -update noar ti set b1='ZQ4FMANLXB5Y855V1AF' where id=1; -update noar tt set v0='H3D9RLUKCKYF025WX9' where id=1; -update noar ti set v0='H3D9RLUKCKYF025WX9' where id=1; -update noar tt set b2='ARO6CR3VN014A5GOFL7LHPG' where id=1; -update noar ti set b2='ARO6CR3VN014A5GOFL7LHPG' where id=1; -update noar tt set v0='CJCYJPILO9MZRY50SJUG0U5X58HE7Z' where id=2; -update noar ti set v0='CJCYJPILO9MZRY50SJUG0U5X58HE7Z' where id=2; -update noar tt set b0='1EI48IYTSQJKWDO44NHHCWAZ' where id=2; -update noar ti set b0='1EI48IYTSQJKWDO44NHHCWAZ' where id=2; -update noar tt set v0='YFCS3I8' where id=2; -update noar ti set v0='YFCS3I8' where id=2; -update noar tt set b1='2R2834D4' where id=2; -update noar ti set b1='2R2834D4' where id=2; -update noar tt set v0='0XY6JB8S1OO29KEHS' where id=2; -update noar ti set v0='0XY6JB8S1OO29KEHS' where id=2; -update noar tt set b2='2IWV' where id=2; -update noar ti set b2='2IWV' where id=2; -update noar tt set v0='DR' where id=3; -update noar ti set v0='DR' where id=3; -update noar tt set b0='RJBOW44WMWY0WFW1TUD5IMARS80JF' where id=3; -update noar ti set b0='RJBOW44WMWY0WFW1TUD5IMARS80JF' where id=3; -update noar tt set v0='4CR5FYWLN9CMXRLJKA0' where id=3; -update noar ti set v0='4CR5FYWLN9CMXRLJKA0' where id=3; -update noar tt set b1='3U69SZ0S' where id=3; -update noar ti set b1='3U69SZ0S' where id=3; -update noar tt set v0='7M4Y6EK4SSO7N4AY5U3CR' where id=3; -update noar ti set v0='7M4Y6EK4SSO7N4AY5U3CR' where id=3; -update noar tt set b2='LNHK3' where id=3; -update noar ti set b2='LNHK3' where id=3; -update noar tt set v0='LSP3TLSF6Z37YH2ZF120' where id=4; -update noar ti set v0='LSP3TLSF6Z37YH2ZF120' where id=4; -update noar tt set b0='6FGS1V8NEKK9L39Z' where id=4; -update noar ti set b0='6FGS1V8NEKK9L39Z' where id=4; -update noar tt set v0='AG7MFQ5IN8R222D3LQDNHJY9O32' where id=4; -update noar ti set v0='AG7MFQ5IN8R222D3LQDNHJY9O32' where id=4; -update noar tt set b1='AL746MG0288QOKRB8RW2M7357WC6QYA9' where id=4; -update noar ti set b1='AL746MG0288QOKRB8RW2M7357WC6QYA9' where id=4; -update noar tt set v0='4DMC1NZUB' where id=4; -update noar ti set v0='4DMC1NZUB' where id=4; -update noar tt set b2='ZBDVCHEKYI6VLCHX7ZLGXH' where id=4; -update noar ti set b2='ZBDVCHEKYI6VLCHX7ZLGXH' where id=4; -update noar tt set v0='JEKN0W6GBF59W53' where id=5; -update noar ti set v0='JEKN0W6GBF59W53' where id=5; -update noar tt set b0='4RU0T9T14WSI7S841BV8694YA7' where id=5; -update noar ti set b0='4RU0T9T14WSI7S841BV8694YA7' where id=5; -update noar tt set v0='AQADRD6YU4RGFD4899I7M' where id=5; -update noar ti set v0='AQADRD6YU4RGFD4899I7M' where id=5; -update noar tt set b1='20MBDRFOACOWLIZ' where id=5; -update noar ti set b1='20MBDRFOACOWLIZ' where id=5; -update noar tt set v0='EDGI' where id=5; -update noar ti set v0='EDGI' where id=5; -update noar tt set b2='TA4YTJGKOQN6CIQA49X9FFUY8IXC' where id=5; -update noar ti set b2='TA4YTJGKOQN6CIQA49X9FFUY8IXC' where id=5; -update noar tt set v0='D7CFZ3PP9S8MURGG' where id=6; -update noar ti set v0='D7CFZ3PP9S8MURGG' where id=6; -update noar tt set b0='FY' where id=6; -update noar ti set b0='FY' where id=6; -update noar tt set v0='3X' where id=6; -update noar ti set v0='3X' where id=6; -update noar tt set b1='EX7K7L9Q4LNLT944LDWDWAGCD' where id=6; -update noar ti set b1='EX7K7L9Q4LNLT944LDWDWAGCD' where id=6; -update noar tt set v0='DLFF2' where id=6; -update noar ti set v0='DLFF2' where id=6; -update noar tt set b2='PKMDA5WKSBGGD4CUVVOSVM9JRAOW4BXY' where id=6; -update noar ti set b2='PKMDA5WKSBGGD4CUVVOSVM9JRAOW4BXY' where id=6; -update noar tt set v0='3YDOUK5PQEKI' where id=7; -update noar ti set v0='3YDOUK5PQEKI' where id=7; -update noar tt set b0='F81H5' where id=7; -update noar ti set b0='F81H5' where id=7; -update noar tt set v0='HQH2IT47QD504WDSK' where id=7; -update noar ti set v0='HQH2IT47QD504WDSK' where id=7; -update noar tt set b1='N21JBYFT2IXHNRTJP' where id=7; -update noar ti set b1='N21JBYFT2IXHNRTJP' where id=7; -update noar tt set v0='E45RH1HPDH' where id=7; -update noar ti set v0='E45RH1HPDH' where id=7; -update noar tt set b2='QC51ET4L8' where id=7; -update noar ti set b2='QC51ET4L8' where id=7; -update noar tt set v0='AE9697VORYRR' where id=8; -update noar ti set v0='AE9697VORYRR' where id=8; -update noar tt set b0='6W3B5EMV845MUC' where id=8; -update noar ti set b0='6W3B5EMV845MUC' where id=8; -update noar tt set v0='39LIRV' where id=8; -update noar ti set v0='39LIRV' where id=8; -update noar tt set b1='F2TGHWC9IUTHIL' where id=8; -update noar ti set b1='F2TGHWC9IUTHIL' where id=8; -update noar tt set v0='1OR38' where id=8; -update noar ti set v0='1OR38' where id=8; -update noar tt set b2='7926KICTICTAQ' where id=8; -update noar ti set b2='7926KICTICTAQ' where id=8; -update noar tt set v0='0TF27LTHCH' where id=9; -update noar ti set v0='0TF27LTHCH' where id=9; -update noar tt set b0='0YT1FR6DG1PN' where id=9; -update noar ti set b0='0YT1FR6DG1PN' where id=9; -update noar tt set v0='VFUBV8HGHYSZL' where id=9; -update noar ti set v0='VFUBV8HGHYSZL' where id=9; -update noar tt set b1='UJG27D3FH66WZ4GKUEOJ11Y428IFEA' where id=9; -update noar ti set b1='UJG27D3FH66WZ4GKUEOJ11Y428IFEA' where id=9; -update noar tt set v0='TXSHQ3DV30YXDF' where id=9; -update noar ti set v0='TXSHQ3DV30YXDF' where id=9; -update noar tt set b2='YORRUYO6JI5ZF4UG' where id=9; -update noar ti set b2='YORRUYO6JI5ZF4UG' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 mediumblob not null, -b1 blob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='19' where id=1; -update noar ti set v0='19' where id=1; -update noar tt set b0='C2QZ683CFXPUROG1HQHO' where id=1; -update noar ti set b0='C2QZ683CFXPUROG1HQHO' where id=1; -update noar tt set v0='KN' where id=1; -update noar ti set v0='KN' where id=1; -update noar tt set b1='8VGPX' where id=1; -update noar ti set b1='8VGPX' where id=1; -update noar tt set v0='43N1QXPY' where id=1; -update noar ti set v0='43N1QXPY' where id=1; -update noar tt set b2='3YIFUB1YGDBS0UA80A3RIC' where id=1; -update noar ti set b2='3YIFUB1YGDBS0UA80A3RIC' where id=1; -update noar tt set v0='R4GK5749SGL8EGKKR4WVB0IL2OBCIN' where id=2; -update noar ti set v0='R4GK5749SGL8EGKKR4WVB0IL2OBCIN' where id=2; -update noar tt set b0='S8LGZE3' where id=2; -update noar ti set b0='S8LGZE3' where id=2; -update noar tt set v0='2JS1K263R0N6HHBDG1Q7T8FHDLL8OG4H' where id=2; -update noar ti set v0='2JS1K263R0N6HHBDG1Q7T8FHDLL8OG4H' where id=2; -update noar tt set b1='59BU1KWHY510' where id=2; -update noar ti set b1='59BU1KWHY510' where id=2; -update noar tt set v0='QMMAY4Q8T5LGSJKYGQ48IY' where id=2; -update noar ti set v0='QMMAY4Q8T5LGSJKYGQ48IY' where id=2; -update noar tt set b2='IZU3RP3LEMKU0CI0ABR4XTI' where id=2; -update noar ti set b2='IZU3RP3LEMKU0CI0ABR4XTI' where id=2; -update noar tt set v0='5PAE9QOX5X7SZ3CA1M' where id=3; -update noar ti set v0='5PAE9QOX5X7SZ3CA1M' where id=3; -update noar tt set b0='YHNAYVGCR3F8Z3CY821SP05ZJHL25QRR' where id=3; -update noar ti set b0='YHNAYVGCR3F8Z3CY821SP05ZJHL25QRR' where id=3; -update noar tt set v0='PW45QZ84VAOEB5' where id=3; -update noar ti set v0='PW45QZ84VAOEB5' where id=3; -update noar tt set b1='E4RQJFBYQ3VFBKUDRCFZBP7FK0IB8SYD' where id=3; -update noar ti set b1='E4RQJFBYQ3VFBKUDRCFZBP7FK0IB8SYD' where id=3; -update noar tt set v0='87ZN2J1T' where id=3; -update noar ti set v0='87ZN2J1T' where id=3; -update noar tt set b2='SCOUDZA80CUGIJQW49XANU3' where id=3; -update noar ti set b2='SCOUDZA80CUGIJQW49XANU3' where id=3; -update noar tt set v0='FUQNGO75RVANVB3O' where id=4; -update noar ti set v0='FUQNGO75RVANVB3O' where id=4; -update noar tt set b0='T4QKEBFD0OS8BFA53K9X6EOPH7B82' where id=4; -update noar ti set b0='T4QKEBFD0OS8BFA53K9X6EOPH7B82' where id=4; -update noar tt set v0='JF6X1U2MR6C6LZ3EP569W0OC21YHA19M' where id=4; -update noar ti set v0='JF6X1U2MR6C6LZ3EP569W0OC21YHA19M' where id=4; -update noar tt set b1='1EJVK328XZ7EAIL4X' where id=4; -update noar ti set b1='1EJVK328XZ7EAIL4X' where id=4; -update noar tt set v0='N4818DGUKV1C3GJC897KQ' where id=4; -update noar ti set v0='N4818DGUKV1C3GJC897KQ' where id=4; -update noar tt set b2='LJR2YPSN' where id=4; -update noar ti set b2='LJR2YPSN' where id=4; -update noar tt set v0='CL0LEIE' where id=5; -update noar ti set v0='CL0LEIE' where id=5; -update noar tt set b0='9G34WG2V70UNP3YBKHA6I8' where id=5; -update noar ti set b0='9G34WG2V70UNP3YBKHA6I8' where id=5; -update noar tt set v0='OWJ20FBL9PX4ZFPEN60EN3MDS2NXCR1' where id=5; -update noar ti set v0='OWJ20FBL9PX4ZFPEN60EN3MDS2NXCR1' where id=5; -update noar tt set b1='MF7DUEU0' where id=5; -update noar ti set b1='MF7DUEU0' where id=5; -update noar tt set v0='VV1UTXQYHZ7R635465K9' where id=5; -update noar ti set v0='VV1UTXQYHZ7R635465K9' where id=5; -update noar tt set b2='O1D35TXQ5YNEAJ7M5ITY3' where id=5; -update noar ti set b2='O1D35TXQ5YNEAJ7M5ITY3' where id=5; -update noar tt set v0='X62KI1TYN' where id=6; -update noar ti set v0='X62KI1TYN' where id=6; -update noar tt set b0='Y1OWRRGO' where id=6; -update noar ti set b0='Y1OWRRGO' where id=6; -update noar tt set v0='W1JJ8LPN0' where id=6; -update noar ti set v0='W1JJ8LPN0' where id=6; -update noar tt set b1='7VHUJINYF0ZARR5E' where id=6; -update noar ti set b1='7VHUJINYF0ZARR5E' where id=6; -update noar tt set v0='J9GI8U4EKMSGF4L' where id=6; -update noar ti set v0='J9GI8U4EKMSGF4L' where id=6; -update noar tt set b2='VMH9TY2NQXWO1LBXP8SWFEG3868KG8CM' where id=6; -update noar ti set b2='VMH9TY2NQXWO1LBXP8SWFEG3868KG8CM' where id=6; -update noar tt set v0='CS5A452FYDFMFIAOGOS4G0VW7L' where id=7; -update noar ti set v0='CS5A452FYDFMFIAOGOS4G0VW7L' where id=7; -update noar tt set b0='QXR' where id=7; -update noar ti set b0='QXR' where id=7; -update noar tt set v0='6WM2FXV9DGRO3A' where id=7; -update noar ti set v0='6WM2FXV9DGRO3A' where id=7; -update noar tt set b1='HVPB41MWF' where id=7; -update noar ti set b1='HVPB41MWF' where id=7; -update noar tt set v0='243B0JW6WZRN26AZXR9098' where id=7; -update noar ti set v0='243B0JW6WZRN26AZXR9098' where id=7; -update noar tt set b2='7MKD' where id=7; -update noar ti set b2='7MKD' where id=7; -update noar tt set v0='P1TZ2G52FG34K547' where id=8; -update noar ti set v0='P1TZ2G52FG34K547' where id=8; -update noar tt set b0='DBG8' where id=8; -update noar ti set b0='DBG8' where id=8; -update noar tt set v0='Q0DFEXW' where id=8; -update noar ti set v0='Q0DFEXW' where id=8; -update noar tt set b1='C2HVBOF2A6MH0L' where id=8; -update noar ti set b1='C2HVBOF2A6MH0L' where id=8; -update noar tt set v0='3B0P9WFYCQ57NH6' where id=8; -update noar ti set v0='3B0P9WFYCQ57NH6' where id=8; -update noar tt set b2='IDQW9R06L368O7QJW' where id=8; -update noar ti set b2='IDQW9R06L368O7QJW' where id=8; -update noar tt set v0='YCPUVZ' where id=9; -update noar ti set v0='YCPUVZ' where id=9; -update noar tt set b0='VXGIJN' where id=9; -update noar ti set b0='VXGIJN' where id=9; -update noar tt set v0='OFOIIUFRFWDYUEFB' where id=9; -update noar ti set v0='OFOIIUFRFWDYUEFB' where id=9; -update noar tt set b1='DC' where id=9; -update noar ti set b1='DC' where id=9; -update noar tt set v0='DS4EPIKJY' where id=9; -update noar ti set v0='DS4EPIKJY' where id=9; -update noar tt set b2='77VW8EHRDHSV3T1U' where id=9; -update noar ti set b2='77VW8EHRDHSV3T1U' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 mediumblob null, -b1 mediumblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='ESKE40X' where id=1; -update noar ti set v0='ESKE40X' where id=1; -update noar tt set b0='LLL5KKO' where id=1; -update noar ti set b0='LLL5KKO' where id=1; -update noar tt set v0='5PWJCKBL8O4B4O' where id=1; -update noar ti set v0='5PWJCKBL8O4B4O' where id=1; -update noar tt set b1='19' where id=1; -update noar ti set b1='19' where id=1; -update noar tt set v0='IUSFETJGMVYF6FVZ03ALH3PLGL' where id=1; -update noar ti set v0='IUSFETJGMVYF6FVZ03ALH3PLGL' where id=1; -update noar tt set b2='XEU' where id=1; -update noar ti set b2='XEU' where id=1; -update noar tt set v0='RO0O0' where id=2; -update noar ti set v0='RO0O0' where id=2; -update noar tt set b0='9ES5HYCR01U' where id=2; -update noar ti set b0='9ES5HYCR01U' where id=2; -update noar tt set v0='NKK0OM1TUHIGX6V8WQV' where id=2; -update noar ti set v0='NKK0OM1TUHIGX6V8WQV' where id=2; -update noar tt set b1='TH295DA2' where id=2; -update noar ti set b1='TH295DA2' where id=2; -update noar tt set v0='ONQU5XO899' where id=2; -update noar ti set v0='ONQU5XO899' where id=2; -update noar tt set b2='AL6ND8KTPBV5DNX2VRH33PGXBYQ5' where id=2; -update noar ti set b2='AL6ND8KTPBV5DNX2VRH33PGXBYQ5' where id=2; -update noar tt set v0='ZP6IMUG9O8ETCYHF' where id=3; -update noar ti set v0='ZP6IMUG9O8ETCYHF' where id=3; -update noar tt set b0='KJF0NBSI1PWNPQJ7KXCBZ' where id=3; -update noar ti set b0='KJF0NBSI1PWNPQJ7KXCBZ' where id=3; -update noar tt set v0='9MWLLSUW9APVY28Z6RFFU90ZMUSJ07LA' where id=3; -update noar ti set v0='9MWLLSUW9APVY28Z6RFFU90ZMUSJ07LA' where id=3; -update noar tt set b1='9S66I8RUJVCFYJ5HF6' where id=3; -update noar ti set b1='9S66I8RUJVCFYJ5HF6' where id=3; -update noar tt set v0='J6C4S5CCT1E' where id=3; -update noar ti set v0='J6C4S5CCT1E' where id=3; -update noar tt set b2='MFE4' where id=3; -update noar ti set b2='MFE4' where id=3; -update noar tt set v0='5V443W5VTD30GM3FRHYFW9Y6J4W' where id=4; -update noar ti set v0='5V443W5VTD30GM3FRHYFW9Y6J4W' where id=4; -update noar tt set b0='NLZT' where id=4; -update noar ti set b0='NLZT' where id=4; -update noar tt set v0='7GB2EIF4B4JH' where id=4; -update noar ti set v0='7GB2EIF4B4JH' where id=4; -update noar tt set b1='PUMUSF2SWC42IOGXIAU2YUSHXCYOMNXA' where id=4; -update noar ti set b1='PUMUSF2SWC42IOGXIAU2YUSHXCYOMNXA' where id=4; -update noar tt set v0='UZNEZEI2NUG80TWC8BX8O9HKX2GV6' where id=4; -update noar ti set v0='UZNEZEI2NUG80TWC8BX8O9HKX2GV6' where id=4; -update noar tt set b2='Y3' where id=4; -update noar ti set b2='Y3' where id=4; -update noar tt set v0='A00815CH3Y910MNCCUUCQV0F' where id=5; -update noar ti set v0='A00815CH3Y910MNCCUUCQV0F' where id=5; -update noar tt set b0='RXLW11CYWPLA8427ONFI8P6VKAQLTH' where id=5; -update noar ti set b0='RXLW11CYWPLA8427ONFI8P6VKAQLTH' where id=5; -update noar tt set v0='HG8P5MPBS43XHN1CKX2I5ZJUJO6S5' where id=5; -update noar ti set v0='HG8P5MPBS43XHN1CKX2I5ZJUJO6S5' where id=5; -update noar tt set b1='SDGTLX7B30P9O9' where id=5; -update noar ti set b1='SDGTLX7B30P9O9' where id=5; -update noar tt set v0='56' where id=5; -update noar ti set v0='56' where id=5; -update noar tt set b2='3XNWJHNFOO8SO62ADV1FOWBI7' where id=5; -update noar ti set b2='3XNWJHNFOO8SO62ADV1FOWBI7' where id=5; -update noar tt set v0='AU6Q71SSJEUXWE4V3G0LE7VC1' where id=6; -update noar ti set v0='AU6Q71SSJEUXWE4V3G0LE7VC1' where id=6; -update noar tt set b0='8Q6ONZ6H0KH9ST43SI67D' where id=6; -update noar ti set b0='8Q6ONZ6H0KH9ST43SI67D' where id=6; -update noar tt set v0='AR0RLNHG1JO8C' where id=6; -update noar ti set v0='AR0RLNHG1JO8C' where id=6; -update noar tt set b1='PP1J57S6U4BF802Q5P' where id=6; -update noar ti set b1='PP1J57S6U4BF802Q5P' where id=6; -update noar tt set v0='8DIMOP94VVPA94O0RP9IMPBZBSAIU' where id=6; -update noar ti set v0='8DIMOP94VVPA94O0RP9IMPBZBSAIU' where id=6; -update noar tt set b2='XWDI1QSDHZPRDMKGEDUW' where id=6; -update noar ti set b2='XWDI1QSDHZPRDMKGEDUW' where id=6; -update noar tt set v0='EUK0USOF' where id=7; -update noar ti set v0='EUK0USOF' where id=7; -update noar tt set b0='9QR' where id=7; -update noar ti set b0='9QR' where id=7; -update noar tt set v0='ZG3FD2CP2' where id=7; -update noar ti set v0='ZG3FD2CP2' where id=7; -update noar tt set b1='YAB57LLKACRGZB4IVBMN' where id=7; -update noar ti set b1='YAB57LLKACRGZB4IVBMN' where id=7; -update noar tt set v0='K' where id=7; -update noar ti set v0='K' where id=7; -update noar tt set b2='OUL95Y0L3M6GYB0X9PQJP0H9W7UKV3N7' where id=7; -update noar ti set b2='OUL95Y0L3M6GYB0X9PQJP0H9W7UKV3N7' where id=7; -update noar tt set v0='OMQ80INY4OJ3SQSZ2CIMQQ3QPF' where id=8; -update noar ti set v0='OMQ80INY4OJ3SQSZ2CIMQQ3QPF' where id=8; -update noar tt set b0='ZVYO5D1MO07M7AOA3BD9ITTT8XEJ0L' where id=8; -update noar ti set b0='ZVYO5D1MO07M7AOA3BD9ITTT8XEJ0L' where id=8; -update noar tt set v0='I8KNYVW2GHYAV5A98TYPJQOFEZ' where id=8; -update noar ti set v0='I8KNYVW2GHYAV5A98TYPJQOFEZ' where id=8; -update noar tt set b1='FM5JJOVOFGA9U99F' where id=8; -update noar ti set b1='FM5JJOVOFGA9U99F' where id=8; -update noar tt set v0='33W4ZF6ASNEQLBCUHIUF4IZVOQ7' where id=8; -update noar ti set v0='33W4ZF6ASNEQLBCUHIUF4IZVOQ7' where id=8; -update noar tt set b2='RLHE' where id=8; -update noar ti set b2='RLHE' where id=8; -update noar tt set v0='4IS1CL3X8VV0P5FMYOX' where id=9; -update noar ti set v0='4IS1CL3X8VV0P5FMYOX' where id=9; -update noar tt set b0='WW5QRRMSILFKFFSFK7QU' where id=9; -update noar ti set b0='WW5QRRMSILFKFFSFK7QU' where id=9; -update noar tt set v0='DTXVN59DWGE29BA30UNZQPY' where id=9; -update noar ti set v0='DTXVN59DWGE29BA30UNZQPY' where id=9; -update noar tt set b1='PKZ' where id=9; -update noar ti set b1='PKZ' where id=9; -update noar tt set v0='IQKLV9W1770IRK41OODGO7' where id=9; -update noar ti set v0='IQKLV9W1770IRK41OODGO7' where id=9; -update noar tt set b2='1IOAPH' where id=9; -update noar ti set b2='1IOAPH' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 mediumblob null, -b1 mediumblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='R5OOV9SGLR1AWETR5BAV8NPO' where id=1; -update noar ti set v0='R5OOV9SGLR1AWETR5BAV8NPO' where id=1; -update noar tt set b0='LU7ECFMBSHRIZT8LAOHM8QY5N33ACAV3' where id=1; -update noar ti set b0='LU7ECFMBSHRIZT8LAOHM8QY5N33ACAV3' where id=1; -update noar tt set v0='QVCDH85UHQT5Z' where id=1; -update noar ti set v0='QVCDH85UHQT5Z' where id=1; -update noar tt set b1='HKAXEDOYT3230XGCX' where id=1; -update noar ti set b1='HKAXEDOYT3230XGCX' where id=1; -update noar tt set v0='NMUU9X1OPO6N8GK' where id=1; -update noar ti set v0='NMUU9X1OPO6N8GK' where id=1; -update noar tt set b2='SMUJFLJRTD1X2DLI' where id=1; -update noar ti set b2='SMUJFLJRTD1X2DLI' where id=1; -update noar tt set v0='LFKBOTAR7N8ER7SOPDU2PQKBTG' where id=2; -update noar ti set v0='LFKBOTAR7N8ER7SOPDU2PQKBTG' where id=2; -update noar tt set b0='3AWBQ8H1TGPXMRLHULZ4WM6M7UH' where id=2; -update noar ti set b0='3AWBQ8H1TGPXMRLHULZ4WM6M7UH' where id=2; -update noar tt set v0='22Z1XQGFVHN9TGWDYBI2QIRLYD' where id=2; -update noar ti set v0='22Z1XQGFVHN9TGWDYBI2QIRLYD' where id=2; -update noar tt set b1='AYUEUYMG61QXM8OFPV93VQ8X7K1R8SG9' where id=2; -update noar ti set b1='AYUEUYMG61QXM8OFPV93VQ8X7K1R8SG9' where id=2; -update noar tt set v0='RIJQ6NJ9ND92GK9706UWQXO6KR28Z' where id=2; -update noar ti set v0='RIJQ6NJ9ND92GK9706UWQXO6KR28Z' where id=2; -update noar tt set b2='AGYT2G3WKY57GNYLTUY5GEO' where id=2; -update noar ti set b2='AGYT2G3WKY57GNYLTUY5GEO' where id=2; -update noar tt set v0='4XO5SHLRX4SKLQE6QWP25' where id=3; -update noar ti set v0='4XO5SHLRX4SKLQE6QWP25' where id=3; -update noar tt set b0='MLHD5WMHHC5C00I773S6T' where id=3; -update noar ti set b0='MLHD5WMHHC5C00I773S6T' where id=3; -update noar tt set v0='V6NHRADFXUEYD4TZKJ007KCLAXNV' where id=3; -update noar ti set v0='V6NHRADFXUEYD4TZKJ007KCLAXNV' where id=3; -update noar tt set b1='RTK25YQ' where id=3; -update noar ti set b1='RTK25YQ' where id=3; -update noar tt set v0='F0E2YH8UPCTUVXAWIS0KQPH2TQ1TBHQG' where id=3; -update noar ti set v0='F0E2YH8UPCTUVXAWIS0KQPH2TQ1TBHQG' where id=3; -update noar tt set b2='CJHOIK0CMM1FIEF' where id=3; -update noar ti set b2='CJHOIK0CMM1FIEF' where id=3; -update noar tt set v0='0D39IMT' where id=4; -update noar ti set v0='0D39IMT' where id=4; -update noar tt set b0='7' where id=4; -update noar ti set b0='7' where id=4; -update noar tt set v0='GVQAIDZM17' where id=4; -update noar ti set v0='GVQAIDZM17' where id=4; -update noar tt set b1='9VZ' where id=4; -update noar ti set b1='9VZ' where id=4; -update noar tt set v0='KDISCFUM8SFYGSOXGOCLUGE5KUU5M' where id=4; -update noar ti set v0='KDISCFUM8SFYGSOXGOCLUGE5KUU5M' where id=4; -update noar tt set b2='2WPGSZ8H' where id=4; -update noar ti set b2='2WPGSZ8H' where id=4; -update noar tt set v0='YL7JUB36EY9WQDV4TEX' where id=5; -update noar ti set v0='YL7JUB36EY9WQDV4TEX' where id=5; -update noar tt set b0='SSQLFF9SG2SW64LORD' where id=5; -update noar ti set b0='SSQLFF9SG2SW64LORD' where id=5; -update noar tt set v0='MUTZ8G36YNJE5P1WFN' where id=5; -update noar ti set v0='MUTZ8G36YNJE5P1WFN' where id=5; -update noar tt set b1='Q26FJSQ1VV44S4KEAN5K7L55' where id=5; -update noar ti set b1='Q26FJSQ1VV44S4KEAN5K7L55' where id=5; -update noar tt set v0='NWBF' where id=5; -update noar ti set v0='NWBF' where id=5; -update noar tt set b2='UMVXDA4NCSHAHL' where id=5; -update noar ti set b2='UMVXDA4NCSHAHL' where id=5; -update noar tt set v0='XMMQQ5LMFJPJPHKLUQHYNK' where id=6; -update noar ti set v0='XMMQQ5LMFJPJPHKLUQHYNK' where id=6; -update noar tt set b0='X' where id=6; -update noar ti set b0='X' where id=6; -update noar tt set v0='X03YJP' where id=6; -update noar ti set v0='X03YJP' where id=6; -update noar tt set b1='6MQIRL7LC6' where id=6; -update noar ti set b1='6MQIRL7LC6' where id=6; -update noar tt set v0='PU3HBPFOQL7PEOF99A' where id=6; -update noar ti set v0='PU3HBPFOQL7PEOF99A' where id=6; -update noar tt set b2='KY1OZ5KY' where id=6; -update noar ti set b2='KY1OZ5KY' where id=6; -update noar tt set v0='0XGOCI' where id=7; -update noar ti set v0='0XGOCI' where id=7; -update noar tt set b0='XQY14CT806U0EURARMI9' where id=7; -update noar ti set b0='XQY14CT806U0EURARMI9' where id=7; -update noar tt set v0='O25HUZUAZ6DRAEVLD8NTKXNA' where id=7; -update noar ti set v0='O25HUZUAZ6DRAEVLD8NTKXNA' where id=7; -update noar tt set b1='6VXD2S' where id=7; -update noar ti set b1='6VXD2S' where id=7; -update noar tt set v0='OS4XBYT94QEI4' where id=7; -update noar ti set v0='OS4XBYT94QEI4' where id=7; -update noar tt set b2='Z5UPUBDKF346LK4ODQMCHRLO' where id=7; -update noar ti set b2='Z5UPUBDKF346LK4ODQMCHRLO' where id=7; -update noar tt set v0='WYFF' where id=8; -update noar ti set v0='WYFF' where id=8; -update noar tt set b0='ER3JCL' where id=8; -update noar ti set b0='ER3JCL' where id=8; -update noar tt set v0='QP9UF9ZYCW' where id=8; -update noar ti set v0='QP9UF9ZYCW' where id=8; -update noar tt set b1='35SHDMR0KJPLZB736KC8L6AIZKU47EQ' where id=8; -update noar ti set b1='35SHDMR0KJPLZB736KC8L6AIZKU47EQ' where id=8; -update noar tt set v0='MTP6S' where id=8; -update noar ti set v0='MTP6S' where id=8; -update noar tt set b2='QZH08N732PWIZ09VGVGUS2RPY0VM' where id=8; -update noar ti set b2='QZH08N732PWIZ09VGVGUS2RPY0VM' where id=8; -update noar tt set v0='TV4JLNGWK9' where id=9; -update noar ti set v0='TV4JLNGWK9' where id=9; -update noar tt set b0='8DIOV4U36NOT' where id=9; -update noar ti set b0='8DIOV4U36NOT' where id=9; -update noar tt set v0='CYZ0ISDFX4YLMN3I65GCBO6T1PEW7XAR' where id=9; -update noar ti set v0='CYZ0ISDFX4YLMN3I65GCBO6T1PEW7XAR' where id=9; -update noar tt set b1='6AJAF5LQSLR9IWWKZOX' where id=9; -update noar ti set b1='6AJAF5LQSLR9IWWKZOX' where id=9; -update noar tt set v0='T2KBMGGWH8X3UTW7DAD9HG3XXT' where id=9; -update noar ti set v0='T2KBMGGWH8X3UTW7DAD9HG3XXT' where id=9; -update noar tt set b2='QRPN03UJXMA4CYD6VBIYXD3VOND' where id=9; -update noar ti set b2='QRPN03UJXMA4CYD6VBIYXD3VOND' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 mediumblob not null, -b1 mediumblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='GDSS1UEFQ8ZLH293SNN0KARC' where id=1; -update noar ti set v0='GDSS1UEFQ8ZLH293SNN0KARC' where id=1; -update noar tt set b0='Y0' where id=1; -update noar ti set b0='Y0' where id=1; -update noar tt set v0='QX9IYANLE' where id=1; -update noar ti set v0='QX9IYANLE' where id=1; -update noar tt set b1='7F9MGHG3T5JOY2O092IWR2JT' where id=1; -update noar ti set b1='7F9MGHG3T5JOY2O092IWR2JT' where id=1; -update noar tt set v0='M2VO91HQKJRHKUEWTR86T5YVN5HDN' where id=1; -update noar ti set v0='M2VO91HQKJRHKUEWTR86T5YVN5HDN' where id=1; -update noar tt set b2='0X1HMJ44PFOW' where id=1; -update noar ti set b2='0X1HMJ44PFOW' where id=1; -update noar tt set v0='SOJREY9' where id=2; -update noar ti set v0='SOJREY9' where id=2; -update noar tt set b0='CQ8WIDML7ML4NZ38UN' where id=2; -update noar ti set b0='CQ8WIDML7ML4NZ38UN' where id=2; -update noar tt set v0='UX56CCRGQ442YJ83BKU5EDJS' where id=2; -update noar ti set v0='UX56CCRGQ442YJ83BKU5EDJS' where id=2; -update noar tt set b1='1N2IP9P0CA955SB61MU4N' where id=2; -update noar ti set b1='1N2IP9P0CA955SB61MU4N' where id=2; -update noar tt set v0='8KNVTMZX22RTR' where id=2; -update noar ti set v0='8KNVTMZX22RTR' where id=2; -update noar tt set b2='YC5H8S8A4NX31P81Z5PCOYE51FYOL9I3' where id=2; -update noar ti set b2='YC5H8S8A4NX31P81Z5PCOYE51FYOL9I3' where id=2; -update noar tt set v0='9OTFK7B6S5PQ7TJR887RZXPVZ' where id=3; -update noar ti set v0='9OTFK7B6S5PQ7TJR887RZXPVZ' where id=3; -update noar tt set b0='GOIEBK4Y9IN3ZM4XW2ROS' where id=3; -update noar ti set b0='GOIEBK4Y9IN3ZM4XW2ROS' where id=3; -update noar tt set v0='KU8' where id=3; -update noar ti set v0='KU8' where id=3; -update noar tt set b1='NZ3C2VS90BUHU48XB5PFT0' where id=3; -update noar ti set b1='NZ3C2VS90BUHU48XB5PFT0' where id=3; -update noar tt set v0='YE16YNZUDH0' where id=3; -update noar ti set v0='YE16YNZUDH0' where id=3; -update noar tt set b2='HLL18OFQ88I7YQ4BZ4PL6DI' where id=3; -update noar ti set b2='HLL18OFQ88I7YQ4BZ4PL6DI' where id=3; -update noar tt set v0='XNSSCA66VJEU0EH0ZDD' where id=4; -update noar ti set v0='XNSSCA66VJEU0EH0ZDD' where id=4; -update noar tt set b0='4W1FJ99CUUKD5YDNI0E4RQRDA1VQC' where id=4; -update noar ti set b0='4W1FJ99CUUKD5YDNI0E4RQRDA1VQC' where id=4; -update noar tt set v0='EOUD4EC36Z65H5WT0MSPV1X4HL9' where id=4; -update noar ti set v0='EOUD4EC36Z65H5WT0MSPV1X4HL9' where id=4; -update noar tt set b1='JKDW8KJF5USOTIQMBZGQPO2EB4' where id=4; -update noar ti set b1='JKDW8KJF5USOTIQMBZGQPO2EB4' where id=4; -update noar tt set v0='WMSC4ZDKQVXFONMD1J' where id=4; -update noar ti set v0='WMSC4ZDKQVXFONMD1J' where id=4; -update noar tt set b2='5FX9USFRQX7XTLTD4LIB' where id=4; -update noar ti set b2='5FX9USFRQX7XTLTD4LIB' where id=4; -update noar tt set v0='3S59D9H0TAKVYZSLD927V' where id=5; -update noar ti set v0='3S59D9H0TAKVYZSLD927V' where id=5; -update noar tt set b0='237XV' where id=5; -update noar ti set b0='237XV' where id=5; -update noar tt set v0='EJYBRW8' where id=5; -update noar ti set v0='EJYBRW8' where id=5; -update noar tt set b1='TNZOOMW' where id=5; -update noar ti set b1='TNZOOMW' where id=5; -update noar tt set v0='AYJYPLAPKMZCP7GG' where id=5; -update noar ti set v0='AYJYPLAPKMZCP7GG' where id=5; -update noar tt set b2='8Q48YQYNI9B3DAKO6BXWULR94Q0AN' where id=5; -update noar ti set b2='8Q48YQYNI9B3DAKO6BXWULR94Q0AN' where id=5; -update noar tt set v0='N2YAP9Q' where id=6; -update noar ti set v0='N2YAP9Q' where id=6; -update noar tt set b0='Q95' where id=6; -update noar ti set b0='Q95' where id=6; -update noar tt set v0='P31LOYKZBP69829DCM6C4' where id=6; -update noar ti set v0='P31LOYKZBP69829DCM6C4' where id=6; -update noar tt set b1='WBA40XN0HKVS' where id=6; -update noar ti set b1='WBA40XN0HKVS' where id=6; -update noar tt set v0='278E194SJC78BHPYY968SP' where id=6; -update noar ti set v0='278E194SJC78BHPYY968SP' where id=6; -update noar tt set b2='3047CLE3XNL89JN9HI4S' where id=6; -update noar ti set b2='3047CLE3XNL89JN9HI4S' where id=6; -update noar tt set v0='FWU5YS2GMEEUR8WN96L' where id=7; -update noar ti set v0='FWU5YS2GMEEUR8WN96L' where id=7; -update noar tt set b0='Y500RXT09RUE8YXD93LNEV0N4Y8OQ' where id=7; -update noar ti set b0='Y500RXT09RUE8YXD93LNEV0N4Y8OQ' where id=7; -update noar tt set v0='8T93W47KBBQLC35IGE' where id=7; -update noar ti set v0='8T93W47KBBQLC35IGE' where id=7; -update noar tt set b1='LGXYSMX0JKHPMBC4GQNWCP' where id=7; -update noar ti set b1='LGXYSMX0JKHPMBC4GQNWCP' where id=7; -update noar tt set v0='ZYOZN9B11ZTS5TGPBS6KDVSI166RFSXO' where id=7; -update noar ti set v0='ZYOZN9B11ZTS5TGPBS6KDVSI166RFSXO' where id=7; -update noar tt set b2='KQ' where id=7; -update noar ti set b2='KQ' where id=7; -update noar tt set v0='P' where id=8; -update noar ti set v0='P' where id=8; -update noar tt set b0='3H1' where id=8; -update noar ti set b0='3H1' where id=8; -update noar tt set v0='E0PCQYO6H89VCG2EVHB60JY3LB' where id=8; -update noar ti set v0='E0PCQYO6H89VCG2EVHB60JY3LB' where id=8; -update noar tt set b1='A2MUO51MBHR25C6V' where id=8; -update noar ti set b1='A2MUO51MBHR25C6V' where id=8; -update noar tt set v0='OYIJU3PUQ7E1D0QJKDZ1YIA8O29G690W' where id=8; -update noar ti set v0='OYIJU3PUQ7E1D0QJKDZ1YIA8O29G690W' where id=8; -update noar tt set b2='6' where id=8; -update noar ti set b2='6' where id=8; -update noar tt set v0='JHUT7E5KSL7S9T9F57UXG' where id=9; -update noar ti set v0='JHUT7E5KSL7S9T9F57UXG' where id=9; -update noar tt set b0='PMPAZVSIAZ8SJB3HLPVQXF' where id=9; -update noar ti set b0='PMPAZVSIAZ8SJB3HLPVQXF' where id=9; -update noar tt set v0='NZO9P' where id=9; -update noar ti set v0='NZO9P' where id=9; -update noar tt set b1='UGINMSFFT1OE84O2SFHZ1B66OOR1Y' where id=9; -update noar ti set b1='UGINMSFFT1OE84O2SFHZ1B66OOR1Y' where id=9; -update noar tt set v0='N6TAZF3GWWRS0YEZ' where id=9; -update noar ti set v0='N6TAZF3GWWRS0YEZ' where id=9; -update noar tt set b2='QKW2ZW3XKZ' where id=9; -update noar ti set b2='QKW2ZW3XKZ' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 mediumblob not null, -b1 mediumblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='8085H3WKGE3ZSZ80KVBZB82J' where id=1; -update noar ti set v0='8085H3WKGE3ZSZ80KVBZB82J' where id=1; -update noar tt set b0='4M9AQLQITJTM3D02HCSS' where id=1; -update noar ti set b0='4M9AQLQITJTM3D02HCSS' where id=1; -update noar tt set v0='9NZPL44HOVCBHMNK6FH3JX' where id=1; -update noar ti set v0='9NZPL44HOVCBHMNK6FH3JX' where id=1; -update noar tt set b1='CG15I442' where id=1; -update noar ti set b1='CG15I442' where id=1; -update noar tt set v0='RHKTSYDBV05L' where id=1; -update noar ti set v0='RHKTSYDBV05L' where id=1; -update noar tt set b2='HA4ARL2GWP9E' where id=1; -update noar ti set b2='HA4ARL2GWP9E' where id=1; -update noar tt set v0='U7470ME9RH3' where id=2; -update noar ti set v0='U7470ME9RH3' where id=2; -update noar tt set b0='7COSTURH6IZFAI6TLASAJBXUND' where id=2; -update noar ti set b0='7COSTURH6IZFAI6TLASAJBXUND' where id=2; -update noar tt set v0='X8D64HF61R6ANMTFSGMHANEP' where id=2; -update noar ti set v0='X8D64HF61R6ANMTFSGMHANEP' where id=2; -update noar tt set b1='PCKYFQK9QJKFKLODURDINF' where id=2; -update noar ti set b1='PCKYFQK9QJKFKLODURDINF' where id=2; -update noar tt set v0='S7UDILAPODSR98KN8' where id=2; -update noar ti set v0='S7UDILAPODSR98KN8' where id=2; -update noar tt set b2='67V6Q94R' where id=2; -update noar ti set b2='67V6Q94R' where id=2; -update noar tt set v0='X' where id=3; -update noar ti set v0='X' where id=3; -update noar tt set b0='JO3O33' where id=3; -update noar ti set b0='JO3O33' where id=3; -update noar tt set v0='WKLXFGEM630S0FR9REQSGQ' where id=3; -update noar ti set v0='WKLXFGEM630S0FR9REQSGQ' where id=3; -update noar tt set b1='ZJX3S8HRZN69U' where id=3; -update noar ti set b1='ZJX3S8HRZN69U' where id=3; -update noar tt set v0='JW1WRP9S3FSAAS9Q06LBN7' where id=3; -update noar ti set v0='JW1WRP9S3FSAAS9Q06LBN7' where id=3; -update noar tt set b2='414NXGALJ3KK43W62CFBJBQ6P47YR5M' where id=3; -update noar ti set b2='414NXGALJ3KK43W62CFBJBQ6P47YR5M' where id=3; -update noar tt set v0='QEUQ9L0EI0UZNA6KVE824MXRXBWK8ZUN' where id=4; -update noar ti set v0='QEUQ9L0EI0UZNA6KVE824MXRXBWK8ZUN' where id=4; -update noar tt set b0='5GRDYB3R5YEIIH4BX4CUGFVJOZV' where id=4; -update noar ti set b0='5GRDYB3R5YEIIH4BX4CUGFVJOZV' where id=4; -update noar tt set v0='BYITJTGH5E1ZLE' where id=4; -update noar ti set v0='BYITJTGH5E1ZLE' where id=4; -update noar tt set b1='VJFWXCXHSX3O335PTA9Q3R' where id=4; -update noar ti set b1='VJFWXCXHSX3O335PTA9Q3R' where id=4; -update noar tt set v0='Z0I6J1448LRWEOVSJVKRHEAOZ2APBKWB' where id=4; -update noar ti set v0='Z0I6J1448LRWEOVSJVKRHEAOZ2APBKWB' where id=4; -update noar tt set b2='ZLQ89NZF9D08XHSQJAFRCV' where id=4; -update noar ti set b2='ZLQ89NZF9D08XHSQJAFRCV' where id=4; -update noar tt set v0='PXJFN8GSR0T4MF6OZ' where id=5; -update noar ti set v0='PXJFN8GSR0T4MF6OZ' where id=5; -update noar tt set b0='NSFY594582' where id=5; -update noar ti set b0='NSFY594582' where id=5; -update noar tt set v0='E31UGGZR62GTVYJ9KX0' where id=5; -update noar ti set v0='E31UGGZR62GTVYJ9KX0' where id=5; -update noar tt set b1='17KC538KG3GOSXD4C77I' where id=5; -update noar ti set b1='17KC538KG3GOSXD4C77I' where id=5; -update noar tt set v0='3CNYFDLATOJV8VEEIZ0GRID0KTZLY' where id=5; -update noar ti set v0='3CNYFDLATOJV8VEEIZ0GRID0KTZLY' where id=5; -update noar tt set b2='1AEGEW3A4PH3TF5J46KDYYS9SKIXR' where id=5; -update noar ti set b2='1AEGEW3A4PH3TF5J46KDYYS9SKIXR' where id=5; -update noar tt set v0='YR1OG8C5GH75Z5JHINPU' where id=6; -update noar ti set v0='YR1OG8C5GH75Z5JHINPU' where id=6; -update noar tt set b0='OKL5TBL99MY0G6MQQ8ZHI74FRY' where id=6; -update noar ti set b0='OKL5TBL99MY0G6MQQ8ZHI74FRY' where id=6; -update noar tt set v0='CIHNSDTWYH9LHP56FJ2B0FZ8GH' where id=6; -update noar ti set v0='CIHNSDTWYH9LHP56FJ2B0FZ8GH' where id=6; -update noar tt set b1='GI7F' where id=6; -update noar ti set b1='GI7F' where id=6; -update noar tt set v0='S7YTJF2J629F0HAOTQALJ' where id=6; -update noar ti set v0='S7YTJF2J629F0HAOTQALJ' where id=6; -update noar tt set b2='6Y0XKM56FW3ITOZ' where id=6; -update noar ti set b2='6Y0XKM56FW3ITOZ' where id=6; -update noar tt set v0='DBHE91TH' where id=7; -update noar ti set v0='DBHE91TH' where id=7; -update noar tt set b0='HMZ2KQE63VUTX7C3ZKCRZYJY' where id=7; -update noar ti set b0='HMZ2KQE63VUTX7C3ZKCRZYJY' where id=7; -update noar tt set v0='CKWXOZSA306SB6G' where id=7; -update noar ti set v0='CKWXOZSA306SB6G' where id=7; -update noar tt set b1='OB7K9ATROTGJ0OWBAG49C' where id=7; -update noar ti set b1='OB7K9ATROTGJ0OWBAG49C' where id=7; -update noar tt set v0='IYHS4P0GPQ4K' where id=7; -update noar ti set v0='IYHS4P0GPQ4K' where id=7; -update noar tt set b2='M9YFL5LCUM1NG' where id=7; -update noar ti set b2='M9YFL5LCUM1NG' where id=7; -update noar tt set v0='9WA83KFOQY7OWOE5AZPWC' where id=8; -update noar ti set v0='9WA83KFOQY7OWOE5AZPWC' where id=8; -update noar tt set b0='ZQZZ3GTO37AP1PAR1P2LD53GXIFC' where id=8; -update noar ti set b0='ZQZZ3GTO37AP1PAR1P2LD53GXIFC' where id=8; -update noar tt set v0='1GG0BXR967MSXST5' where id=8; -update noar ti set v0='1GG0BXR967MSXST5' where id=8; -update noar tt set b1='FYIJNQCZJTBKCAHIYWT7WLT8MW7' where id=8; -update noar ti set b1='FYIJNQCZJTBKCAHIYWT7WLT8MW7' where id=8; -update noar tt set v0='L50YBS9L8IV3DHCXYMA7TWS879DCPQI1' where id=8; -update noar ti set v0='L50YBS9L8IV3DHCXYMA7TWS879DCPQI1' where id=8; -update noar tt set b2='61H5GFXDQO7JF8U' where id=8; -update noar ti set b2='61H5GFXDQO7JF8U' where id=8; -update noar tt set v0='WG2W60DMI' where id=9; -update noar ti set v0='WG2W60DMI' where id=9; -update noar tt set b0='6YSOK97V9VOJNMEWE9WU8CMN' where id=9; -update noar ti set b0='6YSOK97V9VOJNMEWE9WU8CMN' where id=9; -update noar tt set v0='4RC6UM4WJJHE8KHJU28Y46' where id=9; -update noar ti set v0='4RC6UM4WJJHE8KHJU28Y46' where id=9; -update noar tt set b1='XMM5D2BOQDHGYMRBM' where id=9; -update noar ti set b1='XMM5D2BOQDHGYMRBM' where id=9; -update noar tt set v0='RIHX6GY5EHUT91TK2B9TGDU' where id=9; -update noar ti set v0='RIHX6GY5EHUT91TK2B9TGDU' where id=9; -update noar tt set b2='M040NX2' where id=9; -update noar ti set b2='M040NX2' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 mediumblob null, -b1 mediumblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='OM9F6DGLJGWD3OWJ0' where id=1; -update noar ti set v0='OM9F6DGLJGWD3OWJ0' where id=1; -update noar tt set b0='WX2Q' where id=1; -update noar ti set b0='WX2Q' where id=1; -update noar tt set v0='KK3X' where id=1; -update noar ti set v0='KK3X' where id=1; -update noar tt set b1='165' where id=1; -update noar ti set b1='165' where id=1; -update noar tt set v0='X1WV45UVU5UDZ8545XS' where id=1; -update noar ti set v0='X1WV45UVU5UDZ8545XS' where id=1; -update noar tt set b2='R' where id=1; -update noar ti set b2='R' where id=1; -update noar tt set v0='6W0' where id=2; -update noar ti set v0='6W0' where id=2; -update noar tt set b0='2UL9TLTPUT6TPAPQ8ZQZMA3FQ' where id=2; -update noar ti set b0='2UL9TLTPUT6TPAPQ8ZQZMA3FQ' where id=2; -update noar tt set v0='I34TEVC82NCGG2F0ZHDI' where id=2; -update noar ti set v0='I34TEVC82NCGG2F0ZHDI' where id=2; -update noar tt set b1='URE9V' where id=2; -update noar ti set b1='URE9V' where id=2; -update noar tt set v0='V354JGXG1EHAY' where id=2; -update noar ti set v0='V354JGXG1EHAY' where id=2; -update noar tt set b2='69GQOP6MLGRP08HGSY9NBIEWUTM8' where id=2; -update noar ti set b2='69GQOP6MLGRP08HGSY9NBIEWUTM8' where id=2; -update noar tt set v0='ZR' where id=3; -update noar ti set v0='ZR' where id=3; -update noar tt set b0='XHD0WD7VIH93' where id=3; -update noar ti set b0='XHD0WD7VIH93' where id=3; -update noar tt set v0='N89UHDMRLLF6' where id=3; -update noar ti set v0='N89UHDMRLLF6' where id=3; -update noar tt set b1='NTUQEEGNZP9EBZ' where id=3; -update noar ti set b1='NTUQEEGNZP9EBZ' where id=3; -update noar tt set v0='TD04E4MMEJYR2U3Y2R' where id=3; -update noar ti set v0='TD04E4MMEJYR2U3Y2R' where id=3; -update noar tt set b2='LX9F0OG3CVT5GYBDK299DAK784SP' where id=3; -update noar ti set b2='LX9F0OG3CVT5GYBDK299DAK784SP' where id=3; -update noar tt set v0='MBP36W3IML' where id=4; -update noar ti set v0='MBP36W3IML' where id=4; -update noar tt set b0='QX7LXSPL0G0KVHN14ACCMCDY7BPQL' where id=4; -update noar ti set b0='QX7LXSPL0G0KVHN14ACCMCDY7BPQL' where id=4; -update noar tt set v0='MPPKJIHXGWF83NOYN' where id=4; -update noar ti set v0='MPPKJIHXGWF83NOYN' where id=4; -update noar tt set b1='DPXSFNFNZPER1KI4DJHR3' where id=4; -update noar ti set b1='DPXSFNFNZPER1KI4DJHR3' where id=4; -update noar tt set v0='URSS' where id=4; -update noar ti set v0='URSS' where id=4; -update noar tt set b2='MX4JZICCQ3K1RQN9' where id=4; -update noar ti set b2='MX4JZICCQ3K1RQN9' where id=4; -update noar tt set v0='KC3VGV0A2X757OC7L73MX2R1' where id=5; -update noar ti set v0='KC3VGV0A2X757OC7L73MX2R1' where id=5; -update noar tt set b0='ZXV5MSXG3RNJ2NR1RZRW6NGZBNOL3WN5' where id=5; -update noar ti set b0='ZXV5MSXG3RNJ2NR1RZRW6NGZBNOL3WN5' where id=5; -update noar tt set v0='34YNPL29DFCIZ2SKU02TS32NS8' where id=5; -update noar ti set v0='34YNPL29DFCIZ2SKU02TS32NS8' where id=5; -update noar tt set b1='9A3P6JWZX92Q6J3T90FHOA1ARI9D' where id=5; -update noar ti set b1='9A3P6JWZX92Q6J3T90FHOA1ARI9D' where id=5; -update noar tt set v0='NU7UZN37ZWLGPGESTQCKDA' where id=5; -update noar ti set v0='NU7UZN37ZWLGPGESTQCKDA' where id=5; -update noar tt set b2='WI6WPD2E' where id=5; -update noar ti set b2='WI6WPD2E' where id=5; -update noar tt set v0='178K6SRB8D0B4RBRHGFB87HF' where id=6; -update noar ti set v0='178K6SRB8D0B4RBRHGFB87HF' where id=6; -update noar tt set b0='NS5IPKY5T4VL' where id=6; -update noar ti set b0='NS5IPKY5T4VL' where id=6; -update noar tt set v0='VOH0MR9VJR6M0QEJQZIOL1RA7XD4RX' where id=6; -update noar ti set v0='VOH0MR9VJR6M0QEJQZIOL1RA7XD4RX' where id=6; -update noar tt set b1='YO4BDZ7CU2WV9AOCF49IIH8' where id=6; -update noar ti set b1='YO4BDZ7CU2WV9AOCF49IIH8' where id=6; -update noar tt set v0='XYQDCYR97CE2LG4J99XA' where id=6; -update noar ti set v0='XYQDCYR97CE2LG4J99XA' where id=6; -update noar tt set b2='IZX4L2ISKJVGV2FJ8W' where id=6; -update noar ti set b2='IZX4L2ISKJVGV2FJ8W' where id=6; -update noar tt set v0='KLKT9AUMZE4SDHD6O8X7FUJUAPX' where id=7; -update noar ti set v0='KLKT9AUMZE4SDHD6O8X7FUJUAPX' where id=7; -update noar tt set b0='ZNEIJHUAJ6GLJ' where id=7; -update noar ti set b0='ZNEIJHUAJ6GLJ' where id=7; -update noar tt set v0='23J1QZRV27FFHPH1BVV' where id=7; -update noar ti set v0='23J1QZRV27FFHPH1BVV' where id=7; -update noar tt set b1='RWHRD2YVW' where id=7; -update noar ti set b1='RWHRD2YVW' where id=7; -update noar tt set v0='IGZ' where id=7; -update noar ti set v0='IGZ' where id=7; -update noar tt set b2='XGRZ98XQ0V5P7HIFFRUO4J8' where id=7; -update noar ti set b2='XGRZ98XQ0V5P7HIFFRUO4J8' where id=7; -update noar tt set v0='MKKIQ4OJT' where id=8; -update noar ti set v0='MKKIQ4OJT' where id=8; -update noar tt set b0='JY' where id=8; -update noar ti set b0='JY' where id=8; -update noar tt set v0='MOGTDQ8ERF7JECXGSHUX3W92TYMKR' where id=8; -update noar ti set v0='MOGTDQ8ERF7JECXGSHUX3W92TYMKR' where id=8; -update noar tt set b1='D61JS2ST6F6FGEC29XOE2DRS27U5BSPP' where id=8; -update noar ti set b1='D61JS2ST6F6FGEC29XOE2DRS27U5BSPP' where id=8; -update noar tt set v0='G6LMY1LUTIFU2DFE89R' where id=8; -update noar ti set v0='G6LMY1LUTIFU2DFE89R' where id=8; -update noar tt set b2='3OJ3VH5BYH99Q8NWP9FTLZHV771CYX' where id=8; -update noar ti set b2='3OJ3VH5BYH99Q8NWP9FTLZHV771CYX' where id=8; -update noar tt set v0='0LD8B63HBY' where id=9; -update noar ti set v0='0LD8B63HBY' where id=9; -update noar tt set b0='GFWWZWRI5DF7I0RZZVSAN5WZVCJA' where id=9; -update noar ti set b0='GFWWZWRI5DF7I0RZZVSAN5WZVCJA' where id=9; -update noar tt set v0='JW8GKXES9ZRT3GI15V1Q' where id=9; -update noar ti set v0='JW8GKXES9ZRT3GI15V1Q' where id=9; -update noar tt set b1='ZN' where id=9; -update noar ti set b1='ZN' where id=9; -update noar tt set v0='TYPZJ6VDMQ' where id=9; -update noar ti set v0='TYPZJ6VDMQ' where id=9; -update noar tt set b2='365FB9MNA3ZTD' where id=9; -update noar ti set b2='365FB9MNA3ZTD' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 mediumblob null, -b1 mediumblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='5LT' where id=1; -update noar ti set v0='5LT' where id=1; -update noar tt set b0='LNXTCKX' where id=1; -update noar ti set b0='LNXTCKX' where id=1; -update noar tt set v0='UEWTU2JHM' where id=1; -update noar ti set v0='UEWTU2JHM' where id=1; -update noar tt set b1='FD0B2WDPSNR2M' where id=1; -update noar ti set b1='FD0B2WDPSNR2M' where id=1; -update noar tt set v0='7PT7CA8EIPOKESUND9CGTSED8R' where id=1; -update noar ti set v0='7PT7CA8EIPOKESUND9CGTSED8R' where id=1; -update noar tt set b2='0REM82L82' where id=1; -update noar ti set b2='0REM82L82' where id=1; -update noar tt set v0='441X29DK2003SSIY9MLK19M3KI07V' where id=2; -update noar ti set v0='441X29DK2003SSIY9MLK19M3KI07V' where id=2; -update noar tt set b0='VUJ4F8SUTHE78DYTDL68YENPLWG' where id=2; -update noar ti set b0='VUJ4F8SUTHE78DYTDL68YENPLWG' where id=2; -update noar tt set v0='9Q3MZI4P686SDKP9K' where id=2; -update noar ti set v0='9Q3MZI4P686SDKP9K' where id=2; -update noar tt set b1='5' where id=2; -update noar ti set b1='5' where id=2; -update noar tt set v0='BJXRK44RBZ0Y9R1BDG4' where id=2; -update noar ti set v0='BJXRK44RBZ0Y9R1BDG4' where id=2; -update noar tt set b2='MX60I' where id=2; -update noar ti set b2='MX60I' where id=2; -update noar tt set v0='ACCEQTDTGF32KA9CWALURYM' where id=3; -update noar ti set v0='ACCEQTDTGF32KA9CWALURYM' where id=3; -update noar tt set b0='KR8R2' where id=3; -update noar ti set b0='KR8R2' where id=3; -update noar tt set v0='O227LV5IC' where id=3; -update noar ti set v0='O227LV5IC' where id=3; -update noar tt set b1='SMMYEVVNUJZLWRRET4DV6G3V4M0YEWPJ' where id=3; -update noar ti set b1='SMMYEVVNUJZLWRRET4DV6G3V4M0YEWPJ' where id=3; -update noar tt set v0='E0YCM1RDTAXZKA52CJBYMWGV86C' where id=3; -update noar ti set v0='E0YCM1RDTAXZKA52CJBYMWGV86C' where id=3; -update noar tt set b2='YHXJBMUTMPGHD8R9YGE' where id=3; -update noar ti set b2='YHXJBMUTMPGHD8R9YGE' where id=3; -update noar tt set v0='RSMLA8XZJ64CF7J' where id=4; -update noar ti set v0='RSMLA8XZJ64CF7J' where id=4; -update noar tt set b0='95A49B5F' where id=4; -update noar ti set b0='95A49B5F' where id=4; -update noar tt set v0='CUJY5X9' where id=4; -update noar ti set v0='CUJY5X9' where id=4; -update noar tt set b1='4VZ4K3L' where id=4; -update noar ti set b1='4VZ4K3L' where id=4; -update noar tt set v0='DSRUC2' where id=4; -update noar ti set v0='DSRUC2' where id=4; -update noar tt set b2='5JSGWN6K1C8KX7DOLHY' where id=4; -update noar ti set b2='5JSGWN6K1C8KX7DOLHY' where id=4; -update noar tt set v0='X51KLB1OEF' where id=5; -update noar ti set v0='X51KLB1OEF' where id=5; -update noar tt set b0='AYMJUWOZK96GYL4KY337XQXRHAPYC' where id=5; -update noar ti set b0='AYMJUWOZK96GYL4KY337XQXRHAPYC' where id=5; -update noar tt set v0='152K5' where id=5; -update noar ti set v0='152K5' where id=5; -update noar tt set b1='6SEO8JMU8FD' where id=5; -update noar ti set b1='6SEO8JMU8FD' where id=5; -update noar tt set v0='J7XKWW5BI5K6' where id=5; -update noar ti set v0='J7XKWW5BI5K6' where id=5; -update noar tt set b2='VWY0KY7KQF7FYZS1LO3L6LZ4P9WNO8' where id=5; -update noar ti set b2='VWY0KY7KQF7FYZS1LO3L6LZ4P9WNO8' where id=5; -update noar tt set v0='4Q677GFVA' where id=6; -update noar ti set v0='4Q677GFVA' where id=6; -update noar tt set b0='X' where id=6; -update noar ti set b0='X' where id=6; -update noar tt set v0='9ZYSUK' where id=6; -update noar ti set v0='9ZYSUK' where id=6; -update noar tt set b1='JKSJKEF9QZQGEH' where id=6; -update noar ti set b1='JKSJKEF9QZQGEH' where id=6; -update noar tt set v0='ZJOUBF1695NIJDHIMAO384' where id=6; -update noar ti set v0='ZJOUBF1695NIJDHIMAO384' where id=6; -update noar tt set b2='ZW74LM9ZBUANXXE6584WQUU79QI9T' where id=6; -update noar ti set b2='ZW74LM9ZBUANXXE6584WQUU79QI9T' where id=6; -update noar tt set v0='XZR654NKSROEH0BPWM9YI9R' where id=7; -update noar ti set v0='XZR654NKSROEH0BPWM9YI9R' where id=7; -update noar tt set b0='MAGDKKGQH' where id=7; -update noar ti set b0='MAGDKKGQH' where id=7; -update noar tt set v0='0ILPRB4YW2F48EICCZXX47P9JJP' where id=7; -update noar ti set v0='0ILPRB4YW2F48EICCZXX47P9JJP' where id=7; -update noar tt set b1='FQC9RK9G12JXVWV' where id=7; -update noar ti set b1='FQC9RK9G12JXVWV' where id=7; -update noar tt set v0='UWOH3778BPPUF' where id=7; -update noar ti set v0='UWOH3778BPPUF' where id=7; -update noar tt set b2='2' where id=7; -update noar ti set b2='2' where id=7; -update noar tt set v0='OROP4X0XUUKUQEGMDO' where id=8; -update noar ti set v0='OROP4X0XUUKUQEGMDO' where id=8; -update noar tt set b0='9KHZFWINZY22TR7DFR' where id=8; -update noar ti set b0='9KHZFWINZY22TR7DFR' where id=8; -update noar tt set v0='VD5YC1BGL128OG3LX7DK7O6H5CUU' where id=8; -update noar ti set v0='VD5YC1BGL128OG3LX7DK7O6H5CUU' where id=8; -update noar tt set b1='8P5D3NB8NIUX4LVZVLV3J5UANFL4OE2' where id=8; -update noar ti set b1='8P5D3NB8NIUX4LVZVLV3J5UANFL4OE2' where id=8; -update noar tt set v0='W575DZ' where id=8; -update noar ti set v0='W575DZ' where id=8; -update noar tt set b2='6JI0SDRKAW8N04BTJDR7Q' where id=8; -update noar ti set b2='6JI0SDRKAW8N04BTJDR7Q' where id=8; -update noar tt set v0='1M7TXVB4FKNRNSJKY5G1QETEX44V' where id=9; -update noar ti set v0='1M7TXVB4FKNRNSJKY5G1QETEX44V' where id=9; -update noar tt set b0='0MSG9HJDENISRY77JWUELH0E0W8NFO8T' where id=9; -update noar ti set b0='0MSG9HJDENISRY77JWUELH0E0W8NFO8T' where id=9; -update noar tt set v0='3D74L3KEP1HWSTH54FZPHV' where id=9; -update noar ti set v0='3D74L3KEP1HWSTH54FZPHV' where id=9; -update noar tt set b1='YCSV912PEB6BE' where id=9; -update noar ti set b1='YCSV912PEB6BE' where id=9; -update noar tt set v0='27' where id=9; -update noar ti set v0='27' where id=9; -update noar tt set b2='3XG0MVJXZ63XGJJZBA8' where id=9; -update noar ti set b2='3XG0MVJXZ63XGJJZBA8' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 mediumblob not null, -b1 mediumblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='JGN4QTFHFK' where id=1; -update noar ti set v0='JGN4QTFHFK' where id=1; -update noar tt set b0='DNYP0EE1ES4JDL577TSS00Q' where id=1; -update noar ti set b0='DNYP0EE1ES4JDL577TSS00Q' where id=1; -update noar tt set v0='UPJSWGW4MM6LI0F8K961PASN' where id=1; -update noar ti set v0='UPJSWGW4MM6LI0F8K961PASN' where id=1; -update noar tt set b1='FPG3R88I37FLO5' where id=1; -update noar ti set b1='FPG3R88I37FLO5' where id=1; -update noar tt set v0='BV0BA9' where id=1; -update noar ti set v0='BV0BA9' where id=1; -update noar tt set b2='WMCJM4LEX7DX0W6KPEF08UON' where id=1; -update noar ti set b2='WMCJM4LEX7DX0W6KPEF08UON' where id=1; -update noar tt set v0='G7' where id=2; -update noar ti set v0='G7' where id=2; -update noar tt set b0='TFH' where id=2; -update noar ti set b0='TFH' where id=2; -update noar tt set v0='M7AQAS08TI4B82' where id=2; -update noar ti set v0='M7AQAS08TI4B82' where id=2; -update noar tt set b1='H5LK7PEHOB3Y24G' where id=2; -update noar ti set b1='H5LK7PEHOB3Y24G' where id=2; -update noar tt set v0='5X419VQ4KWPIBM' where id=2; -update noar ti set v0='5X419VQ4KWPIBM' where id=2; -update noar tt set b2='VPBBD' where id=2; -update noar ti set b2='VPBBD' where id=2; -update noar tt set v0='LJXZ91ZOXXTW1HPYB304EC' where id=3; -update noar ti set v0='LJXZ91ZOXXTW1HPYB304EC' where id=3; -update noar tt set b0='E76KK42IV0L2P8Y7O7VOZOO6' where id=3; -update noar ti set b0='E76KK42IV0L2P8Y7O7VOZOO6' where id=3; -update noar tt set v0='B0' where id=3; -update noar ti set v0='B0' where id=3; -update noar tt set b1='UOT5F79' where id=3; -update noar ti set b1='UOT5F79' where id=3; -update noar tt set v0='4270VR8' where id=3; -update noar ti set v0='4270VR8' where id=3; -update noar tt set b2='9I8918KAPITNFZLWIFJ266FOANA' where id=3; -update noar ti set b2='9I8918KAPITNFZLWIFJ266FOANA' where id=3; -update noar tt set v0='5OKW3JXHD6E7435MINJ7M' where id=4; -update noar ti set v0='5OKW3JXHD6E7435MINJ7M' where id=4; -update noar tt set b0='1YBYYBD4B7AY7JHH3U8JSNNB6I1WXG8R' where id=4; -update noar ti set b0='1YBYYBD4B7AY7JHH3U8JSNNB6I1WXG8R' where id=4; -update noar tt set v0='PKWJU4I8IWH6VVQX0K3EW80YNKOZH' where id=4; -update noar ti set v0='PKWJU4I8IWH6VVQX0K3EW80YNKOZH' where id=4; -update noar tt set b1='AJMIJEEV' where id=4; -update noar ti set b1='AJMIJEEV' where id=4; -update noar tt set v0='GCAK54V1BUTU5FI2U' where id=4; -update noar ti set v0='GCAK54V1BUTU5FI2U' where id=4; -update noar tt set b2='QU93GWILSD4O439A49LHE' where id=4; -update noar ti set b2='QU93GWILSD4O439A49LHE' where id=4; -update noar tt set v0='HYREQ9FG9UNRGMAIYX' where id=5; -update noar ti set v0='HYREQ9FG9UNRGMAIYX' where id=5; -update noar tt set b0='3GBT0' where id=5; -update noar ti set b0='3GBT0' where id=5; -update noar tt set v0='S18EQDS' where id=5; -update noar ti set v0='S18EQDS' where id=5; -update noar tt set b1='ACKI84AH8DHCDERB53Z335MBTLKK66F9' where id=5; -update noar ti set b1='ACKI84AH8DHCDERB53Z335MBTLKK66F9' where id=5; -update noar tt set v0='SLO3BUOT5U3IE9' where id=5; -update noar ti set v0='SLO3BUOT5U3IE9' where id=5; -update noar tt set b2='2D91TPELQGJ' where id=5; -update noar ti set b2='2D91TPELQGJ' where id=5; -update noar tt set v0='F6132GVKX24P' where id=6; -update noar ti set v0='F6132GVKX24P' where id=6; -update noar tt set b0='KOPC7I2KY5FP5H815EF9F2QCIEWF' where id=6; -update noar ti set b0='KOPC7I2KY5FP5H815EF9F2QCIEWF' where id=6; -update noar tt set v0='UDKKHE4CR8EVX2Q5LO17BP9LO77' where id=6; -update noar ti set v0='UDKKHE4CR8EVX2Q5LO17BP9LO77' where id=6; -update noar tt set b1='H7P21A' where id=6; -update noar ti set b1='H7P21A' where id=6; -update noar tt set v0='3YIK9FNE5ILY' where id=6; -update noar ti set v0='3YIK9FNE5ILY' where id=6; -update noar tt set b2='063JBL6QOSQ34B5MUKL' where id=6; -update noar ti set b2='063JBL6QOSQ34B5MUKL' where id=6; -update noar tt set v0='WX9WXYIGGR4DZZQMA1MGXIB' where id=7; -update noar ti set v0='WX9WXYIGGR4DZZQMA1MGXIB' where id=7; -update noar tt set b0='1CMHFS9WQILWH' where id=7; -update noar ti set b0='1CMHFS9WQILWH' where id=7; -update noar tt set v0='CZMKT8F' where id=7; -update noar ti set v0='CZMKT8F' where id=7; -update noar tt set b1='YE0YYRN5A5V58T0I' where id=7; -update noar ti set b1='YE0YYRN5A5V58T0I' where id=7; -update noar tt set v0='9D22H8K' where id=7; -update noar ti set v0='9D22H8K' where id=7; -update noar tt set b2='HMNAC11J4S9PLTL8KSKSQTY8' where id=7; -update noar ti set b2='HMNAC11J4S9PLTL8KSKSQTY8' where id=7; -update noar tt set v0='N8RNIJ8R75RVP8OO4G35501BCZH1E5PK' where id=8; -update noar ti set v0='N8RNIJ8R75RVP8OO4G35501BCZH1E5PK' where id=8; -update noar tt set b0='IBPTTO45M40M8W4A5T9QK4779' where id=8; -update noar ti set b0='IBPTTO45M40M8W4A5T9QK4779' where id=8; -update noar tt set v0='TEQKE1C2DJEOCRRT7W8PR' where id=8; -update noar ti set v0='TEQKE1C2DJEOCRRT7W8PR' where id=8; -update noar tt set b1='7D' where id=8; -update noar ti set b1='7D' where id=8; -update noar tt set v0='4FABU203DVBSM4CIVQYA5R8EFIL' where id=8; -update noar ti set v0='4FABU203DVBSM4CIVQYA5R8EFIL' where id=8; -update noar tt set b2='2DGHEUT4H0HCQ19DB' where id=8; -update noar ti set b2='2DGHEUT4H0HCQ19DB' where id=8; -update noar tt set v0='VMZTHZ8WZ4KHWA' where id=9; -update noar ti set v0='VMZTHZ8WZ4KHWA' where id=9; -update noar tt set b0='Q8G4ANO9FWPMBSYSP7EU8TH2G' where id=9; -update noar ti set b0='Q8G4ANO9FWPMBSYSP7EU8TH2G' where id=9; -update noar tt set v0='GA0HBEDG28ISRLMNH6B45Y8P' where id=9; -update noar ti set v0='GA0HBEDG28ISRLMNH6B45Y8P' where id=9; -update noar tt set b1='IHM9GX2SND8MNR7AAF4UE02' where id=9; -update noar ti set b1='IHM9GX2SND8MNR7AAF4UE02' where id=9; -update noar tt set v0='MBJDOXW3LS0RS730WJ175KYZWATGWZQ' where id=9; -update noar ti set v0='MBJDOXW3LS0RS730WJ175KYZWATGWZQ' where id=9; -update noar tt set b2='WB84KK3ES0T' where id=9; -update noar ti set b2='WB84KK3ES0T' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 mediumblob not null, -b1 mediumblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='QBY6LV' where id=1; -update noar ti set v0='QBY6LV' where id=1; -update noar tt set b0='OVKC107A0Y3ZCY12G43LYBUR' where id=1; -update noar ti set b0='OVKC107A0Y3ZCY12G43LYBUR' where id=1; -update noar tt set v0='K8LJYQ2PFKJDD' where id=1; -update noar ti set v0='K8LJYQ2PFKJDD' where id=1; -update noar tt set b1='GSYQNRKCBJJA' where id=1; -update noar ti set b1='GSYQNRKCBJJA' where id=1; -update noar tt set v0='E1U' where id=1; -update noar ti set v0='E1U' where id=1; -update noar tt set b2='MQQZGAUVAOEENS7AJ2' where id=1; -update noar ti set b2='MQQZGAUVAOEENS7AJ2' where id=1; -update noar tt set v0='S3WZ0YC9V011XSG4EEPPZ6H4MT4D' where id=2; -update noar ti set v0='S3WZ0YC9V011XSG4EEPPZ6H4MT4D' where id=2; -update noar tt set b0='DI83NAA0MNS3QRLM' where id=2; -update noar ti set b0='DI83NAA0MNS3QRLM' where id=2; -update noar tt set v0='JA6SRDWITUO9VV4TKXB7' where id=2; -update noar ti set v0='JA6SRDWITUO9VV4TKXB7' where id=2; -update noar tt set b1='13Z57OG4PEDBVPEFRHBRNPQ0V6' where id=2; -update noar ti set b1='13Z57OG4PEDBVPEFRHBRNPQ0V6' where id=2; -update noar tt set v0='NHJWJ601DZ' where id=2; -update noar ti set v0='NHJWJ601DZ' where id=2; -update noar tt set b2='QL3D8OO67BS' where id=2; -update noar ti set b2='QL3D8OO67BS' where id=2; -update noar tt set v0='FO13D2POSU4TKT366NP' where id=3; -update noar ti set v0='FO13D2POSU4TKT366NP' where id=3; -update noar tt set b0='F3P6CJK2U4KNYIXE' where id=3; -update noar ti set b0='F3P6CJK2U4KNYIXE' where id=3; -update noar tt set v0='EFFCKQKTEZ288' where id=3; -update noar ti set v0='EFFCKQKTEZ288' where id=3; -update noar tt set b1='8ETN5QNUEVH77IU8S0QCDQBTCD' where id=3; -update noar ti set b1='8ETN5QNUEVH77IU8S0QCDQBTCD' where id=3; -update noar tt set v0='W4CZLDZO3CQY0T4ACQH24FD' where id=3; -update noar ti set v0='W4CZLDZO3CQY0T4ACQH24FD' where id=3; -update noar tt set b2='68OQ9XSPWC' where id=3; -update noar ti set b2='68OQ9XSPWC' where id=3; -update noar tt set v0='C4CDQ5M2IABWBS42HAAS' where id=4; -update noar ti set v0='C4CDQ5M2IABWBS42HAAS' where id=4; -update noar tt set b0='5EJRVGKY0XB' where id=4; -update noar ti set b0='5EJRVGKY0XB' where id=4; -update noar tt set v0='F2WNH15FORSUB632R1FFBHY4B' where id=4; -update noar ti set v0='F2WNH15FORSUB632R1FFBHY4B' where id=4; -update noar tt set b1='NDCBEC2CY8G4VPOEQVMZFX8Y' where id=4; -update noar ti set b1='NDCBEC2CY8G4VPOEQVMZFX8Y' where id=4; -update noar tt set v0='BRVH6XJTK3DVSWMQG' where id=4; -update noar ti set v0='BRVH6XJTK3DVSWMQG' where id=4; -update noar tt set b2='8OMQPM95BTW6JLXXX4WSYCH82CJG34K' where id=4; -update noar ti set b2='8OMQPM95BTW6JLXXX4WSYCH82CJG34K' where id=4; -update noar tt set v0='B3EBNE7I32' where id=5; -update noar ti set v0='B3EBNE7I32' where id=5; -update noar tt set b0='P' where id=5; -update noar ti set b0='P' where id=5; -update noar tt set v0='AMZYJPSCET70XVUJMHCTXQBSXX' where id=5; -update noar ti set v0='AMZYJPSCET70XVUJMHCTXQBSXX' where id=5; -update noar tt set b1='RQJJQ' where id=5; -update noar ti set b1='RQJJQ' where id=5; -update noar tt set v0='SI' where id=5; -update noar ti set v0='SI' where id=5; -update noar tt set b2='1Q0W67XJ5R53' where id=5; -update noar ti set b2='1Q0W67XJ5R53' where id=5; -update noar tt set v0='W' where id=6; -update noar ti set v0='W' where id=6; -update noar tt set b0='ZQQZZS2650TVV58' where id=6; -update noar ti set b0='ZQQZZS2650TVV58' where id=6; -update noar tt set v0='FMX6N8SRJPGSUBJZS46S' where id=6; -update noar ti set v0='FMX6N8SRJPGSUBJZS46S' where id=6; -update noar tt set b1='T3VSKTNGPN0OLHGAV9K5Y1I5ERVQ' where id=6; -update noar ti set b1='T3VSKTNGPN0OLHGAV9K5Y1I5ERVQ' where id=6; -update noar tt set v0='ZR5A64D' where id=6; -update noar ti set v0='ZR5A64D' where id=6; -update noar tt set b2='0L98AT5YQK6KGF5' where id=6; -update noar ti set b2='0L98AT5YQK6KGF5' where id=6; -update noar tt set v0='F24NBRI1HGH6HU02SBHZLKL78KFV2W' where id=7; -update noar ti set v0='F24NBRI1HGH6HU02SBHZLKL78KFV2W' where id=7; -update noar tt set b0='3BCZN' where id=7; -update noar ti set b0='3BCZN' where id=7; -update noar tt set v0='NM07MR8SN9L69D0' where id=7; -update noar ti set v0='NM07MR8SN9L69D0' where id=7; -update noar tt set b1='2KFQF9IPL4WMX5Z' where id=7; -update noar ti set b1='2KFQF9IPL4WMX5Z' where id=7; -update noar tt set v0='2PCTBJ' where id=7; -update noar ti set v0='2PCTBJ' where id=7; -update noar tt set b2='QLHI32EKBMNNVQD' where id=7; -update noar ti set b2='QLHI32EKBMNNVQD' where id=7; -update noar tt set v0='S98ROI44IXUYDXQ' where id=8; -update noar ti set v0='S98ROI44IXUYDXQ' where id=8; -update noar tt set b0='NWISI' where id=8; -update noar ti set b0='NWISI' where id=8; -update noar tt set v0='8SG4UK11AXE016YB452' where id=8; -update noar ti set v0='8SG4UK11AXE016YB452' where id=8; -update noar tt set b1='9FGH3A2JVQ3GFF4CJ' where id=8; -update noar ti set b1='9FGH3A2JVQ3GFF4CJ' where id=8; -update noar tt set v0='8E54PD6V905HEA17WB' where id=8; -update noar ti set v0='8E54PD6V905HEA17WB' where id=8; -update noar tt set b2='ZMLRM3O0' where id=8; -update noar ti set b2='ZMLRM3O0' where id=8; -update noar tt set v0='9H2YM2J5E0BS0A8OJB8P24B2H3' where id=9; -update noar ti set v0='9H2YM2J5E0BS0A8OJB8P24B2H3' where id=9; -update noar tt set b0='F4H1' where id=9; -update noar ti set b0='F4H1' where id=9; -update noar tt set v0='U3URAFKJP8TL07NMU03N94JGNO' where id=9; -update noar ti set v0='U3URAFKJP8TL07NMU03N94JGNO' where id=9; -update noar tt set b1='WBKOZUBPFKC' where id=9; -update noar ti set b1='WBKOZUBPFKC' where id=9; -update noar tt set v0='950NBB1L1WJAYF' where id=9; -update noar ti set v0='950NBB1L1WJAYF' where id=9; -update noar tt set b2='3JZE6A0GL6K4055LXF8KEJUBALFGF6F1' where id=9; -update noar ti set b2='3JZE6A0GL6K4055LXF8KEJUBALFGF6F1' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 mediumblob null, -b1 mediumblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='9877QISJZWDG5TRCA0WOA7QDCQDY3N' where id=1; -update noar ti set v0='9877QISJZWDG5TRCA0WOA7QDCQDY3N' where id=1; -update noar tt set b0='UN1MQMGSL0USVSIKFO' where id=1; -update noar ti set b0='UN1MQMGSL0USVSIKFO' where id=1; -update noar tt set v0='O0N4X' where id=1; -update noar ti set v0='O0N4X' where id=1; -update noar tt set b1='31' where id=1; -update noar ti set b1='31' where id=1; -update noar tt set v0='X9TCNPDK1TY305U72VI6' where id=1; -update noar ti set v0='X9TCNPDK1TY305U72VI6' where id=1; -update noar tt set b2='06R' where id=1; -update noar ti set b2='06R' where id=1; -update noar tt set v0='L0N3UJP51CXLT3Z69XI6NAQ3EWP1GB' where id=2; -update noar ti set v0='L0N3UJP51CXLT3Z69XI6NAQ3EWP1GB' where id=2; -update noar tt set b0='LWH30LLDH2JV6TYUGF' where id=2; -update noar ti set b0='LWH30LLDH2JV6TYUGF' where id=2; -update noar tt set v0='2PI29TFFIO0' where id=2; -update noar ti set v0='2PI29TFFIO0' where id=2; -update noar tt set b1='K5YRI9TSHS67Z77F2A3S9U5U4RQW3C' where id=2; -update noar ti set b1='K5YRI9TSHS67Z77F2A3S9U5U4RQW3C' where id=2; -update noar tt set v0='9QIKKPAYU3XFX4C' where id=2; -update noar ti set v0='9QIKKPAYU3XFX4C' where id=2; -update noar tt set b2='8OCM2CRFW759M0' where id=2; -update noar ti set b2='8OCM2CRFW759M0' where id=2; -update noar tt set v0='ZOUS40IIDM9XTCG2Z7P9MCHS' where id=3; -update noar ti set v0='ZOUS40IIDM9XTCG2Z7P9MCHS' where id=3; -update noar tt set b0='7E3BD5O1' where id=3; -update noar ti set b0='7E3BD5O1' where id=3; -update noar tt set v0='QZ4KN75FEGVF9' where id=3; -update noar ti set v0='QZ4KN75FEGVF9' where id=3; -update noar tt set b1='QF1KX7WTP' where id=3; -update noar ti set b1='QF1KX7WTP' where id=3; -update noar tt set v0='HOPUNF7M30GQNI0Y7JXIU6AKYK3A4EG' where id=3; -update noar ti set v0='HOPUNF7M30GQNI0Y7JXIU6AKYK3A4EG' where id=3; -update noar tt set b2='WPHABIAUXA0U0' where id=3; -update noar ti set b2='WPHABIAUXA0U0' where id=3; -update noar tt set v0='4806XCACSQKO' where id=4; -update noar ti set v0='4806XCACSQKO' where id=4; -update noar tt set b0='JR71U4' where id=4; -update noar ti set b0='JR71U4' where id=4; -update noar tt set v0='6Q8RPDXCTCI75U8W6FV5TG1CE4ZRG' where id=4; -update noar ti set v0='6Q8RPDXCTCI75U8W6FV5TG1CE4ZRG' where id=4; -update noar tt set b1='N3FRK2FP' where id=4; -update noar ti set b1='N3FRK2FP' where id=4; -update noar tt set v0='QEBD6LKNO' where id=4; -update noar ti set v0='QEBD6LKNO' where id=4; -update noar tt set b2='6U63NHFD42RY20S1' where id=4; -update noar ti set b2='6U63NHFD42RY20S1' where id=4; -update noar tt set v0='3MO6O6SHTRK' where id=5; -update noar ti set v0='3MO6O6SHTRK' where id=5; -update noar tt set b0='IE3A9KPQJ7R4KNYF2WPAEEC97A' where id=5; -update noar ti set b0='IE3A9KPQJ7R4KNYF2WPAEEC97A' where id=5; -update noar tt set v0='LD26DWMCPJVL1K7' where id=5; -update noar ti set v0='LD26DWMCPJVL1K7' where id=5; -update noar tt set b1='L26WI76NIFVTSFMZ7GBBU40KKANO8Z6' where id=5; -update noar ti set b1='L26WI76NIFVTSFMZ7GBBU40KKANO8Z6' where id=5; -update noar tt set v0='KLH0JBWPYGSKYGZ8Q7NCG' where id=5; -update noar ti set v0='KLH0JBWPYGSKYGZ8Q7NCG' where id=5; -update noar tt set b2='IKQDOQT694KK' where id=5; -update noar ti set b2='IKQDOQT694KK' where id=5; -update noar tt set v0='KW7OUX2ZGXXIMXVNEP2MG15M13' where id=6; -update noar ti set v0='KW7OUX2ZGXXIMXVNEP2MG15M13' where id=6; -update noar tt set b0='KXRZKKZW7D' where id=6; -update noar ti set b0='KXRZKKZW7D' where id=6; -update noar tt set v0='5XINU22GELE81P0O8HFW2D' where id=6; -update noar ti set v0='5XINU22GELE81P0O8HFW2D' where id=6; -update noar tt set b1='MWM54FOMUB2WR' where id=6; -update noar ti set b1='MWM54FOMUB2WR' where id=6; -update noar tt set v0='1DD2B4KHSMHUW18CSMSPH12OMCH09L65' where id=6; -update noar ti set v0='1DD2B4KHSMHUW18CSMSPH12OMCH09L65' where id=6; -update noar tt set b2='4QRM7CD07XREJXMP2UWT7BK8NV3K' where id=6; -update noar ti set b2='4QRM7CD07XREJXMP2UWT7BK8NV3K' where id=6; -update noar tt set v0='46MBYC4OHHEGFY1K7928BN37LSBE' where id=7; -update noar ti set v0='46MBYC4OHHEGFY1K7928BN37LSBE' where id=7; -update noar tt set b0='5VHGNSJLOZ5IHO0WVQVNJ1WO5VUGHP8Y' where id=7; -update noar ti set b0='5VHGNSJLOZ5IHO0WVQVNJ1WO5VUGHP8Y' where id=7; -update noar tt set v0='7J' where id=7; -update noar ti set v0='7J' where id=7; -update noar tt set b1='FXXY2EWJE8JXKTH' where id=7; -update noar ti set b1='FXXY2EWJE8JXKTH' where id=7; -update noar tt set v0='1DXSFXQ' where id=7; -update noar ti set v0='1DXSFXQ' where id=7; -update noar tt set b2='8898HQDTJF' where id=7; -update noar ti set b2='8898HQDTJF' where id=7; -update noar tt set v0='9F82N2B9FI' where id=8; -update noar ti set v0='9F82N2B9FI' where id=8; -update noar tt set b0='D9P8FY' where id=8; -update noar ti set b0='D9P8FY' where id=8; -update noar tt set v0='0E6LKTH10EG' where id=8; -update noar ti set v0='0E6LKTH10EG' where id=8; -update noar tt set b1='PBB3AQ' where id=8; -update noar ti set b1='PBB3AQ' where id=8; -update noar tt set v0='L99E7LA' where id=8; -update noar ti set v0='L99E7LA' where id=8; -update noar tt set b2='ZW40C5QYC5' where id=8; -update noar ti set b2='ZW40C5QYC5' where id=8; -update noar tt set v0='VKA30BP6ECKRZPY0N3FP' where id=9; -update noar ti set v0='VKA30BP6ECKRZPY0N3FP' where id=9; -update noar tt set b0='O' where id=9; -update noar ti set b0='O' where id=9; -update noar tt set v0='14QD9JUSW4P8AYRHHH607B4V' where id=9; -update noar ti set v0='14QD9JUSW4P8AYRHHH607B4V' where id=9; -update noar tt set b1='8LY6P8ZBRNQM4VUGA9Y8K3PG9NKJR7ZB' where id=9; -update noar ti set b1='8LY6P8ZBRNQM4VUGA9Y8K3PG9NKJR7ZB' where id=9; -update noar tt set v0='PA6GLXJTEX' where id=9; -update noar ti set v0='PA6GLXJTEX' where id=9; -update noar tt set b2='KIEBI52U' where id=9; -update noar ti set b2='KIEBI52U' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 mediumblob null, -b1 mediumblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='H5HBU6R8BZYCIII1IFV4YLME' where id=1; -update noar ti set v0='H5HBU6R8BZYCIII1IFV4YLME' where id=1; -update noar tt set b0='N24KW0DCPYJQ2EQF0NHLE6FB7JJ' where id=1; -update noar ti set b0='N24KW0DCPYJQ2EQF0NHLE6FB7JJ' where id=1; -update noar tt set v0='14VXM7NSH8JELONFR89PG' where id=1; -update noar ti set v0='14VXM7NSH8JELONFR89PG' where id=1; -update noar tt set b1='BS5GV' where id=1; -update noar ti set b1='BS5GV' where id=1; -update noar tt set v0='RI5DGFRDWTME4' where id=1; -update noar ti set v0='RI5DGFRDWTME4' where id=1; -update noar tt set b2='QVO1VLYYV8QJ4KUSJDF' where id=1; -update noar ti set b2='QVO1VLYYV8QJ4KUSJDF' where id=1; -update noar tt set v0='DCJBP1W73KPH44P9A2F4' where id=2; -update noar ti set v0='DCJBP1W73KPH44P9A2F4' where id=2; -update noar tt set b0='R9SCSZYP2NW8W4MG5L4XPWV6LLUX9L' where id=2; -update noar ti set b0='R9SCSZYP2NW8W4MG5L4XPWV6LLUX9L' where id=2; -update noar tt set v0='B9KMSZ29WFF5IAY9K' where id=2; -update noar ti set v0='B9KMSZ29WFF5IAY9K' where id=2; -update noar tt set b1='G6EANYJD4AOC4R53' where id=2; -update noar ti set b1='G6EANYJD4AOC4R53' where id=2; -update noar tt set v0='QPFLNX' where id=2; -update noar ti set v0='QPFLNX' where id=2; -update noar tt set b2='N' where id=2; -update noar ti set b2='N' where id=2; -update noar tt set v0='KHET61D2' where id=3; -update noar ti set v0='KHET61D2' where id=3; -update noar tt set b0='HO5B1HZTHVILWBW1X9ZYWB63O' where id=3; -update noar ti set b0='HO5B1HZTHVILWBW1X9ZYWB63O' where id=3; -update noar tt set v0='PQDIOQK5LLXYD9GVBOM22P' where id=3; -update noar ti set v0='PQDIOQK5LLXYD9GVBOM22P' where id=3; -update noar tt set b1='EI1DPMO13ZMK5EE87' where id=3; -update noar ti set b1='EI1DPMO13ZMK5EE87' where id=3; -update noar tt set v0='7GDUXQNDOKFXNW9POZ8DDAYY83U7M3' where id=3; -update noar ti set v0='7GDUXQNDOKFXNW9POZ8DDAYY83U7M3' where id=3; -update noar tt set b2='0273OXVZ57ZESOFIFLBCTY4WPVM' where id=3; -update noar ti set b2='0273OXVZ57ZESOFIFLBCTY4WPVM' where id=3; -update noar tt set v0='G01U6X7A43G8Q' where id=4; -update noar ti set v0='G01U6X7A43G8Q' where id=4; -update noar tt set b0='2NIWV8FFS' where id=4; -update noar ti set b0='2NIWV8FFS' where id=4; -update noar tt set v0='9UK0J14GF0DC' where id=4; -update noar ti set v0='9UK0J14GF0DC' where id=4; -update noar tt set b1='B2C6Y4HNDL9QZKP2ZDU4BO5' where id=4; -update noar ti set b1='B2C6Y4HNDL9QZKP2ZDU4BO5' where id=4; -update noar tt set v0='3YLJH4XW0' where id=4; -update noar ti set v0='3YLJH4XW0' where id=4; -update noar tt set b2='AECACJFS' where id=4; -update noar ti set b2='AECACJFS' where id=4; -update noar tt set v0='311H3EHC' where id=5; -update noar ti set v0='311H3EHC' where id=5; -update noar tt set b0='YAHEPPLTBEXW0A4NGLNIOALW7' where id=5; -update noar ti set b0='YAHEPPLTBEXW0A4NGLNIOALW7' where id=5; -update noar tt set v0='0A8L603F5ZNLBXE528SF1KG8R93' where id=5; -update noar ti set v0='0A8L603F5ZNLBXE528SF1KG8R93' where id=5; -update noar tt set b1='4' where id=5; -update noar ti set b1='4' where id=5; -update noar tt set v0='WUBWN34O6QC9UJYYVEQ56BCS' where id=5; -update noar ti set v0='WUBWN34O6QC9UJYYVEQ56BCS' where id=5; -update noar tt set b2='DFVG6J' where id=5; -update noar ti set b2='DFVG6J' where id=5; -update noar tt set v0='WARQW9ICF8U8MQV4ZQBUENP2U3BEHL' where id=6; -update noar ti set v0='WARQW9ICF8U8MQV4ZQBUENP2U3BEHL' where id=6; -update noar tt set b0='NCEALEANHJ5S4YYUV' where id=6; -update noar ti set b0='NCEALEANHJ5S4YYUV' where id=6; -update noar tt set v0='G1NMBSNUER7DSXM0' where id=6; -update noar ti set v0='G1NMBSNUER7DSXM0' where id=6; -update noar tt set b1='HD4UGAIHZ3FS72PHGD5I9LH0S' where id=6; -update noar ti set b1='HD4UGAIHZ3FS72PHGD5I9LH0S' where id=6; -update noar tt set v0='QGNO39Z2T055QG39QV2NPSVI9MPY3J74' where id=6; -update noar ti set v0='QGNO39Z2T055QG39QV2NPSVI9MPY3J74' where id=6; -update noar tt set b2='AZ' where id=6; -update noar ti set b2='AZ' where id=6; -update noar tt set v0='MIR9' where id=7; -update noar ti set v0='MIR9' where id=7; -update noar tt set b0='RSKLUMYAC5LN4JWVT' where id=7; -update noar ti set b0='RSKLUMYAC5LN4JWVT' where id=7; -update noar tt set v0='NSAGD36PD97Q7OFAPSLGZ3Y5' where id=7; -update noar ti set v0='NSAGD36PD97Q7OFAPSLGZ3Y5' where id=7; -update noar tt set b1='G8YRCVXB3J11YVQOYRZDDHJ5Z12' where id=7; -update noar ti set b1='G8YRCVXB3J11YVQOYRZDDHJ5Z12' where id=7; -update noar tt set v0='JYUJ30HLYSNIO40BHKUUS9IMTYNKDD' where id=7; -update noar ti set v0='JYUJ30HLYSNIO40BHKUUS9IMTYNKDD' where id=7; -update noar tt set b2='AA5GR0WPXUI0ETO1HSEO3OZ' where id=7; -update noar ti set b2='AA5GR0WPXUI0ETO1HSEO3OZ' where id=7; -update noar tt set v0='MF5V32X6B9VVCDF' where id=8; -update noar ti set v0='MF5V32X6B9VVCDF' where id=8; -update noar tt set b0='WKAS4XO23A2VIXMW7UX56LGCJHH24T' where id=8; -update noar ti set b0='WKAS4XO23A2VIXMW7UX56LGCJHH24T' where id=8; -update noar tt set v0='40492I' where id=8; -update noar ti set v0='40492I' where id=8; -update noar tt set b1='K2XZKP6YUKJ599MBIULYS' where id=8; -update noar ti set b1='K2XZKP6YUKJ599MBIULYS' where id=8; -update noar tt set v0='AKIQYVM4DN6QAV7HPN905S1LCXZE7' where id=8; -update noar ti set v0='AKIQYVM4DN6QAV7HPN905S1LCXZE7' where id=8; -update noar tt set b2='9W4XY9Y8XCO6I5BWBQG' where id=8; -update noar ti set b2='9W4XY9Y8XCO6I5BWBQG' where id=8; -update noar tt set v0='8ODC8TJ8X32TFC6U6K' where id=9; -update noar ti set v0='8ODC8TJ8X32TFC6U6K' where id=9; -update noar tt set b0='B982RRGEVL02Y91VWCW7' where id=9; -update noar ti set b0='B982RRGEVL02Y91VWCW7' where id=9; -update noar tt set v0='CY' where id=9; -update noar ti set v0='CY' where id=9; -update noar tt set b1='WUS5' where id=9; -update noar ti set b1='WUS5' where id=9; -update noar tt set v0='DB6UV1N9FS9YCN3S' where id=9; -update noar ti set v0='DB6UV1N9FS9YCN3S' where id=9; -update noar tt set b2='2JR32MU3K1L2OY8KW7HU' where id=9; -update noar ti set b2='2JR32MU3K1L2OY8KW7HU' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 mediumblob not null, -b1 mediumblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='0BAHDVEMAF6TXCHRV8RZ' where id=1; -update noar ti set v0='0BAHDVEMAF6TXCHRV8RZ' where id=1; -update noar tt set b0='6W681RWYE9QLQA1SEJ4WFK' where id=1; -update noar ti set b0='6W681RWYE9QLQA1SEJ4WFK' where id=1; -update noar tt set v0='3P24TYJXMVSW1' where id=1; -update noar ti set v0='3P24TYJXMVSW1' where id=1; -update noar tt set b1='K4F6RIK9WB4LCL7XIFDP2XP8IG8XRCV2' where id=1; -update noar ti set b1='K4F6RIK9WB4LCL7XIFDP2XP8IG8XRCV2' where id=1; -update noar tt set v0='YWF7ZMWX1WUXMVUQXZSFQV70D59' where id=1; -update noar ti set v0='YWF7ZMWX1WUXMVUQXZSFQV70D59' where id=1; -update noar tt set b2='YQJN2J5I9IL' where id=1; -update noar ti set b2='YQJN2J5I9IL' where id=1; -update noar tt set v0='S' where id=2; -update noar ti set v0='S' where id=2; -update noar tt set b0='0VM3S2TQIMV9KGQRHO6042353V' where id=2; -update noar ti set b0='0VM3S2TQIMV9KGQRHO6042353V' where id=2; -update noar tt set v0='MH01K96WWUEY06YQA3AJVXDWPLH57' where id=2; -update noar ti set v0='MH01K96WWUEY06YQA3AJVXDWPLH57' where id=2; -update noar tt set b1='VYC8U14504KR3B7U94QMIG' where id=2; -update noar ti set b1='VYC8U14504KR3B7U94QMIG' where id=2; -update noar tt set v0='TTKPMGOB5J4C8ZDJZ5WJ' where id=2; -update noar ti set v0='TTKPMGOB5J4C8ZDJZ5WJ' where id=2; -update noar tt set b2='ZOH0X84S14SV8NUT513W9' where id=2; -update noar ti set b2='ZOH0X84S14SV8NUT513W9' where id=2; -update noar tt set v0='HXJD18J' where id=3; -update noar ti set v0='HXJD18J' where id=3; -update noar tt set b0='0BX' where id=3; -update noar ti set b0='0BX' where id=3; -update noar tt set v0='1' where id=3; -update noar ti set v0='1' where id=3; -update noar tt set b1='96NGGQAJN' where id=3; -update noar ti set b1='96NGGQAJN' where id=3; -update noar tt set v0='MC6CSVS6K1' where id=3; -update noar ti set v0='MC6CSVS6K1' where id=3; -update noar tt set b2='L0O4RE2TBDVJQ6W3N5S1O97E0P2B' where id=3; -update noar ti set b2='L0O4RE2TBDVJQ6W3N5S1O97E0P2B' where id=3; -update noar tt set v0='QF4JB1HEQD2QBB7V8G3E8O8I' where id=4; -update noar ti set v0='QF4JB1HEQD2QBB7V8G3E8O8I' where id=4; -update noar tt set b0='6I8CIW9S3IDV5NGH15SQK6WG7ZIMZGVU' where id=4; -update noar ti set b0='6I8CIW9S3IDV5NGH15SQK6WG7ZIMZGVU' where id=4; -update noar tt set v0='DCR9KRAGB88R2612GK5I7A0YZ8J4D0VD' where id=4; -update noar ti set v0='DCR9KRAGB88R2612GK5I7A0YZ8J4D0VD' where id=4; -update noar tt set b1='NI2C7ZOLRMSM6YGXBS8HPK1VS91PZ5N' where id=4; -update noar ti set b1='NI2C7ZOLRMSM6YGXBS8HPK1VS91PZ5N' where id=4; -update noar tt set v0='5XUO7VXPWMI' where id=4; -update noar ti set v0='5XUO7VXPWMI' where id=4; -update noar tt set b2='75SPATWCF81WH' where id=4; -update noar ti set b2='75SPATWCF81WH' where id=4; -update noar tt set v0='LO3ZCGWS2SG31I0OJDTQ1V0J7' where id=5; -update noar ti set v0='LO3ZCGWS2SG31I0OJDTQ1V0J7' where id=5; -update noar tt set b0='STKLF0T58SM0TNDE8LQ1SCESW3' where id=5; -update noar ti set b0='STKLF0T58SM0TNDE8LQ1SCESW3' where id=5; -update noar tt set v0='OWTAU1BMK3' where id=5; -update noar ti set v0='OWTAU1BMK3' where id=5; -update noar tt set b1='6ZBEU3POBSYDBCXXI' where id=5; -update noar ti set b1='6ZBEU3POBSYDBCXXI' where id=5; -update noar tt set v0='RZ8LS9TCURZQREHXPJC' where id=5; -update noar ti set v0='RZ8LS9TCURZQREHXPJC' where id=5; -update noar tt set b2='JRB2IC86L908' where id=5; -update noar ti set b2='JRB2IC86L908' where id=5; -update noar tt set v0='TX4Z95BP4ZFBM2P5KWOXWV3328QF' where id=6; -update noar ti set v0='TX4Z95BP4ZFBM2P5KWOXWV3328QF' where id=6; -update noar tt set b0='J7D0KN5E8QTPSXC6TG69YTQBKP0EAHN' where id=6; -update noar ti set b0='J7D0KN5E8QTPSXC6TG69YTQBKP0EAHN' where id=6; -update noar tt set v0='VT425GBDCBJHX0DF' where id=6; -update noar ti set v0='VT425GBDCBJHX0DF' where id=6; -update noar tt set b1='B1JP4IR0TVN5KUGN' where id=6; -update noar ti set b1='B1JP4IR0TVN5KUGN' where id=6; -update noar tt set v0='MRM55C4H2Q7ZH8UBLSONG' where id=6; -update noar ti set v0='MRM55C4H2Q7ZH8UBLSONG' where id=6; -update noar tt set b2='QL36ARLN7RQKK8L' where id=6; -update noar ti set b2='QL36ARLN7RQKK8L' where id=6; -update noar tt set v0='Q99C0OIYH65GU' where id=7; -update noar ti set v0='Q99C0OIYH65GU' where id=7; -update noar tt set b0='XDVX0DGI0CTY89ZM' where id=7; -update noar ti set b0='XDVX0DGI0CTY89ZM' where id=7; -update noar tt set v0='ACHAXOTSM8O8NI99' where id=7; -update noar ti set v0='ACHAXOTSM8O8NI99' where id=7; -update noar tt set b1='3JJMYB9CV3' where id=7; -update noar ti set b1='3JJMYB9CV3' where id=7; -update noar tt set v0='MGI4MN0JK78U6C672AM1UL4KV3G2D' where id=7; -update noar ti set v0='MGI4MN0JK78U6C672AM1UL4KV3G2D' where id=7; -update noar tt set b2='WA1UB0KFK' where id=7; -update noar ti set b2='WA1UB0KFK' where id=7; -update noar tt set v0='QJYN' where id=8; -update noar ti set v0='QJYN' where id=8; -update noar tt set b0='DIG7UHHJCFM2UO7OI4I386' where id=8; -update noar ti set b0='DIG7UHHJCFM2UO7OI4I386' where id=8; -update noar tt set v0='T03WQPBFRY625D8QVKQ0NJ0J' where id=8; -update noar ti set v0='T03WQPBFRY625D8QVKQ0NJ0J' where id=8; -update noar tt set b1='61D' where id=8; -update noar ti set b1='61D' where id=8; -update noar tt set v0='HE2FTABS59W' where id=8; -update noar ti set v0='HE2FTABS59W' where id=8; -update noar tt set b2='I95UH4GBSJIYOECBPWORJS8UENPO6LIE' where id=8; -update noar ti set b2='I95UH4GBSJIYOECBPWORJS8UENPO6LIE' where id=8; -update noar tt set v0='M42AB4VQ2ALSM9ACEITW5S' where id=9; -update noar ti set v0='M42AB4VQ2ALSM9ACEITW5S' where id=9; -update noar tt set b0='XNE8LXH4KCO' where id=9; -update noar ti set b0='XNE8LXH4KCO' where id=9; -update noar tt set v0='DW60C619CFATRZHWWYQ' where id=9; -update noar ti set v0='DW60C619CFATRZHWWYQ' where id=9; -update noar tt set b1='HPZYGB9ROV6YKMRFYMRL' where id=9; -update noar ti set b1='HPZYGB9ROV6YKMRFYMRL' where id=9; -update noar tt set v0='VCSXIF5FXB8JJ4K3A8' where id=9; -update noar ti set v0='VCSXIF5FXB8JJ4K3A8' where id=9; -update noar tt set b2='MWNN5' where id=9; -update noar ti set b2='MWNN5' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 mediumblob not null, -b1 mediumblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='H3TPN3DRU0XGIKN2FMSS5AWDSLXM' where id=1; -update noar ti set v0='H3TPN3DRU0XGIKN2FMSS5AWDSLXM' where id=1; -update noar tt set b0='XRX4H3LKY7PBHS8JDR4JM5D04I' where id=1; -update noar ti set b0='XRX4H3LKY7PBHS8JDR4JM5D04I' where id=1; -update noar tt set v0='E14IDYSDQPNLKU41DRZNPRMO2' where id=1; -update noar ti set v0='E14IDYSDQPNLKU41DRZNPRMO2' where id=1; -update noar tt set b1='HI2PJJPAS8' where id=1; -update noar ti set b1='HI2PJJPAS8' where id=1; -update noar tt set v0='HLQ9IBJE4ELQURD9B8L77PEAYY0670Q' where id=1; -update noar ti set v0='HLQ9IBJE4ELQURD9B8L77PEAYY0670Q' where id=1; -update noar tt set b2='PJ' where id=1; -update noar ti set b2='PJ' where id=1; -update noar tt set v0='FTDU0OC1GUNA7SDZHXJ7SPDEC7ZO20' where id=2; -update noar ti set v0='FTDU0OC1GUNA7SDZHXJ7SPDEC7ZO20' where id=2; -update noar tt set b0='ZRGVTEBI4KPJY8E06V' where id=2; -update noar ti set b0='ZRGVTEBI4KPJY8E06V' where id=2; -update noar tt set v0='VGU9UVGXAUOAOXCXZW' where id=2; -update noar ti set v0='VGU9UVGXAUOAOXCXZW' where id=2; -update noar tt set b1='65C9K7YS0ZCLWD' where id=2; -update noar ti set b1='65C9K7YS0ZCLWD' where id=2; -update noar tt set v0='LFWR2B61HLW3Q' where id=2; -update noar ti set v0='LFWR2B61HLW3Q' where id=2; -update noar tt set b2='JEA7LIHL8UDSL3' where id=2; -update noar ti set b2='JEA7LIHL8UDSL3' where id=2; -update noar tt set v0='JXELV8Z' where id=3; -update noar ti set v0='JXELV8Z' where id=3; -update noar tt set b0='98RUG' where id=3; -update noar ti set b0='98RUG' where id=3; -update noar tt set v0='ZZQVTZXL4IRGK' where id=3; -update noar ti set v0='ZZQVTZXL4IRGK' where id=3; -update noar tt set b1='LK0R7FFED8' where id=3; -update noar ti set b1='LK0R7FFED8' where id=3; -update noar tt set v0='HRA69F' where id=3; -update noar ti set v0='HRA69F' where id=3; -update noar tt set b2='ETNHVB7G17WDHSWG5SEOEGP8X5' where id=3; -update noar ti set b2='ETNHVB7G17WDHSWG5SEOEGP8X5' where id=3; -update noar tt set v0='SIY0Z6T64C411KAP626OXUDYOJD9IO' where id=4; -update noar ti set v0='SIY0Z6T64C411KAP626OXUDYOJD9IO' where id=4; -update noar tt set b0='YL6LRM' where id=4; -update noar ti set b0='YL6LRM' where id=4; -update noar tt set v0='BFPCF281ON415AEGCNGUWMNEE' where id=4; -update noar ti set v0='BFPCF281ON415AEGCNGUWMNEE' where id=4; -update noar tt set b1='5W7LZTC25UT1C1RGE' where id=4; -update noar ti set b1='5W7LZTC25UT1C1RGE' where id=4; -update noar tt set v0='1P6IZFJ8SB8YWFSKDHLJ1XLIPU1L' where id=4; -update noar ti set v0='1P6IZFJ8SB8YWFSKDHLJ1XLIPU1L' where id=4; -update noar tt set b2='ZT6' where id=4; -update noar ti set b2='ZT6' where id=4; -update noar tt set v0='61SFKGPZ7RI' where id=5; -update noar ti set v0='61SFKGPZ7RI' where id=5; -update noar tt set b0='C13THBYNTEWVXXX' where id=5; -update noar ti set b0='C13THBYNTEWVXXX' where id=5; -update noar tt set v0='NI9OREOUY0XPPP8S86G49Q' where id=5; -update noar ti set v0='NI9OREOUY0XPPP8S86G49Q' where id=5; -update noar tt set b1='Z7XN29W7Y' where id=5; -update noar ti set b1='Z7XN29W7Y' where id=5; -update noar tt set v0='8P3B048Y6X6EGUC6A6C1EN2R9SIARW' where id=5; -update noar ti set v0='8P3B048Y6X6EGUC6A6C1EN2R9SIARW' where id=5; -update noar tt set b2='62KSURH9XUQCN8E5FKTPVY3TUIC56VUW' where id=5; -update noar ti set b2='62KSURH9XUQCN8E5FKTPVY3TUIC56VUW' where id=5; -update noar tt set v0='5HVQIRGO' where id=6; -update noar ti set v0='5HVQIRGO' where id=6; -update noar tt set b0='AN2GWY2ANAVLC0MPS' where id=6; -update noar ti set b0='AN2GWY2ANAVLC0MPS' where id=6; -update noar tt set v0='FX1SAZS7FNLC5SLEU' where id=6; -update noar ti set v0='FX1SAZS7FNLC5SLEU' where id=6; -update noar tt set b1='ZUCS3JKAZ54F8TIBWRD2JFG43VGJ9' where id=6; -update noar ti set b1='ZUCS3JKAZ54F8TIBWRD2JFG43VGJ9' where id=6; -update noar tt set v0='GBNOLS59XYLDBFY8ZIT2ASYMD5MVEJOQ' where id=6; -update noar ti set v0='GBNOLS59XYLDBFY8ZIT2ASYMD5MVEJOQ' where id=6; -update noar tt set b2='K72OXPLKADZMIC5B1APJ8AA4SX' where id=6; -update noar ti set b2='K72OXPLKADZMIC5B1APJ8AA4SX' where id=6; -update noar tt set v0='KQBMDXVJJ0BM3S' where id=7; -update noar ti set v0='KQBMDXVJJ0BM3S' where id=7; -update noar tt set b0='CJLHH932LR1NWIT' where id=7; -update noar ti set b0='CJLHH932LR1NWIT' where id=7; -update noar tt set v0='R0VKSU' where id=7; -update noar ti set v0='R0VKSU' where id=7; -update noar tt set b1='E7WLWME8XHMA' where id=7; -update noar ti set b1='E7WLWME8XHMA' where id=7; -update noar tt set v0='SXK7F33NM5KD09' where id=7; -update noar ti set v0='SXK7F33NM5KD09' where id=7; -update noar tt set b2='K7UQ70V1P7NC7JO05F84' where id=7; -update noar ti set b2='K7UQ70V1P7NC7JO05F84' where id=7; -update noar tt set v0='B51VK1I' where id=8; -update noar ti set v0='B51VK1I' where id=8; -update noar tt set b0='PNO2' where id=8; -update noar ti set b0='PNO2' where id=8; -update noar tt set v0='XGGLAK4D7J89F' where id=8; -update noar ti set v0='XGGLAK4D7J89F' where id=8; -update noar tt set b1='ZTJ4' where id=8; -update noar ti set b1='ZTJ4' where id=8; -update noar tt set v0='8N7YU77T1DQVG6' where id=8; -update noar ti set v0='8N7YU77T1DQVG6' where id=8; -update noar tt set b2='JKJNOK108967KI694YJ3GMXN' where id=8; -update noar ti set b2='JKJNOK108967KI694YJ3GMXN' where id=8; -update noar tt set v0='5VSYNDN' where id=9; -update noar ti set v0='5VSYNDN' where id=9; -update noar tt set b0='97I9SQW6UACXU' where id=9; -update noar ti set b0='97I9SQW6UACXU' where id=9; -update noar tt set v0='6O7SAIM4O7WBH0CRK3VJ3RDIG' where id=9; -update noar ti set v0='6O7SAIM4O7WBH0CRK3VJ3RDIG' where id=9; -update noar tt set b1='GW5ZRV' where id=9; -update noar ti set b1='GW5ZRV' where id=9; -update noar tt set v0='49AEMDJRGYULPQ6H7Z98B2' where id=9; -update noar ti set v0='49AEMDJRGYULPQ6H7Z98B2' where id=9; -update noar tt set b2='S6AV9M95RBLBB6B1HTED9AT5CPLYT406' where id=9; -update noar ti set b2='S6AV9M95RBLBB6B1HTED9AT5CPLYT406' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 mediumblob null, -b1 mediumblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='G3JVL6F5LUIGOVJOV7XKIPINF8OTVVQ' where id=1; -update noar ti set v0='G3JVL6F5LUIGOVJOV7XKIPINF8OTVVQ' where id=1; -update noar tt set b0='5DHOY458T59FUCJF477T2EEBT8' where id=1; -update noar ti set b0='5DHOY458T59FUCJF477T2EEBT8' where id=1; -update noar tt set v0='F7J8497T' where id=1; -update noar ti set v0='F7J8497T' where id=1; -update noar tt set b1='6DCRKO' where id=1; -update noar ti set b1='6DCRKO' where id=1; -update noar tt set v0='2IT' where id=1; -update noar ti set v0='2IT' where id=1; -update noar tt set b2='ZMFJR3VBCSRKRNVWK20GDSORC4J' where id=1; -update noar ti set b2='ZMFJR3VBCSRKRNVWK20GDSORC4J' where id=1; -update noar tt set v0='K50NZH9' where id=2; -update noar ti set v0='K50NZH9' where id=2; -update noar tt set b0='5FHTDP' where id=2; -update noar ti set b0='5FHTDP' where id=2; -update noar tt set v0='DB73JMV8GO1JINNN1TJ0QIQC' where id=2; -update noar ti set v0='DB73JMV8GO1JINNN1TJ0QIQC' where id=2; -update noar tt set b1='3VDFPGI6KC2V7411W8R5GK1P8U31' where id=2; -update noar ti set b1='3VDFPGI6KC2V7411W8R5GK1P8U31' where id=2; -update noar tt set v0='S8Z8JGZ8BP8' where id=2; -update noar ti set v0='S8Z8JGZ8BP8' where id=2; -update noar tt set b2='3Q8ZNSY74C1' where id=2; -update noar ti set b2='3Q8ZNSY74C1' where id=2; -update noar tt set v0='3YX9721VVEJDUDA' where id=3; -update noar ti set v0='3YX9721VVEJDUDA' where id=3; -update noar tt set b0='JH8AS' where id=3; -update noar ti set b0='JH8AS' where id=3; -update noar tt set v0='29WHSNKACBSE2JKTQ9FCIVNPSFS6AQ5A' where id=3; -update noar ti set v0='29WHSNKACBSE2JKTQ9FCIVNPSFS6AQ5A' where id=3; -update noar tt set b1='SEKWFEUG96PK' where id=3; -update noar ti set b1='SEKWFEUG96PK' where id=3; -update noar tt set v0='GQS651EF8DJ41CDK2TZAITF' where id=3; -update noar ti set v0='GQS651EF8DJ41CDK2TZAITF' where id=3; -update noar tt set b2='CSEAJ4G5WAKF6JHIWKU' where id=3; -update noar ti set b2='CSEAJ4G5WAKF6JHIWKU' where id=3; -update noar tt set v0='T3JKP' where id=4; -update noar ti set v0='T3JKP' where id=4; -update noar tt set b0='NOHMKZ1WS' where id=4; -update noar ti set b0='NOHMKZ1WS' where id=4; -update noar tt set v0='FADTOTBMZ6' where id=4; -update noar ti set v0='FADTOTBMZ6' where id=4; -update noar tt set b1='X618XFZRZ' where id=4; -update noar ti set b1='X618XFZRZ' where id=4; -update noar tt set v0='7WCT37YR' where id=4; -update noar ti set v0='7WCT37YR' where id=4; -update noar tt set b2='DN8CZ3FLXM' where id=4; -update noar ti set b2='DN8CZ3FLXM' where id=4; -update noar tt set v0='MDC60H' where id=5; -update noar ti set v0='MDC60H' where id=5; -update noar tt set b0='HLBZP30B1F8HXDJ8VM1VV5JN2QM' where id=5; -update noar ti set b0='HLBZP30B1F8HXDJ8VM1VV5JN2QM' where id=5; -update noar tt set v0='4LHRO5LIG9GTI6XWHNM' where id=5; -update noar ti set v0='4LHRO5LIG9GTI6XWHNM' where id=5; -update noar tt set b1='A42N14FN6ZUFJPG25N7' where id=5; -update noar ti set b1='A42N14FN6ZUFJPG25N7' where id=5; -update noar tt set v0='FSTR36P4I756P5AOTMPKMBW77976OOY' where id=5; -update noar ti set v0='FSTR36P4I756P5AOTMPKMBW77976OOY' where id=5; -update noar tt set b2='B26H7JBWQ46WY66JOVMXDB2T4H0E' where id=5; -update noar ti set b2='B26H7JBWQ46WY66JOVMXDB2T4H0E' where id=5; -update noar tt set v0='5ER9SBYR474TI' where id=6; -update noar ti set v0='5ER9SBYR474TI' where id=6; -update noar tt set b0='ELHTM5FH345EH12P07IL0HM7XC8GSBM3' where id=6; -update noar ti set b0='ELHTM5FH345EH12P07IL0HM7XC8GSBM3' where id=6; -update noar tt set v0='6I5N96WQPOJUA26UKYGJYN' where id=6; -update noar ti set v0='6I5N96WQPOJUA26UKYGJYN' where id=6; -update noar tt set b1='B669WKZJ5' where id=6; -update noar ti set b1='B669WKZJ5' where id=6; -update noar tt set v0='PLHRL5ENXYTLELOPPWT' where id=6; -update noar ti set v0='PLHRL5ENXYTLELOPPWT' where id=6; -update noar tt set b2='NUPN5ITY9WVM5KHUSC1R' where id=6; -update noar ti set b2='NUPN5ITY9WVM5KHUSC1R' where id=6; -update noar tt set v0='3VEMKM7M58PWF6TYMXMGGSHC2A' where id=7; -update noar ti set v0='3VEMKM7M58PWF6TYMXMGGSHC2A' where id=7; -update noar tt set b0='OCDOMAN43X9TWS87LT5HAJZF' where id=7; -update noar ti set b0='OCDOMAN43X9TWS87LT5HAJZF' where id=7; -update noar tt set v0='L38LX68UP48MBJO0FN2JZHDEUY' where id=7; -update noar ti set v0='L38LX68UP48MBJO0FN2JZHDEUY' where id=7; -update noar tt set b1='XE845LW8Y' where id=7; -update noar ti set b1='XE845LW8Y' where id=7; -update noar tt set v0='YU4BP3ST769M9ZEP' where id=7; -update noar ti set v0='YU4BP3ST769M9ZEP' where id=7; -update noar tt set b2='GWQJ' where id=7; -update noar ti set b2='GWQJ' where id=7; -update noar tt set v0='LEAT3THR6XNFG' where id=8; -update noar ti set v0='LEAT3THR6XNFG' where id=8; -update noar tt set b0='KEHBDLF75SC4X3KLT' where id=8; -update noar ti set b0='KEHBDLF75SC4X3KLT' where id=8; -update noar tt set v0='G' where id=8; -update noar ti set v0='G' where id=8; -update noar tt set b1='3PTN937' where id=8; -update noar ti set b1='3PTN937' where id=8; -update noar tt set v0='EJYW79RK0GN653T7LD02B3RYRVBS00W' where id=8; -update noar ti set v0='EJYW79RK0GN653T7LD02B3RYRVBS00W' where id=8; -update noar tt set b2='EV79D96U3W' where id=8; -update noar ti set b2='EV79D96U3W' where id=8; -update noar tt set v0='31J2F45RFWPSMUELRIH1KG' where id=9; -update noar ti set v0='31J2F45RFWPSMUELRIH1KG' where id=9; -update noar tt set b0='K56NDM1AELA0TBO1Y' where id=9; -update noar ti set b0='K56NDM1AELA0TBO1Y' where id=9; -update noar tt set v0='P812SBQB6NX6N5H7238C2C' where id=9; -update noar ti set v0='P812SBQB6NX6N5H7238C2C' where id=9; -update noar tt set b1='ZNK04XXCLH7TT414M9TBSUZ7FFQEVXWO' where id=9; -update noar ti set b1='ZNK04XXCLH7TT414M9TBSUZ7FFQEVXWO' where id=9; -update noar tt set v0='M7JE77EBR4ZCJS86WFQM5DZ6XV67' where id=9; -update noar ti set v0='M7JE77EBR4ZCJS86WFQM5DZ6XV67' where id=9; -update noar tt set b2='SE5XDPPMCIFPJRA21NUUUCU45M1B' where id=9; -update noar ti set b2='SE5XDPPMCIFPJRA21NUUUCU45M1B' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 mediumblob null, -b1 mediumblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='CK8A595P72N6P0OL4S' where id=1; -update noar ti set v0='CK8A595P72N6P0OL4S' where id=1; -update noar tt set b0='J7O19GQZK52JRH9211' where id=1; -update noar ti set b0='J7O19GQZK52JRH9211' where id=1; -update noar tt set v0='QYPTT3WQBKIL8QF' where id=1; -update noar ti set v0='QYPTT3WQBKIL8QF' where id=1; -update noar tt set b1='HQ9CUW8ZQ96SZCC0E77W' where id=1; -update noar ti set b1='HQ9CUW8ZQ96SZCC0E77W' where id=1; -update noar tt set v0='OO8PDNF7H3GVKL5U0YQO8ETO7N32HP' where id=1; -update noar ti set v0='OO8PDNF7H3GVKL5U0YQO8ETO7N32HP' where id=1; -update noar tt set b2='8I6PRR2IY415NNT5M544QAP60CM7' where id=1; -update noar ti set b2='8I6PRR2IY415NNT5M544QAP60CM7' where id=1; -update noar tt set v0='5YVCJ5AZVA17EFOD0P0P7CZ939P4T' where id=2; -update noar ti set v0='5YVCJ5AZVA17EFOD0P0P7CZ939P4T' where id=2; -update noar tt set b0='H2VH' where id=2; -update noar ti set b0='H2VH' where id=2; -update noar tt set v0='QF017CHXF2CGB6VEDIU7K7NABF2GXX' where id=2; -update noar ti set v0='QF017CHXF2CGB6VEDIU7K7NABF2GXX' where id=2; -update noar tt set b1='L7Z8' where id=2; -update noar ti set b1='L7Z8' where id=2; -update noar tt set v0='Y02JEIX25Q43038ASD0AG4JCKMK62OBV' where id=2; -update noar ti set v0='Y02JEIX25Q43038ASD0AG4JCKMK62OBV' where id=2; -update noar tt set b2='EHON58K2C' where id=2; -update noar ti set b2='EHON58K2C' where id=2; -update noar tt set v0='3XHE45N1F3RXNCNEH2MP' where id=3; -update noar ti set v0='3XHE45N1F3RXNCNEH2MP' where id=3; -update noar tt set b0='4VW8YCBJH0AFCXD' where id=3; -update noar ti set b0='4VW8YCBJH0AFCXD' where id=3; -update noar tt set v0='0FGVW3' where id=3; -update noar ti set v0='0FGVW3' where id=3; -update noar tt set b1='L60ZXJ' where id=3; -update noar ti set b1='L60ZXJ' where id=3; -update noar tt set v0='ZR863418A2MYJRI5SWKECGR85X' where id=3; -update noar ti set v0='ZR863418A2MYJRI5SWKECGR85X' where id=3; -update noar tt set b2='QRXY106JJJXT7BC7' where id=3; -update noar ti set b2='QRXY106JJJXT7BC7' where id=3; -update noar tt set v0='KXTKUTFBHZ6JYXXOVJETN5' where id=4; -update noar ti set v0='KXTKUTFBHZ6JYXXOVJETN5' where id=4; -update noar tt set b0='C' where id=4; -update noar ti set b0='C' where id=4; -update noar tt set v0='PY' where id=4; -update noar ti set v0='PY' where id=4; -update noar tt set b1='43N2' where id=4; -update noar ti set b1='43N2' where id=4; -update noar tt set v0='QKL4P3Q8E00IC9BNL' where id=4; -update noar ti set v0='QKL4P3Q8E00IC9BNL' where id=4; -update noar tt set b2='ZKR2B48NE4' where id=4; -update noar ti set b2='ZKR2B48NE4' where id=4; -update noar tt set v0='7UTT0GWR' where id=5; -update noar ti set v0='7UTT0GWR' where id=5; -update noar tt set b0='GBPSWEUC07S8CEQK6F9F4C901NU' where id=5; -update noar ti set b0='GBPSWEUC07S8CEQK6F9F4C901NU' where id=5; -update noar tt set v0='89UD0Z2ZC9T1TZTGGWHENLYN1D85J' where id=5; -update noar ti set v0='89UD0Z2ZC9T1TZTGGWHENLYN1D85J' where id=5; -update noar tt set b1='5XU3NUX0CTN4DG09ZNH' where id=5; -update noar ti set b1='5XU3NUX0CTN4DG09ZNH' where id=5; -update noar tt set v0='LALQ' where id=5; -update noar ti set v0='LALQ' where id=5; -update noar tt set b2='SH' where id=5; -update noar ti set b2='SH' where id=5; -update noar tt set v0='R6JLQZGKWR81SZ' where id=6; -update noar ti set v0='R6JLQZGKWR81SZ' where id=6; -update noar tt set b0='237UZM1ZBF6FRKWIUBB8NJME' where id=6; -update noar ti set b0='237UZM1ZBF6FRKWIUBB8NJME' where id=6; -update noar tt set v0='26U' where id=6; -update noar ti set v0='26U' where id=6; -update noar tt set b1='I1AR4ITBCZM7156AZT3CWE60XJME' where id=6; -update noar ti set b1='I1AR4ITBCZM7156AZT3CWE60XJME' where id=6; -update noar tt set v0='SAO0AZ6GBN5QSQIFF1A7' where id=6; -update noar ti set v0='SAO0AZ6GBN5QSQIFF1A7' where id=6; -update noar tt set b2='X60FUXSPG9YLJN3DLI9C0E0' where id=6; -update noar ti set b2='X60FUXSPG9YLJN3DLI9C0E0' where id=6; -update noar tt set v0='9A36ANO' where id=7; -update noar ti set v0='9A36ANO' where id=7; -update noar tt set b0='1GMKUTQSGOOHV3R2YXKD9ITUNH5' where id=7; -update noar ti set b0='1GMKUTQSGOOHV3R2YXKD9ITUNH5' where id=7; -update noar tt set v0='FYLAAPTKRR6ZYTPBUCMQI' where id=7; -update noar ti set v0='FYLAAPTKRR6ZYTPBUCMQI' where id=7; -update noar tt set b1='Q1XEWKNBFERKC9' where id=7; -update noar ti set b1='Q1XEWKNBFERKC9' where id=7; -update noar tt set v0='NMOYYKNGCKC52TXEY2EO2WHLBPX9L9' where id=7; -update noar ti set v0='NMOYYKNGCKC52TXEY2EO2WHLBPX9L9' where id=7; -update noar tt set b2='9Z9CFXP2RLDIZX18MHIYODG0N0T7' where id=7; -update noar ti set b2='9Z9CFXP2RLDIZX18MHIYODG0N0T7' where id=7; -update noar tt set v0='VFXDZSP5SV' where id=8; -update noar ti set v0='VFXDZSP5SV' where id=8; -update noar tt set b0='DCFZLAGM7VK0G' where id=8; -update noar ti set b0='DCFZLAGM7VK0G' where id=8; -update noar tt set v0='NZPFG9XUIP7E47FJ0BZO0HCO8KDVZI3' where id=8; -update noar ti set v0='NZPFG9XUIP7E47FJ0BZO0HCO8KDVZI3' where id=8; -update noar tt set b1='HYIUARFCUAQK0LECUQXMI5GZ6ECUO7J' where id=8; -update noar ti set b1='HYIUARFCUAQK0LECUQXMI5GZ6ECUO7J' where id=8; -update noar tt set v0='CM' where id=8; -update noar ti set v0='CM' where id=8; -update noar tt set b2='O8RWVET0PPHFRWEQ3' where id=8; -update noar ti set b2='O8RWVET0PPHFRWEQ3' where id=8; -update noar tt set v0='UV4H4JDL39' where id=9; -update noar ti set v0='UV4H4JDL39' where id=9; -update noar tt set b0='ORYI7OW' where id=9; -update noar ti set b0='ORYI7OW' where id=9; -update noar tt set v0='Z2JRH4QP5Z4LYVM1U0C1' where id=9; -update noar ti set v0='Z2JRH4QP5Z4LYVM1U0C1' where id=9; -update noar tt set b1='51SMCI56FBSZTR1X2EIFCVWZHREK' where id=9; -update noar ti set b1='51SMCI56FBSZTR1X2EIFCVWZHREK' where id=9; -update noar tt set v0='UG2AUGUD6P92US' where id=9; -update noar ti set v0='UG2AUGUD6P92US' where id=9; -update noar tt set b2='KXW83HP0OM4TVPRR3OJKPX2VWZXBL' where id=9; -update noar ti set b2='KXW83HP0OM4TVPRR3OJKPX2VWZXBL' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 mediumblob not null, -b1 mediumblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='JKNAQNP4WZ9VV6OASGH5' where id=1; -update noar ti set v0='JKNAQNP4WZ9VV6OASGH5' where id=1; -update noar tt set b0='0Q811XJSVP' where id=1; -update noar ti set b0='0Q811XJSVP' where id=1; -update noar tt set v0='0TJ92Z9GHE5VEFS2IZOIMMR' where id=1; -update noar ti set v0='0TJ92Z9GHE5VEFS2IZOIMMR' where id=1; -update noar tt set b1='DX0EWRZ4W4YCMYXVZ5O7OZE46WAN9YUP' where id=1; -update noar ti set b1='DX0EWRZ4W4YCMYXVZ5O7OZE46WAN9YUP' where id=1; -update noar tt set v0='G7ASUHP0EJGKN5QLO78QR12B' where id=1; -update noar ti set v0='G7ASUHP0EJGKN5QLO78QR12B' where id=1; -update noar tt set b2='UNTAPML9' where id=1; -update noar ti set b2='UNTAPML9' where id=1; -update noar tt set v0='H1G1UZPE15HKKROLKXWIFYE' where id=2; -update noar ti set v0='H1G1UZPE15HKKROLKXWIFYE' where id=2; -update noar tt set b0='L9X48NG' where id=2; -update noar ti set b0='L9X48NG' where id=2; -update noar tt set v0='5UCSZZCCYQ' where id=2; -update noar ti set v0='5UCSZZCCYQ' where id=2; -update noar tt set b1='MB6A2GQSXVR59TCXRCX4' where id=2; -update noar ti set b1='MB6A2GQSXVR59TCXRCX4' where id=2; -update noar tt set v0='M5SAO36OAJM9IIQ37D' where id=2; -update noar ti set v0='M5SAO36OAJM9IIQ37D' where id=2; -update noar tt set b2='Q1HKK3' where id=2; -update noar ti set b2='Q1HKK3' where id=2; -update noar tt set v0='J6MA' where id=3; -update noar ti set v0='J6MA' where id=3; -update noar tt set b0='UZI0FZJX2A0OUUI0V' where id=3; -update noar ti set b0='UZI0FZJX2A0OUUI0V' where id=3; -update noar tt set v0='IAR8ESMFN3Y6UPCCCPHAKFFRYB' where id=3; -update noar ti set v0='IAR8ESMFN3Y6UPCCCPHAKFFRYB' where id=3; -update noar tt set b1='8FFELU8R14UWY8WJEA8EC27W3O15BS9C' where id=3; -update noar ti set b1='8FFELU8R14UWY8WJEA8EC27W3O15BS9C' where id=3; -update noar tt set v0='7ODYWRSK1BZDX1AL66Q3BONXGK5W' where id=3; -update noar ti set v0='7ODYWRSK1BZDX1AL66Q3BONXGK5W' where id=3; -update noar tt set b2='L9A4N5AWUYQV92BS70TV9LRUW71' where id=3; -update noar ti set b2='L9A4N5AWUYQV92BS70TV9LRUW71' where id=3; -update noar tt set v0='OLIBLMY4IN28GHAA2QN' where id=4; -update noar ti set v0='OLIBLMY4IN28GHAA2QN' where id=4; -update noar tt set b0='ROUA8LL7' where id=4; -update noar ti set b0='ROUA8LL7' where id=4; -update noar tt set v0='T033JU8NH1PVSVG9HOJV' where id=4; -update noar ti set v0='T033JU8NH1PVSVG9HOJV' where id=4; -update noar tt set b1='2C6T' where id=4; -update noar ti set b1='2C6T' where id=4; -update noar tt set v0='XXV7025GRIS8' where id=4; -update noar ti set v0='XXV7025GRIS8' where id=4; -update noar tt set b2='40VP9TDL' where id=4; -update noar ti set b2='40VP9TDL' where id=4; -update noar tt set v0='S' where id=5; -update noar ti set v0='S' where id=5; -update noar tt set b0='AA9PFDK3DJWQZP' where id=5; -update noar ti set b0='AA9PFDK3DJWQZP' where id=5; -update noar tt set v0='YK7CCBUDXR' where id=5; -update noar ti set v0='YK7CCBUDXR' where id=5; -update noar tt set b1='FAHYBOK7WST5OH1WGJG053LW9C9' where id=5; -update noar ti set b1='FAHYBOK7WST5OH1WGJG053LW9C9' where id=5; -update noar tt set v0='8SG1MPK9JNAZ90O3KTL' where id=5; -update noar ti set v0='8SG1MPK9JNAZ90O3KTL' where id=5; -update noar tt set b2='JTJ4S5' where id=5; -update noar ti set b2='JTJ4S5' where id=5; -update noar tt set v0='9YXCB' where id=6; -update noar ti set v0='9YXCB' where id=6; -update noar tt set b0='67MBNZG2H83' where id=6; -update noar ti set b0='67MBNZG2H83' where id=6; -update noar tt set v0='5MUB5WMI8O' where id=6; -update noar ti set v0='5MUB5WMI8O' where id=6; -update noar tt set b1='K8501YN77P2PQ' where id=6; -update noar ti set b1='K8501YN77P2PQ' where id=6; -update noar tt set v0='K6IUW4DXQEBY9BSKVO8R4D' where id=6; -update noar ti set v0='K6IUW4DXQEBY9BSKVO8R4D' where id=6; -update noar tt set b2='DBBHQMOIZ4DIWKSE0JRUACSQZOPPUW28' where id=6; -update noar ti set b2='DBBHQMOIZ4DIWKSE0JRUACSQZOPPUW28' where id=6; -update noar tt set v0='C7KLRM1NQYDVU9IJYR' where id=7; -update noar ti set v0='C7KLRM1NQYDVU9IJYR' where id=7; -update noar tt set b0='17B18IBW88F0FCN065LYHAZDS6DFHJ' where id=7; -update noar ti set b0='17B18IBW88F0FCN065LYHAZDS6DFHJ' where id=7; -update noar tt set v0='QPAGZE3ZJTG0D7ANB4FBDGMX' where id=7; -update noar ti set v0='QPAGZE3ZJTG0D7ANB4FBDGMX' where id=7; -update noar tt set b1='XSGF4C3YXBD927GJNUN' where id=7; -update noar ti set b1='XSGF4C3YXBD927GJNUN' where id=7; -update noar tt set v0='Q1JIN8ZT' where id=7; -update noar ti set v0='Q1JIN8ZT' where id=7; -update noar tt set b2='0V72PNGG73CY' where id=7; -update noar ti set b2='0V72PNGG73CY' where id=7; -update noar tt set v0='RHLAQ8SV' where id=8; -update noar ti set v0='RHLAQ8SV' where id=8; -update noar tt set b0='K5C5I2W8AMI9NF9NMWRO' where id=8; -update noar ti set b0='K5C5I2W8AMI9NF9NMWRO' where id=8; -update noar tt set v0='YID3V' where id=8; -update noar ti set v0='YID3V' where id=8; -update noar tt set b1='KWMZJ' where id=8; -update noar ti set b1='KWMZJ' where id=8; -update noar tt set v0='GP4X' where id=8; -update noar ti set v0='GP4X' where id=8; -update noar tt set b2='8PI6RRBDDVIZ342W35RVJBY2' where id=8; -update noar ti set b2='8PI6RRBDDVIZ342W35RVJBY2' where id=8; -update noar tt set v0='06I9GWIQM3NFUJEJ0A9VE0KIYMKA4' where id=9; -update noar ti set v0='06I9GWIQM3NFUJEJ0A9VE0KIYMKA4' where id=9; -update noar tt set b0='F2AUP44P7EOZ10177HOB9T4N' where id=9; -update noar ti set b0='F2AUP44P7EOZ10177HOB9T4N' where id=9; -update noar tt set v0='AXQPXAHFK' where id=9; -update noar ti set v0='AXQPXAHFK' where id=9; -update noar tt set b1='IJP5EZO9JW1KMEJ8PQF' where id=9; -update noar ti set b1='IJP5EZO9JW1KMEJ8PQF' where id=9; -update noar tt set v0='OXPWSD3WP4GXVJ' where id=9; -update noar ti set v0='OXPWSD3WP4GXVJ' where id=9; -update noar tt set b2='E2QYLAU9USSLI4YIGCW3QFYMGVG' where id=9; -update noar ti set b2='E2QYLAU9USSLI4YIGCW3QFYMGVG' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 mediumblob not null, -b1 mediumblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='WLBAV4077MELIJ5HWJH70J03' where id=1; -update noar ti set v0='WLBAV4077MELIJ5HWJH70J03' where id=1; -update noar tt set b0='KQS' where id=1; -update noar ti set b0='KQS' where id=1; -update noar tt set v0='YU03X2GVVITELQYT9J1IKYOL6W3VZ' where id=1; -update noar ti set v0='YU03X2GVVITELQYT9J1IKYOL6W3VZ' where id=1; -update noar tt set b1='59B1WBBTEGKNT263OZ4IL9R32A6YDZZ3' where id=1; -update noar ti set b1='59B1WBBTEGKNT263OZ4IL9R32A6YDZZ3' where id=1; -update noar tt set v0='TKG645' where id=1; -update noar ti set v0='TKG645' where id=1; -update noar tt set b2='KOBHB4D2GT28QYBD70T4SGVU' where id=1; -update noar ti set b2='KOBHB4D2GT28QYBD70T4SGVU' where id=1; -update noar tt set v0='A1P9KN' where id=2; -update noar ti set v0='A1P9KN' where id=2; -update noar tt set b0='A7FNK' where id=2; -update noar ti set b0='A7FNK' where id=2; -update noar tt set v0='HQ5FNSCF2772N544PY57GIOL2Q3RWVBY' where id=2; -update noar ti set v0='HQ5FNSCF2772N544PY57GIOL2Q3RWVBY' where id=2; -update noar tt set b1='3C9XJOW6BMZYSEJ0FOGYE2YCZ' where id=2; -update noar ti set b1='3C9XJOW6BMZYSEJ0FOGYE2YCZ' where id=2; -update noar tt set v0='UYWFBTP60GXKJL9OS52PHFM6SS' where id=2; -update noar ti set v0='UYWFBTP60GXKJL9OS52PHFM6SS' where id=2; -update noar tt set b2='PPEAK' where id=2; -update noar ti set b2='PPEAK' where id=2; -update noar tt set v0='INIDZFWSJSG95SVE' where id=3; -update noar ti set v0='INIDZFWSJSG95SVE' where id=3; -update noar tt set b0='EI893KPUOL6VWUA' where id=3; -update noar ti set b0='EI893KPUOL6VWUA' where id=3; -update noar tt set v0='K4P51E7' where id=3; -update noar ti set v0='K4P51E7' where id=3; -update noar tt set b1='0ZYXW7RES' where id=3; -update noar ti set b1='0ZYXW7RES' where id=3; -update noar tt set v0='VUPVR1JZYCR1LOMCKHAHZBRZMGS6L6O8' where id=3; -update noar ti set v0='VUPVR1JZYCR1LOMCKHAHZBRZMGS6L6O8' where id=3; -update noar tt set b2='Q6MR070B4AJD12' where id=3; -update noar ti set b2='Q6MR070B4AJD12' where id=3; -update noar tt set v0='WVDN5W' where id=4; -update noar ti set v0='WVDN5W' where id=4; -update noar tt set b0='8N4JGT2EVQVOGELBN1PNF5NGF55HNNZR' where id=4; -update noar ti set b0='8N4JGT2EVQVOGELBN1PNF5NGF55HNNZR' where id=4; -update noar tt set v0='OF3Q0Q64WV7JSJBJVEJ2104SD1HK' where id=4; -update noar ti set v0='OF3Q0Q64WV7JSJBJVEJ2104SD1HK' where id=4; -update noar tt set b1='K363TWC4' where id=4; -update noar ti set b1='K363TWC4' where id=4; -update noar tt set v0='PAA5JMZPSTM9XS3LI5KRXK2TCP3K6P2S' where id=4; -update noar ti set v0='PAA5JMZPSTM9XS3LI5KRXK2TCP3K6P2S' where id=4; -update noar tt set b2='6JBS4YIV992S69JTTS' where id=4; -update noar ti set b2='6JBS4YIV992S69JTTS' where id=4; -update noar tt set v0='PZJOGPY71EHNFVTQCX619HCAPX' where id=5; -update noar ti set v0='PZJOGPY71EHNFVTQCX619HCAPX' where id=5; -update noar tt set b0='G8C81ZI5DFATD51J77SRMK3C5OXYSH' where id=5; -update noar ti set b0='G8C81ZI5DFATD51J77SRMK3C5OXYSH' where id=5; -update noar tt set v0='TSFSPH15HO918AVUVGDYUOKIXF' where id=5; -update noar ti set v0='TSFSPH15HO918AVUVGDYUOKIXF' where id=5; -update noar tt set b1='3XFPNYCBTAJ' where id=5; -update noar ti set b1='3XFPNYCBTAJ' where id=5; -update noar tt set v0='AN7Q9HAQDQDGBES0HZY2T1SJ23CN1I' where id=5; -update noar ti set v0='AN7Q9HAQDQDGBES0HZY2T1SJ23CN1I' where id=5; -update noar tt set b2='CLFMGOM' where id=5; -update noar ti set b2='CLFMGOM' where id=5; -update noar tt set v0='OXH3FWIQMICPGNA' where id=6; -update noar ti set v0='OXH3FWIQMICPGNA' where id=6; -update noar tt set b0='X' where id=6; -update noar ti set b0='X' where id=6; -update noar tt set v0='X41JEBA' where id=6; -update noar ti set v0='X41JEBA' where id=6; -update noar tt set b1='3P7YN4Z' where id=6; -update noar ti set b1='3P7YN4Z' where id=6; -update noar tt set v0='JJMRWJ9RQTEU8J' where id=6; -update noar ti set v0='JJMRWJ9RQTEU8J' where id=6; -update noar tt set b2='JQFZI9YK1B2ZUNPV3IJ' where id=6; -update noar ti set b2='JQFZI9YK1B2ZUNPV3IJ' where id=6; -update noar tt set v0='N8DKRT7VE7' where id=7; -update noar ti set v0='N8DKRT7VE7' where id=7; -update noar tt set b0='WU8QRNQXXXXI0GQZEP47Z47E83FQS' where id=7; -update noar ti set b0='WU8QRNQXXXXI0GQZEP47Z47E83FQS' where id=7; -update noar tt set v0='JGCT4XA8OX9IOZ3AN42J' where id=7; -update noar ti set v0='JGCT4XA8OX9IOZ3AN42J' where id=7; -update noar tt set b1='LBGEXL1XCNWU3APRT6V1B9MFYJ9768VE' where id=7; -update noar ti set b1='LBGEXL1XCNWU3APRT6V1B9MFYJ9768VE' where id=7; -update noar tt set v0='6WKZ7' where id=7; -update noar ti set v0='6WKZ7' where id=7; -update noar tt set b2='AQM8T' where id=7; -update noar ti set b2='AQM8T' where id=7; -update noar tt set v0='YLY8' where id=8; -update noar ti set v0='YLY8' where id=8; -update noar tt set b0='SXC956LGDQHNHN1A7Q0A34H' where id=8; -update noar ti set b0='SXC956LGDQHNHN1A7Q0A34H' where id=8; -update noar tt set v0='MLJB' where id=8; -update noar ti set v0='MLJB' where id=8; -update noar tt set b1='CENHWRLIF1KFHBRJ32W1RC5ZMPSB36O' where id=8; -update noar ti set b1='CENHWRLIF1KFHBRJ32W1RC5ZMPSB36O' where id=8; -update noar tt set v0='PP380IR' where id=8; -update noar ti set v0='PP380IR' where id=8; -update noar tt set b2='K8FGDEH324GBTAVNB49RWW9' where id=8; -update noar ti set b2='K8FGDEH324GBTAVNB49RWW9' where id=8; -update noar tt set v0='OZTL03EGGAXV8L' where id=9; -update noar ti set v0='OZTL03EGGAXV8L' where id=9; -update noar tt set b0='3VOM4MAX' where id=9; -update noar ti set b0='3VOM4MAX' where id=9; -update noar tt set v0='DD' where id=9; -update noar ti set v0='DD' where id=9; -update noar tt set b1='C7QKTAFQ4T24MF2L1LCMLHCA8JB' where id=9; -update noar ti set b1='C7QKTAFQ4T24MF2L1LCMLHCA8JB' where id=9; -update noar tt set v0='GW0EHX3B3MIAL2UF5T' where id=9; -update noar ti set v0='GW0EHX3B3MIAL2UF5T' where id=9; -update noar tt set b2='7FBEQCLVSRS2538T' where id=9; -update noar ti set b2='7FBEQCLVSRS2538T' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 mediumblob null, -b1 longblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='95I' where id=1; -update noar ti set v0='95I' where id=1; -update noar tt set b0='NMQVTSSO' where id=1; -update noar ti set b0='NMQVTSSO' where id=1; -update noar tt set v0='3FP1N8EY1TDKSYKVDZCO' where id=1; -update noar ti set v0='3FP1N8EY1TDKSYKVDZCO' where id=1; -update noar tt set b1='FDD8Q' where id=1; -update noar ti set b1='FDD8Q' where id=1; -update noar tt set v0='IBJHK1RVAVDAT' where id=1; -update noar ti set v0='IBJHK1RVAVDAT' where id=1; -update noar tt set b2='333CXXQMTFLHY93MQK' where id=1; -update noar ti set b2='333CXXQMTFLHY93MQK' where id=1; -update noar tt set v0='WUO7MDQ22HW' where id=2; -update noar ti set v0='WUO7MDQ22HW' where id=2; -update noar tt set b0='HBCULRU6GUB4ZAAGBMC9U7CZ72220' where id=2; -update noar ti set b0='HBCULRU6GUB4ZAAGBMC9U7CZ72220' where id=2; -update noar tt set v0='042IMO56MS4T5W2Y8H' where id=2; -update noar ti set v0='042IMO56MS4T5W2Y8H' where id=2; -update noar tt set b1='XC6CM' where id=2; -update noar ti set b1='XC6CM' where id=2; -update noar tt set v0='S' where id=2; -update noar ti set v0='S' where id=2; -update noar tt set b2='G1UMFP7ISB334' where id=2; -update noar ti set b2='G1UMFP7ISB334' where id=2; -update noar tt set v0='PS2FCZVP6' where id=3; -update noar ti set v0='PS2FCZVP6' where id=3; -update noar tt set b0='0DKE' where id=3; -update noar ti set b0='0DKE' where id=3; -update noar tt set v0='V4JM820DI' where id=3; -update noar ti set v0='V4JM820DI' where id=3; -update noar tt set b1='GQYZL5D7U3XSPB' where id=3; -update noar ti set b1='GQYZL5D7U3XSPB' where id=3; -update noar tt set v0='DJH1YMHVFVWJF8Z00GYTWXKN7FJVHZUY' where id=3; -update noar ti set v0='DJH1YMHVFVWJF8Z00GYTWXKN7FJVHZUY' where id=3; -update noar tt set b2='SAGT8WGPRTV' where id=3; -update noar ti set b2='SAGT8WGPRTV' where id=3; -update noar tt set v0='FCJQIX0XMNZEYH4' where id=4; -update noar ti set v0='FCJQIX0XMNZEYH4' where id=4; -update noar tt set b0='O1JG3DN5U8R' where id=4; -update noar ti set b0='O1JG3DN5U8R' where id=4; -update noar tt set v0='F12DDFKE1L' where id=4; -update noar ti set v0='F12DDFKE1L' where id=4; -update noar tt set b1='F4Z9DUPSBX01A' where id=4; -update noar ti set b1='F4Z9DUPSBX01A' where id=4; -update noar tt set v0='AV862HFWU' where id=4; -update noar ti set v0='AV862HFWU' where id=4; -update noar tt set b2='9YQG7TXM0HZPWWJBBWCA36WZX37S7' where id=4; -update noar ti set b2='9YQG7TXM0HZPWWJBBWCA36WZX37S7' where id=4; -update noar tt set v0='T0FV73DQHJ8BOFM66VXJKFXE' where id=5; -update noar ti set v0='T0FV73DQHJ8BOFM66VXJKFXE' where id=5; -update noar tt set b0='NLYWQGLR92IGXQOWD9PPRY' where id=5; -update noar ti set b0='NLYWQGLR92IGXQOWD9PPRY' where id=5; -update noar tt set v0='51E75UY0C9TOYL' where id=5; -update noar ti set v0='51E75UY0C9TOYL' where id=5; -update noar tt set b1='ZQNJWNRCZJ1IZR41AYRZO7' where id=5; -update noar ti set b1='ZQNJWNRCZJ1IZR41AYRZO7' where id=5; -update noar tt set v0='6OHL5J7KKDJF14GTZCG0UDZXCPRVLJA' where id=5; -update noar ti set v0='6OHL5J7KKDJF14GTZCG0UDZXCPRVLJA' where id=5; -update noar tt set b2='EOT' where id=5; -update noar ti set b2='EOT' where id=5; -update noar tt set v0='K21UVNBJ5RL6CUEYG' where id=6; -update noar ti set v0='K21UVNBJ5RL6CUEYG' where id=6; -update noar tt set b0='X6H58EYZAUJ8I8I8RPX4VI8ZBYC5' where id=6; -update noar ti set b0='X6H58EYZAUJ8I8I8RPX4VI8ZBYC5' where id=6; -update noar tt set v0='1G409TIT12G0DDS0D' where id=6; -update noar ti set v0='1G409TIT12G0DDS0D' where id=6; -update noar tt set b1='SOUP3U' where id=6; -update noar ti set b1='SOUP3U' where id=6; -update noar tt set v0='S0LINMQJRR74ML2' where id=6; -update noar ti set v0='S0LINMQJRR74ML2' where id=6; -update noar tt set b2='1PAH' where id=6; -update noar ti set b2='1PAH' where id=6; -update noar tt set v0='T300F2METXIR' where id=7; -update noar ti set v0='T300F2METXIR' where id=7; -update noar tt set b0='M9WYOD7E1FZ' where id=7; -update noar ti set b0='M9WYOD7E1FZ' where id=7; -update noar tt set v0='DOB3Q78HLLYGM0S59' where id=7; -update noar ti set v0='DOB3Q78HLLYGM0S59' where id=7; -update noar tt set b1='SAB' where id=7; -update noar ti set b1='SAB' where id=7; -update noar tt set v0='ZO9CA9L87Z1FSSOEW09EC' where id=7; -update noar ti set v0='ZO9CA9L87Z1FSSOEW09EC' where id=7; -update noar tt set b2='0SNHAGSVF7CTXHY6PXTFN82SRY8S2' where id=7; -update noar ti set b2='0SNHAGSVF7CTXHY6PXTFN82SRY8S2' where id=7; -update noar tt set v0='Z' where id=8; -update noar ti set v0='Z' where id=8; -update noar tt set b0='H0N7E0ASYC9K7KSZHYNSNWTYYH9K' where id=8; -update noar ti set b0='H0N7E0ASYC9K7KSZHYNSNWTYYH9K' where id=8; -update noar tt set v0='IYJ' where id=8; -update noar ti set v0='IYJ' where id=8; -update noar tt set b1='FI61P170Y9S8' where id=8; -update noar ti set b1='FI61P170Y9S8' where id=8; -update noar tt set v0='BBLE7NYD4XIQU199MLI' where id=8; -update noar ti set v0='BBLE7NYD4XIQU199MLI' where id=8; -update noar tt set b2='HFII9CV' where id=8; -update noar ti set b2='HFII9CV' where id=8; -update noar tt set v0='9XJZUR4KNR' where id=9; -update noar ti set v0='9XJZUR4KNR' where id=9; -update noar tt set b0='8FE67ZCTBV4TKT35ZD80' where id=9; -update noar ti set b0='8FE67ZCTBV4TKT35ZD80' where id=9; -update noar tt set v0='N2JSSUL7D' where id=9; -update noar ti set v0='N2JSSUL7D' where id=9; -update noar tt set b1='BB9Z' where id=9; -update noar ti set b1='BB9Z' where id=9; -update noar tt set v0='FOHT2EL637L212F0P1BK' where id=9; -update noar ti set v0='FOHT2EL637L212F0P1BK' where id=9; -update noar tt set b2='53SCTONT71V8B3S6IV1AZR44E14' where id=9; -update noar ti set b2='53SCTONT71V8B3S6IV1AZR44E14' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 mediumblob null, -b1 longblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='VFG5L2CPECRJNGMJR97Q3ZHJS7MO' where id=1; -update noar ti set v0='VFG5L2CPECRJNGMJR97Q3ZHJS7MO' where id=1; -update noar tt set b0='1LMK8GHOJ19CJ' where id=1; -update noar ti set b0='1LMK8GHOJ19CJ' where id=1; -update noar tt set v0='4PJM764WBGQZTKNUQB2N7' where id=1; -update noar ti set v0='4PJM764WBGQZTKNUQB2N7' where id=1; -update noar tt set b1='S3GZYB' where id=1; -update noar ti set b1='S3GZYB' where id=1; -update noar tt set v0='6M8HQU0IOAQNMAFBYIWNCIL5EKIM64' where id=1; -update noar ti set v0='6M8HQU0IOAQNMAFBYIWNCIL5EKIM64' where id=1; -update noar tt set b2='V2KAXYMUULLPYNPL' where id=1; -update noar ti set b2='V2KAXYMUULLPYNPL' where id=1; -update noar tt set v0='SWOD4A2MKQ5PG8VPSTTHT' where id=2; -update noar ti set v0='SWOD4A2MKQ5PG8VPSTTHT' where id=2; -update noar tt set b0='Z7W18SQNC7JP2PNZG8JCT1' where id=2; -update noar ti set b0='Z7W18SQNC7JP2PNZG8JCT1' where id=2; -update noar tt set v0='N4PIZT5VW1' where id=2; -update noar ti set v0='N4PIZT5VW1' where id=2; -update noar tt set b1='BNXMY4UHG63' where id=2; -update noar ti set b1='BNXMY4UHG63' where id=2; -update noar tt set v0='3H7FDHO5W' where id=2; -update noar ti set v0='3H7FDHO5W' where id=2; -update noar tt set b2='DABZ7M' where id=2; -update noar ti set b2='DABZ7M' where id=2; -update noar tt set v0='GINT5LHEKMIRGC5BI2LIG889NY5HWK2R' where id=3; -update noar ti set v0='GINT5LHEKMIRGC5BI2LIG889NY5HWK2R' where id=3; -update noar tt set b0='HLWLY38VIK72LUFHUROLVQGDRIX' where id=3; -update noar ti set b0='HLWLY38VIK72LUFHUROLVQGDRIX' where id=3; -update noar tt set v0='UKO8WEN0BIXD70ZSP' where id=3; -update noar ti set v0='UKO8WEN0BIXD70ZSP' where id=3; -update noar tt set b1='9P5CPL3GSMW5Z4HV' where id=3; -update noar ti set b1='9P5CPL3GSMW5Z4HV' where id=3; -update noar tt set v0='OS1GLY' where id=3; -update noar ti set v0='OS1GLY' where id=3; -update noar tt set b2='E2SPQGFZQ08P' where id=3; -update noar ti set b2='E2SPQGFZQ08P' where id=3; -update noar tt set v0='0TU289OPBQ12JW3F' where id=4; -update noar ti set v0='0TU289OPBQ12JW3F' where id=4; -update noar tt set b0='PB58BXHFXGHZFIBXL4YEG7P' where id=4; -update noar ti set b0='PB58BXHFXGHZFIBXL4YEG7P' where id=4; -update noar tt set v0='OKIISE018' where id=4; -update noar ti set v0='OKIISE018' where id=4; -update noar tt set b1='W3T' where id=4; -update noar ti set b1='W3T' where id=4; -update noar tt set v0='LGY3Y9QP3OAHX0DSGCKFUA' where id=4; -update noar ti set v0='LGY3Y9QP3OAHX0DSGCKFUA' where id=4; -update noar tt set b2='F95S0PABDVYQYGZZZGCJ75SNEP6C4FX' where id=4; -update noar ti set b2='F95S0PABDVYQYGZZZGCJ75SNEP6C4FX' where id=4; -update noar tt set v0='JQ1V6J4SC99FXGLZQH299T17I977D3' where id=5; -update noar ti set v0='JQ1V6J4SC99FXGLZQH299T17I977D3' where id=5; -update noar tt set b0='FN0YPHLZTW3B8HJ8ENJSUF' where id=5; -update noar ti set b0='FN0YPHLZTW3B8HJ8ENJSUF' where id=5; -update noar tt set v0='YQX165XO7176N4YQ6ZOGPUEZVWPSI' where id=5; -update noar ti set v0='YQX165XO7176N4YQ6ZOGPUEZVWPSI' where id=5; -update noar tt set b1='HPP71S7Y0KRCS70WUJUSBBYE' where id=5; -update noar ti set b1='HPP71S7Y0KRCS70WUJUSBBYE' where id=5; -update noar tt set v0='CR50D0704GO02YB6O66E0OB0MDEXEUM1' where id=5; -update noar ti set v0='CR50D0704GO02YB6O66E0OB0MDEXEUM1' where id=5; -update noar tt set b2='LQKSZ7EEU1WE6HVXVUG' where id=5; -update noar ti set b2='LQKSZ7EEU1WE6HVXVUG' where id=5; -update noar tt set v0='ODHK37YEHW70ZVPCLJODEPQ' where id=6; -update noar ti set v0='ODHK37YEHW70ZVPCLJODEPQ' where id=6; -update noar tt set b0='MTXIKVAMAMUFC7N3TTKDL41' where id=6; -update noar ti set b0='MTXIKVAMAMUFC7N3TTKDL41' where id=6; -update noar tt set v0='W0F8M' where id=6; -update noar ti set v0='W0F8M' where id=6; -update noar tt set b1='SBJRP0V644AMU5KKYPB3SU48IIG' where id=6; -update noar ti set b1='SBJRP0V644AMU5KKYPB3SU48IIG' where id=6; -update noar tt set v0='L1WRXEAE38MZJ38I87X5K9' where id=6; -update noar ti set v0='L1WRXEAE38MZJ38I87X5K9' where id=6; -update noar tt set b2='57VFYAZEUU03IPUE1NPGBMQOOY5SDI' where id=6; -update noar ti set b2='57VFYAZEUU03IPUE1NPGBMQOOY5SDI' where id=6; -update noar tt set v0='85RD3' where id=7; -update noar ti set v0='85RD3' where id=7; -update noar tt set b0='707GBZT04KODU83AV8GG38G8S5' where id=7; -update noar ti set b0='707GBZT04KODU83AV8GG38G8S5' where id=7; -update noar tt set v0='KSLCIRJDQMXR7OI9OZZOGA5' where id=7; -update noar ti set v0='KSLCIRJDQMXR7OI9OZZOGA5' where id=7; -update noar tt set b1='P3QM225FN4F62DNP2QDDY2' where id=7; -update noar ti set b1='P3QM225FN4F62DNP2QDDY2' where id=7; -update noar tt set v0='P58V9XBMAED0XNXLHWKU' where id=7; -update noar ti set v0='P58V9XBMAED0XNXLHWKU' where id=7; -update noar tt set b2='NTMKBN7PGN9X6CGDMK0ZHLE' where id=7; -update noar ti set b2='NTMKBN7PGN9X6CGDMK0ZHLE' where id=7; -update noar tt set v0='LSCBRGMT' where id=8; -update noar ti set v0='LSCBRGMT' where id=8; -update noar tt set b0='J5GXHNA2MHELZKAJYUHK94SFU' where id=8; -update noar ti set b0='J5GXHNA2MHELZKAJYUHK94SFU' where id=8; -update noar tt set v0='UMHHXJYFSHDUM1NRTRKEE' where id=8; -update noar ti set v0='UMHHXJYFSHDUM1NRTRKEE' where id=8; -update noar tt set b1='V7' where id=8; -update noar ti set b1='V7' where id=8; -update noar tt set v0='7QPORD4BTT6VKQ6P1ST5H82BH4KI77' where id=8; -update noar ti set v0='7QPORD4BTT6VKQ6P1ST5H82BH4KI77' where id=8; -update noar tt set b2='GJFMU0UYJVBCGO9KWK1TQ7' where id=8; -update noar ti set b2='GJFMU0UYJVBCGO9KWK1TQ7' where id=8; -update noar tt set v0='W77IE2L763KEMKT4ONIVLMV0AJ' where id=9; -update noar ti set v0='W77IE2L763KEMKT4ONIVLMV0AJ' where id=9; -update noar tt set b0='DYG9DUC5NKEOOW4GM0BO3CLNX9L' where id=9; -update noar ti set b0='DYG9DUC5NKEOOW4GM0BO3CLNX9L' where id=9; -update noar tt set v0='8ANM0B3O6JNHZIAK33B02UN2TM2L' where id=9; -update noar ti set v0='8ANM0B3O6JNHZIAK33B02UN2TM2L' where id=9; -update noar tt set b1='U3VGOZSLQVQWNA4N8SO54Q6HF' where id=9; -update noar ti set b1='U3VGOZSLQVQWNA4N8SO54Q6HF' where id=9; -update noar tt set v0='GIY0CFJKLIWBN' where id=9; -update noar ti set v0='GIY0CFJKLIWBN' where id=9; -update noar tt set b2='72S2LM' where id=9; -update noar ti set b2='72S2LM' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 mediumblob not null, -b1 longblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='1XDJXG3KL04V2IGTCEULGKM' where id=1; -update noar ti set v0='1XDJXG3KL04V2IGTCEULGKM' where id=1; -update noar tt set b0='C' where id=1; -update noar ti set b0='C' where id=1; -update noar tt set v0='AQH6BPLIU114H6J4NACPDW4' where id=1; -update noar ti set v0='AQH6BPLIU114H6J4NACPDW4' where id=1; -update noar tt set b1='V1HGEC' where id=1; -update noar ti set b1='V1HGEC' where id=1; -update noar tt set v0='M6I35002MJ09CZZNQP' where id=1; -update noar ti set v0='M6I35002MJ09CZZNQP' where id=1; -update noar tt set b2='0ULKUFT8PMZ' where id=1; -update noar ti set b2='0ULKUFT8PMZ' where id=1; -update noar tt set v0='4LW518PD' where id=2; -update noar ti set v0='4LW518PD' where id=2; -update noar tt set b0='R0AZQ7BTVEGI' where id=2; -update noar ti set b0='R0AZQ7BTVEGI' where id=2; -update noar tt set v0='DGRSGDGYLAW10FZI7YWZR3AD' where id=2; -update noar ti set v0='DGRSGDGYLAW10FZI7YWZR3AD' where id=2; -update noar tt set b1='U1T2' where id=2; -update noar ti set b1='U1T2' where id=2; -update noar tt set v0='X73R7TESZAUJQZWQ4OOK40694H0' where id=2; -update noar ti set v0='X73R7TESZAUJQZWQ4OOK40694H0' where id=2; -update noar tt set b2='BP50AFNQRXQQ7' where id=2; -update noar ti set b2='BP50AFNQRXQQ7' where id=2; -update noar tt set v0='1P7TBXW3CU7J23' where id=3; -update noar ti set v0='1P7TBXW3CU7J23' where id=3; -update noar tt set b0='O5X03A28F4OIACSNEWX6JRJIKW' where id=3; -update noar ti set b0='O5X03A28F4OIACSNEWX6JRJIKW' where id=3; -update noar tt set v0='8PBU9RJUOTWQLURFPRQB6V' where id=3; -update noar ti set v0='8PBU9RJUOTWQLURFPRQB6V' where id=3; -update noar tt set b1='BM2' where id=3; -update noar ti set b1='BM2' where id=3; -update noar tt set v0='23OAB8A8D2TEPNEXT2IVF5XTK1IEPM' where id=3; -update noar ti set v0='23OAB8A8D2TEPNEXT2IVF5XTK1IEPM' where id=3; -update noar tt set b2='WTDEB66' where id=3; -update noar ti set b2='WTDEB66' where id=3; -update noar tt set v0='DPKYV3VWKVRPLX82DNMZZUZJ8HRZ4HY' where id=4; -update noar ti set v0='DPKYV3VWKVRPLX82DNMZZUZJ8HRZ4HY' where id=4; -update noar tt set b0='RD8L6H4FJH8OGW1NW' where id=4; -update noar ti set b0='RD8L6H4FJH8OGW1NW' where id=4; -update noar tt set v0='JKOGIJ6FUAP' where id=4; -update noar ti set v0='JKOGIJ6FUAP' where id=4; -update noar tt set b1='6FT7JWGAJSB5RH8XJMP' where id=4; -update noar ti set b1='6FT7JWGAJSB5RH8XJMP' where id=4; -update noar tt set v0='SONO7WAM1MC2PLFO0AWKMDYT8WIMI80Y' where id=4; -update noar ti set v0='SONO7WAM1MC2PLFO0AWKMDYT8WIMI80Y' where id=4; -update noar tt set b2='WH5FJJY1N' where id=4; -update noar ti set b2='WH5FJJY1N' where id=4; -update noar tt set v0='E' where id=5; -update noar ti set v0='E' where id=5; -update noar tt set b0='26VL706C5V0X' where id=5; -update noar ti set b0='26VL706C5V0X' where id=5; -update noar tt set v0='A4OYGZASQI8OZEW' where id=5; -update noar ti set v0='A4OYGZASQI8OZEW' where id=5; -update noar tt set b1='GNHVD4' where id=5; -update noar ti set b1='GNHVD4' where id=5; -update noar tt set v0='1' where id=5; -update noar ti set v0='1' where id=5; -update noar tt set b2='1HIIVKQD2MYVJ0LY7PHE4UO' where id=5; -update noar ti set b2='1HIIVKQD2MYVJ0LY7PHE4UO' where id=5; -update noar tt set v0='8ZX7K2R8FSQ79QAN3MCPAVMGHIB' where id=6; -update noar ti set v0='8ZX7K2R8FSQ79QAN3MCPAVMGHIB' where id=6; -update noar tt set b0='WIM' where id=6; -update noar ti set b0='WIM' where id=6; -update noar tt set v0='MPL5JPFE1KJ' where id=6; -update noar ti set v0='MPL5JPFE1KJ' where id=6; -update noar tt set b1='YI0F681Y1S7NHSAY80' where id=6; -update noar ti set b1='YI0F681Y1S7NHSAY80' where id=6; -update noar tt set v0='38881W4OFXFMKNDKH60WWSZI9' where id=6; -update noar ti set v0='38881W4OFXFMKNDKH60WWSZI9' where id=6; -update noar tt set b2='M5DKPR72UOAG00B2D4MCERUIWGODR' where id=6; -update noar ti set b2='M5DKPR72UOAG00B2D4MCERUIWGODR' where id=6; -update noar tt set v0='7CKQZELK' where id=7; -update noar ti set v0='7CKQZELK' where id=7; -update noar tt set b0='MRBTX7STQW' where id=7; -update noar ti set b0='MRBTX7STQW' where id=7; -update noar tt set v0='DBZ' where id=7; -update noar ti set v0='DBZ' where id=7; -update noar tt set b1='12D2BFU2NPZJNYXV9E1VKQQEKSP' where id=7; -update noar ti set b1='12D2BFU2NPZJNYXV9E1VKQQEKSP' where id=7; -update noar tt set v0='P5SUKF15N916SF2' where id=7; -update noar ti set v0='P5SUKF15N916SF2' where id=7; -update noar tt set b2='335Q78OGASW20RME3' where id=7; -update noar ti set b2='335Q78OGASW20RME3' where id=7; -update noar tt set v0='4SFHPVEVJFT5MPE2A8NCFJM4N2YZOTVY' where id=8; -update noar ti set v0='4SFHPVEVJFT5MPE2A8NCFJM4N2YZOTVY' where id=8; -update noar tt set b0='CR5FYIAKM' where id=8; -update noar ti set b0='CR5FYIAKM' where id=8; -update noar tt set v0='UA11CJTJGIUC2UKSQJA4' where id=8; -update noar ti set v0='UA11CJTJGIUC2UKSQJA4' where id=8; -update noar tt set b1='ULQEQYUYMOR72' where id=8; -update noar ti set b1='ULQEQYUYMOR72' where id=8; -update noar tt set v0='44QUU37ETM' where id=8; -update noar ti set v0='44QUU37ETM' where id=8; -update noar tt set b2='YJNNZ9VNF' where id=8; -update noar ti set b2='YJNNZ9VNF' where id=8; -update noar tt set v0='76QXK7WD21278XXVTR3DF2U4QW7RO8O' where id=9; -update noar ti set v0='76QXK7WD21278XXVTR3DF2U4QW7RO8O' where id=9; -update noar tt set b0='GMZDODSL2J53324IHEMOG7L' where id=9; -update noar ti set b0='GMZDODSL2J53324IHEMOG7L' where id=9; -update noar tt set v0='XXIKG55EII29JBW4U5QGLV1A3RKY4' where id=9; -update noar ti set v0='XXIKG55EII29JBW4U5QGLV1A3RKY4' where id=9; -update noar tt set b1='KXNCTBGFNU5' where id=9; -update noar ti set b1='KXNCTBGFNU5' where id=9; -update noar tt set v0='E59OE4GW5OIN42GROA5Y5L' where id=9; -update noar ti set v0='E59OE4GW5OIN42GROA5Y5L' where id=9; -update noar tt set b2='YGRTKYNBAZWBULWKRJ26276KT7JKO3VZ' where id=9; -update noar ti set b2='YGRTKYNBAZWBULWKRJ26276KT7JKO3VZ' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 mediumblob not null, -b1 longblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='OPOE' where id=1; -update noar ti set v0='OPOE' where id=1; -update noar tt set b0='37S7WTG5E0DQ9HG90LSD8' where id=1; -update noar ti set b0='37S7WTG5E0DQ9HG90LSD8' where id=1; -update noar tt set v0='0Q32G3JJH5GA00VZ8GG' where id=1; -update noar ti set v0='0Q32G3JJH5GA00VZ8GG' where id=1; -update noar tt set b1='4KHPZO84BVUC7' where id=1; -update noar ti set b1='4KHPZO84BVUC7' where id=1; -update noar tt set v0='Y' where id=1; -update noar ti set v0='Y' where id=1; -update noar tt set b2='WC90BJSWIZ8HWHA6LWSJUOMP3P1IND8I' where id=1; -update noar ti set b2='WC90BJSWIZ8HWHA6LWSJUOMP3P1IND8I' where id=1; -update noar tt set v0='N4N8XSNTQVC3E' where id=2; -update noar ti set v0='N4N8XSNTQVC3E' where id=2; -update noar tt set b0='PLIQCI6AAEJ8QQ23FSPV8DAKKN' where id=2; -update noar ti set b0='PLIQCI6AAEJ8QQ23FSPV8DAKKN' where id=2; -update noar tt set v0='B00JIYJAQYX1W581M4R6' where id=2; -update noar ti set v0='B00JIYJAQYX1W581M4R6' where id=2; -update noar tt set b1='E8K219PT0' where id=2; -update noar ti set b1='E8K219PT0' where id=2; -update noar tt set v0='SJQS406DWOC4KTH463OBZ59' where id=2; -update noar ti set v0='SJQS406DWOC4KTH463OBZ59' where id=2; -update noar tt set b2='EZFJ1KV91U7NNJRWC2UTM' where id=2; -update noar ti set b2='EZFJ1KV91U7NNJRWC2UTM' where id=2; -update noar tt set v0='FWT6VTP5Z87FDO8T' where id=3; -update noar ti set v0='FWT6VTP5Z87FDO8T' where id=3; -update noar tt set b0='H0T5J9UVM54HY' where id=3; -update noar ti set b0='H0T5J9UVM54HY' where id=3; -update noar tt set v0='YUOVJM8SDILW6OHM1E2393H' where id=3; -update noar ti set v0='YUOVJM8SDILW6OHM1E2393H' where id=3; -update noar tt set b1='FN8MR' where id=3; -update noar ti set b1='FN8MR' where id=3; -update noar tt set v0='E10VVYH0OY229H2UIHQ1APEFK1CFD' where id=3; -update noar ti set v0='E10VVYH0OY229H2UIHQ1APEFK1CFD' where id=3; -update noar tt set b2='9TSAFOKJZTH02LOKMEQ' where id=3; -update noar ti set b2='9TSAFOKJZTH02LOKMEQ' where id=3; -update noar tt set v0='S2C7ZVPVA1YBW29N5BUP0V8LNZBN' where id=4; -update noar ti set v0='S2C7ZVPVA1YBW29N5BUP0V8LNZBN' where id=4; -update noar tt set b0='0FAV0PY9DKOUTPL410' where id=4; -update noar ti set b0='0FAV0PY9DKOUTPL410' where id=4; -update noar tt set v0='1SOJM' where id=4; -update noar ti set v0='1SOJM' where id=4; -update noar tt set b1='QGY8E3KAYV06LBUY' where id=4; -update noar ti set b1='QGY8E3KAYV06LBUY' where id=4; -update noar tt set v0='9VL5U2MDRXA' where id=4; -update noar ti set v0='9VL5U2MDRXA' where id=4; -update noar tt set b2='T72CYO00J' where id=4; -update noar ti set b2='T72CYO00J' where id=4; -update noar tt set v0='LYPMJ0R7MGU1F9D1I3D8QY8M9LEEH856' where id=5; -update noar ti set v0='LYPMJ0R7MGU1F9D1I3D8QY8M9LEEH856' where id=5; -update noar tt set b0='19CPT36N2UBDK' where id=5; -update noar ti set b0='19CPT36N2UBDK' where id=5; -update noar tt set v0='D1P8GG5' where id=5; -update noar ti set v0='D1P8GG5' where id=5; -update noar tt set b1='JOXL1' where id=5; -update noar ti set b1='JOXL1' where id=5; -update noar tt set v0='ZDNG173' where id=5; -update noar ti set v0='ZDNG173' where id=5; -update noar tt set b2='UJBY26EDXTMW2DURS0PXFRT' where id=5; -update noar ti set b2='UJBY26EDXTMW2DURS0PXFRT' where id=5; -update noar tt set v0='F615DJMS2U63IBC1YKW63R6HF' where id=6; -update noar ti set v0='F615DJMS2U63IBC1YKW63R6HF' where id=6; -update noar tt set b0='BYFY2S7K2CBGIO' where id=6; -update noar ti set b0='BYFY2S7K2CBGIO' where id=6; -update noar tt set v0='9C0SUD5IJAO29B9' where id=6; -update noar ti set v0='9C0SUD5IJAO29B9' where id=6; -update noar tt set b1='S1S7IPOZLUO' where id=6; -update noar ti set b1='S1S7IPOZLUO' where id=6; -update noar tt set v0='PMRHZQ29' where id=6; -update noar ti set v0='PMRHZQ29' where id=6; -update noar tt set b2='3X1UVSQL12OEU' where id=6; -update noar ti set b2='3X1UVSQL12OEU' where id=6; -update noar tt set v0='8I2BBFPJKJOSV8ZHPD6F6' where id=7; -update noar ti set v0='8I2BBFPJKJOSV8ZHPD6F6' where id=7; -update noar tt set b0='11ZHKVY73' where id=7; -update noar ti set b0='11ZHKVY73' where id=7; -update noar tt set v0='4BIVO2URW5BCQ' where id=7; -update noar ti set v0='4BIVO2URW5BCQ' where id=7; -update noar tt set b1='R56L0HU90EJEC6HWTXQM4GBMYRD' where id=7; -update noar ti set b1='R56L0HU90EJEC6HWTXQM4GBMYRD' where id=7; -update noar tt set v0='WRA7NWDPROPIXF' where id=7; -update noar ti set v0='WRA7NWDPROPIXF' where id=7; -update noar tt set b2='JK7LH71YYXB6AIN9VEPWUOTHHPW1JW' where id=7; -update noar ti set b2='JK7LH71YYXB6AIN9VEPWUOTHHPW1JW' where id=7; -update noar tt set v0='M3P3ANQD5QJRLYT8H2CKVGD' where id=8; -update noar ti set v0='M3P3ANQD5QJRLYT8H2CKVGD' where id=8; -update noar tt set b0='OXVQRRK3UNHKU' where id=8; -update noar ti set b0='OXVQRRK3UNHKU' where id=8; -update noar tt set v0='DHZ8891D44U4BLUTZMQ2VBBU' where id=8; -update noar ti set v0='DHZ8891D44U4BLUTZMQ2VBBU' where id=8; -update noar tt set b1='4EHVPJQ0NXSGQSU4YV47JI39PI7A' where id=8; -update noar ti set b1='4EHVPJQ0NXSGQSU4YV47JI39PI7A' where id=8; -update noar tt set v0='1TNM7D4CUG6CAR4JUKOW1GN4Q5C1' where id=8; -update noar ti set v0='1TNM7D4CUG6CAR4JUKOW1GN4Q5C1' where id=8; -update noar tt set b2='AUP' where id=8; -update noar ti set b2='AUP' where id=8; -update noar tt set v0='EOYBG2AYA7YFOTJJP7M57' where id=9; -update noar ti set v0='EOYBG2AYA7YFOTJJP7M57' where id=9; -update noar tt set b0='Q8TYATVXTHGC7ANFJAK33WWB' where id=9; -update noar ti set b0='Q8TYATVXTHGC7ANFJAK33WWB' where id=9; -update noar tt set v0='89A5647ORACMW64Y2Z7PXIP6' where id=9; -update noar ti set v0='89A5647ORACMW64Y2Z7PXIP6' where id=9; -update noar tt set b1='75HGKA' where id=9; -update noar ti set b1='75HGKA' where id=9; -update noar tt set v0='NKW9GBGVB9QJ2L' where id=9; -update noar ti set v0='NKW9GBGVB9QJ2L' where id=9; -update noar tt set b2='3GYSR3ZEAO0B' where id=9; -update noar ti set b2='3GYSR3ZEAO0B' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 mediumblob null, -b1 longblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='868M7MOY8GSMM9XXDSGITFSFC6U' where id=1; -update noar ti set v0='868M7MOY8GSMM9XXDSGITFSFC6U' where id=1; -update noar tt set b0='9VXWUW' where id=1; -update noar ti set b0='9VXWUW' where id=1; -update noar tt set v0='HPOPQVBEUA8' where id=1; -update noar ti set v0='HPOPQVBEUA8' where id=1; -update noar tt set b1='U4KXTRR2XKV1' where id=1; -update noar ti set b1='U4KXTRR2XKV1' where id=1; -update noar tt set v0='IISFKUZI3WHYQPQB9C76' where id=1; -update noar ti set v0='IISFKUZI3WHYQPQB9C76' where id=1; -update noar tt set b2='C301SQZEDU8M8U842V0BWL' where id=1; -update noar ti set b2='C301SQZEDU8M8U842V0BWL' where id=1; -update noar tt set v0='CE5DN76GACHA8XXBIK5IUZXWRX7AQ' where id=2; -update noar ti set v0='CE5DN76GACHA8XXBIK5IUZXWRX7AQ' where id=2; -update noar tt set b0='21KM636A9' where id=2; -update noar ti set b0='21KM636A9' where id=2; -update noar tt set v0='6S' where id=2; -update noar ti set v0='6S' where id=2; -update noar tt set b1='TOFL505VRHEM4SSAG9' where id=2; -update noar ti set b1='TOFL505VRHEM4SSAG9' where id=2; -update noar tt set v0='6CT91' where id=2; -update noar ti set v0='6CT91' where id=2; -update noar tt set b2='L0UA' where id=2; -update noar ti set b2='L0UA' where id=2; -update noar tt set v0='5906TXUPHOMNY5XPC2P0RTTD' where id=3; -update noar ti set v0='5906TXUPHOMNY5XPC2P0RTTD' where id=3; -update noar tt set b0='4NREU9YGYIFPGAAWGAZKLC0' where id=3; -update noar ti set b0='4NREU9YGYIFPGAAWGAZKLC0' where id=3; -update noar tt set v0='TIRXY40XEXNUZCN66V1QA' where id=3; -update noar ti set v0='TIRXY40XEXNUZCN66V1QA' where id=3; -update noar tt set b1='U98TVT14B5IQHWAFMRK9X5SBNNI6' where id=3; -update noar ti set b1='U98TVT14B5IQHWAFMRK9X5SBNNI6' where id=3; -update noar tt set v0='37B84' where id=3; -update noar ti set v0='37B84' where id=3; -update noar tt set b2='IP0PO8UNRKNA0SN34EBPU24NDL8624D' where id=3; -update noar ti set b2='IP0PO8UNRKNA0SN34EBPU24NDL8624D' where id=3; -update noar tt set v0='Z8AXKYEUTROS8S734OQ1HOQ8PL' where id=4; -update noar ti set v0='Z8AXKYEUTROS8S734OQ1HOQ8PL' where id=4; -update noar tt set b0='HA4' where id=4; -update noar ti set b0='HA4' where id=4; -update noar tt set v0='LL0EUFOY0Q7LOJ7H8OC0' where id=4; -update noar ti set v0='LL0EUFOY0Q7LOJ7H8OC0' where id=4; -update noar tt set b1='S8ML' where id=4; -update noar ti set b1='S8ML' where id=4; -update noar tt set v0='RB22TEPR7F9JE1ZP59Q1DRBBSBW' where id=4; -update noar ti set v0='RB22TEPR7F9JE1ZP59Q1DRBBSBW' where id=4; -update noar tt set b2='NV3SJPY3CBAVIF2KXM30AWT21RK44CO' where id=4; -update noar ti set b2='NV3SJPY3CBAVIF2KXM30AWT21RK44CO' where id=4; -update noar tt set v0='Y7F7' where id=5; -update noar ti set v0='Y7F7' where id=5; -update noar tt set b0='V' where id=5; -update noar ti set b0='V' where id=5; -update noar tt set v0='C1YL6217XM4LOWNVC4ZJRXM2U4V' where id=5; -update noar ti set v0='C1YL6217XM4LOWNVC4ZJRXM2U4V' where id=5; -update noar tt set b1='K5N1B' where id=5; -update noar ti set b1='K5N1B' where id=5; -update noar tt set v0='ZGD9UTCRDPUY' where id=5; -update noar ti set v0='ZGD9UTCRDPUY' where id=5; -update noar tt set b2='SATRTYJUGH8J7OK6WYFBVCU4B' where id=5; -update noar ti set b2='SATRTYJUGH8J7OK6WYFBVCU4B' where id=5; -update noar tt set v0='AXW32QDT1LRKZ42STBT08HCV31S' where id=6; -update noar ti set v0='AXW32QDT1LRKZ42STBT08HCV31S' where id=6; -update noar tt set b0='BYWLJGBU6' where id=6; -update noar ti set b0='BYWLJGBU6' where id=6; -update noar tt set v0='96S1XXU6224WV5EYSPVY6QH9X17MKHX' where id=6; -update noar ti set v0='96S1XXU6224WV5EYSPVY6QH9X17MKHX' where id=6; -update noar tt set b1='Q33HUHJSWUDN9SR71BH2DNYJXSFP' where id=6; -update noar ti set b1='Q33HUHJSWUDN9SR71BH2DNYJXSFP' where id=6; -update noar tt set v0='K07D838SX16763OZ6AY' where id=6; -update noar ti set v0='K07D838SX16763OZ6AY' where id=6; -update noar tt set b2='0R' where id=6; -update noar ti set b2='0R' where id=6; -update noar tt set v0='KHOUT7WPSTFHFE4VZ' where id=7; -update noar ti set v0='KHOUT7WPSTFHFE4VZ' where id=7; -update noar tt set b0='X8KVKYKV31W8' where id=7; -update noar ti set b0='X8KVKYKV31W8' where id=7; -update noar tt set v0='EDJX88AU9RMI4U4DGUXMK' where id=7; -update noar ti set v0='EDJX88AU9RMI4U4DGUXMK' where id=7; -update noar tt set b1='XF7KPD9P82RY5WR8S8D098' where id=7; -update noar ti set b1='XF7KPD9P82RY5WR8S8D098' where id=7; -update noar tt set v0='E6' where id=7; -update noar ti set v0='E6' where id=7; -update noar tt set b2='GSBEM4UKWO8LXYS3FBXC' where id=7; -update noar ti set b2='GSBEM4UKWO8LXYS3FBXC' where id=7; -update noar tt set v0='GLOL7TEKUMYULQLRKV' where id=8; -update noar ti set v0='GLOL7TEKUMYULQLRKV' where id=8; -update noar tt set b0='1PB823LGOA2GBJRWYFQGN81IA7C0' where id=8; -update noar ti set b0='1PB823LGOA2GBJRWYFQGN81IA7C0' where id=8; -update noar tt set v0='4MM7LCMHALSJW4WYSGSBR1IVV3II8MO' where id=8; -update noar ti set v0='4MM7LCMHALSJW4WYSGSBR1IVV3II8MO' where id=8; -update noar tt set b1='GGM6NEOAD2YY0REFAV' where id=8; -update noar ti set b1='GGM6NEOAD2YY0REFAV' where id=8; -update noar tt set v0='0L448OJZM' where id=8; -update noar ti set v0='0L448OJZM' where id=8; -update noar tt set b2='HSX2K0XZ3GSGSRQYW3XVXV4BYCL44CE' where id=8; -update noar ti set b2='HSX2K0XZ3GSGSRQYW3XVXV4BYCL44CE' where id=8; -update noar tt set v0='T0R1J0F5M7QEC6ODYBJWRB' where id=9; -update noar ti set v0='T0R1J0F5M7QEC6ODYBJWRB' where id=9; -update noar tt set b0='U5L6U9' where id=9; -update noar ti set b0='U5L6U9' where id=9; -update noar tt set v0='U1K7ENH1X3N8P0KX96J5P' where id=9; -update noar ti set v0='U1K7ENH1X3N8P0KX96J5P' where id=9; -update noar tt set b1='OVJYCJA' where id=9; -update noar ti set b1='OVJYCJA' where id=9; -update noar tt set v0='M63IT55ZZBK5OC3C455TID' where id=9; -update noar ti set v0='M63IT55ZZBK5OC3C455TID' where id=9; -update noar tt set b2='DQ286QVQUDVCHXUCLPB' where id=9; -update noar ti set b2='DQ286QVQUDVCHXUCLPB' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 mediumblob null, -b1 longblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='CQ9W2BFQDWKBBRC9043O8O0D' where id=1; -update noar ti set v0='CQ9W2BFQDWKBBRC9043O8O0D' where id=1; -update noar tt set b0='BE4N6EVTSHELQ4V3J31CVMO56LU' where id=1; -update noar ti set b0='BE4N6EVTSHELQ4V3J31CVMO56LU' where id=1; -update noar tt set v0='C93DIPTTYOVHVQA0RPS6CTNX' where id=1; -update noar ti set v0='C93DIPTTYOVHVQA0RPS6CTNX' where id=1; -update noar tt set b1='FRYU9UAO' where id=1; -update noar ti set b1='FRYU9UAO' where id=1; -update noar tt set v0='0C7LTBI4NVK5XEDTEC6DFIMSX3B0TGV' where id=1; -update noar ti set v0='0C7LTBI4NVK5XEDTEC6DFIMSX3B0TGV' where id=1; -update noar tt set b2='862RE92FD7DT28UVZHGWN8WVH2B' where id=1; -update noar ti set b2='862RE92FD7DT28UVZHGWN8WVH2B' where id=1; -update noar tt set v0='0JPR9J9HOBFVMQIPLEW' where id=2; -update noar ti set v0='0JPR9J9HOBFVMQIPLEW' where id=2; -update noar tt set b0='DJQDSUZFG1PZ5Y8US01VZWBQ0GQMXO' where id=2; -update noar ti set b0='DJQDSUZFG1PZ5Y8US01VZWBQ0GQMXO' where id=2; -update noar tt set v0='A9C5Y3CEG57KT6DUV8BC64ZJ0G' where id=2; -update noar ti set v0='A9C5Y3CEG57KT6DUV8BC64ZJ0G' where id=2; -update noar tt set b1='AIYHQ6' where id=2; -update noar ti set b1='AIYHQ6' where id=2; -update noar tt set v0='SH5' where id=2; -update noar ti set v0='SH5' where id=2; -update noar tt set b2='VYXPBTN1KH9' where id=2; -update noar ti set b2='VYXPBTN1KH9' where id=2; -update noar tt set v0='RM0EMGE1M24NQGPD' where id=3; -update noar ti set v0='RM0EMGE1M24NQGPD' where id=3; -update noar tt set b0='94YRQSVSF3SL4AP36T2T16' where id=3; -update noar ti set b0='94YRQSVSF3SL4AP36T2T16' where id=3; -update noar tt set v0='QPZPOVCNBQ5604' where id=3; -update noar ti set v0='QPZPOVCNBQ5604' where id=3; -update noar tt set b1='BM5G5H' where id=3; -update noar ti set b1='BM5G5H' where id=3; -update noar tt set v0='VLDFR4KBEO9M' where id=3; -update noar ti set v0='VLDFR4KBEO9M' where id=3; -update noar tt set b2='CXRMA95TAT7O4HOXRPTVH5BXWW3NLZ4O' where id=3; -update noar ti set b2='CXRMA95TAT7O4HOXRPTVH5BXWW3NLZ4O' where id=3; -update noar tt set v0='VR' where id=4; -update noar ti set v0='VR' where id=4; -update noar tt set b0='AQG7M0ZLE95CKEX' where id=4; -update noar ti set b0='AQG7M0ZLE95CKEX' where id=4; -update noar tt set v0='Z7DEOAWVBPRDBFMFL' where id=4; -update noar ti set v0='Z7DEOAWVBPRDBFMFL' where id=4; -update noar tt set b1='PA57HMZMK99DIQQ2POFS6LKMKB68P' where id=4; -update noar ti set b1='PA57HMZMK99DIQQ2POFS6LKMKB68P' where id=4; -update noar tt set v0='ZXYKP6SQB54DXX371' where id=4; -update noar ti set v0='ZXYKP6SQB54DXX371' where id=4; -update noar tt set b2='8TE3APDZZZYZ' where id=4; -update noar ti set b2='8TE3APDZZZYZ' where id=4; -update noar tt set v0='4G2C' where id=5; -update noar ti set v0='4G2C' where id=5; -update noar tt set b0='0I2JY2X46CBPZJI' where id=5; -update noar ti set b0='0I2JY2X46CBPZJI' where id=5; -update noar tt set v0='OL9KD4UQGP5XT8MLQQP3YGQXBFFI' where id=5; -update noar ti set v0='OL9KD4UQGP5XT8MLQQP3YGQXBFFI' where id=5; -update noar tt set b1='B20VKDD2VDGU' where id=5; -update noar ti set b1='B20VKDD2VDGU' where id=5; -update noar tt set v0='IP4STFWNQMW836A74VQ' where id=5; -update noar ti set v0='IP4STFWNQMW836A74VQ' where id=5; -update noar tt set b2='04SAVL7342H9OAPP5JL8T7HLYRXK466O' where id=5; -update noar ti set b2='04SAVL7342H9OAPP5JL8T7HLYRXK466O' where id=5; -update noar tt set v0='PSPEL3T84M' where id=6; -update noar ti set v0='PSPEL3T84M' where id=6; -update noar tt set b0='103DCO' where id=6; -update noar ti set b0='103DCO' where id=6; -update noar tt set v0='FDDAJ607NWDWCDG98X9' where id=6; -update noar ti set v0='FDDAJ607NWDWCDG98X9' where id=6; -update noar tt set b1='MFXBLQDIZR4N39N10NCAN980R' where id=6; -update noar ti set b1='MFXBLQDIZR4N39N10NCAN980R' where id=6; -update noar tt set v0='FH815IXX57ORKB5W23LV' where id=6; -update noar ti set v0='FH815IXX57ORKB5W23LV' where id=6; -update noar tt set b2='AARYDA' where id=6; -update noar ti set b2='AARYDA' where id=6; -update noar tt set v0='EHISY2O856GDXUAEYHABUCGR0Y' where id=7; -update noar ti set v0='EHISY2O856GDXUAEYHABUCGR0Y' where id=7; -update noar tt set b0='27P' where id=7; -update noar ti set b0='27P' where id=7; -update noar tt set v0='795IAK4YYMY13CSCBP1267A' where id=7; -update noar ti set v0='795IAK4YYMY13CSCBP1267A' where id=7; -update noar tt set b1='DIUML2QK2DOG45CX1T' where id=7; -update noar ti set b1='DIUML2QK2DOG45CX1T' where id=7; -update noar tt set v0='IIZZG5BEUX2RS2MAS90RI8EOHCZB57H0' where id=7; -update noar ti set v0='IIZZG5BEUX2RS2MAS90RI8EOHCZB57H0' where id=7; -update noar tt set b2='Y3YFJFGCX5V' where id=7; -update noar ti set b2='Y3YFJFGCX5V' where id=7; -update noar tt set v0='KF' where id=8; -update noar ti set v0='KF' where id=8; -update noar tt set b0='KQ5M39W8F' where id=8; -update noar ti set b0='KQ5M39W8F' where id=8; -update noar tt set v0='V0N7KHYJWYB4BU4ODUWBST' where id=8; -update noar ti set v0='V0N7KHYJWYB4BU4ODUWBST' where id=8; -update noar tt set b1='HH6S58YOR45B1FKE' where id=8; -update noar ti set b1='HH6S58YOR45B1FKE' where id=8; -update noar tt set v0='DX32Z' where id=8; -update noar ti set v0='DX32Z' where id=8; -update noar tt set b2='Z1CW' where id=8; -update noar ti set b2='Z1CW' where id=8; -update noar tt set v0='NUI' where id=9; -update noar ti set v0='NUI' where id=9; -update noar tt set b0='7DVKSBYK2Y3X4SSA389RIX7UGAI7IHZ' where id=9; -update noar ti set b0='7DVKSBYK2Y3X4SSA389RIX7UGAI7IHZ' where id=9; -update noar tt set v0='5V69PYQVGU' where id=9; -update noar ti set v0='5V69PYQVGU' where id=9; -update noar tt set b1='WCCK9IHUAKCB5LRMADZQ4THZ' where id=9; -update noar ti set b1='WCCK9IHUAKCB5LRMADZQ4THZ' where id=9; -update noar tt set v0='2SLJIWZZA0ZGQ87XLSKF' where id=9; -update noar ti set v0='2SLJIWZZA0ZGQ87XLSKF' where id=9; -update noar tt set b2='S7XO' where id=9; -update noar ti set b2='S7XO' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 mediumblob not null, -b1 longblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='OKW0L2RLLUV4J0' where id=1; -update noar ti set v0='OKW0L2RLLUV4J0' where id=1; -update noar tt set b0='WZVWV1I6NEOXYZ2' where id=1; -update noar ti set b0='WZVWV1I6NEOXYZ2' where id=1; -update noar tt set v0='YIE6F371LZVJ71B5WC30X4MDCFIMOB' where id=1; -update noar ti set v0='YIE6F371LZVJ71B5WC30X4MDCFIMOB' where id=1; -update noar tt set b1='NJGZV33OVII3I532831ODDF' where id=1; -update noar ti set b1='NJGZV33OVII3I532831ODDF' where id=1; -update noar tt set v0='UV6ADP8R40FXLL43K' where id=1; -update noar ti set v0='UV6ADP8R40FXLL43K' where id=1; -update noar tt set b2='5K4KE58' where id=1; -update noar ti set b2='5K4KE58' where id=1; -update noar tt set v0='UX28LZOZYET61QCVM9DKSM8' where id=2; -update noar ti set v0='UX28LZOZYET61QCVM9DKSM8' where id=2; -update noar tt set b0='6O9LV98O9A5WR9I97T9CB0TMTOI' where id=2; -update noar ti set b0='6O9LV98O9A5WR9I97T9CB0TMTOI' where id=2; -update noar tt set v0='GZMJTX14ICF1UQ2' where id=2; -update noar ti set v0='GZMJTX14ICF1UQ2' where id=2; -update noar tt set b1='HGMGRRIIDL1' where id=2; -update noar ti set b1='HGMGRRIIDL1' where id=2; -update noar tt set v0='J257RWCEKH33CJRKMM' where id=2; -update noar ti set v0='J257RWCEKH33CJRKMM' where id=2; -update noar tt set b2='BS00J88MLS50FLCY7QM64BKYSB' where id=2; -update noar ti set b2='BS00J88MLS50FLCY7QM64BKYSB' where id=2; -update noar tt set v0='2FFOKRTAC22D2P8VD8SJC07IXE6' where id=3; -update noar ti set v0='2FFOKRTAC22D2P8VD8SJC07IXE6' where id=3; -update noar tt set b0='ERMLDOFAOF9859L1UA' where id=3; -update noar ti set b0='ERMLDOFAOF9859L1UA' where id=3; -update noar tt set v0='HZZ2XVZH95AASFVQDLBDCU0V5BF' where id=3; -update noar ti set v0='HZZ2XVZH95AASFVQDLBDCU0V5BF' where id=3; -update noar tt set b1='2UX2Z1HRALYTXMWDRTL' where id=3; -update noar ti set b1='2UX2Z1HRALYTXMWDRTL' where id=3; -update noar tt set v0='5TH4ZIMC4' where id=3; -update noar ti set v0='5TH4ZIMC4' where id=3; -update noar tt set b2='S0C' where id=3; -update noar ti set b2='S0C' where id=3; -update noar tt set v0='C' where id=4; -update noar ti set v0='C' where id=4; -update noar tt set b0='RFAJBFIVNZQPXPCVDW4KD8L11ZFJM8JT' where id=4; -update noar ti set b0='RFAJBFIVNZQPXPCVDW4KD8L11ZFJM8JT' where id=4; -update noar tt set v0='S35WKQBIPS6C285DS' where id=4; -update noar ti set v0='S35WKQBIPS6C285DS' where id=4; -update noar tt set b1='NPLJBL' where id=4; -update noar ti set b1='NPLJBL' where id=4; -update noar tt set v0='L72XTV1GL083J6V4JLXKNCQ' where id=4; -update noar ti set v0='L72XTV1GL083J6V4JLXKNCQ' where id=4; -update noar tt set b2='RQ6HURJO651EQBQJMER0X18ZKFZ' where id=4; -update noar ti set b2='RQ6HURJO651EQBQJMER0X18ZKFZ' where id=4; -update noar tt set v0='YJ89YJUS9V3YAHS8HR4GM8FV42S' where id=5; -update noar ti set v0='YJ89YJUS9V3YAHS8HR4GM8FV42S' where id=5; -update noar tt set b0='IM2PAQ' where id=5; -update noar ti set b0='IM2PAQ' where id=5; -update noar tt set v0='PQ5PY2V2VXZW0W19BKSYYN73RQ7O8' where id=5; -update noar ti set v0='PQ5PY2V2VXZW0W19BKSYYN73RQ7O8' where id=5; -update noar tt set b1='JF' where id=5; -update noar ti set b1='JF' where id=5; -update noar tt set v0='6WYR5' where id=5; -update noar ti set v0='6WYR5' where id=5; -update noar tt set b2='8TC34ZRWSY4EFCENV9AR31G9' where id=5; -update noar ti set b2='8TC34ZRWSY4EFCENV9AR31G9' where id=5; -update noar tt set v0='YYYN87E7IEA' where id=6; -update noar ti set v0='YYYN87E7IEA' where id=6; -update noar tt set b0='WM4ZRZZ36JHGCX' where id=6; -update noar ti set b0='WM4ZRZZ36JHGCX' where id=6; -update noar tt set v0='O693ZV71' where id=6; -update noar ti set v0='O693ZV71' where id=6; -update noar tt set b1='FYSY91LT' where id=6; -update noar ti set b1='FYSY91LT' where id=6; -update noar tt set v0='HZPKWU7SJR6TXBL' where id=6; -update noar ti set v0='HZPKWU7SJR6TXBL' where id=6; -update noar tt set b2='T83B2Y7GNAOTUNQX1L9VBHLVE6A' where id=6; -update noar ti set b2='T83B2Y7GNAOTUNQX1L9VBHLVE6A' where id=6; -update noar tt set v0='SKU5RRNBM797W3C' where id=7; -update noar ti set v0='SKU5RRNBM797W3C' where id=7; -update noar tt set b0='OC11PJ' where id=7; -update noar ti set b0='OC11PJ' where id=7; -update noar tt set v0='WFKMMADSY3UWBYQBW22GIC0N' where id=7; -update noar ti set v0='WFKMMADSY3UWBYQBW22GIC0N' where id=7; -update noar tt set b1='UTG9M3059BOI23A2B' where id=7; -update noar ti set b1='UTG9M3059BOI23A2B' where id=7; -update noar tt set v0='UH1392IBLDUDJ18SIBY2DA' where id=7; -update noar ti set v0='UH1392IBLDUDJ18SIBY2DA' where id=7; -update noar tt set b2='K2XFEOSQSU666DHJ9GNUPR7WL' where id=7; -update noar ti set b2='K2XFEOSQSU666DHJ9GNUPR7WL' where id=7; -update noar tt set v0='ACGGISOONHW' where id=8; -update noar ti set v0='ACGGISOONHW' where id=8; -update noar tt set b0='N' where id=8; -update noar ti set b0='N' where id=8; -update noar tt set v0='7Y8N' where id=8; -update noar ti set v0='7Y8N' where id=8; -update noar tt set b1='K4EE1EZOA8ZU54SO6WB' where id=8; -update noar ti set b1='K4EE1EZOA8ZU54SO6WB' where id=8; -update noar tt set v0='N90VUUQ5FVVMM' where id=8; -update noar ti set v0='N90VUUQ5FVVMM' where id=8; -update noar tt set b2='SUBATF9KXZBXSDUEGSU9YBD03G' where id=8; -update noar ti set b2='SUBATF9KXZBXSDUEGSU9YBD03G' where id=8; -update noar tt set v0='XZMVYA' where id=9; -update noar ti set v0='XZMVYA' where id=9; -update noar tt set b0='8YIUC3LXL5FBK90GCZTXVR0HXZ4G' where id=9; -update noar ti set b0='8YIUC3LXL5FBK90GCZTXVR0HXZ4G' where id=9; -update noar tt set v0='D4ZTC1YH7IFF2ASVK2X3OAXVN' where id=9; -update noar ti set v0='D4ZTC1YH7IFF2ASVK2X3OAXVN' where id=9; -update noar tt set b1='VQYK59X17' where id=9; -update noar ti set b1='VQYK59X17' where id=9; -update noar tt set v0='EOEBS8ACEQGF' where id=9; -update noar ti set v0='EOEBS8ACEQGF' where id=9; -update noar tt set b2='UJU8LP0HX4EK45FHU5Y47HIBRIR' where id=9; -update noar ti set b2='UJU8LP0HX4EK45FHU5Y47HIBRIR' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 mediumblob not null, -b1 longblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='1CLWSO1JIYEZ3JQ' where id=1; -update noar ti set v0='1CLWSO1JIYEZ3JQ' where id=1; -update noar tt set b0='UED7YCNFQ9J97URGLNZ8GY' where id=1; -update noar ti set b0='UED7YCNFQ9J97URGLNZ8GY' where id=1; -update noar tt set v0='L5CFN37PY6H2SFQIG' where id=1; -update noar ti set v0='L5CFN37PY6H2SFQIG' where id=1; -update noar tt set b1='O10G02' where id=1; -update noar ti set b1='O10G02' where id=1; -update noar tt set v0='Y2P1VSIB4Q3DX5XMG7K0OMT1OQX6' where id=1; -update noar ti set v0='Y2P1VSIB4Q3DX5XMG7K0OMT1OQX6' where id=1; -update noar tt set b2='T5R18M9RFX78E1H' where id=1; -update noar ti set b2='T5R18M9RFX78E1H' where id=1; -update noar tt set v0='20XPQRC9FY1CN77EI' where id=2; -update noar ti set v0='20XPQRC9FY1CN77EI' where id=2; -update noar tt set b0='D2V8MDORXXJYBALB2EE9X' where id=2; -update noar ti set b0='D2V8MDORXXJYBALB2EE9X' where id=2; -update noar tt set v0='RW' where id=2; -update noar ti set v0='RW' where id=2; -update noar tt set b1='4X' where id=2; -update noar ti set b1='4X' where id=2; -update noar tt set v0='U6AFHTURD5L1A9JW0R8KQ' where id=2; -update noar ti set v0='U6AFHTURD5L1A9JW0R8KQ' where id=2; -update noar tt set b2='J5FM3P4EPHKOJ5I8CFYHQZ8GXUGEKJH' where id=2; -update noar ti set b2='J5FM3P4EPHKOJ5I8CFYHQZ8GXUGEKJH' where id=2; -update noar tt set v0='SUXE4EX3YDEVHZSOJV2Y2666T' where id=3; -update noar ti set v0='SUXE4EX3YDEVHZSOJV2Y2666T' where id=3; -update noar tt set b0='IP3VS9V0DGEF4NTEPK' where id=3; -update noar ti set b0='IP3VS9V0DGEF4NTEPK' where id=3; -update noar tt set v0='0EOZI64QZSVS6HNBI1QJO8OLWEGG' where id=3; -update noar ti set v0='0EOZI64QZSVS6HNBI1QJO8OLWEGG' where id=3; -update noar tt set b1='T' where id=3; -update noar ti set b1='T' where id=3; -update noar tt set v0='OC62B5JF1UXIPA6YOH4K8TYG' where id=3; -update noar ti set v0='OC62B5JF1UXIPA6YOH4K8TYG' where id=3; -update noar tt set b2='TRY9OF7TXBHWT5X8ZSLB' where id=3; -update noar ti set b2='TRY9OF7TXBHWT5X8ZSLB' where id=3; -update noar tt set v0='GT01QAX4X77DJ3JYQLJT' where id=4; -update noar ti set v0='GT01QAX4X77DJ3JYQLJT' where id=4; -update noar tt set b0='E4FLVAWGSGUJQ83EWT0AG3KRU14' where id=4; -update noar ti set b0='E4FLVAWGSGUJQ83EWT0AG3KRU14' where id=4; -update noar tt set v0='JXOXHX83ZPBEYLK9BXY4W3' where id=4; -update noar ti set v0='JXOXHX83ZPBEYLK9BXY4W3' where id=4; -update noar tt set b1='I543WWJYP9LYHDJ0YG1GBBC5US' where id=4; -update noar ti set b1='I543WWJYP9LYHDJ0YG1GBBC5US' where id=4; -update noar tt set v0='YOVGSLMD' where id=4; -update noar ti set v0='YOVGSLMD' where id=4; -update noar tt set b2='MD0PO' where id=4; -update noar ti set b2='MD0PO' where id=4; -update noar tt set v0='YOGBQBY8Y7CCW2CP96V' where id=5; -update noar ti set v0='YOGBQBY8Y7CCW2CP96V' where id=5; -update noar tt set b0='SO10T7T9RFS7MBOJ7LHDO47MY6DT57' where id=5; -update noar ti set b0='SO10T7T9RFS7MBOJ7LHDO47MY6DT57' where id=5; -update noar tt set v0='4NSPPCQO2MUBO09IH3GT1C' where id=5; -update noar ti set v0='4NSPPCQO2MUBO09IH3GT1C' where id=5; -update noar tt set b1='7CPSCVY5HDY0781INS9OHR4PI9W6I3' where id=5; -update noar ti set b1='7CPSCVY5HDY0781INS9OHR4PI9W6I3' where id=5; -update noar tt set v0='EHQ5ME' where id=5; -update noar ti set v0='EHQ5ME' where id=5; -update noar tt set b2='HAADR3OINKE87BBMV' where id=5; -update noar ti set b2='HAADR3OINKE87BBMV' where id=5; -update noar tt set v0='7YP1M' where id=6; -update noar ti set v0='7YP1M' where id=6; -update noar tt set b0='I3N5L5HF' where id=6; -update noar ti set b0='I3N5L5HF' where id=6; -update noar tt set v0='ZSA' where id=6; -update noar ti set v0='ZSA' where id=6; -update noar tt set b1='HLKTPVJ0XHBTXURRBKSU1PTE7P3' where id=6; -update noar ti set b1='HLKTPVJ0XHBTXURRBKSU1PTE7P3' where id=6; -update noar tt set v0='4IL7E8QHZ' where id=6; -update noar ti set v0='4IL7E8QHZ' where id=6; -update noar tt set b2='ZQVYHM33W72AAZD2VBVO34RE03H1TY' where id=6; -update noar ti set b2='ZQVYHM33W72AAZD2VBVO34RE03H1TY' where id=6; -update noar tt set v0='WJQF' where id=7; -update noar ti set v0='WJQF' where id=7; -update noar tt set b0='TQHT6TLPJ7QTJLICK' where id=7; -update noar ti set b0='TQHT6TLPJ7QTJLICK' where id=7; -update noar tt set v0='D7Z8IED45D6ZZUBO1D6U3A7NNKI' where id=7; -update noar ti set v0='D7Z8IED45D6ZZUBO1D6U3A7NNKI' where id=7; -update noar tt set b1='TPO98N9TSGX6BG51XMCHD' where id=7; -update noar ti set b1='TPO98N9TSGX6BG51XMCHD' where id=7; -update noar tt set v0='R' where id=7; -update noar ti set v0='R' where id=7; -update noar tt set b2='LPC0FNP8EFCVHN5' where id=7; -update noar ti set b2='LPC0FNP8EFCVHN5' where id=7; -update noar tt set v0='6ZFTC9B52IRFLZOSC11' where id=8; -update noar ti set v0='6ZFTC9B52IRFLZOSC11' where id=8; -update noar tt set b0='EOR6NMOHKM9MU5KJY58XY70' where id=8; -update noar ti set b0='EOR6NMOHKM9MU5KJY58XY70' where id=8; -update noar tt set v0='YMH0G1EH89OUW7ZQDPX' where id=8; -update noar ti set v0='YMH0G1EH89OUW7ZQDPX' where id=8; -update noar tt set b1='8IY11L1A' where id=8; -update noar ti set b1='8IY11L1A' where id=8; -update noar tt set v0='KL' where id=8; -update noar ti set v0='KL' where id=8; -update noar tt set b2='AJORWIPC02P6WZXQO3' where id=8; -update noar ti set b2='AJORWIPC02P6WZXQO3' where id=8; -update noar tt set v0='N5OMB3JO5OFAHVKCFPUG65KPE6' where id=9; -update noar ti set v0='N5OMB3JO5OFAHVKCFPUG65KPE6' where id=9; -update noar tt set b0='LTCUO5WBXZTPVGCQ' where id=9; -update noar ti set b0='LTCUO5WBXZTPVGCQ' where id=9; -update noar tt set v0='DHZV01HANF1AQ3HHRTT6F72BI' where id=9; -update noar ti set v0='DHZV01HANF1AQ3HHRTT6F72BI' where id=9; -update noar tt set b1='LQIH6' where id=9; -update noar ti set b1='LQIH6' where id=9; -update noar tt set v0='09YV50MZ3L7E0YIM7RPRC0EMTLGLL' where id=9; -update noar ti set v0='09YV50MZ3L7E0YIM7RPRC0EMTLGLL' where id=9; -update noar tt set b2='7437N5EMEVCKHG3628162YTCEL76SM' where id=9; -update noar ti set b2='7437N5EMEVCKHG3628162YTCEL76SM' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 mediumblob null, -b1 longblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='6ICAQJG3BD2DG9RDYEB' where id=1; -update noar ti set v0='6ICAQJG3BD2DG9RDYEB' where id=1; -update noar tt set b0='KKRAGG8' where id=1; -update noar ti set b0='KKRAGG8' where id=1; -update noar tt set v0='QVQ65UTTGMJ' where id=1; -update noar ti set v0='QVQ65UTTGMJ' where id=1; -update noar tt set b1='2Q4PUE60PW7OC5EBDPCHD' where id=1; -update noar ti set b1='2Q4PUE60PW7OC5EBDPCHD' where id=1; -update noar tt set v0='0HHQQY4B74RZJL6JOOYBS1' where id=1; -update noar ti set v0='0HHQQY4B74RZJL6JOOYBS1' where id=1; -update noar tt set b2='IFTLM2OI0P' where id=1; -update noar ti set b2='IFTLM2OI0P' where id=1; -update noar tt set v0='N066VUM7SXC833ZY3YZA1YZD' where id=2; -update noar ti set v0='N066VUM7SXC833ZY3YZA1YZD' where id=2; -update noar tt set b0='L0T0IJD5HSI8VFC7' where id=2; -update noar ti set b0='L0T0IJD5HSI8VFC7' where id=2; -update noar tt set v0='T1F2AYXQENO2NS' where id=2; -update noar ti set v0='T1F2AYXQENO2NS' where id=2; -update noar tt set b1='GQBLNM6VL5FMJ4XODE37YG4EJEPS' where id=2; -update noar ti set b1='GQBLNM6VL5FMJ4XODE37YG4EJEPS' where id=2; -update noar tt set v0='GQZ6Q' where id=2; -update noar ti set v0='GQZ6Q' where id=2; -update noar tt set b2='WCYLQAMBGYBWAP4RE5O2AM0PNNJKBS' where id=2; -update noar ti set b2='WCYLQAMBGYBWAP4RE5O2AM0PNNJKBS' where id=2; -update noar tt set v0='7LU0JY4SPVX9SWESBU5T0OOJ' where id=3; -update noar ti set v0='7LU0JY4SPVX9SWESBU5T0OOJ' where id=3; -update noar tt set b0='Y4ASNUCLNXM6' where id=3; -update noar ti set b0='Y4ASNUCLNXM6' where id=3; -update noar tt set v0='3TY5MEEZMYIY8IRS' where id=3; -update noar ti set v0='3TY5MEEZMYIY8IRS' where id=3; -update noar tt set b1='1CEJNNX2IR7BV' where id=3; -update noar ti set b1='1CEJNNX2IR7BV' where id=3; -update noar tt set v0='34GERYM7URA7S5PF0Z3OQ122446V0' where id=3; -update noar ti set v0='34GERYM7URA7S5PF0Z3OQ122446V0' where id=3; -update noar tt set b2='6T22' where id=3; -update noar ti set b2='6T22' where id=3; -update noar tt set v0='0S2W9LCYJKTAGCQE4JMS3Q4' where id=4; -update noar ti set v0='0S2W9LCYJKTAGCQE4JMS3Q4' where id=4; -update noar tt set b0='4O8X7BZ3HSN2D97C58FMC41I5DL2Z73B' where id=4; -update noar ti set b0='4O8X7BZ3HSN2D97C58FMC41I5DL2Z73B' where id=4; -update noar tt set v0='WZLJBWT0DUJOHEIYKI19FIANLZEL' where id=4; -update noar ti set v0='WZLJBWT0DUJOHEIYKI19FIANLZEL' where id=4; -update noar tt set b1='BTQZ4VSKD5BB5VY8Y71SX' where id=4; -update noar ti set b1='BTQZ4VSKD5BB5VY8Y71SX' where id=4; -update noar tt set v0='006HJG6KAK5I0D1YEY5XLS1J9K2U7K' where id=4; -update noar ti set v0='006HJG6KAK5I0D1YEY5XLS1J9K2U7K' where id=4; -update noar tt set b2='H1H8JCHNR0U2X275YCXOAQ6AGCK39' where id=4; -update noar ti set b2='H1H8JCHNR0U2X275YCXOAQ6AGCK39' where id=4; -update noar tt set v0='GOP2IOEVXA13W6OAO0Y0O8AVI0P' where id=5; -update noar ti set v0='GOP2IOEVXA13W6OAO0Y0O8AVI0P' where id=5; -update noar tt set b0='LLB3DPHB' where id=5; -update noar ti set b0='LLB3DPHB' where id=5; -update noar tt set v0='FUEAOGMQQASZ0H62' where id=5; -update noar ti set v0='FUEAOGMQQASZ0H62' where id=5; -update noar tt set b1='47KCT0' where id=5; -update noar ti set b1='47KCT0' where id=5; -update noar tt set v0='F' where id=5; -update noar ti set v0='F' where id=5; -update noar tt set b2='USWXXMRSL4WM09S' where id=5; -update noar ti set b2='USWXXMRSL4WM09S' where id=5; -update noar tt set v0='XGA2' where id=6; -update noar ti set v0='XGA2' where id=6; -update noar tt set b0='CXLYUT6XP86UQD' where id=6; -update noar ti set b0='CXLYUT6XP86UQD' where id=6; -update noar tt set v0='EZPO76IXA5EWPR' where id=6; -update noar ti set v0='EZPO76IXA5EWPR' where id=6; -update noar tt set b1='HR1R6X5G28' where id=6; -update noar ti set b1='HR1R6X5G28' where id=6; -update noar tt set v0='85M2Q3Q7NJ0W' where id=6; -update noar ti set v0='85M2Q3Q7NJ0W' where id=6; -update noar tt set b2='UFT4JO6DZKMI8T95HP0TFA' where id=6; -update noar ti set b2='UFT4JO6DZKMI8T95HP0TFA' where id=6; -update noar tt set v0='8ZOP5XVK2NUE29TF7MCJ' where id=7; -update noar ti set v0='8ZOP5XVK2NUE29TF7MCJ' where id=7; -update noar tt set b0='FLF4XLQARQC418NXL' where id=7; -update noar ti set b0='FLF4XLQARQC418NXL' where id=7; -update noar tt set v0='XG0451Q9TG6SOO5V2' where id=7; -update noar ti set v0='XG0451Q9TG6SOO5V2' where id=7; -update noar tt set b1='Y3030NJP3SIFAXX3MNJUUPWCT' where id=7; -update noar ti set b1='Y3030NJP3SIFAXX3MNJUUPWCT' where id=7; -update noar tt set v0='HLWUPQ4KPPTRRFXGXYU6' where id=7; -update noar ti set v0='HLWUPQ4KPPTRRFXGXYU6' where id=7; -update noar tt set b2='TN12L3Z50P3WOTRJ39G8SQGFQ3F0RJWB' where id=7; -update noar ti set b2='TN12L3Z50P3WOTRJ39G8SQGFQ3F0RJWB' where id=7; -update noar tt set v0='7ZN5S' where id=8; -update noar ti set v0='7ZN5S' where id=8; -update noar tt set b0='AI02OF' where id=8; -update noar ti set b0='AI02OF' where id=8; -update noar tt set v0='IV2O71UNNLXEUFD2GS5VM82' where id=8; -update noar ti set v0='IV2O71UNNLXEUFD2GS5VM82' where id=8; -update noar tt set b1='OLPH4T4CR8B' where id=8; -update noar ti set b1='OLPH4T4CR8B' where id=8; -update noar tt set v0='8ZJO671AE0SR850F3H7X' where id=8; -update noar ti set v0='8ZJO671AE0SR850F3H7X' where id=8; -update noar tt set b2='IXV8Z79' where id=8; -update noar ti set b2='IXV8Z79' where id=8; -update noar tt set v0='TPISPCSM75XLQ5GE75X' where id=9; -update noar ti set v0='TPISPCSM75XLQ5GE75X' where id=9; -update noar tt set b0='4OGY4C4AL' where id=9; -update noar ti set b0='4OGY4C4AL' where id=9; -update noar tt set v0='JFBQJODX7F7RY0OCRTMXRLPG25O6815' where id=9; -update noar ti set v0='JFBQJODX7F7RY0OCRTMXRLPG25O6815' where id=9; -update noar tt set b1='GZSA0UZGV2PBFRRKV6116Y90Z3Q1W' where id=9; -update noar ti set b1='GZSA0UZGV2PBFRRKV6116Y90Z3Q1W' where id=9; -update noar tt set v0='AB7HT2DTGYSUYWRVUBMLN' where id=9; -update noar ti set v0='AB7HT2DTGYSUYWRVUBMLN' where id=9; -update noar tt set b2='TKD8M35DT' where id=9; -update noar ti set b2='TKD8M35DT' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 mediumblob null, -b1 longblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='HL6X65Q8MWKC01' where id=1; -update noar ti set v0='HL6X65Q8MWKC01' where id=1; -update noar tt set b0='QIF7Y4TCS9HAJNLIRM1H9U9EOZ4WN0H' where id=1; -update noar ti set b0='QIF7Y4TCS9HAJNLIRM1H9U9EOZ4WN0H' where id=1; -update noar tt set v0='UN1D2PEQKVKFVT' where id=1; -update noar ti set v0='UN1D2PEQKVKFVT' where id=1; -update noar tt set b1='F9FG66TVH1R6SD57' where id=1; -update noar ti set b1='F9FG66TVH1R6SD57' where id=1; -update noar tt set v0='N6HJHC86S2TUANP1GQNDOX95' where id=1; -update noar ti set v0='N6HJHC86S2TUANP1GQNDOX95' where id=1; -update noar tt set b2='2ZMVL7S1BCVS0K9KAMYGRSO' where id=1; -update noar ti set b2='2ZMVL7S1BCVS0K9KAMYGRSO' where id=1; -update noar tt set v0='93NJ997KQOK0O1N20ZDLHAWL2X60BZGD' where id=2; -update noar ti set v0='93NJ997KQOK0O1N20ZDLHAWL2X60BZGD' where id=2; -update noar tt set b0='P06B8NT660THG2C48M5T2YEK8NJBZ' where id=2; -update noar ti set b0='P06B8NT660THG2C48M5T2YEK8NJBZ' where id=2; -update noar tt set v0='VPK5TRC9CR6W6W9KONU23ZHCR' where id=2; -update noar ti set v0='VPK5TRC9CR6W6W9KONU23ZHCR' where id=2; -update noar tt set b1='PIFGCEU5D2WVWYTS' where id=2; -update noar ti set b1='PIFGCEU5D2WVWYTS' where id=2; -update noar tt set v0='AH090T1NN6QJA' where id=2; -update noar ti set v0='AH090T1NN6QJA' where id=2; -update noar tt set b2='KH8VKK08YLF9SZZE' where id=2; -update noar ti set b2='KH8VKK08YLF9SZZE' where id=2; -update noar tt set v0='NUFISPR718CXL36K01QR2E' where id=3; -update noar ti set v0='NUFISPR718CXL36K01QR2E' where id=3; -update noar tt set b0='CMOEN' where id=3; -update noar ti set b0='CMOEN' where id=3; -update noar tt set v0='QHT5O8PJZXQ2Y4P5W0W' where id=3; -update noar ti set v0='QHT5O8PJZXQ2Y4P5W0W' where id=3; -update noar tt set b1='XDNBYZG47OWS4RQ4JDSYIVMMFO' where id=3; -update noar ti set b1='XDNBYZG47OWS4RQ4JDSYIVMMFO' where id=3; -update noar tt set v0='6QA2R430FYJVX2Q0F2WOMLKU' where id=3; -update noar ti set v0='6QA2R430FYJVX2Q0F2WOMLKU' where id=3; -update noar tt set b2='E0BYPZPA410BKF80WVMMNJQ' where id=3; -update noar ti set b2='E0BYPZPA410BKF80WVMMNJQ' where id=3; -update noar tt set v0='HKEB8U1JPX10XPBX' where id=4; -update noar ti set v0='HKEB8U1JPX10XPBX' where id=4; -update noar tt set b0='0UX1GQBFWAJF9CF95V3D64OKFXPX8' where id=4; -update noar ti set b0='0UX1GQBFWAJF9CF95V3D64OKFXPX8' where id=4; -update noar tt set v0='EKRQUHR6OZRJB0U7E9' where id=4; -update noar ti set v0='EKRQUHR6OZRJB0U7E9' where id=4; -update noar tt set b1='FQPG4O8NED7ZWPFR8R58GQDEHOR4E' where id=4; -update noar ti set b1='FQPG4O8NED7ZWPFR8R58GQDEHOR4E' where id=4; -update noar tt set v0='IXRT3GZ7G66DID5U52BDYUJ1VY3H' where id=4; -update noar ti set v0='IXRT3GZ7G66DID5U52BDYUJ1VY3H' where id=4; -update noar tt set b2='80HWYLXFNG9607NOU3LB9MXA5' where id=4; -update noar ti set b2='80HWYLXFNG9607NOU3LB9MXA5' where id=4; -update noar tt set v0='6HFGFL1TJUX0' where id=5; -update noar ti set v0='6HFGFL1TJUX0' where id=5; -update noar tt set b0='B12D0JCF4K1YEQBA5WN82S8LG0C' where id=5; -update noar ti set b0='B12D0JCF4K1YEQBA5WN82S8LG0C' where id=5; -update noar tt set v0='JHYMC6XM1RND9QBW1YJX6ST6IAVZJW' where id=5; -update noar ti set v0='JHYMC6XM1RND9QBW1YJX6ST6IAVZJW' where id=5; -update noar tt set b1='VTQ1QU' where id=5; -update noar ti set b1='VTQ1QU' where id=5; -update noar tt set v0='635UBV8GAGK9HSU86GWO56IRM0U3Q' where id=5; -update noar ti set v0='635UBV8GAGK9HSU86GWO56IRM0U3Q' where id=5; -update noar tt set b2='0K' where id=5; -update noar ti set b2='0K' where id=5; -update noar tt set v0='FU3Y7X5ES8UAFGSTG49WUK9GELEI' where id=6; -update noar ti set v0='FU3Y7X5ES8UAFGSTG49WUK9GELEI' where id=6; -update noar tt set b0='W2XZ74MD769OWJZ8WRQ35AB8U16JL' where id=6; -update noar ti set b0='W2XZ74MD769OWJZ8WRQ35AB8U16JL' where id=6; -update noar tt set v0='X04MKKS1H6UTHC3SCDGK8UZCXGOU' where id=6; -update noar ti set v0='X04MKKS1H6UTHC3SCDGK8UZCXGOU' where id=6; -update noar tt set b1='5Z8NQLPF0BG75HG5X9O8W82CUC42XYM' where id=6; -update noar ti set b1='5Z8NQLPF0BG75HG5X9O8W82CUC42XYM' where id=6; -update noar tt set v0='K88PEOOTJRS2FKHCP3A87R' where id=6; -update noar ti set v0='K88PEOOTJRS2FKHCP3A87R' where id=6; -update noar tt set b2='YC9CFD' where id=6; -update noar ti set b2='YC9CFD' where id=6; -update noar tt set v0='GDXON6P' where id=7; -update noar ti set v0='GDXON6P' where id=7; -update noar tt set b0='GY6F89HPAZZ1BQ4IY5XU8GAYVL8UDT5' where id=7; -update noar ti set b0='GY6F89HPAZZ1BQ4IY5XU8GAYVL8UDT5' where id=7; -update noar tt set v0='KXUCUE9KFOF27M0B6YFLUN36DH5C6BRB' where id=7; -update noar ti set v0='KXUCUE9KFOF27M0B6YFLUN36DH5C6BRB' where id=7; -update noar tt set b1='8X8B3YNGA35OQ4389GHAWF7Q8' where id=7; -update noar ti set b1='8X8B3YNGA35OQ4389GHAWF7Q8' where id=7; -update noar tt set v0='C2WRU00MGLWUR8BDVY984G39BZH1ZR' where id=7; -update noar ti set v0='C2WRU00MGLWUR8BDVY984G39BZH1ZR' where id=7; -update noar tt set b2='PVZ4AKJ353UB64VE3OSDYPQ3KT8QV' where id=7; -update noar ti set b2='PVZ4AKJ353UB64VE3OSDYPQ3KT8QV' where id=7; -update noar tt set v0='SNR9FVT0Y4P5' where id=8; -update noar ti set v0='SNR9FVT0Y4P5' where id=8; -update noar tt set b0='2DYBASI0QWSF' where id=8; -update noar ti set b0='2DYBASI0QWSF' where id=8; -update noar tt set v0='TPBK10P51C' where id=8; -update noar ti set v0='TPBK10P51C' where id=8; -update noar tt set b1='LNDR52KIKO' where id=8; -update noar ti set b1='LNDR52KIKO' where id=8; -update noar tt set v0='62ZAK0A5AQRO6D1HU948H11IR9L0' where id=8; -update noar ti set v0='62ZAK0A5AQRO6D1HU948H11IR9L0' where id=8; -update noar tt set b2='FGIAKLOB7IW4O2FVAA5' where id=8; -update noar ti set b2='FGIAKLOB7IW4O2FVAA5' where id=8; -update noar tt set v0='B4' where id=9; -update noar ti set v0='B4' where id=9; -update noar tt set b0='QYPEPO8Q6EI' where id=9; -update noar ti set b0='QYPEPO8Q6EI' where id=9; -update noar tt set v0='8YGCDOB6RDZ51P7PJ' where id=9; -update noar ti set v0='8YGCDOB6RDZ51P7PJ' where id=9; -update noar tt set b1='NEBZTEUWFI' where id=9; -update noar ti set b1='NEBZTEUWFI' where id=9; -update noar tt set v0='2TUNBPN' where id=9; -update noar ti set v0='2TUNBPN' where id=9; -update noar tt set b2='8PV615PLHISK770CB4' where id=9; -update noar ti set b2='8PV615PLHISK770CB4' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 mediumblob not null, -b1 longblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='UP8EUHCYNQW2QQ' where id=1; -update noar ti set v0='UP8EUHCYNQW2QQ' where id=1; -update noar tt set b0='NS9DV' where id=1; -update noar ti set b0='NS9DV' where id=1; -update noar tt set v0='FT2W4T90Y2AOM3Q0Q6KSLXR2' where id=1; -update noar ti set v0='FT2W4T90Y2AOM3Q0Q6KSLXR2' where id=1; -update noar tt set b1='V1CK5H92V93W1KZLY6PWVNSAL14M2I' where id=1; -update noar ti set b1='V1CK5H92V93W1KZLY6PWVNSAL14M2I' where id=1; -update noar tt set v0='XFIZ2HYZSYJYAS0F' where id=1; -update noar ti set v0='XFIZ2HYZSYJYAS0F' where id=1; -update noar tt set b2='MXF72G1QK99R' where id=1; -update noar ti set b2='MXF72G1QK99R' where id=1; -update noar tt set v0='STEBGQH1RQ8C5N1IP9C03' where id=2; -update noar ti set v0='STEBGQH1RQ8C5N1IP9C03' where id=2; -update noar tt set b0='SW0PKDH16OSWHSXOGDI0' where id=2; -update noar ti set b0='SW0PKDH16OSWHSXOGDI0' where id=2; -update noar tt set v0='3F5VJZEDF68' where id=2; -update noar ti set v0='3F5VJZEDF68' where id=2; -update noar tt set b1='CU8OL2KG' where id=2; -update noar ti set b1='CU8OL2KG' where id=2; -update noar tt set v0='L3NWK3TOG7QK9F7ZII9PSECJA1T' where id=2; -update noar ti set v0='L3NWK3TOG7QK9F7ZII9PSECJA1T' where id=2; -update noar tt set b2='YIVKR1LF28FECBNQD0' where id=2; -update noar ti set b2='YIVKR1LF28FECBNQD0' where id=2; -update noar tt set v0='7V4ER' where id=3; -update noar ti set v0='7V4ER' where id=3; -update noar tt set b0='JIGR0F2BTT3Y2RG8320' where id=3; -update noar ti set b0='JIGR0F2BTT3Y2RG8320' where id=3; -update noar tt set v0='PABTE86OA32BMMM' where id=3; -update noar ti set v0='PABTE86OA32BMMM' where id=3; -update noar tt set b1='13S2MP40EV0H0CHAQYU64NBEE' where id=3; -update noar ti set b1='13S2MP40EV0H0CHAQYU64NBEE' where id=3; -update noar tt set v0='LV' where id=3; -update noar ti set v0='LV' where id=3; -update noar tt set b2='WQBU1L11HJYBABJNIWBR8I2BAZTAF' where id=3; -update noar ti set b2='WQBU1L11HJYBABJNIWBR8I2BAZTAF' where id=3; -update noar tt set v0='7I' where id=4; -update noar ti set v0='7I' where id=4; -update noar tt set b0='Z' where id=4; -update noar ti set b0='Z' where id=4; -update noar tt set v0='IDY9XZE5P08EON0MXW1W54' where id=4; -update noar ti set v0='IDY9XZE5P08EON0MXW1W54' where id=4; -update noar tt set b1='E36C050AKNVQE2JHULQEVD4I8' where id=4; -update noar ti set b1='E36C050AKNVQE2JHULQEVD4I8' where id=4; -update noar tt set v0='K1F8CGDB603UCUQ' where id=4; -update noar ti set v0='K1F8CGDB603UCUQ' where id=4; -update noar tt set b2='C9AZGNR42TJ7RAWZOJPV869T' where id=4; -update noar ti set b2='C9AZGNR42TJ7RAWZOJPV869T' where id=4; -update noar tt set v0='AWDXCF' where id=5; -update noar ti set v0='AWDXCF' where id=5; -update noar tt set b0='JPVJIQYQMSN7SE10GFL7QY3SXIN76GE1' where id=5; -update noar ti set b0='JPVJIQYQMSN7SE10GFL7QY3SXIN76GE1' where id=5; -update noar tt set v0='VK2EK4L9S' where id=5; -update noar ti set v0='VK2EK4L9S' where id=5; -update noar tt set b1='W7QUW4IG0UEZR5WC' where id=5; -update noar ti set b1='W7QUW4IG0UEZR5WC' where id=5; -update noar tt set v0='FSXTN4YVUW' where id=5; -update noar ti set v0='FSXTN4YVUW' where id=5; -update noar tt set b2='H' where id=5; -update noar ti set b2='H' where id=5; -update noar tt set v0='E6OSJ04WE7A9FNYDR1AIAY' where id=6; -update noar ti set v0='E6OSJ04WE7A9FNYDR1AIAY' where id=6; -update noar tt set b0='H2IO' where id=6; -update noar ti set b0='H2IO' where id=6; -update noar tt set v0='I3N7DAYDEQ5G6QWE8L33TY77588LFZ' where id=6; -update noar ti set v0='I3N7DAYDEQ5G6QWE8L33TY77588LFZ' where id=6; -update noar tt set b1='FLHZ1U0N0CKEKGARXUBB86IOTQV4SUY' where id=6; -update noar ti set b1='FLHZ1U0N0CKEKGARXUBB86IOTQV4SUY' where id=6; -update noar tt set v0='EKMSWA13UQYHCEUBZ33IQD9QN' where id=6; -update noar ti set v0='EKMSWA13UQYHCEUBZ33IQD9QN' where id=6; -update noar tt set b2='HH82LP' where id=6; -update noar ti set b2='HH82LP' where id=6; -update noar tt set v0='ZQOXCC8AO3Z1XG3MH4MWFJU9AQV195' where id=7; -update noar ti set v0='ZQOXCC8AO3Z1XG3MH4MWFJU9AQV195' where id=7; -update noar tt set b0='TMPEJVA589A7L9KPDDIO' where id=7; -update noar ti set b0='TMPEJVA589A7L9KPDDIO' where id=7; -update noar tt set v0='MWN053JH6WESLL43MQCO5Y79' where id=7; -update noar ti set v0='MWN053JH6WESLL43MQCO5Y79' where id=7; -update noar tt set b1='VO7FN' where id=7; -update noar ti set b1='VO7FN' where id=7; -update noar tt set v0='6XA7H8MZ2Y2IYU273770LTPEO' where id=7; -update noar ti set v0='6XA7H8MZ2Y2IYU273770LTPEO' where id=7; -update noar tt set b2='TDOAX0JYJ7SPYTZD703FFMIZRZ' where id=7; -update noar ti set b2='TDOAX0JYJ7SPYTZD703FFMIZRZ' where id=7; -update noar tt set v0='13BMKR3K3' where id=8; -update noar ti set v0='13BMKR3K3' where id=8; -update noar tt set b0='GUY2PPNARATT9FC7J7RG8BN8PQDZ2W' where id=8; -update noar ti set b0='GUY2PPNARATT9FC7J7RG8BN8PQDZ2W' where id=8; -update noar tt set v0='7KTKO3YH0Z73GZUWDCI' where id=8; -update noar ti set v0='7KTKO3YH0Z73GZUWDCI' where id=8; -update noar tt set b1='L2MB68QRGTK2YIB' where id=8; -update noar ti set b1='L2MB68QRGTK2YIB' where id=8; -update noar tt set v0='R' where id=8; -update noar ti set v0='R' where id=8; -update noar tt set b2='OLUWE5NMPGARAHC9W7UGJWKSW0' where id=8; -update noar ti set b2='OLUWE5NMPGARAHC9W7UGJWKSW0' where id=8; -update noar tt set v0='4J6R9SFFK2JLSR57XOZZC1M5D5LLNW37' where id=9; -update noar ti set v0='4J6R9SFFK2JLSR57XOZZC1M5D5LLNW37' where id=9; -update noar tt set b0='XU19W07I9ZIT2LBCX' where id=9; -update noar ti set b0='XU19W07I9ZIT2LBCX' where id=9; -update noar tt set v0='5UDERDQVLB' where id=9; -update noar ti set v0='5UDERDQVLB' where id=9; -update noar tt set b1='LHYA95WGSUFQTKO2Y4JUQ8B' where id=9; -update noar ti set b1='LHYA95WGSUFQTKO2Y4JUQ8B' where id=9; -update noar tt set v0='WUXLJKIMXT758FZQ9XAJLHHK8BHY' where id=9; -update noar ti set v0='WUXLJKIMXT758FZQ9XAJLHHK8BHY' where id=9; -update noar tt set b2='S3XY8TTBZOJDEQ65ZIRXTA7DXYX' where id=9; -update noar ti set b2='S3XY8TTBZOJDEQ65ZIRXTA7DXYX' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 mediumblob not null, -b1 longblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='2ILZ' where id=1; -update noar ti set v0='2ILZ' where id=1; -update noar tt set b0='EC2DB40PJPXYCM' where id=1; -update noar ti set b0='EC2DB40PJPXYCM' where id=1; -update noar tt set v0='Q56QK20ZVFFTYIRHT3HRO5LHXX2A' where id=1; -update noar ti set v0='Q56QK20ZVFFTYIRHT3HRO5LHXX2A' where id=1; -update noar tt set b1='35Y4YJ7Q6APBMA3Y6' where id=1; -update noar ti set b1='35Y4YJ7Q6APBMA3Y6' where id=1; -update noar tt set v0='EZ2RY65IWA2AX0DIT0W7UVO1U7FKGDJO' where id=1; -update noar ti set v0='EZ2RY65IWA2AX0DIT0W7UVO1U7FKGDJO' where id=1; -update noar tt set b2='7H' where id=1; -update noar ti set b2='7H' where id=1; -update noar tt set v0='0RAW4EE86K22E5HST5EE7G8' where id=2; -update noar ti set v0='0RAW4EE86K22E5HST5EE7G8' where id=2; -update noar tt set b0='UO49FZ0A16ZILH790RTWQQPK' where id=2; -update noar ti set b0='UO49FZ0A16ZILH790RTWQQPK' where id=2; -update noar tt set v0='JKU23TO8EYKZ' where id=2; -update noar ti set v0='JKU23TO8EYKZ' where id=2; -update noar tt set b1='2H1DMWZSW' where id=2; -update noar ti set b1='2H1DMWZSW' where id=2; -update noar tt set v0='RRMYN3PW74FL7GHYAFZXNEOT' where id=2; -update noar ti set v0='RRMYN3PW74FL7GHYAFZXNEOT' where id=2; -update noar tt set b2='W3NOD0QR75HDT8H3RU7K4T5J6A34O6D' where id=2; -update noar ti set b2='W3NOD0QR75HDT8H3RU7K4T5J6A34O6D' where id=2; -update noar tt set v0='3GJWTO5Z' where id=3; -update noar ti set v0='3GJWTO5Z' where id=3; -update noar tt set b0='CN8QL0OXPCMDXNDRNH' where id=3; -update noar ti set b0='CN8QL0OXPCMDXNDRNH' where id=3; -update noar tt set v0='I5897KCNWE' where id=3; -update noar ti set v0='I5897KCNWE' where id=3; -update noar tt set b1='L8TG6653YGZXH' where id=3; -update noar ti set b1='L8TG6653YGZXH' where id=3; -update noar tt set v0='DSSIQV5QU' where id=3; -update noar ti set v0='DSSIQV5QU' where id=3; -update noar tt set b2='WZG4ZDR140F652LJADP' where id=3; -update noar ti set b2='WZG4ZDR140F652LJADP' where id=3; -update noar tt set v0='DE1JB' where id=4; -update noar ti set v0='DE1JB' where id=4; -update noar tt set b0='TMFQH787LU6MCMUFKCXW3K3U9AX8HC' where id=4; -update noar ti set b0='TMFQH787LU6MCMUFKCXW3K3U9AX8HC' where id=4; -update noar tt set v0='W5BI4AVIQV' where id=4; -update noar ti set v0='W5BI4AVIQV' where id=4; -update noar tt set b1='5T1PGF2CAEU799SHQ' where id=4; -update noar ti set b1='5T1PGF2CAEU799SHQ' where id=4; -update noar tt set v0='E18INA41CSOVI6X0YES' where id=4; -update noar ti set v0='E18INA41CSOVI6X0YES' where id=4; -update noar tt set b2='S1SDYU28WMEB' where id=4; -update noar ti set b2='S1SDYU28WMEB' where id=4; -update noar tt set v0='5FMBX4JJH7BDXXTY' where id=5; -update noar ti set v0='5FMBX4JJH7BDXXTY' where id=5; -update noar tt set b0='U21SWD95UC5D6WK' where id=5; -update noar ti set b0='U21SWD95UC5D6WK' where id=5; -update noar tt set v0='KOA4YF0DIORPY9PH' where id=5; -update noar ti set v0='KOA4YF0DIORPY9PH' where id=5; -update noar tt set b1='G4ZDF1H8W8JKE947F55CDJJSIW' where id=5; -update noar ti set b1='G4ZDF1H8W8JKE947F55CDJJSIW' where id=5; -update noar tt set v0='IA7VJO92RM5PR' where id=5; -update noar ti set v0='IA7VJO92RM5PR' where id=5; -update noar tt set b2='51HGLPS16LBXFZZEJJNAVF6SGQA7ZLB' where id=5; -update noar ti set b2='51HGLPS16LBXFZZEJJNAVF6SGQA7ZLB' where id=5; -update noar tt set v0='OWGPFRKXO85CT3YUE8WC4WN87JOFJ6G1' where id=6; -update noar ti set v0='OWGPFRKXO85CT3YUE8WC4WN87JOFJ6G1' where id=6; -update noar tt set b0='EP6TG4WLY63QOLPXRP4V4OOU2' where id=6; -update noar ti set b0='EP6TG4WLY63QOLPXRP4V4OOU2' where id=6; -update noar tt set v0='E3PFBB4JE8JJ0XW' where id=6; -update noar ti set v0='E3PFBB4JE8JJ0XW' where id=6; -update noar tt set b1='SUBZ6CDLFTS2GM4A753VA' where id=6; -update noar ti set b1='SUBZ6CDLFTS2GM4A753VA' where id=6; -update noar tt set v0='G1XWSSEZGGS0SLY1BISMJ' where id=6; -update noar ti set v0='G1XWSSEZGGS0SLY1BISMJ' where id=6; -update noar tt set b2='UA1FLG0XFXP69QUM' where id=6; -update noar ti set b2='UA1FLG0XFXP69QUM' where id=6; -update noar tt set v0='CD6VOUA0SYMEZ' where id=7; -update noar ti set v0='CD6VOUA0SYMEZ' where id=7; -update noar tt set b0='MGJ2H5AF3MRLD94' where id=7; -update noar ti set b0='MGJ2H5AF3MRLD94' where id=7; -update noar tt set v0='MHUKEY22WIM1U3AM9VP9D4ZU9MAL0O' where id=7; -update noar ti set v0='MHUKEY22WIM1U3AM9VP9D4ZU9MAL0O' where id=7; -update noar tt set b1='Q' where id=7; -update noar ti set b1='Q' where id=7; -update noar tt set v0='RSRFRYHC3NQ23YY1T9Y54' where id=7; -update noar ti set v0='RSRFRYHC3NQ23YY1T9Y54' where id=7; -update noar tt set b2='29UIT2ODNFU0F3IJFJ1Z2K3CTKVYMEM1' where id=7; -update noar ti set b2='29UIT2ODNFU0F3IJFJ1Z2K3CTKVYMEM1' where id=7; -update noar tt set v0='SOR8KWP4L8R00Q7Z3H72AO2' where id=8; -update noar ti set v0='SOR8KWP4L8R00Q7Z3H72AO2' where id=8; -update noar tt set b0='LHAMU6Q0JNQ18EIEOL0MZ8E5' where id=8; -update noar ti set b0='LHAMU6Q0JNQ18EIEOL0MZ8E5' where id=8; -update noar tt set v0='J8Q36JWZULIGIMDEFL0CGJHCMA' where id=8; -update noar ti set v0='J8Q36JWZULIGIMDEFL0CGJHCMA' where id=8; -update noar tt set b1='MLO7AU04JXN8BW4094EVGA25YRQA' where id=8; -update noar ti set b1='MLO7AU04JXN8BW4094EVGA25YRQA' where id=8; -update noar tt set v0='NB' where id=8; -update noar ti set v0='NB' where id=8; -update noar tt set b2='1JLDKBEEYE3L' where id=8; -update noar ti set b2='1JLDKBEEYE3L' where id=8; -update noar tt set v0='TS89N' where id=9; -update noar ti set v0='TS89N' where id=9; -update noar tt set b0='P0VGLFCBH4FW92DZS6H6YZ35M' where id=9; -update noar ti set b0='P0VGLFCBH4FW92DZS6H6YZ35M' where id=9; -update noar tt set v0='H9WMGS' where id=9; -update noar ti set v0='H9WMGS' where id=9; -update noar tt set b1='4GWF7K' where id=9; -update noar ti set b1='4GWF7K' where id=9; -update noar tt set v0='YP8DUVFOGGBWO6P7G12I7TXXT' where id=9; -update noar ti set v0='YP8DUVFOGGBWO6P7G12I7TXXT' where id=9; -update noar tt set b2='YUDEX6B1NMV8GS0QEWDNC' where id=9; -update noar ti set b2='YUDEX6B1NMV8GS0QEWDNC' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 mediumblob null, -b1 longblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='AW2OD3GD' where id=1; -update noar ti set v0='AW2OD3GD' where id=1; -update noar tt set b0='LD362B0PY4GL3FP1N2K1ZQO' where id=1; -update noar ti set b0='LD362B0PY4GL3FP1N2K1ZQO' where id=1; -update noar tt set v0='NJUSK' where id=1; -update noar ti set v0='NJUSK' where id=1; -update noar tt set b1='F' where id=1; -update noar ti set b1='F' where id=1; -update noar tt set v0='BJJ9M6P7QKBIQVRWX4HZ2DOBN85CYUX' where id=1; -update noar ti set v0='BJJ9M6P7QKBIQVRWX4HZ2DOBN85CYUX' where id=1; -update noar tt set b2='TYHABQSNJ1K22M09URS41D' where id=1; -update noar ti set b2='TYHABQSNJ1K22M09URS41D' where id=1; -update noar tt set v0='QRK51RMVEC75W2VLPKO8BEAJ2F5Y' where id=2; -update noar ti set v0='QRK51RMVEC75W2VLPKO8BEAJ2F5Y' where id=2; -update noar tt set b0='JPET4IBA84O284OPWW7T' where id=2; -update noar ti set b0='JPET4IBA84O284OPWW7T' where id=2; -update noar tt set v0='XNEREF12QCG6OABO8JDTC39' where id=2; -update noar ti set v0='XNEREF12QCG6OABO8JDTC39' where id=2; -update noar tt set b1='XP1G1POT0LU1PH460E3YCX00KEL2ZYGH' where id=2; -update noar ti set b1='XP1G1POT0LU1PH460E3YCX00KEL2ZYGH' where id=2; -update noar tt set v0='2ECYTOWRO36RH5J2' where id=2; -update noar ti set v0='2ECYTOWRO36RH5J2' where id=2; -update noar tt set b2='28E5SE' where id=2; -update noar ti set b2='28E5SE' where id=2; -update noar tt set v0='14272XVETGR3VA1Z0V3A4PFJRU' where id=3; -update noar ti set v0='14272XVETGR3VA1Z0V3A4PFJRU' where id=3; -update noar tt set b0='31ZJQR5435MQL6KOUNUVGDFFK' where id=3; -update noar ti set b0='31ZJQR5435MQL6KOUNUVGDFFK' where id=3; -update noar tt set v0='WTF4054OEH982JDO00' where id=3; -update noar ti set v0='WTF4054OEH982JDO00' where id=3; -update noar tt set b1='ZSG682327IWQ64PEDQ19' where id=3; -update noar ti set b1='ZSG682327IWQ64PEDQ19' where id=3; -update noar tt set v0='ET2' where id=3; -update noar ti set v0='ET2' where id=3; -update noar tt set b2='BZ5OA' where id=3; -update noar ti set b2='BZ5OA' where id=3; -update noar tt set v0='BZK47' where id=4; -update noar ti set v0='BZK47' where id=4; -update noar tt set b0='VIS0F5Q2M7J' where id=4; -update noar ti set b0='VIS0F5Q2M7J' where id=4; -update noar tt set v0='6GN9JDJUGUJ1RMBA3JI' where id=4; -update noar ti set v0='6GN9JDJUGUJ1RMBA3JI' where id=4; -update noar tt set b1='7KCYUNPOAXVLDI7G8O6QKH' where id=4; -update noar ti set b1='7KCYUNPOAXVLDI7G8O6QKH' where id=4; -update noar tt set v0='N3' where id=4; -update noar ti set v0='N3' where id=4; -update noar tt set b2='FGJIZ58FVIY30WQSE5R5AW' where id=4; -update noar ti set b2='FGJIZ58FVIY30WQSE5R5AW' where id=4; -update noar tt set v0='RLE8P7' where id=5; -update noar ti set v0='RLE8P7' where id=5; -update noar tt set b0='2DCN2T9BYR0PC7QPQP56S' where id=5; -update noar ti set b0='2DCN2T9BYR0PC7QPQP56S' where id=5; -update noar tt set v0='KIMLSNBFAOASH5BEYNF0AN7XYV' where id=5; -update noar ti set v0='KIMLSNBFAOASH5BEYNF0AN7XYV' where id=5; -update noar tt set b1='LGR3R859K5XVPBNXI' where id=5; -update noar ti set b1='LGR3R859K5XVPBNXI' where id=5; -update noar tt set v0='DDK3QTDLKYSBUJ45O6BBWNNHI9J' where id=5; -update noar ti set v0='DDK3QTDLKYSBUJ45O6BBWNNHI9J' where id=5; -update noar tt set b2='0J313M5XGSZ5JGO3FWKGCR8' where id=5; -update noar ti set b2='0J313M5XGSZ5JGO3FWKGCR8' where id=5; -update noar tt set v0='QKHEY31TBVXX9GGTQ' where id=6; -update noar ti set v0='QKHEY31TBVXX9GGTQ' where id=6; -update noar tt set b0='GCA3TNF' where id=6; -update noar ti set b0='GCA3TNF' where id=6; -update noar tt set v0='6R75YFUCHPV6S0ZKO6WZKT5' where id=6; -update noar ti set v0='6R75YFUCHPV6S0ZKO6WZKT5' where id=6; -update noar tt set b1='H8P5MLQ2GMF3EI73W8BOXR0Z5QMMD7' where id=6; -update noar ti set b1='H8P5MLQ2GMF3EI73W8BOXR0Z5QMMD7' where id=6; -update noar tt set v0='5FPFN6VW5EIE9JGM' where id=6; -update noar ti set v0='5FPFN6VW5EIE9JGM' where id=6; -update noar tt set b2='WD2JX194' where id=6; -update noar ti set b2='WD2JX194' where id=6; -update noar tt set v0='IS1XT4LLD46FC5M80QNUE49BR' where id=7; -update noar ti set v0='IS1XT4LLD46FC5M80QNUE49BR' where id=7; -update noar tt set b0='CZI3' where id=7; -update noar ti set b0='CZI3' where id=7; -update noar tt set v0='3XQ0679P67887H8' where id=7; -update noar ti set v0='3XQ0679P67887H8' where id=7; -update noar tt set b1='QLV' where id=7; -update noar ti set b1='QLV' where id=7; -update noar tt set v0='6WMIUUJHCR1' where id=7; -update noar ti set v0='6WMIUUJHCR1' where id=7; -update noar tt set b2='IM9NUCDA' where id=7; -update noar ti set b2='IM9NUCDA' where id=7; -update noar tt set v0='OM9' where id=8; -update noar ti set v0='OM9' where id=8; -update noar tt set b0='4TAL4BXY0L1SNT00MA1E' where id=8; -update noar ti set b0='4TAL4BXY0L1SNT00MA1E' where id=8; -update noar tt set v0='Y09B0WO5XG66YFI9XV48JZ' where id=8; -update noar ti set v0='Y09B0WO5XG66YFI9XV48JZ' where id=8; -update noar tt set b1='6CVSMPHFRZUTYYPK1GVFYVRGASMF9' where id=8; -update noar ti set b1='6CVSMPHFRZUTYYPK1GVFYVRGASMF9' where id=8; -update noar tt set v0='YKHKWB8KAUQUB' where id=8; -update noar ti set v0='YKHKWB8KAUQUB' where id=8; -update noar tt set b2='CXSVD0YIDHDCCG5VYWK847F6' where id=8; -update noar ti set b2='CXSVD0YIDHDCCG5VYWK847F6' where id=8; -update noar tt set v0='STWZ8EFG' where id=9; -update noar ti set v0='STWZ8EFG' where id=9; -update noar tt set b0='L5FN0Q3HRTD2' where id=9; -update noar ti set b0='L5FN0Q3HRTD2' where id=9; -update noar tt set v0='BRXONH' where id=9; -update noar ti set v0='BRXONH' where id=9; -update noar tt set b1='ZXN9DJBZQLCZ20ZN7' where id=9; -update noar ti set b1='ZXN9DJBZQLCZ20ZN7' where id=9; -update noar tt set v0='VI2ACASVXBNGE8GPBK6OU2WXK' where id=9; -update noar ti set v0='VI2ACASVXBNGE8GPBK6OU2WXK' where id=9; -update noar tt set b2='LMPC2ETNA' where id=9; -update noar ti set b2='LMPC2ETNA' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 mediumblob null, -b1 longblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='GFVBAQREW06YKPH3ZKO5QGNSXJHJHYP' where id=1; -update noar ti set v0='GFVBAQREW06YKPH3ZKO5QGNSXJHJHYP' where id=1; -update noar tt set b0='IM68GEOZJYF4IWM2Q1AJX1JDS3' where id=1; -update noar ti set b0='IM68GEOZJYF4IWM2Q1AJX1JDS3' where id=1; -update noar tt set v0='797K4URFJYTU4AKXX4T8ZIMBTTREKMEN' where id=1; -update noar ti set v0='797K4URFJYTU4AKXX4T8ZIMBTTREKMEN' where id=1; -update noar tt set b1='TQKGOJ' where id=1; -update noar ti set b1='TQKGOJ' where id=1; -update noar tt set v0='F1YPQRFBIKU527B4C4OTMQ151RZDL4GX' where id=1; -update noar ti set v0='F1YPQRFBIKU527B4C4OTMQ151RZDL4GX' where id=1; -update noar tt set b2='LS6IXQ5IVE31Z52K2JEZU7' where id=1; -update noar ti set b2='LS6IXQ5IVE31Z52K2JEZU7' where id=1; -update noar tt set v0='J4UOLAMN6B8XYNHFQCM6L' where id=2; -update noar ti set v0='J4UOLAMN6B8XYNHFQCM6L' where id=2; -update noar tt set b0='L65GIWZORKTMQVP' where id=2; -update noar ti set b0='L65GIWZORKTMQVP' where id=2; -update noar tt set v0='Q4B93LVPSFJ0' where id=2; -update noar ti set v0='Q4B93LVPSFJ0' where id=2; -update noar tt set b1='BDTLPEH6HZG5T33HEPG' where id=2; -update noar ti set b1='BDTLPEH6HZG5T33HEPG' where id=2; -update noar tt set v0='MZXCDT6' where id=2; -update noar ti set v0='MZXCDT6' where id=2; -update noar tt set b2='NF9RRLPHRE27SPVIVYO1QYM1GQX2C' where id=2; -update noar ti set b2='NF9RRLPHRE27SPVIVYO1QYM1GQX2C' where id=2; -update noar tt set v0='J4BU1W7REMUKXRZL8HNQMQPX' where id=3; -update noar ti set v0='J4BU1W7REMUKXRZL8HNQMQPX' where id=3; -update noar tt set b0='XYOQF1BGUALE93SPMPA3V2M6FD3HVQJ' where id=3; -update noar ti set b0='XYOQF1BGUALE93SPMPA3V2M6FD3HVQJ' where id=3; -update noar tt set v0='KM2CEA871P1NO6H47' where id=3; -update noar ti set v0='KM2CEA871P1NO6H47' where id=3; -update noar tt set b1='94S7HOXCPBEUV5VYF25Z' where id=3; -update noar ti set b1='94S7HOXCPBEUV5VYF25Z' where id=3; -update noar tt set v0='K5B' where id=3; -update noar ti set v0='K5B' where id=3; -update noar tt set b2='03TL80UC7J75ZV8QW655MXCPHD18WQ' where id=3; -update noar ti set b2='03TL80UC7J75ZV8QW655MXCPHD18WQ' where id=3; -update noar tt set v0='8NPRY9QZ5AS8KELE8C' where id=4; -update noar ti set v0='8NPRY9QZ5AS8KELE8C' where id=4; -update noar tt set b0='45J3TDDBV7CNO387HGRGGJC2IS8' where id=4; -update noar ti set b0='45J3TDDBV7CNO387HGRGGJC2IS8' where id=4; -update noar tt set v0='1X9O' where id=4; -update noar ti set v0='1X9O' where id=4; -update noar tt set b1='748TTPZYZO7W4WTIJ' where id=4; -update noar ti set b1='748TTPZYZO7W4WTIJ' where id=4; -update noar tt set v0='EGVA4ZBNYAB2P5F2T' where id=4; -update noar ti set v0='EGVA4ZBNYAB2P5F2T' where id=4; -update noar tt set b2='CM5JF' where id=4; -update noar ti set b2='CM5JF' where id=4; -update noar tt set v0='NA4F40ROMV9RJ90X33RRR9GOMSB79G' where id=5; -update noar ti set v0='NA4F40ROMV9RJ90X33RRR9GOMSB79G' where id=5; -update noar tt set b0='R8XA2S55BRHOYJ5F63O' where id=5; -update noar ti set b0='R8XA2S55BRHOYJ5F63O' where id=5; -update noar tt set v0='BFSK1QVY8QS6P520515' where id=5; -update noar ti set v0='BFSK1QVY8QS6P520515' where id=5; -update noar tt set b1='V82EP3EY21TF0GYJEDJB6TK777V468L' where id=5; -update noar ti set b1='V82EP3EY21TF0GYJEDJB6TK777V468L' where id=5; -update noar tt set v0='ZSKLP21' where id=5; -update noar ti set v0='ZSKLP21' where id=5; -update noar tt set b2='6MRX5I3WNEKK' where id=5; -update noar ti set b2='6MRX5I3WNEKK' where id=5; -update noar tt set v0='EELYQHJUMOXFSOWIACVIX1M98DYLT4' where id=6; -update noar ti set v0='EELYQHJUMOXFSOWIACVIX1M98DYLT4' where id=6; -update noar tt set b0='Y9ZJPJ0QXQ31IN7BRHC7B65MFS' where id=6; -update noar ti set b0='Y9ZJPJ0QXQ31IN7BRHC7B65MFS' where id=6; -update noar tt set v0='82L' where id=6; -update noar ti set v0='82L' where id=6; -update noar tt set b1='6JYV5JRCFFPFK41WR6Q' where id=6; -update noar ti set b1='6JYV5JRCFFPFK41WR6Q' where id=6; -update noar tt set v0='L' where id=6; -update noar ti set v0='L' where id=6; -update noar tt set b2='D8QQ' where id=6; -update noar ti set b2='D8QQ' where id=6; -update noar tt set v0='80H89' where id=7; -update noar ti set v0='80H89' where id=7; -update noar tt set b0='TAFW7RE4REC3LNPX18C0QY' where id=7; -update noar ti set b0='TAFW7RE4REC3LNPX18C0QY' where id=7; -update noar tt set v0='KAGU' where id=7; -update noar ti set v0='KAGU' where id=7; -update noar tt set b1='LZNXX0959H5ED8QHDU6UXQT1WA' where id=7; -update noar ti set b1='LZNXX0959H5ED8QHDU6UXQT1WA' where id=7; -update noar tt set v0='WUU4MI2ET0RZQB' where id=7; -update noar ti set v0='WUU4MI2ET0RZQB' where id=7; -update noar tt set b2='AGK3XHZEBS5' where id=7; -update noar ti set b2='AGK3XHZEBS5' where id=7; -update noar tt set v0='ECA81L0Z58ANQVR63KHKES49ZL6EWW' where id=8; -update noar ti set v0='ECA81L0Z58ANQVR63KHKES49ZL6EWW' where id=8; -update noar tt set b0='JB495VPK' where id=8; -update noar ti set b0='JB495VPK' where id=8; -update noar tt set v0='MFO2' where id=8; -update noar ti set v0='MFO2' where id=8; -update noar tt set b1='MJREI2BSLULVL' where id=8; -update noar ti set b1='MJREI2BSLULVL' where id=8; -update noar tt set v0='Y0SS5UUUT53SJQFDZJI3659BR3K' where id=8; -update noar ti set v0='Y0SS5UUUT53SJQFDZJI3659BR3K' where id=8; -update noar tt set b2='RD' where id=8; -update noar ti set b2='RD' where id=8; -update noar tt set v0='T4DMD5CDZWUAY3Y36' where id=9; -update noar ti set v0='T4DMD5CDZWUAY3Y36' where id=9; -update noar tt set b0='48' where id=9; -update noar ti set b0='48' where id=9; -update noar tt set v0='K' where id=9; -update noar ti set v0='K' where id=9; -update noar tt set b1='9SEYLX2KGLOGJZNXX' where id=9; -update noar ti set b1='9SEYLX2KGLOGJZNXX' where id=9; -update noar tt set v0='VSCF' where id=9; -update noar ti set v0='VSCF' where id=9; -update noar tt set b2='VQBHMDLD0T2XHVBJD5' where id=9; -update noar ti set b2='VQBHMDLD0T2XHVBJD5' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 mediumblob not null, -b1 longblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='G' where id=1; -update noar ti set v0='G' where id=1; -update noar tt set b0='VAND2VIP5YLB0PPBZ961VVVF' where id=1; -update noar ti set b0='VAND2VIP5YLB0PPBZ961VVVF' where id=1; -update noar tt set v0='PXMUZSAL35EG5NDGO4' where id=1; -update noar ti set v0='PXMUZSAL35EG5NDGO4' where id=1; -update noar tt set b1='DFM4ER0JQ6NN05XRDBR22H' where id=1; -update noar ti set b1='DFM4ER0JQ6NN05XRDBR22H' where id=1; -update noar tt set v0='DXY' where id=1; -update noar ti set v0='DXY' where id=1; -update noar tt set b2='NS8EHGK3BXBM61FU0HXMG13KWA8936' where id=1; -update noar ti set b2='NS8EHGK3BXBM61FU0HXMG13KWA8936' where id=1; -update noar tt set v0='P72602TGNU' where id=2; -update noar ti set v0='P72602TGNU' where id=2; -update noar tt set b0='P5UHFRNRTJ2SCVWTU' where id=2; -update noar ti set b0='P5UHFRNRTJ2SCVWTU' where id=2; -update noar tt set v0='90EQCZY01DS063Y8RPGEFFPRKB' where id=2; -update noar ti set v0='90EQCZY01DS063Y8RPGEFFPRKB' where id=2; -update noar tt set b1='B9KN3OVZNDVQDR98KAHQGUOA6HRR' where id=2; -update noar ti set b1='B9KN3OVZNDVQDR98KAHQGUOA6HRR' where id=2; -update noar tt set v0='9NIGMQ30WMDMLKJWEKBNIOQ9R8GQH' where id=2; -update noar ti set v0='9NIGMQ30WMDMLKJWEKBNIOQ9R8GQH' where id=2; -update noar tt set b2='2RY63T41FRDOGB1MJ4MNWF7QW6O4VNMU' where id=2; -update noar ti set b2='2RY63T41FRDOGB1MJ4MNWF7QW6O4VNMU' where id=2; -update noar tt set v0='VOBZ9E5HN5PLDZ8WTSGRZ4F' where id=3; -update noar ti set v0='VOBZ9E5HN5PLDZ8WTSGRZ4F' where id=3; -update noar tt set b0='BMFSDJUT2OWQKFG894IAFGPFSY' where id=3; -update noar ti set b0='BMFSDJUT2OWQKFG894IAFGPFSY' where id=3; -update noar tt set v0='NZKF22IJSEM325QAECDAZRMDXFNBDM' where id=3; -update noar ti set v0='NZKF22IJSEM325QAECDAZRMDXFNBDM' where id=3; -update noar tt set b1='1HLTX77QNRUI2FJ3T6F9' where id=3; -update noar ti set b1='1HLTX77QNRUI2FJ3T6F9' where id=3; -update noar tt set v0='FGCMAVX0BW5UJHW73QTZJEPO4' where id=3; -update noar ti set v0='FGCMAVX0BW5UJHW73QTZJEPO4' where id=3; -update noar tt set b2='A6ANELT5R4SOTNQM8D12OJ4K7XTH6' where id=3; -update noar ti set b2='A6ANELT5R4SOTNQM8D12OJ4K7XTH6' where id=3; -update noar tt set v0='IV7U64WM8BJNU' where id=4; -update noar ti set v0='IV7U64WM8BJNU' where id=4; -update noar tt set b0='7NHBKRGA3J9HZGGA98J2KFY' where id=4; -update noar ti set b0='7NHBKRGA3J9HZGGA98J2KFY' where id=4; -update noar tt set v0='KQA778' where id=4; -update noar ti set v0='KQA778' where id=4; -update noar tt set b1='BKCZPSWKTIRJI6H5GH39I3ZFE79L' where id=4; -update noar ti set b1='BKCZPSWKTIRJI6H5GH39I3ZFE79L' where id=4; -update noar tt set v0='09P40844DPQ4AD7YHW5R5W0YA' where id=4; -update noar ti set v0='09P40844DPQ4AD7YHW5R5W0YA' where id=4; -update noar tt set b2='PFTMK7OJ' where id=4; -update noar ti set b2='PFTMK7OJ' where id=4; -update noar tt set v0='B7OCE' where id=5; -update noar ti set v0='B7OCE' where id=5; -update noar tt set b0='P4K6WO9ZGIYWXTALZ4K3WXQ4A8ZBZH' where id=5; -update noar ti set b0='P4K6WO9ZGIYWXTALZ4K3WXQ4A8ZBZH' where id=5; -update noar tt set v0='9J7TEROHHPY99BUCBVLC6LF4PHLRPCRT' where id=5; -update noar ti set v0='9J7TEROHHPY99BUCBVLC6LF4PHLRPCRT' where id=5; -update noar tt set b1='ZR36ZBK86UEEWJI7FSAA59TBE1' where id=5; -update noar ti set b1='ZR36ZBK86UEEWJI7FSAA59TBE1' where id=5; -update noar tt set v0='VCHB' where id=5; -update noar ti set v0='VCHB' where id=5; -update noar tt set b2='VOCE69FAPUN2XOAI96GU5' where id=5; -update noar ti set b2='VOCE69FAPUN2XOAI96GU5' where id=5; -update noar tt set v0='Z' where id=6; -update noar ti set v0='Z' where id=6; -update noar tt set b0='M3Y04D0V12UE20SV1Q9NUU5IPQIVZGBZ' where id=6; -update noar ti set b0='M3Y04D0V12UE20SV1Q9NUU5IPQIVZGBZ' where id=6; -update noar tt set v0='1IJW3F9O7MHN2LN3' where id=6; -update noar ti set v0='1IJW3F9O7MHN2LN3' where id=6; -update noar tt set b1='BEVM5ASK74UL5P8DLYE' where id=6; -update noar ti set b1='BEVM5ASK74UL5P8DLYE' where id=6; -update noar tt set v0='JPGKTZ6S1OZQ3R05G' where id=6; -update noar ti set v0='JPGKTZ6S1OZQ3R05G' where id=6; -update noar tt set b2='8JTQZ7V0OW4GHOMMAWB0QA2JQC383' where id=6; -update noar ti set b2='8JTQZ7V0OW4GHOMMAWB0QA2JQC383' where id=6; -update noar tt set v0='8Q4X8FTS4317' where id=7; -update noar ti set v0='8Q4X8FTS4317' where id=7; -update noar tt set b0='P0762NB0AZO6GTTBXCZ434FM8FG' where id=7; -update noar ti set b0='P0762NB0AZO6GTTBXCZ434FM8FG' where id=7; -update noar tt set v0='DV3' where id=7; -update noar ti set v0='DV3' where id=7; -update noar tt set b1='T0CE' where id=7; -update noar ti set b1='T0CE' where id=7; -update noar tt set v0='QLVY' where id=7; -update noar ti set v0='QLVY' where id=7; -update noar tt set b2='OMEKF' where id=7; -update noar ti set b2='OMEKF' where id=7; -update noar tt set v0='RXWO' where id=8; -update noar ti set v0='RXWO' where id=8; -update noar tt set b0='7Q7SY0D4W3C0TZDGTI5BEJD5' where id=8; -update noar ti set b0='7Q7SY0D4W3C0TZDGTI5BEJD5' where id=8; -update noar tt set v0='JM0D9VG8XLDTN3MSGE6LU' where id=8; -update noar ti set v0='JM0D9VG8XLDTN3MSGE6LU' where id=8; -update noar tt set b1='1XRWW45Q00BAT1FULKP0N' where id=8; -update noar ti set b1='1XRWW45Q00BAT1FULKP0N' where id=8; -update noar tt set v0='G1L5UPGBQWZ4QUR71H6YCH60TWW8OZHB' where id=8; -update noar ti set v0='G1L5UPGBQWZ4QUR71H6YCH60TWW8OZHB' where id=8; -update noar tt set b2='V9OJRMLCDW46D6T5R5LN4FPNURE7TF' where id=8; -update noar ti set b2='V9OJRMLCDW46D6T5R5LN4FPNURE7TF' where id=8; -update noar tt set v0='UEGT03NKE1Q302ZXJ2' where id=9; -update noar ti set v0='UEGT03NKE1Q302ZXJ2' where id=9; -update noar tt set b0='WHK6THY43PBQKOACBT' where id=9; -update noar ti set b0='WHK6THY43PBQKOACBT' where id=9; -update noar tt set v0='MJIHUP814XARHFL2OPZKS' where id=9; -update noar ti set v0='MJIHUP814XARHFL2OPZKS' where id=9; -update noar tt set b1='9ACLHM8MVAZC6CTRXV5GKXQ5DN1' where id=9; -update noar ti set b1='9ACLHM8MVAZC6CTRXV5GKXQ5DN1' where id=9; -update noar tt set v0='GQIQ0WY' where id=9; -update noar ti set v0='GQIQ0WY' where id=9; -update noar tt set b2='O7LJT0NABGE5' where id=9; -update noar ti set b2='O7LJT0NABGE5' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 mediumblob not null, -b1 longblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='790RTHC395T6VUA57FX1' where id=1; -update noar ti set v0='790RTHC395T6VUA57FX1' where id=1; -update noar tt set b0='HT628UM42HKNJOBM8YTODY' where id=1; -update noar ti set b0='HT628UM42HKNJOBM8YTODY' where id=1; -update noar tt set v0='52BJ4RVTILA05AUIWWOI707PPPGXM8E' where id=1; -update noar ti set v0='52BJ4RVTILA05AUIWWOI707PPPGXM8E' where id=1; -update noar tt set b1='ONW43OQTL1ODGYH6NBMX' where id=1; -update noar ti set b1='ONW43OQTL1ODGYH6NBMX' where id=1; -update noar tt set v0='LSME4LOU7T4NEFE373VQ55QS' where id=1; -update noar ti set v0='LSME4LOU7T4NEFE373VQ55QS' where id=1; -update noar tt set b2='PN5OM45LA1B8SWRBSHHY6SSI1WSV' where id=1; -update noar ti set b2='PN5OM45LA1B8SWRBSHHY6SSI1WSV' where id=1; -update noar tt set v0='WD' where id=2; -update noar ti set v0='WD' where id=2; -update noar tt set b0='AHX43TEQLHKL1Y7I94A9NAT3T' where id=2; -update noar ti set b0='AHX43TEQLHKL1Y7I94A9NAT3T' where id=2; -update noar tt set v0='L' where id=2; -update noar ti set v0='L' where id=2; -update noar tt set b1='5P7P0XQ7AQ3O' where id=2; -update noar ti set b1='5P7P0XQ7AQ3O' where id=2; -update noar tt set v0='RRA7C2OARDA9XFOEIV' where id=2; -update noar ti set v0='RRA7C2OARDA9XFOEIV' where id=2; -update noar tt set b2='8A4MJ72YHJZ0DHTTJEZ54T912B2P1Z' where id=2; -update noar ti set b2='8A4MJ72YHJZ0DHTTJEZ54T912B2P1Z' where id=2; -update noar tt set v0='01BRERG9FB6N' where id=3; -update noar ti set v0='01BRERG9FB6N' where id=3; -update noar tt set b0='N5' where id=3; -update noar ti set b0='N5' where id=3; -update noar tt set v0='5FV6ZVV9UPI2H4AT9DYDYX82UYJG28K' where id=3; -update noar ti set v0='5FV6ZVV9UPI2H4AT9DYDYX82UYJG28K' where id=3; -update noar tt set b1='KSSUDN39VU' where id=3; -update noar ti set b1='KSSUDN39VU' where id=3; -update noar tt set v0='YFM9TM02KM964YMTYJPPIATLBJWNZ' where id=3; -update noar ti set v0='YFM9TM02KM964YMTYJPPIATLBJWNZ' where id=3; -update noar tt set b2='VXAM0CPF8JY' where id=3; -update noar ti set b2='VXAM0CPF8JY' where id=3; -update noar tt set v0='M' where id=4; -update noar ti set v0='M' where id=4; -update noar tt set b0='E4TNNL7ZTSTDVBIHRCP' where id=4; -update noar ti set b0='E4TNNL7ZTSTDVBIHRCP' where id=4; -update noar tt set v0='4URQ7XB0CREBIDGMU2TPRN24L1YC' where id=4; -update noar ti set v0='4URQ7XB0CREBIDGMU2TPRN24L1YC' where id=4; -update noar tt set b1='XAY2VSX5YVF2M4OK28WNFYG5Z' where id=4; -update noar ti set b1='XAY2VSX5YVF2M4OK28WNFYG5Z' where id=4; -update noar tt set v0='VAURJFSFL63LKHASC0QBSEF7Z0Z8FRG5' where id=4; -update noar ti set v0='VAURJFSFL63LKHASC0QBSEF7Z0Z8FRG5' where id=4; -update noar tt set b2='5BH9HH30AFAZUCVG2ZV0HIQQ1HWN' where id=4; -update noar ti set b2='5BH9HH30AFAZUCVG2ZV0HIQQ1HWN' where id=4; -update noar tt set v0='MN58Y59CF8ZPOA3ZNB6YPSSNF' where id=5; -update noar ti set v0='MN58Y59CF8ZPOA3ZNB6YPSSNF' where id=5; -update noar tt set b0='FAWEUNRX98QGODB' where id=5; -update noar ti set b0='FAWEUNRX98QGODB' where id=5; -update noar tt set v0='G2BEWGS0S476SC02MLAWZSKM67F' where id=5; -update noar ti set v0='G2BEWGS0S476SC02MLAWZSKM67F' where id=5; -update noar tt set b1='JIMPQKSPSU6FDMHN' where id=5; -update noar ti set b1='JIMPQKSPSU6FDMHN' where id=5; -update noar tt set v0='90X8Z18QOII' where id=5; -update noar ti set v0='90X8Z18QOII' where id=5; -update noar tt set b2='E2TZZSWUGHHUB48M' where id=5; -update noar ti set b2='E2TZZSWUGHHUB48M' where id=5; -update noar tt set v0='1W8AR8VKNBWHJVYIPWUNQ6XSV' where id=6; -update noar ti set v0='1W8AR8VKNBWHJVYIPWUNQ6XSV' where id=6; -update noar tt set b0='40XRV7KKCK3YF' where id=6; -update noar ti set b0='40XRV7KKCK3YF' where id=6; -update noar tt set v0='MMLACYF12OLT7QJIGVLO7NN9T5DE' where id=6; -update noar ti set v0='MMLACYF12OLT7QJIGVLO7NN9T5DE' where id=6; -update noar tt set b1='2ATD8' where id=6; -update noar ti set b1='2ATD8' where id=6; -update noar tt set v0='ZQ29ELJKL8FMVFN25YDK7A7A' where id=6; -update noar ti set v0='ZQ29ELJKL8FMVFN25YDK7A7A' where id=6; -update noar tt set b2='7JPC' where id=6; -update noar ti set b2='7JPC' where id=6; -update noar tt set v0='TVZVG42OQXT7W1AAFVGVRA0PQ' where id=7; -update noar ti set v0='TVZVG42OQXT7W1AAFVGVRA0PQ' where id=7; -update noar tt set b0='VC7QWJKY2VA6T' where id=7; -update noar ti set b0='VC7QWJKY2VA6T' where id=7; -update noar tt set v0='ETZWG' where id=7; -update noar ti set v0='ETZWG' where id=7; -update noar tt set b1='YKR7SNOFV7LTHBBARW7QMTHQBOWLJAM4' where id=7; -update noar ti set b1='YKR7SNOFV7LTHBBARW7QMTHQBOWLJAM4' where id=7; -update noar tt set v0='30G4GSXJZ' where id=7; -update noar ti set v0='30G4GSXJZ' where id=7; -update noar tt set b2='ZHOVLIUX4GXYO4BB' where id=7; -update noar ti set b2='ZHOVLIUX4GXYO4BB' where id=7; -update noar tt set v0='KPW7CE5EZP93841EIWR9G' where id=8; -update noar ti set v0='KPW7CE5EZP93841EIWR9G' where id=8; -update noar tt set b0='LL0QMRWAA9PI3T2FPGCZIBFJ3' where id=8; -update noar ti set b0='LL0QMRWAA9PI3T2FPGCZIBFJ3' where id=8; -update noar tt set v0='J1H4HSGZGOW5YQ4AFFEFD3Y4Z3RG1' where id=8; -update noar ti set v0='J1H4HSGZGOW5YQ4AFFEFD3Y4Z3RG1' where id=8; -update noar tt set b1='3D6NSXOSNNFTUN17GPJDPTI39EEJ' where id=8; -update noar ti set b1='3D6NSXOSNNFTUN17GPJDPTI39EEJ' where id=8; -update noar tt set v0='9NO7XV' where id=8; -update noar ti set v0='9NO7XV' where id=8; -update noar tt set b2='UEMTSBBAAEL1T0RYNQJAD7KN5RAI1U' where id=8; -update noar ti set b2='UEMTSBBAAEL1T0RYNQJAD7KN5RAI1U' where id=8; -update noar tt set v0='XMAL5Y4J5I72Z' where id=9; -update noar ti set v0='XMAL5Y4J5I72Z' where id=9; -update noar tt set b0='5Y7LXA9QZPS01' where id=9; -update noar ti set b0='5Y7LXA9QZPS01' where id=9; -update noar tt set v0='4NGEHL5FCVD27B189OU3ELC' where id=9; -update noar ti set v0='4NGEHL5FCVD27B189OU3ELC' where id=9; -update noar tt set b1='UR3JIFC' where id=9; -update noar ti set b1='UR3JIFC' where id=9; -update noar tt set v0='1ICQGUUGU' where id=9; -update noar ti set v0='1ICQGUUGU' where id=9; -update noar tt set b2='53XKIDZT2CRFH38' where id=9; -update noar ti set b2='53XKIDZT2CRFH38' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 longblob null, -b1 tinyblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='NMSM29H6DK50HWHQISJ' where id=1; -update noar ti set v0='NMSM29H6DK50HWHQISJ' where id=1; -update noar tt set b0='9273AYFX0G9X3Z3CAWJXQ1OL6ARUXYLB' where id=1; -update noar ti set b0='9273AYFX0G9X3Z3CAWJXQ1OL6ARUXYLB' where id=1; -update noar tt set v0='UUU6F8RV7R9' where id=1; -update noar ti set v0='UUU6F8RV7R9' where id=1; -update noar tt set b1='DCM' where id=1; -update noar ti set b1='DCM' where id=1; -update noar tt set v0='JT' where id=1; -update noar ti set v0='JT' where id=1; -update noar tt set b2='PR8QLXBMQX106WM' where id=1; -update noar ti set b2='PR8QLXBMQX106WM' where id=1; -update noar tt set v0='BU0PMEXJ8G6QE5YWF0AAE' where id=2; -update noar ti set v0='BU0PMEXJ8G6QE5YWF0AAE' where id=2; -update noar tt set b0='TBW0SONU8T61JI8AK791KDTXQIN9230' where id=2; -update noar ti set b0='TBW0SONU8T61JI8AK791KDTXQIN9230' where id=2; -update noar tt set v0='DYORRDDP8G2NCYDUMV0IRB' where id=2; -update noar ti set v0='DYORRDDP8G2NCYDUMV0IRB' where id=2; -update noar tt set b1='O3CQMSMY' where id=2; -update noar ti set b1='O3CQMSMY' where id=2; -update noar tt set v0='21FILP' where id=2; -update noar ti set v0='21FILP' where id=2; -update noar tt set b2='R8HN' where id=2; -update noar ti set b2='R8HN' where id=2; -update noar tt set v0='B827Z2WU883Z7I' where id=3; -update noar ti set v0='B827Z2WU883Z7I' where id=3; -update noar tt set b0='UMSUPM8K60RN5ER0NKJIL0N06B' where id=3; -update noar ti set b0='UMSUPM8K60RN5ER0NKJIL0N06B' where id=3; -update noar tt set v0='XDADHODWEUY4G4Q0VL2SIBI7' where id=3; -update noar ti set v0='XDADHODWEUY4G4Q0VL2SIBI7' where id=3; -update noar tt set b1='15' where id=3; -update noar ti set b1='15' where id=3; -update noar tt set v0='TGCHUW4F' where id=3; -update noar ti set v0='TGCHUW4F' where id=3; -update noar tt set b2='RAX5FFKBU3KORZVHQBY' where id=3; -update noar ti set b2='RAX5FFKBU3KORZVHQBY' where id=3; -update noar tt set v0='UWNJM31LCHB4JCADLKRS6EFV' where id=4; -update noar ti set v0='UWNJM31LCHB4JCADLKRS6EFV' where id=4; -update noar tt set b0='2D51W3YI331FLFV' where id=4; -update noar ti set b0='2D51W3YI331FLFV' where id=4; -update noar tt set v0='RQ18XZVGTI8JWOH49H' where id=4; -update noar ti set v0='RQ18XZVGTI8JWOH49H' where id=4; -update noar tt set b1='BHGY2M500JY' where id=4; -update noar ti set b1='BHGY2M500JY' where id=4; -update noar tt set v0='EGPSP' where id=4; -update noar ti set v0='EGPSP' where id=4; -update noar tt set b2='20XCRZ14H6PS8C87MTLYV' where id=4; -update noar ti set b2='20XCRZ14H6PS8C87MTLYV' where id=4; -update noar tt set v0='3KYD4KKDFF6EDGNH2EOQSVN4X1A3' where id=5; -update noar ti set v0='3KYD4KKDFF6EDGNH2EOQSVN4X1A3' where id=5; -update noar tt set b0='3ZXORPJRSI0JYWL7' where id=5; -update noar ti set b0='3ZXORPJRSI0JYWL7' where id=5; -update noar tt set v0='5CBV7YFYESZ8092NS36' where id=5; -update noar ti set v0='5CBV7YFYESZ8092NS36' where id=5; -update noar tt set b1='KMQWEB8OND' where id=5; -update noar ti set b1='KMQWEB8OND' where id=5; -update noar tt set v0='DXFS86XHGCBOAWO28' where id=5; -update noar ti set v0='DXFS86XHGCBOAWO28' where id=5; -update noar tt set b2='3XIP7Z10' where id=5; -update noar ti set b2='3XIP7Z10' where id=5; -update noar tt set v0='F0' where id=6; -update noar ti set v0='F0' where id=6; -update noar tt set b0='6DUFB' where id=6; -update noar ti set b0='6DUFB' where id=6; -update noar tt set v0='83K3AJYJAIGQGJZQ9AEXLZ' where id=6; -update noar ti set v0='83K3AJYJAIGQGJZQ9AEXLZ' where id=6; -update noar tt set b1='ZZ' where id=6; -update noar ti set b1='ZZ' where id=6; -update noar tt set v0='UWHL5SFDGC3U8SY962W' where id=6; -update noar ti set v0='UWHL5SFDGC3U8SY962W' where id=6; -update noar tt set b2='LH46J49812YLMJOP6U4P8' where id=6; -update noar ti set b2='LH46J49812YLMJOP6U4P8' where id=6; -update noar tt set v0='ZPS8905B45PQ4XMJ9671' where id=7; -update noar ti set v0='ZPS8905B45PQ4XMJ9671' where id=7; -update noar tt set b0='F2BUSFY79M6FFF43N9C' where id=7; -update noar ti set b0='F2BUSFY79M6FFF43N9C' where id=7; -update noar tt set v0='KDG' where id=7; -update noar ti set v0='KDG' where id=7; -update noar tt set b1='2C950BVNFZH04Y' where id=7; -update noar ti set b1='2C950BVNFZH04Y' where id=7; -update noar tt set v0='EIV2G4FK' where id=7; -update noar ti set v0='EIV2G4FK' where id=7; -update noar tt set b2='O0TF19PKL7QACHFU9640C' where id=7; -update noar ti set b2='O0TF19PKL7QACHFU9640C' where id=7; -update noar tt set v0='E0SS7QM4J5JAL7KAQPRD0X6PLFF3TS6' where id=8; -update noar ti set v0='E0SS7QM4J5JAL7KAQPRD0X6PLFF3TS6' where id=8; -update noar tt set b0='E9K6EGGQNK0PI0B' where id=8; -update noar ti set b0='E9K6EGGQNK0PI0B' where id=8; -update noar tt set v0='IBZSN9Q7GNG7W1JMSGH4RBIAOVT76' where id=8; -update noar ti set v0='IBZSN9Q7GNG7W1JMSGH4RBIAOVT76' where id=8; -update noar tt set b1='Y1URGPYSED9WI0X7YZKAKK2' where id=8; -update noar ti set b1='Y1URGPYSED9WI0X7YZKAKK2' where id=8; -update noar tt set v0='L0RZESP8QO5YU4CT9DX5A3FTRBQMQ6IL' where id=8; -update noar ti set v0='L0RZESP8QO5YU4CT9DX5A3FTRBQMQ6IL' where id=8; -update noar tt set b2='W7YTTAHB8MZCMK57K7U9W1IWXTZV' where id=8; -update noar ti set b2='W7YTTAHB8MZCMK57K7U9W1IWXTZV' where id=8; -update noar tt set v0='NIDNR4DDEZJX8FX' where id=9; -update noar ti set v0='NIDNR4DDEZJX8FX' where id=9; -update noar tt set b0='K5M7UIX6X4AMVMYBA' where id=9; -update noar ti set b0='K5M7UIX6X4AMVMYBA' where id=9; -update noar tt set v0='JJ7KRBADHMYZZKG970SSYJVB4' where id=9; -update noar ti set v0='JJ7KRBADHMYZZKG970SSYJVB4' where id=9; -update noar tt set b1='WLCM4H0G8N6AEM38DXUE429FBY' where id=9; -update noar ti set b1='WLCM4H0G8N6AEM38DXUE429FBY' where id=9; -update noar tt set v0='PX0O3X2985S93SA5XT1Q86OAP4V' where id=9; -update noar ti set v0='PX0O3X2985S93SA5XT1Q86OAP4V' where id=9; -update noar tt set b2='JUIEMBZASHWHKHA' where id=9; -update noar ti set b2='JUIEMBZASHWHKHA' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 longblob null, -b1 tinyblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='X93JKKYLNZ1DJX0G662MC81P8' where id=1; -update noar ti set v0='X93JKKYLNZ1DJX0G662MC81P8' where id=1; -update noar tt set b0='70C8Q9' where id=1; -update noar ti set b0='70C8Q9' where id=1; -update noar tt set v0='2WEG3XPJI7H59VB9DOI3IERT' where id=1; -update noar ti set v0='2WEG3XPJI7H59VB9DOI3IERT' where id=1; -update noar tt set b1='ZK1R0YQN' where id=1; -update noar ti set b1='ZK1R0YQN' where id=1; -update noar tt set v0='138UKGR0RAEQ66C00RYE6HAK24YVCZA' where id=1; -update noar ti set v0='138UKGR0RAEQ66C00RYE6HAK24YVCZA' where id=1; -update noar tt set b2='1KDGDZAMW40942M384LW1NWC0OFPBYZR' where id=1; -update noar ti set b2='1KDGDZAMW40942M384LW1NWC0OFPBYZR' where id=1; -update noar tt set v0='0OZI' where id=2; -update noar ti set v0='0OZI' where id=2; -update noar tt set b0='U4SZ8HT04FMI9TDTNABW' where id=2; -update noar ti set b0='U4SZ8HT04FMI9TDTNABW' where id=2; -update noar tt set v0='7JPRGN4WG7QO2K92FI51PDOMOVK' where id=2; -update noar ti set v0='7JPRGN4WG7QO2K92FI51PDOMOVK' where id=2; -update noar tt set b1='VQO5EJHPNTSIHSQI6XCT2KHOIY0GM6XE' where id=2; -update noar ti set b1='VQO5EJHPNTSIHSQI6XCT2KHOIY0GM6XE' where id=2; -update noar tt set v0='5NE8DB' where id=2; -update noar ti set v0='5NE8DB' where id=2; -update noar tt set b2='9LCIF96V518YY9YJHOVTQZ6M' where id=2; -update noar ti set b2='9LCIF96V518YY9YJHOVTQZ6M' where id=2; -update noar tt set v0='T7XLD98FUQO4MR8N8S0DX4' where id=3; -update noar ti set v0='T7XLD98FUQO4MR8N8S0DX4' where id=3; -update noar tt set b0='KK1C12BDZZVDIDJ2G3' where id=3; -update noar ti set b0='KK1C12BDZZVDIDJ2G3' where id=3; -update noar tt set v0='WKT95IMCT2MEGNI5HU03V6RL8DZT' where id=3; -update noar ti set v0='WKT95IMCT2MEGNI5HU03V6RL8DZT' where id=3; -update noar tt set b1='BFE0VWLYNJVGC7UD10E1H0FYV3' where id=3; -update noar ti set b1='BFE0VWLYNJVGC7UD10E1H0FYV3' where id=3; -update noar tt set v0='H7F98OE9DKXDHDIGJ9M0RFANP65BBDGR' where id=3; -update noar ti set v0='H7F98OE9DKXDHDIGJ9M0RFANP65BBDGR' where id=3; -update noar tt set b2='O' where id=3; -update noar ti set b2='O' where id=3; -update noar tt set v0='1MTIRNG48V1T8XYURCNMV' where id=4; -update noar ti set v0='1MTIRNG48V1T8XYURCNMV' where id=4; -update noar tt set b0='IWS9L80PEDJLT11XCK00KIBM0J2DP' where id=4; -update noar ti set b0='IWS9L80PEDJLT11XCK00KIBM0J2DP' where id=4; -update noar tt set v0='C9P3BNL7' where id=4; -update noar ti set v0='C9P3BNL7' where id=4; -update noar tt set b1='6SSW4V' where id=4; -update noar ti set b1='6SSW4V' where id=4; -update noar tt set v0='XOHPQG1TR5B0LDG3EVSWUQPIBI' where id=4; -update noar ti set v0='XOHPQG1TR5B0LDG3EVSWUQPIBI' where id=4; -update noar tt set b2='W1HKDA0N02' where id=4; -update noar ti set b2='W1HKDA0N02' where id=4; -update noar tt set v0='9YE61SC45H4P2RVHD4QE4Z7F4X' where id=5; -update noar ti set v0='9YE61SC45H4P2RVHD4QE4Z7F4X' where id=5; -update noar tt set b0='LJGYR84YLV4YF1S8PUDRR38ZHBZB9O' where id=5; -update noar ti set b0='LJGYR84YLV4YF1S8PUDRR38ZHBZB9O' where id=5; -update noar tt set v0='AZF49VDJ22T4D5FWZ54FZ1H2MUW61US5' where id=5; -update noar ti set v0='AZF49VDJ22T4D5FWZ54FZ1H2MUW61US5' where id=5; -update noar tt set b1='25TCNQZGUOT1EO' where id=5; -update noar ti set b1='25TCNQZGUOT1EO' where id=5; -update noar tt set v0='K789U8YVKFK1ASMU6555XH2UTM2RSG8' where id=5; -update noar ti set v0='K789U8YVKFK1ASMU6555XH2UTM2RSG8' where id=5; -update noar tt set b2='56HBNVGEB5ELTVVBTVKCGHC' where id=5; -update noar ti set b2='56HBNVGEB5ELTVVBTVKCGHC' where id=5; -update noar tt set v0='QUMVG' where id=6; -update noar ti set v0='QUMVG' where id=6; -update noar tt set b0='PLWJR1I8HQ0S9H989S7ZV8VSA' where id=6; -update noar ti set b0='PLWJR1I8HQ0S9H989S7ZV8VSA' where id=6; -update noar tt set v0='E30JWNCI7' where id=6; -update noar ti set v0='E30JWNCI7' where id=6; -update noar tt set b1='V3R631N5HGSP' where id=6; -update noar ti set b1='V3R631N5HGSP' where id=6; -update noar tt set v0='G4UQTEBRLTS1YU6' where id=6; -update noar ti set v0='G4UQTEBRLTS1YU6' where id=6; -update noar tt set b2='Z1MVBHVOIN2V2BJBWOK3O6Z1I9' where id=6; -update noar ti set b2='Z1MVBHVOIN2V2BJBWOK3O6Z1I9' where id=6; -update noar tt set v0='WU7N3HDCILEXQ0G5DAGL1QN86W7Y' where id=7; -update noar ti set v0='WU7N3HDCILEXQ0G5DAGL1QN86W7Y' where id=7; -update noar tt set b0='1N1PCBWQF59IQR3I9KGBCV3B' where id=7; -update noar ti set b0='1N1PCBWQF59IQR3I9KGBCV3B' where id=7; -update noar tt set v0='Q' where id=7; -update noar ti set v0='Q' where id=7; -update noar tt set b1='181PN5GNN4HC8778WIM76JKLUS53HUS' where id=7; -update noar ti set b1='181PN5GNN4HC8778WIM76JKLUS53HUS' where id=7; -update noar tt set v0='T94NEFAUX4YM3AP29KOB8G' where id=7; -update noar ti set v0='T94NEFAUX4YM3AP29KOB8G' where id=7; -update noar tt set b2='4YG9NHJDFV7H76FEZSZ9E0BHCJT' where id=7; -update noar ti set b2='4YG9NHJDFV7H76FEZSZ9E0BHCJT' where id=7; -update noar tt set v0='MDQO' where id=8; -update noar ti set v0='MDQO' where id=8; -update noar tt set b0='PQHWPQ0P35JC34KVQ5N6VXYYM8J2' where id=8; -update noar ti set b0='PQHWPQ0P35JC34KVQ5N6VXYYM8J2' where id=8; -update noar tt set v0='LCKL0K9PBPGVCB8WU' where id=8; -update noar ti set v0='LCKL0K9PBPGVCB8WU' where id=8; -update noar tt set b1='0C47US0RL4' where id=8; -update noar ti set b1='0C47US0RL4' where id=8; -update noar tt set v0='M8UWSLBX7CD0LW4NW2RB' where id=8; -update noar ti set v0='M8UWSLBX7CD0LW4NW2RB' where id=8; -update noar tt set b2='5Z3H8QMP37GM' where id=8; -update noar ti set b2='5Z3H8QMP37GM' where id=8; -update noar tt set v0='GPWTR613HAU5Z2BRH51BRO' where id=9; -update noar ti set v0='GPWTR613HAU5Z2BRH51BRO' where id=9; -update noar tt set b0='LTGHC9O9IPBSBGT01P2F9' where id=9; -update noar ti set b0='LTGHC9O9IPBSBGT01P2F9' where id=9; -update noar tt set v0='YAWN' where id=9; -update noar ti set v0='YAWN' where id=9; -update noar tt set b1='B65HZ3NMYZYVMG9Z7XF' where id=9; -update noar ti set b1='B65HZ3NMYZYVMG9Z7XF' where id=9; -update noar tt set v0='G5VHN1U1PJJECTCRIQ3PNBV' where id=9; -update noar ti set v0='G5VHN1U1PJJECTCRIQ3PNBV' where id=9; -update noar tt set b2='0A134MBZTZVZRPV2R1Y085H' where id=9; -update noar ti set b2='0A134MBZTZVZRPV2R1Y085H' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 longblob not null, -b1 tinyblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='4JKHGYGKBS0G96RATZ38J' where id=1; -update noar ti set v0='4JKHGYGKBS0G96RATZ38J' where id=1; -update noar tt set b0='WX' where id=1; -update noar ti set b0='WX' where id=1; -update noar tt set v0='EVA9ZA0B073PP7WRNOSJVKHLO' where id=1; -update noar ti set v0='EVA9ZA0B073PP7WRNOSJVKHLO' where id=1; -update noar tt set b1='FV352N8SXI6Q9440H5M6' where id=1; -update noar ti set b1='FV352N8SXI6Q9440H5M6' where id=1; -update noar tt set v0='XQNZGSBUIWJUTR6ZNDV7XIBMFVVZQM5' where id=1; -update noar ti set v0='XQNZGSBUIWJUTR6ZNDV7XIBMFVVZQM5' where id=1; -update noar tt set b2='93NSXKNT76WP1AYJ' where id=1; -update noar ti set b2='93NSXKNT76WP1AYJ' where id=1; -update noar tt set v0='CGB2XFXIR' where id=2; -update noar ti set v0='CGB2XFXIR' where id=2; -update noar tt set b0='IHO327JYV794G0RQH7LA7URIBJWW' where id=2; -update noar ti set b0='IHO327JYV794G0RQH7LA7URIBJWW' where id=2; -update noar tt set v0='UMXMTB98EV60DRZ0JSB' where id=2; -update noar ti set v0='UMXMTB98EV60DRZ0JSB' where id=2; -update noar tt set b1='E9IFJ90331470' where id=2; -update noar ti set b1='E9IFJ90331470' where id=2; -update noar tt set v0='L7IWJAT086QZDQXPF6ECFVH5' where id=2; -update noar ti set v0='L7IWJAT086QZDQXPF6ECFVH5' where id=2; -update noar tt set b2='YQXL29Y5P5JA' where id=2; -update noar ti set b2='YQXL29Y5P5JA' where id=2; -update noar tt set v0='IF3' where id=3; -update noar ti set v0='IF3' where id=3; -update noar tt set b0='Z327MOBIH5UNGT9' where id=3; -update noar ti set b0='Z327MOBIH5UNGT9' where id=3; -update noar tt set v0='ZZEDB552VCCM7I6JM28' where id=3; -update noar ti set v0='ZZEDB552VCCM7I6JM28' where id=3; -update noar tt set b1='9' where id=3; -update noar ti set b1='9' where id=3; -update noar tt set v0='V4PT5595UDSE02CIC94GX4RZZO' where id=3; -update noar ti set v0='V4PT5595UDSE02CIC94GX4RZZO' where id=3; -update noar tt set b2='06NDBSIP6SZOTZ6LBEUP5415HVODSJF4' where id=3; -update noar ti set b2='06NDBSIP6SZOTZ6LBEUP5415HVODSJF4' where id=3; -update noar tt set v0='NPZ2GQHN' where id=4; -update noar ti set v0='NPZ2GQHN' where id=4; -update noar tt set b0='MYQKZXCZR26DP82VWJH0HO3N4GA' where id=4; -update noar ti set b0='MYQKZXCZR26DP82VWJH0HO3N4GA' where id=4; -update noar tt set v0='D5MGNN4Y' where id=4; -update noar ti set v0='D5MGNN4Y' where id=4; -update noar tt set b1='CJ3EQT8H5ZK92SYWQ3U27BS2CNV0I' where id=4; -update noar ti set b1='CJ3EQT8H5ZK92SYWQ3U27BS2CNV0I' where id=4; -update noar tt set v0='J016SR4A1DF2P8X8ZNDV' where id=4; -update noar ti set v0='J016SR4A1DF2P8X8ZNDV' where id=4; -update noar tt set b2='5IANI6G1NQKYF9I46T3' where id=4; -update noar ti set b2='5IANI6G1NQKYF9I46T3' where id=4; -update noar tt set v0='BCIWXNAWRS9M549UQTMSL7PIKXNZH' where id=5; -update noar ti set v0='BCIWXNAWRS9M549UQTMSL7PIKXNZH' where id=5; -update noar tt set b0='Z2ODG96SKB09KIFRJX' where id=5; -update noar ti set b0='Z2ODG96SKB09KIFRJX' where id=5; -update noar tt set v0='IS99EO6VJ66' where id=5; -update noar ti set v0='IS99EO6VJ66' where id=5; -update noar tt set b1='0JRF1RXMGBQMJY0QT6AUVIZ' where id=5; -update noar ti set b1='0JRF1RXMGBQMJY0QT6AUVIZ' where id=5; -update noar tt set v0='LM1FNI62ENHU7AZ865EGKT' where id=5; -update noar ti set v0='LM1FNI62ENHU7AZ865EGKT' where id=5; -update noar tt set b2='9ZT1' where id=5; -update noar ti set b2='9ZT1' where id=5; -update noar tt set v0='L7VFIOX704O6PM51UCBTGC5S8RIC' where id=6; -update noar ti set v0='L7VFIOX704O6PM51UCBTGC5S8RIC' where id=6; -update noar tt set b0='6G4OMQVW5X' where id=6; -update noar ti set b0='6G4OMQVW5X' where id=6; -update noar tt set v0='YZN34MDP466BG55X' where id=6; -update noar ti set v0='YZN34MDP466BG55X' where id=6; -update noar tt set b1='PM8K0Y155ONLXB2W2H9U53ZO' where id=6; -update noar ti set b1='PM8K0Y155ONLXB2W2H9U53ZO' where id=6; -update noar tt set v0='RQVJHLS739VTGG8590HXQ7KI40' where id=6; -update noar ti set v0='RQVJHLS739VTGG8590HXQ7KI40' where id=6; -update noar tt set b2='4' where id=6; -update noar ti set b2='4' where id=6; -update noar tt set v0='8O9' where id=7; -update noar ti set v0='8O9' where id=7; -update noar tt set b0='NFX58YYOUZQD66SJS37JC123LAV5R' where id=7; -update noar ti set b0='NFX58YYOUZQD66SJS37JC123LAV5R' where id=7; -update noar tt set v0='4TBUU' where id=7; -update noar ti set v0='4TBUU' where id=7; -update noar tt set b1='BLUDG' where id=7; -update noar ti set b1='BLUDG' where id=7; -update noar tt set v0='YA2UP7G1I2SS0IWBI1S8IN' where id=7; -update noar ti set v0='YA2UP7G1I2SS0IWBI1S8IN' where id=7; -update noar tt set b2='CJD3WB776' where id=7; -update noar ti set b2='CJD3WB776' where id=7; -update noar tt set v0='COUZVICO6LPT17D8ZSMMRYTXDMM7VFM' where id=8; -update noar ti set v0='COUZVICO6LPT17D8ZSMMRYTXDMM7VFM' where id=8; -update noar tt set b0='E' where id=8; -update noar ti set b0='E' where id=8; -update noar tt set v0='AT' where id=8; -update noar ti set v0='AT' where id=8; -update noar tt set b1='OW597CDINVP6O0' where id=8; -update noar ti set b1='OW597CDINVP6O0' where id=8; -update noar tt set v0='WRM7CFZOUWX4S00HTCOTT5OOAM' where id=8; -update noar ti set v0='WRM7CFZOUWX4S00HTCOTT5OOAM' where id=8; -update noar tt set b2='1WGQ8HBB4EDLR7J5BYQBZ' where id=8; -update noar ti set b2='1WGQ8HBB4EDLR7J5BYQBZ' where id=8; -update noar tt set v0='E7YO7' where id=9; -update noar ti set v0='E7YO7' where id=9; -update noar tt set b0='BAAQSW1W3QQYC' where id=9; -update noar ti set b0='BAAQSW1W3QQYC' where id=9; -update noar tt set v0='6IQDSGGOVZL2H3A5NMVNPECOQEHDNUR' where id=9; -update noar ti set v0='6IQDSGGOVZL2H3A5NMVNPECOQEHDNUR' where id=9; -update noar tt set b1='N3SIY0U25Q4IR4SYI74OJGS' where id=9; -update noar ti set b1='N3SIY0U25Q4IR4SYI74OJGS' where id=9; -update noar tt set v0='R2' where id=9; -update noar ti set v0='R2' where id=9; -update noar tt set b2='JBZC' where id=9; -update noar ti set b2='JBZC' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 longblob not null, -b1 tinyblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='6T57Z0MJ5HF28YRCCLEK4GC' where id=1; -update noar ti set v0='6T57Z0MJ5HF28YRCCLEK4GC' where id=1; -update noar tt set b0='2' where id=1; -update noar ti set b0='2' where id=1; -update noar tt set v0='SPZPC6T4ML6HA2W78HT' where id=1; -update noar ti set v0='SPZPC6T4ML6HA2W78HT' where id=1; -update noar tt set b1='8E5E0EH77USBWL' where id=1; -update noar ti set b1='8E5E0EH77USBWL' where id=1; -update noar tt set v0='JQEBFMBDE0YWEF83LRI97DS730TBH' where id=1; -update noar ti set v0='JQEBFMBDE0YWEF83LRI97DS730TBH' where id=1; -update noar tt set b2='WC' where id=1; -update noar ti set b2='WC' where id=1; -update noar tt set v0='VHYWOX66ZSZ2DCEFMTBNZSTON5EN0' where id=2; -update noar ti set v0='VHYWOX66ZSZ2DCEFMTBNZSTON5EN0' where id=2; -update noar tt set b0='R414V99Y3EWO1DF0Q6VBHCN0U8TBFH0' where id=2; -update noar ti set b0='R414V99Y3EWO1DF0Q6VBHCN0U8TBFH0' where id=2; -update noar tt set v0='UVNZL21Y67JQTEM6M' where id=2; -update noar ti set v0='UVNZL21Y67JQTEM6M' where id=2; -update noar tt set b1='8CP' where id=2; -update noar ti set b1='8CP' where id=2; -update noar tt set v0='OV1LLSZMEN2' where id=2; -update noar ti set v0='OV1LLSZMEN2' where id=2; -update noar tt set b2='Y' where id=2; -update noar ti set b2='Y' where id=2; -update noar tt set v0='MAD' where id=3; -update noar ti set v0='MAD' where id=3; -update noar tt set b0='4' where id=3; -update noar ti set b0='4' where id=3; -update noar tt set v0='NIG6QCNDBD' where id=3; -update noar ti set v0='NIG6QCNDBD' where id=3; -update noar tt set b1='NUS2MMOL' where id=3; -update noar ti set b1='NUS2MMOL' where id=3; -update noar tt set v0='FWI9485DIK9M7ULG' where id=3; -update noar ti set v0='FWI9485DIK9M7ULG' where id=3; -update noar tt set b2='PDNTVL3PG4QLZ0176TMLDS3M' where id=3; -update noar ti set b2='PDNTVL3PG4QLZ0176TMLDS3M' where id=3; -update noar tt set v0='GK3X5I89EI9IUHQB2L696TWY82UR0ZM' where id=4; -update noar ti set v0='GK3X5I89EI9IUHQB2L696TWY82UR0ZM' where id=4; -update noar tt set b0='94UEBT9MDZ34ILEQ9VDL4BI4YURIKY' where id=4; -update noar ti set b0='94UEBT9MDZ34ILEQ9VDL4BI4YURIKY' where id=4; -update noar tt set v0='9833Y62899920HA' where id=4; -update noar ti set v0='9833Y62899920HA' where id=4; -update noar tt set b1='7EUY4R3NGGIFVI2X4W1OIV4Y' where id=4; -update noar ti set b1='7EUY4R3NGGIFVI2X4W1OIV4Y' where id=4; -update noar tt set v0='BTH8YX7AOUOO0PQE4T1KNNWMKKSR' where id=4; -update noar ti set v0='BTH8YX7AOUOO0PQE4T1KNNWMKKSR' where id=4; -update noar tt set b2='7GQPWLKBNIRFAE1V9VXBIG39X0H24' where id=4; -update noar ti set b2='7GQPWLKBNIRFAE1V9VXBIG39X0H24' where id=4; -update noar tt set v0='F' where id=5; -update noar ti set v0='F' where id=5; -update noar tt set b0='B2' where id=5; -update noar ti set b0='B2' where id=5; -update noar tt set v0='H4KNIR7K2IDD1' where id=5; -update noar ti set v0='H4KNIR7K2IDD1' where id=5; -update noar tt set b1='QYMXMYPGIYX0I1P' where id=5; -update noar ti set b1='QYMXMYPGIYX0I1P' where id=5; -update noar tt set v0='8WF20H' where id=5; -update noar ti set v0='8WF20H' where id=5; -update noar tt set b2='OEN5' where id=5; -update noar ti set b2='OEN5' where id=5; -update noar tt set v0='1U9FCA33VEPAVFZ8' where id=6; -update noar ti set v0='1U9FCA33VEPAVFZ8' where id=6; -update noar tt set b0='PATN3LEKBVQGRY8RNN0GWQDR' where id=6; -update noar ti set b0='PATN3LEKBVQGRY8RNN0GWQDR' where id=6; -update noar tt set v0='MZOWMIURY0OG2CH' where id=6; -update noar ti set v0='MZOWMIURY0OG2CH' where id=6; -update noar tt set b1='NZ31WVLY8CHY8PSDY1' where id=6; -update noar ti set b1='NZ31WVLY8CHY8PSDY1' where id=6; -update noar tt set v0='WQ4YN3PQZSD3TKI5SPMASVY3D3TNP' where id=6; -update noar ti set v0='WQ4YN3PQZSD3TKI5SPMASVY3D3TNP' where id=6; -update noar tt set b2='4CIZ04MZA54QKHZ2' where id=6; -update noar ti set b2='4CIZ04MZA54QKHZ2' where id=6; -update noar tt set v0='TPTLQ1WBIY7G0U9TE190DRYH' where id=7; -update noar ti set v0='TPTLQ1WBIY7G0U9TE190DRYH' where id=7; -update noar tt set b0='RGALWIA38AQRPN' where id=7; -update noar ti set b0='RGALWIA38AQRPN' where id=7; -update noar tt set v0='1ADCW' where id=7; -update noar ti set v0='1ADCW' where id=7; -update noar tt set b1='6' where id=7; -update noar ti set b1='6' where id=7; -update noar tt set v0='XA4U5H3T76306ELD0IOICWK3NO5I5' where id=7; -update noar ti set v0='XA4U5H3T76306ELD0IOICWK3NO5I5' where id=7; -update noar tt set b2='1R735KSH2SM7IU0L4RHTHD9VDCT379FW' where id=7; -update noar ti set b2='1R735KSH2SM7IU0L4RHTHD9VDCT379FW' where id=7; -update noar tt set v0='HQZZ' where id=8; -update noar ti set v0='HQZZ' where id=8; -update noar tt set b0='ZMKGY' where id=8; -update noar ti set b0='ZMKGY' where id=8; -update noar tt set v0='VIS8RFT' where id=8; -update noar ti set v0='VIS8RFT' where id=8; -update noar tt set b1='40FPV46TH38OV846TI0VCBYBNHU' where id=8; -update noar ti set b1='40FPV46TH38OV846TI0VCBYBNHU' where id=8; -update noar tt set v0='B76' where id=8; -update noar ti set v0='B76' where id=8; -update noar tt set b2='B6U9UD8BVWK0PK4PQ9O' where id=8; -update noar ti set b2='B6U9UD8BVWK0PK4PQ9O' where id=8; -update noar tt set v0='23R1YXZGW0FNHLGXDV2YY' where id=9; -update noar ti set v0='23R1YXZGW0FNHLGXDV2YY' where id=9; -update noar tt set b0='CWY1IVH3WPNFILPSU9Z3770WH1' where id=9; -update noar ti set b0='CWY1IVH3WPNFILPSU9Z3770WH1' where id=9; -update noar tt set v0='9VE0PIRV3B' where id=9; -update noar ti set v0='9VE0PIRV3B' where id=9; -update noar tt set b1='KW1TVEE' where id=9; -update noar ti set b1='KW1TVEE' where id=9; -update noar tt set v0='9AY7ZHE2D6U15FBFET9' where id=9; -update noar ti set v0='9AY7ZHE2D6U15FBFET9' where id=9; -update noar tt set b2='AWHDVCOLTLGJ' where id=9; -update noar ti set b2='AWHDVCOLTLGJ' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 longblob null, -b1 tinyblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='05CWV2GHJXH51UP' where id=1; -update noar ti set v0='05CWV2GHJXH51UP' where id=1; -update noar tt set b0='EHCD' where id=1; -update noar ti set b0='EHCD' where id=1; -update noar tt set v0='W5AN0F0E9SJWKA2F6DTJ6JGS' where id=1; -update noar ti set v0='W5AN0F0E9SJWKA2F6DTJ6JGS' where id=1; -update noar tt set b1='ST7ZYLSTR102S71TCSY3XPQRCG6F8OJR' where id=1; -update noar ti set b1='ST7ZYLSTR102S71TCSY3XPQRCG6F8OJR' where id=1; -update noar tt set v0='A0ZJ' where id=1; -update noar ti set v0='A0ZJ' where id=1; -update noar tt set b2='NJU7BOAI8VM0W0CQM29C' where id=1; -update noar ti set b2='NJU7BOAI8VM0W0CQM29C' where id=1; -update noar tt set v0='0EBR5' where id=2; -update noar ti set v0='0EBR5' where id=2; -update noar tt set b0='5Z5N9WWMKF0ICX9T6PN6ZYAM30IZ' where id=2; -update noar ti set b0='5Z5N9WWMKF0ICX9T6PN6ZYAM30IZ' where id=2; -update noar tt set v0='6TC9G3DYUGS4RG4' where id=2; -update noar ti set v0='6TC9G3DYUGS4RG4' where id=2; -update noar tt set b1='VW3RDWEK1R7' where id=2; -update noar ti set b1='VW3RDWEK1R7' where id=2; -update noar tt set v0='HQYDID8' where id=2; -update noar ti set v0='HQYDID8' where id=2; -update noar tt set b2='MRTVEJ2HQQ' where id=2; -update noar ti set b2='MRTVEJ2HQQ' where id=2; -update noar tt set v0='ALKMVDQ0QYU2BZT' where id=3; -update noar ti set v0='ALKMVDQ0QYU2BZT' where id=3; -update noar tt set b0='E0T9VH0ADK8PX0KIHRZ8CVQRETH' where id=3; -update noar ti set b0='E0T9VH0ADK8PX0KIHRZ8CVQRETH' where id=3; -update noar tt set v0='AU9R17' where id=3; -update noar ti set v0='AU9R17' where id=3; -update noar tt set b1='114VNC2' where id=3; -update noar ti set b1='114VNC2' where id=3; -update noar tt set v0='NZZ' where id=3; -update noar ti set v0='NZZ' where id=3; -update noar tt set b2='OLCES341WKYAB02S5J20TKNOOJ7X9DQY' where id=3; -update noar ti set b2='OLCES341WKYAB02S5J20TKNOOJ7X9DQY' where id=3; -update noar tt set v0='2F8EJZ2UKXEZ' where id=4; -update noar ti set v0='2F8EJZ2UKXEZ' where id=4; -update noar tt set b0='SH09QABX99K63AGBWG1T90FIJQS1Z' where id=4; -update noar ti set b0='SH09QABX99K63AGBWG1T90FIJQS1Z' where id=4; -update noar tt set v0='5H4CMXP60IQJYI3N' where id=4; -update noar ti set v0='5H4CMXP60IQJYI3N' where id=4; -update noar tt set b1='GTE9V8WRNN651CECWGGY2' where id=4; -update noar ti set b1='GTE9V8WRNN651CECWGGY2' where id=4; -update noar tt set v0='75I3ZOKJSQ7E36A9ZLVJ' where id=4; -update noar ti set v0='75I3ZOKJSQ7E36A9ZLVJ' where id=4; -update noar tt set b2='WR7AB' where id=4; -update noar ti set b2='WR7AB' where id=4; -update noar tt set v0='UKS' where id=5; -update noar ti set v0='UKS' where id=5; -update noar tt set b0='F4HYLEFNDMFB41Z6GEP9JK3IF6Q0' where id=5; -update noar ti set b0='F4HYLEFNDMFB41Z6GEP9JK3IF6Q0' where id=5; -update noar tt set v0='SGFCDL7L85' where id=5; -update noar ti set v0='SGFCDL7L85' where id=5; -update noar tt set b1='9IOUZQSVQD846O52N' where id=5; -update noar ti set b1='9IOUZQSVQD846O52N' where id=5; -update noar tt set v0='WZVC9X' where id=5; -update noar ti set v0='WZVC9X' where id=5; -update noar tt set b2='GKMIS4V5KL' where id=5; -update noar ti set b2='GKMIS4V5KL' where id=5; -update noar tt set v0='YZLU5P6JW37HK84HS5PREIW67IN7' where id=6; -update noar ti set v0='YZLU5P6JW37HK84HS5PREIW67IN7' where id=6; -update noar tt set b0='ONPM8OR' where id=6; -update noar ti set b0='ONPM8OR' where id=6; -update noar tt set v0='6VNFHCUH0' where id=6; -update noar ti set v0='6VNFHCUH0' where id=6; -update noar tt set b1='IKZHW5S1DZP8JY6GK4U' where id=6; -update noar ti set b1='IKZHW5S1DZP8JY6GK4U' where id=6; -update noar tt set v0='378AB7WXHPW' where id=6; -update noar ti set v0='378AB7WXHPW' where id=6; -update noar tt set b2='A8HGRZRSQ4JITVGR3E4ZK1ES1' where id=6; -update noar ti set b2='A8HGRZRSQ4JITVGR3E4ZK1ES1' where id=6; -update noar tt set v0='FTAY6H5KIALKS6L' where id=7; -update noar ti set v0='FTAY6H5KIALKS6L' where id=7; -update noar tt set b0='GE4XOCVTI4ZAU35E67U1' where id=7; -update noar ti set b0='GE4XOCVTI4ZAU35E67U1' where id=7; -update noar tt set v0='KBVF76IFMI4IAGDC' where id=7; -update noar ti set v0='KBVF76IFMI4IAGDC' where id=7; -update noar tt set b1='9K7ZN87VSEC5PBR98125430EV' where id=7; -update noar ti set b1='9K7ZN87VSEC5PBR98125430EV' where id=7; -update noar tt set v0='SV7GRLJP0PWX4U3P40HF9HMETT0' where id=7; -update noar ti set v0='SV7GRLJP0PWX4U3P40HF9HMETT0' where id=7; -update noar tt set b2='R2FY6MUAYN43X9ITTPDFCPKG' where id=7; -update noar ti set b2='R2FY6MUAYN43X9ITTPDFCPKG' where id=7; -update noar tt set v0='G1ET1KC' where id=8; -update noar ti set v0='G1ET1KC' where id=8; -update noar tt set b0='47OHVP05PZ' where id=8; -update noar ti set b0='47OHVP05PZ' where id=8; -update noar tt set v0='WORGCZSQ3DV92ZWFWZ' where id=8; -update noar ti set v0='WORGCZSQ3DV92ZWFWZ' where id=8; -update noar tt set b1='KQ6MX9JODAO' where id=8; -update noar ti set b1='KQ6MX9JODAO' where id=8; -update noar tt set v0='OZMM8R5WVIQ8X4GAQ5V6XJ' where id=8; -update noar ti set v0='OZMM8R5WVIQ8X4GAQ5V6XJ' where id=8; -update noar tt set b2='ELI7FK0AT22XBYAARYD3EUZ3' where id=8; -update noar ti set b2='ELI7FK0AT22XBYAARYD3EUZ3' where id=8; -update noar tt set v0='S6XLX4IP' where id=9; -update noar ti set v0='S6XLX4IP' where id=9; -update noar tt set b0='56MM1D70V8C4Y0F2' where id=9; -update noar ti set b0='56MM1D70V8C4Y0F2' where id=9; -update noar tt set v0='EN59XNPMTT9JA' where id=9; -update noar ti set v0='EN59XNPMTT9JA' where id=9; -update noar tt set b1='HEIOWG4Y50N4PD8ZBDMIG8' where id=9; -update noar ti set b1='HEIOWG4Y50N4PD8ZBDMIG8' where id=9; -update noar tt set v0='59L6BZEI9IQ' where id=9; -update noar ti set v0='59L6BZEI9IQ' where id=9; -update noar tt set b2='Z43TH0999N3WJVZ8HCB2' where id=9; -update noar ti set b2='Z43TH0999N3WJVZ8HCB2' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 longblob null, -b1 tinyblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='KKSH' where id=1; -update noar ti set v0='KKSH' where id=1; -update noar tt set b0='20RENUKZACFQK2TZMGW5' where id=1; -update noar ti set b0='20RENUKZACFQK2TZMGW5' where id=1; -update noar tt set v0='G3NOK' where id=1; -update noar ti set v0='G3NOK' where id=1; -update noar tt set b1='MNT' where id=1; -update noar ti set b1='MNT' where id=1; -update noar tt set v0='MBR08KP' where id=1; -update noar ti set v0='MBR08KP' where id=1; -update noar tt set b2='V85YQ293ZGI2Z' where id=1; -update noar ti set b2='V85YQ293ZGI2Z' where id=1; -update noar tt set v0='U8U' where id=2; -update noar ti set v0='U8U' where id=2; -update noar tt set b0='MDMCX7G1V0FY3TTOLIWCPN8BRQMD' where id=2; -update noar ti set b0='MDMCX7G1V0FY3TTOLIWCPN8BRQMD' where id=2; -update noar tt set v0='PIW9S70EWBH' where id=2; -update noar ti set v0='PIW9S70EWBH' where id=2; -update noar tt set b1='3CJ9SAKJ4I7NDAEIGG3IAMLP0Z3M' where id=2; -update noar ti set b1='3CJ9SAKJ4I7NDAEIGG3IAMLP0Z3M' where id=2; -update noar tt set v0='N' where id=2; -update noar ti set v0='N' where id=2; -update noar tt set b2='AWGZRY1DZAKN797A9MZ' where id=2; -update noar ti set b2='AWGZRY1DZAKN797A9MZ' where id=2; -update noar tt set v0='S0HH' where id=3; -update noar ti set v0='S0HH' where id=3; -update noar tt set b0='8JVAE5N1PL' where id=3; -update noar ti set b0='8JVAE5N1PL' where id=3; -update noar tt set v0='QFBMMTYCMH' where id=3; -update noar ti set v0='QFBMMTYCMH' where id=3; -update noar tt set b1='K5BAGGN' where id=3; -update noar ti set b1='K5BAGGN' where id=3; -update noar tt set v0='WFNL6JXSRV' where id=3; -update noar ti set v0='WFNL6JXSRV' where id=3; -update noar tt set b2='W66T66ZYPTRA' where id=3; -update noar ti set b2='W66T66ZYPTRA' where id=3; -update noar tt set v0='N' where id=4; -update noar ti set v0='N' where id=4; -update noar tt set b0='YLL3JUP' where id=4; -update noar ti set b0='YLL3JUP' where id=4; -update noar tt set v0='CULAOUYY74VFCMWWNR3RP4F9NSOJBE3' where id=4; -update noar ti set v0='CULAOUYY74VFCMWWNR3RP4F9NSOJBE3' where id=4; -update noar tt set b1='JW4RPJY4K8GCZIZJ' where id=4; -update noar ti set b1='JW4RPJY4K8GCZIZJ' where id=4; -update noar tt set v0='GQUTME1NL8ZPNN95HAA808XA' where id=4; -update noar ti set v0='GQUTME1NL8ZPNN95HAA808XA' where id=4; -update noar tt set b2='BSDJ2' where id=4; -update noar ti set b2='BSDJ2' where id=4; -update noar tt set v0='EYOY6Y04IDVFMTNWVL2BYV0' where id=5; -update noar ti set v0='EYOY6Y04IDVFMTNWVL2BYV0' where id=5; -update noar tt set b0='VMD3Z948Q7HOU9QKNMHSO' where id=5; -update noar ti set b0='VMD3Z948Q7HOU9QKNMHSO' where id=5; -update noar tt set v0='LL1VFJPVE1E18D7P' where id=5; -update noar ti set v0='LL1VFJPVE1E18D7P' where id=5; -update noar tt set b1='KPOCZE' where id=5; -update noar ti set b1='KPOCZE' where id=5; -update noar tt set v0='KW057LMWSU7A6JKPEWBO7N6U' where id=5; -update noar ti set v0='KW057LMWSU7A6JKPEWBO7N6U' where id=5; -update noar tt set b2='09FCD3NXHS23TQYKIZ7SINSGT5EQ63' where id=5; -update noar ti set b2='09FCD3NXHS23TQYKIZ7SINSGT5EQ63' where id=5; -update noar tt set v0='LASCQOV7EIV19W8P7J' where id=6; -update noar ti set v0='LASCQOV7EIV19W8P7J' where id=6; -update noar tt set b0='CXRIEOFUSG7O' where id=6; -update noar ti set b0='CXRIEOFUSG7O' where id=6; -update noar tt set v0='B6L2CYW29VR6NZFK4U2JB01O' where id=6; -update noar ti set v0='B6L2CYW29VR6NZFK4U2JB01O' where id=6; -update noar tt set b1='P6QTM59F326L8FPY902I' where id=6; -update noar ti set b1='P6QTM59F326L8FPY902I' where id=6; -update noar tt set v0='24KB7QYB5X8ZDAP1RY1' where id=6; -update noar ti set v0='24KB7QYB5X8ZDAP1RY1' where id=6; -update noar tt set b2='S94QJUQSF8FUDXP31QX0VW' where id=6; -update noar ti set b2='S94QJUQSF8FUDXP31QX0VW' where id=6; -update noar tt set v0='1697HSPIOZSBQJRKG5AWP4K7TF1A6N' where id=7; -update noar ti set v0='1697HSPIOZSBQJRKG5AWP4K7TF1A6N' where id=7; -update noar tt set b0='N4Y6LL9Z11WFX5D4DOCJ' where id=7; -update noar ti set b0='N4Y6LL9Z11WFX5D4DOCJ' where id=7; -update noar tt set v0='N7JM' where id=7; -update noar ti set v0='N7JM' where id=7; -update noar tt set b1='OK4NDKW3724' where id=7; -update noar ti set b1='OK4NDKW3724' where id=7; -update noar tt set v0='RJZS4GL5DLN' where id=7; -update noar ti set v0='RJZS4GL5DLN' where id=7; -update noar tt set b2='ORQD68OU0R' where id=7; -update noar ti set b2='ORQD68OU0R' where id=7; -update noar tt set v0='R75BKW4AL0U2QD66JFDZCO76' where id=8; -update noar ti set v0='R75BKW4AL0U2QD66JFDZCO76' where id=8; -update noar tt set b0='38L' where id=8; -update noar ti set b0='38L' where id=8; -update noar tt set v0='EGNFNW' where id=8; -update noar ti set v0='EGNFNW' where id=8; -update noar tt set b1='49' where id=8; -update noar ti set b1='49' where id=8; -update noar tt set v0='8BFY74JEQSYWCU477CL497ZTN7NJ' where id=8; -update noar ti set v0='8BFY74JEQSYWCU477CL497ZTN7NJ' where id=8; -update noar tt set b2='I3QS' where id=8; -update noar ti set b2='I3QS' where id=8; -update noar tt set v0='ZC6ZHZ4EFIQ7NV5' where id=9; -update noar ti set v0='ZC6ZHZ4EFIQ7NV5' where id=9; -update noar tt set b0='6JAV9F0C' where id=9; -update noar ti set b0='6JAV9F0C' where id=9; -update noar tt set v0='XE7FH2N66T2X2UMSEAL9I7ZTFV' where id=9; -update noar ti set v0='XE7FH2N66T2X2UMSEAL9I7ZTFV' where id=9; -update noar tt set b1='JS6K' where id=9; -update noar ti set b1='JS6K' where id=9; -update noar tt set v0='E8YVB509UQULR' where id=9; -update noar ti set v0='E8YVB509UQULR' where id=9; -update noar tt set b2='HO4NQEWU52AX27Y92GYM6DHTW00' where id=9; -update noar ti set b2='HO4NQEWU52AX27Y92GYM6DHTW00' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 longblob not null, -b1 tinyblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='730S4BY2LFQ1ROQ6RZ' where id=1; -update noar ti set v0='730S4BY2LFQ1ROQ6RZ' where id=1; -update noar tt set b0='15284GTV59H2JZG847J3HHA9EBK' where id=1; -update noar ti set b0='15284GTV59H2JZG847J3HHA9EBK' where id=1; -update noar tt set v0='I9VJGQYZJBWCLC' where id=1; -update noar ti set v0='I9VJGQYZJBWCLC' where id=1; -update noar tt set b1='95CR1CHKS' where id=1; -update noar ti set b1='95CR1CHKS' where id=1; -update noar tt set v0='JRNCJUP3KMGW94RVQ3UBHSEGDOGV' where id=1; -update noar ti set v0='JRNCJUP3KMGW94RVQ3UBHSEGDOGV' where id=1; -update noar tt set b2='VKQCVL71BUU1' where id=1; -update noar ti set b2='VKQCVL71BUU1' where id=1; -update noar tt set v0='0ZRBDO' where id=2; -update noar ti set v0='0ZRBDO' where id=2; -update noar tt set b0='HAO9Z1KDQEPV4RP2RQUTQ' where id=2; -update noar ti set b0='HAO9Z1KDQEPV4RP2RQUTQ' where id=2; -update noar tt set v0='05JYULBJ49Q38BOVGP2TZ58A' where id=2; -update noar ti set v0='05JYULBJ49Q38BOVGP2TZ58A' where id=2; -update noar tt set b1='R0OQXQOQR' where id=2; -update noar ti set b1='R0OQXQOQR' where id=2; -update noar tt set v0='C3WP5AQV59YJ8GVSJYF' where id=2; -update noar ti set v0='C3WP5AQV59YJ8GVSJYF' where id=2; -update noar tt set b2='FO519T33SP' where id=2; -update noar ti set b2='FO519T33SP' where id=2; -update noar tt set v0='W5U7XIIF9HTF2PXPOTGHMT' where id=3; -update noar ti set v0='W5U7XIIF9HTF2PXPOTGHMT' where id=3; -update noar tt set b0='5LBTK3UEGFWJRGXGVPLT' where id=3; -update noar ti set b0='5LBTK3UEGFWJRGXGVPLT' where id=3; -update noar tt set v0='VXJ3QQ1QSB1698ITA5P4ORECHHIP3DZ' where id=3; -update noar ti set v0='VXJ3QQ1QSB1698ITA5P4ORECHHIP3DZ' where id=3; -update noar tt set b1='UOGVNYUYLM9ALF28MMXCWR2AG26O8VA0' where id=3; -update noar ti set b1='UOGVNYUYLM9ALF28MMXCWR2AG26O8VA0' where id=3; -update noar tt set v0='3DK2H85BRW8LM' where id=3; -update noar ti set v0='3DK2H85BRW8LM' where id=3; -update noar tt set b2='J3E8D6F5V9CURDJR2EW5DYH82RMZNS' where id=3; -update noar ti set b2='J3E8D6F5V9CURDJR2EW5DYH82RMZNS' where id=3; -update noar tt set v0='C2' where id=4; -update noar ti set v0='C2' where id=4; -update noar tt set b0='AAVC7N7RT0G9WHDYV' where id=4; -update noar ti set b0='AAVC7N7RT0G9WHDYV' where id=4; -update noar tt set v0='DOS4Z0EV0QDJ90XY95B11KZ3F0EZ' where id=4; -update noar ti set v0='DOS4Z0EV0QDJ90XY95B11KZ3F0EZ' where id=4; -update noar tt set b1='EWVU6RRB6BC0HU8OQSR67VXHNAL1T2C' where id=4; -update noar ti set b1='EWVU6RRB6BC0HU8OQSR67VXHNAL1T2C' where id=4; -update noar tt set v0='TQICCY1AZX4FOA72NG8L0402A4REK' where id=4; -update noar ti set v0='TQICCY1AZX4FOA72NG8L0402A4REK' where id=4; -update noar tt set b2='YEZNQFTW6BGO1ELWFZY0Z' where id=4; -update noar ti set b2='YEZNQFTW6BGO1ELWFZY0Z' where id=4; -update noar tt set v0='P5L4FKEV5L3S98URRX00UH38XA1P0' where id=5; -update noar ti set v0='P5L4FKEV5L3S98URRX00UH38XA1P0' where id=5; -update noar tt set b0='82W' where id=5; -update noar ti set b0='82W' where id=5; -update noar tt set v0='DSNSQC' where id=5; -update noar ti set v0='DSNSQC' where id=5; -update noar tt set b1='R7EOMNRT6C' where id=5; -update noar ti set b1='R7EOMNRT6C' where id=5; -update noar tt set v0='U6FQ0SA0TAJXE1W' where id=5; -update noar ti set v0='U6FQ0SA0TAJXE1W' where id=5; -update noar tt set b2='DGI6MBQ6OI1JOWJKJ7HW5RNBUWG4N' where id=5; -update noar ti set b2='DGI6MBQ6OI1JOWJKJ7HW5RNBUWG4N' where id=5; -update noar tt set v0='7N2I7E0G8OMF0D9YN22PZ714P1UM3' where id=6; -update noar ti set v0='7N2I7E0G8OMF0D9YN22PZ714P1UM3' where id=6; -update noar tt set b0='6Q8E019EXCBF0FY1E' where id=6; -update noar ti set b0='6Q8E019EXCBF0FY1E' where id=6; -update noar tt set v0='5' where id=6; -update noar ti set v0='5' where id=6; -update noar tt set b1='7R9Z76C2IUAJEZD0LI0Y3T4Q71BSKM' where id=6; -update noar ti set b1='7R9Z76C2IUAJEZD0LI0Y3T4Q71BSKM' where id=6; -update noar tt set v0='8FNO6PICJVNM8F4P' where id=6; -update noar ti set v0='8FNO6PICJVNM8F4P' where id=6; -update noar tt set b2='KGA3FLL' where id=6; -update noar ti set b2='KGA3FLL' where id=6; -update noar tt set v0='FOFOU5SSBEY74' where id=7; -update noar ti set v0='FOFOU5SSBEY74' where id=7; -update noar tt set b0='N5MI1T5J2P' where id=7; -update noar ti set b0='N5MI1T5J2P' where id=7; -update noar tt set v0='6G6B3T6B4607B6HCW' where id=7; -update noar ti set v0='6G6B3T6B4607B6HCW' where id=7; -update noar tt set b1='S4LOH43M5F6' where id=7; -update noar ti set b1='S4LOH43M5F6' where id=7; -update noar tt set v0='DHA034' where id=7; -update noar ti set v0='DHA034' where id=7; -update noar tt set b2='M7T44RG3L34D4T4FQDZ2MK0TH' where id=7; -update noar ti set b2='M7T44RG3L34D4T4FQDZ2MK0TH' where id=7; -update noar tt set v0='P2FZDIK7APOX3DK4Z' where id=8; -update noar ti set v0='P2FZDIK7APOX3DK4Z' where id=8; -update noar tt set b0='EGYD8ZXFKSC4T1XYLL706Z64ORT2WRS' where id=8; -update noar ti set b0='EGYD8ZXFKSC4T1XYLL706Z64ORT2WRS' where id=8; -update noar tt set v0='935X' where id=8; -update noar ti set v0='935X' where id=8; -update noar tt set b1='VLI4SLWTQX78L1AHA1W2UAD9SQ4A8' where id=8; -update noar ti set b1='VLI4SLWTQX78L1AHA1W2UAD9SQ4A8' where id=8; -update noar tt set v0='LVEE855CMT0VPDG9YWPFI629QPO8' where id=8; -update noar ti set v0='LVEE855CMT0VPDG9YWPFI629QPO8' where id=8; -update noar tt set b2='6NIGT1D0MP' where id=8; -update noar ti set b2='6NIGT1D0MP' where id=8; -update noar tt set v0='131K6JLGSPA17809FK7U4ZX' where id=9; -update noar ti set v0='131K6JLGSPA17809FK7U4ZX' where id=9; -update noar tt set b0='OZ6WVU765FF0GBBGLL0EP3SFFDJ3FI94' where id=9; -update noar ti set b0='OZ6WVU765FF0GBBGLL0EP3SFFDJ3FI94' where id=9; -update noar tt set v0='ZRZCEYVHE8SVX5PEM0U3FYRW7R3N3SE' where id=9; -update noar ti set v0='ZRZCEYVHE8SVX5PEM0U3FYRW7R3N3SE' where id=9; -update noar tt set b1='GRV8FZELWL4FOLG' where id=9; -update noar ti set b1='GRV8FZELWL4FOLG' where id=9; -update noar tt set v0='116I2QN' where id=9; -update noar ti set v0='116I2QN' where id=9; -update noar tt set b2='1R6P1BWARP405YJY1058C8HDKL' where id=9; -update noar ti set b2='1R6P1BWARP405YJY1058C8HDKL' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 longblob not null, -b1 tinyblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='6V0PFHSZ1I4U0GJYMJWWL79BLQD7' where id=1; -update noar ti set v0='6V0PFHSZ1I4U0GJYMJWWL79BLQD7' where id=1; -update noar tt set b0='GFRW4X7XUDD2U2T2PQMO3MYYN0I9F45' where id=1; -update noar ti set b0='GFRW4X7XUDD2U2T2PQMO3MYYN0I9F45' where id=1; -update noar tt set v0='5YMEEJRA0942V1UQPF' where id=1; -update noar ti set v0='5YMEEJRA0942V1UQPF' where id=1; -update noar tt set b1='6CJI4KZQFS36JRRKF8TWX' where id=1; -update noar ti set b1='6CJI4KZQFS36JRRKF8TWX' where id=1; -update noar tt set v0='PVPD4XT6IP9T0KH61MGZ9G1ZI91A' where id=1; -update noar ti set v0='PVPD4XT6IP9T0KH61MGZ9G1ZI91A' where id=1; -update noar tt set b2='MTA7K' where id=1; -update noar ti set b2='MTA7K' where id=1; -update noar tt set v0='DE1J9NYSXH' where id=2; -update noar ti set v0='DE1J9NYSXH' where id=2; -update noar tt set b0='ME' where id=2; -update noar ti set b0='ME' where id=2; -update noar tt set v0='LUMY' where id=2; -update noar ti set v0='LUMY' where id=2; -update noar tt set b1='4MX64BHNUYYBQ5' where id=2; -update noar ti set b1='4MX64BHNUYYBQ5' where id=2; -update noar tt set v0='MHOHJ48ZCG5SMT4E03L' where id=2; -update noar ti set v0='MHOHJ48ZCG5SMT4E03L' where id=2; -update noar tt set b2='HJR9BOT3CK3QODJ' where id=2; -update noar ti set b2='HJR9BOT3CK3QODJ' where id=2; -update noar tt set v0='TNW2K5G2VUZS4U2JETI4XUYSLBBOVJ0' where id=3; -update noar ti set v0='TNW2K5G2VUZS4U2JETI4XUYSLBBOVJ0' where id=3; -update noar tt set b0='B1IFC' where id=3; -update noar ti set b0='B1IFC' where id=3; -update noar tt set v0='DI' where id=3; -update noar ti set v0='DI' where id=3; -update noar tt set b1='24T8Q166CZ9ZMF78MMG1NUTQ9OP4' where id=3; -update noar ti set b1='24T8Q166CZ9ZMF78MMG1NUTQ9OP4' where id=3; -update noar tt set v0='T5PTXNR7XUJHSR7T0N8HUGHUQQKER' where id=3; -update noar ti set v0='T5PTXNR7XUJHSR7T0N8HUGHUQQKER' where id=3; -update noar tt set b2='9MJMHTWGM2UGCD9B56U4ZEWR6VH5Z2' where id=3; -update noar ti set b2='9MJMHTWGM2UGCD9B56U4ZEWR6VH5Z2' where id=3; -update noar tt set v0='YOWG86VZT' where id=4; -update noar ti set v0='YOWG86VZT' where id=4; -update noar tt set b0='AGDF41DN42BRHYU57UIWVYFAYN45AG' where id=4; -update noar ti set b0='AGDF41DN42BRHYU57UIWVYFAYN45AG' where id=4; -update noar tt set v0='HS' where id=4; -update noar ti set v0='HS' where id=4; -update noar tt set b1='1OP3PZDWS02S6ENKIZY4' where id=4; -update noar ti set b1='1OP3PZDWS02S6ENKIZY4' where id=4; -update noar tt set v0='QRLR6P0FP0CZ1BO462UAUPG8NQ6E' where id=4; -update noar ti set v0='QRLR6P0FP0CZ1BO462UAUPG8NQ6E' where id=4; -update noar tt set b2='AVTGL0CGTE9OKPJ30XTFHVXX5' where id=4; -update noar ti set b2='AVTGL0CGTE9OKPJ30XTFHVXX5' where id=4; -update noar tt set v0='NV6FS02' where id=5; -update noar ti set v0='NV6FS02' where id=5; -update noar tt set b0='AY4TZT7SF8NAMBRO0SBB18BAJ3LJNW' where id=5; -update noar ti set b0='AY4TZT7SF8NAMBRO0SBB18BAJ3LJNW' where id=5; -update noar tt set v0='81F4EHR05SMKI' where id=5; -update noar ti set v0='81F4EHR05SMKI' where id=5; -update noar tt set b1='EJJBZ8S05AZBVEQN8KPG3DZLB' where id=5; -update noar ti set b1='EJJBZ8S05AZBVEQN8KPG3DZLB' where id=5; -update noar tt set v0='95B4U0TCG9K856HGXA7RW' where id=5; -update noar ti set v0='95B4U0TCG9K856HGXA7RW' where id=5; -update noar tt set b2='XBB1YZ' where id=5; -update noar ti set b2='XBB1YZ' where id=5; -update noar tt set v0='U7NDZ3BMIDZDUOWVQJMN3JWA' where id=6; -update noar ti set v0='U7NDZ3BMIDZDUOWVQJMN3JWA' where id=6; -update noar tt set b0='Z37FCV' where id=6; -update noar ti set b0='Z37FCV' where id=6; -update noar tt set v0='H3OK99TGZQ5LZ4NELPTOIER1014' where id=6; -update noar ti set v0='H3OK99TGZQ5LZ4NELPTOIER1014' where id=6; -update noar tt set b1='MWMUBQI' where id=6; -update noar ti set b1='MWMUBQI' where id=6; -update noar tt set v0='1R1' where id=6; -update noar ti set v0='1R1' where id=6; -update noar tt set b2='W4AAOWN4VXVG' where id=6; -update noar ti set b2='W4AAOWN4VXVG' where id=6; -update noar tt set v0='G3PACK2JABA3KLRKLI6X79L1KT' where id=7; -update noar ti set v0='G3PACK2JABA3KLRKLI6X79L1KT' where id=7; -update noar tt set b0='CCGVTTTHW0OD' where id=7; -update noar ti set b0='CCGVTTTHW0OD' where id=7; -update noar tt set v0='VMFRW67BCJ2PL1' where id=7; -update noar ti set v0='VMFRW67BCJ2PL1' where id=7; -update noar tt set b1='JSKM0KOTVXK' where id=7; -update noar ti set b1='JSKM0KOTVXK' where id=7; -update noar tt set v0='HDMULHJ5EO8QGR8XE' where id=7; -update noar ti set v0='HDMULHJ5EO8QGR8XE' where id=7; -update noar tt set b2='QTMB871NBPMLAEV0X5DMPOIUGNTL' where id=7; -update noar ti set b2='QTMB871NBPMLAEV0X5DMPOIUGNTL' where id=7; -update noar tt set v0='39' where id=8; -update noar ti set v0='39' where id=8; -update noar tt set b0='IE5EQ279SF81NZN0F9YQB7SZTOXI' where id=8; -update noar ti set b0='IE5EQ279SF81NZN0F9YQB7SZTOXI' where id=8; -update noar tt set v0='YRQ1U3LKY' where id=8; -update noar ti set v0='YRQ1U3LKY' where id=8; -update noar tt set b1='H50O0EBD9HVWVYYSTB0YDN' where id=8; -update noar ti set b1='H50O0EBD9HVWVYYSTB0YDN' where id=8; -update noar tt set v0='XXJTR597GXMVODUXZUQSFVOT7K13UEJ' where id=8; -update noar ti set v0='XXJTR597GXMVODUXZUQSFVOT7K13UEJ' where id=8; -update noar tt set b2='BZU77E' where id=8; -update noar ti set b2='BZU77E' where id=8; -update noar tt set v0='7UCXHJ2BHYMRV438VMEBING0V2' where id=9; -update noar ti set v0='7UCXHJ2BHYMRV438VMEBING0V2' where id=9; -update noar tt set b0='WN' where id=9; -update noar ti set b0='WN' where id=9; -update noar tt set v0='ERJVY' where id=9; -update noar ti set v0='ERJVY' where id=9; -update noar tt set b1='FFOP90Y0MRU5S547XTE' where id=9; -update noar ti set b1='FFOP90Y0MRU5S547XTE' where id=9; -update noar tt set v0='JRQA3B4V81QELFKFV0GNPAB04XVRAK1E' where id=9; -update noar ti set v0='JRQA3B4V81QELFKFV0GNPAB04XVRAK1E' where id=9; -update noar tt set b2='17NMQWC0EVHMHGDHZLGACL99S' where id=9; -update noar ti set b2='17NMQWC0EVHMHGDHZLGACL99S' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 longblob null, -b1 tinyblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='2N4ROCGAQ9W6C' where id=1; -update noar ti set v0='2N4ROCGAQ9W6C' where id=1; -update noar tt set b0='DGXCWUN0RG6PDFYNATN16XG' where id=1; -update noar ti set b0='DGXCWUN0RG6PDFYNATN16XG' where id=1; -update noar tt set v0='D33MZSIVZJ1AK4ML' where id=1; -update noar ti set v0='D33MZSIVZJ1AK4ML' where id=1; -update noar tt set b1='N5LJR' where id=1; -update noar ti set b1='N5LJR' where id=1; -update noar tt set v0='QHJGF8RQQ2DQZK5XE01XRQORBEY' where id=1; -update noar ti set v0='QHJGF8RQQ2DQZK5XE01XRQORBEY' where id=1; -update noar tt set b2='P0MTJZV' where id=1; -update noar ti set b2='P0MTJZV' where id=1; -update noar tt set v0='PLPRA9V8J4PZWAVPGXH5OKTTQYQ8' where id=2; -update noar ti set v0='PLPRA9V8J4PZWAVPGXH5OKTTQYQ8' where id=2; -update noar tt set b0='A3K0JMOX5W6PHDNQ3BBUNKAY0' where id=2; -update noar ti set b0='A3K0JMOX5W6PHDNQ3BBUNKAY0' where id=2; -update noar tt set v0='Q0LFZDW5Q3NAL5EDM4PA9VGAFTCY' where id=2; -update noar ti set v0='Q0LFZDW5Q3NAL5EDM4PA9VGAFTCY' where id=2; -update noar tt set b1='YOPHXZ5HBHIL6NSAF' where id=2; -update noar ti set b1='YOPHXZ5HBHIL6NSAF' where id=2; -update noar tt set v0='W11FDNBKWTMH1VAE0IK8MAZJUND' where id=2; -update noar ti set v0='W11FDNBKWTMH1VAE0IK8MAZJUND' where id=2; -update noar tt set b2='MINAY2M9UTBNN3F0NTFEJW6823H6' where id=2; -update noar ti set b2='MINAY2M9UTBNN3F0NTFEJW6823H6' where id=2; -update noar tt set v0='0IXVZAA585JQ93YX' where id=3; -update noar ti set v0='0IXVZAA585JQ93YX' where id=3; -update noar tt set b0='RHIA88UBDAEY' where id=3; -update noar ti set b0='RHIA88UBDAEY' where id=3; -update noar tt set v0='FUHCOOVI' where id=3; -update noar ti set v0='FUHCOOVI' where id=3; -update noar tt set b1='2WKSOWXP3O82B7GD5LDRWLT' where id=3; -update noar ti set b1='2WKSOWXP3O82B7GD5LDRWLT' where id=3; -update noar tt set v0='6N0BN1DITVFU7L9FUTT7AMOZ' where id=3; -update noar ti set v0='6N0BN1DITVFU7L9FUTT7AMOZ' where id=3; -update noar tt set b2='XCAEAN067QGVUH2E5PK' where id=3; -update noar ti set b2='XCAEAN067QGVUH2E5PK' where id=3; -update noar tt set v0='UC2XEZBVY18AF06' where id=4; -update noar ti set v0='UC2XEZBVY18AF06' where id=4; -update noar tt set b0='LOQTAWUXG9UZ' where id=4; -update noar ti set b0='LOQTAWUXG9UZ' where id=4; -update noar tt set v0='KFT5NK' where id=4; -update noar ti set v0='KFT5NK' where id=4; -update noar tt set b1='5P60EU13ZYKKNUSS5FIE61' where id=4; -update noar ti set b1='5P60EU13ZYKKNUSS5FIE61' where id=4; -update noar tt set v0='BD869JZAWF8H6LZKQ10A3C7IQCC' where id=4; -update noar ti set v0='BD869JZAWF8H6LZKQ10A3C7IQCC' where id=4; -update noar tt set b2='647AWAJKC1166WN' where id=4; -update noar ti set b2='647AWAJKC1166WN' where id=4; -update noar tt set v0='TVE59UI4IEQC6AUGCHEA01MP4G0' where id=5; -update noar ti set v0='TVE59UI4IEQC6AUGCHEA01MP4G0' where id=5; -update noar tt set b0='KGS5J' where id=5; -update noar ti set b0='KGS5J' where id=5; -update noar tt set v0='G3YEWM' where id=5; -update noar ti set v0='G3YEWM' where id=5; -update noar tt set b1='W7J4ED6QBUDUW6B7YO4ZZ6MWZ8MEDWJU' where id=5; -update noar ti set b1='W7J4ED6QBUDUW6B7YO4ZZ6MWZ8MEDWJU' where id=5; -update noar tt set v0='KZAF8OOIMM28VYTFWASFB' where id=5; -update noar ti set v0='KZAF8OOIMM28VYTFWASFB' where id=5; -update noar tt set b2='TJ' where id=5; -update noar ti set b2='TJ' where id=5; -update noar tt set v0='YM2591GG' where id=6; -update noar ti set v0='YM2591GG' where id=6; -update noar tt set b0='ZXWI1IPN4CSFLBBO0BPE0HHC3K5' where id=6; -update noar ti set b0='ZXWI1IPN4CSFLBBO0BPE0HHC3K5' where id=6; -update noar tt set v0='XB9T5' where id=6; -update noar ti set v0='XB9T5' where id=6; -update noar tt set b1='WATA' where id=6; -update noar ti set b1='WATA' where id=6; -update noar tt set v0='I5YTE45DJR' where id=6; -update noar ti set v0='I5YTE45DJR' where id=6; -update noar tt set b2='U3EWV8' where id=6; -update noar ti set b2='U3EWV8' where id=6; -update noar tt set v0='UJ0OKLPUNNF9P' where id=7; -update noar ti set v0='UJ0OKLPUNNF9P' where id=7; -update noar tt set b0='LGE4PATGU7D' where id=7; -update noar ti set b0='LGE4PATGU7D' where id=7; -update noar tt set v0='OTKP1H5KOU1UXJ' where id=7; -update noar ti set v0='OTKP1H5KOU1UXJ' where id=7; -update noar tt set b1='2UED6I7BZPFHI' where id=7; -update noar ti set b1='2UED6I7BZPFHI' where id=7; -update noar tt set v0='3MG5GWM8TII6U9GI' where id=7; -update noar ti set v0='3MG5GWM8TII6U9GI' where id=7; -update noar tt set b2='R3H' where id=7; -update noar ti set b2='R3H' where id=7; -update noar tt set v0='S5XW9O5FYOR65UVQ6PN' where id=8; -update noar ti set v0='S5XW9O5FYOR65UVQ6PN' where id=8; -update noar tt set b0='QNJOT24A9J0WLGW6XXGE43KS' where id=8; -update noar ti set b0='QNJOT24A9J0WLGW6XXGE43KS' where id=8; -update noar tt set v0='X' where id=8; -update noar ti set v0='X' where id=8; -update noar tt set b1='5JK9LZ' where id=8; -update noar ti set b1='5JK9LZ' where id=8; -update noar tt set v0='IM5OPSJTM22S4ILNLWYLF5IVR1E' where id=8; -update noar ti set v0='IM5OPSJTM22S4ILNLWYLF5IVR1E' where id=8; -update noar tt set b2='7IFQOFLDTABWKHZGMC' where id=8; -update noar ti set b2='7IFQOFLDTABWKHZGMC' where id=8; -update noar tt set v0='Q' where id=9; -update noar ti set v0='Q' where id=9; -update noar tt set b0='55RSJQPQGNK4IIF4WJJE' where id=9; -update noar ti set b0='55RSJQPQGNK4IIF4WJJE' where id=9; -update noar tt set v0='760X865' where id=9; -update noar ti set v0='760X865' where id=9; -update noar tt set b1='BFZDNY31A0G5S5FTCNG' where id=9; -update noar ti set b1='BFZDNY31A0G5S5FTCNG' where id=9; -update noar tt set v0='8SRMHIO8545TQJXTMZ4BCY' where id=9; -update noar ti set v0='8SRMHIO8545TQJXTMZ4BCY' where id=9; -update noar tt set b2='1J6BVHGRWUISD9KGWQD7' where id=9; -update noar ti set b2='1J6BVHGRWUISD9KGWQD7' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 longblob null, -b1 tinyblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='RD70OX8ODB0NCBAZTVTZEU' where id=1; -update noar ti set v0='RD70OX8ODB0NCBAZTVTZEU' where id=1; -update noar tt set b0='Y92C53L8PL15NOI' where id=1; -update noar ti set b0='Y92C53L8PL15NOI' where id=1; -update noar tt set v0='2XBQ8S7GXIVIL6YGKYCXHK' where id=1; -update noar ti set v0='2XBQ8S7GXIVIL6YGKYCXHK' where id=1; -update noar tt set b1='U8ZBXL1659' where id=1; -update noar ti set b1='U8ZBXL1659' where id=1; -update noar tt set v0='AJG3MMIQRUELS5VDOWNIAPYSH1UDT2' where id=1; -update noar ti set v0='AJG3MMIQRUELS5VDOWNIAPYSH1UDT2' where id=1; -update noar tt set b2='1L7EWWTLXGMQE9J0EEUH' where id=1; -update noar ti set b2='1L7EWWTLXGMQE9J0EEUH' where id=1; -update noar tt set v0='D7SCVRVGBC6FAL1MP3X2M72' where id=2; -update noar ti set v0='D7SCVRVGBC6FAL1MP3X2M72' where id=2; -update noar tt set b0='3MWUX' where id=2; -update noar ti set b0='3MWUX' where id=2; -update noar tt set v0='1UPJVKWX5IGL40RLX' where id=2; -update noar ti set v0='1UPJVKWX5IGL40RLX' where id=2; -update noar tt set b1='PDVOFWH6ZJS86BZH4JV9HPS3PLFL' where id=2; -update noar ti set b1='PDVOFWH6ZJS86BZH4JV9HPS3PLFL' where id=2; -update noar tt set v0='FO6WZC' where id=2; -update noar ti set v0='FO6WZC' where id=2; -update noar tt set b2='TXTDVBB9Q3U6300X3IBYRWN6' where id=2; -update noar ti set b2='TXTDVBB9Q3U6300X3IBYRWN6' where id=2; -update noar tt set v0='O0Y23DMP' where id=3; -update noar ti set v0='O0Y23DMP' where id=3; -update noar tt set b0='7SCQ125WYJHTE2F1D5KLPNLMAGKCM2EQ' where id=3; -update noar ti set b0='7SCQ125WYJHTE2F1D5KLPNLMAGKCM2EQ' where id=3; -update noar tt set v0='ZX' where id=3; -update noar ti set v0='ZX' where id=3; -update noar tt set b1='SJPJ0QKG3NMAE95F74LFA' where id=3; -update noar ti set b1='SJPJ0QKG3NMAE95F74LFA' where id=3; -update noar tt set v0='QCFIRB' where id=3; -update noar ti set v0='QCFIRB' where id=3; -update noar tt set b2='61RNR7TKM0' where id=3; -update noar ti set b2='61RNR7TKM0' where id=3; -update noar tt set v0='MOM2875A' where id=4; -update noar ti set v0='MOM2875A' where id=4; -update noar tt set b0='PVX0W272C790UEEQYI17' where id=4; -update noar ti set b0='PVX0W272C790UEEQYI17' where id=4; -update noar tt set v0='AGRRK8MKRNX' where id=4; -update noar ti set v0='AGRRK8MKRNX' where id=4; -update noar tt set b1='LJBKN4DZF5V5PYPM6PP6GHFQM' where id=4; -update noar ti set b1='LJBKN4DZF5V5PYPM6PP6GHFQM' where id=4; -update noar tt set v0='QVMNIB4R85ORTKVQB10C4' where id=4; -update noar ti set v0='QVMNIB4R85ORTKVQB10C4' where id=4; -update noar tt set b2='VK6YDMZLD368ZB7WT92B538' where id=4; -update noar ti set b2='VK6YDMZLD368ZB7WT92B538' where id=4; -update noar tt set v0='PU4PSZO48T24' where id=5; -update noar ti set v0='PU4PSZO48T24' where id=5; -update noar tt set b0='5HS8HFYCEGQXQED40' where id=5; -update noar ti set b0='5HS8HFYCEGQXQED40' where id=5; -update noar tt set v0='4145GCWLCY8' where id=5; -update noar ti set v0='4145GCWLCY8' where id=5; -update noar tt set b1='XCMUA173L2QRYTTAIEWY43' where id=5; -update noar ti set b1='XCMUA173L2QRYTTAIEWY43' where id=5; -update noar tt set v0='50E4HCA1Z02SIH2MAY' where id=5; -update noar ti set v0='50E4HCA1Z02SIH2MAY' where id=5; -update noar tt set b2='FYBX4UIECOBA3RB493JAA3A1LKTN4FQ' where id=5; -update noar ti set b2='FYBX4UIECOBA3RB493JAA3A1LKTN4FQ' where id=5; -update noar tt set v0='RMG94ZT069YMYFP2Z9DYP' where id=6; -update noar ti set v0='RMG94ZT069YMYFP2Z9DYP' where id=6; -update noar tt set b0='IPVS8JYIRKXPIRFTEIMC' where id=6; -update noar ti set b0='IPVS8JYIRKXPIRFTEIMC' where id=6; -update noar tt set v0='NV6F7C3' where id=6; -update noar ti set v0='NV6F7C3' where id=6; -update noar tt set b1='BZGRAXDER2SCL' where id=6; -update noar ti set b1='BZGRAXDER2SCL' where id=6; -update noar tt set v0='S9MGBTTMWS6L0PF1' where id=6; -update noar ti set v0='S9MGBTTMWS6L0PF1' where id=6; -update noar tt set b2='OAK32A4GZ7XNE4CUWH780ZA16XQDSL' where id=6; -update noar ti set b2='OAK32A4GZ7XNE4CUWH780ZA16XQDSL' where id=6; -update noar tt set v0='8' where id=7; -update noar ti set v0='8' where id=7; -update noar tt set b0='31NFW36WWY8S0E9JV19IRYNWL' where id=7; -update noar ti set b0='31NFW36WWY8S0E9JV19IRYNWL' where id=7; -update noar tt set v0='4' where id=7; -update noar ti set v0='4' where id=7; -update noar tt set b1='H4IF9Z5U' where id=7; -update noar ti set b1='H4IF9Z5U' where id=7; -update noar tt set v0='5O9UGK290V8HLCT2I5GQ' where id=7; -update noar ti set v0='5O9UGK290V8HLCT2I5GQ' where id=7; -update noar tt set b2='QVQSQDOI6XMSDO6EEB1DW' where id=7; -update noar ti set b2='QVQSQDOI6XMSDO6EEB1DW' where id=7; -update noar tt set v0='Q2F16N34HO02TODSGB72LXFAG0S3' where id=8; -update noar ti set v0='Q2F16N34HO02TODSGB72LXFAG0S3' where id=8; -update noar tt set b0='TO9XSLES2I9DXSH3RMD4SO2IOWKF' where id=8; -update noar ti set b0='TO9XSLES2I9DXSH3RMD4SO2IOWKF' where id=8; -update noar tt set v0='64NRTXEHBENL' where id=8; -update noar ti set v0='64NRTXEHBENL' where id=8; -update noar tt set b1='HY1' where id=8; -update noar ti set b1='HY1' where id=8; -update noar tt set v0='K86FP9U3B8BA6FOF' where id=8; -update noar ti set v0='K86FP9U3B8BA6FOF' where id=8; -update noar tt set b2='GNTAL6M8YYJLDZ43YQ5' where id=8; -update noar ti set b2='GNTAL6M8YYJLDZ43YQ5' where id=8; -update noar tt set v0='ZFKK9JVU4I3MKLF1SA79CL7OLUW20' where id=9; -update noar ti set v0='ZFKK9JVU4I3MKLF1SA79CL7OLUW20' where id=9; -update noar tt set b0='83BIKBZ8BYR' where id=9; -update noar ti set b0='83BIKBZ8BYR' where id=9; -update noar tt set v0='JQWIY8YS3T' where id=9; -update noar ti set v0='JQWIY8YS3T' where id=9; -update noar tt set b1='0GBAYKNWFG' where id=9; -update noar ti set b1='0GBAYKNWFG' where id=9; -update noar tt set v0='SF7F653H' where id=9; -update noar ti set v0='SF7F653H' where id=9; -update noar tt set b2='M8WH' where id=9; -update noar ti set b2='M8WH' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 longblob not null, -b1 tinyblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='FZ7PUE6SXVTPO1F5D2WK8CQVAOFPP9' where id=1; -update noar ti set v0='FZ7PUE6SXVTPO1F5D2WK8CQVAOFPP9' where id=1; -update noar tt set b0='EJQE8R' where id=1; -update noar ti set b0='EJQE8R' where id=1; -update noar tt set v0='QMNR1BUUN1QJJTOJLSMH' where id=1; -update noar ti set v0='QMNR1BUUN1QJJTOJLSMH' where id=1; -update noar tt set b1='IFAL1R2LOWBT7ENH22PRWPLY1TX' where id=1; -update noar ti set b1='IFAL1R2LOWBT7ENH22PRWPLY1TX' where id=1; -update noar tt set v0='K0NU1WJY7MO7X8P08ZD' where id=1; -update noar ti set v0='K0NU1WJY7MO7X8P08ZD' where id=1; -update noar tt set b2='JLLMQ47SCEUHTR' where id=1; -update noar ti set b2='JLLMQ47SCEUHTR' where id=1; -update noar tt set v0='8S' where id=2; -update noar ti set v0='8S' where id=2; -update noar tt set b0='WQJ4' where id=2; -update noar ti set b0='WQJ4' where id=2; -update noar tt set v0='YKRG0479ZPEKL1V6J530LRLOIAUN4G' where id=2; -update noar ti set v0='YKRG0479ZPEKL1V6J530LRLOIAUN4G' where id=2; -update noar tt set b1='TLF3B4JMRHU84DZ2Q6TY6UVKOWXG' where id=2; -update noar ti set b1='TLF3B4JMRHU84DZ2Q6TY6UVKOWXG' where id=2; -update noar tt set v0='FBT3D28A4J5C04F3BNXZ8DO9' where id=2; -update noar ti set v0='FBT3D28A4J5C04F3BNXZ8DO9' where id=2; -update noar tt set b2='MJL35DYL' where id=2; -update noar ti set b2='MJL35DYL' where id=2; -update noar tt set v0='Z9' where id=3; -update noar ti set v0='Z9' where id=3; -update noar tt set b0='GJHRT1W47E6' where id=3; -update noar ti set b0='GJHRT1W47E6' where id=3; -update noar tt set v0='M17PWKLFVSU6AQMX3PS' where id=3; -update noar ti set v0='M17PWKLFVSU6AQMX3PS' where id=3; -update noar tt set b1='G61C3DNJIN' where id=3; -update noar ti set b1='G61C3DNJIN' where id=3; -update noar tt set v0='EILFUTALO4ZKXPVYNT7K4SETPU' where id=3; -update noar ti set v0='EILFUTALO4ZKXPVYNT7K4SETPU' where id=3; -update noar tt set b2='KJNRTM35FLMA8PBF' where id=3; -update noar ti set b2='KJNRTM35FLMA8PBF' where id=3; -update noar tt set v0='B1NAHK1XVQR0RWZ5H9Q1KOX4E5' where id=4; -update noar ti set v0='B1NAHK1XVQR0RWZ5H9Q1KOX4E5' where id=4; -update noar tt set b0='P9A3' where id=4; -update noar ti set b0='P9A3' where id=4; -update noar tt set v0='71G2YNAMD5UB0LJ4TWJPS' where id=4; -update noar ti set v0='71G2YNAMD5UB0LJ4TWJPS' where id=4; -update noar tt set b1='2UOMPTMCWZ' where id=4; -update noar ti set b1='2UOMPTMCWZ' where id=4; -update noar tt set v0='COGVAD7G2Q1X6GAY8MTWBQGEMQXK7' where id=4; -update noar ti set v0='COGVAD7G2Q1X6GAY8MTWBQGEMQXK7' where id=4; -update noar tt set b2='FKYGXFPCB05BE1FL6RJ5' where id=4; -update noar ti set b2='FKYGXFPCB05BE1FL6RJ5' where id=4; -update noar tt set v0='Z8L2KQ' where id=5; -update noar ti set v0='Z8L2KQ' where id=5; -update noar tt set b0='SPBPR58URQJYCXA0' where id=5; -update noar ti set b0='SPBPR58URQJYCXA0' where id=5; -update noar tt set v0='RDM6PM8UZSDP6I9M58IFNZ5EBI' where id=5; -update noar ti set v0='RDM6PM8UZSDP6I9M58IFNZ5EBI' where id=5; -update noar tt set b1='43PPO8K8J118' where id=5; -update noar ti set b1='43PPO8K8J118' where id=5; -update noar tt set v0='A7PR5A4AZPAXQ6O747YNKMKJYR5I' where id=5; -update noar ti set v0='A7PR5A4AZPAXQ6O747YNKMKJYR5I' where id=5; -update noar tt set b2='L5ELRSKPFKEG' where id=5; -update noar ti set b2='L5ELRSKPFKEG' where id=5; -update noar tt set v0='NZRH9I' where id=6; -update noar ti set v0='NZRH9I' where id=6; -update noar tt set b0='UP' where id=6; -update noar ti set b0='UP' where id=6; -update noar tt set v0='S8086K3ZXZJU8' where id=6; -update noar ti set v0='S8086K3ZXZJU8' where id=6; -update noar tt set b1='720NGQSRP' where id=6; -update noar ti set b1='720NGQSRP' where id=6; -update noar tt set v0='VBFXXN2A1IA586XHMQT586E' where id=6; -update noar ti set v0='VBFXXN2A1IA586XHMQT586E' where id=6; -update noar tt set b2='M2G1W8OO' where id=6; -update noar ti set b2='M2G1W8OO' where id=6; -update noar tt set v0='2Q63A4VFY5HYCVS0FVVV60KDB' where id=7; -update noar ti set v0='2Q63A4VFY5HYCVS0FVVV60KDB' where id=7; -update noar tt set b0='GOFNXH1YLGE36L8F6IP24R' where id=7; -update noar ti set b0='GOFNXH1YLGE36L8F6IP24R' where id=7; -update noar tt set v0='HH1V76ESR6I54UH' where id=7; -update noar ti set v0='HH1V76ESR6I54UH' where id=7; -update noar tt set b1='II' where id=7; -update noar ti set b1='II' where id=7; -update noar tt set v0='6N9CDW7RN4O94MR4N9YERGEIP45WX5XD' where id=7; -update noar ti set v0='6N9CDW7RN4O94MR4N9YERGEIP45WX5XD' where id=7; -update noar tt set b2='0SKY532ITRABK3FSQD1' where id=7; -update noar ti set b2='0SKY532ITRABK3FSQD1' where id=7; -update noar tt set v0='MCIGW' where id=8; -update noar ti set v0='MCIGW' where id=8; -update noar tt set b0='VOQJVNS' where id=8; -update noar ti set b0='VOQJVNS' where id=8; -update noar tt set v0='7VQV5KG6YFU5EM6FM3' where id=8; -update noar ti set v0='7VQV5KG6YFU5EM6FM3' where id=8; -update noar tt set b1='LT8WA5J7VKQZ11A1' where id=8; -update noar ti set b1='LT8WA5J7VKQZ11A1' where id=8; -update noar tt set v0='KGEMVKXFLY8BMNUUR45CU' where id=8; -update noar ti set v0='KGEMVKXFLY8BMNUUR45CU' where id=8; -update noar tt set b2='QB99UFZ69F6X8ZAHAX5UKEVXW' where id=8; -update noar ti set b2='QB99UFZ69F6X8ZAHAX5UKEVXW' where id=8; -update noar tt set v0='775A' where id=9; -update noar ti set v0='775A' where id=9; -update noar tt set b0='H9J064UBBH' where id=9; -update noar ti set b0='H9J064UBBH' where id=9; -update noar tt set v0='2SNEAFD6PO891I7HYJB0' where id=9; -update noar ti set v0='2SNEAFD6PO891I7HYJB0' where id=9; -update noar tt set b1='FXPVE61LHENX1' where id=9; -update noar ti set b1='FXPVE61LHENX1' where id=9; -update noar tt set v0='Y9EV63TDO62ARS1G5X09OH9OYJH' where id=9; -update noar ti set v0='Y9EV63TDO62ARS1G5X09OH9OYJH' where id=9; -update noar tt set b2='LNJEFPY' where id=9; -update noar ti set b2='LNJEFPY' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 longblob not null, -b1 tinyblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='0Q6GF787KRD3' where id=1; -update noar ti set v0='0Q6GF787KRD3' where id=1; -update noar tt set b0='QSK1HG57JS8B866PRTA' where id=1; -update noar ti set b0='QSK1HG57JS8B866PRTA' where id=1; -update noar tt set v0='8STLWRX' where id=1; -update noar ti set v0='8STLWRX' where id=1; -update noar tt set b1='SRULMDFEWMBGNJIYWX7E1IRMOR' where id=1; -update noar ti set b1='SRULMDFEWMBGNJIYWX7E1IRMOR' where id=1; -update noar tt set v0='8GJBMZL' where id=1; -update noar ti set v0='8GJBMZL' where id=1; -update noar tt set b2='AQFC7N6NDHR0FO' where id=1; -update noar ti set b2='AQFC7N6NDHR0FO' where id=1; -update noar tt set v0='5LFX03FH9513APAJ6CTSGMM8KUVD' where id=2; -update noar ti set v0='5LFX03FH9513APAJ6CTSGMM8KUVD' where id=2; -update noar tt set b0='60LSBHXM22AVJN3G9R6DS3SZBXFW9L' where id=2; -update noar ti set b0='60LSBHXM22AVJN3G9R6DS3SZBXFW9L' where id=2; -update noar tt set v0='5JFR050' where id=2; -update noar ti set v0='5JFR050' where id=2; -update noar tt set b1='01HWZ9YF' where id=2; -update noar ti set b1='01HWZ9YF' where id=2; -update noar tt set v0='52VYTJM5H4MVPRE301NS' where id=2; -update noar ti set v0='52VYTJM5H4MVPRE301NS' where id=2; -update noar tt set b2='3VPQ9EKXJFM97' where id=2; -update noar ti set b2='3VPQ9EKXJFM97' where id=2; -update noar tt set v0='KDB11X1496UVI1U' where id=3; -update noar ti set v0='KDB11X1496UVI1U' where id=3; -update noar tt set b0='XGMO9QNRO9ME8TWDJIHKDELMKYZ000UY' where id=3; -update noar ti set b0='XGMO9QNRO9ME8TWDJIHKDELMKYZ000UY' where id=3; -update noar tt set v0='SMLLU79BKTT8TMN2TZ2D74HN' where id=3; -update noar ti set v0='SMLLU79BKTT8TMN2TZ2D74HN' where id=3; -update noar tt set b1='TV' where id=3; -update noar ti set b1='TV' where id=3; -update noar tt set v0='H5KAZCNJQZKBYQ5M318JXL4XHC9K' where id=3; -update noar ti set v0='H5KAZCNJQZKBYQ5M318JXL4XHC9K' where id=3; -update noar tt set b2='RT4M5QLJ5LYT' where id=3; -update noar ti set b2='RT4M5QLJ5LYT' where id=3; -update noar tt set v0='VC8S6OMVW' where id=4; -update noar ti set v0='VC8S6OMVW' where id=4; -update noar tt set b0='9MEZF8V4PLZLW' where id=4; -update noar ti set b0='9MEZF8V4PLZLW' where id=4; -update noar tt set v0='PFB2SCNE22U9BNBGQRNJACHDVV2QI' where id=4; -update noar ti set v0='PFB2SCNE22U9BNBGQRNJACHDVV2QI' where id=4; -update noar tt set b1='MIJHPF5N59NR9EDW0' where id=4; -update noar ti set b1='MIJHPF5N59NR9EDW0' where id=4; -update noar tt set v0='WOWE2C3IODFJFMC9LWS' where id=4; -update noar ti set v0='WOWE2C3IODFJFMC9LWS' where id=4; -update noar tt set b2='H0D5P8Q8IC6GD0DOHZT5K4N0Q6F' where id=4; -update noar ti set b2='H0D5P8Q8IC6GD0DOHZT5K4N0Q6F' where id=4; -update noar tt set v0='2NDGE1Z3P5IXLJJWVZXYOEGA' where id=5; -update noar ti set v0='2NDGE1Z3P5IXLJJWVZXYOEGA' where id=5; -update noar tt set b0='FZNEIU84PJBN3C6YYI' where id=5; -update noar ti set b0='FZNEIU84PJBN3C6YYI' where id=5; -update noar tt set v0='BLP441B5SNKUTP535V2M4ICEPHRG7VTT' where id=5; -update noar ti set v0='BLP441B5SNKUTP535V2M4ICEPHRG7VTT' where id=5; -update noar tt set b1='95YKOE4Q2I8QTUHRRTEWYTX0RFJQ' where id=5; -update noar ti set b1='95YKOE4Q2I8QTUHRRTEWYTX0RFJQ' where id=5; -update noar tt set v0='7ZOVBYLA' where id=5; -update noar ti set v0='7ZOVBYLA' where id=5; -update noar tt set b2='5L1Y55XLRJ27M6V3' where id=5; -update noar ti set b2='5L1Y55XLRJ27M6V3' where id=5; -update noar tt set v0='W08S2MF5WBGL2EGYSKXMP' where id=6; -update noar ti set v0='W08S2MF5WBGL2EGYSKXMP' where id=6; -update noar tt set b0='OIQZP03O4WLDJNX4PIMQ7IX' where id=6; -update noar ti set b0='OIQZP03O4WLDJNX4PIMQ7IX' where id=6; -update noar tt set v0='TGT' where id=6; -update noar ti set v0='TGT' where id=6; -update noar tt set b1='A' where id=6; -update noar ti set b1='A' where id=6; -update noar tt set v0='764RESI3Q' where id=6; -update noar ti set v0='764RESI3Q' where id=6; -update noar tt set b2='6' where id=6; -update noar ti set b2='6' where id=6; -update noar tt set v0='7BAO314HNL61D' where id=7; -update noar ti set v0='7BAO314HNL61D' where id=7; -update noar tt set b0='L8QMLIURK' where id=7; -update noar ti set b0='L8QMLIURK' where id=7; -update noar tt set v0='91ZVZS14NYX' where id=7; -update noar ti set v0='91ZVZS14NYX' where id=7; -update noar tt set b1='EC99D' where id=7; -update noar ti set b1='EC99D' where id=7; -update noar tt set v0='7MWYVKTNC7' where id=7; -update noar ti set v0='7MWYVKTNC7' where id=7; -update noar tt set b2='D139L8F4BICXB2M34' where id=7; -update noar ti set b2='D139L8F4BICXB2M34' where id=7; -update noar tt set v0='U' where id=8; -update noar ti set v0='U' where id=8; -update noar tt set b0='XSY2VZ07AXYUO0NS77ESUHBR' where id=8; -update noar ti set b0='XSY2VZ07AXYUO0NS77ESUHBR' where id=8; -update noar tt set v0='GCR' where id=8; -update noar ti set v0='GCR' where id=8; -update noar tt set b1='7749S6RDRLQV' where id=8; -update noar ti set b1='7749S6RDRLQV' where id=8; -update noar tt set v0='25CYCOGKTM6DEU17' where id=8; -update noar ti set v0='25CYCOGKTM6DEU17' where id=8; -update noar tt set b2='AXJ5W' where id=8; -update noar ti set b2='AXJ5W' where id=8; -update noar tt set v0='4P3MNGQRKFGRP' where id=9; -update noar ti set v0='4P3MNGQRKFGRP' where id=9; -update noar tt set b0='ZOE411' where id=9; -update noar ti set b0='ZOE411' where id=9; -update noar tt set v0='2BWZ0FDLXYLJB' where id=9; -update noar ti set v0='2BWZ0FDLXYLJB' where id=9; -update noar tt set b1='QKOYU80ZTH4JESLZW5T44PKV' where id=9; -update noar ti set b1='QKOYU80ZTH4JESLZW5T44PKV' where id=9; -update noar tt set v0='XYHEEQG3ANCU' where id=9; -update noar ti set v0='XYHEEQG3ANCU' where id=9; -update noar tt set b2='Y' where id=9; -update noar ti set b2='Y' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 longblob null, -b1 tinyblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='AMKN518R' where id=1; -update noar ti set v0='AMKN518R' where id=1; -update noar tt set b0='0FXWYX' where id=1; -update noar ti set b0='0FXWYX' where id=1; -update noar tt set v0='DS7H4U6ZVWBNESD40PO' where id=1; -update noar ti set v0='DS7H4U6ZVWBNESD40PO' where id=1; -update noar tt set b1='0MRZJXM80RDB' where id=1; -update noar ti set b1='0MRZJXM80RDB' where id=1; -update noar tt set v0='YGG' where id=1; -update noar ti set v0='YGG' where id=1; -update noar tt set b2='8PDQZGLX0B16C6R4WD0' where id=1; -update noar ti set b2='8PDQZGLX0B16C6R4WD0' where id=1; -update noar tt set v0='AOW238NCU56ABN9AX8SYH24ICP1SGJA' where id=2; -update noar ti set v0='AOW238NCU56ABN9AX8SYH24ICP1SGJA' where id=2; -update noar tt set b0='P271B61YFCH04QI9' where id=2; -update noar ti set b0='P271B61YFCH04QI9' where id=2; -update noar tt set v0='R0AG194' where id=2; -update noar ti set v0='R0AG194' where id=2; -update noar tt set b1='DXM59' where id=2; -update noar ti set b1='DXM59' where id=2; -update noar tt set v0='1GAFD' where id=2; -update noar ti set v0='1GAFD' where id=2; -update noar tt set b2='V08C' where id=2; -update noar ti set b2='V08C' where id=2; -update noar tt set v0='UESSCADYUXHI603Z66AQKPB' where id=3; -update noar ti set v0='UESSCADYUXHI603Z66AQKPB' where id=3; -update noar tt set b0='0OO05YC8NW53LXJQ7K3SU5UH9' where id=3; -update noar ti set b0='0OO05YC8NW53LXJQ7K3SU5UH9' where id=3; -update noar tt set v0='ADE7SQ1MM7UTY1S3044JX' where id=3; -update noar ti set v0='ADE7SQ1MM7UTY1S3044JX' where id=3; -update noar tt set b1='6MZJOLDIY0YN8Q' where id=3; -update noar ti set b1='6MZJOLDIY0YN8Q' where id=3; -update noar tt set v0='WDCN6P3APTUDKJBE8UM9MMPSBZSVM3' where id=3; -update noar ti set v0='WDCN6P3APTUDKJBE8UM9MMPSBZSVM3' where id=3; -update noar tt set b2='XGPXTP5HYBY0GXYUPKSFWQOSCR' where id=3; -update noar ti set b2='XGPXTP5HYBY0GXYUPKSFWQOSCR' where id=3; -update noar tt set v0='IA1M3GZP' where id=4; -update noar ti set v0='IA1M3GZP' where id=4; -update noar tt set b0='XFW9XK8F7V3YWPE72NEXILJOR2X1W' where id=4; -update noar ti set b0='XFW9XK8F7V3YWPE72NEXILJOR2X1W' where id=4; -update noar tt set v0='RJ25GDFJ6FLETIGOLK' where id=4; -update noar ti set v0='RJ25GDFJ6FLETIGOLK' where id=4; -update noar tt set b1='B5CV97LRB29AM0MLYPYXC3S' where id=4; -update noar ti set b1='B5CV97LRB29AM0MLYPYXC3S' where id=4; -update noar tt set v0='3EO' where id=4; -update noar ti set v0='3EO' where id=4; -update noar tt set b2='2GRR0CMCH4DNQL663JRX5' where id=4; -update noar ti set b2='2GRR0CMCH4DNQL663JRX5' where id=4; -update noar tt set v0='F2HM9HI4TDCYSULTE' where id=5; -update noar ti set v0='F2HM9HI4TDCYSULTE' where id=5; -update noar tt set b0='1516QOFM8HYHA' where id=5; -update noar ti set b0='1516QOFM8HYHA' where id=5; -update noar tt set v0='1K3' where id=5; -update noar ti set v0='1K3' where id=5; -update noar tt set b1='H' where id=5; -update noar ti set b1='H' where id=5; -update noar tt set v0='53XP3Q38QT' where id=5; -update noar ti set v0='53XP3Q38QT' where id=5; -update noar tt set b2='A0Y8M7A7BH74LJT63Q8A' where id=5; -update noar ti set b2='A0Y8M7A7BH74LJT63Q8A' where id=5; -update noar tt set v0='NI5ZAZXKLQERKZLZ9RA190EUS' where id=6; -update noar ti set v0='NI5ZAZXKLQERKZLZ9RA190EUS' where id=6; -update noar tt set b0='N749' where id=6; -update noar ti set b0='N749' where id=6; -update noar tt set v0='BJIUELODFXRKSTUT5ZMX9AWFREPTN7' where id=6; -update noar ti set v0='BJIUELODFXRKSTUT5ZMX9AWFREPTN7' where id=6; -update noar tt set b1='CWKMETCRQY588KS' where id=6; -update noar ti set b1='CWKMETCRQY588KS' where id=6; -update noar tt set v0='1P7O51T11A81QLQ8BAQ2IYF' where id=6; -update noar ti set v0='1P7O51T11A81QLQ8BAQ2IYF' where id=6; -update noar tt set b2='5MAFSL7XGACIL46HYXUY' where id=6; -update noar ti set b2='5MAFSL7XGACIL46HYXUY' where id=6; -update noar tt set v0='AXQV94DIW' where id=7; -update noar ti set v0='AXQV94DIW' where id=7; -update noar tt set b0='NQS9SRKTXP9' where id=7; -update noar ti set b0='NQS9SRKTXP9' where id=7; -update noar tt set v0='PFBEWG2NMJ6MN61RD1GJ7ANVSZONP3N8' where id=7; -update noar ti set v0='PFBEWG2NMJ6MN61RD1GJ7ANVSZONP3N8' where id=7; -update noar tt set b1='JV57OKZV6KJU8L5KD3NRQV86' where id=7; -update noar ti set b1='JV57OKZV6KJU8L5KD3NRQV86' where id=7; -update noar tt set v0='FXCIF6H9S7OZ5MRVB' where id=7; -update noar ti set v0='FXCIF6H9S7OZ5MRVB' where id=7; -update noar tt set b2='BYTJIU1IW6SRY' where id=7; -update noar ti set b2='BYTJIU1IW6SRY' where id=7; -update noar tt set v0='ARDKPAQZB62ST2MYFV9DRFY7Y' where id=8; -update noar ti set v0='ARDKPAQZB62ST2MYFV9DRFY7Y' where id=8; -update noar tt set b0='GBBERWWWTH7YJCCSIC6' where id=8; -update noar ti set b0='GBBERWWWTH7YJCCSIC6' where id=8; -update noar tt set v0='IAYJ3L6OPXV1T16WFD04P88SMS6I' where id=8; -update noar ti set v0='IAYJ3L6OPXV1T16WFD04P88SMS6I' where id=8; -update noar tt set b1='G0FE61ARBFKMOVDL81P4WG4CW56' where id=8; -update noar ti set b1='G0FE61ARBFKMOVDL81P4WG4CW56' where id=8; -update noar tt set v0='KL9H6FWKTTNJ8DMCD2LJXFX9YN' where id=8; -update noar ti set v0='KL9H6FWKTTNJ8DMCD2LJXFX9YN' where id=8; -update noar tt set b2='ZGCH2QY2USXDSUULHJTWDLZEGFRZOWI' where id=8; -update noar ti set b2='ZGCH2QY2USXDSUULHJTWDLZEGFRZOWI' where id=8; -update noar tt set v0='RDB0SV' where id=9; -update noar ti set v0='RDB0SV' where id=9; -update noar tt set b0='CP4D3J8INCWF9RDZ9FHN2' where id=9; -update noar ti set b0='CP4D3J8INCWF9RDZ9FHN2' where id=9; -update noar tt set v0='WTTNO' where id=9; -update noar ti set v0='WTTNO' where id=9; -update noar tt set b1='EY5N7RCKWEP9TA8QOQY7' where id=9; -update noar ti set b1='EY5N7RCKWEP9TA8QOQY7' where id=9; -update noar tt set v0='UCSEZ4HAY27S4VPB8EPPMJLQYDR6EY9' where id=9; -update noar ti set v0='UCSEZ4HAY27S4VPB8EPPMJLQYDR6EY9' where id=9; -update noar tt set b2='3L53BEZVT2YKOYV1WOE9MQHCH06CQT' where id=9; -update noar ti set b2='3L53BEZVT2YKOYV1WOE9MQHCH06CQT' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 longblob null, -b1 tinyblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='SOWO51D' where id=1; -update noar ti set v0='SOWO51D' where id=1; -update noar tt set b0='CW42JX9F' where id=1; -update noar ti set b0='CW42JX9F' where id=1; -update noar tt set v0='9352UQCNYHHRRX22HL' where id=1; -update noar ti set v0='9352UQCNYHHRRX22HL' where id=1; -update noar tt set b1='L5UR0OGI3WQ2MGI9797A3W087NZ3UZ' where id=1; -update noar ti set b1='L5UR0OGI3WQ2MGI9797A3W087NZ3UZ' where id=1; -update noar tt set v0='KJ0I2YS7XM5L2NA' where id=1; -update noar ti set v0='KJ0I2YS7XM5L2NA' where id=1; -update noar tt set b2='K6OT2MVZJ60BM' where id=1; -update noar ti set b2='K6OT2MVZJ60BM' where id=1; -update noar tt set v0='1R' where id=2; -update noar ti set v0='1R' where id=2; -update noar tt set b0='YNLCQAN6VRAZ5582G4QHZKY' where id=2; -update noar ti set b0='YNLCQAN6VRAZ5582G4QHZKY' where id=2; -update noar tt set v0='CF' where id=2; -update noar ti set v0='CF' where id=2; -update noar tt set b1='LGA0GYM4B' where id=2; -update noar ti set b1='LGA0GYM4B' where id=2; -update noar tt set v0='ZETIV9WPQIXMXO' where id=2; -update noar ti set v0='ZETIV9WPQIXMXO' where id=2; -update noar tt set b2='084R77QBRAE8WR3628C9WWDPZG3OFF82' where id=2; -update noar ti set b2='084R77QBRAE8WR3628C9WWDPZG3OFF82' where id=2; -update noar tt set v0='HHJLNXF0DYJO' where id=3; -update noar ti set v0='HHJLNXF0DYJO' where id=3; -update noar tt set b0='TFGZ6T98E' where id=3; -update noar ti set b0='TFGZ6T98E' where id=3; -update noar tt set v0='Q7WE08LW97RNLVQ2HE2' where id=3; -update noar ti set v0='Q7WE08LW97RNLVQ2HE2' where id=3; -update noar tt set b1='PK27J26DJRNSE8Z5Y3D' where id=3; -update noar ti set b1='PK27J26DJRNSE8Z5Y3D' where id=3; -update noar tt set v0='KS3DE63Z9GCZTFH0Y6S6D6LUFS2Q16' where id=3; -update noar ti set v0='KS3DE63Z9GCZTFH0Y6S6D6LUFS2Q16' where id=3; -update noar tt set b2='Y7H0IDONT9IFRBSRU53PBB3OBEYZP' where id=3; -update noar ti set b2='Y7H0IDONT9IFRBSRU53PBB3OBEYZP' where id=3; -update noar tt set v0='8W2CJVT4WA54UI' where id=4; -update noar ti set v0='8W2CJVT4WA54UI' where id=4; -update noar tt set b0='KR9MOZJ77HSZY1DM6QDYQRMF' where id=4; -update noar ti set b0='KR9MOZJ77HSZY1DM6QDYQRMF' where id=4; -update noar tt set v0='V73' where id=4; -update noar ti set v0='V73' where id=4; -update noar tt set b1='ODYJBLEREP6' where id=4; -update noar ti set b1='ODYJBLEREP6' where id=4; -update noar tt set v0='NZQ4D2' where id=4; -update noar ti set v0='NZQ4D2' where id=4; -update noar tt set b2='PQAZ5' where id=4; -update noar ti set b2='PQAZ5' where id=4; -update noar tt set v0='0RDJOP1076MERNE' where id=5; -update noar ti set v0='0RDJOP1076MERNE' where id=5; -update noar tt set b0='1QDVZPW6WRZSI12' where id=5; -update noar ti set b0='1QDVZPW6WRZSI12' where id=5; -update noar tt set v0='RTYH5GEXL24NL6YUUMZZ0D' where id=5; -update noar ti set v0='RTYH5GEXL24NL6YUUMZZ0D' where id=5; -update noar tt set b1='8ZWA3JYXBJW5MTFW8E1' where id=5; -update noar ti set b1='8ZWA3JYXBJW5MTFW8E1' where id=5; -update noar tt set v0='AQCVQ1AENG3NLEL7R65GAD' where id=5; -update noar ti set v0='AQCVQ1AENG3NLEL7R65GAD' where id=5; -update noar tt set b2='12M9TR' where id=5; -update noar ti set b2='12M9TR' where id=5; -update noar tt set v0='OGWXVFYWBCCHAKOT0F7B600VSES4' where id=6; -update noar ti set v0='OGWXVFYWBCCHAKOT0F7B600VSES4' where id=6; -update noar tt set b0='PFR11' where id=6; -update noar ti set b0='PFR11' where id=6; -update noar tt set v0='NM' where id=6; -update noar ti set v0='NM' where id=6; -update noar tt set b1='YO' where id=6; -update noar ti set b1='YO' where id=6; -update noar tt set v0='08' where id=6; -update noar ti set v0='08' where id=6; -update noar tt set b2='ZAFFIM7JPH5XQ8QMWX' where id=6; -update noar ti set b2='ZAFFIM7JPH5XQ8QMWX' where id=6; -update noar tt set v0='TL3PSNXPZEXVJ9MJJ034' where id=7; -update noar ti set v0='TL3PSNXPZEXVJ9MJJ034' where id=7; -update noar tt set b0='D33GM' where id=7; -update noar ti set b0='D33GM' where id=7; -update noar tt set v0='SWGVJF9M' where id=7; -update noar ti set v0='SWGVJF9M' where id=7; -update noar tt set b1='VXRVHPBENQ50KG65JIHR' where id=7; -update noar ti set b1='VXRVHPBENQ50KG65JIHR' where id=7; -update noar tt set v0='ARKIXE' where id=7; -update noar ti set v0='ARKIXE' where id=7; -update noar tt set b2='QSGER' where id=7; -update noar ti set b2='QSGER' where id=7; -update noar tt set v0='ROIXMP10Q9Y3KN5AVX9GUG' where id=8; -update noar ti set v0='ROIXMP10Q9Y3KN5AVX9GUG' where id=8; -update noar tt set b0='RKGA9Y3U6QZ77YJ5KS00O' where id=8; -update noar ti set b0='RKGA9Y3U6QZ77YJ5KS00O' where id=8; -update noar tt set v0='F7D8ZEV0' where id=8; -update noar ti set v0='F7D8ZEV0' where id=8; -update noar tt set b1='JBKE385POLSW3QALFRCN' where id=8; -update noar ti set b1='JBKE385POLSW3QALFRCN' where id=8; -update noar tt set v0='ORW3Y9T11C8Q' where id=8; -update noar ti set v0='ORW3Y9T11C8Q' where id=8; -update noar tt set b2='LWNNCF8H' where id=8; -update noar ti set b2='LWNNCF8H' where id=8; -update noar tt set v0='FHU92WKHX4KUMNRKHK1K5MJNPCWVGFD' where id=9; -update noar ti set v0='FHU92WKHX4KUMNRKHK1K5MJNPCWVGFD' where id=9; -update noar tt set b0='X96QN56HQU83HKPWEKB' where id=9; -update noar ti set b0='X96QN56HQU83HKPWEKB' where id=9; -update noar tt set v0='ONNW9IYZZ2N6R' where id=9; -update noar ti set v0='ONNW9IYZZ2N6R' where id=9; -update noar tt set b1='KH3TJ' where id=9; -update noar ti set b1='KH3TJ' where id=9; -update noar tt set v0='CTE13H2593J839' where id=9; -update noar ti set v0='CTE13H2593J839' where id=9; -update noar tt set b2='RD7AZ' where id=9; -update noar ti set b2='RD7AZ' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 longblob not null, -b1 tinyblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='JYD0' where id=1; -update noar ti set v0='JYD0' where id=1; -update noar tt set b0='F7IB' where id=1; -update noar ti set b0='F7IB' where id=1; -update noar tt set v0='J5' where id=1; -update noar ti set v0='J5' where id=1; -update noar tt set b1='XDODL' where id=1; -update noar ti set b1='XDODL' where id=1; -update noar tt set v0='SKJ1150CIQOO1DWL81E' where id=1; -update noar ti set v0='SKJ1150CIQOO1DWL81E' where id=1; -update noar tt set b2='LX2KWJKX1MWC9ZEPM49DCKY' where id=1; -update noar ti set b2='LX2KWJKX1MWC9ZEPM49DCKY' where id=1; -update noar tt set v0='GVXF2MFZ5H0GTKIJ6D70K1R3PZFR' where id=2; -update noar ti set v0='GVXF2MFZ5H0GTKIJ6D70K1R3PZFR' where id=2; -update noar tt set b0='09DA' where id=2; -update noar ti set b0='09DA' where id=2; -update noar tt set v0='CRJN1TBRKT5T5GOEMVG' where id=2; -update noar ti set v0='CRJN1TBRKT5T5GOEMVG' where id=2; -update noar tt set b1='F0JMXZ7S90' where id=2; -update noar ti set b1='F0JMXZ7S90' where id=2; -update noar tt set v0='LP6A6' where id=2; -update noar ti set v0='LP6A6' where id=2; -update noar tt set b2='UIQD0KP1CHQLUDI3' where id=2; -update noar ti set b2='UIQD0KP1CHQLUDI3' where id=2; -update noar tt set v0='22LYYRZJHDF5NL2UDXUNRB8T5' where id=3; -update noar ti set v0='22LYYRZJHDF5NL2UDXUNRB8T5' where id=3; -update noar tt set b0='JL4E4EX51Y1H9GIH8VZ5ZLYIM8S2EGM9' where id=3; -update noar ti set b0='JL4E4EX51Y1H9GIH8VZ5ZLYIM8S2EGM9' where id=3; -update noar tt set v0='V9EHCQKJZP7BBEWPCYGUMY0' where id=3; -update noar ti set v0='V9EHCQKJZP7BBEWPCYGUMY0' where id=3; -update noar tt set b1='EWV05LVNEISX2' where id=3; -update noar ti set b1='EWV05LVNEISX2' where id=3; -update noar tt set v0='8MDS8' where id=3; -update noar ti set v0='8MDS8' where id=3; -update noar tt set b2='UTDKHY1MRV5GM9LZJ8E8XWK6TV6ZJADW' where id=3; -update noar ti set b2='UTDKHY1MRV5GM9LZJ8E8XWK6TV6ZJADW' where id=3; -update noar tt set v0='VQV6NYXA69FRRCN9ZF' where id=4; -update noar ti set v0='VQV6NYXA69FRRCN9ZF' where id=4; -update noar tt set b0='LGGD3WK09KYHRF40S06JS9XS' where id=4; -update noar ti set b0='LGGD3WK09KYHRF40S06JS9XS' where id=4; -update noar tt set v0='H0L5VK4HARVUKH6LD69QCK4' where id=4; -update noar ti set v0='H0L5VK4HARVUKH6LD69QCK4' where id=4; -update noar tt set b1='96DVSAFX6U5DZYW89SH3R7ALK' where id=4; -update noar ti set b1='96DVSAFX6U5DZYW89SH3R7ALK' where id=4; -update noar tt set v0='3VUSH3BLQ36VWLSED6EHH85R' where id=4; -update noar ti set v0='3VUSH3BLQ36VWLSED6EHH85R' where id=4; -update noar tt set b2='BKGOPGAJZKADFH5KGY6LBPF' where id=4; -update noar ti set b2='BKGOPGAJZKADFH5KGY6LBPF' where id=4; -update noar tt set v0='8ZLDZ8PWMTE1A9XK94RQ7TS' where id=5; -update noar ti set v0='8ZLDZ8PWMTE1A9XK94RQ7TS' where id=5; -update noar tt set b0='YOMCYS3K88OSZ6V2' where id=5; -update noar ti set b0='YOMCYS3K88OSZ6V2' where id=5; -update noar tt set v0='4WGEQV1EISR' where id=5; -update noar ti set v0='4WGEQV1EISR' where id=5; -update noar tt set b1='9LED93E1RDOJ9' where id=5; -update noar ti set b1='9LED93E1RDOJ9' where id=5; -update noar tt set v0='1UGDMIJREX58WFGDWFJYH8IYV308L' where id=5; -update noar ti set v0='1UGDMIJREX58WFGDWFJYH8IYV308L' where id=5; -update noar tt set b2='9M0EZCD' where id=5; -update noar ti set b2='9M0EZCD' where id=5; -update noar tt set v0='5' where id=6; -update noar ti set v0='5' where id=6; -update noar tt set b0='OKT9FZDP9K0CVL0A4V9E' where id=6; -update noar ti set b0='OKT9FZDP9K0CVL0A4V9E' where id=6; -update noar tt set v0='5UEGPRI7PWJC2F1KPFLB' where id=6; -update noar ti set v0='5UEGPRI7PWJC2F1KPFLB' where id=6; -update noar tt set b1='180KB' where id=6; -update noar ti set b1='180KB' where id=6; -update noar tt set v0='GCNA' where id=6; -update noar ti set v0='GCNA' where id=6; -update noar tt set b2='IK83PAN49HVMR' where id=6; -update noar ti set b2='IK83PAN49HVMR' where id=6; -update noar tt set v0='TCMPVZMV122EWAOB4ZVT5TBB' where id=7; -update noar ti set v0='TCMPVZMV122EWAOB4ZVT5TBB' where id=7; -update noar tt set b0='YS7RLIHD6SLTJ' where id=7; -update noar ti set b0='YS7RLIHD6SLTJ' where id=7; -update noar tt set v0='WANRFGN5' where id=7; -update noar ti set v0='WANRFGN5' where id=7; -update noar tt set b1='YTKXXC1XV8QFQLIAYON5LIXE2VWZDZ' where id=7; -update noar ti set b1='YTKXXC1XV8QFQLIAYON5LIXE2VWZDZ' where id=7; -update noar tt set v0='UTW2A2' where id=7; -update noar ti set v0='UTW2A2' where id=7; -update noar tt set b2='C0V' where id=7; -update noar ti set b2='C0V' where id=7; -update noar tt set v0='O0SOVFM9E7YD' where id=8; -update noar ti set v0='O0SOVFM9E7YD' where id=8; -update noar tt set b0='HJRRZ5IGYO1AA6MIDA7LFQQY' where id=8; -update noar ti set b0='HJRRZ5IGYO1AA6MIDA7LFQQY' where id=8; -update noar tt set v0='SZBZALZOODO9ME1ZTUUI26P' where id=8; -update noar ti set v0='SZBZALZOODO9ME1ZTUUI26P' where id=8; -update noar tt set b1='4HSU2L8IQV5H20Y' where id=8; -update noar ti set b1='4HSU2L8IQV5H20Y' where id=8; -update noar tt set v0='L0DPUJENALYJIG2D87N0' where id=8; -update noar ti set v0='L0DPUJENALYJIG2D87N0' where id=8; -update noar tt set b2='74SM' where id=8; -update noar ti set b2='74SM' where id=8; -update noar tt set v0='ASF47OFFZ7Y0DUSXG08T' where id=9; -update noar ti set v0='ASF47OFFZ7Y0DUSXG08T' where id=9; -update noar tt set b0='ZUM' where id=9; -update noar ti set b0='ZUM' where id=9; -update noar tt set v0='U2Q0' where id=9; -update noar ti set v0='U2Q0' where id=9; -update noar tt set b1='8IA2SRMDYD' where id=9; -update noar ti set b1='8IA2SRMDYD' where id=9; -update noar tt set v0='NN69CTRFMB9QYOQ' where id=9; -update noar ti set v0='NN69CTRFMB9QYOQ' where id=9; -update noar tt set b2='ZWMPABBX5CZZJXDOS12GKS' where id=9; -update noar ti set b2='ZWMPABBX5CZZJXDOS12GKS' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 longblob not null, -b1 tinyblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='M99S8I2IRCQH5CD46VLA427' where id=1; -update noar ti set v0='M99S8I2IRCQH5CD46VLA427' where id=1; -update noar tt set b0='4E02MII1T7NLO' where id=1; -update noar ti set b0='4E02MII1T7NLO' where id=1; -update noar tt set v0='3J573ZT' where id=1; -update noar ti set v0='3J573ZT' where id=1; -update noar tt set b1='QRF9UIKJ5DLZ2YQCKXP1I' where id=1; -update noar ti set b1='QRF9UIKJ5DLZ2YQCKXP1I' where id=1; -update noar tt set v0='19SDTJ5F9B9QX266FTKW' where id=1; -update noar ti set v0='19SDTJ5F9B9QX266FTKW' where id=1; -update noar tt set b2='SSHDFQ7UTSKK6PV9WSSZ42PLV' where id=1; -update noar ti set b2='SSHDFQ7UTSKK6PV9WSSZ42PLV' where id=1; -update noar tt set v0='PC' where id=2; -update noar ti set v0='PC' where id=2; -update noar tt set b0='8' where id=2; -update noar ti set b0='8' where id=2; -update noar tt set v0='6E4ZRH4NFG188CWEN2' where id=2; -update noar ti set v0='6E4ZRH4NFG188CWEN2' where id=2; -update noar tt set b1='XBUMIMTVN86' where id=2; -update noar ti set b1='XBUMIMTVN86' where id=2; -update noar tt set v0='NHWR4UJ04FKKNC' where id=2; -update noar ti set v0='NHWR4UJ04FKKNC' where id=2; -update noar tt set b2='0XKDA8UWY9K' where id=2; -update noar ti set b2='0XKDA8UWY9K' where id=2; -update noar tt set v0='ZJ5DUZWT175X7OJUWL3ENVU' where id=3; -update noar ti set v0='ZJ5DUZWT175X7OJUWL3ENVU' where id=3; -update noar tt set b0='QUE2HOAPC5OL250AN39QO4HT' where id=3; -update noar ti set b0='QUE2HOAPC5OL250AN39QO4HT' where id=3; -update noar tt set v0='TII50M0DWAHABRACZ' where id=3; -update noar ti set v0='TII50M0DWAHABRACZ' where id=3; -update noar tt set b1='9RPJ3TE7G' where id=3; -update noar ti set b1='9RPJ3TE7G' where id=3; -update noar tt set v0='K' where id=3; -update noar ti set v0='K' where id=3; -update noar tt set b2='PY72N2Y98VISCGZ3Q8ADOURI6CE' where id=3; -update noar ti set b2='PY72N2Y98VISCGZ3Q8ADOURI6CE' where id=3; -update noar tt set v0='B0D033EEHKFT1XHNT' where id=4; -update noar ti set v0='B0D033EEHKFT1XHNT' where id=4; -update noar tt set b0='X' where id=4; -update noar ti set b0='X' where id=4; -update noar tt set v0='P1049NF91FRET2FUMFI' where id=4; -update noar ti set v0='P1049NF91FRET2FUMFI' where id=4; -update noar tt set b1='QALRV6BAVNH36RX171OIEK3F58' where id=4; -update noar ti set b1='QALRV6BAVNH36RX171OIEK3F58' where id=4; -update noar tt set v0='P3UJI0DVU596CVXB672JJXNF1Q4S7' where id=4; -update noar ti set v0='P3UJI0DVU596CVXB672JJXNF1Q4S7' where id=4; -update noar tt set b2='BVH124539SW3IWLJYF58E5QWRWVUQC' where id=4; -update noar ti set b2='BVH124539SW3IWLJYF58E5QWRWVUQC' where id=4; -update noar tt set v0='PG4FFS7E1VI8DC0' where id=5; -update noar ti set v0='PG4FFS7E1VI8DC0' where id=5; -update noar tt set b0='FVFGBLHRA2AEPZ80FBIMYK8' where id=5; -update noar ti set b0='FVFGBLHRA2AEPZ80FBIMYK8' where id=5; -update noar tt set v0='U75IP181HOE0ZN8YWHG8V39WG09O65' where id=5; -update noar ti set v0='U75IP181HOE0ZN8YWHG8V39WG09O65' where id=5; -update noar tt set b1='JYTQFQM3S911GD2N80' where id=5; -update noar ti set b1='JYTQFQM3S911GD2N80' where id=5; -update noar tt set v0='MF6276OYVE3R2934LBEB9QKM5CKO' where id=5; -update noar ti set v0='MF6276OYVE3R2934LBEB9QKM5CKO' where id=5; -update noar tt set b2='TCB20NFDJ8QHO' where id=5; -update noar ti set b2='TCB20NFDJ8QHO' where id=5; -update noar tt set v0='08G6WYWFI0L8S3OXI68GG693DE' where id=6; -update noar ti set v0='08G6WYWFI0L8S3OXI68GG693DE' where id=6; -update noar tt set b0='VXO' where id=6; -update noar ti set b0='VXO' where id=6; -update noar tt set v0='4L8V81BY30LDLGCOCWNJITDCXB' where id=6; -update noar ti set v0='4L8V81BY30LDLGCOCWNJITDCXB' where id=6; -update noar tt set b1='DKXOXHBHWPD' where id=6; -update noar ti set b1='DKXOXHBHWPD' where id=6; -update noar tt set v0='IBESIH8QFN7PA68NJYP1Q3MQQVY16OI0' where id=6; -update noar ti set v0='IBESIH8QFN7PA68NJYP1Q3MQQVY16OI0' where id=6; -update noar tt set b2='GF9O9W' where id=6; -update noar ti set b2='GF9O9W' where id=6; -update noar tt set v0='DUPB' where id=7; -update noar ti set v0='DUPB' where id=7; -update noar tt set b0='0342H1DT' where id=7; -update noar ti set b0='0342H1DT' where id=7; -update noar tt set v0='CCFHHSTSW7R5JFH9OJZGY6' where id=7; -update noar ti set v0='CCFHHSTSW7R5JFH9OJZGY6' where id=7; -update noar tt set b1='IPIH7' where id=7; -update noar ti set b1='IPIH7' where id=7; -update noar tt set v0='CTLXLPUUCKCJ0H7QOLEH7E8' where id=7; -update noar ti set v0='CTLXLPUUCKCJ0H7QOLEH7E8' where id=7; -update noar tt set b2='AUATGUTLUG2UUG5' where id=7; -update noar ti set b2='AUATGUTLUG2UUG5' where id=7; -update noar tt set v0='LQ3KPTKAQL4GMMU0E28XYH' where id=8; -update noar ti set v0='LQ3KPTKAQL4GMMU0E28XYH' where id=8; -update noar tt set b0='O2V' where id=8; -update noar ti set b0='O2V' where id=8; -update noar tt set v0='ZZDDAR0BFVUBKX8JVND1AWZMT' where id=8; -update noar ti set v0='ZZDDAR0BFVUBKX8JVND1AWZMT' where id=8; -update noar tt set b1='YTA1C6K' where id=8; -update noar ti set b1='YTA1C6K' where id=8; -update noar tt set v0='ATJMIRC6E9DPYSBMOYLPG' where id=8; -update noar ti set v0='ATJMIRC6E9DPYSBMOYLPG' where id=8; -update noar tt set b2='OAMZA90FIE4LGI3VO8MF41V' where id=8; -update noar ti set b2='OAMZA90FIE4LGI3VO8MF41V' where id=8; -update noar tt set v0='X4NIW' where id=9; -update noar ti set v0='X4NIW' where id=9; -update noar tt set b0='9N9UOM7OD2Y' where id=9; -update noar ti set b0='9N9UOM7OD2Y' where id=9; -update noar tt set v0='5FTKNURQNRN1L9C5' where id=9; -update noar ti set v0='5FTKNURQNRN1L9C5' where id=9; -update noar tt set b1='PYWNLU2O' where id=9; -update noar ti set b1='PYWNLU2O' where id=9; -update noar tt set v0='CUSL3R0T4ZX13HWHVQZ77FGZ2L' where id=9; -update noar ti set v0='CUSL3R0T4ZX13HWHVQZ77FGZ2L' where id=9; -update noar tt set b2='M00LOB' where id=9; -update noar ti set b2='M00LOB' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 longblob null, -b1 blob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='HP56HAOK' where id=1; -update noar ti set v0='HP56HAOK' where id=1; -update noar tt set b0='G7OLRDEPR5' where id=1; -update noar ti set b0='G7OLRDEPR5' where id=1; -update noar tt set v0='TTIJTJ08I1K5B1GQY8LFP' where id=1; -update noar ti set v0='TTIJTJ08I1K5B1GQY8LFP' where id=1; -update noar tt set b1='6' where id=1; -update noar ti set b1='6' where id=1; -update noar tt set v0='MHGB7T49EQF3M' where id=1; -update noar ti set v0='MHGB7T49EQF3M' where id=1; -update noar tt set b2='6O1ZHDJRLNQM63MO54ODB2WYFBOGPYF9' where id=1; -update noar ti set b2='6O1ZHDJRLNQM63MO54ODB2WYFBOGPYF9' where id=1; -update noar tt set v0='P90QC5LM26OF21JSV6A2136YZ9' where id=2; -update noar ti set v0='P90QC5LM26OF21JSV6A2136YZ9' where id=2; -update noar tt set b0='QECR' where id=2; -update noar ti set b0='QECR' where id=2; -update noar tt set v0='989AOHSSCCMSVGG65' where id=2; -update noar ti set v0='989AOHSSCCMSVGG65' where id=2; -update noar tt set b1='ZQCDRG9FDEWN79E' where id=2; -update noar ti set b1='ZQCDRG9FDEWN79E' where id=2; -update noar tt set v0='WK32FBBR9827K' where id=2; -update noar ti set v0='WK32FBBR9827K' where id=2; -update noar tt set b2='ZT3U0RYHX1H' where id=2; -update noar ti set b2='ZT3U0RYHX1H' where id=2; -update noar tt set v0='G2' where id=3; -update noar ti set v0='G2' where id=3; -update noar tt set b0='0U921ZG' where id=3; -update noar ti set b0='0U921ZG' where id=3; -update noar tt set v0='SJHW7YC8VP1LT4C60XB44OHBYGI6C9' where id=3; -update noar ti set v0='SJHW7YC8VP1LT4C60XB44OHBYGI6C9' where id=3; -update noar tt set b1='GT7CZO' where id=3; -update noar ti set b1='GT7CZO' where id=3; -update noar tt set v0='EMDIIWNNKLPJ8G6HYJIBHP4GO46LP2' where id=3; -update noar ti set v0='EMDIIWNNKLPJ8G6HYJIBHP4GO46LP2' where id=3; -update noar tt set b2='C1MUT9JRB' where id=3; -update noar ti set b2='C1MUT9JRB' where id=3; -update noar tt set v0='84PG8AQZXQ8VK4641GAAXQY1DY' where id=4; -update noar ti set v0='84PG8AQZXQ8VK4641GAAXQY1DY' where id=4; -update noar tt set b0='LJX3BN' where id=4; -update noar ti set b0='LJX3BN' where id=4; -update noar tt set v0='A6XG9' where id=4; -update noar ti set v0='A6XG9' where id=4; -update noar tt set b1='FNTLKKP9MLO81YB11D7EL' where id=4; -update noar ti set b1='FNTLKKP9MLO81YB11D7EL' where id=4; -update noar tt set v0='VX2X33TZ0SWL6LFCL' where id=4; -update noar ti set v0='VX2X33TZ0SWL6LFCL' where id=4; -update noar tt set b2='8DV7LQHXA1M18BGMYOW3R2ZP936AMGS' where id=4; -update noar ti set b2='8DV7LQHXA1M18BGMYOW3R2ZP936AMGS' where id=4; -update noar tt set v0='EB4LMO7AFXFH82QSPA4M' where id=5; -update noar ti set v0='EB4LMO7AFXFH82QSPA4M' where id=5; -update noar tt set b0='UY7V4U2QSC8' where id=5; -update noar ti set b0='UY7V4U2QSC8' where id=5; -update noar tt set v0='JQXOX' where id=5; -update noar ti set v0='JQXOX' where id=5; -update noar tt set b1='5JF27Q2T3T' where id=5; -update noar ti set b1='5JF27Q2T3T' where id=5; -update noar tt set v0='IWGULX' where id=5; -update noar ti set v0='IWGULX' where id=5; -update noar tt set b2='KWCI258S5SZJ7' where id=5; -update noar ti set b2='KWCI258S5SZJ7' where id=5; -update noar tt set v0='YX524FJRZ5LHPU2K1CIQ2FYRR1' where id=6; -update noar ti set v0='YX524FJRZ5LHPU2K1CIQ2FYRR1' where id=6; -update noar tt set b0='6MGQD51' where id=6; -update noar ti set b0='6MGQD51' where id=6; -update noar tt set v0='WDOFFPB' where id=6; -update noar ti set v0='WDOFFPB' where id=6; -update noar tt set b1='ZIYIS33' where id=6; -update noar ti set b1='ZIYIS33' where id=6; -update noar tt set v0='60T0M9TIH0L8C' where id=6; -update noar ti set v0='60T0M9TIH0L8C' where id=6; -update noar tt set b2='AS' where id=6; -update noar ti set b2='AS' where id=6; -update noar tt set v0='JJJM5519IARJY8SND' where id=7; -update noar ti set v0='JJJM5519IARJY8SND' where id=7; -update noar tt set b0='CXG4UTEQD' where id=7; -update noar ti set b0='CXG4UTEQD' where id=7; -update noar tt set v0='J65328RGS0P3O7R02CK6KOQIKZE6D2' where id=7; -update noar ti set v0='J65328RGS0P3O7R02CK6KOQIKZE6D2' where id=7; -update noar tt set b1='DDWYLSBRDEPKWS6JN3H0DCU6TF' where id=7; -update noar ti set b1='DDWYLSBRDEPKWS6JN3H0DCU6TF' where id=7; -update noar tt set v0='YCXHCJT03CLG' where id=7; -update noar ti set v0='YCXHCJT03CLG' where id=7; -update noar tt set b2='UBRWTX0BST0SVF5B3U0WFJ7IDP3CK' where id=7; -update noar ti set b2='UBRWTX0BST0SVF5B3U0WFJ7IDP3CK' where id=7; -update noar tt set v0='OBVOKHC1M7W19J71P3AWL08QA2WY9' where id=8; -update noar ti set v0='OBVOKHC1M7W19J71P3AWL08QA2WY9' where id=8; -update noar tt set b0='4P6LR2YQO97ZUAU25' where id=8; -update noar ti set b0='4P6LR2YQO97ZUAU25' where id=8; -update noar tt set v0='18QYEU7TO2877V7PV7JBZ5YG3O5' where id=8; -update noar ti set v0='18QYEU7TO2877V7PV7JBZ5YG3O5' where id=8; -update noar tt set b1='2ROPMEXK' where id=8; -update noar ti set b1='2ROPMEXK' where id=8; -update noar tt set v0='1' where id=8; -update noar ti set v0='1' where id=8; -update noar tt set b2='1D8WS6RRJUIA8KE22Z0ELO05' where id=8; -update noar ti set b2='1D8WS6RRJUIA8KE22Z0ELO05' where id=8; -update noar tt set v0='KJWIWZ5GU48DQIJK1TWMV2KQGX6SW5' where id=9; -update noar ti set v0='KJWIWZ5GU48DQIJK1TWMV2KQGX6SW5' where id=9; -update noar tt set b0='RJZLE1ODIN6II' where id=9; -update noar ti set b0='RJZLE1ODIN6II' where id=9; -update noar tt set v0='GLT6O4EPVIEX8B4K7R0Z0VGV' where id=9; -update noar ti set v0='GLT6O4EPVIEX8B4K7R0Z0VGV' where id=9; -update noar tt set b1='94DA1ZZN' where id=9; -update noar ti set b1='94DA1ZZN' where id=9; -update noar tt set v0='LMGR9K8KAWEUX' where id=9; -update noar ti set v0='LMGR9K8KAWEUX' where id=9; -update noar tt set b2='NFTKHJX5MTRXV6F2CRT' where id=9; -update noar ti set b2='NFTKHJX5MTRXV6F2CRT' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 longblob null, -b1 blob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='J8HDDAT0LN9KYLOHBC1XRT9V9' where id=1; -update noar ti set v0='J8HDDAT0LN9KYLOHBC1XRT9V9' where id=1; -update noar tt set b0='W1QOJD8JCM9FECU8CQ655' where id=1; -update noar ti set b0='W1QOJD8JCM9FECU8CQ655' where id=1; -update noar tt set v0='L94C1LQE4B451UGJQE5EL5O97MCGR1X6' where id=1; -update noar ti set v0='L94C1LQE4B451UGJQE5EL5O97MCGR1X6' where id=1; -update noar tt set b1='S7H928OA4SD1J98GAB09ODZNVWP21MG3' where id=1; -update noar ti set b1='S7H928OA4SD1J98GAB09ODZNVWP21MG3' where id=1; -update noar tt set v0='DXKWWKDD8YJWUBB4HELE6' where id=1; -update noar ti set v0='DXKWWKDD8YJWUBB4HELE6' where id=1; -update noar tt set b2='H5B1LU9OXOCAO7TXN59GW4AZIU6H' where id=1; -update noar ti set b2='H5B1LU9OXOCAO7TXN59GW4AZIU6H' where id=1; -update noar tt set v0='D5PCCNL' where id=2; -update noar ti set v0='D5PCCNL' where id=2; -update noar tt set b0='WYIM5V289NC31' where id=2; -update noar ti set b0='WYIM5V289NC31' where id=2; -update noar tt set v0='LMSRY6C7PHO31F3OEQONH5KRHW18E' where id=2; -update noar ti set v0='LMSRY6C7PHO31F3OEQONH5KRHW18E' where id=2; -update noar tt set b1='P' where id=2; -update noar ti set b1='P' where id=2; -update noar tt set v0='VTZIN736HITAKZ3' where id=2; -update noar ti set v0='VTZIN736HITAKZ3' where id=2; -update noar tt set b2='BAYX7EZ' where id=2; -update noar ti set b2='BAYX7EZ' where id=2; -update noar tt set v0='9SSDMCAR' where id=3; -update noar ti set v0='9SSDMCAR' where id=3; -update noar tt set b0='7PPU991R8HZGOIX16UG9UMDW9TS9A' where id=3; -update noar ti set b0='7PPU991R8HZGOIX16UG9UMDW9TS9A' where id=3; -update noar tt set v0='QLJRG4AVBDXLFZW2QEJBEWRH1ESE89TV' where id=3; -update noar ti set v0='QLJRG4AVBDXLFZW2QEJBEWRH1ESE89TV' where id=3; -update noar tt set b1='H56B8I5MDLJLH0A15GPDB6F9P3KSJG' where id=3; -update noar ti set b1='H56B8I5MDLJLH0A15GPDB6F9P3KSJG' where id=3; -update noar tt set v0='KNX5OBC' where id=3; -update noar ti set v0='KNX5OBC' where id=3; -update noar tt set b2='9ZQN04AZKMH1VC3JQ' where id=3; -update noar ti set b2='9ZQN04AZKMH1VC3JQ' where id=3; -update noar tt set v0='ZYWZ1P4H' where id=4; -update noar ti set v0='ZYWZ1P4H' where id=4; -update noar tt set b0='42O0JE2XYTYVXN1XQCDZ9R7X' where id=4; -update noar ti set b0='42O0JE2XYTYVXN1XQCDZ9R7X' where id=4; -update noar tt set v0='V14XH3' where id=4; -update noar ti set v0='V14XH3' where id=4; -update noar tt set b1='CXSHF8XXSMQZR962FIKXW809ORTQQO' where id=4; -update noar ti set b1='CXSHF8XXSMQZR962FIKXW809ORTQQO' where id=4; -update noar tt set v0='O2CFTKK667I3M' where id=4; -update noar ti set v0='O2CFTKK667I3M' where id=4; -update noar tt set b2='KJCIZJ7MJP' where id=4; -update noar ti set b2='KJCIZJ7MJP' where id=4; -update noar tt set v0='NYBN7APWVT05L41SI20MM' where id=5; -update noar ti set v0='NYBN7APWVT05L41SI20MM' where id=5; -update noar tt set b0='2FGDIQYVYXOT10UKJOC9D3OCX7FPD8V' where id=5; -update noar ti set b0='2FGDIQYVYXOT10UKJOC9D3OCX7FPD8V' where id=5; -update noar tt set v0='DKP6E5FHHNZFBGA' where id=5; -update noar ti set v0='DKP6E5FHHNZFBGA' where id=5; -update noar tt set b1='VWNGRSAIZ16XJ2GJG2WIY3' where id=5; -update noar ti set b1='VWNGRSAIZ16XJ2GJG2WIY3' where id=5; -update noar tt set v0='HSPLRP64P0V914KX' where id=5; -update noar ti set v0='HSPLRP64P0V914KX' where id=5; -update noar tt set b2='LLM0UUTY6VZUNX' where id=5; -update noar ti set b2='LLM0UUTY6VZUNX' where id=5; -update noar tt set v0='BA6' where id=6; -update noar ti set v0='BA6' where id=6; -update noar tt set b0='OCIB31YBKYQPTC4SA' where id=6; -update noar ti set b0='OCIB31YBKYQPTC4SA' where id=6; -update noar tt set v0='XDPTKWIPLXHKHGOVHE' where id=6; -update noar ti set v0='XDPTKWIPLXHKHGOVHE' where id=6; -update noar tt set b1='WMRL7IPV738' where id=6; -update noar ti set b1='WMRL7IPV738' where id=6; -update noar tt set v0='CWOLZ063TQVSZU5' where id=6; -update noar ti set v0='CWOLZ063TQVSZU5' where id=6; -update noar tt set b2='6C3P7MLWKBMXBNO9Q5Z' where id=6; -update noar ti set b2='6C3P7MLWKBMXBNO9Q5Z' where id=6; -update noar tt set v0='0XGG4CIDTCAKX7KXKZ' where id=7; -update noar ti set v0='0XGG4CIDTCAKX7KXKZ' where id=7; -update noar tt set b0='6JEA2CL7YNEA51TDPLYM9A' where id=7; -update noar ti set b0='6JEA2CL7YNEA51TDPLYM9A' where id=7; -update noar tt set v0='C1B2Q7SBPDK79TFHKYT0C7796RZ8MT' where id=7; -update noar ti set v0='C1B2Q7SBPDK79TFHKYT0C7796RZ8MT' where id=7; -update noar tt set b1='WSTSRGR83WL37RVEKHYPSEF1T' where id=7; -update noar ti set b1='WSTSRGR83WL37RVEKHYPSEF1T' where id=7; -update noar tt set v0='JBRZ9RN8XTKWF' where id=7; -update noar ti set v0='JBRZ9RN8XTKWF' where id=7; -update noar tt set b2='B772S' where id=7; -update noar ti set b2='B772S' where id=7; -update noar tt set v0='EU2VFN23NFBFZK' where id=8; -update noar ti set v0='EU2VFN23NFBFZK' where id=8; -update noar tt set b0='XW0TN' where id=8; -update noar ti set b0='XW0TN' where id=8; -update noar tt set v0='PBHCYP2GSPS7WXZM' where id=8; -update noar ti set v0='PBHCYP2GSPS7WXZM' where id=8; -update noar tt set b1='YLIGT52NNNOOPPAYAECPR9ZQUF' where id=8; -update noar ti set b1='YLIGT52NNNOOPPAYAECPR9ZQUF' where id=8; -update noar tt set v0='1PIW2OPDTXCUSOPGML1' where id=8; -update noar ti set v0='1PIW2OPDTXCUSOPGML1' where id=8; -update noar tt set b2='BSV6Z1' where id=8; -update noar ti set b2='BSV6Z1' where id=8; -update noar tt set v0='CR9CDU75OBQUEA54YLTFMTEZI3I5QGH' where id=9; -update noar ti set v0='CR9CDU75OBQUEA54YLTFMTEZI3I5QGH' where id=9; -update noar tt set b0='UWXHKPP8HC5' where id=9; -update noar ti set b0='UWXHKPP8HC5' where id=9; -update noar tt set v0='WD4ODPZU7172RKH46LH355HF8FWSFN4' where id=9; -update noar ti set v0='WD4ODPZU7172RKH46LH355HF8FWSFN4' where id=9; -update noar tt set b1='A4DV' where id=9; -update noar ti set b1='A4DV' where id=9; -update noar tt set v0='FCKWPCYCVPUPL2ELJ3HU8HX78H8CZH' where id=9; -update noar ti set v0='FCKWPCYCVPUPL2ELJ3HU8HX78H8CZH' where id=9; -update noar tt set b2='1BNRD0KZESJ' where id=9; -update noar ti set b2='1BNRD0KZESJ' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 longblob not null, -b1 blob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='FDMBXMBZHLZ' where id=1; -update noar ti set v0='FDMBXMBZHLZ' where id=1; -update noar tt set b0='IN5' where id=1; -update noar ti set b0='IN5' where id=1; -update noar tt set v0='97RMBKCJ0E0TY7NDLPKCOTE' where id=1; -update noar ti set v0='97RMBKCJ0E0TY7NDLPKCOTE' where id=1; -update noar tt set b1='JC4ICJ1' where id=1; -update noar ti set b1='JC4ICJ1' where id=1; -update noar tt set v0='7LEW2A0GP7LRLR3YXZ7OZ' where id=1; -update noar ti set v0='7LEW2A0GP7LRLR3YXZ7OZ' where id=1; -update noar tt set b2='VV2PJISPDZPI9B1JTU8SYRHTLL3774H' where id=1; -update noar ti set b2='VV2PJISPDZPI9B1JTU8SYRHTLL3774H' where id=1; -update noar tt set v0='9JRHNMIZJYSJ60MNB1HU33KCZAT6' where id=2; -update noar ti set v0='9JRHNMIZJYSJ60MNB1HU33KCZAT6' where id=2; -update noar tt set b0='BDN' where id=2; -update noar ti set b0='BDN' where id=2; -update noar tt set v0='HFKTTJ2P56' where id=2; -update noar ti set v0='HFKTTJ2P56' where id=2; -update noar tt set b1='FQEKIJIAI21LFMVP4VTY9' where id=2; -update noar ti set b1='FQEKIJIAI21LFMVP4VTY9' where id=2; -update noar tt set v0='MTZNEEF9MS7S7' where id=2; -update noar ti set v0='MTZNEEF9MS7S7' where id=2; -update noar tt set b2='OVB2HNAM72VCVORWF' where id=2; -update noar ti set b2='OVB2HNAM72VCVORWF' where id=2; -update noar tt set v0='6YC3' where id=3; -update noar ti set v0='6YC3' where id=3; -update noar tt set b0='Y05G95FY4SE7W3QI6EAMKM6G2' where id=3; -update noar ti set b0='Y05G95FY4SE7W3QI6EAMKM6G2' where id=3; -update noar tt set v0='QIMI8819MFN6FS28I21749AQ5RMQ' where id=3; -update noar ti set v0='QIMI8819MFN6FS28I21749AQ5RMQ' where id=3; -update noar tt set b1='GWKEYWSRSR7Y121Y601DNZQA' where id=3; -update noar ti set b1='GWKEYWSRSR7Y121Y601DNZQA' where id=3; -update noar tt set v0='IVME1J7E4DUFGS8TG' where id=3; -update noar ti set v0='IVME1J7E4DUFGS8TG' where id=3; -update noar tt set b2='KDEIC' where id=3; -update noar ti set b2='KDEIC' where id=3; -update noar tt set v0='H71T' where id=4; -update noar ti set v0='H71T' where id=4; -update noar tt set b0='ULEC8DPS4XVME6L6AX32DY6U7IMJE2F' where id=4; -update noar ti set b0='ULEC8DPS4XVME6L6AX32DY6U7IMJE2F' where id=4; -update noar tt set v0='Y' where id=4; -update noar ti set v0='Y' where id=4; -update noar tt set b1='IBCR8AOPQTK4MFD6OESZ' where id=4; -update noar ti set b1='IBCR8AOPQTK4MFD6OESZ' where id=4; -update noar tt set v0='DTTSM' where id=4; -update noar ti set v0='DTTSM' where id=4; -update noar tt set b2='8JT634KDTKI1ISORGQAXIUS6F8P' where id=4; -update noar ti set b2='8JT634KDTKI1ISORGQAXIUS6F8P' where id=4; -update noar tt set v0='KC1' where id=5; -update noar ti set v0='KC1' where id=5; -update noar tt set b0='IA17F78LYRM838BIY' where id=5; -update noar ti set b0='IA17F78LYRM838BIY' where id=5; -update noar tt set v0='XEY9VFYIBQPCF880Y8DF28VAFMYS51R4' where id=5; -update noar ti set v0='XEY9VFYIBQPCF880Y8DF28VAFMYS51R4' where id=5; -update noar tt set b1='GAR51MMI6D80' where id=5; -update noar ti set b1='GAR51MMI6D80' where id=5; -update noar tt set v0='VVA' where id=5; -update noar ti set v0='VVA' where id=5; -update noar tt set b2='VX86DN8I6DGJWJ2Z4U6F3DMSS6H' where id=5; -update noar ti set b2='VX86DN8I6DGJWJ2Z4U6F3DMSS6H' where id=5; -update noar tt set v0='OF4V1Z3SZPSZ7NICXZE0' where id=6; -update noar ti set v0='OF4V1Z3SZPSZ7NICXZE0' where id=6; -update noar tt set b0='JC681GMG4LY9P2HMW7YJ9Z6Q9QRQF' where id=6; -update noar ti set b0='JC681GMG4LY9P2HMW7YJ9Z6Q9QRQF' where id=6; -update noar tt set v0='3SD1J1IYLFCDD71Z0NMAFXPOSI9YVBQ' where id=6; -update noar ti set v0='3SD1J1IYLFCDD71Z0NMAFXPOSI9YVBQ' where id=6; -update noar tt set b1='ZRNI6TP' where id=6; -update noar ti set b1='ZRNI6TP' where id=6; -update noar tt set v0='Z6R2ZQ014G7I34ZYI2L2W' where id=6; -update noar ti set v0='Z6R2ZQ014G7I34ZYI2L2W' where id=6; -update noar tt set b2='FU69KU5JEDVUP7YP9ECJ4' where id=6; -update noar ti set b2='FU69KU5JEDVUP7YP9ECJ4' where id=6; -update noar tt set v0='OHB6M2CYXQKA7RZ1O' where id=7; -update noar ti set v0='OHB6M2CYXQKA7RZ1O' where id=7; -update noar tt set b0='ZUTA7SWI861CQUECRE38D9A5OI1A' where id=7; -update noar ti set b0='ZUTA7SWI861CQUECRE38D9A5OI1A' where id=7; -update noar tt set v0='2O7SXIVCGXWWRQ12AJJ2P3A' where id=7; -update noar ti set v0='2O7SXIVCGXWWRQ12AJJ2P3A' where id=7; -update noar tt set b1='P261AQYE1NUS5138KQUU072ICEC6RDV' where id=7; -update noar ti set b1='P261AQYE1NUS5138KQUU072ICEC6RDV' where id=7; -update noar tt set v0='W7IY0NVWY784N52IZZ3G0CDFHZQNSWRQ' where id=7; -update noar ti set v0='W7IY0NVWY784N52IZZ3G0CDFHZQNSWRQ' where id=7; -update noar tt set b2='4D8ZX' where id=7; -update noar ti set b2='4D8ZX' where id=7; -update noar tt set v0='LSMG00U26MN2K38' where id=8; -update noar ti set v0='LSMG00U26MN2K38' where id=8; -update noar tt set b0='I0PCB4F1DXL10JI5R28ZIW9I5' where id=8; -update noar ti set b0='I0PCB4F1DXL10JI5R28ZIW9I5' where id=8; -update noar tt set v0='G8FY41LT922HZUT9YJMOFAA' where id=8; -update noar ti set v0='G8FY41LT922HZUT9YJMOFAA' where id=8; -update noar tt set b1='TG27BX3YPYVHVFHJGIIZ' where id=8; -update noar ti set b1='TG27BX3YPYVHVFHJGIIZ' where id=8; -update noar tt set v0='JEVXA' where id=8; -update noar ti set v0='JEVXA' where id=8; -update noar tt set b2='Z9E9YW6GF54ZP' where id=8; -update noar ti set b2='Z9E9YW6GF54ZP' where id=8; -update noar tt set v0='U7IMZ8AZ52GSJMM0IODKASSXNBRUFT' where id=9; -update noar ti set v0='U7IMZ8AZ52GSJMM0IODKASSXNBRUFT' where id=9; -update noar tt set b0='RZPCQSX9B446BLSDNHPH8220IQ4G' where id=9; -update noar ti set b0='RZPCQSX9B446BLSDNHPH8220IQ4G' where id=9; -update noar tt set v0='3A3NVWMQRGGHVL4' where id=9; -update noar ti set v0='3A3NVWMQRGGHVL4' where id=9; -update noar tt set b1='6RDM' where id=9; -update noar ti set b1='6RDM' where id=9; -update noar tt set v0='VW6DCIYMR3R8FV5BEQGF42PRDT' where id=9; -update noar ti set v0='VW6DCIYMR3R8FV5BEQGF42PRDT' where id=9; -update noar tt set b2='2ZTZ4' where id=9; -update noar ti set b2='2ZTZ4' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 longblob not null, -b1 blob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='NK' where id=1; -update noar ti set v0='NK' where id=1; -update noar tt set b0='5YBYPF5S5RU91AWR1R' where id=1; -update noar ti set b0='5YBYPF5S5RU91AWR1R' where id=1; -update noar tt set v0='0UIOY4JXKXHN020SY' where id=1; -update noar ti set v0='0UIOY4JXKXHN020SY' where id=1; -update noar tt set b1='JF4RHRR1W2YX3VZF5QZI1' where id=1; -update noar ti set b1='JF4RHRR1W2YX3VZF5QZI1' where id=1; -update noar tt set v0='ZJOF716TFIJNGO6F7BGP7L' where id=1; -update noar ti set v0='ZJOF716TFIJNGO6F7BGP7L' where id=1; -update noar tt set b2='U9IV' where id=1; -update noar ti set b2='U9IV' where id=1; -update noar tt set v0='WWRKNUY2TJ1GNC35VRZZ0WQ' where id=2; -update noar ti set v0='WWRKNUY2TJ1GNC35VRZZ0WQ' where id=2; -update noar tt set b0='1' where id=2; -update noar ti set b0='1' where id=2; -update noar tt set v0='ZW4615PKVK9' where id=2; -update noar ti set v0='ZW4615PKVK9' where id=2; -update noar tt set b1='WFG47HAX' where id=2; -update noar ti set b1='WFG47HAX' where id=2; -update noar tt set v0='FCYRXWWLLVS858VHO4IFLVO' where id=2; -update noar ti set v0='FCYRXWWLLVS858VHO4IFLVO' where id=2; -update noar tt set b2='QT73T90ZH' where id=2; -update noar ti set b2='QT73T90ZH' where id=2; -update noar tt set v0='WJXPCK19YF8H5BV' where id=3; -update noar ti set v0='WJXPCK19YF8H5BV' where id=3; -update noar tt set b0='PZZ5QG6P69GY9Y56Z5DQB5FC' where id=3; -update noar ti set b0='PZZ5QG6P69GY9Y56Z5DQB5FC' where id=3; -update noar tt set v0='F8KO' where id=3; -update noar ti set v0='F8KO' where id=3; -update noar tt set b1='ZJJPNE' where id=3; -update noar ti set b1='ZJJPNE' where id=3; -update noar tt set v0='M9H3' where id=3; -update noar ti set v0='M9H3' where id=3; -update noar tt set b2='O27R54EKB09GM' where id=3; -update noar ti set b2='O27R54EKB09GM' where id=3; -update noar tt set v0='XV4U9V6PMOO9' where id=4; -update noar ti set v0='XV4U9V6PMOO9' where id=4; -update noar tt set b0='H8XMELGU14DAMBOX3G4' where id=4; -update noar ti set b0='H8XMELGU14DAMBOX3G4' where id=4; -update noar tt set v0='I' where id=4; -update noar ti set v0='I' where id=4; -update noar tt set b1='LOS9JN6AELVWO89FTHMHDQL9QFVZSIA' where id=4; -update noar ti set b1='LOS9JN6AELVWO89FTHMHDQL9QFVZSIA' where id=4; -update noar tt set v0='Q1GYJGEH59S8X9PY8KDB7T' where id=4; -update noar ti set v0='Q1GYJGEH59S8X9PY8KDB7T' where id=4; -update noar tt set b2='55SXRGAVKNZMIAUS75EJQWE9W' where id=4; -update noar ti set b2='55SXRGAVKNZMIAUS75EJQWE9W' where id=4; -update noar tt set v0='NC9G3JGSOW3KL6AU' where id=5; -update noar ti set v0='NC9G3JGSOW3KL6AU' where id=5; -update noar tt set b0='HL7QSN59WQU37AI58S86' where id=5; -update noar ti set b0='HL7QSN59WQU37AI58S86' where id=5; -update noar tt set v0='6NJ' where id=5; -update noar ti set v0='6NJ' where id=5; -update noar tt set b1='E6ZAAGPE3Y0J098YV637ZX962I' where id=5; -update noar ti set b1='E6ZAAGPE3Y0J098YV637ZX962I' where id=5; -update noar tt set v0='ERRPK' where id=5; -update noar ti set v0='ERRPK' where id=5; -update noar tt set b2='69ZWHWL3PS6EQ4UZSB2BV' where id=5; -update noar ti set b2='69ZWHWL3PS6EQ4UZSB2BV' where id=5; -update noar tt set v0='5LQSB8OJ5KBEI9' where id=6; -update noar ti set v0='5LQSB8OJ5KBEI9' where id=6; -update noar tt set b0='KLBOV3YWPGV0AGROTP' where id=6; -update noar ti set b0='KLBOV3YWPGV0AGROTP' where id=6; -update noar tt set v0='7GCDMWD1RGSVDQKV74WLQ36PCOO339T' where id=6; -update noar ti set v0='7GCDMWD1RGSVDQKV74WLQ36PCOO339T' where id=6; -update noar tt set b1='SA7DBBEM03HV3OQF5XWZHKH' where id=6; -update noar ti set b1='SA7DBBEM03HV3OQF5XWZHKH' where id=6; -update noar tt set v0='N8F0O3II8007D1LAE8PPZY4RVXAM0B' where id=6; -update noar ti set v0='N8F0O3II8007D1LAE8PPZY4RVXAM0B' where id=6; -update noar tt set b2='G8TQ7LN4M7V6W9O' where id=6; -update noar ti set b2='G8TQ7LN4M7V6W9O' where id=6; -update noar tt set v0='G5KCL2WEH8T39S0SU5TRTUXQJQQT' where id=7; -update noar ti set v0='G5KCL2WEH8T39S0SU5TRTUXQJQQT' where id=7; -update noar tt set b0='96' where id=7; -update noar ti set b0='96' where id=7; -update noar tt set v0='ZRZJKUDBDF1ZJFRTF2' where id=7; -update noar ti set v0='ZRZJKUDBDF1ZJFRTF2' where id=7; -update noar tt set b1='2LX2DBGEMYYBT' where id=7; -update noar ti set b1='2LX2DBGEMYYBT' where id=7; -update noar tt set v0='QIY4' where id=7; -update noar ti set v0='QIY4' where id=7; -update noar tt set b2='VZ3HD5S57BR1X2CQ9SS2B' where id=7; -update noar ti set b2='VZ3HD5S57BR1X2CQ9SS2B' where id=7; -update noar tt set v0='AY9AXOSF5X2BXE0TXD4F057QT' where id=8; -update noar ti set v0='AY9AXOSF5X2BXE0TXD4F057QT' where id=8; -update noar tt set b0='TR9V7' where id=8; -update noar ti set b0='TR9V7' where id=8; -update noar tt set v0='FAMWRAC2NK5T2EFFLEHYR' where id=8; -update noar ti set v0='FAMWRAC2NK5T2EFFLEHYR' where id=8; -update noar tt set b1='X63PFWT8U4A3VEC04TL66JGAD4GGUDEC' where id=8; -update noar ti set b1='X63PFWT8U4A3VEC04TL66JGAD4GGUDEC' where id=8; -update noar tt set v0='D2W60R' where id=8; -update noar ti set v0='D2W60R' where id=8; -update noar tt set b2='XYX2WR768S0JNN8F3MRH8GO' where id=8; -update noar ti set b2='XYX2WR768S0JNN8F3MRH8GO' where id=8; -update noar tt set v0='V4ISLGA9Z6UP779' where id=9; -update noar ti set v0='V4ISLGA9Z6UP779' where id=9; -update noar tt set b0='M0QVZDDRXZ3T48NTT' where id=9; -update noar ti set b0='M0QVZDDRXZ3T48NTT' where id=9; -update noar tt set v0='YAPOI114LUC0TZ7FKFELBKX6' where id=9; -update noar ti set v0='YAPOI114LUC0TZ7FKFELBKX6' where id=9; -update noar tt set b1='7UA10WXQ0OWFNTX36' where id=9; -update noar ti set b1='7UA10WXQ0OWFNTX36' where id=9; -update noar tt set v0='H24BPAPLR1MW97BRDLZP812' where id=9; -update noar ti set v0='H24BPAPLR1MW97BRDLZP812' where id=9; -update noar tt set b2='0TG1KCTYG8' where id=9; -update noar ti set b2='0TG1KCTYG8' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 longblob null, -b1 blob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='XIMAZBOU80YUH2OQZHQI' where id=1; -update noar ti set v0='XIMAZBOU80YUH2OQZHQI' where id=1; -update noar tt set b0='9H9O410P4G4NA55' where id=1; -update noar ti set b0='9H9O410P4G4NA55' where id=1; -update noar tt set v0='7KAPI2OQG4FRSFSAOB' where id=1; -update noar ti set v0='7KAPI2OQG4FRSFSAOB' where id=1; -update noar tt set b1='HQUY8LR' where id=1; -update noar ti set b1='HQUY8LR' where id=1; -update noar tt set v0='4KC7Q6H15PRGL' where id=1; -update noar ti set v0='4KC7Q6H15PRGL' where id=1; -update noar tt set b2='ZYUXJLYG3LJQXD5QZ3DMEE' where id=1; -update noar ti set b2='ZYUXJLYG3LJQXD5QZ3DMEE' where id=1; -update noar tt set v0='MHWGZ0G3OV4IFHR4PO4F30FNAF' where id=2; -update noar ti set v0='MHWGZ0G3OV4IFHR4PO4F30FNAF' where id=2; -update noar tt set b0='8SI7VOKA' where id=2; -update noar ti set b0='8SI7VOKA' where id=2; -update noar tt set v0='CP8ALTG70GLXRQH1GDGCSCTY9QIN7ML' where id=2; -update noar ti set v0='CP8ALTG70GLXRQH1GDGCSCTY9QIN7ML' where id=2; -update noar tt set b1='6FG5C69J6AB6UE06GU' where id=2; -update noar ti set b1='6FG5C69J6AB6UE06GU' where id=2; -update noar tt set v0='6CQ25HT6JRHB4DA79BAG98IE9KDGPQWY' where id=2; -update noar ti set v0='6CQ25HT6JRHB4DA79BAG98IE9KDGPQWY' where id=2; -update noar tt set b2='YR54MZ7K9' where id=2; -update noar ti set b2='YR54MZ7K9' where id=2; -update noar tt set v0='EDSAD' where id=3; -update noar ti set v0='EDSAD' where id=3; -update noar tt set b0='1HPUTZ73TSO69K' where id=3; -update noar ti set b0='1HPUTZ73TSO69K' where id=3; -update noar tt set v0='QH' where id=3; -update noar ti set v0='QH' where id=3; -update noar tt set b1='HH' where id=3; -update noar ti set b1='HH' where id=3; -update noar tt set v0='WQ2GT9QWSRBPD' where id=3; -update noar ti set v0='WQ2GT9QWSRBPD' where id=3; -update noar tt set b2='BCZU1HB3A0GGW4' where id=3; -update noar ti set b2='BCZU1HB3A0GGW4' where id=3; -update noar tt set v0='MKBZTNJ5VMRWBDRVH8YV2JYB4YDGM4YD' where id=4; -update noar ti set v0='MKBZTNJ5VMRWBDRVH8YV2JYB4YDGM4YD' where id=4; -update noar tt set b0='DWDDVYJR89GF86EF5N1PSETNJDJNN21' where id=4; -update noar ti set b0='DWDDVYJR89GF86EF5N1PSETNJDJNN21' where id=4; -update noar tt set v0='DX5SEFWHLXTOX' where id=4; -update noar ti set v0='DX5SEFWHLXTOX' where id=4; -update noar tt set b1='6AS351N' where id=4; -update noar ti set b1='6AS351N' where id=4; -update noar tt set v0='2WQTUH4QIHG' where id=4; -update noar ti set v0='2WQTUH4QIHG' where id=4; -update noar tt set b2='IUXJNABYS' where id=4; -update noar ti set b2='IUXJNABYS' where id=4; -update noar tt set v0='5X19E59HMI457DP8WOX' where id=5; -update noar ti set v0='5X19E59HMI457DP8WOX' where id=5; -update noar tt set b0='IO' where id=5; -update noar ti set b0='IO' where id=5; -update noar tt set v0='EHF' where id=5; -update noar ti set v0='EHF' where id=5; -update noar tt set b1='IY2IOQURIW0FH2GFEPROFUQJ9T' where id=5; -update noar ti set b1='IY2IOQURIW0FH2GFEPROFUQJ9T' where id=5; -update noar tt set v0='G7ZE2BM21DTN3NJZUZI6YPY' where id=5; -update noar ti set v0='G7ZE2BM21DTN3NJZUZI6YPY' where id=5; -update noar tt set b2='V5TQKW64OIDC2P4' where id=5; -update noar ti set b2='V5TQKW64OIDC2P4' where id=5; -update noar tt set v0='CYIMYZUXG1VVN175LYOS5M3OE0IRJ' where id=6; -update noar ti set v0='CYIMYZUXG1VVN175LYOS5M3OE0IRJ' where id=6; -update noar tt set b0='X95W9JOO8BQDLNZM8SJ3XZTEA' where id=6; -update noar ti set b0='X95W9JOO8BQDLNZM8SJ3XZTEA' where id=6; -update noar tt set v0='08IVW52KJOA5L5XIHM76EW8' where id=6; -update noar ti set v0='08IVW52KJOA5L5XIHM76EW8' where id=6; -update noar tt set b1='DV2Y4ZTEF2KRF9U' where id=6; -update noar ti set b1='DV2Y4ZTEF2KRF9U' where id=6; -update noar tt set v0='PB0E3D062GLQN3ZVWPES729ZL' where id=6; -update noar ti set v0='PB0E3D062GLQN3ZVWPES729ZL' where id=6; -update noar tt set b2='P' where id=6; -update noar ti set b2='P' where id=6; -update noar tt set v0='LZJJZ6A1XDLZV6PMVFG11' where id=7; -update noar ti set v0='LZJJZ6A1XDLZV6PMVFG11' where id=7; -update noar tt set b0='SGVTT8HDR' where id=7; -update noar ti set b0='SGVTT8HDR' where id=7; -update noar tt set v0='J2HF74' where id=7; -update noar ti set v0='J2HF74' where id=7; -update noar tt set b1='P96QZZRO3OCK1D9ZP7B851' where id=7; -update noar ti set b1='P96QZZRO3OCK1D9ZP7B851' where id=7; -update noar tt set v0='RODE3UEF1RFZ9G6YLUV' where id=7; -update noar ti set v0='RODE3UEF1RFZ9G6YLUV' where id=7; -update noar tt set b2='DM0HICD3VL4F21XOUPW' where id=7; -update noar ti set b2='DM0HICD3VL4F21XOUPW' where id=7; -update noar tt set v0='AF' where id=8; -update noar ti set v0='AF' where id=8; -update noar tt set b0='W8FAMBTTVYKVIAYBDO1VEWR' where id=8; -update noar ti set b0='W8FAMBTTVYKVIAYBDO1VEWR' where id=8; -update noar tt set v0='OKML0GZO' where id=8; -update noar ti set v0='OKML0GZO' where id=8; -update noar tt set b1='24PJ60ILWQYYS1EG3TWDLHU' where id=8; -update noar ti set b1='24PJ60ILWQYYS1EG3TWDLHU' where id=8; -update noar tt set v0='JGKL5KU20NMIGSFKKROIJZIJ48KF5NTJ' where id=8; -update noar ti set v0='JGKL5KU20NMIGSFKKROIJZIJ48KF5NTJ' where id=8; -update noar tt set b2='7U4BC' where id=8; -update noar ti set b2='7U4BC' where id=8; -update noar tt set v0='N0G06HDVMA9HP1QPKH0XZ3KP4L' where id=9; -update noar ti set v0='N0G06HDVMA9HP1QPKH0XZ3KP4L' where id=9; -update noar tt set b0='LWFWA74BDCU' where id=9; -update noar ti set b0='LWFWA74BDCU' where id=9; -update noar tt set v0='0JL25MS' where id=9; -update noar ti set v0='0JL25MS' where id=9; -update noar tt set b1='TCJB63E' where id=9; -update noar ti set b1='TCJB63E' where id=9; -update noar tt set v0='GBSUW1X0FV0750OADI9SEBB4ENVTGG' where id=9; -update noar ti set v0='GBSUW1X0FV0750OADI9SEBB4ENVTGG' where id=9; -update noar tt set b2='KY2FK8H3SMZQBQM06FIHOEK6D8Y8' where id=9; -update noar ti set b2='KY2FK8H3SMZQBQM06FIHOEK6D8Y8' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 longblob null, -b1 blob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='IUWBC9Y6QMDXDVYR' where id=1; -update noar ti set v0='IUWBC9Y6QMDXDVYR' where id=1; -update noar tt set b0='3L4O1W6L' where id=1; -update noar ti set b0='3L4O1W6L' where id=1; -update noar tt set v0='L35O' where id=1; -update noar ti set v0='L35O' where id=1; -update noar tt set b1='SGA' where id=1; -update noar ti set b1='SGA' where id=1; -update noar tt set v0='6PJEW3' where id=1; -update noar ti set v0='6PJEW3' where id=1; -update noar tt set b2='ZKJ3' where id=1; -update noar ti set b2='ZKJ3' where id=1; -update noar tt set v0='NEK' where id=2; -update noar ti set v0='NEK' where id=2; -update noar tt set b0='TEYF3TK8AOTDJQ5OE90F57E3H' where id=2; -update noar ti set b0='TEYF3TK8AOTDJQ5OE90F57E3H' where id=2; -update noar tt set v0='8QGW2AB4WQVGWT46YR2YU9R' where id=2; -update noar ti set v0='8QGW2AB4WQVGWT46YR2YU9R' where id=2; -update noar tt set b1='V95RPGER5UOLZWYZTIXQSBS' where id=2; -update noar ti set b1='V95RPGER5UOLZWYZTIXQSBS' where id=2; -update noar tt set v0='T1JE7M' where id=2; -update noar ti set v0='T1JE7M' where id=2; -update noar tt set b2='5TWLNAMCU9H4O9BS40G0L1OB6FB' where id=2; -update noar ti set b2='5TWLNAMCU9H4O9BS40G0L1OB6FB' where id=2; -update noar tt set v0='4JWGCZZW4RNO15YF9CB' where id=3; -update noar ti set v0='4JWGCZZW4RNO15YF9CB' where id=3; -update noar tt set b0='ZY4NSRK9OOZ' where id=3; -update noar ti set b0='ZY4NSRK9OOZ' where id=3; -update noar tt set v0='KZXGF4CQ5TZG7F7NJKO' where id=3; -update noar ti set v0='KZXGF4CQ5TZG7F7NJKO' where id=3; -update noar tt set b1='RSP' where id=3; -update noar ti set b1='RSP' where id=3; -update noar tt set v0='T1ONZ' where id=3; -update noar ti set v0='T1ONZ' where id=3; -update noar tt set b2='28UPM1PV25C1HHNFGP1' where id=3; -update noar ti set b2='28UPM1PV25C1HHNFGP1' where id=3; -update noar tt set v0='R4YKZQORXOYQTS05PWQ' where id=4; -update noar ti set v0='R4YKZQORXOYQTS05PWQ' where id=4; -update noar tt set b0='1R0U' where id=4; -update noar ti set b0='1R0U' where id=4; -update noar tt set v0='YL9FX1GM6XJHJE' where id=4; -update noar ti set v0='YL9FX1GM6XJHJE' where id=4; -update noar tt set b1='FFBSOMJDGFKBV' where id=4; -update noar ti set b1='FFBSOMJDGFKBV' where id=4; -update noar tt set v0='I1H3SFETRWC' where id=4; -update noar ti set v0='I1H3SFETRWC' where id=4; -update noar tt set b2='3YOVBYBZLFTZT5EXVANJ9DN' where id=4; -update noar ti set b2='3YOVBYBZLFTZT5EXVANJ9DN' where id=4; -update noar tt set v0='V' where id=5; -update noar ti set v0='V' where id=5; -update noar tt set b0='ZGWR5KP2LXFIR01TXD5ZPY5' where id=5; -update noar ti set b0='ZGWR5KP2LXFIR01TXD5ZPY5' where id=5; -update noar tt set v0='6SWK1W9S3BK5CZF8DSPNCAM' where id=5; -update noar ti set v0='6SWK1W9S3BK5CZF8DSPNCAM' where id=5; -update noar tt set b1='IXAVX3LYSEV79VRV6MI8FLP' where id=5; -update noar ti set b1='IXAVX3LYSEV79VRV6MI8FLP' where id=5; -update noar tt set v0='21VSAEYY0W' where id=5; -update noar ti set v0='21VSAEYY0W' where id=5; -update noar tt set b2='B6RIHC5GGN0HP1QSLNLH2EJKZR' where id=5; -update noar ti set b2='B6RIHC5GGN0HP1QSLNLH2EJKZR' where id=5; -update noar tt set v0='ISBEVIZ2SMEOSTE67TJ' where id=6; -update noar ti set v0='ISBEVIZ2SMEOSTE67TJ' where id=6; -update noar tt set b0='LXGS6Z82XVIWFJE3JNQD7' where id=6; -update noar ti set b0='LXGS6Z82XVIWFJE3JNQD7' where id=6; -update noar tt set v0='15T30XA0EHLM9Z1BJIVX34NQHCU' where id=6; -update noar ti set v0='15T30XA0EHLM9Z1BJIVX34NQHCU' where id=6; -update noar tt set b1='LNXJQKDJ3X6337S2' where id=6; -update noar ti set b1='LNXJQKDJ3X6337S2' where id=6; -update noar tt set v0='XUHU88Y4J29GADBMDRE' where id=6; -update noar ti set v0='XUHU88Y4J29GADBMDRE' where id=6; -update noar tt set b2='PR7U8X' where id=6; -update noar ti set b2='PR7U8X' where id=6; -update noar tt set v0='B6TBGDHSYG0CCTR' where id=7; -update noar ti set v0='B6TBGDHSYG0CCTR' where id=7; -update noar tt set b0='OHCBQU0FPZNLISDBAXV9VLR6U8P' where id=7; -update noar ti set b0='OHCBQU0FPZNLISDBAXV9VLR6U8P' where id=7; -update noar tt set v0='YU5' where id=7; -update noar ti set v0='YU5' where id=7; -update noar tt set b1='BGMBXSJQMPEFIP6E77KS9N3A37JMJI3' where id=7; -update noar ti set b1='BGMBXSJQMPEFIP6E77KS9N3A37JMJI3' where id=7; -update noar tt set v0='UUMNZ9ZJ23GRRC3PBDXRK5YHEZV' where id=7; -update noar ti set v0='UUMNZ9ZJ23GRRC3PBDXRK5YHEZV' where id=7; -update noar tt set b2='H3X9Q73J53CFAAO45M4A0URJMEPI' where id=7; -update noar ti set b2='H3X9Q73J53CFAAO45M4A0URJMEPI' where id=7; -update noar tt set v0='1' where id=8; -update noar ti set v0='1' where id=8; -update noar tt set b0='V62TI7A1RY3X2GPVGHG9WVHQ5NKUPJ' where id=8; -update noar ti set b0='V62TI7A1RY3X2GPVGHG9WVHQ5NKUPJ' where id=8; -update noar tt set v0='46K37GU404HS0B0U8BLJ445JYNGTW5OF' where id=8; -update noar ti set v0='46K37GU404HS0B0U8BLJ445JYNGTW5OF' where id=8; -update noar tt set b1='A8LJKWUQNRXUQ4J40859X4KH85IT' where id=8; -update noar ti set b1='A8LJKWUQNRXUQ4J40859X4KH85IT' where id=8; -update noar tt set v0='P3CEKKJKZBMQ3OSEE1I' where id=8; -update noar ti set v0='P3CEKKJKZBMQ3OSEE1I' where id=8; -update noar tt set b2='HNCO4R7' where id=8; -update noar ti set b2='HNCO4R7' where id=8; -update noar tt set v0='6SXV0S61XDZJYSZ8NN4RY7D2O76BYY' where id=9; -update noar ti set v0='6SXV0S61XDZJYSZ8NN4RY7D2O76BYY' where id=9; -update noar tt set b0='4D7JHY' where id=9; -update noar ti set b0='4D7JHY' where id=9; -update noar tt set v0='0VOHP79' where id=9; -update noar ti set v0='0VOHP79' where id=9; -update noar tt set b1='1JBM735T9ORWVC5A6BIZWR2Y' where id=9; -update noar ti set b1='1JBM735T9ORWVC5A6BIZWR2Y' where id=9; -update noar tt set v0='GM8IKQPIWI2J8MDTDJVE' where id=9; -update noar ti set v0='GM8IKQPIWI2J8MDTDJVE' where id=9; -update noar tt set b2='ZPM6S7XTS3' where id=9; -update noar ti set b2='ZPM6S7XTS3' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 longblob not null, -b1 blob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='1AF01X3WS227' where id=1; -update noar ti set v0='1AF01X3WS227' where id=1; -update noar tt set b0='1R49AHBWT09IF5HLF5R6KAV' where id=1; -update noar ti set b0='1R49AHBWT09IF5HLF5R6KAV' where id=1; -update noar tt set v0='P0HDP2' where id=1; -update noar ti set v0='P0HDP2' where id=1; -update noar tt set b1='V4ZOBTMDUQSJUIMTX6OGRVV73PK0COX' where id=1; -update noar ti set b1='V4ZOBTMDUQSJUIMTX6OGRVV73PK0COX' where id=1; -update noar tt set v0='BCG9Y1I8X8VGOCNQMH5HH' where id=1; -update noar ti set v0='BCG9Y1I8X8VGOCNQMH5HH' where id=1; -update noar tt set b2='BAL8' where id=1; -update noar ti set b2='BAL8' where id=1; -update noar tt set v0='W6KIP' where id=2; -update noar ti set v0='W6KIP' where id=2; -update noar tt set b0='A1LN2XZW6' where id=2; -update noar ti set b0='A1LN2XZW6' where id=2; -update noar tt set v0='T8OWOMFO8ER645CKXBR4N5J4' where id=2; -update noar ti set v0='T8OWOMFO8ER645CKXBR4N5J4' where id=2; -update noar tt set b1='M65A8F75ZLFATNCGIEJ9BKS' where id=2; -update noar ti set b1='M65A8F75ZLFATNCGIEJ9BKS' where id=2; -update noar tt set v0='2WKZN7' where id=2; -update noar ti set v0='2WKZN7' where id=2; -update noar tt set b2='X2F' where id=2; -update noar ti set b2='X2F' where id=2; -update noar tt set v0='9P13EK0CEVA6SHZQHKV3DN7' where id=3; -update noar ti set v0='9P13EK0CEVA6SHZQHKV3DN7' where id=3; -update noar tt set b0='9W6E78T54GKTFAALZXPH79ONCOYJ' where id=3; -update noar ti set b0='9W6E78T54GKTFAALZXPH79ONCOYJ' where id=3; -update noar tt set v0='LSL8W0AC' where id=3; -update noar ti set v0='LSL8W0AC' where id=3; -update noar tt set b1='XSNNK80QZV5MNFZ2E6623QS' where id=3; -update noar ti set b1='XSNNK80QZV5MNFZ2E6623QS' where id=3; -update noar tt set v0='NHGCAVU9RIWUMN3YC7LQVG' where id=3; -update noar ti set v0='NHGCAVU9RIWUMN3YC7LQVG' where id=3; -update noar tt set b2='L' where id=3; -update noar ti set b2='L' where id=3; -update noar tt set v0='INJGNJQEBMWEIPWVJU0CE8R9B5HXQ' where id=4; -update noar ti set v0='INJGNJQEBMWEIPWVJU0CE8R9B5HXQ' where id=4; -update noar tt set b0='8GI41B8OW7V' where id=4; -update noar ti set b0='8GI41B8OW7V' where id=4; -update noar tt set v0='HHE80S' where id=4; -update noar ti set v0='HHE80S' where id=4; -update noar tt set b1='S' where id=4; -update noar ti set b1='S' where id=4; -update noar tt set v0='IXT6ZVZDZMK0T85YJN45MEG057' where id=4; -update noar ti set v0='IXT6ZVZDZMK0T85YJN45MEG057' where id=4; -update noar tt set b2='R1K2O4FKFMPRJXD6PZCW' where id=4; -update noar ti set b2='R1K2O4FKFMPRJXD6PZCW' where id=4; -update noar tt set v0='8F37QD6Y' where id=5; -update noar ti set v0='8F37QD6Y' where id=5; -update noar tt set b0='XERSA78' where id=5; -update noar ti set b0='XERSA78' where id=5; -update noar tt set v0='J2I1EOVVPK6F7R08H3RVMJ' where id=5; -update noar ti set v0='J2I1EOVVPK6F7R08H3RVMJ' where id=5; -update noar tt set b1='0TJCITGVWSB' where id=5; -update noar ti set b1='0TJCITGVWSB' where id=5; -update noar tt set v0='74FN6VF072SQ2WCCWSLG3PD' where id=5; -update noar ti set v0='74FN6VF072SQ2WCCWSLG3PD' where id=5; -update noar tt set b2='0IKG' where id=5; -update noar ti set b2='0IKG' where id=5; -update noar tt set v0='VA09DG6FN2X61PWLR684YT120V' where id=6; -update noar ti set v0='VA09DG6FN2X61PWLR684YT120V' where id=6; -update noar tt set b0='O10HRJ7R0HXSHN2J7V5' where id=6; -update noar ti set b0='O10HRJ7R0HXSHN2J7V5' where id=6; -update noar tt set v0='4ZRP8BKUT3Q1QEBG' where id=6; -update noar ti set v0='4ZRP8BKUT3Q1QEBG' where id=6; -update noar tt set b1='NLJHW2' where id=6; -update noar ti set b1='NLJHW2' where id=6; -update noar tt set v0='YOCXOS72XX4HO8K7G39UKCE9O' where id=6; -update noar ti set v0='YOCXOS72XX4HO8K7G39UKCE9O' where id=6; -update noar tt set b2='GBV9V4LQSJZ09UMHMEKGLSRJN' where id=6; -update noar ti set b2='GBV9V4LQSJZ09UMHMEKGLSRJN' where id=6; -update noar tt set v0='EVIU5FYHPGJH8WLTPNVFFE1PV' where id=7; -update noar ti set v0='EVIU5FYHPGJH8WLTPNVFFE1PV' where id=7; -update noar tt set b0='LTK177PKH35YPZ9A91' where id=7; -update noar ti set b0='LTK177PKH35YPZ9A91' where id=7; -update noar tt set v0='JMBFPP8Z554VG2VSYENDG' where id=7; -update noar ti set v0='JMBFPP8Z554VG2VSYENDG' where id=7; -update noar tt set b1='HR7JF0B25' where id=7; -update noar ti set b1='HR7JF0B25' where id=7; -update noar tt set v0='DPWFLMRYQHCSD6HDA1IG1UT6SVHU75' where id=7; -update noar ti set v0='DPWFLMRYQHCSD6HDA1IG1UT6SVHU75' where id=7; -update noar tt set b2='VHQ8IUZPUCPHA' where id=7; -update noar ti set b2='VHQ8IUZPUCPHA' where id=7; -update noar tt set v0='6O29JV8UO5HKA6VDNZ1V6Z36X' where id=8; -update noar ti set v0='6O29JV8UO5HKA6VDNZ1V6Z36X' where id=8; -update noar tt set b0='H5LETTK4PYX' where id=8; -update noar ti set b0='H5LETTK4PYX' where id=8; -update noar tt set v0='VYTJ3790LQU8NQYR' where id=8; -update noar ti set v0='VYTJ3790LQU8NQYR' where id=8; -update noar tt set b1='MVSR5HHA4C5AXWQS5GENVVV1B62BWN' where id=8; -update noar ti set b1='MVSR5HHA4C5AXWQS5GENVVV1B62BWN' where id=8; -update noar tt set v0='NKPACDJB' where id=8; -update noar ti set v0='NKPACDJB' where id=8; -update noar tt set b2='YILN1WQ' where id=8; -update noar ti set b2='YILN1WQ' where id=8; -update noar tt set v0='8IJ2AEJQSU1GYNXR9OYSS68X0J1NF' where id=9; -update noar ti set v0='8IJ2AEJQSU1GYNXR9OYSS68X0J1NF' where id=9; -update noar tt set b0='C0YEYJD9CW3CG1UX1EKO470' where id=9; -update noar ti set b0='C0YEYJD9CW3CG1UX1EKO470' where id=9; -update noar tt set v0='7B6SBJ87W5' where id=9; -update noar ti set v0='7B6SBJ87W5' where id=9; -update noar tt set b1='B8FKWM' where id=9; -update noar ti set b1='B8FKWM' where id=9; -update noar tt set v0='V2H3LBB1JLD10C1XPA6T4DHS40NA' where id=9; -update noar ti set v0='V2H3LBB1JLD10C1XPA6T4DHS40NA' where id=9; -update noar tt set b2='G8KDCJRBHAP0AY' where id=9; -update noar ti set b2='G8KDCJRBHAP0AY' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 longblob not null, -b1 blob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='9HIHW2P64KCSIM0' where id=1; -update noar ti set v0='9HIHW2P64KCSIM0' where id=1; -update noar tt set b0='ZGOYY60STTLGSKT9QSZLQ016' where id=1; -update noar ti set b0='ZGOYY60STTLGSKT9QSZLQ016' where id=1; -update noar tt set v0='HSQZ4J2VKO4U' where id=1; -update noar ti set v0='HSQZ4J2VKO4U' where id=1; -update noar tt set b1='O9I191I9DGIXABA' where id=1; -update noar ti set b1='O9I191I9DGIXABA' where id=1; -update noar tt set v0='YTA5XSHN31AE8KDC' where id=1; -update noar ti set v0='YTA5XSHN31AE8KDC' where id=1; -update noar tt set b2='F' where id=1; -update noar ti set b2='F' where id=1; -update noar tt set v0='A3WT1XH4' where id=2; -update noar ti set v0='A3WT1XH4' where id=2; -update noar tt set b0='TOPUAFDME79J8UHW8L9' where id=2; -update noar ti set b0='TOPUAFDME79J8UHW8L9' where id=2; -update noar tt set v0='GEY' where id=2; -update noar ti set v0='GEY' where id=2; -update noar tt set b1='EHK29M241DFY8ZGHCJ4' where id=2; -update noar ti set b1='EHK29M241DFY8ZGHCJ4' where id=2; -update noar tt set v0='91MC94IR9C1JWCQ' where id=2; -update noar ti set v0='91MC94IR9C1JWCQ' where id=2; -update noar tt set b2='99Z186GL74WPV9FFZGF1' where id=2; -update noar ti set b2='99Z186GL74WPV9FFZGF1' where id=2; -update noar tt set v0='I02RJX4AV9XPDDPEGL3Q24' where id=3; -update noar ti set v0='I02RJX4AV9XPDDPEGL3Q24' where id=3; -update noar tt set b0='064766' where id=3; -update noar ti set b0='064766' where id=3; -update noar tt set v0='KO4M0BU57' where id=3; -update noar ti set v0='KO4M0BU57' where id=3; -update noar tt set b1='D7MHSNW' where id=3; -update noar ti set b1='D7MHSNW' where id=3; -update noar tt set v0='5FXAKS9OEW' where id=3; -update noar ti set v0='5FXAKS9OEW' where id=3; -update noar tt set b2='9RXKSRFLL6DK' where id=3; -update noar ti set b2='9RXKSRFLL6DK' where id=3; -update noar tt set v0='5IJ1250RDGKZ8OR' where id=4; -update noar ti set v0='5IJ1250RDGKZ8OR' where id=4; -update noar tt set b0='X6' where id=4; -update noar ti set b0='X6' where id=4; -update noar tt set v0='ABQ28OV1794IZIE8GRIE74SBJP5' where id=4; -update noar ti set v0='ABQ28OV1794IZIE8GRIE74SBJP5' where id=4; -update noar tt set b1='D6FHCAV3A7QJ' where id=4; -update noar ti set b1='D6FHCAV3A7QJ' where id=4; -update noar tt set v0='RVYUOMOXHG3G' where id=4; -update noar ti set v0='RVYUOMOXHG3G' where id=4; -update noar tt set b2='MFJ0N3SHFY' where id=4; -update noar ti set b2='MFJ0N3SHFY' where id=4; -update noar tt set v0='5E9XK8AZJR2QHDW2M217K9UDW4YIMZ93' where id=5; -update noar ti set v0='5E9XK8AZJR2QHDW2M217K9UDW4YIMZ93' where id=5; -update noar tt set b0='3MM1N38' where id=5; -update noar ti set b0='3MM1N38' where id=5; -update noar tt set v0='YIG77DRP1NT7MA70YZNZ' where id=5; -update noar ti set v0='YIG77DRP1NT7MA70YZNZ' where id=5; -update noar tt set b1='HM5VT0VIFMX5' where id=5; -update noar ti set b1='HM5VT0VIFMX5' where id=5; -update noar tt set v0='E44S3M2D7' where id=5; -update noar ti set v0='E44S3M2D7' where id=5; -update noar tt set b2='9KGB9YS547AVWSIW07JVLMT' where id=5; -update noar ti set b2='9KGB9YS547AVWSIW07JVLMT' where id=5; -update noar tt set v0='TFLIRGQORV6S6HMK' where id=6; -update noar ti set v0='TFLIRGQORV6S6HMK' where id=6; -update noar tt set b0='JH0' where id=6; -update noar ti set b0='JH0' where id=6; -update noar tt set v0='SF3TUCQR1JTGU0LXWE1R0DNRHOGTPP8' where id=6; -update noar ti set v0='SF3TUCQR1JTGU0LXWE1R0DNRHOGTPP8' where id=6; -update noar tt set b1='WLUXRR3FE969X574' where id=6; -update noar ti set b1='WLUXRR3FE969X574' where id=6; -update noar tt set v0='AO2' where id=6; -update noar ti set v0='AO2' where id=6; -update noar tt set b2='FK' where id=6; -update noar ti set b2='FK' where id=6; -update noar tt set v0='1O0X7DOSU3CWQXWP5Y74OK7E9MQX' where id=7; -update noar ti set v0='1O0X7DOSU3CWQXWP5Y74OK7E9MQX' where id=7; -update noar tt set b0='RGV6MBE' where id=7; -update noar ti set b0='RGV6MBE' where id=7; -update noar tt set v0='51ZZZA9JI87KLBVKVLQVOQZV9LL8XX62' where id=7; -update noar ti set v0='51ZZZA9JI87KLBVKVLQVOQZV9LL8XX62' where id=7; -update noar tt set b1='LME1J16K3DC0VTDCXM44TW' where id=7; -update noar ti set b1='LME1J16K3DC0VTDCXM44TW' where id=7; -update noar tt set v0='6J4B6ZITB5N6A8YJCJQ1XJPMRSHLI' where id=7; -update noar ti set v0='6J4B6ZITB5N6A8YJCJQ1XJPMRSHLI' where id=7; -update noar tt set b2='GYSIE47ALW8' where id=7; -update noar ti set b2='GYSIE47ALW8' where id=7; -update noar tt set v0='KE' where id=8; -update noar ti set v0='KE' where id=8; -update noar tt set b0='BB8XO8EUNS6GX675FX9GVI' where id=8; -update noar ti set b0='BB8XO8EUNS6GX675FX9GVI' where id=8; -update noar tt set v0='7VZ05FTTP6HMT5BLGOP7LYNXUN4' where id=8; -update noar ti set v0='7VZ05FTTP6HMT5BLGOP7LYNXUN4' where id=8; -update noar tt set b1='K' where id=8; -update noar ti set b1='K' where id=8; -update noar tt set v0='TSFBMY5HR2YHSDT6E559F08J' where id=8; -update noar ti set v0='TSFBMY5HR2YHSDT6E559F08J' where id=8; -update noar tt set b2='HGIQ8168E62PTPD5BFMAIEW' where id=8; -update noar ti set b2='HGIQ8168E62PTPD5BFMAIEW' where id=8; -update noar tt set v0='42XP' where id=9; -update noar ti set v0='42XP' where id=9; -update noar tt set b0='NO4TPSLA6LT' where id=9; -update noar ti set b0='NO4TPSLA6LT' where id=9; -update noar tt set v0='OVJ9MSPPOOA84LA8NUG' where id=9; -update noar ti set v0='OVJ9MSPPOOA84LA8NUG' where id=9; -update noar tt set b1='TE4U' where id=9; -update noar ti set b1='TE4U' where id=9; -update noar tt set v0='PUUGG3UFRZGZ29HMYYY0S7KCQP8LBQ' where id=9; -update noar ti set v0='PUUGG3UFRZGZ29HMYYY0S7KCQP8LBQ' where id=9; -update noar tt set b2='4B5SPQICKSHW93TKJKE8IBB8MJB2YI2S' where id=9; -update noar ti set b2='4B5SPQICKSHW93TKJKE8IBB8MJB2YI2S' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 longblob null, -b1 blob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='GF17L1U1SX3LZMBL72' where id=1; -update noar ti set v0='GF17L1U1SX3LZMBL72' where id=1; -update noar tt set b0='BIXPE4LKQ735CMRFJ8CKEHY0CA8JQ' where id=1; -update noar ti set b0='BIXPE4LKQ735CMRFJ8CKEHY0CA8JQ' where id=1; -update noar tt set v0='VWW0Q' where id=1; -update noar ti set v0='VWW0Q' where id=1; -update noar tt set b1='QHEY4IW47M65KY9' where id=1; -update noar ti set b1='QHEY4IW47M65KY9' where id=1; -update noar tt set v0='2DYGP7345S1BKLKSZRGR9CLCA1DOZE' where id=1; -update noar ti set v0='2DYGP7345S1BKLKSZRGR9CLCA1DOZE' where id=1; -update noar tt set b2='WH5G4TLGEOBCK3X6BZ3CHTFJEZUSHHW' where id=1; -update noar ti set b2='WH5G4TLGEOBCK3X6BZ3CHTFJEZUSHHW' where id=1; -update noar tt set v0='RRGD' where id=2; -update noar ti set v0='RRGD' where id=2; -update noar tt set b0='IM' where id=2; -update noar ti set b0='IM' where id=2; -update noar tt set v0='Y6S1111MTK1NDOZ33RV3OEA1A9' where id=2; -update noar ti set v0='Y6S1111MTK1NDOZ33RV3OEA1A9' where id=2; -update noar tt set b1='T' where id=2; -update noar ti set b1='T' where id=2; -update noar tt set v0='5E3YSZ5D7ZKM2Y8HBTWN20P1F235' where id=2; -update noar ti set v0='5E3YSZ5D7ZKM2Y8HBTWN20P1F235' where id=2; -update noar tt set b2='EAH1Z1NKJFFOSGL4RYQRNARL' where id=2; -update noar ti set b2='EAH1Z1NKJFFOSGL4RYQRNARL' where id=2; -update noar tt set v0='21OE8CJNWI5' where id=3; -update noar ti set v0='21OE8CJNWI5' where id=3; -update noar tt set b0='PDOMXFN73FCT' where id=3; -update noar ti set b0='PDOMXFN73FCT' where id=3; -update noar tt set v0='NZ5TXD3AQDQ' where id=3; -update noar ti set v0='NZ5TXD3AQDQ' where id=3; -update noar tt set b1='ZO0PYX3IF3Q4FP23Z7LGKWNOJNZ3UP8' where id=3; -update noar ti set b1='ZO0PYX3IF3Q4FP23Z7LGKWNOJNZ3UP8' where id=3; -update noar tt set v0='ORJIBHYU9Y238PAKK7C' where id=3; -update noar ti set v0='ORJIBHYU9Y238PAKK7C' where id=3; -update noar tt set b2='H5RD5YWAS8' where id=3; -update noar ti set b2='H5RD5YWAS8' where id=3; -update noar tt set v0='Q19GASNYG9JIAP46IJRBAL1XCW7' where id=4; -update noar ti set v0='Q19GASNYG9JIAP46IJRBAL1XCW7' where id=4; -update noar tt set b0='TWBIUI2Q5BO3LD3RIQC' where id=4; -update noar ti set b0='TWBIUI2Q5BO3LD3RIQC' where id=4; -update noar tt set v0='1SFP' where id=4; -update noar ti set v0='1SFP' where id=4; -update noar tt set b1='X86J3UPKVPZ0PE4W' where id=4; -update noar ti set b1='X86J3UPKVPZ0PE4W' where id=4; -update noar tt set v0='WA890F8YZF968HN' where id=4; -update noar ti set v0='WA890F8YZF968HN' where id=4; -update noar tt set b2='EWS07I9' where id=4; -update noar ti set b2='EWS07I9' where id=4; -update noar tt set v0='169TT2I3RUI7GDBSQT8F48CBI' where id=5; -update noar ti set v0='169TT2I3RUI7GDBSQT8F48CBI' where id=5; -update noar tt set b0='MHWTYHVC8E88QYOY6Z' where id=5; -update noar ti set b0='MHWTYHVC8E88QYOY6Z' where id=5; -update noar tt set v0='V8X1VR71VBZL4U5OGQR6WFHHURAAUF' where id=5; -update noar ti set v0='V8X1VR71VBZL4U5OGQR6WFHHURAAUF' where id=5; -update noar tt set b1='6I3T' where id=5; -update noar ti set b1='6I3T' where id=5; -update noar tt set v0='XN' where id=5; -update noar ti set v0='XN' where id=5; -update noar tt set b2='PZ3NZBKIR0PCSWZWC3VLXU3PTO5AUP' where id=5; -update noar ti set b2='PZ3NZBKIR0PCSWZWC3VLXU3PTO5AUP' where id=5; -update noar tt set v0='DJ2OR7DROVN' where id=6; -update noar ti set v0='DJ2OR7DROVN' where id=6; -update noar tt set b0='I6430XDDKVG627T2CUIX' where id=6; -update noar ti set b0='I6430XDDKVG627T2CUIX' where id=6; -update noar tt set v0='KAAEGP' where id=6; -update noar ti set v0='KAAEGP' where id=6; -update noar tt set b1='5H' where id=6; -update noar ti set b1='5H' where id=6; -update noar tt set v0='VQ14VVOP7U' where id=6; -update noar ti set v0='VQ14VVOP7U' where id=6; -update noar tt set b2='68BW9OMT2WFVC8U0PE77IQCLTSEK5D' where id=6; -update noar ti set b2='68BW9OMT2WFVC8U0PE77IQCLTSEK5D' where id=6; -update noar tt set v0='QMDIF8Z144FMY1J4OUBYBJOEY0ZOY0' where id=7; -update noar ti set v0='QMDIF8Z144FMY1J4OUBYBJOEY0ZOY0' where id=7; -update noar tt set b0='HVW5I3S' where id=7; -update noar ti set b0='HVW5I3S' where id=7; -update noar tt set v0='K9DYRGMR' where id=7; -update noar ti set v0='K9DYRGMR' where id=7; -update noar tt set b1='KP8UAE2WQKDR46SVQ4AVB9O9LXWZSVTB' where id=7; -update noar ti set b1='KP8UAE2WQKDR46SVQ4AVB9O9LXWZSVTB' where id=7; -update noar tt set v0='X' where id=7; -update noar ti set v0='X' where id=7; -update noar tt set b2='OBI72B7V81ADVKN26LVJKWJ6' where id=7; -update noar ti set b2='OBI72B7V81ADVKN26LVJKWJ6' where id=7; -update noar tt set v0='ZDXIBY' where id=8; -update noar ti set v0='ZDXIBY' where id=8; -update noar tt set b0='0LV853A7FHMSQ' where id=8; -update noar ti set b0='0LV853A7FHMSQ' where id=8; -update noar tt set v0='SXSMCIVD9' where id=8; -update noar ti set v0='SXSMCIVD9' where id=8; -update noar tt set b1='6AFPUJCZE7HNH' where id=8; -update noar ti set b1='6AFPUJCZE7HNH' where id=8; -update noar tt set v0='AQIQNPEVRW3BN40DBBSSL9S4PWY9U5N0' where id=8; -update noar ti set v0='AQIQNPEVRW3BN40DBBSSL9S4PWY9U5N0' where id=8; -update noar tt set b2='P06N9D7KMGE9R2CKLFQ8K08H7' where id=8; -update noar ti set b2='P06N9D7KMGE9R2CKLFQ8K08H7' where id=8; -update noar tt set v0='VW23U5K782KC5Y4O9GK552P55C' where id=9; -update noar ti set v0='VW23U5K782KC5Y4O9GK552P55C' where id=9; -update noar tt set b0='ZF' where id=9; -update noar ti set b0='ZF' where id=9; -update noar tt set v0='0KYY7' where id=9; -update noar ti set v0='0KYY7' where id=9; -update noar tt set b1='Q6NKN8TYPGE3FB5265N' where id=9; -update noar ti set b1='Q6NKN8TYPGE3FB5265N' where id=9; -update noar tt set v0='9XR' where id=9; -update noar ti set v0='9XR' where id=9; -update noar tt set b2='Q4RE36AW59CYH' where id=9; -update noar ti set b2='Q4RE36AW59CYH' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 longblob null, -b1 blob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='3S0WWESDHKR4K2WT6QJDUD' where id=1; -update noar ti set v0='3S0WWESDHKR4K2WT6QJDUD' where id=1; -update noar tt set b0='98S345IMCAKXRS78TW57CGSQMV' where id=1; -update noar ti set b0='98S345IMCAKXRS78TW57CGSQMV' where id=1; -update noar tt set v0='LP2B7MV4T39WOGIDDT' where id=1; -update noar ti set v0='LP2B7MV4T39WOGIDDT' where id=1; -update noar tt set b1='T6JI' where id=1; -update noar ti set b1='T6JI' where id=1; -update noar tt set v0='2SQEKQZBACK1C0JCAP12IDTDAGS' where id=1; -update noar ti set v0='2SQEKQZBACK1C0JCAP12IDTDAGS' where id=1; -update noar tt set b2='HBH2TP3YS3X' where id=1; -update noar ti set b2='HBH2TP3YS3X' where id=1; -update noar tt set v0='EFB580L901RLHWFBZFMAD6LDD' where id=2; -update noar ti set v0='EFB580L901RLHWFBZFMAD6LDD' where id=2; -update noar tt set b0='0R' where id=2; -update noar ti set b0='0R' where id=2; -update noar tt set v0='TSLL5J9ABLE5VJ5QWU9DT' where id=2; -update noar ti set v0='TSLL5J9ABLE5VJ5QWU9DT' where id=2; -update noar tt set b1='KSZC3MI418X1X0P4LJRE' where id=2; -update noar ti set b1='KSZC3MI418X1X0P4LJRE' where id=2; -update noar tt set v0='T' where id=2; -update noar ti set v0='T' where id=2; -update noar tt set b2='Q14Z7EY36NPU498XWNSPZZ0RHLJUK' where id=2; -update noar ti set b2='Q14Z7EY36NPU498XWNSPZZ0RHLJUK' where id=2; -update noar tt set v0='2EYU368F9AIF0NHDJIH' where id=3; -update noar ti set v0='2EYU368F9AIF0NHDJIH' where id=3; -update noar tt set b0='R62QJWMOQZGTJ832UVCG25' where id=3; -update noar ti set b0='R62QJWMOQZGTJ832UVCG25' where id=3; -update noar tt set v0='4CQ06TQ' where id=3; -update noar ti set v0='4CQ06TQ' where id=3; -update noar tt set b1='X0H0S121RZCUZOWMM00W' where id=3; -update noar ti set b1='X0H0S121RZCUZOWMM00W' where id=3; -update noar tt set v0='07JPZUIHCF' where id=3; -update noar ti set v0='07JPZUIHCF' where id=3; -update noar tt set b2='O5K2VGGLZ' where id=3; -update noar ti set b2='O5K2VGGLZ' where id=3; -update noar tt set v0='A1PELQZP43WBDFWKYKZCO' where id=4; -update noar ti set v0='A1PELQZP43WBDFWKYKZCO' where id=4; -update noar tt set b0='TT3Q6E3CMRB49183WEDUCX1GUY1JB' where id=4; -update noar ti set b0='TT3Q6E3CMRB49183WEDUCX1GUY1JB' where id=4; -update noar tt set v0='BVZUTKEGUNII55' where id=4; -update noar ti set v0='BVZUTKEGUNII55' where id=4; -update noar tt set b1='QFO7XNDIN3W17DQBKWFELY4SYUTK' where id=4; -update noar ti set b1='QFO7XNDIN3W17DQBKWFELY4SYUTK' where id=4; -update noar tt set v0='GKZGU5XQE70G953153KW' where id=4; -update noar ti set v0='GKZGU5XQE70G953153KW' where id=4; -update noar tt set b2='0UT6VL9YRZ1BQGN2ZDDEND52KCJFIS' where id=4; -update noar ti set b2='0UT6VL9YRZ1BQGN2ZDDEND52KCJFIS' where id=4; -update noar tt set v0='IZ' where id=5; -update noar ti set v0='IZ' where id=5; -update noar tt set b0='PO' where id=5; -update noar ti set b0='PO' where id=5; -update noar tt set v0='IVLTDAOOVSAQ43COLDYYX3DS' where id=5; -update noar ti set v0='IVLTDAOOVSAQ43COLDYYX3DS' where id=5; -update noar tt set b1='LTM2Y7Q' where id=5; -update noar ti set b1='LTM2Y7Q' where id=5; -update noar tt set v0='6ILNNFYIFNPWETFXWWIGBP47X' where id=5; -update noar ti set v0='6ILNNFYIFNPWETFXWWIGBP47X' where id=5; -update noar tt set b2='ZJ9SEVPPPUFS4I' where id=5; -update noar ti set b2='ZJ9SEVPPPUFS4I' where id=5; -update noar tt set v0='3SQ8V1UBKQ78IT1NY6LYU1YUJ376OZWR' where id=6; -update noar ti set v0='3SQ8V1UBKQ78IT1NY6LYU1YUJ376OZWR' where id=6; -update noar tt set b0='BSE6T' where id=6; -update noar ti set b0='BSE6T' where id=6; -update noar tt set v0='SHSX1C95PJQHLU1CZOGSN6UCZLJBJHP' where id=6; -update noar ti set v0='SHSX1C95PJQHLU1CZOGSN6UCZLJBJHP' where id=6; -update noar tt set b1='Y4SSYZOGTV9XROMOTB5' where id=6; -update noar ti set b1='Y4SSYZOGTV9XROMOTB5' where id=6; -update noar tt set v0='F' where id=6; -update noar ti set v0='F' where id=6; -update noar tt set b2='4Z0V' where id=6; -update noar ti set b2='4Z0V' where id=6; -update noar tt set v0='EA8' where id=7; -update noar ti set v0='EA8' where id=7; -update noar tt set b0='02E687JK0K7LGDGAZ8VCQD' where id=7; -update noar ti set b0='02E687JK0K7LGDGAZ8VCQD' where id=7; -update noar tt set v0='2JVD7' where id=7; -update noar ti set v0='2JVD7' where id=7; -update noar tt set b1='829O6NNRJKWVJC3D07MHEWBYSE' where id=7; -update noar ti set b1='829O6NNRJKWVJC3D07MHEWBYSE' where id=7; -update noar tt set v0='CEKZE1U5RFIGD9AI0YW3' where id=7; -update noar ti set v0='CEKZE1U5RFIGD9AI0YW3' where id=7; -update noar tt set b2='EEFYBQ0' where id=7; -update noar ti set b2='EEFYBQ0' where id=7; -update noar tt set v0='6XHZQE03N4ZUCM0VE' where id=8; -update noar ti set v0='6XHZQE03N4ZUCM0VE' where id=8; -update noar tt set b0='YJ95' where id=8; -update noar ti set b0='YJ95' where id=8; -update noar tt set v0='4UEX038RMDJP6MPCHW7' where id=8; -update noar ti set v0='4UEX038RMDJP6MPCHW7' where id=8; -update noar tt set b1='QQ70KCQSVCC1QQUJZ9F6' where id=8; -update noar ti set b1='QQ70KCQSVCC1QQUJZ9F6' where id=8; -update noar tt set v0='NMB2NNIWLG3LVTX' where id=8; -update noar ti set v0='NMB2NNIWLG3LVTX' where id=8; -update noar tt set b2='5IPYW3GJOMUOCT8TPAMYPD' where id=8; -update noar ti set b2='5IPYW3GJOMUOCT8TPAMYPD' where id=8; -update noar tt set v0='56W3KQQQJG19X3MK1FU7693' where id=9; -update noar ti set v0='56W3KQQQJG19X3MK1FU7693' where id=9; -update noar tt set b0='EDJ8VGTE7K6UN0MB7V' where id=9; -update noar ti set b0='EDJ8VGTE7K6UN0MB7V' where id=9; -update noar tt set v0='JIAJQUSNHMO5SFJ9M' where id=9; -update noar ti set v0='JIAJQUSNHMO5SFJ9M' where id=9; -update noar tt set b1='MLV4JJE8VHT6QEAE2BTRD5Z' where id=9; -update noar ti set b1='MLV4JJE8VHT6QEAE2BTRD5Z' where id=9; -update noar tt set v0='IWCFX9FX' where id=9; -update noar ti set v0='IWCFX9FX' where id=9; -update noar tt set b2='OSD77LC4JJWD6RN' where id=9; -update noar ti set b2='OSD77LC4JJWD6RN' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 longblob not null, -b1 blob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='JGKB0Y2UJ' where id=1; -update noar ti set v0='JGKB0Y2UJ' where id=1; -update noar tt set b0='1EJZ4F' where id=1; -update noar ti set b0='1EJZ4F' where id=1; -update noar tt set v0='IPXSVZDVJK' where id=1; -update noar ti set v0='IPXSVZDVJK' where id=1; -update noar tt set b1='X7MGG5VY0C7JM' where id=1; -update noar ti set b1='X7MGG5VY0C7JM' where id=1; -update noar tt set v0='2J4RLDNK09RXS7Q92XUB0CXYUL' where id=1; -update noar ti set v0='2J4RLDNK09RXS7Q92XUB0CXYUL' where id=1; -update noar tt set b2='H0GCJD97' where id=1; -update noar ti set b2='H0GCJD97' where id=1; -update noar tt set v0='DSKHARQ1TPSGP5P2K' where id=2; -update noar ti set v0='DSKHARQ1TPSGP5P2K' where id=2; -update noar tt set b0='UST5EVB0TVB2OU0A8A' where id=2; -update noar ti set b0='UST5EVB0TVB2OU0A8A' where id=2; -update noar tt set v0='H455KF89AVZT' where id=2; -update noar ti set v0='H455KF89AVZT' where id=2; -update noar tt set b1='NBG' where id=2; -update noar ti set b1='NBG' where id=2; -update noar tt set v0='ILZ7WNV9UYBK6VYZDMEM' where id=2; -update noar ti set v0='ILZ7WNV9UYBK6VYZDMEM' where id=2; -update noar tt set b2='YDRIJRSB85QDIN0YMW6ADZ7QQI' where id=2; -update noar ti set b2='YDRIJRSB85QDIN0YMW6ADZ7QQI' where id=2; -update noar tt set v0='SSRBQH' where id=3; -update noar ti set v0='SSRBQH' where id=3; -update noar tt set b0='ZKC6DGD1BV3QC3XJWNJ6F0QFC80' where id=3; -update noar ti set b0='ZKC6DGD1BV3QC3XJWNJ6F0QFC80' where id=3; -update noar tt set v0='TR3E4EOX' where id=3; -update noar ti set v0='TR3E4EOX' where id=3; -update noar tt set b1='UZGN19LO2S50ANQXKJDZODO9' where id=3; -update noar ti set b1='UZGN19LO2S50ANQXKJDZODO9' where id=3; -update noar tt set v0='O3KC3BOJAHY' where id=3; -update noar ti set v0='O3KC3BOJAHY' where id=3; -update noar tt set b2='UEGN7YSGXA6RS842PNGBN9GS502CX' where id=3; -update noar ti set b2='UEGN7YSGXA6RS842PNGBN9GS502CX' where id=3; -update noar tt set v0='H5TPELD' where id=4; -update noar ti set v0='H5TPELD' where id=4; -update noar tt set b0='6B627B1YBSD1M' where id=4; -update noar ti set b0='6B627B1YBSD1M' where id=4; -update noar tt set v0='CXARHVNQD9IYEW9H' where id=4; -update noar ti set v0='CXARHVNQD9IYEW9H' where id=4; -update noar tt set b1='QPP3CFQRY6SI' where id=4; -update noar ti set b1='QPP3CFQRY6SI' where id=4; -update noar tt set v0='82VFOC1N2GK0NFQTTN4WK6' where id=4; -update noar ti set v0='82VFOC1N2GK0NFQTTN4WK6' where id=4; -update noar tt set b2='5VNK' where id=4; -update noar ti set b2='5VNK' where id=4; -update noar tt set v0='WP2CLGWII5KY2NE' where id=5; -update noar ti set v0='WP2CLGWII5KY2NE' where id=5; -update noar tt set b0='3IYOS7L3YJ8323Z1JX3WHCTM0F' where id=5; -update noar ti set b0='3IYOS7L3YJ8323Z1JX3WHCTM0F' where id=5; -update noar tt set v0='C3P4Y6ZT78RPWA72' where id=5; -update noar ti set v0='C3P4Y6ZT78RPWA72' where id=5; -update noar tt set b1='DOI00DZHRR3UX3A63K3Z7GM' where id=5; -update noar ti set b1='DOI00DZHRR3UX3A63K3Z7GM' where id=5; -update noar tt set v0='0C5H4TTNKZHOGJOWR' where id=5; -update noar ti set v0='0C5H4TTNKZHOGJOWR' where id=5; -update noar tt set b2='2HA5DGYHB17G5' where id=5; -update noar ti set b2='2HA5DGYHB17G5' where id=5; -update noar tt set v0='9BWN6Y3' where id=6; -update noar ti set v0='9BWN6Y3' where id=6; -update noar tt set b0='LN9B7A43' where id=6; -update noar ti set b0='LN9B7A43' where id=6; -update noar tt set v0='L7VM8FK1Y7VBEOMO' where id=6; -update noar ti set v0='L7VM8FK1Y7VBEOMO' where id=6; -update noar tt set b1='YUMOW' where id=6; -update noar ti set b1='YUMOW' where id=6; -update noar tt set v0='Z7GK8H7ARENPWJHH83QYRFFB97E6K' where id=6; -update noar ti set v0='Z7GK8H7ARENPWJHH83QYRFFB97E6K' where id=6; -update noar tt set b2='UALSJ' where id=6; -update noar ti set b2='UALSJ' where id=6; -update noar tt set v0='5PJY8KHE4LWLS53YDP' where id=7; -update noar ti set v0='5PJY8KHE4LWLS53YDP' where id=7; -update noar tt set b0='2L50XCEL922NS5AWAJUTLD7NYGUQ' where id=7; -update noar ti set b0='2L50XCEL922NS5AWAJUTLD7NYGUQ' where id=7; -update noar tt set v0='RK0B6DG5E1PN5Q5F3T' where id=7; -update noar ti set v0='RK0B6DG5E1PN5Q5F3T' where id=7; -update noar tt set b1='9XDHHGVUSLEZP' where id=7; -update noar ti set b1='9XDHHGVUSLEZP' where id=7; -update noar tt set v0='NLMCMP5WIC0EQE0GP9AWH45' where id=7; -update noar ti set v0='NLMCMP5WIC0EQE0GP9AWH45' where id=7; -update noar tt set b2='Z0XYU9PX00H1GBUDWE13X' where id=7; -update noar ti set b2='Z0XYU9PX00H1GBUDWE13X' where id=7; -update noar tt set v0='PGMNTSSJW2S8JKRFEKER0V2906JL14L' where id=8; -update noar ti set v0='PGMNTSSJW2S8JKRFEKER0V2906JL14L' where id=8; -update noar tt set b0='6A1Z4H33S' where id=8; -update noar ti set b0='6A1Z4H33S' where id=8; -update noar tt set v0='RJ9CY' where id=8; -update noar ti set v0='RJ9CY' where id=8; -update noar tt set b1='TOZX3PRA38J802U0A3WCEV' where id=8; -update noar ti set b1='TOZX3PRA38J802U0A3WCEV' where id=8; -update noar tt set v0='4UOKAYJ77U7GZJ5FW2HBT0014UB' where id=8; -update noar ti set v0='4UOKAYJ77U7GZJ5FW2HBT0014UB' where id=8; -update noar tt set b2='3YDUVXCHZ3EL9ZRMORV208XUS55' where id=8; -update noar ti set b2='3YDUVXCHZ3EL9ZRMORV208XUS55' where id=8; -update noar tt set v0='ZIF3GSX5DZ2NRQO49G' where id=9; -update noar ti set v0='ZIF3GSX5DZ2NRQO49G' where id=9; -update noar tt set b0='Q32P6M959NECCWAU2CSE' where id=9; -update noar ti set b0='Q32P6M959NECCWAU2CSE' where id=9; -update noar tt set v0='9B8TGX78IC10HEPR1Y24WQOQEL8' where id=9; -update noar ti set v0='9B8TGX78IC10HEPR1Y24WQOQEL8' where id=9; -update noar tt set b1='5F117LFBRUG231EQ' where id=9; -update noar ti set b1='5F117LFBRUG231EQ' where id=9; -update noar tt set v0='4' where id=9; -update noar ti set v0='4' where id=9; -update noar tt set b2='25IKV' where id=9; -update noar ti set b2='25IKV' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 longblob not null, -b1 blob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='FTO2NVMQRDWT7WKZU6LWJDWKKLKTI' where id=1; -update noar ti set v0='FTO2NVMQRDWT7WKZU6LWJDWKKLKTI' where id=1; -update noar tt set b0='RMLALBMZZ1' where id=1; -update noar ti set b0='RMLALBMZZ1' where id=1; -update noar tt set v0='QZ3W00BE07FX82AO58YDQ2C' where id=1; -update noar ti set v0='QZ3W00BE07FX82AO58YDQ2C' where id=1; -update noar tt set b1='D2M4A1KF6RMU4XO9FEM8PXQ21OC5' where id=1; -update noar ti set b1='D2M4A1KF6RMU4XO9FEM8PXQ21OC5' where id=1; -update noar tt set v0='7' where id=1; -update noar ti set v0='7' where id=1; -update noar tt set b2='ZYP4DTZK9UBXKWYKKTA' where id=1; -update noar ti set b2='ZYP4DTZK9UBXKWYKKTA' where id=1; -update noar tt set v0='97OOXX3HDOG23LX1FM0VO' where id=2; -update noar ti set v0='97OOXX3HDOG23LX1FM0VO' where id=2; -update noar tt set b0='R5QX46G5M' where id=2; -update noar ti set b0='R5QX46G5M' where id=2; -update noar tt set v0='VMG79OX2A4HTCO8INP3SDHCR9ZGAL' where id=2; -update noar ti set v0='VMG79OX2A4HTCO8INP3SDHCR9ZGAL' where id=2; -update noar tt set b1='R' where id=2; -update noar ti set b1='R' where id=2; -update noar tt set v0='7DUXG95GKWEPVQMTM' where id=2; -update noar ti set v0='7DUXG95GKWEPVQMTM' where id=2; -update noar tt set b2='XGXKA3OHOTFA2PMHD3Q1HO4KCGNE' where id=2; -update noar ti set b2='XGXKA3OHOTFA2PMHD3Q1HO4KCGNE' where id=2; -update noar tt set v0='7PZ4Z15KA4PQKMWYQ1JHHPNRM1P9' where id=3; -update noar ti set v0='7PZ4Z15KA4PQKMWYQ1JHHPNRM1P9' where id=3; -update noar tt set b0='CYVMM5QZQT4QXOXAHYCZL' where id=3; -update noar ti set b0='CYVMM5QZQT4QXOXAHYCZL' where id=3; -update noar tt set v0='IXXL1Z8AG1H58W1EO03S2SWSRNPJ96' where id=3; -update noar ti set v0='IXXL1Z8AG1H58W1EO03S2SWSRNPJ96' where id=3; -update noar tt set b1='IAZ21JZUZ30GXWFLTKNNX' where id=3; -update noar ti set b1='IAZ21JZUZ30GXWFLTKNNX' where id=3; -update noar tt set v0='FMI' where id=3; -update noar ti set v0='FMI' where id=3; -update noar tt set b2='R4CUILU2BYAKFYMDLV' where id=3; -update noar ti set b2='R4CUILU2BYAKFYMDLV' where id=3; -update noar tt set v0='P1S0APBNU' where id=4; -update noar ti set v0='P1S0APBNU' where id=4; -update noar tt set b0='LGCSDOY6909' where id=4; -update noar ti set b0='LGCSDOY6909' where id=4; -update noar tt set v0='XQQUM2C5UQTA0SFB' where id=4; -update noar ti set v0='XQQUM2C5UQTA0SFB' where id=4; -update noar tt set b1='ZK4XUNF9WQNO' where id=4; -update noar ti set b1='ZK4XUNF9WQNO' where id=4; -update noar tt set v0='FE3E91PYNGTFCDV523H9QECK2UV5R9C' where id=4; -update noar ti set v0='FE3E91PYNGTFCDV523H9QECK2UV5R9C' where id=4; -update noar tt set b2='YR2J0YXK0Q' where id=4; -update noar ti set b2='YR2J0YXK0Q' where id=4; -update noar tt set v0='GIM78IORLAV2CVJ3YKKJPZD6I85' where id=5; -update noar ti set v0='GIM78IORLAV2CVJ3YKKJPZD6I85' where id=5; -update noar tt set b0='2SYOY1GLX3S6QXT1G87ZP' where id=5; -update noar ti set b0='2SYOY1GLX3S6QXT1G87ZP' where id=5; -update noar tt set v0='8BBW5JB0XDFQOSBT7655LOVU' where id=5; -update noar ti set v0='8BBW5JB0XDFQOSBT7655LOVU' where id=5; -update noar tt set b1='OKU84Q1QXHOSHYA' where id=5; -update noar ti set b1='OKU84Q1QXHOSHYA' where id=5; -update noar tt set v0='WUZKBYF0MJF9LY0Z7MW9B1SDTGG' where id=5; -update noar ti set v0='WUZKBYF0MJF9LY0Z7MW9B1SDTGG' where id=5; -update noar tt set b2='972R8P3BIB5G9UYJUQGBFO' where id=5; -update noar ti set b2='972R8P3BIB5G9UYJUQGBFO' where id=5; -update noar tt set v0='8V8V6PC9PAXGYF0Y2' where id=6; -update noar ti set v0='8V8V6PC9PAXGYF0Y2' where id=6; -update noar tt set b0='YENZ2TPH4Q3KSPA' where id=6; -update noar ti set b0='YENZ2TPH4Q3KSPA' where id=6; -update noar tt set v0='UWE' where id=6; -update noar ti set v0='UWE' where id=6; -update noar tt set b1='3EM30LIF4DWVC6PORYPB5EJL7XQ2V0M3' where id=6; -update noar ti set b1='3EM30LIF4DWVC6PORYPB5EJL7XQ2V0M3' where id=6; -update noar tt set v0='2SGNX5XBWKIBTTVH' where id=6; -update noar ti set v0='2SGNX5XBWKIBTTVH' where id=6; -update noar tt set b2='MX9WN14U2CVRTMGV0WHYSU1E' where id=6; -update noar ti set b2='MX9WN14U2CVRTMGV0WHYSU1E' where id=6; -update noar tt set v0='2VCUJMG3RMFRVH1KT22AC8HTD5W5NZ' where id=7; -update noar ti set v0='2VCUJMG3RMFRVH1KT22AC8HTD5W5NZ' where id=7; -update noar tt set b0='JS' where id=7; -update noar ti set b0='JS' where id=7; -update noar tt set v0='B2P267OQ1MAS3WU3U' where id=7; -update noar ti set v0='B2P267OQ1MAS3WU3U' where id=7; -update noar tt set b1='NOTIEHG55AEFI2WMV6JC76EZ' where id=7; -update noar ti set b1='NOTIEHG55AEFI2WMV6JC76EZ' where id=7; -update noar tt set v0='1LPSBB0' where id=7; -update noar ti set v0='1LPSBB0' where id=7; -update noar tt set b2='6TNNQHEHZYRPDWOZANBDHQDFJ3WDK7' where id=7; -update noar ti set b2='6TNNQHEHZYRPDWOZANBDHQDFJ3WDK7' where id=7; -update noar tt set v0='KG0JWNVUQ722399VHTV7YOA' where id=8; -update noar ti set v0='KG0JWNVUQ722399VHTV7YOA' where id=8; -update noar tt set b0='3Q76OP' where id=8; -update noar ti set b0='3Q76OP' where id=8; -update noar tt set v0='RBKDSTAI6' where id=8; -update noar ti set v0='RBKDSTAI6' where id=8; -update noar tt set b1='35PG77PKUUYWNG9GP7JMJD3' where id=8; -update noar ti set b1='35PG77PKUUYWNG9GP7JMJD3' where id=8; -update noar tt set v0='23EYCUMEU0AVHTLVS' where id=8; -update noar ti set v0='23EYCUMEU0AVHTLVS' where id=8; -update noar tt set b2='CW5F' where id=8; -update noar ti set b2='CW5F' where id=8; -update noar tt set v0='IZHLGIXARP' where id=9; -update noar ti set v0='IZHLGIXARP' where id=9; -update noar tt set b0='D6M81TBG0EJYQAECGJJ66FI6OUZMCY0' where id=9; -update noar ti set b0='D6M81TBG0EJYQAECGJJ66FI6OUZMCY0' where id=9; -update noar tt set v0='B1OLWPNGSEKHVF0O29' where id=9; -update noar ti set v0='B1OLWPNGSEKHVF0O29' where id=9; -update noar tt set b1='QQAMNZCS56W1XEY' where id=9; -update noar ti set b1='QQAMNZCS56W1XEY' where id=9; -update noar tt set v0='GSQP8AZFADL1CR0FMFOLB' where id=9; -update noar ti set v0='GSQP8AZFADL1CR0FMFOLB' where id=9; -update noar tt set b2='3LQYU9W5Z61LITFHR' where id=9; -update noar ti set b2='3LQYU9W5Z61LITFHR' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 longblob null, -b1 blob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='YONYM18' where id=1; -update noar ti set v0='YONYM18' where id=1; -update noar tt set b0='AI0QWE8N05I' where id=1; -update noar ti set b0='AI0QWE8N05I' where id=1; -update noar tt set v0='QLUZKSOOS56V' where id=1; -update noar ti set v0='QLUZKSOOS56V' where id=1; -update noar tt set b1='2U8JCISQB714A7YD11WK' where id=1; -update noar ti set b1='2U8JCISQB714A7YD11WK' where id=1; -update noar tt set v0='CATCGHN' where id=1; -update noar ti set v0='CATCGHN' where id=1; -update noar tt set b2='5KYO69AU9BOFGTUNPGUBALY' where id=1; -update noar ti set b2='5KYO69AU9BOFGTUNPGUBALY' where id=1; -update noar tt set v0='R' where id=2; -update noar ti set v0='R' where id=2; -update noar tt set b0='TGJYF6U40KSAC8UETFEX8H' where id=2; -update noar ti set b0='TGJYF6U40KSAC8UETFEX8H' where id=2; -update noar tt set v0='K7ZY5X8OWZAX' where id=2; -update noar ti set v0='K7ZY5X8OWZAX' where id=2; -update noar tt set b1='4GFVEME5YM4IV1ABHX8O2XS6056Z84' where id=2; -update noar ti set b1='4GFVEME5YM4IV1ABHX8O2XS6056Z84' where id=2; -update noar tt set v0='15XOYTMCQ' where id=2; -update noar ti set v0='15XOYTMCQ' where id=2; -update noar tt set b2='NSLY879L8AIZF2WX' where id=2; -update noar ti set b2='NSLY879L8AIZF2WX' where id=2; -update noar tt set v0='DNVTNZID4' where id=3; -update noar ti set v0='DNVTNZID4' where id=3; -update noar tt set b0='C1ZSLVL0MXY36RA' where id=3; -update noar ti set b0='C1ZSLVL0MXY36RA' where id=3; -update noar tt set v0='1PMFMNMY' where id=3; -update noar ti set v0='1PMFMNMY' where id=3; -update noar tt set b1='SM07010J6QPHP' where id=3; -update noar ti set b1='SM07010J6QPHP' where id=3; -update noar tt set v0='RIVP8IA08FPWSAN1WS' where id=3; -update noar ti set v0='RIVP8IA08FPWSAN1WS' where id=3; -update noar tt set b2='Q9UBZZ6KKNO45' where id=3; -update noar ti set b2='Q9UBZZ6KKNO45' where id=3; -update noar tt set v0='XTRFC869O8BNJKAPA03OK372JB' where id=4; -update noar ti set v0='XTRFC869O8BNJKAPA03OK372JB' where id=4; -update noar tt set b0='A6P23P5KVI1K3PEULJ' where id=4; -update noar ti set b0='A6P23P5KVI1K3PEULJ' where id=4; -update noar tt set v0='D6B28WGE' where id=4; -update noar ti set v0='D6B28WGE' where id=4; -update noar tt set b1='CU42ITSWPX' where id=4; -update noar ti set b1='CU42ITSWPX' where id=4; -update noar tt set v0='27WF9TOUI4FG52WGIXIG' where id=4; -update noar ti set v0='27WF9TOUI4FG52WGIXIG' where id=4; -update noar tt set b2='DUNRJYBKHPJWWX1K4IFMQJ9PM266Y' where id=4; -update noar ti set b2='DUNRJYBKHPJWWX1K4IFMQJ9PM266Y' where id=4; -update noar tt set v0='TDWHWPT1J4JYOI8' where id=5; -update noar ti set v0='TDWHWPT1J4JYOI8' where id=5; -update noar tt set b0='XD9H09BGNV9WTWKV6N4J67HL5' where id=5; -update noar ti set b0='XD9H09BGNV9WTWKV6N4J67HL5' where id=5; -update noar tt set v0='IKP2SJ' where id=5; -update noar ti set v0='IKP2SJ' where id=5; -update noar tt set b1='P52QQ02DYEZ57' where id=5; -update noar ti set b1='P52QQ02DYEZ57' where id=5; -update noar tt set v0='HNKJ1IEV4Y3NHHX2WG' where id=5; -update noar ti set v0='HNKJ1IEV4Y3NHHX2WG' where id=5; -update noar tt set b2='WI4IZFGLWN5QFG3' where id=5; -update noar ti set b2='WI4IZFGLWN5QFG3' where id=5; -update noar tt set v0='M5XVPJ04XXIOJ4S1' where id=6; -update noar ti set v0='M5XVPJ04XXIOJ4S1' where id=6; -update noar tt set b0='3VF5DDS8KPOZR5A85SM49JM1EZRTK8P' where id=6; -update noar ti set b0='3VF5DDS8KPOZR5A85SM49JM1EZRTK8P' where id=6; -update noar tt set v0='5D7JM' where id=6; -update noar ti set v0='5D7JM' where id=6; -update noar tt set b1='AQBXXPX7C110IDEXHH5' where id=6; -update noar ti set b1='AQBXXPX7C110IDEXHH5' where id=6; -update noar tt set v0='39ZLEVXA8HX37FBLIUU' where id=6; -update noar ti set v0='39ZLEVXA8HX37FBLIUU' where id=6; -update noar tt set b2='7KVP4NELFMNOZBUKRRNV3828GVT3' where id=6; -update noar ti set b2='7KVP4NELFMNOZBUKRRNV3828GVT3' where id=6; -update noar tt set v0='Z09T7DRWMGHAICKJJPPN0DIG2GA' where id=7; -update noar ti set v0='Z09T7DRWMGHAICKJJPPN0DIG2GA' where id=7; -update noar tt set b0='S9THXU9UZR14393V3J' where id=7; -update noar ti set b0='S9THXU9UZR14393V3J' where id=7; -update noar tt set v0='7' where id=7; -update noar ti set v0='7' where id=7; -update noar tt set b1='N7A9QKAKI565RW0ECJ85SJKGTN' where id=7; -update noar ti set b1='N7A9QKAKI565RW0ECJ85SJKGTN' where id=7; -update noar tt set v0='CHOSPO4IRCRDVM0LRECY' where id=7; -update noar ti set v0='CHOSPO4IRCRDVM0LRECY' where id=7; -update noar tt set b2='53KJJP4JM6KXQC2RJ1A6' where id=7; -update noar ti set b2='53KJJP4JM6KXQC2RJ1A6' where id=7; -update noar tt set v0='MP7YRS37FMJ1' where id=8; -update noar ti set v0='MP7YRS37FMJ1' where id=8; -update noar tt set b0='K' where id=8; -update noar ti set b0='K' where id=8; -update noar tt set v0='L8WFI1YNJ' where id=8; -update noar ti set v0='L8WFI1YNJ' where id=8; -update noar tt set b1='ZZXY2SD2EZTMZXM8ZPKCW04' where id=8; -update noar ti set b1='ZZXY2SD2EZTMZXM8ZPKCW04' where id=8; -update noar tt set v0='2GBIZMPN86LRDVA3SSHBKZ6B' where id=8; -update noar ti set v0='2GBIZMPN86LRDVA3SSHBKZ6B' where id=8; -update noar tt set b2='PHWAPRHKJHVJFU61VC' where id=8; -update noar ti set b2='PHWAPRHKJHVJFU61VC' where id=8; -update noar tt set v0='J1LR6T4RDXR58D6WJC5UBW4ZXBGN' where id=9; -update noar ti set v0='J1LR6T4RDXR58D6WJC5UBW4ZXBGN' where id=9; -update noar tt set b0='23QDE7DNP9MJX9NER4MAOJX5U5NFQH7B' where id=9; -update noar ti set b0='23QDE7DNP9MJX9NER4MAOJX5U5NFQH7B' where id=9; -update noar tt set v0='HZJAZDYSHQ24O5GARXIFE795ZUTZ6HBC' where id=9; -update noar ti set v0='HZJAZDYSHQ24O5GARXIFE795ZUTZ6HBC' where id=9; -update noar tt set b1='P4FBPYO8ASE6XD6JVZ' where id=9; -update noar ti set b1='P4FBPYO8ASE6XD6JVZ' where id=9; -update noar tt set v0='DPG9BR0RF3768OV1GZVZ8440WH' where id=9; -update noar ti set v0='DPG9BR0RF3768OV1GZVZ8440WH' where id=9; -update noar tt set b2='5NDSYFRC9V1UZV' where id=9; -update noar ti set b2='5NDSYFRC9V1UZV' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 longblob null, -b1 blob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='Z14GAEOUESAUR3K28KN' where id=1; -update noar ti set v0='Z14GAEOUESAUR3K28KN' where id=1; -update noar tt set b0='B9MAEXFNN2Z' where id=1; -update noar ti set b0='B9MAEXFNN2Z' where id=1; -update noar tt set v0='XI8FG328ASUUDNEL395WH9E' where id=1; -update noar ti set v0='XI8FG328ASUUDNEL395WH9E' where id=1; -update noar tt set b1='KB78MOSXXMHBZURL' where id=1; -update noar ti set b1='KB78MOSXXMHBZURL' where id=1; -update noar tt set v0='MFNTOWT1SNC4X366MZ8OIQ4SM' where id=1; -update noar ti set v0='MFNTOWT1SNC4X366MZ8OIQ4SM' where id=1; -update noar tt set b2='RZ0R8BR90MLLN4BKBB' where id=1; -update noar ti set b2='RZ0R8BR90MLLN4BKBB' where id=1; -update noar tt set v0='N9O01' where id=2; -update noar ti set v0='N9O01' where id=2; -update noar tt set b0='3OPTL2H3HQ8A1URVG07' where id=2; -update noar ti set b0='3OPTL2H3HQ8A1URVG07' where id=2; -update noar tt set v0='EKTHJUE76PWUJSDUZ7DT9Y' where id=2; -update noar ti set v0='EKTHJUE76PWUJSDUZ7DT9Y' where id=2; -update noar tt set b1='01R2TC8H6EGQJ67N5DWG9KQARBYBF4V' where id=2; -update noar ti set b1='01R2TC8H6EGQJ67N5DWG9KQARBYBF4V' where id=2; -update noar tt set v0='Y2MABJNHO4LN0X3GW7RU7VDS' where id=2; -update noar ti set v0='Y2MABJNHO4LN0X3GW7RU7VDS' where id=2; -update noar tt set b2='OF4OHJHNE65TDWC375VO3I' where id=2; -update noar ti set b2='OF4OHJHNE65TDWC375VO3I' where id=2; -update noar tt set v0='Z' where id=3; -update noar ti set v0='Z' where id=3; -update noar tt set b0='FEDDVZHGKKNOT3FUPS' where id=3; -update noar ti set b0='FEDDVZHGKKNOT3FUPS' where id=3; -update noar tt set v0='5CZ7J1B5URMY93CP6M9MO5IDRI4X' where id=3; -update noar ti set v0='5CZ7J1B5URMY93CP6M9MO5IDRI4X' where id=3; -update noar tt set b1='NAMG0TOBWBW2IP38J' where id=3; -update noar ti set b1='NAMG0TOBWBW2IP38J' where id=3; -update noar tt set v0='6OW03S1HJ8VH7L' where id=3; -update noar ti set v0='6OW03S1HJ8VH7L' where id=3; -update noar tt set b2='NT3T2G7HDX828PJUKV2OOSNX0' where id=3; -update noar ti set b2='NT3T2G7HDX828PJUKV2OOSNX0' where id=3; -update noar tt set v0='DAEAH8C0AIKJM4N01LQEUAN87B' where id=4; -update noar ti set v0='DAEAH8C0AIKJM4N01LQEUAN87B' where id=4; -update noar tt set b0='VIF4OQ71GD1C0K3' where id=4; -update noar ti set b0='VIF4OQ71GD1C0K3' where id=4; -update noar tt set v0='1E6NOEWBLQJ0ZXGST' where id=4; -update noar ti set v0='1E6NOEWBLQJ0ZXGST' where id=4; -update noar tt set b1='M1GZUS4KW9CM2P' where id=4; -update noar ti set b1='M1GZUS4KW9CM2P' where id=4; -update noar tt set v0='M4LEX8O8295OL54QJL' where id=4; -update noar ti set v0='M4LEX8O8295OL54QJL' where id=4; -update noar tt set b2='K5GYGGL6YP8J' where id=4; -update noar ti set b2='K5GYGGL6YP8J' where id=4; -update noar tt set v0='5YRVUOR5MF3D9' where id=5; -update noar ti set v0='5YRVUOR5MF3D9' where id=5; -update noar tt set b0='IOL4O' where id=5; -update noar ti set b0='IOL4O' where id=5; -update noar tt set v0='90I99KWXQSJYCGMMO6H7R1CO61NH' where id=5; -update noar ti set v0='90I99KWXQSJYCGMMO6H7R1CO61NH' where id=5; -update noar tt set b1='87YP56QR318G' where id=5; -update noar ti set b1='87YP56QR318G' where id=5; -update noar tt set v0='R0OS4P' where id=5; -update noar ti set v0='R0OS4P' where id=5; -update noar tt set b2='E5KQ15WIC' where id=5; -update noar ti set b2='E5KQ15WIC' where id=5; -update noar tt set v0='Q25B08G3RWCJYDN8' where id=6; -update noar ti set v0='Q25B08G3RWCJYDN8' where id=6; -update noar tt set b0='WFLJOQGPOBQIDJLO60' where id=6; -update noar ti set b0='WFLJOQGPOBQIDJLO60' where id=6; -update noar tt set v0='34ZIYEHGL7BOQXDJMMZALEMZ' where id=6; -update noar ti set v0='34ZIYEHGL7BOQXDJMMZALEMZ' where id=6; -update noar tt set b1='WF39BNL4OELFYLL3S4ATK84MMTG' where id=6; -update noar ti set b1='WF39BNL4OELFYLL3S4ATK84MMTG' where id=6; -update noar tt set v0='PX83216T247D' where id=6; -update noar ti set v0='PX83216T247D' where id=6; -update noar tt set b2='K41D7JT9UK' where id=6; -update noar ti set b2='K41D7JT9UK' where id=6; -update noar tt set v0='6YUD7' where id=7; -update noar ti set v0='6YUD7' where id=7; -update noar tt set b0='9S' where id=7; -update noar ti set b0='9S' where id=7; -update noar tt set v0='5P1N4WXLFAG3WFKFT6FI7BIRTZBPB' where id=7; -update noar ti set v0='5P1N4WXLFAG3WFKFT6FI7BIRTZBPB' where id=7; -update noar tt set b1='8YB7RBOIK' where id=7; -update noar ti set b1='8YB7RBOIK' where id=7; -update noar tt set v0='LMPETMV' where id=7; -update noar ti set v0='LMPETMV' where id=7; -update noar tt set b2='NSS8A54OG88BAJ3MRGHOZW79GC7H' where id=7; -update noar ti set b2='NSS8A54OG88BAJ3MRGHOZW79GC7H' where id=7; -update noar tt set v0='BG8CO4W2E8041' where id=8; -update noar ti set v0='BG8CO4W2E8041' where id=8; -update noar tt set b0='A2KA9KUHAD' where id=8; -update noar ti set b0='A2KA9KUHAD' where id=8; -update noar tt set v0='6KBJS2BW0LTY9K' where id=8; -update noar ti set v0='6KBJS2BW0LTY9K' where id=8; -update noar tt set b1='D7WTF3ZHJWT9OFLODDRE5F5DZ7U52' where id=8; -update noar ti set b1='D7WTF3ZHJWT9OFLODDRE5F5DZ7U52' where id=8; -update noar tt set v0='D648BBX55FIWVDFRPVEUW6WTCZ' where id=8; -update noar ti set v0='D648BBX55FIWVDFRPVEUW6WTCZ' where id=8; -update noar tt set b2='QI092KXNURF0D8SD512' where id=8; -update noar ti set b2='QI092KXNURF0D8SD512' where id=8; -update noar tt set v0='YJBVM9ZR5X7G9GI8Z5A29XZ' where id=9; -update noar ti set v0='YJBVM9ZR5X7G9GI8Z5A29XZ' where id=9; -update noar tt set b0='QBRE3KQURVJBPQYETCQK7T9A' where id=9; -update noar ti set b0='QBRE3KQURVJBPQYETCQK7T9A' where id=9; -update noar tt set v0='2RQONV2' where id=9; -update noar ti set v0='2RQONV2' where id=9; -update noar tt set b1='KXEU5ZHHMYUQRPX5YN2JKLDX1U4SF' where id=9; -update noar ti set b1='KXEU5ZHHMYUQRPX5YN2JKLDX1U4SF' where id=9; -update noar tt set v0='R8GJ54FYQYS7C' where id=9; -update noar ti set v0='R8GJ54FYQYS7C' where id=9; -update noar tt set b2='4KYCJBBB230K6PHESSQ4' where id=9; -update noar ti set b2='4KYCJBBB230K6PHESSQ4' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 longblob not null, -b1 blob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='DDSVFV8H0GENIFR6EWVXJR3QRB5' where id=1; -update noar ti set v0='DDSVFV8H0GENIFR6EWVXJR3QRB5' where id=1; -update noar tt set b0='7QM43QQ8UZ3' where id=1; -update noar ti set b0='7QM43QQ8UZ3' where id=1; -update noar tt set v0='JPROF4J4G2RKZ' where id=1; -update noar ti set v0='JPROF4J4G2RKZ' where id=1; -update noar tt set b1='ASRD9DD6H' where id=1; -update noar ti set b1='ASRD9DD6H' where id=1; -update noar tt set v0='RAN29HIW' where id=1; -update noar ti set v0='RAN29HIW' where id=1; -update noar tt set b2='YIYZR4KYFCOPK8Y' where id=1; -update noar ti set b2='YIYZR4KYFCOPK8Y' where id=1; -update noar tt set v0='OMSBMGFKOFGVW6' where id=2; -update noar ti set v0='OMSBMGFKOFGVW6' where id=2; -update noar tt set b0='G7FGHHFS9SDXYSMX4UFLGEHII29SX1' where id=2; -update noar ti set b0='G7FGHHFS9SDXYSMX4UFLGEHII29SX1' where id=2; -update noar tt set v0='S9DRXQFLS4S0UHMI96JB82796' where id=2; -update noar ti set v0='S9DRXQFLS4S0UHMI96JB82796' where id=2; -update noar tt set b1='Q6UT929U1JSJYTO' where id=2; -update noar ti set b1='Q6UT929U1JSJYTO' where id=2; -update noar tt set v0='CR4MB70H3ZTETYJDAW05QYWTJVG0' where id=2; -update noar ti set v0='CR4MB70H3ZTETYJDAW05QYWTJVG0' where id=2; -update noar tt set b2='VCS1BQJB8MUU7IXPQG' where id=2; -update noar ti set b2='VCS1BQJB8MUU7IXPQG' where id=2; -update noar tt set v0='7NFAKJE4350LHIG' where id=3; -update noar ti set v0='7NFAKJE4350LHIG' where id=3; -update noar tt set b0='6XFRW4R7JEHRN38QGW78V2DRNSJCM' where id=3; -update noar ti set b0='6XFRW4R7JEHRN38QGW78V2DRNSJCM' where id=3; -update noar tt set v0='RSIG88YV99' where id=3; -update noar ti set v0='RSIG88YV99' where id=3; -update noar tt set b1='W7YII0CZD0NY5LON80PI' where id=3; -update noar ti set b1='W7YII0CZD0NY5LON80PI' where id=3; -update noar tt set v0='UBJ09SVBII8' where id=3; -update noar ti set v0='UBJ09SVBII8' where id=3; -update noar tt set b2='GT3AI' where id=3; -update noar ti set b2='GT3AI' where id=3; -update noar tt set v0='0RV110SPRAZV5LV' where id=4; -update noar ti set v0='0RV110SPRAZV5LV' where id=4; -update noar tt set b0='7J9L3SW1QE8KMA0HWYL7W4QRAVNMI' where id=4; -update noar ti set b0='7J9L3SW1QE8KMA0HWYL7W4QRAVNMI' where id=4; -update noar tt set v0='W9Y98RZYGULDM7854BZT2IQUQ9TVN1' where id=4; -update noar ti set v0='W9Y98RZYGULDM7854BZT2IQUQ9TVN1' where id=4; -update noar tt set b1='7KE1X3HZ8YUS59BCJ8TZODH81AS' where id=4; -update noar ti set b1='7KE1X3HZ8YUS59BCJ8TZODH81AS' where id=4; -update noar tt set v0='5GKSOZ00HPHEDOD3SSLNI' where id=4; -update noar ti set v0='5GKSOZ00HPHEDOD3SSLNI' where id=4; -update noar tt set b2='L6Z8U64ORXR' where id=4; -update noar ti set b2='L6Z8U64ORXR' where id=4; -update noar tt set v0='A' where id=5; -update noar ti set v0='A' where id=5; -update noar tt set b0='MHYML2TCAXUKDD9P60888LM' where id=5; -update noar ti set b0='MHYML2TCAXUKDD9P60888LM' where id=5; -update noar tt set v0='EQ2NCZP' where id=5; -update noar ti set v0='EQ2NCZP' where id=5; -update noar tt set b1='COVK8CP5D7XYHERKBW7DNVU' where id=5; -update noar ti set b1='COVK8CP5D7XYHERKBW7DNVU' where id=5; -update noar tt set v0='YXF4D5QCXUF1ETKT' where id=5; -update noar ti set v0='YXF4D5QCXUF1ETKT' where id=5; -update noar tt set b2='6B0B05GWIUR' where id=5; -update noar ti set b2='6B0B05GWIUR' where id=5; -update noar tt set v0='O0LQI9OTX6TD19UQBL6IXM0D' where id=6; -update noar ti set v0='O0LQI9OTX6TD19UQBL6IXM0D' where id=6; -update noar tt set b0='WK9YH3YK0CCTI5JVNVX5Y1TO' where id=6; -update noar ti set b0='WK9YH3YK0CCTI5JVNVX5Y1TO' where id=6; -update noar tt set v0='SVHLNKOUVOQF7HOE6MRNFO86LND' where id=6; -update noar ti set v0='SVHLNKOUVOQF7HOE6MRNFO86LND' where id=6; -update noar tt set b1='VDFRUC5JSF6881ALDXJ' where id=6; -update noar ti set b1='VDFRUC5JSF6881ALDXJ' where id=6; -update noar tt set v0='OW6DCW7YIL6B265' where id=6; -update noar ti set v0='OW6DCW7YIL6B265' where id=6; -update noar tt set b2='PMG2VH0BY' where id=6; -update noar ti set b2='PMG2VH0BY' where id=6; -update noar tt set v0='NEIBCF43BE2YX6' where id=7; -update noar ti set v0='NEIBCF43BE2YX6' where id=7; -update noar tt set b0='CI' where id=7; -update noar ti set b0='CI' where id=7; -update noar tt set v0='92306LUVG4A22A2DLBMSSWKAP4' where id=7; -update noar ti set v0='92306LUVG4A22A2DLBMSSWKAP4' where id=7; -update noar tt set b1='QN1NNOTXV4CGU6MROHX6P8QBUKR31' where id=7; -update noar ti set b1='QN1NNOTXV4CGU6MROHX6P8QBUKR31' where id=7; -update noar tt set v0='54ZQYHSYM1' where id=7; -update noar ti set v0='54ZQYHSYM1' where id=7; -update noar tt set b2='TO' where id=7; -update noar ti set b2='TO' where id=7; -update noar tt set v0='WWY8ZWJDKBSTSMWKCKMP01MD9' where id=8; -update noar ti set v0='WWY8ZWJDKBSTSMWKCKMP01MD9' where id=8; -update noar tt set b0='A3AI0YAS36ED6YQY4X09DB8QEBF' where id=8; -update noar ti set b0='A3AI0YAS36ED6YQY4X09DB8QEBF' where id=8; -update noar tt set v0='PG17VN1CO6' where id=8; -update noar ti set v0='PG17VN1CO6' where id=8; -update noar tt set b1='RE' where id=8; -update noar ti set b1='RE' where id=8; -update noar tt set v0='54W' where id=8; -update noar ti set v0='54W' where id=8; -update noar tt set b2='RG6G8LKYUO9HNPLTA8GF4LEA2' where id=8; -update noar ti set b2='RG6G8LKYUO9HNPLTA8GF4LEA2' where id=8; -update noar tt set v0='B5V87HLW52NL8HM4K0JJOTZWZ' where id=9; -update noar ti set v0='B5V87HLW52NL8HM4K0JJOTZWZ' where id=9; -update noar tt set b0='I7EFVYGT0GHHPFOPKHQ7SJD0J046F0HP' where id=9; -update noar ti set b0='I7EFVYGT0GHHPFOPKHQ7SJD0J046F0HP' where id=9; -update noar tt set v0='1J34' where id=9; -update noar ti set v0='1J34' where id=9; -update noar tt set b1='C9HSHQ0UC4NPZ2NFRMFL6UHI' where id=9; -update noar ti set b1='C9HSHQ0UC4NPZ2NFRMFL6UHI' where id=9; -update noar tt set v0='E5N4DDJFCAOVK3R20FNQOFY1RXPCCF' where id=9; -update noar ti set v0='E5N4DDJFCAOVK3R20FNQOFY1RXPCCF' where id=9; -update noar tt set b2='NPZLW5YTKBN6MJQZXK6YYAO' where id=9; -update noar ti set b2='NPZLW5YTKBN6MJQZXK6YYAO' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 longblob not null, -b1 blob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='7RRJK4TZV3H6FJ3UQBRSHD' where id=1; -update noar ti set v0='7RRJK4TZV3H6FJ3UQBRSHD' where id=1; -update noar tt set b0='F5Z6D1ZFQLI51RFAUEOEQX9D6I48VF' where id=1; -update noar ti set b0='F5Z6D1ZFQLI51RFAUEOEQX9D6I48VF' where id=1; -update noar tt set v0='M' where id=1; -update noar ti set v0='M' where id=1; -update noar tt set b1='MQSFGLWER9K18JDS6IDPJW7' where id=1; -update noar ti set b1='MQSFGLWER9K18JDS6IDPJW7' where id=1; -update noar tt set v0='Y5LWOJ1TLVW06ARBP85Q3AHVLLV' where id=1; -update noar ti set v0='Y5LWOJ1TLVW06ARBP85Q3AHVLLV' where id=1; -update noar tt set b2='7J5W' where id=1; -update noar ti set b2='7J5W' where id=1; -update noar tt set v0='76I5PJYIS5' where id=2; -update noar ti set v0='76I5PJYIS5' where id=2; -update noar tt set b0='OX8Y39TCDCU98IT5J6ZZAPM' where id=2; -update noar ti set b0='OX8Y39TCDCU98IT5J6ZZAPM' where id=2; -update noar tt set v0='OI0E84MVEFLOTTRP' where id=2; -update noar ti set v0='OI0E84MVEFLOTTRP' where id=2; -update noar tt set b1='RRQOS' where id=2; -update noar ti set b1='RRQOS' where id=2; -update noar tt set v0='FFV38CZ3GHK9LFKCGODIZN9V' where id=2; -update noar ti set v0='FFV38CZ3GHK9LFKCGODIZN9V' where id=2; -update noar tt set b2='VC6GX3ECGLBQPHPV8FRA' where id=2; -update noar ti set b2='VC6GX3ECGLBQPHPV8FRA' where id=2; -update noar tt set v0='QPOQWY9WV7OV9Q5ABLRIQ73AB' where id=3; -update noar ti set v0='QPOQWY9WV7OV9Q5ABLRIQ73AB' where id=3; -update noar tt set b0='PX2WBY728KK03DB1KW3J' where id=3; -update noar ti set b0='PX2WBY728KK03DB1KW3J' where id=3; -update noar tt set v0='EYTBUGV60NDETLEKT8TMZLCA3PUF6KQZ' where id=3; -update noar ti set v0='EYTBUGV60NDETLEKT8TMZLCA3PUF6KQZ' where id=3; -update noar tt set b1='CMT1IFG44R' where id=3; -update noar ti set b1='CMT1IFG44R' where id=3; -update noar tt set v0='3Z8T9EW8ZT0VIU97S33QNPNLTWC' where id=3; -update noar ti set v0='3Z8T9EW8ZT0VIU97S33QNPNLTWC' where id=3; -update noar tt set b2='8DR8PJX3XFS2UEF' where id=3; -update noar ti set b2='8DR8PJX3XFS2UEF' where id=3; -update noar tt set v0='TFS1Y929M' where id=4; -update noar ti set v0='TFS1Y929M' where id=4; -update noar tt set b0='ASR0UTSTP8S99CAY' where id=4; -update noar ti set b0='ASR0UTSTP8S99CAY' where id=4; -update noar tt set v0='3QDD47CDXYMOME87DZYE' where id=4; -update noar ti set v0='3QDD47CDXYMOME87DZYE' where id=4; -update noar tt set b1='0HKBU09GXP6NW' where id=4; -update noar ti set b1='0HKBU09GXP6NW' where id=4; -update noar tt set v0='8D4' where id=4; -update noar ti set v0='8D4' where id=4; -update noar tt set b2='UXKSQ02' where id=4; -update noar ti set b2='UXKSQ02' where id=4; -update noar tt set v0='1A5L0F9Y5JFQYY3NIFCW3H8UC0KSMZK' where id=5; -update noar ti set v0='1A5L0F9Y5JFQYY3NIFCW3H8UC0KSMZK' where id=5; -update noar tt set b0='7ECFT9UE70Y1NDDY' where id=5; -update noar ti set b0='7ECFT9UE70Y1NDDY' where id=5; -update noar tt set v0='68JBZCC3R2I9YAE5TE2YF9' where id=5; -update noar ti set v0='68JBZCC3R2I9YAE5TE2YF9' where id=5; -update noar tt set b1='PCQPR05FTJBLPA31CR61G' where id=5; -update noar ti set b1='PCQPR05FTJBLPA31CR61G' where id=5; -update noar tt set v0='MH1TCBDS' where id=5; -update noar ti set v0='MH1TCBDS' where id=5; -update noar tt set b2='VUUIPZNRC13P0KY6EOG' where id=5; -update noar ti set b2='VUUIPZNRC13P0KY6EOG' where id=5; -update noar tt set v0='NEVMDPL4YWR4EB79YB25M6F' where id=6; -update noar ti set v0='NEVMDPL4YWR4EB79YB25M6F' where id=6; -update noar tt set b0='C1FZ3T7EC9UV0FY' where id=6; -update noar ti set b0='C1FZ3T7EC9UV0FY' where id=6; -update noar tt set v0='CICVJ9V1E9DURZJUQMP5MWTPWKEH5NT' where id=6; -update noar ti set v0='CICVJ9V1E9DURZJUQMP5MWTPWKEH5NT' where id=6; -update noar tt set b1='TF1G43K8T' where id=6; -update noar ti set b1='TF1G43K8T' where id=6; -update noar tt set v0='D9EQ0NF2VKKG6I9GPSNAOQM' where id=6; -update noar ti set v0='D9EQ0NF2VKKG6I9GPSNAOQM' where id=6; -update noar tt set b2='IRKI97C7ABF' where id=6; -update noar ti set b2='IRKI97C7ABF' where id=6; -update noar tt set v0='1X7FJQ4SHPO50QLDVYN0PMCQ' where id=7; -update noar ti set v0='1X7FJQ4SHPO50QLDVYN0PMCQ' where id=7; -update noar tt set b0='ME1RMXO9C6CKH1LWSQKS3RMEPJCCAO' where id=7; -update noar ti set b0='ME1RMXO9C6CKH1LWSQKS3RMEPJCCAO' where id=7; -update noar tt set v0='V' where id=7; -update noar ti set v0='V' where id=7; -update noar tt set b1='MY37S2NDPR' where id=7; -update noar ti set b1='MY37S2NDPR' where id=7; -update noar tt set v0='IG10I6M' where id=7; -update noar ti set v0='IG10I6M' where id=7; -update noar tt set b2='Y0BV7AUD891EIT48Z5Z7HMSHBM3FBLZD' where id=7; -update noar ti set b2='Y0BV7AUD891EIT48Z5Z7HMSHBM3FBLZD' where id=7; -update noar tt set v0='9OZ' where id=8; -update noar ti set v0='9OZ' where id=8; -update noar tt set b0='QJD5K8Q9HRHRF' where id=8; -update noar ti set b0='QJD5K8Q9HRHRF' where id=8; -update noar tt set v0='FO5UYDQA02GDM2PLVOWGZU' where id=8; -update noar ti set v0='FO5UYDQA02GDM2PLVOWGZU' where id=8; -update noar tt set b1='3K0' where id=8; -update noar ti set b1='3K0' where id=8; -update noar tt set v0='HMD874KV9J9EW6DTZXOWLYKCCIY570B' where id=8; -update noar ti set v0='HMD874KV9J9EW6DTZXOWLYKCCIY570B' where id=8; -update noar tt set b2='CBN1TMGTBEQ6GLDJL9QKON0L37JD6MV' where id=8; -update noar ti set b2='CBN1TMGTBEQ6GLDJL9QKON0L37JD6MV' where id=8; -update noar tt set v0='AAN2QC0JJZ26N310BPEAM1' where id=9; -update noar ti set v0='AAN2QC0JJZ26N310BPEAM1' where id=9; -update noar tt set b0='ABZHC09ZR2CZV3SRBMABYE5L' where id=9; -update noar ti set b0='ABZHC09ZR2CZV3SRBMABYE5L' where id=9; -update noar tt set v0='SP5I6G2BKJGRU' where id=9; -update noar ti set v0='SP5I6G2BKJGRU' where id=9; -update noar tt set b1='LNQNAWKLVS' where id=9; -update noar ti set b1='LNQNAWKLVS' where id=9; -update noar tt set v0='WGDF8SCS648ASOGN0K1L' where id=9; -update noar ti set v0='WGDF8SCS648ASOGN0K1L' where id=9; -update noar tt set b2='8O067WLVCGVKY8CPNM110C2N349N' where id=9; -update noar ti set b2='8O067WLVCGVKY8CPNM110C2N349N' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 longblob null, -b1 mediumblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='LXB51EVH933IPZ7O' where id=1; -update noar ti set v0='LXB51EVH933IPZ7O' where id=1; -update noar tt set b0='VVWWZ51BFZOEI8S4DTC09XISHW5002' where id=1; -update noar ti set b0='VVWWZ51BFZOEI8S4DTC09XISHW5002' where id=1; -update noar tt set v0='TSILO3GTPADNUYJNZZSTX' where id=1; -update noar ti set v0='TSILO3GTPADNUYJNZZSTX' where id=1; -update noar tt set b1='0Y5THGJXR8MY09' where id=1; -update noar ti set b1='0Y5THGJXR8MY09' where id=1; -update noar tt set v0='ONMKON6E680NVD2I9' where id=1; -update noar ti set v0='ONMKON6E680NVD2I9' where id=1; -update noar tt set b2='NU942F03I' where id=1; -update noar ti set b2='NU942F03I' where id=1; -update noar tt set v0='6HTK85Z1TEI6597H7AC' where id=2; -update noar ti set v0='6HTK85Z1TEI6597H7AC' where id=2; -update noar tt set b0='G7VNB96Z2LDV491' where id=2; -update noar ti set b0='G7VNB96Z2LDV491' where id=2; -update noar tt set v0='F8' where id=2; -update noar ti set v0='F8' where id=2; -update noar tt set b1='WQ5N8SG05PPBAC26YTO3NCE' where id=2; -update noar ti set b1='WQ5N8SG05PPBAC26YTO3NCE' where id=2; -update noar tt set v0='UU01XWY4Y' where id=2; -update noar ti set v0='UU01XWY4Y' where id=2; -update noar tt set b2='AF8A10BTGDI' where id=2; -update noar ti set b2='AF8A10BTGDI' where id=2; -update noar tt set v0='H37MOIAF9' where id=3; -update noar ti set v0='H37MOIAF9' where id=3; -update noar tt set b0='XNJ61TTRPDRZTS3X1WKPIDZB3VB81' where id=3; -update noar ti set b0='XNJ61TTRPDRZTS3X1WKPIDZB3VB81' where id=3; -update noar tt set v0='PEZ088L04Q' where id=3; -update noar ti set v0='PEZ088L04Q' where id=3; -update noar tt set b1='9UJWCTDHDWX7ELWEU0ZXM1AWEAQBD' where id=3; -update noar ti set b1='9UJWCTDHDWX7ELWEU0ZXM1AWEAQBD' where id=3; -update noar tt set v0='3HSJXW7BS0Y9T8B14TQSN69G' where id=3; -update noar ti set v0='3HSJXW7BS0Y9T8B14TQSN69G' where id=3; -update noar tt set b2='G1' where id=3; -update noar ti set b2='G1' where id=3; -update noar tt set v0='QGT280XEDYKPFF9' where id=4; -update noar ti set v0='QGT280XEDYKPFF9' where id=4; -update noar tt set b0='81OS93RR73ATUZB069CLJGA' where id=4; -update noar ti set b0='81OS93RR73ATUZB069CLJGA' where id=4; -update noar tt set v0='8US1FKCAF7BPLPTX3WN4' where id=4; -update noar ti set v0='8US1FKCAF7BPLPTX3WN4' where id=4; -update noar tt set b1='GEOLMX04V8YZ6MZFRIFPBP1DU9C2Y4A' where id=4; -update noar ti set b1='GEOLMX04V8YZ6MZFRIFPBP1DU9C2Y4A' where id=4; -update noar tt set v0='XPNWZEVNKFN6' where id=4; -update noar ti set v0='XPNWZEVNKFN6' where id=4; -update noar tt set b2='OADRS66BV7TBH2CR5IOKMTXK8V2ITN' where id=4; -update noar ti set b2='OADRS66BV7TBH2CR5IOKMTXK8V2ITN' where id=4; -update noar tt set v0='D0SU1SWXO10VHV' where id=5; -update noar ti set v0='D0SU1SWXO10VHV' where id=5; -update noar tt set b0='LQ4DRJ67' where id=5; -update noar ti set b0='LQ4DRJ67' where id=5; -update noar tt set v0='KCXV' where id=5; -update noar ti set v0='KCXV' where id=5; -update noar tt set b1='PCVGLFROKVYGKTUDS6MS' where id=5; -update noar ti set b1='PCVGLFROKVYGKTUDS6MS' where id=5; -update noar tt set v0='X63T5ZEDC7' where id=5; -update noar ti set v0='X63T5ZEDC7' where id=5; -update noar tt set b2='XJ8D7TZY54VUCEIO9GFMA48DO45Q' where id=5; -update noar ti set b2='XJ8D7TZY54VUCEIO9GFMA48DO45Q' where id=5; -update noar tt set v0='FJD4EYFIG47M190MW9GY' where id=6; -update noar ti set v0='FJD4EYFIG47M190MW9GY' where id=6; -update noar tt set b0='HP8M8EPA1N8A' where id=6; -update noar ti set b0='HP8M8EPA1N8A' where id=6; -update noar tt set v0='7DXMHU91JL72A4GAEB1T3PB8739H' where id=6; -update noar ti set v0='7DXMHU91JL72A4GAEB1T3PB8739H' where id=6; -update noar tt set b1='R' where id=6; -update noar ti set b1='R' where id=6; -update noar tt set v0='IZ9ENZKO66P7J5SHXYO0SY0BB7X' where id=6; -update noar ti set v0='IZ9ENZKO66P7J5SHXYO0SY0BB7X' where id=6; -update noar tt set b2='CARDU0M2JXD4U3B32KD1Q25FT2M507HW' where id=6; -update noar ti set b2='CARDU0M2JXD4U3B32KD1Q25FT2M507HW' where id=6; -update noar tt set v0='K8M0ME4QQWLE7J' where id=7; -update noar ti set v0='K8M0ME4QQWLE7J' where id=7; -update noar tt set b0='OXP87CUOH2DIH' where id=7; -update noar ti set b0='OXP87CUOH2DIH' where id=7; -update noar tt set v0='TCXXMB08G0213LLV0AH6AD7MG10GX' where id=7; -update noar ti set v0='TCXXMB08G0213LLV0AH6AD7MG10GX' where id=7; -update noar tt set b1='NSFBPDKH' where id=7; -update noar ti set b1='NSFBPDKH' where id=7; -update noar tt set v0='TDHS2IZLRCGE0' where id=7; -update noar ti set v0='TDHS2IZLRCGE0' where id=7; -update noar tt set b2='CX1QBHUUKZTZZ3EMEBZ91X7AJITF' where id=7; -update noar ti set b2='CX1QBHUUKZTZZ3EMEBZ91X7AJITF' where id=7; -update noar tt set v0='SKY' where id=8; -update noar ti set v0='SKY' where id=8; -update noar tt set b0='WQZ5CD0AR1GW58NPRN420B72EDUT19Y' where id=8; -update noar ti set b0='WQZ5CD0AR1GW58NPRN420B72EDUT19Y' where id=8; -update noar tt set v0='63LVMQB8EPY1C88MFO' where id=8; -update noar ti set v0='63LVMQB8EPY1C88MFO' where id=8; -update noar tt set b1='7JOEOOP7BIYH' where id=8; -update noar ti set b1='7JOEOOP7BIYH' where id=8; -update noar tt set v0='PYXAGS2ZLZVGM9XWHWX9HR' where id=8; -update noar ti set v0='PYXAGS2ZLZVGM9XWHWX9HR' where id=8; -update noar tt set b2='2' where id=8; -update noar ti set b2='2' where id=8; -update noar tt set v0='N5Y07Y8' where id=9; -update noar ti set v0='N5Y07Y8' where id=9; -update noar tt set b0='UZ898T' where id=9; -update noar ti set b0='UZ898T' where id=9; -update noar tt set v0='TGJGUPGGOO60LZN' where id=9; -update noar ti set v0='TGJGUPGGOO60LZN' where id=9; -update noar tt set b1='RHSJT6U9LQ4QCXDHQ7YL19EUNQV' where id=9; -update noar ti set b1='RHSJT6U9LQ4QCXDHQ7YL19EUNQV' where id=9; -update noar tt set v0='YGLESPKD68ILW' where id=9; -update noar ti set v0='YGLESPKD68ILW' where id=9; -update noar tt set b2='0RP733O6O5KTZJ81YWA3FARG' where id=9; -update noar ti set b2='0RP733O6O5KTZJ81YWA3FARG' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 longblob null, -b1 mediumblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='G1H9ZMYHDU' where id=1; -update noar ti set v0='G1H9ZMYHDU' where id=1; -update noar tt set b0='PABQ4WHRQB90WDGQGPRO1' where id=1; -update noar ti set b0='PABQ4WHRQB90WDGQGPRO1' where id=1; -update noar tt set v0='D96UZ0QVUJA2PBZE31P' where id=1; -update noar ti set v0='D96UZ0QVUJA2PBZE31P' where id=1; -update noar tt set b1='H0KDGY' where id=1; -update noar ti set b1='H0KDGY' where id=1; -update noar tt set v0='DH9MJ3' where id=1; -update noar ti set v0='DH9MJ3' where id=1; -update noar tt set b2='O5EC4WLTRIKHV2T8KSL' where id=1; -update noar ti set b2='O5EC4WLTRIKHV2T8KSL' where id=1; -update noar tt set v0='4PV3LIOE4T3ZSYEBAXEJW930O' where id=2; -update noar ti set v0='4PV3LIOE4T3ZSYEBAXEJW930O' where id=2; -update noar tt set b0='8PI03J1PMTLTXV' where id=2; -update noar ti set b0='8PI03J1PMTLTXV' where id=2; -update noar tt set v0='HFZDGNQZMHH303' where id=2; -update noar ti set v0='HFZDGNQZMHH303' where id=2; -update noar tt set b1='81I9O4QYU1QU' where id=2; -update noar ti set b1='81I9O4QYU1QU' where id=2; -update noar tt set v0='ATXQTWYN0ON6AS3ODR6' where id=2; -update noar ti set v0='ATXQTWYN0ON6AS3ODR6' where id=2; -update noar tt set b2='C' where id=2; -update noar ti set b2='C' where id=2; -update noar tt set v0='OTJ1162L63TWT3KEDDURS09V8HGSN6X' where id=3; -update noar ti set v0='OTJ1162L63TWT3KEDDURS09V8HGSN6X' where id=3; -update noar tt set b0='D7GNPDSSGG1LI' where id=3; -update noar ti set b0='D7GNPDSSGG1LI' where id=3; -update noar tt set v0='4RP86GH31TP8S2E2QL7CYQC6CKVPSNQV' where id=3; -update noar ti set v0='4RP86GH31TP8S2E2QL7CYQC6CKVPSNQV' where id=3; -update noar tt set b1='TYYHOVA35LB80IB59P3MM7' where id=3; -update noar ti set b1='TYYHOVA35LB80IB59P3MM7' where id=3; -update noar tt set v0='N19ALO7' where id=3; -update noar ti set v0='N19ALO7' where id=3; -update noar tt set b2='6EAXNJL9YDRK1RBMDDYJMVJYDEWXBPJ' where id=3; -update noar ti set b2='6EAXNJL9YDRK1RBMDDYJMVJYDEWXBPJ' where id=3; -update noar tt set v0='QSESKOBV35MWO581P6HKH881KP' where id=4; -update noar ti set v0='QSESKOBV35MWO581P6HKH881KP' where id=4; -update noar tt set b0='2W' where id=4; -update noar ti set b0='2W' where id=4; -update noar tt set v0='M2MD3A3XZUT50Q3KJ0ONYM' where id=4; -update noar ti set v0='M2MD3A3XZUT50Q3KJ0ONYM' where id=4; -update noar tt set b1='OC26D68' where id=4; -update noar ti set b1='OC26D68' where id=4; -update noar tt set v0='29VCK73FFCXRMH4Q8GUH1XCKFRVDRTK4' where id=4; -update noar ti set v0='29VCK73FFCXRMH4Q8GUH1XCKFRVDRTK4' where id=4; -update noar tt set b2='JR8G8S6XLMOEHF72DDMQPRKZ92' where id=4; -update noar ti set b2='JR8G8S6XLMOEHF72DDMQPRKZ92' where id=4; -update noar tt set v0='PN' where id=5; -update noar ti set v0='PN' where id=5; -update noar tt set b0='XWEFDCIILCY5' where id=5; -update noar ti set b0='XWEFDCIILCY5' where id=5; -update noar tt set v0='6JA6EKKGEOYJXAE0LONRI2TQJG' where id=5; -update noar ti set v0='6JA6EKKGEOYJXAE0LONRI2TQJG' where id=5; -update noar tt set b1='7SFHYH2T1QK6XGRJ6WW4MI88WRY6G5' where id=5; -update noar ti set b1='7SFHYH2T1QK6XGRJ6WW4MI88WRY6G5' where id=5; -update noar tt set v0='8O399Z0LCJOUDDJROX4SA' where id=5; -update noar ti set v0='8O399Z0LCJOUDDJROX4SA' where id=5; -update noar tt set b2='GFM3' where id=5; -update noar ti set b2='GFM3' where id=5; -update noar tt set v0='VNKH' where id=6; -update noar ti set v0='VNKH' where id=6; -update noar tt set b0='YGYMF3PLA2M3' where id=6; -update noar ti set b0='YGYMF3PLA2M3' where id=6; -update noar tt set v0='4PL5829VMSYNXJZKXLPFSS05YYA2U' where id=6; -update noar ti set v0='4PL5829VMSYNXJZKXLPFSS05YYA2U' where id=6; -update noar tt set b1='YJJ46L89X6M9' where id=6; -update noar ti set b1='YJJ46L89X6M9' where id=6; -update noar tt set v0='WHEZKK2FMOBNNS3X0Q' where id=6; -update noar ti set v0='WHEZKK2FMOBNNS3X0Q' where id=6; -update noar tt set b2='YVXATQDES26FWAK94BRIG' where id=6; -update noar ti set b2='YVXATQDES26FWAK94BRIG' where id=6; -update noar tt set v0='PADT6071U6NP' where id=7; -update noar ti set v0='PADT6071U6NP' where id=7; -update noar tt set b0='S53LPR8NS6V3CIM' where id=7; -update noar ti set b0='S53LPR8NS6V3CIM' where id=7; -update noar tt set v0='E4H7Z5EH5PL4' where id=7; -update noar ti set v0='E4H7Z5EH5PL4' where id=7; -update noar tt set b1='16D7520MJ6' where id=7; -update noar ti set b1='16D7520MJ6' where id=7; -update noar tt set v0='QBVH4MDZU' where id=7; -update noar ti set v0='QBVH4MDZU' where id=7; -update noar tt set b2='S2IX6SWEM69GF9LZ5U9H65EH' where id=7; -update noar ti set b2='S2IX6SWEM69GF9LZ5U9H65EH' where id=7; -update noar tt set v0='T078TFXU0Z' where id=8; -update noar ti set v0='T078TFXU0Z' where id=8; -update noar tt set b0='YFR' where id=8; -update noar ti set b0='YFR' where id=8; -update noar tt set v0='9N3NS4T16OVFT95ZJ80EHU2LQRS7PMEF' where id=8; -update noar ti set v0='9N3NS4T16OVFT95ZJ80EHU2LQRS7PMEF' where id=8; -update noar tt set b1='ZP8ULZRBFF2Z9O9X' where id=8; -update noar ti set b1='ZP8ULZRBFF2Z9O9X' where id=8; -update noar tt set v0='HLYQYQYFV224OY8' where id=8; -update noar ti set v0='HLYQYQYFV224OY8' where id=8; -update noar tt set b2='U462OA4KR4IRMY4CT7BJR9EOK' where id=8; -update noar ti set b2='U462OA4KR4IRMY4CT7BJR9EOK' where id=8; -update noar tt set v0='KJ5LIUOVSG9' where id=9; -update noar ti set v0='KJ5LIUOVSG9' where id=9; -update noar tt set b0='SUJJPR2' where id=9; -update noar ti set b0='SUJJPR2' where id=9; -update noar tt set v0='ICUDHA3SCRBQJQTYG' where id=9; -update noar ti set v0='ICUDHA3SCRBQJQTYG' where id=9; -update noar tt set b1='8I6T9F5J55H5HQ5ZHL2NCG547C' where id=9; -update noar ti set b1='8I6T9F5J55H5HQ5ZHL2NCG547C' where id=9; -update noar tt set v0='OKXC505ZDUC1VWS9' where id=9; -update noar ti set v0='OKXC505ZDUC1VWS9' where id=9; -update noar tt set b2='CPMK94U96ONWWFN7C' where id=9; -update noar ti set b2='CPMK94U96ONWWFN7C' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 longblob not null, -b1 mediumblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='6K2SJJW66IDTR' where id=1; -update noar ti set v0='6K2SJJW66IDTR' where id=1; -update noar tt set b0='5X2E4JI6FICQBNGU' where id=1; -update noar ti set b0='5X2E4JI6FICQBNGU' where id=1; -update noar tt set v0='U4RYDCKS00KW2OOK2HGEI5DKT' where id=1; -update noar ti set v0='U4RYDCKS00KW2OOK2HGEI5DKT' where id=1; -update noar tt set b1='3N5' where id=1; -update noar ti set b1='3N5' where id=1; -update noar tt set v0='8WQ' where id=1; -update noar ti set v0='8WQ' where id=1; -update noar tt set b2='E' where id=1; -update noar ti set b2='E' where id=1; -update noar tt set v0='IPKF' where id=2; -update noar ti set v0='IPKF' where id=2; -update noar tt set b0='RBSYU1EISEBS2531J2T8' where id=2; -update noar ti set b0='RBSYU1EISEBS2531J2T8' where id=2; -update noar tt set v0='4G97KWNHQV5TPKFQR8Y1YO7USW0DGSE' where id=2; -update noar ti set v0='4G97KWNHQV5TPKFQR8Y1YO7USW0DGSE' where id=2; -update noar tt set b1='ZI4180UK' where id=2; -update noar ti set b1='ZI4180UK' where id=2; -update noar tt set v0='1EMBWCUZMBOGYE3O3VEPA' where id=2; -update noar ti set v0='1EMBWCUZMBOGYE3O3VEPA' where id=2; -update noar tt set b2='8ZJW6BD7JOMEMUWH9CT8HQFID0PNAODZ' where id=2; -update noar ti set b2='8ZJW6BD7JOMEMUWH9CT8HQFID0PNAODZ' where id=2; -update noar tt set v0='BB84RG75BZJYD5HESV95VF9MORW1FK1' where id=3; -update noar ti set v0='BB84RG75BZJYD5HESV95VF9MORW1FK1' where id=3; -update noar tt set b0='ROKAP1N' where id=3; -update noar ti set b0='ROKAP1N' where id=3; -update noar tt set v0='ZR95U5OAG' where id=3; -update noar ti set v0='ZR95U5OAG' where id=3; -update noar tt set b1='KVQOTYY8BIR40GWJNDEX2LIM5C2T3O' where id=3; -update noar ti set b1='KVQOTYY8BIR40GWJNDEX2LIM5C2T3O' where id=3; -update noar tt set v0='4B243U3SQAU05HZ86' where id=3; -update noar ti set v0='4B243U3SQAU05HZ86' where id=3; -update noar tt set b2='ETFU1Q8RCGYGU65GGOTR' where id=3; -update noar ti set b2='ETFU1Q8RCGYGU65GGOTR' where id=3; -update noar tt set v0='ZNXU9CI8DGBIU5NQ' where id=4; -update noar ti set v0='ZNXU9CI8DGBIU5NQ' where id=4; -update noar tt set b0='FIQH1CCS4YBYVA6C8XU4N' where id=4; -update noar ti set b0='FIQH1CCS4YBYVA6C8XU4N' where id=4; -update noar tt set v0='UQMMFNCR21YX0SBZ2WTY64B1T0W8GLIJ' where id=4; -update noar ti set v0='UQMMFNCR21YX0SBZ2WTY64B1T0W8GLIJ' where id=4; -update noar tt set b1='1VR0W62SSPIQRV' where id=4; -update noar ti set b1='1VR0W62SSPIQRV' where id=4; -update noar tt set v0='KSEU60F3N0SOCE57QGO9GP6' where id=4; -update noar ti set v0='KSEU60F3N0SOCE57QGO9GP6' where id=4; -update noar tt set b2='RKRNM' where id=4; -update noar ti set b2='RKRNM' where id=4; -update noar tt set v0='US5EO8Y3KGQ' where id=5; -update noar ti set v0='US5EO8Y3KGQ' where id=5; -update noar tt set b0='LAVSR1GAT' where id=5; -update noar ti set b0='LAVSR1GAT' where id=5; -update noar tt set v0='VV3ZHJKFQ9IWQAZH' where id=5; -update noar ti set v0='VV3ZHJKFQ9IWQAZH' where id=5; -update noar tt set b1='31FCDPNMIAS5UXNLM' where id=5; -update noar ti set b1='31FCDPNMIAS5UXNLM' where id=5; -update noar tt set v0='6VZHU2MHIM2Y4RJC33BP1KA7MZ2DBL' where id=5; -update noar ti set v0='6VZHU2MHIM2Y4RJC33BP1KA7MZ2DBL' where id=5; -update noar tt set b2='7KBE2F' where id=5; -update noar ti set b2='7KBE2F' where id=5; -update noar tt set v0='QA34XR7VUJ8LH1OVXF70R6HF4V' where id=6; -update noar ti set v0='QA34XR7VUJ8LH1OVXF70R6HF4V' where id=6; -update noar tt set b0='PAFY' where id=6; -update noar ti set b0='PAFY' where id=6; -update noar tt set v0='9J' where id=6; -update noar ti set v0='9J' where id=6; -update noar tt set b1='0Y1XAJTYUMCRKLHNPB8Q2SZ06AJ88E' where id=6; -update noar ti set b1='0Y1XAJTYUMCRKLHNPB8Q2SZ06AJ88E' where id=6; -update noar tt set v0='I3SWKJZ' where id=6; -update noar ti set v0='I3SWKJZ' where id=6; -update noar tt set b2='T1MGQH8O28UNLWBF8YTVL1IWKPBGG3' where id=6; -update noar ti set b2='T1MGQH8O28UNLWBF8YTVL1IWKPBGG3' where id=6; -update noar tt set v0='VGN6A' where id=7; -update noar ti set v0='VGN6A' where id=7; -update noar tt set b0='57PCONKI' where id=7; -update noar ti set b0='57PCONKI' where id=7; -update noar tt set v0='X' where id=7; -update noar ti set v0='X' where id=7; -update noar tt set b1='HIL5LCX54AAWSHCL' where id=7; -update noar ti set b1='HIL5LCX54AAWSHCL' where id=7; -update noar tt set v0='8XPG8OF9KTYXXD174DKQ' where id=7; -update noar ti set v0='8XPG8OF9KTYXXD174DKQ' where id=7; -update noar tt set b2='T87J9Y7L7BKG' where id=7; -update noar ti set b2='T87J9Y7L7BKG' where id=7; -update noar tt set v0='PR' where id=8; -update noar ti set v0='PR' where id=8; -update noar tt set b0='C8A7QMQ0EUWAK' where id=8; -update noar ti set b0='C8A7QMQ0EUWAK' where id=8; -update noar tt set v0='RBKPU1JRANU7BZ0' where id=8; -update noar ti set v0='RBKPU1JRANU7BZ0' where id=8; -update noar tt set b1='XZT4DOI3WSU3EH' where id=8; -update noar ti set b1='XZT4DOI3WSU3EH' where id=8; -update noar tt set v0='UN1BDAFIIKY' where id=8; -update noar ti set v0='UN1BDAFIIKY' where id=8; -update noar tt set b2='6ZCDIOYBFTPNXE9FSFBH5XS82IS' where id=8; -update noar ti set b2='6ZCDIOYBFTPNXE9FSFBH5XS82IS' where id=8; -update noar tt set v0='0J50NLVHB97V0B47YH0Q9RZFJ428MNR3' where id=9; -update noar ti set v0='0J50NLVHB97V0B47YH0Q9RZFJ428MNR3' where id=9; -update noar tt set b0='LRK5A56Q1ZDDFV4MA' where id=9; -update noar ti set b0='LRK5A56Q1ZDDFV4MA' where id=9; -update noar tt set v0='BR8TXBWKS5CU1P5J9B07XKLA' where id=9; -update noar ti set v0='BR8TXBWKS5CU1P5J9B07XKLA' where id=9; -update noar tt set b1='9L3E9BSA59AP05EHZTX8G' where id=9; -update noar ti set b1='9L3E9BSA59AP05EHZTX8G' where id=9; -update noar tt set v0='TZEINUV7KPKMF6CXKH401PZ8F' where id=9; -update noar ti set v0='TZEINUV7KPKMF6CXKH401PZ8F' where id=9; -update noar tt set b2='QWYGS2ASPLEN07OS8N' where id=9; -update noar ti set b2='QWYGS2ASPLEN07OS8N' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 longblob not null, -b1 mediumblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='9TS0MDH3P' where id=1; -update noar ti set v0='9TS0MDH3P' where id=1; -update noar tt set b0='0CMLOH3TTQ2Q1' where id=1; -update noar ti set b0='0CMLOH3TTQ2Q1' where id=1; -update noar tt set v0='T8S756' where id=1; -update noar ti set v0='T8S756' where id=1; -update noar tt set b1='355ARES50AS85AUBYYVP0WL22' where id=1; -update noar ti set b1='355ARES50AS85AUBYYVP0WL22' where id=1; -update noar tt set v0='NYYZ7GE0NMLN4ZEOGZA8L1MJNNJ1S1YJ' where id=1; -update noar ti set v0='NYYZ7GE0NMLN4ZEOGZA8L1MJNNJ1S1YJ' where id=1; -update noar tt set b2='3PN2LXLQMBPKXZXPC48432XO5O' where id=1; -update noar ti set b2='3PN2LXLQMBPKXZXPC48432XO5O' where id=1; -update noar tt set v0='LS6XDT' where id=2; -update noar ti set v0='LS6XDT' where id=2; -update noar tt set b0='RW' where id=2; -update noar ti set b0='RW' where id=2; -update noar tt set v0='QY' where id=2; -update noar ti set v0='QY' where id=2; -update noar tt set b1='4BRIS' where id=2; -update noar ti set b1='4BRIS' where id=2; -update noar tt set v0='N8INEEY5RS' where id=2; -update noar ti set v0='N8INEEY5RS' where id=2; -update noar tt set b2='Y1WV8YLS' where id=2; -update noar ti set b2='Y1WV8YLS' where id=2; -update noar tt set v0='5KQJN0PTESKD59S8IT0TXZZR3R' where id=3; -update noar ti set v0='5KQJN0PTESKD59S8IT0TXZZR3R' where id=3; -update noar tt set b0='7LY8M6FAAUCZW8ZB' where id=3; -update noar ti set b0='7LY8M6FAAUCZW8ZB' where id=3; -update noar tt set v0='2CVN4J9V' where id=3; -update noar ti set v0='2CVN4J9V' where id=3; -update noar tt set b1='OP9GIEYSIB5YY8AK' where id=3; -update noar ti set b1='OP9GIEYSIB5YY8AK' where id=3; -update noar tt set v0='THS1HQ9XQXU3RVDCFQ8L1J' where id=3; -update noar ti set v0='THS1HQ9XQXU3RVDCFQ8L1J' where id=3; -update noar tt set b2='MOB8C53CXLUNG9QBNUNU4HYFOUFYFEOH' where id=3; -update noar ti set b2='MOB8C53CXLUNG9QBNUNU4HYFOUFYFEOH' where id=3; -update noar tt set v0='0V8L9WE7P3Q417Z5' where id=4; -update noar ti set v0='0V8L9WE7P3Q417Z5' where id=4; -update noar tt set b0='RL4YLL6FLGJ6S2J1' where id=4; -update noar ti set b0='RL4YLL6FLGJ6S2J1' where id=4; -update noar tt set v0='QFSKH2H1TS3BCNISDGH0' where id=4; -update noar ti set v0='QFSKH2H1TS3BCNISDGH0' where id=4; -update noar tt set b1='35QLAE3KA7PKEL7O9CGKK0PULE679C' where id=4; -update noar ti set b1='35QLAE3KA7PKEL7O9CGKK0PULE679C' where id=4; -update noar tt set v0='EQII2R355RSR' where id=4; -update noar ti set v0='EQII2R355RSR' where id=4; -update noar tt set b2='P6MDBFRNHDLWGI9OHO' where id=4; -update noar ti set b2='P6MDBFRNHDLWGI9OHO' where id=4; -update noar tt set v0='F3CL46CEH030ET6KW296UDFJ89XSLR' where id=5; -update noar ti set v0='F3CL46CEH030ET6KW296UDFJ89XSLR' where id=5; -update noar tt set b0='MQCEAXFPYQBQFPKC7QCD887X1UA4J' where id=5; -update noar ti set b0='MQCEAXFPYQBQFPKC7QCD887X1UA4J' where id=5; -update noar tt set v0='ZXRE5TYFAG4Z1VJIEZCY' where id=5; -update noar ti set v0='ZXRE5TYFAG4Z1VJIEZCY' where id=5; -update noar tt set b1='E2' where id=5; -update noar ti set b1='E2' where id=5; -update noar tt set v0='UL7EQXI7' where id=5; -update noar ti set v0='UL7EQXI7' where id=5; -update noar tt set b2='I8BC1Z' where id=5; -update noar ti set b2='I8BC1Z' where id=5; -update noar tt set v0='CQS6JNTZUDTERIHXWWTJHB40' where id=6; -update noar ti set v0='CQS6JNTZUDTERIHXWWTJHB40' where id=6; -update noar tt set b0='NQM2QIW' where id=6; -update noar ti set b0='NQM2QIW' where id=6; -update noar tt set v0='OCVQ828X97WN8' where id=6; -update noar ti set v0='OCVQ828X97WN8' where id=6; -update noar tt set b1='EEFEBSCQHC2' where id=6; -update noar ti set b1='EEFEBSCQHC2' where id=6; -update noar tt set v0='WG5YJ3IH3CYIKW17T0GVT' where id=6; -update noar ti set v0='WG5YJ3IH3CYIKW17T0GVT' where id=6; -update noar tt set b2='J8FTISLJ6OY43HSJM8' where id=6; -update noar ti set b2='J8FTISLJ6OY43HSJM8' where id=6; -update noar tt set v0='D63NS3K8GG' where id=7; -update noar ti set v0='D63NS3K8GG' where id=7; -update noar tt set b0='HQV4N0' where id=7; -update noar ti set b0='HQV4N0' where id=7; -update noar tt set v0='NLBFM6UXLAV8C04Q59' where id=7; -update noar ti set v0='NLBFM6UXLAV8C04Q59' where id=7; -update noar tt set b1='NB650R7J' where id=7; -update noar ti set b1='NB650R7J' where id=7; -update noar tt set v0='6UPSO6NOSR2ZW3VN44JQKAIX4Z' where id=7; -update noar ti set v0='6UPSO6NOSR2ZW3VN44JQKAIX4Z' where id=7; -update noar tt set b2='ORNLBCUZFR4VCYB96' where id=7; -update noar ti set b2='ORNLBCUZFR4VCYB96' where id=7; -update noar tt set v0='3RO482PQGYIBMWQ' where id=8; -update noar ti set v0='3RO482PQGYIBMWQ' where id=8; -update noar tt set b0='ZQ' where id=8; -update noar ti set b0='ZQ' where id=8; -update noar tt set v0='NS76MOHY' where id=8; -update noar ti set v0='NS76MOHY' where id=8; -update noar tt set b1='3DJSVFJM4CDFO42OBNML0DD' where id=8; -update noar ti set b1='3DJSVFJM4CDFO42OBNML0DD' where id=8; -update noar tt set v0='F8RF8BD' where id=8; -update noar ti set v0='F8RF8BD' where id=8; -update noar tt set b2='KAUSE91' where id=8; -update noar ti set b2='KAUSE91' where id=8; -update noar tt set v0='JN' where id=9; -update noar ti set v0='JN' where id=9; -update noar tt set b0='Z6KWLR' where id=9; -update noar ti set b0='Z6KWLR' where id=9; -update noar tt set v0='AWGO2VKOGWP79UOC2DH25EUQBL5Q' where id=9; -update noar ti set v0='AWGO2VKOGWP79UOC2DH25EUQBL5Q' where id=9; -update noar tt set b1='K9BO70L4M4BO4CDN4IO9' where id=9; -update noar ti set b1='K9BO70L4M4BO4CDN4IO9' where id=9; -update noar tt set v0='EO34' where id=9; -update noar ti set v0='EO34' where id=9; -update noar tt set b2='5TZWF3U9AEYMQIRS10' where id=9; -update noar ti set b2='5TZWF3U9AEYMQIRS10' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 longblob null, -b1 mediumblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='NY2V9AYD28KL3MQ7BOU' where id=1; -update noar ti set v0='NY2V9AYD28KL3MQ7BOU' where id=1; -update noar tt set b0='GNAGKPJA6YRNGN4KN' where id=1; -update noar ti set b0='GNAGKPJA6YRNGN4KN' where id=1; -update noar tt set v0='986J0K48ZSZ5DEODKG30W72P' where id=1; -update noar ti set v0='986J0K48ZSZ5DEODKG30W72P' where id=1; -update noar tt set b1='EXI9D2AO0' where id=1; -update noar ti set b1='EXI9D2AO0' where id=1; -update noar tt set v0='PQC8YMO' where id=1; -update noar ti set v0='PQC8YMO' where id=1; -update noar tt set b2='9M1V87WDQ9JL8ZVQVOUVLBMT' where id=1; -update noar ti set b2='9M1V87WDQ9JL8ZVQVOUVLBMT' where id=1; -update noar tt set v0='U7DWK1JFZKOHO0' where id=2; -update noar ti set v0='U7DWK1JFZKOHO0' where id=2; -update noar tt set b0='SD6OSYJQ0UP3H95V9B0YWLH' where id=2; -update noar ti set b0='SD6OSYJQ0UP3H95V9B0YWLH' where id=2; -update noar tt set v0='NBJ304PT4KLMQCAYKWHYZKT9Z7' where id=2; -update noar ti set v0='NBJ304PT4KLMQCAYKWHYZKT9Z7' where id=2; -update noar tt set b1='8RXU115RILP4396UHKAGGS760' where id=2; -update noar ti set b1='8RXU115RILP4396UHKAGGS760' where id=2; -update noar tt set v0='A2SBP34613FAAA0QOI' where id=2; -update noar ti set v0='A2SBP34613FAAA0QOI' where id=2; -update noar tt set b2='MKVCN5DY9CE72K8NX14YW4' where id=2; -update noar ti set b2='MKVCN5DY9CE72K8NX14YW4' where id=2; -update noar tt set v0='T3F2H345ESDXDFRMEAC2ZT3B' where id=3; -update noar ti set v0='T3F2H345ESDXDFRMEAC2ZT3B' where id=3; -update noar tt set b0='GFAG1TKHE34M1' where id=3; -update noar ti set b0='GFAG1TKHE34M1' where id=3; -update noar tt set v0='L68WIMVP65' where id=3; -update noar ti set v0='L68WIMVP65' where id=3; -update noar tt set b1='HA8D9TUD2IV4Z16OB5CP5TUEZHVD5' where id=3; -update noar ti set b1='HA8D9TUD2IV4Z16OB5CP5TUEZHVD5' where id=3; -update noar tt set v0='AN9KA1YD3IF2CN2MMBW' where id=3; -update noar ti set v0='AN9KA1YD3IF2CN2MMBW' where id=3; -update noar tt set b2='JGEIOEXK2KR0GPPDLP0BRIUCKUHQRUQT' where id=3; -update noar ti set b2='JGEIOEXK2KR0GPPDLP0BRIUCKUHQRUQT' where id=3; -update noar tt set v0='8OR' where id=4; -update noar ti set v0='8OR' where id=4; -update noar tt set b0='A0I15NYCO' where id=4; -update noar ti set b0='A0I15NYCO' where id=4; -update noar tt set v0='6MJYG6QADFXS0SBQIGEB' where id=4; -update noar ti set v0='6MJYG6QADFXS0SBQIGEB' where id=4; -update noar tt set b1='8LDJM326VPILF9PO0NX9' where id=4; -update noar ti set b1='8LDJM326VPILF9PO0NX9' where id=4; -update noar tt set v0='9' where id=4; -update noar ti set v0='9' where id=4; -update noar tt set b2='MV7FMC1PWIE20TN30MSYH1Q98P7RJ' where id=4; -update noar ti set b2='MV7FMC1PWIE20TN30MSYH1Q98P7RJ' where id=4; -update noar tt set v0='K66A0FG20A2PR1KKYI7NEMRBODDMC' where id=5; -update noar ti set v0='K66A0FG20A2PR1KKYI7NEMRBODDMC' where id=5; -update noar tt set b0='2AWUIS5FJMD3E5LI33MN8E9CQHNEOVE' where id=5; -update noar ti set b0='2AWUIS5FJMD3E5LI33MN8E9CQHNEOVE' where id=5; -update noar tt set v0='Z7B9VR3B82H8KYIMDBWMNQ6RA8ZU65K' where id=5; -update noar ti set v0='Z7B9VR3B82H8KYIMDBWMNQ6RA8ZU65K' where id=5; -update noar tt set b1='N568K29XYH9ZF3XYDOGM0BS6201WB' where id=5; -update noar ti set b1='N568K29XYH9ZF3XYDOGM0BS6201WB' where id=5; -update noar tt set v0='V6LZL2BUJ' where id=5; -update noar ti set v0='V6LZL2BUJ' where id=5; -update noar tt set b2='SNMJ2R8FDL4BCIKQ5' where id=5; -update noar ti set b2='SNMJ2R8FDL4BCIKQ5' where id=5; -update noar tt set v0='61ZLFTCDMJPM0VIY1G0I5A' where id=6; -update noar ti set v0='61ZLFTCDMJPM0VIY1G0I5A' where id=6; -update noar tt set b0='L3MKS4JOQ0JNJZMNCZ4ZCPC1BW9' where id=6; -update noar ti set b0='L3MKS4JOQ0JNJZMNCZ4ZCPC1BW9' where id=6; -update noar tt set v0='7G2JYXUXWF4' where id=6; -update noar ti set v0='7G2JYXUXWF4' where id=6; -update noar tt set b1='E0E6CCGWJD7FC' where id=6; -update noar ti set b1='E0E6CCGWJD7FC' where id=6; -update noar tt set v0='XGUN6QNIEYNCTOT' where id=6; -update noar ti set v0='XGUN6QNIEYNCTOT' where id=6; -update noar tt set b2='QEU906YOVQ' where id=6; -update noar ti set b2='QEU906YOVQ' where id=6; -update noar tt set v0='UM' where id=7; -update noar ti set v0='UM' where id=7; -update noar tt set b0='OPG20V4XVH7VFHVS' where id=7; -update noar ti set b0='OPG20V4XVH7VFHVS' where id=7; -update noar tt set v0='JGLTG9Z5ND3GIH2ERFK3P4WNYSRC5' where id=7; -update noar ti set v0='JGLTG9Z5ND3GIH2ERFK3P4WNYSRC5' where id=7; -update noar tt set b1='BI4YIZ8TMQ' where id=7; -update noar ti set b1='BI4YIZ8TMQ' where id=7; -update noar tt set v0='CDF' where id=7; -update noar ti set v0='CDF' where id=7; -update noar tt set b2='K1846T0O2Z6PQQP05GKWDC1WZ6' where id=7; -update noar ti set b2='K1846T0O2Z6PQQP05GKWDC1WZ6' where id=7; -update noar tt set v0='WMZE9KY3X87UFEGX3I' where id=8; -update noar ti set v0='WMZE9KY3X87UFEGX3I' where id=8; -update noar tt set b0='TCIAC2BZWIVPQ9Q4ULH168QEHN8' where id=8; -update noar ti set b0='TCIAC2BZWIVPQ9Q4ULH168QEHN8' where id=8; -update noar tt set v0='MFSAHNC01KBVQQ75BC' where id=8; -update noar ti set v0='MFSAHNC01KBVQQ75BC' where id=8; -update noar tt set b1='K05O0BLUTOKTZF6ZJ3F' where id=8; -update noar ti set b1='K05O0BLUTOKTZF6ZJ3F' where id=8; -update noar tt set v0='M' where id=8; -update noar ti set v0='M' where id=8; -update noar tt set b2='EL5' where id=8; -update noar ti set b2='EL5' where id=8; -update noar tt set v0='CBXCGZYCLO0XEPNGVUVA' where id=9; -update noar ti set v0='CBXCGZYCLO0XEPNGVUVA' where id=9; -update noar tt set b0='0NFY2CYIFR' where id=9; -update noar ti set b0='0NFY2CYIFR' where id=9; -update noar tt set v0='EQGYRHPK836AOF' where id=9; -update noar ti set v0='EQGYRHPK836AOF' where id=9; -update noar tt set b1='QUFUPB09US52' where id=9; -update noar ti set b1='QUFUPB09US52' where id=9; -update noar tt set v0='TMT5B' where id=9; -update noar ti set v0='TMT5B' where id=9; -update noar tt set b2='S503WU5RTVN9B27' where id=9; -update noar ti set b2='S503WU5RTVN9B27' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 longblob null, -b1 mediumblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='PU0243VWIF4B6XH53LHDDZMVRVYE4PJY' where id=1; -update noar ti set v0='PU0243VWIF4B6XH53LHDDZMVRVYE4PJY' where id=1; -update noar tt set b0='TD2Q53X2RUAGDI6A0CK2A9C2OF4VUK' where id=1; -update noar ti set b0='TD2Q53X2RUAGDI6A0CK2A9C2OF4VUK' where id=1; -update noar tt set v0='PG5VSTFS34O31D42A1WE2S' where id=1; -update noar ti set v0='PG5VSTFS34O31D42A1WE2S' where id=1; -update noar tt set b1='58EDT7WQ337DKZ6T016YWOJUHH' where id=1; -update noar ti set b1='58EDT7WQ337DKZ6T016YWOJUHH' where id=1; -update noar tt set v0='IODP3IKTLSW514079080WBTEZ' where id=1; -update noar ti set v0='IODP3IKTLSW514079080WBTEZ' where id=1; -update noar tt set b2='RH6OKNO2JOY2CXNNI5CLQFDZIGNL0Q' where id=1; -update noar ti set b2='RH6OKNO2JOY2CXNNI5CLQFDZIGNL0Q' where id=1; -update noar tt set v0='WXDP6T761RGM68FRZ31UEA11EOA2' where id=2; -update noar ti set v0='WXDP6T761RGM68FRZ31UEA11EOA2' where id=2; -update noar tt set b0='XWJZ67VKOOFBH27HP' where id=2; -update noar ti set b0='XWJZ67VKOOFBH27HP' where id=2; -update noar tt set v0='G1NWW83LA4QOTBL7VQ' where id=2; -update noar ti set v0='G1NWW83LA4QOTBL7VQ' where id=2; -update noar tt set b1='3TR833VN' where id=2; -update noar ti set b1='3TR833VN' where id=2; -update noar tt set v0='XLL1JHVPRABD' where id=2; -update noar ti set v0='XLL1JHVPRABD' where id=2; -update noar tt set b2='KR02VZPISZOX3' where id=2; -update noar ti set b2='KR02VZPISZOX3' where id=2; -update noar tt set v0='CSTJRDS3EDJLGZD' where id=3; -update noar ti set v0='CSTJRDS3EDJLGZD' where id=3; -update noar tt set b0='7U3YADF' where id=3; -update noar ti set b0='7U3YADF' where id=3; -update noar tt set v0='PA33FIMK' where id=3; -update noar ti set v0='PA33FIMK' where id=3; -update noar tt set b1='QLXWHDQL2J4PYPUMK50IZUMZF' where id=3; -update noar ti set b1='QLXWHDQL2J4PYPUMK50IZUMZF' where id=3; -update noar tt set v0='7OSIMBKV3' where id=3; -update noar ti set v0='7OSIMBKV3' where id=3; -update noar tt set b2='9P63D50WO' where id=3; -update noar ti set b2='9P63D50WO' where id=3; -update noar tt set v0='B' where id=4; -update noar ti set v0='B' where id=4; -update noar tt set b0='ZI60CR3YU' where id=4; -update noar ti set b0='ZI60CR3YU' where id=4; -update noar tt set v0='K7BM16E7EEC2SCT488OABNVMF' where id=4; -update noar ti set v0='K7BM16E7EEC2SCT488OABNVMF' where id=4; -update noar tt set b1='DFO4TZ3JI9B4' where id=4; -update noar ti set b1='DFO4TZ3JI9B4' where id=4; -update noar tt set v0='K77XRSWQTJTA12S73I47A739' where id=4; -update noar ti set v0='K77XRSWQTJTA12S73I47A739' where id=4; -update noar tt set b2='EO50VRN' where id=4; -update noar ti set b2='EO50VRN' where id=4; -update noar tt set v0='R38CI5QP6IHTL3RJAV' where id=5; -update noar ti set v0='R38CI5QP6IHTL3RJAV' where id=5; -update noar tt set b0='9JKZMR476BMU5LNH69HDOHV4E' where id=5; -update noar ti set b0='9JKZMR476BMU5LNH69HDOHV4E' where id=5; -update noar tt set v0='WTLOMCY9' where id=5; -update noar ti set v0='WTLOMCY9' where id=5; -update noar tt set b1='7P1' where id=5; -update noar ti set b1='7P1' where id=5; -update noar tt set v0='8JG0' where id=5; -update noar ti set v0='8JG0' where id=5; -update noar tt set b2='DYFL4CUNB' where id=5; -update noar ti set b2='DYFL4CUNB' where id=5; -update noar tt set v0='68WUG89' where id=6; -update noar ti set v0='68WUG89' where id=6; -update noar tt set b0='IJ0U3G585DNTV6KRA8Z7UMQ' where id=6; -update noar ti set b0='IJ0U3G585DNTV6KRA8Z7UMQ' where id=6; -update noar tt set v0='QSCJRC9Y8WVVMU4GSXL' where id=6; -update noar ti set v0='QSCJRC9Y8WVVMU4GSXL' where id=6; -update noar tt set b1='SSUH7EJ86PQC7R1PR' where id=6; -update noar ti set b1='SSUH7EJ86PQC7R1PR' where id=6; -update noar tt set v0='08BVPHGCTOYDJANC08U5U50XT' where id=6; -update noar ti set v0='08BVPHGCTOYDJANC08U5U50XT' where id=6; -update noar tt set b2='H7' where id=6; -update noar ti set b2='H7' where id=6; -update noar tt set v0='G6S8M1820V1XO74S5SQ' where id=7; -update noar ti set v0='G6S8M1820V1XO74S5SQ' where id=7; -update noar tt set b0='3H' where id=7; -update noar ti set b0='3H' where id=7; -update noar tt set v0='H0O9HZHX8XD73DRNW' where id=7; -update noar ti set v0='H0O9HZHX8XD73DRNW' where id=7; -update noar tt set b1='KO712MFU5OXPY6XLRAH4E3E9C' where id=7; -update noar ti set b1='KO712MFU5OXPY6XLRAH4E3E9C' where id=7; -update noar tt set v0='4ME5IJ60RGW8' where id=7; -update noar ti set v0='4ME5IJ60RGW8' where id=7; -update noar tt set b2='6' where id=7; -update noar ti set b2='6' where id=7; -update noar tt set v0='4G1XESX3UU7TX5QUUVDP' where id=8; -update noar ti set v0='4G1XESX3UU7TX5QUUVDP' where id=8; -update noar tt set b0='FQ6Y7AJB5B1KNI3O4WZ' where id=8; -update noar ti set b0='FQ6Y7AJB5B1KNI3O4WZ' where id=8; -update noar tt set v0='L8ADRM5UTXW' where id=8; -update noar ti set v0='L8ADRM5UTXW' where id=8; -update noar tt set b1='I58SCELVBM8ENNR1' where id=8; -update noar ti set b1='I58SCELVBM8ENNR1' where id=8; -update noar tt set v0='P6X02730A51CITJL2B5T1OU4PQFD855R' where id=8; -update noar ti set v0='P6X02730A51CITJL2B5T1OU4PQFD855R' where id=8; -update noar tt set b2='8OA6S0O5XV' where id=8; -update noar ti set b2='8OA6S0O5XV' where id=8; -update noar tt set v0='C' where id=9; -update noar ti set v0='C' where id=9; -update noar tt set b0='DYVA472M3CZIOATJ8' where id=9; -update noar ti set b0='DYVA472M3CZIOATJ8' where id=9; -update noar tt set v0='8L' where id=9; -update noar ti set v0='8L' where id=9; -update noar tt set b1='6E0KPQOR' where id=9; -update noar ti set b1='6E0KPQOR' where id=9; -update noar tt set v0='3Z45SH4X8B6FT07K' where id=9; -update noar ti set v0='3Z45SH4X8B6FT07K' where id=9; -update noar tt set b2='G0RAQNSEACS' where id=9; -update noar ti set b2='G0RAQNSEACS' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 longblob not null, -b1 mediumblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='13YRU' where id=1; -update noar ti set v0='13YRU' where id=1; -update noar tt set b0='RY2V8YLWEL60PTHJO5GLKBM73AC' where id=1; -update noar ti set b0='RY2V8YLWEL60PTHJO5GLKBM73AC' where id=1; -update noar tt set v0='28CPM4LYE3QYH9JD05HSKWHHAQ9GJ' where id=1; -update noar ti set v0='28CPM4LYE3QYH9JD05HSKWHHAQ9GJ' where id=1; -update noar tt set b1='WFRDECHOEGAUXW71VURN6Q2A8' where id=1; -update noar ti set b1='WFRDECHOEGAUXW71VURN6Q2A8' where id=1; -update noar tt set v0='10S5F9RFU22M60T77Y4Y19RY0CQ7J' where id=1; -update noar ti set v0='10S5F9RFU22M60T77Y4Y19RY0CQ7J' where id=1; -update noar tt set b2='5UHXO' where id=1; -update noar ti set b2='5UHXO' where id=1; -update noar tt set v0='BGLOM0' where id=2; -update noar ti set v0='BGLOM0' where id=2; -update noar tt set b0='57BSMBFFYRTYYHHD7TXG3JVFARFQ' where id=2; -update noar ti set b0='57BSMBFFYRTYYHHD7TXG3JVFARFQ' where id=2; -update noar tt set v0='M6HLEVD9J67KV21PCLEDQXH4N' where id=2; -update noar ti set v0='M6HLEVD9J67KV21PCLEDQXH4N' where id=2; -update noar tt set b1='E1BNI02Z5I6W89Q' where id=2; -update noar ti set b1='E1BNI02Z5I6W89Q' where id=2; -update noar tt set v0='S9U342SAFFBVSV8HBFPGEA57N34X9U' where id=2; -update noar ti set v0='S9U342SAFFBVSV8HBFPGEA57N34X9U' where id=2; -update noar tt set b2='UVL37GGK9WY5P7R053VU503ZUQF61P' where id=2; -update noar ti set b2='UVL37GGK9WY5P7R053VU503ZUQF61P' where id=2; -update noar tt set v0='2ZZOKPMCJYMQG8Q9A2' where id=3; -update noar ti set v0='2ZZOKPMCJYMQG8Q9A2' where id=3; -update noar tt set b0='5X2O0NGRP8O14YCWJ2WPYEXTNGB' where id=3; -update noar ti set b0='5X2O0NGRP8O14YCWJ2WPYEXTNGB' where id=3; -update noar tt set v0='VIS1PZ83SJRLOE30HUJO7K9EPWOOZ' where id=3; -update noar ti set v0='VIS1PZ83SJRLOE30HUJO7K9EPWOOZ' where id=3; -update noar tt set b1='JNI' where id=3; -update noar ti set b1='JNI' where id=3; -update noar tt set v0='I86WBGJ7UO' where id=3; -update noar ti set v0='I86WBGJ7UO' where id=3; -update noar tt set b2='KV9EQ3AO0NCDGY2HKI1' where id=3; -update noar ti set b2='KV9EQ3AO0NCDGY2HKI1' where id=3; -update noar tt set v0='0FR13GFXWT6A' where id=4; -update noar ti set v0='0FR13GFXWT6A' where id=4; -update noar tt set b0='T5PXLME89GEJIQGSFLWH7' where id=4; -update noar ti set b0='T5PXLME89GEJIQGSFLWH7' where id=4; -update noar tt set v0='AXJIMRV4AACRMERBZHWNZYS7' where id=4; -update noar ti set v0='AXJIMRV4AACRMERBZHWNZYS7' where id=4; -update noar tt set b1='X' where id=4; -update noar ti set b1='X' where id=4; -update noar tt set v0='UC4IH59N2KOQWIUZT66DV3818' where id=4; -update noar ti set v0='UC4IH59N2KOQWIUZT66DV3818' where id=4; -update noar tt set b2='NLU8A8UKTK9F648EWNQHQ' where id=4; -update noar ti set b2='NLU8A8UKTK9F648EWNQHQ' where id=4; -update noar tt set v0='WUQRPE' where id=5; -update noar ti set v0='WUQRPE' where id=5; -update noar tt set b0='SSZXOCKA3EIF4FGFIIGC7W' where id=5; -update noar ti set b0='SSZXOCKA3EIF4FGFIIGC7W' where id=5; -update noar tt set v0='RFQ4NIIXYXPQGS6HX0LS6QYKEOT0C' where id=5; -update noar ti set v0='RFQ4NIIXYXPQGS6HX0LS6QYKEOT0C' where id=5; -update noar tt set b1='G0' where id=5; -update noar ti set b1='G0' where id=5; -update noar tt set v0='HSYK' where id=5; -update noar ti set v0='HSYK' where id=5; -update noar tt set b2='1TIS2BSHSFS2' where id=5; -update noar ti set b2='1TIS2BSHSFS2' where id=5; -update noar tt set v0='VJVHOZ0ZJVRYFNWRIOAZZAE1Y4DNU2GL' where id=6; -update noar ti set v0='VJVHOZ0ZJVRYFNWRIOAZZAE1Y4DNU2GL' where id=6; -update noar tt set b0='RX4CW00Z07R60QD04GZ3AA9HPG80P' where id=6; -update noar ti set b0='RX4CW00Z07R60QD04GZ3AA9HPG80P' where id=6; -update noar tt set v0='CKKEMN9HN0PHYCW93TUK680LU836WUQI' where id=6; -update noar ti set v0='CKKEMN9HN0PHYCW93TUK680LU836WUQI' where id=6; -update noar tt set b1='M6J3MW1RN9EDUGEQDBLOXGCK7PUZC39C' where id=6; -update noar ti set b1='M6J3MW1RN9EDUGEQDBLOXGCK7PUZC39C' where id=6; -update noar tt set v0='7HBUD1IX0SYW7P6' where id=6; -update noar ti set v0='7HBUD1IX0SYW7P6' where id=6; -update noar tt set b2='L7SN1I8' where id=6; -update noar ti set b2='L7SN1I8' where id=6; -update noar tt set v0='K827W6QROVQE0ZCAHLLWTWE7' where id=7; -update noar ti set v0='K827W6QROVQE0ZCAHLLWTWE7' where id=7; -update noar tt set b0='ZIRT3HUAYYOGAPBLAYQO03H' where id=7; -update noar ti set b0='ZIRT3HUAYYOGAPBLAYQO03H' where id=7; -update noar tt set v0='VCF0AYOOJ26NMZ4GA7PM' where id=7; -update noar ti set v0='VCF0AYOOJ26NMZ4GA7PM' where id=7; -update noar tt set b1='MRBRCR1PWAC9HR2B2G2' where id=7; -update noar ti set b1='MRBRCR1PWAC9HR2B2G2' where id=7; -update noar tt set v0='XPBWZF2VK' where id=7; -update noar ti set v0='XPBWZF2VK' where id=7; -update noar tt set b2='X82Q2U83BJRBNXW6NT3L' where id=7; -update noar ti set b2='X82Q2U83BJRBNXW6NT3L' where id=7; -update noar tt set v0='53XNMDTGTWELZPEJ9GDNVC0I' where id=8; -update noar ti set v0='53XNMDTGTWELZPEJ9GDNVC0I' where id=8; -update noar tt set b0='53KEDWGVCNC6RJPKK' where id=8; -update noar ti set b0='53KEDWGVCNC6RJPKK' where id=8; -update noar tt set v0='JRTYKPMVJTZZE' where id=8; -update noar ti set v0='JRTYKPMVJTZZE' where id=8; -update noar tt set b1='X1NGRWUSX6' where id=8; -update noar ti set b1='X1NGRWUSX6' where id=8; -update noar tt set v0='RKBR7FOTNDVSO3' where id=8; -update noar ti set v0='RKBR7FOTNDVSO3' where id=8; -update noar tt set b2='GR' where id=8; -update noar ti set b2='GR' where id=8; -update noar tt set v0='WYO' where id=9; -update noar ti set v0='WYO' where id=9; -update noar tt set b0='U08SNEV3U3SUDPE05LITOMR77' where id=9; -update noar ti set b0='U08SNEV3U3SUDPE05LITOMR77' where id=9; -update noar tt set v0='6L3L6FWLZCT' where id=9; -update noar ti set v0='6L3L6FWLZCT' where id=9; -update noar tt set b1='6BC54JOSGZVB' where id=9; -update noar ti set b1='6BC54JOSGZVB' where id=9; -update noar tt set v0='KP6HATGVF' where id=9; -update noar ti set v0='KP6HATGVF' where id=9; -update noar tt set b2='30R0W256SGTR1IGGLT5A0TJUZX' where id=9; -update noar ti set b2='30R0W256SGTR1IGGLT5A0TJUZX' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 longblob not null, -b1 mediumblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='M91AP06W697DLGNYDQ' where id=1; -update noar ti set v0='M91AP06W697DLGNYDQ' where id=1; -update noar tt set b0='WFDAHZMNCU43Q' where id=1; -update noar ti set b0='WFDAHZMNCU43Q' where id=1; -update noar tt set v0='VP34CV5WT66' where id=1; -update noar ti set v0='VP34CV5WT66' where id=1; -update noar tt set b1='MH46QOYX43FGR1G48H1MQOD' where id=1; -update noar ti set b1='MH46QOYX43FGR1G48H1MQOD' where id=1; -update noar tt set v0='423TAD7T91Y1E94VGC26CVV4W24SM1PT' where id=1; -update noar ti set v0='423TAD7T91Y1E94VGC26CVV4W24SM1PT' where id=1; -update noar tt set b2='N3Q043CNTKV20LNH6X5T' where id=1; -update noar ti set b2='N3Q043CNTKV20LNH6X5T' where id=1; -update noar tt set v0='ZBWF131G0KDB' where id=2; -update noar ti set v0='ZBWF131G0KDB' where id=2; -update noar tt set b0='X84' where id=2; -update noar ti set b0='X84' where id=2; -update noar tt set v0='8ZR4AOD' where id=2; -update noar ti set v0='8ZR4AOD' where id=2; -update noar tt set b1='VGRTFJ48FI0HX8XFKD2CRWS' where id=2; -update noar ti set b1='VGRTFJ48FI0HX8XFKD2CRWS' where id=2; -update noar tt set v0='63JYKWV46HV08HJIV5M1' where id=2; -update noar ti set v0='63JYKWV46HV08HJIV5M1' where id=2; -update noar tt set b2='YUJDIQBKG5QLYE6ZA6AEF6PCDH76K9' where id=2; -update noar ti set b2='YUJDIQBKG5QLYE6ZA6AEF6PCDH76K9' where id=2; -update noar tt set v0='4GJSF' where id=3; -update noar ti set v0='4GJSF' where id=3; -update noar tt set b0='TKTO4JCXSZEKM28WLLA03U9YNEX11LPU' where id=3; -update noar ti set b0='TKTO4JCXSZEKM28WLLA03U9YNEX11LPU' where id=3; -update noar tt set v0='X179U' where id=3; -update noar ti set v0='X179U' where id=3; -update noar tt set b1='YE8QLET' where id=3; -update noar ti set b1='YE8QLET' where id=3; -update noar tt set v0='QXX2EDQ72UR41OFT4RKL' where id=3; -update noar ti set v0='QXX2EDQ72UR41OFT4RKL' where id=3; -update noar tt set b2='9IN4TGJI0M3C28T6K090Z3GJ22M7' where id=3; -update noar ti set b2='9IN4TGJI0M3C28T6K090Z3GJ22M7' where id=3; -update noar tt set v0='R1LR0BU781VQH9YNDR9TC' where id=4; -update noar ti set v0='R1LR0BU781VQH9YNDR9TC' where id=4; -update noar tt set b0='CF20MW0PJEDADAAWX3OVDKLW4OM1EXA8' where id=4; -update noar ti set b0='CF20MW0PJEDADAAWX3OVDKLW4OM1EXA8' where id=4; -update noar tt set v0='Q1QSWRVN' where id=4; -update noar ti set v0='Q1QSWRVN' where id=4; -update noar tt set b1='4ZQPNIXREP3W0ROQ8TMJD8S' where id=4; -update noar ti set b1='4ZQPNIXREP3W0ROQ8TMJD8S' where id=4; -update noar tt set v0='FLHMN92346E' where id=4; -update noar ti set v0='FLHMN92346E' where id=4; -update noar tt set b2='2' where id=4; -update noar ti set b2='2' where id=4; -update noar tt set v0='4BHTTJHCCTV0Q9SH' where id=5; -update noar ti set v0='4BHTTJHCCTV0Q9SH' where id=5; -update noar tt set b0='L2XSM3SNNFZYJ8TWTQH90SEKWJ4WEV' where id=5; -update noar ti set b0='L2XSM3SNNFZYJ8TWTQH90SEKWJ4WEV' where id=5; -update noar tt set v0='4' where id=5; -update noar ti set v0='4' where id=5; -update noar tt set b1='3BIP35NZ091ZGJFHKEZR6AFE' where id=5; -update noar ti set b1='3BIP35NZ091ZGJFHKEZR6AFE' where id=5; -update noar tt set v0='Z0JOVB8YQXYUZCG3' where id=5; -update noar ti set v0='Z0JOVB8YQXYUZCG3' where id=5; -update noar tt set b2='R' where id=5; -update noar ti set b2='R' where id=5; -update noar tt set v0='LRPLON0QPLAXN72LVEIPYV' where id=6; -update noar ti set v0='LRPLON0QPLAXN72LVEIPYV' where id=6; -update noar tt set b0='DHYIKBWWKME2L0SO1HIRT27E0RSEE' where id=6; -update noar ti set b0='DHYIKBWWKME2L0SO1HIRT27E0RSEE' where id=6; -update noar tt set v0='ZBK11UTXJL83E7J0YCWT9B' where id=6; -update noar ti set v0='ZBK11UTXJL83E7J0YCWT9B' where id=6; -update noar tt set b1='BM48FL2S0160X21SQU0M7V0GN8R' where id=6; -update noar ti set b1='BM48FL2S0160X21SQU0M7V0GN8R' where id=6; -update noar tt set v0='R1JQ8EH3P' where id=6; -update noar ti set v0='R1JQ8EH3P' where id=6; -update noar tt set b2='SIIZOUOLMW4' where id=6; -update noar ti set b2='SIIZOUOLMW4' where id=6; -update noar tt set v0='2WOLIFVUIXE10YIKPS8ASZ1URZ5TN1VH' where id=7; -update noar ti set v0='2WOLIFVUIXE10YIKPS8ASZ1URZ5TN1VH' where id=7; -update noar tt set b0='3HH5ZYF' where id=7; -update noar ti set b0='3HH5ZYF' where id=7; -update noar tt set v0='Z9HKX7Q93ZBUWGGG9OJ7' where id=7; -update noar ti set v0='Z9HKX7Q93ZBUWGGG9OJ7' where id=7; -update noar tt set b1='AA1L4NVNZ7PIK431FYKKEIN9PDX' where id=7; -update noar ti set b1='AA1L4NVNZ7PIK431FYKKEIN9PDX' where id=7; -update noar tt set v0='Z31UX09LP8YAORHPKBW5Z14NSZBKXYZ' where id=7; -update noar ti set v0='Z31UX09LP8YAORHPKBW5Z14NSZBKXYZ' where id=7; -update noar tt set b2='6J73A7' where id=7; -update noar ti set b2='6J73A7' where id=7; -update noar tt set v0='XCRDMJGUDH' where id=8; -update noar ti set v0='XCRDMJGUDH' where id=8; -update noar tt set b0='MYU59R5' where id=8; -update noar ti set b0='MYU59R5' where id=8; -update noar tt set v0='2RZ4BZT43FNDPANPPIB4IOE' where id=8; -update noar ti set v0='2RZ4BZT43FNDPANPPIB4IOE' where id=8; -update noar tt set b1='S3XOCZ' where id=8; -update noar ti set b1='S3XOCZ' where id=8; -update noar tt set v0='R6SZLL8Y79M43F6C8WO0VH0DN' where id=8; -update noar ti set v0='R6SZLL8Y79M43F6C8WO0VH0DN' where id=8; -update noar tt set b2='KXFZN4SHRSY2MXZNBPU13RHD' where id=8; -update noar ti set b2='KXFZN4SHRSY2MXZNBPU13RHD' where id=8; -update noar tt set v0='XWRZBI03EZ2ZN3HT' where id=9; -update noar ti set v0='XWRZBI03EZ2ZN3HT' where id=9; -update noar tt set b0='DE360E3PXUJ6' where id=9; -update noar ti set b0='DE360E3PXUJ6' where id=9; -update noar tt set v0='YZE60BFK' where id=9; -update noar ti set v0='YZE60BFK' where id=9; -update noar tt set b1='D5S2S4I9LEN' where id=9; -update noar ti set b1='D5S2S4I9LEN' where id=9; -update noar tt set v0='30C1' where id=9; -update noar ti set v0='30C1' where id=9; -update noar tt set b2='B749A33E4X57LCY7I45' where id=9; -update noar ti set b2='B749A33E4X57LCY7I45' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 longblob null, -b1 mediumblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='00FB6PZZRH8VF6MKRIPFZQ6PRP6J' where id=1; -update noar ti set v0='00FB6PZZRH8VF6MKRIPFZQ6PRP6J' where id=1; -update noar tt set b0='8R2TBRF3YEE7LGFGR3CICN6A' where id=1; -update noar ti set b0='8R2TBRF3YEE7LGFGR3CICN6A' where id=1; -update noar tt set v0='AAFIWC9KRCEIMPJE6DXCL01' where id=1; -update noar ti set v0='AAFIWC9KRCEIMPJE6DXCL01' where id=1; -update noar tt set b1='BC7I85KLFN0H6MZHP1GDVELNVR' where id=1; -update noar ti set b1='BC7I85KLFN0H6MZHP1GDVELNVR' where id=1; -update noar tt set v0='IXUGHC' where id=1; -update noar ti set v0='IXUGHC' where id=1; -update noar tt set b2='G5AQZZ395G51RNMY7Y5E8D3U' where id=1; -update noar ti set b2='G5AQZZ395G51RNMY7Y5E8D3U' where id=1; -update noar tt set v0='09IH2LSETI1RUWLPR70NJ6HQ' where id=2; -update noar ti set v0='09IH2LSETI1RUWLPR70NJ6HQ' where id=2; -update noar tt set b0='TM9LRQCSIN5N6Q4KUZRB1' where id=2; -update noar ti set b0='TM9LRQCSIN5N6Q4KUZRB1' where id=2; -update noar tt set v0='FT' where id=2; -update noar ti set v0='FT' where id=2; -update noar tt set b1='EJFPN8' where id=2; -update noar ti set b1='EJFPN8' where id=2; -update noar tt set v0='2A0' where id=2; -update noar ti set v0='2A0' where id=2; -update noar tt set b2='GJL709' where id=2; -update noar ti set b2='GJL709' where id=2; -update noar tt set v0='OLX2PSVBXWS0C71JOZJB' where id=3; -update noar ti set v0='OLX2PSVBXWS0C71JOZJB' where id=3; -update noar tt set b0='EMV3BIN2SP' where id=3; -update noar ti set b0='EMV3BIN2SP' where id=3; -update noar tt set v0='UIRC5JL' where id=3; -update noar ti set v0='UIRC5JL' where id=3; -update noar tt set b1='195I3WA6NYCYW1YASG0ZJ700TNONWEUP' where id=3; -update noar ti set b1='195I3WA6NYCYW1YASG0ZJ700TNONWEUP' where id=3; -update noar tt set v0='P9WF2VRNU6TNSF8O6V8H25PITG3CY' where id=3; -update noar ti set v0='P9WF2VRNU6TNSF8O6V8H25PITG3CY' where id=3; -update noar tt set b2='IM1XYJCMAP920EO2LGFQBFCWY3G' where id=3; -update noar ti set b2='IM1XYJCMAP920EO2LGFQBFCWY3G' where id=3; -update noar tt set v0='SBKUH35FAH48UB0YP4EW' where id=4; -update noar ti set v0='SBKUH35FAH48UB0YP4EW' where id=4; -update noar tt set b0='FTC1BVAZQTPWTQ0' where id=4; -update noar ti set b0='FTC1BVAZQTPWTQ0' where id=4; -update noar tt set v0='S3ZX5KB77454KVR06GAYDTS' where id=4; -update noar ti set v0='S3ZX5KB77454KVR06GAYDTS' where id=4; -update noar tt set b1='XL9L5PG9H541R76HFPR' where id=4; -update noar ti set b1='XL9L5PG9H541R76HFPR' where id=4; -update noar tt set v0='LR7MFNWGUI4YVT' where id=4; -update noar ti set v0='LR7MFNWGUI4YVT' where id=4; -update noar tt set b2='96FVYVM9OKZM0' where id=4; -update noar ti set b2='96FVYVM9OKZM0' where id=4; -update noar tt set v0='YL5XWTGFQ4HG95KNG7' where id=5; -update noar ti set v0='YL5XWTGFQ4HG95KNG7' where id=5; -update noar tt set b0='F7RU567MOYILMM0J83GNTC' where id=5; -update noar ti set b0='F7RU567MOYILMM0J83GNTC' where id=5; -update noar tt set v0='M6FX' where id=5; -update noar ti set v0='M6FX' where id=5; -update noar tt set b1='XB0YJTA' where id=5; -update noar ti set b1='XB0YJTA' where id=5; -update noar tt set v0='MN1H1FFV6HQD0LH38831KFSL3VLM' where id=5; -update noar ti set v0='MN1H1FFV6HQD0LH38831KFSL3VLM' where id=5; -update noar tt set b2='CQQ0XD27ASX0OTQ05DO2HGMWHJN2JB' where id=5; -update noar ti set b2='CQQ0XD27ASX0OTQ05DO2HGMWHJN2JB' where id=5; -update noar tt set v0='WJB85SDF7HGXOW4' where id=6; -update noar ti set v0='WJB85SDF7HGXOW4' where id=6; -update noar tt set b0='OWLGVRB2MZVP1U148CP' where id=6; -update noar ti set b0='OWLGVRB2MZVP1U148CP' where id=6; -update noar tt set v0='QZ78KXHAUUGSPXV' where id=6; -update noar ti set v0='QZ78KXHAUUGSPXV' where id=6; -update noar tt set b1='UC0KTMXW5RJF105646Q' where id=6; -update noar ti set b1='UC0KTMXW5RJF105646Q' where id=6; -update noar tt set v0='HGPUOYEL17YEHOJ5PWLKBLKO' where id=6; -update noar ti set v0='HGPUOYEL17YEHOJ5PWLKBLKO' where id=6; -update noar tt set b2='ZZ8QIL06NJW' where id=6; -update noar ti set b2='ZZ8QIL06NJW' where id=6; -update noar tt set v0='HHE4BLRWYL8MW312' where id=7; -update noar ti set v0='HHE4BLRWYL8MW312' where id=7; -update noar tt set b0='6BPQ7F6Y4T03S8U' where id=7; -update noar ti set b0='6BPQ7F6Y4T03S8U' where id=7; -update noar tt set v0='3B' where id=7; -update noar ti set v0='3B' where id=7; -update noar tt set b1='332B9K18TRAW7G2T' where id=7; -update noar ti set b1='332B9K18TRAW7G2T' where id=7; -update noar tt set v0='6S' where id=7; -update noar ti set v0='6S' where id=7; -update noar tt set b2='PGWRUCBGDWJBPQZNC828N4OQN' where id=7; -update noar ti set b2='PGWRUCBGDWJBPQZNC828N4OQN' where id=7; -update noar tt set v0='104IA' where id=8; -update noar ti set v0='104IA' where id=8; -update noar tt set b0='RZCE88WILA8XAQQ6B50WM' where id=8; -update noar ti set b0='RZCE88WILA8XAQQ6B50WM' where id=8; -update noar tt set v0='X8LI' where id=8; -update noar ti set v0='X8LI' where id=8; -update noar tt set b1='8NST28S5DJRV75TRI09M1MU2HDHNI4G' where id=8; -update noar ti set b1='8NST28S5DJRV75TRI09M1MU2HDHNI4G' where id=8; -update noar tt set v0='3' where id=8; -update noar ti set v0='3' where id=8; -update noar tt set b2='OLK72EDBVAK07WA5' where id=8; -update noar ti set b2='OLK72EDBVAK07WA5' where id=8; -update noar tt set v0='GAQ1DY7XOX8O' where id=9; -update noar ti set v0='GAQ1DY7XOX8O' where id=9; -update noar tt set b0='XH75R7N5W1QDBYB5LO9FCRJLF04R' where id=9; -update noar ti set b0='XH75R7N5W1QDBYB5LO9FCRJLF04R' where id=9; -update noar tt set v0='KSL0EQIBOIM5' where id=9; -update noar ti set v0='KSL0EQIBOIM5' where id=9; -update noar tt set b1='8JHI51DRO8DU165WZV61SJ8E5ANSJG' where id=9; -update noar ti set b1='8JHI51DRO8DU165WZV61SJ8E5ANSJG' where id=9; -update noar tt set v0='1WRL7K7T' where id=9; -update noar ti set v0='1WRL7K7T' where id=9; -update noar tt set b2='ZAQ1A4658AI' where id=9; -update noar ti set b2='ZAQ1A4658AI' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 longblob null, -b1 mediumblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='H7PWUSSI7CLDO' where id=1; -update noar ti set v0='H7PWUSSI7CLDO' where id=1; -update noar tt set b0='QHV9BDB8NJ8H8VL7Q8770ZPHRPDT6' where id=1; -update noar ti set b0='QHV9BDB8NJ8H8VL7Q8770ZPHRPDT6' where id=1; -update noar tt set v0='JD8R9J8GB08J3HIQPZ0C' where id=1; -update noar ti set v0='JD8R9J8GB08J3HIQPZ0C' where id=1; -update noar tt set b1='S9FGA3606KWD03IRGMPT86YR5OK3VV' where id=1; -update noar ti set b1='S9FGA3606KWD03IRGMPT86YR5OK3VV' where id=1; -update noar tt set v0='0Z8SM37F8Z9G2ZF774BMPHHV0C31RD' where id=1; -update noar ti set v0='0Z8SM37F8Z9G2ZF774BMPHHV0C31RD' where id=1; -update noar tt set b2='KTW941MFT4HCM' where id=1; -update noar ti set b2='KTW941MFT4HCM' where id=1; -update noar tt set v0='KWTBDNBNO9PL7M7NY9P' where id=2; -update noar ti set v0='KWTBDNBNO9PL7M7NY9P' where id=2; -update noar tt set b0='BZT64' where id=2; -update noar ti set b0='BZT64' where id=2; -update noar tt set v0='F30VO50IIHERLQHBEZRFMIA3AKH4MRHU' where id=2; -update noar ti set v0='F30VO50IIHERLQHBEZRFMIA3AKH4MRHU' where id=2; -update noar tt set b1='P7G10ZMN6928HUKBP0T' where id=2; -update noar ti set b1='P7G10ZMN6928HUKBP0T' where id=2; -update noar tt set v0='2I3ZAJIFLHA67IE' where id=2; -update noar ti set v0='2I3ZAJIFLHA67IE' where id=2; -update noar tt set b2='4L6PX54NP1VIJ27KYYSXUPYF91LQHC' where id=2; -update noar ti set b2='4L6PX54NP1VIJ27KYYSXUPYF91LQHC' where id=2; -update noar tt set v0='SL9WN43MI9N' where id=3; -update noar ti set v0='SL9WN43MI9N' where id=3; -update noar tt set b0='OZDH5W7BZRIKXVGLERSD' where id=3; -update noar ti set b0='OZDH5W7BZRIKXVGLERSD' where id=3; -update noar tt set v0='8IABTKDP3O35GY5S7MNV' where id=3; -update noar ti set v0='8IABTKDP3O35GY5S7MNV' where id=3; -update noar tt set b1='T8W' where id=3; -update noar ti set b1='T8W' where id=3; -update noar tt set v0='WBV6LIQRKUO1HWZOG0QOI0Z' where id=3; -update noar ti set v0='WBV6LIQRKUO1HWZOG0QOI0Z' where id=3; -update noar tt set b2='YYWKKQTU20ZS15MO6Q63L0D' where id=3; -update noar ti set b2='YYWKKQTU20ZS15MO6Q63L0D' where id=3; -update noar tt set v0='PRDLCXAU4J6UHU90EO1HVWM1NMITR' where id=4; -update noar ti set v0='PRDLCXAU4J6UHU90EO1HVWM1NMITR' where id=4; -update noar tt set b0='7W' where id=4; -update noar ti set b0='7W' where id=4; -update noar tt set v0='AJ17PND6CVNTYB28TAJTHHG1PE' where id=4; -update noar ti set v0='AJ17PND6CVNTYB28TAJTHHG1PE' where id=4; -update noar tt set b1='KXZSFUE5AL099UI0TZXXUO10J' where id=4; -update noar ti set b1='KXZSFUE5AL099UI0TZXXUO10J' where id=4; -update noar tt set v0='X' where id=4; -update noar ti set v0='X' where id=4; -update noar tt set b2='Q3Y9QBJGCE6FAL' where id=4; -update noar ti set b2='Q3Y9QBJGCE6FAL' where id=4; -update noar tt set v0='09H70FKTTM4D34X3TGNQID2' where id=5; -update noar ti set v0='09H70FKTTM4D34X3TGNQID2' where id=5; -update noar tt set b0='TX6A4KP2P7JELQNBMXGN04PDNP' where id=5; -update noar ti set b0='TX6A4KP2P7JELQNBMXGN04PDNP' where id=5; -update noar tt set v0='ZLT57ZRR50CTPLPWEF3DZK' where id=5; -update noar ti set v0='ZLT57ZRR50CTPLPWEF3DZK' where id=5; -update noar tt set b1='NZ09BRYPUX' where id=5; -update noar ti set b1='NZ09BRYPUX' where id=5; -update noar tt set v0='V1EHU2C7QDT2N3L4CHDKA' where id=5; -update noar ti set v0='V1EHU2C7QDT2N3L4CHDKA' where id=5; -update noar tt set b2='638DN7UG5FZ608O7SXHCNC29GJA5PPPC' where id=5; -update noar ti set b2='638DN7UG5FZ608O7SXHCNC29GJA5PPPC' where id=5; -update noar tt set v0='PUTUB8X4BT1T09YL6YQKWENNTB3PX4' where id=6; -update noar ti set v0='PUTUB8X4BT1T09YL6YQKWENNTB3PX4' where id=6; -update noar tt set b0='D58FU7Z9Q' where id=6; -update noar ti set b0='D58FU7Z9Q' where id=6; -update noar tt set v0='ZE03V1UICLY9' where id=6; -update noar ti set v0='ZE03V1UICLY9' where id=6; -update noar tt set b1='G5QERH5OM769V' where id=6; -update noar ti set b1='G5QERH5OM769V' where id=6; -update noar tt set v0='F2N5KW2' where id=6; -update noar ti set v0='F2N5KW2' where id=6; -update noar tt set b2='0XP4E3' where id=6; -update noar ti set b2='0XP4E3' where id=6; -update noar tt set v0='FDEBKIWKZ92BH7939WG4JG8D' where id=7; -update noar ti set v0='FDEBKIWKZ92BH7939WG4JG8D' where id=7; -update noar tt set b0='PNJ4QYU' where id=7; -update noar ti set b0='PNJ4QYU' where id=7; -update noar tt set v0='58B485L2JEFXJASSJ79L4P691EPUO' where id=7; -update noar ti set v0='58B485L2JEFXJASSJ79L4P691EPUO' where id=7; -update noar tt set b1='IWBJ43FLI5L284AC88M8FW' where id=7; -update noar ti set b1='IWBJ43FLI5L284AC88M8FW' where id=7; -update noar tt set v0='D6NG6SSKBMFXWP9XPFMX' where id=7; -update noar ti set v0='D6NG6SSKBMFXWP9XPFMX' where id=7; -update noar tt set b2='92PBWEYRMTIXS25K' where id=7; -update noar ti set b2='92PBWEYRMTIXS25K' where id=7; -update noar tt set v0='RFX3QIFOD7A4H8PYIPZ5AM' where id=8; -update noar ti set v0='RFX3QIFOD7A4H8PYIPZ5AM' where id=8; -update noar tt set b0='HYL1WXSL7VBJ8C' where id=8; -update noar ti set b0='HYL1WXSL7VBJ8C' where id=8; -update noar tt set v0='5HBD3J0DYNU0HQC7OTC6E5GD6OS6' where id=8; -update noar ti set v0='5HBD3J0DYNU0HQC7OTC6E5GD6OS6' where id=8; -update noar tt set b1='I93RGDK2S2IBYSJX683M8XI4TM6F' where id=8; -update noar ti set b1='I93RGDK2S2IBYSJX683M8XI4TM6F' where id=8; -update noar tt set v0='86MYBJHMKEIVUYAUHTX5UJC3F' where id=8; -update noar ti set v0='86MYBJHMKEIVUYAUHTX5UJC3F' where id=8; -update noar tt set b2='ACBVT2NWF5QL' where id=8; -update noar ti set b2='ACBVT2NWF5QL' where id=8; -update noar tt set v0='GVXBOH50YB9CZQZSHPBB41LJL7XFPRSZ' where id=9; -update noar ti set v0='GVXBOH50YB9CZQZSHPBB41LJL7XFPRSZ' where id=9; -update noar tt set b0='82YAEK23VOIVH2B' where id=9; -update noar ti set b0='82YAEK23VOIVH2B' where id=9; -update noar tt set v0='AYZ1' where id=9; -update noar ti set v0='AYZ1' where id=9; -update noar tt set b1='J6TWWGAU7Y3SB1ZC1UPAHBU' where id=9; -update noar ti set b1='J6TWWGAU7Y3SB1ZC1UPAHBU' where id=9; -update noar tt set v0='2G1KBSPXPEDJTI9L' where id=9; -update noar ti set v0='2G1KBSPXPEDJTI9L' where id=9; -update noar tt set b2='D25OPT0JBWKE6MZGX' where id=9; -update noar ti set b2='D25OPT0JBWKE6MZGX' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 longblob not null, -b1 mediumblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='19WRBYZHOSNVJZTEW4BX5' where id=1; -update noar ti set v0='19WRBYZHOSNVJZTEW4BX5' where id=1; -update noar tt set b0='5NLLUTTYGXEJG' where id=1; -update noar ti set b0='5NLLUTTYGXEJG' where id=1; -update noar tt set v0='UAZKSN883G60G' where id=1; -update noar ti set v0='UAZKSN883G60G' where id=1; -update noar tt set b1='8ZUGO0XKJZFEUJ2ISHVYO' where id=1; -update noar ti set b1='8ZUGO0XKJZFEUJ2ISHVYO' where id=1; -update noar tt set v0='V6AVPVY2' where id=1; -update noar ti set v0='V6AVPVY2' where id=1; -update noar tt set b2='M83SQO5F7FTUIOF5VA7QXFHFHXP0582G' where id=1; -update noar ti set b2='M83SQO5F7FTUIOF5VA7QXFHFHXP0582G' where id=1; -update noar tt set v0='A55' where id=2; -update noar ti set v0='A55' where id=2; -update noar tt set b0='8BIXZ4SLL8Y3BJ' where id=2; -update noar ti set b0='8BIXZ4SLL8Y3BJ' where id=2; -update noar tt set v0='9E5T5ZHNFPXYJA0WMZQ' where id=2; -update noar ti set v0='9E5T5ZHNFPXYJA0WMZQ' where id=2; -update noar tt set b1='JSUL91' where id=2; -update noar ti set b1='JSUL91' where id=2; -update noar tt set v0='LWLQWLO7TJ91' where id=2; -update noar ti set v0='LWLQWLO7TJ91' where id=2; -update noar tt set b2='3BV4PS98UHJN7A4TI3TW7V92593' where id=2; -update noar ti set b2='3BV4PS98UHJN7A4TI3TW7V92593' where id=2; -update noar tt set v0='Y2HLYCMU5KPDMKR2RQW1KKKL9QKRUBE' where id=3; -update noar ti set v0='Y2HLYCMU5KPDMKR2RQW1KKKL9QKRUBE' where id=3; -update noar tt set b0='U3AWTAA7CY5X3RWK2NJNRVASNTZDC3' where id=3; -update noar ti set b0='U3AWTAA7CY5X3RWK2NJNRVASNTZDC3' where id=3; -update noar tt set v0='159GG0L3U8K8WOVX5KS8' where id=3; -update noar ti set v0='159GG0L3U8K8WOVX5KS8' where id=3; -update noar tt set b1='5JJN0WB5W' where id=3; -update noar ti set b1='5JJN0WB5W' where id=3; -update noar tt set v0='TG4XTMQWTF113PMOQXARUP6CNN898D' where id=3; -update noar ti set v0='TG4XTMQWTF113PMOQXARUP6CNN898D' where id=3; -update noar tt set b2='RDIKUPFLJMXEIO6V3LANGO' where id=3; -update noar ti set b2='RDIKUPFLJMXEIO6V3LANGO' where id=3; -update noar tt set v0='GAQCGTP18GHBEAZ9JHNDB2H12EMBA' where id=4; -update noar ti set v0='GAQCGTP18GHBEAZ9JHNDB2H12EMBA' where id=4; -update noar tt set b0='SJ8DBKD97A0NPJ9UFCZQ5XSPDQOHA' where id=4; -update noar ti set b0='SJ8DBKD97A0NPJ9UFCZQ5XSPDQOHA' where id=4; -update noar tt set v0='HNJ4DMWVAREEK8RM1R8RBQ2UC0USLEL' where id=4; -update noar ti set v0='HNJ4DMWVAREEK8RM1R8RBQ2UC0USLEL' where id=4; -update noar tt set b1='VRD5TZ263YVJE741QUHVQH15V0M9F' where id=4; -update noar ti set b1='VRD5TZ263YVJE741QUHVQH15V0M9F' where id=4; -update noar tt set v0='J3QGZUIH4FNEETIOXN' where id=4; -update noar ti set v0='J3QGZUIH4FNEETIOXN' where id=4; -update noar tt set b2='YA9A8ZG0I2EMDRQPZJJ5G9UQUQI' where id=4; -update noar ti set b2='YA9A8ZG0I2EMDRQPZJJ5G9UQUQI' where id=4; -update noar tt set v0='FJS7OTAA05IFMCA8W4TFQSOPCK51JL' where id=5; -update noar ti set v0='FJS7OTAA05IFMCA8W4TFQSOPCK51JL' where id=5; -update noar tt set b0='E1JVFVFNKMLM31ES2TQ8P' where id=5; -update noar ti set b0='E1JVFVFNKMLM31ES2TQ8P' where id=5; -update noar tt set v0='VE028ZUFMNF2E' where id=5; -update noar ti set v0='VE028ZUFMNF2E' where id=5; -update noar tt set b1='Y' where id=5; -update noar ti set b1='Y' where id=5; -update noar tt set v0='LN2IYOLXWKDU864JUK8UB5' where id=5; -update noar ti set v0='LN2IYOLXWKDU864JUK8UB5' where id=5; -update noar tt set b2='VIM983X3O4P2HHKEPCSJ7T0D4EUT' where id=5; -update noar ti set b2='VIM983X3O4P2HHKEPCSJ7T0D4EUT' where id=5; -update noar tt set v0='G0WVNZ' where id=6; -update noar ti set v0='G0WVNZ' where id=6; -update noar tt set b0='X3YSYRK7GA' where id=6; -update noar ti set b0='X3YSYRK7GA' where id=6; -update noar tt set v0='CWH0XWJOUIA9813EIVCJ22N' where id=6; -update noar ti set v0='CWH0XWJOUIA9813EIVCJ22N' where id=6; -update noar tt set b1='BHQ41RGENUD' where id=6; -update noar ti set b1='BHQ41RGENUD' where id=6; -update noar tt set v0='F1UM7L39EOAO6N847IK7QBNA84QCQ' where id=6; -update noar ti set v0='F1UM7L39EOAO6N847IK7QBNA84QCQ' where id=6; -update noar tt set b2='RORZW0DXLOYT5K18H6C7D9Z1WBK0G' where id=6; -update noar ti set b2='RORZW0DXLOYT5K18H6C7D9Z1WBK0G' where id=6; -update noar tt set v0='8H587RNNMIR2FIE7NH01MP7Y2Q1' where id=7; -update noar ti set v0='8H587RNNMIR2FIE7NH01MP7Y2Q1' where id=7; -update noar tt set b0='RFMGAYF089WSL9EA7FLILK85J81UV' where id=7; -update noar ti set b0='RFMGAYF089WSL9EA7FLILK85J81UV' where id=7; -update noar tt set v0='VJSY6JER0HHFP4MUM9LNBAY' where id=7; -update noar ti set v0='VJSY6JER0HHFP4MUM9LNBAY' where id=7; -update noar tt set b1='H63NZISDDG' where id=7; -update noar ti set b1='H63NZISDDG' where id=7; -update noar tt set v0='STR0C39QZ1GU9K5YZLBRL3QTV5PQX3' where id=7; -update noar ti set v0='STR0C39QZ1GU9K5YZLBRL3QTV5PQX3' where id=7; -update noar tt set b2='X8GU0O3JSG0Z3ZNPZ8LPM9KG8ZUUO' where id=7; -update noar ti set b2='X8GU0O3JSG0Z3ZNPZ8LPM9KG8ZUUO' where id=7; -update noar tt set v0='C5UX96BGJAGGFCBV2LLGD6GPW1' where id=8; -update noar ti set v0='C5UX96BGJAGGFCBV2LLGD6GPW1' where id=8; -update noar tt set b0='6PCSJXA2BV0IX6C4Q83167RZAG3U8' where id=8; -update noar ti set b0='6PCSJXA2BV0IX6C4Q83167RZAG3U8' where id=8; -update noar tt set v0='ZAC159HQCC26J3ZEL3LXQ6GF8F' where id=8; -update noar ti set v0='ZAC159HQCC26J3ZEL3LXQ6GF8F' where id=8; -update noar tt set b1='Q2B8HJL07A8ZI3HF0S15S' where id=8; -update noar ti set b1='Q2B8HJL07A8ZI3HF0S15S' where id=8; -update noar tt set v0='C3RAXUVXJHKZAV458GYVJ' where id=8; -update noar ti set v0='C3RAXUVXJHKZAV458GYVJ' where id=8; -update noar tt set b2='FB99J0JUK' where id=8; -update noar ti set b2='FB99J0JUK' where id=8; -update noar tt set v0='RLFAPPNF' where id=9; -update noar ti set v0='RLFAPPNF' where id=9; -update noar tt set b0='NEW3N1VI5LB08NYG38889DBXBC2NS' where id=9; -update noar ti set b0='NEW3N1VI5LB08NYG38889DBXBC2NS' where id=9; -update noar tt set v0='DELZ1' where id=9; -update noar ti set v0='DELZ1' where id=9; -update noar tt set b1='S' where id=9; -update noar ti set b1='S' where id=9; -update noar tt set v0='JU2' where id=9; -update noar ti set v0='JU2' where id=9; -update noar tt set b2='F139IV56DMN20MZG9DR2D' where id=9; -update noar ti set b2='F139IV56DMN20MZG9DR2D' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 longblob not null, -b1 mediumblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='SV0I' where id=1; -update noar ti set v0='SV0I' where id=1; -update noar tt set b0='KYMCXW37ZZYG9G1WF5ATXZKKKP' where id=1; -update noar ti set b0='KYMCXW37ZZYG9G1WF5ATXZKKKP' where id=1; -update noar tt set v0='MDKL6V' where id=1; -update noar ti set v0='MDKL6V' where id=1; -update noar tt set b1='MD4I9' where id=1; -update noar ti set b1='MD4I9' where id=1; -update noar tt set v0='YRMD9J0S33QTI9IIU0TI' where id=1; -update noar ti set v0='YRMD9J0S33QTI9IIU0TI' where id=1; -update noar tt set b2='K6' where id=1; -update noar ti set b2='K6' where id=1; -update noar tt set v0='6YXAOZDH0MGSQQK7ITJB' where id=2; -update noar ti set v0='6YXAOZDH0MGSQQK7ITJB' where id=2; -update noar tt set b0='KX4604VMO2H8XLHK9991OA' where id=2; -update noar ti set b0='KX4604VMO2H8XLHK9991OA' where id=2; -update noar tt set v0='RWDD74PFGPZU929A69' where id=2; -update noar ti set v0='RWDD74PFGPZU929A69' where id=2; -update noar tt set b1='VEZYHQKCXB79AUNRTN9YHY5P4' where id=2; -update noar ti set b1='VEZYHQKCXB79AUNRTN9YHY5P4' where id=2; -update noar tt set v0='VCCHNOCTD0KD9LNGWARX61ZP37MFEP' where id=2; -update noar ti set v0='VCCHNOCTD0KD9LNGWARX61ZP37MFEP' where id=2; -update noar tt set b2='VC6I970OBZDVQ8FNMS8Q210WSQ' where id=2; -update noar ti set b2='VC6I970OBZDVQ8FNMS8Q210WSQ' where id=2; -update noar tt set v0='NWD' where id=3; -update noar ti set v0='NWD' where id=3; -update noar tt set b0='0VHIDTC5JFAJB9BLX5QRWM7' where id=3; -update noar ti set b0='0VHIDTC5JFAJB9BLX5QRWM7' where id=3; -update noar tt set v0='HITJS54ZP1IHZ68T5AWZV9YPGS6' where id=3; -update noar ti set v0='HITJS54ZP1IHZ68T5AWZV9YPGS6' where id=3; -update noar tt set b1='N9QHQ14Y7' where id=3; -update noar ti set b1='N9QHQ14Y7' where id=3; -update noar tt set v0='E3ZCYHVHJUMRH557COJ9AW66WZL' where id=3; -update noar ti set v0='E3ZCYHVHJUMRH557COJ9AW66WZL' where id=3; -update noar tt set b2='44OU4CUBY8Z8GW7ZEFYYJ' where id=3; -update noar ti set b2='44OU4CUBY8Z8GW7ZEFYYJ' where id=3; -update noar tt set v0='UIA27FV2PWKWD1' where id=4; -update noar ti set v0='UIA27FV2PWKWD1' where id=4; -update noar tt set b0='8QE' where id=4; -update noar ti set b0='8QE' where id=4; -update noar tt set v0='Q' where id=4; -update noar ti set v0='Q' where id=4; -update noar tt set b1='Q2KMULE3' where id=4; -update noar ti set b1='Q2KMULE3' where id=4; -update noar tt set v0='YQ8OSCP9LM9W77YT6LBNZHC' where id=4; -update noar ti set v0='YQ8OSCP9LM9W77YT6LBNZHC' where id=4; -update noar tt set b2='99GLQ19ZZYHHU1WK6GFG' where id=4; -update noar ti set b2='99GLQ19ZZYHHU1WK6GFG' where id=4; -update noar tt set v0='B8IBBYQR3X4V' where id=5; -update noar ti set v0='B8IBBYQR3X4V' where id=5; -update noar tt set b0='F05Z4R0R7CZOBS5' where id=5; -update noar ti set b0='F05Z4R0R7CZOBS5' where id=5; -update noar tt set v0='JMGENIVG' where id=5; -update noar ti set v0='JMGENIVG' where id=5; -update noar tt set b1='FPQFEBR0SNDPFZ10N43BRN' where id=5; -update noar ti set b1='FPQFEBR0SNDPFZ10N43BRN' where id=5; -update noar tt set v0='DWQEAT8R1GU1UP043WW' where id=5; -update noar ti set v0='DWQEAT8R1GU1UP043WW' where id=5; -update noar tt set b2='3249945GFY9EOZR9ZLYQQD65V24' where id=5; -update noar ti set b2='3249945GFY9EOZR9ZLYQQD65V24' where id=5; -update noar tt set v0='48JZTBIWYK5Z' where id=6; -update noar ti set v0='48JZTBIWYK5Z' where id=6; -update noar tt set b0='3H8SVB1P17GET7EPIYG2MQ9ZNJ77Y02O' where id=6; -update noar ti set b0='3H8SVB1P17GET7EPIYG2MQ9ZNJ77Y02O' where id=6; -update noar tt set v0='23K8V7LX0AEOA74U9RQC3RS3GOOD1' where id=6; -update noar ti set v0='23K8V7LX0AEOA74U9RQC3RS3GOOD1' where id=6; -update noar tt set b1='GXADYKHDGDFCQ0N' where id=6; -update noar ti set b1='GXADYKHDGDFCQ0N' where id=6; -update noar tt set v0='DUKD05KLP0VDYFX0MB0JJ3TSG' where id=6; -update noar ti set v0='DUKD05KLP0VDYFX0MB0JJ3TSG' where id=6; -update noar tt set b2='DRP4RVCCMQT577SVE402NZ' where id=6; -update noar ti set b2='DRP4RVCCMQT577SVE402NZ' where id=6; -update noar tt set v0='58RFM0SYRWFARK' where id=7; -update noar ti set v0='58RFM0SYRWFARK' where id=7; -update noar tt set b0='88UZW72BTIRS1' where id=7; -update noar ti set b0='88UZW72BTIRS1' where id=7; -update noar tt set v0='NEQWA2TA40O3' where id=7; -update noar ti set v0='NEQWA2TA40O3' where id=7; -update noar tt set b1='G90ASRGC4BST' where id=7; -update noar ti set b1='G90ASRGC4BST' where id=7; -update noar tt set v0='VOMQ7G7XTVRY' where id=7; -update noar ti set v0='VOMQ7G7XTVRY' where id=7; -update noar tt set b2='96DLBNYMGQMBS' where id=7; -update noar ti set b2='96DLBNYMGQMBS' where id=7; -update noar tt set v0='S' where id=8; -update noar ti set v0='S' where id=8; -update noar tt set b0='J4HL4ATOGX4FJ7MSPDWQLP6Z2D' where id=8; -update noar ti set b0='J4HL4ATOGX4FJ7MSPDWQLP6Z2D' where id=8; -update noar tt set v0='8ZDMVNZSE38MRNPOB' where id=8; -update noar ti set v0='8ZDMVNZSE38MRNPOB' where id=8; -update noar tt set b1='J8VNWGHLWZ4Y6C' where id=8; -update noar ti set b1='J8VNWGHLWZ4Y6C' where id=8; -update noar tt set v0='6KAC16J06245FUPO3I' where id=8; -update noar ti set v0='6KAC16J06245FUPO3I' where id=8; -update noar tt set b2='SGD6M' where id=8; -update noar ti set b2='SGD6M' where id=8; -update noar tt set v0='MYF02N' where id=9; -update noar ti set v0='MYF02N' where id=9; -update noar tt set b0='EMFT87852EDNAY6GCIRU1H5JKKB4' where id=9; -update noar ti set b0='EMFT87852EDNAY6GCIRU1H5JKKB4' where id=9; -update noar tt set v0='LU6IZ9Y4KZ6XYKGEF9YY9' where id=9; -update noar ti set v0='LU6IZ9Y4KZ6XYKGEF9YY9' where id=9; -update noar tt set b1='JY5UGRX' where id=9; -update noar ti set b1='JY5UGRX' where id=9; -update noar tt set v0='3T5PRLJ3MVUN1MU61' where id=9; -update noar ti set v0='3T5PRLJ3MVUN1MU61' where id=9; -update noar tt set b2='295XFAMRT' where id=9; -update noar ti set b2='295XFAMRT' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 longblob null, -b1 mediumblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='53GM4O1DEVA23I501' where id=1; -update noar ti set v0='53GM4O1DEVA23I501' where id=1; -update noar tt set b0='TZHNQO02UW2ZI0NDG' where id=1; -update noar ti set b0='TZHNQO02UW2ZI0NDG' where id=1; -update noar tt set v0='BIWM4X0EL13' where id=1; -update noar ti set v0='BIWM4X0EL13' where id=1; -update noar tt set b1='D1Z0Y6X6VS7EEOCE35HM2H7ZBN5O81OF' where id=1; -update noar ti set b1='D1Z0Y6X6VS7EEOCE35HM2H7ZBN5O81OF' where id=1; -update noar tt set v0='0I9TZG9JE6A9LJTUZZMGY9BIAQM' where id=1; -update noar ti set v0='0I9TZG9JE6A9LJTUZZMGY9BIAQM' where id=1; -update noar tt set b2='DTBGWI45DT0JH5VM18' where id=1; -update noar ti set b2='DTBGWI45DT0JH5VM18' where id=1; -update noar tt set v0='R63SJ9WSTG9QXD5JOEO9A' where id=2; -update noar ti set v0='R63SJ9WSTG9QXD5JOEO9A' where id=2; -update noar tt set b0='C8EBOM3KUSK4UPNGKUC07Q67' where id=2; -update noar ti set b0='C8EBOM3KUSK4UPNGKUC07Q67' where id=2; -update noar tt set v0='MKSC' where id=2; -update noar ti set v0='MKSC' where id=2; -update noar tt set b1='RU92ZFBZ8NA2ZYVQ' where id=2; -update noar ti set b1='RU92ZFBZ8NA2ZYVQ' where id=2; -update noar tt set v0='YHZDKHH5L32PMPVH314BVFC' where id=2; -update noar ti set v0='YHZDKHH5L32PMPVH314BVFC' where id=2; -update noar tt set b2='RBXKHMSY' where id=2; -update noar ti set b2='RBXKHMSY' where id=2; -update noar tt set v0='VABOMGJ0ZOA0EP1SB3XC5NRE' where id=3; -update noar ti set v0='VABOMGJ0ZOA0EP1SB3XC5NRE' where id=3; -update noar tt set b0='G2RXB62681' where id=3; -update noar ti set b0='G2RXB62681' where id=3; -update noar tt set v0='10BU6RUQIPRD4DMKOR46MGBIUN8173' where id=3; -update noar ti set v0='10BU6RUQIPRD4DMKOR46MGBIUN8173' where id=3; -update noar tt set b1='8C7H0E' where id=3; -update noar ti set b1='8C7H0E' where id=3; -update noar tt set v0='TH9LIPWC' where id=3; -update noar ti set v0='TH9LIPWC' where id=3; -update noar tt set b2='VGTX4UL3Q34AY9SZK53MMOF' where id=3; -update noar ti set b2='VGTX4UL3Q34AY9SZK53MMOF' where id=3; -update noar tt set v0='YSM04' where id=4; -update noar ti set v0='YSM04' where id=4; -update noar tt set b0='C5' where id=4; -update noar ti set b0='C5' where id=4; -update noar tt set v0='982IFQ8DXI0MMHXTHGDY' where id=4; -update noar ti set v0='982IFQ8DXI0MMHXTHGDY' where id=4; -update noar tt set b1='I8F93LP9BYT6' where id=4; -update noar ti set b1='I8F93LP9BYT6' where id=4; -update noar tt set v0='SN' where id=4; -update noar ti set v0='SN' where id=4; -update noar tt set b2='EES7IGO1FD72CPSMQ2BGP4' where id=4; -update noar ti set b2='EES7IGO1FD72CPSMQ2BGP4' where id=4; -update noar tt set v0='SIRX7721I' where id=5; -update noar ti set v0='SIRX7721I' where id=5; -update noar tt set b0='V5G0EKJ4AD4BXM2N6VQYJ7' where id=5; -update noar ti set b0='V5G0EKJ4AD4BXM2N6VQYJ7' where id=5; -update noar tt set v0='DVT4X6PV7C8PLYXMMZOTY' where id=5; -update noar ti set v0='DVT4X6PV7C8PLYXMMZOTY' where id=5; -update noar tt set b1='SQUGGBCBBSEEYPOZFKARB397K6LRG' where id=5; -update noar ti set b1='SQUGGBCBBSEEYPOZFKARB397K6LRG' where id=5; -update noar tt set v0='DJS0J6GOUY6JB6UPFUK35AT77U4KZ' where id=5; -update noar ti set v0='DJS0J6GOUY6JB6UPFUK35AT77U4KZ' where id=5; -update noar tt set b2='7T8KSWKU49SF0U52S5P05' where id=5; -update noar ti set b2='7T8KSWKU49SF0U52S5P05' where id=5; -update noar tt set v0='8T2UQUX11AKE2U5AQLEY' where id=6; -update noar ti set v0='8T2UQUX11AKE2U5AQLEY' where id=6; -update noar tt set b0='VMNBOUGFTAXLJ3LCO7Q6CO' where id=6; -update noar ti set b0='VMNBOUGFTAXLJ3LCO7Q6CO' where id=6; -update noar tt set v0='9JDVBN2SMHEZS2L069SRBOUD' where id=6; -update noar ti set v0='9JDVBN2SMHEZS2L069SRBOUD' where id=6; -update noar tt set b1='Z3JOHLX39C0RE' where id=6; -update noar ti set b1='Z3JOHLX39C0RE' where id=6; -update noar tt set v0='GCQZLR4JZ871S' where id=6; -update noar ti set v0='GCQZLR4JZ871S' where id=6; -update noar tt set b2='DT3W' where id=6; -update noar ti set b2='DT3W' where id=6; -update noar tt set v0='FFWRTK6ZH0R8628EPGG9MA' where id=7; -update noar ti set v0='FFWRTK6ZH0R8628EPGG9MA' where id=7; -update noar tt set b0='L3O' where id=7; -update noar ti set b0='L3O' where id=7; -update noar tt set v0='LKN7YQETMUGY' where id=7; -update noar ti set v0='LKN7YQETMUGY' where id=7; -update noar tt set b1='POZS4Z75WVQT4DPLQTPAAFIOI1PYN' where id=7; -update noar ti set b1='POZS4Z75WVQT4DPLQTPAAFIOI1PYN' where id=7; -update noar tt set v0='IQ4HHO7A' where id=7; -update noar ti set v0='IQ4HHO7A' where id=7; -update noar tt set b2='P2UA49ZAEK0' where id=7; -update noar ti set b2='P2UA49ZAEK0' where id=7; -update noar tt set v0='EL06087A6ZHWXO73FIFK2M4ZFZVQ9B' where id=8; -update noar ti set v0='EL06087A6ZHWXO73FIFK2M4ZFZVQ9B' where id=8; -update noar tt set b0='OBG8R' where id=8; -update noar ti set b0='OBG8R' where id=8; -update noar tt set v0='NEZ0B6GW20GINB' where id=8; -update noar ti set v0='NEZ0B6GW20GINB' where id=8; -update noar tt set b1='460I5CCIEHK' where id=8; -update noar ti set b1='460I5CCIEHK' where id=8; -update noar tt set v0='RZ' where id=8; -update noar ti set v0='RZ' where id=8; -update noar tt set b2='2CSP' where id=8; -update noar ti set b2='2CSP' where id=8; -update noar tt set v0='SOTUGJT6OK0JDFU0L' where id=9; -update noar ti set v0='SOTUGJT6OK0JDFU0L' where id=9; -update noar tt set b0='NFFOG4527YDL7PH345Z1FCF' where id=9; -update noar ti set b0='NFFOG4527YDL7PH345Z1FCF' where id=9; -update noar tt set v0='DLNRAMVOZMF7H6Q8VO5WITXRLSCFKAT' where id=9; -update noar ti set v0='DLNRAMVOZMF7H6Q8VO5WITXRLSCFKAT' where id=9; -update noar tt set b1='OOD8' where id=9; -update noar ti set b1='OOD8' where id=9; -update noar tt set v0='KLOIJPKGCKZEM' where id=9; -update noar ti set v0='KLOIJPKGCKZEM' where id=9; -update noar tt set b2='GB9BOCGXG70' where id=9; -update noar ti set b2='GB9BOCGXG70' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 longblob null, -b1 mediumblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='L4RISOX3VAO1PZB' where id=1; -update noar ti set v0='L4RISOX3VAO1PZB' where id=1; -update noar tt set b0='NDO6MKQJVC5K7' where id=1; -update noar ti set b0='NDO6MKQJVC5K7' where id=1; -update noar tt set v0='G' where id=1; -update noar ti set v0='G' where id=1; -update noar tt set b1='G77HCANFT4MZP033AMIGXIN7Z3UPDEHR' where id=1; -update noar ti set b1='G77HCANFT4MZP033AMIGXIN7Z3UPDEHR' where id=1; -update noar tt set v0='J' where id=1; -update noar ti set v0='J' where id=1; -update noar tt set b2='C9YBTLKJSX1KECNYGT' where id=1; -update noar ti set b2='C9YBTLKJSX1KECNYGT' where id=1; -update noar tt set v0='YUJ' where id=2; -update noar ti set v0='YUJ' where id=2; -update noar tt set b0='Y57T0S2AVVHU5LXPH1ATVYEM56UED4U' where id=2; -update noar ti set b0='Y57T0S2AVVHU5LXPH1ATVYEM56UED4U' where id=2; -update noar tt set v0='BM' where id=2; -update noar ti set v0='BM' where id=2; -update noar tt set b1='H1GGH7V709TWJ' where id=2; -update noar ti set b1='H1GGH7V709TWJ' where id=2; -update noar tt set v0='HZGCQ6L3L8V3YJJ4WHRD2BPLJ' where id=2; -update noar ti set v0='HZGCQ6L3L8V3YJJ4WHRD2BPLJ' where id=2; -update noar tt set b2='Q9CEF81OEU' where id=2; -update noar ti set b2='Q9CEF81OEU' where id=2; -update noar tt set v0='2FVB' where id=3; -update noar ti set v0='2FVB' where id=3; -update noar tt set b0='LBI8DQ6PO3WL5HPA43' where id=3; -update noar ti set b0='LBI8DQ6PO3WL5HPA43' where id=3; -update noar tt set v0='TQ89DWT51' where id=3; -update noar ti set v0='TQ89DWT51' where id=3; -update noar tt set b1='UPTOMLQ4Y' where id=3; -update noar ti set b1='UPTOMLQ4Y' where id=3; -update noar tt set v0='EYBXFY9D9SL4CX31PW2A3K8V' where id=3; -update noar ti set v0='EYBXFY9D9SL4CX31PW2A3K8V' where id=3; -update noar tt set b2='ZQKCUAZBZ' where id=3; -update noar ti set b2='ZQKCUAZBZ' where id=3; -update noar tt set v0='HXRKKFK36YSNQSXZIKCD3X0YWFI5JOI' where id=4; -update noar ti set v0='HXRKKFK36YSNQSXZIKCD3X0YWFI5JOI' where id=4; -update noar tt set b0='B814' where id=4; -update noar ti set b0='B814' where id=4; -update noar tt set v0='H1LFUKRH3W82E92YUVTFUE4' where id=4; -update noar ti set v0='H1LFUKRH3W82E92YUVTFUE4' where id=4; -update noar tt set b1='Y57' where id=4; -update noar ti set b1='Y57' where id=4; -update noar tt set v0='ODXL1WRAR1GWSUZW1WITRU02HI' where id=4; -update noar ti set v0='ODXL1WRAR1GWSUZW1WITRU02HI' where id=4; -update noar tt set b2='SO' where id=4; -update noar ti set b2='SO' where id=4; -update noar tt set v0='DCSHUYWOBZSEO2S7P66IBHE1OD' where id=5; -update noar ti set v0='DCSHUYWOBZSEO2S7P66IBHE1OD' where id=5; -update noar tt set b0='5ZC2A' where id=5; -update noar ti set b0='5ZC2A' where id=5; -update noar tt set v0='0PMNIF34E59R9IXHAWK36H' where id=5; -update noar ti set v0='0PMNIF34E59R9IXHAWK36H' where id=5; -update noar tt set b1='WL3S2DPE' where id=5; -update noar ti set b1='WL3S2DPE' where id=5; -update noar tt set v0='L8RLGVU2P36DB' where id=5; -update noar ti set v0='L8RLGVU2P36DB' where id=5; -update noar tt set b2='4C147CE2O8KNI5MJS3LAZQ' where id=5; -update noar ti set b2='4C147CE2O8KNI5MJS3LAZQ' where id=5; -update noar tt set v0='62SHHUOC0ZAXM' where id=6; -update noar ti set v0='62SHHUOC0ZAXM' where id=6; -update noar tt set b0='XJWYW' where id=6; -update noar ti set b0='XJWYW' where id=6; -update noar tt set v0='8DUOQ90ETELRNHQE' where id=6; -update noar ti set v0='8DUOQ90ETELRNHQE' where id=6; -update noar tt set b1='43E1DS2RG2KKYAYPHMBA' where id=6; -update noar ti set b1='43E1DS2RG2KKYAYPHMBA' where id=6; -update noar tt set v0='436UBFXCZX4OIU' where id=6; -update noar ti set v0='436UBFXCZX4OIU' where id=6; -update noar tt set b2='MP6Y' where id=6; -update noar ti set b2='MP6Y' where id=6; -update noar tt set v0='CZE5EHSLWEZ9RQ' where id=7; -update noar ti set v0='CZE5EHSLWEZ9RQ' where id=7; -update noar tt set b0='APGF951C76TFJBXLRZAOQ71W7Q' where id=7; -update noar ti set b0='APGF951C76TFJBXLRZAOQ71W7Q' where id=7; -update noar tt set v0='WGLT01U8U4AI1X9Y' where id=7; -update noar ti set v0='WGLT01U8U4AI1X9Y' where id=7; -update noar tt set b1='82H3YR9DPUU9KA3KRD5QH5MOUXP553M' where id=7; -update noar ti set b1='82H3YR9DPUU9KA3KRD5QH5MOUXP553M' where id=7; -update noar tt set v0='7PEY8MRS5X7TRM' where id=7; -update noar ti set v0='7PEY8MRS5X7TRM' where id=7; -update noar tt set b2='SVT88RR48B50BSQI0ZK' where id=7; -update noar ti set b2='SVT88RR48B50BSQI0ZK' where id=7; -update noar tt set v0='3H0QUW' where id=8; -update noar ti set v0='3H0QUW' where id=8; -update noar tt set b0='EA5NX7TGDM100VBQUNMDBO27NYLMJ' where id=8; -update noar ti set b0='EA5NX7TGDM100VBQUNMDBO27NYLMJ' where id=8; -update noar tt set v0='XKK9U3Y4W58Y1YXABY' where id=8; -update noar ti set v0='XKK9U3Y4W58Y1YXABY' where id=8; -update noar tt set b1='MMIU4NQ5LV0HPBOB4H3MHAFEL4Q' where id=8; -update noar ti set b1='MMIU4NQ5LV0HPBOB4H3MHAFEL4Q' where id=8; -update noar tt set v0='QZBNALCNAQVYNKO3MSAUQ39RH' where id=8; -update noar ti set v0='QZBNALCNAQVYNKO3MSAUQ39RH' where id=8; -update noar tt set b2='NJ5' where id=8; -update noar ti set b2='NJ5' where id=8; -update noar tt set v0='ZL8IDMBL7TWY' where id=9; -update noar ti set v0='ZL8IDMBL7TWY' where id=9; -update noar tt set b0='9XJARF' where id=9; -update noar ti set b0='9XJARF' where id=9; -update noar tt set v0='GI4T4IFWO4S38BY6YUMU2S6B3NIKG' where id=9; -update noar ti set v0='GI4T4IFWO4S38BY6YUMU2S6B3NIKG' where id=9; -update noar tt set b1='A1OJXJQK5G6AX2IN' where id=9; -update noar ti set b1='A1OJXJQK5G6AX2IN' where id=9; -update noar tt set v0='AEL51' where id=9; -update noar ti set v0='AEL51' where id=9; -update noar tt set b2='POBL1ER37YN7Y5U' where id=9; -update noar ti set b2='POBL1ER37YN7Y5U' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 longblob not null, -b1 mediumblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='H9QPY5H2' where id=1; -update noar ti set v0='H9QPY5H2' where id=1; -update noar tt set b0='V63RG8ONNGC7H22GPLNXM4KQUJJ45' where id=1; -update noar ti set b0='V63RG8ONNGC7H22GPLNXM4KQUJJ45' where id=1; -update noar tt set v0='GX' where id=1; -update noar ti set v0='GX' where id=1; -update noar tt set b1='TXG6DGPI8QCPP5E9P495MZZ31WTV5' where id=1; -update noar ti set b1='TXG6DGPI8QCPP5E9P495MZZ31WTV5' where id=1; -update noar tt set v0='AS6VIZXRHXGF5CU5IKO' where id=1; -update noar ti set v0='AS6VIZXRHXGF5CU5IKO' where id=1; -update noar tt set b2='88OECCKK5R3FR32XCG3KWNN0X8DZ7N' where id=1; -update noar ti set b2='88OECCKK5R3FR32XCG3KWNN0X8DZ7N' where id=1; -update noar tt set v0='C2HT0V701JR2O' where id=2; -update noar ti set v0='C2HT0V701JR2O' where id=2; -update noar tt set b0='IJNXOZHVN5USQ28AEO5SQD4Z' where id=2; -update noar ti set b0='IJNXOZHVN5USQ28AEO5SQD4Z' where id=2; -update noar tt set v0='5VJ0KK4PZT083UML4GXEU0BN1' where id=2; -update noar ti set v0='5VJ0KK4PZT083UML4GXEU0BN1' where id=2; -update noar tt set b1='HEMXBGZPJ1J56Z8SK0' where id=2; -update noar ti set b1='HEMXBGZPJ1J56Z8SK0' where id=2; -update noar tt set v0='JIKHKE3WKU4PA04QZOMBPFU' where id=2; -update noar ti set v0='JIKHKE3WKU4PA04QZOMBPFU' where id=2; -update noar tt set b2='8N' where id=2; -update noar ti set b2='8N' where id=2; -update noar tt set v0='CLSINGPZ8C6Y13D36S18S7R' where id=3; -update noar ti set v0='CLSINGPZ8C6Y13D36S18S7R' where id=3; -update noar tt set b0='OODQISFS89FWFTZL5ZSS2RHC8AY' where id=3; -update noar ti set b0='OODQISFS89FWFTZL5ZSS2RHC8AY' where id=3; -update noar tt set v0='V7' where id=3; -update noar ti set v0='V7' where id=3; -update noar tt set b1='KX' where id=3; -update noar ti set b1='KX' where id=3; -update noar tt set v0='ZPR4WFWTT9OY4SYI' where id=3; -update noar ti set v0='ZPR4WFWTT9OY4SYI' where id=3; -update noar tt set b2='4RHWI7EDSPOGMFSMKB6ZEIWDI6XUOFA0' where id=3; -update noar ti set b2='4RHWI7EDSPOGMFSMKB6ZEIWDI6XUOFA0' where id=3; -update noar tt set v0='UUGTGBHO5VKKDS4FPK02MUTFJAA' where id=4; -update noar ti set v0='UUGTGBHO5VKKDS4FPK02MUTFJAA' where id=4; -update noar tt set b0='LHHLWH33C53WE1DSHON' where id=4; -update noar ti set b0='LHHLWH33C53WE1DSHON' where id=4; -update noar tt set v0='OUNKLEXQFOD4OX9413JHJPU7' where id=4; -update noar ti set v0='OUNKLEXQFOD4OX9413JHJPU7' where id=4; -update noar tt set b1='UNAGA5GKZLJE0ZSB710IPCP8RXQ0T' where id=4; -update noar ti set b1='UNAGA5GKZLJE0ZSB710IPCP8RXQ0T' where id=4; -update noar tt set v0='6WU' where id=4; -update noar ti set v0='6WU' where id=4; -update noar tt set b2='DNQ36ZIFDVGLCOWN1NIV' where id=4; -update noar ti set b2='DNQ36ZIFDVGLCOWN1NIV' where id=4; -update noar tt set v0='SFSLP03QKQ0K17DFGB' where id=5; -update noar ti set v0='SFSLP03QKQ0K17DFGB' where id=5; -update noar tt set b0='D323QGG8FK6FN1FZ4S3' where id=5; -update noar ti set b0='D323QGG8FK6FN1FZ4S3' where id=5; -update noar tt set v0='5DH6DVD0JFOS44OHZ8' where id=5; -update noar ti set v0='5DH6DVD0JFOS44OHZ8' where id=5; -update noar tt set b1='7K4OV2' where id=5; -update noar ti set b1='7K4OV2' where id=5; -update noar tt set v0='9BQICLCFA5T6QLZZBSXVG5PGEFBRI6L4' where id=5; -update noar ti set v0='9BQICLCFA5T6QLZZBSXVG5PGEFBRI6L4' where id=5; -update noar tt set b2='38J1RX' where id=5; -update noar ti set b2='38J1RX' where id=5; -update noar tt set v0='PSLRRW8DLIQY' where id=6; -update noar ti set v0='PSLRRW8DLIQY' where id=6; -update noar tt set b0='RCB' where id=6; -update noar ti set b0='RCB' where id=6; -update noar tt set v0='2G1WPRUQ93HVJ' where id=6; -update noar ti set v0='2G1WPRUQ93HVJ' where id=6; -update noar tt set b1='HXCVG' where id=6; -update noar ti set b1='HXCVG' where id=6; -update noar tt set v0='7LWJPRZG1K5B79' where id=6; -update noar ti set v0='7LWJPRZG1K5B79' where id=6; -update noar tt set b2='VD7HW7BWEBA49N47OBJOID4I' where id=6; -update noar ti set b2='VD7HW7BWEBA49N47OBJOID4I' where id=6; -update noar tt set v0='Q7CJZNPSTQUYRC116QWMR2XM6HFKGT' where id=7; -update noar ti set v0='Q7CJZNPSTQUYRC116QWMR2XM6HFKGT' where id=7; -update noar tt set b0='J4B86VXKO9FJVP4LFUSN0' where id=7; -update noar ti set b0='J4B86VXKO9FJVP4LFUSN0' where id=7; -update noar tt set v0='06WSVXH72U' where id=7; -update noar ti set v0='06WSVXH72U' where id=7; -update noar tt set b1='IRO92GHSS2672XRO' where id=7; -update noar ti set b1='IRO92GHSS2672XRO' where id=7; -update noar tt set v0='LRF2G2P8B4AF3JS7D4PZM5B92QA3' where id=7; -update noar ti set v0='LRF2G2P8B4AF3JS7D4PZM5B92QA3' where id=7; -update noar tt set b2='IDJQMHPKEHUORU1XH' where id=7; -update noar ti set b2='IDJQMHPKEHUORU1XH' where id=7; -update noar tt set v0='4CERH4D25I6S1URL3JDXPGX1D18BVDH' where id=8; -update noar ti set v0='4CERH4D25I6S1URL3JDXPGX1D18BVDH' where id=8; -update noar tt set b0='XR30NGMZUMRDS2IXNWY4R' where id=8; -update noar ti set b0='XR30NGMZUMRDS2IXNWY4R' where id=8; -update noar tt set v0='OQC20GU1X5PK' where id=8; -update noar ti set v0='OQC20GU1X5PK' where id=8; -update noar tt set b1='45735S0LT5TME6HYIX6F' where id=8; -update noar ti set b1='45735S0LT5TME6HYIX6F' where id=8; -update noar tt set v0='EIZI4MUW4MJSTN' where id=8; -update noar ti set v0='EIZI4MUW4MJSTN' where id=8; -update noar tt set b2='94Y0H979D2L' where id=8; -update noar ti set b2='94Y0H979D2L' where id=8; -update noar tt set v0='SYNCBWWWWQNF' where id=9; -update noar ti set v0='SYNCBWWWWQNF' where id=9; -update noar tt set b0='6QKFTGROT5RM0B8PD23HEW' where id=9; -update noar ti set b0='6QKFTGROT5RM0B8PD23HEW' where id=9; -update noar tt set v0='OZOHAABVMAIA6KS' where id=9; -update noar ti set v0='OZOHAABVMAIA6KS' where id=9; -update noar tt set b1='FIDV' where id=9; -update noar ti set b1='FIDV' where id=9; -update noar tt set v0='PDXS146I' where id=9; -update noar ti set v0='PDXS146I' where id=9; -update noar tt set b2='O3ICGR' where id=9; -update noar ti set b2='O3ICGR' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 longblob not null, -b1 mediumblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='7OUVWO14BXTC2FFE05VV9NT7Z8OGGP' where id=1; -update noar ti set v0='7OUVWO14BXTC2FFE05VV9NT7Z8OGGP' where id=1; -update noar tt set b0='98DN3F7IA8V' where id=1; -update noar ti set b0='98DN3F7IA8V' where id=1; -update noar tt set v0='9W0H4F5SB78AO86U9KQE9' where id=1; -update noar ti set v0='9W0H4F5SB78AO86U9KQE9' where id=1; -update noar tt set b1='7HP8ET9CUISH3C8ZWC2WEUA7MMT0' where id=1; -update noar ti set b1='7HP8ET9CUISH3C8ZWC2WEUA7MMT0' where id=1; -update noar tt set v0='1WJ71HC77768G81' where id=1; -update noar ti set v0='1WJ71HC77768G81' where id=1; -update noar tt set b2='REN32GGSU8R7DM' where id=1; -update noar ti set b2='REN32GGSU8R7DM' where id=1; -update noar tt set v0='A75CFQOLP' where id=2; -update noar ti set v0='A75CFQOLP' where id=2; -update noar tt set b0='22OVT6BS' where id=2; -update noar ti set b0='22OVT6BS' where id=2; -update noar tt set v0='4UFN3RKW9V8HD9XSR9B3B8N' where id=2; -update noar ti set v0='4UFN3RKW9V8HD9XSR9B3B8N' where id=2; -update noar tt set b1='X4PFCPCQS23ODW37' where id=2; -update noar ti set b1='X4PFCPCQS23ODW37' where id=2; -update noar tt set v0='SBWQR2MOXVSUWYP0J' where id=2; -update noar ti set v0='SBWQR2MOXVSUWYP0J' where id=2; -update noar tt set b2='DH9N82RSVXZGWC7W4QENQ7E4FC855L' where id=2; -update noar ti set b2='DH9N82RSVXZGWC7W4QENQ7E4FC855L' where id=2; -update noar tt set v0='V83OL775PG2MZJR31J4DKOUUIEVZNF6B' where id=3; -update noar ti set v0='V83OL775PG2MZJR31J4DKOUUIEVZNF6B' where id=3; -update noar tt set b0='L4T64W1L5VH9D702' where id=3; -update noar ti set b0='L4T64W1L5VH9D702' where id=3; -update noar tt set v0='RRPULLIIC0BVS0O86H6F8ZYKPFV' where id=3; -update noar ti set v0='RRPULLIIC0BVS0O86H6F8ZYKPFV' where id=3; -update noar tt set b1='MHYSND5NPSN5DZT42' where id=3; -update noar ti set b1='MHYSND5NPSN5DZT42' where id=3; -update noar tt set v0='YKO0QGYV4SWYPHHWC5PKNC' where id=3; -update noar ti set v0='YKO0QGYV4SWYPHHWC5PKNC' where id=3; -update noar tt set b2='6WXSDXOTF4UXKRXZG' where id=3; -update noar ti set b2='6WXSDXOTF4UXKRXZG' where id=3; -update noar tt set v0='LOS63PP8QO9IN378CN' where id=4; -update noar ti set v0='LOS63PP8QO9IN378CN' where id=4; -update noar tt set b0='I' where id=4; -update noar ti set b0='I' where id=4; -update noar tt set v0='OO00J' where id=4; -update noar ti set v0='OO00J' where id=4; -update noar tt set b1='A9QUJK6979S' where id=4; -update noar ti set b1='A9QUJK6979S' where id=4; -update noar tt set v0='WHGA8SK4DHEV0EGB0GTL574JGT9' where id=4; -update noar ti set v0='WHGA8SK4DHEV0EGB0GTL574JGT9' where id=4; -update noar tt set b2='U' where id=4; -update noar ti set b2='U' where id=4; -update noar tt set v0='NHBH4K3' where id=5; -update noar ti set v0='NHBH4K3' where id=5; -update noar tt set b0='JVT3FJDFV2L9X3DN' where id=5; -update noar ti set b0='JVT3FJDFV2L9X3DN' where id=5; -update noar tt set v0='9N0BCC2' where id=5; -update noar ti set v0='9N0BCC2' where id=5; -update noar tt set b1='S9KB5Y06UQCWCRVY2CH' where id=5; -update noar ti set b1='S9KB5Y06UQCWCRVY2CH' where id=5; -update noar tt set v0='7Q3EENH3' where id=5; -update noar ti set v0='7Q3EENH3' where id=5; -update noar tt set b2='Y5LJUO0PBZPW4SA0DLD6IBR' where id=5; -update noar ti set b2='Y5LJUO0PBZPW4SA0DLD6IBR' where id=5; -update noar tt set v0='IU' where id=6; -update noar ti set v0='IU' where id=6; -update noar tt set b0='RR0OLRL25ZZ7' where id=6; -update noar ti set b0='RR0OLRL25ZZ7' where id=6; -update noar tt set v0='IETYL45BUYZZXTN2UBLAP9LIGV11XF8G' where id=6; -update noar ti set v0='IETYL45BUYZZXTN2UBLAP9LIGV11XF8G' where id=6; -update noar tt set b1='M' where id=6; -update noar ti set b1='M' where id=6; -update noar tt set v0='0HGZ' where id=6; -update noar ti set v0='0HGZ' where id=6; -update noar tt set b2='YH339TZ' where id=6; -update noar ti set b2='YH339TZ' where id=6; -update noar tt set v0='5IUUJC4S2OZ' where id=7; -update noar ti set v0='5IUUJC4S2OZ' where id=7; -update noar tt set b0='036C3AXTNVVCB8JTD' where id=7; -update noar ti set b0='036C3AXTNVVCB8JTD' where id=7; -update noar tt set v0='V0DGP8HU3R253WW5ZINO9YAFPENSEP' where id=7; -update noar ti set v0='V0DGP8HU3R253WW5ZINO9YAFPENSEP' where id=7; -update noar tt set b1='L56KD9JRAP' where id=7; -update noar ti set b1='L56KD9JRAP' where id=7; -update noar tt set v0='4XMI7IWACR2CMX585GPUQ2Q67EXM2F' where id=7; -update noar ti set v0='4XMI7IWACR2CMX585GPUQ2Q67EXM2F' where id=7; -update noar tt set b2='S3I7OU419YWCYK15J2R2LMH6L' where id=7; -update noar ti set b2='S3I7OU419YWCYK15J2R2LMH6L' where id=7; -update noar tt set v0='C0TRSA9R3' where id=8; -update noar ti set v0='C0TRSA9R3' where id=8; -update noar tt set b0='3888YQI9FRO' where id=8; -update noar ti set b0='3888YQI9FRO' where id=8; -update noar tt set v0='YOT24JL9P2Y68NR41U66GH' where id=8; -update noar ti set v0='YOT24JL9P2Y68NR41U66GH' where id=8; -update noar tt set b1='EKPV81UGDHBMK0ST1OIKYIK' where id=8; -update noar ti set b1='EKPV81UGDHBMK0ST1OIKYIK' where id=8; -update noar tt set v0='KBC' where id=8; -update noar ti set v0='KBC' where id=8; -update noar tt set b2='H9PNFSSCOB2VSJRDNN' where id=8; -update noar ti set b2='H9PNFSSCOB2VSJRDNN' where id=8; -update noar tt set v0='D14D2YHTPYINSH3LWVER8EQHHLDQ9G2G' where id=9; -update noar ti set v0='D14D2YHTPYINSH3LWVER8EQHHLDQ9G2G' where id=9; -update noar tt set b0='QKDPQEWMDFJZWDDXYW1GFFZ' where id=9; -update noar ti set b0='QKDPQEWMDFJZWDDXYW1GFFZ' where id=9; -update noar tt set v0='LPFSM8ITGUS29850' where id=9; -update noar ti set v0='LPFSM8ITGUS29850' where id=9; -update noar tt set b1='1JANQAZQ2XHESQBMIRINRT' where id=9; -update noar ti set b1='1JANQAZQ2XHESQBMIRINRT' where id=9; -update noar tt set v0='FT5SD3OUHVJGTC2CZL' where id=9; -update noar ti set v0='FT5SD3OUHVJGTC2CZL' where id=9; -update noar tt set b2='DMIWDIZVCAQYKQD8IKZ5PUZR8' where id=9; -update noar ti set b2='DMIWDIZVCAQYKQD8IKZ5PUZR8' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 longblob null, -b1 longblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='M94PP53E' where id=1; -update noar ti set v0='M94PP53E' where id=1; -update noar tt set b0='U' where id=1; -update noar ti set b0='U' where id=1; -update noar tt set v0='NBDQP21L' where id=1; -update noar ti set v0='NBDQP21L' where id=1; -update noar tt set b1='V4VSKNTAOK8KFGS58UQIG3L1BS21R' where id=1; -update noar ti set b1='V4VSKNTAOK8KFGS58UQIG3L1BS21R' where id=1; -update noar tt set v0='O5IP5GUJ5PYMPQO942N' where id=1; -update noar ti set v0='O5IP5GUJ5PYMPQO942N' where id=1; -update noar tt set b2='FJU5NP' where id=1; -update noar ti set b2='FJU5NP' where id=1; -update noar tt set v0='JDU582XDCSNKJIKDEHPQZ6XYG42W' where id=2; -update noar ti set v0='JDU582XDCSNKJIKDEHPQZ6XYG42W' where id=2; -update noar tt set b0='J' where id=2; -update noar ti set b0='J' where id=2; -update noar tt set v0='WUURWEFW93G7B271BX40FY0PMJ7K93' where id=2; -update noar ti set v0='WUURWEFW93G7B271BX40FY0PMJ7K93' where id=2; -update noar tt set b1='6R73AY4Q2ETGHR0' where id=2; -update noar ti set b1='6R73AY4Q2ETGHR0' where id=2; -update noar tt set v0='CU7' where id=2; -update noar ti set v0='CU7' where id=2; -update noar tt set b2='RN4Y19IBZGRQX89S8DLLV6T0EA81BXSB' where id=2; -update noar ti set b2='RN4Y19IBZGRQX89S8DLLV6T0EA81BXSB' where id=2; -update noar tt set v0='JRBUO6S6PDHRZVJ8' where id=3; -update noar ti set v0='JRBUO6S6PDHRZVJ8' where id=3; -update noar tt set b0='YD4I1422ET6A6ABUKL' where id=3; -update noar ti set b0='YD4I1422ET6A6ABUKL' where id=3; -update noar tt set v0='YNIWR64NUS197I' where id=3; -update noar ti set v0='YNIWR64NUS197I' where id=3; -update noar tt set b1='7JRCB2CGUYA5' where id=3; -update noar ti set b1='7JRCB2CGUYA5' where id=3; -update noar tt set v0='T7FI5X9L2WR' where id=3; -update noar ti set v0='T7FI5X9L2WR' where id=3; -update noar tt set b2='UZZ1UDCR148' where id=3; -update noar ti set b2='UZZ1UDCR148' where id=3; -update noar tt set v0='5TZCMG37LETTU' where id=4; -update noar ti set v0='5TZCMG37LETTU' where id=4; -update noar tt set b0='X085TJMND2P8EV1OTDYDFMBQX85' where id=4; -update noar ti set b0='X085TJMND2P8EV1OTDYDFMBQX85' where id=4; -update noar tt set v0='ZYVN78RL8T' where id=4; -update noar ti set v0='ZYVN78RL8T' where id=4; -update noar tt set b1='AQEZW' where id=4; -update noar ti set b1='AQEZW' where id=4; -update noar tt set v0='6R6QEAMCY0TZYP' where id=4; -update noar ti set v0='6R6QEAMCY0TZYP' where id=4; -update noar tt set b2='1WNQQVMJW92CIFW9' where id=4; -update noar ti set b2='1WNQQVMJW92CIFW9' where id=4; -update noar tt set v0='3XJKQ6IXJ4B8D43CPAR4V32MJ' where id=5; -update noar ti set v0='3XJKQ6IXJ4B8D43CPAR4V32MJ' where id=5; -update noar tt set b0='4E7Y5MA8IP' where id=5; -update noar ti set b0='4E7Y5MA8IP' where id=5; -update noar tt set v0='Y69J4HPB7ZXRLML7DDRPT5YCSNPSGKT' where id=5; -update noar ti set v0='Y69J4HPB7ZXRLML7DDRPT5YCSNPSGKT' where id=5; -update noar tt set b1='ZYKXO25V5GK' where id=5; -update noar ti set b1='ZYKXO25V5GK' where id=5; -update noar tt set v0='MB0JAEO4I34IK' where id=5; -update noar ti set v0='MB0JAEO4I34IK' where id=5; -update noar tt set b2='E0WZ8WP' where id=5; -update noar ti set b2='E0WZ8WP' where id=5; -update noar tt set v0='CIMNXD8SZS8KJG04' where id=6; -update noar ti set v0='CIMNXD8SZS8KJG04' where id=6; -update noar tt set b0='UP' where id=6; -update noar ti set b0='UP' where id=6; -update noar tt set v0='TP6' where id=6; -update noar ti set v0='TP6' where id=6; -update noar tt set b1='76OUEUQGJU14C2Y' where id=6; -update noar ti set b1='76OUEUQGJU14C2Y' where id=6; -update noar tt set v0='RSUY34S6LA0L8Z06PSOWMVK1V' where id=6; -update noar ti set v0='RSUY34S6LA0L8Z06PSOWMVK1V' where id=6; -update noar tt set b2='9VRVR2ZZZ' where id=6; -update noar ti set b2='9VRVR2ZZZ' where id=6; -update noar tt set v0='W2H271NI83M4J6BOLE4M2' where id=7; -update noar ti set v0='W2H271NI83M4J6BOLE4M2' where id=7; -update noar tt set b0='XHV5YP2PZ6NRYTIL1' where id=7; -update noar ti set b0='XHV5YP2PZ6NRYTIL1' where id=7; -update noar tt set v0='GC2U99OY' where id=7; -update noar ti set v0='GC2U99OY' where id=7; -update noar tt set b1='ILEMB' where id=7; -update noar ti set b1='ILEMB' where id=7; -update noar tt set v0='UB9GGW8ZRJA9V6LJ5OWS' where id=7; -update noar ti set v0='UB9GGW8ZRJA9V6LJ5OWS' where id=7; -update noar tt set b2='ZHNWPOG4FKJ26JP7F' where id=7; -update noar ti set b2='ZHNWPOG4FKJ26JP7F' where id=7; -update noar tt set v0='PO6CTZ7KW19' where id=8; -update noar ti set v0='PO6CTZ7KW19' where id=8; -update noar tt set b0='QI520YIHI98TQ1N5LBI68D' where id=8; -update noar ti set b0='QI520YIHI98TQ1N5LBI68D' where id=8; -update noar tt set v0='STMKJYF16DQICHEQO4GRII1' where id=8; -update noar ti set v0='STMKJYF16DQICHEQO4GRII1' where id=8; -update noar tt set b1='7PSH4KJKJVAL2CER7MPTZH2QKNF79' where id=8; -update noar ti set b1='7PSH4KJKJVAL2CER7MPTZH2QKNF79' where id=8; -update noar tt set v0='PGR9CDQDZ3' where id=8; -update noar ti set v0='PGR9CDQDZ3' where id=8; -update noar tt set b2='ORRLMZKZA2' where id=8; -update noar ti set b2='ORRLMZKZA2' where id=8; -update noar tt set v0='EK0R7848949LAYLFWEUQGE' where id=9; -update noar ti set v0='EK0R7848949LAYLFWEUQGE' where id=9; -update noar tt set b0='SSVIJFXQH9DZLS6' where id=9; -update noar ti set b0='SSVIJFXQH9DZLS6' where id=9; -update noar tt set v0='NVNNO4Y1BSC1LU6VY1VMK' where id=9; -update noar ti set v0='NVNNO4Y1BSC1LU6VY1VMK' where id=9; -update noar tt set b1='JRS2S3ELCUET9B4FR' where id=9; -update noar ti set b1='JRS2S3ELCUET9B4FR' where id=9; -update noar tt set v0='KAQ7AS72K7QSRXAYCH' where id=9; -update noar ti set v0='KAQ7AS72K7QSRXAYCH' where id=9; -update noar tt set b2='KJ1T1EY0NKK70TXY7ZRAHT' where id=9; -update noar ti set b2='KJ1T1EY0NKK70TXY7ZRAHT' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 longblob null, -b1 longblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='1L3JD2VY' where id=1; -update noar ti set v0='1L3JD2VY' where id=1; -update noar tt set b0='J63FHEY3TYE' where id=1; -update noar ti set b0='J63FHEY3TYE' where id=1; -update noar tt set v0='J0T1S6EVVKUK2V2SQLI' where id=1; -update noar ti set v0='J0T1S6EVVKUK2V2SQLI' where id=1; -update noar tt set b1='M8EKN39WP0YCKOC07' where id=1; -update noar ti set b1='M8EKN39WP0YCKOC07' where id=1; -update noar tt set v0='00JGZEK9K1SXFJYDHI11' where id=1; -update noar ti set v0='00JGZEK9K1SXFJYDHI11' where id=1; -update noar tt set b2='V0EW5HLMRDU5NF5H5OGLJ94F9HVKJKOC' where id=1; -update noar ti set b2='V0EW5HLMRDU5NF5H5OGLJ94F9HVKJKOC' where id=1; -update noar tt set v0='UTZKBP67QK3J1S41LROR5URPRK9' where id=2; -update noar ti set v0='UTZKBP67QK3J1S41LROR5URPRK9' where id=2; -update noar tt set b0='55ZITT0L6ICEHU' where id=2; -update noar ti set b0='55ZITT0L6ICEHU' where id=2; -update noar tt set v0='7GZF5HQWS218K' where id=2; -update noar ti set v0='7GZF5HQWS218K' where id=2; -update noar tt set b1='TKB' where id=2; -update noar ti set b1='TKB' where id=2; -update noar tt set v0='6SYV0P0SVHDJAVCQRYCZOZ66A0C' where id=2; -update noar ti set v0='6SYV0P0SVHDJAVCQRYCZOZ66A0C' where id=2; -update noar tt set b2='IJ0CX' where id=2; -update noar ti set b2='IJ0CX' where id=2; -update noar tt set v0='MW8GN1C4JCI1SYN7OVRBCX' where id=3; -update noar ti set v0='MW8GN1C4JCI1SYN7OVRBCX' where id=3; -update noar tt set b0='GWJSG5MH9Z02VXJTPHPI' where id=3; -update noar ti set b0='GWJSG5MH9Z02VXJTPHPI' where id=3; -update noar tt set v0='2JQV1F5NYWAVL0CK0TIV8PTUAWN' where id=3; -update noar ti set v0='2JQV1F5NYWAVL0CK0TIV8PTUAWN' where id=3; -update noar tt set b1='MPL5521' where id=3; -update noar ti set b1='MPL5521' where id=3; -update noar tt set v0='J7XJU1UU57M8H5EMY3I7N25USHR' where id=3; -update noar ti set v0='J7XJU1UU57M8H5EMY3I7N25USHR' where id=3; -update noar tt set b2='K7673RNUK0TT9S51Y7K5F959PU' where id=3; -update noar ti set b2='K7673RNUK0TT9S51Y7K5F959PU' where id=3; -update noar tt set v0='7LDNXY9VCK40B474NHE3KAQ11S88E0J' where id=4; -update noar ti set v0='7LDNXY9VCK40B474NHE3KAQ11S88E0J' where id=4; -update noar tt set b0='ZP' where id=4; -update noar ti set b0='ZP' where id=4; -update noar tt set v0='4NY64EYY90YH3SP8O' where id=4; -update noar ti set v0='4NY64EYY90YH3SP8O' where id=4; -update noar tt set b1='KZW4P4WIJTC9J5C062URWJ7JJV' where id=4; -update noar ti set b1='KZW4P4WIJTC9J5C062URWJ7JJV' where id=4; -update noar tt set v0='PPAO' where id=4; -update noar ti set v0='PPAO' where id=4; -update noar tt set b2='BYLQW' where id=4; -update noar ti set b2='BYLQW' where id=4; -update noar tt set v0='RF5GJQCAQUY2XDHC6ODWTDYHGEP93T8R' where id=5; -update noar ti set v0='RF5GJQCAQUY2XDHC6ODWTDYHGEP93T8R' where id=5; -update noar tt set b0='OECWMXC0RC32EE' where id=5; -update noar ti set b0='OECWMXC0RC32EE' where id=5; -update noar tt set v0='8E28C6AR3PXWRI89EH6DDXSF2HY' where id=5; -update noar ti set v0='8E28C6AR3PXWRI89EH6DDXSF2HY' where id=5; -update noar tt set b1='WVUNMT6S4LNXQGEEHD' where id=5; -update noar ti set b1='WVUNMT6S4LNXQGEEHD' where id=5; -update noar tt set v0='WEI8DSRUK6OV8SL2K34L0' where id=5; -update noar ti set v0='WEI8DSRUK6OV8SL2K34L0' where id=5; -update noar tt set b2='SWOC2LRCK9363EEG7DUE4GJSTA' where id=5; -update noar ti set b2='SWOC2LRCK9363EEG7DUE4GJSTA' where id=5; -update noar tt set v0='0MHIDNU8MNQT4DO' where id=6; -update noar ti set v0='0MHIDNU8MNQT4DO' where id=6; -update noar tt set b0='GDV0DO6DLW9ANJWAPNRZ3RYLTR3' where id=6; -update noar ti set b0='GDV0DO6DLW9ANJWAPNRZ3RYLTR3' where id=6; -update noar tt set v0='9G75CWCZS3AD2M8PHI9' where id=6; -update noar ti set v0='9G75CWCZS3AD2M8PHI9' where id=6; -update noar tt set b1='AKDMGXHXNSTN180R80N60' where id=6; -update noar ti set b1='AKDMGXHXNSTN180R80N60' where id=6; -update noar tt set v0='N' where id=6; -update noar ti set v0='N' where id=6; -update noar tt set b2='MUX5CQ7MF6OZW01925CXY7YL03Q' where id=6; -update noar ti set b2='MUX5CQ7MF6OZW01925CXY7YL03Q' where id=6; -update noar tt set v0='AKBO' where id=7; -update noar ti set v0='AKBO' where id=7; -update noar tt set b0='FWZY4IR5QNHRZOI36' where id=7; -update noar ti set b0='FWZY4IR5QNHRZOI36' where id=7; -update noar tt set v0='JRC5GCAF8ITLLL' where id=7; -update noar ti set v0='JRC5GCAF8ITLLL' where id=7; -update noar tt set b1='R2VGE0UTR4S4CR3JDLWUIN' where id=7; -update noar ti set b1='R2VGE0UTR4S4CR3JDLWUIN' where id=7; -update noar tt set v0='7362WX3GF1XRADAX9UBKE' where id=7; -update noar ti set v0='7362WX3GF1XRADAX9UBKE' where id=7; -update noar tt set b2='N1A59W2OJPK8E9N2TRMOXYBAQV06I' where id=7; -update noar ti set b2='N1A59W2OJPK8E9N2TRMOXYBAQV06I' where id=7; -update noar tt set v0='RTEVCC' where id=8; -update noar ti set v0='RTEVCC' where id=8; -update noar tt set b0='ZP7LPXPN5HIV' where id=8; -update noar ti set b0='ZP7LPXPN5HIV' where id=8; -update noar tt set v0='7VGJSXTJDJ9C77HU495GVXAG07CA' where id=8; -update noar ti set v0='7VGJSXTJDJ9C77HU495GVXAG07CA' where id=8; -update noar tt set b1='OXMFEK15KOEE0POD' where id=8; -update noar ti set b1='OXMFEK15KOEE0POD' where id=8; -update noar tt set v0='IJ6Z29ON72W4R7QOSZF5J' where id=8; -update noar ti set v0='IJ6Z29ON72W4R7QOSZF5J' where id=8; -update noar tt set b2='3K2QANRH' where id=8; -update noar ti set b2='3K2QANRH' where id=8; -update noar tt set v0='KRQW683FFJKC11SS6VJKB4V4SG804' where id=9; -update noar ti set v0='KRQW683FFJKC11SS6VJKB4V4SG804' where id=9; -update noar tt set b0='ZN96KNGEM' where id=9; -update noar ti set b0='ZN96KNGEM' where id=9; -update noar tt set v0='PT9UPGQ3N06KG4L4' where id=9; -update noar ti set v0='PT9UPGQ3N06KG4L4' where id=9; -update noar tt set b1='RDHE25CMLNDNBJOQ' where id=9; -update noar ti set b1='RDHE25CMLNDNBJOQ' where id=9; -update noar tt set v0='ZG1UAZ1DT' where id=9; -update noar ti set v0='ZG1UAZ1DT' where id=9; -update noar tt set b2='6HMGD7FA2CB0NHTQKBQ28JQC4IB94VJ' where id=9; -update noar ti set b2='6HMGD7FA2CB0NHTQKBQ28JQC4IB94VJ' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 longblob not null, -b1 longblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='WPZR' where id=1; -update noar ti set v0='WPZR' where id=1; -update noar tt set b0='G3DM695' where id=1; -update noar ti set b0='G3DM695' where id=1; -update noar tt set v0='H5PXMFUUOQE4S21WLM2I' where id=1; -update noar ti set v0='H5PXMFUUOQE4S21WLM2I' where id=1; -update noar tt set b1='1JDSP964HWWAF' where id=1; -update noar ti set b1='1JDSP964HWWAF' where id=1; -update noar tt set v0='LZP6G776LMNVSGWDHOTLZ4WKC' where id=1; -update noar ti set v0='LZP6G776LMNVSGWDHOTLZ4WKC' where id=1; -update noar tt set b2='H8BFU' where id=1; -update noar ti set b2='H8BFU' where id=1; -update noar tt set v0='LDMXM02I8VLSKY7PWB0EY5NMHP2' where id=2; -update noar ti set v0='LDMXM02I8VLSKY7PWB0EY5NMHP2' where id=2; -update noar tt set b0='51CFRVIT97EBJNIUGXFD9EE0N1ZA' where id=2; -update noar ti set b0='51CFRVIT97EBJNIUGXFD9EE0N1ZA' where id=2; -update noar tt set v0='F7SD3T00DU7' where id=2; -update noar ti set v0='F7SD3T00DU7' where id=2; -update noar tt set b1='H1BS9' where id=2; -update noar ti set b1='H1BS9' where id=2; -update noar tt set v0='PZRYO8EAAJ6YKD' where id=2; -update noar ti set v0='PZRYO8EAAJ6YKD' where id=2; -update noar tt set b2='KQDT9CN6YQF' where id=2; -update noar ti set b2='KQDT9CN6YQF' where id=2; -update noar tt set v0='WO5JXLL73UKVAJN44X0SDNG2S' where id=3; -update noar ti set v0='WO5JXLL73UKVAJN44X0SDNG2S' where id=3; -update noar tt set b0='3HZH745XMUVTNB4VG' where id=3; -update noar ti set b0='3HZH745XMUVTNB4VG' where id=3; -update noar tt set v0='OX2UGT3Y12J' where id=3; -update noar ti set v0='OX2UGT3Y12J' where id=3; -update noar tt set b1='MHSQ4K85IBC' where id=3; -update noar ti set b1='MHSQ4K85IBC' where id=3; -update noar tt set v0='LFQSS8FY9XHPD2VX1RAVWRUSNQ' where id=3; -update noar ti set v0='LFQSS8FY9XHPD2VX1RAVWRUSNQ' where id=3; -update noar tt set b2='OKTNN3YLFN6WE3NGKJKVAW' where id=3; -update noar ti set b2='OKTNN3YLFN6WE3NGKJKVAW' where id=3; -update noar tt set v0='1TW884EQ6JW' where id=4; -update noar ti set v0='1TW884EQ6JW' where id=4; -update noar tt set b0='O9N9S5EY3J8X5MHLY6K5K' where id=4; -update noar ti set b0='O9N9S5EY3J8X5MHLY6K5K' where id=4; -update noar tt set v0='VK6' where id=4; -update noar ti set v0='VK6' where id=4; -update noar tt set b1='B4E71A90GJCH43R84COC' where id=4; -update noar ti set b1='B4E71A90GJCH43R84COC' where id=4; -update noar tt set v0='ZOPPIAAGIOFJ96KPTWM3CW8R' where id=4; -update noar ti set v0='ZOPPIAAGIOFJ96KPTWM3CW8R' where id=4; -update noar tt set b2='9VZX251NDLJPALUTVJB8UU344O6R' where id=4; -update noar ti set b2='9VZX251NDLJPALUTVJB8UU344O6R' where id=4; -update noar tt set v0='FTJ94X' where id=5; -update noar ti set v0='FTJ94X' where id=5; -update noar tt set b0='VG' where id=5; -update noar ti set b0='VG' where id=5; -update noar tt set v0='8V0Z9I1MAVPY7RXM6QWZ' where id=5; -update noar ti set v0='8V0Z9I1MAVPY7RXM6QWZ' where id=5; -update noar tt set b1='MX1Y0FJCJH22AQV' where id=5; -update noar ti set b1='MX1Y0FJCJH22AQV' where id=5; -update noar tt set v0='67IQDE6' where id=5; -update noar ti set v0='67IQDE6' where id=5; -update noar tt set b2='AMEF2FCZ7Q4XUM8D14HCGFDJVWWB' where id=5; -update noar ti set b2='AMEF2FCZ7Q4XUM8D14HCGFDJVWWB' where id=5; -update noar tt set v0='FZ3RV3865BUCJS43DM2' where id=6; -update noar ti set v0='FZ3RV3865BUCJS43DM2' where id=6; -update noar tt set b0='IMBZQL7D01P2TBFN2DD' where id=6; -update noar ti set b0='IMBZQL7D01P2TBFN2DD' where id=6; -update noar tt set v0='QE' where id=6; -update noar ti set v0='QE' where id=6; -update noar tt set b1='J9GRXSSLTE2GU9U4UIZRW1TFKT826TK' where id=6; -update noar ti set b1='J9GRXSSLTE2GU9U4UIZRW1TFKT826TK' where id=6; -update noar tt set v0='3TKLQ3EZQQTLNHGTZJ' where id=6; -update noar ti set v0='3TKLQ3EZQQTLNHGTZJ' where id=6; -update noar tt set b2='TL3D6O75MDQSR59' where id=6; -update noar ti set b2='TL3D6O75MDQSR59' where id=6; -update noar tt set v0='PXCPFNLIFFDM4OVEJFC7B' where id=7; -update noar ti set v0='PXCPFNLIFFDM4OVEJFC7B' where id=7; -update noar tt set b0='3EOP59WHOD83HAFQDA5NALRI6' where id=7; -update noar ti set b0='3EOP59WHOD83HAFQDA5NALRI6' where id=7; -update noar tt set v0='Y75A549BRD4BTP39' where id=7; -update noar ti set v0='Y75A549BRD4BTP39' where id=7; -update noar tt set b1='TX0QXULZRQWO3BSHZMZHL1ZY35JSCO5' where id=7; -update noar ti set b1='TX0QXULZRQWO3BSHZMZHL1ZY35JSCO5' where id=7; -update noar tt set v0='FI995XA46' where id=7; -update noar ti set v0='FI995XA46' where id=7; -update noar tt set b2='86Y83L1OSHKBG91UTZUZNM3H' where id=7; -update noar ti set b2='86Y83L1OSHKBG91UTZUZNM3H' where id=7; -update noar tt set v0='RINVCVCE21B1EP4PLJFZ' where id=8; -update noar ti set v0='RINVCVCE21B1EP4PLJFZ' where id=8; -update noar tt set b0='V3X309FY2K71HXZU0JT' where id=8; -update noar ti set b0='V3X309FY2K71HXZU0JT' where id=8; -update noar tt set v0='EL6QU3YPDWWIOK4D5PLX6' where id=8; -update noar ti set v0='EL6QU3YPDWWIOK4D5PLX6' where id=8; -update noar tt set b1='B6FJ6RGM0H' where id=8; -update noar ti set b1='B6FJ6RGM0H' where id=8; -update noar tt set v0='2H' where id=8; -update noar ti set v0='2H' where id=8; -update noar tt set b2='ESM' where id=8; -update noar ti set b2='ESM' where id=8; -update noar tt set v0='U4RT6NWD0K9MI6YMRRMDV' where id=9; -update noar ti set v0='U4RT6NWD0K9MI6YMRRMDV' where id=9; -update noar tt set b0='IV2V8LCWM' where id=9; -update noar ti set b0='IV2V8LCWM' where id=9; -update noar tt set v0='6W1G7KT5ZHQ9A' where id=9; -update noar ti set v0='6W1G7KT5ZHQ9A' where id=9; -update noar tt set b1='XRBMM2NCWF5OA64APS4FEA5XF74ZF' where id=9; -update noar ti set b1='XRBMM2NCWF5OA64APS4FEA5XF74ZF' where id=9; -update noar tt set v0='IR' where id=9; -update noar ti set v0='IR' where id=9; -update noar tt set b2='FJRKDT7EKKEYUX2S066P53KLIZJH3TP0' where id=9; -update noar ti set b2='FJRKDT7EKKEYUX2S066P53KLIZJH3TP0' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 longblob not null, -b1 longblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='XGV6B2CN4FUGTLE28OTMFT9NENVBG' where id=1; -update noar ti set v0='XGV6B2CN4FUGTLE28OTMFT9NENVBG' where id=1; -update noar tt set b0='CUYLL78GT4EUHOK' where id=1; -update noar ti set b0='CUYLL78GT4EUHOK' where id=1; -update noar tt set v0='7WWDNDW00GVQW4YWVDT4PWY' where id=1; -update noar ti set v0='7WWDNDW00GVQW4YWVDT4PWY' where id=1; -update noar tt set b1='KWXY61AY1PB' where id=1; -update noar ti set b1='KWXY61AY1PB' where id=1; -update noar tt set v0='V2ZNN5TCST0858HJ68F1' where id=1; -update noar ti set v0='V2ZNN5TCST0858HJ68F1' where id=1; -update noar tt set b2='W45XMBPGLQKJABEP3VK' where id=1; -update noar ti set b2='W45XMBPGLQKJABEP3VK' where id=1; -update noar tt set v0='AF84VXYKP64W33NABCA9AGT4I' where id=2; -update noar ti set v0='AF84VXYKP64W33NABCA9AGT4I' where id=2; -update noar tt set b0='2ILGUHBGV6GQRUJYXXJB' where id=2; -update noar ti set b0='2ILGUHBGV6GQRUJYXXJB' where id=2; -update noar tt set v0='TQNDHYL8BZ3X0IVISYEAXSYL65SZUVX' where id=2; -update noar ti set v0='TQNDHYL8BZ3X0IVISYEAXSYL65SZUVX' where id=2; -update noar tt set b1='D4111SCDP1O5Y7KCNO37' where id=2; -update noar ti set b1='D4111SCDP1O5Y7KCNO37' where id=2; -update noar tt set v0='H8KIAM2KH' where id=2; -update noar ti set v0='H8KIAM2KH' where id=2; -update noar tt set b2='F366PA7' where id=2; -update noar ti set b2='F366PA7' where id=2; -update noar tt set v0='1826MAL2EM0UM0ZXQ3HV' where id=3; -update noar ti set v0='1826MAL2EM0UM0ZXQ3HV' where id=3; -update noar tt set b0='NV3UEGUPA2QD44FL7E5V0XS' where id=3; -update noar ti set b0='NV3UEGUPA2QD44FL7E5V0XS' where id=3; -update noar tt set v0='UPBJI5CH7E0SL50CDCVBLA7J4UPDE' where id=3; -update noar ti set v0='UPBJI5CH7E0SL50CDCVBLA7J4UPDE' where id=3; -update noar tt set b1='ECBYDUZS5I4Z2QNSMKQMR' where id=3; -update noar ti set b1='ECBYDUZS5I4Z2QNSMKQMR' where id=3; -update noar tt set v0='S2YY1MK9HWBUSRRFFN0PROPKO' where id=3; -update noar ti set v0='S2YY1MK9HWBUSRRFFN0PROPKO' where id=3; -update noar tt set b2='ARHSUP5AFRS7E06424N68LBUXYE3X' where id=3; -update noar ti set b2='ARHSUP5AFRS7E06424N68LBUXYE3X' where id=3; -update noar tt set v0='0U03E03PYC4Y2Q52SW6HYF6O6MK9Z8' where id=4; -update noar ti set v0='0U03E03PYC4Y2Q52SW6HYF6O6MK9Z8' where id=4; -update noar tt set b0='ZASFFIH2NEIG28MFXNPURC' where id=4; -update noar ti set b0='ZASFFIH2NEIG28MFXNPURC' where id=4; -update noar tt set v0='0LQNM46E5TWNAZ946SKE305L' where id=4; -update noar ti set v0='0LQNM46E5TWNAZ946SKE305L' where id=4; -update noar tt set b1='C4W0TA9MTPN22VARP53K8Q4WMN' where id=4; -update noar ti set b1='C4W0TA9MTPN22VARP53K8Q4WMN' where id=4; -update noar tt set v0='P1THW093M8SZ6Q6AH7W7PTFEM4JXG' where id=4; -update noar ti set v0='P1THW093M8SZ6Q6AH7W7PTFEM4JXG' where id=4; -update noar tt set b2='EDE445I' where id=4; -update noar ti set b2='EDE445I' where id=4; -update noar tt set v0='7X5LDS8INWJCMVD54AAQB5CS6OI6M' where id=5; -update noar ti set v0='7X5LDS8INWJCMVD54AAQB5CS6OI6M' where id=5; -update noar tt set b0='SMQOVG3YALP' where id=5; -update noar ti set b0='SMQOVG3YALP' where id=5; -update noar tt set v0='6C2EF7MBO6PGPOVZGA9X8LD' where id=5; -update noar ti set v0='6C2EF7MBO6PGPOVZGA9X8LD' where id=5; -update noar tt set b1='GCQ9GPTPK5KT3T8QKI9T6EVPXD9L' where id=5; -update noar ti set b1='GCQ9GPTPK5KT3T8QKI9T6EVPXD9L' where id=5; -update noar tt set v0='2WUSO4MKBBI9ZLQFYS69KC' where id=5; -update noar ti set v0='2WUSO4MKBBI9ZLQFYS69KC' where id=5; -update noar tt set b2='DAN8F10RV' where id=5; -update noar ti set b2='DAN8F10RV' where id=5; -update noar tt set v0='95PE3215C79KFRO5SF' where id=6; -update noar ti set v0='95PE3215C79KFRO5SF' where id=6; -update noar tt set b0='1HR72A5LM' where id=6; -update noar ti set b0='1HR72A5LM' where id=6; -update noar tt set v0='KC7OLKK9I0NIMRXU1B6B' where id=6; -update noar ti set v0='KC7OLKK9I0NIMRXU1B6B' where id=6; -update noar tt set b1='CPAGNKQURE83HTIO7VFFLJXAJQJCJ' where id=6; -update noar ti set b1='CPAGNKQURE83HTIO7VFFLJXAJQJCJ' where id=6; -update noar tt set v0='TN86' where id=6; -update noar ti set v0='TN86' where id=6; -update noar tt set b2='06KF2T8ZZJKFYCPOLYBQYCOY' where id=6; -update noar ti set b2='06KF2T8ZZJKFYCPOLYBQYCOY' where id=6; -update noar tt set v0='6T1G201LY3QO440HTS' where id=7; -update noar ti set v0='6T1G201LY3QO440HTS' where id=7; -update noar tt set b0='CJTEMQMAX58V4' where id=7; -update noar ti set b0='CJTEMQMAX58V4' where id=7; -update noar tt set v0='XIC0CCVY' where id=7; -update noar ti set v0='XIC0CCVY' where id=7; -update noar tt set b1='CVMDDB05QF' where id=7; -update noar ti set b1='CVMDDB05QF' where id=7; -update noar tt set v0='3F17S62' where id=7; -update noar ti set v0='3F17S62' where id=7; -update noar tt set b2='6WO0L' where id=7; -update noar ti set b2='6WO0L' where id=7; -update noar tt set v0='KASOE1EU6ERK2V222O8AT4ZA85W1L' where id=8; -update noar ti set v0='KASOE1EU6ERK2V222O8AT4ZA85W1L' where id=8; -update noar tt set b0='0VVOB2NQ9V' where id=8; -update noar ti set b0='0VVOB2NQ9V' where id=8; -update noar tt set v0='K0DE5AHZ9' where id=8; -update noar ti set v0='K0DE5AHZ9' where id=8; -update noar tt set b1='5TW3W4G5TR0JAG' where id=8; -update noar ti set b1='5TW3W4G5TR0JAG' where id=8; -update noar tt set v0='7YTXOBB424' where id=8; -update noar ti set v0='7YTXOBB424' where id=8; -update noar tt set b2='42DNEUB7I38KRFQZQV0LTRP7VHE5R6D' where id=8; -update noar ti set b2='42DNEUB7I38KRFQZQV0LTRP7VHE5R6D' where id=8; -update noar tt set v0='Z7NFVKW' where id=9; -update noar ti set v0='Z7NFVKW' where id=9; -update noar tt set b0='3YF76E6LFX' where id=9; -update noar ti set b0='3YF76E6LFX' where id=9; -update noar tt set v0='0FLT6Z1' where id=9; -update noar ti set v0='0FLT6Z1' where id=9; -update noar tt set b1='DDL' where id=9; -update noar ti set b1='DDL' where id=9; -update noar tt set v0='UNA71MW4A' where id=9; -update noar ti set v0='UNA71MW4A' where id=9; -update noar tt set b2='R67I38VQDJ0TWU3IYIQYS1Y2FALF' where id=9; -update noar ti set b2='R67I38VQDJ0TWU3IYIQYS1Y2FALF' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 longblob null, -b1 longblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='RNS4I3W1J3GW' where id=1; -update noar ti set v0='RNS4I3W1J3GW' where id=1; -update noar tt set b0='K' where id=1; -update noar ti set b0='K' where id=1; -update noar tt set v0='PNZSM19UHHVRJDMTVEYAGOMRFG4K' where id=1; -update noar ti set v0='PNZSM19UHHVRJDMTVEYAGOMRFG4K' where id=1; -update noar tt set b1='H' where id=1; -update noar ti set b1='H' where id=1; -update noar tt set v0='XPRN99HQV25HEM' where id=1; -update noar ti set v0='XPRN99HQV25HEM' where id=1; -update noar tt set b2='PD2L19MOTZIRQTQUU86Q6L' where id=1; -update noar ti set b2='PD2L19MOTZIRQTQUU86Q6L' where id=1; -update noar tt set v0='MOFU0RL3M8LBA42WQ6D' where id=2; -update noar ti set v0='MOFU0RL3M8LBA42WQ6D' where id=2; -update noar tt set b0='2KRY3ZIIM5WE0K' where id=2; -update noar ti set b0='2KRY3ZIIM5WE0K' where id=2; -update noar tt set v0='D8FOJTEFDDZKK30CVF5QA' where id=2; -update noar ti set v0='D8FOJTEFDDZKK30CVF5QA' where id=2; -update noar tt set b1='ZK3A2VJ509K0O6RRZCPAXYCP' where id=2; -update noar ti set b1='ZK3A2VJ509K0O6RRZCPAXYCP' where id=2; -update noar tt set v0='P43W25Q' where id=2; -update noar ti set v0='P43W25Q' where id=2; -update noar tt set b2='I8ISXTLW742JLU5IBIHGJJPNDB47G822' where id=2; -update noar ti set b2='I8ISXTLW742JLU5IBIHGJJPNDB47G822' where id=2; -update noar tt set v0='8061F2SI' where id=3; -update noar ti set v0='8061F2SI' where id=3; -update noar tt set b0='8N82V' where id=3; -update noar ti set b0='8N82V' where id=3; -update noar tt set v0='R' where id=3; -update noar ti set v0='R' where id=3; -update noar tt set b1='I2GWXPVWH8G6FLMH63QFXV3FW' where id=3; -update noar ti set b1='I2GWXPVWH8G6FLMH63QFXV3FW' where id=3; -update noar tt set v0='DHP' where id=3; -update noar ti set v0='DHP' where id=3; -update noar tt set b2='RKBU38WQAKMVT7SF3' where id=3; -update noar ti set b2='RKBU38WQAKMVT7SF3' where id=3; -update noar tt set v0='Q6V003VR5OSTD01XG12SJ5B2GNDQ' where id=4; -update noar ti set v0='Q6V003VR5OSTD01XG12SJ5B2GNDQ' where id=4; -update noar tt set b0='82SPMMEBINXV0UH3X3S8G8HE5A1VU7' where id=4; -update noar ti set b0='82SPMMEBINXV0UH3X3S8G8HE5A1VU7' where id=4; -update noar tt set v0='7OU1ISCFBSV3UUKASEPAYUO7OZ' where id=4; -update noar ti set v0='7OU1ISCFBSV3UUKASEPAYUO7OZ' where id=4; -update noar tt set b1='BLHDXIKWF616UAW9QF' where id=4; -update noar ti set b1='BLHDXIKWF616UAW9QF' where id=4; -update noar tt set v0='KJZJ88PZFWNXS0YM7X' where id=4; -update noar ti set v0='KJZJ88PZFWNXS0YM7X' where id=4; -update noar tt set b2='QYPRUTZXNHSU35CZK8HNBG4T22WIFJ' where id=4; -update noar ti set b2='QYPRUTZXNHSU35CZK8HNBG4T22WIFJ' where id=4; -update noar tt set v0='KP' where id=5; -update noar ti set v0='KP' where id=5; -update noar tt set b0='308MJM3KH7BNC32TK61EU0JM7TCDV' where id=5; -update noar ti set b0='308MJM3KH7BNC32TK61EU0JM7TCDV' where id=5; -update noar tt set v0='TH8OHLHYRDTJ' where id=5; -update noar ti set v0='TH8OHLHYRDTJ' where id=5; -update noar tt set b1='M1CI6FPW9Q10N81' where id=5; -update noar ti set b1='M1CI6FPW9Q10N81' where id=5; -update noar tt set v0='JHN4LMRYY3HEJ9HHGSOWZCQKCUN0BJA' where id=5; -update noar ti set v0='JHN4LMRYY3HEJ9HHGSOWZCQKCUN0BJA' where id=5; -update noar tt set b2='UYPQ1W' where id=5; -update noar ti set b2='UYPQ1W' where id=5; -update noar tt set v0='U8SRIU0ZMD83JLGR3X4XD8J4M6JICJ' where id=6; -update noar ti set v0='U8SRIU0ZMD83JLGR3X4XD8J4M6JICJ' where id=6; -update noar tt set b0='2EWPEUWI3QE8R' where id=6; -update noar ti set b0='2EWPEUWI3QE8R' where id=6; -update noar tt set v0='3YECOUP56R171E' where id=6; -update noar ti set v0='3YECOUP56R171E' where id=6; -update noar tt set b1='CR0KSW58SREUV8JCN0RN2' where id=6; -update noar ti set b1='CR0KSW58SREUV8JCN0RN2' where id=6; -update noar tt set v0='BDNP7' where id=6; -update noar ti set v0='BDNP7' where id=6; -update noar tt set b2='IIOW82DK9XM' where id=6; -update noar ti set b2='IIOW82DK9XM' where id=6; -update noar tt set v0='N70R04QVDHH296HDZ06BX' where id=7; -update noar ti set v0='N70R04QVDHH296HDZ06BX' where id=7; -update noar tt set b0='LNTYHYFLWMBXN0G5TVJYQ' where id=7; -update noar ti set b0='LNTYHYFLWMBXN0G5TVJYQ' where id=7; -update noar tt set v0='0N3XXT9G' where id=7; -update noar ti set v0='0N3XXT9G' where id=7; -update noar tt set b1='MYQAF0ONB58LUOECPNR3XSCNJP' where id=7; -update noar ti set b1='MYQAF0ONB58LUOECPNR3XSCNJP' where id=7; -update noar tt set v0='P' where id=7; -update noar ti set v0='P' where id=7; -update noar tt set b2='7R' where id=7; -update noar ti set b2='7R' where id=7; -update noar tt set v0='B10NRY3BTS' where id=8; -update noar ti set v0='B10NRY3BTS' where id=8; -update noar tt set b0='0N5Q7WK9HC5JQNAHZZKT0P64TCQ20' where id=8; -update noar ti set b0='0N5Q7WK9HC5JQNAHZZKT0P64TCQ20' where id=8; -update noar tt set v0='EBAJ' where id=8; -update noar ti set v0='EBAJ' where id=8; -update noar tt set b1='NA4MH' where id=8; -update noar ti set b1='NA4MH' where id=8; -update noar tt set v0='LKV7LSLDUOLF' where id=8; -update noar ti set v0='LKV7LSLDUOLF' where id=8; -update noar tt set b2='KZKAETOA2IOQNHBF3YLO7MCB6MA7KCUN' where id=8; -update noar ti set b2='KZKAETOA2IOQNHBF3YLO7MCB6MA7KCUN' where id=8; -update noar tt set v0='PLO9ZRD' where id=9; -update noar ti set v0='PLO9ZRD' where id=9; -update noar tt set b0='FPYO1H2C' where id=9; -update noar ti set b0='FPYO1H2C' where id=9; -update noar tt set v0='14GSNG9Q' where id=9; -update noar ti set v0='14GSNG9Q' where id=9; -update noar tt set b1='4' where id=9; -update noar ti set b1='4' where id=9; -update noar tt set v0='E3SCJRMQ6G6F6TX6ICW5P' where id=9; -update noar ti set v0='E3SCJRMQ6G6F6TX6ICW5P' where id=9; -update noar tt set b2='68SUYGFTJ5KPL0I9TKYIH7621NDA8P3E' where id=9; -update noar ti set b2='68SUYGFTJ5KPL0I9TKYIH7621NDA8P3E' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 longblob null, -b1 longblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='CS9Q254KLP' where id=1; -update noar ti set v0='CS9Q254KLP' where id=1; -update noar tt set b0='7WPRXV76R9V1B38LVOBV' where id=1; -update noar ti set b0='7WPRXV76R9V1B38LVOBV' where id=1; -update noar tt set v0='DAIF8SA8J' where id=1; -update noar ti set v0='DAIF8SA8J' where id=1; -update noar tt set b1='DGP5W5CGAM4T8Q7ZDHP9RFMLFM6OHV3' where id=1; -update noar ti set b1='DGP5W5CGAM4T8Q7ZDHP9RFMLFM6OHV3' where id=1; -update noar tt set v0='Y' where id=1; -update noar ti set v0='Y' where id=1; -update noar tt set b2='X1S9MDJXP4WU0CN1TZOM' where id=1; -update noar ti set b2='X1S9MDJXP4WU0CN1TZOM' where id=1; -update noar tt set v0='5HTBOH64WLYI8VTZ2KPY' where id=2; -update noar ti set v0='5HTBOH64WLYI8VTZ2KPY' where id=2; -update noar tt set b0='Q6QHONHJS5ZDDXNDRG2CSMV' where id=2; -update noar ti set b0='Q6QHONHJS5ZDDXNDRG2CSMV' where id=2; -update noar tt set v0='EACY23ORG92C9JSWFMW' where id=2; -update noar ti set v0='EACY23ORG92C9JSWFMW' where id=2; -update noar tt set b1='7' where id=2; -update noar ti set b1='7' where id=2; -update noar tt set v0='R' where id=2; -update noar ti set v0='R' where id=2; -update noar tt set b2='4O4DSK2AE1GPCXUCOUCHW31JI' where id=2; -update noar ti set b2='4O4DSK2AE1GPCXUCOUCHW31JI' where id=2; -update noar tt set v0='25YZM4NXC7CYXBGF07TN' where id=3; -update noar ti set v0='25YZM4NXC7CYXBGF07TN' where id=3; -update noar tt set b0='L6DF4QQ9475Q' where id=3; -update noar ti set b0='L6DF4QQ9475Q' where id=3; -update noar tt set v0='2WB66PK33NENKA1XTOHN2ZLXQKBZT2ZO' where id=3; -update noar ti set v0='2WB66PK33NENKA1XTOHN2ZLXQKBZT2ZO' where id=3; -update noar tt set b1='YRC4C8L4' where id=3; -update noar ti set b1='YRC4C8L4' where id=3; -update noar tt set v0='98KKGSKSIH6HJEK5DB2ZR8SU' where id=3; -update noar ti set v0='98KKGSKSIH6HJEK5DB2ZR8SU' where id=3; -update noar tt set b2='Q1P17AXJS9JAI7P42125FM37O9GU9PTI' where id=3; -update noar ti set b2='Q1P17AXJS9JAI7P42125FM37O9GU9PTI' where id=3; -update noar tt set v0='9EDQ4' where id=4; -update noar ti set v0='9EDQ4' where id=4; -update noar tt set b0='0IN6FZ50PF' where id=4; -update noar ti set b0='0IN6FZ50PF' where id=4; -update noar tt set v0='5UFO' where id=4; -update noar ti set v0='5UFO' where id=4; -update noar tt set b1='FO0JY9MS2US3J' where id=4; -update noar ti set b1='FO0JY9MS2US3J' where id=4; -update noar tt set v0='RC02ULX' where id=4; -update noar ti set v0='RC02ULX' where id=4; -update noar tt set b2='6E6BRKCK0WC81R' where id=4; -update noar ti set b2='6E6BRKCK0WC81R' where id=4; -update noar tt set v0='D6MOP6W9K3SDUI6' where id=5; -update noar ti set v0='D6MOP6W9K3SDUI6' where id=5; -update noar tt set b0='KZFAOQM' where id=5; -update noar ti set b0='KZFAOQM' where id=5; -update noar tt set v0='6SZRRG3IGEK7NUMS' where id=5; -update noar ti set v0='6SZRRG3IGEK7NUMS' where id=5; -update noar tt set b1='EICPN4INYQEZQWITTMGOMBA8R' where id=5; -update noar ti set b1='EICPN4INYQEZQWITTMGOMBA8R' where id=5; -update noar tt set v0='REG15BWE8ZELOHE5W3KBQY73AYPFJVQ' where id=5; -update noar ti set v0='REG15BWE8ZELOHE5W3KBQY73AYPFJVQ' where id=5; -update noar tt set b2='7PD67UF3V' where id=5; -update noar ti set b2='7PD67UF3V' where id=5; -update noar tt set v0='A' where id=6; -update noar ti set v0='A' where id=6; -update noar tt set b0='58UBNRGEJDS' where id=6; -update noar ti set b0='58UBNRGEJDS' where id=6; -update noar tt set v0='MFMGN6M1H' where id=6; -update noar ti set v0='MFMGN6M1H' where id=6; -update noar tt set b1='XLZ5IZECMEN' where id=6; -update noar ti set b1='XLZ5IZECMEN' where id=6; -update noar tt set v0='XS077DOGPLG9' where id=6; -update noar ti set v0='XS077DOGPLG9' where id=6; -update noar tt set b2='TM1IXJZICPYFEKI3ENPOX' where id=6; -update noar ti set b2='TM1IXJZICPYFEKI3ENPOX' where id=6; -update noar tt set v0='9MSMK' where id=7; -update noar ti set v0='9MSMK' where id=7; -update noar tt set b0='GPTNW5L08I6TLTZAY43DO9S40JDLNNP4' where id=7; -update noar ti set b0='GPTNW5L08I6TLTZAY43DO9S40JDLNNP4' where id=7; -update noar tt set v0='4N' where id=7; -update noar ti set v0='4N' where id=7; -update noar tt set b1='PEUHCVD' where id=7; -update noar ti set b1='PEUHCVD' where id=7; -update noar tt set v0='ZVXNPB2L' where id=7; -update noar ti set v0='ZVXNPB2L' where id=7; -update noar tt set b2='HQ5' where id=7; -update noar ti set b2='HQ5' where id=7; -update noar tt set v0='9JAXSTZW8WQL8QGDQJHN2I7' where id=8; -update noar ti set v0='9JAXSTZW8WQL8QGDQJHN2I7' where id=8; -update noar tt set b0='1TBGG6' where id=8; -update noar ti set b0='1TBGG6' where id=8; -update noar tt set v0='2X4PTHT17ACMOF1V9W1T3DR1N9C' where id=8; -update noar ti set v0='2X4PTHT17ACMOF1V9W1T3DR1N9C' where id=8; -update noar tt set b1='VJJSHVFA0HJW6' where id=8; -update noar ti set b1='VJJSHVFA0HJW6' where id=8; -update noar tt set v0='S43ZCA00D4TA' where id=8; -update noar ti set v0='S43ZCA00D4TA' where id=8; -update noar tt set b2='U87Y1ZI79LS81FDZO5M' where id=8; -update noar ti set b2='U87Y1ZI79LS81FDZO5M' where id=8; -update noar tt set v0='H0WWS2402O29YYP66' where id=9; -update noar ti set v0='H0WWS2402O29YYP66' where id=9; -update noar tt set b0='KC11SOA9J2GDP626DDVR8C52V9' where id=9; -update noar ti set b0='KC11SOA9J2GDP626DDVR8C52V9' where id=9; -update noar tt set v0='E6U3TQ958J5' where id=9; -update noar ti set v0='E6U3TQ958J5' where id=9; -update noar tt set b1='5K09D88' where id=9; -update noar ti set b1='5K09D88' where id=9; -update noar tt set v0='HU79FN8GSBNS' where id=9; -update noar ti set v0='HU79FN8GSBNS' where id=9; -update noar tt set b2='F6RY9' where id=9; -update noar ti set b2='F6RY9' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 longblob not null, -b1 longblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='A6ANV7NSH933E5' where id=1; -update noar ti set v0='A6ANV7NSH933E5' where id=1; -update noar tt set b0='BPKSZP2HZQ6SZW8GMBX4L2B8I3HZ' where id=1; -update noar ti set b0='BPKSZP2HZQ6SZW8GMBX4L2B8I3HZ' where id=1; -update noar tt set v0='OQ7W198AGXBD3IO1DWG62NLYA76XCS4Y' where id=1; -update noar ti set v0='OQ7W198AGXBD3IO1DWG62NLYA76XCS4Y' where id=1; -update noar tt set b1='E7ELAFZXZBQV1XK' where id=1; -update noar ti set b1='E7ELAFZXZBQV1XK' where id=1; -update noar tt set v0='VCV6TJH506G5ZLQ0BW' where id=1; -update noar ti set v0='VCV6TJH506G5ZLQ0BW' where id=1; -update noar tt set b2='7YFAIVW57L7FYSN7GGP5WD74LKRK' where id=1; -update noar ti set b2='7YFAIVW57L7FYSN7GGP5WD74LKRK' where id=1; -update noar tt set v0='98D9SDV4O2SNNII4' where id=2; -update noar ti set v0='98D9SDV4O2SNNII4' where id=2; -update noar tt set b0='DH77Y0GI0JR95NQ' where id=2; -update noar ti set b0='DH77Y0GI0JR95NQ' where id=2; -update noar tt set v0='6FDAGC91F5TISAS7ZZH' where id=2; -update noar ti set v0='6FDAGC91F5TISAS7ZZH' where id=2; -update noar tt set b1='99BNM8V0AOIDQXD8I8OP3QWZTZ' where id=2; -update noar ti set b1='99BNM8V0AOIDQXD8I8OP3QWZTZ' where id=2; -update noar tt set v0='TG0FS6HZMLEBNT2' where id=2; -update noar ti set v0='TG0FS6HZMLEBNT2' where id=2; -update noar tt set b2='BDI4RIXP9GBD4ALELRFRFB3FZYO72AP9' where id=2; -update noar ti set b2='BDI4RIXP9GBD4ALELRFRFB3FZYO72AP9' where id=2; -update noar tt set v0='P392DGUO462HTZOALHL5IF' where id=3; -update noar ti set v0='P392DGUO462HTZOALHL5IF' where id=3; -update noar tt set b0='NKKNCTN5LB2EYS8A6XFBCKIL60TBX3D8' where id=3; -update noar ti set b0='NKKNCTN5LB2EYS8A6XFBCKIL60TBX3D8' where id=3; -update noar tt set v0='FE4S1G028HVD3XAKKH8737Z' where id=3; -update noar ti set v0='FE4S1G028HVD3XAKKH8737Z' where id=3; -update noar tt set b1='3F90' where id=3; -update noar ti set b1='3F90' where id=3; -update noar tt set v0='RNYG6I5DORKGNB9WCMJ' where id=3; -update noar ti set v0='RNYG6I5DORKGNB9WCMJ' where id=3; -update noar tt set b2='FMY7CL5EPQVXP6B9BG2XU618ANN3CAW' where id=3; -update noar ti set b2='FMY7CL5EPQVXP6B9BG2XU618ANN3CAW' where id=3; -update noar tt set v0='WVENPQGA8H9FMF36X0J' where id=4; -update noar ti set v0='WVENPQGA8H9FMF36X0J' where id=4; -update noar tt set b0='HQ0OP' where id=4; -update noar ti set b0='HQ0OP' where id=4; -update noar tt set v0='4LU3AEZE81FUX8Z6MY' where id=4; -update noar ti set v0='4LU3AEZE81FUX8Z6MY' where id=4; -update noar tt set b1='VJ05LIWF8OZQO9JGHW65GGQ8KE29' where id=4; -update noar ti set b1='VJ05LIWF8OZQO9JGHW65GGQ8KE29' where id=4; -update noar tt set v0='PP85AV3O2OEVS156RS93TW22AX' where id=4; -update noar ti set v0='PP85AV3O2OEVS156RS93TW22AX' where id=4; -update noar tt set b2='C1TH' where id=4; -update noar ti set b2='C1TH' where id=4; -update noar tt set v0='800VZ2QP4912P0R' where id=5; -update noar ti set v0='800VZ2QP4912P0R' where id=5; -update noar tt set b0='7NUMQPOL9' where id=5; -update noar ti set b0='7NUMQPOL9' where id=5; -update noar tt set v0='VHDCUTUOG3FMHGZQMG9' where id=5; -update noar ti set v0='VHDCUTUOG3FMHGZQMG9' where id=5; -update noar tt set b1='QWTG38457QTQQLIJ2' where id=5; -update noar ti set b1='QWTG38457QTQQLIJ2' where id=5; -update noar tt set v0='095SQL0' where id=5; -update noar ti set v0='095SQL0' where id=5; -update noar tt set b2='Y' where id=5; -update noar ti set b2='Y' where id=5; -update noar tt set v0='K178IINGDC68SDV7LHE8FVP2XN' where id=6; -update noar ti set v0='K178IINGDC68SDV7LHE8FVP2XN' where id=6; -update noar tt set b0='GZR2QLEZQYQZTY0ZU93EH8N' where id=6; -update noar ti set b0='GZR2QLEZQYQZTY0ZU93EH8N' where id=6; -update noar tt set v0='8DJW8E5PTKT0EGKIW5Q3' where id=6; -update noar ti set v0='8DJW8E5PTKT0EGKIW5Q3' where id=6; -update noar tt set b1='4O2VZFLEGDKNKOC7ETD' where id=6; -update noar ti set b1='4O2VZFLEGDKNKOC7ETD' where id=6; -update noar tt set v0='0K' where id=6; -update noar ti set v0='0K' where id=6; -update noar tt set b2='CJUHF' where id=6; -update noar ti set b2='CJUHF' where id=6; -update noar tt set v0='6K0IDWZF28JFV7NU8J56XU9' where id=7; -update noar ti set v0='6K0IDWZF28JFV7NU8J56XU9' where id=7; -update noar tt set b0='NEVP9MAVQYNGQKNTLEJZB' where id=7; -update noar ti set b0='NEVP9MAVQYNGQKNTLEJZB' where id=7; -update noar tt set v0='P193ISM679CWQAN3YZ1CX' where id=7; -update noar ti set v0='P193ISM679CWQAN3YZ1CX' where id=7; -update noar tt set b1='GR2DGQZ0KVH' where id=7; -update noar ti set b1='GR2DGQZ0KVH' where id=7; -update noar tt set v0='FL0X17THORT5D' where id=7; -update noar ti set v0='FL0X17THORT5D' where id=7; -update noar tt set b2='Q7GWF572WM6L9WVDSF' where id=7; -update noar ti set b2='Q7GWF572WM6L9WVDSF' where id=7; -update noar tt set v0='KPC6UMRJB56' where id=8; -update noar ti set v0='KPC6UMRJB56' where id=8; -update noar tt set b0='TVUWIP75WL4V' where id=8; -update noar ti set b0='TVUWIP75WL4V' where id=8; -update noar tt set v0='OP8I1WB' where id=8; -update noar ti set v0='OP8I1WB' where id=8; -update noar tt set b1='CWBA8RK1EQ99U1V9W5F' where id=8; -update noar ti set b1='CWBA8RK1EQ99U1V9W5F' where id=8; -update noar tt set v0='RFQYJVYOH' where id=8; -update noar ti set v0='RFQYJVYOH' where id=8; -update noar tt set b2='W' where id=8; -update noar ti set b2='W' where id=8; -update noar tt set v0='DW0WCVWTKE3XHPRQ4J3OEMCMS5' where id=9; -update noar ti set v0='DW0WCVWTKE3XHPRQ4J3OEMCMS5' where id=9; -update noar tt set b0='0KHBKIEK7W1JSUM' where id=9; -update noar ti set b0='0KHBKIEK7W1JSUM' where id=9; -update noar tt set v0='ITRMQ974LJ2NE28B02' where id=9; -update noar ti set v0='ITRMQ974LJ2NE28B02' where id=9; -update noar tt set b1='HWUWMDV0' where id=9; -update noar ti set b1='HWUWMDV0' where id=9; -update noar tt set v0='TDWHIGSGUGSYNVSZYX9NTII9FJ4WWDB' where id=9; -update noar ti set v0='TDWHIGSGUGSYNVSZYX9NTII9FJ4WWDB' where id=9; -update noar tt set b2='UTOHP5DRDYBN6Q6899ENS9GOJK0F2E' where id=9; -update noar ti set b2='UTOHP5DRDYBN6Q6899ENS9GOJK0F2E' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 longblob not null, -b1 longblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='Q40VL7193ODVFE34T0' where id=1; -update noar ti set v0='Q40VL7193ODVFE34T0' where id=1; -update noar tt set b0='V5RV4TSPQX69PELX7KFQ' where id=1; -update noar ti set b0='V5RV4TSPQX69PELX7KFQ' where id=1; -update noar tt set v0='N27OG3J6PDRCD9XHEGOV' where id=1; -update noar ti set v0='N27OG3J6PDRCD9XHEGOV' where id=1; -update noar tt set b1='DPOAV8BV68G65GP17BLB' where id=1; -update noar ti set b1='DPOAV8BV68G65GP17BLB' where id=1; -update noar tt set v0='6VGDZEP5' where id=1; -update noar ti set v0='6VGDZEP5' where id=1; -update noar tt set b2='NOAV4L703NB5SX2PHZCYKHB6T7R' where id=1; -update noar ti set b2='NOAV4L703NB5SX2PHZCYKHB6T7R' where id=1; -update noar tt set v0='5' where id=2; -update noar ti set v0='5' where id=2; -update noar tt set b0='JA5M692FAUPH8YD' where id=2; -update noar ti set b0='JA5M692FAUPH8YD' where id=2; -update noar tt set v0='1ZKDTEB5AQIE1KH2U2XKGNY4X' where id=2; -update noar ti set v0='1ZKDTEB5AQIE1KH2U2XKGNY4X' where id=2; -update noar tt set b1='QBHKWUOHKNWAI7MLPGNE' where id=2; -update noar ti set b1='QBHKWUOHKNWAI7MLPGNE' where id=2; -update noar tt set v0='7TUMK6RPH3PUX00RGQCQMXDADENN9' where id=2; -update noar ti set v0='7TUMK6RPH3PUX00RGQCQMXDADENN9' where id=2; -update noar tt set b2='WA6KO98E3ZVIC7J3ITSDIFRMK' where id=2; -update noar ti set b2='WA6KO98E3ZVIC7J3ITSDIFRMK' where id=2; -update noar tt set v0='5OWI6XJWKNJON16O9ZGTQPC7RRPA' where id=3; -update noar ti set v0='5OWI6XJWKNJON16O9ZGTQPC7RRPA' where id=3; -update noar tt set b0='SR' where id=3; -update noar ti set b0='SR' where id=3; -update noar tt set v0='F1K' where id=3; -update noar ti set v0='F1K' where id=3; -update noar tt set b1='AQ2QJ7XCGIRWMVWXX4CDGLDN4EONK916' where id=3; -update noar ti set b1='AQ2QJ7XCGIRWMVWXX4CDGLDN4EONK916' where id=3; -update noar tt set v0='SOQ0K4503O03ESH' where id=3; -update noar ti set v0='SOQ0K4503O03ESH' where id=3; -update noar tt set b2='4BVCVILSWJYAL5930IHFA5' where id=3; -update noar ti set b2='4BVCVILSWJYAL5930IHFA5' where id=3; -update noar tt set v0='N4SDF' where id=4; -update noar ti set v0='N4SDF' where id=4; -update noar tt set b0='MTA9KCYYXOYLI2FTG4' where id=4; -update noar ti set b0='MTA9KCYYXOYLI2FTG4' where id=4; -update noar tt set v0='V' where id=4; -update noar ti set v0='V' where id=4; -update noar tt set b1='Q6VI4V0S3KDWU288TWPPNUE3TXSTP' where id=4; -update noar ti set b1='Q6VI4V0S3KDWU288TWPPNUE3TXSTP' where id=4; -update noar tt set v0='QZYJJSL6HI042NII36SYYJ7AMKT' where id=4; -update noar ti set v0='QZYJJSL6HI042NII36SYYJ7AMKT' where id=4; -update noar tt set b2='8AQEABPWUV78W5YT2V102MM4' where id=4; -update noar ti set b2='8AQEABPWUV78W5YT2V102MM4' where id=4; -update noar tt set v0='GRHFPPL3IQ4GVYLDNICBCN' where id=5; -update noar ti set v0='GRHFPPL3IQ4GVYLDNICBCN' where id=5; -update noar tt set b0='H5Z5OGF7XANTER6ZOEVXYIPUGFS2O8B' where id=5; -update noar ti set b0='H5Z5OGF7XANTER6ZOEVXYIPUGFS2O8B' where id=5; -update noar tt set v0='LYQ5HW5740I8N1VXQLZGK0A5QIT6M9KN' where id=5; -update noar ti set v0='LYQ5HW5740I8N1VXQLZGK0A5QIT6M9KN' where id=5; -update noar tt set b1='4D3XK3OKDDJ6TT708JSAYVKMIYVSQBB' where id=5; -update noar ti set b1='4D3XK3OKDDJ6TT708JSAYVKMIYVSQBB' where id=5; -update noar tt set v0='C423N11' where id=5; -update noar ti set v0='C423N11' where id=5; -update noar tt set b2='18SAG6I70M0VNUXILFU3DB' where id=5; -update noar ti set b2='18SAG6I70M0VNUXILFU3DB' where id=5; -update noar tt set v0='BY3UG98SS5RW9C26HFU' where id=6; -update noar ti set v0='BY3UG98SS5RW9C26HFU' where id=6; -update noar tt set b0='SE5' where id=6; -update noar ti set b0='SE5' where id=6; -update noar tt set v0='1ERKY7HPB6K0OTUC8HM' where id=6; -update noar ti set v0='1ERKY7HPB6K0OTUC8HM' where id=6; -update noar tt set b1='4E77VC4CBINAZUZNE5BM27222MO' where id=6; -update noar ti set b1='4E77VC4CBINAZUZNE5BM27222MO' where id=6; -update noar tt set v0='DFT0U5FT' where id=6; -update noar ti set v0='DFT0U5FT' where id=6; -update noar tt set b2='QC7JGSHVI7V0C5WSNGK53WHUMOVGKT3' where id=6; -update noar ti set b2='QC7JGSHVI7V0C5WSNGK53WHUMOVGKT3' where id=6; -update noar tt set v0='2Y' where id=7; -update noar ti set v0='2Y' where id=7; -update noar tt set b0='EM32N4XLC5D2MQ02' where id=7; -update noar ti set b0='EM32N4XLC5D2MQ02' where id=7; -update noar tt set v0='QKT599MG06SJB1B5PD' where id=7; -update noar ti set v0='QKT599MG06SJB1B5PD' where id=7; -update noar tt set b1='WQ37RIMMI2HUS3EJC7L5V6ZN' where id=7; -update noar ti set b1='WQ37RIMMI2HUS3EJC7L5V6ZN' where id=7; -update noar tt set v0='2CAMWPI8S0RBBE8ZJDGQT6VS0W8A1C' where id=7; -update noar ti set v0='2CAMWPI8S0RBBE8ZJDGQT6VS0W8A1C' where id=7; -update noar tt set b2='AWAH' where id=7; -update noar ti set b2='AWAH' where id=7; -update noar tt set v0='BV6XAGWTXN5ITRI40AZ371G4KE' where id=8; -update noar ti set v0='BV6XAGWTXN5ITRI40AZ371G4KE' where id=8; -update noar tt set b0='I5ZXYVERHZ' where id=8; -update noar ti set b0='I5ZXYVERHZ' where id=8; -update noar tt set v0='S2VEAZ855XWA' where id=8; -update noar ti set v0='S2VEAZ855XWA' where id=8; -update noar tt set b1='8X7EWHZ0' where id=8; -update noar ti set b1='8X7EWHZ0' where id=8; -update noar tt set v0='4JPJ2CSDDEKUUEB1USG7YFIW7' where id=8; -update noar ti set v0='4JPJ2CSDDEKUUEB1USG7YFIW7' where id=8; -update noar tt set b2='DII' where id=8; -update noar ti set b2='DII' where id=8; -update noar tt set v0='5A75G60KPYCWOOIPVYX53PYYBI' where id=9; -update noar ti set v0='5A75G60KPYCWOOIPVYX53PYYBI' where id=9; -update noar tt set b0='Z3U12JGTDJOGDUVR0T4WO7BL8K8TTOP' where id=9; -update noar ti set b0='Z3U12JGTDJOGDUVR0T4WO7BL8K8TTOP' where id=9; -update noar tt set v0='EBF0CHA3W1A8Z2QTSQZUPZM5WV' where id=9; -update noar ti set v0='EBF0CHA3W1A8Z2QTSQZUPZM5WV' where id=9; -update noar tt set b1='NPF3SKH' where id=9; -update noar ti set b1='NPF3SKH' where id=9; -update noar tt set v0='DJ51X5O799KN1EDNT4' where id=9; -update noar ti set v0='DJ51X5O799KN1EDNT4' where id=9; -update noar tt set b2='H83LWYFZOFYE93FTIE' where id=9; -update noar ti set b2='H83LWYFZOFYE93FTIE' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 longblob null, -b1 longblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='L216J66DXUFDB6' where id=1; -update noar ti set v0='L216J66DXUFDB6' where id=1; -update noar tt set b0='3JNUGSHGGWC31BA5K1EU9I77T4L' where id=1; -update noar ti set b0='3JNUGSHGGWC31BA5K1EU9I77T4L' where id=1; -update noar tt set v0='PPQ9FYR21W6FFX3KU1X4JPPU' where id=1; -update noar ti set v0='PPQ9FYR21W6FFX3KU1X4JPPU' where id=1; -update noar tt set b1='RE4L8HV2585YPI892R' where id=1; -update noar ti set b1='RE4L8HV2585YPI892R' where id=1; -update noar tt set v0='3Z2DRB5P6HHXLRVONQVQ31KU35UMP' where id=1; -update noar ti set v0='3Z2DRB5P6HHXLRVONQVQ31KU35UMP' where id=1; -update noar tt set b2='OXHDY9R2L7IQ5KR5RWF33CGAR29Y' where id=1; -update noar ti set b2='OXHDY9R2L7IQ5KR5RWF33CGAR29Y' where id=1; -update noar tt set v0='RM9ZO9IFY4E' where id=2; -update noar ti set v0='RM9ZO9IFY4E' where id=2; -update noar tt set b0='JTPNEJ' where id=2; -update noar ti set b0='JTPNEJ' where id=2; -update noar tt set v0='I2N3XAFX5W8CVQ' where id=2; -update noar ti set v0='I2N3XAFX5W8CVQ' where id=2; -update noar tt set b1='Z2EBTZN3I9VYPWJO03' where id=2; -update noar ti set b1='Z2EBTZN3I9VYPWJO03' where id=2; -update noar tt set v0='5T7RB44ZHU4I89UF' where id=2; -update noar ti set v0='5T7RB44ZHU4I89UF' where id=2; -update noar tt set b2='D82GI1XWTUV4VI' where id=2; -update noar ti set b2='D82GI1XWTUV4VI' where id=2; -update noar tt set v0='WV27QB711I60AJO' where id=3; -update noar ti set v0='WV27QB711I60AJO' where id=3; -update noar tt set b0='7CZY1W6K' where id=3; -update noar ti set b0='7CZY1W6K' where id=3; -update noar tt set v0='82AMGMC' where id=3; -update noar ti set v0='82AMGMC' where id=3; -update noar tt set b1='JUT92YANW4G4QUPJ6' where id=3; -update noar ti set b1='JUT92YANW4G4QUPJ6' where id=3; -update noar tt set v0='55UNJDOWWEIL7VV' where id=3; -update noar ti set v0='55UNJDOWWEIL7VV' where id=3; -update noar tt set b2='0UW9' where id=3; -update noar ti set b2='0UW9' where id=3; -update noar tt set v0='BB75FMHPUEPO' where id=4; -update noar ti set v0='BB75FMHPUEPO' where id=4; -update noar tt set b0='K3BQ360V2A526TWDYD' where id=4; -update noar ti set b0='K3BQ360V2A526TWDYD' where id=4; -update noar tt set v0='6J8N' where id=4; -update noar ti set v0='6J8N' where id=4; -update noar tt set b1='AMU5' where id=4; -update noar ti set b1='AMU5' where id=4; -update noar tt set v0='B27R' where id=4; -update noar ti set v0='B27R' where id=4; -update noar tt set b2='O' where id=4; -update noar ti set b2='O' where id=4; -update noar tt set v0='31' where id=5; -update noar ti set v0='31' where id=5; -update noar tt set b0='KDDL7JOZVMSPAUA7BOR' where id=5; -update noar ti set b0='KDDL7JOZVMSPAUA7BOR' where id=5; -update noar tt set v0='HV' where id=5; -update noar ti set v0='HV' where id=5; -update noar tt set b1='TSG40YRD03OJ63PPU4OF6ZGW87RB' where id=5; -update noar ti set b1='TSG40YRD03OJ63PPU4OF6ZGW87RB' where id=5; -update noar tt set v0='UV' where id=5; -update noar ti set v0='UV' where id=5; -update noar tt set b2='49O' where id=5; -update noar ti set b2='49O' where id=5; -update noar tt set v0='G0UGH40M3BR89' where id=6; -update noar ti set v0='G0UGH40M3BR89' where id=6; -update noar tt set b0='8XRKCLUP' where id=6; -update noar ti set b0='8XRKCLUP' where id=6; -update noar tt set v0='4G08NKNGG56U8C0SNGBK' where id=6; -update noar ti set v0='4G08NKNGG56U8C0SNGBK' where id=6; -update noar tt set b1='U5Q1FGOWIUFTTB1' where id=6; -update noar ti set b1='U5Q1FGOWIUFTTB1' where id=6; -update noar tt set v0='5DXSCQPO2C0DTMTC' where id=6; -update noar ti set v0='5DXSCQPO2C0DTMTC' where id=6; -update noar tt set b2='UW2I29J5X6Y9T2KGY' where id=6; -update noar ti set b2='UW2I29J5X6Y9T2KGY' where id=6; -update noar tt set v0='B5MQYIXBK' where id=7; -update noar ti set v0='B5MQYIXBK' where id=7; -update noar tt set b0='PDD50CBPYGLVREJYRQZKYBOLV2HLX5' where id=7; -update noar ti set b0='PDD50CBPYGLVREJYRQZKYBOLV2HLX5' where id=7; -update noar tt set v0='FZMC' where id=7; -update noar ti set v0='FZMC' where id=7; -update noar tt set b1='H' where id=7; -update noar ti set b1='H' where id=7; -update noar tt set v0='1105F5OL' where id=7; -update noar ti set v0='1105F5OL' where id=7; -update noar tt set b2='8WTAS92G8A1JIOBV8LC9HL' where id=7; -update noar ti set b2='8WTAS92G8A1JIOBV8LC9HL' where id=7; -update noar tt set v0='IKTS1RCAWVE6WAN6AG548' where id=8; -update noar ti set v0='IKTS1RCAWVE6WAN6AG548' where id=8; -update noar tt set b0='F7V79OAO' where id=8; -update noar ti set b0='F7V79OAO' where id=8; -update noar tt set v0='N' where id=8; -update noar ti set v0='N' where id=8; -update noar tt set b1='7AL' where id=8; -update noar ti set b1='7AL' where id=8; -update noar tt set v0='5N' where id=8; -update noar ti set v0='5N' where id=8; -update noar tt set b2='SYMCSRP0MIP' where id=8; -update noar ti set b2='SYMCSRP0MIP' where id=8; -update noar tt set v0='0HOU7X8TI958RM4PEDD9FULXK' where id=9; -update noar ti set v0='0HOU7X8TI958RM4PEDD9FULXK' where id=9; -update noar tt set b0='Q2R324PIM' where id=9; -update noar ti set b0='Q2R324PIM' where id=9; -update noar tt set v0='6VZASL7MA5ZCHVAWDV18' where id=9; -update noar ti set v0='6VZASL7MA5ZCHVAWDV18' where id=9; -update noar tt set b1='1FNS0848JEGELV3YS9IC8E3BR' where id=9; -update noar ti set b1='1FNS0848JEGELV3YS9IC8E3BR' where id=9; -update noar tt set v0='BMJWRDRBCBQF9KT6PCERSX' where id=9; -update noar ti set v0='BMJWRDRBCBQF9KT6PCERSX' where id=9; -update noar tt set b2='KFUEK5STYM94I' where id=9; -update noar ti set b2='KFUEK5STYM94I' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 longblob null, -b1 longblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='2ZJAGF2H06JVV4Y2ZJNQD0GF' where id=1; -update noar ti set v0='2ZJAGF2H06JVV4Y2ZJNQD0GF' where id=1; -update noar tt set b0='7' where id=1; -update noar ti set b0='7' where id=1; -update noar tt set v0='C1MVXJGRTB43I150HUW6D7UFXKB' where id=1; -update noar ti set v0='C1MVXJGRTB43I150HUW6D7UFXKB' where id=1; -update noar tt set b1='E6' where id=1; -update noar ti set b1='E6' where id=1; -update noar tt set v0='XT4IDAUGS53L338TX89' where id=1; -update noar ti set v0='XT4IDAUGS53L338TX89' where id=1; -update noar tt set b2='IUDCY3UHT7Y9W' where id=1; -update noar ti set b2='IUDCY3UHT7Y9W' where id=1; -update noar tt set v0='L88M2' where id=2; -update noar ti set v0='L88M2' where id=2; -update noar tt set b0='BCAWJ80C3Q9BLJUVZTMFD99OZW4C4' where id=2; -update noar ti set b0='BCAWJ80C3Q9BLJUVZTMFD99OZW4C4' where id=2; -update noar tt set v0='MPS' where id=2; -update noar ti set v0='MPS' where id=2; -update noar tt set b1='7N60NEE3MAHIMHIUMWN5WG' where id=2; -update noar ti set b1='7N60NEE3MAHIMHIUMWN5WG' where id=2; -update noar tt set v0='GIZ9GB' where id=2; -update noar ti set v0='GIZ9GB' where id=2; -update noar tt set b2='RVZ' where id=2; -update noar ti set b2='RVZ' where id=2; -update noar tt set v0='L60O11U' where id=3; -update noar ti set v0='L60O11U' where id=3; -update noar tt set b0='KZP4M65M628QHB0RYW' where id=3; -update noar ti set b0='KZP4M65M628QHB0RYW' where id=3; -update noar tt set v0='CUXBJ92HROQOV971UZWU5SVGCG' where id=3; -update noar ti set v0='CUXBJ92HROQOV971UZWU5SVGCG' where id=3; -update noar tt set b1='10VMTK4HEZJAFAEIDBP6U39ZC' where id=3; -update noar ti set b1='10VMTK4HEZJAFAEIDBP6U39ZC' where id=3; -update noar tt set v0='9CNV5JGB3AI85KXEFMFBNURYTS' where id=3; -update noar ti set v0='9CNV5JGB3AI85KXEFMFBNURYTS' where id=3; -update noar tt set b2='684VPUULD43UWPO' where id=3; -update noar ti set b2='684VPUULD43UWPO' where id=3; -update noar tt set v0='UDN8MYPX7XB5XPNDN2PSQV26OJEAEYM' where id=4; -update noar ti set v0='UDN8MYPX7XB5XPNDN2PSQV26OJEAEYM' where id=4; -update noar tt set b0='9WOPXKBQ' where id=4; -update noar ti set b0='9WOPXKBQ' where id=4; -update noar tt set v0='JEN39H2SEXEXNXUG42NMABL1A' where id=4; -update noar ti set v0='JEN39H2SEXEXNXUG42NMABL1A' where id=4; -update noar tt set b1='2UZ1W' where id=4; -update noar ti set b1='2UZ1W' where id=4; -update noar tt set v0='G9ZPRRG5E1TY7F' where id=4; -update noar ti set v0='G9ZPRRG5E1TY7F' where id=4; -update noar tt set b2='FDAH3UGHO' where id=4; -update noar ti set b2='FDAH3UGHO' where id=4; -update noar tt set v0='WOB4FBKF78WUVG9NTW8XFSDWH' where id=5; -update noar ti set v0='WOB4FBKF78WUVG9NTW8XFSDWH' where id=5; -update noar tt set b0='W' where id=5; -update noar ti set b0='W' where id=5; -update noar tt set v0='P6GWJUW3XAL7UZBXVOIS3993' where id=5; -update noar ti set v0='P6GWJUW3XAL7UZBXVOIS3993' where id=5; -update noar tt set b1='KR2NGIJF1MTZ8' where id=5; -update noar ti set b1='KR2NGIJF1MTZ8' where id=5; -update noar tt set v0='WIRUG' where id=5; -update noar ti set v0='WIRUG' where id=5; -update noar tt set b2='HS8W2DE589RPAE250WW' where id=5; -update noar ti set b2='HS8W2DE589RPAE250WW' where id=5; -update noar tt set v0='E39EDBEO9S' where id=6; -update noar ti set v0='E39EDBEO9S' where id=6; -update noar tt set b0='22Z5GXHKLC53NZND1NKM9H0L78K8' where id=6; -update noar ti set b0='22Z5GXHKLC53NZND1NKM9H0L78K8' where id=6; -update noar tt set v0='0IUUGFJO1OVUWJL990DW3HDBX09' where id=6; -update noar ti set v0='0IUUGFJO1OVUWJL990DW3HDBX09' where id=6; -update noar tt set b1='3B2087MV2AY99M7XB1C' where id=6; -update noar ti set b1='3B2087MV2AY99M7XB1C' where id=6; -update noar tt set v0='AB0UC53R' where id=6; -update noar ti set v0='AB0UC53R' where id=6; -update noar tt set b2='QRWUE5CM4F2U' where id=6; -update noar ti set b2='QRWUE5CM4F2U' where id=6; -update noar tt set v0='7YBB0BVQ24OZMZUO7QUD6Z8F3A0KG' where id=7; -update noar ti set v0='7YBB0BVQ24OZMZUO7QUD6Z8F3A0KG' where id=7; -update noar tt set b0='87Y2MYJSYXJ4IF8UGOFFZKMS' where id=7; -update noar ti set b0='87Y2MYJSYXJ4IF8UGOFFZKMS' where id=7; -update noar tt set v0='73LSTH0BXZW36OA6LVJMPKUIWE' where id=7; -update noar ti set v0='73LSTH0BXZW36OA6LVJMPKUIWE' where id=7; -update noar tt set b1='65TPUR989EH09W3O' where id=7; -update noar ti set b1='65TPUR989EH09W3O' where id=7; -update noar tt set v0='G7I6LERBGXSS6BJLP921Q' where id=7; -update noar ti set v0='G7I6LERBGXSS6BJLP921Q' where id=7; -update noar tt set b2='J18GXSZP2GVXBP4ZKLHCYETYWUKN8F6' where id=7; -update noar ti set b2='J18GXSZP2GVXBP4ZKLHCYETYWUKN8F6' where id=7; -update noar tt set v0='9X43MHCEDI8DRYO8H15EZ0GZ6QC2Z2' where id=8; -update noar ti set v0='9X43MHCEDI8DRYO8H15EZ0GZ6QC2Z2' where id=8; -update noar tt set b0='AO' where id=8; -update noar ti set b0='AO' where id=8; -update noar tt set v0='ZJQ5M56YT65VCYZ2JE9YQ4H' where id=8; -update noar ti set v0='ZJQ5M56YT65VCYZ2JE9YQ4H' where id=8; -update noar tt set b1='6RNRART7CFE50XV0RW93NXQ5VBN4V2VO' where id=8; -update noar ti set b1='6RNRART7CFE50XV0RW93NXQ5VBN4V2VO' where id=8; -update noar tt set v0='FTG4DVK1A54X3XZYPEAHV0' where id=8; -update noar ti set v0='FTG4DVK1A54X3XZYPEAHV0' where id=8; -update noar tt set b2='RAWRYFCQQ6HHOXHGP9GKMT2Q' where id=8; -update noar ti set b2='RAWRYFCQQ6HHOXHGP9GKMT2Q' where id=8; -update noar tt set v0='FP7' where id=9; -update noar ti set v0='FP7' where id=9; -update noar tt set b0='ZZB6DKBO' where id=9; -update noar ti set b0='ZZB6DKBO' where id=9; -update noar tt set v0='XWKRYVS' where id=9; -update noar ti set v0='XWKRYVS' where id=9; -update noar tt set b1='IG5805TARFTSG7RNXW0DT5' where id=9; -update noar ti set b1='IG5805TARFTSG7RNXW0DT5' where id=9; -update noar tt set v0='30I4C1L2MDYQOTKLJMG2T3JW' where id=9; -update noar ti set v0='30I4C1L2MDYQOTKLJMG2T3JW' where id=9; -update noar tt set b2='6ZZ3WQVOMUNKSW3QKQ6HV4ELR' where id=9; -update noar ti set b2='6ZZ3WQVOMUNKSW3QKQ6HV4ELR' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 longblob not null, -b1 longblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='NWHSJHAYMED9LHNQZM5P' where id=1; -update noar ti set v0='NWHSJHAYMED9LHNQZM5P' where id=1; -update noar tt set b0='KN2SZIYVYZYJBWGSMD' where id=1; -update noar ti set b0='KN2SZIYVYZYJBWGSMD' where id=1; -update noar tt set v0='X05D' where id=1; -update noar ti set v0='X05D' where id=1; -update noar tt set b1='T4H9PY559DJA88U2CYKJIJL0S4H27YTE' where id=1; -update noar ti set b1='T4H9PY559DJA88U2CYKJIJL0S4H27YTE' where id=1; -update noar tt set v0='KQK7ZE4SN5OH1A9K31YNBOM60EE3' where id=1; -update noar ti set v0='KQK7ZE4SN5OH1A9K31YNBOM60EE3' where id=1; -update noar tt set b2='C791GBP' where id=1; -update noar ti set b2='C791GBP' where id=1; -update noar tt set v0='3' where id=2; -update noar ti set v0='3' where id=2; -update noar tt set b0='09EU3XY68D172BL7MYJ0NO9' where id=2; -update noar ti set b0='09EU3XY68D172BL7MYJ0NO9' where id=2; -update noar tt set v0='N87PW08T2CZAMKKNKX0K5UKI4VQQ' where id=2; -update noar ti set v0='N87PW08T2CZAMKKNKX0K5UKI4VQQ' where id=2; -update noar tt set b1='LUDSRYIBTIKXVKNTP' where id=2; -update noar ti set b1='LUDSRYIBTIKXVKNTP' where id=2; -update noar tt set v0='A2CGYVFWZJKJP601A5G3S' where id=2; -update noar ti set v0='A2CGYVFWZJKJP601A5G3S' where id=2; -update noar tt set b2='3' where id=2; -update noar ti set b2='3' where id=2; -update noar tt set v0='SK7DCQTR6AOV' where id=3; -update noar ti set v0='SK7DCQTR6AOV' where id=3; -update noar tt set b0='TX044FKN6TVMY7Q8Q9C24' where id=3; -update noar ti set b0='TX044FKN6TVMY7Q8Q9C24' where id=3; -update noar tt set v0='3K7Q27B2CX8UC7SXW' where id=3; -update noar ti set v0='3K7Q27B2CX8UC7SXW' where id=3; -update noar tt set b1='LEXADGPDYKORJA' where id=3; -update noar ti set b1='LEXADGPDYKORJA' where id=3; -update noar tt set v0='L9SQ7WJW7MH4LS6CVM6LF8H7UVDQA4KN' where id=3; -update noar ti set v0='L9SQ7WJW7MH4LS6CVM6LF8H7UVDQA4KN' where id=3; -update noar tt set b2='F613SNE0I' where id=3; -update noar ti set b2='F613SNE0I' where id=3; -update noar tt set v0='4PYXQ382NKFQ0IK4P302NZ0' where id=4; -update noar ti set v0='4PYXQ382NKFQ0IK4P302NZ0' where id=4; -update noar tt set b0='B66OJJ44SST1SYVD38P' where id=4; -update noar ti set b0='B66OJJ44SST1SYVD38P' where id=4; -update noar tt set v0='6OXVVQAPA6' where id=4; -update noar ti set v0='6OXVVQAPA6' where id=4; -update noar tt set b1='L4T43M8L3' where id=4; -update noar ti set b1='L4T43M8L3' where id=4; -update noar tt set v0='UBZIT7HDIA783R8O2' where id=4; -update noar ti set v0='UBZIT7HDIA783R8O2' where id=4; -update noar tt set b2='NEQN3Z5MWI4ZPX8NL' where id=4; -update noar ti set b2='NEQN3Z5MWI4ZPX8NL' where id=4; -update noar tt set v0='HZ2SH0JQ11CMBGBGRPLJH01ZQNKGO2PT' where id=5; -update noar ti set v0='HZ2SH0JQ11CMBGBGRPLJH01ZQNKGO2PT' where id=5; -update noar tt set b0='548PXEBUH5Y25MHBGI' where id=5; -update noar ti set b0='548PXEBUH5Y25MHBGI' where id=5; -update noar tt set v0='RO' where id=5; -update noar ti set v0='RO' where id=5; -update noar tt set b1='2YNKHL05H' where id=5; -update noar ti set b1='2YNKHL05H' where id=5; -update noar tt set v0='BR' where id=5; -update noar ti set v0='BR' where id=5; -update noar tt set b2='VOX0H24KGGL9MZ' where id=5; -update noar ti set b2='VOX0H24KGGL9MZ' where id=5; -update noar tt set v0='F0NLNKPVIYFEZE5M0KALUA8TR8BIOR99' where id=6; -update noar ti set v0='F0NLNKPVIYFEZE5M0KALUA8TR8BIOR99' where id=6; -update noar tt set b0='W8I0B94RUSAH2' where id=6; -update noar ti set b0='W8I0B94RUSAH2' where id=6; -update noar tt set v0='6CFG33' where id=6; -update noar ti set v0='6CFG33' where id=6; -update noar tt set b1='2ZZY6U' where id=6; -update noar ti set b1='2ZZY6U' where id=6; -update noar tt set v0='HK08953CN6BQ4JXBK6661PCX' where id=6; -update noar ti set v0='HK08953CN6BQ4JXBK6661PCX' where id=6; -update noar tt set b2='6A3FMJIP78G6HIT7S' where id=6; -update noar ti set b2='6A3FMJIP78G6HIT7S' where id=6; -update noar tt set v0='9DU2GIVO84MYR7ZMZM9ZECGI0004C' where id=7; -update noar ti set v0='9DU2GIVO84MYR7ZMZM9ZECGI0004C' where id=7; -update noar tt set b0='HN3X0NCPFNCK' where id=7; -update noar ti set b0='HN3X0NCPFNCK' where id=7; -update noar tt set v0='P3HQFY31' where id=7; -update noar ti set v0='P3HQFY31' where id=7; -update noar tt set b1='YG4ZQAVR' where id=7; -update noar ti set b1='YG4ZQAVR' where id=7; -update noar tt set v0='C3QIWL4M8B' where id=7; -update noar ti set v0='C3QIWL4M8B' where id=7; -update noar tt set b2='AC11DOLF2RBNEH7B8' where id=7; -update noar ti set b2='AC11DOLF2RBNEH7B8' where id=7; -update noar tt set v0='9OTLAZ1E4' where id=8; -update noar ti set v0='9OTLAZ1E4' where id=8; -update noar tt set b0='SEEP3OE5L7H51BSWX1CAY6D86IMNZH6' where id=8; -update noar ti set b0='SEEP3OE5L7H51BSWX1CAY6D86IMNZH6' where id=8; -update noar tt set v0='FOWT349K24V8D2XVSBJK' where id=8; -update noar ti set v0='FOWT349K24V8D2XVSBJK' where id=8; -update noar tt set b1='KDCLCSSC3Q9OIY' where id=8; -update noar ti set b1='KDCLCSSC3Q9OIY' where id=8; -update noar tt set v0='RWIXT4BUO7XWPRNS7' where id=8; -update noar ti set v0='RWIXT4BUO7XWPRNS7' where id=8; -update noar tt set b2='CDTY7JAHNH16X39V7KKWSYHO3T3' where id=8; -update noar ti set b2='CDTY7JAHNH16X39V7KKWSYHO3T3' where id=8; -update noar tt set v0='J5PW316XFOGK89MAWP4EIN' where id=9; -update noar ti set v0='J5PW316XFOGK89MAWP4EIN' where id=9; -update noar tt set b0='6TEX1PX15LWBXX63' where id=9; -update noar ti set b0='6TEX1PX15LWBXX63' where id=9; -update noar tt set v0='GCD8ELC2BQ10MDG73RC0J' where id=9; -update noar ti set v0='GCD8ELC2BQ10MDG73RC0J' where id=9; -update noar tt set b1='Y4' where id=9; -update noar ti set b1='Y4' where id=9; -update noar tt set v0='ZQBUVKJ9M5Y4B57SO274HY6GTYTSD85' where id=9; -update noar ti set v0='ZQBUVKJ9M5Y4B57SO274HY6GTYTSD85' where id=9; -update noar tt set b2='G8XH9' where id=9; -update noar ti set b2='G8XH9' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 longblob not null, -b1 longblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='N5' where id=1; -update noar ti set v0='N5' where id=1; -update noar tt set b0='UACQC7JU4' where id=1; -update noar ti set b0='UACQC7JU4' where id=1; -update noar tt set v0='VTWW08W3FSXPGF67' where id=1; -update noar ti set v0='VTWW08W3FSXPGF67' where id=1; -update noar tt set b1='4Y5M334SHKRNP8UCFNXZA5WXV2BP0TXO' where id=1; -update noar ti set b1='4Y5M334SHKRNP8UCFNXZA5WXV2BP0TXO' where id=1; -update noar tt set v0='VAQI85KWNE' where id=1; -update noar ti set v0='VAQI85KWNE' where id=1; -update noar tt set b2='5W9KAEJF7HUDI' where id=1; -update noar ti set b2='5W9KAEJF7HUDI' where id=1; -update noar tt set v0='QMONG2VN16NTEGIK47THTB1UPB6O2DV' where id=2; -update noar ti set v0='QMONG2VN16NTEGIK47THTB1UPB6O2DV' where id=2; -update noar tt set b0='818O3SR' where id=2; -update noar ti set b0='818O3SR' where id=2; -update noar tt set v0='HSWIABRQ5ZANTAAMSF46K95' where id=2; -update noar ti set v0='HSWIABRQ5ZANTAAMSF46K95' where id=2; -update noar tt set b1='51ORZ5Q1N88HQG6QDUVEPQUHU6' where id=2; -update noar ti set b1='51ORZ5Q1N88HQG6QDUVEPQUHU6' where id=2; -update noar tt set v0='KSCB2C' where id=2; -update noar ti set v0='KSCB2C' where id=2; -update noar tt set b2='W6JXJ' where id=2; -update noar ti set b2='W6JXJ' where id=2; -update noar tt set v0='2A00RJM681W' where id=3; -update noar ti set v0='2A00RJM681W' where id=3; -update noar tt set b0='F1FTH2B' where id=3; -update noar ti set b0='F1FTH2B' where id=3; -update noar tt set v0='V92V83KO0EKHDIWMGBBT0GVHUHSUYIT' where id=3; -update noar ti set v0='V92V83KO0EKHDIWMGBBT0GVHUHSUYIT' where id=3; -update noar tt set b1='D07MLGVC9KFM0RDYHA47IOCVYT2HC' where id=3; -update noar ti set b1='D07MLGVC9KFM0RDYHA47IOCVYT2HC' where id=3; -update noar tt set v0='88MY32OLBEWMMJ' where id=3; -update noar ti set v0='88MY32OLBEWMMJ' where id=3; -update noar tt set b2='T6W69XOCEUGTT96R7E027DIG9F99ZEZO' where id=3; -update noar ti set b2='T6W69XOCEUGTT96R7E027DIG9F99ZEZO' where id=3; -update noar tt set v0='PP5K' where id=4; -update noar ti set v0='PP5K' where id=4; -update noar tt set b0='JSIPCVIE9QHW0GFAGKOU7P0EOTI4' where id=4; -update noar ti set b0='JSIPCVIE9QHW0GFAGKOU7P0EOTI4' where id=4; -update noar tt set v0='HEJOOGM7Q59' where id=4; -update noar ti set v0='HEJOOGM7Q59' where id=4; -update noar tt set b1='SZYPUTDYAG0' where id=4; -update noar ti set b1='SZYPUTDYAG0' where id=4; -update noar tt set v0='OMHECUO0EOE85KKCXMRM48OV7YNWIZRC' where id=4; -update noar ti set v0='OMHECUO0EOE85KKCXMRM48OV7YNWIZRC' where id=4; -update noar tt set b2='W' where id=4; -update noar ti set b2='W' where id=4; -update noar tt set v0='IN09HARX2UCX' where id=5; -update noar ti set v0='IN09HARX2UCX' where id=5; -update noar tt set b0='UK3NY' where id=5; -update noar ti set b0='UK3NY' where id=5; -update noar tt set v0='5L76ER4RDH4LMWHUX9UG7F9FQEIL8VH7' where id=5; -update noar ti set v0='5L76ER4RDH4LMWHUX9UG7F9FQEIL8VH7' where id=5; -update noar tt set b1='VSCKGHWELK9B' where id=5; -update noar ti set b1='VSCKGHWELK9B' where id=5; -update noar tt set v0='O7G6KMB0HTH3ZIRPJN174TOHFTBU7C' where id=5; -update noar ti set v0='O7G6KMB0HTH3ZIRPJN174TOHFTBU7C' where id=5; -update noar tt set b2='8WK9K7QHO0V27OVD0JXBF9U8QFTF' where id=5; -update noar ti set b2='8WK9K7QHO0V27OVD0JXBF9U8QFTF' where id=5; -update noar tt set v0='E3JXX1DOQDJPP' where id=6; -update noar ti set v0='E3JXX1DOQDJPP' where id=6; -update noar tt set b0='TWK' where id=6; -update noar ti set b0='TWK' where id=6; -update noar tt set v0='BQDVLKNRA561W3EIXM' where id=6; -update noar ti set v0='BQDVLKNRA561W3EIXM' where id=6; -update noar tt set b1='5SNUNB0O20LA4WF' where id=6; -update noar ti set b1='5SNUNB0O20LA4WF' where id=6; -update noar tt set v0='37M8XS1TDWOB' where id=6; -update noar ti set v0='37M8XS1TDWOB' where id=6; -update noar tt set b2='LOI6J8' where id=6; -update noar ti set b2='LOI6J8' where id=6; -update noar tt set v0='1J0Y7IJI65BN57OYBP7YBV2CRZN7P' where id=7; -update noar ti set v0='1J0Y7IJI65BN57OYBP7YBV2CRZN7P' where id=7; -update noar tt set b0='0J' where id=7; -update noar ti set b0='0J' where id=7; -update noar tt set v0='15CWG' where id=7; -update noar ti set v0='15CWG' where id=7; -update noar tt set b1='RZFMNIP5WFQ8YGGWFXEWERKDLJ378Q' where id=7; -update noar ti set b1='RZFMNIP5WFQ8YGGWFXEWERKDLJ378Q' where id=7; -update noar tt set v0='BXI2E2KVHU' where id=7; -update noar ti set v0='BXI2E2KVHU' where id=7; -update noar tt set b2='O4DUFHMCA01GEEXQME8ZCW16W421Z4' where id=7; -update noar ti set b2='O4DUFHMCA01GEEXQME8ZCW16W421Z4' where id=7; -update noar tt set v0='BWAI9MJSI7WAJ2YW5QO9397' where id=8; -update noar ti set v0='BWAI9MJSI7WAJ2YW5QO9397' where id=8; -update noar tt set b0='C46PVNIB879PVL5R5F' where id=8; -update noar ti set b0='C46PVNIB879PVL5R5F' where id=8; -update noar tt set v0='QAMIV53TCM3KAVSE' where id=8; -update noar ti set v0='QAMIV53TCM3KAVSE' where id=8; -update noar tt set b1='I1VDETXQGK2XHPG' where id=8; -update noar ti set b1='I1VDETXQGK2XHPG' where id=8; -update noar tt set v0='4CI8WKXD5BK5GI5IH5' where id=8; -update noar ti set v0='4CI8WKXD5BK5GI5IH5' where id=8; -update noar tt set b2='5' where id=8; -update noar ti set b2='5' where id=8; -update noar tt set v0='Z3IUV7VVDH' where id=9; -update noar ti set v0='Z3IUV7VVDH' where id=9; -update noar tt set b0='OI1HI6WQTHBRBA6927K4Y1NBLZ2VP' where id=9; -update noar ti set b0='OI1HI6WQTHBRBA6927K4Y1NBLZ2VP' where id=9; -update noar tt set v0='VXBAMU5ZW2O76ZC1UKPSG5VYEYV3P' where id=9; -update noar ti set v0='VXBAMU5ZW2O76ZC1UKPSG5VYEYV3P' where id=9; -update noar tt set b1='9JCMIUTJ3HAUNB71QJ4J0DY55CEU8H' where id=9; -update noar ti set b1='9JCMIUTJ3HAUNB71QJ4J0DY55CEU8H' where id=9; -update noar tt set v0='RGRU01F9JDGFSN8WKTC4' where id=9; -update noar ti set v0='RGRU01F9JDGFSN8WKTC4' where id=9; -update noar tt set b2='7HY0TERWCQR4QESCHT2Z' where id=9; -update noar ti set b2='7HY0TERWCQR4QESCHT2Z' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -b0 longblob null, -b1 longblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='MX92BBA4SWVEMS06OJ' where id=1; -update noar ti set v0='MX92BBA4SWVEMS06OJ' where id=1; -update noar tt set b0='0RLF6RTR6WJESAEBLQPL8VEKKA7W6' where id=1; -update noar ti set b0='0RLF6RTR6WJESAEBLQPL8VEKKA7W6' where id=1; -update noar tt set v0='DVIQ' where id=1; -update noar ti set v0='DVIQ' where id=1; -update noar tt set b1='9EIU2WQMV9264VQH8Q8XIKZS5G' where id=1; -update noar ti set b1='9EIU2WQMV9264VQH8Q8XIKZS5G' where id=1; -update noar tt set v0='XF8VP0DLO1D01LQG' where id=1; -update noar ti set v0='XF8VP0DLO1D01LQG' where id=1; -update noar tt set b2='NKSHQML7FD9G6YGRZDC340AZE9X' where id=1; -update noar ti set b2='NKSHQML7FD9G6YGRZDC340AZE9X' where id=1; -update noar tt set v0='4AZHEXI9YIXWIRX1EDG8H' where id=2; -update noar ti set v0='4AZHEXI9YIXWIRX1EDG8H' where id=2; -update noar tt set b0='UB7CL95OH' where id=2; -update noar ti set b0='UB7CL95OH' where id=2; -update noar tt set v0='IUTX9H' where id=2; -update noar ti set v0='IUTX9H' where id=2; -update noar tt set b1='H70055R7WQ0UQT8MB9JHAPWLCRCV9' where id=2; -update noar ti set b1='H70055R7WQ0UQT8MB9JHAPWLCRCV9' where id=2; -update noar tt set v0='O49BHR7C5VVNIK4J38P7TF' where id=2; -update noar ti set v0='O49BHR7C5VVNIK4J38P7TF' where id=2; -update noar tt set b2='4IBXZJKZYO6G57A1H1H98' where id=2; -update noar ti set b2='4IBXZJKZYO6G57A1H1H98' where id=2; -update noar tt set v0='HXLLCRHBF6CE2' where id=3; -update noar ti set v0='HXLLCRHBF6CE2' where id=3; -update noar tt set b0='PHOBSYXSBO65X' where id=3; -update noar ti set b0='PHOBSYXSBO65X' where id=3; -update noar tt set v0='S29W7O' where id=3; -update noar ti set v0='S29W7O' where id=3; -update noar tt set b1='42RH1STPLQXLQ8W55IALDLWGI' where id=3; -update noar ti set b1='42RH1STPLQXLQ8W55IALDLWGI' where id=3; -update noar tt set v0='K72W05QTUOI87NJ4W07V2' where id=3; -update noar ti set v0='K72W05QTUOI87NJ4W07V2' where id=3; -update noar tt set b2='AYZ4Q58K4' where id=3; -update noar ti set b2='AYZ4Q58K4' where id=3; -update noar tt set v0='O5334BVU25QPGD3CNBGRB6' where id=4; -update noar ti set v0='O5334BVU25QPGD3CNBGRB6' where id=4; -update noar tt set b0='XNOCJZX9W9KD12398MH3JBBS2HEHT' where id=4; -update noar ti set b0='XNOCJZX9W9KD12398MH3JBBS2HEHT' where id=4; -update noar tt set v0='RAOGVEHESP' where id=4; -update noar ti set v0='RAOGVEHESP' where id=4; -update noar tt set b1='7BPBFE' where id=4; -update noar ti set b1='7BPBFE' where id=4; -update noar tt set v0='ST34364EB61ITQUIVWQ1' where id=4; -update noar ti set v0='ST34364EB61ITQUIVWQ1' where id=4; -update noar tt set b2='1WBII279D476PEH3QXBIK2AIT1YA8JEV' where id=4; -update noar ti set b2='1WBII279D476PEH3QXBIK2AIT1YA8JEV' where id=4; -update noar tt set v0='C6B' where id=5; -update noar ti set v0='C6B' where id=5; -update noar tt set b0='K3ZVOFIRDNLUH' where id=5; -update noar ti set b0='K3ZVOFIRDNLUH' where id=5; -update noar tt set v0='SVVWHXHDFQK' where id=5; -update noar ti set v0='SVVWHXHDFQK' where id=5; -update noar tt set b1='TZMAYB88690X' where id=5; -update noar ti set b1='TZMAYB88690X' where id=5; -update noar tt set v0='RKE34C0GINFZH0JELRN' where id=5; -update noar ti set v0='RKE34C0GINFZH0JELRN' where id=5; -update noar tt set b2='USWVYBNPQDUUINZRO2M0JR47O9FV0R' where id=5; -update noar ti set b2='USWVYBNPQDUUINZRO2M0JR47O9FV0R' where id=5; -update noar tt set v0='3ZDK3LB80V3' where id=6; -update noar ti set v0='3ZDK3LB80V3' where id=6; -update noar tt set b0='PBE5K96QI9R8S253AGP859LDPX' where id=6; -update noar ti set b0='PBE5K96QI9R8S253AGP859LDPX' where id=6; -update noar tt set v0='LVNY6LW8KJV6TI8K0' where id=6; -update noar ti set v0='LVNY6LW8KJV6TI8K0' where id=6; -update noar tt set b1='K2SUD0' where id=6; -update noar ti set b1='K2SUD0' where id=6; -update noar tt set v0='9PUG7' where id=6; -update noar ti set v0='9PUG7' where id=6; -update noar tt set b2='DNXGZ4L9VW0NZL8FNSLV7' where id=6; -update noar ti set b2='DNXGZ4L9VW0NZL8FNSLV7' where id=6; -update noar tt set v0='3AX58WOQR5O2EC' where id=7; -update noar ti set v0='3AX58WOQR5O2EC' where id=7; -update noar tt set b0='Q25H' where id=7; -update noar ti set b0='Q25H' where id=7; -update noar tt set v0='5SBTRDOJT3GEZO4VKSL92' where id=7; -update noar ti set v0='5SBTRDOJT3GEZO4VKSL92' where id=7; -update noar tt set b1='PAXCQIZNBUF30E1MN3D72IYAWZR' where id=7; -update noar ti set b1='PAXCQIZNBUF30E1MN3D72IYAWZR' where id=7; -update noar tt set v0='Z3G' where id=7; -update noar ti set v0='Z3G' where id=7; -update noar tt set b2='W9ZS14BS1JL90650K' where id=7; -update noar ti set b2='W9ZS14BS1JL90650K' where id=7; -update noar tt set v0='SMZMKDLPP' where id=8; -update noar ti set v0='SMZMKDLPP' where id=8; -update noar tt set b0='Y2UMT' where id=8; -update noar ti set b0='Y2UMT' where id=8; -update noar tt set v0='QKD49TOY9CPEE3BKTH3GO8HJP' where id=8; -update noar ti set v0='QKD49TOY9CPEE3BKTH3GO8HJP' where id=8; -update noar tt set b1='0Z02Y32' where id=8; -update noar ti set b1='0Z02Y32' where id=8; -update noar tt set v0='NXN6K' where id=8; -update noar ti set v0='NXN6K' where id=8; -update noar tt set b2='BS5LLYNWC' where id=8; -update noar ti set b2='BS5LLYNWC' where id=8; -update noar tt set v0='SGZZ6KFK3FTOXPEM0G15HTIE1QDI531' where id=9; -update noar ti set v0='SGZZ6KFK3FTOXPEM0G15HTIE1QDI531' where id=9; -update noar tt set b0='OB1FSM9CNOULC17SBF67QR98DY' where id=9; -update noar ti set b0='OB1FSM9CNOULC17SBF67QR98DY' where id=9; -update noar tt set v0='31F9WRL9RQ61DG3D7SYLL0P5M' where id=9; -update noar ti set v0='31F9WRL9RQ61DG3D7SYLL0P5M' where id=9; -update noar tt set b1='1Q' where id=9; -update noar ti set b1='1Q' where id=9; -update noar tt set v0='6I7381BY' where id=9; -update noar ti set v0='6I7381BY' where id=9; -update noar tt set b2='GEMR8SGTHQWEM94WAY' where id=9; -update noar ti set b2='GEMR8SGTHQWEM94WAY' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -b0 longblob null, -b1 longblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='F' where id=1; -update noar ti set v0='F' where id=1; -update noar tt set b0='STPBM' where id=1; -update noar ti set b0='STPBM' where id=1; -update noar tt set v0='WKUAFH2VN70A19A6XCGJDGW6E0B' where id=1; -update noar ti set v0='WKUAFH2VN70A19A6XCGJDGW6E0B' where id=1; -update noar tt set b1='I6IZ6NYUUMSJGJHMASU8WTRS2' where id=1; -update noar ti set b1='I6IZ6NYUUMSJGJHMASU8WTRS2' where id=1; -update noar tt set v0='D4' where id=1; -update noar ti set v0='D4' where id=1; -update noar tt set b2='KKSMN4LJ5Y7' where id=1; -update noar ti set b2='KKSMN4LJ5Y7' where id=1; -update noar tt set v0='I' where id=2; -update noar ti set v0='I' where id=2; -update noar tt set b0='151OFEVGJYQSZV' where id=2; -update noar ti set b0='151OFEVGJYQSZV' where id=2; -update noar tt set v0='GZKNCEWMC65M2FASI1SBUUJ3U8RU' where id=2; -update noar ti set v0='GZKNCEWMC65M2FASI1SBUUJ3U8RU' where id=2; -update noar tt set b1='0UBKOW2N8OKFJ84RBZCXSJEP037JU2' where id=2; -update noar ti set b1='0UBKOW2N8OKFJ84RBZCXSJEP037JU2' where id=2; -update noar tt set v0='Y5JSPAOPBT69B3OQKQGYOW9FQ' where id=2; -update noar ti set v0='Y5JSPAOPBT69B3OQKQGYOW9FQ' where id=2; -update noar tt set b2='FIZ' where id=2; -update noar ti set b2='FIZ' where id=2; -update noar tt set v0='3QU8' where id=3; -update noar ti set v0='3QU8' where id=3; -update noar tt set b0='R0E4HHC7QRPPC8HRL72LB09' where id=3; -update noar ti set b0='R0E4HHC7QRPPC8HRL72LB09' where id=3; -update noar tt set v0='4H' where id=3; -update noar ti set v0='4H' where id=3; -update noar tt set b1='9WWK01AA3Z4ZJ6PIPCMF7VN2YVKX9A6' where id=3; -update noar ti set b1='9WWK01AA3Z4ZJ6PIPCMF7VN2YVKX9A6' where id=3; -update noar tt set v0='M974YVNIZ1NARF5' where id=3; -update noar ti set v0='M974YVNIZ1NARF5' where id=3; -update noar tt set b2='TSGNSFRDYWC3HNIC753D67' where id=3; -update noar ti set b2='TSGNSFRDYWC3HNIC753D67' where id=3; -update noar tt set v0='MWFJUCTEVMHN36' where id=4; -update noar ti set v0='MWFJUCTEVMHN36' where id=4; -update noar tt set b0='56W9O1S1VSC' where id=4; -update noar ti set b0='56W9O1S1VSC' where id=4; -update noar tt set v0='FJKHA776QLMIR0JO2NAH0HWY' where id=4; -update noar ti set v0='FJKHA776QLMIR0JO2NAH0HWY' where id=4; -update noar tt set b1='J14BK0A3SZSWB' where id=4; -update noar ti set b1='J14BK0A3SZSWB' where id=4; -update noar tt set v0='1LBPB50A0NB2XUR6KWICOIIR2AJJLEE' where id=4; -update noar ti set v0='1LBPB50A0NB2XUR6KWICOIIR2AJJLEE' where id=4; -update noar tt set b2='RH6IC3JVTAQ' where id=4; -update noar ti set b2='RH6IC3JVTAQ' where id=4; -update noar tt set v0='DE31UPJUERRX4LFNB' where id=5; -update noar ti set v0='DE31UPJUERRX4LFNB' where id=5; -update noar tt set b0='411XK6UK7VY0U52R' where id=5; -update noar ti set b0='411XK6UK7VY0U52R' where id=5; -update noar tt set v0='73JGLEH067EY4DO' where id=5; -update noar ti set v0='73JGLEH067EY4DO' where id=5; -update noar tt set b1='4F3RTNEUT8LCRBS87IGM1T4QKHZ0UTD' where id=5; -update noar ti set b1='4F3RTNEUT8LCRBS87IGM1T4QKHZ0UTD' where id=5; -update noar tt set v0='KZCD3' where id=5; -update noar ti set v0='KZCD3' where id=5; -update noar tt set b2='ZV980JBFL7EMUZAJ6PVWSWE' where id=5; -update noar ti set b2='ZV980JBFL7EMUZAJ6PVWSWE' where id=5; -update noar tt set v0='DRDS9ZRMLQ4CDNGA5D09VQ' where id=6; -update noar ti set v0='DRDS9ZRMLQ4CDNGA5D09VQ' where id=6; -update noar tt set b0='T1PW5KLZE5N139R32MYD1TUASSI5' where id=6; -update noar ti set b0='T1PW5KLZE5N139R32MYD1TUASSI5' where id=6; -update noar tt set v0='QRWJHN' where id=6; -update noar ti set v0='QRWJHN' where id=6; -update noar tt set b1='BW683SLS2S6Z' where id=6; -update noar ti set b1='BW683SLS2S6Z' where id=6; -update noar tt set v0='WCXLHZBF8MKMWGATZ21' where id=6; -update noar ti set v0='WCXLHZBF8MKMWGATZ21' where id=6; -update noar tt set b2='RN4EG9A5MYLVX9YN13974R6KZ4J' where id=6; -update noar ti set b2='RN4EG9A5MYLVX9YN13974R6KZ4J' where id=6; -update noar tt set v0='K59ND6QPLAKDI418271' where id=7; -update noar ti set v0='K59ND6QPLAKDI418271' where id=7; -update noar tt set b0='UZ51TYKC23KH5YXD80' where id=7; -update noar ti set b0='UZ51TYKC23KH5YXD80' where id=7; -update noar tt set v0='T0AU7VSJLNVDS3BWJGYQ5NEUCHILJI1P' where id=7; -update noar ti set v0='T0AU7VSJLNVDS3BWJGYQ5NEUCHILJI1P' where id=7; -update noar tt set b1='N9GT3P7L3TS0' where id=7; -update noar ti set b1='N9GT3P7L3TS0' where id=7; -update noar tt set v0='1VWA3ND4TOW14JSWMHGA224AC7E1' where id=7; -update noar ti set v0='1VWA3ND4TOW14JSWMHGA224AC7E1' where id=7; -update noar tt set b2='FWLJ' where id=7; -update noar ti set b2='FWLJ' where id=7; -update noar tt set v0='1ECCPUL88LHV' where id=8; -update noar ti set v0='1ECCPUL88LHV' where id=8; -update noar tt set b0='Z8P05XW7NC' where id=8; -update noar ti set b0='Z8P05XW7NC' where id=8; -update noar tt set v0='YIHBO4PX0052N3ZZEJS8S95R1' where id=8; -update noar ti set v0='YIHBO4PX0052N3ZZEJS8S95R1' where id=8; -update noar tt set b1='S22VABMYDBGJJARTGCWVZGE' where id=8; -update noar ti set b1='S22VABMYDBGJJARTGCWVZGE' where id=8; -update noar tt set v0='04629RAXTQHBBB1JKKJAJ6M52U' where id=8; -update noar ti set v0='04629RAXTQHBBB1JKKJAJ6M52U' where id=8; -update noar tt set b2='907GRRVU33HRB5NFM4UVWCT9CWR9B4' where id=8; -update noar ti set b2='907GRRVU33HRB5NFM4UVWCT9CWR9B4' where id=8; -update noar tt set v0='MHIPLD3' where id=9; -update noar ti set v0='MHIPLD3' where id=9; -update noar tt set b0='O50M3AOG3O' where id=9; -update noar ti set b0='O50M3AOG3O' where id=9; -update noar tt set v0='TLRY7B9YFU' where id=9; -update noar ti set v0='TLRY7B9YFU' where id=9; -update noar tt set b1='N03VLWD4UT' where id=9; -update noar ti set b1='N03VLWD4UT' where id=9; -update noar tt set v0='CDLZYEK3J76E69KKG6CX3W7PM6MY' where id=9; -update noar ti set v0='CDLZYEK3J76E69KKG6CX3W7PM6MY' where id=9; -update noar tt set b2='3DGWJD3MF' where id=9; -update noar ti set b2='3DGWJD3MF' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -b0 longblob not null, -b1 longblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='QXCYXIY9HEXZU0X0QW3ZF9V' where id=1; -update noar ti set v0='QXCYXIY9HEXZU0X0QW3ZF9V' where id=1; -update noar tt set b0='GMGK1CXTZ3V4GYUC2M9B91SK91BXLAX' where id=1; -update noar ti set b0='GMGK1CXTZ3V4GYUC2M9B91SK91BXLAX' where id=1; -update noar tt set v0='WAL' where id=1; -update noar ti set v0='WAL' where id=1; -update noar tt set b1='WVRXP5ON76J0FA2ODUFBMOGT6TU2MVBA' where id=1; -update noar ti set b1='WVRXP5ON76J0FA2ODUFBMOGT6TU2MVBA' where id=1; -update noar tt set v0='OUC85N24CR51NG4FNI1VQIEO76QQ1' where id=1; -update noar ti set v0='OUC85N24CR51NG4FNI1VQIEO76QQ1' where id=1; -update noar tt set b2='71RBGJJWLWAMUCYAB7VLG9S' where id=1; -update noar ti set b2='71RBGJJWLWAMUCYAB7VLG9S' where id=1; -update noar tt set v0='4RYEJGWGQHTIYCFBOK' where id=2; -update noar ti set v0='4RYEJGWGQHTIYCFBOK' where id=2; -update noar tt set b0='1HQV9KK28B2T1N24DH' where id=2; -update noar ti set b0='1HQV9KK28B2T1N24DH' where id=2; -update noar tt set v0='NIC3YMFDOHN' where id=2; -update noar ti set v0='NIC3YMFDOHN' where id=2; -update noar tt set b1='NSNUD3W7SODCJ9CSNG9ETAVJLIGPATU' where id=2; -update noar ti set b1='NSNUD3W7SODCJ9CSNG9ETAVJLIGPATU' where id=2; -update noar tt set v0='NRJCC8YIH81MI0G0JC7JTP3EMI' where id=2; -update noar ti set v0='NRJCC8YIH81MI0G0JC7JTP3EMI' where id=2; -update noar tt set b2='FN9' where id=2; -update noar ti set b2='FN9' where id=2; -update noar tt set v0='7ASEMW7' where id=3; -update noar ti set v0='7ASEMW7' where id=3; -update noar tt set b0='DN9RET9G7U99TOZ2RK43DN1G2LAPF' where id=3; -update noar ti set b0='DN9RET9G7U99TOZ2RK43DN1G2LAPF' where id=3; -update noar tt set v0='TAKI6KBV7' where id=3; -update noar ti set v0='TAKI6KBV7' where id=3; -update noar tt set b1='LT4JUNN3QAAV0L' where id=3; -update noar ti set b1='LT4JUNN3QAAV0L' where id=3; -update noar tt set v0='MZ36VLY1FYJ' where id=3; -update noar ti set v0='MZ36VLY1FYJ' where id=3; -update noar tt set b2='IMTACLKITMDX7Z' where id=3; -update noar ti set b2='IMTACLKITMDX7Z' where id=3; -update noar tt set v0='CYU' where id=4; -update noar ti set v0='CYU' where id=4; -update noar tt set b0='MNJ1OH9WNFA' where id=4; -update noar ti set b0='MNJ1OH9WNFA' where id=4; -update noar tt set v0='YIANQRDGU' where id=4; -update noar ti set v0='YIANQRDGU' where id=4; -update noar tt set b1='GBKAC8X6' where id=4; -update noar ti set b1='GBKAC8X6' where id=4; -update noar tt set v0='1D8EQJ5O0HB2CTYKHIE8OVY9NUV' where id=4; -update noar ti set v0='1D8EQJ5O0HB2CTYKHIE8OVY9NUV' where id=4; -update noar tt set b2='P8795LZLOR2YQQ4A3R19A4UO' where id=4; -update noar ti set b2='P8795LZLOR2YQQ4A3R19A4UO' where id=4; -update noar tt set v0='S6AYAN3YW7ZVLRPKK2N' where id=5; -update noar ti set v0='S6AYAN3YW7ZVLRPKK2N' where id=5; -update noar tt set b0='V8NNC1J57FXEJ' where id=5; -update noar ti set b0='V8NNC1J57FXEJ' where id=5; -update noar tt set v0='5YMAYSLLDSJGAN' where id=5; -update noar ti set v0='5YMAYSLLDSJGAN' where id=5; -update noar tt set b1='YQQZRJANDXENUR8KDZ1PUGBRONI71WS' where id=5; -update noar ti set b1='YQQZRJANDXENUR8KDZ1PUGBRONI71WS' where id=5; -update noar tt set v0='9ZHPLXAG6YUMIZL78OQWLZ035' where id=5; -update noar ti set v0='9ZHPLXAG6YUMIZL78OQWLZ035' where id=5; -update noar tt set b2='3' where id=5; -update noar ti set b2='3' where id=5; -update noar tt set v0='9CRW0R8PX92Z8EAW' where id=6; -update noar ti set v0='9CRW0R8PX92Z8EAW' where id=6; -update noar tt set b0='TICEQQ2TGM7L30' where id=6; -update noar ti set b0='TICEQQ2TGM7L30' where id=6; -update noar tt set v0='NA5GS1VIGH3CS37GOKHAVDLF8L387Q' where id=6; -update noar ti set v0='NA5GS1VIGH3CS37GOKHAVDLF8L387Q' where id=6; -update noar tt set b1='BX9DBOL' where id=6; -update noar ti set b1='BX9DBOL' where id=6; -update noar tt set v0='GY0Z8U89TVQ6PUKWY' where id=6; -update noar ti set v0='GY0Z8U89TVQ6PUKWY' where id=6; -update noar tt set b2='GTTXDBDPDGTPIMMS74EFR9DC2' where id=6; -update noar ti set b2='GTTXDBDPDGTPIMMS74EFR9DC2' where id=6; -update noar tt set v0='OHVPKG299C5RH1NM5G8UE' where id=7; -update noar ti set v0='OHVPKG299C5RH1NM5G8UE' where id=7; -update noar tt set b0='FXQAZ8UXV4KGEAMIBRATIGEZ0VXVGEFA' where id=7; -update noar ti set b0='FXQAZ8UXV4KGEAMIBRATIGEZ0VXVGEFA' where id=7; -update noar tt set v0='2L2WBE3H1RBX5FI9IW1NRM3' where id=7; -update noar ti set v0='2L2WBE3H1RBX5FI9IW1NRM3' where id=7; -update noar tt set b1='JOX4OPR4C59SQLMDBS3I' where id=7; -update noar ti set b1='JOX4OPR4C59SQLMDBS3I' where id=7; -update noar tt set v0='8XWQ831085PJYNHZYOU3V' where id=7; -update noar ti set v0='8XWQ831085PJYNHZYOU3V' where id=7; -update noar tt set b2='XNNNALCPSYOESMQQ829NAVV0AN75Y6' where id=7; -update noar ti set b2='XNNNALCPSYOESMQQ829NAVV0AN75Y6' where id=7; -update noar tt set v0='E1BPSL2J9I6VE3XYLKSLLPUVQRPV7BX' where id=8; -update noar ti set v0='E1BPSL2J9I6VE3XYLKSLLPUVQRPV7BX' where id=8; -update noar tt set b0='ABRW3EZ4S1F3SH0OON4VKW529G' where id=8; -update noar ti set b0='ABRW3EZ4S1F3SH0OON4VKW529G' where id=8; -update noar tt set v0='ULQ8SZWPC5MTBV' where id=8; -update noar ti set v0='ULQ8SZWPC5MTBV' where id=8; -update noar tt set b1='SJ2WCOUMB5NQ8PM7X27F446VME4I' where id=8; -update noar ti set b1='SJ2WCOUMB5NQ8PM7X27F446VME4I' where id=8; -update noar tt set v0='2C39Q1T7CI59ZO33T' where id=8; -update noar ti set v0='2C39Q1T7CI59ZO33T' where id=8; -update noar tt set b2='0LODV5VP465' where id=8; -update noar ti set b2='0LODV5VP465' where id=8; -update noar tt set v0='G5COILN' where id=9; -update noar ti set v0='G5COILN' where id=9; -update noar tt set b0='5DGTGB8HEMBC' where id=9; -update noar ti set b0='5DGTGB8HEMBC' where id=9; -update noar tt set v0='1QDBMVO12D8PKNQ3CLAG12ULZ7S4KWJ' where id=9; -update noar ti set v0='1QDBMVO12D8PKNQ3CLAG12ULZ7S4KWJ' where id=9; -update noar tt set b1='PC2FFX8IQRBN' where id=9; -update noar ti set b1='PC2FFX8IQRBN' where id=9; -update noar tt set v0='RLUGBNPPVCIIXAP' where id=9; -update noar ti set v0='RLUGBNPPVCIIXAP' where id=9; -update noar tt set b2='1EF6LTSRFBK2ROBBL' where id=9; -update noar ti set b2='1EF6LTSRFBK2ROBBL' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -b0 longblob not null, -b1 longblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='LEEYUTRS34P' where id=1; -update noar ti set v0='LEEYUTRS34P' where id=1; -update noar tt set b0='M99ECXEP4X9N2CIUQXK31QQB4YMJOY' where id=1; -update noar ti set b0='M99ECXEP4X9N2CIUQXK31QQB4YMJOY' where id=1; -update noar tt set v0='UWUDZUWPEQEPJ22XLK' where id=1; -update noar ti set v0='UWUDZUWPEQEPJ22XLK' where id=1; -update noar tt set b1='LASOLRZDKEI8' where id=1; -update noar ti set b1='LASOLRZDKEI8' where id=1; -update noar tt set v0='T' where id=1; -update noar ti set v0='T' where id=1; -update noar tt set b2='Z8KZLNDQ4JIF0L7P78WA' where id=1; -update noar ti set b2='Z8KZLNDQ4JIF0L7P78WA' where id=1; -update noar tt set v0='2GP6DEJ' where id=2; -update noar ti set v0='2GP6DEJ' where id=2; -update noar tt set b0='H0X864HBR3V1RIEJ9ZBXQAIXC' where id=2; -update noar ti set b0='H0X864HBR3V1RIEJ9ZBXQAIXC' where id=2; -update noar tt set v0='UXN0' where id=2; -update noar ti set v0='UXN0' where id=2; -update noar tt set b1='SRZZVJEVO72JAWSSKOK2K4N2BI5QNIUV' where id=2; -update noar ti set b1='SRZZVJEVO72JAWSSKOK2K4N2BI5QNIUV' where id=2; -update noar tt set v0='WMNT8KVHXSWOXRQP3ICE1BPV8AU8W' where id=2; -update noar ti set v0='WMNT8KVHXSWOXRQP3ICE1BPV8AU8W' where id=2; -update noar tt set b2='3IDATCFXH1N' where id=2; -update noar ti set b2='3IDATCFXH1N' where id=2; -update noar tt set v0='2BLL8H' where id=3; -update noar ti set v0='2BLL8H' where id=3; -update noar tt set b0='8I0MR9O73A3ZU' where id=3; -update noar ti set b0='8I0MR9O73A3ZU' where id=3; -update noar tt set v0='F15MBIWGGJTKWMCL' where id=3; -update noar ti set v0='F15MBIWGGJTKWMCL' where id=3; -update noar tt set b1='10UEU09O9PS' where id=3; -update noar ti set b1='10UEU09O9PS' where id=3; -update noar tt set v0='Y69SGR0281ITJKO1DL' where id=3; -update noar ti set v0='Y69SGR0281ITJKO1DL' where id=3; -update noar tt set b2='P8KRKC81XD0GLF0MB75M66PAUWG6M' where id=3; -update noar ti set b2='P8KRKC81XD0GLF0MB75M66PAUWG6M' where id=3; -update noar tt set v0='V05FVC27AK67P8UF' where id=4; -update noar ti set v0='V05FVC27AK67P8UF' where id=4; -update noar tt set b0='96GOVZJ57YF4P' where id=4; -update noar ti set b0='96GOVZJ57YF4P' where id=4; -update noar tt set v0='PCAOE2SHBW179MA06KJ0JMOAKZE37' where id=4; -update noar ti set v0='PCAOE2SHBW179MA06KJ0JMOAKZE37' where id=4; -update noar tt set b1='QZUMP45P813MCN8XJXJU0MH1QVSGKR' where id=4; -update noar ti set b1='QZUMP45P813MCN8XJXJU0MH1QVSGKR' where id=4; -update noar tt set v0='KSBAC3PHT79Y3S4ONZL' where id=4; -update noar ti set v0='KSBAC3PHT79Y3S4ONZL' where id=4; -update noar tt set b2='RQQ75RL8WSBT80S6LF3HI911P9LS' where id=4; -update noar ti set b2='RQQ75RL8WSBT80S6LF3HI911P9LS' where id=4; -update noar tt set v0='S2JS1Z1W6HHE1R6' where id=5; -update noar ti set v0='S2JS1Z1W6HHE1R6' where id=5; -update noar tt set b0='R63EDI' where id=5; -update noar ti set b0='R63EDI' where id=5; -update noar tt set v0='DRYQ9SZR34TREIFDK6HQ' where id=5; -update noar ti set v0='DRYQ9SZR34TREIFDK6HQ' where id=5; -update noar tt set b1='WITFE0XFLPD7DQ05FRQMTGZTWZ4NYV' where id=5; -update noar ti set b1='WITFE0XFLPD7DQ05FRQMTGZTWZ4NYV' where id=5; -update noar tt set v0='I' where id=5; -update noar ti set v0='I' where id=5; -update noar tt set b2='9918LQ72RYXMO' where id=5; -update noar ti set b2='9918LQ72RYXMO' where id=5; -update noar tt set v0='HJVH8W1MPJY255UPCLAQRNN0M' where id=6; -update noar ti set v0='HJVH8W1MPJY255UPCLAQRNN0M' where id=6; -update noar tt set b0='XBO' where id=6; -update noar ti set b0='XBO' where id=6; -update noar tt set v0='WBSGL7V81QVEIFA7ZEDY6PQBBOG0V' where id=6; -update noar ti set v0='WBSGL7V81QVEIFA7ZEDY6PQBBOG0V' where id=6; -update noar tt set b1='EJAZIX23T' where id=6; -update noar ti set b1='EJAZIX23T' where id=6; -update noar tt set v0='RKS6' where id=6; -update noar ti set v0='RKS6' where id=6; -update noar tt set b2='QJB84V43MSQEEQD2' where id=6; -update noar ti set b2='QJB84V43MSQEEQD2' where id=6; -update noar tt set v0='J5CIGFE6PG3HHF4IR99RP0BQWDRFVN' where id=7; -update noar ti set v0='J5CIGFE6PG3HHF4IR99RP0BQWDRFVN' where id=7; -update noar tt set b0='025DD53DH735IIL0KAUXUU' where id=7; -update noar ti set b0='025DD53DH735IIL0KAUXUU' where id=7; -update noar tt set v0='KT8MERXTHITVZTE5YBC4PODA' where id=7; -update noar ti set v0='KT8MERXTHITVZTE5YBC4PODA' where id=7; -update noar tt set b1='BB' where id=7; -update noar ti set b1='BB' where id=7; -update noar tt set v0='9UJQL' where id=7; -update noar ti set v0='9UJQL' where id=7; -update noar tt set b2='E' where id=7; -update noar ti set b2='E' where id=7; -update noar tt set v0='MA2Q7MR' where id=8; -update noar ti set v0='MA2Q7MR' where id=8; -update noar tt set b0='P3' where id=8; -update noar ti set b0='P3' where id=8; -update noar tt set v0='VR1D8WP5LP7P30IHZ' where id=8; -update noar ti set v0='VR1D8WP5LP7P30IHZ' where id=8; -update noar tt set b1='LTR0HBW1FZZCCXOMR6J' where id=8; -update noar ti set b1='LTR0HBW1FZZCCXOMR6J' where id=8; -update noar tt set v0='SKPAMR51C' where id=8; -update noar ti set v0='SKPAMR51C' where id=8; -update noar tt set b2='U7PX143M1' where id=8; -update noar ti set b2='U7PX143M1' where id=8; -update noar tt set v0='7ET84JN35G0Q9QKLQ5DQSCTPY' where id=9; -update noar ti set v0='7ET84JN35G0Q9QKLQ5DQSCTPY' where id=9; -update noar tt set b0='54NUGHTSUN6B48CWGO' where id=9; -update noar ti set b0='54NUGHTSUN6B48CWGO' where id=9; -update noar tt set v0='R1WINZC46' where id=9; -update noar ti set v0='R1WINZC46' where id=9; -update noar tt set b1='ODRI06CHM5QTDPFM900R6J7JWJ8W' where id=9; -update noar ti set b1='ODRI06CHM5QTDPFM900R6J7JWJ8W' where id=9; -update noar tt set v0='HWOZH897A0BVVRO1CH2OQFR' where id=9; -update noar ti set v0='HWOZH897A0BVVRO1CH2OQFR' where id=9; -update noar tt set b2='L' where id=9; -update noar ti set b2='L' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; diff --git a/mysql-test/suite/tokudb/r/fast_update_blobs_with_varchar.result b/mysql-test/suite/tokudb/r/fast_update_blobs_with_varchar.result index 83d5d4504594..4a963777fc08 100644 --- a/mysql-test/suite/tokudb/r/fast_update_blobs_with_varchar.result +++ b/mysql-test/suite/tokudb/r/fast_update_blobs_with_varchar.result @@ -1,32770 +1 @@ -set default_storage_engine='tokudb'; -drop table if exists t; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 tinyblob null, -b1 tinyblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='OORH' where id=1; -update noar ti set v0='OORH' where id=1; -update noar tt set b0='2KX2' where id=1; -update noar ti set b0='2KX2' where id=1; -update noar tt set v0='QJ541BDOS' where id=1; -update noar ti set v0='QJ541BDOS' where id=1; -update noar tt set b1='BSTHXT0AXOL4NYJD04Q5' where id=1; -update noar ti set b1='BSTHXT0AXOL4NYJD04Q5' where id=1; -update noar tt set v0='F8QUEDSYQ8DZ' where id=1; -update noar ti set v0='F8QUEDSYQ8DZ' where id=1; -update noar tt set b2='3S9CVBPMFLX74Q16XHYC3ZWEV' where id=1; -update noar ti set b2='3S9CVBPMFLX74Q16XHYC3ZWEV' where id=1; -update noar tt set v0='03CCYAYAFDEDMH8K0' where id=2; -update noar ti set v0='03CCYAYAFDEDMH8K0' where id=2; -update noar tt set b0='6MA' where id=2; -update noar ti set b0='6MA' where id=2; -update noar tt set v0='5YXS8WIZG40O9ZKBR65OUT' where id=2; -update noar ti set v0='5YXS8WIZG40O9ZKBR65OUT' where id=2; -update noar tt set b1='KU' where id=2; -update noar ti set b1='KU' where id=2; -update noar tt set v0='WC173JZCT89RZX29' where id=2; -update noar ti set v0='WC173JZCT89RZX29' where id=2; -update noar tt set b2='EM5Y0U95XHX1PO6J5FJ' where id=2; -update noar ti set b2='EM5Y0U95XHX1PO6J5FJ' where id=2; -update noar tt set v0='AA' where id=3; -update noar ti set v0='AA' where id=3; -update noar tt set b0='5B8BYWIMT' where id=3; -update noar ti set b0='5B8BYWIMT' where id=3; -update noar tt set v0='2MS56CLNQ911' where id=3; -update noar ti set v0='2MS56CLNQ911' where id=3; -update noar tt set b1='5KJ1' where id=3; -update noar ti set b1='5KJ1' where id=3; -update noar tt set v0='LMHY0D23Y5BZJKJMO1FPJRFU8CF2' where id=3; -update noar ti set v0='LMHY0D23Y5BZJKJMO1FPJRFU8CF2' where id=3; -update noar tt set b2='204EX0GAWYOAWK7BWVQF' where id=3; -update noar ti set b2='204EX0GAWYOAWK7BWVQF' where id=3; -update noar tt set v0='WNELP' where id=4; -update noar ti set v0='WNELP' where id=4; -update noar tt set b0='LDZD' where id=4; -update noar ti set b0='LDZD' where id=4; -update noar tt set v0='COPYTGCQ3QJC2' where id=4; -update noar ti set v0='COPYTGCQ3QJC2' where id=4; -update noar tt set b1='6YCDENC77R12FSE80VRMQUX' where id=4; -update noar ti set b1='6YCDENC77R12FSE80VRMQUX' where id=4; -update noar tt set v0='DUD' where id=4; -update noar ti set v0='DUD' where id=4; -update noar tt set b2='56CV28UU6QQE1VAK5V' where id=4; -update noar ti set b2='56CV28UU6QQE1VAK5V' where id=4; -update noar tt set v0='5U0QNH8D7R8C' where id=5; -update noar ti set v0='5U0QNH8D7R8C' where id=5; -update noar tt set b0='NQSA' where id=5; -update noar ti set b0='NQSA' where id=5; -update noar tt set v0='XNOQCGHYMCG41MOY9TLSMY6WM100' where id=5; -update noar ti set v0='XNOQCGHYMCG41MOY9TLSMY6WM100' where id=5; -update noar tt set b1='K40KK' where id=5; -update noar ti set b1='K40KK' where id=5; -update noar tt set v0='I51G38X' where id=5; -update noar ti set v0='I51G38X' where id=5; -update noar tt set b2='NMMDK5HT4TQCZ223HJMH' where id=5; -update noar ti set b2='NMMDK5HT4TQCZ223HJMH' where id=5; -update noar tt set v0='YJCHF6KH4H3V0X1US786K5GAH1D1F52' where id=6; -update noar ti set v0='YJCHF6KH4H3V0X1US786K5GAH1D1F52' where id=6; -update noar tt set b0='5N2ULTBPEJO0VTVEDQ30WN68BRX' where id=6; -update noar ti set b0='5N2ULTBPEJO0VTVEDQ30WN68BRX' where id=6; -update noar tt set v0='28TK0FK' where id=6; -update noar ti set v0='28TK0FK' where id=6; -update noar tt set b1='10D4UXSXS0B887F' where id=6; -update noar ti set b1='10D4UXSXS0B887F' where id=6; -update noar tt set v0='56' where id=6; -update noar ti set v0='56' where id=6; -update noar tt set b2='26ZD5DIYVIXLRUH00C65PEC5CT0' where id=6; -update noar ti set b2='26ZD5DIYVIXLRUH00C65PEC5CT0' where id=6; -update noar tt set v0='Y' where id=7; -update noar ti set v0='Y' where id=7; -update noar tt set b0='5GXO' where id=7; -update noar ti set b0='5GXO' where id=7; -update noar tt set v0='VYXHF6O2M9DGW' where id=7; -update noar ti set v0='VYXHF6O2M9DGW' where id=7; -update noar tt set b1='FRZSVRQ7S6T7I5COC5AGJNTU' where id=7; -update noar ti set b1='FRZSVRQ7S6T7I5COC5AGJNTU' where id=7; -update noar tt set v0='UZGDBY7Z678RSL0' where id=7; -update noar ti set v0='UZGDBY7Z678RSL0' where id=7; -update noar tt set b2='1WXPQ46G8OI9JCDDHH' where id=7; -update noar ti set b2='1WXPQ46G8OI9JCDDHH' where id=7; -update noar tt set v0='5L8G' where id=8; -update noar ti set v0='5L8G' where id=8; -update noar tt set b0='BFNWF9KEC2H49UHCFMGV8N17F' where id=8; -update noar ti set b0='BFNWF9KEC2H49UHCFMGV8N17F' where id=8; -update noar tt set v0='1GWHOS2XH171' where id=8; -update noar ti set v0='1GWHOS2XH171' where id=8; -update noar tt set b1='02LXB8DY' where id=8; -update noar ti set b1='02LXB8DY' where id=8; -update noar tt set v0='UOYGGAFZ6R6' where id=8; -update noar ti set v0='UOYGGAFZ6R6' where id=8; -update noar tt set b2='8HE71MWTPS1G4JG9SMQPW5GO' where id=8; -update noar ti set b2='8HE71MWTPS1G4JG9SMQPW5GO' where id=8; -update noar tt set v0='7UCQFA39COG98QHE5H1IA52CM14OGGWO' where id=9; -update noar ti set v0='7UCQFA39COG98QHE5H1IA52CM14OGGWO' where id=9; -update noar tt set b0='TQ3QQBZB4ORD6X2LT9CHNHMLXZ74X8RF' where id=9; -update noar ti set b0='TQ3QQBZB4ORD6X2LT9CHNHMLXZ74X8RF' where id=9; -update noar tt set v0='9I12QSHR245FJ4VJEBXT0EXV58YK' where id=9; -update noar ti set v0='9I12QSHR245FJ4VJEBXT0EXV58YK' where id=9; -update noar tt set b1='6OWZ8BSATIWDL414' where id=9; -update noar ti set b1='6OWZ8BSATIWDL414' where id=9; -update noar tt set v0='NAXC' where id=9; -update noar ti set v0='NAXC' where id=9; -update noar tt set b2='GPS5U' where id=9; -update noar ti set b2='GPS5U' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 tinyblob null, -b1 tinyblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='GUA99YRIEYZU77WX3' where id=1; -update noar ti set v0='GUA99YRIEYZU77WX3' where id=1; -update noar tt set b0='E5Z8VH6HTFIAY13A' where id=1; -update noar ti set b0='E5Z8VH6HTFIAY13A' where id=1; -update noar tt set v0='OQ9KH23SWRX0TJX9GLDWRSQ34SI' where id=1; -update noar ti set v0='OQ9KH23SWRX0TJX9GLDWRSQ34SI' where id=1; -update noar tt set b1='FI1AL700DW9QCM8N4SC1BAN3IV' where id=1; -update noar ti set b1='FI1AL700DW9QCM8N4SC1BAN3IV' where id=1; -update noar tt set v0='KHA1NS5XOLNS7U5IDIYN' where id=1; -update noar ti set v0='KHA1NS5XOLNS7U5IDIYN' where id=1; -update noar tt set b2='CQ9O8NN2I7QRR4P1' where id=1; -update noar ti set b2='CQ9O8NN2I7QRR4P1' where id=1; -update noar tt set v0='E0EQ22N3R4IO598UBGE6BPKC8P8RA' where id=2; -update noar ti set v0='E0EQ22N3R4IO598UBGE6BPKC8P8RA' where id=2; -update noar tt set b0='Z6XMK8B1U' where id=2; -update noar ti set b0='Z6XMK8B1U' where id=2; -update noar tt set v0='D3NQLTNMAVRSZMTZK43ASVXVP' where id=2; -update noar ti set v0='D3NQLTNMAVRSZMTZK43ASVXVP' where id=2; -update noar tt set b1='BM2KNC' where id=2; -update noar ti set b1='BM2KNC' where id=2; -update noar tt set v0='CM0UZPQBB3V268YAQU' where id=2; -update noar ti set v0='CM0UZPQBB3V268YAQU' where id=2; -update noar tt set b2='O4L0L27RH52X' where id=2; -update noar ti set b2='O4L0L27RH52X' where id=2; -update noar tt set v0='S5GDFSYE' where id=3; -update noar ti set v0='S5GDFSYE' where id=3; -update noar tt set b0='I3M3S6CAV84NAZ5' where id=3; -update noar ti set b0='I3M3S6CAV84NAZ5' where id=3; -update noar tt set v0='61240QJW72' where id=3; -update noar ti set v0='61240QJW72' where id=3; -update noar tt set b1='Z2BJ9' where id=3; -update noar ti set b1='Z2BJ9' where id=3; -update noar tt set v0='DH1QO' where id=3; -update noar ti set v0='DH1QO' where id=3; -update noar tt set b2='VCDOV18NW' where id=3; -update noar ti set b2='VCDOV18NW' where id=3; -update noar tt set v0='ICZ07JGBI54A21OWP' where id=4; -update noar ti set v0='ICZ07JGBI54A21OWP' where id=4; -update noar tt set b0='22C9JSV2LTPPHOL' where id=4; -update noar ti set b0='22C9JSV2LTPPHOL' where id=4; -update noar tt set v0='J0HN6ATJ' where id=4; -update noar ti set v0='J0HN6ATJ' where id=4; -update noar tt set b1='V4OV7F' where id=4; -update noar ti set b1='V4OV7F' where id=4; -update noar tt set v0='YEFQZKTI8UPIEEPHQKMJKH' where id=4; -update noar ti set v0='YEFQZKTI8UPIEEPHQKMJKH' where id=4; -update noar tt set b2='Z5N6PXGUU15LZ' where id=4; -update noar ti set b2='Z5N6PXGUU15LZ' where id=4; -update noar tt set v0='Y8SZCFNUK4W33LYH735Y8YOGYTQMU' where id=5; -update noar ti set v0='Y8SZCFNUK4W33LYH735Y8YOGYTQMU' where id=5; -update noar tt set b0='BUIVHMNWP73OS6' where id=5; -update noar ti set b0='BUIVHMNWP73OS6' where id=5; -update noar tt set v0='Q7ZZN2EG00YC' where id=5; -update noar ti set v0='Q7ZZN2EG00YC' where id=5; -update noar tt set b1='JE7X8PXFPKYCQ7JJ10K4EZO4SZ4D0J4Q' where id=5; -update noar ti set b1='JE7X8PXFPKYCQ7JJ10K4EZO4SZ4D0J4Q' where id=5; -update noar tt set v0='CP440F' where id=5; -update noar ti set v0='CP440F' where id=5; -update noar tt set b2='MN5GKAV2U8LQ92SNVNPML1B' where id=5; -update noar ti set b2='MN5GKAV2U8LQ92SNVNPML1B' where id=5; -update noar tt set v0='8P4D2473PB' where id=6; -update noar ti set v0='8P4D2473PB' where id=6; -update noar tt set b0='WS8Y' where id=6; -update noar ti set b0='WS8Y' where id=6; -update noar tt set v0='91KF3F45E1XKXDQS4OSMIWEA8IPAN20' where id=6; -update noar ti set v0='91KF3F45E1XKXDQS4OSMIWEA8IPAN20' where id=6; -update noar tt set b1='8' where id=6; -update noar ti set b1='8' where id=6; -update noar tt set v0='26F120T2108GADPHE' where id=6; -update noar ti set v0='26F120T2108GADPHE' where id=6; -update noar tt set b2='JJ' where id=6; -update noar ti set b2='JJ' where id=6; -update noar tt set v0='T' where id=7; -update noar ti set v0='T' where id=7; -update noar tt set b0='5ZTBEX6EBFB' where id=7; -update noar ti set b0='5ZTBEX6EBFB' where id=7; -update noar tt set v0='BUGCY48W5G0050' where id=7; -update noar ti set v0='BUGCY48W5G0050' where id=7; -update noar tt set b1='GGH1E198NDN9WO7TS8CHCGK2O2SJO9Q6' where id=7; -update noar ti set b1='GGH1E198NDN9WO7TS8CHCGK2O2SJO9Q6' where id=7; -update noar tt set v0='YSQAVTQ07AKVLVE' where id=7; -update noar ti set v0='YSQAVTQ07AKVLVE' where id=7; -update noar tt set b2='72Q2J0RGF2RW4YZYNG2RS22N5NSC62' where id=7; -update noar ti set b2='72Q2J0RGF2RW4YZYNG2RS22N5NSC62' where id=7; -update noar tt set v0='72T978DXAG0IB2OXWNMDMB' where id=8; -update noar ti set v0='72T978DXAG0IB2OXWNMDMB' where id=8; -update noar tt set b0='97RM4F4P02YBFNP7IHO2R4Q1Y14' where id=8; -update noar ti set b0='97RM4F4P02YBFNP7IHO2R4Q1Y14' where id=8; -update noar tt set v0='KH5K09RLK3ETRF9VQCG' where id=8; -update noar ti set v0='KH5K09RLK3ETRF9VQCG' where id=8; -update noar tt set b1='TALGG97WNSAMLLWEG8JAL066DJJB' where id=8; -update noar ti set b1='TALGG97WNSAMLLWEG8JAL066DJJB' where id=8; -update noar tt set v0='3FCLFHI2LVSPURWXIY50YEI9XJMYS' where id=8; -update noar ti set v0='3FCLFHI2LVSPURWXIY50YEI9XJMYS' where id=8; -update noar tt set b2='Y46UAO' where id=8; -update noar ti set b2='Y46UAO' where id=8; -update noar tt set v0='5R' where id=9; -update noar ti set v0='5R' where id=9; -update noar tt set b0='U58' where id=9; -update noar ti set b0='U58' where id=9; -update noar tt set v0='BZI' where id=9; -update noar ti set v0='BZI' where id=9; -update noar tt set b1='ICV44HCMSZBPH74Z0M5KJY0FM' where id=9; -update noar ti set b1='ICV44HCMSZBPH74Z0M5KJY0FM' where id=9; -update noar tt set v0='N17OPAA5V1RM5ZOY5774' where id=9; -update noar ti set v0='N17OPAA5V1RM5ZOY5774' where id=9; -update noar tt set b2='S153ADXJF9QJ918EK43VB15MJ' where id=9; -update noar ti set b2='S153ADXJF9QJ918EK43VB15MJ' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 tinyblob not null, -b1 tinyblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='O' where id=1; -update noar ti set v0='O' where id=1; -update noar tt set b0='7WFINTFU68KC2MI' where id=1; -update noar ti set b0='7WFINTFU68KC2MI' where id=1; -update noar tt set v0='8Y6G1RMEG6MAUAQNBJVL6B7E54ML472H' where id=1; -update noar ti set v0='8Y6G1RMEG6MAUAQNBJVL6B7E54ML472H' where id=1; -update noar tt set b1='XZ67YVD8I7XNHX' where id=1; -update noar ti set b1='XZ67YVD8I7XNHX' where id=1; -update noar tt set v0='PQHHP59FOSOOAOWZDMDR67XP9P' where id=1; -update noar ti set v0='PQHHP59FOSOOAOWZDMDR67XP9P' where id=1; -update noar tt set b2='4CU4BUBGWOLPI9ZN6SX310F8TFEHK2L' where id=1; -update noar ti set b2='4CU4BUBGWOLPI9ZN6SX310F8TFEHK2L' where id=1; -update noar tt set v0='7G6OGU8JP2H61YHFMEHOV' where id=2; -update noar ti set v0='7G6OGU8JP2H61YHFMEHOV' where id=2; -update noar tt set b0='CP3A1L3H045J21O81H93TG' where id=2; -update noar ti set b0='CP3A1L3H045J21O81H93TG' where id=2; -update noar tt set v0='M88M5W0U4NTYSOP7Y0H' where id=2; -update noar ti set v0='M88M5W0U4NTYSOP7Y0H' where id=2; -update noar tt set b1='F0ZMQ90OIT0EV06WNBGDMTJK44N61THT' where id=2; -update noar ti set b1='F0ZMQ90OIT0EV06WNBGDMTJK44N61THT' where id=2; -update noar tt set v0='X75D7JD7ORSLI3XDQG1O' where id=2; -update noar ti set v0='X75D7JD7ORSLI3XDQG1O' where id=2; -update noar tt set b2='BGH26K278X3TQ22RLGBO38' where id=2; -update noar ti set b2='BGH26K278X3TQ22RLGBO38' where id=2; -update noar tt set v0='5MUNWJ0ECS9ESFZ3MMNHV' where id=3; -update noar ti set v0='5MUNWJ0ECS9ESFZ3MMNHV' where id=3; -update noar tt set b0='TL5TPPAK2JH352HTP7DFXM8J' where id=3; -update noar ti set b0='TL5TPPAK2JH352HTP7DFXM8J' where id=3; -update noar tt set v0='6A3M46OO64CLJ' where id=3; -update noar ti set v0='6A3M46OO64CLJ' where id=3; -update noar tt set b1='OZKDC7IPLVS1ID5LRXU0QBF1F' where id=3; -update noar ti set b1='OZKDC7IPLVS1ID5LRXU0QBF1F' where id=3; -update noar tt set v0='P034MPJ1F0C32' where id=3; -update noar ti set v0='P034MPJ1F0C32' where id=3; -update noar tt set b2='THQJWHVYZIAZN3T2NLQMA4N4PBHP' where id=3; -update noar ti set b2='THQJWHVYZIAZN3T2NLQMA4N4PBHP' where id=3; -update noar tt set v0='OR5' where id=4; -update noar ti set v0='OR5' where id=4; -update noar tt set b0='6MAD20YSIPY4G6EUTYDJJM6' where id=4; -update noar ti set b0='6MAD20YSIPY4G6EUTYDJJM6' where id=4; -update noar tt set v0='CK6IN48FCJB3OLAK46' where id=4; -update noar ti set v0='CK6IN48FCJB3OLAK46' where id=4; -update noar tt set b1='P6OCTFHT00CGUVSJG' where id=4; -update noar ti set b1='P6OCTFHT00CGUVSJG' where id=4; -update noar tt set v0='319PSGWXCTIYMSW6J2VC5U4HHHBE' where id=4; -update noar ti set v0='319PSGWXCTIYMSW6J2VC5U4HHHBE' where id=4; -update noar tt set b2='20LIQVKLWHQ' where id=4; -update noar ti set b2='20LIQVKLWHQ' where id=4; -update noar tt set v0='T3M9334' where id=5; -update noar ti set v0='T3M9334' where id=5; -update noar tt set b0='RWL2Q8I21' where id=5; -update noar ti set b0='RWL2Q8I21' where id=5; -update noar tt set v0='ZOURSSIAMP9P2' where id=5; -update noar ti set v0='ZOURSSIAMP9P2' where id=5; -update noar tt set b1='1QKM7QT6GUJUJ7' where id=5; -update noar ti set b1='1QKM7QT6GUJUJ7' where id=5; -update noar tt set v0='3KC4WWAE' where id=5; -update noar ti set v0='3KC4WWAE' where id=5; -update noar tt set b2='V83H2F1I010Y9S8QJ5XQKAAHTT' where id=5; -update noar ti set b2='V83H2F1I010Y9S8QJ5XQKAAHTT' where id=5; -update noar tt set v0='2CAH2H' where id=6; -update noar ti set v0='2CAH2H' where id=6; -update noar tt set b0='5KN6P62F8T6KI2QZ0J2G' where id=6; -update noar ti set b0='5KN6P62F8T6KI2QZ0J2G' where id=6; -update noar tt set v0='ZN1' where id=6; -update noar ti set v0='ZN1' where id=6; -update noar tt set b1='TD56FIWOOV9T33QLWNH6CL' where id=6; -update noar ti set b1='TD56FIWOOV9T33QLWNH6CL' where id=6; -update noar tt set v0='NQCYZW0Y2IJMDJ' where id=6; -update noar ti set v0='NQCYZW0Y2IJMDJ' where id=6; -update noar tt set b2='8YZP0L26KWP2KWSVX0I52HOWI21L' where id=6; -update noar ti set b2='8YZP0L26KWP2KWSVX0I52HOWI21L' where id=6; -update noar tt set v0='E5XDB8QDVBSLV3U228M9UGR' where id=7; -update noar ti set v0='E5XDB8QDVBSLV3U228M9UGR' where id=7; -update noar tt set b0='XQIABVXMDJZXAPF0FL2' where id=7; -update noar ti set b0='XQIABVXMDJZXAPF0FL2' where id=7; -update noar tt set v0='J8C31VBSKBX0Z46ZS9' where id=7; -update noar ti set v0='J8C31VBSKBX0Z46ZS9' where id=7; -update noar tt set b1='74PSP6PWHHL2O5EKZ18BSLA2DT6NTJ' where id=7; -update noar ti set b1='74PSP6PWHHL2O5EKZ18BSLA2DT6NTJ' where id=7; -update noar tt set v0='XP9LGI4YYTSN16GCDU2I' where id=7; -update noar ti set v0='XP9LGI4YYTSN16GCDU2I' where id=7; -update noar tt set b2='Q0UFFR16PFW40G2XZER' where id=7; -update noar ti set b2='Q0UFFR16PFW40G2XZER' where id=7; -update noar tt set v0='HTGPFECKCM8ZX3W6AQ02E9W2MGJYT' where id=8; -update noar ti set v0='HTGPFECKCM8ZX3W6AQ02E9W2MGJYT' where id=8; -update noar tt set b0='NOGT7Q2A0E5B9NP3TO' where id=8; -update noar ti set b0='NOGT7Q2A0E5B9NP3TO' where id=8; -update noar tt set v0='4MEA5S' where id=8; -update noar ti set v0='4MEA5S' where id=8; -update noar tt set b1='I' where id=8; -update noar ti set b1='I' where id=8; -update noar tt set v0='HJ44ZUF9VIT0VBLUZM6YX' where id=8; -update noar ti set v0='HJ44ZUF9VIT0VBLUZM6YX' where id=8; -update noar tt set b2='NOWQ33NMX08A3BF39' where id=8; -update noar ti set b2='NOWQ33NMX08A3BF39' where id=8; -update noar tt set v0='SB4VBLPCFKNVIBACVHUNVNTJTWBCVGNG' where id=9; -update noar ti set v0='SB4VBLPCFKNVIBACVHUNVNTJTWBCVGNG' where id=9; -update noar tt set b0='BAVK0O8UVSP5LMZKGU3AROG8' where id=9; -update noar ti set b0='BAVK0O8UVSP5LMZKGU3AROG8' where id=9; -update noar tt set v0='WLH8N0Y2BL1BUBGRTZOACXI5F' where id=9; -update noar ti set v0='WLH8N0Y2BL1BUBGRTZOACXI5F' where id=9; -update noar tt set b1='MITR2S8Z9B99U3U6' where id=9; -update noar ti set b1='MITR2S8Z9B99U3U6' where id=9; -update noar tt set v0='J7OUHRAGA7Q64L9I21VX9U6IERGR' where id=9; -update noar ti set v0='J7OUHRAGA7Q64L9I21VX9U6IERGR' where id=9; -update noar tt set b2='H41K62MYEH7YAJ' where id=9; -update noar ti set b2='H41K62MYEH7YAJ' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 tinyblob not null, -b1 tinyblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='IZN4AE26FMKIAPVY1GBS' where id=1; -update noar ti set v0='IZN4AE26FMKIAPVY1GBS' where id=1; -update noar tt set b0='KQBOIDHT31' where id=1; -update noar ti set b0='KQBOIDHT31' where id=1; -update noar tt set v0='I' where id=1; -update noar ti set v0='I' where id=1; -update noar tt set b1='IJ2HJ4ZQO2OM4TNM3NGK3VCNCPIJ55Z' where id=1; -update noar ti set b1='IJ2HJ4ZQO2OM4TNM3NGK3VCNCPIJ55Z' where id=1; -update noar tt set v0='LUCH9O846MXFZP6P0S1BHGWP' where id=1; -update noar ti set v0='LUCH9O846MXFZP6P0S1BHGWP' where id=1; -update noar tt set b2='YQ9SWF40' where id=1; -update noar ti set b2='YQ9SWF40' where id=1; -update noar tt set v0='22Y' where id=2; -update noar ti set v0='22Y' where id=2; -update noar tt set b0='4PP3R' where id=2; -update noar ti set b0='4PP3R' where id=2; -update noar tt set v0='VKG379CB24BM3Q0HC97TTGL' where id=2; -update noar ti set v0='VKG379CB24BM3Q0HC97TTGL' where id=2; -update noar tt set b1='XWUXQYTY6L0X9FJAJT2MENFGEFK' where id=2; -update noar ti set b1='XWUXQYTY6L0X9FJAJT2MENFGEFK' where id=2; -update noar tt set v0='UA27HBFM2R8KIJ3G8YG' where id=2; -update noar ti set v0='UA27HBFM2R8KIJ3G8YG' where id=2; -update noar tt set b2='AMB061GZYIH1HODBN1AFSU80Q0UPOJV0' where id=2; -update noar ti set b2='AMB061GZYIH1HODBN1AFSU80Q0UPOJV0' where id=2; -update noar tt set v0='A1UCNEXNHL7GAZBWX9MLA' where id=3; -update noar ti set v0='A1UCNEXNHL7GAZBWX9MLA' where id=3; -update noar tt set b0='5IV1SQ2SHJ15TB6KT0' where id=3; -update noar ti set b0='5IV1SQ2SHJ15TB6KT0' where id=3; -update noar tt set v0='1M8FQQ360XV40' where id=3; -update noar ti set v0='1M8FQQ360XV40' where id=3; -update noar tt set b1='2' where id=3; -update noar ti set b1='2' where id=3; -update noar tt set v0='K7SID54GZ9LCSYD5WZHL0' where id=3; -update noar ti set v0='K7SID54GZ9LCSYD5WZHL0' where id=3; -update noar tt set b2='Z1PFTP91MKG7PFQVXGCCPMK8YZ2T' where id=3; -update noar ti set b2='Z1PFTP91MKG7PFQVXGCCPMK8YZ2T' where id=3; -update noar tt set v0='190QA423L6' where id=4; -update noar ti set v0='190QA423L6' where id=4; -update noar tt set b0='0N4L1A6DBECPSCGROA08ALPWW' where id=4; -update noar ti set b0='0N4L1A6DBECPSCGROA08ALPWW' where id=4; -update noar tt set v0='RV8YXGAFFEW' where id=4; -update noar ti set v0='RV8YXGAFFEW' where id=4; -update noar tt set b1='B' where id=4; -update noar ti set b1='B' where id=4; -update noar tt set v0='JWHU540G27P1NE5GK44' where id=4; -update noar ti set v0='JWHU540G27P1NE5GK44' where id=4; -update noar tt set b2='95LW7P' where id=4; -update noar ti set b2='95LW7P' where id=4; -update noar tt set v0='X6W3Y' where id=5; -update noar ti set v0='X6W3Y' where id=5; -update noar tt set b0='KA3PNL7ZZWYI0KST' where id=5; -update noar ti set b0='KA3PNL7ZZWYI0KST' where id=5; -update noar tt set v0='NW752UMNSAT85AG' where id=5; -update noar ti set v0='NW752UMNSAT85AG' where id=5; -update noar tt set b1='6Y6I3I20EWCRC659SW1D8BJHJ7I' where id=5; -update noar ti set b1='6Y6I3I20EWCRC659SW1D8BJHJ7I' where id=5; -update noar tt set v0='WK80P9WHFP8WCXEVJL4VXMMB' where id=5; -update noar ti set v0='WK80P9WHFP8WCXEVJL4VXMMB' where id=5; -update noar tt set b2='FD91QTIIO36J67JV0UUZZPO4V' where id=5; -update noar ti set b2='FD91QTIIO36J67JV0UUZZPO4V' where id=5; -update noar tt set v0='35B8ISOR6POBVG1YENORJ' where id=6; -update noar ti set v0='35B8ISOR6POBVG1YENORJ' where id=6; -update noar tt set b0='M3AV00MT33WE8CMKQU3CH58H02TAN' where id=6; -update noar ti set b0='M3AV00MT33WE8CMKQU3CH58H02TAN' where id=6; -update noar tt set v0='7590AYRMGET4QQ8ACT' where id=6; -update noar ti set v0='7590AYRMGET4QQ8ACT' where id=6; -update noar tt set b1='EEJT7SFNX7M58C3MJ0MT3UHPVHNHZ' where id=6; -update noar ti set b1='EEJT7SFNX7M58C3MJ0MT3UHPVHNHZ' where id=6; -update noar tt set v0='MUFTF428' where id=6; -update noar ti set v0='MUFTF428' where id=6; -update noar tt set b2='U4AQMT3YXHE9Y4AJ' where id=6; -update noar ti set b2='U4AQMT3YXHE9Y4AJ' where id=6; -update noar tt set v0='W' where id=7; -update noar ti set v0='W' where id=7; -update noar tt set b0='K1FE85KDJ5TCJEW2J39AIY' where id=7; -update noar ti set b0='K1FE85KDJ5TCJEW2J39AIY' where id=7; -update noar tt set v0='H0VFZCKKDVRD' where id=7; -update noar ti set v0='H0VFZCKKDVRD' where id=7; -update noar tt set b1='NR927SNJSVLUSEDEOXP6Y42SO6316' where id=7; -update noar ti set b1='NR927SNJSVLUSEDEOXP6Y42SO6316' where id=7; -update noar tt set v0='4HT5CYXGHTO8R682IB7BW8' where id=7; -update noar ti set v0='4HT5CYXGHTO8R682IB7BW8' where id=7; -update noar tt set b2='A4J1U09SB44' where id=7; -update noar ti set b2='A4J1U09SB44' where id=7; -update noar tt set v0='OVP4QJY83KNWG48C4GLQJ' where id=8; -update noar ti set v0='OVP4QJY83KNWG48C4GLQJ' where id=8; -update noar tt set b0='1TUBS' where id=8; -update noar ti set b0='1TUBS' where id=8; -update noar tt set v0='N6LNMNGSDD8G148JQAI2KVO' where id=8; -update noar ti set v0='N6LNMNGSDD8G148JQAI2KVO' where id=8; -update noar tt set b1='98AZS' where id=8; -update noar ti set b1='98AZS' where id=8; -update noar tt set v0='L' where id=8; -update noar ti set v0='L' where id=8; -update noar tt set b2='QZL5PAOLMIJPVLJ6WK75GG0RR2L7K7G' where id=8; -update noar ti set b2='QZL5PAOLMIJPVLJ6WK75GG0RR2L7K7G' where id=8; -update noar tt set v0='TAHWUXACQRHYJY24' where id=9; -update noar ti set v0='TAHWUXACQRHYJY24' where id=9; -update noar tt set b0='LWGVFJMN17C6' where id=9; -update noar ti set b0='LWGVFJMN17C6' where id=9; -update noar tt set v0='F' where id=9; -update noar ti set v0='F' where id=9; -update noar tt set b1='LP59ERAGE2PQNSVMW1QEZAOJ38ZPMDSA' where id=9; -update noar ti set b1='LP59ERAGE2PQNSVMW1QEZAOJ38ZPMDSA' where id=9; -update noar tt set v0='Q40BUM86DC118LJR' where id=9; -update noar ti set v0='Q40BUM86DC118LJR' where id=9; -update noar tt set b2='LUVZODTSZVB6E42SAOJ5ZV9NBSC00S33' where id=9; -update noar ti set b2='LUVZODTSZVB6E42SAOJ5ZV9NBSC00S33' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 tinyblob null, -b1 tinyblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='04ZQCUB6BKE12K' where id=1; -update noar ti set v0='04ZQCUB6BKE12K' where id=1; -update noar tt set b0='HKPCNPZ2S6Z4KYXKA98ZQHH' where id=1; -update noar ti set b0='HKPCNPZ2S6Z4KYXKA98ZQHH' where id=1; -update noar tt set v0='39NL47XA6NTRW' where id=1; -update noar ti set v0='39NL47XA6NTRW' where id=1; -update noar tt set b1='KDZVPTK934BSLJ6FIVNRCKCZ1QZKQI5B' where id=1; -update noar ti set b1='KDZVPTK934BSLJ6FIVNRCKCZ1QZKQI5B' where id=1; -update noar tt set v0='P' where id=1; -update noar ti set v0='P' where id=1; -update noar tt set b2='MH1IJI242DG8ML6GNTCMS1LDRE' where id=1; -update noar ti set b2='MH1IJI242DG8ML6GNTCMS1LDRE' where id=1; -update noar tt set v0='GUCUV3K' where id=2; -update noar ti set v0='GUCUV3K' where id=2; -update noar tt set b0='I0OB2NXIDVOMUFUEWG778RYAV' where id=2; -update noar ti set b0='I0OB2NXIDVOMUFUEWG778RYAV' where id=2; -update noar tt set v0='PE00LJ6ZMZOZGMK31X' where id=2; -update noar ti set v0='PE00LJ6ZMZOZGMK31X' where id=2; -update noar tt set b1='2H8XU7WKA' where id=2; -update noar ti set b1='2H8XU7WKA' where id=2; -update noar tt set v0='4GR2VSOJLWNJW4FL1NHACDKSSX21Z' where id=2; -update noar ti set v0='4GR2VSOJLWNJW4FL1NHACDKSSX21Z' where id=2; -update noar tt set b2='TOXIW3KYIG7DU72EVPQKDOE' where id=2; -update noar ti set b2='TOXIW3KYIG7DU72EVPQKDOE' where id=2; -update noar tt set v0='CP' where id=3; -update noar ti set v0='CP' where id=3; -update noar tt set b0='8YLC8Y7UUPT6U' where id=3; -update noar ti set b0='8YLC8Y7UUPT6U' where id=3; -update noar tt set v0='RUYO' where id=3; -update noar ti set v0='RUYO' where id=3; -update noar tt set b1='AD0MQ9CN5N9HSFIUE66ZBFZY' where id=3; -update noar ti set b1='AD0MQ9CN5N9HSFIUE66ZBFZY' where id=3; -update noar tt set v0='OQSNGFVVXD82ZGP7M8E30EX7JQ' where id=3; -update noar ti set v0='OQSNGFVVXD82ZGP7M8E30EX7JQ' where id=3; -update noar tt set b2='SJ2S157JO18KTYBITPUB' where id=3; -update noar ti set b2='SJ2S157JO18KTYBITPUB' where id=3; -update noar tt set v0='6BSLT8FMWFU55M9CDLE16' where id=4; -update noar ti set v0='6BSLT8FMWFU55M9CDLE16' where id=4; -update noar tt set b0='A6' where id=4; -update noar ti set b0='A6' where id=4; -update noar tt set v0='LX2T4D2HTX6XHUITHB7ZI9OZ' where id=4; -update noar ti set v0='LX2T4D2HTX6XHUITHB7ZI9OZ' where id=4; -update noar tt set b1='LET5Y65TUD3CZHRQ6WEHGRZWMJX9HS' where id=4; -update noar ti set b1='LET5Y65TUD3CZHRQ6WEHGRZWMJX9HS' where id=4; -update noar tt set v0='Z1MTYBNZLJOR50MH84FXT2IMW8S' where id=4; -update noar ti set v0='Z1MTYBNZLJOR50MH84FXT2IMW8S' where id=4; -update noar tt set b2='X1LF7KW4S1DUBYSHED21GWV2V' where id=4; -update noar ti set b2='X1LF7KW4S1DUBYSHED21GWV2V' where id=4; -update noar tt set v0='YYOW1K' where id=5; -update noar ti set v0='YYOW1K' where id=5; -update noar tt set b0='MUM1E0NFLAGCX1IGOGMZ0G2M9' where id=5; -update noar ti set b0='MUM1E0NFLAGCX1IGOGMZ0G2M9' where id=5; -update noar tt set v0='SLRQDJP6NV15BOC1R' where id=5; -update noar ti set v0='SLRQDJP6NV15BOC1R' where id=5; -update noar tt set b1='GG9523OCJK3W7GPTUVVYR71C' where id=5; -update noar ti set b1='GG9523OCJK3W7GPTUVVYR71C' where id=5; -update noar tt set v0='GMY3INN6W8UPADCLXFCSKQFLCHJ85' where id=5; -update noar ti set v0='GMY3INN6W8UPADCLXFCSKQFLCHJ85' where id=5; -update noar tt set b2='4' where id=5; -update noar ti set b2='4' where id=5; -update noar tt set v0='RHPYNI5C95YRMZKI3UGFZLOT6K5L' where id=6; -update noar ti set v0='RHPYNI5C95YRMZKI3UGFZLOT6K5L' where id=6; -update noar tt set b0='R3MU2F0PW007PN' where id=6; -update noar ti set b0='R3MU2F0PW007PN' where id=6; -update noar tt set v0='0B3O4POU0MFYT8' where id=6; -update noar ti set v0='0B3O4POU0MFYT8' where id=6; -update noar tt set b1='MYDNT1DWITK1I' where id=6; -update noar ti set b1='MYDNT1DWITK1I' where id=6; -update noar tt set v0='0IET0IV730CDS3YP' where id=6; -update noar ti set v0='0IET0IV730CDS3YP' where id=6; -update noar tt set b2='ZNMGR3WP78U43W' where id=6; -update noar ti set b2='ZNMGR3WP78U43W' where id=6; -update noar tt set v0='9K4M9YJ21B3H9L28I' where id=7; -update noar ti set v0='9K4M9YJ21B3H9L28I' where id=7; -update noar tt set b0='ZOCGMA' where id=7; -update noar ti set b0='ZOCGMA' where id=7; -update noar tt set v0='2O8NB6AY5BGN3UPOCFENP' where id=7; -update noar ti set v0='2O8NB6AY5BGN3UPOCFENP' where id=7; -update noar tt set b1='GEEL7K9S50M' where id=7; -update noar ti set b1='GEEL7K9S50M' where id=7; -update noar tt set v0='1NZU1V' where id=7; -update noar ti set v0='1NZU1V' where id=7; -update noar tt set b2='9TOWH0PNZT50G9VOWYEKT4FQOJ' where id=7; -update noar ti set b2='9TOWH0PNZT50G9VOWYEKT4FQOJ' where id=7; -update noar tt set v0='Y8YR18HBNGB626H14D07N81XP' where id=8; -update noar ti set v0='Y8YR18HBNGB626H14D07N81XP' where id=8; -update noar tt set b0='DKUSHBR0W69D1X5A7RZ2FTMQ2WTSXM1' where id=8; -update noar ti set b0='DKUSHBR0W69D1X5A7RZ2FTMQ2WTSXM1' where id=8; -update noar tt set v0='OE9Z8D277PAO' where id=8; -update noar ti set v0='OE9Z8D277PAO' where id=8; -update noar tt set b1='MVL6SN6NA12KDDBENEYF1CTGW3A7' where id=8; -update noar ti set b1='MVL6SN6NA12KDDBENEYF1CTGW3A7' where id=8; -update noar tt set v0='L6AP' where id=8; -update noar ti set v0='L6AP' where id=8; -update noar tt set b2='3HEXQO0MCRG95KHSNHL5' where id=8; -update noar ti set b2='3HEXQO0MCRG95KHSNHL5' where id=8; -update noar tt set v0='5O27VIEO3RFE86KYI9PE23A' where id=9; -update noar ti set v0='5O27VIEO3RFE86KYI9PE23A' where id=9; -update noar tt set b0='KEJN583WTJHZ2UFJNX83YE9E9BG9FA9' where id=9; -update noar ti set b0='KEJN583WTJHZ2UFJNX83YE9E9BG9FA9' where id=9; -update noar tt set v0='MSKU6Y4W5VRH2XYI7T2SY' where id=9; -update noar ti set v0='MSKU6Y4W5VRH2XYI7T2SY' where id=9; -update noar tt set b1='DHE1H05R' where id=9; -update noar ti set b1='DHE1H05R' where id=9; -update noar tt set v0='ZI4VG1QJ' where id=9; -update noar ti set v0='ZI4VG1QJ' where id=9; -update noar tt set b2='BDWVOKE8AQSN' where id=9; -update noar ti set b2='BDWVOKE8AQSN' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 tinyblob null, -b1 tinyblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='S38V6P1S0BNAN' where id=1; -update noar ti set v0='S38V6P1S0BNAN' where id=1; -update noar tt set b0='SNX1PRRGATZDTBZQROZG936XCO35' where id=1; -update noar ti set b0='SNX1PRRGATZDTBZQROZG936XCO35' where id=1; -update noar tt set v0='OE4TZHS4ZS83W4W0H' where id=1; -update noar ti set v0='OE4TZHS4ZS83W4W0H' where id=1; -update noar tt set b1='W0K32SKSG7B96L9H' where id=1; -update noar ti set b1='W0K32SKSG7B96L9H' where id=1; -update noar tt set v0='LBOXALUNT3OWTZLKU5R9' where id=1; -update noar ti set v0='LBOXALUNT3OWTZLKU5R9' where id=1; -update noar tt set b2='0PJW46H' where id=1; -update noar ti set b2='0PJW46H' where id=1; -update noar tt set v0='LX0LP5ZNAK38' where id=2; -update noar ti set v0='LX0LP5ZNAK38' where id=2; -update noar tt set b0='2NSV3B2M9UIH8AJTXXXRDQ' where id=2; -update noar ti set b0='2NSV3B2M9UIH8AJTXXXRDQ' where id=2; -update noar tt set v0='7BVYSTXQ9U7X9Q0ULO89BCZR2S' where id=2; -update noar ti set v0='7BVYSTXQ9U7X9Q0ULO89BCZR2S' where id=2; -update noar tt set b1='U9B4KUSO5HXKLYJKWEMWGGLDA4PV0B' where id=2; -update noar ti set b1='U9B4KUSO5HXKLYJKWEMWGGLDA4PV0B' where id=2; -update noar tt set v0='TH7PT4B3CQIKZX' where id=2; -update noar ti set v0='TH7PT4B3CQIKZX' where id=2; -update noar tt set b2='SXMI1EWOHWD3JVD' where id=2; -update noar ti set b2='SXMI1EWOHWD3JVD' where id=2; -update noar tt set v0='Y0Z' where id=3; -update noar ti set v0='Y0Z' where id=3; -update noar tt set b0='K6XFB5LF110BPTEW' where id=3; -update noar ti set b0='K6XFB5LF110BPTEW' where id=3; -update noar tt set v0='SCQQFA4SM76PN' where id=3; -update noar ti set v0='SCQQFA4SM76PN' where id=3; -update noar tt set b1='Q3ENOXHHLVWONA1W8GUE32E1BWIW613M' where id=3; -update noar ti set b1='Q3ENOXHHLVWONA1W8GUE32E1BWIW613M' where id=3; -update noar tt set v0='WD0JXHA7UTFKIHHBYR40O' where id=3; -update noar ti set v0='WD0JXHA7UTFKIHHBYR40O' where id=3; -update noar tt set b2='P8WQ0SVQ68JDMOUTVQT0V8RSPX' where id=3; -update noar ti set b2='P8WQ0SVQ68JDMOUTVQT0V8RSPX' where id=3; -update noar tt set v0='5P' where id=4; -update noar ti set v0='5P' where id=4; -update noar tt set b0='1SQE34Q' where id=4; -update noar ti set b0='1SQE34Q' where id=4; -update noar tt set v0='6Y402D' where id=4; -update noar ti set v0='6Y402D' where id=4; -update noar tt set b1='LLH' where id=4; -update noar ti set b1='LLH' where id=4; -update noar tt set v0='XRUZRILLPYHCO6WANEGVC7Q' where id=4; -update noar ti set v0='XRUZRILLPYHCO6WANEGVC7Q' where id=4; -update noar tt set b2='KHOJG3ZCT0RIKVCCP78R5OYVJ' where id=4; -update noar ti set b2='KHOJG3ZCT0RIKVCCP78R5OYVJ' where id=4; -update noar tt set v0='Y' where id=5; -update noar ti set v0='Y' where id=5; -update noar tt set b0='BJG6AHGRBQX' where id=5; -update noar ti set b0='BJG6AHGRBQX' where id=5; -update noar tt set v0='MPQZ0QZB62X7Y' where id=5; -update noar ti set v0='MPQZ0QZB62X7Y' where id=5; -update noar tt set b1='WA17DYB4XZ1G8SJ9VILXJ5WBNT3FA14O' where id=5; -update noar ti set b1='WA17DYB4XZ1G8SJ9VILXJ5WBNT3FA14O' where id=5; -update noar tt set v0='RWWTFR3ZK35PYOGCJR0H49I' where id=5; -update noar ti set v0='RWWTFR3ZK35PYOGCJR0H49I' where id=5; -update noar tt set b2='TP' where id=5; -update noar ti set b2='TP' where id=5; -update noar tt set v0='0I94Y0RXY' where id=6; -update noar ti set v0='0I94Y0RXY' where id=6; -update noar tt set b0='LTKIVTQGWUU6TJ50L3' where id=6; -update noar ti set b0='LTKIVTQGWUU6TJ50L3' where id=6; -update noar tt set v0='77' where id=6; -update noar ti set v0='77' where id=6; -update noar tt set b1='57B9' where id=6; -update noar ti set b1='57B9' where id=6; -update noar tt set v0='JPVK' where id=6; -update noar ti set v0='JPVK' where id=6; -update noar tt set b2='7S8UC521SKWPB1YN' where id=6; -update noar ti set b2='7S8UC521SKWPB1YN' where id=6; -update noar tt set v0='S7V1DK2PSEEWLVRJ' where id=7; -update noar ti set v0='S7V1DK2PSEEWLVRJ' where id=7; -update noar tt set b0='M' where id=7; -update noar ti set b0='M' where id=7; -update noar tt set v0='X5SYUQ7G6F33YZT64XINLP2R991U' where id=7; -update noar ti set v0='X5SYUQ7G6F33YZT64XINLP2R991U' where id=7; -update noar tt set b1='WC0JTDYM0WUVRAP6D19PNRKN' where id=7; -update noar ti set b1='WC0JTDYM0WUVRAP6D19PNRKN' where id=7; -update noar tt set v0='DQ5R' where id=7; -update noar ti set v0='DQ5R' where id=7; -update noar tt set b2='L5WL1UCS7D63PK' where id=7; -update noar ti set b2='L5WL1UCS7D63PK' where id=7; -update noar tt set v0='FIV2QZXCI6' where id=8; -update noar ti set v0='FIV2QZXCI6' where id=8; -update noar tt set b0='Z' where id=8; -update noar ti set b0='Z' where id=8; -update noar tt set v0='KYAT0VLE4QGAX' where id=8; -update noar ti set v0='KYAT0VLE4QGAX' where id=8; -update noar tt set b1='XWAQN2Q963SD5LF1MH4MIEBCC28I9' where id=8; -update noar ti set b1='XWAQN2Q963SD5LF1MH4MIEBCC28I9' where id=8; -update noar tt set v0='UP8M2' where id=8; -update noar ti set v0='UP8M2' where id=8; -update noar tt set b2='K' where id=8; -update noar ti set b2='K' where id=8; -update noar tt set v0='4AKDGFH0WMDHUTTSAZHHRXTKHT' where id=9; -update noar ti set v0='4AKDGFH0WMDHUTTSAZHHRXTKHT' where id=9; -update noar tt set b0='EMJO39' where id=9; -update noar ti set b0='EMJO39' where id=9; -update noar tt set v0='R6ZXAJ6IVD761GY15GI4I2SC0256Q' where id=9; -update noar ti set v0='R6ZXAJ6IVD761GY15GI4I2SC0256Q' where id=9; -update noar tt set b1='8V' where id=9; -update noar ti set b1='8V' where id=9; -update noar tt set v0='MRIN8ORER7BV8U' where id=9; -update noar ti set v0='MRIN8ORER7BV8U' where id=9; -update noar tt set b2='AC06BV0K9NCB' where id=9; -update noar ti set b2='AC06BV0K9NCB' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 tinyblob not null, -b1 tinyblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='PQA0U8AOMTTN0SU9USUXC385PTAKN3PZ' where id=1; -update noar ti set v0='PQA0U8AOMTTN0SU9USUXC385PTAKN3PZ' where id=1; -update noar tt set b0='LCMBPP' where id=1; -update noar ti set b0='LCMBPP' where id=1; -update noar tt set v0='AH8ZSE' where id=1; -update noar ti set v0='AH8ZSE' where id=1; -update noar tt set b1='9XYULWMAH90JMDUG1VVG2ACJ35Q7A6O' where id=1; -update noar ti set b1='9XYULWMAH90JMDUG1VVG2ACJ35Q7A6O' where id=1; -update noar tt set v0='T6ZQZAIBIGQ' where id=1; -update noar ti set v0='T6ZQZAIBIGQ' where id=1; -update noar tt set b2='26G6B' where id=1; -update noar ti set b2='26G6B' where id=1; -update noar tt set v0='KWVG4RGVCVQUG447HI15B3' where id=2; -update noar ti set v0='KWVG4RGVCVQUG447HI15B3' where id=2; -update noar tt set b0='9S06MYQVTOO8KXX3IN2DRM0ZM0MTLX8C' where id=2; -update noar ti set b0='9S06MYQVTOO8KXX3IN2DRM0ZM0MTLX8C' where id=2; -update noar tt set v0='NYKQVR682WY73LJ46X534' where id=2; -update noar ti set v0='NYKQVR682WY73LJ46X534' where id=2; -update noar tt set b1='JNR7' where id=2; -update noar ti set b1='JNR7' where id=2; -update noar tt set v0='LZGHD' where id=2; -update noar ti set v0='LZGHD' where id=2; -update noar tt set b2='F8I901PSU4HD7CMU9IGK6SVZWB27D' where id=2; -update noar ti set b2='F8I901PSU4HD7CMU9IGK6SVZWB27D' where id=2; -update noar tt set v0='VA7SDXB4FKE9H69ICCNV51JCO9TQJ0VD' where id=3; -update noar ti set v0='VA7SDXB4FKE9H69ICCNV51JCO9TQJ0VD' where id=3; -update noar tt set b0='LBDU1PQOW1FJS1SMMJ34KM0TDXGIY' where id=3; -update noar ti set b0='LBDU1PQOW1FJS1SMMJ34KM0TDXGIY' where id=3; -update noar tt set v0='HGB6LP6SZ87D1CHB5CG2' where id=3; -update noar ti set v0='HGB6LP6SZ87D1CHB5CG2' where id=3; -update noar tt set b1='4OR' where id=3; -update noar ti set b1='4OR' where id=3; -update noar tt set v0='YHEPADHHPLEG7FAB6HLGCR45C7L' where id=3; -update noar ti set v0='YHEPADHHPLEG7FAB6HLGCR45C7L' where id=3; -update noar tt set b2='ZM4YUEG9LQXXFWB41' where id=3; -update noar ti set b2='ZM4YUEG9LQXXFWB41' where id=3; -update noar tt set v0='DI2G8CM3688G76J0CFBM6JA5O9LM6X' where id=4; -update noar ti set v0='DI2G8CM3688G76J0CFBM6JA5O9LM6X' where id=4; -update noar tt set b0='43ENW7LUTWV0R' where id=4; -update noar ti set b0='43ENW7LUTWV0R' where id=4; -update noar tt set v0='N' where id=4; -update noar ti set v0='N' where id=4; -update noar tt set b1='UMBBU6MVYCK42I7ACK' where id=4; -update noar ti set b1='UMBBU6MVYCK42I7ACK' where id=4; -update noar tt set v0='4DFQD' where id=4; -update noar ti set v0='4DFQD' where id=4; -update noar tt set b2='T8GL5FTXYIIR487B9A' where id=4; -update noar ti set b2='T8GL5FTXYIIR487B9A' where id=4; -update noar tt set v0='VC3A0WRGPZ' where id=5; -update noar ti set v0='VC3A0WRGPZ' where id=5; -update noar tt set b0='QG1WQTBLSQ5OX0117EPL' where id=5; -update noar ti set b0='QG1WQTBLSQ5OX0117EPL' where id=5; -update noar tt set v0='LMJ3B63T0RKW1PY6PKA3V3JBP' where id=5; -update noar ti set v0='LMJ3B63T0RKW1PY6PKA3V3JBP' where id=5; -update noar tt set b1='E5Y' where id=5; -update noar ti set b1='E5Y' where id=5; -update noar tt set v0='41I5732CA8FNMWFR9S9' where id=5; -update noar ti set v0='41I5732CA8FNMWFR9S9' where id=5; -update noar tt set b2='RYAIU39QF00IHDN38OGC' where id=5; -update noar ti set b2='RYAIU39QF00IHDN38OGC' where id=5; -update noar tt set v0='I8RJB9RDL8JPYMY8S81N1N' where id=6; -update noar ti set v0='I8RJB9RDL8JPYMY8S81N1N' where id=6; -update noar tt set b0='O80GCRGKEU' where id=6; -update noar ti set b0='O80GCRGKEU' where id=6; -update noar tt set v0='R6XD8JUP4B1H3PRP' where id=6; -update noar ti set v0='R6XD8JUP4B1H3PRP' where id=6; -update noar tt set b1='U2P30RM7JDIXGTG2IA8H33IGEQKA99' where id=6; -update noar ti set b1='U2P30RM7JDIXGTG2IA8H33IGEQKA99' where id=6; -update noar tt set v0='63DKVNZHNN0' where id=6; -update noar ti set v0='63DKVNZHNN0' where id=6; -update noar tt set b2='FSTAA6AUZLYLT3F9' where id=6; -update noar ti set b2='FSTAA6AUZLYLT3F9' where id=6; -update noar tt set v0='X7E9TW3BK' where id=7; -update noar ti set v0='X7E9TW3BK' where id=7; -update noar tt set b0='NQLIZ13XOI7NLODXN' where id=7; -update noar ti set b0='NQLIZ13XOI7NLODXN' where id=7; -update noar tt set v0='9VGQ3IK7222SRVTW7Q6C60O60BGTX' where id=7; -update noar ti set v0='9VGQ3IK7222SRVTW7Q6C60O60BGTX' where id=7; -update noar tt set b1='OV3TRV2LWC16R2Q' where id=7; -update noar ti set b1='OV3TRV2LWC16R2Q' where id=7; -update noar tt set v0='MWKKZJ3GL5KLCTZWV6GX' where id=7; -update noar ti set v0='MWKKZJ3GL5KLCTZWV6GX' where id=7; -update noar tt set b2='T46QEM927MDPU16R' where id=7; -update noar ti set b2='T46QEM927MDPU16R' where id=7; -update noar tt set v0='0RSGX' where id=8; -update noar ti set v0='0RSGX' where id=8; -update noar tt set b0='HT37NEDB1WXQ3855' where id=8; -update noar ti set b0='HT37NEDB1WXQ3855' where id=8; -update noar tt set v0='AHNZ1LK3OX7T7AJCJ4HNNI' where id=8; -update noar ti set v0='AHNZ1LK3OX7T7AJCJ4HNNI' where id=8; -update noar tt set b1='XBNBB2QG5' where id=8; -update noar ti set b1='XBNBB2QG5' where id=8; -update noar tt set v0='95C5HUKGZBLFI5ON4BS42GSH8' where id=8; -update noar ti set v0='95C5HUKGZBLFI5ON4BS42GSH8' where id=8; -update noar tt set b2='V6Q7T5NKSMM2TPD4LM9IJ22QFJRESPY0' where id=8; -update noar ti set b2='V6Q7T5NKSMM2TPD4LM9IJ22QFJRESPY0' where id=8; -update noar tt set v0='JFN0P8CFP8J4SVPUA7EUIC' where id=9; -update noar ti set v0='JFN0P8CFP8J4SVPUA7EUIC' where id=9; -update noar tt set b0='95HOEIDJUK0POO7C0CLNBW9FXXK' where id=9; -update noar ti set b0='95HOEIDJUK0POO7C0CLNBW9FXXK' where id=9; -update noar tt set v0='70IPM' where id=9; -update noar ti set v0='70IPM' where id=9; -update noar tt set b1='8Q' where id=9; -update noar ti set b1='8Q' where id=9; -update noar tt set v0='UYS1XSNQ' where id=9; -update noar ti set v0='UYS1XSNQ' where id=9; -update noar tt set b2='JWKAH0' where id=9; -update noar ti set b2='JWKAH0' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 tinyblob not null, -b1 tinyblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='VY8' where id=1; -update noar ti set v0='VY8' where id=1; -update noar tt set b0='X2P0YGHY4R437' where id=1; -update noar ti set b0='X2P0YGHY4R437' where id=1; -update noar tt set v0='4DP0EL8WK0RDZYZ4ICS3V' where id=1; -update noar ti set v0='4DP0EL8WK0RDZYZ4ICS3V' where id=1; -update noar tt set b1='E' where id=1; -update noar ti set b1='E' where id=1; -update noar tt set v0='9NEV08TH95QF' where id=1; -update noar ti set v0='9NEV08TH95QF' where id=1; -update noar tt set b2='0P6FW9QRC66S3WI78VH4L' where id=1; -update noar ti set b2='0P6FW9QRC66S3WI78VH4L' where id=1; -update noar tt set v0='VKCLFL5J8QJ6L931Y4E8' where id=2; -update noar ti set v0='VKCLFL5J8QJ6L931Y4E8' where id=2; -update noar tt set b0='M4YM3DU5X363CCO' where id=2; -update noar ti set b0='M4YM3DU5X363CCO' where id=2; -update noar tt set v0='B208818XS6PVAN8D2DP0NHK73K829Z' where id=2; -update noar ti set v0='B208818XS6PVAN8D2DP0NHK73K829Z' where id=2; -update noar tt set b1='QEE9916C0K2P2LVNIFYW32MTDO5MCL' where id=2; -update noar ti set b1='QEE9916C0K2P2LVNIFYW32MTDO5MCL' where id=2; -update noar tt set v0='5T81QTWD0VP5HN2W7JX5GK' where id=2; -update noar ti set v0='5T81QTWD0VP5HN2W7JX5GK' where id=2; -update noar tt set b2='EMIQD8DJ3PZ67YSJ' where id=2; -update noar ti set b2='EMIQD8DJ3PZ67YSJ' where id=2; -update noar tt set v0='GM0J5TMT5B7OTMDL7UVD' where id=3; -update noar ti set v0='GM0J5TMT5B7OTMDL7UVD' where id=3; -update noar tt set b0='TRGLG5' where id=3; -update noar ti set b0='TRGLG5' where id=3; -update noar tt set v0='6P' where id=3; -update noar ti set v0='6P' where id=3; -update noar tt set b1='8JI5TNDWBE9' where id=3; -update noar ti set b1='8JI5TNDWBE9' where id=3; -update noar tt set v0='2PO3AP0TZKHUJ2' where id=3; -update noar ti set v0='2PO3AP0TZKHUJ2' where id=3; -update noar tt set b2='W5736CY1SH9QY2785CN7IGON1RB' where id=3; -update noar ti set b2='W5736CY1SH9QY2785CN7IGON1RB' where id=3; -update noar tt set v0='K2DHG0' where id=4; -update noar ti set v0='K2DHG0' where id=4; -update noar tt set b0='GSLZ8M9YMTHGXQGY59TCL7' where id=4; -update noar ti set b0='GSLZ8M9YMTHGXQGY59TCL7' where id=4; -update noar tt set v0='ZHAH3O9B1JN1D526JE6PC3XJ6W4HN8KL' where id=4; -update noar ti set v0='ZHAH3O9B1JN1D526JE6PC3XJ6W4HN8KL' where id=4; -update noar tt set b1='M2UMTZD4N68LKNZ' where id=4; -update noar ti set b1='M2UMTZD4N68LKNZ' where id=4; -update noar tt set v0='KQFOM64' where id=4; -update noar ti set v0='KQFOM64' where id=4; -update noar tt set b2='FC2SY3' where id=4; -update noar ti set b2='FC2SY3' where id=4; -update noar tt set v0='ABRFPIUA0PI5OMV8BQ' where id=5; -update noar ti set v0='ABRFPIUA0PI5OMV8BQ' where id=5; -update noar tt set b0='47ESUSFE93S92AEKPL3' where id=5; -update noar ti set b0='47ESUSFE93S92AEKPL3' where id=5; -update noar tt set v0='W6QW2KQVVWEPOHNZ77RMRB27LB9' where id=5; -update noar ti set v0='W6QW2KQVVWEPOHNZ77RMRB27LB9' where id=5; -update noar tt set b1='AUIZY8VJI24KCGKOSNFN3DQBYSQ' where id=5; -update noar ti set b1='AUIZY8VJI24KCGKOSNFN3DQBYSQ' where id=5; -update noar tt set v0='UKWWN8F72MVX2DWKDLBEY3HBSZI9MK' where id=5; -update noar ti set v0='UKWWN8F72MVX2DWKDLBEY3HBSZI9MK' where id=5; -update noar tt set b2='WN4KJXBY2UEV6V6R1LSG4HN' where id=5; -update noar ti set b2='WN4KJXBY2UEV6V6R1LSG4HN' where id=5; -update noar tt set v0='NK4319E7VFJX0PLDPEC7T0PDRX5ECR9R' where id=6; -update noar ti set v0='NK4319E7VFJX0PLDPEC7T0PDRX5ECR9R' where id=6; -update noar tt set b0='QKSISHTBPRBWV712T0UFVN3UOTUJ6L1' where id=6; -update noar ti set b0='QKSISHTBPRBWV712T0UFVN3UOTUJ6L1' where id=6; -update noar tt set v0='UF378DK06HJJP6B8D5LTR9Q68FV' where id=6; -update noar ti set v0='UF378DK06HJJP6B8D5LTR9Q68FV' where id=6; -update noar tt set b1='DRZFMIHB1DJ53BNAG98F' where id=6; -update noar ti set b1='DRZFMIHB1DJ53BNAG98F' where id=6; -update noar tt set v0='R1UZ4QO41WMYL37QSSG9JP0O8O01' where id=6; -update noar ti set v0='R1UZ4QO41WMYL37QSSG9JP0O8O01' where id=6; -update noar tt set b2='GBH55CHC9VJNM5EBW2H1DH9AP1V' where id=6; -update noar ti set b2='GBH55CHC9VJNM5EBW2H1DH9AP1V' where id=6; -update noar tt set v0='EW050M4VTKQDO1' where id=7; -update noar ti set v0='EW050M4VTKQDO1' where id=7; -update noar tt set b0='F8AWRYREIYO8W9OQU' where id=7; -update noar ti set b0='F8AWRYREIYO8W9OQU' where id=7; -update noar tt set v0='T6KSNPYHF9' where id=7; -update noar ti set v0='T6KSNPYHF9' where id=7; -update noar tt set b1='X5XT8NOQBFC7U28QCA' where id=7; -update noar ti set b1='X5XT8NOQBFC7U28QCA' where id=7; -update noar tt set v0='GIDSBSEGU' where id=7; -update noar ti set v0='GIDSBSEGU' where id=7; -update noar tt set b2='7U' where id=7; -update noar ti set b2='7U' where id=7; -update noar tt set v0='1EKP5Y1W5CIW1' where id=8; -update noar ti set v0='1EKP5Y1W5CIW1' where id=8; -update noar tt set b0='EXZ92X5VWX8P6WLLE64BMHM71YPI' where id=8; -update noar ti set b0='EXZ92X5VWX8P6WLLE64BMHM71YPI' where id=8; -update noar tt set v0='XWBX7HF9MSKR6GKWNZ' where id=8; -update noar ti set v0='XWBX7HF9MSKR6GKWNZ' where id=8; -update noar tt set b1='3CXWM0LG' where id=8; -update noar ti set b1='3CXWM0LG' where id=8; -update noar tt set v0='X4CBCX6B' where id=8; -update noar ti set v0='X4CBCX6B' where id=8; -update noar tt set b2='B80QYQFOODWF9MDYBZXP5H7P6OL0OIYL' where id=8; -update noar ti set b2='B80QYQFOODWF9MDYBZXP5H7P6OL0OIYL' where id=8; -update noar tt set v0='DU3XMYOBFH6URS0ZE7P2D2UQ9Q0' where id=9; -update noar ti set v0='DU3XMYOBFH6URS0ZE7P2D2UQ9Q0' where id=9; -update noar tt set b0='H9TWUAX675GZCY3RMK6M2L' where id=9; -update noar ti set b0='H9TWUAX675GZCY3RMK6M2L' where id=9; -update noar tt set v0='0AZ3' where id=9; -update noar ti set v0='0AZ3' where id=9; -update noar tt set b1='1FKK4UEX8LM046B' where id=9; -update noar ti set b1='1FKK4UEX8LM046B' where id=9; -update noar tt set v0='XUL0HW' where id=9; -update noar ti set v0='XUL0HW' where id=9; -update noar tt set b2='62ERQT2YSTVSYXGK5SCDCKKIJ' where id=9; -update noar ti set b2='62ERQT2YSTVSYXGK5SCDCKKIJ' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 tinyblob null, -b1 tinyblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='QLNH00EHACD53HBGH48S1WXQT4I3' where id=1; -update noar ti set v0='QLNH00EHACD53HBGH48S1WXQT4I3' where id=1; -update noar tt set b0='K04JDSV1O1J1SBOYPJ43E7BNNLPGPG2P' where id=1; -update noar ti set b0='K04JDSV1O1J1SBOYPJ43E7BNNLPGPG2P' where id=1; -update noar tt set v0='Q44LT7ABYHY4LGRWUMRM' where id=1; -update noar ti set v0='Q44LT7ABYHY4LGRWUMRM' where id=1; -update noar tt set b1='20KLS720GMVW8L0' where id=1; -update noar ti set b1='20KLS720GMVW8L0' where id=1; -update noar tt set v0='8IGESBH9Z56YGGXON' where id=1; -update noar ti set v0='8IGESBH9Z56YGGXON' where id=1; -update noar tt set b2='OD68NJ4JBCC1I2JN57' where id=1; -update noar ti set b2='OD68NJ4JBCC1I2JN57' where id=1; -update noar tt set v0='UE2NFRIXZ5EJT' where id=2; -update noar ti set v0='UE2NFRIXZ5EJT' where id=2; -update noar tt set b0='4NPR1ZAD7UF' where id=2; -update noar ti set b0='4NPR1ZAD7UF' where id=2; -update noar tt set v0='QBQHJLECGHY2A2VXI' where id=2; -update noar ti set v0='QBQHJLECGHY2A2VXI' where id=2; -update noar tt set b1='UZOF7OUH6FW5LY4IPVI7ZJR9WYHAX8L' where id=2; -update noar ti set b1='UZOF7OUH6FW5LY4IPVI7ZJR9WYHAX8L' where id=2; -update noar tt set v0='9L141WWUD0C2ZV7JMSUGY7S' where id=2; -update noar ti set v0='9L141WWUD0C2ZV7JMSUGY7S' where id=2; -update noar tt set b2='FBQPDF940H02PEMIAI' where id=2; -update noar ti set b2='FBQPDF940H02PEMIAI' where id=2; -update noar tt set v0='1SEV89PAKLVPZLVJUHCJL4RE' where id=3; -update noar ti set v0='1SEV89PAKLVPZLVJUHCJL4RE' where id=3; -update noar tt set b0='H5VTPAY3NLIRQH3G4DK7UJL8IN' where id=3; -update noar ti set b0='H5VTPAY3NLIRQH3G4DK7UJL8IN' where id=3; -update noar tt set v0='4M67PM4KZ25XMZ' where id=3; -update noar ti set v0='4M67PM4KZ25XMZ' where id=3; -update noar tt set b1='7T5JPEM9IL28AIL' where id=3; -update noar ti set b1='7T5JPEM9IL28AIL' where id=3; -update noar tt set v0='G0RCT5YHZGGSQK2MIE3JNC' where id=3; -update noar ti set v0='G0RCT5YHZGGSQK2MIE3JNC' where id=3; -update noar tt set b2='C9JU' where id=3; -update noar ti set b2='C9JU' where id=3; -update noar tt set v0='ZRAG8IP8S3MEDVSMMSBQQCF6OQ8VJAH9' where id=4; -update noar ti set v0='ZRAG8IP8S3MEDVSMMSBQQCF6OQ8VJAH9' where id=4; -update noar tt set b0='PP2CVNVO7GNCKHHKYKUEPW' where id=4; -update noar ti set b0='PP2CVNVO7GNCKHHKYKUEPW' where id=4; -update noar tt set v0='PSFHC1AUFYBEZ7I64V3766RWJ' where id=4; -update noar ti set v0='PSFHC1AUFYBEZ7I64V3766RWJ' where id=4; -update noar tt set b1='AUVBG3YEULUUGVZLMS7JJZ' where id=4; -update noar ti set b1='AUVBG3YEULUUGVZLMS7JJZ' where id=4; -update noar tt set v0='0PAQSL4ST8SBIHYNY0YHCW6H' where id=4; -update noar ti set v0='0PAQSL4ST8SBIHYNY0YHCW6H' where id=4; -update noar tt set b2='AK8PSI77WH1' where id=4; -update noar ti set b2='AK8PSI77WH1' where id=4; -update noar tt set v0='IWEOB12HV1N9ZW6653YDJV' where id=5; -update noar ti set v0='IWEOB12HV1N9ZW6653YDJV' where id=5; -update noar tt set b0='CK0DBGO52T0L0WXZGTEX440VIFFK' where id=5; -update noar ti set b0='CK0DBGO52T0L0WXZGTEX440VIFFK' where id=5; -update noar tt set v0='7Y0SH837Y9LE4O3P41' where id=5; -update noar ti set v0='7Y0SH837Y9LE4O3P41' where id=5; -update noar tt set b1='JHVHRTV3' where id=5; -update noar ti set b1='JHVHRTV3' where id=5; -update noar tt set v0='N76JP' where id=5; -update noar ti set v0='N76JP' where id=5; -update noar tt set b2='NM' where id=5; -update noar ti set b2='NM' where id=5; -update noar tt set v0='RC0INFBHY8E' where id=6; -update noar ti set v0='RC0INFBHY8E' where id=6; -update noar tt set b0='YYIN55CU7F21J5IPDW9V3NU' where id=6; -update noar ti set b0='YYIN55CU7F21J5IPDW9V3NU' where id=6; -update noar tt set v0='SBFY48ZNF5H5DH' where id=6; -update noar ti set v0='SBFY48ZNF5H5DH' where id=6; -update noar tt set b1='L21LI3R625D2YJGAFP' where id=6; -update noar ti set b1='L21LI3R625D2YJGAFP' where id=6; -update noar tt set v0='LMUD0LNEI1MU3M1' where id=6; -update noar ti set v0='LMUD0LNEI1MU3M1' where id=6; -update noar tt set b2='SN23OYXBUAD3GV' where id=6; -update noar ti set b2='SN23OYXBUAD3GV' where id=6; -update noar tt set v0='3JOBCL2CC5NTUGQWZ45MXVD' where id=7; -update noar ti set v0='3JOBCL2CC5NTUGQWZ45MXVD' where id=7; -update noar tt set b0='K134GIICU4LB7XP4V94BCJCVLEF4ZQDY' where id=7; -update noar ti set b0='K134GIICU4LB7XP4V94BCJCVLEF4ZQDY' where id=7; -update noar tt set v0='7U5AE7T8BQ8JDZSGAYO5V' where id=7; -update noar ti set v0='7U5AE7T8BQ8JDZSGAYO5V' where id=7; -update noar tt set b1='DNH2DYGAHWXHDTEJ7D2' where id=7; -update noar ti set b1='DNH2DYGAHWXHDTEJ7D2' where id=7; -update noar tt set v0='S1ALXBHH6UCIBT6OUVUC9Z91AS' where id=7; -update noar ti set v0='S1ALXBHH6UCIBT6OUVUC9Z91AS' where id=7; -update noar tt set b2='Z9GUG6A8O' where id=7; -update noar ti set b2='Z9GUG6A8O' where id=7; -update noar tt set v0='3FA5MX4LGENPB3EWFVFG8G3UFY' where id=8; -update noar ti set v0='3FA5MX4LGENPB3EWFVFG8G3UFY' where id=8; -update noar tt set b0='AL92PTHOTGVKKMFF8QF' where id=8; -update noar ti set b0='AL92PTHOTGVKKMFF8QF' where id=8; -update noar tt set v0='E4IC' where id=8; -update noar ti set v0='E4IC' where id=8; -update noar tt set b1='I4MWW2IRV4OTC9YCS28NQWV07XGE2MY' where id=8; -update noar ti set b1='I4MWW2IRV4OTC9YCS28NQWV07XGE2MY' where id=8; -update noar tt set v0='0RWACQZLJPQLRI3G0K19VLZ' where id=8; -update noar ti set v0='0RWACQZLJPQLRI3G0K19VLZ' where id=8; -update noar tt set b2='W8OA' where id=8; -update noar ti set b2='W8OA' where id=8; -update noar tt set v0='ETZIGE' where id=9; -update noar ti set v0='ETZIGE' where id=9; -update noar tt set b0='4SH3UBYZ6NEYPVKJ0PKCM' where id=9; -update noar ti set b0='4SH3UBYZ6NEYPVKJ0PKCM' where id=9; -update noar tt set v0='AILZHIRDBKOV' where id=9; -update noar ti set v0='AILZHIRDBKOV' where id=9; -update noar tt set b1='D4KDH28I6P4EIVVBB0P15EE24DG6X' where id=9; -update noar ti set b1='D4KDH28I6P4EIVVBB0P15EE24DG6X' where id=9; -update noar tt set v0='S9AXZ6GKNJWCT6GU9T2YFJKAFTF1O3' where id=9; -update noar ti set v0='S9AXZ6GKNJWCT6GU9T2YFJKAFTF1O3' where id=9; -update noar tt set b2='QFJ1MXK4W39DVD77U53IPIFDT1P' where id=9; -update noar ti set b2='QFJ1MXK4W39DVD77U53IPIFDT1P' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 tinyblob null, -b1 tinyblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='QU22E82U77' where id=1; -update noar ti set v0='QU22E82U77' where id=1; -update noar tt set b0='ST3F5ZE5C8KCF1EV' where id=1; -update noar ti set b0='ST3F5ZE5C8KCF1EV' where id=1; -update noar tt set v0='1884Z8G7M5WO78B3B2XHGNRB5VGDV' where id=1; -update noar ti set v0='1884Z8G7M5WO78B3B2XHGNRB5VGDV' where id=1; -update noar tt set b1='YZC' where id=1; -update noar ti set b1='YZC' where id=1; -update noar tt set v0='GX9S71R6LZUZ5UW1FK38BT1L' where id=1; -update noar ti set v0='GX9S71R6LZUZ5UW1FK38BT1L' where id=1; -update noar tt set b2='8IM6W09ATIJVY79O7LCEPV9FCQ67' where id=1; -update noar ti set b2='8IM6W09ATIJVY79O7LCEPV9FCQ67' where id=1; -update noar tt set v0='W3U5T4H3ORGRI6RS44XX2KIM' where id=2; -update noar ti set v0='W3U5T4H3ORGRI6RS44XX2KIM' where id=2; -update noar tt set b0='U8R3TPXZBWZNVOLBRO8TCWR5TE' where id=2; -update noar ti set b0='U8R3TPXZBWZNVOLBRO8TCWR5TE' where id=2; -update noar tt set v0='L9AO05MW638GWS7SX5ID221' where id=2; -update noar ti set v0='L9AO05MW638GWS7SX5ID221' where id=2; -update noar tt set b1='SD99B5' where id=2; -update noar ti set b1='SD99B5' where id=2; -update noar tt set v0='UPMFXV2NDXRPATQ7978Z8LPJOYE3' where id=2; -update noar ti set v0='UPMFXV2NDXRPATQ7978Z8LPJOYE3' where id=2; -update noar tt set b2='HU8TE' where id=2; -update noar ti set b2='HU8TE' where id=2; -update noar tt set v0='ULT0MMPPM7OK9O4624QTS' where id=3; -update noar ti set v0='ULT0MMPPM7OK9O4624QTS' where id=3; -update noar tt set b0='OZMILYDFOMCXPYB' where id=3; -update noar ti set b0='OZMILYDFOMCXPYB' where id=3; -update noar tt set v0='AIATAVCG6GZRMBUEG7GXT2BOFK4USQ1' where id=3; -update noar ti set v0='AIATAVCG6GZRMBUEG7GXT2BOFK4USQ1' where id=3; -update noar tt set b1='02I6F3BHNUC9' where id=3; -update noar ti set b1='02I6F3BHNUC9' where id=3; -update noar tt set v0='D25NC7B' where id=3; -update noar ti set v0='D25NC7B' where id=3; -update noar tt set b2='30LOQD1MD0TOX3D51L6ZBJ' where id=3; -update noar ti set b2='30LOQD1MD0TOX3D51L6ZBJ' where id=3; -update noar tt set v0='RNS0LJROE' where id=4; -update noar ti set v0='RNS0LJROE' where id=4; -update noar tt set b0='I8EZDWMSQZ4Z30ESTE1M' where id=4; -update noar ti set b0='I8EZDWMSQZ4Z30ESTE1M' where id=4; -update noar tt set v0='N8A10WJ1LO0EGJCTOIXAG0OF8QF' where id=4; -update noar ti set v0='N8A10WJ1LO0EGJCTOIXAG0OF8QF' where id=4; -update noar tt set b1='8K' where id=4; -update noar ti set b1='8K' where id=4; -update noar tt set v0='ZSZQ1MHUQNGOISN7T7' where id=4; -update noar ti set v0='ZSZQ1MHUQNGOISN7T7' where id=4; -update noar tt set b2='DN7UYJP8O5N8F8GW9MST7Z' where id=4; -update noar ti set b2='DN7UYJP8O5N8F8GW9MST7Z' where id=4; -update noar tt set v0='23R1AUUMHFSN2R8R44XOSMBLI' where id=5; -update noar ti set v0='23R1AUUMHFSN2R8R44XOSMBLI' where id=5; -update noar tt set b0='VD94PIRUU' where id=5; -update noar ti set b0='VD94PIRUU' where id=5; -update noar tt set v0='166ZU4F0WEXD3HJAJTE2RXXJSOAKI' where id=5; -update noar ti set v0='166ZU4F0WEXD3HJAJTE2RXXJSOAKI' where id=5; -update noar tt set b1='YCW3NVRO' where id=5; -update noar ti set b1='YCW3NVRO' where id=5; -update noar tt set v0='TO54LKA9R42ES8HY2ICDO07' where id=5; -update noar ti set v0='TO54LKA9R42ES8HY2ICDO07' where id=5; -update noar tt set b2='91OLCN23499UQB40L5' where id=5; -update noar ti set b2='91OLCN23499UQB40L5' where id=5; -update noar tt set v0='ZG6QNIWGCANQO630A6AXKLG' where id=6; -update noar ti set v0='ZG6QNIWGCANQO630A6AXKLG' where id=6; -update noar tt set b0='WL4FRF2VDXLC8GC4V6BZ8NC' where id=6; -update noar ti set b0='WL4FRF2VDXLC8GC4V6BZ8NC' where id=6; -update noar tt set v0='TX3MFADKV55E6YH7Z9' where id=6; -update noar ti set v0='TX3MFADKV55E6YH7Z9' where id=6; -update noar tt set b1='LZBR' where id=6; -update noar ti set b1='LZBR' where id=6; -update noar tt set v0='EJ0SJO87NA1' where id=6; -update noar ti set v0='EJ0SJO87NA1' where id=6; -update noar tt set b2='18C4CTA6DT1U2ZVTO' where id=6; -update noar ti set b2='18C4CTA6DT1U2ZVTO' where id=6; -update noar tt set v0='L2LVFZPT0E01F5Y9D' where id=7; -update noar ti set v0='L2LVFZPT0E01F5Y9D' where id=7; -update noar tt set b0='16ZYKJTF' where id=7; -update noar ti set b0='16ZYKJTF' where id=7; -update noar tt set v0='XOWMD8EC3WC' where id=7; -update noar ti set v0='XOWMD8EC3WC' where id=7; -update noar tt set b1='WZHECOX9J8VQ1GXH0S2EO518GR' where id=7; -update noar ti set b1='WZHECOX9J8VQ1GXH0S2EO518GR' where id=7; -update noar tt set v0='QTU2SSON9T8FC' where id=7; -update noar ti set v0='QTU2SSON9T8FC' where id=7; -update noar tt set b2='R0J247T7UOTUU8P' where id=7; -update noar ti set b2='R0J247T7UOTUU8P' where id=7; -update noar tt set v0='DM5R1K7PX7R270HOJR1L00SJHYPLAB3Y' where id=8; -update noar ti set v0='DM5R1K7PX7R270HOJR1L00SJHYPLAB3Y' where id=8; -update noar tt set b0='HTR7Y9MQSFPNXJF5ZQSJ0' where id=8; -update noar ti set b0='HTR7Y9MQSFPNXJF5ZQSJ0' where id=8; -update noar tt set v0='JQBMFJCE37N' where id=8; -update noar ti set v0='JQBMFJCE37N' where id=8; -update noar tt set b1='1U' where id=8; -update noar ti set b1='1U' where id=8; -update noar tt set v0='51SE5CIRX4NUPHLJI9' where id=8; -update noar ti set v0='51SE5CIRX4NUPHLJI9' where id=8; -update noar tt set b2='7Y2MPAN' where id=8; -update noar ti set b2='7Y2MPAN' where id=8; -update noar tt set v0='97DBNRTK0MMBMJM5QIBPG' where id=9; -update noar ti set v0='97DBNRTK0MMBMJM5QIBPG' where id=9; -update noar tt set b0='KEJ3KBMFC9Q387YIG40S' where id=9; -update noar ti set b0='KEJ3KBMFC9Q387YIG40S' where id=9; -update noar tt set v0='KHPAIQAEF4' where id=9; -update noar ti set v0='KHPAIQAEF4' where id=9; -update noar tt set b1='NPH61C' where id=9; -update noar ti set b1='NPH61C' where id=9; -update noar tt set v0='M3EK88D5Z70HXPC' where id=9; -update noar ti set v0='M3EK88D5Z70HXPC' where id=9; -update noar tt set b2='NUACWYEZB35HZBQ4' where id=9; -update noar ti set b2='NUACWYEZB35HZBQ4' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 tinyblob not null, -b1 tinyblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='518' where id=1; -update noar ti set v0='518' where id=1; -update noar tt set b0='RQQ9962CCUS46HP' where id=1; -update noar ti set b0='RQQ9962CCUS46HP' where id=1; -update noar tt set v0='X6Q9KPZMBIDCTRABAVMD63JSIJV74RV3' where id=1; -update noar ti set v0='X6Q9KPZMBIDCTRABAVMD63JSIJV74RV3' where id=1; -update noar tt set b1='M648B4FLGLXBFP46D72' where id=1; -update noar ti set b1='M648B4FLGLXBFP46D72' where id=1; -update noar tt set v0='I08J13M8D' where id=1; -update noar ti set v0='I08J13M8D' where id=1; -update noar tt set b2='LDB' where id=1; -update noar ti set b2='LDB' where id=1; -update noar tt set v0='BJHUP61957IHKUUWNF3QDN3EB8K9W' where id=2; -update noar ti set v0='BJHUP61957IHKUUWNF3QDN3EB8K9W' where id=2; -update noar tt set b0='56Y' where id=2; -update noar ti set b0='56Y' where id=2; -update noar tt set v0='581YJ6O5N9MF2APEVE8VL' where id=2; -update noar ti set v0='581YJ6O5N9MF2APEVE8VL' where id=2; -update noar tt set b1='7EY309BU9X4Y5UOU74NI8CN0VJ3GZOZY' where id=2; -update noar ti set b1='7EY309BU9X4Y5UOU74NI8CN0VJ3GZOZY' where id=2; -update noar tt set v0='80A07PE' where id=2; -update noar ti set v0='80A07PE' where id=2; -update noar tt set b2='TWFE29UXN00DE13JHSGB' where id=2; -update noar ti set b2='TWFE29UXN00DE13JHSGB' where id=2; -update noar tt set v0='4' where id=3; -update noar ti set v0='4' where id=3; -update noar tt set b0='NLGJPXPBIUPNYYCOXGZN7141XCBJBKQS' where id=3; -update noar ti set b0='NLGJPXPBIUPNYYCOXGZN7141XCBJBKQS' where id=3; -update noar tt set v0='SW281Y4MB4LLBO0BFJ7SYHC2HMT' where id=3; -update noar ti set v0='SW281Y4MB4LLBO0BFJ7SYHC2HMT' where id=3; -update noar tt set b1='BWH3VF268PP9' where id=3; -update noar ti set b1='BWH3VF268PP9' where id=3; -update noar tt set v0='WQTKM50JKV0AD4LJVALOI' where id=3; -update noar ti set v0='WQTKM50JKV0AD4LJVALOI' where id=3; -update noar tt set b2='VLZCD9DJIXQUQB8IHU' where id=3; -update noar ti set b2='VLZCD9DJIXQUQB8IHU' where id=3; -update noar tt set v0='ZRF2L32JJF2MVFF26GEZ5E6RMCH26KRY' where id=4; -update noar ti set v0='ZRF2L32JJF2MVFF26GEZ5E6RMCH26KRY' where id=4; -update noar tt set b0='T1V15H7QOGXNTN08G4QUYK' where id=4; -update noar ti set b0='T1V15H7QOGXNTN08G4QUYK' where id=4; -update noar tt set v0='3' where id=4; -update noar ti set v0='3' where id=4; -update noar tt set b1='OM' where id=4; -update noar ti set b1='OM' where id=4; -update noar tt set v0='G1GAOWQ5LFA7ECZU0M9JOFLB2CPD' where id=4; -update noar ti set v0='G1GAOWQ5LFA7ECZU0M9JOFLB2CPD' where id=4; -update noar tt set b2='1WA1R' where id=4; -update noar ti set b2='1WA1R' where id=4; -update noar tt set v0='XN8X2MWVMMN' where id=5; -update noar ti set v0='XN8X2MWVMMN' where id=5; -update noar tt set b0='S6' where id=5; -update noar ti set b0='S6' where id=5; -update noar tt set v0='N8BGHSTLQIERFZ3ZN6' where id=5; -update noar ti set v0='N8BGHSTLQIERFZ3ZN6' where id=5; -update noar tt set b1='QQZBHL2X' where id=5; -update noar ti set b1='QQZBHL2X' where id=5; -update noar tt set v0='E4PE1DWIG' where id=5; -update noar ti set v0='E4PE1DWIG' where id=5; -update noar tt set b2='D0TRPD5U6R8LGPI99HJLO' where id=5; -update noar ti set b2='D0TRPD5U6R8LGPI99HJLO' where id=5; -update noar tt set v0='PJO8GX48CGMWHDIYNCIVADLZ3' where id=6; -update noar ti set v0='PJO8GX48CGMWHDIYNCIVADLZ3' where id=6; -update noar tt set b0='DUORPEZ' where id=6; -update noar ti set b0='DUORPEZ' where id=6; -update noar tt set v0='1MF' where id=6; -update noar ti set v0='1MF' where id=6; -update noar tt set b1='PCMBLJ9IP3U' where id=6; -update noar ti set b1='PCMBLJ9IP3U' where id=6; -update noar tt set v0='UHS2GSZRDOD1' where id=6; -update noar ti set v0='UHS2GSZRDOD1' where id=6; -update noar tt set b2='KMT54' where id=6; -update noar ti set b2='KMT54' where id=6; -update noar tt set v0='KSP2MC0KU0E8XEWN8C3BKDTY' where id=7; -update noar ti set v0='KSP2MC0KU0E8XEWN8C3BKDTY' where id=7; -update noar tt set b0='0JODYLCAKROICLOGQU35QS2VLAZD' where id=7; -update noar ti set b0='0JODYLCAKROICLOGQU35QS2VLAZD' where id=7; -update noar tt set v0='AX6PQEXI' where id=7; -update noar ti set v0='AX6PQEXI' where id=7; -update noar tt set b1='ZACOTHOFOXWPNGEZH8GCLL99V4QWQQ' where id=7; -update noar ti set b1='ZACOTHOFOXWPNGEZH8GCLL99V4QWQQ' where id=7; -update noar tt set v0='MV6202' where id=7; -update noar ti set v0='MV6202' where id=7; -update noar tt set b2='6MX7QGQ9ZBR5FAAOIPW' where id=7; -update noar ti set b2='6MX7QGQ9ZBR5FAAOIPW' where id=7; -update noar tt set v0='MS5LUG5UJMW6645IVFRNO5D7' where id=8; -update noar ti set v0='MS5LUG5UJMW6645IVFRNO5D7' where id=8; -update noar tt set b0='DUE20VL4BKCM1DOA' where id=8; -update noar ti set b0='DUE20VL4BKCM1DOA' where id=8; -update noar tt set v0='CFC7LKM2ENK2O9PHEX68S1' where id=8; -update noar ti set v0='CFC7LKM2ENK2O9PHEX68S1' where id=8; -update noar tt set b1='76R8B' where id=8; -update noar ti set b1='76R8B' where id=8; -update noar tt set v0='9' where id=8; -update noar ti set v0='9' where id=8; -update noar tt set b2='ROLL4' where id=8; -update noar ti set b2='ROLL4' where id=8; -update noar tt set v0='PEHLZI62WAT69PSI5WXAC4HV6SL9' where id=9; -update noar ti set v0='PEHLZI62WAT69PSI5WXAC4HV6SL9' where id=9; -update noar tt set b0='LLI97IS2BN12SRQ4P39AMY8AP5HZZ' where id=9; -update noar ti set b0='LLI97IS2BN12SRQ4P39AMY8AP5HZZ' where id=9; -update noar tt set v0='KMNY4J2' where id=9; -update noar ti set v0='KMNY4J2' where id=9; -update noar tt set b1='U' where id=9; -update noar ti set b1='U' where id=9; -update noar tt set v0='XJJFD395S96WW' where id=9; -update noar ti set v0='XJJFD395S96WW' where id=9; -update noar tt set b2='3JB2PRX38M8' where id=9; -update noar ti set b2='3JB2PRX38M8' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 tinyblob not null, -b1 tinyblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='PTNQA1IMDZO703XIRJEWM32KI2' where id=1; -update noar ti set v0='PTNQA1IMDZO703XIRJEWM32KI2' where id=1; -update noar tt set b0='CO' where id=1; -update noar ti set b0='CO' where id=1; -update noar tt set v0='CK5OZJ4EG13COOH2VLOP93C' where id=1; -update noar ti set v0='CK5OZJ4EG13COOH2VLOP93C' where id=1; -update noar tt set b1='2D6YAWC2N680EZ2X1HSSI' where id=1; -update noar ti set b1='2D6YAWC2N680EZ2X1HSSI' where id=1; -update noar tt set v0='PGXGLDH6' where id=1; -update noar ti set v0='PGXGLDH6' where id=1; -update noar tt set b2='N7ENXC3CL405VH4ZJAX7GQQ2T' where id=1; -update noar ti set b2='N7ENXC3CL405VH4ZJAX7GQQ2T' where id=1; -update noar tt set v0='EN' where id=2; -update noar ti set v0='EN' where id=2; -update noar tt set b0='40C2D1BHDNZ7YSW9XHM0A' where id=2; -update noar ti set b0='40C2D1BHDNZ7YSW9XHM0A' where id=2; -update noar tt set v0='0C04FJ4QVJSYV7KAQ5BOT59' where id=2; -update noar ti set v0='0C04FJ4QVJSYV7KAQ5BOT59' where id=2; -update noar tt set b1='V8YBAHJVN5PR3899Y5A2Z' where id=2; -update noar ti set b1='V8YBAHJVN5PR3899Y5A2Z' where id=2; -update noar tt set v0='CSGD5O0U' where id=2; -update noar ti set v0='CSGD5O0U' where id=2; -update noar tt set b2='624HB4TEY84KA8FRPY9TK9F52UCUQTQ' where id=2; -update noar ti set b2='624HB4TEY84KA8FRPY9TK9F52UCUQTQ' where id=2; -update noar tt set v0='OJTS9GGB7QSVWY4O94Q4AS' where id=3; -update noar ti set v0='OJTS9GGB7QSVWY4O94Q4AS' where id=3; -update noar tt set b0='5W6AOCZGNT6OXLLL981MS14NOT0VBL' where id=3; -update noar ti set b0='5W6AOCZGNT6OXLLL981MS14NOT0VBL' where id=3; -update noar tt set v0='AEUEDXZZH7YSJ' where id=3; -update noar ti set v0='AEUEDXZZH7YSJ' where id=3; -update noar tt set b1='1MU324K3F8PBIT81N2LBHOA985G6' where id=3; -update noar ti set b1='1MU324K3F8PBIT81N2LBHOA985G6' where id=3; -update noar tt set v0='5AYUCHPGG7FM8H5R22F6YU2SD0AWPK17' where id=3; -update noar ti set v0='5AYUCHPGG7FM8H5R22F6YU2SD0AWPK17' where id=3; -update noar tt set b2='0XN2OWNY' where id=3; -update noar ti set b2='0XN2OWNY' where id=3; -update noar tt set v0='U9FVQ6AWH488LMGO76KJ0CXVGKI4' where id=4; -update noar ti set v0='U9FVQ6AWH488LMGO76KJ0CXVGKI4' where id=4; -update noar tt set b0='G6XIF7E0A1H994KFAN3W8XYE' where id=4; -update noar ti set b0='G6XIF7E0A1H994KFAN3W8XYE' where id=4; -update noar tt set v0='GAJGMKN1L0N3KLBRJJ97E2DHHSCH2' where id=4; -update noar ti set v0='GAJGMKN1L0N3KLBRJJ97E2DHHSCH2' where id=4; -update noar tt set b1='DMDB2AHS9QWRRR45PRKTP766WYMN3KCF' where id=4; -update noar ti set b1='DMDB2AHS9QWRRR45PRKTP766WYMN3KCF' where id=4; -update noar tt set v0='YPR' where id=4; -update noar ti set v0='YPR' where id=4; -update noar tt set b2='RGIGJ4QK2MQYOC' where id=4; -update noar ti set b2='RGIGJ4QK2MQYOC' where id=4; -update noar tt set v0='06ZTWJ731' where id=5; -update noar ti set v0='06ZTWJ731' where id=5; -update noar tt set b0='US8XNVFU31F3IYC41Q6TVWYFGQ' where id=5; -update noar ti set b0='US8XNVFU31F3IYC41Q6TVWYFGQ' where id=5; -update noar tt set v0='2XSXJIVI1HQ76G1M5INKUCSI2XC7JY1' where id=5; -update noar ti set v0='2XSXJIVI1HQ76G1M5INKUCSI2XC7JY1' where id=5; -update noar tt set b1='X3ZU1V4S' where id=5; -update noar ti set b1='X3ZU1V4S' where id=5; -update noar tt set v0='DO' where id=5; -update noar ti set v0='DO' where id=5; -update noar tt set b2='BIF337KCVTFZOUT0HUOBCC' where id=5; -update noar ti set b2='BIF337KCVTFZOUT0HUOBCC' where id=5; -update noar tt set v0='52UPGW2LTPNUDA1RO' where id=6; -update noar ti set v0='52UPGW2LTPNUDA1RO' where id=6; -update noar tt set b0='8YTXBN7' where id=6; -update noar ti set b0='8YTXBN7' where id=6; -update noar tt set v0='Q4BKXWB' where id=6; -update noar ti set v0='Q4BKXWB' where id=6; -update noar tt set b1='WHA0' where id=6; -update noar ti set b1='WHA0' where id=6; -update noar tt set v0='U' where id=6; -update noar ti set v0='U' where id=6; -update noar tt set b2='PJ' where id=6; -update noar ti set b2='PJ' where id=6; -update noar tt set v0='T3JI7SO0XUHSNUVE30ZDQ1SIQU62' where id=7; -update noar ti set v0='T3JI7SO0XUHSNUVE30ZDQ1SIQU62' where id=7; -update noar tt set b0='UJX21AMMV02QV3JN6J6V' where id=7; -update noar ti set b0='UJX21AMMV02QV3JN6J6V' where id=7; -update noar tt set v0='6DHG' where id=7; -update noar ti set v0='6DHG' where id=7; -update noar tt set b1='4K36Y6HSW93DCV2GUOC' where id=7; -update noar ti set b1='4K36Y6HSW93DCV2GUOC' where id=7; -update noar tt set v0='G' where id=7; -update noar ti set v0='G' where id=7; -update noar tt set b2='CQCO2J5IJCUYLALOVW4YT6IEHD' where id=7; -update noar ti set b2='CQCO2J5IJCUYLALOVW4YT6IEHD' where id=7; -update noar tt set v0='CCSGEXYJS9J6' where id=8; -update noar ti set v0='CCSGEXYJS9J6' where id=8; -update noar tt set b0='EU6TW4FZZ8418L2' where id=8; -update noar ti set b0='EU6TW4FZZ8418L2' where id=8; -update noar tt set v0='2H' where id=8; -update noar ti set v0='2H' where id=8; -update noar tt set b1='MJ2QK8HYA2K5J9JD1T601ALIONVE' where id=8; -update noar ti set b1='MJ2QK8HYA2K5J9JD1T601ALIONVE' where id=8; -update noar tt set v0='NLCMGE3927F0GKK5CVT' where id=8; -update noar ti set v0='NLCMGE3927F0GKK5CVT' where id=8; -update noar tt set b2='QDR6RWQ3A4CWFPF66VHOCT' where id=8; -update noar ti set b2='QDR6RWQ3A4CWFPF66VHOCT' where id=8; -update noar tt set v0='ZCP70WPC' where id=9; -update noar ti set v0='ZCP70WPC' where id=9; -update noar tt set b0='VVS47EPKEIC5I2E2X' where id=9; -update noar ti set b0='VVS47EPKEIC5I2E2X' where id=9; -update noar tt set v0='N6H0XFLLP2Y3TK4QP7KQ3FF8NH' where id=9; -update noar ti set v0='N6H0XFLLP2Y3TK4QP7KQ3FF8NH' where id=9; -update noar tt set b1='4' where id=9; -update noar ti set b1='4' where id=9; -update noar tt set v0='GBC7XMED380WX1FKUSXM0A5OC' where id=9; -update noar ti set v0='GBC7XMED380WX1FKUSXM0A5OC' where id=9; -update noar tt set b2='P22STMN6ZZIYW9YJYLLHK3QS' where id=9; -update noar ti set b2='P22STMN6ZZIYW9YJYLLHK3QS' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 tinyblob null, -b1 tinyblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='PA5HDSL85G26HPH9Z4H7CD9H7IO47' where id=1; -update noar ti set v0='PA5HDSL85G26HPH9Z4H7CD9H7IO47' where id=1; -update noar tt set b0='4E' where id=1; -update noar ti set b0='4E' where id=1; -update noar tt set v0='0C7FT2WFCN6ZU5I6JJOUNC2KJS' where id=1; -update noar ti set v0='0C7FT2WFCN6ZU5I6JJOUNC2KJS' where id=1; -update noar tt set b1='3MKECHHBBV2XE4KC7' where id=1; -update noar ti set b1='3MKECHHBBV2XE4KC7' where id=1; -update noar tt set v0='JSWP5EI7HWUTVDSIOORYKUM1SKR3VE' where id=1; -update noar ti set v0='JSWP5EI7HWUTVDSIOORYKUM1SKR3VE' where id=1; -update noar tt set b2='ZXDH2SQC' where id=1; -update noar ti set b2='ZXDH2SQC' where id=1; -update noar tt set v0='LIR55AI811KBFOT' where id=2; -update noar ti set v0='LIR55AI811KBFOT' where id=2; -update noar tt set b0='V6N3ULOBKQ4OE7RTE9FV5QX2ME' where id=2; -update noar ti set b0='V6N3ULOBKQ4OE7RTE9FV5QX2ME' where id=2; -update noar tt set v0='VY9VF3MVWZHL' where id=2; -update noar ti set v0='VY9VF3MVWZHL' where id=2; -update noar tt set b1='URPT2INKAZC' where id=2; -update noar ti set b1='URPT2INKAZC' where id=2; -update noar tt set v0='4E5F0A7UOIAFQCP7QOXNISWT93P3' where id=2; -update noar ti set v0='4E5F0A7UOIAFQCP7QOXNISWT93P3' where id=2; -update noar tt set b2='KP3CWJRRKM' where id=2; -update noar ti set b2='KP3CWJRRKM' where id=2; -update noar tt set v0='OEEZNDJRSYVWUR044UXUW70JKP7O' where id=3; -update noar ti set v0='OEEZNDJRSYVWUR044UXUW70JKP7O' where id=3; -update noar tt set b0='YXOP3' where id=3; -update noar ti set b0='YXOP3' where id=3; -update noar tt set v0='VYUVROLL2N' where id=3; -update noar ti set v0='VYUVROLL2N' where id=3; -update noar tt set b1='SMCFO14L1JD' where id=3; -update noar ti set b1='SMCFO14L1JD' where id=3; -update noar tt set v0='8TTRLRR8I' where id=3; -update noar ti set v0='8TTRLRR8I' where id=3; -update noar tt set b2='D' where id=3; -update noar ti set b2='D' where id=3; -update noar tt set v0='JY94NO57XOO7NVQ6I0DL8RBXI6EL' where id=4; -update noar ti set v0='JY94NO57XOO7NVQ6I0DL8RBXI6EL' where id=4; -update noar tt set b0='0E7RYLJYFGTT' where id=4; -update noar ti set b0='0E7RYLJYFGTT' where id=4; -update noar tt set v0='83NPVOMAKLM6SQ8ZMFU084DTO8' where id=4; -update noar ti set v0='83NPVOMAKLM6SQ8ZMFU084DTO8' where id=4; -update noar tt set b1='SYXXHBSWKRC5LR7H5AOHFJR9C' where id=4; -update noar ti set b1='SYXXHBSWKRC5LR7H5AOHFJR9C' where id=4; -update noar tt set v0='U5A6416LF4RA1E25EOU17TJ' where id=4; -update noar ti set v0='U5A6416LF4RA1E25EOU17TJ' where id=4; -update noar tt set b2='OGIJS9R640ZGW28N9YBQVYRDUZDPU7F' where id=4; -update noar ti set b2='OGIJS9R640ZGW28N9YBQVYRDUZDPU7F' where id=4; -update noar tt set v0='VSD9834MIY7LV' where id=5; -update noar ti set v0='VSD9834MIY7LV' where id=5; -update noar tt set b0='NLDZJGLZUMIY3' where id=5; -update noar ti set b0='NLDZJGLZUMIY3' where id=5; -update noar tt set v0='DY' where id=5; -update noar ti set v0='DY' where id=5; -update noar tt set b1='2ZLUZ8ZBC9H7PZ8KFIZ' where id=5; -update noar ti set b1='2ZLUZ8ZBC9H7PZ8KFIZ' where id=5; -update noar tt set v0='X808' where id=5; -update noar ti set v0='X808' where id=5; -update noar tt set b2='VXBFZNP6JRVZJ4N0' where id=5; -update noar ti set b2='VXBFZNP6JRVZJ4N0' where id=5; -update noar tt set v0='JGTZ186QPSSOU1GMQNV5MZ8UTRA6RC' where id=6; -update noar ti set v0='JGTZ186QPSSOU1GMQNV5MZ8UTRA6RC' where id=6; -update noar tt set b0='DC' where id=6; -update noar ti set b0='DC' where id=6; -update noar tt set v0='8NWQW3MZGGD7TBDY0HF9PE70LW1TM8T9' where id=6; -update noar ti set v0='8NWQW3MZGGD7TBDY0HF9PE70LW1TM8T9' where id=6; -update noar tt set b1='M' where id=6; -update noar ti set b1='M' where id=6; -update noar tt set v0='H2Y69AOEK' where id=6; -update noar ti set v0='H2Y69AOEK' where id=6; -update noar tt set b2='D1E8BHRQU55S2Y70VM3YGGXXOGU5FJL' where id=6; -update noar ti set b2='D1E8BHRQU55S2Y70VM3YGGXXOGU5FJL' where id=6; -update noar tt set v0='EHLT2111EWVF29Y74N1C' where id=7; -update noar ti set v0='EHLT2111EWVF29Y74N1C' where id=7; -update noar tt set b0='JTDPW0UKFVJ2VWCKWRA9PXQ' where id=7; -update noar ti set b0='JTDPW0UKFVJ2VWCKWRA9PXQ' where id=7; -update noar tt set v0='ZMFMGOBEK8QCDH97LL0PLQ86BU3FG06S' where id=7; -update noar ti set v0='ZMFMGOBEK8QCDH97LL0PLQ86BU3FG06S' where id=7; -update noar tt set b1='6SW7' where id=7; -update noar ti set b1='6SW7' where id=7; -update noar tt set v0='6' where id=7; -update noar ti set v0='6' where id=7; -update noar tt set b2='K1DJQQML2WMCQLO8IGO0' where id=7; -update noar ti set b2='K1DJQQML2WMCQLO8IGO0' where id=7; -update noar tt set v0='CO0FTRTBQUSTKNUCI2284SZTMCNCIN0K' where id=8; -update noar ti set v0='CO0FTRTBQUSTKNUCI2284SZTMCNCIN0K' where id=8; -update noar tt set b0='Z5NJ081B4V8F7G8OL' where id=8; -update noar ti set b0='Z5NJ081B4V8F7G8OL' where id=8; -update noar tt set v0='LSFGEHGIP39Z' where id=8; -update noar ti set v0='LSFGEHGIP39Z' where id=8; -update noar tt set b1='1UYVW0IJBF9WWXKOO97HCTG5WFHBA' where id=8; -update noar ti set b1='1UYVW0IJBF9WWXKOO97HCTG5WFHBA' where id=8; -update noar tt set v0='PIOKCE6G' where id=8; -update noar ti set v0='PIOKCE6G' where id=8; -update noar tt set b2='E224G' where id=8; -update noar ti set b2='E224G' where id=8; -update noar tt set v0='KSG' where id=9; -update noar ti set v0='KSG' where id=9; -update noar tt set b0='5RZOA8UX408MUZIJ71XTY4H2H' where id=9; -update noar ti set b0='5RZOA8UX408MUZIJ71XTY4H2H' where id=9; -update noar tt set v0='623TF4UB5102W89M1LKD9IWAUV7' where id=9; -update noar ti set v0='623TF4UB5102W89M1LKD9IWAUV7' where id=9; -update noar tt set b1='287AV582B2LBT0ZK167WS38' where id=9; -update noar ti set b1='287AV582B2LBT0ZK167WS38' where id=9; -update noar tt set v0='N5VNTD1L2JPP1CNR5Z43WH2TRVB2' where id=9; -update noar ti set v0='N5VNTD1L2JPP1CNR5Z43WH2TRVB2' where id=9; -update noar tt set b2='37KMQ8A030C7U62D9JZA576990' where id=9; -update noar ti set b2='37KMQ8A030C7U62D9JZA576990' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 tinyblob null, -b1 tinyblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='JQ5H9' where id=1; -update noar ti set v0='JQ5H9' where id=1; -update noar tt set b0='VJPD0YVFG' where id=1; -update noar ti set b0='VJPD0YVFG' where id=1; -update noar tt set v0='TG21O8USE' where id=1; -update noar ti set v0='TG21O8USE' where id=1; -update noar tt set b1='6G8NCFVDGKUKASL088V3' where id=1; -update noar ti set b1='6G8NCFVDGKUKASL088V3' where id=1; -update noar tt set v0='ECY522B2EVTEFA3YWTMQ7IJT1WAN0YZX' where id=1; -update noar ti set v0='ECY522B2EVTEFA3YWTMQ7IJT1WAN0YZX' where id=1; -update noar tt set b2='RGUOOSC9F0U5KG' where id=1; -update noar ti set b2='RGUOOSC9F0U5KG' where id=1; -update noar tt set v0='AGM80' where id=2; -update noar ti set v0='AGM80' where id=2; -update noar tt set b0='3Z2F4H7KGT8COPM' where id=2; -update noar ti set b0='3Z2F4H7KGT8COPM' where id=2; -update noar tt set v0='4SJZW' where id=2; -update noar ti set v0='4SJZW' where id=2; -update noar tt set b1='K18GZ3H8T185BSIJ6F8' where id=2; -update noar ti set b1='K18GZ3H8T185BSIJ6F8' where id=2; -update noar tt set v0='GSAV7U0MXXY3JK2UW6' where id=2; -update noar ti set v0='GSAV7U0MXXY3JK2UW6' where id=2; -update noar tt set b2='2FL4SWZ15Y4VZLD8J0M9X41FS87ZYO' where id=2; -update noar ti set b2='2FL4SWZ15Y4VZLD8J0M9X41FS87ZYO' where id=2; -update noar tt set v0='K1DGS28E' where id=3; -update noar ti set v0='K1DGS28E' where id=3; -update noar tt set b0='X01UMRXH0ZKUP1W11DW' where id=3; -update noar ti set b0='X01UMRXH0ZKUP1W11DW' where id=3; -update noar tt set v0='7R8MH6TTJA03' where id=3; -update noar ti set v0='7R8MH6TTJA03' where id=3; -update noar tt set b1='XOB7YLIV8WJWKX1W' where id=3; -update noar ti set b1='XOB7YLIV8WJWKX1W' where id=3; -update noar tt set v0='HHJY' where id=3; -update noar ti set v0='HHJY' where id=3; -update noar tt set b2='YQQ4S2ZPJAGT8SQT45Z6AHAKFBD' where id=3; -update noar ti set b2='YQQ4S2ZPJAGT8SQT45Z6AHAKFBD' where id=3; -update noar tt set v0='VR3ZLY04Q0Z' where id=4; -update noar ti set v0='VR3ZLY04Q0Z' where id=4; -update noar tt set b0='NFFIOVEB1M7ESNIMYUNYI0AY7R' where id=4; -update noar ti set b0='NFFIOVEB1M7ESNIMYUNYI0AY7R' where id=4; -update noar tt set v0='G73TFDLWFTTP4UU43KOTJT17L2ZHQBO1' where id=4; -update noar ti set v0='G73TFDLWFTTP4UU43KOTJT17L2ZHQBO1' where id=4; -update noar tt set b1='66N5GUY2DRKB7KQ8HKPU5T1JWW4VJMI' where id=4; -update noar ti set b1='66N5GUY2DRKB7KQ8HKPU5T1JWW4VJMI' where id=4; -update noar tt set v0='H1PPXV3OG64MVUT1Z' where id=4; -update noar ti set v0='H1PPXV3OG64MVUT1Z' where id=4; -update noar tt set b2='VVT5D8VX' where id=4; -update noar ti set b2='VVT5D8VX' where id=4; -update noar tt set v0='VLHKW4GFZ2921QC' where id=5; -update noar ti set v0='VLHKW4GFZ2921QC' where id=5; -update noar tt set b0='CA1EO25J5QPFLG6OV00W1UIMK9Y0K74T' where id=5; -update noar ti set b0='CA1EO25J5QPFLG6OV00W1UIMK9Y0K74T' where id=5; -update noar tt set v0='KE8N4FOZX1BEP4IZSLYM7QPHB' where id=5; -update noar ti set v0='KE8N4FOZX1BEP4IZSLYM7QPHB' where id=5; -update noar tt set b1='5KW8W8MRG21D9' where id=5; -update noar ti set b1='5KW8W8MRG21D9' where id=5; -update noar tt set v0='5L9IMI8P' where id=5; -update noar ti set v0='5L9IMI8P' where id=5; -update noar tt set b2='NTQP9YOD4ILXV4M0JX62ZRTTPEXSV' where id=5; -update noar ti set b2='NTQP9YOD4ILXV4M0JX62ZRTTPEXSV' where id=5; -update noar tt set v0='N3IHQ1LFI3IKAKJ5JONX' where id=6; -update noar ti set v0='N3IHQ1LFI3IKAKJ5JONX' where id=6; -update noar tt set b0='4QEAQ0YSIDXO0G0N9X' where id=6; -update noar ti set b0='4QEAQ0YSIDXO0G0N9X' where id=6; -update noar tt set v0='UNKSY9EZAVCY9P' where id=6; -update noar ti set v0='UNKSY9EZAVCY9P' where id=6; -update noar tt set b1='IRBV92X76W9HTGV708EN' where id=6; -update noar ti set b1='IRBV92X76W9HTGV708EN' where id=6; -update noar tt set v0='1C' where id=6; -update noar ti set v0='1C' where id=6; -update noar tt set b2='JMZC6IVL6' where id=6; -update noar ti set b2='JMZC6IVL6' where id=6; -update noar tt set v0='NS5YX6DAGKEA3NCKF5IY33WK' where id=7; -update noar ti set v0='NS5YX6DAGKEA3NCKF5IY33WK' where id=7; -update noar tt set b0='8IHLZWAIV39R0VH34F' where id=7; -update noar ti set b0='8IHLZWAIV39R0VH34F' where id=7; -update noar tt set v0='3SMM9GOIVSZIWHL' where id=7; -update noar ti set v0='3SMM9GOIVSZIWHL' where id=7; -update noar tt set b1='2R10ZK23VDA2' where id=7; -update noar ti set b1='2R10ZK23VDA2' where id=7; -update noar tt set v0='SEU60PG9PS6J75J' where id=7; -update noar ti set v0='SEU60PG9PS6J75J' where id=7; -update noar tt set b2='8Z0CPGVRZXVGNE55BM4RHV4' where id=7; -update noar ti set b2='8Z0CPGVRZXVGNE55BM4RHV4' where id=7; -update noar tt set v0='BZY8XN1ZSJ0RGBZMZAP6M2' where id=8; -update noar ti set v0='BZY8XN1ZSJ0RGBZMZAP6M2' where id=8; -update noar tt set b0='Q' where id=8; -update noar ti set b0='Q' where id=8; -update noar tt set v0='8SEL11YFSI6U' where id=8; -update noar ti set v0='8SEL11YFSI6U' where id=8; -update noar tt set b1='3ZI267XHVDWH0' where id=8; -update noar ti set b1='3ZI267XHVDWH0' where id=8; -update noar tt set v0='OVC6B8M7UVBAG0O6E' where id=8; -update noar ti set v0='OVC6B8M7UVBAG0O6E' where id=8; -update noar tt set b2='TPNBIOVDC' where id=8; -update noar ti set b2='TPNBIOVDC' where id=8; -update noar tt set v0='KDT6Z5NDC888GFUH42FMM56A' where id=9; -update noar ti set v0='KDT6Z5NDC888GFUH42FMM56A' where id=9; -update noar tt set b0='A' where id=9; -update noar ti set b0='A' where id=9; -update noar tt set v0='BT80PH367VLYE447H0SZXE' where id=9; -update noar ti set v0='BT80PH367VLYE447H0SZXE' where id=9; -update noar tt set b1='XIVOTV6QWRN16VZGN39PWXCOY19PYL2' where id=9; -update noar ti set b1='XIVOTV6QWRN16VZGN39PWXCOY19PYL2' where id=9; -update noar tt set v0='S07ZFDJ8M' where id=9; -update noar ti set v0='S07ZFDJ8M' where id=9; -update noar tt set b2='00K8RL' where id=9; -update noar ti set b2='00K8RL' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 tinyblob not null, -b1 tinyblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='MFE0U1AU34A7Q6LXIYXVZ9F' where id=1; -update noar ti set v0='MFE0U1AU34A7Q6LXIYXVZ9F' where id=1; -update noar tt set b0='I9B' where id=1; -update noar ti set b0='I9B' where id=1; -update noar tt set v0='XJ608V0L9RT41XBMPHMHQ2' where id=1; -update noar ti set v0='XJ608V0L9RT41XBMPHMHQ2' where id=1; -update noar tt set b1='4XFWY95F8' where id=1; -update noar ti set b1='4XFWY95F8' where id=1; -update noar tt set v0='QNXPNBW3KX88ML' where id=1; -update noar ti set v0='QNXPNBW3KX88ML' where id=1; -update noar tt set b2='BQJJX0V071AC8K' where id=1; -update noar ti set b2='BQJJX0V071AC8K' where id=1; -update noar tt set v0='LKRKMACP7HLZKBJIMXZD5' where id=2; -update noar ti set v0='LKRKMACP7HLZKBJIMXZD5' where id=2; -update noar tt set b0='U85GFW' where id=2; -update noar ti set b0='U85GFW' where id=2; -update noar tt set v0='E2OU1YDJ257IYFW41G' where id=2; -update noar ti set v0='E2OU1YDJ257IYFW41G' where id=2; -update noar tt set b1='IFUNURYM892' where id=2; -update noar ti set b1='IFUNURYM892' where id=2; -update noar tt set v0='H2SWLM2YA147BQO4F010Q9V' where id=2; -update noar ti set v0='H2SWLM2YA147BQO4F010Q9V' where id=2; -update noar tt set b2='WIQMLLAS3SAWN2TSE1YN' where id=2; -update noar ti set b2='WIQMLLAS3SAWN2TSE1YN' where id=2; -update noar tt set v0='1IJS0H7O4FXRK5OPS33DCHW' where id=3; -update noar ti set v0='1IJS0H7O4FXRK5OPS33DCHW' where id=3; -update noar tt set b0='MJLTP7CCK' where id=3; -update noar ti set b0='MJLTP7CCK' where id=3; -update noar tt set v0='HT0WZ8VBZCFO3JB7OF9XIDJOUFZHUA4' where id=3; -update noar ti set v0='HT0WZ8VBZCFO3JB7OF9XIDJOUFZHUA4' where id=3; -update noar tt set b1='L' where id=3; -update noar ti set b1='L' where id=3; -update noar tt set v0='RB9TQ5E4MOVUXXH3TS5R19MFGYCI7' where id=3; -update noar ti set v0='RB9TQ5E4MOVUXXH3TS5R19MFGYCI7' where id=3; -update noar tt set b2='H602GSGVE11Z3K2S9YJ' where id=3; -update noar ti set b2='H602GSGVE11Z3K2S9YJ' where id=3; -update noar tt set v0='4A2TBMV0DYNQF1SI1LED7Q5' where id=4; -update noar ti set v0='4A2TBMV0DYNQF1SI1LED7Q5' where id=4; -update noar tt set b0='BWOZFPIM7I2WLML23K0XEW85HX39JDW0' where id=4; -update noar ti set b0='BWOZFPIM7I2WLML23K0XEW85HX39JDW0' where id=4; -update noar tt set v0='THZB1B767B1WXPX2SMJGR' where id=4; -update noar ti set v0='THZB1B767B1WXPX2SMJGR' where id=4; -update noar tt set b1='6EFXT6GV9A4EN5RBPTW' where id=4; -update noar ti set b1='6EFXT6GV9A4EN5RBPTW' where id=4; -update noar tt set v0='OH4QKME4A3I1ZWVU' where id=4; -update noar ti set v0='OH4QKME4A3I1ZWVU' where id=4; -update noar tt set b2='6POBQ0XQ4V99HOGF3EX' where id=4; -update noar ti set b2='6POBQ0XQ4V99HOGF3EX' where id=4; -update noar tt set v0='TQLZX22AZ0N5QLI2L4DF70DY6' where id=5; -update noar ti set v0='TQLZX22AZ0N5QLI2L4DF70DY6' where id=5; -update noar tt set b0='H579V6W2NLZ0US' where id=5; -update noar ti set b0='H579V6W2NLZ0US' where id=5; -update noar tt set v0='9H8T6C41BPRR6CEZ' where id=5; -update noar ti set v0='9H8T6C41BPRR6CEZ' where id=5; -update noar tt set b1='XHDDL4RBY' where id=5; -update noar ti set b1='XHDDL4RBY' where id=5; -update noar tt set v0='A9FPDC' where id=5; -update noar ti set v0='A9FPDC' where id=5; -update noar tt set b2='8I6XV1E4I8VYCAVGY3MAEIHOCTZR2' where id=5; -update noar ti set b2='8I6XV1E4I8VYCAVGY3MAEIHOCTZR2' where id=5; -update noar tt set v0='GMP6R0GSZVRZ7XIUH9JW' where id=6; -update noar ti set v0='GMP6R0GSZVRZ7XIUH9JW' where id=6; -update noar tt set b0='DJ6VDI94SZYD1PTRV1Q' where id=6; -update noar ti set b0='DJ6VDI94SZYD1PTRV1Q' where id=6; -update noar tt set v0='6UVE7U7KB3N88QIVHGW5K' where id=6; -update noar ti set v0='6UVE7U7KB3N88QIVHGW5K' where id=6; -update noar tt set b1='DH09NPRRI80X0JET058' where id=6; -update noar ti set b1='DH09NPRRI80X0JET058' where id=6; -update noar tt set v0='J8YL9WHZ' where id=6; -update noar ti set v0='J8YL9WHZ' where id=6; -update noar tt set b2='H086K8' where id=6; -update noar ti set b2='H086K8' where id=6; -update noar tt set v0='W' where id=7; -update noar ti set v0='W' where id=7; -update noar tt set b0='7FEYN21U26Y3N15XPZ8K' where id=7; -update noar ti set b0='7FEYN21U26Y3N15XPZ8K' where id=7; -update noar tt set v0='QRBZ9R4Y4C5ZBF0ZTAPD5VM' where id=7; -update noar ti set v0='QRBZ9R4Y4C5ZBF0ZTAPD5VM' where id=7; -update noar tt set b1='FHV' where id=7; -update noar ti set b1='FHV' where id=7; -update noar tt set v0='8YAR9NYYSH' where id=7; -update noar ti set v0='8YAR9NYYSH' where id=7; -update noar tt set b2='THYEBHUCV' where id=7; -update noar ti set b2='THYEBHUCV' where id=7; -update noar tt set v0='HAWMV4IUFD7CB0IPOSNTU7GDEJWB' where id=8; -update noar ti set v0='HAWMV4IUFD7CB0IPOSNTU7GDEJWB' where id=8; -update noar tt set b0='LDUCB3CG' where id=8; -update noar ti set b0='LDUCB3CG' where id=8; -update noar tt set v0='WJ5' where id=8; -update noar ti set v0='WJ5' where id=8; -update noar tt set b1='0EXXW5UNP5R4KES' where id=8; -update noar ti set b1='0EXXW5UNP5R4KES' where id=8; -update noar tt set v0='IGRNA25M0LDRWF3NBI9EMCEGQY2XV3' where id=8; -update noar ti set v0='IGRNA25M0LDRWF3NBI9EMCEGQY2XV3' where id=8; -update noar tt set b2='UWRL32W' where id=8; -update noar ti set b2='UWRL32W' where id=8; -update noar tt set v0='N8KOKS149ELTEKUB5XD' where id=9; -update noar ti set v0='N8KOKS149ELTEKUB5XD' where id=9; -update noar tt set b0='VE8GYS3SDA9Q79XGUV3W4VD8L9D2TES' where id=9; -update noar ti set b0='VE8GYS3SDA9Q79XGUV3W4VD8L9D2TES' where id=9; -update noar tt set v0='AGU7V0' where id=9; -update noar ti set v0='AGU7V0' where id=9; -update noar tt set b1='2H' where id=9; -update noar ti set b1='2H' where id=9; -update noar tt set v0='LMPMXXNXV8BV0M8WNG7PGEYMB6' where id=9; -update noar ti set v0='LMPMXXNXV8BV0M8WNG7PGEYMB6' where id=9; -update noar tt set b2='0SJDSWLS6WQES66ZRB36N' where id=9; -update noar ti set b2='0SJDSWLS6WQES66ZRB36N' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 tinyblob not null, -b1 tinyblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='F692FKM6I697RNL5RTVXA9U5KKTZ' where id=1; -update noar ti set v0='F692FKM6I697RNL5RTVXA9U5KKTZ' where id=1; -update noar tt set b0='U2V366L' where id=1; -update noar ti set b0='U2V366L' where id=1; -update noar tt set v0='RO8IQ9G6RNZIXXJMNC3MU9TBQQ' where id=1; -update noar ti set v0='RO8IQ9G6RNZIXXJMNC3MU9TBQQ' where id=1; -update noar tt set b1='UVLBQAUHI5457J1XYBBOJ5O6A' where id=1; -update noar ti set b1='UVLBQAUHI5457J1XYBBOJ5O6A' where id=1; -update noar tt set v0='JYJZL0HQ' where id=1; -update noar ti set v0='JYJZL0HQ' where id=1; -update noar tt set b2='ZV5E2Q' where id=1; -update noar ti set b2='ZV5E2Q' where id=1; -update noar tt set v0='6XYY2F3F2H3696EHSKI6LYLKI0U8' where id=2; -update noar ti set v0='6XYY2F3F2H3696EHSKI6LYLKI0U8' where id=2; -update noar tt set b0='2I9MPRXJ0PVE' where id=2; -update noar ti set b0='2I9MPRXJ0PVE' where id=2; -update noar tt set v0='DG7Q8GBEZNAAPD6G2U9E' where id=2; -update noar ti set v0='DG7Q8GBEZNAAPD6G2U9E' where id=2; -update noar tt set b1='VHK5FCLNCPVZ50TSJCYQXMSR' where id=2; -update noar ti set b1='VHK5FCLNCPVZ50TSJCYQXMSR' where id=2; -update noar tt set v0='Q04FYRPM11B7OB' where id=2; -update noar ti set v0='Q04FYRPM11B7OB' where id=2; -update noar tt set b2='L8D2DFDO7RG0I5NYKUJ0' where id=2; -update noar ti set b2='L8D2DFDO7RG0I5NYKUJ0' where id=2; -update noar tt set v0='4OGN013L2P3QNNKF6D8WAADM' where id=3; -update noar ti set v0='4OGN013L2P3QNNKF6D8WAADM' where id=3; -update noar tt set b0='G8NWUK5VM77D' where id=3; -update noar ti set b0='G8NWUK5VM77D' where id=3; -update noar tt set v0='IUF4K1' where id=3; -update noar ti set v0='IUF4K1' where id=3; -update noar tt set b1='Y8NL0QKZKR20FZUMURW82' where id=3; -update noar ti set b1='Y8NL0QKZKR20FZUMURW82' where id=3; -update noar tt set v0='3SILD5JTGORBCZO' where id=3; -update noar ti set v0='3SILD5JTGORBCZO' where id=3; -update noar tt set b2='6QTZW6II8H' where id=3; -update noar ti set b2='6QTZW6II8H' where id=3; -update noar tt set v0='V0ZVQNK' where id=4; -update noar ti set v0='V0ZVQNK' where id=4; -update noar tt set b0='IE2MQ8BA' where id=4; -update noar ti set b0='IE2MQ8BA' where id=4; -update noar tt set v0='9NFVPUUU8Y0226V' where id=4; -update noar ti set v0='9NFVPUUU8Y0226V' where id=4; -update noar tt set b1='TK' where id=4; -update noar ti set b1='TK' where id=4; -update noar tt set v0='13TASNX' where id=4; -update noar ti set v0='13TASNX' where id=4; -update noar tt set b2='53MIYZKCI2DJ28IYJ1HMKS0HR' where id=4; -update noar ti set b2='53MIYZKCI2DJ28IYJ1HMKS0HR' where id=4; -update noar tt set v0='U2R9IHN2UZ' where id=5; -update noar ti set v0='U2R9IHN2UZ' where id=5; -update noar tt set b0='5OQJY293U7ZYJAA2GMC4O8' where id=5; -update noar ti set b0='5OQJY293U7ZYJAA2GMC4O8' where id=5; -update noar tt set v0='PHZ5IGF43L8GWNZB0KE3E5YWZH2W' where id=5; -update noar ti set v0='PHZ5IGF43L8GWNZB0KE3E5YWZH2W' where id=5; -update noar tt set b1='RW38937LA8NQUPWTJDOR2GDP' where id=5; -update noar ti set b1='RW38937LA8NQUPWTJDOR2GDP' where id=5; -update noar tt set v0='S6VVM3KTX6ZXHUHXCVZFZPP' where id=5; -update noar ti set v0='S6VVM3KTX6ZXHUHXCVZFZPP' where id=5; -update noar tt set b2='UHS87PO53UMIW7CNWDKQ' where id=5; -update noar ti set b2='UHS87PO53UMIW7CNWDKQ' where id=5; -update noar tt set v0='WOKE' where id=6; -update noar ti set v0='WOKE' where id=6; -update noar tt set b0='YT5M' where id=6; -update noar ti set b0='YT5M' where id=6; -update noar tt set v0='5SSWY' where id=6; -update noar ti set v0='5SSWY' where id=6; -update noar tt set b1='Y5ILXOA8VE1J1YRIM13PD44S3Z1' where id=6; -update noar ti set b1='Y5ILXOA8VE1J1YRIM13PD44S3Z1' where id=6; -update noar tt set v0='PSLYZIJQJSH70J' where id=6; -update noar ti set v0='PSLYZIJQJSH70J' where id=6; -update noar tt set b2='CA0W9TOM6F48FL' where id=6; -update noar ti set b2='CA0W9TOM6F48FL' where id=6; -update noar tt set v0='2PLYSS9D7S3O0' where id=7; -update noar ti set v0='2PLYSS9D7S3O0' where id=7; -update noar tt set b0='MXCJGQA1BX2XLUI3A29FAV3XPO6Q' where id=7; -update noar ti set b0='MXCJGQA1BX2XLUI3A29FAV3XPO6Q' where id=7; -update noar tt set v0='TFPY09838AXP63Y6KPF9C0XB' where id=7; -update noar ti set v0='TFPY09838AXP63Y6KPF9C0XB' where id=7; -update noar tt set b1='TEU83WTUK9F8Q8LR6GDY' where id=7; -update noar ti set b1='TEU83WTUK9F8Q8LR6GDY' where id=7; -update noar tt set v0='10U' where id=7; -update noar ti set v0='10U' where id=7; -update noar tt set b2='AGNPLF' where id=7; -update noar ti set b2='AGNPLF' where id=7; -update noar tt set v0='02CK2WZCWR7R1L8DS95SZXJ7UID' where id=8; -update noar ti set v0='02CK2WZCWR7R1L8DS95SZXJ7UID' where id=8; -update noar tt set b0='Z3IB04' where id=8; -update noar ti set b0='Z3IB04' where id=8; -update noar tt set v0='9DNP7OU59Q0MUCM0LBY0' where id=8; -update noar ti set v0='9DNP7OU59Q0MUCM0LBY0' where id=8; -update noar tt set b1='QCDCAPLGC2Q6ILNUV80DO4' where id=8; -update noar ti set b1='QCDCAPLGC2Q6ILNUV80DO4' where id=8; -update noar tt set v0='3W1HR34U3KCNCR62ZWDONW52E01W5' where id=8; -update noar ti set v0='3W1HR34U3KCNCR62ZWDONW52E01W5' where id=8; -update noar tt set b2='THLPEVK' where id=8; -update noar ti set b2='THLPEVK' where id=8; -update noar tt set v0='5EYGBI1G87PYKW6' where id=9; -update noar ti set v0='5EYGBI1G87PYKW6' where id=9; -update noar tt set b0='ZN5KD5WYAV' where id=9; -update noar ti set b0='ZN5KD5WYAV' where id=9; -update noar tt set v0='ZXXZ' where id=9; -update noar ti set v0='ZXXZ' where id=9; -update noar tt set b1='DMBUCSC' where id=9; -update noar ti set b1='DMBUCSC' where id=9; -update noar tt set v0='VNH55Q7758O81ROLL' where id=9; -update noar ti set v0='VNH55Q7758O81ROLL' where id=9; -update noar tt set b2='47V1E44NMHHR8NGW3U1U' where id=9; -update noar ti set b2='47V1E44NMHHR8NGW3U1U' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 tinyblob null, -b1 blob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='8Y8TFU62EGVSJXPX1889WWZZP1R24SR' where id=1; -update noar ti set v0='8Y8TFU62EGVSJXPX1889WWZZP1R24SR' where id=1; -update noar tt set b0='JLBNRI5' where id=1; -update noar ti set b0='JLBNRI5' where id=1; -update noar tt set v0='657Z9C2VSIS8S0BOUS4GN' where id=1; -update noar ti set v0='657Z9C2VSIS8S0BOUS4GN' where id=1; -update noar tt set b1='17G04YWZ5X83GR3D5ANNYDVXWFRM0J' where id=1; -update noar ti set b1='17G04YWZ5X83GR3D5ANNYDVXWFRM0J' where id=1; -update noar tt set v0='NEFEBI8YKDD2FSYEBTYPMKB5QZ4JT0OA' where id=1; -update noar ti set v0='NEFEBI8YKDD2FSYEBTYPMKB5QZ4JT0OA' where id=1; -update noar tt set b2='Y698MNX25' where id=1; -update noar ti set b2='Y698MNX25' where id=1; -update noar tt set v0='B919JNLCE3Y5TKJH24QC' where id=2; -update noar ti set v0='B919JNLCE3Y5TKJH24QC' where id=2; -update noar tt set b0='WJTMA4LU6R' where id=2; -update noar ti set b0='WJTMA4LU6R' where id=2; -update noar tt set v0='S5Q0H' where id=2; -update noar ti set v0='S5Q0H' where id=2; -update noar tt set b1='RMSMCBZ0HUGNQZQDKLUZ' where id=2; -update noar ti set b1='RMSMCBZ0HUGNQZQDKLUZ' where id=2; -update noar tt set v0='S18' where id=2; -update noar ti set v0='S18' where id=2; -update noar tt set b2='25EU28RZNCXWJ0GLZ27I' where id=2; -update noar ti set b2='25EU28RZNCXWJ0GLZ27I' where id=2; -update noar tt set v0='LRTIUXQWHTJAFIIX7VS' where id=3; -update noar ti set v0='LRTIUXQWHTJAFIIX7VS' where id=3; -update noar tt set b0='Z85WMPL67BVWPXIOQJ7LNJ' where id=3; -update noar ti set b0='Z85WMPL67BVWPXIOQJ7LNJ' where id=3; -update noar tt set v0='6GH65KMSXC9NBH30PCPCD6OFXMG' where id=3; -update noar ti set v0='6GH65KMSXC9NBH30PCPCD6OFXMG' where id=3; -update noar tt set b1='L8RL5IDLMIFY0Q3' where id=3; -update noar ti set b1='L8RL5IDLMIFY0Q3' where id=3; -update noar tt set v0='XY4DVW5XZJ8' where id=3; -update noar ti set v0='XY4DVW5XZJ8' where id=3; -update noar tt set b2='G4L' where id=3; -update noar ti set b2='G4L' where id=3; -update noar tt set v0='AGHDYX17QI3C4FQT8FD' where id=4; -update noar ti set v0='AGHDYX17QI3C4FQT8FD' where id=4; -update noar tt set b0='J305V' where id=4; -update noar ti set b0='J305V' where id=4; -update noar tt set v0='7EG02IGDF2F7PXAAMH5BZCZUR148' where id=4; -update noar ti set v0='7EG02IGDF2F7PXAAMH5BZCZUR148' where id=4; -update noar tt set b1='VAWGMUSVGOY7M549DA' where id=4; -update noar ti set b1='VAWGMUSVGOY7M549DA' where id=4; -update noar tt set v0='4N4L4XHWF3FQAWP0' where id=4; -update noar ti set v0='4N4L4XHWF3FQAWP0' where id=4; -update noar tt set b2='7XP26CHV9UQBDFS0ANMDOEE2VBU835' where id=4; -update noar ti set b2='7XP26CHV9UQBDFS0ANMDOEE2VBU835' where id=4; -update noar tt set v0='B9S8DVX3MZ60M6OS6PPELG8ALIZ' where id=5; -update noar ti set v0='B9S8DVX3MZ60M6OS6PPELG8ALIZ' where id=5; -update noar tt set b0='ZXZOHO389V70KSY' where id=5; -update noar ti set b0='ZXZOHO389V70KSY' where id=5; -update noar tt set v0='RKRL3YI88D' where id=5; -update noar ti set v0='RKRL3YI88D' where id=5; -update noar tt set b1='5KWEKK7XAXS4HCPTJS64FF' where id=5; -update noar ti set b1='5KWEKK7XAXS4HCPTJS64FF' where id=5; -update noar tt set v0='QCWXNGK1782X2RJ5O' where id=5; -update noar ti set v0='QCWXNGK1782X2RJ5O' where id=5; -update noar tt set b2='ONSN' where id=5; -update noar ti set b2='ONSN' where id=5; -update noar tt set v0='HGZ0OHSCTREB2RQE9XN8UR1748SS' where id=6; -update noar ti set v0='HGZ0OHSCTREB2RQE9XN8UR1748SS' where id=6; -update noar tt set b0='KN6' where id=6; -update noar ti set b0='KN6' where id=6; -update noar tt set v0='JJVI8J9IYCXEN4TT' where id=6; -update noar ti set v0='JJVI8J9IYCXEN4TT' where id=6; -update noar tt set b1='XXPHNOYQ5ZP1IQ73A9JKAQ' where id=6; -update noar ti set b1='XXPHNOYQ5ZP1IQ73A9JKAQ' where id=6; -update noar tt set v0='M5A5T5ALDQZ2S' where id=6; -update noar ti set v0='M5A5T5ALDQZ2S' where id=6; -update noar tt set b2='QN7EKYHJ62P66EOFYG1TGHDTKLO1KI5' where id=6; -update noar ti set b2='QN7EKYHJ62P66EOFYG1TGHDTKLO1KI5' where id=6; -update noar tt set v0='711A' where id=7; -update noar ti set v0='711A' where id=7; -update noar tt set b0='0BABH32UO' where id=7; -update noar ti set b0='0BABH32UO' where id=7; -update noar tt set v0='AFF8575R' where id=7; -update noar ti set v0='AFF8575R' where id=7; -update noar tt set b1='06N1VVVIPIZJX2ZXPDDMLVHMRJNB4DVI' where id=7; -update noar ti set b1='06N1VVVIPIZJX2ZXPDDMLVHMRJNB4DVI' where id=7; -update noar tt set v0='BB8' where id=7; -update noar ti set v0='BB8' where id=7; -update noar tt set b2='EN8' where id=7; -update noar ti set b2='EN8' where id=7; -update noar tt set v0='XFAJ3WG6A1RT02Y58S56' where id=8; -update noar ti set v0='XFAJ3WG6A1RT02Y58S56' where id=8; -update noar tt set b0='U2FAHR0OBYTH2TZUUUBR' where id=8; -update noar ti set b0='U2FAHR0OBYTH2TZUUUBR' where id=8; -update noar tt set v0='WP0ZIO09JI5S7KU' where id=8; -update noar ti set v0='WP0ZIO09JI5S7KU' where id=8; -update noar tt set b1='DGTOWH01GRNAQMQJ7E' where id=8; -update noar ti set b1='DGTOWH01GRNAQMQJ7E' where id=8; -update noar tt set v0='ULE1PTHWC4B48WISPLR5ZSFD35CDF2X3' where id=8; -update noar ti set v0='ULE1PTHWC4B48WISPLR5ZSFD35CDF2X3' where id=8; -update noar tt set b2='R2U0F5ADFZVHDIWKIYZE821KS' where id=8; -update noar ti set b2='R2U0F5ADFZVHDIWKIYZE821KS' where id=8; -update noar tt set v0='G5VHVX2PZIT2Z8GTPJIJ50B7T5W6LX' where id=9; -update noar ti set v0='G5VHVX2PZIT2Z8GTPJIJ50B7T5W6LX' where id=9; -update noar tt set b0='1WWYUFG' where id=9; -update noar ti set b0='1WWYUFG' where id=9; -update noar tt set v0='THW92PY4337G9B6J57Y07GPVJ0MMOJR5' where id=9; -update noar ti set v0='THW92PY4337G9B6J57Y07GPVJ0MMOJR5' where id=9; -update noar tt set b1='EEOP' where id=9; -update noar ti set b1='EEOP' where id=9; -update noar tt set v0='EXVRZNXS6308' where id=9; -update noar ti set v0='EXVRZNXS6308' where id=9; -update noar tt set b2='KVNVS6TASTDKU0' where id=9; -update noar ti set b2='KVNVS6TASTDKU0' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 tinyblob null, -b1 blob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='5BY2WL' where id=1; -update noar ti set v0='5BY2WL' where id=1; -update noar tt set b0='2LG9OQA' where id=1; -update noar ti set b0='2LG9OQA' where id=1; -update noar tt set v0='8A545MSMWTN02VPVU06CGR4AU9XPMS8G' where id=1; -update noar ti set v0='8A545MSMWTN02VPVU06CGR4AU9XPMS8G' where id=1; -update noar tt set b1='10IQ1YK40X5OYJLVLU10U8UBLAUGUC' where id=1; -update noar ti set b1='10IQ1YK40X5OYJLVLU10U8UBLAUGUC' where id=1; -update noar tt set v0='I9N4' where id=1; -update noar ti set v0='I9N4' where id=1; -update noar tt set b2='9S04H0WXMJGX' where id=1; -update noar ti set b2='9S04H0WXMJGX' where id=1; -update noar tt set v0='C17BARNR0UP55LYOC15Y0LXTWN10J1' where id=2; -update noar ti set v0='C17BARNR0UP55LYOC15Y0LXTWN10J1' where id=2; -update noar tt set b0='HKA2BQ' where id=2; -update noar ti set b0='HKA2BQ' where id=2; -update noar tt set v0='RC9C' where id=2; -update noar ti set v0='RC9C' where id=2; -update noar tt set b1='NNMCXD4IOIDTTA50OYXON' where id=2; -update noar ti set b1='NNMCXD4IOIDTTA50OYXON' where id=2; -update noar tt set v0='KNNYL' where id=2; -update noar ti set v0='KNNYL' where id=2; -update noar tt set b2='LO4QC69RGJP009Y1H9LFEP' where id=2; -update noar ti set b2='LO4QC69RGJP009Y1H9LFEP' where id=2; -update noar tt set v0='MPM75NHQ4IPXT3C8' where id=3; -update noar ti set v0='MPM75NHQ4IPXT3C8' where id=3; -update noar tt set b0='7V03CXP84YGBJ7' where id=3; -update noar ti set b0='7V03CXP84YGBJ7' where id=3; -update noar tt set v0='XDALAKE4F' where id=3; -update noar ti set v0='XDALAKE4F' where id=3; -update noar tt set b1='I93I7' where id=3; -update noar ti set b1='I93I7' where id=3; -update noar tt set v0='3B2TN6DMA4U83TXDFXLS3H1F1G0XUF2' where id=3; -update noar ti set v0='3B2TN6DMA4U83TXDFXLS3H1F1G0XUF2' where id=3; -update noar tt set b2='6QHW9NIPVXL388SD19DH1QT' where id=3; -update noar ti set b2='6QHW9NIPVXL388SD19DH1QT' where id=3; -update noar tt set v0='2UR6MB' where id=4; -update noar ti set v0='2UR6MB' where id=4; -update noar tt set b0='VKT2JWY64A1GH4BRG4VSQJ15J8TT7' where id=4; -update noar ti set b0='VKT2JWY64A1GH4BRG4VSQJ15J8TT7' where id=4; -update noar tt set v0='JHLJN7VR7FNS1JPBMKQO7L' where id=4; -update noar ti set v0='JHLJN7VR7FNS1JPBMKQO7L' where id=4; -update noar tt set b1='ME64QB92EH6DXLKKM7V3OT7ZE23' where id=4; -update noar ti set b1='ME64QB92EH6DXLKKM7V3OT7ZE23' where id=4; -update noar tt set v0='UYN69R6P1S6C6C1VJLEOA' where id=4; -update noar ti set v0='UYN69R6P1S6C6C1VJLEOA' where id=4; -update noar tt set b2='OQRMWCBP47J6FDIMS' where id=4; -update noar ti set b2='OQRMWCBP47J6FDIMS' where id=4; -update noar tt set v0='VHYHXA844B9QO9VWB5C4C64QOXJKPB' where id=5; -update noar ti set v0='VHYHXA844B9QO9VWB5C4C64QOXJKPB' where id=5; -update noar tt set b0='1LPCBNI4G1QCYQU50LHCVXT7TB38' where id=5; -update noar ti set b0='1LPCBNI4G1QCYQU50LHCVXT7TB38' where id=5; -update noar tt set v0='JUG' where id=5; -update noar ti set v0='JUG' where id=5; -update noar tt set b1='Q7V93AJC11' where id=5; -update noar ti set b1='Q7V93AJC11' where id=5; -update noar tt set v0='7D4AP' where id=5; -update noar ti set v0='7D4AP' where id=5; -update noar tt set b2='2SVBGC' where id=5; -update noar ti set b2='2SVBGC' where id=5; -update noar tt set v0='MLVZ' where id=6; -update noar ti set v0='MLVZ' where id=6; -update noar tt set b0='RGKY0TF70FT' where id=6; -update noar ti set b0='RGKY0TF70FT' where id=6; -update noar tt set v0='PL4M' where id=6; -update noar ti set v0='PL4M' where id=6; -update noar tt set b1='RO74V47G9JS2L5' where id=6; -update noar ti set b1='RO74V47G9JS2L5' where id=6; -update noar tt set v0='QYV0H0RJBU2IOOMFK6U8Y0CCFGC00M' where id=6; -update noar ti set v0='QYV0H0RJBU2IOOMFK6U8Y0CCFGC00M' where id=6; -update noar tt set b2='OY5AGV9P44VVI2ET6O8R' where id=6; -update noar ti set b2='OY5AGV9P44VVI2ET6O8R' where id=6; -update noar tt set v0='DQM3MJ1KI8XHMPSLFIOTBXNEY3' where id=7; -update noar ti set v0='DQM3MJ1KI8XHMPSLFIOTBXNEY3' where id=7; -update noar tt set b0='SFEVSIJPQR0ZQ5TDFHA13' where id=7; -update noar ti set b0='SFEVSIJPQR0ZQ5TDFHA13' where id=7; -update noar tt set v0='J' where id=7; -update noar ti set v0='J' where id=7; -update noar tt set b1='I2CUQVOAZV3' where id=7; -update noar ti set b1='I2CUQVOAZV3' where id=7; -update noar tt set v0='K8JQMG4K4I5WQ5TLTZUVKXS2EPMNP7F' where id=7; -update noar ti set v0='K8JQMG4K4I5WQ5TLTZUVKXS2EPMNP7F' where id=7; -update noar tt set b2='34VTBWMG2M' where id=7; -update noar ti set b2='34VTBWMG2M' where id=7; -update noar tt set v0='MS9RX3TVZRRI7SU1B463' where id=8; -update noar ti set v0='MS9RX3TVZRRI7SU1B463' where id=8; -update noar tt set b0='T2S1GA0O' where id=8; -update noar ti set b0='T2S1GA0O' where id=8; -update noar tt set v0='FMOT960EOBTB97J5XNKX5X5WFSF8Q3T' where id=8; -update noar ti set v0='FMOT960EOBTB97J5XNKX5X5WFSF8Q3T' where id=8; -update noar tt set b1='KN' where id=8; -update noar ti set b1='KN' where id=8; -update noar tt set v0='BHKL7AH4LB0GU5H' where id=8; -update noar ti set v0='BHKL7AH4LB0GU5H' where id=8; -update noar tt set b2='E1J9X4DJPFPM' where id=8; -update noar ti set b2='E1J9X4DJPFPM' where id=8; -update noar tt set v0='L' where id=9; -update noar ti set v0='L' where id=9; -update noar tt set b0='2MSHYUC013XQ0KRK' where id=9; -update noar ti set b0='2MSHYUC013XQ0KRK' where id=9; -update noar tt set v0='4PMIPCAB' where id=9; -update noar ti set v0='4PMIPCAB' where id=9; -update noar tt set b1='69Q8DYTVEK4DHLJWNIP3V1IDXBQO' where id=9; -update noar ti set b1='69Q8DYTVEK4DHLJWNIP3V1IDXBQO' where id=9; -update noar tt set v0='V8YM4VCQ5IZ0XN' where id=9; -update noar ti set v0='V8YM4VCQ5IZ0XN' where id=9; -update noar tt set b2='VMAPH031CNMBLCOEFQY8CO0J53' where id=9; -update noar ti set b2='VMAPH031CNMBLCOEFQY8CO0J53' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 tinyblob not null, -b1 blob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='NUXTEA371UUI1Y' where id=1; -update noar ti set v0='NUXTEA371UUI1Y' where id=1; -update noar tt set b0='16Z77OSIX' where id=1; -update noar ti set b0='16Z77OSIX' where id=1; -update noar tt set v0='3G6JRE3MPHPSEAA3' where id=1; -update noar ti set v0='3G6JRE3MPHPSEAA3' where id=1; -update noar tt set b1='C' where id=1; -update noar ti set b1='C' where id=1; -update noar tt set v0='FSIY84G0PLSNGVE73' where id=1; -update noar ti set v0='FSIY84G0PLSNGVE73' where id=1; -update noar tt set b2='KXJNKTSQ5' where id=1; -update noar ti set b2='KXJNKTSQ5' where id=1; -update noar tt set v0='HZY4KKANDK01GX' where id=2; -update noar ti set v0='HZY4KKANDK01GX' where id=2; -update noar tt set b0='W5VET6VE4G63TLA77GGWD30L0F6' where id=2; -update noar ti set b0='W5VET6VE4G63TLA77GGWD30L0F6' where id=2; -update noar tt set v0='AHMGJFBUGZQP1UC88ZI2S16U7TN1' where id=2; -update noar ti set v0='AHMGJFBUGZQP1UC88ZI2S16U7TN1' where id=2; -update noar tt set b1='YGBBURCJNMLCSGJIC666' where id=2; -update noar ti set b1='YGBBURCJNMLCSGJIC666' where id=2; -update noar tt set v0='WJBID4' where id=2; -update noar ti set v0='WJBID4' where id=2; -update noar tt set b2='OW' where id=2; -update noar ti set b2='OW' where id=2; -update noar tt set v0='8RG8G14QR6PESEG6QRODF7FGU' where id=3; -update noar ti set v0='8RG8G14QR6PESEG6QRODF7FGU' where id=3; -update noar tt set b0='MMZAKYRWQ' where id=3; -update noar ti set b0='MMZAKYRWQ' where id=3; -update noar tt set v0='5KEN4' where id=3; -update noar ti set v0='5KEN4' where id=3; -update noar tt set b1='23VAQ9R7BYX3P107O86LG' where id=3; -update noar ti set b1='23VAQ9R7BYX3P107O86LG' where id=3; -update noar tt set v0='GJOZQ4ZKS1DP' where id=3; -update noar ti set v0='GJOZQ4ZKS1DP' where id=3; -update noar tt set b2='BE96528P2KJA4HMQELHRBT67B' where id=3; -update noar ti set b2='BE96528P2KJA4HMQELHRBT67B' where id=3; -update noar tt set v0='86X7J' where id=4; -update noar ti set v0='86X7J' where id=4; -update noar tt set b0='YLZ23YHWBIE9TRZVHX' where id=4; -update noar ti set b0='YLZ23YHWBIE9TRZVHX' where id=4; -update noar tt set v0='RWL2RXTXEP4G8UJZ26M96A0GQVSX' where id=4; -update noar ti set v0='RWL2RXTXEP4G8UJZ26M96A0GQVSX' where id=4; -update noar tt set b1='D7RT34SZP32Q9NDDWX1N28F6' where id=4; -update noar ti set b1='D7RT34SZP32Q9NDDWX1N28F6' where id=4; -update noar tt set v0='RBOOWYJV0UO6IEF66K2PHJMR8JU' where id=4; -update noar ti set v0='RBOOWYJV0UO6IEF66K2PHJMR8JU' where id=4; -update noar tt set b2='85FZDU3L632EIH9C' where id=4; -update noar ti set b2='85FZDU3L632EIH9C' where id=4; -update noar tt set v0='T9EOANQZ2W5T93NHYKQJFC73I' where id=5; -update noar ti set v0='T9EOANQZ2W5T93NHYKQJFC73I' where id=5; -update noar tt set b0='1FW1O8R5WEDYEBD5P' where id=5; -update noar ti set b0='1FW1O8R5WEDYEBD5P' where id=5; -update noar tt set v0='FSE0XKCJ5WL5T5V9Z' where id=5; -update noar ti set v0='FSE0XKCJ5WL5T5V9Z' where id=5; -update noar tt set b1='EJ43VYZK798F0OVC3AEKUR58' where id=5; -update noar ti set b1='EJ43VYZK798F0OVC3AEKUR58' where id=5; -update noar tt set v0='B7F2RBS4KDC14S3K4YDT9EOHFC5S2C7' where id=5; -update noar ti set v0='B7F2RBS4KDC14S3K4YDT9EOHFC5S2C7' where id=5; -update noar tt set b2='3A4CUB9C3K1BPYOQSC6BQYM' where id=5; -update noar ti set b2='3A4CUB9C3K1BPYOQSC6BQYM' where id=5; -update noar tt set v0='XEYSOH0L53E0ZII4IHCBD49V30LA' where id=6; -update noar ti set v0='XEYSOH0L53E0ZII4IHCBD49V30LA' where id=6; -update noar tt set b0='0LFIO0E64XWEM4MDNT' where id=6; -update noar ti set b0='0LFIO0E64XWEM4MDNT' where id=6; -update noar tt set v0='SISI8E30RFEIPYYB4GOWMNYJ8Y7R32TN' where id=6; -update noar ti set v0='SISI8E30RFEIPYYB4GOWMNYJ8Y7R32TN' where id=6; -update noar tt set b1='7V' where id=6; -update noar ti set b1='7V' where id=6; -update noar tt set v0='2H' where id=6; -update noar ti set v0='2H' where id=6; -update noar tt set b2='H7C4YNHPDQXFW70HLATM' where id=6; -update noar ti set b2='H7C4YNHPDQXFW70HLATM' where id=6; -update noar tt set v0='10Q5O525U9TTL' where id=7; -update noar ti set v0='10Q5O525U9TTL' where id=7; -update noar tt set b0='41VHZGG491TA0K79J7JTM6' where id=7; -update noar ti set b0='41VHZGG491TA0K79J7JTM6' where id=7; -update noar tt set v0='Z17IUD0INSHF47J40KB8J8T9GI' where id=7; -update noar ti set v0='Z17IUD0INSHF47J40KB8J8T9GI' where id=7; -update noar tt set b1='2' where id=7; -update noar ti set b1='2' where id=7; -update noar tt set v0='0BS325FYR2' where id=7; -update noar ti set v0='0BS325FYR2' where id=7; -update noar tt set b2='NUFVIE5W873HNMQJJM' where id=7; -update noar ti set b2='NUFVIE5W873HNMQJJM' where id=7; -update noar tt set v0='AHBC' where id=8; -update noar ti set v0='AHBC' where id=8; -update noar tt set b0='HE5M00J' where id=8; -update noar ti set b0='HE5M00J' where id=8; -update noar tt set v0='HGIR661F6T' where id=8; -update noar ti set v0='HGIR661F6T' where id=8; -update noar tt set b1='0EN1AWPW3F' where id=8; -update noar ti set b1='0EN1AWPW3F' where id=8; -update noar tt set v0='ETKRBQBSS8VLY' where id=8; -update noar ti set v0='ETKRBQBSS8VLY' where id=8; -update noar tt set b2='BCY2NTOER4' where id=8; -update noar ti set b2='BCY2NTOER4' where id=8; -update noar tt set v0='L' where id=9; -update noar ti set v0='L' where id=9; -update noar tt set b0='5QGFUOYRCMVRNJ4FZU0FS4WL' where id=9; -update noar ti set b0='5QGFUOYRCMVRNJ4FZU0FS4WL' where id=9; -update noar tt set v0='9BTNPDXOT02K9CIOEB0YP' where id=9; -update noar ti set v0='9BTNPDXOT02K9CIOEB0YP' where id=9; -update noar tt set b1='TDZXB7BL' where id=9; -update noar ti set b1='TDZXB7BL' where id=9; -update noar tt set v0='KM3IGNRGMYJQ4BXWSX' where id=9; -update noar ti set v0='KM3IGNRGMYJQ4BXWSX' where id=9; -update noar tt set b2='X5' where id=9; -update noar ti set b2='X5' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 tinyblob not null, -b1 blob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='5TGH918FE' where id=1; -update noar ti set v0='5TGH918FE' where id=1; -update noar tt set b0='DYIIPEVFFMH8D' where id=1; -update noar ti set b0='DYIIPEVFFMH8D' where id=1; -update noar tt set v0='2KQEM9RUGP361U499NHZ97YAO82' where id=1; -update noar ti set v0='2KQEM9RUGP361U499NHZ97YAO82' where id=1; -update noar tt set b1='Y8FMSVM4G5F1' where id=1; -update noar ti set b1='Y8FMSVM4G5F1' where id=1; -update noar tt set v0='3UWXF3K5QB18G6S7Q' where id=1; -update noar ti set v0='3UWXF3K5QB18G6S7Q' where id=1; -update noar tt set b2='M6IOS8B0BAY68N378IJMKX97' where id=1; -update noar ti set b2='M6IOS8B0BAY68N378IJMKX97' where id=1; -update noar tt set v0='ZQ95I7HTDYANBB9CXHFF' where id=2; -update noar ti set v0='ZQ95I7HTDYANBB9CXHFF' where id=2; -update noar tt set b0='FVMGZSRKUOHV12ZVLJNGLNH9' where id=2; -update noar ti set b0='FVMGZSRKUOHV12ZVLJNGLNH9' where id=2; -update noar tt set v0='POVX7' where id=2; -update noar ti set v0='POVX7' where id=2; -update noar tt set b1='TKXC8GB3PE3R8ZA04FX02REK576T3' where id=2; -update noar ti set b1='TKXC8GB3PE3R8ZA04FX02REK576T3' where id=2; -update noar tt set v0='2HZYBF6ZXMQEJ3JE862ZF8N' where id=2; -update noar ti set v0='2HZYBF6ZXMQEJ3JE862ZF8N' where id=2; -update noar tt set b2='FNTMLAGSSJ5ZURXB7HC' where id=2; -update noar ti set b2='FNTMLAGSSJ5ZURXB7HC' where id=2; -update noar tt set v0='3A5TTVIP25IMXQ89TLDS5856E' where id=3; -update noar ti set v0='3A5TTVIP25IMXQ89TLDS5856E' where id=3; -update noar tt set b0='V7FDONMP2IK3JH7BUE2' where id=3; -update noar ti set b0='V7FDONMP2IK3JH7BUE2' where id=3; -update noar tt set v0='4OXKBWQV' where id=3; -update noar ti set v0='4OXKBWQV' where id=3; -update noar tt set b1='OIM47J4XC2' where id=3; -update noar ti set b1='OIM47J4XC2' where id=3; -update noar tt set v0='S83N9' where id=3; -update noar ti set v0='S83N9' where id=3; -update noar tt set b2='AD1GLPXFE' where id=3; -update noar ti set b2='AD1GLPXFE' where id=3; -update noar tt set v0='BYJC7F6ZO9K' where id=4; -update noar ti set v0='BYJC7F6ZO9K' where id=4; -update noar tt set b0='7FV8LMS' where id=4; -update noar ti set b0='7FV8LMS' where id=4; -update noar tt set v0='4ISJJJN30Z' where id=4; -update noar ti set v0='4ISJJJN30Z' where id=4; -update noar tt set b1='2M4XBSVF3GC9CE3' where id=4; -update noar ti set b1='2M4XBSVF3GC9CE3' where id=4; -update noar tt set v0='9VRXVQ' where id=4; -update noar ti set v0='9VRXVQ' where id=4; -update noar tt set b2='4ZM' where id=4; -update noar ti set b2='4ZM' where id=4; -update noar tt set v0='9KSNH' where id=5; -update noar ti set v0='9KSNH' where id=5; -update noar tt set b0='86CAAUHFFSWB' where id=5; -update noar ti set b0='86CAAUHFFSWB' where id=5; -update noar tt set v0='RQVYJ8' where id=5; -update noar ti set v0='RQVYJ8' where id=5; -update noar tt set b1='XZUVE1YYQD' where id=5; -update noar ti set b1='XZUVE1YYQD' where id=5; -update noar tt set v0='X8M1YTDQ' where id=5; -update noar ti set v0='X8M1YTDQ' where id=5; -update noar tt set b2='XYV8QJVY0XVP96OCSHVUY746BXAPN11X' where id=5; -update noar ti set b2='XYV8QJVY0XVP96OCSHVUY746BXAPN11X' where id=5; -update noar tt set v0='AZA822J5YQP0D2B1ICS0P0VD' where id=6; -update noar ti set v0='AZA822J5YQP0D2B1ICS0P0VD' where id=6; -update noar tt set b0='020FSPUSEDFFVZRCEKPMD9WIMXRB' where id=6; -update noar ti set b0='020FSPUSEDFFVZRCEKPMD9WIMXRB' where id=6; -update noar tt set v0='29OXZEY7OA67E16A75KQWDYOCQQ' where id=6; -update noar ti set v0='29OXZEY7OA67E16A75KQWDYOCQQ' where id=6; -update noar tt set b1='4TGU0HYQPEQ5CTJIEHK4RE47NW' where id=6; -update noar ti set b1='4TGU0HYQPEQ5CTJIEHK4RE47NW' where id=6; -update noar tt set v0='8DVXG7OBC9L47KV3B95WMDTL' where id=6; -update noar ti set v0='8DVXG7OBC9L47KV3B95WMDTL' where id=6; -update noar tt set b2='9LJNIZ3CP' where id=6; -update noar ti set b2='9LJNIZ3CP' where id=6; -update noar tt set v0='8N3WUNAJ75E7' where id=7; -update noar ti set v0='8N3WUNAJ75E7' where id=7; -update noar tt set b0='0AGM7NDNWHNB7I' where id=7; -update noar ti set b0='0AGM7NDNWHNB7I' where id=7; -update noar tt set v0='YW0J7WVF0Q3VS3NDB22EM7' where id=7; -update noar ti set v0='YW0J7WVF0Q3VS3NDB22EM7' where id=7; -update noar tt set b1='KMRHUSYPMJEQEMKODLQ8CX4JUTDOR' where id=7; -update noar ti set b1='KMRHUSYPMJEQEMKODLQ8CX4JUTDOR' where id=7; -update noar tt set v0='T1WB9G09BQ91LO2KU39249JHH8C8R2MA' where id=7; -update noar ti set v0='T1WB9G09BQ91LO2KU39249JHH8C8R2MA' where id=7; -update noar tt set b2='NBNHZHOTEX' where id=7; -update noar ti set b2='NBNHZHOTEX' where id=7; -update noar tt set v0='5HUMGT6' where id=8; -update noar ti set v0='5HUMGT6' where id=8; -update noar tt set b0='EY8B4R7UH3RQP2IW4BQE4K590DEGK' where id=8; -update noar ti set b0='EY8B4R7UH3RQP2IW4BQE4K590DEGK' where id=8; -update noar tt set v0='1PS25C28ZSSZTJPSEWX38' where id=8; -update noar ti set v0='1PS25C28ZSSZTJPSEWX38' where id=8; -update noar tt set b1='LWWE2QKT34' where id=8; -update noar ti set b1='LWWE2QKT34' where id=8; -update noar tt set v0='FGPM7' where id=8; -update noar ti set v0='FGPM7' where id=8; -update noar tt set b2='5C6SQ3EIW8XQ62A' where id=8; -update noar ti set b2='5C6SQ3EIW8XQ62A' where id=8; -update noar tt set v0='G9I651J3AVMD9PR' where id=9; -update noar ti set v0='G9I651J3AVMD9PR' where id=9; -update noar tt set b0='UGQ6X69UB03C' where id=9; -update noar ti set b0='UGQ6X69UB03C' where id=9; -update noar tt set v0='16VPMT57FBS8P0YY7CMJF' where id=9; -update noar ti set v0='16VPMT57FBS8P0YY7CMJF' where id=9; -update noar tt set b1='KE0DUX1VW' where id=9; -update noar ti set b1='KE0DUX1VW' where id=9; -update noar tt set v0='KG4SJ3YTPRPK6Z16KJL1HJ0VAS04' where id=9; -update noar ti set v0='KG4SJ3YTPRPK6Z16KJL1HJ0VAS04' where id=9; -update noar tt set b2='BMXO3' where id=9; -update noar ti set b2='BMXO3' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 tinyblob null, -b1 blob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='R2XGIXPZIHONX15Q8PJKQ5AB' where id=1; -update noar ti set v0='R2XGIXPZIHONX15Q8PJKQ5AB' where id=1; -update noar tt set b0='F0TQXVIXKJSWTGBM5C' where id=1; -update noar ti set b0='F0TQXVIXKJSWTGBM5C' where id=1; -update noar tt set v0='1H9C8BNKSC' where id=1; -update noar ti set v0='1H9C8BNKSC' where id=1; -update noar tt set b1='TCOKC9Y9P3K2KH4N281PGZZTGV' where id=1; -update noar ti set b1='TCOKC9Y9P3K2KH4N281PGZZTGV' where id=1; -update noar tt set v0='1ZF10NQBEY0U65G4J5L' where id=1; -update noar ti set v0='1ZF10NQBEY0U65G4J5L' where id=1; -update noar tt set b2='7WNH2OS2XPM' where id=1; -update noar ti set b2='7WNH2OS2XPM' where id=1; -update noar tt set v0='D3XMXM7' where id=2; -update noar ti set v0='D3XMXM7' where id=2; -update noar tt set b0='WTNB7Q5' where id=2; -update noar ti set b0='WTNB7Q5' where id=2; -update noar tt set v0='ABO5' where id=2; -update noar ti set v0='ABO5' where id=2; -update noar tt set b1='ZL3968VKQ8JBVKH8QDL8V0FOKVSELOJ5' where id=2; -update noar ti set b1='ZL3968VKQ8JBVKH8QDL8V0FOKVSELOJ5' where id=2; -update noar tt set v0='Z23CM0EBPMLR63WIKUEPTWZ' where id=2; -update noar ti set v0='Z23CM0EBPMLR63WIKUEPTWZ' where id=2; -update noar tt set b2='9XXLMOEPD38WOB63EXANEPML' where id=2; -update noar ti set b2='9XXLMOEPD38WOB63EXANEPML' where id=2; -update noar tt set v0='STH5L7D545HIDZ1R6XZ3NZMBNTHVY' where id=3; -update noar ti set v0='STH5L7D545HIDZ1R6XZ3NZMBNTHVY' where id=3; -update noar tt set b0='TYPUVLV97A2N9' where id=3; -update noar ti set b0='TYPUVLV97A2N9' where id=3; -update noar tt set v0='MHNKFVL009I' where id=3; -update noar ti set v0='MHNKFVL009I' where id=3; -update noar tt set b1='BD7NHBPCBPSMC6BW13' where id=3; -update noar ti set b1='BD7NHBPCBPSMC6BW13' where id=3; -update noar tt set v0='6FR3LX46IVEAK9Q5WKPMHCP0P5S7DN0' where id=3; -update noar ti set v0='6FR3LX46IVEAK9Q5WKPMHCP0P5S7DN0' where id=3; -update noar tt set b2='L0EKEC1' where id=3; -update noar ti set b2='L0EKEC1' where id=3; -update noar tt set v0='483MNNYHGG2XP2DBUNHWOX' where id=4; -update noar ti set v0='483MNNYHGG2XP2DBUNHWOX' where id=4; -update noar tt set b0='XX3V9UE05MFXAGE2PGYJG5DFSLEN' where id=4; -update noar ti set b0='XX3V9UE05MFXAGE2PGYJG5DFSLEN' where id=4; -update noar tt set v0='2SCLTP8I9R7NWHU0YEMUMWIT82K' where id=4; -update noar ti set v0='2SCLTP8I9R7NWHU0YEMUMWIT82K' where id=4; -update noar tt set b1='CQEW7T5A0TG5' where id=4; -update noar ti set b1='CQEW7T5A0TG5' where id=4; -update noar tt set v0='IH2BVFNGS77B1WVZUMNTE3L' where id=4; -update noar ti set v0='IH2BVFNGS77B1WVZUMNTE3L' where id=4; -update noar tt set b2='IGS2E16017LGTLUWQIH' where id=4; -update noar ti set b2='IGS2E16017LGTLUWQIH' where id=4; -update noar tt set v0='F3L7NXAHX' where id=5; -update noar ti set v0='F3L7NXAHX' where id=5; -update noar tt set b0='FO7VS07OYO1P' where id=5; -update noar ti set b0='FO7VS07OYO1P' where id=5; -update noar tt set v0='8Y1KGDOHP3' where id=5; -update noar ti set v0='8Y1KGDOHP3' where id=5; -update noar tt set b1='CPILFN' where id=5; -update noar ti set b1='CPILFN' where id=5; -update noar tt set v0='OYL9TR5VMR8' where id=5; -update noar ti set v0='OYL9TR5VMR8' where id=5; -update noar tt set b2='RDQYG9FLZTPW1' where id=5; -update noar ti set b2='RDQYG9FLZTPW1' where id=5; -update noar tt set v0='UB8Y8YBTYBGYZR7Y' where id=6; -update noar ti set v0='UB8Y8YBTYBGYZR7Y' where id=6; -update noar tt set b0='WXUL1PZN98MLRU' where id=6; -update noar ti set b0='WXUL1PZN98MLRU' where id=6; -update noar tt set v0='NUNHMV' where id=6; -update noar ti set v0='NUNHMV' where id=6; -update noar tt set b1='3DWJ25W' where id=6; -update noar ti set b1='3DWJ25W' where id=6; -update noar tt set v0='OOUYX4G3TE3OZ3K0E5PV5URFLCQ' where id=6; -update noar ti set v0='OOUYX4G3TE3OZ3K0E5PV5URFLCQ' where id=6; -update noar tt set b2='IPEJFX6ZL6KRLXPO51K0KJIZ502' where id=6; -update noar ti set b2='IPEJFX6ZL6KRLXPO51K0KJIZ502' where id=6; -update noar tt set v0='CNV' where id=7; -update noar ti set v0='CNV' where id=7; -update noar tt set b0='M0VSGIL' where id=7; -update noar ti set b0='M0VSGIL' where id=7; -update noar tt set v0='R92B3TNW3' where id=7; -update noar ti set v0='R92B3TNW3' where id=7; -update noar tt set b1='0OT4REN' where id=7; -update noar ti set b1='0OT4REN' where id=7; -update noar tt set v0='CQBG4KTR9YISQLQ0ZNUNV0CFTRTFZXL' where id=7; -update noar ti set v0='CQBG4KTR9YISQLQ0ZNUNV0CFTRTFZXL' where id=7; -update noar tt set b2='ZL95VY321YGZA40T10I2N1TCDLCKL02' where id=7; -update noar ti set b2='ZL95VY321YGZA40T10I2N1TCDLCKL02' where id=7; -update noar tt set v0='WNAH6J4ZQBV' where id=8; -update noar ti set v0='WNAH6J4ZQBV' where id=8; -update noar tt set b0='CMKK254WZ1Y' where id=8; -update noar ti set b0='CMKK254WZ1Y' where id=8; -update noar tt set v0='7ZVR0GI4NXFM' where id=8; -update noar ti set v0='7ZVR0GI4NXFM' where id=8; -update noar tt set b1='TJ3BJ' where id=8; -update noar ti set b1='TJ3BJ' where id=8; -update noar tt set v0='S7YOGPZCMR' where id=8; -update noar ti set v0='S7YOGPZCMR' where id=8; -update noar tt set b2='YJYVTDC7L' where id=8; -update noar ti set b2='YJYVTDC7L' where id=8; -update noar tt set v0='L87Q3SGF3' where id=9; -update noar ti set v0='L87Q3SGF3' where id=9; -update noar tt set b0='7J2R72I7OJ9KFX6MMG43XP0PKLDU8' where id=9; -update noar ti set b0='7J2R72I7OJ9KFX6MMG43XP0PKLDU8' where id=9; -update noar tt set v0='7UZSISTY3N6SVXUW2YMACI1OBS17' where id=9; -update noar ti set v0='7UZSISTY3N6SVXUW2YMACI1OBS17' where id=9; -update noar tt set b1='QUQEFBU0MLAR8O4SVRK7BN40RUYBC' where id=9; -update noar ti set b1='QUQEFBU0MLAR8O4SVRK7BN40RUYBC' where id=9; -update noar tt set v0='MF4TJ3FZLA4LF7L8KT3BI0' where id=9; -update noar ti set v0='MF4TJ3FZLA4LF7L8KT3BI0' where id=9; -update noar tt set b2='2QY18PV' where id=9; -update noar ti set b2='2QY18PV' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 tinyblob null, -b1 blob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='RDN1LDPADLY2W' where id=1; -update noar ti set v0='RDN1LDPADLY2W' where id=1; -update noar tt set b0='TN' where id=1; -update noar ti set b0='TN' where id=1; -update noar tt set v0='94JQFG63HHL79LOTLS5MSN' where id=1; -update noar ti set v0='94JQFG63HHL79LOTLS5MSN' where id=1; -update noar tt set b1='B' where id=1; -update noar ti set b1='B' where id=1; -update noar tt set v0='XFFOMZ0VK6' where id=1; -update noar ti set v0='XFFOMZ0VK6' where id=1; -update noar tt set b2='9H685MH3J3WCAMS1JDUWCT' where id=1; -update noar ti set b2='9H685MH3J3WCAMS1JDUWCT' where id=1; -update noar tt set v0='UBFNF46GSMK2' where id=2; -update noar ti set v0='UBFNF46GSMK2' where id=2; -update noar tt set b0='4A4HDRSW3YV9HHPSW2ROTRS52XT' where id=2; -update noar ti set b0='4A4HDRSW3YV9HHPSW2ROTRS52XT' where id=2; -update noar tt set v0='P486AR0LXI51NMOPWQX' where id=2; -update noar ti set v0='P486AR0LXI51NMOPWQX' where id=2; -update noar tt set b1='QZROKQ6WKTJUJOD51RDBIKT98AQ' where id=2; -update noar ti set b1='QZROKQ6WKTJUJOD51RDBIKT98AQ' where id=2; -update noar tt set v0='JCCD' where id=2; -update noar ti set v0='JCCD' where id=2; -update noar tt set b2='YYTM4Z' where id=2; -update noar ti set b2='YYTM4Z' where id=2; -update noar tt set v0='GRMFU6ZODW6D92DQ' where id=3; -update noar ti set v0='GRMFU6ZODW6D92DQ' where id=3; -update noar tt set b0='5EIR9U2MP6B5VYRET0ERFF1VTQC6G' where id=3; -update noar ti set b0='5EIR9U2MP6B5VYRET0ERFF1VTQC6G' where id=3; -update noar tt set v0='U323Y8P41QIJNEB' where id=3; -update noar ti set v0='U323Y8P41QIJNEB' where id=3; -update noar tt set b1='ZR3COMRCTO1AFD411EWU5050ZFFV0' where id=3; -update noar ti set b1='ZR3COMRCTO1AFD411EWU5050ZFFV0' where id=3; -update noar tt set v0='RCK65BO7UK2STYYTEM1DFG8PQ' where id=3; -update noar ti set v0='RCK65BO7UK2STYYTEM1DFG8PQ' where id=3; -update noar tt set b2='OE5Q3IJ5SHSI5LJY09KRRZX2ZM9975' where id=3; -update noar ti set b2='OE5Q3IJ5SHSI5LJY09KRRZX2ZM9975' where id=3; -update noar tt set v0='QXS7A7MDO2X' where id=4; -update noar ti set v0='QXS7A7MDO2X' where id=4; -update noar tt set b0='OSHMCG8IE47QMARYCUOVWGT8RBF' where id=4; -update noar ti set b0='OSHMCG8IE47QMARYCUOVWGT8RBF' where id=4; -update noar tt set v0='KYXCP05FECRY2UQW' where id=4; -update noar ti set v0='KYXCP05FECRY2UQW' where id=4; -update noar tt set b1='T3030EJLR0WJ77H0TXVDJVSWO91R0' where id=4; -update noar ti set b1='T3030EJLR0WJ77H0TXVDJVSWO91R0' where id=4; -update noar tt set v0='T2RJGS8GKFFES7KZNO' where id=4; -update noar ti set v0='T2RJGS8GKFFES7KZNO' where id=4; -update noar tt set b2='P1GZFDM' where id=4; -update noar ti set b2='P1GZFDM' where id=4; -update noar tt set v0='TA4K63DFCOWS45TQCS3WXQ0RHHC' where id=5; -update noar ti set v0='TA4K63DFCOWS45TQCS3WXQ0RHHC' where id=5; -update noar tt set b0='TTA2H9Y5045BF90D8M0NCNDB4S' where id=5; -update noar ti set b0='TTA2H9Y5045BF90D8M0NCNDB4S' where id=5; -update noar tt set v0='CVB1UI27YM0W2VO8BH6AOI' where id=5; -update noar ti set v0='CVB1UI27YM0W2VO8BH6AOI' where id=5; -update noar tt set b1='9ZSAE4E7RW955E62RJVD6E0HPZL3' where id=5; -update noar ti set b1='9ZSAE4E7RW955E62RJVD6E0HPZL3' where id=5; -update noar tt set v0='G3IXYHV3QJF2S5M3NAO2DFRAO0Y0IDWS' where id=5; -update noar ti set v0='G3IXYHV3QJF2S5M3NAO2DFRAO0Y0IDWS' where id=5; -update noar tt set b2='UUPKWLRM758VX55ECP' where id=5; -update noar ti set b2='UUPKWLRM758VX55ECP' where id=5; -update noar tt set v0='J52OAHYW3XA' where id=6; -update noar ti set v0='J52OAHYW3XA' where id=6; -update noar tt set b0='V5L4RCKT5L8UG8OMNNSL0XD55ZIHXLL' where id=6; -update noar ti set b0='V5L4RCKT5L8UG8OMNNSL0XD55ZIHXLL' where id=6; -update noar tt set v0='MGHXMAGPGHBJRMD62IFVL8SD' where id=6; -update noar ti set v0='MGHXMAGPGHBJRMD62IFVL8SD' where id=6; -update noar tt set b1='8NNHVX5A8' where id=6; -update noar ti set b1='8NNHVX5A8' where id=6; -update noar tt set v0='W4TO2I' where id=6; -update noar ti set v0='W4TO2I' where id=6; -update noar tt set b2='LG8XZRO0CCCYF7GVLBK81' where id=6; -update noar ti set b2='LG8XZRO0CCCYF7GVLBK81' where id=6; -update noar tt set v0='D2R5VD6P' where id=7; -update noar ti set v0='D2R5VD6P' where id=7; -update noar tt set b0='GXN1XNP38EWS1T0' where id=7; -update noar ti set b0='GXN1XNP38EWS1T0' where id=7; -update noar tt set v0='OW1YWOP7E2ATOU07TKJJ5BX2E9P55W' where id=7; -update noar ti set v0='OW1YWOP7E2ATOU07TKJJ5BX2E9P55W' where id=7; -update noar tt set b1='EZUTM6BMDS15LXBANEBEG' where id=7; -update noar ti set b1='EZUTM6BMDS15LXBANEBEG' where id=7; -update noar tt set v0='1OD0FGWZM0398YO7261QN8HYK4IVBFY' where id=7; -update noar ti set v0='1OD0FGWZM0398YO7261QN8HYK4IVBFY' where id=7; -update noar tt set b2='9LB1QPXSBRBJBJSIUC4H' where id=7; -update noar ti set b2='9LB1QPXSBRBJBJSIUC4H' where id=7; -update noar tt set v0='YUSN0UNMQ' where id=8; -update noar ti set v0='YUSN0UNMQ' where id=8; -update noar tt set b0='C636LCYT3C7EW9JY1FERJWAZEJXQR3' where id=8; -update noar ti set b0='C636LCYT3C7EW9JY1FERJWAZEJXQR3' where id=8; -update noar tt set v0='QK8FQP857BPQQAP' where id=8; -update noar ti set v0='QK8FQP857BPQQAP' where id=8; -update noar tt set b1='X2R3KPK3RTOT1MQ4G0' where id=8; -update noar ti set b1='X2R3KPK3RTOT1MQ4G0' where id=8; -update noar tt set v0='V' where id=8; -update noar ti set v0='V' where id=8; -update noar tt set b2='9M0WH6C' where id=8; -update noar ti set b2='9M0WH6C' where id=8; -update noar tt set v0='JHY53VRPGYJQRISY4JFSG6UMUUL' where id=9; -update noar ti set v0='JHY53VRPGYJQRISY4JFSG6UMUUL' where id=9; -update noar tt set b0='1R9G1GA2REZXA' where id=9; -update noar ti set b0='1R9G1GA2REZXA' where id=9; -update noar tt set v0='X4E8R20G5L5KV' where id=9; -update noar ti set v0='X4E8R20G5L5KV' where id=9; -update noar tt set b1='EZMHK5ZWEJQUBCD6TY0TUZKJJQKVHYH' where id=9; -update noar ti set b1='EZMHK5ZWEJQUBCD6TY0TUZKJJQKVHYH' where id=9; -update noar tt set v0='A' where id=9; -update noar ti set v0='A' where id=9; -update noar tt set b2='DLR4SONDNKNBV' where id=9; -update noar ti set b2='DLR4SONDNKNBV' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 tinyblob not null, -b1 blob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='ZZ8D76B8VLFFBMTF8W7RURN7J06NKQL' where id=1; -update noar ti set v0='ZZ8D76B8VLFFBMTF8W7RURN7J06NKQL' where id=1; -update noar tt set b0='6J0OJOB0K2RK9UCXTP' where id=1; -update noar ti set b0='6J0OJOB0K2RK9UCXTP' where id=1; -update noar tt set v0='Y198CUIDA92LXYR4' where id=1; -update noar ti set v0='Y198CUIDA92LXYR4' where id=1; -update noar tt set b1='RPI1K02DQA4QVWMWVTQMP3ZT3K6VW7O' where id=1; -update noar ti set b1='RPI1K02DQA4QVWMWVTQMP3ZT3K6VW7O' where id=1; -update noar tt set v0='4E' where id=1; -update noar ti set v0='4E' where id=1; -update noar tt set b2='BC5DQ2YNCXWTH9P70W2E4PA0WR2LR' where id=1; -update noar ti set b2='BC5DQ2YNCXWTH9P70W2E4PA0WR2LR' where id=1; -update noar tt set v0='H5AODKXM' where id=2; -update noar ti set v0='H5AODKXM' where id=2; -update noar tt set b0='9237HY6G145L' where id=2; -update noar ti set b0='9237HY6G145L' where id=2; -update noar tt set v0='BNIIJO5AR29BY9L3CPGLP2' where id=2; -update noar ti set v0='BNIIJO5AR29BY9L3CPGLP2' where id=2; -update noar tt set b1='Z7K0SRRD06BA' where id=2; -update noar ti set b1='Z7K0SRRD06BA' where id=2; -update noar tt set v0='47858' where id=2; -update noar ti set v0='47858' where id=2; -update noar tt set b2='CBGVTSW8EPR7JOEZF4GOGL' where id=2; -update noar ti set b2='CBGVTSW8EPR7JOEZF4GOGL' where id=2; -update noar tt set v0='FWYWUGEEMCDQT1FQAJF2I0CTJ' where id=3; -update noar ti set v0='FWYWUGEEMCDQT1FQAJF2I0CTJ' where id=3; -update noar tt set b0='RHKKFGGD4BL' where id=3; -update noar ti set b0='RHKKFGGD4BL' where id=3; -update noar tt set v0='JGP3B3NXXYEDURZQMXA4OOK' where id=3; -update noar ti set v0='JGP3B3NXXYEDURZQMXA4OOK' where id=3; -update noar tt set b1='ZQ9MCC2X6DUAT' where id=3; -update noar ti set b1='ZQ9MCC2X6DUAT' where id=3; -update noar tt set v0='AGKOH223XDS2WO' where id=3; -update noar ti set v0='AGKOH223XDS2WO' where id=3; -update noar tt set b2='PRHBD2TULPRGZ4VPEM941UDMQOQYOMY4' where id=3; -update noar ti set b2='PRHBD2TULPRGZ4VPEM941UDMQOQYOMY4' where id=3; -update noar tt set v0='HXGZ688SML7MB51N7PU1QS1CKIVGHU70' where id=4; -update noar ti set v0='HXGZ688SML7MB51N7PU1QS1CKIVGHU70' where id=4; -update noar tt set b0='XOI6VW96LHDK9YMY5UKLY4729' where id=4; -update noar ti set b0='XOI6VW96LHDK9YMY5UKLY4729' where id=4; -update noar tt set v0='XU78695F80KHTO7TEJ8B' where id=4; -update noar ti set v0='XU78695F80KHTO7TEJ8B' where id=4; -update noar tt set b1='VAXTK0LR69LIFBR1' where id=4; -update noar ti set b1='VAXTK0LR69LIFBR1' where id=4; -update noar tt set v0='Q' where id=4; -update noar ti set v0='Q' where id=4; -update noar tt set b2='E7YS30R0KZSWM37CQD0JLPASF6SUMO' where id=4; -update noar ti set b2='E7YS30R0KZSWM37CQD0JLPASF6SUMO' where id=4; -update noar tt set v0='NKTZ' where id=5; -update noar ti set v0='NKTZ' where id=5; -update noar tt set b0='GGUV67DID6TCD4EYR58KG4Q8I7J' where id=5; -update noar ti set b0='GGUV67DID6TCD4EYR58KG4Q8I7J' where id=5; -update noar tt set v0='P7W86CHFJ6HHM6WPB42J5C1E' where id=5; -update noar ti set v0='P7W86CHFJ6HHM6WPB42J5C1E' where id=5; -update noar tt set b1='J0P8DUG3Q06X5JXJ' where id=5; -update noar ti set b1='J0P8DUG3Q06X5JXJ' where id=5; -update noar tt set v0='5T0G486U3P2MGAGMR7WROWJSJ18T1OU4' where id=5; -update noar ti set v0='5T0G486U3P2MGAGMR7WROWJSJ18T1OU4' where id=5; -update noar tt set b2='KWCM' where id=5; -update noar ti set b2='KWCM' where id=5; -update noar tt set v0='S2L6RJGZG837U' where id=6; -update noar ti set v0='S2L6RJGZG837U' where id=6; -update noar tt set b0='9D9FMUS3UOVNAJUYEGKJBOVRLNRDC05D' where id=6; -update noar ti set b0='9D9FMUS3UOVNAJUYEGKJBOVRLNRDC05D' where id=6; -update noar tt set v0='6ZZHECEI52F313T2' where id=6; -update noar ti set v0='6ZZHECEI52F313T2' where id=6; -update noar tt set b1='5GMOCX7SUU' where id=6; -update noar ti set b1='5GMOCX7SUU' where id=6; -update noar tt set v0='FJ8DGZGCPBX4Q01RD2BDA' where id=6; -update noar ti set v0='FJ8DGZGCPBX4Q01RD2BDA' where id=6; -update noar tt set b2='LK96K0V9QNJS1JNSW' where id=6; -update noar ti set b2='LK96K0V9QNJS1JNSW' where id=6; -update noar tt set v0='CQ1WIPZISC188YMKA' where id=7; -update noar ti set v0='CQ1WIPZISC188YMKA' where id=7; -update noar tt set b0='AKBTBDCEVWW7' where id=7; -update noar ti set b0='AKBTBDCEVWW7' where id=7; -update noar tt set v0='511VERZBD22JZ6ETJJ0UXCZB2249TZ9' where id=7; -update noar ti set v0='511VERZBD22JZ6ETJJ0UXCZB2249TZ9' where id=7; -update noar tt set b1='DJJ2HODYS' where id=7; -update noar ti set b1='DJJ2HODYS' where id=7; -update noar tt set v0='JJUVP90KR9FD6' where id=7; -update noar ti set v0='JJUVP90KR9FD6' where id=7; -update noar tt set b2='LBMOOPR8332YZ8SGUQ884YS3P6MVD' where id=7; -update noar ti set b2='LBMOOPR8332YZ8SGUQ884YS3P6MVD' where id=7; -update noar tt set v0='ESN6E0' where id=8; -update noar ti set v0='ESN6E0' where id=8; -update noar tt set b0='BGG8Z' where id=8; -update noar ti set b0='BGG8Z' where id=8; -update noar tt set v0='R3XFXIO7J3VR' where id=8; -update noar ti set v0='R3XFXIO7J3VR' where id=8; -update noar tt set b1='P7IRB' where id=8; -update noar ti set b1='P7IRB' where id=8; -update noar tt set v0='F0R33BXEC87EVTYIZF' where id=8; -update noar ti set v0='F0R33BXEC87EVTYIZF' where id=8; -update noar tt set b2='OEXVB93OKIAX6HCC7K9XH3M9LJL' where id=8; -update noar ti set b2='OEXVB93OKIAX6HCC7K9XH3M9LJL' where id=8; -update noar tt set v0='INLH6' where id=9; -update noar ti set v0='INLH6' where id=9; -update noar tt set b0='TY' where id=9; -update noar ti set b0='TY' where id=9; -update noar tt set v0='G79ENEPDWJTIT57CKVLI' where id=9; -update noar ti set v0='G79ENEPDWJTIT57CKVLI' where id=9; -update noar tt set b1='1OAP4I2VXAVDD2J2SSXE1MKIRPD50AOO' where id=9; -update noar ti set b1='1OAP4I2VXAVDD2J2SSXE1MKIRPD50AOO' where id=9; -update noar tt set v0='TSEM89X' where id=9; -update noar ti set v0='TSEM89X' where id=9; -update noar tt set b2='NUAP4MRQOP0Z46Y0' where id=9; -update noar ti set b2='NUAP4MRQOP0Z46Y0' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 tinyblob not null, -b1 blob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='2CZ5RH5VV24WM3MWX9E68DSVG10W7Q0' where id=1; -update noar ti set v0='2CZ5RH5VV24WM3MWX9E68DSVG10W7Q0' where id=1; -update noar tt set b0='X1FV2B' where id=1; -update noar ti set b0='X1FV2B' where id=1; -update noar tt set v0='4OL6' where id=1; -update noar ti set v0='4OL6' where id=1; -update noar tt set b1='N9HG8GGYQ7GE0HT29YN0CGFNAXY9' where id=1; -update noar ti set b1='N9HG8GGYQ7GE0HT29YN0CGFNAXY9' where id=1; -update noar tt set v0='K2QX8ZDC5YWU' where id=1; -update noar ti set v0='K2QX8ZDC5YWU' where id=1; -update noar tt set b2='1Y6CGI5ZU6QNVWT' where id=1; -update noar ti set b2='1Y6CGI5ZU6QNVWT' where id=1; -update noar tt set v0='L8NG9D7IOKGBF8WVL0FNCAL9IJOZTNC' where id=2; -update noar ti set v0='L8NG9D7IOKGBF8WVL0FNCAL9IJOZTNC' where id=2; -update noar tt set b0='66Y' where id=2; -update noar ti set b0='66Y' where id=2; -update noar tt set v0='DS2VN4WL0M35A3UUZIBL0X3' where id=2; -update noar ti set v0='DS2VN4WL0M35A3UUZIBL0X3' where id=2; -update noar tt set b1='ZA6VGOH3ANO1849RVMT' where id=2; -update noar ti set b1='ZA6VGOH3ANO1849RVMT' where id=2; -update noar tt set v0='YOTY' where id=2; -update noar ti set v0='YOTY' where id=2; -update noar tt set b2='264E7IB' where id=2; -update noar ti set b2='264E7IB' where id=2; -update noar tt set v0='P' where id=3; -update noar ti set v0='P' where id=3; -update noar tt set b0='BZ' where id=3; -update noar ti set b0='BZ' where id=3; -update noar tt set v0='HEW' where id=3; -update noar ti set v0='HEW' where id=3; -update noar tt set b1='GFM4WVNW8IB68MLE' where id=3; -update noar ti set b1='GFM4WVNW8IB68MLE' where id=3; -update noar tt set v0='5IVJ52WKG7RZ1KTOQYVJTZFBJ3AQVO' where id=3; -update noar ti set v0='5IVJ52WKG7RZ1KTOQYVJTZFBJ3AQVO' where id=3; -update noar tt set b2='0H6QSY6AAC35E' where id=3; -update noar ti set b2='0H6QSY6AAC35E' where id=3; -update noar tt set v0='LRN90EE76VR6A8VUX5JHYRE0' where id=4; -update noar ti set v0='LRN90EE76VR6A8VUX5JHYRE0' where id=4; -update noar tt set b0='K85C7K2DYMTTU5K5JMA' where id=4; -update noar ti set b0='K85C7K2DYMTTU5K5JMA' where id=4; -update noar tt set v0='QP7TCXMYEGH7NIUKNYA8IDIS8ZV0' where id=4; -update noar ti set v0='QP7TCXMYEGH7NIUKNYA8IDIS8ZV0' where id=4; -update noar tt set b1='ECP5SYHQHFMO5' where id=4; -update noar ti set b1='ECP5SYHQHFMO5' where id=4; -update noar tt set v0='BGJCFHKAIY2OU7SWV' where id=4; -update noar ti set v0='BGJCFHKAIY2OU7SWV' where id=4; -update noar tt set b2='W40RECBSDLYEQ499' where id=4; -update noar ti set b2='W40RECBSDLYEQ499' where id=4; -update noar tt set v0='WYC3FTPGBASMDRJCSWQGSA4ETQ' where id=5; -update noar ti set v0='WYC3FTPGBASMDRJCSWQGSA4ETQ' where id=5; -update noar tt set b0='EKWRHT2' where id=5; -update noar ti set b0='EKWRHT2' where id=5; -update noar tt set v0='VH6JW0HNVEZJTLHPEISH6' where id=5; -update noar ti set v0='VH6JW0HNVEZJTLHPEISH6' where id=5; -update noar tt set b1='0C78Y1KXW2DQHUFGKI50CH5GFA2152U' where id=5; -update noar ti set b1='0C78Y1KXW2DQHUFGKI50CH5GFA2152U' where id=5; -update noar tt set v0='N88UGE0' where id=5; -update noar ti set v0='N88UGE0' where id=5; -update noar tt set b2='JAYD1RTVX6ENRE2HKEGEMK9MJ3LT' where id=5; -update noar ti set b2='JAYD1RTVX6ENRE2HKEGEMK9MJ3LT' where id=5; -update noar tt set v0='1DKTMGV8ZIJFY70' where id=6; -update noar ti set v0='1DKTMGV8ZIJFY70' where id=6; -update noar tt set b0='BC07R3' where id=6; -update noar ti set b0='BC07R3' where id=6; -update noar tt set v0='NS09OAMX96XDSJTCXJO29PN4JO0' where id=6; -update noar ti set v0='NS09OAMX96XDSJTCXJO29PN4JO0' where id=6; -update noar tt set b1='WCP5SITMIL29E69EWSAEI3B' where id=6; -update noar ti set b1='WCP5SITMIL29E69EWSAEI3B' where id=6; -update noar tt set v0='IHK7WN8KFMK756IKZLKEP0' where id=6; -update noar ti set v0='IHK7WN8KFMK756IKZLKEP0' where id=6; -update noar tt set b2='WQWBIX31' where id=6; -update noar ti set b2='WQWBIX31' where id=6; -update noar tt set v0='CEDR9V9LA531JSHH6XP0PVD' where id=7; -update noar ti set v0='CEDR9V9LA531JSHH6XP0PVD' where id=7; -update noar tt set b0='CRRISU2K9' where id=7; -update noar ti set b0='CRRISU2K9' where id=7; -update noar tt set v0='4' where id=7; -update noar ti set v0='4' where id=7; -update noar tt set b1='OX' where id=7; -update noar ti set b1='OX' where id=7; -update noar tt set v0='WOS8D9XMOAYXXQKLKZS8U35XUF7X' where id=7; -update noar ti set v0='WOS8D9XMOAYXXQKLKZS8U35XUF7X' where id=7; -update noar tt set b2='PMC2GMSSNRCAK8CS846DC2' where id=7; -update noar ti set b2='PMC2GMSSNRCAK8CS846DC2' where id=7; -update noar tt set v0='41GT' where id=8; -update noar ti set v0='41GT' where id=8; -update noar tt set b0='LA6EA7OJLYS2TEZGJLKVXM' where id=8; -update noar ti set b0='LA6EA7OJLYS2TEZGJLKVXM' where id=8; -update noar tt set v0='T11M0VBTGOTC7' where id=8; -update noar ti set v0='T11M0VBTGOTC7' where id=8; -update noar tt set b1='65YZD8QBVH8NYKLCJ0CSX452B1RANUY7' where id=8; -update noar ti set b1='65YZD8QBVH8NYKLCJ0CSX452B1RANUY7' where id=8; -update noar tt set v0='2FZDE35RKUV3R7BDMHAE' where id=8; -update noar ti set v0='2FZDE35RKUV3R7BDMHAE' where id=8; -update noar tt set b2='F1C9OR2HWIZ1LZVS57B' where id=8; -update noar ti set b2='F1C9OR2HWIZ1LZVS57B' where id=8; -update noar tt set v0='SDMYKH4BPLWPWMWLO8RKXRZYI' where id=9; -update noar ti set v0='SDMYKH4BPLWPWMWLO8RKXRZYI' where id=9; -update noar tt set b0='24PNSZGAS8SXGXTP' where id=9; -update noar ti set b0='24PNSZGAS8SXGXTP' where id=9; -update noar tt set v0='IJIYFZX0QA49' where id=9; -update noar ti set v0='IJIYFZX0QA49' where id=9; -update noar tt set b1='LE12M0LRSYF4I8NN4OZ0EPJBPXVJJF' where id=9; -update noar ti set b1='LE12M0LRSYF4I8NN4OZ0EPJBPXVJJF' where id=9; -update noar tt set v0='LMKGF2YF' where id=9; -update noar ti set v0='LMKGF2YF' where id=9; -update noar tt set b2='DB63DA0HYCQCEAQ7C2BQO29' where id=9; -update noar ti set b2='DB63DA0HYCQCEAQ7C2BQO29' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 tinyblob null, -b1 blob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='EVAQN12PBZJE1JVM04C05IIL6GFWS' where id=1; -update noar ti set v0='EVAQN12PBZJE1JVM04C05IIL6GFWS' where id=1; -update noar tt set b0='3IZ5JC5VC32MCUHKMFU6KF46IANYZ' where id=1; -update noar ti set b0='3IZ5JC5VC32MCUHKMFU6KF46IANYZ' where id=1; -update noar tt set v0='EA01' where id=1; -update noar ti set v0='EA01' where id=1; -update noar tt set b1='5LGXTRUYYSQGN8BI1EPQ' where id=1; -update noar ti set b1='5LGXTRUYYSQGN8BI1EPQ' where id=1; -update noar tt set v0='BMWJ2ICLHBUBXQMDFUJHTDZLMSRP' where id=1; -update noar ti set v0='BMWJ2ICLHBUBXQMDFUJHTDZLMSRP' where id=1; -update noar tt set b2='J2JQI8RJ8IOTAZHTND6Y29G2SGJJSXF9' where id=1; -update noar ti set b2='J2JQI8RJ8IOTAZHTND6Y29G2SGJJSXF9' where id=1; -update noar tt set v0='SRAYZ5RBY4SFKH4AMSXRS25J1VMG' where id=2; -update noar ti set v0='SRAYZ5RBY4SFKH4AMSXRS25J1VMG' where id=2; -update noar tt set b0='D94NCPFQQQCPIE1TE2G' where id=2; -update noar ti set b0='D94NCPFQQQCPIE1TE2G' where id=2; -update noar tt set v0='D' where id=2; -update noar ti set v0='D' where id=2; -update noar tt set b1='M6FOQ5IMOH' where id=2; -update noar ti set b1='M6FOQ5IMOH' where id=2; -update noar tt set v0='CV' where id=2; -update noar ti set v0='CV' where id=2; -update noar tt set b2='5GSOB0UCF4XG' where id=2; -update noar ti set b2='5GSOB0UCF4XG' where id=2; -update noar tt set v0='TNRA2XXPBI' where id=3; -update noar ti set v0='TNRA2XXPBI' where id=3; -update noar tt set b0='1LS63JCEJBTLL4KGCQ8N3ZYS2WLN' where id=3; -update noar ti set b0='1LS63JCEJBTLL4KGCQ8N3ZYS2WLN' where id=3; -update noar tt set v0='HVEI2' where id=3; -update noar ti set v0='HVEI2' where id=3; -update noar tt set b1='G20MDR85O0ACKEZT' where id=3; -update noar ti set b1='G20MDR85O0ACKEZT' where id=3; -update noar tt set v0='P7328SD5HM794AMY' where id=3; -update noar ti set v0='P7328SD5HM794AMY' where id=3; -update noar tt set b2='2ROQFG68JQYLCBVCTK9OFP8G' where id=3; -update noar ti set b2='2ROQFG68JQYLCBVCTK9OFP8G' where id=3; -update noar tt set v0='WN3AIRV5ITL' where id=4; -update noar ti set v0='WN3AIRV5ITL' where id=4; -update noar tt set b0='CSC7HBU' where id=4; -update noar ti set b0='CSC7HBU' where id=4; -update noar tt set v0='8L7F7BLUDIP0UXAE2FAMHCVG0BVTFAU8' where id=4; -update noar ti set v0='8L7F7BLUDIP0UXAE2FAMHCVG0BVTFAU8' where id=4; -update noar tt set b1='TS2K1JLQKU7RS7ULFV' where id=4; -update noar ti set b1='TS2K1JLQKU7RS7ULFV' where id=4; -update noar tt set v0='RYUB49CTP9' where id=4; -update noar ti set v0='RYUB49CTP9' where id=4; -update noar tt set b2='7RWPY9O20MYJJXKAYO4XYT0E' where id=4; -update noar ti set b2='7RWPY9O20MYJJXKAYO4XYT0E' where id=4; -update noar tt set v0='C2W4L6F7OLPHEOYBRX89TANBTQD' where id=5; -update noar ti set v0='C2W4L6F7OLPHEOYBRX89TANBTQD' where id=5; -update noar tt set b0='0G6I1NQIOBE' where id=5; -update noar ti set b0='0G6I1NQIOBE' where id=5; -update noar tt set v0='9BMGYUAOBGSSACLSXXXP' where id=5; -update noar ti set v0='9BMGYUAOBGSSACLSXXXP' where id=5; -update noar tt set b1='5AKX5' where id=5; -update noar ti set b1='5AKX5' where id=5; -update noar tt set v0='BMA7HYV' where id=5; -update noar ti set v0='BMA7HYV' where id=5; -update noar tt set b2='TUGY5II9QVVW77L6QZ799NP5TMH' where id=5; -update noar ti set b2='TUGY5II9QVVW77L6QZ799NP5TMH' where id=5; -update noar tt set v0='J2OSPZWSTVY' where id=6; -update noar ti set v0='J2OSPZWSTVY' where id=6; -update noar tt set b0='XW2XUK1JSAI' where id=6; -update noar ti set b0='XW2XUK1JSAI' where id=6; -update noar tt set v0='13B5S7628U3H660R' where id=6; -update noar ti set v0='13B5S7628U3H660R' where id=6; -update noar tt set b1='CL9YZ5499ZWEB6V95LEYCZ8XV' where id=6; -update noar ti set b1='CL9YZ5499ZWEB6V95LEYCZ8XV' where id=6; -update noar tt set v0='8HP01RHF77L7PCMFSS2QFZW3K' where id=6; -update noar ti set v0='8HP01RHF77L7PCMFSS2QFZW3K' where id=6; -update noar tt set b2='L55PAF7DAYW3L' where id=6; -update noar ti set b2='L55PAF7DAYW3L' where id=6; -update noar tt set v0='QRRBU' where id=7; -update noar ti set v0='QRRBU' where id=7; -update noar tt set b0='W71' where id=7; -update noar ti set b0='W71' where id=7; -update noar tt set v0='9V7UOY' where id=7; -update noar ti set v0='9V7UOY' where id=7; -update noar tt set b1='W3882CQ3X3UJN150MQD1M' where id=7; -update noar ti set b1='W3882CQ3X3UJN150MQD1M' where id=7; -update noar tt set v0='UYXHJY2TNCSWXPGGDF8RBGVQ4LM' where id=7; -update noar ti set v0='UYXHJY2TNCSWXPGGDF8RBGVQ4LM' where id=7; -update noar tt set b2='BE9TGMD1B6E9B' where id=7; -update noar ti set b2='BE9TGMD1B6E9B' where id=7; -update noar tt set v0='WONPYSTO5' where id=8; -update noar ti set v0='WONPYSTO5' where id=8; -update noar tt set b0='SD24QLJK4BR1SM3GT2JKLQGLQ65' where id=8; -update noar ti set b0='SD24QLJK4BR1SM3GT2JKLQGLQ65' where id=8; -update noar tt set v0='Z' where id=8; -update noar ti set v0='Z' where id=8; -update noar tt set b1='UW888Q6J' where id=8; -update noar ti set b1='UW888Q6J' where id=8; -update noar tt set v0='0VP7N7N' where id=8; -update noar ti set v0='0VP7N7N' where id=8; -update noar tt set b2='VQ' where id=8; -update noar ti set b2='VQ' where id=8; -update noar tt set v0='M9' where id=9; -update noar ti set v0='M9' where id=9; -update noar tt set b0='JTBH6ZYBQ0K14DUB8ATRH' where id=9; -update noar ti set b0='JTBH6ZYBQ0K14DUB8ATRH' where id=9; -update noar tt set v0='DKWX95RZVA7NMBCAM2SRLLWBA2V' where id=9; -update noar ti set v0='DKWX95RZVA7NMBCAM2SRLLWBA2V' where id=9; -update noar tt set b1='4VT00IPDUKI3' where id=9; -update noar ti set b1='4VT00IPDUKI3' where id=9; -update noar tt set v0='JUDG2P0Q8H15J4FGVYW1KFVEG' where id=9; -update noar ti set v0='JUDG2P0Q8H15J4FGVYW1KFVEG' where id=9; -update noar tt set b2='354467' where id=9; -update noar ti set b2='354467' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 tinyblob null, -b1 blob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='BYET' where id=1; -update noar ti set v0='BYET' where id=1; -update noar tt set b0='PXRAQCV856SNE' where id=1; -update noar ti set b0='PXRAQCV856SNE' where id=1; -update noar tt set v0='JWK5RCYMK800H40OUF6G92KG2OJ1LG' where id=1; -update noar ti set v0='JWK5RCYMK800H40OUF6G92KG2OJ1LG' where id=1; -update noar tt set b1='JX8LZI7E9KZN' where id=1; -update noar ti set b1='JX8LZI7E9KZN' where id=1; -update noar tt set v0='P9QJFO5' where id=1; -update noar ti set v0='P9QJFO5' where id=1; -update noar tt set b2='8SKV8S9Z8N0HDDNYQNB3GUF' where id=1; -update noar ti set b2='8SKV8S9Z8N0HDDNYQNB3GUF' where id=1; -update noar tt set v0='KYVSRLP6037JRMDAGQBJMI2' where id=2; -update noar ti set v0='KYVSRLP6037JRMDAGQBJMI2' where id=2; -update noar tt set b0='WATMSCTME30ZTLNGN42JJI2' where id=2; -update noar ti set b0='WATMSCTME30ZTLNGN42JJI2' where id=2; -update noar tt set v0='X18BL7PGFQ1TZHYETTDHB5UVWC8' where id=2; -update noar ti set v0='X18BL7PGFQ1TZHYETTDHB5UVWC8' where id=2; -update noar tt set b1='W2OALQJKHGAFCNW7GVE' where id=2; -update noar ti set b1='W2OALQJKHGAFCNW7GVE' where id=2; -update noar tt set v0='BP4AY2LL6X559KUL9T1OC2VA3XP' where id=2; -update noar ti set v0='BP4AY2LL6X559KUL9T1OC2VA3XP' where id=2; -update noar tt set b2='ZW8EMX88VZJD6EYPH8I92NKEHMNT5OR' where id=2; -update noar ti set b2='ZW8EMX88VZJD6EYPH8I92NKEHMNT5OR' where id=2; -update noar tt set v0='VD' where id=3; -update noar ti set v0='VD' where id=3; -update noar tt set b0='7E4YU3CTFDDGVPGPK68QFEKX2SQ' where id=3; -update noar ti set b0='7E4YU3CTFDDGVPGPK68QFEKX2SQ' where id=3; -update noar tt set v0='3BJ6ISBOADND' where id=3; -update noar ti set v0='3BJ6ISBOADND' where id=3; -update noar tt set b1='TCTWC8UNPER1D7XY5LE8' where id=3; -update noar ti set b1='TCTWC8UNPER1D7XY5LE8' where id=3; -update noar tt set v0='VOE8' where id=3; -update noar ti set v0='VOE8' where id=3; -update noar tt set b2='0ETQ7NULKA' where id=3; -update noar ti set b2='0ETQ7NULKA' where id=3; -update noar tt set v0='4DFNX3BM4QTWEQ8BBDQD495R' where id=4; -update noar ti set v0='4DFNX3BM4QTWEQ8BBDQD495R' where id=4; -update noar tt set b0='C06NB4XODKEO8FIO' where id=4; -update noar ti set b0='C06NB4XODKEO8FIO' where id=4; -update noar tt set v0='4G7OK0XBAPQ798YD1KUQBWSOH' where id=4; -update noar ti set v0='4G7OK0XBAPQ798YD1KUQBWSOH' where id=4; -update noar tt set b1='XI6Z6NM14' where id=4; -update noar ti set b1='XI6Z6NM14' where id=4; -update noar tt set v0='JRKS4P2F7SF47YBB8YC7UWW' where id=4; -update noar ti set v0='JRKS4P2F7SF47YBB8YC7UWW' where id=4; -update noar tt set b2='A1' where id=4; -update noar ti set b2='A1' where id=4; -update noar tt set v0='008MOSMOPNFFI2H3ALVNMGUZ19S8856' where id=5; -update noar ti set v0='008MOSMOPNFFI2H3ALVNMGUZ19S8856' where id=5; -update noar tt set b0='X3IL8YPVXGEGCG4' where id=5; -update noar ti set b0='X3IL8YPVXGEGCG4' where id=5; -update noar tt set v0='5787N40J27E18N7DG7XHVZS' where id=5; -update noar ti set v0='5787N40J27E18N7DG7XHVZS' where id=5; -update noar tt set b1='08ZI' where id=5; -update noar ti set b1='08ZI' where id=5; -update noar tt set v0='BH' where id=5; -update noar ti set v0='BH' where id=5; -update noar tt set b2='7JEQU8UJ40' where id=5; -update noar ti set b2='7JEQU8UJ40' where id=5; -update noar tt set v0='KU1PYWE' where id=6; -update noar ti set v0='KU1PYWE' where id=6; -update noar tt set b0='ZG5I9AM26O' where id=6; -update noar ti set b0='ZG5I9AM26O' where id=6; -update noar tt set v0='QEJ9B5N3YC9QOQ1QPP7ZN' where id=6; -update noar ti set v0='QEJ9B5N3YC9QOQ1QPP7ZN' where id=6; -update noar tt set b1='JZIFRF3Y68RVXOTM2D' where id=6; -update noar ti set b1='JZIFRF3Y68RVXOTM2D' where id=6; -update noar tt set v0='ZXYREEOS1XWLZYDNJLBV188XY' where id=6; -update noar ti set v0='ZXYREEOS1XWLZYDNJLBV188XY' where id=6; -update noar tt set b2='9KW9K0LT61WV3B' where id=6; -update noar ti set b2='9KW9K0LT61WV3B' where id=6; -update noar tt set v0='8YCO64' where id=7; -update noar ti set v0='8YCO64' where id=7; -update noar tt set b0='05OPWMBY7YRHSE974DLKOLIRUKBBOJD1' where id=7; -update noar ti set b0='05OPWMBY7YRHSE974DLKOLIRUKBBOJD1' where id=7; -update noar tt set v0='MB7EICCYEG8W4ZZS8FEHP1U648I7IFQ' where id=7; -update noar ti set v0='MB7EICCYEG8W4ZZS8FEHP1U648I7IFQ' where id=7; -update noar tt set b1='8J59C0' where id=7; -update noar ti set b1='8J59C0' where id=7; -update noar tt set v0='LOCIM2W8CZ377UFF96B9TGSE6F' where id=7; -update noar ti set v0='LOCIM2W8CZ377UFF96B9TGSE6F' where id=7; -update noar tt set b2='TWO4ZOC79BRSFV25Q6RDVT6AN' where id=7; -update noar ti set b2='TWO4ZOC79BRSFV25Q6RDVT6AN' where id=7; -update noar tt set v0='HWF9IDDAZZWOH8MPLP1GM2C8CFU8' where id=8; -update noar ti set v0='HWF9IDDAZZWOH8MPLP1GM2C8CFU8' where id=8; -update noar tt set b0='6GMPQM6ZD' where id=8; -update noar ti set b0='6GMPQM6ZD' where id=8; -update noar tt set v0='DQGA0GCK0U2UW8QYVLVUSH' where id=8; -update noar ti set v0='DQGA0GCK0U2UW8QYVLVUSH' where id=8; -update noar tt set b1='E5WX3ZW1QHVMYEQDR5W9QX4W' where id=8; -update noar ti set b1='E5WX3ZW1QHVMYEQDR5W9QX4W' where id=8; -update noar tt set v0='EB' where id=8; -update noar ti set v0='EB' where id=8; -update noar tt set b2='OROMIZLVZASGGAJ6GR82VAMX' where id=8; -update noar ti set b2='OROMIZLVZASGGAJ6GR82VAMX' where id=8; -update noar tt set v0='EXX2' where id=9; -update noar ti set v0='EXX2' where id=9; -update noar tt set b0='MXZ2HC1L70FFC' where id=9; -update noar ti set b0='MXZ2HC1L70FFC' where id=9; -update noar tt set v0='P8U87WH594NVIJ58KIWL1' where id=9; -update noar ti set v0='P8U87WH594NVIJ58KIWL1' where id=9; -update noar tt set b1='0' where id=9; -update noar ti set b1='0' where id=9; -update noar tt set v0='QGL' where id=9; -update noar ti set v0='QGL' where id=9; -update noar tt set b2='CZ3BR6MT1X' where id=9; -update noar ti set b2='CZ3BR6MT1X' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 tinyblob not null, -b1 blob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='D0KN24MEJQZC2PR9A' where id=1; -update noar ti set v0='D0KN24MEJQZC2PR9A' where id=1; -update noar tt set b0='2N8Z' where id=1; -update noar ti set b0='2N8Z' where id=1; -update noar tt set v0='65N82EVEWW' where id=1; -update noar ti set v0='65N82EVEWW' where id=1; -update noar tt set b1='UL6KAL1GU8' where id=1; -update noar ti set b1='UL6KAL1GU8' where id=1; -update noar tt set v0='WUUIRYVFVWE6D' where id=1; -update noar ti set v0='WUUIRYVFVWE6D' where id=1; -update noar tt set b2='8WN7R34J9G1HLL2' where id=1; -update noar ti set b2='8WN7R34J9G1HLL2' where id=1; -update noar tt set v0='T1CYE2210XO7YWSIJ9JEP4' where id=2; -update noar ti set v0='T1CYE2210XO7YWSIJ9JEP4' where id=2; -update noar tt set b0='8' where id=2; -update noar ti set b0='8' where id=2; -update noar tt set v0='K9JUEPN8' where id=2; -update noar ti set v0='K9JUEPN8' where id=2; -update noar tt set b1='E4252OX77L0FF8N2E' where id=2; -update noar ti set b1='E4252OX77L0FF8N2E' where id=2; -update noar tt set v0='EH8FKIVDGQVREOYO04NKJDZ3PCFA5' where id=2; -update noar ti set v0='EH8FKIVDGQVREOYO04NKJDZ3PCFA5' where id=2; -update noar tt set b2='052LG5XWEY5B0Z06VP3PI195EO' where id=2; -update noar ti set b2='052LG5XWEY5B0Z06VP3PI195EO' where id=2; -update noar tt set v0='WE0IU25LJBCS7PZEZHUI65FRH6' where id=3; -update noar ti set v0='WE0IU25LJBCS7PZEZHUI65FRH6' where id=3; -update noar tt set b0='T9AU1XYOYU0D2163KYQ' where id=3; -update noar ti set b0='T9AU1XYOYU0D2163KYQ' where id=3; -update noar tt set v0='B5INDB' where id=3; -update noar ti set v0='B5INDB' where id=3; -update noar tt set b1='Z9EQ4WDLPY72R5Y4MGD1MW7K7KL' where id=3; -update noar ti set b1='Z9EQ4WDLPY72R5Y4MGD1MW7K7KL' where id=3; -update noar tt set v0='H7G9PRO1RBR7VMGFQRNH3LR2X9QXE' where id=3; -update noar ti set v0='H7G9PRO1RBR7VMGFQRNH3LR2X9QXE' where id=3; -update noar tt set b2='W3TULW7JR84ZDVLJQW2904TH7PPTIR' where id=3; -update noar ti set b2='W3TULW7JR84ZDVLJQW2904TH7PPTIR' where id=3; -update noar tt set v0='XGWEVHMQN8' where id=4; -update noar ti set v0='XGWEVHMQN8' where id=4; -update noar tt set b0='UOU' where id=4; -update noar ti set b0='UOU' where id=4; -update noar tt set v0='2VH3AL9XARP' where id=4; -update noar ti set v0='2VH3AL9XARP' where id=4; -update noar tt set b1='3I1BDJOX8X1QRM0NSIW' where id=4; -update noar ti set b1='3I1BDJOX8X1QRM0NSIW' where id=4; -update noar tt set v0='W' where id=4; -update noar ti set v0='W' where id=4; -update noar tt set b2='TN90VCQT9KJ0RMH8AF3RF' where id=4; -update noar ti set b2='TN90VCQT9KJ0RMH8AF3RF' where id=4; -update noar tt set v0='AJU3R6P6KUNMX2VB8WZKNYJVZ3IA' where id=5; -update noar ti set v0='AJU3R6P6KUNMX2VB8WZKNYJVZ3IA' where id=5; -update noar tt set b0='7Z' where id=5; -update noar ti set b0='7Z' where id=5; -update noar tt set v0='P8DP9RLR3ECYFA6AL86' where id=5; -update noar ti set v0='P8DP9RLR3ECYFA6AL86' where id=5; -update noar tt set b1='OKZ3' where id=5; -update noar ti set b1='OKZ3' where id=5; -update noar tt set v0='5EZ' where id=5; -update noar ti set v0='5EZ' where id=5; -update noar tt set b2='CTP5K69VS8HE' where id=5; -update noar ti set b2='CTP5K69VS8HE' where id=5; -update noar tt set v0='9QH969YHJYTT3FFDO5' where id=6; -update noar ti set v0='9QH969YHJYTT3FFDO5' where id=6; -update noar tt set b0='OEFSO5LYQVKT2WGKW70L8U' where id=6; -update noar ti set b0='OEFSO5LYQVKT2WGKW70L8U' where id=6; -update noar tt set v0='MO46M12Q27QNQZWA2EXKXPG4FJR' where id=6; -update noar ti set v0='MO46M12Q27QNQZWA2EXKXPG4FJR' where id=6; -update noar tt set b1='0' where id=6; -update noar ti set b1='0' where id=6; -update noar tt set v0='4GQ8Y6DFHJADTOBN9F2WJO0' where id=6; -update noar ti set v0='4GQ8Y6DFHJADTOBN9F2WJO0' where id=6; -update noar tt set b2='Z4EOV1MHPLU' where id=6; -update noar ti set b2='Z4EOV1MHPLU' where id=6; -update noar tt set v0='R5IT2AVSYH4M48MUFV' where id=7; -update noar ti set v0='R5IT2AVSYH4M48MUFV' where id=7; -update noar tt set b0='SB0FAOGB0ORU9' where id=7; -update noar ti set b0='SB0FAOGB0ORU9' where id=7; -update noar tt set v0='0QCC57BCZISAQ' where id=7; -update noar ti set v0='0QCC57BCZISAQ' where id=7; -update noar tt set b1='D92T0HMD4981FXDMOJUN50' where id=7; -update noar ti set b1='D92T0HMD4981FXDMOJUN50' where id=7; -update noar tt set v0='0CJUJ5CDQFOHSW094UU9CA09A' where id=7; -update noar ti set v0='0CJUJ5CDQFOHSW094UU9CA09A' where id=7; -update noar tt set b2='KK8OROB8YCC370CS' where id=7; -update noar ti set b2='KK8OROB8YCC370CS' where id=7; -update noar tt set v0='JEG' where id=8; -update noar ti set v0='JEG' where id=8; -update noar tt set b0='U7E9P6FHLM5EFQ5IUWLZX5M1E5N507B4' where id=8; -update noar ti set b0='U7E9P6FHLM5EFQ5IUWLZX5M1E5N507B4' where id=8; -update noar tt set v0='FO8C' where id=8; -update noar ti set v0='FO8C' where id=8; -update noar tt set b1='ZWQ4' where id=8; -update noar ti set b1='ZWQ4' where id=8; -update noar tt set v0='9XROV2SW3HUS6X6NEEVF4H9LHX0' where id=8; -update noar ti set v0='9XROV2SW3HUS6X6NEEVF4H9LHX0' where id=8; -update noar tt set b2='N5UGM6G7117XM88NGWTLDV18MWWB' where id=8; -update noar ti set b2='N5UGM6G7117XM88NGWTLDV18MWWB' where id=8; -update noar tt set v0='6XE2YRV3YO6E3RWOU83RRILL0AV8QSH' where id=9; -update noar ti set v0='6XE2YRV3YO6E3RWOU83RRILL0AV8QSH' where id=9; -update noar tt set b0='KPKNO6PQPI1ORO0Z856LG4L' where id=9; -update noar ti set b0='KPKNO6PQPI1ORO0Z856LG4L' where id=9; -update noar tt set v0='1CCIFCNOV5A2XZ' where id=9; -update noar ti set v0='1CCIFCNOV5A2XZ' where id=9; -update noar tt set b1='6L8ZD2IO8B3K83OY' where id=9; -update noar ti set b1='6L8ZD2IO8B3K83OY' where id=9; -update noar tt set v0='K4U' where id=9; -update noar ti set v0='K4U' where id=9; -update noar tt set b2='F7G3BZYU0Q97K' where id=9; -update noar ti set b2='F7G3BZYU0Q97K' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 tinyblob not null, -b1 blob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='Q1' where id=1; -update noar ti set v0='Q1' where id=1; -update noar tt set b0='9VQUXZD4VZ523ZWP5' where id=1; -update noar ti set b0='9VQUXZD4VZ523ZWP5' where id=1; -update noar tt set v0='E48Q' where id=1; -update noar ti set v0='E48Q' where id=1; -update noar tt set b1='U597Z8G1L418ZLQ2P' where id=1; -update noar ti set b1='U597Z8G1L418ZLQ2P' where id=1; -update noar tt set v0='V13D5F06LANSMKAAT1D0CAOFIKH6HL' where id=1; -update noar ti set v0='V13D5F06LANSMKAAT1D0CAOFIKH6HL' where id=1; -update noar tt set b2='QHPACUBFHZZ' where id=1; -update noar ti set b2='QHPACUBFHZZ' where id=1; -update noar tt set v0='2N6O0O7SBSHSM03SD1U' where id=2; -update noar ti set v0='2N6O0O7SBSHSM03SD1U' where id=2; -update noar tt set b0='NBIQ1I6NGSSC4HIN2BDKYYNLUR' where id=2; -update noar ti set b0='NBIQ1I6NGSSC4HIN2BDKYYNLUR' where id=2; -update noar tt set v0='5' where id=2; -update noar ti set v0='5' where id=2; -update noar tt set b1='M1YN6ADRB5EQHW' where id=2; -update noar ti set b1='M1YN6ADRB5EQHW' where id=2; -update noar tt set v0='VYM4FOSZ7XIBMRLYOP' where id=2; -update noar ti set v0='VYM4FOSZ7XIBMRLYOP' where id=2; -update noar tt set b2='RP0BUGIV' where id=2; -update noar ti set b2='RP0BUGIV' where id=2; -update noar tt set v0='B9IQQIAFG087NQ7Y35LJOCY2BBI569L' where id=3; -update noar ti set v0='B9IQQIAFG087NQ7Y35LJOCY2BBI569L' where id=3; -update noar tt set b0='79TBCF95C07GPJ7WZC7RQAYJL' where id=3; -update noar ti set b0='79TBCF95C07GPJ7WZC7RQAYJL' where id=3; -update noar tt set v0='BYGREAH' where id=3; -update noar ti set v0='BYGREAH' where id=3; -update noar tt set b1='E' where id=3; -update noar ti set b1='E' where id=3; -update noar tt set v0='BYHW7P6' where id=3; -update noar ti set v0='BYHW7P6' where id=3; -update noar tt set b2='ZTET0I75AN' where id=3; -update noar ti set b2='ZTET0I75AN' where id=3; -update noar tt set v0='FGPAJFQIJCIYD4SP1' where id=4; -update noar ti set v0='FGPAJFQIJCIYD4SP1' where id=4; -update noar tt set b0='5KCMB' where id=4; -update noar ti set b0='5KCMB' where id=4; -update noar tt set v0='ETFUPDJZX0EFFJ6TAMNQ725' where id=4; -update noar ti set v0='ETFUPDJZX0EFFJ6TAMNQ725' where id=4; -update noar tt set b1='7' where id=4; -update noar ti set b1='7' where id=4; -update noar tt set v0='X0PSMOQLVB3V77D3N' where id=4; -update noar ti set v0='X0PSMOQLVB3V77D3N' where id=4; -update noar tt set b2='3A7GSBROGZTF0DERBRDUIKLEO0HGYA' where id=4; -update noar ti set b2='3A7GSBROGZTF0DERBRDUIKLEO0HGYA' where id=4; -update noar tt set v0='TX9KW6PNGJNVBN' where id=5; -update noar ti set v0='TX9KW6PNGJNVBN' where id=5; -update noar tt set b0='RN602RZG7ZO2JFLBXC8YDR55A' where id=5; -update noar ti set b0='RN602RZG7ZO2JFLBXC8YDR55A' where id=5; -update noar tt set v0='NDVJVJL' where id=5; -update noar ti set v0='NDVJVJL' where id=5; -update noar tt set b1='YBDZ0O3NVOJ1H4NCV072X9PH5N8' where id=5; -update noar ti set b1='YBDZ0O3NVOJ1H4NCV072X9PH5N8' where id=5; -update noar tt set v0='DWD4UR0ZH916C9E7L1BHSNI' where id=5; -update noar ti set v0='DWD4UR0ZH916C9E7L1BHSNI' where id=5; -update noar tt set b2='HZFJ51046UEJ6KDR2W2ZES5K54DNGEG' where id=5; -update noar ti set b2='HZFJ51046UEJ6KDR2W2ZES5K54DNGEG' where id=5; -update noar tt set v0='GXKK' where id=6; -update noar ti set v0='GXKK' where id=6; -update noar tt set b0='8HO' where id=6; -update noar ti set b0='8HO' where id=6; -update noar tt set v0='ZND9KNTDDSQPVE7083Z' where id=6; -update noar ti set v0='ZND9KNTDDSQPVE7083Z' where id=6; -update noar tt set b1='L9T93T8955I8W652DFDH3K' where id=6; -update noar ti set b1='L9T93T8955I8W652DFDH3K' where id=6; -update noar tt set v0='R890OUQEBACJMNLAZ' where id=6; -update noar ti set v0='R890OUQEBACJMNLAZ' where id=6; -update noar tt set b2='J18RS1FYPRWCLFBML8RLM20G' where id=6; -update noar ti set b2='J18RS1FYPRWCLFBML8RLM20G' where id=6; -update noar tt set v0='Q9C0NP8G' where id=7; -update noar ti set v0='Q9C0NP8G' where id=7; -update noar tt set b0='O1KDM982G' where id=7; -update noar ti set b0='O1KDM982G' where id=7; -update noar tt set v0='WMN569SYKVWDE30CA5A1BBS5FNYE' where id=7; -update noar ti set v0='WMN569SYKVWDE30CA5A1BBS5FNYE' where id=7; -update noar tt set b1='W6CZQFW3I9MLC' where id=7; -update noar ti set b1='W6CZQFW3I9MLC' where id=7; -update noar tt set v0='3ZI2NA5DHWS7XC8422ULEGEM6R718J' where id=7; -update noar ti set v0='3ZI2NA5DHWS7XC8422ULEGEM6R718J' where id=7; -update noar tt set b2='RXC7Y3WUE9S9VIUFW92IE' where id=7; -update noar ti set b2='RXC7Y3WUE9S9VIUFW92IE' where id=7; -update noar tt set v0='TRV6JBLN' where id=8; -update noar ti set v0='TRV6JBLN' where id=8; -update noar tt set b0='C18E0M961RH5KJT' where id=8; -update noar ti set b0='C18E0M961RH5KJT' where id=8; -update noar tt set v0='RUC64AA6BLU5DDZ3BASMKW4XCE0Q7' where id=8; -update noar ti set v0='RUC64AA6BLU5DDZ3BASMKW4XCE0Q7' where id=8; -update noar tt set b1='X5OTXW1ZU5UMSBLRFHSNEOM7XOSK' where id=8; -update noar ti set b1='X5OTXW1ZU5UMSBLRFHSNEOM7XOSK' where id=8; -update noar tt set v0='HSUPT30OB36TW3HZ2JOIEOD0YXNE2' where id=8; -update noar ti set v0='HSUPT30OB36TW3HZ2JOIEOD0YXNE2' where id=8; -update noar tt set b2='SDFVZVBSRZLQ4VXPKZZ3' where id=8; -update noar ti set b2='SDFVZVBSRZLQ4VXPKZZ3' where id=8; -update noar tt set v0='TU4VS9BNWJ22EWHQGD6SJ54CTUM7JG' where id=9; -update noar ti set v0='TU4VS9BNWJ22EWHQGD6SJ54CTUM7JG' where id=9; -update noar tt set b0='3R4' where id=9; -update noar ti set b0='3R4' where id=9; -update noar tt set v0='Z2W4IOS' where id=9; -update noar ti set v0='Z2W4IOS' where id=9; -update noar tt set b1='X5JTLZY' where id=9; -update noar ti set b1='X5JTLZY' where id=9; -update noar tt set v0='GJNLF89WINZPO' where id=9; -update noar ti set v0='GJNLF89WINZPO' where id=9; -update noar tt set b2='SSLPPOH4GQQ' where id=9; -update noar ti set b2='SSLPPOH4GQQ' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 tinyblob null, -b1 blob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='HUUBW07QPI19Z7GY' where id=1; -update noar ti set v0='HUUBW07QPI19Z7GY' where id=1; -update noar tt set b0='DWB0N0KRCDTIZ5BIYT' where id=1; -update noar ti set b0='DWB0N0KRCDTIZ5BIYT' where id=1; -update noar tt set v0='KNPWL2XSER0' where id=1; -update noar ti set v0='KNPWL2XSER0' where id=1; -update noar tt set b1='Q' where id=1; -update noar ti set b1='Q' where id=1; -update noar tt set v0='PEDK0PMW3VTPVFFD1JD5' where id=1; -update noar ti set v0='PEDK0PMW3VTPVFFD1JD5' where id=1; -update noar tt set b2='JERA7GGLASUJAMA5A8CV4XVZO04ACEL' where id=1; -update noar ti set b2='JERA7GGLASUJAMA5A8CV4XVZO04ACEL' where id=1; -update noar tt set v0='MY96RKIJT9JVXA3BV2IQXYOCAREB' where id=2; -update noar ti set v0='MY96RKIJT9JVXA3BV2IQXYOCAREB' where id=2; -update noar tt set b0='DVL5QAWLBJPJT4' where id=2; -update noar ti set b0='DVL5QAWLBJPJT4' where id=2; -update noar tt set v0='3' where id=2; -update noar ti set v0='3' where id=2; -update noar tt set b1='ZQAY3QAIXVVC' where id=2; -update noar ti set b1='ZQAY3QAIXVVC' where id=2; -update noar tt set v0='GKUYV9' where id=2; -update noar ti set v0='GKUYV9' where id=2; -update noar tt set b2='3X4QZGBUOGJMAU9KBSC9C' where id=2; -update noar ti set b2='3X4QZGBUOGJMAU9KBSC9C' where id=2; -update noar tt set v0='UUAAQ16QIMA0P8UFBCT' where id=3; -update noar ti set v0='UUAAQ16QIMA0P8UFBCT' where id=3; -update noar tt set b0='NE5F80ACBVSUS5XFXRQY0U' where id=3; -update noar ti set b0='NE5F80ACBVSUS5XFXRQY0U' where id=3; -update noar tt set v0='NLI8SQ3U5' where id=3; -update noar ti set v0='NLI8SQ3U5' where id=3; -update noar tt set b1='A' where id=3; -update noar ti set b1='A' where id=3; -update noar tt set v0='O4CSQ07GJP6SO5RCJ0MN94TUMV04QMY' where id=3; -update noar ti set v0='O4CSQ07GJP6SO5RCJ0MN94TUMV04QMY' where id=3; -update noar tt set b2='A5S51YNYAH2' where id=3; -update noar ti set b2='A5S51YNYAH2' where id=3; -update noar tt set v0='YHZWWBJTMI45NC493TMCY6OVXRE0F' where id=4; -update noar ti set v0='YHZWWBJTMI45NC493TMCY6OVXRE0F' where id=4; -update noar tt set b0='D5ZBMT53IPDHFPUH6V3OSAZSSKZ0O17' where id=4; -update noar ti set b0='D5ZBMT53IPDHFPUH6V3OSAZSSKZ0O17' where id=4; -update noar tt set v0='EYDTO0IAL8H0W' where id=4; -update noar ti set v0='EYDTO0IAL8H0W' where id=4; -update noar tt set b1='R2HM4JKFJJERCO' where id=4; -update noar ti set b1='R2HM4JKFJJERCO' where id=4; -update noar tt set v0='50TVQZ09536WYTEOWL0BTVS764' where id=4; -update noar ti set v0='50TVQZ09536WYTEOWL0BTVS764' where id=4; -update noar tt set b2='WOC222J9M' where id=4; -update noar ti set b2='WOC222J9M' where id=4; -update noar tt set v0='KH1KA' where id=5; -update noar ti set v0='KH1KA' where id=5; -update noar tt set b0='WIQFJYZFG67FENHZQ6S8FMLTU36' where id=5; -update noar ti set b0='WIQFJYZFG67FENHZQ6S8FMLTU36' where id=5; -update noar tt set v0='36MOL10Q7NQSNDLCFLWU' where id=5; -update noar ti set v0='36MOL10Q7NQSNDLCFLWU' where id=5; -update noar tt set b1='R2XT' where id=5; -update noar ti set b1='R2XT' where id=5; -update noar tt set v0='YY991MRRCKDH' where id=5; -update noar ti set v0='YY991MRRCKDH' where id=5; -update noar tt set b2='U9C5QAS6O881SVEVEJTIXVEJ' where id=5; -update noar ti set b2='U9C5QAS6O881SVEVEJTIXVEJ' where id=5; -update noar tt set v0='92BZBW68T' where id=6; -update noar ti set v0='92BZBW68T' where id=6; -update noar tt set b0='OVX8ZKV' where id=6; -update noar ti set b0='OVX8ZKV' where id=6; -update noar tt set v0='RIJIO3ONQFITCVVRESKM1ASBPJX' where id=6; -update noar ti set v0='RIJIO3ONQFITCVVRESKM1ASBPJX' where id=6; -update noar tt set b1='EW8DENP53OAZOXECCG28YJ08APPEG6N' where id=6; -update noar ti set b1='EW8DENP53OAZOXECCG28YJ08APPEG6N' where id=6; -update noar tt set v0='IO9AUF6W' where id=6; -update noar ti set v0='IO9AUF6W' where id=6; -update noar tt set b2='JNBQTLWHEZQ' where id=6; -update noar ti set b2='JNBQTLWHEZQ' where id=6; -update noar tt set v0='63QUY1OUU4S0QPFCJSILTQDR76KF2M6B' where id=7; -update noar ti set v0='63QUY1OUU4S0QPFCJSILTQDR76KF2M6B' where id=7; -update noar tt set b0='F3R7ZJHQFN6KL0LTE' where id=7; -update noar ti set b0='F3R7ZJHQFN6KL0LTE' where id=7; -update noar tt set v0='MEYPOP8052KKJFPTVBOIL75ZAXD' where id=7; -update noar ti set v0='MEYPOP8052KKJFPTVBOIL75ZAXD' where id=7; -update noar tt set b1='GPC9N0AI66TOW72GJO29G4YV' where id=7; -update noar ti set b1='GPC9N0AI66TOW72GJO29G4YV' where id=7; -update noar tt set v0='AKYN29I0441KRBSNWH919C' where id=7; -update noar ti set v0='AKYN29I0441KRBSNWH919C' where id=7; -update noar tt set b2='1L' where id=7; -update noar ti set b2='1L' where id=7; -update noar tt set v0='7EPXFBQK' where id=8; -update noar ti set v0='7EPXFBQK' where id=8; -update noar tt set b0='ZV0A3YMAMRLPZCM9BLG2D4Q' where id=8; -update noar ti set b0='ZV0A3YMAMRLPZCM9BLG2D4Q' where id=8; -update noar tt set v0='IAL666LNCG35LYQ0QQK6O5' where id=8; -update noar ti set v0='IAL666LNCG35LYQ0QQK6O5' where id=8; -update noar tt set b1='EW11N63S2OBD7SFD9VNJLL9' where id=8; -update noar ti set b1='EW11N63S2OBD7SFD9VNJLL9' where id=8; -update noar tt set v0='E6QTX01IY2M21N7H' where id=8; -update noar ti set v0='E6QTX01IY2M21N7H' where id=8; -update noar tt set b2='OH56KOFBNTLC26K' where id=8; -update noar ti set b2='OH56KOFBNTLC26K' where id=8; -update noar tt set v0='EGEGWWJJV21CK83K5NXBQGR0CG1' where id=9; -update noar ti set v0='EGEGWWJJV21CK83K5NXBQGR0CG1' where id=9; -update noar tt set b0='O7H1SNTNK0ESVK9APLB2Z9PM3NR9E09' where id=9; -update noar ti set b0='O7H1SNTNK0ESVK9APLB2Z9PM3NR9E09' where id=9; -update noar tt set v0='Q1DHSP4I2' where id=9; -update noar ti set v0='Q1DHSP4I2' where id=9; -update noar tt set b1='IF5DY803ZWPK28V55ZDX1X3' where id=9; -update noar ti set b1='IF5DY803ZWPK28V55ZDX1X3' where id=9; -update noar tt set v0='DQCA7C1SFL0BU23DPX1RCBFE7WAYF' where id=9; -update noar ti set v0='DQCA7C1SFL0BU23DPX1RCBFE7WAYF' where id=9; -update noar tt set b2='OKYK9I5SPMXPVYJIC3CS5' where id=9; -update noar ti set b2='OKYK9I5SPMXPVYJIC3CS5' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 tinyblob null, -b1 blob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='7X9ZCU5EB1K9UTS8WJ51QCSTPGZ2X' where id=1; -update noar ti set v0='7X9ZCU5EB1K9UTS8WJ51QCSTPGZ2X' where id=1; -update noar tt set b0='YB8NTN82M' where id=1; -update noar ti set b0='YB8NTN82M' where id=1; -update noar tt set v0='LRL32Z5N10JBOF6' where id=1; -update noar ti set v0='LRL32Z5N10JBOF6' where id=1; -update noar tt set b1='SVXTVA7OG59RTB' where id=1; -update noar ti set b1='SVXTVA7OG59RTB' where id=1; -update noar tt set v0='5RQF5QA6JGO' where id=1; -update noar ti set v0='5RQF5QA6JGO' where id=1; -update noar tt set b2='LEOR80S' where id=1; -update noar ti set b2='LEOR80S' where id=1; -update noar tt set v0='YSZTG' where id=2; -update noar ti set v0='YSZTG' where id=2; -update noar tt set b0='UW01H8XU8E41VQJNKIQPY43R37E' where id=2; -update noar ti set b0='UW01H8XU8E41VQJNKIQPY43R37E' where id=2; -update noar tt set v0='4U7JBMZB54FMAZV' where id=2; -update noar ti set v0='4U7JBMZB54FMAZV' where id=2; -update noar tt set b1='7UJ4PJDGKF6WFCXGAJZA81SWT' where id=2; -update noar ti set b1='7UJ4PJDGKF6WFCXGAJZA81SWT' where id=2; -update noar tt set v0='XMT1U' where id=2; -update noar ti set v0='XMT1U' where id=2; -update noar tt set b2='2' where id=2; -update noar ti set b2='2' where id=2; -update noar tt set v0='1GXOXA9B3NSGQHU7NBE' where id=3; -update noar ti set v0='1GXOXA9B3NSGQHU7NBE' where id=3; -update noar tt set b0='Q' where id=3; -update noar ti set b0='Q' where id=3; -update noar tt set v0='SY02UKUCTT5A' where id=3; -update noar ti set v0='SY02UKUCTT5A' where id=3; -update noar tt set b1='OQA4' where id=3; -update noar ti set b1='OQA4' where id=3; -update noar tt set v0='DTPZ3DT8PWK8GMWZV' where id=3; -update noar ti set v0='DTPZ3DT8PWK8GMWZV' where id=3; -update noar tt set b2='BYTZ' where id=3; -update noar ti set b2='BYTZ' where id=3; -update noar tt set v0='15603KRF033QUHOY' where id=4; -update noar ti set v0='15603KRF033QUHOY' where id=4; -update noar tt set b0='S7KDI30VIRK9UTK' where id=4; -update noar ti set b0='S7KDI30VIRK9UTK' where id=4; -update noar tt set v0='K0FER' where id=4; -update noar ti set v0='K0FER' where id=4; -update noar tt set b1='42Z7ZIUCK1QXN7' where id=4; -update noar ti set b1='42Z7ZIUCK1QXN7' where id=4; -update noar tt set v0='YKLGSFX7QZ49D9EMOV1EQ' where id=4; -update noar ti set v0='YKLGSFX7QZ49D9EMOV1EQ' where id=4; -update noar tt set b2='MJTDHCSXUDJGL6QJFH9HDED1D' where id=4; -update noar ti set b2='MJTDHCSXUDJGL6QJFH9HDED1D' where id=4; -update noar tt set v0='Q95TBK8Z5Q45ERZQBAE2SYUC3' where id=5; -update noar ti set v0='Q95TBK8Z5Q45ERZQBAE2SYUC3' where id=5; -update noar tt set b0='O8DH7N2SXU1W4CVIHVYRZGW0TN6V1SDQ' where id=5; -update noar ti set b0='O8DH7N2SXU1W4CVIHVYRZGW0TN6V1SDQ' where id=5; -update noar tt set v0='BGVZXQEI40OKTLREY2DA9M' where id=5; -update noar ti set v0='BGVZXQEI40OKTLREY2DA9M' where id=5; -update noar tt set b1='09H5O6IDB32T31OYK5W29M' where id=5; -update noar ti set b1='09H5O6IDB32T31OYK5W29M' where id=5; -update noar tt set v0='MD4BVS633PCUN2W4I8QII' where id=5; -update noar ti set v0='MD4BVS633PCUN2W4I8QII' where id=5; -update noar tt set b2='BFJKMP6SMV3E' where id=5; -update noar ti set b2='BFJKMP6SMV3E' where id=5; -update noar tt set v0='3C96007Y7766C0665X4E5TSC9I33WROS' where id=6; -update noar ti set v0='3C96007Y7766C0665X4E5TSC9I33WROS' where id=6; -update noar tt set b0='8GX6Q05B7HT' where id=6; -update noar ti set b0='8GX6Q05B7HT' where id=6; -update noar tt set v0='TF8YT7Z7TP7SWJ' where id=6; -update noar ti set v0='TF8YT7Z7TP7SWJ' where id=6; -update noar tt set b1='SD3NF1OXAW0B072C54G3LYED8L' where id=6; -update noar ti set b1='SD3NF1OXAW0B072C54G3LYED8L' where id=6; -update noar tt set v0='DXDZ439TUJKULG59CRB0Y9UZ0IH' where id=6; -update noar ti set v0='DXDZ439TUJKULG59CRB0Y9UZ0IH' where id=6; -update noar tt set b2='DJUY1FZ8T8OA5QFCYP81UKNZ98' where id=6; -update noar ti set b2='DJUY1FZ8T8OA5QFCYP81UKNZ98' where id=6; -update noar tt set v0='I6PH4WVRW9LMMJGJOX8G' where id=7; -update noar ti set v0='I6PH4WVRW9LMMJGJOX8G' where id=7; -update noar tt set b0='O3FXX' where id=7; -update noar ti set b0='O3FXX' where id=7; -update noar tt set v0='BL05AVSKRGE0WIOYD6PE8F24SW' where id=7; -update noar ti set v0='BL05AVSKRGE0WIOYD6PE8F24SW' where id=7; -update noar tt set b1='RVCM' where id=7; -update noar ti set b1='RVCM' where id=7; -update noar tt set v0='YPV9DMLVN60CYJKS4MBMQHW' where id=7; -update noar ti set v0='YPV9DMLVN60CYJKS4MBMQHW' where id=7; -update noar tt set b2='BIQ0IXWC485HTEQLR' where id=7; -update noar ti set b2='BIQ0IXWC485HTEQLR' where id=7; -update noar tt set v0='FCTFC0KKZJ3GEKKSY8F82TQ6' where id=8; -update noar ti set v0='FCTFC0KKZJ3GEKKSY8F82TQ6' where id=8; -update noar tt set b0='40LTMGJRJ' where id=8; -update noar ti set b0='40LTMGJRJ' where id=8; -update noar tt set v0='YAQH37GOJUP91JVO0YKMW0ET' where id=8; -update noar ti set v0='YAQH37GOJUP91JVO0YKMW0ET' where id=8; -update noar tt set b1='IHCRM52VXHCDPDFJ4NBICFAYOOX7' where id=8; -update noar ti set b1='IHCRM52VXHCDPDFJ4NBICFAYOOX7' where id=8; -update noar tt set v0='2J4V4ZSAQYNC70B' where id=8; -update noar ti set v0='2J4V4ZSAQYNC70B' where id=8; -update noar tt set b2='DZZ0' where id=8; -update noar ti set b2='DZZ0' where id=8; -update noar tt set v0='6Y3EE5LFZOJGN88SKQ7P08NRZQTZ1BM' where id=9; -update noar ti set v0='6Y3EE5LFZOJGN88SKQ7P08NRZQTZ1BM' where id=9; -update noar tt set b0='RSZVBVQCPOFXOP20BZDU7' where id=9; -update noar ti set b0='RSZVBVQCPOFXOP20BZDU7' where id=9; -update noar tt set v0='P6QM8EN0RKBV' where id=9; -update noar ti set v0='P6QM8EN0RKBV' where id=9; -update noar tt set b1='6GQNANW4XY' where id=9; -update noar ti set b1='6GQNANW4XY' where id=9; -update noar tt set v0='W6XP1RQSQQYFT0CTGP5K8636FW' where id=9; -update noar ti set v0='W6XP1RQSQQYFT0CTGP5K8636FW' where id=9; -update noar tt set b2='FHKJWR6H7L9T90F' where id=9; -update noar ti set b2='FHKJWR6H7L9T90F' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 tinyblob not null, -b1 blob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='EXR4KANRV4NMMQQBLEJHZO2JY' where id=1; -update noar ti set v0='EXR4KANRV4NMMQQBLEJHZO2JY' where id=1; -update noar tt set b0='JENF6SB63H4AYG0' where id=1; -update noar ti set b0='JENF6SB63H4AYG0' where id=1; -update noar tt set v0='5GOEYG587Y6R29AOQ0FDIN1EB6GHI2' where id=1; -update noar ti set v0='5GOEYG587Y6R29AOQ0FDIN1EB6GHI2' where id=1; -update noar tt set b1='NHEDBLGN0PET6ZSL24QB1X8OVMBZFM' where id=1; -update noar ti set b1='NHEDBLGN0PET6ZSL24QB1X8OVMBZFM' where id=1; -update noar tt set v0='MPNAJSBUJKKF74VDUEEUW4YG' where id=1; -update noar ti set v0='MPNAJSBUJKKF74VDUEEUW4YG' where id=1; -update noar tt set b2='51DHPJHOSO37F9J87DRQBOT042ZN' where id=1; -update noar ti set b2='51DHPJHOSO37F9J87DRQBOT042ZN' where id=1; -update noar tt set v0='Y25R' where id=2; -update noar ti set v0='Y25R' where id=2; -update noar tt set b0='H4VK6D' where id=2; -update noar ti set b0='H4VK6D' where id=2; -update noar tt set v0='AWEAEXIEIBCI' where id=2; -update noar ti set v0='AWEAEXIEIBCI' where id=2; -update noar tt set b1='ZWPPE01VM' where id=2; -update noar ti set b1='ZWPPE01VM' where id=2; -update noar tt set v0='NB58' where id=2; -update noar ti set v0='NB58' where id=2; -update noar tt set b2='674AUDAVG38P0RDH22K9LU7DS' where id=2; -update noar ti set b2='674AUDAVG38P0RDH22K9LU7DS' where id=2; -update noar tt set v0='ZSR72DAZ' where id=3; -update noar ti set v0='ZSR72DAZ' where id=3; -update noar tt set b0='XB02MJ4ICXBRV3VV' where id=3; -update noar ti set b0='XB02MJ4ICXBRV3VV' where id=3; -update noar tt set v0='FUECLF2I8' where id=3; -update noar ti set v0='FUECLF2I8' where id=3; -update noar tt set b1='J' where id=3; -update noar ti set b1='J' where id=3; -update noar tt set v0='H6YTR6XT4KTYNJII' where id=3; -update noar ti set v0='H6YTR6XT4KTYNJII' where id=3; -update noar tt set b2='76GPQ2RSIC6QAS74K1Z491W6' where id=3; -update noar ti set b2='76GPQ2RSIC6QAS74K1Z491W6' where id=3; -update noar tt set v0='01JE4D8TM216PN4LKRC6OJ2R4RQ6PWC' where id=4; -update noar ti set v0='01JE4D8TM216PN4LKRC6OJ2R4RQ6PWC' where id=4; -update noar tt set b0='FZ6ROIOL' where id=4; -update noar ti set b0='FZ6ROIOL' where id=4; -update noar tt set v0='SDEGGDYRK7507WI2YMX0H' where id=4; -update noar ti set v0='SDEGGDYRK7507WI2YMX0H' where id=4; -update noar tt set b1='V712HMILEG2H' where id=4; -update noar ti set b1='V712HMILEG2H' where id=4; -update noar tt set v0='XAHGN' where id=4; -update noar ti set v0='XAHGN' where id=4; -update noar tt set b2='RD4MIT78' where id=4; -update noar ti set b2='RD4MIT78' where id=4; -update noar tt set v0='61D9790SJYM01MY' where id=5; -update noar ti set v0='61D9790SJYM01MY' where id=5; -update noar tt set b0='64WWSHKCKQZOF6BXS1Q' where id=5; -update noar ti set b0='64WWSHKCKQZOF6BXS1Q' where id=5; -update noar tt set v0='ZPKXSNHNL3G36FYF3LRLZ7' where id=5; -update noar ti set v0='ZPKXSNHNL3G36FYF3LRLZ7' where id=5; -update noar tt set b1='XODEY' where id=5; -update noar ti set b1='XODEY' where id=5; -update noar tt set v0='Z6Q5JV9RJ' where id=5; -update noar ti set v0='Z6Q5JV9RJ' where id=5; -update noar tt set b2='3F2Y' where id=5; -update noar ti set b2='3F2Y' where id=5; -update noar tt set v0='GKP57TE04U' where id=6; -update noar ti set v0='GKP57TE04U' where id=6; -update noar tt set b0='BN42QNST97TY1IEL67IBQSMR9K8J' where id=6; -update noar ti set b0='BN42QNST97TY1IEL67IBQSMR9K8J' where id=6; -update noar tt set v0='UYJ7H577BH85MWIKC' where id=6; -update noar ti set v0='UYJ7H577BH85MWIKC' where id=6; -update noar tt set b1='NG051CTO4TBVZKI4IMHVDX90DGWQ4NAM' where id=6; -update noar ti set b1='NG051CTO4TBVZKI4IMHVDX90DGWQ4NAM' where id=6; -update noar tt set v0='VTT4CEHEGQWXUJ' where id=6; -update noar ti set v0='VTT4CEHEGQWXUJ' where id=6; -update noar tt set b2='CKK2F' where id=6; -update noar ti set b2='CKK2F' where id=6; -update noar tt set v0='Q' where id=7; -update noar ti set v0='Q' where id=7; -update noar tt set b0='VBDD3FGRLSOJ4XGUZ088R3C' where id=7; -update noar ti set b0='VBDD3FGRLSOJ4XGUZ088R3C' where id=7; -update noar tt set v0='YNVNV1I56VEM2D31E6X2H2' where id=7; -update noar ti set v0='YNVNV1I56VEM2D31E6X2H2' where id=7; -update noar tt set b1='PD8IBJQVWZ098IJD' where id=7; -update noar ti set b1='PD8IBJQVWZ098IJD' where id=7; -update noar tt set v0='A2FYME7YXM5ZSZZANJ1TW3LI27RZ' where id=7; -update noar ti set v0='A2FYME7YXM5ZSZZANJ1TW3LI27RZ' where id=7; -update noar tt set b2='YAQUYE7NZJO0ISVQYZF4ST7LJVOAOD2' where id=7; -update noar ti set b2='YAQUYE7NZJO0ISVQYZF4ST7LJVOAOD2' where id=7; -update noar tt set v0='RHPNSAHA00OBP9O410X1J9MOCMEFEB' where id=8; -update noar ti set v0='RHPNSAHA00OBP9O410X1J9MOCMEFEB' where id=8; -update noar tt set b0='5GNSKEP4QOYWGWB1E9E0X4G6I8ATPQ' where id=8; -update noar ti set b0='5GNSKEP4QOYWGWB1E9E0X4G6I8ATPQ' where id=8; -update noar tt set v0='G12FLSA31' where id=8; -update noar ti set v0='G12FLSA31' where id=8; -update noar tt set b1='VL70WN5HM02I05MUX9BZ33I6AI5QIA' where id=8; -update noar ti set b1='VL70WN5HM02I05MUX9BZ33I6AI5QIA' where id=8; -update noar tt set v0='C8J5WQW' where id=8; -update noar ti set v0='C8J5WQW' where id=8; -update noar tt set b2='ZL58PNX8M4EYFH7MVZJL3GYS73W3' where id=8; -update noar ti set b2='ZL58PNX8M4EYFH7MVZJL3GYS73W3' where id=8; -update noar tt set v0='9BF8O69YBTF7LBL9A' where id=9; -update noar ti set v0='9BF8O69YBTF7LBL9A' where id=9; -update noar tt set b0='L381608G9R6IDQCKP' where id=9; -update noar ti set b0='L381608G9R6IDQCKP' where id=9; -update noar tt set v0='CHIRGZUA' where id=9; -update noar ti set v0='CHIRGZUA' where id=9; -update noar tt set b1='YK5IQS' where id=9; -update noar ti set b1='YK5IQS' where id=9; -update noar tt set v0='VAGEWP3DF1QNWH' where id=9; -update noar ti set v0='VAGEWP3DF1QNWH' where id=9; -update noar tt set b2='EEXAQOWD89IMT47' where id=9; -update noar ti set b2='EEXAQOWD89IMT47' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 tinyblob not null, -b1 blob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='0BB' where id=1; -update noar ti set v0='0BB' where id=1; -update noar tt set b0='RAHWAQAPLY' where id=1; -update noar ti set b0='RAHWAQAPLY' where id=1; -update noar tt set v0='Y5Z11UQVE90O73DMDKMDQZ9932OF' where id=1; -update noar ti set v0='Y5Z11UQVE90O73DMDKMDQZ9932OF' where id=1; -update noar tt set b1='QUPOF3KAJQB18OAARBVLNV52VX0R' where id=1; -update noar ti set b1='QUPOF3KAJQB18OAARBVLNV52VX0R' where id=1; -update noar tt set v0='PLF4U2B0ISP' where id=1; -update noar ti set v0='PLF4U2B0ISP' where id=1; -update noar tt set b2='FAYV' where id=1; -update noar ti set b2='FAYV' where id=1; -update noar tt set v0='G8WT62HP' where id=2; -update noar ti set v0='G8WT62HP' where id=2; -update noar tt set b0='7PZG3BXRNKKAIITYMSEBE0' where id=2; -update noar ti set b0='7PZG3BXRNKKAIITYMSEBE0' where id=2; -update noar tt set v0='91QS87M6T0WNUR0E2K2PHM' where id=2; -update noar ti set v0='91QS87M6T0WNUR0E2K2PHM' where id=2; -update noar tt set b1='GP1FH3JDOTH6HREGRS20KXB0L8' where id=2; -update noar ti set b1='GP1FH3JDOTH6HREGRS20KXB0L8' where id=2; -update noar tt set v0='B28RHH69' where id=2; -update noar ti set v0='B28RHH69' where id=2; -update noar tt set b2='7CO8IXI' where id=2; -update noar ti set b2='7CO8IXI' where id=2; -update noar tt set v0='XWZY' where id=3; -update noar ti set v0='XWZY' where id=3; -update noar tt set b0='N1CPEDG83RGBU517ZLCZ2HKRR4SRPE7' where id=3; -update noar ti set b0='N1CPEDG83RGBU517ZLCZ2HKRR4SRPE7' where id=3; -update noar tt set v0='BU4K6E' where id=3; -update noar ti set v0='BU4K6E' where id=3; -update noar tt set b1='PE7DE5GB4SV60A2QN8JOWK9' where id=3; -update noar ti set b1='PE7DE5GB4SV60A2QN8JOWK9' where id=3; -update noar tt set v0='WOSLQIOTD9O5ZSAI174CLI0' where id=3; -update noar ti set v0='WOSLQIOTD9O5ZSAI174CLI0' where id=3; -update noar tt set b2='QUZM4G15GGJBRWV8R' where id=3; -update noar ti set b2='QUZM4G15GGJBRWV8R' where id=3; -update noar tt set v0='3UC521OAT0HPH4GN3ATKW' where id=4; -update noar ti set v0='3UC521OAT0HPH4GN3ATKW' where id=4; -update noar tt set b0='PT8GXTAETOFR7PLG1VGVGHHHEAST7TBL' where id=4; -update noar ti set b0='PT8GXTAETOFR7PLG1VGVGHHHEAST7TBL' where id=4; -update noar tt set v0='8ZWM2GJOHDWHCKBH3' where id=4; -update noar ti set v0='8ZWM2GJOHDWHCKBH3' where id=4; -update noar tt set b1='DC8J' where id=4; -update noar ti set b1='DC8J' where id=4; -update noar tt set v0='Y1H2ODQEN8FGI' where id=4; -update noar ti set v0='Y1H2ODQEN8FGI' where id=4; -update noar tt set b2='O7UF5AZB0N55YEL' where id=4; -update noar ti set b2='O7UF5AZB0N55YEL' where id=4; -update noar tt set v0='893J' where id=5; -update noar ti set v0='893J' where id=5; -update noar tt set b0='NWEB79GK3UI7V4EKQ7DOASKEPN8' where id=5; -update noar ti set b0='NWEB79GK3UI7V4EKQ7DOASKEPN8' where id=5; -update noar tt set v0='AICZWHML3DUWP2JSVJVIRSO2EIRYZ' where id=5; -update noar ti set v0='AICZWHML3DUWP2JSVJVIRSO2EIRYZ' where id=5; -update noar tt set b1='YYTOOYAM6R7GU4CK7OQ3' where id=5; -update noar ti set b1='YYTOOYAM6R7GU4CK7OQ3' where id=5; -update noar tt set v0='H2F3P3ZS0LRVBQJI23IMZQ87YIDJJM2U' where id=5; -update noar ti set v0='H2F3P3ZS0LRVBQJI23IMZQ87YIDJJM2U' where id=5; -update noar tt set b2='46UWSUOQSFJ64PCHG27' where id=5; -update noar ti set b2='46UWSUOQSFJ64PCHG27' where id=5; -update noar tt set v0='KBWZG5UTAYCOO6526' where id=6; -update noar ti set v0='KBWZG5UTAYCOO6526' where id=6; -update noar tt set b0='24JYI5EN047PAI822KWS6NMP2SVA98' where id=6; -update noar ti set b0='24JYI5EN047PAI822KWS6NMP2SVA98' where id=6; -update noar tt set v0='WRXYCV4QUP1SOI295' where id=6; -update noar ti set v0='WRXYCV4QUP1SOI295' where id=6; -update noar tt set b1='4E3U0TRQ1J4ZLOQDQAA0JVHUB' where id=6; -update noar ti set b1='4E3U0TRQ1J4ZLOQDQAA0JVHUB' where id=6; -update noar tt set v0='JWPPIHS35A0J5U2' where id=6; -update noar ti set v0='JWPPIHS35A0J5U2' where id=6; -update noar tt set b2='R' where id=6; -update noar ti set b2='R' where id=6; -update noar tt set v0='RO' where id=7; -update noar ti set v0='RO' where id=7; -update noar tt set b0='3LK3RIXCXOOZ' where id=7; -update noar ti set b0='3LK3RIXCXOOZ' where id=7; -update noar tt set v0='13RE7097I9ANKTNL7HL2GX7TPI' where id=7; -update noar ti set v0='13RE7097I9ANKTNL7HL2GX7TPI' where id=7; -update noar tt set b1='A14PM37J551W618' where id=7; -update noar ti set b1='A14PM37J551W618' where id=7; -update noar tt set v0='W7MC795WIUO7A5UF49QRTTZPOM3C' where id=7; -update noar ti set v0='W7MC795WIUO7A5UF49QRTTZPOM3C' where id=7; -update noar tt set b2='CPBOPLQK8XC' where id=7; -update noar ti set b2='CPBOPLQK8XC' where id=7; -update noar tt set v0='S051FCY2VSI1MHILLJNU5EJ38TR' where id=8; -update noar ti set v0='S051FCY2VSI1MHILLJNU5EJ38TR' where id=8; -update noar tt set b0='MSW' where id=8; -update noar ti set b0='MSW' where id=8; -update noar tt set v0='WDZ5D7EP4NLWKUOKY5SN1DZXXB8E4' where id=8; -update noar ti set v0='WDZ5D7EP4NLWKUOKY5SN1DZXXB8E4' where id=8; -update noar tt set b1='IA' where id=8; -update noar ti set b1='IA' where id=8; -update noar tt set v0='ACBYUD17E6Q5E' where id=8; -update noar ti set v0='ACBYUD17E6Q5E' where id=8; -update noar tt set b2='4M31GTY9G4OZR1YCATFNB' where id=8; -update noar ti set b2='4M31GTY9G4OZR1YCATFNB' where id=8; -update noar tt set v0='BMT3CR6T' where id=9; -update noar ti set v0='BMT3CR6T' where id=9; -update noar tt set b0='HKBPON1MWH' where id=9; -update noar ti set b0='HKBPON1MWH' where id=9; -update noar tt set v0='NWU3' where id=9; -update noar ti set v0='NWU3' where id=9; -update noar tt set b1='EX0LFK3' where id=9; -update noar ti set b1='EX0LFK3' where id=9; -update noar tt set v0='YTHC79D5I4WVO9FH' where id=9; -update noar ti set v0='YTHC79D5I4WVO9FH' where id=9; -update noar tt set b2='U00GJFWOZ2SAYZT4N2' where id=9; -update noar ti set b2='U00GJFWOZ2SAYZT4N2' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 tinyblob null, -b1 mediumblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='HM' where id=1; -update noar ti set v0='HM' where id=1; -update noar tt set b0='8BTHL' where id=1; -update noar ti set b0='8BTHL' where id=1; -update noar tt set v0='8MKDG23NFZLJWTF' where id=1; -update noar ti set v0='8MKDG23NFZLJWTF' where id=1; -update noar tt set b1='KIMS0DA175NQ05ORSYNQ3QRW23G4' where id=1; -update noar ti set b1='KIMS0DA175NQ05ORSYNQ3QRW23G4' where id=1; -update noar tt set v0='ZBTEB4ULU8EOZZPPG9' where id=1; -update noar ti set v0='ZBTEB4ULU8EOZZPPG9' where id=1; -update noar tt set b2='V3RNJPQ' where id=1; -update noar ti set b2='V3RNJPQ' where id=1; -update noar tt set v0='2U3QNSF5ZW5VHE0EP08G8NR2IVS3' where id=2; -update noar ti set v0='2U3QNSF5ZW5VHE0EP08G8NR2IVS3' where id=2; -update noar tt set b0='5CF5WFDWFEFMIHX6KMR3PQR1LZQ' where id=2; -update noar ti set b0='5CF5WFDWFEFMIHX6KMR3PQR1LZQ' where id=2; -update noar tt set v0='NG19R' where id=2; -update noar ti set v0='NG19R' where id=2; -update noar tt set b1='QYE4IM2KIEKLG6KZAZKPF46' where id=2; -update noar ti set b1='QYE4IM2KIEKLG6KZAZKPF46' where id=2; -update noar tt set v0='55114R43T0ERGU93MFTRC9' where id=2; -update noar ti set v0='55114R43T0ERGU93MFTRC9' where id=2; -update noar tt set b2='1LGJ' where id=2; -update noar ti set b2='1LGJ' where id=2; -update noar tt set v0='1RZMQ8X' where id=3; -update noar ti set v0='1RZMQ8X' where id=3; -update noar tt set b0='LCM3QDM77M56YCHKH' where id=3; -update noar ti set b0='LCM3QDM77M56YCHKH' where id=3; -update noar tt set v0='DSYQ2ECLVV5P' where id=3; -update noar ti set v0='DSYQ2ECLVV5P' where id=3; -update noar tt set b1='DNZZAGL1HEUPOUGCDHZ0I7PJQUKX' where id=3; -update noar ti set b1='DNZZAGL1HEUPOUGCDHZ0I7PJQUKX' where id=3; -update noar tt set v0='NEUT73' where id=3; -update noar ti set v0='NEUT73' where id=3; -update noar tt set b2='45TSMC6UZN9FH2NLRES8QJM' where id=3; -update noar ti set b2='45TSMC6UZN9FH2NLRES8QJM' where id=3; -update noar tt set v0='6TTHF46W58QLZVVHODB' where id=4; -update noar ti set v0='6TTHF46W58QLZVVHODB' where id=4; -update noar tt set b0='KWH1KZX0XP5' where id=4; -update noar ti set b0='KWH1KZX0XP5' where id=4; -update noar tt set v0='0PC98G0EA3NA9P5WGPXP' where id=4; -update noar ti set v0='0PC98G0EA3NA9P5WGPXP' where id=4; -update noar tt set b1='BIJULJHMJNM74D0J6IZ0XD33' where id=4; -update noar ti set b1='BIJULJHMJNM74D0J6IZ0XD33' where id=4; -update noar tt set v0='UL9YLYH777C1IS23VK11D2UL7' where id=4; -update noar ti set v0='UL9YLYH777C1IS23VK11D2UL7' where id=4; -update noar tt set b2='6' where id=4; -update noar ti set b2='6' where id=4; -update noar tt set v0='Q26V9LP3493G' where id=5; -update noar ti set v0='Q26V9LP3493G' where id=5; -update noar tt set b0='GQ73ASURRUXH6KE3S3QDT' where id=5; -update noar ti set b0='GQ73ASURRUXH6KE3S3QDT' where id=5; -update noar tt set v0='GV7EOXB4YN6' where id=5; -update noar ti set v0='GV7EOXB4YN6' where id=5; -update noar tt set b1='FCAC31GCZROZ8P4YKU53KO02EGSOBS' where id=5; -update noar ti set b1='FCAC31GCZROZ8P4YKU53KO02EGSOBS' where id=5; -update noar tt set v0='93' where id=5; -update noar ti set v0='93' where id=5; -update noar tt set b2='D2IKRWKYI6UO0TTD0Q4I14KGMY' where id=5; -update noar ti set b2='D2IKRWKYI6UO0TTD0Q4I14KGMY' where id=5; -update noar tt set v0='TX7X08IQOJ3ZS3VZ' where id=6; -update noar ti set v0='TX7X08IQOJ3ZS3VZ' where id=6; -update noar tt set b0='MC9K' where id=6; -update noar ti set b0='MC9K' where id=6; -update noar tt set v0='ZG' where id=6; -update noar ti set v0='ZG' where id=6; -update noar tt set b1='2OFU' where id=6; -update noar ti set b1='2OFU' where id=6; -update noar tt set v0='07ZKU6QIAYFMUEWIR3' where id=6; -update noar ti set v0='07ZKU6QIAYFMUEWIR3' where id=6; -update noar tt set b2='RRPRZDG0LHEF5B5W7IPDCJB' where id=6; -update noar ti set b2='RRPRZDG0LHEF5B5W7IPDCJB' where id=6; -update noar tt set v0='6BN58TNZF9KZXT42QTNVKTJKLZF1J' where id=7; -update noar ti set v0='6BN58TNZF9KZXT42QTNVKTJKLZF1J' where id=7; -update noar tt set b0='5O2YQEK9AI2620ER86CY44CZNTNZM432' where id=7; -update noar ti set b0='5O2YQEK9AI2620ER86CY44CZNTNZM432' where id=7; -update noar tt set v0='ZZO2E' where id=7; -update noar ti set v0='ZZO2E' where id=7; -update noar tt set b1='JYOKZLILZV2CVJG5ETY0W8GQZM4A' where id=7; -update noar ti set b1='JYOKZLILZV2CVJG5ETY0W8GQZM4A' where id=7; -update noar tt set v0='1FE5KOFQH' where id=7; -update noar ti set v0='1FE5KOFQH' where id=7; -update noar tt set b2='KIAFNJQOWN4' where id=7; -update noar ti set b2='KIAFNJQOWN4' where id=7; -update noar tt set v0='KLEB57PH6' where id=8; -update noar ti set v0='KLEB57PH6' where id=8; -update noar tt set b0='UK1624XW6PA19BJRGEXG0EEYOKTBU' where id=8; -update noar ti set b0='UK1624XW6PA19BJRGEXG0EEYOKTBU' where id=8; -update noar tt set v0='OUBBH5KT8IUEACEI19XSKBRZYSCXTBB' where id=8; -update noar ti set v0='OUBBH5KT8IUEACEI19XSKBRZYSCXTBB' where id=8; -update noar tt set b1='Q0QSXIQRRJ9D' where id=8; -update noar ti set b1='Q0QSXIQRRJ9D' where id=8; -update noar tt set v0='HUY5N13QZKGIEXYIFPZQWB8D' where id=8; -update noar ti set v0='HUY5N13QZKGIEXYIFPZQWB8D' where id=8; -update noar tt set b2='Z862C6BE33SV6SK923PFT9EPE6V' where id=8; -update noar ti set b2='Z862C6BE33SV6SK923PFT9EPE6V' where id=8; -update noar tt set v0='SKPQKSXDULQHF6ZAKR6X99PF9FRWQ' where id=9; -update noar ti set v0='SKPQKSXDULQHF6ZAKR6X99PF9FRWQ' where id=9; -update noar tt set b0='9TUB5PX90' where id=9; -update noar ti set b0='9TUB5PX90' where id=9; -update noar tt set v0='XG2KJ2V9QU1Q1ET0T67H06' where id=9; -update noar ti set v0='XG2KJ2V9QU1Q1ET0T67H06' where id=9; -update noar tt set b1='Q865T' where id=9; -update noar ti set b1='Q865T' where id=9; -update noar tt set v0='XYWSGSEDR' where id=9; -update noar ti set v0='XYWSGSEDR' where id=9; -update noar tt set b2='08C5LC3LSYJ44LJRYVF95W' where id=9; -update noar ti set b2='08C5LC3LSYJ44LJRYVF95W' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 tinyblob null, -b1 mediumblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='Z6MC9LT99X1' where id=1; -update noar ti set v0='Z6MC9LT99X1' where id=1; -update noar tt set b0='XH300J6J983' where id=1; -update noar ti set b0='XH300J6J983' where id=1; -update noar tt set v0='88SON644E4G96H7MEEI8NCP06GMD' where id=1; -update noar ti set v0='88SON644E4G96H7MEEI8NCP06GMD' where id=1; -update noar tt set b1='5G3XFS2ECEYA56A7I82L8E9WUQOOF' where id=1; -update noar ti set b1='5G3XFS2ECEYA56A7I82L8E9WUQOOF' where id=1; -update noar tt set v0='8' where id=1; -update noar ti set v0='8' where id=1; -update noar tt set b2='5Z7PQTNT269JKJFY' where id=1; -update noar ti set b2='5Z7PQTNT269JKJFY' where id=1; -update noar tt set v0='PX1BAY' where id=2; -update noar ti set v0='PX1BAY' where id=2; -update noar tt set b0='08KOGS1P' where id=2; -update noar ti set b0='08KOGS1P' where id=2; -update noar tt set v0='QB3R1ZXJNNW69U7TR90FSHR' where id=2; -update noar ti set v0='QB3R1ZXJNNW69U7TR90FSHR' where id=2; -update noar tt set b1='LCQ8H6PHSUHY1V0RD6Y81NP0' where id=2; -update noar ti set b1='LCQ8H6PHSUHY1V0RD6Y81NP0' where id=2; -update noar tt set v0='EBYVS' where id=2; -update noar ti set v0='EBYVS' where id=2; -update noar tt set b2='4' where id=2; -update noar ti set b2='4' where id=2; -update noar tt set v0='XN8LK4RS3KTBU3Y07PZFLAKY744TI' where id=3; -update noar ti set v0='XN8LK4RS3KTBU3Y07PZFLAKY744TI' where id=3; -update noar tt set b0='XRCE' where id=3; -update noar ti set b0='XRCE' where id=3; -update noar tt set v0='9WQ3B9IAH8AD86' where id=3; -update noar ti set v0='9WQ3B9IAH8AD86' where id=3; -update noar tt set b1='RRAQC9JPMHK49UWVUITTPQ1O342XBBT' where id=3; -update noar ti set b1='RRAQC9JPMHK49UWVUITTPQ1O342XBBT' where id=3; -update noar tt set v0='C85XJ0NOL3WR' where id=3; -update noar ti set v0='C85XJ0NOL3WR' where id=3; -update noar tt set b2='7QQL' where id=3; -update noar ti set b2='7QQL' where id=3; -update noar tt set v0='QTLY6SIZF' where id=4; -update noar ti set v0='QTLY6SIZF' where id=4; -update noar tt set b0='D0TOKZ1M16Z7' where id=4; -update noar ti set b0='D0TOKZ1M16Z7' where id=4; -update noar tt set v0='1L5XMGZZ47' where id=4; -update noar ti set v0='1L5XMGZZ47' where id=4; -update noar tt set b1='JDBMWJ0585Q77MK3YPK' where id=4; -update noar ti set b1='JDBMWJ0585Q77MK3YPK' where id=4; -update noar tt set v0='O6' where id=4; -update noar ti set v0='O6' where id=4; -update noar tt set b2='JKE56' where id=4; -update noar ti set b2='JKE56' where id=4; -update noar tt set v0='N9Y' where id=5; -update noar ti set v0='N9Y' where id=5; -update noar tt set b0='RDO23FKPMW15RZ81UYW58Z2EA08VMF1' where id=5; -update noar ti set b0='RDO23FKPMW15RZ81UYW58Z2EA08VMF1' where id=5; -update noar tt set v0='CZMC02JSH2BT' where id=5; -update noar ti set v0='CZMC02JSH2BT' where id=5; -update noar tt set b1='QRX8SF' where id=5; -update noar ti set b1='QRX8SF' where id=5; -update noar tt set v0='05' where id=5; -update noar ti set v0='05' where id=5; -update noar tt set b2='QQ13I1WU5NZUCD4ETTYRTBD02HBXJCL' where id=5; -update noar ti set b2='QQ13I1WU5NZUCD4ETTYRTBD02HBXJCL' where id=5; -update noar tt set v0='YZ17Q07M0GS2KFK0AW84OWMQ14QF70' where id=6; -update noar ti set v0='YZ17Q07M0GS2KFK0AW84OWMQ14QF70' where id=6; -update noar tt set b0='2MWU5XMKQL' where id=6; -update noar ti set b0='2MWU5XMKQL' where id=6; -update noar tt set v0='85JRDBCM0LJQL6JCWZ2' where id=6; -update noar ti set v0='85JRDBCM0LJQL6JCWZ2' where id=6; -update noar tt set b1='QQVP7' where id=6; -update noar ti set b1='QQVP7' where id=6; -update noar tt set v0='EDXRUA6IT09DJ39' where id=6; -update noar ti set v0='EDXRUA6IT09DJ39' where id=6; -update noar tt set b2='CGC1UB1ATAH4VPP4C8FZCGNL0I' where id=6; -update noar ti set b2='CGC1UB1ATAH4VPP4C8FZCGNL0I' where id=6; -update noar tt set v0='GRN82' where id=7; -update noar ti set v0='GRN82' where id=7; -update noar tt set b0='2JHJJXG7F1WY5JVNPD0UT' where id=7; -update noar ti set b0='2JHJJXG7F1WY5JVNPD0UT' where id=7; -update noar tt set v0='Q38P61LQISWWP8LV7' where id=7; -update noar ti set v0='Q38P61LQISWWP8LV7' where id=7; -update noar tt set b1='94INXVGRQH' where id=7; -update noar ti set b1='94INXVGRQH' where id=7; -update noar tt set v0='D8R2GJU0FJAJN4MK4V20RVWK4C9' where id=7; -update noar ti set v0='D8R2GJU0FJAJN4MK4V20RVWK4C9' where id=7; -update noar tt set b2='0VLKQ2' where id=7; -update noar ti set b2='0VLKQ2' where id=7; -update noar tt set v0='G7WKORB811774EKUZNLCC8' where id=8; -update noar ti set v0='G7WKORB811774EKUZNLCC8' where id=8; -update noar tt set b0='E37LJNWMFVSKSW5JOQK4PHY2P' where id=8; -update noar ti set b0='E37LJNWMFVSKSW5JOQK4PHY2P' where id=8; -update noar tt set v0='JHDQ3' where id=8; -update noar ti set v0='JHDQ3' where id=8; -update noar tt set b1='XEXH725N652DIPRV8S2E6' where id=8; -update noar ti set b1='XEXH725N652DIPRV8S2E6' where id=8; -update noar tt set v0='17SSPHKD6' where id=8; -update noar ti set v0='17SSPHKD6' where id=8; -update noar tt set b2='EJ4RS6PTXPELYS3PFPDLWGKC1KYKZ5PM' where id=8; -update noar ti set b2='EJ4RS6PTXPELYS3PFPDLWGKC1KYKZ5PM' where id=8; -update noar tt set v0='R' where id=9; -update noar ti set v0='R' where id=9; -update noar tt set b0='961GDPZS7WIZKYITDUK4HYE6D' where id=9; -update noar ti set b0='961GDPZS7WIZKYITDUK4HYE6D' where id=9; -update noar tt set v0='2R7QAR7R1FCONMD6YUMYIN2OUSQMIFR' where id=9; -update noar ti set v0='2R7QAR7R1FCONMD6YUMYIN2OUSQMIFR' where id=9; -update noar tt set b1='9' where id=9; -update noar ti set b1='9' where id=9; -update noar tt set v0='I' where id=9; -update noar ti set v0='I' where id=9; -update noar tt set b2='N' where id=9; -update noar ti set b2='N' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 tinyblob not null, -b1 mediumblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='KTZX79UNGPJHNIIQ9NBU285A3W4KQ7Y' where id=1; -update noar ti set v0='KTZX79UNGPJHNIIQ9NBU285A3W4KQ7Y' where id=1; -update noar tt set b0='L8OV1JXWHLBR7H9576' where id=1; -update noar ti set b0='L8OV1JXWHLBR7H9576' where id=1; -update noar tt set v0='BMTDO6CDG' where id=1; -update noar ti set v0='BMTDO6CDG' where id=1; -update noar tt set b1='G8G9M2ZM4C3WFQD9FHNK66' where id=1; -update noar ti set b1='G8G9M2ZM4C3WFQD9FHNK66' where id=1; -update noar tt set v0='6WJ02TMOVO32R95I' where id=1; -update noar ti set v0='6WJ02TMOVO32R95I' where id=1; -update noar tt set b2='CA4T8CJO3ZMM' where id=1; -update noar ti set b2='CA4T8CJO3ZMM' where id=1; -update noar tt set v0='5DT354L8FC3BFSXKG9169LHKG0YD1I' where id=2; -update noar ti set v0='5DT354L8FC3BFSXKG9169LHKG0YD1I' where id=2; -update noar tt set b0='ZECK6DC4' where id=2; -update noar ti set b0='ZECK6DC4' where id=2; -update noar tt set v0='7GFA42TD4OCU11UO9CGY' where id=2; -update noar ti set v0='7GFA42TD4OCU11UO9CGY' where id=2; -update noar tt set b1='ZM5ZPICCCSBMA3KWU13BI2W9' where id=2; -update noar ti set b1='ZM5ZPICCCSBMA3KWU13BI2W9' where id=2; -update noar tt set v0='UKTDWU3SXB93EO6V6' where id=2; -update noar ti set v0='UKTDWU3SXB93EO6V6' where id=2; -update noar tt set b2='4YHT022F' where id=2; -update noar ti set b2='4YHT022F' where id=2; -update noar tt set v0='F6O793' where id=3; -update noar ti set v0='F6O793' where id=3; -update noar tt set b0='VMG89W04EG' where id=3; -update noar ti set b0='VMG89W04EG' where id=3; -update noar tt set v0='QD3F837L3TVXN1O15DWFOZLGKG9G9SQ3' where id=3; -update noar ti set v0='QD3F837L3TVXN1O15DWFOZLGKG9G9SQ3' where id=3; -update noar tt set b1='QC5XH78HKAO9MPCI' where id=3; -update noar ti set b1='QC5XH78HKAO9MPCI' where id=3; -update noar tt set v0='14QP752GNIIWKY5HS7' where id=3; -update noar ti set v0='14QP752GNIIWKY5HS7' where id=3; -update noar tt set b2='6PK5D4D04TY496F31KB6ZM52BHLY' where id=3; -update noar ti set b2='6PK5D4D04TY496F31KB6ZM52BHLY' where id=3; -update noar tt set v0='E006OJFKG25VG0GJEUO8ZX0SNKFW2M7' where id=4; -update noar ti set v0='E006OJFKG25VG0GJEUO8ZX0SNKFW2M7' where id=4; -update noar tt set b0='A5SAGD2S' where id=4; -update noar ti set b0='A5SAGD2S' where id=4; -update noar tt set v0='ZBPEL52CCNM' where id=4; -update noar ti set v0='ZBPEL52CCNM' where id=4; -update noar tt set b1='4SS9JG9UR325X58OKOHECO8' where id=4; -update noar ti set b1='4SS9JG9UR325X58OKOHECO8' where id=4; -update noar tt set v0='Z5AK5' where id=4; -update noar ti set v0='Z5AK5' where id=4; -update noar tt set b2='CJIDWOHK0Y2GO6CECSZ' where id=4; -update noar ti set b2='CJIDWOHK0Y2GO6CECSZ' where id=4; -update noar tt set v0='1A1H5UE' where id=5; -update noar ti set v0='1A1H5UE' where id=5; -update noar tt set b0='O2UVU2GMCO21CYAM' where id=5; -update noar ti set b0='O2UVU2GMCO21CYAM' where id=5; -update noar tt set v0='666X7Y5VUHBD3AD5U3ZWPVX2H' where id=5; -update noar ti set v0='666X7Y5VUHBD3AD5U3ZWPVX2H' where id=5; -update noar tt set b1='IIM1NKDPK3GSEV7TBO7WTZYK4C9' where id=5; -update noar ti set b1='IIM1NKDPK3GSEV7TBO7WTZYK4C9' where id=5; -update noar tt set v0='NJF06983RRB2PY5GV6O7' where id=5; -update noar ti set v0='NJF06983RRB2PY5GV6O7' where id=5; -update noar tt set b2='6QJF6NRS2YOGCX7Y5IAK31SVKBDTDG' where id=5; -update noar ti set b2='6QJF6NRS2YOGCX7Y5IAK31SVKBDTDG' where id=5; -update noar tt set v0='374FT1FSJBDV' where id=6; -update noar ti set v0='374FT1FSJBDV' where id=6; -update noar tt set b0='AAAHG7SKBXTQQTY2A9DK0WZ4' where id=6; -update noar ti set b0='AAAHG7SKBXTQQTY2A9DK0WZ4' where id=6; -update noar tt set v0='GO5633ADRLSIS1AWT7MMGK' where id=6; -update noar ti set v0='GO5633ADRLSIS1AWT7MMGK' where id=6; -update noar tt set b1='K23CKVW0N0SRYF5ZW066VMXT' where id=6; -update noar ti set b1='K23CKVW0N0SRYF5ZW066VMXT' where id=6; -update noar tt set v0='V1VWDPMOZUILZE1' where id=6; -update noar ti set v0='V1VWDPMOZUILZE1' where id=6; -update noar tt set b2='8JVZFI0KTX' where id=6; -update noar ti set b2='8JVZFI0KTX' where id=6; -update noar tt set v0='IJPPPGATDQ6UKMSZ6Z0EEW7' where id=7; -update noar ti set v0='IJPPPGATDQ6UKMSZ6Z0EEW7' where id=7; -update noar tt set b0='7F5UAY90CRRV7' where id=7; -update noar ti set b0='7F5UAY90CRRV7' where id=7; -update noar tt set v0='LMYWP8RSKQMBR' where id=7; -update noar ti set v0='LMYWP8RSKQMBR' where id=7; -update noar tt set b1='81YYVJGEGLU26XBSSJ49F1G28L0HA' where id=7; -update noar ti set b1='81YYVJGEGLU26XBSSJ49F1G28L0HA' where id=7; -update noar tt set v0='C' where id=7; -update noar ti set v0='C' where id=7; -update noar tt set b2='01DEHIO31S5B9OW1H2T940Z6TWPC9GG' where id=7; -update noar ti set b2='01DEHIO31S5B9OW1H2T940Z6TWPC9GG' where id=7; -update noar tt set v0='UCLCK3VH2INBS75R1F1E8D6DRCT' where id=8; -update noar ti set v0='UCLCK3VH2INBS75R1F1E8D6DRCT' where id=8; -update noar tt set b0='C150BK9GYYUZO870ALT' where id=8; -update noar ti set b0='C150BK9GYYUZO870ALT' where id=8; -update noar tt set v0='JRAA20' where id=8; -update noar ti set v0='JRAA20' where id=8; -update noar tt set b1='FER8Z8XSFGMX' where id=8; -update noar ti set b1='FER8Z8XSFGMX' where id=8; -update noar tt set v0='S40MUZ2NBKUN97CE5B3UU0MCX4W9R22' where id=8; -update noar ti set v0='S40MUZ2NBKUN97CE5B3UU0MCX4W9R22' where id=8; -update noar tt set b2='8' where id=8; -update noar ti set b2='8' where id=8; -update noar tt set v0='24JFCJ1PFNS8QB5PMTH88ACJV0W' where id=9; -update noar ti set v0='24JFCJ1PFNS8QB5PMTH88ACJV0W' where id=9; -update noar tt set b0='8DKBV5L70PQMGFNPJ2RFDZT' where id=9; -update noar ti set b0='8DKBV5L70PQMGFNPJ2RFDZT' where id=9; -update noar tt set v0='AHTWSYB5QRTCR2RZSCF5M' where id=9; -update noar ti set v0='AHTWSYB5QRTCR2RZSCF5M' where id=9; -update noar tt set b1='KCKWGGMMQG578CJCZC3TFXGKM09246Y7' where id=9; -update noar ti set b1='KCKWGGMMQG578CJCZC3TFXGKM09246Y7' where id=9; -update noar tt set v0='UWBS48E3KSC22R' where id=9; -update noar ti set v0='UWBS48E3KSC22R' where id=9; -update noar tt set b2='2H5FQ97DBTT304Q6SS' where id=9; -update noar ti set b2='2H5FQ97DBTT304Q6SS' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 tinyblob not null, -b1 mediumblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='IK3O4OZPGR67G8R8' where id=1; -update noar ti set v0='IK3O4OZPGR67G8R8' where id=1; -update noar tt set b0='ZI7HHGFTCEPLVP' where id=1; -update noar ti set b0='ZI7HHGFTCEPLVP' where id=1; -update noar tt set v0='HLBEUE4BXWEHNF53' where id=1; -update noar ti set v0='HLBEUE4BXWEHNF53' where id=1; -update noar tt set b1='UKJ5BRPH03SU' where id=1; -update noar ti set b1='UKJ5BRPH03SU' where id=1; -update noar tt set v0='B2' where id=1; -update noar ti set v0='B2' where id=1; -update noar tt set b2='9BMFN46L962BOZ7RBPMJGJ7R1TEN1' where id=1; -update noar ti set b2='9BMFN46L962BOZ7RBPMJGJ7R1TEN1' where id=1; -update noar tt set v0='4RDXRJKV576C9LY' where id=2; -update noar ti set v0='4RDXRJKV576C9LY' where id=2; -update noar tt set b0='L8IIOXUHR8N3AVSF0ESD97W' where id=2; -update noar ti set b0='L8IIOXUHR8N3AVSF0ESD97W' where id=2; -update noar tt set v0='L45U12VZZ5L4HONYU' where id=2; -update noar ti set v0='L45U12VZZ5L4HONYU' where id=2; -update noar tt set b1='BXLHX1U5AYX2ZU6KHV' where id=2; -update noar ti set b1='BXLHX1U5AYX2ZU6KHV' where id=2; -update noar tt set v0='1U8ZW9O8Q' where id=2; -update noar ti set v0='1U8ZW9O8Q' where id=2; -update noar tt set b2='UR03VNA1FPJZ6' where id=2; -update noar ti set b2='UR03VNA1FPJZ6' where id=2; -update noar tt set v0='KMJDBR2X0S0U0CF3YKCBNN4BLZDI3' where id=3; -update noar ti set v0='KMJDBR2X0S0U0CF3YKCBNN4BLZDI3' where id=3; -update noar tt set b0='TMSD6CWNR1XIJAO4I82W' where id=3; -update noar ti set b0='TMSD6CWNR1XIJAO4I82W' where id=3; -update noar tt set v0='9YMNI9' where id=3; -update noar ti set v0='9YMNI9' where id=3; -update noar tt set b1='2YCWMLAREXU' where id=3; -update noar ti set b1='2YCWMLAREXU' where id=3; -update noar tt set v0='WCVBE3X4J90UW6RHYORRW6Z' where id=3; -update noar ti set v0='WCVBE3X4J90UW6RHYORRW6Z' where id=3; -update noar tt set b2='ZBM1R2V' where id=3; -update noar ti set b2='ZBM1R2V' where id=3; -update noar tt set v0='5J9AR8JULEFFSQS6KW4SL18X64VF900' where id=4; -update noar ti set v0='5J9AR8JULEFFSQS6KW4SL18X64VF900' where id=4; -update noar tt set b0='P26MAU7NKSX4YTH09U2HUHT20H' where id=4; -update noar ti set b0='P26MAU7NKSX4YTH09U2HUHT20H' where id=4; -update noar tt set v0='HN7S0NKLSVTM' where id=4; -update noar ti set v0='HN7S0NKLSVTM' where id=4; -update noar tt set b1='VPQFB' where id=4; -update noar ti set b1='VPQFB' where id=4; -update noar tt set v0='42' where id=4; -update noar ti set v0='42' where id=4; -update noar tt set b2='94PHMFAZ9SV9KFKNYLWSE3AV0D0NXYZ8' where id=4; -update noar ti set b2='94PHMFAZ9SV9KFKNYLWSE3AV0D0NXYZ8' where id=4; -update noar tt set v0='ST4ZELCMLUY' where id=5; -update noar ti set v0='ST4ZELCMLUY' where id=5; -update noar tt set b0='SHWROHBW2HXJU0NG' where id=5; -update noar ti set b0='SHWROHBW2HXJU0NG' where id=5; -update noar tt set v0='83MLF9TJCUD3XYGD90ICFM7' where id=5; -update noar ti set v0='83MLF9TJCUD3XYGD90ICFM7' where id=5; -update noar tt set b1='SUH7MUQAOWG' where id=5; -update noar ti set b1='SUH7MUQAOWG' where id=5; -update noar tt set v0='X40Y2D' where id=5; -update noar ti set v0='X40Y2D' where id=5; -update noar tt set b2='1TCIELI8ZDSFHHCUBDO' where id=5; -update noar ti set b2='1TCIELI8ZDSFHHCUBDO' where id=5; -update noar tt set v0='WFZV5VX92KQ' where id=6; -update noar ti set v0='WFZV5VX92KQ' where id=6; -update noar tt set b0='D5J0SIX2EPIXF' where id=6; -update noar ti set b0='D5J0SIX2EPIXF' where id=6; -update noar tt set v0='EL7T93UUF2DHFZPG503ES0' where id=6; -update noar ti set v0='EL7T93UUF2DHFZPG503ES0' where id=6; -update noar tt set b1='KNAYRD3KPHE1QM1Y713DNGWJP' where id=6; -update noar ti set b1='KNAYRD3KPHE1QM1Y713DNGWJP' where id=6; -update noar tt set v0='VF8GDPT' where id=6; -update noar ti set v0='VF8GDPT' where id=6; -update noar tt set b2='N1EZMSO84UL115J' where id=6; -update noar ti set b2='N1EZMSO84UL115J' where id=6; -update noar tt set v0='N3BTZSWNROL0B75LZDBIQKRKS' where id=7; -update noar ti set v0='N3BTZSWNROL0B75LZDBIQKRKS' where id=7; -update noar tt set b0='7LV5BR' where id=7; -update noar ti set b0='7LV5BR' where id=7; -update noar tt set v0='OM850' where id=7; -update noar ti set v0='OM850' where id=7; -update noar tt set b1='IAGDUCY7FD522GOADVUWB8XGERIII' where id=7; -update noar ti set b1='IAGDUCY7FD522GOADVUWB8XGERIII' where id=7; -update noar tt set v0='MT8U4FFH9DPNN2CH39SZCR9' where id=7; -update noar ti set v0='MT8U4FFH9DPNN2CH39SZCR9' where id=7; -update noar tt set b2='BJPQHQ9N3Y' where id=7; -update noar ti set b2='BJPQHQ9N3Y' where id=7; -update noar tt set v0='SWPISUK0VT11H6GWQM1' where id=8; -update noar ti set v0='SWPISUK0VT11H6GWQM1' where id=8; -update noar tt set b0='3JUL' where id=8; -update noar ti set b0='3JUL' where id=8; -update noar tt set v0='15HA6QF1V3YWR' where id=8; -update noar ti set v0='15HA6QF1V3YWR' where id=8; -update noar tt set b1='H9G80FRHBNBW13DTXR3FZDF5S' where id=8; -update noar ti set b1='H9G80FRHBNBW13DTXR3FZDF5S' where id=8; -update noar tt set v0='RVPMIYTXHJLK084' where id=8; -update noar ti set v0='RVPMIYTXHJLK084' where id=8; -update noar tt set b2='41DS9W79WWPE0D01RSROTEAUHTDU' where id=8; -update noar ti set b2='41DS9W79WWPE0D01RSROTEAUHTDU' where id=8; -update noar tt set v0='MM' where id=9; -update noar ti set v0='MM' where id=9; -update noar tt set b0='YDNFR6V30PZUFKH33EE62ZO72XHYN0NQ' where id=9; -update noar ti set b0='YDNFR6V30PZUFKH33EE62ZO72XHYN0NQ' where id=9; -update noar tt set v0='VN' where id=9; -update noar ti set v0='VN' where id=9; -update noar tt set b1='O483YC2BYFHGL8SH' where id=9; -update noar ti set b1='O483YC2BYFHGL8SH' where id=9; -update noar tt set v0='IB0ILQ9GKHTWYHV8' where id=9; -update noar ti set v0='IB0ILQ9GKHTWYHV8' where id=9; -update noar tt set b2='M9NK' where id=9; -update noar ti set b2='M9NK' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 tinyblob null, -b1 mediumblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='3RNNJJH0A4TYPJJEEJBTIPBOCYDL1' where id=1; -update noar ti set v0='3RNNJJH0A4TYPJJEEJBTIPBOCYDL1' where id=1; -update noar tt set b0='UTMUQYOTEIH8EYTQ1PXGD036KRH7EO' where id=1; -update noar ti set b0='UTMUQYOTEIH8EYTQ1PXGD036KRH7EO' where id=1; -update noar tt set v0='7JN10Z7WSF62' where id=1; -update noar ti set v0='7JN10Z7WSF62' where id=1; -update noar tt set b1='FRPG4OYYL86GK2EQUROVDI76MY' where id=1; -update noar ti set b1='FRPG4OYYL86GK2EQUROVDI76MY' where id=1; -update noar tt set v0='QPF50RIQ' where id=1; -update noar ti set v0='QPF50RIQ' where id=1; -update noar tt set b2='ZUKCLHP1F41NKI8LSDH' where id=1; -update noar ti set b2='ZUKCLHP1F41NKI8LSDH' where id=1; -update noar tt set v0='BRSRC3O907XK' where id=2; -update noar ti set v0='BRSRC3O907XK' where id=2; -update noar tt set b0='JVPKLNR3RVE' where id=2; -update noar ti set b0='JVPKLNR3RVE' where id=2; -update noar tt set v0='SQ3HH4PM' where id=2; -update noar ti set v0='SQ3HH4PM' where id=2; -update noar tt set b1='UUQ4Q' where id=2; -update noar ti set b1='UUQ4Q' where id=2; -update noar tt set v0='BTYXN9ED4AYK27XSTE0E98Y5' where id=2; -update noar ti set v0='BTYXN9ED4AYK27XSTE0E98Y5' where id=2; -update noar tt set b2='R74K11LKR6C' where id=2; -update noar ti set b2='R74K11LKR6C' where id=2; -update noar tt set v0='H53OPQ' where id=3; -update noar ti set v0='H53OPQ' where id=3; -update noar tt set b0='7' where id=3; -update noar ti set b0='7' where id=3; -update noar tt set v0='H77B3NILXJ7DM186' where id=3; -update noar ti set v0='H77B3NILXJ7DM186' where id=3; -update noar tt set b1='Z4PZ8Q72VSV16TJQIE09HW8' where id=3; -update noar ti set b1='Z4PZ8Q72VSV16TJQIE09HW8' where id=3; -update noar tt set v0='9E6V4FNCJ9KZJWBCBX1OJ1OZ' where id=3; -update noar ti set v0='9E6V4FNCJ9KZJWBCBX1OJ1OZ' where id=3; -update noar tt set b2='LUC3I230BND' where id=3; -update noar ti set b2='LUC3I230BND' where id=3; -update noar tt set v0='KT6BJHN0PMU3CV3PI64DAEX7M8PF' where id=4; -update noar ti set v0='KT6BJHN0PMU3CV3PI64DAEX7M8PF' where id=4; -update noar tt set b0='WSVOMU6D' where id=4; -update noar ti set b0='WSVOMU6D' where id=4; -update noar tt set v0='LPQKTTPJTVN990ZVERF6L1Z' where id=4; -update noar ti set v0='LPQKTTPJTVN990ZVERF6L1Z' where id=4; -update noar tt set b1='D8IH0SHPILGH1JSW' where id=4; -update noar ti set b1='D8IH0SHPILGH1JSW' where id=4; -update noar tt set v0='QFL1YESZ90QF6ORD4' where id=4; -update noar ti set v0='QFL1YESZ90QF6ORD4' where id=4; -update noar tt set b2='WEHJRGIFGBMZTX62D07MR5D' where id=4; -update noar ti set b2='WEHJRGIFGBMZTX62D07MR5D' where id=4; -update noar tt set v0='2KEGQWUIQT7CW804ZBORKQKP' where id=5; -update noar ti set v0='2KEGQWUIQT7CW804ZBORKQKP' where id=5; -update noar tt set b0='A5C8N7SNN8RR9M7JSGD' where id=5; -update noar ti set b0='A5C8N7SNN8RR9M7JSGD' where id=5; -update noar tt set v0='M8MUYPIY9' where id=5; -update noar ti set v0='M8MUYPIY9' where id=5; -update noar tt set b1='3BRY9ZOT3A' where id=5; -update noar ti set b1='3BRY9ZOT3A' where id=5; -update noar tt set v0='V827ION0JVZM' where id=5; -update noar ti set v0='V827ION0JVZM' where id=5; -update noar tt set b2='MUOVV2ZFNC4BW' where id=5; -update noar ti set b2='MUOVV2ZFNC4BW' where id=5; -update noar tt set v0='C' where id=6; -update noar ti set v0='C' where id=6; -update noar tt set b0='SOCRBYCOSLN1Q7G5OSCI83' where id=6; -update noar ti set b0='SOCRBYCOSLN1Q7G5OSCI83' where id=6; -update noar tt set v0='8' where id=6; -update noar ti set v0='8' where id=6; -update noar tt set b1='YZZOPHCQONPSMICM3' where id=6; -update noar ti set b1='YZZOPHCQONPSMICM3' where id=6; -update noar tt set v0='XSOZG2X0TEXV21FKWQVBH4B0CI2VVHP' where id=6; -update noar ti set v0='XSOZG2X0TEXV21FKWQVBH4B0CI2VVHP' where id=6; -update noar tt set b2='OY4UV4QDZXIT1TFMI' where id=6; -update noar ti set b2='OY4UV4QDZXIT1TFMI' where id=6; -update noar tt set v0='JSBHCBFRZXVS4E2' where id=7; -update noar ti set v0='JSBHCBFRZXVS4E2' where id=7; -update noar tt set b0='6QBJYEGIGB2RHENT3P' where id=7; -update noar ti set b0='6QBJYEGIGB2RHENT3P' where id=7; -update noar tt set v0='JU9ST' where id=7; -update noar ti set v0='JU9ST' where id=7; -update noar tt set b1='E288M5B8FMDVSGW2D0F4K3T8943PHX' where id=7; -update noar ti set b1='E288M5B8FMDVSGW2D0F4K3T8943PHX' where id=7; -update noar tt set v0='BY66U62V3YD0OV7TV6JGS1XOBWAG' where id=7; -update noar ti set v0='BY66U62V3YD0OV7TV6JGS1XOBWAG' where id=7; -update noar tt set b2='4A4GDK5WQA5IIAA2TJSU8WY1WKZ9W' where id=7; -update noar ti set b2='4A4GDK5WQA5IIAA2TJSU8WY1WKZ9W' where id=7; -update noar tt set v0='G4FLSSDT2OGHX753XWUHLF' where id=8; -update noar ti set v0='G4FLSSDT2OGHX753XWUHLF' where id=8; -update noar tt set b0='34RF' where id=8; -update noar ti set b0='34RF' where id=8; -update noar tt set v0='JJOVK4N4D7398C2' where id=8; -update noar ti set v0='JJOVK4N4D7398C2' where id=8; -update noar tt set b1='34QBK3BBNG9TK4ZD6R55HOKLQ' where id=8; -update noar ti set b1='34QBK3BBNG9TK4ZD6R55HOKLQ' where id=8; -update noar tt set v0='WQSAY37EF5JPGGWCQ' where id=8; -update noar ti set v0='WQSAY37EF5JPGGWCQ' where id=8; -update noar tt set b2='DUWHJEOKZ9ATZH' where id=8; -update noar ti set b2='DUWHJEOKZ9ATZH' where id=8; -update noar tt set v0='L1GL0ZLNZDQ21F8G7IEFLIZ' where id=9; -update noar ti set v0='L1GL0ZLNZDQ21F8G7IEFLIZ' where id=9; -update noar tt set b0='V' where id=9; -update noar ti set b0='V' where id=9; -update noar tt set v0='RND' where id=9; -update noar ti set v0='RND' where id=9; -update noar tt set b1='1VKTMVQGX75U6KH' where id=9; -update noar ti set b1='1VKTMVQGX75U6KH' where id=9; -update noar tt set v0='UFFBJNEZZ0VM5144NP8AJ4FGXZF5ML' where id=9; -update noar ti set v0='UFFBJNEZZ0VM5144NP8AJ4FGXZF5ML' where id=9; -update noar tt set b2='FY1Z6N8' where id=9; -update noar ti set b2='FY1Z6N8' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 tinyblob null, -b1 mediumblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='2R585KTYR61A' where id=1; -update noar ti set v0='2R585KTYR61A' where id=1; -update noar tt set b0='G3MLFCWOZ5ACJTX38EGWA' where id=1; -update noar ti set b0='G3MLFCWOZ5ACJTX38EGWA' where id=1; -update noar tt set v0='XLJ' where id=1; -update noar ti set v0='XLJ' where id=1; -update noar tt set b1='ZBIN95M5VQLQXR9H5J0AGGM2HG19Y87' where id=1; -update noar ti set b1='ZBIN95M5VQLQXR9H5J0AGGM2HG19Y87' where id=1; -update noar tt set v0='B3XNYDQ14OK51MSWC46JV7UWJ8U23' where id=1; -update noar ti set v0='B3XNYDQ14OK51MSWC46JV7UWJ8U23' where id=1; -update noar tt set b2='OF8KUUMTYQQZM10N605SMHQARIQ0GKD' where id=1; -update noar ti set b2='OF8KUUMTYQQZM10N605SMHQARIQ0GKD' where id=1; -update noar tt set v0='1TA8N0IZ' where id=2; -update noar ti set v0='1TA8N0IZ' where id=2; -update noar tt set b0='6A8IA0RDJ744236Z' where id=2; -update noar ti set b0='6A8IA0RDJ744236Z' where id=2; -update noar tt set v0='UZEEU0W6U77HLF' where id=2; -update noar ti set v0='UZEEU0W6U77HLF' where id=2; -update noar tt set b1='OHDCWMQ3' where id=2; -update noar ti set b1='OHDCWMQ3' where id=2; -update noar tt set v0='HUM5MR61PTDIWEZBZRJQ' where id=2; -update noar ti set v0='HUM5MR61PTDIWEZBZRJQ' where id=2; -update noar tt set b2='VCB' where id=2; -update noar ti set b2='VCB' where id=2; -update noar tt set v0='W' where id=3; -update noar ti set v0='W' where id=3; -update noar tt set b0='HFVVK3QLUXM3XVEJYA2JQPP4M' where id=3; -update noar ti set b0='HFVVK3QLUXM3XVEJYA2JQPP4M' where id=3; -update noar tt set v0='5JL7GT9GZHSTC66QUJOD9QDLGU' where id=3; -update noar ti set v0='5JL7GT9GZHSTC66QUJOD9QDLGU' where id=3; -update noar tt set b1='T0UR3OTVRB4V5QZK8UK' where id=3; -update noar ti set b1='T0UR3OTVRB4V5QZK8UK' where id=3; -update noar tt set v0='VGOSM5QHPAF' where id=3; -update noar ti set v0='VGOSM5QHPAF' where id=3; -update noar tt set b2='BW50ZHD20J98UTQAN0DGLZ5KLRW' where id=3; -update noar ti set b2='BW50ZHD20J98UTQAN0DGLZ5KLRW' where id=3; -update noar tt set v0='QMPYN2VOWMG3VJ7XB9SHRWKCMGLTJNMW' where id=4; -update noar ti set v0='QMPYN2VOWMG3VJ7XB9SHRWKCMGLTJNMW' where id=4; -update noar tt set b0='UOJ21YG46EVH5LQN' where id=4; -update noar ti set b0='UOJ21YG46EVH5LQN' where id=4; -update noar tt set v0='1SK3WZ' where id=4; -update noar ti set v0='1SK3WZ' where id=4; -update noar tt set b1='XVKV5V' where id=4; -update noar ti set b1='XVKV5V' where id=4; -update noar tt set v0='RHKR97DLPQJTNU6' where id=4; -update noar ti set v0='RHKR97DLPQJTNU6' where id=4; -update noar tt set b2='C92JZCTLTW1' where id=4; -update noar ti set b2='C92JZCTLTW1' where id=4; -update noar tt set v0='7A5A1GQ5RGCFPQIOID7JMLMZD4O7O' where id=5; -update noar ti set v0='7A5A1GQ5RGCFPQIOID7JMLMZD4O7O' where id=5; -update noar tt set b0='NULO36F6' where id=5; -update noar ti set b0='NULO36F6' where id=5; -update noar tt set v0='ZUPXVSXZWCDY294B0LX1SSCHHE' where id=5; -update noar ti set v0='ZUPXVSXZWCDY294B0LX1SSCHHE' where id=5; -update noar tt set b1='RE71VUMX1ZX1ACUYTM' where id=5; -update noar ti set b1='RE71VUMX1ZX1ACUYTM' where id=5; -update noar tt set v0='ZL6EUU4EXPKL' where id=5; -update noar ti set v0='ZL6EUU4EXPKL' where id=5; -update noar tt set b2='C8Y8W4V3BP4ZSH2' where id=5; -update noar ti set b2='C8Y8W4V3BP4ZSH2' where id=5; -update noar tt set v0='UH7U' where id=6; -update noar ti set v0='UH7U' where id=6; -update noar tt set b0='I92RZFVX1220IYMATRSOAGWH' where id=6; -update noar ti set b0='I92RZFVX1220IYMATRSOAGWH' where id=6; -update noar tt set v0='BNZSHCN3JNZQMB4NR' where id=6; -update noar ti set v0='BNZSHCN3JNZQMB4NR' where id=6; -update noar tt set b1='ERLZ1QHAHUYGHXEH55CNLP2ZNYIP' where id=6; -update noar ti set b1='ERLZ1QHAHUYGHXEH55CNLP2ZNYIP' where id=6; -update noar tt set v0='UD2UDBO3WMMHN195Y4WXMU1D6' where id=6; -update noar ti set v0='UD2UDBO3WMMHN195Y4WXMU1D6' where id=6; -update noar tt set b2='2Z3O3QSJREXG7GSAGAMBS07PWU' where id=6; -update noar ti set b2='2Z3O3QSJREXG7GSAGAMBS07PWU' where id=6; -update noar tt set v0='HIL0W541UEILJ7HZ3HRL5J9KF5W7N34R' where id=7; -update noar ti set v0='HIL0W541UEILJ7HZ3HRL5J9KF5W7N34R' where id=7; -update noar tt set b0='KYWFAN2BTIBFXSH7A6OJDO' where id=7; -update noar ti set b0='KYWFAN2BTIBFXSH7A6OJDO' where id=7; -update noar tt set v0='Z49I8QYOU0NRP3KON' where id=7; -update noar ti set v0='Z49I8QYOU0NRP3KON' where id=7; -update noar tt set b1='MT0USM' where id=7; -update noar ti set b1='MT0USM' where id=7; -update noar tt set v0='4UD83QCJMBMXSHIXG' where id=7; -update noar ti set v0='4UD83QCJMBMXSHIXG' where id=7; -update noar tt set b2='YMKNAWULH2NP29WYAC9WQW76R1' where id=7; -update noar ti set b2='YMKNAWULH2NP29WYAC9WQW76R1' where id=7; -update noar tt set v0='6LM8JVZRTIL0XRF6T3W31H' where id=8; -update noar ti set v0='6LM8JVZRTIL0XRF6T3W31H' where id=8; -update noar tt set b0='OGBCZDEGLCGHOOK27AM3' where id=8; -update noar ti set b0='OGBCZDEGLCGHOOK27AM3' where id=8; -update noar tt set v0='F7GXBSH3CXFESWID3IY2ZN9ZEM3' where id=8; -update noar ti set v0='F7GXBSH3CXFESWID3IY2ZN9ZEM3' where id=8; -update noar tt set b1='1P79ZHCITKST8VJ6R7LATB47ROMPA' where id=8; -update noar ti set b1='1P79ZHCITKST8VJ6R7LATB47ROMPA' where id=8; -update noar tt set v0='VWGDZ2R0MIR4D' where id=8; -update noar ti set v0='VWGDZ2R0MIR4D' where id=8; -update noar tt set b2='O5JR5GMFPN7W9AO' where id=8; -update noar ti set b2='O5JR5GMFPN7W9AO' where id=8; -update noar tt set v0='DAUFCU9NQJNM2MCJLM41FCLB83Y5MIAE' where id=9; -update noar ti set v0='DAUFCU9NQJNM2MCJLM41FCLB83Y5MIAE' where id=9; -update noar tt set b0='NSB8GDXEXD8M8U8UMBG2S0' where id=9; -update noar ti set b0='NSB8GDXEXD8M8U8UMBG2S0' where id=9; -update noar tt set v0='LT5IFUAQJF6C6RYLK6' where id=9; -update noar ti set v0='LT5IFUAQJF6C6RYLK6' where id=9; -update noar tt set b1='ICJM4B3V8' where id=9; -update noar ti set b1='ICJM4B3V8' where id=9; -update noar tt set v0='H7ERG6AT2UC1I' where id=9; -update noar ti set v0='H7ERG6AT2UC1I' where id=9; -update noar tt set b2='5FWALHL5TLWV4ON6BO75ARMR6QE93' where id=9; -update noar ti set b2='5FWALHL5TLWV4ON6BO75ARMR6QE93' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 tinyblob not null, -b1 mediumblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='O1A1O2PXT' where id=1; -update noar ti set v0='O1A1O2PXT' where id=1; -update noar tt set b0='MF5AL' where id=1; -update noar ti set b0='MF5AL' where id=1; -update noar tt set v0='JRCIBZTS7F' where id=1; -update noar ti set v0='JRCIBZTS7F' where id=1; -update noar tt set b1='GPCY83CCQW8GC2HC' where id=1; -update noar ti set b1='GPCY83CCQW8GC2HC' where id=1; -update noar tt set v0='ZF0MJ7FVXBU9JSZ2TS4GZE6QMA2' where id=1; -update noar ti set v0='ZF0MJ7FVXBU9JSZ2TS4GZE6QMA2' where id=1; -update noar tt set b2='DBCFLRUYAVWK2FNUW95' where id=1; -update noar ti set b2='DBCFLRUYAVWK2FNUW95' where id=1; -update noar tt set v0='G1OHG' where id=2; -update noar ti set v0='G1OHG' where id=2; -update noar tt set b0='GS3KIAS90OZN82AC9RYD' where id=2; -update noar ti set b0='GS3KIAS90OZN82AC9RYD' where id=2; -update noar tt set v0='EN9' where id=2; -update noar ti set v0='EN9' where id=2; -update noar tt set b1='QP' where id=2; -update noar ti set b1='QP' where id=2; -update noar tt set v0='8NOBJ4I0QAAOGL97EPW' where id=2; -update noar ti set v0='8NOBJ4I0QAAOGL97EPW' where id=2; -update noar tt set b2='ABHCW6SDN6EV2SC7SEIY447G' where id=2; -update noar ti set b2='ABHCW6SDN6EV2SC7SEIY447G' where id=2; -update noar tt set v0='SVAEG7W0XR7TYLRCL' where id=3; -update noar ti set v0='SVAEG7W0XR7TYLRCL' where id=3; -update noar tt set b0='417GW9T6LGLY5KEJGR0QKV6C5NBID' where id=3; -update noar ti set b0='417GW9T6LGLY5KEJGR0QKV6C5NBID' where id=3; -update noar tt set v0='TN63GLN7CQK9K95RON57N83Y0NRIU' where id=3; -update noar ti set v0='TN63GLN7CQK9K95RON57N83Y0NRIU' where id=3; -update noar tt set b1='3B0UBCD2DHX4755L1SUG1TARG4CDNB' where id=3; -update noar ti set b1='3B0UBCD2DHX4755L1SUG1TARG4CDNB' where id=3; -update noar tt set v0='R9OAXCEKMALAKNDBL62LOXBVYMUE' where id=3; -update noar ti set v0='R9OAXCEKMALAKNDBL62LOXBVYMUE' where id=3; -update noar tt set b2='5JG092OA' where id=3; -update noar ti set b2='5JG092OA' where id=3; -update noar tt set v0='A' where id=4; -update noar ti set v0='A' where id=4; -update noar tt set b0='RQO9P512' where id=4; -update noar ti set b0='RQO9P512' where id=4; -update noar tt set v0='SVK15TYQ45PC' where id=4; -update noar ti set v0='SVK15TYQ45PC' where id=4; -update noar tt set b1='FMO8O4TSZ74N' where id=4; -update noar ti set b1='FMO8O4TSZ74N' where id=4; -update noar tt set v0='4YM4V' where id=4; -update noar ti set v0='4YM4V' where id=4; -update noar tt set b2='BC9FI2ZXQEFQZ5' where id=4; -update noar ti set b2='BC9FI2ZXQEFQZ5' where id=4; -update noar tt set v0='2BAH6JT1FW0TR2E7A' where id=5; -update noar ti set v0='2BAH6JT1FW0TR2E7A' where id=5; -update noar tt set b0='YRSTE5XBE' where id=5; -update noar ti set b0='YRSTE5XBE' where id=5; -update noar tt set v0='PM476HEE7SQ9R58EXAY7PI66EH0I' where id=5; -update noar ti set v0='PM476HEE7SQ9R58EXAY7PI66EH0I' where id=5; -update noar tt set b1='SX30XXLYHOST228UMDTEK1ZVK5U4J5DK' where id=5; -update noar ti set b1='SX30XXLYHOST228UMDTEK1ZVK5U4J5DK' where id=5; -update noar tt set v0='DQ0UUL' where id=5; -update noar ti set v0='DQ0UUL' where id=5; -update noar tt set b2='TCYGWW4OQMLVKWJBMCU85M7' where id=5; -update noar ti set b2='TCYGWW4OQMLVKWJBMCU85M7' where id=5; -update noar tt set v0='LHP0S8GD7CZS3MTSXPHDR86A' where id=6; -update noar ti set v0='LHP0S8GD7CZS3MTSXPHDR86A' where id=6; -update noar tt set b0='4AS65EE6OXZAXFQON6O580HBUYL' where id=6; -update noar ti set b0='4AS65EE6OXZAXFQON6O580HBUYL' where id=6; -update noar tt set v0='287LTAG2HN80ZLFR53CR5MCKW' where id=6; -update noar ti set v0='287LTAG2HN80ZLFR53CR5MCKW' where id=6; -update noar tt set b1='D1AJ6XYQ64947YV1548PIY2XVS87' where id=6; -update noar ti set b1='D1AJ6XYQ64947YV1548PIY2XVS87' where id=6; -update noar tt set v0='9WF8' where id=6; -update noar ti set v0='9WF8' where id=6; -update noar tt set b2='HE4CRUBPCCYKEPY2FI' where id=6; -update noar ti set b2='HE4CRUBPCCYKEPY2FI' where id=6; -update noar tt set v0='6DSRCP8J' where id=7; -update noar ti set v0='6DSRCP8J' where id=7; -update noar tt set b0='V8FVFQ' where id=7; -update noar ti set b0='V8FVFQ' where id=7; -update noar tt set v0='T64NCGR2ACG3UEM0M3RY9V4O1' where id=7; -update noar ti set v0='T64NCGR2ACG3UEM0M3RY9V4O1' where id=7; -update noar tt set b1='FCJAO17TBNJQI2' where id=7; -update noar ti set b1='FCJAO17TBNJQI2' where id=7; -update noar tt set v0='M2VRN127QI2KTAICIQ8PUVF' where id=7; -update noar ti set v0='M2VRN127QI2KTAICIQ8PUVF' where id=7; -update noar tt set b2='FUZCTE' where id=7; -update noar ti set b2='FUZCTE' where id=7; -update noar tt set v0='YJXZ2OO0DCXLND3VR971L' where id=8; -update noar ti set v0='YJXZ2OO0DCXLND3VR971L' where id=8; -update noar tt set b0='761VT8D8ZVOVVB' where id=8; -update noar ti set b0='761VT8D8ZVOVVB' where id=8; -update noar tt set v0='VQPHXF3IHY8XWCUEJSQA' where id=8; -update noar ti set v0='VQPHXF3IHY8XWCUEJSQA' where id=8; -update noar tt set b1='KWLB9XQC4G24' where id=8; -update noar ti set b1='KWLB9XQC4G24' where id=8; -update noar tt set v0='7UPTJXBAG3JQETIKMQJJH0XTGMDEF4' where id=8; -update noar ti set v0='7UPTJXBAG3JQETIKMQJJH0XTGMDEF4' where id=8; -update noar tt set b2='DTUN91TE' where id=8; -update noar ti set b2='DTUN91TE' where id=8; -update noar tt set v0='94O78OO94CRWGLM' where id=9; -update noar ti set v0='94O78OO94CRWGLM' where id=9; -update noar tt set b0='4IQ13N8SZ4QM8NADQJ5D6YKC9' where id=9; -update noar ti set b0='4IQ13N8SZ4QM8NADQJ5D6YKC9' where id=9; -update noar tt set v0='WIRTRYJ8B0NMPB8WTD55I4MV1R5' where id=9; -update noar ti set v0='WIRTRYJ8B0NMPB8WTD55I4MV1R5' where id=9; -update noar tt set b1='RGJ3HE9DOBT8Q5BWY' where id=9; -update noar ti set b1='RGJ3HE9DOBT8Q5BWY' where id=9; -update noar tt set v0='ZYZPCMMKJMB6E4OROUN4N2G5JXRR' where id=9; -update noar ti set v0='ZYZPCMMKJMB6E4OROUN4N2G5JXRR' where id=9; -update noar tt set b2='KNVYXA5JJWAPY6NWL' where id=9; -update noar ti set b2='KNVYXA5JJWAPY6NWL' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 tinyblob not null, -b1 mediumblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='4A7PLTN2R61TP8V957L1LZIWS2MQT6DD' where id=1; -update noar ti set v0='4A7PLTN2R61TP8V957L1LZIWS2MQT6DD' where id=1; -update noar tt set b0='SZ4S290JRQ1EB405NVJVYA' where id=1; -update noar ti set b0='SZ4S290JRQ1EB405NVJVYA' where id=1; -update noar tt set v0='VF8B69OS' where id=1; -update noar ti set v0='VF8B69OS' where id=1; -update noar tt set b1='SF8VXDGM61U4' where id=1; -update noar ti set b1='SF8VXDGM61U4' where id=1; -update noar tt set v0='8EYMQGIWIBZTSJ3V3CPPR98PX2MBE' where id=1; -update noar ti set v0='8EYMQGIWIBZTSJ3V3CPPR98PX2MBE' where id=1; -update noar tt set b2='IG6Q9JLGGJNPQLNBOS8P6HSM1C' where id=1; -update noar ti set b2='IG6Q9JLGGJNPQLNBOS8P6HSM1C' where id=1; -update noar tt set v0='RE2D6YSYU4DMKVDISKZJXEBG5' where id=2; -update noar ti set v0='RE2D6YSYU4DMKVDISKZJXEBG5' where id=2; -update noar tt set b0='7CJDZ05XVE' where id=2; -update noar ti set b0='7CJDZ05XVE' where id=2; -update noar tt set v0='H4YF052OA84JF' where id=2; -update noar ti set v0='H4YF052OA84JF' where id=2; -update noar tt set b1='HUO20RGN9QCGE5T2DW' where id=2; -update noar ti set b1='HUO20RGN9QCGE5T2DW' where id=2; -update noar tt set v0='PHQIDGUSJXAHFFLEV94CQREXV8CO0' where id=2; -update noar ti set v0='PHQIDGUSJXAHFFLEV94CQREXV8CO0' where id=2; -update noar tt set b2='9G0B9' where id=2; -update noar ti set b2='9G0B9' where id=2; -update noar tt set v0='6Y9J5LS9CCZMBKC' where id=3; -update noar ti set v0='6Y9J5LS9CCZMBKC' where id=3; -update noar tt set b0='K7039U41DBKCV71YCQDMEG' where id=3; -update noar ti set b0='K7039U41DBKCV71YCQDMEG' where id=3; -update noar tt set v0='J84DQPHWNHZ6K6AJTIJ69GUGREDMGR2C' where id=3; -update noar ti set v0='J84DQPHWNHZ6K6AJTIJ69GUGREDMGR2C' where id=3; -update noar tt set b1='URZJPKG64L' where id=3; -update noar ti set b1='URZJPKG64L' where id=3; -update noar tt set v0='YC2IFXQWUOGL2AP' where id=3; -update noar ti set v0='YC2IFXQWUOGL2AP' where id=3; -update noar tt set b2='41USV259' where id=3; -update noar ti set b2='41USV259' where id=3; -update noar tt set v0='X67ZRN1O1K7IBLGC2CUGJOZKZMN6C4' where id=4; -update noar ti set v0='X67ZRN1O1K7IBLGC2CUGJOZKZMN6C4' where id=4; -update noar tt set b0='FFVFBEZV7EZ' where id=4; -update noar ti set b0='FFVFBEZV7EZ' where id=4; -update noar tt set v0='FH81L79' where id=4; -update noar ti set v0='FH81L79' where id=4; -update noar tt set b1='YPKOTFOYYVHVJFYQNP32M' where id=4; -update noar ti set b1='YPKOTFOYYVHVJFYQNP32M' where id=4; -update noar tt set v0='6DJQM7LBVKL68YCT5UH6' where id=4; -update noar ti set v0='6DJQM7LBVKL68YCT5UH6' where id=4; -update noar tt set b2='A37BVEJZZOI1XC02N' where id=4; -update noar ti set b2='A37BVEJZZOI1XC02N' where id=4; -update noar tt set v0='1UVVDYLLRM' where id=5; -update noar ti set v0='1UVVDYLLRM' where id=5; -update noar tt set b0='729ZG1WVN1BELZG53QC' where id=5; -update noar ti set b0='729ZG1WVN1BELZG53QC' where id=5; -update noar tt set v0='IUG6E7PMDZGR0IHE5F3MII0B98' where id=5; -update noar ti set v0='IUG6E7PMDZGR0IHE5F3MII0B98' where id=5; -update noar tt set b1='HDM3IT6V3GZCV83' where id=5; -update noar ti set b1='HDM3IT6V3GZCV83' where id=5; -update noar tt set v0='G8ST0' where id=5; -update noar ti set v0='G8ST0' where id=5; -update noar tt set b2='46P6N' where id=5; -update noar ti set b2='46P6N' where id=5; -update noar tt set v0='52WADJ56O3J' where id=6; -update noar ti set v0='52WADJ56O3J' where id=6; -update noar tt set b0='60OIJY9K5C93B1015CNNT8UP' where id=6; -update noar ti set b0='60OIJY9K5C93B1015CNNT8UP' where id=6; -update noar tt set v0='9XG59G3RK6FY7PZ9LKT212CA1B3JIS' where id=6; -update noar ti set v0='9XG59G3RK6FY7PZ9LKT212CA1B3JIS' where id=6; -update noar tt set b1='VKRFVE4G9MI6PTYS7UAN' where id=6; -update noar ti set b1='VKRFVE4G9MI6PTYS7UAN' where id=6; -update noar tt set v0='3KOQ9H3F149L53R5A4RC84QJ6IW' where id=6; -update noar ti set v0='3KOQ9H3F149L53R5A4RC84QJ6IW' where id=6; -update noar tt set b2='KXQPECWYUWQPI4Y7RJXE47' where id=6; -update noar ti set b2='KXQPECWYUWQPI4Y7RJXE47' where id=6; -update noar tt set v0='M9GNVQH4V4DO6O3A98X0ODPHZPU65GC1' where id=7; -update noar ti set v0='M9GNVQH4V4DO6O3A98X0ODPHZPU65GC1' where id=7; -update noar tt set b0='G45C2MLHMMJS7U9SJR90' where id=7; -update noar ti set b0='G45C2MLHMMJS7U9SJR90' where id=7; -update noar tt set v0='SKHVJID72ULRNWLU48ZQ5LPJBOLPH' where id=7; -update noar ti set v0='SKHVJID72ULRNWLU48ZQ5LPJBOLPH' where id=7; -update noar tt set b1='KYJWCFK6P35VWWKXOK75M3OO' where id=7; -update noar ti set b1='KYJWCFK6P35VWWKXOK75M3OO' where id=7; -update noar tt set v0='Y2RWXQXR5B8GECVM7AUAN7YJB0FS958' where id=7; -update noar ti set v0='Y2RWXQXR5B8GECVM7AUAN7YJB0FS958' where id=7; -update noar tt set b2='AXPFVRQWCM2BZH7BNNY9BDELBEDIRVI' where id=7; -update noar ti set b2='AXPFVRQWCM2BZH7BNNY9BDELBEDIRVI' where id=7; -update noar tt set v0='BXB3IZ7HCTC4339LV3QN' where id=8; -update noar ti set v0='BXB3IZ7HCTC4339LV3QN' where id=8; -update noar tt set b0='PCQI97EI7OB6HD74' where id=8; -update noar ti set b0='PCQI97EI7OB6HD74' where id=8; -update noar tt set v0='66M4K2NART1' where id=8; -update noar ti set v0='66M4K2NART1' where id=8; -update noar tt set b1='LYUPXV67WQYRAKZZYBLIVXGGQ5GAL' where id=8; -update noar ti set b1='LYUPXV67WQYRAKZZYBLIVXGGQ5GAL' where id=8; -update noar tt set v0='MPYKI51OS2LWRGTH' where id=8; -update noar ti set v0='MPYKI51OS2LWRGTH' where id=8; -update noar tt set b2='7UEMPQWI4F' where id=8; -update noar ti set b2='7UEMPQWI4F' where id=8; -update noar tt set v0='4B1RBT1L8O29ZTT' where id=9; -update noar ti set v0='4B1RBT1L8O29ZTT' where id=9; -update noar tt set b0='MDEVA2CEOULTM0AYCXO8MG' where id=9; -update noar ti set b0='MDEVA2CEOULTM0AYCXO8MG' where id=9; -update noar tt set v0='6V24D0' where id=9; -update noar ti set v0='6V24D0' where id=9; -update noar tt set b1='O9SXTJY4SPQI3MVWMAMKX8ISIU9X' where id=9; -update noar ti set b1='O9SXTJY4SPQI3MVWMAMKX8ISIU9X' where id=9; -update noar tt set v0='4EF318TZIG71AL5LWEQQGD' where id=9; -update noar ti set v0='4EF318TZIG71AL5LWEQQGD' where id=9; -update noar tt set b2='BKHJRR4OIKXX8EABIM' where id=9; -update noar ti set b2='BKHJRR4OIKXX8EABIM' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 tinyblob null, -b1 mediumblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='HPZBU3P9GUSTWDKHX7F92M084' where id=1; -update noar ti set v0='HPZBU3P9GUSTWDKHX7F92M084' where id=1; -update noar tt set b0='MJUZ9K47OFMXW6N82QI2E0WJF' where id=1; -update noar ti set b0='MJUZ9K47OFMXW6N82QI2E0WJF' where id=1; -update noar tt set v0='9NBPN152DN55WS3FPQU' where id=1; -update noar ti set v0='9NBPN152DN55WS3FPQU' where id=1; -update noar tt set b1='8WFNIVJETT5K' where id=1; -update noar ti set b1='8WFNIVJETT5K' where id=1; -update noar tt set v0='WJBCQ0X7DQUA0F33617GD7' where id=1; -update noar ti set v0='WJBCQ0X7DQUA0F33617GD7' where id=1; -update noar tt set b2='KMY0AZASEM5I6RH06' where id=1; -update noar ti set b2='KMY0AZASEM5I6RH06' where id=1; -update noar tt set v0='29UXP1U' where id=2; -update noar ti set v0='29UXP1U' where id=2; -update noar tt set b0='AKLIRCX714DI9NCVD5H' where id=2; -update noar ti set b0='AKLIRCX714DI9NCVD5H' where id=2; -update noar tt set v0='9ZJUKEGQET7RVJYZRMC' where id=2; -update noar ti set v0='9ZJUKEGQET7RVJYZRMC' where id=2; -update noar tt set b1='EHGD7KMYJFO0' where id=2; -update noar ti set b1='EHGD7KMYJFO0' where id=2; -update noar tt set v0='SKLKYHD' where id=2; -update noar ti set v0='SKLKYHD' where id=2; -update noar tt set b2='3TQUZQ88PYOGUQ68' where id=2; -update noar ti set b2='3TQUZQ88PYOGUQ68' where id=2; -update noar tt set v0='P6O365U335KD0R5J9IHVS42T3BN' where id=3; -update noar ti set v0='P6O365U335KD0R5J9IHVS42T3BN' where id=3; -update noar tt set b0='PYLKH' where id=3; -update noar ti set b0='PYLKH' where id=3; -update noar tt set v0='FH5CISSDVBGEQ' where id=3; -update noar ti set v0='FH5CISSDVBGEQ' where id=3; -update noar tt set b1='CDOISD8PWDKVXJIGRIDGSKSU32' where id=3; -update noar ti set b1='CDOISD8PWDKVXJIGRIDGSKSU32' where id=3; -update noar tt set v0='9LLIKQQNZKQ5JEI' where id=3; -update noar ti set v0='9LLIKQQNZKQ5JEI' where id=3; -update noar tt set b2='D3ACYO' where id=3; -update noar ti set b2='D3ACYO' where id=3; -update noar tt set v0='3D877U3CPL4EVSPY4I4SKQCXSF' where id=4; -update noar ti set v0='3D877U3CPL4EVSPY4I4SKQCXSF' where id=4; -update noar tt set b0='DAKW5ZUFH45MI3' where id=4; -update noar ti set b0='DAKW5ZUFH45MI3' where id=4; -update noar tt set v0='0YWJPDCE1IDZ17E74K7' where id=4; -update noar ti set v0='0YWJPDCE1IDZ17E74K7' where id=4; -update noar tt set b1='SX7NDB5VYW1NYPYLFESSK' where id=4; -update noar ti set b1='SX7NDB5VYW1NYPYLFESSK' where id=4; -update noar tt set v0='XYO4YLZ3L7TILORLV1UT6EPP5' where id=4; -update noar ti set v0='XYO4YLZ3L7TILORLV1UT6EPP5' where id=4; -update noar tt set b2='7K8Q9M8ALB8LF8KCFIP' where id=4; -update noar ti set b2='7K8Q9M8ALB8LF8KCFIP' where id=4; -update noar tt set v0='VZLL' where id=5; -update noar ti set v0='VZLL' where id=5; -update noar tt set b0='N3Y24AO03' where id=5; -update noar ti set b0='N3Y24AO03' where id=5; -update noar tt set v0='IN2DO3R' where id=5; -update noar ti set v0='IN2DO3R' where id=5; -update noar tt set b1='1Y6ZISDA3DXUMFW9FCK94P5Q' where id=5; -update noar ti set b1='1Y6ZISDA3DXUMFW9FCK94P5Q' where id=5; -update noar tt set v0='9XTRGKBD9VH51CMUTLAWT' where id=5; -update noar ti set v0='9XTRGKBD9VH51CMUTLAWT' where id=5; -update noar tt set b2='CN8A4KH3X84XQ7N81N97FJ4TUD6T' where id=5; -update noar ti set b2='CN8A4KH3X84XQ7N81N97FJ4TUD6T' where id=5; -update noar tt set v0='CM' where id=6; -update noar ti set v0='CM' where id=6; -update noar tt set b0='927MMNI5HRT7YT6T54TRKH' where id=6; -update noar ti set b0='927MMNI5HRT7YT6T54TRKH' where id=6; -update noar tt set v0='11KA5OOYJ8OG' where id=6; -update noar ti set v0='11KA5OOYJ8OG' where id=6; -update noar tt set b1='KMNE7TYKTDT6TNPIENCN3Y5DEDSN' where id=6; -update noar ti set b1='KMNE7TYKTDT6TNPIENCN3Y5DEDSN' where id=6; -update noar tt set v0='3' where id=6; -update noar ti set v0='3' where id=6; -update noar tt set b2='IL648UAUQYO5I9UR4AICCC34X4K3XRSX' where id=6; -update noar ti set b2='IL648UAUQYO5I9UR4AICCC34X4K3XRSX' where id=6; -update noar tt set v0='TBHSQMWHN6VRYQG3YL3CIP69BVD' where id=7; -update noar ti set v0='TBHSQMWHN6VRYQG3YL3CIP69BVD' where id=7; -update noar tt set b0='9X1RIFI8J29VL2UY' where id=7; -update noar ti set b0='9X1RIFI8J29VL2UY' where id=7; -update noar tt set v0='WJOAC6LJKVNXJRWTJT' where id=7; -update noar ti set v0='WJOAC6LJKVNXJRWTJT' where id=7; -update noar tt set b1='KZHBWY6CLM8A8F1M' where id=7; -update noar ti set b1='KZHBWY6CLM8A8F1M' where id=7; -update noar tt set v0='R2UNRD' where id=7; -update noar ti set v0='R2UNRD' where id=7; -update noar tt set b2='1WVM0S09' where id=7; -update noar ti set b2='1WVM0S09' where id=7; -update noar tt set v0='O5U3WT' where id=8; -update noar ti set v0='O5U3WT' where id=8; -update noar tt set b0='Q7GG47GLX68L4A' where id=8; -update noar ti set b0='Q7GG47GLX68L4A' where id=8; -update noar tt set v0='94TVMCXQHIOCTZ8DSN2PP' where id=8; -update noar ti set v0='94TVMCXQHIOCTZ8DSN2PP' where id=8; -update noar tt set b1='JHASN1Z07C73KASSKYKY0' where id=8; -update noar ti set b1='JHASN1Z07C73KASSKYKY0' where id=8; -update noar tt set v0='8KY0FOOQ' where id=8; -update noar ti set v0='8KY0FOOQ' where id=8; -update noar tt set b2='ZW83NFKIL6' where id=8; -update noar ti set b2='ZW83NFKIL6' where id=8; -update noar tt set v0='DULXBV72WCSC9C4K9Q' where id=9; -update noar ti set v0='DULXBV72WCSC9C4K9Q' where id=9; -update noar tt set b0='TEL51M5L55URCC' where id=9; -update noar ti set b0='TEL51M5L55URCC' where id=9; -update noar tt set v0='DPKLQUD6DSSOBJU' where id=9; -update noar ti set v0='DPKLQUD6DSSOBJU' where id=9; -update noar tt set b1='AOD34HPC' where id=9; -update noar ti set b1='AOD34HPC' where id=9; -update noar tt set v0='69RPMNC' where id=9; -update noar ti set v0='69RPMNC' where id=9; -update noar tt set b2='0GTW45XGK0K4ST27YMUSCCH2YIO' where id=9; -update noar ti set b2='0GTW45XGK0K4ST27YMUSCCH2YIO' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 tinyblob null, -b1 mediumblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='POFON5WKPSN7WGYUPYY2VKX' where id=1; -update noar ti set v0='POFON5WKPSN7WGYUPYY2VKX' where id=1; -update noar tt set b0='18ZQLFZWU9S7S39' where id=1; -update noar ti set b0='18ZQLFZWU9S7S39' where id=1; -update noar tt set v0='PGAJAEJGW2TMS5PBRQ9F78V9' where id=1; -update noar ti set v0='PGAJAEJGW2TMS5PBRQ9F78V9' where id=1; -update noar tt set b1='0EPQMQH1FSHT5U' where id=1; -update noar ti set b1='0EPQMQH1FSHT5U' where id=1; -update noar tt set v0='AKKCK1HRPC' where id=1; -update noar ti set v0='AKKCK1HRPC' where id=1; -update noar tt set b2='LB1R4UFSQ65GXPKK4AKE' where id=1; -update noar ti set b2='LB1R4UFSQ65GXPKK4AKE' where id=1; -update noar tt set v0='00UZP7BC' where id=2; -update noar ti set v0='00UZP7BC' where id=2; -update noar tt set b0='8U' where id=2; -update noar ti set b0='8U' where id=2; -update noar tt set v0='6EHFY3FFJOD9D0O9LTCL' where id=2; -update noar ti set v0='6EHFY3FFJOD9D0O9LTCL' where id=2; -update noar tt set b1='OIW8NBMJK8DF7X1FLX5' where id=2; -update noar ti set b1='OIW8NBMJK8DF7X1FLX5' where id=2; -update noar tt set v0='DVV' where id=2; -update noar ti set v0='DVV' where id=2; -update noar tt set b2='IFV' where id=2; -update noar ti set b2='IFV' where id=2; -update noar tt set v0='7WT0V6SW18TVOUT9' where id=3; -update noar ti set v0='7WT0V6SW18TVOUT9' where id=3; -update noar tt set b0='VNP7RKEXKU34' where id=3; -update noar ti set b0='VNP7RKEXKU34' where id=3; -update noar tt set v0='ESL34CBK8' where id=3; -update noar ti set v0='ESL34CBK8' where id=3; -update noar tt set b1='1GDEJIENQ' where id=3; -update noar ti set b1='1GDEJIENQ' where id=3; -update noar tt set v0='X3T8HW29JJSD1XS' where id=3; -update noar ti set v0='X3T8HW29JJSD1XS' where id=3; -update noar tt set b2='BNFVDTA0L43MR6RGDBB4O' where id=3; -update noar ti set b2='BNFVDTA0L43MR6RGDBB4O' where id=3; -update noar tt set v0='49PR' where id=4; -update noar ti set v0='49PR' where id=4; -update noar tt set b0='R' where id=4; -update noar ti set b0='R' where id=4; -update noar tt set v0='TET5OZETWQLGKG8CT562RNSHXM' where id=4; -update noar ti set v0='TET5OZETWQLGKG8CT562RNSHXM' where id=4; -update noar tt set b1='STLBPEQHR9X1D7EZ1FC' where id=4; -update noar ti set b1='STLBPEQHR9X1D7EZ1FC' where id=4; -update noar tt set v0='NIYP0MQB8ZP8IST06NC6YQOXI3DU' where id=4; -update noar ti set v0='NIYP0MQB8ZP8IST06NC6YQOXI3DU' where id=4; -update noar tt set b2='4G6BHU4PY7I2YPFXNWRRY0VH2' where id=4; -update noar ti set b2='4G6BHU4PY7I2YPFXNWRRY0VH2' where id=4; -update noar tt set v0='DH2UDAP542BQXWZU87' where id=5; -update noar ti set v0='DH2UDAP542BQXWZU87' where id=5; -update noar tt set b0='RUHEB80EMAQ3TZX602BEUK' where id=5; -update noar ti set b0='RUHEB80EMAQ3TZX602BEUK' where id=5; -update noar tt set v0='I7CEPMGBML' where id=5; -update noar ti set v0='I7CEPMGBML' where id=5; -update noar tt set b1='DHVLWEQA2NH3' where id=5; -update noar ti set b1='DHVLWEQA2NH3' where id=5; -update noar tt set v0='0KV355DFPAGHQRJ7OY71O5' where id=5; -update noar ti set v0='0KV355DFPAGHQRJ7OY71O5' where id=5; -update noar tt set b2='NJKQE9FDEMMTFH2VLVED6NIQHYR0IQ' where id=5; -update noar ti set b2='NJKQE9FDEMMTFH2VLVED6NIQHYR0IQ' where id=5; -update noar tt set v0='I99NF9NW46SH4C7VD8GYLB9XS1O70W4K' where id=6; -update noar ti set v0='I99NF9NW46SH4C7VD8GYLB9XS1O70W4K' where id=6; -update noar tt set b0='HE62JKORDAOG4B7G063HAF9SJ' where id=6; -update noar ti set b0='HE62JKORDAOG4B7G063HAF9SJ' where id=6; -update noar tt set v0='4079ILLBGYXAEJIZULS64L7H' where id=6; -update noar ti set v0='4079ILLBGYXAEJIZULS64L7H' where id=6; -update noar tt set b1='76AR' where id=6; -update noar ti set b1='76AR' where id=6; -update noar tt set v0='9VHOFPKYNQGR8NTGMFHA5TJ6' where id=6; -update noar ti set v0='9VHOFPKYNQGR8NTGMFHA5TJ6' where id=6; -update noar tt set b2='CS' where id=6; -update noar ti set b2='CS' where id=6; -update noar tt set v0='NJNJO0Y7U1XJ2' where id=7; -update noar ti set v0='NJNJO0Y7U1XJ2' where id=7; -update noar tt set b0='UJBXQTC7SHQC48993FJLIY7G' where id=7; -update noar ti set b0='UJBXQTC7SHQC48993FJLIY7G' where id=7; -update noar tt set v0='5G73BQC4D' where id=7; -update noar ti set v0='5G73BQC4D' where id=7; -update noar tt set b1='S5QEJ47SMMSUFH5X5AE9O' where id=7; -update noar ti set b1='S5QEJ47SMMSUFH5X5AE9O' where id=7; -update noar tt set v0='UVQ0SUXN8S1' where id=7; -update noar ti set v0='UVQ0SUXN8S1' where id=7; -update noar tt set b2='3UOIZ2UMMF7ZK4PQ' where id=7; -update noar ti set b2='3UOIZ2UMMF7ZK4PQ' where id=7; -update noar tt set v0='619E3D7LU' where id=8; -update noar ti set v0='619E3D7LU' where id=8; -update noar tt set b0='WLCZ816UX5BFH0B' where id=8; -update noar ti set b0='WLCZ816UX5BFH0B' where id=8; -update noar tt set v0='O4WA0N7GDOGGOWTR80CFGK6' where id=8; -update noar ti set v0='O4WA0N7GDOGGOWTR80CFGK6' where id=8; -update noar tt set b1='X32865E' where id=8; -update noar ti set b1='X32865E' where id=8; -update noar tt set v0='UNQJB3NFHIJJOL254EIUSP9WUSLTSQ' where id=8; -update noar ti set v0='UNQJB3NFHIJJOL254EIUSP9WUSLTSQ' where id=8; -update noar tt set b2='PQAR64CDPEP2IX7BG22Y0MHRROH' where id=8; -update noar ti set b2='PQAR64CDPEP2IX7BG22Y0MHRROH' where id=8; -update noar tt set v0='XSWJL' where id=9; -update noar ti set v0='XSWJL' where id=9; -update noar tt set b0='PD118O5H6684DAA7NWFDF' where id=9; -update noar ti set b0='PD118O5H6684DAA7NWFDF' where id=9; -update noar tt set v0='VO7K' where id=9; -update noar ti set v0='VO7K' where id=9; -update noar tt set b1='PT2JJDY24NIAV8TG' where id=9; -update noar ti set b1='PT2JJDY24NIAV8TG' where id=9; -update noar tt set v0='K169602Q28' where id=9; -update noar ti set v0='K169602Q28' where id=9; -update noar tt set b2='PHL5HBJ' where id=9; -update noar ti set b2='PHL5HBJ' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 tinyblob not null, -b1 mediumblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='N8DGZFT4CXJ35' where id=1; -update noar ti set v0='N8DGZFT4CXJ35' where id=1; -update noar tt set b0='AHVZJIAE' where id=1; -update noar ti set b0='AHVZJIAE' where id=1; -update noar tt set v0='U1YR5GK9' where id=1; -update noar ti set v0='U1YR5GK9' where id=1; -update noar tt set b1='F1SW7DRJZB6O9ZUYPMJH' where id=1; -update noar ti set b1='F1SW7DRJZB6O9ZUYPMJH' where id=1; -update noar tt set v0='CO0IFCFEPWBNITJGJUCQ74UI' where id=1; -update noar ti set v0='CO0IFCFEPWBNITJGJUCQ74UI' where id=1; -update noar tt set b2='VVXGZP' where id=1; -update noar ti set b2='VVXGZP' where id=1; -update noar tt set v0='83679JNR6FV341ET9ZNCAIQU02D6BMQ' where id=2; -update noar ti set v0='83679JNR6FV341ET9ZNCAIQU02D6BMQ' where id=2; -update noar tt set b0='8R' where id=2; -update noar ti set b0='8R' where id=2; -update noar tt set v0='V4CORXB2OYL0W7TZZPCTM4A9VSU' where id=2; -update noar ti set v0='V4CORXB2OYL0W7TZZPCTM4A9VSU' where id=2; -update noar tt set b1='7XXB0E0TO80JW' where id=2; -update noar ti set b1='7XXB0E0TO80JW' where id=2; -update noar tt set v0='3QF' where id=2; -update noar ti set v0='3QF' where id=2; -update noar tt set b2='UJJQ6U34UDEHHMT9ML' where id=2; -update noar ti set b2='UJJQ6U34UDEHHMT9ML' where id=2; -update noar tt set v0='O8E' where id=3; -update noar ti set v0='O8E' where id=3; -update noar tt set b0='0TIB5X2QT' where id=3; -update noar ti set b0='0TIB5X2QT' where id=3; -update noar tt set v0='MR5R0YBUPNMB9YU7YV18JLLYU6WOLO' where id=3; -update noar ti set v0='MR5R0YBUPNMB9YU7YV18JLLYU6WOLO' where id=3; -update noar tt set b1='KWAGR1' where id=3; -update noar ti set b1='KWAGR1' where id=3; -update noar tt set v0='ZYBUMPA6LAELS9RIAV' where id=3; -update noar ti set v0='ZYBUMPA6LAELS9RIAV' where id=3; -update noar tt set b2='A526JIW26' where id=3; -update noar ti set b2='A526JIW26' where id=3; -update noar tt set v0='L86BTKOVBT7P' where id=4; -update noar ti set v0='L86BTKOVBT7P' where id=4; -update noar tt set b0='FW' where id=4; -update noar ti set b0='FW' where id=4; -update noar tt set v0='QNREEE5VLGXUU' where id=4; -update noar ti set v0='QNREEE5VLGXUU' where id=4; -update noar tt set b1='02UDHFXAILMZL1MYJBKZVPXV' where id=4; -update noar ti set b1='02UDHFXAILMZL1MYJBKZVPXV' where id=4; -update noar tt set v0='4A0SIK7MG' where id=4; -update noar ti set v0='4A0SIK7MG' where id=4; -update noar tt set b2='MQQ210DVRYER2KZ0K7N' where id=4; -update noar ti set b2='MQQ210DVRYER2KZ0K7N' where id=4; -update noar tt set v0='FPDWGDBGUZDJ8G8VNVZQSW5CECI85V7' where id=5; -update noar ti set v0='FPDWGDBGUZDJ8G8VNVZQSW5CECI85V7' where id=5; -update noar tt set b0='JSUTYO8OLBVF2D396V4SDK3C7' where id=5; -update noar ti set b0='JSUTYO8OLBVF2D396V4SDK3C7' where id=5; -update noar tt set v0='A7GQ0CNZPOJFABQ2NVCVJB' where id=5; -update noar ti set v0='A7GQ0CNZPOJFABQ2NVCVJB' where id=5; -update noar tt set b1='IN' where id=5; -update noar ti set b1='IN' where id=5; -update noar tt set v0='MCYKQUT3Q5I8' where id=5; -update noar ti set v0='MCYKQUT3Q5I8' where id=5; -update noar tt set b2='B' where id=5; -update noar ti set b2='B' where id=5; -update noar tt set v0='NCLMBO5YMDBMF' where id=6; -update noar ti set v0='NCLMBO5YMDBMF' where id=6; -update noar tt set b0='JDVOKML69' where id=6; -update noar ti set b0='JDVOKML69' where id=6; -update noar tt set v0='CC6HSSMJ0VQQLSCLME5184MQ' where id=6; -update noar ti set v0='CC6HSSMJ0VQQLSCLME5184MQ' where id=6; -update noar tt set b1='07FAJQHY3HTR0CE8X1UJS0FM8W7B' where id=6; -update noar ti set b1='07FAJQHY3HTR0CE8X1UJS0FM8W7B' where id=6; -update noar tt set v0='G5WGBUMSBKJT5UTHCXO9FCS' where id=6; -update noar ti set v0='G5WGBUMSBKJT5UTHCXO9FCS' where id=6; -update noar tt set b2='2IX' where id=6; -update noar ti set b2='2IX' where id=6; -update noar tt set v0='5YVHB5EDS4JJ668M4BGMEX49TKC7' where id=7; -update noar ti set v0='5YVHB5EDS4JJ668M4BGMEX49TKC7' where id=7; -update noar tt set b0='9TE70UGGE8' where id=7; -update noar ti set b0='9TE70UGGE8' where id=7; -update noar tt set v0='G3UE4MPCXE44V' where id=7; -update noar ti set v0='G3UE4MPCXE44V' where id=7; -update noar tt set b1='R6YLVCBHC1G0S6GZWKK6FIG5' where id=7; -update noar ti set b1='R6YLVCBHC1G0S6GZWKK6FIG5' where id=7; -update noar tt set v0='CPZW3IU51718KPGW03' where id=7; -update noar ti set v0='CPZW3IU51718KPGW03' where id=7; -update noar tt set b2='ZTKU' where id=7; -update noar ti set b2='ZTKU' where id=7; -update noar tt set v0='41GIBG3SIVSP3AGBCQ4IAJX' where id=8; -update noar ti set v0='41GIBG3SIVSP3AGBCQ4IAJX' where id=8; -update noar tt set b0='IIT9XHT8XQ23ICG2VDE2UVQ' where id=8; -update noar ti set b0='IIT9XHT8XQ23ICG2VDE2UVQ' where id=8; -update noar tt set v0='6JFT16AA31JN' where id=8; -update noar ti set v0='6JFT16AA31JN' where id=8; -update noar tt set b1='G5AV1ZWE' where id=8; -update noar ti set b1='G5AV1ZWE' where id=8; -update noar tt set v0='V0' where id=8; -update noar ti set v0='V0' where id=8; -update noar tt set b2='7704D2HMQUJLU1EEIDVA1TNGCL0BK1' where id=8; -update noar ti set b2='7704D2HMQUJLU1EEIDVA1TNGCL0BK1' where id=8; -update noar tt set v0='UHZWXWJTXE7AS3053G' where id=9; -update noar ti set v0='UHZWXWJTXE7AS3053G' where id=9; -update noar tt set b0='S9M372YCI' where id=9; -update noar ti set b0='S9M372YCI' where id=9; -update noar tt set v0='VU5' where id=9; -update noar ti set v0='VU5' where id=9; -update noar tt set b1='8' where id=9; -update noar ti set b1='8' where id=9; -update noar tt set v0='8ZU4H3G' where id=9; -update noar ti set v0='8ZU4H3G' where id=9; -update noar tt set b2='VFSU3R4R60' where id=9; -update noar ti set b2='VFSU3R4R60' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 tinyblob not null, -b1 mediumblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='NI5E47EG49GOYPVVXO86S1RX65' where id=1; -update noar ti set v0='NI5E47EG49GOYPVVXO86S1RX65' where id=1; -update noar tt set b0='EE63OMQO7W' where id=1; -update noar ti set b0='EE63OMQO7W' where id=1; -update noar tt set v0='ROK' where id=1; -update noar ti set v0='ROK' where id=1; -update noar tt set b1='ITL4BBLNQLDPFN7JI8WQWLD6' where id=1; -update noar ti set b1='ITL4BBLNQLDPFN7JI8WQWLD6' where id=1; -update noar tt set v0='4' where id=1; -update noar ti set v0='4' where id=1; -update noar tt set b2='MI95VJ8R2OQ468Z' where id=1; -update noar ti set b2='MI95VJ8R2OQ468Z' where id=1; -update noar tt set v0='FDNEEYTF9G' where id=2; -update noar ti set v0='FDNEEYTF9G' where id=2; -update noar tt set b0='BRND3H6UWCSK0WO89T9YDD1LMRPDK6Z' where id=2; -update noar ti set b0='BRND3H6UWCSK0WO89T9YDD1LMRPDK6Z' where id=2; -update noar tt set v0='AQBMGF0DZ' where id=2; -update noar ti set v0='AQBMGF0DZ' where id=2; -update noar tt set b1='T2KSOD2FPL188JR5' where id=2; -update noar ti set b1='T2KSOD2FPL188JR5' where id=2; -update noar tt set v0='8KG5' where id=2; -update noar ti set v0='8KG5' where id=2; -update noar tt set b2='G277UED4A5CYR1DYU2WTKQUFV7' where id=2; -update noar ti set b2='G277UED4A5CYR1DYU2WTKQUFV7' where id=2; -update noar tt set v0='XI7EXI9RQCFES7C' where id=3; -update noar ti set v0='XI7EXI9RQCFES7C' where id=3; -update noar tt set b0='GKA9LYUBWWV' where id=3; -update noar ti set b0='GKA9LYUBWWV' where id=3; -update noar tt set v0='RVOB' where id=3; -update noar ti set v0='RVOB' where id=3; -update noar tt set b1='P3N757K' where id=3; -update noar ti set b1='P3N757K' where id=3; -update noar tt set v0='KVAO2DC14R58I' where id=3; -update noar ti set v0='KVAO2DC14R58I' where id=3; -update noar tt set b2='5EAF1YYTW8VV5HUH4E0Z' where id=3; -update noar ti set b2='5EAF1YYTW8VV5HUH4E0Z' where id=3; -update noar tt set v0='G16DMOAQ9VMGI' where id=4; -update noar ti set v0='G16DMOAQ9VMGI' where id=4; -update noar tt set b0='A0SM0CS4U6PON8BNYWZ2XDIQ82' where id=4; -update noar ti set b0='A0SM0CS4U6PON8BNYWZ2XDIQ82' where id=4; -update noar tt set v0='ELOPWADO6ZQY5OEE' where id=4; -update noar ti set v0='ELOPWADO6ZQY5OEE' where id=4; -update noar tt set b1='J' where id=4; -update noar ti set b1='J' where id=4; -update noar tt set v0='SO83QH20SLH0J3W8Q8WNQWEZCM9' where id=4; -update noar ti set v0='SO83QH20SLH0J3W8Q8WNQWEZCM9' where id=4; -update noar tt set b2='TZJXOO2UIZXSV7' where id=4; -update noar ti set b2='TZJXOO2UIZXSV7' where id=4; -update noar tt set v0='4ZE8' where id=5; -update noar ti set v0='4ZE8' where id=5; -update noar tt set b0='FC37ITXEWHTIMW6QC4P2VBDLOWFYQ' where id=5; -update noar ti set b0='FC37ITXEWHTIMW6QC4P2VBDLOWFYQ' where id=5; -update noar tt set v0='4H' where id=5; -update noar ti set v0='4H' where id=5; -update noar tt set b1='DM2B1O6F0DN6UZZ31XSU664' where id=5; -update noar ti set b1='DM2B1O6F0DN6UZZ31XSU664' where id=5; -update noar tt set v0='AQHKPABV7JEH04H5AI2' where id=5; -update noar ti set v0='AQHKPABV7JEH04H5AI2' where id=5; -update noar tt set b2='0BA' where id=5; -update noar ti set b2='0BA' where id=5; -update noar tt set v0='WOXNQ8MD1KV72VMEGYAM5RFW' where id=6; -update noar ti set v0='WOXNQ8MD1KV72VMEGYAM5RFW' where id=6; -update noar tt set b0='NARDX08UT6PANWB58AZFWI' where id=6; -update noar ti set b0='NARDX08UT6PANWB58AZFWI' where id=6; -update noar tt set v0='WPWVVGP4H' where id=6; -update noar ti set v0='WPWVVGP4H' where id=6; -update noar tt set b1='DFKF7G3XBUWFV39FPBAZ8ZTETLI9I3R' where id=6; -update noar ti set b1='DFKF7G3XBUWFV39FPBAZ8ZTETLI9I3R' where id=6; -update noar tt set v0='8F2AE8IWARWJZJDRWNDPSBUB1DF' where id=6; -update noar ti set v0='8F2AE8IWARWJZJDRWNDPSBUB1DF' where id=6; -update noar tt set b2='NY7963I6R7H47W' where id=6; -update noar ti set b2='NY7963I6R7H47W' where id=6; -update noar tt set v0='4JAG5XQWK79WRKN99GGI06NXK4' where id=7; -update noar ti set v0='4JAG5XQWK79WRKN99GGI06NXK4' where id=7; -update noar tt set b0='X56DEW3WPJNL2BT' where id=7; -update noar ti set b0='X56DEW3WPJNL2BT' where id=7; -update noar tt set v0='Z6CEO7C0A9ZTH02CL' where id=7; -update noar ti set v0='Z6CEO7C0A9ZTH02CL' where id=7; -update noar tt set b1='VX3KUWR198TQVELELT21I1O6RBVLUPCW' where id=7; -update noar ti set b1='VX3KUWR198TQVELELT21I1O6RBVLUPCW' where id=7; -update noar tt set v0='QX9821GPAWNPR5KNL02BWPMQFR7AAA9' where id=7; -update noar ti set v0='QX9821GPAWNPR5KNL02BWPMQFR7AAA9' where id=7; -update noar tt set b2='UIQ24R' where id=7; -update noar ti set b2='UIQ24R' where id=7; -update noar tt set v0='DMQ' where id=8; -update noar ti set v0='DMQ' where id=8; -update noar tt set b0='BGQYQJBJDSUHK6NWP8Z' where id=8; -update noar ti set b0='BGQYQJBJDSUHK6NWP8Z' where id=8; -update noar tt set v0='2FCSOLSR1M0XUB9P' where id=8; -update noar ti set v0='2FCSOLSR1M0XUB9P' where id=8; -update noar tt set b1='IORAIXCONSQ5OFW6V60CHCAHD6' where id=8; -update noar ti set b1='IORAIXCONSQ5OFW6V60CHCAHD6' where id=8; -update noar tt set v0='N2UUXZNLPPG10DETSJ987AWJXRITSAQM' where id=8; -update noar ti set v0='N2UUXZNLPPG10DETSJ987AWJXRITSAQM' where id=8; -update noar tt set b2='7' where id=8; -update noar ti set b2='7' where id=8; -update noar tt set v0='1S4W1' where id=9; -update noar ti set v0='1S4W1' where id=9; -update noar tt set b0='YR04WUTRCHXFEDB2UWL' where id=9; -update noar ti set b0='YR04WUTRCHXFEDB2UWL' where id=9; -update noar tt set v0='3TZWCD7RVD9087VUX' where id=9; -update noar ti set v0='3TZWCD7RVD9087VUX' where id=9; -update noar tt set b1='V28XHDSM61IQNR' where id=9; -update noar ti set b1='V28XHDSM61IQNR' where id=9; -update noar tt set v0='EAHDEZMDVHNAP' where id=9; -update noar ti set v0='EAHDEZMDVHNAP' where id=9; -update noar tt set b2='LLI8OEAZ0MAK49E9FV0N63R8QLMJ0S39' where id=9; -update noar ti set b2='LLI8OEAZ0MAK49E9FV0N63R8QLMJ0S39' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 tinyblob null, -b1 mediumblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='8EBHMYEII' where id=1; -update noar ti set v0='8EBHMYEII' where id=1; -update noar tt set b0='O2YYU4XROKHE' where id=1; -update noar ti set b0='O2YYU4XROKHE' where id=1; -update noar tt set v0='2VKR79BD8S4O0H4M0D9XDOX1YFUNLQ' where id=1; -update noar ti set v0='2VKR79BD8S4O0H4M0D9XDOX1YFUNLQ' where id=1; -update noar tt set b1='1HWQET9' where id=1; -update noar ti set b1='1HWQET9' where id=1; -update noar tt set v0='EA9D9ELSVDCHPZ4ZMX' where id=1; -update noar ti set v0='EA9D9ELSVDCHPZ4ZMX' where id=1; -update noar tt set b2='D' where id=1; -update noar ti set b2='D' where id=1; -update noar tt set v0='HU49AN75KJY18FVVDHKTR19IGX3' where id=2; -update noar ti set v0='HU49AN75KJY18FVVDHKTR19IGX3' where id=2; -update noar tt set b0='HHZPD7TNBU09KHNB1KB7A' where id=2; -update noar ti set b0='HHZPD7TNBU09KHNB1KB7A' where id=2; -update noar tt set v0='UGOV' where id=2; -update noar ti set v0='UGOV' where id=2; -update noar tt set b1='MG7' where id=2; -update noar ti set b1='MG7' where id=2; -update noar tt set v0='0YK1DLBGJYA7F400R010FXER9A9RIT9J' where id=2; -update noar ti set v0='0YK1DLBGJYA7F400R010FXER9A9RIT9J' where id=2; -update noar tt set b2='HOYP1B22VNYU584' where id=2; -update noar ti set b2='HOYP1B22VNYU584' where id=2; -update noar tt set v0='OBRGJ8FG35RHM5DAFG8EA1UO88W' where id=3; -update noar ti set v0='OBRGJ8FG35RHM5DAFG8EA1UO88W' where id=3; -update noar tt set b0='DSK342P7JAG80NUGYEE5IVT' where id=3; -update noar ti set b0='DSK342P7JAG80NUGYEE5IVT' where id=3; -update noar tt set v0='N0M9L42C' where id=3; -update noar ti set v0='N0M9L42C' where id=3; -update noar tt set b1='T4OKXH4QO2Y9DHY7PCD96PE4LIEEXK' where id=3; -update noar ti set b1='T4OKXH4QO2Y9DHY7PCD96PE4LIEEXK' where id=3; -update noar tt set v0='FTWYRXN62DDL7JVXGKHOKHFCTR6I0D' where id=3; -update noar ti set v0='FTWYRXN62DDL7JVXGKHOKHFCTR6I0D' where id=3; -update noar tt set b2='UMY2WBLRW' where id=3; -update noar ti set b2='UMY2WBLRW' where id=3; -update noar tt set v0='K3AO2ALPR8C0V' where id=4; -update noar ti set v0='K3AO2ALPR8C0V' where id=4; -update noar tt set b0='G5F' where id=4; -update noar ti set b0='G5F' where id=4; -update noar tt set v0='C3RAGNUG8SQ5' where id=4; -update noar ti set v0='C3RAGNUG8SQ5' where id=4; -update noar tt set b1='T' where id=4; -update noar ti set b1='T' where id=4; -update noar tt set v0='W7T2EMHSIG5HXZVZ8F' where id=4; -update noar ti set v0='W7T2EMHSIG5HXZVZ8F' where id=4; -update noar tt set b2='68KCAUGGKG' where id=4; -update noar ti set b2='68KCAUGGKG' where id=4; -update noar tt set v0='ZXEDM' where id=5; -update noar ti set v0='ZXEDM' where id=5; -update noar tt set b0='6VPTKWVZA6Y6M3G' where id=5; -update noar ti set b0='6VPTKWVZA6Y6M3G' where id=5; -update noar tt set v0='Y4DF' where id=5; -update noar ti set v0='Y4DF' where id=5; -update noar tt set b1='RBI4VSSXAVKUX4' where id=5; -update noar ti set b1='RBI4VSSXAVKUX4' where id=5; -update noar tt set v0='MUU1LK18X3FSPZ5CGV6' where id=5; -update noar ti set v0='MUU1LK18X3FSPZ5CGV6' where id=5; -update noar tt set b2='J8NH4AP2EFGIYNOY4RH08UBUAPK2C5PK' where id=5; -update noar ti set b2='J8NH4AP2EFGIYNOY4RH08UBUAPK2C5PK' where id=5; -update noar tt set v0='BIOCA3CG1JJK' where id=6; -update noar ti set v0='BIOCA3CG1JJK' where id=6; -update noar tt set b0='W33BRU3D' where id=6; -update noar ti set b0='W33BRU3D' where id=6; -update noar tt set v0='WVC8HIFT3HQYOKNIUNFV' where id=6; -update noar ti set v0='WVC8HIFT3HQYOKNIUNFV' where id=6; -update noar tt set b1='RMGS6CBB11PG8LYAR7Z4OGYAUWMOQH8' where id=6; -update noar ti set b1='RMGS6CBB11PG8LYAR7Z4OGYAUWMOQH8' where id=6; -update noar tt set v0='WDIVE' where id=6; -update noar ti set v0='WDIVE' where id=6; -update noar tt set b2='XGIG9W31' where id=6; -update noar ti set b2='XGIG9W31' where id=6; -update noar tt set v0='M1H4OE2W4' where id=7; -update noar ti set v0='M1H4OE2W4' where id=7; -update noar tt set b0='1WWIMTB83TJJJOPXMYZHMPY9C' where id=7; -update noar ti set b0='1WWIMTB83TJJJOPXMYZHMPY9C' where id=7; -update noar tt set v0='W' where id=7; -update noar ti set v0='W' where id=7; -update noar tt set b1='W7U60EQR4YPVG3UDFBGSFHSG55' where id=7; -update noar ti set b1='W7U60EQR4YPVG3UDFBGSFHSG55' where id=7; -update noar tt set v0='VX6Q8WFWNFBEHV8PLXH3' where id=7; -update noar ti set v0='VX6Q8WFWNFBEHV8PLXH3' where id=7; -update noar tt set b2='M5012IJ' where id=7; -update noar ti set b2='M5012IJ' where id=7; -update noar tt set v0='R61ZUAT0' where id=8; -update noar ti set v0='R61ZUAT0' where id=8; -update noar tt set b0='HAY' where id=8; -update noar ti set b0='HAY' where id=8; -update noar tt set v0='IVN2GNPG0GKIDZEQP15A1ST' where id=8; -update noar ti set v0='IVN2GNPG0GKIDZEQP15A1ST' where id=8; -update noar tt set b1='Y1F2S1Z740K8PBFC3' where id=8; -update noar ti set b1='Y1F2S1Z740K8PBFC3' where id=8; -update noar tt set v0='CW6IHS2N86E70K2B7LZR8G' where id=8; -update noar ti set v0='CW6IHS2N86E70K2B7LZR8G' where id=8; -update noar tt set b2='E0IM0HQA1HMCZWME7PATRIXDZ' where id=8; -update noar ti set b2='E0IM0HQA1HMCZWME7PATRIXDZ' where id=8; -update noar tt set v0='P03QKBG69N0VT' where id=9; -update noar ti set v0='P03QKBG69N0VT' where id=9; -update noar tt set b0='KI' where id=9; -update noar ti set b0='KI' where id=9; -update noar tt set v0='QBZCZZAO8Q0RON29' where id=9; -update noar ti set v0='QBZCZZAO8Q0RON29' where id=9; -update noar tt set b1='MKBTB24VERC9D2HS2PBTEEY' where id=9; -update noar ti set b1='MKBTB24VERC9D2HS2PBTEEY' where id=9; -update noar tt set v0='Y' where id=9; -update noar ti set v0='Y' where id=9; -update noar tt set b2='C5RFEHWOQ69VFFJALJ5M' where id=9; -update noar ti set b2='C5RFEHWOQ69VFFJALJ5M' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 tinyblob null, -b1 mediumblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='AY' where id=1; -update noar ti set v0='AY' where id=1; -update noar tt set b0='J30' where id=1; -update noar ti set b0='J30' where id=1; -update noar tt set v0='T6VBCSQCXR56O35N41EECZ0' where id=1; -update noar ti set v0='T6VBCSQCXR56O35N41EECZ0' where id=1; -update noar tt set b1='AV5T0YXYBHFUZG9E42Z' where id=1; -update noar ti set b1='AV5T0YXYBHFUZG9E42Z' where id=1; -update noar tt set v0='SIMF9NG9JZLHX3PFNTWQN' where id=1; -update noar ti set v0='SIMF9NG9JZLHX3PFNTWQN' where id=1; -update noar tt set b2='1JN5C55ACD60W4C0DDQF68SE4X8B7E' where id=1; -update noar ti set b2='1JN5C55ACD60W4C0DDQF68SE4X8B7E' where id=1; -update noar tt set v0='IQQ5POGSDAGB' where id=2; -update noar ti set v0='IQQ5POGSDAGB' where id=2; -update noar tt set b0='OZO87E9YAGG673FFZGUTZ5JOIFL' where id=2; -update noar ti set b0='OZO87E9YAGG673FFZGUTZ5JOIFL' where id=2; -update noar tt set v0='EY82XVC7T88H5F' where id=2; -update noar ti set v0='EY82XVC7T88H5F' where id=2; -update noar tt set b1='8BHLKWM09ZGF9GCHY5CJTPZN41D3YH' where id=2; -update noar ti set b1='8BHLKWM09ZGF9GCHY5CJTPZN41D3YH' where id=2; -update noar tt set v0='51R4J2ZRZ6K8VXSBBM8G5' where id=2; -update noar ti set v0='51R4J2ZRZ6K8VXSBBM8G5' where id=2; -update noar tt set b2='GH' where id=2; -update noar ti set b2='GH' where id=2; -update noar tt set v0='V5MVVIVA1Z8L1KFIVV2' where id=3; -update noar ti set v0='V5MVVIVA1Z8L1KFIVV2' where id=3; -update noar tt set b0='H1VOTZZGM6XTRQX' where id=3; -update noar ti set b0='H1VOTZZGM6XTRQX' where id=3; -update noar tt set v0='ZZ7JW' where id=3; -update noar ti set v0='ZZ7JW' where id=3; -update noar tt set b1='5D' where id=3; -update noar ti set b1='5D' where id=3; -update noar tt set v0='GA0K7ZHUYAEXLB4YEGC49264L70TU' where id=3; -update noar ti set v0='GA0K7ZHUYAEXLB4YEGC49264L70TU' where id=3; -update noar tt set b2='BVRV5LRCP6V5JDSN4KINW' where id=3; -update noar ti set b2='BVRV5LRCP6V5JDSN4KINW' where id=3; -update noar tt set v0='KAE544RS6OY8F6CDAP9FR2' where id=4; -update noar ti set v0='KAE544RS6OY8F6CDAP9FR2' where id=4; -update noar tt set b0='J' where id=4; -update noar ti set b0='J' where id=4; -update noar tt set v0='8' where id=4; -update noar ti set v0='8' where id=4; -update noar tt set b1='TWDH6I2KOINUTA93N9' where id=4; -update noar ti set b1='TWDH6I2KOINUTA93N9' where id=4; -update noar tt set v0='H2T2BX' where id=4; -update noar ti set v0='H2T2BX' where id=4; -update noar tt set b2='RBHKPWBOLIO5UCBPB88GHVAQZQQQQK' where id=4; -update noar ti set b2='RBHKPWBOLIO5UCBPB88GHVAQZQQQQK' where id=4; -update noar tt set v0='ZL8WFWM7UDG8OXO6C9' where id=5; -update noar ti set v0='ZL8WFWM7UDG8OXO6C9' where id=5; -update noar tt set b0='FELX8C49B6V5UEU4C1FCGO' where id=5; -update noar ti set b0='FELX8C49B6V5UEU4C1FCGO' where id=5; -update noar tt set v0='U9BZ0AO43JNC67EP5OD03' where id=5; -update noar ti set v0='U9BZ0AO43JNC67EP5OD03' where id=5; -update noar tt set b1='ROFYI4BXQD' where id=5; -update noar ti set b1='ROFYI4BXQD' where id=5; -update noar tt set v0='UMC7PYJ3T8YV' where id=5; -update noar ti set v0='UMC7PYJ3T8YV' where id=5; -update noar tt set b2='PKV63DY0ODA56ZDE8V48YODMJR2' where id=5; -update noar ti set b2='PKV63DY0ODA56ZDE8V48YODMJR2' where id=5; -update noar tt set v0='09YJ133FWZG' where id=6; -update noar ti set v0='09YJ133FWZG' where id=6; -update noar tt set b0='OTDLQ4KWM77S0QF78ZBTM2W2EC0N5M' where id=6; -update noar ti set b0='OTDLQ4KWM77S0QF78ZBTM2W2EC0N5M' where id=6; -update noar tt set v0='Z8T4JSWEDDL159' where id=6; -update noar ti set v0='Z8T4JSWEDDL159' where id=6; -update noar tt set b1='F32TMK228URWQ5LBEIY57T01R' where id=6; -update noar ti set b1='F32TMK228URWQ5LBEIY57T01R' where id=6; -update noar tt set v0='3I5VSG49SET7D5FFC8EPIQKU2JG0P' where id=6; -update noar ti set v0='3I5VSG49SET7D5FFC8EPIQKU2JG0P' where id=6; -update noar tt set b2='H4WI' where id=6; -update noar ti set b2='H4WI' where id=6; -update noar tt set v0='R89CK8XF2DB50O47R0X' where id=7; -update noar ti set v0='R89CK8XF2DB50O47R0X' where id=7; -update noar tt set b0='P2JV7J8PP60103ZM7J50' where id=7; -update noar ti set b0='P2JV7J8PP60103ZM7J50' where id=7; -update noar tt set v0='5WS4WMN' where id=7; -update noar ti set v0='5WS4WMN' where id=7; -update noar tt set b1='QILOIZN9T0FWSPEWKQV' where id=7; -update noar ti set b1='QILOIZN9T0FWSPEWKQV' where id=7; -update noar tt set v0='9ZSS3TVEQ5L46MFAW' where id=7; -update noar ti set v0='9ZSS3TVEQ5L46MFAW' where id=7; -update noar tt set b2='2MWW7NI' where id=7; -update noar ti set b2='2MWW7NI' where id=7; -update noar tt set v0='7M5UK5' where id=8; -update noar ti set v0='7M5UK5' where id=8; -update noar tt set b0='L' where id=8; -update noar ti set b0='L' where id=8; -update noar tt set v0='M7247XEJX74G88Y8H0Q5' where id=8; -update noar ti set v0='M7247XEJX74G88Y8H0Q5' where id=8; -update noar tt set b1='4DSZ' where id=8; -update noar ti set b1='4DSZ' where id=8; -update noar tt set v0='A20Y' where id=8; -update noar ti set v0='A20Y' where id=8; -update noar tt set b2='8SCPPHFIX4UK4GKU7' where id=8; -update noar ti set b2='8SCPPHFIX4UK4GKU7' where id=8; -update noar tt set v0='89SQIW99INS4U78U2AMXUEEFZ' where id=9; -update noar ti set v0='89SQIW99INS4U78U2AMXUEEFZ' where id=9; -update noar tt set b0='DGQNX04SE68OA8YVL13ROFGW' where id=9; -update noar ti set b0='DGQNX04SE68OA8YVL13ROFGW' where id=9; -update noar tt set v0='LCQB' where id=9; -update noar ti set v0='LCQB' where id=9; -update noar tt set b1='RA5J948V80RU1JLDVJXQKVGF1TN' where id=9; -update noar ti set b1='RA5J948V80RU1JLDVJXQKVGF1TN' where id=9; -update noar tt set v0='Q' where id=9; -update noar ti set v0='Q' where id=9; -update noar tt set b2='IEYCDLXA98RP0PQXPJBWVP' where id=9; -update noar ti set b2='IEYCDLXA98RP0PQXPJBWVP' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 tinyblob not null, -b1 mediumblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='0SJCA511KEYYM' where id=1; -update noar ti set v0='0SJCA511KEYYM' where id=1; -update noar tt set b0='W7' where id=1; -update noar ti set b0='W7' where id=1; -update noar tt set v0='VRVME2GSIPXPCYDX1NACGKZT' where id=1; -update noar ti set v0='VRVME2GSIPXPCYDX1NACGKZT' where id=1; -update noar tt set b1='H3E1EQUDJF7M413S2' where id=1; -update noar ti set b1='H3E1EQUDJF7M413S2' where id=1; -update noar tt set v0='JJZS6U91T5FY83UVPOKNWAH' where id=1; -update noar ti set v0='JJZS6U91T5FY83UVPOKNWAH' where id=1; -update noar tt set b2='2Y20R4SGWOS7CTGJ4BWA' where id=1; -update noar ti set b2='2Y20R4SGWOS7CTGJ4BWA' where id=1; -update noar tt set v0='V1HRZDQDJ7Y1P3YDLTE3QPEK92' where id=2; -update noar ti set v0='V1HRZDQDJ7Y1P3YDLTE3QPEK92' where id=2; -update noar tt set b0='BFX7BQW9Y' where id=2; -update noar ti set b0='BFX7BQW9Y' where id=2; -update noar tt set v0='4KX7K5PO' where id=2; -update noar ti set v0='4KX7K5PO' where id=2; -update noar tt set b1='KTWW8A9GFYKXJUP0X9NPDSP5SB7O' where id=2; -update noar ti set b1='KTWW8A9GFYKXJUP0X9NPDSP5SB7O' where id=2; -update noar tt set v0='QYHZD5X53RE0QP8GM' where id=2; -update noar ti set v0='QYHZD5X53RE0QP8GM' where id=2; -update noar tt set b2='IQE1UB2COCEJFFKDDGUZ7' where id=2; -update noar ti set b2='IQE1UB2COCEJFFKDDGUZ7' where id=2; -update noar tt set v0='9AJ3Q8EQFWFWBVOT' where id=3; -update noar ti set v0='9AJ3Q8EQFWFWBVOT' where id=3; -update noar tt set b0='QBDE8JTC2DDX' where id=3; -update noar ti set b0='QBDE8JTC2DDX' where id=3; -update noar tt set v0='96I9H1' where id=3; -update noar ti set v0='96I9H1' where id=3; -update noar tt set b1='HWD9ABGEEQ7UE' where id=3; -update noar ti set b1='HWD9ABGEEQ7UE' where id=3; -update noar tt set v0='JJ6K0MLWS00DDWVG2X' where id=3; -update noar ti set v0='JJ6K0MLWS00DDWVG2X' where id=3; -update noar tt set b2='I8GFU0VFFCMCD1DFJ084XBI8EKTYDJ' where id=3; -update noar ti set b2='I8GFU0VFFCMCD1DFJ084XBI8EKTYDJ' where id=3; -update noar tt set v0='K9QTGG2ISNB5I86D7F0UH' where id=4; -update noar ti set v0='K9QTGG2ISNB5I86D7F0UH' where id=4; -update noar tt set b0='BNSBHTMZRUL' where id=4; -update noar ti set b0='BNSBHTMZRUL' where id=4; -update noar tt set v0='S38FMX' where id=4; -update noar ti set v0='S38FMX' where id=4; -update noar tt set b1='XT8' where id=4; -update noar ti set b1='XT8' where id=4; -update noar tt set v0='F46238UGJVOIVC7CAJ1RAJ6' where id=4; -update noar ti set v0='F46238UGJVOIVC7CAJ1RAJ6' where id=4; -update noar tt set b2='TPIBIYLLZZG8BFI' where id=4; -update noar ti set b2='TPIBIYLLZZG8BFI' where id=4; -update noar tt set v0='FUFPMZL1LK' where id=5; -update noar ti set v0='FUFPMZL1LK' where id=5; -update noar tt set b0='QM8OA2DZ5C' where id=5; -update noar ti set b0='QM8OA2DZ5C' where id=5; -update noar tt set v0='PHS6SOBQTC13N' where id=5; -update noar ti set v0='PHS6SOBQTC13N' where id=5; -update noar tt set b1='C721' where id=5; -update noar ti set b1='C721' where id=5; -update noar tt set v0='IXEN3G' where id=5; -update noar ti set v0='IXEN3G' where id=5; -update noar tt set b2='BI' where id=5; -update noar ti set b2='BI' where id=5; -update noar tt set v0='7PC0' where id=6; -update noar ti set v0='7PC0' where id=6; -update noar tt set b0='W9Q4IW24Y' where id=6; -update noar ti set b0='W9Q4IW24Y' where id=6; -update noar tt set v0='FI1IX6IEMST95OA51GX2FHDOI' where id=6; -update noar ti set v0='FI1IX6IEMST95OA51GX2FHDOI' where id=6; -update noar tt set b1='SREC' where id=6; -update noar ti set b1='SREC' where id=6; -update noar tt set v0='RUT9A46P' where id=6; -update noar ti set v0='RUT9A46P' where id=6; -update noar tt set b2='CP460MW8K20MNDMJJV' where id=6; -update noar ti set b2='CP460MW8K20MNDMJJV' where id=6; -update noar tt set v0='0OIXNLJPF1XE3W' where id=7; -update noar ti set v0='0OIXNLJPF1XE3W' where id=7; -update noar tt set b0='5FXKKR6' where id=7; -update noar ti set b0='5FXKKR6' where id=7; -update noar tt set v0='5ZA8' where id=7; -update noar ti set v0='5ZA8' where id=7; -update noar tt set b1='MEMEMJHPB9VM7N8T16QXR55RLPP6I' where id=7; -update noar ti set b1='MEMEMJHPB9VM7N8T16QXR55RLPP6I' where id=7; -update noar tt set v0='VNKZV582' where id=7; -update noar ti set v0='VNKZV582' where id=7; -update noar tt set b2='D40FG' where id=7; -update noar ti set b2='D40FG' where id=7; -update noar tt set v0='N' where id=8; -update noar ti set v0='N' where id=8; -update noar tt set b0='CKITJ80' where id=8; -update noar ti set b0='CKITJ80' where id=8; -update noar tt set v0='TAG8KP1I70T' where id=8; -update noar ti set v0='TAG8KP1I70T' where id=8; -update noar tt set b1='MUFDAR3MKF7G2' where id=8; -update noar ti set b1='MUFDAR3MKF7G2' where id=8; -update noar tt set v0='DV6OYSYMTSL4J0MZA4BLMR4SS' where id=8; -update noar ti set v0='DV6OYSYMTSL4J0MZA4BLMR4SS' where id=8; -update noar tt set b2='JD9VBD90ISALS28FAZR' where id=8; -update noar ti set b2='JD9VBD90ISALS28FAZR' where id=8; -update noar tt set v0='N9FWVOTP' where id=9; -update noar ti set v0='N9FWVOTP' where id=9; -update noar tt set b0='4CT9STPMHN9SOLOJ8KP8X0EF' where id=9; -update noar ti set b0='4CT9STPMHN9SOLOJ8KP8X0EF' where id=9; -update noar tt set v0='K1KQ1NZL' where id=9; -update noar ti set v0='K1KQ1NZL' where id=9; -update noar tt set b1='JUJ08UIPL' where id=9; -update noar ti set b1='JUJ08UIPL' where id=9; -update noar tt set v0='KXNON0H8NK4ER1X' where id=9; -update noar ti set v0='KXNON0H8NK4ER1X' where id=9; -update noar tt set b2='7DY89UDOPJ9NGZIPHWLEPBR928K' where id=9; -update noar ti set b2='7DY89UDOPJ9NGZIPHWLEPBR928K' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 tinyblob not null, -b1 mediumblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='SVS1CJH9MHOF' where id=1; -update noar ti set v0='SVS1CJH9MHOF' where id=1; -update noar tt set b0='P6VY4DA' where id=1; -update noar ti set b0='P6VY4DA' where id=1; -update noar tt set v0='YXA4PZVFI2SAPLXO2QQK' where id=1; -update noar ti set v0='YXA4PZVFI2SAPLXO2QQK' where id=1; -update noar tt set b1='YSWGMJAJQYQYH52NEFPYL6IOLB47' where id=1; -update noar ti set b1='YSWGMJAJQYQYH52NEFPYL6IOLB47' where id=1; -update noar tt set v0='U34RKJQPULMTCLIQ9O0AHDDJCBU' where id=1; -update noar ti set v0='U34RKJQPULMTCLIQ9O0AHDDJCBU' where id=1; -update noar tt set b2='32GZ9KL715RAV5L156X07TKP27V51' where id=1; -update noar ti set b2='32GZ9KL715RAV5L156X07TKP27V51' where id=1; -update noar tt set v0='HFXPSFWSTAQBLGF' where id=2; -update noar ti set v0='HFXPSFWSTAQBLGF' where id=2; -update noar tt set b0='16799X2JGMRSJKV9JT0E56V4' where id=2; -update noar ti set b0='16799X2JGMRSJKV9JT0E56V4' where id=2; -update noar tt set v0='Q8Y38VBDRAH' where id=2; -update noar ti set v0='Q8Y38VBDRAH' where id=2; -update noar tt set b1='JADHN4OKI9LI' where id=2; -update noar ti set b1='JADHN4OKI9LI' where id=2; -update noar tt set v0='28TF2' where id=2; -update noar ti set v0='28TF2' where id=2; -update noar tt set b2='I7CRDB3S3V' where id=2; -update noar ti set b2='I7CRDB3S3V' where id=2; -update noar tt set v0='C7JR292X2L1WZV94QN' where id=3; -update noar ti set v0='C7JR292X2L1WZV94QN' where id=3; -update noar tt set b0='YF5YOYC5' where id=3; -update noar ti set b0='YF5YOYC5' where id=3; -update noar tt set v0='3' where id=3; -update noar ti set v0='3' where id=3; -update noar tt set b1='JEVTUJ40FDZ0SJ7EXAU8G' where id=3; -update noar ti set b1='JEVTUJ40FDZ0SJ7EXAU8G' where id=3; -update noar tt set v0='FLHB2KV6J4G121' where id=3; -update noar ti set v0='FLHB2KV6J4G121' where id=3; -update noar tt set b2='JT3EX2VT' where id=3; -update noar ti set b2='JT3EX2VT' where id=3; -update noar tt set v0='EE243AO5A96' where id=4; -update noar ti set v0='EE243AO5A96' where id=4; -update noar tt set b0='5HWHG' where id=4; -update noar ti set b0='5HWHG' where id=4; -update noar tt set v0='F4' where id=4; -update noar ti set v0='F4' where id=4; -update noar tt set b1='W55UA' where id=4; -update noar ti set b1='W55UA' where id=4; -update noar tt set v0='VT5GWXF3N3BWL6RJGTL1EM' where id=4; -update noar ti set v0='VT5GWXF3N3BWL6RJGTL1EM' where id=4; -update noar tt set b2='K1WURXKC32P6M942G' where id=4; -update noar ti set b2='K1WURXKC32P6M942G' where id=4; -update noar tt set v0='MVJDMZCEEXMN3NDMDI8PD' where id=5; -update noar ti set v0='MVJDMZCEEXMN3NDMDI8PD' where id=5; -update noar tt set b0='EZEFSR60' where id=5; -update noar ti set b0='EZEFSR60' where id=5; -update noar tt set v0='WUOHULEMUZ6VZEB7V13RTEEZ4O' where id=5; -update noar ti set v0='WUOHULEMUZ6VZEB7V13RTEEZ4O' where id=5; -update noar tt set b1='4MDKTF12OW' where id=5; -update noar ti set b1='4MDKTF12OW' where id=5; -update noar tt set v0='2QBROSWYOZN1UVBY83' where id=5; -update noar ti set v0='2QBROSWYOZN1UVBY83' where id=5; -update noar tt set b2='C5XEL5SD8UGGKK15V2LVL' where id=5; -update noar ti set b2='C5XEL5SD8UGGKK15V2LVL' where id=5; -update noar tt set v0='UMYDN4A9YJIWBTAACWYWPB98K7Y' where id=6; -update noar ti set v0='UMYDN4A9YJIWBTAACWYWPB98K7Y' where id=6; -update noar tt set b0='A7DYUHZ2M6FUEVZPGSORYFHLGWVE6R8' where id=6; -update noar ti set b0='A7DYUHZ2M6FUEVZPGSORYFHLGWVE6R8' where id=6; -update noar tt set v0='1WZB259RAVK7RB4OXP2FMLF8PFN' where id=6; -update noar ti set v0='1WZB259RAVK7RB4OXP2FMLF8PFN' where id=6; -update noar tt set b1='NQ' where id=6; -update noar ti set b1='NQ' where id=6; -update noar tt set v0='5M8SF1VA' where id=6; -update noar ti set v0='5M8SF1VA' where id=6; -update noar tt set b2='WHA1UQ691XYY03Z6BSSYM' where id=6; -update noar ti set b2='WHA1UQ691XYY03Z6BSSYM' where id=6; -update noar tt set v0='QW3RFE7OMBWT' where id=7; -update noar ti set v0='QW3RFE7OMBWT' where id=7; -update noar tt set b0='ZUXQIXF8ET16V9INAGS9RU7NT7VL0YB5' where id=7; -update noar ti set b0='ZUXQIXF8ET16V9INAGS9RU7NT7VL0YB5' where id=7; -update noar tt set v0='NC34Q6U1KKX666K8XF' where id=7; -update noar ti set v0='NC34Q6U1KKX666K8XF' where id=7; -update noar tt set b1='14J4V1B186PIFT7IOGS05OS' where id=7; -update noar ti set b1='14J4V1B186PIFT7IOGS05OS' where id=7; -update noar tt set v0='Q' where id=7; -update noar ti set v0='Q' where id=7; -update noar tt set b2='BMYOOMTZGF9W' where id=7; -update noar ti set b2='BMYOOMTZGF9W' where id=7; -update noar tt set v0='I26IL1UK' where id=8; -update noar ti set v0='I26IL1UK' where id=8; -update noar tt set b0='FJ6EHR' where id=8; -update noar ti set b0='FJ6EHR' where id=8; -update noar tt set v0='98S8AP88WJKA5BW7CA' where id=8; -update noar ti set v0='98S8AP88WJKA5BW7CA' where id=8; -update noar tt set b1='4ELCB1SGHORBKGVTPBV0' where id=8; -update noar ti set b1='4ELCB1SGHORBKGVTPBV0' where id=8; -update noar tt set v0='WCD3ZIUW' where id=8; -update noar ti set v0='WCD3ZIUW' where id=8; -update noar tt set b2='AHG5G' where id=8; -update noar ti set b2='AHG5G' where id=8; -update noar tt set v0='RQ955GUNMT' where id=9; -update noar ti set v0='RQ955GUNMT' where id=9; -update noar tt set b0='BWQGDY2J' where id=9; -update noar ti set b0='BWQGDY2J' where id=9; -update noar tt set v0='E2HHWLPCNR1I0PLZRMAT77' where id=9; -update noar ti set v0='E2HHWLPCNR1I0PLZRMAT77' where id=9; -update noar tt set b1='KPFBY4BJOM121XBCCCC' where id=9; -update noar ti set b1='KPFBY4BJOM121XBCCCC' where id=9; -update noar tt set v0='FEDMAGOB4PM' where id=9; -update noar ti set v0='FEDMAGOB4PM' where id=9; -update noar tt set b2='MBBATGZXRRU2P59YLV857SCUWXWWS8T4' where id=9; -update noar ti set b2='MBBATGZXRRU2P59YLV857SCUWXWWS8T4' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 tinyblob null, -b1 longblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='7NSIRRE7PDO090UO532COPA' where id=1; -update noar ti set v0='7NSIRRE7PDO090UO532COPA' where id=1; -update noar tt set b0='SX1AT' where id=1; -update noar ti set b0='SX1AT' where id=1; -update noar tt set v0='N03ON7YRP8S' where id=1; -update noar ti set v0='N03ON7YRP8S' where id=1; -update noar tt set b1='89HJLL11ASIIQCQURM' where id=1; -update noar ti set b1='89HJLL11ASIIQCQURM' where id=1; -update noar tt set v0='A4AR7' where id=1; -update noar ti set v0='A4AR7' where id=1; -update noar tt set b2='4STMA40VXNVHX21JKMY0U7CRGFV' where id=1; -update noar ti set b2='4STMA40VXNVHX21JKMY0U7CRGFV' where id=1; -update noar tt set v0='CNJPQ8M5OOF43FVR565L9Q' where id=2; -update noar ti set v0='CNJPQ8M5OOF43FVR565L9Q' where id=2; -update noar tt set b0='P4N9VL314ZEE0KPBL6GMRVFOBWYS1Q4' where id=2; -update noar ti set b0='P4N9VL314ZEE0KPBL6GMRVFOBWYS1Q4' where id=2; -update noar tt set v0='FSFE' where id=2; -update noar ti set v0='FSFE' where id=2; -update noar tt set b1='B2TJ8GHM7NWEDNHL9KUUL3MX' where id=2; -update noar ti set b1='B2TJ8GHM7NWEDNHL9KUUL3MX' where id=2; -update noar tt set v0='UUQ5Z5E0CUX6IYJ8LK1NS' where id=2; -update noar ti set v0='UUQ5Z5E0CUX6IYJ8LK1NS' where id=2; -update noar tt set b2='QDH8NG2' where id=2; -update noar ti set b2='QDH8NG2' where id=2; -update noar tt set v0='DLVBH3MJV22GPNKA3K37GDENTRPIYXR4' where id=3; -update noar ti set v0='DLVBH3MJV22GPNKA3K37GDENTRPIYXR4' where id=3; -update noar tt set b0='3C2VSEMVT8XRBJ9XXS7FCDH' where id=3; -update noar ti set b0='3C2VSEMVT8XRBJ9XXS7FCDH' where id=3; -update noar tt set v0='N4LSDCST46CMPHS6QKMYNYUAB4P' where id=3; -update noar ti set v0='N4LSDCST46CMPHS6QKMYNYUAB4P' where id=3; -update noar tt set b1='ZINN5OCLXVKHNPTIQC32MEQRVF' where id=3; -update noar ti set b1='ZINN5OCLXVKHNPTIQC32MEQRVF' where id=3; -update noar tt set v0='5A' where id=3; -update noar ti set v0='5A' where id=3; -update noar tt set b2='MBQZQAJP7GE1BEINRJAX66P5RXLORBJ' where id=3; -update noar ti set b2='MBQZQAJP7GE1BEINRJAX66P5RXLORBJ' where id=3; -update noar tt set v0='5IP4Z' where id=4; -update noar ti set v0='5IP4Z' where id=4; -update noar tt set b0='F0PJ76HZYMDYELDP' where id=4; -update noar ti set b0='F0PJ76HZYMDYELDP' where id=4; -update noar tt set v0='ND3OBZ0QX22Q8T1C3JCUJ7Q970EZB' where id=4; -update noar ti set v0='ND3OBZ0QX22Q8T1C3JCUJ7Q970EZB' where id=4; -update noar tt set b1='K4AAQ02SKB1JEGCGIQHQQ59ONPLO' where id=4; -update noar ti set b1='K4AAQ02SKB1JEGCGIQHQQ59ONPLO' where id=4; -update noar tt set v0='OA4L81CUX' where id=4; -update noar ti set v0='OA4L81CUX' where id=4; -update noar tt set b2='9MH33JRVK3ZAJBAHV820B4EPI' where id=4; -update noar ti set b2='9MH33JRVK3ZAJBAHV820B4EPI' where id=4; -update noar tt set v0='NUCA6QW41U1' where id=5; -update noar ti set v0='NUCA6QW41U1' where id=5; -update noar tt set b0='W7' where id=5; -update noar ti set b0='W7' where id=5; -update noar tt set v0='7CPMRUITWASXS3PY1GRS2GJCL' where id=5; -update noar ti set v0='7CPMRUITWASXS3PY1GRS2GJCL' where id=5; -update noar tt set b1='EYP8B4K5TO5MRYM9W9PNOYSH9BVQC0K' where id=5; -update noar ti set b1='EYP8B4K5TO5MRYM9W9PNOYSH9BVQC0K' where id=5; -update noar tt set v0='9H' where id=5; -update noar ti set v0='9H' where id=5; -update noar tt set b2='VS0M366QSZP3OIJBV7VNVH04' where id=5; -update noar ti set b2='VS0M366QSZP3OIJBV7VNVH04' where id=5; -update noar tt set v0='MP' where id=6; -update noar ti set v0='MP' where id=6; -update noar tt set b0='FWNPZUJD8QQXS8LU7IVDY1SFESSS04C' where id=6; -update noar ti set b0='FWNPZUJD8QQXS8LU7IVDY1SFESSS04C' where id=6; -update noar tt set v0='NIN' where id=6; -update noar ti set v0='NIN' where id=6; -update noar tt set b1='G1VN' where id=6; -update noar ti set b1='G1VN' where id=6; -update noar tt set v0='5X4A8X9G' where id=6; -update noar ti set v0='5X4A8X9G' where id=6; -update noar tt set b2='L4TF1XNRU' where id=6; -update noar ti set b2='L4TF1XNRU' where id=6; -update noar tt set v0='CGW4S3OU4X2HWSIAI' where id=7; -update noar ti set v0='CGW4S3OU4X2HWSIAI' where id=7; -update noar tt set b0='O8DNPYHHPKAXU6UEHLVQ' where id=7; -update noar ti set b0='O8DNPYHHPKAXU6UEHLVQ' where id=7; -update noar tt set v0='RAE20RBAM4QA5NA0IR3G7EJR' where id=7; -update noar ti set v0='RAE20RBAM4QA5NA0IR3G7EJR' where id=7; -update noar tt set b1='7J25YMESJRBJIUEPPMIJFYY5EWH3QOZ' where id=7; -update noar ti set b1='7J25YMESJRBJIUEPPMIJFYY5EWH3QOZ' where id=7; -update noar tt set v0='VXXDJWEH6L0Q37VZH4' where id=7; -update noar ti set v0='VXXDJWEH6L0Q37VZH4' where id=7; -update noar tt set b2='IEAF28JH6ZODZE1RH1ADTRS6P84Q9' where id=7; -update noar ti set b2='IEAF28JH6ZODZE1RH1ADTRS6P84Q9' where id=7; -update noar tt set v0='9FM9F4HES3IDD1' where id=8; -update noar ti set v0='9FM9F4HES3IDD1' where id=8; -update noar tt set b0='1GSA50TRBY1A' where id=8; -update noar ti set b0='1GSA50TRBY1A' where id=8; -update noar tt set v0='GPKEQ6JDN3EJ' where id=8; -update noar ti set v0='GPKEQ6JDN3EJ' where id=8; -update noar tt set b1='HMCACD3NLDLBM' where id=8; -update noar ti set b1='HMCACD3NLDLBM' where id=8; -update noar tt set v0='Z603RQ186GKQSMCEEGWCS91F' where id=8; -update noar ti set v0='Z603RQ186GKQSMCEEGWCS91F' where id=8; -update noar tt set b2='N7LL9Q1GGC44BJ0U' where id=8; -update noar ti set b2='N7LL9Q1GGC44BJ0U' where id=8; -update noar tt set v0='KRQ2CIRE' where id=9; -update noar ti set v0='KRQ2CIRE' where id=9; -update noar tt set b0='0HT9ZF' where id=9; -update noar ti set b0='0HT9ZF' where id=9; -update noar tt set v0='IDM27YTA1K3D9HOGAZ' where id=9; -update noar ti set v0='IDM27YTA1K3D9HOGAZ' where id=9; -update noar tt set b1='NG5LFG7C0IR0J' where id=9; -update noar ti set b1='NG5LFG7C0IR0J' where id=9; -update noar tt set v0='83UF3JY7X03WD4KBHVN4JJA7HU4' where id=9; -update noar ti set v0='83UF3JY7X03WD4KBHVN4JJA7HU4' where id=9; -update noar tt set b2='A7VR9468YV1K7NQ83D4QW' where id=9; -update noar ti set b2='A7VR9468YV1K7NQ83D4QW' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 tinyblob null, -b1 longblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='F2G0ANRRZDXN3D4FFNC' where id=1; -update noar ti set v0='F2G0ANRRZDXN3D4FFNC' where id=1; -update noar tt set b0='RUZV3AR7JIM1O52' where id=1; -update noar ti set b0='RUZV3AR7JIM1O52' where id=1; -update noar tt set v0='59UDFGL51M92PCG8O6804M7B0Z8QQ0' where id=1; -update noar ti set v0='59UDFGL51M92PCG8O6804M7B0Z8QQ0' where id=1; -update noar tt set b1='LUMO2HT0IAWOA59X6X6' where id=1; -update noar ti set b1='LUMO2HT0IAWOA59X6X6' where id=1; -update noar tt set v0='QXKFTUV6ZV4D6BQ' where id=1; -update noar ti set v0='QXKFTUV6ZV4D6BQ' where id=1; -update noar tt set b2='SE8WE0ZRY65IKZ895HX41WXKA' where id=1; -update noar ti set b2='SE8WE0ZRY65IKZ895HX41WXKA' where id=1; -update noar tt set v0='XQ7F80R840L815GP6MFV07OD0U9K1VY' where id=2; -update noar ti set v0='XQ7F80R840L815GP6MFV07OD0U9K1VY' where id=2; -update noar tt set b0='0EVJPQXQTW7Z' where id=2; -update noar ti set b0='0EVJPQXQTW7Z' where id=2; -update noar tt set v0='SH' where id=2; -update noar ti set v0='SH' where id=2; -update noar tt set b1='9E6QCLPTOE7BM' where id=2; -update noar ti set b1='9E6QCLPTOE7BM' where id=2; -update noar tt set v0='V7E1KX6HZKTERI90R9H' where id=2; -update noar ti set v0='V7E1KX6HZKTERI90R9H' where id=2; -update noar tt set b2='4343FP2BN3JCXP8BJOBSFM08RD7W6JH' where id=2; -update noar ti set b2='4343FP2BN3JCXP8BJOBSFM08RD7W6JH' where id=2; -update noar tt set v0='3YT' where id=3; -update noar ti set v0='3YT' where id=3; -update noar tt set b0='J0R9J071UFTZRFQBIV' where id=3; -update noar ti set b0='J0R9J071UFTZRFQBIV' where id=3; -update noar tt set v0='DY7R66U21GBF7H' where id=3; -update noar ti set v0='DY7R66U21GBF7H' where id=3; -update noar tt set b1='21ZAX0DMZ8EYSO8C372P80ULM' where id=3; -update noar ti set b1='21ZAX0DMZ8EYSO8C372P80ULM' where id=3; -update noar tt set v0='JLYNG0GO4GDX' where id=3; -update noar ti set v0='JLYNG0GO4GDX' where id=3; -update noar tt set b2='XSEEWBUBJIT889CWKKT3V' where id=3; -update noar ti set b2='XSEEWBUBJIT889CWKKT3V' where id=3; -update noar tt set v0='MIC2UB2IYTMJIIDM5YR' where id=4; -update noar ti set v0='MIC2UB2IYTMJIIDM5YR' where id=4; -update noar tt set b0='6MO92TRDPABU' where id=4; -update noar ti set b0='6MO92TRDPABU' where id=4; -update noar tt set v0='LUDE4FOMKEMAIAPU25V38WG' where id=4; -update noar ti set v0='LUDE4FOMKEMAIAPU25V38WG' where id=4; -update noar tt set b1='B539UQP1' where id=4; -update noar ti set b1='B539UQP1' where id=4; -update noar tt set v0='W80LXAGKMIIKDMLCA86V374D' where id=4; -update noar ti set v0='W80LXAGKMIIKDMLCA86V374D' where id=4; -update noar tt set b2='U1SC08Z' where id=4; -update noar ti set b2='U1SC08Z' where id=4; -update noar tt set v0='3GUHJWCANWBT7DRLUL0O' where id=5; -update noar ti set v0='3GUHJWCANWBT7DRLUL0O' where id=5; -update noar tt set b0='31FMH4K8' where id=5; -update noar ti set b0='31FMH4K8' where id=5; -update noar tt set v0='EEBKZDI4Z5ZD5EVY4WSG9' where id=5; -update noar ti set v0='EEBKZDI4Z5ZD5EVY4WSG9' where id=5; -update noar tt set b1='WLRJTIWA4U8IWTAIT5DBCAF' where id=5; -update noar ti set b1='WLRJTIWA4U8IWTAIT5DBCAF' where id=5; -update noar tt set v0='U2D1EB4WWYI6XBAFVLXTXF3VD8X0' where id=5; -update noar ti set v0='U2D1EB4WWYI6XBAFVLXTXF3VD8X0' where id=5; -update noar tt set b2='ETUW9U7OIZV04B9X5QR47' where id=5; -update noar ti set b2='ETUW9U7OIZV04B9X5QR47' where id=5; -update noar tt set v0='V9OVZF75BGPQF' where id=6; -update noar ti set v0='V9OVZF75BGPQF' where id=6; -update noar tt set b0='O4USARXBMSLAUMT3Z2' where id=6; -update noar ti set b0='O4USARXBMSLAUMT3Z2' where id=6; -update noar tt set v0='S' where id=6; -update noar ti set v0='S' where id=6; -update noar tt set b1='X1N47' where id=6; -update noar ti set b1='X1N47' where id=6; -update noar tt set v0='ZN3YFSON7Z3TY6SZXH09' where id=6; -update noar ti set v0='ZN3YFSON7Z3TY6SZXH09' where id=6; -update noar tt set b2='X0ILJWFPQ' where id=6; -update noar ti set b2='X0ILJWFPQ' where id=6; -update noar tt set v0='1QLFW9CL7BMT97T6LDW' where id=7; -update noar ti set v0='1QLFW9CL7BMT97T6LDW' where id=7; -update noar tt set b0='W5BW075XNE51' where id=7; -update noar ti set b0='W5BW075XNE51' where id=7; -update noar tt set v0='U79QMV33OU' where id=7; -update noar ti set v0='U79QMV33OU' where id=7; -update noar tt set b1='VQYEN3C9V4WKH158NI9B9XXO' where id=7; -update noar ti set b1='VQYEN3C9V4WKH158NI9B9XXO' where id=7; -update noar tt set v0='QOGJE1JD52Q' where id=7; -update noar ti set v0='QOGJE1JD52Q' where id=7; -update noar tt set b2='AOG6H' where id=7; -update noar ti set b2='AOG6H' where id=7; -update noar tt set v0='EXKDQW53D' where id=8; -update noar ti set v0='EXKDQW53D' where id=8; -update noar tt set b0='8DO6JVYMT6WHBPHEWU' where id=8; -update noar ti set b0='8DO6JVYMT6WHBPHEWU' where id=8; -update noar tt set v0='4MPSGJFPHGLMLJA4O' where id=8; -update noar ti set v0='4MPSGJFPHGLMLJA4O' where id=8; -update noar tt set b1='BF8S1V9QSSY' where id=8; -update noar ti set b1='BF8S1V9QSSY' where id=8; -update noar tt set v0='TK0RXP9B9UX6U2HH5Z' where id=8; -update noar ti set v0='TK0RXP9B9UX6U2HH5Z' where id=8; -update noar tt set b2='H7VMWTB517LSTLC81CQ' where id=8; -update noar ti set b2='H7VMWTB517LSTLC81CQ' where id=8; -update noar tt set v0='DMU3ZIU56SRXS6FPFPK' where id=9; -update noar ti set v0='DMU3ZIU56SRXS6FPFPK' where id=9; -update noar tt set b0='UX7KVYM0N0M95O9PEZEGVUBW' where id=9; -update noar ti set b0='UX7KVYM0N0M95O9PEZEGVUBW' where id=9; -update noar tt set v0='8MW67DCKDMWV7O9LWOZ9XT' where id=9; -update noar ti set v0='8MW67DCKDMWV7O9LWOZ9XT' where id=9; -update noar tt set b1='XPRPASTTAAY42U64R24J47B' where id=9; -update noar ti set b1='XPRPASTTAAY42U64R24J47B' where id=9; -update noar tt set v0='CP6YERJLIPJXMW55SGO31TTO' where id=9; -update noar ti set v0='CP6YERJLIPJXMW55SGO31TTO' where id=9; -update noar tt set b2='U' where id=9; -update noar ti set b2='U' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 tinyblob not null, -b1 longblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='GA4XSR9G0Z278E' where id=1; -update noar ti set v0='GA4XSR9G0Z278E' where id=1; -update noar tt set b0='TEMR3FDD' where id=1; -update noar ti set b0='TEMR3FDD' where id=1; -update noar tt set v0='SXZ7LDMEV1V2B3IZ0H37QK1XVKEKLG' where id=1; -update noar ti set v0='SXZ7LDMEV1V2B3IZ0H37QK1XVKEKLG' where id=1; -update noar tt set b1='D06Y0' where id=1; -update noar ti set b1='D06Y0' where id=1; -update noar tt set v0='S' where id=1; -update noar ti set v0='S' where id=1; -update noar tt set b2='20J9T1RKH7RJQVCM16OAVBF' where id=1; -update noar ti set b2='20J9T1RKH7RJQVCM16OAVBF' where id=1; -update noar tt set v0='LTC36CHJHB7KHR1ZDCW0SHY' where id=2; -update noar ti set v0='LTC36CHJHB7KHR1ZDCW0SHY' where id=2; -update noar tt set b0='A14Z7NYHDE14' where id=2; -update noar ti set b0='A14Z7NYHDE14' where id=2; -update noar tt set v0='JL2VIF22GD2CI7A8UN60AVDNE' where id=2; -update noar ti set v0='JL2VIF22GD2CI7A8UN60AVDNE' where id=2; -update noar tt set b1='HO9MK5ALLTQC' where id=2; -update noar ti set b1='HO9MK5ALLTQC' where id=2; -update noar tt set v0='UN68P4J1BF90QK1NUM20LWJFDN4SO' where id=2; -update noar ti set v0='UN68P4J1BF90QK1NUM20LWJFDN4SO' where id=2; -update noar tt set b2='ZGXMKN85YUB05XWMS76C5IY5X' where id=2; -update noar ti set b2='ZGXMKN85YUB05XWMS76C5IY5X' where id=2; -update noar tt set v0='VYX70NNZ' where id=3; -update noar ti set v0='VYX70NNZ' where id=3; -update noar tt set b0='8N4BD6CL49ZP1WM235HXJ49PFN1E' where id=3; -update noar ti set b0='8N4BD6CL49ZP1WM235HXJ49PFN1E' where id=3; -update noar tt set v0='SVHRUJ54CPM9V3VUZ5E2' where id=3; -update noar ti set v0='SVHRUJ54CPM9V3VUZ5E2' where id=3; -update noar tt set b1='E1FLSM' where id=3; -update noar ti set b1='E1FLSM' where id=3; -update noar tt set v0='VGQ1VZCNBLB2N88GZ0OYOO4I9I' where id=3; -update noar ti set v0='VGQ1VZCNBLB2N88GZ0OYOO4I9I' where id=3; -update noar tt set b2='33MZ9BRILUC46PAPTRAJY5UTC2D' where id=3; -update noar ti set b2='33MZ9BRILUC46PAPTRAJY5UTC2D' where id=3; -update noar tt set v0='D5M58L256U4RE2ZJAQUO3LXHY01PQH1G' where id=4; -update noar ti set v0='D5M58L256U4RE2ZJAQUO3LXHY01PQH1G' where id=4; -update noar tt set b0='OACS3LL439BRLI8QIBOC0RAKO' where id=4; -update noar ti set b0='OACS3LL439BRLI8QIBOC0RAKO' where id=4; -update noar tt set v0='XQ0UVE0YG4178G1CODVZFZG6Z' where id=4; -update noar ti set v0='XQ0UVE0YG4178G1CODVZFZG6Z' where id=4; -update noar tt set b1='XBH3M' where id=4; -update noar ti set b1='XBH3M' where id=4; -update noar tt set v0='F0LCQLBN08IM8PTNGP9HLWM28T' where id=4; -update noar ti set v0='F0LCQLBN08IM8PTNGP9HLWM28T' where id=4; -update noar tt set b2='9E0QDDOZ70BV7J4GPWUMTPCXWY' where id=4; -update noar ti set b2='9E0QDDOZ70BV7J4GPWUMTPCXWY' where id=4; -update noar tt set v0='19728D9MCS4' where id=5; -update noar ti set v0='19728D9MCS4' where id=5; -update noar tt set b0='5EHQWZ96F06AO9F2HO9Z6SYYCFC' where id=5; -update noar ti set b0='5EHQWZ96F06AO9F2HO9Z6SYYCFC' where id=5; -update noar tt set v0='RMWZ03T59S5ROOWWL4SO' where id=5; -update noar ti set v0='RMWZ03T59S5ROOWWL4SO' where id=5; -update noar tt set b1='3Z8GHUM0Y69R5UD5E4PWUH8HSD' where id=5; -update noar ti set b1='3Z8GHUM0Y69R5UD5E4PWUH8HSD' where id=5; -update noar tt set v0='E7UYXZ2B1SBHJ5YI5QT1KOK8DF' where id=5; -update noar ti set v0='E7UYXZ2B1SBHJ5YI5QT1KOK8DF' where id=5; -update noar tt set b2='0CDF8CJ76JCIX' where id=5; -update noar ti set b2='0CDF8CJ76JCIX' where id=5; -update noar tt set v0='S047S' where id=6; -update noar ti set v0='S047S' where id=6; -update noar tt set b0='2UAAT5D6ZDM46WZG78ULDC' where id=6; -update noar ti set b0='2UAAT5D6ZDM46WZG78ULDC' where id=6; -update noar tt set v0='DEB4J06NZKCOT8UV' where id=6; -update noar ti set v0='DEB4J06NZKCOT8UV' where id=6; -update noar tt set b1='SZEZR' where id=6; -update noar ti set b1='SZEZR' where id=6; -update noar tt set v0='A0CL8JG7AUL35' where id=6; -update noar ti set v0='A0CL8JG7AUL35' where id=6; -update noar tt set b2='J1' where id=6; -update noar ti set b2='J1' where id=6; -update noar tt set v0='9TA9ASJL9' where id=7; -update noar ti set v0='9TA9ASJL9' where id=7; -update noar tt set b0='03JPTBPKLNB1G54Y3UKFPKSX989Y' where id=7; -update noar ti set b0='03JPTBPKLNB1G54Y3UKFPKSX989Y' where id=7; -update noar tt set v0='MN9SKRX9DBQ2X8SY6B3HGMIFF' where id=7; -update noar ti set v0='MN9SKRX9DBQ2X8SY6B3HGMIFF' where id=7; -update noar tt set b1='9HB6957204TVPI1PJZIBAFHVMTXHG8' where id=7; -update noar ti set b1='9HB6957204TVPI1PJZIBAFHVMTXHG8' where id=7; -update noar tt set v0='TAD6DCQDGFSCOQMND7KFTHQEOO0T3' where id=7; -update noar ti set v0='TAD6DCQDGFSCOQMND7KFTHQEOO0T3' where id=7; -update noar tt set b2='VSD39SUUD' where id=7; -update noar ti set b2='VSD39SUUD' where id=7; -update noar tt set v0='N7DJLUZCRODL6MPDJF5N1U2MF3PPD5D' where id=8; -update noar ti set v0='N7DJLUZCRODL6MPDJF5N1U2MF3PPD5D' where id=8; -update noar tt set b0='GN3AEOJEFP12IT2Q5D786' where id=8; -update noar ti set b0='GN3AEOJEFP12IT2Q5D786' where id=8; -update noar tt set v0='BY0TR3KHUS' where id=8; -update noar ti set v0='BY0TR3KHUS' where id=8; -update noar tt set b1='PTP14D3R2FFALR7' where id=8; -update noar ti set b1='PTP14D3R2FFALR7' where id=8; -update noar tt set v0='L08T52YFXB3KCDBLNJ3PTQ99R1PI' where id=8; -update noar ti set v0='L08T52YFXB3KCDBLNJ3PTQ99R1PI' where id=8; -update noar tt set b2='5ADFE3ZKBHV7' where id=8; -update noar ti set b2='5ADFE3ZKBHV7' where id=8; -update noar tt set v0='DCEEB3ZJBY' where id=9; -update noar ti set v0='DCEEB3ZJBY' where id=9; -update noar tt set b0='N7IUX' where id=9; -update noar ti set b0='N7IUX' where id=9; -update noar tt set v0='VCHGPT' where id=9; -update noar ti set v0='VCHGPT' where id=9; -update noar tt set b1='I45GLXSBV3BX77OWMLZPM2K4GQIE' where id=9; -update noar ti set b1='I45GLXSBV3BX77OWMLZPM2K4GQIE' where id=9; -update noar tt set v0='UKEUMOA2CZBCJQQ1E3XV4R' where id=9; -update noar ti set v0='UKEUMOA2CZBCJQQ1E3XV4R' where id=9; -update noar tt set b2='A74Z0BJGH' where id=9; -update noar ti set b2='A74Z0BJGH' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 tinyblob not null, -b1 longblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='RHX6ZSEPWDD180CGDNX2ANY4L6MVRZ2' where id=1; -update noar ti set v0='RHX6ZSEPWDD180CGDNX2ANY4L6MVRZ2' where id=1; -update noar tt set b0='SI7' where id=1; -update noar ti set b0='SI7' where id=1; -update noar tt set v0='Z95A' where id=1; -update noar ti set v0='Z95A' where id=1; -update noar tt set b1='XMMOVC3LW7MB1GHC7FML31A640CG' where id=1; -update noar ti set b1='XMMOVC3LW7MB1GHC7FML31A640CG' where id=1; -update noar tt set v0='F02EU' where id=1; -update noar ti set v0='F02EU' where id=1; -update noar tt set b2='JKWK22SXMSVES6SL311FRL62PRSHWK' where id=1; -update noar ti set b2='JKWK22SXMSVES6SL311FRL62PRSHWK' where id=1; -update noar tt set v0='A0QIZ6RB9BER48PW9XFIN' where id=2; -update noar ti set v0='A0QIZ6RB9BER48PW9XFIN' where id=2; -update noar tt set b0='ZP5UWW' where id=2; -update noar ti set b0='ZP5UWW' where id=2; -update noar tt set v0='7AW12LPSV3PBNK1BWQ8EXJT86' where id=2; -update noar ti set v0='7AW12LPSV3PBNK1BWQ8EXJT86' where id=2; -update noar tt set b1='V2LS' where id=2; -update noar ti set b1='V2LS' where id=2; -update noar tt set v0='1HPC7O56RS' where id=2; -update noar ti set v0='1HPC7O56RS' where id=2; -update noar tt set b2='2PI' where id=2; -update noar ti set b2='2PI' where id=2; -update noar tt set v0='05OYNJDEW43LOKF35I8QQKT1' where id=3; -update noar ti set v0='05OYNJDEW43LOKF35I8QQKT1' where id=3; -update noar tt set b0='AD' where id=3; -update noar ti set b0='AD' where id=3; -update noar tt set v0='HAQ2W' where id=3; -update noar ti set v0='HAQ2W' where id=3; -update noar tt set b1='0L5BOQQDOPLA6RFIQCUF1R9G86BQVH64' where id=3; -update noar ti set b1='0L5BOQQDOPLA6RFIQCUF1R9G86BQVH64' where id=3; -update noar tt set v0='W7YAHULSVIZN' where id=3; -update noar ti set v0='W7YAHULSVIZN' where id=3; -update noar tt set b2='MELO6E1P5A0PRF9E8VIV7DQ9' where id=3; -update noar ti set b2='MELO6E1P5A0PRF9E8VIV7DQ9' where id=3; -update noar tt set v0='8' where id=4; -update noar ti set v0='8' where id=4; -update noar tt set b0='Z35O2JHUSNVD4M9OLS7IKLZ31XIKSZK8' where id=4; -update noar ti set b0='Z35O2JHUSNVD4M9OLS7IKLZ31XIKSZK8' where id=4; -update noar tt set v0='X6PSJ48A1HL' where id=4; -update noar ti set v0='X6PSJ48A1HL' where id=4; -update noar tt set b1='EZNSOAW8EVHWU1MIE' where id=4; -update noar ti set b1='EZNSOAW8EVHWU1MIE' where id=4; -update noar tt set v0='F7S5LV11CKC0U3IM' where id=4; -update noar ti set v0='F7S5LV11CKC0U3IM' where id=4; -update noar tt set b2='3Y8D922DCGB3PH37VOH030VJ56P5IT' where id=4; -update noar ti set b2='3Y8D922DCGB3PH37VOH030VJ56P5IT' where id=4; -update noar tt set v0='ZE1ZSJWS3GCH' where id=5; -update noar ti set v0='ZE1ZSJWS3GCH' where id=5; -update noar tt set b0='PCZDZTQDK430MZCCM3ED4' where id=5; -update noar ti set b0='PCZDZTQDK430MZCCM3ED4' where id=5; -update noar tt set v0='HN2Z9DSE02K9MU2HY42JS0DN' where id=5; -update noar ti set v0='HN2Z9DSE02K9MU2HY42JS0DN' where id=5; -update noar tt set b1='LN30P564TPXKP' where id=5; -update noar ti set b1='LN30P564TPXKP' where id=5; -update noar tt set v0='QS6PSAF6OG0L583UJ' where id=5; -update noar ti set v0='QS6PSAF6OG0L583UJ' where id=5; -update noar tt set b2='MX' where id=5; -update noar ti set b2='MX' where id=5; -update noar tt set v0='72J8TF5LRK6XC8AKD438HXCI4L' where id=6; -update noar ti set v0='72J8TF5LRK6XC8AKD438HXCI4L' where id=6; -update noar tt set b0='Z8TXQHOD' where id=6; -update noar ti set b0='Z8TXQHOD' where id=6; -update noar tt set v0='FAUAR4GWV1M1HHIXYVQ1' where id=6; -update noar ti set v0='FAUAR4GWV1M1HHIXYVQ1' where id=6; -update noar tt set b1='FUX4LNKYFX1' where id=6; -update noar ti set b1='FUX4LNKYFX1' where id=6; -update noar tt set v0='JSZMC2BR1W5EQ3P' where id=6; -update noar ti set v0='JSZMC2BR1W5EQ3P' where id=6; -update noar tt set b2='8LT9TI' where id=6; -update noar ti set b2='8LT9TI' where id=6; -update noar tt set v0='NUERFXT5L7YF9A' where id=7; -update noar ti set v0='NUERFXT5L7YF9A' where id=7; -update noar tt set b0='RHIM46ID550YIE940WF819NFVU6' where id=7; -update noar ti set b0='RHIM46ID550YIE940WF819NFVU6' where id=7; -update noar tt set v0='5QIFBBQ8NXLZPVQRJAIAN7TZ2' where id=7; -update noar ti set v0='5QIFBBQ8NXLZPVQRJAIAN7TZ2' where id=7; -update noar tt set b1='YO9LBZV13IGKDV' where id=7; -update noar ti set b1='YO9LBZV13IGKDV' where id=7; -update noar tt set v0='ZCKKDV' where id=7; -update noar ti set v0='ZCKKDV' where id=7; -update noar tt set b2='PWFQBE96O4SM24UFVMUL70WGQR' where id=7; -update noar ti set b2='PWFQBE96O4SM24UFVMUL70WGQR' where id=7; -update noar tt set v0='PPW0557YUDC1V3JEI' where id=8; -update noar ti set v0='PPW0557YUDC1V3JEI' where id=8; -update noar tt set b0='1GBHWSS8HEAMGQE' where id=8; -update noar ti set b0='1GBHWSS8HEAMGQE' where id=8; -update noar tt set v0='L' where id=8; -update noar ti set v0='L' where id=8; -update noar tt set b1='KNJ64RW2F3D3F5C2VR8453SYJ' where id=8; -update noar ti set b1='KNJ64RW2F3D3F5C2VR8453SYJ' where id=8; -update noar tt set v0='FMUI1JLJ2UOP5JTF7Z' where id=8; -update noar ti set v0='FMUI1JLJ2UOP5JTF7Z' where id=8; -update noar tt set b2='OJMB9J9ASHW408KK7X5KJ7NT5L9KKUW' where id=8; -update noar ti set b2='OJMB9J9ASHW408KK7X5KJ7NT5L9KKUW' where id=8; -update noar tt set v0='5ZAQVJGR0FF9L2KJK' where id=9; -update noar ti set v0='5ZAQVJGR0FF9L2KJK' where id=9; -update noar tt set b0='J1EZ6F00EDN8JHDQ' where id=9; -update noar ti set b0='J1EZ6F00EDN8JHDQ' where id=9; -update noar tt set v0='JHHUV1NTE0GRIULJ1OCTW3R7OWE' where id=9; -update noar ti set v0='JHHUV1NTE0GRIULJ1OCTW3R7OWE' where id=9; -update noar tt set b1='Z' where id=9; -update noar ti set b1='Z' where id=9; -update noar tt set v0='MH6LDXE5053QJY5CP3' where id=9; -update noar ti set v0='MH6LDXE5053QJY5CP3' where id=9; -update noar tt set b2='024K7PZ8XQBVSKCH' where id=9; -update noar ti set b2='024K7PZ8XQBVSKCH' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 tinyblob null, -b1 longblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='3TALMJEYUL3XVZWSI7H4LOG5B8NB9' where id=1; -update noar ti set v0='3TALMJEYUL3XVZWSI7H4LOG5B8NB9' where id=1; -update noar tt set b0='ZD5' where id=1; -update noar ti set b0='ZD5' where id=1; -update noar tt set v0='FC4DBP6K33E5XYCUY5B5IVTYVJ' where id=1; -update noar ti set v0='FC4DBP6K33E5XYCUY5B5IVTYVJ' where id=1; -update noar tt set b1='ZJ0Q56' where id=1; -update noar ti set b1='ZJ0Q56' where id=1; -update noar tt set v0='1PDOQ4MJJPZF2DA5LKYDX' where id=1; -update noar ti set v0='1PDOQ4MJJPZF2DA5LKYDX' where id=1; -update noar tt set b2='6M' where id=1; -update noar ti set b2='6M' where id=1; -update noar tt set v0='NJMF27L482YFB4' where id=2; -update noar ti set v0='NJMF27L482YFB4' where id=2; -update noar tt set b0='Q8X6R56GI5HTNHSOY22485RKT' where id=2; -update noar ti set b0='Q8X6R56GI5HTNHSOY22485RKT' where id=2; -update noar tt set v0='WX2UGT' where id=2; -update noar ti set v0='WX2UGT' where id=2; -update noar tt set b1='MBXN' where id=2; -update noar ti set b1='MBXN' where id=2; -update noar tt set v0='JER6ANLDH74K352P' where id=2; -update noar ti set v0='JER6ANLDH74K352P' where id=2; -update noar tt set b2='89SH17DPU15DWFA8A8M90SFDLS4WC' where id=2; -update noar ti set b2='89SH17DPU15DWFA8A8M90SFDLS4WC' where id=2; -update noar tt set v0='CJOK8J430TWBC' where id=3; -update noar ti set v0='CJOK8J430TWBC' where id=3; -update noar tt set b0='BGJZL25W5BPD3BXNEYKQ7ZJK8KE' where id=3; -update noar ti set b0='BGJZL25W5BPD3BXNEYKQ7ZJK8KE' where id=3; -update noar tt set v0='1LI25' where id=3; -update noar ti set v0='1LI25' where id=3; -update noar tt set b1='PK2SEUOKCJNTQJGL' where id=3; -update noar ti set b1='PK2SEUOKCJNTQJGL' where id=3; -update noar tt set v0='TTRMTRTC' where id=3; -update noar ti set v0='TTRMTRTC' where id=3; -update noar tt set b2='ON6G2O3V07RW777B8VBP' where id=3; -update noar ti set b2='ON6G2O3V07RW777B8VBP' where id=3; -update noar tt set v0='PVYFTZ7M3UZWX44QV8HSXO8AC5EHBK5' where id=4; -update noar ti set v0='PVYFTZ7M3UZWX44QV8HSXO8AC5EHBK5' where id=4; -update noar tt set b0='AICM6Q7EVUXJPPPQGZS' where id=4; -update noar ti set b0='AICM6Q7EVUXJPPPQGZS' where id=4; -update noar tt set v0='S59B8H97M9YHLF3BR0ATIM7RQJSJ2LL' where id=4; -update noar ti set v0='S59B8H97M9YHLF3BR0ATIM7RQJSJ2LL' where id=4; -update noar tt set b1='IJAYTD8WDYPV1B' where id=4; -update noar ti set b1='IJAYTD8WDYPV1B' where id=4; -update noar tt set v0='IX2IS2P9DA9WK872' where id=4; -update noar ti set v0='IX2IS2P9DA9WK872' where id=4; -update noar tt set b2='C' where id=4; -update noar ti set b2='C' where id=4; -update noar tt set v0='CJOCR90MH9JQ8D' where id=5; -update noar ti set v0='CJOCR90MH9JQ8D' where id=5; -update noar tt set b0='M0XN1R6D' where id=5; -update noar ti set b0='M0XN1R6D' where id=5; -update noar tt set v0='A7W3X0Y0QKHU' where id=5; -update noar ti set v0='A7W3X0Y0QKHU' where id=5; -update noar tt set b1='AWTGHB5SWCU4LD' where id=5; -update noar ti set b1='AWTGHB5SWCU4LD' where id=5; -update noar tt set v0='HF3JFPAZEGZ1D' where id=5; -update noar ti set v0='HF3JFPAZEGZ1D' where id=5; -update noar tt set b2='ESW87EBUDE' where id=5; -update noar ti set b2='ESW87EBUDE' where id=5; -update noar tt set v0='M9' where id=6; -update noar ti set v0='M9' where id=6; -update noar tt set b0='01BL1PGPWRO' where id=6; -update noar ti set b0='01BL1PGPWRO' where id=6; -update noar tt set v0='J96OL2QIUN2TW69N4VUOZR' where id=6; -update noar ti set v0='J96OL2QIUN2TW69N4VUOZR' where id=6; -update noar tt set b1='J6NBMDM4L3IR3W3TF1KSAW9WGRX4' where id=6; -update noar ti set b1='J6NBMDM4L3IR3W3TF1KSAW9WGRX4' where id=6; -update noar tt set v0='WEDXHHK9NGV6F2MK4N8O' where id=6; -update noar ti set v0='WEDXHHK9NGV6F2MK4N8O' where id=6; -update noar tt set b2='UI9VZ97888W9U9I1ATYP9ILSYQB' where id=6; -update noar ti set b2='UI9VZ97888W9U9I1ATYP9ILSYQB' where id=6; -update noar tt set v0='UVBH0R7QFXO8Q9DA7AVGW' where id=7; -update noar ti set v0='UVBH0R7QFXO8Q9DA7AVGW' where id=7; -update noar tt set b0='C7G734CC8APAQU19W' where id=7; -update noar ti set b0='C7G734CC8APAQU19W' where id=7; -update noar tt set v0='EG' where id=7; -update noar ti set v0='EG' where id=7; -update noar tt set b1='H344WC1PKOUFI' where id=7; -update noar ti set b1='H344WC1PKOUFI' where id=7; -update noar tt set v0='01Q0UMR8SZ65S3FZCZ6PQL' where id=7; -update noar ti set v0='01Q0UMR8SZ65S3FZCZ6PQL' where id=7; -update noar tt set b2='8A' where id=7; -update noar ti set b2='8A' where id=7; -update noar tt set v0='GSS1TMSTG2UK7D2SJ7MRTBX0VSJ1IT' where id=8; -update noar ti set v0='GSS1TMSTG2UK7D2SJ7MRTBX0VSJ1IT' where id=8; -update noar tt set b0='N0AWR0KUY6C6FZJN00J08YH9UELJBGPY' where id=8; -update noar ti set b0='N0AWR0KUY6C6FZJN00J08YH9UELJBGPY' where id=8; -update noar tt set v0='26A7IIPNZ6030EH336IOI09DIRV' where id=8; -update noar ti set v0='26A7IIPNZ6030EH336IOI09DIRV' where id=8; -update noar tt set b1='AU' where id=8; -update noar ti set b1='AU' where id=8; -update noar tt set v0='YBTE4ZO' where id=8; -update noar ti set v0='YBTE4ZO' where id=8; -update noar tt set b2='H' where id=8; -update noar ti set b2='H' where id=8; -update noar tt set v0='9C5BLT0VXJ79UL' where id=9; -update noar ti set v0='9C5BLT0VXJ79UL' where id=9; -update noar tt set b0='QDRBV6WR9LGS' where id=9; -update noar ti set b0='QDRBV6WR9LGS' where id=9; -update noar tt set v0='R47BDLVJW298YO98WWLFZE6R8P' where id=9; -update noar ti set v0='R47BDLVJW298YO98WWLFZE6R8P' where id=9; -update noar tt set b1='8OBMNVTOYCIVM' where id=9; -update noar ti set b1='8OBMNVTOYCIVM' where id=9; -update noar tt set v0='G8PRUEWJJQ4S4VMVL146KK21F' where id=9; -update noar ti set v0='G8PRUEWJJQ4S4VMVL146KK21F' where id=9; -update noar tt set b2='AP8A8R75IK6X5' where id=9; -update noar ti set b2='AP8A8R75IK6X5' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 tinyblob null, -b1 longblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='ZBR1RZH5RUAB9ZF0E65R' where id=1; -update noar ti set v0='ZBR1RZH5RUAB9ZF0E65R' where id=1; -update noar tt set b0='C2X2' where id=1; -update noar ti set b0='C2X2' where id=1; -update noar tt set v0='A9Y1CUFPYLMJN1K6TGVT3N0SFR3' where id=1; -update noar ti set v0='A9Y1CUFPYLMJN1K6TGVT3N0SFR3' where id=1; -update noar tt set b1='31CY2Y3K6S6CJK' where id=1; -update noar ti set b1='31CY2Y3K6S6CJK' where id=1; -update noar tt set v0='F96F4D0HIC7BE52' where id=1; -update noar ti set v0='F96F4D0HIC7BE52' where id=1; -update noar tt set b2='39OLOE6J36V8AK47L6M2' where id=1; -update noar ti set b2='39OLOE6J36V8AK47L6M2' where id=1; -update noar tt set v0='PBF2LOHM5GG1ZW3X6R8OVHTHDX' where id=2; -update noar ti set v0='PBF2LOHM5GG1ZW3X6R8OVHTHDX' where id=2; -update noar tt set b0='B56' where id=2; -update noar ti set b0='B56' where id=2; -update noar tt set v0='6BH0DT56RVDK0GI2ZJVQDE9T' where id=2; -update noar ti set v0='6BH0DT56RVDK0GI2ZJVQDE9T' where id=2; -update noar tt set b1='F' where id=2; -update noar ti set b1='F' where id=2; -update noar tt set v0='K2JYX5OEGDKV' where id=2; -update noar ti set v0='K2JYX5OEGDKV' where id=2; -update noar tt set b2='Q8JZYWVE' where id=2; -update noar ti set b2='Q8JZYWVE' where id=2; -update noar tt set v0='1C' where id=3; -update noar ti set v0='1C' where id=3; -update noar tt set b0='WPG4H5A79SU0D7DJPEGTU6F7I1FF' where id=3; -update noar ti set b0='WPG4H5A79SU0D7DJPEGTU6F7I1FF' where id=3; -update noar tt set v0='W3BX3H' where id=3; -update noar ti set v0='W3BX3H' where id=3; -update noar tt set b1='34AHS5BO06X7CALPGKG10GB' where id=3; -update noar ti set b1='34AHS5BO06X7CALPGKG10GB' where id=3; -update noar tt set v0='VDR59ZYYFIE3DI9X1U36U5I' where id=3; -update noar ti set v0='VDR59ZYYFIE3DI9X1U36U5I' where id=3; -update noar tt set b2='YCT5173NUTGAEU8WW' where id=3; -update noar ti set b2='YCT5173NUTGAEU8WW' where id=3; -update noar tt set v0='PCT' where id=4; -update noar ti set v0='PCT' where id=4; -update noar tt set b0='RLXM8NM70GJPV' where id=4; -update noar ti set b0='RLXM8NM70GJPV' where id=4; -update noar tt set v0='XC3MVDL' where id=4; -update noar ti set v0='XC3MVDL' where id=4; -update noar tt set b1='NR4' where id=4; -update noar ti set b1='NR4' where id=4; -update noar tt set v0='CF17CTN2KQAONCRP' where id=4; -update noar ti set v0='CF17CTN2KQAONCRP' where id=4; -update noar tt set b2='8BV78G085HMHP5MAEEPA209V1AKXMTI0' where id=4; -update noar ti set b2='8BV78G085HMHP5MAEEPA209V1AKXMTI0' where id=4; -update noar tt set v0='OCSB15Z04JBUEKYEEO7REHTKDOAGP8' where id=5; -update noar ti set v0='OCSB15Z04JBUEKYEEO7REHTKDOAGP8' where id=5; -update noar tt set b0='JPXH5JVYA8O' where id=5; -update noar ti set b0='JPXH5JVYA8O' where id=5; -update noar tt set v0='UBI71D4EER47V7VXJL666V3' where id=5; -update noar ti set v0='UBI71D4EER47V7VXJL666V3' where id=5; -update noar tt set b1='FL1EB8J3ZUZ2AXNYV4U4N' where id=5; -update noar ti set b1='FL1EB8J3ZUZ2AXNYV4U4N' where id=5; -update noar tt set v0='4IBMWD' where id=5; -update noar ti set v0='4IBMWD' where id=5; -update noar tt set b2='IVREG6VT55HW64B7ZJ54CW41I' where id=5; -update noar ti set b2='IVREG6VT55HW64B7ZJ54CW41I' where id=5; -update noar tt set v0='NGACLMQGQ' where id=6; -update noar ti set v0='NGACLMQGQ' where id=6; -update noar tt set b0='HSQ4' where id=6; -update noar ti set b0='HSQ4' where id=6; -update noar tt set v0='5TG8QKKFQZKDJ8' where id=6; -update noar ti set v0='5TG8QKKFQZKDJ8' where id=6; -update noar tt set b1='IYTGSKCO4LIASOV' where id=6; -update noar ti set b1='IYTGSKCO4LIASOV' where id=6; -update noar tt set v0='QB14ZKHM' where id=6; -update noar ti set v0='QB14ZKHM' where id=6; -update noar tt set b2='WJMZ492D75GTRN' where id=6; -update noar ti set b2='WJMZ492D75GTRN' where id=6; -update noar tt set v0='JHOXU6BXOTS' where id=7; -update noar ti set v0='JHOXU6BXOTS' where id=7; -update noar tt set b0='6Y6JSJ85LJ7' where id=7; -update noar ti set b0='6Y6JSJ85LJ7' where id=7; -update noar tt set v0='CI3JTO' where id=7; -update noar ti set v0='CI3JTO' where id=7; -update noar tt set b1='A00CSY95X2Y' where id=7; -update noar ti set b1='A00CSY95X2Y' where id=7; -update noar tt set v0='U6T4' where id=7; -update noar ti set v0='U6T4' where id=7; -update noar tt set b2='L06WPBJJK3L04PYKIVVJ71MZ1XHK4' where id=7; -update noar ti set b2='L06WPBJJK3L04PYKIVVJ71MZ1XHK4' where id=7; -update noar tt set v0='F' where id=8; -update noar ti set v0='F' where id=8; -update noar tt set b0='QNG8KVK97AHEQL3L3WCDKBUA57' where id=8; -update noar ti set b0='QNG8KVK97AHEQL3L3WCDKBUA57' where id=8; -update noar tt set v0='F5I7DC8T96JXREQAY7LD0YY8NI5' where id=8; -update noar ti set v0='F5I7DC8T96JXREQAY7LD0YY8NI5' where id=8; -update noar tt set b1='42' where id=8; -update noar ti set b1='42' where id=8; -update noar tt set v0='SIJKM2IZC24XCSK' where id=8; -update noar ti set v0='SIJKM2IZC24XCSK' where id=8; -update noar tt set b2='WGYIO39KYRMHZGMD3CJGLEO' where id=8; -update noar ti set b2='WGYIO39KYRMHZGMD3CJGLEO' where id=8; -update noar tt set v0='6M6DPA' where id=9; -update noar ti set v0='6M6DPA' where id=9; -update noar tt set b0='ANMLOMQZL47J897PJM0QLF' where id=9; -update noar ti set b0='ANMLOMQZL47J897PJM0QLF' where id=9; -update noar tt set v0='93' where id=9; -update noar ti set v0='93' where id=9; -update noar tt set b1='PF2FBQTEAK4D845ZL851RKUSOKK5044X' where id=9; -update noar ti set b1='PF2FBQTEAK4D845ZL851RKUSOKK5044X' where id=9; -update noar tt set v0='VWACSI' where id=9; -update noar ti set v0='VWACSI' where id=9; -update noar tt set b2='1T99QYQZE8JZWF3XYKYDDQF' where id=9; -update noar ti set b2='1T99QYQZE8JZWF3XYKYDDQF' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 tinyblob not null, -b1 longblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='1LMZOTE3XY9U0S' where id=1; -update noar ti set v0='1LMZOTE3XY9U0S' where id=1; -update noar tt set b0='CUPMYGJ' where id=1; -update noar ti set b0='CUPMYGJ' where id=1; -update noar tt set v0='FN9FX81B3UFX2SXR' where id=1; -update noar ti set v0='FN9FX81B3UFX2SXR' where id=1; -update noar tt set b1='KRNP1GQ2JAESAYMXMM7BZ7TOO6A1S' where id=1; -update noar ti set b1='KRNP1GQ2JAESAYMXMM7BZ7TOO6A1S' where id=1; -update noar tt set v0='KGXCKH7NCX6JM8SY52' where id=1; -update noar ti set v0='KGXCKH7NCX6JM8SY52' where id=1; -update noar tt set b2='I' where id=1; -update noar ti set b2='I' where id=1; -update noar tt set v0='PCY9DN7O0DJY94Z3ZJBIBKKDMXA43R3W' where id=2; -update noar ti set v0='PCY9DN7O0DJY94Z3ZJBIBKKDMXA43R3W' where id=2; -update noar tt set b0='B8M46N' where id=2; -update noar ti set b0='B8M46N' where id=2; -update noar tt set v0='IEECMOP0VF8OJRMYRJE' where id=2; -update noar ti set v0='IEECMOP0VF8OJRMYRJE' where id=2; -update noar tt set b1='2IVOQS9' where id=2; -update noar ti set b1='2IVOQS9' where id=2; -update noar tt set v0='T6U6G727MWLCYX7' where id=2; -update noar ti set v0='T6U6G727MWLCYX7' where id=2; -update noar tt set b2='R8RTHQRQHLDEV0SCFCZKD2TV64PX' where id=2; -update noar ti set b2='R8RTHQRQHLDEV0SCFCZKD2TV64PX' where id=2; -update noar tt set v0='726HW8CG3BF39PJN98BEHYXF3' where id=3; -update noar ti set v0='726HW8CG3BF39PJN98BEHYXF3' where id=3; -update noar tt set b0='1LA6L30GVWN7T212HXZVMTGKSRY' where id=3; -update noar ti set b0='1LA6L30GVWN7T212HXZVMTGKSRY' where id=3; -update noar tt set v0='7V3J45UAWACHDD2' where id=3; -update noar ti set v0='7V3J45UAWACHDD2' where id=3; -update noar tt set b1='V5Q9T7XY5M1BKDK' where id=3; -update noar ti set b1='V5Q9T7XY5M1BKDK' where id=3; -update noar tt set v0='D' where id=3; -update noar ti set v0='D' where id=3; -update noar tt set b2='AXDZ1QSJVUI' where id=3; -update noar ti set b2='AXDZ1QSJVUI' where id=3; -update noar tt set v0='V' where id=4; -update noar ti set v0='V' where id=4; -update noar tt set b0='W2DNZAH0O' where id=4; -update noar ti set b0='W2DNZAH0O' where id=4; -update noar tt set v0='ANWLI9YP8Z9L' where id=4; -update noar ti set v0='ANWLI9YP8Z9L' where id=4; -update noar tt set b1='ACYL' where id=4; -update noar ti set b1='ACYL' where id=4; -update noar tt set v0='7W' where id=4; -update noar ti set v0='7W' where id=4; -update noar tt set b2='UK30' where id=4; -update noar ti set b2='UK30' where id=4; -update noar tt set v0='S4K3NEZLQY5IVB0M' where id=5; -update noar ti set v0='S4K3NEZLQY5IVB0M' where id=5; -update noar tt set b0='GOE3J8G2HLU7NO1NC7YTF0ZJB1TJ2V8Y' where id=5; -update noar ti set b0='GOE3J8G2HLU7NO1NC7YTF0ZJB1TJ2V8Y' where id=5; -update noar tt set v0='KUVK8YAEOAGXM20XI' where id=5; -update noar ti set v0='KUVK8YAEOAGXM20XI' where id=5; -update noar tt set b1='NHOU6FTFZJ' where id=5; -update noar ti set b1='NHOU6FTFZJ' where id=5; -update noar tt set v0='CC3TD' where id=5; -update noar ti set v0='CC3TD' where id=5; -update noar tt set b2='R' where id=5; -update noar ti set b2='R' where id=5; -update noar tt set v0='X2DG' where id=6; -update noar ti set v0='X2DG' where id=6; -update noar tt set b0='1XOJRLV68F9SRS5GK0LLAGQC6ZWMDJ2X' where id=6; -update noar ti set b0='1XOJRLV68F9SRS5GK0LLAGQC6ZWMDJ2X' where id=6; -update noar tt set v0='7Z4ZCTYWEK' where id=6; -update noar ti set v0='7Z4ZCTYWEK' where id=6; -update noar tt set b1='ZWG6AIH2SJGSBZELCWXKBXP1SVFKE5' where id=6; -update noar ti set b1='ZWG6AIH2SJGSBZELCWXKBXP1SVFKE5' where id=6; -update noar tt set v0='6AKN4445HHPP' where id=6; -update noar ti set v0='6AKN4445HHPP' where id=6; -update noar tt set b2='CLF95AWIND8GV2KD2FYQF' where id=6; -update noar ti set b2='CLF95AWIND8GV2KD2FYQF' where id=6; -update noar tt set v0='6QSH5C3E50YL0VWP2RXECRE5' where id=7; -update noar ti set v0='6QSH5C3E50YL0VWP2RXECRE5' where id=7; -update noar tt set b0='CWK3PH9G1MZX81VW464JNOU35XWN64MA' where id=7; -update noar ti set b0='CWK3PH9G1MZX81VW464JNOU35XWN64MA' where id=7; -update noar tt set v0='8LUAG8979YKCQ5IDM48NP6SRYYY' where id=7; -update noar ti set v0='8LUAG8979YKCQ5IDM48NP6SRYYY' where id=7; -update noar tt set b1='INB6O5' where id=7; -update noar ti set b1='INB6O5' where id=7; -update noar tt set v0='P7R0PJSA9SG9MHOBQ76J' where id=7; -update noar ti set v0='P7R0PJSA9SG9MHOBQ76J' where id=7; -update noar tt set b2='Z7LGX63MY' where id=7; -update noar ti set b2='Z7LGX63MY' where id=7; -update noar tt set v0='OMLHP4FWS24W0BWIIVI' where id=8; -update noar ti set v0='OMLHP4FWS24W0BWIIVI' where id=8; -update noar tt set b0='948CFC3U' where id=8; -update noar ti set b0='948CFC3U' where id=8; -update noar tt set v0='UEEIQREKSD0MN569VQLBPLGJ' where id=8; -update noar ti set v0='UEEIQREKSD0MN569VQLBPLGJ' where id=8; -update noar tt set b1='6G13H' where id=8; -update noar ti set b1='6G13H' where id=8; -update noar tt set v0='L4HS7I1UCM55GZ7UUP1V7Z98YFWOT8K' where id=8; -update noar ti set v0='L4HS7I1UCM55GZ7UUP1V7Z98YFWOT8K' where id=8; -update noar tt set b2='UNO4F99E' where id=8; -update noar ti set b2='UNO4F99E' where id=8; -update noar tt set v0='OF9XI5OG3QZST5PLJ1' where id=9; -update noar ti set v0='OF9XI5OG3QZST5PLJ1' where id=9; -update noar tt set b0='YVETNAS0YLVN4L' where id=9; -update noar ti set b0='YVETNAS0YLVN4L' where id=9; -update noar tt set v0='PQ51L48FARVZ60JZ8SCUJLTYSXD' where id=9; -update noar ti set v0='PQ51L48FARVZ60JZ8SCUJLTYSXD' where id=9; -update noar tt set b1='C2X17SJLT7HU' where id=9; -update noar ti set b1='C2X17SJLT7HU' where id=9; -update noar tt set v0='B84SU27LLRS29VMYCTDV24Z5ZHS' where id=9; -update noar ti set v0='B84SU27LLRS29VMYCTDV24Z5ZHS' where id=9; -update noar tt set b2='WQ82OA3HKPQ' where id=9; -update noar ti set b2='WQ82OA3HKPQ' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 tinyblob not null, -b1 longblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='D' where id=1; -update noar ti set v0='D' where id=1; -update noar tt set b0='ZS8LHKTKFCCQM5XQO40MWK' where id=1; -update noar ti set b0='ZS8LHKTKFCCQM5XQO40MWK' where id=1; -update noar tt set v0='AW6Z46H0P198' where id=1; -update noar ti set v0='AW6Z46H0P198' where id=1; -update noar tt set b1='ETFCJ7AA5HOCYE52I' where id=1; -update noar ti set b1='ETFCJ7AA5HOCYE52I' where id=1; -update noar tt set v0='40HVG1VL1CFW7WUPBTHZMD' where id=1; -update noar ti set v0='40HVG1VL1CFW7WUPBTHZMD' where id=1; -update noar tt set b2='JBB9Z8GP3' where id=1; -update noar ti set b2='JBB9Z8GP3' where id=1; -update noar tt set v0='9TAE66146A35ROEPHKFBVR63HCUOJZ' where id=2; -update noar ti set v0='9TAE66146A35ROEPHKFBVR63HCUOJZ' where id=2; -update noar tt set b0='4AY3AHHIKACY7L8QDBMLSXMWZFAYOTQ' where id=2; -update noar ti set b0='4AY3AHHIKACY7L8QDBMLSXMWZFAYOTQ' where id=2; -update noar tt set v0='JVUG6509WQXQCRAT0FKBP9S' where id=2; -update noar ti set v0='JVUG6509WQXQCRAT0FKBP9S' where id=2; -update noar tt set b1='B6761NAON656YVHC6O' where id=2; -update noar ti set b1='B6761NAON656YVHC6O' where id=2; -update noar tt set v0='OAV7PK4WJHBZ6R26OI3' where id=2; -update noar ti set v0='OAV7PK4WJHBZ6R26OI3' where id=2; -update noar tt set b2='RPPNI307U6F1KJVB35WVKHZ6MTWS' where id=2; -update noar ti set b2='RPPNI307U6F1KJVB35WVKHZ6MTWS' where id=2; -update noar tt set v0='HCQ219NF' where id=3; -update noar ti set v0='HCQ219NF' where id=3; -update noar tt set b0='UBRUADST4RK2LJ13DOM' where id=3; -update noar ti set b0='UBRUADST4RK2LJ13DOM' where id=3; -update noar tt set v0='OXNAXWTO265GWA8BJUIJ' where id=3; -update noar ti set v0='OXNAXWTO265GWA8BJUIJ' where id=3; -update noar tt set b1='P4U' where id=3; -update noar ti set b1='P4U' where id=3; -update noar tt set v0='6QF79F5WZ8AHZ' where id=3; -update noar ti set v0='6QF79F5WZ8AHZ' where id=3; -update noar tt set b2='45OEDP7LV4L87YQ4GRYTU7KOLJ7' where id=3; -update noar ti set b2='45OEDP7LV4L87YQ4GRYTU7KOLJ7' where id=3; -update noar tt set v0='VYM' where id=4; -update noar ti set v0='VYM' where id=4; -update noar tt set b0='6O4NMK2XVH3DC4UC9RQ1W39JCBG' where id=4; -update noar ti set b0='6O4NMK2XVH3DC4UC9RQ1W39JCBG' where id=4; -update noar tt set v0='DCS57LEP3UIEMOVFC' where id=4; -update noar ti set v0='DCS57LEP3UIEMOVFC' where id=4; -update noar tt set b1='OGYTT997DPGUZQT1OY6XL' where id=4; -update noar ti set b1='OGYTT997DPGUZQT1OY6XL' where id=4; -update noar tt set v0='M' where id=4; -update noar ti set v0='M' where id=4; -update noar tt set b2='GF5RWQ0KSTH44RR' where id=4; -update noar ti set b2='GF5RWQ0KSTH44RR' where id=4; -update noar tt set v0='LE8URYJKP7NC56' where id=5; -update noar ti set v0='LE8URYJKP7NC56' where id=5; -update noar tt set b0='YI7NRJRK8V' where id=5; -update noar ti set b0='YI7NRJRK8V' where id=5; -update noar tt set v0='XW11Z6E77V1R7RIJWML' where id=5; -update noar ti set v0='XW11Z6E77V1R7RIJWML' where id=5; -update noar tt set b1='6ZTLENBCF' where id=5; -update noar ti set b1='6ZTLENBCF' where id=5; -update noar tt set v0='A3ZLJ4J' where id=5; -update noar ti set v0='A3ZLJ4J' where id=5; -update noar tt set b2='MHT1AVIJIWRG29PHYJWZDOCJJT9LSRTB' where id=5; -update noar ti set b2='MHT1AVIJIWRG29PHYJWZDOCJJT9LSRTB' where id=5; -update noar tt set v0='MZXPRNYAM' where id=6; -update noar ti set v0='MZXPRNYAM' where id=6; -update noar tt set b0='ZWCT7WGR7GH0N52XLPMIBK' where id=6; -update noar ti set b0='ZWCT7WGR7GH0N52XLPMIBK' where id=6; -update noar tt set v0='Z5RJCOBMLRPMZMWS9VWZNS4IOGQIBIOO' where id=6; -update noar ti set v0='Z5RJCOBMLRPMZMWS9VWZNS4IOGQIBIOO' where id=6; -update noar tt set b1='3WCKTPH0JO843P6D66HF53S4OQMR9DL' where id=6; -update noar ti set b1='3WCKTPH0JO843P6D66HF53S4OQMR9DL' where id=6; -update noar tt set v0='8K7A6Z' where id=6; -update noar ti set v0='8K7A6Z' where id=6; -update noar tt set b2='3VBWYMMEELJPLM48T6U6XIQSUDX6B89Y' where id=6; -update noar ti set b2='3VBWYMMEELJPLM48T6U6XIQSUDX6B89Y' where id=6; -update noar tt set v0='TR66X8K1JPP3' where id=7; -update noar ti set v0='TR66X8K1JPP3' where id=7; -update noar tt set b0='4YNY0MOMC1TLN0U739PAPHZHUDMUTUF' where id=7; -update noar ti set b0='4YNY0MOMC1TLN0U739PAPHZHUDMUTUF' where id=7; -update noar tt set v0='D2JKCJ9I81354O1KH68Y5F10H4QQ' where id=7; -update noar ti set v0='D2JKCJ9I81354O1KH68Y5F10H4QQ' where id=7; -update noar tt set b1='Y52QH6BQ1QQVUG5E9MXX56TW' where id=7; -update noar ti set b1='Y52QH6BQ1QQVUG5E9MXX56TW' where id=7; -update noar tt set v0='5HDGHD8MFR72KK6G028' where id=7; -update noar ti set v0='5HDGHD8MFR72KK6G028' where id=7; -update noar tt set b2='5ZM649Z9S8' where id=7; -update noar ti set b2='5ZM649Z9S8' where id=7; -update noar tt set v0='M4K0GMFGLBAZ5OOS6J' where id=8; -update noar ti set v0='M4K0GMFGLBAZ5OOS6J' where id=8; -update noar tt set b0='CCCVZ30NLQ4U73HGR5G4THRH9BYI11Q' where id=8; -update noar ti set b0='CCCVZ30NLQ4U73HGR5G4THRH9BYI11Q' where id=8; -update noar tt set v0='2M8I2AXOX2FQBBL2HF89198VOHH3' where id=8; -update noar ti set v0='2M8I2AXOX2FQBBL2HF89198VOHH3' where id=8; -update noar tt set b1='IQJX8QANJ1H9' where id=8; -update noar ti set b1='IQJX8QANJ1H9' where id=8; -update noar tt set v0='C9GJO4' where id=8; -update noar ti set v0='C9GJO4' where id=8; -update noar tt set b2='4AX5OPKC49' where id=8; -update noar ti set b2='4AX5OPKC49' where id=8; -update noar tt set v0='99BDP3OBII5T3OZVU' where id=9; -update noar ti set v0='99BDP3OBII5T3OZVU' where id=9; -update noar tt set b0='I343XTTU82SJ51SR7OH5V2B4F0L7K' where id=9; -update noar ti set b0='I343XTTU82SJ51SR7OH5V2B4F0L7K' where id=9; -update noar tt set v0='44' where id=9; -update noar ti set v0='44' where id=9; -update noar tt set b1='2Q28RRNEL4B3L59LTJ4RAPVZ96J9FKT' where id=9; -update noar ti set b1='2Q28RRNEL4B3L59LTJ4RAPVZ96J9FKT' where id=9; -update noar tt set v0='9CFD0COXGJ9EP0DSMK9O2K920ZD4MBI5' where id=9; -update noar ti set v0='9CFD0COXGJ9EP0DSMK9O2K920ZD4MBI5' where id=9; -update noar tt set b2='XNGO2U59AQ' where id=9; -update noar ti set b2='XNGO2U59AQ' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 tinyblob null, -b1 longblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='KL3YO1N1ZIG' where id=1; -update noar ti set v0='KL3YO1N1ZIG' where id=1; -update noar tt set b0='2JLUN' where id=1; -update noar ti set b0='2JLUN' where id=1; -update noar tt set v0='HXBOFRAE439QONDSK40CALVQKMC4' where id=1; -update noar ti set v0='HXBOFRAE439QONDSK40CALVQKMC4' where id=1; -update noar tt set b1='5TZM1DT8O913N7SH9LPH4GJVIB34XGR' where id=1; -update noar ti set b1='5TZM1DT8O913N7SH9LPH4GJVIB34XGR' where id=1; -update noar tt set v0='6PV' where id=1; -update noar ti set v0='6PV' where id=1; -update noar tt set b2='SHIH' where id=1; -update noar ti set b2='SHIH' where id=1; -update noar tt set v0='UX0AKB9HO385YILPHB' where id=2; -update noar ti set v0='UX0AKB9HO385YILPHB' where id=2; -update noar tt set b0='L35E5O4P' where id=2; -update noar ti set b0='L35E5O4P' where id=2; -update noar tt set v0='O3SCDNVFMKI4NKU' where id=2; -update noar ti set v0='O3SCDNVFMKI4NKU' where id=2; -update noar tt set b1='N5LYHUSN47UZ47GNHA2DNCA2GA' where id=2; -update noar ti set b1='N5LYHUSN47UZ47GNHA2DNCA2GA' where id=2; -update noar tt set v0='8S87K1YL3EUVTLJU8A22W7KSO7H76630' where id=2; -update noar ti set v0='8S87K1YL3EUVTLJU8A22W7KSO7H76630' where id=2; -update noar tt set b2='DUNPH7ZD6880UZHNY0U' where id=2; -update noar ti set b2='DUNPH7ZD6880UZHNY0U' where id=2; -update noar tt set v0='OFM9R3WYFCHBFZT92BIQHGL' where id=3; -update noar ti set v0='OFM9R3WYFCHBFZT92BIQHGL' where id=3; -update noar tt set b0='F1QP3ZVLYAXJRW50ZEB6QOS67' where id=3; -update noar ti set b0='F1QP3ZVLYAXJRW50ZEB6QOS67' where id=3; -update noar tt set v0='M286S' where id=3; -update noar ti set v0='M286S' where id=3; -update noar tt set b1='BHT55J' where id=3; -update noar ti set b1='BHT55J' where id=3; -update noar tt set v0='Y2NAB5C' where id=3; -update noar ti set v0='Y2NAB5C' where id=3; -update noar tt set b2='ZJR5557' where id=3; -update noar ti set b2='ZJR5557' where id=3; -update noar tt set v0='E2OYNB' where id=4; -update noar ti set v0='E2OYNB' where id=4; -update noar tt set b0='G4220ULH36UNWDY1MDEMK8L' where id=4; -update noar ti set b0='G4220ULH36UNWDY1MDEMK8L' where id=4; -update noar tt set v0='AQQAR5ISYQXBQOKJU8IHQW5S9T12EN6' where id=4; -update noar ti set v0='AQQAR5ISYQXBQOKJU8IHQW5S9T12EN6' where id=4; -update noar tt set b1='Y25FSLX3314E6SY3R' where id=4; -update noar ti set b1='Y25FSLX3314E6SY3R' where id=4; -update noar tt set v0='RCZBK40UR4UR71FOUKA8VJB1V9ALG5T' where id=4; -update noar ti set v0='RCZBK40UR4UR71FOUKA8VJB1V9ALG5T' where id=4; -update noar tt set b2='76R1V995O8G5CCH44WTAJPP1PMB7WB9N' where id=4; -update noar ti set b2='76R1V995O8G5CCH44WTAJPP1PMB7WB9N' where id=4; -update noar tt set v0='FYWB2K5XJV2BMES7F6PIBK4XFCSYYK' where id=5; -update noar ti set v0='FYWB2K5XJV2BMES7F6PIBK4XFCSYYK' where id=5; -update noar tt set b0='S7' where id=5; -update noar ti set b0='S7' where id=5; -update noar tt set v0='1SPC2LGO3IEPTN4X1YI' where id=5; -update noar ti set v0='1SPC2LGO3IEPTN4X1YI' where id=5; -update noar tt set b1='TV6NUIUR5' where id=5; -update noar ti set b1='TV6NUIUR5' where id=5; -update noar tt set v0='RR' where id=5; -update noar ti set v0='RR' where id=5; -update noar tt set b2='URW76TQ5NRCFOTVFE37ZUMAJ' where id=5; -update noar ti set b2='URW76TQ5NRCFOTVFE37ZUMAJ' where id=5; -update noar tt set v0='ULKBH' where id=6; -update noar ti set v0='ULKBH' where id=6; -update noar tt set b0='QYPSDLGTDN1792AW4KI' where id=6; -update noar ti set b0='QYPSDLGTDN1792AW4KI' where id=6; -update noar tt set v0='EPUTN0MBMOSE5L0W7' where id=6; -update noar ti set v0='EPUTN0MBMOSE5L0W7' where id=6; -update noar tt set b1='IRRATW6X3FRSKQ3AP4DAA' where id=6; -update noar ti set b1='IRRATW6X3FRSKQ3AP4DAA' where id=6; -update noar tt set v0='G' where id=6; -update noar ti set v0='G' where id=6; -update noar tt set b2='4V3FFDJV' where id=6; -update noar ti set b2='4V3FFDJV' where id=6; -update noar tt set v0='7ADENU14Q0BUHENTS5SY3ES5' where id=7; -update noar ti set v0='7ADENU14Q0BUHENTS5SY3ES5' where id=7; -update noar tt set b0='T64ZDLSWWVG0N7R8E26VGMQDU6KJWR' where id=7; -update noar ti set b0='T64ZDLSWWVG0N7R8E26VGMQDU6KJWR' where id=7; -update noar tt set v0='2W8B7GMPA5WCO30C3RGNRAWKVK1WMXM' where id=7; -update noar ti set v0='2W8B7GMPA5WCO30C3RGNRAWKVK1WMXM' where id=7; -update noar tt set b1='T80Y46G3VSTA7GPPYR8G3' where id=7; -update noar ti set b1='T80Y46G3VSTA7GPPYR8G3' where id=7; -update noar tt set v0='KJR2Q7EM0DDBOWHXGOEE' where id=7; -update noar ti set v0='KJR2Q7EM0DDBOWHXGOEE' where id=7; -update noar tt set b2='7VZ6S0RTW8HUUEZ7ZPHC6XKS' where id=7; -update noar ti set b2='7VZ6S0RTW8HUUEZ7ZPHC6XKS' where id=7; -update noar tt set v0='EQWPI8XDYUX79AD' where id=8; -update noar ti set v0='EQWPI8XDYUX79AD' where id=8; -update noar tt set b0='I06RMXEW9' where id=8; -update noar ti set b0='I06RMXEW9' where id=8; -update noar tt set v0='4RESBJ43DAG' where id=8; -update noar ti set v0='4RESBJ43DAG' where id=8; -update noar tt set b1='BYR3RVM' where id=8; -update noar ti set b1='BYR3RVM' where id=8; -update noar tt set v0='4TESOB32JUGEY4PDABC4B5KX9G1Z6LXL' where id=8; -update noar ti set v0='4TESOB32JUGEY4PDABC4B5KX9G1Z6LXL' where id=8; -update noar tt set b2='8RENY9HT9K3C9BIL2WKZGQUL7AS0GMXD' where id=8; -update noar ti set b2='8RENY9HT9K3C9BIL2WKZGQUL7AS0GMXD' where id=8; -update noar tt set v0='HS4UMZG' where id=9; -update noar ti set v0='HS4UMZG' where id=9; -update noar tt set b0='B8PXXD3NGA6AHJR9UY8187D8DAZL' where id=9; -update noar ti set b0='B8PXXD3NGA6AHJR9UY8187D8DAZL' where id=9; -update noar tt set v0='S3QWNGYYJWS8PBM5P7' where id=9; -update noar ti set v0='S3QWNGYYJWS8PBM5P7' where id=9; -update noar tt set b1='4CPY' where id=9; -update noar ti set b1='4CPY' where id=9; -update noar tt set v0='ES0I93G8AJOV' where id=9; -update noar ti set v0='ES0I93G8AJOV' where id=9; -update noar tt set b2='I9BSPXBO7WRR25B' where id=9; -update noar ti set b2='I9BSPXBO7WRR25B' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 tinyblob null, -b1 longblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='WT' where id=1; -update noar ti set v0='WT' where id=1; -update noar tt set b0='JP' where id=1; -update noar ti set b0='JP' where id=1; -update noar tt set v0='TZ8073I46IRKQX847' where id=1; -update noar ti set v0='TZ8073I46IRKQX847' where id=1; -update noar tt set b1='IX7KGDN' where id=1; -update noar ti set b1='IX7KGDN' where id=1; -update noar tt set v0='6JNY3U67EGMV6J6QKCZOQMG0C4G7E80J' where id=1; -update noar ti set v0='6JNY3U67EGMV6J6QKCZOQMG0C4G7E80J' where id=1; -update noar tt set b2='I7U94RRN' where id=1; -update noar ti set b2='I7U94RRN' where id=1; -update noar tt set v0='TJI4XHZ79NZBDBKBFYCL1QRJ01' where id=2; -update noar ti set v0='TJI4XHZ79NZBDBKBFYCL1QRJ01' where id=2; -update noar tt set b0='LV' where id=2; -update noar ti set b0='LV' where id=2; -update noar tt set v0='9F57SC1ULXMC' where id=2; -update noar ti set v0='9F57SC1ULXMC' where id=2; -update noar tt set b1='WQZKJSAY9C70OG3NPFRD6W19K6Q4N3F' where id=2; -update noar ti set b1='WQZKJSAY9C70OG3NPFRD6W19K6Q4N3F' where id=2; -update noar tt set v0='3BL8YCDUYP0K7ZSHKRH5ME5BY9H3LLX' where id=2; -update noar ti set v0='3BL8YCDUYP0K7ZSHKRH5ME5BY9H3LLX' where id=2; -update noar tt set b2='ED3H7PCGJJKBZ2ASYA1HDWRZ' where id=2; -update noar ti set b2='ED3H7PCGJJKBZ2ASYA1HDWRZ' where id=2; -update noar tt set v0='N6SR8G0VJW2RVR7Y2JVN' where id=3; -update noar ti set v0='N6SR8G0VJW2RVR7Y2JVN' where id=3; -update noar tt set b0='B' where id=3; -update noar ti set b0='B' where id=3; -update noar tt set v0='JJE2S04VWOVOE' where id=3; -update noar ti set v0='JJE2S04VWOVOE' where id=3; -update noar tt set b1='5SY9B2P0T' where id=3; -update noar ti set b1='5SY9B2P0T' where id=3; -update noar tt set v0='O2JS9DT385D04WC' where id=3; -update noar ti set v0='O2JS9DT385D04WC' where id=3; -update noar tt set b2='7S390ARWXAAFCGZK' where id=3; -update noar ti set b2='7S390ARWXAAFCGZK' where id=3; -update noar tt set v0='KC6CHYMIDLNRMTH4RPPMVJI4PMRSBAX' where id=4; -update noar ti set v0='KC6CHYMIDLNRMTH4RPPMVJI4PMRSBAX' where id=4; -update noar tt set b0='OXSXD9AWR9FDB2UBAIZ' where id=4; -update noar ti set b0='OXSXD9AWR9FDB2UBAIZ' where id=4; -update noar tt set v0='6VYZ6' where id=4; -update noar ti set v0='6VYZ6' where id=4; -update noar tt set b1='IYECCXG7TC' where id=4; -update noar ti set b1='IYECCXG7TC' where id=4; -update noar tt set v0='AN6' where id=4; -update noar ti set v0='AN6' where id=4; -update noar tt set b2='4JQN5DRS' where id=4; -update noar ti set b2='4JQN5DRS' where id=4; -update noar tt set v0='UWSA' where id=5; -update noar ti set v0='UWSA' where id=5; -update noar tt set b0='9KILI0UVNRRPAREKHDYVD6' where id=5; -update noar ti set b0='9KILI0UVNRRPAREKHDYVD6' where id=5; -update noar tt set v0='PYNXUMVK3A5Z' where id=5; -update noar ti set v0='PYNXUMVK3A5Z' where id=5; -update noar tt set b1='YMEUG8UAUIIPTI0JI16JVTL2V' where id=5; -update noar ti set b1='YMEUG8UAUIIPTI0JI16JVTL2V' where id=5; -update noar tt set v0='5Y' where id=5; -update noar ti set v0='5Y' where id=5; -update noar tt set b2='F4JD5RT9NNO7OBKS0M' where id=5; -update noar ti set b2='F4JD5RT9NNO7OBKS0M' where id=5; -update noar tt set v0='GC5ZK3DMH8E' where id=6; -update noar ti set v0='GC5ZK3DMH8E' where id=6; -update noar tt set b0='AKY' where id=6; -update noar ti set b0='AKY' where id=6; -update noar tt set v0='0MNL29FU9DZ1' where id=6; -update noar ti set v0='0MNL29FU9DZ1' where id=6; -update noar tt set b1='VK961N' where id=6; -update noar ti set b1='VK961N' where id=6; -update noar tt set v0='TYOH7NUCM6' where id=6; -update noar ti set v0='TYOH7NUCM6' where id=6; -update noar tt set b2='6ZNCDT3NT22B' where id=6; -update noar ti set b2='6ZNCDT3NT22B' where id=6; -update noar tt set v0='C0K73UQ9UCL231S' where id=7; -update noar ti set v0='C0K73UQ9UCL231S' where id=7; -update noar tt set b0='F2JA58CXW0K5B4QLRYUGLHM4' where id=7; -update noar ti set b0='F2JA58CXW0K5B4QLRYUGLHM4' where id=7; -update noar tt set v0='DP8R6E3C0G8DFZKJNO93YNOWT5JA' where id=7; -update noar ti set v0='DP8R6E3C0G8DFZKJNO93YNOWT5JA' where id=7; -update noar tt set b1='D1BVSN2Q' where id=7; -update noar ti set b1='D1BVSN2Q' where id=7; -update noar tt set v0='LP8AZNV5Y891ZPA3Y33N4J9' where id=7; -update noar ti set v0='LP8AZNV5Y891ZPA3Y33N4J9' where id=7; -update noar tt set b2='HT6SD531B3R9KPMEL1UJ0O5IMQU6W2VJ' where id=7; -update noar ti set b2='HT6SD531B3R9KPMEL1UJ0O5IMQU6W2VJ' where id=7; -update noar tt set v0='FGLNOA2PJGKVKU' where id=8; -update noar ti set v0='FGLNOA2PJGKVKU' where id=8; -update noar tt set b0='MCP48L29E4S768QWKGQ0FN' where id=8; -update noar ti set b0='MCP48L29E4S768QWKGQ0FN' where id=8; -update noar tt set v0='HVS' where id=8; -update noar ti set v0='HVS' where id=8; -update noar tt set b1='Z' where id=8; -update noar ti set b1='Z' where id=8; -update noar tt set v0='P4QO024KWVI2' where id=8; -update noar ti set v0='P4QO024KWVI2' where id=8; -update noar tt set b2='3O06FEX8W0' where id=8; -update noar ti set b2='3O06FEX8W0' where id=8; -update noar tt set v0='94TS3PDXY4EZUIHSPDXEO' where id=9; -update noar ti set v0='94TS3PDXY4EZUIHSPDXEO' where id=9; -update noar tt set b0='XATF81ZQENQME7YGJ39HOEKP' where id=9; -update noar ti set b0='XATF81ZQENQME7YGJ39HOEKP' where id=9; -update noar tt set v0='DZYNBUMYRDB92' where id=9; -update noar ti set v0='DZYNBUMYRDB92' where id=9; -update noar tt set b1='56F3NYVB1KO3S1S8J' where id=9; -update noar ti set b1='56F3NYVB1KO3S1S8J' where id=9; -update noar tt set v0='N' where id=9; -update noar ti set v0='N' where id=9; -update noar tt set b2='NH0EC2J043WJ' where id=9; -update noar ti set b2='NH0EC2J043WJ' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 tinyblob not null, -b1 longblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='OB959OG3ZZWNGLIDZMIDT8LSPS' where id=1; -update noar ti set v0='OB959OG3ZZWNGLIDZMIDT8LSPS' where id=1; -update noar tt set b0='SCMPC3RFIN' where id=1; -update noar ti set b0='SCMPC3RFIN' where id=1; -update noar tt set v0='BUZHWG' where id=1; -update noar ti set v0='BUZHWG' where id=1; -update noar tt set b1='NUHFXWKN6BVDA' where id=1; -update noar ti set b1='NUHFXWKN6BVDA' where id=1; -update noar tt set v0='RFFKPUHD' where id=1; -update noar ti set v0='RFFKPUHD' where id=1; -update noar tt set b2='49CHTO1' where id=1; -update noar ti set b2='49CHTO1' where id=1; -update noar tt set v0='8BYDZ74NH73ZQNBMF69JISAM2O' where id=2; -update noar ti set v0='8BYDZ74NH73ZQNBMF69JISAM2O' where id=2; -update noar tt set b0='AC9MZ8CSKAMGL2J99PWL' where id=2; -update noar ti set b0='AC9MZ8CSKAMGL2J99PWL' where id=2; -update noar tt set v0='ML0Q3UG029LU9L40ZTL' where id=2; -update noar ti set v0='ML0Q3UG029LU9L40ZTL' where id=2; -update noar tt set b1='HH7XWU2Q0HXGQIJ81DAKTMWGFRFOW' where id=2; -update noar ti set b1='HH7XWU2Q0HXGQIJ81DAKTMWGFRFOW' where id=2; -update noar tt set v0='4D907D8BIDRQMQX16M7Q02R5HCIBJQ' where id=2; -update noar ti set v0='4D907D8BIDRQMQX16M7Q02R5HCIBJQ' where id=2; -update noar tt set b2='UJH' where id=2; -update noar ti set b2='UJH' where id=2; -update noar tt set v0='SD4WXO0I1' where id=3; -update noar ti set v0='SD4WXO0I1' where id=3; -update noar tt set b0='MS9UM3ZEU70P' where id=3; -update noar ti set b0='MS9UM3ZEU70P' where id=3; -update noar tt set v0='NE8X6T1MN7AZH8A' where id=3; -update noar ti set v0='NE8X6T1MN7AZH8A' where id=3; -update noar tt set b1='3SFX6FHCI27NR0NNA3B35BNWVBJ' where id=3; -update noar ti set b1='3SFX6FHCI27NR0NNA3B35BNWVBJ' where id=3; -update noar tt set v0='MB9KVPLXIVAYLZGJU' where id=3; -update noar ti set v0='MB9KVPLXIVAYLZGJU' where id=3; -update noar tt set b2='KT3TZCUA1TNYAGMP7ZPH4' where id=3; -update noar ti set b2='KT3TZCUA1TNYAGMP7ZPH4' where id=3; -update noar tt set v0='1JIFOZT5DY6FJ81JH5F3EAYE5O38VF' where id=4; -update noar ti set v0='1JIFOZT5DY6FJ81JH5F3EAYE5O38VF' where id=4; -update noar tt set b0='SIV3XFSJUI' where id=4; -update noar ti set b0='SIV3XFSJUI' where id=4; -update noar tt set v0='F8R8M33TQG' where id=4; -update noar ti set v0='F8R8M33TQG' where id=4; -update noar tt set b1='332DBT81K6ZS3EZL7NNXNNAM0BE2QQEB' where id=4; -update noar ti set b1='332DBT81K6ZS3EZL7NNXNNAM0BE2QQEB' where id=4; -update noar tt set v0='8JLY' where id=4; -update noar ti set v0='8JLY' where id=4; -update noar tt set b2='H6B38DN6HR2RT' where id=4; -update noar ti set b2='H6B38DN6HR2RT' where id=4; -update noar tt set v0='GCDUN8D' where id=5; -update noar ti set v0='GCDUN8D' where id=5; -update noar tt set b0='6G051URWJ2AC24CAYAT4DHB3IKCCWVBI' where id=5; -update noar ti set b0='6G051URWJ2AC24CAYAT4DHB3IKCCWVBI' where id=5; -update noar tt set v0='A2SFKWK2WN716JNNK7787RAM736I' where id=5; -update noar ti set v0='A2SFKWK2WN716JNNK7787RAM736I' where id=5; -update noar tt set b1='CHR4L2NE7MFWP6CVELB1K7J' where id=5; -update noar ti set b1='CHR4L2NE7MFWP6CVELB1K7J' where id=5; -update noar tt set v0='LHUD7F27RPNVCE2F' where id=5; -update noar ti set v0='LHUD7F27RPNVCE2F' where id=5; -update noar tt set b2='G6RFP' where id=5; -update noar ti set b2='G6RFP' where id=5; -update noar tt set v0='BVHKJDC8K7LPWKMA1L6' where id=6; -update noar ti set v0='BVHKJDC8K7LPWKMA1L6' where id=6; -update noar tt set b0='05WD2S517QH3DXN3RXM72GXQ' where id=6; -update noar ti set b0='05WD2S517QH3DXN3RXM72GXQ' where id=6; -update noar tt set v0='Q9TG4R' where id=6; -update noar ti set v0='Q9TG4R' where id=6; -update noar tt set b1='YNFW56I7A6FFPU6V3UV60' where id=6; -update noar ti set b1='YNFW56I7A6FFPU6V3UV60' where id=6; -update noar tt set v0='N6RSC7VBP8UW3KKKZPWQZBMMMDFWC' where id=6; -update noar ti set v0='N6RSC7VBP8UW3KKKZPWQZBMMMDFWC' where id=6; -update noar tt set b2='VSBKTIKOQW6ED6L74TQ' where id=6; -update noar ti set b2='VSBKTIKOQW6ED6L74TQ' where id=6; -update noar tt set v0='GX836WVXXX' where id=7; -update noar ti set v0='GX836WVXXX' where id=7; -update noar tt set b0='XSCO2IYDICMK8' where id=7; -update noar ti set b0='XSCO2IYDICMK8' where id=7; -update noar tt set v0='IRMXCRSWE7NOBF71YUNYCUPP1BDCP' where id=7; -update noar ti set v0='IRMXCRSWE7NOBF71YUNYCUPP1BDCP' where id=7; -update noar tt set b1='6RRAGG1D5R2' where id=7; -update noar ti set b1='6RRAGG1D5R2' where id=7; -update noar tt set v0='5QE0RH2PSYKK9UNS4F6AG6R6U' where id=7; -update noar ti set v0='5QE0RH2PSYKK9UNS4F6AG6R6U' where id=7; -update noar tt set b2='A5M' where id=7; -update noar ti set b2='A5M' where id=7; -update noar tt set v0='N9HQLQHG7G' where id=8; -update noar ti set v0='N9HQLQHG7G' where id=8; -update noar tt set b0='SMVX6JV' where id=8; -update noar ti set b0='SMVX6JV' where id=8; -update noar tt set v0='BNIS5YY8C19UUXVZV2ZIEJH32' where id=8; -update noar ti set v0='BNIS5YY8C19UUXVZV2ZIEJH32' where id=8; -update noar tt set b1='7EBFDZPQRX7MIM1DG6NLAYSXFO36' where id=8; -update noar ti set b1='7EBFDZPQRX7MIM1DG6NLAYSXFO36' where id=8; -update noar tt set v0='E0LP4PINUA' where id=8; -update noar ti set v0='E0LP4PINUA' where id=8; -update noar tt set b2='5D3DQB' where id=8; -update noar ti set b2='5D3DQB' where id=8; -update noar tt set v0='DD093HFS0RKJ9WGXXT2N5DAO6VI0' where id=9; -update noar ti set v0='DD093HFS0RKJ9WGXXT2N5DAO6VI0' where id=9; -update noar tt set b0='C4JKAQ952V' where id=9; -update noar ti set b0='C4JKAQ952V' where id=9; -update noar tt set v0='FLNGUF6XVIA3RVUEAW' where id=9; -update noar ti set v0='FLNGUF6XVIA3RVUEAW' where id=9; -update noar tt set b1='CTUF690DI0L4G0MJSNC2K2FZ' where id=9; -update noar ti set b1='CTUF690DI0L4G0MJSNC2K2FZ' where id=9; -update noar tt set v0='ZE99QS32375OIGH7IJ1Y5G80ICKNM9' where id=9; -update noar ti set v0='ZE99QS32375OIGH7IJ1Y5G80ICKNM9' where id=9; -update noar tt set b2='HH9JTXQJ1KT' where id=9; -update noar ti set b2='HH9JTXQJ1KT' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 tinyblob not null, -b1 longblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='0SHED8Q2' where id=1; -update noar ti set v0='0SHED8Q2' where id=1; -update noar tt set b0='ME5JRX3ZQ4B8E0DNCU2P6ZQ8ZKJSQ' where id=1; -update noar ti set b0='ME5JRX3ZQ4B8E0DNCU2P6ZQ8ZKJSQ' where id=1; -update noar tt set v0='2S08FHJADCFP4FC2DXFX' where id=1; -update noar ti set v0='2S08FHJADCFP4FC2DXFX' where id=1; -update noar tt set b1='OWKAKK8HV' where id=1; -update noar ti set b1='OWKAKK8HV' where id=1; -update noar tt set v0='NOESX35JAXWXJXOVIK7UTRES5VB1E' where id=1; -update noar ti set v0='NOESX35JAXWXJXOVIK7UTRES5VB1E' where id=1; -update noar tt set b2='S9HU1MV362YOIP1WSL8' where id=1; -update noar ti set b2='S9HU1MV362YOIP1WSL8' where id=1; -update noar tt set v0='4MRXHJRT5PWPG31K4RWODWVC0A' where id=2; -update noar ti set v0='4MRXHJRT5PWPG31K4RWODWVC0A' where id=2; -update noar tt set b0='PISI5H545T6R1BLBLR0GZ07TWX44G3' where id=2; -update noar ti set b0='PISI5H545T6R1BLBLR0GZ07TWX44G3' where id=2; -update noar tt set v0='A9LN2KOQ04B8PJW7Z4DZY0RGT95339R' where id=2; -update noar ti set v0='A9LN2KOQ04B8PJW7Z4DZY0RGT95339R' where id=2; -update noar tt set b1='QQG2X9BS5U7B2UHP' where id=2; -update noar ti set b1='QQG2X9BS5U7B2UHP' where id=2; -update noar tt set v0='JTK8Y8HRE2VKL5XJT' where id=2; -update noar ti set v0='JTK8Y8HRE2VKL5XJT' where id=2; -update noar tt set b2='FTXOS5MA4N950PQCE3WDXS' where id=2; -update noar ti set b2='FTXOS5MA4N950PQCE3WDXS' where id=2; -update noar tt set v0='9' where id=3; -update noar ti set v0='9' where id=3; -update noar tt set b0='WORUCOXK1JPOGO8H4HTGSJT' where id=3; -update noar ti set b0='WORUCOXK1JPOGO8H4HTGSJT' where id=3; -update noar tt set v0='HCT' where id=3; -update noar ti set v0='HCT' where id=3; -update noar tt set b1='8KT6054LUM4UQKUW6Z5J11H' where id=3; -update noar ti set b1='8KT6054LUM4UQKUW6Z5J11H' where id=3; -update noar tt set v0='H68Y58P7TMC4KG13YQZQ4YEU9Z90MQ5' where id=3; -update noar ti set v0='H68Y58P7TMC4KG13YQZQ4YEU9Z90MQ5' where id=3; -update noar tt set b2='WYP9INETKE4U66UNNWZIDWVZD731LWYB' where id=3; -update noar ti set b2='WYP9INETKE4U66UNNWZIDWVZD731LWYB' where id=3; -update noar tt set v0='T8OITEFYNXB918W3Y9LMNPOHYJSSE' where id=4; -update noar ti set v0='T8OITEFYNXB918W3Y9LMNPOHYJSSE' where id=4; -update noar tt set b0='MPVQLAC' where id=4; -update noar ti set b0='MPVQLAC' where id=4; -update noar tt set v0='KF7Q0TOHR6G' where id=4; -update noar ti set v0='KF7Q0TOHR6G' where id=4; -update noar tt set b1='KAU1TDA1' where id=4; -update noar ti set b1='KAU1TDA1' where id=4; -update noar tt set v0='EUA3' where id=4; -update noar ti set v0='EUA3' where id=4; -update noar tt set b2='XO8J8Q8EWE' where id=4; -update noar ti set b2='XO8J8Q8EWE' where id=4; -update noar tt set v0='T13RKCI3E5HSSQXTFKSSV4S' where id=5; -update noar ti set v0='T13RKCI3E5HSSQXTFKSSV4S' where id=5; -update noar tt set b0='L5TOIR4' where id=5; -update noar ti set b0='L5TOIR4' where id=5; -update noar tt set v0='0V58BZCZ15P40UM4DW' where id=5; -update noar ti set v0='0V58BZCZ15P40UM4DW' where id=5; -update noar tt set b1='OFEVXHM' where id=5; -update noar ti set b1='OFEVXHM' where id=5; -update noar tt set v0='8PFDBMH1R7WD' where id=5; -update noar ti set v0='8PFDBMH1R7WD' where id=5; -update noar tt set b2='3MAE1ESH817' where id=5; -update noar ti set b2='3MAE1ESH817' where id=5; -update noar tt set v0='TEIIUST2W8TZ' where id=6; -update noar ti set v0='TEIIUST2W8TZ' where id=6; -update noar tt set b0='Z5H6JJWHMKOCCH13DIW1MZJLZY4R' where id=6; -update noar ti set b0='Z5H6JJWHMKOCCH13DIW1MZJLZY4R' where id=6; -update noar tt set v0='5W8WR1S3CS4DQ4C7VC' where id=6; -update noar ti set v0='5W8WR1S3CS4DQ4C7VC' where id=6; -update noar tt set b1='VM0B7L738YSHJ4FT489IP1CTBC3C' where id=6; -update noar ti set b1='VM0B7L738YSHJ4FT489IP1CTBC3C' where id=6; -update noar tt set v0='RNLIR1PGJ' where id=6; -update noar ti set v0='RNLIR1PGJ' where id=6; -update noar tt set b2='988MEBR8CITAAJW' where id=6; -update noar ti set b2='988MEBR8CITAAJW' where id=6; -update noar tt set v0='U9' where id=7; -update noar ti set v0='U9' where id=7; -update noar tt set b0='5V4HQ4YJDL8XJWDRND6Y9' where id=7; -update noar ti set b0='5V4HQ4YJDL8XJWDRND6Y9' where id=7; -update noar tt set v0='8RV3QRZQHMFRXBKKXRK' where id=7; -update noar ti set v0='8RV3QRZQHMFRXBKKXRK' where id=7; -update noar tt set b1='BFQ0AAX' where id=7; -update noar ti set b1='BFQ0AAX' where id=7; -update noar tt set v0='S' where id=7; -update noar ti set v0='S' where id=7; -update noar tt set b2='0DIX9RF0PW0BQKNFD' where id=7; -update noar ti set b2='0DIX9RF0PW0BQKNFD' where id=7; -update noar tt set v0='QYET2CDYAB4Y0O29CQJ1CNHJ178' where id=8; -update noar ti set v0='QYET2CDYAB4Y0O29CQJ1CNHJ178' where id=8; -update noar tt set b0='0JQHEA56NXMG' where id=8; -update noar ti set b0='0JQHEA56NXMG' where id=8; -update noar tt set v0='L7PGKHNKASTLAH' where id=8; -update noar ti set v0='L7PGKHNKASTLAH' where id=8; -update noar tt set b1='WNTERESXJVBXEUCABOKKJ6EW787776X' where id=8; -update noar ti set b1='WNTERESXJVBXEUCABOKKJ6EW787776X' where id=8; -update noar tt set v0='Y99P6DD2L1ODN297V8TT52KN7' where id=8; -update noar ti set v0='Y99P6DD2L1ODN297V8TT52KN7' where id=8; -update noar tt set b2='R9X1' where id=8; -update noar ti set b2='R9X1' where id=8; -update noar tt set v0='KL3' where id=9; -update noar ti set v0='KL3' where id=9; -update noar tt set b0='U1RXJHOUIYOUCMHRXTMLANFK' where id=9; -update noar ti set b0='U1RXJHOUIYOUCMHRXTMLANFK' where id=9; -update noar tt set v0='F1B' where id=9; -update noar ti set v0='F1B' where id=9; -update noar tt set b1='Q8' where id=9; -update noar ti set b1='Q8' where id=9; -update noar tt set v0='W4W957ZQFQGC78TTFITFXKGMOINDQOW' where id=9; -update noar ti set v0='W4W957ZQFQGC78TTFITFXKGMOINDQOW' where id=9; -update noar tt set b2='83XQR3O437RY5' where id=9; -update noar ti set b2='83XQR3O437RY5' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 tinyblob null, -b1 longblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='DJ1MXSKXM' where id=1; -update noar ti set v0='DJ1MXSKXM' where id=1; -update noar tt set b0='MWMI6H2BHD7AMELVJVLWFFEP' where id=1; -update noar ti set b0='MWMI6H2BHD7AMELVJVLWFFEP' where id=1; -update noar tt set v0='6DXB5JOQMHPPDLKCWDWLS5PUHOX8' where id=1; -update noar ti set v0='6DXB5JOQMHPPDLKCWDWLS5PUHOX8' where id=1; -update noar tt set b1='RQU8MD2WPZWZ0UC' where id=1; -update noar ti set b1='RQU8MD2WPZWZ0UC' where id=1; -update noar tt set v0='1EXESFMDG5BT' where id=1; -update noar ti set v0='1EXESFMDG5BT' where id=1; -update noar tt set b2='FJT8LDHBPMOR1KNSBW4UZCTJQX' where id=1; -update noar ti set b2='FJT8LDHBPMOR1KNSBW4UZCTJQX' where id=1; -update noar tt set v0='5Q0N3JQVUVOADI' where id=2; -update noar ti set v0='5Q0N3JQVUVOADI' where id=2; -update noar tt set b0='HU0VDM61BFSEGCMJEMPZHNEJV' where id=2; -update noar ti set b0='HU0VDM61BFSEGCMJEMPZHNEJV' where id=2; -update noar tt set v0='HZZB2G5XVBXDL65O' where id=2; -update noar ti set v0='HZZB2G5XVBXDL65O' where id=2; -update noar tt set b1='L9T7HXAT3EHODS8' where id=2; -update noar ti set b1='L9T7HXAT3EHODS8' where id=2; -update noar tt set v0='DU9DXS' where id=2; -update noar ti set v0='DU9DXS' where id=2; -update noar tt set b2='2CXIEKMTJ0XSC' where id=2; -update noar ti set b2='2CXIEKMTJ0XSC' where id=2; -update noar tt set v0='QNFLUSZYW3WUC52BRJK2BGTF49AH2D' where id=3; -update noar ti set v0='QNFLUSZYW3WUC52BRJK2BGTF49AH2D' where id=3; -update noar tt set b0='IWEJS2CBWDD1P6HC1P3' where id=3; -update noar ti set b0='IWEJS2CBWDD1P6HC1P3' where id=3; -update noar tt set v0='NJNDZYGN94MOM31' where id=3; -update noar ti set v0='NJNDZYGN94MOM31' where id=3; -update noar tt set b1='FOS' where id=3; -update noar ti set b1='FOS' where id=3; -update noar tt set v0='S81S' where id=3; -update noar ti set v0='S81S' where id=3; -update noar tt set b2='WHMALLI5LS002FRGO1A0V8V1VDFIHMVN' where id=3; -update noar ti set b2='WHMALLI5LS002FRGO1A0V8V1VDFIHMVN' where id=3; -update noar tt set v0='V29R3ADUYKU50DY9K1BLBMMP6I6KX3KH' where id=4; -update noar ti set v0='V29R3ADUYKU50DY9K1BLBMMP6I6KX3KH' where id=4; -update noar tt set b0='2SFJ7' where id=4; -update noar ti set b0='2SFJ7' where id=4; -update noar tt set v0='RBMCGI9VC1' where id=4; -update noar ti set v0='RBMCGI9VC1' where id=4; -update noar tt set b1='FRKDUYOP2Y0IS0AFDRMDS' where id=4; -update noar ti set b1='FRKDUYOP2Y0IS0AFDRMDS' where id=4; -update noar tt set v0='9L41QS' where id=4; -update noar ti set v0='9L41QS' where id=4; -update noar tt set b2='G7YT1FLLJHZ2GQ3HWMSG3QRE51DU' where id=4; -update noar ti set b2='G7YT1FLLJHZ2GQ3HWMSG3QRE51DU' where id=4; -update noar tt set v0='S2EKIR5I4MQV682' where id=5; -update noar ti set v0='S2EKIR5I4MQV682' where id=5; -update noar tt set b0='H2ZX7RT' where id=5; -update noar ti set b0='H2ZX7RT' where id=5; -update noar tt set v0='EZT' where id=5; -update noar ti set v0='EZT' where id=5; -update noar tt set b1='B17GX0FPOPJY3W5HFROX' where id=5; -update noar ti set b1='B17GX0FPOPJY3W5HFROX' where id=5; -update noar tt set v0='7P961' where id=5; -update noar ti set v0='7P961' where id=5; -update noar tt set b2='CTE' where id=5; -update noar ti set b2='CTE' where id=5; -update noar tt set v0='B1G2BA3VU8DDM7ONVMW4UIO92' where id=6; -update noar ti set v0='B1G2BA3VU8DDM7ONVMW4UIO92' where id=6; -update noar tt set b0='E5C73PV2A52YTKNOA3PUIG0A2WYG' where id=6; -update noar ti set b0='E5C73PV2A52YTKNOA3PUIG0A2WYG' where id=6; -update noar tt set v0='HTXJBLWNZP0DQMJEU7VTGAYUSL0V6O' where id=6; -update noar ti set v0='HTXJBLWNZP0DQMJEU7VTGAYUSL0V6O' where id=6; -update noar tt set b1='T7K7L6FSMJ4NFIR2VRJIE47KLC6JQ' where id=6; -update noar ti set b1='T7K7L6FSMJ4NFIR2VRJIE47KLC6JQ' where id=6; -update noar tt set v0='X' where id=6; -update noar ti set v0='X' where id=6; -update noar tt set b2='ENHUSCOXDL4T4GBD37' where id=6; -update noar ti set b2='ENHUSCOXDL4T4GBD37' where id=6; -update noar tt set v0='PBXRJ8C76OJ' where id=7; -update noar ti set v0='PBXRJ8C76OJ' where id=7; -update noar tt set b0='JBY8M983' where id=7; -update noar ti set b0='JBY8M983' where id=7; -update noar tt set v0='3H3LZPGFW3QALWN' where id=7; -update noar ti set v0='3H3LZPGFW3QALWN' where id=7; -update noar tt set b1='RLNZR7MXBHOH3QRIBT' where id=7; -update noar ti set b1='RLNZR7MXBHOH3QRIBT' where id=7; -update noar tt set v0='9Z9FVN7RDZORONKPN2Z6CT' where id=7; -update noar ti set v0='9Z9FVN7RDZORONKPN2Z6CT' where id=7; -update noar tt set b2='MDSUXECM9IPO7PI60L4WVZ81FF7FY' where id=7; -update noar ti set b2='MDSUXECM9IPO7PI60L4WVZ81FF7FY' where id=7; -update noar tt set v0='573' where id=8; -update noar ti set v0='573' where id=8; -update noar tt set b0='H2GPG4MINPW5OX6J619E' where id=8; -update noar ti set b0='H2GPG4MINPW5OX6J619E' where id=8; -update noar tt set v0='T77M' where id=8; -update noar ti set v0='T77M' where id=8; -update noar tt set b1='NXO53P69GD29GH8JGCQKECXE5HI' where id=8; -update noar ti set b1='NXO53P69GD29GH8JGCQKECXE5HI' where id=8; -update noar tt set v0='E6QN6A2QCK' where id=8; -update noar ti set v0='E6QN6A2QCK' where id=8; -update noar tt set b2='GSW0VPZZ3SDLLIY7YD' where id=8; -update noar ti set b2='GSW0VPZZ3SDLLIY7YD' where id=8; -update noar tt set v0='LC78UX24JTGK9OSYD6V1US7FXT' where id=9; -update noar ti set v0='LC78UX24JTGK9OSYD6V1US7FXT' where id=9; -update noar tt set b0='H7NVRK1V43J5SU449H61VCHD3CTABV0' where id=9; -update noar ti set b0='H7NVRK1V43J5SU449H61VCHD3CTABV0' where id=9; -update noar tt set v0='NDV' where id=9; -update noar ti set v0='NDV' where id=9; -update noar tt set b1='FSGZSRKKNTUOXX5GK3L768L5WQOV3Z' where id=9; -update noar ti set b1='FSGZSRKKNTUOXX5GK3L768L5WQOV3Z' where id=9; -update noar tt set v0='ES5ZL7LJH9' where id=9; -update noar ti set v0='ES5ZL7LJH9' where id=9; -update noar tt set b2='6B5ZRB0LTQB9IXYHQ3P' where id=9; -update noar ti set b2='6B5ZRB0LTQB9IXYHQ3P' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 tinyblob null, -b1 longblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='R9XJ' where id=1; -update noar ti set v0='R9XJ' where id=1; -update noar tt set b0='KMRXCZOCM9CCTFQPOYN4NZ5YMZMWM' where id=1; -update noar ti set b0='KMRXCZOCM9CCTFQPOYN4NZ5YMZMWM' where id=1; -update noar tt set v0='KTH6250' where id=1; -update noar ti set v0='KTH6250' where id=1; -update noar tt set b1='H4X6OT3NHPBEMN61N93' where id=1; -update noar ti set b1='H4X6OT3NHPBEMN61N93' where id=1; -update noar tt set v0='7RJAX' where id=1; -update noar ti set v0='7RJAX' where id=1; -update noar tt set b2='T5F3WWAUQ5EENRJLTK0RBPJPC' where id=1; -update noar ti set b2='T5F3WWAUQ5EENRJLTK0RBPJPC' where id=1; -update noar tt set v0='582VBSGHKIYLXAWCGQ' where id=2; -update noar ti set v0='582VBSGHKIYLXAWCGQ' where id=2; -update noar tt set b0='DCOUYG' where id=2; -update noar ti set b0='DCOUYG' where id=2; -update noar tt set v0='KZLPM7N3EQ6IGCOBXRHVYNG2R3F' where id=2; -update noar ti set v0='KZLPM7N3EQ6IGCOBXRHVYNG2R3F' where id=2; -update noar tt set b1='CO4DJ0GL' where id=2; -update noar ti set b1='CO4DJ0GL' where id=2; -update noar tt set v0='WQMQHIB' where id=2; -update noar ti set v0='WQMQHIB' where id=2; -update noar tt set b2='JP4LB602M3VFDAES2SXWQFB1AWP94' where id=2; -update noar ti set b2='JP4LB602M3VFDAES2SXWQFB1AWP94' where id=2; -update noar tt set v0='NTIWNJ2BESJMS0EWO52Z' where id=3; -update noar ti set v0='NTIWNJ2BESJMS0EWO52Z' where id=3; -update noar tt set b0='WTVHFKBQ55OQKT' where id=3; -update noar ti set b0='WTVHFKBQ55OQKT' where id=3; -update noar tt set v0='YOODDDKQMKYSB6O0H6FUE9' where id=3; -update noar ti set v0='YOODDDKQMKYSB6O0H6FUE9' where id=3; -update noar tt set b1='DQM7LK92XMAPWEITZ7P' where id=3; -update noar ti set b1='DQM7LK92XMAPWEITZ7P' where id=3; -update noar tt set v0='DUHUEZNQ8KPKEU2S6X8AA5XL' where id=3; -update noar ti set v0='DUHUEZNQ8KPKEU2S6X8AA5XL' where id=3; -update noar tt set b2='O0A093X6CD3B' where id=3; -update noar ti set b2='O0A093X6CD3B' where id=3; -update noar tt set v0='6Y412YH5' where id=4; -update noar ti set v0='6Y412YH5' where id=4; -update noar tt set b0='OI5R' where id=4; -update noar ti set b0='OI5R' where id=4; -update noar tt set v0='D4KOUWKIFRN5G1UYF4DJ6EQ' where id=4; -update noar ti set v0='D4KOUWKIFRN5G1UYF4DJ6EQ' where id=4; -update noar tt set b1='KV3M8Z' where id=4; -update noar ti set b1='KV3M8Z' where id=4; -update noar tt set v0='MLMDVQTO8' where id=4; -update noar ti set v0='MLMDVQTO8' where id=4; -update noar tt set b2='JOUR2WZYYEYLPZZP9N29SUXSSOL' where id=4; -update noar ti set b2='JOUR2WZYYEYLPZZP9N29SUXSSOL' where id=4; -update noar tt set v0='LQH97ZQD7R27MMN00GC61U3MJF8' where id=5; -update noar ti set v0='LQH97ZQD7R27MMN00GC61U3MJF8' where id=5; -update noar tt set b0='NA' where id=5; -update noar ti set b0='NA' where id=5; -update noar tt set v0='9ONAZCZEA059HWXA1AOEPGBMGV5LWJV' where id=5; -update noar ti set v0='9ONAZCZEA059HWXA1AOEPGBMGV5LWJV' where id=5; -update noar tt set b1='H90T2S7XJ582TWIVRT' where id=5; -update noar ti set b1='H90T2S7XJ582TWIVRT' where id=5; -update noar tt set v0='VJOCXH0DLSJQFZ40LXG72MYOLH2DJ' where id=5; -update noar ti set v0='VJOCXH0DLSJQFZ40LXG72MYOLH2DJ' where id=5; -update noar tt set b2='M376NNX37GMSEK37ZFTZFSA4OOD0IXM7' where id=5; -update noar ti set b2='M376NNX37GMSEK37ZFTZFSA4OOD0IXM7' where id=5; -update noar tt set v0='GE9KK0DHSLDSWJ7HE5AXLE' where id=6; -update noar ti set v0='GE9KK0DHSLDSWJ7HE5AXLE' where id=6; -update noar tt set b0='NIA8K4T3D3SE4VI' where id=6; -update noar ti set b0='NIA8K4T3D3SE4VI' where id=6; -update noar tt set v0='3QND0CO15NPYM99' where id=6; -update noar ti set v0='3QND0CO15NPYM99' where id=6; -update noar tt set b1='IP' where id=6; -update noar ti set b1='IP' where id=6; -update noar tt set v0='QML67BO3LURAFJYLVFU2W4LHSUOU' where id=6; -update noar ti set v0='QML67BO3LURAFJYLVFU2W4LHSUOU' where id=6; -update noar tt set b2='55MAN5UDFZS80WQ0KS6WEJVVPT' where id=6; -update noar ti set b2='55MAN5UDFZS80WQ0KS6WEJVVPT' where id=6; -update noar tt set v0='0Y' where id=7; -update noar ti set v0='0Y' where id=7; -update noar tt set b0='EOQP5FNQO42LR1OXT2TF7OIT33X' where id=7; -update noar ti set b0='EOQP5FNQO42LR1OXT2TF7OIT33X' where id=7; -update noar tt set v0='FGKLRHEABY' where id=7; -update noar ti set v0='FGKLRHEABY' where id=7; -update noar tt set b1='ZP2IHOJ1' where id=7; -update noar ti set b1='ZP2IHOJ1' where id=7; -update noar tt set v0='NHW' where id=7; -update noar ti set v0='NHW' where id=7; -update noar tt set b2='PV13G6' where id=7; -update noar ti set b2='PV13G6' where id=7; -update noar tt set v0='34I0M2RDRP9DPKIJBZQQ8W1SYKEKEYW' where id=8; -update noar ti set v0='34I0M2RDRP9DPKIJBZQQ8W1SYKEKEYW' where id=8; -update noar tt set b0='2S2YNRSHG' where id=8; -update noar ti set b0='2S2YNRSHG' where id=8; -update noar tt set v0='TDED4Y6FQ3G' where id=8; -update noar ti set v0='TDED4Y6FQ3G' where id=8; -update noar tt set b1='CVU3BI1R1EJMDHQHGHHDDRUXM6IBN52V' where id=8; -update noar ti set b1='CVU3BI1R1EJMDHQHGHHDDRUXM6IBN52V' where id=8; -update noar tt set v0='M2I11JZJVBYA1A' where id=8; -update noar ti set v0='M2I11JZJVBYA1A' where id=8; -update noar tt set b2='BVX' where id=8; -update noar ti set b2='BVX' where id=8; -update noar tt set v0='29E75JA4DD4OIWDLM89WY5G3A89MU' where id=9; -update noar ti set v0='29E75JA4DD4OIWDLM89WY5G3A89MU' where id=9; -update noar tt set b0='CJTBX718EQ3KF0HBR349BME5FNVH3W' where id=9; -update noar ti set b0='CJTBX718EQ3KF0HBR349BME5FNVH3W' where id=9; -update noar tt set v0='J3FRX8ALOI3NXDJBQFZQOIBND0O' where id=9; -update noar ti set v0='J3FRX8ALOI3NXDJBQFZQOIBND0O' where id=9; -update noar tt set b1='5UR' where id=9; -update noar ti set b1='5UR' where id=9; -update noar tt set v0='JG' where id=9; -update noar ti set v0='JG' where id=9; -update noar tt set b2='W0HBGNHRNQ2Y1KGZ9' where id=9; -update noar ti set b2='W0HBGNHRNQ2Y1KGZ9' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 tinyblob not null, -b1 longblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='AIF91B8I' where id=1; -update noar ti set v0='AIF91B8I' where id=1; -update noar tt set b0='P2UWJAJ0UED' where id=1; -update noar ti set b0='P2UWJAJ0UED' where id=1; -update noar tt set v0='J6QQ9R' where id=1; -update noar ti set v0='J6QQ9R' where id=1; -update noar tt set b1='YBED' where id=1; -update noar ti set b1='YBED' where id=1; -update noar tt set v0='UEWRT5VCKRF1HM0EBG0JMSQTBG8A0ZI' where id=1; -update noar ti set v0='UEWRT5VCKRF1HM0EBG0JMSQTBG8A0ZI' where id=1; -update noar tt set b2='O5OV2' where id=1; -update noar ti set b2='O5OV2' where id=1; -update noar tt set v0='O1' where id=2; -update noar ti set v0='O1' where id=2; -update noar tt set b0='9U2S7WHR' where id=2; -update noar ti set b0='9U2S7WHR' where id=2; -update noar tt set v0='1FTCQ8GJA4RPYMS4OD4' where id=2; -update noar ti set v0='1FTCQ8GJA4RPYMS4OD4' where id=2; -update noar tt set b1='KJPEE7FZFBOP' where id=2; -update noar ti set b1='KJPEE7FZFBOP' where id=2; -update noar tt set v0='LDG5XLKUOWKVFPJNVMD4LTH' where id=2; -update noar ti set v0='LDG5XLKUOWKVFPJNVMD4LTH' where id=2; -update noar tt set b2='HGVBH7BM7JLHA26OPT1T' where id=2; -update noar ti set b2='HGVBH7BM7JLHA26OPT1T' where id=2; -update noar tt set v0='C22A6R7' where id=3; -update noar ti set v0='C22A6R7' where id=3; -update noar tt set b0='NUR511QMVKB5S06P94O' where id=3; -update noar ti set b0='NUR511QMVKB5S06P94O' where id=3; -update noar tt set v0='JHF01LEAU68T5E8ROL' where id=3; -update noar ti set v0='JHF01LEAU68T5E8ROL' where id=3; -update noar tt set b1='885KWQCUQAVBTJU' where id=3; -update noar ti set b1='885KWQCUQAVBTJU' where id=3; -update noar tt set v0='25YFTYUNIX16VC16' where id=3; -update noar ti set v0='25YFTYUNIX16VC16' where id=3; -update noar tt set b2='FKP' where id=3; -update noar ti set b2='FKP' where id=3; -update noar tt set v0='W5WF3UWG0QH8XE' where id=4; -update noar ti set v0='W5WF3UWG0QH8XE' where id=4; -update noar tt set b0='9ZXNEUHITKC5GV' where id=4; -update noar ti set b0='9ZXNEUHITKC5GV' where id=4; -update noar tt set v0='4U3STH13QWX4KJBH2H4ESLWD16R' where id=4; -update noar ti set v0='4U3STH13QWX4KJBH2H4ESLWD16R' where id=4; -update noar tt set b1='FL3X8OR7FL72ETW68X1WYBXP' where id=4; -update noar ti set b1='FL3X8OR7FL72ETW68X1WYBXP' where id=4; -update noar tt set v0='7YFAM8NB9W2AU7N2ZPKJML860W6' where id=4; -update noar ti set v0='7YFAM8NB9W2AU7N2ZPKJML860W6' where id=4; -update noar tt set b2='WYA3P4NWIZ3OCBD' where id=4; -update noar ti set b2='WYA3P4NWIZ3OCBD' where id=4; -update noar tt set v0='4K76' where id=5; -update noar ti set v0='4K76' where id=5; -update noar tt set b0='SPTB4PQKL4725I' where id=5; -update noar ti set b0='SPTB4PQKL4725I' where id=5; -update noar tt set v0='0D7BH1R5PTEVZEJFKKHG8NQ5WEIG0' where id=5; -update noar ti set v0='0D7BH1R5PTEVZEJFKKHG8NQ5WEIG0' where id=5; -update noar tt set b1='BYL' where id=5; -update noar ti set b1='BYL' where id=5; -update noar tt set v0='1FH05SBTE4GCF8' where id=5; -update noar ti set v0='1FH05SBTE4GCF8' where id=5; -update noar tt set b2='17TQK2XOQJ' where id=5; -update noar ti set b2='17TQK2XOQJ' where id=5; -update noar tt set v0='B0SU9OUYUBL74M2KW3' where id=6; -update noar ti set v0='B0SU9OUYUBL74M2KW3' where id=6; -update noar tt set b0='E90XVMXNKUMC6A7RZ0USPOUQC3KQ8G9K' where id=6; -update noar ti set b0='E90XVMXNKUMC6A7RZ0USPOUQC3KQ8G9K' where id=6; -update noar tt set v0='IJKJCI' where id=6; -update noar ti set v0='IJKJCI' where id=6; -update noar tt set b1='C' where id=6; -update noar ti set b1='C' where id=6; -update noar tt set v0='0E9OBY3RZ3LOZ30S8WSK2HGT' where id=6; -update noar ti set v0='0E9OBY3RZ3LOZ30S8WSK2HGT' where id=6; -update noar tt set b2='5H78U5R' where id=6; -update noar ti set b2='5H78U5R' where id=6; -update noar tt set v0='3YHAD0184TOSB' where id=7; -update noar ti set v0='3YHAD0184TOSB' where id=7; -update noar tt set b0='2T9QEPPNKQYGRML8VG0E6RB82FVX4XTR' where id=7; -update noar ti set b0='2T9QEPPNKQYGRML8VG0E6RB82FVX4XTR' where id=7; -update noar tt set v0='HXV8' where id=7; -update noar ti set v0='HXV8' where id=7; -update noar tt set b1='35TE6T343DPM3QKONCDW' where id=7; -update noar ti set b1='35TE6T343DPM3QKONCDW' where id=7; -update noar tt set v0='AX9QMIZZXIK3TC5E208I' where id=7; -update noar ti set v0='AX9QMIZZXIK3TC5E208I' where id=7; -update noar tt set b2='9TBNOLSB59ACW48L8S' where id=7; -update noar ti set b2='9TBNOLSB59ACW48L8S' where id=7; -update noar tt set v0='CTMXL39WHZ' where id=8; -update noar ti set v0='CTMXL39WHZ' where id=8; -update noar tt set b0='IW9AR7R473ZH6QTD2' where id=8; -update noar ti set b0='IW9AR7R473ZH6QTD2' where id=8; -update noar tt set v0='KY3JNL3GNN0G3T0' where id=8; -update noar ti set v0='KY3JNL3GNN0G3T0' where id=8; -update noar tt set b1='NE0N0NHLYX8ZLZ6YOF6U4' where id=8; -update noar ti set b1='NE0N0NHLYX8ZLZ6YOF6U4' where id=8; -update noar tt set v0='JPBW87M0Q0OVH8C51' where id=8; -update noar ti set v0='JPBW87M0Q0OVH8C51' where id=8; -update noar tt set b2='N857' where id=8; -update noar ti set b2='N857' where id=8; -update noar tt set v0='MGIK8JFIS' where id=9; -update noar ti set v0='MGIK8JFIS' where id=9; -update noar tt set b0='P4CEW8QJQCIHO45L7RXZDXRM' where id=9; -update noar ti set b0='P4CEW8QJQCIHO45L7RXZDXRM' where id=9; -update noar tt set v0='AHBTVPEJ' where id=9; -update noar ti set v0='AHBTVPEJ' where id=9; -update noar tt set b1='DI9SMHZZ02SZ' where id=9; -update noar ti set b1='DI9SMHZZ02SZ' where id=9; -update noar tt set v0='JB67SJHVA6LH' where id=9; -update noar ti set v0='JB67SJHVA6LH' where id=9; -update noar tt set b2='V47N8B3LMR25SSQCVTG3Y9RIH9J' where id=9; -update noar ti set b2='V47N8B3LMR25SSQCVTG3Y9RIH9J' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 tinyblob not null, -b1 longblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='8MO6YNMF4G45RQTC3I' where id=1; -update noar ti set v0='8MO6YNMF4G45RQTC3I' where id=1; -update noar tt set b0='FI' where id=1; -update noar ti set b0='FI' where id=1; -update noar tt set v0='T81M35RVQ1S6AMW1IW' where id=1; -update noar ti set v0='T81M35RVQ1S6AMW1IW' where id=1; -update noar tt set b1='Z2H2H' where id=1; -update noar ti set b1='Z2H2H' where id=1; -update noar tt set v0='JK7Y5OACOH4P88F3' where id=1; -update noar ti set v0='JK7Y5OACOH4P88F3' where id=1; -update noar tt set b2='QVNMR' where id=1; -update noar ti set b2='QVNMR' where id=1; -update noar tt set v0='MAG6J0MKJG' where id=2; -update noar ti set v0='MAG6J0MKJG' where id=2; -update noar tt set b0='QSMS5EFAQD2BBM' where id=2; -update noar ti set b0='QSMS5EFAQD2BBM' where id=2; -update noar tt set v0='Q6Y3B7CDEBESRJRWOKAQX' where id=2; -update noar ti set v0='Q6Y3B7CDEBESRJRWOKAQX' where id=2; -update noar tt set b1='ABMFG5858RP' where id=2; -update noar ti set b1='ABMFG5858RP' where id=2; -update noar tt set v0='JHISSD4RO3YUJS9SZS8ZQZFNO' where id=2; -update noar ti set v0='JHISSD4RO3YUJS9SZS8ZQZFNO' where id=2; -update noar tt set b2='OTH01L' where id=2; -update noar ti set b2='OTH01L' where id=2; -update noar tt set v0='RIQFIC6CJ7OIAU56' where id=3; -update noar ti set v0='RIQFIC6CJ7OIAU56' where id=3; -update noar tt set b0='IRFILLHGK0UQUTHH1BQBNQH9WDFM0' where id=3; -update noar ti set b0='IRFILLHGK0UQUTHH1BQBNQH9WDFM0' where id=3; -update noar tt set v0='37PTZ47CJHT' where id=3; -update noar ti set v0='37PTZ47CJHT' where id=3; -update noar tt set b1='YTS4WCLS68SW3IVZRD588CEIUD' where id=3; -update noar ti set b1='YTS4WCLS68SW3IVZRD588CEIUD' where id=3; -update noar tt set v0='0CAQ3PDNPQI7S3U6ZYVJ76PK23B1UERZ' where id=3; -update noar ti set v0='0CAQ3PDNPQI7S3U6ZYVJ76PK23B1UERZ' where id=3; -update noar tt set b2='64B6J0D112DX0RC7M7' where id=3; -update noar ti set b2='64B6J0D112DX0RC7M7' where id=3; -update noar tt set v0='EOJHMGQD' where id=4; -update noar ti set v0='EOJHMGQD' where id=4; -update noar tt set b0='HP4OXIIEYBHMQW6C3JP' where id=4; -update noar ti set b0='HP4OXIIEYBHMQW6C3JP' where id=4; -update noar tt set v0='G513IT5' where id=4; -update noar ti set v0='G513IT5' where id=4; -update noar tt set b1='GNYDJF5RHXED4A9' where id=4; -update noar ti set b1='GNYDJF5RHXED4A9' where id=4; -update noar tt set v0='M8TQCFMZO' where id=4; -update noar ti set v0='M8TQCFMZO' where id=4; -update noar tt set b2='41A8EPTG' where id=4; -update noar ti set b2='41A8EPTG' where id=4; -update noar tt set v0='J6YEZ2JWQRKARZ' where id=5; -update noar ti set v0='J6YEZ2JWQRKARZ' where id=5; -update noar tt set b0='C25XBXISTIKLN42MIJ21IKZB' where id=5; -update noar ti set b0='C25XBXISTIKLN42MIJ21IKZB' where id=5; -update noar tt set v0='HETVUGVXQVI6L7LCDUR8PPW' where id=5; -update noar ti set v0='HETVUGVXQVI6L7LCDUR8PPW' where id=5; -update noar tt set b1='7X312CKU58' where id=5; -update noar ti set b1='7X312CKU58' where id=5; -update noar tt set v0='ZCMAZBL3BWYQDHS407' where id=5; -update noar ti set v0='ZCMAZBL3BWYQDHS407' where id=5; -update noar tt set b2='F3U' where id=5; -update noar ti set b2='F3U' where id=5; -update noar tt set v0='3JKGKCE9LSRR07VBM3AVB6MVH' where id=6; -update noar ti set v0='3JKGKCE9LSRR07VBM3AVB6MVH' where id=6; -update noar tt set b0='DIIM6B7E3WM97D4Z6GUKTEIB5DPQP' where id=6; -update noar ti set b0='DIIM6B7E3WM97D4Z6GUKTEIB5DPQP' where id=6; -update noar tt set v0='8XZPOHU1NNSKLY8VWSZ6STZQWH82S1' where id=6; -update noar ti set v0='8XZPOHU1NNSKLY8VWSZ6STZQWH82S1' where id=6; -update noar tt set b1='8HNU2OK9ZK7N0' where id=6; -update noar ti set b1='8HNU2OK9ZK7N0' where id=6; -update noar tt set v0='L' where id=6; -update noar ti set v0='L' where id=6; -update noar tt set b2='2JYO0DACMLSG65Q4LX4K88XZ' where id=6; -update noar ti set b2='2JYO0DACMLSG65Q4LX4K88XZ' where id=6; -update noar tt set v0='T0LUWPAJ397GQS6UH2DP' where id=7; -update noar ti set v0='T0LUWPAJ397GQS6UH2DP' where id=7; -update noar tt set b0='TRBO6IQ696KOUWNT7DEEZQV9MU6' where id=7; -update noar ti set b0='TRBO6IQ696KOUWNT7DEEZQV9MU6' where id=7; -update noar tt set v0='VYO6FN9XA' where id=7; -update noar ti set v0='VYO6FN9XA' where id=7; -update noar tt set b1='8AGPAKACVH6XY39IFEE13M8CCLVJEG67' where id=7; -update noar ti set b1='8AGPAKACVH6XY39IFEE13M8CCLVJEG67' where id=7; -update noar tt set v0='2BT' where id=7; -update noar ti set v0='2BT' where id=7; -update noar tt set b2='P78ZDR3UWGSLUMC' where id=7; -update noar ti set b2='P78ZDR3UWGSLUMC' where id=7; -update noar tt set v0='0HBKGK0MYI5YS7TZJP5HN5M8J' where id=8; -update noar ti set v0='0HBKGK0MYI5YS7TZJP5HN5M8J' where id=8; -update noar tt set b0='UQE' where id=8; -update noar ti set b0='UQE' where id=8; -update noar tt set v0='0V16JMLMZKIVGTECUB9AKXRFI45CHG' where id=8; -update noar ti set v0='0V16JMLMZKIVGTECUB9AKXRFI45CHG' where id=8; -update noar tt set b1='MZ1WGZWEE7D1OMVCG5QXY7' where id=8; -update noar ti set b1='MZ1WGZWEE7D1OMVCG5QXY7' where id=8; -update noar tt set v0='HL631EGBYYUZTIOFY1IYMHLXI0M7J5E' where id=8; -update noar ti set v0='HL631EGBYYUZTIOFY1IYMHLXI0M7J5E' where id=8; -update noar tt set b2='34' where id=8; -update noar ti set b2='34' where id=8; -update noar tt set v0='99KKEAX5DK52J6KT85OAN43N5D3E' where id=9; -update noar ti set v0='99KKEAX5DK52J6KT85OAN43N5D3E' where id=9; -update noar tt set b0='Y7FW3MVANGFM741' where id=9; -update noar ti set b0='Y7FW3MVANGFM741' where id=9; -update noar tt set v0='SJ6AE8DTMNQH7PJ97UZ0CEMATX' where id=9; -update noar ti set v0='SJ6AE8DTMNQH7PJ97UZ0CEMATX' where id=9; -update noar tt set b1='OJSZ27FL3SUM4WF2CBS4ZG377INPVFF' where id=9; -update noar ti set b1='OJSZ27FL3SUM4WF2CBS4ZG377INPVFF' where id=9; -update noar tt set v0='2YN5' where id=9; -update noar ti set v0='2YN5' where id=9; -update noar tt set b2='LZBLWUS4PUX20NG26XLUEUJ32BK4W' where id=9; -update noar ti set b2='LZBLWUS4PUX20NG26XLUEUJ32BK4W' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 blob null, -b1 tinyblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='VB9VCSDEOZGB' where id=1; -update noar ti set v0='VB9VCSDEOZGB' where id=1; -update noar tt set b0='HL4UG894D7NH55JN' where id=1; -update noar ti set b0='HL4UG894D7NH55JN' where id=1; -update noar tt set v0='F9FX43JX3U8XOZ5THGMX0J' where id=1; -update noar ti set v0='F9FX43JX3U8XOZ5THGMX0J' where id=1; -update noar tt set b1='4LVOBI4A4' where id=1; -update noar ti set b1='4LVOBI4A4' where id=1; -update noar tt set v0='XI2P3B7014HJASP6Z49VSNQSHDTZ4' where id=1; -update noar ti set v0='XI2P3B7014HJASP6Z49VSNQSHDTZ4' where id=1; -update noar tt set b2='G38ET' where id=1; -update noar ti set b2='G38ET' where id=1; -update noar tt set v0='5G42ONQ4T3GPAP0ZNFK24X76E0BV6VK' where id=2; -update noar ti set v0='5G42ONQ4T3GPAP0ZNFK24X76E0BV6VK' where id=2; -update noar tt set b0='3THMOQ8R6GIAKDJV' where id=2; -update noar ti set b0='3THMOQ8R6GIAKDJV' where id=2; -update noar tt set v0='XQIN0TIQTETOM3UNN6DJ9O4MBP' where id=2; -update noar ti set v0='XQIN0TIQTETOM3UNN6DJ9O4MBP' where id=2; -update noar tt set b1='WYSVDM7DD225L2MU3HSOHR94V6CXYJM' where id=2; -update noar ti set b1='WYSVDM7DD225L2MU3HSOHR94V6CXYJM' where id=2; -update noar tt set v0='LYE1U2C8I4C0O8MPP5038CG3' where id=2; -update noar ti set v0='LYE1U2C8I4C0O8MPP5038CG3' where id=2; -update noar tt set b2='E06O5FLZYKJ' where id=2; -update noar ti set b2='E06O5FLZYKJ' where id=2; -update noar tt set v0='M3YZZ7OFQ0D8V20KSGH' where id=3; -update noar ti set v0='M3YZZ7OFQ0D8V20KSGH' where id=3; -update noar tt set b0='MF48EAYMLRJZN' where id=3; -update noar ti set b0='MF48EAYMLRJZN' where id=3; -update noar tt set v0='H9ZMA950T1G3VET3F' where id=3; -update noar ti set v0='H9ZMA950T1G3VET3F' where id=3; -update noar tt set b1='3E7290K9K' where id=3; -update noar ti set b1='3E7290K9K' where id=3; -update noar tt set v0='YYQIRJUKY1SOVFBY20LNM6542Q' where id=3; -update noar ti set v0='YYQIRJUKY1SOVFBY20LNM6542Q' where id=3; -update noar tt set b2='MXDII1D1GBA' where id=3; -update noar ti set b2='MXDII1D1GBA' where id=3; -update noar tt set v0='8CJ576M0H8QMH' where id=4; -update noar ti set v0='8CJ576M0H8QMH' where id=4; -update noar tt set b0='5IVE3LO3JK0VQ0G89XOIULKC' where id=4; -update noar ti set b0='5IVE3LO3JK0VQ0G89XOIULKC' where id=4; -update noar tt set v0='X1OIUBPNS953C032RGF3SLC0QU0' where id=4; -update noar ti set v0='X1OIUBPNS953C032RGF3SLC0QU0' where id=4; -update noar tt set b1='MP5UM38MPXK2STK' where id=4; -update noar ti set b1='MP5UM38MPXK2STK' where id=4; -update noar tt set v0='MLKHT3MJ2S6BAYDW7MWIL0N' where id=4; -update noar ti set v0='MLKHT3MJ2S6BAYDW7MWIL0N' where id=4; -update noar tt set b2='7IALJFG3XHVNL425L9' where id=4; -update noar ti set b2='7IALJFG3XHVNL425L9' where id=4; -update noar tt set v0='OSB0DLZCQT40J73MKK2UMHERMVZLBY' where id=5; -update noar ti set v0='OSB0DLZCQT40J73MKK2UMHERMVZLBY' where id=5; -update noar tt set b0='NUZ4W' where id=5; -update noar ti set b0='NUZ4W' where id=5; -update noar tt set v0='OZL5HGH' where id=5; -update noar ti set v0='OZL5HGH' where id=5; -update noar tt set b1='921PJH0CYQK2SZVC2GOKX3E2VFSCI' where id=5; -update noar ti set b1='921PJH0CYQK2SZVC2GOKX3E2VFSCI' where id=5; -update noar tt set v0='9E8VH1BSSJFRPCX' where id=5; -update noar ti set v0='9E8VH1BSSJFRPCX' where id=5; -update noar tt set b2='RHXFGC8CU3Q74AGSZV6D6M81TQOE' where id=5; -update noar ti set b2='RHXFGC8CU3Q74AGSZV6D6M81TQOE' where id=5; -update noar tt set v0='CFCTGV0XCINNS3' where id=6; -update noar ti set v0='CFCTGV0XCINNS3' where id=6; -update noar tt set b0='UYWAFGW51ZT6DOV4DGPZY7YEXL3' where id=6; -update noar ti set b0='UYWAFGW51ZT6DOV4DGPZY7YEXL3' where id=6; -update noar tt set v0='31RUMYEKQP8DP6' where id=6; -update noar ti set v0='31RUMYEKQP8DP6' where id=6; -update noar tt set b1='6LQ6ADET6QOFM77P5VY4G7RG5AOTM' where id=6; -update noar ti set b1='6LQ6ADET6QOFM77P5VY4G7RG5AOTM' where id=6; -update noar tt set v0='L' where id=6; -update noar ti set v0='L' where id=6; -update noar tt set b2='MLNOHEW46RD992HUWPJ4M05DTVGPBCF' where id=6; -update noar ti set b2='MLNOHEW46RD992HUWPJ4M05DTVGPBCF' where id=6; -update noar tt set v0='89' where id=7; -update noar ti set v0='89' where id=7; -update noar tt set b0='6PNIO8U5Z5D8HX8MRPY' where id=7; -update noar ti set b0='6PNIO8U5Z5D8HX8MRPY' where id=7; -update noar tt set v0='BEEKBP75ZV' where id=7; -update noar ti set v0='BEEKBP75ZV' where id=7; -update noar tt set b1='KX4KW7ITSMEUI' where id=7; -update noar ti set b1='KX4KW7ITSMEUI' where id=7; -update noar tt set v0='WPKG8AH0E1BC3' where id=7; -update noar ti set v0='WPKG8AH0E1BC3' where id=7; -update noar tt set b2='0ASK8I' where id=7; -update noar ti set b2='0ASK8I' where id=7; -update noar tt set v0='KP5WBAZDYXPWK0ZYIQ8NGW' where id=8; -update noar ti set v0='KP5WBAZDYXPWK0ZYIQ8NGW' where id=8; -update noar tt set b0='JK4YSH' where id=8; -update noar ti set b0='JK4YSH' where id=8; -update noar tt set v0='EP6TMUOZF2G3VHEN1AK73WGCC0O' where id=8; -update noar ti set v0='EP6TMUOZF2G3VHEN1AK73WGCC0O' where id=8; -update noar tt set b1='0CNHFOIMCSAH6N5WC76O' where id=8; -update noar ti set b1='0CNHFOIMCSAH6N5WC76O' where id=8; -update noar tt set v0='COGP2V' where id=8; -update noar ti set v0='COGP2V' where id=8; -update noar tt set b2='1LHL8D0R2' where id=8; -update noar ti set b2='1LHL8D0R2' where id=8; -update noar tt set v0='MG0QN6O9GXKC9U4' where id=9; -update noar ti set v0='MG0QN6O9GXKC9U4' where id=9; -update noar tt set b0='5HMOVA4IOM8KYC93FVVAK' where id=9; -update noar ti set b0='5HMOVA4IOM8KYC93FVVAK' where id=9; -update noar tt set v0='IGIDY4S17H2E713NX8BLYJIKU' where id=9; -update noar ti set v0='IGIDY4S17H2E713NX8BLYJIKU' where id=9; -update noar tt set b1='WGQGMS74E5LTWFH0UK9IQB' where id=9; -update noar ti set b1='WGQGMS74E5LTWFH0UK9IQB' where id=9; -update noar tt set v0='9NPY0F2CE90FDCXQ2' where id=9; -update noar ti set v0='9NPY0F2CE90FDCXQ2' where id=9; -update noar tt set b2='WQ6HZE55JF1U94SLTM1WFG977C9U5' where id=9; -update noar ti set b2='WQ6HZE55JF1U94SLTM1WFG977C9U5' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 blob null, -b1 tinyblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='N7E6COS3EUNQLBY81ZAELA2EPHU' where id=1; -update noar ti set v0='N7E6COS3EUNQLBY81ZAELA2EPHU' where id=1; -update noar tt set b0='76IFCKLZMRFZPE1D18STTXU4PSXZ' where id=1; -update noar ti set b0='76IFCKLZMRFZPE1D18STTXU4PSXZ' where id=1; -update noar tt set v0='RJ79HCDNZ33RI542OQLT' where id=1; -update noar ti set v0='RJ79HCDNZ33RI542OQLT' where id=1; -update noar tt set b1='F7CB6G8WD' where id=1; -update noar ti set b1='F7CB6G8WD' where id=1; -update noar tt set v0='X' where id=1; -update noar ti set v0='X' where id=1; -update noar tt set b2='QI54OISB1OFCREUZJD' where id=1; -update noar ti set b2='QI54OISB1OFCREUZJD' where id=1; -update noar tt set v0='K0FGJY8S074MY' where id=2; -update noar ti set v0='K0FGJY8S074MY' where id=2; -update noar tt set b0='OVFHK' where id=2; -update noar ti set b0='OVFHK' where id=2; -update noar tt set v0='71UW3HFXHM3TYKT767GY7I2EMYSZTBLM' where id=2; -update noar ti set v0='71UW3HFXHM3TYKT767GY7I2EMYSZTBLM' where id=2; -update noar tt set b1='BHTNWKY' where id=2; -update noar ti set b1='BHTNWKY' where id=2; -update noar tt set v0='P6WCXP836TZUHPHWV' where id=2; -update noar ti set v0='P6WCXP836TZUHPHWV' where id=2; -update noar tt set b2='T7GX7I5H67A4GSNWA9R1FQEQWWYC9E' where id=2; -update noar ti set b2='T7GX7I5H67A4GSNWA9R1FQEQWWYC9E' where id=2; -update noar tt set v0='NSTMC02Y5ZV49FTOYM95VEZLAN' where id=3; -update noar ti set v0='NSTMC02Y5ZV49FTOYM95VEZLAN' where id=3; -update noar tt set b0='YMXTW' where id=3; -update noar ti set b0='YMXTW' where id=3; -update noar tt set v0='PYKA2J2T2ZSH7R18TG41P20489P' where id=3; -update noar ti set v0='PYKA2J2T2ZSH7R18TG41P20489P' where id=3; -update noar tt set b1='OP33O737EABX5EL2RWC81EHUDKKSCH08' where id=3; -update noar ti set b1='OP33O737EABX5EL2RWC81EHUDKKSCH08' where id=3; -update noar tt set v0='FEM' where id=3; -update noar ti set v0='FEM' where id=3; -update noar tt set b2='GUJLWW6Y1K2M9U8KD1' where id=3; -update noar ti set b2='GUJLWW6Y1K2M9U8KD1' where id=3; -update noar tt set v0='DQVDBYSPFPPFGSA2V9IZ45KT8P4646N' where id=4; -update noar ti set v0='DQVDBYSPFPPFGSA2V9IZ45KT8P4646N' where id=4; -update noar tt set b0='G1KGJBSO45DSLLRCW10MWPFL3LU' where id=4; -update noar ti set b0='G1KGJBSO45DSLLRCW10MWPFL3LU' where id=4; -update noar tt set v0='2HQFO2AMOW90SBSA75T2H4' where id=4; -update noar ti set v0='2HQFO2AMOW90SBSA75T2H4' where id=4; -update noar tt set b1='HOPQ5J' where id=4; -update noar ti set b1='HOPQ5J' where id=4; -update noar tt set v0='AUQML2Y' where id=4; -update noar ti set v0='AUQML2Y' where id=4; -update noar tt set b2='I' where id=4; -update noar ti set b2='I' where id=4; -update noar tt set v0='MXNQX2W' where id=5; -update noar ti set v0='MXNQX2W' where id=5; -update noar tt set b0='7BFBOVSRJC2H2IESLQUQF' where id=5; -update noar ti set b0='7BFBOVSRJC2H2IESLQUQF' where id=5; -update noar tt set v0='ZG72C7J3LDFLVBDL7AT79EIKRO9RLAN' where id=5; -update noar ti set v0='ZG72C7J3LDFLVBDL7AT79EIKRO9RLAN' where id=5; -update noar tt set b1='NHJ1G4V12GX044STM3NR' where id=5; -update noar ti set b1='NHJ1G4V12GX044STM3NR' where id=5; -update noar tt set v0='QJ' where id=5; -update noar ti set v0='QJ' where id=5; -update noar tt set b2='524GMGU8O84A9C0DVHV4KR2HW' where id=5; -update noar ti set b2='524GMGU8O84A9C0DVHV4KR2HW' where id=5; -update noar tt set v0='LP5D1W' where id=6; -update noar ti set v0='LP5D1W' where id=6; -update noar tt set b0='F9A3UQNPJOPUB4X2SF03' where id=6; -update noar ti set b0='F9A3UQNPJOPUB4X2SF03' where id=6; -update noar tt set v0='1QF66XQX5451SQN8DTSIEIHL8YRY' where id=6; -update noar ti set v0='1QF66XQX5451SQN8DTSIEIHL8YRY' where id=6; -update noar tt set b1='MO' where id=6; -update noar ti set b1='MO' where id=6; -update noar tt set v0='LVOCQCCATPTB' where id=6; -update noar ti set v0='LVOCQCCATPTB' where id=6; -update noar tt set b2='FN284L6E4YQ' where id=6; -update noar ti set b2='FN284L6E4YQ' where id=6; -update noar tt set v0='LKXQ264A3WXZT4TT81NXG5LYJ8VJVX' where id=7; -update noar ti set v0='LKXQ264A3WXZT4TT81NXG5LYJ8VJVX' where id=7; -update noar tt set b0='8GZX15BGW' where id=7; -update noar ti set b0='8GZX15BGW' where id=7; -update noar tt set v0='WX8J2M4HLDWIKZGB9GL1VFWPAGVBE1X' where id=7; -update noar ti set v0='WX8J2M4HLDWIKZGB9GL1VFWPAGVBE1X' where id=7; -update noar tt set b1='M9QQHIDLMPET89CXFMUZ9IO00A' where id=7; -update noar ti set b1='M9QQHIDLMPET89CXFMUZ9IO00A' where id=7; -update noar tt set v0='JZB9KBPXHQOXRB2PS6' where id=7; -update noar ti set v0='JZB9KBPXHQOXRB2PS6' where id=7; -update noar tt set b2='DCTT48' where id=7; -update noar ti set b2='DCTT48' where id=7; -update noar tt set v0='RN8BID43CASG' where id=8; -update noar ti set v0='RN8BID43CASG' where id=8; -update noar tt set b0='J4SK8LAYHUNZS8W703G7LEQEZ518HE' where id=8; -update noar ti set b0='J4SK8LAYHUNZS8W703G7LEQEZ518HE' where id=8; -update noar tt set v0='GAAJ2AG05OH2I3VY2O' where id=8; -update noar ti set v0='GAAJ2AG05OH2I3VY2O' where id=8; -update noar tt set b1='N3G39MG5QWRI5YDZE8AOPDZV' where id=8; -update noar ti set b1='N3G39MG5QWRI5YDZE8AOPDZV' where id=8; -update noar tt set v0='F8' where id=8; -update noar ti set v0='F8' where id=8; -update noar tt set b2='GT8TR3N' where id=8; -update noar ti set b2='GT8TR3N' where id=8; -update noar tt set v0='7KOLAMB5JIR8MZ08QKG1BOMKLJ' where id=9; -update noar ti set v0='7KOLAMB5JIR8MZ08QKG1BOMKLJ' where id=9; -update noar tt set b0='D0L0PLE7' where id=9; -update noar ti set b0='D0L0PLE7' where id=9; -update noar tt set v0='0WNJ6NRCX6JRJ1K0A8G' where id=9; -update noar ti set v0='0WNJ6NRCX6JRJ1K0A8G' where id=9; -update noar tt set b1='AY6JFAPQHA' where id=9; -update noar ti set b1='AY6JFAPQHA' where id=9; -update noar tt set v0='C9JJ1DHB8L7RGOGRVPI' where id=9; -update noar ti set v0='C9JJ1DHB8L7RGOGRVPI' where id=9; -update noar tt set b2='TZ55BT0S1DEX' where id=9; -update noar ti set b2='TZ55BT0S1DEX' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 blob not null, -b1 tinyblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='SL185N' where id=1; -update noar ti set v0='SL185N' where id=1; -update noar tt set b0='JZAXQB45ZMBLD6ET8DBRS' where id=1; -update noar ti set b0='JZAXQB45ZMBLD6ET8DBRS' where id=1; -update noar tt set v0='Q2VXXWV6SZPZ90WRD4GI4PKE8EXXTB' where id=1; -update noar ti set v0='Q2VXXWV6SZPZ90WRD4GI4PKE8EXXTB' where id=1; -update noar tt set b1='7GG0CPT' where id=1; -update noar ti set b1='7GG0CPT' where id=1; -update noar tt set v0='5IQFVMNTQAVJTBSRNBV' where id=1; -update noar ti set v0='5IQFVMNTQAVJTBSRNBV' where id=1; -update noar tt set b2='SAY0VWC3AL' where id=1; -update noar ti set b2='SAY0VWC3AL' where id=1; -update noar tt set v0='7WVDLQT8EQPXGAQ0I1HNLT2P' where id=2; -update noar ti set v0='7WVDLQT8EQPXGAQ0I1HNLT2P' where id=2; -update noar tt set b0='00XKM63N1RRRMC' where id=2; -update noar ti set b0='00XKM63N1RRRMC' where id=2; -update noar tt set v0='MPYS06VCS5' where id=2; -update noar ti set v0='MPYS06VCS5' where id=2; -update noar tt set b1='PE1F6H1N694FZH8AZQWGRXG28HLF7R' where id=2; -update noar ti set b1='PE1F6H1N694FZH8AZQWGRXG28HLF7R' where id=2; -update noar tt set v0='Y1XOVQ' where id=2; -update noar ti set v0='Y1XOVQ' where id=2; -update noar tt set b2='ZPJ0GEHUKVSK5FFPUJK03' where id=2; -update noar ti set b2='ZPJ0GEHUKVSK5FFPUJK03' where id=2; -update noar tt set v0='0US' where id=3; -update noar ti set v0='0US' where id=3; -update noar tt set b0='ZRTQMXSF' where id=3; -update noar ti set b0='ZRTQMXSF' where id=3; -update noar tt set v0='J5H51AX' where id=3; -update noar ti set v0='J5H51AX' where id=3; -update noar tt set b1='0N8K2W2IP97NQHIQF' where id=3; -update noar ti set b1='0N8K2W2IP97NQHIQF' where id=3; -update noar tt set v0='8IZID2V8VF26J' where id=3; -update noar ti set v0='8IZID2V8VF26J' where id=3; -update noar tt set b2='PUTT4OYA6CCVHCTME77GYMAFQOY' where id=3; -update noar ti set b2='PUTT4OYA6CCVHCTME77GYMAFQOY' where id=3; -update noar tt set v0='HSLBG' where id=4; -update noar ti set v0='HSLBG' where id=4; -update noar tt set b0='TSTQ6AUVZD6FW03SUO29I3RM61ZJR' where id=4; -update noar ti set b0='TSTQ6AUVZD6FW03SUO29I3RM61ZJR' where id=4; -update noar tt set v0='JXHR8XFSSPNQPD' where id=4; -update noar ti set v0='JXHR8XFSSPNQPD' where id=4; -update noar tt set b1='DBG7QPTMRNNA4' where id=4; -update noar ti set b1='DBG7QPTMRNNA4' where id=4; -update noar tt set v0='E5' where id=4; -update noar ti set v0='E5' where id=4; -update noar tt set b2='ES6L9UP9K9LYVBANIIMCMP3GVWTHU9' where id=4; -update noar ti set b2='ES6L9UP9K9LYVBANIIMCMP3GVWTHU9' where id=4; -update noar tt set v0='ML4Z1G1JWP0DHEMPEPT' where id=5; -update noar ti set v0='ML4Z1G1JWP0DHEMPEPT' where id=5; -update noar tt set b0='23KLGFMPONT3Y7MT2KL9IA' where id=5; -update noar ti set b0='23KLGFMPONT3Y7MT2KL9IA' where id=5; -update noar tt set v0='R6B0QGILF1MS' where id=5; -update noar ti set v0='R6B0QGILF1MS' where id=5; -update noar tt set b1='AP2N5J' where id=5; -update noar ti set b1='AP2N5J' where id=5; -update noar tt set v0='7PXK20QHITD' where id=5; -update noar ti set v0='7PXK20QHITD' where id=5; -update noar tt set b2='HW4GX0YF5J676RDMLVORGVF5U8MWY3C' where id=5; -update noar ti set b2='HW4GX0YF5J676RDMLVORGVF5U8MWY3C' where id=5; -update noar tt set v0='VFAZLK2ER2PCRAV7' where id=6; -update noar ti set v0='VFAZLK2ER2PCRAV7' where id=6; -update noar tt set b0='2KNPWAHB57NU43EKPPGS6GINQ9TN0W' where id=6; -update noar ti set b0='2KNPWAHB57NU43EKPPGS6GINQ9TN0W' where id=6; -update noar tt set v0='11M7JAMV' where id=6; -update noar ti set v0='11M7JAMV' where id=6; -update noar tt set b1='K7GSY8VJTD78QUSC7S1KF2' where id=6; -update noar ti set b1='K7GSY8VJTD78QUSC7S1KF2' where id=6; -update noar tt set v0='MJKJO5HBC15' where id=6; -update noar ti set v0='MJKJO5HBC15' where id=6; -update noar tt set b2='OA' where id=6; -update noar ti set b2='OA' where id=6; -update noar tt set v0='O' where id=7; -update noar ti set v0='O' where id=7; -update noar tt set b0='CIDTBH61S3EDO6IVTWK3' where id=7; -update noar ti set b0='CIDTBH61S3EDO6IVTWK3' where id=7; -update noar tt set v0='MM15F2JGPB2' where id=7; -update noar ti set v0='MM15F2JGPB2' where id=7; -update noar tt set b1='6BFA1U6HFOJ2Q9GTG' where id=7; -update noar ti set b1='6BFA1U6HFOJ2Q9GTG' where id=7; -update noar tt set v0='H6Q5P1980JKG' where id=7; -update noar ti set v0='H6Q5P1980JKG' where id=7; -update noar tt set b2='GXOA1SV9UHWIL' where id=7; -update noar ti set b2='GXOA1SV9UHWIL' where id=7; -update noar tt set v0='ACLU5D8JDSHMFW' where id=8; -update noar ti set v0='ACLU5D8JDSHMFW' where id=8; -update noar tt set b0='ET58YPLALZQSTI8Y0AM' where id=8; -update noar ti set b0='ET58YPLALZQSTI8Y0AM' where id=8; -update noar tt set v0='8XTZ0PHE4' where id=8; -update noar ti set v0='8XTZ0PHE4' where id=8; -update noar tt set b1='AL8NG0FEDRYEXIH' where id=8; -update noar ti set b1='AL8NG0FEDRYEXIH' where id=8; -update noar tt set v0='TBB1X5L' where id=8; -update noar ti set v0='TBB1X5L' where id=8; -update noar tt set b2='CFIPBV36L9FJS4F59SDLKJDQH' where id=8; -update noar ti set b2='CFIPBV36L9FJS4F59SDLKJDQH' where id=8; -update noar tt set v0='0HJROZ9MYJ6IEHNTYG4DMNP6' where id=9; -update noar ti set v0='0HJROZ9MYJ6IEHNTYG4DMNP6' where id=9; -update noar tt set b0='7YG7P1D79F0KPA3AL2VAXS1LX4ZYYEB' where id=9; -update noar ti set b0='7YG7P1D79F0KPA3AL2VAXS1LX4ZYYEB' where id=9; -update noar tt set v0='28M5EF' where id=9; -update noar ti set v0='28M5EF' where id=9; -update noar tt set b1='TO1' where id=9; -update noar ti set b1='TO1' where id=9; -update noar tt set v0='DF' where id=9; -update noar ti set v0='DF' where id=9; -update noar tt set b2='D9OL' where id=9; -update noar ti set b2='D9OL' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 blob not null, -b1 tinyblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='5DOA15OSOD9DQZTW4PDGEC1I1HR7W5VU' where id=1; -update noar ti set v0='5DOA15OSOD9DQZTW4PDGEC1I1HR7W5VU' where id=1; -update noar tt set b0='NKY8V0K0W0' where id=1; -update noar ti set b0='NKY8V0K0W0' where id=1; -update noar tt set v0='R4S' where id=1; -update noar ti set v0='R4S' where id=1; -update noar tt set b1='LUFY4NXZ42V1Y2I52' where id=1; -update noar ti set b1='LUFY4NXZ42V1Y2I52' where id=1; -update noar tt set v0='Z809N9FCJRKJQBD' where id=1; -update noar ti set v0='Z809N9FCJRKJQBD' where id=1; -update noar tt set b2='SP2' where id=1; -update noar ti set b2='SP2' where id=1; -update noar tt set v0='DP0BPODNZKVITQ1KGN3M1GVLNEC' where id=2; -update noar ti set v0='DP0BPODNZKVITQ1KGN3M1GVLNEC' where id=2; -update noar tt set b0='E6M3UQV5MK1' where id=2; -update noar ti set b0='E6M3UQV5MK1' where id=2; -update noar tt set v0='0C858G02VNW22CR' where id=2; -update noar ti set v0='0C858G02VNW22CR' where id=2; -update noar tt set b1='RDO86' where id=2; -update noar ti set b1='RDO86' where id=2; -update noar tt set v0='NSIKLEHC' where id=2; -update noar ti set v0='NSIKLEHC' where id=2; -update noar tt set b2='MDK' where id=2; -update noar ti set b2='MDK' where id=2; -update noar tt set v0='CWZEJQ1Q' where id=3; -update noar ti set v0='CWZEJQ1Q' where id=3; -update noar tt set b0='198SH3U1JPRQCA70VEXDTXT' where id=3; -update noar ti set b0='198SH3U1JPRQCA70VEXDTXT' where id=3; -update noar tt set v0='M2A6LO06CE' where id=3; -update noar ti set v0='M2A6LO06CE' where id=3; -update noar tt set b1='ZSDAPLY4XF2JU93' where id=3; -update noar ti set b1='ZSDAPLY4XF2JU93' where id=3; -update noar tt set v0='71GGR7TRM286D7SBGEQ2MW7R4JIW7H' where id=3; -update noar ti set v0='71GGR7TRM286D7SBGEQ2MW7R4JIW7H' where id=3; -update noar tt set b2='LE' where id=3; -update noar ti set b2='LE' where id=3; -update noar tt set v0='1EA72GMDB3RQCLEUAH7XPSDFX' where id=4; -update noar ti set v0='1EA72GMDB3RQCLEUAH7XPSDFX' where id=4; -update noar tt set b0='A' where id=4; -update noar ti set b0='A' where id=4; -update noar tt set v0='SQAASN3ND4PW0VLYY55UWM' where id=4; -update noar ti set v0='SQAASN3ND4PW0VLYY55UWM' where id=4; -update noar tt set b1='2M3YLV873KLL8FGFZLPWU' where id=4; -update noar ti set b1='2M3YLV873KLL8FGFZLPWU' where id=4; -update noar tt set v0='VV9MGGFJEJBIRAHWMX' where id=4; -update noar ti set v0='VV9MGGFJEJBIRAHWMX' where id=4; -update noar tt set b2='UXEXO3WN7L7KQZH6HSDF' where id=4; -update noar ti set b2='UXEXO3WN7L7KQZH6HSDF' where id=4; -update noar tt set v0='O1YWKH3QTI1AXWBQYOBCUMZYYBVCUU' where id=5; -update noar ti set v0='O1YWKH3QTI1AXWBQYOBCUMZYYBVCUU' where id=5; -update noar tt set b0='H942QEAPA' where id=5; -update noar ti set b0='H942QEAPA' where id=5; -update noar tt set v0='4K9GQYZLEP5' where id=5; -update noar ti set v0='4K9GQYZLEP5' where id=5; -update noar tt set b1='AL01TKC1WDZVNG4M' where id=5; -update noar ti set b1='AL01TKC1WDZVNG4M' where id=5; -update noar tt set v0='J5JN8VGJT' where id=5; -update noar ti set v0='J5JN8VGJT' where id=5; -update noar tt set b2='MUI7C7B7E' where id=5; -update noar ti set b2='MUI7C7B7E' where id=5; -update noar tt set v0='MAG36AROYV7O0ECOLLSZVX8A' where id=6; -update noar ti set v0='MAG36AROYV7O0ECOLLSZVX8A' where id=6; -update noar tt set b0='LV6C3T1R8BRI6RQ53OQA53KL' where id=6; -update noar ti set b0='LV6C3T1R8BRI6RQ53OQA53KL' where id=6; -update noar tt set v0='3ZVVPY03L' where id=6; -update noar ti set v0='3ZVVPY03L' where id=6; -update noar tt set b1='3U21I9JX1' where id=6; -update noar ti set b1='3U21I9JX1' where id=6; -update noar tt set v0='EBGQ1TQH0IKSQ' where id=6; -update noar ti set v0='EBGQ1TQH0IKSQ' where id=6; -update noar tt set b2='H9VFRPMY6SVK1' where id=6; -update noar ti set b2='H9VFRPMY6SVK1' where id=6; -update noar tt set v0='VCILMOZWJFTK2HR0COSI22D' where id=7; -update noar ti set v0='VCILMOZWJFTK2HR0COSI22D' where id=7; -update noar tt set b0='9NICEITIMXDWW' where id=7; -update noar ti set b0='9NICEITIMXDWW' where id=7; -update noar tt set v0='SKSPWIW0YURQ' where id=7; -update noar ti set v0='SKSPWIW0YURQ' where id=7; -update noar tt set b1='KSFAQ02GBN0PVQMTG0ZKQ' where id=7; -update noar ti set b1='KSFAQ02GBN0PVQMTG0ZKQ' where id=7; -update noar tt set v0='0D94643Z' where id=7; -update noar ti set v0='0D94643Z' where id=7; -update noar tt set b2='W5DBZ39VVXMELAN4E6QCXQO692X4AK' where id=7; -update noar ti set b2='W5DBZ39VVXMELAN4E6QCXQO692X4AK' where id=7; -update noar tt set v0='K0FDLAHL7OL2IVVNOF1' where id=8; -update noar ti set v0='K0FDLAHL7OL2IVVNOF1' where id=8; -update noar tt set b0='YCHZSCV1VX' where id=8; -update noar ti set b0='YCHZSCV1VX' where id=8; -update noar tt set v0='0YSZ8KT43EGNNGWDAA27U7Y1WSLSB0N' where id=8; -update noar ti set v0='0YSZ8KT43EGNNGWDAA27U7Y1WSLSB0N' where id=8; -update noar tt set b1='F2QE54GTWGXO1Z' where id=8; -update noar ti set b1='F2QE54GTWGXO1Z' where id=8; -update noar tt set v0='GXIHVOAQV' where id=8; -update noar ti set v0='GXIHVOAQV' where id=8; -update noar tt set b2='KEVRRCVM3QV7OBYF8B9WM8' where id=8; -update noar ti set b2='KEVRRCVM3QV7OBYF8B9WM8' where id=8; -update noar tt set v0='ENBWI3GPZBADJK63SI78GPDP' where id=9; -update noar ti set v0='ENBWI3GPZBADJK63SI78GPDP' where id=9; -update noar tt set b0='0NUCN6IX2ZOZRN9O' where id=9; -update noar ti set b0='0NUCN6IX2ZOZRN9O' where id=9; -update noar tt set v0='WPXVA' where id=9; -update noar ti set v0='WPXVA' where id=9; -update noar tt set b1='KQ7HULNUSLXKL01YIQ73OGDH68A' where id=9; -update noar ti set b1='KQ7HULNUSLXKL01YIQ73OGDH68A' where id=9; -update noar tt set v0='TYRBMZ474ICZJX8' where id=9; -update noar ti set v0='TYRBMZ474ICZJX8' where id=9; -update noar tt set b2='7AS7GK6MJG9VYHMP3KIHINVY' where id=9; -update noar ti set b2='7AS7GK6MJG9VYHMP3KIHINVY' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 blob null, -b1 tinyblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='8OFXQ6L5NC67OWGC6Z8FFOVRPQCT245' where id=1; -update noar ti set v0='8OFXQ6L5NC67OWGC6Z8FFOVRPQCT245' where id=1; -update noar tt set b0='S328ECLT3RRUYQCA0V2C' where id=1; -update noar ti set b0='S328ECLT3RRUYQCA0V2C' where id=1; -update noar tt set v0='WVYCVSCUMN1Z2953YMDTVSC2DBOBECT' where id=1; -update noar ti set v0='WVYCVSCUMN1Z2953YMDTVSC2DBOBECT' where id=1; -update noar tt set b1='TLCRQO8XHS1NAP9FDWPUIM' where id=1; -update noar ti set b1='TLCRQO8XHS1NAP9FDWPUIM' where id=1; -update noar tt set v0='T1' where id=1; -update noar ti set v0='T1' where id=1; -update noar tt set b2='GR7B7K3SORSI4VB6D2IWR8ZFVH7' where id=1; -update noar ti set b2='GR7B7K3SORSI4VB6D2IWR8ZFVH7' where id=1; -update noar tt set v0='4HFC330OC1IAP94BY8N44FZZSH' where id=2; -update noar ti set v0='4HFC330OC1IAP94BY8N44FZZSH' where id=2; -update noar tt set b0='Y09D0PZPSFOCS6CFMZLQ6N' where id=2; -update noar ti set b0='Y09D0PZPSFOCS6CFMZLQ6N' where id=2; -update noar tt set v0='80B8949XG' where id=2; -update noar ti set v0='80B8949XG' where id=2; -update noar tt set b1='XWE' where id=2; -update noar ti set b1='XWE' where id=2; -update noar tt set v0='NGXWD1TIDXE1CSRN00RUDMTBE6G5' where id=2; -update noar ti set v0='NGXWD1TIDXE1CSRN00RUDMTBE6G5' where id=2; -update noar tt set b2='QI1QDB1I' where id=2; -update noar ti set b2='QI1QDB1I' where id=2; -update noar tt set v0='QSK' where id=3; -update noar ti set v0='QSK' where id=3; -update noar tt set b0='H2HZJX2OQRP7L10IUB3L3UBTV8T5AQ' where id=3; -update noar ti set b0='H2HZJX2OQRP7L10IUB3L3UBTV8T5AQ' where id=3; -update noar tt set v0='KAR9FGEBD' where id=3; -update noar ti set v0='KAR9FGEBD' where id=3; -update noar tt set b1='HWU9BZEZTNDPH4QJDQKW7QXDQ3PQ' where id=3; -update noar ti set b1='HWU9BZEZTNDPH4QJDQKW7QXDQ3PQ' where id=3; -update noar tt set v0='H4EYLTNXDQ4ZSWH5ZG31KVH4Z18V' where id=3; -update noar ti set v0='H4EYLTNXDQ4ZSWH5ZG31KVH4Z18V' where id=3; -update noar tt set b2='0CYU2G1JL' where id=3; -update noar ti set b2='0CYU2G1JL' where id=3; -update noar tt set v0='HUZYVET6ZO9KNU' where id=4; -update noar ti set v0='HUZYVET6ZO9KNU' where id=4; -update noar tt set b0='J9ZDF8HZZU9KSH78VQDSMEFRPZ6OCT' where id=4; -update noar ti set b0='J9ZDF8HZZU9KSH78VQDSMEFRPZ6OCT' where id=4; -update noar tt set v0='5KC' where id=4; -update noar ti set v0='5KC' where id=4; -update noar tt set b1='4V190RO84MCKMR3ZZVTOV59VGSFLL7' where id=4; -update noar ti set b1='4V190RO84MCKMR3ZZVTOV59VGSFLL7' where id=4; -update noar tt set v0='1FRGAH492177BPCIXWVKR99' where id=4; -update noar ti set v0='1FRGAH492177BPCIXWVKR99' where id=4; -update noar tt set b2='BL2JW3GI0AD7JNBTCLBBA02APEZY' where id=4; -update noar ti set b2='BL2JW3GI0AD7JNBTCLBBA02APEZY' where id=4; -update noar tt set v0='WQU38IVP1984WA557O3LR' where id=5; -update noar ti set v0='WQU38IVP1984WA557O3LR' where id=5; -update noar tt set b0='1G6KPWXWQZYTD4W21HHQOV8389EGJJKS' where id=5; -update noar ti set b0='1G6KPWXWQZYTD4W21HHQOV8389EGJJKS' where id=5; -update noar tt set v0='FXK8' where id=5; -update noar ti set v0='FXK8' where id=5; -update noar tt set b1='OAO8GUS48RX8HO5Q98RRK12PO25' where id=5; -update noar ti set b1='OAO8GUS48RX8HO5Q98RRK12PO25' where id=5; -update noar tt set v0='FMBTPP' where id=5; -update noar ti set v0='FMBTPP' where id=5; -update noar tt set b2='HQU56AWCMMQ3L' where id=5; -update noar ti set b2='HQU56AWCMMQ3L' where id=5; -update noar tt set v0='50VD4T562NTPR1G' where id=6; -update noar ti set v0='50VD4T562NTPR1G' where id=6; -update noar tt set b0='FX4VA' where id=6; -update noar ti set b0='FX4VA' where id=6; -update noar tt set v0='4UPOCOH7B0MV9H3JH5' where id=6; -update noar ti set v0='4UPOCOH7B0MV9H3JH5' where id=6; -update noar tt set b1='4MO3VI5LCR0JQT' where id=6; -update noar ti set b1='4MO3VI5LCR0JQT' where id=6; -update noar tt set v0='FN5' where id=6; -update noar ti set v0='FN5' where id=6; -update noar tt set b2='E6754' where id=6; -update noar ti set b2='E6754' where id=6; -update noar tt set v0='W5DS44UQUW4BK2TMUVHRMY2OS03PN8' where id=7; -update noar ti set v0='W5DS44UQUW4BK2TMUVHRMY2OS03PN8' where id=7; -update noar tt set b0='CK6TVL' where id=7; -update noar ti set b0='CK6TVL' where id=7; -update noar tt set v0='2NSX4SFM7XTP2Z3X4XIG20VI4HJZX' where id=7; -update noar ti set v0='2NSX4SFM7XTP2Z3X4XIG20VI4HJZX' where id=7; -update noar tt set b1='D6VNG23LZPDFNMN5PSFPJ' where id=7; -update noar ti set b1='D6VNG23LZPDFNMN5PSFPJ' where id=7; -update noar tt set v0='SK08F4' where id=7; -update noar ti set v0='SK08F4' where id=7; -update noar tt set b2='YUMII2Y603QNJZEHZ2' where id=7; -update noar ti set b2='YUMII2Y603QNJZEHZ2' where id=7; -update noar tt set v0='GQS1' where id=8; -update noar ti set v0='GQS1' where id=8; -update noar tt set b0='HX' where id=8; -update noar ti set b0='HX' where id=8; -update noar tt set v0='7L3M4D8I4RI' where id=8; -update noar ti set v0='7L3M4D8I4RI' where id=8; -update noar tt set b1='YRSA' where id=8; -update noar ti set b1='YRSA' where id=8; -update noar tt set v0='EPT2GJ9HLW3FK43GPVQLV1KA9SY29' where id=8; -update noar ti set v0='EPT2GJ9HLW3FK43GPVQLV1KA9SY29' where id=8; -update noar tt set b2='U1E5' where id=8; -update noar ti set b2='U1E5' where id=8; -update noar tt set v0='3JT6YE' where id=9; -update noar ti set v0='3JT6YE' where id=9; -update noar tt set b0='48CS9AA1LPXG' where id=9; -update noar ti set b0='48CS9AA1LPXG' where id=9; -update noar tt set v0='M5' where id=9; -update noar ti set v0='M5' where id=9; -update noar tt set b1='XRI2HS37K3TXCIX9G3QXU5BIQ2' where id=9; -update noar ti set b1='XRI2HS37K3TXCIX9G3QXU5BIQ2' where id=9; -update noar tt set v0='4LC07BPK' where id=9; -update noar ti set v0='4LC07BPK' where id=9; -update noar tt set b2='8CR0' where id=9; -update noar ti set b2='8CR0' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 blob null, -b1 tinyblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='VUQPQDYXZXNTCA3JV0UB3QV69' where id=1; -update noar ti set v0='VUQPQDYXZXNTCA3JV0UB3QV69' where id=1; -update noar tt set b0='APBXLU54RTNOKCA759E8UPZ6VOV1ZL' where id=1; -update noar ti set b0='APBXLU54RTNOKCA759E8UPZ6VOV1ZL' where id=1; -update noar tt set v0='DEQ7ZBUHHIC6T4LY8QPNXAS' where id=1; -update noar ti set v0='DEQ7ZBUHHIC6T4LY8QPNXAS' where id=1; -update noar tt set b1='KL88WWG2MIY515LJFDI8TW2EE0' where id=1; -update noar ti set b1='KL88WWG2MIY515LJFDI8TW2EE0' where id=1; -update noar tt set v0='DPBJF4F987I' where id=1; -update noar ti set v0='DPBJF4F987I' where id=1; -update noar tt set b2='D5ISQ06XRY186VUNHAI0RQ' where id=1; -update noar ti set b2='D5ISQ06XRY186VUNHAI0RQ' where id=1; -update noar tt set v0='75850D7P52SMA799HZ' where id=2; -update noar ti set v0='75850D7P52SMA799HZ' where id=2; -update noar tt set b0='Q992DR0ONYEANG0H1W7T' where id=2; -update noar ti set b0='Q992DR0ONYEANG0H1W7T' where id=2; -update noar tt set v0='0NHDR5HW1KL9AT4' where id=2; -update noar ti set v0='0NHDR5HW1KL9AT4' where id=2; -update noar tt set b1='JN05H798V6OG8I3HHZ18JPCAKDDGBE' where id=2; -update noar ti set b1='JN05H798V6OG8I3HHZ18JPCAKDDGBE' where id=2; -update noar tt set v0='F9Y0' where id=2; -update noar ti set v0='F9Y0' where id=2; -update noar tt set b2='O7JEBE777C03YUGF34KAQ4DRPYZPOLI4' where id=2; -update noar ti set b2='O7JEBE777C03YUGF34KAQ4DRPYZPOLI4' where id=2; -update noar tt set v0='RKGS2C08E6KXF' where id=3; -update noar ti set v0='RKGS2C08E6KXF' where id=3; -update noar tt set b0='G6JJ6B0SI8HKRF' where id=3; -update noar ti set b0='G6JJ6B0SI8HKRF' where id=3; -update noar tt set v0='AHGMKZ1LLNN4PPT74G24' where id=3; -update noar ti set v0='AHGMKZ1LLNN4PPT74G24' where id=3; -update noar tt set b1='ATT9ZP2LZO9KGWPP60LDYBDKZ3A' where id=3; -update noar ti set b1='ATT9ZP2LZO9KGWPP60LDYBDKZ3A' where id=3; -update noar tt set v0='7KYOE' where id=3; -update noar ti set v0='7KYOE' where id=3; -update noar tt set b2='WGRVJ3BA3YITX2R4' where id=3; -update noar ti set b2='WGRVJ3BA3YITX2R4' where id=3; -update noar tt set v0='64T1F5D' where id=4; -update noar ti set v0='64T1F5D' where id=4; -update noar tt set b0='XQGN4LO22R0ESCR0Q20GV6JRRAQG' where id=4; -update noar ti set b0='XQGN4LO22R0ESCR0Q20GV6JRRAQG' where id=4; -update noar tt set v0='351ETRMEMKM' where id=4; -update noar ti set v0='351ETRMEMKM' where id=4; -update noar tt set b1='NOHATEZUVX2' where id=4; -update noar ti set b1='NOHATEZUVX2' where id=4; -update noar tt set v0='YUTNSR98UNZGOAS6LYQBP6VTYA' where id=4; -update noar ti set v0='YUTNSR98UNZGOAS6LYQBP6VTYA' where id=4; -update noar tt set b2='PB7A0O461PKE09FBUX7VLKV5S' where id=4; -update noar ti set b2='PB7A0O461PKE09FBUX7VLKV5S' where id=4; -update noar tt set v0='DQ8JHMJA1Q92UP2RGKK' where id=5; -update noar ti set v0='DQ8JHMJA1Q92UP2RGKK' where id=5; -update noar tt set b0='4M' where id=5; -update noar ti set b0='4M' where id=5; -update noar tt set v0='8Z8Z3DHLV12ZSX3NZ53V4QR1' where id=5; -update noar ti set v0='8Z8Z3DHLV12ZSX3NZ53V4QR1' where id=5; -update noar tt set b1='LH1T9F0TYH1981IBHULVYGV6R' where id=5; -update noar ti set b1='LH1T9F0TYH1981IBHULVYGV6R' where id=5; -update noar tt set v0='0ZMXLNHTH6O5IFQQ2IT2TI6D68JE98N' where id=5; -update noar ti set v0='0ZMXLNHTH6O5IFQQ2IT2TI6D68JE98N' where id=5; -update noar tt set b2='6N9E9VM' where id=5; -update noar ti set b2='6N9E9VM' where id=5; -update noar tt set v0='RGQDJQDQQNSPD54T' where id=6; -update noar ti set v0='RGQDJQDQQNSPD54T' where id=6; -update noar tt set b0='B7H8NSGKTRQFO8TTARPWBZBSZO8FX' where id=6; -update noar ti set b0='B7H8NSGKTRQFO8TTARPWBZBSZO8FX' where id=6; -update noar tt set v0='CVQCEWUR8Q' where id=6; -update noar ti set v0='CVQCEWUR8Q' where id=6; -update noar tt set b1='FBGCMN10QO8UTQ57B' where id=6; -update noar ti set b1='FBGCMN10QO8UTQ57B' where id=6; -update noar tt set v0='0NHRRNP8871XWIUFN6O8' where id=6; -update noar ti set v0='0NHRRNP8871XWIUFN6O8' where id=6; -update noar tt set b2='873A1S6GZTF7DM1AMWL4IO1' where id=6; -update noar ti set b2='873A1S6GZTF7DM1AMWL4IO1' where id=6; -update noar tt set v0='G' where id=7; -update noar ti set v0='G' where id=7; -update noar tt set b0='N1O1VD7TSEO7FBFU0A8BMR' where id=7; -update noar ti set b0='N1O1VD7TSEO7FBFU0A8BMR' where id=7; -update noar tt set v0='K26RTCEEW232CNC1LCF' where id=7; -update noar ti set v0='K26RTCEEW232CNC1LCF' where id=7; -update noar tt set b1='OJ958LZXQBJE' where id=7; -update noar ti set b1='OJ958LZXQBJE' where id=7; -update noar tt set v0='VQENBRAW14TRVTWDRKTCJPDFHF9WR' where id=7; -update noar ti set v0='VQENBRAW14TRVTWDRKTCJPDFHF9WR' where id=7; -update noar tt set b2='XDXFWAMMW1N0EDXUE0BRSZ4A9H' where id=7; -update noar ti set b2='XDXFWAMMW1N0EDXUE0BRSZ4A9H' where id=7; -update noar tt set v0='OHDXG9X1939XN8N58FTY' where id=8; -update noar ti set v0='OHDXG9X1939XN8N58FTY' where id=8; -update noar tt set b0='HERZ4IDVYX1AUISAYM1RY9H' where id=8; -update noar ti set b0='HERZ4IDVYX1AUISAYM1RY9H' where id=8; -update noar tt set v0='GPTY' where id=8; -update noar ti set v0='GPTY' where id=8; -update noar tt set b1='UWKAEB9VVHHPZL19IEJLH8NLB2N' where id=8; -update noar ti set b1='UWKAEB9VVHHPZL19IEJLH8NLB2N' where id=8; -update noar tt set v0='MN43PPLPU4L1DW0XDD57PCZGCD5' where id=8; -update noar ti set v0='MN43PPLPU4L1DW0XDD57PCZGCD5' where id=8; -update noar tt set b2='71CF20NDNO6' where id=8; -update noar ti set b2='71CF20NDNO6' where id=8; -update noar tt set v0='AAREJYJ9MHK2SZHPOJVU441RTJSVS' where id=9; -update noar ti set v0='AAREJYJ9MHK2SZHPOJVU441RTJSVS' where id=9; -update noar tt set b0='7F02' where id=9; -update noar ti set b0='7F02' where id=9; -update noar tt set v0='R793TUXUT3LYE6K4IT2' where id=9; -update noar ti set v0='R793TUXUT3LYE6K4IT2' where id=9; -update noar tt set b1='Q6SHP1' where id=9; -update noar ti set b1='Q6SHP1' where id=9; -update noar tt set v0='83GNXN' where id=9; -update noar ti set v0='83GNXN' where id=9; -update noar tt set b2='PTP1DRZJNC8WDHHV' where id=9; -update noar ti set b2='PTP1DRZJNC8WDHHV' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 blob not null, -b1 tinyblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='XU3QDNUUUED' where id=1; -update noar ti set v0='XU3QDNUUUED' where id=1; -update noar tt set b0='R73YA41CB6Q3NWOD8VO6S41J0HOADE' where id=1; -update noar ti set b0='R73YA41CB6Q3NWOD8VO6S41J0HOADE' where id=1; -update noar tt set v0='6EGUYIRRDCY' where id=1; -update noar ti set v0='6EGUYIRRDCY' where id=1; -update noar tt set b1='W4KU6SKBEYCGS9B79QJA0NCMFC3J0R' where id=1; -update noar ti set b1='W4KU6SKBEYCGS9B79QJA0NCMFC3J0R' where id=1; -update noar tt set v0='5350D8R3HRWZVKXMPJASPZ0K2EMD' where id=1; -update noar ti set v0='5350D8R3HRWZVKXMPJASPZ0K2EMD' where id=1; -update noar tt set b2='QUJCA01C2SQPDX' where id=1; -update noar ti set b2='QUJCA01C2SQPDX' where id=1; -update noar tt set v0='A82OPJ5V' where id=2; -update noar ti set v0='A82OPJ5V' where id=2; -update noar tt set b0='XIC2HT6THN' where id=2; -update noar ti set b0='XIC2HT6THN' where id=2; -update noar tt set v0='7O4EN4FU5RZ8YWT1ME7S5945RVIRN6' where id=2; -update noar ti set v0='7O4EN4FU5RZ8YWT1ME7S5945RVIRN6' where id=2; -update noar tt set b1='EVFJ1I80W2JDCBJBSBU90AUDNYOMO8' where id=2; -update noar ti set b1='EVFJ1I80W2JDCBJBSBU90AUDNYOMO8' where id=2; -update noar tt set v0='YST3X32WY2' where id=2; -update noar ti set v0='YST3X32WY2' where id=2; -update noar tt set b2='21ZSBY2DSKWOBE769' where id=2; -update noar ti set b2='21ZSBY2DSKWOBE769' where id=2; -update noar tt set v0='Z01M18FDI9H7PSPC4J02SEU2' where id=3; -update noar ti set v0='Z01M18FDI9H7PSPC4J02SEU2' where id=3; -update noar tt set b0='AJ' where id=3; -update noar ti set b0='AJ' where id=3; -update noar tt set v0='P1BTN3GPCLHVJQTGF01FBMA7' where id=3; -update noar ti set v0='P1BTN3GPCLHVJQTGF01FBMA7' where id=3; -update noar tt set b1='WC' where id=3; -update noar ti set b1='WC' where id=3; -update noar tt set v0='KZSJK1SP32NJS92AQ6XDYUI98X' where id=3; -update noar ti set v0='KZSJK1SP32NJS92AQ6XDYUI98X' where id=3; -update noar tt set b2='MSCU2' where id=3; -update noar ti set b2='MSCU2' where id=3; -update noar tt set v0='53W36QISMKU30PH47X0WOS91ZQ4' where id=4; -update noar ti set v0='53W36QISMKU30PH47X0WOS91ZQ4' where id=4; -update noar tt set b0='ICK01X4ZUCAWWND0Q9' where id=4; -update noar ti set b0='ICK01X4ZUCAWWND0Q9' where id=4; -update noar tt set v0='BBB7CY7USQ2LPT' where id=4; -update noar ti set v0='BBB7CY7USQ2LPT' where id=4; -update noar tt set b1='ZF08YH17VUV2' where id=4; -update noar ti set b1='ZF08YH17VUV2' where id=4; -update noar tt set v0='XKR42V' where id=4; -update noar ti set v0='XKR42V' where id=4; -update noar tt set b2='L9IH6' where id=4; -update noar ti set b2='L9IH6' where id=4; -update noar tt set v0='JW2YNWMTYIZATD4NT3SNWA' where id=5; -update noar ti set v0='JW2YNWMTYIZATD4NT3SNWA' where id=5; -update noar tt set b0='7LSOLBM4WI0430159H9JNNUY6UEK835' where id=5; -update noar ti set b0='7LSOLBM4WI0430159H9JNNUY6UEK835' where id=5; -update noar tt set v0='EEAQ9T7XGQGVOY5BJA51' where id=5; -update noar ti set v0='EEAQ9T7XGQGVOY5BJA51' where id=5; -update noar tt set b1='NFIU62OLJ8' where id=5; -update noar ti set b1='NFIU62OLJ8' where id=5; -update noar tt set v0='PW7ICJ9WMEFTB' where id=5; -update noar ti set v0='PW7ICJ9WMEFTB' where id=5; -update noar tt set b2='SG' where id=5; -update noar ti set b2='SG' where id=5; -update noar tt set v0='0PIHZIB3NA2' where id=6; -update noar ti set v0='0PIHZIB3NA2' where id=6; -update noar tt set b0='K2UAETCYF1ZRIUPZWVQ32PNJI' where id=6; -update noar ti set b0='K2UAETCYF1ZRIUPZWVQ32PNJI' where id=6; -update noar tt set v0='BZN443Y8DYHEXBAF2CSRMQWA7NKSXP5I' where id=6; -update noar ti set v0='BZN443Y8DYHEXBAF2CSRMQWA7NKSXP5I' where id=6; -update noar tt set b1='P29U6MKFISL0V85A' where id=6; -update noar ti set b1='P29U6MKFISL0V85A' where id=6; -update noar tt set v0='SSN71F3DAI43QO9K0KWI7ATM4J6' where id=6; -update noar ti set v0='SSN71F3DAI43QO9K0KWI7ATM4J6' where id=6; -update noar tt set b2='ZPTXO' where id=6; -update noar ti set b2='ZPTXO' where id=6; -update noar tt set v0='O6EU2NH9XCIQ20QL3Q0Y202MGFT4YP' where id=7; -update noar ti set v0='O6EU2NH9XCIQ20QL3Q0Y202MGFT4YP' where id=7; -update noar tt set b0='QA366PO6IU82995G00G8D2FX2' where id=7; -update noar ti set b0='QA366PO6IU82995G00G8D2FX2' where id=7; -update noar tt set v0='JMWC9IKLD2AXMNG46HWMJRRK8Y65' where id=7; -update noar ti set v0='JMWC9IKLD2AXMNG46HWMJRRK8Y65' where id=7; -update noar tt set b1='T587BFDUBC6733FBGOG14V' where id=7; -update noar ti set b1='T587BFDUBC6733FBGOG14V' where id=7; -update noar tt set v0='QYK' where id=7; -update noar ti set v0='QYK' where id=7; -update noar tt set b2='U2XOEI4UXQWVPBKMUP82QNZWJLWTN' where id=7; -update noar ti set b2='U2XOEI4UXQWVPBKMUP82QNZWJLWTN' where id=7; -update noar tt set v0='OAUT3IRL' where id=8; -update noar ti set v0='OAUT3IRL' where id=8; -update noar tt set b0='IGDJMCOAV6P1D6JPRLGIHZQ5HIN' where id=8; -update noar ti set b0='IGDJMCOAV6P1D6JPRLGIHZQ5HIN' where id=8; -update noar tt set v0='GERZLX365' where id=8; -update noar ti set v0='GERZLX365' where id=8; -update noar tt set b1='91J5U2MFCRY5A20RSK9' where id=8; -update noar ti set b1='91J5U2MFCRY5A20RSK9' where id=8; -update noar tt set v0='FD6O2TEKP3FB' where id=8; -update noar ti set v0='FD6O2TEKP3FB' where id=8; -update noar tt set b2='UHQK78WYR0FNFGN16IG05DGHMIJ7IQ' where id=8; -update noar ti set b2='UHQK78WYR0FNFGN16IG05DGHMIJ7IQ' where id=8; -update noar tt set v0='U5EXFWMFLW6YQU8SJZ' where id=9; -update noar ti set v0='U5EXFWMFLW6YQU8SJZ' where id=9; -update noar tt set b0='7X8L3B58A7DFNOLF2BTTCCMGHYLFXA' where id=9; -update noar ti set b0='7X8L3B58A7DFNOLF2BTTCCMGHYLFXA' where id=9; -update noar tt set v0='OIH4JC' where id=9; -update noar ti set v0='OIH4JC' where id=9; -update noar tt set b1='X5TK2Z5Q3WPV7B' where id=9; -update noar ti set b1='X5TK2Z5Q3WPV7B' where id=9; -update noar tt set v0='O32I0SKW7G8HJ89FSM9W' where id=9; -update noar ti set v0='O32I0SKW7G8HJ89FSM9W' where id=9; -update noar tt set b2='Q' where id=9; -update noar ti set b2='Q' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 blob not null, -b1 tinyblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='A' where id=1; -update noar ti set v0='A' where id=1; -update noar tt set b0='V' where id=1; -update noar ti set b0='V' where id=1; -update noar tt set v0='NDHFNZVNZER0' where id=1; -update noar ti set v0='NDHFNZVNZER0' where id=1; -update noar tt set b1='XOF1T71SN19LPLUUMR8T0V' where id=1; -update noar ti set b1='XOF1T71SN19LPLUUMR8T0V' where id=1; -update noar tt set v0='XGDTM4ULG' where id=1; -update noar ti set v0='XGDTM4ULG' where id=1; -update noar tt set b2='BVPJMZ79OE0VLR0POPJF2COL' where id=1; -update noar ti set b2='BVPJMZ79OE0VLR0POPJF2COL' where id=1; -update noar tt set v0='TDQCD51C6LS50PCSS19' where id=2; -update noar ti set v0='TDQCD51C6LS50PCSS19' where id=2; -update noar tt set b0='2JLOMEVP50CSX5P' where id=2; -update noar ti set b0='2JLOMEVP50CSX5P' where id=2; -update noar tt set v0='W92IZ6W4ZX03GU7HB' where id=2; -update noar ti set v0='W92IZ6W4ZX03GU7HB' where id=2; -update noar tt set b1='NZOFN0P3ANMC9CCNGXYDAMGZIRQ6E' where id=2; -update noar ti set b1='NZOFN0P3ANMC9CCNGXYDAMGZIRQ6E' where id=2; -update noar tt set v0='QK71N118' where id=2; -update noar ti set v0='QK71N118' where id=2; -update noar tt set b2='9218G' where id=2; -update noar ti set b2='9218G' where id=2; -update noar tt set v0='2X' where id=3; -update noar ti set v0='2X' where id=3; -update noar tt set b0='EFN3UHPG090PAMQD5' where id=3; -update noar ti set b0='EFN3UHPG090PAMQD5' where id=3; -update noar tt set v0='U8G0BWY9N83YVKBSHPFRETDNZH9W' where id=3; -update noar ti set v0='U8G0BWY9N83YVKBSHPFRETDNZH9W' where id=3; -update noar tt set b1='U2XEAPDE54CJZCLJL' where id=3; -update noar ti set b1='U2XEAPDE54CJZCLJL' where id=3; -update noar tt set v0='NC4SXFI7MI83I2LTAZ5XZ32VG545V' where id=3; -update noar ti set v0='NC4SXFI7MI83I2LTAZ5XZ32VG545V' where id=3; -update noar tt set b2='JK' where id=3; -update noar ti set b2='JK' where id=3; -update noar tt set v0='RSWUAHUL6' where id=4; -update noar ti set v0='RSWUAHUL6' where id=4; -update noar tt set b0='GRQKU46EDTIGMF' where id=4; -update noar ti set b0='GRQKU46EDTIGMF' where id=4; -update noar tt set v0='BT' where id=4; -update noar ti set v0='BT' where id=4; -update noar tt set b1='X71JQGKDDFX3489U9T7B' where id=4; -update noar ti set b1='X71JQGKDDFX3489U9T7B' where id=4; -update noar tt set v0='57E93K20CL0OC9F1LQI986I' where id=4; -update noar ti set v0='57E93K20CL0OC9F1LQI986I' where id=4; -update noar tt set b2='QF2YZSKIT5YQYRPZ7AAEQGT5T5K2' where id=4; -update noar ti set b2='QF2YZSKIT5YQYRPZ7AAEQGT5T5K2' where id=4; -update noar tt set v0='932WM7HPL6Y2W0DEFD1B' where id=5; -update noar ti set v0='932WM7HPL6Y2W0DEFD1B' where id=5; -update noar tt set b0='3OO66UPVGB3GCD0' where id=5; -update noar ti set b0='3OO66UPVGB3GCD0' where id=5; -update noar tt set v0='82GEP0KY' where id=5; -update noar ti set v0='82GEP0KY' where id=5; -update noar tt set b1='XCZ91DUJ1SATYGR' where id=5; -update noar ti set b1='XCZ91DUJ1SATYGR' where id=5; -update noar tt set v0='J2CZMCT9SRK00YTGWB5P80X' where id=5; -update noar ti set v0='J2CZMCT9SRK00YTGWB5P80X' where id=5; -update noar tt set b2='F8' where id=5; -update noar ti set b2='F8' where id=5; -update noar tt set v0='79TZSK6QXT5QR9F9HN5FRJF1KK8FZY' where id=6; -update noar ti set v0='79TZSK6QXT5QR9F9HN5FRJF1KK8FZY' where id=6; -update noar tt set b0='HMLMF01XNW' where id=6; -update noar ti set b0='HMLMF01XNW' where id=6; -update noar tt set v0='1MKBV34P1BZHNYC20IAISEAZISU' where id=6; -update noar ti set v0='1MKBV34P1BZHNYC20IAISEAZISU' where id=6; -update noar tt set b1='V6Y1597M85UVADSRV' where id=6; -update noar ti set b1='V6Y1597M85UVADSRV' where id=6; -update noar tt set v0='01VB5IWSED' where id=6; -update noar ti set v0='01VB5IWSED' where id=6; -update noar tt set b2='N2WIMKTUKTN96Y' where id=6; -update noar ti set b2='N2WIMKTUKTN96Y' where id=6; -update noar tt set v0='XSFVFOXMR0VTGRXDFSB86CA9HXJTIY7G' where id=7; -update noar ti set v0='XSFVFOXMR0VTGRXDFSB86CA9HXJTIY7G' where id=7; -update noar tt set b0='TLT3' where id=7; -update noar ti set b0='TLT3' where id=7; -update noar tt set v0='96XRMMICUZOBMTW' where id=7; -update noar ti set v0='96XRMMICUZOBMTW' where id=7; -update noar tt set b1='LATU82IPCM65NU120CYY4EJTE2NEGF7L' where id=7; -update noar ti set b1='LATU82IPCM65NU120CYY4EJTE2NEGF7L' where id=7; -update noar tt set v0='HK' where id=7; -update noar ti set v0='HK' where id=7; -update noar tt set b2='F3VYTPKOVD' where id=7; -update noar ti set b2='F3VYTPKOVD' where id=7; -update noar tt set v0='KJBME3Y' where id=8; -update noar ti set v0='KJBME3Y' where id=8; -update noar tt set b0='9X3KW0PCRE545LOCATN70FKIZF' where id=8; -update noar ti set b0='9X3KW0PCRE545LOCATN70FKIZF' where id=8; -update noar tt set v0='2JS7M6NW4A' where id=8; -update noar ti set v0='2JS7M6NW4A' where id=8; -update noar tt set b1='ZEO1PV008CN91AIDPTYJHIY18X961L0' where id=8; -update noar ti set b1='ZEO1PV008CN91AIDPTYJHIY18X961L0' where id=8; -update noar tt set v0='B' where id=8; -update noar ti set v0='B' where id=8; -update noar tt set b2='8HQEAXOZ1A80P0G7A9SP5MQAUZT2KXI' where id=8; -update noar ti set b2='8HQEAXOZ1A80P0G7A9SP5MQAUZT2KXI' where id=8; -update noar tt set v0='TB71OWDBCDPM8021R' where id=9; -update noar ti set v0='TB71OWDBCDPM8021R' where id=9; -update noar tt set b0='9W71QX99B' where id=9; -update noar ti set b0='9W71QX99B' where id=9; -update noar tt set v0='NORAZPZ6K8L5RBX4L0ZELX8' where id=9; -update noar ti set v0='NORAZPZ6K8L5RBX4L0ZELX8' where id=9; -update noar tt set b1='V8ULB' where id=9; -update noar ti set b1='V8ULB' where id=9; -update noar tt set v0='YH' where id=9; -update noar ti set v0='YH' where id=9; -update noar tt set b2='33XO87DZ48YNP1FGU0B9N06' where id=9; -update noar ti set b2='33XO87DZ48YNP1FGU0B9N06' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 blob null, -b1 tinyblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='LIO' where id=1; -update noar ti set v0='LIO' where id=1; -update noar tt set b0='Y3G6XG4' where id=1; -update noar ti set b0='Y3G6XG4' where id=1; -update noar tt set v0='F1TTLJHRNTKD11T0X' where id=1; -update noar ti set v0='F1TTLJHRNTKD11T0X' where id=1; -update noar tt set b1='BQUA0FE5BZH9ID18986P' where id=1; -update noar ti set b1='BQUA0FE5BZH9ID18986P' where id=1; -update noar tt set v0='UNNX6JFFSSHUMN' where id=1; -update noar ti set v0='UNNX6JFFSSHUMN' where id=1; -update noar tt set b2='P' where id=1; -update noar ti set b2='P' where id=1; -update noar tt set v0='DDU4IIUFEABM7KXK2O7THELM' where id=2; -update noar ti set v0='DDU4IIUFEABM7KXK2O7THELM' where id=2; -update noar tt set b0='RTSYOKZYRMV' where id=2; -update noar ti set b0='RTSYOKZYRMV' where id=2; -update noar tt set v0='05I0' where id=2; -update noar ti set v0='05I0' where id=2; -update noar tt set b1='N9J0WU24H943KVVVX' where id=2; -update noar ti set b1='N9J0WU24H943KVVVX' where id=2; -update noar tt set v0='DJU70IQUL6D3K' where id=2; -update noar ti set v0='DJU70IQUL6D3K' where id=2; -update noar tt set b2='BHRWFKXZXV6I7F2BIVQ2M0JW1NX' where id=2; -update noar ti set b2='BHRWFKXZXV6I7F2BIVQ2M0JW1NX' where id=2; -update noar tt set v0='7FUQOVDRP8Q2N5RWI3J9M' where id=3; -update noar ti set v0='7FUQOVDRP8Q2N5RWI3J9M' where id=3; -update noar tt set b0='J8E157H7I00UPVKWCDDXC9O6F96P8D' where id=3; -update noar ti set b0='J8E157H7I00UPVKWCDDXC9O6F96P8D' where id=3; -update noar tt set v0='OMFW2X6OPA63M2MDH0' where id=3; -update noar ti set v0='OMFW2X6OPA63M2MDH0' where id=3; -update noar tt set b1='DYCORSVKDBSIODO' where id=3; -update noar ti set b1='DYCORSVKDBSIODO' where id=3; -update noar tt set v0='00I4XWBVVX3XQ93UAIZ9DXR6YB' where id=3; -update noar ti set v0='00I4XWBVVX3XQ93UAIZ9DXR6YB' where id=3; -update noar tt set b2='YLKWWFI0LSXIRPY' where id=3; -update noar ti set b2='YLKWWFI0LSXIRPY' where id=3; -update noar tt set v0='S4AD6GZOPINU' where id=4; -update noar ti set v0='S4AD6GZOPINU' where id=4; -update noar tt set b0='HKWF6Q5' where id=4; -update noar ti set b0='HKWF6Q5' where id=4; -update noar tt set v0='MN4MZABRRR' where id=4; -update noar ti set v0='MN4MZABRRR' where id=4; -update noar tt set b1='JBG3CX7QIJPG8E4WKOP' where id=4; -update noar ti set b1='JBG3CX7QIJPG8E4WKOP' where id=4; -update noar tt set v0='XV0D7BVKE5PN60PI' where id=4; -update noar ti set v0='XV0D7BVKE5PN60PI' where id=4; -update noar tt set b2='LU' where id=4; -update noar ti set b2='LU' where id=4; -update noar tt set v0='QTRCD6W428RS51AGQDDGK' where id=5; -update noar ti set v0='QTRCD6W428RS51AGQDDGK' where id=5; -update noar tt set b0='9RGU7ICDRQ2BPIGU8' where id=5; -update noar ti set b0='9RGU7ICDRQ2BPIGU8' where id=5; -update noar tt set v0='5CDTGIYK' where id=5; -update noar ti set v0='5CDTGIYK' where id=5; -update noar tt set b1='5DVYO1HEEX3B54I295752L7SG1QO' where id=5; -update noar ti set b1='5DVYO1HEEX3B54I295752L7SG1QO' where id=5; -update noar tt set v0='D4' where id=5; -update noar ti set v0='D4' where id=5; -update noar tt set b2='15D3YAD6XZ' where id=5; -update noar ti set b2='15D3YAD6XZ' where id=5; -update noar tt set v0='1AM2CE6P2QXNZH4KYJM' where id=6; -update noar ti set v0='1AM2CE6P2QXNZH4KYJM' where id=6; -update noar tt set b0='ECB6UMTQGFI97J2OXIE1TVLVYH' where id=6; -update noar ti set b0='ECB6UMTQGFI97J2OXIE1TVLVYH' where id=6; -update noar tt set v0='N7LF7GMG3VBGB0ECODQZGHQU3J3MF9G' where id=6; -update noar ti set v0='N7LF7GMG3VBGB0ECODQZGHQU3J3MF9G' where id=6; -update noar tt set b1='MR74EBF' where id=6; -update noar ti set b1='MR74EBF' where id=6; -update noar tt set v0='IFAJQOVRP3UB0MN65BFZTKI00I1CQ' where id=6; -update noar ti set v0='IFAJQOVRP3UB0MN65BFZTKI00I1CQ' where id=6; -update noar tt set b2='4I5O1UF4P' where id=6; -update noar ti set b2='4I5O1UF4P' where id=6; -update noar tt set v0='JH2BE3I4EJ8038XQKYYUHXKRRZ6' where id=7; -update noar ti set v0='JH2BE3I4EJ8038XQKYYUHXKRRZ6' where id=7; -update noar tt set b0='WVRKN6KQI81P' where id=7; -update noar ti set b0='WVRKN6KQI81P' where id=7; -update noar tt set v0='9YCQ5SM8UGLDKJT109L' where id=7; -update noar ti set v0='9YCQ5SM8UGLDKJT109L' where id=7; -update noar tt set b1='6JU7I4A0CL' where id=7; -update noar ti set b1='6JU7I4A0CL' where id=7; -update noar tt set v0='JKGCOF73Z91ZW7TKRAE' where id=7; -update noar ti set v0='JKGCOF73Z91ZW7TKRAE' where id=7; -update noar tt set b2='U38TDJVLX2VBFCDH80DW' where id=7; -update noar ti set b2='U38TDJVLX2VBFCDH80DW' where id=7; -update noar tt set v0='65KD4FMW1IZUAPJ5O4Y1HUZRQC' where id=8; -update noar ti set v0='65KD4FMW1IZUAPJ5O4Y1HUZRQC' where id=8; -update noar tt set b0='C8V604PVVWW98W50X7R' where id=8; -update noar ti set b0='C8V604PVVWW98W50X7R' where id=8; -update noar tt set v0='Q8A1HTG' where id=8; -update noar ti set v0='Q8A1HTG' where id=8; -update noar tt set b1='8J0PJKK2' where id=8; -update noar ti set b1='8J0PJKK2' where id=8; -update noar tt set v0='83TXLAE0BLSTDEMYA7NI' where id=8; -update noar ti set v0='83TXLAE0BLSTDEMYA7NI' where id=8; -update noar tt set b2='3YOQ' where id=8; -update noar ti set b2='3YOQ' where id=8; -update noar tt set v0='3UBHD4NN1UOAXGBLEID' where id=9; -update noar ti set v0='3UBHD4NN1UOAXGBLEID' where id=9; -update noar tt set b0='34E5ENE2UY9TG0L4BL18O5' where id=9; -update noar ti set b0='34E5ENE2UY9TG0L4BL18O5' where id=9; -update noar tt set v0='PY80H4WWA' where id=9; -update noar ti set v0='PY80H4WWA' where id=9; -update noar tt set b1='WNEKC3QIXU2AR8HAD4KDQYSTU' where id=9; -update noar ti set b1='WNEKC3QIXU2AR8HAD4KDQYSTU' where id=9; -update noar tt set v0='7YBMM6TTD0PU087URN' where id=9; -update noar ti set v0='7YBMM6TTD0PU087URN' where id=9; -update noar tt set b2='W932B20IVW48' where id=9; -update noar ti set b2='W932B20IVW48' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 blob null, -b1 tinyblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='66P36' where id=1; -update noar ti set v0='66P36' where id=1; -update noar tt set b0='MCD37D1R1KER146C' where id=1; -update noar ti set b0='MCD37D1R1KER146C' where id=1; -update noar tt set v0='I1ISD5FF2SRZD6DU8TE72' where id=1; -update noar ti set v0='I1ISD5FF2SRZD6DU8TE72' where id=1; -update noar tt set b1='FOKH5RXCGIDV5' where id=1; -update noar ti set b1='FOKH5RXCGIDV5' where id=1; -update noar tt set v0='JR2Z4Z1YY5NK7G83OCS2BAL37LAJ5TY' where id=1; -update noar ti set v0='JR2Z4Z1YY5NK7G83OCS2BAL37LAJ5TY' where id=1; -update noar tt set b2='8L971501K5EMR3N9N2' where id=1; -update noar ti set b2='8L971501K5EMR3N9N2' where id=1; -update noar tt set v0='DISLIWXU9O2NU5UKD8NF0OIKTNOCN3YF' where id=2; -update noar ti set v0='DISLIWXU9O2NU5UKD8NF0OIKTNOCN3YF' where id=2; -update noar tt set b0='GH' where id=2; -update noar ti set b0='GH' where id=2; -update noar tt set v0='I573FM2MUXCQDSQ6QVCRO1OW2B6BKOT' where id=2; -update noar ti set v0='I573FM2MUXCQDSQ6QVCRO1OW2B6BKOT' where id=2; -update noar tt set b1='883WS4IM7LG1ORUSVV4ATO4CQY71AS' where id=2; -update noar ti set b1='883WS4IM7LG1ORUSVV4ATO4CQY71AS' where id=2; -update noar tt set v0='9BLVXWR70TQ77GBR3357PPS' where id=2; -update noar ti set v0='9BLVXWR70TQ77GBR3357PPS' where id=2; -update noar tt set b2='KAK2QFV8AC9JMZ' where id=2; -update noar ti set b2='KAK2QFV8AC9JMZ' where id=2; -update noar tt set v0='0JAJ10RDO3E' where id=3; -update noar ti set v0='0JAJ10RDO3E' where id=3; -update noar tt set b0='9E6SCXIE51YLGRTB6885W' where id=3; -update noar ti set b0='9E6SCXIE51YLGRTB6885W' where id=3; -update noar tt set v0='XD7' where id=3; -update noar ti set v0='XD7' where id=3; -update noar tt set b1='S1Y2CUR7KXKEC60B' where id=3; -update noar ti set b1='S1Y2CUR7KXKEC60B' where id=3; -update noar tt set v0='KVH56ZNR' where id=3; -update noar ti set v0='KVH56ZNR' where id=3; -update noar tt set b2='L71GF9OKU' where id=3; -update noar ti set b2='L71GF9OKU' where id=3; -update noar tt set v0='8CHNTTOU24ZSWWVCY1A4ADB6ST4QBRX' where id=4; -update noar ti set v0='8CHNTTOU24ZSWWVCY1A4ADB6ST4QBRX' where id=4; -update noar tt set b0='HXAM9OKSZ690M7NTC162' where id=4; -update noar ti set b0='HXAM9OKSZ690M7NTC162' where id=4; -update noar tt set v0='NEJHHDD' where id=4; -update noar ti set v0='NEJHHDD' where id=4; -update noar tt set b1='A568QPAT4XAYNCHP5W7' where id=4; -update noar ti set b1='A568QPAT4XAYNCHP5W7' where id=4; -update noar tt set v0='1FV1' where id=4; -update noar ti set v0='1FV1' where id=4; -update noar tt set b2='L8B6XD4ZBI8YW47WN' where id=4; -update noar ti set b2='L8B6XD4ZBI8YW47WN' where id=4; -update noar tt set v0='KNWS76FFVLNES5QW0FXGCRGZ7G4' where id=5; -update noar ti set v0='KNWS76FFVLNES5QW0FXGCRGZ7G4' where id=5; -update noar tt set b0='YODXM2TJPBSKRA42DJ0N03' where id=5; -update noar ti set b0='YODXM2TJPBSKRA42DJ0N03' where id=5; -update noar tt set v0='SMNSDK41XML66DA4ZVP2R' where id=5; -update noar ti set v0='SMNSDK41XML66DA4ZVP2R' where id=5; -update noar tt set b1='3O8MPVDHCE9RQ7LND2BLJQ2' where id=5; -update noar ti set b1='3O8MPVDHCE9RQ7LND2BLJQ2' where id=5; -update noar tt set v0='JPNFEYTXVCK8SEKUNOBDRQLYZNOZW5PJ' where id=5; -update noar ti set v0='JPNFEYTXVCK8SEKUNOBDRQLYZNOZW5PJ' where id=5; -update noar tt set b2='7TPAJV1I56NEUEEMUCY' where id=5; -update noar ti set b2='7TPAJV1I56NEUEEMUCY' where id=5; -update noar tt set v0='XIM' where id=6; -update noar ti set v0='XIM' where id=6; -update noar tt set b0='6PQ3OFLL3NQE3F1Y' where id=6; -update noar ti set b0='6PQ3OFLL3NQE3F1Y' where id=6; -update noar tt set v0='10ZGXC9H13O30CX' where id=6; -update noar ti set v0='10ZGXC9H13O30CX' where id=6; -update noar tt set b1='76GNA8DZML' where id=6; -update noar ti set b1='76GNA8DZML' where id=6; -update noar tt set v0='O8THJC8LA2ZLU3FSFXU0T8FRBMQ75C1' where id=6; -update noar ti set v0='O8THJC8LA2ZLU3FSFXU0T8FRBMQ75C1' where id=6; -update noar tt set b2='MNWHHPLF0V3W4' where id=6; -update noar ti set b2='MNWHHPLF0V3W4' where id=6; -update noar tt set v0='2NHJWSU' where id=7; -update noar ti set v0='2NHJWSU' where id=7; -update noar tt set b0='CMLY7L9B01Y1PLEA07BBCFVQ0' where id=7; -update noar ti set b0='CMLY7L9B01Y1PLEA07BBCFVQ0' where id=7; -update noar tt set v0='0MWVFT8GACPKZ2ULEACPM' where id=7; -update noar ti set v0='0MWVFT8GACPKZ2ULEACPM' where id=7; -update noar tt set b1='X72JXX5TYVRB4VQUO28S7Z3RUK3T' where id=7; -update noar ti set b1='X72JXX5TYVRB4VQUO28S7Z3RUK3T' where id=7; -update noar tt set v0='MMB7WITNIC' where id=7; -update noar ti set v0='MMB7WITNIC' where id=7; -update noar tt set b2='ELP5PQ38R336W' where id=7; -update noar ti set b2='ELP5PQ38R336W' where id=7; -update noar tt set v0='4IJA' where id=8; -update noar ti set v0='4IJA' where id=8; -update noar tt set b0='A34SH83OUHG3PTEZPCLIHGV0I4F9MXU' where id=8; -update noar ti set b0='A34SH83OUHG3PTEZPCLIHGV0I4F9MXU' where id=8; -update noar tt set v0='9Q2IWCJFJ5PGMQ5DOA9NEJWZBX4' where id=8; -update noar ti set v0='9Q2IWCJFJ5PGMQ5DOA9NEJWZBX4' where id=8; -update noar tt set b1='GLZFTYYCMUI' where id=8; -update noar ti set b1='GLZFTYYCMUI' where id=8; -update noar tt set v0='VHW' where id=8; -update noar ti set v0='VHW' where id=8; -update noar tt set b2='205J91153H2NOGTNW' where id=8; -update noar ti set b2='205J91153H2NOGTNW' where id=8; -update noar tt set v0='XCN' where id=9; -update noar ti set v0='XCN' where id=9; -update noar tt set b0='N36OMXEDRSW' where id=9; -update noar ti set b0='N36OMXEDRSW' where id=9; -update noar tt set v0='P8MQYP05GOWEDGV8AP09ROAHWX' where id=9; -update noar ti set v0='P8MQYP05GOWEDGV8AP09ROAHWX' where id=9; -update noar tt set b1='ODBZE0PZXQF' where id=9; -update noar ti set b1='ODBZE0PZXQF' where id=9; -update noar tt set v0='ZB2EHYQ7ISRFNGJZUUYBNRN1SS7CT0L' where id=9; -update noar ti set v0='ZB2EHYQ7ISRFNGJZUUYBNRN1SS7CT0L' where id=9; -update noar tt set b2='H559PD' where id=9; -update noar ti set b2='H559PD' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 blob not null, -b1 tinyblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='WR7DJFSN5UGF203' where id=1; -update noar ti set v0='WR7DJFSN5UGF203' where id=1; -update noar tt set b0='EV' where id=1; -update noar ti set b0='EV' where id=1; -update noar tt set v0='1VUUO1B6L357Z' where id=1; -update noar ti set v0='1VUUO1B6L357Z' where id=1; -update noar tt set b1='22G3VQTOGKVMEE753PIYJ7DY' where id=1; -update noar ti set b1='22G3VQTOGKVMEE753PIYJ7DY' where id=1; -update noar tt set v0='QCDDPRM3' where id=1; -update noar ti set v0='QCDDPRM3' where id=1; -update noar tt set b2='RK57SA2IS9ROA7EYOO4' where id=1; -update noar ti set b2='RK57SA2IS9ROA7EYOO4' where id=1; -update noar tt set v0='H3AEEE8CSC' where id=2; -update noar ti set v0='H3AEEE8CSC' where id=2; -update noar tt set b0='XLVMMDCHOJLG0QSONPSNJ' where id=2; -update noar ti set b0='XLVMMDCHOJLG0QSONPSNJ' where id=2; -update noar tt set v0='34MKP6XSBWURK3NRNFDW' where id=2; -update noar ti set v0='34MKP6XSBWURK3NRNFDW' where id=2; -update noar tt set b1='S0UFBA' where id=2; -update noar ti set b1='S0UFBA' where id=2; -update noar tt set v0='0PAUX919QJILAZ43L92TTE8CP436J3' where id=2; -update noar ti set v0='0PAUX919QJILAZ43L92TTE8CP436J3' where id=2; -update noar tt set b2='T7UBGMD4ITIEQKH8GL0' where id=2; -update noar ti set b2='T7UBGMD4ITIEQKH8GL0' where id=2; -update noar tt set v0='ONRJ4D5ZGSD' where id=3; -update noar ti set v0='ONRJ4D5ZGSD' where id=3; -update noar tt set b0='0ZIOOUCWDYWM' where id=3; -update noar ti set b0='0ZIOOUCWDYWM' where id=3; -update noar tt set v0='EHHKBBXXA4' where id=3; -update noar ti set v0='EHHKBBXXA4' where id=3; -update noar tt set b1='8' where id=3; -update noar ti set b1='8' where id=3; -update noar tt set v0='CO0509YW75U84YV4RIBP4L' where id=3; -update noar ti set v0='CO0509YW75U84YV4RIBP4L' where id=3; -update noar tt set b2='97' where id=3; -update noar ti set b2='97' where id=3; -update noar tt set v0='WYYMGD0YQH21QCRBWBI' where id=4; -update noar ti set v0='WYYMGD0YQH21QCRBWBI' where id=4; -update noar tt set b0='PQ3EH514' where id=4; -update noar ti set b0='PQ3EH514' where id=4; -update noar tt set v0='W' where id=4; -update noar ti set v0='W' where id=4; -update noar tt set b1='BJMRH8FHAL7B88BY' where id=4; -update noar ti set b1='BJMRH8FHAL7B88BY' where id=4; -update noar tt set v0='A3CGOLVBT0H0272NOKV7HW10N4HM' where id=4; -update noar ti set v0='A3CGOLVBT0H0272NOKV7HW10N4HM' where id=4; -update noar tt set b2='30R4CZ07A' where id=4; -update noar ti set b2='30R4CZ07A' where id=4; -update noar tt set v0='VCD3LXJNFBQICHQ651MMFRCJDMLSRYWP' where id=5; -update noar ti set v0='VCD3LXJNFBQICHQ651MMFRCJDMLSRYWP' where id=5; -update noar tt set b0='WUBK8N7CE9Y84LJU84GMYAA8YLRGQR' where id=5; -update noar ti set b0='WUBK8N7CE9Y84LJU84GMYAA8YLRGQR' where id=5; -update noar tt set v0='GAICEJEF1R5LATFGRMI1XWRJECCX8VT' where id=5; -update noar ti set v0='GAICEJEF1R5LATFGRMI1XWRJECCX8VT' where id=5; -update noar tt set b1='L2FAACS2R' where id=5; -update noar ti set b1='L2FAACS2R' where id=5; -update noar tt set v0='5S81UC' where id=5; -update noar ti set v0='5S81UC' where id=5; -update noar tt set b2='6ORJKA8QGG628JLM6WZ81FAD18RSD' where id=5; -update noar ti set b2='6ORJKA8QGG628JLM6WZ81FAD18RSD' where id=5; -update noar tt set v0='9UR7X6DBXII6M' where id=6; -update noar ti set v0='9UR7X6DBXII6M' where id=6; -update noar tt set b0='T47UURFHFDDERX9' where id=6; -update noar ti set b0='T47UURFHFDDERX9' where id=6; -update noar tt set v0='XRMBRITRHUPS1YCICHRE3BC' where id=6; -update noar ti set v0='XRMBRITRHUPS1YCICHRE3BC' where id=6; -update noar tt set b1='DXU1KCSMQH9MZ4X0GIH450NC25FYQ0A' where id=6; -update noar ti set b1='DXU1KCSMQH9MZ4X0GIH450NC25FYQ0A' where id=6; -update noar tt set v0='20B0YH1KL3' where id=6; -update noar ti set v0='20B0YH1KL3' where id=6; -update noar tt set b2='96Z4CVKLB839H7JG6OB29DMD04' where id=6; -update noar ti set b2='96Z4CVKLB839H7JG6OB29DMD04' where id=6; -update noar tt set v0='T' where id=7; -update noar ti set v0='T' where id=7; -update noar tt set b0='6T8DDEHYU' where id=7; -update noar ti set b0='6T8DDEHYU' where id=7; -update noar tt set v0='WZRBYQB' where id=7; -update noar ti set v0='WZRBYQB' where id=7; -update noar tt set b1='C121LRUJAW7' where id=7; -update noar ti set b1='C121LRUJAW7' where id=7; -update noar tt set v0='QSNGTU6KKSJOMJOLSLX5KN' where id=7; -update noar ti set v0='QSNGTU6KKSJOMJOLSLX5KN' where id=7; -update noar tt set b2='RNCBIAQCUBBVYHO1QZL' where id=7; -update noar ti set b2='RNCBIAQCUBBVYHO1QZL' where id=7; -update noar tt set v0='48DFTNYZ51EC5A0R8' where id=8; -update noar ti set v0='48DFTNYZ51EC5A0R8' where id=8; -update noar tt set b0='LTZXKAJS9UTIEX9BYWTLRX' where id=8; -update noar ti set b0='LTZXKAJS9UTIEX9BYWTLRX' where id=8; -update noar tt set v0='C3H6FBJTXH4NLPZXUC7G5QY' where id=8; -update noar ti set v0='C3H6FBJTXH4NLPZXUC7G5QY' where id=8; -update noar tt set b1='MB8O4XMG2XTZ0DP95NWOYE830J3D' where id=8; -update noar ti set b1='MB8O4XMG2XTZ0DP95NWOYE830J3D' where id=8; -update noar tt set v0='BBT67HO8JSHCQ45172V03ZDF876M840I' where id=8; -update noar ti set v0='BBT67HO8JSHCQ45172V03ZDF876M840I' where id=8; -update noar tt set b2='5JW4J6E89GQMJG1PVC714' where id=8; -update noar ti set b2='5JW4J6E89GQMJG1PVC714' where id=8; -update noar tt set v0='XA98R9ABPQEII01YDER24X230ZFOJ' where id=9; -update noar ti set v0='XA98R9ABPQEII01YDER24X230ZFOJ' where id=9; -update noar tt set b0='YW34M3XCXH1' where id=9; -update noar ti set b0='YW34M3XCXH1' where id=9; -update noar tt set v0='97K' where id=9; -update noar ti set v0='97K' where id=9; -update noar tt set b1='7TQBWK7AGI9GW19YJA8' where id=9; -update noar ti set b1='7TQBWK7AGI9GW19YJA8' where id=9; -update noar tt set v0='QVGTS6U49IC' where id=9; -update noar ti set v0='QVGTS6U49IC' where id=9; -update noar tt set b2='I2YICWKYUF6F4OYSC' where id=9; -update noar ti set b2='I2YICWKYUF6F4OYSC' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 blob not null, -b1 tinyblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='4BMPA0839HMTXAG9ME9' where id=1; -update noar ti set v0='4BMPA0839HMTXAG9ME9' where id=1; -update noar tt set b0='75NQQ2PEXW9GKWIFYX0RYSHU' where id=1; -update noar ti set b0='75NQQ2PEXW9GKWIFYX0RYSHU' where id=1; -update noar tt set v0='OAQU' where id=1; -update noar ti set v0='OAQU' where id=1; -update noar tt set b1='LL3RXSPP' where id=1; -update noar ti set b1='LL3RXSPP' where id=1; -update noar tt set v0='RY88YGHYMHYF09VQ5UL' where id=1; -update noar ti set v0='RY88YGHYMHYF09VQ5UL' where id=1; -update noar tt set b2='VK6LJ2Q4TJEDO5MYVQPS7OHPE4O9B' where id=1; -update noar ti set b2='VK6LJ2Q4TJEDO5MYVQPS7OHPE4O9B' where id=1; -update noar tt set v0='E8NIALN0VFSJ2BWQQOM' where id=2; -update noar ti set v0='E8NIALN0VFSJ2BWQQOM' where id=2; -update noar tt set b0='SXBENCGGQDZ7UOD' where id=2; -update noar ti set b0='SXBENCGGQDZ7UOD' where id=2; -update noar tt set v0='FJ4SZOOQR3ITVRGE389GON66U2P2' where id=2; -update noar ti set v0='FJ4SZOOQR3ITVRGE389GON66U2P2' where id=2; -update noar tt set b1='6W7JQI' where id=2; -update noar ti set b1='6W7JQI' where id=2; -update noar tt set v0='SBMKBU62US8JD' where id=2; -update noar ti set v0='SBMKBU62US8JD' where id=2; -update noar tt set b2='M1CJRQAM5A57BLVOQBAJLASOU8WN9QC2' where id=2; -update noar ti set b2='M1CJRQAM5A57BLVOQBAJLASOU8WN9QC2' where id=2; -update noar tt set v0='S8OIEBK88Z4KXZPXG091' where id=3; -update noar ti set v0='S8OIEBK88Z4KXZPXG091' where id=3; -update noar tt set b0='P3WVCX809TM860ITFOO' where id=3; -update noar ti set b0='P3WVCX809TM860ITFOO' where id=3; -update noar tt set v0='R4FT1HKOKH4AOL' where id=3; -update noar ti set v0='R4FT1HKOKH4AOL' where id=3; -update noar tt set b1='2QQAMDVB5ZPJNM5W4LPA6C2H77' where id=3; -update noar ti set b1='2QQAMDVB5ZPJNM5W4LPA6C2H77' where id=3; -update noar tt set v0='P25ZB0' where id=3; -update noar ti set v0='P25ZB0' where id=3; -update noar tt set b2='VJJ9W' where id=3; -update noar ti set b2='VJJ9W' where id=3; -update noar tt set v0='G8IW52HR13JY24B1G9DAWXZ1B' where id=4; -update noar ti set v0='G8IW52HR13JY24B1G9DAWXZ1B' where id=4; -update noar tt set b0='530BIS28' where id=4; -update noar ti set b0='530BIS28' where id=4; -update noar tt set v0='D829NKDKO4YSXT3A3XKPGIVBGQLJL' where id=4; -update noar ti set v0='D829NKDKO4YSXT3A3XKPGIVBGQLJL' where id=4; -update noar tt set b1='E8QMTNPL6OHOS2MXOCTBBYJ9N5L' where id=4; -update noar ti set b1='E8QMTNPL6OHOS2MXOCTBBYJ9N5L' where id=4; -update noar tt set v0='XDXQ50' where id=4; -update noar ti set v0='XDXQ50' where id=4; -update noar tt set b2='Y2LYY15VF1NS42J' where id=4; -update noar ti set b2='Y2LYY15VF1NS42J' where id=4; -update noar tt set v0='WFZ28TP9VSEIZ1UFG3QY7UL' where id=5; -update noar ti set v0='WFZ28TP9VSEIZ1UFG3QY7UL' where id=5; -update noar tt set b0='M8OBJKCFYUOP5BVJFH39OW96Z' where id=5; -update noar ti set b0='M8OBJKCFYUOP5BVJFH39OW96Z' where id=5; -update noar tt set v0='GGDKHWXD8W3Z5C5VW' where id=5; -update noar ti set v0='GGDKHWXD8W3Z5C5VW' where id=5; -update noar tt set b1='2H13PFK' where id=5; -update noar ti set b1='2H13PFK' where id=5; -update noar tt set v0='YMPW39D' where id=5; -update noar ti set v0='YMPW39D' where id=5; -update noar tt set b2='UUDE38BOTQN' where id=5; -update noar ti set b2='UUDE38BOTQN' where id=5; -update noar tt set v0='W30U893BRMN52AZWGJPH1LW' where id=6; -update noar ti set v0='W30U893BRMN52AZWGJPH1LW' where id=6; -update noar tt set b0='LF7EIP5KUI93SHMNLBAKR52XAFFJ7XO' where id=6; -update noar ti set b0='LF7EIP5KUI93SHMNLBAKR52XAFFJ7XO' where id=6; -update noar tt set v0='VH1A6JAWGD' where id=6; -update noar ti set v0='VH1A6JAWGD' where id=6; -update noar tt set b1='WN8CNRAP6' where id=6; -update noar ti set b1='WN8CNRAP6' where id=6; -update noar tt set v0='JRTNA7C5ZLQ' where id=6; -update noar ti set v0='JRTNA7C5ZLQ' where id=6; -update noar tt set b2='VL' where id=6; -update noar ti set b2='VL' where id=6; -update noar tt set v0='9BL8' where id=7; -update noar ti set v0='9BL8' where id=7; -update noar tt set b0='5NRVOC45C5GO4F0' where id=7; -update noar ti set b0='5NRVOC45C5GO4F0' where id=7; -update noar tt set v0='XO5VLH981YJ55EK' where id=7; -update noar ti set v0='XO5VLH981YJ55EK' where id=7; -update noar tt set b1='YABWQ96' where id=7; -update noar ti set b1='YABWQ96' where id=7; -update noar tt set v0='NYYG9WXZ6UWXY6P4' where id=7; -update noar ti set v0='NYYG9WXZ6UWXY6P4' where id=7; -update noar tt set b2='7ETM320DY3GHU4YZD5676HLAPF0MBL5' where id=7; -update noar ti set b2='7ETM320DY3GHU4YZD5676HLAPF0MBL5' where id=7; -update noar tt set v0='8MONZCNZQ3RPNYU7' where id=8; -update noar ti set v0='8MONZCNZQ3RPNYU7' where id=8; -update noar tt set b0='D6ZXJEV1IM5PS3O' where id=8; -update noar ti set b0='D6ZXJEV1IM5PS3O' where id=8; -update noar tt set v0='D9TUDNF91JCUTIFJHNLB54R0YDT3J6B' where id=8; -update noar ti set v0='D9TUDNF91JCUTIFJHNLB54R0YDT3J6B' where id=8; -update noar tt set b1='EWIKJU8LTL7KVESF49REB' where id=8; -update noar ti set b1='EWIKJU8LTL7KVESF49REB' where id=8; -update noar tt set v0='MZWB8EYN8Q01HCRQ7ALO3NO' where id=8; -update noar ti set v0='MZWB8EYN8Q01HCRQ7ALO3NO' where id=8; -update noar tt set b2='GUC58YXKP9QJVXHB' where id=8; -update noar ti set b2='GUC58YXKP9QJVXHB' where id=8; -update noar tt set v0='UX' where id=9; -update noar ti set v0='UX' where id=9; -update noar tt set b0='4PG35UP1L7DJDH' where id=9; -update noar ti set b0='4PG35UP1L7DJDH' where id=9; -update noar tt set v0='L43E8G38E4ZHEIV2ZM3998WKZ8RNQW3W' where id=9; -update noar ti set v0='L43E8G38E4ZHEIV2ZM3998WKZ8RNQW3W' where id=9; -update noar tt set b1='XMA24D23EOYOKDELMKFULZ8JOC9' where id=9; -update noar ti set b1='XMA24D23EOYOKDELMKFULZ8JOC9' where id=9; -update noar tt set v0='Z75XPJ8B1CD7J' where id=9; -update noar ti set v0='Z75XPJ8B1CD7J' where id=9; -update noar tt set b2='0GI5E7EMXH5Y08N69H' where id=9; -update noar ti set b2='0GI5E7EMXH5Y08N69H' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 blob null, -b1 tinyblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='1' where id=1; -update noar ti set v0='1' where id=1; -update noar tt set b0='PE9UBWBA1U146G1B95ZZ' where id=1; -update noar ti set b0='PE9UBWBA1U146G1B95ZZ' where id=1; -update noar tt set v0='FCAMWNQXB0KCFIU9NAA56O37MIFKGI' where id=1; -update noar ti set v0='FCAMWNQXB0KCFIU9NAA56O37MIFKGI' where id=1; -update noar tt set b1='BQI2G6ND4YKE8FNDXB8B' where id=1; -update noar ti set b1='BQI2G6ND4YKE8FNDXB8B' where id=1; -update noar tt set v0='9MT' where id=1; -update noar ti set v0='9MT' where id=1; -update noar tt set b2='P1I13X3PQXQINJR3EBGP0AY7M8U92SU' where id=1; -update noar ti set b2='P1I13X3PQXQINJR3EBGP0AY7M8U92SU' where id=1; -update noar tt set v0='YMGK9UVXIC615FT' where id=2; -update noar ti set v0='YMGK9UVXIC615FT' where id=2; -update noar tt set b0='6V0SZA3II' where id=2; -update noar ti set b0='6V0SZA3II' where id=2; -update noar tt set v0='ZTNIWLDRSH783L8USGALRSM1Z94' where id=2; -update noar ti set v0='ZTNIWLDRSH783L8USGALRSM1Z94' where id=2; -update noar tt set b1='KUHYYS0YN7XEERBVY81J9G4TAYL4' where id=2; -update noar ti set b1='KUHYYS0YN7XEERBVY81J9G4TAYL4' where id=2; -update noar tt set v0='12E53SYUAA85K71QWJP09I3T6X' where id=2; -update noar ti set v0='12E53SYUAA85K71QWJP09I3T6X' where id=2; -update noar tt set b2='B5TXCIUP7IZVUVYCQOL3RQ' where id=2; -update noar ti set b2='B5TXCIUP7IZVUVYCQOL3RQ' where id=2; -update noar tt set v0='U3D7L5IBMVFP48JJXCBSGX4RIYYF' where id=3; -update noar ti set v0='U3D7L5IBMVFP48JJXCBSGX4RIYYF' where id=3; -update noar tt set b0='LLELKM' where id=3; -update noar ti set b0='LLELKM' where id=3; -update noar tt set v0='HL2EY0ZSRE3BPROSWFJ1B' where id=3; -update noar ti set v0='HL2EY0ZSRE3BPROSWFJ1B' where id=3; -update noar tt set b1='3A03S' where id=3; -update noar ti set b1='3A03S' where id=3; -update noar tt set v0='F12YJ2T224ZMWQC3541' where id=3; -update noar ti set v0='F12YJ2T224ZMWQC3541' where id=3; -update noar tt set b2='8QZPHW6MP6PLTRGUR2DOQK0Z3MU6W' where id=3; -update noar ti set b2='8QZPHW6MP6PLTRGUR2DOQK0Z3MU6W' where id=3; -update noar tt set v0='1VJASU73FJ5U6G58MHZHZNKR51YUQ3U9' where id=4; -update noar ti set v0='1VJASU73FJ5U6G58MHZHZNKR51YUQ3U9' where id=4; -update noar tt set b0='7NDVRZV085MIGN7' where id=4; -update noar ti set b0='7NDVRZV085MIGN7' where id=4; -update noar tt set v0='KUQQBIE2Z' where id=4; -update noar ti set v0='KUQQBIE2Z' where id=4; -update noar tt set b1='UEUNG9HB8UHH32I7A2JYN8N62860KGD' where id=4; -update noar ti set b1='UEUNG9HB8UHH32I7A2JYN8N62860KGD' where id=4; -update noar tt set v0='KA6L8DY' where id=4; -update noar ti set v0='KA6L8DY' where id=4; -update noar tt set b2='NCRSQMVR7238GV2IA7' where id=4; -update noar ti set b2='NCRSQMVR7238GV2IA7' where id=4; -update noar tt set v0='F89GGUNPJNWNFNQVFAM67CR' where id=5; -update noar ti set v0='F89GGUNPJNWNFNQVFAM67CR' where id=5; -update noar tt set b0='QGA8973KAGGH4O3' where id=5; -update noar ti set b0='QGA8973KAGGH4O3' where id=5; -update noar tt set v0='4JEOPUBM9QWN6DQWC4Q9X' where id=5; -update noar ti set v0='4JEOPUBM9QWN6DQWC4Q9X' where id=5; -update noar tt set b1='JHIREB0JMNZLW2D57TMVUAU' where id=5; -update noar ti set b1='JHIREB0JMNZLW2D57TMVUAU' where id=5; -update noar tt set v0='10BA4XW8SO73FYT632Q4M0G9KBE' where id=5; -update noar ti set v0='10BA4XW8SO73FYT632Q4M0G9KBE' where id=5; -update noar tt set b2='O1IG3FJV3JJ8AYUGH' where id=5; -update noar ti set b2='O1IG3FJV3JJ8AYUGH' where id=5; -update noar tt set v0='GH7GG9FD9CM2CJJRQZ10' where id=6; -update noar ti set v0='GH7GG9FD9CM2CJJRQZ10' where id=6; -update noar tt set b0='PYWN3UT9DUJ6QBWURSYU0' where id=6; -update noar ti set b0='PYWN3UT9DUJ6QBWURSYU0' where id=6; -update noar tt set v0='O9FPLB8KZEC2WGHB6K' where id=6; -update noar ti set v0='O9FPLB8KZEC2WGHB6K' where id=6; -update noar tt set b1='JCFFI0XLF8Y3XA34KDND8BDJ' where id=6; -update noar ti set b1='JCFFI0XLF8Y3XA34KDND8BDJ' where id=6; -update noar tt set v0='IH2HTYW' where id=6; -update noar ti set v0='IH2HTYW' where id=6; -update noar tt set b2='V4B0A6A' where id=6; -update noar ti set b2='V4B0A6A' where id=6; -update noar tt set v0='ZSCPEU9KWM8CTU3CLYA1W1T56NA' where id=7; -update noar ti set v0='ZSCPEU9KWM8CTU3CLYA1W1T56NA' where id=7; -update noar tt set b0='IGAIC8A6' where id=7; -update noar ti set b0='IGAIC8A6' where id=7; -update noar tt set v0='6D' where id=7; -update noar ti set v0='6D' where id=7; -update noar tt set b1='3RZI9KS0YHPA2YYVLF8B9G' where id=7; -update noar ti set b1='3RZI9KS0YHPA2YYVLF8B9G' where id=7; -update noar tt set v0='A' where id=7; -update noar ti set v0='A' where id=7; -update noar tt set b2='L4QM3R0UKZ6D1OB89UN3O9CQGGR03' where id=7; -update noar ti set b2='L4QM3R0UKZ6D1OB89UN3O9CQGGR03' where id=7; -update noar tt set v0='PDXF7M463KC4GVHSUI4XVSQXM' where id=8; -update noar ti set v0='PDXF7M463KC4GVHSUI4XVSQXM' where id=8; -update noar tt set b0='QF253N6' where id=8; -update noar ti set b0='QF253N6' where id=8; -update noar tt set v0='70WOQL1718CK4O4740WCUQIMHR9' where id=8; -update noar ti set v0='70WOQL1718CK4O4740WCUQIMHR9' where id=8; -update noar tt set b1='11UDK4CPW55UVKC' where id=8; -update noar ti set b1='11UDK4CPW55UVKC' where id=8; -update noar tt set v0='72L5UIOSTSJ94LUK' where id=8; -update noar ti set v0='72L5UIOSTSJ94LUK' where id=8; -update noar tt set b2='Z8UFY0GARQL' where id=8; -update noar ti set b2='Z8UFY0GARQL' where id=8; -update noar tt set v0='82WHSVEFLMMSWCG6OVKUJY21H' where id=9; -update noar ti set v0='82WHSVEFLMMSWCG6OVKUJY21H' where id=9; -update noar tt set b0='F0L7KJGF' where id=9; -update noar ti set b0='F0L7KJGF' where id=9; -update noar tt set v0='ZL0BDNUWONKQ9XMF3' where id=9; -update noar ti set v0='ZL0BDNUWONKQ9XMF3' where id=9; -update noar tt set b1='50ETN5YT368Q1' where id=9; -update noar ti set b1='50ETN5YT368Q1' where id=9; -update noar tt set v0='I76OZ4YXU95NWVJCQ3QUVNL' where id=9; -update noar ti set v0='I76OZ4YXU95NWVJCQ3QUVNL' where id=9; -update noar tt set b2='TDP7B5V6PE8F7OGZQB5WEAK7YWJZEIFD' where id=9; -update noar ti set b2='TDP7B5V6PE8F7OGZQB5WEAK7YWJZEIFD' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 blob null, -b1 tinyblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='RMF01TT' where id=1; -update noar ti set v0='RMF01TT' where id=1; -update noar tt set b0='Z8OQ6FGL7ZGJQBDO' where id=1; -update noar ti set b0='Z8OQ6FGL7ZGJQBDO' where id=1; -update noar tt set v0='JFDXUR06PRFAS' where id=1; -update noar ti set v0='JFDXUR06PRFAS' where id=1; -update noar tt set b1='L7R41L9TKY2XHHMS4Q85XZUAYAQ2' where id=1; -update noar ti set b1='L7R41L9TKY2XHHMS4Q85XZUAYAQ2' where id=1; -update noar tt set v0='40PL9VPTN' where id=1; -update noar ti set v0='40PL9VPTN' where id=1; -update noar tt set b2='C4ASYIWSIUY856' where id=1; -update noar ti set b2='C4ASYIWSIUY856' where id=1; -update noar tt set v0='2L85OXI7695JJZB2K0RSP5CS894T' where id=2; -update noar ti set v0='2L85OXI7695JJZB2K0RSP5CS894T' where id=2; -update noar tt set b0='W' where id=2; -update noar ti set b0='W' where id=2; -update noar tt set v0='P2XCINSP' where id=2; -update noar ti set v0='P2XCINSP' where id=2; -update noar tt set b1='ACBKGTGY809111HHC' where id=2; -update noar ti set b1='ACBKGTGY809111HHC' where id=2; -update noar tt set v0='ZA500HGL15KG9CQLXV6' where id=2; -update noar ti set v0='ZA500HGL15KG9CQLXV6' where id=2; -update noar tt set b2='1LV2CXKF5ZU4SBJM5FU9B6LHRKT' where id=2; -update noar ti set b2='1LV2CXKF5ZU4SBJM5FU9B6LHRKT' where id=2; -update noar tt set v0='RL' where id=3; -update noar ti set v0='RL' where id=3; -update noar tt set b0='Q3NI0GQN82' where id=3; -update noar ti set b0='Q3NI0GQN82' where id=3; -update noar tt set v0='BEB' where id=3; -update noar ti set v0='BEB' where id=3; -update noar tt set b1='PYIABPV26HWQDLERYO1X1AVWIBTLNJO' where id=3; -update noar ti set b1='PYIABPV26HWQDLERYO1X1AVWIBTLNJO' where id=3; -update noar tt set v0='D9HM6WXLPOZJCEPC5DT1' where id=3; -update noar ti set v0='D9HM6WXLPOZJCEPC5DT1' where id=3; -update noar tt set b2='WKGITDSV2X9WMZY' where id=3; -update noar ti set b2='WKGITDSV2X9WMZY' where id=3; -update noar tt set v0='ABTN091KBQHGB9DYXXAFVVO8XN0VM3H' where id=4; -update noar ti set v0='ABTN091KBQHGB9DYXXAFVVO8XN0VM3H' where id=4; -update noar tt set b0='8' where id=4; -update noar ti set b0='8' where id=4; -update noar tt set v0='KPOF8KL2BJOQVXFMLWCZ0JTCYGWM1' where id=4; -update noar ti set v0='KPOF8KL2BJOQVXFMLWCZ0JTCYGWM1' where id=4; -update noar tt set b1='UIZNBX49OEJH6OXJTDBY2WKGLI' where id=4; -update noar ti set b1='UIZNBX49OEJH6OXJTDBY2WKGLI' where id=4; -update noar tt set v0='VMMXZ256M0KKDW5FS9A71TNO' where id=4; -update noar ti set v0='VMMXZ256M0KKDW5FS9A71TNO' where id=4; -update noar tt set b2='GBL63964UDOJJDMVFUD' where id=4; -update noar ti set b2='GBL63964UDOJJDMVFUD' where id=4; -update noar tt set v0='TZXPACWC4PJ9VPYME6XXFWG8YV0CJCQE' where id=5; -update noar ti set v0='TZXPACWC4PJ9VPYME6XXFWG8YV0CJCQE' where id=5; -update noar tt set b0='QDUYVZK' where id=5; -update noar ti set b0='QDUYVZK' where id=5; -update noar tt set v0='TD7CE0H7H2' where id=5; -update noar ti set v0='TD7CE0H7H2' where id=5; -update noar tt set b1='C3797NMIJRC25FBJTLV8VJZ' where id=5; -update noar ti set b1='C3797NMIJRC25FBJTLV8VJZ' where id=5; -update noar tt set v0='886UI54V' where id=5; -update noar ti set v0='886UI54V' where id=5; -update noar tt set b2='S14OOJECI0MXNAQL0PYFE' where id=5; -update noar ti set b2='S14OOJECI0MXNAQL0PYFE' where id=5; -update noar tt set v0='P4UHO7PLH6OM5' where id=6; -update noar ti set v0='P4UHO7PLH6OM5' where id=6; -update noar tt set b0='YXDKTHI21I0A56IRZOWS6NR5FCR1ZGX' where id=6; -update noar ti set b0='YXDKTHI21I0A56IRZOWS6NR5FCR1ZGX' where id=6; -update noar tt set v0='SWUF5XPW9H3UVK' where id=6; -update noar ti set v0='SWUF5XPW9H3UVK' where id=6; -update noar tt set b1='5WGW3WQPV' where id=6; -update noar ti set b1='5WGW3WQPV' where id=6; -update noar tt set v0='4KPY0RUXA8XPWXWL' where id=6; -update noar ti set v0='4KPY0RUXA8XPWXWL' where id=6; -update noar tt set b2='HZBA7KYQZIJ1OXCXSDPD9Y21KY1ZX' where id=6; -update noar ti set b2='HZBA7KYQZIJ1OXCXSDPD9Y21KY1ZX' where id=6; -update noar tt set v0='1LSGWIUM6ABPQRKLCW5ABG3VRCH' where id=7; -update noar ti set v0='1LSGWIUM6ABPQRKLCW5ABG3VRCH' where id=7; -update noar tt set b0='5NZ0' where id=7; -update noar ti set b0='5NZ0' where id=7; -update noar tt set v0='C5KRRT3T5ST1ZLAQQ' where id=7; -update noar ti set v0='C5KRRT3T5ST1ZLAQQ' where id=7; -update noar tt set b1='I4LHHQIRS2I5ABEVTSS317PNGX' where id=7; -update noar ti set b1='I4LHHQIRS2I5ABEVTSS317PNGX' where id=7; -update noar tt set v0='391NN8Z2KJ2VQB92LMCQ' where id=7; -update noar ti set v0='391NN8Z2KJ2VQB92LMCQ' where id=7; -update noar tt set b2='ONSMZSMKJBTAKQCRV' where id=7; -update noar ti set b2='ONSMZSMKJBTAKQCRV' where id=7; -update noar tt set v0='S0YZ99B' where id=8; -update noar ti set v0='S0YZ99B' where id=8; -update noar tt set b0='ES5BN1BBO4RPW9T' where id=8; -update noar ti set b0='ES5BN1BBO4RPW9T' where id=8; -update noar tt set v0='NYVZV5F' where id=8; -update noar ti set v0='NYVZV5F' where id=8; -update noar tt set b1='XCOC4UC33F6U9ARCQJXZZNMVAD2Z' where id=8; -update noar ti set b1='XCOC4UC33F6U9ARCQJXZZNMVAD2Z' where id=8; -update noar tt set v0='DMHLY4HFO6HHWOW9CQQ' where id=8; -update noar ti set v0='DMHLY4HFO6HHWOW9CQQ' where id=8; -update noar tt set b2='2D' where id=8; -update noar ti set b2='2D' where id=8; -update noar tt set v0='P' where id=9; -update noar ti set v0='P' where id=9; -update noar tt set b0='7IVQ3RPGQWMU7K3GIC2WYSRCC' where id=9; -update noar ti set b0='7IVQ3RPGQWMU7K3GIC2WYSRCC' where id=9; -update noar tt set v0='0L587SDBCAUXX' where id=9; -update noar ti set v0='0L587SDBCAUXX' where id=9; -update noar tt set b1='1E' where id=9; -update noar ti set b1='1E' where id=9; -update noar tt set v0='8TZDYF7Z67ADKV390CF444VOWX' where id=9; -update noar ti set v0='8TZDYF7Z67ADKV390CF444VOWX' where id=9; -update noar tt set b2='JJYXPEYNNWD9WV5I5I8' where id=9; -update noar ti set b2='JJYXPEYNNWD9WV5I5I8' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 blob not null, -b1 tinyblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='U3QXFT7' where id=1; -update noar ti set v0='U3QXFT7' where id=1; -update noar tt set b0='RT1M41Q144JC9YH65' where id=1; -update noar ti set b0='RT1M41Q144JC9YH65' where id=1; -update noar tt set v0='D9H' where id=1; -update noar ti set v0='D9H' where id=1; -update noar tt set b1='98XU74MA2TRJBKOTQO28' where id=1; -update noar ti set b1='98XU74MA2TRJBKOTQO28' where id=1; -update noar tt set v0='DC' where id=1; -update noar ti set v0='DC' where id=1; -update noar tt set b2='FCXDOFTJFUX0DDKX0HC6XF8IFQEBE' where id=1; -update noar ti set b2='FCXDOFTJFUX0DDKX0HC6XF8IFQEBE' where id=1; -update noar tt set v0='OW9JQ5UW6WLFFH8SJC' where id=2; -update noar ti set v0='OW9JQ5UW6WLFFH8SJC' where id=2; -update noar tt set b0='XGL56XP7Q8RV1HYC0Q' where id=2; -update noar ti set b0='XGL56XP7Q8RV1HYC0Q' where id=2; -update noar tt set v0='5R09PJ2A385FM4XL5HT6' where id=2; -update noar ti set v0='5R09PJ2A385FM4XL5HT6' where id=2; -update noar tt set b1='MOC0IW9COPITPFEJXUP5RDOAPM1YIF24' where id=2; -update noar ti set b1='MOC0IW9COPITPFEJXUP5RDOAPM1YIF24' where id=2; -update noar tt set v0='FKGELF025CP41NXGCT7F7RB7AIMPL' where id=2; -update noar ti set v0='FKGELF025CP41NXGCT7F7RB7AIMPL' where id=2; -update noar tt set b2='LBN1S3LDCJ8LZI7ZZN1S8ZQBZYI8' where id=2; -update noar ti set b2='LBN1S3LDCJ8LZI7ZZN1S8ZQBZYI8' where id=2; -update noar tt set v0='H5381XQR4GPX5S864HK0UM6' where id=3; -update noar ti set v0='H5381XQR4GPX5S864HK0UM6' where id=3; -update noar tt set b0='6YPZ' where id=3; -update noar ti set b0='6YPZ' where id=3; -update noar tt set v0='X2KQ7PLIX4JOUX0V875NSK' where id=3; -update noar ti set v0='X2KQ7PLIX4JOUX0V875NSK' where id=3; -update noar tt set b1='MV4G9KSH5' where id=3; -update noar ti set b1='MV4G9KSH5' where id=3; -update noar tt set v0='LN767BM1F73HVV8O68IC9OLJT7QMZ2O' where id=3; -update noar ti set v0='LN767BM1F73HVV8O68IC9OLJT7QMZ2O' where id=3; -update noar tt set b2='N1WW103NIE8MPPKVR' where id=3; -update noar ti set b2='N1WW103NIE8MPPKVR' where id=3; -update noar tt set v0='2NW4OBUV4TBU1TOJDF1PW12AOG3' where id=4; -update noar ti set v0='2NW4OBUV4TBU1TOJDF1PW12AOG3' where id=4; -update noar tt set b0='GA4LV' where id=4; -update noar ti set b0='GA4LV' where id=4; -update noar tt set v0='YAEM48ZNAT4N02NH0Y8TCVLL2BEM' where id=4; -update noar ti set v0='YAEM48ZNAT4N02NH0Y8TCVLL2BEM' where id=4; -update noar tt set b1='ZNJA2BSW8FAG22' where id=4; -update noar ti set b1='ZNJA2BSW8FAG22' where id=4; -update noar tt set v0='E9BX06TVP5X5Q13AIA0DH' where id=4; -update noar ti set v0='E9BX06TVP5X5Q13AIA0DH' where id=4; -update noar tt set b2='WT1TLCXBYIHWI1GD' where id=4; -update noar ti set b2='WT1TLCXBYIHWI1GD' where id=4; -update noar tt set v0='FR4N3PFY2YUL' where id=5; -update noar ti set v0='FR4N3PFY2YUL' where id=5; -update noar tt set b0='OQIYKLJS9WHKAJERG7LS9BKF1YFX0Y5B' where id=5; -update noar ti set b0='OQIYKLJS9WHKAJERG7LS9BKF1YFX0Y5B' where id=5; -update noar tt set v0='GTY5O6RDFYODPLFWKTCOOJ6' where id=5; -update noar ti set v0='GTY5O6RDFYODPLFWKTCOOJ6' where id=5; -update noar tt set b1='3LORD46P63UKU9I' where id=5; -update noar ti set b1='3LORD46P63UKU9I' where id=5; -update noar tt set v0='HYSX4' where id=5; -update noar ti set v0='HYSX4' where id=5; -update noar tt set b2='S0DNS3JOSD3SAP2J' where id=5; -update noar ti set b2='S0DNS3JOSD3SAP2J' where id=5; -update noar tt set v0='9TWBD5YT3307AU4GEHSK3AYBLF' where id=6; -update noar ti set v0='9TWBD5YT3307AU4GEHSK3AYBLF' where id=6; -update noar tt set b0='RU1NL87CQUUJ' where id=6; -update noar ti set b0='RU1NL87CQUUJ' where id=6; -update noar tt set v0='N2W' where id=6; -update noar ti set v0='N2W' where id=6; -update noar tt set b1='ENZYX098BBUN6' where id=6; -update noar ti set b1='ENZYX098BBUN6' where id=6; -update noar tt set v0='G3PACXKI6RSJ4CEZZJ7GHZ73' where id=6; -update noar ti set v0='G3PACXKI6RSJ4CEZZJ7GHZ73' where id=6; -update noar tt set b2='16MIXU5ERSCJI6L4J' where id=6; -update noar ti set b2='16MIXU5ERSCJI6L4J' where id=6; -update noar tt set v0='0VROV7N303VI' where id=7; -update noar ti set v0='0VROV7N303VI' where id=7; -update noar tt set b0='9EAXF7IU64QQZMHZN8KT' where id=7; -update noar ti set b0='9EAXF7IU64QQZMHZN8KT' where id=7; -update noar tt set v0='O7HPFIXEQE3G5MWNQ20VQH16DDSXY2D' where id=7; -update noar ti set v0='O7HPFIXEQE3G5MWNQ20VQH16DDSXY2D' where id=7; -update noar tt set b1='QZ9OGK5QMZN' where id=7; -update noar ti set b1='QZ9OGK5QMZN' where id=7; -update noar tt set v0='FD4ZE6A2QRGZVX0VAVG47ERIS' where id=7; -update noar ti set v0='FD4ZE6A2QRGZVX0VAVG47ERIS' where id=7; -update noar tt set b2='146S6HUJH2JY82DOIV9ZUYQ08YQF' where id=7; -update noar ti set b2='146S6HUJH2JY82DOIV9ZUYQ08YQF' where id=7; -update noar tt set v0='JWBL3AA88DUH9O4MWKKXIVX1Y' where id=8; -update noar ti set v0='JWBL3AA88DUH9O4MWKKXIVX1Y' where id=8; -update noar tt set b0='QMEYKB2ZFJ7CR9C' where id=8; -update noar ti set b0='QMEYKB2ZFJ7CR9C' where id=8; -update noar tt set v0='3YZE6RKQYCLILJTSUNLRWJ' where id=8; -update noar ti set v0='3YZE6RKQYCLILJTSUNLRWJ' where id=8; -update noar tt set b1='MZ88MTYLM91POPWKBL4YR42' where id=8; -update noar ti set b1='MZ88MTYLM91POPWKBL4YR42' where id=8; -update noar tt set v0='E9Z5IV3Q5QGXGSCDHHPPT29PXEVWS10N' where id=8; -update noar ti set v0='E9Z5IV3Q5QGXGSCDHHPPT29PXEVWS10N' where id=8; -update noar tt set b2='8RXXW09' where id=8; -update noar ti set b2='8RXXW09' where id=8; -update noar tt set v0='8G4JFPTVC2' where id=9; -update noar ti set v0='8G4JFPTVC2' where id=9; -update noar tt set b0='V2X8IYO53' where id=9; -update noar ti set b0='V2X8IYO53' where id=9; -update noar tt set v0='C5OOAMFMWAAGIDXN7LCJRMGJGI6LJMK' where id=9; -update noar ti set v0='C5OOAMFMWAAGIDXN7LCJRMGJGI6LJMK' where id=9; -update noar tt set b1='JLY137NGHJ0NWZ4BW2QHIEACBQ57RYGP' where id=9; -update noar ti set b1='JLY137NGHJ0NWZ4BW2QHIEACBQ57RYGP' where id=9; -update noar tt set v0='73DPP8QP733RQD8Q315V8Q3KB1J7CZZ' where id=9; -update noar ti set v0='73DPP8QP733RQD8Q315V8Q3KB1J7CZZ' where id=9; -update noar tt set b2='8962W028V' where id=9; -update noar ti set b2='8962W028V' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 blob not null, -b1 tinyblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='TH15PY73DK' where id=1; -update noar ti set v0='TH15PY73DK' where id=1; -update noar tt set b0='MJ01G5634CJ80KDCFCZ189OEMI4T' where id=1; -update noar ti set b0='MJ01G5634CJ80KDCFCZ189OEMI4T' where id=1; -update noar tt set v0='41Q4BTSQXMESELQOKQGC' where id=1; -update noar ti set v0='41Q4BTSQXMESELQOKQGC' where id=1; -update noar tt set b1='Q76MJEQVKBLOMVCX' where id=1; -update noar ti set b1='Q76MJEQVKBLOMVCX' where id=1; -update noar tt set v0='8CKCF5M5DFJGLN3L9M7SQTS8JZDETEN' where id=1; -update noar ti set v0='8CKCF5M5DFJGLN3L9M7SQTS8JZDETEN' where id=1; -update noar tt set b2='88KK5C7LAZVQL9PBHNOYUF' where id=1; -update noar ti set b2='88KK5C7LAZVQL9PBHNOYUF' where id=1; -update noar tt set v0='RNBMZ9HUPE5K0J0' where id=2; -update noar ti set v0='RNBMZ9HUPE5K0J0' where id=2; -update noar tt set b0='2TIDWLLT1523PJ2D9' where id=2; -update noar ti set b0='2TIDWLLT1523PJ2D9' where id=2; -update noar tt set v0='5QCWUK' where id=2; -update noar ti set v0='5QCWUK' where id=2; -update noar tt set b1='RNN4JR6F47WMUZF5U0' where id=2; -update noar ti set b1='RNN4JR6F47WMUZF5U0' where id=2; -update noar tt set v0='5CIA5BBKHVSZ109' where id=2; -update noar ti set v0='5CIA5BBKHVSZ109' where id=2; -update noar tt set b2='N8LGZV9J6XWEVRWWI455' where id=2; -update noar ti set b2='N8LGZV9J6XWEVRWWI455' where id=2; -update noar tt set v0='CDP21XWGVXVGP3NZ' where id=3; -update noar ti set v0='CDP21XWGVXVGP3NZ' where id=3; -update noar tt set b0='V1STZ854CZA3JHMWS9TC69QBP81BBKL' where id=3; -update noar ti set b0='V1STZ854CZA3JHMWS9TC69QBP81BBKL' where id=3; -update noar tt set v0='BKQZF7ACENRTRCP8Q2H746KRMNL62N' where id=3; -update noar ti set v0='BKQZF7ACENRTRCP8Q2H746KRMNL62N' where id=3; -update noar tt set b1='56P7UPE82CRZB0LY1D' where id=3; -update noar ti set b1='56P7UPE82CRZB0LY1D' where id=3; -update noar tt set v0='SL1WSUNCM3VGQBG928TB59WD9JTQ' where id=3; -update noar ti set v0='SL1WSUNCM3VGQBG928TB59WD9JTQ' where id=3; -update noar tt set b2='WW90XSJYM9IGG9XRTVYQPC' where id=3; -update noar ti set b2='WW90XSJYM9IGG9XRTVYQPC' where id=3; -update noar tt set v0='TM2TL6XYRJBR20LLTMHOSWWC' where id=4; -update noar ti set v0='TM2TL6XYRJBR20LLTMHOSWWC' where id=4; -update noar tt set b0='ES8IFTH0Z0M5EVHZYSWBAVM2IX0CC11' where id=4; -update noar ti set b0='ES8IFTH0Z0M5EVHZYSWBAVM2IX0CC11' where id=4; -update noar tt set v0='EDY85L1BTLM4JHIXXW5' where id=4; -update noar ti set v0='EDY85L1BTLM4JHIXXW5' where id=4; -update noar tt set b1='P06TGX6TCI5VOFUI08VMOREE8WAW3O' where id=4; -update noar ti set b1='P06TGX6TCI5VOFUI08VMOREE8WAW3O' where id=4; -update noar tt set v0='LHI0FOX1JKDHHQVO154HUN8IZHYY1B98' where id=4; -update noar ti set v0='LHI0FOX1JKDHHQVO154HUN8IZHYY1B98' where id=4; -update noar tt set b2='WZJ768O72CD5BDJPW' where id=4; -update noar ti set b2='WZJ768O72CD5BDJPW' where id=4; -update noar tt set v0='UV3MTZUBJ' where id=5; -update noar ti set v0='UV3MTZUBJ' where id=5; -update noar tt set b0='NVZGPUM7K' where id=5; -update noar ti set b0='NVZGPUM7K' where id=5; -update noar tt set v0='EBGKJO901EQM4QDXKZV8' where id=5; -update noar ti set v0='EBGKJO901EQM4QDXKZV8' where id=5; -update noar tt set b1='DZSSW4YCTUE1QJ4US78GSS6X16' where id=5; -update noar ti set b1='DZSSW4YCTUE1QJ4US78GSS6X16' where id=5; -update noar tt set v0='DIK2ICHW' where id=5; -update noar ti set v0='DIK2ICHW' where id=5; -update noar tt set b2='0GN7ZIMMG2' where id=5; -update noar ti set b2='0GN7ZIMMG2' where id=5; -update noar tt set v0='NE0UBZOOVWP7' where id=6; -update noar ti set v0='NE0UBZOOVWP7' where id=6; -update noar tt set b0='SOBQZS6XZ' where id=6; -update noar ti set b0='SOBQZS6XZ' where id=6; -update noar tt set v0='X8' where id=6; -update noar ti set v0='X8' where id=6; -update noar tt set b1='7LJ6OFVK0TQ' where id=6; -update noar ti set b1='7LJ6OFVK0TQ' where id=6; -update noar tt set v0='4IYGUK5' where id=6; -update noar ti set v0='4IYGUK5' where id=6; -update noar tt set b2='VYU8PWLYX98DR4AV4ELCFVRGM7S2' where id=6; -update noar ti set b2='VYU8PWLYX98DR4AV4ELCFVRGM7S2' where id=6; -update noar tt set v0='NF4' where id=7; -update noar ti set v0='NF4' where id=7; -update noar tt set b0='A34NGBXM72SU3TY8SVW1NEVR' where id=7; -update noar ti set b0='A34NGBXM72SU3TY8SVW1NEVR' where id=7; -update noar tt set v0='DJ3ZNIR1Z1WKB0FVQ9RSX3FCQMDHJA' where id=7; -update noar ti set v0='DJ3ZNIR1Z1WKB0FVQ9RSX3FCQMDHJA' where id=7; -update noar tt set b1='0T97W2RMOYJ0F6VW5PRPA1' where id=7; -update noar ti set b1='0T97W2RMOYJ0F6VW5PRPA1' where id=7; -update noar tt set v0='4' where id=7; -update noar ti set v0='4' where id=7; -update noar tt set b2='87L795D2' where id=7; -update noar ti set b2='87L795D2' where id=7; -update noar tt set v0='KVR2H3NSQWJ935897LRBKTYI990' where id=8; -update noar ti set v0='KVR2H3NSQWJ935897LRBKTYI990' where id=8; -update noar tt set b0='L1DCVB' where id=8; -update noar ti set b0='L1DCVB' where id=8; -update noar tt set v0='P1MXBSQD8GC4J7NH5D55OC5' where id=8; -update noar ti set v0='P1MXBSQD8GC4J7NH5D55OC5' where id=8; -update noar tt set b1='MAIHZLIDKDXSTDFP325UXLG' where id=8; -update noar ti set b1='MAIHZLIDKDXSTDFP325UXLG' where id=8; -update noar tt set v0='LK3MG079VW3U2' where id=8; -update noar ti set v0='LK3MG079VW3U2' where id=8; -update noar tt set b2='LNWBMBLQ' where id=8; -update noar ti set b2='LNWBMBLQ' where id=8; -update noar tt set v0='CAPH35G2ZBLK' where id=9; -update noar ti set v0='CAPH35G2ZBLK' where id=9; -update noar tt set b0='49DERRZ6GBRBXN' where id=9; -update noar ti set b0='49DERRZ6GBRBXN' where id=9; -update noar tt set v0='MDGQV7TRBNX3LRECJ34TY' where id=9; -update noar ti set v0='MDGQV7TRBNX3LRECJ34TY' where id=9; -update noar tt set b1='7GZF8WCEAK69HZ3SJWNZD074K' where id=9; -update noar ti set b1='7GZF8WCEAK69HZ3SJWNZD074K' where id=9; -update noar tt set v0='GQTOL8I' where id=9; -update noar ti set v0='GQTOL8I' where id=9; -update noar tt set b2='DNYTUCY49TPRZRYOCRWRW69UH80JGP' where id=9; -update noar ti set b2='DNYTUCY49TPRZRYOCRWRW69UH80JGP' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 blob null, -b1 blob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='SA80PG' where id=1; -update noar ti set v0='SA80PG' where id=1; -update noar tt set b0='USS5FE6P4XGPLTBN0EOEOFQB' where id=1; -update noar ti set b0='USS5FE6P4XGPLTBN0EOEOFQB' where id=1; -update noar tt set v0='M7JUWNJODTE4D22I1ZYP64WV' where id=1; -update noar ti set v0='M7JUWNJODTE4D22I1ZYP64WV' where id=1; -update noar tt set b1='9ND3E0DUHRJAOAVOVTFLMMBXHT1A0UQH' where id=1; -update noar ti set b1='9ND3E0DUHRJAOAVOVTFLMMBXHT1A0UQH' where id=1; -update noar tt set v0='T9ZXXD6XZE' where id=1; -update noar ti set v0='T9ZXXD6XZE' where id=1; -update noar tt set b2='DGMPOJ' where id=1; -update noar ti set b2='DGMPOJ' where id=1; -update noar tt set v0='FDM7H7G' where id=2; -update noar ti set v0='FDM7H7G' where id=2; -update noar tt set b0='YUMMS05KO9BRE1CZ4R' where id=2; -update noar ti set b0='YUMMS05KO9BRE1CZ4R' where id=2; -update noar tt set v0='63KFBR6' where id=2; -update noar ti set v0='63KFBR6' where id=2; -update noar tt set b1='N4VW4O8U3D' where id=2; -update noar ti set b1='N4VW4O8U3D' where id=2; -update noar tt set v0='UYB56R8SRKCA8O5O' where id=2; -update noar ti set v0='UYB56R8SRKCA8O5O' where id=2; -update noar tt set b2='3HCEENYOE9HZ0SEP1' where id=2; -update noar ti set b2='3HCEENYOE9HZ0SEP1' where id=2; -update noar tt set v0='GK7YW07HGHV' where id=3; -update noar ti set v0='GK7YW07HGHV' where id=3; -update noar tt set b0='4HHV537SNEGOS3' where id=3; -update noar ti set b0='4HHV537SNEGOS3' where id=3; -update noar tt set v0='UR4U43GFPKQF28AV' where id=3; -update noar ti set v0='UR4U43GFPKQF28AV' where id=3; -update noar tt set b1='BV2WBK2M5EQJ89VGDNC9C' where id=3; -update noar ti set b1='BV2WBK2M5EQJ89VGDNC9C' where id=3; -update noar tt set v0='ZKZ8RO' where id=3; -update noar ti set v0='ZKZ8RO' where id=3; -update noar tt set b2='4SVQWVJ9' where id=3; -update noar ti set b2='4SVQWVJ9' where id=3; -update noar tt set v0='2QKXMN4IFF8Z1GXHNACI81KE1663FQ' where id=4; -update noar ti set v0='2QKXMN4IFF8Z1GXHNACI81KE1663FQ' where id=4; -update noar tt set b0='R3IFSPI0M' where id=4; -update noar ti set b0='R3IFSPI0M' where id=4; -update noar tt set v0='OJMAJMR2A0NHTYEI5W5C8D49' where id=4; -update noar ti set v0='OJMAJMR2A0NHTYEI5W5C8D49' where id=4; -update noar tt set b1='K4W0WDR1JRNRFVWCAQ6XT4WJ4C6XF' where id=4; -update noar ti set b1='K4W0WDR1JRNRFVWCAQ6XT4WJ4C6XF' where id=4; -update noar tt set v0='8768' where id=4; -update noar ti set v0='8768' where id=4; -update noar tt set b2='DVSHBK' where id=4; -update noar ti set b2='DVSHBK' where id=4; -update noar tt set v0='FPT1OM5PPLPB6MWCHQQH3R5Q4Q7VA' where id=5; -update noar ti set v0='FPT1OM5PPLPB6MWCHQQH3R5Q4Q7VA' where id=5; -update noar tt set b0='0NTBNZO0E5DZXHPL4UGL80VL525S2ZFV' where id=5; -update noar ti set b0='0NTBNZO0E5DZXHPL4UGL80VL525S2ZFV' where id=5; -update noar tt set v0='J8XLH1TN4GKWHPLD' where id=5; -update noar ti set v0='J8XLH1TN4GKWHPLD' where id=5; -update noar tt set b1='BIGO8S80J8R4QEQ5C1LZ' where id=5; -update noar ti set b1='BIGO8S80J8R4QEQ5C1LZ' where id=5; -update noar tt set v0='ST' where id=5; -update noar ti set v0='ST' where id=5; -update noar tt set b2='H8F10L06U' where id=5; -update noar ti set b2='H8F10L06U' where id=5; -update noar tt set v0='3VQ1LSWAMUVP' where id=6; -update noar ti set v0='3VQ1LSWAMUVP' where id=6; -update noar tt set b0='0N5RBUGCUXQHGV6DT2HY4P' where id=6; -update noar ti set b0='0N5RBUGCUXQHGV6DT2HY4P' where id=6; -update noar tt set v0='LW' where id=6; -update noar ti set v0='LW' where id=6; -update noar tt set b1='XC7T528FA5G' where id=6; -update noar ti set b1='XC7T528FA5G' where id=6; -update noar tt set v0='HDAVQ5PBEOK6CD108VYAP6SINEVV' where id=6; -update noar ti set v0='HDAVQ5PBEOK6CD108VYAP6SINEVV' where id=6; -update noar tt set b2='M3YKWCQQQWZ4CURX0ONL4TE7' where id=6; -update noar ti set b2='M3YKWCQQQWZ4CURX0ONL4TE7' where id=6; -update noar tt set v0='0IGCIK17N0F9FNQ76IO1H87VN5WKNKKB' where id=7; -update noar ti set v0='0IGCIK17N0F9FNQ76IO1H87VN5WKNKKB' where id=7; -update noar tt set b0='16F1BCE' where id=7; -update noar ti set b0='16F1BCE' where id=7; -update noar tt set v0='F7HYCT5X3V155PQ6KFEAG' where id=7; -update noar ti set v0='F7HYCT5X3V155PQ6KFEAG' where id=7; -update noar tt set b1='BCDI10FVTNMK' where id=7; -update noar ti set b1='BCDI10FVTNMK' where id=7; -update noar tt set v0='MD206ZJRKOC57CS7ISK7' where id=7; -update noar ti set v0='MD206ZJRKOC57CS7ISK7' where id=7; -update noar tt set b2='PNN11WCL2N8NQ36' where id=7; -update noar ti set b2='PNN11WCL2N8NQ36' where id=7; -update noar tt set v0='S' where id=8; -update noar ti set v0='S' where id=8; -update noar tt set b0='AT5I7DO9R1' where id=8; -update noar ti set b0='AT5I7DO9R1' where id=8; -update noar tt set v0='UBTG0KLEG678OMWELQX64M' where id=8; -update noar ti set v0='UBTG0KLEG678OMWELQX64M' where id=8; -update noar tt set b1='YCVZMH' where id=8; -update noar ti set b1='YCVZMH' where id=8; -update noar tt set v0='DIPPRLUPQRAI68V' where id=8; -update noar ti set v0='DIPPRLUPQRAI68V' where id=8; -update noar tt set b2='4TIPR78COMZCS5DOE7HJ5' where id=8; -update noar ti set b2='4TIPR78COMZCS5DOE7HJ5' where id=8; -update noar tt set v0='PN6LWWGIHYE893KE3DTN5AAVKCB81' where id=9; -update noar ti set v0='PN6LWWGIHYE893KE3DTN5AAVKCB81' where id=9; -update noar tt set b0='LUUIEVD0ZWLE8' where id=9; -update noar ti set b0='LUUIEVD0ZWLE8' where id=9; -update noar tt set v0='62Z' where id=9; -update noar ti set v0='62Z' where id=9; -update noar tt set b1='JEEBWUBR1248QKC12IE2' where id=9; -update noar ti set b1='JEEBWUBR1248QKC12IE2' where id=9; -update noar tt set v0='2SWZ' where id=9; -update noar ti set v0='2SWZ' where id=9; -update noar tt set b2='1MPY7LPQWAD6VC0' where id=9; -update noar ti set b2='1MPY7LPQWAD6VC0' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 blob null, -b1 blob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='6GJQVFSDL0KDOQ2C8BQ1PMK' where id=1; -update noar ti set v0='6GJQVFSDL0KDOQ2C8BQ1PMK' where id=1; -update noar tt set b0='ESST' where id=1; -update noar ti set b0='ESST' where id=1; -update noar tt set v0='49RXKRGWR' where id=1; -update noar ti set v0='49RXKRGWR' where id=1; -update noar tt set b1='UZNQ' where id=1; -update noar ti set b1='UZNQ' where id=1; -update noar tt set v0='0CX9WFJS90B0LXCNJ0YNU9STLFMZ6JD' where id=1; -update noar ti set v0='0CX9WFJS90B0LXCNJ0YNU9STLFMZ6JD' where id=1; -update noar tt set b2='DJ04THBCA5H6S65QTXIBUH' where id=1; -update noar ti set b2='DJ04THBCA5H6S65QTXIBUH' where id=1; -update noar tt set v0='HIXMG172FLNTZNLXY86XDTPPX33V479J' where id=2; -update noar ti set v0='HIXMG172FLNTZNLXY86XDTPPX33V479J' where id=2; -update noar tt set b0='WPUEM8U2WS99V394FEXX8IM9Q' where id=2; -update noar ti set b0='WPUEM8U2WS99V394FEXX8IM9Q' where id=2; -update noar tt set v0='H2C7KQ6PVFUFM1' where id=2; -update noar ti set v0='H2C7KQ6PVFUFM1' where id=2; -update noar tt set b1='G1JQPO8HAT0DN5UZNY4552LRIC47' where id=2; -update noar ti set b1='G1JQPO8HAT0DN5UZNY4552LRIC47' where id=2; -update noar tt set v0='TR5RC5W2EHZQ8K' where id=2; -update noar ti set v0='TR5RC5W2EHZQ8K' where id=2; -update noar tt set b2='UF1DM123QFUKM0OJ3S1MI0QV41RG' where id=2; -update noar ti set b2='UF1DM123QFUKM0OJ3S1MI0QV41RG' where id=2; -update noar tt set v0='OGCTEWDFCQD0NIAOL6U8' where id=3; -update noar ti set v0='OGCTEWDFCQD0NIAOL6U8' where id=3; -update noar tt set b0='D2EMA' where id=3; -update noar ti set b0='D2EMA' where id=3; -update noar tt set v0='IK2XQAHHCEVO20F5MP' where id=3; -update noar ti set v0='IK2XQAHHCEVO20F5MP' where id=3; -update noar tt set b1='X04490O' where id=3; -update noar ti set b1='X04490O' where id=3; -update noar tt set v0='OGQD9D' where id=3; -update noar ti set v0='OGQD9D' where id=3; -update noar tt set b2='N40NZHVEN8GYN21X2SSMVNC' where id=3; -update noar ti set b2='N40NZHVEN8GYN21X2SSMVNC' where id=3; -update noar tt set v0='5H1X21G16' where id=4; -update noar ti set v0='5H1X21G16' where id=4; -update noar tt set b0='JLS7' where id=4; -update noar ti set b0='JLS7' where id=4; -update noar tt set v0='J' where id=4; -update noar ti set v0='J' where id=4; -update noar tt set b1='6OI4ZIC42RAVBM8M71547ANB' where id=4; -update noar ti set b1='6OI4ZIC42RAVBM8M71547ANB' where id=4; -update noar tt set v0='EM1X6O0EFXVQX' where id=4; -update noar ti set v0='EM1X6O0EFXVQX' where id=4; -update noar tt set b2='09T6GKDW8K37ASUX2MSYTL0I4RN' where id=4; -update noar ti set b2='09T6GKDW8K37ASUX2MSYTL0I4RN' where id=4; -update noar tt set v0='KT1VDKRKID2GIYFPZIBNIR' where id=5; -update noar ti set v0='KT1VDKRKID2GIYFPZIBNIR' where id=5; -update noar tt set b0='SRO76FHS821' where id=5; -update noar ti set b0='SRO76FHS821' where id=5; -update noar tt set v0='LZBN4' where id=5; -update noar ti set v0='LZBN4' where id=5; -update noar tt set b1='CH4V1NSX5MFNL5EKE3' where id=5; -update noar ti set b1='CH4V1NSX5MFNL5EKE3' where id=5; -update noar tt set v0='AHRNJU17953C9QOMAT8M4G' where id=5; -update noar ti set v0='AHRNJU17953C9QOMAT8M4G' where id=5; -update noar tt set b2='1VEF06B8MB0ZPUHL3ZTVO' where id=5; -update noar ti set b2='1VEF06B8MB0ZPUHL3ZTVO' where id=5; -update noar tt set v0='X1CN2P4TZRFU3S59CPVB37O0VSFU2' where id=6; -update noar ti set v0='X1CN2P4TZRFU3S59CPVB37O0VSFU2' where id=6; -update noar tt set b0='MR' where id=6; -update noar ti set b0='MR' where id=6; -update noar tt set v0='JYWJ9E6W7X0LW79HZEN5QBBUSXC' where id=6; -update noar ti set v0='JYWJ9E6W7X0LW79HZEN5QBBUSXC' where id=6; -update noar tt set b1='XQ61ZO1AA1' where id=6; -update noar ti set b1='XQ61ZO1AA1' where id=6; -update noar tt set v0='CY1EDINWIJM6' where id=6; -update noar ti set v0='CY1EDINWIJM6' where id=6; -update noar tt set b2='3HO4T8ZLAXRSS16JF0M5VVK' where id=6; -update noar ti set b2='3HO4T8ZLAXRSS16JF0M5VVK' where id=6; -update noar tt set v0='HFI7E' where id=7; -update noar ti set v0='HFI7E' where id=7; -update noar tt set b0='E03D44VII94OE' where id=7; -update noar ti set b0='E03D44VII94OE' where id=7; -update noar tt set v0='NYTIDO7WO28479GZSMDW57NK4KE' where id=7; -update noar ti set v0='NYTIDO7WO28479GZSMDW57NK4KE' where id=7; -update noar tt set b1='IOD9URKZHINI8ZSSJEOX40GJ' where id=7; -update noar ti set b1='IOD9URKZHINI8ZSSJEOX40GJ' where id=7; -update noar tt set v0='S3Q0QEVQTNMZ' where id=7; -update noar ti set v0='S3Q0QEVQTNMZ' where id=7; -update noar tt set b2='ZK0LEYQPAXVRWGKUAI6SBBALX' where id=7; -update noar ti set b2='ZK0LEYQPAXVRWGKUAI6SBBALX' where id=7; -update noar tt set v0='QL1QUU44' where id=8; -update noar ti set v0='QL1QUU44' where id=8; -update noar tt set b0='NCGAILC2C6ABFG7Q5QATOO5KC16UMQ17' where id=8; -update noar ti set b0='NCGAILC2C6ABFG7Q5QATOO5KC16UMQ17' where id=8; -update noar tt set v0='5LFBKA' where id=8; -update noar ti set v0='5LFBKA' where id=8; -update noar tt set b1='O365AOJKCSIP1IEZB' where id=8; -update noar ti set b1='O365AOJKCSIP1IEZB' where id=8; -update noar tt set v0='VMTEZC0UMZTVVPJ31MQ6R' where id=8; -update noar ti set v0='VMTEZC0UMZTVVPJ31MQ6R' where id=8; -update noar tt set b2='2' where id=8; -update noar ti set b2='2' where id=8; -update noar tt set v0='CHC3WS3NQ8E3' where id=9; -update noar ti set v0='CHC3WS3NQ8E3' where id=9; -update noar tt set b0='7AJCETSRWGD6INIGZ0ETKQ' where id=9; -update noar ti set b0='7AJCETSRWGD6INIGZ0ETKQ' where id=9; -update noar tt set v0='QW1L77S5' where id=9; -update noar ti set v0='QW1L77S5' where id=9; -update noar tt set b1='2ACU3T' where id=9; -update noar ti set b1='2ACU3T' where id=9; -update noar tt set v0='RGT9TSQ50O5MA7FZ9HBPFE0GT6N' where id=9; -update noar ti set v0='RGT9TSQ50O5MA7FZ9HBPFE0GT6N' where id=9; -update noar tt set b2='DXD97YPLYBJ' where id=9; -update noar ti set b2='DXD97YPLYBJ' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 blob not null, -b1 blob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='YGQ0JB2U5WQP3AOI78TAV1L54F' where id=1; -update noar ti set v0='YGQ0JB2U5WQP3AOI78TAV1L54F' where id=1; -update noar tt set b0='K9Z646ATX1QJR6WKRVREPNSX' where id=1; -update noar ti set b0='K9Z646ATX1QJR6WKRVREPNSX' where id=1; -update noar tt set v0='F15NQZ' where id=1; -update noar ti set v0='F15NQZ' where id=1; -update noar tt set b1='ZH7957RP7K43J' where id=1; -update noar ti set b1='ZH7957RP7K43J' where id=1; -update noar tt set v0='3LR25MEL4' where id=1; -update noar ti set v0='3LR25MEL4' where id=1; -update noar tt set b2='9XN23HFBHAIVKQXQYV7ASFV' where id=1; -update noar ti set b2='9XN23HFBHAIVKQXQYV7ASFV' where id=1; -update noar tt set v0='YIEZTCQT09MP7597Q5JILSFYDDQ8KX' where id=2; -update noar ti set v0='YIEZTCQT09MP7597Q5JILSFYDDQ8KX' where id=2; -update noar tt set b0='RWP06VGLOSO961230YW3XTMTO6AO' where id=2; -update noar ti set b0='RWP06VGLOSO961230YW3XTMTO6AO' where id=2; -update noar tt set v0='FLHB82P5OG6T6LQ' where id=2; -update noar ti set v0='FLHB82P5OG6T6LQ' where id=2; -update noar tt set b1='0H5LMX5FF8VNCM6ACJPIKB' where id=2; -update noar ti set b1='0H5LMX5FF8VNCM6ACJPIKB' where id=2; -update noar tt set v0='CXQA3H1Z3G' where id=2; -update noar ti set v0='CXQA3H1Z3G' where id=2; -update noar tt set b2='A1KB1JFTR6O12F' where id=2; -update noar ti set b2='A1KB1JFTR6O12F' where id=2; -update noar tt set v0='E' where id=3; -update noar ti set v0='E' where id=3; -update noar tt set b0='CF' where id=3; -update noar ti set b0='CF' where id=3; -update noar tt set v0='KWS7WHHSQO584TOY2P7B9WRK9585ALZW' where id=3; -update noar ti set v0='KWS7WHHSQO584TOY2P7B9WRK9585ALZW' where id=3; -update noar tt set b1='ZLVRSZ9XGTP6ZNE3UF22VWW2' where id=3; -update noar ti set b1='ZLVRSZ9XGTP6ZNE3UF22VWW2' where id=3; -update noar tt set v0='5GL5' where id=3; -update noar ti set v0='5GL5' where id=3; -update noar tt set b2='E1JGP9CR98X4G' where id=3; -update noar ti set b2='E1JGP9CR98X4G' where id=3; -update noar tt set v0='LMEU0' where id=4; -update noar ti set v0='LMEU0' where id=4; -update noar tt set b0='QTYV3THLM0ERNESBDQC' where id=4; -update noar ti set b0='QTYV3THLM0ERNESBDQC' where id=4; -update noar tt set v0='4LDB03DGA090H40EF889SPK4EA' where id=4; -update noar ti set v0='4LDB03DGA090H40EF889SPK4EA' where id=4; -update noar tt set b1='9T7KL3YP2I6H0ITFE0QBPX' where id=4; -update noar ti set b1='9T7KL3YP2I6H0ITFE0QBPX' where id=4; -update noar tt set v0='XQAMQP15NHRP' where id=4; -update noar ti set v0='XQAMQP15NHRP' where id=4; -update noar tt set b2='IJZKGPFH1AA8SX2W4S1LLRRU6N' where id=4; -update noar ti set b2='IJZKGPFH1AA8SX2W4S1LLRRU6N' where id=4; -update noar tt set v0='VHLJMC20' where id=5; -update noar ti set v0='VHLJMC20' where id=5; -update noar tt set b0='VRLKYSSI' where id=5; -update noar ti set b0='VRLKYSSI' where id=5; -update noar tt set v0='3ZAF4NUA9ACL1T524EJDKZXUJJE7SE' where id=5; -update noar ti set v0='3ZAF4NUA9ACL1T524EJDKZXUJJE7SE' where id=5; -update noar tt set b1='7GXQ6SS0TSCSTY4E7IYFPX1' where id=5; -update noar ti set b1='7GXQ6SS0TSCSTY4E7IYFPX1' where id=5; -update noar tt set v0='KKOXIJXRR' where id=5; -update noar ti set v0='KKOXIJXRR' where id=5; -update noar tt set b2='T1EAV5PTEGWFZ' where id=5; -update noar ti set b2='T1EAV5PTEGWFZ' where id=5; -update noar tt set v0='F93EJF' where id=6; -update noar ti set v0='F93EJF' where id=6; -update noar tt set b0='7BENK' where id=6; -update noar ti set b0='7BENK' where id=6; -update noar tt set v0='NB6O0J' where id=6; -update noar ti set v0='NB6O0J' where id=6; -update noar tt set b1='S12' where id=6; -update noar ti set b1='S12' where id=6; -update noar tt set v0='LIGUYF8WNQGO7AQ3OCTWZ16CVNDJACCJ' where id=6; -update noar ti set v0='LIGUYF8WNQGO7AQ3OCTWZ16CVNDJACCJ' where id=6; -update noar tt set b2='4MUPNZTJRJNR' where id=6; -update noar ti set b2='4MUPNZTJRJNR' where id=6; -update noar tt set v0='T' where id=7; -update noar ti set v0='T' where id=7; -update noar tt set b0='L5PB8ON8PV3HW6WU967LO' where id=7; -update noar ti set b0='L5PB8ON8PV3HW6WU967LO' where id=7; -update noar tt set v0='R8AABML7ODOJOYVNI' where id=7; -update noar ti set v0='R8AABML7ODOJOYVNI' where id=7; -update noar tt set b1='IQR4KF3CQK' where id=7; -update noar ti set b1='IQR4KF3CQK' where id=7; -update noar tt set v0='8JTV0AA7PEXBY48CG' where id=7; -update noar ti set v0='8JTV0AA7PEXBY48CG' where id=7; -update noar tt set b2='HB49T79' where id=7; -update noar ti set b2='HB49T79' where id=7; -update noar tt set v0='LY5P5T7YJU0SJL13D390H8CHZ601' where id=8; -update noar ti set v0='LY5P5T7YJU0SJL13D390H8CHZ601' where id=8; -update noar tt set b0='AIS2KY6M' where id=8; -update noar ti set b0='AIS2KY6M' where id=8; -update noar tt set v0='WX8PPQ2EH5WMJY3KG08Z5F6X' where id=8; -update noar ti set v0='WX8PPQ2EH5WMJY3KG08Z5F6X' where id=8; -update noar tt set b1='TGAX97F6VW9' where id=8; -update noar ti set b1='TGAX97F6VW9' where id=8; -update noar tt set v0='WT3FTBFX3S7R833T7LZDMOA' where id=8; -update noar ti set v0='WT3FTBFX3S7R833T7LZDMOA' where id=8; -update noar tt set b2='P6MR6U788NSSRLOGQNT8UA3' where id=8; -update noar ti set b2='P6MR6U788NSSRLOGQNT8UA3' where id=8; -update noar tt set v0='P7JBAQDXAS66S7GB1UE9LUJR' where id=9; -update noar ti set v0='P7JBAQDXAS66S7GB1UE9LUJR' where id=9; -update noar tt set b0='DNVC44B0NZSYIU8XFCLF3X8ZYRI' where id=9; -update noar ti set b0='DNVC44B0NZSYIU8XFCLF3X8ZYRI' where id=9; -update noar tt set v0='E03P' where id=9; -update noar ti set v0='E03P' where id=9; -update noar tt set b1='R7SUMSY3KCAMODTJT54' where id=9; -update noar ti set b1='R7SUMSY3KCAMODTJT54' where id=9; -update noar tt set v0='LITW0FBL69AGSICB' where id=9; -update noar ti set v0='LITW0FBL69AGSICB' where id=9; -update noar tt set b2='QZF1CCV15' where id=9; -update noar ti set b2='QZF1CCV15' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 blob not null, -b1 blob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='WEICMI03B3L98HEG2L' where id=1; -update noar ti set v0='WEICMI03B3L98HEG2L' where id=1; -update noar tt set b0='6DUO87IOTWL987PVGN' where id=1; -update noar ti set b0='6DUO87IOTWL987PVGN' where id=1; -update noar tt set v0='O' where id=1; -update noar ti set v0='O' where id=1; -update noar tt set b1='AFFTHSXH4G44A10XW3ORQC9GSZW2U' where id=1; -update noar ti set b1='AFFTHSXH4G44A10XW3ORQC9GSZW2U' where id=1; -update noar tt set v0='LJBP5E' where id=1; -update noar ti set v0='LJBP5E' where id=1; -update noar tt set b2='LFQPB3FG75R0A89U79BQVZ31L6' where id=1; -update noar ti set b2='LFQPB3FG75R0A89U79BQVZ31L6' where id=1; -update noar tt set v0='H262AYQFXYGGPYW9BNA3TQG' where id=2; -update noar ti set v0='H262AYQFXYGGPYW9BNA3TQG' where id=2; -update noar tt set b0='AKU2N7SPSW5NEIGX2NDQIU8VGHEKMQ' where id=2; -update noar ti set b0='AKU2N7SPSW5NEIGX2NDQIU8VGHEKMQ' where id=2; -update noar tt set v0='N2BU8AR00M9E9N20W4G' where id=2; -update noar ti set v0='N2BU8AR00M9E9N20W4G' where id=2; -update noar tt set b1='B2GZW25XHG4Q32CCDLXF1' where id=2; -update noar ti set b1='B2GZW25XHG4Q32CCDLXF1' where id=2; -update noar tt set v0='2MM6KGL6EPGPXAL1M6' where id=2; -update noar ti set v0='2MM6KGL6EPGPXAL1M6' where id=2; -update noar tt set b2='AIGM3DHPG' where id=2; -update noar ti set b2='AIGM3DHPG' where id=2; -update noar tt set v0='J5AYDH8CYWIZK4' where id=3; -update noar ti set v0='J5AYDH8CYWIZK4' where id=3; -update noar tt set b0='PESZFGHN2OD2243NJ' where id=3; -update noar ti set b0='PESZFGHN2OD2243NJ' where id=3; -update noar tt set v0='DWTK5RGZB5P01THT' where id=3; -update noar ti set v0='DWTK5RGZB5P01THT' where id=3; -update noar tt set b1='UYW2775ZWE' where id=3; -update noar ti set b1='UYW2775ZWE' where id=3; -update noar tt set v0='3LAORLB9SSFKE2M7SQT99P' where id=3; -update noar ti set v0='3LAORLB9SSFKE2M7SQT99P' where id=3; -update noar tt set b2='AK3POI66ZGAX5R0ZFIOZF3B4NKW' where id=3; -update noar ti set b2='AK3POI66ZGAX5R0ZFIOZF3B4NKW' where id=3; -update noar tt set v0='CGQLK3UOOB30HNV3DRWI' where id=4; -update noar ti set v0='CGQLK3UOOB30HNV3DRWI' where id=4; -update noar tt set b0='K1' where id=4; -update noar ti set b0='K1' where id=4; -update noar tt set v0='PJX9HD71S6JTT8F8B77' where id=4; -update noar ti set v0='PJX9HD71S6JTT8F8B77' where id=4; -update noar tt set b1='A3HEWLX' where id=4; -update noar ti set b1='A3HEWLX' where id=4; -update noar tt set v0='YV1KF967659I5VVU8J1SU5MI5' where id=4; -update noar ti set v0='YV1KF967659I5VVU8J1SU5MI5' where id=4; -update noar tt set b2='WXW0B8ABCTL2SOFHOKQ' where id=4; -update noar ti set b2='WXW0B8ABCTL2SOFHOKQ' where id=4; -update noar tt set v0='L2WWV5SC' where id=5; -update noar ti set v0='L2WWV5SC' where id=5; -update noar tt set b0='M4FV' where id=5; -update noar ti set b0='M4FV' where id=5; -update noar tt set v0='9XH7VB9' where id=5; -update noar ti set v0='9XH7VB9' where id=5; -update noar tt set b1='VEVE' where id=5; -update noar ti set b1='VEVE' where id=5; -update noar tt set v0='REIA2RJDX3XP6BTQNG3P6XX5' where id=5; -update noar ti set v0='REIA2RJDX3XP6BTQNG3P6XX5' where id=5; -update noar tt set b2='RK22WIFGCQG9FYJ' where id=5; -update noar ti set b2='RK22WIFGCQG9FYJ' where id=5; -update noar tt set v0='6K' where id=6; -update noar ti set v0='6K' where id=6; -update noar tt set b0='KB6CI88G3IV8B4EP' where id=6; -update noar ti set b0='KB6CI88G3IV8B4EP' where id=6; -update noar tt set v0='0RDYG9FPW05KCZPT7JU' where id=6; -update noar ti set v0='0RDYG9FPW05KCZPT7JU' where id=6; -update noar tt set b1='ZSPAC2N1H3QOIEOVG' where id=6; -update noar ti set b1='ZSPAC2N1H3QOIEOVG' where id=6; -update noar tt set v0='D4BENW98MZEFV' where id=6; -update noar ti set v0='D4BENW98MZEFV' where id=6; -update noar tt set b2='ABKJ21KKF1WK191I' where id=6; -update noar ti set b2='ABKJ21KKF1WK191I' where id=6; -update noar tt set v0='EN3' where id=7; -update noar ti set v0='EN3' where id=7; -update noar tt set b0='FXVSZJXYKB' where id=7; -update noar ti set b0='FXVSZJXYKB' where id=7; -update noar tt set v0='CF918YZ2W0' where id=7; -update noar ti set v0='CF918YZ2W0' where id=7; -update noar tt set b1='94ZRG18SR29B44V69LZU2X77PE8T' where id=7; -update noar ti set b1='94ZRG18SR29B44V69LZU2X77PE8T' where id=7; -update noar tt set v0='7LA68AXM8QMVTMHNKN9G' where id=7; -update noar ti set v0='7LA68AXM8QMVTMHNKN9G' where id=7; -update noar tt set b2='2GHN46O2G0' where id=7; -update noar ti set b2='2GHN46O2G0' where id=7; -update noar tt set v0='KPHU03G4BDOUEWSSZJ7N08K' where id=8; -update noar ti set v0='KPHU03G4BDOUEWSSZJ7N08K' where id=8; -update noar tt set b0='VPDN7E4SXBP5' where id=8; -update noar ti set b0='VPDN7E4SXBP5' where id=8; -update noar tt set v0='6JWITICLBUK1PU0SEU2XOD8538' where id=8; -update noar ti set v0='6JWITICLBUK1PU0SEU2XOD8538' where id=8; -update noar tt set b1='RMMAL69OVAZJUC1QDZ0V82VWC6WNFNE' where id=8; -update noar ti set b1='RMMAL69OVAZJUC1QDZ0V82VWC6WNFNE' where id=8; -update noar tt set v0='Q197C245' where id=8; -update noar ti set v0='Q197C245' where id=8; -update noar tt set b2='K1C2F06PJKN687FQ0LO9W38GQQ' where id=8; -update noar ti set b2='K1C2F06PJKN687FQ0LO9W38GQQ' where id=8; -update noar tt set v0='MW3M6R6SB4U0ZADS02L7E0PNLW5N' where id=9; -update noar ti set v0='MW3M6R6SB4U0ZADS02L7E0PNLW5N' where id=9; -update noar tt set b0='G2V3QF13J88JYTL76MZOC' where id=9; -update noar ti set b0='G2V3QF13J88JYTL76MZOC' where id=9; -update noar tt set v0='FFK755MQG83UXHPPQLZU3F' where id=9; -update noar ti set v0='FFK755MQG83UXHPPQLZU3F' where id=9; -update noar tt set b1='SEPB2RFI9XZZN' where id=9; -update noar ti set b1='SEPB2RFI9XZZN' where id=9; -update noar tt set v0='ISRWP16H8N7O6T9T' where id=9; -update noar ti set v0='ISRWP16H8N7O6T9T' where id=9; -update noar tt set b2='YB4K6JSOUDVCTKXTA9Y23R9GDGHH' where id=9; -update noar ti set b2='YB4K6JSOUDVCTKXTA9Y23R9GDGHH' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 blob null, -b1 blob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='20WYF4OVZC3W7ICNW7CMKR571' where id=1; -update noar ti set v0='20WYF4OVZC3W7ICNW7CMKR571' where id=1; -update noar tt set b0='9H2D4OJIYMHTFJAOCI4PS75IZDE0B' where id=1; -update noar ti set b0='9H2D4OJIYMHTFJAOCI4PS75IZDE0B' where id=1; -update noar tt set v0='OH9U48T51CRSUE4ROORVXK5VPTD4' where id=1; -update noar ti set v0='OH9U48T51CRSUE4ROORVXK5VPTD4' where id=1; -update noar tt set b1='QOC3OBIOE3C2RB4LDOSO93RA267UNADV' where id=1; -update noar ti set b1='QOC3OBIOE3C2RB4LDOSO93RA267UNADV' where id=1; -update noar tt set v0='SNOK4' where id=1; -update noar ti set v0='SNOK4' where id=1; -update noar tt set b2='9HQLKNJA8J2D4R61ZQLFBEPDMZUC2H' where id=1; -update noar ti set b2='9HQLKNJA8J2D4R61ZQLFBEPDMZUC2H' where id=1; -update noar tt set v0='4797V' where id=2; -update noar ti set v0='4797V' where id=2; -update noar tt set b0='FRZ1PL9ZEAPB6H7OCGTG657MYW' where id=2; -update noar ti set b0='FRZ1PL9ZEAPB6H7OCGTG657MYW' where id=2; -update noar tt set v0='K052U605V76IRE9YFNKUUQ2HA7P' where id=2; -update noar ti set v0='K052U605V76IRE9YFNKUUQ2HA7P' where id=2; -update noar tt set b1='RZ8WM6EC0ESPB6EL' where id=2; -update noar ti set b1='RZ8WM6EC0ESPB6EL' where id=2; -update noar tt set v0='WUD2BQVLW8TJB6RNRTM59S6QM' where id=2; -update noar ti set v0='WUD2BQVLW8TJB6RNRTM59S6QM' where id=2; -update noar tt set b2='NBXF9I' where id=2; -update noar ti set b2='NBXF9I' where id=2; -update noar tt set v0='M' where id=3; -update noar ti set v0='M' where id=3; -update noar tt set b0='4FC3TGX' where id=3; -update noar ti set b0='4FC3TGX' where id=3; -update noar tt set v0='RNDPDUJ9KY97L2K5QFSI' where id=3; -update noar ti set v0='RNDPDUJ9KY97L2K5QFSI' where id=3; -update noar tt set b1='LQPQIAKV4HSUE4KDZEF8WPAWBYIRAW4B' where id=3; -update noar ti set b1='LQPQIAKV4HSUE4KDZEF8WPAWBYIRAW4B' where id=3; -update noar tt set v0='DRF5NSSJKMHQX8N935J35IF6' where id=3; -update noar ti set v0='DRF5NSSJKMHQX8N935J35IF6' where id=3; -update noar tt set b2='08S89K' where id=3; -update noar ti set b2='08S89K' where id=3; -update noar tt set v0='N2QWTZQIEQ85T0GXCI89G5A530SQ4' where id=4; -update noar ti set v0='N2QWTZQIEQ85T0GXCI89G5A530SQ4' where id=4; -update noar tt set b0='8H1P97YTNKX2BE3V51MN' where id=4; -update noar ti set b0='8H1P97YTNKX2BE3V51MN' where id=4; -update noar tt set v0='Y5Z8A8B3KV1HL8SFA0GLESUM3AI' where id=4; -update noar ti set v0='Y5Z8A8B3KV1HL8SFA0GLESUM3AI' where id=4; -update noar tt set b1='RJ6P24YM8W9G149KTLIT6G9' where id=4; -update noar ti set b1='RJ6P24YM8W9G149KTLIT6G9' where id=4; -update noar tt set v0='Z7MV61DL' where id=4; -update noar ti set v0='Z7MV61DL' where id=4; -update noar tt set b2='MPOP' where id=4; -update noar ti set b2='MPOP' where id=4; -update noar tt set v0='UX4' where id=5; -update noar ti set v0='UX4' where id=5; -update noar tt set b0='HFS772M4M0W4BQL09N115' where id=5; -update noar ti set b0='HFS772M4M0W4BQL09N115' where id=5; -update noar tt set v0='83A2RFH69OWK4YP0T5OA' where id=5; -update noar ti set v0='83A2RFH69OWK4YP0T5OA' where id=5; -update noar tt set b1='P80W' where id=5; -update noar ti set b1='P80W' where id=5; -update noar tt set v0='5H8DBQ8EOU2U' where id=5; -update noar ti set v0='5H8DBQ8EOU2U' where id=5; -update noar tt set b2='YGCZF3VH1WG8' where id=5; -update noar ti set b2='YGCZF3VH1WG8' where id=5; -update noar tt set v0='LC4BVHX8Q25KZ5NUS39E' where id=6; -update noar ti set v0='LC4BVHX8Q25KZ5NUS39E' where id=6; -update noar tt set b0='HMVYQ6VCP95S5G90P01OLIJV' where id=6; -update noar ti set b0='HMVYQ6VCP95S5G90P01OLIJV' where id=6; -update noar tt set v0='R08VF3HA6705NIVD0PHW4S9P' where id=6; -update noar ti set v0='R08VF3HA6705NIVD0PHW4S9P' where id=6; -update noar tt set b1='42PJF0EFA' where id=6; -update noar ti set b1='42PJF0EFA' where id=6; -update noar tt set v0='NY4TGA' where id=6; -update noar ti set v0='NY4TGA' where id=6; -update noar tt set b2='9XNJ5DTCYUHV' where id=6; -update noar ti set b2='9XNJ5DTCYUHV' where id=6; -update noar tt set v0='W2DP003ZW806N3FHLR2K3PQGMM' where id=7; -update noar ti set v0='W2DP003ZW806N3FHLR2K3PQGMM' where id=7; -update noar tt set b0='WUQIBA2I1HGQZEP8AH6H8730Q7UOVW' where id=7; -update noar ti set b0='WUQIBA2I1HGQZEP8AH6H8730Q7UOVW' where id=7; -update noar tt set v0='QU231SYC3FQ' where id=7; -update noar ti set v0='QU231SYC3FQ' where id=7; -update noar tt set b1='5H3FK65AFOKCBL6ZBRTD' where id=7; -update noar ti set b1='5H3FK65AFOKCBL6ZBRTD' where id=7; -update noar tt set v0='U6EO4BTB1CR7IVE71GHAMG' where id=7; -update noar ti set v0='U6EO4BTB1CR7IVE71GHAMG' where id=7; -update noar tt set b2='WI8IT5RG1SHICDNTMZBMTQ29TC9' where id=7; -update noar ti set b2='WI8IT5RG1SHICDNTMZBMTQ29TC9' where id=7; -update noar tt set v0='589UC2IMSBCK' where id=8; -update noar ti set v0='589UC2IMSBCK' where id=8; -update noar tt set b0='O' where id=8; -update noar ti set b0='O' where id=8; -update noar tt set v0='0JNRUU4EVDK7ITO7IJ40UIIJ3JL69KXE' where id=8; -update noar ti set v0='0JNRUU4EVDK7ITO7IJ40UIIJ3JL69KXE' where id=8; -update noar tt set b1='M1HKEE4SEI7N58YR' where id=8; -update noar ti set b1='M1HKEE4SEI7N58YR' where id=8; -update noar tt set v0='FMVRV63WRLKYAQS1C8' where id=8; -update noar ti set v0='FMVRV63WRLKYAQS1C8' where id=8; -update noar tt set b2='8EMABSBI51DRJPM3FIVPG8' where id=8; -update noar ti set b2='8EMABSBI51DRJPM3FIVPG8' where id=8; -update noar tt set v0='XJQ5WO' where id=9; -update noar ti set v0='XJQ5WO' where id=9; -update noar tt set b0='L38YOPYFS1VGX42I3O7X6E1LY05DSZHM' where id=9; -update noar ti set b0='L38YOPYFS1VGX42I3O7X6E1LY05DSZHM' where id=9; -update noar tt set v0='OHSO' where id=9; -update noar ti set v0='OHSO' where id=9; -update noar tt set b1='G2DXHGYBKQDITAYZLLL8YTBC58' where id=9; -update noar ti set b1='G2DXHGYBKQDITAYZLLL8YTBC58' where id=9; -update noar tt set v0='ENWO39QDNPX1HYVK6MQ1ZWJB9OLOO6B' where id=9; -update noar ti set v0='ENWO39QDNPX1HYVK6MQ1ZWJB9OLOO6B' where id=9; -update noar tt set b2='XE0LZXXQQ6VUTA4CSISAOU' where id=9; -update noar ti set b2='XE0LZXXQQ6VUTA4CSISAOU' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 blob null, -b1 blob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='ND2PP77ECRKP' where id=1; -update noar ti set v0='ND2PP77ECRKP' where id=1; -update noar tt set b0='AWJGUS5J0RGJ3ABSQ2Q6' where id=1; -update noar ti set b0='AWJGUS5J0RGJ3ABSQ2Q6' where id=1; -update noar tt set v0='M04KC3DFO1PS5N2HFLHHE2DMVPQG' where id=1; -update noar ti set v0='M04KC3DFO1PS5N2HFLHHE2DMVPQG' where id=1; -update noar tt set b1='AITE7EW5422TEV' where id=1; -update noar ti set b1='AITE7EW5422TEV' where id=1; -update noar tt set v0='7KEOTRPA1IEU4FQ9ZTWX6L' where id=1; -update noar ti set v0='7KEOTRPA1IEU4FQ9ZTWX6L' where id=1; -update noar tt set b2='6ORWC6J418DSO6LRBSETEQTF8IPP' where id=1; -update noar ti set b2='6ORWC6J418DSO6LRBSETEQTF8IPP' where id=1; -update noar tt set v0='LDWX6DP5K6YU1TIJYJCGO2EW8K68' where id=2; -update noar ti set v0='LDWX6DP5K6YU1TIJYJCGO2EW8K68' where id=2; -update noar tt set b0='LXFP662OXMYLWX0C2WU9MEG9JXZW4Y' where id=2; -update noar ti set b0='LXFP662OXMYLWX0C2WU9MEG9JXZW4Y' where id=2; -update noar tt set v0='INXDX91X0OTNC7RNG' where id=2; -update noar ti set v0='INXDX91X0OTNC7RNG' where id=2; -update noar tt set b1='5NSNHDB4WERK81J4H' where id=2; -update noar ti set b1='5NSNHDB4WERK81J4H' where id=2; -update noar tt set v0='5R' where id=2; -update noar ti set v0='5R' where id=2; -update noar tt set b2='HW357HOGSMGCFD' where id=2; -update noar ti set b2='HW357HOGSMGCFD' where id=2; -update noar tt set v0='7HZTV' where id=3; -update noar ti set v0='7HZTV' where id=3; -update noar tt set b0='0D8Y5A10XZS5' where id=3; -update noar ti set b0='0D8Y5A10XZS5' where id=3; -update noar tt set v0='7FGKHAYR3VD' where id=3; -update noar ti set v0='7FGKHAYR3VD' where id=3; -update noar tt set b1='SP4P636SC5C5LUB88SEJBL6CGXL2SP' where id=3; -update noar ti set b1='SP4P636SC5C5LUB88SEJBL6CGXL2SP' where id=3; -update noar tt set v0='DDMN6XJ9SU1UWC2G7' where id=3; -update noar ti set v0='DDMN6XJ9SU1UWC2G7' where id=3; -update noar tt set b2='SRUU86A5' where id=3; -update noar ti set b2='SRUU86A5' where id=3; -update noar tt set v0='DF8ALNS0QGSWXU41MSQU5WVL5T0ID3' where id=4; -update noar ti set v0='DF8ALNS0QGSWXU41MSQU5WVL5T0ID3' where id=4; -update noar tt set b0='G' where id=4; -update noar ti set b0='G' where id=4; -update noar tt set v0='PPZD45M9LEUMTA165V5HTQVMBAR8PG16' where id=4; -update noar ti set v0='PPZD45M9LEUMTA165V5HTQVMBAR8PG16' where id=4; -update noar tt set b1='WR80AKGVKC7J925U1N0KTKHTFU' where id=4; -update noar ti set b1='WR80AKGVKC7J925U1N0KTKHTFU' where id=4; -update noar tt set v0='7MR0OY5K7' where id=4; -update noar ti set v0='7MR0OY5K7' where id=4; -update noar tt set b2='PJWOOMHF6BP0' where id=4; -update noar ti set b2='PJWOOMHF6BP0' where id=4; -update noar tt set v0='8ROI54VXJ' where id=5; -update noar ti set v0='8ROI54VXJ' where id=5; -update noar tt set b0='0C8UDPQA5VL6LSZGZNLFL8N6YEMCC' where id=5; -update noar ti set b0='0C8UDPQA5VL6LSZGZNLFL8N6YEMCC' where id=5; -update noar tt set v0='Y725NS0VBPBY' where id=5; -update noar ti set v0='Y725NS0VBPBY' where id=5; -update noar tt set b1='LD5IUFX5L737GGJAZ' where id=5; -update noar ti set b1='LD5IUFX5L737GGJAZ' where id=5; -update noar tt set v0='EQ6QX4ZH4T24HB4SFTG22FS' where id=5; -update noar ti set v0='EQ6QX4ZH4T24HB4SFTG22FS' where id=5; -update noar tt set b2='AJZA7' where id=5; -update noar ti set b2='AJZA7' where id=5; -update noar tt set v0='EFBN461325WFCE2PN6PNRRZPW1VCP' where id=6; -update noar ti set v0='EFBN461325WFCE2PN6PNRRZPW1VCP' where id=6; -update noar tt set b0='S5RI29RT8DN3QSP7WNNIIKBN2YMBQ4K' where id=6; -update noar ti set b0='S5RI29RT8DN3QSP7WNNIIKBN2YMBQ4K' where id=6; -update noar tt set v0='R1673BU9DVZLTM7SQR8W4OP39CD' where id=6; -update noar ti set v0='R1673BU9DVZLTM7SQR8W4OP39CD' where id=6; -update noar tt set b1='P5IPF01TNVJDQQB4ML7W' where id=6; -update noar ti set b1='P5IPF01TNVJDQQB4ML7W' where id=6; -update noar tt set v0='R19TN5' where id=6; -update noar ti set v0='R19TN5' where id=6; -update noar tt set b2='SD' where id=6; -update noar ti set b2='SD' where id=6; -update noar tt set v0='9YGI8PSBUCN0S05Y' where id=7; -update noar ti set v0='9YGI8PSBUCN0S05Y' where id=7; -update noar tt set b0='7' where id=7; -update noar ti set b0='7' where id=7; -update noar tt set v0='AUD2YEM25JORQFIZ98TSWJI' where id=7; -update noar ti set v0='AUD2YEM25JORQFIZ98TSWJI' where id=7; -update noar tt set b1='6FQ' where id=7; -update noar ti set b1='6FQ' where id=7; -update noar tt set v0='4YZ3R6D9P26L199FHJ' where id=7; -update noar ti set v0='4YZ3R6D9P26L199FHJ' where id=7; -update noar tt set b2='SKEEMR1W5HXDVT' where id=7; -update noar ti set b2='SKEEMR1W5HXDVT' where id=7; -update noar tt set v0='UFGAKOCKO1YUMQISY3IM9CZ2FS5UMF' where id=8; -update noar ti set v0='UFGAKOCKO1YUMQISY3IM9CZ2FS5UMF' where id=8; -update noar tt set b0='SF2EAXMCDJLGK27R' where id=8; -update noar ti set b0='SF2EAXMCDJLGK27R' where id=8; -update noar tt set v0='G48Y' where id=8; -update noar ti set v0='G48Y' where id=8; -update noar tt set b1='79615FMJ4CX2LUC6CLKO8I' where id=8; -update noar ti set b1='79615FMJ4CX2LUC6CLKO8I' where id=8; -update noar tt set v0='7WEESB35FNXUWSQPZ366AC03KB9SU' where id=8; -update noar ti set v0='7WEESB35FNXUWSQPZ366AC03KB9SU' where id=8; -update noar tt set b2='QN9Y9BW58HI5FMNQQZ7N9QPLTSS' where id=8; -update noar ti set b2='QN9Y9BW58HI5FMNQQZ7N9QPLTSS' where id=8; -update noar tt set v0='CHYCYP1BCMAM4E6PBCB2R9KQ' where id=9; -update noar ti set v0='CHYCYP1BCMAM4E6PBCB2R9KQ' where id=9; -update noar tt set b0='FEPD1UGN0Y' where id=9; -update noar ti set b0='FEPD1UGN0Y' where id=9; -update noar tt set v0='0BAHVCLWR3NR' where id=9; -update noar ti set v0='0BAHVCLWR3NR' where id=9; -update noar tt set b1='8EZNK8WJMAW' where id=9; -update noar ti set b1='8EZNK8WJMAW' where id=9; -update noar tt set v0='FUB3OLP3CV68U6FA4NX' where id=9; -update noar ti set v0='FUB3OLP3CV68U6FA4NX' where id=9; -update noar tt set b2='0AEBIN4G49NDO' where id=9; -update noar ti set b2='0AEBIN4G49NDO' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 blob not null, -b1 blob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='Y602IAFU4ZDN78RFKC910' where id=1; -update noar ti set v0='Y602IAFU4ZDN78RFKC910' where id=1; -update noar tt set b0='1WEZPKHBDRDBPGSPUPR' where id=1; -update noar ti set b0='1WEZPKHBDRDBPGSPUPR' where id=1; -update noar tt set v0='26VMS6SDST8YQZTVKXMMHQ7Z6HV' where id=1; -update noar ti set v0='26VMS6SDST8YQZTVKXMMHQ7Z6HV' where id=1; -update noar tt set b1='AGF46JL01951ANG' where id=1; -update noar ti set b1='AGF46JL01951ANG' where id=1; -update noar tt set v0='VV9ITRDQ43CPY81D47P' where id=1; -update noar ti set v0='VV9ITRDQ43CPY81D47P' where id=1; -update noar tt set b2='XXH54NGZK49' where id=1; -update noar ti set b2='XXH54NGZK49' where id=1; -update noar tt set v0='ZMD7XTC' where id=2; -update noar ti set v0='ZMD7XTC' where id=2; -update noar tt set b0='0F61L1IXU' where id=2; -update noar ti set b0='0F61L1IXU' where id=2; -update noar tt set v0='FUACLUGQSAQ0461TRQ9' where id=2; -update noar ti set v0='FUACLUGQSAQ0461TRQ9' where id=2; -update noar tt set b1='PQV2O' where id=2; -update noar ti set b1='PQV2O' where id=2; -update noar tt set v0='H9PBXDDZG' where id=2; -update noar ti set v0='H9PBXDDZG' where id=2; -update noar tt set b2='DGJQSVSGACPE1JEH5SS8GBS6ZO0O7' where id=2; -update noar ti set b2='DGJQSVSGACPE1JEH5SS8GBS6ZO0O7' where id=2; -update noar tt set v0='OM' where id=3; -update noar ti set v0='OM' where id=3; -update noar tt set b0='0' where id=3; -update noar ti set b0='0' where id=3; -update noar tt set v0='VTKANW1WR4P9' where id=3; -update noar ti set v0='VTKANW1WR4P9' where id=3; -update noar tt set b1='KW2J2MJWNBSBLNQ' where id=3; -update noar ti set b1='KW2J2MJWNBSBLNQ' where id=3; -update noar tt set v0='W8CJCJDJNBAUWHFS' where id=3; -update noar ti set v0='W8CJCJDJNBAUWHFS' where id=3; -update noar tt set b2='HWDEO4NV0OQ46E0LT2LJULKBM' where id=3; -update noar ti set b2='HWDEO4NV0OQ46E0LT2LJULKBM' where id=3; -update noar tt set v0='B7OCMXRZTOV2QOBTLDSEULY23' where id=4; -update noar ti set v0='B7OCMXRZTOV2QOBTLDSEULY23' where id=4; -update noar tt set b0='ZC5LORFU6EZZH' where id=4; -update noar ti set b0='ZC5LORFU6EZZH' where id=4; -update noar tt set v0='Q5RGPI7S6OBRR3TLPYF' where id=4; -update noar ti set v0='Q5RGPI7S6OBRR3TLPYF' where id=4; -update noar tt set b1='DR1CIWPF' where id=4; -update noar ti set b1='DR1CIWPF' where id=4; -update noar tt set v0='2SK1C87QMNM5' where id=4; -update noar ti set v0='2SK1C87QMNM5' where id=4; -update noar tt set b2='4UX85IYKL4B5V9ASAY8KJ2WRS5' where id=4; -update noar ti set b2='4UX85IYKL4B5V9ASAY8KJ2WRS5' where id=4; -update noar tt set v0='OBE2ER96KB6GW1YBRKW33PWH894JU' where id=5; -update noar ti set v0='OBE2ER96KB6GW1YBRKW33PWH894JU' where id=5; -update noar tt set b0='QMMXYETWO70KSQ88ZYIQT6IKTMNG3MW' where id=5; -update noar ti set b0='QMMXYETWO70KSQ88ZYIQT6IKTMNG3MW' where id=5; -update noar tt set v0='MSNMKQHF3TED9HLBN42YW628JNBCI4' where id=5; -update noar ti set v0='MSNMKQHF3TED9HLBN42YW628JNBCI4' where id=5; -update noar tt set b1='U3C3ZOM8OOM3VE0G855G' where id=5; -update noar ti set b1='U3C3ZOM8OOM3VE0G855G' where id=5; -update noar tt set v0='EZWMH1SXQU2M0K15HD0VQQMA' where id=5; -update noar ti set v0='EZWMH1SXQU2M0K15HD0VQQMA' where id=5; -update noar tt set b2='HNLDRQ6XQANK' where id=5; -update noar ti set b2='HNLDRQ6XQANK' where id=5; -update noar tt set v0='YERRW4C40' where id=6; -update noar ti set v0='YERRW4C40' where id=6; -update noar tt set b0='JD' where id=6; -update noar ti set b0='JD' where id=6; -update noar tt set v0='2MKYHYMVEGZSEWCMGRX6SQ332' where id=6; -update noar ti set v0='2MKYHYMVEGZSEWCMGRX6SQ332' where id=6; -update noar tt set b1='4DMB6ETH6JRGK' where id=6; -update noar ti set b1='4DMB6ETH6JRGK' where id=6; -update noar tt set v0='U19I' where id=6; -update noar ti set v0='U19I' where id=6; -update noar tt set b2='DMK2D8UL0E8HG166743YVX65' where id=6; -update noar ti set b2='DMK2D8UL0E8HG166743YVX65' where id=6; -update noar tt set v0='EPZXTZLOFL7MJYZHASYJ50D7FQY0D8' where id=7; -update noar ti set v0='EPZXTZLOFL7MJYZHASYJ50D7FQY0D8' where id=7; -update noar tt set b0='1CVRAPLY6DEO1CGHDLI47TL27' where id=7; -update noar ti set b0='1CVRAPLY6DEO1CGHDLI47TL27' where id=7; -update noar tt set v0='LONEE2W' where id=7; -update noar ti set v0='LONEE2W' where id=7; -update noar tt set b1='BDB8IMMBELQQQ3U53CQJ0PQZ1' where id=7; -update noar ti set b1='BDB8IMMBELQQQ3U53CQJ0PQZ1' where id=7; -update noar tt set v0='4Y3VQ9IUUJTLB8K8IXY2W' where id=7; -update noar ti set v0='4Y3VQ9IUUJTLB8K8IXY2W' where id=7; -update noar tt set b2='MO02Y7TMQZTN0E5HJQYMQ77IKM9TRYJA' where id=7; -update noar ti set b2='MO02Y7TMQZTN0E5HJQYMQ77IKM9TRYJA' where id=7; -update noar tt set v0='HLFPC18TE' where id=8; -update noar ti set v0='HLFPC18TE' where id=8; -update noar tt set b0='7B4MBS' where id=8; -update noar ti set b0='7B4MBS' where id=8; -update noar tt set v0='6GEOBRTASR9T3XNICD3E4M3XMFK' where id=8; -update noar ti set v0='6GEOBRTASR9T3XNICD3E4M3XMFK' where id=8; -update noar tt set b1='MM55K8J' where id=8; -update noar ti set b1='MM55K8J' where id=8; -update noar tt set v0='2CJ2VPETM3A64GUYYHGY9Z' where id=8; -update noar ti set v0='2CJ2VPETM3A64GUYYHGY9Z' where id=8; -update noar tt set b2='5YCQKAAXI8RLSAZSFDK612VDCVYXLB' where id=8; -update noar ti set b2='5YCQKAAXI8RLSAZSFDK612VDCVYXLB' where id=8; -update noar tt set v0='LOPMIAGSDUKTNSUJRPFFE3ZKTD2WUA' where id=9; -update noar ti set v0='LOPMIAGSDUKTNSUJRPFFE3ZKTD2WUA' where id=9; -update noar tt set b0='ZU6G05GKVVNCIW9BM87K6B6CVJ6' where id=9; -update noar ti set b0='ZU6G05GKVVNCIW9BM87K6B6CVJ6' where id=9; -update noar tt set v0='K' where id=9; -update noar ti set v0='K' where id=9; -update noar tt set b1='NUZV4K9AOKB' where id=9; -update noar ti set b1='NUZV4K9AOKB' where id=9; -update noar tt set v0='47TOGYQK' where id=9; -update noar ti set v0='47TOGYQK' where id=9; -update noar tt set b2='LMYQM002USXZKSLI466Y68XBFOR' where id=9; -update noar ti set b2='LMYQM002USXZKSLI466Y68XBFOR' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 blob not null, -b1 blob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='Q2A0INT9CK6QMP6LL3PHNN' where id=1; -update noar ti set v0='Q2A0INT9CK6QMP6LL3PHNN' where id=1; -update noar tt set b0='1NI8FRDSA4V32GG2V0C7877BXOVTPM' where id=1; -update noar ti set b0='1NI8FRDSA4V32GG2V0C7877BXOVTPM' where id=1; -update noar tt set v0='EJ43F8SBKH2OTTPFA' where id=1; -update noar ti set v0='EJ43F8SBKH2OTTPFA' where id=1; -update noar tt set b1='2U3EPQ0WU4PE' where id=1; -update noar ti set b1='2U3EPQ0WU4PE' where id=1; -update noar tt set v0='W1QJBHTGNZLMEAMT2ERYME7XHK1WGG' where id=1; -update noar ti set v0='W1QJBHTGNZLMEAMT2ERYME7XHK1WGG' where id=1; -update noar tt set b2='4GSFWL0H53KY7UMW3EEW66DU1NUS1IKN' where id=1; -update noar ti set b2='4GSFWL0H53KY7UMW3EEW66DU1NUS1IKN' where id=1; -update noar tt set v0='I61GXFOICHK' where id=2; -update noar ti set v0='I61GXFOICHK' where id=2; -update noar tt set b0='6EVWABNCX9XUBJM' where id=2; -update noar ti set b0='6EVWABNCX9XUBJM' where id=2; -update noar tt set v0='2' where id=2; -update noar ti set v0='2' where id=2; -update noar tt set b1='CYJLCXJKKG5JVVTSZC4QJSDON84C' where id=2; -update noar ti set b1='CYJLCXJKKG5JVVTSZC4QJSDON84C' where id=2; -update noar tt set v0='F22' where id=2; -update noar ti set v0='F22' where id=2; -update noar tt set b2='EY4HQ7U1BAY9WQY20' where id=2; -update noar ti set b2='EY4HQ7U1BAY9WQY20' where id=2; -update noar tt set v0='I16BD' where id=3; -update noar ti set v0='I16BD' where id=3; -update noar tt set b0='0UQQKQZ' where id=3; -update noar ti set b0='0UQQKQZ' where id=3; -update noar tt set v0='S0H6I5RQL5AJ6T2E4NT91FPI9' where id=3; -update noar ti set v0='S0H6I5RQL5AJ6T2E4NT91FPI9' where id=3; -update noar tt set b1='X6B51Q130TNRC4LY01HE2VWDMENDNI' where id=3; -update noar ti set b1='X6B51Q130TNRC4LY01HE2VWDMENDNI' where id=3; -update noar tt set v0='JBV' where id=3; -update noar ti set v0='JBV' where id=3; -update noar tt set b2='RIWJ584MDZIL1' where id=3; -update noar ti set b2='RIWJ584MDZIL1' where id=3; -update noar tt set v0='OQTNO5HNDNCQNP39CT' where id=4; -update noar ti set v0='OQTNO5HNDNCQNP39CT' where id=4; -update noar tt set b0='KGMVIO4P9GJ82BRK4QUQXOIVOY' where id=4; -update noar ti set b0='KGMVIO4P9GJ82BRK4QUQXOIVOY' where id=4; -update noar tt set v0='7UWRKN5K' where id=4; -update noar ti set v0='7UWRKN5K' where id=4; -update noar tt set b1='JM1YB057FASEW0YR4UHZSM7264Z' where id=4; -update noar ti set b1='JM1YB057FASEW0YR4UHZSM7264Z' where id=4; -update noar tt set v0='8PTEJZB0IE3DT22O1K9028KBK5Q' where id=4; -update noar ti set v0='8PTEJZB0IE3DT22O1K9028KBK5Q' where id=4; -update noar tt set b2='2WZWSX' where id=4; -update noar ti set b2='2WZWSX' where id=4; -update noar tt set v0='IZDSDTXZCM8V' where id=5; -update noar ti set v0='IZDSDTXZCM8V' where id=5; -update noar tt set b0='1AKEL9386KAYTTNSYU' where id=5; -update noar ti set b0='1AKEL9386KAYTTNSYU' where id=5; -update noar tt set v0='IJWB20DJ039' where id=5; -update noar ti set v0='IJWB20DJ039' where id=5; -update noar tt set b1='Z' where id=5; -update noar ti set b1='Z' where id=5; -update noar tt set v0='4Y8FW1K4GVEO1' where id=5; -update noar ti set v0='4Y8FW1K4GVEO1' where id=5; -update noar tt set b2='93B0P70Q' where id=5; -update noar ti set b2='93B0P70Q' where id=5; -update noar tt set v0='E3V84H3201OJNO0JQCM5' where id=6; -update noar ti set v0='E3V84H3201OJNO0JQCM5' where id=6; -update noar tt set b0='E2XVNNCF7IA' where id=6; -update noar ti set b0='E2XVNNCF7IA' where id=6; -update noar tt set v0='59FGXR' where id=6; -update noar ti set v0='59FGXR' where id=6; -update noar tt set b1='ETE0DQJ' where id=6; -update noar ti set b1='ETE0DQJ' where id=6; -update noar tt set v0='L3JWB' where id=6; -update noar ti set v0='L3JWB' where id=6; -update noar tt set b2='EVMIFKHC1H' where id=6; -update noar ti set b2='EVMIFKHC1H' where id=6; -update noar tt set v0='X7' where id=7; -update noar ti set v0='X7' where id=7; -update noar tt set b0='9HFBPJ90UBLTSABZITKY8BGRMCBL' where id=7; -update noar ti set b0='9HFBPJ90UBLTSABZITKY8BGRMCBL' where id=7; -update noar tt set v0='J9WBVXIMREWNCPYJMSNDYL63OMCQW0' where id=7; -update noar ti set v0='J9WBVXIMREWNCPYJMSNDYL63OMCQW0' where id=7; -update noar tt set b1='5' where id=7; -update noar ti set b1='5' where id=7; -update noar tt set v0='KU6WSI30JE' where id=7; -update noar ti set v0='KU6WSI30JE' where id=7; -update noar tt set b2='ILHPQMHOYDKDZRGYK4IDV' where id=7; -update noar ti set b2='ILHPQMHOYDKDZRGYK4IDV' where id=7; -update noar tt set v0='Q08C6463' where id=8; -update noar ti set v0='Q08C6463' where id=8; -update noar tt set b0='NOF4OK9Q8HX2IH3WBLVLGB6A' where id=8; -update noar ti set b0='NOF4OK9Q8HX2IH3WBLVLGB6A' where id=8; -update noar tt set v0='SJHQUR7O8G72O8V6T91NXH4MJLXA' where id=8; -update noar ti set v0='SJHQUR7O8G72O8V6T91NXH4MJLXA' where id=8; -update noar tt set b1='81JPFC7X9DFK8D7FEXGVFW' where id=8; -update noar ti set b1='81JPFC7X9DFK8D7FEXGVFW' where id=8; -update noar tt set v0='0JGGF2SVE5RL6FPIH7DJ1' where id=8; -update noar ti set v0='0JGGF2SVE5RL6FPIH7DJ1' where id=8; -update noar tt set b2='W' where id=8; -update noar ti set b2='W' where id=8; -update noar tt set v0='RQ081M3YBM9IDU9H' where id=9; -update noar ti set v0='RQ081M3YBM9IDU9H' where id=9; -update noar tt set b0='JAMCD09Q' where id=9; -update noar ti set b0='JAMCD09Q' where id=9; -update noar tt set v0='4NS' where id=9; -update noar ti set v0='4NS' where id=9; -update noar tt set b1='11GEJG373BICU3RXQPUDUG' where id=9; -update noar ti set b1='11GEJG373BICU3RXQPUDUG' where id=9; -update noar tt set v0='VYBXTUFEGH7Y' where id=9; -update noar ti set v0='VYBXTUFEGH7Y' where id=9; -update noar tt set b2='V67B861W3N3BHOJYW' where id=9; -update noar ti set b2='V67B861W3N3BHOJYW' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 blob null, -b1 blob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='WX6SD8UP23MQR660NG1PL3S00NAR' where id=1; -update noar ti set v0='WX6SD8UP23MQR660NG1PL3S00NAR' where id=1; -update noar tt set b0='F01HTDCB24YBYSPZIL3LGZ7SHF5' where id=1; -update noar ti set b0='F01HTDCB24YBYSPZIL3LGZ7SHF5' where id=1; -update noar tt set v0='X9Q8DLCWAEFJRQ' where id=1; -update noar ti set v0='X9Q8DLCWAEFJRQ' where id=1; -update noar tt set b1='PZUEYU5H13PF6J' where id=1; -update noar ti set b1='PZUEYU5H13PF6J' where id=1; -update noar tt set v0='4VV8662GPWW08UDR7U41S1ABQMUT1R' where id=1; -update noar ti set v0='4VV8662GPWW08UDR7U41S1ABQMUT1R' where id=1; -update noar tt set b2='WVDLY6NZMVB3AE0ZXH6W62KNOV4P4VB' where id=1; -update noar ti set b2='WVDLY6NZMVB3AE0ZXH6W62KNOV4P4VB' where id=1; -update noar tt set v0='0T' where id=2; -update noar ti set v0='0T' where id=2; -update noar tt set b0='4TNF54Y22LS8R75Y96YHA7MJ' where id=2; -update noar ti set b0='4TNF54Y22LS8R75Y96YHA7MJ' where id=2; -update noar tt set v0='Z6E17BS9FTBZCH9MP3723' where id=2; -update noar ti set v0='Z6E17BS9FTBZCH9MP3723' where id=2; -update noar tt set b1='11B' where id=2; -update noar ti set b1='11B' where id=2; -update noar tt set v0='8P9YDXMORM56L61687XFUPYKUWEI' where id=2; -update noar ti set v0='8P9YDXMORM56L61687XFUPYKUWEI' where id=2; -update noar tt set b2='1X840FPNMWGA93P60D7XTK1A71Q' where id=2; -update noar ti set b2='1X840FPNMWGA93P60D7XTK1A71Q' where id=2; -update noar tt set v0='OK2YHX4KLVQKCLAKBRA5COYPLOT3HOLY' where id=3; -update noar ti set v0='OK2YHX4KLVQKCLAKBRA5COYPLOT3HOLY' where id=3; -update noar tt set b0='GQO48VO6F73M6FPM1EI3CSSK25O7O9YT' where id=3; -update noar ti set b0='GQO48VO6F73M6FPM1EI3CSSK25O7O9YT' where id=3; -update noar tt set v0='8JKDSJFR1G9ZTTAA0710XE36' where id=3; -update noar ti set v0='8JKDSJFR1G9ZTTAA0710XE36' where id=3; -update noar tt set b1='NI2XQQ35PKVZ3C' where id=3; -update noar ti set b1='NI2XQQ35PKVZ3C' where id=3; -update noar tt set v0='LZAEV3A481CXHC7U6CFR' where id=3; -update noar ti set v0='LZAEV3A481CXHC7U6CFR' where id=3; -update noar tt set b2='5IXOBZB0XAS4F' where id=3; -update noar ti set b2='5IXOBZB0XAS4F' where id=3; -update noar tt set v0='HV3HE5SYGJO22CP3RH3R' where id=4; -update noar ti set v0='HV3HE5SYGJO22CP3RH3R' where id=4; -update noar tt set b0='YLN474FQ3HI' where id=4; -update noar ti set b0='YLN474FQ3HI' where id=4; -update noar tt set v0='SLU' where id=4; -update noar ti set v0='SLU' where id=4; -update noar tt set b1='PZJCTIF' where id=4; -update noar ti set b1='PZJCTIF' where id=4; -update noar tt set v0='WECNUP' where id=4; -update noar ti set v0='WECNUP' where id=4; -update noar tt set b2='YCBVO41ZQ' where id=4; -update noar ti set b2='YCBVO41ZQ' where id=4; -update noar tt set v0='UA6WJOM8NFAVLHRONT8OL' where id=5; -update noar ti set v0='UA6WJOM8NFAVLHRONT8OL' where id=5; -update noar tt set b0='BPN2I' where id=5; -update noar ti set b0='BPN2I' where id=5; -update noar tt set v0='8BL3HSDLV7TQ5O7B' where id=5; -update noar ti set v0='8BL3HSDLV7TQ5O7B' where id=5; -update noar tt set b1='PSIVO3K4HOX2S3Z62GZ' where id=5; -update noar ti set b1='PSIVO3K4HOX2S3Z62GZ' where id=5; -update noar tt set v0='FOF1VZYMXR' where id=5; -update noar ti set v0='FOF1VZYMXR' where id=5; -update noar tt set b2='LH2U2G71QM1UNODRNAA8D7' where id=5; -update noar ti set b2='LH2U2G71QM1UNODRNAA8D7' where id=5; -update noar tt set v0='G7KAMMOX8P8RJB3E0MBW' where id=6; -update noar ti set v0='G7KAMMOX8P8RJB3E0MBW' where id=6; -update noar tt set b0='DN4DIJG31DJ82AVBVWAWSO8H3TZ' where id=6; -update noar ti set b0='DN4DIJG31DJ82AVBVWAWSO8H3TZ' where id=6; -update noar tt set v0='AJQW5QNPOMBRE2XKAB35J' where id=6; -update noar ti set v0='AJQW5QNPOMBRE2XKAB35J' where id=6; -update noar tt set b1='RXYLS6W045BIX6CQ7YSDL' where id=6; -update noar ti set b1='RXYLS6W045BIX6CQ7YSDL' where id=6; -update noar tt set v0='UH72ZR9L6G5MEYVZB17C' where id=6; -update noar ti set v0='UH72ZR9L6G5MEYVZB17C' where id=6; -update noar tt set b2='V24H3PGTOHGW3QIP3DAD2R' where id=6; -update noar ti set b2='V24H3PGTOHGW3QIP3DAD2R' where id=6; -update noar tt set v0='95XHVZLKIRUJVALD' where id=7; -update noar ti set v0='95XHVZLKIRUJVALD' where id=7; -update noar tt set b0='SAHGTTP39SJHWTKRY66NVPGVIVL' where id=7; -update noar ti set b0='SAHGTTP39SJHWTKRY66NVPGVIVL' where id=7; -update noar tt set v0='JDVWC5O9' where id=7; -update noar ti set v0='JDVWC5O9' where id=7; -update noar tt set b1='R6D0T3R95H' where id=7; -update noar ti set b1='R6D0T3R95H' where id=7; -update noar tt set v0='7FNX5PNCWP11IR34A4FIZN4' where id=7; -update noar ti set v0='7FNX5PNCWP11IR34A4FIZN4' where id=7; -update noar tt set b2='0H4SDD9GVDM1A8KINANNDJFXTWZVP2S' where id=7; -update noar ti set b2='0H4SDD9GVDM1A8KINANNDJFXTWZVP2S' where id=7; -update noar tt set v0='JZSDW6' where id=8; -update noar ti set v0='JZSDW6' where id=8; -update noar tt set b0='69P4HQ10A1L7KZ6' where id=8; -update noar ti set b0='69P4HQ10A1L7KZ6' where id=8; -update noar tt set v0='6PTPU63BIQDRQYFOG9NZ81KRA' where id=8; -update noar ti set v0='6PTPU63BIQDRQYFOG9NZ81KRA' where id=8; -update noar tt set b1='QGEPCHS4Q2C380X938MROX1' where id=8; -update noar ti set b1='QGEPCHS4Q2C380X938MROX1' where id=8; -update noar tt set v0='VPXFS846SYABYWSNUTAIU7872EKLRWG' where id=8; -update noar ti set v0='VPXFS846SYABYWSNUTAIU7872EKLRWG' where id=8; -update noar tt set b2='FE5HZWN77G1RNGOLS9KACZULD8V' where id=8; -update noar ti set b2='FE5HZWN77G1RNGOLS9KACZULD8V' where id=8; -update noar tt set v0='3JSEO668C9R4NL0YUYS' where id=9; -update noar ti set v0='3JSEO668C9R4NL0YUYS' where id=9; -update noar tt set b0='5T' where id=9; -update noar ti set b0='5T' where id=9; -update noar tt set v0='W7FF5G8XQ' where id=9; -update noar ti set v0='W7FF5G8XQ' where id=9; -update noar tt set b1='JAFFL0YDCFXKZQY7O5OGN5' where id=9; -update noar ti set b1='JAFFL0YDCFXKZQY7O5OGN5' where id=9; -update noar tt set v0='09J9S' where id=9; -update noar ti set v0='09J9S' where id=9; -update noar tt set b2='28OGOEV8PZIK' where id=9; -update noar ti set b2='28OGOEV8PZIK' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 blob null, -b1 blob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='LHX2ZB6NK' where id=1; -update noar ti set v0='LHX2ZB6NK' where id=1; -update noar tt set b0='YK0EGYAGVT3QJ78PBDQ1' where id=1; -update noar ti set b0='YK0EGYAGVT3QJ78PBDQ1' where id=1; -update noar tt set v0='9U07HY9' where id=1; -update noar ti set v0='9U07HY9' where id=1; -update noar tt set b1='0J1NSUW24TO1DYZ' where id=1; -update noar ti set b1='0J1NSUW24TO1DYZ' where id=1; -update noar tt set v0='J2BWY2IE1PNESGCKSY1KZ116MI' where id=1; -update noar ti set v0='J2BWY2IE1PNESGCKSY1KZ116MI' where id=1; -update noar tt set b2='UQGZZISD' where id=1; -update noar ti set b2='UQGZZISD' where id=1; -update noar tt set v0='5PL9KC02RJMF7CB7X5Z2WS70' where id=2; -update noar ti set v0='5PL9KC02RJMF7CB7X5Z2WS70' where id=2; -update noar tt set b0='R7SV17FN6HV625O04H46HSV86M320NJY' where id=2; -update noar ti set b0='R7SV17FN6HV625O04H46HSV86M320NJY' where id=2; -update noar tt set v0='50YN' where id=2; -update noar ti set v0='50YN' where id=2; -update noar tt set b1='G70FI' where id=2; -update noar ti set b1='G70FI' where id=2; -update noar tt set v0='0H8WK7R4F1XK79A' where id=2; -update noar ti set v0='0H8WK7R4F1XK79A' where id=2; -update noar tt set b2='D5UYUPE6MM0VFMDX6K16MRS5OS1K' where id=2; -update noar ti set b2='D5UYUPE6MM0VFMDX6K16MRS5OS1K' where id=2; -update noar tt set v0='T20CD2LIB344I2JLLXCSKFZXGB6V' where id=3; -update noar ti set v0='T20CD2LIB344I2JLLXCSKFZXGB6V' where id=3; -update noar tt set b0='3UA' where id=3; -update noar ti set b0='3UA' where id=3; -update noar tt set v0='FKTSPE0A26VMUS' where id=3; -update noar ti set v0='FKTSPE0A26VMUS' where id=3; -update noar tt set b1='RBSLGY4YKY7B7RPWT8BFYYG4' where id=3; -update noar ti set b1='RBSLGY4YKY7B7RPWT8BFYYG4' where id=3; -update noar tt set v0='7BCMMQHK9QSDRO46EOSJFFCQBR' where id=3; -update noar ti set v0='7BCMMQHK9QSDRO46EOSJFFCQBR' where id=3; -update noar tt set b2='QG9YJE1HE9M7OJT0U8C70' where id=3; -update noar ti set b2='QG9YJE1HE9M7OJT0U8C70' where id=3; -update noar tt set v0='TFPDYPL' where id=4; -update noar ti set v0='TFPDYPL' where id=4; -update noar tt set b0='KPEC50J3BINWVJW8F3EN56' where id=4; -update noar ti set b0='KPEC50J3BINWVJW8F3EN56' where id=4; -update noar tt set v0='DJEH5WA29E' where id=4; -update noar ti set v0='DJEH5WA29E' where id=4; -update noar tt set b1='ZQ4CCT3HY' where id=4; -update noar ti set b1='ZQ4CCT3HY' where id=4; -update noar tt set v0='O8UK846M5' where id=4; -update noar ti set v0='O8UK846M5' where id=4; -update noar tt set b2='GRN8WHPRX3ZLTY8UAOB9LYX' where id=4; -update noar ti set b2='GRN8WHPRX3ZLTY8UAOB9LYX' where id=4; -update noar tt set v0='K6GYIE0KQKDKZ7UQX44XFYSJ1DHKBK' where id=5; -update noar ti set v0='K6GYIE0KQKDKZ7UQX44XFYSJ1DHKBK' where id=5; -update noar tt set b0='3ME77J7V' where id=5; -update noar ti set b0='3ME77J7V' where id=5; -update noar tt set v0='F' where id=5; -update noar ti set v0='F' where id=5; -update noar tt set b1='7F3V0Q5HMKDRXIDBJY9Z10SISRBCF' where id=5; -update noar ti set b1='7F3V0Q5HMKDRXIDBJY9Z10SISRBCF' where id=5; -update noar tt set v0='8VE641QJOZ937XFBAJ0KQ8GCII' where id=5; -update noar ti set v0='8VE641QJOZ937XFBAJ0KQ8GCII' where id=5; -update noar tt set b2='WB5TNZ8890' where id=5; -update noar ti set b2='WB5TNZ8890' where id=5; -update noar tt set v0='9JFGGOD9DSQ4RHPIKN12YJG31RX0DZWU' where id=6; -update noar ti set v0='9JFGGOD9DSQ4RHPIKN12YJG31RX0DZWU' where id=6; -update noar tt set b0='I9I' where id=6; -update noar ti set b0='I9I' where id=6; -update noar tt set v0='4' where id=6; -update noar ti set v0='4' where id=6; -update noar tt set b1='8OXP694JRS911ISOM' where id=6; -update noar ti set b1='8OXP694JRS911ISOM' where id=6; -update noar tt set v0='HBZS6K32FVMLQ4LQV1S' where id=6; -update noar ti set v0='HBZS6K32FVMLQ4LQV1S' where id=6; -update noar tt set b2='U9IGC00YG2O3PMB60UTTBF42QRYN' where id=6; -update noar ti set b2='U9IGC00YG2O3PMB60UTTBF42QRYN' where id=6; -update noar tt set v0='V27J877IR1KGSOKR95Z7CSFUW' where id=7; -update noar ti set v0='V27J877IR1KGSOKR95Z7CSFUW' where id=7; -update noar tt set b0='S4M02VYK43ISK1' where id=7; -update noar ti set b0='S4M02VYK43ISK1' where id=7; -update noar tt set v0='G111D74G7WDBKWWIQJPLIEM8TM' where id=7; -update noar ti set v0='G111D74G7WDBKWWIQJPLIEM8TM' where id=7; -update noar tt set b1='7R0BSXH3OU4XYMSFN' where id=7; -update noar ti set b1='7R0BSXH3OU4XYMSFN' where id=7; -update noar tt set v0='X9DNBQQ8M83FXBR5V1KZZJ0DVUIRYS' where id=7; -update noar ti set v0='X9DNBQQ8M83FXBR5V1KZZJ0DVUIRYS' where id=7; -update noar tt set b2='LMPUFNIID83ZHSTGX5ZICA4QQDTFUC' where id=7; -update noar ti set b2='LMPUFNIID83ZHSTGX5ZICA4QQDTFUC' where id=7; -update noar tt set v0='66PSAB4Z9UUPE' where id=8; -update noar ti set v0='66PSAB4Z9UUPE' where id=8; -update noar tt set b0='CGW23CYKLIVHEA2PT11R2AXWROO02YJ' where id=8; -update noar ti set b0='CGW23CYKLIVHEA2PT11R2AXWROO02YJ' where id=8; -update noar tt set v0='2EZ6YXXILZNU78H20DYQWQ7CGY' where id=8; -update noar ti set v0='2EZ6YXXILZNU78H20DYQWQ7CGY' where id=8; -update noar tt set b1='B6IJGX8ZVEQZP0RZLBPHP9QWQL0PKG' where id=8; -update noar ti set b1='B6IJGX8ZVEQZP0RZLBPHP9QWQL0PKG' where id=8; -update noar tt set v0='YRAM0HHAK2' where id=8; -update noar ti set v0='YRAM0HHAK2' where id=8; -update noar tt set b2='812X' where id=8; -update noar ti set b2='812X' where id=8; -update noar tt set v0='X2Y3XMHSABEMBGY6HIHXQNG8BEO6B' where id=9; -update noar ti set v0='X2Y3XMHSABEMBGY6HIHXQNG8BEO6B' where id=9; -update noar tt set b0='WJZKMM6WGBN6C18LN3' where id=9; -update noar ti set b0='WJZKMM6WGBN6C18LN3' where id=9; -update noar tt set v0='5VAWD2CL8ICMYZ042' where id=9; -update noar ti set v0='5VAWD2CL8ICMYZ042' where id=9; -update noar tt set b1='3O1N8KH99ZPUCOUYU' where id=9; -update noar ti set b1='3O1N8KH99ZPUCOUYU' where id=9; -update noar tt set v0='KY10SAI31P70Z3N1MAJMANV4N2' where id=9; -update noar ti set v0='KY10SAI31P70Z3N1MAJMANV4N2' where id=9; -update noar tt set b2='MWZXZTH2FSW1M2V0HQCBA9' where id=9; -update noar ti set b2='MWZXZTH2FSW1M2V0HQCBA9' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 blob not null, -b1 blob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='AZ3P63WPTNLL7X1NNJ6DV22I3VO944T1' where id=1; -update noar ti set v0='AZ3P63WPTNLL7X1NNJ6DV22I3VO944T1' where id=1; -update noar tt set b0='PO1XLCTDRY7Y9TLBHPA' where id=1; -update noar ti set b0='PO1XLCTDRY7Y9TLBHPA' where id=1; -update noar tt set v0='9EX878EK42G0S2' where id=1; -update noar ti set v0='9EX878EK42G0S2' where id=1; -update noar tt set b1='7U8XXAH8N8UT1UN7APLC703I8TFR2PCI' where id=1; -update noar ti set b1='7U8XXAH8N8UT1UN7APLC703I8TFR2PCI' where id=1; -update noar tt set v0='2A1P42HOH' where id=1; -update noar ti set v0='2A1P42HOH' where id=1; -update noar tt set b2='1ICRJXNNIIF8WO' where id=1; -update noar ti set b2='1ICRJXNNIIF8WO' where id=1; -update noar tt set v0='DERUJ7LLL5N9Q' where id=2; -update noar ti set v0='DERUJ7LLL5N9Q' where id=2; -update noar tt set b0='DQBPTL85J9MVFCV1YOH0U50' where id=2; -update noar ti set b0='DQBPTL85J9MVFCV1YOH0U50' where id=2; -update noar tt set v0='5HHCOO' where id=2; -update noar ti set v0='5HHCOO' where id=2; -update noar tt set b1='YKSRP8W60O9SINZ5B' where id=2; -update noar ti set b1='YKSRP8W60O9SINZ5B' where id=2; -update noar tt set v0='7' where id=2; -update noar ti set v0='7' where id=2; -update noar tt set b2='BVD7PQO8LSLXG' where id=2; -update noar ti set b2='BVD7PQO8LSLXG' where id=2; -update noar tt set v0='9WTOV65' where id=3; -update noar ti set v0='9WTOV65' where id=3; -update noar tt set b0='C1JI' where id=3; -update noar ti set b0='C1JI' where id=3; -update noar tt set v0='7X2P' where id=3; -update noar ti set v0='7X2P' where id=3; -update noar tt set b1='O5ISJ0UOTRD0V' where id=3; -update noar ti set b1='O5ISJ0UOTRD0V' where id=3; -update noar tt set v0='531HV67H0YIMIRZYN5' where id=3; -update noar ti set v0='531HV67H0YIMIRZYN5' where id=3; -update noar tt set b2='H8PWRDEIHS8MYWZKBUD3NH' where id=3; -update noar ti set b2='H8PWRDEIHS8MYWZKBUD3NH' where id=3; -update noar tt set v0='51FF6T23TR1NZVA7' where id=4; -update noar ti set v0='51FF6T23TR1NZVA7' where id=4; -update noar tt set b0='Y05VAK1CNJXHTL8EUZVVAVAZ' where id=4; -update noar ti set b0='Y05VAK1CNJXHTL8EUZVVAVAZ' where id=4; -update noar tt set v0='5V' where id=4; -update noar ti set v0='5V' where id=4; -update noar tt set b1='RDVU68Z6WB1YQWO59X4MVAMP4XPVHQ' where id=4; -update noar ti set b1='RDVU68Z6WB1YQWO59X4MVAMP4XPVHQ' where id=4; -update noar tt set v0='WFUL9R1UJ23M' where id=4; -update noar ti set v0='WFUL9R1UJ23M' where id=4; -update noar tt set b2='UM8J7FI35Z8Z8ZEP6MMEBTX1P4' where id=4; -update noar ti set b2='UM8J7FI35Z8Z8ZEP6MMEBTX1P4' where id=4; -update noar tt set v0='CK0TST4Z36BWT8' where id=5; -update noar ti set v0='CK0TST4Z36BWT8' where id=5; -update noar tt set b0='PF6D6FE9L1PVHL8X0KW17NJ' where id=5; -update noar ti set b0='PF6D6FE9L1PVHL8X0KW17NJ' where id=5; -update noar tt set v0='1DLCHRZ51YNTV74JQ1ZGHW6N' where id=5; -update noar ti set v0='1DLCHRZ51YNTV74JQ1ZGHW6N' where id=5; -update noar tt set b1='OR36QQU00VH1Y0ZOOWAQJ7S0IT8A2VH' where id=5; -update noar ti set b1='OR36QQU00VH1Y0ZOOWAQJ7S0IT8A2VH' where id=5; -update noar tt set v0='69RVKDO' where id=5; -update noar ti set v0='69RVKDO' where id=5; -update noar tt set b2='8XYM39IIRZAKHUG' where id=5; -update noar ti set b2='8XYM39IIRZAKHUG' where id=5; -update noar tt set v0='BVRXK5QXQ0EU9TR' where id=6; -update noar ti set v0='BVRXK5QXQ0EU9TR' where id=6; -update noar tt set b0='J5' where id=6; -update noar ti set b0='J5' where id=6; -update noar tt set v0='YLPJQQ8FZRKHQYQPWT3EU' where id=6; -update noar ti set v0='YLPJQQ8FZRKHQYQPWT3EU' where id=6; -update noar tt set b1='BPJWEXDNXEKUBDY7UFXF' where id=6; -update noar ti set b1='BPJWEXDNXEKUBDY7UFXF' where id=6; -update noar tt set v0='8BP9DNXDF37LP0BL3M8WJV5' where id=6; -update noar ti set v0='8BP9DNXDF37LP0BL3M8WJV5' where id=6; -update noar tt set b2='3CWOZ9C82GDMMIPW' where id=6; -update noar ti set b2='3CWOZ9C82GDMMIPW' where id=6; -update noar tt set v0='I9CV4IWYN9DIG23LIE' where id=7; -update noar ti set v0='I9CV4IWYN9DIG23LIE' where id=7; -update noar tt set b0='O' where id=7; -update noar ti set b0='O' where id=7; -update noar tt set v0='RO' where id=7; -update noar ti set v0='RO' where id=7; -update noar tt set b1='79W8Q835QV0LH6JTCLZ35PC3' where id=7; -update noar ti set b1='79W8Q835QV0LH6JTCLZ35PC3' where id=7; -update noar tt set v0='R33ZHBXIFOURPCGC' where id=7; -update noar ti set v0='R33ZHBXIFOURPCGC' where id=7; -update noar tt set b2='NDN1' where id=7; -update noar ti set b2='NDN1' where id=7; -update noar tt set v0='VC' where id=8; -update noar ti set v0='VC' where id=8; -update noar tt set b0='PMV3OUNE2KK9AK8' where id=8; -update noar ti set b0='PMV3OUNE2KK9AK8' where id=8; -update noar tt set v0='LXP9TPQ3TA0' where id=8; -update noar ti set v0='LXP9TPQ3TA0' where id=8; -update noar tt set b1='4VWDY9X6TTK6VBFP7YO71ZH' where id=8; -update noar ti set b1='4VWDY9X6TTK6VBFP7YO71ZH' where id=8; -update noar tt set v0='6FAHEBFDSBO4GOO0GNJ2P1GDBV1XA' where id=8; -update noar ti set v0='6FAHEBFDSBO4GOO0GNJ2P1GDBV1XA' where id=8; -update noar tt set b2='710X5MULFOIEIJ4QC6KLSRMVBSIPWN' where id=8; -update noar ti set b2='710X5MULFOIEIJ4QC6KLSRMVBSIPWN' where id=8; -update noar tt set v0='6TQJUYVPYI' where id=9; -update noar ti set v0='6TQJUYVPYI' where id=9; -update noar tt set b0='25TEDPJVYDZOHRBFN9LSMW4MV6EJ' where id=9; -update noar ti set b0='25TEDPJVYDZOHRBFN9LSMW4MV6EJ' where id=9; -update noar tt set v0='Y' where id=9; -update noar ti set v0='Y' where id=9; -update noar tt set b1='WO840FIQW0Z8NXIOGV3JCN2' where id=9; -update noar ti set b1='WO840FIQW0Z8NXIOGV3JCN2' where id=9; -update noar tt set v0='5376WRVQ3HNS2B9HAH' where id=9; -update noar ti set v0='5376WRVQ3HNS2B9HAH' where id=9; -update noar tt set b2='XUAYWQ6R525' where id=9; -update noar ti set b2='XUAYWQ6R525' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 blob not null, -b1 blob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='0YVLXIS380VWLYZ3T' where id=1; -update noar ti set v0='0YVLXIS380VWLYZ3T' where id=1; -update noar tt set b0='Z' where id=1; -update noar ti set b0='Z' where id=1; -update noar tt set v0='5GX044EA36AP1EZU' where id=1; -update noar ti set v0='5GX044EA36AP1EZU' where id=1; -update noar tt set b1='L391466IPPDH72DYJAFPPF49T3YZ3' where id=1; -update noar ti set b1='L391466IPPDH72DYJAFPPF49T3YZ3' where id=1; -update noar tt set v0='YKWPHWKG5' where id=1; -update noar ti set v0='YKWPHWKG5' where id=1; -update noar tt set b2='5KT9JT4VB1DXU27BBVN9EGNPDJ3UL4' where id=1; -update noar ti set b2='5KT9JT4VB1DXU27BBVN9EGNPDJ3UL4' where id=1; -update noar tt set v0='R88NYQ5M63YZ0DK35M' where id=2; -update noar ti set v0='R88NYQ5M63YZ0DK35M' where id=2; -update noar tt set b0='KV0XPQS8E9LGFF1T5Q0U' where id=2; -update noar ti set b0='KV0XPQS8E9LGFF1T5Q0U' where id=2; -update noar tt set v0='PXXRJOQA1OISFZA7W254BVD16' where id=2; -update noar ti set v0='PXXRJOQA1OISFZA7W254BVD16' where id=2; -update noar tt set b1='72USMKIQIQEYL2X50OJZBLQL' where id=2; -update noar ti set b1='72USMKIQIQEYL2X50OJZBLQL' where id=2; -update noar tt set v0='AJR5DLB8AWOO209T' where id=2; -update noar ti set v0='AJR5DLB8AWOO209T' where id=2; -update noar tt set b2='A6HHP' where id=2; -update noar ti set b2='A6HHP' where id=2; -update noar tt set v0='K9DCFOA90R90K59' where id=3; -update noar ti set v0='K9DCFOA90R90K59' where id=3; -update noar tt set b0='8EK66P8JVUD90XPX88EC4NJPSM93H' where id=3; -update noar ti set b0='8EK66P8JVUD90XPX88EC4NJPSM93H' where id=3; -update noar tt set v0='P3IRFC0Z' where id=3; -update noar ti set v0='P3IRFC0Z' where id=3; -update noar tt set b1='Z9YAVRQIW9KT' where id=3; -update noar ti set b1='Z9YAVRQIW9KT' where id=3; -update noar tt set v0='P7MVISGR64LL' where id=3; -update noar ti set v0='P7MVISGR64LL' where id=3; -update noar tt set b2='DVJYV4C' where id=3; -update noar ti set b2='DVJYV4C' where id=3; -update noar tt set v0='VG0AOVVTC56CIU659DDG01DU8' where id=4; -update noar ti set v0='VG0AOVVTC56CIU659DDG01DU8' where id=4; -update noar tt set b0='DCDOLP1884XG7JUVAI1OIMU97KYPGKTU' where id=4; -update noar ti set b0='DCDOLP1884XG7JUVAI1OIMU97KYPGKTU' where id=4; -update noar tt set v0='LKAO30TFXYD2AU' where id=4; -update noar ti set v0='LKAO30TFXYD2AU' where id=4; -update noar tt set b1='PJ7YED5XOR31UBSUOFQ7X0VN977DP' where id=4; -update noar ti set b1='PJ7YED5XOR31UBSUOFQ7X0VN977DP' where id=4; -update noar tt set v0='HG0BVR' where id=4; -update noar ti set v0='HG0BVR' where id=4; -update noar tt set b2='1VR7KMWPMCBBJQMQZS' where id=4; -update noar ti set b2='1VR7KMWPMCBBJQMQZS' where id=4; -update noar tt set v0='8AFIOP9ZMAF94QE5' where id=5; -update noar ti set v0='8AFIOP9ZMAF94QE5' where id=5; -update noar tt set b0='FKHBY19LJYSH9ZQIZT01AK916AO426QE' where id=5; -update noar ti set b0='FKHBY19LJYSH9ZQIZT01AK916AO426QE' where id=5; -update noar tt set v0='MXOCJC8NUWEY' where id=5; -update noar ti set v0='MXOCJC8NUWEY' where id=5; -update noar tt set b1='EJGJ5BND76L8JU37' where id=5; -update noar ti set b1='EJGJ5BND76L8JU37' where id=5; -update noar tt set v0='AY3MJG4KFTII3KXHY68XKG43NB5YF' where id=5; -update noar ti set v0='AY3MJG4KFTII3KXHY68XKG43NB5YF' where id=5; -update noar tt set b2='52KCUMMX2YVZ2NE' where id=5; -update noar ti set b2='52KCUMMX2YVZ2NE' where id=5; -update noar tt set v0='5X0' where id=6; -update noar ti set v0='5X0' where id=6; -update noar tt set b0='K' where id=6; -update noar ti set b0='K' where id=6; -update noar tt set v0='2Q86CNGW1DKTBP3T6GQULKUPAF' where id=6; -update noar ti set v0='2Q86CNGW1DKTBP3T6GQULKUPAF' where id=6; -update noar tt set b1='HAY' where id=6; -update noar ti set b1='HAY' where id=6; -update noar tt set v0='CQKFFKVR31TMN7WMVZL' where id=6; -update noar ti set v0='CQKFFKVR31TMN7WMVZL' where id=6; -update noar tt set b2='JZTQMS2' where id=6; -update noar ti set b2='JZTQMS2' where id=6; -update noar tt set v0='P9AM8MJIHX2DC6PXDQ' where id=7; -update noar ti set v0='P9AM8MJIHX2DC6PXDQ' where id=7; -update noar tt set b0='VDZK2CT6F08RCBW8G' where id=7; -update noar ti set b0='VDZK2CT6F08RCBW8G' where id=7; -update noar tt set v0='P6V0CVPR' where id=7; -update noar ti set v0='P6V0CVPR' where id=7; -update noar tt set b1='YQD762IVWTTZMJYIIQ19963' where id=7; -update noar ti set b1='YQD762IVWTTZMJYIIQ19963' where id=7; -update noar tt set v0='AP' where id=7; -update noar ti set v0='AP' where id=7; -update noar tt set b2='OV91JL626479BQB40GYOOYX' where id=7; -update noar ti set b2='OV91JL626479BQB40GYOOYX' where id=7; -update noar tt set v0='3L1Z3P76WZ3JSTTRFGK6Z' where id=8; -update noar ti set v0='3L1Z3P76WZ3JSTTRFGK6Z' where id=8; -update noar tt set b0='X3BTIIWS1MRWA1NZHS' where id=8; -update noar ti set b0='X3BTIIWS1MRWA1NZHS' where id=8; -update noar tt set v0='9NBFK5DWNB2V0W37L5LCRQH' where id=8; -update noar ti set v0='9NBFK5DWNB2V0W37L5LCRQH' where id=8; -update noar tt set b1='89T8PW6QPWU8M' where id=8; -update noar ti set b1='89T8PW6QPWU8M' where id=8; -update noar tt set v0='0ZZ7ZDDX5JEEADT0HZPZ270NPD1' where id=8; -update noar ti set v0='0ZZ7ZDDX5JEEADT0HZPZ270NPD1' where id=8; -update noar tt set b2='D3LGKX9V70TD509EBF5DM1P13FEJ' where id=8; -update noar ti set b2='D3LGKX9V70TD509EBF5DM1P13FEJ' where id=8; -update noar tt set v0='5O2EIBBM' where id=9; -update noar ti set v0='5O2EIBBM' where id=9; -update noar tt set b0='B994FK071KTRW' where id=9; -update noar ti set b0='B994FK071KTRW' where id=9; -update noar tt set v0='YIWC9RVL6KEBIBL' where id=9; -update noar ti set v0='YIWC9RVL6KEBIBL' where id=9; -update noar tt set b1='W' where id=9; -update noar ti set b1='W' where id=9; -update noar tt set v0='R5PT' where id=9; -update noar ti set v0='R5PT' where id=9; -update noar tt set b2='R52' where id=9; -update noar ti set b2='R52' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 blob null, -b1 blob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='DHSEFFDVR85WJBP7DSRB8Q2KX9K' where id=1; -update noar ti set v0='DHSEFFDVR85WJBP7DSRB8Q2KX9K' where id=1; -update noar tt set b0='Y8KALR7YQ7IS' where id=1; -update noar ti set b0='Y8KALR7YQ7IS' where id=1; -update noar tt set v0='PSH1ZD9A2K4O3ZQKNX7ZBNZC0' where id=1; -update noar ti set v0='PSH1ZD9A2K4O3ZQKNX7ZBNZC0' where id=1; -update noar tt set b1='VKXS5S' where id=1; -update noar ti set b1='VKXS5S' where id=1; -update noar tt set v0='SQ' where id=1; -update noar ti set v0='SQ' where id=1; -update noar tt set b2='SB3Y' where id=1; -update noar ti set b2='SB3Y' where id=1; -update noar tt set v0='2EAJ9B8RMZG9BBG850OQDGLP3E' where id=2; -update noar ti set v0='2EAJ9B8RMZG9BBG850OQDGLP3E' where id=2; -update noar tt set b0='3ZOTR78N9AB97ZZ3B6N9EIOX25DSHJD' where id=2; -update noar ti set b0='3ZOTR78N9AB97ZZ3B6N9EIOX25DSHJD' where id=2; -update noar tt set v0='N55EX6288ADTC' where id=2; -update noar ti set v0='N55EX6288ADTC' where id=2; -update noar tt set b1='XEH6BK5O9C00BWUQF4' where id=2; -update noar ti set b1='XEH6BK5O9C00BWUQF4' where id=2; -update noar tt set v0='QIZEKG5ML1EMXUDTGCBQ8L' where id=2; -update noar ti set v0='QIZEKG5ML1EMXUDTGCBQ8L' where id=2; -update noar tt set b2='47K9ZIQEYU5ZKIR' where id=2; -update noar ti set b2='47K9ZIQEYU5ZKIR' where id=2; -update noar tt set v0='OPZ2QZK5AGAZ7SO9QLTGX0YWYD7' where id=3; -update noar ti set v0='OPZ2QZK5AGAZ7SO9QLTGX0YWYD7' where id=3; -update noar tt set b0='X8SODI4' where id=3; -update noar ti set b0='X8SODI4' where id=3; -update noar tt set v0='IH' where id=3; -update noar ti set v0='IH' where id=3; -update noar tt set b1='A84SWZ' where id=3; -update noar ti set b1='A84SWZ' where id=3; -update noar tt set v0='5MSYZ4U9ROC7Q38R5NBSSASCOUAWGZ' where id=3; -update noar ti set v0='5MSYZ4U9ROC7Q38R5NBSSASCOUAWGZ' where id=3; -update noar tt set b2='W67X0PC' where id=3; -update noar ti set b2='W67X0PC' where id=3; -update noar tt set v0='7AKVP' where id=4; -update noar ti set v0='7AKVP' where id=4; -update noar tt set b0='HZ2QD1I0W2O' where id=4; -update noar ti set b0='HZ2QD1I0W2O' where id=4; -update noar tt set v0='Q3EHWNVO8J3PDZP8QM3DAWOPU' where id=4; -update noar ti set v0='Q3EHWNVO8J3PDZP8QM3DAWOPU' where id=4; -update noar tt set b1='6WL6EM8UOKTYCKXRO9R4B0CG4W65A8I' where id=4; -update noar ti set b1='6WL6EM8UOKTYCKXRO9R4B0CG4W65A8I' where id=4; -update noar tt set v0='NA5ZC4H2JNDSXOM1AO2V9UPC' where id=4; -update noar ti set v0='NA5ZC4H2JNDSXOM1AO2V9UPC' where id=4; -update noar tt set b2='X0DDD' where id=4; -update noar ti set b2='X0DDD' where id=4; -update noar tt set v0='EVZ4AC' where id=5; -update noar ti set v0='EVZ4AC' where id=5; -update noar tt set b0='QN36IYT17QH5XMO3VXWNWK18' where id=5; -update noar ti set b0='QN36IYT17QH5XMO3VXWNWK18' where id=5; -update noar tt set v0='N39R3U6I7QAHR0QEJO697P' where id=5; -update noar ti set v0='N39R3U6I7QAHR0QEJO697P' where id=5; -update noar tt set b1='JYCB30FB3MLTSX3GTVJN6GINTD3M4S' where id=5; -update noar ti set b1='JYCB30FB3MLTSX3GTVJN6GINTD3M4S' where id=5; -update noar tt set v0='S579UFD1V2APOYNMKWRIW42OWYVDZSIT' where id=5; -update noar ti set v0='S579UFD1V2APOYNMKWRIW42OWYVDZSIT' where id=5; -update noar tt set b2='C1BNPBM' where id=5; -update noar ti set b2='C1BNPBM' where id=5; -update noar tt set v0='GPA' where id=6; -update noar ti set v0='GPA' where id=6; -update noar tt set b0='MZKBTND6UZN7ITHCZFVB4JLR2JP' where id=6; -update noar ti set b0='MZKBTND6UZN7ITHCZFVB4JLR2JP' where id=6; -update noar tt set v0='2751UQC7IYJSACH6GYZ33BOOJOYJG46A' where id=6; -update noar ti set v0='2751UQC7IYJSACH6GYZ33BOOJOYJG46A' where id=6; -update noar tt set b1='HSW6NPWYVGKNLURML860Z' where id=6; -update noar ti set b1='HSW6NPWYVGKNLURML860Z' where id=6; -update noar tt set v0='91OW6FNV' where id=6; -update noar ti set v0='91OW6FNV' where id=6; -update noar tt set b2='1JJO06ZD8D36AL6E13DUFCSPAH2A4V' where id=6; -update noar ti set b2='1JJO06ZD8D36AL6E13DUFCSPAH2A4V' where id=6; -update noar tt set v0='LHSPLQILJ7RFZ' where id=7; -update noar ti set v0='LHSPLQILJ7RFZ' where id=7; -update noar tt set b0='9BY5J41KU37CB09' where id=7; -update noar ti set b0='9BY5J41KU37CB09' where id=7; -update noar tt set v0='VGW5TLVO9AZL1LKCIWS6JNT5IY0JHI' where id=7; -update noar ti set v0='VGW5TLVO9AZL1LKCIWS6JNT5IY0JHI' where id=7; -update noar tt set b1='L8VST77SA70YPOPOGHQF2F0QC' where id=7; -update noar ti set b1='L8VST77SA70YPOPOGHQF2F0QC' where id=7; -update noar tt set v0='A4PDPB2AQEPS8NF6VBZZMH6O' where id=7; -update noar ti set v0='A4PDPB2AQEPS8NF6VBZZMH6O' where id=7; -update noar tt set b2='4N38USQQVQWW6FJB038GPE9R' where id=7; -update noar ti set b2='4N38USQQVQWW6FJB038GPE9R' where id=7; -update noar tt set v0='NCZBTSFGIA4CILGO' where id=8; -update noar ti set v0='NCZBTSFGIA4CILGO' where id=8; -update noar tt set b0='6ECHZ9JQLMBP0Q07Z6TGTP1G9Q79' where id=8; -update noar ti set b0='6ECHZ9JQLMBP0Q07Z6TGTP1G9Q79' where id=8; -update noar tt set v0='XKPRZVNHAPCE73J2GLXQZ7WH219H' where id=8; -update noar ti set v0='XKPRZVNHAPCE73J2GLXQZ7WH219H' where id=8; -update noar tt set b1='2QPRM9AZ5ZEPQ7QQA' where id=8; -update noar ti set b1='2QPRM9AZ5ZEPQ7QQA' where id=8; -update noar tt set v0='SGEO0WZIE53I2KAW68OHDYL' where id=8; -update noar ti set v0='SGEO0WZIE53I2KAW68OHDYL' where id=8; -update noar tt set b2='Y' where id=8; -update noar ti set b2='Y' where id=8; -update noar tt set v0='IFCABDOXG8NQMJQ0A503K' where id=9; -update noar ti set v0='IFCABDOXG8NQMJQ0A503K' where id=9; -update noar tt set b0='ASOD2014280C95II5KHU8PHJYUU77J3' where id=9; -update noar ti set b0='ASOD2014280C95II5KHU8PHJYUU77J3' where id=9; -update noar tt set v0='NV0' where id=9; -update noar ti set v0='NV0' where id=9; -update noar tt set b1='EVQQG' where id=9; -update noar ti set b1='EVQQG' where id=9; -update noar tt set v0='NGWDUBAYT8BR98GYWTRS0AT5Y004ZNA' where id=9; -update noar ti set v0='NGWDUBAYT8BR98GYWTRS0AT5Y004ZNA' where id=9; -update noar tt set b2='TVER2ZAQRH45' where id=9; -update noar ti set b2='TVER2ZAQRH45' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 blob null, -b1 blob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='L2ZPKEQKNXWN2YYU49MGO35CPABMDJK' where id=1; -update noar ti set v0='L2ZPKEQKNXWN2YYU49MGO35CPABMDJK' where id=1; -update noar tt set b0='9SJ6M' where id=1; -update noar ti set b0='9SJ6M' where id=1; -update noar tt set v0='GC' where id=1; -update noar ti set v0='GC' where id=1; -update noar tt set b1='090AVDSF1YXO' where id=1; -update noar ti set b1='090AVDSF1YXO' where id=1; -update noar tt set v0='ZY9HND214J94ADANQ7WPVCTLELPU9N' where id=1; -update noar ti set v0='ZY9HND214J94ADANQ7WPVCTLELPU9N' where id=1; -update noar tt set b2='KARZJ0N57U1K4YWBSERGXFUFU9OO' where id=1; -update noar ti set b2='KARZJ0N57U1K4YWBSERGXFUFU9OO' where id=1; -update noar tt set v0='8Q0D6Q866FAOY1LEJMCFEH584PY7L' where id=2; -update noar ti set v0='8Q0D6Q866FAOY1LEJMCFEH584PY7L' where id=2; -update noar tt set b0='OF4350YI5CP49D40Q7APJTVO4QJT' where id=2; -update noar ti set b0='OF4350YI5CP49D40Q7APJTVO4QJT' where id=2; -update noar tt set v0='CUGBMN4XM43L' where id=2; -update noar ti set v0='CUGBMN4XM43L' where id=2; -update noar tt set b1='RLLJXFN1XAYJ69VX8ATRWOUQ5SMC' where id=2; -update noar ti set b1='RLLJXFN1XAYJ69VX8ATRWOUQ5SMC' where id=2; -update noar tt set v0='PGPROYIZFLKE9811J0J1J0BVLGVTTI2' where id=2; -update noar ti set v0='PGPROYIZFLKE9811J0J1J0BVLGVTTI2' where id=2; -update noar tt set b2='RLDWAFS8BDVYBC8MH3G3JBXBB6A' where id=2; -update noar ti set b2='RLDWAFS8BDVYBC8MH3G3JBXBB6A' where id=2; -update noar tt set v0='DIX3L3TSFV925' where id=3; -update noar ti set v0='DIX3L3TSFV925' where id=3; -update noar tt set b0='0ZF6GGVPU' where id=3; -update noar ti set b0='0ZF6GGVPU' where id=3; -update noar tt set v0='3ZNO90IM46DTX' where id=3; -update noar ti set v0='3ZNO90IM46DTX' where id=3; -update noar tt set b1='QA' where id=3; -update noar ti set b1='QA' where id=3; -update noar tt set v0='FMWICQ3XX70DQ6P7BMX4292' where id=3; -update noar ti set v0='FMWICQ3XX70DQ6P7BMX4292' where id=3; -update noar tt set b2='KDHPE430N34S' where id=3; -update noar ti set b2='KDHPE430N34S' where id=3; -update noar tt set v0='R' where id=4; -update noar ti set v0='R' where id=4; -update noar tt set b0='3E6BB41RH22' where id=4; -update noar ti set b0='3E6BB41RH22' where id=4; -update noar tt set v0='6HSMF2ZYUYT7' where id=4; -update noar ti set v0='6HSMF2ZYUYT7' where id=4; -update noar tt set b1='VNUXLSWLMXFSOO9NUWR8PYZQD8I31ID' where id=4; -update noar ti set b1='VNUXLSWLMXFSOO9NUWR8PYZQD8I31ID' where id=4; -update noar tt set v0='AGEEPPRHFMIWN4B5ZZL2' where id=4; -update noar ti set v0='AGEEPPRHFMIWN4B5ZZL2' where id=4; -update noar tt set b2='9E31S6R' where id=4; -update noar ti set b2='9E31S6R' where id=4; -update noar tt set v0='K9NSDLS2COGGZ' where id=5; -update noar ti set v0='K9NSDLS2COGGZ' where id=5; -update noar tt set b0='RM3E04A92DBAO' where id=5; -update noar ti set b0='RM3E04A92DBAO' where id=5; -update noar tt set v0='6176Y9C71JPWN0KX9DE312XVB9' where id=5; -update noar ti set v0='6176Y9C71JPWN0KX9DE312XVB9' where id=5; -update noar tt set b1='LI2CEA50ALSLIPEPR64KST5C' where id=5; -update noar ti set b1='LI2CEA50ALSLIPEPR64KST5C' where id=5; -update noar tt set v0='C1S' where id=5; -update noar ti set v0='C1S' where id=5; -update noar tt set b2='CXY5V1CAD' where id=5; -update noar ti set b2='CXY5V1CAD' where id=5; -update noar tt set v0='ULF80LFO1YGYY0MTG3X5GCRF6MFT' where id=6; -update noar ti set v0='ULF80LFO1YGYY0MTG3X5GCRF6MFT' where id=6; -update noar tt set b0='X2V' where id=6; -update noar ti set b0='X2V' where id=6; -update noar tt set v0='02L92JX' where id=6; -update noar ti set v0='02L92JX' where id=6; -update noar tt set b1='6P028OR1C6VDFI8IHI1FTJXUADSH' where id=6; -update noar ti set b1='6P028OR1C6VDFI8IHI1FTJXUADSH' where id=6; -update noar tt set v0='2AKADNLLS3RV2' where id=6; -update noar ti set v0='2AKADNLLS3RV2' where id=6; -update noar tt set b2='WEL7Y1OFVVIVCTBYUU9ZK4WM' where id=6; -update noar ti set b2='WEL7Y1OFVVIVCTBYUU9ZK4WM' where id=6; -update noar tt set v0='W7BJFKDA63SGDAYH4X3U8L8CZ' where id=7; -update noar ti set v0='W7BJFKDA63SGDAYH4X3U8L8CZ' where id=7; -update noar tt set b0='FKIEVDENRSI9Q' where id=7; -update noar ti set b0='FKIEVDENRSI9Q' where id=7; -update noar tt set v0='2ZQ' where id=7; -update noar ti set v0='2ZQ' where id=7; -update noar tt set b1='2J078YEGG264HAC258XGVW5Q' where id=7; -update noar ti set b1='2J078YEGG264HAC258XGVW5Q' where id=7; -update noar tt set v0='MJ0HJWGLWIQX3T8VJ5UQWXFDB' where id=7; -update noar ti set v0='MJ0HJWGLWIQX3T8VJ5UQWXFDB' where id=7; -update noar tt set b2='MREZSUJ9TLYQMOV9CAVB1PMXPL' where id=7; -update noar ti set b2='MREZSUJ9TLYQMOV9CAVB1PMXPL' where id=7; -update noar tt set v0='BVZU7L' where id=8; -update noar ti set v0='BVZU7L' where id=8; -update noar tt set b0='MAADW2QEH0947XESB66WA86S' where id=8; -update noar ti set b0='MAADW2QEH0947XESB66WA86S' where id=8; -update noar tt set v0='4201B0DPODXITSFMM7JM' where id=8; -update noar ti set v0='4201B0DPODXITSFMM7JM' where id=8; -update noar tt set b1='2EGMSB4FFMCP4SEG3Q52OAJ' where id=8; -update noar ti set b1='2EGMSB4FFMCP4SEG3Q52OAJ' where id=8; -update noar tt set v0='ZP0FLZ0BOKO2UJYM10KZ2UAGEAA' where id=8; -update noar ti set v0='ZP0FLZ0BOKO2UJYM10KZ2UAGEAA' where id=8; -update noar tt set b2='C' where id=8; -update noar ti set b2='C' where id=8; -update noar tt set v0='XE97FCQRRW' where id=9; -update noar ti set v0='XE97FCQRRW' where id=9; -update noar tt set b0='5CFPJ50NIUK1FTW' where id=9; -update noar ti set b0='5CFPJ50NIUK1FTW' where id=9; -update noar tt set v0='P2S6GQLZWYPGZZPXHOKO4SW1DQJ5MQ' where id=9; -update noar ti set v0='P2S6GQLZWYPGZZPXHOKO4SW1DQJ5MQ' where id=9; -update noar tt set b1='P27ISRBKTI4IEYPR3ECA2CXGCT' where id=9; -update noar ti set b1='P27ISRBKTI4IEYPR3ECA2CXGCT' where id=9; -update noar tt set v0='946' where id=9; -update noar ti set v0='946' where id=9; -update noar tt set b2='R6D7AV01Z2X26Y5IH0IR1I4M40' where id=9; -update noar ti set b2='R6D7AV01Z2X26Y5IH0IR1I4M40' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 blob not null, -b1 blob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='F90EPQQQZ69622JU5K' where id=1; -update noar ti set v0='F90EPQQQZ69622JU5K' where id=1; -update noar tt set b0='ALYESR1' where id=1; -update noar ti set b0='ALYESR1' where id=1; -update noar tt set v0='4OOS0Q' where id=1; -update noar ti set v0='4OOS0Q' where id=1; -update noar tt set b1='188K91WKCXVDXIXZH' where id=1; -update noar ti set b1='188K91WKCXVDXIXZH' where id=1; -update noar tt set v0='R3V' where id=1; -update noar ti set v0='R3V' where id=1; -update noar tt set b2='7IU' where id=1; -update noar ti set b2='7IU' where id=1; -update noar tt set v0='10Z1B8CEAM6A69CXYT5BL2PW990ZC4G' where id=2; -update noar ti set v0='10Z1B8CEAM6A69CXYT5BL2PW990ZC4G' where id=2; -update noar tt set b0='1V5TVQGPZASY657S6' where id=2; -update noar ti set b0='1V5TVQGPZASY657S6' where id=2; -update noar tt set v0='ZSHAT9M' where id=2; -update noar ti set v0='ZSHAT9M' where id=2; -update noar tt set b1='EAE6SVCWIOJT8C8U43X2DT6V' where id=2; -update noar ti set b1='EAE6SVCWIOJT8C8U43X2DT6V' where id=2; -update noar tt set v0='YPR6RR0CA' where id=2; -update noar ti set v0='YPR6RR0CA' where id=2; -update noar tt set b2='WWKE17RDEHPNUDPGV8R6J' where id=2; -update noar ti set b2='WWKE17RDEHPNUDPGV8R6J' where id=2; -update noar tt set v0='VQ8672N6Q2E6K5P0Z38KDPO3K' where id=3; -update noar ti set v0='VQ8672N6Q2E6K5P0Z38KDPO3K' where id=3; -update noar tt set b0='UZN8NJ' where id=3; -update noar ti set b0='UZN8NJ' where id=3; -update noar tt set v0='AD7GISADA0HDWNMY09CC517YT0KYV' where id=3; -update noar ti set v0='AD7GISADA0HDWNMY09CC517YT0KYV' where id=3; -update noar tt set b1='I6MVIOGHRIJGK' where id=3; -update noar ti set b1='I6MVIOGHRIJGK' where id=3; -update noar tt set v0='T4QZHBCWUMLGGJ42VK3' where id=3; -update noar ti set v0='T4QZHBCWUMLGGJ42VK3' where id=3; -update noar tt set b2='RYCVEA2MWSD3V' where id=3; -update noar ti set b2='RYCVEA2MWSD3V' where id=3; -update noar tt set v0='CGV7BB3KDF9XN3AEHCHF18UEDZAP' where id=4; -update noar ti set v0='CGV7BB3KDF9XN3AEHCHF18UEDZAP' where id=4; -update noar tt set b0='ZP69NTPUU6XO' where id=4; -update noar ti set b0='ZP69NTPUU6XO' where id=4; -update noar tt set v0='R36VIVOPJI9DJVL15SN' where id=4; -update noar ti set v0='R36VIVOPJI9DJVL15SN' where id=4; -update noar tt set b1='W28XU1ETMUIZ0A8292PN6OIZKKC5EZL6' where id=4; -update noar ti set b1='W28XU1ETMUIZ0A8292PN6OIZKKC5EZL6' where id=4; -update noar tt set v0='J8' where id=4; -update noar ti set v0='J8' where id=4; -update noar tt set b2='PLZZWYV8525FIVKX0KZ9048DP' where id=4; -update noar ti set b2='PLZZWYV8525FIVKX0KZ9048DP' where id=4; -update noar tt set v0='VBBWU4PL9BRV5A8PA990K6V3HGITB5' where id=5; -update noar ti set v0='VBBWU4PL9BRV5A8PA990K6V3HGITB5' where id=5; -update noar tt set b0='2MQSNZSILV4NPB1Z' where id=5; -update noar ti set b0='2MQSNZSILV4NPB1Z' where id=5; -update noar tt set v0='S89RMBJJYKDLEO8OWA' where id=5; -update noar ti set v0='S89RMBJJYKDLEO8OWA' where id=5; -update noar tt set b1='C5031XJOHTYMFAJXITS3VHNXLA' where id=5; -update noar ti set b1='C5031XJOHTYMFAJXITS3VHNXLA' where id=5; -update noar tt set v0='6VVIYV8FE27V96TRLKMNQHXIPRNWF7' where id=5; -update noar ti set v0='6VVIYV8FE27V96TRLKMNQHXIPRNWF7' where id=5; -update noar tt set b2='VSCDKI4MSMCUMZSCL6WBRPWCTMK337' where id=5; -update noar ti set b2='VSCDKI4MSMCUMZSCL6WBRPWCTMK337' where id=5; -update noar tt set v0='54V' where id=6; -update noar ti set v0='54V' where id=6; -update noar tt set b0='82QBXJKUKKR' where id=6; -update noar ti set b0='82QBXJKUKKR' where id=6; -update noar tt set v0='T84S8S2REYUQK' where id=6; -update noar ti set v0='T84S8S2REYUQK' where id=6; -update noar tt set b1='YCJAMV8M8' where id=6; -update noar ti set b1='YCJAMV8M8' where id=6; -update noar tt set v0='AQM9L3GW44L16QUMUZ8DF0HB' where id=6; -update noar ti set v0='AQM9L3GW44L16QUMUZ8DF0HB' where id=6; -update noar tt set b2='B96PEPUPI3MR1M7SMC1VPHSSTF4' where id=6; -update noar ti set b2='B96PEPUPI3MR1M7SMC1VPHSSTF4' where id=6; -update noar tt set v0='3TUO8C' where id=7; -update noar ti set v0='3TUO8C' where id=7; -update noar tt set b0='NZSR' where id=7; -update noar ti set b0='NZSR' where id=7; -update noar tt set v0='P7RJLZFVFDSJ7TJ01HN6WDI' where id=7; -update noar ti set v0='P7RJLZFVFDSJ7TJ01HN6WDI' where id=7; -update noar tt set b1='KYQGSX5XXV2IAOXMNM5CA4S' where id=7; -update noar ti set b1='KYQGSX5XXV2IAOXMNM5CA4S' where id=7; -update noar tt set v0='TS7E29UW' where id=7; -update noar ti set v0='TS7E29UW' where id=7; -update noar tt set b2='ZJVN43FK4GY9BMH' where id=7; -update noar ti set b2='ZJVN43FK4GY9BMH' where id=7; -update noar tt set v0='QDNOCG9I9MQFJ3AUKL5E7QV6Z' where id=8; -update noar ti set v0='QDNOCG9I9MQFJ3AUKL5E7QV6Z' where id=8; -update noar tt set b0='QQD38ZSIIKI54E5D6FYQ1M2MK' where id=8; -update noar ti set b0='QQD38ZSIIKI54E5D6FYQ1M2MK' where id=8; -update noar tt set v0='ERXI0FS4DT' where id=8; -update noar ti set v0='ERXI0FS4DT' where id=8; -update noar tt set b1='YIZZMA7A1GMT78S3DTOAFW' where id=8; -update noar ti set b1='YIZZMA7A1GMT78S3DTOAFW' where id=8; -update noar tt set v0='TU8BX9WGFPGD8DLSU1ZPUP2C9' where id=8; -update noar ti set v0='TU8BX9WGFPGD8DLSU1ZPUP2C9' where id=8; -update noar tt set b2='76ZM51PQ0WQQO0' where id=8; -update noar ti set b2='76ZM51PQ0WQQO0' where id=8; -update noar tt set v0='UHVZNM72K1PYH3KPOOU4BDQOG68F' where id=9; -update noar ti set v0='UHVZNM72K1PYH3KPOOU4BDQOG68F' where id=9; -update noar tt set b0='Q6HVTBCDE4OW3JUIXFZ4LHGR' where id=9; -update noar ti set b0='Q6HVTBCDE4OW3JUIXFZ4LHGR' where id=9; -update noar tt set v0='N344L1Z2ZLE60WG4KEINUYV' where id=9; -update noar ti set v0='N344L1Z2ZLE60WG4KEINUYV' where id=9; -update noar tt set b1='0' where id=9; -update noar ti set b1='0' where id=9; -update noar tt set v0='PKNF5CZGEO3GB6UW0MTH2ATDJF1J' where id=9; -update noar ti set v0='PKNF5CZGEO3GB6UW0MTH2ATDJF1J' where id=9; -update noar tt set b2='US98NPJZDKNEH2BS95J9T4ZNOH2O5O3' where id=9; -update noar ti set b2='US98NPJZDKNEH2BS95J9T4ZNOH2O5O3' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 blob not null, -b1 blob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='PIK848930V5K7JTC0GJVJ3O4AMC' where id=1; -update noar ti set v0='PIK848930V5K7JTC0GJVJ3O4AMC' where id=1; -update noar tt set b0='DKZ6ZNLD4' where id=1; -update noar ti set b0='DKZ6ZNLD4' where id=1; -update noar tt set v0='NXSQT' where id=1; -update noar ti set v0='NXSQT' where id=1; -update noar tt set b1='2ORHQ83GDJNQ' where id=1; -update noar ti set b1='2ORHQ83GDJNQ' where id=1; -update noar tt set v0='CGLKOQ7GRQQLVI102R' where id=1; -update noar ti set v0='CGLKOQ7GRQQLVI102R' where id=1; -update noar tt set b2='L7VA' where id=1; -update noar ti set b2='L7VA' where id=1; -update noar tt set v0='L664J9DEOPHH93N8GMPXCKZH6H' where id=2; -update noar ti set v0='L664J9DEOPHH93N8GMPXCKZH6H' where id=2; -update noar tt set b0='V3X8JKCJ3UPIFJC3UOZUO443PADM0' where id=2; -update noar ti set b0='V3X8JKCJ3UPIFJC3UOZUO443PADM0' where id=2; -update noar tt set v0='SWGC0IKH8RUCLA5R32JTT5' where id=2; -update noar ti set v0='SWGC0IKH8RUCLA5R32JTT5' where id=2; -update noar tt set b1='5I175TSKW' where id=2; -update noar ti set b1='5I175TSKW' where id=2; -update noar tt set v0='65E2SPUIMZES192Z2YC' where id=2; -update noar ti set v0='65E2SPUIMZES192Z2YC' where id=2; -update noar tt set b2='TMQU7' where id=2; -update noar ti set b2='TMQU7' where id=2; -update noar tt set v0='K' where id=3; -update noar ti set v0='K' where id=3; -update noar tt set b0='IJOXWKF' where id=3; -update noar ti set b0='IJOXWKF' where id=3; -update noar tt set v0='1A9DQ' where id=3; -update noar ti set v0='1A9DQ' where id=3; -update noar tt set b1='8KNR1HXJUQQOAEU156TY' where id=3; -update noar ti set b1='8KNR1HXJUQQOAEU156TY' where id=3; -update noar tt set v0='P7WF4I04306KUMO2N' where id=3; -update noar ti set v0='P7WF4I04306KUMO2N' where id=3; -update noar tt set b2='PFMWGFO' where id=3; -update noar ti set b2='PFMWGFO' where id=3; -update noar tt set v0='IGS4JU' where id=4; -update noar ti set v0='IGS4JU' where id=4; -update noar tt set b0='8FY6ADN8TQNM' where id=4; -update noar ti set b0='8FY6ADN8TQNM' where id=4; -update noar tt set v0='1PICAVU8PDEL2MNY50N' where id=4; -update noar ti set v0='1PICAVU8PDEL2MNY50N' where id=4; -update noar tt set b1='WYV844CXF477KNUZ9REITKH1IJE' where id=4; -update noar ti set b1='WYV844CXF477KNUZ9REITKH1IJE' where id=4; -update noar tt set v0='VBLEEPOO2W56K94S4C600' where id=4; -update noar ti set v0='VBLEEPOO2W56K94S4C600' where id=4; -update noar tt set b2='F5NX90U' where id=4; -update noar ti set b2='F5NX90U' where id=4; -update noar tt set v0='XDP5IN8CETC6RW2' where id=5; -update noar ti set v0='XDP5IN8CETC6RW2' where id=5; -update noar tt set b0='NNB9K32YJ478Q2KOW7UOI2EQY3' where id=5; -update noar ti set b0='NNB9K32YJ478Q2KOW7UOI2EQY3' where id=5; -update noar tt set v0='W952HWFPD6KLAUSU1BL0X7M75' where id=5; -update noar ti set v0='W952HWFPD6KLAUSU1BL0X7M75' where id=5; -update noar tt set b1='8CVGF8YQ4PYIS8ZLM8DAXZPP4' where id=5; -update noar ti set b1='8CVGF8YQ4PYIS8ZLM8DAXZPP4' where id=5; -update noar tt set v0='5ICJ' where id=5; -update noar ti set v0='5ICJ' where id=5; -update noar tt set b2='MNUT8R1DVJ1KDL9K1' where id=5; -update noar ti set b2='MNUT8R1DVJ1KDL9K1' where id=5; -update noar tt set v0='9CO0E7RU1U0KVQ8S92FWCFY4JDQ55' where id=6; -update noar ti set v0='9CO0E7RU1U0KVQ8S92FWCFY4JDQ55' where id=6; -update noar tt set b0='KVPBH' where id=6; -update noar ti set b0='KVPBH' where id=6; -update noar tt set v0='TX' where id=6; -update noar ti set v0='TX' where id=6; -update noar tt set b1='NALHFFULK' where id=6; -update noar ti set b1='NALHFFULK' where id=6; -update noar tt set v0='RXWND4E243CHD2584ZCQ7' where id=6; -update noar ti set v0='RXWND4E243CHD2584ZCQ7' where id=6; -update noar tt set b2='F4TO6METCLEVAL2VBPZJ8TOAWD' where id=6; -update noar ti set b2='F4TO6METCLEVAL2VBPZJ8TOAWD' where id=6; -update noar tt set v0='AN7CQKR80HTNYYHRN5E9MV' where id=7; -update noar ti set v0='AN7CQKR80HTNYYHRN5E9MV' where id=7; -update noar tt set b0='JZTOSN4131P5ABLZ' where id=7; -update noar ti set b0='JZTOSN4131P5ABLZ' where id=7; -update noar tt set v0='GPOOAJKUI64C' where id=7; -update noar ti set v0='GPOOAJKUI64C' where id=7; -update noar tt set b1='42MFK7ZM7' where id=7; -update noar ti set b1='42MFK7ZM7' where id=7; -update noar tt set v0='RUOHSPKTCP1ZWPC72JEUC7AEGS' where id=7; -update noar ti set v0='RUOHSPKTCP1ZWPC72JEUC7AEGS' where id=7; -update noar tt set b2='BUU2CLFLHMTQL' where id=7; -update noar ti set b2='BUU2CLFLHMTQL' where id=7; -update noar tt set v0='2X6EJP92K892R8XTYJP67TOB8' where id=8; -update noar ti set v0='2X6EJP92K892R8XTYJP67TOB8' where id=8; -update noar tt set b0='TBSM2JLP3T7ULLWS75BUPK' where id=8; -update noar ti set b0='TBSM2JLP3T7ULLWS75BUPK' where id=8; -update noar tt set v0='HKJO6VSPOX3' where id=8; -update noar ti set v0='HKJO6VSPOX3' where id=8; -update noar tt set b1='VEYEYI6Z24671KDA0KV4KWDC4C52N' where id=8; -update noar ti set b1='VEYEYI6Z24671KDA0KV4KWDC4C52N' where id=8; -update noar tt set v0='UW9VSXQY5BYSYMOMWXJJKVCW' where id=8; -update noar ti set v0='UW9VSXQY5BYSYMOMWXJJKVCW' where id=8; -update noar tt set b2='5VKVCN1NU12T' where id=8; -update noar ti set b2='5VKVCN1NU12T' where id=8; -update noar tt set v0='IR4THFPYL8NL4WY8' where id=9; -update noar ti set v0='IR4THFPYL8NL4WY8' where id=9; -update noar tt set b0='JIPCBM9NYFTJ4NJ6HIWZR' where id=9; -update noar ti set b0='JIPCBM9NYFTJ4NJ6HIWZR' where id=9; -update noar tt set v0='1JVC7DEKL9EEY56RPOL23PH' where id=9; -update noar ti set v0='1JVC7DEKL9EEY56RPOL23PH' where id=9; -update noar tt set b1='KCWZ3OA6YZZ' where id=9; -update noar ti set b1='KCWZ3OA6YZZ' where id=9; -update noar tt set v0='JYITTD5TBMUEWTG6BJR2UA6PL6FR1' where id=9; -update noar ti set v0='JYITTD5TBMUEWTG6BJR2UA6PL6FR1' where id=9; -update noar tt set b2='8DNARRGW8XT9YTSJUQBJDOAJ9X5G5N5' where id=9; -update noar ti set b2='8DNARRGW8XT9YTSJUQBJDOAJ9X5G5N5' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 blob null, -b1 mediumblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='VASH4CFHPXPECA2G20IB66E' where id=1; -update noar ti set v0='VASH4CFHPXPECA2G20IB66E' where id=1; -update noar tt set b0='8220R2SWHAQBF' where id=1; -update noar ti set b0='8220R2SWHAQBF' where id=1; -update noar tt set v0='JFMOWJ8NJAGXB5VPFQ4QEJA6KHUH' where id=1; -update noar ti set v0='JFMOWJ8NJAGXB5VPFQ4QEJA6KHUH' where id=1; -update noar tt set b1='8LWY6AR8G7SM23OW7G4AQO' where id=1; -update noar ti set b1='8LWY6AR8G7SM23OW7G4AQO' where id=1; -update noar tt set v0='VJQZKV5O63RQ2E5KGPVC' where id=1; -update noar ti set v0='VJQZKV5O63RQ2E5KGPVC' where id=1; -update noar tt set b2='LC6' where id=1; -update noar ti set b2='LC6' where id=1; -update noar tt set v0='3O0SALEHAY7D32IPGAPP2CKJCD' where id=2; -update noar ti set v0='3O0SALEHAY7D32IPGAPP2CKJCD' where id=2; -update noar tt set b0='CVBL40Z2IAQHZ9' where id=2; -update noar ti set b0='CVBL40Z2IAQHZ9' where id=2; -update noar tt set v0='ZQJ4T0J3EQ6EH01S059HQ3QPWRSKFTKM' where id=2; -update noar ti set v0='ZQJ4T0J3EQ6EH01S059HQ3QPWRSKFTKM' where id=2; -update noar tt set b1='36U2OH3X2ZCLSAEQJEM3UO' where id=2; -update noar ti set b1='36U2OH3X2ZCLSAEQJEM3UO' where id=2; -update noar tt set v0='QELXOIF044KO6DB' where id=2; -update noar ti set v0='QELXOIF044KO6DB' where id=2; -update noar tt set b2='LR' where id=2; -update noar ti set b2='LR' where id=2; -update noar tt set v0='DFLUV' where id=3; -update noar ti set v0='DFLUV' where id=3; -update noar tt set b0='11R' where id=3; -update noar ti set b0='11R' where id=3; -update noar tt set v0='ZEKBCRHFB59701D04P8RF5A9G0U' where id=3; -update noar ti set v0='ZEKBCRHFB59701D04P8RF5A9G0U' where id=3; -update noar tt set b1='9XG1RX32GSAFXIOBNPWRYRCVRME' where id=3; -update noar ti set b1='9XG1RX32GSAFXIOBNPWRYRCVRME' where id=3; -update noar tt set v0='N9AEUSNSNQB25QGPQC49SRV' where id=3; -update noar ti set v0='N9AEUSNSNQB25QGPQC49SRV' where id=3; -update noar tt set b2='XI6M' where id=3; -update noar ti set b2='XI6M' where id=3; -update noar tt set v0='XB82QW78JJJG' where id=4; -update noar ti set v0='XB82QW78JJJG' where id=4; -update noar tt set b0='QH8AJ9R8E7LXD2E6Y9MHFTJSB9DJD8Y' where id=4; -update noar ti set b0='QH8AJ9R8E7LXD2E6Y9MHFTJSB9DJD8Y' where id=4; -update noar tt set v0='9CQN0CQG26DK' where id=4; -update noar ti set v0='9CQN0CQG26DK' where id=4; -update noar tt set b1='FGRJ9V3WT0VG9A' where id=4; -update noar ti set b1='FGRJ9V3WT0VG9A' where id=4; -update noar tt set v0='OH2TDKG6' where id=4; -update noar ti set v0='OH2TDKG6' where id=4; -update noar tt set b2='70OHIX9R16' where id=4; -update noar ti set b2='70OHIX9R16' where id=4; -update noar tt set v0='G7JPAZY3B23KMDEY7U8R' where id=5; -update noar ti set v0='G7JPAZY3B23KMDEY7U8R' where id=5; -update noar tt set b0='K2FKHCLSGYEPKU1LG4G5JRTA9MCGC5HR' where id=5; -update noar ti set b0='K2FKHCLSGYEPKU1LG4G5JRTA9MCGC5HR' where id=5; -update noar tt set v0='57YIL2J9W510T7FHY70AB0F2WTD3' where id=5; -update noar ti set v0='57YIL2J9W510T7FHY70AB0F2WTD3' where id=5; -update noar tt set b1='O' where id=5; -update noar ti set b1='O' where id=5; -update noar tt set v0='BE' where id=5; -update noar ti set v0='BE' where id=5; -update noar tt set b2='P9IGX0UVUJMF42389S8' where id=5; -update noar ti set b2='P9IGX0UVUJMF42389S8' where id=5; -update noar tt set v0='4AGJH9HHNAFT8F6YC4PSQHASE7' where id=6; -update noar ti set v0='4AGJH9HHNAFT8F6YC4PSQHASE7' where id=6; -update noar tt set b0='Y0DZX2E3LV4U0QW6V' where id=6; -update noar ti set b0='Y0DZX2E3LV4U0QW6V' where id=6; -update noar tt set v0='H6PV3VFUD0514PY' where id=6; -update noar ti set v0='H6PV3VFUD0514PY' where id=6; -update noar tt set b1='NAHBN4CN58CM4NS9W9TX' where id=6; -update noar ti set b1='NAHBN4CN58CM4NS9W9TX' where id=6; -update noar tt set v0='S6066LV8EMUGGOE5SL2XQ' where id=6; -update noar ti set v0='S6066LV8EMUGGOE5SL2XQ' where id=6; -update noar tt set b2='PZ2W' where id=6; -update noar ti set b2='PZ2W' where id=6; -update noar tt set v0='2RFIXZT6B1S0DO4U' where id=7; -update noar ti set v0='2RFIXZT6B1S0DO4U' where id=7; -update noar tt set b0='32ET70UQ85YX5EA2' where id=7; -update noar ti set b0='32ET70UQ85YX5EA2' where id=7; -update noar tt set v0='K0JQU6VFAYE2ZHT2WFCLLO53F6K' where id=7; -update noar ti set v0='K0JQU6VFAYE2ZHT2WFCLLO53F6K' where id=7; -update noar tt set b1='I5' where id=7; -update noar ti set b1='I5' where id=7; -update noar tt set v0='YK00JL1KCSZ0BOS1XU' where id=7; -update noar ti set v0='YK00JL1KCSZ0BOS1XU' where id=7; -update noar tt set b2='N4JJS1II' where id=7; -update noar ti set b2='N4JJS1II' where id=7; -update noar tt set v0='LSH2ZQ6AZPOIKWPSFAQM63A0' where id=8; -update noar ti set v0='LSH2ZQ6AZPOIKWPSFAQM63A0' where id=8; -update noar tt set b0='PCE19F85UZRBDSZQ77XPOWIY5N87OJ4J' where id=8; -update noar ti set b0='PCE19F85UZRBDSZQ77XPOWIY5N87OJ4J' where id=8; -update noar tt set v0='IS' where id=8; -update noar ti set v0='IS' where id=8; -update noar tt set b1='BG32D18NHVGVLWA9' where id=8; -update noar ti set b1='BG32D18NHVGVLWA9' where id=8; -update noar tt set v0='UOZ' where id=8; -update noar ti set v0='UOZ' where id=8; -update noar tt set b2='KJ29EHTRB9DPTHNAKGKE8CMT4XKEXSO' where id=8; -update noar ti set b2='KJ29EHTRB9DPTHNAKGKE8CMT4XKEXSO' where id=8; -update noar tt set v0='N0GP3' where id=9; -update noar ti set v0='N0GP3' where id=9; -update noar tt set b0='14W38Z82UWJLU' where id=9; -update noar ti set b0='14W38Z82UWJLU' where id=9; -update noar tt set v0='QW1GS4PGNPZ063LF0' where id=9; -update noar ti set v0='QW1GS4PGNPZ063LF0' where id=9; -update noar tt set b1='A' where id=9; -update noar ti set b1='A' where id=9; -update noar tt set v0='4IZHBRVS36RJ8EZ4N5M4ME1EB9A' where id=9; -update noar ti set v0='4IZHBRVS36RJ8EZ4N5M4ME1EB9A' where id=9; -update noar tt set b2='03JTWKN4QIFBCZDY9D' where id=9; -update noar ti set b2='03JTWKN4QIFBCZDY9D' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 blob null, -b1 mediumblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='S5XYTFIBIRL682CLNPN4VV' where id=1; -update noar ti set v0='S5XYTFIBIRL682CLNPN4VV' where id=1; -update noar tt set b0='GHLR29Z9D' where id=1; -update noar ti set b0='GHLR29Z9D' where id=1; -update noar tt set v0='B6TSLV2HDAT228QL8' where id=1; -update noar ti set v0='B6TSLV2HDAT228QL8' where id=1; -update noar tt set b1='HSL' where id=1; -update noar ti set b1='HSL' where id=1; -update noar tt set v0='OR57BP5ICHGJU8FK' where id=1; -update noar ti set v0='OR57BP5ICHGJU8FK' where id=1; -update noar tt set b2='UMI1FKXU6GVPQ1W5Q4CIP0DOV22' where id=1; -update noar ti set b2='UMI1FKXU6GVPQ1W5Q4CIP0DOV22' where id=1; -update noar tt set v0='ZPX3GM3827' where id=2; -update noar ti set v0='ZPX3GM3827' where id=2; -update noar tt set b0='1' where id=2; -update noar ti set b0='1' where id=2; -update noar tt set v0='5RU36NXKUX4' where id=2; -update noar ti set v0='5RU36NXKUX4' where id=2; -update noar tt set b1='K6UQUM4ERPKMXQ7HFXIFDDL5O99JO' where id=2; -update noar ti set b1='K6UQUM4ERPKMXQ7HFXIFDDL5O99JO' where id=2; -update noar tt set v0='TMJ7Y9S94HEKO5LL7HLG53JZWP' where id=2; -update noar ti set v0='TMJ7Y9S94HEKO5LL7HLG53JZWP' where id=2; -update noar tt set b2='1JCI1R8VZ2785HGWAP2FIHLQM73UOOQJ' where id=2; -update noar ti set b2='1JCI1R8VZ2785HGWAP2FIHLQM73UOOQJ' where id=2; -update noar tt set v0='YUT' where id=3; -update noar ti set v0='YUT' where id=3; -update noar tt set b0='CMSUE' where id=3; -update noar ti set b0='CMSUE' where id=3; -update noar tt set v0='RTM' where id=3; -update noar ti set v0='RTM' where id=3; -update noar tt set b1='MP' where id=3; -update noar ti set b1='MP' where id=3; -update noar tt set v0='2GM2B0AIJ0Q5FERKDI6GEP1YTR4K5R' where id=3; -update noar ti set v0='2GM2B0AIJ0Q5FERKDI6GEP1YTR4K5R' where id=3; -update noar tt set b2='HAVEEIAYLPKWAZLCR264QZO79' where id=3; -update noar ti set b2='HAVEEIAYLPKWAZLCR264QZO79' where id=3; -update noar tt set v0='0J7U341QLIDZ30GKVO47V8PI49E7B8I' where id=4; -update noar ti set v0='0J7U341QLIDZ30GKVO47V8PI49E7B8I' where id=4; -update noar tt set b0='TRXI4SQ4HO29AM' where id=4; -update noar ti set b0='TRXI4SQ4HO29AM' where id=4; -update noar tt set v0='93140JN' where id=4; -update noar ti set v0='93140JN' where id=4; -update noar tt set b1='V25RFLTKPDUD' where id=4; -update noar ti set b1='V25RFLTKPDUD' where id=4; -update noar tt set v0='DH5B3IYTYZQLNW3PXBQA0FE' where id=4; -update noar ti set v0='DH5B3IYTYZQLNW3PXBQA0FE' where id=4; -update noar tt set b2='J7FV' where id=4; -update noar ti set b2='J7FV' where id=4; -update noar tt set v0='8XYTUZWE6HIF74QE7AYOHWCAGF' where id=5; -update noar ti set v0='8XYTUZWE6HIF74QE7AYOHWCAGF' where id=5; -update noar tt set b0='591ERV2E03QA5TPS7L7R60TJH' where id=5; -update noar ti set b0='591ERV2E03QA5TPS7L7R60TJH' where id=5; -update noar tt set v0='O2I8I690I2JENJIANLA1H90DMK' where id=5; -update noar ti set v0='O2I8I690I2JENJIANLA1H90DMK' where id=5; -update noar tt set b1='3HLWRN7J84QJU6' where id=5; -update noar ti set b1='3HLWRN7J84QJU6' where id=5; -update noar tt set v0='X3Q9DOEP6T5UECW' where id=5; -update noar ti set v0='X3Q9DOEP6T5UECW' where id=5; -update noar tt set b2='AUXBGX63JR8J9' where id=5; -update noar ti set b2='AUXBGX63JR8J9' where id=5; -update noar tt set v0='HBB00KXSZ7XYOHQJFDY7VN5S3' where id=6; -update noar ti set v0='HBB00KXSZ7XYOHQJFDY7VN5S3' where id=6; -update noar tt set b0='UZGCCJZT' where id=6; -update noar ti set b0='UZGCCJZT' where id=6; -update noar tt set v0='3G2LOTNOZCGERF0UVZL1CP7' where id=6; -update noar ti set v0='3G2LOTNOZCGERF0UVZL1CP7' where id=6; -update noar tt set b1='XZFNXV8JI7' where id=6; -update noar ti set b1='XZFNXV8JI7' where id=6; -update noar tt set v0='J0' where id=6; -update noar ti set v0='J0' where id=6; -update noar tt set b2='TYJ' where id=6; -update noar ti set b2='TYJ' where id=6; -update noar tt set v0='PTS3' where id=7; -update noar ti set v0='PTS3' where id=7; -update noar tt set b0='4UYA7948LW684ND' where id=7; -update noar ti set b0='4UYA7948LW684ND' where id=7; -update noar tt set v0='C406K1WBS4CE2' where id=7; -update noar ti set v0='C406K1WBS4CE2' where id=7; -update noar tt set b1='SIY5JAEYXQ8SCBNFQBX0EBN7ZTK07' where id=7; -update noar ti set b1='SIY5JAEYXQ8SCBNFQBX0EBN7ZTK07' where id=7; -update noar tt set v0='AVT7' where id=7; -update noar ti set v0='AVT7' where id=7; -update noar tt set b2='E4GS6LCPPX29SW22UZZNSMT' where id=7; -update noar ti set b2='E4GS6LCPPX29SW22UZZNSMT' where id=7; -update noar tt set v0='WQCTS2K' where id=8; -update noar ti set v0='WQCTS2K' where id=8; -update noar tt set b0='Y82WBEIYBD' where id=8; -update noar ti set b0='Y82WBEIYBD' where id=8; -update noar tt set v0='JQM' where id=8; -update noar ti set v0='JQM' where id=8; -update noar tt set b1='BCHUH4PK4C7U4X9JBWTMKT6TX' where id=8; -update noar ti set b1='BCHUH4PK4C7U4X9JBWTMKT6TX' where id=8; -update noar tt set v0='SKMQI2JEG3A2UIOSQCW259BWAYV' where id=8; -update noar ti set v0='SKMQI2JEG3A2UIOSQCW259BWAYV' where id=8; -update noar tt set b2='Q1X4WY148VU2NMEHKEQBK6ZPY6' where id=8; -update noar ti set b2='Q1X4WY148VU2NMEHKEQBK6ZPY6' where id=8; -update noar tt set v0='RYE' where id=9; -update noar ti set v0='RYE' where id=9; -update noar tt set b0='M656YPEDHKI1FEZYM5PD22481YQSPDNM' where id=9; -update noar ti set b0='M656YPEDHKI1FEZYM5PD22481YQSPDNM' where id=9; -update noar tt set v0='TKNLFV9Z6QRXCY0IV5NNPSHXLAWBCTVQ' where id=9; -update noar ti set v0='TKNLFV9Z6QRXCY0IV5NNPSHXLAWBCTVQ' where id=9; -update noar tt set b1='XNNLVS4BBBUXYGLN53M0' where id=9; -update noar ti set b1='XNNLVS4BBBUXYGLN53M0' where id=9; -update noar tt set v0='DDV4QXQ8Y661YU6YUIZYTZKAKCVWMP0' where id=9; -update noar ti set v0='DDV4QXQ8Y661YU6YUIZYTZKAKCVWMP0' where id=9; -update noar tt set b2='QPWJ3HPR03BDMIV9B4' where id=9; -update noar ti set b2='QPWJ3HPR03BDMIV9B4' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 blob not null, -b1 mediumblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='V5J9BZKDV73VULOTIMBCRY7WESI5' where id=1; -update noar ti set v0='V5J9BZKDV73VULOTIMBCRY7WESI5' where id=1; -update noar tt set b0='97' where id=1; -update noar ti set b0='97' where id=1; -update noar tt set v0='TBB25V4H1NHYYMH83WT7K8GFMN' where id=1; -update noar ti set v0='TBB25V4H1NHYYMH83WT7K8GFMN' where id=1; -update noar tt set b1='MNSEU4QMVLPW' where id=1; -update noar ti set b1='MNSEU4QMVLPW' where id=1; -update noar tt set v0='GF6L9YYC93K4WIB' where id=1; -update noar ti set v0='GF6L9YYC93K4WIB' where id=1; -update noar tt set b2='P487KQKNU8295BQZG7P10DKMT' where id=1; -update noar ti set b2='P487KQKNU8295BQZG7P10DKMT' where id=1; -update noar tt set v0='57ZX2UFGXOH3E76WRA4SXVQ7XJFPZV1' where id=2; -update noar ti set v0='57ZX2UFGXOH3E76WRA4SXVQ7XJFPZV1' where id=2; -update noar tt set b0='KVORMV0MAQLB56QLTUPPN0U1IC' where id=2; -update noar ti set b0='KVORMV0MAQLB56QLTUPPN0U1IC' where id=2; -update noar tt set v0='GTTYH7R6EXRK' where id=2; -update noar ti set v0='GTTYH7R6EXRK' where id=2; -update noar tt set b1='DADK3BK8C423W' where id=2; -update noar ti set b1='DADK3BK8C423W' where id=2; -update noar tt set v0='ECA' where id=2; -update noar ti set v0='ECA' where id=2; -update noar tt set b2='W0A36DNEBJ7JZIENX47' where id=2; -update noar ti set b2='W0A36DNEBJ7JZIENX47' where id=2; -update noar tt set v0='97N990O6FS7GMC2' where id=3; -update noar ti set v0='97N990O6FS7GMC2' where id=3; -update noar tt set b0='XYE3Q' where id=3; -update noar ti set b0='XYE3Q' where id=3; -update noar tt set v0='6692' where id=3; -update noar ti set v0='6692' where id=3; -update noar tt set b1='XZFR9W3NH' where id=3; -update noar ti set b1='XZFR9W3NH' where id=3; -update noar tt set v0='2A0E' where id=3; -update noar ti set v0='2A0E' where id=3; -update noar tt set b2='KH6CNOT0D561XJ5Z913PKHOEBEKBO' where id=3; -update noar ti set b2='KH6CNOT0D561XJ5Z913PKHOEBEKBO' where id=3; -update noar tt set v0='W7ETQO' where id=4; -update noar ti set v0='W7ETQO' where id=4; -update noar tt set b0='2U2NYCND795FXC1' where id=4; -update noar ti set b0='2U2NYCND795FXC1' where id=4; -update noar tt set v0='56QE0Z9A08H7TH3F0MA9XV' where id=4; -update noar ti set v0='56QE0Z9A08H7TH3F0MA9XV' where id=4; -update noar tt set b1='DZNXE5A9NFTJRAY1XWHC' where id=4; -update noar ti set b1='DZNXE5A9NFTJRAY1XWHC' where id=4; -update noar tt set v0='TN5CE56JT28BDBN0BH65UP9S2E132IDC' where id=4; -update noar ti set v0='TN5CE56JT28BDBN0BH65UP9S2E132IDC' where id=4; -update noar tt set b2='CF2ZQFNS' where id=4; -update noar ti set b2='CF2ZQFNS' where id=4; -update noar tt set v0='BSEYQPDI6K' where id=5; -update noar ti set v0='BSEYQPDI6K' where id=5; -update noar tt set b0='O42XW16A2OOR49I1' where id=5; -update noar ti set b0='O42XW16A2OOR49I1' where id=5; -update noar tt set v0='FCMVWLR89X4XRYN55P2P' where id=5; -update noar ti set v0='FCMVWLR89X4XRYN55P2P' where id=5; -update noar tt set b1='CYJWKRAR10WKKNH1' where id=5; -update noar ti set b1='CYJWKRAR10WKKNH1' where id=5; -update noar tt set v0='96848K86' where id=5; -update noar ti set v0='96848K86' where id=5; -update noar tt set b2='18XFMNE92YQTVVY62K' where id=5; -update noar ti set b2='18XFMNE92YQTVVY62K' where id=5; -update noar tt set v0='6X28FJ0AR91T6GI4' where id=6; -update noar ti set v0='6X28FJ0AR91T6GI4' where id=6; -update noar tt set b0='ZA55JV' where id=6; -update noar ti set b0='ZA55JV' where id=6; -update noar tt set v0='WR12Q8PX9O' where id=6; -update noar ti set v0='WR12Q8PX9O' where id=6; -update noar tt set b1='KH444CFXOK2' where id=6; -update noar ti set b1='KH444CFXOK2' where id=6; -update noar tt set v0='XA807K3DY7E2KPMTIIC6SEQQQ737' where id=6; -update noar ti set v0='XA807K3DY7E2KPMTIIC6SEQQQ737' where id=6; -update noar tt set b2='TE2' where id=6; -update noar ti set b2='TE2' where id=6; -update noar tt set v0='58' where id=7; -update noar ti set v0='58' where id=7; -update noar tt set b0='7Y0LL1VS4LRW1671QGU' where id=7; -update noar ti set b0='7Y0LL1VS4LRW1671QGU' where id=7; -update noar tt set v0='CN0DUMB4ZH0FYRCBCUFAU288QMF' where id=7; -update noar ti set v0='CN0DUMB4ZH0FYRCBCUFAU288QMF' where id=7; -update noar tt set b1='TZCM2KR104Z3L4NYOI' where id=7; -update noar ti set b1='TZCM2KR104Z3L4NYOI' where id=7; -update noar tt set v0='5BK2KBK4' where id=7; -update noar ti set v0='5BK2KBK4' where id=7; -update noar tt set b2='R6BO38TUGY1XJPXZ' where id=7; -update noar ti set b2='R6BO38TUGY1XJPXZ' where id=7; -update noar tt set v0='GKFHJCP9WJ4TM7RD7OGK60ZH' where id=8; -update noar ti set v0='GKFHJCP9WJ4TM7RD7OGK60ZH' where id=8; -update noar tt set b0='R4' where id=8; -update noar ti set b0='R4' where id=8; -update noar tt set v0='UD6TH59NTL66XNAKL' where id=8; -update noar ti set v0='UD6TH59NTL66XNAKL' where id=8; -update noar tt set b1='6HF247PXA2880ODXVCPP' where id=8; -update noar ti set b1='6HF247PXA2880ODXVCPP' where id=8; -update noar tt set v0='K0POXNHX' where id=8; -update noar ti set v0='K0POXNHX' where id=8; -update noar tt set b2='QI4N0HYUIFXHMWWRZEBJU' where id=8; -update noar ti set b2='QI4N0HYUIFXHMWWRZEBJU' where id=8; -update noar tt set v0='EE1FYWU' where id=9; -update noar ti set v0='EE1FYWU' where id=9; -update noar tt set b0='LU9' where id=9; -update noar ti set b0='LU9' where id=9; -update noar tt set v0='61SDLBOH2Z0URC5DUDGD' where id=9; -update noar ti set v0='61SDLBOH2Z0URC5DUDGD' where id=9; -update noar tt set b1='CHK319K0' where id=9; -update noar ti set b1='CHK319K0' where id=9; -update noar tt set v0='LL4Z1GL2PVH1RQKEJWFPRZ072EZFP2Q' where id=9; -update noar ti set v0='LL4Z1GL2PVH1RQKEJWFPRZ072EZFP2Q' where id=9; -update noar tt set b2='I2OEFB8LPV8' where id=9; -update noar ti set b2='I2OEFB8LPV8' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 blob not null, -b1 mediumblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='UH1QOV' where id=1; -update noar ti set v0='UH1QOV' where id=1; -update noar tt set b0='OCO0' where id=1; -update noar ti set b0='OCO0' where id=1; -update noar tt set v0='CUA8VV6DON' where id=1; -update noar ti set v0='CUA8VV6DON' where id=1; -update noar tt set b1='GYG3GND4JATRQGYIO6GY1' where id=1; -update noar ti set b1='GYG3GND4JATRQGYIO6GY1' where id=1; -update noar tt set v0='5DFKBSOVPS3JS5LTTDT3' where id=1; -update noar ti set v0='5DFKBSOVPS3JS5LTTDT3' where id=1; -update noar tt set b2='8ULDHFEMAZ3HL1R4RZTZX5Q0YS' where id=1; -update noar ti set b2='8ULDHFEMAZ3HL1R4RZTZX5Q0YS' where id=1; -update noar tt set v0='V7ZKV9X' where id=2; -update noar ti set v0='V7ZKV9X' where id=2; -update noar tt set b0='CI6VWYQDBYZ4PWEMGBQXU' where id=2; -update noar ti set b0='CI6VWYQDBYZ4PWEMGBQXU' where id=2; -update noar tt set v0='PC' where id=2; -update noar ti set v0='PC' where id=2; -update noar tt set b1='DQRBT5OFC' where id=2; -update noar ti set b1='DQRBT5OFC' where id=2; -update noar tt set v0='N9TL8BEYKCGYZZMP1QZFW' where id=2; -update noar ti set v0='N9TL8BEYKCGYZZMP1QZFW' where id=2; -update noar tt set b2='EQHBBW2C7SEP8VAT' where id=2; -update noar ti set b2='EQHBBW2C7SEP8VAT' where id=2; -update noar tt set v0='V7BRD9R3Z' where id=3; -update noar ti set v0='V7BRD9R3Z' where id=3; -update noar tt set b0='1W0' where id=3; -update noar ti set b0='1W0' where id=3; -update noar tt set v0='N1G10DIA1BL' where id=3; -update noar ti set v0='N1G10DIA1BL' where id=3; -update noar tt set b1='C7J3M31O4I3JIR5AMEXGUX0BVPIB76OQ' where id=3; -update noar ti set b1='C7J3M31O4I3JIR5AMEXGUX0BVPIB76OQ' where id=3; -update noar tt set v0='GA5E4KI4TAN5LLSYC5XRJZNMBM' where id=3; -update noar ti set v0='GA5E4KI4TAN5LLSYC5XRJZNMBM' where id=3; -update noar tt set b2='8WZ1U2EXOWRP3ARVSQGDKINE' where id=3; -update noar ti set b2='8WZ1U2EXOWRP3ARVSQGDKINE' where id=3; -update noar tt set v0='S5LZC' where id=4; -update noar ti set v0='S5LZC' where id=4; -update noar tt set b0='KVKT64MZ1VHP2QK4EXTH80' where id=4; -update noar ti set b0='KVKT64MZ1VHP2QK4EXTH80' where id=4; -update noar tt set v0='F46PG' where id=4; -update noar ti set v0='F46PG' where id=4; -update noar tt set b1='XNZJBLT95NPJCSM' where id=4; -update noar ti set b1='XNZJBLT95NPJCSM' where id=4; -update noar tt set v0='6309VV9O0QGWUH45L8JNSD0AXN0' where id=4; -update noar ti set v0='6309VV9O0QGWUH45L8JNSD0AXN0' where id=4; -update noar tt set b2='G3V0SZ0ZM3TKEJNQKV0NL' where id=4; -update noar ti set b2='G3V0SZ0ZM3TKEJNQKV0NL' where id=4; -update noar tt set v0='G3C8P8X' where id=5; -update noar ti set v0='G3C8P8X' where id=5; -update noar tt set b0='PERKCFJB83EQVS4MA58V3LUDW80ZJP' where id=5; -update noar ti set b0='PERKCFJB83EQVS4MA58V3LUDW80ZJP' where id=5; -update noar tt set v0='X5FS9R8D' where id=5; -update noar ti set v0='X5FS9R8D' where id=5; -update noar tt set b1='Q4B71CBDI9ULSZW' where id=5; -update noar ti set b1='Q4B71CBDI9ULSZW' where id=5; -update noar tt set v0='AI83WYK748CLVQJQK58ISPGE39ESRAQW' where id=5; -update noar ti set v0='AI83WYK748CLVQJQK58ISPGE39ESRAQW' where id=5; -update noar tt set b2='OZL17X4V0Z' where id=5; -update noar ti set b2='OZL17X4V0Z' where id=5; -update noar tt set v0='B5OIZN7DY8827F5JW53E94QV' where id=6; -update noar ti set v0='B5OIZN7DY8827F5JW53E94QV' where id=6; -update noar tt set b0='M1' where id=6; -update noar ti set b0='M1' where id=6; -update noar tt set v0='AAOXJC979PR4MGNF' where id=6; -update noar ti set v0='AAOXJC979PR4MGNF' where id=6; -update noar tt set b1='4L8G220187' where id=6; -update noar ti set b1='4L8G220187' where id=6; -update noar tt set v0='WXPFLYC9Z7GEBFJLHDIY9YU' where id=6; -update noar ti set v0='WXPFLYC9Z7GEBFJLHDIY9YU' where id=6; -update noar tt set b2='7C1DVTR0DVQ1M6SSQA8XMCQVZXSVB3' where id=6; -update noar ti set b2='7C1DVTR0DVQ1M6SSQA8XMCQVZXSVB3' where id=6; -update noar tt set v0='7WTIOJ80Q6S0E24GUPGJFQ5FMMT7TUQ4' where id=7; -update noar ti set v0='7WTIOJ80Q6S0E24GUPGJFQ5FMMT7TUQ4' where id=7; -update noar tt set b0='92Z5WVFEQUFP604FKQLLPPXTNH' where id=7; -update noar ti set b0='92Z5WVFEQUFP604FKQLLPPXTNH' where id=7; -update noar tt set v0='QC6EOS4G68ZAKJ0H' where id=7; -update noar ti set v0='QC6EOS4G68ZAKJ0H' where id=7; -update noar tt set b1='VR42Q3HFR3IWNIQUCT9ZC1T' where id=7; -update noar ti set b1='VR42Q3HFR3IWNIQUCT9ZC1T' where id=7; -update noar tt set v0='E0QKA7HKS2SS9IVQUH5FJGS8XZIIN3' where id=7; -update noar ti set v0='E0QKA7HKS2SS9IVQUH5FJGS8XZIIN3' where id=7; -update noar tt set b2='X8SUBOUD0KFSRS69JP6REWXGMQ' where id=7; -update noar ti set b2='X8SUBOUD0KFSRS69JP6REWXGMQ' where id=7; -update noar tt set v0='PLWDFTFCFN31K' where id=8; -update noar ti set v0='PLWDFTFCFN31K' where id=8; -update noar tt set b0='MS9T7T77CUC1LAFV7ELP5C7221K7NAK' where id=8; -update noar ti set b0='MS9T7T77CUC1LAFV7ELP5C7221K7NAK' where id=8; -update noar tt set v0='VLG4IFJ9UW1JOB2' where id=8; -update noar ti set v0='VLG4IFJ9UW1JOB2' where id=8; -update noar tt set b1='U0E9XMHIK02A7XYRH7R4O2N' where id=8; -update noar ti set b1='U0E9XMHIK02A7XYRH7R4O2N' where id=8; -update noar tt set v0='5KV0' where id=8; -update noar ti set v0='5KV0' where id=8; -update noar tt set b2='7BJLOT' where id=8; -update noar ti set b2='7BJLOT' where id=8; -update noar tt set v0='8G2NAHJ3QZZSKBRA' where id=9; -update noar ti set v0='8G2NAHJ3QZZSKBRA' where id=9; -update noar tt set b0='EF35Y' where id=9; -update noar ti set b0='EF35Y' where id=9; -update noar tt set v0='ACLX6WJEGEVCB9ZZ2YQJPVGDEZ' where id=9; -update noar ti set v0='ACLX6WJEGEVCB9ZZ2YQJPVGDEZ' where id=9; -update noar tt set b1='A2F6MX9TMWCHJB219C4KIGM6PQ' where id=9; -update noar ti set b1='A2F6MX9TMWCHJB219C4KIGM6PQ' where id=9; -update noar tt set v0='8SL62CO2IBOLYQYVL1LM8AEMFUN9' where id=9; -update noar ti set v0='8SL62CO2IBOLYQYVL1LM8AEMFUN9' where id=9; -update noar tt set b2='N1W3ZHRP478ERLRI3HXUD5TTX7' where id=9; -update noar ti set b2='N1W3ZHRP478ERLRI3HXUD5TTX7' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 blob null, -b1 mediumblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='888MNXBYIY385I8I3H1WRY9L7UMP' where id=1; -update noar ti set v0='888MNXBYIY385I8I3H1WRY9L7UMP' where id=1; -update noar tt set b0='29' where id=1; -update noar ti set b0='29' where id=1; -update noar tt set v0='QGXK1EM2MW' where id=1; -update noar ti set v0='QGXK1EM2MW' where id=1; -update noar tt set b1='5I1LIG' where id=1; -update noar ti set b1='5I1LIG' where id=1; -update noar tt set v0='2NJEG6KHZ30BTFUFCHDD7EYMLTO3YT' where id=1; -update noar ti set v0='2NJEG6KHZ30BTFUFCHDD7EYMLTO3YT' where id=1; -update noar tt set b2='X1' where id=1; -update noar ti set b2='X1' where id=1; -update noar tt set v0='ZOAFGR5' where id=2; -update noar ti set v0='ZOAFGR5' where id=2; -update noar tt set b0='KX1DDSM7P' where id=2; -update noar ti set b0='KX1DDSM7P' where id=2; -update noar tt set v0='N78MXSRPMGK8O7RS' where id=2; -update noar ti set v0='N78MXSRPMGK8O7RS' where id=2; -update noar tt set b1='DUQ5MHFTN82' where id=2; -update noar ti set b1='DUQ5MHFTN82' where id=2; -update noar tt set v0='MWIN5A4DB9JVNPS92QMRXWP0GCU49M' where id=2; -update noar ti set v0='MWIN5A4DB9JVNPS92QMRXWP0GCU49M' where id=2; -update noar tt set b2='HT4NHOFZN1C1EJ' where id=2; -update noar ti set b2='HT4NHOFZN1C1EJ' where id=2; -update noar tt set v0='RBLT0OH868AMI82AE6Q19Y' where id=3; -update noar ti set v0='RBLT0OH868AMI82AE6Q19Y' where id=3; -update noar tt set b0='IC' where id=3; -update noar ti set b0='IC' where id=3; -update noar tt set v0='ZI41G' where id=3; -update noar ti set v0='ZI41G' where id=3; -update noar tt set b1='AIA4SRGCGMH3PNZA' where id=3; -update noar ti set b1='AIA4SRGCGMH3PNZA' where id=3; -update noar tt set v0='ET8DSTKS7SHX22QSFLBOH6NA' where id=3; -update noar ti set v0='ET8DSTKS7SHX22QSFLBOH6NA' where id=3; -update noar tt set b2='B1FM8QT6U2E2QH6VG' where id=3; -update noar ti set b2='B1FM8QT6U2E2QH6VG' where id=3; -update noar tt set v0='ZKFFH' where id=4; -update noar ti set v0='ZKFFH' where id=4; -update noar tt set b0='JMYXBD' where id=4; -update noar ti set b0='JMYXBD' where id=4; -update noar tt set v0='3E06094U1' where id=4; -update noar ti set v0='3E06094U1' where id=4; -update noar tt set b1='CU9FVZ36JY1UPOV' where id=4; -update noar ti set b1='CU9FVZ36JY1UPOV' where id=4; -update noar tt set v0='1YHNG52GDYCJGL9' where id=4; -update noar ti set v0='1YHNG52GDYCJGL9' where id=4; -update noar tt set b2='GN0CFKGX0PBGP4' where id=4; -update noar ti set b2='GN0CFKGX0PBGP4' where id=4; -update noar tt set v0='6T0NHGG8O7NT3BHWB' where id=5; -update noar ti set v0='6T0NHGG8O7NT3BHWB' where id=5; -update noar tt set b0='CGV8C4OFPMBOIDIBYBBG2NJW68WTTP1' where id=5; -update noar ti set b0='CGV8C4OFPMBOIDIBYBBG2NJW68WTTP1' where id=5; -update noar tt set v0='UHRVOWIA0RH2GXOGVHZIX' where id=5; -update noar ti set v0='UHRVOWIA0RH2GXOGVHZIX' where id=5; -update noar tt set b1='4O' where id=5; -update noar ti set b1='4O' where id=5; -update noar tt set v0='F8AST' where id=5; -update noar ti set v0='F8AST' where id=5; -update noar tt set b2='JO3SRJAJ94P95BESG' where id=5; -update noar ti set b2='JO3SRJAJ94P95BESG' where id=5; -update noar tt set v0='BA1PB5JL8U3S8' where id=6; -update noar ti set v0='BA1PB5JL8U3S8' where id=6; -update noar tt set b0='ROAP3E6ULD' where id=6; -update noar ti set b0='ROAP3E6ULD' where id=6; -update noar tt set v0='HZU' where id=6; -update noar ti set v0='HZU' where id=6; -update noar tt set b1='QW3REK12XXS8ZGSJKT4OYXNGR8LQG' where id=6; -update noar ti set b1='QW3REK12XXS8ZGSJKT4OYXNGR8LQG' where id=6; -update noar tt set v0='BJ2R8' where id=6; -update noar ti set v0='BJ2R8' where id=6; -update noar tt set b2='LHNI69FR' where id=6; -update noar ti set b2='LHNI69FR' where id=6; -update noar tt set v0='H' where id=7; -update noar ti set v0='H' where id=7; -update noar tt set b0='EW5WT5AO7L5U3' where id=7; -update noar ti set b0='EW5WT5AO7L5U3' where id=7; -update noar tt set v0='JHBYWFDND0VVNVINS15I' where id=7; -update noar ti set v0='JHBYWFDND0VVNVINS15I' where id=7; -update noar tt set b1='0MNTNBIRLJGK0IV4Q47GU' where id=7; -update noar ti set b1='0MNTNBIRLJGK0IV4Q47GU' where id=7; -update noar tt set v0='4J55NBIK65URUHVPZ0J3BKAK3R6TF52' where id=7; -update noar ti set v0='4J55NBIK65URUHVPZ0J3BKAK3R6TF52' where id=7; -update noar tt set b2='Z' where id=7; -update noar ti set b2='Z' where id=7; -update noar tt set v0='WD2WPT109JTIRDSZSVPNOEO7S' where id=8; -update noar ti set v0='WD2WPT109JTIRDSZSVPNOEO7S' where id=8; -update noar tt set b0='HMSG6R5C6VUJXWI8JYZAIM4CM0' where id=8; -update noar ti set b0='HMSG6R5C6VUJXWI8JYZAIM4CM0' where id=8; -update noar tt set v0='B41ED0UJ2HKS5EX07IMF' where id=8; -update noar ti set v0='B41ED0UJ2HKS5EX07IMF' where id=8; -update noar tt set b1='GJEA2TGEZDIRI3D' where id=8; -update noar ti set b1='GJEA2TGEZDIRI3D' where id=8; -update noar tt set v0='1E17XO1ZM2825X5A' where id=8; -update noar ti set v0='1E17XO1ZM2825X5A' where id=8; -update noar tt set b2='CTK2VQRLGYP6C3RXSPZWUI1FPIE30R2A' where id=8; -update noar ti set b2='CTK2VQRLGYP6C3RXSPZWUI1FPIE30R2A' where id=8; -update noar tt set v0='V1CXC8BHU8TMDVG63DXTSXCEQ' where id=9; -update noar ti set v0='V1CXC8BHU8TMDVG63DXTSXCEQ' where id=9; -update noar tt set b0='VQ8NJMERAUN507Q7KZ8G3OVU8F5' where id=9; -update noar ti set b0='VQ8NJMERAUN507Q7KZ8G3OVU8F5' where id=9; -update noar tt set v0='NF3Q5OYSSNIW9GVVMR0VI' where id=9; -update noar ti set v0='NF3Q5OYSSNIW9GVVMR0VI' where id=9; -update noar tt set b1='JRAJ' where id=9; -update noar ti set b1='JRAJ' where id=9; -update noar tt set v0='FAWJ7W7QOAG95EMF' where id=9; -update noar ti set v0='FAWJ7W7QOAG95EMF' where id=9; -update noar tt set b2='OG6MYKZ9ITKZL4PFMN9' where id=9; -update noar ti set b2='OG6MYKZ9ITKZL4PFMN9' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 blob null, -b1 mediumblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='0GSWUJSJV9R4QUUANH1ENF0QWEVQD' where id=1; -update noar ti set v0='0GSWUJSJV9R4QUUANH1ENF0QWEVQD' where id=1; -update noar tt set b0='1PK59L2YBM1' where id=1; -update noar ti set b0='1PK59L2YBM1' where id=1; -update noar tt set v0='UVT81TMYQ7' where id=1; -update noar ti set v0='UVT81TMYQ7' where id=1; -update noar tt set b1='A5K75JUUIUPR58' where id=1; -update noar ti set b1='A5K75JUUIUPR58' where id=1; -update noar tt set v0='XB32XI7GSQR' where id=1; -update noar ti set v0='XB32XI7GSQR' where id=1; -update noar tt set b2='13ZT7AW0IZSQNSL' where id=1; -update noar ti set b2='13ZT7AW0IZSQNSL' where id=1; -update noar tt set v0='25YG' where id=2; -update noar ti set v0='25YG' where id=2; -update noar tt set b0='C2GSBBLKK' where id=2; -update noar ti set b0='C2GSBBLKK' where id=2; -update noar tt set v0='BI4RNAOHYLN66FX6N' where id=2; -update noar ti set v0='BI4RNAOHYLN66FX6N' where id=2; -update noar tt set b1='1J3B' where id=2; -update noar ti set b1='1J3B' where id=2; -update noar tt set v0='KJ1ED6C27BI68' where id=2; -update noar ti set v0='KJ1ED6C27BI68' where id=2; -update noar tt set b2='PEKOMQXZ190MRABZJ2Z3LDEHLRIZ8W' where id=2; -update noar ti set b2='PEKOMQXZ190MRABZJ2Z3LDEHLRIZ8W' where id=2; -update noar tt set v0='K' where id=3; -update noar ti set v0='K' where id=3; -update noar tt set b0='FLGV5IFDBSOMAF3G' where id=3; -update noar ti set b0='FLGV5IFDBSOMAF3G' where id=3; -update noar tt set v0='RG18L68M2CLLBZ' where id=3; -update noar ti set v0='RG18L68M2CLLBZ' where id=3; -update noar tt set b1='EGUO8WV7J2JZLINWG53WXIHSQ' where id=3; -update noar ti set b1='EGUO8WV7J2JZLINWG53WXIHSQ' where id=3; -update noar tt set v0='BY90ICPPG8IX' where id=3; -update noar ti set v0='BY90ICPPG8IX' where id=3; -update noar tt set b2='2ZLXDOF' where id=3; -update noar ti set b2='2ZLXDOF' where id=3; -update noar tt set v0='NMQTFR2' where id=4; -update noar ti set v0='NMQTFR2' where id=4; -update noar tt set b0='5M1KUJILOHQVSQTXN' where id=4; -update noar ti set b0='5M1KUJILOHQVSQTXN' where id=4; -update noar tt set v0='ENHI3BUPFC1I241GOWHDI' where id=4; -update noar ti set v0='ENHI3BUPFC1I241GOWHDI' where id=4; -update noar tt set b1='3QNXCDLT' where id=4; -update noar ti set b1='3QNXCDLT' where id=4; -update noar tt set v0='DH5HTJH9ECJYMI' where id=4; -update noar ti set v0='DH5HTJH9ECJYMI' where id=4; -update noar tt set b2='77R64E3OSALE5T8XHL' where id=4; -update noar ti set b2='77R64E3OSALE5T8XHL' where id=4; -update noar tt set v0='YGDRNKO0KA184BEFM1SF277Z7ZAFWJ2' where id=5; -update noar ti set v0='YGDRNKO0KA184BEFM1SF277Z7ZAFWJ2' where id=5; -update noar tt set b0='427HGY' where id=5; -update noar ti set b0='427HGY' where id=5; -update noar tt set v0='IUX0P' where id=5; -update noar ti set v0='IUX0P' where id=5; -update noar tt set b1='ACM4SDATWHSPZM' where id=5; -update noar ti set b1='ACM4SDATWHSPZM' where id=5; -update noar tt set v0='LJ9G6UNAO9LHBAZCKAHZP1Z2E2' where id=5; -update noar ti set v0='LJ9G6UNAO9LHBAZCKAHZP1Z2E2' where id=5; -update noar tt set b2='P3NJ61QZ4FM431ZTMQ7Q0' where id=5; -update noar ti set b2='P3NJ61QZ4FM431ZTMQ7Q0' where id=5; -update noar tt set v0='LR' where id=6; -update noar ti set v0='LR' where id=6; -update noar tt set b0='CLD33KYSDI1IPRINB9XD5YC' where id=6; -update noar ti set b0='CLD33KYSDI1IPRINB9XD5YC' where id=6; -update noar tt set v0='OYD90VT6' where id=6; -update noar ti set v0='OYD90VT6' where id=6; -update noar tt set b1='V9893TNTKBPRFYMP5X' where id=6; -update noar ti set b1='V9893TNTKBPRFYMP5X' where id=6; -update noar tt set v0='949ZXB8LED0ZMCG9292M7HYHQ' where id=6; -update noar ti set v0='949ZXB8LED0ZMCG9292M7HYHQ' where id=6; -update noar tt set b2='4F8BPJZ34TMW4V19GE' where id=6; -update noar ti set b2='4F8BPJZ34TMW4V19GE' where id=6; -update noar tt set v0='VGFV3JF8JWTLH52QU6' where id=7; -update noar ti set v0='VGFV3JF8JWTLH52QU6' where id=7; -update noar tt set b0='ZV' where id=7; -update noar ti set b0='ZV' where id=7; -update noar tt set v0='7AP06IB7AZSN86RQX4K70EU1FV' where id=7; -update noar ti set v0='7AP06IB7AZSN86RQX4K70EU1FV' where id=7; -update noar tt set b1='3LYEEEBBNBTE754AYGWR' where id=7; -update noar ti set b1='3LYEEEBBNBTE754AYGWR' where id=7; -update noar tt set v0='6PQ4V7GQZPMEXJ9DG4LXPZHETQ2B' where id=7; -update noar ti set v0='6PQ4V7GQZPMEXJ9DG4LXPZHETQ2B' where id=7; -update noar tt set b2='9LSGRUNDDD1' where id=7; -update noar ti set b2='9LSGRUNDDD1' where id=7; -update noar tt set v0='73HOIR3XX6QUQZ6Y8C8LZ232B5MZ0OP' where id=8; -update noar ti set v0='73HOIR3XX6QUQZ6Y8C8LZ232B5MZ0OP' where id=8; -update noar tt set b0='40ZK7OLV972SCCJAUXY' where id=8; -update noar ti set b0='40ZK7OLV972SCCJAUXY' where id=8; -update noar tt set v0='2JOEMDBX0VZFFWZMQVC7' where id=8; -update noar ti set v0='2JOEMDBX0VZFFWZMQVC7' where id=8; -update noar tt set b1='KM5ORFB55VH0TYAVHYMDF80UXSS2242' where id=8; -update noar ti set b1='KM5ORFB55VH0TYAVHYMDF80UXSS2242' where id=8; -update noar tt set v0='VYQJCGG55U0E' where id=8; -update noar ti set v0='VYQJCGG55U0E' where id=8; -update noar tt set b2='MYC' where id=8; -update noar ti set b2='MYC' where id=8; -update noar tt set v0='SLTN2YHMYHPHR0U0Z8KXEC7LJWZIS' where id=9; -update noar ti set v0='SLTN2YHMYHPHR0U0Z8KXEC7LJWZIS' where id=9; -update noar tt set b0='Z7OFRREHFROZ9H3HS' where id=9; -update noar ti set b0='Z7OFRREHFROZ9H3HS' where id=9; -update noar tt set v0='TF3KO' where id=9; -update noar ti set v0='TF3KO' where id=9; -update noar tt set b1='YJ2SR8DHMYQ6AHW' where id=9; -update noar ti set b1='YJ2SR8DHMYQ6AHW' where id=9; -update noar tt set v0='P68PQ3MXMQ3QE3GE02OXE8CJ9' where id=9; -update noar ti set v0='P68PQ3MXMQ3QE3GE02OXE8CJ9' where id=9; -update noar tt set b2='3U' where id=9; -update noar ti set b2='3U' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 blob not null, -b1 mediumblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='ATQH74JNA3KVF5PR6E' where id=1; -update noar ti set v0='ATQH74JNA3KVF5PR6E' where id=1; -update noar tt set b0='LVB9CT4TVSC9R1ITCB31H2U3O1U1' where id=1; -update noar ti set b0='LVB9CT4TVSC9R1ITCB31H2U3O1U1' where id=1; -update noar tt set v0='UCG371VBODM48GIFB6ZF1MGBZQ' where id=1; -update noar ti set v0='UCG371VBODM48GIFB6ZF1MGBZQ' where id=1; -update noar tt set b1='5HJ5DXTC529' where id=1; -update noar ti set b1='5HJ5DXTC529' where id=1; -update noar tt set v0='PYU3DS7H4' where id=1; -update noar ti set v0='PYU3DS7H4' where id=1; -update noar tt set b2='3H1L7YUI8AP1' where id=1; -update noar ti set b2='3H1L7YUI8AP1' where id=1; -update noar tt set v0='XBG57EQXIPFY3QOJKPRU' where id=2; -update noar ti set v0='XBG57EQXIPFY3QOJKPRU' where id=2; -update noar tt set b0='345UV875NMBVV7QS30C7VWP1' where id=2; -update noar ti set b0='345UV875NMBVV7QS30C7VWP1' where id=2; -update noar tt set v0='C3Q2V4NAWY65CKSU55GOUZSJSWISZ3D' where id=2; -update noar ti set v0='C3Q2V4NAWY65CKSU55GOUZSJSWISZ3D' where id=2; -update noar tt set b1='7Y5KY18WQQ45HXCTV8' where id=2; -update noar ti set b1='7Y5KY18WQQ45HXCTV8' where id=2; -update noar tt set v0='ZEQKLT2OJG14E1U4F9OI' where id=2; -update noar ti set v0='ZEQKLT2OJG14E1U4F9OI' where id=2; -update noar tt set b2='F56H6FMCHIQV5K65BIJZZG8JOKWH' where id=2; -update noar ti set b2='F56H6FMCHIQV5K65BIJZZG8JOKWH' where id=2; -update noar tt set v0='VVUJ' where id=3; -update noar ti set v0='VVUJ' where id=3; -update noar tt set b0='ONRM1' where id=3; -update noar ti set b0='ONRM1' where id=3; -update noar tt set v0='YYJD889CP6PEN' where id=3; -update noar ti set v0='YYJD889CP6PEN' where id=3; -update noar tt set b1='UB6DFKMWWPN4PV36BVLEV34NPU' where id=3; -update noar ti set b1='UB6DFKMWWPN4PV36BVLEV34NPU' where id=3; -update noar tt set v0='XXQENMA8N2QQPT' where id=3; -update noar ti set v0='XXQENMA8N2QQPT' where id=3; -update noar tt set b2='P9WDCHELW0W4U79LJ67' where id=3; -update noar ti set b2='P9WDCHELW0W4U79LJ67' where id=3; -update noar tt set v0='4VV38ASWIT8NR6NFDEG8BIEL' where id=4; -update noar ti set v0='4VV38ASWIT8NR6NFDEG8BIEL' where id=4; -update noar tt set b0='ITNNYGWA3PCF7QN4N2UOFAIFZ0J' where id=4; -update noar ti set b0='ITNNYGWA3PCF7QN4N2UOFAIFZ0J' where id=4; -update noar tt set v0='T9C2TBZG9JWWSE5NCX38PB7Z05N' where id=4; -update noar ti set v0='T9C2TBZG9JWWSE5NCX38PB7Z05N' where id=4; -update noar tt set b1='V2VJY0R' where id=4; -update noar ti set b1='V2VJY0R' where id=4; -update noar tt set v0='KONK06MZFLSFQSYRHE3PQMT7ZK0' where id=4; -update noar ti set v0='KONK06MZFLSFQSYRHE3PQMT7ZK0' where id=4; -update noar tt set b2='S0' where id=4; -update noar ti set b2='S0' where id=4; -update noar tt set v0='YQ1V51GCNVN1ENKZFR5BZJTJ' where id=5; -update noar ti set v0='YQ1V51GCNVN1ENKZFR5BZJTJ' where id=5; -update noar tt set b0='8YJF1VW6CMG9X5II5ZXE' where id=5; -update noar ti set b0='8YJF1VW6CMG9X5II5ZXE' where id=5; -update noar tt set v0='DU44GXFC4ISNQ8ZD1VLBL' where id=5; -update noar ti set v0='DU44GXFC4ISNQ8ZD1VLBL' where id=5; -update noar tt set b1='HYULM9NK6ENB0F9F0YU0WBK' where id=5; -update noar ti set b1='HYULM9NK6ENB0F9F0YU0WBK' where id=5; -update noar tt set v0='AE71G810G3MJX129B0OFPW' where id=5; -update noar ti set v0='AE71G810G3MJX129B0OFPW' where id=5; -update noar tt set b2='ROSD4H4JYC44W9HNQ48KH5Z' where id=5; -update noar ti set b2='ROSD4H4JYC44W9HNQ48KH5Z' where id=5; -update noar tt set v0='TE3R94O' where id=6; -update noar ti set v0='TE3R94O' where id=6; -update noar tt set b0='898JBDNKZVMZK44BG71NT3NW81T51J0' where id=6; -update noar ti set b0='898JBDNKZVMZK44BG71NT3NW81T51J0' where id=6; -update noar tt set v0='3T6NEFSM0WBNBRFT0UQQM1' where id=6; -update noar ti set v0='3T6NEFSM0WBNBRFT0UQQM1' where id=6; -update noar tt set b1='NTJUIIUWVJ79XYOKMAGL8YJS' where id=6; -update noar ti set b1='NTJUIIUWVJ79XYOKMAGL8YJS' where id=6; -update noar tt set v0='1K' where id=6; -update noar ti set v0='1K' where id=6; -update noar tt set b2='1MT83JS2QCJBVQOROMRKHXJR' where id=6; -update noar ti set b2='1MT83JS2QCJBVQOROMRKHXJR' where id=6; -update noar tt set v0='0NI0MU70SMQ' where id=7; -update noar ti set v0='0NI0MU70SMQ' where id=7; -update noar tt set b0='WP8XV7B6XWDRCZ7O1B5I' where id=7; -update noar ti set b0='WP8XV7B6XWDRCZ7O1B5I' where id=7; -update noar tt set v0='XX62GT0ENXKVM2P93PCZEN42GJC7HYW' where id=7; -update noar ti set v0='XX62GT0ENXKVM2P93PCZEN42GJC7HYW' where id=7; -update noar tt set b1='IIE4JLEFCBN2HPX0' where id=7; -update noar ti set b1='IIE4JLEFCBN2HPX0' where id=7; -update noar tt set v0='0OWWRVVQAXFOXOV1J' where id=7; -update noar ti set v0='0OWWRVVQAXFOXOV1J' where id=7; -update noar tt set b2='52LRBFM3O7M' where id=7; -update noar ti set b2='52LRBFM3O7M' where id=7; -update noar tt set v0='SI5K90GJOAR8T4Q8IG12GQ96' where id=8; -update noar ti set v0='SI5K90GJOAR8T4Q8IG12GQ96' where id=8; -update noar tt set b0='HKASYPBP7R6TPO31C7JUT6QD9ZQWIQE' where id=8; -update noar ti set b0='HKASYPBP7R6TPO31C7JUT6QD9ZQWIQE' where id=8; -update noar tt set v0='IS56SUHZ7GACCZBN8IKD1JUEFT32I6C' where id=8; -update noar ti set v0='IS56SUHZ7GACCZBN8IKD1JUEFT32I6C' where id=8; -update noar tt set b1='1SZITB53OOW17NYVOR2Z130Q8QF' where id=8; -update noar ti set b1='1SZITB53OOW17NYVOR2Z130Q8QF' where id=8; -update noar tt set v0='9T6UD3SS4V4RHJK24USUBFBQD' where id=8; -update noar ti set v0='9T6UD3SS4V4RHJK24USUBFBQD' where id=8; -update noar tt set b2='E9X' where id=8; -update noar ti set b2='E9X' where id=8; -update noar tt set v0='TH' where id=9; -update noar ti set v0='TH' where id=9; -update noar tt set b0='BXLIPQ0IZL44F9' where id=9; -update noar ti set b0='BXLIPQ0IZL44F9' where id=9; -update noar tt set v0='WNTE0CAO4MZM5MIBUPFAHG873SO' where id=9; -update noar ti set v0='WNTE0CAO4MZM5MIBUPFAHG873SO' where id=9; -update noar tt set b1='EKDQMBFWHCORYY1SVP3ZLUOPXCFB' where id=9; -update noar ti set b1='EKDQMBFWHCORYY1SVP3ZLUOPXCFB' where id=9; -update noar tt set v0='2Y5YTEZWJ9CZEV1SWGBAL4UYS6JNMCNG' where id=9; -update noar ti set v0='2Y5YTEZWJ9CZEV1SWGBAL4UYS6JNMCNG' where id=9; -update noar tt set b2='G0IGPL' where id=9; -update noar ti set b2='G0IGPL' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 blob not null, -b1 mediumblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='K4K0VB2PMY483' where id=1; -update noar ti set v0='K4K0VB2PMY483' where id=1; -update noar tt set b0='8EN61LAMNYMYVAAY8GNRETLSZU4BAX' where id=1; -update noar ti set b0='8EN61LAMNYMYVAAY8GNRETLSZU4BAX' where id=1; -update noar tt set v0='ZGZ5MYOFOLX52S4E5' where id=1; -update noar ti set v0='ZGZ5MYOFOLX52S4E5' where id=1; -update noar tt set b1='YPDWYN05B0XOOIP5OVR4V1Z' where id=1; -update noar ti set b1='YPDWYN05B0XOOIP5OVR4V1Z' where id=1; -update noar tt set v0='0AC42CBEPTI5QMFQZ2G8255FB1A' where id=1; -update noar ti set v0='0AC42CBEPTI5QMFQZ2G8255FB1A' where id=1; -update noar tt set b2='C688ZHZSFN904Z0DHING4U3' where id=1; -update noar ti set b2='C688ZHZSFN904Z0DHING4U3' where id=1; -update noar tt set v0='YWY' where id=2; -update noar ti set v0='YWY' where id=2; -update noar tt set b0='C0NGA8SUSURIBGN80CKAU4' where id=2; -update noar ti set b0='C0NGA8SUSURIBGN80CKAU4' where id=2; -update noar tt set v0='ZGZ0HDOW5E2IIEB1HO38MX8KQM8C' where id=2; -update noar ti set v0='ZGZ0HDOW5E2IIEB1HO38MX8KQM8C' where id=2; -update noar tt set b1='FTOA6RY4GURZBRC0KLG411E8QH2' where id=2; -update noar ti set b1='FTOA6RY4GURZBRC0KLG411E8QH2' where id=2; -update noar tt set v0='GASWIJCZ2A2B8Y8I1A' where id=2; -update noar ti set v0='GASWIJCZ2A2B8Y8I1A' where id=2; -update noar tt set b2='D' where id=2; -update noar ti set b2='D' where id=2; -update noar tt set v0='OP6RSKX795B3O368UOZ0EUL' where id=3; -update noar ti set v0='OP6RSKX795B3O368UOZ0EUL' where id=3; -update noar tt set b0='ORE5EFAVV2Q5V3' where id=3; -update noar ti set b0='ORE5EFAVV2Q5V3' where id=3; -update noar tt set v0='8VXVFTCA8P' where id=3; -update noar ti set v0='8VXVFTCA8P' where id=3; -update noar tt set b1='6FKJ' where id=3; -update noar ti set b1='6FKJ' where id=3; -update noar tt set v0='T1AP91UZZWN' where id=3; -update noar ti set v0='T1AP91UZZWN' where id=3; -update noar tt set b2='ASF71I3R9VGYIKLODO' where id=3; -update noar ti set b2='ASF71I3R9VGYIKLODO' where id=3; -update noar tt set v0='Q' where id=4; -update noar ti set v0='Q' where id=4; -update noar tt set b0='HQ1' where id=4; -update noar ti set b0='HQ1' where id=4; -update noar tt set v0='KO4TCQDILA3UUMT3NV6R77' where id=4; -update noar ti set v0='KO4TCQDILA3UUMT3NV6R77' where id=4; -update noar tt set b1='02HHJIA4HZLQEG7APPUXOX245CPS' where id=4; -update noar ti set b1='02HHJIA4HZLQEG7APPUXOX245CPS' where id=4; -update noar tt set v0='LI0934Y17KESMS71K4PSQBGQNQ8RH40S' where id=4; -update noar ti set v0='LI0934Y17KESMS71K4PSQBGQNQ8RH40S' where id=4; -update noar tt set b2='74' where id=4; -update noar ti set b2='74' where id=4; -update noar tt set v0='81FVNDAQHCUUNQ2HG15S17KJBI' where id=5; -update noar ti set v0='81FVNDAQHCUUNQ2HG15S17KJBI' where id=5; -update noar tt set b0='O1BTP' where id=5; -update noar ti set b0='O1BTP' where id=5; -update noar tt set v0='WBMC34EENE9TP83' where id=5; -update noar ti set v0='WBMC34EENE9TP83' where id=5; -update noar tt set b1='EFYMTD' where id=5; -update noar ti set b1='EFYMTD' where id=5; -update noar tt set v0='0NZ9B' where id=5; -update noar ti set v0='0NZ9B' where id=5; -update noar tt set b2='XJL5GIVALX6KDRW' where id=5; -update noar ti set b2='XJL5GIVALX6KDRW' where id=5; -update noar tt set v0='4GX5VQ9' where id=6; -update noar ti set v0='4GX5VQ9' where id=6; -update noar tt set b0='ECY71J1J3HVMYG8WLAE070YBXKUM6FIS' where id=6; -update noar ti set b0='ECY71J1J3HVMYG8WLAE070YBXKUM6FIS' where id=6; -update noar tt set v0='L9TGTGV8J20K5EPRU6KVV0R' where id=6; -update noar ti set v0='L9TGTGV8J20K5EPRU6KVV0R' where id=6; -update noar tt set b1='5QUD9BM0XMM7DAPOOZAPU1JF' where id=6; -update noar ti set b1='5QUD9BM0XMM7DAPOOZAPU1JF' where id=6; -update noar tt set v0='8KZZEVEWBSDTDA56C15CWNVOTMKQDV2' where id=6; -update noar ti set v0='8KZZEVEWBSDTDA56C15CWNVOTMKQDV2' where id=6; -update noar tt set b2='4CC5S9IYCXFF3ASFEQWF89O4' where id=6; -update noar ti set b2='4CC5S9IYCXFF3ASFEQWF89O4' where id=6; -update noar tt set v0='31FF7MR0PLYB6PYY67PMYPYQM2' where id=7; -update noar ti set v0='31FF7MR0PLYB6PYY67PMYPYQM2' where id=7; -update noar tt set b0='94WMM1DO6N3CX6GIPN' where id=7; -update noar ti set b0='94WMM1DO6N3CX6GIPN' where id=7; -update noar tt set v0='005XU1TZDLCDQ5829A8Z0' where id=7; -update noar ti set v0='005XU1TZDLCDQ5829A8Z0' where id=7; -update noar tt set b1='NKLQQJAJ8XZTBK7RLCROM4U' where id=7; -update noar ti set b1='NKLQQJAJ8XZTBK7RLCROM4U' where id=7; -update noar tt set v0='X2CPFMGQUCXVLU' where id=7; -update noar ti set v0='X2CPFMGQUCXVLU' where id=7; -update noar tt set b2='DZCI0U39V6ULZIIAL3BXYWEU4' where id=7; -update noar ti set b2='DZCI0U39V6ULZIIAL3BXYWEU4' where id=7; -update noar tt set v0='5C0G66M6AA66A55Y5ONHKCPF' where id=8; -update noar ti set v0='5C0G66M6AA66A55Y5ONHKCPF' where id=8; -update noar tt set b0='AF3I7FBLFV4K48AAOW45CY89SLO16JB' where id=8; -update noar ti set b0='AF3I7FBLFV4K48AAOW45CY89SLO16JB' where id=8; -update noar tt set v0='VLQR' where id=8; -update noar ti set v0='VLQR' where id=8; -update noar tt set b1='DWCJBMJMV' where id=8; -update noar ti set b1='DWCJBMJMV' where id=8; -update noar tt set v0='3XCAM3ZY55OU0' where id=8; -update noar ti set v0='3XCAM3ZY55OU0' where id=8; -update noar tt set b2='39J9JMRB6XVDQRUVM7HBOMZ1K0W' where id=8; -update noar ti set b2='39J9JMRB6XVDQRUVM7HBOMZ1K0W' where id=8; -update noar tt set v0='8' where id=9; -update noar ti set v0='8' where id=9; -update noar tt set b0='YT0SSUTLYOX4OIYY49EWYSR60G' where id=9; -update noar ti set b0='YT0SSUTLYOX4OIYY49EWYSR60G' where id=9; -update noar tt set v0='2ANB7SH1PNC' where id=9; -update noar ti set v0='2ANB7SH1PNC' where id=9; -update noar tt set b1='G4T' where id=9; -update noar ti set b1='G4T' where id=9; -update noar tt set v0='XJAPFXTIVLPL5A39EBR9F' where id=9; -update noar ti set v0='XJAPFXTIVLPL5A39EBR9F' where id=9; -update noar tt set b2='4D' where id=9; -update noar ti set b2='4D' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 blob null, -b1 mediumblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='V4U42S' where id=1; -update noar ti set v0='V4U42S' where id=1; -update noar tt set b0='H4J' where id=1; -update noar ti set b0='H4J' where id=1; -update noar tt set v0='0Q6RJI9JQJ1AB1' where id=1; -update noar ti set v0='0Q6RJI9JQJ1AB1' where id=1; -update noar tt set b1='E4GT3366FYYATPPM3KT0YS14R' where id=1; -update noar ti set b1='E4GT3366FYYATPPM3KT0YS14R' where id=1; -update noar tt set v0='6XCTAXZZZB6MI330BJOJTSKIW8LTLNNN' where id=1; -update noar ti set v0='6XCTAXZZZB6MI330BJOJTSKIW8LTLNNN' where id=1; -update noar tt set b2='5HJN6MZFI3N5UEIE8AHOUG54C80D' where id=1; -update noar ti set b2='5HJN6MZFI3N5UEIE8AHOUG54C80D' where id=1; -update noar tt set v0='0H7MTVT7T7UO5AU64KIXF' where id=2; -update noar ti set v0='0H7MTVT7T7UO5AU64KIXF' where id=2; -update noar tt set b0='KCS6JOGT8PDKOJ16O5UFYXFBHU1D' where id=2; -update noar ti set b0='KCS6JOGT8PDKOJ16O5UFYXFBHU1D' where id=2; -update noar tt set v0='F1YXJBHYUUEZSPKXEFZ8L1' where id=2; -update noar ti set v0='F1YXJBHYUUEZSPKXEFZ8L1' where id=2; -update noar tt set b1='072E3QCHF2HBR2N2D29RKT' where id=2; -update noar ti set b1='072E3QCHF2HBR2N2D29RKT' where id=2; -update noar tt set v0='3MPNJ552DSHLPO296DLS0GI' where id=2; -update noar ti set v0='3MPNJ552DSHLPO296DLS0GI' where id=2; -update noar tt set b2='KMFTY3B0RVL06C9VBXO' where id=2; -update noar ti set b2='KMFTY3B0RVL06C9VBXO' where id=2; -update noar tt set v0='I60E4' where id=3; -update noar ti set v0='I60E4' where id=3; -update noar tt set b0='Q4U8B8Y5QMOIR61C7Q2CRS8DGCIBO0A2' where id=3; -update noar ti set b0='Q4U8B8Y5QMOIR61C7Q2CRS8DGCIBO0A2' where id=3; -update noar tt set v0='GS93J6YLBRSR9MCPN33BC' where id=3; -update noar ti set v0='GS93J6YLBRSR9MCPN33BC' where id=3; -update noar tt set b1='EQ2YDY4XWPBA6JUXY04C4N8GCB' where id=3; -update noar ti set b1='EQ2YDY4XWPBA6JUXY04C4N8GCB' where id=3; -update noar tt set v0='5K8XG' where id=3; -update noar ti set v0='5K8XG' where id=3; -update noar tt set b2='5N24QX5QD3' where id=3; -update noar ti set b2='5N24QX5QD3' where id=3; -update noar tt set v0='7YEVQH5M79Q06P' where id=4; -update noar ti set v0='7YEVQH5M79Q06P' where id=4; -update noar tt set b0='OKR252ZEIIK4W031X' where id=4; -update noar ti set b0='OKR252ZEIIK4W031X' where id=4; -update noar tt set v0='RCTUNEGEM9HHSW' where id=4; -update noar ti set v0='RCTUNEGEM9HHSW' where id=4; -update noar tt set b1='32PCUK2826GG' where id=4; -update noar ti set b1='32PCUK2826GG' where id=4; -update noar tt set v0='9ME65ODSRFPDE73Z3' where id=4; -update noar ti set v0='9ME65ODSRFPDE73Z3' where id=4; -update noar tt set b2='VW63MKBAY4I3K9X' where id=4; -update noar ti set b2='VW63MKBAY4I3K9X' where id=4; -update noar tt set v0='UDA' where id=5; -update noar ti set v0='UDA' where id=5; -update noar tt set b0='EJ6D5VW3ZO20F6HUWK4DD84NC6Y' where id=5; -update noar ti set b0='EJ6D5VW3ZO20F6HUWK4DD84NC6Y' where id=5; -update noar tt set v0='F8D1OBTM65ZTRSN1QWEMGHH' where id=5; -update noar ti set v0='F8D1OBTM65ZTRSN1QWEMGHH' where id=5; -update noar tt set b1='YJSXEU25P95G' where id=5; -update noar ti set b1='YJSXEU25P95G' where id=5; -update noar tt set v0='YZ9SJI5FFLW1' where id=5; -update noar ti set v0='YZ9SJI5FFLW1' where id=5; -update noar tt set b2='6VCXQT97L0AYRIYLSUDEEPB' where id=5; -update noar ti set b2='6VCXQT97L0AYRIYLSUDEEPB' where id=5; -update noar tt set v0='B3KZ0EZTUGFZUD9TZ8NDCTCXJOUQA7VW' where id=6; -update noar ti set v0='B3KZ0EZTUGFZUD9TZ8NDCTCXJOUQA7VW' where id=6; -update noar tt set b0='YZH1V4U6SK52EBIGL6' where id=6; -update noar ti set b0='YZH1V4U6SK52EBIGL6' where id=6; -update noar tt set v0='YULBVM1' where id=6; -update noar ti set v0='YULBVM1' where id=6; -update noar tt set b1='GIQX8GUBCMBX7DE6PL0' where id=6; -update noar ti set b1='GIQX8GUBCMBX7DE6PL0' where id=6; -update noar tt set v0='VBQZ07ZY4YFT7' where id=6; -update noar ti set v0='VBQZ07ZY4YFT7' where id=6; -update noar tt set b2='AYS0I804EKVOUCAJET01GEYFBN3YH1HJ' where id=6; -update noar ti set b2='AYS0I804EKVOUCAJET01GEYFBN3YH1HJ' where id=6; -update noar tt set v0='YP91PTVZ8IQ5YWS7CNFKNO' where id=7; -update noar ti set v0='YP91PTVZ8IQ5YWS7CNFKNO' where id=7; -update noar tt set b0='GLOILK015BVL72VZUGFOOA' where id=7; -update noar ti set b0='GLOILK015BVL72VZUGFOOA' where id=7; -update noar tt set v0='RASARM4A9BKFQFGBGCMPJTG' where id=7; -update noar ti set v0='RASARM4A9BKFQFGBGCMPJTG' where id=7; -update noar tt set b1='K' where id=7; -update noar ti set b1='K' where id=7; -update noar tt set v0='H9RPID4JZBX655PFIFJMNJNJI' where id=7; -update noar ti set v0='H9RPID4JZBX655PFIFJMNJNJI' where id=7; -update noar tt set b2='9P5LV7PQ22C' where id=7; -update noar ti set b2='9P5LV7PQ22C' where id=7; -update noar tt set v0='0XTU6QYKXN9JI4RADPS' where id=8; -update noar ti set v0='0XTU6QYKXN9JI4RADPS' where id=8; -update noar tt set b0='HR1N216X32E8DZU4T8BD' where id=8; -update noar ti set b0='HR1N216X32E8DZU4T8BD' where id=8; -update noar tt set v0='3U6L6KDBFI6EZL' where id=8; -update noar ti set v0='3U6L6KDBFI6EZL' where id=8; -update noar tt set b1='9AB3UOB3QPAG' where id=8; -update noar ti set b1='9AB3UOB3QPAG' where id=8; -update noar tt set v0='5BEPSZDGWEY2UUS3GPSXUCZUJJ1EDY' where id=8; -update noar ti set v0='5BEPSZDGWEY2UUS3GPSXUCZUJJ1EDY' where id=8; -update noar tt set b2='O4J4PTYRGZUSNG9QW5SA6KHDTXUQ' where id=8; -update noar ti set b2='O4J4PTYRGZUSNG9QW5SA6KHDTXUQ' where id=8; -update noar tt set v0='69T242S86LZCDCJG4P' where id=9; -update noar ti set v0='69T242S86LZCDCJG4P' where id=9; -update noar tt set b0='CZB568J5' where id=9; -update noar ti set b0='CZB568J5' where id=9; -update noar tt set v0='WTQKSNNL7SFBK9UK' where id=9; -update noar ti set v0='WTQKSNNL7SFBK9UK' where id=9; -update noar tt set b1='6IR75N' where id=9; -update noar ti set b1='6IR75N' where id=9; -update noar tt set v0='15LQ68J3MS1LUWU6WYGS68TFZAVXZ9' where id=9; -update noar ti set v0='15LQ68J3MS1LUWU6WYGS68TFZAVXZ9' where id=9; -update noar tt set b2='SUK1SPW7SXO198S0GM3XMF' where id=9; -update noar ti set b2='SUK1SPW7SXO198S0GM3XMF' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 blob null, -b1 mediumblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='L23JVO0UHDHBSR5JYDB7W' where id=1; -update noar ti set v0='L23JVO0UHDHBSR5JYDB7W' where id=1; -update noar tt set b0='MKPTI3J043PRY2BP' where id=1; -update noar ti set b0='MKPTI3J043PRY2BP' where id=1; -update noar tt set v0='DZUSDSK1063WV' where id=1; -update noar ti set v0='DZUSDSK1063WV' where id=1; -update noar tt set b1='8F5YPE1J71PB3F6WOI3QP8X4U2Z' where id=1; -update noar ti set b1='8F5YPE1J71PB3F6WOI3QP8X4U2Z' where id=1; -update noar tt set v0='G6W739LBYFWYVQ' where id=1; -update noar ti set v0='G6W739LBYFWYVQ' where id=1; -update noar tt set b2='CEB2AIP' where id=1; -update noar ti set b2='CEB2AIP' where id=1; -update noar tt set v0='UXQMN46WT92ISPAEMOW' where id=2; -update noar ti set v0='UXQMN46WT92ISPAEMOW' where id=2; -update noar tt set b0='NKB9PC3HGIBZHSEA53RECEZOO2ZTC' where id=2; -update noar ti set b0='NKB9PC3HGIBZHSEA53RECEZOO2ZTC' where id=2; -update noar tt set v0='X22' where id=2; -update noar ti set v0='X22' where id=2; -update noar tt set b1='R259RG2V8G968RMOGYN2' where id=2; -update noar ti set b1='R259RG2V8G968RMOGYN2' where id=2; -update noar tt set v0='G1QMTV' where id=2; -update noar ti set v0='G1QMTV' where id=2; -update noar tt set b2='RWJKOG6ZR3TI2T0WLAQACCNZFHD6A8' where id=2; -update noar ti set b2='RWJKOG6ZR3TI2T0WLAQACCNZFHD6A8' where id=2; -update noar tt set v0='76HXO72TSYEEI9' where id=3; -update noar ti set v0='76HXO72TSYEEI9' where id=3; -update noar tt set b0='TXABT5AVF1MBWA7U' where id=3; -update noar ti set b0='TXABT5AVF1MBWA7U' where id=3; -update noar tt set v0='9KC9D0592I0SQRK49P5JJ23J0Z' where id=3; -update noar ti set v0='9KC9D0592I0SQRK49P5JJ23J0Z' where id=3; -update noar tt set b1='RR7XHD7MMJN3ZSEDS2R9PSSK' where id=3; -update noar ti set b1='RR7XHD7MMJN3ZSEDS2R9PSSK' where id=3; -update noar tt set v0='CDXOBTBHJ' where id=3; -update noar ti set v0='CDXOBTBHJ' where id=3; -update noar tt set b2='3QFH6LK51HFAQCK0DR4I22NM26C' where id=3; -update noar ti set b2='3QFH6LK51HFAQCK0DR4I22NM26C' where id=3; -update noar tt set v0='NXFEIUECQT13JE78SSQN2HWZHGGE' where id=4; -update noar ti set v0='NXFEIUECQT13JE78SSQN2HWZHGGE' where id=4; -update noar tt set b0='KY9B62SBKFMZ9HF5AH' where id=4; -update noar ti set b0='KY9B62SBKFMZ9HF5AH' where id=4; -update noar tt set v0='6Z73Z89' where id=4; -update noar ti set v0='6Z73Z89' where id=4; -update noar tt set b1='U1TRVLQCBI1X7' where id=4; -update noar ti set b1='U1TRVLQCBI1X7' where id=4; -update noar tt set v0='P7F86F1TIWW' where id=4; -update noar ti set v0='P7F86F1TIWW' where id=4; -update noar tt set b2='00FLJI' where id=4; -update noar ti set b2='00FLJI' where id=4; -update noar tt set v0='MWRTHB3RLJ' where id=5; -update noar ti set v0='MWRTHB3RLJ' where id=5; -update noar tt set b0='2O7GJDXGRVQE90H1AK4OJ4KA9' where id=5; -update noar ti set b0='2O7GJDXGRVQE90H1AK4OJ4KA9' where id=5; -update noar tt set v0='NMUWM2FKI0RSXCOZS' where id=5; -update noar ti set v0='NMUWM2FKI0RSXCOZS' where id=5; -update noar tt set b1='2X89' where id=5; -update noar ti set b1='2X89' where id=5; -update noar tt set v0='XAWYR86T0G9DOMSF3VVXL' where id=5; -update noar ti set v0='XAWYR86T0G9DOMSF3VVXL' where id=5; -update noar tt set b2='H6ZY6HCSQ7NESTD247C' where id=5; -update noar ti set b2='H6ZY6HCSQ7NESTD247C' where id=5; -update noar tt set v0='EFHKQRVHCB6LXJ1ZBOS' where id=6; -update noar ti set v0='EFHKQRVHCB6LXJ1ZBOS' where id=6; -update noar tt set b0='XF' where id=6; -update noar ti set b0='XF' where id=6; -update noar tt set v0='88' where id=6; -update noar ti set v0='88' where id=6; -update noar tt set b1='BZER014Y791XS3OX3Y8GYNBTI3WC' where id=6; -update noar ti set b1='BZER014Y791XS3OX3Y8GYNBTI3WC' where id=6; -update noar tt set v0='WIHDAVU' where id=6; -update noar ti set v0='WIHDAVU' where id=6; -update noar tt set b2='NYJG0QPZCCIRBIDDL' where id=6; -update noar ti set b2='NYJG0QPZCCIRBIDDL' where id=6; -update noar tt set v0='KASW3I0EVTBEV8BR9GX4VD724ODZY' where id=7; -update noar ti set v0='KASW3I0EVTBEV8BR9GX4VD724ODZY' where id=7; -update noar tt set b0='GCXH6X5JE6U0TDEX5PX18D' where id=7; -update noar ti set b0='GCXH6X5JE6U0TDEX5PX18D' where id=7; -update noar tt set v0='R0IF0T0XHQHE7' where id=7; -update noar ti set v0='R0IF0T0XHQHE7' where id=7; -update noar tt set b1='64H32X' where id=7; -update noar ti set b1='64H32X' where id=7; -update noar tt set v0='Q72AO9876' where id=7; -update noar ti set v0='Q72AO9876' where id=7; -update noar tt set b2='2' where id=7; -update noar ti set b2='2' where id=7; -update noar tt set v0='06K8SZ46D' where id=8; -update noar ti set v0='06K8SZ46D' where id=8; -update noar tt set b0='EM1WWEREDTE4AJARNKC' where id=8; -update noar ti set b0='EM1WWEREDTE4AJARNKC' where id=8; -update noar tt set v0='DCUP2AWKDWUP630HCQHA' where id=8; -update noar ti set v0='DCUP2AWKDWUP630HCQHA' where id=8; -update noar tt set b1='W8OJTVT9Q09QMB6M70EY9MZ25H' where id=8; -update noar ti set b1='W8OJTVT9Q09QMB6M70EY9MZ25H' where id=8; -update noar tt set v0='HZN48T' where id=8; -update noar ti set v0='HZN48T' where id=8; -update noar tt set b2='KB19D9UTK' where id=8; -update noar ti set b2='KB19D9UTK' where id=8; -update noar tt set v0='W' where id=9; -update noar ti set v0='W' where id=9; -update noar tt set b0='2TSQQQHHLS6GKQ0KZMV1HA77RJJKXY' where id=9; -update noar ti set b0='2TSQQQHHLS6GKQ0KZMV1HA77RJJKXY' where id=9; -update noar tt set v0='8IS5ZCQOXGYLHI9C81KGTI55UZ3ISEWT' where id=9; -update noar ti set v0='8IS5ZCQOXGYLHI9C81KGTI55UZ3ISEWT' where id=9; -update noar tt set b1='N' where id=9; -update noar ti set b1='N' where id=9; -update noar tt set v0='RNDUXEOH16N7SK2R6P0SXK814GJCM' where id=9; -update noar ti set v0='RNDUXEOH16N7SK2R6P0SXK814GJCM' where id=9; -update noar tt set b2='YXWJ30BF6XUE84P3U' where id=9; -update noar ti set b2='YXWJ30BF6XUE84P3U' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 blob not null, -b1 mediumblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='ZER3B2TB' where id=1; -update noar ti set v0='ZER3B2TB' where id=1; -update noar tt set b0='OM3NIZCJASAZIK0T7VQV53D9WZM9TU' where id=1; -update noar ti set b0='OM3NIZCJASAZIK0T7VQV53D9WZM9TU' where id=1; -update noar tt set v0='BJJT72' where id=1; -update noar ti set v0='BJJT72' where id=1; -update noar tt set b1='2YQ41M89C0PMEL241QNVZCIPP6S7SWR' where id=1; -update noar ti set b1='2YQ41M89C0PMEL241QNVZCIPP6S7SWR' where id=1; -update noar tt set v0='GZHONEIXEE' where id=1; -update noar ti set v0='GZHONEIXEE' where id=1; -update noar tt set b2='B' where id=1; -update noar ti set b2='B' where id=1; -update noar tt set v0='Y1F1JSFXMMBYY8KUPEZHMXMP866' where id=2; -update noar ti set v0='Y1F1JSFXMMBYY8KUPEZHMXMP866' where id=2; -update noar tt set b0='6CAMSKV' where id=2; -update noar ti set b0='6CAMSKV' where id=2; -update noar tt set v0='9G9TWJ3T8UYGQ4CZNXJC3NG11' where id=2; -update noar ti set v0='9G9TWJ3T8UYGQ4CZNXJC3NG11' where id=2; -update noar tt set b1='RM7KCXC8FKHU7YY6HUP1DELLR74' where id=2; -update noar ti set b1='RM7KCXC8FKHU7YY6HUP1DELLR74' where id=2; -update noar tt set v0='YFTQOOJUC7LJ5H' where id=2; -update noar ti set v0='YFTQOOJUC7LJ5H' where id=2; -update noar tt set b2='5L0BWCR4PL25' where id=2; -update noar ti set b2='5L0BWCR4PL25' where id=2; -update noar tt set v0='12ZH4BYR7IA51KI0H3QPZ61J' where id=3; -update noar ti set v0='12ZH4BYR7IA51KI0H3QPZ61J' where id=3; -update noar tt set b0='NF0N3M91UHYHVTCJ4X58RDAPD0QT13' where id=3; -update noar ti set b0='NF0N3M91UHYHVTCJ4X58RDAPD0QT13' where id=3; -update noar tt set v0='3PX5CPKSDHLKDX5DB' where id=3; -update noar ti set v0='3PX5CPKSDHLKDX5DB' where id=3; -update noar tt set b1='V2IVULHBCZEISR9ASTF81AIV' where id=3; -update noar ti set b1='V2IVULHBCZEISR9ASTF81AIV' where id=3; -update noar tt set v0='J1D98GFRQ' where id=3; -update noar ti set v0='J1D98GFRQ' where id=3; -update noar tt set b2='O79MR8LFTGWRHYCI7FP3' where id=3; -update noar ti set b2='O79MR8LFTGWRHYCI7FP3' where id=3; -update noar tt set v0='AOJLLR4RIKNLY166PIN1XBMFR' where id=4; -update noar ti set v0='AOJLLR4RIKNLY166PIN1XBMFR' where id=4; -update noar tt set b0='0QLH' where id=4; -update noar ti set b0='0QLH' where id=4; -update noar tt set v0='ZEMNBKSMEL825FSHG9U' where id=4; -update noar ti set v0='ZEMNBKSMEL825FSHG9U' where id=4; -update noar tt set b1='30R7LQ861ZU535IKTNQ' where id=4; -update noar ti set b1='30R7LQ861ZU535IKTNQ' where id=4; -update noar tt set v0='VSS177UTQCQ3EXFFIV35KWPP' where id=4; -update noar ti set v0='VSS177UTQCQ3EXFFIV35KWPP' where id=4; -update noar tt set b2='RJ3B1O2B9JLKLIX3VEO' where id=4; -update noar ti set b2='RJ3B1O2B9JLKLIX3VEO' where id=4; -update noar tt set v0='VJ2GJ9UHEOKUCHCQO2ZR' where id=5; -update noar ti set v0='VJ2GJ9UHEOKUCHCQO2ZR' where id=5; -update noar tt set b0='Z8J38QRMD6U4Q8R4WRUWNZAA78DP8' where id=5; -update noar ti set b0='Z8J38QRMD6U4Q8R4WRUWNZAA78DP8' where id=5; -update noar tt set v0='H86ESHCEPJ' where id=5; -update noar ti set v0='H86ESHCEPJ' where id=5; -update noar tt set b1='7PBBSVC0KSXACSEKKWAABY28O3' where id=5; -update noar ti set b1='7PBBSVC0KSXACSEKKWAABY28O3' where id=5; -update noar tt set v0='8IR3IHD5LAR36X7UE0R' where id=5; -update noar ti set v0='8IR3IHD5LAR36X7UE0R' where id=5; -update noar tt set b2='I2V7XPDJVWEA' where id=5; -update noar ti set b2='I2V7XPDJVWEA' where id=5; -update noar tt set v0='D' where id=6; -update noar ti set v0='D' where id=6; -update noar tt set b0='NIQ2XFMXO22' where id=6; -update noar ti set b0='NIQ2XFMXO22' where id=6; -update noar tt set v0='LA1VGDAVEDESQ7B5' where id=6; -update noar ti set v0='LA1VGDAVEDESQ7B5' where id=6; -update noar tt set b1='0ESWKMPYO2S8NAA' where id=6; -update noar ti set b1='0ESWKMPYO2S8NAA' where id=6; -update noar tt set v0='UJFWZCBDXW4G99' where id=6; -update noar ti set v0='UJFWZCBDXW4G99' where id=6; -update noar tt set b2='6O5X47SSSH3ZEZ6RLLT70Y86ARHF998' where id=6; -update noar ti set b2='6O5X47SSSH3ZEZ6RLLT70Y86ARHF998' where id=6; -update noar tt set v0='R' where id=7; -update noar ti set v0='R' where id=7; -update noar tt set b0='8IBIP4YPWZJO90JULIBMFX8SW' where id=7; -update noar ti set b0='8IBIP4YPWZJO90JULIBMFX8SW' where id=7; -update noar tt set v0='9US3WWSD54WU5BPYBXT8I8N5F8' where id=7; -update noar ti set v0='9US3WWSD54WU5BPYBXT8I8N5F8' where id=7; -update noar tt set b1='E2DJZ7YNJJMLE96' where id=7; -update noar ti set b1='E2DJZ7YNJJMLE96' where id=7; -update noar tt set v0='9UFXX5IWV68YADBT99YR8X2JES78' where id=7; -update noar ti set v0='9UFXX5IWV68YADBT99YR8X2JES78' where id=7; -update noar tt set b2='38E6IQJ6' where id=7; -update noar ti set b2='38E6IQJ6' where id=7; -update noar tt set v0='4P8Q713F5' where id=8; -update noar ti set v0='4P8Q713F5' where id=8; -update noar tt set b0='L3G5OSJ07WU8TXJYSV939G8' where id=8; -update noar ti set b0='L3G5OSJ07WU8TXJYSV939G8' where id=8; -update noar tt set v0='4Z28GWV0WI9DK' where id=8; -update noar ti set v0='4Z28GWV0WI9DK' where id=8; -update noar tt set b1='YNGBR14' where id=8; -update noar ti set b1='YNGBR14' where id=8; -update noar tt set v0='KNJ1OR1I06RCB5EU5HW3NRNFXE5BBMQ' where id=8; -update noar ti set v0='KNJ1OR1I06RCB5EU5HW3NRNFXE5BBMQ' where id=8; -update noar tt set b2='0U4B4NEA8KZTNWC8MI' where id=8; -update noar ti set b2='0U4B4NEA8KZTNWC8MI' where id=8; -update noar tt set v0='CSGHKZSBAHBDO3I4D653ST18QX' where id=9; -update noar ti set v0='CSGHKZSBAHBDO3I4D653ST18QX' where id=9; -update noar tt set b0='UZ' where id=9; -update noar ti set b0='UZ' where id=9; -update noar tt set v0='21T1PSG8YVT3RR383YNM0' where id=9; -update noar ti set v0='21T1PSG8YVT3RR383YNM0' where id=9; -update noar tt set b1='QYV96LKUZ' where id=9; -update noar ti set b1='QYV96LKUZ' where id=9; -update noar tt set v0='BWURG0KM06RKWPZ53H2EXC9PYA8ND4U5' where id=9; -update noar ti set v0='BWURG0KM06RKWPZ53H2EXC9PYA8ND4U5' where id=9; -update noar tt set b2='WGDVLBDEZ56O45GNFND' where id=9; -update noar ti set b2='WGDVLBDEZ56O45GNFND' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 blob not null, -b1 mediumblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='CCK0JJHK7TK0BSFL2S1HM2' where id=1; -update noar ti set v0='CCK0JJHK7TK0BSFL2S1HM2' where id=1; -update noar tt set b0='VL18TR2DNYDC25ZG' where id=1; -update noar ti set b0='VL18TR2DNYDC25ZG' where id=1; -update noar tt set v0='B8AKFZDJ4HKCMSFNEC8WUHI8S0ZH3L6T' where id=1; -update noar ti set v0='B8AKFZDJ4HKCMSFNEC8WUHI8S0ZH3L6T' where id=1; -update noar tt set b1='4FYM92FEMWKSBPP1LW' where id=1; -update noar ti set b1='4FYM92FEMWKSBPP1LW' where id=1; -update noar tt set v0='JC' where id=1; -update noar ti set v0='JC' where id=1; -update noar tt set b2='2H' where id=1; -update noar ti set b2='2H' where id=1; -update noar tt set v0='UU1BRNR99FG59BXQQLUJ8KYFIOLJ38G' where id=2; -update noar ti set v0='UU1BRNR99FG59BXQQLUJ8KYFIOLJ38G' where id=2; -update noar tt set b0='KGSP7ES2YO3UH2LQR' where id=2; -update noar ti set b0='KGSP7ES2YO3UH2LQR' where id=2; -update noar tt set v0='USG' where id=2; -update noar ti set v0='USG' where id=2; -update noar tt set b1='2964GQ' where id=2; -update noar ti set b1='2964GQ' where id=2; -update noar tt set v0='37B' where id=2; -update noar ti set v0='37B' where id=2; -update noar tt set b2='DE4Y61ZGKWVQCN1DJXY2UGGW4BC1' where id=2; -update noar ti set b2='DE4Y61ZGKWVQCN1DJXY2UGGW4BC1' where id=2; -update noar tt set v0='YQM7CNRCYIS82JLNP9ABP9MMW6QSB' where id=3; -update noar ti set v0='YQM7CNRCYIS82JLNP9ABP9MMW6QSB' where id=3; -update noar tt set b0='KMIXKI5GZAB8V5TCFRE5' where id=3; -update noar ti set b0='KMIXKI5GZAB8V5TCFRE5' where id=3; -update noar tt set v0='PO9RSR13T' where id=3; -update noar ti set v0='PO9RSR13T' where id=3; -update noar tt set b1='GUGA8H5PAXBQQ7MYER0D' where id=3; -update noar ti set b1='GUGA8H5PAXBQQ7MYER0D' where id=3; -update noar tt set v0='VF3QKSSOV78CX7MA0A2N' where id=3; -update noar ti set v0='VF3QKSSOV78CX7MA0A2N' where id=3; -update noar tt set b2='IK6Y' where id=3; -update noar ti set b2='IK6Y' where id=3; -update noar tt set v0='QPY891R3QSBMEG3A01AMUMG' where id=4; -update noar ti set v0='QPY891R3QSBMEG3A01AMUMG' where id=4; -update noar tt set b0='MGGM9' where id=4; -update noar ti set b0='MGGM9' where id=4; -update noar tt set v0='IERH' where id=4; -update noar ti set v0='IERH' where id=4; -update noar tt set b1='3OBWCFUP7GIRV9' where id=4; -update noar ti set b1='3OBWCFUP7GIRV9' where id=4; -update noar tt set v0='IXV' where id=4; -update noar ti set v0='IXV' where id=4; -update noar tt set b2='APXIHLJ580D7J5B71' where id=4; -update noar ti set b2='APXIHLJ580D7J5B71' where id=4; -update noar tt set v0='U2IL4JG33NT24NE8LY' where id=5; -update noar ti set v0='U2IL4JG33NT24NE8LY' where id=5; -update noar tt set b0='DLI4DXN' where id=5; -update noar ti set b0='DLI4DXN' where id=5; -update noar tt set v0='8ORFOQ73YOIH3' where id=5; -update noar ti set v0='8ORFOQ73YOIH3' where id=5; -update noar tt set b1='KL6EE66XTKR59ZSPS6W714IK' where id=5; -update noar ti set b1='KL6EE66XTKR59ZSPS6W714IK' where id=5; -update noar tt set v0='JQZ5X92O2MSUW7ZGFF2JJIOHMYZRMN1' where id=5; -update noar ti set v0='JQZ5X92O2MSUW7ZGFF2JJIOHMYZRMN1' where id=5; -update noar tt set b2='VCMIP73NF3HJM5QQDAECK' where id=5; -update noar ti set b2='VCMIP73NF3HJM5QQDAECK' where id=5; -update noar tt set v0='XF2B' where id=6; -update noar ti set v0='XF2B' where id=6; -update noar tt set b0='1RJZTW7LCZA0KRG0FE4VLKX2' where id=6; -update noar ti set b0='1RJZTW7LCZA0KRG0FE4VLKX2' where id=6; -update noar tt set v0='GSK501DWXYLPS13LU' where id=6; -update noar ti set v0='GSK501DWXYLPS13LU' where id=6; -update noar tt set b1='GNCK3I7MPEGODCWB62SSIFATXI' where id=6; -update noar ti set b1='GNCK3I7MPEGODCWB62SSIFATXI' where id=6; -update noar tt set v0='K60R5UCOK2E' where id=6; -update noar ti set v0='K60R5UCOK2E' where id=6; -update noar tt set b2='XU5GVMZCYA5GS18' where id=6; -update noar ti set b2='XU5GVMZCYA5GS18' where id=6; -update noar tt set v0='FJXCHJU2XCJF0XLM8N1G8VA44EW421QO' where id=7; -update noar ti set v0='FJXCHJU2XCJF0XLM8N1G8VA44EW421QO' where id=7; -update noar tt set b0='CN73PX7SFGUVX' where id=7; -update noar ti set b0='CN73PX7SFGUVX' where id=7; -update noar tt set v0='UK9QL' where id=7; -update noar ti set v0='UK9QL' where id=7; -update noar tt set b1='Y3H98RLLVX5FTUXP2HY252J92B2WDL' where id=7; -update noar ti set b1='Y3H98RLLVX5FTUXP2HY252J92B2WDL' where id=7; -update noar tt set v0='34HPE' where id=7; -update noar ti set v0='34HPE' where id=7; -update noar tt set b2='JUPPB4RDTY2OZ2XMXOR' where id=7; -update noar ti set b2='JUPPB4RDTY2OZ2XMXOR' where id=7; -update noar tt set v0='TMJV7PIHDU4O09GLRR5DZ2J' where id=8; -update noar ti set v0='TMJV7PIHDU4O09GLRR5DZ2J' where id=8; -update noar tt set b0='TNZK2E0KUKJBZ' where id=8; -update noar ti set b0='TNZK2E0KUKJBZ' where id=8; -update noar tt set v0='C' where id=8; -update noar ti set v0='C' where id=8; -update noar tt set b1='74O2NJ39WIUJ9BHT08GJNE' where id=8; -update noar ti set b1='74O2NJ39WIUJ9BHT08GJNE' where id=8; -update noar tt set v0='KB7QSJSUPRGALK' where id=8; -update noar ti set v0='KB7QSJSUPRGALK' where id=8; -update noar tt set b2='UP4DW' where id=8; -update noar ti set b2='UP4DW' where id=8; -update noar tt set v0='D2XC722DSEZHLEAG5V' where id=9; -update noar ti set v0='D2XC722DSEZHLEAG5V' where id=9; -update noar tt set b0='C8FCTDCLFUJOVIL' where id=9; -update noar ti set b0='C8FCTDCLFUJOVIL' where id=9; -update noar tt set v0='ASX1JM3TRVHLI5' where id=9; -update noar ti set v0='ASX1JM3TRVHLI5' where id=9; -update noar tt set b1='LJCX8EEK2RZALC3PTVJFM' where id=9; -update noar ti set b1='LJCX8EEK2RZALC3PTVJFM' where id=9; -update noar tt set v0='Y7BB0428G8RCGVT6QSYDAIYGM' where id=9; -update noar ti set v0='Y7BB0428G8RCGVT6QSYDAIYGM' where id=9; -update noar tt set b2='FC0OHEY' where id=9; -update noar ti set b2='FC0OHEY' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 blob null, -b1 mediumblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='68WFG9DJ0F5SPGNLS9Y3VBGQW' where id=1; -update noar ti set v0='68WFG9DJ0F5SPGNLS9Y3VBGQW' where id=1; -update noar tt set b0='GJJQDWXFVVW9W1C1V3IGUY0H73C0Z' where id=1; -update noar ti set b0='GJJQDWXFVVW9W1C1V3IGUY0H73C0Z' where id=1; -update noar tt set v0='HZLH' where id=1; -update noar ti set v0='HZLH' where id=1; -update noar tt set b1='TAMNEBRZIYWZMMAXXC' where id=1; -update noar ti set b1='TAMNEBRZIYWZMMAXXC' where id=1; -update noar tt set v0='1GN9L6YQDOW5B2D7QNP2KWHJZAN7UM5X' where id=1; -update noar ti set v0='1GN9L6YQDOW5B2D7QNP2KWHJZAN7UM5X' where id=1; -update noar tt set b2='MCBWMPAKB0LF58N70EG2X7C8JE76W4DY' where id=1; -update noar ti set b2='MCBWMPAKB0LF58N70EG2X7C8JE76W4DY' where id=1; -update noar tt set v0='HSFTWCOI3WKZPYIW1ZAEZT2EXG6KQ6UM' where id=2; -update noar ti set v0='HSFTWCOI3WKZPYIW1ZAEZT2EXG6KQ6UM' where id=2; -update noar tt set b0='36PUJW3R3SRCZANOLG42OKQG0WW' where id=2; -update noar ti set b0='36PUJW3R3SRCZANOLG42OKQG0WW' where id=2; -update noar tt set v0='EHT6WQDXJ0KCVWENEJD4I9EEKREG' where id=2; -update noar ti set v0='EHT6WQDXJ0KCVWENEJD4I9EEKREG' where id=2; -update noar tt set b1='FI0P8USQIS1HAR' where id=2; -update noar ti set b1='FI0P8USQIS1HAR' where id=2; -update noar tt set v0='NABZ2R0EE4KRD4HB0KNQW' where id=2; -update noar ti set v0='NABZ2R0EE4KRD4HB0KNQW' where id=2; -update noar tt set b2='MHJO9XHLPB9P441LYDSSBXBS26O0' where id=2; -update noar ti set b2='MHJO9XHLPB9P441LYDSSBXBS26O0' where id=2; -update noar tt set v0='EYM93FJNGMY4GH71C6X4D7LG7O' where id=3; -update noar ti set v0='EYM93FJNGMY4GH71C6X4D7LG7O' where id=3; -update noar tt set b0='4WE5X4268' where id=3; -update noar ti set b0='4WE5X4268' where id=3; -update noar tt set v0='RZ8AQRCT57EFYIVQK3' where id=3; -update noar ti set v0='RZ8AQRCT57EFYIVQK3' where id=3; -update noar tt set b1='6Z3G17UE1T6DWAKCPOT' where id=3; -update noar ti set b1='6Z3G17UE1T6DWAKCPOT' where id=3; -update noar tt set v0='TNW6Z5BJMUULNM3E5HDZW98DYXXLAHE' where id=3; -update noar ti set v0='TNW6Z5BJMUULNM3E5HDZW98DYXXLAHE' where id=3; -update noar tt set b2='V736194IVASEFXV9QE71NTETX8HMPK' where id=3; -update noar ti set b2='V736194IVASEFXV9QE71NTETX8HMPK' where id=3; -update noar tt set v0='Q' where id=4; -update noar ti set v0='Q' where id=4; -update noar tt set b0='790AQ3FR1XAKQ7J96O' where id=4; -update noar ti set b0='790AQ3FR1XAKQ7J96O' where id=4; -update noar tt set v0='RNC0NJXG' where id=4; -update noar ti set v0='RNC0NJXG' where id=4; -update noar tt set b1='BS8MUZSWDI02YLPNBXKZ' where id=4; -update noar ti set b1='BS8MUZSWDI02YLPNBXKZ' where id=4; -update noar tt set v0='HLIM16A3WWMFST257RS7E1R8ZOAL' where id=4; -update noar ti set v0='HLIM16A3WWMFST257RS7E1R8ZOAL' where id=4; -update noar tt set b2='716E9B94DMOQRWBDXLLTE81' where id=4; -update noar ti set b2='716E9B94DMOQRWBDXLLTE81' where id=4; -update noar tt set v0='LTPTMWH7' where id=5; -update noar ti set v0='LTPTMWH7' where id=5; -update noar tt set b0='6DLTZPWJXHA57OL7O' where id=5; -update noar ti set b0='6DLTZPWJXHA57OL7O' where id=5; -update noar tt set v0='JC4HUNG4OL5XTXRKBKL59PBO' where id=5; -update noar ti set v0='JC4HUNG4OL5XTXRKBKL59PBO' where id=5; -update noar tt set b1='OWET5SAJY93XXWY6Q' where id=5; -update noar ti set b1='OWET5SAJY93XXWY6Q' where id=5; -update noar tt set v0='LUCQN1UX8AODTLE7X8HGPITBI12NQ' where id=5; -update noar ti set v0='LUCQN1UX8AODTLE7X8HGPITBI12NQ' where id=5; -update noar tt set b2='LIC9K2G7' where id=5; -update noar ti set b2='LIC9K2G7' where id=5; -update noar tt set v0='9X4I118ATM6XW2CP3' where id=6; -update noar ti set v0='9X4I118ATM6XW2CP3' where id=6; -update noar tt set b0='UWE8MRPUXVGIOLBYZPP2N9' where id=6; -update noar ti set b0='UWE8MRPUXVGIOLBYZPP2N9' where id=6; -update noar tt set v0='V' where id=6; -update noar ti set v0='V' where id=6; -update noar tt set b1='JKQE0YCBT0139G' where id=6; -update noar ti set b1='JKQE0YCBT0139G' where id=6; -update noar tt set v0='YK81UBKGIJ6LSIB7J4' where id=6; -update noar ti set v0='YK81UBKGIJ6LSIB7J4' where id=6; -update noar tt set b2='DRJONJWOM2EVZ90YO3C3CWPPK8ZZ' where id=6; -update noar ti set b2='DRJONJWOM2EVZ90YO3C3CWPPK8ZZ' where id=6; -update noar tt set v0='KGVBOBAQ74UFG26PG4F7CMYGIFQX6Z' where id=7; -update noar ti set v0='KGVBOBAQ74UFG26PG4F7CMYGIFQX6Z' where id=7; -update noar tt set b0='ROZ88VBKH1PQTULLA4TTH1FEXW' where id=7; -update noar ti set b0='ROZ88VBKH1PQTULLA4TTH1FEXW' where id=7; -update noar tt set v0='TMIBLKFKNNQ5ID7HYNK0KNZKQ8' where id=7; -update noar ti set v0='TMIBLKFKNNQ5ID7HYNK0KNZKQ8' where id=7; -update noar tt set b1='LU9GMFQ5XC026GHOMM40A4VS31N' where id=7; -update noar ti set b1='LU9GMFQ5XC026GHOMM40A4VS31N' where id=7; -update noar tt set v0='MJNSE4RU0' where id=7; -update noar ti set v0='MJNSE4RU0' where id=7; -update noar tt set b2='L7YVQU7FC099COPF2HVRH9' where id=7; -update noar ti set b2='L7YVQU7FC099COPF2HVRH9' where id=7; -update noar tt set v0='JNR0EEWR3VQ9LN7GJX9TJTQVN' where id=8; -update noar ti set v0='JNR0EEWR3VQ9LN7GJX9TJTQVN' where id=8; -update noar tt set b0='QK2HW51U16IAQXEMQDLEM' where id=8; -update noar ti set b0='QK2HW51U16IAQXEMQDLEM' where id=8; -update noar tt set v0='6YHWAIS3P7' where id=8; -update noar ti set v0='6YHWAIS3P7' where id=8; -update noar tt set b1='DVTRZJ41A6SL4CYI43J' where id=8; -update noar ti set b1='DVTRZJ41A6SL4CYI43J' where id=8; -update noar tt set v0='PYGO8HY' where id=8; -update noar ti set v0='PYGO8HY' where id=8; -update noar tt set b2='6' where id=8; -update noar ti set b2='6' where id=8; -update noar tt set v0='YVF7G0RPZK8GH0W4L5U' where id=9; -update noar ti set v0='YVF7G0RPZK8GH0W4L5U' where id=9; -update noar tt set b0='ZVW0D' where id=9; -update noar ti set b0='ZVW0D' where id=9; -update noar tt set v0='WRBRJR0PUWNQXLWK' where id=9; -update noar ti set v0='WRBRJR0PUWNQXLWK' where id=9; -update noar tt set b1='MF36U4O' where id=9; -update noar ti set b1='MF36U4O' where id=9; -update noar tt set v0='76LSI1ZY1YW3DGEU87GNOUZL' where id=9; -update noar ti set v0='76LSI1ZY1YW3DGEU87GNOUZL' where id=9; -update noar tt set b2='BKIWO5A0M1X96BQLKZS' where id=9; -update noar ti set b2='BKIWO5A0M1X96BQLKZS' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 blob null, -b1 mediumblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='MO3D30LM8B0Q8OBR' where id=1; -update noar ti set v0='MO3D30LM8B0Q8OBR' where id=1; -update noar tt set b0='37UJPMVM20AZA1MCKSN9A8N5OY' where id=1; -update noar ti set b0='37UJPMVM20AZA1MCKSN9A8N5OY' where id=1; -update noar tt set v0='DA85PD9SU6HV2R' where id=1; -update noar ti set v0='DA85PD9SU6HV2R' where id=1; -update noar tt set b1='4' where id=1; -update noar ti set b1='4' where id=1; -update noar tt set v0='U0XSXPLOVC0MIUTXDNR8B' where id=1; -update noar ti set v0='U0XSXPLOVC0MIUTXDNR8B' where id=1; -update noar tt set b2='9N5BJO7SU3JBSEHNM9DKWI8796Z' where id=1; -update noar ti set b2='9N5BJO7SU3JBSEHNM9DKWI8796Z' where id=1; -update noar tt set v0='2RVYVSG054HQH7DCBCGAV' where id=2; -update noar ti set v0='2RVYVSG054HQH7DCBCGAV' where id=2; -update noar tt set b0='Z' where id=2; -update noar ti set b0='Z' where id=2; -update noar tt set v0='0IV3OCI9CC059E68MGHJ' where id=2; -update noar ti set v0='0IV3OCI9CC059E68MGHJ' where id=2; -update noar tt set b1='BCNDHCCPJDXD27KA8L' where id=2; -update noar ti set b1='BCNDHCCPJDXD27KA8L' where id=2; -update noar tt set v0='XO' where id=2; -update noar ti set v0='XO' where id=2; -update noar tt set b2='MHQ43XP8IY2Q0TFZVUS' where id=2; -update noar ti set b2='MHQ43XP8IY2Q0TFZVUS' where id=2; -update noar tt set v0='O1RIQFCMTEDOERWIS8L5BV52RN7OF75' where id=3; -update noar ti set v0='O1RIQFCMTEDOERWIS8L5BV52RN7OF75' where id=3; -update noar tt set b0='6CXKYU6MGWCYNT' where id=3; -update noar ti set b0='6CXKYU6MGWCYNT' where id=3; -update noar tt set v0='OPRAL68V3W3F' where id=3; -update noar ti set v0='OPRAL68V3W3F' where id=3; -update noar tt set b1='6CR23K' where id=3; -update noar ti set b1='6CR23K' where id=3; -update noar tt set v0='PEU' where id=3; -update noar ti set v0='PEU' where id=3; -update noar tt set b2='O6Y0GD' where id=3; -update noar ti set b2='O6Y0GD' where id=3; -update noar tt set v0='NBCJ4ENSSJVK7284DDBH' where id=4; -update noar ti set v0='NBCJ4ENSSJVK7284DDBH' where id=4; -update noar tt set b0='MNXVJ8G8A040JG4' where id=4; -update noar ti set b0='MNXVJ8G8A040JG4' where id=4; -update noar tt set v0='HWUP083X6QYO78Z85BEU0AJI3I2SS5QG' where id=4; -update noar ti set v0='HWUP083X6QYO78Z85BEU0AJI3I2SS5QG' where id=4; -update noar tt set b1='F18NE22E2NWXRCSC' where id=4; -update noar ti set b1='F18NE22E2NWXRCSC' where id=4; -update noar tt set v0='XMMFLCB38E' where id=4; -update noar ti set v0='XMMFLCB38E' where id=4; -update noar tt set b2='4S6L18AMFFHZVQXN' where id=4; -update noar ti set b2='4S6L18AMFFHZVQXN' where id=4; -update noar tt set v0='1HT699BJXLWF7PHV81P' where id=5; -update noar ti set v0='1HT699BJXLWF7PHV81P' where id=5; -update noar tt set b0='C7' where id=5; -update noar ti set b0='C7' where id=5; -update noar tt set v0='LKT0J02L5' where id=5; -update noar ti set v0='LKT0J02L5' where id=5; -update noar tt set b1='SSXRD4QSOL1MBF7RMZB6POOCJHR1B' where id=5; -update noar ti set b1='SSXRD4QSOL1MBF7RMZB6POOCJHR1B' where id=5; -update noar tt set v0='P0YFEV2JSP94FQULY2NNVGR7E1AT8PM' where id=5; -update noar ti set v0='P0YFEV2JSP94FQULY2NNVGR7E1AT8PM' where id=5; -update noar tt set b2='3S4GS23F93JGACHMR8QZKC1P5' where id=5; -update noar ti set b2='3S4GS23F93JGACHMR8QZKC1P5' where id=5; -update noar tt set v0='G3B9IOQ7I6HI3K' where id=6; -update noar ti set v0='G3B9IOQ7I6HI3K' where id=6; -update noar tt set b0='F734M595W6TN6VZ559JMJF7T' where id=6; -update noar ti set b0='F734M595W6TN6VZ559JMJF7T' where id=6; -update noar tt set v0='T2GNQ' where id=6; -update noar ti set v0='T2GNQ' where id=6; -update noar tt set b1='2PY84OQAHQ0BUQYELHO66XS8IZ4' where id=6; -update noar ti set b1='2PY84OQAHQ0BUQYELHO66XS8IZ4' where id=6; -update noar tt set v0='BQB7OXKA1INZPV323KLTVGZKU5D' where id=6; -update noar ti set v0='BQB7OXKA1INZPV323KLTVGZKU5D' where id=6; -update noar tt set b2='CZ' where id=6; -update noar ti set b2='CZ' where id=6; -update noar tt set v0='5BR2' where id=7; -update noar ti set v0='5BR2' where id=7; -update noar tt set b0='MRDP8' where id=7; -update noar ti set b0='MRDP8' where id=7; -update noar tt set v0='E2CMAUAAJKWJ87MFQYJRG' where id=7; -update noar ti set v0='E2CMAUAAJKWJ87MFQYJRG' where id=7; -update noar tt set b1='K93B0836WE1ONXPH1XJH3ZB9BN0VC' where id=7; -update noar ti set b1='K93B0836WE1ONXPH1XJH3ZB9BN0VC' where id=7; -update noar tt set v0='0KDY' where id=7; -update noar ti set v0='0KDY' where id=7; -update noar tt set b2='40UTQWSB9S3Y93Q' where id=7; -update noar ti set b2='40UTQWSB9S3Y93Q' where id=7; -update noar tt set v0='YJMBZ4WFEX' where id=8; -update noar ti set v0='YJMBZ4WFEX' where id=8; -update noar tt set b0='JAVOYR63YPS9Z765PEAW54TIKXOD8WGU' where id=8; -update noar ti set b0='JAVOYR63YPS9Z765PEAW54TIKXOD8WGU' where id=8; -update noar tt set v0='D78D' where id=8; -update noar ti set v0='D78D' where id=8; -update noar tt set b1='KG5' where id=8; -update noar ti set b1='KG5' where id=8; -update noar tt set v0='N7SSPSGX3UMDUC5IASOARJTJV0GUGQ' where id=8; -update noar ti set v0='N7SSPSGX3UMDUC5IASOARJTJV0GUGQ' where id=8; -update noar tt set b2='94W3RGPR9J7UC4' where id=8; -update noar ti set b2='94W3RGPR9J7UC4' where id=8; -update noar tt set v0='ZSAQ9T6KNRSVK9V2I3M9PWH9Z' where id=9; -update noar ti set v0='ZSAQ9T6KNRSVK9V2I3M9PWH9Z' where id=9; -update noar tt set b0='93M7' where id=9; -update noar ti set b0='93M7' where id=9; -update noar tt set v0='M5JERVPVEPT6PBJ86YW5NZTP' where id=9; -update noar ti set v0='M5JERVPVEPT6PBJ86YW5NZTP' where id=9; -update noar tt set b1='BTH8H9PTV2REDR2H' where id=9; -update noar ti set b1='BTH8H9PTV2REDR2H' where id=9; -update noar tt set v0='0C2Q7HB4C5E5' where id=9; -update noar ti set v0='0C2Q7HB4C5E5' where id=9; -update noar tt set b2='ZGFQQZ98M623FHPTBEYPTJZHW' where id=9; -update noar ti set b2='ZGFQQZ98M623FHPTBEYPTJZHW' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 blob not null, -b1 mediumblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='ITD57JUS8PZW804021UG414R' where id=1; -update noar ti set v0='ITD57JUS8PZW804021UG414R' where id=1; -update noar tt set b0='WUY2LGBUTQP7251GT' where id=1; -update noar ti set b0='WUY2LGBUTQP7251GT' where id=1; -update noar tt set v0='QMPF8MITENB3ZDK' where id=1; -update noar ti set v0='QMPF8MITENB3ZDK' where id=1; -update noar tt set b1='CZ2V4' where id=1; -update noar ti set b1='CZ2V4' where id=1; -update noar tt set v0='PJVFPR6P2' where id=1; -update noar ti set v0='PJVFPR6P2' where id=1; -update noar tt set b2='CKV1XVN7LQQM5' where id=1; -update noar ti set b2='CKV1XVN7LQQM5' where id=1; -update noar tt set v0='2' where id=2; -update noar ti set v0='2' where id=2; -update noar tt set b0='U4X6YP4MVATBDL5VUNYH4PR8Q8OZNM' where id=2; -update noar ti set b0='U4X6YP4MVATBDL5VUNYH4PR8Q8OZNM' where id=2; -update noar tt set v0='YY7B4R8P9PH5ZE0OK6BUN3ZHZQ2XL' where id=2; -update noar ti set v0='YY7B4R8P9PH5ZE0OK6BUN3ZHZQ2XL' where id=2; -update noar tt set b1='4QXSFZ15ED1G2J63UAGHD29X61R' where id=2; -update noar ti set b1='4QXSFZ15ED1G2J63UAGHD29X61R' where id=2; -update noar tt set v0='5ZYFDLUVUV13' where id=2; -update noar ti set v0='5ZYFDLUVUV13' where id=2; -update noar tt set b2='WAJ30H8WVKORHVFK3' where id=2; -update noar ti set b2='WAJ30H8WVKORHVFK3' where id=2; -update noar tt set v0='O' where id=3; -update noar ti set v0='O' where id=3; -update noar tt set b0='Q2SI' where id=3; -update noar ti set b0='Q2SI' where id=3; -update noar tt set v0='V5GVSEJACVA0YDUL3UH4YU5IER1AUH' where id=3; -update noar ti set v0='V5GVSEJACVA0YDUL3UH4YU5IER1AUH' where id=3; -update noar tt set b1='HLKB8RCE5X9QT7E57I5' where id=3; -update noar ti set b1='HLKB8RCE5X9QT7E57I5' where id=3; -update noar tt set v0='4T89MBSQX4Y1XAXIR5K' where id=3; -update noar ti set v0='4T89MBSQX4Y1XAXIR5K' where id=3; -update noar tt set b2='G0UODU6X2' where id=3; -update noar ti set b2='G0UODU6X2' where id=3; -update noar tt set v0='V1E892GQM7C' where id=4; -update noar ti set v0='V1E892GQM7C' where id=4; -update noar tt set b0='9JXWQ23T12LV19QR4FSR05NJUG7Z1' where id=4; -update noar ti set b0='9JXWQ23T12LV19QR4FSR05NJUG7Z1' where id=4; -update noar tt set v0='ON20R8CQRHNQZ77FB8EFU7' where id=4; -update noar ti set v0='ON20R8CQRHNQZ77FB8EFU7' where id=4; -update noar tt set b1='WKCILNMWE' where id=4; -update noar ti set b1='WKCILNMWE' where id=4; -update noar tt set v0='CAG79E0VZSTYT8FV4L57QBZW254VQC' where id=4; -update noar ti set v0='CAG79E0VZSTYT8FV4L57QBZW254VQC' where id=4; -update noar tt set b2='ZZES' where id=4; -update noar ti set b2='ZZES' where id=4; -update noar tt set v0='5177KRLJE8A88Y' where id=5; -update noar ti set v0='5177KRLJE8A88Y' where id=5; -update noar tt set b0='IBQOC6IEUZOG9XSE0O' where id=5; -update noar ti set b0='IBQOC6IEUZOG9XSE0O' where id=5; -update noar tt set v0='HSQFU67S8' where id=5; -update noar ti set v0='HSQFU67S8' where id=5; -update noar tt set b1='I2A1Q407V035WOO5QMROCG4WX36' where id=5; -update noar ti set b1='I2A1Q407V035WOO5QMROCG4WX36' where id=5; -update noar tt set v0='Z6NG1V' where id=5; -update noar ti set v0='Z6NG1V' where id=5; -update noar tt set b2='IY' where id=5; -update noar ti set b2='IY' where id=5; -update noar tt set v0='PLBB4761ZE7LKWWB9OJB0PE8LL2' where id=6; -update noar ti set v0='PLBB4761ZE7LKWWB9OJB0PE8LL2' where id=6; -update noar tt set b0='U5SF53IXVDSGP8DHZEQJS3TXDK6P6WT' where id=6; -update noar ti set b0='U5SF53IXVDSGP8DHZEQJS3TXDK6P6WT' where id=6; -update noar tt set v0='NW0S3C80CMUUZM' where id=6; -update noar ti set v0='NW0S3C80CMUUZM' where id=6; -update noar tt set b1='DLUV6C4WIM975V0MLRPO48AS823' where id=6; -update noar ti set b1='DLUV6C4WIM975V0MLRPO48AS823' where id=6; -update noar tt set v0='1QBC8O' where id=6; -update noar ti set v0='1QBC8O' where id=6; -update noar tt set b2='0FZ' where id=6; -update noar ti set b2='0FZ' where id=6; -update noar tt set v0='9LE15NXZI10678H8L6THV7KNR7D8' where id=7; -update noar ti set v0='9LE15NXZI10678H8L6THV7KNR7D8' where id=7; -update noar tt set b0='O85BM8AS9SCT30PN692IKLM5TXWC5' where id=7; -update noar ti set b0='O85BM8AS9SCT30PN692IKLM5TXWC5' where id=7; -update noar tt set v0='PJCU1IE1TVVOUUT6EGK915ESWBZ8T72C' where id=7; -update noar ti set v0='PJCU1IE1TVVOUUT6EGK915ESWBZ8T72C' where id=7; -update noar tt set b1='WDYAF2QLMI8N4PRE2Y9Z5ID' where id=7; -update noar ti set b1='WDYAF2QLMI8N4PRE2Y9Z5ID' where id=7; -update noar tt set v0='EQOHMW92S' where id=7; -update noar ti set v0='EQOHMW92S' where id=7; -update noar tt set b2='9' where id=7; -update noar ti set b2='9' where id=7; -update noar tt set v0='62OH6UO4VUEW' where id=8; -update noar ti set v0='62OH6UO4VUEW' where id=8; -update noar tt set b0='L35XMXLPG7ZHIJYHT' where id=8; -update noar ti set b0='L35XMXLPG7ZHIJYHT' where id=8; -update noar tt set v0='TYIUK6QWJDUGL2Z8SPV9' where id=8; -update noar ti set v0='TYIUK6QWJDUGL2Z8SPV9' where id=8; -update noar tt set b1='LTA3GALWTJY' where id=8; -update noar ti set b1='LTA3GALWTJY' where id=8; -update noar tt set v0='9X1U8QM2IBGPXWDZT8' where id=8; -update noar ti set v0='9X1U8QM2IBGPXWDZT8' where id=8; -update noar tt set b2='93JXB6XEK28V84C6AYG' where id=8; -update noar ti set b2='93JXB6XEK28V84C6AYG' where id=8; -update noar tt set v0='PL4OJKK0LRZB6T' where id=9; -update noar ti set v0='PL4OJKK0LRZB6T' where id=9; -update noar tt set b0='T3' where id=9; -update noar ti set b0='T3' where id=9; -update noar tt set v0='SLAD3CQNTN' where id=9; -update noar ti set v0='SLAD3CQNTN' where id=9; -update noar tt set b1='U1A6UKP2DBFBEJ' where id=9; -update noar ti set b1='U1A6UKP2DBFBEJ' where id=9; -update noar tt set v0='M' where id=9; -update noar ti set v0='M' where id=9; -update noar tt set b2='VMPGNADCAKOAFDZV0JG3' where id=9; -update noar ti set b2='VMPGNADCAKOAFDZV0JG3' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 blob not null, -b1 mediumblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='D4STS4Y22S6OSYQC41785C2QVEKPYZ1' where id=1; -update noar ti set v0='D4STS4Y22S6OSYQC41785C2QVEKPYZ1' where id=1; -update noar tt set b0='4SY57CZZ919S8' where id=1; -update noar ti set b0='4SY57CZZ919S8' where id=1; -update noar tt set v0='FYGV7TTNG89MA3' where id=1; -update noar ti set v0='FYGV7TTNG89MA3' where id=1; -update noar tt set b1='99Q6LWKXGAUEIVKIQD' where id=1; -update noar ti set b1='99Q6LWKXGAUEIVKIQD' where id=1; -update noar tt set v0='GFQBZVQAA8' where id=1; -update noar ti set v0='GFQBZVQAA8' where id=1; -update noar tt set b2='71MKMYGPUXXVRQ5EBSZAK9UW74N11S' where id=1; -update noar ti set b2='71MKMYGPUXXVRQ5EBSZAK9UW74N11S' where id=1; -update noar tt set v0='EN3M9MLFKSB4GBD73CFODHSWTF0389V' where id=2; -update noar ti set v0='EN3M9MLFKSB4GBD73CFODHSWTF0389V' where id=2; -update noar tt set b0='L8BLUP7QNSHKQI1453VA7LFC' where id=2; -update noar ti set b0='L8BLUP7QNSHKQI1453VA7LFC' where id=2; -update noar tt set v0='1R588Z32TGHHVCAP5FS7' where id=2; -update noar ti set v0='1R588Z32TGHHVCAP5FS7' where id=2; -update noar tt set b1='SYOP93XOTWW78135' where id=2; -update noar ti set b1='SYOP93XOTWW78135' where id=2; -update noar tt set v0='O3UVEPGTAD904ZO9B1ZWMSU7TMS' where id=2; -update noar ti set v0='O3UVEPGTAD904ZO9B1ZWMSU7TMS' where id=2; -update noar tt set b2='R8ER' where id=2; -update noar ti set b2='R8ER' where id=2; -update noar tt set v0='N7SWDTOCBSEE37ZMC4AZJUXIY46J' where id=3; -update noar ti set v0='N7SWDTOCBSEE37ZMC4AZJUXIY46J' where id=3; -update noar tt set b0='XAPAUQN26W4FPKARN4GGI8' where id=3; -update noar ti set b0='XAPAUQN26W4FPKARN4GGI8' where id=3; -update noar tt set v0='1DHU0TR' where id=3; -update noar ti set v0='1DHU0TR' where id=3; -update noar tt set b1='Y4K' where id=3; -update noar ti set b1='Y4K' where id=3; -update noar tt set v0='5GU5RMJ96AL9CE8C4P4RQGFJ6SW5D' where id=3; -update noar ti set v0='5GU5RMJ96AL9CE8C4P4RQGFJ6SW5D' where id=3; -update noar tt set b2='QMLMDLLRLH03PLA2OS5ESUJ' where id=3; -update noar ti set b2='QMLMDLLRLH03PLA2OS5ESUJ' where id=3; -update noar tt set v0='W590ZYAPRPVYBMM2LW' where id=4; -update noar ti set v0='W590ZYAPRPVYBMM2LW' where id=4; -update noar tt set b0='R54VXUSTNPYPE2HZRR3HDMF' where id=4; -update noar ti set b0='R54VXUSTNPYPE2HZRR3HDMF' where id=4; -update noar tt set v0='0W4D' where id=4; -update noar ti set v0='0W4D' where id=4; -update noar tt set b1='DAAVXWG4NNKB7NTJCQUR79U8' where id=4; -update noar ti set b1='DAAVXWG4NNKB7NTJCQUR79U8' where id=4; -update noar tt set v0='4RG1K3RZ8RFEXD4DLVPH5T' where id=4; -update noar ti set v0='4RG1K3RZ8RFEXD4DLVPH5T' where id=4; -update noar tt set b2='6' where id=4; -update noar ti set b2='6' where id=4; -update noar tt set v0='40X12J923KO56NXU0T0' where id=5; -update noar ti set v0='40X12J923KO56NXU0T0' where id=5; -update noar tt set b0='DCODQP23MTI8YXLHBAI2T9RHM0Q' where id=5; -update noar ti set b0='DCODQP23MTI8YXLHBAI2T9RHM0Q' where id=5; -update noar tt set v0='FPE7A' where id=5; -update noar ti set v0='FPE7A' where id=5; -update noar tt set b1='XBE4X' where id=5; -update noar ti set b1='XBE4X' where id=5; -update noar tt set v0='KY65MW6D5XG53FSSUP' where id=5; -update noar ti set v0='KY65MW6D5XG53FSSUP' where id=5; -update noar tt set b2='MXESE8WMUTTJFL' where id=5; -update noar ti set b2='MXESE8WMUTTJFL' where id=5; -update noar tt set v0='S0VDZKMDF8N9FY5W978PB1UE170KQ7' where id=6; -update noar ti set v0='S0VDZKMDF8N9FY5W978PB1UE170KQ7' where id=6; -update noar tt set b0='7ORGOKVV2NT04TEZOGK0' where id=6; -update noar ti set b0='7ORGOKVV2NT04TEZOGK0' where id=6; -update noar tt set v0='5AKK7SVKK3L0KEX2DIUB86DRVZZ' where id=6; -update noar ti set v0='5AKK7SVKK3L0KEX2DIUB86DRVZZ' where id=6; -update noar tt set b1='5HC5QBGE904QY3BBAQ7VPSJ6IJ02' where id=6; -update noar ti set b1='5HC5QBGE904QY3BBAQ7VPSJ6IJ02' where id=6; -update noar tt set v0='R' where id=6; -update noar ti set v0='R' where id=6; -update noar tt set b2='YS6VKGTB7' where id=6; -update noar ti set b2='YS6VKGTB7' where id=6; -update noar tt set v0='T70NA4UCDVU4DDSRO4HQHYHF25D7V7T' where id=7; -update noar ti set v0='T70NA4UCDVU4DDSRO4HQHYHF25D7V7T' where id=7; -update noar tt set b0='1UDPXO93HC9' where id=7; -update noar ti set b0='1UDPXO93HC9' where id=7; -update noar tt set v0='JYTX1E7V7LYKT19FGSAM9GJ002D0U6R' where id=7; -update noar ti set v0='JYTX1E7V7LYKT19FGSAM9GJ002D0U6R' where id=7; -update noar tt set b1='G1RM1UN07Z0N1PQHSZAJX' where id=7; -update noar ti set b1='G1RM1UN07Z0N1PQHSZAJX' where id=7; -update noar tt set v0='7QWYFDXB021BDE8BSLNE' where id=7; -update noar ti set v0='7QWYFDXB021BDE8BSLNE' where id=7; -update noar tt set b2='KU3T9K2I2YZ58' where id=7; -update noar ti set b2='KU3T9K2I2YZ58' where id=7; -update noar tt set v0='VG62AB9BGU50JRB6A5R3C464' where id=8; -update noar ti set v0='VG62AB9BGU50JRB6A5R3C464' where id=8; -update noar tt set b0='RCO0EA59FPU30VC2' where id=8; -update noar ti set b0='RCO0EA59FPU30VC2' where id=8; -update noar tt set v0='X8SUP8E2WZJO3' where id=8; -update noar ti set v0='X8SUP8E2WZJO3' where id=8; -update noar tt set b1='P1W2OJAT662F5255HI7UAZVMWUNQ' where id=8; -update noar ti set b1='P1W2OJAT662F5255HI7UAZVMWUNQ' where id=8; -update noar tt set v0='KCSS48BU9' where id=8; -update noar ti set v0='KCSS48BU9' where id=8; -update noar tt set b2='ZT' where id=8; -update noar ti set b2='ZT' where id=8; -update noar tt set v0='TCPKI958Q6QI6U6' where id=9; -update noar ti set v0='TCPKI958Q6QI6U6' where id=9; -update noar tt set b0='IZZQZTSHCYDH9Y5ESAG' where id=9; -update noar ti set b0='IZZQZTSHCYDH9Y5ESAG' where id=9; -update noar tt set v0='OF51YVXAL11ZZ9SEZKQ' where id=9; -update noar ti set v0='OF51YVXAL11ZZ9SEZKQ' where id=9; -update noar tt set b1='O0YBO6NQA6VJTYK3X0BJY' where id=9; -update noar ti set b1='O0YBO6NQA6VJTYK3X0BJY' where id=9; -update noar tt set v0='G9M5NYCUZVL7S1KPGTO9J' where id=9; -update noar ti set v0='G9M5NYCUZVL7S1KPGTO9J' where id=9; -update noar tt set b2='YOI0MS8I0XG8XXPSL' where id=9; -update noar ti set b2='YOI0MS8I0XG8XXPSL' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 blob null, -b1 longblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='W3D1' where id=1; -update noar ti set v0='W3D1' where id=1; -update noar tt set b0='NW4UR2' where id=1; -update noar ti set b0='NW4UR2' where id=1; -update noar tt set v0='7BDA9R8SXP9EVSY3I3HUQUCSYH0W9J2' where id=1; -update noar ti set v0='7BDA9R8SXP9EVSY3I3HUQUCSYH0W9J2' where id=1; -update noar tt set b1='P80BRBLSVBXL8ZS1O' where id=1; -update noar ti set b1='P80BRBLSVBXL8ZS1O' where id=1; -update noar tt set v0='WB6GQSIN0E6IBPKM9JXO38' where id=1; -update noar ti set v0='WB6GQSIN0E6IBPKM9JXO38' where id=1; -update noar tt set b2='N18KZ895FSVRKJGVRNGOL5' where id=1; -update noar ti set b2='N18KZ895FSVRKJGVRNGOL5' where id=1; -update noar tt set v0='Y1APWUU4HMWTRJYZ5HE2Q6' where id=2; -update noar ti set v0='Y1APWUU4HMWTRJYZ5HE2Q6' where id=2; -update noar tt set b0='V' where id=2; -update noar ti set b0='V' where id=2; -update noar tt set v0='5UJRNA7DFS' where id=2; -update noar ti set v0='5UJRNA7DFS' where id=2; -update noar tt set b1='EM27SOMM28VMLWYU' where id=2; -update noar ti set b1='EM27SOMM28VMLWYU' where id=2; -update noar tt set v0='7KSN1PHCSD' where id=2; -update noar ti set v0='7KSN1PHCSD' where id=2; -update noar tt set b2='4TN6UMXDT1QX2' where id=2; -update noar ti set b2='4TN6UMXDT1QX2' where id=2; -update noar tt set v0='097X4G7M6RVHVMYW4K45YTYIVY' where id=3; -update noar ti set v0='097X4G7M6RVHVMYW4K45YTYIVY' where id=3; -update noar tt set b0='0KUFS61FOX3XMDQX649S2' where id=3; -update noar ti set b0='0KUFS61FOX3XMDQX649S2' where id=3; -update noar tt set v0='JMKIKZCCVS5' where id=3; -update noar ti set v0='JMKIKZCCVS5' where id=3; -update noar tt set b1='6EZS0XBVBQN16C6C0PVUC6D' where id=3; -update noar ti set b1='6EZS0XBVBQN16C6C0PVUC6D' where id=3; -update noar tt set v0='1VYA7XMQDAUEUBD5D1ECNWD' where id=3; -update noar ti set v0='1VYA7XMQDAUEUBD5D1ECNWD' where id=3; -update noar tt set b2='LI0AA6RKLGC8OBBPDLI8QQ99Q0M' where id=3; -update noar ti set b2='LI0AA6RKLGC8OBBPDLI8QQ99Q0M' where id=3; -update noar tt set v0='IA6Q3N9CINOCAVEF2YFH33EFQGN' where id=4; -update noar ti set v0='IA6Q3N9CINOCAVEF2YFH33EFQGN' where id=4; -update noar tt set b0='SJ503SX5X1JQ0L' where id=4; -update noar ti set b0='SJ503SX5X1JQ0L' where id=4; -update noar tt set v0='1JOWFC8D0JO534XYOW1I1UL' where id=4; -update noar ti set v0='1JOWFC8D0JO534XYOW1I1UL' where id=4; -update noar tt set b1='5L40LVPW1KB313G8PJLR' where id=4; -update noar ti set b1='5L40LVPW1KB313G8PJLR' where id=4; -update noar tt set v0='GEJ1' where id=4; -update noar ti set v0='GEJ1' where id=4; -update noar tt set b2='IBNNZ62T3RF' where id=4; -update noar ti set b2='IBNNZ62T3RF' where id=4; -update noar tt set v0='SSRSP14L4MNKCGNIKKPCVH' where id=5; -update noar ti set v0='SSRSP14L4MNKCGNIKKPCVH' where id=5; -update noar tt set b0='0W699XI0368CDW5NCRIR' where id=5; -update noar ti set b0='0W699XI0368CDW5NCRIR' where id=5; -update noar tt set v0='DX9QNU3B5CLFX' where id=5; -update noar ti set v0='DX9QNU3B5CLFX' where id=5; -update noar tt set b1='CLS6I' where id=5; -update noar ti set b1='CLS6I' where id=5; -update noar tt set v0='Z6YAS7L0RCB2' where id=5; -update noar ti set v0='Z6YAS7L0RCB2' where id=5; -update noar tt set b2='9IL' where id=5; -update noar ti set b2='9IL' where id=5; -update noar tt set v0='LLOY0XHJFYB35' where id=6; -update noar ti set v0='LLOY0XHJFYB35' where id=6; -update noar tt set b0='6FUHFYTH8ZG8UIBP5L' where id=6; -update noar ti set b0='6FUHFYTH8ZG8UIBP5L' where id=6; -update noar tt set v0='EY9VVC7KVAW' where id=6; -update noar ti set v0='EY9VVC7KVAW' where id=6; -update noar tt set b1='7YWRQ0CFYB' where id=6; -update noar ti set b1='7YWRQ0CFYB' where id=6; -update noar tt set v0='XG4FGAX6HCLSS87YSKIW' where id=6; -update noar ti set v0='XG4FGAX6HCLSS87YSKIW' where id=6; -update noar tt set b2='N5VRJHXH37Q6E941O8CNTA' where id=6; -update noar ti set b2='N5VRJHXH37Q6E941O8CNTA' where id=6; -update noar tt set v0='M0RXIQ4FRB' where id=7; -update noar ti set v0='M0RXIQ4FRB' where id=7; -update noar tt set b0='MOYBU9678MWW8MXKIAVSM27' where id=7; -update noar ti set b0='MOYBU9678MWW8MXKIAVSM27' where id=7; -update noar tt set v0='R1MCR' where id=7; -update noar ti set v0='R1MCR' where id=7; -update noar tt set b1='JERUHLL069YF1RDPYZ91K0' where id=7; -update noar ti set b1='JERUHLL069YF1RDPYZ91K0' where id=7; -update noar tt set v0='6MAG1KCJ9B2UCBDJWHDGSVQK9X' where id=7; -update noar ti set v0='6MAG1KCJ9B2UCBDJWHDGSVQK9X' where id=7; -update noar tt set b2='B1QH7OVT76QXWLYKP34LHA2TZ84Q5' where id=7; -update noar ti set b2='B1QH7OVT76QXWLYKP34LHA2TZ84Q5' where id=7; -update noar tt set v0='SMELCFPT2798867DMXG' where id=8; -update noar ti set v0='SMELCFPT2798867DMXG' where id=8; -update noar tt set b0='E43X8I2HALLCB7BYPZXE08K1XJA' where id=8; -update noar ti set b0='E43X8I2HALLCB7BYPZXE08K1XJA' where id=8; -update noar tt set v0='3AN4R4IV3NQ8NWD7RS3KD5GDLRZQ72V' where id=8; -update noar ti set v0='3AN4R4IV3NQ8NWD7RS3KD5GDLRZQ72V' where id=8; -update noar tt set b1='ROWAUYQHDW8T6XJQ3' where id=8; -update noar ti set b1='ROWAUYQHDW8T6XJQ3' where id=8; -update noar tt set v0='WIRKB86IJC8' where id=8; -update noar ti set v0='WIRKB86IJC8' where id=8; -update noar tt set b2='Z35FP' where id=8; -update noar ti set b2='Z35FP' where id=8; -update noar tt set v0='D15WVM2' where id=9; -update noar ti set v0='D15WVM2' where id=9; -update noar tt set b0='ECZ3DIL1J8T65A3JW78T5TTC9VQY2R' where id=9; -update noar ti set b0='ECZ3DIL1J8T65A3JW78T5TTC9VQY2R' where id=9; -update noar tt set v0='189ZNQIKHXX6BALO6' where id=9; -update noar ti set v0='189ZNQIKHXX6BALO6' where id=9; -update noar tt set b1='WCHR8091EGNW8BTBD3NK0V' where id=9; -update noar ti set b1='WCHR8091EGNW8BTBD3NK0V' where id=9; -update noar tt set v0='W' where id=9; -update noar ti set v0='W' where id=9; -update noar tt set b2='VAZ5YWRGXYHEFPUU0' where id=9; -update noar ti set b2='VAZ5YWRGXYHEFPUU0' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 blob null, -b1 longblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='YH64NY9U' where id=1; -update noar ti set v0='YH64NY9U' where id=1; -update noar tt set b0='RR38BT' where id=1; -update noar ti set b0='RR38BT' where id=1; -update noar tt set v0='NKX6CPE163GGGVJRJSEDHS4YM0258' where id=1; -update noar ti set v0='NKX6CPE163GGGVJRJSEDHS4YM0258' where id=1; -update noar tt set b1='EU' where id=1; -update noar ti set b1='EU' where id=1; -update noar tt set v0='HLC3HNO2IKJ1UV8W' where id=1; -update noar ti set v0='HLC3HNO2IKJ1UV8W' where id=1; -update noar tt set b2='0HM1VTUJ12P4J4CTNKA6SY2' where id=1; -update noar ti set b2='0HM1VTUJ12P4J4CTNKA6SY2' where id=1; -update noar tt set v0='18ETIZ3E6F93FU84W51VHGYM6NS' where id=2; -update noar ti set v0='18ETIZ3E6F93FU84W51VHGYM6NS' where id=2; -update noar tt set b0='BILQMTVKEQ9CRPKHWMGMUEWVGLQ' where id=2; -update noar ti set b0='BILQMTVKEQ9CRPKHWMGMUEWVGLQ' where id=2; -update noar tt set v0='88A4ODH' where id=2; -update noar ti set v0='88A4ODH' where id=2; -update noar tt set b1='94MTRTJJVTC' where id=2; -update noar ti set b1='94MTRTJJVTC' where id=2; -update noar tt set v0='JFDTQMBHNLEJ42ZOGGPZ5R3HRGK3Y' where id=2; -update noar ti set v0='JFDTQMBHNLEJ42ZOGGPZ5R3HRGK3Y' where id=2; -update noar tt set b2='DURD5KT0W8H5M49VWDF2UCHZVX33LOQD' where id=2; -update noar ti set b2='DURD5KT0W8H5M49VWDF2UCHZVX33LOQD' where id=2; -update noar tt set v0='9' where id=3; -update noar ti set v0='9' where id=3; -update noar tt set b0='KBLNGYHVHAU2YLFQAN980Y' where id=3; -update noar ti set b0='KBLNGYHVHAU2YLFQAN980Y' where id=3; -update noar tt set v0='W7W6LJPCCB' where id=3; -update noar ti set v0='W7W6LJPCCB' where id=3; -update noar tt set b1='K45M1DUF0JY5R6OD' where id=3; -update noar ti set b1='K45M1DUF0JY5R6OD' where id=3; -update noar tt set v0='R5O9TPZFVTSE0YCRLG3ZND' where id=3; -update noar ti set v0='R5O9TPZFVTSE0YCRLG3ZND' where id=3; -update noar tt set b2='C' where id=3; -update noar ti set b2='C' where id=3; -update noar tt set v0='SNON9BJKO0FVNWZPL48T' where id=4; -update noar ti set v0='SNON9BJKO0FVNWZPL48T' where id=4; -update noar tt set b0='XCVG7WYCBJONSOWW4XUNFTYUW50VFBZ' where id=4; -update noar ti set b0='XCVG7WYCBJONSOWW4XUNFTYUW50VFBZ' where id=4; -update noar tt set v0='HBBQW53XQ1RR' where id=4; -update noar ti set v0='HBBQW53XQ1RR' where id=4; -update noar tt set b1='DQB8E49P1W6H9QIK' where id=4; -update noar ti set b1='DQB8E49P1W6H9QIK' where id=4; -update noar tt set v0='9Y6H2HO7YYT5QF2X8F5WR04BBSD01E' where id=4; -update noar ti set v0='9Y6H2HO7YYT5QF2X8F5WR04BBSD01E' where id=4; -update noar tt set b2='7KY5FMYCP15NQUQBP0XIOCU6SV7HK7' where id=4; -update noar ti set b2='7KY5FMYCP15NQUQBP0XIOCU6SV7HK7' where id=4; -update noar tt set v0='BBTODGJ' where id=5; -update noar ti set v0='BBTODGJ' where id=5; -update noar tt set b0='VMDK086MGTLYAOMCE' where id=5; -update noar ti set b0='VMDK086MGTLYAOMCE' where id=5; -update noar tt set v0='L7GYHHMF4R9FZ9KFIRIDZM' where id=5; -update noar ti set v0='L7GYHHMF4R9FZ9KFIRIDZM' where id=5; -update noar tt set b1='2P88KOIGR7MY' where id=5; -update noar ti set b1='2P88KOIGR7MY' where id=5; -update noar tt set v0='5O20RQK1PINZB6J' where id=5; -update noar ti set v0='5O20RQK1PINZB6J' where id=5; -update noar tt set b2='U2R9M0LSUE7DNB5MC75CS1JUJLLHAW' where id=5; -update noar ti set b2='U2R9M0LSUE7DNB5MC75CS1JUJLLHAW' where id=5; -update noar tt set v0='L58AJTUVD60C96X' where id=6; -update noar ti set v0='L58AJTUVD60C96X' where id=6; -update noar tt set b0='H10Q841WMLAFAKZ4SGETZWS131PNR' where id=6; -update noar ti set b0='H10Q841WMLAFAKZ4SGETZWS131PNR' where id=6; -update noar tt set v0='AZ5M' where id=6; -update noar ti set v0='AZ5M' where id=6; -update noar tt set b1='ENY89A15IMOFBYYSJ' where id=6; -update noar ti set b1='ENY89A15IMOFBYYSJ' where id=6; -update noar tt set v0='Z06N0WPDNNVOPI4UFOAD5D46C1TZFEJ0' where id=6; -update noar ti set v0='Z06N0WPDNNVOPI4UFOAD5D46C1TZFEJ0' where id=6; -update noar tt set b2='GT1JSITR' where id=6; -update noar ti set b2='GT1JSITR' where id=6; -update noar tt set v0='U2YUCZLNDR2YAMZSNNMUINV6S' where id=7; -update noar ti set v0='U2YUCZLNDR2YAMZSNNMUINV6S' where id=7; -update noar tt set b0='U06GT692Z346ACL' where id=7; -update noar ti set b0='U06GT692Z346ACL' where id=7; -update noar tt set v0='P42SNGTI79NF2XS2VJ196RW' where id=7; -update noar ti set v0='P42SNGTI79NF2XS2VJ196RW' where id=7; -update noar tt set b1='2K80FM' where id=7; -update noar ti set b1='2K80FM' where id=7; -update noar tt set v0='QH2JLVUJMZ6J4CTRE3SLZ2FFXZS9' where id=7; -update noar ti set v0='QH2JLVUJMZ6J4CTRE3SLZ2FFXZS9' where id=7; -update noar tt set b2='C1NSCK7HGCFX24JEXYY415ALP2IY614' where id=7; -update noar ti set b2='C1NSCK7HGCFX24JEXYY415ALP2IY614' where id=7; -update noar tt set v0='ZPV5U0HHTWT7CZJ2I92MJW6WMW35NOD' where id=8; -update noar ti set v0='ZPV5U0HHTWT7CZJ2I92MJW6WMW35NOD' where id=8; -update noar tt set b0='QWCJ' where id=8; -update noar ti set b0='QWCJ' where id=8; -update noar tt set v0='LNP5V07PTG7VIB2HOW' where id=8; -update noar ti set v0='LNP5V07PTG7VIB2HOW' where id=8; -update noar tt set b1='ZRBVWSI60R' where id=8; -update noar ti set b1='ZRBVWSI60R' where id=8; -update noar tt set v0='QMX2A4KSPQI7' where id=8; -update noar ti set v0='QMX2A4KSPQI7' where id=8; -update noar tt set b2='TQU36XQQUZHUG4JCIN9URC5KHMTQFBU' where id=8; -update noar ti set b2='TQU36XQQUZHUG4JCIN9URC5KHMTQFBU' where id=8; -update noar tt set v0='F6UHBY' where id=9; -update noar ti set v0='F6UHBY' where id=9; -update noar tt set b0='SB7' where id=9; -update noar ti set b0='SB7' where id=9; -update noar tt set v0='9' where id=9; -update noar ti set v0='9' where id=9; -update noar tt set b1='UD6QKFLGWZNM' where id=9; -update noar ti set b1='UD6QKFLGWZNM' where id=9; -update noar tt set v0='8FUULV1WBLAHJLMEXQXX3EO1L' where id=9; -update noar ti set v0='8FUULV1WBLAHJLMEXQXX3EO1L' where id=9; -update noar tt set b2='1THJ07X0RGYY6AUA2OG' where id=9; -update noar ti set b2='1THJ07X0RGYY6AUA2OG' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 blob not null, -b1 longblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='986XRLWGCM1D1BL5ARMAH610IJYX' where id=1; -update noar ti set v0='986XRLWGCM1D1BL5ARMAH610IJYX' where id=1; -update noar tt set b0='94YFTUE5N2' where id=1; -update noar ti set b0='94YFTUE5N2' where id=1; -update noar tt set v0='EY0W1H85X8ATC5GCXT' where id=1; -update noar ti set v0='EY0W1H85X8ATC5GCXT' where id=1; -update noar tt set b1='581CZZJVJ8FWX0K9KP4UHRUU' where id=1; -update noar ti set b1='581CZZJVJ8FWX0K9KP4UHRUU' where id=1; -update noar tt set v0='V69X0H76WYYW7J66AZSRJ5H4AJSDP' where id=1; -update noar ti set v0='V69X0H76WYYW7J66AZSRJ5H4AJSDP' where id=1; -update noar tt set b2='Z2F0L81QOCQWX3VXQEYQ7P97OBXCKUYN' where id=1; -update noar ti set b2='Z2F0L81QOCQWX3VXQEYQ7P97OBXCKUYN' where id=1; -update noar tt set v0='7FKHVA' where id=2; -update noar ti set v0='7FKHVA' where id=2; -update noar tt set b0='5GLF78' where id=2; -update noar ti set b0='5GLF78' where id=2; -update noar tt set v0='9TC676IJKGLAT' where id=2; -update noar ti set v0='9TC676IJKGLAT' where id=2; -update noar tt set b1='R1RZVZ8TFI0I83ELZ' where id=2; -update noar ti set b1='R1RZVZ8TFI0I83ELZ' where id=2; -update noar tt set v0='F88OJO4O4ZBWB4KD0L58ERS' where id=2; -update noar ti set v0='F88OJO4O4ZBWB4KD0L58ERS' where id=2; -update noar tt set b2='E41IAT6E6LF4' where id=2; -update noar ti set b2='E41IAT6E6LF4' where id=2; -update noar tt set v0='OPNXA' where id=3; -update noar ti set v0='OPNXA' where id=3; -update noar tt set b0='Z3SY941D3RL50F4U1S0PF8A6O7DZM' where id=3; -update noar ti set b0='Z3SY941D3RL50F4U1S0PF8A6O7DZM' where id=3; -update noar tt set v0='CJB9UP7T5GGN8' where id=3; -update noar ti set v0='CJB9UP7T5GGN8' where id=3; -update noar tt set b1='NM65Q5B' where id=3; -update noar ti set b1='NM65Q5B' where id=3; -update noar tt set v0='KCZJIBBRCB4PH67N6YOEBHQCK6Z045' where id=3; -update noar ti set v0='KCZJIBBRCB4PH67N6YOEBHQCK6Z045' where id=3; -update noar tt set b2='5KN7AH7L5V8UXMXNWPI5ML842E23E6N' where id=3; -update noar ti set b2='5KN7AH7L5V8UXMXNWPI5ML842E23E6N' where id=3; -update noar tt set v0='N7IO' where id=4; -update noar ti set v0='N7IO' where id=4; -update noar tt set b0='48VSL095DE50O9D17C9SZ' where id=4; -update noar ti set b0='48VSL095DE50O9D17C9SZ' where id=4; -update noar tt set v0='5IQZ11C15I5CNSU3R4TJ4V0N' where id=4; -update noar ti set v0='5IQZ11C15I5CNSU3R4TJ4V0N' where id=4; -update noar tt set b1='18V7R4BW21EQYS32A' where id=4; -update noar ti set b1='18V7R4BW21EQYS32A' where id=4; -update noar tt set v0='UZAT3GVSL39' where id=4; -update noar ti set v0='UZAT3GVSL39' where id=4; -update noar tt set b2='6L' where id=4; -update noar ti set b2='6L' where id=4; -update noar tt set v0='LLNGSB0QYM93HY4AT8UVLM1MWRNQGQZI' where id=5; -update noar ti set v0='LLNGSB0QYM93HY4AT8UVLM1MWRNQGQZI' where id=5; -update noar tt set b0='GLSNRVFRSRQXYVLKE1T8' where id=5; -update noar ti set b0='GLSNRVFRSRQXYVLKE1T8' where id=5; -update noar tt set v0='GRJNION06' where id=5; -update noar ti set v0='GRJNION06' where id=5; -update noar tt set b1='KE5ALKTNQ9A0CXGSLEYU81FHZ3JOPW' where id=5; -update noar ti set b1='KE5ALKTNQ9A0CXGSLEYU81FHZ3JOPW' where id=5; -update noar tt set v0='Q01OTS0PVFH9HIHQSJZQZ8' where id=5; -update noar ti set v0='Q01OTS0PVFH9HIHQSJZQZ8' where id=5; -update noar tt set b2='F26QVU1341F48MK9LYKLBFG8PSJLI' where id=5; -update noar ti set b2='F26QVU1341F48MK9LYKLBFG8PSJLI' where id=5; -update noar tt set v0='Y06YWYB3CXL' where id=6; -update noar ti set v0='Y06YWYB3CXL' where id=6; -update noar tt set b0='FSECC0IH4D29CR2TOOTPAA0AZ' where id=6; -update noar ti set b0='FSECC0IH4D29CR2TOOTPAA0AZ' where id=6; -update noar tt set v0='HTFHH265A1Q8T2XNQIVOCG9EWR' where id=6; -update noar ti set v0='HTFHH265A1Q8T2XNQIVOCG9EWR' where id=6; -update noar tt set b1='KPBI0Z' where id=6; -update noar ti set b1='KPBI0Z' where id=6; -update noar tt set v0='ST3' where id=6; -update noar ti set v0='ST3' where id=6; -update noar tt set b2='A43CB6HD82ECZFGW2BTY' where id=6; -update noar ti set b2='A43CB6HD82ECZFGW2BTY' where id=6; -update noar tt set v0='U747P33BX7' where id=7; -update noar ti set v0='U747P33BX7' where id=7; -update noar tt set b0='0DCO0MD03LPHGEZC' where id=7; -update noar ti set b0='0DCO0MD03LPHGEZC' where id=7; -update noar tt set v0='80IP1S6N5Q' where id=7; -update noar ti set v0='80IP1S6N5Q' where id=7; -update noar tt set b1='AASZOHBMBV3AV7QDC91CNR6JA6MAM' where id=7; -update noar ti set b1='AASZOHBMBV3AV7QDC91CNR6JA6MAM' where id=7; -update noar tt set v0='A2Q9E84ZH8TJPI9Y8RXD' where id=7; -update noar ti set v0='A2Q9E84ZH8TJPI9Y8RXD' where id=7; -update noar tt set b2='7W' where id=7; -update noar ti set b2='7W' where id=7; -update noar tt set v0='JW70XNS3WACV1DEN1YV' where id=8; -update noar ti set v0='JW70XNS3WACV1DEN1YV' where id=8; -update noar tt set b0='HRQU5OFHAR3DBTUF8P7X93QIPXCJ' where id=8; -update noar ti set b0='HRQU5OFHAR3DBTUF8P7X93QIPXCJ' where id=8; -update noar tt set v0='GOYJO1A2NUHTNS4MBK5FYNR' where id=8; -update noar ti set v0='GOYJO1A2NUHTNS4MBK5FYNR' where id=8; -update noar tt set b1='SJPT61WVH' where id=8; -update noar ti set b1='SJPT61WVH' where id=8; -update noar tt set v0='A6V8' where id=8; -update noar ti set v0='A6V8' where id=8; -update noar tt set b2='DM' where id=8; -update noar ti set b2='DM' where id=8; -update noar tt set v0='LLWPL' where id=9; -update noar ti set v0='LLWPL' where id=9; -update noar tt set b0='V' where id=9; -update noar ti set b0='V' where id=9; -update noar tt set v0='BRBICN7ST9C9UW3' where id=9; -update noar ti set v0='BRBICN7ST9C9UW3' where id=9; -update noar tt set b1='8XB198WG6THPO9' where id=9; -update noar ti set b1='8XB198WG6THPO9' where id=9; -update noar tt set v0='TV5FLWI261SAN9D4TBMFPQX' where id=9; -update noar ti set v0='TV5FLWI261SAN9D4TBMFPQX' where id=9; -update noar tt set b2='CIXKO76YX68RI2SZ73RF33' where id=9; -update noar ti set b2='CIXKO76YX68RI2SZ73RF33' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 blob not null, -b1 longblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='NF14KYZASFOQDEPBI3GP' where id=1; -update noar ti set v0='NF14KYZASFOQDEPBI3GP' where id=1; -update noar tt set b0='PMRRK6N3SOOJ9CJ9HDXJ5H1LDTLKJ0' where id=1; -update noar ti set b0='PMRRK6N3SOOJ9CJ9HDXJ5H1LDTLKJ0' where id=1; -update noar tt set v0='MPZIB5XF7RSN' where id=1; -update noar ti set v0='MPZIB5XF7RSN' where id=1; -update noar tt set b1='ORX2M3L1' where id=1; -update noar ti set b1='ORX2M3L1' where id=1; -update noar tt set v0='MLYP43DDF2SFHAWUC7XF73ZNVHWFDV' where id=1; -update noar ti set v0='MLYP43DDF2SFHAWUC7XF73ZNVHWFDV' where id=1; -update noar tt set b2='1SQOK28T7K4ALP440E8' where id=1; -update noar ti set b2='1SQOK28T7K4ALP440E8' where id=1; -update noar tt set v0='5E6WJRQT070BJ' where id=2; -update noar ti set v0='5E6WJRQT070BJ' where id=2; -update noar tt set b0='UMT6119EMTCMJ543017BNUC' where id=2; -update noar ti set b0='UMT6119EMTCMJ543017BNUC' where id=2; -update noar tt set v0='VSR1' where id=2; -update noar ti set v0='VSR1' where id=2; -update noar tt set b1='EWCBRHITKUFVAFYY1XQBF7PL50' where id=2; -update noar ti set b1='EWCBRHITKUFVAFYY1XQBF7PL50' where id=2; -update noar tt set v0='KWZC7B0V54ZG8LMZ7CG3WRMKKI6HLIY' where id=2; -update noar ti set v0='KWZC7B0V54ZG8LMZ7CG3WRMKKI6HLIY' where id=2; -update noar tt set b2='H6TM4KZ7KC2JF7ZRII66' where id=2; -update noar ti set b2='H6TM4KZ7KC2JF7ZRII66' where id=2; -update noar tt set v0='RGFKPI867BCFYV7GBXMULV60' where id=3; -update noar ti set v0='RGFKPI867BCFYV7GBXMULV60' where id=3; -update noar tt set b0='OZLV4KMXVIAVIRFK1AEM6' where id=3; -update noar ti set b0='OZLV4KMXVIAVIRFK1AEM6' where id=3; -update noar tt set v0='Q5' where id=3; -update noar ti set v0='Q5' where id=3; -update noar tt set b1='2KQR' where id=3; -update noar ti set b1='2KQR' where id=3; -update noar tt set v0='FB' where id=3; -update noar ti set v0='FB' where id=3; -update noar tt set b2='LEJ1Q9D8GBNJQCP3KZJMEELON9' where id=3; -update noar ti set b2='LEJ1Q9D8GBNJQCP3KZJMEELON9' where id=3; -update noar tt set v0='40' where id=4; -update noar ti set v0='40' where id=4; -update noar tt set b0='OTE' where id=4; -update noar ti set b0='OTE' where id=4; -update noar tt set v0='W6168IS' where id=4; -update noar ti set v0='W6168IS' where id=4; -update noar tt set b1='SRNZQ6' where id=4; -update noar ti set b1='SRNZQ6' where id=4; -update noar tt set v0='U29DYKN3G3ORH117R' where id=4; -update noar ti set v0='U29DYKN3G3ORH117R' where id=4; -update noar tt set b2='68AO3EQUGKQNI5NZF' where id=4; -update noar ti set b2='68AO3EQUGKQNI5NZF' where id=4; -update noar tt set v0='PAY2M9QY779U8PJ77VUBR6L4ZDX' where id=5; -update noar ti set v0='PAY2M9QY779U8PJ77VUBR6L4ZDX' where id=5; -update noar tt set b0='4MXBY5PMSU27EVP3AYAU5C' where id=5; -update noar ti set b0='4MXBY5PMSU27EVP3AYAU5C' where id=5; -update noar tt set v0='2B3F569G60IPIGZZ' where id=5; -update noar ti set v0='2B3F569G60IPIGZZ' where id=5; -update noar tt set b1='R808AHMGY278OQT87DTV97U3PNR' where id=5; -update noar ti set b1='R808AHMGY278OQT87DTV97U3PNR' where id=5; -update noar tt set v0='NXX19CEDDR5NWD6P2YN1H6G' where id=5; -update noar ti set v0='NXX19CEDDR5NWD6P2YN1H6G' where id=5; -update noar tt set b2='FISCIQ4V1TTHQ9V' where id=5; -update noar ti set b2='FISCIQ4V1TTHQ9V' where id=5; -update noar tt set v0='77U0QMWNPVQRNMKO954D' where id=6; -update noar ti set v0='77U0QMWNPVQRNMKO954D' where id=6; -update noar tt set b0='QVGAE64L' where id=6; -update noar ti set b0='QVGAE64L' where id=6; -update noar tt set v0='RORCU7BQMYBXPKFRFAF4SD0AIYQ2A9' where id=6; -update noar ti set v0='RORCU7BQMYBXPKFRFAF4SD0AIYQ2A9' where id=6; -update noar tt set b1='5DUZ2KLQ4G0D9AXJ226' where id=6; -update noar ti set b1='5DUZ2KLQ4G0D9AXJ226' where id=6; -update noar tt set v0='N5A' where id=6; -update noar ti set v0='N5A' where id=6; -update noar tt set b2='1CQ' where id=6; -update noar ti set b2='1CQ' where id=6; -update noar tt set v0='TG0YYIIUKEE1JF' where id=7; -update noar ti set v0='TG0YYIIUKEE1JF' where id=7; -update noar tt set b0='I7HZ3ITRFK6QBREAJQEAE4URCUH6' where id=7; -update noar ti set b0='I7HZ3ITRFK6QBREAJQEAE4URCUH6' where id=7; -update noar tt set v0='OS8' where id=7; -update noar ti set v0='OS8' where id=7; -update noar tt set b1='BQHYVB9PMVKKTQK0EHPVZ8A9B6P1' where id=7; -update noar ti set b1='BQHYVB9PMVKKTQK0EHPVZ8A9B6P1' where id=7; -update noar tt set v0='2QG46UC03CEZM26ONK' where id=7; -update noar ti set v0='2QG46UC03CEZM26ONK' where id=7; -update noar tt set b2='VH2NE0IC' where id=7; -update noar ti set b2='VH2NE0IC' where id=7; -update noar tt set v0='MRK95MXZRLGE9' where id=8; -update noar ti set v0='MRK95MXZRLGE9' where id=8; -update noar tt set b0='DDAP8765B9K' where id=8; -update noar ti set b0='DDAP8765B9K' where id=8; -update noar tt set v0='UORH' where id=8; -update noar ti set v0='UORH' where id=8; -update noar tt set b1='TZJZE' where id=8; -update noar ti set b1='TZJZE' where id=8; -update noar tt set v0='TM9BOE12FKT1HUVW1WCANYC6R' where id=8; -update noar ti set v0='TM9BOE12FKT1HUVW1WCANYC6R' where id=8; -update noar tt set b2='LOCVON4BRFRYHBZSGRQMVYK' where id=8; -update noar ti set b2='LOCVON4BRFRYHBZSGRQMVYK' where id=8; -update noar tt set v0='IS52FC2R8A5SRF9P3MCAP9ZZ4R15KZ6' where id=9; -update noar ti set v0='IS52FC2R8A5SRF9P3MCAP9ZZ4R15KZ6' where id=9; -update noar tt set b0='C49RXQZNGV41K1P8' where id=9; -update noar ti set b0='C49RXQZNGV41K1P8' where id=9; -update noar tt set v0='H9M83V1' where id=9; -update noar ti set v0='H9M83V1' where id=9; -update noar tt set b1='F8VYBZBZOYVRJDOV6' where id=9; -update noar ti set b1='F8VYBZBZOYVRJDOV6' where id=9; -update noar tt set v0='MNHP' where id=9; -update noar ti set v0='MNHP' where id=9; -update noar tt set b2='FZ950SFLY7LPVIF' where id=9; -update noar ti set b2='FZ950SFLY7LPVIF' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 blob null, -b1 longblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='UZ1CVBHQCR0DQ2CBR3Y3CL2RK95' where id=1; -update noar ti set v0='UZ1CVBHQCR0DQ2CBR3Y3CL2RK95' where id=1; -update noar tt set b0='UDWGQTED08Y9A7KDY3HIC' where id=1; -update noar ti set b0='UDWGQTED08Y9A7KDY3HIC' where id=1; -update noar tt set v0='DZR' where id=1; -update noar ti set v0='DZR' where id=1; -update noar tt set b1='80V3D' where id=1; -update noar ti set b1='80V3D' where id=1; -update noar tt set v0='YHZMGFJDP5Y2HJFKEMF3UARQVO2U' where id=1; -update noar ti set v0='YHZMGFJDP5Y2HJFKEMF3UARQVO2U' where id=1; -update noar tt set b2='4MXTW6U' where id=1; -update noar ti set b2='4MXTW6U' where id=1; -update noar tt set v0='C87DYG6XW3VF2GJJPEII8K1GH9IDMWW' where id=2; -update noar ti set v0='C87DYG6XW3VF2GJJPEII8K1GH9IDMWW' where id=2; -update noar tt set b0='HUIX9W8X75FOFTZ8W' where id=2; -update noar ti set b0='HUIX9W8X75FOFTZ8W' where id=2; -update noar tt set v0='VPRKVU4ME26BLRNHDYAVFKBUGXRTEH' where id=2; -update noar ti set v0='VPRKVU4ME26BLRNHDYAVFKBUGXRTEH' where id=2; -update noar tt set b1='OP0GPDHVEM3PIKBLG' where id=2; -update noar ti set b1='OP0GPDHVEM3PIKBLG' where id=2; -update noar tt set v0='ON' where id=2; -update noar ti set v0='ON' where id=2; -update noar tt set b2='FO4YRBQ4F9ZLT' where id=2; -update noar ti set b2='FO4YRBQ4F9ZLT' where id=2; -update noar tt set v0='88PC1PAAN40Z3500OEKYV' where id=3; -update noar ti set v0='88PC1PAAN40Z3500OEKYV' where id=3; -update noar tt set b0='RA50' where id=3; -update noar ti set b0='RA50' where id=3; -update noar tt set v0='FJ' where id=3; -update noar ti set v0='FJ' where id=3; -update noar tt set b1='XV2FU8MVWX1V427CB2C1PIA5NXJKLU5' where id=3; -update noar ti set b1='XV2FU8MVWX1V427CB2C1PIA5NXJKLU5' where id=3; -update noar tt set v0='TG' where id=3; -update noar ti set v0='TG' where id=3; -update noar tt set b2='3ID2846HXPE2PFYCGOY' where id=3; -update noar ti set b2='3ID2846HXPE2PFYCGOY' where id=3; -update noar tt set v0='QDJ2BB8PB4SAGJW4ZIXSIN1XNI3F6H' where id=4; -update noar ti set v0='QDJ2BB8PB4SAGJW4ZIXSIN1XNI3F6H' where id=4; -update noar tt set b0='H3JD5OH2NLRIJR' where id=4; -update noar ti set b0='H3JD5OH2NLRIJR' where id=4; -update noar tt set v0='CMO93ZLCMJOGMJWSHWO4E6IBXRQYHS' where id=4; -update noar ti set v0='CMO93ZLCMJOGMJWSHWO4E6IBXRQYHS' where id=4; -update noar tt set b1='FXSU3K6UJDGS' where id=4; -update noar ti set b1='FXSU3K6UJDGS' where id=4; -update noar tt set v0='P20IVA4UJIVUO3A2VEV963L1O' where id=4; -update noar ti set v0='P20IVA4UJIVUO3A2VEV963L1O' where id=4; -update noar tt set b2='1AEP2D7TTQ8IM0HNEI7CJ5X' where id=4; -update noar ti set b2='1AEP2D7TTQ8IM0HNEI7CJ5X' where id=4; -update noar tt set v0='OODOYH1J6JJJ' where id=5; -update noar ti set v0='OODOYH1J6JJJ' where id=5; -update noar tt set b0='34ECPVJHSZ1' where id=5; -update noar ti set b0='34ECPVJHSZ1' where id=5; -update noar tt set v0='PFPETC7II' where id=5; -update noar ti set v0='PFPETC7II' where id=5; -update noar tt set b1='A' where id=5; -update noar ti set b1='A' where id=5; -update noar tt set v0='IF9' where id=5; -update noar ti set v0='IF9' where id=5; -update noar tt set b2='W17NGDA8U54OW67WMQ7' where id=5; -update noar ti set b2='W17NGDA8U54OW67WMQ7' where id=5; -update noar tt set v0='VXMMNZ18K8AVPZUJJS2R9' where id=6; -update noar ti set v0='VXMMNZ18K8AVPZUJJS2R9' where id=6; -update noar tt set b0='3VRLHATW4C7YKWX' where id=6; -update noar ti set b0='3VRLHATW4C7YKWX' where id=6; -update noar tt set v0='00ZED43JYABT7TQ9KHJ2OQ9H46' where id=6; -update noar ti set v0='00ZED43JYABT7TQ9KHJ2OQ9H46' where id=6; -update noar tt set b1='PWZK77CBRLQ' where id=6; -update noar ti set b1='PWZK77CBRLQ' where id=6; -update noar tt set v0='NI2BLSHKSL88CMHTVZ7Y0V7QU0FCLO' where id=6; -update noar ti set v0='NI2BLSHKSL88CMHTVZ7Y0V7QU0FCLO' where id=6; -update noar tt set b2='7TKILZ03PXUFGBL22V7XV4UVSECK' where id=6; -update noar ti set b2='7TKILZ03PXUFGBL22V7XV4UVSECK' where id=6; -update noar tt set v0='EC8BXXSPAE4FVMFP6FMZL5EQ693' where id=7; -update noar ti set v0='EC8BXXSPAE4FVMFP6FMZL5EQ693' where id=7; -update noar tt set b0='NUD22EOW7' where id=7; -update noar ti set b0='NUD22EOW7' where id=7; -update noar tt set v0='NR8V4ZWO8UGWM9BP2C6NP4BW85HT06' where id=7; -update noar ti set v0='NR8V4ZWO8UGWM9BP2C6NP4BW85HT06' where id=7; -update noar tt set b1='YJW7Z28E1UM56D1E4J16GOI89' where id=7; -update noar ti set b1='YJW7Z28E1UM56D1E4J16GOI89' where id=7; -update noar tt set v0='4IYVS2QFA63ORI7EOJRA8JKZ' where id=7; -update noar ti set v0='4IYVS2QFA63ORI7EOJRA8JKZ' where id=7; -update noar tt set b2='4VJO' where id=7; -update noar ti set b2='4VJO' where id=7; -update noar tt set v0='B9ISV' where id=8; -update noar ti set v0='B9ISV' where id=8; -update noar tt set b0='WUP152F0E8SVXPNZVXALJ1GG6L' where id=8; -update noar ti set b0='WUP152F0E8SVXPNZVXALJ1GG6L' where id=8; -update noar tt set v0='4YO2AP' where id=8; -update noar ti set v0='4YO2AP' where id=8; -update noar tt set b1='9CHK2M1KX7ZITS' where id=8; -update noar ti set b1='9CHK2M1KX7ZITS' where id=8; -update noar tt set v0='QXTPBHB5VRO7IPNSI3R6QZZPV' where id=8; -update noar ti set v0='QXTPBHB5VRO7IPNSI3R6QZZPV' where id=8; -update noar tt set b2='PR0B7VTPNTFD' where id=8; -update noar ti set b2='PR0B7VTPNTFD' where id=8; -update noar tt set v0='16QSW0UOQX5FOOEW93ACEK' where id=9; -update noar ti set v0='16QSW0UOQX5FOOEW93ACEK' where id=9; -update noar tt set b0='Q26VLWZF5I8GFKK1X7Q7JOF0CX' where id=9; -update noar ti set b0='Q26VLWZF5I8GFKK1X7Q7JOF0CX' where id=9; -update noar tt set v0='QV15ZUHFXN' where id=9; -update noar ti set v0='QV15ZUHFXN' where id=9; -update noar tt set b1='9F0RKNDWAWM2USCYDBSX6R7S0E2GYE' where id=9; -update noar ti set b1='9F0RKNDWAWM2USCYDBSX6R7S0E2GYE' where id=9; -update noar tt set v0='T7IDSPSL4V6B3GP95KTV' where id=9; -update noar ti set v0='T7IDSPSL4V6B3GP95KTV' where id=9; -update noar tt set b2='73XOD2SOBDKRO' where id=9; -update noar ti set b2='73XOD2SOBDKRO' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 blob null, -b1 longblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='7B5M' where id=1; -update noar ti set v0='7B5M' where id=1; -update noar tt set b0='O3VMLM1IOLKRXHB6YR' where id=1; -update noar ti set b0='O3VMLM1IOLKRXHB6YR' where id=1; -update noar tt set v0='7' where id=1; -update noar ti set v0='7' where id=1; -update noar tt set b1='H5YOI42039L' where id=1; -update noar ti set b1='H5YOI42039L' where id=1; -update noar tt set v0='Q0KCY3V5PZKXLE3ABP2XYGBMB3G2' where id=1; -update noar ti set v0='Q0KCY3V5PZKXLE3ABP2XYGBMB3G2' where id=1; -update noar tt set b2='LII19QR4QVIXCRM6Y68QNW' where id=1; -update noar ti set b2='LII19QR4QVIXCRM6Y68QNW' where id=1; -update noar tt set v0='IB4VQQ5IHZ1PZG0TF5' where id=2; -update noar ti set v0='IB4VQQ5IHZ1PZG0TF5' where id=2; -update noar tt set b0='T48X5PGD66V9FFYFND40' where id=2; -update noar ti set b0='T48X5PGD66V9FFYFND40' where id=2; -update noar tt set v0='LY5JEFNJ' where id=2; -update noar ti set v0='LY5JEFNJ' where id=2; -update noar tt set b1='WRH7HD4W' where id=2; -update noar ti set b1='WRH7HD4W' where id=2; -update noar tt set v0='9E5DFALSVPOLCX0TFP0NNP4H1D' where id=2; -update noar ti set v0='9E5DFALSVPOLCX0TFP0NNP4H1D' where id=2; -update noar tt set b2='EPC1R3NW84GHX' where id=2; -update noar ti set b2='EPC1R3NW84GHX' where id=2; -update noar tt set v0='K6F' where id=3; -update noar ti set v0='K6F' where id=3; -update noar tt set b0='2RF1AIYPTHYOF' where id=3; -update noar ti set b0='2RF1AIYPTHYOF' where id=3; -update noar tt set v0='Q9XBSFD4V6UUB0SXYOT6UD92BV55SAT' where id=3; -update noar ti set v0='Q9XBSFD4V6UUB0SXYOT6UD92BV55SAT' where id=3; -update noar tt set b1='SLQGDAOHNBAU1ZBBO1V6B3OS5' where id=3; -update noar ti set b1='SLQGDAOHNBAU1ZBBO1V6B3OS5' where id=3; -update noar tt set v0='8UKOKCAOY14S3G' where id=3; -update noar ti set v0='8UKOKCAOY14S3G' where id=3; -update noar tt set b2='1T' where id=3; -update noar ti set b2='1T' where id=3; -update noar tt set v0='M4HZBQBYVJO4C50LOL589FQHDQC8' where id=4; -update noar ti set v0='M4HZBQBYVJO4C50LOL589FQHDQC8' where id=4; -update noar tt set b0='VRVK48N0ANA7UFKT3HCII' where id=4; -update noar ti set b0='VRVK48N0ANA7UFKT3HCII' where id=4; -update noar tt set v0='95M1KDITRLP7A' where id=4; -update noar ti set v0='95M1KDITRLP7A' where id=4; -update noar tt set b1='G48AFM62I1' where id=4; -update noar ti set b1='G48AFM62I1' where id=4; -update noar tt set v0='U6HX9XAIMD' where id=4; -update noar ti set v0='U6HX9XAIMD' where id=4; -update noar tt set b2='O7PIPJG8XDTO3YVE4EPCAX6W' where id=4; -update noar ti set b2='O7PIPJG8XDTO3YVE4EPCAX6W' where id=4; -update noar tt set v0='48ID6' where id=5; -update noar ti set v0='48ID6' where id=5; -update noar tt set b0='COR' where id=5; -update noar ti set b0='COR' where id=5; -update noar tt set v0='8HU6F72OMO05' where id=5; -update noar ti set v0='8HU6F72OMO05' where id=5; -update noar tt set b1='FLGUJQK9ASFC' where id=5; -update noar ti set b1='FLGUJQK9ASFC' where id=5; -update noar tt set v0='40P86CUT189CP7TE' where id=5; -update noar ti set v0='40P86CUT189CP7TE' where id=5; -update noar tt set b2='LGFNZAIR8LJIS7LC37DMIHKZ80' where id=5; -update noar ti set b2='LGFNZAIR8LJIS7LC37DMIHKZ80' where id=5; -update noar tt set v0='V7C7NTC4W0BC' where id=6; -update noar ti set v0='V7C7NTC4W0BC' where id=6; -update noar tt set b0='OYKSVO9NEWFJ26W8U8QLFX5C46372' where id=6; -update noar ti set b0='OYKSVO9NEWFJ26W8U8QLFX5C46372' where id=6; -update noar tt set v0='COPWZREUYZQ' where id=6; -update noar ti set v0='COPWZREUYZQ' where id=6; -update noar tt set b1='1HW44' where id=6; -update noar ti set b1='1HW44' where id=6; -update noar tt set v0='ZFC' where id=6; -update noar ti set v0='ZFC' where id=6; -update noar tt set b2='W4FM32AKO5TCZNCZF9AUIEK0K2GR93Z6' where id=6; -update noar ti set b2='W4FM32AKO5TCZNCZF9AUIEK0K2GR93Z6' where id=6; -update noar tt set v0='O6P' where id=7; -update noar ti set v0='O6P' where id=7; -update noar tt set b0='2P87YJFWGBFNO' where id=7; -update noar ti set b0='2P87YJFWGBFNO' where id=7; -update noar tt set v0='5TCOQ6' where id=7; -update noar ti set v0='5TCOQ6' where id=7; -update noar tt set b1='EQGN6KQ7LB32244S9IRH2B' where id=7; -update noar ti set b1='EQGN6KQ7LB32244S9IRH2B' where id=7; -update noar tt set v0='8F9D3HNKKNTF1A01KLF' where id=7; -update noar ti set v0='8F9D3HNKKNTF1A01KLF' where id=7; -update noar tt set b2='H2UVXZG2BIDUCO0SPR2GC3X02F' where id=7; -update noar ti set b2='H2UVXZG2BIDUCO0SPR2GC3X02F' where id=7; -update noar tt set v0='B9MGWQ07VMW' where id=8; -update noar ti set v0='B9MGWQ07VMW' where id=8; -update noar tt set b0='GTAW7WT4MUB3X2GM88P1ONXK' where id=8; -update noar ti set b0='GTAW7WT4MUB3X2GM88P1ONXK' where id=8; -update noar tt set v0='GSZM' where id=8; -update noar ti set v0='GSZM' where id=8; -update noar tt set b1='5AMUAGW913HUXKV' where id=8; -update noar ti set b1='5AMUAGW913HUXKV' where id=8; -update noar tt set v0='GDNWZHPWE1QAK' where id=8; -update noar ti set v0='GDNWZHPWE1QAK' where id=8; -update noar tt set b2='R494CL4' where id=8; -update noar ti set b2='R494CL4' where id=8; -update noar tt set v0='A6CELHPA' where id=9; -update noar ti set v0='A6CELHPA' where id=9; -update noar tt set b0='55Y2X' where id=9; -update noar ti set b0='55Y2X' where id=9; -update noar tt set v0='NMJCIE8BLY0FPQPZ' where id=9; -update noar ti set v0='NMJCIE8BLY0FPQPZ' where id=9; -update noar tt set b1='9SVDGNAE' where id=9; -update noar ti set b1='9SVDGNAE' where id=9; -update noar tt set v0='K0F7PCPNNEP1J52TM7Z9DG55VIWU' where id=9; -update noar ti set v0='K0F7PCPNNEP1J52TM7Z9DG55VIWU' where id=9; -update noar tt set b2='85Y' where id=9; -update noar ti set b2='85Y' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 blob not null, -b1 longblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='86YH72RKNJYSA6ML9YGT5Q0U06O' where id=1; -update noar ti set v0='86YH72RKNJYSA6ML9YGT5Q0U06O' where id=1; -update noar tt set b0='AH91L768A5KKMNMJ4CK67DWN' where id=1; -update noar ti set b0='AH91L768A5KKMNMJ4CK67DWN' where id=1; -update noar tt set v0='D66UE788RIII2W0542AI1UY48IR94P' where id=1; -update noar ti set v0='D66UE788RIII2W0542AI1UY48IR94P' where id=1; -update noar tt set b1='XQGICMLKNHPQ' where id=1; -update noar ti set b1='XQGICMLKNHPQ' where id=1; -update noar tt set v0='LXUWX3KBD5CDR64WJ6TDYUVFZ4CY7D15' where id=1; -update noar ti set v0='LXUWX3KBD5CDR64WJ6TDYUVFZ4CY7D15' where id=1; -update noar tt set b2='WCYRC0XPTXEM3FEASSD7BHM7L' where id=1; -update noar ti set b2='WCYRC0XPTXEM3FEASSD7BHM7L' where id=1; -update noar tt set v0='270E7AP7YX9W1SH6C8V60WS2Q1' where id=2; -update noar ti set v0='270E7AP7YX9W1SH6C8V60WS2Q1' where id=2; -update noar tt set b0='WM11FNV6OTLZVGCHO5R0D9L' where id=2; -update noar ti set b0='WM11FNV6OTLZVGCHO5R0D9L' where id=2; -update noar tt set v0='C21MCP7ARXRTLA8S' where id=2; -update noar ti set v0='C21MCP7ARXRTLA8S' where id=2; -update noar tt set b1='E3O0' where id=2; -update noar ti set b1='E3O0' where id=2; -update noar tt set v0='76XWRWI04VKDH2TOGZ9' where id=2; -update noar ti set v0='76XWRWI04VKDH2TOGZ9' where id=2; -update noar tt set b2='DFZ3GCUWRSHNLQD3' where id=2; -update noar ti set b2='DFZ3GCUWRSHNLQD3' where id=2; -update noar tt set v0='M9XZL1XRHKE1AZ913A' where id=3; -update noar ti set v0='M9XZL1XRHKE1AZ913A' where id=3; -update noar tt set b0='19GJPEUNNO' where id=3; -update noar ti set b0='19GJPEUNNO' where id=3; -update noar tt set v0='RIVRRSEKSTRQZU7VGK3265KBNETD' where id=3; -update noar ti set v0='RIVRRSEKSTRQZU7VGK3265KBNETD' where id=3; -update noar tt set b1='11F6FOODKFNNMMBE8BOZFUM6F' where id=3; -update noar ti set b1='11F6FOODKFNNMMBE8BOZFUM6F' where id=3; -update noar tt set v0='VRBMZ6APJJ4U2HY' where id=3; -update noar ti set v0='VRBMZ6APJJ4U2HY' where id=3; -update noar tt set b2='7' where id=3; -update noar ti set b2='7' where id=3; -update noar tt set v0='N2PAFJ2MZ7RHO81YW9804SPAB3XX' where id=4; -update noar ti set v0='N2PAFJ2MZ7RHO81YW9804SPAB3XX' where id=4; -update noar tt set b0='PDY8SKSEN1XEC2K96' where id=4; -update noar ti set b0='PDY8SKSEN1XEC2K96' where id=4; -update noar tt set v0='P3TKDD4HRXQ4VC0EWJC5' where id=4; -update noar ti set v0='P3TKDD4HRXQ4VC0EWJC5' where id=4; -update noar tt set b1='QGO9O' where id=4; -update noar ti set b1='QGO9O' where id=4; -update noar tt set v0='ETX98A2ZCD' where id=4; -update noar ti set v0='ETX98A2ZCD' where id=4; -update noar tt set b2='JE3VVV20VHTQ' where id=4; -update noar ti set b2='JE3VVV20VHTQ' where id=4; -update noar tt set v0='6L9' where id=5; -update noar ti set v0='6L9' where id=5; -update noar tt set b0='1B9HKLBZ7AW4' where id=5; -update noar ti set b0='1B9HKLBZ7AW4' where id=5; -update noar tt set v0='XVGYLFLR22NQ98LRALD5PXPZ8' where id=5; -update noar ti set v0='XVGYLFLR22NQ98LRALD5PXPZ8' where id=5; -update noar tt set b1='4L47QY' where id=5; -update noar ti set b1='4L47QY' where id=5; -update noar tt set v0='BOMR8S' where id=5; -update noar ti set v0='BOMR8S' where id=5; -update noar tt set b2='F0IZUPH5JMTB7M4H44WT' where id=5; -update noar ti set b2='F0IZUPH5JMTB7M4H44WT' where id=5; -update noar tt set v0='3XV4BLXT1ASGXFS0IR14' where id=6; -update noar ti set v0='3XV4BLXT1ASGXFS0IR14' where id=6; -update noar tt set b0='NQKNL94JUMLJ' where id=6; -update noar ti set b0='NQKNL94JUMLJ' where id=6; -update noar tt set v0='BRQ4F0HF5E83DX9Y80PO0V2CY' where id=6; -update noar ti set v0='BRQ4F0HF5E83DX9Y80PO0V2CY' where id=6; -update noar tt set b1='GMFXSRRA1TKLLP' where id=6; -update noar ti set b1='GMFXSRRA1TKLLP' where id=6; -update noar tt set v0='CP2BGCGWZKMYY88RIOOY' where id=6; -update noar ti set v0='CP2BGCGWZKMYY88RIOOY' where id=6; -update noar tt set b2='X31H0BB0' where id=6; -update noar ti set b2='X31H0BB0' where id=6; -update noar tt set v0='YXZB6G9AFBQNAOSSFYQIZRYTK' where id=7; -update noar ti set v0='YXZB6G9AFBQNAOSSFYQIZRYTK' where id=7; -update noar tt set b0='3PL2CPH0T27UNUC986KT0F5B' where id=7; -update noar ti set b0='3PL2CPH0T27UNUC986KT0F5B' where id=7; -update noar tt set v0='EJ550841' where id=7; -update noar ti set v0='EJ550841' where id=7; -update noar tt set b1='AV4TF5M3NQYKV0I31L7V0' where id=7; -update noar ti set b1='AV4TF5M3NQYKV0I31L7V0' where id=7; -update noar tt set v0='W2APVHF6CJZEVW0N7ZW9ARZTDO1ES' where id=7; -update noar ti set v0='W2APVHF6CJZEVW0N7ZW9ARZTDO1ES' where id=7; -update noar tt set b2='PMGD7UWY' where id=7; -update noar ti set b2='PMGD7UWY' where id=7; -update noar tt set v0='FV4EGB1BQQHU8X5SIOPEMKURI' where id=8; -update noar ti set v0='FV4EGB1BQQHU8X5SIOPEMKURI' where id=8; -update noar tt set b0='LZ1QP2OQJ3U4BLDI09' where id=8; -update noar ti set b0='LZ1QP2OQJ3U4BLDI09' where id=8; -update noar tt set v0='73HMUGCDZHYS4OBY3ZC7DEK2R7ZM' where id=8; -update noar ti set v0='73HMUGCDZHYS4OBY3ZC7DEK2R7ZM' where id=8; -update noar tt set b1='8NVXJ1TORGCO' where id=8; -update noar ti set b1='8NVXJ1TORGCO' where id=8; -update noar tt set v0='WXKFM7H' where id=8; -update noar ti set v0='WXKFM7H' where id=8; -update noar tt set b2='2GBZE5Q7V5O4LP66M5AN' where id=8; -update noar ti set b2='2GBZE5Q7V5O4LP66M5AN' where id=8; -update noar tt set v0='Y2242KN9THL2KV0ALATKBAWBKKB' where id=9; -update noar ti set v0='Y2242KN9THL2KV0ALATKBAWBKKB' where id=9; -update noar tt set b0='G8QEN2EJ5LWKHXF36JQ9PC9G' where id=9; -update noar ti set b0='G8QEN2EJ5LWKHXF36JQ9PC9G' where id=9; -update noar tt set v0='5UFCMRM0IJ2OTDXFVEDJ5HNH6NTU' where id=9; -update noar ti set v0='5UFCMRM0IJ2OTDXFVEDJ5HNH6NTU' where id=9; -update noar tt set b1='LFN9H1HDL4JA9OI2PHBSM2M0DRX' where id=9; -update noar ti set b1='LFN9H1HDL4JA9OI2PHBSM2M0DRX' where id=9; -update noar tt set v0='T7FKCFNSJ3GLTXM5' where id=9; -update noar ti set v0='T7FKCFNSJ3GLTXM5' where id=9; -update noar tt set b2='6IE9YDK6IH15L1' where id=9; -update noar ti set b2='6IE9YDK6IH15L1' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 blob not null, -b1 longblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='KZSXHZ71NWO' where id=1; -update noar ti set v0='KZSXHZ71NWO' where id=1; -update noar tt set b0='O4Q3CNNWCHYKFK7' where id=1; -update noar ti set b0='O4Q3CNNWCHYKFK7' where id=1; -update noar tt set v0='XFJ14XGHYGXTDELKGS' where id=1; -update noar ti set v0='XFJ14XGHYGXTDELKGS' where id=1; -update noar tt set b1='1WID9SLJIPBX8JWY7QNC2D5' where id=1; -update noar ti set b1='1WID9SLJIPBX8JWY7QNC2D5' where id=1; -update noar tt set v0='G7IANSTI86HBBDTK29C' where id=1; -update noar ti set v0='G7IANSTI86HBBDTK29C' where id=1; -update noar tt set b2='5EU63CHMBDC2OGA9GLJNA78UKJB9U6VS' where id=1; -update noar ti set b2='5EU63CHMBDC2OGA9GLJNA78UKJB9U6VS' where id=1; -update noar tt set v0='WP4VXHSTQCVO6D2KQ' where id=2; -update noar ti set v0='WP4VXHSTQCVO6D2KQ' where id=2; -update noar tt set b0='KOK4P4NXT78PDP' where id=2; -update noar ti set b0='KOK4P4NXT78PDP' where id=2; -update noar tt set v0='9H77ENRPFIWWM' where id=2; -update noar ti set v0='9H77ENRPFIWWM' where id=2; -update noar tt set b1='I1109OT3OUN' where id=2; -update noar ti set b1='I1109OT3OUN' where id=2; -update noar tt set v0='HBE3X7PJCDMV' where id=2; -update noar ti set v0='HBE3X7PJCDMV' where id=2; -update noar tt set b2='WO4UMOUUBZAKMLE3EC' where id=2; -update noar ti set b2='WO4UMOUUBZAKMLE3EC' where id=2; -update noar tt set v0='60L6XL1VCJ7GG84FJDU3K0X86F' where id=3; -update noar ti set v0='60L6XL1VCJ7GG84FJDU3K0X86F' where id=3; -update noar tt set b0='5OBVORTZSQOS3D' where id=3; -update noar ti set b0='5OBVORTZSQOS3D' where id=3; -update noar tt set v0='2W' where id=3; -update noar ti set v0='2W' where id=3; -update noar tt set b1='NHWIZ8JH00NNJSLE74BYN34GAOU2VY' where id=3; -update noar ti set b1='NHWIZ8JH00NNJSLE74BYN34GAOU2VY' where id=3; -update noar tt set v0='737M61PEL6RD9ZWPQNI8V563T59OL1' where id=3; -update noar ti set v0='737M61PEL6RD9ZWPQNI8V563T59OL1' where id=3; -update noar tt set b2='SSB5DKUXWFXYP28ENXEY9Y1XCB' where id=3; -update noar ti set b2='SSB5DKUXWFXYP28ENXEY9Y1XCB' where id=3; -update noar tt set v0='U' where id=4; -update noar ti set v0='U' where id=4; -update noar tt set b0='2P46UM' where id=4; -update noar ti set b0='2P46UM' where id=4; -update noar tt set v0='ISAD2KT39J84IBV40KIUFXG7SIXWDDSO' where id=4; -update noar ti set v0='ISAD2KT39J84IBV40KIUFXG7SIXWDDSO' where id=4; -update noar tt set b1='4EQ3ZK9QO5T7Z4GD9I7' where id=4; -update noar ti set b1='4EQ3ZK9QO5T7Z4GD9I7' where id=4; -update noar tt set v0='9EKLBE01TYW9D7O36TYA' where id=4; -update noar ti set v0='9EKLBE01TYW9D7O36TYA' where id=4; -update noar tt set b2='M3B38YGM4IZ4VOLNG8UTPJ6PEGZ' where id=4; -update noar ti set b2='M3B38YGM4IZ4VOLNG8UTPJ6PEGZ' where id=4; -update noar tt set v0='9SAO240F7KVUS' where id=5; -update noar ti set v0='9SAO240F7KVUS' where id=5; -update noar tt set b0='GQS81M5Y37V8RHN92U39EFAWECOZ' where id=5; -update noar ti set b0='GQS81M5Y37V8RHN92U39EFAWECOZ' where id=5; -update noar tt set v0='K5OQ2UTDPAYCU9O11OEPOP0D96K0DPC' where id=5; -update noar ti set v0='K5OQ2UTDPAYCU9O11OEPOP0D96K0DPC' where id=5; -update noar tt set b1='YQ' where id=5; -update noar ti set b1='YQ' where id=5; -update noar tt set v0='H21IGF1VYH42GSB2Y' where id=5; -update noar ti set v0='H21IGF1VYH42GSB2Y' where id=5; -update noar tt set b2='FR0D2X8463N' where id=5; -update noar ti set b2='FR0D2X8463N' where id=5; -update noar tt set v0='0VD69QUB1FCA1E8MVIY9G4QMIP7' where id=6; -update noar ti set v0='0VD69QUB1FCA1E8MVIY9G4QMIP7' where id=6; -update noar tt set b0='FZT5HEJPJ3RUXVCUA5QE' where id=6; -update noar ti set b0='FZT5HEJPJ3RUXVCUA5QE' where id=6; -update noar tt set v0='KOZ4A0K5LHD5TSRE' where id=6; -update noar ti set v0='KOZ4A0K5LHD5TSRE' where id=6; -update noar tt set b1='6QRH1ULSTN3M3SI99' where id=6; -update noar ti set b1='6QRH1ULSTN3M3SI99' where id=6; -update noar tt set v0='UBQQDQV1YII74F3CYCGOH913SE' where id=6; -update noar ti set v0='UBQQDQV1YII74F3CYCGOH913SE' where id=6; -update noar tt set b2='XX5NITXUHRLQNF' where id=6; -update noar ti set b2='XX5NITXUHRLQNF' where id=6; -update noar tt set v0='V6MG34TI9SZ6526OZGGM7SFKLKH' where id=7; -update noar ti set v0='V6MG34TI9SZ6526OZGGM7SFKLKH' where id=7; -update noar tt set b0='7VNIN2F26FCS67L85DCBRY1QK89K' where id=7; -update noar ti set b0='7VNIN2F26FCS67L85DCBRY1QK89K' where id=7; -update noar tt set v0='JICMLWLDU44NLYHS82S8WE47TI' where id=7; -update noar ti set v0='JICMLWLDU44NLYHS82S8WE47TI' where id=7; -update noar tt set b1='30ZFKKDIAGF' where id=7; -update noar ti set b1='30ZFKKDIAGF' where id=7; -update noar tt set v0='C95F7H251FS' where id=7; -update noar ti set v0='C95F7H251FS' where id=7; -update noar tt set b2='ARSJRXM0WJBE4U9E7YJTGD' where id=7; -update noar ti set b2='ARSJRXM0WJBE4U9E7YJTGD' where id=7; -update noar tt set v0='0GCMNRT9' where id=8; -update noar ti set v0='0GCMNRT9' where id=8; -update noar tt set b0='UR9HJ72DEAZ' where id=8; -update noar ti set b0='UR9HJ72DEAZ' where id=8; -update noar tt set v0='9F81SUFATO80' where id=8; -update noar ti set v0='9F81SUFATO80' where id=8; -update noar tt set b1='0HY01VHG' where id=8; -update noar ti set b1='0HY01VHG' where id=8; -update noar tt set v0='EKM' where id=8; -update noar ti set v0='EKM' where id=8; -update noar tt set b2='ZY' where id=8; -update noar ti set b2='ZY' where id=8; -update noar tt set v0='E5V8XS74LUB3VU' where id=9; -update noar ti set v0='E5V8XS74LUB3VU' where id=9; -update noar tt set b0='HQVPDBMP62J7B1Y4SFUGSS' where id=9; -update noar ti set b0='HQVPDBMP62J7B1Y4SFUGSS' where id=9; -update noar tt set v0='W8F7S4275SEI843RSSGINC5C2XTU5AP4' where id=9; -update noar ti set v0='W8F7S4275SEI843RSSGINC5C2XTU5AP4' where id=9; -update noar tt set b1='7JQOUNL3TRVQS1' where id=9; -update noar ti set b1='7JQOUNL3TRVQS1' where id=9; -update noar tt set v0='QFSFALZLQO83RKM' where id=9; -update noar ti set v0='QFSFALZLQO83RKM' where id=9; -update noar tt set b2='TU1365Z1PBHUI4K70DH0Y0' where id=9; -update noar ti set b2='TU1365Z1PBHUI4K70DH0Y0' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 blob null, -b1 longblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='KJ6MKP049PDG' where id=1; -update noar ti set v0='KJ6MKP049PDG' where id=1; -update noar tt set b0='69E1' where id=1; -update noar ti set b0='69E1' where id=1; -update noar tt set v0='DV6D9' where id=1; -update noar ti set v0='DV6D9' where id=1; -update noar tt set b1='A7R18OFT4719POYYKW' where id=1; -update noar ti set b1='A7R18OFT4719POYYKW' where id=1; -update noar tt set v0='YMEJKYXVKIRY1A' where id=1; -update noar ti set v0='YMEJKYXVKIRY1A' where id=1; -update noar tt set b2='K7FMF' where id=1; -update noar ti set b2='K7FMF' where id=1; -update noar tt set v0='JPXGG54S' where id=2; -update noar ti set v0='JPXGG54S' where id=2; -update noar tt set b0='WCAKXTLZ7624V' where id=2; -update noar ti set b0='WCAKXTLZ7624V' where id=2; -update noar tt set v0='SXQMLSI2N05N460U8NU84U80VVBK' where id=2; -update noar ti set v0='SXQMLSI2N05N460U8NU84U80VVBK' where id=2; -update noar tt set b1='MI7CCMVG2V4IBQZEPEAAKY' where id=2; -update noar ti set b1='MI7CCMVG2V4IBQZEPEAAKY' where id=2; -update noar tt set v0='S7YRJFHRZ63FTZ0UZ783NGWJ0Q0Q0' where id=2; -update noar ti set v0='S7YRJFHRZ63FTZ0UZ783NGWJ0Q0Q0' where id=2; -update noar tt set b2='UZRX94PCNHOR' where id=2; -update noar ti set b2='UZRX94PCNHOR' where id=2; -update noar tt set v0='O3K8E2KKBO22MJRM4' where id=3; -update noar ti set v0='O3K8E2KKBO22MJRM4' where id=3; -update noar tt set b0='TD3' where id=3; -update noar ti set b0='TD3' where id=3; -update noar tt set v0='N5GZATTF8VZBWVJ' where id=3; -update noar ti set v0='N5GZATTF8VZBWVJ' where id=3; -update noar tt set b1='LN2GBCLZEUN' where id=3; -update noar ti set b1='LN2GBCLZEUN' where id=3; -update noar tt set v0='3ZGAWSEZANCV4ZJ8ZAOU4428KAC2P' where id=3; -update noar ti set v0='3ZGAWSEZANCV4ZJ8ZAOU4428KAC2P' where id=3; -update noar tt set b2='LUR7M75DNR5ER4DNVBTAO8TDCAMHHT' where id=3; -update noar ti set b2='LUR7M75DNR5ER4DNVBTAO8TDCAMHHT' where id=3; -update noar tt set v0='V3WN4JUFIS4YMZT' where id=4; -update noar ti set v0='V3WN4JUFIS4YMZT' where id=4; -update noar tt set b0='Y37CSDSCBCMPM0RU5Y0MZUFRIQAN5V7P' where id=4; -update noar ti set b0='Y37CSDSCBCMPM0RU5Y0MZUFRIQAN5V7P' where id=4; -update noar tt set v0='JBIX2PLJAED9KBHWUUV9P3XP' where id=4; -update noar ti set v0='JBIX2PLJAED9KBHWUUV9P3XP' where id=4; -update noar tt set b1='P5GI' where id=4; -update noar ti set b1='P5GI' where id=4; -update noar tt set v0='WTKW7E45N2I0IMRBRNYQ9CK' where id=4; -update noar ti set v0='WTKW7E45N2I0IMRBRNYQ9CK' where id=4; -update noar tt set b2='CFBBHF' where id=4; -update noar ti set b2='CFBBHF' where id=4; -update noar tt set v0='GBN9OHZHHTLSAD4LMVVX5Y' where id=5; -update noar ti set v0='GBN9OHZHHTLSAD4LMVVX5Y' where id=5; -update noar tt set b0='K' where id=5; -update noar ti set b0='K' where id=5; -update noar tt set v0='47MBG75Q6GPW' where id=5; -update noar ti set v0='47MBG75Q6GPW' where id=5; -update noar tt set b1='PLNZFEXBT1' where id=5; -update noar ti set b1='PLNZFEXBT1' where id=5; -update noar tt set v0='6VW2EPWR8I' where id=5; -update noar ti set v0='6VW2EPWR8I' where id=5; -update noar tt set b2='9AGKTT6LR5QZ5X904PBGC85JMPU' where id=5; -update noar ti set b2='9AGKTT6LR5QZ5X904PBGC85JMPU' where id=5; -update noar tt set v0='YOJH0FLKQD9R' where id=6; -update noar ti set v0='YOJH0FLKQD9R' where id=6; -update noar tt set b0='O194CF9VIOHO3Q0I77ZE3J7FP' where id=6; -update noar ti set b0='O194CF9VIOHO3Q0I77ZE3J7FP' where id=6; -update noar tt set v0='4IFEK' where id=6; -update noar ti set v0='4IFEK' where id=6; -update noar tt set b1='OS2PDRO36I4ILQ' where id=6; -update noar ti set b1='OS2PDRO36I4ILQ' where id=6; -update noar tt set v0='HPB0H' where id=6; -update noar ti set v0='HPB0H' where id=6; -update noar tt set b2='PNITSXSGGIN' where id=6; -update noar ti set b2='PNITSXSGGIN' where id=6; -update noar tt set v0='J6WDDAP8UQBMPRPPB6AZRYJFM2' where id=7; -update noar ti set v0='J6WDDAP8UQBMPRPPB6AZRYJFM2' where id=7; -update noar tt set b0='2O25QBVE05XVIWGLE2QTR2536RWDA7OZ' where id=7; -update noar ti set b0='2O25QBVE05XVIWGLE2QTR2536RWDA7OZ' where id=7; -update noar tt set v0='0PZ0UK' where id=7; -update noar ti set v0='0PZ0UK' where id=7; -update noar tt set b1='6FK9XGEIP42YHUT2UF5QAE1F387U' where id=7; -update noar ti set b1='6FK9XGEIP42YHUT2UF5QAE1F387U' where id=7; -update noar tt set v0='EJCASXYO2JUCUAKROAG068LW04910HSQ' where id=7; -update noar ti set v0='EJCASXYO2JUCUAKROAG068LW04910HSQ' where id=7; -update noar tt set b2='NH096JE59N1PA1K8INC8D0370B6I' where id=7; -update noar ti set b2='NH096JE59N1PA1K8INC8D0370B6I' where id=7; -update noar tt set v0='K3EKNTGDBRA2OQ4OQRRVMHLW3UC7V2C' where id=8; -update noar ti set v0='K3EKNTGDBRA2OQ4OQRRVMHLW3UC7V2C' where id=8; -update noar tt set b0='ESL93' where id=8; -update noar ti set b0='ESL93' where id=8; -update noar tt set v0='ZKNB1221LBQ7X05NJPMY44VCHASW' where id=8; -update noar ti set v0='ZKNB1221LBQ7X05NJPMY44VCHASW' where id=8; -update noar tt set b1='G' where id=8; -update noar ti set b1='G' where id=8; -update noar tt set v0='H0D1UL1806J9QRNDVNB84XXP2600IQ' where id=8; -update noar ti set v0='H0D1UL1806J9QRNDVNB84XXP2600IQ' where id=8; -update noar tt set b2='8MUF' where id=8; -update noar ti set b2='8MUF' where id=8; -update noar tt set v0='W19KL15S2QHVW280KXP0' where id=9; -update noar ti set v0='W19KL15S2QHVW280KXP0' where id=9; -update noar tt set b0='0ET2YLFPVAMTVLAQ4EWT8QLQWT7DHEF' where id=9; -update noar ti set b0='0ET2YLFPVAMTVLAQ4EWT8QLQWT7DHEF' where id=9; -update noar tt set v0='KFLNKTMFCJAUPEHWDRZT' where id=9; -update noar ti set v0='KFLNKTMFCJAUPEHWDRZT' where id=9; -update noar tt set b1='8A9K' where id=9; -update noar ti set b1='8A9K' where id=9; -update noar tt set v0='89YIIRVZ241T2KIMYFV422AS5JW3' where id=9; -update noar ti set v0='89YIIRVZ241T2KIMYFV422AS5JW3' where id=9; -update noar tt set b2='I2W9N7WP7FEH' where id=9; -update noar ti set b2='I2W9N7WP7FEH' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 blob null, -b1 longblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='ITO' where id=1; -update noar ti set v0='ITO' where id=1; -update noar tt set b0='9BP' where id=1; -update noar ti set b0='9BP' where id=1; -update noar tt set v0='MB4R269GI0573NGI4QADOC6F9TDN3' where id=1; -update noar ti set v0='MB4R269GI0573NGI4QADOC6F9TDN3' where id=1; -update noar tt set b1='8BI9TK0' where id=1; -update noar ti set b1='8BI9TK0' where id=1; -update noar tt set v0='SW1R1ZJ23K6RP3OUV4CTHT' where id=1; -update noar ti set v0='SW1R1ZJ23K6RP3OUV4CTHT' where id=1; -update noar tt set b2='TTKLVH6ABGT8' where id=1; -update noar ti set b2='TTKLVH6ABGT8' where id=1; -update noar tt set v0='RUW83BI5QOF9EQ2H7F0G' where id=2; -update noar ti set v0='RUW83BI5QOF9EQ2H7F0G' where id=2; -update noar tt set b0='LG5EBGS6DPOXBWH7MK0Z2ZN4' where id=2; -update noar ti set b0='LG5EBGS6DPOXBWH7MK0Z2ZN4' where id=2; -update noar tt set v0='EN9ZXMYC' where id=2; -update noar ti set v0='EN9ZXMYC' where id=2; -update noar tt set b1='8488T5G82EB59QH6' where id=2; -update noar ti set b1='8488T5G82EB59QH6' where id=2; -update noar tt set v0='BSZ0895XG' where id=2; -update noar ti set v0='BSZ0895XG' where id=2; -update noar tt set b2='HAEQ7TZ2GL0C' where id=2; -update noar ti set b2='HAEQ7TZ2GL0C' where id=2; -update noar tt set v0='VD20G96JY68XKVM3KX49ET3NK6' where id=3; -update noar ti set v0='VD20G96JY68XKVM3KX49ET3NK6' where id=3; -update noar tt set b0='SWF4F624MVDSM8H0OA' where id=3; -update noar ti set b0='SWF4F624MVDSM8H0OA' where id=3; -update noar tt set v0='YROHDKQYDFGP0JH5FWPGKE02W' where id=3; -update noar ti set v0='YROHDKQYDFGP0JH5FWPGKE02W' where id=3; -update noar tt set b1='8ZXJ34RTK995TK' where id=3; -update noar ti set b1='8ZXJ34RTK995TK' where id=3; -update noar tt set v0='ZS4EH099NBP53P3SNZYZZG8V1IOIH' where id=3; -update noar ti set v0='ZS4EH099NBP53P3SNZYZZG8V1IOIH' where id=3; -update noar tt set b2='R7CYSNEVJ3D' where id=3; -update noar ti set b2='R7CYSNEVJ3D' where id=3; -update noar tt set v0='JK7IGN97' where id=4; -update noar ti set v0='JK7IGN97' where id=4; -update noar tt set b0='YZFDMVIBS7FU3MQ11MJ7S' where id=4; -update noar ti set b0='YZFDMVIBS7FU3MQ11MJ7S' where id=4; -update noar tt set v0='F063BPTT4UF2JO' where id=4; -update noar ti set v0='F063BPTT4UF2JO' where id=4; -update noar tt set b1='U9A35HW6MO5VIG79M01LELB' where id=4; -update noar ti set b1='U9A35HW6MO5VIG79M01LELB' where id=4; -update noar tt set v0='D28GTGR7HCKIBJW1ILZM' where id=4; -update noar ti set v0='D28GTGR7HCKIBJW1ILZM' where id=4; -update noar tt set b2='CQWH0W' where id=4; -update noar ti set b2='CQWH0W' where id=4; -update noar tt set v0='8KNCJML44FP6K13VYHKFPXLOQWCNYAY' where id=5; -update noar ti set v0='8KNCJML44FP6K13VYHKFPXLOQWCNYAY' where id=5; -update noar tt set b0='8VN1QDSICJTI8ZV82Z' where id=5; -update noar ti set b0='8VN1QDSICJTI8ZV82Z' where id=5; -update noar tt set v0='6F4NC9M7OA0KH41KFTZ' where id=5; -update noar ti set v0='6F4NC9M7OA0KH41KFTZ' where id=5; -update noar tt set b1='B931DFW' where id=5; -update noar ti set b1='B931DFW' where id=5; -update noar tt set v0='U' where id=5; -update noar ti set v0='U' where id=5; -update noar tt set b2='U34BAYBBB7RQ135QT9BXOWI' where id=5; -update noar ti set b2='U34BAYBBB7RQ135QT9BXOWI' where id=5; -update noar tt set v0='FJ0VFJ041Y6FZ3F6EKCG4497' where id=6; -update noar ti set v0='FJ0VFJ041Y6FZ3F6EKCG4497' where id=6; -update noar tt set b0='2YRAK04HQ4BXW84R1ZXEII5SD05BS0' where id=6; -update noar ti set b0='2YRAK04HQ4BXW84R1ZXEII5SD05BS0' where id=6; -update noar tt set v0='D1VWA61L2NCMUSQ9595LYU20M4H7' where id=6; -update noar ti set v0='D1VWA61L2NCMUSQ9595LYU20M4H7' where id=6; -update noar tt set b1='5LRBSCLHRSIEZZ12ZDG09ZTK6S3V9F' where id=6; -update noar ti set b1='5LRBSCLHRSIEZZ12ZDG09ZTK6S3V9F' where id=6; -update noar tt set v0='845QXJ0IC6COX' where id=6; -update noar ti set v0='845QXJ0IC6COX' where id=6; -update noar tt set b2='4JWH5WI4J73LH3IAIBND1S' where id=6; -update noar ti set b2='4JWH5WI4J73LH3IAIBND1S' where id=6; -update noar tt set v0='YWC3JJ3SDLISFJBR9U2IRC32FI2D' where id=7; -update noar ti set v0='YWC3JJ3SDLISFJBR9U2IRC32FI2D' where id=7; -update noar tt set b0='7DEVU7RA4P5CHEMGP5JX1B7UHP89P39' where id=7; -update noar ti set b0='7DEVU7RA4P5CHEMGP5JX1B7UHP89P39' where id=7; -update noar tt set v0='V4SRVJAOCJ69' where id=7; -update noar ti set v0='V4SRVJAOCJ69' where id=7; -update noar tt set b1='I77SO2B8M7I51' where id=7; -update noar ti set b1='I77SO2B8M7I51' where id=7; -update noar tt set v0='WKQ4F33J16DZSV3HQFTS' where id=7; -update noar ti set v0='WKQ4F33J16DZSV3HQFTS' where id=7; -update noar tt set b2='HP22Y62C9LZSQDBWP8SJRZ6LY' where id=7; -update noar ti set b2='HP22Y62C9LZSQDBWP8SJRZ6LY' where id=7; -update noar tt set v0='MUZGIV8K81FZFE3YPLL155HW3M' where id=8; -update noar ti set v0='MUZGIV8K81FZFE3YPLL155HW3M' where id=8; -update noar tt set b0='VVQA' where id=8; -update noar ti set b0='VVQA' where id=8; -update noar tt set v0='W0QBLTI0H1MR' where id=8; -update noar ti set v0='W0QBLTI0H1MR' where id=8; -update noar tt set b1='4DY3M9KOQO60C2AEIMWP4RCBPVIIX14B' where id=8; -update noar ti set b1='4DY3M9KOQO60C2AEIMWP4RCBPVIIX14B' where id=8; -update noar tt set v0='F7DPBVSLGTU1YL009S' where id=8; -update noar ti set v0='F7DPBVSLGTU1YL009S' where id=8; -update noar tt set b2='9JVFALJV78AGGJNW07UMS' where id=8; -update noar ti set b2='9JVFALJV78AGGJNW07UMS' where id=8; -update noar tt set v0='FUS026C7I5S3UKFK1CATTD2R7P' where id=9; -update noar ti set v0='FUS026C7I5S3UKFK1CATTD2R7P' where id=9; -update noar tt set b0='NPZS3' where id=9; -update noar ti set b0='NPZS3' where id=9; -update noar tt set v0='R9FCY75S47KUMB8M1GW3RUMJ' where id=9; -update noar ti set v0='R9FCY75S47KUMB8M1GW3RUMJ' where id=9; -update noar tt set b1='NW96JBMM62X5LAB25EG17MRUXTULC' where id=9; -update noar ti set b1='NW96JBMM62X5LAB25EG17MRUXTULC' where id=9; -update noar tt set v0='LKSTEKPKMYGATFBJT2IK7CCQW' where id=9; -update noar ti set v0='LKSTEKPKMYGATFBJT2IK7CCQW' where id=9; -update noar tt set b2='QTB' where id=9; -update noar ti set b2='QTB' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 blob not null, -b1 longblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='U' where id=1; -update noar ti set v0='U' where id=1; -update noar tt set b0='MF3BLQ' where id=1; -update noar ti set b0='MF3BLQ' where id=1; -update noar tt set v0='JWT2OX' where id=1; -update noar ti set v0='JWT2OX' where id=1; -update noar tt set b1='P5K5QTRYV1237KMOAL7E1W1' where id=1; -update noar ti set b1='P5K5QTRYV1237KMOAL7E1W1' where id=1; -update noar tt set v0='2' where id=1; -update noar ti set v0='2' where id=1; -update noar tt set b2='X7P5EQWGF2QRWJ' where id=1; -update noar ti set b2='X7P5EQWGF2QRWJ' where id=1; -update noar tt set v0='3J3R13MW2L8KRX93UYO3' where id=2; -update noar ti set v0='3J3R13MW2L8KRX93UYO3' where id=2; -update noar tt set b0='EVVVE6QL6F6PYN0NR5U1KF' where id=2; -update noar ti set b0='EVVVE6QL6F6PYN0NR5U1KF' where id=2; -update noar tt set v0='BIR8QY7YS9RG38846YKR7' where id=2; -update noar ti set v0='BIR8QY7YS9RG38846YKR7' where id=2; -update noar tt set b1='G6PV5ZVNKLPJ2T7IN5XCM' where id=2; -update noar ti set b1='G6PV5ZVNKLPJ2T7IN5XCM' where id=2; -update noar tt set v0='G3N7JHA25VY4DQEIY4G' where id=2; -update noar ti set v0='G3N7JHA25VY4DQEIY4G' where id=2; -update noar tt set b2='3ODMSDN0EFH5T080' where id=2; -update noar ti set b2='3ODMSDN0EFH5T080' where id=2; -update noar tt set v0='8ADM6SBIDBQD5LY2YFI8PU43GG2B' where id=3; -update noar ti set v0='8ADM6SBIDBQD5LY2YFI8PU43GG2B' where id=3; -update noar tt set b0='W' where id=3; -update noar ti set b0='W' where id=3; -update noar tt set v0='S5G90H3E1V2AT24XL2IMCK08AQC48W' where id=3; -update noar ti set v0='S5G90H3E1V2AT24XL2IMCK08AQC48W' where id=3; -update noar tt set b1='JLED5SW6YJZL97' where id=3; -update noar ti set b1='JLED5SW6YJZL97' where id=3; -update noar tt set v0='WL7E77ZWPWMKKM9L4G' where id=3; -update noar ti set v0='WL7E77ZWPWMKKM9L4G' where id=3; -update noar tt set b2='RIL3LWRO7U851QCHZHFUMASGOUOGQ' where id=3; -update noar ti set b2='RIL3LWRO7U851QCHZHFUMASGOUOGQ' where id=3; -update noar tt set v0='9EQY3QU1' where id=4; -update noar ti set v0='9EQY3QU1' where id=4; -update noar tt set b0='H9OSPWTQKIA1PDC96' where id=4; -update noar ti set b0='H9OSPWTQKIA1PDC96' where id=4; -update noar tt set v0='U8KU66FHTYBNFOF3' where id=4; -update noar ti set v0='U8KU66FHTYBNFOF3' where id=4; -update noar tt set b1='Y52LWJP' where id=4; -update noar ti set b1='Y52LWJP' where id=4; -update noar tt set v0='CN' where id=4; -update noar ti set v0='CN' where id=4; -update noar tt set b2='JFYBRI1UTWBEM344C6TY4172' where id=4; -update noar ti set b2='JFYBRI1UTWBEM344C6TY4172' where id=4; -update noar tt set v0='GPNOZCYQ5Q0' where id=5; -update noar ti set v0='GPNOZCYQ5Q0' where id=5; -update noar tt set b0='P2EKX' where id=5; -update noar ti set b0='P2EKX' where id=5; -update noar tt set v0='4L90NIQ7D364VV21JXSEPHOE' where id=5; -update noar ti set v0='4L90NIQ7D364VV21JXSEPHOE' where id=5; -update noar tt set b1='XZDFIGCCN0CO6ABW6BY8J5DUS7F4B' where id=5; -update noar ti set b1='XZDFIGCCN0CO6ABW6BY8J5DUS7F4B' where id=5; -update noar tt set v0='K62ZQCPLYBRSQ7QOG71H' where id=5; -update noar ti set v0='K62ZQCPLYBRSQ7QOG71H' where id=5; -update noar tt set b2='AWI' where id=5; -update noar ti set b2='AWI' where id=5; -update noar tt set v0='8457IMW1E4BP0H4WC52SECB1BATN61' where id=6; -update noar ti set v0='8457IMW1E4BP0H4WC52SECB1BATN61' where id=6; -update noar tt set b0='PI5YYKCQE3HBP70BJIXNE8ZZDTP6F' where id=6; -update noar ti set b0='PI5YYKCQE3HBP70BJIXNE8ZZDTP6F' where id=6; -update noar tt set v0='BXMLD0HEBZC3T' where id=6; -update noar ti set v0='BXMLD0HEBZC3T' where id=6; -update noar tt set b1='PSL98PMQ2W1RW2KCHW43GDFG7ST' where id=6; -update noar ti set b1='PSL98PMQ2W1RW2KCHW43GDFG7ST' where id=6; -update noar tt set v0='LC83UXCADG6MLMLXM9SKH5P' where id=6; -update noar ti set v0='LC83UXCADG6MLMLXM9SKH5P' where id=6; -update noar tt set b2='BHXS0HL90GQG22Y9HND16MAN9PO7ZZE2' where id=6; -update noar ti set b2='BHXS0HL90GQG22Y9HND16MAN9PO7ZZE2' where id=6; -update noar tt set v0='P3OKH912FY11UDU12' where id=7; -update noar ti set v0='P3OKH912FY11UDU12' where id=7; -update noar tt set b0='OCETZULD1T6U158J2W8JFN' where id=7; -update noar ti set b0='OCETZULD1T6U158J2W8JFN' where id=7; -update noar tt set v0='E5NI0FUGU' where id=7; -update noar ti set v0='E5NI0FUGU' where id=7; -update noar tt set b1='LVE8KFLUX3PZZ7PD6LOQFFACP61X1QL1' where id=7; -update noar ti set b1='LVE8KFLUX3PZZ7PD6LOQFFACP61X1QL1' where id=7; -update noar tt set v0='I0D5Z7I0F7206QTT7AEGMODTJQ' where id=7; -update noar ti set v0='I0D5Z7I0F7206QTT7AEGMODTJQ' where id=7; -update noar tt set b2='0MD' where id=7; -update noar ti set b2='0MD' where id=7; -update noar tt set v0='ZN' where id=8; -update noar ti set v0='ZN' where id=8; -update noar tt set b0='RD0D9ITUK1' where id=8; -update noar ti set b0='RD0D9ITUK1' where id=8; -update noar tt set v0='EX5C2HATSE86' where id=8; -update noar ti set v0='EX5C2HATSE86' where id=8; -update noar tt set b1='C80UATLXF' where id=8; -update noar ti set b1='C80UATLXF' where id=8; -update noar tt set v0='5' where id=8; -update noar ti set v0='5' where id=8; -update noar tt set b2='A0SRJ89IN43O6OGGL0BDJWY7TM4' where id=8; -update noar ti set b2='A0SRJ89IN43O6OGGL0BDJWY7TM4' where id=8; -update noar tt set v0='KZ8H5583AL' where id=9; -update noar ti set v0='KZ8H5583AL' where id=9; -update noar tt set b0='FU7WY7JUN' where id=9; -update noar ti set b0='FU7WY7JUN' where id=9; -update noar tt set v0='IZXZOPQK9MWBTF5' where id=9; -update noar ti set v0='IZXZOPQK9MWBTF5' where id=9; -update noar tt set b1='DR7HY0KTDLO' where id=9; -update noar ti set b1='DR7HY0KTDLO' where id=9; -update noar tt set v0='0I9VUGMMTV' where id=9; -update noar ti set v0='0I9VUGMMTV' where id=9; -update noar tt set b2='MIEU' where id=9; -update noar ti set b2='MIEU' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 blob not null, -b1 longblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='OGF8S4CV8UIBRJK' where id=1; -update noar ti set v0='OGF8S4CV8UIBRJK' where id=1; -update noar tt set b0='T75D7OOZ' where id=1; -update noar ti set b0='T75D7OOZ' where id=1; -update noar tt set v0='0' where id=1; -update noar ti set v0='0' where id=1; -update noar tt set b1='54MVG5ZSZ47TNF1VKZP6PFJY' where id=1; -update noar ti set b1='54MVG5ZSZ47TNF1VKZP6PFJY' where id=1; -update noar tt set v0='LKGMQHR701SPB' where id=1; -update noar ti set v0='LKGMQHR701SPB' where id=1; -update noar tt set b2='UOMNKV4466VEG' where id=1; -update noar ti set b2='UOMNKV4466VEG' where id=1; -update noar tt set v0='4D7XOLA' where id=2; -update noar ti set v0='4D7XOLA' where id=2; -update noar tt set b0='4H3JTB8R7ZXTI9XRH9KIC77I' where id=2; -update noar ti set b0='4H3JTB8R7ZXTI9XRH9KIC77I' where id=2; -update noar tt set v0='QQP9ELND7B1R7FH64GBV6K34' where id=2; -update noar ti set v0='QQP9ELND7B1R7FH64GBV6K34' where id=2; -update noar tt set b1='SU6YJ9QL1R' where id=2; -update noar ti set b1='SU6YJ9QL1R' where id=2; -update noar tt set v0='20LT58RSVJPTNZ9L2QNLT38057' where id=2; -update noar ti set v0='20LT58RSVJPTNZ9L2QNLT38057' where id=2; -update noar tt set b2='KCDW11AHUJU99' where id=2; -update noar ti set b2='KCDW11AHUJU99' where id=2; -update noar tt set v0='B76FR2JXLI90MXGMA6UE0VL4U1Y621MA' where id=3; -update noar ti set v0='B76FR2JXLI90MXGMA6UE0VL4U1Y621MA' where id=3; -update noar tt set b0='7YV1RQ849H' where id=3; -update noar ti set b0='7YV1RQ849H' where id=3; -update noar tt set v0='UI49S' where id=3; -update noar ti set v0='UI49S' where id=3; -update noar tt set b1='YC5QVA2F6T5' where id=3; -update noar ti set b1='YC5QVA2F6T5' where id=3; -update noar tt set v0='NC8C7AX2H4ZAYGBX3JUWUSV3L' where id=3; -update noar ti set v0='NC8C7AX2H4ZAYGBX3JUWUSV3L' where id=3; -update noar tt set b2='J5YO511MXMXB4SRVPW' where id=3; -update noar ti set b2='J5YO511MXMXB4SRVPW' where id=3; -update noar tt set v0='4ZCHSIJ2' where id=4; -update noar ti set v0='4ZCHSIJ2' where id=4; -update noar tt set b0='MD8OP1AW8ZZ3HO1UHB' where id=4; -update noar ti set b0='MD8OP1AW8ZZ3HO1UHB' where id=4; -update noar tt set v0='BKY9CV22I4UCFXJRITOV' where id=4; -update noar ti set v0='BKY9CV22I4UCFXJRITOV' where id=4; -update noar tt set b1='L' where id=4; -update noar ti set b1='L' where id=4; -update noar tt set v0='HBSTXGNYOQY3EVXM63' where id=4; -update noar ti set v0='HBSTXGNYOQY3EVXM63' where id=4; -update noar tt set b2='YUBMWEXZAPSUGY6X12' where id=4; -update noar ti set b2='YUBMWEXZAPSUGY6X12' where id=4; -update noar tt set v0='ZB0D47VRUH5VCAD76HD48TB2AMHI76' where id=5; -update noar ti set v0='ZB0D47VRUH5VCAD76HD48TB2AMHI76' where id=5; -update noar tt set b0='HAPDHQP179B1G5D4H1CYQ' where id=5; -update noar ti set b0='HAPDHQP179B1G5D4H1CYQ' where id=5; -update noar tt set v0='JB8D1I22C178MZ0G0UIM958N3K0G1P1O' where id=5; -update noar ti set v0='JB8D1I22C178MZ0G0UIM958N3K0G1P1O' where id=5; -update noar tt set b1='T' where id=5; -update noar ti set b1='T' where id=5; -update noar tt set v0='6EKFPRM8M9BFVRAW2UG850' where id=5; -update noar ti set v0='6EKFPRM8M9BFVRAW2UG850' where id=5; -update noar tt set b2='XO0RKEEC2194N48B88UV0SHF' where id=5; -update noar ti set b2='XO0RKEEC2194N48B88UV0SHF' where id=5; -update noar tt set v0='TZADOULMPNJ3JHANPBZFH140SXPGE' where id=6; -update noar ti set v0='TZADOULMPNJ3JHANPBZFH140SXPGE' where id=6; -update noar tt set b0='GWA04JMONGKEFW6VAQPXM8CR2XAJ5' where id=6; -update noar ti set b0='GWA04JMONGKEFW6VAQPXM8CR2XAJ5' where id=6; -update noar tt set v0='V777PS2EAODUP2EF7DCUJTS1HJ0IE' where id=6; -update noar ti set v0='V777PS2EAODUP2EF7DCUJTS1HJ0IE' where id=6; -update noar tt set b1='ZD5OA2VP' where id=6; -update noar ti set b1='ZD5OA2VP' where id=6; -update noar tt set v0='7J3IUXJUV9MFO62ZB6B3SNEPJ' where id=6; -update noar ti set v0='7J3IUXJUV9MFO62ZB6B3SNEPJ' where id=6; -update noar tt set b2='1LOSMXMR6BA9LQOJ1CM92DQO' where id=6; -update noar ti set b2='1LOSMXMR6BA9LQOJ1CM92DQO' where id=6; -update noar tt set v0='BUFAD8RDVAR0FO59LTE9DCUSP0WX5' where id=7; -update noar ti set v0='BUFAD8RDVAR0FO59LTE9DCUSP0WX5' where id=7; -update noar tt set b0='ISJCA21RVKMIK7' where id=7; -update noar ti set b0='ISJCA21RVKMIK7' where id=7; -update noar tt set v0='LKX7T6EOL47TSXMLU' where id=7; -update noar ti set v0='LKX7T6EOL47TSXMLU' where id=7; -update noar tt set b1='CNWSS0YLD72AHOXZT3O5LQNU' where id=7; -update noar ti set b1='CNWSS0YLD72AHOXZT3O5LQNU' where id=7; -update noar tt set v0='O5AP3YS' where id=7; -update noar ti set v0='O5AP3YS' where id=7; -update noar tt set b2='6RIZ71MVLAMRKLIF2RB6H' where id=7; -update noar ti set b2='6RIZ71MVLAMRKLIF2RB6H' where id=7; -update noar tt set v0='CFUNXTGHZDYB0G7PCFLEFTXS5N4R8O8V' where id=8; -update noar ti set v0='CFUNXTGHZDYB0G7PCFLEFTXS5N4R8O8V' where id=8; -update noar tt set b0='6HCL' where id=8; -update noar ti set b0='6HCL' where id=8; -update noar tt set v0='NUMG46G4WTUBB3P9HCUHP8GNL8XXG' where id=8; -update noar ti set v0='NUMG46G4WTUBB3P9HCUHP8GNL8XXG' where id=8; -update noar tt set b1='ZPM9N1IV4WTNOS282QCRSF' where id=8; -update noar ti set b1='ZPM9N1IV4WTNOS282QCRSF' where id=8; -update noar tt set v0='5BLXWZSJOT2AKBETM8EW1FS' where id=8; -update noar ti set v0='5BLXWZSJOT2AKBETM8EW1FS' where id=8; -update noar tt set b2='RMHV8S61' where id=8; -update noar ti set b2='RMHV8S61' where id=8; -update noar tt set v0='JH8XGGF60CPEFHLXSCN1MTWK2TMONWN6' where id=9; -update noar ti set v0='JH8XGGF60CPEFHLXSCN1MTWK2TMONWN6' where id=9; -update noar tt set b0='5BXCHY1RZN2NB5ITHP63ZCKRWUZ77K' where id=9; -update noar ti set b0='5BXCHY1RZN2NB5ITHP63ZCKRWUZ77K' where id=9; -update noar tt set v0='0YY1UJT64QAY6CCR1XP5L' where id=9; -update noar ti set v0='0YY1UJT64QAY6CCR1XP5L' where id=9; -update noar tt set b1='K60G2FL9BID4XERZD9' where id=9; -update noar ti set b1='K60G2FL9BID4XERZD9' where id=9; -update noar tt set v0='P2YZQZ5PK4' where id=9; -update noar ti set v0='P2YZQZ5PK4' where id=9; -update noar tt set b2='2R5M9BAC' where id=9; -update noar ti set b2='2R5M9BAC' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 blob null, -b1 longblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='E9X1ZQFL2' where id=1; -update noar ti set v0='E9X1ZQFL2' where id=1; -update noar tt set b0='K13V8XFTH67JPBHZHA1JZ4S70' where id=1; -update noar ti set b0='K13V8XFTH67JPBHZHA1JZ4S70' where id=1; -update noar tt set v0='BC2TSN3ZLQGRNQ89' where id=1; -update noar ti set v0='BC2TSN3ZLQGRNQ89' where id=1; -update noar tt set b1='MV1WVXUZ4' where id=1; -update noar ti set b1='MV1WVXUZ4' where id=1; -update noar tt set v0='8S7SPB0UZ6E7O8J97P1' where id=1; -update noar ti set v0='8S7SPB0UZ6E7O8J97P1' where id=1; -update noar tt set b2='U2B4FY7YHF9B8Z9LETFI3VWPNKI' where id=1; -update noar ti set b2='U2B4FY7YHF9B8Z9LETFI3VWPNKI' where id=1; -update noar tt set v0='8RFOEHPEAE3HKABL49Z' where id=2; -update noar ti set v0='8RFOEHPEAE3HKABL49Z' where id=2; -update noar tt set b0='OZC6BF4U6' where id=2; -update noar ti set b0='OZC6BF4U6' where id=2; -update noar tt set v0='X3' where id=2; -update noar ti set v0='X3' where id=2; -update noar tt set b1='RQ3' where id=2; -update noar ti set b1='RQ3' where id=2; -update noar tt set v0='KAEM91UTZXD' where id=2; -update noar ti set v0='KAEM91UTZXD' where id=2; -update noar tt set b2='I3KX1PRUPRHPC0K8L4YMS4P' where id=2; -update noar ti set b2='I3KX1PRUPRHPC0K8L4YMS4P' where id=2; -update noar tt set v0='XEB7BGPTDDG1QSXC' where id=3; -update noar ti set v0='XEB7BGPTDDG1QSXC' where id=3; -update noar tt set b0='M1D' where id=3; -update noar ti set b0='M1D' where id=3; -update noar tt set v0='SRY2GIS7X8Y' where id=3; -update noar ti set v0='SRY2GIS7X8Y' where id=3; -update noar tt set b1='FLVIO6Q9WGWIV3RSZEXIXMZM8JB3IX' where id=3; -update noar ti set b1='FLVIO6Q9WGWIV3RSZEXIXMZM8JB3IX' where id=3; -update noar tt set v0='7C2PA3SU6W' where id=3; -update noar ti set v0='7C2PA3SU6W' where id=3; -update noar tt set b2='49A3HWOHHXIR2ZWGNAR8B' where id=3; -update noar ti set b2='49A3HWOHHXIR2ZWGNAR8B' where id=3; -update noar tt set v0='8Y0E7HVQD9Y5GBAZ9MC96EQMEUD3EI0P' where id=4; -update noar ti set v0='8Y0E7HVQD9Y5GBAZ9MC96EQMEUD3EI0P' where id=4; -update noar tt set b0='JUDRBMNXN' where id=4; -update noar ti set b0='JUDRBMNXN' where id=4; -update noar tt set v0='91JERZ0R3D6XTIZ7ALYF225X4' where id=4; -update noar ti set v0='91JERZ0R3D6XTIZ7ALYF225X4' where id=4; -update noar tt set b1='T1FOP' where id=4; -update noar ti set b1='T1FOP' where id=4; -update noar tt set v0='ZAU14NLPWR6NZ3JB58UO61Y' where id=4; -update noar ti set v0='ZAU14NLPWR6NZ3JB58UO61Y' where id=4; -update noar tt set b2='YRMD384H78IH85G7ARJOYGB69F5I4' where id=4; -update noar ti set b2='YRMD384H78IH85G7ARJOYGB69F5I4' where id=4; -update noar tt set v0='LAKZ9TGOI88Q81AYJMN3LBJMX0EBG' where id=5; -update noar ti set v0='LAKZ9TGOI88Q81AYJMN3LBJMX0EBG' where id=5; -update noar tt set b0='2WLZ0RW1JUJ' where id=5; -update noar ti set b0='2WLZ0RW1JUJ' where id=5; -update noar tt set v0='AT4FECL92TKPAG6V' where id=5; -update noar ti set v0='AT4FECL92TKPAG6V' where id=5; -update noar tt set b1='Z' where id=5; -update noar ti set b1='Z' where id=5; -update noar tt set v0='T7W76QACTXQ' where id=5; -update noar ti set v0='T7W76QACTXQ' where id=5; -update noar tt set b2='RY46816SDX7FWQO5L4VG' where id=5; -update noar ti set b2='RY46816SDX7FWQO5L4VG' where id=5; -update noar tt set v0='9XSQZ1SDT8EU1G91' where id=6; -update noar ti set v0='9XSQZ1SDT8EU1G91' where id=6; -update noar tt set b0='0QY' where id=6; -update noar ti set b0='0QY' where id=6; -update noar tt set v0='J17FR0PTJ3GKCHFGGSGDJ' where id=6; -update noar ti set v0='J17FR0PTJ3GKCHFGGSGDJ' where id=6; -update noar tt set b1='J4XJJAV6I0ARM4A7FTWKD6LM1RVZRU' where id=6; -update noar ti set b1='J4XJJAV6I0ARM4A7FTWKD6LM1RVZRU' where id=6; -update noar tt set v0='FDWQ8MAM2V3RSHVBK2S7' where id=6; -update noar ti set v0='FDWQ8MAM2V3RSHVBK2S7' where id=6; -update noar tt set b2='VEYC7DH9CERWMKEE6PQLUC8SH6GZE' where id=6; -update noar ti set b2='VEYC7DH9CERWMKEE6PQLUC8SH6GZE' where id=6; -update noar tt set v0='CB431YJL5LGPYE1MWMLKCE3PR27QF8CI' where id=7; -update noar ti set v0='CB431YJL5LGPYE1MWMLKCE3PR27QF8CI' where id=7; -update noar tt set b0='OKDSCH277STM4' where id=7; -update noar ti set b0='OKDSCH277STM4' where id=7; -update noar tt set v0='ZE6AEHLU9EFAZSD' where id=7; -update noar ti set v0='ZE6AEHLU9EFAZSD' where id=7; -update noar tt set b1='D8AOOGBV' where id=7; -update noar ti set b1='D8AOOGBV' where id=7; -update noar tt set v0='ZMJP' where id=7; -update noar ti set v0='ZMJP' where id=7; -update noar tt set b2='C8QY8GALNS8Q7ZL1' where id=7; -update noar ti set b2='C8QY8GALNS8Q7ZL1' where id=7; -update noar tt set v0='ZXEQE9' where id=8; -update noar ti set v0='ZXEQE9' where id=8; -update noar tt set b0='T5OEYUDWJ6D5RVWEIOPY' where id=8; -update noar ti set b0='T5OEYUDWJ6D5RVWEIOPY' where id=8; -update noar tt set v0='BKOYQQBWMXEUV' where id=8; -update noar ti set v0='BKOYQQBWMXEUV' where id=8; -update noar tt set b1='H2' where id=8; -update noar ti set b1='H2' where id=8; -update noar tt set v0='AXHD6459QSE6GS25N' where id=8; -update noar ti set v0='AXHD6459QSE6GS25N' where id=8; -update noar tt set b2='IF21AE5KO8UK' where id=8; -update noar ti set b2='IF21AE5KO8UK' where id=8; -update noar tt set v0='DLF9A7AEMET1SDX9RSCF0ZTDYMU1' where id=9; -update noar ti set v0='DLF9A7AEMET1SDX9RSCF0ZTDYMU1' where id=9; -update noar tt set b0='W' where id=9; -update noar ti set b0='W' where id=9; -update noar tt set v0='JL' where id=9; -update noar ti set v0='JL' where id=9; -update noar tt set b1='1XEQ1KLE6O3QPFV' where id=9; -update noar ti set b1='1XEQ1KLE6O3QPFV' where id=9; -update noar tt set v0='ETWY5VUTTJKFXVVO4' where id=9; -update noar ti set v0='ETWY5VUTTJKFXVVO4' where id=9; -update noar tt set b2='KSSX637' where id=9; -update noar ti set b2='KSSX637' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 blob null, -b1 longblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='EGDA2KDOIQ' where id=1; -update noar ti set v0='EGDA2KDOIQ' where id=1; -update noar tt set b0='V2KCA84AYWGABRL9JGASZ3SW3VIF1' where id=1; -update noar ti set b0='V2KCA84AYWGABRL9JGASZ3SW3VIF1' where id=1; -update noar tt set v0='KX9PPE8F377DTF7O1MT40SVSP7' where id=1; -update noar ti set v0='KX9PPE8F377DTF7O1MT40SVSP7' where id=1; -update noar tt set b1='DCHU2GD0WY7W6427J02Z8B130' where id=1; -update noar ti set b1='DCHU2GD0WY7W6427J02Z8B130' where id=1; -update noar tt set v0='0NRM5JSTS5' where id=1; -update noar ti set v0='0NRM5JSTS5' where id=1; -update noar tt set b2='VA66JSY9BYP43' where id=1; -update noar ti set b2='VA66JSY9BYP43' where id=1; -update noar tt set v0='8NMJ2YMT5QCJX19W6KUSRC1JN1GB6Y1' where id=2; -update noar ti set v0='8NMJ2YMT5QCJX19W6KUSRC1JN1GB6Y1' where id=2; -update noar tt set b0='YMF8DP1G8LVCSWO9JCPV1HOL2YT2M' where id=2; -update noar ti set b0='YMF8DP1G8LVCSWO9JCPV1HOL2YT2M' where id=2; -update noar tt set v0='KOPR6' where id=2; -update noar ti set v0='KOPR6' where id=2; -update noar tt set b1='L0TQQV0JLYK3TLBQF' where id=2; -update noar ti set b1='L0TQQV0JLYK3TLBQF' where id=2; -update noar tt set v0='SBP4498QNZMVROFWL5' where id=2; -update noar ti set v0='SBP4498QNZMVROFWL5' where id=2; -update noar tt set b2='BFVLJGODNP68PZMKX4CLLV4RFI7' where id=2; -update noar ti set b2='BFVLJGODNP68PZMKX4CLLV4RFI7' where id=2; -update noar tt set v0='DOEWDWUR4I0NXLPX04FXL4R0O' where id=3; -update noar ti set v0='DOEWDWUR4I0NXLPX04FXL4R0O' where id=3; -update noar tt set b0='V8ZPN052WMFAKKLRULY3HQOFSIGI' where id=3; -update noar ti set b0='V8ZPN052WMFAKKLRULY3HQOFSIGI' where id=3; -update noar tt set v0='YHTOOUL' where id=3; -update noar ti set v0='YHTOOUL' where id=3; -update noar tt set b1='YLPT9R5H1R5696LA8SQRFM03BY6U6IM' where id=3; -update noar ti set b1='YLPT9R5H1R5696LA8SQRFM03BY6U6IM' where id=3; -update noar tt set v0='4VNUT3D4XRA96' where id=3; -update noar ti set v0='4VNUT3D4XRA96' where id=3; -update noar tt set b2='QEA40Z7SHSHEIYRV' where id=3; -update noar ti set b2='QEA40Z7SHSHEIYRV' where id=3; -update noar tt set v0='CL2ZHJ818MBN' where id=4; -update noar ti set v0='CL2ZHJ818MBN' where id=4; -update noar tt set b0='O' where id=4; -update noar ti set b0='O' where id=4; -update noar tt set v0='3RMZTE70ZWHU' where id=4; -update noar ti set v0='3RMZTE70ZWHU' where id=4; -update noar tt set b1='03FEYLTVYQ4KDX1E5MYUMTOJD0OVO02I' where id=4; -update noar ti set b1='03FEYLTVYQ4KDX1E5MYUMTOJD0OVO02I' where id=4; -update noar tt set v0='EOJFSQ6LW1VK1BEDMLVN3YX8GF6G21GE' where id=4; -update noar ti set v0='EOJFSQ6LW1VK1BEDMLVN3YX8GF6G21GE' where id=4; -update noar tt set b2='KQ9S30UUFLUFQP4R' where id=4; -update noar ti set b2='KQ9S30UUFLUFQP4R' where id=4; -update noar tt set v0='8TI0D' where id=5; -update noar ti set v0='8TI0D' where id=5; -update noar tt set b0='IFK' where id=5; -update noar ti set b0='IFK' where id=5; -update noar tt set v0='E4IPU5EXR1JRYHPUDIMA76UX9GZOV' where id=5; -update noar ti set v0='E4IPU5EXR1JRYHPUDIMA76UX9GZOV' where id=5; -update noar tt set b1='DQVRYY4VYEKRVHNLIWV9MNFJI2L7' where id=5; -update noar ti set b1='DQVRYY4VYEKRVHNLIWV9MNFJI2L7' where id=5; -update noar tt set v0='R3BI37AB7RI52V' where id=5; -update noar ti set v0='R3BI37AB7RI52V' where id=5; -update noar tt set b2='MRGO5UKDJZ2OPSY7YU7KO' where id=5; -update noar ti set b2='MRGO5UKDJZ2OPSY7YU7KO' where id=5; -update noar tt set v0='0J' where id=6; -update noar ti set v0='0J' where id=6; -update noar tt set b0='YINVG' where id=6; -update noar ti set b0='YINVG' where id=6; -update noar tt set v0='QCBSRBO4X9' where id=6; -update noar ti set v0='QCBSRBO4X9' where id=6; -update noar tt set b1='PZSYLPCIHUGURUBCAC4OTS' where id=6; -update noar ti set b1='PZSYLPCIHUGURUBCAC4OTS' where id=6; -update noar tt set v0='OTLMLV51TIZJLTICSAGXIY2' where id=6; -update noar ti set v0='OTLMLV51TIZJLTICSAGXIY2' where id=6; -update noar tt set b2='TZWI30K3CXK5HLYBG' where id=6; -update noar ti set b2='TZWI30K3CXK5HLYBG' where id=6; -update noar tt set v0='CQVGQ4F6DFZ5FQS4BVPUPOO9Q' where id=7; -update noar ti set v0='CQVGQ4F6DFZ5FQS4BVPUPOO9Q' where id=7; -update noar tt set b0='5' where id=7; -update noar ti set b0='5' where id=7; -update noar tt set v0='YFSH71DW4Q5MEWNQVFE2S7P4MU' where id=7; -update noar ti set v0='YFSH71DW4Q5MEWNQVFE2S7P4MU' where id=7; -update noar tt set b1='RID5EBZCYZH7AJVF' where id=7; -update noar ti set b1='RID5EBZCYZH7AJVF' where id=7; -update noar tt set v0='F43' where id=7; -update noar ti set v0='F43' where id=7; -update noar tt set b2='F1TM0VMO' where id=7; -update noar ti set b2='F1TM0VMO' where id=7; -update noar tt set v0='T69KIQ5X9KKJBGDN6NZU4G' where id=8; -update noar ti set v0='T69KIQ5X9KKJBGDN6NZU4G' where id=8; -update noar tt set b0='K86QIKP4SQXL3AK5YTZB74NSD2BKOM9L' where id=8; -update noar ti set b0='K86QIKP4SQXL3AK5YTZB74NSD2BKOM9L' where id=8; -update noar tt set v0='OWLEKG41A2B' where id=8; -update noar ti set v0='OWLEKG41A2B' where id=8; -update noar tt set b1='SHRNZMSUOBIGNVQE2KHB0LUZPS8MGG3' where id=8; -update noar ti set b1='SHRNZMSUOBIGNVQE2KHB0LUZPS8MGG3' where id=8; -update noar tt set v0='5CFHV3OCRL3WAMBPY6JQY6YZKGJ7SR' where id=8; -update noar ti set v0='5CFHV3OCRL3WAMBPY6JQY6YZKGJ7SR' where id=8; -update noar tt set b2='8UB40GWKDGG9GA0SJ08M91' where id=8; -update noar ti set b2='8UB40GWKDGG9GA0SJ08M91' where id=8; -update noar tt set v0='MWPJ2Y1X5JEKXWDQBD3S2O2CERX' where id=9; -update noar ti set v0='MWPJ2Y1X5JEKXWDQBD3S2O2CERX' where id=9; -update noar tt set b0='DPMSNBAWMODY8N0GNGMKMKJ' where id=9; -update noar ti set b0='DPMSNBAWMODY8N0GNGMKMKJ' where id=9; -update noar tt set v0='PTT5DA2T0AQX61FUOTUZRC' where id=9; -update noar ti set v0='PTT5DA2T0AQX61FUOTUZRC' where id=9; -update noar tt set b1='PYT1EZGI5' where id=9; -update noar ti set b1='PYT1EZGI5' where id=9; -update noar tt set v0='QF6NCX49Z3TCAFARJG6HTR25VEOAWB' where id=9; -update noar ti set v0='QF6NCX49Z3TCAFARJG6HTR25VEOAWB' where id=9; -update noar tt set b2='XE5L6NUD9ILXL' where id=9; -update noar ti set b2='XE5L6NUD9ILXL' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 blob not null, -b1 longblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='VWO3A712ZVZBUDH08CF' where id=1; -update noar ti set v0='VWO3A712ZVZBUDH08CF' where id=1; -update noar tt set b0='ZIATHD6HSU3TKLIUK75K8VD6ZO2QWIO' where id=1; -update noar ti set b0='ZIATHD6HSU3TKLIUK75K8VD6ZO2QWIO' where id=1; -update noar tt set v0='KP5UUHUKL69QWLSXBXQ' where id=1; -update noar ti set v0='KP5UUHUKL69QWLSXBXQ' where id=1; -update noar tt set b1='CZL44K6Y8F78X9' where id=1; -update noar ti set b1='CZL44K6Y8F78X9' where id=1; -update noar tt set v0='HDZUXV3R8UYONE4RFJRUMFTZ' where id=1; -update noar ti set v0='HDZUXV3R8UYONE4RFJRUMFTZ' where id=1; -update noar tt set b2='CLC7U' where id=1; -update noar ti set b2='CLC7U' where id=1; -update noar tt set v0='FC' where id=2; -update noar ti set v0='FC' where id=2; -update noar tt set b0='5DHVWRZY4VL12E92V132RO2PE' where id=2; -update noar ti set b0='5DHVWRZY4VL12E92V132RO2PE' where id=2; -update noar tt set v0='14' where id=2; -update noar ti set v0='14' where id=2; -update noar tt set b1='LILAHSEV' where id=2; -update noar ti set b1='LILAHSEV' where id=2; -update noar tt set v0='5H0D' where id=2; -update noar ti set v0='5H0D' where id=2; -update noar tt set b2='T4G4R6YC2037R' where id=2; -update noar ti set b2='T4G4R6YC2037R' where id=2; -update noar tt set v0='Z71HR4ETZM8FKKH7KTKD0V3NRI' where id=3; -update noar ti set v0='Z71HR4ETZM8FKKH7KTKD0V3NRI' where id=3; -update noar tt set b0='G25ZNGIDWQBZR4AY2DVDG3I' where id=3; -update noar ti set b0='G25ZNGIDWQBZR4AY2DVDG3I' where id=3; -update noar tt set v0='YPKR2MTJJJ18G56' where id=3; -update noar ti set v0='YPKR2MTJJJ18G56' where id=3; -update noar tt set b1='0CPGGZA57RCQESQKN0A5WF' where id=3; -update noar ti set b1='0CPGGZA57RCQESQKN0A5WF' where id=3; -update noar tt set v0='UFX3UDFBDDB8Q2TMTX6TIUGJ4KOSIJMS' where id=3; -update noar ti set v0='UFX3UDFBDDB8Q2TMTX6TIUGJ4KOSIJMS' where id=3; -update noar tt set b2='GCQ922U90MSND5JYGRYXB9LO' where id=3; -update noar ti set b2='GCQ922U90MSND5JYGRYXB9LO' where id=3; -update noar tt set v0='ZJ' where id=4; -update noar ti set v0='ZJ' where id=4; -update noar tt set b0='M941P3L1H' where id=4; -update noar ti set b0='M941P3L1H' where id=4; -update noar tt set v0='3XIQSMAP12VZEHK04TN2MGRGOX0L12' where id=4; -update noar ti set v0='3XIQSMAP12VZEHK04TN2MGRGOX0L12' where id=4; -update noar tt set b1='7EKKE2MKYBMGYZB' where id=4; -update noar ti set b1='7EKKE2MKYBMGYZB' where id=4; -update noar tt set v0='VCUMP6EC29MLWWAY7C5IC' where id=4; -update noar ti set v0='VCUMP6EC29MLWWAY7C5IC' where id=4; -update noar tt set b2='UNY49XCPVB7MHEUEP9N' where id=4; -update noar ti set b2='UNY49XCPVB7MHEUEP9N' where id=4; -update noar tt set v0='CP0T9CXVZ8YBSKC70JDWUOX7I8BZV' where id=5; -update noar ti set v0='CP0T9CXVZ8YBSKC70JDWUOX7I8BZV' where id=5; -update noar tt set b0='F6MQI' where id=5; -update noar ti set b0='F6MQI' where id=5; -update noar tt set v0='LS3TOVNHO7YJCQ8UCKKXH2DO60G6KHY' where id=5; -update noar ti set v0='LS3TOVNHO7YJCQ8UCKKXH2DO60G6KHY' where id=5; -update noar tt set b1='F8QFN99W5AUGQKF4NOPQLQHH0' where id=5; -update noar ti set b1='F8QFN99W5AUGQKF4NOPQLQHH0' where id=5; -update noar tt set v0='9' where id=5; -update noar ti set v0='9' where id=5; -update noar tt set b2='JOS43IZ' where id=5; -update noar ti set b2='JOS43IZ' where id=5; -update noar tt set v0='ZYK7HW' where id=6; -update noar ti set v0='ZYK7HW' where id=6; -update noar tt set b0='7TO4Q7UYVT9JCJQM98OXVUCUJ3DRGJS' where id=6; -update noar ti set b0='7TO4Q7UYVT9JCJQM98OXVUCUJ3DRGJS' where id=6; -update noar tt set v0='DJFP76V21' where id=6; -update noar ti set v0='DJFP76V21' where id=6; -update noar tt set b1='0D65C9XPN1UEYLT5P1VAYDYA50Z4DM' where id=6; -update noar ti set b1='0D65C9XPN1UEYLT5P1VAYDYA50Z4DM' where id=6; -update noar tt set v0='JXBTOQCXPF2FSKMVQAGW' where id=6; -update noar ti set v0='JXBTOQCXPF2FSKMVQAGW' where id=6; -update noar tt set b2='MJVY8F7Z9K' where id=6; -update noar ti set b2='MJVY8F7Z9K' where id=6; -update noar tt set v0='V1DYXM4A0R1RWV7KI4ZWHTLQ' where id=7; -update noar ti set v0='V1DYXM4A0R1RWV7KI4ZWHTLQ' where id=7; -update noar tt set b0='RKD' where id=7; -update noar ti set b0='RKD' where id=7; -update noar tt set v0='HFVCMUV8WK69OB' where id=7; -update noar ti set v0='HFVCMUV8WK69OB' where id=7; -update noar tt set b1='2Z7MMK4W42T6SF8KYMJHZAAM52DVPA' where id=7; -update noar ti set b1='2Z7MMK4W42T6SF8KYMJHZAAM52DVPA' where id=7; -update noar tt set v0='5ZT71ABYR2S2B8MFZMLSY7ECS83Q3SSI' where id=7; -update noar ti set v0='5ZT71ABYR2S2B8MFZMLSY7ECS83Q3SSI' where id=7; -update noar tt set b2='PB9ZWRPZQFJJ' where id=7; -update noar ti set b2='PB9ZWRPZQFJJ' where id=7; -update noar tt set v0='WJY1Q4AX5JOI4KZZFC92WFJ' where id=8; -update noar ti set v0='WJY1Q4AX5JOI4KZZFC92WFJ' where id=8; -update noar tt set b0='QP6FVY1W2B6OMK0CMB9RC76M66BKO7' where id=8; -update noar ti set b0='QP6FVY1W2B6OMK0CMB9RC76M66BKO7' where id=8; -update noar tt set v0='TAZQ958I1WQTXYVW' where id=8; -update noar ti set v0='TAZQ958I1WQTXYVW' where id=8; -update noar tt set b1='8TXO2S49383RAXPFC0MYG' where id=8; -update noar ti set b1='8TXO2S49383RAXPFC0MYG' where id=8; -update noar tt set v0='A9FC5GF4N9KYENFXNPNJBO7SGAP1RUE' where id=8; -update noar ti set v0='A9FC5GF4N9KYENFXNPNJBO7SGAP1RUE' where id=8; -update noar tt set b2='O42' where id=8; -update noar ti set b2='O42' where id=8; -update noar tt set v0='YP9SI2' where id=9; -update noar ti set v0='YP9SI2' where id=9; -update noar tt set b0='DJXRKXCTUW83AHPOBVUEF' where id=9; -update noar ti set b0='DJXRKXCTUW83AHPOBVUEF' where id=9; -update noar tt set v0='0HVNY2PVXWUENCOLF5RE0SVO2XZ7RSVU' where id=9; -update noar ti set v0='0HVNY2PVXWUENCOLF5RE0SVO2XZ7RSVU' where id=9; -update noar tt set b1='XW264A8VRDLQH52TY0I3YA96KHDUIKR' where id=9; -update noar ti set b1='XW264A8VRDLQH52TY0I3YA96KHDUIKR' where id=9; -update noar tt set v0='QS7E25L9FVQJCKN17M3QX' where id=9; -update noar ti set v0='QS7E25L9FVQJCKN17M3QX' where id=9; -update noar tt set b2='1RGRLE46EK2E1I95QL3T9GY02JWQDK' where id=9; -update noar ti set b2='1RGRLE46EK2E1I95QL3T9GY02JWQDK' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 blob not null, -b1 longblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='3E5YX5Z5773UPSE2' where id=1; -update noar ti set v0='3E5YX5Z5773UPSE2' where id=1; -update noar tt set b0='KDCK' where id=1; -update noar ti set b0='KDCK' where id=1; -update noar tt set v0='SD6FJW' where id=1; -update noar ti set v0='SD6FJW' where id=1; -update noar tt set b1='F1ATBZF2P7E' where id=1; -update noar ti set b1='F1ATBZF2P7E' where id=1; -update noar tt set v0='Q5NLU1KY0MQBT78MGBLDX0FZZMTST' where id=1; -update noar ti set v0='Q5NLU1KY0MQBT78MGBLDX0FZZMTST' where id=1; -update noar tt set b2='19KGDFSPVFF7DZRDMDIWE035GQNDYQ' where id=1; -update noar ti set b2='19KGDFSPVFF7DZRDMDIWE035GQNDYQ' where id=1; -update noar tt set v0='VDQX8XDJEH' where id=2; -update noar ti set v0='VDQX8XDJEH' where id=2; -update noar tt set b0='T1WQXDT80RCFVTA3TKOB3' where id=2; -update noar ti set b0='T1WQXDT80RCFVTA3TKOB3' where id=2; -update noar tt set v0='JUO2' where id=2; -update noar ti set v0='JUO2' where id=2; -update noar tt set b1='KEAA53ZM' where id=2; -update noar ti set b1='KEAA53ZM' where id=2; -update noar tt set v0='HT132K73J99A7Q8V1M8C' where id=2; -update noar ti set v0='HT132K73J99A7Q8V1M8C' where id=2; -update noar tt set b2='Z1U9DF3RUL' where id=2; -update noar ti set b2='Z1U9DF3RUL' where id=2; -update noar tt set v0='AZD58D4PA4OR4' where id=3; -update noar ti set v0='AZD58D4PA4OR4' where id=3; -update noar tt set b0='V0MOA67KZF5' where id=3; -update noar ti set b0='V0MOA67KZF5' where id=3; -update noar tt set v0='VKL2WW1TGML6U3N' where id=3; -update noar ti set v0='VKL2WW1TGML6U3N' where id=3; -update noar tt set b1='ZTEFUWY8F4HUKG6FRBAX8' where id=3; -update noar ti set b1='ZTEFUWY8F4HUKG6FRBAX8' where id=3; -update noar tt set v0='PYDIIRM2YJ0H36GH7J8RGOOKCSXGK' where id=3; -update noar ti set v0='PYDIIRM2YJ0H36GH7J8RGOOKCSXGK' where id=3; -update noar tt set b2='5Z3RKX9OFQFDSHSRO8' where id=3; -update noar ti set b2='5Z3RKX9OFQFDSHSRO8' where id=3; -update noar tt set v0='PCMJD' where id=4; -update noar ti set v0='PCMJD' where id=4; -update noar tt set b0='NYBZ' where id=4; -update noar ti set b0='NYBZ' where id=4; -update noar tt set v0='HEMA2IXZH7U' where id=4; -update noar ti set v0='HEMA2IXZH7U' where id=4; -update noar tt set b1='ZWNGNO65U70CLAIMSQZTH' where id=4; -update noar ti set b1='ZWNGNO65U70CLAIMSQZTH' where id=4; -update noar tt set v0='LTBTK34ZMP8EC8NGJN2U8S7MOF' where id=4; -update noar ti set v0='LTBTK34ZMP8EC8NGJN2U8S7MOF' where id=4; -update noar tt set b2='Z60LZ30G2RAQ35QC4XSUFH8A' where id=4; -update noar ti set b2='Z60LZ30G2RAQ35QC4XSUFH8A' where id=4; -update noar tt set v0='6NNN2UR5TOY2Y13X9LPR' where id=5; -update noar ti set v0='6NNN2UR5TOY2Y13X9LPR' where id=5; -update noar tt set b0='34UZRLX' where id=5; -update noar ti set b0='34UZRLX' where id=5; -update noar tt set v0='Y81CMO1FJ8YHP' where id=5; -update noar ti set v0='Y81CMO1FJ8YHP' where id=5; -update noar tt set b1='DG95LTJ2R5OLRMKW51V1OAY4QF2EDKE' where id=5; -update noar ti set b1='DG95LTJ2R5OLRMKW51V1OAY4QF2EDKE' where id=5; -update noar tt set v0='WE' where id=5; -update noar ti set v0='WE' where id=5; -update noar tt set b2='IKY1LND0' where id=5; -update noar ti set b2='IKY1LND0' where id=5; -update noar tt set v0='BTBM37AYQ5HJZ0P1' where id=6; -update noar ti set v0='BTBM37AYQ5HJZ0P1' where id=6; -update noar tt set b0='RZ7IXYJ8LQ5PJ5FPZK3DKA2' where id=6; -update noar ti set b0='RZ7IXYJ8LQ5PJ5FPZK3DKA2' where id=6; -update noar tt set v0='2DE80SDS4TST8' where id=6; -update noar ti set v0='2DE80SDS4TST8' where id=6; -update noar tt set b1='GF' where id=6; -update noar ti set b1='GF' where id=6; -update noar tt set v0='2M69PA5W7V' where id=6; -update noar ti set v0='2M69PA5W7V' where id=6; -update noar tt set b2='SWJOGR2AKBSA' where id=6; -update noar ti set b2='SWJOGR2AKBSA' where id=6; -update noar tt set v0='5ASHPRGS1G88TB2LTMYR' where id=7; -update noar ti set v0='5ASHPRGS1G88TB2LTMYR' where id=7; -update noar tt set b0='O' where id=7; -update noar ti set b0='O' where id=7; -update noar tt set v0='93WKA537DAWGUP4I3A1C9IVMLJJOXT' where id=7; -update noar ti set v0='93WKA537DAWGUP4I3A1C9IVMLJJOXT' where id=7; -update noar tt set b1='HR4H1KFC6R59JS8R0905EH' where id=7; -update noar ti set b1='HR4H1KFC6R59JS8R0905EH' where id=7; -update noar tt set v0='IPPWN2G38QGFWYD9U1O2ZQDS0DG8E' where id=7; -update noar ti set v0='IPPWN2G38QGFWYD9U1O2ZQDS0DG8E' where id=7; -update noar tt set b2='WG2A3' where id=7; -update noar ti set b2='WG2A3' where id=7; -update noar tt set v0='MC2Z6ZTPMYQNX5HV' where id=8; -update noar ti set v0='MC2Z6ZTPMYQNX5HV' where id=8; -update noar tt set b0='ZAXGR' where id=8; -update noar ti set b0='ZAXGR' where id=8; -update noar tt set v0='X4KXXXSDZZWD' where id=8; -update noar ti set v0='X4KXXXSDZZWD' where id=8; -update noar tt set b1='NLH77745U3KLMUG6FN7KNDAUKSN3Y' where id=8; -update noar ti set b1='NLH77745U3KLMUG6FN7KNDAUKSN3Y' where id=8; -update noar tt set v0='87G679F9P' where id=8; -update noar ti set v0='87G679F9P' where id=8; -update noar tt set b2='P2A' where id=8; -update noar ti set b2='P2A' where id=8; -update noar tt set v0='GTQI549SI' where id=9; -update noar ti set v0='GTQI549SI' where id=9; -update noar tt set b0='SMYM4HK1WUSCFXXUW0YKKYD8SBDDIT6P' where id=9; -update noar ti set b0='SMYM4HK1WUSCFXXUW0YKKYD8SBDDIT6P' where id=9; -update noar tt set v0='V2E1VUGQ7OQ1RWCNKE8A' where id=9; -update noar ti set v0='V2E1VUGQ7OQ1RWCNKE8A' where id=9; -update noar tt set b1='F83DXDEXBSQXI272ZT2J6D1GWJW' where id=9; -update noar ti set b1='F83DXDEXBSQXI272ZT2J6D1GWJW' where id=9; -update noar tt set v0='KMGBS8LL' where id=9; -update noar ti set v0='KMGBS8LL' where id=9; -update noar tt set b2='3XOBIJIR8Q4JUCCC4WKKS' where id=9; -update noar ti set b2='3XOBIJIR8Q4JUCCC4WKKS' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 mediumblob null, -b1 tinyblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='M3HMHEMY1I' where id=1; -update noar ti set v0='M3HMHEMY1I' where id=1; -update noar tt set b0='4OKEO80D4JQV18' where id=1; -update noar ti set b0='4OKEO80D4JQV18' where id=1; -update noar tt set v0='UY' where id=1; -update noar ti set v0='UY' where id=1; -update noar tt set b1='V1GEEKHM' where id=1; -update noar ti set b1='V1GEEKHM' where id=1; -update noar tt set v0='WYNIBVMHCZZ' where id=1; -update noar ti set v0='WYNIBVMHCZZ' where id=1; -update noar tt set b2='8FI09VBHFPZAIFSZO4A' where id=1; -update noar ti set b2='8FI09VBHFPZAIFSZO4A' where id=1; -update noar tt set v0='2UP2XT816OGCKGBLFTZJ5A93TQ3VVWE' where id=2; -update noar ti set v0='2UP2XT816OGCKGBLFTZJ5A93TQ3VVWE' where id=2; -update noar tt set b0='SRPWQ7PGD6ZJ757GQEM5' where id=2; -update noar ti set b0='SRPWQ7PGD6ZJ757GQEM5' where id=2; -update noar tt set v0='WNIT7ZDSPO4M48T43LX' where id=2; -update noar ti set v0='WNIT7ZDSPO4M48T43LX' where id=2; -update noar tt set b1='LQCXLQDY7SUDG0MLB8DVDSL14YY3DBWB' where id=2; -update noar ti set b1='LQCXLQDY7SUDG0MLB8DVDSL14YY3DBWB' where id=2; -update noar tt set v0='L2BDMY0P0FFPBQYPS8' where id=2; -update noar ti set v0='L2BDMY0P0FFPBQYPS8' where id=2; -update noar tt set b2='BDZ7S1DVCHEDVN8TNPU5A' where id=2; -update noar ti set b2='BDZ7S1DVCHEDVN8TNPU5A' where id=2; -update noar tt set v0='32Q2U77VPEPJXRKK9TUFV66SCLBIRSO' where id=3; -update noar ti set v0='32Q2U77VPEPJXRKK9TUFV66SCLBIRSO' where id=3; -update noar tt set b0='0C4OJ3SR37Z6JW23QVGECT9AMZGODF3K' where id=3; -update noar ti set b0='0C4OJ3SR37Z6JW23QVGECT9AMZGODF3K' where id=3; -update noar tt set v0='F354VCIO6IFKAZ' where id=3; -update noar ti set v0='F354VCIO6IFKAZ' where id=3; -update noar tt set b1='8ENNVRR' where id=3; -update noar ti set b1='8ENNVRR' where id=3; -update noar tt set v0='1NU7MK0OXPIXA44DFYZPS6MF' where id=3; -update noar ti set v0='1NU7MK0OXPIXA44DFYZPS6MF' where id=3; -update noar tt set b2='0V81MMPL92410' where id=3; -update noar ti set b2='0V81MMPL92410' where id=3; -update noar tt set v0='R0J' where id=4; -update noar ti set v0='R0J' where id=4; -update noar tt set b0='Z8Z41S9P4502PX7E' where id=4; -update noar ti set b0='Z8Z41S9P4502PX7E' where id=4; -update noar tt set v0='C9C9I4SMMHNL50QTB0M73QRZ' where id=4; -update noar ti set v0='C9C9I4SMMHNL50QTB0M73QRZ' where id=4; -update noar tt set b1='0FP2V71YFMH0' where id=4; -update noar ti set b1='0FP2V71YFMH0' where id=4; -update noar tt set v0='CYB6CIV' where id=4; -update noar ti set v0='CYB6CIV' where id=4; -update noar tt set b2='T2JSX33MB' where id=4; -update noar ti set b2='T2JSX33MB' where id=4; -update noar tt set v0='I' where id=5; -update noar ti set v0='I' where id=5; -update noar tt set b0='PDMQ2RC55R182H7UO6PQ8TS03948O5J0' where id=5; -update noar ti set b0='PDMQ2RC55R182H7UO6PQ8TS03948O5J0' where id=5; -update noar tt set v0='970RHROEK5KJF' where id=5; -update noar ti set v0='970RHROEK5KJF' where id=5; -update noar tt set b1='9BMJ57Y47X2586P89C4AJZ8BADB7X9' where id=5; -update noar ti set b1='9BMJ57Y47X2586P89C4AJZ8BADB7X9' where id=5; -update noar tt set v0='0N5' where id=5; -update noar ti set v0='0N5' where id=5; -update noar tt set b2='U1SQIBM1HDNO5OP3HV7EZ1X' where id=5; -update noar ti set b2='U1SQIBM1HDNO5OP3HV7EZ1X' where id=5; -update noar tt set v0='5EGLM1FM0P8AJOZBK64E64GM67VLAA3P' where id=6; -update noar ti set v0='5EGLM1FM0P8AJOZBK64E64GM67VLAA3P' where id=6; -update noar tt set b0='MQ9GSG9WZL72DGFQL8NHNQZY60GQRJ4H' where id=6; -update noar ti set b0='MQ9GSG9WZL72DGFQL8NHNQZY60GQRJ4H' where id=6; -update noar tt set v0='TM2WS0TBFNTU' where id=6; -update noar ti set v0='TM2WS0TBFNTU' where id=6; -update noar tt set b1='WI0EX1IVIFFMWI' where id=6; -update noar ti set b1='WI0EX1IVIFFMWI' where id=6; -update noar tt set v0='ER4ZL2PXZH8WUUQI' where id=6; -update noar ti set v0='ER4ZL2PXZH8WUUQI' where id=6; -update noar tt set b2='CVA6QJ4YPL198U83P2J1MB7CVG' where id=6; -update noar ti set b2='CVA6QJ4YPL198U83P2J1MB7CVG' where id=6; -update noar tt set v0='6V8O2WN16AQUU' where id=7; -update noar ti set v0='6V8O2WN16AQUU' where id=7; -update noar tt set b0='MACEL4FL9JT7O84X' where id=7; -update noar ti set b0='MACEL4FL9JT7O84X' where id=7; -update noar tt set v0='5TJFLBBGYAPSDOCL92QDXZAGZ9' where id=7; -update noar ti set v0='5TJFLBBGYAPSDOCL92QDXZAGZ9' where id=7; -update noar tt set b1='XTZHPZC2O88U' where id=7; -update noar ti set b1='XTZHPZC2O88U' where id=7; -update noar tt set v0='3PIPL8GQSZR2391A0049JF' where id=7; -update noar ti set v0='3PIPL8GQSZR2391A0049JF' where id=7; -update noar tt set b2='BMBYZL7TZAND2T' where id=7; -update noar ti set b2='BMBYZL7TZAND2T' where id=7; -update noar tt set v0='KXXDMTFMHZIOXKEJNX8YAB8CBJQNSQ3F' where id=8; -update noar ti set v0='KXXDMTFMHZIOXKEJNX8YAB8CBJQNSQ3F' where id=8; -update noar tt set b0='4OEF2LTQFCFCC0G4V8BEI9R78XUZ41' where id=8; -update noar ti set b0='4OEF2LTQFCFCC0G4V8BEI9R78XUZ41' where id=8; -update noar tt set v0='VEVDIQ4HZACMU4HAE9' where id=8; -update noar ti set v0='VEVDIQ4HZACMU4HAE9' where id=8; -update noar tt set b1='PW38656' where id=8; -update noar ti set b1='PW38656' where id=8; -update noar tt set v0='KYI9F' where id=8; -update noar ti set v0='KYI9F' where id=8; -update noar tt set b2='008UXBXNF' where id=8; -update noar ti set b2='008UXBXNF' where id=8; -update noar tt set v0='NL7K2R' where id=9; -update noar ti set v0='NL7K2R' where id=9; -update noar tt set b0='KJK8UOJM60NE9VG7AZR9N3YHUGUJNPE' where id=9; -update noar ti set b0='KJK8UOJM60NE9VG7AZR9N3YHUGUJNPE' where id=9; -update noar tt set v0='49AGM3MFSWZ' where id=9; -update noar ti set v0='49AGM3MFSWZ' where id=9; -update noar tt set b1='WXU6YVQ986L' where id=9; -update noar ti set b1='WXU6YVQ986L' where id=9; -update noar tt set v0='0OP0GYN85D2GFW705BEM1LY5F8Y3616M' where id=9; -update noar ti set v0='0OP0GYN85D2GFW705BEM1LY5F8Y3616M' where id=9; -update noar tt set b2='LV8NJ1DJPOT3BWZ9II2VWVT57ZZH' where id=9; -update noar ti set b2='LV8NJ1DJPOT3BWZ9II2VWVT57ZZH' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 mediumblob null, -b1 tinyblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='NBLHVNIGW6N4UTIJQ' where id=1; -update noar ti set v0='NBLHVNIGW6N4UTIJQ' where id=1; -update noar tt set b0='450UIBJ6WIFU2QEZ6MC4B12DZE2FG4DA' where id=1; -update noar ti set b0='450UIBJ6WIFU2QEZ6MC4B12DZE2FG4DA' where id=1; -update noar tt set v0='QCABKO1JS4TCO6X1ZK3M23' where id=1; -update noar ti set v0='QCABKO1JS4TCO6X1ZK3M23' where id=1; -update noar tt set b1='INE8V66HLQ5U8QOYHGSY90KFV' where id=1; -update noar ti set b1='INE8V66HLQ5U8QOYHGSY90KFV' where id=1; -update noar tt set v0='N7' where id=1; -update noar ti set v0='N7' where id=1; -update noar tt set b2='5LTMITIDLTLTI8P83K' where id=1; -update noar ti set b2='5LTMITIDLTLTI8P83K' where id=1; -update noar tt set v0='8XXQ50ATQPK985Y3XISXQ' where id=2; -update noar ti set v0='8XXQ50ATQPK985Y3XISXQ' where id=2; -update noar tt set b0='W0BZFZQNJFD0CGGY4HPRG5XQMWW' where id=2; -update noar ti set b0='W0BZFZQNJFD0CGGY4HPRG5XQMWW' where id=2; -update noar tt set v0='8TOPBS934O4UOVHCXK1NZDELDC' where id=2; -update noar ti set v0='8TOPBS934O4UOVHCXK1NZDELDC' where id=2; -update noar tt set b1='C6GKG8LYBVEXU4' where id=2; -update noar ti set b1='C6GKG8LYBVEXU4' where id=2; -update noar tt set v0='AQDNY' where id=2; -update noar ti set v0='AQDNY' where id=2; -update noar tt set b2='Q4QS1EQ9UFZNGCGBP5K277Q' where id=2; -update noar ti set b2='Q4QS1EQ9UFZNGCGBP5K277Q' where id=2; -update noar tt set v0='6942JGLD92507Z97DZWARCRI61IFQZ2' where id=3; -update noar ti set v0='6942JGLD92507Z97DZWARCRI61IFQZ2' where id=3; -update noar tt set b0='2T6IT7V4DV5T7Z3R5BUQ90VL' where id=3; -update noar ti set b0='2T6IT7V4DV5T7Z3R5BUQ90VL' where id=3; -update noar tt set v0='7NO' where id=3; -update noar ti set v0='7NO' where id=3; -update noar tt set b1='VNVNQQ7TEA8LLG28WYF7J' where id=3; -update noar ti set b1='VNVNQQ7TEA8LLG28WYF7J' where id=3; -update noar tt set v0='H7JWZSL3HZL6TX826Y' where id=3; -update noar ti set v0='H7JWZSL3HZL6TX826Y' where id=3; -update noar tt set b2='TD7G6S1GTVE9TNAH1JY90ZPZE1' where id=3; -update noar ti set b2='TD7G6S1GTVE9TNAH1JY90ZPZE1' where id=3; -update noar tt set v0='7LWAIUZVMFP8RWUJFMKNIKE' where id=4; -update noar ti set v0='7LWAIUZVMFP8RWUJFMKNIKE' where id=4; -update noar tt set b0='73' where id=4; -update noar ti set b0='73' where id=4; -update noar tt set v0='9X0H' where id=4; -update noar ti set v0='9X0H' where id=4; -update noar tt set b1='F7JVZK' where id=4; -update noar ti set b1='F7JVZK' where id=4; -update noar tt set v0='HKG' where id=4; -update noar ti set v0='HKG' where id=4; -update noar tt set b2='1M6JGTNMZIHJAXAB1PQY1WRCDJ9B' where id=4; -update noar ti set b2='1M6JGTNMZIHJAXAB1PQY1WRCDJ9B' where id=4; -update noar tt set v0='W951DR4G' where id=5; -update noar ti set v0='W951DR4G' where id=5; -update noar tt set b0='I44TCJ' where id=5; -update noar ti set b0='I44TCJ' where id=5; -update noar tt set v0='EOVZZLQD' where id=5; -update noar ti set v0='EOVZZLQD' where id=5; -update noar tt set b1='3DI4TFPU6V4G1DXVFWTWLZ6' where id=5; -update noar ti set b1='3DI4TFPU6V4G1DXVFWTWLZ6' where id=5; -update noar tt set v0='GDRI2HPD6W9WRVVMZSB2R09NPYY26EPA' where id=5; -update noar ti set v0='GDRI2HPD6W9WRVVMZSB2R09NPYY26EPA' where id=5; -update noar tt set b2='9DIA049U95XTK3R45PC1OY8Q3PA' where id=5; -update noar ti set b2='9DIA049U95XTK3R45PC1OY8Q3PA' where id=5; -update noar tt set v0='AOB1' where id=6; -update noar ti set v0='AOB1' where id=6; -update noar tt set b0='JDQIHQU5GUB9E1R24DX' where id=6; -update noar ti set b0='JDQIHQU5GUB9E1R24DX' where id=6; -update noar tt set v0='HZZLE76Q4ZI143K' where id=6; -update noar ti set v0='HZZLE76Q4ZI143K' where id=6; -update noar tt set b1='3PSUWS0M4CK8T' where id=6; -update noar ti set b1='3PSUWS0M4CK8T' where id=6; -update noar tt set v0='DN87K9PUPZVQPZH9TBE591' where id=6; -update noar ti set v0='DN87K9PUPZVQPZH9TBE591' where id=6; -update noar tt set b2='G' where id=6; -update noar ti set b2='G' where id=6; -update noar tt set v0='U4977UVH0OHU1GUZ62BOEW2JCCY2' where id=7; -update noar ti set v0='U4977UVH0OHU1GUZ62BOEW2JCCY2' where id=7; -update noar tt set b0='KLWEG7W2MYVWILUSWL8MS98' where id=7; -update noar ti set b0='KLWEG7W2MYVWILUSWL8MS98' where id=7; -update noar tt set v0='WX00E8V4M3O' where id=7; -update noar ti set v0='WX00E8V4M3O' where id=7; -update noar tt set b1='U2R4F' where id=7; -update noar ti set b1='U2R4F' where id=7; -update noar tt set v0='YRU4' where id=7; -update noar ti set v0='YRU4' where id=7; -update noar tt set b2='JRRJE957BKKJ7Y3PKVSR7UJ3CH3' where id=7; -update noar ti set b2='JRRJE957BKKJ7Y3PKVSR7UJ3CH3' where id=7; -update noar tt set v0='SGVES5PU2B03T0ZX9NA44Z4' where id=8; -update noar ti set v0='SGVES5PU2B03T0ZX9NA44Z4' where id=8; -update noar tt set b0='MY46YEN04YHA1RU3LLDCUKC6Y80NIJ71' where id=8; -update noar ti set b0='MY46YEN04YHA1RU3LLDCUKC6Y80NIJ71' where id=8; -update noar tt set v0='77GGW17L' where id=8; -update noar ti set v0='77GGW17L' where id=8; -update noar tt set b1='UA' where id=8; -update noar ti set b1='UA' where id=8; -update noar tt set v0='DHVARYXL18D2Q3CATMLCAJDQVTNMW6Z' where id=8; -update noar ti set v0='DHVARYXL18D2Q3CATMLCAJDQVTNMW6Z' where id=8; -update noar tt set b2='YUP21X5NKNA9SFQF29NTX9' where id=8; -update noar ti set b2='YUP21X5NKNA9SFQF29NTX9' where id=8; -update noar tt set v0='TAXEB23WQFJC1TQDU06AHA9J' where id=9; -update noar ti set v0='TAXEB23WQFJC1TQDU06AHA9J' where id=9; -update noar tt set b0='YL' where id=9; -update noar ti set b0='YL' where id=9; -update noar tt set v0='6S' where id=9; -update noar ti set v0='6S' where id=9; -update noar tt set b1='32Q1BUX5NBCSW7XS30V' where id=9; -update noar ti set b1='32Q1BUX5NBCSW7XS30V' where id=9; -update noar tt set v0='JYGGHPVLI9682HQQ0VVA831H03F8O' where id=9; -update noar ti set v0='JYGGHPVLI9682HQQ0VVA831H03F8O' where id=9; -update noar tt set b2='RARWFDHMRV947XD' where id=9; -update noar ti set b2='RARWFDHMRV947XD' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 mediumblob not null, -b1 tinyblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='ZK9XLA2IEZ1WJIHM57VUXR' where id=1; -update noar ti set v0='ZK9XLA2IEZ1WJIHM57VUXR' where id=1; -update noar tt set b0='W3SSTL2559S0Y7UIK' where id=1; -update noar ti set b0='W3SSTL2559S0Y7UIK' where id=1; -update noar tt set v0='6YZ' where id=1; -update noar ti set v0='6YZ' where id=1; -update noar tt set b1='GTB9CE4QM' where id=1; -update noar ti set b1='GTB9CE4QM' where id=1; -update noar tt set v0='PW59UHVDG69ZERC1' where id=1; -update noar ti set v0='PW59UHVDG69ZERC1' where id=1; -update noar tt set b2='QNA3FIZJ3BLHIVZPVLBCFREGD' where id=1; -update noar ti set b2='QNA3FIZJ3BLHIVZPVLBCFREGD' where id=1; -update noar tt set v0='DACACE21ZZQM0BNA00F2M8ALM8L1' where id=2; -update noar ti set v0='DACACE21ZZQM0BNA00F2M8ALM8L1' where id=2; -update noar tt set b0='BQYSACORFXSLTON' where id=2; -update noar ti set b0='BQYSACORFXSLTON' where id=2; -update noar tt set v0='8UDD148VIGOM98I9X61LNS1TS3UCXEZ' where id=2; -update noar ti set v0='8UDD148VIGOM98I9X61LNS1TS3UCXEZ' where id=2; -update noar tt set b1='4UPQB8Y862NLMM2299O' where id=2; -update noar ti set b1='4UPQB8Y862NLMM2299O' where id=2; -update noar tt set v0='WR' where id=2; -update noar ti set v0='WR' where id=2; -update noar tt set b2='AKWMDQO0A9QQ5H4' where id=2; -update noar ti set b2='AKWMDQO0A9QQ5H4' where id=2; -update noar tt set v0='GZS4PDI' where id=3; -update noar ti set v0='GZS4PDI' where id=3; -update noar tt set b0='DHCH6W9284Z3RNLP4' where id=3; -update noar ti set b0='DHCH6W9284Z3RNLP4' where id=3; -update noar tt set v0='F4APV0Y2PX7XO6JJS2HK' where id=3; -update noar ti set v0='F4APV0Y2PX7XO6JJS2HK' where id=3; -update noar tt set b1='EL3UA5IDIWH' where id=3; -update noar ti set b1='EL3UA5IDIWH' where id=3; -update noar tt set v0='MWSLQBF8FXB60B3CO' where id=3; -update noar ti set v0='MWSLQBF8FXB60B3CO' where id=3; -update noar tt set b2='LJJ8GPQ8TCG4DAAI538IBJRVPUMDUNB' where id=3; -update noar ti set b2='LJJ8GPQ8TCG4DAAI538IBJRVPUMDUNB' where id=3; -update noar tt set v0='CHT0GEUF5DO7' where id=4; -update noar ti set v0='CHT0GEUF5DO7' where id=4; -update noar tt set b0='RYVM6' where id=4; -update noar ti set b0='RYVM6' where id=4; -update noar tt set v0='P9PBLR5X77X9U0ILLH0EWNDQE1K' where id=4; -update noar ti set v0='P9PBLR5X77X9U0ILLH0EWNDQE1K' where id=4; -update noar tt set b1='Y37S5R5IKY3J2B998AAHWVAWAHFOY2G' where id=4; -update noar ti set b1='Y37S5R5IKY3J2B998AAHWVAWAHFOY2G' where id=4; -update noar tt set v0='QV6Q41CLJJ8TC555HTCSEDAZ5IAO' where id=4; -update noar ti set v0='QV6Q41CLJJ8TC555HTCSEDAZ5IAO' where id=4; -update noar tt set b2='2QJG1J06JJ6QZCHZDRE8' where id=4; -update noar ti set b2='2QJG1J06JJ6QZCHZDRE8' where id=4; -update noar tt set v0='8X2P713' where id=5; -update noar ti set v0='8X2P713' where id=5; -update noar tt set b0='DG3SFS3XY' where id=5; -update noar ti set b0='DG3SFS3XY' where id=5; -update noar tt set v0='UZPIC8NP6AXXGFYB50YN03FMXTU1W14' where id=5; -update noar ti set v0='UZPIC8NP6AXXGFYB50YN03FMXTU1W14' where id=5; -update noar tt set b1='G75FPLWTELLXK1N0JT7GW' where id=5; -update noar ti set b1='G75FPLWTELLXK1N0JT7GW' where id=5; -update noar tt set v0='XSTDMCNA8UL8EUAA54N3Y' where id=5; -update noar ti set v0='XSTDMCNA8UL8EUAA54N3Y' where id=5; -update noar tt set b2='LSRZCLJBFY05RHE2I3' where id=5; -update noar ti set b2='LSRZCLJBFY05RHE2I3' where id=5; -update noar tt set v0='PCNTTLPH3CWYK8IIDUI293' where id=6; -update noar ti set v0='PCNTTLPH3CWYK8IIDUI293' where id=6; -update noar tt set b0='7TMR80EL4TM8ULVN4DYECOR68ENW2D9X' where id=6; -update noar ti set b0='7TMR80EL4TM8ULVN4DYECOR68ENW2D9X' where id=6; -update noar tt set v0='S5T6I4YG' where id=6; -update noar ti set v0='S5T6I4YG' where id=6; -update noar tt set b1='V2OQ6O8SDMIRG9J8U43PSCAP8PEULU' where id=6; -update noar ti set b1='V2OQ6O8SDMIRG9J8U43PSCAP8PEULU' where id=6; -update noar tt set v0='FND2O' where id=6; -update noar ti set v0='FND2O' where id=6; -update noar tt set b2='92PWAT76' where id=6; -update noar ti set b2='92PWAT76' where id=6; -update noar tt set v0='46WSX4BLGMALAL91WTHPI' where id=7; -update noar ti set v0='46WSX4BLGMALAL91WTHPI' where id=7; -update noar tt set b0='KZA6NQCL5WFXUQYEJ5GZ7OXKXN3JECNN' where id=7; -update noar ti set b0='KZA6NQCL5WFXUQYEJ5GZ7OXKXN3JECNN' where id=7; -update noar tt set v0='LAN4K46VCXTOVSF4' where id=7; -update noar ti set v0='LAN4K46VCXTOVSF4' where id=7; -update noar tt set b1='1B19DLSYQTTS52KG1AWVLYO8HKQO' where id=7; -update noar ti set b1='1B19DLSYQTTS52KG1AWVLYO8HKQO' where id=7; -update noar tt set v0='PG8MLBWDMBIUOY2C2YZVT0' where id=7; -update noar ti set v0='PG8MLBWDMBIUOY2C2YZVT0' where id=7; -update noar tt set b2='NADC8KKBGPVCF4LL1CE7GA3EK57E9YXW' where id=7; -update noar ti set b2='NADC8KKBGPVCF4LL1CE7GA3EK57E9YXW' where id=7; -update noar tt set v0='FUW6WIX' where id=8; -update noar ti set v0='FUW6WIX' where id=8; -update noar tt set b0='H8VRSCX1WVZYF' where id=8; -update noar ti set b0='H8VRSCX1WVZYF' where id=8; -update noar tt set v0='UNAL2NHBXNCR35S1YFB20I4' where id=8; -update noar ti set v0='UNAL2NHBXNCR35S1YFB20I4' where id=8; -update noar tt set b1='I6HP7WPT4MA79TY4GB9OSPGI5BRT' where id=8; -update noar ti set b1='I6HP7WPT4MA79TY4GB9OSPGI5BRT' where id=8; -update noar tt set v0='A7PAMWP9XUOM0YKNQYQJHPIG1' where id=8; -update noar ti set v0='A7PAMWP9XUOM0YKNQYQJHPIG1' where id=8; -update noar tt set b2='Q39' where id=8; -update noar ti set b2='Q39' where id=8; -update noar tt set v0='46MAB4BS5LJX' where id=9; -update noar ti set v0='46MAB4BS5LJX' where id=9; -update noar tt set b0='1MA85EZZ6BKKLVA1E' where id=9; -update noar ti set b0='1MA85EZZ6BKKLVA1E' where id=9; -update noar tt set v0='R7L37HWO3RQSSLIE75B' where id=9; -update noar ti set v0='R7L37HWO3RQSSLIE75B' where id=9; -update noar tt set b1='E6EKMS4MBVHBHS' where id=9; -update noar ti set b1='E6EKMS4MBVHBHS' where id=9; -update noar tt set v0='ALX9L42TRUA' where id=9; -update noar ti set v0='ALX9L42TRUA' where id=9; -update noar tt set b2='MNW5PAT1A64ODMAPE6WIAYHZUYS5Y5Y5' where id=9; -update noar ti set b2='MNW5PAT1A64ODMAPE6WIAYHZUYS5Y5Y5' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 mediumblob not null, -b1 tinyblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='KLGE0BG7GWKR4P' where id=1; -update noar ti set v0='KLGE0BG7GWKR4P' where id=1; -update noar tt set b0='BLJ1O9EZEZ2GZADV0Z72OHNG0' where id=1; -update noar ti set b0='BLJ1O9EZEZ2GZADV0Z72OHNG0' where id=1; -update noar tt set v0='Q1SJNXU7G153XSRY8' where id=1; -update noar ti set v0='Q1SJNXU7G153XSRY8' where id=1; -update noar tt set b1='8' where id=1; -update noar ti set b1='8' where id=1; -update noar tt set v0='FR' where id=1; -update noar ti set v0='FR' where id=1; -update noar tt set b2='RIYPQ5VFY' where id=1; -update noar ti set b2='RIYPQ5VFY' where id=1; -update noar tt set v0='237G' where id=2; -update noar ti set v0='237G' where id=2; -update noar tt set b0='XMDY7LW' where id=2; -update noar ti set b0='XMDY7LW' where id=2; -update noar tt set v0='KNPAXKN9XG5MVX8' where id=2; -update noar ti set v0='KNPAXKN9XG5MVX8' where id=2; -update noar tt set b1='Y7JNKK97HQVNVVUURW' where id=2; -update noar ti set b1='Y7JNKK97HQVNVVUURW' where id=2; -update noar tt set v0='M0SCYZSSUKLQTPN' where id=2; -update noar ti set v0='M0SCYZSSUKLQTPN' where id=2; -update noar tt set b2='5VGR7' where id=2; -update noar ti set b2='5VGR7' where id=2; -update noar tt set v0='EESXJO4F6CQS5W0WUY8GO6UVVNCPO' where id=3; -update noar ti set v0='EESXJO4F6CQS5W0WUY8GO6UVVNCPO' where id=3; -update noar tt set b0='BQQW7Y' where id=3; -update noar ti set b0='BQQW7Y' where id=3; -update noar tt set v0='332B5E41D0TL27WPC32YKOUIK9VXXBK' where id=3; -update noar ti set v0='332B5E41D0TL27WPC32YKOUIK9VXXBK' where id=3; -update noar tt set b1='YEPVCUALXL2' where id=3; -update noar ti set b1='YEPVCUALXL2' where id=3; -update noar tt set v0='IKCWWIE0QO' where id=3; -update noar ti set v0='IKCWWIE0QO' where id=3; -update noar tt set b2='F31IGIYI' where id=3; -update noar ti set b2='F31IGIYI' where id=3; -update noar tt set v0='JIZ5FPVLA3X36TNV4MXWDEWFDW6I7S' where id=4; -update noar ti set v0='JIZ5FPVLA3X36TNV4MXWDEWFDW6I7S' where id=4; -update noar tt set b0='EWOCGB26DM8YF7MXCT3' where id=4; -update noar ti set b0='EWOCGB26DM8YF7MXCT3' where id=4; -update noar tt set v0='Y24O6Z57HEYAMRUR6WAZY2P' where id=4; -update noar ti set v0='Y24O6Z57HEYAMRUR6WAZY2P' where id=4; -update noar tt set b1='Y0THT5KAZ8UHEOOV1E8' where id=4; -update noar ti set b1='Y0THT5KAZ8UHEOOV1E8' where id=4; -update noar tt set v0='1HBUNVLNAQIGYMDYGG9T41K867R5653' where id=4; -update noar ti set v0='1HBUNVLNAQIGYMDYGG9T41K867R5653' where id=4; -update noar tt set b2='KIQHHS0KOJQ3SQKALUG' where id=4; -update noar ti set b2='KIQHHS0KOJQ3SQKALUG' where id=4; -update noar tt set v0='HXHNY8C9BOTK0H6FWNUQIQCSHXX70WI' where id=5; -update noar ti set v0='HXHNY8C9BOTK0H6FWNUQIQCSHXX70WI' where id=5; -update noar tt set b0='5Q' where id=5; -update noar ti set b0='5Q' where id=5; -update noar tt set v0='K1CJT8GQD1UHA63F0N' where id=5; -update noar ti set v0='K1CJT8GQD1UHA63F0N' where id=5; -update noar tt set b1='WR95HCF6HLDZHG9UURXOL2VBPOJ4K5WL' where id=5; -update noar ti set b1='WR95HCF6HLDZHG9UURXOL2VBPOJ4K5WL' where id=5; -update noar tt set v0='W52UW6TBQAWHAPBSWZNRN' where id=5; -update noar ti set v0='W52UW6TBQAWHAPBSWZNRN' where id=5; -update noar tt set b2='LZT4AZN8PS63EIIOSLES0I5' where id=5; -update noar ti set b2='LZT4AZN8PS63EIIOSLES0I5' where id=5; -update noar tt set v0='HEQVS' where id=6; -update noar ti set v0='HEQVS' where id=6; -update noar tt set b0='H3ZETYUG5Y0N' where id=6; -update noar ti set b0='H3ZETYUG5Y0N' where id=6; -update noar tt set v0='3ZT5A07KT7NERJGHY' where id=6; -update noar ti set v0='3ZT5A07KT7NERJGHY' where id=6; -update noar tt set b1='F3OZQNNAH69UF8Q5AK4C3YSKBU' where id=6; -update noar ti set b1='F3OZQNNAH69UF8Q5AK4C3YSKBU' where id=6; -update noar tt set v0='SWOWN1JZHL38W1P7P5S07CMB4SHI2' where id=6; -update noar ti set v0='SWOWN1JZHL38W1P7P5S07CMB4SHI2' where id=6; -update noar tt set b2='JAVGZR72FC' where id=6; -update noar ti set b2='JAVGZR72FC' where id=6; -update noar tt set v0='SER7TJTYZRIATEQTSIHF9H9806' where id=7; -update noar ti set v0='SER7TJTYZRIATEQTSIHF9H9806' where id=7; -update noar tt set b0='PQXT8I1N64G' where id=7; -update noar ti set b0='PQXT8I1N64G' where id=7; -update noar tt set v0='S6T2RI2L4XNLKENHPZFHBMPIN' where id=7; -update noar ti set v0='S6T2RI2L4XNLKENHPZFHBMPIN' where id=7; -update noar tt set b1='EFS' where id=7; -update noar ti set b1='EFS' where id=7; -update noar tt set v0='0RZ666C7PDJXUYO6CTD3J0R' where id=7; -update noar ti set v0='0RZ666C7PDJXUYO6CTD3J0R' where id=7; -update noar tt set b2='L9SBW' where id=7; -update noar ti set b2='L9SBW' where id=7; -update noar tt set v0='7VNXQADY57ECUG2ED2C3U' where id=8; -update noar ti set v0='7VNXQADY57ECUG2ED2C3U' where id=8; -update noar tt set b0='DW7WRRQI' where id=8; -update noar ti set b0='DW7WRRQI' where id=8; -update noar tt set v0='0A9ELQNQS2R0GTV9V2HB' where id=8; -update noar ti set v0='0A9ELQNQS2R0GTV9V2HB' where id=8; -update noar tt set b1='MMJF62JE8PAN4Q2UZ' where id=8; -update noar ti set b1='MMJF62JE8PAN4Q2UZ' where id=8; -update noar tt set v0='JIY7E' where id=8; -update noar ti set v0='JIY7E' where id=8; -update noar tt set b2='YQJ7WDQU' where id=8; -update noar ti set b2='YQJ7WDQU' where id=8; -update noar tt set v0='VWC4731W82R4OZKKI8JQPZP03W' where id=9; -update noar ti set v0='VWC4731W82R4OZKKI8JQPZP03W' where id=9; -update noar tt set b0='KW08QEZJ4ZGHDA486J' where id=9; -update noar ti set b0='KW08QEZJ4ZGHDA486J' where id=9; -update noar tt set v0='ST0TH03' where id=9; -update noar ti set v0='ST0TH03' where id=9; -update noar tt set b1='K5EF' where id=9; -update noar ti set b1='K5EF' where id=9; -update noar tt set v0='4TPV0RNCWLXV75U5FK7MJ3X86C74' where id=9; -update noar ti set v0='4TPV0RNCWLXV75U5FK7MJ3X86C74' where id=9; -update noar tt set b2='H4G7' where id=9; -update noar ti set b2='H4G7' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 mediumblob null, -b1 tinyblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='J9REEBMPRETAQ5CONMO4J8N' where id=1; -update noar ti set v0='J9REEBMPRETAQ5CONMO4J8N' where id=1; -update noar tt set b0='93UVSGIVGT42ADLDT3NK' where id=1; -update noar ti set b0='93UVSGIVGT42ADLDT3NK' where id=1; -update noar tt set v0='WL4TDVC84YCAY7QYOBPV9V0Z25PB1U05' where id=1; -update noar ti set v0='WL4TDVC84YCAY7QYOBPV9V0Z25PB1U05' where id=1; -update noar tt set b1='YEM4' where id=1; -update noar ti set b1='YEM4' where id=1; -update noar tt set v0='ATIKHSJSXX3720ISOVEMIW4M' where id=1; -update noar ti set v0='ATIKHSJSXX3720ISOVEMIW4M' where id=1; -update noar tt set b2='0TPJWGS1ZPIYLTKK5RSPJABLTAS5W' where id=1; -update noar ti set b2='0TPJWGS1ZPIYLTKK5RSPJABLTAS5W' where id=1; -update noar tt set v0='KCFH382CADV7BCUP5' where id=2; -update noar ti set v0='KCFH382CADV7BCUP5' where id=2; -update noar tt set b0='4V1K' where id=2; -update noar ti set b0='4V1K' where id=2; -update noar tt set v0='XYQY38CB73U23WNHBOQWVDXWKBLU' where id=2; -update noar ti set v0='XYQY38CB73U23WNHBOQWVDXWKBLU' where id=2; -update noar tt set b1='S6SCH0N9QR165WKECE86TY318R' where id=2; -update noar ti set b1='S6SCH0N9QR165WKECE86TY318R' where id=2; -update noar tt set v0='F6' where id=2; -update noar ti set v0='F6' where id=2; -update noar tt set b2='Q72KHSLF2AZ32KUQCL6VETN5QWQ4OPHX' where id=2; -update noar ti set b2='Q72KHSLF2AZ32KUQCL6VETN5QWQ4OPHX' where id=2; -update noar tt set v0='U05SSGF3Q' where id=3; -update noar ti set v0='U05SSGF3Q' where id=3; -update noar tt set b0='2YLSV16THLRB8RRM0XTEW5GN' where id=3; -update noar ti set b0='2YLSV16THLRB8RRM0XTEW5GN' where id=3; -update noar tt set v0='0I53F7N2KQ6RK5EWE0G' where id=3; -update noar ti set v0='0I53F7N2KQ6RK5EWE0G' where id=3; -update noar tt set b1='LG8M' where id=3; -update noar ti set b1='LG8M' where id=3; -update noar tt set v0='6Y' where id=3; -update noar ti set v0='6Y' where id=3; -update noar tt set b2='OB1ZN9DZ2' where id=3; -update noar ti set b2='OB1ZN9DZ2' where id=3; -update noar tt set v0='8YXZ9NUR8YO53CTBN4LPAB56D3E5KU1' where id=4; -update noar ti set v0='8YXZ9NUR8YO53CTBN4LPAB56D3E5KU1' where id=4; -update noar tt set b0='F653BK' where id=4; -update noar ti set b0='F653BK' where id=4; -update noar tt set v0='I7S2U0PKETL2X0H3LP9AY9CESZRD9T' where id=4; -update noar ti set v0='I7S2U0PKETL2X0H3LP9AY9CESZRD9T' where id=4; -update noar tt set b1='CJDV9DO5FNDLRZBYXEYGT7FDFW2622KP' where id=4; -update noar ti set b1='CJDV9DO5FNDLRZBYXEYGT7FDFW2622KP' where id=4; -update noar tt set v0='HWFV21CM0EKOEI6MGHBZBAMV' where id=4; -update noar ti set v0='HWFV21CM0EKOEI6MGHBZBAMV' where id=4; -update noar tt set b2='VO35OQ2UKT8YZ5NDZQ5A' where id=4; -update noar ti set b2='VO35OQ2UKT8YZ5NDZQ5A' where id=4; -update noar tt set v0='6RG8BSDUBAAXTUT' where id=5; -update noar ti set v0='6RG8BSDUBAAXTUT' where id=5; -update noar tt set b0='JFZ86SIA1BRLAB2KE7G827WHS' where id=5; -update noar ti set b0='JFZ86SIA1BRLAB2KE7G827WHS' where id=5; -update noar tt set v0='6RYV2XZ6HV' where id=5; -update noar ti set v0='6RYV2XZ6HV' where id=5; -update noar tt set b1='C3LE5CEWZBLW443BA5Q' where id=5; -update noar ti set b1='C3LE5CEWZBLW443BA5Q' where id=5; -update noar tt set v0='QAL99WWP5Z2XCPIJR5S48H' where id=5; -update noar ti set v0='QAL99WWP5Z2XCPIJR5S48H' where id=5; -update noar tt set b2='X5ZZVU1FRZ4PWLA5VW5BZC' where id=5; -update noar ti set b2='X5ZZVU1FRZ4PWLA5VW5BZC' where id=5; -update noar tt set v0='DR0O8WZW6AFNK' where id=6; -update noar ti set v0='DR0O8WZW6AFNK' where id=6; -update noar tt set b0='4XR4VNNFZU' where id=6; -update noar ti set b0='4XR4VNNFZU' where id=6; -update noar tt set v0='0GPD46WHNONL02OXLIW1GYBMW5DEI' where id=6; -update noar ti set v0='0GPD46WHNONL02OXLIW1GYBMW5DEI' where id=6; -update noar tt set b1='ARVDJUKONFYSWXXJLG25VZZAKGR7TR' where id=6; -update noar ti set b1='ARVDJUKONFYSWXXJLG25VZZAKGR7TR' where id=6; -update noar tt set v0='D' where id=6; -update noar ti set v0='D' where id=6; -update noar tt set b2='OOY63370OI4J' where id=6; -update noar ti set b2='OOY63370OI4J' where id=6; -update noar tt set v0='MJQLUEB9L315BHQLAKXUQDEDHSLU7' where id=7; -update noar ti set v0='MJQLUEB9L315BHQLAKXUQDEDHSLU7' where id=7; -update noar tt set b0='C9FUDV7C6CCJ13CI' where id=7; -update noar ti set b0='C9FUDV7C6CCJ13CI' where id=7; -update noar tt set v0='3U1JDTD3HA' where id=7; -update noar ti set v0='3U1JDTD3HA' where id=7; -update noar tt set b1='K9BY0GLPVJ6WEZ1OY84UEB4ET' where id=7; -update noar ti set b1='K9BY0GLPVJ6WEZ1OY84UEB4ET' where id=7; -update noar tt set v0='1ZGE4IRWW1MAN' where id=7; -update noar ti set v0='1ZGE4IRWW1MAN' where id=7; -update noar tt set b2='KDWZHUVAAVUKVY14URSBPNWZQXC' where id=7; -update noar ti set b2='KDWZHUVAAVUKVY14URSBPNWZQXC' where id=7; -update noar tt set v0='CYE53QBP5MEWX0UYB8D2M' where id=8; -update noar ti set v0='CYE53QBP5MEWX0UYB8D2M' where id=8; -update noar tt set b0='MO0GUW56J4MNKJ4R611M0RU' where id=8; -update noar ti set b0='MO0GUW56J4MNKJ4R611M0RU' where id=8; -update noar tt set v0='PH1PZGX8UYUX5614F2HYBRNXROMV' where id=8; -update noar ti set v0='PH1PZGX8UYUX5614F2HYBRNXROMV' where id=8; -update noar tt set b1='C57TXEZCYA6V' where id=8; -update noar ti set b1='C57TXEZCYA6V' where id=8; -update noar tt set v0='ZE' where id=8; -update noar ti set v0='ZE' where id=8; -update noar tt set b2='G2B67SGW4' where id=8; -update noar ti set b2='G2B67SGW4' where id=8; -update noar tt set v0='JYY09FG2DJWI0FXS5V' where id=9; -update noar ti set v0='JYY09FG2DJWI0FXS5V' where id=9; -update noar tt set b0='BW71ETJ0WTIEEW0' where id=9; -update noar ti set b0='BW71ETJ0WTIEEW0' where id=9; -update noar tt set v0='MDS1PX2A' where id=9; -update noar ti set v0='MDS1PX2A' where id=9; -update noar tt set b1='R96ODXV' where id=9; -update noar ti set b1='R96ODXV' where id=9; -update noar tt set v0='FIX2TS4ME60JF863SQBM' where id=9; -update noar ti set v0='FIX2TS4ME60JF863SQBM' where id=9; -update noar tt set b2='05N115LPDHX2MX7FM9K9CNG' where id=9; -update noar ti set b2='05N115LPDHX2MX7FM9K9CNG' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 mediumblob null, -b1 tinyblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='C8AVVU3YZ3QQZEQG7Q5BLY2IPKPG' where id=1; -update noar ti set v0='C8AVVU3YZ3QQZEQG7Q5BLY2IPKPG' where id=1; -update noar tt set b0='2LRGW9RUEYNKU2OQOZYZOHLSL7YNCQXA' where id=1; -update noar ti set b0='2LRGW9RUEYNKU2OQOZYZOHLSL7YNCQXA' where id=1; -update noar tt set v0='M' where id=1; -update noar ti set v0='M' where id=1; -update noar tt set b1='LD407W9AAO2CCSV' where id=1; -update noar ti set b1='LD407W9AAO2CCSV' where id=1; -update noar tt set v0='P' where id=1; -update noar ti set v0='P' where id=1; -update noar tt set b2='336YN54X0HJMTEG' where id=1; -update noar ti set b2='336YN54X0HJMTEG' where id=1; -update noar tt set v0='A34N0MTKXF6HO6DCO7DZXG' where id=2; -update noar ti set v0='A34N0MTKXF6HO6DCO7DZXG' where id=2; -update noar tt set b0='I14HKE9VOC9SYS7K6PS8GONN46B' where id=2; -update noar ti set b0='I14HKE9VOC9SYS7K6PS8GONN46B' where id=2; -update noar tt set v0='SD5XJNJGOEOUOB0U2UQ0' where id=2; -update noar ti set v0='SD5XJNJGOEOUOB0U2UQ0' where id=2; -update noar tt set b1='L1WQBU4' where id=2; -update noar ti set b1='L1WQBU4' where id=2; -update noar tt set v0='JHZMA' where id=2; -update noar ti set v0='JHZMA' where id=2; -update noar tt set b2='IPZ1PVKZM2B8A66Q21XUY8HFQL8NEARS' where id=2; -update noar ti set b2='IPZ1PVKZM2B8A66Q21XUY8HFQL8NEARS' where id=2; -update noar tt set v0='8VMXFJ614TAO2KR1' where id=3; -update noar ti set v0='8VMXFJ614TAO2KR1' where id=3; -update noar tt set b0='3G2E6W7D0DY4GEE' where id=3; -update noar ti set b0='3G2E6W7D0DY4GEE' where id=3; -update noar tt set v0='QO42CBU3WA098CACF' where id=3; -update noar ti set v0='QO42CBU3WA098CACF' where id=3; -update noar tt set b1='J462SNFA2OQC96VK830NDN7IPREC0GY' where id=3; -update noar ti set b1='J462SNFA2OQC96VK830NDN7IPREC0GY' where id=3; -update noar tt set v0='IXR3ORU5ZE' where id=3; -update noar ti set v0='IXR3ORU5ZE' where id=3; -update noar tt set b2='HE' where id=3; -update noar ti set b2='HE' where id=3; -update noar tt set v0='A1GCOSBOTOAK87J8C6E5L44' where id=4; -update noar ti set v0='A1GCOSBOTOAK87J8C6E5L44' where id=4; -update noar tt set b0='C9GJYOYXBJM8K3O446MXGHLC' where id=4; -update noar ti set b0='C9GJYOYXBJM8K3O446MXGHLC' where id=4; -update noar tt set v0='NKTFZ5CIDGOAQG' where id=4; -update noar ti set v0='NKTFZ5CIDGOAQG' where id=4; -update noar tt set b1='4I7QEP' where id=4; -update noar ti set b1='4I7QEP' where id=4; -update noar tt set v0='JXW0ZGKPU2880XKI' where id=4; -update noar ti set v0='JXW0ZGKPU2880XKI' where id=4; -update noar tt set b2='4JIYJI' where id=4; -update noar ti set b2='4JIYJI' where id=4; -update noar tt set v0='2827S8JC1AQQD0K4D9RGTR914' where id=5; -update noar ti set v0='2827S8JC1AQQD0K4D9RGTR914' where id=5; -update noar tt set b0='7MZBUNA' where id=5; -update noar ti set b0='7MZBUNA' where id=5; -update noar tt set v0='KWZFDFH4WMCAWJPD7' where id=5; -update noar ti set v0='KWZFDFH4WMCAWJPD7' where id=5; -update noar tt set b1='MTWJCGQM4P2BU' where id=5; -update noar ti set b1='MTWJCGQM4P2BU' where id=5; -update noar tt set v0='MV98QWGBLXPYUQ' where id=5; -update noar ti set v0='MV98QWGBLXPYUQ' where id=5; -update noar tt set b2='UDMCF0CC0OGWHNRT95QYTAQKBGB' where id=5; -update noar ti set b2='UDMCF0CC0OGWHNRT95QYTAQKBGB' where id=5; -update noar tt set v0='LBHBCQC07BFAMTYSEEXU5J' where id=6; -update noar ti set v0='LBHBCQC07BFAMTYSEEXU5J' where id=6; -update noar tt set b0='2XKH9L' where id=6; -update noar ti set b0='2XKH9L' where id=6; -update noar tt set v0='TF' where id=6; -update noar ti set v0='TF' where id=6; -update noar tt set b1='O9YD3BF' where id=6; -update noar ti set b1='O9YD3BF' where id=6; -update noar tt set v0='HKIZIRFOQC' where id=6; -update noar ti set v0='HKIZIRFOQC' where id=6; -update noar tt set b2='0I0BRNHZ02J6JPJCIZQ2RQ9' where id=6; -update noar ti set b2='0I0BRNHZ02J6JPJCIZQ2RQ9' where id=6; -update noar tt set v0='9AL1RRIHNI8Z4OZP85ZAJWLN4F46FKA' where id=7; -update noar ti set v0='9AL1RRIHNI8Z4OZP85ZAJWLN4F46FKA' where id=7; -update noar tt set b0='6IO5DIEN55YFFLHMMJB64O4G' where id=7; -update noar ti set b0='6IO5DIEN55YFFLHMMJB64O4G' where id=7; -update noar tt set v0='U68VEVJS35X4HPUIQ1XN' where id=7; -update noar ti set v0='U68VEVJS35X4HPUIQ1XN' where id=7; -update noar tt set b1='QB70Q4KTKST9IE2' where id=7; -update noar ti set b1='QB70Q4KTKST9IE2' where id=7; -update noar tt set v0='EZH541YPJZRRZ6DUDVUU5L' where id=7; -update noar ti set v0='EZH541YPJZRRZ6DUDVUU5L' where id=7; -update noar tt set b2='1BFYY05IWUR0FY4YWRH5G' where id=7; -update noar ti set b2='1BFYY05IWUR0FY4YWRH5G' where id=7; -update noar tt set v0='HE2RTXDKYLB' where id=8; -update noar ti set v0='HE2RTXDKYLB' where id=8; -update noar tt set b0='H8QTFZBS6ETYUODHQPSHKH8NX' where id=8; -update noar ti set b0='H8QTFZBS6ETYUODHQPSHKH8NX' where id=8; -update noar tt set v0='KC8QDE5N8DLDMPOQHO2' where id=8; -update noar ti set v0='KC8QDE5N8DLDMPOQHO2' where id=8; -update noar tt set b1='CU0Y2UUFC3DHBWJAV8S1AB0' where id=8; -update noar ti set b1='CU0Y2UUFC3DHBWJAV8S1AB0' where id=8; -update noar tt set v0='2LXG6CREDZKIQD' where id=8; -update noar ti set v0='2LXG6CREDZKIQD' where id=8; -update noar tt set b2='X' where id=8; -update noar ti set b2='X' where id=8; -update noar tt set v0='6' where id=9; -update noar ti set v0='6' where id=9; -update noar tt set b0='1M4EB0VTBQ1FYQQR8J5' where id=9; -update noar ti set b0='1M4EB0VTBQ1FYQQR8J5' where id=9; -update noar tt set v0='60PTRWJG5X7XCUOX' where id=9; -update noar ti set v0='60PTRWJG5X7XCUOX' where id=9; -update noar tt set b1='JQ9KAN418N7N7LXN88N84EVH' where id=9; -update noar ti set b1='JQ9KAN418N7N7LXN88N84EVH' where id=9; -update noar tt set v0='X77FOJINSWXEPW' where id=9; -update noar ti set v0='X77FOJINSWXEPW' where id=9; -update noar tt set b2='I4Z0LC' where id=9; -update noar ti set b2='I4Z0LC' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 mediumblob not null, -b1 tinyblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='17XW' where id=1; -update noar ti set v0='17XW' where id=1; -update noar tt set b0='OGZ' where id=1; -update noar ti set b0='OGZ' where id=1; -update noar tt set v0='XSVDXTHMV4KKHHCUKUE' where id=1; -update noar ti set v0='XSVDXTHMV4KKHHCUKUE' where id=1; -update noar tt set b1='9ZYEQP6UZWWO8MAEJ3TRO0AWPBC5MN' where id=1; -update noar ti set b1='9ZYEQP6UZWWO8MAEJ3TRO0AWPBC5MN' where id=1; -update noar tt set v0='K09COWECDCM6G1KK5L' where id=1; -update noar ti set v0='K09COWECDCM6G1KK5L' where id=1; -update noar tt set b2='22U50ZPB' where id=1; -update noar ti set b2='22U50ZPB' where id=1; -update noar tt set v0='BF6VSD4W6R258AGZS6HTH' where id=2; -update noar ti set v0='BF6VSD4W6R258AGZS6HTH' where id=2; -update noar tt set b0='IDE5YAXZOU40I' where id=2; -update noar ti set b0='IDE5YAXZOU40I' where id=2; -update noar tt set v0='TT0G1WAW0323S6LR6P9U8E2OSXD37Q' where id=2; -update noar ti set v0='TT0G1WAW0323S6LR6P9U8E2OSXD37Q' where id=2; -update noar tt set b1='C43MAKTB0IHL36UVF8X3IJ8X3D' where id=2; -update noar ti set b1='C43MAKTB0IHL36UVF8X3IJ8X3D' where id=2; -update noar tt set v0='EYTUME7QTT7Q10WYISERBBDR' where id=2; -update noar ti set v0='EYTUME7QTT7Q10WYISERBBDR' where id=2; -update noar tt set b2='SOBU4VG6R791UNM' where id=2; -update noar ti set b2='SOBU4VG6R791UNM' where id=2; -update noar tt set v0='P2VL4MEOOQQKHSFQJ8' where id=3; -update noar ti set v0='P2VL4MEOOQQKHSFQJ8' where id=3; -update noar tt set b0='S' where id=3; -update noar ti set b0='S' where id=3; -update noar tt set v0='PXSW5H35H0M6JUHLQ8EYMSZ6' where id=3; -update noar ti set v0='PXSW5H35H0M6JUHLQ8EYMSZ6' where id=3; -update noar tt set b1='Y1X' where id=3; -update noar ti set b1='Y1X' where id=3; -update noar tt set v0='E5IORNATZ9A9ZZW' where id=3; -update noar ti set v0='E5IORNATZ9A9ZZW' where id=3; -update noar tt set b2='8G9TV6GNBG2MT' where id=3; -update noar ti set b2='8G9TV6GNBG2MT' where id=3; -update noar tt set v0='IX0TTYZ42IN4UXLFV4DAEIOPMUFD' where id=4; -update noar ti set v0='IX0TTYZ42IN4UXLFV4DAEIOPMUFD' where id=4; -update noar tt set b0='P5572WN57VHX0CGN73PKIHSOWZGFJ7' where id=4; -update noar ti set b0='P5572WN57VHX0CGN73PKIHSOWZGFJ7' where id=4; -update noar tt set v0='4WU63F4PTPFJPZ4S7W7FRPVK7VK' where id=4; -update noar ti set v0='4WU63F4PTPFJPZ4S7W7FRPVK7VK' where id=4; -update noar tt set b1='GCFDECVIP0FZX8QTKD5H71' where id=4; -update noar ti set b1='GCFDECVIP0FZX8QTKD5H71' where id=4; -update noar tt set v0='AT126111KT' where id=4; -update noar ti set v0='AT126111KT' where id=4; -update noar tt set b2='C2ZSEGBWSYDE' where id=4; -update noar ti set b2='C2ZSEGBWSYDE' where id=4; -update noar tt set v0='0EA7QDPMS9EZP5EBV' where id=5; -update noar ti set v0='0EA7QDPMS9EZP5EBV' where id=5; -update noar tt set b0='O1U9K7MJPG5IKCGG6EJBQ0YCPM' where id=5; -update noar ti set b0='O1U9K7MJPG5IKCGG6EJBQ0YCPM' where id=5; -update noar tt set v0='71SGU26Z78S4A4X' where id=5; -update noar ti set v0='71SGU26Z78S4A4X' where id=5; -update noar tt set b1='1O3M9RQES' where id=5; -update noar ti set b1='1O3M9RQES' where id=5; -update noar tt set v0='4S26QD4BGJXH' where id=5; -update noar ti set v0='4S26QD4BGJXH' where id=5; -update noar tt set b2='CZQ9DJLU85E' where id=5; -update noar ti set b2='CZQ9DJLU85E' where id=5; -update noar tt set v0='TTME' where id=6; -update noar ti set v0='TTME' where id=6; -update noar tt set b0='S1PH4AODP9W' where id=6; -update noar ti set b0='S1PH4AODP9W' where id=6; -update noar tt set v0='UQ88N1SYLB5FLESZQY84' where id=6; -update noar ti set v0='UQ88N1SYLB5FLESZQY84' where id=6; -update noar tt set b1='6G34Z94VFXGBTSP' where id=6; -update noar ti set b1='6G34Z94VFXGBTSP' where id=6; -update noar tt set v0='PIA2TD38I4IFQ640DC54G8S5BJSZKL' where id=6; -update noar ti set v0='PIA2TD38I4IFQ640DC54G8S5BJSZKL' where id=6; -update noar tt set b2='907SEJ91BSE6J98LHCK8X' where id=6; -update noar ti set b2='907SEJ91BSE6J98LHCK8X' where id=6; -update noar tt set v0='6EBNR3DIYZA4Q9IBYCSOYTGBR' where id=7; -update noar ti set v0='6EBNR3DIYZA4Q9IBYCSOYTGBR' where id=7; -update noar tt set b0='LU0ULWC9BC9DLGWYZLY4LQFVUN4OOB' where id=7; -update noar ti set b0='LU0ULWC9BC9DLGWYZLY4LQFVUN4OOB' where id=7; -update noar tt set v0='7CUOXQOYDQSP' where id=7; -update noar ti set v0='7CUOXQOYDQSP' where id=7; -update noar tt set b1='L7WX5QTBE2EX2ULGOQ3WWWZDCQVD' where id=7; -update noar ti set b1='L7WX5QTBE2EX2ULGOQ3WWWZDCQVD' where id=7; -update noar tt set v0='YJ9DUUN' where id=7; -update noar ti set v0='YJ9DUUN' where id=7; -update noar tt set b2='VC3RBPJJST7SO14P61OL7U' where id=7; -update noar ti set b2='VC3RBPJJST7SO14P61OL7U' where id=7; -update noar tt set v0='LDNU1ZFW68FOSN64D32XLPRQ2OVUNPT3' where id=8; -update noar ti set v0='LDNU1ZFW68FOSN64D32XLPRQ2OVUNPT3' where id=8; -update noar tt set b0='469' where id=8; -update noar ti set b0='469' where id=8; -update noar tt set v0='C6B7RDY7ARAVYU6G1QBKYROF65YWEX' where id=8; -update noar ti set v0='C6B7RDY7ARAVYU6G1QBKYROF65YWEX' where id=8; -update noar tt set b1='H3TM3RBV8R7XEQYUH6A0OKKGX' where id=8; -update noar ti set b1='H3TM3RBV8R7XEQYUH6A0OKKGX' where id=8; -update noar tt set v0='QT2TOT5BWUK3O' where id=8; -update noar ti set v0='QT2TOT5BWUK3O' where id=8; -update noar tt set b2='442' where id=8; -update noar ti set b2='442' where id=8; -update noar tt set v0='BY8YQHNJ' where id=9; -update noar ti set v0='BY8YQHNJ' where id=9; -update noar tt set b0='ULAYW3ZNW3RSK7L8VI4JA0L0Y4Y2R3U' where id=9; -update noar ti set b0='ULAYW3ZNW3RSK7L8VI4JA0L0Y4Y2R3U' where id=9; -update noar tt set v0='WT7V3VQKGD1LDL83QH0' where id=9; -update noar ti set v0='WT7V3VQKGD1LDL83QH0' where id=9; -update noar tt set b1='IVNA2V4GI6YE2X6DG150YH25FP' where id=9; -update noar ti set b1='IVNA2V4GI6YE2X6DG150YH25FP' where id=9; -update noar tt set v0='PCBB88Q5' where id=9; -update noar ti set v0='PCBB88Q5' where id=9; -update noar tt set b2='0LTSCEZUVG03T2TKLJ7' where id=9; -update noar ti set b2='0LTSCEZUVG03T2TKLJ7' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 mediumblob not null, -b1 tinyblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='9F2UUEOR5EC0YD' where id=1; -update noar ti set v0='9F2UUEOR5EC0YD' where id=1; -update noar tt set b0='MH1FXFZZCZ4HDGMIAHPKJU9019TBWIY' where id=1; -update noar ti set b0='MH1FXFZZCZ4HDGMIAHPKJU9019TBWIY' where id=1; -update noar tt set v0='ZQT0V2616NTEI3HJZ9E9I6PBSWYUY' where id=1; -update noar ti set v0='ZQT0V2616NTEI3HJZ9E9I6PBSWYUY' where id=1; -update noar tt set b1='JXZ6GE0E8UNUATT2XKSJIYWODDT' where id=1; -update noar ti set b1='JXZ6GE0E8UNUATT2XKSJIYWODDT' where id=1; -update noar tt set v0='O1H6LD4EOEJ22SRRG6J2Z7N4GVW5F' where id=1; -update noar ti set v0='O1H6LD4EOEJ22SRRG6J2Z7N4GVW5F' where id=1; -update noar tt set b2='ZEDD87VDST9JWQ' where id=1; -update noar ti set b2='ZEDD87VDST9JWQ' where id=1; -update noar tt set v0='5CHAU3S25AQY8SN6EY' where id=2; -update noar ti set v0='5CHAU3S25AQY8SN6EY' where id=2; -update noar tt set b0='4GD' where id=2; -update noar ti set b0='4GD' where id=2; -update noar tt set v0='ID' where id=2; -update noar ti set v0='ID' where id=2; -update noar tt set b1='ABX51353GW74' where id=2; -update noar ti set b1='ABX51353GW74' where id=2; -update noar tt set v0='4OL46YHHX53CLRX6CRHOO1KP' where id=2; -update noar ti set v0='4OL46YHHX53CLRX6CRHOO1KP' where id=2; -update noar tt set b2='K6TE7H' where id=2; -update noar ti set b2='K6TE7H' where id=2; -update noar tt set v0='6P81VTSAAOD8CQHNGKZOE9T4LLFBM' where id=3; -update noar ti set v0='6P81VTSAAOD8CQHNGKZOE9T4LLFBM' where id=3; -update noar tt set b0='AKY82LUNMQLV8EZA7HQ0JQL5ZE0' where id=3; -update noar ti set b0='AKY82LUNMQLV8EZA7HQ0JQL5ZE0' where id=3; -update noar tt set v0='C52MMWSJJVDF5LFFTX4X' where id=3; -update noar ti set v0='C52MMWSJJVDF5LFFTX4X' where id=3; -update noar tt set b1='6NLAW6DZBAH1EZKX4KGIZBB8EJQHSGI' where id=3; -update noar ti set b1='6NLAW6DZBAH1EZKX4KGIZBB8EJQHSGI' where id=3; -update noar tt set v0='MDPRSO17N2M6F73' where id=3; -update noar ti set v0='MDPRSO17N2M6F73' where id=3; -update noar tt set b2='JGTCWBMCTTJZKFUUB9BSFY56' where id=3; -update noar ti set b2='JGTCWBMCTTJZKFUUB9BSFY56' where id=3; -update noar tt set v0='AC1F2LW6NACBU7J5PGQAJS9M' where id=4; -update noar ti set v0='AC1F2LW6NACBU7J5PGQAJS9M' where id=4; -update noar tt set b0='REEOS' where id=4; -update noar ti set b0='REEOS' where id=4; -update noar tt set v0='LL3H6A9N7CO1O1WJMR8SLFKGP1' where id=4; -update noar ti set v0='LL3H6A9N7CO1O1WJMR8SLFKGP1' where id=4; -update noar tt set b1='7' where id=4; -update noar ti set b1='7' where id=4; -update noar tt set v0='ASL84DR76KZU7M' where id=4; -update noar ti set v0='ASL84DR76KZU7M' where id=4; -update noar tt set b2='LEIX3YR91SYHP51DWFJGC9EZA0BA0PNA' where id=4; -update noar ti set b2='LEIX3YR91SYHP51DWFJGC9EZA0BA0PNA' where id=4; -update noar tt set v0='02HZ1E10ZE1' where id=5; -update noar ti set v0='02HZ1E10ZE1' where id=5; -update noar tt set b0='YJZE7ADA5BL2PCI4YO4OIH4Y0NRC1' where id=5; -update noar ti set b0='YJZE7ADA5BL2PCI4YO4OIH4Y0NRC1' where id=5; -update noar tt set v0='S8TYW9Q0J0FGJ' where id=5; -update noar ti set v0='S8TYW9Q0J0FGJ' where id=5; -update noar tt set b1='5IGK07FMJ8DWVMS6LEGT6Z0JUF588FQ' where id=5; -update noar ti set b1='5IGK07FMJ8DWVMS6LEGT6Z0JUF588FQ' where id=5; -update noar tt set v0='KR12ZOKEQJG65EBE9PV5PF' where id=5; -update noar ti set v0='KR12ZOKEQJG65EBE9PV5PF' where id=5; -update noar tt set b2='95O3DT' where id=5; -update noar ti set b2='95O3DT' where id=5; -update noar tt set v0='5BDWTVAASDLHR3LGSXS' where id=6; -update noar ti set v0='5BDWTVAASDLHR3LGSXS' where id=6; -update noar tt set b0='OUUPVAO5RXQMVR8E4US50P' where id=6; -update noar ti set b0='OUUPVAO5RXQMVR8E4US50P' where id=6; -update noar tt set v0='Y7BZZU4SK' where id=6; -update noar ti set v0='Y7BZZU4SK' where id=6; -update noar tt set b1='KBHOK4HSQA3PZTZK5VVXJOJ87X9YUVX' where id=6; -update noar ti set b1='KBHOK4HSQA3PZTZK5VVXJOJ87X9YUVX' where id=6; -update noar tt set v0='5KXY9TM50HIYD' where id=6; -update noar ti set v0='5KXY9TM50HIYD' where id=6; -update noar tt set b2='FFIYZA0A1FDQ9YJR471JUDWDEJGL9R' where id=6; -update noar ti set b2='FFIYZA0A1FDQ9YJR471JUDWDEJGL9R' where id=6; -update noar tt set v0='G09YGJ2MHVSNH9S44B5GAN' where id=7; -update noar ti set v0='G09YGJ2MHVSNH9S44B5GAN' where id=7; -update noar tt set b0='C' where id=7; -update noar ti set b0='C' where id=7; -update noar tt set v0='NO9M9ITFS42A' where id=7; -update noar ti set v0='NO9M9ITFS42A' where id=7; -update noar tt set b1='SUM8A946P6RJCE7DYQ' where id=7; -update noar ti set b1='SUM8A946P6RJCE7DYQ' where id=7; -update noar tt set v0='YC1ZA79C2IJKL' where id=7; -update noar ti set v0='YC1ZA79C2IJKL' where id=7; -update noar tt set b2='3BLZFQ6A' where id=7; -update noar ti set b2='3BLZFQ6A' where id=7; -update noar tt set v0='3IIXY1GTYISDJ276Y3' where id=8; -update noar ti set v0='3IIXY1GTYISDJ276Y3' where id=8; -update noar tt set b0='DUY5P4LN7DFX7M7U9HO' where id=8; -update noar ti set b0='DUY5P4LN7DFX7M7U9HO' where id=8; -update noar tt set v0='U36ECOKVIBROSDID9' where id=8; -update noar ti set v0='U36ECOKVIBROSDID9' where id=8; -update noar tt set b1='S2HT6JC8QN1PZFV9QKSXCUDA6O0XNK36' where id=8; -update noar ti set b1='S2HT6JC8QN1PZFV9QKSXCUDA6O0XNK36' where id=8; -update noar tt set v0='GV6CE' where id=8; -update noar ti set v0='GV6CE' where id=8; -update noar tt set b2='J7VFYOPJEE3SK' where id=8; -update noar ti set b2='J7VFYOPJEE3SK' where id=8; -update noar tt set v0='Q5UO' where id=9; -update noar ti set v0='Q5UO' where id=9; -update noar tt set b0='PFHFVJ0TM' where id=9; -update noar ti set b0='PFHFVJ0TM' where id=9; -update noar tt set v0='WVIDAGJ9IP' where id=9; -update noar ti set v0='WVIDAGJ9IP' where id=9; -update noar tt set b1='XS25A2C42I5NNMENIKUM0XX7IY' where id=9; -update noar ti set b1='XS25A2C42I5NNMENIKUM0XX7IY' where id=9; -update noar tt set v0='STL20D7YMU' where id=9; -update noar ti set v0='STL20D7YMU' where id=9; -update noar tt set b2='WIOXFUQVC85X30M' where id=9; -update noar ti set b2='WIOXFUQVC85X30M' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 mediumblob null, -b1 tinyblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='W157IUEO7WCM7LQVFUSHUQDU467' where id=1; -update noar ti set v0='W157IUEO7WCM7LQVFUSHUQDU467' where id=1; -update noar tt set b0='TSZWEEQWZ0B5GPUPS07RWEK5RG4UABD' where id=1; -update noar ti set b0='TSZWEEQWZ0B5GPUPS07RWEK5RG4UABD' where id=1; -update noar tt set v0='EGS51EG5SJIBCWN' where id=1; -update noar ti set v0='EGS51EG5SJIBCWN' where id=1; -update noar tt set b1='RT6CKA' where id=1; -update noar ti set b1='RT6CKA' where id=1; -update noar tt set v0='MKDBQ' where id=1; -update noar ti set v0='MKDBQ' where id=1; -update noar tt set b2='5J9BAFUHHFKACUMVWRV65NFOR74X' where id=1; -update noar ti set b2='5J9BAFUHHFKACUMVWRV65NFOR74X' where id=1; -update noar tt set v0='56XURDVW9' where id=2; -update noar ti set v0='56XURDVW9' where id=2; -update noar tt set b0='Z488EKIIKBV6QTW7KD' where id=2; -update noar ti set b0='Z488EKIIKBV6QTW7KD' where id=2; -update noar tt set v0='1098026SFEESCBGSLKJJKB093P' where id=2; -update noar ti set v0='1098026SFEESCBGSLKJJKB093P' where id=2; -update noar tt set b1='IDAHK2DRDGAJJKYO48' where id=2; -update noar ti set b1='IDAHK2DRDGAJJKYO48' where id=2; -update noar tt set v0='YABVGL24Z' where id=2; -update noar ti set v0='YABVGL24Z' where id=2; -update noar tt set b2='58PTBM67QPHIADXCP0O8TFRXSE' where id=2; -update noar ti set b2='58PTBM67QPHIADXCP0O8TFRXSE' where id=2; -update noar tt set v0='C4WK617Q6G3J6FLDRFNJ7OX2HMTGBYHU' where id=3; -update noar ti set v0='C4WK617Q6G3J6FLDRFNJ7OX2HMTGBYHU' where id=3; -update noar tt set b0='MBX1RN' where id=3; -update noar ti set b0='MBX1RN' where id=3; -update noar tt set v0='X2RPORBB1282PAKY4356TAC7' where id=3; -update noar ti set v0='X2RPORBB1282PAKY4356TAC7' where id=3; -update noar tt set b1='7XDBAAEIIW' where id=3; -update noar ti set b1='7XDBAAEIIW' where id=3; -update noar tt set v0='HVU0X2SDFW' where id=3; -update noar ti set v0='HVU0X2SDFW' where id=3; -update noar tt set b2='FU7IV5QTRRGDJIL21DINITLLP' where id=3; -update noar ti set b2='FU7IV5QTRRGDJIL21DINITLLP' where id=3; -update noar tt set v0='HRDG8HBV1ED3EO3VHTEVZ' where id=4; -update noar ti set v0='HRDG8HBV1ED3EO3VHTEVZ' where id=4; -update noar tt set b0='B' where id=4; -update noar ti set b0='B' where id=4; -update noar tt set v0='MP' where id=4; -update noar ti set v0='MP' where id=4; -update noar tt set b1='E7GEVUBQ1M' where id=4; -update noar ti set b1='E7GEVUBQ1M' where id=4; -update noar tt set v0='A1EGBNZ49BU9G3K2' where id=4; -update noar ti set v0='A1EGBNZ49BU9G3K2' where id=4; -update noar tt set b2='VNCTYBJV0G' where id=4; -update noar ti set b2='VNCTYBJV0G' where id=4; -update noar tt set v0='AH1WZFGX768YE8' where id=5; -update noar ti set v0='AH1WZFGX768YE8' where id=5; -update noar tt set b0='PI16IMFKEH2RJ9RXF8GUFH6SCU' where id=5; -update noar ti set b0='PI16IMFKEH2RJ9RXF8GUFH6SCU' where id=5; -update noar tt set v0='SLO7VCDGYETCWA20' where id=5; -update noar ti set v0='SLO7VCDGYETCWA20' where id=5; -update noar tt set b1='HIZJYKU9ZDET40EJB7H1G91H' where id=5; -update noar ti set b1='HIZJYKU9ZDET40EJB7H1G91H' where id=5; -update noar tt set v0='ZQYY51Y3OXUWI0752B9' where id=5; -update noar ti set v0='ZQYY51Y3OXUWI0752B9' where id=5; -update noar tt set b2='C' where id=5; -update noar ti set b2='C' where id=5; -update noar tt set v0='0NQW2B' where id=6; -update noar ti set v0='0NQW2B' where id=6; -update noar tt set b0='33MD91RAEZ' where id=6; -update noar ti set b0='33MD91RAEZ' where id=6; -update noar tt set v0='NP1OA916LHWGLLWSREF' where id=6; -update noar ti set v0='NP1OA916LHWGLLWSREF' where id=6; -update noar tt set b1='2LI6GZ14IMUJ7JFUN' where id=6; -update noar ti set b1='2LI6GZ14IMUJ7JFUN' where id=6; -update noar tt set v0='42896820IB7RI' where id=6; -update noar ti set v0='42896820IB7RI' where id=6; -update noar tt set b2='6E7CRPO8TGJERL57Y9AL4' where id=6; -update noar ti set b2='6E7CRPO8TGJERL57Y9AL4' where id=6; -update noar tt set v0='Y2DN9ITV' where id=7; -update noar ti set v0='Y2DN9ITV' where id=7; -update noar tt set b0='ZLGPSJGGRW77QKI9Z22VLYIIK8HMB' where id=7; -update noar ti set b0='ZLGPSJGGRW77QKI9Z22VLYIIK8HMB' where id=7; -update noar tt set v0='VTQISZV0EVNJTPQBLKE66OSDGGOTJA' where id=7; -update noar ti set v0='VTQISZV0EVNJTPQBLKE66OSDGGOTJA' where id=7; -update noar tt set b1='6L5XIGHXWANSEF2OWLL' where id=7; -update noar ti set b1='6L5XIGHXWANSEF2OWLL' where id=7; -update noar tt set v0='J5MI' where id=7; -update noar ti set v0='J5MI' where id=7; -update noar tt set b2='EG4PZZH25K' where id=7; -update noar ti set b2='EG4PZZH25K' where id=7; -update noar tt set v0='CX' where id=8; -update noar ti set v0='CX' where id=8; -update noar tt set b0='XMTQ0GG76YQMRNJJZFFI5D22V0HQG' where id=8; -update noar ti set b0='XMTQ0GG76YQMRNJJZFFI5D22V0HQG' where id=8; -update noar tt set v0='CEPOU4IEL6KZE2ZYHY7WR' where id=8; -update noar ti set v0='CEPOU4IEL6KZE2ZYHY7WR' where id=8; -update noar tt set b1='WH9E' where id=8; -update noar ti set b1='WH9E' where id=8; -update noar tt set v0='UBA36IC1BJZ360DDYVMAUS' where id=8; -update noar ti set v0='UBA36IC1BJZ360DDYVMAUS' where id=8; -update noar tt set b2='6UY7UBFUUSG75B76Z2BBUL51H1IL2UE' where id=8; -update noar ti set b2='6UY7UBFUUSG75B76Z2BBUL51H1IL2UE' where id=8; -update noar tt set v0='NHRP7TL8OSUL' where id=9; -update noar ti set v0='NHRP7TL8OSUL' where id=9; -update noar tt set b0='237OM' where id=9; -update noar ti set b0='237OM' where id=9; -update noar tt set v0='9FR1HH' where id=9; -update noar ti set v0='9FR1HH' where id=9; -update noar tt set b1='HKMHMNX5QDL0MJP333VXOAG9VP' where id=9; -update noar ti set b1='HKMHMNX5QDL0MJP333VXOAG9VP' where id=9; -update noar tt set v0='5U5' where id=9; -update noar ti set v0='5U5' where id=9; -update noar tt set b2='NI95R4YHI0FCK76B9QCQB7HXX9HJHV' where id=9; -update noar ti set b2='NI95R4YHI0FCK76B9QCQB7HXX9HJHV' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 mediumblob null, -b1 tinyblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='1BO1DNNP1E' where id=1; -update noar ti set v0='1BO1DNNP1E' where id=1; -update noar tt set b0='JKQ9TB1420A2A2XD6MOYTYQHDL' where id=1; -update noar ti set b0='JKQ9TB1420A2A2XD6MOYTYQHDL' where id=1; -update noar tt set v0='ZJ0PNKBMJBVIQD' where id=1; -update noar ti set v0='ZJ0PNKBMJBVIQD' where id=1; -update noar tt set b1='T' where id=1; -update noar ti set b1='T' where id=1; -update noar tt set v0='7L6Q6YLVIL6M0WUJAYOP' where id=1; -update noar ti set v0='7L6Q6YLVIL6M0WUJAYOP' where id=1; -update noar tt set b2='E613RECVZ471P4M3D0BU52' where id=1; -update noar ti set b2='E613RECVZ471P4M3D0BU52' where id=1; -update noar tt set v0='TCJZTUVLMGBAUK2EYQ8GQSH5MVJ' where id=2; -update noar ti set v0='TCJZTUVLMGBAUK2EYQ8GQSH5MVJ' where id=2; -update noar tt set b0='VWA9CZ2U07R9U' where id=2; -update noar ti set b0='VWA9CZ2U07R9U' where id=2; -update noar tt set v0='IZ485Z5O4W87TXUDKIQDM' where id=2; -update noar ti set v0='IZ485Z5O4W87TXUDKIQDM' where id=2; -update noar tt set b1='97H9MR' where id=2; -update noar ti set b1='97H9MR' where id=2; -update noar tt set v0='ZTQ4WAZA796DE7FW2RE8' where id=2; -update noar ti set v0='ZTQ4WAZA796DE7FW2RE8' where id=2; -update noar tt set b2='L7NA3RQ0NYUM887B3P3F0ERUIMQN' where id=2; -update noar ti set b2='L7NA3RQ0NYUM887B3P3F0ERUIMQN' where id=2; -update noar tt set v0='YLY4LQWGZ9R2U' where id=3; -update noar ti set v0='YLY4LQWGZ9R2U' where id=3; -update noar tt set b0='5A3F511Q' where id=3; -update noar ti set b0='5A3F511Q' where id=3; -update noar tt set v0='XNZWD29955QU5Z5VRXN6UN83' where id=3; -update noar ti set v0='XNZWD29955QU5Z5VRXN6UN83' where id=3; -update noar tt set b1='P6IORZWT6WY5J724D2O4G43PFMP10' where id=3; -update noar ti set b1='P6IORZWT6WY5J724D2O4G43PFMP10' where id=3; -update noar tt set v0='5RQXK' where id=3; -update noar ti set v0='5RQXK' where id=3; -update noar tt set b2='PMJ0Y2DUHE4' where id=3; -update noar ti set b2='PMJ0Y2DUHE4' where id=3; -update noar tt set v0='QHV78B9I8D3WOE' where id=4; -update noar ti set v0='QHV78B9I8D3WOE' where id=4; -update noar tt set b0='W4T3L8UKPE' where id=4; -update noar ti set b0='W4T3L8UKPE' where id=4; -update noar tt set v0='JYILDD' where id=4; -update noar ti set v0='JYILDD' where id=4; -update noar tt set b1='PM69E66IDALFHEGIXDINKD4SYR6M' where id=4; -update noar ti set b1='PM69E66IDALFHEGIXDINKD4SYR6M' where id=4; -update noar tt set v0='AY9V72MI82953VDAX1QZ8' where id=4; -update noar ti set v0='AY9V72MI82953VDAX1QZ8' where id=4; -update noar tt set b2='CSMCP8PJP556FRVFN6F3R3' where id=4; -update noar ti set b2='CSMCP8PJP556FRVFN6F3R3' where id=4; -update noar tt set v0='8ZCCTAUZI' where id=5; -update noar ti set v0='8ZCCTAUZI' where id=5; -update noar tt set b0='2O74R7TCE6HF5' where id=5; -update noar ti set b0='2O74R7TCE6HF5' where id=5; -update noar tt set v0='S' where id=5; -update noar ti set v0='S' where id=5; -update noar tt set b1='5WGXUS' where id=5; -update noar ti set b1='5WGXUS' where id=5; -update noar tt set v0='648JW68HGYL151YWKVQ7HR0BBCU' where id=5; -update noar ti set v0='648JW68HGYL151YWKVQ7HR0BBCU' where id=5; -update noar tt set b2='OGBX' where id=5; -update noar ti set b2='OGBX' where id=5; -update noar tt set v0='LNIACFCW0RJBBG01U' where id=6; -update noar ti set v0='LNIACFCW0RJBBG01U' where id=6; -update noar tt set b0='NYTCEPMJWJ' where id=6; -update noar ti set b0='NYTCEPMJWJ' where id=6; -update noar tt set v0='PA' where id=6; -update noar ti set v0='PA' where id=6; -update noar tt set b1='FZU9' where id=6; -update noar ti set b1='FZU9' where id=6; -update noar tt set v0='US7B749ROL8' where id=6; -update noar ti set v0='US7B749ROL8' where id=6; -update noar tt set b2='QFQ6PQO539RXNZ81H68LI2NU6RQ' where id=6; -update noar ti set b2='QFQ6PQO539RXNZ81H68LI2NU6RQ' where id=6; -update noar tt set v0='94ZUPABBW5C6TQH6VCQHZ031' where id=7; -update noar ti set v0='94ZUPABBW5C6TQH6VCQHZ031' where id=7; -update noar tt set b0='WCLYSOL83NAQ8FQ5' where id=7; -update noar ti set b0='WCLYSOL83NAQ8FQ5' where id=7; -update noar tt set v0='JGGHO' where id=7; -update noar ti set v0='JGGHO' where id=7; -update noar tt set b1='0QRRTAG1I2WK4HP4RKHS36BF8NCB' where id=7; -update noar ti set b1='0QRRTAG1I2WK4HP4RKHS36BF8NCB' where id=7; -update noar tt set v0='XR5S0ZUO2C1XI8QFHEKDQRAMJZ1' where id=7; -update noar ti set v0='XR5S0ZUO2C1XI8QFHEKDQRAMJZ1' where id=7; -update noar tt set b2='1E3BX30VGMBIAPF0LRJQ4NS5B58N8' where id=7; -update noar ti set b2='1E3BX30VGMBIAPF0LRJQ4NS5B58N8' where id=7; -update noar tt set v0='5WSYKYP9ERPVJ6FA3MIPLV' where id=8; -update noar ti set v0='5WSYKYP9ERPVJ6FA3MIPLV' where id=8; -update noar tt set b0='LCWFYGE0STUI' where id=8; -update noar ti set b0='LCWFYGE0STUI' where id=8; -update noar tt set v0='GO226N1Q295DKRVD' where id=8; -update noar ti set v0='GO226N1Q295DKRVD' where id=8; -update noar tt set b1='ETLTFA1FN2RMPE8N4ZWJ2751WU4NGP0V' where id=8; -update noar ti set b1='ETLTFA1FN2RMPE8N4ZWJ2751WU4NGP0V' where id=8; -update noar tt set v0='FOJ78559PBBV7VDDII0Q4UZQGL9TS' where id=8; -update noar ti set v0='FOJ78559PBBV7VDDII0Q4UZQGL9TS' where id=8; -update noar tt set b2='7BIQ7R2R0WNHRMTE9UO' where id=8; -update noar ti set b2='7BIQ7R2R0WNHRMTE9UO' where id=8; -update noar tt set v0='78UA7UZ8UTXCZARVYT4' where id=9; -update noar ti set v0='78UA7UZ8UTXCZARVYT4' where id=9; -update noar tt set b0='NNGL7UG0G8UJOMI8QTJP82PP' where id=9; -update noar ti set b0='NNGL7UG0G8UJOMI8QTJP82PP' where id=9; -update noar tt set v0='1SMS8S8GF0FO6ZJIQJSODBI80XJ' where id=9; -update noar ti set v0='1SMS8S8GF0FO6ZJIQJSODBI80XJ' where id=9; -update noar tt set b1='UW9FXM0' where id=9; -update noar ti set b1='UW9FXM0' where id=9; -update noar tt set v0='MJ5Z108TVNJR5X9S' where id=9; -update noar ti set v0='MJ5Z108TVNJR5X9S' where id=9; -update noar tt set b2='XVCIOCNQN5XFH818OM0TL3NL8' where id=9; -update noar ti set b2='XVCIOCNQN5XFH818OM0TL3NL8' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 mediumblob not null, -b1 tinyblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='PTGKA67MQ' where id=1; -update noar ti set v0='PTGKA67MQ' where id=1; -update noar tt set b0='0D0RNA0ETEE696AOKL0UFT4S' where id=1; -update noar ti set b0='0D0RNA0ETEE696AOKL0UFT4S' where id=1; -update noar tt set v0='4T3QICKQ' where id=1; -update noar ti set v0='4T3QICKQ' where id=1; -update noar tt set b1='Q8F82F5SJZXFSUTD9L094YYHHCB' where id=1; -update noar ti set b1='Q8F82F5SJZXFSUTD9L094YYHHCB' where id=1; -update noar tt set v0='1HI00E6U2ORLOY7BARCPIIU' where id=1; -update noar ti set v0='1HI00E6U2ORLOY7BARCPIIU' where id=1; -update noar tt set b2='98BQCNT0GBA3OJXVF' where id=1; -update noar ti set b2='98BQCNT0GBA3OJXVF' where id=1; -update noar tt set v0='TUIEG35EHKJ3AXBE0RUT76WZHZRGXRJ' where id=2; -update noar ti set v0='TUIEG35EHKJ3AXBE0RUT76WZHZRGXRJ' where id=2; -update noar tt set b0='WQMJB' where id=2; -update noar ti set b0='WQMJB' where id=2; -update noar tt set v0='N1JU16FYP58ZBN7QXWVP' where id=2; -update noar ti set v0='N1JU16FYP58ZBN7QXWVP' where id=2; -update noar tt set b1='X9YXP9DSUPMN17D' where id=2; -update noar ti set b1='X9YXP9DSUPMN17D' where id=2; -update noar tt set v0='YJ0W1MRM3WC1FB8B4OSUNFD3HKRQ3D' where id=2; -update noar ti set v0='YJ0W1MRM3WC1FB8B4OSUNFD3HKRQ3D' where id=2; -update noar tt set b2='B6AO2L2W116OWBX9BEC9WLXUAX2' where id=2; -update noar ti set b2='B6AO2L2W116OWBX9BEC9WLXUAX2' where id=2; -update noar tt set v0='1R9SFJW8Z9NU83' where id=3; -update noar ti set v0='1R9SFJW8Z9NU83' where id=3; -update noar tt set b0='P28' where id=3; -update noar ti set b0='P28' where id=3; -update noar tt set v0='KQYOF1CEVWXBS2IENU85THA' where id=3; -update noar ti set v0='KQYOF1CEVWXBS2IENU85THA' where id=3; -update noar tt set b1='FVDTPJXJGZZQRQM0RV3W12G9M' where id=3; -update noar ti set b1='FVDTPJXJGZZQRQM0RV3W12G9M' where id=3; -update noar tt set v0='IOQ53JN52I5S3SCKAHCFMEL0F' where id=3; -update noar ti set v0='IOQ53JN52I5S3SCKAHCFMEL0F' where id=3; -update noar tt set b2='D' where id=3; -update noar ti set b2='D' where id=3; -update noar tt set v0='CHN3KRD3WP1YTW4PR3ZZQKFTM' where id=4; -update noar ti set v0='CHN3KRD3WP1YTW4PR3ZZQKFTM' where id=4; -update noar tt set b0='4T65Z9' where id=4; -update noar ti set b0='4T65Z9' where id=4; -update noar tt set v0='KRP0O32NIN2NVLFRJ3ZI' where id=4; -update noar ti set v0='KRP0O32NIN2NVLFRJ3ZI' where id=4; -update noar tt set b1='T5FRQXT0IT61OIPJRXTOC6S49' where id=4; -update noar ti set b1='T5FRQXT0IT61OIPJRXTOC6S49' where id=4; -update noar tt set v0='OCZSSF95DXRVTP783BPH6AQL' where id=4; -update noar ti set v0='OCZSSF95DXRVTP783BPH6AQL' where id=4; -update noar tt set b2='95RSMZ53729RYJ4AB1E8KPUBK' where id=4; -update noar ti set b2='95RSMZ53729RYJ4AB1E8KPUBK' where id=4; -update noar tt set v0='IAYFC7Q5RQ9L6G24FD4UCNYP' where id=5; -update noar ti set v0='IAYFC7Q5RQ9L6G24FD4UCNYP' where id=5; -update noar tt set b0='OA3FYFCJLC0D6T' where id=5; -update noar ti set b0='OA3FYFCJLC0D6T' where id=5; -update noar tt set v0='71247J8C' where id=5; -update noar ti set v0='71247J8C' where id=5; -update noar tt set b1='3TU6XTNG1' where id=5; -update noar ti set b1='3TU6XTNG1' where id=5; -update noar tt set v0='FG' where id=5; -update noar ti set v0='FG' where id=5; -update noar tt set b2='E84' where id=5; -update noar ti set b2='E84' where id=5; -update noar tt set v0='6WHJ8LB6CKJRXP2Y8RFE5XGV' where id=6; -update noar ti set v0='6WHJ8LB6CKJRXP2Y8RFE5XGV' where id=6; -update noar tt set b0='XXNGTMANVO' where id=6; -update noar ti set b0='XXNGTMANVO' where id=6; -update noar tt set v0='Y7DLDIS7VZR' where id=6; -update noar ti set v0='Y7DLDIS7VZR' where id=6; -update noar tt set b1='X4M7ZAXEF65KO5ZKX' where id=6; -update noar ti set b1='X4M7ZAXEF65KO5ZKX' where id=6; -update noar tt set v0='45JOTHEYLO0CAR60JVZYQ8PBJ' where id=6; -update noar ti set v0='45JOTHEYLO0CAR60JVZYQ8PBJ' where id=6; -update noar tt set b2='G043OIEM83ID' where id=6; -update noar ti set b2='G043OIEM83ID' where id=6; -update noar tt set v0='IHVB7ER2' where id=7; -update noar ti set v0='IHVB7ER2' where id=7; -update noar tt set b0='LOIUO4E01ZRXK1O' where id=7; -update noar ti set b0='LOIUO4E01ZRXK1O' where id=7; -update noar tt set v0='37M4S6GN98OG' where id=7; -update noar ti set v0='37M4S6GN98OG' where id=7; -update noar tt set b1='R3E6XJ2TC8DOYXE' where id=7; -update noar ti set b1='R3E6XJ2TC8DOYXE' where id=7; -update noar tt set v0='JLVUT524TZUE' where id=7; -update noar ti set v0='JLVUT524TZUE' where id=7; -update noar tt set b2='NK95KSOVU4Z' where id=7; -update noar ti set b2='NK95KSOVU4Z' where id=7; -update noar tt set v0='UOW1PHY00J7KXBHJF68' where id=8; -update noar ti set v0='UOW1PHY00J7KXBHJF68' where id=8; -update noar tt set b0='Q90RSEZBOJWO4098IALDLFQJ' where id=8; -update noar ti set b0='Q90RSEZBOJWO4098IALDLFQJ' where id=8; -update noar tt set v0='2XW1YFPN' where id=8; -update noar ti set v0='2XW1YFPN' where id=8; -update noar tt set b1='QZA' where id=8; -update noar ti set b1='QZA' where id=8; -update noar tt set v0='JCHE7A2F2NI8XXF9APFWPGSNQ2' where id=8; -update noar ti set v0='JCHE7A2F2NI8XXF9APFWPGSNQ2' where id=8; -update noar tt set b2='P2YSYWS9H8F5UA3GGPDN' where id=8; -update noar ti set b2='P2YSYWS9H8F5UA3GGPDN' where id=8; -update noar tt set v0='PI0IKNTCB5DJ48D2S4BN6ON2' where id=9; -update noar ti set v0='PI0IKNTCB5DJ48D2S4BN6ON2' where id=9; -update noar tt set b0='4Y23GZ7RMUQM7J362X' where id=9; -update noar ti set b0='4Y23GZ7RMUQM7J362X' where id=9; -update noar tt set v0='SSKFB1YB40PKXXYF3JCD4XDT0Z' where id=9; -update noar ti set v0='SSKFB1YB40PKXXYF3JCD4XDT0Z' where id=9; -update noar tt set b1='R7PATZX8GY2PRJSB45S5A' where id=9; -update noar ti set b1='R7PATZX8GY2PRJSB45S5A' where id=9; -update noar tt set v0='V3IURG' where id=9; -update noar ti set v0='V3IURG' where id=9; -update noar tt set b2='CUEZ63J1YT7MUNZF9T22YOKE' where id=9; -update noar ti set b2='CUEZ63J1YT7MUNZF9T22YOKE' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 mediumblob not null, -b1 tinyblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='CVQT6QBFJPXKKS3C2' where id=1; -update noar ti set v0='CVQT6QBFJPXKKS3C2' where id=1; -update noar tt set b0='KD9WJVZJFWVUCIEKKGG23JZD80K1S2' where id=1; -update noar ti set b0='KD9WJVZJFWVUCIEKKGG23JZD80K1S2' where id=1; -update noar tt set v0='KRSRZ5GS4BHVQZ' where id=1; -update noar ti set v0='KRSRZ5GS4BHVQZ' where id=1; -update noar tt set b1='JXTCPQ3R' where id=1; -update noar ti set b1='JXTCPQ3R' where id=1; -update noar tt set v0='22LCQF7ELOJZJGU' where id=1; -update noar ti set v0='22LCQF7ELOJZJGU' where id=1; -update noar tt set b2='ECPSQY4G9NBC5DWVQV495S' where id=1; -update noar ti set b2='ECPSQY4G9NBC5DWVQV495S' where id=1; -update noar tt set v0='JSIBYTVS01I6BKDRSX0NL8' where id=2; -update noar ti set v0='JSIBYTVS01I6BKDRSX0NL8' where id=2; -update noar tt set b0='2NUYN7O7YA47YNL' where id=2; -update noar ti set b0='2NUYN7O7YA47YNL' where id=2; -update noar tt set v0='FK6Q0YPV9K3FUJSP23H6GGPDRFVB5RG1' where id=2; -update noar ti set v0='FK6Q0YPV9K3FUJSP23H6GGPDRFVB5RG1' where id=2; -update noar tt set b1='890G17EVQQVQSEWC9IU3RWVLA2R3PC89' where id=2; -update noar ti set b1='890G17EVQQVQSEWC9IU3RWVLA2R3PC89' where id=2; -update noar tt set v0='KZQ74QHN9AW96FR2H4OXX01UHL7' where id=2; -update noar ti set v0='KZQ74QHN9AW96FR2H4OXX01UHL7' where id=2; -update noar tt set b2='ZJMC88A5VZLE7' where id=2; -update noar ti set b2='ZJMC88A5VZLE7' where id=2; -update noar tt set v0='B88FQW7KGY9NVZ1' where id=3; -update noar ti set v0='B88FQW7KGY9NVZ1' where id=3; -update noar tt set b0='MT9QU7VDPWY9T1668OF1V5KGH9UTE2G0' where id=3; -update noar ti set b0='MT9QU7VDPWY9T1668OF1V5KGH9UTE2G0' where id=3; -update noar tt set v0='K1KK0IO5CNAFAIY7K2JBTDDFAPC' where id=3; -update noar ti set v0='K1KK0IO5CNAFAIY7K2JBTDDFAPC' where id=3; -update noar tt set b1='H6IYS6UVG' where id=3; -update noar ti set b1='H6IYS6UVG' where id=3; -update noar tt set v0='GAK7BP56UOLPNY28GX9IAY9I' where id=3; -update noar ti set v0='GAK7BP56UOLPNY28GX9IAY9I' where id=3; -update noar tt set b2='UWN' where id=3; -update noar ti set b2='UWN' where id=3; -update noar tt set v0='HANVSS2K3CZY0CENQ' where id=4; -update noar ti set v0='HANVSS2K3CZY0CENQ' where id=4; -update noar tt set b0='DWOJ4708T351YK7Y5X4134ETRXO' where id=4; -update noar ti set b0='DWOJ4708T351YK7Y5X4134ETRXO' where id=4; -update noar tt set v0='OZYDIQO055EY' where id=4; -update noar ti set v0='OZYDIQO055EY' where id=4; -update noar tt set b1='Z4Q9Z' where id=4; -update noar ti set b1='Z4Q9Z' where id=4; -update noar tt set v0='J9D19VZIBLMUV1V79V' where id=4; -update noar ti set v0='J9D19VZIBLMUV1V79V' where id=4; -update noar tt set b2='NXD2YRXQIYIE9TM6K' where id=4; -update noar ti set b2='NXD2YRXQIYIE9TM6K' where id=4; -update noar tt set v0='OKCBOO51D4JM3TX9I1X' where id=5; -update noar ti set v0='OKCBOO51D4JM3TX9I1X' where id=5; -update noar tt set b0='V' where id=5; -update noar ti set b0='V' where id=5; -update noar tt set v0='FAKX0KXCLTS5LNVCX8I' where id=5; -update noar ti set v0='FAKX0KXCLTS5LNVCX8I' where id=5; -update noar tt set b1='GHNS1P5T84UN6R' where id=5; -update noar ti set b1='GHNS1P5T84UN6R' where id=5; -update noar tt set v0='SN1TIQLLGHO6SIELT3F6CR8EOZRBDF' where id=5; -update noar ti set v0='SN1TIQLLGHO6SIELT3F6CR8EOZRBDF' where id=5; -update noar tt set b2='GLW177V2OMO2OUHHIWBKQW53' where id=5; -update noar ti set b2='GLW177V2OMO2OUHHIWBKQW53' where id=5; -update noar tt set v0='Q6HHGU' where id=6; -update noar ti set v0='Q6HHGU' where id=6; -update noar tt set b0='9H1O0DW8GMGW8U617SFX' where id=6; -update noar ti set b0='9H1O0DW8GMGW8U617SFX' where id=6; -update noar tt set v0='BE6SKIRYEZLEPIK54G94R3S438QM' where id=6; -update noar ti set v0='BE6SKIRYEZLEPIK54G94R3S438QM' where id=6; -update noar tt set b1='OWPKMLGFUY9SYHPE8HE' where id=6; -update noar ti set b1='OWPKMLGFUY9SYHPE8HE' where id=6; -update noar tt set v0='ZCE35A1JS9MNT' where id=6; -update noar ti set v0='ZCE35A1JS9MNT' where id=6; -update noar tt set b2='NCG2PXQBB6OM7MSREXWZOG80EELLU' where id=6; -update noar ti set b2='NCG2PXQBB6OM7MSREXWZOG80EELLU' where id=6; -update noar tt set v0='M5EJ32ASHRY66CH4CST' where id=7; -update noar ti set v0='M5EJ32ASHRY66CH4CST' where id=7; -update noar tt set b0='D56MR' where id=7; -update noar ti set b0='D56MR' where id=7; -update noar tt set v0='LOR4V8EUFIQLQ41KKOTGV8X6' where id=7; -update noar ti set v0='LOR4V8EUFIQLQ41KKOTGV8X6' where id=7; -update noar tt set b1='86JX62U76TZ1' where id=7; -update noar ti set b1='86JX62U76TZ1' where id=7; -update noar tt set v0='7787RQK215BYT3BPJ44V' where id=7; -update noar ti set v0='7787RQK215BYT3BPJ44V' where id=7; -update noar tt set b2='HW2XDS4G129N7OL40VIAY4Q' where id=7; -update noar ti set b2='HW2XDS4G129N7OL40VIAY4Q' where id=7; -update noar tt set v0='8A5D8G51UFF61AZ1P6ZAG52' where id=8; -update noar ti set v0='8A5D8G51UFF61AZ1P6ZAG52' where id=8; -update noar tt set b0='DNUQ4B11G4UHWIIRF' where id=8; -update noar ti set b0='DNUQ4B11G4UHWIIRF' where id=8; -update noar tt set v0='T7S0T7EJKZKM3QXXKEJ2A2B8J6C7IP' where id=8; -update noar ti set v0='T7S0T7EJKZKM3QXXKEJ2A2B8J6C7IP' where id=8; -update noar tt set b1='I0WCTO2SO5INLDQWBZCUFO9NZ9BN1' where id=8; -update noar ti set b1='I0WCTO2SO5INLDQWBZCUFO9NZ9BN1' where id=8; -update noar tt set v0='FTJL6767C8R4ZZ7YB8B10QUUK' where id=8; -update noar ti set v0='FTJL6767C8R4ZZ7YB8B10QUUK' where id=8; -update noar tt set b2='VL36TG8RJOGEUH67R' where id=8; -update noar ti set b2='VL36TG8RJOGEUH67R' where id=8; -update noar tt set v0='4IXKPPYG9BVTEZRFVOGLCBZ' where id=9; -update noar ti set v0='4IXKPPYG9BVTEZRFVOGLCBZ' where id=9; -update noar tt set b0='AGJY7T1U5KT0FXTBL4FEQK75P3S6' where id=9; -update noar ti set b0='AGJY7T1U5KT0FXTBL4FEQK75P3S6' where id=9; -update noar tt set v0='2LWI00ARFL' where id=9; -update noar ti set v0='2LWI00ARFL' where id=9; -update noar tt set b1='QOPM5O11WXRTTF6WVZPTV8O851RHO4Q' where id=9; -update noar ti set b1='QOPM5O11WXRTTF6WVZPTV8O851RHO4Q' where id=9; -update noar tt set v0='RL0P' where id=9; -update noar ti set v0='RL0P' where id=9; -update noar tt set b2='CPP63Q2IOXWDD4' where id=9; -update noar ti set b2='CPP63Q2IOXWDD4' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 mediumblob null, -b1 tinyblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='21OJJYNQB6DXC3DU9' where id=1; -update noar ti set v0='21OJJYNQB6DXC3DU9' where id=1; -update noar tt set b0='61GHSABART' where id=1; -update noar ti set b0='61GHSABART' where id=1; -update noar tt set v0='964OS' where id=1; -update noar ti set v0='964OS' where id=1; -update noar tt set b1='ZRQ1104R0LCUXR1N' where id=1; -update noar ti set b1='ZRQ1104R0LCUXR1N' where id=1; -update noar tt set v0='GD0I3Z3EL' where id=1; -update noar ti set v0='GD0I3Z3EL' where id=1; -update noar tt set b2='NEX4Y4S' where id=1; -update noar ti set b2='NEX4Y4S' where id=1; -update noar tt set v0='J7G5COJ9O4MZL03C8F3LTNQ9J4M0BG' where id=2; -update noar ti set v0='J7G5COJ9O4MZL03C8F3LTNQ9J4M0BG' where id=2; -update noar tt set b0='KCT7H4I42XOUNF0' where id=2; -update noar ti set b0='KCT7H4I42XOUNF0' where id=2; -update noar tt set v0='VE26XO4P6GIXQGD8X6KOW3Q8WSV1CR' where id=2; -update noar ti set v0='VE26XO4P6GIXQGD8X6KOW3Q8WSV1CR' where id=2; -update noar tt set b1='QQL6EUAYQ9G3ROZPOBT7HOW9FZXUTRI0' where id=2; -update noar ti set b1='QQL6EUAYQ9G3ROZPOBT7HOW9FZXUTRI0' where id=2; -update noar tt set v0='N0GAUEJ60X' where id=2; -update noar ti set v0='N0GAUEJ60X' where id=2; -update noar tt set b2='Q3QP1HZ27QKYGBH6QTE8US9Z' where id=2; -update noar ti set b2='Q3QP1HZ27QKYGBH6QTE8US9Z' where id=2; -update noar tt set v0='TSMVX05CRK8793J' where id=3; -update noar ti set v0='TSMVX05CRK8793J' where id=3; -update noar tt set b0='5517O941L6K11RFH' where id=3; -update noar ti set b0='5517O941L6K11RFH' where id=3; -update noar tt set v0='7UGN' where id=3; -update noar ti set v0='7UGN' where id=3; -update noar tt set b1='H8EY1Y0LTUD88KL710KDZOTR6Z9BW' where id=3; -update noar ti set b1='H8EY1Y0LTUD88KL710KDZOTR6Z9BW' where id=3; -update noar tt set v0='FZ7WPJZ1' where id=3; -update noar ti set v0='FZ7WPJZ1' where id=3; -update noar tt set b2='S3265J2X2V' where id=3; -update noar ti set b2='S3265J2X2V' where id=3; -update noar tt set v0='OH96WT3IS1JHNLYASXCVKSS0UP35' where id=4; -update noar ti set v0='OH96WT3IS1JHNLYASXCVKSS0UP35' where id=4; -update noar tt set b0='29JN14HZZRKFYZK6O4DC8DWPBVZ86D' where id=4; -update noar ti set b0='29JN14HZZRKFYZK6O4DC8DWPBVZ86D' where id=4; -update noar tt set v0='RF2' where id=4; -update noar ti set v0='RF2' where id=4; -update noar tt set b1='YWSDXLGHWDBR5WS8V' where id=4; -update noar ti set b1='YWSDXLGHWDBR5WS8V' where id=4; -update noar tt set v0='6' where id=4; -update noar ti set v0='6' where id=4; -update noar tt set b2='ZKW39A368' where id=4; -update noar ti set b2='ZKW39A368' where id=4; -update noar tt set v0='5VIC7O1ULHW8CM' where id=5; -update noar ti set v0='5VIC7O1ULHW8CM' where id=5; -update noar tt set b0='3LVZF5EBOCDFTW8' where id=5; -update noar ti set b0='3LVZF5EBOCDFTW8' where id=5; -update noar tt set v0='E2DXLBA17' where id=5; -update noar ti set v0='E2DXLBA17' where id=5; -update noar tt set b1='ZH' where id=5; -update noar ti set b1='ZH' where id=5; -update noar tt set v0='NLXA3S' where id=5; -update noar ti set v0='NLXA3S' where id=5; -update noar tt set b2='4LGHNT4Q85I4O7ULVFQQLRUNGZ5' where id=5; -update noar ti set b2='4LGHNT4Q85I4O7ULVFQQLRUNGZ5' where id=5; -update noar tt set v0='U43I4FYRABBHNY9U' where id=6; -update noar ti set v0='U43I4FYRABBHNY9U' where id=6; -update noar tt set b0='FZ' where id=6; -update noar ti set b0='FZ' where id=6; -update noar tt set v0='2TUNSXX5YJHX8F6SABLT' where id=6; -update noar ti set v0='2TUNSXX5YJHX8F6SABLT' where id=6; -update noar tt set b1='48ZP479' where id=6; -update noar ti set b1='48ZP479' where id=6; -update noar tt set v0='EEL7VO4WJHNI' where id=6; -update noar ti set v0='EEL7VO4WJHNI' where id=6; -update noar tt set b2='AM7K5GT1L0NTY1ZNQ0' where id=6; -update noar ti set b2='AM7K5GT1L0NTY1ZNQ0' where id=6; -update noar tt set v0='FVW85RANM6T35BDIO' where id=7; -update noar ti set v0='FVW85RANM6T35BDIO' where id=7; -update noar tt set b0='RJBNVO6QKVKU7P' where id=7; -update noar ti set b0='RJBNVO6QKVKU7P' where id=7; -update noar tt set v0='2UP94M17BJ485Y' where id=7; -update noar ti set v0='2UP94M17BJ485Y' where id=7; -update noar tt set b1='QMUSTOPA2' where id=7; -update noar ti set b1='QMUSTOPA2' where id=7; -update noar tt set v0='V' where id=7; -update noar ti set v0='V' where id=7; -update noar tt set b2='ZNKIGBSS' where id=7; -update noar ti set b2='ZNKIGBSS' where id=7; -update noar tt set v0='HGS9I3I62ELHRQXIW' where id=8; -update noar ti set v0='HGS9I3I62ELHRQXIW' where id=8; -update noar tt set b0='8E6GOZWVA50USLU' where id=8; -update noar ti set b0='8E6GOZWVA50USLU' where id=8; -update noar tt set v0='TQLEVN4' where id=8; -update noar ti set v0='TQLEVN4' where id=8; -update noar tt set b1='EBF9KXB0P4WW6O5JN9MKA' where id=8; -update noar ti set b1='EBF9KXB0P4WW6O5JN9MKA' where id=8; -update noar tt set v0='FXBLG2MD' where id=8; -update noar ti set v0='FXBLG2MD' where id=8; -update noar tt set b2='3S' where id=8; -update noar ti set b2='3S' where id=8; -update noar tt set v0='IJ8PGQ90RT0G64Q7' where id=9; -update noar ti set v0='IJ8PGQ90RT0G64Q7' where id=9; -update noar tt set b0='GLZ5FTW8V2DGJDNZ91IAUT' where id=9; -update noar ti set b0='GLZ5FTW8V2DGJDNZ91IAUT' where id=9; -update noar tt set v0='KBIC3ZWUKB6024XJ2Q9JJ7QX953L' where id=9; -update noar ti set v0='KBIC3ZWUKB6024XJ2Q9JJ7QX953L' where id=9; -update noar tt set b1='A' where id=9; -update noar ti set b1='A' where id=9; -update noar tt set v0='P0R1L09S6AH5I52OHLPO9KCQ' where id=9; -update noar ti set v0='P0R1L09S6AH5I52OHLPO9KCQ' where id=9; -update noar tt set b2='R0F' where id=9; -update noar ti set b2='R0F' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 mediumblob null, -b1 tinyblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='HL1RD2FWCWOD4TPKVWY3' where id=1; -update noar ti set v0='HL1RD2FWCWOD4TPKVWY3' where id=1; -update noar tt set b0='GUKWFY7CPO67USXO7PL' where id=1; -update noar ti set b0='GUKWFY7CPO67USXO7PL' where id=1; -update noar tt set v0='VB8LBUVC' where id=1; -update noar ti set v0='VB8LBUVC' where id=1; -update noar tt set b1='4DX4NT96ZZD' where id=1; -update noar ti set b1='4DX4NT96ZZD' where id=1; -update noar tt set v0='X2724PXIMMDDIFPRNG2' where id=1; -update noar ti set v0='X2724PXIMMDDIFPRNG2' where id=1; -update noar tt set b2='V8A2PMQ4YJKNDI' where id=1; -update noar ti set b2='V8A2PMQ4YJKNDI' where id=1; -update noar tt set v0='7HFLNHBQ' where id=2; -update noar ti set v0='7HFLNHBQ' where id=2; -update noar tt set b0='C1OH562IFS14PO9VJ' where id=2; -update noar ti set b0='C1OH562IFS14PO9VJ' where id=2; -update noar tt set v0='1K' where id=2; -update noar ti set v0='1K' where id=2; -update noar tt set b1='Q4HPM4N2IUAZTT' where id=2; -update noar ti set b1='Q4HPM4N2IUAZTT' where id=2; -update noar tt set v0='QBVCL' where id=2; -update noar ti set v0='QBVCL' where id=2; -update noar tt set b2='AFJ7YI0D3RZEF1NH5USXXE2Z' where id=2; -update noar ti set b2='AFJ7YI0D3RZEF1NH5USXXE2Z' where id=2; -update noar tt set v0='6TJQDY0VOX9ZFTNNBV58P35VN' where id=3; -update noar ti set v0='6TJQDY0VOX9ZFTNNBV58P35VN' where id=3; -update noar tt set b0='JP5W9QVIITSZGKMHP' where id=3; -update noar ti set b0='JP5W9QVIITSZGKMHP' where id=3; -update noar tt set v0='BB7D18JDANP' where id=3; -update noar ti set v0='BB7D18JDANP' where id=3; -update noar tt set b1='VOYP4GZ250RG6Y' where id=3; -update noar ti set b1='VOYP4GZ250RG6Y' where id=3; -update noar tt set v0='D' where id=3; -update noar ti set v0='D' where id=3; -update noar tt set b2='XZKWF6T3L34' where id=3; -update noar ti set b2='XZKWF6T3L34' where id=3; -update noar tt set v0='FL9YY5Y' where id=4; -update noar ti set v0='FL9YY5Y' where id=4; -update noar tt set b0='2ZAYPJ7S8ETB1WMZFCDBPMT' where id=4; -update noar ti set b0='2ZAYPJ7S8ETB1WMZFCDBPMT' where id=4; -update noar tt set v0='2XYMN595X4221C60V2JUREDT' where id=4; -update noar ti set v0='2XYMN595X4221C60V2JUREDT' where id=4; -update noar tt set b1='FWWUMNSB5Y6I61ETVSE' where id=4; -update noar ti set b1='FWWUMNSB5Y6I61ETVSE' where id=4; -update noar tt set v0='CTXJTU7HOW2LCF45410QDFTR2' where id=4; -update noar ti set v0='CTXJTU7HOW2LCF45410QDFTR2' where id=4; -update noar tt set b2='6BCKTKY34QPMOZ' where id=4; -update noar ti set b2='6BCKTKY34QPMOZ' where id=4; -update noar tt set v0='3SZ3Y9HOS6PV5KXCOUPFKB' where id=5; -update noar ti set v0='3SZ3Y9HOS6PV5KXCOUPFKB' where id=5; -update noar tt set b0='1LL' where id=5; -update noar ti set b0='1LL' where id=5; -update noar tt set v0='06T19ZH7UK1590GPD4Q' where id=5; -update noar ti set v0='06T19ZH7UK1590GPD4Q' where id=5; -update noar tt set b1='BI8' where id=5; -update noar ti set b1='BI8' where id=5; -update noar tt set v0='QVGXLF' where id=5; -update noar ti set v0='QVGXLF' where id=5; -update noar tt set b2='E1TEACSKGPHJX3MEXRAOOC8LRN' where id=5; -update noar ti set b2='E1TEACSKGPHJX3MEXRAOOC8LRN' where id=5; -update noar tt set v0='VQWUVKPU1NFIHRJV5JE7HLLUI6YW3TC2' where id=6; -update noar ti set v0='VQWUVKPU1NFIHRJV5JE7HLLUI6YW3TC2' where id=6; -update noar tt set b0='UTJO18N5VD7RSM2DV6BU66MZ' where id=6; -update noar ti set b0='UTJO18N5VD7RSM2DV6BU66MZ' where id=6; -update noar tt set v0='JNU' where id=6; -update noar ti set v0='JNU' where id=6; -update noar tt set b1='7TMRYOTWM5' where id=6; -update noar ti set b1='7TMRYOTWM5' where id=6; -update noar tt set v0='V5B3UO1DNOGJF0IJWLYJ0' where id=6; -update noar ti set v0='V5B3UO1DNOGJF0IJWLYJ0' where id=6; -update noar tt set b2='BV' where id=6; -update noar ti set b2='BV' where id=6; -update noar tt set v0='RD19WOMFOHP1NS6B4RDRAJ' where id=7; -update noar ti set v0='RD19WOMFOHP1NS6B4RDRAJ' where id=7; -update noar tt set b0='G0UK0XTO9V4QJWM25FM2' where id=7; -update noar ti set b0='G0UK0XTO9V4QJWM25FM2' where id=7; -update noar tt set v0='NNRAG27BONARLR9B' where id=7; -update noar ti set v0='NNRAG27BONARLR9B' where id=7; -update noar tt set b1='42NGZEDM' where id=7; -update noar ti set b1='42NGZEDM' where id=7; -update noar tt set v0='Y29RHMH22A7Q8CNEDR5WA1Z32DTQ' where id=7; -update noar ti set v0='Y29RHMH22A7Q8CNEDR5WA1Z32DTQ' where id=7; -update noar tt set b2='94RUT3UYSN8UZV390BR6ZJ0QDLVPORGL' where id=7; -update noar ti set b2='94RUT3UYSN8UZV390BR6ZJ0QDLVPORGL' where id=7; -update noar tt set v0='5U1JR31LDT5E418MHIE0RO81EK93T' where id=8; -update noar ti set v0='5U1JR31LDT5E418MHIE0RO81EK93T' where id=8; -update noar tt set b0='069PFK2GC' where id=8; -update noar ti set b0='069PFK2GC' where id=8; -update noar tt set v0='ZXI19RYQ2ERCRAEM02' where id=8; -update noar ti set v0='ZXI19RYQ2ERCRAEM02' where id=8; -update noar tt set b1='JJQHY2KHYJU5XRJ95NTX4SYFFGAP' where id=8; -update noar ti set b1='JJQHY2KHYJU5XRJ95NTX4SYFFGAP' where id=8; -update noar tt set v0='XBQS2DWSR0036PSS7CDBMOMU859' where id=8; -update noar ti set v0='XBQS2DWSR0036PSS7CDBMOMU859' where id=8; -update noar tt set b2='V4T4GEVUZ4Q21Q0S5CZSLDO' where id=8; -update noar ti set b2='V4T4GEVUZ4Q21Q0S5CZSLDO' where id=8; -update noar tt set v0='4DCD6O32EFXIHM548S' where id=9; -update noar ti set v0='4DCD6O32EFXIHM548S' where id=9; -update noar tt set b0='1XPL50ZSNGCBIIMOE' where id=9; -update noar ti set b0='1XPL50ZSNGCBIIMOE' where id=9; -update noar tt set v0='JTHEBALS7W51UD' where id=9; -update noar ti set v0='JTHEBALS7W51UD' where id=9; -update noar tt set b1='7Z75FTH7MPSEEBU8BGCGVAC' where id=9; -update noar ti set b1='7Z75FTH7MPSEEBU8BGCGVAC' where id=9; -update noar tt set v0='506P0VY7JEZTBFFJ7ZQ7OC1ZKY3AIG' where id=9; -update noar ti set v0='506P0VY7JEZTBFFJ7ZQ7OC1ZKY3AIG' where id=9; -update noar tt set b2='4O' where id=9; -update noar ti set b2='4O' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 mediumblob not null, -b1 tinyblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='CSWHY390L8CWLFRKRMSRIE1G' where id=1; -update noar ti set v0='CSWHY390L8CWLFRKRMSRIE1G' where id=1; -update noar tt set b0='XS4YW8N0' where id=1; -update noar ti set b0='XS4YW8N0' where id=1; -update noar tt set v0='OOZLH556CM1CMKL8VRGH89Q' where id=1; -update noar ti set v0='OOZLH556CM1CMKL8VRGH89Q' where id=1; -update noar tt set b1='UOY7XP9Q3I' where id=1; -update noar ti set b1='UOY7XP9Q3I' where id=1; -update noar tt set v0='BB1OQYVROCIIZ6020URF0AV6CYT' where id=1; -update noar ti set v0='BB1OQYVROCIIZ6020URF0AV6CYT' where id=1; -update noar tt set b2='1NJT7HN7O6WKFSVEYEAJYYJEV1S6D0X' where id=1; -update noar ti set b2='1NJT7HN7O6WKFSVEYEAJYYJEV1S6D0X' where id=1; -update noar tt set v0='WJ8MP1V761L92RBLWX5QJSS' where id=2; -update noar ti set v0='WJ8MP1V761L92RBLWX5QJSS' where id=2; -update noar tt set b0='YS' where id=2; -update noar ti set b0='YS' where id=2; -update noar tt set v0='2MQ' where id=2; -update noar ti set v0='2MQ' where id=2; -update noar tt set b1='6H' where id=2; -update noar ti set b1='6H' where id=2; -update noar tt set v0='8TXQAJG1TJOD8OWU84QQXMB' where id=2; -update noar ti set v0='8TXQAJG1TJOD8OWU84QQXMB' where id=2; -update noar tt set b2='SU4Q525Q8SF1LULLX1FJ8D0J4UOZJ' where id=2; -update noar ti set b2='SU4Q525Q8SF1LULLX1FJ8D0J4UOZJ' where id=2; -update noar tt set v0='ZSZJCRHSDTASOKP' where id=3; -update noar ti set v0='ZSZJCRHSDTASOKP' where id=3; -update noar tt set b0='PFEGVSPDPNL0RB64PWHLBP5W3' where id=3; -update noar ti set b0='PFEGVSPDPNL0RB64PWHLBP5W3' where id=3; -update noar tt set v0='DJAYWIET5A2' where id=3; -update noar ti set v0='DJAYWIET5A2' where id=3; -update noar tt set b1='XWSG1JZ82J4JVD0' where id=3; -update noar ti set b1='XWSG1JZ82J4JVD0' where id=3; -update noar tt set v0='W9GL4WA4I12BVYFHNV19CA0CZA' where id=3; -update noar ti set v0='W9GL4WA4I12BVYFHNV19CA0CZA' where id=3; -update noar tt set b2='E9O5CCAAZJXOVN4XJAVV' where id=3; -update noar ti set b2='E9O5CCAAZJXOVN4XJAVV' where id=3; -update noar tt set v0='T0FCMLHKT' where id=4; -update noar ti set v0='T0FCMLHKT' where id=4; -update noar tt set b0='5A' where id=4; -update noar ti set b0='5A' where id=4; -update noar tt set v0='G05M' where id=4; -update noar ti set v0='G05M' where id=4; -update noar tt set b1='BH4TOSLM0LA8B2WVF1C0WJGGUJ8DN' where id=4; -update noar ti set b1='BH4TOSLM0LA8B2WVF1C0WJGGUJ8DN' where id=4; -update noar tt set v0='1878E2FQ' where id=4; -update noar ti set v0='1878E2FQ' where id=4; -update noar tt set b2='KI' where id=4; -update noar ti set b2='KI' where id=4; -update noar tt set v0='H39LGTIKPR93ZSUR50YC0RTZE' where id=5; -update noar ti set v0='H39LGTIKPR93ZSUR50YC0RTZE' where id=5; -update noar tt set b0='IL0XN03E38173DN20XVVJFNYST' where id=5; -update noar ti set b0='IL0XN03E38173DN20XVVJFNYST' where id=5; -update noar tt set v0='WCOQXVSP6' where id=5; -update noar ti set v0='WCOQXVSP6' where id=5; -update noar tt set b1='FWTQY8I13RAC88OE' where id=5; -update noar ti set b1='FWTQY8I13RAC88OE' where id=5; -update noar tt set v0='DT5JQ7JD7DR309L7MAF4U7KQ4R1G' where id=5; -update noar ti set v0='DT5JQ7JD7DR309L7MAF4U7KQ4R1G' where id=5; -update noar tt set b2='38QYWYEEHY9J8TD8OJNYPIXMP8K2' where id=5; -update noar ti set b2='38QYWYEEHY9J8TD8OJNYPIXMP8K2' where id=5; -update noar tt set v0='V5SZ071DCH2SBX0JWCAAU0G' where id=6; -update noar ti set v0='V5SZ071DCH2SBX0JWCAAU0G' where id=6; -update noar tt set b0='3RP2KUVAJU' where id=6; -update noar ti set b0='3RP2KUVAJU' where id=6; -update noar tt set v0='TF5ULM69909MG1F4XWE' where id=6; -update noar ti set v0='TF5ULM69909MG1F4XWE' where id=6; -update noar tt set b1='TOC1UUVPJ5ZMQMN7XZQG0POSHXIAW90T' where id=6; -update noar ti set b1='TOC1UUVPJ5ZMQMN7XZQG0POSHXIAW90T' where id=6; -update noar tt set v0='P' where id=6; -update noar ti set v0='P' where id=6; -update noar tt set b2='Z9C25Z' where id=6; -update noar ti set b2='Z9C25Z' where id=6; -update noar tt set v0='CD275S' where id=7; -update noar ti set v0='CD275S' where id=7; -update noar tt set b0='QY1BSI0UIHP9XNDBM7RKR1PM' where id=7; -update noar ti set b0='QY1BSI0UIHP9XNDBM7RKR1PM' where id=7; -update noar tt set v0='J2S9I1CSEFIVF8K' where id=7; -update noar ti set v0='J2S9I1CSEFIVF8K' where id=7; -update noar tt set b1='6OGLSTEL3E7IQ10QIW' where id=7; -update noar ti set b1='6OGLSTEL3E7IQ10QIW' where id=7; -update noar tt set v0='HWMBEYSC91FWM14NAXYRSDQB' where id=7; -update noar ti set v0='HWMBEYSC91FWM14NAXYRSDQB' where id=7; -update noar tt set b2='12A8WOF6J8RSY7H111BFD229TE7SGYC' where id=7; -update noar ti set b2='12A8WOF6J8RSY7H111BFD229TE7SGYC' where id=7; -update noar tt set v0='9Z4IZW04452H1' where id=8; -update noar ti set v0='9Z4IZW04452H1' where id=8; -update noar tt set b0='RTXOE8C6PJ4IV5NIF2NMF5B2Y' where id=8; -update noar ti set b0='RTXOE8C6PJ4IV5NIF2NMF5B2Y' where id=8; -update noar tt set v0='T86CCN' where id=8; -update noar ti set v0='T86CCN' where id=8; -update noar tt set b1='7OJFX9JQ8ZG1B6VW3G8LFBOEGKNLB' where id=8; -update noar ti set b1='7OJFX9JQ8ZG1B6VW3G8LFBOEGKNLB' where id=8; -update noar tt set v0='5' where id=8; -update noar ti set v0='5' where id=8; -update noar tt set b2='7O5RD2JDBFS8BDKN8TJ14' where id=8; -update noar ti set b2='7O5RD2JDBFS8BDKN8TJ14' where id=8; -update noar tt set v0='B52CAJI96TQK5B975' where id=9; -update noar ti set v0='B52CAJI96TQK5B975' where id=9; -update noar tt set b0='KMPC5DOVZIS0Y' where id=9; -update noar ti set b0='KMPC5DOVZIS0Y' where id=9; -update noar tt set v0='4W4GKTWP3E' where id=9; -update noar ti set v0='4W4GKTWP3E' where id=9; -update noar tt set b1='UBVHJA' where id=9; -update noar ti set b1='UBVHJA' where id=9; -update noar tt set v0='5HCU1KJB2F9A147GBIZSUML45MKS3LVV' where id=9; -update noar ti set v0='5HCU1KJB2F9A147GBIZSUML45MKS3LVV' where id=9; -update noar tt set b2='YD47DNMEJREBVGOXPIYG' where id=9; -update noar ti set b2='YD47DNMEJREBVGOXPIYG' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 mediumblob not null, -b1 tinyblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='3YGSCOZWC4194UN5VLNJNO0PTZ' where id=1; -update noar ti set v0='3YGSCOZWC4194UN5VLNJNO0PTZ' where id=1; -update noar tt set b0='RLLVE0MLL4' where id=1; -update noar ti set b0='RLLVE0MLL4' where id=1; -update noar tt set v0='WM6WT7538RRAD9JENUCZS69V6B' where id=1; -update noar ti set v0='WM6WT7538RRAD9JENUCZS69V6B' where id=1; -update noar tt set b1='QLSPSUAHG0ITB1M0JF00FKF' where id=1; -update noar ti set b1='QLSPSUAHG0ITB1M0JF00FKF' where id=1; -update noar tt set v0='4J8RD4ZUXU28PBIFTYTJ876013' where id=1; -update noar ti set v0='4J8RD4ZUXU28PBIFTYTJ876013' where id=1; -update noar tt set b2='Y7DMSACCPS' where id=1; -update noar ti set b2='Y7DMSACCPS' where id=1; -update noar tt set v0='EMTHMD92N6FXIDBT82Q78Y' where id=2; -update noar ti set v0='EMTHMD92N6FXIDBT82Q78Y' where id=2; -update noar tt set b0='4BF' where id=2; -update noar ti set b0='4BF' where id=2; -update noar tt set v0='IETIONXKU877UO4YJX64ORT9SMM6B01' where id=2; -update noar ti set v0='IETIONXKU877UO4YJX64ORT9SMM6B01' where id=2; -update noar tt set b1='Q9RCTU5OS00KYALGTX1MGY3JK' where id=2; -update noar ti set b1='Q9RCTU5OS00KYALGTX1MGY3JK' where id=2; -update noar tt set v0='46X' where id=2; -update noar ti set v0='46X' where id=2; -update noar tt set b2='6P76O29FUK' where id=2; -update noar ti set b2='6P76O29FUK' where id=2; -update noar tt set v0='KNK5LP785Z9EJFL2PYE9PGXWN' where id=3; -update noar ti set v0='KNK5LP785Z9EJFL2PYE9PGXWN' where id=3; -update noar tt set b0='CX9DX2G5ZW1AF83XWU3POKQXJLC7' where id=3; -update noar ti set b0='CX9DX2G5ZW1AF83XWU3POKQXJLC7' where id=3; -update noar tt set v0='PKO68AA992J9LZW' where id=3; -update noar ti set v0='PKO68AA992J9LZW' where id=3; -update noar tt set b1='R1OXBZRHZHUUJ8HBVSPJ' where id=3; -update noar ti set b1='R1OXBZRHZHUUJ8HBVSPJ' where id=3; -update noar tt set v0='ZFLCFTSQ2KMFXBYDRXAVBFM' where id=3; -update noar ti set v0='ZFLCFTSQ2KMFXBYDRXAVBFM' where id=3; -update noar tt set b2='B4' where id=3; -update noar ti set b2='B4' where id=3; -update noar tt set v0='C5DL21QOX' where id=4; -update noar ti set v0='C5DL21QOX' where id=4; -update noar tt set b0='L7V2LYRMO54PWBYRUMEYLW66K09PEQ' where id=4; -update noar ti set b0='L7V2LYRMO54PWBYRUMEYLW66K09PEQ' where id=4; -update noar tt set v0='AHNHK5E' where id=4; -update noar ti set v0='AHNHK5E' where id=4; -update noar tt set b1='QLL2GEQ98LHF11FMET6Q4R4YCGA' where id=4; -update noar ti set b1='QLL2GEQ98LHF11FMET6Q4R4YCGA' where id=4; -update noar tt set v0='F45F9' where id=4; -update noar ti set v0='F45F9' where id=4; -update noar tt set b2='KY2K70FKYGBEQP1H7K7LHKNV42DU74N' where id=4; -update noar ti set b2='KY2K70FKYGBEQP1H7K7LHKNV42DU74N' where id=4; -update noar tt set v0='K1MGDJ09245C3' where id=5; -update noar ti set v0='K1MGDJ09245C3' where id=5; -update noar tt set b0='RT27SVYKHM7K8QIL8EWMDHSZV' where id=5; -update noar ti set b0='RT27SVYKHM7K8QIL8EWMDHSZV' where id=5; -update noar tt set v0='A0FTUZG2RS8V66' where id=5; -update noar ti set v0='A0FTUZG2RS8V66' where id=5; -update noar tt set b1='AOUKDUT2L87LJNC40XY' where id=5; -update noar ti set b1='AOUKDUT2L87LJNC40XY' where id=5; -update noar tt set v0='4LLGLE23FSVI6PM0YW9CL7AIO2' where id=5; -update noar ti set v0='4LLGLE23FSVI6PM0YW9CL7AIO2' where id=5; -update noar tt set b2='2ID80FL1J' where id=5; -update noar ti set b2='2ID80FL1J' where id=5; -update noar tt set v0='5XCXWCPUJ5RFQ5CQ36BQGIPWLWS' where id=6; -update noar ti set v0='5XCXWCPUJ5RFQ5CQ36BQGIPWLWS' where id=6; -update noar tt set b0='IKVATZQ3DT6DGO7P3Y' where id=6; -update noar ti set b0='IKVATZQ3DT6DGO7P3Y' where id=6; -update noar tt set v0='CKAU5ELPA7E0' where id=6; -update noar ti set v0='CKAU5ELPA7E0' where id=6; -update noar tt set b1='MYJJ6SDQ0ARW03RK3J8ZXGVGF3TEKV' where id=6; -update noar ti set b1='MYJJ6SDQ0ARW03RK3J8ZXGVGF3TEKV' where id=6; -update noar tt set v0='UW2GAW98TW4PVN09SKS7I0LYX6Z' where id=6; -update noar ti set v0='UW2GAW98TW4PVN09SKS7I0LYX6Z' where id=6; -update noar tt set b2='4Z0LFG5M12C74TFQODACECPSXTA' where id=6; -update noar ti set b2='4Z0LFG5M12C74TFQODACECPSXTA' where id=6; -update noar tt set v0='A54L0IZUO00M3S6IKOVR' where id=7; -update noar ti set v0='A54L0IZUO00M3S6IKOVR' where id=7; -update noar tt set b0='77LE8LAX8E80VBZ' where id=7; -update noar ti set b0='77LE8LAX8E80VBZ' where id=7; -update noar tt set v0='ESD10HZONAA' where id=7; -update noar ti set v0='ESD10HZONAA' where id=7; -update noar tt set b1='457RXVL6' where id=7; -update noar ti set b1='457RXVL6' where id=7; -update noar tt set v0='K3GB1CMRX' where id=7; -update noar ti set v0='K3GB1CMRX' where id=7; -update noar tt set b2='G0PO81R' where id=7; -update noar ti set b2='G0PO81R' where id=7; -update noar tt set v0='K21V4YJBT3ZFXEZJ0SXS' where id=8; -update noar ti set v0='K21V4YJBT3ZFXEZJ0SXS' where id=8; -update noar tt set b0='G8GR4K' where id=8; -update noar ti set b0='G8GR4K' where id=8; -update noar tt set v0='EBCN' where id=8; -update noar ti set v0='EBCN' where id=8; -update noar tt set b1='XDDJST0I9CWK904C3IWIMMJ5FPVLK' where id=8; -update noar ti set b1='XDDJST0I9CWK904C3IWIMMJ5FPVLK' where id=8; -update noar tt set v0='1FT' where id=8; -update noar ti set v0='1FT' where id=8; -update noar tt set b2='MR' where id=8; -update noar ti set b2='MR' where id=8; -update noar tt set v0='P' where id=9; -update noar ti set v0='P' where id=9; -update noar tt set b0='XAQHI1JW82OAH6PDMD749H8' where id=9; -update noar ti set b0='XAQHI1JW82OAH6PDMD749H8' where id=9; -update noar tt set v0='UBJBHR0XXVYZ1JIP8SL96255U7' where id=9; -update noar ti set v0='UBJBHR0XXVYZ1JIP8SL96255U7' where id=9; -update noar tt set b1='6VVB2HJPGGPQDLXUF0GGZS8P' where id=9; -update noar ti set b1='6VVB2HJPGGPQDLXUF0GGZS8P' where id=9; -update noar tt set v0='OTB90UD93G6MFYD4J17ZPHXGVG1' where id=9; -update noar ti set v0='OTB90UD93G6MFYD4J17ZPHXGVG1' where id=9; -update noar tt set b2='ABLHPE8D6321TJA2K7X78G3YV' where id=9; -update noar ti set b2='ABLHPE8D6321TJA2K7X78G3YV' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 mediumblob null, -b1 blob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='Q' where id=1; -update noar ti set v0='Q' where id=1; -update noar tt set b0='QF6QYXNCNRA' where id=1; -update noar ti set b0='QF6QYXNCNRA' where id=1; -update noar tt set v0='GPHGIOU' where id=1; -update noar ti set v0='GPHGIOU' where id=1; -update noar tt set b1='EWT1PVYCPN0O73MOXJFW3NTD' where id=1; -update noar ti set b1='EWT1PVYCPN0O73MOXJFW3NTD' where id=1; -update noar tt set v0='BYFU44IZ7Y' where id=1; -update noar ti set v0='BYFU44IZ7Y' where id=1; -update noar tt set b2='AVTD6LLI' where id=1; -update noar ti set b2='AVTD6LLI' where id=1; -update noar tt set v0='ECUPN3WQRSN1MRRYIESR51VVKUMT' where id=2; -update noar ti set v0='ECUPN3WQRSN1MRRYIESR51VVKUMT' where id=2; -update noar tt set b0='8NRUDSOK3N' where id=2; -update noar ti set b0='8NRUDSOK3N' where id=2; -update noar tt set v0='7N5ROF' where id=2; -update noar ti set v0='7N5ROF' where id=2; -update noar tt set b1='IJSJZBU6SBCI' where id=2; -update noar ti set b1='IJSJZBU6SBCI' where id=2; -update noar tt set v0='XGSRV' where id=2; -update noar ti set v0='XGSRV' where id=2; -update noar tt set b2='TX7WNEUYS0PP8U6HZKWQZR400YUHRJYK' where id=2; -update noar ti set b2='TX7WNEUYS0PP8U6HZKWQZR400YUHRJYK' where id=2; -update noar tt set v0='SW' where id=3; -update noar ti set v0='SW' where id=3; -update noar tt set b0='D0ERQQE7UWE3EQ' where id=3; -update noar ti set b0='D0ERQQE7UWE3EQ' where id=3; -update noar tt set v0='BTK1SCTP609T0N6LZX7PMB6CZ6XACJL' where id=3; -update noar ti set v0='BTK1SCTP609T0N6LZX7PMB6CZ6XACJL' where id=3; -update noar tt set b1='U55Z4C2V' where id=3; -update noar ti set b1='U55Z4C2V' where id=3; -update noar tt set v0='7OLHVM8M8LQGCX34X287S' where id=3; -update noar ti set v0='7OLHVM8M8LQGCX34X287S' where id=3; -update noar tt set b2='2KHEWFRZR343CN54GO89OV8VIDHDPW' where id=3; -update noar ti set b2='2KHEWFRZR343CN54GO89OV8VIDHDPW' where id=3; -update noar tt set v0='MCTD80HA6YBEZBP5KW0FU4' where id=4; -update noar ti set v0='MCTD80HA6YBEZBP5KW0FU4' where id=4; -update noar tt set b0='8PXX4HM' where id=4; -update noar ti set b0='8PXX4HM' where id=4; -update noar tt set v0='7EDT6RR3J8' where id=4; -update noar ti set v0='7EDT6RR3J8' where id=4; -update noar tt set b1='ABYHAUSDNK' where id=4; -update noar ti set b1='ABYHAUSDNK' where id=4; -update noar tt set v0='YFV8I8' where id=4; -update noar ti set v0='YFV8I8' where id=4; -update noar tt set b2='N6NDGXA3URTL355' where id=4; -update noar ti set b2='N6NDGXA3URTL355' where id=4; -update noar tt set v0='ZF' where id=5; -update noar ti set v0='ZF' where id=5; -update noar tt set b0='3WS6WJCL24' where id=5; -update noar ti set b0='3WS6WJCL24' where id=5; -update noar tt set v0='92T7NPCBODHJT750R9C7KBZZQY79' where id=5; -update noar ti set v0='92T7NPCBODHJT750R9C7KBZZQY79' where id=5; -update noar tt set b1='VW2ALM9G6N1M9SHJV6AYJ1SEFVHL3' where id=5; -update noar ti set b1='VW2ALM9G6N1M9SHJV6AYJ1SEFVHL3' where id=5; -update noar tt set v0='V97FM86HPSNVTC6U7FFA3LWPHTC61LS4' where id=5; -update noar ti set v0='V97FM86HPSNVTC6U7FFA3LWPHTC61LS4' where id=5; -update noar tt set b2='JDDZMKV89XRKFJID0L4F41' where id=5; -update noar ti set b2='JDDZMKV89XRKFJID0L4F41' where id=5; -update noar tt set v0='OEE8T' where id=6; -update noar ti set v0='OEE8T' where id=6; -update noar tt set b0='EX7' where id=6; -update noar ti set b0='EX7' where id=6; -update noar tt set v0='7GMGBMBI' where id=6; -update noar ti set v0='7GMGBMBI' where id=6; -update noar tt set b1='8UAD34JETQCE' where id=6; -update noar ti set b1='8UAD34JETQCE' where id=6; -update noar tt set v0='CGZ7AQYM5GACY5O9OM6H5JS' where id=6; -update noar ti set v0='CGZ7AQYM5GACY5O9OM6H5JS' where id=6; -update noar tt set b2='HCJU096DGIYZYB3Z9KEJ0O64YC' where id=6; -update noar ti set b2='HCJU096DGIYZYB3Z9KEJ0O64YC' where id=6; -update noar tt set v0='RP' where id=7; -update noar ti set v0='RP' where id=7; -update noar tt set b0='GKGHPBWZE' where id=7; -update noar ti set b0='GKGHPBWZE' where id=7; -update noar tt set v0='9FMWXHDJ00YF5923W' where id=7; -update noar ti set v0='9FMWXHDJ00YF5923W' where id=7; -update noar tt set b1='QD4' where id=7; -update noar ti set b1='QD4' where id=7; -update noar tt set v0='DIPTXOWFRRNBELFY' where id=7; -update noar ti set v0='DIPTXOWFRRNBELFY' where id=7; -update noar tt set b2='BPRWG3CLLIU' where id=7; -update noar ti set b2='BPRWG3CLLIU' where id=7; -update noar tt set v0='UYQ' where id=8; -update noar ti set v0='UYQ' where id=8; -update noar tt set b0='M4GQ5CDULHQFMAQ0' where id=8; -update noar ti set b0='M4GQ5CDULHQFMAQ0' where id=8; -update noar tt set v0='NMOZTXTI4TKY' where id=8; -update noar ti set v0='NMOZTXTI4TKY' where id=8; -update noar tt set b1='7' where id=8; -update noar ti set b1='7' where id=8; -update noar tt set v0='MBB' where id=8; -update noar ti set v0='MBB' where id=8; -update noar tt set b2='ZNZP4Y23FNFN5V8M704IYBA9Q0DHTMZK' where id=8; -update noar ti set b2='ZNZP4Y23FNFN5V8M704IYBA9Q0DHTMZK' where id=8; -update noar tt set v0='0DFXPNYAHJ0M5G2GRZVEMBEQ3' where id=9; -update noar ti set v0='0DFXPNYAHJ0M5G2GRZVEMBEQ3' where id=9; -update noar tt set b0='T1E9V1D4HTYFOSWCTDYSEA541EU4D' where id=9; -update noar ti set b0='T1E9V1D4HTYFOSWCTDYSEA541EU4D' where id=9; -update noar tt set v0='EMUT16' where id=9; -update noar ti set v0='EMUT16' where id=9; -update noar tt set b1='GQNKZ8M' where id=9; -update noar ti set b1='GQNKZ8M' where id=9; -update noar tt set v0='O40BP' where id=9; -update noar ti set v0='O40BP' where id=9; -update noar tt set b2='SINGGHTR9MS5J' where id=9; -update noar ti set b2='SINGGHTR9MS5J' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 mediumblob null, -b1 blob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='C6I524804P4S2BCUPBGK24QJZJVEID' where id=1; -update noar ti set v0='C6I524804P4S2BCUPBGK24QJZJVEID' where id=1; -update noar tt set b0='GODPXG0KVZUBUML74GOAQQJAT' where id=1; -update noar ti set b0='GODPXG0KVZUBUML74GOAQQJAT' where id=1; -update noar tt set v0='IL36WANFZC' where id=1; -update noar ti set v0='IL36WANFZC' where id=1; -update noar tt set b1='718SKGB08T8F2JNH' where id=1; -update noar ti set b1='718SKGB08T8F2JNH' where id=1; -update noar tt set v0='6QQS20G7XG' where id=1; -update noar ti set v0='6QQS20G7XG' where id=1; -update noar tt set b2='936DSFV' where id=1; -update noar ti set b2='936DSFV' where id=1; -update noar tt set v0='HCP6V4IGG1S9N1153' where id=2; -update noar ti set v0='HCP6V4IGG1S9N1153' where id=2; -update noar tt set b0='76XSNU7QUCWWXH5YJY5ID328' where id=2; -update noar ti set b0='76XSNU7QUCWWXH5YJY5ID328' where id=2; -update noar tt set v0='3BZZT5KBVVD0T6GFT5ZDXP1MB' where id=2; -update noar ti set v0='3BZZT5KBVVD0T6GFT5ZDXP1MB' where id=2; -update noar tt set b1='GO6S03BI7B' where id=2; -update noar ti set b1='GO6S03BI7B' where id=2; -update noar tt set v0='3Y1L5KZFWL8' where id=2; -update noar ti set v0='3Y1L5KZFWL8' where id=2; -update noar tt set b2='0SAVNFXS' where id=2; -update noar ti set b2='0SAVNFXS' where id=2; -update noar tt set v0='ORJ7IA0SITJDG' where id=3; -update noar ti set v0='ORJ7IA0SITJDG' where id=3; -update noar tt set b0='I8VTVVG0SJ9NJ' where id=3; -update noar ti set b0='I8VTVVG0SJ9NJ' where id=3; -update noar tt set v0='W1DXHCGPUQ4WAP15WE2NTT' where id=3; -update noar ti set v0='W1DXHCGPUQ4WAP15WE2NTT' where id=3; -update noar tt set b1='KIQ25ORK9XF1HXLR8NYL38V0PXM1' where id=3; -update noar ti set b1='KIQ25ORK9XF1HXLR8NYL38V0PXM1' where id=3; -update noar tt set v0='8V2692RPN' where id=3; -update noar ti set v0='8V2692RPN' where id=3; -update noar tt set b2='MRUK27B216ND2VY7LU' where id=3; -update noar ti set b2='MRUK27B216ND2VY7LU' where id=3; -update noar tt set v0='9JDGBG1FQM2ZC' where id=4; -update noar ti set v0='9JDGBG1FQM2ZC' where id=4; -update noar tt set b0='JF91RAHW8EYTVMFFVVOZN5C8OXY' where id=4; -update noar ti set b0='JF91RAHW8EYTVMFFVVOZN5C8OXY' where id=4; -update noar tt set v0='7VT1Q0S7K9IXB67DI4V38G' where id=4; -update noar ti set v0='7VT1Q0S7K9IXB67DI4V38G' where id=4; -update noar tt set b1='VULZMFMGV790' where id=4; -update noar ti set b1='VULZMFMGV790' where id=4; -update noar tt set v0='B0JJ6UUV8FZZO9' where id=4; -update noar ti set v0='B0JJ6UUV8FZZO9' where id=4; -update noar tt set b2='ZSRXYK66R0TPVJV9A' where id=4; -update noar ti set b2='ZSRXYK66R0TPVJV9A' where id=4; -update noar tt set v0='0MD30BSTL64ZZ3IZ7WPRUUU8H8LKLVS' where id=5; -update noar ti set v0='0MD30BSTL64ZZ3IZ7WPRUUU8H8LKLVS' where id=5; -update noar tt set b0='C32JNFWQZ' where id=5; -update noar ti set b0='C32JNFWQZ' where id=5; -update noar tt set v0='5W8S' where id=5; -update noar ti set v0='5W8S' where id=5; -update noar tt set b1='ZJTKDSFHNYGPRQNO2LJ3' where id=5; -update noar ti set b1='ZJTKDSFHNYGPRQNO2LJ3' where id=5; -update noar tt set v0='5D8LBSCUJB9PL9VC9X95WWONY12' where id=5; -update noar ti set v0='5D8LBSCUJB9PL9VC9X95WWONY12' where id=5; -update noar tt set b2='7P2G' where id=5; -update noar ti set b2='7P2G' where id=5; -update noar tt set v0='0CBM31M1W' where id=6; -update noar ti set v0='0CBM31M1W' where id=6; -update noar tt set b0='RT629VIM3YR5H0FPCGLYBO' where id=6; -update noar ti set b0='RT629VIM3YR5H0FPCGLYBO' where id=6; -update noar tt set v0='1VFUOEF2GR4D9H1UYT82M1' where id=6; -update noar ti set v0='1VFUOEF2GR4D9H1UYT82M1' where id=6; -update noar tt set b1='9J73GRC1' where id=6; -update noar ti set b1='9J73GRC1' where id=6; -update noar tt set v0='HQ0M0PFDVJYZC' where id=6; -update noar ti set v0='HQ0M0PFDVJYZC' where id=6; -update noar tt set b2='QPOOQJII' where id=6; -update noar ti set b2='QPOOQJII' where id=6; -update noar tt set v0='K' where id=7; -update noar ti set v0='K' where id=7; -update noar tt set b0='OP' where id=7; -update noar ti set b0='OP' where id=7; -update noar tt set v0='AVZ8V38TC3XNIMJ4P5DXYT5T' where id=7; -update noar ti set v0='AVZ8V38TC3XNIMJ4P5DXYT5T' where id=7; -update noar tt set b1='DSIY7JZH8Y7EA2QDDDKJP6N' where id=7; -update noar ti set b1='DSIY7JZH8Y7EA2QDDDKJP6N' where id=7; -update noar tt set v0='9' where id=7; -update noar ti set v0='9' where id=7; -update noar tt set b2='ND7XNU83TBT57CG1B5WPRY2WR' where id=7; -update noar ti set b2='ND7XNU83TBT57CG1B5WPRY2WR' where id=7; -update noar tt set v0='A0XEKZJWIEXVFJB' where id=8; -update noar ti set v0='A0XEKZJWIEXVFJB' where id=8; -update noar tt set b0='N6F8ZMJYQV528UXBA2AI7N' where id=8; -update noar ti set b0='N6F8ZMJYQV528UXBA2AI7N' where id=8; -update noar tt set v0='OTT' where id=8; -update noar ti set v0='OTT' where id=8; -update noar tt set b1='6T1193XK5VDPV1JGCJHPRLV' where id=8; -update noar ti set b1='6T1193XK5VDPV1JGCJHPRLV' where id=8; -update noar tt set v0='MFT7XV8NHPFDU2KPXTH6JO0791WC' where id=8; -update noar ti set v0='MFT7XV8NHPFDU2KPXTH6JO0791WC' where id=8; -update noar tt set b2='XU8A8IT1PW458V3FTWJV' where id=8; -update noar ti set b2='XU8A8IT1PW458V3FTWJV' where id=8; -update noar tt set v0='VMZ7RG692N4' where id=9; -update noar ti set v0='VMZ7RG692N4' where id=9; -update noar tt set b0='Z2HZYGM4J2BBTP0G' where id=9; -update noar ti set b0='Z2HZYGM4J2BBTP0G' where id=9; -update noar tt set v0='09TJH6J7MWI4GTYBLL629K1M' where id=9; -update noar ti set v0='09TJH6J7MWI4GTYBLL629K1M' where id=9; -update noar tt set b1='2QZ6VCT01CICI4' where id=9; -update noar ti set b1='2QZ6VCT01CICI4' where id=9; -update noar tt set v0='CTRZIFP' where id=9; -update noar ti set v0='CTRZIFP' where id=9; -update noar tt set b2='6S4N60D4I92PEIVXTGZ2QB' where id=9; -update noar ti set b2='6S4N60D4I92PEIVXTGZ2QB' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 mediumblob not null, -b1 blob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='NE5EMU54MBBMGRYZ7STDLKSTWC' where id=1; -update noar ti set v0='NE5EMU54MBBMGRYZ7STDLKSTWC' where id=1; -update noar tt set b0='P8FC1ARO2HP6Q26Y' where id=1; -update noar ti set b0='P8FC1ARO2HP6Q26Y' where id=1; -update noar tt set v0='FU9SWKGIK8ZCY7NY9SAPH' where id=1; -update noar ti set v0='FU9SWKGIK8ZCY7NY9SAPH' where id=1; -update noar tt set b1='LOU4OKP1BL' where id=1; -update noar ti set b1='LOU4OKP1BL' where id=1; -update noar tt set v0='8VFW77O' where id=1; -update noar ti set v0='8VFW77O' where id=1; -update noar tt set b2='SWHTVHNT0YWRXH8EW' where id=1; -update noar ti set b2='SWHTVHNT0YWRXH8EW' where id=1; -update noar tt set v0='IX4UMYR2' where id=2; -update noar ti set v0='IX4UMYR2' where id=2; -update noar tt set b0='TV' where id=2; -update noar ti set b0='TV' where id=2; -update noar tt set v0='SHP1MZLNLQ9Z6ET01Z4VXPHB7' where id=2; -update noar ti set v0='SHP1MZLNLQ9Z6ET01Z4VXPHB7' where id=2; -update noar tt set b1='MC' where id=2; -update noar ti set b1='MC' where id=2; -update noar tt set v0='AUO97HV5ZV3SNY9WX13RWY' where id=2; -update noar ti set v0='AUO97HV5ZV3SNY9WX13RWY' where id=2; -update noar tt set b2='D0VNKR9TZ39UZF8252QOH' where id=2; -update noar ti set b2='D0VNKR9TZ39UZF8252QOH' where id=2; -update noar tt set v0='QSECL3T36HGUFOCC4ZYOW' where id=3; -update noar ti set v0='QSECL3T36HGUFOCC4ZYOW' where id=3; -update noar tt set b0='H' where id=3; -update noar ti set b0='H' where id=3; -update noar tt set v0='PB403RABLD37I0W2QP' where id=3; -update noar ti set v0='PB403RABLD37I0W2QP' where id=3; -update noar tt set b1='UX' where id=3; -update noar ti set b1='UX' where id=3; -update noar tt set v0='A5' where id=3; -update noar ti set v0='A5' where id=3; -update noar tt set b2='HRM9QXKVPCGYVT303FK66' where id=3; -update noar ti set b2='HRM9QXKVPCGYVT303FK66' where id=3; -update noar tt set v0='W' where id=4; -update noar ti set v0='W' where id=4; -update noar tt set b0='BSKVQXP54HLRTCR9' where id=4; -update noar ti set b0='BSKVQXP54HLRTCR9' where id=4; -update noar tt set v0='DX7JYDJCWG5SZ931U9RCM' where id=4; -update noar ti set v0='DX7JYDJCWG5SZ931U9RCM' where id=4; -update noar tt set b1='HI4A9255HXASTZSC2YGAZ5JY4' where id=4; -update noar ti set b1='HI4A9255HXASTZSC2YGAZ5JY4' where id=4; -update noar tt set v0='9DTSKYN1AMJZOQKVHUWFAR0JT' where id=4; -update noar ti set v0='9DTSKYN1AMJZOQKVHUWFAR0JT' where id=4; -update noar tt set b2='R7BNJ3EMZY9ZGMVH' where id=4; -update noar ti set b2='R7BNJ3EMZY9ZGMVH' where id=4; -update noar tt set v0='SFIHR' where id=5; -update noar ti set v0='SFIHR' where id=5; -update noar tt set b0='14ED1DCK4CRD4SV5NJBZQXM70MR5H' where id=5; -update noar ti set b0='14ED1DCK4CRD4SV5NJBZQXM70MR5H' where id=5; -update noar tt set v0='SSRIA' where id=5; -update noar ti set v0='SSRIA' where id=5; -update noar tt set b1='BSUB1WOW' where id=5; -update noar ti set b1='BSUB1WOW' where id=5; -update noar tt set v0='QLUNYKC' where id=5; -update noar ti set v0='QLUNYKC' where id=5; -update noar tt set b2='PDSOWNO6P4CDGKB3TGK1RHW' where id=5; -update noar ti set b2='PDSOWNO6P4CDGKB3TGK1RHW' where id=5; -update noar tt set v0='ZWA0TM82UMEPDINGVBBQ6HPP' where id=6; -update noar ti set v0='ZWA0TM82UMEPDINGVBBQ6HPP' where id=6; -update noar tt set b0='CEN56OIJO40HJBAJPD2DAK67MOGAUN' where id=6; -update noar ti set b0='CEN56OIJO40HJBAJPD2DAK67MOGAUN' where id=6; -update noar tt set v0='1' where id=6; -update noar ti set v0='1' where id=6; -update noar tt set b1='QLFY2XHV9HGHPJ' where id=6; -update noar ti set b1='QLFY2XHV9HGHPJ' where id=6; -update noar tt set v0='KX5NV' where id=6; -update noar ti set v0='KX5NV' where id=6; -update noar tt set b2='U1IAW9W' where id=6; -update noar ti set b2='U1IAW9W' where id=6; -update noar tt set v0='10JDK' where id=7; -update noar ti set v0='10JDK' where id=7; -update noar tt set b0='C10W76E7R' where id=7; -update noar ti set b0='C10W76E7R' where id=7; -update noar tt set v0='E' where id=7; -update noar ti set v0='E' where id=7; -update noar tt set b1='PYW304GJF0KFL4J8WS' where id=7; -update noar ti set b1='PYW304GJF0KFL4J8WS' where id=7; -update noar tt set v0='E29EOK6RLDPGNIWTUWC8P' where id=7; -update noar ti set v0='E29EOK6RLDPGNIWTUWC8P' where id=7; -update noar tt set b2='ZJ28NDE9YO8T5MZNUE43AY5CBQIYW' where id=7; -update noar ti set b2='ZJ28NDE9YO8T5MZNUE43AY5CBQIYW' where id=7; -update noar tt set v0='KI2D7K0W6C3NW6NI6RACYL84Q' where id=8; -update noar ti set v0='KI2D7K0W6C3NW6NI6RACYL84Q' where id=8; -update noar tt set b0='2FI' where id=8; -update noar ti set b0='2FI' where id=8; -update noar tt set v0='VG64DCDIN21X77EH4N7ELVD' where id=8; -update noar ti set v0='VG64DCDIN21X77EH4N7ELVD' where id=8; -update noar tt set b1='71HR9E8HHQUA0O1VVLR1' where id=8; -update noar ti set b1='71HR9E8HHQUA0O1VVLR1' where id=8; -update noar tt set v0='F2YS0AMVIO0P54' where id=8; -update noar ti set v0='F2YS0AMVIO0P54' where id=8; -update noar tt set b2='XTJK17K9DS7O2WI66AT1SEK' where id=8; -update noar ti set b2='XTJK17K9DS7O2WI66AT1SEK' where id=8; -update noar tt set v0='L0QON805KNY573W0LKDXH1DPUM86G4E' where id=9; -update noar ti set v0='L0QON805KNY573W0LKDXH1DPUM86G4E' where id=9; -update noar tt set b0='3S1WCM' where id=9; -update noar ti set b0='3S1WCM' where id=9; -update noar tt set v0='2MR5M8CVXKXG97TD2FRWCCMM19KL' where id=9; -update noar ti set v0='2MR5M8CVXKXG97TD2FRWCCMM19KL' where id=9; -update noar tt set b1='L' where id=9; -update noar ti set b1='L' where id=9; -update noar tt set v0='950Z8NSDX3ETQVF23G' where id=9; -update noar ti set v0='950Z8NSDX3ETQVF23G' where id=9; -update noar tt set b2='2FLI4IJKLQ86T43F8VWYA9CMB0TX' where id=9; -update noar ti set b2='2FLI4IJKLQ86T43F8VWYA9CMB0TX' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 mediumblob not null, -b1 blob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='V4THDEBWR4QM3J' where id=1; -update noar ti set v0='V4THDEBWR4QM3J' where id=1; -update noar tt set b0='EKCTXW5S4ZCLAWTEF' where id=1; -update noar ti set b0='EKCTXW5S4ZCLAWTEF' where id=1; -update noar tt set v0='CZIH6J' where id=1; -update noar ti set v0='CZIH6J' where id=1; -update noar tt set b1='Y8EIS3O7H' where id=1; -update noar ti set b1='Y8EIS3O7H' where id=1; -update noar tt set v0='Q4NV0F7WIXLZXTIW0R6ZV223U7' where id=1; -update noar ti set v0='Q4NV0F7WIXLZXTIW0R6ZV223U7' where id=1; -update noar tt set b2='HUPX6W6WP1R2BWTYA0RPO1HCQ52FG' where id=1; -update noar ti set b2='HUPX6W6WP1R2BWTYA0RPO1HCQ52FG' where id=1; -update noar tt set v0='DWP2W7KAIJJ79XC2IQ1QX1B' where id=2; -update noar ti set v0='DWP2W7KAIJJ79XC2IQ1QX1B' where id=2; -update noar tt set b0='76SM4BQURN4SH' where id=2; -update noar ti set b0='76SM4BQURN4SH' where id=2; -update noar tt set v0='ND2NWNT' where id=2; -update noar ti set v0='ND2NWNT' where id=2; -update noar tt set b1='O7XW033WZ2TF0M' where id=2; -update noar ti set b1='O7XW033WZ2TF0M' where id=2; -update noar tt set v0='01KXQRFL75M24G4G' where id=2; -update noar ti set v0='01KXQRFL75M24G4G' where id=2; -update noar tt set b2='KK' where id=2; -update noar ti set b2='KK' where id=2; -update noar tt set v0='L4PWHJNVAMOPEN' where id=3; -update noar ti set v0='L4PWHJNVAMOPEN' where id=3; -update noar tt set b0='BVSLVLV0ZYWBB7WZNCD6H' where id=3; -update noar ti set b0='BVSLVLV0ZYWBB7WZNCD6H' where id=3; -update noar tt set v0='DFK0AJYRV6U29FOVPE034PO' where id=3; -update noar ti set v0='DFK0AJYRV6U29FOVPE034PO' where id=3; -update noar tt set b1='MYX' where id=3; -update noar ti set b1='MYX' where id=3; -update noar tt set v0='17M' where id=3; -update noar ti set v0='17M' where id=3; -update noar tt set b2='VBPTK1MKYPKEZTECP3PVMC87QYZKG1G' where id=3; -update noar ti set b2='VBPTK1MKYPKEZTECP3PVMC87QYZKG1G' where id=3; -update noar tt set v0='QTUAPDYYBDK7GAD6XT6OOHQ4BAUF5TV' where id=4; -update noar ti set v0='QTUAPDYYBDK7GAD6XT6OOHQ4BAUF5TV' where id=4; -update noar tt set b0='BWOWBBQWFP3W3HWBSTMSK1ZJ0W' where id=4; -update noar ti set b0='BWOWBBQWFP3W3HWBSTMSK1ZJ0W' where id=4; -update noar tt set v0='4JGD5VISZ3CEM36' where id=4; -update noar ti set v0='4JGD5VISZ3CEM36' where id=4; -update noar tt set b1='FYQ4XFFR761' where id=4; -update noar ti set b1='FYQ4XFFR761' where id=4; -update noar tt set v0='BRFJ1Z2OKJUIDBMHVA6M5' where id=4; -update noar ti set v0='BRFJ1Z2OKJUIDBMHVA6M5' where id=4; -update noar tt set b2='HY0D7' where id=4; -update noar ti set b2='HY0D7' where id=4; -update noar tt set v0='PRCOAKN5NJRJWKNE8QUZ1VCG' where id=5; -update noar ti set v0='PRCOAKN5NJRJWKNE8QUZ1VCG' where id=5; -update noar tt set b0='EMH1N90RK40R3982HVEFWI9GT7MCHUW' where id=5; -update noar ti set b0='EMH1N90RK40R3982HVEFWI9GT7MCHUW' where id=5; -update noar tt set v0='K5DA1UZM4VQ5' where id=5; -update noar ti set v0='K5DA1UZM4VQ5' where id=5; -update noar tt set b1='G43TF4GQYISB66734WDE' where id=5; -update noar ti set b1='G43TF4GQYISB66734WDE' where id=5; -update noar tt set v0='KRZ3LXH4' where id=5; -update noar ti set v0='KRZ3LXH4' where id=5; -update noar tt set b2='RW1P0U660I7YW5C38DP0T' where id=5; -update noar ti set b2='RW1P0U660I7YW5C38DP0T' where id=5; -update noar tt set v0='FB1S' where id=6; -update noar ti set v0='FB1S' where id=6; -update noar tt set b0='QM07H2G4Y4Y35' where id=6; -update noar ti set b0='QM07H2G4Y4Y35' where id=6; -update noar tt set v0='EK0IKX5GQWLWSM95QK5AAYADG36FGHLV' where id=6; -update noar ti set v0='EK0IKX5GQWLWSM95QK5AAYADG36FGHLV' where id=6; -update noar tt set b1='A' where id=6; -update noar ti set b1='A' where id=6; -update noar tt set v0='RG50T3F6GBMAX1X' where id=6; -update noar ti set v0='RG50T3F6GBMAX1X' where id=6; -update noar tt set b2='AQPUTMVZ96IA' where id=6; -update noar ti set b2='AQPUTMVZ96IA' where id=6; -update noar tt set v0='8HEMBQXQVV2KN6P7S' where id=7; -update noar ti set v0='8HEMBQXQVV2KN6P7S' where id=7; -update noar tt set b0='AFQ6' where id=7; -update noar ti set b0='AFQ6' where id=7; -update noar tt set v0='BUF3AVQU1DYUW0QN34GH0' where id=7; -update noar ti set v0='BUF3AVQU1DYUW0QN34GH0' where id=7; -update noar tt set b1='JCM9MT1NQRFLLKO343Y' where id=7; -update noar ti set b1='JCM9MT1NQRFLLKO343Y' where id=7; -update noar tt set v0='RERYI' where id=7; -update noar ti set v0='RERYI' where id=7; -update noar tt set b2='DMGEQL89MFJJBVJ4L8EDSTUC16JERVRU' where id=7; -update noar ti set b2='DMGEQL89MFJJBVJ4L8EDSTUC16JERVRU' where id=7; -update noar tt set v0='575YE4HY7U3I' where id=8; -update noar ti set v0='575YE4HY7U3I' where id=8; -update noar tt set b0='PVGQ6S' where id=8; -update noar ti set b0='PVGQ6S' where id=8; -update noar tt set v0='DZPL4JIAVKYUADTP5CWKG0MEZT0P427' where id=8; -update noar ti set v0='DZPL4JIAVKYUADTP5CWKG0MEZT0P427' where id=8; -update noar tt set b1='NDCC5H97399M' where id=8; -update noar ti set b1='NDCC5H97399M' where id=8; -update noar tt set v0='FSSGHDCVOU2HHDB3QYX88' where id=8; -update noar ti set v0='FSSGHDCVOU2HHDB3QYX88' where id=8; -update noar tt set b2='P206ON3SV2SC30KTVFO4EKKOIH5WJGDS' where id=8; -update noar ti set b2='P206ON3SV2SC30KTVFO4EKKOIH5WJGDS' where id=8; -update noar tt set v0='AMLAJN' where id=9; -update noar ti set v0='AMLAJN' where id=9; -update noar tt set b0='RWB' where id=9; -update noar ti set b0='RWB' where id=9; -update noar tt set v0='LJ0NOMFSQCSCS' where id=9; -update noar ti set v0='LJ0NOMFSQCSCS' where id=9; -update noar tt set b1='L1D' where id=9; -update noar ti set b1='L1D' where id=9; -update noar tt set v0='HMBDH40LHFIZJNOQCWR310O5' where id=9; -update noar ti set v0='HMBDH40LHFIZJNOQCWR310O5' where id=9; -update noar tt set b2='904U6CHXLE3GJD5WXSHBIAZNV' where id=9; -update noar ti set b2='904U6CHXLE3GJD5WXSHBIAZNV' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 mediumblob null, -b1 blob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='84KMRKXTIC1YC2' where id=1; -update noar ti set v0='84KMRKXTIC1YC2' where id=1; -update noar tt set b0='MVBCD4VR7ENQ0M1OAEVYBVQEA' where id=1; -update noar ti set b0='MVBCD4VR7ENQ0M1OAEVYBVQEA' where id=1; -update noar tt set v0='L5C7Z4OWN4P395FUQ3HI' where id=1; -update noar ti set v0='L5C7Z4OWN4P395FUQ3HI' where id=1; -update noar tt set b1='WM1VXZ87JBB1' where id=1; -update noar ti set b1='WM1VXZ87JBB1' where id=1; -update noar tt set v0='JGUZ13EBM1DXYCHS' where id=1; -update noar ti set v0='JGUZ13EBM1DXYCHS' where id=1; -update noar tt set b2='3E2IHJIWQUKGNGKAZZW0MNI' where id=1; -update noar ti set b2='3E2IHJIWQUKGNGKAZZW0MNI' where id=1; -update noar tt set v0='JDOW' where id=2; -update noar ti set v0='JDOW' where id=2; -update noar tt set b0='1U192K4DAUI' where id=2; -update noar ti set b0='1U192K4DAUI' where id=2; -update noar tt set v0='4OERL68FY12XRI6WE' where id=2; -update noar ti set v0='4OERL68FY12XRI6WE' where id=2; -update noar tt set b1='Q580ZY9PQQW599DT26N4W' where id=2; -update noar ti set b1='Q580ZY9PQQW599DT26N4W' where id=2; -update noar tt set v0='1EFOXRD49Y45LLTGE8LA7W9YHFKCIQA' where id=2; -update noar ti set v0='1EFOXRD49Y45LLTGE8LA7W9YHFKCIQA' where id=2; -update noar tt set b2='WYQLFEBWR7' where id=2; -update noar ti set b2='WYQLFEBWR7' where id=2; -update noar tt set v0='850HEBXJGVF4A9LB0G6' where id=3; -update noar ti set v0='850HEBXJGVF4A9LB0G6' where id=3; -update noar tt set b0='WMZWXQZ0UM8FUQ3SMKB7F' where id=3; -update noar ti set b0='WMZWXQZ0UM8FUQ3SMKB7F' where id=3; -update noar tt set v0='WIJE7CVXLA2B8HLISM8J26B0I9PW' where id=3; -update noar ti set v0='WIJE7CVXLA2B8HLISM8J26B0I9PW' where id=3; -update noar tt set b1='3PWXBYQP57B533B6WSPWR70DMW' where id=3; -update noar ti set b1='3PWXBYQP57B533B6WSPWR70DMW' where id=3; -update noar tt set v0='BUH0PSQPL' where id=3; -update noar ti set v0='BUH0PSQPL' where id=3; -update noar tt set b2='WETZ7Q181K3ENUORLJOVC' where id=3; -update noar ti set b2='WETZ7Q181K3ENUORLJOVC' where id=3; -update noar tt set v0='O4PKRC37CF431E514TPL4NPCMQZOMKCP' where id=4; -update noar ti set v0='O4PKRC37CF431E514TPL4NPCMQZOMKCP' where id=4; -update noar tt set b0='5VYIHZ43X6HNR' where id=4; -update noar ti set b0='5VYIHZ43X6HNR' where id=4; -update noar tt set v0='B2DO6072DREXUAD6AVEMFUUL' where id=4; -update noar ti set v0='B2DO6072DREXUAD6AVEMFUUL' where id=4; -update noar tt set b1='2L4DZOX6FQPV' where id=4; -update noar ti set b1='2L4DZOX6FQPV' where id=4; -update noar tt set v0='CP6JBLEG2X9U6D' where id=4; -update noar ti set v0='CP6JBLEG2X9U6D' where id=4; -update noar tt set b2='MPPAQF17XWJELS28DWW' where id=4; -update noar ti set b2='MPPAQF17XWJELS28DWW' where id=4; -update noar tt set v0='EEM1UR9ZSKXDG62IGZKW9' where id=5; -update noar ti set v0='EEM1UR9ZSKXDG62IGZKW9' where id=5; -update noar tt set b0='NW4UJJ1WLQA6K26H' where id=5; -update noar ti set b0='NW4UJJ1WLQA6K26H' where id=5; -update noar tt set v0='MB' where id=5; -update noar ti set v0='MB' where id=5; -update noar tt set b1='IY1FXA53BAQUCDFGIP9JT8FW2OWUH' where id=5; -update noar ti set b1='IY1FXA53BAQUCDFGIP9JT8FW2OWUH' where id=5; -update noar tt set v0='Z64' where id=5; -update noar ti set v0='Z64' where id=5; -update noar tt set b2='SBSTUFUWC5EMBCJPJSKAK54MM6O2QX' where id=5; -update noar ti set b2='SBSTUFUWC5EMBCJPJSKAK54MM6O2QX' where id=5; -update noar tt set v0='AVRRXO5CQYXHPDCW0' where id=6; -update noar ti set v0='AVRRXO5CQYXHPDCW0' where id=6; -update noar tt set b0='O' where id=6; -update noar ti set b0='O' where id=6; -update noar tt set v0='N8S1XG4BS504J68ZQKFO' where id=6; -update noar ti set v0='N8S1XG4BS504J68ZQKFO' where id=6; -update noar tt set b1='F2R4518ZYEQI3G26M743SB9H89AYA2IA' where id=6; -update noar ti set b1='F2R4518ZYEQI3G26M743SB9H89AYA2IA' where id=6; -update noar tt set v0='9SA' where id=6; -update noar ti set v0='9SA' where id=6; -update noar tt set b2='CLB5J' where id=6; -update noar ti set b2='CLB5J' where id=6; -update noar tt set v0='P0SQ1OJPERM40RMCEQ9QPIBSVU5ZU' where id=7; -update noar ti set v0='P0SQ1OJPERM40RMCEQ9QPIBSVU5ZU' where id=7; -update noar tt set b0='TY223YMGNY' where id=7; -update noar ti set b0='TY223YMGNY' where id=7; -update noar tt set v0='G0FE40C5F3QEA7K441RQAX7RT' where id=7; -update noar ti set v0='G0FE40C5F3QEA7K441RQAX7RT' where id=7; -update noar tt set b1='CWZ' where id=7; -update noar ti set b1='CWZ' where id=7; -update noar tt set v0='7V44477KO' where id=7; -update noar ti set v0='7V44477KO' where id=7; -update noar tt set b2='7DRUW7HAKJILRTAOJGS7QS2W1IH2JX' where id=7; -update noar ti set b2='7DRUW7HAKJILRTAOJGS7QS2W1IH2JX' where id=7; -update noar tt set v0='K3NXH4' where id=8; -update noar ti set v0='K3NXH4' where id=8; -update noar tt set b0='CT5UF3ZFBG1K' where id=8; -update noar ti set b0='CT5UF3ZFBG1K' where id=8; -update noar tt set v0='IUGLVO7UHOZKVDH6A' where id=8; -update noar ti set v0='IUGLVO7UHOZKVDH6A' where id=8; -update noar tt set b1='V8YEO7AG8UHO' where id=8; -update noar ti set b1='V8YEO7AG8UHO' where id=8; -update noar tt set v0='AI756EXP89J9WFCW57' where id=8; -update noar ti set v0='AI756EXP89J9WFCW57' where id=8; -update noar tt set b2='2M7S680ETYZKU5CX' where id=8; -update noar ti set b2='2M7S680ETYZKU5CX' where id=8; -update noar tt set v0='KPTGNP2655HOUDCV' where id=9; -update noar ti set v0='KPTGNP2655HOUDCV' where id=9; -update noar tt set b0='4T9VTU0F82G671S7' where id=9; -update noar ti set b0='4T9VTU0F82G671S7' where id=9; -update noar tt set v0='XJNFVR6VMAL7O58RQ3BEU2V3W' where id=9; -update noar ti set v0='XJNFVR6VMAL7O58RQ3BEU2V3W' where id=9; -update noar tt set b1='ZJ812PLQ7HY6GRLBNC8RPWJUV' where id=9; -update noar ti set b1='ZJ812PLQ7HY6GRLBNC8RPWJUV' where id=9; -update noar tt set v0='7YN4ONAP7' where id=9; -update noar ti set v0='7YN4ONAP7' where id=9; -update noar tt set b2='4R0E4GIQT9O' where id=9; -update noar ti set b2='4R0E4GIQT9O' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 mediumblob null, -b1 blob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='PGPR9X9YJUTCFF' where id=1; -update noar ti set v0='PGPR9X9YJUTCFF' where id=1; -update noar tt set b0='GJ72EVTAPCAUDR8907G9LLJH' where id=1; -update noar ti set b0='GJ72EVTAPCAUDR8907G9LLJH' where id=1; -update noar tt set v0='BKCH' where id=1; -update noar ti set v0='BKCH' where id=1; -update noar tt set b1='EYNSYJQ3P985PSD' where id=1; -update noar ti set b1='EYNSYJQ3P985PSD' where id=1; -update noar tt set v0='NIWYIVKATSKTW99I2JEX0IKG' where id=1; -update noar ti set v0='NIWYIVKATSKTW99I2JEX0IKG' where id=1; -update noar tt set b2='9M761U25' where id=1; -update noar ti set b2='9M761U25' where id=1; -update noar tt set v0='F7PMRFSYNJL2P84C4EJ' where id=2; -update noar ti set v0='F7PMRFSYNJL2P84C4EJ' where id=2; -update noar tt set b0='SZQ6A06PT131BWJ8JV8L5BDLG8' where id=2; -update noar ti set b0='SZQ6A06PT131BWJ8JV8L5BDLG8' where id=2; -update noar tt set v0='3CX9TFLV9BZ2RXL8N' where id=2; -update noar ti set v0='3CX9TFLV9BZ2RXL8N' where id=2; -update noar tt set b1='KEUMZBWUBN65AJ' where id=2; -update noar ti set b1='KEUMZBWUBN65AJ' where id=2; -update noar tt set v0='M7L4' where id=2; -update noar ti set v0='M7L4' where id=2; -update noar tt set b2='5QDJ0L13ZGNHUR2YID9131BG' where id=2; -update noar ti set b2='5QDJ0L13ZGNHUR2YID9131BG' where id=2; -update noar tt set v0='5' where id=3; -update noar ti set v0='5' where id=3; -update noar tt set b0='5PO5HAL5' where id=3; -update noar ti set b0='5PO5HAL5' where id=3; -update noar tt set v0='0' where id=3; -update noar ti set v0='0' where id=3; -update noar tt set b1='YX4NQFQD3V423DD1HE8X62' where id=3; -update noar ti set b1='YX4NQFQD3V423DD1HE8X62' where id=3; -update noar tt set v0='2YRGKJNVNI' where id=3; -update noar ti set v0='2YRGKJNVNI' where id=3; -update noar tt set b2='SB8I77XDMKLUE52PMR5X' where id=3; -update noar ti set b2='SB8I77XDMKLUE52PMR5X' where id=3; -update noar tt set v0='HQDIN9CRJZ' where id=4; -update noar ti set v0='HQDIN9CRJZ' where id=4; -update noar tt set b0='5TT0NEGCLMIW' where id=4; -update noar ti set b0='5TT0NEGCLMIW' where id=4; -update noar tt set v0='MRQS93GDRK' where id=4; -update noar ti set v0='MRQS93GDRK' where id=4; -update noar tt set b1='IB0SPJJN' where id=4; -update noar ti set b1='IB0SPJJN' where id=4; -update noar tt set v0='BTG' where id=4; -update noar ti set v0='BTG' where id=4; -update noar tt set b2='5UXQITX5DMCJMN9SV0LJY' where id=4; -update noar ti set b2='5UXQITX5DMCJMN9SV0LJY' where id=4; -update noar tt set v0='4' where id=5; -update noar ti set v0='4' where id=5; -update noar tt set b0='THXVJ63P' where id=5; -update noar ti set b0='THXVJ63P' where id=5; -update noar tt set v0='TVX59QX25AU1J355FN' where id=5; -update noar ti set v0='TVX59QX25AU1J355FN' where id=5; -update noar tt set b1='S43RXDC7QDLMIMR2J87YNYEFXB4D' where id=5; -update noar ti set b1='S43RXDC7QDLMIMR2J87YNYEFXB4D' where id=5; -update noar tt set v0='HL1MDNVIYQ45B8KN' where id=5; -update noar ti set v0='HL1MDNVIYQ45B8KN' where id=5; -update noar tt set b2='G9QZTTOOI2US6' where id=5; -update noar ti set b2='G9QZTTOOI2US6' where id=5; -update noar tt set v0='8BN191' where id=6; -update noar ti set v0='8BN191' where id=6; -update noar tt set b0='79E6XKBZH' where id=6; -update noar ti set b0='79E6XKBZH' where id=6; -update noar tt set v0='VC4JKA3SAOU0N7OFNEO5HI2LRP' where id=6; -update noar ti set v0='VC4JKA3SAOU0N7OFNEO5HI2LRP' where id=6; -update noar tt set b1='85G2WABE44HMT06QFBHFZSRNKZUT' where id=6; -update noar ti set b1='85G2WABE44HMT06QFBHFZSRNKZUT' where id=6; -update noar tt set v0='HRTKC' where id=6; -update noar ti set v0='HRTKC' where id=6; -update noar tt set b2='YP02J3' where id=6; -update noar ti set b2='YP02J3' where id=6; -update noar tt set v0='32QY8MJF9DEW9N6GTJIZTK' where id=7; -update noar ti set v0='32QY8MJF9DEW9N6GTJIZTK' where id=7; -update noar tt set b0='RF8O62' where id=7; -update noar ti set b0='RF8O62' where id=7; -update noar tt set v0='WZUPL6918F4' where id=7; -update noar ti set v0='WZUPL6918F4' where id=7; -update noar tt set b1='C2AELA42F' where id=7; -update noar ti set b1='C2AELA42F' where id=7; -update noar tt set v0='DAA47S2LTGV3G0HFBHGDR0PIL' where id=7; -update noar ti set v0='DAA47S2LTGV3G0HFBHGDR0PIL' where id=7; -update noar tt set b2='BT14UFVXFOKIATLCYDWMENP2' where id=7; -update noar ti set b2='BT14UFVXFOKIATLCYDWMENP2' where id=7; -update noar tt set v0='NV5ERN2H9JOQZ43G9AMAL4W' where id=8; -update noar ti set v0='NV5ERN2H9JOQZ43G9AMAL4W' where id=8; -update noar tt set b0='87Z0NO' where id=8; -update noar ti set b0='87Z0NO' where id=8; -update noar tt set v0='48UKQ18CU89HY1PJB' where id=8; -update noar ti set v0='48UKQ18CU89HY1PJB' where id=8; -update noar tt set b1='LCR9OTZHBTCTI5HGJPP0' where id=8; -update noar ti set b1='LCR9OTZHBTCTI5HGJPP0' where id=8; -update noar tt set v0='1Z3L0TMEF5Y1NIX52NIK5V7ZQ7R' where id=8; -update noar ti set v0='1Z3L0TMEF5Y1NIX52NIK5V7ZQ7R' where id=8; -update noar tt set b2='ODXXXF5YUTF2SA3JPXLY' where id=8; -update noar ti set b2='ODXXXF5YUTF2SA3JPXLY' where id=8; -update noar tt set v0='TE' where id=9; -update noar ti set v0='TE' where id=9; -update noar tt set b0='CS0RDZQD' where id=9; -update noar ti set b0='CS0RDZQD' where id=9; -update noar tt set v0='QBCSZ4GUHP5B6BMW9LOP2VAH7M' where id=9; -update noar ti set v0='QBCSZ4GUHP5B6BMW9LOP2VAH7M' where id=9; -update noar tt set b1='5HH2LTH3L2VYH8Q' where id=9; -update noar ti set b1='5HH2LTH3L2VYH8Q' where id=9; -update noar tt set v0='2LGZ6YXANFZMLO' where id=9; -update noar ti set v0='2LGZ6YXANFZMLO' where id=9; -update noar tt set b2='SPH3IZWCYQX2NEKRCQ76EP5JH' where id=9; -update noar ti set b2='SPH3IZWCYQX2NEKRCQ76EP5JH' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 mediumblob not null, -b1 blob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='K9DCBE7U6CHU1L4LXB8NUTATAZ' where id=1; -update noar ti set v0='K9DCBE7U6CHU1L4LXB8NUTATAZ' where id=1; -update noar tt set b0='QP9TCZ5AYIW' where id=1; -update noar ti set b0='QP9TCZ5AYIW' where id=1; -update noar tt set v0='FODV' where id=1; -update noar ti set v0='FODV' where id=1; -update noar tt set b1='ZNU2SC8U8HYHGYUT' where id=1; -update noar ti set b1='ZNU2SC8U8HYHGYUT' where id=1; -update noar tt set v0='FJJDGHK35OJQQWM7PG' where id=1; -update noar ti set v0='FJJDGHK35OJQQWM7PG' where id=1; -update noar tt set b2='GAMAODV6ZL4' where id=1; -update noar ti set b2='GAMAODV6ZL4' where id=1; -update noar tt set v0='QY72N53U4MPHGHQZGJJFZ9NKMJIF' where id=2; -update noar ti set v0='QY72N53U4MPHGHQZGJJFZ9NKMJIF' where id=2; -update noar tt set b0='FW987LIWOQV3BW' where id=2; -update noar ti set b0='FW987LIWOQV3BW' where id=2; -update noar tt set v0='IPWIKJ9F6E9YPQ25EJQDW4K6JF' where id=2; -update noar ti set v0='IPWIKJ9F6E9YPQ25EJQDW4K6JF' where id=2; -update noar tt set b1='PKP' where id=2; -update noar ti set b1='PKP' where id=2; -update noar tt set v0='XY7DREX55RRR8FW5PMFEPXJC' where id=2; -update noar ti set v0='XY7DREX55RRR8FW5PMFEPXJC' where id=2; -update noar tt set b2='CJZ280B9QO83W9ZRIT0KK9REB2' where id=2; -update noar ti set b2='CJZ280B9QO83W9ZRIT0KK9REB2' where id=2; -update noar tt set v0='U6MBM' where id=3; -update noar ti set v0='U6MBM' where id=3; -update noar tt set b0='Z620N2WNPPZGYCTGV5K' where id=3; -update noar ti set b0='Z620N2WNPPZGYCTGV5K' where id=3; -update noar tt set v0='2JLTFVM1' where id=3; -update noar ti set v0='2JLTFVM1' where id=3; -update noar tt set b1='3JVU' where id=3; -update noar ti set b1='3JVU' where id=3; -update noar tt set v0='QN2J5YEZW2X5SXJQT4RIHF2WMBKWM' where id=3; -update noar ti set v0='QN2J5YEZW2X5SXJQT4RIHF2WMBKWM' where id=3; -update noar tt set b2='3FL0NJY6L6UHVZ0VJI59GP6VVB7JREP' where id=3; -update noar ti set b2='3FL0NJY6L6UHVZ0VJI59GP6VVB7JREP' where id=3; -update noar tt set v0='I6JYY' where id=4; -update noar ti set v0='I6JYY' where id=4; -update noar tt set b0='FTHB4MFRE0QKE' where id=4; -update noar ti set b0='FTHB4MFRE0QKE' where id=4; -update noar tt set v0='KM7C34NN23' where id=4; -update noar ti set v0='KM7C34NN23' where id=4; -update noar tt set b1='HC5ALQ183SOX' where id=4; -update noar ti set b1='HC5ALQ183SOX' where id=4; -update noar tt set v0='T' where id=4; -update noar ti set v0='T' where id=4; -update noar tt set b2='8LJV9IBHD6H7RR' where id=4; -update noar ti set b2='8LJV9IBHD6H7RR' where id=4; -update noar tt set v0='D76DZE05MOEXJI3QVJSLSH79AT5H' where id=5; -update noar ti set v0='D76DZE05MOEXJI3QVJSLSH79AT5H' where id=5; -update noar tt set b0='AV3YVQMM3MI2J' where id=5; -update noar ti set b0='AV3YVQMM3MI2J' where id=5; -update noar tt set v0='YS2EYARD1VPNYVMQJ3O2HJFXKF9X7G' where id=5; -update noar ti set v0='YS2EYARD1VPNYVMQJ3O2HJFXKF9X7G' where id=5; -update noar tt set b1='RRYPE7V3P' where id=5; -update noar ti set b1='RRYPE7V3P' where id=5; -update noar tt set v0='WU13VPVSMKE0J2O8X' where id=5; -update noar ti set v0='WU13VPVSMKE0J2O8X' where id=5; -update noar tt set b2='K' where id=5; -update noar ti set b2='K' where id=5; -update noar tt set v0='859YF' where id=6; -update noar ti set v0='859YF' where id=6; -update noar tt set b0='7A9FOFGVVMS1JWO4KE3' where id=6; -update noar ti set b0='7A9FOFGVVMS1JWO4KE3' where id=6; -update noar tt set v0='HU770U0MW46XKK1' where id=6; -update noar ti set v0='HU770U0MW46XKK1' where id=6; -update noar tt set b1='H7Z6YSIVS945I0' where id=6; -update noar ti set b1='H7Z6YSIVS945I0' where id=6; -update noar tt set v0='FTTHL0XVXENZB40ISH0' where id=6; -update noar ti set v0='FTTHL0XVXENZB40ISH0' where id=6; -update noar tt set b2='V7ZTXUAXQLJP8XRNOUB8ZLVGY' where id=6; -update noar ti set b2='V7ZTXUAXQLJP8XRNOUB8ZLVGY' where id=6; -update noar tt set v0='GK7J8K6SA122DV8V04GKXDYHXU5DWQB' where id=7; -update noar ti set v0='GK7J8K6SA122DV8V04GKXDYHXU5DWQB' where id=7; -update noar tt set b0='AWOYNE4HYW9B4ULK3ILS' where id=7; -update noar ti set b0='AWOYNE4HYW9B4ULK3ILS' where id=7; -update noar tt set v0='MMUI' where id=7; -update noar ti set v0='MMUI' where id=7; -update noar tt set b1='HS2XHNESK' where id=7; -update noar ti set b1='HS2XHNESK' where id=7; -update noar tt set v0='J66G1P8LK1' where id=7; -update noar ti set v0='J66G1P8LK1' where id=7; -update noar tt set b2='1PWQ6QD5RUKRE966I60AUN3YYZUPDVY9' where id=7; -update noar ti set b2='1PWQ6QD5RUKRE966I60AUN3YYZUPDVY9' where id=7; -update noar tt set v0='AYT8728RQM2EU91LHLMHCVT0PZ3QNBJW' where id=8; -update noar ti set v0='AYT8728RQM2EU91LHLMHCVT0PZ3QNBJW' where id=8; -update noar tt set b0='JNXK473GZQHOFVN5DB9OKP' where id=8; -update noar ti set b0='JNXK473GZQHOFVN5DB9OKP' where id=8; -update noar tt set v0='MK9FHGRO0JJC51GTDJIJKDQ1WT8I' where id=8; -update noar ti set v0='MK9FHGRO0JJC51GTDJIJKDQ1WT8I' where id=8; -update noar tt set b1='TY6UHCGWXAV' where id=8; -update noar ti set b1='TY6UHCGWXAV' where id=8; -update noar tt set v0='FUNJO59UL05U' where id=8; -update noar ti set v0='FUNJO59UL05U' where id=8; -update noar tt set b2='W9ZB1XT3LL84M7ER39TZIDC8RZM' where id=8; -update noar ti set b2='W9ZB1XT3LL84M7ER39TZIDC8RZM' where id=8; -update noar tt set v0='HUJS0R4' where id=9; -update noar ti set v0='HUJS0R4' where id=9; -update noar tt set b0='GZIX7EHKMVR4EKKT9YP6X9RSRNG8NNS' where id=9; -update noar ti set b0='GZIX7EHKMVR4EKKT9YP6X9RSRNG8NNS' where id=9; -update noar tt set v0='SI2R8ML45IR' where id=9; -update noar ti set v0='SI2R8ML45IR' where id=9; -update noar tt set b1='CXPTEU9S6C6700B' where id=9; -update noar ti set b1='CXPTEU9S6C6700B' where id=9; -update noar tt set v0='T4T' where id=9; -update noar ti set v0='T4T' where id=9; -update noar tt set b2='PA4HCMSD3IOIGYM9E74EGE015WZBY' where id=9; -update noar ti set b2='PA4HCMSD3IOIGYM9E74EGE015WZBY' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 mediumblob not null, -b1 blob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='9PQEZ4VJSOX0' where id=1; -update noar ti set v0='9PQEZ4VJSOX0' where id=1; -update noar tt set b0='O8E' where id=1; -update noar ti set b0='O8E' where id=1; -update noar tt set v0='86KVIYA03KMOQ2EHC33P1140F' where id=1; -update noar ti set v0='86KVIYA03KMOQ2EHC33P1140F' where id=1; -update noar tt set b1='98FVN3OO1E1S' where id=1; -update noar ti set b1='98FVN3OO1E1S' where id=1; -update noar tt set v0='YZWIW6OM9QVWB42L76' where id=1; -update noar ti set v0='YZWIW6OM9QVWB42L76' where id=1; -update noar tt set b2='MGGJM5U4SUJAOTJ5P34HOMA9Z2' where id=1; -update noar ti set b2='MGGJM5U4SUJAOTJ5P34HOMA9Z2' where id=1; -update noar tt set v0='BSN60NF' where id=2; -update noar ti set v0='BSN60NF' where id=2; -update noar tt set b0='FMYGOJLUS3Q0NELVY' where id=2; -update noar ti set b0='FMYGOJLUS3Q0NELVY' where id=2; -update noar tt set v0='457X7ZN2NU63AHHQHFE73TCGBESE' where id=2; -update noar ti set v0='457X7ZN2NU63AHHQHFE73TCGBESE' where id=2; -update noar tt set b1='3Z0' where id=2; -update noar ti set b1='3Z0' where id=2; -update noar tt set v0='23TB3E5CZYI3WAJ3XHO' where id=2; -update noar ti set v0='23TB3E5CZYI3WAJ3XHO' where id=2; -update noar tt set b2='RYU1ST9P5ODKY5321V0KVLN6XO2NNU' where id=2; -update noar ti set b2='RYU1ST9P5ODKY5321V0KVLN6XO2NNU' where id=2; -update noar tt set v0='388MBT4SFV4O49' where id=3; -update noar ti set v0='388MBT4SFV4O49' where id=3; -update noar tt set b0='WUWOBKZ78C6GAHYPUTEXT437WU6L' where id=3; -update noar ti set b0='WUWOBKZ78C6GAHYPUTEXT437WU6L' where id=3; -update noar tt set v0='MKMCCGY4V8BC1F0UBHWMG' where id=3; -update noar ti set v0='MKMCCGY4V8BC1F0UBHWMG' where id=3; -update noar tt set b1='XFDL6DDDCKXECE9JZJKER8OZSH' where id=3; -update noar ti set b1='XFDL6DDDCKXECE9JZJKER8OZSH' where id=3; -update noar tt set v0='FECMTITEA9S82Z3' where id=3; -update noar ti set v0='FECMTITEA9S82Z3' where id=3; -update noar tt set b2='E5149OSO3AUSQE3C71E2' where id=3; -update noar ti set b2='E5149OSO3AUSQE3C71E2' where id=3; -update noar tt set v0='DVFAFK062JB3P' where id=4; -update noar ti set v0='DVFAFK062JB3P' where id=4; -update noar tt set b0='LFQM77I' where id=4; -update noar ti set b0='LFQM77I' where id=4; -update noar tt set v0='CNZR2ALYZ7LF3PBSULJO' where id=4; -update noar ti set v0='CNZR2ALYZ7LF3PBSULJO' where id=4; -update noar tt set b1='F65923044KY943EQBXO0WC5SNHS4FA' where id=4; -update noar ti set b1='F65923044KY943EQBXO0WC5SNHS4FA' where id=4; -update noar tt set v0='0W' where id=4; -update noar ti set v0='0W' where id=4; -update noar tt set b2='ZYB32YAV13' where id=4; -update noar ti set b2='ZYB32YAV13' where id=4; -update noar tt set v0='MO37JFHJAWAPURNOU' where id=5; -update noar ti set v0='MO37JFHJAWAPURNOU' where id=5; -update noar tt set b0='HGGQNFVI50K4388U7Q8PWKEGII2GL1F' where id=5; -update noar ti set b0='HGGQNFVI50K4388U7Q8PWKEGII2GL1F' where id=5; -update noar tt set v0='5V7VC96F0' where id=5; -update noar ti set v0='5V7VC96F0' where id=5; -update noar tt set b1='8C82TJZJNWBXCRLFEUL2FP0Z7GGYPP' where id=5; -update noar ti set b1='8C82TJZJNWBXCRLFEUL2FP0Z7GGYPP' where id=5; -update noar tt set v0='5XYYC50ADP7GJVVS' where id=5; -update noar ti set v0='5XYYC50ADP7GJVVS' where id=5; -update noar tt set b2='81W3O7' where id=5; -update noar ti set b2='81W3O7' where id=5; -update noar tt set v0='7OPKD47JGBWDL0KRFQJOD0XERPCFB' where id=6; -update noar ti set v0='7OPKD47JGBWDL0KRFQJOD0XERPCFB' where id=6; -update noar tt set b0='JULOTLY6RVNPM' where id=6; -update noar ti set b0='JULOTLY6RVNPM' where id=6; -update noar tt set v0='OOZI87MGYZ1DHU3601' where id=6; -update noar ti set v0='OOZI87MGYZ1DHU3601' where id=6; -update noar tt set b1='42' where id=6; -update noar ti set b1='42' where id=6; -update noar tt set v0='86O6' where id=6; -update noar ti set v0='86O6' where id=6; -update noar tt set b2='BF5' where id=6; -update noar ti set b2='BF5' where id=6; -update noar tt set v0='AC4BZELC6FQ' where id=7; -update noar ti set v0='AC4BZELC6FQ' where id=7; -update noar tt set b0='KAW6SDQ' where id=7; -update noar ti set b0='KAW6SDQ' where id=7; -update noar tt set v0='M4OZFK5XCUGJDZHSQLO' where id=7; -update noar ti set v0='M4OZFK5XCUGJDZHSQLO' where id=7; -update noar tt set b1='PTICZPMKF2UPMVY' where id=7; -update noar ti set b1='PTICZPMKF2UPMVY' where id=7; -update noar tt set v0='HFYW51AA412EYYM7OJ3YUEBYT' where id=7; -update noar ti set v0='HFYW51AA412EYYM7OJ3YUEBYT' where id=7; -update noar tt set b2='WU3LBW7' where id=7; -update noar ti set b2='WU3LBW7' where id=7; -update noar tt set v0='PV889WHHUOQXREI' where id=8; -update noar ti set v0='PV889WHHUOQXREI' where id=8; -update noar tt set b0='AVQRSQU41GS50J2UTBPK3UUK3E' where id=8; -update noar ti set b0='AVQRSQU41GS50J2UTBPK3UUK3E' where id=8; -update noar tt set v0='BQIINCEDNA460022I2X8NP' where id=8; -update noar ti set v0='BQIINCEDNA460022I2X8NP' where id=8; -update noar tt set b1='9365Y28JR6E7DFCZW9' where id=8; -update noar ti set b1='9365Y28JR6E7DFCZW9' where id=8; -update noar tt set v0='0YG8YZ1HM9BC2CNQ5YUZNIHVMD1QT6N' where id=8; -update noar ti set v0='0YG8YZ1HM9BC2CNQ5YUZNIHVMD1QT6N' where id=8; -update noar tt set b2='GCS0O23L54X72R4R2M3ZRX4I' where id=8; -update noar ti set b2='GCS0O23L54X72R4R2M3ZRX4I' where id=8; -update noar tt set v0='Y' where id=9; -update noar ti set v0='Y' where id=9; -update noar tt set b0='4NWWMJGC891H4DSOQAC49Z8VY4' where id=9; -update noar ti set b0='4NWWMJGC891H4DSOQAC49Z8VY4' where id=9; -update noar tt set v0='LVGX0UGSSRJX' where id=9; -update noar ti set v0='LVGX0UGSSRJX' where id=9; -update noar tt set b1='2TRFSXFHWZSPEIBYW8U3PITEL' where id=9; -update noar ti set b1='2TRFSXFHWZSPEIBYW8U3PITEL' where id=9; -update noar tt set v0='G38E6TUQX9VPN0GRDUZ2F6RUQ1N4PK' where id=9; -update noar ti set v0='G38E6TUQX9VPN0GRDUZ2F6RUQ1N4PK' where id=9; -update noar tt set b2='NSX4ZQQEJTGYPEP' where id=9; -update noar ti set b2='NSX4ZQQEJTGYPEP' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 mediumblob null, -b1 blob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='NG8MXG' where id=1; -update noar ti set v0='NG8MXG' where id=1; -update noar tt set b0='C8TRHI1CEUJMCLWJ5' where id=1; -update noar ti set b0='C8TRHI1CEUJMCLWJ5' where id=1; -update noar tt set v0='HZ82XNE8XORPS0S5CNEM6HH86M9' where id=1; -update noar ti set v0='HZ82XNE8XORPS0S5CNEM6HH86M9' where id=1; -update noar tt set b1='X8KKMGTEKSK42EN970W2GL' where id=1; -update noar ti set b1='X8KKMGTEKSK42EN970W2GL' where id=1; -update noar tt set v0='BP1D1MRV0UJGB523DH5' where id=1; -update noar ti set v0='BP1D1MRV0UJGB523DH5' where id=1; -update noar tt set b2='OERA4H0VQGFOAA4TX9FI' where id=1; -update noar ti set b2='OERA4H0VQGFOAA4TX9FI' where id=1; -update noar tt set v0='Z9GVZANQ0LAXZYQTX' where id=2; -update noar ti set v0='Z9GVZANQ0LAXZYQTX' where id=2; -update noar tt set b0='BC7DNEVBXCOALJKSDH' where id=2; -update noar ti set b0='BC7DNEVBXCOALJKSDH' where id=2; -update noar tt set v0='ENY4IW1J0S8SQ3X2VP469IYL' where id=2; -update noar ti set v0='ENY4IW1J0S8SQ3X2VP469IYL' where id=2; -update noar tt set b1='XK3SDYK3PIJKJG' where id=2; -update noar ti set b1='XK3SDYK3PIJKJG' where id=2; -update noar tt set v0='V3NUO1MOV21MVTJ4VVDR' where id=2; -update noar ti set v0='V3NUO1MOV21MVTJ4VVDR' where id=2; -update noar tt set b2='ENHFTC78Q2ATFJSM8RJKGWMD8ATDZ' where id=2; -update noar ti set b2='ENHFTC78Q2ATFJSM8RJKGWMD8ATDZ' where id=2; -update noar tt set v0='QL2XJNG3MZMUEXZP7H' where id=3; -update noar ti set v0='QL2XJNG3MZMUEXZP7H' where id=3; -update noar tt set b0='IH52NP349L0OXB4ITZP4Q0NB83M' where id=3; -update noar ti set b0='IH52NP349L0OXB4ITZP4Q0NB83M' where id=3; -update noar tt set v0='93Z1PRL4K2DSX8G6C10M2UCV6L' where id=3; -update noar ti set v0='93Z1PRL4K2DSX8G6C10M2UCV6L' where id=3; -update noar tt set b1='TPLLSXAV87BAZFOO' where id=3; -update noar ti set b1='TPLLSXAV87BAZFOO' where id=3; -update noar tt set v0='60F9D49S7MPPSYKDWWQBL3' where id=3; -update noar ti set v0='60F9D49S7MPPSYKDWWQBL3' where id=3; -update noar tt set b2='TTCF3N1MBFGER6I2' where id=3; -update noar ti set b2='TTCF3N1MBFGER6I2' where id=3; -update noar tt set v0='H9O' where id=4; -update noar ti set v0='H9O' where id=4; -update noar tt set b0='SSJ0VOAU' where id=4; -update noar ti set b0='SSJ0VOAU' where id=4; -update noar tt set v0='1AKZTYIW7O3866AGV6HQ5WI5RRCV' where id=4; -update noar ti set v0='1AKZTYIW7O3866AGV6HQ5WI5RRCV' where id=4; -update noar tt set b1='QO5WX6NX9FYTZ' where id=4; -update noar ti set b1='QO5WX6NX9FYTZ' where id=4; -update noar tt set v0='FBUZ7KKB51LL6QL2E9ENFZ23O8BS' where id=4; -update noar ti set v0='FBUZ7KKB51LL6QL2E9ENFZ23O8BS' where id=4; -update noar tt set b2='EEJEILTHUOL2WI' where id=4; -update noar ti set b2='EEJEILTHUOL2WI' where id=4; -update noar tt set v0='VNPFB' where id=5; -update noar ti set v0='VNPFB' where id=5; -update noar tt set b0='URNVXJRKA8KAEPP2X0K9R' where id=5; -update noar ti set b0='URNVXJRKA8KAEPP2X0K9R' where id=5; -update noar tt set v0='OF' where id=5; -update noar ti set v0='OF' where id=5; -update noar tt set b1='P34MVO' where id=5; -update noar ti set b1='P34MVO' where id=5; -update noar tt set v0='IHR14N5QIU5UNXE2YNS' where id=5; -update noar ti set v0='IHR14N5QIU5UNXE2YNS' where id=5; -update noar tt set b2='1I8QG7N2O1YAV0L0NOUYCO2' where id=5; -update noar ti set b2='1I8QG7N2O1YAV0L0NOUYCO2' where id=5; -update noar tt set v0='V88HEHV8UP3LL31VTL0M' where id=6; -update noar ti set v0='V88HEHV8UP3LL31VTL0M' where id=6; -update noar tt set b0='D4ZVY0Y6K9G3QF6PMEQC639NBV7XRFY' where id=6; -update noar ti set b0='D4ZVY0Y6K9G3QF6PMEQC639NBV7XRFY' where id=6; -update noar tt set v0='4HSE7EFM8DINVD93YATM' where id=6; -update noar ti set v0='4HSE7EFM8DINVD93YATM' where id=6; -update noar tt set b1='NL3W8' where id=6; -update noar ti set b1='NL3W8' where id=6; -update noar tt set v0='4HZGP' where id=6; -update noar ti set v0='4HZGP' where id=6; -update noar tt set b2='JGY2EM0SMCMG59TNFXR' where id=6; -update noar ti set b2='JGY2EM0SMCMG59TNFXR' where id=6; -update noar tt set v0='9JX73DBU0ER2GCEI4CXYPH' where id=7; -update noar ti set v0='9JX73DBU0ER2GCEI4CXYPH' where id=7; -update noar tt set b0='UCSAA9BH1FF2ICDLUZKL6VLNHNV' where id=7; -update noar ti set b0='UCSAA9BH1FF2ICDLUZKL6VLNHNV' where id=7; -update noar tt set v0='6N7KLLM8SLHFA16K7PO' where id=7; -update noar ti set v0='6N7KLLM8SLHFA16K7PO' where id=7; -update noar tt set b1='D7IQYIS90JED52PBBCRFKA9OLU' where id=7; -update noar ti set b1='D7IQYIS90JED52PBBCRFKA9OLU' where id=7; -update noar tt set v0='B' where id=7; -update noar ti set v0='B' where id=7; -update noar tt set b2='ORKN7JGQCPJVOEZKF2K7G9OYOTXGKZ45' where id=7; -update noar ti set b2='ORKN7JGQCPJVOEZKF2K7G9OYOTXGKZ45' where id=7; -update noar tt set v0='0W0G8LAB0HP4TMK0FDX6' where id=8; -update noar ti set v0='0W0G8LAB0HP4TMK0FDX6' where id=8; -update noar tt set b0='6IECLLZNFQYUWZWFL8' where id=8; -update noar ti set b0='6IECLLZNFQYUWZWFL8' where id=8; -update noar tt set v0='Q3A69N4' where id=8; -update noar ti set v0='Q3A69N4' where id=8; -update noar tt set b1='P9X2F68TYAHJT56514AH1QEO7L' where id=8; -update noar ti set b1='P9X2F68TYAHJT56514AH1QEO7L' where id=8; -update noar tt set v0='VY4H38W9' where id=8; -update noar ti set v0='VY4H38W9' where id=8; -update noar tt set b2='CKM' where id=8; -update noar ti set b2='CKM' where id=8; -update noar tt set v0='34Z' where id=9; -update noar ti set v0='34Z' where id=9; -update noar tt set b0='6ECOUUG3IBP3HSFGAV2YZQ1Q' where id=9; -update noar ti set b0='6ECOUUG3IBP3HSFGAV2YZQ1Q' where id=9; -update noar tt set v0='L' where id=9; -update noar ti set v0='L' where id=9; -update noar tt set b1='WYZ' where id=9; -update noar ti set b1='WYZ' where id=9; -update noar tt set v0='ZMG22NTVH' where id=9; -update noar ti set v0='ZMG22NTVH' where id=9; -update noar tt set b2='7TP0HP1' where id=9; -update noar ti set b2='7TP0HP1' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 mediumblob null, -b1 blob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='F1PBQUEBCE2SOIF8MTAL3OA' where id=1; -update noar ti set v0='F1PBQUEBCE2SOIF8MTAL3OA' where id=1; -update noar tt set b0='Q2A8RUAZW' where id=1; -update noar ti set b0='Q2A8RUAZW' where id=1; -update noar tt set v0='Y2EYT6F95DDTLSXC4VUGKDA' where id=1; -update noar ti set v0='Y2EYT6F95DDTLSXC4VUGKDA' where id=1; -update noar tt set b1='Z149291IXGO' where id=1; -update noar ti set b1='Z149291IXGO' where id=1; -update noar tt set v0='5U46MWCXK045R3WATPSI' where id=1; -update noar ti set v0='5U46MWCXK045R3WATPSI' where id=1; -update noar tt set b2='HZHJCZ1W0ENNTK8T3THTFH8GLX' where id=1; -update noar ti set b2='HZHJCZ1W0ENNTK8T3THTFH8GLX' where id=1; -update noar tt set v0='1TE3Z3Y2ES' where id=2; -update noar ti set v0='1TE3Z3Y2ES' where id=2; -update noar tt set b0='GYVBCAERQLNK56GAJXGIQT' where id=2; -update noar ti set b0='GYVBCAERQLNK56GAJXGIQT' where id=2; -update noar tt set v0='O9TEV0FLVUJGE' where id=2; -update noar ti set v0='O9TEV0FLVUJGE' where id=2; -update noar tt set b1='5R' where id=2; -update noar ti set b1='5R' where id=2; -update noar tt set v0='JD4Z6104U6OCND5EZ1ZR3BKKV3M' where id=2; -update noar ti set v0='JD4Z6104U6OCND5EZ1ZR3BKKV3M' where id=2; -update noar tt set b2='M5SB21MY4A06HO4PJK' where id=2; -update noar ti set b2='M5SB21MY4A06HO4PJK' where id=2; -update noar tt set v0='KQP6XOKXV2G05HCJ9V3ZXJD464G04OI' where id=3; -update noar ti set v0='KQP6XOKXV2G05HCJ9V3ZXJD464G04OI' where id=3; -update noar tt set b0='S35MPSS5YHRSPS842U69HTVLUY6IN0' where id=3; -update noar ti set b0='S35MPSS5YHRSPS842U69HTVLUY6IN0' where id=3; -update noar tt set v0='9A' where id=3; -update noar ti set v0='9A' where id=3; -update noar tt set b1='F5BS' where id=3; -update noar ti set b1='F5BS' where id=3; -update noar tt set v0='W15UAASOM2143M77EIN51P0EOBABFQW1' where id=3; -update noar ti set v0='W15UAASOM2143M77EIN51P0EOBABFQW1' where id=3; -update noar tt set b2='5DW7' where id=3; -update noar ti set b2='5DW7' where id=3; -update noar tt set v0='18X1DYBNW1OKN796VN7290Z4SKWE' where id=4; -update noar ti set v0='18X1DYBNW1OKN796VN7290Z4SKWE' where id=4; -update noar tt set b0='ILM6P1V' where id=4; -update noar ti set b0='ILM6P1V' where id=4; -update noar tt set v0='R755QIYZLK1CN09G572' where id=4; -update noar ti set v0='R755QIYZLK1CN09G572' where id=4; -update noar tt set b1='6F' where id=4; -update noar ti set b1='6F' where id=4; -update noar tt set v0='E' where id=4; -update noar ti set v0='E' where id=4; -update noar tt set b2='DCVUWKGBDQJFSSGBP' where id=4; -update noar ti set b2='DCVUWKGBDQJFSSGBP' where id=4; -update noar tt set v0='PC5H51' where id=5; -update noar ti set v0='PC5H51' where id=5; -update noar tt set b0='Q' where id=5; -update noar ti set b0='Q' where id=5; -update noar tt set v0='ETN' where id=5; -update noar ti set v0='ETN' where id=5; -update noar tt set b1='5MD4SQIPDPV4QOTPWTAHNN62EE5JEJAO' where id=5; -update noar ti set b1='5MD4SQIPDPV4QOTPWTAHNN62EE5JEJAO' where id=5; -update noar tt set v0='AH4L4' where id=5; -update noar ti set v0='AH4L4' where id=5; -update noar tt set b2='X1PTYLFKYL0' where id=5; -update noar ti set b2='X1PTYLFKYL0' where id=5; -update noar tt set v0='URRG7BE0USKJS0KS80V35TJM' where id=6; -update noar ti set v0='URRG7BE0USKJS0KS80V35TJM' where id=6; -update noar tt set b0='59QP2LEWOK4UJLU7879KDVWZYB' where id=6; -update noar ti set b0='59QP2LEWOK4UJLU7879KDVWZYB' where id=6; -update noar tt set v0='W3VN' where id=6; -update noar ti set v0='W3VN' where id=6; -update noar tt set b1='AI8A09Y' where id=6; -update noar ti set b1='AI8A09Y' where id=6; -update noar tt set v0='7FK2BF' where id=6; -update noar ti set v0='7FK2BF' where id=6; -update noar tt set b2='XBMXD8W8KVFR5EYOQFWXE' where id=6; -update noar ti set b2='XBMXD8W8KVFR5EYOQFWXE' where id=6; -update noar tt set v0='16H861Z8OYSQ4HAKPHPC5RPPCHAU' where id=7; -update noar ti set v0='16H861Z8OYSQ4HAKPHPC5RPPCHAU' where id=7; -update noar tt set b0='7CSMB993KJB8' where id=7; -update noar ti set b0='7CSMB993KJB8' where id=7; -update noar tt set v0='86W2ROZ7MOWO6YUWS82E' where id=7; -update noar ti set v0='86W2ROZ7MOWO6YUWS82E' where id=7; -update noar tt set b1='H5LZP06DZGB9J7O' where id=7; -update noar ti set b1='H5LZP06DZGB9J7O' where id=7; -update noar tt set v0='EFV72O9IN7X8A79B95UD2C77LIFCH' where id=7; -update noar ti set v0='EFV72O9IN7X8A79B95UD2C77LIFCH' where id=7; -update noar tt set b2='N21TAZPP1G' where id=7; -update noar ti set b2='N21TAZPP1G' where id=7; -update noar tt set v0='OC1Q2H7T0TRB97OVM6' where id=8; -update noar ti set v0='OC1Q2H7T0TRB97OVM6' where id=8; -update noar tt set b0='W8DOSD6X5CR' where id=8; -update noar ti set b0='W8DOSD6X5CR' where id=8; -update noar tt set v0='XXEW1VDAXP0A6WELG5RZO5ITIJD6' where id=8; -update noar ti set v0='XXEW1VDAXP0A6WELG5RZO5ITIJD6' where id=8; -update noar tt set b1='WG3PC00JI6AO69I3ABWOW4C80JHIPL6X' where id=8; -update noar ti set b1='WG3PC00JI6AO69I3ABWOW4C80JHIPL6X' where id=8; -update noar tt set v0='WIEJE8ULP7KB8JVIYQ6BBWDJ5LNJHW' where id=8; -update noar ti set v0='WIEJE8ULP7KB8JVIYQ6BBWDJ5LNJHW' where id=8; -update noar tt set b2='RPFVCK3MGEQ' where id=8; -update noar ti set b2='RPFVCK3MGEQ' where id=8; -update noar tt set v0='T05KTFLZIK8Q2RX67XFB3' where id=9; -update noar ti set v0='T05KTFLZIK8Q2RX67XFB3' where id=9; -update noar tt set b0='VDKLOT3SFEJKU9LJ3BKPIC6U1JK8YUIB' where id=9; -update noar ti set b0='VDKLOT3SFEJKU9LJ3BKPIC6U1JK8YUIB' where id=9; -update noar tt set v0='V9BV08UTPQ2BF4BB49AMAP23B' where id=9; -update noar ti set v0='V9BV08UTPQ2BF4BB49AMAP23B' where id=9; -update noar tt set b1='PA24CEW9VI5V60A6JS9EP' where id=9; -update noar ti set b1='PA24CEW9VI5V60A6JS9EP' where id=9; -update noar tt set v0='U9A4Q8K84X2S2TIRGBPHM0AQXQOK2EK3' where id=9; -update noar ti set v0='U9A4Q8K84X2S2TIRGBPHM0AQXQOK2EK3' where id=9; -update noar tt set b2='O7Q7KOEW26B918A34F' where id=9; -update noar ti set b2='O7Q7KOEW26B918A34F' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 mediumblob not null, -b1 blob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='2ZP4G' where id=1; -update noar ti set v0='2ZP4G' where id=1; -update noar tt set b0='01LEI6LGA79NN3J' where id=1; -update noar ti set b0='01LEI6LGA79NN3J' where id=1; -update noar tt set v0='N4V' where id=1; -update noar ti set v0='N4V' where id=1; -update noar tt set b1='4X2I4E' where id=1; -update noar ti set b1='4X2I4E' where id=1; -update noar tt set v0='QDIXK' where id=1; -update noar ti set v0='QDIXK' where id=1; -update noar tt set b2='HDJUDDIWR' where id=1; -update noar ti set b2='HDJUDDIWR' where id=1; -update noar tt set v0='OEF' where id=2; -update noar ti set v0='OEF' where id=2; -update noar tt set b0='JQI5PPZEQY4PIUOLJZS3M' where id=2; -update noar ti set b0='JQI5PPZEQY4PIUOLJZS3M' where id=2; -update noar tt set v0='PCN' where id=2; -update noar ti set v0='PCN' where id=2; -update noar tt set b1='450700GHCWQ' where id=2; -update noar ti set b1='450700GHCWQ' where id=2; -update noar tt set v0='44TJVJLBEWOXUED1CQGDGFNHZ' where id=2; -update noar ti set v0='44TJVJLBEWOXUED1CQGDGFNHZ' where id=2; -update noar tt set b2='2HOR702CXVMDI0' where id=2; -update noar ti set b2='2HOR702CXVMDI0' where id=2; -update noar tt set v0='XT9JKQUF1JK36H8LEOL31648J2L0CK' where id=3; -update noar ti set v0='XT9JKQUF1JK36H8LEOL31648J2L0CK' where id=3; -update noar tt set b0='C08AJVG8ZC' where id=3; -update noar ti set b0='C08AJVG8ZC' where id=3; -update noar tt set v0='C28U2XGQAAYG44' where id=3; -update noar ti set v0='C28U2XGQAAYG44' where id=3; -update noar tt set b1='K4YPM7C' where id=3; -update noar ti set b1='K4YPM7C' where id=3; -update noar tt set v0='RWZTH8H1D8CRIPQOVSTJ9X3K' where id=3; -update noar ti set v0='RWZTH8H1D8CRIPQOVSTJ9X3K' where id=3; -update noar tt set b2='9B8FBRLA7A28R2' where id=3; -update noar ti set b2='9B8FBRLA7A28R2' where id=3; -update noar tt set v0='OAL' where id=4; -update noar ti set v0='OAL' where id=4; -update noar tt set b0='QELOWD2WX22J1SKCMECI78QUDH' where id=4; -update noar ti set b0='QELOWD2WX22J1SKCMECI78QUDH' where id=4; -update noar tt set v0='SZT0J' where id=4; -update noar ti set v0='SZT0J' where id=4; -update noar tt set b1='J' where id=4; -update noar ti set b1='J' where id=4; -update noar tt set v0='4D' where id=4; -update noar ti set v0='4D' where id=4; -update noar tt set b2='T2BBZBIFJAKOSUV8U' where id=4; -update noar ti set b2='T2BBZBIFJAKOSUV8U' where id=4; -update noar tt set v0='NF0ROOLY' where id=5; -update noar ti set v0='NF0ROOLY' where id=5; -update noar tt set b0='6K3O61HYF498PKS9F60PWM7' where id=5; -update noar ti set b0='6K3O61HYF498PKS9F60PWM7' where id=5; -update noar tt set v0='2BGVY1DTPU4GV6A41Y2DME372DWE' where id=5; -update noar ti set v0='2BGVY1DTPU4GV6A41Y2DME372DWE' where id=5; -update noar tt set b1='ERNZAAZU2AV4DV4DYBZOZOL5H' where id=5; -update noar ti set b1='ERNZAAZU2AV4DV4DYBZOZOL5H' where id=5; -update noar tt set v0='VWT3TWDOW0F7MINAF5QR80DBK' where id=5; -update noar ti set v0='VWT3TWDOW0F7MINAF5QR80DBK' where id=5; -update noar tt set b2='G13E5OPP2V4' where id=5; -update noar ti set b2='G13E5OPP2V4' where id=5; -update noar tt set v0='GWBNI7E8QVL' where id=6; -update noar ti set v0='GWBNI7E8QVL' where id=6; -update noar tt set b0='GCAE' where id=6; -update noar ti set b0='GCAE' where id=6; -update noar tt set v0='42Z5B17W' where id=6; -update noar ti set v0='42Z5B17W' where id=6; -update noar tt set b1='D0DN9' where id=6; -update noar ti set b1='D0DN9' where id=6; -update noar tt set v0='97IAVIVA01ZVGU' where id=6; -update noar ti set v0='97IAVIVA01ZVGU' where id=6; -update noar tt set b2='GRJO5HU7HSA9PB' where id=6; -update noar ti set b2='GRJO5HU7HSA9PB' where id=6; -update noar tt set v0='OH' where id=7; -update noar ti set v0='OH' where id=7; -update noar tt set b0='6BY82J9L2HZCWY0FY0W' where id=7; -update noar ti set b0='6BY82J9L2HZCWY0FY0W' where id=7; -update noar tt set v0='5JH5BYC4MMM3RHC8R9X0A' where id=7; -update noar ti set v0='5JH5BYC4MMM3RHC8R9X0A' where id=7; -update noar tt set b1='UQ7KK3FAJ7LSSPWA75SWCAZJCTRX' where id=7; -update noar ti set b1='UQ7KK3FAJ7LSSPWA75SWCAZJCTRX' where id=7; -update noar tt set v0='64LV25LIJWBDCT3Y0JLQG04MV' where id=7; -update noar ti set v0='64LV25LIJWBDCT3Y0JLQG04MV' where id=7; -update noar tt set b2='EQ960JVNXC2K' where id=7; -update noar ti set b2='EQ960JVNXC2K' where id=7; -update noar tt set v0='QP' where id=8; -update noar ti set v0='QP' where id=8; -update noar tt set b0='50H5F34V0JX2AHRNCX0O5K79' where id=8; -update noar ti set b0='50H5F34V0JX2AHRNCX0O5K79' where id=8; -update noar tt set v0='G8YSYAKL6JV' where id=8; -update noar ti set v0='G8YSYAKL6JV' where id=8; -update noar tt set b1='2M3EV01GIG2BDBBZNWD3E1RYS6T' where id=8; -update noar ti set b1='2M3EV01GIG2BDBBZNWD3E1RYS6T' where id=8; -update noar tt set v0='5DHUHZE3' where id=8; -update noar ti set v0='5DHUHZE3' where id=8; -update noar tt set b2='CXK5HHVF2LVUIFVHA5' where id=8; -update noar ti set b2='CXK5HHVF2LVUIFVHA5' where id=8; -update noar tt set v0='E3BMKSHIKWSGNHCWP' where id=9; -update noar ti set v0='E3BMKSHIKWSGNHCWP' where id=9; -update noar tt set b0='0UQFIJSPHTHVMT3AMCTJ4XWE56' where id=9; -update noar ti set b0='0UQFIJSPHTHVMT3AMCTJ4XWE56' where id=9; -update noar tt set v0='C60S' where id=9; -update noar ti set v0='C60S' where id=9; -update noar tt set b1='C' where id=9; -update noar ti set b1='C' where id=9; -update noar tt set v0='7PNMBG6D39OPYB00OJPOBI1' where id=9; -update noar ti set v0='7PNMBG6D39OPYB00OJPOBI1' where id=9; -update noar tt set b2='3ONR5C7MAO1X5X9N6RKEIEB87RWPPQBT' where id=9; -update noar ti set b2='3ONR5C7MAO1X5X9N6RKEIEB87RWPPQBT' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 mediumblob not null, -b1 blob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='A4AA3FXYV4DTPJKHYAKUOJW3ZK' where id=1; -update noar ti set v0='A4AA3FXYV4DTPJKHYAKUOJW3ZK' where id=1; -update noar tt set b0='R8IEW' where id=1; -update noar ti set b0='R8IEW' where id=1; -update noar tt set v0='OR0M4TX' where id=1; -update noar ti set v0='OR0M4TX' where id=1; -update noar tt set b1='QJTLO20R' where id=1; -update noar ti set b1='QJTLO20R' where id=1; -update noar tt set v0='NGDQHAI7148MQ22026DJ41EK9FN2Y' where id=1; -update noar ti set v0='NGDQHAI7148MQ22026DJ41EK9FN2Y' where id=1; -update noar tt set b2='S65QS2IL3MMOY08HRFHON2DPBPZDL' where id=1; -update noar ti set b2='S65QS2IL3MMOY08HRFHON2DPBPZDL' where id=1; -update noar tt set v0='FF3XO7' where id=2; -update noar ti set v0='FF3XO7' where id=2; -update noar tt set b0='CGTC' where id=2; -update noar ti set b0='CGTC' where id=2; -update noar tt set v0='DT6WS7GJTLADMRGUQ7V8EZDRWB' where id=2; -update noar ti set v0='DT6WS7GJTLADMRGUQ7V8EZDRWB' where id=2; -update noar tt set b1='UQ55G3FP095A77' where id=2; -update noar ti set b1='UQ55G3FP095A77' where id=2; -update noar tt set v0='QR3HB1SPVQWL80876SMPMESCKY0YI5' where id=2; -update noar ti set v0='QR3HB1SPVQWL80876SMPMESCKY0YI5' where id=2; -update noar tt set b2='WIYEY4CVM4ND' where id=2; -update noar ti set b2='WIYEY4CVM4ND' where id=2; -update noar tt set v0='87F' where id=3; -update noar ti set v0='87F' where id=3; -update noar tt set b0='V73VPVY' where id=3; -update noar ti set b0='V73VPVY' where id=3; -update noar tt set v0='21XNY8' where id=3; -update noar ti set v0='21XNY8' where id=3; -update noar tt set b1='REH5S' where id=3; -update noar ti set b1='REH5S' where id=3; -update noar tt set v0='GOOB18DFUSH8U17V6G0' where id=3; -update noar ti set v0='GOOB18DFUSH8U17V6G0' where id=3; -update noar tt set b2='GA4NUOMAEMEARS3BJ923K' where id=3; -update noar ti set b2='GA4NUOMAEMEARS3BJ923K' where id=3; -update noar tt set v0='6S137V9YMPXJ3Q0I6WC5K' where id=4; -update noar ti set v0='6S137V9YMPXJ3Q0I6WC5K' where id=4; -update noar tt set b0='8IQA1OY3AV9RLCJHKW' where id=4; -update noar ti set b0='8IQA1OY3AV9RLCJHKW' where id=4; -update noar tt set v0='M2ND1' where id=4; -update noar ti set v0='M2ND1' where id=4; -update noar tt set b1='UXZV2GF5FYPEOPKOBPNN4F75HOFL' where id=4; -update noar ti set b1='UXZV2GF5FYPEOPKOBPNN4F75HOFL' where id=4; -update noar tt set v0='HCBTC1UI7VEE6OO' where id=4; -update noar ti set v0='HCBTC1UI7VEE6OO' where id=4; -update noar tt set b2='EUVNBYY9' where id=4; -update noar ti set b2='EUVNBYY9' where id=4; -update noar tt set v0='O78QJ7K7HAR0FZR6K' where id=5; -update noar ti set v0='O78QJ7K7HAR0FZR6K' where id=5; -update noar tt set b0='10OKAVKT2JDOUVUCTRERCY2VR' where id=5; -update noar ti set b0='10OKAVKT2JDOUVUCTRERCY2VR' where id=5; -update noar tt set v0='FAWT4QEK7II0Z6JF' where id=5; -update noar ti set v0='FAWT4QEK7II0Z6JF' where id=5; -update noar tt set b1='3Z3U30DUZ7KZTAZWAHGY' where id=5; -update noar ti set b1='3Z3U30DUZ7KZTAZWAHGY' where id=5; -update noar tt set v0='S4MQ8C3EW9A5R' where id=5; -update noar ti set v0='S4MQ8C3EW9A5R' where id=5; -update noar tt set b2='26Z' where id=5; -update noar ti set b2='26Z' where id=5; -update noar tt set v0='8GB2DBT8V' where id=6; -update noar ti set v0='8GB2DBT8V' where id=6; -update noar tt set b0='OFAUM4J3OQS1NYTNFEZJE2LTRP5BRS' where id=6; -update noar ti set b0='OFAUM4J3OQS1NYTNFEZJE2LTRP5BRS' where id=6; -update noar tt set v0='5YXZVC5A9EWVZ9HGGNP9DX0NJD' where id=6; -update noar ti set v0='5YXZVC5A9EWVZ9HGGNP9DX0NJD' where id=6; -update noar tt set b1='R99BWONGOT0' where id=6; -update noar ti set b1='R99BWONGOT0' where id=6; -update noar tt set v0='LL0VX2VA74DZIE' where id=6; -update noar ti set v0='LL0VX2VA74DZIE' where id=6; -update noar tt set b2='ULDWVM1N7QQZ2B6UM5OUN8NVJDAS003' where id=6; -update noar ti set b2='ULDWVM1N7QQZ2B6UM5OUN8NVJDAS003' where id=6; -update noar tt set v0='WWF9QN8Z6S05PUAE972300L26' where id=7; -update noar ti set v0='WWF9QN8Z6S05PUAE972300L26' where id=7; -update noar tt set b0='BMS3TM3HIKLE0JPJYCPDXZQ9U4O1GPYE' where id=7; -update noar ti set b0='BMS3TM3HIKLE0JPJYCPDXZQ9U4O1GPYE' where id=7; -update noar tt set v0='CWEGE0JEGGJKE5EDY2GGTM' where id=7; -update noar ti set v0='CWEGE0JEGGJKE5EDY2GGTM' where id=7; -update noar tt set b1='QR4GBJ5GQYR88N7E4L9K1ZP' where id=7; -update noar ti set b1='QR4GBJ5GQYR88N7E4L9K1ZP' where id=7; -update noar tt set v0='H3PMCSEU9MPSH' where id=7; -update noar ti set v0='H3PMCSEU9MPSH' where id=7; -update noar tt set b2='RRFISX4EEFU3JBUDRB1KRIVR04FW34' where id=7; -update noar ti set b2='RRFISX4EEFU3JBUDRB1KRIVR04FW34' where id=7; -update noar tt set v0='GPY' where id=8; -update noar ti set v0='GPY' where id=8; -update noar tt set b0='28ISLOSD81EN6YD3ACSXDF' where id=8; -update noar ti set b0='28ISLOSD81EN6YD3ACSXDF' where id=8; -update noar tt set v0='QQT6CN6OD1UWQ' where id=8; -update noar ti set v0='QQT6CN6OD1UWQ' where id=8; -update noar tt set b1='2HVGRSDZDGITT05MQ4IPIOER' where id=8; -update noar ti set b1='2HVGRSDZDGITT05MQ4IPIOER' where id=8; -update noar tt set v0='1SIVJG4CFLL1407AAALM0PZEXB7A65E' where id=8; -update noar ti set v0='1SIVJG4CFLL1407AAALM0PZEXB7A65E' where id=8; -update noar tt set b2='2MTZ4PJR' where id=8; -update noar ti set b2='2MTZ4PJR' where id=8; -update noar tt set v0='667GOGOD0WCETW1TWMT' where id=9; -update noar ti set v0='667GOGOD0WCETW1TWMT' where id=9; -update noar tt set b0='O8J29YPW92CJF2' where id=9; -update noar ti set b0='O8J29YPW92CJF2' where id=9; -update noar tt set v0='PCAMFQ6JRUKDMQ68ICC4KLF' where id=9; -update noar ti set v0='PCAMFQ6JRUKDMQ68ICC4KLF' where id=9; -update noar tt set b1='UGVTRDPGYBFIJTNF2S2INWO0' where id=9; -update noar ti set b1='UGVTRDPGYBFIJTNF2S2INWO0' where id=9; -update noar tt set v0='V4X1JPMZHKF2EMF' where id=9; -update noar ti set v0='V4X1JPMZHKF2EMF' where id=9; -update noar tt set b2='KDZWNS' where id=9; -update noar ti set b2='KDZWNS' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 mediumblob null, -b1 blob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='8MQ2YCFR' where id=1; -update noar ti set v0='8MQ2YCFR' where id=1; -update noar tt set b0='PFA1F6QG4LY21FC8K2' where id=1; -update noar ti set b0='PFA1F6QG4LY21FC8K2' where id=1; -update noar tt set v0='F3SLC6TRE8IUOR2FCVKE4FAX' where id=1; -update noar ti set v0='F3SLC6TRE8IUOR2FCVKE4FAX' where id=1; -update noar tt set b1='BHASSA7NM0XCN21MIEQL5SLCONQS' where id=1; -update noar ti set b1='BHASSA7NM0XCN21MIEQL5SLCONQS' where id=1; -update noar tt set v0='2GRSWH' where id=1; -update noar ti set v0='2GRSWH' where id=1; -update noar tt set b2='4CZ4F15ZHEYG821PQ' where id=1; -update noar ti set b2='4CZ4F15ZHEYG821PQ' where id=1; -update noar tt set v0='9Y4LOWTMNOUCV3IX' where id=2; -update noar ti set v0='9Y4LOWTMNOUCV3IX' where id=2; -update noar tt set b0='8HIDXNK9S4P0EI70I7XGFBA2VWCF' where id=2; -update noar ti set b0='8HIDXNK9S4P0EI70I7XGFBA2VWCF' where id=2; -update noar tt set v0='P0KQ2W3EJZEGAC3' where id=2; -update noar ti set v0='P0KQ2W3EJZEGAC3' where id=2; -update noar tt set b1='21MKQLUHZUGUM2G1VL6JTJGS6X' where id=2; -update noar ti set b1='21MKQLUHZUGUM2G1VL6JTJGS6X' where id=2; -update noar tt set v0='R751A3HRK' where id=2; -update noar ti set v0='R751A3HRK' where id=2; -update noar tt set b2='F33JMZA4E2CSSLW' where id=2; -update noar ti set b2='F33JMZA4E2CSSLW' where id=2; -update noar tt set v0='YVD3GCINTKF070B6FRL6179O4TP' where id=3; -update noar ti set v0='YVD3GCINTKF070B6FRL6179O4TP' where id=3; -update noar tt set b0='TPIKHORNGPZDZY21WP8MVWRPTJTL1H5P' where id=3; -update noar ti set b0='TPIKHORNGPZDZY21WP8MVWRPTJTL1H5P' where id=3; -update noar tt set v0='F6I3WEVWK8AXJW9Q6UC8' where id=3; -update noar ti set v0='F6I3WEVWK8AXJW9Q6UC8' where id=3; -update noar tt set b1='PQOD' where id=3; -update noar ti set b1='PQOD' where id=3; -update noar tt set v0='EA7VW5SB3CNWQ' where id=3; -update noar ti set v0='EA7VW5SB3CNWQ' where id=3; -update noar tt set b2='VVY56UFFFIL' where id=3; -update noar ti set b2='VVY56UFFFIL' where id=3; -update noar tt set v0='ZPGZBU401P2AD' where id=4; -update noar ti set v0='ZPGZBU401P2AD' where id=4; -update noar tt set b0='39HK9KC76BC82HS89Y4CY1H00' where id=4; -update noar ti set b0='39HK9KC76BC82HS89Y4CY1H00' where id=4; -update noar tt set v0='0PMR3ZHSP14HU2VKT9CK676ZP' where id=4; -update noar ti set v0='0PMR3ZHSP14HU2VKT9CK676ZP' where id=4; -update noar tt set b1='4WEWY619KNDBWI16V59YJLU' where id=4; -update noar ti set b1='4WEWY619KNDBWI16V59YJLU' where id=4; -update noar tt set v0='RRYCBO' where id=4; -update noar ti set v0='RRYCBO' where id=4; -update noar tt set b2='VZQS1YIGKJWVWGOKKPXI' where id=4; -update noar ti set b2='VZQS1YIGKJWVWGOKKPXI' where id=4; -update noar tt set v0='UUEADOXZ5QVMST' where id=5; -update noar ti set v0='UUEADOXZ5QVMST' where id=5; -update noar tt set b0='CYTF' where id=5; -update noar ti set b0='CYTF' where id=5; -update noar tt set v0='7GR08064UUKL5P6' where id=5; -update noar ti set v0='7GR08064UUKL5P6' where id=5; -update noar tt set b1='AOCAZYOH4MDQGT4SQA' where id=5; -update noar ti set b1='AOCAZYOH4MDQGT4SQA' where id=5; -update noar tt set v0='HXH6KF7XL9Y5FR1KMU3DAGXSX8PY' where id=5; -update noar ti set v0='HXH6KF7XL9Y5FR1KMU3DAGXSX8PY' where id=5; -update noar tt set b2='DNTOSGXA' where id=5; -update noar ti set b2='DNTOSGXA' where id=5; -update noar tt set v0='D3WALG84SDKPU3WMS5V27' where id=6; -update noar ti set v0='D3WALG84SDKPU3WMS5V27' where id=6; -update noar tt set b0='GZMNXGYTBMLQUQZKM4SEDI6R' where id=6; -update noar ti set b0='GZMNXGYTBMLQUQZKM4SEDI6R' where id=6; -update noar tt set v0='8R7AZY6DYH7MT0E' where id=6; -update noar ti set v0='8R7AZY6DYH7MT0E' where id=6; -update noar tt set b1='0YXI' where id=6; -update noar ti set b1='0YXI' where id=6; -update noar tt set v0='A1BSGA' where id=6; -update noar ti set v0='A1BSGA' where id=6; -update noar tt set b2='V0WEKR22REQAN3UKDGZ4RY2QY' where id=6; -update noar ti set b2='V0WEKR22REQAN3UKDGZ4RY2QY' where id=6; -update noar tt set v0='768FII33UN54Q68P100PT4LBPUYTLBS3' where id=7; -update noar ti set v0='768FII33UN54Q68P100PT4LBPUYTLBS3' where id=7; -update noar tt set b0='0VKHPU2A4C1MH6WIWR4O5FNDRPC2N' where id=7; -update noar ti set b0='0VKHPU2A4C1MH6WIWR4O5FNDRPC2N' where id=7; -update noar tt set v0='ZOMFQ7WUNK124IFFFCAJ1JY3Y07' where id=7; -update noar ti set v0='ZOMFQ7WUNK124IFFFCAJ1JY3Y07' where id=7; -update noar tt set b1='JUQPOXD6' where id=7; -update noar ti set b1='JUQPOXD6' where id=7; -update noar tt set v0='QM4I0FKR76JR8N14PKECY' where id=7; -update noar ti set v0='QM4I0FKR76JR8N14PKECY' where id=7; -update noar tt set b2='HBNIMG00FV3J0SKV1HTOP' where id=7; -update noar ti set b2='HBNIMG00FV3J0SKV1HTOP' where id=7; -update noar tt set v0='K8Z8FUVYPBFT2' where id=8; -update noar ti set v0='K8Z8FUVYPBFT2' where id=8; -update noar tt set b0='T40VI2Z32AHGT' where id=8; -update noar ti set b0='T40VI2Z32AHGT' where id=8; -update noar tt set v0='1BA2D926WT1ZVF164HK7L5UNDJQ7W2XM' where id=8; -update noar ti set v0='1BA2D926WT1ZVF164HK7L5UNDJQ7W2XM' where id=8; -update noar tt set b1='E2MT8HYQJZEXEFH' where id=8; -update noar ti set b1='E2MT8HYQJZEXEFH' where id=8; -update noar tt set v0='EPCDJD9J9VD7UOJ1YIFE5JKR7' where id=8; -update noar ti set v0='EPCDJD9J9VD7UOJ1YIFE5JKR7' where id=8; -update noar tt set b2='FQWKFD83775Q9O3TYP42QA' where id=8; -update noar ti set b2='FQWKFD83775Q9O3TYP42QA' where id=8; -update noar tt set v0='3K207KSNHM4' where id=9; -update noar ti set v0='3K207KSNHM4' where id=9; -update noar tt set b0='LE6GI1B' where id=9; -update noar ti set b0='LE6GI1B' where id=9; -update noar tt set v0='2WCQTY2N7YJM4C7GPGP2NTQN' where id=9; -update noar ti set v0='2WCQTY2N7YJM4C7GPGP2NTQN' where id=9; -update noar tt set b1='6XIVK5RVY1IY66GQEJZXISGVNOM381' where id=9; -update noar ti set b1='6XIVK5RVY1IY66GQEJZXISGVNOM381' where id=9; -update noar tt set v0='Z0SVHJCDXRU71XM7R' where id=9; -update noar ti set v0='Z0SVHJCDXRU71XM7R' where id=9; -update noar tt set b2='F2XXINS0OIMAVLT9W' where id=9; -update noar ti set b2='F2XXINS0OIMAVLT9W' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 mediumblob null, -b1 blob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='ZXAHA9KCIDO7MYN6JF0' where id=1; -update noar ti set v0='ZXAHA9KCIDO7MYN6JF0' where id=1; -update noar tt set b0='HZXGWHMW4T7PBHPS' where id=1; -update noar ti set b0='HZXGWHMW4T7PBHPS' where id=1; -update noar tt set v0='GI' where id=1; -update noar ti set v0='GI' where id=1; -update noar tt set b1='DSVNHETNPM9LOBBO07' where id=1; -update noar ti set b1='DSVNHETNPM9LOBBO07' where id=1; -update noar tt set v0='469GMG3PALC2TXC2RVVICWOYF' where id=1; -update noar ti set v0='469GMG3PALC2TXC2RVVICWOYF' where id=1; -update noar tt set b2='638HJQ2K13SM5TFTS3' where id=1; -update noar ti set b2='638HJQ2K13SM5TFTS3' where id=1; -update noar tt set v0='31LMF83CF9KRQC0LP2VHITBSU9U' where id=2; -update noar ti set v0='31LMF83CF9KRQC0LP2VHITBSU9U' where id=2; -update noar tt set b0='G87LXRXL' where id=2; -update noar ti set b0='G87LXRXL' where id=2; -update noar tt set v0='ZIUGLK2VB390NZ' where id=2; -update noar ti set v0='ZIUGLK2VB390NZ' where id=2; -update noar tt set b1='2Z8YQM' where id=2; -update noar ti set b1='2Z8YQM' where id=2; -update noar tt set v0='WD418INXDHJA' where id=2; -update noar ti set v0='WD418INXDHJA' where id=2; -update noar tt set b2='6OXKD5KV38KEBF0NZ1K' where id=2; -update noar ti set b2='6OXKD5KV38KEBF0NZ1K' where id=2; -update noar tt set v0='CYMIUCERBXVP4CJ' where id=3; -update noar ti set v0='CYMIUCERBXVP4CJ' where id=3; -update noar tt set b0='6147G0H77U' where id=3; -update noar ti set b0='6147G0H77U' where id=3; -update noar tt set v0='F06IDV8O2LBYHT5IR6HDMHIQZ6V7' where id=3; -update noar ti set v0='F06IDV8O2LBYHT5IR6HDMHIQZ6V7' where id=3; -update noar tt set b1='DUGSUM4M8U' where id=3; -update noar ti set b1='DUGSUM4M8U' where id=3; -update noar tt set v0='ROVO1UK' where id=3; -update noar ti set v0='ROVO1UK' where id=3; -update noar tt set b2='24CYUW51G0' where id=3; -update noar ti set b2='24CYUW51G0' where id=3; -update noar tt set v0='HCJU' where id=4; -update noar ti set v0='HCJU' where id=4; -update noar tt set b0='PQJBTRWYFKQPXIW0B8YFS1' where id=4; -update noar ti set b0='PQJBTRWYFKQPXIW0B8YFS1' where id=4; -update noar tt set v0='ZMAYPO6ER' where id=4; -update noar ti set v0='ZMAYPO6ER' where id=4; -update noar tt set b1='GXAWFK7GQNYAMDTGH97391ZUC6' where id=4; -update noar ti set b1='GXAWFK7GQNYAMDTGH97391ZUC6' where id=4; -update noar tt set v0='4GYMUYNFHJLUCIPYK5' where id=4; -update noar ti set v0='4GYMUYNFHJLUCIPYK5' where id=4; -update noar tt set b2='W6A1XHZA9DEQZIP442' where id=4; -update noar ti set b2='W6A1XHZA9DEQZIP442' where id=4; -update noar tt set v0='JL5DIB1ZG68IL' where id=5; -update noar ti set v0='JL5DIB1ZG68IL' where id=5; -update noar tt set b0='VURREKC3D03KRDADXTC715RXPNVM3' where id=5; -update noar ti set b0='VURREKC3D03KRDADXTC715RXPNVM3' where id=5; -update noar tt set v0='XP07RSPJ299IIU1Y6E8' where id=5; -update noar ti set v0='XP07RSPJ299IIU1Y6E8' where id=5; -update noar tt set b1='L9O3F8JS15FX6XG2WNKTX1SY1H6U' where id=5; -update noar ti set b1='L9O3F8JS15FX6XG2WNKTX1SY1H6U' where id=5; -update noar tt set v0='MM6B' where id=5; -update noar ti set v0='MM6B' where id=5; -update noar tt set b2='HVM6HVBVI0HX' where id=5; -update noar ti set b2='HVM6HVBVI0HX' where id=5; -update noar tt set v0='OS2PNDORQ8I86YN1KM4OC' where id=6; -update noar ti set v0='OS2PNDORQ8I86YN1KM4OC' where id=6; -update noar tt set b0='AV8VY2WLQU10M6NDTM59GRU8EHCLQR' where id=6; -update noar ti set b0='AV8VY2WLQU10M6NDTM59GRU8EHCLQR' where id=6; -update noar tt set v0='4JJNP148OUHMJ3EGIOHOA' where id=6; -update noar ti set v0='4JJNP148OUHMJ3EGIOHOA' where id=6; -update noar tt set b1='C' where id=6; -update noar ti set b1='C' where id=6; -update noar tt set v0='JSJTKGT3U9ZLMTH5AKR4U5SHMQ' where id=6; -update noar ti set v0='JSJTKGT3U9ZLMTH5AKR4U5SHMQ' where id=6; -update noar tt set b2='15A4BMDBV1X64' where id=6; -update noar ti set b2='15A4BMDBV1X64' where id=6; -update noar tt set v0='OVT5FZH3YI1FBYQVCXK1OR' where id=7; -update noar ti set v0='OVT5FZH3YI1FBYQVCXK1OR' where id=7; -update noar tt set b0='YRY5WJD9HEAC2Q0XL' where id=7; -update noar ti set b0='YRY5WJD9HEAC2Q0XL' where id=7; -update noar tt set v0='P5V009NA8OG6MYEZP8VKM2R8K15' where id=7; -update noar ti set v0='P5V009NA8OG6MYEZP8VKM2R8K15' where id=7; -update noar tt set b1='Z7PR7B2AE6' where id=7; -update noar ti set b1='Z7PR7B2AE6' where id=7; -update noar tt set v0='28SMM2OFCE83W9PZN' where id=7; -update noar ti set v0='28SMM2OFCE83W9PZN' where id=7; -update noar tt set b2='RMVZ2FZ5JB' where id=7; -update noar ti set b2='RMVZ2FZ5JB' where id=7; -update noar tt set v0='FP' where id=8; -update noar ti set v0='FP' where id=8; -update noar tt set b0='Q4NWQ' where id=8; -update noar ti set b0='Q4NWQ' where id=8; -update noar tt set v0='PC59FLLRHOH1XY9GL3F' where id=8; -update noar ti set v0='PC59FLLRHOH1XY9GL3F' where id=8; -update noar tt set b1='CB3E25TWUFO5LQBGR350ZK50VLCV' where id=8; -update noar ti set b1='CB3E25TWUFO5LQBGR350ZK50VLCV' where id=8; -update noar tt set v0='87W71S3TD2IB9NL0LIXJ5D2LWOA' where id=8; -update noar ti set v0='87W71S3TD2IB9NL0LIXJ5D2LWOA' where id=8; -update noar tt set b2='XW7M' where id=8; -update noar ti set b2='XW7M' where id=8; -update noar tt set v0='5RG9BBYLBV' where id=9; -update noar ti set v0='5RG9BBYLBV' where id=9; -update noar tt set b0='YH0MD718RL' where id=9; -update noar ti set b0='YH0MD718RL' where id=9; -update noar tt set v0='355O3IB' where id=9; -update noar ti set v0='355O3IB' where id=9; -update noar tt set b1='DMKSG9UV9E0BVPC74Y3W6' where id=9; -update noar ti set b1='DMKSG9UV9E0BVPC74Y3W6' where id=9; -update noar tt set v0='8IYOIY86E' where id=9; -update noar ti set v0='8IYOIY86E' where id=9; -update noar tt set b2='JWBWUD2UOVL665XG9O2' where id=9; -update noar ti set b2='JWBWUD2UOVL665XG9O2' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 mediumblob not null, -b1 blob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='53NJXRWODZ00H0P' where id=1; -update noar ti set v0='53NJXRWODZ00H0P' where id=1; -update noar tt set b0='Q' where id=1; -update noar ti set b0='Q' where id=1; -update noar tt set v0='LFXBBYJM' where id=1; -update noar ti set v0='LFXBBYJM' where id=1; -update noar tt set b1='FQDNKXWV87BCK792UTT2GVTMOOAX7' where id=1; -update noar ti set b1='FQDNKXWV87BCK792UTT2GVTMOOAX7' where id=1; -update noar tt set v0='SYL32JY5KP3J6G2Y' where id=1; -update noar ti set v0='SYL32JY5KP3J6G2Y' where id=1; -update noar tt set b2='U4YF' where id=1; -update noar ti set b2='U4YF' where id=1; -update noar tt set v0='VI0D2S5341KY2Q36JHTR' where id=2; -update noar ti set v0='VI0D2S5341KY2Q36JHTR' where id=2; -update noar tt set b0='4IOP2NA7T03LPQXEPCMIKZB1IRED0' where id=2; -update noar ti set b0='4IOP2NA7T03LPQXEPCMIKZB1IRED0' where id=2; -update noar tt set v0='NZWKB2VXFNU3AVA5QZSZQ3N' where id=2; -update noar ti set v0='NZWKB2VXFNU3AVA5QZSZQ3N' where id=2; -update noar tt set b1='A2L' where id=2; -update noar ti set b1='A2L' where id=2; -update noar tt set v0='SKYND9HJ6NK9YZ0T1' where id=2; -update noar ti set v0='SKYND9HJ6NK9YZ0T1' where id=2; -update noar tt set b2='WU1AXK74NQZLIU20RCTM3P8BKV' where id=2; -update noar ti set b2='WU1AXK74NQZLIU20RCTM3P8BKV' where id=2; -update noar tt set v0='DKN88' where id=3; -update noar ti set v0='DKN88' where id=3; -update noar tt set b0='ZC525KRA6SE7G3US5MUQLGE86G87D' where id=3; -update noar ti set b0='ZC525KRA6SE7G3US5MUQLGE86G87D' where id=3; -update noar tt set v0='CZWWUFQGS93NNS4' where id=3; -update noar ti set v0='CZWWUFQGS93NNS4' where id=3; -update noar tt set b1='35K55I1M7DTG4VEOR2B9PNS24OILM' where id=3; -update noar ti set b1='35K55I1M7DTG4VEOR2B9PNS24OILM' where id=3; -update noar tt set v0='EDDIP9IYAFXMUXWNY' where id=3; -update noar ti set v0='EDDIP9IYAFXMUXWNY' where id=3; -update noar tt set b2='513UJZQEGYUJN' where id=3; -update noar ti set b2='513UJZQEGYUJN' where id=3; -update noar tt set v0='2EM25ILRC41Q' where id=4; -update noar ti set v0='2EM25ILRC41Q' where id=4; -update noar tt set b0='YB8862QIDIQLX' where id=4; -update noar ti set b0='YB8862QIDIQLX' where id=4; -update noar tt set v0='A64ZQAV6H1XFFHI7WKN5PDR71X79' where id=4; -update noar ti set v0='A64ZQAV6H1XFFHI7WKN5PDR71X79' where id=4; -update noar tt set b1='E602RTBF4YLY' where id=4; -update noar ti set b1='E602RTBF4YLY' where id=4; -update noar tt set v0='GK55ETJQT954' where id=4; -update noar ti set v0='GK55ETJQT954' where id=4; -update noar tt set b2='K' where id=4; -update noar ti set b2='K' where id=4; -update noar tt set v0='IFR65JDTP9AUL7XP57X01' where id=5; -update noar ti set v0='IFR65JDTP9AUL7XP57X01' where id=5; -update noar tt set b0='XRPGQ5IPQIPJDR3FF5' where id=5; -update noar ti set b0='XRPGQ5IPQIPJDR3FF5' where id=5; -update noar tt set v0='90ABFY4EH0BMNQX079B' where id=5; -update noar ti set v0='90ABFY4EH0BMNQX079B' where id=5; -update noar tt set b1='IPBPSCH359J72HHM8R' where id=5; -update noar ti set b1='IPBPSCH359J72HHM8R' where id=5; -update noar tt set v0='WDOIIDSM8UDFSTXQMO' where id=5; -update noar ti set v0='WDOIIDSM8UDFSTXQMO' where id=5; -update noar tt set b2='C1SYUE0DSMSS72MPJMRE' where id=5; -update noar ti set b2='C1SYUE0DSMSS72MPJMRE' where id=5; -update noar tt set v0='D71MRM1Q7WS4DAW6EBI1KK8JT7AYMW' where id=6; -update noar ti set v0='D71MRM1Q7WS4DAW6EBI1KK8JT7AYMW' where id=6; -update noar tt set b0='QGDBNCWW054I5X0A' where id=6; -update noar ti set b0='QGDBNCWW054I5X0A' where id=6; -update noar tt set v0='2KNG' where id=6; -update noar ti set v0='2KNG' where id=6; -update noar tt set b1='M6PWKQAOIK4GQVFM' where id=6; -update noar ti set b1='M6PWKQAOIK4GQVFM' where id=6; -update noar tt set v0='V0FEYSZTJ3QSGST7M9WX57ERK' where id=6; -update noar ti set v0='V0FEYSZTJ3QSGST7M9WX57ERK' where id=6; -update noar tt set b2='QVQLMJ7T0RW2O1D7UCO6C6CO9' where id=6; -update noar ti set b2='QVQLMJ7T0RW2O1D7UCO6C6CO9' where id=6; -update noar tt set v0='S9UBSPA2LOX' where id=7; -update noar ti set v0='S9UBSPA2LOX' where id=7; -update noar tt set b0='SED4OQN4PKDSPWBIU1QY53K7P' where id=7; -update noar ti set b0='SED4OQN4PKDSPWBIU1QY53K7P' where id=7; -update noar tt set v0='F' where id=7; -update noar ti set v0='F' where id=7; -update noar tt set b1='JJ1EYCB81DGM1DTFE' where id=7; -update noar ti set b1='JJ1EYCB81DGM1DTFE' where id=7; -update noar tt set v0='SEKYO08VM4KQEZINA8QMQGFY6EE3M' where id=7; -update noar ti set v0='SEKYO08VM4KQEZINA8QMQGFY6EE3M' where id=7; -update noar tt set b2='OYHQPDC7UL5DZSWK3C6228TPQIFB4' where id=7; -update noar ti set b2='OYHQPDC7UL5DZSWK3C6228TPQIFB4' where id=7; -update noar tt set v0='QKQW9I6L7C' where id=8; -update noar ti set v0='QKQW9I6L7C' where id=8; -update noar tt set b0='EPFNTG7M3AR29CT' where id=8; -update noar ti set b0='EPFNTG7M3AR29CT' where id=8; -update noar tt set v0='AXUCJGLQI20UKEWGS98Y7SJWX' where id=8; -update noar ti set v0='AXUCJGLQI20UKEWGS98Y7SJWX' where id=8; -update noar tt set b1='IN12HEJL5VRZV8HMS2E3JR475Y2' where id=8; -update noar ti set b1='IN12HEJL5VRZV8HMS2E3JR475Y2' where id=8; -update noar tt set v0='XFJMZSZMQJF' where id=8; -update noar ti set v0='XFJMZSZMQJF' where id=8; -update noar tt set b2='TN439ONA2C577G9RLWS5FKWII1JA5' where id=8; -update noar ti set b2='TN439ONA2C577G9RLWS5FKWII1JA5' where id=8; -update noar tt set v0='W5UYO' where id=9; -update noar ti set v0='W5UYO' where id=9; -update noar tt set b0='1VXO4SO1VJBFUYPQJ0Z' where id=9; -update noar ti set b0='1VXO4SO1VJBFUYPQJ0Z' where id=9; -update noar tt set v0='F8EYU5O7VUBNPA3ZSE40LMPUG5M46' where id=9; -update noar ti set v0='F8EYU5O7VUBNPA3ZSE40LMPUG5M46' where id=9; -update noar tt set b1='VSCC1APBTFJHNXAD96UVQOQM8G58YUW' where id=9; -update noar ti set b1='VSCC1APBTFJHNXAD96UVQOQM8G58YUW' where id=9; -update noar tt set v0='OLPM6C' where id=9; -update noar ti set v0='OLPM6C' where id=9; -update noar tt set b2='61ERRVAM' where id=9; -update noar ti set b2='61ERRVAM' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 mediumblob not null, -b1 blob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='NSHLIY1U423Y2HQSJDRE6PZI7B1' where id=1; -update noar ti set v0='NSHLIY1U423Y2HQSJDRE6PZI7B1' where id=1; -update noar tt set b0='VABL6HL9UUB5' where id=1; -update noar ti set b0='VABL6HL9UUB5' where id=1; -update noar tt set v0='0QSQTRBA6WIK5RX8TTESB1' where id=1; -update noar ti set v0='0QSQTRBA6WIK5RX8TTESB1' where id=1; -update noar tt set b1='LALW8OY22L' where id=1; -update noar ti set b1='LALW8OY22L' where id=1; -update noar tt set v0='ZI0BXLLJL3' where id=1; -update noar ti set v0='ZI0BXLLJL3' where id=1; -update noar tt set b2='S9HHJYL3OPWFBC0HRPEL0G7RFB8' where id=1; -update noar ti set b2='S9HHJYL3OPWFBC0HRPEL0G7RFB8' where id=1; -update noar tt set v0='YOJJRWZHJYRMZ' where id=2; -update noar ti set v0='YOJJRWZHJYRMZ' where id=2; -update noar tt set b0='GX8QW9X' where id=2; -update noar ti set b0='GX8QW9X' where id=2; -update noar tt set v0='ZTZ9YYL061BQFTMS0ZAJJT' where id=2; -update noar ti set v0='ZTZ9YYL061BQFTMS0ZAJJT' where id=2; -update noar tt set b1='MLJNCCSF7V9XDYDT69X7SIYSO' where id=2; -update noar ti set b1='MLJNCCSF7V9XDYDT69X7SIYSO' where id=2; -update noar tt set v0='7BDEXA74YEBZVAQP70' where id=2; -update noar ti set v0='7BDEXA74YEBZVAQP70' where id=2; -update noar tt set b2='YOZ1ZFC7O' where id=2; -update noar ti set b2='YOZ1ZFC7O' where id=2; -update noar tt set v0='LK4B9LW' where id=3; -update noar ti set v0='LK4B9LW' where id=3; -update noar tt set b0='GJNADVGYW17TZ8PRKPGC2Y2VXTYU5SFO' where id=3; -update noar ti set b0='GJNADVGYW17TZ8PRKPGC2Y2VXTYU5SFO' where id=3; -update noar tt set v0='C09MSQYBKFTTT14' where id=3; -update noar ti set v0='C09MSQYBKFTTT14' where id=3; -update noar tt set b1='C5P6PHI3DS1RN9Z6GKBVFIVRRLXAPN10' where id=3; -update noar ti set b1='C5P6PHI3DS1RN9Z6GKBVFIVRRLXAPN10' where id=3; -update noar tt set v0='NQFX9CKKWL2BLIN7' where id=3; -update noar ti set v0='NQFX9CKKWL2BLIN7' where id=3; -update noar tt set b2='ZITORHH66JSN1HLMKZFSRIZZ' where id=3; -update noar ti set b2='ZITORHH66JSN1HLMKZFSRIZZ' where id=3; -update noar tt set v0='DOUN60SVXDJ9ALD6B95NOTKUSE7VJTAO' where id=4; -update noar ti set v0='DOUN60SVXDJ9ALD6B95NOTKUSE7VJTAO' where id=4; -update noar tt set b0='B1Y2JFRQ38GDAFOTT592KQKC3MVT' where id=4; -update noar ti set b0='B1Y2JFRQ38GDAFOTT592KQKC3MVT' where id=4; -update noar tt set v0='DIBG0XDOUXE9KA2OLXVWWYZNCTRX1' where id=4; -update noar ti set v0='DIBG0XDOUXE9KA2OLXVWWYZNCTRX1' where id=4; -update noar tt set b1='RAKX3HNE42MT0LEU5VN84KK7' where id=4; -update noar ti set b1='RAKX3HNE42MT0LEU5VN84KK7' where id=4; -update noar tt set v0='J8F1SQAE8YIKZ8GAKMKYMRQWFLE' where id=4; -update noar ti set v0='J8F1SQAE8YIKZ8GAKMKYMRQWFLE' where id=4; -update noar tt set b2='3FSV8Z4ZEAG8FWWSD' where id=4; -update noar ti set b2='3FSV8Z4ZEAG8FWWSD' where id=4; -update noar tt set v0='PS5G9KCN9Z7D6MZGY' where id=5; -update noar ti set v0='PS5G9KCN9Z7D6MZGY' where id=5; -update noar tt set b0='25VFXPCQKWZE6I1JK' where id=5; -update noar ti set b0='25VFXPCQKWZE6I1JK' where id=5; -update noar tt set v0='WWTKFAP11TY47JAD' where id=5; -update noar ti set v0='WWTKFAP11TY47JAD' where id=5; -update noar tt set b1='NSC9NG5E4U87' where id=5; -update noar ti set b1='NSC9NG5E4U87' where id=5; -update noar tt set v0='Q6EA8DQR04ZHO6JUMK9R5CSO' where id=5; -update noar ti set v0='Q6EA8DQR04ZHO6JUMK9R5CSO' where id=5; -update noar tt set b2='OBRWATVWS4X7EEZLW0ZUS5YMF' where id=5; -update noar ti set b2='OBRWATVWS4X7EEZLW0ZUS5YMF' where id=5; -update noar tt set v0='Y' where id=6; -update noar ti set v0='Y' where id=6; -update noar tt set b0='GTM9MDR94T39' where id=6; -update noar ti set b0='GTM9MDR94T39' where id=6; -update noar tt set v0='MSFRV01L9P' where id=6; -update noar ti set v0='MSFRV01L9P' where id=6; -update noar tt set b1='ED2IAIAQ3M8QNB7E3CP' where id=6; -update noar ti set b1='ED2IAIAQ3M8QNB7E3CP' where id=6; -update noar tt set v0='X9TU3OOOGO7GSXKPMJ5O' where id=6; -update noar ti set v0='X9TU3OOOGO7GSXKPMJ5O' where id=6; -update noar tt set b2='M4LLW5HUSMA60L1O218Z7KWXT3F8L' where id=6; -update noar ti set b2='M4LLW5HUSMA60L1O218Z7KWXT3F8L' where id=6; -update noar tt set v0='RJB' where id=7; -update noar ti set v0='RJB' where id=7; -update noar tt set b0='153SQWKJCOZKQANGE' where id=7; -update noar ti set b0='153SQWKJCOZKQANGE' where id=7; -update noar tt set v0='2FQFTXN9CR82P1' where id=7; -update noar ti set v0='2FQFTXN9CR82P1' where id=7; -update noar tt set b1='MFY' where id=7; -update noar ti set b1='MFY' where id=7; -update noar tt set v0='SKWK78N0JRVQFQSNK1MOWAEBR' where id=7; -update noar ti set v0='SKWK78N0JRVQFQSNK1MOWAEBR' where id=7; -update noar tt set b2='2P1IBF7T27LVEVMZHRFSYUM11' where id=7; -update noar ti set b2='2P1IBF7T27LVEVMZHRFSYUM11' where id=7; -update noar tt set v0='4QX' where id=8; -update noar ti set v0='4QX' where id=8; -update noar tt set b0='NGHBI3GWHK86Z2U4GAMDI3YHE' where id=8; -update noar ti set b0='NGHBI3GWHK86Z2U4GAMDI3YHE' where id=8; -update noar tt set v0='4441XKWYCAOD4YOEOR831WIYMH9MTT' where id=8; -update noar ti set v0='4441XKWYCAOD4YOEOR831WIYMH9MTT' where id=8; -update noar tt set b1='A2ORVUD' where id=8; -update noar ti set b1='A2ORVUD' where id=8; -update noar tt set v0='E092CX2NKC256BPH1RNHJAGOW391BMY1' where id=8; -update noar ti set v0='E092CX2NKC256BPH1RNHJAGOW391BMY1' where id=8; -update noar tt set b2='K3BJR3PDKTNH52PPJJIUD9JLRXNMY2K9' where id=8; -update noar ti set b2='K3BJR3PDKTNH52PPJJIUD9JLRXNMY2K9' where id=8; -update noar tt set v0='VW7MM6XU4ZF0LSL6531WTJ5A' where id=9; -update noar ti set v0='VW7MM6XU4ZF0LSL6531WTJ5A' where id=9; -update noar tt set b0='Q30O1UHU' where id=9; -update noar ti set b0='Q30O1UHU' where id=9; -update noar tt set v0='DD9MBAFXKXMORAPO03FEEBFIS0OLPSJ' where id=9; -update noar ti set v0='DD9MBAFXKXMORAPO03FEEBFIS0OLPSJ' where id=9; -update noar tt set b1='UDNI50X1714QESXPJAEG6KFWN3T' where id=9; -update noar ti set b1='UDNI50X1714QESXPJAEG6KFWN3T' where id=9; -update noar tt set v0='0' where id=9; -update noar ti set v0='0' where id=9; -update noar tt set b2='O6H29BGGYZ1M5KLR2DR35' where id=9; -update noar ti set b2='O6H29BGGYZ1M5KLR2DR35' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 mediumblob null, -b1 mediumblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='02WIPE8AS' where id=1; -update noar ti set v0='02WIPE8AS' where id=1; -update noar tt set b0='Q' where id=1; -update noar ti set b0='Q' where id=1; -update noar tt set v0='U6A4NPVVNTG81KRLEV0BBFNNVTFUBO' where id=1; -update noar ti set v0='U6A4NPVVNTG81KRLEV0BBFNNVTFUBO' where id=1; -update noar tt set b1='WDB8' where id=1; -update noar ti set b1='WDB8' where id=1; -update noar tt set v0='5LBGKCZX9UJRDB' where id=1; -update noar ti set v0='5LBGKCZX9UJRDB' where id=1; -update noar tt set b2='NN6A1IZSA6MNPR35CFL8UPQ' where id=1; -update noar ti set b2='NN6A1IZSA6MNPR35CFL8UPQ' where id=1; -update noar tt set v0='K8G55IME4GZ4' where id=2; -update noar ti set v0='K8G55IME4GZ4' where id=2; -update noar tt set b0='GAIYM36GR0TWRALL61E' where id=2; -update noar ti set b0='GAIYM36GR0TWRALL61E' where id=2; -update noar tt set v0='NCY1UXKF2ZWP9PGFS3PBMPOP90' where id=2; -update noar ti set v0='NCY1UXKF2ZWP9PGFS3PBMPOP90' where id=2; -update noar tt set b1='2TG' where id=2; -update noar ti set b1='2TG' where id=2; -update noar tt set v0='2AFJFY8285A' where id=2; -update noar ti set v0='2AFJFY8285A' where id=2; -update noar tt set b2='W49R8E96BAX' where id=2; -update noar ti set b2='W49R8E96BAX' where id=2; -update noar tt set v0='VQU48DKJGWZSG27HH51' where id=3; -update noar ti set v0='VQU48DKJGWZSG27HH51' where id=3; -update noar tt set b0='WVJIRIOSB1MC1' where id=3; -update noar ti set b0='WVJIRIOSB1MC1' where id=3; -update noar tt set v0='46YG' where id=3; -update noar ti set v0='46YG' where id=3; -update noar tt set b1='W80I94C6C1570ALIW2R0AXSRMCGEAOC' where id=3; -update noar ti set b1='W80I94C6C1570ALIW2R0AXSRMCGEAOC' where id=3; -update noar tt set v0='58TSIDW74PPMGI5K9FTV8' where id=3; -update noar ti set v0='58TSIDW74PPMGI5K9FTV8' where id=3; -update noar tt set b2='8T45DBQ3HF4OLW6ULR9GXTB' where id=3; -update noar ti set b2='8T45DBQ3HF4OLW6ULR9GXTB' where id=3; -update noar tt set v0='XXCQ9' where id=4; -update noar ti set v0='XXCQ9' where id=4; -update noar tt set b0='FJG3W74BGRD962QMEY' where id=4; -update noar ti set b0='FJG3W74BGRD962QMEY' where id=4; -update noar tt set v0='6SO83PIRN05YQ9GP6Z7I' where id=4; -update noar ti set v0='6SO83PIRN05YQ9GP6Z7I' where id=4; -update noar tt set b1='UCXDQ4CURUTIA3I11' where id=4; -update noar ti set b1='UCXDQ4CURUTIA3I11' where id=4; -update noar tt set v0='08NZ521CJI7AOU1129JIE8T2A' where id=4; -update noar ti set v0='08NZ521CJI7AOU1129JIE8T2A' where id=4; -update noar tt set b2='GVVOERSLMYRKZXAULJPY' where id=4; -update noar ti set b2='GVVOERSLMYRKZXAULJPY' where id=4; -update noar tt set v0='LU40357O1R7K9R47J12MLTGW' where id=5; -update noar ti set v0='LU40357O1R7K9R47J12MLTGW' where id=5; -update noar tt set b0='3YNMDV' where id=5; -update noar ti set b0='3YNMDV' where id=5; -update noar tt set v0='WOJ9HOG8M6K0' where id=5; -update noar ti set v0='WOJ9HOG8M6K0' where id=5; -update noar tt set b1='79VJWEYV0FIIQ3DC13ACNRX' where id=5; -update noar ti set b1='79VJWEYV0FIIQ3DC13ACNRX' where id=5; -update noar tt set v0='XONPQPN7JE0CHPE9J' where id=5; -update noar ti set v0='XONPQPN7JE0CHPE9J' where id=5; -update noar tt set b2='CSDKN30HKF0C3QL6LBOR' where id=5; -update noar ti set b2='CSDKN30HKF0C3QL6LBOR' where id=5; -update noar tt set v0='69OA8LI92713GE4KP0E0' where id=6; -update noar ti set v0='69OA8LI92713GE4KP0E0' where id=6; -update noar tt set b0='7QEMQ4CH3IITCJWB7QX0IYRK1AY' where id=6; -update noar ti set b0='7QEMQ4CH3IITCJWB7QX0IYRK1AY' where id=6; -update noar tt set v0='GV1Z7LE3F8OUAOZA1H0UN' where id=6; -update noar ti set v0='GV1Z7LE3F8OUAOZA1H0UN' where id=6; -update noar tt set b1='J7PY49GXXTCRO17GJ7N9X5M91' where id=6; -update noar ti set b1='J7PY49GXXTCRO17GJ7N9X5M91' where id=6; -update noar tt set v0='VUVDAUEP6EO8251NTG' where id=6; -update noar ti set v0='VUVDAUEP6EO8251NTG' where id=6; -update noar tt set b2='NBQ2PI7R2AWFHGSZ' where id=6; -update noar ti set b2='NBQ2PI7R2AWFHGSZ' where id=6; -update noar tt set v0='WFYEB3Y8' where id=7; -update noar ti set v0='WFYEB3Y8' where id=7; -update noar tt set b0='VCB' where id=7; -update noar ti set b0='VCB' where id=7; -update noar tt set v0='UPNTU26I12D9R66ZIIXJOHQKB9SL4JH' where id=7; -update noar ti set v0='UPNTU26I12D9R66ZIIXJOHQKB9SL4JH' where id=7; -update noar tt set b1='878YJCZ3ULDFFMEZ2KGUL' where id=7; -update noar ti set b1='878YJCZ3ULDFFMEZ2KGUL' where id=7; -update noar tt set v0='09VUJW2G' where id=7; -update noar ti set v0='09VUJW2G' where id=7; -update noar tt set b2='MR9N8Z830NEMC6UPYLHQFJV' where id=7; -update noar ti set b2='MR9N8Z830NEMC6UPYLHQFJV' where id=7; -update noar tt set v0='YODS7Z6BS' where id=8; -update noar ti set v0='YODS7Z6BS' where id=8; -update noar tt set b0='L1PW5ZU' where id=8; -update noar ti set b0='L1PW5ZU' where id=8; -update noar tt set v0='MRWX4U' where id=8; -update noar ti set v0='MRWX4U' where id=8; -update noar tt set b1='PDDX89RIJL8LOLW7C3KXZ19' where id=8; -update noar ti set b1='PDDX89RIJL8LOLW7C3KXZ19' where id=8; -update noar tt set v0='LEUL3VHWJNBW5L5PG' where id=8; -update noar ti set v0='LEUL3VHWJNBW5L5PG' where id=8; -update noar tt set b2='GPOZMI0B3MB8KNGW293GG59ZO0' where id=8; -update noar ti set b2='GPOZMI0B3MB8KNGW293GG59ZO0' where id=8; -update noar tt set v0='6F6FAICK47' where id=9; -update noar ti set v0='6F6FAICK47' where id=9; -update noar tt set b0='BER1' where id=9; -update noar ti set b0='BER1' where id=9; -update noar tt set v0='GFJTRNY0ZP9XJ' where id=9; -update noar ti set v0='GFJTRNY0ZP9XJ' where id=9; -update noar tt set b1='68H6GUGSBV824J6IHHEV' where id=9; -update noar ti set b1='68H6GUGSBV824J6IHHEV' where id=9; -update noar tt set v0='8HWA5FP01CKG725UD6ZQ' where id=9; -update noar ti set v0='8HWA5FP01CKG725UD6ZQ' where id=9; -update noar tt set b2='71RT' where id=9; -update noar ti set b2='71RT' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 mediumblob null, -b1 mediumblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='YUDNVRAONWSHFR' where id=1; -update noar ti set v0='YUDNVRAONWSHFR' where id=1; -update noar tt set b0='O' where id=1; -update noar ti set b0='O' where id=1; -update noar tt set v0='9CXVFBIAO3YSGYSO3W1LQV0PTM49IX6P' where id=1; -update noar ti set v0='9CXVFBIAO3YSGYSO3W1LQV0PTM49IX6P' where id=1; -update noar tt set b1='JHZX300HA1OBOUM72HG8ASQP8BEW9W' where id=1; -update noar ti set b1='JHZX300HA1OBOUM72HG8ASQP8BEW9W' where id=1; -update noar tt set v0='2A3GY' where id=1; -update noar ti set v0='2A3GY' where id=1; -update noar tt set b2='ZJPEUDXJC351YY6' where id=1; -update noar ti set b2='ZJPEUDXJC351YY6' where id=1; -update noar tt set v0='OBBRACP4Z7VDWO3TS' where id=2; -update noar ti set v0='OBBRACP4Z7VDWO3TS' where id=2; -update noar tt set b0='VC0M3PQLFYC3' where id=2; -update noar ti set b0='VC0M3PQLFYC3' where id=2; -update noar tt set v0='MB639G5' where id=2; -update noar ti set v0='MB639G5' where id=2; -update noar tt set b1='MS1OFAOGAUET3' where id=2; -update noar ti set b1='MS1OFAOGAUET3' where id=2; -update noar tt set v0='23END4W0YLIHP8H36ZUDB9UB7GCHPEOO' where id=2; -update noar ti set v0='23END4W0YLIHP8H36ZUDB9UB7GCHPEOO' where id=2; -update noar tt set b2='ZOUDZQTLVMOAECTAA79Z2L9WH02C' where id=2; -update noar ti set b2='ZOUDZQTLVMOAECTAA79Z2L9WH02C' where id=2; -update noar tt set v0='FCGQBJ4KXVSMWD' where id=3; -update noar ti set v0='FCGQBJ4KXVSMWD' where id=3; -update noar tt set b0='J1LP3V6AXUMKDKS8AMAW20SQ' where id=3; -update noar ti set b0='J1LP3V6AXUMKDKS8AMAW20SQ' where id=3; -update noar tt set v0='L7ODF5P2' where id=3; -update noar ti set v0='L7ODF5P2' where id=3; -update noar tt set b1='SOEJ9FO5M4NI9' where id=3; -update noar ti set b1='SOEJ9FO5M4NI9' where id=3; -update noar tt set v0='1601THUIO' where id=3; -update noar ti set v0='1601THUIO' where id=3; -update noar tt set b2='KHDX60P5' where id=3; -update noar ti set b2='KHDX60P5' where id=3; -update noar tt set v0='MJOKUBL1EJX3SO7' where id=4; -update noar ti set v0='MJOKUBL1EJX3SO7' where id=4; -update noar tt set b0='6KW7BFMJC9BNU1BP2FE0MKM64CK5' where id=4; -update noar ti set b0='6KW7BFMJC9BNU1BP2FE0MKM64CK5' where id=4; -update noar tt set v0='3JDS23' where id=4; -update noar ti set v0='3JDS23' where id=4; -update noar tt set b1='8ZNI6NJ0' where id=4; -update noar ti set b1='8ZNI6NJ0' where id=4; -update noar tt set v0='0KF2SRKTMT1DO4G17' where id=4; -update noar ti set v0='0KF2SRKTMT1DO4G17' where id=4; -update noar tt set b2='PYN1C1T2CXZ759' where id=4; -update noar ti set b2='PYN1C1T2CXZ759' where id=4; -update noar tt set v0='RNW17GMR08EN4X1REN7YBPOPW3' where id=5; -update noar ti set v0='RNW17GMR08EN4X1REN7YBPOPW3' where id=5; -update noar tt set b0='NRHC1QLAMZV3UGNUIUPR7PIG837QLP' where id=5; -update noar ti set b0='NRHC1QLAMZV3UGNUIUPR7PIG837QLP' where id=5; -update noar tt set v0='G6LBL6UFZE' where id=5; -update noar ti set v0='G6LBL6UFZE' where id=5; -update noar tt set b1='813B0G' where id=5; -update noar ti set b1='813B0G' where id=5; -update noar tt set v0='3K8F7DW5AOXT0O4MKAUKKVKZ9T' where id=5; -update noar ti set v0='3K8F7DW5AOXT0O4MKAUKKVKZ9T' where id=5; -update noar tt set b2='81' where id=5; -update noar ti set b2='81' where id=5; -update noar tt set v0='USVOJFIS3ABD' where id=6; -update noar ti set v0='USVOJFIS3ABD' where id=6; -update noar tt set b0='22DK7EG96R2EQF01ZM6IB98' where id=6; -update noar ti set b0='22DK7EG96R2EQF01ZM6IB98' where id=6; -update noar tt set v0='UROH5QS678HX3BRTEYWSE6' where id=6; -update noar ti set v0='UROH5QS678HX3BRTEYWSE6' where id=6; -update noar tt set b1='IIP3COV6HMZZ9GF26JU4UDMOI' where id=6; -update noar ti set b1='IIP3COV6HMZZ9GF26JU4UDMOI' where id=6; -update noar tt set v0='J66LWVNTEIC750RO8AZAXP89Q3JWVIE' where id=6; -update noar ti set v0='J66LWVNTEIC750RO8AZAXP89Q3JWVIE' where id=6; -update noar tt set b2='GGRBQRQUFV07G' where id=6; -update noar ti set b2='GGRBQRQUFV07G' where id=6; -update noar tt set v0='ZXGEJ2OE4ROBE' where id=7; -update noar ti set v0='ZXGEJ2OE4ROBE' where id=7; -update noar tt set b0='ZNWD2HTGCLW393WWSN' where id=7; -update noar ti set b0='ZNWD2HTGCLW393WWSN' where id=7; -update noar tt set v0='ADX3OW' where id=7; -update noar ti set v0='ADX3OW' where id=7; -update noar tt set b1='9UZ0OWKZY1HRZ9DUU0V30MY5R7YFP' where id=7; -update noar ti set b1='9UZ0OWKZY1HRZ9DUU0V30MY5R7YFP' where id=7; -update noar tt set v0='SD8' where id=7; -update noar ti set v0='SD8' where id=7; -update noar tt set b2='WPXYYL947OYQ9ECXEU76UVV' where id=7; -update noar ti set b2='WPXYYL947OYQ9ECXEU76UVV' where id=7; -update noar tt set v0='41AA1926WNX7PS9T668BYXB4RTWAOY' where id=8; -update noar ti set v0='41AA1926WNX7PS9T668BYXB4RTWAOY' where id=8; -update noar tt set b0='QYTHGM9XT7VN2XJFLTR' where id=8; -update noar ti set b0='QYTHGM9XT7VN2XJFLTR' where id=8; -update noar tt set v0='3TVE9EQSR3L1FD0N46I' where id=8; -update noar ti set v0='3TVE9EQSR3L1FD0N46I' where id=8; -update noar tt set b1='FZJFUQJP0RSRBLAA1WQ55CTL2A6A' where id=8; -update noar ti set b1='FZJFUQJP0RSRBLAA1WQ55CTL2A6A' where id=8; -update noar tt set v0='H9A1N6ONMP' where id=8; -update noar ti set v0='H9A1N6ONMP' where id=8; -update noar tt set b2='IQORF2ZI4KVSYKU8GS4BZ5J3JNWMIJHD' where id=8; -update noar ti set b2='IQORF2ZI4KVSYKU8GS4BZ5J3JNWMIJHD' where id=8; -update noar tt set v0='NC47DFISGAGN3F09' where id=9; -update noar ti set v0='NC47DFISGAGN3F09' where id=9; -update noar tt set b0='Y0TKV' where id=9; -update noar ti set b0='Y0TKV' where id=9; -update noar tt set v0='NUK4BLOS' where id=9; -update noar ti set v0='NUK4BLOS' where id=9; -update noar tt set b1='3O44Q' where id=9; -update noar ti set b1='3O44Q' where id=9; -update noar tt set v0='RB99V3VE9AE5VDA84JYCVHTJCT' where id=9; -update noar ti set v0='RB99V3VE9AE5VDA84JYCVHTJCT' where id=9; -update noar tt set b2='4Q8EYB5L3OY3D8KE14MN' where id=9; -update noar ti set b2='4Q8EYB5L3OY3D8KE14MN' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 mediumblob not null, -b1 mediumblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='N' where id=1; -update noar ti set v0='N' where id=1; -update noar tt set b0='YDMB752UI8RHOEANYSMUB0F1AFMCI' where id=1; -update noar ti set b0='YDMB752UI8RHOEANYSMUB0F1AFMCI' where id=1; -update noar tt set v0='JKU8VXN7D' where id=1; -update noar ti set v0='JKU8VXN7D' where id=1; -update noar tt set b1='YDFNDR9TG6GC0HA' where id=1; -update noar ti set b1='YDFNDR9TG6GC0HA' where id=1; -update noar tt set v0='5DSPGEIHHVKWT9Z' where id=1; -update noar ti set v0='5DSPGEIHHVKWT9Z' where id=1; -update noar tt set b2='NCT5R56' where id=1; -update noar ti set b2='NCT5R56' where id=1; -update noar tt set v0='DP4SOY7HBT88OHAZU6SGHJ1D0' where id=2; -update noar ti set v0='DP4SOY7HBT88OHAZU6SGHJ1D0' where id=2; -update noar tt set b0='H0VSX1ZTU16D2D81CNNVVKJ' where id=2; -update noar ti set b0='H0VSX1ZTU16D2D81CNNVVKJ' where id=2; -update noar tt set v0='P' where id=2; -update noar ti set v0='P' where id=2; -update noar tt set b1='5URUZW0' where id=2; -update noar ti set b1='5URUZW0' where id=2; -update noar tt set v0='6OYJPP6HKE4O2U6LO62KHS6HO' where id=2; -update noar ti set v0='6OYJPP6HKE4O2U6LO62KHS6HO' where id=2; -update noar tt set b2='5WHQAX33V0XJU' where id=2; -update noar ti set b2='5WHQAX33V0XJU' where id=2; -update noar tt set v0='78FSJUXZLFOOZH3U7UXO' where id=3; -update noar ti set v0='78FSJUXZLFOOZH3U7UXO' where id=3; -update noar tt set b0='3YSXHIU' where id=3; -update noar ti set b0='3YSXHIU' where id=3; -update noar tt set v0='9SK22IKZDCRXO5SHXL3A5SYP' where id=3; -update noar ti set v0='9SK22IKZDCRXO5SHXL3A5SYP' where id=3; -update noar tt set b1='3WZFQUYWW' where id=3; -update noar ti set b1='3WZFQUYWW' where id=3; -update noar tt set v0='UPMUMHMUXJAVWFM5M72HM' where id=3; -update noar ti set v0='UPMUMHMUXJAVWFM5M72HM' where id=3; -update noar tt set b2='7QS6KNMN0DZUM39Q8FLBZ2K9POZBPU3X' where id=3; -update noar ti set b2='7QS6KNMN0DZUM39Q8FLBZ2K9POZBPU3X' where id=3; -update noar tt set v0='3GYYCXAFWDCZ6ISS5BMA25MJFAQTZ1GZ' where id=4; -update noar ti set v0='3GYYCXAFWDCZ6ISS5BMA25MJFAQTZ1GZ' where id=4; -update noar tt set b0='V3UX3HL8Y' where id=4; -update noar ti set b0='V3UX3HL8Y' where id=4; -update noar tt set v0='F9XY00HELK7I5ZM44BG6B850BF2' where id=4; -update noar ti set v0='F9XY00HELK7I5ZM44BG6B850BF2' where id=4; -update noar tt set b1='MKZ533PZXGNTTJVHDNAISKQOMMV' where id=4; -update noar ti set b1='MKZ533PZXGNTTJVHDNAISKQOMMV' where id=4; -update noar tt set v0='4PC5M167NADGXQZDDV' where id=4; -update noar ti set v0='4PC5M167NADGXQZDDV' where id=4; -update noar tt set b2='9SD5GKYRBW1' where id=4; -update noar ti set b2='9SD5GKYRBW1' where id=4; -update noar tt set v0='TN47W0I8Y54JRLHJAOZH2FUCRH39R2H3' where id=5; -update noar ti set v0='TN47W0I8Y54JRLHJAOZH2FUCRH39R2H3' where id=5; -update noar tt set b0='3W5' where id=5; -update noar ti set b0='3W5' where id=5; -update noar tt set v0='WSJ0X77XS63H4M7259ZD1T' where id=5; -update noar ti set v0='WSJ0X77XS63H4M7259ZD1T' where id=5; -update noar tt set b1='G8VAWEV0B' where id=5; -update noar ti set b1='G8VAWEV0B' where id=5; -update noar tt set v0='CGCOB332F6F3PS9QNTKR5213J4DOCM' where id=5; -update noar ti set v0='CGCOB332F6F3PS9QNTKR5213J4DOCM' where id=5; -update noar tt set b2='LEB90RZ' where id=5; -update noar ti set b2='LEB90RZ' where id=5; -update noar tt set v0='NHSVG' where id=6; -update noar ti set v0='NHSVG' where id=6; -update noar tt set b0='FG' where id=6; -update noar ti set b0='FG' where id=6; -update noar tt set v0='P8O67MEN8U' where id=6; -update noar ti set v0='P8O67MEN8U' where id=6; -update noar tt set b1='2OB6DSDRD8YQ6P7WXWZPEW3IHUXZE' where id=6; -update noar ti set b1='2OB6DSDRD8YQ6P7WXWZPEW3IHUXZE' where id=6; -update noar tt set v0='HQFW09RXAHQ5WBYZIX88C1IAJ' where id=6; -update noar ti set v0='HQFW09RXAHQ5WBYZIX88C1IAJ' where id=6; -update noar tt set b2='0KM1E06RPBBYZ6WEKE' where id=6; -update noar ti set b2='0KM1E06RPBBYZ6WEKE' where id=6; -update noar tt set v0='DK4R00FQKZVH' where id=7; -update noar ti set v0='DK4R00FQKZVH' where id=7; -update noar tt set b0='NCRHUVJIKGDSABVR6PZH1XKXAR7DF' where id=7; -update noar ti set b0='NCRHUVJIKGDSABVR6PZH1XKXAR7DF' where id=7; -update noar tt set v0='JXVE9GUJ6GK6IZ7KC3N2C0K' where id=7; -update noar ti set v0='JXVE9GUJ6GK6IZ7KC3N2C0K' where id=7; -update noar tt set b1='XEXVMKWGSTYDSQOVULK1X7Y' where id=7; -update noar ti set b1='XEXVMKWGSTYDSQOVULK1X7Y' where id=7; -update noar tt set v0='T6T5WBRY6' where id=7; -update noar ti set v0='T6T5WBRY6' where id=7; -update noar tt set b2='QDODTULSK1RN0WDX1EL9NHKCA' where id=7; -update noar ti set b2='QDODTULSK1RN0WDX1EL9NHKCA' where id=7; -update noar tt set v0='2NZJNPN5Q81DZIQXNKUYGBIVL2O0M8JZ' where id=8; -update noar ti set v0='2NZJNPN5Q81DZIQXNKUYGBIVL2O0M8JZ' where id=8; -update noar tt set b0='DSIMV4K676JCPA4YQE' where id=8; -update noar ti set b0='DSIMV4K676JCPA4YQE' where id=8; -update noar tt set v0='UM9H01M831' where id=8; -update noar ti set v0='UM9H01M831' where id=8; -update noar tt set b1='AYPNH6KXSU68LKWCSE79EXFI' where id=8; -update noar ti set b1='AYPNH6KXSU68LKWCSE79EXFI' where id=8; -update noar tt set v0='KAWEV173PLQ3CUYRAR3YFVV' where id=8; -update noar ti set v0='KAWEV173PLQ3CUYRAR3YFVV' where id=8; -update noar tt set b2='NBAT91HZYRDZRSXBDP' where id=8; -update noar ti set b2='NBAT91HZYRDZRSXBDP' where id=8; -update noar tt set v0='GK4OP0FSQJKJ0DT' where id=9; -update noar ti set v0='GK4OP0FSQJKJ0DT' where id=9; -update noar tt set b0='AZTOVLOW2YFNUYF2R9LO80KKUL0B7I8' where id=9; -update noar ti set b0='AZTOVLOW2YFNUYF2R9LO80KKUL0B7I8' where id=9; -update noar tt set v0='CY3728MNXNSG351HF2JPH23KP7' where id=9; -update noar ti set v0='CY3728MNXNSG351HF2JPH23KP7' where id=9; -update noar tt set b1='CO7TSC1080CUM6IUVY0QRE76GLGSP7' where id=9; -update noar ti set b1='CO7TSC1080CUM6IUVY0QRE76GLGSP7' where id=9; -update noar tt set v0='CWGLRYMYXSU' where id=9; -update noar ti set v0='CWGLRYMYXSU' where id=9; -update noar tt set b2='FP3VFIDZY' where id=9; -update noar ti set b2='FP3VFIDZY' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 mediumblob not null, -b1 mediumblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='LLFBG8VBB2I' where id=1; -update noar ti set v0='LLFBG8VBB2I' where id=1; -update noar tt set b0='E64YVGC5NQJ8TTIRU9VMC56I7U1CJUS' where id=1; -update noar ti set b0='E64YVGC5NQJ8TTIRU9VMC56I7U1CJUS' where id=1; -update noar tt set v0='439NQPBBYPJ38' where id=1; -update noar ti set v0='439NQPBBYPJ38' where id=1; -update noar tt set b1='T9NQK7250QMBJ6G3TZED5C' where id=1; -update noar ti set b1='T9NQK7250QMBJ6G3TZED5C' where id=1; -update noar tt set v0='S' where id=1; -update noar ti set v0='S' where id=1; -update noar tt set b2='7STB' where id=1; -update noar ti set b2='7STB' where id=1; -update noar tt set v0='COH8TVC777MHK1' where id=2; -update noar ti set v0='COH8TVC777MHK1' where id=2; -update noar tt set b0='B6JDVH3' where id=2; -update noar ti set b0='B6JDVH3' where id=2; -update noar tt set v0='OY8AUBIZHYUY3YBS7GRLB9' where id=2; -update noar ti set v0='OY8AUBIZHYUY3YBS7GRLB9' where id=2; -update noar tt set b1='Y0TO' where id=2; -update noar ti set b1='Y0TO' where id=2; -update noar tt set v0='OU9OWWS416ZIXI1660R' where id=2; -update noar ti set v0='OU9OWWS416ZIXI1660R' where id=2; -update noar tt set b2='AFUDORACFV46H3V4DBRJ' where id=2; -update noar ti set b2='AFUDORACFV46H3V4DBRJ' where id=2; -update noar tt set v0='CS58ZYR5OSJ04TD3WWHM7R55I3' where id=3; -update noar ti set v0='CS58ZYR5OSJ04TD3WWHM7R55I3' where id=3; -update noar tt set b0='PTNN5ABS4OQPRWR4NWKAIXRDIO5FK1' where id=3; -update noar ti set b0='PTNN5ABS4OQPRWR4NWKAIXRDIO5FK1' where id=3; -update noar tt set v0='REKHPM6IRDE2V2PWE8Z4XF8' where id=3; -update noar ti set v0='REKHPM6IRDE2V2PWE8Z4XF8' where id=3; -update noar tt set b1='YY4UFQGSWKKM8TVYJB9' where id=3; -update noar ti set b1='YY4UFQGSWKKM8TVYJB9' where id=3; -update noar tt set v0='3RHB1MQW2793637Z' where id=3; -update noar ti set v0='3RHB1MQW2793637Z' where id=3; -update noar tt set b2='1IXZVWXRJ2LL8NYBJMXAWIAH6EE' where id=3; -update noar ti set b2='1IXZVWXRJ2LL8NYBJMXAWIAH6EE' where id=3; -update noar tt set v0='VACJ89JOLRN3HI0P8ERA' where id=4; -update noar ti set v0='VACJ89JOLRN3HI0P8ERA' where id=4; -update noar tt set b0='2JKZJFW1EB6G2AR8QK' where id=4; -update noar ti set b0='2JKZJFW1EB6G2AR8QK' where id=4; -update noar tt set v0='QDIAQ6T52RMFGX71YZ37S9C08ELYF' where id=4; -update noar ti set v0='QDIAQ6T52RMFGX71YZ37S9C08ELYF' where id=4; -update noar tt set b1='02GKU71LWW7Q4908ONBA1' where id=4; -update noar ti set b1='02GKU71LWW7Q4908ONBA1' where id=4; -update noar tt set v0='YH10LSS0G4H8X9QZVG7T66O48TJMTUM' where id=4; -update noar ti set v0='YH10LSS0G4H8X9QZVG7T66O48TJMTUM' where id=4; -update noar tt set b2='D7YLH4JPV6OQD9O3NNLK' where id=4; -update noar ti set b2='D7YLH4JPV6OQD9O3NNLK' where id=4; -update noar tt set v0='JYSN770Q8IPMRBSBSR46WG53UJPI5S0' where id=5; -update noar ti set v0='JYSN770Q8IPMRBSBSR46WG53UJPI5S0' where id=5; -update noar tt set b0='KSW1NAQR2DBNK5WWGI8M36QAU8' where id=5; -update noar ti set b0='KSW1NAQR2DBNK5WWGI8M36QAU8' where id=5; -update noar tt set v0='6BXHZ4V' where id=5; -update noar ti set v0='6BXHZ4V' where id=5; -update noar tt set b1='D' where id=5; -update noar ti set b1='D' where id=5; -update noar tt set v0='SK9SG' where id=5; -update noar ti set v0='SK9SG' where id=5; -update noar tt set b2='5RF6IY0R' where id=5; -update noar ti set b2='5RF6IY0R' where id=5; -update noar tt set v0='DX' where id=6; -update noar ti set v0='DX' where id=6; -update noar tt set b0='YW5AHY98EZSKKLXWUDW4EF34KMBV' where id=6; -update noar ti set b0='YW5AHY98EZSKKLXWUDW4EF34KMBV' where id=6; -update noar tt set v0='WYD9EK' where id=6; -update noar ti set v0='WYD9EK' where id=6; -update noar tt set b1='USL82FEUNMEEE4TTCIZVW' where id=6; -update noar ti set b1='USL82FEUNMEEE4TTCIZVW' where id=6; -update noar tt set v0='ZY635G47X855R7OB4DSPUOFMW3Z44O' where id=6; -update noar ti set v0='ZY635G47X855R7OB4DSPUOFMW3Z44O' where id=6; -update noar tt set b2='3TK8' where id=6; -update noar ti set b2='3TK8' where id=6; -update noar tt set v0='DXYPX1TQVAAQYY26SDIFBXP1788ME17A' where id=7; -update noar ti set v0='DXYPX1TQVAAQYY26SDIFBXP1788ME17A' where id=7; -update noar tt set b0='71FKVG7HE8M8DU80GARHZWNIU' where id=7; -update noar ti set b0='71FKVG7HE8M8DU80GARHZWNIU' where id=7; -update noar tt set v0='DUO' where id=7; -update noar ti set v0='DUO' where id=7; -update noar tt set b1='AQVMGL2C7Z42DZMCZ3LLNX3B' where id=7; -update noar ti set b1='AQVMGL2C7Z42DZMCZ3LLNX3B' where id=7; -update noar tt set v0='SP61Y' where id=7; -update noar ti set v0='SP61Y' where id=7; -update noar tt set b2='GNB1WPKT5XJVR' where id=7; -update noar ti set b2='GNB1WPKT5XJVR' where id=7; -update noar tt set v0='BSCD' where id=8; -update noar ti set v0='BSCD' where id=8; -update noar tt set b0='9RWIRQOSZH8BZJQX3SGXZ' where id=8; -update noar ti set b0='9RWIRQOSZH8BZJQX3SGXZ' where id=8; -update noar tt set v0='GNSYJ62FETS' where id=8; -update noar ti set v0='GNSYJ62FETS' where id=8; -update noar tt set b1='R5UHHK50CBGFJ8R49HOD2NBERWKEG05' where id=8; -update noar ti set b1='R5UHHK50CBGFJ8R49HOD2NBERWKEG05' where id=8; -update noar tt set v0='NFR5JIP7ISSN2PICY476KQ' where id=8; -update noar ti set v0='NFR5JIP7ISSN2PICY476KQ' where id=8; -update noar tt set b2='F96I73FDASH9K9O9QVJ7' where id=8; -update noar ti set b2='F96I73FDASH9K9O9QVJ7' where id=8; -update noar tt set v0='KH6IM5DP4CRU' where id=9; -update noar ti set v0='KH6IM5DP4CRU' where id=9; -update noar tt set b0='MG' where id=9; -update noar ti set b0='MG' where id=9; -update noar tt set v0='HQVOE57D9QLW' where id=9; -update noar ti set v0='HQVOE57D9QLW' where id=9; -update noar tt set b1='UWZEKF5SRFWTKV' where id=9; -update noar ti set b1='UWZEKF5SRFWTKV' where id=9; -update noar tt set v0='NCTTH4LR' where id=9; -update noar ti set v0='NCTTH4LR' where id=9; -update noar tt set b2='YE8TWCW29FVX87LG' where id=9; -update noar ti set b2='YE8TWCW29FVX87LG' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 mediumblob null, -b1 mediumblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='04PIU0CKKINXJLH41' where id=1; -update noar ti set v0='04PIU0CKKINXJLH41' where id=1; -update noar tt set b0='M6QWWV' where id=1; -update noar ti set b0='M6QWWV' where id=1; -update noar tt set v0='2Y0O8PQ91CAI7PH6D6' where id=1; -update noar ti set v0='2Y0O8PQ91CAI7PH6D6' where id=1; -update noar tt set b1='W0XHJDPTUFG287T1VZZJXVJZX' where id=1; -update noar ti set b1='W0XHJDPTUFG287T1VZZJXVJZX' where id=1; -update noar tt set v0='NTJAOCZNVTFDBKA4IA96ZW9G' where id=1; -update noar ti set v0='NTJAOCZNVTFDBKA4IA96ZW9G' where id=1; -update noar tt set b2='BED5PXB80GBH1B8G2JQBBT' where id=1; -update noar ti set b2='BED5PXB80GBH1B8G2JQBBT' where id=1; -update noar tt set v0='HVYJ1ZX' where id=2; -update noar ti set v0='HVYJ1ZX' where id=2; -update noar tt set b0='ARUE' where id=2; -update noar ti set b0='ARUE' where id=2; -update noar tt set v0='NSQXA7PCT2SG56UN' where id=2; -update noar ti set v0='NSQXA7PCT2SG56UN' where id=2; -update noar tt set b1='53' where id=2; -update noar ti set b1='53' where id=2; -update noar tt set v0='L8I3O6B8HJH4OUIWBIH11GCI4CFQI059' where id=2; -update noar ti set v0='L8I3O6B8HJH4OUIWBIH11GCI4CFQI059' where id=2; -update noar tt set b2='ICGL7UW03KN5PT7NK23ODH6D5ZI03' where id=2; -update noar ti set b2='ICGL7UW03KN5PT7NK23ODH6D5ZI03' where id=2; -update noar tt set v0='YVCLXLU032ERAZUWXHQ' where id=3; -update noar ti set v0='YVCLXLU032ERAZUWXHQ' where id=3; -update noar tt set b0='9GHVX4JS9C67JU' where id=3; -update noar ti set b0='9GHVX4JS9C67JU' where id=3; -update noar tt set v0='CNE' where id=3; -update noar ti set v0='CNE' where id=3; -update noar tt set b1='QEVA42Z6LOTKJ172UWPDXV89QZYMM' where id=3; -update noar ti set b1='QEVA42Z6LOTKJ172UWPDXV89QZYMM' where id=3; -update noar tt set v0='1PHPPWFUDLE' where id=3; -update noar ti set v0='1PHPPWFUDLE' where id=3; -update noar tt set b2='RQ0A3' where id=3; -update noar ti set b2='RQ0A3' where id=3; -update noar tt set v0='MT89D74JVGWCNRGISW4TPQ8' where id=4; -update noar ti set v0='MT89D74JVGWCNRGISW4TPQ8' where id=4; -update noar tt set b0='TBDA8MZ912QDM0GLPQRPXMJCB32HC' where id=4; -update noar ti set b0='TBDA8MZ912QDM0GLPQRPXMJCB32HC' where id=4; -update noar tt set v0='8PIKO4UFEV9W3' where id=4; -update noar ti set v0='8PIKO4UFEV9W3' where id=4; -update noar tt set b1='G884SW0' where id=4; -update noar ti set b1='G884SW0' where id=4; -update noar tt set v0='PD7UEA1E9DN5FI4WSR' where id=4; -update noar ti set v0='PD7UEA1E9DN5FI4WSR' where id=4; -update noar tt set b2='A' where id=4; -update noar ti set b2='A' where id=4; -update noar tt set v0='3SUCBJK5PMUUI' where id=5; -update noar ti set v0='3SUCBJK5PMUUI' where id=5; -update noar tt set b0='IHKV7D4VTTBTLHEUI78I' where id=5; -update noar ti set b0='IHKV7D4VTTBTLHEUI78I' where id=5; -update noar tt set v0='C4BEACU9PGM3AR3KJFSS5' where id=5; -update noar ti set v0='C4BEACU9PGM3AR3KJFSS5' where id=5; -update noar tt set b1='042HA' where id=5; -update noar ti set b1='042HA' where id=5; -update noar tt set v0='HXOT' where id=5; -update noar ti set v0='HXOT' where id=5; -update noar tt set b2='IHJ3T95D7RQLRICLO6OHFYP' where id=5; -update noar ti set b2='IHJ3T95D7RQLRICLO6OHFYP' where id=5; -update noar tt set v0='UFLT8KV6A' where id=6; -update noar ti set v0='UFLT8KV6A' where id=6; -update noar tt set b0='9ISM9KQYQTLN16FWGLN1TAMZJE' where id=6; -update noar ti set b0='9ISM9KQYQTLN16FWGLN1TAMZJE' where id=6; -update noar tt set v0='QURU19YE9WJMXHCWYZFSGITY8X7VGUA' where id=6; -update noar ti set v0='QURU19YE9WJMXHCWYZFSGITY8X7VGUA' where id=6; -update noar tt set b1='5J0WVQBB12CADUEKJW28PPCEI6VZ' where id=6; -update noar ti set b1='5J0WVQBB12CADUEKJW28PPCEI6VZ' where id=6; -update noar tt set v0='GB1YCN3ZN8CEA7159O790F8QSA1DCYT' where id=6; -update noar ti set v0='GB1YCN3ZN8CEA7159O790F8QSA1DCYT' where id=6; -update noar tt set b2='RGMU7R6242MBNK4H7TI44A5LG4' where id=6; -update noar ti set b2='RGMU7R6242MBNK4H7TI44A5LG4' where id=6; -update noar tt set v0='33X4U91FHQL6I6TY0GKWVK3WFK' where id=7; -update noar ti set v0='33X4U91FHQL6I6TY0GKWVK3WFK' where id=7; -update noar tt set b0='NUBOG6EO0FQ2RSVH79V' where id=7; -update noar ti set b0='NUBOG6EO0FQ2RSVH79V' where id=7; -update noar tt set v0='E8KKF2DEKO11' where id=7; -update noar ti set v0='E8KKF2DEKO11' where id=7; -update noar tt set b1='1BCMTILG12L7DR9RY3Y6' where id=7; -update noar ti set b1='1BCMTILG12L7DR9RY3Y6' where id=7; -update noar tt set v0='FAZS7OZEDWLVACH2MN67XONMI' where id=7; -update noar ti set v0='FAZS7OZEDWLVACH2MN67XONMI' where id=7; -update noar tt set b2='XW7TWY9JDOAN' where id=7; -update noar ti set b2='XW7TWY9JDOAN' where id=7; -update noar tt set v0='1CAR5BV5' where id=8; -update noar ti set v0='1CAR5BV5' where id=8; -update noar tt set b0='4HQC2SZIU4E5YHTR15EHGH8W' where id=8; -update noar ti set b0='4HQC2SZIU4E5YHTR15EHGH8W' where id=8; -update noar tt set v0='MAKQ12A0KHZWUWM' where id=8; -update noar ti set v0='MAKQ12A0KHZWUWM' where id=8; -update noar tt set b1='AWEEFJGHNS0' where id=8; -update noar ti set b1='AWEEFJGHNS0' where id=8; -update noar tt set v0='RC4SCVOU908CI9O' where id=8; -update noar ti set v0='RC4SCVOU908CI9O' where id=8; -update noar tt set b2='DTJAHRJIY860W' where id=8; -update noar ti set b2='DTJAHRJIY860W' where id=8; -update noar tt set v0='GDVAL' where id=9; -update noar ti set v0='GDVAL' where id=9; -update noar tt set b0='63MDZN0E1QGLFPQY3WA21ZJXBD4O' where id=9; -update noar ti set b0='63MDZN0E1QGLFPQY3WA21ZJXBD4O' where id=9; -update noar tt set v0='BRB2T2EU23UAIOH2EST6POR8OTNNN' where id=9; -update noar ti set v0='BRB2T2EU23UAIOH2EST6POR8OTNNN' where id=9; -update noar tt set b1='Z9ZZDLYENX6S3GD006R1XF267GY' where id=9; -update noar ti set b1='Z9ZZDLYENX6S3GD006R1XF267GY' where id=9; -update noar tt set v0='YUKYQZ1QHNLGX3FEN7MMXH3W1BWQB6KC' where id=9; -update noar ti set v0='YUKYQZ1QHNLGX3FEN7MMXH3W1BWQB6KC' where id=9; -update noar tt set b2='OAGL44IW81102HG0GB8HY3737AK51BZ' where id=9; -update noar ti set b2='OAGL44IW81102HG0GB8HY3737AK51BZ' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 mediumblob null, -b1 mediumblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='17A5T7Z0WFVX58XEVKHLN2CKLDNJ991' where id=1; -update noar ti set v0='17A5T7Z0WFVX58XEVKHLN2CKLDNJ991' where id=1; -update noar tt set b0='RW8F3WW26' where id=1; -update noar ti set b0='RW8F3WW26' where id=1; -update noar tt set v0='OD37H8N0U92V7S0S8CTDXL0MC' where id=1; -update noar ti set v0='OD37H8N0U92V7S0S8CTDXL0MC' where id=1; -update noar tt set b1='2WJ4IJ0B7A33INI0B5N0JUE8' where id=1; -update noar ti set b1='2WJ4IJ0B7A33INI0B5N0JUE8' where id=1; -update noar tt set v0='AGUVP0RIS' where id=1; -update noar ti set v0='AGUVP0RIS' where id=1; -update noar tt set b2='K63DRD1AZ2VUCFGEC' where id=1; -update noar ti set b2='K63DRD1AZ2VUCFGEC' where id=1; -update noar tt set v0='QDOH273EW2DPFL' where id=2; -update noar ti set v0='QDOH273EW2DPFL' where id=2; -update noar tt set b0='7GEG9LNWUOAVUA0X530S4AIVY' where id=2; -update noar ti set b0='7GEG9LNWUOAVUA0X530S4AIVY' where id=2; -update noar tt set v0='QVEMZ4ETY8E2LTTRA7V4PS4LLPBW' where id=2; -update noar ti set v0='QVEMZ4ETY8E2LTTRA7V4PS4LLPBW' where id=2; -update noar tt set b1='DEIAYQWFCE3VYT0JGC' where id=2; -update noar ti set b1='DEIAYQWFCE3VYT0JGC' where id=2; -update noar tt set v0='5PLIAAL9GV' where id=2; -update noar ti set v0='5PLIAAL9GV' where id=2; -update noar tt set b2='IC6KEXV0HZ9POF0A2Z69SLVWMKUKT4' where id=2; -update noar ti set b2='IC6KEXV0HZ9POF0A2Z69SLVWMKUKT4' where id=2; -update noar tt set v0='C2' where id=3; -update noar ti set v0='C2' where id=3; -update noar tt set b0='OFL2RLO5X6XJTUZ9C' where id=3; -update noar ti set b0='OFL2RLO5X6XJTUZ9C' where id=3; -update noar tt set v0='7TQCJY6CLMRJLW4Q6XYGDK9X0Q' where id=3; -update noar ti set v0='7TQCJY6CLMRJLW4Q6XYGDK9X0Q' where id=3; -update noar tt set b1='C0P5UA2NZF' where id=3; -update noar ti set b1='C0P5UA2NZF' where id=3; -update noar tt set v0='O7' where id=3; -update noar ti set v0='O7' where id=3; -update noar tt set b2='ZDA80T5NXP5DL' where id=3; -update noar ti set b2='ZDA80T5NXP5DL' where id=3; -update noar tt set v0='ISOJ0ZDAD0N' where id=4; -update noar ti set v0='ISOJ0ZDAD0N' where id=4; -update noar tt set b0='TEBY' where id=4; -update noar ti set b0='TEBY' where id=4; -update noar tt set v0='YFD4Q6MMORW8OIO' where id=4; -update noar ti set v0='YFD4Q6MMORW8OIO' where id=4; -update noar tt set b1='6J4X1L16Z9URL8Q' where id=4; -update noar ti set b1='6J4X1L16Z9URL8Q' where id=4; -update noar tt set v0='M0QLMM2KZ0E3GFYIIUBGLT08ULH5ST' where id=4; -update noar ti set v0='M0QLMM2KZ0E3GFYIIUBGLT08ULH5ST' where id=4; -update noar tt set b2='F9O1Y' where id=4; -update noar ti set b2='F9O1Y' where id=4; -update noar tt set v0='V2SKH99JJIOMS2AA8HGL363S3TUFPAZV' where id=5; -update noar ti set v0='V2SKH99JJIOMS2AA8HGL363S3TUFPAZV' where id=5; -update noar tt set b0='7LH3XHI6ZY8VIP2MCH82NLAM' where id=5; -update noar ti set b0='7LH3XHI6ZY8VIP2MCH82NLAM' where id=5; -update noar tt set v0='FLCM73' where id=5; -update noar ti set v0='FLCM73' where id=5; -update noar tt set b1='NWP0ZJUR' where id=5; -update noar ti set b1='NWP0ZJUR' where id=5; -update noar tt set v0='SRZQ' where id=5; -update noar ti set v0='SRZQ' where id=5; -update noar tt set b2='5SNWARRJQIVRO94W5XD0UJLXIKNSI' where id=5; -update noar ti set b2='5SNWARRJQIVRO94W5XD0UJLXIKNSI' where id=5; -update noar tt set v0='4' where id=6; -update noar ti set v0='4' where id=6; -update noar tt set b0='X1ZU9ICQTLCYV7M6A44HGWT7QDF' where id=6; -update noar ti set b0='X1ZU9ICQTLCYV7M6A44HGWT7QDF' where id=6; -update noar tt set v0='YPG9SAAVQCZC1H9' where id=6; -update noar ti set v0='YPG9SAAVQCZC1H9' where id=6; -update noar tt set b1='P74J5MEVF823AHSIU26VZ4PM0MNLF' where id=6; -update noar ti set b1='P74J5MEVF823AHSIU26VZ4PM0MNLF' where id=6; -update noar tt set v0='VIHBZCIBK' where id=6; -update noar ti set v0='VIHBZCIBK' where id=6; -update noar tt set b2='4V52L0RO3CP1FWN4GQTCBTM39' where id=6; -update noar ti set b2='4V52L0RO3CP1FWN4GQTCBTM39' where id=6; -update noar tt set v0='NKVU0JBVPG970BQF4T2' where id=7; -update noar ti set v0='NKVU0JBVPG970BQF4T2' where id=7; -update noar tt set b0='9E6RXCGCTIEB17TPA0K8T' where id=7; -update noar ti set b0='9E6RXCGCTIEB17TPA0K8T' where id=7; -update noar tt set v0='RPF8' where id=7; -update noar ti set v0='RPF8' where id=7; -update noar tt set b1='W8' where id=7; -update noar ti set b1='W8' where id=7; -update noar tt set v0='9GKGU' where id=7; -update noar ti set v0='9GKGU' where id=7; -update noar tt set b2='0RH8DCPBKR' where id=7; -update noar ti set b2='0RH8DCPBKR' where id=7; -update noar tt set v0='G5ES2EE' where id=8; -update noar ti set v0='G5ES2EE' where id=8; -update noar tt set b0='38K' where id=8; -update noar ti set b0='38K' where id=8; -update noar tt set v0='X8CI62NX4LXCC' where id=8; -update noar ti set v0='X8CI62NX4LXCC' where id=8; -update noar tt set b1='YD7E005F8L1967YIAKDZQT3M' where id=8; -update noar ti set b1='YD7E005F8L1967YIAKDZQT3M' where id=8; -update noar tt set v0='WWP52' where id=8; -update noar ti set v0='WWP52' where id=8; -update noar tt set b2='PN' where id=8; -update noar ti set b2='PN' where id=8; -update noar tt set v0='X1ER8HIJ7N9JQJ4RFHUWK6HFSVE6L' where id=9; -update noar ti set v0='X1ER8HIJ7N9JQJ4RFHUWK6HFSVE6L' where id=9; -update noar tt set b0='U15GP5VF4Q6MMNWW2V6OOTDNF3VD8' where id=9; -update noar ti set b0='U15GP5VF4Q6MMNWW2V6OOTDNF3VD8' where id=9; -update noar tt set v0='50OK' where id=9; -update noar ti set v0='50OK' where id=9; -update noar tt set b1='HT521Q6PPTD1VLA0BD8UXSK' where id=9; -update noar ti set b1='HT521Q6PPTD1VLA0BD8UXSK' where id=9; -update noar tt set v0='1EL3E4VT71JIARQ5IUZ5N' where id=9; -update noar ti set v0='1EL3E4VT71JIARQ5IUZ5N' where id=9; -update noar tt set b2='7QEBODAYSILCF9Z7UY2W9597' where id=9; -update noar ti set b2='7QEBODAYSILCF9Z7UY2W9597' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 mediumblob not null, -b1 mediumblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='I8C5Q9X07R' where id=1; -update noar ti set v0='I8C5Q9X07R' where id=1; -update noar tt set b0='3WLOOV9QMRVO1' where id=1; -update noar ti set b0='3WLOOV9QMRVO1' where id=1; -update noar tt set v0='PS7TBY1KIQLYL5D0MGQG' where id=1; -update noar ti set v0='PS7TBY1KIQLYL5D0MGQG' where id=1; -update noar tt set b1='UO61B6VPRK7LRSOZBUJV4B6G0ZES1RO' where id=1; -update noar ti set b1='UO61B6VPRK7LRSOZBUJV4B6G0ZES1RO' where id=1; -update noar tt set v0='ALOMZYO1J' where id=1; -update noar ti set v0='ALOMZYO1J' where id=1; -update noar tt set b2='3LYGVNI53FYT6FI93TOW0' where id=1; -update noar ti set b2='3LYGVNI53FYT6FI93TOW0' where id=1; -update noar tt set v0='RPT90BSEX2S' where id=2; -update noar ti set v0='RPT90BSEX2S' where id=2; -update noar tt set b0='W5JWH4MCP4TQL5HPUJEKQIYG4599C' where id=2; -update noar ti set b0='W5JWH4MCP4TQL5HPUJEKQIYG4599C' where id=2; -update noar tt set v0='4QHZG' where id=2; -update noar ti set v0='4QHZG' where id=2; -update noar tt set b1='3J28T2UY0CHWJUWD15R6Q4TWMNG2TS' where id=2; -update noar ti set b1='3J28T2UY0CHWJUWD15R6Q4TWMNG2TS' where id=2; -update noar tt set v0='MM9PAK2RV6JMH3FKUEH2RHGM' where id=2; -update noar ti set v0='MM9PAK2RV6JMH3FKUEH2RHGM' where id=2; -update noar tt set b2='QCP697HDPJF732' where id=2; -update noar ti set b2='QCP697HDPJF732' where id=2; -update noar tt set v0='XRIM2465' where id=3; -update noar ti set v0='XRIM2465' where id=3; -update noar tt set b0='CVCCQDG4QMF0MFXBO854C4LTJLM1L3OM' where id=3; -update noar ti set b0='CVCCQDG4QMF0MFXBO854C4LTJLM1L3OM' where id=3; -update noar tt set v0='GS40Z5Z0IDJRJEK90' where id=3; -update noar ti set v0='GS40Z5Z0IDJRJEK90' where id=3; -update noar tt set b1='PYAPTT7' where id=3; -update noar ti set b1='PYAPTT7' where id=3; -update noar tt set v0='8RCU1PJR8Q8CX2K5TN36FWLW' where id=3; -update noar ti set v0='8RCU1PJR8Q8CX2K5TN36FWLW' where id=3; -update noar tt set b2='2H8E9NLEL' where id=3; -update noar ti set b2='2H8E9NLEL' where id=3; -update noar tt set v0='QENNTFGI1WOVMXF' where id=4; -update noar ti set v0='QENNTFGI1WOVMXF' where id=4; -update noar tt set b0='1O81ZC97BBH52ICI5HUKSS2V2ELD40MR' where id=4; -update noar ti set b0='1O81ZC97BBH52ICI5HUKSS2V2ELD40MR' where id=4; -update noar tt set v0='JD1L53AOTZ30FISIYPSLE0' where id=4; -update noar ti set v0='JD1L53AOTZ30FISIYPSLE0' where id=4; -update noar tt set b1='1L' where id=4; -update noar ti set b1='1L' where id=4; -update noar tt set v0='B8FS583VHNZ5' where id=4; -update noar ti set v0='B8FS583VHNZ5' where id=4; -update noar tt set b2='RZMBJX3' where id=4; -update noar ti set b2='RZMBJX3' where id=4; -update noar tt set v0='Y7VCTRKWIJT3315LN3F' where id=5; -update noar ti set v0='Y7VCTRKWIJT3315LN3F' where id=5; -update noar tt set b0='H5QOHKC' where id=5; -update noar ti set b0='H5QOHKC' where id=5; -update noar tt set v0='73KA5B3O' where id=5; -update noar ti set v0='73KA5B3O' where id=5; -update noar tt set b1='W9WD8452BZXR9NIQ1EJQQW14OK50AUS' where id=5; -update noar ti set b1='W9WD8452BZXR9NIQ1EJQQW14OK50AUS' where id=5; -update noar tt set v0='SHAQWOLRFH4RM7' where id=5; -update noar ti set v0='SHAQWOLRFH4RM7' where id=5; -update noar tt set b2='XH5Y4N0OR3C4QI51PS1R7H6QC4N' where id=5; -update noar ti set b2='XH5Y4N0OR3C4QI51PS1R7H6QC4N' where id=5; -update noar tt set v0='ZOO4BDTW3AH9I' where id=6; -update noar ti set v0='ZOO4BDTW3AH9I' where id=6; -update noar tt set b0='AAMHEGJQ0ZYVUVAOZ9TNACDRE8WVW' where id=6; -update noar ti set b0='AAMHEGJQ0ZYVUVAOZ9TNACDRE8WVW' where id=6; -update noar tt set v0='R52T84V24YCJJW2WLRV2O5MOJI' where id=6; -update noar ti set v0='R52T84V24YCJJW2WLRV2O5MOJI' where id=6; -update noar tt set b1='LH935YUZ8PII2H7H2LH90FSI4BB' where id=6; -update noar ti set b1='LH935YUZ8PII2H7H2LH90FSI4BB' where id=6; -update noar tt set v0='C4AT' where id=6; -update noar ti set v0='C4AT' where id=6; -update noar tt set b2='P406SCU8XOATXCN8O' where id=6; -update noar ti set b2='P406SCU8XOATXCN8O' where id=6; -update noar tt set v0='5F5B1S0CP5GE' where id=7; -update noar ti set v0='5F5B1S0CP5GE' where id=7; -update noar tt set b0='9QIWS5JX4WFZVJNVH93NTZZ5' where id=7; -update noar ti set b0='9QIWS5JX4WFZVJNVH93NTZZ5' where id=7; -update noar tt set v0='NV' where id=7; -update noar ti set v0='NV' where id=7; -update noar tt set b1='U9M0YTYLZ9NEUWZ47YQ6I' where id=7; -update noar ti set b1='U9M0YTYLZ9NEUWZ47YQ6I' where id=7; -update noar tt set v0='8CC54CZQQRGPJFTYJ21QC' where id=7; -update noar ti set v0='8CC54CZQQRGPJFTYJ21QC' where id=7; -update noar tt set b2='BYQ2CWL86510' where id=7; -update noar ti set b2='BYQ2CWL86510' where id=7; -update noar tt set v0='OTL25OSNLWOZ26V2N' where id=8; -update noar ti set v0='OTL25OSNLWOZ26V2N' where id=8; -update noar tt set b0='P6' where id=8; -update noar ti set b0='P6' where id=8; -update noar tt set v0='JLQYI8EMZVNTRTRKW54' where id=8; -update noar ti set v0='JLQYI8EMZVNTRTRKW54' where id=8; -update noar tt set b1='C9X00BVX7MS6O3WAJS92' where id=8; -update noar ti set b1='C9X00BVX7MS6O3WAJS92' where id=8; -update noar tt set v0='BSPJHY26S' where id=8; -update noar ti set v0='BSPJHY26S' where id=8; -update noar tt set b2='PN5BZJYC' where id=8; -update noar ti set b2='PN5BZJYC' where id=8; -update noar tt set v0='4NOHVZ7UAZ4N' where id=9; -update noar ti set v0='4NOHVZ7UAZ4N' where id=9; -update noar tt set b0='IYDJFZXSF39' where id=9; -update noar ti set b0='IYDJFZXSF39' where id=9; -update noar tt set v0='U3' where id=9; -update noar ti set v0='U3' where id=9; -update noar tt set b1='BG' where id=9; -update noar ti set b1='BG' where id=9; -update noar tt set v0='3D16YEHZOQB7GJ8' where id=9; -update noar ti set v0='3D16YEHZOQB7GJ8' where id=9; -update noar tt set b2='ZH' where id=9; -update noar ti set b2='ZH' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 mediumblob not null, -b1 mediumblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='4RPAVR0FMHYMREJVAON4L' where id=1; -update noar ti set v0='4RPAVR0FMHYMREJVAON4L' where id=1; -update noar tt set b0='CA6BMZ8E840WMSGYYFE1DL' where id=1; -update noar ti set b0='CA6BMZ8E840WMSGYYFE1DL' where id=1; -update noar tt set v0='ZCJL1A' where id=1; -update noar ti set v0='ZCJL1A' where id=1; -update noar tt set b1='2DTOYOWARVXXYA3F32AHZWIFY69HM0K7' where id=1; -update noar ti set b1='2DTOYOWARVXXYA3F32AHZWIFY69HM0K7' where id=1; -update noar tt set v0='X0EYAAO99OEPK86VOQLQ' where id=1; -update noar ti set v0='X0EYAAO99OEPK86VOQLQ' where id=1; -update noar tt set b2='VTUFUV2H9GZZX8K2QC' where id=1; -update noar ti set b2='VTUFUV2H9GZZX8K2QC' where id=1; -update noar tt set v0='HLUVOQHA1U6T5U' where id=2; -update noar ti set v0='HLUVOQHA1U6T5U' where id=2; -update noar tt set b0='H16I610GH8PCWFR2SS' where id=2; -update noar ti set b0='H16I610GH8PCWFR2SS' where id=2; -update noar tt set v0='WIW02T3K3IQ6LUBFE19SYZ' where id=2; -update noar ti set v0='WIW02T3K3IQ6LUBFE19SYZ' where id=2; -update noar tt set b1='JZFZ8EHE2IB' where id=2; -update noar ti set b1='JZFZ8EHE2IB' where id=2; -update noar tt set v0='P45GOG51AQYX1NQ00L6Z' where id=2; -update noar ti set v0='P45GOG51AQYX1NQ00L6Z' where id=2; -update noar tt set b2='K15TS36JEE4U' where id=2; -update noar ti set b2='K15TS36JEE4U' where id=2; -update noar tt set v0='AGLV63JNR3L' where id=3; -update noar ti set v0='AGLV63JNR3L' where id=3; -update noar tt set b0='LIRFP5M34XV5TRKO8' where id=3; -update noar ti set b0='LIRFP5M34XV5TRKO8' where id=3; -update noar tt set v0='TKEZAKO805' where id=3; -update noar ti set v0='TKEZAKO805' where id=3; -update noar tt set b1='ZWZ3IOGQR8WKWU4N8CB8' where id=3; -update noar ti set b1='ZWZ3IOGQR8WKWU4N8CB8' where id=3; -update noar tt set v0='I' where id=3; -update noar ti set v0='I' where id=3; -update noar tt set b2='332F9WR7P12O8IFZGFCCSIG' where id=3; -update noar ti set b2='332F9WR7P12O8IFZGFCCSIG' where id=3; -update noar tt set v0='Z' where id=4; -update noar ti set v0='Z' where id=4; -update noar tt set b0='98T3KPG0G7J104QYZMOKZ32SG' where id=4; -update noar ti set b0='98T3KPG0G7J104QYZMOKZ32SG' where id=4; -update noar tt set v0='GM0UHIBYN6K01' where id=4; -update noar ti set v0='GM0UHIBYN6K01' where id=4; -update noar tt set b1='RIS' where id=4; -update noar ti set b1='RIS' where id=4; -update noar tt set v0='S1J3WN9KCZMSMPW5ZXJYU0' where id=4; -update noar ti set v0='S1J3WN9KCZMSMPW5ZXJYU0' where id=4; -update noar tt set b2='Z5TGVAJKCZ9YVI4MJMWHJJC6OSSCEYD' where id=4; -update noar ti set b2='Z5TGVAJKCZ9YVI4MJMWHJJC6OSSCEYD' where id=4; -update noar tt set v0='G' where id=5; -update noar ti set v0='G' where id=5; -update noar tt set b0='676HVKVA' where id=5; -update noar ti set b0='676HVKVA' where id=5; -update noar tt set v0='7U5VAOLKMZZ1746FHYTW3HMN49VH' where id=5; -update noar ti set v0='7U5VAOLKMZZ1746FHYTW3HMN49VH' where id=5; -update noar tt set b1='VSB4WD7QNZUYJAS' where id=5; -update noar ti set b1='VSB4WD7QNZUYJAS' where id=5; -update noar tt set v0='LZ8MOUWL' where id=5; -update noar ti set v0='LZ8MOUWL' where id=5; -update noar tt set b2='HLDOW0QZXNEDUNVK7FFO8W86' where id=5; -update noar ti set b2='HLDOW0QZXNEDUNVK7FFO8W86' where id=5; -update noar tt set v0='7IB26U9JDY' where id=6; -update noar ti set v0='7IB26U9JDY' where id=6; -update noar tt set b0='WCQV6FR88X29W37VO8GV56INCQM1' where id=6; -update noar ti set b0='WCQV6FR88X29W37VO8GV56INCQM1' where id=6; -update noar tt set v0='4AGNHTU' where id=6; -update noar ti set v0='4AGNHTU' where id=6; -update noar tt set b1='ZUH25CF0F2QHV3AX90QUMY3GMWRE1Y' where id=6; -update noar ti set b1='ZUH25CF0F2QHV3AX90QUMY3GMWRE1Y' where id=6; -update noar tt set v0='0QQGT2JM' where id=6; -update noar ti set v0='0QQGT2JM' where id=6; -update noar tt set b2='A5F3GWAS7K' where id=6; -update noar ti set b2='A5F3GWAS7K' where id=6; -update noar tt set v0='AAZZMTPO3Z2C987DD4XU5APZO6' where id=7; -update noar ti set v0='AAZZMTPO3Z2C987DD4XU5APZO6' where id=7; -update noar tt set b0='67W2Y3J2QBLZN7M0SGCQAUKTB9K5ERV' where id=7; -update noar ti set b0='67W2Y3J2QBLZN7M0SGCQAUKTB9K5ERV' where id=7; -update noar tt set v0='6BCMV8IBJSDV26562XEKW' where id=7; -update noar ti set v0='6BCMV8IBJSDV26562XEKW' where id=7; -update noar tt set b1='CQL6S08YU02R2V1I0K8WHR07' where id=7; -update noar ti set b1='CQL6S08YU02R2V1I0K8WHR07' where id=7; -update noar tt set v0='O9XY485TJ12VW5RZ54P0LA' where id=7; -update noar ti set v0='O9XY485TJ12VW5RZ54P0LA' where id=7; -update noar tt set b2='7PVMHNZZ0YFGIXGERGLNTGYGSZC1CAXM' where id=7; -update noar ti set b2='7PVMHNZZ0YFGIXGERGLNTGYGSZC1CAXM' where id=7; -update noar tt set v0='GLMK6ZVA9FX4J0D15OEAIFUJJUTG5V' where id=8; -update noar ti set v0='GLMK6ZVA9FX4J0D15OEAIFUJJUTG5V' where id=8; -update noar tt set b0='BEUI81HXKS' where id=8; -update noar ti set b0='BEUI81HXKS' where id=8; -update noar tt set v0='J6HMUJM0VIS1RZ4S096QUP85J' where id=8; -update noar ti set v0='J6HMUJM0VIS1RZ4S096QUP85J' where id=8; -update noar tt set b1='P' where id=8; -update noar ti set b1='P' where id=8; -update noar tt set v0='DPNH' where id=8; -update noar ti set v0='DPNH' where id=8; -update noar tt set b2='SI7TE1Z9RT2UHYFHGL05Q' where id=8; -update noar ti set b2='SI7TE1Z9RT2UHYFHGL05Q' where id=8; -update noar tt set v0='G3H9' where id=9; -update noar ti set v0='G3H9' where id=9; -update noar tt set b0='NDY1UHTP' where id=9; -update noar ti set b0='NDY1UHTP' where id=9; -update noar tt set v0='O50DUVWCA07' where id=9; -update noar ti set v0='O50DUVWCA07' where id=9; -update noar tt set b1='26A7JP4BNC0FNFPTUGTP0QQP9J904Q6I' where id=9; -update noar ti set b1='26A7JP4BNC0FNFPTUGTP0QQP9J904Q6I' where id=9; -update noar tt set v0='5QIF9DZU8HUQLX5P2MZM0' where id=9; -update noar ti set v0='5QIF9DZU8HUQLX5P2MZM0' where id=9; -update noar tt set b2='F1M0W35E5QTBQW' where id=9; -update noar ti set b2='F1M0W35E5QTBQW' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 mediumblob null, -b1 mediumblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='90UKDML184EOEE49SHC9EW748F873NOV' where id=1; -update noar ti set v0='90UKDML184EOEE49SHC9EW748F873NOV' where id=1; -update noar tt set b0='4JB1XZR6GGHO53ZR281F' where id=1; -update noar ti set b0='4JB1XZR6GGHO53ZR281F' where id=1; -update noar tt set v0='JWRNW' where id=1; -update noar ti set v0='JWRNW' where id=1; -update noar tt set b1='HWRYPANQ52XSUH7BE5MHU33VFAIANPR' where id=1; -update noar ti set b1='HWRYPANQ52XSUH7BE5MHU33VFAIANPR' where id=1; -update noar tt set v0='N29EM7SG' where id=1; -update noar ti set v0='N29EM7SG' where id=1; -update noar tt set b2='R4GPI9Q4SJYE3SAVZPQHM4CH8KP' where id=1; -update noar ti set b2='R4GPI9Q4SJYE3SAVZPQHM4CH8KP' where id=1; -update noar tt set v0='SWK1Z76KDXSPH85NFFKYZG3JF7W' where id=2; -update noar ti set v0='SWK1Z76KDXSPH85NFFKYZG3JF7W' where id=2; -update noar tt set b0='0XDBSJQ37C1B1' where id=2; -update noar ti set b0='0XDBSJQ37C1B1' where id=2; -update noar tt set v0='VB3JYG02RJ8E6IDSKDQ3RMGSJ' where id=2; -update noar ti set v0='VB3JYG02RJ8E6IDSKDQ3RMGSJ' where id=2; -update noar tt set b1='D2AJJ28OJAYTNHO6TV4Q9J1VC96EJVM3' where id=2; -update noar ti set b1='D2AJJ28OJAYTNHO6TV4Q9J1VC96EJVM3' where id=2; -update noar tt set v0='MX1S97WB11QS6GCW0KY353CSO84LMI' where id=2; -update noar ti set v0='MX1S97WB11QS6GCW0KY353CSO84LMI' where id=2; -update noar tt set b2='8Q53SEJ02L' where id=2; -update noar ti set b2='8Q53SEJ02L' where id=2; -update noar tt set v0='8ET40P6O8VS62ZDKGGB0BCF42A5M1' where id=3; -update noar ti set v0='8ET40P6O8VS62ZDKGGB0BCF42A5M1' where id=3; -update noar tt set b0='GSIU' where id=3; -update noar ti set b0='GSIU' where id=3; -update noar tt set v0='Y1' where id=3; -update noar ti set v0='Y1' where id=3; -update noar tt set b1='T68PIO' where id=3; -update noar ti set b1='T68PIO' where id=3; -update noar tt set v0='K6NEEP5R4ATOBJJ9IH990' where id=3; -update noar ti set v0='K6NEEP5R4ATOBJJ9IH990' where id=3; -update noar tt set b2='K5W7IM6LWGZZ3M0' where id=3; -update noar ti set b2='K5W7IM6LWGZZ3M0' where id=3; -update noar tt set v0='P49ZS' where id=4; -update noar ti set v0='P49ZS' where id=4; -update noar tt set b0='KDP' where id=4; -update noar ti set b0='KDP' where id=4; -update noar tt set v0='I6JSNI6VKA106P2DLH3U06FLTIC' where id=4; -update noar ti set v0='I6JSNI6VKA106P2DLH3U06FLTIC' where id=4; -update noar tt set b1='5E8QJL8K5P7UT4' where id=4; -update noar ti set b1='5E8QJL8K5P7UT4' where id=4; -update noar tt set v0='FNH8200Q2VSF4SLJXHACPRYCE59D' where id=4; -update noar ti set v0='FNH8200Q2VSF4SLJXHACPRYCE59D' where id=4; -update noar tt set b2='1' where id=4; -update noar ti set b2='1' where id=4; -update noar tt set v0='L9IM6QM82EJY0QM8DF1HN9L' where id=5; -update noar ti set v0='L9IM6QM82EJY0QM8DF1HN9L' where id=5; -update noar tt set b0='YSOKXCCVIFPNE503BJ' where id=5; -update noar ti set b0='YSOKXCCVIFPNE503BJ' where id=5; -update noar tt set v0='77RQMOAWWQ0WCCKOCIDF3RWR1UB' where id=5; -update noar ti set v0='77RQMOAWWQ0WCCKOCIDF3RWR1UB' where id=5; -update noar tt set b1='OYEDEKH3FKZFIRXGPD9C3M1AIOJS' where id=5; -update noar ti set b1='OYEDEKH3FKZFIRXGPD9C3M1AIOJS' where id=5; -update noar tt set v0='XHAE0O9UVJ6RGJ84XB6GP7SU4F6' where id=5; -update noar ti set v0='XHAE0O9UVJ6RGJ84XB6GP7SU4F6' where id=5; -update noar tt set b2='0A78JP672GGOL1EPEZ2FL3' where id=5; -update noar ti set b2='0A78JP672GGOL1EPEZ2FL3' where id=5; -update noar tt set v0='KD' where id=6; -update noar ti set v0='KD' where id=6; -update noar tt set b0='1QQWGJWNDGDP56Y8KP1Q16BVF7OMYE7J' where id=6; -update noar ti set b0='1QQWGJWNDGDP56Y8KP1Q16BVF7OMYE7J' where id=6; -update noar tt set v0='IWRP' where id=6; -update noar ti set v0='IWRP' where id=6; -update noar tt set b1='OFF94CSWJROSA21895' where id=6; -update noar ti set b1='OFF94CSWJROSA21895' where id=6; -update noar tt set v0='VSS3UFBK9WK1FJHECF7BY' where id=6; -update noar ti set v0='VSS3UFBK9WK1FJHECF7BY' where id=6; -update noar tt set b2='K09ZEN03ZESE0SNQUDT8M78N5HPI2D' where id=6; -update noar ti set b2='K09ZEN03ZESE0SNQUDT8M78N5HPI2D' where id=6; -update noar tt set v0='383CEKGJLRUZ5LNDRPXFI0OHDFUIC' where id=7; -update noar ti set v0='383CEKGJLRUZ5LNDRPXFI0OHDFUIC' where id=7; -update noar tt set b0='2WBF9WB999SJ6QLA9YLC90BNWY2J' where id=7; -update noar ti set b0='2WBF9WB999SJ6QLA9YLC90BNWY2J' where id=7; -update noar tt set v0='MNE5FOBSGFRYEDHVDH' where id=7; -update noar ti set v0='MNE5FOBSGFRYEDHVDH' where id=7; -update noar tt set b1='NWRSX' where id=7; -update noar ti set b1='NWRSX' where id=7; -update noar tt set v0='PEEX1XTC97SKEC5TPVEF8NDD8XYHOQK' where id=7; -update noar ti set v0='PEEX1XTC97SKEC5TPVEF8NDD8XYHOQK' where id=7; -update noar tt set b2='QQPRH7ZR32V' where id=7; -update noar ti set b2='QQPRH7ZR32V' where id=7; -update noar tt set v0='4I9UBAA9QYT' where id=8; -update noar ti set v0='4I9UBAA9QYT' where id=8; -update noar tt set b0='5W7' where id=8; -update noar ti set b0='5W7' where id=8; -update noar tt set v0='B9OY5AQA4Q' where id=8; -update noar ti set v0='B9OY5AQA4Q' where id=8; -update noar tt set b1='LJAAXNXP115K7KM1VP' where id=8; -update noar ti set b1='LJAAXNXP115K7KM1VP' where id=8; -update noar tt set v0='DV4RPJBFVTIDKBC7OBF' where id=8; -update noar ti set v0='DV4RPJBFVTIDKBC7OBF' where id=8; -update noar tt set b2='31VBHA0WYNFMM0ND1U3HA' where id=8; -update noar ti set b2='31VBHA0WYNFMM0ND1U3HA' where id=8; -update noar tt set v0='Q4WQ7401MZ24PGXAC3OHA5M95U24K5' where id=9; -update noar ti set v0='Q4WQ7401MZ24PGXAC3OHA5M95U24K5' where id=9; -update noar tt set b0='CCYD2J6VRZ8IJZ8LVQMUF0740B6' where id=9; -update noar ti set b0='CCYD2J6VRZ8IJZ8LVQMUF0740B6' where id=9; -update noar tt set v0='UC9C4E0GIFIGUYP' where id=9; -update noar ti set v0='UC9C4E0GIFIGUYP' where id=9; -update noar tt set b1='A3' where id=9; -update noar ti set b1='A3' where id=9; -update noar tt set v0='10P3FW1DBL1FZNSA8YDZ2AP6D3O' where id=9; -update noar ti set v0='10P3FW1DBL1FZNSA8YDZ2AP6D3O' where id=9; -update noar tt set b2='D1W4JN1FXC42K1VHTKH0E9189' where id=9; -update noar ti set b2='D1W4JN1FXC42K1VHTKH0E9189' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 mediumblob null, -b1 mediumblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='924DMLHUZX5E1Y19A7U7N00' where id=1; -update noar ti set v0='924DMLHUZX5E1Y19A7U7N00' where id=1; -update noar tt set b0='JP8DZFA' where id=1; -update noar ti set b0='JP8DZFA' where id=1; -update noar tt set v0='3FP51JAYA91UO2ZDE5O10FDOHYV34OL6' where id=1; -update noar ti set v0='3FP51JAYA91UO2ZDE5O10FDOHYV34OL6' where id=1; -update noar tt set b1='9VLRHCPDWO0C4K' where id=1; -update noar ti set b1='9VLRHCPDWO0C4K' where id=1; -update noar tt set v0='3MSN1U5RD7EP1DUM8C5SN1' where id=1; -update noar ti set v0='3MSN1U5RD7EP1DUM8C5SN1' where id=1; -update noar tt set b2='E9ZJ11IDFLF58P0EXXN1HLOL' where id=1; -update noar ti set b2='E9ZJ11IDFLF58P0EXXN1HLOL' where id=1; -update noar tt set v0='GBN11VA7O1ALPWFGF52YW' where id=2; -update noar ti set v0='GBN11VA7O1ALPWFGF52YW' where id=2; -update noar tt set b0='F1WQIPUA04D3SKKS21AG1X7Y' where id=2; -update noar ti set b0='F1WQIPUA04D3SKKS21AG1X7Y' where id=2; -update noar tt set v0='JLAQ0KAECQ44HIXDL' where id=2; -update noar ti set v0='JLAQ0KAECQ44HIXDL' where id=2; -update noar tt set b1='MOCI6K7R99AWNUUY41PR' where id=2; -update noar ti set b1='MOCI6K7R99AWNUUY41PR' where id=2; -update noar tt set v0='VAAT8W7W' where id=2; -update noar ti set v0='VAAT8W7W' where id=2; -update noar tt set b2='4JSEXQ6S' where id=2; -update noar ti set b2='4JSEXQ6S' where id=2; -update noar tt set v0='ZHBHDC' where id=3; -update noar ti set v0='ZHBHDC' where id=3; -update noar tt set b0='5TGZ8GVN8CL16U3X8' where id=3; -update noar ti set b0='5TGZ8GVN8CL16U3X8' where id=3; -update noar tt set v0='TU23OZIPA8UGBI' where id=3; -update noar ti set v0='TU23OZIPA8UGBI' where id=3; -update noar tt set b1='346JR8GAKLXM33M2K2JTXV8G4ATS' where id=3; -update noar ti set b1='346JR8GAKLXM33M2K2JTXV8G4ATS' where id=3; -update noar tt set v0='4C73OMK8H1DCENPECENX9A' where id=3; -update noar ti set v0='4C73OMK8H1DCENPECENX9A' where id=3; -update noar tt set b2='INLDUPR0LZDEP0RZTGQGN' where id=3; -update noar ti set b2='INLDUPR0LZDEP0RZTGQGN' where id=3; -update noar tt set v0='YT7A' where id=4; -update noar ti set v0='YT7A' where id=4; -update noar tt set b0='0FDN1G9PMPQZ3AR' where id=4; -update noar ti set b0='0FDN1G9PMPQZ3AR' where id=4; -update noar tt set v0='Y4NSKJ0ECCB1811XFX6V395Z6JOU7E' where id=4; -update noar ti set v0='Y4NSKJ0ECCB1811XFX6V395Z6JOU7E' where id=4; -update noar tt set b1='TS1KIWDC11NU' where id=4; -update noar ti set b1='TS1KIWDC11NU' where id=4; -update noar tt set v0='MSOK978ZD6RHCAA54PZK' where id=4; -update noar ti set v0='MSOK978ZD6RHCAA54PZK' where id=4; -update noar tt set b2='6ODSCOI97HKWV6XBS' where id=4; -update noar ti set b2='6ODSCOI97HKWV6XBS' where id=4; -update noar tt set v0='WOHVUAJC0J' where id=5; -update noar ti set v0='WOHVUAJC0J' where id=5; -update noar tt set b0='M8FU0I4A' where id=5; -update noar ti set b0='M8FU0I4A' where id=5; -update noar tt set v0='WTRCHAKQH0Q7' where id=5; -update noar ti set v0='WTRCHAKQH0Q7' where id=5; -update noar tt set b1='AJ2AOKL3WOO0O2MFUBQAKRRPFK0ZC' where id=5; -update noar ti set b1='AJ2AOKL3WOO0O2MFUBQAKRRPFK0ZC' where id=5; -update noar tt set v0='4B2HHDWGINKTA1DZ7SV' where id=5; -update noar ti set v0='4B2HHDWGINKTA1DZ7SV' where id=5; -update noar tt set b2='B6U2C5HAUQRG86JD' where id=5; -update noar ti set b2='B6U2C5HAUQRG86JD' where id=5; -update noar tt set v0='TSO5YX' where id=6; -update noar ti set v0='TSO5YX' where id=6; -update noar tt set b0='6Z' where id=6; -update noar ti set b0='6Z' where id=6; -update noar tt set v0='LJTSFVDF32CM9OQTRASPTZJ' where id=6; -update noar ti set v0='LJTSFVDF32CM9OQTRASPTZJ' where id=6; -update noar tt set b1='WOMS5DM' where id=6; -update noar ti set b1='WOMS5DM' where id=6; -update noar tt set v0='WC6TYFYM4' where id=6; -update noar ti set v0='WC6TYFYM4' where id=6; -update noar tt set b2='TVVGTIBZR' where id=6; -update noar ti set b2='TVVGTIBZR' where id=6; -update noar tt set v0='WGCS9V7O6OFGL2SAUTY7I' where id=7; -update noar ti set v0='WGCS9V7O6OFGL2SAUTY7I' where id=7; -update noar tt set b0='2' where id=7; -update noar ti set b0='2' where id=7; -update noar tt set v0='SA0N50XSZOX' where id=7; -update noar ti set v0='SA0N50XSZOX' where id=7; -update noar tt set b1='1361TR9CM8MLP9KE2UTD7EMT' where id=7; -update noar ti set b1='1361TR9CM8MLP9KE2UTD7EMT' where id=7; -update noar tt set v0='IN5N' where id=7; -update noar ti set v0='IN5N' where id=7; -update noar tt set b2='C65GYPRJZ7S4V8D53UF5ZJ' where id=7; -update noar ti set b2='C65GYPRJZ7S4V8D53UF5ZJ' where id=7; -update noar tt set v0='HBMGILPW70USWKO' where id=8; -update noar ti set v0='HBMGILPW70USWKO' where id=8; -update noar tt set b0='208RB6CBMXVB53KPANMN4EE' where id=8; -update noar ti set b0='208RB6CBMXVB53KPANMN4EE' where id=8; -update noar tt set v0='PM591F8MB5DCB9IBGFF0ONPZ7XEY0QW9' where id=8; -update noar ti set v0='PM591F8MB5DCB9IBGFF0ONPZ7XEY0QW9' where id=8; -update noar tt set b1='VOL66R8SNXATYYT6UZKS3RS' where id=8; -update noar ti set b1='VOL66R8SNXATYYT6UZKS3RS' where id=8; -update noar tt set v0='N6ZN051UYD077Y387' where id=8; -update noar ti set v0='N6ZN051UYD077Y387' where id=8; -update noar tt set b2='JPR6S6LDP719XB' where id=8; -update noar ti set b2='JPR6S6LDP719XB' where id=8; -update noar tt set v0='BWTN29E6C5CQGXS5LH7HFGRPXHLCRU' where id=9; -update noar ti set v0='BWTN29E6C5CQGXS5LH7HFGRPXHLCRU' where id=9; -update noar tt set b0='7G7ZVU4S9B3KWOZAONRU' where id=9; -update noar ti set b0='7G7ZVU4S9B3KWOZAONRU' where id=9; -update noar tt set v0='VO' where id=9; -update noar ti set v0='VO' where id=9; -update noar tt set b1='WIL0ZP5I27' where id=9; -update noar ti set b1='WIL0ZP5I27' where id=9; -update noar tt set v0='EZ4LVF8VSTKFNYNN8' where id=9; -update noar ti set v0='EZ4LVF8VSTKFNYNN8' where id=9; -update noar tt set b2='RKVSQY' where id=9; -update noar ti set b2='RKVSQY' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 mediumblob not null, -b1 mediumblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='RX' where id=1; -update noar ti set v0='RX' where id=1; -update noar tt set b0='2WCIMKBCKFK7PGH' where id=1; -update noar ti set b0='2WCIMKBCKFK7PGH' where id=1; -update noar tt set v0='706PK' where id=1; -update noar ti set v0='706PK' where id=1; -update noar tt set b1='6E' where id=1; -update noar ti set b1='6E' where id=1; -update noar tt set v0='1ORZ2X5I49' where id=1; -update noar ti set v0='1ORZ2X5I49' where id=1; -update noar tt set b2='T6VKX' where id=1; -update noar ti set b2='T6VKX' where id=1; -update noar tt set v0='03' where id=2; -update noar ti set v0='03' where id=2; -update noar tt set b0='I8E6KN6YTPV9XDN7VML4EXHTS4FROVW' where id=2; -update noar ti set b0='I8E6KN6YTPV9XDN7VML4EXHTS4FROVW' where id=2; -update noar tt set v0='UQ3SS' where id=2; -update noar ti set v0='UQ3SS' where id=2; -update noar tt set b1='5HNIC6VAZ3UUF4LUSHJ6GN1ERO9CBW2W' where id=2; -update noar ti set b1='5HNIC6VAZ3UUF4LUSHJ6GN1ERO9CBW2W' where id=2; -update noar tt set v0='78M7YTPAQAYTB64XCV00ZF' where id=2; -update noar ti set v0='78M7YTPAQAYTB64XCV00ZF' where id=2; -update noar tt set b2='16G' where id=2; -update noar ti set b2='16G' where id=2; -update noar tt set v0='0JIQT30HOJRN0TR8D7YWPA5WOR' where id=3; -update noar ti set v0='0JIQT30HOJRN0TR8D7YWPA5WOR' where id=3; -update noar tt set b0='WEL6DTZCHTYUL7KZHABDO' where id=3; -update noar ti set b0='WEL6DTZCHTYUL7KZHABDO' where id=3; -update noar tt set v0='MIKXSUXLEMVJ43RVGFB' where id=3; -update noar ti set v0='MIKXSUXLEMVJ43RVGFB' where id=3; -update noar tt set b1='0IHM2JLXMH2ZB' where id=3; -update noar ti set b1='0IHM2JLXMH2ZB' where id=3; -update noar tt set v0='UVOG2TS516' where id=3; -update noar ti set v0='UVOG2TS516' where id=3; -update noar tt set b2='IQSM8OM' where id=3; -update noar ti set b2='IQSM8OM' where id=3; -update noar tt set v0='YUSNVJJMY5BWXLZE86' where id=4; -update noar ti set v0='YUSNVJJMY5BWXLZE86' where id=4; -update noar tt set b0='X2' where id=4; -update noar ti set b0='X2' where id=4; -update noar tt set v0='7HB0QKR67NM' where id=4; -update noar ti set v0='7HB0QKR67NM' where id=4; -update noar tt set b1='XG' where id=4; -update noar ti set b1='XG' where id=4; -update noar tt set v0='Y0JQPUGEOPQI0EK7XNT1G3' where id=4; -update noar ti set v0='Y0JQPUGEOPQI0EK7XNT1G3' where id=4; -update noar tt set b2='HO749TUPMSMB7VLMDFER4' where id=4; -update noar ti set b2='HO749TUPMSMB7VLMDFER4' where id=4; -update noar tt set v0='7UUD0C' where id=5; -update noar ti set v0='7UUD0C' where id=5; -update noar tt set b0='JVY3ARWMV' where id=5; -update noar ti set b0='JVY3ARWMV' where id=5; -update noar tt set v0='7L' where id=5; -update noar ti set v0='7L' where id=5; -update noar tt set b1='QA29N6YZ8FH17Z2PNCBK6HR6' where id=5; -update noar ti set b1='QA29N6YZ8FH17Z2PNCBK6HR6' where id=5; -update noar tt set v0='DB46BRMV41GEHUHHBWF2DE0' where id=5; -update noar ti set v0='DB46BRMV41GEHUHHBWF2DE0' where id=5; -update noar tt set b2='JEUV1' where id=5; -update noar ti set b2='JEUV1' where id=5; -update noar tt set v0='R65BOTHCZ' where id=6; -update noar ti set v0='R65BOTHCZ' where id=6; -update noar tt set b0='CBJ' where id=6; -update noar ti set b0='CBJ' where id=6; -update noar tt set v0='77DZEK4T' where id=6; -update noar ti set v0='77DZEK4T' where id=6; -update noar tt set b1='LSRJKJGL36P9S57649G320Z' where id=6; -update noar ti set b1='LSRJKJGL36P9S57649G320Z' where id=6; -update noar tt set v0='9BMF4BKIOD7XVDUNI35PG2' where id=6; -update noar ti set v0='9BMF4BKIOD7XVDUNI35PG2' where id=6; -update noar tt set b2='JZBV6WWM2FVYN4E19J' where id=6; -update noar ti set b2='JZBV6WWM2FVYN4E19J' where id=6; -update noar tt set v0='F43ZUIDPHZ4AVK3' where id=7; -update noar ti set v0='F43ZUIDPHZ4AVK3' where id=7; -update noar tt set b0='N4FA8K89K3KJ4XISQ8V' where id=7; -update noar ti set b0='N4FA8K89K3KJ4XISQ8V' where id=7; -update noar tt set v0='Q1343X9C6MLSTV' where id=7; -update noar ti set v0='Q1343X9C6MLSTV' where id=7; -update noar tt set b1='UYRSGXXC' where id=7; -update noar ti set b1='UYRSGXXC' where id=7; -update noar tt set v0='5EI5LREEYV0QINGGU' where id=7; -update noar ti set v0='5EI5LREEYV0QINGGU' where id=7; -update noar tt set b2='2XHXN8BJ6LRT9IACSXQXGV70WLQXYQ' where id=7; -update noar ti set b2='2XHXN8BJ6LRT9IACSXQXGV70WLQXYQ' where id=7; -update noar tt set v0='FH1YCOSPJZF6R3RHK6Z5AI3' where id=8; -update noar ti set v0='FH1YCOSPJZF6R3RHK6Z5AI3' where id=8; -update noar tt set b0='2MCJUZ5V291MY' where id=8; -update noar ti set b0='2MCJUZ5V291MY' where id=8; -update noar tt set v0='9M3GJC0B' where id=8; -update noar ti set v0='9M3GJC0B' where id=8; -update noar tt set b1='BYHHYHHUNAEQUJM6W' where id=8; -update noar ti set b1='BYHHYHHUNAEQUJM6W' where id=8; -update noar tt set v0='B5N' where id=8; -update noar ti set v0='B5N' where id=8; -update noar tt set b2='RKU2PO8ZTD3O0ZO3LRDZ5TVZ26QA7G' where id=8; -update noar ti set b2='RKU2PO8ZTD3O0ZO3LRDZ5TVZ26QA7G' where id=8; -update noar tt set v0='OGBGY3ZREMY193Q9F' where id=9; -update noar ti set v0='OGBGY3ZREMY193Q9F' where id=9; -update noar tt set b0='CH0XSWBC2P' where id=9; -update noar ti set b0='CH0XSWBC2P' where id=9; -update noar tt set v0='KK3FY02GXPPSJE15SFKWL4UR' where id=9; -update noar ti set v0='KK3FY02GXPPSJE15SFKWL4UR' where id=9; -update noar tt set b1='AXCLAER11W651LFG' where id=9; -update noar ti set b1='AXCLAER11W651LFG' where id=9; -update noar tt set v0='JE3BLVVQNPLHWMM' where id=9; -update noar ti set v0='JE3BLVVQNPLHWMM' where id=9; -update noar tt set b2='ITIF' where id=9; -update noar ti set b2='ITIF' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 mediumblob not null, -b1 mediumblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='7' where id=1; -update noar ti set v0='7' where id=1; -update noar tt set b0='XB69E018X678RTWFNPBOH8W6Z' where id=1; -update noar ti set b0='XB69E018X678RTWFNPBOH8W6Z' where id=1; -update noar tt set v0='KKEDB67B7JJ1NIJCXCYV5EVQEVE' where id=1; -update noar ti set v0='KKEDB67B7JJ1NIJCXCYV5EVQEVE' where id=1; -update noar tt set b1='VLDXMXBKYLHWY' where id=1; -update noar ti set b1='VLDXMXBKYLHWY' where id=1; -update noar tt set v0='H7H7P0LLQ6BK5SXAS2FRSEIR77T1RLZ' where id=1; -update noar ti set v0='H7H7P0LLQ6BK5SXAS2FRSEIR77T1RLZ' where id=1; -update noar tt set b2='RXYF95Q' where id=1; -update noar ti set b2='RXYF95Q' where id=1; -update noar tt set v0='05' where id=2; -update noar ti set v0='05' where id=2; -update noar tt set b0='ZB1DFZM' where id=2; -update noar ti set b0='ZB1DFZM' where id=2; -update noar tt set v0='HKG3PDFVE5' where id=2; -update noar ti set v0='HKG3PDFVE5' where id=2; -update noar tt set b1='A7SMDWGJM7BXX99' where id=2; -update noar ti set b1='A7SMDWGJM7BXX99' where id=2; -update noar tt set v0='09KYTXMNP3B9JT' where id=2; -update noar ti set v0='09KYTXMNP3B9JT' where id=2; -update noar tt set b2='6I36X22EZW0A9B' where id=2; -update noar ti set b2='6I36X22EZW0A9B' where id=2; -update noar tt set v0='LS6AL05UQLTVSIHGW9U69GCB3A' where id=3; -update noar ti set v0='LS6AL05UQLTVSIHGW9U69GCB3A' where id=3; -update noar tt set b0='SUPSJAV22BA9ZSBDS8Q5KTZ0QR' where id=3; -update noar ti set b0='SUPSJAV22BA9ZSBDS8Q5KTZ0QR' where id=3; -update noar tt set v0='PSDFUNRWD3DE7T973DE' where id=3; -update noar ti set v0='PSDFUNRWD3DE7T973DE' where id=3; -update noar tt set b1='W7FL5IIMK1Z' where id=3; -update noar ti set b1='W7FL5IIMK1Z' where id=3; -update noar tt set v0='7HVRYZKHWX9S0L54UGF5AMS8DTMB' where id=3; -update noar ti set v0='7HVRYZKHWX9S0L54UGF5AMS8DTMB' where id=3; -update noar tt set b2='76WUV4E03OP8IC7XANZDRT1' where id=3; -update noar ti set b2='76WUV4E03OP8IC7XANZDRT1' where id=3; -update noar tt set v0='SSNGY' where id=4; -update noar ti set v0='SSNGY' where id=4; -update noar tt set b0='8O8GHEQCYIFTG02G17DPCNHYJ5ZYTWL' where id=4; -update noar ti set b0='8O8GHEQCYIFTG02G17DPCNHYJ5ZYTWL' where id=4; -update noar tt set v0='IVRBC79VODTM5ESR5' where id=4; -update noar ti set v0='IVRBC79VODTM5ESR5' where id=4; -update noar tt set b1='A5' where id=4; -update noar ti set b1='A5' where id=4; -update noar tt set v0='NZLWCKXZPYQBLG2315A9TCWPEK17' where id=4; -update noar ti set v0='NZLWCKXZPYQBLG2315A9TCWPEK17' where id=4; -update noar tt set b2='HGWVIJPSN0GFXZ' where id=4; -update noar ti set b2='HGWVIJPSN0GFXZ' where id=4; -update noar tt set v0='N27FQ1OHGWUYQSO2P36VHTG1N' where id=5; -update noar ti set v0='N27FQ1OHGWUYQSO2P36VHTG1N' where id=5; -update noar tt set b0='6EX94' where id=5; -update noar ti set b0='6EX94' where id=5; -update noar tt set v0='5QA780MPCBH12AG76Q6DCL' where id=5; -update noar ti set v0='5QA780MPCBH12AG76Q6DCL' where id=5; -update noar tt set b1='2XRCU69NFWZF7XDFNR' where id=5; -update noar ti set b1='2XRCU69NFWZF7XDFNR' where id=5; -update noar tt set v0='LRVEXWM4468MWAS8' where id=5; -update noar ti set v0='LRVEXWM4468MWAS8' where id=5; -update noar tt set b2='55M1LI6OOO0ZSD6OG0AYH4' where id=5; -update noar ti set b2='55M1LI6OOO0ZSD6OG0AYH4' where id=5; -update noar tt set v0='K9' where id=6; -update noar ti set v0='K9' where id=6; -update noar tt set b0='TS1VF5B9QKAP31QTG' where id=6; -update noar ti set b0='TS1VF5B9QKAP31QTG' where id=6; -update noar tt set v0='6FP81YSFF0BBMZGX8J0TDBJNIHS60XG' where id=6; -update noar ti set v0='6FP81YSFF0BBMZGX8J0TDBJNIHS60XG' where id=6; -update noar tt set b1='CMQ5JZKPNE8G1UZU30JQZWEW' where id=6; -update noar ti set b1='CMQ5JZKPNE8G1UZU30JQZWEW' where id=6; -update noar tt set v0='CYCBT' where id=6; -update noar ti set v0='CYCBT' where id=6; -update noar tt set b2='7NSLPYVX1TQNRH0WX4ACGSXATH7GKFAS' where id=6; -update noar ti set b2='7NSLPYVX1TQNRH0WX4ACGSXATH7GKFAS' where id=6; -update noar tt set v0='CBZF6X7INO4ZHUM2G1' where id=7; -update noar ti set v0='CBZF6X7INO4ZHUM2G1' where id=7; -update noar tt set b0='ZUE226DQC65JWJD9FIHRW40DAP2R' where id=7; -update noar ti set b0='ZUE226DQC65JWJD9FIHRW40DAP2R' where id=7; -update noar tt set v0='W18N5FE2S4OHWQ7X' where id=7; -update noar ti set v0='W18N5FE2S4OHWQ7X' where id=7; -update noar tt set b1='J45XTK0VD03QD23KTB9CFUX8QTOH' where id=7; -update noar ti set b1='J45XTK0VD03QD23KTB9CFUX8QTOH' where id=7; -update noar tt set v0='0CU' where id=7; -update noar ti set v0='0CU' where id=7; -update noar tt set b2='57OPJB9725UTU7H' where id=7; -update noar ti set b2='57OPJB9725UTU7H' where id=7; -update noar tt set v0='I9H685OG5WIGKTI3733' where id=8; -update noar ti set v0='I9H685OG5WIGKTI3733' where id=8; -update noar tt set b0='N0QLZ27FYU' where id=8; -update noar ti set b0='N0QLZ27FYU' where id=8; -update noar tt set v0='WIJRXFY' where id=8; -update noar ti set v0='WIJRXFY' where id=8; -update noar tt set b1='HLX2BV5FZ5IM047NC' where id=8; -update noar ti set b1='HLX2BV5FZ5IM047NC' where id=8; -update noar tt set v0='5' where id=8; -update noar ti set v0='5' where id=8; -update noar tt set b2='7RTVAR3LTZ2JOHFFQVK1Z' where id=8; -update noar ti set b2='7RTVAR3LTZ2JOHFFQVK1Z' where id=8; -update noar tt set v0='4XZ3ISOBVA9IEZI9ND' where id=9; -update noar ti set v0='4XZ3ISOBVA9IEZI9ND' where id=9; -update noar tt set b0='RZHK868VDX9XSQUN0X5IYKCHJR208PH' where id=9; -update noar ti set b0='RZHK868VDX9XSQUN0X5IYKCHJR208PH' where id=9; -update noar tt set v0='OF' where id=9; -update noar ti set v0='OF' where id=9; -update noar tt set b1='ZQEIMTX7MNTG' where id=9; -update noar ti set b1='ZQEIMTX7MNTG' where id=9; -update noar tt set v0='OL1ST5QPQ743W2EJMI4YR' where id=9; -update noar ti set v0='OL1ST5QPQ743W2EJMI4YR' where id=9; -update noar tt set b2='86J6JEVBKRD2VOC2REPQ4DAJ5' where id=9; -update noar ti set b2='86J6JEVBKRD2VOC2REPQ4DAJ5' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 mediumblob null, -b1 mediumblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='VG' where id=1; -update noar ti set v0='VG' where id=1; -update noar tt set b0='FJN3XA968HN9GHXM2APSKL' where id=1; -update noar ti set b0='FJN3XA968HN9GHXM2APSKL' where id=1; -update noar tt set v0='YDIZSA59WFXQC1OOSIWBSOEK3F1H1W' where id=1; -update noar ti set v0='YDIZSA59WFXQC1OOSIWBSOEK3F1H1W' where id=1; -update noar tt set b1='H1G3' where id=1; -update noar ti set b1='H1G3' where id=1; -update noar tt set v0='NBD14WRQR0XZP2SG7WNG5Q0Q209YTAHY' where id=1; -update noar ti set v0='NBD14WRQR0XZP2SG7WNG5Q0Q209YTAHY' where id=1; -update noar tt set b2='QJOFOW1SGBID86VK7296EWSZGG9J7X' where id=1; -update noar ti set b2='QJOFOW1SGBID86VK7296EWSZGG9J7X' where id=1; -update noar tt set v0='YCV4YB8X8MIYIYDSAPD' where id=2; -update noar ti set v0='YCV4YB8X8MIYIYDSAPD' where id=2; -update noar tt set b0='YE8DN4ZG5OO01GEMYI5CLXSTV' where id=2; -update noar ti set b0='YE8DN4ZG5OO01GEMYI5CLXSTV' where id=2; -update noar tt set v0='F5WDA5H09RI' where id=2; -update noar ti set v0='F5WDA5H09RI' where id=2; -update noar tt set b1='DVLYDGB9UAVRDQ160SF6' where id=2; -update noar ti set b1='DVLYDGB9UAVRDQ160SF6' where id=2; -update noar tt set v0='PZ1LPO8WDF04JS2' where id=2; -update noar ti set v0='PZ1LPO8WDF04JS2' where id=2; -update noar tt set b2='L9HGD8ZI4WKVC7T2' where id=2; -update noar ti set b2='L9HGD8ZI4WKVC7T2' where id=2; -update noar tt set v0='Y6E0C0SOYHI' where id=3; -update noar ti set v0='Y6E0C0SOYHI' where id=3; -update noar tt set b0='PNCSIUC' where id=3; -update noar ti set b0='PNCSIUC' where id=3; -update noar tt set v0='5QKUG4AENZJWRD' where id=3; -update noar ti set v0='5QKUG4AENZJWRD' where id=3; -update noar tt set b1='OSHU5P5' where id=3; -update noar ti set b1='OSHU5P5' where id=3; -update noar tt set v0='962Q7' where id=3; -update noar ti set v0='962Q7' where id=3; -update noar tt set b2='L1IT8QRRQT0BWQSQIHUH9Z8KM4U' where id=3; -update noar ti set b2='L1IT8QRRQT0BWQSQIHUH9Z8KM4U' where id=3; -update noar tt set v0='XK5GGNXZPPZ6KKPPRRM2YDNICKWZ3ZJ' where id=4; -update noar ti set v0='XK5GGNXZPPZ6KKPPRRM2YDNICKWZ3ZJ' where id=4; -update noar tt set b0='GURSCLP' where id=4; -update noar ti set b0='GURSCLP' where id=4; -update noar tt set v0='V2FN6E1TUKV9341PNOEEI' where id=4; -update noar ti set v0='V2FN6E1TUKV9341PNOEEI' where id=4; -update noar tt set b1='H5KLD5TAR3248MKYBEQ8OXNSBOPE' where id=4; -update noar ti set b1='H5KLD5TAR3248MKYBEQ8OXNSBOPE' where id=4; -update noar tt set v0='GL5QUK8KUS427DRNM0UIMSCF63M' where id=4; -update noar ti set v0='GL5QUK8KUS427DRNM0UIMSCF63M' where id=4; -update noar tt set b2='WVV2D762GU1TKFJD' where id=4; -update noar ti set b2='WVV2D762GU1TKFJD' where id=4; -update noar tt set v0='KN45QZJC4V72WP0XIC5PO8XFH6F' where id=5; -update noar ti set v0='KN45QZJC4V72WP0XIC5PO8XFH6F' where id=5; -update noar tt set b0='B327PUI3MYCEI8XP96' where id=5; -update noar ti set b0='B327PUI3MYCEI8XP96' where id=5; -update noar tt set v0='DA7DXNGKX7' where id=5; -update noar ti set v0='DA7DXNGKX7' where id=5; -update noar tt set b1='KB1G9K7XE09SF6LGY5I47' where id=5; -update noar ti set b1='KB1G9K7XE09SF6LGY5I47' where id=5; -update noar tt set v0='E570M6JXEA4JBZJFPHFT' where id=5; -update noar ti set v0='E570M6JXEA4JBZJFPHFT' where id=5; -update noar tt set b2='W3L' where id=5; -update noar ti set b2='W3L' where id=5; -update noar tt set v0='DSR1XNMKT0AZ' where id=6; -update noar ti set v0='DSR1XNMKT0AZ' where id=6; -update noar tt set b0='18X' where id=6; -update noar ti set b0='18X' where id=6; -update noar tt set v0='6RGPJ2DOCSP5AJWZR2FLHIZVGNW7' where id=6; -update noar ti set v0='6RGPJ2DOCSP5AJWZR2FLHIZVGNW7' where id=6; -update noar tt set b1='M6YYVTWBYDTQBG7CI0B5L9V7025WVLC' where id=6; -update noar ti set b1='M6YYVTWBYDTQBG7CI0B5L9V7025WVLC' where id=6; -update noar tt set v0='6W0Y' where id=6; -update noar ti set v0='6W0Y' where id=6; -update noar tt set b2='KIMUPFZ' where id=6; -update noar ti set b2='KIMUPFZ' where id=6; -update noar tt set v0='AH' where id=7; -update noar ti set v0='AH' where id=7; -update noar tt set b0='LC1C52G7BB7MO7PT44KJGZIKTU5K4LC' where id=7; -update noar ti set b0='LC1C52G7BB7MO7PT44KJGZIKTU5K4LC' where id=7; -update noar tt set v0='48NXU97IQYAGCJYQ3B' where id=7; -update noar ti set v0='48NXU97IQYAGCJYQ3B' where id=7; -update noar tt set b1='6U9M2184W42V515NLBDAOSKTWKK6XM' where id=7; -update noar ti set b1='6U9M2184W42V515NLBDAOSKTWKK6XM' where id=7; -update noar tt set v0='5ZR6VB9CEAWA4ZSD4J' where id=7; -update noar ti set v0='5ZR6VB9CEAWA4ZSD4J' where id=7; -update noar tt set b2='90MNRLNR4UU1F5RXKP6VWLIKB' where id=7; -update noar ti set b2='90MNRLNR4UU1F5RXKP6VWLIKB' where id=7; -update noar tt set v0='ARRFXWW4LY05R2U5P5' where id=8; -update noar ti set v0='ARRFXWW4LY05R2U5P5' where id=8; -update noar tt set b0='OEVDKE117AD88ZTXFAZ' where id=8; -update noar ti set b0='OEVDKE117AD88ZTXFAZ' where id=8; -update noar tt set v0='S0NR1IPLMU5Z07H0R21BRAU4I982IQB8' where id=8; -update noar ti set v0='S0NR1IPLMU5Z07H0R21BRAU4I982IQB8' where id=8; -update noar tt set b1='NOI76XV' where id=8; -update noar ti set b1='NOI76XV' where id=8; -update noar tt set v0='WXUDSLXIHL42WFJXTBZ0DD1Y' where id=8; -update noar ti set v0='WXUDSLXIHL42WFJXTBZ0DD1Y' where id=8; -update noar tt set b2='7PYL9NZFGE9OYKORR' where id=8; -update noar ti set b2='7PYL9NZFGE9OYKORR' where id=8; -update noar tt set v0='I7' where id=9; -update noar ti set v0='I7' where id=9; -update noar tt set b0='PF' where id=9; -update noar ti set b0='PF' where id=9; -update noar tt set v0='HYMII189T4C575LFE1M7BF8YNDI8' where id=9; -update noar ti set v0='HYMII189T4C575LFE1M7BF8YNDI8' where id=9; -update noar tt set b1='XUXJH2NAYAUW4N57Q60Y8ZNSUXFHLM6' where id=9; -update noar ti set b1='XUXJH2NAYAUW4N57Q60Y8ZNSUXFHLM6' where id=9; -update noar tt set v0='2T2RWCL0Y4' where id=9; -update noar ti set v0='2T2RWCL0Y4' where id=9; -update noar tt set b2='1OGXMOK8SAJ87DUVY2AUHSQ' where id=9; -update noar ti set b2='1OGXMOK8SAJ87DUVY2AUHSQ' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 mediumblob null, -b1 mediumblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='IW6Y0QH0HNFJKJM3' where id=1; -update noar ti set v0='IW6Y0QH0HNFJKJM3' where id=1; -update noar tt set b0='73OJM' where id=1; -update noar ti set b0='73OJM' where id=1; -update noar tt set v0='SJI5ZFVKS' where id=1; -update noar ti set v0='SJI5ZFVKS' where id=1; -update noar tt set b1='P6OAIR0BIQZB0JWRFE1DYZVX6S' where id=1; -update noar ti set b1='P6OAIR0BIQZB0JWRFE1DYZVX6S' where id=1; -update noar tt set v0='B9GXKK4BPJYDYWV2XWYU8XAKA25L' where id=1; -update noar ti set v0='B9GXKK4BPJYDYWV2XWYU8XAKA25L' where id=1; -update noar tt set b2='V7UN' where id=1; -update noar ti set b2='V7UN' where id=1; -update noar tt set v0='D6CQ2AYNS0P3E9335X1KCIQT5W' where id=2; -update noar ti set v0='D6CQ2AYNS0P3E9335X1KCIQT5W' where id=2; -update noar tt set b0='FUHPUJ8IP10UF1MZPDY9ELRZ3' where id=2; -update noar ti set b0='FUHPUJ8IP10UF1MZPDY9ELRZ3' where id=2; -update noar tt set v0='8WM21ZZLR1Y7Q' where id=2; -update noar ti set v0='8WM21ZZLR1Y7Q' where id=2; -update noar tt set b1='K5TAXYWANDG4M68P87O2RJMV04XH70' where id=2; -update noar ti set b1='K5TAXYWANDG4M68P87O2RJMV04XH70' where id=2; -update noar tt set v0='7OA0XU52P9HRE8PYRFKC6YW3CJDRP' where id=2; -update noar ti set v0='7OA0XU52P9HRE8PYRFKC6YW3CJDRP' where id=2; -update noar tt set b2='QI01UKL4J6EU0W7TL3B5Z6NFGQJT6V0' where id=2; -update noar ti set b2='QI01UKL4J6EU0W7TL3B5Z6NFGQJT6V0' where id=2; -update noar tt set v0='LK1XQODE31ALGYF3WBABAW6' where id=3; -update noar ti set v0='LK1XQODE31ALGYF3WBABAW6' where id=3; -update noar tt set b0='312HEGO0J4GC00YOCF' where id=3; -update noar ti set b0='312HEGO0J4GC00YOCF' where id=3; -update noar tt set v0='7PC' where id=3; -update noar ti set v0='7PC' where id=3; -update noar tt set b1='KF57DS0HMKIFTONTVMP0LUYVNOLF' where id=3; -update noar ti set b1='KF57DS0HMKIFTONTVMP0LUYVNOLF' where id=3; -update noar tt set v0='AKV6P2UY' where id=3; -update noar ti set v0='AKV6P2UY' where id=3; -update noar tt set b2='A9UFBJRKOH479FPRKTS3U4JNX' where id=3; -update noar ti set b2='A9UFBJRKOH479FPRKTS3U4JNX' where id=3; -update noar tt set v0='1OHUNAICUT8XP4O66UC' where id=4; -update noar ti set v0='1OHUNAICUT8XP4O66UC' where id=4; -update noar tt set b0='TZ9NLOPICFE' where id=4; -update noar ti set b0='TZ9NLOPICFE' where id=4; -update noar tt set v0='3VCJE3Q2BSI8ZUAVVL27APDAXBJ' where id=4; -update noar ti set v0='3VCJE3Q2BSI8ZUAVVL27APDAXBJ' where id=4; -update noar tt set b1='O9HU0YGH' where id=4; -update noar ti set b1='O9HU0YGH' where id=4; -update noar tt set v0='8J' where id=4; -update noar ti set v0='8J' where id=4; -update noar tt set b2='3OEEX9SCL3XSV2IMCV8WA804DTWNZXH' where id=4; -update noar ti set b2='3OEEX9SCL3XSV2IMCV8WA804DTWNZXH' where id=4; -update noar tt set v0='QYA938NA' where id=5; -update noar ti set v0='QYA938NA' where id=5; -update noar tt set b0='30XT95LYU4V06OTXDP4VNM' where id=5; -update noar ti set b0='30XT95LYU4V06OTXDP4VNM' where id=5; -update noar tt set v0='8S9K5D2LHGAVDR9LYVH' where id=5; -update noar ti set v0='8S9K5D2LHGAVDR9LYVH' where id=5; -update noar tt set b1='4QKM31OZ2K00XUAHX4G3VOW' where id=5; -update noar ti set b1='4QKM31OZ2K00XUAHX4G3VOW' where id=5; -update noar tt set v0='5C' where id=5; -update noar ti set v0='5C' where id=5; -update noar tt set b2='E5DNMQW0DNEV3XZG881N6' where id=5; -update noar ti set b2='E5DNMQW0DNEV3XZG881N6' where id=5; -update noar tt set v0='JKTGTP' where id=6; -update noar ti set v0='JKTGTP' where id=6; -update noar tt set b0='8YWA1' where id=6; -update noar ti set b0='8YWA1' where id=6; -update noar tt set v0='KE1WTCQWP1SRBSARCBP5HCBL6M' where id=6; -update noar ti set v0='KE1WTCQWP1SRBSARCBP5HCBL6M' where id=6; -update noar tt set b1='ZK5C01FTEOGRYX33PG5IQ9UF0F7PN2' where id=6; -update noar ti set b1='ZK5C01FTEOGRYX33PG5IQ9UF0F7PN2' where id=6; -update noar tt set v0='E5ZPX8R24XY78TPHAU3YQT26' where id=6; -update noar ti set v0='E5ZPX8R24XY78TPHAU3YQT26' where id=6; -update noar tt set b2='GE' where id=6; -update noar ti set b2='GE' where id=6; -update noar tt set v0='0XOJYDX8PEHRJYS57XM6B34T3IJPN' where id=7; -update noar ti set v0='0XOJYDX8PEHRJYS57XM6B34T3IJPN' where id=7; -update noar tt set b0='PJ6CMI7C' where id=7; -update noar ti set b0='PJ6CMI7C' where id=7; -update noar tt set v0='BW1FVWMHL4G5' where id=7; -update noar ti set v0='BW1FVWMHL4G5' where id=7; -update noar tt set b1='AM9PTG21' where id=7; -update noar ti set b1='AM9PTG21' where id=7; -update noar tt set v0='OJXW7YO' where id=7; -update noar ti set v0='OJXW7YO' where id=7; -update noar tt set b2='IYBAI4Z2A' where id=7; -update noar ti set b2='IYBAI4Z2A' where id=7; -update noar tt set v0='ADSI8OELHE0ZZEA3Z' where id=8; -update noar ti set v0='ADSI8OELHE0ZZEA3Z' where id=8; -update noar tt set b0='F9DRCG5NCCTY1NAYHKV6W' where id=8; -update noar ti set b0='F9DRCG5NCCTY1NAYHKV6W' where id=8; -update noar tt set v0='90DG6AA' where id=8; -update noar ti set v0='90DG6AA' where id=8; -update noar tt set b1='S4' where id=8; -update noar ti set b1='S4' where id=8; -update noar tt set v0='KRKT17T019AUOG6API6OI0G8' where id=8; -update noar ti set v0='KRKT17T019AUOG6API6OI0G8' where id=8; -update noar tt set b2='SKLLY80VXK' where id=8; -update noar ti set b2='SKLLY80VXK' where id=8; -update noar tt set v0='P9QLBX' where id=9; -update noar ti set v0='P9QLBX' where id=9; -update noar tt set b0='1R3CPMX0OWEWT' where id=9; -update noar ti set b0='1R3CPMX0OWEWT' where id=9; -update noar tt set v0='IF0RM8UN9F6W09SC6B' where id=9; -update noar ti set v0='IF0RM8UN9F6W09SC6B' where id=9; -update noar tt set b1='ZKF5F092H183FKWWS9TP' where id=9; -update noar ti set b1='ZKF5F092H183FKWWS9TP' where id=9; -update noar tt set v0='MZR4BSRH7WV8DQ0' where id=9; -update noar ti set v0='MZR4BSRH7WV8DQ0' where id=9; -update noar tt set b2='FEDLU4D2MJ' where id=9; -update noar ti set b2='FEDLU4D2MJ' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 mediumblob not null, -b1 mediumblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='L3786MH907' where id=1; -update noar ti set v0='L3786MH907' where id=1; -update noar tt set b0='ELM3TRETS5A3WB51' where id=1; -update noar ti set b0='ELM3TRETS5A3WB51' where id=1; -update noar tt set v0='FLL1KAJZCYTD8OXO4V36H' where id=1; -update noar ti set v0='FLL1KAJZCYTD8OXO4V36H' where id=1; -update noar tt set b1='ITRUL57EP0F1YKXG2' where id=1; -update noar ti set b1='ITRUL57EP0F1YKXG2' where id=1; -update noar tt set v0='JTKPMPBR892ATZPJDO4OMWFT5W73' where id=1; -update noar ti set v0='JTKPMPBR892ATZPJDO4OMWFT5W73' where id=1; -update noar tt set b2='ZMJB82G8NDDHADDKU0LXQ2G8LJ5FDLYD' where id=1; -update noar ti set b2='ZMJB82G8NDDHADDKU0LXQ2G8LJ5FDLYD' where id=1; -update noar tt set v0='O' where id=2; -update noar ti set v0='O' where id=2; -update noar tt set b0='HCC6S' where id=2; -update noar ti set b0='HCC6S' where id=2; -update noar tt set v0='68GFRE9UBAUQRD916IKNDTZJMSSWO' where id=2; -update noar ti set v0='68GFRE9UBAUQRD916IKNDTZJMSSWO' where id=2; -update noar tt set b1='JHOL81FW3UIBEP97I78BZJ8WCAPI2P' where id=2; -update noar ti set b1='JHOL81FW3UIBEP97I78BZJ8WCAPI2P' where id=2; -update noar tt set v0='1JOA0R7LQJWD16TA' where id=2; -update noar ti set v0='1JOA0R7LQJWD16TA' where id=2; -update noar tt set b2='L' where id=2; -update noar ti set b2='L' where id=2; -update noar tt set v0='CEO0C0ONVN7Y4R2H07C4WKOZ' where id=3; -update noar ti set v0='CEO0C0ONVN7Y4R2H07C4WKOZ' where id=3; -update noar tt set b0='L6ZFC55BTWBSSDI2ZJ7LPJ1NO' where id=3; -update noar ti set b0='L6ZFC55BTWBSSDI2ZJ7LPJ1NO' where id=3; -update noar tt set v0='384WA1Z' where id=3; -update noar ti set v0='384WA1Z' where id=3; -update noar tt set b1='D9DOWXS4GXUX' where id=3; -update noar ti set b1='D9DOWXS4GXUX' where id=3; -update noar tt set v0='FGDTBLBH01EFII9OHGY' where id=3; -update noar ti set v0='FGDTBLBH01EFII9OHGY' where id=3; -update noar tt set b2='YZKYP33HYHXCOD' where id=3; -update noar ti set b2='YZKYP33HYHXCOD' where id=3; -update noar tt set v0='CU25C0' where id=4; -update noar ti set v0='CU25C0' where id=4; -update noar tt set b0='S7W3' where id=4; -update noar ti set b0='S7W3' where id=4; -update noar tt set v0='D' where id=4; -update noar ti set v0='D' where id=4; -update noar tt set b1='TYXENYDW6AVV7D7J' where id=4; -update noar ti set b1='TYXENYDW6AVV7D7J' where id=4; -update noar tt set v0='1HXHMOE25536SM7ML5H90795M3R' where id=4; -update noar ti set v0='1HXHMOE25536SM7ML5H90795M3R' where id=4; -update noar tt set b2='CLC0UPD' where id=4; -update noar ti set b2='CLC0UPD' where id=4; -update noar tt set v0='3X3I49A' where id=5; -update noar ti set v0='3X3I49A' where id=5; -update noar tt set b0='182KDM1W7YFBMFX9OMQW5PVS44IJP' where id=5; -update noar ti set b0='182KDM1W7YFBMFX9OMQW5PVS44IJP' where id=5; -update noar tt set v0='ZRIFAY71HPNDJGEFCQ2R4B9K' where id=5; -update noar ti set v0='ZRIFAY71HPNDJGEFCQ2R4B9K' where id=5; -update noar tt set b1='CJ' where id=5; -update noar ti set b1='CJ' where id=5; -update noar tt set v0='6GXY89738LQVIPB' where id=5; -update noar ti set v0='6GXY89738LQVIPB' where id=5; -update noar tt set b2='YT8TARP0SO3I9PRJS5OM4T7' where id=5; -update noar ti set b2='YT8TARP0SO3I9PRJS5OM4T7' where id=5; -update noar tt set v0='GEVUT9EVTCUHZI5BFJGWA' where id=6; -update noar ti set v0='GEVUT9EVTCUHZI5BFJGWA' where id=6; -update noar tt set b0='ZQ8S0KDGFKNT0ZNOJF' where id=6; -update noar ti set b0='ZQ8S0KDGFKNT0ZNOJF' where id=6; -update noar tt set v0='4P2ZDD9HXE1AECQB58G9HCW1KPKDMR' where id=6; -update noar ti set v0='4P2ZDD9HXE1AECQB58G9HCW1KPKDMR' where id=6; -update noar tt set b1='WBCZFSOJRG' where id=6; -update noar ti set b1='WBCZFSOJRG' where id=6; -update noar tt set v0='2ZZ' where id=6; -update noar ti set v0='2ZZ' where id=6; -update noar tt set b2='XSWQTGNK0SWMOOIBYQA1BJ' where id=6; -update noar ti set b2='XSWQTGNK0SWMOOIBYQA1BJ' where id=6; -update noar tt set v0='LRBQWRQHDY' where id=7; -update noar ti set v0='LRBQWRQHDY' where id=7; -update noar tt set b0='EBK6PH6RTVLGLTXFEMI' where id=7; -update noar ti set b0='EBK6PH6RTVLGLTXFEMI' where id=7; -update noar tt set v0='XPP5MOW6BHOK6' where id=7; -update noar ti set v0='XPP5MOW6BHOK6' where id=7; -update noar tt set b1='ZERGFQPI8QLUZ4QT3OI' where id=7; -update noar ti set b1='ZERGFQPI8QLUZ4QT3OI' where id=7; -update noar tt set v0='HHTTJCFXF9LRKK427LR15CHNFIGG4ST9' where id=7; -update noar ti set v0='HHTTJCFXF9LRKK427LR15CHNFIGG4ST9' where id=7; -update noar tt set b2='BX7I' where id=7; -update noar ti set b2='BX7I' where id=7; -update noar tt set v0='3KD' where id=8; -update noar ti set v0='3KD' where id=8; -update noar tt set b0='NE' where id=8; -update noar ti set b0='NE' where id=8; -update noar tt set v0='V2XUXEHY0RDT' where id=8; -update noar ti set v0='V2XUXEHY0RDT' where id=8; -update noar tt set b1='45AU94G24WIBAOZ094' where id=8; -update noar ti set b1='45AU94G24WIBAOZ094' where id=8; -update noar tt set v0='7S2NUS' where id=8; -update noar ti set v0='7S2NUS' where id=8; -update noar tt set b2='L0PUWZ6D7MQYI8C' where id=8; -update noar ti set b2='L0PUWZ6D7MQYI8C' where id=8; -update noar tt set v0='JKBZIFRJVD' where id=9; -update noar ti set v0='JKBZIFRJVD' where id=9; -update noar tt set b0='XCO3MNFHZV9FY1B88T2TG9M24' where id=9; -update noar ti set b0='XCO3MNFHZV9FY1B88T2TG9M24' where id=9; -update noar tt set v0='CPP0L5Z4DUABBHQ3BLH062D8U09VL7VY' where id=9; -update noar ti set v0='CPP0L5Z4DUABBHQ3BLH062D8U09VL7VY' where id=9; -update noar tt set b1='ZFQOVAF0JCJCX258O3T9OJM5KLOG4' where id=9; -update noar ti set b1='ZFQOVAF0JCJCX258O3T9OJM5KLOG4' where id=9; -update noar tt set v0='A7YP9BPP8G4B7CSSBWLB5CSS3JW' where id=9; -update noar ti set v0='A7YP9BPP8G4B7CSSBWLB5CSS3JW' where id=9; -update noar tt set b2='2UI7LHK6M7DMW' where id=9; -update noar ti set b2='2UI7LHK6M7DMW' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 mediumblob not null, -b1 mediumblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='7UI8H45MAL' where id=1; -update noar ti set v0='7UI8H45MAL' where id=1; -update noar tt set b0='G4PAQOVFVMEL4ML0YPJACR' where id=1; -update noar ti set b0='G4PAQOVFVMEL4ML0YPJACR' where id=1; -update noar tt set v0='QZMRKBIXXHBUSTIMAB4R' where id=1; -update noar ti set v0='QZMRKBIXXHBUSTIMAB4R' where id=1; -update noar tt set b1='2Q3YFFK9IO9PUM3OZW7UPQFTFAO' where id=1; -update noar ti set b1='2Q3YFFK9IO9PUM3OZW7UPQFTFAO' where id=1; -update noar tt set v0='O3WKCFM97Q2KUR3KW' where id=1; -update noar ti set v0='O3WKCFM97Q2KUR3KW' where id=1; -update noar tt set b2='NJEQ588SH2' where id=1; -update noar ti set b2='NJEQ588SH2' where id=1; -update noar tt set v0='U8' where id=2; -update noar ti set v0='U8' where id=2; -update noar tt set b0='P' where id=2; -update noar ti set b0='P' where id=2; -update noar tt set v0='0FV4X6UJUEC8M2O7K97MO5IWZAEHJ5RP' where id=2; -update noar ti set v0='0FV4X6UJUEC8M2O7K97MO5IWZAEHJ5RP' where id=2; -update noar tt set b1='EE3JI8AB0XMPRHL2C379KINBNKK42' where id=2; -update noar ti set b1='EE3JI8AB0XMPRHL2C379KINBNKK42' where id=2; -update noar tt set v0='PE1I1GLH' where id=2; -update noar ti set v0='PE1I1GLH' where id=2; -update noar tt set b2='C7FLW6QEWSG3OZLR4AQCFH5' where id=2; -update noar ti set b2='C7FLW6QEWSG3OZLR4AQCFH5' where id=2; -update noar tt set v0='5JLCCYX5A8A9VMV5UOJSYC1CHZY91JJ' where id=3; -update noar ti set v0='5JLCCYX5A8A9VMV5UOJSYC1CHZY91JJ' where id=3; -update noar tt set b0='XA90N1LVOBLSB4QK8V8B3B0KYC' where id=3; -update noar ti set b0='XA90N1LVOBLSB4QK8V8B3B0KYC' where id=3; -update noar tt set v0='YN90JBF8ILLG0B9ZN8OUM9YK9C' where id=3; -update noar ti set v0='YN90JBF8ILLG0B9ZN8OUM9YK9C' where id=3; -update noar tt set b1='4CESH6YP0Q1XYPIRDIF5CT' where id=3; -update noar ti set b1='4CESH6YP0Q1XYPIRDIF5CT' where id=3; -update noar tt set v0='JU' where id=3; -update noar ti set v0='JU' where id=3; -update noar tt set b2='KD2Q2RA8P61VD0' where id=3; -update noar ti set b2='KD2Q2RA8P61VD0' where id=3; -update noar tt set v0='5I6TPP3QDZ073' where id=4; -update noar ti set v0='5I6TPP3QDZ073' where id=4; -update noar tt set b0='YHQV33RT' where id=4; -update noar ti set b0='YHQV33RT' where id=4; -update noar tt set v0='SBHQEHGXWKEP27SJ9YHEABY2Z7B4LD' where id=4; -update noar ti set v0='SBHQEHGXWKEP27SJ9YHEABY2Z7B4LD' where id=4; -update noar tt set b1='GXNDFSV704RLWWNMX' where id=4; -update noar ti set b1='GXNDFSV704RLWWNMX' where id=4; -update noar tt set v0='QRD3A8RF2WMVE6OGFSPVV3' where id=4; -update noar ti set v0='QRD3A8RF2WMVE6OGFSPVV3' where id=4; -update noar tt set b2='OU4BEL6503YEHP9ZXHGSFFM2R' where id=4; -update noar ti set b2='OU4BEL6503YEHP9ZXHGSFFM2R' where id=4; -update noar tt set v0='DGR4JEFCGTYBINPY6YER1FU4CNXH4R28' where id=5; -update noar ti set v0='DGR4JEFCGTYBINPY6YER1FU4CNXH4R28' where id=5; -update noar tt set b0='65STS' where id=5; -update noar ti set b0='65STS' where id=5; -update noar tt set v0='OI12XC' where id=5; -update noar ti set v0='OI12XC' where id=5; -update noar tt set b1='BJ0GGPQ1YR4RLM2WYH3MM' where id=5; -update noar ti set b1='BJ0GGPQ1YR4RLM2WYH3MM' where id=5; -update noar tt set v0='J15HK0J' where id=5; -update noar ti set v0='J15HK0J' where id=5; -update noar tt set b2='X444IUUYL20KVSFNF59KSJ7' where id=5; -update noar ti set b2='X444IUUYL20KVSFNF59KSJ7' where id=5; -update noar tt set v0='0FU57N2HAZ9PBBH95Y' where id=6; -update noar ti set v0='0FU57N2HAZ9PBBH95Y' where id=6; -update noar tt set b0='BSURJ' where id=6; -update noar ti set b0='BSURJ' where id=6; -update noar tt set v0='UXCOXLDA228F57LOXRJROIMPD0T' where id=6; -update noar ti set v0='UXCOXLDA228F57LOXRJROIMPD0T' where id=6; -update noar tt set b1='YAO7U2CE509TYQ6' where id=6; -update noar ti set b1='YAO7U2CE509TYQ6' where id=6; -update noar tt set v0='E20M43XH587DZP50RJ3RW9X8ZR' where id=6; -update noar ti set v0='E20M43XH587DZP50RJ3RW9X8ZR' where id=6; -update noar tt set b2='FVTWUXIDKTR' where id=6; -update noar ti set b2='FVTWUXIDKTR' where id=6; -update noar tt set v0='E8IGQ5MJNTOAL3K9W' where id=7; -update noar ti set v0='E8IGQ5MJNTOAL3K9W' where id=7; -update noar tt set b0='79OY0PO2IDUFV1A1ONIYZ' where id=7; -update noar ti set b0='79OY0PO2IDUFV1A1ONIYZ' where id=7; -update noar tt set v0='L56LU4N9HT6Y8ZSADTELH' where id=7; -update noar ti set v0='L56LU4N9HT6Y8ZSADTELH' where id=7; -update noar tt set b1='5GR3SWUP7FAGZ19' where id=7; -update noar ti set b1='5GR3SWUP7FAGZ19' where id=7; -update noar tt set v0='ZD6O7257J4YV9I2WXZJBI9UN5RR4MLDA' where id=7; -update noar ti set v0='ZD6O7257J4YV9I2WXZJBI9UN5RR4MLDA' where id=7; -update noar tt set b2='TL4D0' where id=7; -update noar ti set b2='TL4D0' where id=7; -update noar tt set v0='LM1XXEO9G4K3X' where id=8; -update noar ti set v0='LM1XXEO9G4K3X' where id=8; -update noar tt set b0='SOQCLCWYKOR816LKAXUF' where id=8; -update noar ti set b0='SOQCLCWYKOR816LKAXUF' where id=8; -update noar tt set v0='UQF34P681HP8U' where id=8; -update noar ti set v0='UQF34P681HP8U' where id=8; -update noar tt set b1='R85VS7GPW43Q5UA' where id=8; -update noar ti set b1='R85VS7GPW43Q5UA' where id=8; -update noar tt set v0='Y3KUWQSIKOB03N2ZP' where id=8; -update noar ti set v0='Y3KUWQSIKOB03N2ZP' where id=8; -update noar tt set b2='5EUYI' where id=8; -update noar ti set b2='5EUYI' where id=8; -update noar tt set v0='JSMVXK14H76UFBI6EYB' where id=9; -update noar ti set v0='JSMVXK14H76UFBI6EYB' where id=9; -update noar tt set b0='K4WMX2VEUG6ABQRHYPOB8JAB14CVTGTI' where id=9; -update noar ti set b0='K4WMX2VEUG6ABQRHYPOB8JAB14CVTGTI' where id=9; -update noar tt set v0='M12IP' where id=9; -update noar ti set v0='M12IP' where id=9; -update noar tt set b1='69KI7EBRU07OBB4' where id=9; -update noar ti set b1='69KI7EBRU07OBB4' where id=9; -update noar tt set v0='MSLVNY1P' where id=9; -update noar ti set v0='MSLVNY1P' where id=9; -update noar tt set b2='DF0G6147Q' where id=9; -update noar ti set b2='DF0G6147Q' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 mediumblob null, -b1 longblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='JP5IX5RT' where id=1; -update noar ti set v0='JP5IX5RT' where id=1; -update noar tt set b0='GL2KM353S3JM' where id=1; -update noar ti set b0='GL2KM353S3JM' where id=1; -update noar tt set v0='LP6V6829A7DQBCN54FVDOTUU4FOT' where id=1; -update noar ti set v0='LP6V6829A7DQBCN54FVDOTUU4FOT' where id=1; -update noar tt set b1='2C9CTSB848Y28Q' where id=1; -update noar ti set b1='2C9CTSB848Y28Q' where id=1; -update noar tt set v0='MBWR' where id=1; -update noar ti set v0='MBWR' where id=1; -update noar tt set b2='2H55I6A96NKWRLOEWPJDD3D1DWQZ245A' where id=1; -update noar ti set b2='2H55I6A96NKWRLOEWPJDD3D1DWQZ245A' where id=1; -update noar tt set v0='LDLHJHS5CHSHJRK1RX6X6FO18RNH9' where id=2; -update noar ti set v0='LDLHJHS5CHSHJRK1RX6X6FO18RNH9' where id=2; -update noar tt set b0='FHQJ9GG3XU3' where id=2; -update noar ti set b0='FHQJ9GG3XU3' where id=2; -update noar tt set v0='VJH8RULNDDF8410M63CM' where id=2; -update noar ti set v0='VJH8RULNDDF8410M63CM' where id=2; -update noar tt set b1='J000R67' where id=2; -update noar ti set b1='J000R67' where id=2; -update noar tt set v0='1LDUF7QE0G3NWKPXEE7M1VETTFD2HQG3' where id=2; -update noar ti set v0='1LDUF7QE0G3NWKPXEE7M1VETTFD2HQG3' where id=2; -update noar tt set b2='QCQBC5V2' where id=2; -update noar ti set b2='QCQBC5V2' where id=2; -update noar tt set v0='Z4NKOQ93XNOO' where id=3; -update noar ti set v0='Z4NKOQ93XNOO' where id=3; -update noar tt set b0='XRO0KWQG4MKMIH7K18RJSPO5' where id=3; -update noar ti set b0='XRO0KWQG4MKMIH7K18RJSPO5' where id=3; -update noar tt set v0='88ASAHP5T69QZDZ7NUMI2S1BAC5' where id=3; -update noar ti set v0='88ASAHP5T69QZDZ7NUMI2S1BAC5' where id=3; -update noar tt set b1='EG0ANJ' where id=3; -update noar ti set b1='EG0ANJ' where id=3; -update noar tt set v0='1Q3DW' where id=3; -update noar ti set v0='1Q3DW' where id=3; -update noar tt set b2='BOEAQ55' where id=3; -update noar ti set b2='BOEAQ55' where id=3; -update noar tt set v0='6Z9D80JJP6PQ3YID3SMT6FN' where id=4; -update noar ti set v0='6Z9D80JJP6PQ3YID3SMT6FN' where id=4; -update noar tt set b0='T4KF02MKP9B9HG78WWSY' where id=4; -update noar ti set b0='T4KF02MKP9B9HG78WWSY' where id=4; -update noar tt set v0='QLETB3KLFX3YXUQ435YZEV08P' where id=4; -update noar ti set v0='QLETB3KLFX3YXUQ435YZEV08P' where id=4; -update noar tt set b1='FQVJ' where id=4; -update noar ti set b1='FQVJ' where id=4; -update noar tt set v0='V50EOPCIDXB173KR1Y4B04' where id=4; -update noar ti set v0='V50EOPCIDXB173KR1Y4B04' where id=4; -update noar tt set b2='UWK6GIHO' where id=4; -update noar ti set b2='UWK6GIHO' where id=4; -update noar tt set v0='8F2YGNC2VT09C205IQHZ' where id=5; -update noar ti set v0='8F2YGNC2VT09C205IQHZ' where id=5; -update noar tt set b0='14UU385CBB5J5WNHCKFW9T57' where id=5; -update noar ti set b0='14UU385CBB5J5WNHCKFW9T57' where id=5; -update noar tt set v0='5G2G4JFJ5' where id=5; -update noar ti set v0='5G2G4JFJ5' where id=5; -update noar tt set b1='WKKGXC1BSCKEFLFM798' where id=5; -update noar ti set b1='WKKGXC1BSCKEFLFM798' where id=5; -update noar tt set v0='A6U4YOJGG502FDQWKDW79UR6ACUO9' where id=5; -update noar ti set v0='A6U4YOJGG502FDQWKDW79UR6ACUO9' where id=5; -update noar tt set b2='0ME' where id=5; -update noar ti set b2='0ME' where id=5; -update noar tt set v0='G8VSPSLFMMP' where id=6; -update noar ti set v0='G8VSPSLFMMP' where id=6; -update noar tt set b0='K4VSH7AYZW2LZD5IOUWLA' where id=6; -update noar ti set b0='K4VSH7AYZW2LZD5IOUWLA' where id=6; -update noar tt set v0='I' where id=6; -update noar ti set v0='I' where id=6; -update noar tt set b1='4ET' where id=6; -update noar ti set b1='4ET' where id=6; -update noar tt set v0='D9X3P0F' where id=6; -update noar ti set v0='D9X3P0F' where id=6; -update noar tt set b2='2DONXTISK6Q9JMZQJEK' where id=6; -update noar ti set b2='2DONXTISK6Q9JMZQJEK' where id=6; -update noar tt set v0='WMOOA1T17C' where id=7; -update noar ti set v0='WMOOA1T17C' where id=7; -update noar tt set b0='RJ7VQM2XHRH5GGSZ14X' where id=7; -update noar ti set b0='RJ7VQM2XHRH5GGSZ14X' where id=7; -update noar tt set v0='LUP2EGMAQN7N6L10DWPW9U1F1C30LHTX' where id=7; -update noar ti set v0='LUP2EGMAQN7N6L10DWPW9U1F1C30LHTX' where id=7; -update noar tt set b1='BQ761IADLQ' where id=7; -update noar ti set b1='BQ761IADLQ' where id=7; -update noar tt set v0='77V5O02406SVD6WZNVD3BAU7Q5TKJWI' where id=7; -update noar ti set v0='77V5O02406SVD6WZNVD3BAU7Q5TKJWI' where id=7; -update noar tt set b2='FOZ98Q8MV24SMIBFJXKHPT6OBDG6M' where id=7; -update noar ti set b2='FOZ98Q8MV24SMIBFJXKHPT6OBDG6M' where id=7; -update noar tt set v0='51BD5QBO1UMR66KETIJUNZJ18B6' where id=8; -update noar ti set v0='51BD5QBO1UMR66KETIJUNZJ18B6' where id=8; -update noar tt set b0='98Q7U1ONG45AX64TDW' where id=8; -update noar ti set b0='98Q7U1ONG45AX64TDW' where id=8; -update noar tt set v0='S6MZ2BEI1DJ07KX0I99OXSVKP' where id=8; -update noar ti set v0='S6MZ2BEI1DJ07KX0I99OXSVKP' where id=8; -update noar tt set b1='VD7Q66H5J' where id=8; -update noar ti set b1='VD7Q66H5J' where id=8; -update noar tt set v0='IHA0PY656CXUZIKY89P2L' where id=8; -update noar ti set v0='IHA0PY656CXUZIKY89P2L' where id=8; -update noar tt set b2='J28Q2XKHVH8FV' where id=8; -update noar ti set b2='J28Q2XKHVH8FV' where id=8; -update noar tt set v0='LEYNEDV76' where id=9; -update noar ti set v0='LEYNEDV76' where id=9; -update noar tt set b0='XU7Z69QFAVTNWZZLFGZMQSANXL8YCO4K' where id=9; -update noar ti set b0='XU7Z69QFAVTNWZZLFGZMQSANXL8YCO4K' where id=9; -update noar tt set v0='A5B2X92O7HZZJDF6R1CM' where id=9; -update noar ti set v0='A5B2X92O7HZZJDF6R1CM' where id=9; -update noar tt set b1='0PLM3L77B0U' where id=9; -update noar ti set b1='0PLM3L77B0U' where id=9; -update noar tt set v0='0GH8Q1OWIAEXFMB' where id=9; -update noar ti set v0='0GH8Q1OWIAEXFMB' where id=9; -update noar tt set b2='HWGRL1' where id=9; -update noar ti set b2='HWGRL1' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 mediumblob null, -b1 longblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='0TURS17FE5HOHL0910GJNK0BXRF43' where id=1; -update noar ti set v0='0TURS17FE5HOHL0910GJNK0BXRF43' where id=1; -update noar tt set b0='KQ3FO2WGG' where id=1; -update noar ti set b0='KQ3FO2WGG' where id=1; -update noar tt set v0='XAD0' where id=1; -update noar ti set v0='XAD0' where id=1; -update noar tt set b1='RKMCRDYXH4I' where id=1; -update noar ti set b1='RKMCRDYXH4I' where id=1; -update noar tt set v0='6FVVD15FDZOGYR' where id=1; -update noar ti set v0='6FVVD15FDZOGYR' where id=1; -update noar tt set b2='D6O5GODMWS2YH5' where id=1; -update noar ti set b2='D6O5GODMWS2YH5' where id=1; -update noar tt set v0='WEAI5QA340HL4ACQS9NU2OS4KZH3B' where id=2; -update noar ti set v0='WEAI5QA340HL4ACQS9NU2OS4KZH3B' where id=2; -update noar tt set b0='HNKI' where id=2; -update noar ti set b0='HNKI' where id=2; -update noar tt set v0='JYFVMPCCHQ2VQ4US25KHCFE67RVS' where id=2; -update noar ti set v0='JYFVMPCCHQ2VQ4US25KHCFE67RVS' where id=2; -update noar tt set b1='G3DH0L8WM5N7O6JS8DK6WD2' where id=2; -update noar ti set b1='G3DH0L8WM5N7O6JS8DK6WD2' where id=2; -update noar tt set v0='0PZ2OD2TL' where id=2; -update noar ti set v0='0PZ2OD2TL' where id=2; -update noar tt set b2='ZID7IEW694L2MLNJW7FIK' where id=2; -update noar ti set b2='ZID7IEW694L2MLNJW7FIK' where id=2; -update noar tt set v0='HEKPIJAUY05TLI8' where id=3; -update noar ti set v0='HEKPIJAUY05TLI8' where id=3; -update noar tt set b0='U2O8HDHI6XX2X' where id=3; -update noar ti set b0='U2O8HDHI6XX2X' where id=3; -update noar tt set v0='3S81VCBDLYO2LRBIQIV' where id=3; -update noar ti set v0='3S81VCBDLYO2LRBIQIV' where id=3; -update noar tt set b1='QF8PB' where id=3; -update noar ti set b1='QF8PB' where id=3; -update noar tt set v0='QYOPPHVBO2N4YMLI7GL3Y0S' where id=3; -update noar ti set v0='QYOPPHVBO2N4YMLI7GL3Y0S' where id=3; -update noar tt set b2='0WMAJ2ND2V6EPRUPHUMLYE9V84A1' where id=3; -update noar ti set b2='0WMAJ2ND2V6EPRUPHUMLYE9V84A1' where id=3; -update noar tt set v0='8FB98OQOE03L79WMB8NTOOFYXVVKXM' where id=4; -update noar ti set v0='8FB98OQOE03L79WMB8NTOOFYXVVKXM' where id=4; -update noar tt set b0='71BIBM6' where id=4; -update noar ti set b0='71BIBM6' where id=4; -update noar tt set v0='7VUXS6DXVCQZVN' where id=4; -update noar ti set v0='7VUXS6DXVCQZVN' where id=4; -update noar tt set b1='3S' where id=4; -update noar ti set b1='3S' where id=4; -update noar tt set v0='LEX9UT9ADQ30' where id=4; -update noar ti set v0='LEX9UT9ADQ30' where id=4; -update noar tt set b2='GPTAG3WZKCN2TE68G4CGRQK1' where id=4; -update noar ti set b2='GPTAG3WZKCN2TE68G4CGRQK1' where id=4; -update noar tt set v0='7AO2KDM9JGJXNN6QKXG6M0927CKZ' where id=5; -update noar ti set v0='7AO2KDM9JGJXNN6QKXG6M0927CKZ' where id=5; -update noar tt set b0='NKCL6M1M1JA1MSU9W' where id=5; -update noar ti set b0='NKCL6M1M1JA1MSU9W' where id=5; -update noar tt set v0='2MZ4Q2D2F62T8963DY' where id=5; -update noar ti set v0='2MZ4Q2D2F62T8963DY' where id=5; -update noar tt set b1='ERPYPX8Q1I0ZEPUV6BPOPRD' where id=5; -update noar ti set b1='ERPYPX8Q1I0ZEPUV6BPOPRD' where id=5; -update noar tt set v0='CL' where id=5; -update noar ti set v0='CL' where id=5; -update noar tt set b2='B3XQZTMGA4OFNQKQDX' where id=5; -update noar ti set b2='B3XQZTMGA4OFNQKQDX' where id=5; -update noar tt set v0='K6A' where id=6; -update noar ti set v0='K6A' where id=6; -update noar tt set b0='F8UYPZBG6SQNU7H' where id=6; -update noar ti set b0='F8UYPZBG6SQNU7H' where id=6; -update noar tt set v0='OFE5UOY7FNGWCFU' where id=6; -update noar ti set v0='OFE5UOY7FNGWCFU' where id=6; -update noar tt set b1='EEXRH7UA6HHUGL362M18955SAQG' where id=6; -update noar ti set b1='EEXRH7UA6HHUGL362M18955SAQG' where id=6; -update noar tt set v0='20KKMOSA95B0PWJ2LZJ3M1' where id=6; -update noar ti set v0='20KKMOSA95B0PWJ2LZJ3M1' where id=6; -update noar tt set b2='2' where id=6; -update noar ti set b2='2' where id=6; -update noar tt set v0='4HCH4C' where id=7; -update noar ti set v0='4HCH4C' where id=7; -update noar tt set b0='E9O2UHBK9T26' where id=7; -update noar ti set b0='E9O2UHBK9T26' where id=7; -update noar tt set v0='84UEIK0BXP88TXOWK7A6PXR06KK045' where id=7; -update noar ti set v0='84UEIK0BXP88TXOWK7A6PXR06KK045' where id=7; -update noar tt set b1='TS9XWJ' where id=7; -update noar ti set b1='TS9XWJ' where id=7; -update noar tt set v0='BQAO' where id=7; -update noar ti set v0='BQAO' where id=7; -update noar tt set b2='905814Z5HRXZTMH7' where id=7; -update noar ti set b2='905814Z5HRXZTMH7' where id=7; -update noar tt set v0='AIU5F' where id=8; -update noar ti set v0='AIU5F' where id=8; -update noar tt set b0='VDIV03TLS6XT4YHCNH' where id=8; -update noar ti set b0='VDIV03TLS6XT4YHCNH' where id=8; -update noar tt set v0='M7NBRZDJOYC6' where id=8; -update noar ti set v0='M7NBRZDJOYC6' where id=8; -update noar tt set b1='05WN5YTXG0MZCT1F0H1S' where id=8; -update noar ti set b1='05WN5YTXG0MZCT1F0H1S' where id=8; -update noar tt set v0='0W5R' where id=8; -update noar ti set v0='0W5R' where id=8; -update noar tt set b2='ZBQOHJDSBPMU8C' where id=8; -update noar ti set b2='ZBQOHJDSBPMU8C' where id=8; -update noar tt set v0='Q5XTRDH1VY8NWWWQQ0EN' where id=9; -update noar ti set v0='Q5XTRDH1VY8NWWWQQ0EN' where id=9; -update noar tt set b0='JTLU5TWH6EZSMDCAGT714S2VEYOG' where id=9; -update noar ti set b0='JTLU5TWH6EZSMDCAGT714S2VEYOG' where id=9; -update noar tt set v0='4DPR38ZC3RZL0PVYS8VI0' where id=9; -update noar ti set v0='4DPR38ZC3RZL0PVYS8VI0' where id=9; -update noar tt set b1='215W02YRZ2ROUSYHJIJA8L7P69X3QT' where id=9; -update noar ti set b1='215W02YRZ2ROUSYHJIJA8L7P69X3QT' where id=9; -update noar tt set v0='BRPX6FDQOG2ZOP' where id=9; -update noar ti set v0='BRPX6FDQOG2ZOP' where id=9; -update noar tt set b2='22QVEES0BNXQM2OSMR5W' where id=9; -update noar ti set b2='22QVEES0BNXQM2OSMR5W' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 mediumblob not null, -b1 longblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='ZYERXU6INJW20WFA62VN' where id=1; -update noar ti set v0='ZYERXU6INJW20WFA62VN' where id=1; -update noar tt set b0='RV7KGDD9S2M2IGK8F' where id=1; -update noar ti set b0='RV7KGDD9S2M2IGK8F' where id=1; -update noar tt set v0='CO4G2H8LMZQR7OKTU' where id=1; -update noar ti set v0='CO4G2H8LMZQR7OKTU' where id=1; -update noar tt set b1='MA5V8S' where id=1; -update noar ti set b1='MA5V8S' where id=1; -update noar tt set v0='BPSN98AFN8KNO102Q0JHZVKVY' where id=1; -update noar ti set v0='BPSN98AFN8KNO102Q0JHZVKVY' where id=1; -update noar tt set b2='V1IR2WXBATIESLZ4YXEB4' where id=1; -update noar ti set b2='V1IR2WXBATIESLZ4YXEB4' where id=1; -update noar tt set v0='67NYKR0HOJWDVK36XJZYYFWKLD' where id=2; -update noar ti set v0='67NYKR0HOJWDVK36XJZYYFWKLD' where id=2; -update noar tt set b0='8D3E10QXTG7ZOVEWKOUQ' where id=2; -update noar ti set b0='8D3E10QXTG7ZOVEWKOUQ' where id=2; -update noar tt set v0='GHRB86F0LVXW36P5K0UYKUW6WCC3EZ' where id=2; -update noar ti set v0='GHRB86F0LVXW36P5K0UYKUW6WCC3EZ' where id=2; -update noar tt set b1='BZ7EDAML309TQHYKJ9UN9RCB3KW' where id=2; -update noar ti set b1='BZ7EDAML309TQHYKJ9UN9RCB3KW' where id=2; -update noar tt set v0='SUV258PB59VYM1TI0X7LTLT' where id=2; -update noar ti set v0='SUV258PB59VYM1TI0X7LTLT' where id=2; -update noar tt set b2='FPIWS8J27ZALNI2WWTMJCZKG0ADYVHN' where id=2; -update noar ti set b2='FPIWS8J27ZALNI2WWTMJCZKG0ADYVHN' where id=2; -update noar tt set v0='RJJFJD' where id=3; -update noar ti set v0='RJJFJD' where id=3; -update noar tt set b0='9ZL18ZR9' where id=3; -update noar ti set b0='9ZL18ZR9' where id=3; -update noar tt set v0='A0NZTU7R9UBQ92YFVC6IT2WN' where id=3; -update noar ti set v0='A0NZTU7R9UBQ92YFVC6IT2WN' where id=3; -update noar tt set b1='G9T3T0LX8GF94O2BY944BL' where id=3; -update noar ti set b1='G9T3T0LX8GF94O2BY944BL' where id=3; -update noar tt set v0='HC5CUZ1GUF87O7QW79H' where id=3; -update noar ti set v0='HC5CUZ1GUF87O7QW79H' where id=3; -update noar tt set b2='SQT0PNNG8CMB4CAE' where id=3; -update noar ti set b2='SQT0PNNG8CMB4CAE' where id=3; -update noar tt set v0='KVZ799K6XJWUE3PJA9PNIBBY3DCPIJ' where id=4; -update noar ti set v0='KVZ799K6XJWUE3PJA9PNIBBY3DCPIJ' where id=4; -update noar tt set b0='5ML8O07L6A07MVAJJX7' where id=4; -update noar ti set b0='5ML8O07L6A07MVAJJX7' where id=4; -update noar tt set v0='8J5RI9X' where id=4; -update noar ti set v0='8J5RI9X' where id=4; -update noar tt set b1='X7P0JXIJUO2L5N' where id=4; -update noar ti set b1='X7P0JXIJUO2L5N' where id=4; -update noar tt set v0='TFMGYUI212MOEKKNY2S' where id=4; -update noar ti set v0='TFMGYUI212MOEKKNY2S' where id=4; -update noar tt set b2='BB5QN' where id=4; -update noar ti set b2='BB5QN' where id=4; -update noar tt set v0='JZ4COG8NAV1NGC4IY7BH7P92I3VOV75' where id=5; -update noar ti set v0='JZ4COG8NAV1NGC4IY7BH7P92I3VOV75' where id=5; -update noar tt set b0='34O3E87MHHEOOSTUOY1U49' where id=5; -update noar ti set b0='34O3E87MHHEOOSTUOY1U49' where id=5; -update noar tt set v0='9TVSNPTQ3ZA' where id=5; -update noar ti set v0='9TVSNPTQ3ZA' where id=5; -update noar tt set b1='502C8M555G9OSA5WEF3SG1YX' where id=5; -update noar ti set b1='502C8M555G9OSA5WEF3SG1YX' where id=5; -update noar tt set v0='V' where id=5; -update noar ti set v0='V' where id=5; -update noar tt set b2='G9IYEZ2SHXZ3' where id=5; -update noar ti set b2='G9IYEZ2SHXZ3' where id=5; -update noar tt set v0='S4YT2BOP' where id=6; -update noar ti set v0='S4YT2BOP' where id=6; -update noar tt set b0='MJHBD8OR3J' where id=6; -update noar ti set b0='MJHBD8OR3J' where id=6; -update noar tt set v0='TI79XH' where id=6; -update noar ti set v0='TI79XH' where id=6; -update noar tt set b1='72YWT90FD73TYJJ' where id=6; -update noar ti set b1='72YWT90FD73TYJJ' where id=6; -update noar tt set v0='EZ6FELBMYKF9UMI' where id=6; -update noar ti set v0='EZ6FELBMYKF9UMI' where id=6; -update noar tt set b2='7BB1KDGZF4U2NH9FKQI' where id=6; -update noar ti set b2='7BB1KDGZF4U2NH9FKQI' where id=6; -update noar tt set v0='1D0CKBOHZXTWL1L42R43BWOKFD6' where id=7; -update noar ti set v0='1D0CKBOHZXTWL1L42R43BWOKFD6' where id=7; -update noar tt set b0='NDLQ0AORDTB4COKB66QM5F' where id=7; -update noar ti set b0='NDLQ0AORDTB4COKB66QM5F' where id=7; -update noar tt set v0='DJT' where id=7; -update noar ti set v0='DJT' where id=7; -update noar tt set b1='469UGLLMYEXMF9RJBE43N1KVQL1' where id=7; -update noar ti set b1='469UGLLMYEXMF9RJBE43N1KVQL1' where id=7; -update noar tt set v0='MM5KATCWGLHUGOFTSFGB3R5DM087NXL' where id=7; -update noar ti set v0='MM5KATCWGLHUGOFTSFGB3R5DM087NXL' where id=7; -update noar tt set b2='C1AYYX4Y5O7VI' where id=7; -update noar ti set b2='C1AYYX4Y5O7VI' where id=7; -update noar tt set v0='PDB4OMSUJZ6HCUEYY89' where id=8; -update noar ti set v0='PDB4OMSUJZ6HCUEYY89' where id=8; -update noar tt set b0='RYL8V67U7YXTX41' where id=8; -update noar ti set b0='RYL8V67U7YXTX41' where id=8; -update noar tt set v0='RB13F' where id=8; -update noar ti set v0='RB13F' where id=8; -update noar tt set b1='P' where id=8; -update noar ti set b1='P' where id=8; -update noar tt set v0='TD3KOODUFA' where id=8; -update noar ti set v0='TD3KOODUFA' where id=8; -update noar tt set b2='95KAYL21DU1PPLHKA5GNAS' where id=8; -update noar ti set b2='95KAYL21DU1PPLHKA5GNAS' where id=8; -update noar tt set v0='BXQIYUMD2VI0IAPCFK7M' where id=9; -update noar ti set v0='BXQIYUMD2VI0IAPCFK7M' where id=9; -update noar tt set b0='U9LDRGGW50J2RJ' where id=9; -update noar ti set b0='U9LDRGGW50J2RJ' where id=9; -update noar tt set v0='DP8Q0' where id=9; -update noar ti set v0='DP8Q0' where id=9; -update noar tt set b1='WZYTKVY6HGEG' where id=9; -update noar ti set b1='WZYTKVY6HGEG' where id=9; -update noar tt set v0='YBOA86D' where id=9; -update noar ti set v0='YBOA86D' where id=9; -update noar tt set b2='8YJZ88W1KCCWZ' where id=9; -update noar ti set b2='8YJZ88W1KCCWZ' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 mediumblob not null, -b1 longblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='XPBFVE2J5K5VIWRK8Y4' where id=1; -update noar ti set v0='XPBFVE2J5K5VIWRK8Y4' where id=1; -update noar tt set b0='N884NQ45BFOGGPU76014' where id=1; -update noar ti set b0='N884NQ45BFOGGPU76014' where id=1; -update noar tt set v0='YFX62UX6WJJK3XS83C' where id=1; -update noar ti set v0='YFX62UX6WJJK3XS83C' where id=1; -update noar tt set b1='RLF1X650Q' where id=1; -update noar ti set b1='RLF1X650Q' where id=1; -update noar tt set v0='7G1JNG2H1400MS0KVFB1OPBE2WTT7P3H' where id=1; -update noar ti set v0='7G1JNG2H1400MS0KVFB1OPBE2WTT7P3H' where id=1; -update noar tt set b2='BKGVAG2CCQTF4TN0S1E94UTHTWV' where id=1; -update noar ti set b2='BKGVAG2CCQTF4TN0S1E94UTHTWV' where id=1; -update noar tt set v0='IP5KO3PJDNIZ4MGK' where id=2; -update noar ti set v0='IP5KO3PJDNIZ4MGK' where id=2; -update noar tt set b0='N' where id=2; -update noar ti set b0='N' where id=2; -update noar tt set v0='SB19QLB0CERD' where id=2; -update noar ti set v0='SB19QLB0CERD' where id=2; -update noar tt set b1='PTEY2LECD33SMPZYE' where id=2; -update noar ti set b1='PTEY2LECD33SMPZYE' where id=2; -update noar tt set v0='KMBNXEETQDH3EYN73OYNCVQWEQRU' where id=2; -update noar ti set v0='KMBNXEETQDH3EYN73OYNCVQWEQRU' where id=2; -update noar tt set b2='ECSVUJ0RNYFGX5FIYC844K62E96B' where id=2; -update noar ti set b2='ECSVUJ0RNYFGX5FIYC844K62E96B' where id=2; -update noar tt set v0='TXARXVDIOH3' where id=3; -update noar ti set v0='TXARXVDIOH3' where id=3; -update noar tt set b0='ZYH4XMDFTB8W3XW45' where id=3; -update noar ti set b0='ZYH4XMDFTB8W3XW45' where id=3; -update noar tt set v0='ZRJV5P42YJMS4UNYVXGTQAO194' where id=3; -update noar ti set v0='ZRJV5P42YJMS4UNYVXGTQAO194' where id=3; -update noar tt set b1='UBWNX4AQT8SMTCKR89LNYIL3NSLPUMS' where id=3; -update noar ti set b1='UBWNX4AQT8SMTCKR89LNYIL3NSLPUMS' where id=3; -update noar tt set v0='QELDRSGUXXDM0VDM77J0' where id=3; -update noar ti set v0='QELDRSGUXXDM0VDM77J0' where id=3; -update noar tt set b2='NZ7OB0C7A7A4F1327U407OGI4L' where id=3; -update noar ti set b2='NZ7OB0C7A7A4F1327U407OGI4L' where id=3; -update noar tt set v0='RU10G' where id=4; -update noar ti set v0='RU10G' where id=4; -update noar tt set b0='CYB5OC8O389' where id=4; -update noar ti set b0='CYB5OC8O389' where id=4; -update noar tt set v0='8AUT' where id=4; -update noar ti set v0='8AUT' where id=4; -update noar tt set b1='7F4' where id=4; -update noar ti set b1='7F4' where id=4; -update noar tt set v0='BK4GAEHWCSBHE0HNZVVUD6B1TPAW' where id=4; -update noar ti set v0='BK4GAEHWCSBHE0HNZVVUD6B1TPAW' where id=4; -update noar tt set b2='4EP9FBNG460A59WCZ2TN76U9JLHGMP' where id=4; -update noar ti set b2='4EP9FBNG460A59WCZ2TN76U9JLHGMP' where id=4; -update noar tt set v0='MRNGXR8U7553' where id=5; -update noar ti set v0='MRNGXR8U7553' where id=5; -update noar tt set b0='S3GVN2QW7DOFFODAL' where id=5; -update noar ti set b0='S3GVN2QW7DOFFODAL' where id=5; -update noar tt set v0='H4CIYCSQ4BE4H93' where id=5; -update noar ti set v0='H4CIYCSQ4BE4H93' where id=5; -update noar tt set b1='92H15VK63D54DSQYWT7GFHXD71' where id=5; -update noar ti set b1='92H15VK63D54DSQYWT7GFHXD71' where id=5; -update noar tt set v0='C8Z9S1P7VDFDXJYGHO5HP6P0Z8MNSDY' where id=5; -update noar ti set v0='C8Z9S1P7VDFDXJYGHO5HP6P0Z8MNSDY' where id=5; -update noar tt set b2='SBCXRAK3HR' where id=5; -update noar ti set b2='SBCXRAK3HR' where id=5; -update noar tt set v0='7D4PPC4DBY3PWHOCH' where id=6; -update noar ti set v0='7D4PPC4DBY3PWHOCH' where id=6; -update noar tt set b0='J4EWJZ9UC8' where id=6; -update noar ti set b0='J4EWJZ9UC8' where id=6; -update noar tt set v0='5YSDW8WQLLNMOR59D1A8UE8VMUX' where id=6; -update noar ti set v0='5YSDW8WQLLNMOR59D1A8UE8VMUX' where id=6; -update noar tt set b1='Q3XK2VMOJFTM69FQT9' where id=6; -update noar ti set b1='Q3XK2VMOJFTM69FQT9' where id=6; -update noar tt set v0='5HIR90R2QZZL' where id=6; -update noar ti set v0='5HIR90R2QZZL' where id=6; -update noar tt set b2='2B2QP7KBDQ' where id=6; -update noar ti set b2='2B2QP7KBDQ' where id=6; -update noar tt set v0='LPEHSCY1KU1GZB' where id=7; -update noar ti set v0='LPEHSCY1KU1GZB' where id=7; -update noar tt set b0='WQYIH3OL20FINXC3A3XHME0DSP8H' where id=7; -update noar ti set b0='WQYIH3OL20FINXC3A3XHME0DSP8H' where id=7; -update noar tt set v0='2HDVCF4TMZZYJ93C4TICVWC6' where id=7; -update noar ti set v0='2HDVCF4TMZZYJ93C4TICVWC6' where id=7; -update noar tt set b1='ZEMHJD3Z' where id=7; -update noar ti set b1='ZEMHJD3Z' where id=7; -update noar tt set v0='XOQ82O827EYAS2ZUS4VXHRA17KU' where id=7; -update noar ti set v0='XOQ82O827EYAS2ZUS4VXHRA17KU' where id=7; -update noar tt set b2='JA7X11TDRZFYYENVP9GFY' where id=7; -update noar ti set b2='JA7X11TDRZFYYENVP9GFY' where id=7; -update noar tt set v0='FTE09F6BDURE' where id=8; -update noar ti set v0='FTE09F6BDURE' where id=8; -update noar tt set b0='W0T696OU' where id=8; -update noar ti set b0='W0T696OU' where id=8; -update noar tt set v0='XPZ5S1N2TPL5HR1MJE3031UQXA6' where id=8; -update noar ti set v0='XPZ5S1N2TPL5HR1MJE3031UQXA6' where id=8; -update noar tt set b1='8N1IXUL8XLJ6NY9UNLELM2G4XEF9ID' where id=8; -update noar ti set b1='8N1IXUL8XLJ6NY9UNLELM2G4XEF9ID' where id=8; -update noar tt set v0='LW041SWAM03NW8FWT7RV5GIBO' where id=8; -update noar ti set v0='LW041SWAM03NW8FWT7RV5GIBO' where id=8; -update noar tt set b2='YCVB7SRDQLYNXN002N' where id=8; -update noar ti set b2='YCVB7SRDQLYNXN002N' where id=8; -update noar tt set v0='KQN82IILP3JK' where id=9; -update noar ti set v0='KQN82IILP3JK' where id=9; -update noar tt set b0='F9YM8EY9U8W0XT92U6YJTHJLGYF4NK9F' where id=9; -update noar ti set b0='F9YM8EY9U8W0XT92U6YJTHJLGYF4NK9F' where id=9; -update noar tt set v0='MDD1EV6JTLX43QINPK428Z62PE4N34S' where id=9; -update noar ti set v0='MDD1EV6JTLX43QINPK428Z62PE4N34S' where id=9; -update noar tt set b1='0PUCMC' where id=9; -update noar ti set b1='0PUCMC' where id=9; -update noar tt set v0='QL7Q63SYC5JS2SB0QW' where id=9; -update noar ti set v0='QL7Q63SYC5JS2SB0QW' where id=9; -update noar tt set b2='BWPBJYJ67E0SIG3CKSZKXBL0MOKT' where id=9; -update noar ti set b2='BWPBJYJ67E0SIG3CKSZKXBL0MOKT' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 mediumblob null, -b1 longblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='Z104694OJFA' where id=1; -update noar ti set v0='Z104694OJFA' where id=1; -update noar tt set b0='RPG0I43KU4AVCULXN3MD2XXXWC4GUTU' where id=1; -update noar ti set b0='RPG0I43KU4AVCULXN3MD2XXXWC4GUTU' where id=1; -update noar tt set v0='GCG9RIPJUOG5YY' where id=1; -update noar ti set v0='GCG9RIPJUOG5YY' where id=1; -update noar tt set b1='JDPM61NY3TKJ' where id=1; -update noar ti set b1='JDPM61NY3TKJ' where id=1; -update noar tt set v0='D8JESE7' where id=1; -update noar ti set v0='D8JESE7' where id=1; -update noar tt set b2='HEEE1Q3OLR22EWKDDMTE9SZ9NS' where id=1; -update noar ti set b2='HEEE1Q3OLR22EWKDDMTE9SZ9NS' where id=1; -update noar tt set v0='N9OJY26GINEFLG4S' where id=2; -update noar ti set v0='N9OJY26GINEFLG4S' where id=2; -update noar tt set b0='K0UQMIL7EV1RXYF' where id=2; -update noar ti set b0='K0UQMIL7EV1RXYF' where id=2; -update noar tt set v0='UJLKP3A04AAIKNYI66J60W' where id=2; -update noar ti set v0='UJLKP3A04AAIKNYI66J60W' where id=2; -update noar tt set b1='MHT1XDZ5S8O4DMFURETLGK4HQ' where id=2; -update noar ti set b1='MHT1XDZ5S8O4DMFURETLGK4HQ' where id=2; -update noar tt set v0='6UZRF4L79IEA' where id=2; -update noar ti set v0='6UZRF4L79IEA' where id=2; -update noar tt set b2='A988H0T01T28V1VQA' where id=2; -update noar ti set b2='A988H0T01T28V1VQA' where id=2; -update noar tt set v0='9JV' where id=3; -update noar ti set v0='9JV' where id=3; -update noar tt set b0='YG8DC08IY536' where id=3; -update noar ti set b0='YG8DC08IY536' where id=3; -update noar tt set v0='3FUEF' where id=3; -update noar ti set v0='3FUEF' where id=3; -update noar tt set b1='HRSAQND8C85PX' where id=3; -update noar ti set b1='HRSAQND8C85PX' where id=3; -update noar tt set v0='P3LH16WDFVHFBPBCQXCU5B0OCSY07' where id=3; -update noar ti set v0='P3LH16WDFVHFBPBCQXCU5B0OCSY07' where id=3; -update noar tt set b2='LH5F0' where id=3; -update noar ti set b2='LH5F0' where id=3; -update noar tt set v0='KN7GC8T9J2RZQ3CH6M1ZZGER83FAY1X' where id=4; -update noar ti set v0='KN7GC8T9J2RZQ3CH6M1ZZGER83FAY1X' where id=4; -update noar tt set b0='H' where id=4; -update noar ti set b0='H' where id=4; -update noar tt set v0='BT79' where id=4; -update noar ti set v0='BT79' where id=4; -update noar tt set b1='EF24AI' where id=4; -update noar ti set b1='EF24AI' where id=4; -update noar tt set v0='MY' where id=4; -update noar ti set v0='MY' where id=4; -update noar tt set b2='ZGLZB5P' where id=4; -update noar ti set b2='ZGLZB5P' where id=4; -update noar tt set v0='8' where id=5; -update noar ti set v0='8' where id=5; -update noar tt set b0='HZTBR6' where id=5; -update noar ti set b0='HZTBR6' where id=5; -update noar tt set v0='0JG3CURUM2I2M3Y9ZJ' where id=5; -update noar ti set v0='0JG3CURUM2I2M3Y9ZJ' where id=5; -update noar tt set b1='A98P8HM8F4P7PSGHE7' where id=5; -update noar ti set b1='A98P8HM8F4P7PSGHE7' where id=5; -update noar tt set v0='65ZRDAZRIWO9PAR0T6MA0EA8' where id=5; -update noar ti set v0='65ZRDAZRIWO9PAR0T6MA0EA8' where id=5; -update noar tt set b2='D2K9423' where id=5; -update noar ti set b2='D2K9423' where id=5; -update noar tt set v0='W8T9QUSNMD5A7X34PJOC3NYA0' where id=6; -update noar ti set v0='W8T9QUSNMD5A7X34PJOC3NYA0' where id=6; -update noar tt set b0='4Z1ES5VG' where id=6; -update noar ti set b0='4Z1ES5VG' where id=6; -update noar tt set v0='88' where id=6; -update noar ti set v0='88' where id=6; -update noar tt set b1='ADJ92F3K8MI401JOYTMGD' where id=6; -update noar ti set b1='ADJ92F3K8MI401JOYTMGD' where id=6; -update noar tt set v0='QBLQLB8K85HTLE6RJ4BNRBF2X' where id=6; -update noar ti set v0='QBLQLB8K85HTLE6RJ4BNRBF2X' where id=6; -update noar tt set b2='0EENMWAJK698IWTLAJV82C6CZR4RW' where id=6; -update noar ti set b2='0EENMWAJK698IWTLAJV82C6CZR4RW' where id=6; -update noar tt set v0='N6QCJL4T16NK1DRIJ7Q3710MXNWJFA6Y' where id=7; -update noar ti set v0='N6QCJL4T16NK1DRIJ7Q3710MXNWJFA6Y' where id=7; -update noar tt set b0='NLRJ8VMTXKLGKGBD' where id=7; -update noar ti set b0='NLRJ8VMTXKLGKGBD' where id=7; -update noar tt set v0='1BT1CUJ49G9SHZUSNDOML732TPZB' where id=7; -update noar ti set v0='1BT1CUJ49G9SHZUSNDOML732TPZB' where id=7; -update noar tt set b1='315ZRCT3X3ZG69N9GTS9X152H113C4VY' where id=7; -update noar ti set b1='315ZRCT3X3ZG69N9GTS9X152H113C4VY' where id=7; -update noar tt set v0='EVTLPJHBKIJUD7HO00TU' where id=7; -update noar ti set v0='EVTLPJHBKIJUD7HO00TU' where id=7; -update noar tt set b2='OR472GINOYWB' where id=7; -update noar ti set b2='OR472GINOYWB' where id=7; -update noar tt set v0='VW7Q2Q' where id=8; -update noar ti set v0='VW7Q2Q' where id=8; -update noar tt set b0='0HPMBR62' where id=8; -update noar ti set b0='0HPMBR62' where id=8; -update noar tt set v0='GIL8' where id=8; -update noar ti set v0='GIL8' where id=8; -update noar tt set b1='TMJXG7HP' where id=8; -update noar ti set b1='TMJXG7HP' where id=8; -update noar tt set v0='N30LDJ2G9ESFQPTCKOIMBEQC' where id=8; -update noar ti set v0='N30LDJ2G9ESFQPTCKOIMBEQC' where id=8; -update noar tt set b2='6HM02YPNV9' where id=8; -update noar ti set b2='6HM02YPNV9' where id=8; -update noar tt set v0='TBHHU5WCVZ17ABTHU0TZ' where id=9; -update noar ti set v0='TBHHU5WCVZ17ABTHU0TZ' where id=9; -update noar tt set b0='OI5E3M8J0LFZB0NJFC9W' where id=9; -update noar ti set b0='OI5E3M8J0LFZB0NJFC9W' where id=9; -update noar tt set v0='C7Q9' where id=9; -update noar ti set v0='C7Q9' where id=9; -update noar tt set b1='PA4S7GR0YLZGFKDA4I8WV4449JH4I' where id=9; -update noar ti set b1='PA4S7GR0YLZGFKDA4I8WV4449JH4I' where id=9; -update noar tt set v0='OKTAUX5EWPAEAWP809JN2P0B' where id=9; -update noar ti set v0='OKTAUX5EWPAEAWP809JN2P0B' where id=9; -update noar tt set b2='K' where id=9; -update noar ti set b2='K' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 mediumblob null, -b1 longblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='42XRBOMG3KC19ICCQZG20F785P' where id=1; -update noar ti set v0='42XRBOMG3KC19ICCQZG20F785P' where id=1; -update noar tt set b0='VT6C40X6R3KXKATEA' where id=1; -update noar ti set b0='VT6C40X6R3KXKATEA' where id=1; -update noar tt set v0='3ZHP3U319UVUQ34' where id=1; -update noar ti set v0='3ZHP3U319UVUQ34' where id=1; -update noar tt set b1='IFFK5DIDR36DQ1HG7U9IWV48WQZ8' where id=1; -update noar ti set b1='IFFK5DIDR36DQ1HG7U9IWV48WQZ8' where id=1; -update noar tt set v0='200Q' where id=1; -update noar ti set v0='200Q' where id=1; -update noar tt set b2='XE8Y528DXOEFK2YCIAPYH' where id=1; -update noar ti set b2='XE8Y528DXOEFK2YCIAPYH' where id=1; -update noar tt set v0='1DNYC' where id=2; -update noar ti set v0='1DNYC' where id=2; -update noar tt set b0='CS38OK2MOMA' where id=2; -update noar ti set b0='CS38OK2MOMA' where id=2; -update noar tt set v0='KBECZLRCWB4KY2PV04JHCETWNLS1Z3' where id=2; -update noar ti set v0='KBECZLRCWB4KY2PV04JHCETWNLS1Z3' where id=2; -update noar tt set b1='O6NU' where id=2; -update noar ti set b1='O6NU' where id=2; -update noar tt set v0='4CWDGN1S9O692FN5G6R92XN8GH2OU' where id=2; -update noar ti set v0='4CWDGN1S9O692FN5G6R92XN8GH2OU' where id=2; -update noar tt set b2='2NYZDCWZWLVFXUI6ZIOG8JI7027' where id=2; -update noar ti set b2='2NYZDCWZWLVFXUI6ZIOG8JI7027' where id=2; -update noar tt set v0='W5XKM60U80BEMX7OTU0RD8ID65FNNYF' where id=3; -update noar ti set v0='W5XKM60U80BEMX7OTU0RD8ID65FNNYF' where id=3; -update noar tt set b0='YLRJPC0Q' where id=3; -update noar ti set b0='YLRJPC0Q' where id=3; -update noar tt set v0='HV3' where id=3; -update noar ti set v0='HV3' where id=3; -update noar tt set b1='TY' where id=3; -update noar ti set b1='TY' where id=3; -update noar tt set v0='3BZ4R' where id=3; -update noar ti set v0='3BZ4R' where id=3; -update noar tt set b2='SWX42SMYGD3XT' where id=3; -update noar ti set b2='SWX42SMYGD3XT' where id=3; -update noar tt set v0='8' where id=4; -update noar ti set v0='8' where id=4; -update noar tt set b0='5OPOJFZ4DR7NU' where id=4; -update noar ti set b0='5OPOJFZ4DR7NU' where id=4; -update noar tt set v0='Q487J5R36GI' where id=4; -update noar ti set v0='Q487J5R36GI' where id=4; -update noar tt set b1='IY9DNBQ77DMW48OMD' where id=4; -update noar ti set b1='IY9DNBQ77DMW48OMD' where id=4; -update noar tt set v0='I2KQF9H6YYNIITVNTX' where id=4; -update noar ti set v0='I2KQF9H6YYNIITVNTX' where id=4; -update noar tt set b2='ZK' where id=4; -update noar ti set b2='ZK' where id=4; -update noar tt set v0='60TPJ6CJSTVX7X0FHEJ864LBGTJKBB25' where id=5; -update noar ti set v0='60TPJ6CJSTVX7X0FHEJ864LBGTJKBB25' where id=5; -update noar tt set b0='WQUI7A9IZZ' where id=5; -update noar ti set b0='WQUI7A9IZZ' where id=5; -update noar tt set v0='W7DSP2MFS1LN2OAKN36B0Q3T407A' where id=5; -update noar ti set v0='W7DSP2MFS1LN2OAKN36B0Q3T407A' where id=5; -update noar tt set b1='Q5' where id=5; -update noar ti set b1='Q5' where id=5; -update noar tt set v0='61DS1' where id=5; -update noar ti set v0='61DS1' where id=5; -update noar tt set b2='GTWQB44XRH7USTUE2Q3EYI8AZXF' where id=5; -update noar ti set b2='GTWQB44XRH7USTUE2Q3EYI8AZXF' where id=5; -update noar tt set v0='7XKGH17THVCPSI' where id=6; -update noar ti set v0='7XKGH17THVCPSI' where id=6; -update noar tt set b0='4B0GHZJOA7ZYRF66ISMBLCPZNA2' where id=6; -update noar ti set b0='4B0GHZJOA7ZYRF66ISMBLCPZNA2' where id=6; -update noar tt set v0='UPPMBQZJ' where id=6; -update noar ti set v0='UPPMBQZJ' where id=6; -update noar tt set b1='1RZNIXTHU2N58' where id=6; -update noar ti set b1='1RZNIXTHU2N58' where id=6; -update noar tt set v0='F6R0TIGX4XNTPME14HRTED1CT' where id=6; -update noar ti set v0='F6R0TIGX4XNTPME14HRTED1CT' where id=6; -update noar tt set b2='2LPYO6TO8QIVHJP1KAP9PWOW1' where id=6; -update noar ti set b2='2LPYO6TO8QIVHJP1KAP9PWOW1' where id=6; -update noar tt set v0='0RE' where id=7; -update noar ti set v0='0RE' where id=7; -update noar tt set b0='Z2WBNJYHIP4YY1HQTCK' where id=7; -update noar ti set b0='Z2WBNJYHIP4YY1HQTCK' where id=7; -update noar tt set v0='0GCZCELXI' where id=7; -update noar ti set v0='0GCZCELXI' where id=7; -update noar tt set b1='6' where id=7; -update noar ti set b1='6' where id=7; -update noar tt set v0='5Z1Q2D1P1CWBOJ66I0FI8MO3463FB' where id=7; -update noar ti set v0='5Z1Q2D1P1CWBOJ66I0FI8MO3463FB' where id=7; -update noar tt set b2='RGQVQ7S594' where id=7; -update noar ti set b2='RGQVQ7S594' where id=7; -update noar tt set v0='H30R' where id=8; -update noar ti set v0='H30R' where id=8; -update noar tt set b0='B9NU' where id=8; -update noar ti set b0='B9NU' where id=8; -update noar tt set v0='R' where id=8; -update noar ti set v0='R' where id=8; -update noar tt set b1='AIWTE5L7VXU9S0AY4GYVXWD7' where id=8; -update noar ti set b1='AIWTE5L7VXU9S0AY4GYVXWD7' where id=8; -update noar tt set v0='LFQMIGNS7ZUPS8E5JXWOLZU314' where id=8; -update noar ti set v0='LFQMIGNS7ZUPS8E5JXWOLZU314' where id=8; -update noar tt set b2='TOHPIW6Y3QSFRQVJQ4M6FPELPJ0U7SD' where id=8; -update noar ti set b2='TOHPIW6Y3QSFRQVJQ4M6FPELPJ0U7SD' where id=8; -update noar tt set v0='2GP4PLTH3UKK9H3AX31OGFD9' where id=9; -update noar ti set v0='2GP4PLTH3UKK9H3AX31OGFD9' where id=9; -update noar tt set b0='ACQSK9NVBGKGCXBLL4UOMROFAA5Y9CZS' where id=9; -update noar ti set b0='ACQSK9NVBGKGCXBLL4UOMROFAA5Y9CZS' where id=9; -update noar tt set v0='YNOEV0RPCOVSIWI08A' where id=9; -update noar ti set v0='YNOEV0RPCOVSIWI08A' where id=9; -update noar tt set b1='7' where id=9; -update noar ti set b1='7' where id=9; -update noar tt set v0='52896H3LM2BORSSL6' where id=9; -update noar ti set v0='52896H3LM2BORSSL6' where id=9; -update noar tt set b2='DXMZGE' where id=9; -update noar ti set b2='DXMZGE' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 mediumblob not null, -b1 longblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='80K1T1DG' where id=1; -update noar ti set v0='80K1T1DG' where id=1; -update noar tt set b0='HBX9PLDXOB6KNKZHJX6C' where id=1; -update noar ti set b0='HBX9PLDXOB6KNKZHJX6C' where id=1; -update noar tt set v0='ZR024SSYS9O05Q4' where id=1; -update noar ti set v0='ZR024SSYS9O05Q4' where id=1; -update noar tt set b1='87199C69QG' where id=1; -update noar ti set b1='87199C69QG' where id=1; -update noar tt set v0='8PXK7KI7RJPJK1LQWOAAGD9GBE' where id=1; -update noar ti set v0='8PXK7KI7RJPJK1LQWOAAGD9GBE' where id=1; -update noar tt set b2='QPA5AB5LJJ' where id=1; -update noar ti set b2='QPA5AB5LJJ' where id=1; -update noar tt set v0='7NHOH2ON5WKWUH24NPQ5UFQ' where id=2; -update noar ti set v0='7NHOH2ON5WKWUH24NPQ5UFQ' where id=2; -update noar tt set b0='4M5OS7SHQSAEGN0UK589K' where id=2; -update noar ti set b0='4M5OS7SHQSAEGN0UK589K' where id=2; -update noar tt set v0='02R26YGLZQIJO8EA9ZFW6K9DW5N3CY' where id=2; -update noar ti set v0='02R26YGLZQIJO8EA9ZFW6K9DW5N3CY' where id=2; -update noar tt set b1='T8' where id=2; -update noar ti set b1='T8' where id=2; -update noar tt set v0='XOID16HS0QS90TVDG9NIYLJJ' where id=2; -update noar ti set v0='XOID16HS0QS90TVDG9NIYLJJ' where id=2; -update noar tt set b2='Y382S3VVV2HR3' where id=2; -update noar ti set b2='Y382S3VVV2HR3' where id=2; -update noar tt set v0='93QMMILBC7BP01GPU4' where id=3; -update noar ti set v0='93QMMILBC7BP01GPU4' where id=3; -update noar tt set b0='DORFHEW7V430A05KCH6OH2M09VM4Z2U' where id=3; -update noar ti set b0='DORFHEW7V430A05KCH6OH2M09VM4Z2U' where id=3; -update noar tt set v0='JEG71' where id=3; -update noar ti set v0='JEG71' where id=3; -update noar tt set b1='9ULCEX2XZ5KP73SPQTR32FSZCL4' where id=3; -update noar ti set b1='9ULCEX2XZ5KP73SPQTR32FSZCL4' where id=3; -update noar tt set v0='KC36VT2CIDR8FXV' where id=3; -update noar ti set v0='KC36VT2CIDR8FXV' where id=3; -update noar tt set b2='I9YA0SCIJ34HEOPS5111L0D' where id=3; -update noar ti set b2='I9YA0SCIJ34HEOPS5111L0D' where id=3; -update noar tt set v0='O67YLVNUWAH5NEKTB30D2TPN8X4FOP4D' where id=4; -update noar ti set v0='O67YLVNUWAH5NEKTB30D2TPN8X4FOP4D' where id=4; -update noar tt set b0='NK' where id=4; -update noar ti set b0='NK' where id=4; -update noar tt set v0='VLKYVN' where id=4; -update noar ti set v0='VLKYVN' where id=4; -update noar tt set b1='IJ' where id=4; -update noar ti set b1='IJ' where id=4; -update noar tt set v0='CT99GM7ILWOTCW97Z' where id=4; -update noar ti set v0='CT99GM7ILWOTCW97Z' where id=4; -update noar tt set b2='PUD7Z8YBGTG4WK1U84XYOH1I5' where id=4; -update noar ti set b2='PUD7Z8YBGTG4WK1U84XYOH1I5' where id=4; -update noar tt set v0='Q4FTV7U0QP00679ON8352BU0X0YS' where id=5; -update noar ti set v0='Q4FTV7U0QP00679ON8352BU0X0YS' where id=5; -update noar tt set b0='FW4I2' where id=5; -update noar ti set b0='FW4I2' where id=5; -update noar tt set v0='SR7YWKOJF45I1' where id=5; -update noar ti set v0='SR7YWKOJF45I1' where id=5; -update noar tt set b1='Y8I3I200H034LJTBAAK' where id=5; -update noar ti set b1='Y8I3I200H034LJTBAAK' where id=5; -update noar tt set v0='384TWQL739P440MA4' where id=5; -update noar ti set v0='384TWQL739P440MA4' where id=5; -update noar tt set b2='PGI85TB1DA8FO8' where id=5; -update noar ti set b2='PGI85TB1DA8FO8' where id=5; -update noar tt set v0='IRI7NYFWLCQNBGM4PNW9EDRLU07' where id=6; -update noar ti set v0='IRI7NYFWLCQNBGM4PNW9EDRLU07' where id=6; -update noar tt set b0='1IRJ' where id=6; -update noar ti set b0='1IRJ' where id=6; -update noar tt set v0='QR08NEK1SWDK43GKDEDDAIMV' where id=6; -update noar ti set v0='QR08NEK1SWDK43GKDEDDAIMV' where id=6; -update noar tt set b1='FLUAGBM' where id=6; -update noar ti set b1='FLUAGBM' where id=6; -update noar tt set v0='PSWBQSK86IE4Q7TSCG9DZBED3BP' where id=6; -update noar ti set v0='PSWBQSK86IE4Q7TSCG9DZBED3BP' where id=6; -update noar tt set b2='0REGOXSGZ8UYFXFTBC2ZFMORZ2' where id=6; -update noar ti set b2='0REGOXSGZ8UYFXFTBC2ZFMORZ2' where id=6; -update noar tt set v0='C' where id=7; -update noar ti set v0='C' where id=7; -update noar tt set b0='R' where id=7; -update noar ti set b0='R' where id=7; -update noar tt set v0='7C0Q313266KJISX6ER60HQYUEY' where id=7; -update noar ti set v0='7C0Q313266KJISX6ER60HQYUEY' where id=7; -update noar tt set b1='M4C7EV' where id=7; -update noar ti set b1='M4C7EV' where id=7; -update noar tt set v0='NNJK' where id=7; -update noar ti set v0='NNJK' where id=7; -update noar tt set b2='GHN5HV2ZV61GBO1MPA0RA9SAW61F' where id=7; -update noar ti set b2='GHN5HV2ZV61GBO1MPA0RA9SAW61F' where id=7; -update noar tt set v0='5' where id=8; -update noar ti set v0='5' where id=8; -update noar tt set b0='7C81N' where id=8; -update noar ti set b0='7C81N' where id=8; -update noar tt set v0='COR37X28U51YQHLOG' where id=8; -update noar ti set v0='COR37X28U51YQHLOG' where id=8; -update noar tt set b1='CB0J5X9E7758A' where id=8; -update noar ti set b1='CB0J5X9E7758A' where id=8; -update noar tt set v0='95NKZ' where id=8; -update noar ti set v0='95NKZ' where id=8; -update noar tt set b2='QCF7RYDWXVUOWLJQ22WUGIGVJ8HXPRR' where id=8; -update noar ti set b2='QCF7RYDWXVUOWLJQ22WUGIGVJ8HXPRR' where id=8; -update noar tt set v0='95FUZXMX68GFPRB844WUBJ0UKQNX' where id=9; -update noar ti set v0='95FUZXMX68GFPRB844WUBJ0UKQNX' where id=9; -update noar tt set b0='5NF8BYY5NO03' where id=9; -update noar ti set b0='5NF8BYY5NO03' where id=9; -update noar tt set v0='8AI' where id=9; -update noar ti set v0='8AI' where id=9; -update noar tt set b1='T5CPVMUV1OZMTDPM' where id=9; -update noar ti set b1='T5CPVMUV1OZMTDPM' where id=9; -update noar tt set v0='88DP' where id=9; -update noar ti set v0='88DP' where id=9; -update noar tt set b2='ZCZIN0VVO68R0QJODEVP4WZ381' where id=9; -update noar ti set b2='ZCZIN0VVO68R0QJODEVP4WZ381' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 mediumblob not null, -b1 longblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='V7ZWG4AZN' where id=1; -update noar ti set v0='V7ZWG4AZN' where id=1; -update noar tt set b0='TATBDD2ZM99M313' where id=1; -update noar ti set b0='TATBDD2ZM99M313' where id=1; -update noar tt set v0='03LC2CBJJ0BL74IK4ISJY' where id=1; -update noar ti set v0='03LC2CBJJ0BL74IK4ISJY' where id=1; -update noar tt set b1='AJAKRSLCG2GB53F5HN96' where id=1; -update noar ti set b1='AJAKRSLCG2GB53F5HN96' where id=1; -update noar tt set v0='5PM2W' where id=1; -update noar ti set v0='5PM2W' where id=1; -update noar tt set b2='UU5KAQ0CLOX84U016VEDS' where id=1; -update noar ti set b2='UU5KAQ0CLOX84U016VEDS' where id=1; -update noar tt set v0='210ZEO5YTH9U4' where id=2; -update noar ti set v0='210ZEO5YTH9U4' where id=2; -update noar tt set b0='RPS5LC05P2636TZP11ZHC4TKA9EGDD' where id=2; -update noar ti set b0='RPS5LC05P2636TZP11ZHC4TKA9EGDD' where id=2; -update noar tt set v0='CIUKVTTPFWQ4GJX1JICRFDHE' where id=2; -update noar ti set v0='CIUKVTTPFWQ4GJX1JICRFDHE' where id=2; -update noar tt set b1='5LUQKEQ0JI9SSXBQGD9P43232W' where id=2; -update noar ti set b1='5LUQKEQ0JI9SSXBQGD9P43232W' where id=2; -update noar tt set v0='9I0CLSUIA47H9ME' where id=2; -update noar ti set v0='9I0CLSUIA47H9ME' where id=2; -update noar tt set b2='DRK53ATV11Y3DDQLR7Q7R' where id=2; -update noar ti set b2='DRK53ATV11Y3DDQLR7Q7R' where id=2; -update noar tt set v0='PB0XVODYOWXTF84Q8OX6SD21' where id=3; -update noar ti set v0='PB0XVODYOWXTF84Q8OX6SD21' where id=3; -update noar tt set b0='HJZ9E7Q044US50K9VTSXDM' where id=3; -update noar ti set b0='HJZ9E7Q044US50K9VTSXDM' where id=3; -update noar tt set v0='5TMMHP3DQTDU7IFW8KCIK96YPDCU' where id=3; -update noar ti set v0='5TMMHP3DQTDU7IFW8KCIK96YPDCU' where id=3; -update noar tt set b1='OPYEFP5EXI0N' where id=3; -update noar ti set b1='OPYEFP5EXI0N' where id=3; -update noar tt set v0='HMSL2S' where id=3; -update noar ti set v0='HMSL2S' where id=3; -update noar tt set b2='JJFG1F0RC' where id=3; -update noar ti set b2='JJFG1F0RC' where id=3; -update noar tt set v0='5RE63AKKYUL16QBPQ929IW5NB9' where id=4; -update noar ti set v0='5RE63AKKYUL16QBPQ929IW5NB9' where id=4; -update noar tt set b0='4F91R01XDIYTY7PUS8DX' where id=4; -update noar ti set b0='4F91R01XDIYTY7PUS8DX' where id=4; -update noar tt set v0='XM2LWTBVF6WNNR1Y' where id=4; -update noar ti set v0='XM2LWTBVF6WNNR1Y' where id=4; -update noar tt set b1='FKZ7RP1ZW8YO49BZOUNJGZWL9XA47HZZ' where id=4; -update noar ti set b1='FKZ7RP1ZW8YO49BZOUNJGZWL9XA47HZZ' where id=4; -update noar tt set v0='Y1EDT095QEUGSC80O9QXH2YPA' where id=4; -update noar ti set v0='Y1EDT095QEUGSC80O9QXH2YPA' where id=4; -update noar tt set b2='7U0W7OCG8' where id=4; -update noar ti set b2='7U0W7OCG8' where id=4; -update noar tt set v0='3XVPGMXMQLK70U3' where id=5; -update noar ti set v0='3XVPGMXMQLK70U3' where id=5; -update noar tt set b0='Y4QWDP12JWF36SF1' where id=5; -update noar ti set b0='Y4QWDP12JWF36SF1' where id=5; -update noar tt set v0='D2H16PRZVJV320S5IJ' where id=5; -update noar ti set v0='D2H16PRZVJV320S5IJ' where id=5; -update noar tt set b1='H0HEHKKSFQZGIS' where id=5; -update noar ti set b1='H0HEHKKSFQZGIS' where id=5; -update noar tt set v0='1LK5USMV06RCN7UW6QNAUKN6' where id=5; -update noar ti set v0='1LK5USMV06RCN7UW6QNAUKN6' where id=5; -update noar tt set b2='S8UCVUCJUTL7SX2UW0O5H3PJ' where id=5; -update noar ti set b2='S8UCVUCJUTL7SX2UW0O5H3PJ' where id=5; -update noar tt set v0='2WFOQNFRK7RG1LHKM69YAX3DU' where id=6; -update noar ti set v0='2WFOQNFRK7RG1LHKM69YAX3DU' where id=6; -update noar tt set b0='MOXEFXE7O86GBF149569NE83BRULB' where id=6; -update noar ti set b0='MOXEFXE7O86GBF149569NE83BRULB' where id=6; -update noar tt set v0='W381UCX' where id=6; -update noar ti set v0='W381UCX' where id=6; -update noar tt set b1='J75YLBPR6MQ' where id=6; -update noar ti set b1='J75YLBPR6MQ' where id=6; -update noar tt set v0='W7AOOR8I9455' where id=6; -update noar ti set v0='W7AOOR8I9455' where id=6; -update noar tt set b2='P26M' where id=6; -update noar ti set b2='P26M' where id=6; -update noar tt set v0='CL3WQ1K115R' where id=7; -update noar ti set v0='CL3WQ1K115R' where id=7; -update noar tt set b0='HNAN9AVT0AOT2OFX6QK1279S' where id=7; -update noar ti set b0='HNAN9AVT0AOT2OFX6QK1279S' where id=7; -update noar tt set v0='BNU3MYAPQ86OOQI8K2XJ0X' where id=7; -update noar ti set v0='BNU3MYAPQ86OOQI8K2XJ0X' where id=7; -update noar tt set b1='3SB8DB8XRHCJQ2M9YE0H9BS1T51' where id=7; -update noar ti set b1='3SB8DB8XRHCJQ2M9YE0H9BS1T51' where id=7; -update noar tt set v0='IH390HHQZUMM67V2U8ETY' where id=7; -update noar ti set v0='IH390HHQZUMM67V2U8ETY' where id=7; -update noar tt set b2='HWMGCETHG' where id=7; -update noar ti set b2='HWMGCETHG' where id=7; -update noar tt set v0='ZPD0QKTZY8GGA' where id=8; -update noar ti set v0='ZPD0QKTZY8GGA' where id=8; -update noar tt set b0='SPPEFGAI' where id=8; -update noar ti set b0='SPPEFGAI' where id=8; -update noar tt set v0='RTFOKFTU2KIMD' where id=8; -update noar ti set v0='RTFOKFTU2KIMD' where id=8; -update noar tt set b1='58' where id=8; -update noar ti set b1='58' where id=8; -update noar tt set v0='DUIYVWOW' where id=8; -update noar ti set v0='DUIYVWOW' where id=8; -update noar tt set b2='ZL0M4SSJ488QF1RRW9' where id=8; -update noar ti set b2='ZL0M4SSJ488QF1RRW9' where id=8; -update noar tt set v0='IMBQX11WXDZD23' where id=9; -update noar ti set v0='IMBQX11WXDZD23' where id=9; -update noar tt set b0='LR95KY4LF9LBODKVVYP6VNQB5A97V' where id=9; -update noar ti set b0='LR95KY4LF9LBODKVVYP6VNQB5A97V' where id=9; -update noar tt set v0='9G2XMTYWQ9DZHC6R2SZFMHM7FIN2FXNE' where id=9; -update noar ti set v0='9G2XMTYWQ9DZHC6R2SZFMHM7FIN2FXNE' where id=9; -update noar tt set b1='YJBADF389CUS9CZBY9K3T07ICL4' where id=9; -update noar ti set b1='YJBADF389CUS9CZBY9K3T07ICL4' where id=9; -update noar tt set v0='GLDLMJP3SGKJ1IIAJPJ' where id=9; -update noar ti set v0='GLDLMJP3SGKJ1IIAJPJ' where id=9; -update noar tt set b2='Y5SXJBOJP7OU8I251M29ZNEAWF98Z' where id=9; -update noar ti set b2='Y5SXJBOJP7OU8I251M29ZNEAWF98Z' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 mediumblob null, -b1 longblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='HEMYCHEGMT4Y1B9' where id=1; -update noar ti set v0='HEMYCHEGMT4Y1B9' where id=1; -update noar tt set b0='FFNXWDY2QWMMI8GC' where id=1; -update noar ti set b0='FFNXWDY2QWMMI8GC' where id=1; -update noar tt set v0='RE6A13N6VX4X7WRFBDODLPKG38MTP' where id=1; -update noar ti set v0='RE6A13N6VX4X7WRFBDODLPKG38MTP' where id=1; -update noar tt set b1='N' where id=1; -update noar ti set b1='N' where id=1; -update noar tt set v0='ZUEDPH7OKOEK2A' where id=1; -update noar ti set v0='ZUEDPH7OKOEK2A' where id=1; -update noar tt set b2='PZKKNBCMF7HFB2Z622Y' where id=1; -update noar ti set b2='PZKKNBCMF7HFB2Z622Y' where id=1; -update noar tt set v0='O326QBS9C' where id=2; -update noar ti set v0='O326QBS9C' where id=2; -update noar tt set b0='83XA2ZJWA6FIV8IE2L6PMYV460RF7J' where id=2; -update noar ti set b0='83XA2ZJWA6FIV8IE2L6PMYV460RF7J' where id=2; -update noar tt set v0='IVBTK11YVL' where id=2; -update noar ti set v0='IVBTK11YVL' where id=2; -update noar tt set b1='62LZS7HF1Y151FFD09AZC70WUBBRE5FC' where id=2; -update noar ti set b1='62LZS7HF1Y151FFD09AZC70WUBBRE5FC' where id=2; -update noar tt set v0='UKT9TGCHU2IQOT2BM3TEPMIOKTJJ3LWE' where id=2; -update noar ti set v0='UKT9TGCHU2IQOT2BM3TEPMIOKTJJ3LWE' where id=2; -update noar tt set b2='OFCOACO' where id=2; -update noar ti set b2='OFCOACO' where id=2; -update noar tt set v0='3UD24CUV4J837VZZMOOZ14DMGR7CL' where id=3; -update noar ti set v0='3UD24CUV4J837VZZMOOZ14DMGR7CL' where id=3; -update noar tt set b0='H118W0CPF67WCLB0H' where id=3; -update noar ti set b0='H118W0CPF67WCLB0H' where id=3; -update noar tt set v0='YEEL8JQUQA081O7FHKEKG0UFHWCF' where id=3; -update noar ti set v0='YEEL8JQUQA081O7FHKEKG0UFHWCF' where id=3; -update noar tt set b1='AR2AHT9YYH5BGWNEFV2HJ5F8ZPN2X1' where id=3; -update noar ti set b1='AR2AHT9YYH5BGWNEFV2HJ5F8ZPN2X1' where id=3; -update noar tt set v0='VR6HMN8I7XJ7B' where id=3; -update noar ti set v0='VR6HMN8I7XJ7B' where id=3; -update noar tt set b2='TZSEX34FFOQXBTS36BP2DIW8SDTS' where id=3; -update noar ti set b2='TZSEX34FFOQXBTS36BP2DIW8SDTS' where id=3; -update noar tt set v0='GJ5O8KZWHXT9NRAET8U2OH9NA7GNXEYO' where id=4; -update noar ti set v0='GJ5O8KZWHXT9NRAET8U2OH9NA7GNXEYO' where id=4; -update noar tt set b0='WKERUZFBWX2TK2RU4NYGFT' where id=4; -update noar ti set b0='WKERUZFBWX2TK2RU4NYGFT' where id=4; -update noar tt set v0='IKLNC2XN0LRFTWDOLYA4P' where id=4; -update noar ti set v0='IKLNC2XN0LRFTWDOLYA4P' where id=4; -update noar tt set b1='5C6' where id=4; -update noar ti set b1='5C6' where id=4; -update noar tt set v0='0HP0DQ87N0UUZXUVBSD' where id=4; -update noar ti set v0='0HP0DQ87N0UUZXUVBSD' where id=4; -update noar tt set b2='PCB45590USUWTZTZJZAB4YG1E8' where id=4; -update noar ti set b2='PCB45590USUWTZTZJZAB4YG1E8' where id=4; -update noar tt set v0='WI' where id=5; -update noar ti set v0='WI' where id=5; -update noar tt set b0='B6G' where id=5; -update noar ti set b0='B6G' where id=5; -update noar tt set v0='0NEJKWGH3E6RQM2EO2G4M31B' where id=5; -update noar ti set v0='0NEJKWGH3E6RQM2EO2G4M31B' where id=5; -update noar tt set b1='VTA' where id=5; -update noar ti set b1='VTA' where id=5; -update noar tt set v0='FHN7PZUPR0K5MZBZC7UQKY57I' where id=5; -update noar ti set v0='FHN7PZUPR0K5MZBZC7UQKY57I' where id=5; -update noar tt set b2='JWC437U603LHDVC6' where id=5; -update noar ti set b2='JWC437U603LHDVC6' where id=5; -update noar tt set v0='W95HR' where id=6; -update noar ti set v0='W95HR' where id=6; -update noar tt set b0='KW1L' where id=6; -update noar ti set b0='KW1L' where id=6; -update noar tt set v0='W3PKX3RMYXH0VO4S0X03ZCOG4EP' where id=6; -update noar ti set v0='W3PKX3RMYXH0VO4S0X03ZCOG4EP' where id=6; -update noar tt set b1='3M' where id=6; -update noar ti set b1='3M' where id=6; -update noar tt set v0='58SYRP3KAZWEZCW0KCKL0P6C1OP3' where id=6; -update noar ti set v0='58SYRP3KAZWEZCW0KCKL0P6C1OP3' where id=6; -update noar tt set b2='G' where id=6; -update noar ti set b2='G' where id=6; -update noar tt set v0='1V69FB47T49HMDZJ6WXV7HYNXY4S' where id=7; -update noar ti set v0='1V69FB47T49HMDZJ6WXV7HYNXY4S' where id=7; -update noar tt set b0='S4WKPRVBAQWOJHPQ84PBX8PC2BZR' where id=7; -update noar ti set b0='S4WKPRVBAQWOJHPQ84PBX8PC2BZR' where id=7; -update noar tt set v0='U9ZG9I7RFDV1J4H9MCP1IBXCIW' where id=7; -update noar ti set v0='U9ZG9I7RFDV1J4H9MCP1IBXCIW' where id=7; -update noar tt set b1='Z6VEJCBCNSM7BM2G' where id=7; -update noar ti set b1='Z6VEJCBCNSM7BM2G' where id=7; -update noar tt set v0='CHW4AYEMTEZ0Y84HJBTPD40TR03XZ' where id=7; -update noar ti set v0='CHW4AYEMTEZ0Y84HJBTPD40TR03XZ' where id=7; -update noar tt set b2='WICZLVZ1DA6PMSMQ1JPA2' where id=7; -update noar ti set b2='WICZLVZ1DA6PMSMQ1JPA2' where id=7; -update noar tt set v0='JBCKL91QVNSC' where id=8; -update noar ti set v0='JBCKL91QVNSC' where id=8; -update noar tt set b0='VU' where id=8; -update noar ti set b0='VU' where id=8; -update noar tt set v0='TKRV0AGLFXH9' where id=8; -update noar ti set v0='TKRV0AGLFXH9' where id=8; -update noar tt set b1='FYZTUUXIDOM2JC7D5UDTFNVEXNKC67V' where id=8; -update noar ti set b1='FYZTUUXIDOM2JC7D5UDTFNVEXNKC67V' where id=8; -update noar tt set v0='ZASLCM7TE29EMVXOLZ4' where id=8; -update noar ti set v0='ZASLCM7TE29EMVXOLZ4' where id=8; -update noar tt set b2='385MA3E0O1D2K0ANMSJX6I32B' where id=8; -update noar ti set b2='385MA3E0O1D2K0ANMSJX6I32B' where id=8; -update noar tt set v0='R9QS4' where id=9; -update noar ti set v0='R9QS4' where id=9; -update noar tt set b0='01XPT9N4' where id=9; -update noar ti set b0='01XPT9N4' where id=9; -update noar tt set v0='O4Z' where id=9; -update noar ti set v0='O4Z' where id=9; -update noar tt set b1='NF5VSD2PZT5W57FER4VY8Z2DQ8I1LNJ' where id=9; -update noar ti set b1='NF5VSD2PZT5W57FER4VY8Z2DQ8I1LNJ' where id=9; -update noar tt set v0='5SVC884CFGCG77UER3NUZ95KY5M4Q' where id=9; -update noar ti set v0='5SVC884CFGCG77UER3NUZ95KY5M4Q' where id=9; -update noar tt set b2='8B' where id=9; -update noar ti set b2='8B' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 mediumblob null, -b1 longblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='VBNLXDWCY8P0D827ZS' where id=1; -update noar ti set v0='VBNLXDWCY8P0D827ZS' where id=1; -update noar tt set b0='HGOQ86QPAJELJY' where id=1; -update noar ti set b0='HGOQ86QPAJELJY' where id=1; -update noar tt set v0='D11ZZAFZDELOMBJ9F4' where id=1; -update noar ti set v0='D11ZZAFZDELOMBJ9F4' where id=1; -update noar tt set b1='W1HW4' where id=1; -update noar ti set b1='W1HW4' where id=1; -update noar tt set v0='JG8L8NA067' where id=1; -update noar ti set v0='JG8L8NA067' where id=1; -update noar tt set b2='I' where id=1; -update noar ti set b2='I' where id=1; -update noar tt set v0='WU6IU' where id=2; -update noar ti set v0='WU6IU' where id=2; -update noar tt set b0='2DL5F2ZV0' where id=2; -update noar ti set b0='2DL5F2ZV0' where id=2; -update noar tt set v0='GOUMQ5RXP5IF0S64UXY5UX' where id=2; -update noar ti set v0='GOUMQ5RXP5IF0S64UXY5UX' where id=2; -update noar tt set b1='9Q4XP7Z3O2DC5010C4L2JA' where id=2; -update noar ti set b1='9Q4XP7Z3O2DC5010C4L2JA' where id=2; -update noar tt set v0='6I2SHG3IOPRDKOI9UYJN6' where id=2; -update noar ti set v0='6I2SHG3IOPRDKOI9UYJN6' where id=2; -update noar tt set b2='6WSWK5E9EBJVXBKVD7IJWFP57VNY' where id=2; -update noar ti set b2='6WSWK5E9EBJVXBKVD7IJWFP57VNY' where id=2; -update noar tt set v0='3K43ZFVV8Y8' where id=3; -update noar ti set v0='3K43ZFVV8Y8' where id=3; -update noar tt set b0='X18B2' where id=3; -update noar ti set b0='X18B2' where id=3; -update noar tt set v0='1AS08QZHPYLM99KTAS58' where id=3; -update noar ti set v0='1AS08QZHPYLM99KTAS58' where id=3; -update noar tt set b1='Q9ANGZ' where id=3; -update noar ti set b1='Q9ANGZ' where id=3; -update noar tt set v0='70QIT25GLE' where id=3; -update noar ti set v0='70QIT25GLE' where id=3; -update noar tt set b2='PPJLC0N1IFY4K6KJ' where id=3; -update noar ti set b2='PPJLC0N1IFY4K6KJ' where id=3; -update noar tt set v0='TN4GIH4YSG411YD3' where id=4; -update noar ti set v0='TN4GIH4YSG411YD3' where id=4; -update noar tt set b0='YQZYG98APFB9HZ360L7WN9GCXDSHC6' where id=4; -update noar ti set b0='YQZYG98APFB9HZ360L7WN9GCXDSHC6' where id=4; -update noar tt set v0='BW00HBMU4U' where id=4; -update noar ti set v0='BW00HBMU4U' where id=4; -update noar tt set b1='7144MN0RURPUP4UZGQEVGRGG8A4CY4W' where id=4; -update noar ti set b1='7144MN0RURPUP4UZGQEVGRGG8A4CY4W' where id=4; -update noar tt set v0='ZMWJ2SULYN8RGNJZ863LNJB0AFCGWU' where id=4; -update noar ti set v0='ZMWJ2SULYN8RGNJZ863LNJB0AFCGWU' where id=4; -update noar tt set b2='1SC2' where id=4; -update noar ti set b2='1SC2' where id=4; -update noar tt set v0='O7' where id=5; -update noar ti set v0='O7' where id=5; -update noar tt set b0='2X54APC5PR3DS4KH04VGE' where id=5; -update noar ti set b0='2X54APC5PR3DS4KH04VGE' where id=5; -update noar tt set v0='HVY5EKT1ZXCRJ' where id=5; -update noar ti set v0='HVY5EKT1ZXCRJ' where id=5; -update noar tt set b1='WTPTUF' where id=5; -update noar ti set b1='WTPTUF' where id=5; -update noar tt set v0='KHD78EKF9P5HSYN0KDYAUGC9' where id=5; -update noar ti set v0='KHD78EKF9P5HSYN0KDYAUGC9' where id=5; -update noar tt set b2='J477EQG00AHOH3WA9' where id=5; -update noar ti set b2='J477EQG00AHOH3WA9' where id=5; -update noar tt set v0='LCFGNS92EOU6YKAF' where id=6; -update noar ti set v0='LCFGNS92EOU6YKAF' where id=6; -update noar tt set b0='O3U1RW1BOJYOP3J' where id=6; -update noar ti set b0='O3U1RW1BOJYOP3J' where id=6; -update noar tt set v0='LA17XKMM6XURUMQXMSW38' where id=6; -update noar ti set v0='LA17XKMM6XURUMQXMSW38' where id=6; -update noar tt set b1='N' where id=6; -update noar ti set b1='N' where id=6; -update noar tt set v0='MTFL4RSOQ98VKT1' where id=6; -update noar ti set v0='MTFL4RSOQ98VKT1' where id=6; -update noar tt set b2='CTSJ5TE2Z85Y4SHXSG' where id=6; -update noar ti set b2='CTSJ5TE2Z85Y4SHXSG' where id=6; -update noar tt set v0='LEM2DK4XYJGAMQL' where id=7; -update noar ti set v0='LEM2DK4XYJGAMQL' where id=7; -update noar tt set b0='CNHPI6OQPRBMR' where id=7; -update noar ti set b0='CNHPI6OQPRBMR' where id=7; -update noar tt set v0='0T31' where id=7; -update noar ti set v0='0T31' where id=7; -update noar tt set b1='KWTYAN3JHT7RVQGOMMC8Z' where id=7; -update noar ti set b1='KWTYAN3JHT7RVQGOMMC8Z' where id=7; -update noar tt set v0='DT2AYTM1RYB5ELQKU3B2' where id=7; -update noar ti set v0='DT2AYTM1RYB5ELQKU3B2' where id=7; -update noar tt set b2='2H5XXD4MLKVUKKLHM6' where id=7; -update noar ti set b2='2H5XXD4MLKVUKKLHM6' where id=7; -update noar tt set v0='XII6KEUC23X' where id=8; -update noar ti set v0='XII6KEUC23X' where id=8; -update noar tt set b0='KM9J386EX9MJLD79POMU4' where id=8; -update noar ti set b0='KM9J386EX9MJLD79POMU4' where id=8; -update noar tt set v0='0JLFR7G9QWSUO' where id=8; -update noar ti set v0='0JLFR7G9QWSUO' where id=8; -update noar tt set b1='DLAAOUBXYGC87UIV88LM9' where id=8; -update noar ti set b1='DLAAOUBXYGC87UIV88LM9' where id=8; -update noar tt set v0='JKVYZY6K0RCCLRMEX0E' where id=8; -update noar ti set v0='JKVYZY6K0RCCLRMEX0E' where id=8; -update noar tt set b2='EW5AG' where id=8; -update noar ti set b2='EW5AG' where id=8; -update noar tt set v0='BJ3I5IB' where id=9; -update noar ti set v0='BJ3I5IB' where id=9; -update noar tt set b0='5QNVTA0D23UQ' where id=9; -update noar ti set b0='5QNVTA0D23UQ' where id=9; -update noar tt set v0='LLROIM1QK2YUBGD2SCAAGEE90Y' where id=9; -update noar ti set v0='LLROIM1QK2YUBGD2SCAAGEE90Y' where id=9; -update noar tt set b1='BLBPU6CTR3FZH71YP8WEYRGS1LE33EP' where id=9; -update noar ti set b1='BLBPU6CTR3FZH71YP8WEYRGS1LE33EP' where id=9; -update noar tt set v0='W6YY3MSY6OGNZL5YDGJ95' where id=9; -update noar ti set v0='W6YY3MSY6OGNZL5YDGJ95' where id=9; -update noar tt set b2='1ES1IN7ZEVXSNP9G2T' where id=9; -update noar ti set b2='1ES1IN7ZEVXSNP9G2T' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 mediumblob not null, -b1 longblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='NNCHWZG' where id=1; -update noar ti set v0='NNCHWZG' where id=1; -update noar tt set b0='V62LJQQ1N8Z' where id=1; -update noar ti set b0='V62LJQQ1N8Z' where id=1; -update noar tt set v0='UP6JH766TL8DIPJW26GG' where id=1; -update noar ti set v0='UP6JH766TL8DIPJW26GG' where id=1; -update noar tt set b1='972' where id=1; -update noar ti set b1='972' where id=1; -update noar tt set v0='V76YTXYWIB5CQE3JP7WH31' where id=1; -update noar ti set v0='V76YTXYWIB5CQE3JP7WH31' where id=1; -update noar tt set b2='UOQ975H6L3E2L761L978SIFX' where id=1; -update noar ti set b2='UOQ975H6L3E2L761L978SIFX' where id=1; -update noar tt set v0='6V8F8IBA24O20SELD' where id=2; -update noar ti set v0='6V8F8IBA24O20SELD' where id=2; -update noar tt set b0='C7UHQE5LRMP6GCS9LJHP3PJ3' where id=2; -update noar ti set b0='C7UHQE5LRMP6GCS9LJHP3PJ3' where id=2; -update noar tt set v0='I8KDINPV3HQDCOFVSTOI' where id=2; -update noar ti set v0='I8KDINPV3HQDCOFVSTOI' where id=2; -update noar tt set b1='GNHXYR7U8X' where id=2; -update noar ti set b1='GNHXYR7U8X' where id=2; -update noar tt set v0='IL8' where id=2; -update noar ti set v0='IL8' where id=2; -update noar tt set b2='V9NL7V5CEW4EOUIML3PGE0YA2' where id=2; -update noar ti set b2='V9NL7V5CEW4EOUIML3PGE0YA2' where id=2; -update noar tt set v0='S63FMJ' where id=3; -update noar ti set v0='S63FMJ' where id=3; -update noar tt set b0='VRLARBNL5LFZZXO' where id=3; -update noar ti set b0='VRLARBNL5LFZZXO' where id=3; -update noar tt set v0='9HBT0A45DHHLBMNK6DOEZYI' where id=3; -update noar ti set v0='9HBT0A45DHHLBMNK6DOEZYI' where id=3; -update noar tt set b1='QLXOSRJSFXFOMJUXSBYHU' where id=3; -update noar ti set b1='QLXOSRJSFXFOMJUXSBYHU' where id=3; -update noar tt set v0='8KDWYIM24DDZD8GBGZ' where id=3; -update noar ti set v0='8KDWYIM24DDZD8GBGZ' where id=3; -update noar tt set b2='W0M52DI0AXF3ITN9FA68MFZDHL1AO7A' where id=3; -update noar ti set b2='W0M52DI0AXF3ITN9FA68MFZDHL1AO7A' where id=3; -update noar tt set v0='816JGL6G79SMB' where id=4; -update noar ti set v0='816JGL6G79SMB' where id=4; -update noar tt set b0='172JZ8EV6BG5E4BS' where id=4; -update noar ti set b0='172JZ8EV6BG5E4BS' where id=4; -update noar tt set v0='6CA538UKIEPYDC7MA2BLT0' where id=4; -update noar ti set v0='6CA538UKIEPYDC7MA2BLT0' where id=4; -update noar tt set b1='2S25DBO8AGY7QYZ9RX9' where id=4; -update noar ti set b1='2S25DBO8AGY7QYZ9RX9' where id=4; -update noar tt set v0='VBHPTZFVTJUHGGE71L2O' where id=4; -update noar ti set v0='VBHPTZFVTJUHGGE71L2O' where id=4; -update noar tt set b2='1ZBLWOA2SI93MVUVNBE82WXY71SQHQ' where id=4; -update noar ti set b2='1ZBLWOA2SI93MVUVNBE82WXY71SQHQ' where id=4; -update noar tt set v0='FW7643Z' where id=5; -update noar ti set v0='FW7643Z' where id=5; -update noar tt set b0='ZN813I0S8998E31Q1QFMHHBU' where id=5; -update noar ti set b0='ZN813I0S8998E31Q1QFMHHBU' where id=5; -update noar tt set v0='KS9LRDYKYKJEUA8VT887' where id=5; -update noar ti set v0='KS9LRDYKYKJEUA8VT887' where id=5; -update noar tt set b1='CXN90DC77STQC8FZBC31' where id=5; -update noar ti set b1='CXN90DC77STQC8FZBC31' where id=5; -update noar tt set v0='HZSW3GC2GD5F1U8SYG16TNIN' where id=5; -update noar ti set v0='HZSW3GC2GD5F1U8SYG16TNIN' where id=5; -update noar tt set b2='PAHYVJY6K5EAMHW2R674' where id=5; -update noar ti set b2='PAHYVJY6K5EAMHW2R674' where id=5; -update noar tt set v0='KYQ2YM4SP8T52EDP7' where id=6; -update noar ti set v0='KYQ2YM4SP8T52EDP7' where id=6; -update noar tt set b0='QGAJ4I' where id=6; -update noar ti set b0='QGAJ4I' where id=6; -update noar tt set v0='HVBHKHZQ1JK4H1QHHQ3TT' where id=6; -update noar ti set v0='HVBHKHZQ1JK4H1QHHQ3TT' where id=6; -update noar tt set b1='6W9U8TSLOW1BGPJRO3LLA7KMACW9' where id=6; -update noar ti set b1='6W9U8TSLOW1BGPJRO3LLA7KMACW9' where id=6; -update noar tt set v0='W14WY3M9SSHZ39C7P54RN1WPJ9YZAB0' where id=6; -update noar ti set v0='W14WY3M9SSHZ39C7P54RN1WPJ9YZAB0' where id=6; -update noar tt set b2='10LWIW6DZJAC' where id=6; -update noar ti set b2='10LWIW6DZJAC' where id=6; -update noar tt set v0='AZJVV74K5E60TAP0R7BXR8N0BL' where id=7; -update noar ti set v0='AZJVV74K5E60TAP0R7BXR8N0BL' where id=7; -update noar tt set b0='HTRBI14ZEVI' where id=7; -update noar ti set b0='HTRBI14ZEVI' where id=7; -update noar tt set v0='YPZDK29RF' where id=7; -update noar ti set v0='YPZDK29RF' where id=7; -update noar tt set b1='IF42WK3QIJDZ2U8Z5PVS53' where id=7; -update noar ti set b1='IF42WK3QIJDZ2U8Z5PVS53' where id=7; -update noar tt set v0='EQ6Q8EY87BHUD9BH762SKD1EYY8' where id=7; -update noar ti set v0='EQ6Q8EY87BHUD9BH762SKD1EYY8' where id=7; -update noar tt set b2='BKC0IGEBLGMXCBK873X0UG4TCO9' where id=7; -update noar ti set b2='BKC0IGEBLGMXCBK873X0UG4TCO9' where id=7; -update noar tt set v0='GVOYN7JMCCC' where id=8; -update noar ti set v0='GVOYN7JMCCC' where id=8; -update noar tt set b0='R22TS1O1GEY34' where id=8; -update noar ti set b0='R22TS1O1GEY34' where id=8; -update noar tt set v0='4RN0AJO7WY30RWALO30QQ2401' where id=8; -update noar ti set v0='4RN0AJO7WY30RWALO30QQ2401' where id=8; -update noar tt set b1='35EU66WGWFFKL64MH2NVQJ9ZCDK' where id=8; -update noar ti set b1='35EU66WGWFFKL64MH2NVQJ9ZCDK' where id=8; -update noar tt set v0='Y8' where id=8; -update noar ti set v0='Y8' where id=8; -update noar tt set b2='QLTZBSKPUFAMX1ZAC' where id=8; -update noar ti set b2='QLTZBSKPUFAMX1ZAC' where id=8; -update noar tt set v0='CECRHPZC3MFG155D' where id=9; -update noar ti set v0='CECRHPZC3MFG155D' where id=9; -update noar tt set b0='8GR46T3GF5TN' where id=9; -update noar ti set b0='8GR46T3GF5TN' where id=9; -update noar tt set v0='W2TCPWFKBPA' where id=9; -update noar ti set v0='W2TCPWFKBPA' where id=9; -update noar tt set b1='ZS20088B3OEEY8X1YRHC8BORTB0TSMEW' where id=9; -update noar ti set b1='ZS20088B3OEEY8X1YRHC8BORTB0TSMEW' where id=9; -update noar tt set v0='FWBPYW42JN3FSCW00' where id=9; -update noar ti set v0='FWBPYW42JN3FSCW00' where id=9; -update noar tt set b2='AM9E34IYOFC' where id=9; -update noar ti set b2='AM9E34IYOFC' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 mediumblob not null, -b1 longblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='PS8276JENLW25W7AWMZB3LN5KF' where id=1; -update noar ti set v0='PS8276JENLW25W7AWMZB3LN5KF' where id=1; -update noar tt set b0='FQ62XXOGQPK14KWKHKDT' where id=1; -update noar ti set b0='FQ62XXOGQPK14KWKHKDT' where id=1; -update noar tt set v0='593GWDBUDFVYIHVW2QYM0KUFWL694M' where id=1; -update noar ti set v0='593GWDBUDFVYIHVW2QYM0KUFWL694M' where id=1; -update noar tt set b1='RW0' where id=1; -update noar ti set b1='RW0' where id=1; -update noar tt set v0='ZW71DEKRQHWI2HX7K2' where id=1; -update noar ti set v0='ZW71DEKRQHWI2HX7K2' where id=1; -update noar tt set b2='TIRRRSO01XQ24MGKG' where id=1; -update noar ti set b2='TIRRRSO01XQ24MGKG' where id=1; -update noar tt set v0='AW6GICB7IOEUDJXTPPZQX' where id=2; -update noar ti set v0='AW6GICB7IOEUDJXTPPZQX' where id=2; -update noar tt set b0='EP5HNJD059W00PXYSDH' where id=2; -update noar ti set b0='EP5HNJD059W00PXYSDH' where id=2; -update noar tt set v0='Z4C4ULL7Q20C5S3IILVZCZRPY3E' where id=2; -update noar ti set v0='Z4C4ULL7Q20C5S3IILVZCZRPY3E' where id=2; -update noar tt set b1='7VBK' where id=2; -update noar ti set b1='7VBK' where id=2; -update noar tt set v0='38L418T35CUX91R4Y8HR9DW' where id=2; -update noar ti set v0='38L418T35CUX91R4Y8HR9DW' where id=2; -update noar tt set b2='7AKF9CTL528AXDYY2G9B31JO6O' where id=2; -update noar ti set b2='7AKF9CTL528AXDYY2G9B31JO6O' where id=2; -update noar tt set v0='JRI0NYXJET2O52DNLHA2' where id=3; -update noar ti set v0='JRI0NYXJET2O52DNLHA2' where id=3; -update noar tt set b0='ERIVS2PFP' where id=3; -update noar ti set b0='ERIVS2PFP' where id=3; -update noar tt set v0='E1VHJS7OPQK5PI' where id=3; -update noar ti set v0='E1VHJS7OPQK5PI' where id=3; -update noar tt set b1='ZJPITF0GVESBKINVI5P1QNPKJVVE' where id=3; -update noar ti set b1='ZJPITF0GVESBKINVI5P1QNPKJVVE' where id=3; -update noar tt set v0='R08MVVJ8NONN9S2KCU063XAUTGLBAZ' where id=3; -update noar ti set v0='R08MVVJ8NONN9S2KCU063XAUTGLBAZ' where id=3; -update noar tt set b2='I52ES10M7L4TXORS' where id=3; -update noar ti set b2='I52ES10M7L4TXORS' where id=3; -update noar tt set v0='223U0E7F2EXKOMFI2E' where id=4; -update noar ti set v0='223U0E7F2EXKOMFI2E' where id=4; -update noar tt set b0='ZF641A' where id=4; -update noar ti set b0='ZF641A' where id=4; -update noar tt set v0='P8DQ1M0W5ONK2' where id=4; -update noar ti set v0='P8DQ1M0W5ONK2' where id=4; -update noar tt set b1='RDMQ3Q7YJW13CD' where id=4; -update noar ti set b1='RDMQ3Q7YJW13CD' where id=4; -update noar tt set v0='XW9LZLLRA8XVUN' where id=4; -update noar ti set v0='XW9LZLLRA8XVUN' where id=4; -update noar tt set b2='OJFYL' where id=4; -update noar ti set b2='OJFYL' where id=4; -update noar tt set v0='MZGAQ08ADA8898CLLQKRKRH8KT9O6' where id=5; -update noar ti set v0='MZGAQ08ADA8898CLLQKRKRH8KT9O6' where id=5; -update noar tt set b0='V5L442FIMKA7U8' where id=5; -update noar ti set b0='V5L442FIMKA7U8' where id=5; -update noar tt set v0='2J4CSIV3GI415AHC' where id=5; -update noar ti set v0='2J4CSIV3GI415AHC' where id=5; -update noar tt set b1='ID0BB5P5XM5GWRKR' where id=5; -update noar ti set b1='ID0BB5P5XM5GWRKR' where id=5; -update noar tt set v0='PP18FE7JX3OITBTC7X7' where id=5; -update noar ti set v0='PP18FE7JX3OITBTC7X7' where id=5; -update noar tt set b2='0W6QFAA9MPB4M2A90O2H58A' where id=5; -update noar ti set b2='0W6QFAA9MPB4M2A90O2H58A' where id=5; -update noar tt set v0='LWRKR8J' where id=6; -update noar ti set v0='LWRKR8J' where id=6; -update noar tt set b0='AHZTRCOTKJO0E' where id=6; -update noar ti set b0='AHZTRCOTKJO0E' where id=6; -update noar tt set v0='H5WHHBYH350Q3' where id=6; -update noar ti set v0='H5WHHBYH350Q3' where id=6; -update noar tt set b1='1EEIEPCDY5OCB7CO622UN' where id=6; -update noar ti set b1='1EEIEPCDY5OCB7CO622UN' where id=6; -update noar tt set v0='A98DPKO' where id=6; -update noar ti set v0='A98DPKO' where id=6; -update noar tt set b2='BJAFLN7RY7E3QB2Q' where id=6; -update noar ti set b2='BJAFLN7RY7E3QB2Q' where id=6; -update noar tt set v0='3QBNUE4ONWQHXJ8NTHER' where id=7; -update noar ti set v0='3QBNUE4ONWQHXJ8NTHER' where id=7; -update noar tt set b0='HFW09CGB1L4EZA2E76KDE9G0SCF' where id=7; -update noar ti set b0='HFW09CGB1L4EZA2E76KDE9G0SCF' where id=7; -update noar tt set v0='HLEK8UNBAD3D4W6VT7QZXQFZ1JI' where id=7; -update noar ti set v0='HLEK8UNBAD3D4W6VT7QZXQFZ1JI' where id=7; -update noar tt set b1='UVN3' where id=7; -update noar ti set b1='UVN3' where id=7; -update noar tt set v0='MU' where id=7; -update noar ti set v0='MU' where id=7; -update noar tt set b2='SPHNA52UAJEGA6AY22VHH0EUS0O' where id=7; -update noar ti set b2='SPHNA52UAJEGA6AY22VHH0EUS0O' where id=7; -update noar tt set v0='ZXUMZ2T3Y' where id=8; -update noar ti set v0='ZXUMZ2T3Y' where id=8; -update noar tt set b0='JYHP9LSMJO0U7KX' where id=8; -update noar ti set b0='JYHP9LSMJO0U7KX' where id=8; -update noar tt set v0='SFQS3F7E873MQ' where id=8; -update noar ti set v0='SFQS3F7E873MQ' where id=8; -update noar tt set b1='E9A5231B2K1EIWDRBLJ3Y7ZZEP2' where id=8; -update noar ti set b1='E9A5231B2K1EIWDRBLJ3Y7ZZEP2' where id=8; -update noar tt set v0='EI95FML8RIXJ43CNELEI1S4X39' where id=8; -update noar ti set v0='EI95FML8RIXJ43CNELEI1S4X39' where id=8; -update noar tt set b2='HD1VYYTYGQHE1ZRRW5CN' where id=8; -update noar ti set b2='HD1VYYTYGQHE1ZRRW5CN' where id=8; -update noar tt set v0='AUA57HQBP5GGDQ' where id=9; -update noar ti set v0='AUA57HQBP5GGDQ' where id=9; -update noar tt set b0='HWZFNCTUMFQGO816CM95ZUOFQ' where id=9; -update noar ti set b0='HWZFNCTUMFQGO816CM95ZUOFQ' where id=9; -update noar tt set v0='GXRANG' where id=9; -update noar ti set v0='GXRANG' where id=9; -update noar tt set b1='6F66DRUTYRLQWS7F9N' where id=9; -update noar ti set b1='6F66DRUTYRLQWS7F9N' where id=9; -update noar tt set v0='65JAXOFRP8VJGA078GKVCB2MMJQXB699' where id=9; -update noar ti set v0='65JAXOFRP8VJGA078GKVCB2MMJQXB699' where id=9; -update noar tt set b2='T5R0EJCJ8159HT9JATA1SU' where id=9; -update noar ti set b2='T5R0EJCJ8159HT9JATA1SU' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 mediumblob null, -b1 longblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='XRYHJO6E2DFBIYWBFQUA9' where id=1; -update noar ti set v0='XRYHJO6E2DFBIYWBFQUA9' where id=1; -update noar tt set b0='R3XBQA7TPBCBUJ9OV4NUBQGXE8JS0MX' where id=1; -update noar ti set b0='R3XBQA7TPBCBUJ9OV4NUBQGXE8JS0MX' where id=1; -update noar tt set v0='0JH205WDY4' where id=1; -update noar ti set v0='0JH205WDY4' where id=1; -update noar tt set b1='XPJLGAM5G5MBMOYL8' where id=1; -update noar ti set b1='XPJLGAM5G5MBMOYL8' where id=1; -update noar tt set v0='5Z4ZTNXUH2OFO8AYIEU' where id=1; -update noar ti set v0='5Z4ZTNXUH2OFO8AYIEU' where id=1; -update noar tt set b2='T6L1A41RFVS5XPOZUW0ZF' where id=1; -update noar ti set b2='T6L1A41RFVS5XPOZUW0ZF' where id=1; -update noar tt set v0='H4ZV7BVH18JJJCL' where id=2; -update noar ti set v0='H4ZV7BVH18JJJCL' where id=2; -update noar tt set b0='UUJ896ZTCDUXHP' where id=2; -update noar ti set b0='UUJ896ZTCDUXHP' where id=2; -update noar tt set v0='QSXKD8WSFV94FN9NXC7FLXOW' where id=2; -update noar ti set v0='QSXKD8WSFV94FN9NXC7FLXOW' where id=2; -update noar tt set b1='I8N6W3K21XI2IQ9BYX2LVPO' where id=2; -update noar ti set b1='I8N6W3K21XI2IQ9BYX2LVPO' where id=2; -update noar tt set v0='Q7TPGAEMO4PGSWXUT4O06PHQ2QH9' where id=2; -update noar ti set v0='Q7TPGAEMO4PGSWXUT4O06PHQ2QH9' where id=2; -update noar tt set b2='APWOW9YW6HUWF9M3RMQUD4I' where id=2; -update noar ti set b2='APWOW9YW6HUWF9M3RMQUD4I' where id=2; -update noar tt set v0='FC0Q71ZFT3KL0LGJRXQUORTYCM917Z' where id=3; -update noar ti set v0='FC0Q71ZFT3KL0LGJRXQUORTYCM917Z' where id=3; -update noar tt set b0='1' where id=3; -update noar ti set b0='1' where id=3; -update noar tt set v0='I7E' where id=3; -update noar ti set v0='I7E' where id=3; -update noar tt set b1='3FDG83' where id=3; -update noar ti set b1='3FDG83' where id=3; -update noar tt set v0='4ORPNPK' where id=3; -update noar ti set v0='4ORPNPK' where id=3; -update noar tt set b2='2ULS9K' where id=3; -update noar ti set b2='2ULS9K' where id=3; -update noar tt set v0='O1PMBHY075U16X935JJMK08S' where id=4; -update noar ti set v0='O1PMBHY075U16X935JJMK08S' where id=4; -update noar tt set b0='K' where id=4; -update noar ti set b0='K' where id=4; -update noar tt set v0='7R9KQ82H4G50ZJ3LMWBAXQNY46NM3X' where id=4; -update noar ti set v0='7R9KQ82H4G50ZJ3LMWBAXQNY46NM3X' where id=4; -update noar tt set b1='EEPNPN8V7SKDXQ7RS2JUIU2D3UZ9DE' where id=4; -update noar ti set b1='EEPNPN8V7SKDXQ7RS2JUIU2D3UZ9DE' where id=4; -update noar tt set v0='0YAIGU3LQJN5DGBEYTYN7NGPMUD' where id=4; -update noar ti set v0='0YAIGU3LQJN5DGBEYTYN7NGPMUD' where id=4; -update noar tt set b2='OR3MRXDHIE4CF8NTR10N' where id=4; -update noar ti set b2='OR3MRXDHIE4CF8NTR10N' where id=4; -update noar tt set v0='4EZSHZKP6BQIPO8US8H1VKVMU1ZT4E' where id=5; -update noar ti set v0='4EZSHZKP6BQIPO8US8H1VKVMU1ZT4E' where id=5; -update noar tt set b0='3H' where id=5; -update noar ti set b0='3H' where id=5; -update noar tt set v0='QMWPWW1CXB' where id=5; -update noar ti set v0='QMWPWW1CXB' where id=5; -update noar tt set b1='AX5RLDPA' where id=5; -update noar ti set b1='AX5RLDPA' where id=5; -update noar tt set v0='4ROM60I2Z33' where id=5; -update noar ti set v0='4ROM60I2Z33' where id=5; -update noar tt set b2='90ZSZJFO0' where id=5; -update noar ti set b2='90ZSZJFO0' where id=5; -update noar tt set v0='DQEVQS4J' where id=6; -update noar ti set v0='DQEVQS4J' where id=6; -update noar tt set b0='YM5MYGDHFWM9GNSG' where id=6; -update noar ti set b0='YM5MYGDHFWM9GNSG' where id=6; -update noar tt set v0='KUT48NZFM7IY' where id=6; -update noar ti set v0='KUT48NZFM7IY' where id=6; -update noar tt set b1='Y2A0EHDBB5UZ4GYFP9WO' where id=6; -update noar ti set b1='Y2A0EHDBB5UZ4GYFP9WO' where id=6; -update noar tt set v0='MJ92HTW2XUQ02JPJ421LUIYLDQ1' where id=6; -update noar ti set v0='MJ92HTW2XUQ02JPJ421LUIYLDQ1' where id=6; -update noar tt set b2='7AMJCK45ASCK4OUB' where id=6; -update noar ti set b2='7AMJCK45ASCK4OUB' where id=6; -update noar tt set v0='Z6UJT8M6Z4KC5E0THQ' where id=7; -update noar ti set v0='Z6UJT8M6Z4KC5E0THQ' where id=7; -update noar tt set b0='W334K2AZZA' where id=7; -update noar ti set b0='W334K2AZZA' where id=7; -update noar tt set v0='5WKZ8O2O89GXP9MC6A6HOQ4OG' where id=7; -update noar ti set v0='5WKZ8O2O89GXP9MC6A6HOQ4OG' where id=7; -update noar tt set b1='OK0W67ORO' where id=7; -update noar ti set b1='OK0W67ORO' where id=7; -update noar tt set v0='AD8234RVE9D88NZQ' where id=7; -update noar ti set v0='AD8234RVE9D88NZQ' where id=7; -update noar tt set b2='NCI9L5L' where id=7; -update noar ti set b2='NCI9L5L' where id=7; -update noar tt set v0='7OH8BLDL' where id=8; -update noar ti set v0='7OH8BLDL' where id=8; -update noar tt set b0='C4RH' where id=8; -update noar ti set b0='C4RH' where id=8; -update noar tt set v0='KHLQ5K9K28ULKKHU6KEV' where id=8; -update noar ti set v0='KHLQ5K9K28ULKKHU6KEV' where id=8; -update noar tt set b1='XJWIA4AF20PZDVQ6H' where id=8; -update noar ti set b1='XJWIA4AF20PZDVQ6H' where id=8; -update noar tt set v0='VAN6D2ZK7ZBR4JRHQUU5' where id=8; -update noar ti set v0='VAN6D2ZK7ZBR4JRHQUU5' where id=8; -update noar tt set b2='84XOQYON69B29PJF1K410X5VGNI5X' where id=8; -update noar ti set b2='84XOQYON69B29PJF1K410X5VGNI5X' where id=8; -update noar tt set v0='X6M2XK1HFG2' where id=9; -update noar ti set v0='X6M2XK1HFG2' where id=9; -update noar tt set b0='K63E' where id=9; -update noar ti set b0='K63E' where id=9; -update noar tt set v0='J82ASN9450NFQBR30S2' where id=9; -update noar ti set v0='J82ASN9450NFQBR30S2' where id=9; -update noar tt set b1='SN2T8P1CCWIBYCRFGXDFJO8B' where id=9; -update noar ti set b1='SN2T8P1CCWIBYCRFGXDFJO8B' where id=9; -update noar tt set v0='5625AQU4J5MNRI65A' where id=9; -update noar ti set v0='5625AQU4J5MNRI65A' where id=9; -update noar tt set b2='I4D5VW0LEQ3PABO' where id=9; -update noar ti set b2='I4D5VW0LEQ3PABO' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 mediumblob null, -b1 longblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='0BPTF92ADUFGK8NPZGP' where id=1; -update noar ti set v0='0BPTF92ADUFGK8NPZGP' where id=1; -update noar tt set b0='A4TC8QLOP7ZMTHRQ88DC7E04AQK5YT' where id=1; -update noar ti set b0='A4TC8QLOP7ZMTHRQ88DC7E04AQK5YT' where id=1; -update noar tt set v0='AVEXP37LCH6NUYO' where id=1; -update noar ti set v0='AVEXP37LCH6NUYO' where id=1; -update noar tt set b1='LZIIS4V6XZV1UO3K99' where id=1; -update noar ti set b1='LZIIS4V6XZV1UO3K99' where id=1; -update noar tt set v0='WI21TIKKAAFGPNFWWMY7NE7U1QM' where id=1; -update noar ti set v0='WI21TIKKAAFGPNFWWMY7NE7U1QM' where id=1; -update noar tt set b2='CRLUDYC9IY8RAZN92VNV' where id=1; -update noar ti set b2='CRLUDYC9IY8RAZN92VNV' where id=1; -update noar tt set v0='AZPAWHEZIVRCI' where id=2; -update noar ti set v0='AZPAWHEZIVRCI' where id=2; -update noar tt set b0='GPHBYSOBEO8338JF8JRMSFRH3' where id=2; -update noar ti set b0='GPHBYSOBEO8338JF8JRMSFRH3' where id=2; -update noar tt set v0='PRX4G3CGU33QXL4D8GMZK4QRTL6' where id=2; -update noar ti set v0='PRX4G3CGU33QXL4D8GMZK4QRTL6' where id=2; -update noar tt set b1='771QV07PW9H6DHVT8NTGJ' where id=2; -update noar ti set b1='771QV07PW9H6DHVT8NTGJ' where id=2; -update noar tt set v0='HMN' where id=2; -update noar ti set v0='HMN' where id=2; -update noar tt set b2='H' where id=2; -update noar ti set b2='H' where id=2; -update noar tt set v0='QT8AHVEEUY4YE3QP' where id=3; -update noar ti set v0='QT8AHVEEUY4YE3QP' where id=3; -update noar tt set b0='G2K48C04S83TCEKYVOV33JVRBGP9AH' where id=3; -update noar ti set b0='G2K48C04S83TCEKYVOV33JVRBGP9AH' where id=3; -update noar tt set v0='K28L41LNI3UNDERFG6F' where id=3; -update noar ti set v0='K28L41LNI3UNDERFG6F' where id=3; -update noar tt set b1='OMTGMTL6BAPFNJM7165SRWZ4A5QIWZM' where id=3; -update noar ti set b1='OMTGMTL6BAPFNJM7165SRWZ4A5QIWZM' where id=3; -update noar tt set v0='ZW9Y8TJU554E32P' where id=3; -update noar ti set v0='ZW9Y8TJU554E32P' where id=3; -update noar tt set b2='V1GVNA2OS8Q2OVJ8CCA6VS5ROQIQ' where id=3; -update noar ti set b2='V1GVNA2OS8Q2OVJ8CCA6VS5ROQIQ' where id=3; -update noar tt set v0='ECN55GSELF1JY' where id=4; -update noar ti set v0='ECN55GSELF1JY' where id=4; -update noar tt set b0='S1' where id=4; -update noar ti set b0='S1' where id=4; -update noar tt set v0='SDK17N5IEDSK8ZNJ5W6D' where id=4; -update noar ti set v0='SDK17N5IEDSK8ZNJ5W6D' where id=4; -update noar tt set b1='WZPKFLC302AROII0' where id=4; -update noar ti set b1='WZPKFLC302AROII0' where id=4; -update noar tt set v0='UOET36' where id=4; -update noar ti set v0='UOET36' where id=4; -update noar tt set b2='TZGTB267C9XCOUM32REXAZE' where id=4; -update noar ti set b2='TZGTB267C9XCOUM32REXAZE' where id=4; -update noar tt set v0='6F9RNV2E6OZ2RJZOX4GRM0JM21HSBGZR' where id=5; -update noar ti set v0='6F9RNV2E6OZ2RJZOX4GRM0JM21HSBGZR' where id=5; -update noar tt set b0='BYMXMSQO5T71VS317HR3T' where id=5; -update noar ti set b0='BYMXMSQO5T71VS317HR3T' where id=5; -update noar tt set v0='9YTTI1EMLUHC0VFC01' where id=5; -update noar ti set v0='9YTTI1EMLUHC0VFC01' where id=5; -update noar tt set b1='B767P9QSSTG3XZPYHM77DB6BXECBRHLK' where id=5; -update noar ti set b1='B767P9QSSTG3XZPYHM77DB6BXECBRHLK' where id=5; -update noar tt set v0='O7KGCHNOX9N' where id=5; -update noar ti set v0='O7KGCHNOX9N' where id=5; -update noar tt set b2='PU8' where id=5; -update noar ti set b2='PU8' where id=5; -update noar tt set v0='HYSOHU' where id=6; -update noar ti set v0='HYSOHU' where id=6; -update noar tt set b0='4OIVYTCHV' where id=6; -update noar ti set b0='4OIVYTCHV' where id=6; -update noar tt set v0='VC8RXP3MN15O10QZ4VZOHUN3PNO' where id=6; -update noar ti set v0='VC8RXP3MN15O10QZ4VZOHUN3PNO' where id=6; -update noar tt set b1='HS9TLI0SS4GLH9HJE3MBBWRCFO1' where id=6; -update noar ti set b1='HS9TLI0SS4GLH9HJE3MBBWRCFO1' where id=6; -update noar tt set v0='T6570PPLMITPCPD' where id=6; -update noar ti set v0='T6570PPLMITPCPD' where id=6; -update noar tt set b2='D76S0N5AI7XIID6T1ASG8NTWP92S' where id=6; -update noar ti set b2='D76S0N5AI7XIID6T1ASG8NTWP92S' where id=6; -update noar tt set v0='IANCRZHUB31M4R4VGA' where id=7; -update noar ti set v0='IANCRZHUB31M4R4VGA' where id=7; -update noar tt set b0='961A1S' where id=7; -update noar ti set b0='961A1S' where id=7; -update noar tt set v0='MU21O5VHGYC4RL3MJ8EZ' where id=7; -update noar ti set v0='MU21O5VHGYC4RL3MJ8EZ' where id=7; -update noar tt set b1='OS7M7QJLG5TUQ4MOMBJ' where id=7; -update noar ti set b1='OS7M7QJLG5TUQ4MOMBJ' where id=7; -update noar tt set v0='UY' where id=7; -update noar ti set v0='UY' where id=7; -update noar tt set b2='JRK9MJ752JTPUKMZZQPF6' where id=7; -update noar ti set b2='JRK9MJ752JTPUKMZZQPF6' where id=7; -update noar tt set v0='D0KT' where id=8; -update noar ti set v0='D0KT' where id=8; -update noar tt set b0='A7LAQ6U07Q92OP0UTB2HSZ84F50R' where id=8; -update noar ti set b0='A7LAQ6U07Q92OP0UTB2HSZ84F50R' where id=8; -update noar tt set v0='CV5OY830BXQQXL95JDX3' where id=8; -update noar ti set v0='CV5OY830BXQQXL95JDX3' where id=8; -update noar tt set b1='1ZNFCTS3C2M' where id=8; -update noar ti set b1='1ZNFCTS3C2M' where id=8; -update noar tt set v0='2M5XH8SUK' where id=8; -update noar ti set v0='2M5XH8SUK' where id=8; -update noar tt set b2='5B335GUE2CA65AO8' where id=8; -update noar ti set b2='5B335GUE2CA65AO8' where id=8; -update noar tt set v0='UKR7HGQ' where id=9; -update noar ti set v0='UKR7HGQ' where id=9; -update noar tt set b0='VQH8ONUT7REUY2UF4RZT2HE3IZ5OXS94' where id=9; -update noar ti set b0='VQH8ONUT7REUY2UF4RZT2HE3IZ5OXS94' where id=9; -update noar tt set v0='1ZGID7OWPXRUNPMTLAVB' where id=9; -update noar ti set v0='1ZGID7OWPXRUNPMTLAVB' where id=9; -update noar tt set b1='3736ZBEFFYM1VB4ONERO' where id=9; -update noar ti set b1='3736ZBEFFYM1VB4ONERO' where id=9; -update noar tt set v0='DM41BH75U' where id=9; -update noar ti set v0='DM41BH75U' where id=9; -update noar tt set b2='Y4KONN4LCCDPL6TO8D20ZIPQ8OXBNFZ' where id=9; -update noar ti set b2='Y4KONN4LCCDPL6TO8D20ZIPQ8OXBNFZ' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 mediumblob not null, -b1 longblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='P9754ISX9ROQI08URN1' where id=1; -update noar ti set v0='P9754ISX9ROQI08URN1' where id=1; -update noar tt set b0='4BBTZ86HNXI6XSDIN2L' where id=1; -update noar ti set b0='4BBTZ86HNXI6XSDIN2L' where id=1; -update noar tt set v0='0RAT02RZ4IKOB3' where id=1; -update noar ti set v0='0RAT02RZ4IKOB3' where id=1; -update noar tt set b1='16XK' where id=1; -update noar ti set b1='16XK' where id=1; -update noar tt set v0='N3FG8WXXK6N17UHB8ZM285U' where id=1; -update noar ti set v0='N3FG8WXXK6N17UHB8ZM285U' where id=1; -update noar tt set b2='RMYJW6GIOKWPWN4UAEIDC' where id=1; -update noar ti set b2='RMYJW6GIOKWPWN4UAEIDC' where id=1; -update noar tt set v0='PX91W0OI4F' where id=2; -update noar ti set v0='PX91W0OI4F' where id=2; -update noar tt set b0='A78080RH6BZE5X1J8QU9H49YHAZV' where id=2; -update noar ti set b0='A78080RH6BZE5X1J8QU9H49YHAZV' where id=2; -update noar tt set v0='JOPIZFWL0ZLP7FC2RL1013B0' where id=2; -update noar ti set v0='JOPIZFWL0ZLP7FC2RL1013B0' where id=2; -update noar tt set b1='VAGWTRWGIL2' where id=2; -update noar ti set b1='VAGWTRWGIL2' where id=2; -update noar tt set v0='M2XRI5T8YS4Q0TX0YG' where id=2; -update noar ti set v0='M2XRI5T8YS4Q0TX0YG' where id=2; -update noar tt set b2='YSPL89LJE0PAFXNTZZJ5W6T7O' where id=2; -update noar ti set b2='YSPL89LJE0PAFXNTZZJ5W6T7O' where id=2; -update noar tt set v0='12MMIH2CKX1UBVRQ6DEQBIB7FYTSV' where id=3; -update noar ti set v0='12MMIH2CKX1UBVRQ6DEQBIB7FYTSV' where id=3; -update noar tt set b0='CZG1U8EELR1Y6' where id=3; -update noar ti set b0='CZG1U8EELR1Y6' where id=3; -update noar tt set v0='MU0D0R9BZPUNTILNCLIN2M700H0XM' where id=3; -update noar ti set v0='MU0D0R9BZPUNTILNCLIN2M700H0XM' where id=3; -update noar tt set b1='F3QL0ELJ7MER7TT8O4YZ8H' where id=3; -update noar ti set b1='F3QL0ELJ7MER7TT8O4YZ8H' where id=3; -update noar tt set v0='QXPFZV' where id=3; -update noar ti set v0='QXPFZV' where id=3; -update noar tt set b2='AC59PD1PD15SH' where id=3; -update noar ti set b2='AC59PD1PD15SH' where id=3; -update noar tt set v0='YGOAL6EI4F92QMOXSEF4FANMVAKW' where id=4; -update noar ti set v0='YGOAL6EI4F92QMOXSEF4FANMVAKW' where id=4; -update noar tt set b0='3XQDDPCX2WB0MI5KSMK1N7CR3ZA2' where id=4; -update noar ti set b0='3XQDDPCX2WB0MI5KSMK1N7CR3ZA2' where id=4; -update noar tt set v0='GRSIW0UA9UNZ6XW28VYOIVWLS' where id=4; -update noar ti set v0='GRSIW0UA9UNZ6XW28VYOIVWLS' where id=4; -update noar tt set b1='4CWUPLJD9JIO8HN' where id=4; -update noar ti set b1='4CWUPLJD9JIO8HN' where id=4; -update noar tt set v0='H4OD1RGACNC5LBU6ULY0PGPGBCZ' where id=4; -update noar ti set v0='H4OD1RGACNC5LBU6ULY0PGPGBCZ' where id=4; -update noar tt set b2='HRE87PTZXG' where id=4; -update noar ti set b2='HRE87PTZXG' where id=4; -update noar tt set v0='0258P3I2M5' where id=5; -update noar ti set v0='0258P3I2M5' where id=5; -update noar tt set b0='1DKFW0MKOBZY30ACA6192' where id=5; -update noar ti set b0='1DKFW0MKOBZY30ACA6192' where id=5; -update noar tt set v0='VM6BPD8GNB18FUCM1C0F6KORQSA5' where id=5; -update noar ti set v0='VM6BPD8GNB18FUCM1C0F6KORQSA5' where id=5; -update noar tt set b1='QS2ZSLW5NJJ799HX8' where id=5; -update noar ti set b1='QS2ZSLW5NJJ799HX8' where id=5; -update noar tt set v0='PV52H6MO' where id=5; -update noar ti set v0='PV52H6MO' where id=5; -update noar tt set b2='SR7G9PX66DF3LIZBY69CWT9B0MXAE' where id=5; -update noar ti set b2='SR7G9PX66DF3LIZBY69CWT9B0MXAE' where id=5; -update noar tt set v0='M3BJN377JMRFQS5AY' where id=6; -update noar ti set v0='M3BJN377JMRFQS5AY' where id=6; -update noar tt set b0='GSZB' where id=6; -update noar ti set b0='GSZB' where id=6; -update noar tt set v0='IRUI2NWN1RDT171EA4' where id=6; -update noar ti set v0='IRUI2NWN1RDT171EA4' where id=6; -update noar tt set b1='OFVG79YD4PYDE3T' where id=6; -update noar ti set b1='OFVG79YD4PYDE3T' where id=6; -update noar tt set v0='EDZCEV5MSY1J' where id=6; -update noar ti set v0='EDZCEV5MSY1J' where id=6; -update noar tt set b2='2J6DCPASNBWD3TC7A12ZK022CIZ8A' where id=6; -update noar ti set b2='2J6DCPASNBWD3TC7A12ZK022CIZ8A' where id=6; -update noar tt set v0='79XDYIF9M49T4S25PQ6RBDSQ8' where id=7; -update noar ti set v0='79XDYIF9M49T4S25PQ6RBDSQ8' where id=7; -update noar tt set b0='Y7D49VAUV8' where id=7; -update noar ti set b0='Y7D49VAUV8' where id=7; -update noar tt set v0='CNQBLJAIRXCF37D4ZJ2VYRK1L' where id=7; -update noar ti set v0='CNQBLJAIRXCF37D4ZJ2VYRK1L' where id=7; -update noar tt set b1='8LQ2' where id=7; -update noar ti set b1='8LQ2' where id=7; -update noar tt set v0='CSHU3BW8EAH3B' where id=7; -update noar ti set v0='CSHU3BW8EAH3B' where id=7; -update noar tt set b2='XSLTUBDNBOPI5TLHVC8N1R9ALD22' where id=7; -update noar ti set b2='XSLTUBDNBOPI5TLHVC8N1R9ALD22' where id=7; -update noar tt set v0='7GX' where id=8; -update noar ti set v0='7GX' where id=8; -update noar tt set b0='GX20R0WSGFZLWVHJNTZK61QF8CUH4XXL' where id=8; -update noar ti set b0='GX20R0WSGFZLWVHJNTZK61QF8CUH4XXL' where id=8; -update noar tt set v0='6RFA36W' where id=8; -update noar ti set v0='6RFA36W' where id=8; -update noar tt set b1='DWEGGV3R14Q9NB3ZFJO9CQS2OKWI' where id=8; -update noar ti set b1='DWEGGV3R14Q9NB3ZFJO9CQS2OKWI' where id=8; -update noar tt set v0='BFPY09E4SPIBG09GDUPR7EI1FMM' where id=8; -update noar ti set v0='BFPY09E4SPIBG09GDUPR7EI1FMM' where id=8; -update noar tt set b2='YA8ODNAS2PQ6KE6TTBW65B' where id=8; -update noar ti set b2='YA8ODNAS2PQ6KE6TTBW65B' where id=8; -update noar tt set v0='YX77DNRPZ6ZSIZVFKM' where id=9; -update noar ti set v0='YX77DNRPZ6ZSIZVFKM' where id=9; -update noar tt set b0='IAOV80TPE' where id=9; -update noar ti set b0='IAOV80TPE' where id=9; -update noar tt set v0='VVI4660KTG2O8LX7IVON3SABIW4NMS' where id=9; -update noar ti set v0='VVI4660KTG2O8LX7IVON3SABIW4NMS' where id=9; -update noar tt set b1='SEDK8F56J9UAP3X0LTSCIVUK' where id=9; -update noar ti set b1='SEDK8F56J9UAP3X0LTSCIVUK' where id=9; -update noar tt set v0='P04MRK1G7' where id=9; -update noar ti set v0='P04MRK1G7' where id=9; -update noar tt set b2='TKGH91K6OT2AE9M9TLL3GLR7BF' where id=9; -update noar ti set b2='TKGH91K6OT2AE9M9TLL3GLR7BF' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 mediumblob not null, -b1 longblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='T1274APIHBBP4B2U2L21ZU2XXZA' where id=1; -update noar ti set v0='T1274APIHBBP4B2U2L21ZU2XXZA' where id=1; -update noar tt set b0='R6BNDO36V0ZVP1I831RG24MHUVWMC' where id=1; -update noar ti set b0='R6BNDO36V0ZVP1I831RG24MHUVWMC' where id=1; -update noar tt set v0='WNYH9PHZ02C9D9UM' where id=1; -update noar ti set v0='WNYH9PHZ02C9D9UM' where id=1; -update noar tt set b1='YFF' where id=1; -update noar ti set b1='YFF' where id=1; -update noar tt set v0='Y4XZ5P3G0PLCD3LEA87A28LTLN1E' where id=1; -update noar ti set v0='Y4XZ5P3G0PLCD3LEA87A28LTLN1E' where id=1; -update noar tt set b2='5JTLME485' where id=1; -update noar ti set b2='5JTLME485' where id=1; -update noar tt set v0='F4RJXJX7WIE5Y3' where id=2; -update noar ti set v0='F4RJXJX7WIE5Y3' where id=2; -update noar tt set b0='7NFHZU1NN' where id=2; -update noar ti set b0='7NFHZU1NN' where id=2; -update noar tt set v0='NTIE5DW1F28WSMZ7D30W' where id=2; -update noar ti set v0='NTIE5DW1F28WSMZ7D30W' where id=2; -update noar tt set b1='QMPFBZASME' where id=2; -update noar ti set b1='QMPFBZASME' where id=2; -update noar tt set v0='NG' where id=2; -update noar ti set v0='NG' where id=2; -update noar tt set b2='AGVRQ4GV38JE1' where id=2; -update noar ti set b2='AGVRQ4GV38JE1' where id=2; -update noar tt set v0='39UE1TEX2BA442N' where id=3; -update noar ti set v0='39UE1TEX2BA442N' where id=3; -update noar tt set b0='BE5GLXPCCAY81DFMFC06J4CFYC6VZK8W' where id=3; -update noar ti set b0='BE5GLXPCCAY81DFMFC06J4CFYC6VZK8W' where id=3; -update noar tt set v0='IKC944DZARP9DH' where id=3; -update noar ti set v0='IKC944DZARP9DH' where id=3; -update noar tt set b1='SQ5USLL10UIV14OZUJ3A8VBZN12Q3DS' where id=3; -update noar ti set b1='SQ5USLL10UIV14OZUJ3A8VBZN12Q3DS' where id=3; -update noar tt set v0='I0T6NPLXDMGWZJVS' where id=3; -update noar ti set v0='I0T6NPLXDMGWZJVS' where id=3; -update noar tt set b2='EE7O0QXJ' where id=3; -update noar ti set b2='EE7O0QXJ' where id=3; -update noar tt set v0='LDBP8T5IE3XVV8QV402F9TK0O' where id=4; -update noar ti set v0='LDBP8T5IE3XVV8QV402F9TK0O' where id=4; -update noar tt set b0='HCJXTNPL0UTX' where id=4; -update noar ti set b0='HCJXTNPL0UTX' where id=4; -update noar tt set v0='LX4O8' where id=4; -update noar ti set v0='LX4O8' where id=4; -update noar tt set b1='55Z2H7JJ' where id=4; -update noar ti set b1='55Z2H7JJ' where id=4; -update noar tt set v0='KABNXA8VZTK1OF4R8TWOM6IWX7A26CU' where id=4; -update noar ti set v0='KABNXA8VZTK1OF4R8TWOM6IWX7A26CU' where id=4; -update noar tt set b2='7QF43' where id=4; -update noar ti set b2='7QF43' where id=4; -update noar tt set v0='1M0EUUZ8S3ET2' where id=5; -update noar ti set v0='1M0EUUZ8S3ET2' where id=5; -update noar tt set b0='SQWBIH0E90M43R' where id=5; -update noar ti set b0='SQWBIH0E90M43R' where id=5; -update noar tt set v0='J1597GUSZZWOPU6D3RCIO' where id=5; -update noar ti set v0='J1597GUSZZWOPU6D3RCIO' where id=5; -update noar tt set b1='C' where id=5; -update noar ti set b1='C' where id=5; -update noar tt set v0='8UPD193X9P12KGKN179' where id=5; -update noar ti set v0='8UPD193X9P12KGKN179' where id=5; -update noar tt set b2='BQLC431LDK4GTLN93' where id=5; -update noar ti set b2='BQLC431LDK4GTLN93' where id=5; -update noar tt set v0='FKIRPWPEAGN0XNHINS9' where id=6; -update noar ti set v0='FKIRPWPEAGN0XNHINS9' where id=6; -update noar tt set b0='W' where id=6; -update noar ti set b0='W' where id=6; -update noar tt set v0='C26NC9B0X68XYH' where id=6; -update noar ti set v0='C26NC9B0X68XYH' where id=6; -update noar tt set b1='PBV8MRYF3DX5P' where id=6; -update noar ti set b1='PBV8MRYF3DX5P' where id=6; -update noar tt set v0='IZ9RL24Z9631QT7KJJHYMM1S6LB8' where id=6; -update noar ti set v0='IZ9RL24Z9631QT7KJJHYMM1S6LB8' where id=6; -update noar tt set b2='95UQDOGLDG2O6I8SF2' where id=6; -update noar ti set b2='95UQDOGLDG2O6I8SF2' where id=6; -update noar tt set v0='MAOMFDRT' where id=7; -update noar ti set v0='MAOMFDRT' where id=7; -update noar tt set b0='1LPNHX3MNGOWKAML0OKK63IBV6M0' where id=7; -update noar ti set b0='1LPNHX3MNGOWKAML0OKK63IBV6M0' where id=7; -update noar tt set v0='HEAT2I13KB6PGO4090CRT0MA0DOIXZ' where id=7; -update noar ti set v0='HEAT2I13KB6PGO4090CRT0MA0DOIXZ' where id=7; -update noar tt set b1='9H9VRMA0NPBOZ' where id=7; -update noar ti set b1='9H9VRMA0NPBOZ' where id=7; -update noar tt set v0='T' where id=7; -update noar ti set v0='T' where id=7; -update noar tt set b2='SD6EPVYZIXSBI5EMCTZQK060ZMF' where id=7; -update noar ti set b2='SD6EPVYZIXSBI5EMCTZQK060ZMF' where id=7; -update noar tt set v0='3FS8KW7FSUW' where id=8; -update noar ti set v0='3FS8KW7FSUW' where id=8; -update noar tt set b0='CHDAHU0DRI6' where id=8; -update noar ti set b0='CHDAHU0DRI6' where id=8; -update noar tt set v0='12R217A2EXCSOD9UA' where id=8; -update noar ti set v0='12R217A2EXCSOD9UA' where id=8; -update noar tt set b1='57U9SRYFJ3J0258A1Q4BEELYQX9' where id=8; -update noar ti set b1='57U9SRYFJ3J0258A1Q4BEELYQX9' where id=8; -update noar tt set v0='7' where id=8; -update noar ti set v0='7' where id=8; -update noar tt set b2='0T055ZOMZ5QJ5' where id=8; -update noar ti set b2='0T055ZOMZ5QJ5' where id=8; -update noar tt set v0='UAH0JHN6PG0RJ3' where id=9; -update noar ti set v0='UAH0JHN6PG0RJ3' where id=9; -update noar tt set b0='S3' where id=9; -update noar ti set b0='S3' where id=9; -update noar tt set v0='2C0F5F1ZHPV1' where id=9; -update noar ti set v0='2C0F5F1ZHPV1' where id=9; -update noar tt set b1='A1GVONA281EGWFOJP2UB' where id=9; -update noar ti set b1='A1GVONA281EGWFOJP2UB' where id=9; -update noar tt set v0='0VQOMMO9' where id=9; -update noar ti set v0='0VQOMMO9' where id=9; -update noar tt set b2='IXITT8D1SLMKFJYPGD3ZXTD4B5G' where id=9; -update noar ti set b2='IXITT8D1SLMKFJYPGD3ZXTD4B5G' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 longblob null, -b1 tinyblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='CR1XGA' where id=1; -update noar ti set v0='CR1XGA' where id=1; -update noar tt set b0='E8' where id=1; -update noar ti set b0='E8' where id=1; -update noar tt set v0='L1NASIKWECW0CCXXCW5HTIE5FL' where id=1; -update noar ti set v0='L1NASIKWECW0CCXXCW5HTIE5FL' where id=1; -update noar tt set b1='WP66DCCBAFZGOXMV8JMSUUVC3TK' where id=1; -update noar ti set b1='WP66DCCBAFZGOXMV8JMSUUVC3TK' where id=1; -update noar tt set v0='EIDQ6N74ADVELZPASLV0I07LN' where id=1; -update noar ti set v0='EIDQ6N74ADVELZPASLV0I07LN' where id=1; -update noar tt set b2='5IK7YPSDFZWNU' where id=1; -update noar ti set b2='5IK7YPSDFZWNU' where id=1; -update noar tt set v0='HJUNFY' where id=2; -update noar ti set v0='HJUNFY' where id=2; -update noar tt set b0='2III2HXL24GFAOFU8BU' where id=2; -update noar ti set b0='2III2HXL24GFAOFU8BU' where id=2; -update noar tt set v0='5X7O6USCXDLGP889HBX5ZR6' where id=2; -update noar ti set v0='5X7O6USCXDLGP889HBX5ZR6' where id=2; -update noar tt set b1='9YN' where id=2; -update noar ti set b1='9YN' where id=2; -update noar tt set v0='ZAQ3FXYRY2REPXK9UL90F' where id=2; -update noar ti set v0='ZAQ3FXYRY2REPXK9UL90F' where id=2; -update noar tt set b2='JB088Y0DUU' where id=2; -update noar ti set b2='JB088Y0DUU' where id=2; -update noar tt set v0='O2BFIR1CB5K2OPX7NYFBYS14' where id=3; -update noar ti set v0='O2BFIR1CB5K2OPX7NYFBYS14' where id=3; -update noar tt set b0='TAX0AS3BOFYRPZXQR7M7C0C3' where id=3; -update noar ti set b0='TAX0AS3BOFYRPZXQR7M7C0C3' where id=3; -update noar tt set v0='JTBORLWDTO36AQL' where id=3; -update noar ti set v0='JTBORLWDTO36AQL' where id=3; -update noar tt set b1='R72OPFWSIBYXJYBKTVKVSG1UVVV0' where id=3; -update noar ti set b1='R72OPFWSIBYXJYBKTVKVSG1UVVV0' where id=3; -update noar tt set v0='QB9VYA8BV6NOMEJAYN36B' where id=3; -update noar ti set v0='QB9VYA8BV6NOMEJAYN36B' where id=3; -update noar tt set b2='KTL0HUCN0M' where id=3; -update noar ti set b2='KTL0HUCN0M' where id=3; -update noar tt set v0='AH1Q0TTRBLLKSHIIGHM2UC' where id=4; -update noar ti set v0='AH1Q0TTRBLLKSHIIGHM2UC' where id=4; -update noar tt set b0='Z259P259Z9UV' where id=4; -update noar ti set b0='Z259P259Z9UV' where id=4; -update noar tt set v0='CSN6QCX27GZHGJ111TR6G0FU4EM' where id=4; -update noar ti set v0='CSN6QCX27GZHGJ111TR6G0FU4EM' where id=4; -update noar tt set b1='7' where id=4; -update noar ti set b1='7' where id=4; -update noar tt set v0='4H3J8TO' where id=4; -update noar ti set v0='4H3J8TO' where id=4; -update noar tt set b2='XY8BF07UKW773O' where id=4; -update noar ti set b2='XY8BF07UKW773O' where id=4; -update noar tt set v0='MYD7B92M4U5PJ5F2XR8LEASE062MSB91' where id=5; -update noar ti set v0='MYD7B92M4U5PJ5F2XR8LEASE062MSB91' where id=5; -update noar tt set b0='R' where id=5; -update noar ti set b0='R' where id=5; -update noar tt set v0='GY1MJUTPI8B71YQK45QXA1' where id=5; -update noar ti set v0='GY1MJUTPI8B71YQK45QXA1' where id=5; -update noar tt set b1='7WP725AY1O147HHK372S61B' where id=5; -update noar ti set b1='7WP725AY1O147HHK372S61B' where id=5; -update noar tt set v0='RIHTML9TVADI6KCUL4U7DRW' where id=5; -update noar ti set v0='RIHTML9TVADI6KCUL4U7DRW' where id=5; -update noar tt set b2='O2HSARPHHL4' where id=5; -update noar ti set b2='O2HSARPHHL4' where id=5; -update noar tt set v0='RGU6JH5' where id=6; -update noar ti set v0='RGU6JH5' where id=6; -update noar tt set b0='ESRK7RRGVRJTXMJE78AHPTLE4WP62DM' where id=6; -update noar ti set b0='ESRK7RRGVRJTXMJE78AHPTLE4WP62DM' where id=6; -update noar tt set v0='O7GOV5G5SHGFWMNNHDC0JVQ2IT1L7' where id=6; -update noar ti set v0='O7GOV5G5SHGFWMNNHDC0JVQ2IT1L7' where id=6; -update noar tt set b1='SMKZZS0I504FDLODZTHTZMCJDR9XP1' where id=6; -update noar ti set b1='SMKZZS0I504FDLODZTHTZMCJDR9XP1' where id=6; -update noar tt set v0='G7ZSSFMBDVU8EOYSEHKBY' where id=6; -update noar ti set v0='G7ZSSFMBDVU8EOYSEHKBY' where id=6; -update noar tt set b2='LNJJO33NMF9I9Z65NPKZC1NCHIEI38' where id=6; -update noar ti set b2='LNJJO33NMF9I9Z65NPKZC1NCHIEI38' where id=6; -update noar tt set v0='CA3L4IG8' where id=7; -update noar ti set v0='CA3L4IG8' where id=7; -update noar tt set b0='7AZ' where id=7; -update noar ti set b0='7AZ' where id=7; -update noar tt set v0='C49AL32LNCVW' where id=7; -update noar ti set v0='C49AL32LNCVW' where id=7; -update noar tt set b1='XAC495IV7WSC2CBIYYYOG0' where id=7; -update noar ti set b1='XAC495IV7WSC2CBIYYYOG0' where id=7; -update noar tt set v0='UC6RTUBJMLOF2IZ' where id=7; -update noar ti set v0='UC6RTUBJMLOF2IZ' where id=7; -update noar tt set b2='MJJUH66554ZN6N3B18PU4XOZX9ETF2M' where id=7; -update noar ti set b2='MJJUH66554ZN6N3B18PU4XOZX9ETF2M' where id=7; -update noar tt set v0='92W81S36LCQ' where id=8; -update noar ti set v0='92W81S36LCQ' where id=8; -update noar tt set b0='QUHA43D9RK73B0N7JSYZ6WDWGZLK' where id=8; -update noar ti set b0='QUHA43D9RK73B0N7JSYZ6WDWGZLK' where id=8; -update noar tt set v0='CDCMSQ' where id=8; -update noar ti set v0='CDCMSQ' where id=8; -update noar tt set b1='FW1S1MMI' where id=8; -update noar ti set b1='FW1S1MMI' where id=8; -update noar tt set v0='9IY1JC' where id=8; -update noar ti set v0='9IY1JC' where id=8; -update noar tt set b2='D3YYVPJW7ATCDEVU2NAXWLRFOY7N' where id=8; -update noar ti set b2='D3YYVPJW7ATCDEVU2NAXWLRFOY7N' where id=8; -update noar tt set v0='7XDSX8FVQHCYZ7LF4DNFKRXJK3CY71US' where id=9; -update noar ti set v0='7XDSX8FVQHCYZ7LF4DNFKRXJK3CY71US' where id=9; -update noar tt set b0='GN9OJF' where id=9; -update noar ti set b0='GN9OJF' where id=9; -update noar tt set v0='I5UAABASIYUD53OHBD2CMT' where id=9; -update noar ti set v0='I5UAABASIYUD53OHBD2CMT' where id=9; -update noar tt set b1='3XE6IIEHMCI89BXWUPWZTF' where id=9; -update noar ti set b1='3XE6IIEHMCI89BXWUPWZTF' where id=9; -update noar tt set v0='PU37BK87C2F433FH697TA' where id=9; -update noar ti set v0='PU37BK87C2F433FH697TA' where id=9; -update noar tt set b2='3NAXFO3RIYZO77AJP1BM3W5FFAJM3C' where id=9; -update noar ti set b2='3NAXFO3RIYZO77AJP1BM3W5FFAJM3C' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 longblob null, -b1 tinyblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='RTMTUTG8' where id=1; -update noar ti set v0='RTMTUTG8' where id=1; -update noar tt set b0='X7VE' where id=1; -update noar ti set b0='X7VE' where id=1; -update noar tt set v0='5SX0TV5E725' where id=1; -update noar ti set v0='5SX0TV5E725' where id=1; -update noar tt set b1='SBDCGTM5JXWJNPDVOGD9YRS' where id=1; -update noar ti set b1='SBDCGTM5JXWJNPDVOGD9YRS' where id=1; -update noar tt set v0='26KIJZIGNWIX7N26VYQNPX4KY1BJT' where id=1; -update noar ti set v0='26KIJZIGNWIX7N26VYQNPX4KY1BJT' where id=1; -update noar tt set b2='BU3QL18B5PTSX3G7ZY7K4QM' where id=1; -update noar ti set b2='BU3QL18B5PTSX3G7ZY7K4QM' where id=1; -update noar tt set v0='Z6M4I1H0MJJOPKP6SVHR1R93PTZQJW9' where id=2; -update noar ti set v0='Z6M4I1H0MJJOPKP6SVHR1R93PTZQJW9' where id=2; -update noar tt set b0='SXAD1J5K2MAVN9TERSE' where id=2; -update noar ti set b0='SXAD1J5K2MAVN9TERSE' where id=2; -update noar tt set v0='WZ7Q48Y4P' where id=2; -update noar ti set v0='WZ7Q48Y4P' where id=2; -update noar tt set b1='LPV8WVT6F63F6X1XQ13YA' where id=2; -update noar ti set b1='LPV8WVT6F63F6X1XQ13YA' where id=2; -update noar tt set v0='TA2X5W60R03HU2SCR1RPAJ41249C14E5' where id=2; -update noar ti set v0='TA2X5W60R03HU2SCR1RPAJ41249C14E5' where id=2; -update noar tt set b2='3Q6KCQO4QYANCNQG8SACQ7DR2' where id=2; -update noar ti set b2='3Q6KCQO4QYANCNQG8SACQ7DR2' where id=2; -update noar tt set v0='8' where id=3; -update noar ti set v0='8' where id=3; -update noar tt set b0='5Z1SST1CFQHJC76KNF9U1YIL9' where id=3; -update noar ti set b0='5Z1SST1CFQHJC76KNF9U1YIL9' where id=3; -update noar tt set v0='BXF8' where id=3; -update noar ti set v0='BXF8' where id=3; -update noar tt set b1='DT8CMO7WWANCVCLW0WSX7TDCHN99GP84' where id=3; -update noar ti set b1='DT8CMO7WWANCVCLW0WSX7TDCHN99GP84' where id=3; -update noar tt set v0='WDPU' where id=3; -update noar ti set v0='WDPU' where id=3; -update noar tt set b2='FB2LQXNAPVP6U8LHJDER' where id=3; -update noar ti set b2='FB2LQXNAPVP6U8LHJDER' where id=3; -update noar tt set v0='SK3PO1RAD' where id=4; -update noar ti set v0='SK3PO1RAD' where id=4; -update noar tt set b0='WGBK47FR56TAE758UOC8' where id=4; -update noar ti set b0='WGBK47FR56TAE758UOC8' where id=4; -update noar tt set v0='NV' where id=4; -update noar ti set v0='NV' where id=4; -update noar tt set b1='TY589HFE91KG' where id=4; -update noar ti set b1='TY589HFE91KG' where id=4; -update noar tt set v0='HYDK69ZP8TIW31LPWE7WL1N7SCPN' where id=4; -update noar ti set v0='HYDK69ZP8TIW31LPWE7WL1N7SCPN' where id=4; -update noar tt set b2='W' where id=4; -update noar ti set b2='W' where id=4; -update noar tt set v0='2O42O63C4TVZGN1VGYZQDA' where id=5; -update noar ti set v0='2O42O63C4TVZGN1VGYZQDA' where id=5; -update noar tt set b0='WTL4DSC6HHHAQJ504VFWXD9B' where id=5; -update noar ti set b0='WTL4DSC6HHHAQJ504VFWXD9B' where id=5; -update noar tt set v0='3TCWGRJR7RA4M951K93XK80E' where id=5; -update noar ti set v0='3TCWGRJR7RA4M951K93XK80E' where id=5; -update noar tt set b1='DHBXPUGDSVD4' where id=5; -update noar ti set b1='DHBXPUGDSVD4' where id=5; -update noar tt set v0='9W1F67VS4U3EMA7LP2IXUNYMW53WG' where id=5; -update noar ti set v0='9W1F67VS4U3EMA7LP2IXUNYMW53WG' where id=5; -update noar tt set b2='3VPY3IZ68J' where id=5; -update noar ti set b2='3VPY3IZ68J' where id=5; -update noar tt set v0='MF8SUTEEUHCF3MOH79PFV' where id=6; -update noar ti set v0='MF8SUTEEUHCF3MOH79PFV' where id=6; -update noar tt set b0='M9G887ULQV0XU' where id=6; -update noar ti set b0='M9G887ULQV0XU' where id=6; -update noar tt set v0='E5YXO1FFW5LTWWMHC3L' where id=6; -update noar ti set v0='E5YXO1FFW5LTWWMHC3L' where id=6; -update noar tt set b1='3MEXXTITVPX5R7IPZDDI' where id=6; -update noar ti set b1='3MEXXTITVPX5R7IPZDDI' where id=6; -update noar tt set v0='K5N' where id=6; -update noar ti set v0='K5N' where id=6; -update noar tt set b2='SCJBLZC3YGBKPK2GIYNQ4' where id=6; -update noar ti set b2='SCJBLZC3YGBKPK2GIYNQ4' where id=6; -update noar tt set v0='RQ0XBRUZTGWG5SPCXKJ2T7XR92' where id=7; -update noar ti set v0='RQ0XBRUZTGWG5SPCXKJ2T7XR92' where id=7; -update noar tt set b0='H2H2K5YIQZX9KP24EE8ENNPKU17WY' where id=7; -update noar ti set b0='H2H2K5YIQZX9KP24EE8ENNPKU17WY' where id=7; -update noar tt set v0='I3XNMPSMIM2LCMC' where id=7; -update noar ti set v0='I3XNMPSMIM2LCMC' where id=7; -update noar tt set b1='SBL2' where id=7; -update noar ti set b1='SBL2' where id=7; -update noar tt set v0='WDE6C9UGCJD' where id=7; -update noar ti set v0='WDE6C9UGCJD' where id=7; -update noar tt set b2='J8Q1C5BWYB7XAMVPX497Z5HCN91Y' where id=7; -update noar ti set b2='J8Q1C5BWYB7XAMVPX497Z5HCN91Y' where id=7; -update noar tt set v0='LTLKN6CVZEK1IKHAHYDMYNE6620ZPW5' where id=8; -update noar ti set v0='LTLKN6CVZEK1IKHAHYDMYNE6620ZPW5' where id=8; -update noar tt set b0='GI6KMXXT1JY54PN7M58AW2PN5JK6G' where id=8; -update noar ti set b0='GI6KMXXT1JY54PN7M58AW2PN5JK6G' where id=8; -update noar tt set v0='5X2N' where id=8; -update noar ti set v0='5X2N' where id=8; -update noar tt set b1='NHFYK9V8TZNPSTOPLHU98' where id=8; -update noar ti set b1='NHFYK9V8TZNPSTOPLHU98' where id=8; -update noar tt set v0='BQWXTLN620N7BY4VCM' where id=8; -update noar ti set v0='BQWXTLN620N7BY4VCM' where id=8; -update noar tt set b2='VYGGUA0EOP' where id=8; -update noar ti set b2='VYGGUA0EOP' where id=8; -update noar tt set v0='CDYYKNWYLSY1F9N0EDDJ6RS63ETV' where id=9; -update noar ti set v0='CDYYKNWYLSY1F9N0EDDJ6RS63ETV' where id=9; -update noar tt set b0='ZGPLEIP8X8YT4HQJCV4Y6JWLWYHD0S2S' where id=9; -update noar ti set b0='ZGPLEIP8X8YT4HQJCV4Y6JWLWYHD0S2S' where id=9; -update noar tt set v0='CT608GR265F4R91LJOQUXJY2A1OB2' where id=9; -update noar ti set v0='CT608GR265F4R91LJOQUXJY2A1OB2' where id=9; -update noar tt set b1='9AIYYZQ2W5VP2HB8FTAOIPGECU4CCS' where id=9; -update noar ti set b1='9AIYYZQ2W5VP2HB8FTAOIPGECU4CCS' where id=9; -update noar tt set v0='ET' where id=9; -update noar ti set v0='ET' where id=9; -update noar tt set b2='T8HOBUPHXNDI6T6QR2WKSE0DMUOE' where id=9; -update noar ti set b2='T8HOBUPHXNDI6T6QR2WKSE0DMUOE' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 longblob not null, -b1 tinyblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='JDZTWT75GK' where id=1; -update noar ti set v0='JDZTWT75GK' where id=1; -update noar tt set b0='JAN6LMJO9FYXI5WAGRN8KKXT' where id=1; -update noar ti set b0='JAN6LMJO9FYXI5WAGRN8KKXT' where id=1; -update noar tt set v0='EMG430PG6EH9PNRLV0RXW' where id=1; -update noar ti set v0='EMG430PG6EH9PNRLV0RXW' where id=1; -update noar tt set b1='DKZ9TYWDVXCT4J97T7L' where id=1; -update noar ti set b1='DKZ9TYWDVXCT4J97T7L' where id=1; -update noar tt set v0='8N94K60XISURNM49HE6' where id=1; -update noar ti set v0='8N94K60XISURNM49HE6' where id=1; -update noar tt set b2='8IGRG23FVMSLBMVDQKZ2LQCE' where id=1; -update noar ti set b2='8IGRG23FVMSLBMVDQKZ2LQCE' where id=1; -update noar tt set v0='ZSPMQAAPH89NCZU9BFW118MO0M' where id=2; -update noar ti set v0='ZSPMQAAPH89NCZU9BFW118MO0M' where id=2; -update noar tt set b0='UT' where id=2; -update noar ti set b0='UT' where id=2; -update noar tt set v0='BUX76QV0U6S0TKN0X75DJ' where id=2; -update noar ti set v0='BUX76QV0U6S0TKN0X75DJ' where id=2; -update noar tt set b1='SPC' where id=2; -update noar ti set b1='SPC' where id=2; -update noar tt set v0='VLK0JQYJ1WSZW3' where id=2; -update noar ti set v0='VLK0JQYJ1WSZW3' where id=2; -update noar tt set b2='JINEEUSGSR61P08RVB2ILZ0' where id=2; -update noar ti set b2='JINEEUSGSR61P08RVB2ILZ0' where id=2; -update noar tt set v0='1CXDB3DF4KXPDYSUGGOJXMNK7TNKHIE' where id=3; -update noar ti set v0='1CXDB3DF4KXPDYSUGGOJXMNK7TNKHIE' where id=3; -update noar tt set b0='WXJ5LSF4PQXP17K6XRGJ' where id=3; -update noar ti set b0='WXJ5LSF4PQXP17K6XRGJ' where id=3; -update noar tt set v0='NL55D8511QCFO0HSMAUKCHZ0CVG' where id=3; -update noar ti set v0='NL55D8511QCFO0HSMAUKCHZ0CVG' where id=3; -update noar tt set b1='M07QGB3AYF' where id=3; -update noar ti set b1='M07QGB3AYF' where id=3; -update noar tt set v0='I9Q5EZDTI3H2L8FLWTLUJ7SVXBS59N9' where id=3; -update noar ti set v0='I9Q5EZDTI3H2L8FLWTLUJ7SVXBS59N9' where id=3; -update noar tt set b2='2VQGZMRVFARPEJFKHI' where id=3; -update noar ti set b2='2VQGZMRVFARPEJFKHI' where id=3; -update noar tt set v0='ZLREW5MJM64' where id=4; -update noar ti set v0='ZLREW5MJM64' where id=4; -update noar tt set b0='XWAGF' where id=4; -update noar ti set b0='XWAGF' where id=4; -update noar tt set v0='8QSQO9369AC4' where id=4; -update noar ti set v0='8QSQO9369AC4' where id=4; -update noar tt set b1='LJGH2B5XK316GS5LO8UCXZSN07V9LW9X' where id=4; -update noar ti set b1='LJGH2B5XK316GS5LO8UCXZSN07V9LW9X' where id=4; -update noar tt set v0='WNS04K7Y4A93Y39J' where id=4; -update noar ti set v0='WNS04K7Y4A93Y39J' where id=4; -update noar tt set b2='3MB2F7LE4IVIAPWHQT0BVIR468J7T1NY' where id=4; -update noar ti set b2='3MB2F7LE4IVIAPWHQT0BVIR468J7T1NY' where id=4; -update noar tt set v0='JH8FPOKV5X8JMCAY' where id=5; -update noar ti set v0='JH8FPOKV5X8JMCAY' where id=5; -update noar tt set b0='SO4B3TBLXFPWM5RSTF9LOAO8U7DGIGDW' where id=5; -update noar ti set b0='SO4B3TBLXFPWM5RSTF9LOAO8U7DGIGDW' where id=5; -update noar tt set v0='L2GLQ9LDDFTQLXARKISRE3' where id=5; -update noar ti set v0='L2GLQ9LDDFTQLXARKISRE3' where id=5; -update noar tt set b1='EPPR17' where id=5; -update noar ti set b1='EPPR17' where id=5; -update noar tt set v0='BDZFW5LMD1FI4KVOS3' where id=5; -update noar ti set v0='BDZFW5LMD1FI4KVOS3' where id=5; -update noar tt set b2='WJD0PUENGA9H0' where id=5; -update noar ti set b2='WJD0PUENGA9H0' where id=5; -update noar tt set v0='TIJM7AJP' where id=6; -update noar ti set v0='TIJM7AJP' where id=6; -update noar tt set b0='JIBSVOPPL7XTFZBHNA' where id=6; -update noar ti set b0='JIBSVOPPL7XTFZBHNA' where id=6; -update noar tt set v0='53KEIE9064KHPLBFX939' where id=6; -update noar ti set v0='53KEIE9064KHPLBFX939' where id=6; -update noar tt set b1='G9JJ4JGJJLCY48NMAMWQRJ372V0N0' where id=6; -update noar ti set b1='G9JJ4JGJJLCY48NMAMWQRJ372V0N0' where id=6; -update noar tt set v0='XT6BU32Z' where id=6; -update noar ti set v0='XT6BU32Z' where id=6; -update noar tt set b2='08VCFYRT6VWA6LT' where id=6; -update noar ti set b2='08VCFYRT6VWA6LT' where id=6; -update noar tt set v0='E6W8FCMHOTFVA' where id=7; -update noar ti set v0='E6W8FCMHOTFVA' where id=7; -update noar tt set b0='NAX' where id=7; -update noar ti set b0='NAX' where id=7; -update noar tt set v0='V5RSUKWZZVGYU77QK7M4O2M' where id=7; -update noar ti set v0='V5RSUKWZZVGYU77QK7M4O2M' where id=7; -update noar tt set b1='1E' where id=7; -update noar ti set b1='1E' where id=7; -update noar tt set v0='WU5US9BV2161QYVAVIR8SOX4' where id=7; -update noar ti set v0='WU5US9BV2161QYVAVIR8SOX4' where id=7; -update noar tt set b2='547' where id=7; -update noar ti set b2='547' where id=7; -update noar tt set v0='DBPYKFTAI7ZOZFX24GGGULHKIHXCCEHZ' where id=8; -update noar ti set v0='DBPYKFTAI7ZOZFX24GGGULHKIHXCCEHZ' where id=8; -update noar tt set b0='9P22MJWBRALIQM34A5NPVG' where id=8; -update noar ti set b0='9P22MJWBRALIQM34A5NPVG' where id=8; -update noar tt set v0='IXNPII71VQ' where id=8; -update noar ti set v0='IXNPII71VQ' where id=8; -update noar tt set b1='10M7W6HBY0WOWSP6TZUROEDG0P5P' where id=8; -update noar ti set b1='10M7W6HBY0WOWSP6TZUROEDG0P5P' where id=8; -update noar tt set v0='R9H5XNWJMBZ' where id=8; -update noar ti set v0='R9H5XNWJMBZ' where id=8; -update noar tt set b2='D5BJV2Q9U1XNREU3Z8ENZW6G3Y4' where id=8; -update noar ti set b2='D5BJV2Q9U1XNREU3Z8ENZW6G3Y4' where id=8; -update noar tt set v0='F6QDB9GGTX5F11VGHUKZI' where id=9; -update noar ti set v0='F6QDB9GGTX5F11VGHUKZI' where id=9; -update noar tt set b0='C9JG9WQ9A15S4' where id=9; -update noar ti set b0='C9JG9WQ9A15S4' where id=9; -update noar tt set v0='JJ2JN7S5' where id=9; -update noar ti set v0='JJ2JN7S5' where id=9; -update noar tt set b1='UTBD5J5TZ0' where id=9; -update noar ti set b1='UTBD5J5TZ0' where id=9; -update noar tt set v0='Z696FKBSCT4N' where id=9; -update noar ti set v0='Z696FKBSCT4N' where id=9; -update noar tt set b2='X02OHHSTWDB' where id=9; -update noar ti set b2='X02OHHSTWDB' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 longblob not null, -b1 tinyblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='V8ET1B6MD0V383' where id=1; -update noar ti set v0='V8ET1B6MD0V383' where id=1; -update noar tt set b0='C63Q2NL3TX' where id=1; -update noar ti set b0='C63Q2NL3TX' where id=1; -update noar tt set v0='HBM69BKQFXB7WI4VDLV6K8MBND8RU' where id=1; -update noar ti set v0='HBM69BKQFXB7WI4VDLV6K8MBND8RU' where id=1; -update noar tt set b1='3N' where id=1; -update noar ti set b1='3N' where id=1; -update noar tt set v0='GRMMJT3PN2JWE9QZOA8D8' where id=1; -update noar ti set v0='GRMMJT3PN2JWE9QZOA8D8' where id=1; -update noar tt set b2='R9I9GZIZQ3YH0O8X' where id=1; -update noar ti set b2='R9I9GZIZQ3YH0O8X' where id=1; -update noar tt set v0='ZHP22TVL4HZWLMLDDLR7KAK3W0NF45W' where id=2; -update noar ti set v0='ZHP22TVL4HZWLMLDDLR7KAK3W0NF45W' where id=2; -update noar tt set b0='XGB0O43GM55EO9IW4' where id=2; -update noar ti set b0='XGB0O43GM55EO9IW4' where id=2; -update noar tt set v0='XHA1PKD29B1I90O6EWS9C' where id=2; -update noar ti set v0='XHA1PKD29B1I90O6EWS9C' where id=2; -update noar tt set b1='6UZM7NZCRON0J1PIVBUVSLNQQJ' where id=2; -update noar ti set b1='6UZM7NZCRON0J1PIVBUVSLNQQJ' where id=2; -update noar tt set v0='YPGMIW1IUBERGCXJP58EPIIF' where id=2; -update noar ti set v0='YPGMIW1IUBERGCXJP58EPIIF' where id=2; -update noar tt set b2='FHR3BL30LGDQEXN' where id=2; -update noar ti set b2='FHR3BL30LGDQEXN' where id=2; -update noar tt set v0='XCX2XPKN6TRU0WNLISGIER39PB' where id=3; -update noar ti set v0='XCX2XPKN6TRU0WNLISGIER39PB' where id=3; -update noar tt set b0='3COZNPSBT9SWK3' where id=3; -update noar ti set b0='3COZNPSBT9SWK3' where id=3; -update noar tt set v0='8GA22CP2UJGR22RYO8' where id=3; -update noar ti set v0='8GA22CP2UJGR22RYO8' where id=3; -update noar tt set b1='Q3U2XVKP' where id=3; -update noar ti set b1='Q3U2XVKP' where id=3; -update noar tt set v0='2KQJWE5XR4JJFQDM58Q5Z9QGFV96YHX' where id=3; -update noar ti set v0='2KQJWE5XR4JJFQDM58Q5Z9QGFV96YHX' where id=3; -update noar tt set b2='702' where id=3; -update noar ti set b2='702' where id=3; -update noar tt set v0='ZC0GRJUJBIOSANCAPDED2FEH8OQS' where id=4; -update noar ti set v0='ZC0GRJUJBIOSANCAPDED2FEH8OQS' where id=4; -update noar tt set b0='9LBI9' where id=4; -update noar ti set b0='9LBI9' where id=4; -update noar tt set v0='YZEISY903PWBWS200L' where id=4; -update noar ti set v0='YZEISY903PWBWS200L' where id=4; -update noar tt set b1='D' where id=4; -update noar ti set b1='D' where id=4; -update noar tt set v0='A00YQ0JYM2HVARHX1I2I1K06' where id=4; -update noar ti set v0='A00YQ0JYM2HVARHX1I2I1K06' where id=4; -update noar tt set b2='9T1XICJFE5E1ACKB17VSDNKJHOK1' where id=4; -update noar ti set b2='9T1XICJFE5E1ACKB17VSDNKJHOK1' where id=4; -update noar tt set v0='U75DI3FMZIHS' where id=5; -update noar ti set v0='U75DI3FMZIHS' where id=5; -update noar tt set b0='X2OFOMJ8X5DSD75C0UOYS2HH' where id=5; -update noar ti set b0='X2OFOMJ8X5DSD75C0UOYS2HH' where id=5; -update noar tt set v0='NU77J5H6Y1' where id=5; -update noar ti set v0='NU77J5H6Y1' where id=5; -update noar tt set b1='WBW' where id=5; -update noar ti set b1='WBW' where id=5; -update noar tt set v0='3C6EWF8' where id=5; -update noar ti set v0='3C6EWF8' where id=5; -update noar tt set b2='GK3SWJG4KAIF4' where id=5; -update noar ti set b2='GK3SWJG4KAIF4' where id=5; -update noar tt set v0='C3X68CP7DV7A1WWCUD4F' where id=6; -update noar ti set v0='C3X68CP7DV7A1WWCUD4F' where id=6; -update noar tt set b0='HVF0WS' where id=6; -update noar ti set b0='HVF0WS' where id=6; -update noar tt set v0='T63GM2' where id=6; -update noar ti set v0='T63GM2' where id=6; -update noar tt set b1='XN23KY' where id=6; -update noar ti set b1='XN23KY' where id=6; -update noar tt set v0='ZB0G' where id=6; -update noar ti set v0='ZB0G' where id=6; -update noar tt set b2='KA74QT1I2N4FBHT95A' where id=6; -update noar ti set b2='KA74QT1I2N4FBHT95A' where id=6; -update noar tt set v0='WMZQZFE5QQBKHSZAUR9H5TMW15HS' where id=7; -update noar ti set v0='WMZQZFE5QQBKHSZAUR9H5TMW15HS' where id=7; -update noar tt set b0='XF7OOBW7A9W84' where id=7; -update noar ti set b0='XF7OOBW7A9W84' where id=7; -update noar tt set v0='C5QNBG40LB' where id=7; -update noar ti set v0='C5QNBG40LB' where id=7; -update noar tt set b1='B5ABZ78' where id=7; -update noar ti set b1='B5ABZ78' where id=7; -update noar tt set v0='UJP' where id=7; -update noar ti set v0='UJP' where id=7; -update noar tt set b2='SM5VVQLM4GNXDDWZWO5NFZ5TUOUECB2U' where id=7; -update noar ti set b2='SM5VVQLM4GNXDDWZWO5NFZ5TUOUECB2U' where id=7; -update noar tt set v0='GG9I8JP4499CHGYEESY0' where id=8; -update noar ti set v0='GG9I8JP4499CHGYEESY0' where id=8; -update noar tt set b0='SJSEH6KYWRWEFEH89BB652A5BK911N4E' where id=8; -update noar ti set b0='SJSEH6KYWRWEFEH89BB652A5BK911N4E' where id=8; -update noar tt set v0='EVRT6T82RJSF5LY96E0QEPT1XH5H' where id=8; -update noar ti set v0='EVRT6T82RJSF5LY96E0QEPT1XH5H' where id=8; -update noar tt set b1='N' where id=8; -update noar ti set b1='N' where id=8; -update noar tt set v0='RZQOGVX4Q' where id=8; -update noar ti set v0='RZQOGVX4Q' where id=8; -update noar tt set b2='V91DL9J' where id=8; -update noar ti set b2='V91DL9J' where id=8; -update noar tt set v0='W0F' where id=9; -update noar ti set v0='W0F' where id=9; -update noar tt set b0='3' where id=9; -update noar ti set b0='3' where id=9; -update noar tt set v0='7W3UCZM696JOB4D2' where id=9; -update noar ti set v0='7W3UCZM696JOB4D2' where id=9; -update noar tt set b1='FLAX9FH851YA1B0Q8S6PUCU8U9R2FH' where id=9; -update noar ti set b1='FLAX9FH851YA1B0Q8S6PUCU8U9R2FH' where id=9; -update noar tt set v0='F' where id=9; -update noar ti set v0='F' where id=9; -update noar tt set b2='S9MC06HV7MP64K4WFYPFEJ6WW7F42L' where id=9; -update noar ti set b2='S9MC06HV7MP64K4WFYPFEJ6WW7F42L' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 longblob null, -b1 tinyblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='Y0TZFAFPO' where id=1; -update noar ti set v0='Y0TZFAFPO' where id=1; -update noar tt set b0='2AJED9GAEV3L134X2X1FQSTDGH' where id=1; -update noar ti set b0='2AJED9GAEV3L134X2X1FQSTDGH' where id=1; -update noar tt set v0='GUBD7S0WD86QA8HGF' where id=1; -update noar ti set v0='GUBD7S0WD86QA8HGF' where id=1; -update noar tt set b1='2V7D7S6PR4X1AKWC' where id=1; -update noar ti set b1='2V7D7S6PR4X1AKWC' where id=1; -update noar tt set v0='BAE7FM27LJ3KI9TS68KL0Y25K3' where id=1; -update noar ti set v0='BAE7FM27LJ3KI9TS68KL0Y25K3' where id=1; -update noar tt set b2='W6A3JEVTJX24R' where id=1; -update noar ti set b2='W6A3JEVTJX24R' where id=1; -update noar tt set v0='UBWEBIPMQ2NXM43X6EURRZHG79Q3TJI' where id=2; -update noar ti set v0='UBWEBIPMQ2NXM43X6EURRZHG79Q3TJI' where id=2; -update noar tt set b0='8YXEKMBBYQLMC64A6TRYAA' where id=2; -update noar ti set b0='8YXEKMBBYQLMC64A6TRYAA' where id=2; -update noar tt set v0='HU44Z6YHY5R311J' where id=2; -update noar ti set v0='HU44Z6YHY5R311J' where id=2; -update noar tt set b1='AXX672PN0EKWJYWN1F99IB90P' where id=2; -update noar ti set b1='AXX672PN0EKWJYWN1F99IB90P' where id=2; -update noar tt set v0='RUSPN4JRC74C3LSGS' where id=2; -update noar ti set v0='RUSPN4JRC74C3LSGS' where id=2; -update noar tt set b2='SQQBG7T6I7ZULI1FZK0KTGCAF' where id=2; -update noar ti set b2='SQQBG7T6I7ZULI1FZK0KTGCAF' where id=2; -update noar tt set v0='X2N1NAH504TXGFKYENFL3ES0OTF' where id=3; -update noar ti set v0='X2N1NAH504TXGFKYENFL3ES0OTF' where id=3; -update noar tt set b0='N6CQXE66GXE4TQV0O97PO1UFK3MGI6D' where id=3; -update noar ti set b0='N6CQXE66GXE4TQV0O97PO1UFK3MGI6D' where id=3; -update noar tt set v0='GIR0FXNUJOIGGSQ4XV8FCMJLPZ4FD36' where id=3; -update noar ti set v0='GIR0FXNUJOIGGSQ4XV8FCMJLPZ4FD36' where id=3; -update noar tt set b1='UDPP' where id=3; -update noar ti set b1='UDPP' where id=3; -update noar tt set v0='HEVV0XFYYOI4HN677NT775ODYYJZM' where id=3; -update noar ti set v0='HEVV0XFYYOI4HN677NT775ODYYJZM' where id=3; -update noar tt set b2='5471SQJNYHOKVC2HVO8OQ5FJA6T7P' where id=3; -update noar ti set b2='5471SQJNYHOKVC2HVO8OQ5FJA6T7P' where id=3; -update noar tt set v0='I4' where id=4; -update noar ti set v0='I4' where id=4; -update noar tt set b0='4SZQEWI7WP' where id=4; -update noar ti set b0='4SZQEWI7WP' where id=4; -update noar tt set v0='GRF1XVBVD' where id=4; -update noar ti set v0='GRF1XVBVD' where id=4; -update noar tt set b1='NQY3WWU' where id=4; -update noar ti set b1='NQY3WWU' where id=4; -update noar tt set v0='0UI5SRLRGOMI' where id=4; -update noar ti set v0='0UI5SRLRGOMI' where id=4; -update noar tt set b2='I1IO3HUIDWU9CK2GPG6OH' where id=4; -update noar ti set b2='I1IO3HUIDWU9CK2GPG6OH' where id=4; -update noar tt set v0='ZYIOVR4I9VHKUBA3JV0A5' where id=5; -update noar ti set v0='ZYIOVR4I9VHKUBA3JV0A5' where id=5; -update noar tt set b0='GN061QFF0DTCSSIHFNC3I' where id=5; -update noar ti set b0='GN061QFF0DTCSSIHFNC3I' where id=5; -update noar tt set v0='LFB91L6WVCNIV1XUQ88B9KBJGIRH1KTA' where id=5; -update noar ti set v0='LFB91L6WVCNIV1XUQ88B9KBJGIRH1KTA' where id=5; -update noar tt set b1='SF6LHC5Y8VIJVI6HYU8' where id=5; -update noar ti set b1='SF6LHC5Y8VIJVI6HYU8' where id=5; -update noar tt set v0='H61ML8BKE22A1U' where id=5; -update noar ti set v0='H61ML8BKE22A1U' where id=5; -update noar tt set b2='2ZSJ89CRFJ4CSR7H9D9ABDCJS9' where id=5; -update noar ti set b2='2ZSJ89CRFJ4CSR7H9D9ABDCJS9' where id=5; -update noar tt set v0='6ZRR5WMP6LK41K8PWY5SBJ' where id=6; -update noar ti set v0='6ZRR5WMP6LK41K8PWY5SBJ' where id=6; -update noar tt set b0='UIM4YDBTUKZ4KA9E1OJJDH0IPPDWJ6YR' where id=6; -update noar ti set b0='UIM4YDBTUKZ4KA9E1OJJDH0IPPDWJ6YR' where id=6; -update noar tt set v0='UL774WMW2' where id=6; -update noar ti set v0='UL774WMW2' where id=6; -update noar tt set b1='LDYP0LXVSR7V6CFST0' where id=6; -update noar ti set b1='LDYP0LXVSR7V6CFST0' where id=6; -update noar tt set v0='CY5O25XWQHOHVMJ02' where id=6; -update noar ti set v0='CY5O25XWQHOHVMJ02' where id=6; -update noar tt set b2='BIMCIIDQT1JD1' where id=6; -update noar ti set b2='BIMCIIDQT1JD1' where id=6; -update noar tt set v0='K6' where id=7; -update noar ti set v0='K6' where id=7; -update noar tt set b0='A7CSST68SL' where id=7; -update noar ti set b0='A7CSST68SL' where id=7; -update noar tt set v0='99RUPK8PHGC' where id=7; -update noar ti set v0='99RUPK8PHGC' where id=7; -update noar tt set b1='F27B43FXYVNCBEBKH7X2F3MNDGBC0GG' where id=7; -update noar ti set b1='F27B43FXYVNCBEBKH7X2F3MNDGBC0GG' where id=7; -update noar tt set v0='V153NO' where id=7; -update noar ti set v0='V153NO' where id=7; -update noar tt set b2='9D0JW6FJV0J91PN4M1RRUR2M' where id=7; -update noar ti set b2='9D0JW6FJV0J91PN4M1RRUR2M' where id=7; -update noar tt set v0='4FAWYLHXETBPGUI0M0963BL' where id=8; -update noar ti set v0='4FAWYLHXETBPGUI0M0963BL' where id=8; -update noar tt set b0='0NR021OY5XIQX' where id=8; -update noar ti set b0='0NR021OY5XIQX' where id=8; -update noar tt set v0='EUEIQDO4MCV59K2DSAQHZ' where id=8; -update noar ti set v0='EUEIQDO4MCV59K2DSAQHZ' where id=8; -update noar tt set b1='24GNKUXK' where id=8; -update noar ti set b1='24GNKUXK' where id=8; -update noar tt set v0='JIQNYN5SW974MY9GI1YCN5K3X' where id=8; -update noar ti set v0='JIQNYN5SW974MY9GI1YCN5K3X' where id=8; -update noar tt set b2='9OGVXHP498Q882IHV' where id=8; -update noar ti set b2='9OGVXHP498Q882IHV' where id=8; -update noar tt set v0='YIRUN7D9HELPIFI04P1P9NHD' where id=9; -update noar ti set v0='YIRUN7D9HELPIFI04P1P9NHD' where id=9; -update noar tt set b0='KE048PRIXCQETE' where id=9; -update noar ti set b0='KE048PRIXCQETE' where id=9; -update noar tt set v0='UKWHY5NIA' where id=9; -update noar ti set v0='UKWHY5NIA' where id=9; -update noar tt set b1='1IMO1WU3MONAXGZE' where id=9; -update noar ti set b1='1IMO1WU3MONAXGZE' where id=9; -update noar tt set v0='W23HUU7DNUB7M4VGQ38C668' where id=9; -update noar ti set v0='W23HUU7DNUB7M4VGQ38C668' where id=9; -update noar tt set b2='PECRR4P2K93AARS3D' where id=9; -update noar ti set b2='PECRR4P2K93AARS3D' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 longblob null, -b1 tinyblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='B1IGO7DV20L56324S8' where id=1; -update noar ti set v0='B1IGO7DV20L56324S8' where id=1; -update noar tt set b0='MJ8CQD0' where id=1; -update noar ti set b0='MJ8CQD0' where id=1; -update noar tt set v0='S1LA5VV5G9QGH8' where id=1; -update noar ti set v0='S1LA5VV5G9QGH8' where id=1; -update noar tt set b1='J9OY0V' where id=1; -update noar ti set b1='J9OY0V' where id=1; -update noar tt set v0='5EFRNODWQ792HNH3ZJTP7DK3KWU4' where id=1; -update noar ti set v0='5EFRNODWQ792HNH3ZJTP7DK3KWU4' where id=1; -update noar tt set b2='4RG9SMNZC0J' where id=1; -update noar ti set b2='4RG9SMNZC0J' where id=1; -update noar tt set v0='YXA6MMZP' where id=2; -update noar ti set v0='YXA6MMZP' where id=2; -update noar tt set b0='FH3XKR97ETX8BDCLAJBBWL33CADU' where id=2; -update noar ti set b0='FH3XKR97ETX8BDCLAJBBWL33CADU' where id=2; -update noar tt set v0='GGOUD' where id=2; -update noar ti set v0='GGOUD' where id=2; -update noar tt set b1='5B4Y734Q6BSBR5BN35GBGOZ' where id=2; -update noar ti set b1='5B4Y734Q6BSBR5BN35GBGOZ' where id=2; -update noar tt set v0='L7E6RO53E' where id=2; -update noar ti set v0='L7E6RO53E' where id=2; -update noar tt set b2='SE678Z1A7OIGGALRFUCXV2TD9' where id=2; -update noar ti set b2='SE678Z1A7OIGGALRFUCXV2TD9' where id=2; -update noar tt set v0='H0D91Q3RT7H5OJZR' where id=3; -update noar ti set v0='H0D91Q3RT7H5OJZR' where id=3; -update noar tt set b0='XZM16WP9FF4JDBB8AG2M' where id=3; -update noar ti set b0='XZM16WP9FF4JDBB8AG2M' where id=3; -update noar tt set v0='7FFUQ2VU9ZPM0XJVA1OSB' where id=3; -update noar ti set v0='7FFUQ2VU9ZPM0XJVA1OSB' where id=3; -update noar tt set b1='IR7QINVXUYRH7' where id=3; -update noar ti set b1='IR7QINVXUYRH7' where id=3; -update noar tt set v0='9Q4CFI4YXX7VSXV' where id=3; -update noar ti set v0='9Q4CFI4YXX7VSXV' where id=3; -update noar tt set b2='AR02Q3OY9K37ZFUPZG' where id=3; -update noar ti set b2='AR02Q3OY9K37ZFUPZG' where id=3; -update noar tt set v0='2YHV63R51IIK0B2' where id=4; -update noar ti set v0='2YHV63R51IIK0B2' where id=4; -update noar tt set b0='5VXJZZSJLFCEYVBKJ9410Z9FY1KWR4' where id=4; -update noar ti set b0='5VXJZZSJLFCEYVBKJ9410Z9FY1KWR4' where id=4; -update noar tt set v0='M8KJFKIU9' where id=4; -update noar ti set v0='M8KJFKIU9' where id=4; -update noar tt set b1='3GKFA1VK0G7FWFNFCMH6FWDR22S' where id=4; -update noar ti set b1='3GKFA1VK0G7FWFNFCMH6FWDR22S' where id=4; -update noar tt set v0='M5K2XHQ9S5I5701R2IP3V94HOFYDK' where id=4; -update noar ti set v0='M5K2XHQ9S5I5701R2IP3V94HOFYDK' where id=4; -update noar tt set b2='MITK5L82OVS1ZKKSKHFXPQ0IGSYYRT' where id=4; -update noar ti set b2='MITK5L82OVS1ZKKSKHFXPQ0IGSYYRT' where id=4; -update noar tt set v0='146B6' where id=5; -update noar ti set v0='146B6' where id=5; -update noar tt set b0='NIV9UQ0YMCPFQYEX8EH7AO264M33Q4S9' where id=5; -update noar ti set b0='NIV9UQ0YMCPFQYEX8EH7AO264M33Q4S9' where id=5; -update noar tt set v0='53K6LDH3A47JZDCYYF0NA4XY49' where id=5; -update noar ti set v0='53K6LDH3A47JZDCYYF0NA4XY49' where id=5; -update noar tt set b1='KOXNN77WBW40GPFOBMAYP38LQJ' where id=5; -update noar ti set b1='KOXNN77WBW40GPFOBMAYP38LQJ' where id=5; -update noar tt set v0='6CD20XU7YBKQBX7XWBW4GZ2APQZ848' where id=5; -update noar ti set v0='6CD20XU7YBKQBX7XWBW4GZ2APQZ848' where id=5; -update noar tt set b2='FY3M1K67FYR2BZHKH9ZHX0AH6UYA' where id=5; -update noar ti set b2='FY3M1K67FYR2BZHKH9ZHX0AH6UYA' where id=5; -update noar tt set v0='5M1D0YRXIUVAOBIOM1NN' where id=6; -update noar ti set v0='5M1D0YRXIUVAOBIOM1NN' where id=6; -update noar tt set b0='81OULN2Z5U3ZR2F' where id=6; -update noar ti set b0='81OULN2Z5U3ZR2F' where id=6; -update noar tt set v0='NDDE8SHV1T1F10M90N' where id=6; -update noar ti set v0='NDDE8SHV1T1F10M90N' where id=6; -update noar tt set b1='8LCC5RHZ9ID5T366BFOT57HGJSI8J' where id=6; -update noar ti set b1='8LCC5RHZ9ID5T366BFOT57HGJSI8J' where id=6; -update noar tt set v0='78I0ODYN5' where id=6; -update noar ti set v0='78I0ODYN5' where id=6; -update noar tt set b2='6KZVJUE97U4T' where id=6; -update noar ti set b2='6KZVJUE97U4T' where id=6; -update noar tt set v0='65TLN8GCF022' where id=7; -update noar ti set v0='65TLN8GCF022' where id=7; -update noar tt set b0='I' where id=7; -update noar ti set b0='I' where id=7; -update noar tt set v0='NKPCBWKX983O0G65RZTDSPF5113AT' where id=7; -update noar ti set v0='NKPCBWKX983O0G65RZTDSPF5113AT' where id=7; -update noar tt set b1='J1VGQHTJX1TVILO2I1XKH8KV70OCFA9' where id=7; -update noar ti set b1='J1VGQHTJX1TVILO2I1XKH8KV70OCFA9' where id=7; -update noar tt set v0='CR9ZJPVFPBXF994JKXTASXYCEF' where id=7; -update noar ti set v0='CR9ZJPVFPBXF994JKXTASXYCEF' where id=7; -update noar tt set b2='1CDYV630DYAJNVY' where id=7; -update noar ti set b2='1CDYV630DYAJNVY' where id=7; -update noar tt set v0='N9OOB6PD2AORDA' where id=8; -update noar ti set v0='N9OOB6PD2AORDA' where id=8; -update noar tt set b0='47U7FAS5G0796N5YQM' where id=8; -update noar ti set b0='47U7FAS5G0796N5YQM' where id=8; -update noar tt set v0='4' where id=8; -update noar ti set v0='4' where id=8; -update noar tt set b1='Z030' where id=8; -update noar ti set b1='Z030' where id=8; -update noar tt set v0='3ZESS79005ZT9' where id=8; -update noar ti set v0='3ZESS79005ZT9' where id=8; -update noar tt set b2='R6MX2YE81IMI4VP2DYN1S2' where id=8; -update noar ti set b2='R6MX2YE81IMI4VP2DYN1S2' where id=8; -update noar tt set v0='XW1OL1IHPMVWF1GXNGT0CDXQHKE' where id=9; -update noar ti set v0='XW1OL1IHPMVWF1GXNGT0CDXQHKE' where id=9; -update noar tt set b0='KZXRYUP19AX0KFTQ5M' where id=9; -update noar ti set b0='KZXRYUP19AX0KFTQ5M' where id=9; -update noar tt set v0='9ICCVNAFM0JY5OQ8UUWW3' where id=9; -update noar ti set v0='9ICCVNAFM0JY5OQ8UUWW3' where id=9; -update noar tt set b1='0KPET4QKC' where id=9; -update noar ti set b1='0KPET4QKC' where id=9; -update noar tt set v0='C4LZ68' where id=9; -update noar ti set v0='C4LZ68' where id=9; -update noar tt set b2='AAV9VEMA009IHYOJ6SGM7E' where id=9; -update noar ti set b2='AAV9VEMA009IHYOJ6SGM7E' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 longblob not null, -b1 tinyblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='L' where id=1; -update noar ti set v0='L' where id=1; -update noar tt set b0='IF69NY3BXJ' where id=1; -update noar ti set b0='IF69NY3BXJ' where id=1; -update noar tt set v0='1ZL' where id=1; -update noar ti set v0='1ZL' where id=1; -update noar tt set b1='XNALR03RRD0ZJKE3R478YN' where id=1; -update noar ti set b1='XNALR03RRD0ZJKE3R478YN' where id=1; -update noar tt set v0='126V8KE3LTM8SJ9VWVT2GKE9NM73V4OI' where id=1; -update noar ti set v0='126V8KE3LTM8SJ9VWVT2GKE9NM73V4OI' where id=1; -update noar tt set b2='6R1CV9QU6BBS0F2TYNBJCJ4DJS' where id=1; -update noar ti set b2='6R1CV9QU6BBS0F2TYNBJCJ4DJS' where id=1; -update noar tt set v0='FKNVSHDGTBANHPFQHF3BRG8ZOS' where id=2; -update noar ti set v0='FKNVSHDGTBANHPFQHF3BRG8ZOS' where id=2; -update noar tt set b0='GNMO31UCLY0MQS8J2FOFNDKVUX' where id=2; -update noar ti set b0='GNMO31UCLY0MQS8J2FOFNDKVUX' where id=2; -update noar tt set v0='H07SAQWVECS74XHRYQ' where id=2; -update noar ti set v0='H07SAQWVECS74XHRYQ' where id=2; -update noar tt set b1='EQLHGZCJVAQXH' where id=2; -update noar ti set b1='EQLHGZCJVAQXH' where id=2; -update noar tt set v0='1H45UEOJWEIU' where id=2; -update noar ti set v0='1H45UEOJWEIU' where id=2; -update noar tt set b2='1UTY5NL' where id=2; -update noar ti set b2='1UTY5NL' where id=2; -update noar tt set v0='BWL3TTLP9JRLJ' where id=3; -update noar ti set v0='BWL3TTLP9JRLJ' where id=3; -update noar tt set b0='HL9JXI94MQB1PO9CVDHQYKKT5D' where id=3; -update noar ti set b0='HL9JXI94MQB1PO9CVDHQYKKT5D' where id=3; -update noar tt set v0='O32AJI62PH1QOV' where id=3; -update noar ti set v0='O32AJI62PH1QOV' where id=3; -update noar tt set b1='A1DCBV2E54EH001Q56HUS' where id=3; -update noar ti set b1='A1DCBV2E54EH001Q56HUS' where id=3; -update noar tt set v0='H6I6Q5EPZLY1QFYT048XMW79GAJX4UFM' where id=3; -update noar ti set v0='H6I6Q5EPZLY1QFYT048XMW79GAJX4UFM' where id=3; -update noar tt set b2='6' where id=3; -update noar ti set b2='6' where id=3; -update noar tt set v0='DCB88P1BS5L4WWTRJJD' where id=4; -update noar ti set v0='DCB88P1BS5L4WWTRJJD' where id=4; -update noar tt set b0='NZ6LCR5WOA2XRU5TD8' where id=4; -update noar ti set b0='NZ6LCR5WOA2XRU5TD8' where id=4; -update noar tt set v0='GP2WH0P74UL3W' where id=4; -update noar ti set v0='GP2WH0P74UL3W' where id=4; -update noar tt set b1='Z8FFCOGQE9D3IDX0' where id=4; -update noar ti set b1='Z8FFCOGQE9D3IDX0' where id=4; -update noar tt set v0='1WPRL8' where id=4; -update noar ti set v0='1WPRL8' where id=4; -update noar tt set b2='1AYFH7ATPPCD7TQEHROSSYXZQ' where id=4; -update noar ti set b2='1AYFH7ATPPCD7TQEHROSSYXZQ' where id=4; -update noar tt set v0='A224B86H08EE0QXF' where id=5; -update noar ti set v0='A224B86H08EE0QXF' where id=5; -update noar tt set b0='ZPS8HCUDPA5HYJJC6KJ51EQ0XP' where id=5; -update noar ti set b0='ZPS8HCUDPA5HYJJC6KJ51EQ0XP' where id=5; -update noar tt set v0='UYDH5NXIL71TQ241LLUN2PPPOY4FX' where id=5; -update noar ti set v0='UYDH5NXIL71TQ241LLUN2PPPOY4FX' where id=5; -update noar tt set b1='NR29' where id=5; -update noar ti set b1='NR29' where id=5; -update noar tt set v0='DLE2' where id=5; -update noar ti set v0='DLE2' where id=5; -update noar tt set b2='75GYXANI2URDQNHH2A0G' where id=5; -update noar ti set b2='75GYXANI2URDQNHH2A0G' where id=5; -update noar tt set v0='UNBC' where id=6; -update noar ti set v0='UNBC' where id=6; -update noar tt set b0='AU5RH' where id=6; -update noar ti set b0='AU5RH' where id=6; -update noar tt set v0='IWW2358XZECDI3JX3' where id=6; -update noar ti set v0='IWW2358XZECDI3JX3' where id=6; -update noar tt set b1='4WC' where id=6; -update noar ti set b1='4WC' where id=6; -update noar tt set v0='AX41AV2FD791OIQ8' where id=6; -update noar ti set v0='AX41AV2FD791OIQ8' where id=6; -update noar tt set b2='N1MVMBKI94HV7KWT5GXPZKC69' where id=6; -update noar ti set b2='N1MVMBKI94HV7KWT5GXPZKC69' where id=6; -update noar tt set v0='JCE827LMW' where id=7; -update noar ti set v0='JCE827LMW' where id=7; -update noar tt set b0='C0CRF0GRC4' where id=7; -update noar ti set b0='C0CRF0GRC4' where id=7; -update noar tt set v0='WM2' where id=7; -update noar ti set v0='WM2' where id=7; -update noar tt set b1='NPLL8QOKHBGII' where id=7; -update noar ti set b1='NPLL8QOKHBGII' where id=7; -update noar tt set v0='E' where id=7; -update noar ti set v0='E' where id=7; -update noar tt set b2='GVI3F9WU1CK2QCL2HNWP64CZQ84OBWTP' where id=7; -update noar ti set b2='GVI3F9WU1CK2QCL2HNWP64CZQ84OBWTP' where id=7; -update noar tt set v0='ICA' where id=8; -update noar ti set v0='ICA' where id=8; -update noar tt set b0='V9CXIG1Y' where id=8; -update noar ti set b0='V9CXIG1Y' where id=8; -update noar tt set v0='GGOEI1JJ37H9UR7SNGA2L6PTZOT' where id=8; -update noar ti set v0='GGOEI1JJ37H9UR7SNGA2L6PTZOT' where id=8; -update noar tt set b1='WXAZQ9B4UXHPS8CLTIY8O' where id=8; -update noar ti set b1='WXAZQ9B4UXHPS8CLTIY8O' where id=8; -update noar tt set v0='GYU0O' where id=8; -update noar ti set v0='GYU0O' where id=8; -update noar tt set b2='0LNX7N8HJKRR613LJOL' where id=8; -update noar ti set b2='0LNX7N8HJKRR613LJOL' where id=8; -update noar tt set v0='60TZIU6G6Q5DE60BF0DVQVL9G' where id=9; -update noar ti set v0='60TZIU6G6Q5DE60BF0DVQVL9G' where id=9; -update noar tt set b0='VJL5PQEICASWGELCQ4CABIL4PN3ME' where id=9; -update noar ti set b0='VJL5PQEICASWGELCQ4CABIL4PN3ME' where id=9; -update noar tt set v0='P1TIS1TKAT' where id=9; -update noar ti set v0='P1TIS1TKAT' where id=9; -update noar tt set b1='6AO7DZDS68' where id=9; -update noar ti set b1='6AO7DZDS68' where id=9; -update noar tt set v0='BFJGZH00LXF9FQ39MK' where id=9; -update noar ti set v0='BFJGZH00LXF9FQ39MK' where id=9; -update noar tt set b2='97F59UKP' where id=9; -update noar ti set b2='97F59UKP' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 longblob not null, -b1 tinyblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='ZOCDEKMHB2QN11NE51' where id=1; -update noar ti set v0='ZOCDEKMHB2QN11NE51' where id=1; -update noar tt set b0='CAR6T8HPC5PCL' where id=1; -update noar ti set b0='CAR6T8HPC5PCL' where id=1; -update noar tt set v0='M7W67XGCP293DKXJTQ3XE' where id=1; -update noar ti set v0='M7W67XGCP293DKXJTQ3XE' where id=1; -update noar tt set b1='A8ZNUZK4WN' where id=1; -update noar ti set b1='A8ZNUZK4WN' where id=1; -update noar tt set v0='0T7R81XZSE4D4L9' where id=1; -update noar ti set v0='0T7R81XZSE4D4L9' where id=1; -update noar tt set b2='EPSTA' where id=1; -update noar ti set b2='EPSTA' where id=1; -update noar tt set v0='QVNL9ORWZ4GHG' where id=2; -update noar ti set v0='QVNL9ORWZ4GHG' where id=2; -update noar tt set b0='V9DVQLQ5FTXF' where id=2; -update noar ti set b0='V9DVQLQ5FTXF' where id=2; -update noar tt set v0='TD' where id=2; -update noar ti set v0='TD' where id=2; -update noar tt set b1='UBT1RRT5DYN' where id=2; -update noar ti set b1='UBT1RRT5DYN' where id=2; -update noar tt set v0='7NGC4AD0YOE38CEXI0J5' where id=2; -update noar ti set v0='7NGC4AD0YOE38CEXI0J5' where id=2; -update noar tt set b2='S6H0OB82UFW0V3' where id=2; -update noar ti set b2='S6H0OB82UFW0V3' where id=2; -update noar tt set v0='28EGQHQAHLNM7J61U9EWJ1L' where id=3; -update noar ti set v0='28EGQHQAHLNM7J61U9EWJ1L' where id=3; -update noar tt set b0='2L' where id=3; -update noar ti set b0='2L' where id=3; -update noar tt set v0='HL36AT3QC41UURQ18O7SG32GVLO' where id=3; -update noar ti set v0='HL36AT3QC41UURQ18O7SG32GVLO' where id=3; -update noar tt set b1='DC' where id=3; -update noar ti set b1='DC' where id=3; -update noar tt set v0='VNU4E5UU4ECBEW5OUJ9R3W5ALDN' where id=3; -update noar ti set v0='VNU4E5UU4ECBEW5OUJ9R3W5ALDN' where id=3; -update noar tt set b2='4792LM8T8CIYKBVICLQKQZHJJ207C' where id=3; -update noar ti set b2='4792LM8T8CIYKBVICLQKQZHJJ207C' where id=3; -update noar tt set v0='4' where id=4; -update noar ti set v0='4' where id=4; -update noar tt set b0='OHOPZLCK9' where id=4; -update noar ti set b0='OHOPZLCK9' where id=4; -update noar tt set v0='T7HZEBG5INMYYMBEYYWQLU1' where id=4; -update noar ti set v0='T7HZEBG5INMYYMBEYYWQLU1' where id=4; -update noar tt set b1='BV1JHRA9V' where id=4; -update noar ti set b1='BV1JHRA9V' where id=4; -update noar tt set v0='K1RH2UNXR75EDOJDF4GNH' where id=4; -update noar ti set v0='K1RH2UNXR75EDOJDF4GNH' where id=4; -update noar tt set b2='R1QXWG18EM58E86GOO2GXXP' where id=4; -update noar ti set b2='R1QXWG18EM58E86GOO2GXXP' where id=4; -update noar tt set v0='J9GEQ25I0947YIK70H8Z' where id=5; -update noar ti set v0='J9GEQ25I0947YIK70H8Z' where id=5; -update noar tt set b0='W7VGX4GBRWP7B91HCZ4RJY8J' where id=5; -update noar ti set b0='W7VGX4GBRWP7B91HCZ4RJY8J' where id=5; -update noar tt set v0='INBTWALEA02PU6TTOI0HDQFJ' where id=5; -update noar ti set v0='INBTWALEA02PU6TTOI0HDQFJ' where id=5; -update noar tt set b1='43T04NNJQ2Q7YQGPLE5UVNYE' where id=5; -update noar ti set b1='43T04NNJQ2Q7YQGPLE5UVNYE' where id=5; -update noar tt set v0='ML7' where id=5; -update noar ti set v0='ML7' where id=5; -update noar tt set b2='4MZ99F' where id=5; -update noar ti set b2='4MZ99F' where id=5; -update noar tt set v0='JSYE9U6YDF9Y83DBT6JCT06Q' where id=6; -update noar ti set v0='JSYE9U6YDF9Y83DBT6JCT06Q' where id=6; -update noar tt set b0='9PUCB9SDDFZI1F39' where id=6; -update noar ti set b0='9PUCB9SDDFZI1F39' where id=6; -update noar tt set v0='ZXF8VNJQ5CKM4N0LHVCJX9ELZKOAW6' where id=6; -update noar ti set v0='ZXF8VNJQ5CKM4N0LHVCJX9ELZKOAW6' where id=6; -update noar tt set b1='EOPRC5ZCA02SQOSLDVTKW' where id=6; -update noar ti set b1='EOPRC5ZCA02SQOSLDVTKW' where id=6; -update noar tt set v0='3ZA7LXSSFQ9ETSN7AT8R8AE' where id=6; -update noar ti set v0='3ZA7LXSSFQ9ETSN7AT8R8AE' where id=6; -update noar tt set b2='414BF7SBPRW3DCT5A5ME7IWK' where id=6; -update noar ti set b2='414BF7SBPRW3DCT5A5ME7IWK' where id=6; -update noar tt set v0='V7GKO7XGBPF986HVCIYCW7WS9HYC2' where id=7; -update noar ti set v0='V7GKO7XGBPF986HVCIYCW7WS9HYC2' where id=7; -update noar tt set b0='SPUUTRMS' where id=7; -update noar ti set b0='SPUUTRMS' where id=7; -update noar tt set v0='DGNM362PAALAC' where id=7; -update noar ti set v0='DGNM362PAALAC' where id=7; -update noar tt set b1='MN7RXYQ1ID5R1K4C' where id=7; -update noar ti set b1='MN7RXYQ1ID5R1K4C' where id=7; -update noar tt set v0='TMO9NDT1UJRC3HSRQ9K7UXVAE3P1O' where id=7; -update noar ti set v0='TMO9NDT1UJRC3HSRQ9K7UXVAE3P1O' where id=7; -update noar tt set b2='7JRP2HY' where id=7; -update noar ti set b2='7JRP2HY' where id=7; -update noar tt set v0='JAE9LUZV6T7ZJYD0D42B' where id=8; -update noar ti set v0='JAE9LUZV6T7ZJYD0D42B' where id=8; -update noar tt set b0='B' where id=8; -update noar ti set b0='B' where id=8; -update noar tt set v0='OW1AECDWD820HL0WQRVZ94' where id=8; -update noar ti set v0='OW1AECDWD820HL0WQRVZ94' where id=8; -update noar tt set b1='LHIISZ7Y6CG70ZFD6' where id=8; -update noar ti set b1='LHIISZ7Y6CG70ZFD6' where id=8; -update noar tt set v0='PAMD08IADUBO' where id=8; -update noar ti set v0='PAMD08IADUBO' where id=8; -update noar tt set b2='ZMJSZBQIPHR9H74P75DYIWDN8' where id=8; -update noar ti set b2='ZMJSZBQIPHR9H74P75DYIWDN8' where id=8; -update noar tt set v0='6B5DOVQDSMP7T2HK1G' where id=9; -update noar ti set v0='6B5DOVQDSMP7T2HK1G' where id=9; -update noar tt set b0='CNFE1MUZFMNH8HNUCHLKF3A4QUL' where id=9; -update noar ti set b0='CNFE1MUZFMNH8HNUCHLKF3A4QUL' where id=9; -update noar tt set v0='CZBB1JOJ5HZJZJB9QLXV86Q5TL1' where id=9; -update noar ti set v0='CZBB1JOJ5HZJZJB9QLXV86Q5TL1' where id=9; -update noar tt set b1='S0RYYTTDT1SKPYWPRUBJ' where id=9; -update noar ti set b1='S0RYYTTDT1SKPYWPRUBJ' where id=9; -update noar tt set v0='BPPVJ1QZK42' where id=9; -update noar ti set v0='BPPVJ1QZK42' where id=9; -update noar tt set b2='01F0KRLBVONW' where id=9; -update noar ti set b2='01F0KRLBVONW' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 longblob null, -b1 tinyblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='ULS8LOZYQY7ZN73UMV8ZBPJA' where id=1; -update noar ti set v0='ULS8LOZYQY7ZN73UMV8ZBPJA' where id=1; -update noar tt set b0='TICZNHX6SMBRVN' where id=1; -update noar ti set b0='TICZNHX6SMBRVN' where id=1; -update noar tt set v0='3' where id=1; -update noar ti set v0='3' where id=1; -update noar tt set b1='E' where id=1; -update noar ti set b1='E' where id=1; -update noar tt set v0='HAHL7PP' where id=1; -update noar ti set v0='HAHL7PP' where id=1; -update noar tt set b2='DE1DCSY2SS9PA3' where id=1; -update noar ti set b2='DE1DCSY2SS9PA3' where id=1; -update noar tt set v0='SA2EBYISV883BAF' where id=2; -update noar ti set v0='SA2EBYISV883BAF' where id=2; -update noar tt set b0='P0' where id=2; -update noar ti set b0='P0' where id=2; -update noar tt set v0='BRLQDV0VX6WY5V42TIQ3CEAS' where id=2; -update noar ti set v0='BRLQDV0VX6WY5V42TIQ3CEAS' where id=2; -update noar tt set b1='G' where id=2; -update noar ti set b1='G' where id=2; -update noar tt set v0='YW87EGUCTJB9XUY9Z5' where id=2; -update noar ti set v0='YW87EGUCTJB9XUY9Z5' where id=2; -update noar tt set b2='OLF6D7Y0DJ5QKXYYXQ6I34HNUO0GM4YJ' where id=2; -update noar ti set b2='OLF6D7Y0DJ5QKXYYXQ6I34HNUO0GM4YJ' where id=2; -update noar tt set v0='M3ZJUW12WKFM0KXPNVGE' where id=3; -update noar ti set v0='M3ZJUW12WKFM0KXPNVGE' where id=3; -update noar tt set b0='ECSUVUKU2YJ4WOM' where id=3; -update noar ti set b0='ECSUVUKU2YJ4WOM' where id=3; -update noar tt set v0='67SBC0QSVQXW8W77JFPTFQ36Q6SBR3V5' where id=3; -update noar ti set v0='67SBC0QSVQXW8W77JFPTFQ36Q6SBR3V5' where id=3; -update noar tt set b1='2M74HBMZOZCAD8P2' where id=3; -update noar ti set b1='2M74HBMZOZCAD8P2' where id=3; -update noar tt set v0='168' where id=3; -update noar ti set v0='168' where id=3; -update noar tt set b2='T3PIJT7PZ4S' where id=3; -update noar ti set b2='T3PIJT7PZ4S' where id=3; -update noar tt set v0='I1QPO05HPCKYFJLVRQ4' where id=4; -update noar ti set v0='I1QPO05HPCKYFJLVRQ4' where id=4; -update noar tt set b0='NQKU2GUCKPHJ8BP15M1B2O6VBF29' where id=4; -update noar ti set b0='NQKU2GUCKPHJ8BP15M1B2O6VBF29' where id=4; -update noar tt set v0='VEPYIS3XNWF' where id=4; -update noar ti set v0='VEPYIS3XNWF' where id=4; -update noar tt set b1='A6MSVJZF9BPUS2MRZVYR61LG3' where id=4; -update noar ti set b1='A6MSVJZF9BPUS2MRZVYR61LG3' where id=4; -update noar tt set v0='DAESI1GVZV5I8E7Y7A4LW8E0OV' where id=4; -update noar ti set v0='DAESI1GVZV5I8E7Y7A4LW8E0OV' where id=4; -update noar tt set b2='6ORP9' where id=4; -update noar ti set b2='6ORP9' where id=4; -update noar tt set v0='KQK00LMBM42A' where id=5; -update noar ti set v0='KQK00LMBM42A' where id=5; -update noar tt set b0='XEVYZCWFKT4TSOTXVE3O3VL7B' where id=5; -update noar ti set b0='XEVYZCWFKT4TSOTXVE3O3VL7B' where id=5; -update noar tt set v0='VSG14N0REDW' where id=5; -update noar ti set v0='VSG14N0REDW' where id=5; -update noar tt set b1='I29HIB0L8TMPU8YKQ146' where id=5; -update noar ti set b1='I29HIB0L8TMPU8YKQ146' where id=5; -update noar tt set v0='0CUA7XOPXVJ66ZHFL43SQ8BITRBG8' where id=5; -update noar ti set v0='0CUA7XOPXVJ66ZHFL43SQ8BITRBG8' where id=5; -update noar tt set b2='QDQBGT' where id=5; -update noar ti set b2='QDQBGT' where id=5; -update noar tt set v0='AXUJ' where id=6; -update noar ti set v0='AXUJ' where id=6; -update noar tt set b0='6KVRFRJ9ZD1647' where id=6; -update noar ti set b0='6KVRFRJ9ZD1647' where id=6; -update noar tt set v0='VYVOYKY' where id=6; -update noar ti set v0='VYVOYKY' where id=6; -update noar tt set b1='K0SK' where id=6; -update noar ti set b1='K0SK' where id=6; -update noar tt set v0='70040D81WJSOUYQAJDZ5Q1VPXCGG' where id=6; -update noar ti set v0='70040D81WJSOUYQAJDZ5Q1VPXCGG' where id=6; -update noar tt set b2='HZ' where id=6; -update noar ti set b2='HZ' where id=6; -update noar tt set v0='NTYB9VB9QWY0QPW0HLWA38' where id=7; -update noar ti set v0='NTYB9VB9QWY0QPW0HLWA38' where id=7; -update noar tt set b0='SE8G7OYYORSJXZ' where id=7; -update noar ti set b0='SE8G7OYYORSJXZ' where id=7; -update noar tt set v0='QMLE6CXXCLSVB' where id=7; -update noar ti set v0='QMLE6CXXCLSVB' where id=7; -update noar tt set b1='CHP77LJWJQB1I076U4DWXX4M' where id=7; -update noar ti set b1='CHP77LJWJQB1I076U4DWXX4M' where id=7; -update noar tt set v0='OU1OE5' where id=7; -update noar ti set v0='OU1OE5' where id=7; -update noar tt set b2='6ICDHU6MBIBOVRIPH9EHZRXERBNS' where id=7; -update noar ti set b2='6ICDHU6MBIBOVRIPH9EHZRXERBNS' where id=7; -update noar tt set v0='QB' where id=8; -update noar ti set v0='QB' where id=8; -update noar tt set b0='40PP83' where id=8; -update noar ti set b0='40PP83' where id=8; -update noar tt set v0='0DJVHDFWUDQUH6G' where id=8; -update noar ti set v0='0DJVHDFWUDQUH6G' where id=8; -update noar tt set b1='N02XUW50C9UZG3Y24ZECG0T67NMG0C' where id=8; -update noar ti set b1='N02XUW50C9UZG3Y24ZECG0T67NMG0C' where id=8; -update noar tt set v0='I4W1' where id=8; -update noar ti set v0='I4W1' where id=8; -update noar tt set b2='CP2R41KJPHKBACPNZ' where id=8; -update noar ti set b2='CP2R41KJPHKBACPNZ' where id=8; -update noar tt set v0='DFH1J14EYHYHMNPL8UX1Q4SRYNVXBRY' where id=9; -update noar ti set v0='DFH1J14EYHYHMNPL8UX1Q4SRYNVXBRY' where id=9; -update noar tt set b0='33J76D63WVJ' where id=9; -update noar ti set b0='33J76D63WVJ' where id=9; -update noar tt set v0='3N41WDAVWDN24SJD94X' where id=9; -update noar ti set v0='3N41WDAVWDN24SJD94X' where id=9; -update noar tt set b1='X5LXGCJ5FMN4GC26E737SWDDSWDU4H87' where id=9; -update noar ti set b1='X5LXGCJ5FMN4GC26E737SWDDSWDU4H87' where id=9; -update noar tt set v0='RCDMKUG' where id=9; -update noar ti set v0='RCDMKUG' where id=9; -update noar tt set b2='ZUQE6NCO53NUAMCI79J2V' where id=9; -update noar ti set b2='ZUQE6NCO53NUAMCI79J2V' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 longblob null, -b1 tinyblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='IGMFUYDB0UD218GSMIUTY1H' where id=1; -update noar ti set v0='IGMFUYDB0UD218GSMIUTY1H' where id=1; -update noar tt set b0='NAKSD4AHH17MNU4C0R1G5LWHDHP' where id=1; -update noar ti set b0='NAKSD4AHH17MNU4C0R1G5LWHDHP' where id=1; -update noar tt set v0='LODP6R' where id=1; -update noar ti set v0='LODP6R' where id=1; -update noar tt set b1='S97PHH46QPU9SSAENQLUSCJHAX6ME' where id=1; -update noar ti set b1='S97PHH46QPU9SSAENQLUSCJHAX6ME' where id=1; -update noar tt set v0='KGLZL2SDLF' where id=1; -update noar ti set v0='KGLZL2SDLF' where id=1; -update noar tt set b2='LQOR5V8WNGV907Q7CUW51' where id=1; -update noar ti set b2='LQOR5V8WNGV907Q7CUW51' where id=1; -update noar tt set v0='YSRDR' where id=2; -update noar ti set v0='YSRDR' where id=2; -update noar tt set b0='EC1IY3VJPV5BT6S9RHLPR3RIK0P9T' where id=2; -update noar ti set b0='EC1IY3VJPV5BT6S9RHLPR3RIK0P9T' where id=2; -update noar tt set v0='5TQIAH62TOYG98O9AAXS73B10YGQMMG' where id=2; -update noar ti set v0='5TQIAH62TOYG98O9AAXS73B10YGQMMG' where id=2; -update noar tt set b1='CVGSJMQQ10A9XTYZOLTF75' where id=2; -update noar ti set b1='CVGSJMQQ10A9XTYZOLTF75' where id=2; -update noar tt set v0='UG61G1IU02DC' where id=2; -update noar ti set v0='UG61G1IU02DC' where id=2; -update noar tt set b2='IRJ627EIQNXIE2OO152N41H' where id=2; -update noar ti set b2='IRJ627EIQNXIE2OO152N41H' where id=2; -update noar tt set v0='RUAXU0MH' where id=3; -update noar ti set v0='RUAXU0MH' where id=3; -update noar tt set b0='DYQAB9S08O' where id=3; -update noar ti set b0='DYQAB9S08O' where id=3; -update noar tt set v0='79T1MC1AM8LWSS4JPLTM' where id=3; -update noar ti set v0='79T1MC1AM8LWSS4JPLTM' where id=3; -update noar tt set b1='0K838MO2IQ89' where id=3; -update noar ti set b1='0K838MO2IQ89' where id=3; -update noar tt set v0='U2RHCV8SD4VYMN8JXYXV9' where id=3; -update noar ti set v0='U2RHCV8SD4VYMN8JXYXV9' where id=3; -update noar tt set b2='BDVP168J' where id=3; -update noar ti set b2='BDVP168J' where id=3; -update noar tt set v0='NO8T26I920P6WHW2' where id=4; -update noar ti set v0='NO8T26I920P6WHW2' where id=4; -update noar tt set b0='ZB81ZCBMCEQW0QWL0UDSXQ' where id=4; -update noar ti set b0='ZB81ZCBMCEQW0QWL0UDSXQ' where id=4; -update noar tt set v0='923X' where id=4; -update noar ti set v0='923X' where id=4; -update noar tt set b1='EVV' where id=4; -update noar ti set b1='EVV' where id=4; -update noar tt set v0='J26PMGW0GE9O5' where id=4; -update noar ti set v0='J26PMGW0GE9O5' where id=4; -update noar tt set b2='EM' where id=4; -update noar ti set b2='EM' where id=4; -update noar tt set v0='2VVNYN6UAR7XGIVAYN3TXDRCXI' where id=5; -update noar ti set v0='2VVNYN6UAR7XGIVAYN3TXDRCXI' where id=5; -update noar tt set b0='28FI0Y8MXCU2CC6' where id=5; -update noar ti set b0='28FI0Y8MXCU2CC6' where id=5; -update noar tt set v0='BZJ42JC' where id=5; -update noar ti set v0='BZJ42JC' where id=5; -update noar tt set b1='Q' where id=5; -update noar ti set b1='Q' where id=5; -update noar tt set v0='UGY2B9' where id=5; -update noar ti set v0='UGY2B9' where id=5; -update noar tt set b2='ZZBK9NNA630N9FWDNV8VCC' where id=5; -update noar ti set b2='ZZBK9NNA630N9FWDNV8VCC' where id=5; -update noar tt set v0='60PYFUZ2KZ0U9EL2' where id=6; -update noar ti set v0='60PYFUZ2KZ0U9EL2' where id=6; -update noar tt set b0='E0GPNXK7PRX9XHBXCJDAD' where id=6; -update noar ti set b0='E0GPNXK7PRX9XHBXCJDAD' where id=6; -update noar tt set v0='M1X5T' where id=6; -update noar ti set v0='M1X5T' where id=6; -update noar tt set b1='JJV5SDS' where id=6; -update noar ti set b1='JJV5SDS' where id=6; -update noar tt set v0='29' where id=6; -update noar ti set v0='29' where id=6; -update noar tt set b2='9HHBDWFG1IU' where id=6; -update noar ti set b2='9HHBDWFG1IU' where id=6; -update noar tt set v0='UEY1BXVS41D2T3QM' where id=7; -update noar ti set v0='UEY1BXVS41D2T3QM' where id=7; -update noar tt set b0='Y54UF5X58AAPJJX0P6KIQFVNKNVK' where id=7; -update noar ti set b0='Y54UF5X58AAPJJX0P6KIQFVNKNVK' where id=7; -update noar tt set v0='IFNRKG8PG6HAX42HM7' where id=7; -update noar ti set v0='IFNRKG8PG6HAX42HM7' where id=7; -update noar tt set b1='6L22HQB9YGS3YQVZO' where id=7; -update noar ti set b1='6L22HQB9YGS3YQVZO' where id=7; -update noar tt set v0='TN5DVBFBXYSPTBS4D4RDDVMB67BIG' where id=7; -update noar ti set v0='TN5DVBFBXYSPTBS4D4RDDVMB67BIG' where id=7; -update noar tt set b2='85SHVJ96H5FWDMXWP' where id=7; -update noar ti set b2='85SHVJ96H5FWDMXWP' where id=7; -update noar tt set v0='Z5B' where id=8; -update noar ti set v0='Z5B' where id=8; -update noar tt set b0='XGWL9B7KW9631CD6WFTJZND7UQXAV' where id=8; -update noar ti set b0='XGWL9B7KW9631CD6WFTJZND7UQXAV' where id=8; -update noar tt set v0='CWLWGPLK8CXPFGPI7EB' where id=8; -update noar ti set v0='CWLWGPLK8CXPFGPI7EB' where id=8; -update noar tt set b1='H' where id=8; -update noar ti set b1='H' where id=8; -update noar tt set v0='F0DV13Q4LBKEUAKPC3NGO3ZT' where id=8; -update noar ti set v0='F0DV13Q4LBKEUAKPC3NGO3ZT' where id=8; -update noar tt set b2='47DOY1MIKDJTA' where id=8; -update noar ti set b2='47DOY1MIKDJTA' where id=8; -update noar tt set v0='IPIDSS1GA0TSF6OST3IEWEH205TS1' where id=9; -update noar ti set v0='IPIDSS1GA0TSF6OST3IEWEH205TS1' where id=9; -update noar tt set b0='8' where id=9; -update noar ti set b0='8' where id=9; -update noar tt set v0='L1YFD04D2YP9OKQ00K' where id=9; -update noar ti set v0='L1YFD04D2YP9OKQ00K' where id=9; -update noar tt set b1='JA58' where id=9; -update noar ti set b1='JA58' where id=9; -update noar tt set v0='H40W5JV3HKCXQGMF' where id=9; -update noar ti set v0='H40W5JV3HKCXQGMF' where id=9; -update noar tt set b2='OICEWOXTGPQLL5SBZI3COVK0' where id=9; -update noar ti set b2='OICEWOXTGPQLL5SBZI3COVK0' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 longblob not null, -b1 tinyblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='PU3EM78KC13EOL243T9K4019IPRWIPT9' where id=1; -update noar ti set v0='PU3EM78KC13EOL243T9K4019IPRWIPT9' where id=1; -update noar tt set b0='O1EL4FXXE6HL6UB4JLDZ9GDCE0M' where id=1; -update noar ti set b0='O1EL4FXXE6HL6UB4JLDZ9GDCE0M' where id=1; -update noar tt set v0='ZS' where id=1; -update noar ti set v0='ZS' where id=1; -update noar tt set b1='5DOON491BMLHG2ESO' where id=1; -update noar ti set b1='5DOON491BMLHG2ESO' where id=1; -update noar tt set v0='W9MI90OM' where id=1; -update noar ti set v0='W9MI90OM' where id=1; -update noar tt set b2='JA9KNJ1N12K57LK54N37FPI' where id=1; -update noar ti set b2='JA9KNJ1N12K57LK54N37FPI' where id=1; -update noar tt set v0='K5WL57F6S2QB6UH6RDIP2VTQD1' where id=2; -update noar ti set v0='K5WL57F6S2QB6UH6RDIP2VTQD1' where id=2; -update noar tt set b0='YOMA9VC5QZHSWW' where id=2; -update noar ti set b0='YOMA9VC5QZHSWW' where id=2; -update noar tt set v0='BNBIY5QEV9ZVAQXI' where id=2; -update noar ti set v0='BNBIY5QEV9ZVAQXI' where id=2; -update noar tt set b1='TO9B82GFVV1SB40A88C0VL' where id=2; -update noar ti set b1='TO9B82GFVV1SB40A88C0VL' where id=2; -update noar tt set v0='6H3893SDBQ41MW' where id=2; -update noar ti set v0='6H3893SDBQ41MW' where id=2; -update noar tt set b2='3WF2LSAZ29BLJP4P5IE' where id=2; -update noar ti set b2='3WF2LSAZ29BLJP4P5IE' where id=2; -update noar tt set v0='FGC5A0Q9XQTOQEXFD2J' where id=3; -update noar ti set v0='FGC5A0Q9XQTOQEXFD2J' where id=3; -update noar tt set b0='MR4ETFEZ9MKTEM9443UDZ9MGOLL1' where id=3; -update noar ti set b0='MR4ETFEZ9MKTEM9443UDZ9MGOLL1' where id=3; -update noar tt set v0='EHJ3SIELU89Q' where id=3; -update noar ti set v0='EHJ3SIELU89Q' where id=3; -update noar tt set b1='CWHXGMDBX3' where id=3; -update noar ti set b1='CWHXGMDBX3' where id=3; -update noar tt set v0='3TF3QDOHS' where id=3; -update noar ti set v0='3TF3QDOHS' where id=3; -update noar tt set b2='M3YKPTO5H4C6PP6X0TXF5Q' where id=3; -update noar ti set b2='M3YKPTO5H4C6PP6X0TXF5Q' where id=3; -update noar tt set v0='CWHXBTFQJHNCPCM8DXIPFP' where id=4; -update noar ti set v0='CWHXBTFQJHNCPCM8DXIPFP' where id=4; -update noar tt set b0='NQ4G3ZC6HGAETFG7KKI0SLWXA642' where id=4; -update noar ti set b0='NQ4G3ZC6HGAETFG7KKI0SLWXA642' where id=4; -update noar tt set v0='NZS92FP4JBZF' where id=4; -update noar ti set v0='NZS92FP4JBZF' where id=4; -update noar tt set b1='P88E' where id=4; -update noar ti set b1='P88E' where id=4; -update noar tt set v0='TKSX7PY30C4U0XMU3L6W5YE4UVL' where id=4; -update noar ti set v0='TKSX7PY30C4U0XMU3L6W5YE4UVL' where id=4; -update noar tt set b2='MFEKKPG' where id=4; -update noar ti set b2='MFEKKPG' where id=4; -update noar tt set v0='C6URJHA60YKGW1I7KURHMPN9004LCL' where id=5; -update noar ti set v0='C6URJHA60YKGW1I7KURHMPN9004LCL' where id=5; -update noar tt set b0='Q8R3IJUM02Y2WEDL6UY61N5K02EZJRTA' where id=5; -update noar ti set b0='Q8R3IJUM02Y2WEDL6UY61N5K02EZJRTA' where id=5; -update noar tt set v0='94T3FOLJCXXWGM' where id=5; -update noar ti set v0='94T3FOLJCXXWGM' where id=5; -update noar tt set b1='LKO3' where id=5; -update noar ti set b1='LKO3' where id=5; -update noar tt set v0='IML7U3CCMJWATB' where id=5; -update noar ti set v0='IML7U3CCMJWATB' where id=5; -update noar tt set b2='IRZGRE' where id=5; -update noar ti set b2='IRZGRE' where id=5; -update noar tt set v0='SCAS7O8V7XQER' where id=6; -update noar ti set v0='SCAS7O8V7XQER' where id=6; -update noar tt set b0='GYWPLARQZ19TWMKKPV9RXXRRIX' where id=6; -update noar ti set b0='GYWPLARQZ19TWMKKPV9RXXRRIX' where id=6; -update noar tt set v0='M744VJHSRQVPSB6Z8M46TGMDOMH2LMT8' where id=6; -update noar ti set v0='M744VJHSRQVPSB6Z8M46TGMDOMH2LMT8' where id=6; -update noar tt set b1='M7HADTIAYFFZ2CZA3JRW48GI6' where id=6; -update noar ti set b1='M7HADTIAYFFZ2CZA3JRW48GI6' where id=6; -update noar tt set v0='L2NBU13U2JUQNSFTR2L' where id=6; -update noar ti set v0='L2NBU13U2JUQNSFTR2L' where id=6; -update noar tt set b2='DE1246A53PW4EF0K3VMIL5G' where id=6; -update noar ti set b2='DE1246A53PW4EF0K3VMIL5G' where id=6; -update noar tt set v0='9J79ZA0WS33TSPQ7BUJCABZ' where id=7; -update noar ti set v0='9J79ZA0WS33TSPQ7BUJCABZ' where id=7; -update noar tt set b0='P3' where id=7; -update noar ti set b0='P3' where id=7; -update noar tt set v0='BPBPYRZ5557DD3SUD' where id=7; -update noar ti set v0='BPBPYRZ5557DD3SUD' where id=7; -update noar tt set b1='P60SQ1UJO40J00TP' where id=7; -update noar ti set b1='P60SQ1UJO40J00TP' where id=7; -update noar tt set v0='LC1RB9ENHEKJ4' where id=7; -update noar ti set v0='LC1RB9ENHEKJ4' where id=7; -update noar tt set b2='K287TBFS03Q6SSEEC42LTZNHR' where id=7; -update noar ti set b2='K287TBFS03Q6SSEEC42LTZNHR' where id=7; -update noar tt set v0='ZTL4RJDSV5UU8D4YTLF38825PVFH42' where id=8; -update noar ti set v0='ZTL4RJDSV5UU8D4YTLF38825PVFH42' where id=8; -update noar tt set b0='BAMXRTMNSY3F4SWXQYZVZQO83DVZVXD0' where id=8; -update noar ti set b0='BAMXRTMNSY3F4SWXQYZVZQO83DVZVXD0' where id=8; -update noar tt set v0='U5JFGIIHE8T7OYRYECDB6SOZRDZ1R' where id=8; -update noar ti set v0='U5JFGIIHE8T7OYRYECDB6SOZRDZ1R' where id=8; -update noar tt set b1='ZCCJCA6ADQJTB09W0I8W3HNME' where id=8; -update noar ti set b1='ZCCJCA6ADQJTB09W0I8W3HNME' where id=8; -update noar tt set v0='7QAXCDCJSRBWTS7LHFC2ZH' where id=8; -update noar ti set v0='7QAXCDCJSRBWTS7LHFC2ZH' where id=8; -update noar tt set b2='99N2UPRFUGZ0DH' where id=8; -update noar ti set b2='99N2UPRFUGZ0DH' where id=8; -update noar tt set v0='IYK6UQA' where id=9; -update noar ti set v0='IYK6UQA' where id=9; -update noar tt set b0='EPQ51VE7P4H9T721Q89XFI8NRHL7S3M' where id=9; -update noar ti set b0='EPQ51VE7P4H9T721Q89XFI8NRHL7S3M' where id=9; -update noar tt set v0='OXWX5PWC7R0ZWJKZKTDROF' where id=9; -update noar ti set v0='OXWX5PWC7R0ZWJKZKTDROF' where id=9; -update noar tt set b1='SAAXXBPEISOGETTZWTCL' where id=9; -update noar ti set b1='SAAXXBPEISOGETTZWTCL' where id=9; -update noar tt set v0='A0FTT95ECJ9A7M9CBVXDURG' where id=9; -update noar ti set v0='A0FTT95ECJ9A7M9CBVXDURG' where id=9; -update noar tt set b2='TJ42' where id=9; -update noar ti set b2='TJ42' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 longblob not null, -b1 tinyblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='EDGZ' where id=1; -update noar ti set v0='EDGZ' where id=1; -update noar tt set b0='LY1ZQXGR5VZCG' where id=1; -update noar ti set b0='LY1ZQXGR5VZCG' where id=1; -update noar tt set v0='1WCOIK6IX1' where id=1; -update noar ti set v0='1WCOIK6IX1' where id=1; -update noar tt set b1='UXML1V' where id=1; -update noar ti set b1='UXML1V' where id=1; -update noar tt set v0='Q58HLME7JQQR7Q09S' where id=1; -update noar ti set v0='Q58HLME7JQQR7Q09S' where id=1; -update noar tt set b2='J19SCMYZXROWONP5' where id=1; -update noar ti set b2='J19SCMYZXROWONP5' where id=1; -update noar tt set v0='Q3WCQBSGBGPO7' where id=2; -update noar ti set v0='Q3WCQBSGBGPO7' where id=2; -update noar tt set b0='EXOLCMZSGKVB1MH8VFZ08528CQXUWFN' where id=2; -update noar ti set b0='EXOLCMZSGKVB1MH8VFZ08528CQXUWFN' where id=2; -update noar tt set v0='4PT' where id=2; -update noar ti set v0='4PT' where id=2; -update noar tt set b1='TI4ND0PN5C' where id=2; -update noar ti set b1='TI4ND0PN5C' where id=2; -update noar tt set v0='DZXS' where id=2; -update noar ti set v0='DZXS' where id=2; -update noar tt set b2='G7OUN4L43' where id=2; -update noar ti set b2='G7OUN4L43' where id=2; -update noar tt set v0='URLY1C4ACI5GCXO4CXX' where id=3; -update noar ti set v0='URLY1C4ACI5GCXO4CXX' where id=3; -update noar tt set b0='8VEB2' where id=3; -update noar ti set b0='8VEB2' where id=3; -update noar tt set v0='77IY79DQ78MPKS2XZ5ZHI2D32O6GC' where id=3; -update noar ti set v0='77IY79DQ78MPKS2XZ5ZHI2D32O6GC' where id=3; -update noar tt set b1='PMWL2CZXV17YH1OOFVOGZ5OUH331' where id=3; -update noar ti set b1='PMWL2CZXV17YH1OOFVOGZ5OUH331' where id=3; -update noar tt set v0='3LXWSFYZLAH3MR8PDIBX3MX' where id=3; -update noar ti set v0='3LXWSFYZLAH3MR8PDIBX3MX' where id=3; -update noar tt set b2='X3S7GUZJ1' where id=3; -update noar ti set b2='X3S7GUZJ1' where id=3; -update noar tt set v0='1W9S8' where id=4; -update noar ti set v0='1W9S8' where id=4; -update noar tt set b0='USZE17MLNOXAJE0FFZ8EVTUCTTZYJ9XH' where id=4; -update noar ti set b0='USZE17MLNOXAJE0FFZ8EVTUCTTZYJ9XH' where id=4; -update noar tt set v0='N0U8QCM0EN8HRO34HEYNHW4Z' where id=4; -update noar ti set v0='N0U8QCM0EN8HRO34HEYNHW4Z' where id=4; -update noar tt set b1='7RXWG4BW36Y54041ZZXA7IIP4GMCDJFA' where id=4; -update noar ti set b1='7RXWG4BW36Y54041ZZXA7IIP4GMCDJFA' where id=4; -update noar tt set v0='EKPT46X2S7VOX1ONCVEGFEL5BWUL' where id=4; -update noar ti set v0='EKPT46X2S7VOX1ONCVEGFEL5BWUL' where id=4; -update noar tt set b2='GZ04H5FE0HRQT38XBQVVR4RD2L7A' where id=4; -update noar ti set b2='GZ04H5FE0HRQT38XBQVVR4RD2L7A' where id=4; -update noar tt set v0='9EWYHRP0D8' where id=5; -update noar ti set v0='9EWYHRP0D8' where id=5; -update noar tt set b0='LPGD' where id=5; -update noar ti set b0='LPGD' where id=5; -update noar tt set v0='XG7BF8KE' where id=5; -update noar ti set v0='XG7BF8KE' where id=5; -update noar tt set b1='U5GPP2BCJO9N1WYP30' where id=5; -update noar ti set b1='U5GPP2BCJO9N1WYP30' where id=5; -update noar tt set v0='UV5XL42YUWWXG' where id=5; -update noar ti set v0='UV5XL42YUWWXG' where id=5; -update noar tt set b2='7MN5NZD36Q96W9E' where id=5; -update noar ti set b2='7MN5NZD36Q96W9E' where id=5; -update noar tt set v0='AGCT3IRDSD3PWB5AL3WJMPW6K2W0' where id=6; -update noar ti set v0='AGCT3IRDSD3PWB5AL3WJMPW6K2W0' where id=6; -update noar tt set b0='VO' where id=6; -update noar ti set b0='VO' where id=6; -update noar tt set v0='Y6' where id=6; -update noar ti set v0='Y6' where id=6; -update noar tt set b1='9CFEKCL301KCECC0BIN6JZ5ODKKXVT9R' where id=6; -update noar ti set b1='9CFEKCL301KCECC0BIN6JZ5ODKKXVT9R' where id=6; -update noar tt set v0='S5FKO2KP' where id=6; -update noar ti set v0='S5FKO2KP' where id=6; -update noar tt set b2='R' where id=6; -update noar ti set b2='R' where id=6; -update noar tt set v0='87TAH6H3QYRC99KJV2KRK469F' where id=7; -update noar ti set v0='87TAH6H3QYRC99KJV2KRK469F' where id=7; -update noar tt set b0='FSPDL686DJ' where id=7; -update noar ti set b0='FSPDL686DJ' where id=7; -update noar tt set v0='C3FP17RHYLQJ04BMRK8' where id=7; -update noar ti set v0='C3FP17RHYLQJ04BMRK8' where id=7; -update noar tt set b1='J4RDQJY7MXR8Q9D' where id=7; -update noar ti set b1='J4RDQJY7MXR8Q9D' where id=7; -update noar tt set v0='DEV' where id=7; -update noar ti set v0='DEV' where id=7; -update noar tt set b2='5TTD5X7LUE9F1GAO32P1CSUCJ' where id=7; -update noar ti set b2='5TTD5X7LUE9F1GAO32P1CSUCJ' where id=7; -update noar tt set v0='A4PHIJ1GOWESVUQURKMR' where id=8; -update noar ti set v0='A4PHIJ1GOWESVUQURKMR' where id=8; -update noar tt set b0='5VU3ZUUBTIF8TLU3SNZ35FWATBR96' where id=8; -update noar ti set b0='5VU3ZUUBTIF8TLU3SNZ35FWATBR96' where id=8; -update noar tt set v0='12VJKL4HGDCWWNHD' where id=8; -update noar ti set v0='12VJKL4HGDCWWNHD' where id=8; -update noar tt set b1='7YI' where id=8; -update noar ti set b1='7YI' where id=8; -update noar tt set v0='KIJG51BVAVB' where id=8; -update noar ti set v0='KIJG51BVAVB' where id=8; -update noar tt set b2='I0ED9S52N7BGL' where id=8; -update noar ti set b2='I0ED9S52N7BGL' where id=8; -update noar tt set v0='XXARA4LJ' where id=9; -update noar ti set v0='XXARA4LJ' where id=9; -update noar tt set b0='PAOK10M2KCW47HL5LP41TYEH3KSEGBQ' where id=9; -update noar ti set b0='PAOK10M2KCW47HL5LP41TYEH3KSEGBQ' where id=9; -update noar tt set v0='7' where id=9; -update noar ti set v0='7' where id=9; -update noar tt set b1='2OPAV4T6YIFJ0A5IURKFCLSH6' where id=9; -update noar ti set b1='2OPAV4T6YIFJ0A5IURKFCLSH6' where id=9; -update noar tt set v0='SM3KD9E1499042WLSJL' where id=9; -update noar ti set v0='SM3KD9E1499042WLSJL' where id=9; -update noar tt set b2='ZYZRERVCZYTT07BHP9YAIDG' where id=9; -update noar ti set b2='ZYZRERVCZYTT07BHP9YAIDG' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 longblob null, -b1 tinyblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='RPULX62LW9PWNL1BBV' where id=1; -update noar ti set v0='RPULX62LW9PWNL1BBV' where id=1; -update noar tt set b0='EBN6H433WR' where id=1; -update noar ti set b0='EBN6H433WR' where id=1; -update noar tt set v0='60NROLQQ' where id=1; -update noar ti set v0='60NROLQQ' where id=1; -update noar tt set b1='GWKLRG9MUHC75DF0XL1JPC1N' where id=1; -update noar ti set b1='GWKLRG9MUHC75DF0XL1JPC1N' where id=1; -update noar tt set v0='LCT' where id=1; -update noar ti set v0='LCT' where id=1; -update noar tt set b2='GI5KZZ99EBI40COB8MF' where id=1; -update noar ti set b2='GI5KZZ99EBI40COB8MF' where id=1; -update noar tt set v0='5KIKJIPI2O' where id=2; -update noar ti set v0='5KIKJIPI2O' where id=2; -update noar tt set b0='6FPOWKKA7T453RNKFDZEA' where id=2; -update noar ti set b0='6FPOWKKA7T453RNKFDZEA' where id=2; -update noar tt set v0='9P8EWPCORITZOW120GXQKB120UO2Y5C' where id=2; -update noar ti set v0='9P8EWPCORITZOW120GXQKB120UO2Y5C' where id=2; -update noar tt set b1='U1EG0N56F8B9LPK6NY' where id=2; -update noar ti set b1='U1EG0N56F8B9LPK6NY' where id=2; -update noar tt set v0='VAI' where id=2; -update noar ti set v0='VAI' where id=2; -update noar tt set b2='JERVQIXJAIW0MO7112GW' where id=2; -update noar ti set b2='JERVQIXJAIW0MO7112GW' where id=2; -update noar tt set v0='U6Z' where id=3; -update noar ti set v0='U6Z' where id=3; -update noar tt set b0='DKV6A4' where id=3; -update noar ti set b0='DKV6A4' where id=3; -update noar tt set v0='G1PU5MW3D1VNOIW4' where id=3; -update noar ti set v0='G1PU5MW3D1VNOIW4' where id=3; -update noar tt set b1='KMEQVKZN8PS9J1HIG8WTJGV' where id=3; -update noar ti set b1='KMEQVKZN8PS9J1HIG8WTJGV' where id=3; -update noar tt set v0='G19NBCB' where id=3; -update noar ti set v0='G19NBCB' where id=3; -update noar tt set b2='X4O' where id=3; -update noar ti set b2='X4O' where id=3; -update noar tt set v0='HYZ66QZUP4616J63S3HI7PADW1XF' where id=4; -update noar ti set v0='HYZ66QZUP4616J63S3HI7PADW1XF' where id=4; -update noar tt set b0='A69A2R5RHBQW4G8DOYPD325N9E2O' where id=4; -update noar ti set b0='A69A2R5RHBQW4G8DOYPD325N9E2O' where id=4; -update noar tt set v0='3W6WSQHAV3UQ3KNIKGVCJKSU6859ECV' where id=4; -update noar ti set v0='3W6WSQHAV3UQ3KNIKGVCJKSU6859ECV' where id=4; -update noar tt set b1='ARGOPXPZ9ZZRNMKVJ4E1J5Y49' where id=4; -update noar ti set b1='ARGOPXPZ9ZZRNMKVJ4E1J5Y49' where id=4; -update noar tt set v0='SWL9BUMAZOWZQPOTVJWH' where id=4; -update noar ti set v0='SWL9BUMAZOWZQPOTVJWH' where id=4; -update noar tt set b2='JC0JMDLMA' where id=4; -update noar ti set b2='JC0JMDLMA' where id=4; -update noar tt set v0='OWM2KBXJKS033BE4MS17IX' where id=5; -update noar ti set v0='OWM2KBXJKS033BE4MS17IX' where id=5; -update noar tt set b0='XSWV23J92G16F' where id=5; -update noar ti set b0='XSWV23J92G16F' where id=5; -update noar tt set v0='BE5ZN0HOB5XRA8N8780V1JXI0' where id=5; -update noar ti set v0='BE5ZN0HOB5XRA8N8780V1JXI0' where id=5; -update noar tt set b1='OYL1R79EVXBUNHOF3DMA0UIQV94' where id=5; -update noar ti set b1='OYL1R79EVXBUNHOF3DMA0UIQV94' where id=5; -update noar tt set v0='CWB06LM81LYJO9P1MJMLY743OVA0D8P' where id=5; -update noar ti set v0='CWB06LM81LYJO9P1MJMLY743OVA0D8P' where id=5; -update noar tt set b2='T8VO7Z72AVLOIHFH' where id=5; -update noar ti set b2='T8VO7Z72AVLOIHFH' where id=5; -update noar tt set v0='JIJ' where id=6; -update noar ti set v0='JIJ' where id=6; -update noar tt set b0='V382QTI0XDOHNMBHASS' where id=6; -update noar ti set b0='V382QTI0XDOHNMBHASS' where id=6; -update noar tt set v0='PHDU8W5R9WSBVV' where id=6; -update noar ti set v0='PHDU8W5R9WSBVV' where id=6; -update noar tt set b1='C0' where id=6; -update noar ti set b1='C0' where id=6; -update noar tt set v0='HMZSR5CLHHRPXC67' where id=6; -update noar ti set v0='HMZSR5CLHHRPXC67' where id=6; -update noar tt set b2='2LEXRJ' where id=6; -update noar ti set b2='2LEXRJ' where id=6; -update noar tt set v0='C5UEJCZ44ZSKWASGCHOCZS5XPI' where id=7; -update noar ti set v0='C5UEJCZ44ZSKWASGCHOCZS5XPI' where id=7; -update noar tt set b0='NSJ32ESFTEURC8Q1QUISI3Q' where id=7; -update noar ti set b0='NSJ32ESFTEURC8Q1QUISI3Q' where id=7; -update noar tt set v0='U9A6JGW3F1QERDQKC' where id=7; -update noar ti set v0='U9A6JGW3F1QERDQKC' where id=7; -update noar tt set b1='A4QS9VL' where id=7; -update noar ti set b1='A4QS9VL' where id=7; -update noar tt set v0='T90E75CMRO2MLLSQ0A736U2RQYZH' where id=7; -update noar ti set v0='T90E75CMRO2MLLSQ0A736U2RQYZH' where id=7; -update noar tt set b2='JEY07ZTACQSBJ5EMAP8N' where id=7; -update noar ti set b2='JEY07ZTACQSBJ5EMAP8N' where id=7; -update noar tt set v0='107OUA94OD61MYZKSWWED5HZ13H9U5' where id=8; -update noar ti set v0='107OUA94OD61MYZKSWWED5HZ13H9U5' where id=8; -update noar tt set b0='2TTWCMPE38E' where id=8; -update noar ti set b0='2TTWCMPE38E' where id=8; -update noar tt set v0='YTY0086ZWN3MLYD9' where id=8; -update noar ti set v0='YTY0086ZWN3MLYD9' where id=8; -update noar tt set b1='SVV9MHT0T11KZHMW1MD2LSY37JI' where id=8; -update noar ti set b1='SVV9MHT0T11KZHMW1MD2LSY37JI' where id=8; -update noar tt set v0='4K6QCBNS3MBNPHI1XD1ZCIC8J47B18UD' where id=8; -update noar ti set v0='4K6QCBNS3MBNPHI1XD1ZCIC8J47B18UD' where id=8; -update noar tt set b2='8J9DMSY8YQUT28SJUIVLD' where id=8; -update noar ti set b2='8J9DMSY8YQUT28SJUIVLD' where id=8; -update noar tt set v0='9AG61GUQBY8XNS' where id=9; -update noar ti set v0='9AG61GUQBY8XNS' where id=9; -update noar tt set b0='2FOE7XGXRRXZ0CP2CB1XF7Y' where id=9; -update noar ti set b0='2FOE7XGXRRXZ0CP2CB1XF7Y' where id=9; -update noar tt set v0='ATK4K28K' where id=9; -update noar ti set v0='ATK4K28K' where id=9; -update noar tt set b1='KENHIFIEMDMC' where id=9; -update noar ti set b1='KENHIFIEMDMC' where id=9; -update noar tt set v0='QETX6P2KHF77839KVZEUZFX6MRV' where id=9; -update noar ti set v0='QETX6P2KHF77839KVZEUZFX6MRV' where id=9; -update noar tt set b2='GWPCEJ7Z3477H9QRG' where id=9; -update noar ti set b2='GWPCEJ7Z3477H9QRG' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 longblob null, -b1 tinyblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='58BLDTUHYA3L9SSP455H1' where id=1; -update noar ti set v0='58BLDTUHYA3L9SSP455H1' where id=1; -update noar tt set b0='5AAQ6W7ZXBB25WA2HH4' where id=1; -update noar ti set b0='5AAQ6W7ZXBB25WA2HH4' where id=1; -update noar tt set v0='Y4IMF' where id=1; -update noar ti set v0='Y4IMF' where id=1; -update noar tt set b1='NM72EQ9ONP' where id=1; -update noar ti set b1='NM72EQ9ONP' where id=1; -update noar tt set v0='M6' where id=1; -update noar ti set v0='M6' where id=1; -update noar tt set b2='Z48P1N9PHFQX3' where id=1; -update noar ti set b2='Z48P1N9PHFQX3' where id=1; -update noar tt set v0='4EUQXPC3FPCGGT3' where id=2; -update noar ti set v0='4EUQXPC3FPCGGT3' where id=2; -update noar tt set b0='91SLTZYN3' where id=2; -update noar ti set b0='91SLTZYN3' where id=2; -update noar tt set v0='WAEH1BDR9' where id=2; -update noar ti set v0='WAEH1BDR9' where id=2; -update noar tt set b1='G5LYTOO3BUPN2YMPCOOG224VHFDV5B' where id=2; -update noar ti set b1='G5LYTOO3BUPN2YMPCOOG224VHFDV5B' where id=2; -update noar tt set v0='3Q9OTAOFAEUKMTNXGAAR' where id=2; -update noar ti set v0='3Q9OTAOFAEUKMTNXGAAR' where id=2; -update noar tt set b2='SOZXB0T23OOJ' where id=2; -update noar ti set b2='SOZXB0T23OOJ' where id=2; -update noar tt set v0='VBTA34YD' where id=3; -update noar ti set v0='VBTA34YD' where id=3; -update noar tt set b0='MWN05PD8' where id=3; -update noar ti set b0='MWN05PD8' where id=3; -update noar tt set v0='L62NDWVIUX5ZX1ACNC3SIAT1' where id=3; -update noar ti set v0='L62NDWVIUX5ZX1ACNC3SIAT1' where id=3; -update noar tt set b1='ECEI' where id=3; -update noar ti set b1='ECEI' where id=3; -update noar tt set v0='C6' where id=3; -update noar ti set v0='C6' where id=3; -update noar tt set b2='8P5H68F' where id=3; -update noar ti set b2='8P5H68F' where id=3; -update noar tt set v0='3FICLOL8BJTD7SXE' where id=4; -update noar ti set v0='3FICLOL8BJTD7SXE' where id=4; -update noar tt set b0='Y7KL5NS9LEXDQ2KKTT2DHL4816' where id=4; -update noar ti set b0='Y7KL5NS9LEXDQ2KKTT2DHL4816' where id=4; -update noar tt set v0='U26ZCEPQJ5OFB' where id=4; -update noar ti set v0='U26ZCEPQJ5OFB' where id=4; -update noar tt set b1='YFM8S' where id=4; -update noar ti set b1='YFM8S' where id=4; -update noar tt set v0='W7Y1Q9F0J0T6SS9IGL012WT' where id=4; -update noar ti set v0='W7Y1Q9F0J0T6SS9IGL012WT' where id=4; -update noar tt set b2='PPK' where id=4; -update noar ti set b2='PPK' where id=4; -update noar tt set v0='Z5RSICBC2X5B2ACKDR193O56' where id=5; -update noar ti set v0='Z5RSICBC2X5B2ACKDR193O56' where id=5; -update noar tt set b0='RE213' where id=5; -update noar ti set b0='RE213' where id=5; -update noar tt set v0='TZ' where id=5; -update noar ti set v0='TZ' where id=5; -update noar tt set b1='J6' where id=5; -update noar ti set b1='J6' where id=5; -update noar tt set v0='OL1VSJ51WE9V1P7' where id=5; -update noar ti set v0='OL1VSJ51WE9V1P7' where id=5; -update noar tt set b2='S' where id=5; -update noar ti set b2='S' where id=5; -update noar tt set v0='4X7OIPGWT9966Y7UMWEFGPEU3JS' where id=6; -update noar ti set v0='4X7OIPGWT9966Y7UMWEFGPEU3JS' where id=6; -update noar tt set b0='BB7SVEU7Z5LDJ9DLM5' where id=6; -update noar ti set b0='BB7SVEU7Z5LDJ9DLM5' where id=6; -update noar tt set v0='CMPL5ODE8KGFYMX4X' where id=6; -update noar ti set v0='CMPL5ODE8KGFYMX4X' where id=6; -update noar tt set b1='A8LT6A2389RXW8TWZV711R2LFBHPYZ' where id=6; -update noar ti set b1='A8LT6A2389RXW8TWZV711R2LFBHPYZ' where id=6; -update noar tt set v0='W0E6GTBF' where id=6; -update noar ti set v0='W0E6GTBF' where id=6; -update noar tt set b2='R8MP28VSR5A8F2FBQ4OT5RJZ2F27OLK' where id=6; -update noar ti set b2='R8MP28VSR5A8F2FBQ4OT5RJZ2F27OLK' where id=6; -update noar tt set v0='6D3U9MM3K6QXQM3QFT7YBNSMY145TS' where id=7; -update noar ti set v0='6D3U9MM3K6QXQM3QFT7YBNSMY145TS' where id=7; -update noar tt set b0='O1A00MQB10MI8' where id=7; -update noar ti set b0='O1A00MQB10MI8' where id=7; -update noar tt set v0='DQMRXZY1QLUXO0SAJLE8B' where id=7; -update noar ti set v0='DQMRXZY1QLUXO0SAJLE8B' where id=7; -update noar tt set b1='QL59' where id=7; -update noar ti set b1='QL59' where id=7; -update noar tt set v0='FR1IISP7H0EZE1BKUM8OC' where id=7; -update noar ti set v0='FR1IISP7H0EZE1BKUM8OC' where id=7; -update noar tt set b2='5DLR63GH6D1HNTR1GH' where id=7; -update noar ti set b2='5DLR63GH6D1HNTR1GH' where id=7; -update noar tt set v0='B6HLS9E2I63HRS62BQ5' where id=8; -update noar ti set v0='B6HLS9E2I63HRS62BQ5' where id=8; -update noar tt set b0='M9B7QL297VR9RG9SZGT0MNEO' where id=8; -update noar ti set b0='M9B7QL297VR9RG9SZGT0MNEO' where id=8; -update noar tt set v0='0PFH3UIO4S4MF1VPG4ODF51Y5HVZ0WS' where id=8; -update noar ti set v0='0PFH3UIO4S4MF1VPG4ODF51Y5HVZ0WS' where id=8; -update noar tt set b1='3G9R3JMB194T3UBMOS0GI5KY' where id=8; -update noar ti set b1='3G9R3JMB194T3UBMOS0GI5KY' where id=8; -update noar tt set v0='TGBG4QLZO18CL9XF6LCD2' where id=8; -update noar ti set v0='TGBG4QLZO18CL9XF6LCD2' where id=8; -update noar tt set b2='7M3XU0L4PD1Y8ABNLZLR3OS' where id=8; -update noar ti set b2='7M3XU0L4PD1Y8ABNLZLR3OS' where id=8; -update noar tt set v0='31OMU1T13401V5NUK' where id=9; -update noar ti set v0='31OMU1T13401V5NUK' where id=9; -update noar tt set b0='PQ3HSSEWF4O164ZAT' where id=9; -update noar ti set b0='PQ3HSSEWF4O164ZAT' where id=9; -update noar tt set v0='AFAUHUC' where id=9; -update noar ti set v0='AFAUHUC' where id=9; -update noar tt set b1='5VDUXHIGXINJAX2BPJLQH4U5SV5' where id=9; -update noar ti set b1='5VDUXHIGXINJAX2BPJLQH4U5SV5' where id=9; -update noar tt set v0='YP' where id=9; -update noar ti set v0='YP' where id=9; -update noar tt set b2='4U5F6DOHHLIXCSJCWIK5ZILOY63Y5' where id=9; -update noar ti set b2='4U5F6DOHHLIXCSJCWIK5ZILOY63Y5' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 longblob not null, -b1 tinyblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='PFZI1ZDQWRW79BR' where id=1; -update noar ti set v0='PFZI1ZDQWRW79BR' where id=1; -update noar tt set b0='ZY4' where id=1; -update noar ti set b0='ZY4' where id=1; -update noar tt set v0='NCWVA3LUVESHQ046HQI1VLHRAU38YA0' where id=1; -update noar ti set v0='NCWVA3LUVESHQ046HQI1VLHRAU38YA0' where id=1; -update noar tt set b1='DBW5MIYOW66JF' where id=1; -update noar ti set b1='DBW5MIYOW66JF' where id=1; -update noar tt set v0='BTJ8P0F7Z9A55BG17QMGH0URYIN' where id=1; -update noar ti set v0='BTJ8P0F7Z9A55BG17QMGH0URYIN' where id=1; -update noar tt set b2='LCUB' where id=1; -update noar ti set b2='LCUB' where id=1; -update noar tt set v0='1Q3G' where id=2; -update noar ti set v0='1Q3G' where id=2; -update noar tt set b0='6V7DPI' where id=2; -update noar ti set b0='6V7DPI' where id=2; -update noar tt set v0='Q2EEOCM7TZKRM9DM' where id=2; -update noar ti set v0='Q2EEOCM7TZKRM9DM' where id=2; -update noar tt set b1='19RO1G' where id=2; -update noar ti set b1='19RO1G' where id=2; -update noar tt set v0='GK4ERLUA2VYO' where id=2; -update noar ti set v0='GK4ERLUA2VYO' where id=2; -update noar tt set b2='LR8F35OLYZZZ5CULEQTJ' where id=2; -update noar ti set b2='LR8F35OLYZZZ5CULEQTJ' where id=2; -update noar tt set v0='FJTVQ' where id=3; -update noar ti set v0='FJTVQ' where id=3; -update noar tt set b0='L6MH3B8YISILMLWQMEZYQ5B1UVLWOE' where id=3; -update noar ti set b0='L6MH3B8YISILMLWQMEZYQ5B1UVLWOE' where id=3; -update noar tt set v0='YSUUP05OQI53S1AVZSSY048WOYID04' where id=3; -update noar ti set v0='YSUUP05OQI53S1AVZSSY048WOYID04' where id=3; -update noar tt set b1='KFA75OEBW4MJW9N2GW' where id=3; -update noar ti set b1='KFA75OEBW4MJW9N2GW' where id=3; -update noar tt set v0='F68IZ0374' where id=3; -update noar ti set v0='F68IZ0374' where id=3; -update noar tt set b2='ZXS8XWVM35DBD' where id=3; -update noar ti set b2='ZXS8XWVM35DBD' where id=3; -update noar tt set v0='O57L' where id=4; -update noar ti set v0='O57L' where id=4; -update noar tt set b0='7X4BT8LV' where id=4; -update noar ti set b0='7X4BT8LV' where id=4; -update noar tt set v0='CN9YUBSTBQGUIDFM05UKAF' where id=4; -update noar ti set v0='CN9YUBSTBQGUIDFM05UKAF' where id=4; -update noar tt set b1='IT742DH35MG0ZZL59FD3' where id=4; -update noar ti set b1='IT742DH35MG0ZZL59FD3' where id=4; -update noar tt set v0='TCNJYKTBL33MLG10' where id=4; -update noar ti set v0='TCNJYKTBL33MLG10' where id=4; -update noar tt set b2='HZ5CHOJ7K6CB7LD15N62TO4YEM7BG3' where id=4; -update noar ti set b2='HZ5CHOJ7K6CB7LD15N62TO4YEM7BG3' where id=4; -update noar tt set v0='AGW0EZFKVV' where id=5; -update noar ti set v0='AGW0EZFKVV' where id=5; -update noar tt set b0='3I5X9D' where id=5; -update noar ti set b0='3I5X9D' where id=5; -update noar tt set v0='SYTLOCLUI3PQIY2WEAO442O3' where id=5; -update noar ti set v0='SYTLOCLUI3PQIY2WEAO442O3' where id=5; -update noar tt set b1='HY5VK58ER70PZASX4' where id=5; -update noar ti set b1='HY5VK58ER70PZASX4' where id=5; -update noar tt set v0='EVCKXHJJNSCKB48XT' where id=5; -update noar ti set v0='EVCKXHJJNSCKB48XT' where id=5; -update noar tt set b2='5T26V6C47MOUDCXLHB9Z8N' where id=5; -update noar ti set b2='5T26V6C47MOUDCXLHB9Z8N' where id=5; -update noar tt set v0='A065D7RN1JT56EJQV' where id=6; -update noar ti set v0='A065D7RN1JT56EJQV' where id=6; -update noar tt set b0='R9KWS0UEOUZ394' where id=6; -update noar ti set b0='R9KWS0UEOUZ394' where id=6; -update noar tt set v0='S55FYWZQVX' where id=6; -update noar ti set v0='S55FYWZQVX' where id=6; -update noar tt set b1='OTMPKHQNZFJNI' where id=6; -update noar ti set b1='OTMPKHQNZFJNI' where id=6; -update noar tt set v0='E4P3B' where id=6; -update noar ti set v0='E4P3B' where id=6; -update noar tt set b2='OKQWF8P0C4S6TR05BTF1' where id=6; -update noar ti set b2='OKQWF8P0C4S6TR05BTF1' where id=6; -update noar tt set v0='VB6L3HT40EEOEUZ8ADDHD9YDW7LMRIH0' where id=7; -update noar ti set v0='VB6L3HT40EEOEUZ8ADDHD9YDW7LMRIH0' where id=7; -update noar tt set b0='GRVCDP53ZVKTH05V' where id=7; -update noar ti set b0='GRVCDP53ZVKTH05V' where id=7; -update noar tt set v0='BDLOGIPIRIS' where id=7; -update noar ti set v0='BDLOGIPIRIS' where id=7; -update noar tt set b1='7HSQVQC01PPQ' where id=7; -update noar ti set b1='7HSQVQC01PPQ' where id=7; -update noar tt set v0='84AX4UFWW' where id=7; -update noar ti set v0='84AX4UFWW' where id=7; -update noar tt set b2='IAIU' where id=7; -update noar ti set b2='IAIU' where id=7; -update noar tt set v0='FW3H1K4TJ9TINYXVPYZ9' where id=8; -update noar ti set v0='FW3H1K4TJ9TINYXVPYZ9' where id=8; -update noar tt set b0='7ZI1B' where id=8; -update noar ti set b0='7ZI1B' where id=8; -update noar tt set v0='CFGJD7O' where id=8; -update noar ti set v0='CFGJD7O' where id=8; -update noar tt set b1='XNEOK0CD5UAZO3PE631R825L7IXE' where id=8; -update noar ti set b1='XNEOK0CD5UAZO3PE631R825L7IXE' where id=8; -update noar tt set v0='N8498UCGW8O8ZDHXI11' where id=8; -update noar ti set v0='N8498UCGW8O8ZDHXI11' where id=8; -update noar tt set b2='CMOL' where id=8; -update noar ti set b2='CMOL' where id=8; -update noar tt set v0='003' where id=9; -update noar ti set v0='003' where id=9; -update noar tt set b0='8RS' where id=9; -update noar ti set b0='8RS' where id=9; -update noar tt set v0='OH85JETPP' where id=9; -update noar ti set v0='OH85JETPP' where id=9; -update noar tt set b1='GYUQAX51UEX2V' where id=9; -update noar ti set b1='GYUQAX51UEX2V' where id=9; -update noar tt set v0='UM2XY' where id=9; -update noar ti set v0='UM2XY' where id=9; -update noar tt set b2='SFGJ8CMU5B4XL35M9EVPO85LQ9RFN33' where id=9; -update noar ti set b2='SFGJ8CMU5B4XL35M9EVPO85LQ9RFN33' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 longblob not null, -b1 tinyblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='K7XOCEWHIK6N4' where id=1; -update noar ti set v0='K7XOCEWHIK6N4' where id=1; -update noar tt set b0='VK8NMQYX7UQE6XYPALQOXQWK5I2S61' where id=1; -update noar ti set b0='VK8NMQYX7UQE6XYPALQOXQWK5I2S61' where id=1; -update noar tt set v0='VNU2BOQLXYGFWKTIMJ2OVJNYPTZHEX' where id=1; -update noar ti set v0='VNU2BOQLXYGFWKTIMJ2OVJNYPTZHEX' where id=1; -update noar tt set b1='KU2DL1ZB414TU0XZ5I' where id=1; -update noar ti set b1='KU2DL1ZB414TU0XZ5I' where id=1; -update noar tt set v0='ZQXND1RKI36X' where id=1; -update noar ti set v0='ZQXND1RKI36X' where id=1; -update noar tt set b2='U' where id=1; -update noar ti set b2='U' where id=1; -update noar tt set v0='GLVWB4O63MR' where id=2; -update noar ti set v0='GLVWB4O63MR' where id=2; -update noar tt set b0='905J2XXRBGMF08JF5AF7KA2CS46' where id=2; -update noar ti set b0='905J2XXRBGMF08JF5AF7KA2CS46' where id=2; -update noar tt set v0='ASSXRUYQBX7GB' where id=2; -update noar ti set v0='ASSXRUYQBX7GB' where id=2; -update noar tt set b1='Z98E' where id=2; -update noar ti set b1='Z98E' where id=2; -update noar tt set v0='FVGE24ML' where id=2; -update noar ti set v0='FVGE24ML' where id=2; -update noar tt set b2='G37NBLBNJU' where id=2; -update noar ti set b2='G37NBLBNJU' where id=2; -update noar tt set v0='2QNCL' where id=3; -update noar ti set v0='2QNCL' where id=3; -update noar tt set b0='JMQ27CLX4L9NGIK1IRLKT8J3KFNHA' where id=3; -update noar ti set b0='JMQ27CLX4L9NGIK1IRLKT8J3KFNHA' where id=3; -update noar tt set v0='UFH7J' where id=3; -update noar ti set v0='UFH7J' where id=3; -update noar tt set b1='WRAD9B1D1YG2GEPA8N05B' where id=3; -update noar ti set b1='WRAD9B1D1YG2GEPA8N05B' where id=3; -update noar tt set v0='QE2KNNEA2N9H8M0YJT5BJ19UOOWKZH' where id=3; -update noar ti set v0='QE2KNNEA2N9H8M0YJT5BJ19UOOWKZH' where id=3; -update noar tt set b2='TYKL2R4LAYRU0K4' where id=3; -update noar ti set b2='TYKL2R4LAYRU0K4' where id=3; -update noar tt set v0='OT8V2O5A2NKCQ71' where id=4; -update noar ti set v0='OT8V2O5A2NKCQ71' where id=4; -update noar tt set b0='5PDA9I' where id=4; -update noar ti set b0='5PDA9I' where id=4; -update noar tt set v0='QXBTYZ1Q0UB0JMO64SK0B' where id=4; -update noar ti set v0='QXBTYZ1Q0UB0JMO64SK0B' where id=4; -update noar tt set b1='STTW7WR7GHIUCYF08DXXC' where id=4; -update noar ti set b1='STTW7WR7GHIUCYF08DXXC' where id=4; -update noar tt set v0='R70CZSXFAA0LF02QGSNAWKQL' where id=4; -update noar ti set v0='R70CZSXFAA0LF02QGSNAWKQL' where id=4; -update noar tt set b2='SKFJD2IXD4LY' where id=4; -update noar ti set b2='SKFJD2IXD4LY' where id=4; -update noar tt set v0='VSA4F624UJE' where id=5; -update noar ti set v0='VSA4F624UJE' where id=5; -update noar tt set b0='W' where id=5; -update noar ti set b0='W' where id=5; -update noar tt set v0='6Y6EVQTPWNI6G0V8R5UARD' where id=5; -update noar ti set v0='6Y6EVQTPWNI6G0V8R5UARD' where id=5; -update noar tt set b1='1NBU' where id=5; -update noar ti set b1='1NBU' where id=5; -update noar tt set v0='KFPXT4QUGB28OOEAHU06B' where id=5; -update noar ti set v0='KFPXT4QUGB28OOEAHU06B' where id=5; -update noar tt set b2='YOOKE6BR' where id=5; -update noar ti set b2='YOOKE6BR' where id=5; -update noar tt set v0='ILUOUWS5LJ' where id=6; -update noar ti set v0='ILUOUWS5LJ' where id=6; -update noar tt set b0='RKXV8F56U7JZLE' where id=6; -update noar ti set b0='RKXV8F56U7JZLE' where id=6; -update noar tt set v0='2XN21YLQS5' where id=6; -update noar ti set v0='2XN21YLQS5' where id=6; -update noar tt set b1='QL' where id=6; -update noar ti set b1='QL' where id=6; -update noar tt set v0='9HTHQEQ9UFG7GBLIB' where id=6; -update noar ti set v0='9HTHQEQ9UFG7GBLIB' where id=6; -update noar tt set b2='U6RH' where id=6; -update noar ti set b2='U6RH' where id=6; -update noar tt set v0='7VWXERGUPBLLXGLTEX6' where id=7; -update noar ti set v0='7VWXERGUPBLLXGLTEX6' where id=7; -update noar tt set b0='MZPX0PUJAR3C1L9AAQV18O' where id=7; -update noar ti set b0='MZPX0PUJAR3C1L9AAQV18O' where id=7; -update noar tt set v0='6IZGPGBAQ3RXM' where id=7; -update noar ti set v0='6IZGPGBAQ3RXM' where id=7; -update noar tt set b1='ZTQUOXDQCR' where id=7; -update noar ti set b1='ZTQUOXDQCR' where id=7; -update noar tt set v0='WMT5NH' where id=7; -update noar ti set v0='WMT5NH' where id=7; -update noar tt set b2='9LG5DRG8QBT2' where id=7; -update noar ti set b2='9LG5DRG8QBT2' where id=7; -update noar tt set v0='0FSV9LF7HN' where id=8; -update noar ti set v0='0FSV9LF7HN' where id=8; -update noar tt set b0='2LTUA' where id=8; -update noar ti set b0='2LTUA' where id=8; -update noar tt set v0='OA7R2IYQ4A3NYE0WR7N7PCJ' where id=8; -update noar ti set v0='OA7R2IYQ4A3NYE0WR7N7PCJ' where id=8; -update noar tt set b1='QDQ8J6CVSR0DAZ11B' where id=8; -update noar ti set b1='QDQ8J6CVSR0DAZ11B' where id=8; -update noar tt set v0='QQIEK3SWCIF1A9372A3' where id=8; -update noar ti set v0='QQIEK3SWCIF1A9372A3' where id=8; -update noar tt set b2='JP2RIQR162VE5W8TX' where id=8; -update noar ti set b2='JP2RIQR162VE5W8TX' where id=8; -update noar tt set v0='MCCED6Z4M' where id=9; -update noar ti set v0='MCCED6Z4M' where id=9; -update noar tt set b0='NQ8UOIM0P7H' where id=9; -update noar ti set b0='NQ8UOIM0P7H' where id=9; -update noar tt set v0='YC34H379KF' where id=9; -update noar ti set v0='YC34H379KF' where id=9; -update noar tt set b1='KI' where id=9; -update noar ti set b1='KI' where id=9; -update noar tt set v0='2XOR8' where id=9; -update noar ti set v0='2XOR8' where id=9; -update noar tt set b2='J5K5YTVFQ9HVZTDJKY' where id=9; -update noar ti set b2='J5K5YTVFQ9HVZTDJKY' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 longblob null, -b1 blob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='XXZRVK2LX' where id=1; -update noar ti set v0='XXZRVK2LX' where id=1; -update noar tt set b0='OCH53MO2OKGD2' where id=1; -update noar ti set b0='OCH53MO2OKGD2' where id=1; -update noar tt set v0='H2Z' where id=1; -update noar ti set v0='H2Z' where id=1; -update noar tt set b1='FZSRXCRM8F' where id=1; -update noar ti set b1='FZSRXCRM8F' where id=1; -update noar tt set v0='QHJI4' where id=1; -update noar ti set v0='QHJI4' where id=1; -update noar tt set b2='7JSKNMZEP06X2FNVTRCXOL' where id=1; -update noar ti set b2='7JSKNMZEP06X2FNVTRCXOL' where id=1; -update noar tt set v0='BWVRJJKHOWFZ960CX' where id=2; -update noar ti set v0='BWVRJJKHOWFZ960CX' where id=2; -update noar tt set b0='NT1438HIJ257H5WYXZ9LB6' where id=2; -update noar ti set b0='NT1438HIJ257H5WYXZ9LB6' where id=2; -update noar tt set v0='NEWE' where id=2; -update noar ti set v0='NEWE' where id=2; -update noar tt set b1='2RJGJ2A7GQB1HPH4558D2NJ109WEL' where id=2; -update noar ti set b1='2RJGJ2A7GQB1HPH4558D2NJ109WEL' where id=2; -update noar tt set v0='K9Y8IS72OW0UW0HRNSEJB' where id=2; -update noar ti set v0='K9Y8IS72OW0UW0HRNSEJB' where id=2; -update noar tt set b2='34NG7W6B86XFMFOR6' where id=2; -update noar ti set b2='34NG7W6B86XFMFOR6' where id=2; -update noar tt set v0='TX3LAJWBE4' where id=3; -update noar ti set v0='TX3LAJWBE4' where id=3; -update noar tt set b0='SA' where id=3; -update noar ti set b0='SA' where id=3; -update noar tt set v0='U0GP9ZVUEGWERA18A6' where id=3; -update noar ti set v0='U0GP9ZVUEGWERA18A6' where id=3; -update noar tt set b1='WWL99RHWMO005TRG9EI1XZPFYIW6' where id=3; -update noar ti set b1='WWL99RHWMO005TRG9EI1XZPFYIW6' where id=3; -update noar tt set v0='JUE9OH' where id=3; -update noar ti set v0='JUE9OH' where id=3; -update noar tt set b2='BPOLUVX9TPIM08BM3' where id=3; -update noar ti set b2='BPOLUVX9TPIM08BM3' where id=3; -update noar tt set v0='NNNFCYWJK3M21LLFZJRV' where id=4; -update noar ti set v0='NNNFCYWJK3M21LLFZJRV' where id=4; -update noar tt set b0='VF75HXBL43KB0YOGJXQF2Y9W13' where id=4; -update noar ti set b0='VF75HXBL43KB0YOGJXQF2Y9W13' where id=4; -update noar tt set v0='0WQVBGWN39HUQ3V' where id=4; -update noar ti set v0='0WQVBGWN39HUQ3V' where id=4; -update noar tt set b1='P8P8SCTSQ3KKPCW0B7CJZGHLLJ' where id=4; -update noar ti set b1='P8P8SCTSQ3KKPCW0B7CJZGHLLJ' where id=4; -update noar tt set v0='2VBNB6HU98S6A9Y3CJI5CPOU9' where id=4; -update noar ti set v0='2VBNB6HU98S6A9Y3CJI5CPOU9' where id=4; -update noar tt set b2='6HCOT9U6BABUW2D' where id=4; -update noar ti set b2='6HCOT9U6BABUW2D' where id=4; -update noar tt set v0='Q' where id=5; -update noar ti set v0='Q' where id=5; -update noar tt set b0='IXNX70ALXFO365UWMZVZF7I0L' where id=5; -update noar ti set b0='IXNX70ALXFO365UWMZVZF7I0L' where id=5; -update noar tt set v0='NP36V0U2ZLP0NL' where id=5; -update noar ti set v0='NP36V0U2ZLP0NL' where id=5; -update noar tt set b1='NSG4' where id=5; -update noar ti set b1='NSG4' where id=5; -update noar tt set v0='L3BWRRDPGF9BVFB7PMB05J1K' where id=5; -update noar ti set v0='L3BWRRDPGF9BVFB7PMB05J1K' where id=5; -update noar tt set b2='MK1Y8IU7BC2IUY' where id=5; -update noar ti set b2='MK1Y8IU7BC2IUY' where id=5; -update noar tt set v0='PG' where id=6; -update noar ti set v0='PG' where id=6; -update noar tt set b0='9G3IIZKS55DO3VJCRGOSLCEESS5CA' where id=6; -update noar ti set b0='9G3IIZKS55DO3VJCRGOSLCEESS5CA' where id=6; -update noar tt set v0='QS5WG' where id=6; -update noar ti set v0='QS5WG' where id=6; -update noar tt set b1='QR2OAV95RJBTHCM2SD' where id=6; -update noar ti set b1='QR2OAV95RJBTHCM2SD' where id=6; -update noar tt set v0='2AWVDGBP2YIK4FUFRVO70W' where id=6; -update noar ti set v0='2AWVDGBP2YIK4FUFRVO70W' where id=6; -update noar tt set b2='V83ZMLV' where id=6; -update noar ti set b2='V83ZMLV' where id=6; -update noar tt set v0='0JMYXS19X7195QA2H96F2C22RBLM' where id=7; -update noar ti set v0='0JMYXS19X7195QA2H96F2C22RBLM' where id=7; -update noar tt set b0='ZKO6X' where id=7; -update noar ti set b0='ZKO6X' where id=7; -update noar tt set v0='I0IZ08A8JOPO3LRCUTR47HFU' where id=7; -update noar ti set v0='I0IZ08A8JOPO3LRCUTR47HFU' where id=7; -update noar tt set b1='AU1YSN3RW5NDMSSQ8H' where id=7; -update noar ti set b1='AU1YSN3RW5NDMSSQ8H' where id=7; -update noar tt set v0='ZP8YB' where id=7; -update noar ti set v0='ZP8YB' where id=7; -update noar tt set b2='7JHX61OHCWL3JADI62XL6AVMXXBRL' where id=7; -update noar ti set b2='7JHX61OHCWL3JADI62XL6AVMXXBRL' where id=7; -update noar tt set v0='1VOD4' where id=8; -update noar ti set v0='1VOD4' where id=8; -update noar tt set b0='QKTK6B6M4HH64H8YAL2DY91226O4B' where id=8; -update noar ti set b0='QKTK6B6M4HH64H8YAL2DY91226O4B' where id=8; -update noar tt set v0='TRYAUJ4NYSY0' where id=8; -update noar ti set v0='TRYAUJ4NYSY0' where id=8; -update noar tt set b1='PO5DLN' where id=8; -update noar ti set b1='PO5DLN' where id=8; -update noar tt set v0='TGU0GG4VVWAPOSPQT' where id=8; -update noar ti set v0='TGU0GG4VVWAPOSPQT' where id=8; -update noar tt set b2='60' where id=8; -update noar ti set b2='60' where id=8; -update noar tt set v0='CD9KLYG2YR0RI8F' where id=9; -update noar ti set v0='CD9KLYG2YR0RI8F' where id=9; -update noar tt set b0='6RUQIWVBR99VWPL4' where id=9; -update noar ti set b0='6RUQIWVBR99VWPL4' where id=9; -update noar tt set v0='WY5S8XA5LDQXNNFNPOHGH' where id=9; -update noar ti set v0='WY5S8XA5LDQXNNFNPOHGH' where id=9; -update noar tt set b1='Z2X2' where id=9; -update noar ti set b1='Z2X2' where id=9; -update noar tt set v0='DPITK' where id=9; -update noar ti set v0='DPITK' where id=9; -update noar tt set b2='37M' where id=9; -update noar ti set b2='37M' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 longblob null, -b1 blob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='XB7HWL6Z612TDX16ZOMFVIJDQ' where id=1; -update noar ti set v0='XB7HWL6Z612TDX16ZOMFVIJDQ' where id=1; -update noar tt set b0='G4GS2A7T015PH' where id=1; -update noar ti set b0='G4GS2A7T015PH' where id=1; -update noar tt set v0='8DSJ1KX1LUIW' where id=1; -update noar ti set v0='8DSJ1KX1LUIW' where id=1; -update noar tt set b1='XNEUE1B9RFCVFIHN419KF1RYR4' where id=1; -update noar ti set b1='XNEUE1B9RFCVFIHN419KF1RYR4' where id=1; -update noar tt set v0='6RK84CG8ED1LC9RFF0968NPMTJQJ8AU' where id=1; -update noar ti set v0='6RK84CG8ED1LC9RFF0968NPMTJQJ8AU' where id=1; -update noar tt set b2='BPOY7999PI769JY9SQ69XYA2' where id=1; -update noar ti set b2='BPOY7999PI769JY9SQ69XYA2' where id=1; -update noar tt set v0='A8EQ7ZSAGDLA85JUHGRXI79KJJ8Z' where id=2; -update noar ti set v0='A8EQ7ZSAGDLA85JUHGRXI79KJJ8Z' where id=2; -update noar tt set b0='8AVX3WZQC111M940V' where id=2; -update noar ti set b0='8AVX3WZQC111M940V' where id=2; -update noar tt set v0='LXD8' where id=2; -update noar ti set v0='LXD8' where id=2; -update noar tt set b1='HU0CIH4' where id=2; -update noar ti set b1='HU0CIH4' where id=2; -update noar tt set v0='R' where id=2; -update noar ti set v0='R' where id=2; -update noar tt set b2='AHYYQU' where id=2; -update noar ti set b2='AHYYQU' where id=2; -update noar tt set v0='YI0YBXN676MSZG6GQHM84C' where id=3; -update noar ti set v0='YI0YBXN676MSZG6GQHM84C' where id=3; -update noar tt set b0='GJ6CG8OORJ0S761ZOFTEW86P6AYXTNO' where id=3; -update noar ti set b0='GJ6CG8OORJ0S761ZOFTEW86P6AYXTNO' where id=3; -update noar tt set v0='GSS2GNYNI0EX97BIGT5ZW0QU8GK3A' where id=3; -update noar ti set v0='GSS2GNYNI0EX97BIGT5ZW0QU8GK3A' where id=3; -update noar tt set b1='II1KSE5UD' where id=3; -update noar ti set b1='II1KSE5UD' where id=3; -update noar tt set v0='W5Z3' where id=3; -update noar ti set v0='W5Z3' where id=3; -update noar tt set b2='AQTAT8Y089147A12' where id=3; -update noar ti set b2='AQTAT8Y089147A12' where id=3; -update noar tt set v0='G6757GORF9OMXPT8DPJRW5TO' where id=4; -update noar ti set v0='G6757GORF9OMXPT8DPJRW5TO' where id=4; -update noar tt set b0='WQS9H9DP1DH7JNYRIP' where id=4; -update noar ti set b0='WQS9H9DP1DH7JNYRIP' where id=4; -update noar tt set v0='J4X3CVQSWNXTBPKLRSJOSJR' where id=4; -update noar ti set v0='J4X3CVQSWNXTBPKLRSJOSJR' where id=4; -update noar tt set b1='BYMUD0DD1QU6BZ1' where id=4; -update noar ti set b1='BYMUD0DD1QU6BZ1' where id=4; -update noar tt set v0='EQLIIP1LW5QQE7D5BUS98RDU' where id=4; -update noar ti set v0='EQLIIP1LW5QQE7D5BUS98RDU' where id=4; -update noar tt set b2='Y5BHOQTL0VXLLP55HH5ON3POJC' where id=4; -update noar ti set b2='Y5BHOQTL0VXLLP55HH5ON3POJC' where id=4; -update noar tt set v0='MVQBXP4O6KOI2' where id=5; -update noar ti set v0='MVQBXP4O6KOI2' where id=5; -update noar tt set b0='BLNJDAUNF' where id=5; -update noar ti set b0='BLNJDAUNF' where id=5; -update noar tt set v0='SLRBQAH2G2STSCPAAOBNQCXUVJ' where id=5; -update noar ti set v0='SLRBQAH2G2STSCPAAOBNQCXUVJ' where id=5; -update noar tt set b1='57WQ6XZIZ9TXZCS65F696HOR' where id=5; -update noar ti set b1='57WQ6XZIZ9TXZCS65F696HOR' where id=5; -update noar tt set v0='H5B1W8GVTZQZKW9M4KPTWIMIS9' where id=5; -update noar ti set v0='H5B1W8GVTZQZKW9M4KPTWIMIS9' where id=5; -update noar tt set b2='MDV64GUBR4F9TV' where id=5; -update noar ti set b2='MDV64GUBR4F9TV' where id=5; -update noar tt set v0='A3S3UVKSPLT0RZT089PUZ6ID3' where id=6; -update noar ti set v0='A3S3UVKSPLT0RZT089PUZ6ID3' where id=6; -update noar tt set b0='QHKCUHAMQVU5HXJRO5RN6HEH8TNDOIVX' where id=6; -update noar ti set b0='QHKCUHAMQVU5HXJRO5RN6HEH8TNDOIVX' where id=6; -update noar tt set v0='7KG0U9Y6TFWI2CXEZFGWDJLGXNBY' where id=6; -update noar ti set v0='7KG0U9Y6TFWI2CXEZFGWDJLGXNBY' where id=6; -update noar tt set b1='N502CN01R0E5E3ZN0I0VNLH2S' where id=6; -update noar ti set b1='N502CN01R0E5E3ZN0I0VNLH2S' where id=6; -update noar tt set v0='QN3RW00QL1I9D8T82KAVOR5A2MS' where id=6; -update noar ti set v0='QN3RW00QL1I9D8T82KAVOR5A2MS' where id=6; -update noar tt set b2='1BFE4ZCHCA8A28F71R4XLPWQM' where id=6; -update noar ti set b2='1BFE4ZCHCA8A28F71R4XLPWQM' where id=6; -update noar tt set v0='MCVVCZC6S436F207CLDLBSMRNI' where id=7; -update noar ti set v0='MCVVCZC6S436F207CLDLBSMRNI' where id=7; -update noar tt set b0='6AGUIR3MRAK7VFT9I3' where id=7; -update noar ti set b0='6AGUIR3MRAK7VFT9I3' where id=7; -update noar tt set v0='WU55SUYRYR6GPL8A4KFCW2XGWQY' where id=7; -update noar ti set v0='WU55SUYRYR6GPL8A4KFCW2XGWQY' where id=7; -update noar tt set b1='F16EIO0YQB2PJ4S3URMWRLV5NFX55M8N' where id=7; -update noar ti set b1='F16EIO0YQB2PJ4S3URMWRLV5NFX55M8N' where id=7; -update noar tt set v0='9HIC5MAC71UMW6UZ2DX' where id=7; -update noar ti set v0='9HIC5MAC71UMW6UZ2DX' where id=7; -update noar tt set b2='4CQ8' where id=7; -update noar ti set b2='4CQ8' where id=7; -update noar tt set v0='T5T4NFXJ2F8NMZ5VTS3DARVOFYY' where id=8; -update noar ti set v0='T5T4NFXJ2F8NMZ5VTS3DARVOFYY' where id=8; -update noar tt set b0='TZ' where id=8; -update noar ti set b0='TZ' where id=8; -update noar tt set v0='QMTHHSZBFB06M6E7JZTOCO1' where id=8; -update noar ti set v0='QMTHHSZBFB06M6E7JZTOCO1' where id=8; -update noar tt set b1='7HHOZ3YF5T5CFPH' where id=8; -update noar ti set b1='7HHOZ3YF5T5CFPH' where id=8; -update noar tt set v0='3' where id=8; -update noar ti set v0='3' where id=8; -update noar tt set b2='34Q5EMYYUZY8' where id=8; -update noar ti set b2='34Q5EMYYUZY8' where id=8; -update noar tt set v0='X6ZA' where id=9; -update noar ti set v0='X6ZA' where id=9; -update noar tt set b0='8' where id=9; -update noar ti set b0='8' where id=9; -update noar tt set v0='FMX05GOH826ACCM' where id=9; -update noar ti set v0='FMX05GOH826ACCM' where id=9; -update noar tt set b1='NVCOX3' where id=9; -update noar ti set b1='NVCOX3' where id=9; -update noar tt set v0='SPNUJBWY3V' where id=9; -update noar ti set v0='SPNUJBWY3V' where id=9; -update noar tt set b2='IMMRRH2FFBQ8OKIS' where id=9; -update noar ti set b2='IMMRRH2FFBQ8OKIS' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 longblob not null, -b1 blob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='RWWEOX7M4YUGNG7QYUL1BOT' where id=1; -update noar ti set v0='RWWEOX7M4YUGNG7QYUL1BOT' where id=1; -update noar tt set b0='1U8B33OAI3R7FIT6OVFBZT0HXAXSM' where id=1; -update noar ti set b0='1U8B33OAI3R7FIT6OVFBZT0HXAXSM' where id=1; -update noar tt set v0='TQXSXWKG4HE61EQ4QWNMNO6SS' where id=1; -update noar ti set v0='TQXSXWKG4HE61EQ4QWNMNO6SS' where id=1; -update noar tt set b1='G490QRKXEQW4' where id=1; -update noar ti set b1='G490QRKXEQW4' where id=1; -update noar tt set v0='UB5NL0POVFPUTBS8AAKLNQQHEM4ZNJ' where id=1; -update noar ti set v0='UB5NL0POVFPUTBS8AAKLNQQHEM4ZNJ' where id=1; -update noar tt set b2='CE12HXKWT6IIFPGI2' where id=1; -update noar ti set b2='CE12HXKWT6IIFPGI2' where id=1; -update noar tt set v0='WC5BV5SZYAOS3FK' where id=2; -update noar ti set v0='WC5BV5SZYAOS3FK' where id=2; -update noar tt set b0='V6HPB1JTAXGBXHT' where id=2; -update noar ti set b0='V6HPB1JTAXGBXHT' where id=2; -update noar tt set v0='MJX2WP' where id=2; -update noar ti set v0='MJX2WP' where id=2; -update noar tt set b1='CZGE90Z4HFE5F' where id=2; -update noar ti set b1='CZGE90Z4HFE5F' where id=2; -update noar tt set v0='XKB47MXHIJKO2Y' where id=2; -update noar ti set v0='XKB47MXHIJKO2Y' where id=2; -update noar tt set b2='B1N1HM25MMRSEB' where id=2; -update noar ti set b2='B1N1HM25MMRSEB' where id=2; -update noar tt set v0='YZD4DP2SVZFJ4QLUDEFD31NE' where id=3; -update noar ti set v0='YZD4DP2SVZFJ4QLUDEFD31NE' where id=3; -update noar tt set b0='7C2NFFZ21CHNR' where id=3; -update noar ti set b0='7C2NFFZ21CHNR' where id=3; -update noar tt set v0='TKI79L3SJZNMUEE87WC7D5CWSJ4ISIEI' where id=3; -update noar ti set v0='TKI79L3SJZNMUEE87WC7D5CWSJ4ISIEI' where id=3; -update noar tt set b1='6R2QTRAIN' where id=3; -update noar ti set b1='6R2QTRAIN' where id=3; -update noar tt set v0='IIENO12LVHWKGV0Z2D20VZ' where id=3; -update noar ti set v0='IIENO12LVHWKGV0Z2D20VZ' where id=3; -update noar tt set b2='MFY' where id=3; -update noar ti set b2='MFY' where id=3; -update noar tt set v0='KPF5V32AK8IFN5H8A43A7H' where id=4; -update noar ti set v0='KPF5V32AK8IFN5H8A43A7H' where id=4; -update noar tt set b0='5GIW9LP90EV2HA3T2V3H84HUJ' where id=4; -update noar ti set b0='5GIW9LP90EV2HA3T2V3H84HUJ' where id=4; -update noar tt set v0='GV4IVQBPIB20M2IXNYNU' where id=4; -update noar ti set v0='GV4IVQBPIB20M2IXNYNU' where id=4; -update noar tt set b1='5OCFIE' where id=4; -update noar ti set b1='5OCFIE' where id=4; -update noar tt set v0='573GA9L3' where id=4; -update noar ti set v0='573GA9L3' where id=4; -update noar tt set b2='D2H3AGMYRCXMFIZ9LKX' where id=4; -update noar ti set b2='D2H3AGMYRCXMFIZ9LKX' where id=4; -update noar tt set v0='G3CQI6NNS' where id=5; -update noar ti set v0='G3CQI6NNS' where id=5; -update noar tt set b0='ICJ629Z6Z1G' where id=5; -update noar ti set b0='ICJ629Z6Z1G' where id=5; -update noar tt set v0='MEPUUC13THR15U7UAJR' where id=5; -update noar ti set v0='MEPUUC13THR15U7UAJR' where id=5; -update noar tt set b1='UFNZRE63HCEYVQF278ZB' where id=5; -update noar ti set b1='UFNZRE63HCEYVQF278ZB' where id=5; -update noar tt set v0='UJRZZ5YROICF9MMG3' where id=5; -update noar ti set v0='UJRZZ5YROICF9MMG3' where id=5; -update noar tt set b2='2ZOYW3DDS40JAMSFHDUTIAQVAF10DX' where id=5; -update noar ti set b2='2ZOYW3DDS40JAMSFHDUTIAQVAF10DX' where id=5; -update noar tt set v0='CWOJVA01' where id=6; -update noar ti set v0='CWOJVA01' where id=6; -update noar tt set b0='VIU28ZUWB513YLV1Z0RPZ' where id=6; -update noar ti set b0='VIU28ZUWB513YLV1Z0RPZ' where id=6; -update noar tt set v0='UYGHA4V0' where id=6; -update noar ti set v0='UYGHA4V0' where id=6; -update noar tt set b1='2VZZZZ2GJX5PBFNKFK' where id=6; -update noar ti set b1='2VZZZZ2GJX5PBFNKFK' where id=6; -update noar tt set v0='COWFEC3H498X' where id=6; -update noar ti set v0='COWFEC3H498X' where id=6; -update noar tt set b2='V81V0ZAGMO' where id=6; -update noar ti set b2='V81V0ZAGMO' where id=6; -update noar tt set v0='46' where id=7; -update noar ti set v0='46' where id=7; -update noar tt set b0='HPDP180T0' where id=7; -update noar ti set b0='HPDP180T0' where id=7; -update noar tt set v0='KOHD9G6AW579YUFJB' where id=7; -update noar ti set v0='KOHD9G6AW579YUFJB' where id=7; -update noar tt set b1='KFYQREWEKWTJUC8KJ452OSVNTDVIF' where id=7; -update noar ti set b1='KFYQREWEKWTJUC8KJ452OSVNTDVIF' where id=7; -update noar tt set v0='9TS4YJQM16XK44QGK' where id=7; -update noar ti set v0='9TS4YJQM16XK44QGK' where id=7; -update noar tt set b2='N2XOQWYW7JWKV8DBZC1Q6' where id=7; -update noar ti set b2='N2XOQWYW7JWKV8DBZC1Q6' where id=7; -update noar tt set v0='AZJ9YU8' where id=8; -update noar ti set v0='AZJ9YU8' where id=8; -update noar tt set b0='87H2I43CB' where id=8; -update noar ti set b0='87H2I43CB' where id=8; -update noar tt set v0='J4X' where id=8; -update noar ti set v0='J4X' where id=8; -update noar tt set b1='QQZKJWZLI19XC8FWTA57V2UUK9N1IMLD' where id=8; -update noar ti set b1='QQZKJWZLI19XC8FWTA57V2UUK9N1IMLD' where id=8; -update noar tt set v0='VYIR1JCLJT5BMJJ0S8NQVKBXHB' where id=8; -update noar ti set v0='VYIR1JCLJT5BMJJ0S8NQVKBXHB' where id=8; -update noar tt set b2='VC0BUEPZQCBJGH' where id=8; -update noar ti set b2='VC0BUEPZQCBJGH' where id=8; -update noar tt set v0='DGVXNJWAPWQS3733QOSG470L9D8' where id=9; -update noar ti set v0='DGVXNJWAPWQS3733QOSG470L9D8' where id=9; -update noar tt set b0='UX3LPFAMCMSNTQLT1WA6D5QDER2RFTSQ' where id=9; -update noar ti set b0='UX3LPFAMCMSNTQLT1WA6D5QDER2RFTSQ' where id=9; -update noar tt set v0='TR5BUF2E98TDRUK2P540HBO5O' where id=9; -update noar ti set v0='TR5BUF2E98TDRUK2P540HBO5O' where id=9; -update noar tt set b1='WT2WQGBZA5NDTIMHA' where id=9; -update noar ti set b1='WT2WQGBZA5NDTIMHA' where id=9; -update noar tt set v0='S43OB3JP' where id=9; -update noar ti set v0='S43OB3JP' where id=9; -update noar tt set b2='167K9PC4OQ' where id=9; -update noar ti set b2='167K9PC4OQ' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 longblob not null, -b1 blob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='50RCO9JLZ2PCP5' where id=1; -update noar ti set v0='50RCO9JLZ2PCP5' where id=1; -update noar tt set b0='KS8KMZ5U4QUF6ZGQFZUKLI89MEWC' where id=1; -update noar ti set b0='KS8KMZ5U4QUF6ZGQFZUKLI89MEWC' where id=1; -update noar tt set v0='O8Y7J4HPNZQU8AIJ2' where id=1; -update noar ti set v0='O8Y7J4HPNZQU8AIJ2' where id=1; -update noar tt set b1='IUDWG6LGU5Q3Y6LG2D0RWL' where id=1; -update noar ti set b1='IUDWG6LGU5Q3Y6LG2D0RWL' where id=1; -update noar tt set v0='J5EI5W' where id=1; -update noar ti set v0='J5EI5W' where id=1; -update noar tt set b2='KL25N5PYDHHULJZ' where id=1; -update noar ti set b2='KL25N5PYDHHULJZ' where id=1; -update noar tt set v0='B4HSII' where id=2; -update noar ti set v0='B4HSII' where id=2; -update noar tt set b0='OYP' where id=2; -update noar ti set b0='OYP' where id=2; -update noar tt set v0='NEMJH6BW1ZMXJ3ZD75UV' where id=2; -update noar ti set v0='NEMJH6BW1ZMXJ3ZD75UV' where id=2; -update noar tt set b1='W3FP8UD8RGDJGLGE6LVOQQIVZAVO' where id=2; -update noar ti set b1='W3FP8UD8RGDJGLGE6LVOQQIVZAVO' where id=2; -update noar tt set v0='HQLO0LUVQMOJBJA' where id=2; -update noar ti set v0='HQLO0LUVQMOJBJA' where id=2; -update noar tt set b2='ITTO1E1O0TJ7ZZ75WC' where id=2; -update noar ti set b2='ITTO1E1O0TJ7ZZ75WC' where id=2; -update noar tt set v0='CX5SD1MCI5KR49MYHGR5CBE2C5JDAJ' where id=3; -update noar ti set v0='CX5SD1MCI5KR49MYHGR5CBE2C5JDAJ' where id=3; -update noar tt set b0='FFOVOYO3RLVVYLKXWPUG2Q' where id=3; -update noar ti set b0='FFOVOYO3RLVVYLKXWPUG2Q' where id=3; -update noar tt set v0='BINCGEUSIDFRKX0AD5YRDWL8MEYZE' where id=3; -update noar ti set v0='BINCGEUSIDFRKX0AD5YRDWL8MEYZE' where id=3; -update noar tt set b1='TAT2G0EROEFBIDTOR8S71HZ4' where id=3; -update noar ti set b1='TAT2G0EROEFBIDTOR8S71HZ4' where id=3; -update noar tt set v0='FP73YLU30Q3JEFL7SZ98JVT6' where id=3; -update noar ti set v0='FP73YLU30Q3JEFL7SZ98JVT6' where id=3; -update noar tt set b2='MK44' where id=3; -update noar ti set b2='MK44' where id=3; -update noar tt set v0='48Z45CTL4TGL9SSG38UZB4' where id=4; -update noar ti set v0='48Z45CTL4TGL9SSG38UZB4' where id=4; -update noar tt set b0='U6ASIAI04VUA4CJG75O3' where id=4; -update noar ti set b0='U6ASIAI04VUA4CJG75O3' where id=4; -update noar tt set v0='R0U253LVWU9R8AHVZY05Q32SM7K' where id=4; -update noar ti set v0='R0U253LVWU9R8AHVZY05Q32SM7K' where id=4; -update noar tt set b1='I5EV4MO2AS9UF9015YRM6W0' where id=4; -update noar ti set b1='I5EV4MO2AS9UF9015YRM6W0' where id=4; -update noar tt set v0='HVEH529JYF5D8QHPGPDUIJO4U9DHAI' where id=4; -update noar ti set v0='HVEH529JYF5D8QHPGPDUIJO4U9DHAI' where id=4; -update noar tt set b2='SOIAP3WDE74SBBDP0M7YJYKMIJO' where id=4; -update noar ti set b2='SOIAP3WDE74SBBDP0M7YJYKMIJO' where id=4; -update noar tt set v0='JXYOGUA3RSQOY0PTRZ2RWT' where id=5; -update noar ti set v0='JXYOGUA3RSQOY0PTRZ2RWT' where id=5; -update noar tt set b0='603N9FOX3CWPSWOCOR0UEI3XE' where id=5; -update noar ti set b0='603N9FOX3CWPSWOCOR0UEI3XE' where id=5; -update noar tt set v0='IO0SBG7G5TFJM4' where id=5; -update noar ti set v0='IO0SBG7G5TFJM4' where id=5; -update noar tt set b1='6YUNRCIFC5JKT' where id=5; -update noar ti set b1='6YUNRCIFC5JKT' where id=5; -update noar tt set v0='Y92DCBMQ' where id=5; -update noar ti set v0='Y92DCBMQ' where id=5; -update noar tt set b2='V4U1BLCKMFATATOEWBSF' where id=5; -update noar ti set b2='V4U1BLCKMFATATOEWBSF' where id=5; -update noar tt set v0='D1EI1' where id=6; -update noar ti set v0='D1EI1' where id=6; -update noar tt set b0='YF18KWDFWBTBFWXOOY4CRKMV' where id=6; -update noar ti set b0='YF18KWDFWBTBFWXOOY4CRKMV' where id=6; -update noar tt set v0='892KGP26627GMGXOV1S4Z0' where id=6; -update noar ti set v0='892KGP26627GMGXOV1S4Z0' where id=6; -update noar tt set b1='YEI0SQB4HM0EDMETPCYHDIZYO32' where id=6; -update noar ti set b1='YEI0SQB4HM0EDMETPCYHDIZYO32' where id=6; -update noar tt set v0='9ZYRWKX3' where id=6; -update noar ti set v0='9ZYRWKX3' where id=6; -update noar tt set b2='OD8D63R9QGAX32OYNI' where id=6; -update noar ti set b2='OD8D63R9QGAX32OYNI' where id=6; -update noar tt set v0='R8UXPSCDZ508S8U8' where id=7; -update noar ti set v0='R8UXPSCDZ508S8U8' where id=7; -update noar tt set b0='VMNXZE2F7TJQMMTUR6IF' where id=7; -update noar ti set b0='VMNXZE2F7TJQMMTUR6IF' where id=7; -update noar tt set v0='5H3HUTEX45H13U99AKZ2WC8FFFTZKN1' where id=7; -update noar ti set v0='5H3HUTEX45H13U99AKZ2WC8FFFTZKN1' where id=7; -update noar tt set b1='HIFJ27HSYHCYZQJSWDVALX4' where id=7; -update noar ti set b1='HIFJ27HSYHCYZQJSWDVALX4' where id=7; -update noar tt set v0='87E8HH7L' where id=7; -update noar ti set v0='87E8HH7L' where id=7; -update noar tt set b2='Z6' where id=7; -update noar ti set b2='Z6' where id=7; -update noar tt set v0='DSSQ' where id=8; -update noar ti set v0='DSSQ' where id=8; -update noar tt set b0='3JN1YB3VL7CD4ZVYKBZWXKYJS3UE' where id=8; -update noar ti set b0='3JN1YB3VL7CD4ZVYKBZWXKYJS3UE' where id=8; -update noar tt set v0='SHX6JGANSBC4TQEVNSY0' where id=8; -update noar ti set v0='SHX6JGANSBC4TQEVNSY0' where id=8; -update noar tt set b1='V5D5SAJZTB7R70ZDGOZK5S' where id=8; -update noar ti set b1='V5D5SAJZTB7R70ZDGOZK5S' where id=8; -update noar tt set v0='96JKDFJOO' where id=8; -update noar ti set v0='96JKDFJOO' where id=8; -update noar tt set b2='3Z0OG8LM8I0UYFII4ACKK2T' where id=8; -update noar ti set b2='3Z0OG8LM8I0UYFII4ACKK2T' where id=8; -update noar tt set v0='O3SEA36FRTCM8P63ER5JNO0957IZ7E' where id=9; -update noar ti set v0='O3SEA36FRTCM8P63ER5JNO0957IZ7E' where id=9; -update noar tt set b0='CQAHXE6SG772H3U2ALA' where id=9; -update noar ti set b0='CQAHXE6SG772H3U2ALA' where id=9; -update noar tt set v0='7WM3HWM38OFTG7XVCRZTE9M1AM' where id=9; -update noar ti set v0='7WM3HWM38OFTG7XVCRZTE9M1AM' where id=9; -update noar tt set b1='JUEO7UGL' where id=9; -update noar ti set b1='JUEO7UGL' where id=9; -update noar tt set v0='K2M2NQYB374ADJDQDA0H9IMPVNDJKTT' where id=9; -update noar ti set v0='K2M2NQYB374ADJDQDA0H9IMPVNDJKTT' where id=9; -update noar tt set b2='5QIIZ789T4' where id=9; -update noar ti set b2='5QIIZ789T4' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 longblob null, -b1 blob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='WD0W8C2F8QAZBDWHEZOYQWJH7AGV1IB' where id=1; -update noar ti set v0='WD0W8C2F8QAZBDWHEZOYQWJH7AGV1IB' where id=1; -update noar tt set b0='57DCEZQ' where id=1; -update noar ti set b0='57DCEZQ' where id=1; -update noar tt set v0='X7T6E0FAE64U9NHSRUSUCLXVYM' where id=1; -update noar ti set v0='X7T6E0FAE64U9NHSRUSUCLXVYM' where id=1; -update noar tt set b1='96Z868HIDSN7U0AIM9BGQ5' where id=1; -update noar ti set b1='96Z868HIDSN7U0AIM9BGQ5' where id=1; -update noar tt set v0='NW01RNLPB1XGYJVAD3' where id=1; -update noar ti set v0='NW01RNLPB1XGYJVAD3' where id=1; -update noar tt set b2='IMW74MIZ9136TCZTAWEPSB30SPC8' where id=1; -update noar ti set b2='IMW74MIZ9136TCZTAWEPSB30SPC8' where id=1; -update noar tt set v0='B3RM59WT0BGDEK74K903CO92LIF2YR' where id=2; -update noar ti set v0='B3RM59WT0BGDEK74K903CO92LIF2YR' where id=2; -update noar tt set b0='Q7PXFZN82E2KN1JDQI9A2' where id=2; -update noar ti set b0='Q7PXFZN82E2KN1JDQI9A2' where id=2; -update noar tt set v0='OCP66CMFR0Z8S69W34O' where id=2; -update noar ti set v0='OCP66CMFR0Z8S69W34O' where id=2; -update noar tt set b1='OTFJF' where id=2; -update noar ti set b1='OTFJF' where id=2; -update noar tt set v0='C95HU32AO9Z' where id=2; -update noar ti set v0='C95HU32AO9Z' where id=2; -update noar tt set b2='JE0S6U7KR3H940OMEB8BA69LCLG' where id=2; -update noar ti set b2='JE0S6U7KR3H940OMEB8BA69LCLG' where id=2; -update noar tt set v0='8QFBMSNLI7JR74DCWYH5' where id=3; -update noar ti set v0='8QFBMSNLI7JR74DCWYH5' where id=3; -update noar tt set b0='FS9L70DUN2L199XHFMGMZRO2ITOE0SLV' where id=3; -update noar ti set b0='FS9L70DUN2L199XHFMGMZRO2ITOE0SLV' where id=3; -update noar tt set v0='WLIW1HSSYOIVQAIR1J74G4T' where id=3; -update noar ti set v0='WLIW1HSSYOIVQAIR1J74G4T' where id=3; -update noar tt set b1='270XASA7JJZROBB7O6M' where id=3; -update noar ti set b1='270XASA7JJZROBB7O6M' where id=3; -update noar tt set v0='N1H1AMZOH7OXFRB4J9Q4G' where id=3; -update noar ti set v0='N1H1AMZOH7OXFRB4J9Q4G' where id=3; -update noar tt set b2='KMZEXA3A9FGOM63RL1DU' where id=3; -update noar ti set b2='KMZEXA3A9FGOM63RL1DU' where id=3; -update noar tt set v0='O4MJW6JRWNPRQ2Z5K6IMNF9' where id=4; -update noar ti set v0='O4MJW6JRWNPRQ2Z5K6IMNF9' where id=4; -update noar tt set b0='FRLZIIP0F48GW8VU4VXZI' where id=4; -update noar ti set b0='FRLZIIP0F48GW8VU4VXZI' where id=4; -update noar tt set v0='XOCRJJPVLVR9BCTYOF3A2' where id=4; -update noar ti set v0='XOCRJJPVLVR9BCTYOF3A2' where id=4; -update noar tt set b1='WEB9UPJRX3PZK1ANRER0OR57SFC6DTU' where id=4; -update noar ti set b1='WEB9UPJRX3PZK1ANRER0OR57SFC6DTU' where id=4; -update noar tt set v0='QE4IHUVFGZRGNF' where id=4; -update noar ti set v0='QE4IHUVFGZRGNF' where id=4; -update noar tt set b2='P' where id=4; -update noar ti set b2='P' where id=4; -update noar tt set v0='DJNCX5SQTK' where id=5; -update noar ti set v0='DJNCX5SQTK' where id=5; -update noar tt set b0='ANFUSL236IWH3RE71T71ZPYPHU87' where id=5; -update noar ti set b0='ANFUSL236IWH3RE71T71ZPYPHU87' where id=5; -update noar tt set v0='8GVL4NPZ' where id=5; -update noar ti set v0='8GVL4NPZ' where id=5; -update noar tt set b1='LW0F7ZPM2' where id=5; -update noar ti set b1='LW0F7ZPM2' where id=5; -update noar tt set v0='BPLK0LD' where id=5; -update noar ti set v0='BPLK0LD' where id=5; -update noar tt set b2='D4S' where id=5; -update noar ti set b2='D4S' where id=5; -update noar tt set v0='JKYGMPPXAW6' where id=6; -update noar ti set v0='JKYGMPPXAW6' where id=6; -update noar tt set b0='NL7ABMQ' where id=6; -update noar ti set b0='NL7ABMQ' where id=6; -update noar tt set v0='WDG7L1QJZESZ9V7OEBH4CNE77JW' where id=6; -update noar ti set v0='WDG7L1QJZESZ9V7OEBH4CNE77JW' where id=6; -update noar tt set b1='BM2CHLWIC6DZNS' where id=6; -update noar ti set b1='BM2CHLWIC6DZNS' where id=6; -update noar tt set v0='J88PI3GFJNCCCEER4350' where id=6; -update noar ti set v0='J88PI3GFJNCCCEER4350' where id=6; -update noar tt set b2='PV3EH83BPH7K9KBH' where id=6; -update noar ti set b2='PV3EH83BPH7K9KBH' where id=6; -update noar tt set v0='EW' where id=7; -update noar ti set v0='EW' where id=7; -update noar tt set b0='RSKH1TA2C2S8KG9E8' where id=7; -update noar ti set b0='RSKH1TA2C2S8KG9E8' where id=7; -update noar tt set v0='4CN5OXWS' where id=7; -update noar ti set v0='4CN5OXWS' where id=7; -update noar tt set b1='UI1J1X' where id=7; -update noar ti set b1='UI1J1X' where id=7; -update noar tt set v0='TUV' where id=7; -update noar ti set v0='TUV' where id=7; -update noar tt set b2='EKKFDTL' where id=7; -update noar ti set b2='EKKFDTL' where id=7; -update noar tt set v0='ZU9' where id=8; -update noar ti set v0='ZU9' where id=8; -update noar tt set b0='IE' where id=8; -update noar ti set b0='IE' where id=8; -update noar tt set v0='HV' where id=8; -update noar ti set v0='HV' where id=8; -update noar tt set b1='F5AVF' where id=8; -update noar ti set b1='F5AVF' where id=8; -update noar tt set v0='00BZDX4JTRHD0YYL5DT7HQX2LOW' where id=8; -update noar ti set v0='00BZDX4JTRHD0YYL5DT7HQX2LOW' where id=8; -update noar tt set b2='9DQH' where id=8; -update noar ti set b2='9DQH' where id=8; -update noar tt set v0='U1IAVIXIZ4G0TLMDQ131SV02AJG' where id=9; -update noar ti set v0='U1IAVIXIZ4G0TLMDQ131SV02AJG' where id=9; -update noar tt set b0='CUNUCWH' where id=9; -update noar ti set b0='CUNUCWH' where id=9; -update noar tt set v0='9K85Z30MX05KX0' where id=9; -update noar ti set v0='9K85Z30MX05KX0' where id=9; -update noar tt set b1='ET3WJTI' where id=9; -update noar ti set b1='ET3WJTI' where id=9; -update noar tt set v0='K5DRRM1MGPHQLYZMJUG6JTC7H7WRFQ' where id=9; -update noar ti set v0='K5DRRM1MGPHQLYZMJUG6JTC7H7WRFQ' where id=9; -update noar tt set b2='CNF2VVL0GK' where id=9; -update noar ti set b2='CNF2VVL0GK' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 longblob null, -b1 blob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='RE0A5K9RVR0E98NPYY1G6ZHF9' where id=1; -update noar ti set v0='RE0A5K9RVR0E98NPYY1G6ZHF9' where id=1; -update noar tt set b0='SD0DCNISM6T' where id=1; -update noar ti set b0='SD0DCNISM6T' where id=1; -update noar tt set v0='EX' where id=1; -update noar ti set v0='EX' where id=1; -update noar tt set b1='JAYYOBCVDKILTQ4ZFB5M9R8T88YFQXW' where id=1; -update noar ti set b1='JAYYOBCVDKILTQ4ZFB5M9R8T88YFQXW' where id=1; -update noar tt set v0='LZF12I3940AUCYJL3' where id=1; -update noar ti set v0='LZF12I3940AUCYJL3' where id=1; -update noar tt set b2='9' where id=1; -update noar ti set b2='9' where id=1; -update noar tt set v0='F9U2J5FA03K1Z5KX20OF1908A' where id=2; -update noar ti set v0='F9U2J5FA03K1Z5KX20OF1908A' where id=2; -update noar tt set b0='OB7TXGILE0XJKRXN9CY83VBKB' where id=2; -update noar ti set b0='OB7TXGILE0XJKRXN9CY83VBKB' where id=2; -update noar tt set v0='RYL5YFPD24DMF8PTZ9ONCY0Z1CNKU5UR' where id=2; -update noar ti set v0='RYL5YFPD24DMF8PTZ9ONCY0Z1CNKU5UR' where id=2; -update noar tt set b1='W7KIGZHH29POEJF' where id=2; -update noar ti set b1='W7KIGZHH29POEJF' where id=2; -update noar tt set v0='4OVO3AYB0VQ2EEBND7R' where id=2; -update noar ti set v0='4OVO3AYB0VQ2EEBND7R' where id=2; -update noar tt set b2='UI9WQUJPYA' where id=2; -update noar ti set b2='UI9WQUJPYA' where id=2; -update noar tt set v0='6FZBGYYJRL5QL8OHGIPT6NC' where id=3; -update noar ti set v0='6FZBGYYJRL5QL8OHGIPT6NC' where id=3; -update noar tt set b0='M' where id=3; -update noar ti set b0='M' where id=3; -update noar tt set v0='E9RBS24LQE9LMLDTD8B52X8XG9AR' where id=3; -update noar ti set v0='E9RBS24LQE9LMLDTD8B52X8XG9AR' where id=3; -update noar tt set b1='3M9ZAY6KCMCEVT55PB' where id=3; -update noar ti set b1='3M9ZAY6KCMCEVT55PB' where id=3; -update noar tt set v0='XKQ4OSRTOQ92XYDXXZD4J' where id=3; -update noar ti set v0='XKQ4OSRTOQ92XYDXXZD4J' where id=3; -update noar tt set b2='0CBCS87WTG3CRG0Z46UCXLU78N00CT' where id=3; -update noar ti set b2='0CBCS87WTG3CRG0Z46UCXLU78N00CT' where id=3; -update noar tt set v0='7YZ1GVXYQAZ7M' where id=4; -update noar ti set v0='7YZ1GVXYQAZ7M' where id=4; -update noar tt set b0='I3RFY9' where id=4; -update noar ti set b0='I3RFY9' where id=4; -update noar tt set v0='2M4SR0PYAEH' where id=4; -update noar ti set v0='2M4SR0PYAEH' where id=4; -update noar tt set b1='2SEC6MBYRK7BDG2H3TQ' where id=4; -update noar ti set b1='2SEC6MBYRK7BDG2H3TQ' where id=4; -update noar tt set v0='SA90Q3W0UMKM6C5VWGL4KIYMHI' where id=4; -update noar ti set v0='SA90Q3W0UMKM6C5VWGL4KIYMHI' where id=4; -update noar tt set b2='D7WDO8F' where id=4; -update noar ti set b2='D7WDO8F' where id=4; -update noar tt set v0='2WVL5LP5DGWAMYGGKZLQFI27' where id=5; -update noar ti set v0='2WVL5LP5DGWAMYGGKZLQFI27' where id=5; -update noar tt set b0='JFXH0MHEEXI3ZILHK2EZ27Y2HKD' where id=5; -update noar ti set b0='JFXH0MHEEXI3ZILHK2EZ27Y2HKD' where id=5; -update noar tt set v0='SFH8LF1M1UR' where id=5; -update noar ti set v0='SFH8LF1M1UR' where id=5; -update noar tt set b1='2Z0Q4XTYCDAWJUR' where id=5; -update noar ti set b1='2Z0Q4XTYCDAWJUR' where id=5; -update noar tt set v0='ZO0GTH70INU3WGVX3H8I12KZ4W1' where id=5; -update noar ti set v0='ZO0GTH70INU3WGVX3H8I12KZ4W1' where id=5; -update noar tt set b2='2GVG5TDZ0W1U8PNWZ2Z5VQ' where id=5; -update noar ti set b2='2GVG5TDZ0W1U8PNWZ2Z5VQ' where id=5; -update noar tt set v0='TU79F08N50UI4L1O' where id=6; -update noar ti set v0='TU79F08N50UI4L1O' where id=6; -update noar tt set b0='XOBI8I4' where id=6; -update noar ti set b0='XOBI8I4' where id=6; -update noar tt set v0='7B63CCS09SZHOQ' where id=6; -update noar ti set v0='7B63CCS09SZHOQ' where id=6; -update noar tt set b1='AWP2FPSJQ0EB6A25M6' where id=6; -update noar ti set b1='AWP2FPSJQ0EB6A25M6' where id=6; -update noar tt set v0='2Z2M6YTE4N0NGB6J60HAD1CB0DA' where id=6; -update noar ti set v0='2Z2M6YTE4N0NGB6J60HAD1CB0DA' where id=6; -update noar tt set b2='CHWA5PFG0JK6X42OT3TBQKRWA7IY2O8' where id=6; -update noar ti set b2='CHWA5PFG0JK6X42OT3TBQKRWA7IY2O8' where id=6; -update noar tt set v0='7C9YTG3PXX' where id=7; -update noar ti set v0='7C9YTG3PXX' where id=7; -update noar tt set b0='EI93' where id=7; -update noar ti set b0='EI93' where id=7; -update noar tt set v0='2X1GI8U3CD4P2IJ9ZCVEB0YQH3MINYX' where id=7; -update noar ti set v0='2X1GI8U3CD4P2IJ9ZCVEB0YQH3MINYX' where id=7; -update noar tt set b1='C0EMNJO' where id=7; -update noar ti set b1='C0EMNJO' where id=7; -update noar tt set v0='MLQNW1XP19FF3BPQ5' where id=7; -update noar ti set v0='MLQNW1XP19FF3BPQ5' where id=7; -update noar tt set b2='BYJ6W' where id=7; -update noar ti set b2='BYJ6W' where id=7; -update noar tt set v0='T61PTORAJRPLCOXPUDHJ6Z' where id=8; -update noar ti set v0='T61PTORAJRPLCOXPUDHJ6Z' where id=8; -update noar tt set b0='P8OEM' where id=8; -update noar ti set b0='P8OEM' where id=8; -update noar tt set v0='3D5GYH1QPWP7BPB6LPWX5' where id=8; -update noar ti set v0='3D5GYH1QPWP7BPB6LPWX5' where id=8; -update noar tt set b1='C4ZYBOR31BS9' where id=8; -update noar ti set b1='C4ZYBOR31BS9' where id=8; -update noar tt set v0='I332AIMZO2VL485' where id=8; -update noar ti set v0='I332AIMZO2VL485' where id=8; -update noar tt set b2='7IAW6ZPPAQ2E735RD8A3B0CVH21' where id=8; -update noar ti set b2='7IAW6ZPPAQ2E735RD8A3B0CVH21' where id=8; -update noar tt set v0='CZHHJ' where id=9; -update noar ti set v0='CZHHJ' where id=9; -update noar tt set b0='5' where id=9; -update noar ti set b0='5' where id=9; -update noar tt set v0='X99Z9UB6DI86UD5P' where id=9; -update noar ti set v0='X99Z9UB6DI86UD5P' where id=9; -update noar tt set b1='82EW183M55IPL9QVGAJ77CN4U5E74M' where id=9; -update noar ti set b1='82EW183M55IPL9QVGAJ77CN4U5E74M' where id=9; -update noar tt set v0='Y06SNYH3' where id=9; -update noar ti set v0='Y06SNYH3' where id=9; -update noar tt set b2='MWNSAEZ2P' where id=9; -update noar ti set b2='MWNSAEZ2P' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 longblob not null, -b1 blob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='T' where id=1; -update noar ti set v0='T' where id=1; -update noar tt set b0='SIU9ULYKC' where id=1; -update noar ti set b0='SIU9ULYKC' where id=1; -update noar tt set v0='ZFZH3PB7ED' where id=1; -update noar ti set v0='ZFZH3PB7ED' where id=1; -update noar tt set b1='ZU' where id=1; -update noar ti set b1='ZU' where id=1; -update noar tt set v0='EOTFHZ5EWJ1AYOFD' where id=1; -update noar ti set v0='EOTFHZ5EWJ1AYOFD' where id=1; -update noar tt set b2='WAQGZA2CHZI5OCRFAP7OFANP6' where id=1; -update noar ti set b2='WAQGZA2CHZI5OCRFAP7OFANP6' where id=1; -update noar tt set v0='H5DW9A' where id=2; -update noar ti set v0='H5DW9A' where id=2; -update noar tt set b0='639001SULAZG18U7AU4YRVA' where id=2; -update noar ti set b0='639001SULAZG18U7AU4YRVA' where id=2; -update noar tt set v0='S4WNQI8IPNVQOPGOJ9MHBMZIRXOBFMD' where id=2; -update noar ti set v0='S4WNQI8IPNVQOPGOJ9MHBMZIRXOBFMD' where id=2; -update noar tt set b1='MS6STQRV4GAXOC9C' where id=2; -update noar ti set b1='MS6STQRV4GAXOC9C' where id=2; -update noar tt set v0='F01CPGHT4JLKXH3I6W7' where id=2; -update noar ti set v0='F01CPGHT4JLKXH3I6W7' where id=2; -update noar tt set b2='IO06VG' where id=2; -update noar ti set b2='IO06VG' where id=2; -update noar tt set v0='AGJ' where id=3; -update noar ti set v0='AGJ' where id=3; -update noar tt set b0='RB' where id=3; -update noar ti set b0='RB' where id=3; -update noar tt set v0='2UWLYEU2BGADY' where id=3; -update noar ti set v0='2UWLYEU2BGADY' where id=3; -update noar tt set b1='9752DUQ93LK42Z115J60XPNV' where id=3; -update noar ti set b1='9752DUQ93LK42Z115J60XPNV' where id=3; -update noar tt set v0='MPMSFRQI' where id=3; -update noar ti set v0='MPMSFRQI' where id=3; -update noar tt set b2='B' where id=3; -update noar ti set b2='B' where id=3; -update noar tt set v0='SXZUTXNDNMXVO5JMBVVU18I7' where id=4; -update noar ti set v0='SXZUTXNDNMXVO5JMBVVU18I7' where id=4; -update noar tt set b0='IO3TUEWZ43P6R1Y60MXD5' where id=4; -update noar ti set b0='IO3TUEWZ43P6R1Y60MXD5' where id=4; -update noar tt set v0='UA0MARBHHZSIP3FZZ9C7XJ9' where id=4; -update noar ti set v0='UA0MARBHHZSIP3FZZ9C7XJ9' where id=4; -update noar tt set b1='F2LU0ODAH3DU5TLRSWYLDS9' where id=4; -update noar ti set b1='F2LU0ODAH3DU5TLRSWYLDS9' where id=4; -update noar tt set v0='JZ2O19P3' where id=4; -update noar ti set v0='JZ2O19P3' where id=4; -update noar tt set b2='E8CRIRAT7S' where id=4; -update noar ti set b2='E8CRIRAT7S' where id=4; -update noar tt set v0='DLMRMIERFYJED8GMDEJ4G7G' where id=5; -update noar ti set v0='DLMRMIERFYJED8GMDEJ4G7G' where id=5; -update noar tt set b0='CAA2O' where id=5; -update noar ti set b0='CAA2O' where id=5; -update noar tt set v0='7A8JKQYS2AQCAC1S7JFOEIEFT' where id=5; -update noar ti set v0='7A8JKQYS2AQCAC1S7JFOEIEFT' where id=5; -update noar tt set b1='QVPYAC9LFB7G' where id=5; -update noar ti set b1='QVPYAC9LFB7G' where id=5; -update noar tt set v0='TYBZYCODHQ8QRU' where id=5; -update noar ti set v0='TYBZYCODHQ8QRU' where id=5; -update noar tt set b2='GW0BWV8FJ077RHJR' where id=5; -update noar ti set b2='GW0BWV8FJ077RHJR' where id=5; -update noar tt set v0='N94BACIP6HE6XA4NW0Y' where id=6; -update noar ti set v0='N94BACIP6HE6XA4NW0Y' where id=6; -update noar tt set b0='BS3D4UOMP1JWL3AOEJK3PH5N8CNI' where id=6; -update noar ti set b0='BS3D4UOMP1JWL3AOEJK3PH5N8CNI' where id=6; -update noar tt set v0='BIZ8JOG0AHVBCFG5SQ75N' where id=6; -update noar ti set v0='BIZ8JOG0AHVBCFG5SQ75N' where id=6; -update noar tt set b1='F58CMPMY' where id=6; -update noar ti set b1='F58CMPMY' where id=6; -update noar tt set v0='S66TOKO2LGXOXN5OM8' where id=6; -update noar ti set v0='S66TOKO2LGXOXN5OM8' where id=6; -update noar tt set b2='8B6OD13T38XMR' where id=6; -update noar ti set b2='8B6OD13T38XMR' where id=6; -update noar tt set v0='1' where id=7; -update noar ti set v0='1' where id=7; -update noar tt set b0='RK6044JV54ACAVDVSIJN23XTIVWE' where id=7; -update noar ti set b0='RK6044JV54ACAVDVSIJN23XTIVWE' where id=7; -update noar tt set v0='H5IW6MO7E3GNAL9YSA6EA6' where id=7; -update noar ti set v0='H5IW6MO7E3GNAL9YSA6EA6' where id=7; -update noar tt set b1='BU148FKQ100F7D' where id=7; -update noar ti set b1='BU148FKQ100F7D' where id=7; -update noar tt set v0='QU2TL69T0ML49545YVQL98' where id=7; -update noar ti set v0='QU2TL69T0ML49545YVQL98' where id=7; -update noar tt set b2='ZF0NSBRPM7GAO9AYUCVEECZ1ENYF' where id=7; -update noar ti set b2='ZF0NSBRPM7GAO9AYUCVEECZ1ENYF' where id=7; -update noar tt set v0='7IY55JZBJ1OYXEC41P33W2XWZYI2N6CY' where id=8; -update noar ti set v0='7IY55JZBJ1OYXEC41P33W2XWZYI2N6CY' where id=8; -update noar tt set b0='FJK1' where id=8; -update noar ti set b0='FJK1' where id=8; -update noar tt set v0='TE5GSCMLV5PKNJ3B13WGF8RK05W7W8' where id=8; -update noar ti set v0='TE5GSCMLV5PKNJ3B13WGF8RK05W7W8' where id=8; -update noar tt set b1='2B73K2TKEKVKMHWY792Y9CMA1BBD2' where id=8; -update noar ti set b1='2B73K2TKEKVKMHWY792Y9CMA1BBD2' where id=8; -update noar tt set v0='39PVX0HHATHKDLJ7BV3D75' where id=8; -update noar ti set v0='39PVX0HHATHKDLJ7BV3D75' where id=8; -update noar tt set b2='YENGFU8QCGABF37P6YQ' where id=8; -update noar ti set b2='YENGFU8QCGABF37P6YQ' where id=8; -update noar tt set v0='4J49JA6L5KPL9R' where id=9; -update noar ti set v0='4J49JA6L5KPL9R' where id=9; -update noar tt set b0='DGRUSPJ6A4KYKJG06U6PRTCGUXFCPB' where id=9; -update noar ti set b0='DGRUSPJ6A4KYKJG06U6PRTCGUXFCPB' where id=9; -update noar tt set v0='4LQNA9H5Q3L9' where id=9; -update noar ti set v0='4LQNA9H5Q3L9' where id=9; -update noar tt set b1='66Q' where id=9; -update noar ti set b1='66Q' where id=9; -update noar tt set v0='XUOSFGAY3OVRM9OTN23RMN8Y414JD4O' where id=9; -update noar ti set v0='XUOSFGAY3OVRM9OTN23RMN8Y414JD4O' where id=9; -update noar tt set b2='OJWREDX80X5SJIF6V5YMH1NS8JYE' where id=9; -update noar ti set b2='OJWREDX80X5SJIF6V5YMH1NS8JYE' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 longblob not null, -b1 blob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='U8SIJCI4YPN' where id=1; -update noar ti set v0='U8SIJCI4YPN' where id=1; -update noar tt set b0='LUUD2PD3YOV3R94BS5W1DO9K12W5RDKV' where id=1; -update noar ti set b0='LUUD2PD3YOV3R94BS5W1DO9K12W5RDKV' where id=1; -update noar tt set v0='0OO' where id=1; -update noar ti set v0='0OO' where id=1; -update noar tt set b1='8S7HWXRE3UJ' where id=1; -update noar ti set b1='8S7HWXRE3UJ' where id=1; -update noar tt set v0='F69OSZO1FRATRYPHY' where id=1; -update noar ti set v0='F69OSZO1FRATRYPHY' where id=1; -update noar tt set b2='3OJKVJMBXNAP5REGHZ0DLQWD' where id=1; -update noar ti set b2='3OJKVJMBXNAP5REGHZ0DLQWD' where id=1; -update noar tt set v0='LNT4C43E05EMHJF5SQL' where id=2; -update noar ti set v0='LNT4C43E05EMHJF5SQL' where id=2; -update noar tt set b0='8D8TJ5S6GOSVBJGVTQ2A63W8IPM' where id=2; -update noar ti set b0='8D8TJ5S6GOSVBJGVTQ2A63W8IPM' where id=2; -update noar tt set v0='G3H3MNG8J323QA2YHF' where id=2; -update noar ti set v0='G3H3MNG8J323QA2YHF' where id=2; -update noar tt set b1='54GZX2XF609LF0SABF8Q' where id=2; -update noar ti set b1='54GZX2XF609LF0SABF8Q' where id=2; -update noar tt set v0='ZUIWP20Y7GQ5T2SM4' where id=2; -update noar ti set v0='ZUIWP20Y7GQ5T2SM4' where id=2; -update noar tt set b2='7V3L5A6' where id=2; -update noar ti set b2='7V3L5A6' where id=2; -update noar tt set v0='XMA0JT04TAN3QHZT' where id=3; -update noar ti set v0='XMA0JT04TAN3QHZT' where id=3; -update noar tt set b0='44V9O8FYYD3SVVLT0IM2K7TQ1DNI1QU' where id=3; -update noar ti set b0='44V9O8FYYD3SVVLT0IM2K7TQ1DNI1QU' where id=3; -update noar tt set v0='1XUTKRMRDOZLIQC3A' where id=3; -update noar ti set v0='1XUTKRMRDOZLIQC3A' where id=3; -update noar tt set b1='F9FQ6VL0QL3KVD3AO1IF' where id=3; -update noar ti set b1='F9FQ6VL0QL3KVD3AO1IF' where id=3; -update noar tt set v0='FSHR80K' where id=3; -update noar ti set v0='FSHR80K' where id=3; -update noar tt set b2='7TO2YG04OPGWF62IOJ81VUM' where id=3; -update noar ti set b2='7TO2YG04OPGWF62IOJ81VUM' where id=3; -update noar tt set v0='9QY2JTEJBS5M0TSC3O' where id=4; -update noar ti set v0='9QY2JTEJBS5M0TSC3O' where id=4; -update noar tt set b0='6N4D0L4CY' where id=4; -update noar ti set b0='6N4D0L4CY' where id=4; -update noar tt set v0='WF8HQI7QUD44JRD3LQ3B2IL' where id=4; -update noar ti set v0='WF8HQI7QUD44JRD3LQ3B2IL' where id=4; -update noar tt set b1='ZO8RGJ0YX2JJLWUMCGEXXKLA98' where id=4; -update noar ti set b1='ZO8RGJ0YX2JJLWUMCGEXXKLA98' where id=4; -update noar tt set v0='5ISQS21S9' where id=4; -update noar ti set v0='5ISQS21S9' where id=4; -update noar tt set b2='NCHX55606AEWAK0P1TUUG34VKJ' where id=4; -update noar ti set b2='NCHX55606AEWAK0P1TUUG34VKJ' where id=4; -update noar tt set v0='JX4C84CT' where id=5; -update noar ti set v0='JX4C84CT' where id=5; -update noar tt set b0='OPCLKHTRB35DAZIV4RC7Q' where id=5; -update noar ti set b0='OPCLKHTRB35DAZIV4RC7Q' where id=5; -update noar tt set v0='ZAO9' where id=5; -update noar ti set v0='ZAO9' where id=5; -update noar tt set b1='6CK27' where id=5; -update noar ti set b1='6CK27' where id=5; -update noar tt set v0='HZTQ1M' where id=5; -update noar ti set v0='HZTQ1M' where id=5; -update noar tt set b2='LQOPPSUAE0MEZMCR4J1X9ADRQJQZ4UA3' where id=5; -update noar ti set b2='LQOPPSUAE0MEZMCR4J1X9ADRQJQZ4UA3' where id=5; -update noar tt set v0='4VA3JP' where id=6; -update noar ti set v0='4VA3JP' where id=6; -update noar tt set b0='HEW7B3VU83PUET' where id=6; -update noar ti set b0='HEW7B3VU83PUET' where id=6; -update noar tt set v0='1CMVTZVX3A51D95P4HGURCLTKIAZQ2' where id=6; -update noar ti set v0='1CMVTZVX3A51D95P4HGURCLTKIAZQ2' where id=6; -update noar tt set b1='GCGDIH86ZJK351PYI' where id=6; -update noar ti set b1='GCGDIH86ZJK351PYI' where id=6; -update noar tt set v0='JCLYLMSAE' where id=6; -update noar ti set v0='JCLYLMSAE' where id=6; -update noar tt set b2='ESGORQWV' where id=6; -update noar ti set b2='ESGORQWV' where id=6; -update noar tt set v0='LTDNZ4ZY1NR4' where id=7; -update noar ti set v0='LTDNZ4ZY1NR4' where id=7; -update noar tt set b0='9UVL785DID8OZY589FLBIEZYVQANK' where id=7; -update noar ti set b0='9UVL785DID8OZY589FLBIEZYVQANK' where id=7; -update noar tt set v0='YT3SR0TMOP' where id=7; -update noar ti set v0='YT3SR0TMOP' where id=7; -update noar tt set b1='7' where id=7; -update noar ti set b1='7' where id=7; -update noar tt set v0='57HM20P752U1U9CMZ' where id=7; -update noar ti set v0='57HM20P752U1U9CMZ' where id=7; -update noar tt set b2='Z89K24K9MVO9I3G6YG1OYPS' where id=7; -update noar ti set b2='Z89K24K9MVO9I3G6YG1OYPS' where id=7; -update noar tt set v0='ZJVSLN2SL6XTEN6' where id=8; -update noar ti set v0='ZJVSLN2SL6XTEN6' where id=8; -update noar tt set b0='QLX75HLH3SIM1TXF4F2OF' where id=8; -update noar ti set b0='QLX75HLH3SIM1TXF4F2OF' where id=8; -update noar tt set v0='Z' where id=8; -update noar ti set v0='Z' where id=8; -update noar tt set b1='Y9IPFE3BXTAC0UT9HC21ESA1FEX' where id=8; -update noar ti set b1='Y9IPFE3BXTAC0UT9HC21ESA1FEX' where id=8; -update noar tt set v0='F' where id=8; -update noar ti set v0='F' where id=8; -update noar tt set b2='DIYHEXW9PDMCSTXDNR0J95EYOO' where id=8; -update noar ti set b2='DIYHEXW9PDMCSTXDNR0J95EYOO' where id=8; -update noar tt set v0='41PZHYVX' where id=9; -update noar ti set v0='41PZHYVX' where id=9; -update noar tt set b0='K3TX52Z' where id=9; -update noar ti set b0='K3TX52Z' where id=9; -update noar tt set v0='C6' where id=9; -update noar ti set v0='C6' where id=9; -update noar tt set b1='4SM7Y7EPR76ALSJ0MY5RUZIF' where id=9; -update noar ti set b1='4SM7Y7EPR76ALSJ0MY5RUZIF' where id=9; -update noar tt set v0='TXJ5L77OC94B5N6DB7TWE7EV8VSK7' where id=9; -update noar ti set v0='TXJ5L77OC94B5N6DB7TWE7EV8VSK7' where id=9; -update noar tt set b2='MZ4F8BQ8A392YM8ARUV96Q6FKGAAJQH' where id=9; -update noar ti set b2='MZ4F8BQ8A392YM8ARUV96Q6FKGAAJQH' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 longblob null, -b1 blob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='TBBF7PNIEY0' where id=1; -update noar ti set v0='TBBF7PNIEY0' where id=1; -update noar tt set b0='LIZNCB0CTAXNQSD93GJ7' where id=1; -update noar ti set b0='LIZNCB0CTAXNQSD93GJ7' where id=1; -update noar tt set v0='K4I1C1C' where id=1; -update noar ti set v0='K4I1C1C' where id=1; -update noar tt set b1='VKP9NE2M88912BMV83E85RKX0' where id=1; -update noar ti set b1='VKP9NE2M88912BMV83E85RKX0' where id=1; -update noar tt set v0='XYPIXPOQCVNTJ' where id=1; -update noar ti set v0='XYPIXPOQCVNTJ' where id=1; -update noar tt set b2='T8ZJH' where id=1; -update noar ti set b2='T8ZJH' where id=1; -update noar tt set v0='YE8WYESMIBLBHOPKDIUIGAPROYKH' where id=2; -update noar ti set v0='YE8WYESMIBLBHOPKDIUIGAPROYKH' where id=2; -update noar tt set b0='2KFS6VVW6KVUQYOZ' where id=2; -update noar ti set b0='2KFS6VVW6KVUQYOZ' where id=2; -update noar tt set v0='6GC1XAWF6HIR2XJ1A4XU70TWWRBVXP' where id=2; -update noar ti set v0='6GC1XAWF6HIR2XJ1A4XU70TWWRBVXP' where id=2; -update noar tt set b1='QC' where id=2; -update noar ti set b1='QC' where id=2; -update noar tt set v0='IP05NF9I79DN9H43C2Y2J9X2' where id=2; -update noar ti set v0='IP05NF9I79DN9H43C2Y2J9X2' where id=2; -update noar tt set b2='AK55K44396UYZA58SF6' where id=2; -update noar ti set b2='AK55K44396UYZA58SF6' where id=2; -update noar tt set v0='BVXN6HK9' where id=3; -update noar ti set v0='BVXN6HK9' where id=3; -update noar tt set b0='JA7WALKHAQOBQFLYSMUZVEZLDVQ' where id=3; -update noar ti set b0='JA7WALKHAQOBQFLYSMUZVEZLDVQ' where id=3; -update noar tt set v0='S2NHOKLWQYMGGKDOZU1BJL' where id=3; -update noar ti set v0='S2NHOKLWQYMGGKDOZU1BJL' where id=3; -update noar tt set b1='E' where id=3; -update noar ti set b1='E' where id=3; -update noar tt set v0='7Z7OVC5XYY9HIRENZ9TR' where id=3; -update noar ti set v0='7Z7OVC5XYY9HIRENZ9TR' where id=3; -update noar tt set b2='M12B16' where id=3; -update noar ti set b2='M12B16' where id=3; -update noar tt set v0='JJ7NM' where id=4; -update noar ti set v0='JJ7NM' where id=4; -update noar tt set b0='5Z1QWAHPXTIZH' where id=4; -update noar ti set b0='5Z1QWAHPXTIZH' where id=4; -update noar tt set v0='5ASWU915ZHUJ6ZAX3' where id=4; -update noar ti set v0='5ASWU915ZHUJ6ZAX3' where id=4; -update noar tt set b1='M' where id=4; -update noar ti set b1='M' where id=4; -update noar tt set v0='35WL482ODFSP' where id=4; -update noar ti set v0='35WL482ODFSP' where id=4; -update noar tt set b2='YKWKLIHSBIDNV1W2W2454M0V4U4' where id=4; -update noar ti set b2='YKWKLIHSBIDNV1W2W2454M0V4U4' where id=4; -update noar tt set v0='49QN' where id=5; -update noar ti set v0='49QN' where id=5; -update noar tt set b0='FSBF' where id=5; -update noar ti set b0='FSBF' where id=5; -update noar tt set v0='M5SHHM4BVPJGHBP2V3WLBH24' where id=5; -update noar ti set v0='M5SHHM4BVPJGHBP2V3WLBH24' where id=5; -update noar tt set b1='XREMAVV3V' where id=5; -update noar ti set b1='XREMAVV3V' where id=5; -update noar tt set v0='Q3JQA1OGH6Z2FT8JMTXLD14HWTHP5Y1K' where id=5; -update noar ti set v0='Q3JQA1OGH6Z2FT8JMTXLD14HWTHP5Y1K' where id=5; -update noar tt set b2='ZLH0PSC738953AXM3' where id=5; -update noar ti set b2='ZLH0PSC738953AXM3' where id=5; -update noar tt set v0='6JEIEWSW5I4U3RBNRPZZIZ' where id=6; -update noar ti set v0='6JEIEWSW5I4U3RBNRPZZIZ' where id=6; -update noar tt set b0='TV6AFZN19FM' where id=6; -update noar ti set b0='TV6AFZN19FM' where id=6; -update noar tt set v0='3WYRVJB726G0' where id=6; -update noar ti set v0='3WYRVJB726G0' where id=6; -update noar tt set b1='BV4LMOJ8J3BMTNX01EYBCKWVXFT' where id=6; -update noar ti set b1='BV4LMOJ8J3BMTNX01EYBCKWVXFT' where id=6; -update noar tt set v0='E104FGTKY7H8SZDGHTNPNF092D1U' where id=6; -update noar ti set v0='E104FGTKY7H8SZDGHTNPNF092D1U' where id=6; -update noar tt set b2='1SCYP805068' where id=6; -update noar ti set b2='1SCYP805068' where id=6; -update noar tt set v0='DJUBO3DUJVAN' where id=7; -update noar ti set v0='DJUBO3DUJVAN' where id=7; -update noar tt set b0='Y8KMOF2FA55NBO0FYWT5O6' where id=7; -update noar ti set b0='Y8KMOF2FA55NBO0FYWT5O6' where id=7; -update noar tt set v0='CTRS5FX94HLNNDS2ICS' where id=7; -update noar ti set v0='CTRS5FX94HLNNDS2ICS' where id=7; -update noar tt set b1='FVHURWB1WUVU0Z9AD' where id=7; -update noar ti set b1='FVHURWB1WUVU0Z9AD' where id=7; -update noar tt set v0='AY' where id=7; -update noar ti set v0='AY' where id=7; -update noar tt set b2='3YMPHT51' where id=7; -update noar ti set b2='3YMPHT51' where id=7; -update noar tt set v0='Y2N8IHBQANWG9IL091D5Q7V2' where id=8; -update noar ti set v0='Y2N8IHBQANWG9IL091D5Q7V2' where id=8; -update noar tt set b0='561GQ1WTR5JUT4' where id=8; -update noar ti set b0='561GQ1WTR5JUT4' where id=8; -update noar tt set v0='CRDDPT6' where id=8; -update noar ti set v0='CRDDPT6' where id=8; -update noar tt set b1='CVI35ZHTANAXT9H0PX75BSACUJXW2Y' where id=8; -update noar ti set b1='CVI35ZHTANAXT9H0PX75BSACUJXW2Y' where id=8; -update noar tt set v0='E83T4C3AGAUEE8CA' where id=8; -update noar ti set v0='E83T4C3AGAUEE8CA' where id=8; -update noar tt set b2='PQEKJUKB6BG46N' where id=8; -update noar ti set b2='PQEKJUKB6BG46N' where id=8; -update noar tt set v0='QQLMPUZ48F2MKG57Y' where id=9; -update noar ti set v0='QQLMPUZ48F2MKG57Y' where id=9; -update noar tt set b0='57KJMENX6Q' where id=9; -update noar ti set b0='57KJMENX6Q' where id=9; -update noar tt set v0='DAVGGNCD6JCDDOGEERRU4540YEOABUQ' where id=9; -update noar ti set v0='DAVGGNCD6JCDDOGEERRU4540YEOABUQ' where id=9; -update noar tt set b1='7' where id=9; -update noar ti set b1='7' where id=9; -update noar tt set v0='E4' where id=9; -update noar ti set v0='E4' where id=9; -update noar tt set b2='VKGRLTTFLDRFU9YEF6HCINXBIKZY75O' where id=9; -update noar ti set b2='VKGRLTTFLDRFU9YEF6HCINXBIKZY75O' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 longblob null, -b1 blob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='2E' where id=1; -update noar ti set v0='2E' where id=1; -update noar tt set b0='53TK1A4LL' where id=1; -update noar ti set b0='53TK1A4LL' where id=1; -update noar tt set v0='9M5M4WWJUM' where id=1; -update noar ti set v0='9M5M4WWJUM' where id=1; -update noar tt set b1='SI6NYL' where id=1; -update noar ti set b1='SI6NYL' where id=1; -update noar tt set v0='73CKDYI3UC8I0GCN48UT9DEH3GOY6C37' where id=1; -update noar ti set v0='73CKDYI3UC8I0GCN48UT9DEH3GOY6C37' where id=1; -update noar tt set b2='87CERJODG11T5I7XLZ67' where id=1; -update noar ti set b2='87CERJODG11T5I7XLZ67' where id=1; -update noar tt set v0='325DYXA87X2WCVXI8RQBA8' where id=2; -update noar ti set v0='325DYXA87X2WCVXI8RQBA8' where id=2; -update noar tt set b0='9DB4O5F174YRU70V3' where id=2; -update noar ti set b0='9DB4O5F174YRU70V3' where id=2; -update noar tt set v0='Y7UVP66MTMRMDDQTOFOQG7BG7HV' where id=2; -update noar ti set v0='Y7UVP66MTMRMDDQTOFOQG7BG7HV' where id=2; -update noar tt set b1='D8D6D8ZJANJ3DOUMUXC6SKX1EF' where id=2; -update noar ti set b1='D8D6D8ZJANJ3DOUMUXC6SKX1EF' where id=2; -update noar tt set v0='W5I' where id=2; -update noar ti set v0='W5I' where id=2; -update noar tt set b2='C' where id=2; -update noar ti set b2='C' where id=2; -update noar tt set v0='0CRRFIUSG5FX' where id=3; -update noar ti set v0='0CRRFIUSG5FX' where id=3; -update noar tt set b0='IHB' where id=3; -update noar ti set b0='IHB' where id=3; -update noar tt set v0='CSBDFFO4K26WX6A1O497YZCG1IFYM0H' where id=3; -update noar ti set v0='CSBDFFO4K26WX6A1O497YZCG1IFYM0H' where id=3; -update noar tt set b1='0WDTQ8990ONKBIZX90XL7Z85BFUHGO' where id=3; -update noar ti set b1='0WDTQ8990ONKBIZX90XL7Z85BFUHGO' where id=3; -update noar tt set v0='18AJ7I5ERYTH' where id=3; -update noar ti set v0='18AJ7I5ERYTH' where id=3; -update noar tt set b2='8DQ9V' where id=3; -update noar ti set b2='8DQ9V' where id=3; -update noar tt set v0='7EMJX7JTXN3NKZG6Q1LV9VM6Q87' where id=4; -update noar ti set v0='7EMJX7JTXN3NKZG6Q1LV9VM6Q87' where id=4; -update noar tt set b0='BFBZOC5JPDFE' where id=4; -update noar ti set b0='BFBZOC5JPDFE' where id=4; -update noar tt set v0='LKCVPSETW2YZ8GG6BTZC' where id=4; -update noar ti set v0='LKCVPSETW2YZ8GG6BTZC' where id=4; -update noar tt set b1='M' where id=4; -update noar ti set b1='M' where id=4; -update noar tt set v0='PHQTBXBOD0M14DII' where id=4; -update noar ti set v0='PHQTBXBOD0M14DII' where id=4; -update noar tt set b2='OHQHP6YE' where id=4; -update noar ti set b2='OHQHP6YE' where id=4; -update noar tt set v0='J6S2OAVLBQXOF2' where id=5; -update noar ti set v0='J6S2OAVLBQXOF2' where id=5; -update noar tt set b0='LF8KZHUOLIMPORVU' where id=5; -update noar ti set b0='LF8KZHUOLIMPORVU' where id=5; -update noar tt set v0='FAP2FZOKQPPUB2J' where id=5; -update noar ti set v0='FAP2FZOKQPPUB2J' where id=5; -update noar tt set b1='R3GYXMU' where id=5; -update noar ti set b1='R3GYXMU' where id=5; -update noar tt set v0='1DMYKJB5SUQHGBKI5QCMM' where id=5; -update noar ti set v0='1DMYKJB5SUQHGBKI5QCMM' where id=5; -update noar tt set b2='1C7TCKJTE73L' where id=5; -update noar ti set b2='1C7TCKJTE73L' where id=5; -update noar tt set v0='QXY' where id=6; -update noar ti set v0='QXY' where id=6; -update noar tt set b0='N3P9Y60LA' where id=6; -update noar ti set b0='N3P9Y60LA' where id=6; -update noar tt set v0='KQ9AMGGCUE5PHY75I2' where id=6; -update noar ti set v0='KQ9AMGGCUE5PHY75I2' where id=6; -update noar tt set b1='KQUWJOYEDPXBQ8GR2LMP0LYTHGCB888' where id=6; -update noar ti set b1='KQUWJOYEDPXBQ8GR2LMP0LYTHGCB888' where id=6; -update noar tt set v0='HJX8KQMJKE47VFJ8Q6' where id=6; -update noar ti set v0='HJX8KQMJKE47VFJ8Q6' where id=6; -update noar tt set b2='ITLB5314ATXDPQL4LXS1C' where id=6; -update noar ti set b2='ITLB5314ATXDPQL4LXS1C' where id=6; -update noar tt set v0='IZKXBGF0M6MVF8WZE3HN0GZSOFW' where id=7; -update noar ti set v0='IZKXBGF0M6MVF8WZE3HN0GZSOFW' where id=7; -update noar tt set b0='M1S8GMO1YFTVKBHV3CH0Q6D5J84' where id=7; -update noar ti set b0='M1S8GMO1YFTVKBHV3CH0Q6D5J84' where id=7; -update noar tt set v0='HYBDR079M0RJPBL9V0TNXSJ3MW8' where id=7; -update noar ti set v0='HYBDR079M0RJPBL9V0TNXSJ3MW8' where id=7; -update noar tt set b1='7GOV921001P3QIW4GKG1QDMS2U40XSU0' where id=7; -update noar ti set b1='7GOV921001P3QIW4GKG1QDMS2U40XSU0' where id=7; -update noar tt set v0='I71R32RCD40GV' where id=7; -update noar ti set v0='I71R32RCD40GV' where id=7; -update noar tt set b2='TQ0K1D5CJ4LU5Z3SN1U47MBUTEDVO' where id=7; -update noar ti set b2='TQ0K1D5CJ4LU5Z3SN1U47MBUTEDVO' where id=7; -update noar tt set v0='W3JKQCMP1OGINQY2VO00MXBS0GHKNUX' where id=8; -update noar ti set v0='W3JKQCMP1OGINQY2VO00MXBS0GHKNUX' where id=8; -update noar tt set b0='ZBNA0TCRCEB' where id=8; -update noar ti set b0='ZBNA0TCRCEB' where id=8; -update noar tt set v0='JDJZEAESVWDVDTYRH2XB0' where id=8; -update noar ti set v0='JDJZEAESVWDVDTYRH2XB0' where id=8; -update noar tt set b1='LVF' where id=8; -update noar ti set b1='LVF' where id=8; -update noar tt set v0='1EKMZOSGE12VJB2ZR3SUJ649X6' where id=8; -update noar ti set v0='1EKMZOSGE12VJB2ZR3SUJ649X6' where id=8; -update noar tt set b2='5LJSMNV0P571P2N' where id=8; -update noar ti set b2='5LJSMNV0P571P2N' where id=8; -update noar tt set v0='3IC11MXCFUN4O5OVS51KUMWF' where id=9; -update noar ti set v0='3IC11MXCFUN4O5OVS51KUMWF' where id=9; -update noar tt set b0='A5O3IP3Y' where id=9; -update noar ti set b0='A5O3IP3Y' where id=9; -update noar tt set v0='BDS' where id=9; -update noar ti set v0='BDS' where id=9; -update noar tt set b1='YVK2RYAMSYJICH85Q0L5KLT' where id=9; -update noar ti set b1='YVK2RYAMSYJICH85Q0L5KLT' where id=9; -update noar tt set v0='GZ31I1069A' where id=9; -update noar ti set v0='GZ31I1069A' where id=9; -update noar tt set b2='1JP3' where id=9; -update noar ti set b2='1JP3' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 longblob not null, -b1 blob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='UKIJ7HPB54D2N1KW50' where id=1; -update noar ti set v0='UKIJ7HPB54D2N1KW50' where id=1; -update noar tt set b0='KW' where id=1; -update noar ti set b0='KW' where id=1; -update noar tt set v0='NJ5WRQXR2LNP5ZGBPUKODQ4L4RE' where id=1; -update noar ti set v0='NJ5WRQXR2LNP5ZGBPUKODQ4L4RE' where id=1; -update noar tt set b1='KRZT54RUHIIOGBRAZ7Q0' where id=1; -update noar ti set b1='KRZT54RUHIIOGBRAZ7Q0' where id=1; -update noar tt set v0='G9UB9LVW5C' where id=1; -update noar ti set v0='G9UB9LVW5C' where id=1; -update noar tt set b2='594RGPUQ6738NEZAGTG5ZEMBKY9' where id=1; -update noar ti set b2='594RGPUQ6738NEZAGTG5ZEMBKY9' where id=1; -update noar tt set v0='V2C' where id=2; -update noar ti set v0='V2C' where id=2; -update noar tt set b0='DZC6NFZW023RZPJEF8K9VBHN98FAV5O' where id=2; -update noar ti set b0='DZC6NFZW023RZPJEF8K9VBHN98FAV5O' where id=2; -update noar tt set v0='UOOBPBV53' where id=2; -update noar ti set v0='UOOBPBV53' where id=2; -update noar tt set b1='BW41MYTU2E4BGDJN6Z' where id=2; -update noar ti set b1='BW41MYTU2E4BGDJN6Z' where id=2; -update noar tt set v0='WN43Z4AAZ80W' where id=2; -update noar ti set v0='WN43Z4AAZ80W' where id=2; -update noar tt set b2='JTTYK3QVHHBGWYAIGC504FOZS1XJ5' where id=2; -update noar ti set b2='JTTYK3QVHHBGWYAIGC504FOZS1XJ5' where id=2; -update noar tt set v0='MI1KT' where id=3; -update noar ti set v0='MI1KT' where id=3; -update noar tt set b0='T1TJOALQQWM' where id=3; -update noar ti set b0='T1TJOALQQWM' where id=3; -update noar tt set v0='AIH6PR41ICGZ0BAE0SA77EL7NBC' where id=3; -update noar ti set v0='AIH6PR41ICGZ0BAE0SA77EL7NBC' where id=3; -update noar tt set b1='NVK6IIORGFBKG0WXRBCYR6H7R' where id=3; -update noar ti set b1='NVK6IIORGFBKG0WXRBCYR6H7R' where id=3; -update noar tt set v0='RMYFIPHXLDMHHILLDGR0PXLZVR' where id=3; -update noar ti set v0='RMYFIPHXLDMHHILLDGR0PXLZVR' where id=3; -update noar tt set b2='C5F6RJ4WPUT6FQOSS2GNJNSR78G9PAL' where id=3; -update noar ti set b2='C5F6RJ4WPUT6FQOSS2GNJNSR78G9PAL' where id=3; -update noar tt set v0='U8WK8TM6IN9TVFWFZG' where id=4; -update noar ti set v0='U8WK8TM6IN9TVFWFZG' where id=4; -update noar tt set b0='9MRBJDYNZVMB4J11DAKEPPNP' where id=4; -update noar ti set b0='9MRBJDYNZVMB4J11DAKEPPNP' where id=4; -update noar tt set v0='IV64YL7ONEJKS10H58UTIOJL' where id=4; -update noar ti set v0='IV64YL7ONEJKS10H58UTIOJL' where id=4; -update noar tt set b1='DMCKOREFOHPURS2JQ9AV4OL81QU8' where id=4; -update noar ti set b1='DMCKOREFOHPURS2JQ9AV4OL81QU8' where id=4; -update noar tt set v0='NDQVS4VMYAKX4NIX6AXBUQ0' where id=4; -update noar ti set v0='NDQVS4VMYAKX4NIX6AXBUQ0' where id=4; -update noar tt set b2='ZFL89395OILU1ENGJAAM' where id=4; -update noar ti set b2='ZFL89395OILU1ENGJAAM' where id=4; -update noar tt set v0='9KP9F90F8VOV' where id=5; -update noar ti set v0='9KP9F90F8VOV' where id=5; -update noar tt set b0='QAD1TZ3G4VR7E' where id=5; -update noar ti set b0='QAD1TZ3G4VR7E' where id=5; -update noar tt set v0='8EI150DNY1QNF7SX1384HTPF3IAHG' where id=5; -update noar ti set v0='8EI150DNY1QNF7SX1384HTPF3IAHG' where id=5; -update noar tt set b1='7AG7O3IW9SNK3CDRARU' where id=5; -update noar ti set b1='7AG7O3IW9SNK3CDRARU' where id=5; -update noar tt set v0='93DY8PIEHIYBNW5N78HC' where id=5; -update noar ti set v0='93DY8PIEHIYBNW5N78HC' where id=5; -update noar tt set b2='VTTT398NHC5TFATK5SUJ63EJYTJU2' where id=5; -update noar ti set b2='VTTT398NHC5TFATK5SUJ63EJYTJU2' where id=5; -update noar tt set v0='9V6CUWYXLJZJF44AEC0XCRWD512TWK0I' where id=6; -update noar ti set v0='9V6CUWYXLJZJF44AEC0XCRWD512TWK0I' where id=6; -update noar tt set b0='FB37HKBDAKD23ZZZP4Z3' where id=6; -update noar ti set b0='FB37HKBDAKD23ZZZP4Z3' where id=6; -update noar tt set v0='TP2MLYK14IH5S1D' where id=6; -update noar ti set v0='TP2MLYK14IH5S1D' where id=6; -update noar tt set b1='ZVINAO1EA36KB46D5YXHJ0' where id=6; -update noar ti set b1='ZVINAO1EA36KB46D5YXHJ0' where id=6; -update noar tt set v0='MZVUTNW246M40QX3XD5FSJPUO8N9WKAV' where id=6; -update noar ti set v0='MZVUTNW246M40QX3XD5FSJPUO8N9WKAV' where id=6; -update noar tt set b2='SMKR3N' where id=6; -update noar ti set b2='SMKR3N' where id=6; -update noar tt set v0='X8W4YF0191NKRO2AFAU' where id=7; -update noar ti set v0='X8W4YF0191NKRO2AFAU' where id=7; -update noar tt set b0='INQYC21Z2TF58QRQ3A89GSB5' where id=7; -update noar ti set b0='INQYC21Z2TF58QRQ3A89GSB5' where id=7; -update noar tt set v0='KXUIANCEXBWSL3FP4SGU' where id=7; -update noar ti set v0='KXUIANCEXBWSL3FP4SGU' where id=7; -update noar tt set b1='8RQKOE8FYOHIWA8WB' where id=7; -update noar ti set b1='8RQKOE8FYOHIWA8WB' where id=7; -update noar tt set v0='7QMZAYZ36FVC5F87' where id=7; -update noar ti set v0='7QMZAYZ36FVC5F87' where id=7; -update noar tt set b2='OIIPOOKV7ZZKR7HURPAL1MUL9PCZW40' where id=7; -update noar ti set b2='OIIPOOKV7ZZKR7HURPAL1MUL9PCZW40' where id=7; -update noar tt set v0='RZQQHZW1DQMN0JWXX8U4CFXZR9B89Q' where id=8; -update noar ti set v0='RZQQHZW1DQMN0JWXX8U4CFXZR9B89Q' where id=8; -update noar tt set b0='UC4N0WU3TCLB74I30FOWNMJQPPMUF50C' where id=8; -update noar ti set b0='UC4N0WU3TCLB74I30FOWNMJQPPMUF50C' where id=8; -update noar tt set v0='K1ZTD89TLKK103E09C8Q7' where id=8; -update noar ti set v0='K1ZTD89TLKK103E09C8Q7' where id=8; -update noar tt set b1='12NDKZ9HL' where id=8; -update noar ti set b1='12NDKZ9HL' where id=8; -update noar tt set v0='A442U8OULC7M2T5UB7416KL' where id=8; -update noar ti set v0='A442U8OULC7M2T5UB7416KL' where id=8; -update noar tt set b2='7ZJE82EX9XK7DL6L' where id=8; -update noar ti set b2='7ZJE82EX9XK7DL6L' where id=8; -update noar tt set v0='VOSU04MMOBI3009UXCM5' where id=9; -update noar ti set v0='VOSU04MMOBI3009UXCM5' where id=9; -update noar tt set b0='PRKEEUBGOTXA3' where id=9; -update noar ti set b0='PRKEEUBGOTXA3' where id=9; -update noar tt set v0='E32NQOLSN3KUSOTNNQ' where id=9; -update noar ti set v0='E32NQOLSN3KUSOTNNQ' where id=9; -update noar tt set b1='345AT8LGSTZVN4HTUJ2LM' where id=9; -update noar ti set b1='345AT8LGSTZVN4HTUJ2LM' where id=9; -update noar tt set v0='3IORRAI29CW97PMBOGPPDM29WOOD7' where id=9; -update noar ti set v0='3IORRAI29CW97PMBOGPPDM29WOOD7' where id=9; -update noar tt set b2='161CVACR' where id=9; -update noar ti set b2='161CVACR' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 longblob not null, -b1 blob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='S3WGRYWS1JL87K' where id=1; -update noar ti set v0='S3WGRYWS1JL87K' where id=1; -update noar tt set b0='ANUIZ2NNTQBUDA0T88L2RYZ44Q' where id=1; -update noar ti set b0='ANUIZ2NNTQBUDA0T88L2RYZ44Q' where id=1; -update noar tt set v0='E7KQ4DM76T29VJKJM' where id=1; -update noar ti set v0='E7KQ4DM76T29VJKJM' where id=1; -update noar tt set b1='RWPL' where id=1; -update noar ti set b1='RWPL' where id=1; -update noar tt set v0='L2ZEPTEO5LZID0SQTCPXODL6CB1RU' where id=1; -update noar ti set v0='L2ZEPTEO5LZID0SQTCPXODL6CB1RU' where id=1; -update noar tt set b2='M' where id=1; -update noar ti set b2='M' where id=1; -update noar tt set v0='605452XQRHQ' where id=2; -update noar ti set v0='605452XQRHQ' where id=2; -update noar tt set b0='S2Y1GNILERW5BX' where id=2; -update noar ti set b0='S2Y1GNILERW5BX' where id=2; -update noar tt set v0='322C' where id=2; -update noar ti set v0='322C' where id=2; -update noar tt set b1='F2TJ6BN8LP9D2KM8' where id=2; -update noar ti set b1='F2TJ6BN8LP9D2KM8' where id=2; -update noar tt set v0='JWR0IFLLBS' where id=2; -update noar ti set v0='JWR0IFLLBS' where id=2; -update noar tt set b2='6SLGPDR64QH1ZXQZQCX0EK564TH8SA' where id=2; -update noar ti set b2='6SLGPDR64QH1ZXQZQCX0EK564TH8SA' where id=2; -update noar tt set v0='6W' where id=3; -update noar ti set v0='6W' where id=3; -update noar tt set b0='Q3RL2U' where id=3; -update noar ti set b0='Q3RL2U' where id=3; -update noar tt set v0='LPGJ8XWM69B14YMLR' where id=3; -update noar ti set v0='LPGJ8XWM69B14YMLR' where id=3; -update noar tt set b1='GHQS7QEWEO9XE91UI4CB' where id=3; -update noar ti set b1='GHQS7QEWEO9XE91UI4CB' where id=3; -update noar tt set v0='H98TAFAKTIEGX' where id=3; -update noar ti set v0='H98TAFAKTIEGX' where id=3; -update noar tt set b2='1ET6ADIAABFH4L6B2AMYKYXWDQJROJ' where id=3; -update noar ti set b2='1ET6ADIAABFH4L6B2AMYKYXWDQJROJ' where id=3; -update noar tt set v0='U59L' where id=4; -update noar ti set v0='U59L' where id=4; -update noar tt set b0='0Y4JKSE8450D8SFL0' where id=4; -update noar ti set b0='0Y4JKSE8450D8SFL0' where id=4; -update noar tt set v0='29JZ7IN87653YDI9N0EVHEM' where id=4; -update noar ti set v0='29JZ7IN87653YDI9N0EVHEM' where id=4; -update noar tt set b1='QEBZE2HC3NP9U' where id=4; -update noar ti set b1='QEBZE2HC3NP9U' where id=4; -update noar tt set v0='4ED1URIBWQ9W1QQNGCDI' where id=4; -update noar ti set v0='4ED1URIBWQ9W1QQNGCDI' where id=4; -update noar tt set b2='X64F2F9E3JJ73VG68PAF5610O9VG' where id=4; -update noar ti set b2='X64F2F9E3JJ73VG68PAF5610O9VG' where id=4; -update noar tt set v0='TEHPUQ8383CZ6OJFP5CWAMJOFUD2Y47' where id=5; -update noar ti set v0='TEHPUQ8383CZ6OJFP5CWAMJOFUD2Y47' where id=5; -update noar tt set b0='3N1CRKKJVI5298D9PJEVLM8KGBY4N0' where id=5; -update noar ti set b0='3N1CRKKJVI5298D9PJEVLM8KGBY4N0' where id=5; -update noar tt set v0='54CE1XHYTI2ESZW398QWQAMFWDPCVR8' where id=5; -update noar ti set v0='54CE1XHYTI2ESZW398QWQAMFWDPCVR8' where id=5; -update noar tt set b1='2TCB3SDEGTPC4PLVO7J' where id=5; -update noar ti set b1='2TCB3SDEGTPC4PLVO7J' where id=5; -update noar tt set v0='XDVTJAWMK0YE3XZ6XT' where id=5; -update noar ti set v0='XDVTJAWMK0YE3XZ6XT' where id=5; -update noar tt set b2='5UB' where id=5; -update noar ti set b2='5UB' where id=5; -update noar tt set v0='P6WMWYCTZP8YC4S8FQ507W8R0GB' where id=6; -update noar ti set v0='P6WMWYCTZP8YC4S8FQ507W8R0GB' where id=6; -update noar tt set b0='XZU1SQ8YNN5JQBUK8PBDBRD9JDECQ' where id=6; -update noar ti set b0='XZU1SQ8YNN5JQBUK8PBDBRD9JDECQ' where id=6; -update noar tt set v0='JPQKP7HBTIRYC' where id=6; -update noar ti set v0='JPQKP7HBTIRYC' where id=6; -update noar tt set b1='HFTW8L0K' where id=6; -update noar ti set b1='HFTW8L0K' where id=6; -update noar tt set v0='9P79B8HRRW3IUKCP5G99YSUQ4BP2' where id=6; -update noar ti set v0='9P79B8HRRW3IUKCP5G99YSUQ4BP2' where id=6; -update noar tt set b2='Z8EI0HHMDU6M3176YYAWE89GFZ67ILN' where id=6; -update noar ti set b2='Z8EI0HHMDU6M3176YYAWE89GFZ67ILN' where id=6; -update noar tt set v0='R598N0WNNKZZ81MBQRR24WNEA83O' where id=7; -update noar ti set v0='R598N0WNNKZZ81MBQRR24WNEA83O' where id=7; -update noar tt set b0='2AFH2XG7BBE7Y6IMX' where id=7; -update noar ti set b0='2AFH2XG7BBE7Y6IMX' where id=7; -update noar tt set v0='GVL4L966AQCP39HH' where id=7; -update noar ti set v0='GVL4L966AQCP39HH' where id=7; -update noar tt set b1='3J2E90GHY1I' where id=7; -update noar ti set b1='3J2E90GHY1I' where id=7; -update noar tt set v0='3X4DERQ' where id=7; -update noar ti set v0='3X4DERQ' where id=7; -update noar tt set b2='MM7GCW7Z' where id=7; -update noar ti set b2='MM7GCW7Z' where id=7; -update noar tt set v0='2PRWPXXB29I5SFMRK6TZGMFUO6A' where id=8; -update noar ti set v0='2PRWPXXB29I5SFMRK6TZGMFUO6A' where id=8; -update noar tt set b0='RBRB9N9AK3LIWEJ9GVC7J1YIM' where id=8; -update noar ti set b0='RBRB9N9AK3LIWEJ9GVC7J1YIM' where id=8; -update noar tt set v0='W7THSP2D4K54RG8HJQNT12C' where id=8; -update noar ti set v0='W7THSP2D4K54RG8HJQNT12C' where id=8; -update noar tt set b1='GCH5CYW' where id=8; -update noar ti set b1='GCH5CYW' where id=8; -update noar tt set v0='F167WCWWYOFOPQH' where id=8; -update noar ti set v0='F167WCWWYOFOPQH' where id=8; -update noar tt set b2='29TW1DGZW3FNCA93VWNZBHOO5JP2Y' where id=8; -update noar ti set b2='29TW1DGZW3FNCA93VWNZBHOO5JP2Y' where id=8; -update noar tt set v0='O' where id=9; -update noar ti set v0='O' where id=9; -update noar tt set b0='OG8ZGD0CPFLSP' where id=9; -update noar ti set b0='OG8ZGD0CPFLSP' where id=9; -update noar tt set v0='FDP6R52NMT' where id=9; -update noar ti set v0='FDP6R52NMT' where id=9; -update noar tt set b1='2JRMGMPX3AYRI' where id=9; -update noar ti set b1='2JRMGMPX3AYRI' where id=9; -update noar tt set v0='DRFZVY2L5Y203E1S7S0VJSMVTXQUZGD' where id=9; -update noar ti set v0='DRFZVY2L5Y203E1S7S0VJSMVTXQUZGD' where id=9; -update noar tt set b2='KDVOG4LMBEQ3032BXUC7AYZD7GUHVGD' where id=9; -update noar ti set b2='KDVOG4LMBEQ3032BXUC7AYZD7GUHVGD' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 longblob null, -b1 blob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='FSW75BDDV1PMV3X986QWXKR7AAV5' where id=1; -update noar ti set v0='FSW75BDDV1PMV3X986QWXKR7AAV5' where id=1; -update noar tt set b0='JC' where id=1; -update noar ti set b0='JC' where id=1; -update noar tt set v0='ZM8X0DQAI5MOT7AYWG' where id=1; -update noar ti set v0='ZM8X0DQAI5MOT7AYWG' where id=1; -update noar tt set b1='BIAGAZJAG9T3IZME688IXY' where id=1; -update noar ti set b1='BIAGAZJAG9T3IZME688IXY' where id=1; -update noar tt set v0='RBWDFY62NS8ESMSRWIHEKNU32W10W5A0' where id=1; -update noar ti set v0='RBWDFY62NS8ESMSRWIHEKNU32W10W5A0' where id=1; -update noar tt set b2='YU4VQ3N1069EAP3IV' where id=1; -update noar ti set b2='YU4VQ3N1069EAP3IV' where id=1; -update noar tt set v0='JLGE7GCYFIRI3S2UWXFQ9VGKX9QUXIKM' where id=2; -update noar ti set v0='JLGE7GCYFIRI3S2UWXFQ9VGKX9QUXIKM' where id=2; -update noar tt set b0='YWG77Z4Y8HG7NBJ7WMR9O419X' where id=2; -update noar ti set b0='YWG77Z4Y8HG7NBJ7WMR9O419X' where id=2; -update noar tt set v0='T6DOCH0A0TRCYV' where id=2; -update noar ti set v0='T6DOCH0A0TRCYV' where id=2; -update noar tt set b1='ZHNETGL9ZN' where id=2; -update noar ti set b1='ZHNETGL9ZN' where id=2; -update noar tt set v0='L' where id=2; -update noar ti set v0='L' where id=2; -update noar tt set b2='GAPSO5HXJGKYSKKIEUMWV7ZZ9219' where id=2; -update noar ti set b2='GAPSO5HXJGKYSKKIEUMWV7ZZ9219' where id=2; -update noar tt set v0='ZZYZSKSWF50Z9WZS2IAOGBI5EN3' where id=3; -update noar ti set v0='ZZYZSKSWF50Z9WZS2IAOGBI5EN3' where id=3; -update noar tt set b0='CEVM974G1P0718EJ' where id=3; -update noar ti set b0='CEVM974G1P0718EJ' where id=3; -update noar tt set v0='H5S2ATW7C98DF9RPMMWL' where id=3; -update noar ti set v0='H5S2ATW7C98DF9RPMMWL' where id=3; -update noar tt set b1='X3JXFAX2M7COBCK9U4CCKD99ECDP' where id=3; -update noar ti set b1='X3JXFAX2M7COBCK9U4CCKD99ECDP' where id=3; -update noar tt set v0='MQYJ1XKFJ3PFPX9PGOL0E36W2L' where id=3; -update noar ti set v0='MQYJ1XKFJ3PFPX9PGOL0E36W2L' where id=3; -update noar tt set b2='R11FH6OGNN1AHWZQPMTIK' where id=3; -update noar ti set b2='R11FH6OGNN1AHWZQPMTIK' where id=3; -update noar tt set v0='GSQYPZWE4L5TG49FU0DM' where id=4; -update noar ti set v0='GSQYPZWE4L5TG49FU0DM' where id=4; -update noar tt set b0='Q9DU6YVORIO1Y7CLLZ4GSWQNYK' where id=4; -update noar ti set b0='Q9DU6YVORIO1Y7CLLZ4GSWQNYK' where id=4; -update noar tt set v0='A9GWMMIWZTFMXTENV05FGQ8SPVHOKL' where id=4; -update noar ti set v0='A9GWMMIWZTFMXTENV05FGQ8SPVHOKL' where id=4; -update noar tt set b1='SLG1MM87DROCQHN6PNHLLJIURHVQ0' where id=4; -update noar ti set b1='SLG1MM87DROCQHN6PNHLLJIURHVQ0' where id=4; -update noar tt set v0='N3Z42UT2SOFRQDGMC' where id=4; -update noar ti set v0='N3Z42UT2SOFRQDGMC' where id=4; -update noar tt set b2='FLMV1FQD64ILB3I0YELHQSPDAI9P4D5L' where id=4; -update noar ti set b2='FLMV1FQD64ILB3I0YELHQSPDAI9P4D5L' where id=4; -update noar tt set v0='ICLDS9J7TVOZ1' where id=5; -update noar ti set v0='ICLDS9J7TVOZ1' where id=5; -update noar tt set b0='2YGR189L95XJ6TVVLK6MSNI2YYGRL' where id=5; -update noar ti set b0='2YGR189L95XJ6TVVLK6MSNI2YYGRL' where id=5; -update noar tt set v0='YNA9KWNBVFV9I82Q' where id=5; -update noar ti set v0='YNA9KWNBVFV9I82Q' where id=5; -update noar tt set b1='GNOO' where id=5; -update noar ti set b1='GNOO' where id=5; -update noar tt set v0='3PTH' where id=5; -update noar ti set v0='3PTH' where id=5; -update noar tt set b2='NKLRJ6VASBQ' where id=5; -update noar ti set b2='NKLRJ6VASBQ' where id=5; -update noar tt set v0='SX5SX5NVWBO3J380IGRLVCOROGBI4WW' where id=6; -update noar ti set v0='SX5SX5NVWBO3J380IGRLVCOROGBI4WW' where id=6; -update noar tt set b0='B3R0UO2Q2E01PMDF7HZWAU6DKA4' where id=6; -update noar ti set b0='B3R0UO2Q2E01PMDF7HZWAU6DKA4' where id=6; -update noar tt set v0='CR04P4R36D5BQM' where id=6; -update noar ti set v0='CR04P4R36D5BQM' where id=6; -update noar tt set b1='GGIP0U' where id=6; -update noar ti set b1='GGIP0U' where id=6; -update noar tt set v0='CH4HDIAT4GTDC64MQ' where id=6; -update noar ti set v0='CH4HDIAT4GTDC64MQ' where id=6; -update noar tt set b2='FNIBYL9I1S9OXKBFVDO5CXNFEHMC' where id=6; -update noar ti set b2='FNIBYL9I1S9OXKBFVDO5CXNFEHMC' where id=6; -update noar tt set v0='02H' where id=7; -update noar ti set v0='02H' where id=7; -update noar tt set b0='C9E7H5C2EQOT1M' where id=7; -update noar ti set b0='C9E7H5C2EQOT1M' where id=7; -update noar tt set v0='DGFGS07K6DNCPC3MS3R' where id=7; -update noar ti set v0='DGFGS07K6DNCPC3MS3R' where id=7; -update noar tt set b1='Q0XONI3W9' where id=7; -update noar ti set b1='Q0XONI3W9' where id=7; -update noar tt set v0='JLA' where id=7; -update noar ti set v0='JLA' where id=7; -update noar tt set b2='QUTND2Z40XVU6I1374Y7DY4' where id=7; -update noar ti set b2='QUTND2Z40XVU6I1374Y7DY4' where id=7; -update noar tt set v0='8HF' where id=8; -update noar ti set v0='8HF' where id=8; -update noar tt set b0='WORURWAPBVPPGN0NLSM3EL' where id=8; -update noar ti set b0='WORURWAPBVPPGN0NLSM3EL' where id=8; -update noar tt set v0='R39N7LGH4WS7RS9ZUU41JG3' where id=8; -update noar ti set v0='R39N7LGH4WS7RS9ZUU41JG3' where id=8; -update noar tt set b1='WSLC6MIHAXWDH6XOOX1' where id=8; -update noar ti set b1='WSLC6MIHAXWDH6XOOX1' where id=8; -update noar tt set v0='UIVXW' where id=8; -update noar ti set v0='UIVXW' where id=8; -update noar tt set b2='0AS2JR3U946QVNOF9CHDSH1FE7VH' where id=8; -update noar ti set b2='0AS2JR3U946QVNOF9CHDSH1FE7VH' where id=8; -update noar tt set v0='MB75XVQOMALVJ' where id=9; -update noar ti set v0='MB75XVQOMALVJ' where id=9; -update noar tt set b0='2ABLE4QR49JE5JGSOYKXLLH45W' where id=9; -update noar ti set b0='2ABLE4QR49JE5JGSOYKXLLH45W' where id=9; -update noar tt set v0='ICGZHLQCZME9WGX2IEG1J' where id=9; -update noar ti set v0='ICGZHLQCZME9WGX2IEG1J' where id=9; -update noar tt set b1='NHKE4FV419DKF0LRP' where id=9; -update noar ti set b1='NHKE4FV419DKF0LRP' where id=9; -update noar tt set v0='Y276HO0ONEXAVTY' where id=9; -update noar ti set v0='Y276HO0ONEXAVTY' where id=9; -update noar tt set b2='8P6JLX4FO9THEXEKUFG6UUMFWDJZ7DZ8' where id=9; -update noar ti set b2='8P6JLX4FO9THEXEKUFG6UUMFWDJZ7DZ8' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 longblob null, -b1 blob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='L' where id=1; -update noar ti set v0='L' where id=1; -update noar tt set b0='IZDGVD23VNETNGY5XTLCHSPOCD' where id=1; -update noar ti set b0='IZDGVD23VNETNGY5XTLCHSPOCD' where id=1; -update noar tt set v0='UAX9SHXL53IFTHBOF11NIU7VFTQGFLFG' where id=1; -update noar ti set v0='UAX9SHXL53IFTHBOF11NIU7VFTQGFLFG' where id=1; -update noar tt set b1='B8J18ASUR15OQ4T' where id=1; -update noar ti set b1='B8J18ASUR15OQ4T' where id=1; -update noar tt set v0='5RUR2QM26SI' where id=1; -update noar ti set v0='5RUR2QM26SI' where id=1; -update noar tt set b2='8E0EP9Q61EHI5MYY3TJKDG' where id=1; -update noar ti set b2='8E0EP9Q61EHI5MYY3TJKDG' where id=1; -update noar tt set v0='QZYWCD' where id=2; -update noar ti set v0='QZYWCD' where id=2; -update noar tt set b0='BINEM1YJTSUNDCC876' where id=2; -update noar ti set b0='BINEM1YJTSUNDCC876' where id=2; -update noar tt set v0='P' where id=2; -update noar ti set v0='P' where id=2; -update noar tt set b1='7YUUSBRW7A6AT4PW1LX7B03FQ' where id=2; -update noar ti set b1='7YUUSBRW7A6AT4PW1LX7B03FQ' where id=2; -update noar tt set v0='A298' where id=2; -update noar ti set v0='A298' where id=2; -update noar tt set b2='GZYHSDQJQHYALX71VU93L' where id=2; -update noar ti set b2='GZYHSDQJQHYALX71VU93L' where id=2; -update noar tt set v0='D85O7I' where id=3; -update noar ti set v0='D85O7I' where id=3; -update noar tt set b0='CPA8QF9H9UX12KA81' where id=3; -update noar ti set b0='CPA8QF9H9UX12KA81' where id=3; -update noar tt set v0='FICQ84LZJFIP7PYL' where id=3; -update noar ti set v0='FICQ84LZJFIP7PYL' where id=3; -update noar tt set b1='IX3GC' where id=3; -update noar ti set b1='IX3GC' where id=3; -update noar tt set v0='F8BYMYYZK' where id=3; -update noar ti set v0='F8BYMYYZK' where id=3; -update noar tt set b2='DTY2J15TDF6QJ4ASDFHV' where id=3; -update noar ti set b2='DTY2J15TDF6QJ4ASDFHV' where id=3; -update noar tt set v0='JSFK' where id=4; -update noar ti set v0='JSFK' where id=4; -update noar tt set b0='PSGKQCI247AWJF4TYZOCYP2' where id=4; -update noar ti set b0='PSGKQCI247AWJF4TYZOCYP2' where id=4; -update noar tt set v0='CINJSK' where id=4; -update noar ti set v0='CINJSK' where id=4; -update noar tt set b1='71YNP5SHY3ACZ' where id=4; -update noar ti set b1='71YNP5SHY3ACZ' where id=4; -update noar tt set v0='WJ6FJ8ZS0731AKJR6X12SDJY' where id=4; -update noar ti set v0='WJ6FJ8ZS0731AKJR6X12SDJY' where id=4; -update noar tt set b2='RBNY60W2NIO401AZF0JABJS' where id=4; -update noar ti set b2='RBNY60W2NIO401AZF0JABJS' where id=4; -update noar tt set v0='41RSKPVDMZ9TJ2X0Y' where id=5; -update noar ti set v0='41RSKPVDMZ9TJ2X0Y' where id=5; -update noar tt set b0='RST9GQUA12JLRJWYT8SG03' where id=5; -update noar ti set b0='RST9GQUA12JLRJWYT8SG03' where id=5; -update noar tt set v0='SM9M2WFG2UFUPGKQ0BHK28PAVOPMMEDK' where id=5; -update noar ti set v0='SM9M2WFG2UFUPGKQ0BHK28PAVOPMMEDK' where id=5; -update noar tt set b1='JL7D3A5W6DTOSOJT387' where id=5; -update noar ti set b1='JL7D3A5W6DTOSOJT387' where id=5; -update noar tt set v0='G3GRW4A7T7NXYECN9S8' where id=5; -update noar ti set v0='G3GRW4A7T7NXYECN9S8' where id=5; -update noar tt set b2='JP3AP2RV3CHL6NLKH44W' where id=5; -update noar ti set b2='JP3AP2RV3CHL6NLKH44W' where id=5; -update noar tt set v0='HNEGO' where id=6; -update noar ti set v0='HNEGO' where id=6; -update noar tt set b0='U12549GNVN' where id=6; -update noar ti set b0='U12549GNVN' where id=6; -update noar tt set v0='DDL4V8N5D10UKHGOUAU' where id=6; -update noar ti set v0='DDL4V8N5D10UKHGOUAU' where id=6; -update noar tt set b1='B' where id=6; -update noar ti set b1='B' where id=6; -update noar tt set v0='B16NOL74LUGBL13JE9TXN79P64G' where id=6; -update noar ti set v0='B16NOL74LUGBL13JE9TXN79P64G' where id=6; -update noar tt set b2='BBSMZ5LNW9Y01F45U4Y3B3Z1SET8W' where id=6; -update noar ti set b2='BBSMZ5LNW9Y01F45U4Y3B3Z1SET8W' where id=6; -update noar tt set v0='P' where id=7; -update noar ti set v0='P' where id=7; -update noar tt set b0='KB5F87UYEMELU1TV8M6URR' where id=7; -update noar ti set b0='KB5F87UYEMELU1TV8M6URR' where id=7; -update noar tt set v0='VHY5G' where id=7; -update noar ti set v0='VHY5G' where id=7; -update noar tt set b1='XLIK3Q9BEC5CVUVKQEF0' where id=7; -update noar ti set b1='XLIK3Q9BEC5CVUVKQEF0' where id=7; -update noar tt set v0='PGFJOT537HSAX83GK63EIQWD7AFB' where id=7; -update noar ti set v0='PGFJOT537HSAX83GK63EIQWD7AFB' where id=7; -update noar tt set b2='ZGA' where id=7; -update noar ti set b2='ZGA' where id=7; -update noar tt set v0='6FY31V0YF8S9XUBBHQY' where id=8; -update noar ti set v0='6FY31V0YF8S9XUBBHQY' where id=8; -update noar tt set b0='2H6ICYISC3QGBMRQQIDU2Z' where id=8; -update noar ti set b0='2H6ICYISC3QGBMRQQIDU2Z' where id=8; -update noar tt set v0='UMI4K' where id=8; -update noar ti set v0='UMI4K' where id=8; -update noar tt set b1='CF9FSN7IOJ87XMIBTL3E1FQ38Q' where id=8; -update noar ti set b1='CF9FSN7IOJ87XMIBTL3E1FQ38Q' where id=8; -update noar tt set v0='T0IC0011NB' where id=8; -update noar ti set v0='T0IC0011NB' where id=8; -update noar tt set b2='2CLAVM6ICGB6C5GTRN9AHO' where id=8; -update noar ti set b2='2CLAVM6ICGB6C5GTRN9AHO' where id=8; -update noar tt set v0='44YSU3K9RQFOCJO9HDEWVVNA5Z' where id=9; -update noar ti set v0='44YSU3K9RQFOCJO9HDEWVVNA5Z' where id=9; -update noar tt set b0='7Q6D64RGUK3PUY' where id=9; -update noar ti set b0='7Q6D64RGUK3PUY' where id=9; -update noar tt set v0='NZ9IZYIWTQT8XX7EQTGTLO5Z' where id=9; -update noar ti set v0='NZ9IZYIWTQT8XX7EQTGTLO5Z' where id=9; -update noar tt set b1='4' where id=9; -update noar ti set b1='4' where id=9; -update noar tt set v0='QEH2B8FJFGMO4MKY6NL' where id=9; -update noar ti set v0='QEH2B8FJFGMO4MKY6NL' where id=9; -update noar tt set b2='ZU58H9' where id=9; -update noar ti set b2='ZU58H9' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 longblob not null, -b1 blob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='DTMX31LT49' where id=1; -update noar ti set v0='DTMX31LT49' where id=1; -update noar tt set b0='PAIW5VX' where id=1; -update noar ti set b0='PAIW5VX' where id=1; -update noar tt set v0='PQ1P3WOVPOAQ09BNOV6' where id=1; -update noar ti set v0='PQ1P3WOVPOAQ09BNOV6' where id=1; -update noar tt set b1='ZNMM2QH8D3' where id=1; -update noar ti set b1='ZNMM2QH8D3' where id=1; -update noar tt set v0='9' where id=1; -update noar ti set v0='9' where id=1; -update noar tt set b2='21EP4CDRGDO3P4GBDYWQEL' where id=1; -update noar ti set b2='21EP4CDRGDO3P4GBDYWQEL' where id=1; -update noar tt set v0='242U6W' where id=2; -update noar ti set v0='242U6W' where id=2; -update noar tt set b0='QY1GS8DC6G4W4TT4EMY3RP8' where id=2; -update noar ti set b0='QY1GS8DC6G4W4TT4EMY3RP8' where id=2; -update noar tt set v0='UHJMZKTNQYM07TR' where id=2; -update noar ti set v0='UHJMZKTNQYM07TR' where id=2; -update noar tt set b1='M' where id=2; -update noar ti set b1='M' where id=2; -update noar tt set v0='XX7JU2EWQCU' where id=2; -update noar ti set v0='XX7JU2EWQCU' where id=2; -update noar tt set b2='W' where id=2; -update noar ti set b2='W' where id=2; -update noar tt set v0='KK2GTOD6G' where id=3; -update noar ti set v0='KK2GTOD6G' where id=3; -update noar tt set b0='JUDSP5NKRSK57OQBR' where id=3; -update noar ti set b0='JUDSP5NKRSK57OQBR' where id=3; -update noar tt set v0='W66TIBKUX60QL3HOBI0AIFL17NW' where id=3; -update noar ti set v0='W66TIBKUX60QL3HOBI0AIFL17NW' where id=3; -update noar tt set b1='LC6D3Z' where id=3; -update noar ti set b1='LC6D3Z' where id=3; -update noar tt set v0='S708Z4E' where id=3; -update noar ti set v0='S708Z4E' where id=3; -update noar tt set b2='2FFK5' where id=3; -update noar ti set b2='2FFK5' where id=3; -update noar tt set v0='PT22MSDN13S6GE' where id=4; -update noar ti set v0='PT22MSDN13S6GE' where id=4; -update noar tt set b0='4H9DYO3EVGG0ERP5CJZDE91F8UU' where id=4; -update noar ti set b0='4H9DYO3EVGG0ERP5CJZDE91F8UU' where id=4; -update noar tt set v0='26AXFZS49ZF004BMLOGMB4PYNEWHA' where id=4; -update noar ti set v0='26AXFZS49ZF004BMLOGMB4PYNEWHA' where id=4; -update noar tt set b1='OBYGYWZJONTEX8GTDKC' where id=4; -update noar ti set b1='OBYGYWZJONTEX8GTDKC' where id=4; -update noar tt set v0='G9ZLLSPV3YKDQZ1X' where id=4; -update noar ti set v0='G9ZLLSPV3YKDQZ1X' where id=4; -update noar tt set b2='F5P74FRS78K4T1L' where id=4; -update noar ti set b2='F5P74FRS78K4T1L' where id=4; -update noar tt set v0='4T5R' where id=5; -update noar ti set v0='4T5R' where id=5; -update noar tt set b0='E9VY137EVTW8VSAKEENN0K1IPR6N' where id=5; -update noar ti set b0='E9VY137EVTW8VSAKEENN0K1IPR6N' where id=5; -update noar tt set v0='IR24U' where id=5; -update noar ti set v0='IR24U' where id=5; -update noar tt set b1='IFQNUF4Q' where id=5; -update noar ti set b1='IFQNUF4Q' where id=5; -update noar tt set v0='QUJBTXTAUP0YHF5C052RYEY4IN9' where id=5; -update noar ti set v0='QUJBTXTAUP0YHF5C052RYEY4IN9' where id=5; -update noar tt set b2='HHL2R52IHN3JS6FU7LKHB7QOB' where id=5; -update noar ti set b2='HHL2R52IHN3JS6FU7LKHB7QOB' where id=5; -update noar tt set v0='VGR1KV1OMROQ65YSRQYHT6ZVW' where id=6; -update noar ti set v0='VGR1KV1OMROQ65YSRQYHT6ZVW' where id=6; -update noar tt set b0='01O9NBGUVH9WNB4S025B1TZ9I' where id=6; -update noar ti set b0='01O9NBGUVH9WNB4S025B1TZ9I' where id=6; -update noar tt set v0='NU1VRWH1BY3XHQ' where id=6; -update noar ti set v0='NU1VRWH1BY3XHQ' where id=6; -update noar tt set b1='P1PBGYABXMC' where id=6; -update noar ti set b1='P1PBGYABXMC' where id=6; -update noar tt set v0='CDENN3JWMIVNF' where id=6; -update noar ti set v0='CDENN3JWMIVNF' where id=6; -update noar tt set b2='K5CPN6ZZMCF52D13G90' where id=6; -update noar ti set b2='K5CPN6ZZMCF52D13G90' where id=6; -update noar tt set v0='J0U5KLDWT20DX9BW3C1OJ0' where id=7; -update noar ti set v0='J0U5KLDWT20DX9BW3C1OJ0' where id=7; -update noar tt set b0='YVLF' where id=7; -update noar ti set b0='YVLF' where id=7; -update noar tt set v0='OBP0EPIUE8WZLG328CTIL' where id=7; -update noar ti set v0='OBP0EPIUE8WZLG328CTIL' where id=7; -update noar tt set b1='DZZ9MJ2CFU8YOH6FMX1' where id=7; -update noar ti set b1='DZZ9MJ2CFU8YOH6FMX1' where id=7; -update noar tt set v0='B1UU9' where id=7; -update noar ti set v0='B1UU9' where id=7; -update noar tt set b2='JGOJ1O5ESXBEN7QQNWK3K1N0JH' where id=7; -update noar ti set b2='JGOJ1O5ESXBEN7QQNWK3K1N0JH' where id=7; -update noar tt set v0='OOBQJZFN72H9C564B3MH' where id=8; -update noar ti set v0='OOBQJZFN72H9C564B3MH' where id=8; -update noar tt set b0='NZ0GGLHXVCZSCKY660KWQ5' where id=8; -update noar ti set b0='NZ0GGLHXVCZSCKY660KWQ5' where id=8; -update noar tt set v0='PW5E5EGXSO7QD30APF69HG' where id=8; -update noar ti set v0='PW5E5EGXSO7QD30APF69HG' where id=8; -update noar tt set b1='9UEC06C49JBF2399K7WE96UAKHKA' where id=8; -update noar ti set b1='9UEC06C49JBF2399K7WE96UAKHKA' where id=8; -update noar tt set v0='NJ' where id=8; -update noar ti set v0='NJ' where id=8; -update noar tt set b2='N0D1X57S5D38EKVICEQ' where id=8; -update noar ti set b2='N0D1X57S5D38EKVICEQ' where id=8; -update noar tt set v0='QYGRDIB1OK5KQYQL3NMZICWT54MVE645' where id=9; -update noar ti set v0='QYGRDIB1OK5KQYQL3NMZICWT54MVE645' where id=9; -update noar tt set b0='66P8RS0J2' where id=9; -update noar ti set b0='66P8RS0J2' where id=9; -update noar tt set v0='96UZN0ODBV1YIR2YFQUL9EL' where id=9; -update noar ti set v0='96UZN0ODBV1YIR2YFQUL9EL' where id=9; -update noar tt set b1='APCV460NQRTF' where id=9; -update noar ti set b1='APCV460NQRTF' where id=9; -update noar tt set v0='VOA55UOV17DCYAT' where id=9; -update noar ti set v0='VOA55UOV17DCYAT' where id=9; -update noar tt set b2='JCT7W515BQHB7SX9Q2DLDH7310HU' where id=9; -update noar ti set b2='JCT7W515BQHB7SX9Q2DLDH7310HU' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 longblob not null, -b1 blob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='IFHBN69C2W9IH8Q1I5' where id=1; -update noar ti set v0='IFHBN69C2W9IH8Q1I5' where id=1; -update noar tt set b0='K2EZPJMULWBD1Q9HMP' where id=1; -update noar ti set b0='K2EZPJMULWBD1Q9HMP' where id=1; -update noar tt set v0='V0Y' where id=1; -update noar ti set v0='V0Y' where id=1; -update noar tt set b1='FW' where id=1; -update noar ti set b1='FW' where id=1; -update noar tt set v0='1EQFFX4S7WO89IFGGFGTLGL' where id=1; -update noar ti set v0='1EQFFX4S7WO89IFGGFGTLGL' where id=1; -update noar tt set b2='H4P4VTTZZST92I7MAIUOLEFN' where id=1; -update noar ti set b2='H4P4VTTZZST92I7MAIUOLEFN' where id=1; -update noar tt set v0='7J0R6O6D4COSHLQOXTOL' where id=2; -update noar ti set v0='7J0R6O6D4COSHLQOXTOL' where id=2; -update noar tt set b0='756Y' where id=2; -update noar ti set b0='756Y' where id=2; -update noar tt set v0='MWJE44Z' where id=2; -update noar ti set v0='MWJE44Z' where id=2; -update noar tt set b1='RYSNYV4FA96AU' where id=2; -update noar ti set b1='RYSNYV4FA96AU' where id=2; -update noar tt set v0='3HVY' where id=2; -update noar ti set v0='3HVY' where id=2; -update noar tt set b2='54LHL' where id=2; -update noar ti set b2='54LHL' where id=2; -update noar tt set v0='6SUIYDNFL1WLYMEIDOBDXJHX8' where id=3; -update noar ti set v0='6SUIYDNFL1WLYMEIDOBDXJHX8' where id=3; -update noar tt set b0='TQQZ1NG4TZUYPQ4O99TGZGZUV' where id=3; -update noar ti set b0='TQQZ1NG4TZUYPQ4O99TGZGZUV' where id=3; -update noar tt set v0='T2K5EBKLKUMLNNGS' where id=3; -update noar ti set v0='T2K5EBKLKUMLNNGS' where id=3; -update noar tt set b1='6LFQMYZ3I2X' where id=3; -update noar ti set b1='6LFQMYZ3I2X' where id=3; -update noar tt set v0='V7RIZMDYL8UT6731QDD' where id=3; -update noar ti set v0='V7RIZMDYL8UT6731QDD' where id=3; -update noar tt set b2='I' where id=3; -update noar ti set b2='I' where id=3; -update noar tt set v0='7UYA84RHSB7XYZG' where id=4; -update noar ti set v0='7UYA84RHSB7XYZG' where id=4; -update noar tt set b0='IY' where id=4; -update noar ti set b0='IY' where id=4; -update noar tt set v0='FDFY6B' where id=4; -update noar ti set v0='FDFY6B' where id=4; -update noar tt set b1='K4A1DR46UCEKTQD83OILDY' where id=4; -update noar ti set b1='K4A1DR46UCEKTQD83OILDY' where id=4; -update noar tt set v0='0LYV0Y65VWVGJ9EW' where id=4; -update noar ti set v0='0LYV0Y65VWVGJ9EW' where id=4; -update noar tt set b2='BHC6AABZIM' where id=4; -update noar ti set b2='BHC6AABZIM' where id=4; -update noar tt set v0='YUZOM62M3ZD1DKS7YS' where id=5; -update noar ti set v0='YUZOM62M3ZD1DKS7YS' where id=5; -update noar tt set b0='MWKGIRKGIGJHJ6ZEQ0E1Z1GM0' where id=5; -update noar ti set b0='MWKGIRKGIGJHJ6ZEQ0E1Z1GM0' where id=5; -update noar tt set v0='AMG85TBX5SNXT' where id=5; -update noar ti set v0='AMG85TBX5SNXT' where id=5; -update noar tt set b1='LXTBW' where id=5; -update noar ti set b1='LXTBW' where id=5; -update noar tt set v0='PNNQ48WUL9D921YV51XLKDCWN42UYXUD' where id=5; -update noar ti set v0='PNNQ48WUL9D921YV51XLKDCWN42UYXUD' where id=5; -update noar tt set b2='WNXM0XP8NCVBV' where id=5; -update noar ti set b2='WNXM0XP8NCVBV' where id=5; -update noar tt set v0='7P3SMXKNRDE6B43PAZ2QYDY' where id=6; -update noar ti set v0='7P3SMXKNRDE6B43PAZ2QYDY' where id=6; -update noar tt set b0='S3S0BKWUVSVAY55AYVWF9T3D8Y8BGG' where id=6; -update noar ti set b0='S3S0BKWUVSVAY55AYVWF9T3D8Y8BGG' where id=6; -update noar tt set v0='U6L4233IRRA3J2W9GM8NH75KCZ' where id=6; -update noar ti set v0='U6L4233IRRA3J2W9GM8NH75KCZ' where id=6; -update noar tt set b1='6KZ5V5CV3PK3QH6JZO8QVGV59BP' where id=6; -update noar ti set b1='6KZ5V5CV3PK3QH6JZO8QVGV59BP' where id=6; -update noar tt set v0='JSOG8BT7Z7A' where id=6; -update noar ti set v0='JSOG8BT7Z7A' where id=6; -update noar tt set b2='7AXL8J9L411W4W' where id=6; -update noar ti set b2='7AXL8J9L411W4W' where id=6; -update noar tt set v0='VXRGTZGXFOQSGM6WCDUMR3' where id=7; -update noar ti set v0='VXRGTZGXFOQSGM6WCDUMR3' where id=7; -update noar tt set b0='E6N1DZ0HCJN7TWR57ZKUZ29341IEQ' where id=7; -update noar ti set b0='E6N1DZ0HCJN7TWR57ZKUZ29341IEQ' where id=7; -update noar tt set v0='EMNHTOWOPS4RM8KIKV5TQ4LA7U9RDOP9' where id=7; -update noar ti set v0='EMNHTOWOPS4RM8KIKV5TQ4LA7U9RDOP9' where id=7; -update noar tt set b1='Q2CKSPZGM02UOITDSHLFNGZN' where id=7; -update noar ti set b1='Q2CKSPZGM02UOITDSHLFNGZN' where id=7; -update noar tt set v0='5IYW' where id=7; -update noar ti set v0='5IYW' where id=7; -update noar tt set b2='I8OXFV24GB6G' where id=7; -update noar ti set b2='I8OXFV24GB6G' where id=7; -update noar tt set v0='3S60974J' where id=8; -update noar ti set v0='3S60974J' where id=8; -update noar tt set b0='0PII0CSKGOUX9SZ1N319' where id=8; -update noar ti set b0='0PII0CSKGOUX9SZ1N319' where id=8; -update noar tt set v0='Z7TYZQUWV9' where id=8; -update noar ti set v0='Z7TYZQUWV9' where id=8; -update noar tt set b1='P40KW6Y4EGGC0V' where id=8; -update noar ti set b1='P40KW6Y4EGGC0V' where id=8; -update noar tt set v0='2S' where id=8; -update noar ti set v0='2S' where id=8; -update noar tt set b2='HZ8R527GG7982M63' where id=8; -update noar ti set b2='HZ8R527GG7982M63' where id=8; -update noar tt set v0='B16XUAD5I' where id=9; -update noar ti set v0='B16XUAD5I' where id=9; -update noar tt set b0='R' where id=9; -update noar ti set b0='R' where id=9; -update noar tt set v0='CPWNEW3ST3D2' where id=9; -update noar ti set v0='CPWNEW3ST3D2' where id=9; -update noar tt set b1='U0YF3J7V4EM6DL85C3' where id=9; -update noar ti set b1='U0YF3J7V4EM6DL85C3' where id=9; -update noar tt set v0='HX01FHNZ1901HRG49X' where id=9; -update noar ti set v0='HX01FHNZ1901HRG49X' where id=9; -update noar tt set b2='7F9GOYGBGTP031UO19RHET1UFUC1L' where id=9; -update noar ti set b2='7F9GOYGBGTP031UO19RHET1UFUC1L' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 longblob null, -b1 mediumblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='KKG71HYAK6VH4' where id=1; -update noar ti set v0='KKG71HYAK6VH4' where id=1; -update noar tt set b0='7NL8U' where id=1; -update noar ti set b0='7NL8U' where id=1; -update noar tt set v0='K6NK3340PXQHMIGCI66' where id=1; -update noar ti set v0='K6NK3340PXQHMIGCI66' where id=1; -update noar tt set b1='X0E2E7DJ9DU4D084BRA00F9PO3Z9TS' where id=1; -update noar ti set b1='X0E2E7DJ9DU4D084BRA00F9PO3Z9TS' where id=1; -update noar tt set v0='EPNZ8F5KYZQXVTMA' where id=1; -update noar ti set v0='EPNZ8F5KYZQXVTMA' where id=1; -update noar tt set b2='JU91' where id=1; -update noar ti set b2='JU91' where id=1; -update noar tt set v0='1CZK' where id=2; -update noar ti set v0='1CZK' where id=2; -update noar tt set b0='1U4HOMCUNG7FECITNRBWEV049JHEE' where id=2; -update noar ti set b0='1U4HOMCUNG7FECITNRBWEV049JHEE' where id=2; -update noar tt set v0='LONF7ZLFZ11I9I42WBLVEFI09R2I' where id=2; -update noar ti set v0='LONF7ZLFZ11I9I42WBLVEFI09R2I' where id=2; -update noar tt set b1='CT9UF0XFJXDU5HYFG5JK9M' where id=2; -update noar ti set b1='CT9UF0XFJXDU5HYFG5JK9M' where id=2; -update noar tt set v0='04SEPXRP2KX0OJBX5R08W789FH75R' where id=2; -update noar ti set v0='04SEPXRP2KX0OJBX5R08W789FH75R' where id=2; -update noar tt set b2='QRYYAZO4ODLRHL0YKJ' where id=2; -update noar ti set b2='QRYYAZO4ODLRHL0YKJ' where id=2; -update noar tt set v0='C15Q13TVWFIMUCJ3QP122G241OT' where id=3; -update noar ti set v0='C15Q13TVWFIMUCJ3QP122G241OT' where id=3; -update noar tt set b0='BE5YU6UTBNMU' where id=3; -update noar ti set b0='BE5YU6UTBNMU' where id=3; -update noar tt set v0='ZVJEMU6EZN9S0VQINI02J1M1BRE2EPDK' where id=3; -update noar ti set v0='ZVJEMU6EZN9S0VQINI02J1M1BRE2EPDK' where id=3; -update noar tt set b1='TB1RUWW1YNZ6CEMMKM04254EMF14B' where id=3; -update noar ti set b1='TB1RUWW1YNZ6CEMMKM04254EMF14B' where id=3; -update noar tt set v0='LCO31M3M3N588RBRR7BKP0ADLX2U' where id=3; -update noar ti set v0='LCO31M3M3N588RBRR7BKP0ADLX2U' where id=3; -update noar tt set b2='OEZQAOA9VQZ384NH2PM9KH9XHNF' where id=3; -update noar ti set b2='OEZQAOA9VQZ384NH2PM9KH9XHNF' where id=3; -update noar tt set v0='IXAGO2SGMFQBKGK6UMCTRNTFKCCJ8' where id=4; -update noar ti set v0='IXAGO2SGMFQBKGK6UMCTRNTFKCCJ8' where id=4; -update noar tt set b0='GYHL1BJU34B4WE6JR8M7M' where id=4; -update noar ti set b0='GYHL1BJU34B4WE6JR8M7M' where id=4; -update noar tt set v0='AKXGGKICASNTJEZ' where id=4; -update noar ti set v0='AKXGGKICASNTJEZ' where id=4; -update noar tt set b1='8B5JNCBCM2O59V69OV18DNGMP9' where id=4; -update noar ti set b1='8B5JNCBCM2O59V69OV18DNGMP9' where id=4; -update noar tt set v0='J8Q6TD1C7RP2U107XA5' where id=4; -update noar ti set v0='J8Q6TD1C7RP2U107XA5' where id=4; -update noar tt set b2='4H7RUEITVZJHVBLGVXCSOMO53F7LLG' where id=4; -update noar ti set b2='4H7RUEITVZJHVBLGVXCSOMO53F7LLG' where id=4; -update noar tt set v0='8TRLGUPWI3' where id=5; -update noar ti set v0='8TRLGUPWI3' where id=5; -update noar tt set b0='MWS8G1Y2' where id=5; -update noar ti set b0='MWS8G1Y2' where id=5; -update noar tt set v0='W4FFGSYVW45WYPSWEZIUE4PZ7IFGN' where id=5; -update noar ti set v0='W4FFGSYVW45WYPSWEZIUE4PZ7IFGN' where id=5; -update noar tt set b1='W217SSVSLM2R1MRU50MJOPTI6OQ' where id=5; -update noar ti set b1='W217SSVSLM2R1MRU50MJOPTI6OQ' where id=5; -update noar tt set v0='YC00FBB0JF66CCCXX5V8L7OR1' where id=5; -update noar ti set v0='YC00FBB0JF66CCCXX5V8L7OR1' where id=5; -update noar tt set b2='557MUWJP0O83PMQU' where id=5; -update noar ti set b2='557MUWJP0O83PMQU' where id=5; -update noar tt set v0='6AZBII' where id=6; -update noar ti set v0='6AZBII' where id=6; -update noar tt set b0='CH' where id=6; -update noar ti set b0='CH' where id=6; -update noar tt set v0='TDNXQ3XSJRNZMHAIEC6UPMWBRLE05U' where id=6; -update noar ti set v0='TDNXQ3XSJRNZMHAIEC6UPMWBRLE05U' where id=6; -update noar tt set b1='O38TW8PN97HD' where id=6; -update noar ti set b1='O38TW8PN97HD' where id=6; -update noar tt set v0='1M0XYF8A912WNXOKUTMK2G1GM1J' where id=6; -update noar ti set v0='1M0XYF8A912WNXOKUTMK2G1GM1J' where id=6; -update noar tt set b2='VSYZYABAT89SLCDSELCYN8' where id=6; -update noar ti set b2='VSYZYABAT89SLCDSELCYN8' where id=6; -update noar tt set v0='8' where id=7; -update noar ti set v0='8' where id=7; -update noar tt set b0='WF35' where id=7; -update noar ti set b0='WF35' where id=7; -update noar tt set v0='3RN2C3KSOA4EPYYIFIX' where id=7; -update noar ti set v0='3RN2C3KSOA4EPYYIFIX' where id=7; -update noar tt set b1='ZTP75F0LLL3DS57Q8RC9EON' where id=7; -update noar ti set b1='ZTP75F0LLL3DS57Q8RC9EON' where id=7; -update noar tt set v0='HVPK4RS5JD3T49' where id=7; -update noar ti set v0='HVPK4RS5JD3T49' where id=7; -update noar tt set b2='S51AMSCGIVVAYITZUHFPAKT10FA' where id=7; -update noar ti set b2='S51AMSCGIVVAYITZUHFPAKT10FA' where id=7; -update noar tt set v0='E1RNRITTQ5YSTRBG7V78L' where id=8; -update noar ti set v0='E1RNRITTQ5YSTRBG7V78L' where id=8; -update noar tt set b0='LA7' where id=8; -update noar ti set b0='LA7' where id=8; -update noar tt set v0='1BEH' where id=8; -update noar ti set v0='1BEH' where id=8; -update noar tt set b1='UCK8ZHJDJL74ZUKTYLS5' where id=8; -update noar ti set b1='UCK8ZHJDJL74ZUKTYLS5' where id=8; -update noar tt set v0='QQPM3U' where id=8; -update noar ti set v0='QQPM3U' where id=8; -update noar tt set b2='4TCJ' where id=8; -update noar ti set b2='4TCJ' where id=8; -update noar tt set v0='PMGHI89V66IJ' where id=9; -update noar ti set v0='PMGHI89V66IJ' where id=9; -update noar tt set b0='PO35OJSKFGBZMOZH' where id=9; -update noar ti set b0='PO35OJSKFGBZMOZH' where id=9; -update noar tt set v0='2HBC0KY622IQYGZP8ALS3PRRX' where id=9; -update noar ti set v0='2HBC0KY622IQYGZP8ALS3PRRX' where id=9; -update noar tt set b1='ZWYQG68SMETHER41VGT41H9E468YIVN' where id=9; -update noar ti set b1='ZWYQG68SMETHER41VGT41H9E468YIVN' where id=9; -update noar tt set v0='M' where id=9; -update noar ti set v0='M' where id=9; -update noar tt set b2='NP5FWUCRIMC4DNH7RPB4GTCL03PLU5UW' where id=9; -update noar ti set b2='NP5FWUCRIMC4DNH7RPB4GTCL03PLU5UW' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 longblob null, -b1 mediumblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='5HJABLX3Y7MQMAPU2OWCGN8GFTEEYM' where id=1; -update noar ti set v0='5HJABLX3Y7MQMAPU2OWCGN8GFTEEYM' where id=1; -update noar tt set b0='15LBEF35' where id=1; -update noar ti set b0='15LBEF35' where id=1; -update noar tt set v0='ULVX' where id=1; -update noar ti set v0='ULVX' where id=1; -update noar tt set b1='C0PO' where id=1; -update noar ti set b1='C0PO' where id=1; -update noar tt set v0='3' where id=1; -update noar ti set v0='3' where id=1; -update noar tt set b2='681J7U6IQSZ2UPRY' where id=1; -update noar ti set b2='681J7U6IQSZ2UPRY' where id=1; -update noar tt set v0='AISOC' where id=2; -update noar ti set v0='AISOC' where id=2; -update noar tt set b0='GWUH8008KDKY668UAL7XADPA' where id=2; -update noar ti set b0='GWUH8008KDKY668UAL7XADPA' where id=2; -update noar tt set v0='1RN0I8A1XXRDZTPAQD5PK5G76U7J3TZV' where id=2; -update noar ti set v0='1RN0I8A1XXRDZTPAQD5PK5G76U7J3TZV' where id=2; -update noar tt set b1='QFFST3U6W4M7W8CHWE' where id=2; -update noar ti set b1='QFFST3U6W4M7W8CHWE' where id=2; -update noar tt set v0='O9HDG3BFOH' where id=2; -update noar ti set v0='O9HDG3BFOH' where id=2; -update noar tt set b2='B1COOU87L5M55BFKMPE4PDZNEFW5P' where id=2; -update noar ti set b2='B1COOU87L5M55BFKMPE4PDZNEFW5P' where id=2; -update noar tt set v0='M4YWI9TLG2HVBUYJBBGYO' where id=3; -update noar ti set v0='M4YWI9TLG2HVBUYJBBGYO' where id=3; -update noar tt set b0='62BZ4UKSX9' where id=3; -update noar ti set b0='62BZ4UKSX9' where id=3; -update noar tt set v0='1ZNSRP6FMQNYHFV8P' where id=3; -update noar ti set v0='1ZNSRP6FMQNYHFV8P' where id=3; -update noar tt set b1='VK424ARYYBMHWJK0EV8JKRMQ6T2YU8' where id=3; -update noar ti set b1='VK424ARYYBMHWJK0EV8JKRMQ6T2YU8' where id=3; -update noar tt set v0='6ZT2WWXD8MGDTHEE' where id=3; -update noar ti set v0='6ZT2WWXD8MGDTHEE' where id=3; -update noar tt set b2='HWHVNHMQAL54B4FLGZAXWN5THG' where id=3; -update noar ti set b2='HWHVNHMQAL54B4FLGZAXWN5THG' where id=3; -update noar tt set v0='9NQBVBGBHAN090' where id=4; -update noar ti set v0='9NQBVBGBHAN090' where id=4; -update noar tt set b0='PN27FCP2YN7BD5ZIRBZ45SS' where id=4; -update noar ti set b0='PN27FCP2YN7BD5ZIRBZ45SS' where id=4; -update noar tt set v0='OTA' where id=4; -update noar ti set v0='OTA' where id=4; -update noar tt set b1='TU70S6R3M6IDHRHCORFTS6' where id=4; -update noar ti set b1='TU70S6R3M6IDHRHCORFTS6' where id=4; -update noar tt set v0='TQMVKV9OP3AFS5NO8709KUZ1EJ' where id=4; -update noar ti set v0='TQMVKV9OP3AFS5NO8709KUZ1EJ' where id=4; -update noar tt set b2='4HV' where id=4; -update noar ti set b2='4HV' where id=4; -update noar tt set v0='HV33UANAE3KR8EZI460WD2' where id=5; -update noar ti set v0='HV33UANAE3KR8EZI460WD2' where id=5; -update noar tt set b0='GQVKLO6VQG42CD47LL68SLQSXOX60UR' where id=5; -update noar ti set b0='GQVKLO6VQG42CD47LL68SLQSXOX60UR' where id=5; -update noar tt set v0='40K5QSJ' where id=5; -update noar ti set v0='40K5QSJ' where id=5; -update noar tt set b1='JL3WX8LEGQ1ONZT69QIHDLQ5LL' where id=5; -update noar ti set b1='JL3WX8LEGQ1ONZT69QIHDLQ5LL' where id=5; -update noar tt set v0='0LSTCMFPGM51' where id=5; -update noar ti set v0='0LSTCMFPGM51' where id=5; -update noar tt set b2='MX0BFS7BA' where id=5; -update noar ti set b2='MX0BFS7BA' where id=5; -update noar tt set v0='YCG5Z904G9PEEEE' where id=6; -update noar ti set v0='YCG5Z904G9PEEEE' where id=6; -update noar tt set b0='FK8' where id=6; -update noar ti set b0='FK8' where id=6; -update noar tt set v0='1W2IAM53X' where id=6; -update noar ti set v0='1W2IAM53X' where id=6; -update noar tt set b1='5PUKX7ELP2ZA0T11N1AZ6QD7' where id=6; -update noar ti set b1='5PUKX7ELP2ZA0T11N1AZ6QD7' where id=6; -update noar tt set v0='449S1CG59A89YMYXFSHXF6KUGFMV8' where id=6; -update noar ti set v0='449S1CG59A89YMYXFSHXF6KUGFMV8' where id=6; -update noar tt set b2='FVAUG17IK4F5DV0HYLSRD2' where id=6; -update noar ti set b2='FVAUG17IK4F5DV0HYLSRD2' where id=6; -update noar tt set v0='GR7DFFQUPUQGKQ6EXQ8P5VVOFR49NK9O' where id=7; -update noar ti set v0='GR7DFFQUPUQGKQ6EXQ8P5VVOFR49NK9O' where id=7; -update noar tt set b0='PAUXCKPS9BP8SLG39UI8C5' where id=7; -update noar ti set b0='PAUXCKPS9BP8SLG39UI8C5' where id=7; -update noar tt set v0='KV1ADBOZJ13DJQKUMAO3' where id=7; -update noar ti set v0='KV1ADBOZJ13DJQKUMAO3' where id=7; -update noar tt set b1='6X2WO0' where id=7; -update noar ti set b1='6X2WO0' where id=7; -update noar tt set v0='6WNKIIPT89M29CG' where id=7; -update noar ti set v0='6WNKIIPT89M29CG' where id=7; -update noar tt set b2='VHU4MTJIUERQ9Y' where id=7; -update noar ti set b2='VHU4MTJIUERQ9Y' where id=7; -update noar tt set v0='WJIJRUOO5C9616IXN90Y6K0FHKH57H' where id=8; -update noar ti set v0='WJIJRUOO5C9616IXN90Y6K0FHKH57H' where id=8; -update noar tt set b0='2OEFAFFMRP1TWXZWU6L2X7ZHJDIIGFQ' where id=8; -update noar ti set b0='2OEFAFFMRP1TWXZWU6L2X7ZHJDIIGFQ' where id=8; -update noar tt set v0='DNDBTWE9DYO3ZIBH9YIN' where id=8; -update noar ti set v0='DNDBTWE9DYO3ZIBH9YIN' where id=8; -update noar tt set b1='V2B1WA' where id=8; -update noar ti set b1='V2B1WA' where id=8; -update noar tt set v0='8Y7AHSDA2F' where id=8; -update noar ti set v0='8Y7AHSDA2F' where id=8; -update noar tt set b2='BTIIE2VHX43Q7TK5YWER247XXNQ' where id=8; -update noar ti set b2='BTIIE2VHX43Q7TK5YWER247XXNQ' where id=8; -update noar tt set v0='PLDT1PNNR8RJH1HXQVQSJ' where id=9; -update noar ti set v0='PLDT1PNNR8RJH1HXQVQSJ' where id=9; -update noar tt set b0='8FJOI6XSW121Q56SV02HE8L2XEX' where id=9; -update noar ti set b0='8FJOI6XSW121Q56SV02HE8L2XEX' where id=9; -update noar tt set v0='R4MDOOMPUVWFSM2PDSB4AOJVZR7Y' where id=9; -update noar ti set v0='R4MDOOMPUVWFSM2PDSB4AOJVZR7Y' where id=9; -update noar tt set b1='PBTAUBEYQ4J4PCXZQTVA9LAZV19DP3T' where id=9; -update noar ti set b1='PBTAUBEYQ4J4PCXZQTVA9LAZV19DP3T' where id=9; -update noar tt set v0='A3F5ZW201WYLZ1UFFF6KSBJ1C' where id=9; -update noar ti set v0='A3F5ZW201WYLZ1UFFF6KSBJ1C' where id=9; -update noar tt set b2='NMNOLAVSYOIFTUSEIQBWSAOKKAI2R7' where id=9; -update noar ti set b2='NMNOLAVSYOIFTUSEIQBWSAOKKAI2R7' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 longblob not null, -b1 mediumblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='8K7' where id=1; -update noar ti set v0='8K7' where id=1; -update noar tt set b0='YHTFQ5CNLDJ' where id=1; -update noar ti set b0='YHTFQ5CNLDJ' where id=1; -update noar tt set v0='4TQD' where id=1; -update noar ti set v0='4TQD' where id=1; -update noar tt set b1='LPVX1U2IX8JZYAZ6J0DR52BSN6D0' where id=1; -update noar ti set b1='LPVX1U2IX8JZYAZ6J0DR52BSN6D0' where id=1; -update noar tt set v0='PZEDC2A7OCSHSSVWWMJ68X' where id=1; -update noar ti set v0='PZEDC2A7OCSHSSVWWMJ68X' where id=1; -update noar tt set b2='6JXGU' where id=1; -update noar ti set b2='6JXGU' where id=1; -update noar tt set v0='FMY45C6R' where id=2; -update noar ti set v0='FMY45C6R' where id=2; -update noar tt set b0='DZPNU7UOJMRZ32' where id=2; -update noar ti set b0='DZPNU7UOJMRZ32' where id=2; -update noar tt set v0='6O8RKDQ037LS21J2RI0251W3POML' where id=2; -update noar ti set v0='6O8RKDQ037LS21J2RI0251W3POML' where id=2; -update noar tt set b1='2EE7HQ7M0HNS5544HRA' where id=2; -update noar ti set b1='2EE7HQ7M0HNS5544HRA' where id=2; -update noar tt set v0='REX08ZX' where id=2; -update noar ti set v0='REX08ZX' where id=2; -update noar tt set b2='30Y9U53YHCQ3AT2W9RCFZHDZ19W9LL9' where id=2; -update noar ti set b2='30Y9U53YHCQ3AT2W9RCFZHDZ19W9LL9' where id=2; -update noar tt set v0='8N5B0SJ' where id=3; -update noar ti set v0='8N5B0SJ' where id=3; -update noar tt set b0='VFA0U16AIWNPR5QV95CU9UTZ0R4IO7' where id=3; -update noar ti set b0='VFA0U16AIWNPR5QV95CU9UTZ0R4IO7' where id=3; -update noar tt set v0='9J77DG0' where id=3; -update noar ti set v0='9J77DG0' where id=3; -update noar tt set b1='TF2NVS7GN18EZ5OWAIM3APUK7MB' where id=3; -update noar ti set b1='TF2NVS7GN18EZ5OWAIM3APUK7MB' where id=3; -update noar tt set v0='E6EL9QY' where id=3; -update noar ti set v0='E6EL9QY' where id=3; -update noar tt set b2='5L6M2D' where id=3; -update noar ti set b2='5L6M2D' where id=3; -update noar tt set v0='ENJTUAV1MMFBL' where id=4; -update noar ti set v0='ENJTUAV1MMFBL' where id=4; -update noar tt set b0='C8AWSZ7ZXP8KLT9LW' where id=4; -update noar ti set b0='C8AWSZ7ZXP8KLT9LW' where id=4; -update noar tt set v0='2QIPFZ5R8PTEIWJKQZTVLANR6617F' where id=4; -update noar ti set v0='2QIPFZ5R8PTEIWJKQZTVLANR6617F' where id=4; -update noar tt set b1='UKCCS6TX8LHKVKOP' where id=4; -update noar ti set b1='UKCCS6TX8LHKVKOP' where id=4; -update noar tt set v0='4HP1TA9VI4EFFI6YIO' where id=4; -update noar ti set v0='4HP1TA9VI4EFFI6YIO' where id=4; -update noar tt set b2='7PLPI2NWS94829G1RRFCY1BZJ' where id=4; -update noar ti set b2='7PLPI2NWS94829G1RRFCY1BZJ' where id=4; -update noar tt set v0='H2H5FRLZGF70985BKZUWGZ1O' where id=5; -update noar ti set v0='H2H5FRLZGF70985BKZUWGZ1O' where id=5; -update noar tt set b0='LCSXXVOYGW8C6LJDCFV9USHTYAK3' where id=5; -update noar ti set b0='LCSXXVOYGW8C6LJDCFV9USHTYAK3' where id=5; -update noar tt set v0='VSFP3X7QQHR' where id=5; -update noar ti set v0='VSFP3X7QQHR' where id=5; -update noar tt set b1='4YHFHDXFIC6WTY922XM4RJ30Q5' where id=5; -update noar ti set b1='4YHFHDXFIC6WTY922XM4RJ30Q5' where id=5; -update noar tt set v0='SBW8YSE7ZRDVK9RB82' where id=5; -update noar ti set v0='SBW8YSE7ZRDVK9RB82' where id=5; -update noar tt set b2='7D22' where id=5; -update noar ti set b2='7D22' where id=5; -update noar tt set v0='WQ81QM' where id=6; -update noar ti set v0='WQ81QM' where id=6; -update noar tt set b0='K9UK6KJFZFH3PCB' where id=6; -update noar ti set b0='K9UK6KJFZFH3PCB' where id=6; -update noar tt set v0='NVDT6Q9OZ3RK4GNUKO9BPH29ECI' where id=6; -update noar ti set v0='NVDT6Q9OZ3RK4GNUKO9BPH29ECI' where id=6; -update noar tt set b1='9VCDUX8AWVC7H68KNTSB' where id=6; -update noar ti set b1='9VCDUX8AWVC7H68KNTSB' where id=6; -update noar tt set v0='X4JFJIBQL3ADRRF1XT8YATEG9G3A' where id=6; -update noar ti set v0='X4JFJIBQL3ADRRF1XT8YATEG9G3A' where id=6; -update noar tt set b2='LV0A37F8E7UL8F5W' where id=6; -update noar ti set b2='LV0A37F8E7UL8F5W' where id=6; -update noar tt set v0='MBO7HCNVNZ0VE90UOKRRH5Y99DZNAH' where id=7; -update noar ti set v0='MBO7HCNVNZ0VE90UOKRRH5Y99DZNAH' where id=7; -update noar tt set b0='HPTTSUCMR4Z6PIJXFGR4BORBEA' where id=7; -update noar ti set b0='HPTTSUCMR4Z6PIJXFGR4BORBEA' where id=7; -update noar tt set v0='IN8OAYIF999IR9D7GB0B7PFWKE2K' where id=7; -update noar ti set v0='IN8OAYIF999IR9D7GB0B7PFWKE2K' where id=7; -update noar tt set b1='A321KGGFXWBBMBPSU66Y4ZJR5' where id=7; -update noar ti set b1='A321KGGFXWBBMBPSU66Y4ZJR5' where id=7; -update noar tt set v0='RD5RXL7ODA562LG85' where id=7; -update noar ti set v0='RD5RXL7ODA562LG85' where id=7; -update noar tt set b2='TZPS2M4MCY4RB093QLR' where id=7; -update noar ti set b2='TZPS2M4MCY4RB093QLR' where id=7; -update noar tt set v0='AXASNN0FLXEJ5MLG5YNR' where id=8; -update noar ti set v0='AXASNN0FLXEJ5MLG5YNR' where id=8; -update noar tt set b0='59WF0PW7Z5DUB0YTTE' where id=8; -update noar ti set b0='59WF0PW7Z5DUB0YTTE' where id=8; -update noar tt set v0='SYSOURNST5XPY3DSUYCI13Z8UL' where id=8; -update noar ti set v0='SYSOURNST5XPY3DSUYCI13Z8UL' where id=8; -update noar tt set b1='RHRPX9AKWNPYWDV000GCXT3FH' where id=8; -update noar ti set b1='RHRPX9AKWNPYWDV000GCXT3FH' where id=8; -update noar tt set v0='WX1WM9LKY5EETUZQ346W4FLEQK' where id=8; -update noar ti set v0='WX1WM9LKY5EETUZQ346W4FLEQK' where id=8; -update noar tt set b2='4T6PACN' where id=8; -update noar ti set b2='4T6PACN' where id=8; -update noar tt set v0='RDLQO3OBKRW51MPFILQ025QMCL2' where id=9; -update noar ti set v0='RDLQO3OBKRW51MPFILQ025QMCL2' where id=9; -update noar tt set b0='2FZAIMNXGUETJEJNF2VACRW47MDYFCDI' where id=9; -update noar ti set b0='2FZAIMNXGUETJEJNF2VACRW47MDYFCDI' where id=9; -update noar tt set v0='XKTYZ3' where id=9; -update noar ti set v0='XKTYZ3' where id=9; -update noar tt set b1='UQWQQYQ8CIORII8BFNXC' where id=9; -update noar ti set b1='UQWQQYQ8CIORII8BFNXC' where id=9; -update noar tt set v0='H351JDZO1E64OJ1BHJ5268' where id=9; -update noar ti set v0='H351JDZO1E64OJ1BHJ5268' where id=9; -update noar tt set b2='832RSIP315L3HA8' where id=9; -update noar ti set b2='832RSIP315L3HA8' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 longblob not null, -b1 mediumblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='QKEGN3A' where id=1; -update noar ti set v0='QKEGN3A' where id=1; -update noar tt set b0='P8S2QR330UZ1NLL' where id=1; -update noar ti set b0='P8S2QR330UZ1NLL' where id=1; -update noar tt set v0='GQZ55V84' where id=1; -update noar ti set v0='GQZ55V84' where id=1; -update noar tt set b1='WBXM6MDUSOXZDS' where id=1; -update noar ti set b1='WBXM6MDUSOXZDS' where id=1; -update noar tt set v0='1VM3B9ZB1D7GXHP9T8' where id=1; -update noar ti set v0='1VM3B9ZB1D7GXHP9T8' where id=1; -update noar tt set b2='FQYKK87HX' where id=1; -update noar ti set b2='FQYKK87HX' where id=1; -update noar tt set v0='RNUGJXGNGEQ47OPEWZ5JTHAFR8NB9' where id=2; -update noar ti set v0='RNUGJXGNGEQ47OPEWZ5JTHAFR8NB9' where id=2; -update noar tt set b0='YJ2VXB5QI4CI5B9VFZZBTNECJ9HR' where id=2; -update noar ti set b0='YJ2VXB5QI4CI5B9VFZZBTNECJ9HR' where id=2; -update noar tt set v0='971VENWHO77XZ1SXJU8FJI90JB6EN8' where id=2; -update noar ti set v0='971VENWHO77XZ1SXJU8FJI90JB6EN8' where id=2; -update noar tt set b1='OP2A50UYKG0DC3DWVAGPGABL3HF' where id=2; -update noar ti set b1='OP2A50UYKG0DC3DWVAGPGABL3HF' where id=2; -update noar tt set v0='6L83JY7CL1' where id=2; -update noar ti set v0='6L83JY7CL1' where id=2; -update noar tt set b2='CAPR5LBGQ6GR3Q4PMPFU2M' where id=2; -update noar ti set b2='CAPR5LBGQ6GR3Q4PMPFU2M' where id=2; -update noar tt set v0='ZN3XTBLOKGQH6ZSOYMWKIO5HK6ZFHTL' where id=3; -update noar ti set v0='ZN3XTBLOKGQH6ZSOYMWKIO5HK6ZFHTL' where id=3; -update noar tt set b0='E1DRBM7' where id=3; -update noar ti set b0='E1DRBM7' where id=3; -update noar tt set v0='G0WB61PS5Q9ABRG73Y1Q5K01QYMQR3L' where id=3; -update noar ti set v0='G0WB61PS5Q9ABRG73Y1Q5K01QYMQR3L' where id=3; -update noar tt set b1='NVCPKUJEN6EWLNFH56DYG8K477B1LVR5' where id=3; -update noar ti set b1='NVCPKUJEN6EWLNFH56DYG8K477B1LVR5' where id=3; -update noar tt set v0='8NAGYOQ0XMG1YCDUK5T6' where id=3; -update noar ti set v0='8NAGYOQ0XMG1YCDUK5T6' where id=3; -update noar tt set b2='JWTW5FO04EGC2SPB34JP937' where id=3; -update noar ti set b2='JWTW5FO04EGC2SPB34JP937' where id=3; -update noar tt set v0='R4QP0055' where id=4; -update noar ti set v0='R4QP0055' where id=4; -update noar tt set b0='CN5HDFZVI5GYSJPG' where id=4; -update noar ti set b0='CN5HDFZVI5GYSJPG' where id=4; -update noar tt set v0='1UKDNSUCV8Y6RP1BHDYLD' where id=4; -update noar ti set v0='1UKDNSUCV8Y6RP1BHDYLD' where id=4; -update noar tt set b1='PJE2D5WM4' where id=4; -update noar ti set b1='PJE2D5WM4' where id=4; -update noar tt set v0='YHUMXRU0E8MKF28CQLQTQ7JT0552' where id=4; -update noar ti set v0='YHUMXRU0E8MKF28CQLQTQ7JT0552' where id=4; -update noar tt set b2='GQNKU8Z7FYEA9G4N8GOQC8' where id=4; -update noar ti set b2='GQNKU8Z7FYEA9G4N8GOQC8' where id=4; -update noar tt set v0='EXV5K5055PGDE' where id=5; -update noar ti set v0='EXV5K5055PGDE' where id=5; -update noar tt set b0='5X92ZD445CCBCTDZ0WJOGYB8Q6P9KLKX' where id=5; -update noar ti set b0='5X92ZD445CCBCTDZ0WJOGYB8Q6P9KLKX' where id=5; -update noar tt set v0='5IXO279N52YXDZPLJQI4VXFJQKV' where id=5; -update noar ti set v0='5IXO279N52YXDZPLJQI4VXFJQKV' where id=5; -update noar tt set b1='FDIQKTX2G4ZY' where id=5; -update noar ti set b1='FDIQKTX2G4ZY' where id=5; -update noar tt set v0='VUYONOVGKHKRAPSYRLHH' where id=5; -update noar ti set v0='VUYONOVGKHKRAPSYRLHH' where id=5; -update noar tt set b2='RSIFG7AFR' where id=5; -update noar ti set b2='RSIFG7AFR' where id=5; -update noar tt set v0='61S8SGOJLUCS0EOMAWW' where id=6; -update noar ti set v0='61S8SGOJLUCS0EOMAWW' where id=6; -update noar tt set b0='ESG9BM1JTCGRT7091S8OH5' where id=6; -update noar ti set b0='ESG9BM1JTCGRT7091S8OH5' where id=6; -update noar tt set v0='VWJUD7426TAVMH' where id=6; -update noar ti set v0='VWJUD7426TAVMH' where id=6; -update noar tt set b1='HW6JLYDHRCPG2BDVU4Y' where id=6; -update noar ti set b1='HW6JLYDHRCPG2BDVU4Y' where id=6; -update noar tt set v0='264LW3NFCBJ8HCG' where id=6; -update noar ti set v0='264LW3NFCBJ8HCG' where id=6; -update noar tt set b2='57AV' where id=6; -update noar ti set b2='57AV' where id=6; -update noar tt set v0='KLLIBS' where id=7; -update noar ti set v0='KLLIBS' where id=7; -update noar tt set b0='LL7J2W' where id=7; -update noar ti set b0='LL7J2W' where id=7; -update noar tt set v0='B' where id=7; -update noar ti set v0='B' where id=7; -update noar tt set b1='SG0TI8SN9JYJZSSPO' where id=7; -update noar ti set b1='SG0TI8SN9JYJZSSPO' where id=7; -update noar tt set v0='ADFHGID2EXVAJE28ISTDWYEMTK' where id=7; -update noar ti set v0='ADFHGID2EXVAJE28ISTDWYEMTK' where id=7; -update noar tt set b2='1Z5Y' where id=7; -update noar ti set b2='1Z5Y' where id=7; -update noar tt set v0='W' where id=8; -update noar ti set v0='W' where id=8; -update noar tt set b0='T' where id=8; -update noar ti set b0='T' where id=8; -update noar tt set v0='W8BHHA88M80T9' where id=8; -update noar ti set v0='W8BHHA88M80T9' where id=8; -update noar tt set b1='T4XUC7Q9Z7PWBFD61DWMK' where id=8; -update noar ti set b1='T4XUC7Q9Z7PWBFD61DWMK' where id=8; -update noar tt set v0='P5R6S15AJJZ4G' where id=8; -update noar ti set v0='P5R6S15AJJZ4G' where id=8; -update noar tt set b2='4B47OTCK5BX0FQ' where id=8; -update noar ti set b2='4B47OTCK5BX0FQ' where id=8; -update noar tt set v0='R1JA4IW8770G3XN' where id=9; -update noar ti set v0='R1JA4IW8770G3XN' where id=9; -update noar tt set b0='U0E198M5MQYGBDRQFCDJW5KTI0' where id=9; -update noar ti set b0='U0E198M5MQYGBDRQFCDJW5KTI0' where id=9; -update noar tt set v0='KX59YQO5130RP' where id=9; -update noar ti set v0='KX59YQO5130RP' where id=9; -update noar tt set b1='CSBG6JYS' where id=9; -update noar ti set b1='CSBG6JYS' where id=9; -update noar tt set v0='3B7RTVA2VXRR' where id=9; -update noar ti set v0='3B7RTVA2VXRR' where id=9; -update noar tt set b2='6T' where id=9; -update noar ti set b2='6T' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 longblob null, -b1 mediumblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='FT8' where id=1; -update noar ti set v0='FT8' where id=1; -update noar tt set b0='VAENZXPK6O' where id=1; -update noar ti set b0='VAENZXPK6O' where id=1; -update noar tt set v0='POZ88ANNZ2D' where id=1; -update noar ti set v0='POZ88ANNZ2D' where id=1; -update noar tt set b1='NVAZQZOL3FCLFTH7P' where id=1; -update noar ti set b1='NVAZQZOL3FCLFTH7P' where id=1; -update noar tt set v0='Q0PDJQ55ORMBZSGXYHJRGDXL' where id=1; -update noar ti set v0='Q0PDJQ55ORMBZSGXYHJRGDXL' where id=1; -update noar tt set b2='I6W45LDM0593NT' where id=1; -update noar ti set b2='I6W45LDM0593NT' where id=1; -update noar tt set v0='WULPLIRCJQQJYMT' where id=2; -update noar ti set v0='WULPLIRCJQQJYMT' where id=2; -update noar tt set b0='DG' where id=2; -update noar ti set b0='DG' where id=2; -update noar tt set v0='39LEIGUBHIFF2B8IEVDVL5CBVQHWA' where id=2; -update noar ti set v0='39LEIGUBHIFF2B8IEVDVL5CBVQHWA' where id=2; -update noar tt set b1='NWSA44U51BEFY0OAUOFNQH' where id=2; -update noar ti set b1='NWSA44U51BEFY0OAUOFNQH' where id=2; -update noar tt set v0='3OQ02' where id=2; -update noar ti set v0='3OQ02' where id=2; -update noar tt set b2='BKSPK46ZD80J6PJABFHGUY3SSJQ' where id=2; -update noar ti set b2='BKSPK46ZD80J6PJABFHGUY3SSJQ' where id=2; -update noar tt set v0='HVAPLR7RCME647MBTX09MRFI' where id=3; -update noar ti set v0='HVAPLR7RCME647MBTX09MRFI' where id=3; -update noar tt set b0='82F' where id=3; -update noar ti set b0='82F' where id=3; -update noar tt set v0='0FSAXVVNPC95SQPC5V9VBCKLVLLOCX' where id=3; -update noar ti set v0='0FSAXVVNPC95SQPC5V9VBCKLVLLOCX' where id=3; -update noar tt set b1='I0F2EVAPI8LHOL' where id=3; -update noar ti set b1='I0F2EVAPI8LHOL' where id=3; -update noar tt set v0='UDK' where id=3; -update noar ti set v0='UDK' where id=3; -update noar tt set b2='RE4YV8L5Q6QKF0S' where id=3; -update noar ti set b2='RE4YV8L5Q6QKF0S' where id=3; -update noar tt set v0='J' where id=4; -update noar ti set v0='J' where id=4; -update noar tt set b0='U9GTNHFP8D9HPJHVVJCJ57PBA' where id=4; -update noar ti set b0='U9GTNHFP8D9HPJHVVJCJ57PBA' where id=4; -update noar tt set v0='5F7K1UKGLI' where id=4; -update noar ti set v0='5F7K1UKGLI' where id=4; -update noar tt set b1='WQG6RZ946ZB0' where id=4; -update noar ti set b1='WQG6RZ946ZB0' where id=4; -update noar tt set v0='QMSUCJ7LZOTRCW75AYV2' where id=4; -update noar ti set v0='QMSUCJ7LZOTRCW75AYV2' where id=4; -update noar tt set b2='Q0DJAQ608RYJF05Q2TLV0Q6YW7BFU' where id=4; -update noar ti set b2='Q0DJAQ608RYJF05Q2TLV0Q6YW7BFU' where id=4; -update noar tt set v0='G' where id=5; -update noar ti set v0='G' where id=5; -update noar tt set b0='5KU994BHZ5H0G1BS42HR' where id=5; -update noar ti set b0='5KU994BHZ5H0G1BS42HR' where id=5; -update noar tt set v0='4T920MU0HN4O5O8NFQAZOMN2Y' where id=5; -update noar ti set v0='4T920MU0HN4O5O8NFQAZOMN2Y' where id=5; -update noar tt set b1='Z2OURVX9' where id=5; -update noar ti set b1='Z2OURVX9' where id=5; -update noar tt set v0='2V6J2G0N1N6ZQV45TT04PYJDRTV7UEC' where id=5; -update noar ti set v0='2V6J2G0N1N6ZQV45TT04PYJDRTV7UEC' where id=5; -update noar tt set b2='CKO74TCU' where id=5; -update noar ti set b2='CKO74TCU' where id=5; -update noar tt set v0='6IZ0L3J14L866E7GFUSJWFLSJQTROI' where id=6; -update noar ti set v0='6IZ0L3J14L866E7GFUSJWFLSJQTROI' where id=6; -update noar tt set b0='S7CCMHX5X' where id=6; -update noar ti set b0='S7CCMHX5X' where id=6; -update noar tt set v0='T8X0JS3W9OILAZ4G7V8WJEF1QXNZJX' where id=6; -update noar ti set v0='T8X0JS3W9OILAZ4G7V8WJEF1QXNZJX' where id=6; -update noar tt set b1='NBKKR6' where id=6; -update noar ti set b1='NBKKR6' where id=6; -update noar tt set v0='GJ0R78ES7G0ZEZ44D4' where id=6; -update noar ti set v0='GJ0R78ES7G0ZEZ44D4' where id=6; -update noar tt set b2='FVUK89WOO7T3N3C5GK7AK4V133' where id=6; -update noar ti set b2='FVUK89WOO7T3N3C5GK7AK4V133' where id=6; -update noar tt set v0='1RSH3XPQP0TYTVJ2N92YUOTEIK2QOB' where id=7; -update noar ti set v0='1RSH3XPQP0TYTVJ2N92YUOTEIK2QOB' where id=7; -update noar tt set b0='R11ZT3B2' where id=7; -update noar ti set b0='R11ZT3B2' where id=7; -update noar tt set v0='VCOBT9ECGMQNNUWS6S' where id=7; -update noar ti set v0='VCOBT9ECGMQNNUWS6S' where id=7; -update noar tt set b1='9NXOAVIAI0U7OT' where id=7; -update noar ti set b1='9NXOAVIAI0U7OT' where id=7; -update noar tt set v0='DTGTWZTK1GMNYH4EB6X8SMSWP28EFUKG' where id=7; -update noar ti set v0='DTGTWZTK1GMNYH4EB6X8SMSWP28EFUKG' where id=7; -update noar tt set b2='U' where id=7; -update noar ti set b2='U' where id=7; -update noar tt set v0='5XZ6FWRJ5P43EMLMD6' where id=8; -update noar ti set v0='5XZ6FWRJ5P43EMLMD6' where id=8; -update noar tt set b0='X' where id=8; -update noar ti set b0='X' where id=8; -update noar tt set v0='DMHVL7SHYJADINV' where id=8; -update noar ti set v0='DMHVL7SHYJADINV' where id=8; -update noar tt set b1='LGBH1UZBRYWYZWV5U8YGO' where id=8; -update noar ti set b1='LGBH1UZBRYWYZWV5U8YGO' where id=8; -update noar tt set v0='6XPNWI4MTS31HCW1FQWHI1S05YSD' where id=8; -update noar ti set v0='6XPNWI4MTS31HCW1FQWHI1S05YSD' where id=8; -update noar tt set b2='4O6W1246AHR3ZJSYSTE25YML3CS7W635' where id=8; -update noar ti set b2='4O6W1246AHR3ZJSYSTE25YML3CS7W635' where id=8; -update noar tt set v0='JCL6BMQ96LMYV5' where id=9; -update noar ti set v0='JCL6BMQ96LMYV5' where id=9; -update noar tt set b0='H0G31IKJRM7ZAWQEIXD' where id=9; -update noar ti set b0='H0G31IKJRM7ZAWQEIXD' where id=9; -update noar tt set v0='EF89U9AM4NSCDYN' where id=9; -update noar ti set v0='EF89U9AM4NSCDYN' where id=9; -update noar tt set b1='97K4W4SVM86MJ60X' where id=9; -update noar ti set b1='97K4W4SVM86MJ60X' where id=9; -update noar tt set v0='XVKM0Q9' where id=9; -update noar ti set v0='XVKM0Q9' where id=9; -update noar tt set b2='FLYYHT23YJ4S236I5V5RNQXR' where id=9; -update noar ti set b2='FLYYHT23YJ4S236I5V5RNQXR' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 longblob null, -b1 mediumblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='DPBVHLPKWMWULUJG' where id=1; -update noar ti set v0='DPBVHLPKWMWULUJG' where id=1; -update noar tt set b0='JLRR6KMZKYE14QLM3C' where id=1; -update noar ti set b0='JLRR6KMZKYE14QLM3C' where id=1; -update noar tt set v0='J9ZHH2M3RDH7RPATB0BQQSS1D10L' where id=1; -update noar ti set v0='J9ZHH2M3RDH7RPATB0BQQSS1D10L' where id=1; -update noar tt set b1='BE643WDQVTNJ05CZTK4' where id=1; -update noar ti set b1='BE643WDQVTNJ05CZTK4' where id=1; -update noar tt set v0='OGR24I' where id=1; -update noar ti set v0='OGR24I' where id=1; -update noar tt set b2='ASHKPG' where id=1; -update noar ti set b2='ASHKPG' where id=1; -update noar tt set v0='PY' where id=2; -update noar ti set v0='PY' where id=2; -update noar tt set b0='VZO6ZU3COBPXOLQG2VJIEG' where id=2; -update noar ti set b0='VZO6ZU3COBPXOLQG2VJIEG' where id=2; -update noar tt set v0='AF' where id=2; -update noar ti set v0='AF' where id=2; -update noar tt set b1='YP' where id=2; -update noar ti set b1='YP' where id=2; -update noar tt set v0='S1' where id=2; -update noar ti set v0='S1' where id=2; -update noar tt set b2='KRNT33UF877E8D66TU02NNRXY' where id=2; -update noar ti set b2='KRNT33UF877E8D66TU02NNRXY' where id=2; -update noar tt set v0='VSJGHLTY8' where id=3; -update noar ti set v0='VSJGHLTY8' where id=3; -update noar tt set b0='T07R29PLQL5MMX' where id=3; -update noar ti set b0='T07R29PLQL5MMX' where id=3; -update noar tt set v0='MEMFPA6F3U56FIAO' where id=3; -update noar ti set v0='MEMFPA6F3U56FIAO' where id=3; -update noar tt set b1='PER5TPZHMPF2UYTHFQ5AR0JX7HNBXKW4' where id=3; -update noar ti set b1='PER5TPZHMPF2UYTHFQ5AR0JX7HNBXKW4' where id=3; -update noar tt set v0='5R' where id=3; -update noar ti set v0='5R' where id=3; -update noar tt set b2='ZZ05G9JJ5M3HOGOEVJZOYW2' where id=3; -update noar ti set b2='ZZ05G9JJ5M3HOGOEVJZOYW2' where id=3; -update noar tt set v0='NH0XB' where id=4; -update noar ti set v0='NH0XB' where id=4; -update noar tt set b0='YZX9AKNHMTFL0JVYL3V4R' where id=4; -update noar ti set b0='YZX9AKNHMTFL0JVYL3V4R' where id=4; -update noar tt set v0='9P9RKH2Y85FEVODV10D727F' where id=4; -update noar ti set v0='9P9RKH2Y85FEVODV10D727F' where id=4; -update noar tt set b1='ZJTGIRV9OTBWW8A430TNJM9XOUF' where id=4; -update noar ti set b1='ZJTGIRV9OTBWW8A430TNJM9XOUF' where id=4; -update noar tt set v0='70U3RQ49YBC1Z' where id=4; -update noar ti set v0='70U3RQ49YBC1Z' where id=4; -update noar tt set b2='CQ9FB0VF6K1AIAUIX6YKFR9' where id=4; -update noar ti set b2='CQ9FB0VF6K1AIAUIX6YKFR9' where id=4; -update noar tt set v0='VJIZQR' where id=5; -update noar ti set v0='VJIZQR' where id=5; -update noar tt set b0='29TMBR5JL0OY77U6NY2K1IJ6SGU' where id=5; -update noar ti set b0='29TMBR5JL0OY77U6NY2K1IJ6SGU' where id=5; -update noar tt set v0='47F8XGW8YJD0EQC1KFG4NFZ9IECNWJ' where id=5; -update noar ti set v0='47F8XGW8YJD0EQC1KFG4NFZ9IECNWJ' where id=5; -update noar tt set b1='8WW3AAJD04B3BXCG' where id=5; -update noar ti set b1='8WW3AAJD04B3BXCG' where id=5; -update noar tt set v0='DZO5UHVKBCY2YX' where id=5; -update noar ti set v0='DZO5UHVKBCY2YX' where id=5; -update noar tt set b2='JPVKJM4JQ36621PSV2PLSYTL9' where id=5; -update noar ti set b2='JPVKJM4JQ36621PSV2PLSYTL9' where id=5; -update noar tt set v0='IWU4TOJT3HJYXSX5TE3DPOM401E' where id=6; -update noar ti set v0='IWU4TOJT3HJYXSX5TE3DPOM401E' where id=6; -update noar tt set b0='V8AYYCP2B8D658V5BQY2XIDI6' where id=6; -update noar ti set b0='V8AYYCP2B8D658V5BQY2XIDI6' where id=6; -update noar tt set v0='KZ2' where id=6; -update noar ti set v0='KZ2' where id=6; -update noar tt set b1='Q38Q533JRLU12BMG73V6NP' where id=6; -update noar ti set b1='Q38Q533JRLU12BMG73V6NP' where id=6; -update noar tt set v0='MIP3EAAH4' where id=6; -update noar ti set v0='MIP3EAAH4' where id=6; -update noar tt set b2='3RO9JWRVN140L' where id=6; -update noar ti set b2='3RO9JWRVN140L' where id=6; -update noar tt set v0='M06FWZ7NCZSFI' where id=7; -update noar ti set v0='M06FWZ7NCZSFI' where id=7; -update noar tt set b0='I1' where id=7; -update noar ti set b0='I1' where id=7; -update noar tt set v0='KKD8J8QG' where id=7; -update noar ti set v0='KKD8J8QG' where id=7; -update noar tt set b1='BRI0QXX5BJYO6LT9D0TFX2VZDPZ4QD' where id=7; -update noar ti set b1='BRI0QXX5BJYO6LT9D0TFX2VZDPZ4QD' where id=7; -update noar tt set v0='GI4ULG5OX0UMGQ89W7ZTFPRLWGVT3' where id=7; -update noar ti set v0='GI4ULG5OX0UMGQ89W7ZTFPRLWGVT3' where id=7; -update noar tt set b2='6MSCEY7O2KVI8RAU09QQVG7HWFT' where id=7; -update noar ti set b2='6MSCEY7O2KVI8RAU09QQVG7HWFT' where id=7; -update noar tt set v0='UFN199EXA4BGPML' where id=8; -update noar ti set v0='UFN199EXA4BGPML' where id=8; -update noar tt set b0='DGI7MQXFOAZJARDUC2EFT' where id=8; -update noar ti set b0='DGI7MQXFOAZJARDUC2EFT' where id=8; -update noar tt set v0='BGU' where id=8; -update noar ti set v0='BGU' where id=8; -update noar tt set b1='KKW8BEMYDAQBP1JCN' where id=8; -update noar ti set b1='KKW8BEMYDAQBP1JCN' where id=8; -update noar tt set v0='YNG3VJZUJCA' where id=8; -update noar ti set v0='YNG3VJZUJCA' where id=8; -update noar tt set b2='L' where id=8; -update noar ti set b2='L' where id=8; -update noar tt set v0='MINRP' where id=9; -update noar ti set v0='MINRP' where id=9; -update noar tt set b0='506LVCZ' where id=9; -update noar ti set b0='506LVCZ' where id=9; -update noar tt set v0='MMXHLKXDM' where id=9; -update noar ti set v0='MMXHLKXDM' where id=9; -update noar tt set b1='QDHBE755V3W9A73TVKE' where id=9; -update noar ti set b1='QDHBE755V3W9A73TVKE' where id=9; -update noar tt set v0='VWVR8L3ZF1JMADSDUF2' where id=9; -update noar ti set v0='VWVR8L3ZF1JMADSDUF2' where id=9; -update noar tt set b2='6AICB3TQLAHVJ' where id=9; -update noar ti set b2='6AICB3TQLAHVJ' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 longblob not null, -b1 mediumblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='0AL83Q2S5J81R' where id=1; -update noar ti set v0='0AL83Q2S5J81R' where id=1; -update noar tt set b0='TIFCWHGSX' where id=1; -update noar ti set b0='TIFCWHGSX' where id=1; -update noar tt set v0='X3' where id=1; -update noar ti set v0='X3' where id=1; -update noar tt set b1='LMWQ5YYOXY1JG6D4JUPHKI9JAEXPFGK' where id=1; -update noar ti set b1='LMWQ5YYOXY1JG6D4JUPHKI9JAEXPFGK' where id=1; -update noar tt set v0='UWR' where id=1; -update noar ti set v0='UWR' where id=1; -update noar tt set b2='S2F78TIABEB8F4F92' where id=1; -update noar ti set b2='S2F78TIABEB8F4F92' where id=1; -update noar tt set v0='2KDUHNXJRUY2' where id=2; -update noar ti set v0='2KDUHNXJRUY2' where id=2; -update noar tt set b0='GI00LGX32WB' where id=2; -update noar ti set b0='GI00LGX32WB' where id=2; -update noar tt set v0='8IJPQB5QY62V30QNP' where id=2; -update noar ti set v0='8IJPQB5QY62V30QNP' where id=2; -update noar tt set b1='YBPBGZQRFF1R0VLQTN6FO0' where id=2; -update noar ti set b1='YBPBGZQRFF1R0VLQTN6FO0' where id=2; -update noar tt set v0='GT2NMHWCMJA1SPK1R2OBX9' where id=2; -update noar ti set v0='GT2NMHWCMJA1SPK1R2OBX9' where id=2; -update noar tt set b2='CBUJW6RBNX8BWYCCE75ZSDP7TC8NFKB' where id=2; -update noar ti set b2='CBUJW6RBNX8BWYCCE75ZSDP7TC8NFKB' where id=2; -update noar tt set v0='6VQ3MVYTKB1POM8ELRA983LI' where id=3; -update noar ti set v0='6VQ3MVYTKB1POM8ELRA983LI' where id=3; -update noar tt set b0='ERI1I5Z8ZEF2BPD8VDETD9NN28BX' where id=3; -update noar ti set b0='ERI1I5Z8ZEF2BPD8VDETD9NN28BX' where id=3; -update noar tt set v0='D2CTCQV' where id=3; -update noar ti set v0='D2CTCQV' where id=3; -update noar tt set b1='0YVH37BRDL74OFXJL4CGQYYJI6I2' where id=3; -update noar ti set b1='0YVH37BRDL74OFXJL4CGQYYJI6I2' where id=3; -update noar tt set v0='UFPM3BZ1L39KCUV4EMEU' where id=3; -update noar ti set v0='UFPM3BZ1L39KCUV4EMEU' where id=3; -update noar tt set b2='WRCP9DBQKMGQZSE2PV5A5UN19UHXL' where id=3; -update noar ti set b2='WRCP9DBQKMGQZSE2PV5A5UN19UHXL' where id=3; -update noar tt set v0='YW9Y2' where id=4; -update noar ti set v0='YW9Y2' where id=4; -update noar tt set b0='S66AEROOH4IV9' where id=4; -update noar ti set b0='S66AEROOH4IV9' where id=4; -update noar tt set v0='DXEXU3A3GBUBLBKLQKUPFLSOY8AKBKVV' where id=4; -update noar ti set v0='DXEXU3A3GBUBLBKLQKUPFLSOY8AKBKVV' where id=4; -update noar tt set b1='366U66S2T9JNP' where id=4; -update noar ti set b1='366U66S2T9JNP' where id=4; -update noar tt set v0='HCR64N1CT12T8XUPGETMYTPOPLB' where id=4; -update noar ti set v0='HCR64N1CT12T8XUPGETMYTPOPLB' where id=4; -update noar tt set b2='O5BJD1RXAE7YC03T5' where id=4; -update noar ti set b2='O5BJD1RXAE7YC03T5' where id=4; -update noar tt set v0='Q4XSM6EDTJC' where id=5; -update noar ti set v0='Q4XSM6EDTJC' where id=5; -update noar tt set b0='IT72' where id=5; -update noar ti set b0='IT72' where id=5; -update noar tt set v0='N7AS66FIASORGQW3DSYZF4M9ZZVO4' where id=5; -update noar ti set v0='N7AS66FIASORGQW3DSYZF4M9ZZVO4' where id=5; -update noar tt set b1='SR0RDFEJYDVJ36X047H5ML' where id=5; -update noar ti set b1='SR0RDFEJYDVJ36X047H5ML' where id=5; -update noar tt set v0='38G7' where id=5; -update noar ti set v0='38G7' where id=5; -update noar tt set b2='F8IC8EKXZVVGG3WBDXP' where id=5; -update noar ti set b2='F8IC8EKXZVVGG3WBDXP' where id=5; -update noar tt set v0='CTK5UK51O' where id=6; -update noar ti set v0='CTK5UK51O' where id=6; -update noar tt set b0='L1P6AYNNZ8FJ' where id=6; -update noar ti set b0='L1P6AYNNZ8FJ' where id=6; -update noar tt set v0='8P1C8AYNRHQRYCGV06CA9GH64X53F' where id=6; -update noar ti set v0='8P1C8AYNRHQRYCGV06CA9GH64X53F' where id=6; -update noar tt set b1='FPHV49XBPAUG' where id=6; -update noar ti set b1='FPHV49XBPAUG' where id=6; -update noar tt set v0='EV6MQJQCP' where id=6; -update noar ti set v0='EV6MQJQCP' where id=6; -update noar tt set b2='TCD7BHFAEX3V8ULH0I' where id=6; -update noar ti set b2='TCD7BHFAEX3V8ULH0I' where id=6; -update noar tt set v0='8SBDXZHEIZXXZWRODV' where id=7; -update noar ti set v0='8SBDXZHEIZXXZWRODV' where id=7; -update noar tt set b0='DNEDD7U3J8E2' where id=7; -update noar ti set b0='DNEDD7U3J8E2' where id=7; -update noar tt set v0='QLM0PKRSHEWD97V4W0980N0' where id=7; -update noar ti set v0='QLM0PKRSHEWD97V4W0980N0' where id=7; -update noar tt set b1='M12ABZP9XTESDPLMP4C3EJH6' where id=7; -update noar ti set b1='M12ABZP9XTESDPLMP4C3EJH6' where id=7; -update noar tt set v0='TJG7FYG2' where id=7; -update noar ti set v0='TJG7FYG2' where id=7; -update noar tt set b2='XJ77US2RX27X13UP2XNVQ9' where id=7; -update noar ti set b2='XJ77US2RX27X13UP2XNVQ9' where id=7; -update noar tt set v0='09WEKFIFA4A89NT5G6CS5BMNXYDP61B' where id=8; -update noar ti set v0='09WEKFIFA4A89NT5G6CS5BMNXYDP61B' where id=8; -update noar tt set b0='SFSJ7OK0IDVR929EN6ARE1OZ66GZRR8M' where id=8; -update noar ti set b0='SFSJ7OK0IDVR929EN6ARE1OZ66GZRR8M' where id=8; -update noar tt set v0='TP3VBDMNWLHIB4L9JRGDZ4DIDF9S' where id=8; -update noar ti set v0='TP3VBDMNWLHIB4L9JRGDZ4DIDF9S' where id=8; -update noar tt set b1='B584ISQ609ZZT0XOESRNZY985J' where id=8; -update noar ti set b1='B584ISQ609ZZT0XOESRNZY985J' where id=8; -update noar tt set v0='2A7JLBC66U7M2XKQH' where id=8; -update noar ti set v0='2A7JLBC66U7M2XKQH' where id=8; -update noar tt set b2='68ZZQ' where id=8; -update noar ti set b2='68ZZQ' where id=8; -update noar tt set v0='ZG2AUMEYP84C10E84JLRHMI7YCOZO7FK' where id=9; -update noar ti set v0='ZG2AUMEYP84C10E84JLRHMI7YCOZO7FK' where id=9; -update noar tt set b0='PUJFIX793HCU' where id=9; -update noar ti set b0='PUJFIX793HCU' where id=9; -update noar tt set v0='F621WRGT4TP49E9YKVFCRG85UMJ0F' where id=9; -update noar ti set v0='F621WRGT4TP49E9YKVFCRG85UMJ0F' where id=9; -update noar tt set b1='V516HJNAMD0I42VD0AUN0H7VSDPLWZU6' where id=9; -update noar ti set b1='V516HJNAMD0I42VD0AUN0H7VSDPLWZU6' where id=9; -update noar tt set v0='IQD' where id=9; -update noar ti set v0='IQD' where id=9; -update noar tt set b2='8NUK3TXA846PXVBDF8Q9I5NWEEJ' where id=9; -update noar ti set b2='8NUK3TXA846PXVBDF8Q9I5NWEEJ' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 longblob not null, -b1 mediumblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='FME77XFX8HT' where id=1; -update noar ti set v0='FME77XFX8HT' where id=1; -update noar tt set b0='7YDHKFEIYB5CB24KV9PXDIRU9WCDZ9CQ' where id=1; -update noar ti set b0='7YDHKFEIYB5CB24KV9PXDIRU9WCDZ9CQ' where id=1; -update noar tt set v0='M3LZN8GQH98FM' where id=1; -update noar ti set v0='M3LZN8GQH98FM' where id=1; -update noar tt set b1='4P9VBC31GLFT' where id=1; -update noar ti set b1='4P9VBC31GLFT' where id=1; -update noar tt set v0='DEUK' where id=1; -update noar ti set v0='DEUK' where id=1; -update noar tt set b2='FNLX15HDQK' where id=1; -update noar ti set b2='FNLX15HDQK' where id=1; -update noar tt set v0='30A8KSEINAA9K' where id=2; -update noar ti set v0='30A8KSEINAA9K' where id=2; -update noar tt set b0='19Y4BUYPQORPRY36' where id=2; -update noar ti set b0='19Y4BUYPQORPRY36' where id=2; -update noar tt set v0='ANLTWPN5J4YHSA26MRYUCCTZ90DV' where id=2; -update noar ti set v0='ANLTWPN5J4YHSA26MRYUCCTZ90DV' where id=2; -update noar tt set b1='N87HND4V6Q4' where id=2; -update noar ti set b1='N87HND4V6Q4' where id=2; -update noar tt set v0='R7PYFPMJJ5G66E4Z2' where id=2; -update noar ti set v0='R7PYFPMJJ5G66E4Z2' where id=2; -update noar tt set b2='EGNRYF5AEZ0YDD' where id=2; -update noar ti set b2='EGNRYF5AEZ0YDD' where id=2; -update noar tt set v0='TVTV64N350LF5MPMIXNVEJ75' where id=3; -update noar ti set v0='TVTV64N350LF5MPMIXNVEJ75' where id=3; -update noar tt set b0='H4CBMCNTU' where id=3; -update noar ti set b0='H4CBMCNTU' where id=3; -update noar tt set v0='NN' where id=3; -update noar ti set v0='NN' where id=3; -update noar tt set b1='0GX2XQL4SHH' where id=3; -update noar ti set b1='0GX2XQL4SHH' where id=3; -update noar tt set v0='WSZR2498E3MCXLGVLAHME5QC0T1' where id=3; -update noar ti set v0='WSZR2498E3MCXLGVLAHME5QC0T1' where id=3; -update noar tt set b2='0GSN12RLPSONISN1U' where id=3; -update noar ti set b2='0GSN12RLPSONISN1U' where id=3; -update noar tt set v0='SNNDVAJT2CMC009OSE' where id=4; -update noar ti set v0='SNNDVAJT2CMC009OSE' where id=4; -update noar tt set b0='QZIQNF6XMO9B7GBHDC39Y77' where id=4; -update noar ti set b0='QZIQNF6XMO9B7GBHDC39Y77' where id=4; -update noar tt set v0='7VFGU17XSOYWXOKODDD8C3KXAF1' where id=4; -update noar ti set v0='7VFGU17XSOYWXOKODDD8C3KXAF1' where id=4; -update noar tt set b1='GTK3HFPND' where id=4; -update noar ti set b1='GTK3HFPND' where id=4; -update noar tt set v0='C8L65XAHG' where id=4; -update noar ti set v0='C8L65XAHG' where id=4; -update noar tt set b2='LJS387EZC1YMQV1FYMYA4XUK0HWGAAKR' where id=4; -update noar ti set b2='LJS387EZC1YMQV1FYMYA4XUK0HWGAAKR' where id=4; -update noar tt set v0='J' where id=5; -update noar ti set v0='J' where id=5; -update noar tt set b0='PEEAU5N47WR' where id=5; -update noar ti set b0='PEEAU5N47WR' where id=5; -update noar tt set v0='1Z738TO6E7' where id=5; -update noar ti set v0='1Z738TO6E7' where id=5; -update noar tt set b1='S74DYHAUSA97NWRXM5T2JLANLJT7GMS' where id=5; -update noar ti set b1='S74DYHAUSA97NWRXM5T2JLANLJT7GMS' where id=5; -update noar tt set v0='SEBBBYRQKOJ49O5WH' where id=5; -update noar ti set v0='SEBBBYRQKOJ49O5WH' where id=5; -update noar tt set b2='2OTVKSVF322JN' where id=5; -update noar ti set b2='2OTVKSVF322JN' where id=5; -update noar tt set v0='91K2WCPVHJEBNOOTMII85P149J5RU' where id=6; -update noar ti set v0='91K2WCPVHJEBNOOTMII85P149J5RU' where id=6; -update noar tt set b0='K58DLLPGH2X9I7USC15VVC' where id=6; -update noar ti set b0='K58DLLPGH2X9I7USC15VVC' where id=6; -update noar tt set v0='HU6ZB1HYH73YHL' where id=6; -update noar ti set v0='HU6ZB1HYH73YHL' where id=6; -update noar tt set b1='S5K5X0G3DA99IPS5HDWUHO5CUBFDZV' where id=6; -update noar ti set b1='S5K5X0G3DA99IPS5HDWUHO5CUBFDZV' where id=6; -update noar tt set v0='MV3OLMODIPFIVUSJVBQG' where id=6; -update noar ti set v0='MV3OLMODIPFIVUSJVBQG' where id=6; -update noar tt set b2='EZQ9GRFZUJP67GJ1SS8VXQGQO64' where id=6; -update noar ti set b2='EZQ9GRFZUJP67GJ1SS8VXQGQO64' where id=6; -update noar tt set v0='K3KMHHZEQS9HN1' where id=7; -update noar ti set v0='K3KMHHZEQS9HN1' where id=7; -update noar tt set b0='K251SWEDZDSL79' where id=7; -update noar ti set b0='K251SWEDZDSL79' where id=7; -update noar tt set v0='XO7M' where id=7; -update noar ti set v0='XO7M' where id=7; -update noar tt set b1='UMBDSPYMBHVHB3EI3' where id=7; -update noar ti set b1='UMBDSPYMBHVHB3EI3' where id=7; -update noar tt set v0='ZPWUCVI7VIT' where id=7; -update noar ti set v0='ZPWUCVI7VIT' where id=7; -update noar tt set b2='RKEU' where id=7; -update noar ti set b2='RKEU' where id=7; -update noar tt set v0='GJ1GV1DF' where id=8; -update noar ti set v0='GJ1GV1DF' where id=8; -update noar tt set b0='G8TT460BFZ6C3OZ0QAZH7PIS5J4V' where id=8; -update noar ti set b0='G8TT460BFZ6C3OZ0QAZH7PIS5J4V' where id=8; -update noar tt set v0='41MJM605CH4EWX373399TOA272CP' where id=8; -update noar ti set v0='41MJM605CH4EWX373399TOA272CP' where id=8; -update noar tt set b1='1RHPS5FOUBYVPAEC79D' where id=8; -update noar ti set b1='1RHPS5FOUBYVPAEC79D' where id=8; -update noar tt set v0='TGJZQ8CTPAER55BHD2S' where id=8; -update noar ti set v0='TGJZQ8CTPAER55BHD2S' where id=8; -update noar tt set b2='MFZA7IQPA4KGWU972E' where id=8; -update noar ti set b2='MFZA7IQPA4KGWU972E' where id=8; -update noar tt set v0='JTO1Y630JQHY2J9ATLR8LR8FOOC4LN9' where id=9; -update noar ti set v0='JTO1Y630JQHY2J9ATLR8LR8FOOC4LN9' where id=9; -update noar tt set b0='UCBC95REM4' where id=9; -update noar ti set b0='UCBC95REM4' where id=9; -update noar tt set v0='H8VW26' where id=9; -update noar ti set v0='H8VW26' where id=9; -update noar tt set b1='IW5X02RZ9NWCL3KLIQ0T9H' where id=9; -update noar ti set b1='IW5X02RZ9NWCL3KLIQ0T9H' where id=9; -update noar tt set v0='9V1MX0SZ00QXS' where id=9; -update noar ti set v0='9V1MX0SZ00QXS' where id=9; -update noar tt set b2='D9E15RPWMKOPTMQC' where id=9; -update noar ti set b2='D9E15RPWMKOPTMQC' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 longblob null, -b1 mediumblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='SJBTJFBY' where id=1; -update noar ti set v0='SJBTJFBY' where id=1; -update noar tt set b0='2P0BD7V89' where id=1; -update noar ti set b0='2P0BD7V89' where id=1; -update noar tt set v0='6DK7PVS' where id=1; -update noar ti set v0='6DK7PVS' where id=1; -update noar tt set b1='3EDI' where id=1; -update noar ti set b1='3EDI' where id=1; -update noar tt set v0='8RF' where id=1; -update noar ti set v0='8RF' where id=1; -update noar tt set b2='WPD24ZNHA55SRT93AD066DBNW' where id=1; -update noar ti set b2='WPD24ZNHA55SRT93AD066DBNW' where id=1; -update noar tt set v0='HJ798U3XK' where id=2; -update noar ti set v0='HJ798U3XK' where id=2; -update noar tt set b0='YHHQZ' where id=2; -update noar ti set b0='YHHQZ' where id=2; -update noar tt set v0='PCKJJU7F7Z9C5AI7P9EG6I8' where id=2; -update noar ti set v0='PCKJJU7F7Z9C5AI7P9EG6I8' where id=2; -update noar tt set b1='RF0M9S27M2UCOM3NXZ907QMU' where id=2; -update noar ti set b1='RF0M9S27M2UCOM3NXZ907QMU' where id=2; -update noar tt set v0='AW4SWOMZ1FTBFKI4HB1MWQ' where id=2; -update noar ti set v0='AW4SWOMZ1FTBFKI4HB1MWQ' where id=2; -update noar tt set b2='2H2S7N43OGN2FB1S7RMNQQDE4Q0JU' where id=2; -update noar ti set b2='2H2S7N43OGN2FB1S7RMNQQDE4Q0JU' where id=2; -update noar tt set v0='X3JSOWS7KOB9NV3V' where id=3; -update noar ti set v0='X3JSOWS7KOB9NV3V' where id=3; -update noar tt set b0='NO' where id=3; -update noar ti set b0='NO' where id=3; -update noar tt set v0='KXJZU0Z0K2RMGU9' where id=3; -update noar ti set v0='KXJZU0Z0K2RMGU9' where id=3; -update noar tt set b1='XS8ORTD7FLQG1E0' where id=3; -update noar ti set b1='XS8ORTD7FLQG1E0' where id=3; -update noar tt set v0='MUELL5VZ941O5BCGP2BO92JJFO4C3XG' where id=3; -update noar ti set v0='MUELL5VZ941O5BCGP2BO92JJFO4C3XG' where id=3; -update noar tt set b2='LPUO39GEGZ' where id=3; -update noar ti set b2='LPUO39GEGZ' where id=3; -update noar tt set v0='GEXJ5RTDCE' where id=4; -update noar ti set v0='GEXJ5RTDCE' where id=4; -update noar tt set b0='JNL8JLYKPKX31CPHHHCPN9P556XTDX3' where id=4; -update noar ti set b0='JNL8JLYKPKX31CPHHHCPN9P556XTDX3' where id=4; -update noar tt set v0='LP' where id=4; -update noar ti set v0='LP' where id=4; -update noar tt set b1='UZWKA6A2AE5D8FMP0BKKT7AL4VO36GM' where id=4; -update noar ti set b1='UZWKA6A2AE5D8FMP0BKKT7AL4VO36GM' where id=4; -update noar tt set v0='SF574' where id=4; -update noar ti set v0='SF574' where id=4; -update noar tt set b2='8PWGL3C' where id=4; -update noar ti set b2='8PWGL3C' where id=4; -update noar tt set v0='FW0TYH58E8UC1JD26J5LI' where id=5; -update noar ti set v0='FW0TYH58E8UC1JD26J5LI' where id=5; -update noar tt set b0='056' where id=5; -update noar ti set b0='056' where id=5; -update noar tt set v0='038PYFJHGH6MID0S77HP8RJQAH' where id=5; -update noar ti set v0='038PYFJHGH6MID0S77HP8RJQAH' where id=5; -update noar tt set b1='TRJ' where id=5; -update noar ti set b1='TRJ' where id=5; -update noar tt set v0='E77DGQIBFSDCLX0CFMR3CXTIM' where id=5; -update noar ti set v0='E77DGQIBFSDCLX0CFMR3CXTIM' where id=5; -update noar tt set b2='ADG2SMIWRR' where id=5; -update noar ti set b2='ADG2SMIWRR' where id=5; -update noar tt set v0='3WD8W4VMJ0235ND4M1843RZY492S' where id=6; -update noar ti set v0='3WD8W4VMJ0235ND4M1843RZY492S' where id=6; -update noar tt set b0='8ETYMSQO' where id=6; -update noar ti set b0='8ETYMSQO' where id=6; -update noar tt set v0='XDX17PMRJT4GT' where id=6; -update noar ti set v0='XDX17PMRJT4GT' where id=6; -update noar tt set b1='O3K9ZTZ9PO867' where id=6; -update noar ti set b1='O3K9ZTZ9PO867' where id=6; -update noar tt set v0='0' where id=6; -update noar ti set v0='0' where id=6; -update noar tt set b2='OAQJQ0' where id=6; -update noar ti set b2='OAQJQ0' where id=6; -update noar tt set v0='D1RD' where id=7; -update noar ti set v0='D1RD' where id=7; -update noar tt set b0='7JRBYJQ2ILXUQDEGSS2YH' where id=7; -update noar ti set b0='7JRBYJQ2ILXUQDEGSS2YH' where id=7; -update noar tt set v0='Y6PJ' where id=7; -update noar ti set v0='Y6PJ' where id=7; -update noar tt set b1='99SOGZBAHF' where id=7; -update noar ti set b1='99SOGZBAHF' where id=7; -update noar tt set v0='OG38T' where id=7; -update noar ti set v0='OG38T' where id=7; -update noar tt set b2='BR5SXFGS7SY7AODMDVGBBF02GM8LS4' where id=7; -update noar ti set b2='BR5SXFGS7SY7AODMDVGBBF02GM8LS4' where id=7; -update noar tt set v0='MQXX0R6UY1O' where id=8; -update noar ti set v0='MQXX0R6UY1O' where id=8; -update noar tt set b0='SCXVZJB2GXCGMMATGT0J6DG' where id=8; -update noar ti set b0='SCXVZJB2GXCGMMATGT0J6DG' where id=8; -update noar tt set v0='F96K5MZ6OYLK' where id=8; -update noar ti set v0='F96K5MZ6OYLK' where id=8; -update noar tt set b1='XXP79A9TH5E1NL1X3WZ' where id=8; -update noar ti set b1='XXP79A9TH5E1NL1X3WZ' where id=8; -update noar tt set v0='A' where id=8; -update noar ti set v0='A' where id=8; -update noar tt set b2='OCT0W2941UU0XWFMG29' where id=8; -update noar ti set b2='OCT0W2941UU0XWFMG29' where id=8; -update noar tt set v0='EQHZFJ2WQ92YCH8P01UEOTBF' where id=9; -update noar ti set v0='EQHZFJ2WQ92YCH8P01UEOTBF' where id=9; -update noar tt set b0='6' where id=9; -update noar ti set b0='6' where id=9; -update noar tt set v0='OF3UCX5SKADQ4KIF' where id=9; -update noar ti set v0='OF3UCX5SKADQ4KIF' where id=9; -update noar tt set b1='BYTQG9EQJVQTJIIC8' where id=9; -update noar ti set b1='BYTQG9EQJVQTJIIC8' where id=9; -update noar tt set v0='JSN3NW5EJJU4C540BZJZHK' where id=9; -update noar ti set v0='JSN3NW5EJJU4C540BZJZHK' where id=9; -update noar tt set b2='GMLCNHJVOODY62BVXNS544F91MO' where id=9; -update noar ti set b2='GMLCNHJVOODY62BVXNS544F91MO' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 longblob null, -b1 mediumblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='AEGMDK8EYV80LO5N0F714KACBJ5XMV' where id=1; -update noar ti set v0='AEGMDK8EYV80LO5N0F714KACBJ5XMV' where id=1; -update noar tt set b0='5ZUR86QBTVDP93LIQ' where id=1; -update noar ti set b0='5ZUR86QBTVDP93LIQ' where id=1; -update noar tt set v0='5GNLQ' where id=1; -update noar ti set v0='5GNLQ' where id=1; -update noar tt set b1='IE0XF8HDL3PTSEFLVWM33T1U' where id=1; -update noar ti set b1='IE0XF8HDL3PTSEFLVWM33T1U' where id=1; -update noar tt set v0='XLA22WGK9SMP06N7RD0RDCVRXG' where id=1; -update noar ti set v0='XLA22WGK9SMP06N7RD0RDCVRXG' where id=1; -update noar tt set b2='QOA2PY6H1OP16DVOD1PC4' where id=1; -update noar ti set b2='QOA2PY6H1OP16DVOD1PC4' where id=1; -update noar tt set v0='4MDHHB7JKV8ZMLJT5W1BPZY' where id=2; -update noar ti set v0='4MDHHB7JKV8ZMLJT5W1BPZY' where id=2; -update noar tt set b0='FOPAO85BB78ZCT5U18M9JD' where id=2; -update noar ti set b0='FOPAO85BB78ZCT5U18M9JD' where id=2; -update noar tt set v0='TAFV3R39DWJTL5EHAAALI1CJY' where id=2; -update noar ti set v0='TAFV3R39DWJTL5EHAAALI1CJY' where id=2; -update noar tt set b1='TEY962JR9OE' where id=2; -update noar ti set b1='TEY962JR9OE' where id=2; -update noar tt set v0='CPFZ4IO' where id=2; -update noar ti set v0='CPFZ4IO' where id=2; -update noar tt set b2='HKSDHDHLX9P' where id=2; -update noar ti set b2='HKSDHDHLX9P' where id=2; -update noar tt set v0='QHXL2WU17IT' where id=3; -update noar ti set v0='QHXL2WU17IT' where id=3; -update noar tt set b0='I06H1EKO1NIMYJXF2O5C' where id=3; -update noar ti set b0='I06H1EKO1NIMYJXF2O5C' where id=3; -update noar tt set v0='UPT67K6K7FC8Z2' where id=3; -update noar ti set v0='UPT67K6K7FC8Z2' where id=3; -update noar tt set b1='X1M1EG132P4BL17XWE7XBN1B2GKUI' where id=3; -update noar ti set b1='X1M1EG132P4BL17XWE7XBN1B2GKUI' where id=3; -update noar tt set v0='A2SJT6C0IWQKM9I3' where id=3; -update noar ti set v0='A2SJT6C0IWQKM9I3' where id=3; -update noar tt set b2='I5YEITB973H84PFGQZ3XG3J' where id=3; -update noar ti set b2='I5YEITB973H84PFGQZ3XG3J' where id=3; -update noar tt set v0='RW7' where id=4; -update noar ti set v0='RW7' where id=4; -update noar tt set b0='UJQ3Z4N5C3NS3832A' where id=4; -update noar ti set b0='UJQ3Z4N5C3NS3832A' where id=4; -update noar tt set v0='N00IXPQCHO3TB0P671' where id=4; -update noar ti set v0='N00IXPQCHO3TB0P671' where id=4; -update noar tt set b1='P7TP9H4FA' where id=4; -update noar ti set b1='P7TP9H4FA' where id=4; -update noar tt set v0='VG24O291JX0EYG5UY' where id=4; -update noar ti set v0='VG24O291JX0EYG5UY' where id=4; -update noar tt set b2='CIZ3EYAITJANDCXSMKWID' where id=4; -update noar ti set b2='CIZ3EYAITJANDCXSMKWID' where id=4; -update noar tt set v0='PSN1WAALUNSAT' where id=5; -update noar ti set v0='PSN1WAALUNSAT' where id=5; -update noar tt set b0='WE2T801L006YN9J' where id=5; -update noar ti set b0='WE2T801L006YN9J' where id=5; -update noar tt set v0='724HJ9HCTL6I2G6A1TIOH2HDOKN' where id=5; -update noar ti set v0='724HJ9HCTL6I2G6A1TIOH2HDOKN' where id=5; -update noar tt set b1='DJA7' where id=5; -update noar ti set b1='DJA7' where id=5; -update noar tt set v0='04OUGOZ0MK1' where id=5; -update noar ti set v0='04OUGOZ0MK1' where id=5; -update noar tt set b2='UFS' where id=5; -update noar ti set b2='UFS' where id=5; -update noar tt set v0='B57M3DC4Y5FBHAFQUN8BZKWMJZ63CZ4' where id=6; -update noar ti set v0='B57M3DC4Y5FBHAFQUN8BZKWMJZ63CZ4' where id=6; -update noar tt set b0='6J6NPSZ67C2QRTFWV2PZN2W3QIMUG' where id=6; -update noar ti set b0='6J6NPSZ67C2QRTFWV2PZN2W3QIMUG' where id=6; -update noar tt set v0='6CSD7SPG4L936VTONHLQYNP196K063X' where id=6; -update noar ti set v0='6CSD7SPG4L936VTONHLQYNP196K063X' where id=6; -update noar tt set b1='US3CK8X8J8WQWHX5AFJ45AP6FIPKAM' where id=6; -update noar ti set b1='US3CK8X8J8WQWHX5AFJ45AP6FIPKAM' where id=6; -update noar tt set v0='MJUI09VTZ6QAAHLKXRNCV23B3Z7O' where id=6; -update noar ti set v0='MJUI09VTZ6QAAHLKXRNCV23B3Z7O' where id=6; -update noar tt set b2='MPTIN3UP2VYEFDUURAVLXWP24GH6U56' where id=6; -update noar ti set b2='MPTIN3UP2VYEFDUURAVLXWP24GH6U56' where id=6; -update noar tt set v0='OTVKMTCQ1QUQ3SKH5967SE' where id=7; -update noar ti set v0='OTVKMTCQ1QUQ3SKH5967SE' where id=7; -update noar tt set b0='96LBU3UD38V1517X4X0' where id=7; -update noar ti set b0='96LBU3UD38V1517X4X0' where id=7; -update noar tt set v0='2IT7WZJWAIT0I' where id=7; -update noar ti set v0='2IT7WZJWAIT0I' where id=7; -update noar tt set b1='V3C4JW70IOP97RJWDMCSSX' where id=7; -update noar ti set b1='V3C4JW70IOP97RJWDMCSSX' where id=7; -update noar tt set v0='L9G3' where id=7; -update noar ti set v0='L9G3' where id=7; -update noar tt set b2='LRLO45QI6A6SCLFV7NOI13QLW' where id=7; -update noar ti set b2='LRLO45QI6A6SCLFV7NOI13QLW' where id=7; -update noar tt set v0='42NLOT4UQFS' where id=8; -update noar ti set v0='42NLOT4UQFS' where id=8; -update noar tt set b0='S62B8XDFSSQ0' where id=8; -update noar ti set b0='S62B8XDFSSQ0' where id=8; -update noar tt set v0='X76ZFPSI6' where id=8; -update noar ti set v0='X76ZFPSI6' where id=8; -update noar tt set b1='FXK' where id=8; -update noar ti set b1='FXK' where id=8; -update noar tt set v0='MSNUUCHC4D' where id=8; -update noar ti set v0='MSNUUCHC4D' where id=8; -update noar tt set b2='T0XXZ3DB' where id=8; -update noar ti set b2='T0XXZ3DB' where id=8; -update noar tt set v0='I8IWTMSE' where id=9; -update noar ti set v0='I8IWTMSE' where id=9; -update noar tt set b0='1UO' where id=9; -update noar ti set b0='1UO' where id=9; -update noar tt set v0='JT' where id=9; -update noar ti set v0='JT' where id=9; -update noar tt set b1='XF7YZLXM8TS7V44I1OBBLAYCLMTDMJE' where id=9; -update noar ti set b1='XF7YZLXM8TS7V44I1OBBLAYCLMTDMJE' where id=9; -update noar tt set v0='TH5E9Z' where id=9; -update noar ti set v0='TH5E9Z' where id=9; -update noar tt set b2='222NO4NTFXSOM57' where id=9; -update noar ti set b2='222NO4NTFXSOM57' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 longblob not null, -b1 mediumblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='5YIBB5UNICW9845FJBUCTO' where id=1; -update noar ti set v0='5YIBB5UNICW9845FJBUCTO' where id=1; -update noar tt set b0='MXN7' where id=1; -update noar ti set b0='MXN7' where id=1; -update noar tt set v0='KUJVXXVC7JOR5DQP' where id=1; -update noar ti set v0='KUJVXXVC7JOR5DQP' where id=1; -update noar tt set b1='6D15RMD9AP1PJLXG2X0PETP24JC' where id=1; -update noar ti set b1='6D15RMD9AP1PJLXG2X0PETP24JC' where id=1; -update noar tt set v0='Y5EQSR52HVK98VLCMCUBPMW4HZH4D' where id=1; -update noar ti set v0='Y5EQSR52HVK98VLCMCUBPMW4HZH4D' where id=1; -update noar tt set b2='NPZQWM6' where id=1; -update noar ti set b2='NPZQWM6' where id=1; -update noar tt set v0='7IIYB8' where id=2; -update noar ti set v0='7IIYB8' where id=2; -update noar tt set b0='3XA8WDH4ILAZXZ3MYN' where id=2; -update noar ti set b0='3XA8WDH4ILAZXZ3MYN' where id=2; -update noar tt set v0='T3QGJ9J7NRHJI6K1D' where id=2; -update noar ti set v0='T3QGJ9J7NRHJI6K1D' where id=2; -update noar tt set b1='HY' where id=2; -update noar ti set b1='HY' where id=2; -update noar tt set v0='YDV2S0YCTQ8RASJJ2HS' where id=2; -update noar ti set v0='YDV2S0YCTQ8RASJJ2HS' where id=2; -update noar tt set b2='0JNS9N9BRIUGHIGJUTVZLYVE887' where id=2; -update noar ti set b2='0JNS9N9BRIUGHIGJUTVZLYVE887' where id=2; -update noar tt set v0='1UDERKW4U60UYANPN7XZ9S8N' where id=3; -update noar ti set v0='1UDERKW4U60UYANPN7XZ9S8N' where id=3; -update noar tt set b0='E8DE7XU' where id=3; -update noar ti set b0='E8DE7XU' where id=3; -update noar tt set v0='GRAD2LTLER' where id=3; -update noar ti set v0='GRAD2LTLER' where id=3; -update noar tt set b1='CPKQOCLGYDOP18' where id=3; -update noar ti set b1='CPKQOCLGYDOP18' where id=3; -update noar tt set v0='9I7HF5S6JFDGQRJAYK5QT5VV4' where id=3; -update noar ti set v0='9I7HF5S6JFDGQRJAYK5QT5VV4' where id=3; -update noar tt set b2='YI' where id=3; -update noar ti set b2='YI' where id=3; -update noar tt set v0='H' where id=4; -update noar ti set v0='H' where id=4; -update noar tt set b0='VNFPJJKXK91C' where id=4; -update noar ti set b0='VNFPJJKXK91C' where id=4; -update noar tt set v0='BXK6KLIBNT8OPMDP1DKBONRP6BBB5ZVD' where id=4; -update noar ti set v0='BXK6KLIBNT8OPMDP1DKBONRP6BBB5ZVD' where id=4; -update noar tt set b1='LVRAWWTLD79J77P705WWWSZ1W34DZRB' where id=4; -update noar ti set b1='LVRAWWTLD79J77P705WWWSZ1W34DZRB' where id=4; -update noar tt set v0='V' where id=4; -update noar ti set v0='V' where id=4; -update noar tt set b2='00Z6QQ' where id=4; -update noar ti set b2='00Z6QQ' where id=4; -update noar tt set v0='53C8BD8' where id=5; -update noar ti set v0='53C8BD8' where id=5; -update noar tt set b0='6LM17NK1' where id=5; -update noar ti set b0='6LM17NK1' where id=5; -update noar tt set v0='Y0TUAR0QU0QO8U' where id=5; -update noar ti set v0='Y0TUAR0QU0QO8U' where id=5; -update noar tt set b1='0CPIUW' where id=5; -update noar ti set b1='0CPIUW' where id=5; -update noar tt set v0='TXX80PRDST6ZKF' where id=5; -update noar ti set v0='TXX80PRDST6ZKF' where id=5; -update noar tt set b2='ANHBGV8GFJM' where id=5; -update noar ti set b2='ANHBGV8GFJM' where id=5; -update noar tt set v0='7AMA7A2G7I4YRGQK2JZ2YPLRRRSYI' where id=6; -update noar ti set v0='7AMA7A2G7I4YRGQK2JZ2YPLRRRSYI' where id=6; -update noar tt set b0='K0OHWH6TGS3XN' where id=6; -update noar ti set b0='K0OHWH6TGS3XN' where id=6; -update noar tt set v0='S8MK5XH9C7ERQKQCT0239TY8XJ7' where id=6; -update noar ti set v0='S8MK5XH9C7ERQKQCT0239TY8XJ7' where id=6; -update noar tt set b1='5' where id=6; -update noar ti set b1='5' where id=6; -update noar tt set v0='5KA8V1OMWDB2Z9UDYQK' where id=6; -update noar ti set v0='5KA8V1OMWDB2Z9UDYQK' where id=6; -update noar tt set b2='817L591' where id=6; -update noar ti set b2='817L591' where id=6; -update noar tt set v0='I58CWEWAOBC0HHXHDJSA0NAKAUIXF' where id=7; -update noar ti set v0='I58CWEWAOBC0HHXHDJSA0NAKAUIXF' where id=7; -update noar tt set b0='QFRXQ3NOOX1RKXLQBO9G5K' where id=7; -update noar ti set b0='QFRXQ3NOOX1RKXLQBO9G5K' where id=7; -update noar tt set v0='H54KHZJB5' where id=7; -update noar ti set v0='H54KHZJB5' where id=7; -update noar tt set b1='PLBFN5IDR9S0DV4IIUYV63H0GISSHN' where id=7; -update noar ti set b1='PLBFN5IDR9S0DV4IIUYV63H0GISSHN' where id=7; -update noar tt set v0='4UF9' where id=7; -update noar ti set v0='4UF9' where id=7; -update noar tt set b2='CBD6U6MUZHWS4RY1W5' where id=7; -update noar ti set b2='CBD6U6MUZHWS4RY1W5' where id=7; -update noar tt set v0='V4VEFIGTJ5S67Z6MVQZ' where id=8; -update noar ti set v0='V4VEFIGTJ5S67Z6MVQZ' where id=8; -update noar tt set b0='CFIF77FGMJ4BUJG5V3ZB5XW3D' where id=8; -update noar ti set b0='CFIF77FGMJ4BUJG5V3ZB5XW3D' where id=8; -update noar tt set v0='4' where id=8; -update noar ti set v0='4' where id=8; -update noar tt set b1='SSR74TAPELE03RMYQAFT' where id=8; -update noar ti set b1='SSR74TAPELE03RMYQAFT' where id=8; -update noar tt set v0='07GYC0C26KXP37NWZE1MO' where id=8; -update noar ti set v0='07GYC0C26KXP37NWZE1MO' where id=8; -update noar tt set b2='KUTT43527FXLKUMRRZ2JVMYUQUI' where id=8; -update noar ti set b2='KUTT43527FXLKUMRRZ2JVMYUQUI' where id=8; -update noar tt set v0='PVQ50MWWW' where id=9; -update noar ti set v0='PVQ50MWWW' where id=9; -update noar tt set b0='L0O9FP02FNGD6BY00WCSUSASAQZ' where id=9; -update noar ti set b0='L0O9FP02FNGD6BY00WCSUSASAQZ' where id=9; -update noar tt set v0='08943H3VSMOBTTP7L9CPKFEAG3' where id=9; -update noar ti set v0='08943H3VSMOBTTP7L9CPKFEAG3' where id=9; -update noar tt set b1='7RUY5OQDD8' where id=9; -update noar ti set b1='7RUY5OQDD8' where id=9; -update noar tt set v0='MY8OYZTR0UNYNZO59ZW23KZTJLNUUV2' where id=9; -update noar ti set v0='MY8OYZTR0UNYNZO59ZW23KZTJLNUUV2' where id=9; -update noar tt set b2='FVEE4VTIENXXZUK8PV4W5NJ' where id=9; -update noar ti set b2='FVEE4VTIENXXZUK8PV4W5NJ' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 longblob not null, -b1 mediumblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='S3WOBYMKV629I7E1XUJCG163' where id=1; -update noar ti set v0='S3WOBYMKV629I7E1XUJCG163' where id=1; -update noar tt set b0='7GSYV' where id=1; -update noar ti set b0='7GSYV' where id=1; -update noar tt set v0='JMP59E0SBEI5UKS2CF1' where id=1; -update noar ti set v0='JMP59E0SBEI5UKS2CF1' where id=1; -update noar tt set b1='BR44HNYO9JJV9NNPMVST' where id=1; -update noar ti set b1='BR44HNYO9JJV9NNPMVST' where id=1; -update noar tt set v0='R4NKM8LXH2' where id=1; -update noar ti set v0='R4NKM8LXH2' where id=1; -update noar tt set b2='VE2LB0DFDES1CB97V' where id=1; -update noar ti set b2='VE2LB0DFDES1CB97V' where id=1; -update noar tt set v0='NWWCS9HVGWBNEBIMCZA23' where id=2; -update noar ti set v0='NWWCS9HVGWBNEBIMCZA23' where id=2; -update noar tt set b0='QOGKOYP2RWVRJJXHJ9M91R5LN3U' where id=2; -update noar ti set b0='QOGKOYP2RWVRJJXHJ9M91R5LN3U' where id=2; -update noar tt set v0='YUAQ3E' where id=2; -update noar ti set v0='YUAQ3E' where id=2; -update noar tt set b1='1DCYTJTC2KJT9JZEQPDNI9N0JODU' where id=2; -update noar ti set b1='1DCYTJTC2KJT9JZEQPDNI9N0JODU' where id=2; -update noar tt set v0='MJMLFBB' where id=2; -update noar ti set v0='MJMLFBB' where id=2; -update noar tt set b2='UT0ZYO6DKRZIG54C772MDG' where id=2; -update noar ti set b2='UT0ZYO6DKRZIG54C772MDG' where id=2; -update noar tt set v0='BWTS5XCE563B61T3CP4DMO' where id=3; -update noar ti set v0='BWTS5XCE563B61T3CP4DMO' where id=3; -update noar tt set b0='EIW7WSKT0MEGBJJMEO' where id=3; -update noar ti set b0='EIW7WSKT0MEGBJJMEO' where id=3; -update noar tt set v0='EPICL7Z14LG9' where id=3; -update noar ti set v0='EPICL7Z14LG9' where id=3; -update noar tt set b1='8B0DOJL2JE7K10LACH2ERDOBUQDB0F' where id=3; -update noar ti set b1='8B0DOJL2JE7K10LACH2ERDOBUQDB0F' where id=3; -update noar tt set v0='JKW946I5U2676TEFELJC0I3DSOMKCKRB' where id=3; -update noar ti set v0='JKW946I5U2676TEFELJC0I3DSOMKCKRB' where id=3; -update noar tt set b2='IALFJJ7K40IXNQU8' where id=3; -update noar ti set b2='IALFJJ7K40IXNQU8' where id=3; -update noar tt set v0='ORHEIO52QFHWJ4A3' where id=4; -update noar ti set v0='ORHEIO52QFHWJ4A3' where id=4; -update noar tt set b0='GRYJN4R2AHE' where id=4; -update noar ti set b0='GRYJN4R2AHE' where id=4; -update noar tt set v0='V37WORKOR9O' where id=4; -update noar ti set v0='V37WORKOR9O' where id=4; -update noar tt set b1='FDBVAG' where id=4; -update noar ti set b1='FDBVAG' where id=4; -update noar tt set v0='UZBFL9UHEPE7OTV04GETP' where id=4; -update noar ti set v0='UZBFL9UHEPE7OTV04GETP' where id=4; -update noar tt set b2='CM8EMC1YNNS7UEF4GP4M18KMBXJRGN' where id=4; -update noar ti set b2='CM8EMC1YNNS7UEF4GP4M18KMBXJRGN' where id=4; -update noar tt set v0='KADFFXAAU5QLA9T5BLPL583' where id=5; -update noar ti set v0='KADFFXAAU5QLA9T5BLPL583' where id=5; -update noar tt set b0='36S59X86VT' where id=5; -update noar ti set b0='36S59X86VT' where id=5; -update noar tt set v0='FX5EHG28EHYWCRLL6' where id=5; -update noar ti set v0='FX5EHG28EHYWCRLL6' where id=5; -update noar tt set b1='RVWERPBBNP58QPJHQEFL6KGXB08PY' where id=5; -update noar ti set b1='RVWERPBBNP58QPJHQEFL6KGXB08PY' where id=5; -update noar tt set v0='QTYVPED8KKZ5S5QU601VDVXBLM8' where id=5; -update noar ti set v0='QTYVPED8KKZ5S5QU601VDVXBLM8' where id=5; -update noar tt set b2='GNPJ8Q48R10OUHK347Q2D240ZRPSV' where id=5; -update noar ti set b2='GNPJ8Q48R10OUHK347Q2D240ZRPSV' where id=5; -update noar tt set v0='FK0DK4SCUA4G3REDN5HOTM4IKDVAI2BB' where id=6; -update noar ti set v0='FK0DK4SCUA4G3REDN5HOTM4IKDVAI2BB' where id=6; -update noar tt set b0='QD97N3TTIL3' where id=6; -update noar ti set b0='QD97N3TTIL3' where id=6; -update noar tt set v0='4NF378ECWJ' where id=6; -update noar ti set v0='4NF378ECWJ' where id=6; -update noar tt set b1='LAAW46MQHWT6A' where id=6; -update noar ti set b1='LAAW46MQHWT6A' where id=6; -update noar tt set v0='2FTO3NIS' where id=6; -update noar ti set v0='2FTO3NIS' where id=6; -update noar tt set b2='WEB38FB8YMHHLCPV' where id=6; -update noar ti set b2='WEB38FB8YMHHLCPV' where id=6; -update noar tt set v0='ZNXXVVB' where id=7; -update noar ti set v0='ZNXXVVB' where id=7; -update noar tt set b0='UF5P19DYI3' where id=7; -update noar ti set b0='UF5P19DYI3' where id=7; -update noar tt set v0='1UBGXLDMB' where id=7; -update noar ti set v0='1UBGXLDMB' where id=7; -update noar tt set b1='PVL9NH95K4NEQXDQLNWQ4B' where id=7; -update noar ti set b1='PVL9NH95K4NEQXDQLNWQ4B' where id=7; -update noar tt set v0='EUB8FA6TBQT1HNWQGIC75SIZ889' where id=7; -update noar ti set v0='EUB8FA6TBQT1HNWQGIC75SIZ889' where id=7; -update noar tt set b2='8YQR2W5UP50MTPW690WQUC0RZNL8' where id=7; -update noar ti set b2='8YQR2W5UP50MTPW690WQUC0RZNL8' where id=7; -update noar tt set v0='LUWLJORIA7POZCB' where id=8; -update noar ti set v0='LUWLJORIA7POZCB' where id=8; -update noar tt set b0='2TVGNOR' where id=8; -update noar ti set b0='2TVGNOR' where id=8; -update noar tt set v0='BPM4GRLCJGT7QCAR6V5R3Z64W' where id=8; -update noar ti set v0='BPM4GRLCJGT7QCAR6V5R3Z64W' where id=8; -update noar tt set b1='O170TG' where id=8; -update noar ti set b1='O170TG' where id=8; -update noar tt set v0='GIYB3SKHI1YHZFV' where id=8; -update noar ti set v0='GIYB3SKHI1YHZFV' where id=8; -update noar tt set b2='XBJEJ7IZNL22RHKA' where id=8; -update noar ti set b2='XBJEJ7IZNL22RHKA' where id=8; -update noar tt set v0='3KFAL' where id=9; -update noar ti set v0='3KFAL' where id=9; -update noar tt set b0='LPHWJCBIQ4JNNBDZKENL5RT3AWVUDHVE' where id=9; -update noar ti set b0='LPHWJCBIQ4JNNBDZKENL5RT3AWVUDHVE' where id=9; -update noar tt set v0='J4WP' where id=9; -update noar ti set v0='J4WP' where id=9; -update noar tt set b1='E9C4DU0LWIR0052208LIZDWUX3' where id=9; -update noar ti set b1='E9C4DU0LWIR0052208LIZDWUX3' where id=9; -update noar tt set v0='KU' where id=9; -update noar ti set v0='KU' where id=9; -update noar tt set b2='E8T' where id=9; -update noar ti set b2='E8T' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 longblob null, -b1 mediumblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='R3K75JPZ7DBNDLWGKZWUN7JFQ0LVVNKD' where id=1; -update noar ti set v0='R3K75JPZ7DBNDLWGKZWUN7JFQ0LVVNKD' where id=1; -update noar tt set b0='CEXAX0IX02SS6E7AKO1H8US' where id=1; -update noar ti set b0='CEXAX0IX02SS6E7AKO1H8US' where id=1; -update noar tt set v0='0FPUB1ABYX7L7DQW5EWTFCYN0' where id=1; -update noar ti set v0='0FPUB1ABYX7L7DQW5EWTFCYN0' where id=1; -update noar tt set b1='MUYE4FEQZ5' where id=1; -update noar ti set b1='MUYE4FEQZ5' where id=1; -update noar tt set v0='CJVU7TTVU9Z708FZH059JLWRSP' where id=1; -update noar ti set v0='CJVU7TTVU9Z708FZH059JLWRSP' where id=1; -update noar tt set b2='TWCPR' where id=1; -update noar ti set b2='TWCPR' where id=1; -update noar tt set v0='MTEZE8LTCJPIDKSJWXE' where id=2; -update noar ti set v0='MTEZE8LTCJPIDKSJWXE' where id=2; -update noar tt set b0='QIAIZUVDN8YM' where id=2; -update noar ti set b0='QIAIZUVDN8YM' where id=2; -update noar tt set v0='TFGRNU2QU' where id=2; -update noar ti set v0='TFGRNU2QU' where id=2; -update noar tt set b1='7BCLZC2NE52505OKEYE6HCM5I' where id=2; -update noar ti set b1='7BCLZC2NE52505OKEYE6HCM5I' where id=2; -update noar tt set v0='JE' where id=2; -update noar ti set v0='JE' where id=2; -update noar tt set b2='3QYP8R05V8ST' where id=2; -update noar ti set b2='3QYP8R05V8ST' where id=2; -update noar tt set v0='312J4UC0M6MSUYYKHTN4SL5JYG' where id=3; -update noar ti set v0='312J4UC0M6MSUYYKHTN4SL5JYG' where id=3; -update noar tt set b0='PA7IDPT95SW2OW5' where id=3; -update noar ti set b0='PA7IDPT95SW2OW5' where id=3; -update noar tt set v0='2X6H0H' where id=3; -update noar ti set v0='2X6H0H' where id=3; -update noar tt set b1='8BQHCICPE' where id=3; -update noar ti set b1='8BQHCICPE' where id=3; -update noar tt set v0='WFVTH1Q9O4BP5A14957VS' where id=3; -update noar ti set v0='WFVTH1Q9O4BP5A14957VS' where id=3; -update noar tt set b2='DRZ3JOLF9BE' where id=3; -update noar ti set b2='DRZ3JOLF9BE' where id=3; -update noar tt set v0='39W8FXHK14GYLKHCUS' where id=4; -update noar ti set v0='39W8FXHK14GYLKHCUS' where id=4; -update noar tt set b0='PY20H353UIANN3I8G8O9AKY' where id=4; -update noar ti set b0='PY20H353UIANN3I8G8O9AKY' where id=4; -update noar tt set v0='KGJB3HFFKRE72JXWMET2DPIW90P' where id=4; -update noar ti set v0='KGJB3HFFKRE72JXWMET2DPIW90P' where id=4; -update noar tt set b1='J1GRMTVT746A63V3BKHD3U' where id=4; -update noar ti set b1='J1GRMTVT746A63V3BKHD3U' where id=4; -update noar tt set v0='IXUJPWUTCL4MXPMUBITCC14NOIQP4Y' where id=4; -update noar ti set v0='IXUJPWUTCL4MXPMUBITCC14NOIQP4Y' where id=4; -update noar tt set b2='X6VKEIHA' where id=4; -update noar ti set b2='X6VKEIHA' where id=4; -update noar tt set v0='2HM74' where id=5; -update noar ti set v0='2HM74' where id=5; -update noar tt set b0='Q1MZZHM7C7AQELLNCBV2YV' where id=5; -update noar ti set b0='Q1MZZHM7C7AQELLNCBV2YV' where id=5; -update noar tt set v0='YNDEJGCQ29SOCEILQ2CEZU' where id=5; -update noar ti set v0='YNDEJGCQ29SOCEILQ2CEZU' where id=5; -update noar tt set b1='VLRF4G3T7NTTMBQX6CY4Y7HJG5N' where id=5; -update noar ti set b1='VLRF4G3T7NTTMBQX6CY4Y7HJG5N' where id=5; -update noar tt set v0='6PT4RS2L' where id=5; -update noar ti set v0='6PT4RS2L' where id=5; -update noar tt set b2='NRH' where id=5; -update noar ti set b2='NRH' where id=5; -update noar tt set v0='AO9REU3AKJ2HN' where id=6; -update noar ti set v0='AO9REU3AKJ2HN' where id=6; -update noar tt set b0='344IMAFNYWN1VPNIO8G3QP' where id=6; -update noar ti set b0='344IMAFNYWN1VPNIO8G3QP' where id=6; -update noar tt set v0='ROFZG3WP4CCJQV4FXX3YXG4MFWV17ZGA' where id=6; -update noar ti set v0='ROFZG3WP4CCJQV4FXX3YXG4MFWV17ZGA' where id=6; -update noar tt set b1='3OR3MJA0AAXGXJEHZUSROQ249J' where id=6; -update noar ti set b1='3OR3MJA0AAXGXJEHZUSROQ249J' where id=6; -update noar tt set v0='ZAWIH0Z032M68' where id=6; -update noar ti set v0='ZAWIH0Z032M68' where id=6; -update noar tt set b2='DQ41UB' where id=6; -update noar ti set b2='DQ41UB' where id=6; -update noar tt set v0='YMFQS5' where id=7; -update noar ti set v0='YMFQS5' where id=7; -update noar tt set b0='5EWX' where id=7; -update noar ti set b0='5EWX' where id=7; -update noar tt set v0='24CYCJWWTW5Y3S9CITJPZJKY' where id=7; -update noar ti set v0='24CYCJWWTW5Y3S9CITJPZJKY' where id=7; -update noar tt set b1='0PGUONFQBMKD' where id=7; -update noar ti set b1='0PGUONFQBMKD' where id=7; -update noar tt set v0='UNOLJ35TQJVFXZCV' where id=7; -update noar ti set v0='UNOLJ35TQJVFXZCV' where id=7; -update noar tt set b2='1J3L' where id=7; -update noar ti set b2='1J3L' where id=7; -update noar tt set v0='R0492MGGPP1EQKYVMM18VEVC' where id=8; -update noar ti set v0='R0492MGGPP1EQKYVMM18VEVC' where id=8; -update noar tt set b0='0IY0' where id=8; -update noar ti set b0='0IY0' where id=8; -update noar tt set v0='6L1B8FLDQE7M1HCLY0GG' where id=8; -update noar ti set v0='6L1B8FLDQE7M1HCLY0GG' where id=8; -update noar tt set b1='IX5LTS7AV3G7JJX5GMHXR3DFRNXK3' where id=8; -update noar ti set b1='IX5LTS7AV3G7JJX5GMHXR3DFRNXK3' where id=8; -update noar tt set v0='IP' where id=8; -update noar ti set v0='IP' where id=8; -update noar tt set b2='7' where id=8; -update noar ti set b2='7' where id=8; -update noar tt set v0='SX9KI0TPRDN3FC2VB1YLCRO01VX2AS' where id=9; -update noar ti set v0='SX9KI0TPRDN3FC2VB1YLCRO01VX2AS' where id=9; -update noar tt set b0='YPPN52C7IPNUK' where id=9; -update noar ti set b0='YPPN52C7IPNUK' where id=9; -update noar tt set v0='XEDMBXRTD253UJ' where id=9; -update noar ti set v0='XEDMBXRTD253UJ' where id=9; -update noar tt set b1='RBTR77M2XYIQJXW73NLQQQG8A4' where id=9; -update noar ti set b1='RBTR77M2XYIQJXW73NLQQQG8A4' where id=9; -update noar tt set v0='J' where id=9; -update noar ti set v0='J' where id=9; -update noar tt set b2='DP7RSS29NH6W' where id=9; -update noar ti set b2='DP7RSS29NH6W' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 longblob null, -b1 mediumblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='D9' where id=1; -update noar ti set v0='D9' where id=1; -update noar tt set b0='4KY26BDHRD3J5IC4TCAQW1RJATC' where id=1; -update noar ti set b0='4KY26BDHRD3J5IC4TCAQW1RJATC' where id=1; -update noar tt set v0='QR0EKGQ5YUDOT57D3T5' where id=1; -update noar ti set v0='QR0EKGQ5YUDOT57D3T5' where id=1; -update noar tt set b1='EE2R5' where id=1; -update noar ti set b1='EE2R5' where id=1; -update noar tt set v0='HL2F1D8CBB' where id=1; -update noar ti set v0='HL2F1D8CBB' where id=1; -update noar tt set b2='UGDNBKQ2YT5WAMJX9RRGVC' where id=1; -update noar ti set b2='UGDNBKQ2YT5WAMJX9RRGVC' where id=1; -update noar tt set v0='IFOG7SJDQLWHQ7S9H5S47M6N20U84L' where id=2; -update noar ti set v0='IFOG7SJDQLWHQ7S9H5S47M6N20U84L' where id=2; -update noar tt set b0='JFHS' where id=2; -update noar ti set b0='JFHS' where id=2; -update noar tt set v0='1JRI1UYSQRCCMIINOA4XTRZXGVR2' where id=2; -update noar ti set v0='1JRI1UYSQRCCMIINOA4XTRZXGVR2' where id=2; -update noar tt set b1='PM4IS8CHAS4' where id=2; -update noar ti set b1='PM4IS8CHAS4' where id=2; -update noar tt set v0='92BQAV8NM5BZQY94Q' where id=2; -update noar ti set v0='92BQAV8NM5BZQY94Q' where id=2; -update noar tt set b2='HOPYGDCR8Q' where id=2; -update noar ti set b2='HOPYGDCR8Q' where id=2; -update noar tt set v0='9K1UIZBEAJKXRM0C15XVRV1N4OF' where id=3; -update noar ti set v0='9K1UIZBEAJKXRM0C15XVRV1N4OF' where id=3; -update noar tt set b0='MXNUGECQVV10FM' where id=3; -update noar ti set b0='MXNUGECQVV10FM' where id=3; -update noar tt set v0='DJKJCMDTS5XITVSQJCRA60YVOGPVI' where id=3; -update noar ti set v0='DJKJCMDTS5XITVSQJCRA60YVOGPVI' where id=3; -update noar tt set b1='6IF' where id=3; -update noar ti set b1='6IF' where id=3; -update noar tt set v0='JCIKPZFLSWSR' where id=3; -update noar ti set v0='JCIKPZFLSWSR' where id=3; -update noar tt set b2='WK2U8Z3LHRIOT50AB295CWWU6XH29E' where id=3; -update noar ti set b2='WK2U8Z3LHRIOT50AB295CWWU6XH29E' where id=3; -update noar tt set v0='11WIUBVQ0GNTY8WXXYH6GE1HXE' where id=4; -update noar ti set v0='11WIUBVQ0GNTY8WXXYH6GE1HXE' where id=4; -update noar tt set b0='3027K0E8VM7ZFUGKSFKH6' where id=4; -update noar ti set b0='3027K0E8VM7ZFUGKSFKH6' where id=4; -update noar tt set v0='UBQBM1AVW1Z48KF3' where id=4; -update noar ti set v0='UBQBM1AVW1Z48KF3' where id=4; -update noar tt set b1='EZPPFKYZP7BF9YSVNK972CU8VOLNZ75' where id=4; -update noar ti set b1='EZPPFKYZP7BF9YSVNK972CU8VOLNZ75' where id=4; -update noar tt set v0='SCLTUZ76N03DLZYQ' where id=4; -update noar ti set v0='SCLTUZ76N03DLZYQ' where id=4; -update noar tt set b2='LDC21J8P32AT8SUF14LT4IZ9WVFT0' where id=4; -update noar ti set b2='LDC21J8P32AT8SUF14LT4IZ9WVFT0' where id=4; -update noar tt set v0='MEQX9LYC85VJPI00FJB35C9TNW4QH' where id=5; -update noar ti set v0='MEQX9LYC85VJPI00FJB35C9TNW4QH' where id=5; -update noar tt set b0='I7X0FRJA666B65WR' where id=5; -update noar ti set b0='I7X0FRJA666B65WR' where id=5; -update noar tt set v0='RM36BXLHOBCP59BAXLPCXSZ' where id=5; -update noar ti set v0='RM36BXLHOBCP59BAXLPCXSZ' where id=5; -update noar tt set b1='OUG3JM1LGMK7ZSQY78WE3HZ5CKEL5P' where id=5; -update noar ti set b1='OUG3JM1LGMK7ZSQY78WE3HZ5CKEL5P' where id=5; -update noar tt set v0='BNHP3ORJD224TI9' where id=5; -update noar ti set v0='BNHP3ORJD224TI9' where id=5; -update noar tt set b2='DA2' where id=5; -update noar ti set b2='DA2' where id=5; -update noar tt set v0='2IRR7ENDLBQV9D839S7Y9134GZ2G0SZO' where id=6; -update noar ti set v0='2IRR7ENDLBQV9D839S7Y9134GZ2G0SZO' where id=6; -update noar tt set b0='ICTA580809' where id=6; -update noar ti set b0='ICTA580809' where id=6; -update noar tt set v0='6FPBLTQZME' where id=6; -update noar ti set v0='6FPBLTQZME' where id=6; -update noar tt set b1='KVS0SR22V84J' where id=6; -update noar ti set b1='KVS0SR22V84J' where id=6; -update noar tt set v0='NZUHCUHEVFY015AWH0II' where id=6; -update noar ti set v0='NZUHCUHEVFY015AWH0II' where id=6; -update noar tt set b2='5LKMNFT7BYX13RNN3D2' where id=6; -update noar ti set b2='5LKMNFT7BYX13RNN3D2' where id=6; -update noar tt set v0='8OJF7ATX' where id=7; -update noar ti set v0='8OJF7ATX' where id=7; -update noar tt set b0='HY' where id=7; -update noar ti set b0='HY' where id=7; -update noar tt set v0='BAZYWPNOLLEYZ1SHHM19JLCO' where id=7; -update noar ti set v0='BAZYWPNOLLEYZ1SHHM19JLCO' where id=7; -update noar tt set b1='S390CJJD' where id=7; -update noar ti set b1='S390CJJD' where id=7; -update noar tt set v0='Q4B9OTOG95V5511GTKUFZAOOG1SR' where id=7; -update noar ti set v0='Q4B9OTOG95V5511GTKUFZAOOG1SR' where id=7; -update noar tt set b2='N953HL01BEHB6W2UO0KHIU1RBBUR7' where id=7; -update noar ti set b2='N953HL01BEHB6W2UO0KHIU1RBBUR7' where id=7; -update noar tt set v0='QQMPZ0OHR28D79' where id=8; -update noar ti set v0='QQMPZ0OHR28D79' where id=8; -update noar tt set b0='ZKA08H4VSV78' where id=8; -update noar ti set b0='ZKA08H4VSV78' where id=8; -update noar tt set v0='JX3TMT' where id=8; -update noar ti set v0='JX3TMT' where id=8; -update noar tt set b1='PKBFYE7GHSXVXQ0YF3UO1UFGT1R75' where id=8; -update noar ti set b1='PKBFYE7GHSXVXQ0YF3UO1UFGT1R75' where id=8; -update noar tt set v0='0JIHXPB96SZQ44SQSWTA4L260' where id=8; -update noar ti set v0='0JIHXPB96SZQ44SQSWTA4L260' where id=8; -update noar tt set b2='5F4HV' where id=8; -update noar ti set b2='5F4HV' where id=8; -update noar tt set v0='PIXO' where id=9; -update noar ti set v0='PIXO' where id=9; -update noar tt set b0='YYRAVC33GKFL8FWX3L7W356' where id=9; -update noar ti set b0='YYRAVC33GKFL8FWX3L7W356' where id=9; -update noar tt set v0='4V0B0LXK7UXJ52R2N8ZE5Y3MG1R' where id=9; -update noar ti set v0='4V0B0LXK7UXJ52R2N8ZE5Y3MG1R' where id=9; -update noar tt set b1='991XDMGDFUY' where id=9; -update noar ti set b1='991XDMGDFUY' where id=9; -update noar tt set v0='EVB07' where id=9; -update noar ti set v0='EVB07' where id=9; -update noar tt set b2='2TEUEW2UPEGM8TTC' where id=9; -update noar ti set b2='2TEUEW2UPEGM8TTC' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 longblob not null, -b1 mediumblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='CNE69R3TSTJTJ9A3GJ6U9V658E' where id=1; -update noar ti set v0='CNE69R3TSTJTJ9A3GJ6U9V658E' where id=1; -update noar tt set b0='65AYFMENZSIIE1AU9GQH0' where id=1; -update noar ti set b0='65AYFMENZSIIE1AU9GQH0' where id=1; -update noar tt set v0='EMZ0FRE4' where id=1; -update noar ti set v0='EMZ0FRE4' where id=1; -update noar tt set b1='MDA1YSS46DFWOH2OLRAOQT2' where id=1; -update noar ti set b1='MDA1YSS46DFWOH2OLRAOQT2' where id=1; -update noar tt set v0='J8CZQVDQVHIL0JK' where id=1; -update noar ti set v0='J8CZQVDQVHIL0JK' where id=1; -update noar tt set b2='D' where id=1; -update noar ti set b2='D' where id=1; -update noar tt set v0='P21FAHOJO0CP1Q82C9999SYL' where id=2; -update noar ti set v0='P21FAHOJO0CP1Q82C9999SYL' where id=2; -update noar tt set b0='KLOIV3M1S7Y6ZA4JU7649FF8EXL4N' where id=2; -update noar ti set b0='KLOIV3M1S7Y6ZA4JU7649FF8EXL4N' where id=2; -update noar tt set v0='ZE9N2MAVGKMTFGSV26LMLEXZFQ8T' where id=2; -update noar ti set v0='ZE9N2MAVGKMTFGSV26LMLEXZFQ8T' where id=2; -update noar tt set b1='XNUO087QXE2DW2S2RN' where id=2; -update noar ti set b1='XNUO087QXE2DW2S2RN' where id=2; -update noar tt set v0='WXBLHR5O9S26KJ' where id=2; -update noar ti set v0='WXBLHR5O9S26KJ' where id=2; -update noar tt set b2='FBZ2G4EC1TL0Z' where id=2; -update noar ti set b2='FBZ2G4EC1TL0Z' where id=2; -update noar tt set v0='G5MTX6MM' where id=3; -update noar ti set v0='G5MTX6MM' where id=3; -update noar tt set b0='MJ90DEZCR89NDZEM1YFVF5O3X' where id=3; -update noar ti set b0='MJ90DEZCR89NDZEM1YFVF5O3X' where id=3; -update noar tt set v0='EPVJTJWUX2J5WJ8POC0' where id=3; -update noar ti set v0='EPVJTJWUX2J5WJ8POC0' where id=3; -update noar tt set b1='XZK8ONZZB38V6XFB4RQY' where id=3; -update noar ti set b1='XZK8ONZZB38V6XFB4RQY' where id=3; -update noar tt set v0='1JVN3HYNHN8VSWLKIDB6JJVH7R4D' where id=3; -update noar ti set v0='1JVN3HYNHN8VSWLKIDB6JJVH7R4D' where id=3; -update noar tt set b2='6BCT9YG7Q' where id=3; -update noar ti set b2='6BCT9YG7Q' where id=3; -update noar tt set v0='KZCKIHDO68' where id=4; -update noar ti set v0='KZCKIHDO68' where id=4; -update noar tt set b0='3ZBSXY8HC6V0V' where id=4; -update noar ti set b0='3ZBSXY8HC6V0V' where id=4; -update noar tt set v0='MDQ0NC6DUQ8RHHMLCTWRNEYJDA61R' where id=4; -update noar ti set v0='MDQ0NC6DUQ8RHHMLCTWRNEYJDA61R' where id=4; -update noar tt set b1='IUR6XIDPH3S53428KL62E' where id=4; -update noar ti set b1='IUR6XIDPH3S53428KL62E' where id=4; -update noar tt set v0='UGG5Q22T71' where id=4; -update noar ti set v0='UGG5Q22T71' where id=4; -update noar tt set b2='I84P493V' where id=4; -update noar ti set b2='I84P493V' where id=4; -update noar tt set v0='3SKVU9U' where id=5; -update noar ti set v0='3SKVU9U' where id=5; -update noar tt set b0='Z8UN8Y6ONX3OVNF9HJ' where id=5; -update noar ti set b0='Z8UN8Y6ONX3OVNF9HJ' where id=5; -update noar tt set v0='ZKN87Y91E92' where id=5; -update noar ti set v0='ZKN87Y91E92' where id=5; -update noar tt set b1='ORNCL32BWWCE0Y7K8H' where id=5; -update noar ti set b1='ORNCL32BWWCE0Y7K8H' where id=5; -update noar tt set v0='1' where id=5; -update noar ti set v0='1' where id=5; -update noar tt set b2='LUZMB9L7EOBP9ECU2JQIL7' where id=5; -update noar ti set b2='LUZMB9L7EOBP9ECU2JQIL7' where id=5; -update noar tt set v0='E6RZC5A1VJ7UNHDZSS806C8Z' where id=6; -update noar ti set v0='E6RZC5A1VJ7UNHDZSS806C8Z' where id=6; -update noar tt set b0='P3IST8MDNY' where id=6; -update noar ti set b0='P3IST8MDNY' where id=6; -update noar tt set v0='XQ5' where id=6; -update noar ti set v0='XQ5' where id=6; -update noar tt set b1='YEYC0C43E6CRC19QASY4VISNRHQZ2C' where id=6; -update noar ti set b1='YEYC0C43E6CRC19QASY4VISNRHQZ2C' where id=6; -update noar tt set v0='OBY0G0PUUJRBQBINB04KOFAI261FIX0' where id=6; -update noar ti set v0='OBY0G0PUUJRBQBINB04KOFAI261FIX0' where id=6; -update noar tt set b2='IHQ7RRK2HRFMT3Y3F22UD' where id=6; -update noar ti set b2='IHQ7RRK2HRFMT3Y3F22UD' where id=6; -update noar tt set v0='MBNPX9BQGA7HQCG6TFJW0CB' where id=7; -update noar ti set v0='MBNPX9BQGA7HQCG6TFJW0CB' where id=7; -update noar tt set b0='LOP4D' where id=7; -update noar ti set b0='LOP4D' where id=7; -update noar tt set v0='YQ6J3XV79NKRAPOWVK4CP7R8Q1ZNIHJ' where id=7; -update noar ti set v0='YQ6J3XV79NKRAPOWVK4CP7R8Q1ZNIHJ' where id=7; -update noar tt set b1='SYPK32' where id=7; -update noar ti set b1='SYPK32' where id=7; -update noar tt set v0='LD' where id=7; -update noar ti set v0='LD' where id=7; -update noar tt set b2='C6AH3YQ7FY5O1SV300TCOA2HRBCRJ8' where id=7; -update noar ti set b2='C6AH3YQ7FY5O1SV300TCOA2HRBCRJ8' where id=7; -update noar tt set v0='SQ0IIA75ERHFB1' where id=8; -update noar ti set v0='SQ0IIA75ERHFB1' where id=8; -update noar tt set b0='M10NQVJL21TE1VR6DV' where id=8; -update noar ti set b0='M10NQVJL21TE1VR6DV' where id=8; -update noar tt set v0='GZKT2DLPN6WW9T499E' where id=8; -update noar ti set v0='GZKT2DLPN6WW9T499E' where id=8; -update noar tt set b1='VE599MSD5X' where id=8; -update noar ti set b1='VE599MSD5X' where id=8; -update noar tt set v0='OVGL29VY68UL038ZGMX0OACD19' where id=8; -update noar ti set v0='OVGL29VY68UL038ZGMX0OACD19' where id=8; -update noar tt set b2='O8GBPNTCFFBS26BMTRPZ729P0PD' where id=8; -update noar ti set b2='O8GBPNTCFFBS26BMTRPZ729P0PD' where id=8; -update noar tt set v0='AJBQCQ0FKGVM3H5ZMW9HFORKK7' where id=9; -update noar ti set v0='AJBQCQ0FKGVM3H5ZMW9HFORKK7' where id=9; -update noar tt set b0='KXTSIXGF' where id=9; -update noar ti set b0='KXTSIXGF' where id=9; -update noar tt set v0='9IVFLPZ2' where id=9; -update noar ti set v0='9IVFLPZ2' where id=9; -update noar tt set b1='AW8YKSIQOKO2DW68K8KAODZB1OVAER6' where id=9; -update noar ti set b1='AW8YKSIQOKO2DW68K8KAODZB1OVAER6' where id=9; -update noar tt set v0='WK8VFMLB16ME5MHHUFY3ZISFDE' where id=9; -update noar ti set v0='WK8VFMLB16ME5MHHUFY3ZISFDE' where id=9; -update noar tt set b2='CRIKIZKM3J025XCCCX1MXO' where id=9; -update noar ti set b2='CRIKIZKM3J025XCCCX1MXO' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 longblob not null, -b1 mediumblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='ZH1TFZ81TLN11R595U8V7X407JGQ68' where id=1; -update noar ti set v0='ZH1TFZ81TLN11R595U8V7X407JGQ68' where id=1; -update noar tt set b0='72LS2M4YJDXD' where id=1; -update noar ti set b0='72LS2M4YJDXD' where id=1; -update noar tt set v0='UWVM8Q6345VJAMSF6T06SYTXZX' where id=1; -update noar ti set v0='UWVM8Q6345VJAMSF6T06SYTXZX' where id=1; -update noar tt set b1='LCYPKWBO8YE6H7GDVQZVCYPDY0A6Y14' where id=1; -update noar ti set b1='LCYPKWBO8YE6H7GDVQZVCYPDY0A6Y14' where id=1; -update noar tt set v0='ZHG308' where id=1; -update noar ti set v0='ZHG308' where id=1; -update noar tt set b2='M0CEW9C' where id=1; -update noar ti set b2='M0CEW9C' where id=1; -update noar tt set v0='VKTY2ZMT4AYDUNHMYK' where id=2; -update noar ti set v0='VKTY2ZMT4AYDUNHMYK' where id=2; -update noar tt set b0='U4R7GFY0VPJSTBLC8W1T1RI7ZI8' where id=2; -update noar ti set b0='U4R7GFY0VPJSTBLC8W1T1RI7ZI8' where id=2; -update noar tt set v0='6XP0J5V' where id=2; -update noar ti set v0='6XP0J5V' where id=2; -update noar tt set b1='2UO54AUG1RFKZ' where id=2; -update noar ti set b1='2UO54AUG1RFKZ' where id=2; -update noar tt set v0='FLMK2O3O7XW1LZVYXSDUVRXACQZRIR' where id=2; -update noar ti set v0='FLMK2O3O7XW1LZVYXSDUVRXACQZRIR' where id=2; -update noar tt set b2='R1XTLNTXROFKYPF40A0Y5K1' where id=2; -update noar ti set b2='R1XTLNTXROFKYPF40A0Y5K1' where id=2; -update noar tt set v0='MHNPHHW7' where id=3; -update noar ti set v0='MHNPHHW7' where id=3; -update noar tt set b0='FS9LSQRKPF77QRDMO4' where id=3; -update noar ti set b0='FS9LSQRKPF77QRDMO4' where id=3; -update noar tt set v0='O9BI0WGMD6YT7R6MPWXX32IH' where id=3; -update noar ti set v0='O9BI0WGMD6YT7R6MPWXX32IH' where id=3; -update noar tt set b1='BGE6F42ZE922TU4SD36VPLJ' where id=3; -update noar ti set b1='BGE6F42ZE922TU4SD36VPLJ' where id=3; -update noar tt set v0='NIEMYE13POB2VIK86Z2EBN5' where id=3; -update noar ti set v0='NIEMYE13POB2VIK86Z2EBN5' where id=3; -update noar tt set b2='3' where id=3; -update noar ti set b2='3' where id=3; -update noar tt set v0='V17V33W179' where id=4; -update noar ti set v0='V17V33W179' where id=4; -update noar tt set b0='KOCJSJYVH0MZ5M19Y8VW' where id=4; -update noar ti set b0='KOCJSJYVH0MZ5M19Y8VW' where id=4; -update noar tt set v0='QZ7X' where id=4; -update noar ti set v0='QZ7X' where id=4; -update noar tt set b1='7IG' where id=4; -update noar ti set b1='7IG' where id=4; -update noar tt set v0='8XRY8VV4' where id=4; -update noar ti set v0='8XRY8VV4' where id=4; -update noar tt set b2='F9KCRAMOX' where id=4; -update noar ti set b2='F9KCRAMOX' where id=4; -update noar tt set v0='BTA69' where id=5; -update noar ti set v0='BTA69' where id=5; -update noar tt set b0='AUSE5LIB1D8J1RUI7CMKD9' where id=5; -update noar ti set b0='AUSE5LIB1D8J1RUI7CMKD9' where id=5; -update noar tt set v0='5RH2LJHDGKEE6OREV4UILWQA' where id=5; -update noar ti set v0='5RH2LJHDGKEE6OREV4UILWQA' where id=5; -update noar tt set b1='3AN82BKB715CQXR6EDY5I5KQ1SR6RQ8J' where id=5; -update noar ti set b1='3AN82BKB715CQXR6EDY5I5KQ1SR6RQ8J' where id=5; -update noar tt set v0='W28OJ9X3C1RLQ3L7KOOP2F7YM' where id=5; -update noar ti set v0='W28OJ9X3C1RLQ3L7KOOP2F7YM' where id=5; -update noar tt set b2='H1PFDRF7WP29AFRHMJZOG5IX0LSVVZ' where id=5; -update noar ti set b2='H1PFDRF7WP29AFRHMJZOG5IX0LSVVZ' where id=5; -update noar tt set v0='RPW5T8FYOPM2TN1JNVZEMA3QXVR5' where id=6; -update noar ti set v0='RPW5T8FYOPM2TN1JNVZEMA3QXVR5' where id=6; -update noar tt set b0='D2EL72ESP446YH' where id=6; -update noar ti set b0='D2EL72ESP446YH' where id=6; -update noar tt set v0='DDOB0SN5HM0FQG4MM70L4BATFQ65TEP' where id=6; -update noar ti set v0='DDOB0SN5HM0FQG4MM70L4BATFQ65TEP' where id=6; -update noar tt set b1='8099L' where id=6; -update noar ti set b1='8099L' where id=6; -update noar tt set v0='20SHNTYE2VMGG9GIXK' where id=6; -update noar ti set v0='20SHNTYE2VMGG9GIXK' where id=6; -update noar tt set b2='KGLOVNR3R5OC6KYSYQZT9Q' where id=6; -update noar ti set b2='KGLOVNR3R5OC6KYSYQZT9Q' where id=6; -update noar tt set v0='HK82FN' where id=7; -update noar ti set v0='HK82FN' where id=7; -update noar tt set b0='I10FAXAQK1EBKFHRZUBZ' where id=7; -update noar ti set b0='I10FAXAQK1EBKFHRZUBZ' where id=7; -update noar tt set v0='BU03' where id=7; -update noar ti set v0='BU03' where id=7; -update noar tt set b1='ZR7XX7HQ0HUCMU851983W275VKM5LQCR' where id=7; -update noar ti set b1='ZR7XX7HQ0HUCMU851983W275VKM5LQCR' where id=7; -update noar tt set v0='PBQVNAGNWP678UAQWV2ONXSBU' where id=7; -update noar ti set v0='PBQVNAGNWP678UAQWV2ONXSBU' where id=7; -update noar tt set b2='TODWD481ZJC2JZ' where id=7; -update noar ti set b2='TODWD481ZJC2JZ' where id=7; -update noar tt set v0='5' where id=8; -update noar ti set v0='5' where id=8; -update noar tt set b0='HQ6J28DAFS64264HEOJUJN0VY' where id=8; -update noar ti set b0='HQ6J28DAFS64264HEOJUJN0VY' where id=8; -update noar tt set v0='MEOTLCQHRL60BPTXT' where id=8; -update noar ti set v0='MEOTLCQHRL60BPTXT' where id=8; -update noar tt set b1='HAXDD6AKW0D1IPY' where id=8; -update noar ti set b1='HAXDD6AKW0D1IPY' where id=8; -update noar tt set v0='NG0MA83UE' where id=8; -update noar ti set v0='NG0MA83UE' where id=8; -update noar tt set b2='WOLTOVV62CCIYYMW1N1D' where id=8; -update noar ti set b2='WOLTOVV62CCIYYMW1N1D' where id=8; -update noar tt set v0='NHL8D5' where id=9; -update noar ti set v0='NHL8D5' where id=9; -update noar tt set b0='T3SPV0RLXMZ5MCYNYW9V' where id=9; -update noar ti set b0='T3SPV0RLXMZ5MCYNYW9V' where id=9; -update noar tt set v0='GVZULKGGT' where id=9; -update noar ti set v0='GVZULKGGT' where id=9; -update noar tt set b1='ZVKGLZN' where id=9; -update noar ti set b1='ZVKGLZN' where id=9; -update noar tt set v0='7838230IEEWPJYQ19Q2XG' where id=9; -update noar ti set v0='7838230IEEWPJYQ19Q2XG' where id=9; -update noar tt set b2='PMVF1TZRSE1JZVSPT7Q41XCT' where id=9; -update noar ti set b2='PMVF1TZRSE1JZVSPT7Q41XCT' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 longblob null, -b1 longblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='LE77E' where id=1; -update noar ti set v0='LE77E' where id=1; -update noar tt set b0='DBLRKONL' where id=1; -update noar ti set b0='DBLRKONL' where id=1; -update noar tt set v0='QWI9VG1K2W5' where id=1; -update noar ti set v0='QWI9VG1K2W5' where id=1; -update noar tt set b1='JIXJDHN6H6SYB0S07QWA58M14WP6' where id=1; -update noar ti set b1='JIXJDHN6H6SYB0S07QWA58M14WP6' where id=1; -update noar tt set v0='TA5IGNDGFGD39RNKCQZQ1S' where id=1; -update noar ti set v0='TA5IGNDGFGD39RNKCQZQ1S' where id=1; -update noar tt set b2='JFRXOZ3TJO4UXEF0T09VSV3' where id=1; -update noar ti set b2='JFRXOZ3TJO4UXEF0T09VSV3' where id=1; -update noar tt set v0='ZYEZJ8K' where id=2; -update noar ti set v0='ZYEZJ8K' where id=2; -update noar tt set b0='WBVUH62MOPZECYHI5559' where id=2; -update noar ti set b0='WBVUH62MOPZECYHI5559' where id=2; -update noar tt set v0='RW56J' where id=2; -update noar ti set v0='RW56J' where id=2; -update noar tt set b1='PRWW5QOHUI20X07RINST1UNJ8V5CJ' where id=2; -update noar ti set b1='PRWW5QOHUI20X07RINST1UNJ8V5CJ' where id=2; -update noar tt set v0='VHGN3IGBLZN' where id=2; -update noar ti set v0='VHGN3IGBLZN' where id=2; -update noar tt set b2='B1RFAYWRDZ3COH8BIBRNZJ1RTMJF8U' where id=2; -update noar ti set b2='B1RFAYWRDZ3COH8BIBRNZJ1RTMJF8U' where id=2; -update noar tt set v0='GJJ3' where id=3; -update noar ti set v0='GJJ3' where id=3; -update noar tt set b0='VNX4VJOINCEV3AALGU90LYDV6B99REE' where id=3; -update noar ti set b0='VNX4VJOINCEV3AALGU90LYDV6B99REE' where id=3; -update noar tt set v0='FRRHASR4A7GADCJWGXMTPBEXS' where id=3; -update noar ti set v0='FRRHASR4A7GADCJWGXMTPBEXS' where id=3; -update noar tt set b1='ZPA8PX60WDY2XKGC2VC9Q6XHJEH' where id=3; -update noar ti set b1='ZPA8PX60WDY2XKGC2VC9Q6XHJEH' where id=3; -update noar tt set v0='WW7W' where id=3; -update noar ti set v0='WW7W' where id=3; -update noar tt set b2='W3MP' where id=3; -update noar ti set b2='W3MP' where id=3; -update noar tt set v0='8NIB1GCG86BDGZZS1FQ3MKNI77RP' where id=4; -update noar ti set v0='8NIB1GCG86BDGZZS1FQ3MKNI77RP' where id=4; -update noar tt set b0='3425PRNQ8SXL1F7YO' where id=4; -update noar ti set b0='3425PRNQ8SXL1F7YO' where id=4; -update noar tt set v0='WTRXLPM7XWJI2OR' where id=4; -update noar ti set v0='WTRXLPM7XWJI2OR' where id=4; -update noar tt set b1='RNP8GVFPPPWG609847B' where id=4; -update noar ti set b1='RNP8GVFPPPWG609847B' where id=4; -update noar tt set v0='8G' where id=4; -update noar ti set v0='8G' where id=4; -update noar tt set b2='X' where id=4; -update noar ti set b2='X' where id=4; -update noar tt set v0='5DK7EGZI9Y' where id=5; -update noar ti set v0='5DK7EGZI9Y' where id=5; -update noar tt set b0='GRGKXIMMHJO94CYJ9MAKE0FK4' where id=5; -update noar ti set b0='GRGKXIMMHJO94CYJ9MAKE0FK4' where id=5; -update noar tt set v0='OR4PX1WF2G' where id=5; -update noar ti set v0='OR4PX1WF2G' where id=5; -update noar tt set b1='POO8IY' where id=5; -update noar ti set b1='POO8IY' where id=5; -update noar tt set v0='89C2MZWNO4926BA7ENZI2ORAQ1IOOI' where id=5; -update noar ti set v0='89C2MZWNO4926BA7ENZI2ORAQ1IOOI' where id=5; -update noar tt set b2='FOKG' where id=5; -update noar ti set b2='FOKG' where id=5; -update noar tt set v0='NY0W0L4K2HJGD81C2X8OCF' where id=6; -update noar ti set v0='NY0W0L4K2HJGD81C2X8OCF' where id=6; -update noar tt set b0='4DUST3OJQ8J3UXKXWPZNYUSDME51PSQ' where id=6; -update noar ti set b0='4DUST3OJQ8J3UXKXWPZNYUSDME51PSQ' where id=6; -update noar tt set v0='1JYIPB1FF5VSXFSGKWB5HP' where id=6; -update noar ti set v0='1JYIPB1FF5VSXFSGKWB5HP' where id=6; -update noar tt set b1='19KHDEA1J25JSYNKJ8DB3MICQ' where id=6; -update noar ti set b1='19KHDEA1J25JSYNKJ8DB3MICQ' where id=6; -update noar tt set v0='ILCEOH1F85WFFQPN' where id=6; -update noar ti set v0='ILCEOH1F85WFFQPN' where id=6; -update noar tt set b2='BDH5PGE1K6R' where id=6; -update noar ti set b2='BDH5PGE1K6R' where id=6; -update noar tt set v0='T5' where id=7; -update noar ti set v0='T5' where id=7; -update noar tt set b0='JRPH' where id=7; -update noar ti set b0='JRPH' where id=7; -update noar tt set v0='X83G5NATI1WK2ACTAVJWJDEVVR5F1' where id=7; -update noar ti set v0='X83G5NATI1WK2ACTAVJWJDEVVR5F1' where id=7; -update noar tt set b1='TOU8LL26' where id=7; -update noar ti set b1='TOU8LL26' where id=7; -update noar tt set v0='O' where id=7; -update noar ti set v0='O' where id=7; -update noar tt set b2='0' where id=7; -update noar ti set b2='0' where id=7; -update noar tt set v0='1S6QQV39EM80' where id=8; -update noar ti set v0='1S6QQV39EM80' where id=8; -update noar tt set b0='0F12G0Z9M7J1RA9UTE2A' where id=8; -update noar ti set b0='0F12G0Z9M7J1RA9UTE2A' where id=8; -update noar tt set v0='STFID1XJJTZUT6RC8X6OMF' where id=8; -update noar ti set v0='STFID1XJJTZUT6RC8X6OMF' where id=8; -update noar tt set b1='51F' where id=8; -update noar ti set b1='51F' where id=8; -update noar tt set v0='O4Z421BB16A6ROXPQKYYWYDY7BHHNUO' where id=8; -update noar ti set v0='O4Z421BB16A6ROXPQKYYWYDY7BHHNUO' where id=8; -update noar tt set b2='7Z6' where id=8; -update noar ti set b2='7Z6' where id=8; -update noar tt set v0='ZYSI' where id=9; -update noar ti set v0='ZYSI' where id=9; -update noar tt set b0='3YEINTO537GEUG03K000RZAYH5Z' where id=9; -update noar ti set b0='3YEINTO537GEUG03K000RZAYH5Z' where id=9; -update noar tt set v0='LSUOEYIHZP2PTA' where id=9; -update noar ti set v0='LSUOEYIHZP2PTA' where id=9; -update noar tt set b1='QDV3MRPS' where id=9; -update noar ti set b1='QDV3MRPS' where id=9; -update noar tt set v0='H50G3PABPMQ6I94LAQAB3N8Y9MA6BVO' where id=9; -update noar ti set v0='H50G3PABPMQ6I94LAQAB3N8Y9MA6BVO' where id=9; -update noar tt set b2='JPGM3T05Z6VFU29585DR' where id=9; -update noar ti set b2='JPGM3T05Z6VFU29585DR' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 longblob null, -b1 longblob null, -b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='6' where id=1; -update noar ti set v0='6' where id=1; -update noar tt set b0='US4ATMUKEBZM' where id=1; -update noar ti set b0='US4ATMUKEBZM' where id=1; -update noar tt set v0='PO671AYD4PNRQM' where id=1; -update noar ti set v0='PO671AYD4PNRQM' where id=1; -update noar tt set b1='6' where id=1; -update noar ti set b1='6' where id=1; -update noar tt set v0='Y0YKCBOJQ0SPEX0IV6' where id=1; -update noar ti set v0='Y0YKCBOJQ0SPEX0IV6' where id=1; -update noar tt set b2='90E9F' where id=1; -update noar ti set b2='90E9F' where id=1; -update noar tt set v0='WGN4E92CYV4LE3P59S' where id=2; -update noar ti set v0='WGN4E92CYV4LE3P59S' where id=2; -update noar tt set b0='3XJPS7CAN4WRL6527MULO9H8MJ' where id=2; -update noar ti set b0='3XJPS7CAN4WRL6527MULO9H8MJ' where id=2; -update noar tt set v0='KC067CC836LE9C40X7IY6HXPPT' where id=2; -update noar ti set v0='KC067CC836LE9C40X7IY6HXPPT' where id=2; -update noar tt set b1='9238' where id=2; -update noar ti set b1='9238' where id=2; -update noar tt set v0='4KHWURCRKU0ULXCBPIFQEC' where id=2; -update noar ti set v0='4KHWURCRKU0ULXCBPIFQEC' where id=2; -update noar tt set b2='G' where id=2; -update noar ti set b2='G' where id=2; -update noar tt set v0='1NJ7LM61CXS9NQFE7' where id=3; -update noar ti set v0='1NJ7LM61CXS9NQFE7' where id=3; -update noar tt set b0='IX8U1Q3NTKH79B4GSIFT63RK' where id=3; -update noar ti set b0='IX8U1Q3NTKH79B4GSIFT63RK' where id=3; -update noar tt set v0='ZQ685LDAPNZ0MEXGNE9JZ' where id=3; -update noar ti set v0='ZQ685LDAPNZ0MEXGNE9JZ' where id=3; -update noar tt set b1='ZISHL16ER9XK84O4NCKGSC97D4' where id=3; -update noar ti set b1='ZISHL16ER9XK84O4NCKGSC97D4' where id=3; -update noar tt set v0='8' where id=3; -update noar ti set v0='8' where id=3; -update noar tt set b2='RL6JWGO77OXZKLZTHJCE1' where id=3; -update noar ti set b2='RL6JWGO77OXZKLZTHJCE1' where id=3; -update noar tt set v0='KFCF4Y6KMBUIF' where id=4; -update noar ti set v0='KFCF4Y6KMBUIF' where id=4; -update noar tt set b0='4ZT4VCBLOKZH2ETNQQNTP5KV0Y' where id=4; -update noar ti set b0='4ZT4VCBLOKZH2ETNQQNTP5KV0Y' where id=4; -update noar tt set v0='DDOG' where id=4; -update noar ti set v0='DDOG' where id=4; -update noar tt set b1='2UVOD1LZXJGNYDMB' where id=4; -update noar ti set b1='2UVOD1LZXJGNYDMB' where id=4; -update noar tt set v0='SI4REPI8A3JVD21S8JX4HV3YZG1PY3VP' where id=4; -update noar ti set v0='SI4REPI8A3JVD21S8JX4HV3YZG1PY3VP' where id=4; -update noar tt set b2='ZEJ2TRU6LNKLCAHHMAA' where id=4; -update noar ti set b2='ZEJ2TRU6LNKLCAHHMAA' where id=4; -update noar tt set v0='RD42DBX0M0HN5KTZ4BUR6' where id=5; -update noar ti set v0='RD42DBX0M0HN5KTZ4BUR6' where id=5; -update noar tt set b0='Z9E520' where id=5; -update noar ti set b0='Z9E520' where id=5; -update noar tt set v0='0OYSU4Q' where id=5; -update noar ti set v0='0OYSU4Q' where id=5; -update noar tt set b1='7MKYBQJHOO8WC' where id=5; -update noar ti set b1='7MKYBQJHOO8WC' where id=5; -update noar tt set v0='8T6JWTZ6B' where id=5; -update noar ti set v0='8T6JWTZ6B' where id=5; -update noar tt set b2='83H80G45GR3' where id=5; -update noar ti set b2='83H80G45GR3' where id=5; -update noar tt set v0='5DJEHJ4JTX58WUTE' where id=6; -update noar ti set v0='5DJEHJ4JTX58WUTE' where id=6; -update noar tt set b0='JGZT2QS37N9ZEE2SCHI66NGBGNQG87' where id=6; -update noar ti set b0='JGZT2QS37N9ZEE2SCHI66NGBGNQG87' where id=6; -update noar tt set v0='S2UH3F6TXP' where id=6; -update noar ti set v0='S2UH3F6TXP' where id=6; -update noar tt set b1='WQUCJVWWZ14KF' where id=6; -update noar ti set b1='WQUCJVWWZ14KF' where id=6; -update noar tt set v0='UMQ2PJ' where id=6; -update noar ti set v0='UMQ2PJ' where id=6; -update noar tt set b2='CS9M' where id=6; -update noar ti set b2='CS9M' where id=6; -update noar tt set v0='M0Y6KKWGSPE' where id=7; -update noar ti set v0='M0Y6KKWGSPE' where id=7; -update noar tt set b0='4DA5MTAB4N' where id=7; -update noar ti set b0='4DA5MTAB4N' where id=7; -update noar tt set v0='2ARPR017U' where id=7; -update noar ti set v0='2ARPR017U' where id=7; -update noar tt set b1='WB' where id=7; -update noar ti set b1='WB' where id=7; -update noar tt set v0='P0NJ8KPKEFXRR3GCWWY' where id=7; -update noar ti set v0='P0NJ8KPKEFXRR3GCWWY' where id=7; -update noar tt set b2='7GA3' where id=7; -update noar ti set b2='7GA3' where id=7; -update noar tt set v0='18XC4VQW6' where id=8; -update noar ti set v0='18XC4VQW6' where id=8; -update noar tt set b0='V7A4EM87' where id=8; -update noar ti set b0='V7A4EM87' where id=8; -update noar tt set v0='GSDWAGS2XMRFUVKS8Y5NQWLWM5IM4S1B' where id=8; -update noar ti set v0='GSDWAGS2XMRFUVKS8Y5NQWLWM5IM4S1B' where id=8; -update noar tt set b1='CFFZDJSJJQ3C32XVOE9HQ4T' where id=8; -update noar ti set b1='CFFZDJSJJQ3C32XVOE9HQ4T' where id=8; -update noar tt set v0='DZK8O9BTTIWEU7XN84YDESY61' where id=8; -update noar ti set v0='DZK8O9BTTIWEU7XN84YDESY61' where id=8; -update noar tt set b2='3XR7V98QU8SKOPGKXY' where id=8; -update noar ti set b2='3XR7V98QU8SKOPGKXY' where id=8; -update noar tt set v0='FYMG57DSX4PKN60AF7KFIEFZK5XBUG2' where id=9; -update noar ti set v0='FYMG57DSX4PKN60AF7KFIEFZK5XBUG2' where id=9; -update noar tt set b0='3KF' where id=9; -update noar ti set b0='3KF' where id=9; -update noar tt set v0='QJ4' where id=9; -update noar ti set v0='QJ4' where id=9; -update noar tt set b1='7H752FL6HSZ6QCYPPKB8X9Q3MSD' where id=9; -update noar ti set b1='7H752FL6HSZ6QCYPPKB8X9Q3MSD' where id=9; -update noar tt set v0='01H2432K4ELT78BCC5T43VN' where id=9; -update noar ti set v0='01H2432K4ELT78BCC5T43VN' where id=9; -update noar tt set b2='CSN100AKXU2UTC0SKPUHT6D7Q5DOX' where id=9; -update noar ti set b2='CSN100AKXU2UTC0SKPUHT6D7Q5DOX' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 longblob not null, -b1 longblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='F3R16IWBI1' where id=1; -update noar ti set v0='F3R16IWBI1' where id=1; -update noar tt set b0='0BNGO0FHP' where id=1; -update noar ti set b0='0BNGO0FHP' where id=1; -update noar tt set v0='GRTFJROM63ED8P8C8QXV98' where id=1; -update noar ti set v0='GRTFJROM63ED8P8C8QXV98' where id=1; -update noar tt set b1='NE7EGR10V3AEJPHMOKOPJAU17N5K' where id=1; -update noar ti set b1='NE7EGR10V3AEJPHMOKOPJAU17N5K' where id=1; -update noar tt set v0='BD4AHS' where id=1; -update noar ti set v0='BD4AHS' where id=1; -update noar tt set b2='R23B3AF19AC9YE' where id=1; -update noar ti set b2='R23B3AF19AC9YE' where id=1; -update noar tt set v0='3XLCF7QRZCAW1K8F90' where id=2; -update noar ti set v0='3XLCF7QRZCAW1K8F90' where id=2; -update noar tt set b0='IBA8CC5BQCVCSGVZG' where id=2; -update noar ti set b0='IBA8CC5BQCVCSGVZG' where id=2; -update noar tt set v0='UR1UEW9X58ZK3LB4KE2AQ' where id=2; -update noar ti set v0='UR1UEW9X58ZK3LB4KE2AQ' where id=2; -update noar tt set b1='U41DLMCW8' where id=2; -update noar ti set b1='U41DLMCW8' where id=2; -update noar tt set v0='0E703N2IH3ZBEKNR7R3J' where id=2; -update noar ti set v0='0E703N2IH3ZBEKNR7R3J' where id=2; -update noar tt set b2='OZ5PX8VJGD1L3094FKJDOZOW1D2' where id=2; -update noar ti set b2='OZ5PX8VJGD1L3094FKJDOZOW1D2' where id=2; -update noar tt set v0='7ZG2WNP5K5Z3HH7T6U8LJT91' where id=3; -update noar ti set v0='7ZG2WNP5K5Z3HH7T6U8LJT91' where id=3; -update noar tt set b0='HG4DF0D4BP15FNBIVIQ2KCWLMFQI' where id=3; -update noar ti set b0='HG4DF0D4BP15FNBIVIQ2KCWLMFQI' where id=3; -update noar tt set v0='TV3E8S9' where id=3; -update noar ti set v0='TV3E8S9' where id=3; -update noar tt set b1='XO037GKYSAGDK26NTX2JIYVR6' where id=3; -update noar ti set b1='XO037GKYSAGDK26NTX2JIYVR6' where id=3; -update noar tt set v0='UGFO65AWN0EJZUT3COQPLSEHN6' where id=3; -update noar ti set v0='UGFO65AWN0EJZUT3COQPLSEHN6' where id=3; -update noar tt set b2='PD46IS543T' where id=3; -update noar ti set b2='PD46IS543T' where id=3; -update noar tt set v0='S6JUY3V9' where id=4; -update noar ti set v0='S6JUY3V9' where id=4; -update noar tt set b0='FBRYCZ06YHTNN1YDLYACW7SSR5EHEQS' where id=4; -update noar ti set b0='FBRYCZ06YHTNN1YDLYACW7SSR5EHEQS' where id=4; -update noar tt set v0='EE7X2LFKGKW' where id=4; -update noar ti set v0='EE7X2LFKGKW' where id=4; -update noar tt set b1='7' where id=4; -update noar ti set b1='7' where id=4; -update noar tt set v0='5A9' where id=4; -update noar ti set v0='5A9' where id=4; -update noar tt set b2='IYZ2Q6VZREMCZRO4SAS4DOUJ7QGTNVP' where id=4; -update noar ti set b2='IYZ2Q6VZREMCZRO4SAS4DOUJ7QGTNVP' where id=4; -update noar tt set v0='B0CHY56DVWKWY8F8IC7TTTZMSOP1' where id=5; -update noar ti set v0='B0CHY56DVWKWY8F8IC7TTTZMSOP1' where id=5; -update noar tt set b0='2SASR7' where id=5; -update noar ti set b0='2SASR7' where id=5; -update noar tt set v0='XKISCEET6LG' where id=5; -update noar ti set v0='XKISCEET6LG' where id=5; -update noar tt set b1='DR9GPRNQH9KEV0LYG3F3' where id=5; -update noar ti set b1='DR9GPRNQH9KEV0LYG3F3' where id=5; -update noar tt set v0='II7LOD36CAR2HNTGBENX' where id=5; -update noar ti set v0='II7LOD36CAR2HNTGBENX' where id=5; -update noar tt set b2='MBY5RCYSH' where id=5; -update noar ti set b2='MBY5RCYSH' where id=5; -update noar tt set v0='GVJWR7KC9TCY2KIR4I5YW' where id=6; -update noar ti set v0='GVJWR7KC9TCY2KIR4I5YW' where id=6; -update noar tt set b0='L0570NIN17TQ0VKC' where id=6; -update noar ti set b0='L0570NIN17TQ0VKC' where id=6; -update noar tt set v0='7O7JSUFYHN0S4WRCDIRD' where id=6; -update noar ti set v0='7O7JSUFYHN0S4WRCDIRD' where id=6; -update noar tt set b1='NFSIFRK126XXUNAG38MMX6Q5QOEZ0W' where id=6; -update noar ti set b1='NFSIFRK126XXUNAG38MMX6Q5QOEZ0W' where id=6; -update noar tt set v0='NSP' where id=6; -update noar ti set v0='NSP' where id=6; -update noar tt set b2='IYI1B13P3D0B7JJCN' where id=6; -update noar ti set b2='IYI1B13P3D0B7JJCN' where id=6; -update noar tt set v0='JXC4' where id=7; -update noar ti set v0='JXC4' where id=7; -update noar tt set b0='XPQTVJGJ8TNR3YT0D' where id=7; -update noar ti set b0='XPQTVJGJ8TNR3YT0D' where id=7; -update noar tt set v0='CUN4NTDZKRXWS5Q9M7CER' where id=7; -update noar ti set v0='CUN4NTDZKRXWS5Q9M7CER' where id=7; -update noar tt set b1='G8DHXTSGNXUW' where id=7; -update noar ti set b1='G8DHXTSGNXUW' where id=7; -update noar tt set v0='SUPO4N75K8' where id=7; -update noar ti set v0='SUPO4N75K8' where id=7; -update noar tt set b2='MRHFYKI' where id=7; -update noar ti set b2='MRHFYKI' where id=7; -update noar tt set v0='MTC5F1VCOEHNDPRY' where id=8; -update noar ti set v0='MTC5F1VCOEHNDPRY' where id=8; -update noar tt set b0='Z2551V8D2' where id=8; -update noar ti set b0='Z2551V8D2' where id=8; -update noar tt set v0='C034Y5CZBZ28RLGCK3XUO' where id=8; -update noar ti set v0='C034Y5CZBZ28RLGCK3XUO' where id=8; -update noar tt set b1='FXDRZE82LX' where id=8; -update noar ti set b1='FXDRZE82LX' where id=8; -update noar tt set v0='MHSJFLU' where id=8; -update noar ti set v0='MHSJFLU' where id=8; -update noar tt set b2='G6YUGUA83DX3X7F2YMO5P4L5' where id=8; -update noar ti set b2='G6YUGUA83DX3X7F2YMO5P4L5' where id=8; -update noar tt set v0='4RSFIHB7O0' where id=9; -update noar ti set v0='4RSFIHB7O0' where id=9; -update noar tt set b0='9TA' where id=9; -update noar ti set b0='9TA' where id=9; -update noar tt set v0='4XPAK' where id=9; -update noar ti set v0='4XPAK' where id=9; -update noar tt set b1='VFP2O' where id=9; -update noar ti set b1='VFP2O' where id=9; -update noar tt set v0='YSZFP4XUUNYF7HLHH9RR' where id=9; -update noar ti set v0='YSZFP4XUUNYF7HLHH9RR' where id=9; -update noar tt set b2='OZ92E63NCPEC9J2' where id=9; -update noar ti set b2='OZ92E63NCPEC9J2' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 longblob not null, -b1 longblob not null, -b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='NP4IKXAT99YOZVHRFT' where id=1; -update noar ti set v0='NP4IKXAT99YOZVHRFT' where id=1; -update noar tt set b0='Y7SYCX8W3' where id=1; -update noar ti set b0='Y7SYCX8W3' where id=1; -update noar tt set v0='C3H85HL2VOQ7KOPFHVW' where id=1; -update noar ti set v0='C3H85HL2VOQ7KOPFHVW' where id=1; -update noar tt set b1='ZBRD2' where id=1; -update noar ti set b1='ZBRD2' where id=1; -update noar tt set v0='D94' where id=1; -update noar ti set v0='D94' where id=1; -update noar tt set b2='Q45AV1HPLZZXZCIJQNC75IW9AVQ500JP' where id=1; -update noar ti set b2='Q45AV1HPLZZXZCIJQNC75IW9AVQ500JP' where id=1; -update noar tt set v0='0TQX0E5QUPPJEWPA075R3XZW2XNA' where id=2; -update noar ti set v0='0TQX0E5QUPPJEWPA075R3XZW2XNA' where id=2; -update noar tt set b0='4IRR5MMCRE9EHZV9TC7Z6CAPQNC1DD5H' where id=2; -update noar ti set b0='4IRR5MMCRE9EHZV9TC7Z6CAPQNC1DD5H' where id=2; -update noar tt set v0='BMYDWE8N65CZUXJMUJLQSRZO8YBF' where id=2; -update noar ti set v0='BMYDWE8N65CZUXJMUJLQSRZO8YBF' where id=2; -update noar tt set b1='QJZ' where id=2; -update noar ti set b1='QJZ' where id=2; -update noar tt set v0='I0KEDT2TTTC9WC4E0X2V3ZQOMMK' where id=2; -update noar ti set v0='I0KEDT2TTTC9WC4E0X2V3ZQOMMK' where id=2; -update noar tt set b2='B96X7N' where id=2; -update noar ti set b2='B96X7N' where id=2; -update noar tt set v0='9OA0JWUY9NYTZRO37SSYS49GJI7E14JU' where id=3; -update noar ti set v0='9OA0JWUY9NYTZRO37SSYS49GJI7E14JU' where id=3; -update noar tt set b0='T' where id=3; -update noar ti set b0='T' where id=3; -update noar tt set v0='Q6PD5P39JFEDMLL8TQTYAH1Y' where id=3; -update noar ti set v0='Q6PD5P39JFEDMLL8TQTYAH1Y' where id=3; -update noar tt set b1='SEQL908JJ3' where id=3; -update noar ti set b1='SEQL908JJ3' where id=3; -update noar tt set v0='94DWF5EFS2GAA6XADVR2Y' where id=3; -update noar ti set v0='94DWF5EFS2GAA6XADVR2Y' where id=3; -update noar tt set b2='6KW' where id=3; -update noar ti set b2='6KW' where id=3; -update noar tt set v0='DYAW77E3ZXD6N6PDS0HLFPUKQH4' where id=4; -update noar ti set v0='DYAW77E3ZXD6N6PDS0HLFPUKQH4' where id=4; -update noar tt set b0='97CC0OR4GU5YW34O9G3WE' where id=4; -update noar ti set b0='97CC0OR4GU5YW34O9G3WE' where id=4; -update noar tt set v0='G4C05B3MZO2QV00LI54DTFWFTJ77N652' where id=4; -update noar ti set v0='G4C05B3MZO2QV00LI54DTFWFTJ77N652' where id=4; -update noar tt set b1='2I04' where id=4; -update noar ti set b1='2I04' where id=4; -update noar tt set v0='XB7YSPC1' where id=4; -update noar ti set v0='XB7YSPC1' where id=4; -update noar tt set b2='ZI' where id=4; -update noar ti set b2='ZI' where id=4; -update noar tt set v0='4ORML134L4E7OV1' where id=5; -update noar ti set v0='4ORML134L4E7OV1' where id=5; -update noar tt set b0='0JQN0BUBFCF3LVNHIULT80SJMA1OB9A8' where id=5; -update noar ti set b0='0JQN0BUBFCF3LVNHIULT80SJMA1OB9A8' where id=5; -update noar tt set v0='6WNA1' where id=5; -update noar ti set v0='6WNA1' where id=5; -update noar tt set b1='KH2N21FZBVVNXT' where id=5; -update noar ti set b1='KH2N21FZBVVNXT' where id=5; -update noar tt set v0='71NU42PJCX40QBX' where id=5; -update noar ti set v0='71NU42PJCX40QBX' where id=5; -update noar tt set b2='OKT389OSLS8FGB4QWOHEJMKZQI751P' where id=5; -update noar ti set b2='OKT389OSLS8FGB4QWOHEJMKZQI751P' where id=5; -update noar tt set v0='DAFL6DFK' where id=6; -update noar ti set v0='DAFL6DFK' where id=6; -update noar tt set b0='TC0Y' where id=6; -update noar ti set b0='TC0Y' where id=6; -update noar tt set v0='PAP5Q5FU41ZKMAYUOU0Q50NOXKTQI' where id=6; -update noar ti set v0='PAP5Q5FU41ZKMAYUOU0Q50NOXKTQI' where id=6; -update noar tt set b1='5LPAKVBZ6H9QA24' where id=6; -update noar ti set b1='5LPAKVBZ6H9QA24' where id=6; -update noar tt set v0='ZITMKAM5BP9YCF0K' where id=6; -update noar ti set v0='ZITMKAM5BP9YCF0K' where id=6; -update noar tt set b2='KV6I8KFCOK' where id=6; -update noar ti set b2='KV6I8KFCOK' where id=6; -update noar tt set v0='3E559JVFAS' where id=7; -update noar ti set v0='3E559JVFAS' where id=7; -update noar tt set b0='3KSY9DVQRV95BIS5C7QNRXPB6' where id=7; -update noar ti set b0='3KSY9DVQRV95BIS5C7QNRXPB6' where id=7; -update noar tt set v0='WWJL5UQ' where id=7; -update noar ti set v0='WWJL5UQ' where id=7; -update noar tt set b1='KWL1BKB1L07N797' where id=7; -update noar ti set b1='KWL1BKB1L07N797' where id=7; -update noar tt set v0='4HFM5SHP3WNPI9J51JNBQPYBVR' where id=7; -update noar ti set v0='4HFM5SHP3WNPI9J51JNBQPYBVR' where id=7; -update noar tt set b2='GUI7C' where id=7; -update noar ti set b2='GUI7C' where id=7; -update noar tt set v0='249V3Y78FFR2WB6UYWTY' where id=8; -update noar ti set v0='249V3Y78FFR2WB6UYWTY' where id=8; -update noar tt set b0='HY5ECNKUT2FI' where id=8; -update noar ti set b0='HY5ECNKUT2FI' where id=8; -update noar tt set v0='4HU4W7R10OMZSZO21X2' where id=8; -update noar ti set v0='4HU4W7R10OMZSZO21X2' where id=8; -update noar tt set b1='D67TG1' where id=8; -update noar ti set b1='D67TG1' where id=8; -update noar tt set v0='4ZN6MOOH3K4UAA55MK7PLQ1MPE' where id=8; -update noar ti set v0='4ZN6MOOH3K4UAA55MK7PLQ1MPE' where id=8; -update noar tt set b2='3151T5O' where id=8; -update noar ti set b2='3151T5O' where id=8; -update noar tt set v0='6HFX' where id=9; -update noar ti set v0='6HFX' where id=9; -update noar tt set b0='FUNLX89' where id=9; -update noar ti set b0='FUNLX89' where id=9; -update noar tt set v0='0JQV4OSSB6VPP9TJDUO1IUHAO8FEXU' where id=9; -update noar ti set v0='0JQV4OSSB6VPP9TJDUO1IUHAO8FEXU' where id=9; -update noar tt set b1='O87L8MBFS6SRJ2J4U9K' where id=9; -update noar ti set b1='O87L8MBFS6SRJ2J4U9K' where id=9; -update noar tt set v0='NLKEWRS0SKVW2KJF7M1EJTF0Y' where id=9; -update noar ti set v0='NLKEWRS0SKVW2KJF7M1EJTF0Y' where id=9; -update noar tt set b2='R7PGHEL' where id=9; -update noar ti set b2='R7PGHEL' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 longblob null, -b1 longblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='F72NWFY051JONVM1E4N4' where id=1; -update noar ti set v0='F72NWFY051JONVM1E4N4' where id=1; -update noar tt set b0='YKE1' where id=1; -update noar ti set b0='YKE1' where id=1; -update noar tt set v0='CXGL1OZJ5' where id=1; -update noar ti set v0='CXGL1OZJ5' where id=1; -update noar tt set b1='SOERUCNZTM1NTX1OASE7EI2L' where id=1; -update noar ti set b1='SOERUCNZTM1NTX1OASE7EI2L' where id=1; -update noar tt set v0='62DTN052LY5T7DKUG22YHGM' where id=1; -update noar ti set v0='62DTN052LY5T7DKUG22YHGM' where id=1; -update noar tt set b2='YFDP5VKSGP3QA3B' where id=1; -update noar ti set b2='YFDP5VKSGP3QA3B' where id=1; -update noar tt set v0='YH06LB1JEHMHO3U4EULLC69LK' where id=2; -update noar ti set v0='YH06LB1JEHMHO3U4EULLC69LK' where id=2; -update noar tt set b0='MQZBZP' where id=2; -update noar ti set b0='MQZBZP' where id=2; -update noar tt set v0='JFYGTWN40CT45B7GGYUTR' where id=2; -update noar ti set v0='JFYGTWN40CT45B7GGYUTR' where id=2; -update noar tt set b1='A8IAETVWRULGUMQX2E' where id=2; -update noar ti set b1='A8IAETVWRULGUMQX2E' where id=2; -update noar tt set v0='LJM4LCIEQ4WA61CL' where id=2; -update noar ti set v0='LJM4LCIEQ4WA61CL' where id=2; -update noar tt set b2='AJNR9KA606I0WEINCS1RLZ0M8208K' where id=2; -update noar ti set b2='AJNR9KA606I0WEINCS1RLZ0M8208K' where id=2; -update noar tt set v0='GUFJ' where id=3; -update noar ti set v0='GUFJ' where id=3; -update noar tt set b0='FMZ7LUVCL' where id=3; -update noar ti set b0='FMZ7LUVCL' where id=3; -update noar tt set v0='IGZA3P9YU6BLG44' where id=3; -update noar ti set v0='IGZA3P9YU6BLG44' where id=3; -update noar tt set b1='0AHRCNFSY928W' where id=3; -update noar ti set b1='0AHRCNFSY928W' where id=3; -update noar tt set v0='1LBZ3F4M' where id=3; -update noar ti set v0='1LBZ3F4M' where id=3; -update noar tt set b2='NM6YBTZN8WTGGAL4ZE' where id=3; -update noar ti set b2='NM6YBTZN8WTGGAL4ZE' where id=3; -update noar tt set v0='WSK' where id=4; -update noar ti set v0='WSK' where id=4; -update noar tt set b0='4IMKPEC354BD' where id=4; -update noar ti set b0='4IMKPEC354BD' where id=4; -update noar tt set v0='9KEY9LRGNX45UJ4MVAB5Y629B5VCJCH' where id=4; -update noar ti set v0='9KEY9LRGNX45UJ4MVAB5Y629B5VCJCH' where id=4; -update noar tt set b1='O8QEPCSCVG4TN8RE0P00M' where id=4; -update noar ti set b1='O8QEPCSCVG4TN8RE0P00M' where id=4; -update noar tt set v0='CDHA8OVJSBNV2' where id=4; -update noar ti set v0='CDHA8OVJSBNV2' where id=4; -update noar tt set b2='83TIOFSKYE89SBDFE7PPIC3IN1KQULT' where id=4; -update noar ti set b2='83TIOFSKYE89SBDFE7PPIC3IN1KQULT' where id=4; -update noar tt set v0='PDNQREAX4YAFDZST4' where id=5; -update noar ti set v0='PDNQREAX4YAFDZST4' where id=5; -update noar tt set b0='D3' where id=5; -update noar ti set b0='D3' where id=5; -update noar tt set v0='2WQ3NXOXYKC63AGL9JPA6H9FJP0P' where id=5; -update noar ti set v0='2WQ3NXOXYKC63AGL9JPA6H9FJP0P' where id=5; -update noar tt set b1='ONWN6' where id=5; -update noar ti set b1='ONWN6' where id=5; -update noar tt set v0='Z63OYWP1' where id=5; -update noar ti set v0='Z63OYWP1' where id=5; -update noar tt set b2='08GFNMGE2CN569GFG0ZO4IOCIEJRQ6E' where id=5; -update noar ti set b2='08GFNMGE2CN569GFG0ZO4IOCIEJRQ6E' where id=5; -update noar tt set v0='F11EJ73DUP397PSBXDZEJ7Z' where id=6; -update noar ti set v0='F11EJ73DUP397PSBXDZEJ7Z' where id=6; -update noar tt set b0='68ITH8MZV5VM3FGPKJ5EK1PGCO3MA' where id=6; -update noar ti set b0='68ITH8MZV5VM3FGPKJ5EK1PGCO3MA' where id=6; -update noar tt set v0='KNEK' where id=6; -update noar ti set v0='KNEK' where id=6; -update noar tt set b1='EBLGZXZL362MTG38JZGQU8JQ' where id=6; -update noar ti set b1='EBLGZXZL362MTG38JZGQU8JQ' where id=6; -update noar tt set v0='21DPG0O26YEMF722QXIOHI' where id=6; -update noar ti set v0='21DPG0O26YEMF722QXIOHI' where id=6; -update noar tt set b2='U9LV8NADTRY35NL17HWW137' where id=6; -update noar ti set b2='U9LV8NADTRY35NL17HWW137' where id=6; -update noar tt set v0='UAC629SBMJLSN1QR1M' where id=7; -update noar ti set v0='UAC629SBMJLSN1QR1M' where id=7; -update noar tt set b0='LWIQ3DHPERZ8GW9YCL644FS7L53T' where id=7; -update noar ti set b0='LWIQ3DHPERZ8GW9YCL644FS7L53T' where id=7; -update noar tt set v0='KHDNXO0YUBC' where id=7; -update noar ti set v0='KHDNXO0YUBC' where id=7; -update noar tt set b1='1DYRKIZMDUTKHR009JNJ0TSKYUSVQCT' where id=7; -update noar ti set b1='1DYRKIZMDUTKHR009JNJ0TSKYUSVQCT' where id=7; -update noar tt set v0='1TP2B6JG4GHVDR05QNTVFFIBV2YT' where id=7; -update noar ti set v0='1TP2B6JG4GHVDR05QNTVFFIBV2YT' where id=7; -update noar tt set b2='1N' where id=7; -update noar ti set b2='1N' where id=7; -update noar tt set v0='EPHKTPAMZSO9VD' where id=8; -update noar ti set v0='EPHKTPAMZSO9VD' where id=8; -update noar tt set b0='UCTP1PB4S37LMC11O4SG' where id=8; -update noar ti set b0='UCTP1PB4S37LMC11O4SG' where id=8; -update noar tt set v0='Z72ZKRJ80GXAKD9XC' where id=8; -update noar ti set v0='Z72ZKRJ80GXAKD9XC' where id=8; -update noar tt set b1='424GFORQPN7IFY9WXF75' where id=8; -update noar ti set b1='424GFORQPN7IFY9WXF75' where id=8; -update noar tt set v0='DXL2TJAZ76S' where id=8; -update noar ti set v0='DXL2TJAZ76S' where id=8; -update noar tt set b2='7VMAGJF9654ODDIF6Y' where id=8; -update noar ti set b2='7VMAGJF9654ODDIF6Y' where id=8; -update noar tt set v0='PE2LA6KP2AQ3XYZ16XVL4GFE' where id=9; -update noar ti set v0='PE2LA6KP2AQ3XYZ16XVL4GFE' where id=9; -update noar tt set b0='Q620B3726' where id=9; -update noar ti set b0='Q620B3726' where id=9; -update noar tt set v0='LSZK5M0CR46TQM7J7202' where id=9; -update noar ti set v0='LSZK5M0CR46TQM7J7202' where id=9; -update noar tt set b1='PN1AEX4113G2MWG6T2TE749' where id=9; -update noar ti set b1='PN1AEX4113G2MWG6T2TE749' where id=9; -update noar tt set v0='05CRYOREIPFEI2TTFVQ4SD4GLU7EL9' where id=9; -update noar ti set v0='05CRYOREIPFEI2TTFVQ4SD4GLU7EL9' where id=9; -update noar tt set b2='9AMN88PAHTXOJT780AOVYR4' where id=9; -update noar ti set b2='9AMN88PAHTXOJT780AOVYR4' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 longblob null, -b1 longblob null, -b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='APLZI' where id=1; -update noar ti set v0='APLZI' where id=1; -update noar tt set b0='S9MZ4WBPJ1ELTXHYXU6751NX165H9K' where id=1; -update noar ti set b0='S9MZ4WBPJ1ELTXHYXU6751NX165H9K' where id=1; -update noar tt set v0='I4V63LCSQ' where id=1; -update noar ti set v0='I4V63LCSQ' where id=1; -update noar tt set b1='MHQJC9NV7C8Y0XM' where id=1; -update noar ti set b1='MHQJC9NV7C8Y0XM' where id=1; -update noar tt set v0='R0Q5TLCM4E' where id=1; -update noar ti set v0='R0Q5TLCM4E' where id=1; -update noar tt set b2='01W3U47FLDXU' where id=1; -update noar ti set b2='01W3U47FLDXU' where id=1; -update noar tt set v0='A4U7B4LAI3FDVAT7UG25TZATDXYT' where id=2; -update noar ti set v0='A4U7B4LAI3FDVAT7UG25TZATDXYT' where id=2; -update noar tt set b0='H19OVWEIZV0L4ZPU' where id=2; -update noar ti set b0='H19OVWEIZV0L4ZPU' where id=2; -update noar tt set v0='8QXDGL1YI17WMRX2X8' where id=2; -update noar ti set v0='8QXDGL1YI17WMRX2X8' where id=2; -update noar tt set b1='SNSJ1OA' where id=2; -update noar ti set b1='SNSJ1OA' where id=2; -update noar tt set v0='ACAKCLR0Z' where id=2; -update noar ti set v0='ACAKCLR0Z' where id=2; -update noar tt set b2='GKW8' where id=2; -update noar ti set b2='GKW8' where id=2; -update noar tt set v0='GORMU1E6O4SZF5N' where id=3; -update noar ti set v0='GORMU1E6O4SZF5N' where id=3; -update noar tt set b0='0B1QFQWK4QIYQUD9YLN6' where id=3; -update noar ti set b0='0B1QFQWK4QIYQUD9YLN6' where id=3; -update noar tt set v0='M4F2ZS8S5ED6' where id=3; -update noar ti set v0='M4F2ZS8S5ED6' where id=3; -update noar tt set b1='19PJZNZ7XSTA4F218O204ZI1R4' where id=3; -update noar ti set b1='19PJZNZ7XSTA4F218O204ZI1R4' where id=3; -update noar tt set v0='AR8GF7OXRV3VYBOG8ECQLP64S7' where id=3; -update noar ti set v0='AR8GF7OXRV3VYBOG8ECQLP64S7' where id=3; -update noar tt set b2='JXRWRAFA0XCIEC6HIW9HG27C' where id=3; -update noar ti set b2='JXRWRAFA0XCIEC6HIW9HG27C' where id=3; -update noar tt set v0='Z3XLULRTTIJYE86ZZ1LFLU3Z' where id=4; -update noar ti set v0='Z3XLULRTTIJYE86ZZ1LFLU3Z' where id=4; -update noar tt set b0='1' where id=4; -update noar ti set b0='1' where id=4; -update noar tt set v0='225NUVBNSANXY8FXQ' where id=4; -update noar ti set v0='225NUVBNSANXY8FXQ' where id=4; -update noar tt set b1='40CCS0V14AQYGU3HUV0' where id=4; -update noar ti set b1='40CCS0V14AQYGU3HUV0' where id=4; -update noar tt set v0='XE9IQE9RG5F0F' where id=4; -update noar ti set v0='XE9IQE9RG5F0F' where id=4; -update noar tt set b2='YU5YRK0M3JA5U4FHN1XJUMVFGW' where id=4; -update noar ti set b2='YU5YRK0M3JA5U4FHN1XJUMVFGW' where id=4; -update noar tt set v0='THQDSFZFBIRX1QA0I2QLMDO5ZCCGPLRI' where id=5; -update noar ti set v0='THQDSFZFBIRX1QA0I2QLMDO5ZCCGPLRI' where id=5; -update noar tt set b0='157GH41KBMXQ1NB86SI8' where id=5; -update noar ti set b0='157GH41KBMXQ1NB86SI8' where id=5; -update noar tt set v0='E69RBLXP6GE3SZ7NA1Y8' where id=5; -update noar ti set v0='E69RBLXP6GE3SZ7NA1Y8' where id=5; -update noar tt set b1='CJI5CKES00ZEUFRDICA67' where id=5; -update noar ti set b1='CJI5CKES00ZEUFRDICA67' where id=5; -update noar tt set v0='I0P6UW01XIQ3WUNIR' where id=5; -update noar ti set v0='I0P6UW01XIQ3WUNIR' where id=5; -update noar tt set b2='E7' where id=5; -update noar ti set b2='E7' where id=5; -update noar tt set v0='5CWTITYB30POBA565D17PZGT1TFT311' where id=6; -update noar ti set v0='5CWTITYB30POBA565D17PZGT1TFT311' where id=6; -update noar tt set b0='O1HKAN2KDVFHRWKVV' where id=6; -update noar ti set b0='O1HKAN2KDVFHRWKVV' where id=6; -update noar tt set v0='P1U732XALDLCKC4VGJCBWSL2TEJ4ISD1' where id=6; -update noar ti set v0='P1U732XALDLCKC4VGJCBWSL2TEJ4ISD1' where id=6; -update noar tt set b1='45XI' where id=6; -update noar ti set b1='45XI' where id=6; -update noar tt set v0='ZE08WAVCCXIMXEKIYVJQ3Q0' where id=6; -update noar ti set v0='ZE08WAVCCXIMXEKIYVJQ3Q0' where id=6; -update noar tt set b2='TFH0198RJO7L' where id=6; -update noar ti set b2='TFH0198RJO7L' where id=6; -update noar tt set v0='3Z' where id=7; -update noar ti set v0='3Z' where id=7; -update noar tt set b0='XJA96B06L9AP97TX' where id=7; -update noar ti set b0='XJA96B06L9AP97TX' where id=7; -update noar tt set v0='64TJ2GMIHOYE' where id=7; -update noar ti set v0='64TJ2GMIHOYE' where id=7; -update noar tt set b1='5CDAHJ' where id=7; -update noar ti set b1='5CDAHJ' where id=7; -update noar tt set v0='5EPYCKMEP5OQYXZ67' where id=7; -update noar ti set v0='5EPYCKMEP5OQYXZ67' where id=7; -update noar tt set b2='1KW5SQH3O1C9MVVNGLA92EOQ15HAB8IY' where id=7; -update noar ti set b2='1KW5SQH3O1C9MVVNGLA92EOQ15HAB8IY' where id=7; -update noar tt set v0='1YDMMK99RLONRIEHZC8JUS' where id=8; -update noar ti set v0='1YDMMK99RLONRIEHZC8JUS' where id=8; -update noar tt set b0='0HE327ETWP8ZYGQ8DXS' where id=8; -update noar ti set b0='0HE327ETWP8ZYGQ8DXS' where id=8; -update noar tt set v0='AQ852028Z1Y9FYITIHTM' where id=8; -update noar ti set v0='AQ852028Z1Y9FYITIHTM' where id=8; -update noar tt set b1='3DXVPJW8Y8' where id=8; -update noar ti set b1='3DXVPJW8Y8' where id=8; -update noar tt set v0='IN' where id=8; -update noar ti set v0='IN' where id=8; -update noar tt set b2='SOI73ZNUPWHTSW' where id=8; -update noar ti set b2='SOI73ZNUPWHTSW' where id=8; -update noar tt set v0='83868FRCEWWI' where id=9; -update noar ti set v0='83868FRCEWWI' where id=9; -update noar tt set b0='8N76N1ZG6KIHHUVUB73GDVZGN738A' where id=9; -update noar ti set b0='8N76N1ZG6KIHHUVUB73GDVZGN738A' where id=9; -update noar tt set v0='E8YAGGTRWYS' where id=9; -update noar ti set v0='E8YAGGTRWYS' where id=9; -update noar tt set b1='SGEATI51WWWYV6BDT' where id=9; -update noar ti set b1='SGEATI51WWWYV6BDT' where id=9; -update noar tt set v0='2' where id=9; -update noar ti set v0='2' where id=9; -update noar tt set b2='6' where id=9; -update noar ti set b2='6' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 longblob not null, -b1 longblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='6ZBNVKOG3W6NX4RB' where id=1; -update noar ti set v0='6ZBNVKOG3W6NX4RB' where id=1; -update noar tt set b0='QX8O7MA5URA98KP94' where id=1; -update noar ti set b0='QX8O7MA5URA98KP94' where id=1; -update noar tt set v0='G1RI' where id=1; -update noar ti set v0='G1RI' where id=1; -update noar tt set b1='AMIUUG4FC5JLMTQTFNQOM' where id=1; -update noar ti set b1='AMIUUG4FC5JLMTQTFNQOM' where id=1; -update noar tt set v0='5SOZSZ9ORSJFQ3DB661DEI5R' where id=1; -update noar ti set v0='5SOZSZ9ORSJFQ3DB661DEI5R' where id=1; -update noar tt set b2='1GT4K11JD1UC8HFVDD5Q3TYPGC' where id=1; -update noar ti set b2='1GT4K11JD1UC8HFVDD5Q3TYPGC' where id=1; -update noar tt set v0='1270IA7FZOOF3' where id=2; -update noar ti set v0='1270IA7FZOOF3' where id=2; -update noar tt set b0='94VPNXSEYWLZU8GRM08XFAIFQ' where id=2; -update noar ti set b0='94VPNXSEYWLZU8GRM08XFAIFQ' where id=2; -update noar tt set v0='3N309BC1X29YOJLKIH0T610VNQ' where id=2; -update noar ti set v0='3N309BC1X29YOJLKIH0T610VNQ' where id=2; -update noar tt set b1='TI1UBV' where id=2; -update noar ti set b1='TI1UBV' where id=2; -update noar tt set v0='7Y7Y6KQGY654GH99E8ULTEYST9P' where id=2; -update noar ti set v0='7Y7Y6KQGY654GH99E8ULTEYST9P' where id=2; -update noar tt set b2='4J1' where id=2; -update noar ti set b2='4J1' where id=2; -update noar tt set v0='YINZ3QJL3BD3Q6YPY67Y07VBHR' where id=3; -update noar ti set v0='YINZ3QJL3BD3Q6YPY67Y07VBHR' where id=3; -update noar tt set b0='BDIGSLA111X85PNCA748Q9VFW95D9' where id=3; -update noar ti set b0='BDIGSLA111X85PNCA748Q9VFW95D9' where id=3; -update noar tt set v0='K2A2LFVTVSKSGXHNO80BFCV0VD' where id=3; -update noar ti set v0='K2A2LFVTVSKSGXHNO80BFCV0VD' where id=3; -update noar tt set b1='FS8IKIEFRHJCOG0WU0OZ5W6UMW8QHYN' where id=3; -update noar ti set b1='FS8IKIEFRHJCOG0WU0OZ5W6UMW8QHYN' where id=3; -update noar tt set v0='0N' where id=3; -update noar ti set v0='0N' where id=3; -update noar tt set b2='Y8CMUCOD' where id=3; -update noar ti set b2='Y8CMUCOD' where id=3; -update noar tt set v0='X' where id=4; -update noar ti set v0='X' where id=4; -update noar tt set b0='X' where id=4; -update noar ti set b0='X' where id=4; -update noar tt set v0='7R2JXVMPCVQGIMVHH6S3A' where id=4; -update noar ti set v0='7R2JXVMPCVQGIMVHH6S3A' where id=4; -update noar tt set b1='YK40PK165PPS' where id=4; -update noar ti set b1='YK40PK165PPS' where id=4; -update noar tt set v0='0F79BGF63EHJKH6OHB49LLGJ' where id=4; -update noar ti set v0='0F79BGF63EHJKH6OHB49LLGJ' where id=4; -update noar tt set b2='DA3NEDNCW9NUF87' where id=4; -update noar ti set b2='DA3NEDNCW9NUF87' where id=4; -update noar tt set v0='UN6NUVXDYV68AZT8T65XJW2VMJF' where id=5; -update noar ti set v0='UN6NUVXDYV68AZT8T65XJW2VMJF' where id=5; -update noar tt set b0='Y3CP1FCN93' where id=5; -update noar ti set b0='Y3CP1FCN93' where id=5; -update noar tt set v0='AR9JVNGCRIJ' where id=5; -update noar ti set v0='AR9JVNGCRIJ' where id=5; -update noar tt set b1='5MU6N' where id=5; -update noar ti set b1='5MU6N' where id=5; -update noar tt set v0='SW9A7073QK8IFU5P' where id=5; -update noar ti set v0='SW9A7073QK8IFU5P' where id=5; -update noar tt set b2='NY3EY' where id=5; -update noar ti set b2='NY3EY' where id=5; -update noar tt set v0='GKUH3JWD1Q7MV' where id=6; -update noar ti set v0='GKUH3JWD1Q7MV' where id=6; -update noar tt set b0='SAW4QX2J9UUA4QICOWMVO3Y' where id=6; -update noar ti set b0='SAW4QX2J9UUA4QICOWMVO3Y' where id=6; -update noar tt set v0='O9JR149YTD5AC74D' where id=6; -update noar ti set v0='O9JR149YTD5AC74D' where id=6; -update noar tt set b1='HP2' where id=6; -update noar ti set b1='HP2' where id=6; -update noar tt set v0='G8C00B9YWE8RM9I3JASP7C58CAF4S' where id=6; -update noar ti set v0='G8C00B9YWE8RM9I3JASP7C58CAF4S' where id=6; -update noar tt set b2='JGGTNH1Q4D11DL5QSBXZQD5RR4M530' where id=6; -update noar ti set b2='JGGTNH1Q4D11DL5QSBXZQD5RR4M530' where id=6; -update noar tt set v0='S75Z2E0HLQLOPKOL672WJQ' where id=7; -update noar ti set v0='S75Z2E0HLQLOPKOL672WJQ' where id=7; -update noar tt set b0='638SVMZ1HDZ' where id=7; -update noar ti set b0='638SVMZ1HDZ' where id=7; -update noar tt set v0='5K' where id=7; -update noar ti set v0='5K' where id=7; -update noar tt set b1='3XC' where id=7; -update noar ti set b1='3XC' where id=7; -update noar tt set v0='V5NIFIE57BNHT9GC8' where id=7; -update noar ti set v0='V5NIFIE57BNHT9GC8' where id=7; -update noar tt set b2='K5YFJQLVCESN9A' where id=7; -update noar ti set b2='K5YFJQLVCESN9A' where id=7; -update noar tt set v0='ZHZWH4OFS91HN22GJWK3G' where id=8; -update noar ti set v0='ZHZWH4OFS91HN22GJWK3G' where id=8; -update noar tt set b0='22ZU078V' where id=8; -update noar ti set b0='22ZU078V' where id=8; -update noar tt set v0='PGNQOOW733ZWZ2AIG9WMBX6X71QCDC2' where id=8; -update noar ti set v0='PGNQOOW733ZWZ2AIG9WMBX6X71QCDC2' where id=8; -update noar tt set b1='CHQWB5G7TB7R6F' where id=8; -update noar ti set b1='CHQWB5G7TB7R6F' where id=8; -update noar tt set v0='MCNXLAYKR1MER4R1U0UUQ5YCZ27Q16G' where id=8; -update noar ti set v0='MCNXLAYKR1MER4R1U0UUQ5YCZ27Q16G' where id=8; -update noar tt set b2='N3Y0' where id=8; -update noar ti set b2='N3Y0' where id=8; -update noar tt set v0='GY7Y73QRKBYO9H0856DT34' where id=9; -update noar ti set v0='GY7Y73QRKBYO9H0856DT34' where id=9; -update noar tt set b0='D5OGS' where id=9; -update noar ti set b0='D5OGS' where id=9; -update noar tt set v0='VLI69Y0IGG9X2G9ZJV0XU671TQXDQ4L' where id=9; -update noar ti set v0='VLI69Y0IGG9X2G9ZJV0XU671TQXDQ4L' where id=9; -update noar tt set b1='ESTISXLS27HP2TSFS8IQ' where id=9; -update noar ti set b1='ESTISXLS27HP2TSFS8IQ' where id=9; -update noar tt set v0='OWHJZDT3YWSAG2U' where id=9; -update noar ti set v0='OWHJZDT3YWSAG2U' where id=9; -update noar tt set b2='B0Z' where id=9; -update noar ti set b2='B0Z' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 longblob not null, -b1 longblob not null, -b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='ONFF44G2302R' where id=1; -update noar ti set v0='ONFF44G2302R' where id=1; -update noar tt set b0='UC5R9GZTZ3GL4WG' where id=1; -update noar ti set b0='UC5R9GZTZ3GL4WG' where id=1; -update noar tt set v0='V' where id=1; -update noar ti set v0='V' where id=1; -update noar tt set b1='9PF80X3LPB9ZYO6VF19IA8' where id=1; -update noar ti set b1='9PF80X3LPB9ZYO6VF19IA8' where id=1; -update noar tt set v0='XSCJ6ER4CAI' where id=1; -update noar ti set v0='XSCJ6ER4CAI' where id=1; -update noar tt set b2='EP15TLUDWYZGFC' where id=1; -update noar ti set b2='EP15TLUDWYZGFC' where id=1; -update noar tt set v0='ZOBJM6BIB58SYN' where id=2; -update noar ti set v0='ZOBJM6BIB58SYN' where id=2; -update noar tt set b0='JEV0KHG' where id=2; -update noar ti set b0='JEV0KHG' where id=2; -update noar tt set v0='QQVJ0' where id=2; -update noar ti set v0='QQVJ0' where id=2; -update noar tt set b1='VVBKWCNX0S43N3A0NBT8KPQOT78P4NGD' where id=2; -update noar ti set b1='VVBKWCNX0S43N3A0NBT8KPQOT78P4NGD' where id=2; -update noar tt set v0='2NTRQQYTSWC1R5KQ44D283Z9U412W2A' where id=2; -update noar ti set v0='2NTRQQYTSWC1R5KQ44D283Z9U412W2A' where id=2; -update noar tt set b2='RPSC5L8' where id=2; -update noar ti set b2='RPSC5L8' where id=2; -update noar tt set v0='TQZHRXXTV3TF964F2JM1LUNOEL35RU' where id=3; -update noar ti set v0='TQZHRXXTV3TF964F2JM1LUNOEL35RU' where id=3; -update noar tt set b0='JLBNDOU9UND27' where id=3; -update noar ti set b0='JLBNDOU9UND27' where id=3; -update noar tt set v0='BGI68Q06' where id=3; -update noar ti set v0='BGI68Q06' where id=3; -update noar tt set b1='NZZC3V2E5O3SSH8T5' where id=3; -update noar ti set b1='NZZC3V2E5O3SSH8T5' where id=3; -update noar tt set v0='JGKQUMGQ7G07XZ8GI' where id=3; -update noar ti set v0='JGKQUMGQ7G07XZ8GI' where id=3; -update noar tt set b2='1QXL' where id=3; -update noar ti set b2='1QXL' where id=3; -update noar tt set v0='3OT0Z8' where id=4; -update noar ti set v0='3OT0Z8' where id=4; -update noar tt set b0='5R0ZEF' where id=4; -update noar ti set b0='5R0ZEF' where id=4; -update noar tt set v0='9PZFZJ6ENDTNTOSRL' where id=4; -update noar ti set v0='9PZFZJ6ENDTNTOSRL' where id=4; -update noar tt set b1='CKPULBG8ZMEOGBH713IHHKTKLF' where id=4; -update noar ti set b1='CKPULBG8ZMEOGBH713IHHKTKLF' where id=4; -update noar tt set v0='P0XEWHUE19J0ICFPLHSEGW' where id=4; -update noar ti set v0='P0XEWHUE19J0ICFPLHSEGW' where id=4; -update noar tt set b2='9YF1NI30R1ZP8FESQCR' where id=4; -update noar ti set b2='9YF1NI30R1ZP8FESQCR' where id=4; -update noar tt set v0='WT6E0O93I89T8UB59LM78WRNNKA2N1FF' where id=5; -update noar ti set v0='WT6E0O93I89T8UB59LM78WRNNKA2N1FF' where id=5; -update noar tt set b0='4BWWN467RNC1M5CRZQ' where id=5; -update noar ti set b0='4BWWN467RNC1M5CRZQ' where id=5; -update noar tt set v0='V5I916LT9G4YWHRFUZVS92' where id=5; -update noar ti set v0='V5I916LT9G4YWHRFUZVS92' where id=5; -update noar tt set b1='YKTLN36YOE2C87PMY2O2Q4MYRQR0' where id=5; -update noar ti set b1='YKTLN36YOE2C87PMY2O2Q4MYRQR0' where id=5; -update noar tt set v0='RDQ1PCR' where id=5; -update noar ti set v0='RDQ1PCR' where id=5; -update noar tt set b2='P9ZZEQ79YMBLG3Q80JC1PF' where id=5; -update noar ti set b2='P9ZZEQ79YMBLG3Q80JC1PF' where id=5; -update noar tt set v0='TSQ7SMNE2UK57' where id=6; -update noar ti set v0='TSQ7SMNE2UK57' where id=6; -update noar tt set b0='96G9QADI0NURQB8SR8AW3Z' where id=6; -update noar ti set b0='96G9QADI0NURQB8SR8AW3Z' where id=6; -update noar tt set v0='LSGP724UKNHA86OZO' where id=6; -update noar ti set v0='LSGP724UKNHA86OZO' where id=6; -update noar tt set b1='W5PPE5Q6' where id=6; -update noar ti set b1='W5PPE5Q6' where id=6; -update noar tt set v0='KJ5R' where id=6; -update noar ti set v0='KJ5R' where id=6; -update noar tt set b2='44V3F' where id=6; -update noar ti set b2='44V3F' where id=6; -update noar tt set v0='8F41FKG835LCEE9HBQ' where id=7; -update noar ti set v0='8F41FKG835LCEE9HBQ' where id=7; -update noar tt set b0='KA72MDBST2VEN2RUXSZS1KEEEI3J271' where id=7; -update noar ti set b0='KA72MDBST2VEN2RUXSZS1KEEEI3J271' where id=7; -update noar tt set v0='3I4KFFXPOMX' where id=7; -update noar ti set v0='3I4KFFXPOMX' where id=7; -update noar tt set b1='BGDG' where id=7; -update noar ti set b1='BGDG' where id=7; -update noar tt set v0='INYS5F0A7YMJZHPAMY0YJLP0P99160' where id=7; -update noar ti set v0='INYS5F0A7YMJZHPAMY0YJLP0P99160' where id=7; -update noar tt set b2='75AGVP4YUIJQ3USI9LTK8M' where id=7; -update noar ti set b2='75AGVP4YUIJQ3USI9LTK8M' where id=7; -update noar tt set v0='QPFVBY5OMJN' where id=8; -update noar ti set v0='QPFVBY5OMJN' where id=8; -update noar tt set b0='FHOWUG2M30B0SCM4FBIA' where id=8; -update noar ti set b0='FHOWUG2M30B0SCM4FBIA' where id=8; -update noar tt set v0='LTNSHQ3' where id=8; -update noar ti set v0='LTNSHQ3' where id=8; -update noar tt set b1='D2TI8X28OV4FT0P6867HZA2TVJAX0L' where id=8; -update noar ti set b1='D2TI8X28OV4FT0P6867HZA2TVJAX0L' where id=8; -update noar tt set v0='4' where id=8; -update noar ti set v0='4' where id=8; -update noar tt set b2='B50OD0' where id=8; -update noar ti set b2='B50OD0' where id=8; -update noar tt set v0='G' where id=9; -update noar ti set v0='G' where id=9; -update noar tt set b0='9ZKNYBO5C' where id=9; -update noar ti set b0='9ZKNYBO5C' where id=9; -update noar tt set v0='3V1ZXCECFE458612Z20AL' where id=9; -update noar ti set v0='3V1ZXCECFE458612Z20AL' where id=9; -update noar tt set b1='S8L' where id=9; -update noar ti set b1='S8L' where id=9; -update noar tt set v0='4NFAK0P40' where id=9; -update noar ti set v0='4NFAK0P40' where id=9; -update noar tt set b2='TVC5WGNVIKZQAZOU2Q' where id=9; -update noar ti set b2='TVC5WGNVIKZQAZOU2Q' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 longblob null, -b1 longblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='GBAK2BFJAOAQZSAE1' where id=1; -update noar ti set v0='GBAK2BFJAOAQZSAE1' where id=1; -update noar tt set b0='68SKPCL6Q1T11H43QMNDZARIW7C' where id=1; -update noar ti set b0='68SKPCL6Q1T11H43QMNDZARIW7C' where id=1; -update noar tt set v0='PYUIY91OPGDQTNJ9ICXJRVWGACSVI4' where id=1; -update noar ti set v0='PYUIY91OPGDQTNJ9ICXJRVWGACSVI4' where id=1; -update noar tt set b1='75' where id=1; -update noar ti set b1='75' where id=1; -update noar tt set v0='6L3C5H' where id=1; -update noar ti set v0='6L3C5H' where id=1; -update noar tt set b2='R4HZOO7UMCKCLR7NEV5C' where id=1; -update noar ti set b2='R4HZOO7UMCKCLR7NEV5C' where id=1; -update noar tt set v0='MF9CRTJ0SO5JUEZSP04L471MT27V9W' where id=2; -update noar ti set v0='MF9CRTJ0SO5JUEZSP04L471MT27V9W' where id=2; -update noar tt set b0='WQ5SMJW4YB32YW5R8KTMEMLSSKH49AU' where id=2; -update noar ti set b0='WQ5SMJW4YB32YW5R8KTMEMLSSKH49AU' where id=2; -update noar tt set v0='CEBLSXHJFZM8PZH' where id=2; -update noar ti set v0='CEBLSXHJFZM8PZH' where id=2; -update noar tt set b1='LZMVYM8' where id=2; -update noar ti set b1='LZMVYM8' where id=2; -update noar tt set v0='9K91PKWQCGXUVBFM9ZYIJLZOIYPP' where id=2; -update noar ti set v0='9K91PKWQCGXUVBFM9ZYIJLZOIYPP' where id=2; -update noar tt set b2='3G7C5EFVZNVHH' where id=2; -update noar ti set b2='3G7C5EFVZNVHH' where id=2; -update noar tt set v0='RG3HEJVRQ1NZ' where id=3; -update noar ti set v0='RG3HEJVRQ1NZ' where id=3; -update noar tt set b0='80ZRCXXZB6JMYCPUC5IOE3E9L' where id=3; -update noar ti set b0='80ZRCXXZB6JMYCPUC5IOE3E9L' where id=3; -update noar tt set v0='Z09I' where id=3; -update noar ti set v0='Z09I' where id=3; -update noar tt set b1='ZGI0798ASCB9LBTUP1NIA5ANZ' where id=3; -update noar ti set b1='ZGI0798ASCB9LBTUP1NIA5ANZ' where id=3; -update noar tt set v0='I' where id=3; -update noar ti set v0='I' where id=3; -update noar tt set b2='CA4I0PRT3GTU7TB07MRR1EAG1GFVD' where id=3; -update noar ti set b2='CA4I0PRT3GTU7TB07MRR1EAG1GFVD' where id=3; -update noar tt set v0='P17KDT11RZTM7NJFHAY7S' where id=4; -update noar ti set v0='P17KDT11RZTM7NJFHAY7S' where id=4; -update noar tt set b0='3' where id=4; -update noar ti set b0='3' where id=4; -update noar tt set v0='RM' where id=4; -update noar ti set v0='RM' where id=4; -update noar tt set b1='G0LSI2ZRCTHNTWKMR4BAKTDKT7AC9Y' where id=4; -update noar ti set b1='G0LSI2ZRCTHNTWKMR4BAKTDKT7AC9Y' where id=4; -update noar tt set v0='U76' where id=4; -update noar ti set v0='U76' where id=4; -update noar tt set b2='ZYKG98BP' where id=4; -update noar ti set b2='ZYKG98BP' where id=4; -update noar tt set v0='OJTAQG1TZMB7IIGAIQCEFYWL' where id=5; -update noar ti set v0='OJTAQG1TZMB7IIGAIQCEFYWL' where id=5; -update noar tt set b0='WZ6UW2AXNVHZZR3S213H' where id=5; -update noar ti set b0='WZ6UW2AXNVHZZR3S213H' where id=5; -update noar tt set v0='2QDB4AXJCRQ8CQRPHMXO298' where id=5; -update noar ti set v0='2QDB4AXJCRQ8CQRPHMXO298' where id=5; -update noar tt set b1='V3HOG6WVDD81L0IRYXX' where id=5; -update noar ti set b1='V3HOG6WVDD81L0IRYXX' where id=5; -update noar tt set v0='WCES569KHVDNK8AL2WEWXWLJO963OP3' where id=5; -update noar ti set v0='WCES569KHVDNK8AL2WEWXWLJO963OP3' where id=5; -update noar tt set b2='3TEB7F6M8GDF' where id=5; -update noar ti set b2='3TEB7F6M8GDF' where id=5; -update noar tt set v0='J5A74PPDI7DOHN7ONV3WNO8' where id=6; -update noar ti set v0='J5A74PPDI7DOHN7ONV3WNO8' where id=6; -update noar tt set b0='V07KWAZ0CZ4NGOL' where id=6; -update noar ti set b0='V07KWAZ0CZ4NGOL' where id=6; -update noar tt set v0='Z2M0IN0E2CJUW56N1XC' where id=6; -update noar ti set v0='Z2M0IN0E2CJUW56N1XC' where id=6; -update noar tt set b1='N5A' where id=6; -update noar ti set b1='N5A' where id=6; -update noar tt set v0='WFAGYXW8RY' where id=6; -update noar ti set v0='WFAGYXW8RY' where id=6; -update noar tt set b2='DQVMF' where id=6; -update noar ti set b2='DQVMF' where id=6; -update noar tt set v0='ODYUYEZLTQWHFXP7HO' where id=7; -update noar ti set v0='ODYUYEZLTQWHFXP7HO' where id=7; -update noar tt set b0='42' where id=7; -update noar ti set b0='42' where id=7; -update noar tt set v0='JW06A2SCBZJ0UBF' where id=7; -update noar ti set v0='JW06A2SCBZJ0UBF' where id=7; -update noar tt set b1='T' where id=7; -update noar ti set b1='T' where id=7; -update noar tt set v0='Q1' where id=7; -update noar ti set v0='Q1' where id=7; -update noar tt set b2='LU5V96HNDFV3II9DG' where id=7; -update noar ti set b2='LU5V96HNDFV3II9DG' where id=7; -update noar tt set v0='9CDZSGIQYZ1' where id=8; -update noar ti set v0='9CDZSGIQYZ1' where id=8; -update noar tt set b0='QZAF36' where id=8; -update noar ti set b0='QZAF36' where id=8; -update noar tt set v0='O1E0E4EGX80N7FREU2GCX7NFRP' where id=8; -update noar ti set v0='O1E0E4EGX80N7FREU2GCX7NFRP' where id=8; -update noar tt set b1='5' where id=8; -update noar ti set b1='5' where id=8; -update noar tt set v0='8N528105NZKSFCEME9Y05AW92YD7XW' where id=8; -update noar ti set v0='8N528105NZKSFCEME9Y05AW92YD7XW' where id=8; -update noar tt set b2='0F2LTWHBA7CMPDMT' where id=8; -update noar ti set b2='0F2LTWHBA7CMPDMT' where id=8; -update noar tt set v0='BVFQFLWV37YE9' where id=9; -update noar ti set v0='BVFQFLWV37YE9' where id=9; -update noar tt set b0='FO7AVDCBHBQD85C2XIB' where id=9; -update noar ti set b0='FO7AVDCBHBQD85C2XIB' where id=9; -update noar tt set v0='5MI' where id=9; -update noar ti set v0='5MI' where id=9; -update noar tt set b1='MBFUVC7' where id=9; -update noar ti set b1='MBFUVC7' where id=9; -update noar tt set v0='7HGQN' where id=9; -update noar ti set v0='7HGQN' where id=9; -update noar tt set b2='6UN2QPBM7F' where id=9; -update noar ti set b2='6UN2QPBM7F' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 longblob null, -b1 longblob null, -b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='KPZVYO9AB4TBWV79HS42AEPOZ52AP' where id=1; -update noar ti set v0='KPZVYO9AB4TBWV79HS42AEPOZ52AP' where id=1; -update noar tt set b0='UUKC7TM3' where id=1; -update noar ti set b0='UUKC7TM3' where id=1; -update noar tt set v0='GPY8QITUR6O6W97FY' where id=1; -update noar ti set v0='GPY8QITUR6O6W97FY' where id=1; -update noar tt set b1='874KU4JDVZ3Z59' where id=1; -update noar ti set b1='874KU4JDVZ3Z59' where id=1; -update noar tt set v0='T1031PZ5PLO' where id=1; -update noar ti set v0='T1031PZ5PLO' where id=1; -update noar tt set b2='O6FUIATIUWU236FX2NAZEJWEHW' where id=1; -update noar ti set b2='O6FUIATIUWU236FX2NAZEJWEHW' where id=1; -update noar tt set v0='FMR2LZWWMDV59E631JR5H4PXWTMD6C' where id=2; -update noar ti set v0='FMR2LZWWMDV59E631JR5H4PXWTMD6C' where id=2; -update noar tt set b0='20V7TMPFEZA' where id=2; -update noar ti set b0='20V7TMPFEZA' where id=2; -update noar tt set v0='4THRSY' where id=2; -update noar ti set v0='4THRSY' where id=2; -update noar tt set b1='G0KBHF9' where id=2; -update noar ti set b1='G0KBHF9' where id=2; -update noar tt set v0='VLDX3O6195RL635BPB3Z0M6O1YCDZK9' where id=2; -update noar ti set v0='VLDX3O6195RL635BPB3Z0M6O1YCDZK9' where id=2; -update noar tt set b2='ND61J5O61IBF4' where id=2; -update noar ti set b2='ND61J5O61IBF4' where id=2; -update noar tt set v0='QPGFY0NDS' where id=3; -update noar ti set v0='QPGFY0NDS' where id=3; -update noar tt set b0='GH4DBL7P38V' where id=3; -update noar ti set b0='GH4DBL7P38V' where id=3; -update noar tt set v0='OJH31QNF7DZPDJ52A77E37V9JZCI' where id=3; -update noar ti set v0='OJH31QNF7DZPDJ52A77E37V9JZCI' where id=3; -update noar tt set b1='6XJ5O' where id=3; -update noar ti set b1='6XJ5O' where id=3; -update noar tt set v0='FM4KL1VOV' where id=3; -update noar ti set v0='FM4KL1VOV' where id=3; -update noar tt set b2='RTBMSJHJFGTJZTNI297ZV7PV1' where id=3; -update noar ti set b2='RTBMSJHJFGTJZTNI297ZV7PV1' where id=3; -update noar tt set v0='33FHSUNH06SQJFKHLMR8H' where id=4; -update noar ti set v0='33FHSUNH06SQJFKHLMR8H' where id=4; -update noar tt set b0='RLS5N6WH9UMCD1BYWIASVVNFYFB' where id=4; -update noar ti set b0='RLS5N6WH9UMCD1BYWIASVVNFYFB' where id=4; -update noar tt set v0='PNLN4U5M99YQ07' where id=4; -update noar ti set v0='PNLN4U5M99YQ07' where id=4; -update noar tt set b1='E89Z86PGWXWWGBC5187IDODXUZALMO' where id=4; -update noar ti set b1='E89Z86PGWXWWGBC5187IDODXUZALMO' where id=4; -update noar tt set v0='OSYAFEMYQA25U5WQ12LWAJN' where id=4; -update noar ti set v0='OSYAFEMYQA25U5WQ12LWAJN' where id=4; -update noar tt set b2='WNRJLQ692KBXTNZPQCZ5VF5M' where id=4; -update noar ti set b2='WNRJLQ692KBXTNZPQCZ5VF5M' where id=4; -update noar tt set v0='9NBE2Z216D9HRQ92NRHXXNH8H' where id=5; -update noar ti set v0='9NBE2Z216D9HRQ92NRHXXNH8H' where id=5; -update noar tt set b0='3NJADGOFN2SNGSJJJH7YDLLEOEM2TVHA' where id=5; -update noar ti set b0='3NJADGOFN2SNGSJJJH7YDLLEOEM2TVHA' where id=5; -update noar tt set v0='8M2ME99C9QF73PJ9E6' where id=5; -update noar ti set v0='8M2ME99C9QF73PJ9E6' where id=5; -update noar tt set b1='T9XFS1B7PH97XJN1KNLYI976ZKY' where id=5; -update noar ti set b1='T9XFS1B7PH97XJN1KNLYI976ZKY' where id=5; -update noar tt set v0='YC2U7QDBRWM4MGQGAC9IBC450KPJU6IX' where id=5; -update noar ti set v0='YC2U7QDBRWM4MGQGAC9IBC450KPJU6IX' where id=5; -update noar tt set b2='GTNYW0OMB' where id=5; -update noar ti set b2='GTNYW0OMB' where id=5; -update noar tt set v0='Z3NOBOH76EHC8PK2YX7' where id=6; -update noar ti set v0='Z3NOBOH76EHC8PK2YX7' where id=6; -update noar tt set b0='YQTQG1M' where id=6; -update noar ti set b0='YQTQG1M' where id=6; -update noar tt set v0='M9R4' where id=6; -update noar ti set v0='M9R4' where id=6; -update noar tt set b1='NGDCUMKSZYXFDSQIUBIUD2EOW2T' where id=6; -update noar ti set b1='NGDCUMKSZYXFDSQIUBIUD2EOW2T' where id=6; -update noar tt set v0='JOIL8GVR04LJ5LAY8UBUF87' where id=6; -update noar ti set v0='JOIL8GVR04LJ5LAY8UBUF87' where id=6; -update noar tt set b2='68TK0AQPJYGVF0X8K5CP' where id=6; -update noar ti set b2='68TK0AQPJYGVF0X8K5CP' where id=6; -update noar tt set v0='057MIGJB7DW83GD3TD5LY' where id=7; -update noar ti set v0='057MIGJB7DW83GD3TD5LY' where id=7; -update noar tt set b0='3I9DUBDTHRK1AWPP' where id=7; -update noar ti set b0='3I9DUBDTHRK1AWPP' where id=7; -update noar tt set v0='H5UTRAI3DT13VIW' where id=7; -update noar ti set v0='H5UTRAI3DT13VIW' where id=7; -update noar tt set b1='23WQ0U' where id=7; -update noar ti set b1='23WQ0U' where id=7; -update noar tt set v0='B2' where id=7; -update noar ti set v0='B2' where id=7; -update noar tt set b2='5O2JVOBF' where id=7; -update noar ti set b2='5O2JVOBF' where id=7; -update noar tt set v0='KV6QLNCBC72PUY9' where id=8; -update noar ti set v0='KV6QLNCBC72PUY9' where id=8; -update noar tt set b0='6JLF2XNR7OYVM8EHZ20XSZ2G' where id=8; -update noar ti set b0='6JLF2XNR7OYVM8EHZ20XSZ2G' where id=8; -update noar tt set v0='I8DXY2G2FA1D' where id=8; -update noar ti set v0='I8DXY2G2FA1D' where id=8; -update noar tt set b1='IS2N19XIFUVAQV' where id=8; -update noar ti set b1='IS2N19XIFUVAQV' where id=8; -update noar tt set v0='7B8UE7EMWCRMXULNJ6' where id=8; -update noar ti set v0='7B8UE7EMWCRMXULNJ6' where id=8; -update noar tt set b2='D717SK65NCUTOG2SWS1N8YF4ZHSUOSV' where id=8; -update noar ti set b2='D717SK65NCUTOG2SWS1N8YF4ZHSUOSV' where id=8; -update noar tt set v0='TYHWK6S2LJR22IIKQBLOYXYY07Q4FQH' where id=9; -update noar ti set v0='TYHWK6S2LJR22IIKQBLOYXYY07Q4FQH' where id=9; -update noar tt set b0='F6QH9E7C5Z8CCFN44RQ50FJC8R6B6A95' where id=9; -update noar ti set b0='F6QH9E7C5Z8CCFN44RQ50FJC8R6B6A95' where id=9; -update noar tt set v0='HW7FT' where id=9; -update noar ti set v0='HW7FT' where id=9; -update noar tt set b1='B4JZCYMR5SINH9' where id=9; -update noar ti set b1='B4JZCYMR5SINH9' where id=9; -update noar tt set v0='72P5QAGDQS6YI3UKHCQ' where id=9; -update noar ti set v0='72P5QAGDQS6YI3UKHCQ' where id=9; -update noar tt set b2='T7' where id=9; -update noar ti set b2='T7' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 longblob not null, -b1 longblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='JJVGPI9KJV8LR0BTDX0ZV7SNCIY' where id=1; -update noar ti set v0='JJVGPI9KJV8LR0BTDX0ZV7SNCIY' where id=1; -update noar tt set b0='JDRTTEDJEKYZ' where id=1; -update noar ti set b0='JDRTTEDJEKYZ' where id=1; -update noar tt set v0='5WURRXDOPD6N6T2ZQIXH4HOROS6E01BL' where id=1; -update noar ti set v0='5WURRXDOPD6N6T2ZQIXH4HOROS6E01BL' where id=1; -update noar tt set b1='KI7TCZ' where id=1; -update noar ti set b1='KI7TCZ' where id=1; -update noar tt set v0='RN6WUSGIWZ' where id=1; -update noar ti set v0='RN6WUSGIWZ' where id=1; -update noar tt set b2='5GCA9ZHZA' where id=1; -update noar ti set b2='5GCA9ZHZA' where id=1; -update noar tt set v0='58CVOYOJY2EBO381YTJ9KV2A3Q' where id=2; -update noar ti set v0='58CVOYOJY2EBO381YTJ9KV2A3Q' where id=2; -update noar tt set b0='LMXM7LYS2CYSDPJB36FY8HBW218T4' where id=2; -update noar ti set b0='LMXM7LYS2CYSDPJB36FY8HBW218T4' where id=2; -update noar tt set v0='3ZM3FY' where id=2; -update noar ti set v0='3ZM3FY' where id=2; -update noar tt set b1='NE8YKPIMT8X' where id=2; -update noar ti set b1='NE8YKPIMT8X' where id=2; -update noar tt set v0='5PGF96I4NUD' where id=2; -update noar ti set v0='5PGF96I4NUD' where id=2; -update noar tt set b2='7ZZFPAXGSE6HUJ6LIPPIOCMWWC' where id=2; -update noar ti set b2='7ZZFPAXGSE6HUJ6LIPPIOCMWWC' where id=2; -update noar tt set v0='G0YYPCREI3VN1Y90O' where id=3; -update noar ti set v0='G0YYPCREI3VN1Y90O' where id=3; -update noar tt set b0='61GSYL8K72E5M0VUASOW3XE5VA' where id=3; -update noar ti set b0='61GSYL8K72E5M0VUASOW3XE5VA' where id=3; -update noar tt set v0='B' where id=3; -update noar ti set v0='B' where id=3; -update noar tt set b1='37' where id=3; -update noar ti set b1='37' where id=3; -update noar tt set v0='HIY4NHE4J4P' where id=3; -update noar ti set v0='HIY4NHE4J4P' where id=3; -update noar tt set b2='36O2V3O9LPUE3G0OUPW59QBJGTPHF' where id=3; -update noar ti set b2='36O2V3O9LPUE3G0OUPW59QBJGTPHF' where id=3; -update noar tt set v0='ZIW2NTL' where id=4; -update noar ti set v0='ZIW2NTL' where id=4; -update noar tt set b0='63SIVCFFPDHY' where id=4; -update noar ti set b0='63SIVCFFPDHY' where id=4; -update noar tt set v0='JSF9OSHJTCEXRNUBOXR2Q3XNLU' where id=4; -update noar ti set v0='JSF9OSHJTCEXRNUBOXR2Q3XNLU' where id=4; -update noar tt set b1='1LPCZ7O' where id=4; -update noar ti set b1='1LPCZ7O' where id=4; -update noar tt set v0='38FQ3EM429F1JYNUBFIK753B2' where id=4; -update noar ti set v0='38FQ3EM429F1JYNUBFIK753B2' where id=4; -update noar tt set b2='LJXF860PG2VTG9AN5LQEZYPGFN' where id=4; -update noar ti set b2='LJXF860PG2VTG9AN5LQEZYPGFN' where id=4; -update noar tt set v0='RODZ3450' where id=5; -update noar ti set v0='RODZ3450' where id=5; -update noar tt set b0='DZ87GBUNF00SF813AFMXUF40' where id=5; -update noar ti set b0='DZ87GBUNF00SF813AFMXUF40' where id=5; -update noar tt set v0='XY' where id=5; -update noar ti set v0='XY' where id=5; -update noar tt set b1='4A8D98LCKOIQZXHMP20LFU4RDAW5' where id=5; -update noar ti set b1='4A8D98LCKOIQZXHMP20LFU4RDAW5' where id=5; -update noar tt set v0='8E5USDZ4TM0T2YG6KCUV' where id=5; -update noar ti set v0='8E5USDZ4TM0T2YG6KCUV' where id=5; -update noar tt set b2='DES9M7F2DHTK55TUWQNT' where id=5; -update noar ti set b2='DES9M7F2DHTK55TUWQNT' where id=5; -update noar tt set v0='FGV' where id=6; -update noar ti set v0='FGV' where id=6; -update noar tt set b0='OW4PGJ11' where id=6; -update noar ti set b0='OW4PGJ11' where id=6; -update noar tt set v0='CMDTIGRQ1' where id=6; -update noar ti set v0='CMDTIGRQ1' where id=6; -update noar tt set b1='JN0WE9' where id=6; -update noar ti set b1='JN0WE9' where id=6; -update noar tt set v0='EN' where id=6; -update noar ti set v0='EN' where id=6; -update noar tt set b2='1X4BGE' where id=6; -update noar ti set b2='1X4BGE' where id=6; -update noar tt set v0='C7RWJQS' where id=7; -update noar ti set v0='C7RWJQS' where id=7; -update noar tt set b0='2IUMU5TN7SI7JA9' where id=7; -update noar ti set b0='2IUMU5TN7SI7JA9' where id=7; -update noar tt set v0='UDDH2N38ZAWJ' where id=7; -update noar ti set v0='UDDH2N38ZAWJ' where id=7; -update noar tt set b1='ESPYVR27U' where id=7; -update noar ti set b1='ESPYVR27U' where id=7; -update noar tt set v0='V8TN202EO8DNY4' where id=7; -update noar ti set v0='V8TN202EO8DNY4' where id=7; -update noar tt set b2='BJ' where id=7; -update noar ti set b2='BJ' where id=7; -update noar tt set v0='AEO4L7' where id=8; -update noar ti set v0='AEO4L7' where id=8; -update noar tt set b0='E32MVCZSP4Z9ECXICSC8U' where id=8; -update noar ti set b0='E32MVCZSP4Z9ECXICSC8U' where id=8; -update noar tt set v0='K13K7VHGK4' where id=8; -update noar ti set v0='K13K7VHGK4' where id=8; -update noar tt set b1='3KYHZ47ZL744FUUD9K6O105' where id=8; -update noar ti set b1='3KYHZ47ZL744FUUD9K6O105' where id=8; -update noar tt set v0='A06' where id=8; -update noar ti set v0='A06' where id=8; -update noar tt set b2='4095SLA5PF' where id=8; -update noar ti set b2='4095SLA5PF' where id=8; -update noar tt set v0='EV5V9U' where id=9; -update noar ti set v0='EV5V9U' where id=9; -update noar tt set b0='9N5MAD6AB0VF' where id=9; -update noar ti set b0='9N5MAD6AB0VF' where id=9; -update noar tt set v0='Q790BQ5UMM0CJ3O9KT' where id=9; -update noar ti set v0='Q790BQ5UMM0CJ3O9KT' where id=9; -update noar tt set b1='H23FNIKQK3OLRK0A2GWPLRY1QG5' where id=9; -update noar ti set b1='H23FNIKQK3OLRK0A2GWPLRY1QG5' where id=9; -update noar tt set v0='XXS2RE7B7E1QAO' where id=9; -update noar ti set v0='XXS2RE7B7E1QAO' where id=9; -update noar tt set b2='OMF9SH' where id=9; -update noar ti set b2='OMF9SH' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 longblob not null, -b1 longblob not null, -b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='EASP4KR9E69XOA3' where id=1; -update noar ti set v0='EASP4KR9E69XOA3' where id=1; -update noar tt set b0='HQ0WT' where id=1; -update noar ti set b0='HQ0WT' where id=1; -update noar tt set v0='X76F6NXHRJL60R8Q' where id=1; -update noar ti set v0='X76F6NXHRJL60R8Q' where id=1; -update noar tt set b1='OFRR37QE397AG2SCCB' where id=1; -update noar ti set b1='OFRR37QE397AG2SCCB' where id=1; -update noar tt set v0='3SHED8VNMD7N5S5VKG7H6249Q6MU' where id=1; -update noar ti set v0='3SHED8VNMD7N5S5VKG7H6249Q6MU' where id=1; -update noar tt set b2='A2N3V7JC' where id=1; -update noar ti set b2='A2N3V7JC' where id=1; -update noar tt set v0='53' where id=2; -update noar ti set v0='53' where id=2; -update noar tt set b0='RFJV9ZOBHM0K1ST9RHD' where id=2; -update noar ti set b0='RFJV9ZOBHM0K1ST9RHD' where id=2; -update noar tt set v0='ITFVEBR3' where id=2; -update noar ti set v0='ITFVEBR3' where id=2; -update noar tt set b1='EYUFH5QVJDKQ1RGVWZ' where id=2; -update noar ti set b1='EYUFH5QVJDKQ1RGVWZ' where id=2; -update noar tt set v0='C2DO1VFDH0KIQARYW7OB' where id=2; -update noar ti set v0='C2DO1VFDH0KIQARYW7OB' where id=2; -update noar tt set b2='33ZCZUJ1KR1OR56J4STBVVS341' where id=2; -update noar ti set b2='33ZCZUJ1KR1OR56J4STBVVS341' where id=2; -update noar tt set v0='V3YGITPMKWIJTRGSDHM8' where id=3; -update noar ti set v0='V3YGITPMKWIJTRGSDHM8' where id=3; -update noar tt set b0='XZAGC' where id=3; -update noar ti set b0='XZAGC' where id=3; -update noar tt set v0='KJBBA' where id=3; -update noar ti set v0='KJBBA' where id=3; -update noar tt set b1='U8PGDXINHRV2BQYHSY0' where id=3; -update noar ti set b1='U8PGDXINHRV2BQYHSY0' where id=3; -update noar tt set v0='RWBEEYXP7YE6DGBIOUP9' where id=3; -update noar ti set v0='RWBEEYXP7YE6DGBIOUP9' where id=3; -update noar tt set b2='LRU5AOSMZH1VS3ZVASGFBNAB56272Y' where id=3; -update noar ti set b2='LRU5AOSMZH1VS3ZVASGFBNAB56272Y' where id=3; -update noar tt set v0='L7YDOAC8UA9XH9F4INR' where id=4; -update noar ti set v0='L7YDOAC8UA9XH9F4INR' where id=4; -update noar tt set b0='UN6OCULNFQU6ZW1JOH9J79' where id=4; -update noar ti set b0='UN6OCULNFQU6ZW1JOH9J79' where id=4; -update noar tt set v0='D2CST1UNS4SEPXW' where id=4; -update noar ti set v0='D2CST1UNS4SEPXW' where id=4; -update noar tt set b1='6R9PGBHQUQTL2F4J' where id=4; -update noar ti set b1='6R9PGBHQUQTL2F4J' where id=4; -update noar tt set v0='DC6BL2WA' where id=4; -update noar ti set v0='DC6BL2WA' where id=4; -update noar tt set b2='JXXP0D85VFPN433W4U80YRXT7DJ' where id=4; -update noar ti set b2='JXXP0D85VFPN433W4U80YRXT7DJ' where id=4; -update noar tt set v0='1' where id=5; -update noar ti set v0='1' where id=5; -update noar tt set b0='CG26XP421DTNU' where id=5; -update noar ti set b0='CG26XP421DTNU' where id=5; -update noar tt set v0='CSWICUXWZWB7HWJHH08L4GR71I4' where id=5; -update noar ti set v0='CSWICUXWZWB7HWJHH08L4GR71I4' where id=5; -update noar tt set b1='R4IS8O3JIEI3FRQUVH90L4U7OMT1A' where id=5; -update noar ti set b1='R4IS8O3JIEI3FRQUVH90L4U7OMT1A' where id=5; -update noar tt set v0='783USG44U1VU324J05' where id=5; -update noar ti set v0='783USG44U1VU324J05' where id=5; -update noar tt set b2='U' where id=5; -update noar ti set b2='U' where id=5; -update noar tt set v0='TATCLUSFNJ0WJ6FJLD8W0DXBMXRSY' where id=6; -update noar ti set v0='TATCLUSFNJ0WJ6FJLD8W0DXBMXRSY' where id=6; -update noar tt set b0='059YG6LM' where id=6; -update noar ti set b0='059YG6LM' where id=6; -update noar tt set v0='0FXRR0AD6YL7CL2' where id=6; -update noar ti set v0='0FXRR0AD6YL7CL2' where id=6; -update noar tt set b1='1N3SK0AXTS8M' where id=6; -update noar ti set b1='1N3SK0AXTS8M' where id=6; -update noar tt set v0='Q6IMW9S5GE3H7XHM8G0O' where id=6; -update noar ti set v0='Q6IMW9S5GE3H7XHM8G0O' where id=6; -update noar tt set b2='LFEKMN8SMAXS2H1D1WXUUTFT6MVZQLVX' where id=6; -update noar ti set b2='LFEKMN8SMAXS2H1D1WXUUTFT6MVZQLVX' where id=6; -update noar tt set v0='Y6VD622ZXQROOBF2' where id=7; -update noar ti set v0='Y6VD622ZXQROOBF2' where id=7; -update noar tt set b0='Y7SZVU36I0JD7R1' where id=7; -update noar ti set b0='Y7SZVU36I0JD7R1' where id=7; -update noar tt set v0='OQ3QMBPNLG8UWAE2M4' where id=7; -update noar ti set v0='OQ3QMBPNLG8UWAE2M4' where id=7; -update noar tt set b1='RHFNUN7M5B0J7X3XN6DFXO' where id=7; -update noar ti set b1='RHFNUN7M5B0J7X3XN6DFXO' where id=7; -update noar tt set v0='XP9NI93XL1QD' where id=7; -update noar ti set v0='XP9NI93XL1QD' where id=7; -update noar tt set b2='SCXPXKOT5' where id=7; -update noar ti set b2='SCXPXKOT5' where id=7; -update noar tt set v0='S8GSRA9U1ASKUZSHWYZZAQNTI' where id=8; -update noar ti set v0='S8GSRA9U1ASKUZSHWYZZAQNTI' where id=8; -update noar tt set b0='FONEUY5F6BUDUDJUM1905JRCTFYD8TVX' where id=8; -update noar ti set b0='FONEUY5F6BUDUDJUM1905JRCTFYD8TVX' where id=8; -update noar tt set v0='M6ILSDL7MOGD' where id=8; -update noar ti set v0='M6ILSDL7MOGD' where id=8; -update noar tt set b1='OGFM45Q87JO6I10SLIN3CQT8OWR' where id=8; -update noar ti set b1='OGFM45Q87JO6I10SLIN3CQT8OWR' where id=8; -update noar tt set v0='EKKNG44WKU9XM6KJ6C0J' where id=8; -update noar ti set v0='EKKNG44WKU9XM6KJ6C0J' where id=8; -update noar tt set b2='VLUJA3LMPY90WE8ISR1QH3IZG' where id=8; -update noar ti set b2='VLUJA3LMPY90WE8ISR1QH3IZG' where id=8; -update noar tt set v0='M8MC2B062QJE2YMBK1UQ1GD' where id=9; -update noar ti set v0='M8MC2B062QJE2YMBK1UQ1GD' where id=9; -update noar tt set b0='1VEA173H2SQPTMWD' where id=9; -update noar ti set b0='1VEA173H2SQPTMWD' where id=9; -update noar tt set v0='0CRKH4OOE774HGW' where id=9; -update noar ti set v0='0CRKH4OOE774HGW' where id=9; -update noar tt set b1='AZP9R0MEPRIG' where id=9; -update noar ti set b1='AZP9R0MEPRIG' where id=9; -update noar tt set v0='1E' where id=9; -update noar ti set v0='1E' where id=9; -update noar tt set b2='PZFZR3DXM7LKPINHAZ' where id=9; -update noar ti set b2='PZFZR3DXM7LKPINHAZ' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) null, -b0 longblob null, -b1 longblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='C' where id=1; -update noar ti set v0='C' where id=1; -update noar tt set b0='WABX9VUZ4C1R2JTHGL4OQ8R7IBC' where id=1; -update noar ti set b0='WABX9VUZ4C1R2JTHGL4OQ8R7IBC' where id=1; -update noar tt set v0='YZO' where id=1; -update noar ti set v0='YZO' where id=1; -update noar tt set b1='Y22P5303H4U' where id=1; -update noar ti set b1='Y22P5303H4U' where id=1; -update noar tt set v0='E5RIB4Q5412VGPE3K' where id=1; -update noar ti set v0='E5RIB4Q5412VGPE3K' where id=1; -update noar tt set b2='J5N5RPMG' where id=1; -update noar ti set b2='J5N5RPMG' where id=1; -update noar tt set v0='YBTFTC5VKD8OIN4BKUFFA1' where id=2; -update noar ti set v0='YBTFTC5VKD8OIN4BKUFFA1' where id=2; -update noar tt set b0='11SUB6PE2AIXKX9268WKKU76' where id=2; -update noar ti set b0='11SUB6PE2AIXKX9268WKKU76' where id=2; -update noar tt set v0='BBEYMDR3UME59L9N1Q3UBITJY8RBEE4G' where id=2; -update noar ti set v0='BBEYMDR3UME59L9N1Q3UBITJY8RBEE4G' where id=2; -update noar tt set b1='AE46G94ISVEWG00K6SSE' where id=2; -update noar ti set b1='AE46G94ISVEWG00K6SSE' where id=2; -update noar tt set v0='8HW8DRBTUNP36Y3923632JCZL' where id=2; -update noar ti set v0='8HW8DRBTUNP36Y3923632JCZL' where id=2; -update noar tt set b2='GWBOWNVV3LTAKY' where id=2; -update noar ti set b2='GWBOWNVV3LTAKY' where id=2; -update noar tt set v0='PONCREBTLQ3M8DBT4WVYD4KDTRJ5P5T' where id=3; -update noar ti set v0='PONCREBTLQ3M8DBT4WVYD4KDTRJ5P5T' where id=3; -update noar tt set b0='FC2MME72H3HTL48ZI52CBP' where id=3; -update noar ti set b0='FC2MME72H3HTL48ZI52CBP' where id=3; -update noar tt set v0='5IBK' where id=3; -update noar ti set v0='5IBK' where id=3; -update noar tt set b1='OKITB1P28Y79AWZF1UPD' where id=3; -update noar ti set b1='OKITB1P28Y79AWZF1UPD' where id=3; -update noar tt set v0='XA6HK6VWV1PKVCS5J2EKIWF9E6' where id=3; -update noar ti set v0='XA6HK6VWV1PKVCS5J2EKIWF9E6' where id=3; -update noar tt set b2='NGY5BH11JZWDGRQXZADQ20QPF0425GKX' where id=3; -update noar ti set b2='NGY5BH11JZWDGRQXZADQ20QPF0425GKX' where id=3; -update noar tt set v0='QJVE9D9H0HH04FQW8ZNMY1KK' where id=4; -update noar ti set v0='QJVE9D9H0HH04FQW8ZNMY1KK' where id=4; -update noar tt set b0='QGUW' where id=4; -update noar ti set b0='QGUW' where id=4; -update noar tt set v0='QA6OJ33FCLZK94B' where id=4; -update noar ti set v0='QA6OJ33FCLZK94B' where id=4; -update noar tt set b1='RLEX268D1Q1VYP6EN4JRMVSEDLAML' where id=4; -update noar ti set b1='RLEX268D1Q1VYP6EN4JRMVSEDLAML' where id=4; -update noar tt set v0='AJS7WSEE1YICVR0KYP0Q0450V35X' where id=4; -update noar ti set v0='AJS7WSEE1YICVR0KYP0Q0450V35X' where id=4; -update noar tt set b2='BQ5SYMGB5' where id=4; -update noar ti set b2='BQ5SYMGB5' where id=4; -update noar tt set v0='RIWJNW8ZZRG5ARGX9RYG9LF' where id=5; -update noar ti set v0='RIWJNW8ZZRG5ARGX9RYG9LF' where id=5; -update noar tt set b0='3BD2XJAPE6173BIR' where id=5; -update noar ti set b0='3BD2XJAPE6173BIR' where id=5; -update noar tt set v0='HPGT362VXNS635U6OD0FN6G1YP0' where id=5; -update noar ti set v0='HPGT362VXNS635U6OD0FN6G1YP0' where id=5; -update noar tt set b1='2QYBF1BGC4534BDJNOEJ17J' where id=5; -update noar ti set b1='2QYBF1BGC4534BDJNOEJ17J' where id=5; -update noar tt set v0='2YD9V0HDQW9OHHOBXPT6OYYHZ' where id=5; -update noar ti set v0='2YD9V0HDQW9OHHOBXPT6OYYHZ' where id=5; -update noar tt set b2='QX9RKTHZ65PYI6NL4YODE8' where id=5; -update noar ti set b2='QX9RKTHZ65PYI6NL4YODE8' where id=5; -update noar tt set v0='5' where id=6; -update noar ti set v0='5' where id=6; -update noar tt set b0='6HU9TVMCAKVUDV8Q' where id=6; -update noar ti set b0='6HU9TVMCAKVUDV8Q' where id=6; -update noar tt set v0='A0UUG8V1W4814K08MGN' where id=6; -update noar ti set v0='A0UUG8V1W4814K08MGN' where id=6; -update noar tt set b1='I2' where id=6; -update noar ti set b1='I2' where id=6; -update noar tt set v0='2BZDAWFGFKEFQLFT9LWLQK7' where id=6; -update noar ti set v0='2BZDAWFGFKEFQLFT9LWLQK7' where id=6; -update noar tt set b2='G7LEFLNKHX4EAIEM' where id=6; -update noar ti set b2='G7LEFLNKHX4EAIEM' where id=6; -update noar tt set v0='9N4CTBFJKN7I9Z6S03JU5' where id=7; -update noar ti set v0='9N4CTBFJKN7I9Z6S03JU5' where id=7; -update noar tt set b0='GBGKAWP992' where id=7; -update noar ti set b0='GBGKAWP992' where id=7; -update noar tt set v0='SWLDBUJTUFJQLU1OVYG32I6K' where id=7; -update noar ti set v0='SWLDBUJTUFJQLU1OVYG32I6K' where id=7; -update noar tt set b1='AUTYZAFELJX' where id=7; -update noar ti set b1='AUTYZAFELJX' where id=7; -update noar tt set v0='NQM9SIC6CIYFQUIE' where id=7; -update noar ti set v0='NQM9SIC6CIYFQUIE' where id=7; -update noar tt set b2='CFJUZFR5WNR0VTVXVHXSK8VD4L' where id=7; -update noar ti set b2='CFJUZFR5WNR0VTVXVHXSK8VD4L' where id=7; -update noar tt set v0='UWQ454ISEYGIEB2K3GHS' where id=8; -update noar ti set v0='UWQ454ISEYGIEB2K3GHS' where id=8; -update noar tt set b0='8L12CJHUYCBASKOQ' where id=8; -update noar ti set b0='8L12CJHUYCBASKOQ' where id=8; -update noar tt set v0='XDIZWDQ4J6M0L5E8V86TZ27X4XQZ' where id=8; -update noar ti set v0='XDIZWDQ4J6M0L5E8V86TZ27X4XQZ' where id=8; -update noar tt set b1='29Q4PXC1K' where id=8; -update noar ti set b1='29Q4PXC1K' where id=8; -update noar tt set v0='R7B5B3S32W' where id=8; -update noar ti set v0='R7B5B3S32W' where id=8; -update noar tt set b2='0RXY3JWX7S7XXQNM' where id=8; -update noar ti set b2='0RXY3JWX7S7XXQNM' where id=8; -update noar tt set v0='MOI5XW3B0QYEEJYLQQIWU34GTL54KZ' where id=9; -update noar ti set v0='MOI5XW3B0QYEEJYLQQIWU34GTL54KZ' where id=9; -update noar tt set b0='M9N7P7N3IBCJUPDGGH56D3VGZ' where id=9; -update noar ti set b0='M9N7P7N3IBCJUPDGGH56D3VGZ' where id=9; -update noar tt set v0='WIYPO515Z78RTW7B8H21M0IGCD' where id=9; -update noar ti set v0='WIYPO515Z78RTW7B8H21M0IGCD' where id=9; -update noar tt set b1='V3AL' where id=9; -update noar ti set b1='V3AL' where id=9; -update noar tt set v0='30' where id=9; -update noar ti set v0='30' where id=9; -update noar tt set b2='BWSTM87GEI8A07V88ZEY4' where id=9; -update noar ti set b2='BWSTM87GEI8A07V88ZEY4' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) null, -b0 longblob null, -b1 longblob null, -b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='59VIS6' where id=1; -update noar ti set v0='59VIS6' where id=1; -update noar tt set b0='Y16FUVRDYANKU0F4DQ' where id=1; -update noar ti set b0='Y16FUVRDYANKU0F4DQ' where id=1; -update noar tt set v0='MN3NQ9WZC6LT6LJ74' where id=1; -update noar ti set v0='MN3NQ9WZC6LT6LJ74' where id=1; -update noar tt set b1='Z2QGMCQQT7LT15FBR1FAF' where id=1; -update noar ti set b1='Z2QGMCQQT7LT15FBR1FAF' where id=1; -update noar tt set v0='640H' where id=1; -update noar ti set v0='640H' where id=1; -update noar tt set b2='ENTGKH3UUCY6GRYQYI48HJVG9DUPWEA' where id=1; -update noar ti set b2='ENTGKH3UUCY6GRYQYI48HJVG9DUPWEA' where id=1; -update noar tt set v0='MRG388CO9ZJX' where id=2; -update noar ti set v0='MRG388CO9ZJX' where id=2; -update noar tt set b0='08O1C17PJSO0NSVYY583ABSPWFHGX' where id=2; -update noar ti set b0='08O1C17PJSO0NSVYY583ABSPWFHGX' where id=2; -update noar tt set v0='1M8HIXRKVT0DGA05TRVW20YA' where id=2; -update noar ti set v0='1M8HIXRKVT0DGA05TRVW20YA' where id=2; -update noar tt set b1='NZL5GJRNCNTCF2EB' where id=2; -update noar ti set b1='NZL5GJRNCNTCF2EB' where id=2; -update noar tt set v0='MHQLGNY' where id=2; -update noar ti set v0='MHQLGNY' where id=2; -update noar tt set b2='SSGH3O8YFLQU' where id=2; -update noar ti set b2='SSGH3O8YFLQU' where id=2; -update noar tt set v0='TIEKUG3' where id=3; -update noar ti set v0='TIEKUG3' where id=3; -update noar tt set b0='8' where id=3; -update noar ti set b0='8' where id=3; -update noar tt set v0='PMSXC24' where id=3; -update noar ti set v0='PMSXC24' where id=3; -update noar tt set b1='ES8UVFPUJEY71VIYU42IRT1A' where id=3; -update noar ti set b1='ES8UVFPUJEY71VIYU42IRT1A' where id=3; -update noar tt set v0='9' where id=3; -update noar ti set v0='9' where id=3; -update noar tt set b2='B5WIE4JC79KEI5DBYPCJVGKZQIUORI4Q' where id=3; -update noar ti set b2='B5WIE4JC79KEI5DBYPCJVGKZQIUORI4Q' where id=3; -update noar tt set v0='GJ0QKFH8G2FJJKVPEQK' where id=4; -update noar ti set v0='GJ0QKFH8G2FJJKVPEQK' where id=4; -update noar tt set b0='5D5OKOZ37565D7N2UC09M0V3HN' where id=4; -update noar ti set b0='5D5OKOZ37565D7N2UC09M0V3HN' where id=4; -update noar tt set v0='4OO3' where id=4; -update noar ti set v0='4OO3' where id=4; -update noar tt set b1='EKV7VUEF8Q7YRQGA560' where id=4; -update noar ti set b1='EKV7VUEF8Q7YRQGA560' where id=4; -update noar tt set v0='I1J7T9AAHPRK1K27M' where id=4; -update noar ti set v0='I1J7T9AAHPRK1K27M' where id=4; -update noar tt set b2='ZSYEHYPIC9G17U1JWYV27M2JCZ1R3' where id=4; -update noar ti set b2='ZSYEHYPIC9G17U1JWYV27M2JCZ1R3' where id=4; -update noar tt set v0='ZO1ZAMQKC2CHHCPGHUDR3' where id=5; -update noar ti set v0='ZO1ZAMQKC2CHHCPGHUDR3' where id=5; -update noar tt set b0='99MYQIQFLPOO2' where id=5; -update noar ti set b0='99MYQIQFLPOO2' where id=5; -update noar tt set v0='L3H89KWKVRAXFB7N723RYGFSFMXIP869' where id=5; -update noar ti set v0='L3H89KWKVRAXFB7N723RYGFSFMXIP869' where id=5; -update noar tt set b1='BYJRZ3K4RMWSWKDNUKUU' where id=5; -update noar ti set b1='BYJRZ3K4RMWSWKDNUKUU' where id=5; -update noar tt set v0='117MQSB1W' where id=5; -update noar ti set v0='117MQSB1W' where id=5; -update noar tt set b2='7' where id=5; -update noar ti set b2='7' where id=5; -update noar tt set v0='2B8K4H11FKPU54U6ZU4TH2QE' where id=6; -update noar ti set v0='2B8K4H11FKPU54U6ZU4TH2QE' where id=6; -update noar tt set b0='KDAXYY2ZKGQ' where id=6; -update noar ti set b0='KDAXYY2ZKGQ' where id=6; -update noar tt set v0='4IRV4' where id=6; -update noar ti set v0='4IRV4' where id=6; -update noar tt set b1='YIW8GEGX7W6XF2HCB2RXEF5PSVSVE' where id=6; -update noar ti set b1='YIW8GEGX7W6XF2HCB2RXEF5PSVSVE' where id=6; -update noar tt set v0='IL1B4LWKHPG9' where id=6; -update noar ti set v0='IL1B4LWKHPG9' where id=6; -update noar tt set b2='RZKG3Z0MGB20YRIK' where id=6; -update noar ti set b2='RZKG3Z0MGB20YRIK' where id=6; -update noar tt set v0='1QXMQT9' where id=7; -update noar ti set v0='1QXMQT9' where id=7; -update noar tt set b0='OHQMEALR2KYKLK5H1SE2WIQY7P' where id=7; -update noar ti set b0='OHQMEALR2KYKLK5H1SE2WIQY7P' where id=7; -update noar tt set v0='21YP6W' where id=7; -update noar ti set v0='21YP6W' where id=7; -update noar tt set b1='UFKGNPGCDLP8SUMG22FQD1RY6KJZ' where id=7; -update noar ti set b1='UFKGNPGCDLP8SUMG22FQD1RY6KJZ' where id=7; -update noar tt set v0='VY8ODP1Y4EWU28O42318FU98I1X3MAQ' where id=7; -update noar ti set v0='VY8ODP1Y4EWU28O42318FU98I1X3MAQ' where id=7; -update noar tt set b2='XC' where id=7; -update noar ti set b2='XC' where id=7; -update noar tt set v0='ZEJDHDB4545FX32R27E1RDTBF5' where id=8; -update noar ti set v0='ZEJDHDB4545FX32R27E1RDTBF5' where id=8; -update noar tt set b0='YKL29KZ2AWI9' where id=8; -update noar ti set b0='YKL29KZ2AWI9' where id=8; -update noar tt set v0='OR' where id=8; -update noar ti set v0='OR' where id=8; -update noar tt set b1='KBPNRBL0B1WNRVBEXVP16EU3U2NN3' where id=8; -update noar ti set b1='KBPNRBL0B1WNRVBEXVP16EU3U2NN3' where id=8; -update noar tt set v0='UEI6QQPEKLOVS4Q7' where id=8; -update noar ti set v0='UEI6QQPEKLOVS4Q7' where id=8; -update noar tt set b2='TFWGLAOD' where id=8; -update noar ti set b2='TFWGLAOD' where id=8; -update noar tt set v0='61E4GG41WNY575' where id=9; -update noar ti set v0='61E4GG41WNY575' where id=9; -update noar tt set b0='SCQEWNAKJR51B285WBC' where id=9; -update noar ti set b0='SCQEWNAKJR51B285WBC' where id=9; -update noar tt set v0='PB6QMSD3U9I2M' where id=9; -update noar ti set v0='PB6QMSD3U9I2M' where id=9; -update noar tt set b1='IYBZ' where id=9; -update noar ti set b1='IYBZ' where id=9; -update noar tt set v0='91XMZFO9C' where id=9; -update noar ti set v0='91XMZFO9C' where id=9; -update noar tt set b2='CJKUY1JFUFG5MDZ16KLOD' where id=9; -update noar ti set b2='CJKUY1JFUFG5MDZ16KLOD' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(32) not null, -b0 longblob not null, -b1 longblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='C8MZ88QX53XHDM0IAF6H8OBA6YBY' where id=1; -update noar ti set v0='C8MZ88QX53XHDM0IAF6H8OBA6YBY' where id=1; -update noar tt set b0='N0O88B2D6' where id=1; -update noar ti set b0='N0O88B2D6' where id=1; -update noar tt set v0='N1AOZKRMOSYXN9L79IZCC1SV' where id=1; -update noar ti set v0='N1AOZKRMOSYXN9L79IZCC1SV' where id=1; -update noar tt set b1='37XGQ95OSFFT5X42Q9W' where id=1; -update noar ti set b1='37XGQ95OSFFT5X42Q9W' where id=1; -update noar tt set v0='PR3N6SAZ' where id=1; -update noar ti set v0='PR3N6SAZ' where id=1; -update noar tt set b2='8I4A' where id=1; -update noar ti set b2='8I4A' where id=1; -update noar tt set v0='UBOZN' where id=2; -update noar ti set v0='UBOZN' where id=2; -update noar tt set b0='R1MVCFGWM1O9A0' where id=2; -update noar ti set b0='R1MVCFGWM1O9A0' where id=2; -update noar tt set v0='9ZTLN8UL83IFEII4N8TYNL9UO8E' where id=2; -update noar ti set v0='9ZTLN8UL83IFEII4N8TYNL9UO8E' where id=2; -update noar tt set b1='VHZMMIG5TB8S5YP5LBHR2MQ2WVFG' where id=2; -update noar ti set b1='VHZMMIG5TB8S5YP5LBHR2MQ2WVFG' where id=2; -update noar tt set v0='K9IOAEJHNQA9' where id=2; -update noar ti set v0='K9IOAEJHNQA9' where id=2; -update noar tt set b2='FVIM7GEJ27X' where id=2; -update noar ti set b2='FVIM7GEJ27X' where id=2; -update noar tt set v0='OU0QW7UVXY6XK06CE7Y91DBEH' where id=3; -update noar ti set v0='OU0QW7UVXY6XK06CE7Y91DBEH' where id=3; -update noar tt set b0='1OP916G1RF7QHC497' where id=3; -update noar ti set b0='1OP916G1RF7QHC497' where id=3; -update noar tt set v0='RDEPUJNC4J4141I5E8ZDC8JOCOI' where id=3; -update noar ti set v0='RDEPUJNC4J4141I5E8ZDC8JOCOI' where id=3; -update noar tt set b1='VHJ0H59W77U0PCZG88OGSPQ4QCPP1' where id=3; -update noar ti set b1='VHJ0H59W77U0PCZG88OGSPQ4QCPP1' where id=3; -update noar tt set v0='P4NY' where id=3; -update noar ti set v0='P4NY' where id=3; -update noar tt set b2='PEQ2A' where id=3; -update noar ti set b2='PEQ2A' where id=3; -update noar tt set v0='GP9PDZX09EFJ12NSPR70ISR98' where id=4; -update noar ti set v0='GP9PDZX09EFJ12NSPR70ISR98' where id=4; -update noar tt set b0='TFG25A1' where id=4; -update noar ti set b0='TFG25A1' where id=4; -update noar tt set v0='8H' where id=4; -update noar ti set v0='8H' where id=4; -update noar tt set b1='73U769BQS6Q0RHR9L1EN6G8O7BGHPJ2' where id=4; -update noar ti set b1='73U769BQS6Q0RHR9L1EN6G8O7BGHPJ2' where id=4; -update noar tt set v0='4DEAOUPR5RSLHBRF6MI3CU' where id=4; -update noar ti set v0='4DEAOUPR5RSLHBRF6MI3CU' where id=4; -update noar tt set b2='B22KOZSJD1DP0UI78HW9Y0GD0VMQH4' where id=4; -update noar ti set b2='B22KOZSJD1DP0UI78HW9Y0GD0VMQH4' where id=4; -update noar tt set v0='SRNVJNY0Z' where id=5; -update noar ti set v0='SRNVJNY0Z' where id=5; -update noar tt set b0='P' where id=5; -update noar ti set b0='P' where id=5; -update noar tt set v0='UBQZIO6U0' where id=5; -update noar ti set v0='UBQZIO6U0' where id=5; -update noar tt set b1='U54L8PRPOMM7VC31E' where id=5; -update noar ti set b1='U54L8PRPOMM7VC31E' where id=5; -update noar tt set v0='5WRETF45UVC1709ED0GV2DXHW' where id=5; -update noar ti set v0='5WRETF45UVC1709ED0GV2DXHW' where id=5; -update noar tt set b2='2UWBK5EU73X7IJRR57T2WZMCF59BB' where id=5; -update noar ti set b2='2UWBK5EU73X7IJRR57T2WZMCF59BB' where id=5; -update noar tt set v0='55AKSTWK3CKK7BV' where id=6; -update noar ti set v0='55AKSTWK3CKK7BV' where id=6; -update noar tt set b0='KY7Z' where id=6; -update noar ti set b0='KY7Z' where id=6; -update noar tt set v0='EBRTUD5C6Z5YPH8HUXJ' where id=6; -update noar ti set v0='EBRTUD5C6Z5YPH8HUXJ' where id=6; -update noar tt set b1='X3' where id=6; -update noar ti set b1='X3' where id=6; -update noar tt set v0='F57Y0R1Y8ORVP9C88YJR3ABTLWDVK6' where id=6; -update noar ti set v0='F57Y0R1Y8ORVP9C88YJR3ABTLWDVK6' where id=6; -update noar tt set b2='0OXI2SG154UCHMGQM' where id=6; -update noar ti set b2='0OXI2SG154UCHMGQM' where id=6; -update noar tt set v0='LM12BDBTUXZ' where id=7; -update noar ti set v0='LM12BDBTUXZ' where id=7; -update noar tt set b0='32AYRCYIRJRLE697I' where id=7; -update noar ti set b0='32AYRCYIRJRLE697I' where id=7; -update noar tt set v0='0' where id=7; -update noar ti set v0='0' where id=7; -update noar tt set b1='O8NY1N1JI6NE53ULNV6OXU3' where id=7; -update noar ti set b1='O8NY1N1JI6NE53ULNV6OXU3' where id=7; -update noar tt set v0='6RTRMOE31H17VNZG5DSNY0' where id=7; -update noar ti set v0='6RTRMOE31H17VNZG5DSNY0' where id=7; -update noar tt set b2='PQ2W0Q38ENFQ8QRRV' where id=7; -update noar ti set b2='PQ2W0Q38ENFQ8QRRV' where id=7; -update noar tt set v0='IT5MMMPRSDYRS276VR4V4QE' where id=8; -update noar ti set v0='IT5MMMPRSDYRS276VR4V4QE' where id=8; -update noar tt set b0='NS9PULEDOQZVAPOW6U' where id=8; -update noar ti set b0='NS9PULEDOQZVAPOW6U' where id=8; -update noar tt set v0='9FIW5ZD3RJR530ARUHJF' where id=8; -update noar ti set v0='9FIW5ZD3RJR530ARUHJF' where id=8; -update noar tt set b1='PKNK5' where id=8; -update noar ti set b1='PKNK5' where id=8; -update noar tt set v0='739F8P4' where id=8; -update noar ti set v0='739F8P4' where id=8; -update noar tt set b2='GOYURBF7P45JLITZ27VK1ZTIARKX94' where id=8; -update noar ti set b2='GOYURBF7P45JLITZ27VK1ZTIARKX94' where id=8; -update noar tt set v0='RN6PH' where id=9; -update noar ti set v0='RN6PH' where id=9; -update noar tt set b0='GP1S6HTYE0GX083U' where id=9; -update noar ti set b0='GP1S6HTYE0GX083U' where id=9; -update noar tt set v0='JEZPISDJ1KY5GJ' where id=9; -update noar ti set v0='JEZPISDJ1KY5GJ' where id=9; -update noar tt set b1='5IPR43G9OCJH9' where id=9; -update noar ti set b1='5IPR43G9OCJH9' where id=9; -update noar tt set v0='O47MVT09F9' where id=9; -update noar ti set v0='O47MVT09F9' where id=9; -update noar tt set b2='B4KOCBIM8RNDS6G23XDLIMSANJKGM' where id=9; -update noar ti set b2='B4KOCBIM8RNDS6G23XDLIMSANJKGM' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -v0 varchar(256) not null, -b0 longblob not null, -b1 longblob not null, -b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='I6JZOVD0Q3VKPQV0F16FUI' where id=1; -update noar ti set v0='I6JZOVD0Q3VKPQV0F16FUI' where id=1; -update noar tt set b0='LMA' where id=1; -update noar ti set b0='LMA' where id=1; -update noar tt set v0='QES8729V3ZKS4FZRL' where id=1; -update noar ti set v0='QES8729V3ZKS4FZRL' where id=1; -update noar tt set b1='NDM04IPLD6KNEE1DUYZ739ST3VD0VX' where id=1; -update noar ti set b1='NDM04IPLD6KNEE1DUYZ739ST3VD0VX' where id=1; -update noar tt set v0='9DT3BFV1OKC3FP8ANCB6MOO8UI2Q' where id=1; -update noar ti set v0='9DT3BFV1OKC3FP8ANCB6MOO8UI2Q' where id=1; -update noar tt set b2='3HSO5XNEJ59' where id=1; -update noar ti set b2='3HSO5XNEJ59' where id=1; -update noar tt set v0='785EI1QQNEG1ZW7L' where id=2; -update noar ti set v0='785EI1QQNEG1ZW7L' where id=2; -update noar tt set b0='8X133OT' where id=2; -update noar ti set b0='8X133OT' where id=2; -update noar tt set v0='ZE' where id=2; -update noar ti set v0='ZE' where id=2; -update noar tt set b1='5MWOR8' where id=2; -update noar ti set b1='5MWOR8' where id=2; -update noar tt set v0='JZLR2M' where id=2; -update noar ti set v0='JZLR2M' where id=2; -update noar tt set b2='WGUMKCTYWSMWK6LT2XV7ZX5K7NQ' where id=2; -update noar ti set b2='WGUMKCTYWSMWK6LT2XV7ZX5K7NQ' where id=2; -update noar tt set v0='5JRK06C9QZL0X' where id=3; -update noar ti set v0='5JRK06C9QZL0X' where id=3; -update noar tt set b0='2XK5UFJAC2C86O0BL75PTA1DKRS3' where id=3; -update noar ti set b0='2XK5UFJAC2C86O0BL75PTA1DKRS3' where id=3; -update noar tt set v0='R88GRBCKRR4GOJCJCV0V' where id=3; -update noar ti set v0='R88GRBCKRR4GOJCJCV0V' where id=3; -update noar tt set b1='3ZMX9HD0A37PB8JP8FBF6WIX1IF1D7OD' where id=3; -update noar ti set b1='3ZMX9HD0A37PB8JP8FBF6WIX1IF1D7OD' where id=3; -update noar tt set v0='J2W9YJ1F37BQ0RVU0TE1PD1WK1Q0MOY' where id=3; -update noar ti set v0='J2W9YJ1F37BQ0RVU0TE1PD1WK1Q0MOY' where id=3; -update noar tt set b2='W1VTVX64P881E1C0LEF9' where id=3; -update noar ti set b2='W1VTVX64P881E1C0LEF9' where id=3; -update noar tt set v0='JUQC4PQSW1FH0JBJPF' where id=4; -update noar ti set v0='JUQC4PQSW1FH0JBJPF' where id=4; -update noar tt set b0='MC6Q3JQR88' where id=4; -update noar ti set b0='MC6Q3JQR88' where id=4; -update noar tt set v0='0T5OSG00PW6YWPXEDT1WC0A0ZBVEPM' where id=4; -update noar ti set v0='0T5OSG00PW6YWPXEDT1WC0A0ZBVEPM' where id=4; -update noar tt set b1='7BF7EI1' where id=4; -update noar ti set b1='7BF7EI1' where id=4; -update noar tt set v0='DPV7D8B2VZU9V4JJSZ2N7U1UBQ' where id=4; -update noar ti set v0='DPV7D8B2VZU9V4JJSZ2N7U1UBQ' where id=4; -update noar tt set b2='2FCJ8TFM3N0ICBDMMUM0' where id=4; -update noar ti set b2='2FCJ8TFM3N0ICBDMMUM0' where id=4; -update noar tt set v0='HJQC0OCESWPGF14VOVKT' where id=5; -update noar ti set v0='HJQC0OCESWPGF14VOVKT' where id=5; -update noar tt set b0='8O9UCSXDF7GU' where id=5; -update noar ti set b0='8O9UCSXDF7GU' where id=5; -update noar tt set v0='OYVZDAC0QB1OBB' where id=5; -update noar ti set v0='OYVZDAC0QB1OBB' where id=5; -update noar tt set b1='HHH50' where id=5; -update noar ti set b1='HHH50' where id=5; -update noar tt set v0='Z8MVSR60GOHWRX72QM0UQEN985' where id=5; -update noar ti set v0='Z8MVSR60GOHWRX72QM0UQEN985' where id=5; -update noar tt set b2='K779NJDMFEOA' where id=5; -update noar ti set b2='K779NJDMFEOA' where id=5; -update noar tt set v0='OVXT1X' where id=6; -update noar ti set v0='OVXT1X' where id=6; -update noar tt set b0='63V2OXBQNKL2LD710' where id=6; -update noar ti set b0='63V2OXBQNKL2LD710' where id=6; -update noar tt set v0='IWWAXFNG84G6MTUOB35EB9GKDKYM' where id=6; -update noar ti set v0='IWWAXFNG84G6MTUOB35EB9GKDKYM' where id=6; -update noar tt set b1='7HW3YATS3WGVZWQ8B24C74' where id=6; -update noar ti set b1='7HW3YATS3WGVZWQ8B24C74' where id=6; -update noar tt set v0='GBERGIH8' where id=6; -update noar ti set v0='GBERGIH8' where id=6; -update noar tt set b2='YR3LN' where id=6; -update noar ti set b2='YR3LN' where id=6; -update noar tt set v0='ZXVUWNSHXVNHGDEOWWBF6YBND1C0R3A7' where id=7; -update noar ti set v0='ZXVUWNSHXVNHGDEOWWBF6YBND1C0R3A7' where id=7; -update noar tt set b0='63U2P4E7NJPGC8J0K6Q6KIBTD39OLJ' where id=7; -update noar ti set b0='63U2P4E7NJPGC8J0K6Q6KIBTD39OLJ' where id=7; -update noar tt set v0='Y5MCY5697GHDWMX2LJGZMIN' where id=7; -update noar ti set v0='Y5MCY5697GHDWMX2LJGZMIN' where id=7; -update noar tt set b1='1U09FXSSIYL16M6JEA8H606P' where id=7; -update noar ti set b1='1U09FXSSIYL16M6JEA8H606P' where id=7; -update noar tt set v0='1W0B1V5X9BARERXRDTPS424M0FTS87' where id=7; -update noar ti set v0='1W0B1V5X9BARERXRDTPS424M0FTS87' where id=7; -update noar tt set b2='32BGBT50IT015AQWF11CYXO0RV348V' where id=7; -update noar ti set b2='32BGBT50IT015AQWF11CYXO0RV348V' where id=7; -update noar tt set v0='PQ8FXWADPE5OGKA9W' where id=8; -update noar ti set v0='PQ8FXWADPE5OGKA9W' where id=8; -update noar tt set b0='21YP85HIA8WEFUC8TNX3M50' where id=8; -update noar ti set b0='21YP85HIA8WEFUC8TNX3M50' where id=8; -update noar tt set v0='4VZFL6K01OGTFH2IID1E1' where id=8; -update noar ti set v0='4VZFL6K01OGTFH2IID1E1' where id=8; -update noar tt set b1='JUJISIJ60YBM2GHE9W6M' where id=8; -update noar ti set b1='JUJISIJ60YBM2GHE9W6M' where id=8; -update noar tt set v0='JYQ9EFJDF94MD' where id=8; -update noar ti set v0='JYQ9EFJDF94MD' where id=8; -update noar tt set b2='PHIC3GT1SEJL04' where id=8; -update noar ti set b2='PHIC3GT1SEJL04' where id=8; -update noar tt set v0='9UOB0KDAE96FO' where id=9; -update noar ti set v0='9UOB0KDAE96FO' where id=9; -update noar tt set b0='JX' where id=9; -update noar ti set b0='JX' where id=9; -update noar tt set v0='0Y08GKSNFS62O' where id=9; -update noar ti set v0='0Y08GKSNFS62O' where id=9; -update noar tt set b1='7Q0D2MQDBWV0BOILC56E3E5' where id=9; -update noar ti set b1='7Q0D2MQDBWV0BOILC56E3E5' where id=9; -update noar tt set v0='3ZVTPSW891ZZ9ZW1Q3IIO53SWTAWC22H' where id=9; -update noar ti set v0='3ZVTPSW891ZZ9ZW1Q3IIO53SWTAWC22H' where id=9; -update noar tt set b2='SFUW878IH9VJ0K59RAPU4R9T2' where id=9; -update noar ti set b2='SFUW878IH9VJ0K59RAPU4R9T2' where id=9; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; +This test does not produce any output on success diff --git a/mysql-test/suite/tokudb/r/fast_update_char.result b/mysql-test/suite/tokudb/r/fast_update_char.result index 4121d5d72eba..598458262d9d 100644 --- a/mysql-test/suite/tokudb/r/fast_update_char.result +++ b/mysql-test/suite/tokudb/r/fast_update_char.result @@ -1,54 +1,64 @@ -set default_storage_engine='tokudb'; -drop table if exists tt, ti; -set tokudb_disable_slow_update=1; -create table tt (id int primary key, c char(32), b binary(32)); +set tokudb_enable_fast_update=1; +set session sql_mode=(select replace(@@sql_mode,'STRICT_TRANS_TABLES','')); +set session sql_mode=(select replace(@@sql_mode,'STRICT_ALL_TABLES','')); +create table tt (id int primary key, c char(32), b binary(32)) engine = tokudb; create table ti like tt; alter table ti engine=innodb; insert into tt values (1,null,null); insert into ti values (1,null,null); -update noar tt set c='hi' where id=1; -update noar ti set c='hi' where id=1; +update tt set c='hi' where id=1; +update ti set c='hi' where id=1; include/diff_tables.inc [test.tt, test.ti] -update noar tt set c='there' where id=1; -update noar ti set c='there' where id=1; +update tt set c='there' where id=1; +update ti set c='there' where id=1; include/diff_tables.inc [test.tt, test.ti] drop table tt, ti; -create table tt (id char(8) primary key, c char(32), b binary(32)); +create table tt (id char(8) primary key, +c char(32), +b binary(32)) engine = tokudb; create table ti like tt; alter table ti engine=innodb; insert into tt values ('1',null,null); insert into ti values ('1',null,null); -update noar tt set c='hi' where id='1'; -update noar ti set c='hi' where id='1'; +update tt set c='hi' where id='1'; +update ti set c='hi' where id='1'; include/diff_tables.inc [test.tt, test.ti] -update noar tt set c='there' where id='1'; -update noar ti set c='there' where id='1'; +update tt set c='there' where id='1'; +update ti set c='there' where id='1'; include/diff_tables.inc [test.tt, test.ti] drop table tt, ti; -create table tt (id varchar(8) primary key, a int, b char(32), c char(32), d binary(32)); +create table tt (id varchar(8) primary key, +a int, +b char(32), +c char(32), +d binary(32)) engine = tokudb; create table ti like tt; alter table ti engine=innodb; insert into tt values ('1',null,null,null,null); insert into ti values ('1',null,null,null,null); -update noar tt set b='hi' where id='1'; -update noar ti set b='hi' where id='1'; +update tt set b='hi' where id='1'; +update ti set b='hi' where id='1'; include/diff_tables.inc [test.tt, test.ti] -update noar tt set c='there' where id='1'; -update noar ti set c='there' where id='1'; +update tt set c='there' where id='1'; +update ti set c='there' where id='1'; include/diff_tables.inc [test.tt, test.ti] drop table tt, ti; -create table tt (id varchar(8) primary key, a int, b char(32), c char(32), d binary(32)); +create table tt (id varchar(8) primary key, +a int, +b char(32), +c char(32), +d binary(32)) engine = tokudb; create table ti like tt; alter table ti engine=innodb; insert into tt values ('1',null,null,null,null); insert into ti values ('1',null,null,null,null); -update noar tt set b='123' where id='1'; -update noar ti set b='123' where id='1'; +update tt set b='123' where id='1'; +update ti set b='123' where id='1'; include/diff_tables.inc [test.tt, test.ti] -update noar tt set c=456 where id='1'; -update noar ti set c=456 where id='1'; +update tt set c=456 where id='1'; +update ti set c=456 where id='1'; include/diff_tables.inc [test.tt, test.ti] -update noar tt set c=789 where id=1; -update noar ti set c=789 where id=1; +update tt set c=789 where id=1; +update ti set c=789 where id=1; include/diff_tables.inc [test.tt, test.ti] drop table tt, ti; diff --git a/mysql-test/suite/tokudb/r/fast_update_deadlock.result b/mysql-test/suite/tokudb/r/fast_update_deadlock.result index 7a34d9122ea6..ac1e99c932a8 100644 --- a/mysql-test/suite/tokudb/r/fast_update_deadlock.result +++ b/mysql-test/suite/tokudb/r/fast_update_deadlock.result @@ -1,13 +1,18 @@ -drop table if exists t; -set default_storage_engine='tokudb'; -create table t (id bigint primary key, b bigint not null default 0); +set tokudb_enable_fast_update=1; +set session sql_mode=(select replace(@@sql_mode,'STRICT_TRANS_TABLES','')); +set session sql_mode=(select replace(@@sql_mode,'STRICT_ALL_TABLES','')); +create table t (id bigint primary key, +b bigint not null default 0) engine = tokudb; insert into t (id) values (1),(2); +set tokudb_enable_fast_update=1; +set session sql_mode=(select replace(@@sql_mode,'STRICT_TRANS_TABLES','')); +set session sql_mode=(select replace(@@sql_mode,'STRICT_ALL_TABLES','')); begin; -update noar t set b=b+1 where id=1; +update t set b=b+1 where id=1; begin; -update noar t set b=b-1 where id=2; -update noar t set b=b+1 where id=2; -update noar t set b=b-1 where id=1; +update t set b=b-1 where id=2; +update t set b=b+1 where id=2; +update t set b=b-1 where id=1; Got one of the listed errors rollback; commit; diff --git a/mysql-test/suite/tokudb/r/fast_update_decr_floor.result b/mysql-test/suite/tokudb/r/fast_update_decr_floor.result index c93f02a8583d..4a963777fc08 100644 --- a/mysql-test/suite/tokudb/r/fast_update_decr_floor.result +++ b/mysql-test/suite/tokudb/r/fast_update_decr_floor.result @@ -1,313 +1 @@ -set default_storage_engine='tokudb'; -drop table if exists t; -set tokudb_disable_slow_update=1; -create table tt ( -id tinyint null primary key, -x tinyint null -); -insert into tt values (1,4); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set x=if(x=0,0,x-1) where id=1; -ERROR 42000: Table 'tt' uses an extension that doesn't exist in this XYZ version -drop table tt, ti; -create table tt ( -id tinyint not null primary key, -x tinyint not null -); -insert into tt values (1,4); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set x=if(x=0,0,x-1) where id=1; -ERROR 42000: Table 'tt' uses an extension that doesn't exist in this XYZ version -drop table tt, ti; -create table tt ( -id tinyint unsigned null primary key, -x tinyint unsigned null -); -insert into tt values (1,4); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt ( -id tinyint unsigned not null primary key, -x tinyint unsigned not null -); -insert into tt values (1,4); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt ( -id smallint null primary key, -x smallint null -); -insert into tt values (1,4); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set x=if(x=0,0,x-1) where id=1; -ERROR 42000: Table 'tt' uses an extension that doesn't exist in this XYZ version -drop table tt, ti; -create table tt ( -id smallint not null primary key, -x smallint not null -); -insert into tt values (1,4); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set x=if(x=0,0,x-1) where id=1; -ERROR 42000: Table 'tt' uses an extension that doesn't exist in this XYZ version -drop table tt, ti; -create table tt ( -id smallint unsigned null primary key, -x smallint unsigned null -); -insert into tt values (1,4); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt ( -id smallint unsigned not null primary key, -x smallint unsigned not null -); -insert into tt values (1,4); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt ( -id mediumint null primary key, -x mediumint null -); -insert into tt values (1,4); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set x=if(x=0,0,x-1) where id=1; -ERROR 42000: Table 'tt' uses an extension that doesn't exist in this XYZ version -drop table tt, ti; -create table tt ( -id mediumint not null primary key, -x mediumint not null -); -insert into tt values (1,4); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set x=if(x=0,0,x-1) where id=1; -ERROR 42000: Table 'tt' uses an extension that doesn't exist in this XYZ version -drop table tt, ti; -create table tt ( -id mediumint unsigned null primary key, -x mediumint unsigned null -); -insert into tt values (1,4); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt ( -id mediumint unsigned not null primary key, -x mediumint unsigned not null -); -insert into tt values (1,4); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt ( -id int null primary key, -x int null -); -insert into tt values (1,4); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set x=if(x=0,0,x-1) where id=1; -ERROR 42000: Table 'tt' uses an extension that doesn't exist in this XYZ version -drop table tt, ti; -create table tt ( -id int not null primary key, -x int not null -); -insert into tt values (1,4); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set x=if(x=0,0,x-1) where id=1; -ERROR 42000: Table 'tt' uses an extension that doesn't exist in this XYZ version -drop table tt, ti; -create table tt ( -id int unsigned null primary key, -x int unsigned null -); -insert into tt values (1,4); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt ( -id int unsigned not null primary key, -x int unsigned not null -); -insert into tt values (1,4); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt ( -id bigint null primary key, -x bigint null -); -insert into tt values (1,4); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set x=if(x=0,0,x-1) where id=1; -ERROR 42000: Table 'tt' uses an extension that doesn't exist in this XYZ version -drop table tt, ti; -create table tt ( -id bigint not null primary key, -x bigint not null -); -insert into tt values (1,4); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set x=if(x=0,0,x-1) where id=1; -ERROR 42000: Table 'tt' uses an extension that doesn't exist in this XYZ version -drop table tt, ti; -create table tt ( -id bigint unsigned null primary key, -x bigint unsigned null -); -insert into tt values (1,4); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt ( -id bigint unsigned not null primary key, -x bigint unsigned not null -); -insert into tt values (1,4); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; +This test does not produce any output on success diff --git a/mysql-test/suite/tokudb/r/fast_update_disable_slow_update.result b/mysql-test/suite/tokudb/r/fast_update_disable_slow_update.result deleted file mode 100644 index 13bbb8375285..000000000000 --- a/mysql-test/suite/tokudb/r/fast_update_disable_slow_update.result +++ /dev/null @@ -1,7 +0,0 @@ -set default_storage_engine='tokudb'; -drop table if exists t; -create table t (id int primary key, b int, key(b)); -set tokudb_disable_slow_update=1; -update noar t set b=b+1 where id=42; -ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -drop table t; diff --git a/mysql-test/suite/tokudb/r/fast_update_error.result b/mysql-test/suite/tokudb/r/fast_update_error.result index 7a4795615a94..69b16e4ac042 100644 --- a/mysql-test/suite/tokudb/r/fast_update_error.result +++ b/mysql-test/suite/tokudb/r/fast_update_error.result @@ -1,9 +1,9 @@ -set default_storage_engine='tokudb'; -drop table if exists tt; -set tokudb_disable_slow_update=1; -create table tt (id int primary key, x int); -update noar tt set x=1 where id='abc'; +set tokudb_enable_fast_update=1; +set session sql_mode=(select replace(@@sql_mode,'STRICT_TRANS_TABLES','')); +set session sql_mode=(select replace(@@sql_mode,'STRICT_ALL_TABLES','')); +create table tt (id int primary key, x int) engine = tokudb; +update tt set x=1 where id='abc'; ERROR 42000: Table 'tt' uses an extension that doesn't exist in this XYZ version -update noar tt set x='abc' where id=1; +update tt set x='abc' where id=1; ERROR 42000: Table 'tt' uses an extension that doesn't exist in this XYZ version drop table tt; diff --git a/mysql-test/suite/tokudb/r/fast_update_int.result b/mysql-test/suite/tokudb/r/fast_update_int.result index 3e37ceb035a9..0189c350fb18 100644 --- a/mysql-test/suite/tokudb/r/fast_update_int.result +++ b/mysql-test/suite/tokudb/r/fast_update_int.result @@ -1,1122 +1,1120 @@ -set default_storage_engine='tokudb'; -drop table if exists t; +### Test int for: tinyint, , null create table t ( -id tinyint null primary key, +id tinyint primary key, x tinyint null -); -insert into t values (1,0),(2,0),(3,0); +) engine = tokudb; +insert into t values (1,0), (2,0), (3,0); select * from t; id x 1 0 2 0 3 0 -set tokudb_disable_slow_update=1; -update noar t set x=100 where id=2; +update t set x = 100 where id = 2; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+1 where id=3; +update t set x = x + 1 where id = 3; select * from t; id x 1 0 2 100 3 1 -update noar t set x=x-1 where id=3; +update t set x = x - 1 where id = 3; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+100 where id=3; +update t set x = x + 100 where id = 3; select * from t; id x 1 0 2 100 3 100 -update noar t set x=x-100 where id=3; +update t set x = x - 100 where id = 3; select * from t; id x 1 0 2 100 3 0 -update noar t set x=1+x where id=1; +update t set x = 1 + x where id = 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=-x where id=1; +update t set x = -x where id = 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=x+1 where id=100; +update t set x = x + 1 where id = 100; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+1 where 1 <= id and id < 100; +update t set x = x + 1 where 1 <= id and id < 100; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=x+1; +update t set x = x + 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version drop table t; +### Test int for: tinyint, , not null create table t ( -id tinyint not null primary key, +id tinyint primary key, x tinyint not null -); -insert into t values (1,0),(2,0),(3,0); +) engine = tokudb; +insert into t values (1,0), (2,0), (3,0); select * from t; id x 1 0 2 0 3 0 -set tokudb_disable_slow_update=1; -update noar t set x=100 where id=2; +update t set x = 100 where id = 2; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+1 where id=3; +update t set x = x + 1 where id = 3; select * from t; id x 1 0 2 100 3 1 -update noar t set x=x-1 where id=3; +update t set x = x - 1 where id = 3; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+100 where id=3; +update t set x = x + 100 where id = 3; select * from t; id x 1 0 2 100 3 100 -update noar t set x=x-100 where id=3; +update t set x = x - 100 where id = 3; select * from t; id x 1 0 2 100 3 0 -update noar t set x=1+x where id=1; +update t set x = 1 + x where id = 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=-x where id=1; +update t set x = -x where id = 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=x+1 where id=100; +update t set x = x + 1 where id = 100; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+1 where 1 <= id and id < 100; +update t set x = x + 1 where 1 <= id and id < 100; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=x+1; +update t set x = x + 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version drop table t; +### Test int for: tinyint, unsigned, null create table t ( -id tinyint unsigned null primary key, +id tinyint unsigned primary key, x tinyint unsigned null -); -insert into t values (1,0),(2,0),(3,0); +) engine = tokudb; +insert into t values (1,0), (2,0), (3,0); select * from t; id x 1 0 2 0 3 0 -set tokudb_disable_slow_update=1; -update noar t set x=100 where id=2; +update t set x = 100 where id = 2; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+1 where id=3; +update t set x = x + 1 where id = 3; select * from t; id x 1 0 2 100 3 1 -update noar t set x=x-1 where id=3; +update t set x = x - 1 where id = 3; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+100 where id=3; +update t set x = x + 100 where id = 3; select * from t; id x 1 0 2 100 3 100 -update noar t set x=x-100 where id=3; +update t set x = x - 100 where id = 3; select * from t; id x 1 0 2 100 3 0 -update noar t set x=1+x where id=1; +update t set x = 1 + x where id = 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=-x where id=1; +update t set x = -x where id = 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=x+1 where id=100; +update t set x = x + 1 where id = 100; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+1 where 1 <= id and id < 100; +update t set x = x + 1 where 1 <= id and id < 100; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=x+1; +update t set x = x + 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version drop table t; +### Test int for: tinyint, unsigned, not null create table t ( -id tinyint unsigned not null primary key, +id tinyint unsigned primary key, x tinyint unsigned not null -); -insert into t values (1,0),(2,0),(3,0); +) engine = tokudb; +insert into t values (1,0), (2,0), (3,0); select * from t; id x 1 0 2 0 3 0 -set tokudb_disable_slow_update=1; -update noar t set x=100 where id=2; +update t set x = 100 where id = 2; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+1 where id=3; +update t set x = x + 1 where id = 3; select * from t; id x 1 0 2 100 3 1 -update noar t set x=x-1 where id=3; +update t set x = x - 1 where id = 3; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+100 where id=3; +update t set x = x + 100 where id = 3; select * from t; id x 1 0 2 100 3 100 -update noar t set x=x-100 where id=3; +update t set x = x - 100 where id = 3; select * from t; id x 1 0 2 100 3 0 -update noar t set x=1+x where id=1; +update t set x = 1 + x where id = 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=-x where id=1; +update t set x = -x where id = 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=x+1 where id=100; +update t set x = x + 1 where id = 100; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+1 where 1 <= id and id < 100; +update t set x = x + 1 where 1 <= id and id < 100; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=x+1; +update t set x = x + 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version drop table t; +### Test int for: smallint, , null create table t ( -id smallint null primary key, +id smallint primary key, x smallint null -); -insert into t values (1,0),(2,0),(3,0); +) engine = tokudb; +insert into t values (1,0), (2,0), (3,0); select * from t; id x 1 0 2 0 3 0 -set tokudb_disable_slow_update=1; -update noar t set x=100 where id=2; +update t set x = 100 where id = 2; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+1 where id=3; +update t set x = x + 1 where id = 3; select * from t; id x 1 0 2 100 3 1 -update noar t set x=x-1 where id=3; +update t set x = x - 1 where id = 3; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+100 where id=3; +update t set x = x + 100 where id = 3; select * from t; id x 1 0 2 100 3 100 -update noar t set x=x-100 where id=3; +update t set x = x - 100 where id = 3; select * from t; id x 1 0 2 100 3 0 -update noar t set x=1+x where id=1; +update t set x = 1 + x where id = 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=-x where id=1; +update t set x = -x where id = 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=x+1 where id=100; +update t set x = x + 1 where id = 100; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+1 where 1 <= id and id < 100; +update t set x = x + 1 where 1 <= id and id < 100; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=x+1; +update t set x = x + 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version drop table t; +### Test int for: smallint, , not null create table t ( -id smallint not null primary key, +id smallint primary key, x smallint not null -); -insert into t values (1,0),(2,0),(3,0); +) engine = tokudb; +insert into t values (1,0), (2,0), (3,0); select * from t; id x 1 0 2 0 3 0 -set tokudb_disable_slow_update=1; -update noar t set x=100 where id=2; +update t set x = 100 where id = 2; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+1 where id=3; +update t set x = x + 1 where id = 3; select * from t; id x 1 0 2 100 3 1 -update noar t set x=x-1 where id=3; +update t set x = x - 1 where id = 3; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+100 where id=3; +update t set x = x + 100 where id = 3; select * from t; id x 1 0 2 100 3 100 -update noar t set x=x-100 where id=3; +update t set x = x - 100 where id = 3; select * from t; id x 1 0 2 100 3 0 -update noar t set x=1+x where id=1; +update t set x = 1 + x where id = 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=-x where id=1; +update t set x = -x where id = 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=x+1 where id=100; +update t set x = x + 1 where id = 100; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+1 where 1 <= id and id < 100; +update t set x = x + 1 where 1 <= id and id < 100; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=x+1; +update t set x = x + 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version drop table t; +### Test int for: smallint, unsigned, null create table t ( -id smallint unsigned null primary key, +id smallint unsigned primary key, x smallint unsigned null -); -insert into t values (1,0),(2,0),(3,0); +) engine = tokudb; +insert into t values (1,0), (2,0), (3,0); select * from t; id x 1 0 2 0 3 0 -set tokudb_disable_slow_update=1; -update noar t set x=100 where id=2; +update t set x = 100 where id = 2; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+1 where id=3; +update t set x = x + 1 where id = 3; select * from t; id x 1 0 2 100 3 1 -update noar t set x=x-1 where id=3; +update t set x = x - 1 where id = 3; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+100 where id=3; +update t set x = x + 100 where id = 3; select * from t; id x 1 0 2 100 3 100 -update noar t set x=x-100 where id=3; +update t set x = x - 100 where id = 3; select * from t; id x 1 0 2 100 3 0 -update noar t set x=1+x where id=1; +update t set x = 1 + x where id = 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=-x where id=1; +update t set x = -x where id = 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=x+1 where id=100; +update t set x = x + 1 where id = 100; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+1 where 1 <= id and id < 100; +update t set x = x + 1 where 1 <= id and id < 100; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=x+1; +update t set x = x + 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version drop table t; +### Test int for: smallint, unsigned, not null create table t ( -id smallint unsigned not null primary key, +id smallint unsigned primary key, x smallint unsigned not null -); -insert into t values (1,0),(2,0),(3,0); +) engine = tokudb; +insert into t values (1,0), (2,0), (3,0); select * from t; id x 1 0 2 0 3 0 -set tokudb_disable_slow_update=1; -update noar t set x=100 where id=2; +update t set x = 100 where id = 2; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+1 where id=3; +update t set x = x + 1 where id = 3; select * from t; id x 1 0 2 100 3 1 -update noar t set x=x-1 where id=3; +update t set x = x - 1 where id = 3; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+100 where id=3; +update t set x = x + 100 where id = 3; select * from t; id x 1 0 2 100 3 100 -update noar t set x=x-100 where id=3; +update t set x = x - 100 where id = 3; select * from t; id x 1 0 2 100 3 0 -update noar t set x=1+x where id=1; +update t set x = 1 + x where id = 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=-x where id=1; +update t set x = -x where id = 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=x+1 where id=100; +update t set x = x + 1 where id = 100; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+1 where 1 <= id and id < 100; +update t set x = x + 1 where 1 <= id and id < 100; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=x+1; +update t set x = x + 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version drop table t; +### Test int for: mediumint, , null create table t ( -id mediumint null primary key, +id mediumint primary key, x mediumint null -); -insert into t values (1,0),(2,0),(3,0); +) engine = tokudb; +insert into t values (1,0), (2,0), (3,0); select * from t; id x 1 0 2 0 3 0 -set tokudb_disable_slow_update=1; -update noar t set x=100 where id=2; +update t set x = 100 where id = 2; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+1 where id=3; +update t set x = x + 1 where id = 3; select * from t; id x 1 0 2 100 3 1 -update noar t set x=x-1 where id=3; +update t set x = x - 1 where id = 3; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+100 where id=3; +update t set x = x + 100 where id = 3; select * from t; id x 1 0 2 100 3 100 -update noar t set x=x-100 where id=3; +update t set x = x - 100 where id = 3; select * from t; id x 1 0 2 100 3 0 -update noar t set x=1+x where id=1; +update t set x = 1 + x where id = 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=-x where id=1; +update t set x = -x where id = 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=x+1 where id=100; +update t set x = x + 1 where id = 100; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+1 where 1 <= id and id < 100; +update t set x = x + 1 where 1 <= id and id < 100; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=x+1; +update t set x = x + 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version drop table t; +### Test int for: mediumint, , not null create table t ( -id mediumint not null primary key, +id mediumint primary key, x mediumint not null -); -insert into t values (1,0),(2,0),(3,0); +) engine = tokudb; +insert into t values (1,0), (2,0), (3,0); select * from t; id x 1 0 2 0 3 0 -set tokudb_disable_slow_update=1; -update noar t set x=100 where id=2; +update t set x = 100 where id = 2; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+1 where id=3; +update t set x = x + 1 where id = 3; select * from t; id x 1 0 2 100 3 1 -update noar t set x=x-1 where id=3; +update t set x = x - 1 where id = 3; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+100 where id=3; +update t set x = x + 100 where id = 3; select * from t; id x 1 0 2 100 3 100 -update noar t set x=x-100 where id=3; +update t set x = x - 100 where id = 3; select * from t; id x 1 0 2 100 3 0 -update noar t set x=1+x where id=1; +update t set x = 1 + x where id = 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=-x where id=1; +update t set x = -x where id = 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=x+1 where id=100; +update t set x = x + 1 where id = 100; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+1 where 1 <= id and id < 100; +update t set x = x + 1 where 1 <= id and id < 100; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=x+1; +update t set x = x + 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version drop table t; +### Test int for: mediumint, unsigned, null create table t ( -id mediumint unsigned null primary key, +id mediumint unsigned primary key, x mediumint unsigned null -); -insert into t values (1,0),(2,0),(3,0); +) engine = tokudb; +insert into t values (1,0), (2,0), (3,0); select * from t; id x 1 0 2 0 3 0 -set tokudb_disable_slow_update=1; -update noar t set x=100 where id=2; +update t set x = 100 where id = 2; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+1 where id=3; +update t set x = x + 1 where id = 3; select * from t; id x 1 0 2 100 3 1 -update noar t set x=x-1 where id=3; +update t set x = x - 1 where id = 3; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+100 where id=3; +update t set x = x + 100 where id = 3; select * from t; id x 1 0 2 100 3 100 -update noar t set x=x-100 where id=3; +update t set x = x - 100 where id = 3; select * from t; id x 1 0 2 100 3 0 -update noar t set x=1+x where id=1; +update t set x = 1 + x where id = 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=-x where id=1; +update t set x = -x where id = 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=x+1 where id=100; +update t set x = x + 1 where id = 100; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+1 where 1 <= id and id < 100; +update t set x = x + 1 where 1 <= id and id < 100; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=x+1; +update t set x = x + 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version drop table t; +### Test int for: mediumint, unsigned, not null create table t ( -id mediumint unsigned not null primary key, +id mediumint unsigned primary key, x mediumint unsigned not null -); -insert into t values (1,0),(2,0),(3,0); +) engine = tokudb; +insert into t values (1,0), (2,0), (3,0); select * from t; id x 1 0 2 0 3 0 -set tokudb_disable_slow_update=1; -update noar t set x=100 where id=2; +update t set x = 100 where id = 2; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+1 where id=3; +update t set x = x + 1 where id = 3; select * from t; id x 1 0 2 100 3 1 -update noar t set x=x-1 where id=3; +update t set x = x - 1 where id = 3; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+100 where id=3; +update t set x = x + 100 where id = 3; select * from t; id x 1 0 2 100 3 100 -update noar t set x=x-100 where id=3; +update t set x = x - 100 where id = 3; select * from t; id x 1 0 2 100 3 0 -update noar t set x=1+x where id=1; +update t set x = 1 + x where id = 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=-x where id=1; +update t set x = -x where id = 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=x+1 where id=100; +update t set x = x + 1 where id = 100; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+1 where 1 <= id and id < 100; +update t set x = x + 1 where 1 <= id and id < 100; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=x+1; +update t set x = x + 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version drop table t; +### Test int for: int, , null create table t ( -id int null primary key, +id int primary key, x int null -); -insert into t values (1,0),(2,0),(3,0); +) engine = tokudb; +insert into t values (1,0), (2,0), (3,0); select * from t; id x 1 0 2 0 3 0 -set tokudb_disable_slow_update=1; -update noar t set x=100 where id=2; +update t set x = 100 where id = 2; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+1 where id=3; +update t set x = x + 1 where id = 3; select * from t; id x 1 0 2 100 3 1 -update noar t set x=x-1 where id=3; +update t set x = x - 1 where id = 3; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+100 where id=3; +update t set x = x + 100 where id = 3; select * from t; id x 1 0 2 100 3 100 -update noar t set x=x-100 where id=3; +update t set x = x - 100 where id = 3; select * from t; id x 1 0 2 100 3 0 -update noar t set x=1+x where id=1; +update t set x = 1 + x where id = 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=-x where id=1; +update t set x = -x where id = 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=x+1 where id=100; +update t set x = x + 1 where id = 100; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+1 where 1 <= id and id < 100; +update t set x = x + 1 where 1 <= id and id < 100; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=x+1; +update t set x = x + 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version drop table t; +### Test int for: int, , not null create table t ( -id int not null primary key, +id int primary key, x int not null -); -insert into t values (1,0),(2,0),(3,0); +) engine = tokudb; +insert into t values (1,0), (2,0), (3,0); select * from t; id x 1 0 2 0 3 0 -set tokudb_disable_slow_update=1; -update noar t set x=100 where id=2; +update t set x = 100 where id = 2; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+1 where id=3; +update t set x = x + 1 where id = 3; select * from t; id x 1 0 2 100 3 1 -update noar t set x=x-1 where id=3; +update t set x = x - 1 where id = 3; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+100 where id=3; +update t set x = x + 100 where id = 3; select * from t; id x 1 0 2 100 3 100 -update noar t set x=x-100 where id=3; +update t set x = x - 100 where id = 3; select * from t; id x 1 0 2 100 3 0 -update noar t set x=1+x where id=1; +update t set x = 1 + x where id = 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=-x where id=1; +update t set x = -x where id = 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=x+1 where id=100; +update t set x = x + 1 where id = 100; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+1 where 1 <= id and id < 100; +update t set x = x + 1 where 1 <= id and id < 100; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=x+1; +update t set x = x + 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version drop table t; +### Test int for: int, unsigned, null create table t ( -id int unsigned null primary key, +id int unsigned primary key, x int unsigned null -); -insert into t values (1,0),(2,0),(3,0); +) engine = tokudb; +insert into t values (1,0), (2,0), (3,0); select * from t; id x 1 0 2 0 3 0 -set tokudb_disable_slow_update=1; -update noar t set x=100 where id=2; +update t set x = 100 where id = 2; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+1 where id=3; +update t set x = x + 1 where id = 3; select * from t; id x 1 0 2 100 3 1 -update noar t set x=x-1 where id=3; +update t set x = x - 1 where id = 3; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+100 where id=3; +update t set x = x + 100 where id = 3; select * from t; id x 1 0 2 100 3 100 -update noar t set x=x-100 where id=3; +update t set x = x - 100 where id = 3; select * from t; id x 1 0 2 100 3 0 -update noar t set x=1+x where id=1; +update t set x = 1 + x where id = 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=-x where id=1; +update t set x = -x where id = 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=x+1 where id=100; +update t set x = x + 1 where id = 100; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+1 where 1 <= id and id < 100; +update t set x = x + 1 where 1 <= id and id < 100; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=x+1; +update t set x = x + 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version drop table t; +### Test int for: int, unsigned, not null create table t ( -id int unsigned not null primary key, +id int unsigned primary key, x int unsigned not null -); -insert into t values (1,0),(2,0),(3,0); +) engine = tokudb; +insert into t values (1,0), (2,0), (3,0); select * from t; id x 1 0 2 0 3 0 -set tokudb_disable_slow_update=1; -update noar t set x=100 where id=2; +update t set x = 100 where id = 2; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+1 where id=3; +update t set x = x + 1 where id = 3; select * from t; id x 1 0 2 100 3 1 -update noar t set x=x-1 where id=3; +update t set x = x - 1 where id = 3; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+100 where id=3; +update t set x = x + 100 where id = 3; select * from t; id x 1 0 2 100 3 100 -update noar t set x=x-100 where id=3; +update t set x = x - 100 where id = 3; select * from t; id x 1 0 2 100 3 0 -update noar t set x=1+x where id=1; +update t set x = 1 + x where id = 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=-x where id=1; +update t set x = -x where id = 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=x+1 where id=100; +update t set x = x + 1 where id = 100; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+1 where 1 <= id and id < 100; +update t set x = x + 1 where 1 <= id and id < 100; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=x+1; +update t set x = x + 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version drop table t; +### Test int for: bigint, , null create table t ( -id bigint null primary key, +id bigint primary key, x bigint null -); -insert into t values (1,0),(2,0),(3,0); +) engine = tokudb; +insert into t values (1,0), (2,0), (3,0); select * from t; id x 1 0 2 0 3 0 -set tokudb_disable_slow_update=1; -update noar t set x=100 where id=2; +update t set x = 100 where id = 2; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+1 where id=3; +update t set x = x + 1 where id = 3; select * from t; id x 1 0 2 100 3 1 -update noar t set x=x-1 where id=3; +update t set x = x - 1 where id = 3; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+100 where id=3; +update t set x = x + 100 where id = 3; select * from t; id x 1 0 2 100 3 100 -update noar t set x=x-100 where id=3; +update t set x = x - 100 where id = 3; select * from t; id x 1 0 2 100 3 0 -update noar t set x=1+x where id=1; +update t set x = 1 + x where id = 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=-x where id=1; +update t set x = -x where id = 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=x+1 where id=100; +update t set x = x + 1 where id = 100; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+1 where 1 <= id and id < 100; +update t set x = x + 1 where 1 <= id and id < 100; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=x+1; +update t set x = x + 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version drop table t; +### Test int for: bigint, , not null create table t ( -id bigint not null primary key, +id bigint primary key, x bigint not null -); -insert into t values (1,0),(2,0),(3,0); +) engine = tokudb; +insert into t values (1,0), (2,0), (3,0); select * from t; id x 1 0 2 0 3 0 -set tokudb_disable_slow_update=1; -update noar t set x=100 where id=2; +update t set x = 100 where id = 2; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+1 where id=3; +update t set x = x + 1 where id = 3; select * from t; id x 1 0 2 100 3 1 -update noar t set x=x-1 where id=3; +update t set x = x - 1 where id = 3; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+100 where id=3; +update t set x = x + 100 where id = 3; select * from t; id x 1 0 2 100 3 100 -update noar t set x=x-100 where id=3; +update t set x = x - 100 where id = 3; select * from t; id x 1 0 2 100 3 0 -update noar t set x=1+x where id=1; +update t set x = 1 + x where id = 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=-x where id=1; +update t set x = -x where id = 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=x+1 where id=100; +update t set x = x + 1 where id = 100; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+1 where 1 <= id and id < 100; +update t set x = x + 1 where 1 <= id and id < 100; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=x+1; +update t set x = x + 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version drop table t; +### Test int for: bigint, unsigned, null create table t ( -id bigint unsigned null primary key, +id bigint unsigned primary key, x bigint unsigned null -); -insert into t values (1,0),(2,0),(3,0); +) engine = tokudb; +insert into t values (1,0), (2,0), (3,0); select * from t; id x 1 0 2 0 3 0 -set tokudb_disable_slow_update=1; -update noar t set x=100 where id=2; +update t set x = 100 where id = 2; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+1 where id=3; +update t set x = x + 1 where id = 3; select * from t; id x 1 0 2 100 3 1 -update noar t set x=x-1 where id=3; +update t set x = x - 1 where id = 3; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+100 where id=3; +update t set x = x + 100 where id = 3; select * from t; id x 1 0 2 100 3 100 -update noar t set x=x-100 where id=3; +update t set x = x - 100 where id = 3; select * from t; id x 1 0 2 100 3 0 -update noar t set x=1+x where id=1; +update t set x = 1 + x where id = 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=-x where id=1; +update t set x = -x where id = 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=x+1 where id=100; +update t set x = x + 1 where id = 100; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+1 where 1 <= id and id < 100; +update t set x = x + 1 where 1 <= id and id < 100; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=x+1; +update t set x = x + 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version drop table t; +### Test int for: bigint, unsigned, not null create table t ( -id bigint unsigned not null primary key, +id bigint unsigned primary key, x bigint unsigned not null -); -insert into t values (1,0),(2,0),(3,0); +) engine = tokudb; +insert into t values (1,0), (2,0), (3,0); select * from t; id x 1 0 2 0 3 0 -set tokudb_disable_slow_update=1; -update noar t set x=100 where id=2; +update t set x = 100 where id = 2; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+1 where id=3; +update t set x = x + 1 where id = 3; select * from t; id x 1 0 2 100 3 1 -update noar t set x=x-1 where id=3; +update t set x = x - 1 where id = 3; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+100 where id=3; +update t set x = x + 100 where id = 3; select * from t; id x 1 0 2 100 3 100 -update noar t set x=x-100 where id=3; +update t set x = x - 100 where id = 3; select * from t; id x 1 0 2 100 3 0 -update noar t set x=1+x where id=1; +update t set x = 1 + x where id = 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=-x where id=1; +update t set x = -x where id = 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=x+1 where id=100; +update t set x = x + 1 where id = 100; select * from t; id x 1 0 2 100 3 0 -update noar t set x=x+1 where 1 <= id and id < 100; +update t set x = x + 1 where 1 <= id and id < 100; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=x+1; +update t set x = x + 1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version drop table t; diff --git a/mysql-test/suite/tokudb/r/fast_update_int_bounds.result b/mysql-test/suite/tokudb/r/fast_update_int_bounds.result index 042cbcf0f70b..12263b436f96 100644 --- a/mysql-test/suite/tokudb/r/fast_update_int_bounds.result +++ b/mysql-test/suite/tokudb/r/fast_update_int_bounds.result @@ -1,61 +1,61 @@ -set default_storage_engine='tokudb'; -drop table if exists t; -create table tt (id int primary key, x int); +create table tt (id int primary key, x int) engine = tokudb; insert into tt values (1,0),(2,-pow(2,31)),(3,pow(2,31)-1); create table ti like tt; alter table ti engine=innodb; insert into ti select * from tt; -set tokudb_disable_slow_update=1; -update noar tt set x=x+1 where id=1; -update noar ti set x=x+1 where id=1; +set tokudb_enable_fast_update=1; +set session sql_mode=(select replace(@@sql_mode,'STRICT_TRANS_TABLES','')); +set session sql_mode=(select replace(@@sql_mode,'STRICT_ALL_TABLES','')); +update tt set x=x+1 where id=1; +update ti set x=x+1 where id=1; include/diff_tables.inc [test.tt, test.ti] -update noar tt set x=x-2 where id=1; -update noar ti set x=x-2 where id=1; +update tt set x=x-2 where id=1; +update ti set x=x-2 where id=1; include/diff_tables.inc [test.tt, test.ti] -update noar tt set x=x+1 where id=1; -update noar ti set x=x+1 where id=1; +update tt set x=x+1 where id=1; +update ti set x=x+1 where id=1; include/diff_tables.inc [test.tt, test.ti] -update noar tt set x=x-1 where id=2; -update noar ti set x=x-1 where id=2; +update tt set x=x-1 where id=2; +update ti set x=x-1 where id=2; Warnings: Warning 1264 Out of range value for column 'x' at row 1 include/diff_tables.inc [test.tt, test.ti] -update noar tt set x=x+1 where id=2; -update noar ti set x=x+1 where id=2; +update tt set x=x+1 where id=2; +update ti set x=x+1 where id=2; include/diff_tables.inc [test.tt, test.ti] -update noar tt set x=x+1 where id=3; -update noar ti set x=x+1 where id=3; +update tt set x=x+1 where id=3; +update ti set x=x+1 where id=3; Warnings: Warning 1264 Out of range value for column 'x' at row 1 include/diff_tables.inc [test.tt, test.ti] -update noar tt set x=x-1 where id=3; -update noar ti set x=x-1 where id=3; +update tt set x=x-1 where id=3; +update ti set x=x-1 where id=3; include/diff_tables.inc [test.tt, test.ti] insert into tt values (4,pow(2,31)-10); insert into ti values (4,pow(2,31)-10); -update noar tt set x=x+20 where id=4; -update noar ti set x=x+20 where id=4; +update tt set x=x+20 where id=4; +update ti set x=x+20 where id=4; Warnings: Warning 1264 Out of range value for column 'x' at row 1 include/diff_tables.inc [test.tt, test.ti] insert into tt values (5,pow(2,31)-10); insert into ti values (5,pow(2,31)-10); -update noar tt set x=x - -20 where id=5; -update noar ti set x=x - -20 where id=5; +update tt set x=x - -20 where id=5; +update ti set x=x - -20 where id=5; Warnings: Warning 1264 Out of range value for column 'x' at row 1 include/diff_tables.inc [test.tt, test.ti] insert into tt values (6,-pow(2,31)+10); insert into ti values (6,-pow(2,31)+10); -update noar tt set x=x-20 where id=6; -update noar ti set x=x-20 where id=6; +update tt set x=x-20 where id=6; +update ti set x=x-20 where id=6; Warnings: Warning 1264 Out of range value for column 'x' at row 1 include/diff_tables.inc [test.tt, test.ti] insert into tt values (7,-pow(2,31)+10); insert into ti values (7,-pow(2,31)+10); -update noar tt set x=x + -20 where id=7; -update noar ti set x=x + -20 where id=7; +update tt set x=x + -20 where id=7; +update ti set x=x + -20 where id=7; Warnings: Warning 1264 Out of range value for column 'x' at row 1 include/diff_tables.inc [test.tt, test.ti] diff --git a/mysql-test/suite/tokudb/r/fast_update_key.result b/mysql-test/suite/tokudb/r/fast_update_key.result index fd819add3542..c6f14e18ee4d 100644 --- a/mysql-test/suite/tokudb/r/fast_update_key.result +++ b/mysql-test/suite/tokudb/r/fast_update_key.result @@ -1,39 +1,55 @@ -set default_storage_engine='tokudb'; -drop table if exists t; -set tokudb_disable_slow_update=1; -create table t (ida int not null, idb bigint not null, idc tinyint unsigned not null, x bigint); -update noar t set x=x+1 where ida=1; +set tokudb_enable_fast_update=1; +set session sql_mode=(select replace(@@sql_mode,'STRICT_TRANS_TABLES','')); +set session sql_mode=(select replace(@@sql_mode,'STRICT_ALL_TABLES','')); +create table t (ida int not null, +idb bigint not null, +idc tinyint unsigned not null, +x bigint) engine = tokudb; +update t set x=x+1 where ida=1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version drop table t; -create table t (ida int not null, idb bigint not null, idc tinyint unsigned not null, x bigint, clustering key(ida,idb,idc)); -update noar t set x=x+1 where ida=1; +create table t (ida int not null, +idb bigint not null, +idc tinyint unsigned not null, +x bigint, +clustering key(ida,idb,idc)) engine = tokudb; +update t set x=x+1 where ida=1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version drop table t; -create table t (ida int not null, idb bigint not null, idc tinyint unsigned not null, x bigint, primary key(ida,idb,idc), key(x)); -update noar t set x=x+1 where ida=1; +create table t (ida int not null, +idb bigint not null, +idc tinyint unsigned not null, +x bigint, +primary key(ida,idb,idc), +key(x)) engine = tokudb; +update t set x=x+1 where ida=1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version drop table t; -create table t (id char(32), x bigint, primary key(id(1))); -update noar t set x=x+1 where id='hi'; +create table t (id char(32), x bigint, primary key(id(1))) engine = tokudb; +update t set x=x+1 where id='hi'; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version drop table t; -create table t (id varchar(32), x bigint, primary key(id(1))); -update noar t set x=x+1 where id='hi'; +create table t (id varchar(32), x bigint, primary key(id(1))) engine = tokudb; +update t set x=x+1 where id='hi'; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version drop table t; -create table t (ida int not null, idb bigint not null, idc tinyint unsigned not null, x bigint, primary key(ida,idb,idc)); +create table t (ida int not null, +idb bigint not null, +idc tinyint unsigned not null, +x bigint, +primary key(ida,idb,idc)) engine = tokudb; insert into t values (1,2,3,0); -update noar t set x=x+1 where ida=1; +update t set x=x+1 where ida=1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=x+1 where ida=1 and idb=2; +update t set x=x+1 where ida=1 and idb=2; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=x+1 where ida=1 and idb=2 or idc=3; +update t set x=x+1 where ida=1 and idb=2 or idc=3; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=x+1 where ida=1 and idb=2 and idc=3; +update t set x=x+1 where ida=1 and idb=2 and idc=3; select * from t; ida idb idc x 1 2 3 1 -update noar t set x=x+1 where idc=3 and ida=1 and idb=2; +update t set x=x+1 where idc=3 and ida=1 and idb=2; select * from t; ida idb idc x 1 2 3 2 diff --git a/mysql-test/suite/tokudb/r/fast_update_sqlmode.result b/mysql-test/suite/tokudb/r/fast_update_sqlmode.result index 262b242fbec6..b92b33969286 100644 --- a/mysql-test/suite/tokudb/r/fast_update_sqlmode.result +++ b/mysql-test/suite/tokudb/r/fast_update_sqlmode.result @@ -1,17 +1,16 @@ -set default_storage_engine='tokudb'; -drop table if exists t; -set tokudb_disable_slow_update=1; -create table t (id int primary key, x int not null); +set tokudb_enable_fast_update=1; +set session sql_mode=(select replace(@@sql_mode,'STRICT_TRANS_TABLES','')); +set session sql_mode=(select replace(@@sql_mode,'STRICT_ALL_TABLES','')); +create table t (id int primary key, x int not null) engine = tokudb; insert into t values (1,0); -update noar t set x=42 where id=1; -update noar t set x=x+1 where id=1; -update noar t set x=x-1 where id=1; +update t set x=42 where id=1; +update t set x=x+1 where id=1; +update t set x=x-1 where id=1; set session sql_mode="NO_ENGINE_SUBSTITUTION,traditional"; -update noar t set x=42 where id=1; +update t set x=42 where id=1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=x+1 where id=1; +update t set x=x+1 where id=1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -update noar t set x=x-1 where id=1; +update t set x=x-1 where id=1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -set session sql_mode="NO_ENGINE_SUBSTITUTION"; drop table t; diff --git a/mysql-test/suite/tokudb/r/fast_update_uint_bounds.result b/mysql-test/suite/tokudb/r/fast_update_uint_bounds.result index 0cf9089df5e5..aa9ff2cbe336 100644 --- a/mysql-test/suite/tokudb/r/fast_update_uint_bounds.result +++ b/mysql-test/suite/tokudb/r/fast_update_uint_bounds.result @@ -1,36 +1,36 @@ -set default_storage_engine='tokudb'; -drop table if exists t; -create table tt (id int primary key, x int unsigned); +create table tt (id int primary key, x int unsigned) engine = tokudb; insert into tt values (1,0),(2,pow(2,32)-1); create table ti like tt; alter table ti engine=innodb; insert into ti select * from tt; -set tokudb_disable_slow_update=1; -update noar tt set x=x+1 where id=1; -update noar ti set x=x+1 where id=1; +set tokudb_enable_fast_update=1; +set session sql_mode=(select replace(@@sql_mode,'STRICT_TRANS_TABLES','')); +set session sql_mode=(select replace(@@sql_mode,'STRICT_ALL_TABLES','')); +update tt set x=x+1 where id=1; +update ti set x=x+1 where id=1; include/diff_tables.inc [test.tt, test.ti] -update noar tt set x=x-2 where id=1; -update noar ti set x=if(x<2,0,x-2) where id=1; +update tt set x=x-2 where id=1; +update ti set x=if(x<2,0,x-2) where id=1; include/diff_tables.inc [test.tt, test.ti] -update noar tt set x=x+1 where id=1; -update noar ti set x=x+1 where id=1; +update tt set x=x+1 where id=1; +update ti set x=x+1 where id=1; include/diff_tables.inc [test.tt, test.ti] -update noar tt set x=x-1 where id=2; -update noar ti set x=x-1 where id=2; +update tt set x=x-1 where id=2; +update ti set x=x-1 where id=2; include/diff_tables.inc [test.tt, test.ti] -update noar tt set x=x+1 where id=2; -update noar ti set x=x+1 where id=2; +update tt set x=x+1 where id=2; +update ti set x=x+1 where id=2; include/diff_tables.inc [test.tt, test.ti] insert into tt values (4,pow(2,32)-10); insert into ti values (4,pow(2,32)-10); -update noar tt set x=x+20 where id=4; -update noar ti set x=x+20 where id=4; +update tt set x=x+20 where id=4; +update ti set x=x+20 where id=4; Warnings: Warning 1264 Out of range value for column 'x' at row 1 include/diff_tables.inc [test.tt, test.ti] insert into tt values (5,10); insert into ti values (5,10); -update noar tt set x=x-20 where id=5; -update noar ti set x=if(x<20,0,x-20) where id=5; +update tt set x=x-20 where id=5; +update ti set x=if(x<20,0,x-20) where id=5; include/diff_tables.inc [test.tt, test.ti] drop table tt, ti; diff --git a/mysql-test/suite/tokudb/r/fast_update_varchar.result b/mysql-test/suite/tokudb/r/fast_update_varchar.result index f12e41212646..4a963777fc08 100644 --- a/mysql-test/suite/tokudb/r/fast_update_varchar.result +++ b/mysql-test/suite/tokudb/r/fast_update_varchar.result @@ -1,13574 +1 @@ -set default_storage_engine='tokudb'; -drop table if exists t; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(32) null, -v1 varchar(32) null, -v2 varchar(32) null, -v3 varchar(32) null, -b0 text null -) engine=tokudb; -insert into tt (id) values (0); -insert into tt values (1,2,'a','b','c','d','e'); -insert into tt values (2,3,'','','','',''); -insert into tt values (3,4,'','','','',''); -insert into tt values (4,5,'','','','',''); -insert into tt values (5,6,'','','','',''); -insert into tt values (6,7,'','','','',''); -insert into tt values (7,8,'','','','',''); -insert into tt values (8,9,'','','','',''); -insert into tt values (9,10,'','','','',''); -insert into tt values (10,11,'','','','',''); -insert into tt values (11,12,'','','','',''); -insert into tt values (12,13,'','','','',''); -insert into tt values (13,14,'','','','',''); -insert into tt values (14,15,'','','','',''); -insert into tt values (15,16,'','','','',''); -insert into tt values (16,17,'','','','',''); -insert into tt values (17,18,'','','','',''); -insert into tt values (18,19,'','','','',''); -insert into tt values (19,20,'','','','',''); -insert into tt values (20,21,'','','','',''); -insert into tt values (21,22,'','','','',''); -insert into tt values (22,23,'','','','',''); -insert into tt values (23,24,'','','','',''); -insert into tt values (24,25,'','','','',''); -insert into tt values (25,26,'','','','',''); -insert into tt values (26,27,'','','','',''); -insert into tt values (27,28,'','','','',''); -insert into tt values (28,29,'','','','',''); -insert into tt values (29,30,'','','','',''); -insert into tt values (30,31,'','','','',''); -insert into tt values (31,32,'','','','',''); -insert into tt values (32,33,'','','','',''); -insert into tt values (33,34,'','','','',''); -insert into tt values (34,35,'','','','',''); -insert into tt values (35,36,'','','','',''); -insert into tt values (36,37,'','','','',''); -insert into tt values (37,38,'','','','',''); -insert into tt values (38,39,'','','','',''); -insert into tt values (39,40,'','','','',''); -insert into tt values (40,41,'','','','',''); -insert into tt values (41,42,'','','','',''); -insert into tt values (42,43,'','','','',''); -insert into tt values (43,44,'','','','',''); -insert into tt values (44,45,'','','','',''); -insert into tt values (45,46,'','','','',''); -insert into tt values (46,47,'','','','',''); -insert into tt values (47,48,'','','','',''); -insert into tt values (48,49,'','','','',''); -insert into tt values (49,50,'','','','',''); -insert into tt values (50,51,'','','','',''); -insert into tt values (51,52,'','','','',''); -insert into tt values (52,53,'','','','',''); -insert into tt values (53,54,'','','','',''); -insert into tt values (54,55,'','','','',''); -insert into tt values (55,56,'','','','',''); -insert into tt values (56,57,'','','','',''); -insert into tt values (57,58,'','','','',''); -insert into tt values (58,59,'','','','',''); -insert into tt values (59,60,'','','','',''); -insert into tt values (60,61,'','','','',''); -insert into tt values (61,62,'','','','',''); -insert into tt values (62,63,'','','','',''); -insert into tt values (63,64,'','','','',''); -insert into tt values (64,65,'','','','',''); -insert into tt values (65,66,'','','','',''); -insert into tt values (66,67,'','','','',''); -insert into tt values (67,68,'','','','',''); -insert into tt values (68,69,'','','','',''); -insert into tt values (69,70,'','','','',''); -insert into tt values (70,71,'','','','',''); -insert into tt values (71,72,'','','','',''); -insert into tt values (72,73,'','','','',''); -insert into tt values (73,74,'','','','',''); -insert into tt values (74,75,'','','','',''); -insert into tt values (75,76,'','','','',''); -insert into tt values (76,77,'','','','',''); -insert into tt values (77,78,'','','','',''); -insert into tt values (78,79,'','','','',''); -insert into tt values (79,80,'','','','',''); -insert into tt values (80,81,'','','','',''); -insert into tt values (81,82,'','','','',''); -insert into tt values (82,83,'','','','',''); -insert into tt values (83,84,'','','','',''); -insert into tt values (84,85,'','','','',''); -insert into tt values (85,86,'','','','',''); -insert into tt values (86,87,'','','','',''); -insert into tt values (87,88,'','','','',''); -insert into tt values (88,89,'','','','',''); -insert into tt values (89,90,'','','','',''); -insert into tt values (90,91,'','','','',''); -insert into tt values (91,92,'','','','',''); -insert into tt values (92,93,'','','','',''); -insert into tt values (93,94,'','','','',''); -insert into tt values (94,95,'','','','',''); -insert into tt values (95,96,'','','','',''); -insert into tt values (96,97,'','','','',''); -insert into tt values (97,98,'','','','',''); -insert into tt values (98,99,'','','','',''); -insert into tt values (99,100,'','','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='null this 0' where id=0; -update noar ti set v0='null this 0' where id=0; -update noar tt set v1='null is 1' where id=0; -update noar ti set v1='null is 1' where id=0; -update noar tt set v2='null a 2' where id=0; -update noar ti set v2='null a 2' where id=0; -update noar tt set v3='null test 3' where id=0; -update noar ti set v3='null test 3' where id=0; -update noar tt set v0='this 0' where id=1; -update noar ti set v0='this 0' where id=1; -update noar tt set v1='is 1' where id=1; -update noar ti set v1='is 1' where id=1; -update noar tt set v2='another 2' where id=1; -update noar ti set v2='another 2' where id=1; -update noar tt set v3='test 3' where id=1; -update noar ti set v3='test 3' where id=1; -update noar tt set v0='C6P5MJKRJ430AM9T012TSRGW76CFGSHQL' where id=2; -update noar ti set v0='C6P5MJKRJ430AM9T012TSRGW76CFGSHQL' where id=2; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='FQ3TW0TRJWER0OSIO33UTIFSBT7PTGO9A' where id=2; -update noar ti set v1='FQ3TW0TRJWER0OSIO33UTIFSBT7PTGO9A' where id=2; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='XAXU3S3K4PYXB4IB4HH5ANUUOGC1KD3JX' where id=2; -update noar ti set v2='XAXU3S3K4PYXB4IB4HH5ANUUOGC1KD3JX' where id=2; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='879I2MV65FUY0WFCFS09C74IN1VAISIEG' where id=2; -update noar ti set v3='879I2MV65FUY0WFCFS09C74IN1VAISIEG' where id=2; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='QAPUD5QIQINRVEPEYVDYJ6N9UI0GFZHRV' where id=3; -update noar ti set v0='QAPUD5QIQINRVEPEYVDYJ6N9UI0GFZHRV' where id=3; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='M6ME86RQIYBCUDNTD125MIV92IT6CKU15' where id=3; -update noar ti set v1='M6ME86RQIYBCUDNTD125MIV92IT6CKU15' where id=3; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='KSZGNMKS7PTH611GW21K59DD2R7KY4JAO' where id=3; -update noar ti set v2='KSZGNMKS7PTH611GW21K59DD2R7KY4JAO' where id=3; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='OSZTEY9AS1ZSXGBMVQ13ST2RB5UX4G7O2' where id=3; -update noar ti set v3='OSZTEY9AS1ZSXGBMVQ13ST2RB5UX4G7O2' where id=3; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='C67XB2ZDJCMF7MATMIZ7UKCOCXM6LX4IB' where id=4; -update noar ti set v0='C67XB2ZDJCMF7MATMIZ7UKCOCXM6LX4IB' where id=4; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='S0LRECBVNG2PF4USXXGK5HQBXNMGR0PV6' where id=4; -update noar ti set v1='S0LRECBVNG2PF4USXXGK5HQBXNMGR0PV6' where id=4; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='MYYF7M19VXCDAZYIZ0WLCDHPAA5D33BS1' where id=4; -update noar ti set v2='MYYF7M19VXCDAZYIZ0WLCDHPAA5D33BS1' where id=4; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='4KJDY3HCYE207SAY3ULNRAWO9E0ST1DBJ' where id=4; -update noar ti set v3='4KJDY3HCYE207SAY3ULNRAWO9E0ST1DBJ' where id=4; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='ZEHYFMX8YWZ0OQRFIWDF06KZSZRTWITWJ' where id=5; -update noar ti set v0='ZEHYFMX8YWZ0OQRFIWDF06KZSZRTWITWJ' where id=5; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='VB77NEBRKD15EYCTJMD5VFKUV82J77U0V' where id=5; -update noar ti set v1='VB77NEBRKD15EYCTJMD5VFKUV82J77U0V' where id=5; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='SPES6400D3NGGXUOR58GB4L6HVDUSXC8P' where id=5; -update noar ti set v2='SPES6400D3NGGXUOR58GB4L6HVDUSXC8P' where id=5; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='O8DK85ADX9I2AXO33NRKUXM4H70IQDVKR' where id=5; -update noar ti set v3='O8DK85ADX9I2AXO33NRKUXM4H70IQDVKR' where id=5; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='XG699LK06ZH0GP0MY8P2XM1W8IC31RY6M' where id=6; -update noar ti set v0='XG699LK06ZH0GP0MY8P2XM1W8IC31RY6M' where id=6; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='RR0ZPFCBNNDDO66XALOIV0M2WC2RFPWBS' where id=6; -update noar ti set v1='RR0ZPFCBNNDDO66XALOIV0M2WC2RFPWBS' where id=6; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='Z2MCQCRYBBGIAS7KKIR27SL3UBTF3KQ03' where id=6; -update noar ti set v2='Z2MCQCRYBBGIAS7KKIR27SL3UBTF3KQ03' where id=6; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='WYLCHBCNJA7T0IWFKTBZ5UBBOEUE3U9SU' where id=6; -update noar ti set v3='WYLCHBCNJA7T0IWFKTBZ5UBBOEUE3U9SU' where id=6; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='FNTPDPCBPGIND8BEXG3IFATRTOR880BQP' where id=7; -update noar ti set v0='FNTPDPCBPGIND8BEXG3IFATRTOR880BQP' where id=7; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='Y3FUDUS2RG0YODAEUX24KMI7STMMTVZWI' where id=7; -update noar ti set v1='Y3FUDUS2RG0YODAEUX24KMI7STMMTVZWI' where id=7; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='EUFYQFY3UIUWXAI2MZUSAYWINYCMPTRGZ' where id=7; -update noar ti set v2='EUFYQFY3UIUWXAI2MZUSAYWINYCMPTRGZ' where id=7; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='0VKBUX3MRYOE43HZ8G5U0MDOLG7SSXNNN' where id=7; -update noar ti set v3='0VKBUX3MRYOE43HZ8G5U0MDOLG7SSXNNN' where id=7; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='IE1Z9DPV3DFMCSETQ264T61V783D676YN' where id=8; -update noar ti set v0='IE1Z9DPV3DFMCSETQ264T61V783D676YN' where id=8; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='4ZEW2NAEC433N7TBWAI4GQWJ7LK5Q4RZ4' where id=8; -update noar ti set v1='4ZEW2NAEC433N7TBWAI4GQWJ7LK5Q4RZ4' where id=8; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='1AKQ41LJFMF1OOQMZO7QPL2ZVZYPU21DO' where id=8; -update noar ti set v2='1AKQ41LJFMF1OOQMZO7QPL2ZVZYPU21DO' where id=8; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='H8IXFC4QIDAWFHF8WUFUBPAMPKP59A4GE' where id=8; -update noar ti set v3='H8IXFC4QIDAWFHF8WUFUBPAMPKP59A4GE' where id=8; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='X52UNAQHTIRRLCHDP5UXFU6T1W92U00QM' where id=9; -update noar ti set v0='X52UNAQHTIRRLCHDP5UXFU6T1W92U00QM' where id=9; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='BMMKIH7Q87O155JXO8U6DNZX14JK7PV4Q' where id=9; -update noar ti set v1='BMMKIH7Q87O155JXO8U6DNZX14JK7PV4Q' where id=9; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='KU8TVA6SW62YC74DGYSYSDUKWQDF0AS93' where id=9; -update noar ti set v2='KU8TVA6SW62YC74DGYSYSDUKWQDF0AS93' where id=9; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='X2SX9JJP3STQ275JROOJ7PH47L1QCANI1' where id=9; -update noar ti set v3='X2SX9JJP3STQ275JROOJ7PH47L1QCANI1' where id=9; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='ETF1T11GAD3PQ1P6MNIYKOCOASRR935DN' where id=10; -update noar ti set v0='ETF1T11GAD3PQ1P6MNIYKOCOASRR935DN' where id=10; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='JAY008V1UNCFN77B872P7VBW06IM8ZULL' where id=10; -update noar ti set v1='JAY008V1UNCFN77B872P7VBW06IM8ZULL' where id=10; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='QK8M39DNPHE6PMIAUW8XP45NXJQICY8FX' where id=10; -update noar ti set v2='QK8M39DNPHE6PMIAUW8XP45NXJQICY8FX' where id=10; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='NJH9VF4CGS75EELNRM6DM8BOASPQOJ1YF' where id=10; -update noar ti set v3='NJH9VF4CGS75EELNRM6DM8BOASPQOJ1YF' where id=10; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='YPHFJEX1D9EP9OJKD711P1HDWC218HYDQ' where id=11; -update noar ti set v0='YPHFJEX1D9EP9OJKD711P1HDWC218HYDQ' where id=11; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='1C59XHWYXDJ0CH93KBID1H0FLLZW6OV4Q' where id=11; -update noar ti set v1='1C59XHWYXDJ0CH93KBID1H0FLLZW6OV4Q' where id=11; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='KCC2KKBFWCZ0TEQYF37CHNIU28PDH4G4B' where id=11; -update noar ti set v2='KCC2KKBFWCZ0TEQYF37CHNIU28PDH4G4B' where id=11; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='E9DRCXC8PRS1577KJJ0MUKCSCIQ5ULM8L' where id=11; -update noar ti set v3='E9DRCXC8PRS1577KJJ0MUKCSCIQ5ULM8L' where id=11; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='CAY0BJBX055RDS035VBFOAJYR1HV48F6L' where id=12; -update noar ti set v0='CAY0BJBX055RDS035VBFOAJYR1HV48F6L' where id=12; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='2E8R0YCLEB4KSSXAZ52SJT5Z7RHZPFUZ2' where id=12; -update noar ti set v1='2E8R0YCLEB4KSSXAZ52SJT5Z7RHZPFUZ2' where id=12; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='J7M9UEU8HY09D3P14DAZRYK48QDEEF2XU' where id=12; -update noar ti set v2='J7M9UEU8HY09D3P14DAZRYK48QDEEF2XU' where id=12; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='1FLHE73K0AJSAXRHNV18N1PIV8SSXZ4LT' where id=12; -update noar ti set v3='1FLHE73K0AJSAXRHNV18N1PIV8SSXZ4LT' where id=12; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='Z5S4BCN44TJCY6TXJN1I9NF8P2SUCD43A' where id=13; -update noar ti set v0='Z5S4BCN44TJCY6TXJN1I9NF8P2SUCD43A' where id=13; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='PGIKAGQ4A8JJDWW5W5NGXKEHG85ZXFQIZ' where id=13; -update noar ti set v1='PGIKAGQ4A8JJDWW5W5NGXKEHG85ZXFQIZ' where id=13; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='5GYNMV2KG45CU5PZ5DR7IAGOU2FXGGYRY' where id=13; -update noar ti set v2='5GYNMV2KG45CU5PZ5DR7IAGOU2FXGGYRY' where id=13; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='8YWN60PRVBV5P3XT39UK4WCZXIKNV3OMU' where id=13; -update noar ti set v3='8YWN60PRVBV5P3XT39UK4WCZXIKNV3OMU' where id=13; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='5PN29VPJJZC4X1RSDFY8CBF2LDDDU2CK3' where id=14; -update noar ti set v0='5PN29VPJJZC4X1RSDFY8CBF2LDDDU2CK3' where id=14; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='5SXHKMF44USM4OM0KUQSOAUDH74460FAO' where id=14; -update noar ti set v1='5SXHKMF44USM4OM0KUQSOAUDH74460FAO' where id=14; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='T37K7U6RHE7I8E16NBU06WAXWPQIIKRIT' where id=14; -update noar ti set v2='T37K7U6RHE7I8E16NBU06WAXWPQIIKRIT' where id=14; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='284CTENU9U8YL9B1OTG0Q8SXZZZ7M5I6U' where id=14; -update noar ti set v3='284CTENU9U8YL9B1OTG0Q8SXZZZ7M5I6U' where id=14; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='ETZNDEYEUZXLKM8HTLEBSEYP692A2WVEC' where id=15; -update noar ti set v0='ETZNDEYEUZXLKM8HTLEBSEYP692A2WVEC' where id=15; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='TOP0E92F9FWDEWEC4YPE80MH7DRSBUKIB' where id=15; -update noar ti set v1='TOP0E92F9FWDEWEC4YPE80MH7DRSBUKIB' where id=15; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='OYEI596E9HVPLAGZGBQYSFAWKZG41BCVM' where id=15; -update noar ti set v2='OYEI596E9HVPLAGZGBQYSFAWKZG41BCVM' where id=15; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='51HLJN8D2X7DIFFNY4IQBP48WODL1YG3E' where id=15; -update noar ti set v3='51HLJN8D2X7DIFFNY4IQBP48WODL1YG3E' where id=15; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='XONA19S58DXOWIKZUOIJNT8CWF3N4RVVM' where id=16; -update noar ti set v0='XONA19S58DXOWIKZUOIJNT8CWF3N4RVVM' where id=16; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='943ENEWA3RYCJRDUVOM2F8UKTR391IDL3' where id=16; -update noar ti set v1='943ENEWA3RYCJRDUVOM2F8UKTR391IDL3' where id=16; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='CB4MQIO2UXYFSCOSQACFE96L9W4LTH9UC' where id=16; -update noar ti set v2='CB4MQIO2UXYFSCOSQACFE96L9W4LTH9UC' where id=16; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='C3M7ZLL5KVPPD8YKEP7UTFN5O9BJAWRQY' where id=16; -update noar ti set v3='C3M7ZLL5KVPPD8YKEP7UTFN5O9BJAWRQY' where id=16; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='Q5SH1O4QPLTMXTL5Z6JHLNT0SVFBYOOXU' where id=17; -update noar ti set v0='Q5SH1O4QPLTMXTL5Z6JHLNT0SVFBYOOXU' where id=17; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='52FCXSRGM2N12OI10IYNRUGLVV1AUMTE7' where id=17; -update noar ti set v1='52FCXSRGM2N12OI10IYNRUGLVV1AUMTE7' where id=17; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='GYHFZZROG27CYF5ERW711U8EQ9FDS6H2T' where id=17; -update noar ti set v2='GYHFZZROG27CYF5ERW711U8EQ9FDS6H2T' where id=17; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='B2M72KUXJLTTCJ1RC47E2QNOAMH5BMX7K' where id=17; -update noar ti set v3='B2M72KUXJLTTCJ1RC47E2QNOAMH5BMX7K' where id=17; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='NAJYNURN3M8WTQI61PDF4JWAPVT6PLRGH' where id=18; -update noar ti set v0='NAJYNURN3M8WTQI61PDF4JWAPVT6PLRGH' where id=18; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='4IJQ7MVQPR795Z9IQXVHR0HMTTRN7KTES' where id=18; -update noar ti set v1='4IJQ7MVQPR795Z9IQXVHR0HMTTRN7KTES' where id=18; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='E2ZS9OQGKIRZ4V4TH1Y89HTIN4OMC2XRW' where id=18; -update noar ti set v2='E2ZS9OQGKIRZ4V4TH1Y89HTIN4OMC2XRW' where id=18; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='FL672KMTP7X2LQ2Z3X0V3JQY61XZT1LV4' where id=18; -update noar ti set v3='FL672KMTP7X2LQ2Z3X0V3JQY61XZT1LV4' where id=18; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='91MVJ862UD5B8CALA6XIPUERX6M0EZI9U' where id=19; -update noar ti set v0='91MVJ862UD5B8CALA6XIPUERX6M0EZI9U' where id=19; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='3PMLFZZSY1ILDOPUEA9V9JL6CREQXZFLI' where id=19; -update noar ti set v1='3PMLFZZSY1ILDOPUEA9V9JL6CREQXZFLI' where id=19; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='GQ9TSV4W2FAPQVICDG8H5L1LWBKX7H2G8' where id=19; -update noar ti set v2='GQ9TSV4W2FAPQVICDG8H5L1LWBKX7H2G8' where id=19; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='KQQVF17YK17KYX2N6HHWBJ5CYX0BLC3TP' where id=19; -update noar ti set v3='KQQVF17YK17KYX2N6HHWBJ5CYX0BLC3TP' where id=19; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='BQ2C26F41R16F9IT6CHBS5SPWHX44U665' where id=20; -update noar ti set v0='BQ2C26F41R16F9IT6CHBS5SPWHX44U665' where id=20; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='BQLHGIX1QDX1FTDBELFBLKHMG4EGK3JUX' where id=20; -update noar ti set v1='BQLHGIX1QDX1FTDBELFBLKHMG4EGK3JUX' where id=20; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='8D8MWG0B0O5P3L4QHU7MAZ2FG7P1WXTDH' where id=20; -update noar ti set v2='8D8MWG0B0O5P3L4QHU7MAZ2FG7P1WXTDH' where id=20; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='A8BGZNDJPECVJXRC33OIZOMDMPPUXFMUR' where id=20; -update noar ti set v3='A8BGZNDJPECVJXRC33OIZOMDMPPUXFMUR' where id=20; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='P2ZCHS22PAQE5HP6TJ6GA9G6CYJDS8Y62' where id=21; -update noar ti set v0='P2ZCHS22PAQE5HP6TJ6GA9G6CYJDS8Y62' where id=21; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='HJ76W65BKZASJ0D5MVZOTT65E9JWCSQCG' where id=21; -update noar ti set v1='HJ76W65BKZASJ0D5MVZOTT65E9JWCSQCG' where id=21; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='HXN3H4N2716EPCF7SK5TJTCBMFHC1APFB' where id=21; -update noar ti set v2='HXN3H4N2716EPCF7SK5TJTCBMFHC1APFB' where id=21; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='MH0EOVWCAIQBG9Q6ASDCR5ADU3VVACATF' where id=21; -update noar ti set v3='MH0EOVWCAIQBG9Q6ASDCR5ADU3VVACATF' where id=21; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='107DEIHQ3GDC2NDS2Q07EDVFGWSO0J7SH' where id=22; -update noar ti set v0='107DEIHQ3GDC2NDS2Q07EDVFGWSO0J7SH' where id=22; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='FP7GFDM5MIX0U2QPXRRLNS5LF4I47TCNI' where id=22; -update noar ti set v1='FP7GFDM5MIX0U2QPXRRLNS5LF4I47TCNI' where id=22; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='IW8AA65FH5KWY484BCUEC2ZG2HWCLJ524' where id=22; -update noar ti set v2='IW8AA65FH5KWY484BCUEC2ZG2HWCLJ524' where id=22; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='J753JLU9JBWL0PTD9UM79MTK8MN7O57P5' where id=22; -update noar ti set v3='J753JLU9JBWL0PTD9UM79MTK8MN7O57P5' where id=22; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='9QF74QJJ49U6GQUVDCUFZ9C37H29KK1UY' where id=23; -update noar ti set v0='9QF74QJJ49U6GQUVDCUFZ9C37H29KK1UY' where id=23; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='IHA7PGIUNHGGWSXMW36C5WKYBF4K751AL' where id=23; -update noar ti set v1='IHA7PGIUNHGGWSXMW36C5WKYBF4K751AL' where id=23; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='YH1VL0ACEOES4HMPVH0WG2S9M0HX3FTWV' where id=23; -update noar ti set v2='YH1VL0ACEOES4HMPVH0WG2S9M0HX3FTWV' where id=23; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='XUCZC7D538MJST1GT6PVVHGZFYO64SW9O' where id=23; -update noar ti set v3='XUCZC7D538MJST1GT6PVVHGZFYO64SW9O' where id=23; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='8PH7LGKOHB54MDLK7RAPQTA9WFJ16TSJO' where id=24; -update noar ti set v0='8PH7LGKOHB54MDLK7RAPQTA9WFJ16TSJO' where id=24; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='BI1N1R8MP2R1Q9J8DICC5MXUCJREWV4SN' where id=24; -update noar ti set v1='BI1N1R8MP2R1Q9J8DICC5MXUCJREWV4SN' where id=24; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='JNDECEQE4UUXAOHS5QFG0922VTF09F674' where id=24; -update noar ti set v2='JNDECEQE4UUXAOHS5QFG0922VTF09F674' where id=24; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='N8H46WLI7LDXI6RKCXN559WMGERULO3KE' where id=24; -update noar ti set v3='N8H46WLI7LDXI6RKCXN559WMGERULO3KE' where id=24; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='0WI2SGQAPLGKEMTT89MJK3NQ1TRF57OR4' where id=25; -update noar ti set v0='0WI2SGQAPLGKEMTT89MJK3NQ1TRF57OR4' where id=25; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='VDNWTAZJI1RFJT3124UQYF8DYW5OGG0K3' where id=25; -update noar ti set v1='VDNWTAZJI1RFJT3124UQYF8DYW5OGG0K3' where id=25; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='VVWCC2BHB28RTN4QFLMPKGB6VIPQS9W3E' where id=25; -update noar ti set v2='VVWCC2BHB28RTN4QFLMPKGB6VIPQS9W3E' where id=25; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='6VN2LQ5BU505V7XXF1MSOJUDMPL8JOKYS' where id=25; -update noar ti set v3='6VN2LQ5BU505V7XXF1MSOJUDMPL8JOKYS' where id=25; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='WJQFASTDWGPKZU42IU4V5YFWY1VSDE3WJ' where id=26; -update noar ti set v0='WJQFASTDWGPKZU42IU4V5YFWY1VSDE3WJ' where id=26; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='OSDG1E7D6JY0THUCU9KCZQOCV0CWUDW68' where id=26; -update noar ti set v1='OSDG1E7D6JY0THUCU9KCZQOCV0CWUDW68' where id=26; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='10MB7PZUJQ05HXB7JM5PIH17N3UR9VGKQ' where id=26; -update noar ti set v2='10MB7PZUJQ05HXB7JM5PIH17N3UR9VGKQ' where id=26; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='FFZ23U1FOVCKI2WU8MCYHK5I6YDPRGQ7M' where id=26; -update noar ti set v3='FFZ23U1FOVCKI2WU8MCYHK5I6YDPRGQ7M' where id=26; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='XZF7INM5CEMFE64IPWUMNF4CF616KP96Y' where id=27; -update noar ti set v0='XZF7INM5CEMFE64IPWUMNF4CF616KP96Y' where id=27; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='5K5SQQUIXQ0J6G4NG2H073TLMUR4JBRHR' where id=27; -update noar ti set v1='5K5SQQUIXQ0J6G4NG2H073TLMUR4JBRHR' where id=27; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='4XIOGA6AU0ZE4RNRLGXMM174169A7FJ8O' where id=27; -update noar ti set v2='4XIOGA6AU0ZE4RNRLGXMM174169A7FJ8O' where id=27; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='OQJ9J76C3G1V8YC3I3LVRP15MCY8CFNC2' where id=27; -update noar ti set v3='OQJ9J76C3G1V8YC3I3LVRP15MCY8CFNC2' where id=27; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='GEJ9PDRMCVLOG03AR7GE2KUU06MDZTYER' where id=28; -update noar ti set v0='GEJ9PDRMCVLOG03AR7GE2KUU06MDZTYER' where id=28; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='1M7LYV783XMZEH73YCQ0GDPAZR3H33QNM' where id=28; -update noar ti set v1='1M7LYV783XMZEH73YCQ0GDPAZR3H33QNM' where id=28; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='5YTZ0UGTGHUR2E4L8NSR9YVY11S370HBA' where id=28; -update noar ti set v2='5YTZ0UGTGHUR2E4L8NSR9YVY11S370HBA' where id=28; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='0EB9NBJKQNDEJ2TSBPDBF6XE0WAETK7Y6' where id=28; -update noar ti set v3='0EB9NBJKQNDEJ2TSBPDBF6XE0WAETK7Y6' where id=28; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='SPRV1BGKMGD2G168A6NTPXRVUZAEB9TNL' where id=29; -update noar ti set v0='SPRV1BGKMGD2G168A6NTPXRVUZAEB9TNL' where id=29; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='07PHHJMEP9LIY6G7ISABOP3Y9DC2CEAGR' where id=29; -update noar ti set v1='07PHHJMEP9LIY6G7ISABOP3Y9DC2CEAGR' where id=29; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='GHSF6KNPA6KU20RRTU1KX5VF2V7ES6LBF' where id=29; -update noar ti set v2='GHSF6KNPA6KU20RRTU1KX5VF2V7ES6LBF' where id=29; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='DRMTKXYG6OHUUP0HMQ63YIQ1QVM0RHEU8' where id=29; -update noar ti set v3='DRMTKXYG6OHUUP0HMQ63YIQ1QVM0RHEU8' where id=29; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='8B98SDALI4I18REJFK4IWTM2PXCCUC55Z' where id=30; -update noar ti set v0='8B98SDALI4I18REJFK4IWTM2PXCCUC55Z' where id=30; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='82ZUIOLY0RXD9YOSCJ6TM50OBAXDIDR0B' where id=30; -update noar ti set v1='82ZUIOLY0RXD9YOSCJ6TM50OBAXDIDR0B' where id=30; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='EUS9RJRQ3H4F0C2G53U83SFS7I8UGMDFZ' where id=30; -update noar ti set v2='EUS9RJRQ3H4F0C2G53U83SFS7I8UGMDFZ' where id=30; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='A3G2TYACCQ7FLM83FHBQOWCVGOQIBEA34' where id=30; -update noar ti set v3='A3G2TYACCQ7FLM83FHBQOWCVGOQIBEA34' where id=30; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='URCNNZR6413MRLALGAAVA8TBYBSIJ8DFE' where id=31; -update noar ti set v0='URCNNZR6413MRLALGAAVA8TBYBSIJ8DFE' where id=31; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='QW6IRTPK76HZFID8EB4CFZSVW04E4MNJD' where id=31; -update noar ti set v1='QW6IRTPK76HZFID8EB4CFZSVW04E4MNJD' where id=31; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='Q09KRN14VAE8LU961P5DUEXFFF0UN5H0B' where id=31; -update noar ti set v2='Q09KRN14VAE8LU961P5DUEXFFF0UN5H0B' where id=31; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='Z3WJ30H2J28NATJVWOVJZSZQ15CRMR8IQ' where id=31; -update noar ti set v3='Z3WJ30H2J28NATJVWOVJZSZQ15CRMR8IQ' where id=31; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='18CAZA6MKOP3NY31ZJGX7JY1RD9H7MSB6' where id=32; -update noar ti set v0='18CAZA6MKOP3NY31ZJGX7JY1RD9H7MSB6' where id=32; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='FLY9WZ1FJ2074AA92R56673E5VNVKBZ0U' where id=32; -update noar ti set v1='FLY9WZ1FJ2074AA92R56673E5VNVKBZ0U' where id=32; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='YKJS5WNZ21VBZMTC1IK75DKJDH88NOIJC' where id=32; -update noar ti set v2='YKJS5WNZ21VBZMTC1IK75DKJDH88NOIJC' where id=32; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='Z0TBKW3I880W08Z5R82GGQV7LFF3N31G7' where id=32; -update noar ti set v3='Z0TBKW3I880W08Z5R82GGQV7LFF3N31G7' where id=32; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='K7B49HGXRR2UYZ7U1AHA7Q6RV76VE5EI5' where id=33; -update noar ti set v0='K7B49HGXRR2UYZ7U1AHA7Q6RV76VE5EI5' where id=33; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='G0COXPS7X6FJLIJQERQ3DFD13YWEBQWDG' where id=33; -update noar ti set v1='G0COXPS7X6FJLIJQERQ3DFD13YWEBQWDG' where id=33; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='5MD1ZS25BSXQQTILR08ZAM2AX47SJ67LJ' where id=33; -update noar ti set v2='5MD1ZS25BSXQQTILR08ZAM2AX47SJ67LJ' where id=33; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='P236IWTBHCTU9Z1SVB4SPZ7EU1Q6PQ7UG' where id=33; -update noar ti set v3='P236IWTBHCTU9Z1SVB4SPZ7EU1Q6PQ7UG' where id=33; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='KRVYBE4GVL382458JLRALHF1Z5LOXSG36' where id=34; -update noar ti set v0='KRVYBE4GVL382458JLRALHF1Z5LOXSG36' where id=34; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='5GKY08ZLHY2CK1TW4W9MH8JO5X3MMZ6UA' where id=34; -update noar ti set v1='5GKY08ZLHY2CK1TW4W9MH8JO5X3MMZ6UA' where id=34; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='ZFTESHXZWSGUE1PO05DJJ4NTHC4BXNTJM' where id=34; -update noar ti set v2='ZFTESHXZWSGUE1PO05DJJ4NTHC4BXNTJM' where id=34; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='5139ZWEPLT9R59F4Q9OWO9N2N7BOUNISC' where id=34; -update noar ti set v3='5139ZWEPLT9R59F4Q9OWO9N2N7BOUNISC' where id=34; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='2Y03O5MO2DWECZAH5ZPSU6JV7ZN5CFT8G' where id=35; -update noar ti set v0='2Y03O5MO2DWECZAH5ZPSU6JV7ZN5CFT8G' where id=35; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='FWUZZYUM3HPEIAMSOYPR9LVPTHPI9UAKB' where id=35; -update noar ti set v1='FWUZZYUM3HPEIAMSOYPR9LVPTHPI9UAKB' where id=35; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='8XKKEWLGB9YBVZS6MMFXOC0R0HYT72IRI' where id=35; -update noar ti set v2='8XKKEWLGB9YBVZS6MMFXOC0R0HYT72IRI' where id=35; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='Z53R1BXHRG9O8JY4CTYVX7V04G2YL12QR' where id=35; -update noar ti set v3='Z53R1BXHRG9O8JY4CTYVX7V04G2YL12QR' where id=35; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='OUV8RMH3A8GSSV58YWWQRK0Z9PRY83AAB' where id=36; -update noar ti set v0='OUV8RMH3A8GSSV58YWWQRK0Z9PRY83AAB' where id=36; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='NZUL5BS463AGH7WMFVTGD93X5QSXLDZUR' where id=36; -update noar ti set v1='NZUL5BS463AGH7WMFVTGD93X5QSXLDZUR' where id=36; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='RLMYSEWOA5T24CERMFHDPDQHB5BVG5X1O' where id=36; -update noar ti set v2='RLMYSEWOA5T24CERMFHDPDQHB5BVG5X1O' where id=36; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='1D5MBR0R2QSYZBXOVBK0V6CJ9WMWL32TT' where id=36; -update noar ti set v3='1D5MBR0R2QSYZBXOVBK0V6CJ9WMWL32TT' where id=36; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='KOSY5HJLZEZ0N03M22KDQAFAODJ09JWUG' where id=37; -update noar ti set v0='KOSY5HJLZEZ0N03M22KDQAFAODJ09JWUG' where id=37; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='7UIFAU5VQEKE49JYQ063Y77UGCVI77O8R' where id=37; -update noar ti set v1='7UIFAU5VQEKE49JYQ063Y77UGCVI77O8R' where id=37; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='GJDCD5PGW82BYOOETKYMBWGH9208OCWYY' where id=37; -update noar ti set v2='GJDCD5PGW82BYOOETKYMBWGH9208OCWYY' where id=37; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='MU0GRMGW78R93POY2YCXXRUN5BT15VSVC' where id=37; -update noar ti set v3='MU0GRMGW78R93POY2YCXXRUN5BT15VSVC' where id=37; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='SWVVSTD1XV3KFGV6EOJLF6GVGV19R6JVG' where id=38; -update noar ti set v0='SWVVSTD1XV3KFGV6EOJLF6GVGV19R6JVG' where id=38; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='Z5377X1FRJG6ZSHVFPJFABBY2NEKAA7LZ' where id=38; -update noar ti set v1='Z5377X1FRJG6ZSHVFPJFABBY2NEKAA7LZ' where id=38; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='QTG2C52LEYE4U9BUK52MMMMRJTWT3LWSM' where id=38; -update noar ti set v2='QTG2C52LEYE4U9BUK52MMMMRJTWT3LWSM' where id=38; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='9Q8C3QT414MF8ELA72ECGELEXLB17265A' where id=38; -update noar ti set v3='9Q8C3QT414MF8ELA72ECGELEXLB17265A' where id=38; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='229ERUNFC7UUA02YUVCXYFXN2BNFMVPXB' where id=39; -update noar ti set v0='229ERUNFC7UUA02YUVCXYFXN2BNFMVPXB' where id=39; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='Q4EPIZ79FXI1BWVRW29OITU2EB2UM6NH1' where id=39; -update noar ti set v1='Q4EPIZ79FXI1BWVRW29OITU2EB2UM6NH1' where id=39; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='N5E531AI6LAYDX9OYUHXVFIKQBUYCG3BN' where id=39; -update noar ti set v2='N5E531AI6LAYDX9OYUHXVFIKQBUYCG3BN' where id=39; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='V7LEWEU5DH4NHBJ9F2KS7OATJOM48A1QV' where id=39; -update noar ti set v3='V7LEWEU5DH4NHBJ9F2KS7OATJOM48A1QV' where id=39; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='2BO42FSK5BN8K0C84LYRJSOCSOQYGUKE6' where id=40; -update noar ti set v0='2BO42FSK5BN8K0C84LYRJSOCSOQYGUKE6' where id=40; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='DBQ3SK9METFRULPA9JR3J2HENT7VBLCV8' where id=40; -update noar ti set v1='DBQ3SK9METFRULPA9JR3J2HENT7VBLCV8' where id=40; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='OHKT0HS2AJKRETD80BJBF891IKNHGTULE' where id=40; -update noar ti set v2='OHKT0HS2AJKRETD80BJBF891IKNHGTULE' where id=40; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='2CO8NXQIFWKAL4Y1G2F4H0SBG43H5D987' where id=40; -update noar ti set v3='2CO8NXQIFWKAL4Y1G2F4H0SBG43H5D987' where id=40; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='T06FV780MYOO8M5MBIN0AQ4E04LTVEE34' where id=41; -update noar ti set v0='T06FV780MYOO8M5MBIN0AQ4E04LTVEE34' where id=41; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='ST4VM9I20H6M5G8MN1VBM3SD3GE8LTL5Q' where id=41; -update noar ti set v1='ST4VM9I20H6M5G8MN1VBM3SD3GE8LTL5Q' where id=41; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='Y1QH92Q281DGR9OCMQEE0TG8IQMR7E55Q' where id=41; -update noar ti set v2='Y1QH92Q281DGR9OCMQEE0TG8IQMR7E55Q' where id=41; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='7MLHS7VHC7XZ2UE5C5J1ITNQ3HTKMT0M4' where id=41; -update noar ti set v3='7MLHS7VHC7XZ2UE5C5J1ITNQ3HTKMT0M4' where id=41; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='EUES4TNVQUHST6XYUKUNZRYDE00H9E3ET' where id=42; -update noar ti set v0='EUES4TNVQUHST6XYUKUNZRYDE00H9E3ET' where id=42; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='YRHWRPMBBHD144YCNXFT1PQIV5IJGCC86' where id=42; -update noar ti set v1='YRHWRPMBBHD144YCNXFT1PQIV5IJGCC86' where id=42; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='9M765V1YX537R8I03AO706NCMA99KCLE7' where id=42; -update noar ti set v2='9M765V1YX537R8I03AO706NCMA99KCLE7' where id=42; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='6W0ESIUQKA1KJWXE1SAEUSOO1UDPA32IP' where id=42; -update noar ti set v3='6W0ESIUQKA1KJWXE1SAEUSOO1UDPA32IP' where id=42; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='GHO01XGSMT12P8K8YUWW4822F2TB2A1WY' where id=43; -update noar ti set v0='GHO01XGSMT12P8K8YUWW4822F2TB2A1WY' where id=43; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='DMGU1UMBGB9NN4EOIC0J55TW9X5MXD54M' where id=43; -update noar ti set v1='DMGU1UMBGB9NN4EOIC0J55TW9X5MXD54M' where id=43; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='PPUGMRL5JQPIZ4OU5T3BNWO2UU01M5ZTD' where id=43; -update noar ti set v2='PPUGMRL5JQPIZ4OU5T3BNWO2UU01M5ZTD' where id=43; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='DR3UTBMFJKPHCGUDHRQAAWVC1YL24BMMN' where id=43; -update noar ti set v3='DR3UTBMFJKPHCGUDHRQAAWVC1YL24BMMN' where id=43; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='MQBQQJTIUOMW2EF464QUDTPPNX533YJZR' where id=44; -update noar ti set v0='MQBQQJTIUOMW2EF464QUDTPPNX533YJZR' where id=44; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='J53YVRKD7KWR60599IXY4M9K67GV9NLPH' where id=44; -update noar ti set v1='J53YVRKD7KWR60599IXY4M9K67GV9NLPH' where id=44; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='30SOHZPPZIKPY52Y3IK0AGZWLWWPGA7DR' where id=44; -update noar ti set v2='30SOHZPPZIKPY52Y3IK0AGZWLWWPGA7DR' where id=44; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='WJUQXAOQQ87OKE6KQ5P33Z33K00POIMV1' where id=44; -update noar ti set v3='WJUQXAOQQ87OKE6KQ5P33Z33K00POIMV1' where id=44; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='H9L307FD360CBDLITL0176G6ETWRG9RN3' where id=45; -update noar ti set v0='H9L307FD360CBDLITL0176G6ETWRG9RN3' where id=45; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='PAH82M79MPSSQCUUNOXFRXATRZ7SC0BAB' where id=45; -update noar ti set v1='PAH82M79MPSSQCUUNOXFRXATRZ7SC0BAB' where id=45; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='97I78JVD1MVPLZPZALUZNPANWFMWBHTF1' where id=45; -update noar ti set v2='97I78JVD1MVPLZPZALUZNPANWFMWBHTF1' where id=45; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='TXUJEWCI2MD8JMXWXRA7YFYVOXP2QTKOA' where id=45; -update noar ti set v3='TXUJEWCI2MD8JMXWXRA7YFYVOXP2QTKOA' where id=45; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='BG1RKJ1VBUB22VGT7L45ZYJDQ6TGZ7500' where id=46; -update noar ti set v0='BG1RKJ1VBUB22VGT7L45ZYJDQ6TGZ7500' where id=46; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='TVR985R8I8H14C1XKJL3DFJ7WFCKJG7IY' where id=46; -update noar ti set v1='TVR985R8I8H14C1XKJL3DFJ7WFCKJG7IY' where id=46; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='PQFIXIEDB7XVWRDYHCQCYEALXAGTMJT8C' where id=46; -update noar ti set v2='PQFIXIEDB7XVWRDYHCQCYEALXAGTMJT8C' where id=46; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='KWLNFQECG32YF9JLQ5WCVXRPNMH7QT5CP' where id=46; -update noar ti set v3='KWLNFQECG32YF9JLQ5WCVXRPNMH7QT5CP' where id=46; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='P05HAGUVHF2BY8A117PQB4LXKP2WWMY42' where id=47; -update noar ti set v0='P05HAGUVHF2BY8A117PQB4LXKP2WWMY42' where id=47; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='VS6KV97CEAXBBQOGETK6X0YJG6OT77V31' where id=47; -update noar ti set v1='VS6KV97CEAXBBQOGETK6X0YJG6OT77V31' where id=47; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='7Q7W0GV5G356XPDMHBH2RJZ4G9U43AUEX' where id=47; -update noar ti set v2='7Q7W0GV5G356XPDMHBH2RJZ4G9U43AUEX' where id=47; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='641AVJHYGZBGY3SS4V7CZX1D9D1PL82AA' where id=47; -update noar ti set v3='641AVJHYGZBGY3SS4V7CZX1D9D1PL82AA' where id=47; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='H76MQY3XZEMY41JDREB1U3PQGROCZJ32O' where id=48; -update noar ti set v0='H76MQY3XZEMY41JDREB1U3PQGROCZJ32O' where id=48; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='UDELV3TMJKN971SC67V04IJV0ZZ9NT957' where id=48; -update noar ti set v1='UDELV3TMJKN971SC67V04IJV0ZZ9NT957' where id=48; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='5DEU5BI2HWI7BD1E28KGU5FRFLRXTJ393' where id=48; -update noar ti set v2='5DEU5BI2HWI7BD1E28KGU5FRFLRXTJ393' where id=48; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='651U16ZE6EX7BNYFOCQQU26Y0X5S76OZI' where id=48; -update noar ti set v3='651U16ZE6EX7BNYFOCQQU26Y0X5S76OZI' where id=48; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='S3KKMZJ9TAHIG1SJMU2Q1PONODEDSM7T0' where id=49; -update noar ti set v0='S3KKMZJ9TAHIG1SJMU2Q1PONODEDSM7T0' where id=49; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='0G192ZBDTGJUMGQ0CMME00F8X1F7UKK3Q' where id=49; -update noar ti set v1='0G192ZBDTGJUMGQ0CMME00F8X1F7UKK3Q' where id=49; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='24RTDTONPHWS1H3FCA2LO8I2YP588RGJB' where id=49; -update noar ti set v2='24RTDTONPHWS1H3FCA2LO8I2YP588RGJB' where id=49; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='M8QZ39EZNBNMHS4NXEN9QOMMMAOUHW002' where id=49; -update noar ti set v3='M8QZ39EZNBNMHS4NXEN9QOMMMAOUHW002' where id=49; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='A6IZG7ZEZQTCZICP7OB1K17VF7ZGPF0RP' where id=50; -update noar ti set v0='A6IZG7ZEZQTCZICP7OB1K17VF7ZGPF0RP' where id=50; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='NEMY8UFM78ML661P6147SXCDP6J02RQEA' where id=50; -update noar ti set v1='NEMY8UFM78ML661P6147SXCDP6J02RQEA' where id=50; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='RGW6669TULDTCI6AEGFLI30M0BNJU4X91' where id=50; -update noar ti set v2='RGW6669TULDTCI6AEGFLI30M0BNJU4X91' where id=50; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='T5BB49AUMIPRA78A5NN71VHQHWCA12T4W' where id=50; -update noar ti set v3='T5BB49AUMIPRA78A5NN71VHQHWCA12T4W' where id=50; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='LXSNRNC3J6O8KPFCMD8SYV621VISQPEWE' where id=51; -update noar ti set v0='LXSNRNC3J6O8KPFCMD8SYV621VISQPEWE' where id=51; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='UWDWY1GR92F74CT5TSD6T6XGBPZ5H8SF7' where id=51; -update noar ti set v1='UWDWY1GR92F74CT5TSD6T6XGBPZ5H8SF7' where id=51; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='QJ9IP4S6WWGF0KX80D8XTAOF5HL4UQVPT' where id=51; -update noar ti set v2='QJ9IP4S6WWGF0KX80D8XTAOF5HL4UQVPT' where id=51; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='ZM7P24RT3BCVDM2ICWF07OC5OSJSFIDVL' where id=51; -update noar ti set v3='ZM7P24RT3BCVDM2ICWF07OC5OSJSFIDVL' where id=51; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='BJK46ALUVTQE8RUU97LP5E043KVMJD70D' where id=52; -update noar ti set v0='BJK46ALUVTQE8RUU97LP5E043KVMJD70D' where id=52; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='BFDIN2FDON0CU2CLKEB4MC9Z5X3JN0SK4' where id=52; -update noar ti set v1='BFDIN2FDON0CU2CLKEB4MC9Z5X3JN0SK4' where id=52; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='VNAUIIRJCOVS0KJU253HJ368GVKR11KDI' where id=52; -update noar ti set v2='VNAUIIRJCOVS0KJU253HJ368GVKR11KDI' where id=52; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='VC2YTAA7CH1X8C69MG1PC7V9ZEOTNQ4UF' where id=52; -update noar ti set v3='VC2YTAA7CH1X8C69MG1PC7V9ZEOTNQ4UF' where id=52; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='TQ8Y5T19I5IBFL0XG66X20Y7W7OQTQX5O' where id=53; -update noar ti set v0='TQ8Y5T19I5IBFL0XG66X20Y7W7OQTQX5O' where id=53; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='4SOFHDU9AZBUCTWWKUJJG30IDACHX458Y' where id=53; -update noar ti set v1='4SOFHDU9AZBUCTWWKUJJG30IDACHX458Y' where id=53; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='LC298ZARGDWN2SQC8KQ99TC0XDK0J3HNY' where id=53; -update noar ti set v2='LC298ZARGDWN2SQC8KQ99TC0XDK0J3HNY' where id=53; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='JKTZGV4VOVAOCI3M1E4PX7FZP3YYAIV9X' where id=53; -update noar ti set v3='JKTZGV4VOVAOCI3M1E4PX7FZP3YYAIV9X' where id=53; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='BU4HHSK0CDGWDZKOYOIXQHTF74DP95NFK' where id=54; -update noar ti set v0='BU4HHSK0CDGWDZKOYOIXQHTF74DP95NFK' where id=54; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='6JZYFTSSCTGO9WF9BFNLUA0NBMMF2N8XE' where id=54; -update noar ti set v1='6JZYFTSSCTGO9WF9BFNLUA0NBMMF2N8XE' where id=54; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='OU0NT3U4AIEQ0WXBG8WH5NCK96W8ZEPPE' where id=54; -update noar ti set v2='OU0NT3U4AIEQ0WXBG8WH5NCK96W8ZEPPE' where id=54; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='N7PV3KCTRBT0I1Z7R44WEBSB6OLCYFO8J' where id=54; -update noar ti set v3='N7PV3KCTRBT0I1Z7R44WEBSB6OLCYFO8J' where id=54; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='6MWP2FE7BPLOBTS1DMQ71HD2UNOMR0CKX' where id=55; -update noar ti set v0='6MWP2FE7BPLOBTS1DMQ71HD2UNOMR0CKX' where id=55; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='3IBBZHYPZUG5N4C0MZQ858DGRB3QVU8UL' where id=55; -update noar ti set v1='3IBBZHYPZUG5N4C0MZQ858DGRB3QVU8UL' where id=55; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='050LJRF8Z661PFZFFJI4PUY5HC6FZ4XAZ' where id=55; -update noar ti set v2='050LJRF8Z661PFZFFJI4PUY5HC6FZ4XAZ' where id=55; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='3N4YM08A7GF6NY4WKIZJYB812CB69M1TM' where id=55; -update noar ti set v3='3N4YM08A7GF6NY4WKIZJYB812CB69M1TM' where id=55; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='11366LNF4LLZJS8Y0PTI84JBHS00YSTU8' where id=56; -update noar ti set v0='11366LNF4LLZJS8Y0PTI84JBHS00YSTU8' where id=56; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='OR5YXKS53YP6XHGIPZ296G6AQIOET6R03' where id=56; -update noar ti set v1='OR5YXKS53YP6XHGIPZ296G6AQIOET6R03' where id=56; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='YWJ31G85YR5HHNVEODM3JKOH15OP90Q2F' where id=56; -update noar ti set v2='YWJ31G85YR5HHNVEODM3JKOH15OP90Q2F' where id=56; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='ZX8KYZ3EQSDX25XGXMZBANP2AT8UEUGQD' where id=56; -update noar ti set v3='ZX8KYZ3EQSDX25XGXMZBANP2AT8UEUGQD' where id=56; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='WIL66TSKLO1QDQ9SHC8TPYTENWK094IQL' where id=57; -update noar ti set v0='WIL66TSKLO1QDQ9SHC8TPYTENWK094IQL' where id=57; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='IZST9BLY30O1OI6GOLNSHYKW2PJ4L7PQ5' where id=57; -update noar ti set v1='IZST9BLY30O1OI6GOLNSHYKW2PJ4L7PQ5' where id=57; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='LR1LDYMEN07AFFSLXMSLMI2CRQHWW0NLJ' where id=57; -update noar ti set v2='LR1LDYMEN07AFFSLXMSLMI2CRQHWW0NLJ' where id=57; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='49FQ5TLVYGKN8ERX3UV4KBK9RDDS2FJ94' where id=57; -update noar ti set v3='49FQ5TLVYGKN8ERX3UV4KBK9RDDS2FJ94' where id=57; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='TCRDTTNMB5C482EBDU1DLJ03Q3SUJS1DN' where id=58; -update noar ti set v0='TCRDTTNMB5C482EBDU1DLJ03Q3SUJS1DN' where id=58; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='YIKSGR2NEZ614TL0PTJ51X8B1L64ZBDI7' where id=58; -update noar ti set v1='YIKSGR2NEZ614TL0PTJ51X8B1L64ZBDI7' where id=58; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='SB70C6U9232ELJNALDDGK2FMGH3TNG7DG' where id=58; -update noar ti set v2='SB70C6U9232ELJNALDDGK2FMGH3TNG7DG' where id=58; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='RTYBZM0KZMBKBQA3NP5DG61BHPHILZCPD' where id=58; -update noar ti set v3='RTYBZM0KZMBKBQA3NP5DG61BHPHILZCPD' where id=58; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='NMF2XQ4OS8UHPBS2L41G3Y3NMSQIK9L9T' where id=59; -update noar ti set v0='NMF2XQ4OS8UHPBS2L41G3Y3NMSQIK9L9T' where id=59; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='WCVNB26Z87VXGXFMQ0CDWAU3F1KRRZWFY' where id=59; -update noar ti set v1='WCVNB26Z87VXGXFMQ0CDWAU3F1KRRZWFY' where id=59; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='XU6QL3KQ6HDG5FPE1COTEVANDNK0N79AT' where id=59; -update noar ti set v2='XU6QL3KQ6HDG5FPE1COTEVANDNK0N79AT' where id=59; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='1ZUQRU4LD7QCGT0WJYWNJKJW1XFL9OQ4C' where id=59; -update noar ti set v3='1ZUQRU4LD7QCGT0WJYWNJKJW1XFL9OQ4C' where id=59; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='VM06I5MPUPJN55OXYHJ14T9OURYRW001B' where id=60; -update noar ti set v0='VM06I5MPUPJN55OXYHJ14T9OURYRW001B' where id=60; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='76ATR77K16EY7AD3L8ZGQN3UXO8C8LHJW' where id=60; -update noar ti set v1='76ATR77K16EY7AD3L8ZGQN3UXO8C8LHJW' where id=60; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='SYFSBI4ABGH7CKOIMJWL7RV551NBNB4WM' where id=60; -update noar ti set v2='SYFSBI4ABGH7CKOIMJWL7RV551NBNB4WM' where id=60; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='1VGRTZQKX8T4Q58WYGP6GQGQ3PLNBBV89' where id=60; -update noar ti set v3='1VGRTZQKX8T4Q58WYGP6GQGQ3PLNBBV89' where id=60; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='VLJU7DG5MGME7XQMV9UC6OCCABFEP2DML' where id=61; -update noar ti set v0='VLJU7DG5MGME7XQMV9UC6OCCABFEP2DML' where id=61; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='U66MIZ9X814XSSWFALZAYCTIA87M243J5' where id=61; -update noar ti set v1='U66MIZ9X814XSSWFALZAYCTIA87M243J5' where id=61; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='PZ2JMGVY0UA0NMJI5TXPN9DTUEPXD64ZJ' where id=61; -update noar ti set v2='PZ2JMGVY0UA0NMJI5TXPN9DTUEPXD64ZJ' where id=61; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='CD0C0X8WS18IBF8BOJ2B4NQX8ZE0WC6E9' where id=61; -update noar ti set v3='CD0C0X8WS18IBF8BOJ2B4NQX8ZE0WC6E9' where id=61; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='A5S44N1TMX88VG6SDHDVYQTTD70GUXWEK' where id=62; -update noar ti set v0='A5S44N1TMX88VG6SDHDVYQTTD70GUXWEK' where id=62; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='SHQW6Y2ZGOCTNYRLE1MVL53I8UV4P2HP7' where id=62; -update noar ti set v1='SHQW6Y2ZGOCTNYRLE1MVL53I8UV4P2HP7' where id=62; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='TZJYK2PK5C8DZ6POOETAXPV2H0RQ6X8QH' where id=62; -update noar ti set v2='TZJYK2PK5C8DZ6POOETAXPV2H0RQ6X8QH' where id=62; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='P5YTFZJWGPMZWGJZPO6BULJLOCF07Z9LF' where id=62; -update noar ti set v3='P5YTFZJWGPMZWGJZPO6BULJLOCF07Z9LF' where id=62; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='DXIUJPJIGCKXE8KYU4X15XQOFQ4KXU6LL' where id=63; -update noar ti set v0='DXIUJPJIGCKXE8KYU4X15XQOFQ4KXU6LL' where id=63; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='W6Q9E97RFAFETEM2IORNUUNC5GZG6TZUO' where id=63; -update noar ti set v1='W6Q9E97RFAFETEM2IORNUUNC5GZG6TZUO' where id=63; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='OQRGLG7YZZNRD1YQALS0JO6O6ZLEK1QVP' where id=63; -update noar ti set v2='OQRGLG7YZZNRD1YQALS0JO6O6ZLEK1QVP' where id=63; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='OVI0WCUGVDSVH7ZOO4TD9XV0IYQQ12VNY' where id=63; -update noar ti set v3='OVI0WCUGVDSVH7ZOO4TD9XV0IYQQ12VNY' where id=63; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='J5Q3VFO0ZA4DF8QHCTXZ4YUN7SDW3CBY2' where id=64; -update noar ti set v0='J5Q3VFO0ZA4DF8QHCTXZ4YUN7SDW3CBY2' where id=64; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='3WQ6YQKV13E7UMVSZR92EYP91I1WIBA55' where id=64; -update noar ti set v1='3WQ6YQKV13E7UMVSZR92EYP91I1WIBA55' where id=64; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='TG3O9OM8TTPPB60233M822MVF6DTMJ1GY' where id=64; -update noar ti set v2='TG3O9OM8TTPPB60233M822MVF6DTMJ1GY' where id=64; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='PECH6S66TNU0T7E2AV4G7I0ICY9J5HYMT' where id=64; -update noar ti set v3='PECH6S66TNU0T7E2AV4G7I0ICY9J5HYMT' where id=64; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='P9V026YRE4E6N27H8W0FE9RD9ID4H0KHP' where id=65; -update noar ti set v0='P9V026YRE4E6N27H8W0FE9RD9ID4H0KHP' where id=65; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='GR5V92X8VME7QHTLZRDYDNYU4XDY27WK8' where id=65; -update noar ti set v1='GR5V92X8VME7QHTLZRDYDNYU4XDY27WK8' where id=65; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='ZHTIM8XBIIKT1ZUANZI28GNAJ6WIA6VSA' where id=65; -update noar ti set v2='ZHTIM8XBIIKT1ZUANZI28GNAJ6WIA6VSA' where id=65; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='52Y1LAL6S07WFRHRMYGM703S4BNXQXFWI' where id=65; -update noar ti set v3='52Y1LAL6S07WFRHRMYGM703S4BNXQXFWI' where id=65; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='HQBYRGQY7H3EZN9NTQKO0ZV64VF211XBQ' where id=66; -update noar ti set v0='HQBYRGQY7H3EZN9NTQKO0ZV64VF211XBQ' where id=66; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='V6YGXLISICT0K8K792R7Z9FKORGIYYM3W' where id=66; -update noar ti set v1='V6YGXLISICT0K8K792R7Z9FKORGIYYM3W' where id=66; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='A9SF2TOIUJ06VKQZGFIGG4AFAMYA03I8L' where id=66; -update noar ti set v2='A9SF2TOIUJ06VKQZGFIGG4AFAMYA03I8L' where id=66; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='8DRMIRHJKHA0JUCRYG6GYK3ACZI889F5G' where id=66; -update noar ti set v3='8DRMIRHJKHA0JUCRYG6GYK3ACZI889F5G' where id=66; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='U7IRM1W59O9W71HVONRKHK63WA7APZR80' where id=67; -update noar ti set v0='U7IRM1W59O9W71HVONRKHK63WA7APZR80' where id=67; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='EW9RSVANN4GXFDHNJEUYVKTTQ1M1H6EC4' where id=67; -update noar ti set v1='EW9RSVANN4GXFDHNJEUYVKTTQ1M1H6EC4' where id=67; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='RBZLXMMNGSIH2Z0ZKTMODQR9AHUOBZGG6' where id=67; -update noar ti set v2='RBZLXMMNGSIH2Z0ZKTMODQR9AHUOBZGG6' where id=67; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='91KMBJ1JJ3EO9MFXTM2GWL9KBG2B0VUQ3' where id=67; -update noar ti set v3='91KMBJ1JJ3EO9MFXTM2GWL9KBG2B0VUQ3' where id=67; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='4VDHEZIWXIWFA9UN3UY9C0P5R5Z8J5WXJ' where id=68; -update noar ti set v0='4VDHEZIWXIWFA9UN3UY9C0P5R5Z8J5WXJ' where id=68; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='SPYS7HLQ9OAX7KOGWVTWXHD0MAP474K59' where id=68; -update noar ti set v1='SPYS7HLQ9OAX7KOGWVTWXHD0MAP474K59' where id=68; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='TN58DN9GB8OE3TKX3QXJP1D56Q0WT1WMK' where id=68; -update noar ti set v2='TN58DN9GB8OE3TKX3QXJP1D56Q0WT1WMK' where id=68; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='T7P8DXVVUCAJPU7SZIF1UH5THFSRAJBOA' where id=68; -update noar ti set v3='T7P8DXVVUCAJPU7SZIF1UH5THFSRAJBOA' where id=68; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='RBAFLFIAP39ZJPEB45CMYIJNL4O69NHJA' where id=69; -update noar ti set v0='RBAFLFIAP39ZJPEB45CMYIJNL4O69NHJA' where id=69; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='A8UO00Q0QGUITMRJYGIEJ6J3VOORX3V2X' where id=69; -update noar ti set v1='A8UO00Q0QGUITMRJYGIEJ6J3VOORX3V2X' where id=69; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='4C8OI3LBJ9BEU1UL6PSL4EUX3VI5AXZVC' where id=69; -update noar ti set v2='4C8OI3LBJ9BEU1UL6PSL4EUX3VI5AXZVC' where id=69; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='YBI1CCKRD7HH53NL2Z38J58BJUPSWD3B8' where id=69; -update noar ti set v3='YBI1CCKRD7HH53NL2Z38J58BJUPSWD3B8' where id=69; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='0R6EPZDWXP8REHTE4QAHQRR1TCR2PES1M' where id=70; -update noar ti set v0='0R6EPZDWXP8REHTE4QAHQRR1TCR2PES1M' where id=70; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='AUUJPYXXC4KFMJK48FJ8722FR9BAKX0KY' where id=70; -update noar ti set v1='AUUJPYXXC4KFMJK48FJ8722FR9BAKX0KY' where id=70; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='0Z9S1U27VH738JD5Z175A1J3YPB2N025M' where id=70; -update noar ti set v2='0Z9S1U27VH738JD5Z175A1J3YPB2N025M' where id=70; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='N1CKHUX8C5MMJLBYGQEBL6BPNBV9J11IW' where id=70; -update noar ti set v3='N1CKHUX8C5MMJLBYGQEBL6BPNBV9J11IW' where id=70; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='E53K6FCNE8296B77TTNO8FTKYDV15DHFE' where id=71; -update noar ti set v0='E53K6FCNE8296B77TTNO8FTKYDV15DHFE' where id=71; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='J70EEQVMHMLKOFVPPKGPP33WCDRD4LHHN' where id=71; -update noar ti set v1='J70EEQVMHMLKOFVPPKGPP33WCDRD4LHHN' where id=71; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='UG7ILDDTK2AFZU9YU6DQ0DYLZN430MUM9' where id=71; -update noar ti set v2='UG7ILDDTK2AFZU9YU6DQ0DYLZN430MUM9' where id=71; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='GHCMT694ZNB7UW5VTMDGLTD68F3AR46GW' where id=71; -update noar ti set v3='GHCMT694ZNB7UW5VTMDGLTD68F3AR46GW' where id=71; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='CLJZXA12D8IYJEZDB1R4E7GRMV8N72RT9' where id=72; -update noar ti set v0='CLJZXA12D8IYJEZDB1R4E7GRMV8N72RT9' where id=72; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='OSHBB5ZRF7RLE6CHZMKR56QZH0ISXB4CK' where id=72; -update noar ti set v1='OSHBB5ZRF7RLE6CHZMKR56QZH0ISXB4CK' where id=72; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='1VFD6E9NXSITTRRMLYXW93N450TU3RJ4T' where id=72; -update noar ti set v2='1VFD6E9NXSITTRRMLYXW93N450TU3RJ4T' where id=72; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='0V0KHIZHYM3FRMXLFODZSA97R7H7RDGEH' where id=72; -update noar ti set v3='0V0KHIZHYM3FRMXLFODZSA97R7H7RDGEH' where id=72; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='OZVGOUL95XCUZW1FCTFPDMXGU29RCGAFW' where id=73; -update noar ti set v0='OZVGOUL95XCUZW1FCTFPDMXGU29RCGAFW' where id=73; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='96OUR5V5JBHNI7ZFSSYCJ0H7WE4YT283N' where id=73; -update noar ti set v1='96OUR5V5JBHNI7ZFSSYCJ0H7WE4YT283N' where id=73; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='IYCI1S7HOLM7P4IC0OIEOCL953EI8G19T' where id=73; -update noar ti set v2='IYCI1S7HOLM7P4IC0OIEOCL953EI8G19T' where id=73; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='GWJW0RFJJB80X5T880J9CYGPXX0J6ZDWE' where id=73; -update noar ti set v3='GWJW0RFJJB80X5T880J9CYGPXX0J6ZDWE' where id=73; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='DZKR232DCPAICDL3DH921CM82LM0J2KCP' where id=74; -update noar ti set v0='DZKR232DCPAICDL3DH921CM82LM0J2KCP' where id=74; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='R2ZZFSGBVIX329YJGWA2NA1KNYXFICHML' where id=74; -update noar ti set v1='R2ZZFSGBVIX329YJGWA2NA1KNYXFICHML' where id=74; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='H3O2GLFUQXEAV6MONOE4NYCUUHH89IWSP' where id=74; -update noar ti set v2='H3O2GLFUQXEAV6MONOE4NYCUUHH89IWSP' where id=74; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='DN2WPI8C0V14DOIDC8HOCXL1MH36X8P1Q' where id=74; -update noar ti set v3='DN2WPI8C0V14DOIDC8HOCXL1MH36X8P1Q' where id=74; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='KKAU7NVQJIDYC5J4PSKO2B9NFQZCNZNAM' where id=75; -update noar ti set v0='KKAU7NVQJIDYC5J4PSKO2B9NFQZCNZNAM' where id=75; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='5KTQ2LYODHTNDBTPWP7O39G18YKS1F3JF' where id=75; -update noar ti set v1='5KTQ2LYODHTNDBTPWP7O39G18YKS1F3JF' where id=75; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='LSR05H81093YIS2VI9K42MF90NKAV6YBB' where id=75; -update noar ti set v2='LSR05H81093YIS2VI9K42MF90NKAV6YBB' where id=75; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='8Q6YN8ACEGSRW6J792TQRJZXL2CRM6F8R' where id=75; -update noar ti set v3='8Q6YN8ACEGSRW6J792TQRJZXL2CRM6F8R' where id=75; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='MELD8O9P7RWKK94A3N9XQEG11OX85JEBG' where id=76; -update noar ti set v0='MELD8O9P7RWKK94A3N9XQEG11OX85JEBG' where id=76; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='7MJK9CPHQ90RZKKWHG3R4NZ5BDTXP5AGV' where id=76; -update noar ti set v1='7MJK9CPHQ90RZKKWHG3R4NZ5BDTXP5AGV' where id=76; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='BVFAEOYPQQWIVH9QVEMD1B6J3U9UKB6I9' where id=76; -update noar ti set v2='BVFAEOYPQQWIVH9QVEMD1B6J3U9UKB6I9' where id=76; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='65WMWMYPC9566T2IG53KGTVILG4FAWFFR' where id=76; -update noar ti set v3='65WMWMYPC9566T2IG53KGTVILG4FAWFFR' where id=76; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='I2P6PFQJXFXRX21THQ8W3X0N90J9Z54RK' where id=77; -update noar ti set v0='I2P6PFQJXFXRX21THQ8W3X0N90J9Z54RK' where id=77; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='46L8DSTTPJTKB3PMHWKGBG5U632P4S9VH' where id=77; -update noar ti set v1='46L8DSTTPJTKB3PMHWKGBG5U632P4S9VH' where id=77; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='QHCHD1TSI870RBHOPS3X1A2TXDR3TYIOR' where id=77; -update noar ti set v2='QHCHD1TSI870RBHOPS3X1A2TXDR3TYIOR' where id=77; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='QCOE17ASDZR7CP4NF06B3RD41F09TTFBP' where id=77; -update noar ti set v3='QCOE17ASDZR7CP4NF06B3RD41F09TTFBP' where id=77; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='ZDMHLYKTPA6UJ2HOUPF2NZ29YCBS0LPB1' where id=78; -update noar ti set v0='ZDMHLYKTPA6UJ2HOUPF2NZ29YCBS0LPB1' where id=78; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='6K9DP0RUZUCQSJVYDVO3IGAP6SBDV9WK2' where id=78; -update noar ti set v1='6K9DP0RUZUCQSJVYDVO3IGAP6SBDV9WK2' where id=78; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='W968MKNIHCPENL5EU0OQYHEE736JRBDO5' where id=78; -update noar ti set v2='W968MKNIHCPENL5EU0OQYHEE736JRBDO5' where id=78; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='C1P5NN3CLAOACWO6GC8CHW2XBXTOTBQ9R' where id=78; -update noar ti set v3='C1P5NN3CLAOACWO6GC8CHW2XBXTOTBQ9R' where id=78; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='VVKCPGTI9ZP4RGQ2RE426UCHSVG5WERM2' where id=79; -update noar ti set v0='VVKCPGTI9ZP4RGQ2RE426UCHSVG5WERM2' where id=79; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='9ALQ6SFBH1BH1BSWX9ZW2QUHFIOHJNN2P' where id=79; -update noar ti set v1='9ALQ6SFBH1BH1BSWX9ZW2QUHFIOHJNN2P' where id=79; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='F1OMWTAX0TKMXLGDNRPXK2H1XMTV4U35U' where id=79; -update noar ti set v2='F1OMWTAX0TKMXLGDNRPXK2H1XMTV4U35U' where id=79; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='BBHGSD8QTJYUMMKBNO9ZXFEFN1DC4H96O' where id=79; -update noar ti set v3='BBHGSD8QTJYUMMKBNO9ZXFEFN1DC4H96O' where id=79; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='M2QRLC1L0PT4QMP0SQZOMSJ3NPO51GVVP' where id=80; -update noar ti set v0='M2QRLC1L0PT4QMP0SQZOMSJ3NPO51GVVP' where id=80; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='8CUN3B6L2QK65VPPX6KEUGK0GCCRKDWXY' where id=80; -update noar ti set v1='8CUN3B6L2QK65VPPX6KEUGK0GCCRKDWXY' where id=80; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='FPBXGU1CSXX8MJ9QI07LL3OQJNFZ26BJ6' where id=80; -update noar ti set v2='FPBXGU1CSXX8MJ9QI07LL3OQJNFZ26BJ6' where id=80; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='46F7JMV2CUHK73NN43IDQDJ3IGD3HONK1' where id=80; -update noar ti set v3='46F7JMV2CUHK73NN43IDQDJ3IGD3HONK1' where id=80; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='A0ZN1UOWXZNNHMPZQYJ7DBBTNNFNXZEMZ' where id=81; -update noar ti set v0='A0ZN1UOWXZNNHMPZQYJ7DBBTNNFNXZEMZ' where id=81; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='ORHZ2BWY8BTXPZI1L8UGPNPQDWZ82MI9F' where id=81; -update noar ti set v1='ORHZ2BWY8BTXPZI1L8UGPNPQDWZ82MI9F' where id=81; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='4SCC68CXZKXW1MSH38YPWFHHNCR1LLLPX' where id=81; -update noar ti set v2='4SCC68CXZKXW1MSH38YPWFHHNCR1LLLPX' where id=81; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='Q3UV3XI9P0K1Z0500D09ELUNF9T6HUG74' where id=81; -update noar ti set v3='Q3UV3XI9P0K1Z0500D09ELUNF9T6HUG74' where id=81; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='HMKFAE5NRNU6RH1YPE05J01N99MA2VE49' where id=82; -update noar ti set v0='HMKFAE5NRNU6RH1YPE05J01N99MA2VE49' where id=82; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='3IRSQZM5VULR93W6646I8GA84KST7OS5N' where id=82; -update noar ti set v1='3IRSQZM5VULR93W6646I8GA84KST7OS5N' where id=82; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='Y9JNPJ2LBEX0RPZJ9YVM9228DAGXNH4JW' where id=82; -update noar ti set v2='Y9JNPJ2LBEX0RPZJ9YVM9228DAGXNH4JW' where id=82; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='RS6C2HAFDTOO9543IDMN6UXTDFW1QETP1' where id=82; -update noar ti set v3='RS6C2HAFDTOO9543IDMN6UXTDFW1QETP1' where id=82; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='N4KAN5KDW8AJA5W15B4LGKU0O3I01WNRJ' where id=83; -update noar ti set v0='N4KAN5KDW8AJA5W15B4LGKU0O3I01WNRJ' where id=83; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='LVRX9LKT4XG5JRRXIQB7NBKEIWE5G1Z0F' where id=83; -update noar ti set v1='LVRX9LKT4XG5JRRXIQB7NBKEIWE5G1Z0F' where id=83; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='7V5MZJ3S5CLDNEGNN742S3AB4EF2U24AW' where id=83; -update noar ti set v2='7V5MZJ3S5CLDNEGNN742S3AB4EF2U24AW' where id=83; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='8I2GEFBSHQW0QLRJULT7HRHVK0Y2R6ES2' where id=83; -update noar ti set v3='8I2GEFBSHQW0QLRJULT7HRHVK0Y2R6ES2' where id=83; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='G562B5W18EY13A325QPBQ8NCB86402DU3' where id=84; -update noar ti set v0='G562B5W18EY13A325QPBQ8NCB86402DU3' where id=84; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='GF9MO8PYMC5QQ4L43YSECUUUT86PT5YXG' where id=84; -update noar ti set v1='GF9MO8PYMC5QQ4L43YSECUUUT86PT5YXG' where id=84; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='3YBHFTJZX6XA4VDHC3ZSAUIUJY8XZCOCG' where id=84; -update noar ti set v2='3YBHFTJZX6XA4VDHC3ZSAUIUJY8XZCOCG' where id=84; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='DQPOWJCK6AXIIMMTOL3IKCWFLNLI1NCUY' where id=84; -update noar ti set v3='DQPOWJCK6AXIIMMTOL3IKCWFLNLI1NCUY' where id=84; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='0CCAKASQ5XAATMWANI4X4ZA0O2ANTH8GW' where id=85; -update noar ti set v0='0CCAKASQ5XAATMWANI4X4ZA0O2ANTH8GW' where id=85; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='03VKPN0A8P1FCWYRG60XGG4FCOFV7RV0K' where id=85; -update noar ti set v1='03VKPN0A8P1FCWYRG60XGG4FCOFV7RV0K' where id=85; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='VZNWPKE0C0NU97GVW871PDTKLEI0JK2C5' where id=85; -update noar ti set v2='VZNWPKE0C0NU97GVW871PDTKLEI0JK2C5' where id=85; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='3ROAED83IVX2TI5V9XQ8JJTC6PM2C0BKO' where id=85; -update noar ti set v3='3ROAED83IVX2TI5V9XQ8JJTC6PM2C0BKO' where id=85; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='HFP49S7VKG4MZOW206CCV65GYXA8RTBEU' where id=86; -update noar ti set v0='HFP49S7VKG4MZOW206CCV65GYXA8RTBEU' where id=86; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='ZGO9G3JQ62QX259SX49B4KCE5J0Z13KTQ' where id=86; -update noar ti set v1='ZGO9G3JQ62QX259SX49B4KCE5J0Z13KTQ' where id=86; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='MF6BS4LYEE77RVU0XZCXG8DLPP2SI2JN7' where id=86; -update noar ti set v2='MF6BS4LYEE77RVU0XZCXG8DLPP2SI2JN7' where id=86; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='DSMSM4C5TJ1SLWSUORHARNIPFJ1BTLSRB' where id=86; -update noar ti set v3='DSMSM4C5TJ1SLWSUORHARNIPFJ1BTLSRB' where id=86; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='12J0WFG2QMZI5B9AE73EFPST3YNHKJXXI' where id=87; -update noar ti set v0='12J0WFG2QMZI5B9AE73EFPST3YNHKJXXI' where id=87; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='SE17BN62U6TY2WZUL3GE5RMT3WDX077UT' where id=87; -update noar ti set v1='SE17BN62U6TY2WZUL3GE5RMT3WDX077UT' where id=87; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='TQ2BF114DVI2JRRQUX66BSNDHQ1KF6HVH' where id=87; -update noar ti set v2='TQ2BF114DVI2JRRQUX66BSNDHQ1KF6HVH' where id=87; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='FWOVRM7J7I4NIHXNM8MGO40TY0IYA35GJ' where id=87; -update noar ti set v3='FWOVRM7J7I4NIHXNM8MGO40TY0IYA35GJ' where id=87; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='OWCTJVROTLMNGUAEBNQWVJR5MJUNIX1H4' where id=88; -update noar ti set v0='OWCTJVROTLMNGUAEBNQWVJR5MJUNIX1H4' where id=88; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='CBE9DQ9177C8HEEMKX4UP1ADNNBCGJNWQ' where id=88; -update noar ti set v1='CBE9DQ9177C8HEEMKX4UP1ADNNBCGJNWQ' where id=88; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='Y0TFC8VCPYK33W7WMQ4MYYFTAEN4I3L2W' where id=88; -update noar ti set v2='Y0TFC8VCPYK33W7WMQ4MYYFTAEN4I3L2W' where id=88; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='471X5RZT3OQ7RI5DFWIW3CKAEMSZ8SZAC' where id=88; -update noar ti set v3='471X5RZT3OQ7RI5DFWIW3CKAEMSZ8SZAC' where id=88; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='YBVOTSDFGJEIW5HKIU3TC6QNDT6DVIXY9' where id=89; -update noar ti set v0='YBVOTSDFGJEIW5HKIU3TC6QNDT6DVIXY9' where id=89; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='M93848BGHLYG3MKIMBZOPCMXS0BVM54U4' where id=89; -update noar ti set v1='M93848BGHLYG3MKIMBZOPCMXS0BVM54U4' where id=89; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='SG5JALK95ZK2BM6BFAKXWK4ZTPN2TF13G' where id=89; -update noar ti set v2='SG5JALK95ZK2BM6BFAKXWK4ZTPN2TF13G' where id=89; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='WGFAAAPCAQUODIKZR4EYP37GH23UYZRM5' where id=89; -update noar ti set v3='WGFAAAPCAQUODIKZR4EYP37GH23UYZRM5' where id=89; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='4OQ0UW7A1DMJ6TF0PN5DCRYOQPZNEC6HW' where id=90; -update noar ti set v0='4OQ0UW7A1DMJ6TF0PN5DCRYOQPZNEC6HW' where id=90; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='KDWRZM4Q2XB467W1NE7MKTCYLDDSR7FPJ' where id=90; -update noar ti set v1='KDWRZM4Q2XB467W1NE7MKTCYLDDSR7FPJ' where id=90; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='90KUWNZ9LZ8IF2U5N75FS8F5CTHR88MOX' where id=90; -update noar ti set v2='90KUWNZ9LZ8IF2U5N75FS8F5CTHR88MOX' where id=90; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='A5VA60QNXIX9VTJAPI7F7KTMCIUWXNPM2' where id=90; -update noar ti set v3='A5VA60QNXIX9VTJAPI7F7KTMCIUWXNPM2' where id=90; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='4IUUBR2FWGA4M737O3ZHRVATI1L2JJIZ3' where id=91; -update noar ti set v0='4IUUBR2FWGA4M737O3ZHRVATI1L2JJIZ3' where id=91; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='3959L09WO5RWOG8U384R6I52P4RL7UXZ7' where id=91; -update noar ti set v1='3959L09WO5RWOG8U384R6I52P4RL7UXZ7' where id=91; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='SS541JIFI2E1SVQNZXDOC4EM1S5QWWH20' where id=91; -update noar ti set v2='SS541JIFI2E1SVQNZXDOC4EM1S5QWWH20' where id=91; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='M5UVDOOASTWWNVU3TZ6O2PZ43KBU02B90' where id=91; -update noar ti set v3='M5UVDOOASTWWNVU3TZ6O2PZ43KBU02B90' where id=91; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='VKATQCCEAT6BQWHEBG25UFI7KSMCZI6H2' where id=92; -update noar ti set v0='VKATQCCEAT6BQWHEBG25UFI7KSMCZI6H2' where id=92; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='7E6MDARNTLKDCM8RU5QQADD9TDIMKMEJ6' where id=92; -update noar ti set v1='7E6MDARNTLKDCM8RU5QQADD9TDIMKMEJ6' where id=92; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='53D30F1FZN1IZD1GU6KK62FLT99XASARB' where id=92; -update noar ti set v2='53D30F1FZN1IZD1GU6KK62FLT99XASARB' where id=92; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='OXT8TH15Y1DYBRZSRJNUC3I475NNEY18R' where id=92; -update noar ti set v3='OXT8TH15Y1DYBRZSRJNUC3I475NNEY18R' where id=92; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='60OLGDJNS27L2MT3E2095PN8I2211H2MH' where id=93; -update noar ti set v0='60OLGDJNS27L2MT3E2095PN8I2211H2MH' where id=93; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='5UR3YYZWWR3ND41MCLZ6F0DBBHEOOMTLF' where id=93; -update noar ti set v1='5UR3YYZWWR3ND41MCLZ6F0DBBHEOOMTLF' where id=93; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='3SQYLKIZQYJ0IY5M8ETNA2B7XOMDNCKKX' where id=93; -update noar ti set v2='3SQYLKIZQYJ0IY5M8ETNA2B7XOMDNCKKX' where id=93; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='6OTAKG45GOXEZ3MPS13A6SZX55YVATFTM' where id=93; -update noar ti set v3='6OTAKG45GOXEZ3MPS13A6SZX55YVATFTM' where id=93; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='5FVK04MKT5OB6H8TXDUANZEP2L7F4DNXZ' where id=94; -update noar ti set v0='5FVK04MKT5OB6H8TXDUANZEP2L7F4DNXZ' where id=94; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='05SWHSWJ2OBNGU0WEDA8H0K44GUR5M11Q' where id=94; -update noar ti set v1='05SWHSWJ2OBNGU0WEDA8H0K44GUR5M11Q' where id=94; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='SXGX92BX5DS2X2NRVYK35UUJMR87LUCGU' where id=94; -update noar ti set v2='SXGX92BX5DS2X2NRVYK35UUJMR87LUCGU' where id=94; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='HNAHFBZ9NRJSYM04MGJZK81BPZ5VU50SV' where id=94; -update noar ti set v3='HNAHFBZ9NRJSYM04MGJZK81BPZ5VU50SV' where id=94; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='TDSORSBT9LYYA30HGJKNBKBDBXMZGVFDJ' where id=95; -update noar ti set v0='TDSORSBT9LYYA30HGJKNBKBDBXMZGVFDJ' where id=95; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='RVWREG0I181IDF6K3BTFY09Y2J8XSSHX9' where id=95; -update noar ti set v1='RVWREG0I181IDF6K3BTFY09Y2J8XSSHX9' where id=95; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='LBF10KKVT07EB492RYU4ULNY50G4TGDX9' where id=95; -update noar ti set v2='LBF10KKVT07EB492RYU4ULNY50G4TGDX9' where id=95; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='WQAD9AFW7LH5MV11HRKO792E2MU6PJ8V5' where id=95; -update noar ti set v3='WQAD9AFW7LH5MV11HRKO792E2MU6PJ8V5' where id=95; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='3PYBHQSOSTJZGH9DTHZLK1I7VUS96C0BR' where id=96; -update noar ti set v0='3PYBHQSOSTJZGH9DTHZLK1I7VUS96C0BR' where id=96; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='3EARLA2YM5BKMVRH2VPMNHIBPIOEQY9DM' where id=96; -update noar ti set v1='3EARLA2YM5BKMVRH2VPMNHIBPIOEQY9DM' where id=96; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='L3R0TD206KTHNIM90Q7ASMEWZFGXG0GVN' where id=96; -update noar ti set v2='L3R0TD206KTHNIM90Q7ASMEWZFGXG0GVN' where id=96; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='7RE2E3LGRTOP4MTOUEMNXEWKZJIQQ1VL4' where id=96; -update noar ti set v3='7RE2E3LGRTOP4MTOUEMNXEWKZJIQQ1VL4' where id=96; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='K568I90I55F9K8BCA069APVII0RTL908C' where id=97; -update noar ti set v0='K568I90I55F9K8BCA069APVII0RTL908C' where id=97; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='RDTRDI2GG3FMAQGXLH3FTXQEP59TC0TT3' where id=97; -update noar ti set v1='RDTRDI2GG3FMAQGXLH3FTXQEP59TC0TT3' where id=97; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='BY7R7WR4LMU70ASFV6BXPY4M3ABDIRZ26' where id=97; -update noar ti set v2='BY7R7WR4LMU70ASFV6BXPY4M3ABDIRZ26' where id=97; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='ZCBP8EQUE8UCM9BW9RMJ4GJVRZFUFG47S' where id=97; -update noar ti set v3='ZCBP8EQUE8UCM9BW9RMJ4GJVRZFUFG47S' where id=97; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='SED9J1MSSDCVAXD59O79U5RWLUL97SNH5' where id=98; -update noar ti set v0='SED9J1MSSDCVAXD59O79U5RWLUL97SNH5' where id=98; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='J3IKNGK7VOKMBEJZVWG6U3VDH895L97MN' where id=98; -update noar ti set v1='J3IKNGK7VOKMBEJZVWG6U3VDH895L97MN' where id=98; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='J3YC5CQSSIQ39DJSPA8NWV7K26X3NAJFS' where id=98; -update noar ti set v2='J3YC5CQSSIQ39DJSPA8NWV7K26X3NAJFS' where id=98; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='78AU510THUYPI35U4R32XLPJRTTN27O0Z' where id=98; -update noar ti set v3='78AU510THUYPI35U4R32XLPJRTTN27O0Z' where id=98; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='6XHBZNO1XU18061ZF5U6UQ4MC0FS0I90U' where id=99; -update noar ti set v0='6XHBZNO1XU18061ZF5U6UQ4MC0FS0I90U' where id=99; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='MSZI7IF6MAJE3QS5NMZ41OXBJ07D9UJRN' where id=99; -update noar ti set v1='MSZI7IF6MAJE3QS5NMZ41OXBJ07D9UJRN' where id=99; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='ACZUSBYPBA6NM2PPVAF1ZWAH0897G5F6G' where id=99; -update noar ti set v2='ACZUSBYPBA6NM2PPVAF1ZWAH0897G5F6G' where id=99; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='RFWF0WUA0CBD62C3IVV9SI3SW5PU8NWC3' where id=99; -update noar ti set v3='RFWF0WUA0CBD62C3IVV9SI3SW5PU8NWC3' where id=99; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(32) not null, -v1 varchar(32) not null, -v2 varchar(32) not null, -v3 varchar(32) not null, -b0 text not null -) engine=tokudb; -insert into tt values (1,2,'a','b','c','d','e'); -insert into tt values (2,3,'','','','',''); -insert into tt values (3,4,'','','','',''); -insert into tt values (4,5,'','','','',''); -insert into tt values (5,6,'','','','',''); -insert into tt values (6,7,'','','','',''); -insert into tt values (7,8,'','','','',''); -insert into tt values (8,9,'','','','',''); -insert into tt values (9,10,'','','','',''); -insert into tt values (10,11,'','','','',''); -insert into tt values (11,12,'','','','',''); -insert into tt values (12,13,'','','','',''); -insert into tt values (13,14,'','','','',''); -insert into tt values (14,15,'','','','',''); -insert into tt values (15,16,'','','','',''); -insert into tt values (16,17,'','','','',''); -insert into tt values (17,18,'','','','',''); -insert into tt values (18,19,'','','','',''); -insert into tt values (19,20,'','','','',''); -insert into tt values (20,21,'','','','',''); -insert into tt values (21,22,'','','','',''); -insert into tt values (22,23,'','','','',''); -insert into tt values (23,24,'','','','',''); -insert into tt values (24,25,'','','','',''); -insert into tt values (25,26,'','','','',''); -insert into tt values (26,27,'','','','',''); -insert into tt values (27,28,'','','','',''); -insert into tt values (28,29,'','','','',''); -insert into tt values (29,30,'','','','',''); -insert into tt values (30,31,'','','','',''); -insert into tt values (31,32,'','','','',''); -insert into tt values (32,33,'','','','',''); -insert into tt values (33,34,'','','','',''); -insert into tt values (34,35,'','','','',''); -insert into tt values (35,36,'','','','',''); -insert into tt values (36,37,'','','','',''); -insert into tt values (37,38,'','','','',''); -insert into tt values (38,39,'','','','',''); -insert into tt values (39,40,'','','','',''); -insert into tt values (40,41,'','','','',''); -insert into tt values (41,42,'','','','',''); -insert into tt values (42,43,'','','','',''); -insert into tt values (43,44,'','','','',''); -insert into tt values (44,45,'','','','',''); -insert into tt values (45,46,'','','','',''); -insert into tt values (46,47,'','','','',''); -insert into tt values (47,48,'','','','',''); -insert into tt values (48,49,'','','','',''); -insert into tt values (49,50,'','','','',''); -insert into tt values (50,51,'','','','',''); -insert into tt values (51,52,'','','','',''); -insert into tt values (52,53,'','','','',''); -insert into tt values (53,54,'','','','',''); -insert into tt values (54,55,'','','','',''); -insert into tt values (55,56,'','','','',''); -insert into tt values (56,57,'','','','',''); -insert into tt values (57,58,'','','','',''); -insert into tt values (58,59,'','','','',''); -insert into tt values (59,60,'','','','',''); -insert into tt values (60,61,'','','','',''); -insert into tt values (61,62,'','','','',''); -insert into tt values (62,63,'','','','',''); -insert into tt values (63,64,'','','','',''); -insert into tt values (64,65,'','','','',''); -insert into tt values (65,66,'','','','',''); -insert into tt values (66,67,'','','','',''); -insert into tt values (67,68,'','','','',''); -insert into tt values (68,69,'','','','',''); -insert into tt values (69,70,'','','','',''); -insert into tt values (70,71,'','','','',''); -insert into tt values (71,72,'','','','',''); -insert into tt values (72,73,'','','','',''); -insert into tt values (73,74,'','','','',''); -insert into tt values (74,75,'','','','',''); -insert into tt values (75,76,'','','','',''); -insert into tt values (76,77,'','','','',''); -insert into tt values (77,78,'','','','',''); -insert into tt values (78,79,'','','','',''); -insert into tt values (79,80,'','','','',''); -insert into tt values (80,81,'','','','',''); -insert into tt values (81,82,'','','','',''); -insert into tt values (82,83,'','','','',''); -insert into tt values (83,84,'','','','',''); -insert into tt values (84,85,'','','','',''); -insert into tt values (85,86,'','','','',''); -insert into tt values (86,87,'','','','',''); -insert into tt values (87,88,'','','','',''); -insert into tt values (88,89,'','','','',''); -insert into tt values (89,90,'','','','',''); -insert into tt values (90,91,'','','','',''); -insert into tt values (91,92,'','','','',''); -insert into tt values (92,93,'','','','',''); -insert into tt values (93,94,'','','','',''); -insert into tt values (94,95,'','','','',''); -insert into tt values (95,96,'','','','',''); -insert into tt values (96,97,'','','','',''); -insert into tt values (97,98,'','','','',''); -insert into tt values (98,99,'','','','',''); -insert into tt values (99,100,'','','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='null this 0' where id=0; -update noar ti set v0='null this 0' where id=0; -update noar tt set v1='null is 1' where id=0; -update noar ti set v1='null is 1' where id=0; -update noar tt set v2='null a 2' where id=0; -update noar ti set v2='null a 2' where id=0; -update noar tt set v3='null test 3' where id=0; -update noar ti set v3='null test 3' where id=0; -update noar tt set v0='this 0' where id=1; -update noar ti set v0='this 0' where id=1; -update noar tt set v1='is 1' where id=1; -update noar ti set v1='is 1' where id=1; -update noar tt set v2='another 2' where id=1; -update noar ti set v2='another 2' where id=1; -update noar tt set v3='test 3' where id=1; -update noar ti set v3='test 3' where id=1; -update noar tt set v0='IC5XO2HY0SNAHR1O9UT9DAISFBFW9GTL9' where id=2; -update noar ti set v0='IC5XO2HY0SNAHR1O9UT9DAISFBFW9GTL9' where id=2; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='Q0PDDCYZMRX73GMZNM7JWE1A0UGF7B31B' where id=2; -update noar ti set v1='Q0PDDCYZMRX73GMZNM7JWE1A0UGF7B31B' where id=2; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='ZOTP4VITR9E1QSA3OXLGF83HPLVW5KJM0' where id=2; -update noar ti set v2='ZOTP4VITR9E1QSA3OXLGF83HPLVW5KJM0' where id=2; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='AWXKUXS098Z5LMTQXXIN55OMZZ63CYGMP' where id=2; -update noar ti set v3='AWXKUXS098Z5LMTQXXIN55OMZZ63CYGMP' where id=2; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='4FSEIEP6GOUA7GQ8FGJ4FBRGH4BT4BTJC' where id=3; -update noar ti set v0='4FSEIEP6GOUA7GQ8FGJ4FBRGH4BT4BTJC' where id=3; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='2RSDZ9QLEIWX7P7QA25ZNSINU5V1EK85T' where id=3; -update noar ti set v1='2RSDZ9QLEIWX7P7QA25ZNSINU5V1EK85T' where id=3; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='8V8QR8UT1C81UA151W3Q92C0XKHX402RF' where id=3; -update noar ti set v2='8V8QR8UT1C81UA151W3Q92C0XKHX402RF' where id=3; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='A4Q3XWFULLJ1AVQJUCSXWO66SYH9G5DU0' where id=3; -update noar ti set v3='A4Q3XWFULLJ1AVQJUCSXWO66SYH9G5DU0' where id=3; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='NHCZBZQKG5I0X2WJVRJ4SSYQN2RYCYMCH' where id=4; -update noar ti set v0='NHCZBZQKG5I0X2WJVRJ4SSYQN2RYCYMCH' where id=4; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='N6DQGNNR1IJM8T9E3OXR8J981D02Z7NBA' where id=4; -update noar ti set v1='N6DQGNNR1IJM8T9E3OXR8J981D02Z7NBA' where id=4; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='DMAB0DQA1KA5PMA4EGOX8TEFKHV3D9IZK' where id=4; -update noar ti set v2='DMAB0DQA1KA5PMA4EGOX8TEFKHV3D9IZK' where id=4; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='DWEEZJCE69GD1YUVLMWFFB459SEGR5XPG' where id=4; -update noar ti set v3='DWEEZJCE69GD1YUVLMWFFB459SEGR5XPG' where id=4; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='POLT15DV510BZFUP1NR6RFWEPD0PXET9J' where id=5; -update noar ti set v0='POLT15DV510BZFUP1NR6RFWEPD0PXET9J' where id=5; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='5TALX42LEWH68AKJV33EJCEZF4W3LBFG5' where id=5; -update noar ti set v1='5TALX42LEWH68AKJV33EJCEZF4W3LBFG5' where id=5; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='ZZM5S7W6OHF5SZ5WFU9RKWUM9YBYZFIB8' where id=5; -update noar ti set v2='ZZM5S7W6OHF5SZ5WFU9RKWUM9YBYZFIB8' where id=5; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='4JZFKJR24A5SGQDMAXH3RSXOJ3SVWLZ0M' where id=5; -update noar ti set v3='4JZFKJR24A5SGQDMAXH3RSXOJ3SVWLZ0M' where id=5; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='USNXDKICO9BMNWKR24S48RVS8K7S8SKK9' where id=6; -update noar ti set v0='USNXDKICO9BMNWKR24S48RVS8K7S8SKK9' where id=6; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='67EEX1BOWG7H82527UDYZ0VJDQHOW029V' where id=6; -update noar ti set v1='67EEX1BOWG7H82527UDYZ0VJDQHOW029V' where id=6; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='UWFTI4U2BQ4OIWGZDMCVW7XE1XN20EO8P' where id=6; -update noar ti set v2='UWFTI4U2BQ4OIWGZDMCVW7XE1XN20EO8P' where id=6; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='9UXD7FNN7U6N0BM4QAUQCMW1CHTNEBYB0' where id=6; -update noar ti set v3='9UXD7FNN7U6N0BM4QAUQCMW1CHTNEBYB0' where id=6; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='0OBEZ3NAQYDQS7QD1KTR9VZSHP6M8CXI7' where id=7; -update noar ti set v0='0OBEZ3NAQYDQS7QD1KTR9VZSHP6M8CXI7' where id=7; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='0MRH2NPTSNSRAU8VKXW39HF2HS6T4RC0I' where id=7; -update noar ti set v1='0MRH2NPTSNSRAU8VKXW39HF2HS6T4RC0I' where id=7; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='NK9M6P6IOVZGA5HI4MHWY4AYK5I2RUASJ' where id=7; -update noar ti set v2='NK9M6P6IOVZGA5HI4MHWY4AYK5I2RUASJ' where id=7; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='ON8SN347RNPG97ODV5EI0J603UFI76718' where id=7; -update noar ti set v3='ON8SN347RNPG97ODV5EI0J603UFI76718' where id=7; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='N46Q5EM8SE02AHFIX0Z3VYT50MDUJVF26' where id=8; -update noar ti set v0='N46Q5EM8SE02AHFIX0Z3VYT50MDUJVF26' where id=8; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='OVYOQYYDBL5VW9P1O178P84WV6BT61ZFB' where id=8; -update noar ti set v1='OVYOQYYDBL5VW9P1O178P84WV6BT61ZFB' where id=8; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='WO40KLPQ3NUW7W41UO8AU649BLKPRRO8N' where id=8; -update noar ti set v2='WO40KLPQ3NUW7W41UO8AU649BLKPRRO8N' where id=8; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='E484JGWQJ29GHH2JVWXTQWGMA4CN2EV24' where id=8; -update noar ti set v3='E484JGWQJ29GHH2JVWXTQWGMA4CN2EV24' where id=8; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='MXXSJ5F5LL5N69CMDGWZRD5AK7IL9KCB1' where id=9; -update noar ti set v0='MXXSJ5F5LL5N69CMDGWZRD5AK7IL9KCB1' where id=9; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='73R73QXHPLHVQPCOU45H5BQRDQ0Z1NMOM' where id=9; -update noar ti set v1='73R73QXHPLHVQPCOU45H5BQRDQ0Z1NMOM' where id=9; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='97YU1WRG43ZR6ZIZ96WB4PLAMLPGKKAJX' where id=9; -update noar ti set v2='97YU1WRG43ZR6ZIZ96WB4PLAMLPGKKAJX' where id=9; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='PEE7XA7EHIDF51GC1ZYFNZBHKJ89ZKMLH' where id=9; -update noar ti set v3='PEE7XA7EHIDF51GC1ZYFNZBHKJ89ZKMLH' where id=9; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='S2B68U5VZ8OVWV8Q3J37HV58OE6GOXW0A' where id=10; -update noar ti set v0='S2B68U5VZ8OVWV8Q3J37HV58OE6GOXW0A' where id=10; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='GP3Y0W0P4BS0EZ7H6FE16FOKX3DJWRMLY' where id=10; -update noar ti set v1='GP3Y0W0P4BS0EZ7H6FE16FOKX3DJWRMLY' where id=10; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='3JV9560T6SJ4LJ0SFJKLLGGRFID1MNTKK' where id=10; -update noar ti set v2='3JV9560T6SJ4LJ0SFJKLLGGRFID1MNTKK' where id=10; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='9EV800RY0AITX5QFRU6ZNY17UUK73N2SC' where id=10; -update noar ti set v3='9EV800RY0AITX5QFRU6ZNY17UUK73N2SC' where id=10; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='EYBDRKCTPFMGCDZVO2YS3IY5EIY9BG42B' where id=11; -update noar ti set v0='EYBDRKCTPFMGCDZVO2YS3IY5EIY9BG42B' where id=11; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='DV27FZMQFUD649W2J8E1DW4NFEK6SROD6' where id=11; -update noar ti set v1='DV27FZMQFUD649W2J8E1DW4NFEK6SROD6' where id=11; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='PPZP92XQXICUBXKELDGCQ876W2RFSQVT5' where id=11; -update noar ti set v2='PPZP92XQXICUBXKELDGCQ876W2RFSQVT5' where id=11; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='UWCL4J2FBX582CUS2I55SVQJ58IBCJ86R' where id=11; -update noar ti set v3='UWCL4J2FBX582CUS2I55SVQJ58IBCJ86R' where id=11; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='1WXM0LVSZME86D22IW98WJUUECSDROVOM' where id=12; -update noar ti set v0='1WXM0LVSZME86D22IW98WJUUECSDROVOM' where id=12; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='VLI1TPGF2NESX1HQMOADI8VGRZ48J4K4C' where id=12; -update noar ti set v1='VLI1TPGF2NESX1HQMOADI8VGRZ48J4K4C' where id=12; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='6Q7LNCN40HHPCVVHZGSD5NXJBMW02M24A' where id=12; -update noar ti set v2='6Q7LNCN40HHPCVVHZGSD5NXJBMW02M24A' where id=12; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='PFE8GLBMI79N2W13J05171NKI7Q00Y9LT' where id=12; -update noar ti set v3='PFE8GLBMI79N2W13J05171NKI7Q00Y9LT' where id=12; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='N2XJE761M372KF2RR9Z2P1UTC366LCJ3J' where id=13; -update noar ti set v0='N2XJE761M372KF2RR9Z2P1UTC366LCJ3J' where id=13; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='GN6E0I6YTSI26BO48J0CK23DTD2B17SUQ' where id=13; -update noar ti set v1='GN6E0I6YTSI26BO48J0CK23DTD2B17SUQ' where id=13; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='ARPFNK3XAK3RVXRYX89G9Y4HJ2RXRB5H4' where id=13; -update noar ti set v2='ARPFNK3XAK3RVXRYX89G9Y4HJ2RXRB5H4' where id=13; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='NBBHLV3YQB5D5ZJYOGOC0H8K5XESK5XF2' where id=13; -update noar ti set v3='NBBHLV3YQB5D5ZJYOGOC0H8K5XESK5XF2' where id=13; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='RH3FVYGUKGXSSCHZPZRBR71SF4MQSPBLP' where id=14; -update noar ti set v0='RH3FVYGUKGXSSCHZPZRBR71SF4MQSPBLP' where id=14; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='8BZQD8O0S0X3CTIXK4B1R3QAWNUJZWL8E' where id=14; -update noar ti set v1='8BZQD8O0S0X3CTIXK4B1R3QAWNUJZWL8E' where id=14; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='TO8OJNYUK4UDMBJ217893S818K3VXRP76' where id=14; -update noar ti set v2='TO8OJNYUK4UDMBJ217893S818K3VXRP76' where id=14; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='AIP2RSZ7BM6J8W6HOBTWGKN4UXAUFVHDO' where id=14; -update noar ti set v3='AIP2RSZ7BM6J8W6HOBTWGKN4UXAUFVHDO' where id=14; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='DDR470GJVTIJXBMKR1UYTPWE98RA8X99X' where id=15; -update noar ti set v0='DDR470GJVTIJXBMKR1UYTPWE98RA8X99X' where id=15; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='GPSAJ70ZQDYTMUBZ85HHREVYSYFUYBUBB' where id=15; -update noar ti set v1='GPSAJ70ZQDYTMUBZ85HHREVYSYFUYBUBB' where id=15; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='V617AYHE1PSVO3SB6SINQJ8JWEZV14MBE' where id=15; -update noar ti set v2='V617AYHE1PSVO3SB6SINQJ8JWEZV14MBE' where id=15; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='I1WMQKDSS40M8Y59YDCYF80FZ3AUUZIXP' where id=15; -update noar ti set v3='I1WMQKDSS40M8Y59YDCYF80FZ3AUUZIXP' where id=15; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='MG4LKIVDTV26501IOAWX2LPOWWYXUM3BA' where id=16; -update noar ti set v0='MG4LKIVDTV26501IOAWX2LPOWWYXUM3BA' where id=16; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='GC4XSGQ7R9YRGWW05LDJZDFJ00D2Z5ANZ' where id=16; -update noar ti set v1='GC4XSGQ7R9YRGWW05LDJZDFJ00D2Z5ANZ' where id=16; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='OPFIIFO3L4492C6BPB8BKGQXZBILAO3ER' where id=16; -update noar ti set v2='OPFIIFO3L4492C6BPB8BKGQXZBILAO3ER' where id=16; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='97AOS93FGU3NRP8GQDBDX8TGK4F8YB6NG' where id=16; -update noar ti set v3='97AOS93FGU3NRP8GQDBDX8TGK4F8YB6NG' where id=16; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='WXNFNF2VBEFQMR1UZG9QPI06BJVIPLOZN' where id=17; -update noar ti set v0='WXNFNF2VBEFQMR1UZG9QPI06BJVIPLOZN' where id=17; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='2L1O8ETO2PJB0YZMIQUGA1PFXFRKS95O7' where id=17; -update noar ti set v1='2L1O8ETO2PJB0YZMIQUGA1PFXFRKS95O7' where id=17; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='S9ECH1HUYNSFSL30V8W5D4OE26HLNUFAQ' where id=17; -update noar ti set v2='S9ECH1HUYNSFSL30V8W5D4OE26HLNUFAQ' where id=17; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='DZANTZKACCGAASTTXK0FJIVHXOWH4AGNB' where id=17; -update noar ti set v3='DZANTZKACCGAASTTXK0FJIVHXOWH4AGNB' where id=17; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='IEG3RW11RLW5TGA4YFW9ZK8T4RTA9CVME' where id=18; -update noar ti set v0='IEG3RW11RLW5TGA4YFW9ZK8T4RTA9CVME' where id=18; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='R9EU9GRHHQG3P47YCRXN55RMM5V90T2ZY' where id=18; -update noar ti set v1='R9EU9GRHHQG3P47YCRXN55RMM5V90T2ZY' where id=18; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='EKILZ01W3LBC1NUWRRMSBKP1BD17IVDC9' where id=18; -update noar ti set v2='EKILZ01W3LBC1NUWRRMSBKP1BD17IVDC9' where id=18; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='GFDKSWC5YC4SOGIS640IPXBP9MYDIMWHE' where id=18; -update noar ti set v3='GFDKSWC5YC4SOGIS640IPXBP9MYDIMWHE' where id=18; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='W77FM5AWKG4DF3T8FPTP38NLUZWREVXYE' where id=19; -update noar ti set v0='W77FM5AWKG4DF3T8FPTP38NLUZWREVXYE' where id=19; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='I9JYBB78EUW30IUQXIXKNPV9PPNO57ZXD' where id=19; -update noar ti set v1='I9JYBB78EUW30IUQXIXKNPV9PPNO57ZXD' where id=19; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='7VL9TOKT6HAR9687A61PGBLIMWTA6DFIW' where id=19; -update noar ti set v2='7VL9TOKT6HAR9687A61PGBLIMWTA6DFIW' where id=19; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='0JF5PXKJLKAMGA7E9X8EWSXNWK2MUPVUT' where id=19; -update noar ti set v3='0JF5PXKJLKAMGA7E9X8EWSXNWK2MUPVUT' where id=19; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='HEFACTG7YYF1Z1JGMXV669FGJF0I2P0BF' where id=20; -update noar ti set v0='HEFACTG7YYF1Z1JGMXV669FGJF0I2P0BF' where id=20; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='OO7UJU0KTNQNNUQM4BPHXJUJNAKKSBS2T' where id=20; -update noar ti set v1='OO7UJU0KTNQNNUQM4BPHXJUJNAKKSBS2T' where id=20; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='4NQF6FLJH4YMYLRA1HY3HMC52USSIVTY7' where id=20; -update noar ti set v2='4NQF6FLJH4YMYLRA1HY3HMC52USSIVTY7' where id=20; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='DWQVRTFYPOB8ZTPBEKQ8J3YR130VZ2ZLW' where id=20; -update noar ti set v3='DWQVRTFYPOB8ZTPBEKQ8J3YR130VZ2ZLW' where id=20; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='5W456K1N1MDUTNUXVYGTMOSM7F4OM4OMS' where id=21; -update noar ti set v0='5W456K1N1MDUTNUXVYGTMOSM7F4OM4OMS' where id=21; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='47T3ULSER9YHQR18PVVBGQ9UEJV5CK47V' where id=21; -update noar ti set v1='47T3ULSER9YHQR18PVVBGQ9UEJV5CK47V' where id=21; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='MHF1OT9LL8DYO4MIH4TET9JZVUSSYOV34' where id=21; -update noar ti set v2='MHF1OT9LL8DYO4MIH4TET9JZVUSSYOV34' where id=21; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='MI47BUFMW8RE0UUK84CNU0ST2NBSMYNU8' where id=21; -update noar ti set v3='MI47BUFMW8RE0UUK84CNU0ST2NBSMYNU8' where id=21; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='CK794DCXV3DJ807LN5MRA69RDSEGISSWH' where id=22; -update noar ti set v0='CK794DCXV3DJ807LN5MRA69RDSEGISSWH' where id=22; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='S14ZD8B01EAB5PHS6LV3DIPXD6RFLPAHO' where id=22; -update noar ti set v1='S14ZD8B01EAB5PHS6LV3DIPXD6RFLPAHO' where id=22; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='LHDMH1H8G4S1WW2HSOD1JFGDV8KFBPYE0' where id=22; -update noar ti set v2='LHDMH1H8G4S1WW2HSOD1JFGDV8KFBPYE0' where id=22; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='PGXO0ZDSYAIJMKHNX7O1O30HID1JSTIZ7' where id=22; -update noar ti set v3='PGXO0ZDSYAIJMKHNX7O1O30HID1JSTIZ7' where id=22; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='WVLICYCYR4S9ZULQ83EENNL4YGWC73HYF' where id=23; -update noar ti set v0='WVLICYCYR4S9ZULQ83EENNL4YGWC73HYF' where id=23; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='CB70NXN6B2QHKYOWDXJ2U5LL0UD1WWVNZ' where id=23; -update noar ti set v1='CB70NXN6B2QHKYOWDXJ2U5LL0UD1WWVNZ' where id=23; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='HPKTN3F4P62UENMPQDUMS9C2TMW2Y0AV2' where id=23; -update noar ti set v2='HPKTN3F4P62UENMPQDUMS9C2TMW2Y0AV2' where id=23; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='036NGPDY8WTTM5M35C2PSWAK1XL2J4O7V' where id=23; -update noar ti set v3='036NGPDY8WTTM5M35C2PSWAK1XL2J4O7V' where id=23; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='CFSKBV9QMMYMH5D1MI3BKXUYVDDGLG98E' where id=24; -update noar ti set v0='CFSKBV9QMMYMH5D1MI3BKXUYVDDGLG98E' where id=24; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='4CCX1OCX0CE3T8XZ96HA6VX6FGKPGPY96' where id=24; -update noar ti set v1='4CCX1OCX0CE3T8XZ96HA6VX6FGKPGPY96' where id=24; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='SIYRIZQX5AXVNRMVX5F0W3L6832E0K6H4' where id=24; -update noar ti set v2='SIYRIZQX5AXVNRMVX5F0W3L6832E0K6H4' where id=24; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='FX62E6T8XI4GDS00N6L79TXAY0F2BCF4S' where id=24; -update noar ti set v3='FX62E6T8XI4GDS00N6L79TXAY0F2BCF4S' where id=24; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='ST5L6MEOLSDA060YFHTP47S0I87QQB6L3' where id=25; -update noar ti set v0='ST5L6MEOLSDA060YFHTP47S0I87QQB6L3' where id=25; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='A091Z1Q9QJL4E5D2FLS27MYW8UUABCLF9' where id=25; -update noar ti set v1='A091Z1Q9QJL4E5D2FLS27MYW8UUABCLF9' where id=25; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='HYBQ7XV6HV0HYI3QCZYT4CUX38ZCN8S70' where id=25; -update noar ti set v2='HYBQ7XV6HV0HYI3QCZYT4CUX38ZCN8S70' where id=25; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='JNOLKOLVV4R72PCMLORCWWU7M1BG7BIZR' where id=25; -update noar ti set v3='JNOLKOLVV4R72PCMLORCWWU7M1BG7BIZR' where id=25; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='MD4DSLDI07LPA90H1XQNSV3TGM9LBXPWJ' where id=26; -update noar ti set v0='MD4DSLDI07LPA90H1XQNSV3TGM9LBXPWJ' where id=26; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='J3LCONXH4O9HQLI7DWYAAZ9GOGMZIO3P5' where id=26; -update noar ti set v1='J3LCONXH4O9HQLI7DWYAAZ9GOGMZIO3P5' where id=26; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='155FN4UEQD5QXM0ZWDHCVYWO1L4T7LYBE' where id=26; -update noar ti set v2='155FN4UEQD5QXM0ZWDHCVYWO1L4T7LYBE' where id=26; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='DJJ2DRL31ZAEFNQ1Q4MYUORS9X3OVLO2X' where id=26; -update noar ti set v3='DJJ2DRL31ZAEFNQ1Q4MYUORS9X3OVLO2X' where id=26; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='ESDC76FIG5DPRG0IJ97PGKB6K87U9WIWK' where id=27; -update noar ti set v0='ESDC76FIG5DPRG0IJ97PGKB6K87U9WIWK' where id=27; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='ELWR3BV7Y78Y61B2HVHPFO1K56H0RW866' where id=27; -update noar ti set v1='ELWR3BV7Y78Y61B2HVHPFO1K56H0RW866' where id=27; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='2ZJQRVPGMU71SAKDCOCU405S8QHI21O8T' where id=27; -update noar ti set v2='2ZJQRVPGMU71SAKDCOCU405S8QHI21O8T' where id=27; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='GKX9LBORKVFG9BL7IIKGPH4GOWZFXXCLE' where id=27; -update noar ti set v3='GKX9LBORKVFG9BL7IIKGPH4GOWZFXXCLE' where id=27; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='NX882U918NUAYDJRLLQF4WDCWPSEI23XK' where id=28; -update noar ti set v0='NX882U918NUAYDJRLLQF4WDCWPSEI23XK' where id=28; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='55IH4Q3ZA6SGR0UMVZITJHXN4N3BW92W0' where id=28; -update noar ti set v1='55IH4Q3ZA6SGR0UMVZITJHXN4N3BW92W0' where id=28; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='PBKRHDGVRKON2Z8JO7DD4C81BNG569KQ4' where id=28; -update noar ti set v2='PBKRHDGVRKON2Z8JO7DD4C81BNG569KQ4' where id=28; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='A1Y2OLPE36VRI9U678V7OCCSV75IEPQFL' where id=28; -update noar ti set v3='A1Y2OLPE36VRI9U678V7OCCSV75IEPQFL' where id=28; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='RGU4YM87704N645N1I0ME54LNJ9XOVS3X' where id=29; -update noar ti set v0='RGU4YM87704N645N1I0ME54LNJ9XOVS3X' where id=29; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='HNA2T6A8VWXR6WRJ9MY6YLSCVAQQXY3M7' where id=29; -update noar ti set v1='HNA2T6A8VWXR6WRJ9MY6YLSCVAQQXY3M7' where id=29; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='9ZES4AMD4RX4ZR6QR7OFG0BSGHMBH8883' where id=29; -update noar ti set v2='9ZES4AMD4RX4ZR6QR7OFG0BSGHMBH8883' where id=29; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='AEG2C7QKLAN9V1FGFXBDK3VHHQG20NOWJ' where id=29; -update noar ti set v3='AEG2C7QKLAN9V1FGFXBDK3VHHQG20NOWJ' where id=29; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='N1WGIZC6RP2DPM8HU5VCZD56JVGSCT4X1' where id=30; -update noar ti set v0='N1WGIZC6RP2DPM8HU5VCZD56JVGSCT4X1' where id=30; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='9RHMWTVFDF6NN44UTAQETOOOUAQ7LN65Q' where id=30; -update noar ti set v1='9RHMWTVFDF6NN44UTAQETOOOUAQ7LN65Q' where id=30; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='1C5XLYIPYJVT2K0GJH8I3GHWAKHURD193' where id=30; -update noar ti set v2='1C5XLYIPYJVT2K0GJH8I3GHWAKHURD193' where id=30; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='73YSFPFLAMB492LE0G12WGKWYILPZA9BS' where id=30; -update noar ti set v3='73YSFPFLAMB492LE0G12WGKWYILPZA9BS' where id=30; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='SXB26E99E82FGNP6Y7EIDN3PIDXEMQSLO' where id=31; -update noar ti set v0='SXB26E99E82FGNP6Y7EIDN3PIDXEMQSLO' where id=31; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='UR9A8MO1JR4HRQC3ILU47FI2RBGHSHJSA' where id=31; -update noar ti set v1='UR9A8MO1JR4HRQC3ILU47FI2RBGHSHJSA' where id=31; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='H6QL8DDX982E9ITL50L00XYTBGM0A77JC' where id=31; -update noar ti set v2='H6QL8DDX982E9ITL50L00XYTBGM0A77JC' where id=31; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='4GNP22WVLSQ4XWGZ5C9WEJ6XQ17O7FVFB' where id=31; -update noar ti set v3='4GNP22WVLSQ4XWGZ5C9WEJ6XQ17O7FVFB' where id=31; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='DRK4DE6NEW3L64L9IPJFWPMYS1UK4OTZW' where id=32; -update noar ti set v0='DRK4DE6NEW3L64L9IPJFWPMYS1UK4OTZW' where id=32; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='4390UJUYHQ3L8ZF61IQCJQCMD9749L5JI' where id=32; -update noar ti set v1='4390UJUYHQ3L8ZF61IQCJQCMD9749L5JI' where id=32; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='KZHVCPKBY0VKE4VL64LHEDUU6HZ7ZMQVT' where id=32; -update noar ti set v2='KZHVCPKBY0VKE4VL64LHEDUU6HZ7ZMQVT' where id=32; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='2RBUEST1JBBCSGRRA747QGH0SEWEYMT0U' where id=32; -update noar ti set v3='2RBUEST1JBBCSGRRA747QGH0SEWEYMT0U' where id=32; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='7RCZP79131SPLJCZWTELLCSM2D06HH4HS' where id=33; -update noar ti set v0='7RCZP79131SPLJCZWTELLCSM2D06HH4HS' where id=33; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='B6CK2P0D4Q356BAC43DWHSK5OJ8Y3HQZN' where id=33; -update noar ti set v1='B6CK2P0D4Q356BAC43DWHSK5OJ8Y3HQZN' where id=33; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='2F6RG5KMIUP336XER6IDE2AWEZ1FNH1T6' where id=33; -update noar ti set v2='2F6RG5KMIUP336XER6IDE2AWEZ1FNH1T6' where id=33; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='KRPW7E7Z1C7SZP1UN9IFVXFBKHF85YK53' where id=33; -update noar ti set v3='KRPW7E7Z1C7SZP1UN9IFVXFBKHF85YK53' where id=33; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='QNUNJBUZ1FK4MCZ23HHGAXOSEAXT0KR9W' where id=34; -update noar ti set v0='QNUNJBUZ1FK4MCZ23HHGAXOSEAXT0KR9W' where id=34; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='UY513WZ30POA6498F5LN1SF72OP5QFUUL' where id=34; -update noar ti set v1='UY513WZ30POA6498F5LN1SF72OP5QFUUL' where id=34; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='DKEFMEFDK98VY4S4RO0N5LNFWRN9FSZUV' where id=34; -update noar ti set v2='DKEFMEFDK98VY4S4RO0N5LNFWRN9FSZUV' where id=34; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='1JIMNYCI3DIYDUNAE3PGYRYDUNCKVPTBT' where id=34; -update noar ti set v3='1JIMNYCI3DIYDUNAE3PGYRYDUNCKVPTBT' where id=34; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='9ZR89KBUA2FOKG6TS070CCPVFTZIJN1I0' where id=35; -update noar ti set v0='9ZR89KBUA2FOKG6TS070CCPVFTZIJN1I0' where id=35; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='7D59AS2WW3XDXFGT47GIP697J8TVA743S' where id=35; -update noar ti set v1='7D59AS2WW3XDXFGT47GIP697J8TVA743S' where id=35; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='OQXN5LBC4DV58KNIVU921B8WSAOW451GI' where id=35; -update noar ti set v2='OQXN5LBC4DV58KNIVU921B8WSAOW451GI' where id=35; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='WGNH9I1TF7KKJ9O82PVHVAC5M98BQI8OG' where id=35; -update noar ti set v3='WGNH9I1TF7KKJ9O82PVHVAC5M98BQI8OG' where id=35; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='V2K6M004XBVTSTHX9C0GXFNY90FP3AF4W' where id=36; -update noar ti set v0='V2K6M004XBVTSTHX9C0GXFNY90FP3AF4W' where id=36; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='AHS1XOZXG81WIDW5D6ZZRML5Y1DLMYH2A' where id=36; -update noar ti set v1='AHS1XOZXG81WIDW5D6ZZRML5Y1DLMYH2A' where id=36; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='RYNTCSYP7WAYT02H9OMJ5JBOBETQEKVOK' where id=36; -update noar ti set v2='RYNTCSYP7WAYT02H9OMJ5JBOBETQEKVOK' where id=36; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='ZPZCJZQN6PMG5ZS5QN69OBVMTLFXRR8ZL' where id=36; -update noar ti set v3='ZPZCJZQN6PMG5ZS5QN69OBVMTLFXRR8ZL' where id=36; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='8IVANXGSTLQ3YTV1GIRDUR5HOVS1SEX9O' where id=37; -update noar ti set v0='8IVANXGSTLQ3YTV1GIRDUR5HOVS1SEX9O' where id=37; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='ONT0M1R9TLBHE6PAZ6FQQG5C32PS3T51G' where id=37; -update noar ti set v1='ONT0M1R9TLBHE6PAZ6FQQG5C32PS3T51G' where id=37; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='HT3WH7N2MAX6Q7TE3FGB42LFRYFQBGSAC' where id=37; -update noar ti set v2='HT3WH7N2MAX6Q7TE3FGB42LFRYFQBGSAC' where id=37; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='C8UIWZCW2LUS4S2TXLLDAE1N46OQZLETC' where id=37; -update noar ti set v3='C8UIWZCW2LUS4S2TXLLDAE1N46OQZLETC' where id=37; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='HSJ4DRGWMSRJ9ELKF8MTEO0JUOCTJFXJY' where id=38; -update noar ti set v0='HSJ4DRGWMSRJ9ELKF8MTEO0JUOCTJFXJY' where id=38; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='2T5AKG48718GP6082Y6DJLOPJ50QES0PN' where id=38; -update noar ti set v1='2T5AKG48718GP6082Y6DJLOPJ50QES0PN' where id=38; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='VAVBE7XGCPILUWCU6S5B2K0MEUHJTKEWO' where id=38; -update noar ti set v2='VAVBE7XGCPILUWCU6S5B2K0MEUHJTKEWO' where id=38; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='ZTJ0R4TK4L95TVAQXAPMR78PXDFMEB07E' where id=38; -update noar ti set v3='ZTJ0R4TK4L95TVAQXAPMR78PXDFMEB07E' where id=38; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='WGTN6HRVCAFU7WME0EQJE4RDX9TG8MI2N' where id=39; -update noar ti set v0='WGTN6HRVCAFU7WME0EQJE4RDX9TG8MI2N' where id=39; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='4GMDL9HSBRIJC9N73NSN4NHKMIKOPGFI1' where id=39; -update noar ti set v1='4GMDL9HSBRIJC9N73NSN4NHKMIKOPGFI1' where id=39; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='NAY0H6O3OZWM38GYA56N55SCWFC4VW4HG' where id=39; -update noar ti set v2='NAY0H6O3OZWM38GYA56N55SCWFC4VW4HG' where id=39; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='EAS4VE6TVICZN935H74PV87TSH89BZXCE' where id=39; -update noar ti set v3='EAS4VE6TVICZN935H74PV87TSH89BZXCE' where id=39; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='QX726B4678INQ678FWVTGX9WQUIC48QKK' where id=40; -update noar ti set v0='QX726B4678INQ678FWVTGX9WQUIC48QKK' where id=40; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='9459TT7K7N1MPKDFBYSIN0PAT1S9VWTFQ' where id=40; -update noar ti set v1='9459TT7K7N1MPKDFBYSIN0PAT1S9VWTFQ' where id=40; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='Q7W3AYPPLMMAX0DWWD8PR9DCM624DJSRV' where id=40; -update noar ti set v2='Q7W3AYPPLMMAX0DWWD8PR9DCM624DJSRV' where id=40; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='YQ5RFJ2ROQYRY7ARLGZ1RN5WHMBJOIG7S' where id=40; -update noar ti set v3='YQ5RFJ2ROQYRY7ARLGZ1RN5WHMBJOIG7S' where id=40; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='4LWS3REU2R5V12F63N5WE4MCP5SB0NPQA' where id=41; -update noar ti set v0='4LWS3REU2R5V12F63N5WE4MCP5SB0NPQA' where id=41; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='37DM7X8YVGETVCCLFVS6TL6SL33ZUYK6N' where id=41; -update noar ti set v1='37DM7X8YVGETVCCLFVS6TL6SL33ZUYK6N' where id=41; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='DFF00QDEEF22SQK0XA5A9G21F6GE0DKAT' where id=41; -update noar ti set v2='DFF00QDEEF22SQK0XA5A9G21F6GE0DKAT' where id=41; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='TI1H7LFTTWUBBTF9L62SS5SDTNHKRIMGV' where id=41; -update noar ti set v3='TI1H7LFTTWUBBTF9L62SS5SDTNHKRIMGV' where id=41; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='KPG0UO65554LAFUSSIFQ30ICFOQ06PXPA' where id=42; -update noar ti set v0='KPG0UO65554LAFUSSIFQ30ICFOQ06PXPA' where id=42; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='TEZFDX8D6EVATEZXY5RUP8TKZRADQK0GW' where id=42; -update noar ti set v1='TEZFDX8D6EVATEZXY5RUP8TKZRADQK0GW' where id=42; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='GQFCTJS98GHV3F26G7GK2PT5NSMMAA6CH' where id=42; -update noar ti set v2='GQFCTJS98GHV3F26G7GK2PT5NSMMAA6CH' where id=42; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='OC2W4Q38SZ65NJ6STUODVNZ2C02B3CSLD' where id=42; -update noar ti set v3='OC2W4Q38SZ65NJ6STUODVNZ2C02B3CSLD' where id=42; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='T27I57X77K6YCLUDI73JW7USXKFBJKA0F' where id=43; -update noar ti set v0='T27I57X77K6YCLUDI73JW7USXKFBJKA0F' where id=43; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='VA9YRPYO4GF4RXLWSLZ5JOXDJ5HGHMBKK' where id=43; -update noar ti set v1='VA9YRPYO4GF4RXLWSLZ5JOXDJ5HGHMBKK' where id=43; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='5LHZ7A46PJ8IABOPK3UVKTOHVMZA7J2EY' where id=43; -update noar ti set v2='5LHZ7A46PJ8IABOPK3UVKTOHVMZA7J2EY' where id=43; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='COLCOM6R1SETG64BKZ3B95SHB32DU8TRN' where id=43; -update noar ti set v3='COLCOM6R1SETG64BKZ3B95SHB32DU8TRN' where id=43; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='NSKD5FY2WQZG8YD8ZT5LKVRLCXYMFDBT8' where id=44; -update noar ti set v0='NSKD5FY2WQZG8YD8ZT5LKVRLCXYMFDBT8' where id=44; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='E8RN2RYRTDGG5FOWPR5CBJHXLQUUR157Y' where id=44; -update noar ti set v1='E8RN2RYRTDGG5FOWPR5CBJHXLQUUR157Y' where id=44; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='EPRU7R48RJWR6Y7DVA9WZMCTI0HVT9ORH' where id=44; -update noar ti set v2='EPRU7R48RJWR6Y7DVA9WZMCTI0HVT9ORH' where id=44; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='1812OQ1ATY0MJLNQQU3QMPKI7G4MJNSUS' where id=44; -update noar ti set v3='1812OQ1ATY0MJLNQQU3QMPKI7G4MJNSUS' where id=44; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='ZTDTZADNHTWY7BH2AGHAILRVYYE1R3H39' where id=45; -update noar ti set v0='ZTDTZADNHTWY7BH2AGHAILRVYYE1R3H39' where id=45; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='X1BCYWXUWODHYBPOAERYOQT1ARJ6RSD02' where id=45; -update noar ti set v1='X1BCYWXUWODHYBPOAERYOQT1ARJ6RSD02' where id=45; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='Y7UV22XZ7ZP5961REQUIT3JTOVHVLI0OD' where id=45; -update noar ti set v2='Y7UV22XZ7ZP5961REQUIT3JTOVHVLI0OD' where id=45; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='G7DY4RERWJDSAYOL521JZOCXSQDLEEOI0' where id=45; -update noar ti set v3='G7DY4RERWJDSAYOL521JZOCXSQDLEEOI0' where id=45; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='NA21FUNZ92D94NXIB5Z5Q3BK55YH59R04' where id=46; -update noar ti set v0='NA21FUNZ92D94NXIB5Z5Q3BK55YH59R04' where id=46; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='9TO9ABF3KTVGDLB1I0H7OPNY8JQDX5T7F' where id=46; -update noar ti set v1='9TO9ABF3KTVGDLB1I0H7OPNY8JQDX5T7F' where id=46; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='6V811OH844BBI7VG00FRSRNZNRBMGYWC7' where id=46; -update noar ti set v2='6V811OH844BBI7VG00FRSRNZNRBMGYWC7' where id=46; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='225PMJV2D2MIYEPR26A46N5NCN8RFBN5L' where id=46; -update noar ti set v3='225PMJV2D2MIYEPR26A46N5NCN8RFBN5L' where id=46; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='1SO0B8ZRX54P19QDN20SGPVNMACDFYV3K' where id=47; -update noar ti set v0='1SO0B8ZRX54P19QDN20SGPVNMACDFYV3K' where id=47; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='741RH13OZT17CH11BD2QLD8RCQDOCOCK6' where id=47; -update noar ti set v1='741RH13OZT17CH11BD2QLD8RCQDOCOCK6' where id=47; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='I2V0N77TSE742033A7AQK5Y8PYL82W6YE' where id=47; -update noar ti set v2='I2V0N77TSE742033A7AQK5Y8PYL82W6YE' where id=47; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='8YFXJH16U493FMJCSEPGNWN0FKQD0T7PQ' where id=47; -update noar ti set v3='8YFXJH16U493FMJCSEPGNWN0FKQD0T7PQ' where id=47; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='YBKAK07ZWAXOK8I8ZXORSASJH2V3HNIVY' where id=48; -update noar ti set v0='YBKAK07ZWAXOK8I8ZXORSASJH2V3HNIVY' where id=48; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='RBMVMXEXCT1P67PMTTH5VF1JT4W7DALMS' where id=48; -update noar ti set v1='RBMVMXEXCT1P67PMTTH5VF1JT4W7DALMS' where id=48; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='PWU2S2SW67CKD97SD5OQ3FFW4RBO9RSLN' where id=48; -update noar ti set v2='PWU2S2SW67CKD97SD5OQ3FFW4RBO9RSLN' where id=48; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='A0O0ZK57IQ6RKFGR2DB38QONLZ9H97FCH' where id=48; -update noar ti set v3='A0O0ZK57IQ6RKFGR2DB38QONLZ9H97FCH' where id=48; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='UD5E38ESCEKY62OO2S0T9BBYNYKSP6S1T' where id=49; -update noar ti set v0='UD5E38ESCEKY62OO2S0T9BBYNYKSP6S1T' where id=49; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='U6N91XTYZRKYEDEGCKRT2N54JNGTBWO3M' where id=49; -update noar ti set v1='U6N91XTYZRKYEDEGCKRT2N54JNGTBWO3M' where id=49; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='VKJMTDP90CZSYSRKX4P76Q5PZV4H9UMNV' where id=49; -update noar ti set v2='VKJMTDP90CZSYSRKX4P76Q5PZV4H9UMNV' where id=49; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='CNOFFG1MH0OU8AVJM10SIT87NXKW5H59N' where id=49; -update noar ti set v3='CNOFFG1MH0OU8AVJM10SIT87NXKW5H59N' where id=49; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='P812RC62SIBWQXGBCS605N9S6E18NRGV4' where id=50; -update noar ti set v0='P812RC62SIBWQXGBCS605N9S6E18NRGV4' where id=50; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='QHC8S5VT9AVA5YGTUAW3VLRKUGZVXGNVA' where id=50; -update noar ti set v1='QHC8S5VT9AVA5YGTUAW3VLRKUGZVXGNVA' where id=50; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='CJGT889VWMRR3VWAHHX3I9BQ883302YUV' where id=50; -update noar ti set v2='CJGT889VWMRR3VWAHHX3I9BQ883302YUV' where id=50; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='00O79WCJKM9P95GRHM83WO18PKZZ7ZL5D' where id=50; -update noar ti set v3='00O79WCJKM9P95GRHM83WO18PKZZ7ZL5D' where id=50; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='28OB8OSV18E0UPVBFBZKI42E2LY7EAVLF' where id=51; -update noar ti set v0='28OB8OSV18E0UPVBFBZKI42E2LY7EAVLF' where id=51; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='S8FSD4Y7IPA7IBII7DM6TYWY23HX03XGH' where id=51; -update noar ti set v1='S8FSD4Y7IPA7IBII7DM6TYWY23HX03XGH' where id=51; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='79H4LSLH9C31HPCSNMKZGMF0L9ZPTKUXS' where id=51; -update noar ti set v2='79H4LSLH9C31HPCSNMKZGMF0L9ZPTKUXS' where id=51; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='NYF45SOB5E9NUXCN1UHR2JFSX4FH5SBX8' where id=51; -update noar ti set v3='NYF45SOB5E9NUXCN1UHR2JFSX4FH5SBX8' where id=51; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='L5AGQXZZQSVF6V997ZY71MDEKXBHV6M20' where id=52; -update noar ti set v0='L5AGQXZZQSVF6V997ZY71MDEKXBHV6M20' where id=52; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='ZX0IME7TZE8YTKDMTTW25YOH8XJ5B33RM' where id=52; -update noar ti set v1='ZX0IME7TZE8YTKDMTTW25YOH8XJ5B33RM' where id=52; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='S2U46H5RPOPPSHGFRYSLANRA32XWEX1LN' where id=52; -update noar ti set v2='S2U46H5RPOPPSHGFRYSLANRA32XWEX1LN' where id=52; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='B4R4JBRO0KJ402ALGLT7AAO35QDDVI1JI' where id=52; -update noar ti set v3='B4R4JBRO0KJ402ALGLT7AAO35QDDVI1JI' where id=52; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='FX574IZ99KXXQG64AR38DMMIC7USB05SD' where id=53; -update noar ti set v0='FX574IZ99KXXQG64AR38DMMIC7USB05SD' where id=53; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='S4JNMCD91RH8WD5XIK8QGRZELGTF08M1B' where id=53; -update noar ti set v1='S4JNMCD91RH8WD5XIK8QGRZELGTF08M1B' where id=53; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='E3ZNO9XQ2NK7C4KO8NL9LGAJJDD7X8RE5' where id=53; -update noar ti set v2='E3ZNO9XQ2NK7C4KO8NL9LGAJJDD7X8RE5' where id=53; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='RBA9KV3R1UIG6V83R6LZ00OZ16BB0LZ7O' where id=53; -update noar ti set v3='RBA9KV3R1UIG6V83R6LZ00OZ16BB0LZ7O' where id=53; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='QPO42ZYUTZMH8M9C6G7MONKLA92Q95SBF' where id=54; -update noar ti set v0='QPO42ZYUTZMH8M9C6G7MONKLA92Q95SBF' where id=54; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='2MACK1ERN0WK90FFUNTT6006ICJ7D881N' where id=54; -update noar ti set v1='2MACK1ERN0WK90FFUNTT6006ICJ7D881N' where id=54; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='LND86O8W9AP505H336MHTBONZQB1OHZZQ' where id=54; -update noar ti set v2='LND86O8W9AP505H336MHTBONZQB1OHZZQ' where id=54; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='UXBQT496TN75ZEYTB8FVRQCI6AYQLQMSN' where id=54; -update noar ti set v3='UXBQT496TN75ZEYTB8FVRQCI6AYQLQMSN' where id=54; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='PLTWOC7H04M5FOTV6UFI1SIRJ6PC4NUYR' where id=55; -update noar ti set v0='PLTWOC7H04M5FOTV6UFI1SIRJ6PC4NUYR' where id=55; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='RGL8W2DNKNHWGPW4N2M1NDBOARH91T9AR' where id=55; -update noar ti set v1='RGL8W2DNKNHWGPW4N2M1NDBOARH91T9AR' where id=55; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='HCEZBXWCLOR3QP22Y30THHNPPB58AAL7G' where id=55; -update noar ti set v2='HCEZBXWCLOR3QP22Y30THHNPPB58AAL7G' where id=55; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='JD6LJXFQ1C0BEH34RBRQ6CMO83M5PFY9C' where id=55; -update noar ti set v3='JD6LJXFQ1C0BEH34RBRQ6CMO83M5PFY9C' where id=55; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='6F0PQ6PJ956Z52O0UCAZIVQHKYMKNWP7C' where id=56; -update noar ti set v0='6F0PQ6PJ956Z52O0UCAZIVQHKYMKNWP7C' where id=56; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='0TIMH0J9RYFPH70LLB9CEFAX7RP44Y97B' where id=56; -update noar ti set v1='0TIMH0J9RYFPH70LLB9CEFAX7RP44Y97B' where id=56; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='60ZNZMTADX9WTK0AMKCKVWGUBX66FGC30' where id=56; -update noar ti set v2='60ZNZMTADX9WTK0AMKCKVWGUBX66FGC30' where id=56; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='R5DNMFQ3ZZ4CCUENGPVB3KC3UK4TKI3OH' where id=56; -update noar ti set v3='R5DNMFQ3ZZ4CCUENGPVB3KC3UK4TKI3OH' where id=56; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='39V33N09U4CF4UHTPXH6YMJ3HZJXC2HMH' where id=57; -update noar ti set v0='39V33N09U4CF4UHTPXH6YMJ3HZJXC2HMH' where id=57; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='873FWSLK5N7NLC4EZ3RFI9VL6QKLVKEMK' where id=57; -update noar ti set v1='873FWSLK5N7NLC4EZ3RFI9VL6QKLVKEMK' where id=57; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='UXW5GE2L9YHO6BRWP30BK09Q0IM590DDR' where id=57; -update noar ti set v2='UXW5GE2L9YHO6BRWP30BK09Q0IM590DDR' where id=57; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='BYDXX4IV634E48M2XP2XT5S4X5Q6I6U9Y' where id=57; -update noar ti set v3='BYDXX4IV634E48M2XP2XT5S4X5Q6I6U9Y' where id=57; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='PNBTJLSJRIOR6C3S77NLL4DU12WQ9N93L' where id=58; -update noar ti set v0='PNBTJLSJRIOR6C3S77NLL4DU12WQ9N93L' where id=58; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='XZSLGUO1A5405C6U0NG2RB08ALAWV6X5R' where id=58; -update noar ti set v1='XZSLGUO1A5405C6U0NG2RB08ALAWV6X5R' where id=58; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='SMX3RD2OPJ00HSV3LOB7SXVB4S5ZSUZ5R' where id=58; -update noar ti set v2='SMX3RD2OPJ00HSV3LOB7SXVB4S5ZSUZ5R' where id=58; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='MVTRS71Q1QOZEXR7RMZ719XGS4PF0OIYD' where id=58; -update noar ti set v3='MVTRS71Q1QOZEXR7RMZ719XGS4PF0OIYD' where id=58; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='1IQXUCLU60IVP95D8CTTJ84LJBKUP5281' where id=59; -update noar ti set v0='1IQXUCLU60IVP95D8CTTJ84LJBKUP5281' where id=59; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='EVU1YYQ5I93N40T3GSHEMAXINU1OLI6DF' where id=59; -update noar ti set v1='EVU1YYQ5I93N40T3GSHEMAXINU1OLI6DF' where id=59; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='6FXAWIA7W9YOAUFL8PQ7ACUGK2UEVY5YD' where id=59; -update noar ti set v2='6FXAWIA7W9YOAUFL8PQ7ACUGK2UEVY5YD' where id=59; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='DJI5LP9SH2QOIZXQX82OZO0VPE5B8MM63' where id=59; -update noar ti set v3='DJI5LP9SH2QOIZXQX82OZO0VPE5B8MM63' where id=59; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='ZQBAJG3TNI7PHWE3APHMSVCWYIQKIB7D5' where id=60; -update noar ti set v0='ZQBAJG3TNI7PHWE3APHMSVCWYIQKIB7D5' where id=60; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='LENGXXXH8LB0V1C11YLSNJV4P4GDRX886' where id=60; -update noar ti set v1='LENGXXXH8LB0V1C11YLSNJV4P4GDRX886' where id=60; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='AI5HP3552ZV9WOAUCYQFSCRHO2MONZDJ0' where id=60; -update noar ti set v2='AI5HP3552ZV9WOAUCYQFSCRHO2MONZDJ0' where id=60; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='XH4Y1FGRQVYJ4KUL68JXK4AQPPO8WQOVF' where id=60; -update noar ti set v3='XH4Y1FGRQVYJ4KUL68JXK4AQPPO8WQOVF' where id=60; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='6P0EDLNPK2ZUHIP4X6DOQ9ZI23RD88K7O' where id=61; -update noar ti set v0='6P0EDLNPK2ZUHIP4X6DOQ9ZI23RD88K7O' where id=61; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='4HQ62BOQT579T1CVOYP0SKA2UPLLU2QTD' where id=61; -update noar ti set v1='4HQ62BOQT579T1CVOYP0SKA2UPLLU2QTD' where id=61; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='J1U9LJA18760AZQ5SHUUJE1QNBUCM0XWL' where id=61; -update noar ti set v2='J1U9LJA18760AZQ5SHUUJE1QNBUCM0XWL' where id=61; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='IK9RSG1SF9VQTHVAGQPHJK5NHSNDEI004' where id=61; -update noar ti set v3='IK9RSG1SF9VQTHVAGQPHJK5NHSNDEI004' where id=61; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='EULSTNX20UWMKI41Y50A3IJS342IIN7AS' where id=62; -update noar ti set v0='EULSTNX20UWMKI41Y50A3IJS342IIN7AS' where id=62; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='MF5I064OXYNUBH4P6W5BQ1UJYMVGTP1GI' where id=62; -update noar ti set v1='MF5I064OXYNUBH4P6W5BQ1UJYMVGTP1GI' where id=62; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='IB28RE569YI4KX6Q2P19IY8KXTG5RLAZ3' where id=62; -update noar ti set v2='IB28RE569YI4KX6Q2P19IY8KXTG5RLAZ3' where id=62; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='31WVQ919FJA3HTPLNENVLZNDK18QFE6P6' where id=62; -update noar ti set v3='31WVQ919FJA3HTPLNENVLZNDK18QFE6P6' where id=62; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='VSAD6EYW20EBWUFG0MG5D9VFHPYU1KTBQ' where id=63; -update noar ti set v0='VSAD6EYW20EBWUFG0MG5D9VFHPYU1KTBQ' where id=63; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='KPTMK64O8P5BOGYKV703F5606HD7I4GU5' where id=63; -update noar ti set v1='KPTMK64O8P5BOGYKV703F5606HD7I4GU5' where id=63; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='ONYEURNEZT7FZ5A4NT4TLI6MC3VRXFROH' where id=63; -update noar ti set v2='ONYEURNEZT7FZ5A4NT4TLI6MC3VRXFROH' where id=63; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='U2F2GD4J0QGRMGMHNFVY7XAK3TOPY02X9' where id=63; -update noar ti set v3='U2F2GD4J0QGRMGMHNFVY7XAK3TOPY02X9' where id=63; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='0BQBY1BZ9K9L9STEGRS3S2NVCMCDFGV4K' where id=64; -update noar ti set v0='0BQBY1BZ9K9L9STEGRS3S2NVCMCDFGV4K' where id=64; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='2EO5P7GTH7YPASLBO25RG82G89XRPVJIK' where id=64; -update noar ti set v1='2EO5P7GTH7YPASLBO25RG82G89XRPVJIK' where id=64; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='94BNSO0BB09REGYUUOHIAD0FFXJY61TX4' where id=64; -update noar ti set v2='94BNSO0BB09REGYUUOHIAD0FFXJY61TX4' where id=64; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='HAHN3E7E855AYLHEVJFCSEWFW9L7KTKCH' where id=64; -update noar ti set v3='HAHN3E7E855AYLHEVJFCSEWFW9L7KTKCH' where id=64; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='EJRWHRZX9FR187T5M16SKH78LP7AAC7PD' where id=65; -update noar ti set v0='EJRWHRZX9FR187T5M16SKH78LP7AAC7PD' where id=65; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='6TT6QVN9FF5HJ1DXUXXLZ711QYC7SZCOZ' where id=65; -update noar ti set v1='6TT6QVN9FF5HJ1DXUXXLZ711QYC7SZCOZ' where id=65; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='7ZLQM70K04JXDLG7QR7H0KM47V3UN3MUX' where id=65; -update noar ti set v2='7ZLQM70K04JXDLG7QR7H0KM47V3UN3MUX' where id=65; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='2B2AM2WJ34QZJP7HWYDQO2LYPYNQVLOU9' where id=65; -update noar ti set v3='2B2AM2WJ34QZJP7HWYDQO2LYPYNQVLOU9' where id=65; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='Q154SZTETB5MW5GB6FRVBHVJ5N5V0S3AH' where id=66; -update noar ti set v0='Q154SZTETB5MW5GB6FRVBHVJ5N5V0S3AH' where id=66; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='GE2RXV6R22V95VXPJCQFSG82AYQDVZ1MF' where id=66; -update noar ti set v1='GE2RXV6R22V95VXPJCQFSG82AYQDVZ1MF' where id=66; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='PRUZSRQ16GCVEFGFQIYL6JFZ2Z2Y7CM80' where id=66; -update noar ti set v2='PRUZSRQ16GCVEFGFQIYL6JFZ2Z2Y7CM80' where id=66; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='0VXA0ZYG1MJ5PBP9ERCCRC6CFAO6RDY4T' where id=66; -update noar ti set v3='0VXA0ZYG1MJ5PBP9ERCCRC6CFAO6RDY4T' where id=66; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='YHYL5F5BYVLI3DNWAOJCPJ0P18QHIXRHA' where id=67; -update noar ti set v0='YHYL5F5BYVLI3DNWAOJCPJ0P18QHIXRHA' where id=67; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='JP7DDGYM7BK24EDL8AMRTXOQ3NKFGMY2V' where id=67; -update noar ti set v1='JP7DDGYM7BK24EDL8AMRTXOQ3NKFGMY2V' where id=67; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='37IJ7WD0KGCRYHS2KWCYRVKOYHJ9UQV6I' where id=67; -update noar ti set v2='37IJ7WD0KGCRYHS2KWCYRVKOYHJ9UQV6I' where id=67; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='3X8VDRPC97AAXOH7Q4T6KNG4NJRZ57W10' where id=67; -update noar ti set v3='3X8VDRPC97AAXOH7Q4T6KNG4NJRZ57W10' where id=67; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='509QVRTDDCUAPI4OQPPUXDSDQWLG558N2' where id=68; -update noar ti set v0='509QVRTDDCUAPI4OQPPUXDSDQWLG558N2' where id=68; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='7FZE6K86C7VC1VB31RZ31GS3XIALY4MUU' where id=68; -update noar ti set v1='7FZE6K86C7VC1VB31RZ31GS3XIALY4MUU' where id=68; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='M7WKQ44BRJTNJE1P3QG17FWVB7QY67NR0' where id=68; -update noar ti set v2='M7WKQ44BRJTNJE1P3QG17FWVB7QY67NR0' where id=68; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='UHBMO711Z9NXMP0PQT03IRGRE4H6F4Y0K' where id=68; -update noar ti set v3='UHBMO711Z9NXMP0PQT03IRGRE4H6F4Y0K' where id=68; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='YB2JABZV2A4UH2IRH4K5RAIKM669F6O4F' where id=69; -update noar ti set v0='YB2JABZV2A4UH2IRH4K5RAIKM669F6O4F' where id=69; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='ELON3CUX7WSO9AOLU0AE1LSDDQQDW5QNI' where id=69; -update noar ti set v1='ELON3CUX7WSO9AOLU0AE1LSDDQQDW5QNI' where id=69; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='GUA3PW824YE0STAYONF6YCZG7NZ6Y35RF' where id=69; -update noar ti set v2='GUA3PW824YE0STAYONF6YCZG7NZ6Y35RF' where id=69; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='R06CG6JLVBCVPTMGSCE6X3NHQEMME5RDA' where id=69; -update noar ti set v3='R06CG6JLVBCVPTMGSCE6X3NHQEMME5RDA' where id=69; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='8QFVPBOJZ82ADRDFS2QQS469ESDK74DEC' where id=70; -update noar ti set v0='8QFVPBOJZ82ADRDFS2QQS469ESDK74DEC' where id=70; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='C0FIKKI4OOACGSTF39JIVGNTD1YBXTPYB' where id=70; -update noar ti set v1='C0FIKKI4OOACGSTF39JIVGNTD1YBXTPYB' where id=70; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='MB1QU94AKC723WWK4WM1QGA8M1W2XYJF1' where id=70; -update noar ti set v2='MB1QU94AKC723WWK4WM1QGA8M1W2XYJF1' where id=70; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='DV1O1M3HI97UNCKF3C57VPMMJTUW9UTAV' where id=70; -update noar ti set v3='DV1O1M3HI97UNCKF3C57VPMMJTUW9UTAV' where id=70; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='4UO38QRD4VS15AATHXRZE89LE7KAA4K4A' where id=71; -update noar ti set v0='4UO38QRD4VS15AATHXRZE89LE7KAA4K4A' where id=71; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='H9EVDRRI7VUK6R61RWFNZKTQW485PTL3G' where id=71; -update noar ti set v1='H9EVDRRI7VUK6R61RWFNZKTQW485PTL3G' where id=71; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='A01XKRUP4G4HCIM0HMKC8YRFE0OJ2ML32' where id=71; -update noar ti set v2='A01XKRUP4G4HCIM0HMKC8YRFE0OJ2ML32' where id=71; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='4E3VF6JL4U6I2PY8A8PN0Z6LIJYFVT08P' where id=71; -update noar ti set v3='4E3VF6JL4U6I2PY8A8PN0Z6LIJYFVT08P' where id=71; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='WFIKIYMFOEQL0OSKVVMSJ5J6MVD3UT5O0' where id=72; -update noar ti set v0='WFIKIYMFOEQL0OSKVVMSJ5J6MVD3UT5O0' where id=72; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='UUYHQAOMT8LCLHU8BHXA29FJJJ0MZT8B9' where id=72; -update noar ti set v1='UUYHQAOMT8LCLHU8BHXA29FJJJ0MZT8B9' where id=72; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='E4QPJW1146OKN135FBM5XRIIKX6OW433W' where id=72; -update noar ti set v2='E4QPJW1146OKN135FBM5XRIIKX6OW433W' where id=72; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='BLDOKLY31IDY69EV5TC2JJ7GQYU5FZ26L' where id=72; -update noar ti set v3='BLDOKLY31IDY69EV5TC2JJ7GQYU5FZ26L' where id=72; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='Z5ZWQ7I5E4U4EQ21FO1C7TOGL6YXMAEZP' where id=73; -update noar ti set v0='Z5ZWQ7I5E4U4EQ21FO1C7TOGL6YXMAEZP' where id=73; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='U8RDOIQ951TXCLVWX1ERKXE5C5SJS44QI' where id=73; -update noar ti set v1='U8RDOIQ951TXCLVWX1ERKXE5C5SJS44QI' where id=73; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='325BHUSVCW6G9CDVKGIYJ6CP347LT7C2S' where id=73; -update noar ti set v2='325BHUSVCW6G9CDVKGIYJ6CP347LT7C2S' where id=73; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='3K59CJGTA9DM38KZL12IIRL645WDCUOF6' where id=73; -update noar ti set v3='3K59CJGTA9DM38KZL12IIRL645WDCUOF6' where id=73; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='U1EG1W31O5VM6XSK544KKZJRV5OZUSL1A' where id=74; -update noar ti set v0='U1EG1W31O5VM6XSK544KKZJRV5OZUSL1A' where id=74; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='NKN3WOH2HDBRKO2TDXJP5VE6MFTE6NQIK' where id=74; -update noar ti set v1='NKN3WOH2HDBRKO2TDXJP5VE6MFTE6NQIK' where id=74; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='MXC1QZSIHR6TD5YKCBTC6GCOQ2WDV4TA6' where id=74; -update noar ti set v2='MXC1QZSIHR6TD5YKCBTC6GCOQ2WDV4TA6' where id=74; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='LLGYBP5VLQSDZMXBB61RR0JQ1IANZUY9E' where id=74; -update noar ti set v3='LLGYBP5VLQSDZMXBB61RR0JQ1IANZUY9E' where id=74; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='6Z77X7P2SJNJ8A2Z4UQVDTGH2TXU2ESOD' where id=75; -update noar ti set v0='6Z77X7P2SJNJ8A2Z4UQVDTGH2TXU2ESOD' where id=75; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='0NGGSYR67BU1EHKG53KR7610C4YNA22SJ' where id=75; -update noar ti set v1='0NGGSYR67BU1EHKG53KR7610C4YNA22SJ' where id=75; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='JO40KAT463ZSC8MUTKREQORNAHIIK1HW8' where id=75; -update noar ti set v2='JO40KAT463ZSC8MUTKREQORNAHIIK1HW8' where id=75; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='LFI92CC2PSZPKMTKY3D10LTZWHJSHD4HM' where id=75; -update noar ti set v3='LFI92CC2PSZPKMTKY3D10LTZWHJSHD4HM' where id=75; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='H52H2Q8NQJO6UKXPX9TXM9EAJ12AVNEJ0' where id=76; -update noar ti set v0='H52H2Q8NQJO6UKXPX9TXM9EAJ12AVNEJ0' where id=76; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='Y1CZZVYK7MMZDDFNSDUP3OU01ZREMBD04' where id=76; -update noar ti set v1='Y1CZZVYK7MMZDDFNSDUP3OU01ZREMBD04' where id=76; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='J2LUUHTJQVC8EDGS7I3U159ZYL6LQ7SQ5' where id=76; -update noar ti set v2='J2LUUHTJQVC8EDGS7I3U159ZYL6LQ7SQ5' where id=76; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='E153B33MMB10WI8191FIYYWR1MD132US4' where id=76; -update noar ti set v3='E153B33MMB10WI8191FIYYWR1MD132US4' where id=76; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='DT2FB9CHFYUKX1WZEGJSTOA8DSRGLINXS' where id=77; -update noar ti set v0='DT2FB9CHFYUKX1WZEGJSTOA8DSRGLINXS' where id=77; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='K47ZCMG32O8TDMXIT4ZZVU3WUR5CK6281' where id=77; -update noar ti set v1='K47ZCMG32O8TDMXIT4ZZVU3WUR5CK6281' where id=77; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='E3MY4ZJDE9FRI845QX7L1JKE16RAOPB99' where id=77; -update noar ti set v2='E3MY4ZJDE9FRI845QX7L1JKE16RAOPB99' where id=77; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='8KIQVK1LIWNCEJOJFUJNRL3XAQCF6KQ5K' where id=77; -update noar ti set v3='8KIQVK1LIWNCEJOJFUJNRL3XAQCF6KQ5K' where id=77; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='GAUR2AKOVDS68JCYAUA27J3MEOLTT4NXD' where id=78; -update noar ti set v0='GAUR2AKOVDS68JCYAUA27J3MEOLTT4NXD' where id=78; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='WCU7F9Q0RH1IMVRYF9U1LCEQ0L50FE1CH' where id=78; -update noar ti set v1='WCU7F9Q0RH1IMVRYF9U1LCEQ0L50FE1CH' where id=78; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='L22IR67BLXQABI6DMMS5L1QMQDLFM05NH' where id=78; -update noar ti set v2='L22IR67BLXQABI6DMMS5L1QMQDLFM05NH' where id=78; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='OF514U1W2T1PULX5F19TST16ISLX261VM' where id=78; -update noar ti set v3='OF514U1W2T1PULX5F19TST16ISLX261VM' where id=78; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='FZU198AH61GTW7180NA2LFNSQW2SCVEA6' where id=79; -update noar ti set v0='FZU198AH61GTW7180NA2LFNSQW2SCVEA6' where id=79; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='7TUL6I09XZU7RP79CZDO2VLW5A8ETL695' where id=79; -update noar ti set v1='7TUL6I09XZU7RP79CZDO2VLW5A8ETL695' where id=79; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='L9D174CXNLVJW1FLYZER42YFERA5G33WO' where id=79; -update noar ti set v2='L9D174CXNLVJW1FLYZER42YFERA5G33WO' where id=79; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='V9D1TIRFVT56BXONELNKX0DZ476TY0BG9' where id=79; -update noar ti set v3='V9D1TIRFVT56BXONELNKX0DZ476TY0BG9' where id=79; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='76MITPR19HDDFNXEVC3R1QA6FCN50STKQ' where id=80; -update noar ti set v0='76MITPR19HDDFNXEVC3R1QA6FCN50STKQ' where id=80; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='5I24FSLVFP2WQDG3AQG1QHFWW08YPLD2U' where id=80; -update noar ti set v1='5I24FSLVFP2WQDG3AQG1QHFWW08YPLD2U' where id=80; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='0J0SKPWU530OVKZGJEZ8SCQ2I472EZ188' where id=80; -update noar ti set v2='0J0SKPWU530OVKZGJEZ8SCQ2I472EZ188' where id=80; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='0CV0ZOCN649DHA2VUVYJNBVQ43H62A1Z1' where id=80; -update noar ti set v3='0CV0ZOCN649DHA2VUVYJNBVQ43H62A1Z1' where id=80; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='8W9QWDO0V4HISTFSJ1Z3O0BEKHN5G6R1Z' where id=81; -update noar ti set v0='8W9QWDO0V4HISTFSJ1Z3O0BEKHN5G6R1Z' where id=81; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='93T7Z53MIR1EP02R7SOMTSEB12LS666NZ' where id=81; -update noar ti set v1='93T7Z53MIR1EP02R7SOMTSEB12LS666NZ' where id=81; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='E4YHBTUJAU83094D1Z0BCP2M4154EEPBF' where id=81; -update noar ti set v2='E4YHBTUJAU83094D1Z0BCP2M4154EEPBF' where id=81; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='2BGYRT4HGEADERD3AL8B4OBXKJUT31N88' where id=81; -update noar ti set v3='2BGYRT4HGEADERD3AL8B4OBXKJUT31N88' where id=81; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='VAMNISNLQ3PG37VIRL7AGZ45ADSWG20RP' where id=82; -update noar ti set v0='VAMNISNLQ3PG37VIRL7AGZ45ADSWG20RP' where id=82; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='R9KZX21ALTSPL2CQVQO1LJB9CRO88GOC1' where id=82; -update noar ti set v1='R9KZX21ALTSPL2CQVQO1LJB9CRO88GOC1' where id=82; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='GS8XUCBZ64ECI341QXC7638DQNYS9G977' where id=82; -update noar ti set v2='GS8XUCBZ64ECI341QXC7638DQNYS9G977' where id=82; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='ZDAT2P3X8IF5R1L52CEENJKWDLQA0G0AV' where id=82; -update noar ti set v3='ZDAT2P3X8IF5R1L52CEENJKWDLQA0G0AV' where id=82; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='71AX43MZ4ZAGC2HX30BITFS7SXOU7IXNT' where id=83; -update noar ti set v0='71AX43MZ4ZAGC2HX30BITFS7SXOU7IXNT' where id=83; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='0ELCJ3MSUGGZFQA4IIGWRQ3W7LTAML82G' where id=83; -update noar ti set v1='0ELCJ3MSUGGZFQA4IIGWRQ3W7LTAML82G' where id=83; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='VPMVK8QYNB300TILT3KX3UA034TDBR5S7' where id=83; -update noar ti set v2='VPMVK8QYNB300TILT3KX3UA034TDBR5S7' where id=83; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='8AG9QUIWP3348C4AX4FTSAOH2AOZ8N5GK' where id=83; -update noar ti set v3='8AG9QUIWP3348C4AX4FTSAOH2AOZ8N5GK' where id=83; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='2523J3T4J6YVYNGV9AYJ0Z9K9II0LJA8O' where id=84; -update noar ti set v0='2523J3T4J6YVYNGV9AYJ0Z9K9II0LJA8O' where id=84; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='DN3ZS6W6EDU1N8P19WCNU3SCYYOVWA7FG' where id=84; -update noar ti set v1='DN3ZS6W6EDU1N8P19WCNU3SCYYOVWA7FG' where id=84; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='2WI19INSY619HGY5A6P7NYDJ35OJKDR2D' where id=84; -update noar ti set v2='2WI19INSY619HGY5A6P7NYDJ35OJKDR2D' where id=84; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='DFBH97AVHBXZR6G7YYCE7NOJEOHY03OOR' where id=84; -update noar ti set v3='DFBH97AVHBXZR6G7YYCE7NOJEOHY03OOR' where id=84; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='HRJTQI6QM6W93IWKFXVEMHZILM7C51BVI' where id=85; -update noar ti set v0='HRJTQI6QM6W93IWKFXVEMHZILM7C51BVI' where id=85; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='9ETTI4T735T047AQLFXZ9V0QEBUM4Q3O8' where id=85; -update noar ti set v1='9ETTI4T735T047AQLFXZ9V0QEBUM4Q3O8' where id=85; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='MRN1XW2RQRDV56TB83GR6YY1G0OKPDH51' where id=85; -update noar ti set v2='MRN1XW2RQRDV56TB83GR6YY1G0OKPDH51' where id=85; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='7X1360SOJ83FW8CQJ0PX3REUANSSHEK6C' where id=85; -update noar ti set v3='7X1360SOJ83FW8CQJ0PX3REUANSSHEK6C' where id=85; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='JKCII8RC5G6ZFO5QBTZNQVYJQL9VDLWUM' where id=86; -update noar ti set v0='JKCII8RC5G6ZFO5QBTZNQVYJQL9VDLWUM' where id=86; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='LAB459CIQW4TF2NF2GROH28MIA1BSPODT' where id=86; -update noar ti set v1='LAB459CIQW4TF2NF2GROH28MIA1BSPODT' where id=86; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='L550EWTDOV3BJ0ZQGB8Z8L3WLCKGRQVZQ' where id=86; -update noar ti set v2='L550EWTDOV3BJ0ZQGB8Z8L3WLCKGRQVZQ' where id=86; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='030Y45DZ5LEQ03R1GXH6MJ4HBMTI1Q2SP' where id=86; -update noar ti set v3='030Y45DZ5LEQ03R1GXH6MJ4HBMTI1Q2SP' where id=86; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='Q8NF6I7AUI9Q686O4G15FBOOSEO8S9GKA' where id=87; -update noar ti set v0='Q8NF6I7AUI9Q686O4G15FBOOSEO8S9GKA' where id=87; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='1YGD1P5UV16JPPX3EQPEBMYCF5O2TMCKE' where id=87; -update noar ti set v1='1YGD1P5UV16JPPX3EQPEBMYCF5O2TMCKE' where id=87; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='F8OPSNADZEV43HMHGGPTP52QCS23096XX' where id=87; -update noar ti set v2='F8OPSNADZEV43HMHGGPTP52QCS23096XX' where id=87; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='CFJ4E3ILWHLEPZ26HHPKK4KY6RMMSDYUL' where id=87; -update noar ti set v3='CFJ4E3ILWHLEPZ26HHPKK4KY6RMMSDYUL' where id=87; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='4D52XWH2ZEB6Y2Z241UKZTR3YNI66PJLN' where id=88; -update noar ti set v0='4D52XWH2ZEB6Y2Z241UKZTR3YNI66PJLN' where id=88; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='THIISDQDZM5BOTL8RLTP4ZK9IYS3QS5TI' where id=88; -update noar ti set v1='THIISDQDZM5BOTL8RLTP4ZK9IYS3QS5TI' where id=88; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='820G35HO8VW0PKOGKWYKKO83HV29XIGNH' where id=88; -update noar ti set v2='820G35HO8VW0PKOGKWYKKO83HV29XIGNH' where id=88; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='L29KEVNWE4JHO8EZJXTZ79PTYE4TIZMIS' where id=88; -update noar ti set v3='L29KEVNWE4JHO8EZJXTZ79PTYE4TIZMIS' where id=88; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='1J5JXKMCH0FNWSRJ5JK575CZ0FR5HSV6M' where id=89; -update noar ti set v0='1J5JXKMCH0FNWSRJ5JK575CZ0FR5HSV6M' where id=89; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='38GYOGLUYPSTV8N4JO4D3MWJZ87BX4NDT' where id=89; -update noar ti set v1='38GYOGLUYPSTV8N4JO4D3MWJZ87BX4NDT' where id=89; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='6LYHDG61J75S96LURZ1QFPQPCG06Z2EOA' where id=89; -update noar ti set v2='6LYHDG61J75S96LURZ1QFPQPCG06Z2EOA' where id=89; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='LPW74VWXSOJH8YTSIPUMYGJA049P8P5UC' where id=89; -update noar ti set v3='LPW74VWXSOJH8YTSIPUMYGJA049P8P5UC' where id=89; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='COTJVYSUNNOU5XPFVBNHH0DMFNND8KQEY' where id=90; -update noar ti set v0='COTJVYSUNNOU5XPFVBNHH0DMFNND8KQEY' where id=90; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='RILPDL5BCFP1BH6G5O16VSO99N5ROH823' where id=90; -update noar ti set v1='RILPDL5BCFP1BH6G5O16VSO99N5ROH823' where id=90; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='FOYA2IWCZSND8J8LQKVXTJGZBKWRSNMRM' where id=90; -update noar ti set v2='FOYA2IWCZSND8J8LQKVXTJGZBKWRSNMRM' where id=90; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='9NX048130G536AR4Z5TGXLF048RL2B0BQ' where id=90; -update noar ti set v3='9NX048130G536AR4Z5TGXLF048RL2B0BQ' where id=90; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='5A0OKTUYFYY0REBNPA1DFQPD3WE066NH8' where id=91; -update noar ti set v0='5A0OKTUYFYY0REBNPA1DFQPD3WE066NH8' where id=91; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='M7YKAFBYA12WJ00L0T1KC060B263IRLU9' where id=91; -update noar ti set v1='M7YKAFBYA12WJ00L0T1KC060B263IRLU9' where id=91; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='RVNGMEKJ0GZJYR03MBOABN1KVCFHITH2S' where id=91; -update noar ti set v2='RVNGMEKJ0GZJYR03MBOABN1KVCFHITH2S' where id=91; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='7HU7DGM71M83XMAGJZD5BKOFUXW1ZLDX5' where id=91; -update noar ti set v3='7HU7DGM71M83XMAGJZD5BKOFUXW1ZLDX5' where id=91; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='62RVRTD2TILSQ1FIAK5445N095UB9R6L2' where id=92; -update noar ti set v0='62RVRTD2TILSQ1FIAK5445N095UB9R6L2' where id=92; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='3Z7YXT9ICT3PG2LVDTN5QSFYABGEETX0I' where id=92; -update noar ti set v1='3Z7YXT9ICT3PG2LVDTN5QSFYABGEETX0I' where id=92; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='967X07WO4V9J8G7YKA3KIIPNFBF784Y12' where id=92; -update noar ti set v2='967X07WO4V9J8G7YKA3KIIPNFBF784Y12' where id=92; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='0IGLNWBAVAHS4RAVIE6LJ6D2CVKY48DCZ' where id=92; -update noar ti set v3='0IGLNWBAVAHS4RAVIE6LJ6D2CVKY48DCZ' where id=92; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='C0U0C8KU3U6HCWSL8DFU4IBYQAK2QUP0J' where id=93; -update noar ti set v0='C0U0C8KU3U6HCWSL8DFU4IBYQAK2QUP0J' where id=93; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='QJ1PETVEJGCXZJ06ZGVI4TCVI64DMJXZE' where id=93; -update noar ti set v1='QJ1PETVEJGCXZJ06ZGVI4TCVI64DMJXZE' where id=93; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='7XA1KVO1SENCAM9C8H2PVFSKSLEFK3MDX' where id=93; -update noar ti set v2='7XA1KVO1SENCAM9C8H2PVFSKSLEFK3MDX' where id=93; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='LX94SJ3GZ2ROSOG87CHXE8Y4HMMJQFO5R' where id=93; -update noar ti set v3='LX94SJ3GZ2ROSOG87CHXE8Y4HMMJQFO5R' where id=93; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='CR5FS516EEC4FJW0TT2QF58HN21FZ0ASB' where id=94; -update noar ti set v0='CR5FS516EEC4FJW0TT2QF58HN21FZ0ASB' where id=94; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='NL6SYNS3B1MQI3UI81Y2V5RJOELZVXB0L' where id=94; -update noar ti set v1='NL6SYNS3B1MQI3UI81Y2V5RJOELZVXB0L' where id=94; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='ES2BMV466W9IR49HHWSD84QD9C5K1CZFA' where id=94; -update noar ti set v2='ES2BMV466W9IR49HHWSD84QD9C5K1CZFA' where id=94; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='MZAZ1049ZCXKM251UD33KATM0K24X45HV' where id=94; -update noar ti set v3='MZAZ1049ZCXKM251UD33KATM0K24X45HV' where id=94; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='FFTEM9NP7KAGILDCFDXNNJ3GNGL332G9G' where id=95; -update noar ti set v0='FFTEM9NP7KAGILDCFDXNNJ3GNGL332G9G' where id=95; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='RWWMHJ4SGI66H1TR7M2X3T2FP3X592S1B' where id=95; -update noar ti set v1='RWWMHJ4SGI66H1TR7M2X3T2FP3X592S1B' where id=95; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='N58JJI6J9OA5SGQWI7ZBWMZ83IPJH2UVT' where id=95; -update noar ti set v2='N58JJI6J9OA5SGQWI7ZBWMZ83IPJH2UVT' where id=95; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='T9PD6HENPF61KZ6DD0WJWQ2B3SHHHRFND' where id=95; -update noar ti set v3='T9PD6HENPF61KZ6DD0WJWQ2B3SHHHRFND' where id=95; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='UMCI75NEY2L860S6VKTKV0OH3TAE8PYRS' where id=96; -update noar ti set v0='UMCI75NEY2L860S6VKTKV0OH3TAE8PYRS' where id=96; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='9SUKTBTF1K8G2ATHFTRJV73RFU7POTY8D' where id=96; -update noar ti set v1='9SUKTBTF1K8G2ATHFTRJV73RFU7POTY8D' where id=96; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='WSU1EF52PZHNTILLBN5K2URGBVWYQ1C2L' where id=96; -update noar ti set v2='WSU1EF52PZHNTILLBN5K2URGBVWYQ1C2L' where id=96; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='7P8L8D7A48BHQFB2UTPK1OCHMHI052LCD' where id=96; -update noar ti set v3='7P8L8D7A48BHQFB2UTPK1OCHMHI052LCD' where id=96; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='UWKMNL0870KPSF7GCMSRY77I5QUIQQQ1P' where id=97; -update noar ti set v0='UWKMNL0870KPSF7GCMSRY77I5QUIQQQ1P' where id=97; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='E7FL9RTMIT5DYC9LNVCRYH414DRIE1D0D' where id=97; -update noar ti set v1='E7FL9RTMIT5DYC9LNVCRYH414DRIE1D0D' where id=97; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='1BAKJEWCJRKVY7PTO9DXC980MSDE2TE6H' where id=97; -update noar ti set v2='1BAKJEWCJRKVY7PTO9DXC980MSDE2TE6H' where id=97; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='TYXARM2HKG0P62LASWVW4N0EAXGAQW7GO' where id=97; -update noar ti set v3='TYXARM2HKG0P62LASWVW4N0EAXGAQW7GO' where id=97; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='4VE776DG508IW3LZUE6AUTAW2JDPCAZWL' where id=98; -update noar ti set v0='4VE776DG508IW3LZUE6AUTAW2JDPCAZWL' where id=98; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='NSJ0K2LFG0TGTLS16P6MWA0CQVA9WLQKO' where id=98; -update noar ti set v1='NSJ0K2LFG0TGTLS16P6MWA0CQVA9WLQKO' where id=98; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='E3I7L3WBNQ3BYO4JKT32M2NIR8P9B7J3A' where id=98; -update noar ti set v2='E3I7L3WBNQ3BYO4JKT32M2NIR8P9B7J3A' where id=98; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='Z4I17U2NUSBCDD8PCJBIPT4PYQWLVSABE' where id=98; -update noar ti set v3='Z4I17U2NUSBCDD8PCJBIPT4PYQWLVSABE' where id=98; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='0O0D2HFHYY99YW2J7W2XQHXKLXRGJ359S' where id=99; -update noar ti set v0='0O0D2HFHYY99YW2J7W2XQHXKLXRGJ359S' where id=99; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='DFF5OUK3F76SRB6QD81YPY6ORPRO1CNUC' where id=99; -update noar ti set v1='DFF5OUK3F76SRB6QD81YPY6ORPRO1CNUC' where id=99; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='NDUJ9GJXVB05Q13HOEV9OHP1RH9MJR99U' where id=99; -update noar ti set v2='NDUJ9GJXVB05Q13HOEV9OHP1RH9MJR99U' where id=99; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='M4U6GZOI06LY5NIHERUPWJA31CK4W066E' where id=99; -update noar ti set v3='M4U6GZOI06LY5NIHERUPWJA31CK4W066E' where id=99; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varchar(256) null, -v1 varchar(256) null, -v2 varchar(256) null, -v3 varchar(256) null, -b0 text null -) engine=tokudb; -insert into tt (id) values (0); -insert into tt values (1,2,'a','b','c','d','e'); -insert into tt values (2,3,'','','','',''); -insert into tt values (3,4,'','','','',''); -insert into tt values (4,5,'','','','',''); -insert into tt values (5,6,'','','','',''); -insert into tt values (6,7,'','','','',''); -insert into tt values (7,8,'','','','',''); -insert into tt values (8,9,'','','','',''); -insert into tt values (9,10,'','','','',''); -insert into tt values (10,11,'','','','',''); -insert into tt values (11,12,'','','','',''); -insert into tt values (12,13,'','','','',''); -insert into tt values (13,14,'','','','',''); -insert into tt values (14,15,'','','','',''); -insert into tt values (15,16,'','','','',''); -insert into tt values (16,17,'','','','',''); -insert into tt values (17,18,'','','','',''); -insert into tt values (18,19,'','','','',''); -insert into tt values (19,20,'','','','',''); -insert into tt values (20,21,'','','','',''); -insert into tt values (21,22,'','','','',''); -insert into tt values (22,23,'','','','',''); -insert into tt values (23,24,'','','','',''); -insert into tt values (24,25,'','','','',''); -insert into tt values (25,26,'','','','',''); -insert into tt values (26,27,'','','','',''); -insert into tt values (27,28,'','','','',''); -insert into tt values (28,29,'','','','',''); -insert into tt values (29,30,'','','','',''); -insert into tt values (30,31,'','','','',''); -insert into tt values (31,32,'','','','',''); -insert into tt values (32,33,'','','','',''); -insert into tt values (33,34,'','','','',''); -insert into tt values (34,35,'','','','',''); -insert into tt values (35,36,'','','','',''); -insert into tt values (36,37,'','','','',''); -insert into tt values (37,38,'','','','',''); -insert into tt values (38,39,'','','','',''); -insert into tt values (39,40,'','','','',''); -insert into tt values (40,41,'','','','',''); -insert into tt values (41,42,'','','','',''); -insert into tt values (42,43,'','','','',''); -insert into tt values (43,44,'','','','',''); -insert into tt values (44,45,'','','','',''); -insert into tt values (45,46,'','','','',''); -insert into tt values (46,47,'','','','',''); -insert into tt values (47,48,'','','','',''); -insert into tt values (48,49,'','','','',''); -insert into tt values (49,50,'','','','',''); -insert into tt values (50,51,'','','','',''); -insert into tt values (51,52,'','','','',''); -insert into tt values (52,53,'','','','',''); -insert into tt values (53,54,'','','','',''); -insert into tt values (54,55,'','','','',''); -insert into tt values (55,56,'','','','',''); -insert into tt values (56,57,'','','','',''); -insert into tt values (57,58,'','','','',''); -insert into tt values (58,59,'','','','',''); -insert into tt values (59,60,'','','','',''); -insert into tt values (60,61,'','','','',''); -insert into tt values (61,62,'','','','',''); -insert into tt values (62,63,'','','','',''); -insert into tt values (63,64,'','','','',''); -insert into tt values (64,65,'','','','',''); -insert into tt values (65,66,'','','','',''); -insert into tt values (66,67,'','','','',''); -insert into tt values (67,68,'','','','',''); -insert into tt values (68,69,'','','','',''); -insert into tt values (69,70,'','','','',''); -insert into tt values (70,71,'','','','',''); -insert into tt values (71,72,'','','','',''); -insert into tt values (72,73,'','','','',''); -insert into tt values (73,74,'','','','',''); -insert into tt values (74,75,'','','','',''); -insert into tt values (75,76,'','','','',''); -insert into tt values (76,77,'','','','',''); -insert into tt values (77,78,'','','','',''); -insert into tt values (78,79,'','','','',''); -insert into tt values (79,80,'','','','',''); -insert into tt values (80,81,'','','','',''); -insert into tt values (81,82,'','','','',''); -insert into tt values (82,83,'','','','',''); -insert into tt values (83,84,'','','','',''); -insert into tt values (84,85,'','','','',''); -insert into tt values (85,86,'','','','',''); -insert into tt values (86,87,'','','','',''); -insert into tt values (87,88,'','','','',''); -insert into tt values (88,89,'','','','',''); -insert into tt values (89,90,'','','','',''); -insert into tt values (90,91,'','','','',''); -insert into tt values (91,92,'','','','',''); -insert into tt values (92,93,'','','','',''); -insert into tt values (93,94,'','','','',''); -insert into tt values (94,95,'','','','',''); -insert into tt values (95,96,'','','','',''); -insert into tt values (96,97,'','','','',''); -insert into tt values (97,98,'','','','',''); -insert into tt values (98,99,'','','','',''); -insert into tt values (99,100,'','','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='null this 0' where id=0; -update noar ti set v0='null this 0' where id=0; -update noar tt set v1='null is 1' where id=0; -update noar ti set v1='null is 1' where id=0; -update noar tt set v2='null a 2' where id=0; -update noar ti set v2='null a 2' where id=0; -update noar tt set v3='null test 3' where id=0; -update noar ti set v3='null test 3' where id=0; -update noar tt set v0='this 0' where id=1; -update noar ti set v0='this 0' where id=1; -update noar tt set v1='is 1' where id=1; -update noar ti set v1='is 1' where id=1; -update noar tt set v2='another 2' where id=1; -update noar ti set v2='another 2' where id=1; -update noar tt set v3='test 3' where id=1; -update noar ti set v3='test 3' where id=1; -update noar tt set v0='K0W6GSMZDOZSZR4MMED85PF5WJ9IWV8785BFW1FNVMT5X8E2TOYD6ARV8FHJIBJFOJG78VMWR5OQNT8MRSJY8U1YRU759VGVPCDN1M1YF5BNR1R9P60U0VIW3UQJLWBUBEM7HC4XZ1YC4KQI3WTSCCQJ86I2AYN84ZD620ZOESK6J3L5BG7SWPBZZ1X69CVEOQW6B2IY19K39RMI96NAET67E4GCU6NDPH94HO5RX776UAINOL2SCPDTN8EPNF2DC' where id=2; -update noar ti set v0='K0W6GSMZDOZSZR4MMED85PF5WJ9IWV8785BFW1FNVMT5X8E2TOYD6ARV8FHJIBJFOJG78VMWR5OQNT8MRSJY8U1YRU759VGVPCDN1M1YF5BNR1R9P60U0VIW3UQJLWBUBEM7HC4XZ1YC4KQI3WTSCCQJ86I2AYN84ZD620ZOESK6J3L5BG7SWPBZZ1X69CVEOQW6B2IY19K39RMI96NAET67E4GCU6NDPH94HO5RX776UAINOL2SCPDTN8EPNF2DC' where id=2; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='Y1AQIBH8DKUGNVBYW8RJBE9NCSLAUNAUBC4VSEBE5M8R3Z2CQRKA7B51WO0U4BH2P7DDWL5UEZBA1Z2F32STCUOEBB5LD157F64EHDJ9E5UDTTXU7O8YRJC6E44R0R0TNFQ3XJ5AAP4TM46XQDJE9Y9PWQEXT9XOGSINUP5WYKTPRO436B5OYOKHDPELSLR2ABH9896GJ9PPZ7PIR9JB64UWPOW9KMVOJG1RWQHU2G4Q3FJLYJV2AONY6FBXJ25W0' where id=2; -update noar ti set v1='Y1AQIBH8DKUGNVBYW8RJBE9NCSLAUNAUBC4VSEBE5M8R3Z2CQRKA7B51WO0U4BH2P7DDWL5UEZBA1Z2F32STCUOEBB5LD157F64EHDJ9E5UDTTXU7O8YRJC6E44R0R0TNFQ3XJ5AAP4TM46XQDJE9Y9PWQEXT9XOGSINUP5WYKTPRO436B5OYOKHDPELSLR2ABH9896GJ9PPZ7PIR9JB64UWPOW9KMVOJG1RWQHU2G4Q3FJLYJV2AONY6FBXJ25W0' where id=2; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='09PCLQORLSJ5YF7N8MCH3BBWTHOGUI04V0AT7BUT09E35UG3RVA6EV96SK3VVS73TAG6K1ZL3MNVYU2Y7WSBR4HS7DX7RV046KUBG6GGORQ3OJIT9XMOA7GFAX0GPSV2KBVIVMU34DYNL96SBBOTL6ULYKA7HYEI10H0Q61Z338YPWTAITE8SP4V0NIT3Q01VOFNSDVWZCW4D4MJB8WWW1G6JNKFCNSAA13WZ9HEPQU1BAVKQGGYTR4OOWJZTZMQ9' where id=2; -update noar ti set v2='09PCLQORLSJ5YF7N8MCH3BBWTHOGUI04V0AT7BUT09E35UG3RVA6EV96SK3VVS73TAG6K1ZL3MNVYU2Y7WSBR4HS7DX7RV046KUBG6GGORQ3OJIT9XMOA7GFAX0GPSV2KBVIVMU34DYNL96SBBOTL6ULYKA7HYEI10H0Q61Z338YPWTAITE8SP4V0NIT3Q01VOFNSDVWZCW4D4MJB8WWW1G6JNKFCNSAA13WZ9HEPQU1BAVKQGGYTR4OOWJZTZMQ9' where id=2; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='PE352OYVX26PJUMOM1A7BHE9ZUHYT0LCL0XNICJPNIT527WN93EK1N50XY7NMHGEIKNCV5PN06LFZG5IOJLHYEHD9LAJFY5U4ZFMFPWDCNS4U3ORYAQSTU1VOW5YKYAX6TRNDC1JJCMYDMHGZ3XNYXY2LCIGDIC3FBLOONH2QDW6DM9C4Q2WYSOTI88H3E0DXEOI29WV5P63DFK20CI1I6VIVT2E29FO72U7W7BS1FD36W4XYQQ6WANI63G1TZ9Y9' where id=2; -update noar ti set v3='PE352OYVX26PJUMOM1A7BHE9ZUHYT0LCL0XNICJPNIT527WN93EK1N50XY7NMHGEIKNCV5PN06LFZG5IOJLHYEHD9LAJFY5U4ZFMFPWDCNS4U3ORYAQSTU1VOW5YKYAX6TRNDC1JJCMYDMHGZ3XNYXY2LCIGDIC3FBLOONH2QDW6DM9C4Q2WYSOTI88H3E0DXEOI29WV5P63DFK20CI1I6VIVT2E29FO72U7W7BS1FD36W4XYQQ6WANI63G1TZ9Y9' where id=2; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='75RKPVVH4RWVRNCN2V6UOWSVEBPEROBIOL9IYCMUVFYKCEC39SJHZPMNRXKZUWDHAOFAI8NGMURUPJ0RUBC6JQW2HAKWQLQB1UXAP0CPCGL4XTWU1TSDM9ES7IOIK5S6Z133NCYW0LLGNWCE5O6ZK5AWAJVIG5J2WVTRN4M5D649CYOH5E0WEF31BO5FZ5ZH3EWJ7V3SL3AF4VOYHGYWPOMQ8PS1RT4MARY3O9ZVN1SMG2878CFWU7LXWP3Q47Q82' where id=3; -update noar ti set v0='75RKPVVH4RWVRNCN2V6UOWSVEBPEROBIOL9IYCMUVFYKCEC39SJHZPMNRXKZUWDHAOFAI8NGMURUPJ0RUBC6JQW2HAKWQLQB1UXAP0CPCGL4XTWU1TSDM9ES7IOIK5S6Z133NCYW0LLGNWCE5O6ZK5AWAJVIG5J2WVTRN4M5D649CYOH5E0WEF31BO5FZ5ZH3EWJ7V3SL3AF4VOYHGYWPOMQ8PS1RT4MARY3O9ZVN1SMG2878CFWU7LXWP3Q47Q82' where id=3; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='PIGNY61M1LRE6P523M94TKDPSQUR48UYG570WYL123AC6M7TCTZVWRFNYMAQIYJ0GI8CT3FV3ATVR8UT2I10G8XKGXOKNTMJ7B6PLNNVQWRW18CP528DSQKNWB5KQKMW753VETUL55FEPJ516XF5AUCTPBDHUT1SVFG8HUFP7U54JC656F2CFLY7AL0MAX0J35E0VYLPK3378NW2G99E8MJJULBFAAZP4WZ9ALXW45R4X75ZETM1FQR7AYW1H3LSM' where id=3; -update noar ti set v1='PIGNY61M1LRE6P523M94TKDPSQUR48UYG570WYL123AC6M7TCTZVWRFNYMAQIYJ0GI8CT3FV3ATVR8UT2I10G8XKGXOKNTMJ7B6PLNNVQWRW18CP528DSQKNWB5KQKMW753VETUL55FEPJ516XF5AUCTPBDHUT1SVFG8HUFP7U54JC656F2CFLY7AL0MAX0J35E0VYLPK3378NW2G99E8MJJULBFAAZP4WZ9ALXW45R4X75ZETM1FQR7AYW1H3LSM' where id=3; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='4SW5NYQDT95S713YORAUW5AZUJACT2EAKMD4SRT8SKCHLOAMD4L1XHCGVZOFGCROW1QT0SEKR25RP1MVWPWMGUFRVBT3ZV0E2B2QMTRH8MZIOGLR25NGNSHI9CKGJA4LT1K6SJ5O6JYSRTH3BGZHP3LNLV37HVA9NZBBA72LVG0MDIRAPDZKEGZBSQLWJDA0Z9S4WEW5IM32UDVVXC1W3FKL95N5Q76A3DS4EFQ28Y1SL8BKF67VMJMPKMT95WXES' where id=3; -update noar ti set v2='4SW5NYQDT95S713YORAUW5AZUJACT2EAKMD4SRT8SKCHLOAMD4L1XHCGVZOFGCROW1QT0SEKR25RP1MVWPWMGUFRVBT3ZV0E2B2QMTRH8MZIOGLR25NGNSHI9CKGJA4LT1K6SJ5O6JYSRTH3BGZHP3LNLV37HVA9NZBBA72LVG0MDIRAPDZKEGZBSQLWJDA0Z9S4WEW5IM32UDVVXC1W3FKL95N5Q76A3DS4EFQ28Y1SL8BKF67VMJMPKMT95WXES' where id=3; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='JL9GZP7FPVMRNII2C3GB09OESYN1QNU5GFL5O57MJU9NJJWONWO4NDDL2KD4B5OJ5SEBY3KCL7629WX37UTW0B9H38QOHGE5VMJKSTDS3VSPRM3SRF4CUD780X8NBEWJAS81FF3UT01JVSLTC8SOIHA7C4J5W68Z3KC2T8DZXS9JI3BF9EYU9HY372EUOENHRBYJWTDF9ODVOXN40AT1WE4HBR6A7CXDY2U0W0BW0OAZ9QDX9EYHZZFDK4LHZ2ZYE' where id=3; -update noar ti set v3='JL9GZP7FPVMRNII2C3GB09OESYN1QNU5GFL5O57MJU9NJJWONWO4NDDL2KD4B5OJ5SEBY3KCL7629WX37UTW0B9H38QOHGE5VMJKSTDS3VSPRM3SRF4CUD780X8NBEWJAS81FF3UT01JVSLTC8SOIHA7C4J5W68Z3KC2T8DZXS9JI3BF9EYU9HY372EUOENHRBYJWTDF9ODVOXN40AT1WE4HBR6A7CXDY2U0W0BW0OAZ9QDX9EYHZZFDK4LHZ2ZYE' where id=3; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='O732IS5IKPAMYRXPBQ22C8BTJ3F6F1INXZNSF327JE6CRBUEZNTZRB7S4S6MYUGTJMMKL8QHDROGVO9UEKDF2OOCSZQVKFLT9GE55DFYRTSROPLKV7R60DZZ3OQ03XFOANYU62JDWMBPEL9KN2SK5O55A865ZLKU5GEVZ88OLAVM4JBUDPQW7U1N9AQFRKLG8Z8XJDR7LV7R9GKUVR5FM1DC2BDNNXCAI9R8UQ9C5D7CCSO9DZBGBO84812S7BDTT' where id=4; -update noar ti set v0='O732IS5IKPAMYRXPBQ22C8BTJ3F6F1INXZNSF327JE6CRBUEZNTZRB7S4S6MYUGTJMMKL8QHDROGVO9UEKDF2OOCSZQVKFLT9GE55DFYRTSROPLKV7R60DZZ3OQ03XFOANYU62JDWMBPEL9KN2SK5O55A865ZLKU5GEVZ88OLAVM4JBUDPQW7U1N9AQFRKLG8Z8XJDR7LV7R9GKUVR5FM1DC2BDNNXCAI9R8UQ9C5D7CCSO9DZBGBO84812S7BDTT' where id=4; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='R92NFJNZ1ZBJJ44PGPPJHP3QL89MA6GL8J4PVUIZ0QD59JSQMKF2T36UK1CKVMC41D92UJHZO9X8VDVJSV9IV790JVZRDOSDTRVN18VA2GHMMBRIJHVHH2TCQ2XX43YPY00RBNEF9XQFPFH0WPOKL01RRIIMTAN9CCOWFLHADU54HCKLIK3A8FB0M76NQFY85GOXWLENR7E4LEDI60II5ZUYYTND83IG4XCTJSRLJU6FGHB5EX10K67U6SB4LO5V5' where id=4; -update noar ti set v1='R92NFJNZ1ZBJJ44PGPPJHP3QL89MA6GL8J4PVUIZ0QD59JSQMKF2T36UK1CKVMC41D92UJHZO9X8VDVJSV9IV790JVZRDOSDTRVN18VA2GHMMBRIJHVHH2TCQ2XX43YPY00RBNEF9XQFPFH0WPOKL01RRIIMTAN9CCOWFLHADU54HCKLIK3A8FB0M76NQFY85GOXWLENR7E4LEDI60II5ZUYYTND83IG4XCTJSRLJU6FGHB5EX10K67U6SB4LO5V5' where id=4; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='W69H8Z6VZ8LA67X1IGDGBKWET2AUH4ZO7TG0T56TA2KX0MGY7QUJCW7VO26KYI2UPHITIR62NVN68V4W3X1CQTQB9X5EVY5B8YZWZ3GGEA0EDZ8LLIFH30GA4LQRW1AVZG17M2MP49KF7CYRSZ38K97NTJWEBMQQ3H044BPR2408RASQRDKISLCLP9HI9HF3XZV8DWWUUXYKK5UVFOBPI5Q9EXOG3PG83J8T68VSEO26VMLREELCQDKUKSAQNJ76R' where id=4; -update noar ti set v2='W69H8Z6VZ8LA67X1IGDGBKWET2AUH4ZO7TG0T56TA2KX0MGY7QUJCW7VO26KYI2UPHITIR62NVN68V4W3X1CQTQB9X5EVY5B8YZWZ3GGEA0EDZ8LLIFH30GA4LQRW1AVZG17M2MP49KF7CYRSZ38K97NTJWEBMQQ3H044BPR2408RASQRDKISLCLP9HI9HF3XZV8DWWUUXYKK5UVFOBPI5Q9EXOG3PG83J8T68VSEO26VMLREELCQDKUKSAQNJ76R' where id=4; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='Y7OHOAFHJXBXCX6E68T44HCLCR708OZTWB0KVUNVHOAJBO639Q5Z9V96RCOA170Z7HYCI1HJ8A53SPTOTPZGSGS9U4HIY9R6K5Z45UGZ4RXQ61818OUPLO6BSRA0H3JW41I95GFAH1WRGT9DS96J5X9C66V4KHNO6ZRK4HLBIYCEILURCLYNRGRBJBK7CL1YYIHN2TQ9J61XEN2MMP6HCSU8VGWFYGIV5VNSCQPDRGLAD97NI08W5C3KTEZ2R1W3A' where id=4; -update noar ti set v3='Y7OHOAFHJXBXCX6E68T44HCLCR708OZTWB0KVUNVHOAJBO639Q5Z9V96RCOA170Z7HYCI1HJ8A53SPTOTPZGSGS9U4HIY9R6K5Z45UGZ4RXQ61818OUPLO6BSRA0H3JW41I95GFAH1WRGT9DS96J5X9C66V4KHNO6ZRK4HLBIYCEILURCLYNRGRBJBK7CL1YYIHN2TQ9J61XEN2MMP6HCSU8VGWFYGIV5VNSCQPDRGLAD97NI08W5C3KTEZ2R1W3A' where id=4; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='QDFMNFO3RAM2I6KVQWF13POURUFMES6N4ES0BE84AZA52D0FL2I9QFKVSESY52EB6X5MJET7IFRCVGQ1SMZROWUJL37VM8JP384MQ18BXFTN57LGARZMLIHULU3TNYCJNJDNEEQW4EYHAXR6WO3FD3I0L7O941H54P18517FB67EB21NXPTIVLZDZPM97Q6PHJ01AWUYMY6D342YLPN73LY3Y6VW6EUZKFBULZ83VFQWTDQLKFP5HNPVBHE0ZAL65' where id=5; -update noar ti set v0='QDFMNFO3RAM2I6KVQWF13POURUFMES6N4ES0BE84AZA52D0FL2I9QFKVSESY52EB6X5MJET7IFRCVGQ1SMZROWUJL37VM8JP384MQ18BXFTN57LGARZMLIHULU3TNYCJNJDNEEQW4EYHAXR6WO3FD3I0L7O941H54P18517FB67EB21NXPTIVLZDZPM97Q6PHJ01AWUYMY6D342YLPN73LY3Y6VW6EUZKFBULZ83VFQWTDQLKFP5HNPVBHE0ZAL65' where id=5; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='LS0BRZHH02R0T1AR4Z5NDJS1B8UX1ZITUJDSJBWMD0LO8SB9VG3UDIMBVEXQNIQ6OF7RWDH52SITB3RX7JPVTH00AXP9ORGVAJQKO9XVSN6NQ5AWTE0QDSU8WZHO723LF1SZEZBKO3RO2XFWPPLWO0P6JH6NMD0EGM4YJ4AVMP9L0P48OZW90QCQHM8J4V10SAXAWSVNVBBLVKO5K3BFE49MCJOZ2QJIFN7DJRXFZ7PYV1O0X0FK46216OQVPW0B6' where id=5; -update noar ti set v1='LS0BRZHH02R0T1AR4Z5NDJS1B8UX1ZITUJDSJBWMD0LO8SB9VG3UDIMBVEXQNIQ6OF7RWDH52SITB3RX7JPVTH00AXP9ORGVAJQKO9XVSN6NQ5AWTE0QDSU8WZHO723LF1SZEZBKO3RO2XFWPPLWO0P6JH6NMD0EGM4YJ4AVMP9L0P48OZW90QCQHM8J4V10SAXAWSVNVBBLVKO5K3BFE49MCJOZ2QJIFN7DJRXFZ7PYV1O0X0FK46216OQVPW0B6' where id=5; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='A4C7QHK8HMB9NSK75LAALP92FWEIU68ZB8FBWCPUXMIJQQN52MW3BQP55B878AC95ZZYJBPKKPWP1DJMTCTAD5TU4S6U1YI46VUKHZ8FNRIHJ05U3A4B4P1Z9XV6QV1KH66ITXIDK3P9DKDQEI2MB50G580JYVQL46K467K3KLIFVE4OFM2BX8JJLPPKD66J7DBUZOCWSIP5N9CV3059KG6X4L3IV3GIDDGFFRTQDDX92IS5ZTJM0HUSI3EO3XPDS' where id=5; -update noar ti set v2='A4C7QHK8HMB9NSK75LAALP92FWEIU68ZB8FBWCPUXMIJQQN52MW3BQP55B878AC95ZZYJBPKKPWP1DJMTCTAD5TU4S6U1YI46VUKHZ8FNRIHJ05U3A4B4P1Z9XV6QV1KH66ITXIDK3P9DKDQEI2MB50G580JYVQL46K467K3KLIFVE4OFM2BX8JJLPPKD66J7DBUZOCWSIP5N9CV3059KG6X4L3IV3GIDDGFFRTQDDX92IS5ZTJM0HUSI3EO3XPDS' where id=5; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='D000YBD5B7GH5C90XTPYZSPH5GTQYSXOE96NSGCARPR0TYQIVAOA84QNZF2XKNVDC8BC2EMHH8SHH0377XVAESNBDH2B2H741Y0ZWP6VVGR91F5CWTYVD1EAK6QXEHUNUKWLRVMNCMIC8E2WAVOY59ERMKZPYUN3IEFIIPTOMT1SFYM27EZLZFESH4RXDV1W3CZTP79VQVKVSZTQRSJTE03N9WV3K8X6NF409ON9IEDNHABZDJZILRC1XKLL3CRUI' where id=5; -update noar ti set v3='D000YBD5B7GH5C90XTPYZSPH5GTQYSXOE96NSGCARPR0TYQIVAOA84QNZF2XKNVDC8BC2EMHH8SHH0377XVAESNBDH2B2H741Y0ZWP6VVGR91F5CWTYVD1EAK6QXEHUNUKWLRVMNCMIC8E2WAVOY59ERMKZPYUN3IEFIIPTOMT1SFYM27EZLZFESH4RXDV1W3CZTP79VQVKVSZTQRSJTE03N9WV3K8X6NF409ON9IEDNHABZDJZILRC1XKLL3CRUI' where id=5; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='XK4GTRA9D3OXXOTDRAOW18R4H6KFN8YQ6XI8K8B14UR3H5XOQTB3KP88NTVR33BE3EQFO4G9YXDD1BGV038EISPM8QZUU523UK2JFBU368LL68YZIAONYPTV0X6FF634FOOY9OJY5HR5PVUXUMFRGBGAJE162SF4M5275AF7AZUL57LMS3KPNBU78J13M071SQ3LJGYQ40SK8PD7WEVPCB6B07TZG1D9J7HS1VNVRZYZN2JQVLLVUV5IISHOFRI94' where id=6; -update noar ti set v0='XK4GTRA9D3OXXOTDRAOW18R4H6KFN8YQ6XI8K8B14UR3H5XOQTB3KP88NTVR33BE3EQFO4G9YXDD1BGV038EISPM8QZUU523UK2JFBU368LL68YZIAONYPTV0X6FF634FOOY9OJY5HR5PVUXUMFRGBGAJE162SF4M5275AF7AZUL57LMS3KPNBU78J13M071SQ3LJGYQ40SK8PD7WEVPCB6B07TZG1D9J7HS1VNVRZYZN2JQVLLVUV5IISHOFRI94' where id=6; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='YAY4QHWIZ1RZFFYDNRYNUGXUAT9JT3COKZLWY9PR0G6WY8RS7G1BVX9F7FRNTYQKSOZDJ7J2N58WQEOVVH9T2P4ILBSJRZ9S02DV15C1F6TLWGT9VP8CIB8S1C6GNMR2GT7WNFICIPELB53NZVU7DXDTMDFAXTQL0JC7TG9GTUW5LE49MFZA2XEVSVLPEU6WYNGQCJ6U2MG3PRYYF3MZO59P1D6GSSWAGI2IYBMU9RXPT976F7KVW7FTQ9OHWKEKU' where id=6; -update noar ti set v1='YAY4QHWIZ1RZFFYDNRYNUGXUAT9JT3COKZLWY9PR0G6WY8RS7G1BVX9F7FRNTYQKSOZDJ7J2N58WQEOVVH9T2P4ILBSJRZ9S02DV15C1F6TLWGT9VP8CIB8S1C6GNMR2GT7WNFICIPELB53NZVU7DXDTMDFAXTQL0JC7TG9GTUW5LE49MFZA2XEVSVLPEU6WYNGQCJ6U2MG3PRYYF3MZO59P1D6GSSWAGI2IYBMU9RXPT976F7KVW7FTQ9OHWKEKU' where id=6; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='47G26074KUHEAMXLO8QFGN2ZW43TX04A7DRFPG07QO76XMS10OX8WGN7V6PVYHCGZ4CKU2LTUU3HD1KG4V8GAKV3FHV086X5IUPJNODC6SA34XZJ379Z7V89WNRJ4G3IR67DFD2237S6D3DDM6RINUBRXSXAFBYMD26K3VY2C0AGEGJWUM81D5RBFFKGX32YFK3945PDSH6NQH4K7JA213HMEXLE2N696WX92L2BB4REVUW1PDI7IYJ35BQ75VX2Z' where id=6; -update noar ti set v2='47G26074KUHEAMXLO8QFGN2ZW43TX04A7DRFPG07QO76XMS10OX8WGN7V6PVYHCGZ4CKU2LTUU3HD1KG4V8GAKV3FHV086X5IUPJNODC6SA34XZJ379Z7V89WNRJ4G3IR67DFD2237S6D3DDM6RINUBRXSXAFBYMD26K3VY2C0AGEGJWUM81D5RBFFKGX32YFK3945PDSH6NQH4K7JA213HMEXLE2N696WX92L2BB4REVUW1PDI7IYJ35BQ75VX2Z' where id=6; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='2LTHQTEYOWTTQFD3WBBCKUI6BPT889OLB28X79EMH2T44T0RK6KN9MAO5THOQ5J77GB1NFTILR1PFBRXG9LQYJ79CNTOFCNQF8CR0OA9C8QGAVY318BIWXEKFWOBCZMFNBDJQX1D4LBQUIBWYWLKK3XIZR6AAS413W2WVXVEL7B1MVWOC3JJPF1PL9TLLZCPNWZQU75FB45P1G8LJB4B32DUA6R45T6TXYQS4LDC189VXEPNW836QNHFGMY3S5XVE' where id=6; -update noar ti set v3='2LTHQTEYOWTTQFD3WBBCKUI6BPT889OLB28X79EMH2T44T0RK6KN9MAO5THOQ5J77GB1NFTILR1PFBRXG9LQYJ79CNTOFCNQF8CR0OA9C8QGAVY318BIWXEKFWOBCZMFNBDJQX1D4LBQUIBWYWLKK3XIZR6AAS413W2WVXVEL7B1MVWOC3JJPF1PL9TLLZCPNWZQU75FB45P1G8LJB4B32DUA6R45T6TXYQS4LDC189VXEPNW836QNHFGMY3S5XVE' where id=6; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='TE4IFEDR8PCBJIQ4XEDO9WTM46X3HNHZ8HYTB8M8QXO4XARRPPA8HT6OZENYXX59PT0L9KFSYZ2VYWH8BA3WWTBGERGEHTHVSBKD0A9LCV6JLYKFWUIACXFV43R4NKQCJ8GIFXM1LMIKMDRV7JI7HZLBMGIEZE3JUDUF2E4HO5GHDQ8FQ9LTBL3IP34CYZNPD67LEOMSIO5277H8O5HWOZ2KKBS8FJY54XXTF7L4TM810QIV35F71UJC465PAVJOW' where id=7; -update noar ti set v0='TE4IFEDR8PCBJIQ4XEDO9WTM46X3HNHZ8HYTB8M8QXO4XARRPPA8HT6OZENYXX59PT0L9KFSYZ2VYWH8BA3WWTBGERGEHTHVSBKD0A9LCV6JLYKFWUIACXFV43R4NKQCJ8GIFXM1LMIKMDRV7JI7HZLBMGIEZE3JUDUF2E4HO5GHDQ8FQ9LTBL3IP34CYZNPD67LEOMSIO5277H8O5HWOZ2KKBS8FJY54XXTF7L4TM810QIV35F71UJC465PAVJOW' where id=7; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='9GD7WFEYYHFJ1QFQ2P0ZDBFBNJDNESVVSPBXD4825WP82FQOC7TU1296G278O80IHTPGDLVAGQ1A2SP3ES25QMXE7TH73A8645QFCNBY8UQY20UJEQVM8BOSNDFB79039YQUUCLL0HMLON0GEDS5JW3FUM7FURHXLU5SCZMRLZFAGEUVLBHKJTH2UXXZ8M9YKS5LNOW93ZO2B4NSUG8U9311G2WEZUISAFITADFZP2Z85OU1XLN96DT1JFHHZ3QBK' where id=7; -update noar ti set v1='9GD7WFEYYHFJ1QFQ2P0ZDBFBNJDNESVVSPBXD4825WP82FQOC7TU1296G278O80IHTPGDLVAGQ1A2SP3ES25QMXE7TH73A8645QFCNBY8UQY20UJEQVM8BOSNDFB79039YQUUCLL0HMLON0GEDS5JW3FUM7FURHXLU5SCZMRLZFAGEUVLBHKJTH2UXXZ8M9YKS5LNOW93ZO2B4NSUG8U9311G2WEZUISAFITADFZP2Z85OU1XLN96DT1JFHHZ3QBK' where id=7; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='FCTKB4A7L70RS7CWYUONWWH1A4HCZM2QAG5E933Z4B7NTN5PAROOMZWNONTDRHK8KGIAWLY3F75IOOW1BG0BZN0E16GBO4LBRP70V8IE3TDMXS2Q7E04DSY22CKQ68WAO2YASXJPJBT09GU9KNAGUZIDHC7O2BRE7R0R9H4DLRDMCUA40FKWFFAD1DLOJ2FVSV40FB8T589C10JDG0Y5KQYPQ0QVGXS1ND7UV1GQM215LT2EWG0IWWWZZWFKXRS9T' where id=7; -update noar ti set v2='FCTKB4A7L70RS7CWYUONWWH1A4HCZM2QAG5E933Z4B7NTN5PAROOMZWNONTDRHK8KGIAWLY3F75IOOW1BG0BZN0E16GBO4LBRP70V8IE3TDMXS2Q7E04DSY22CKQ68WAO2YASXJPJBT09GU9KNAGUZIDHC7O2BRE7R0R9H4DLRDMCUA40FKWFFAD1DLOJ2FVSV40FB8T589C10JDG0Y5KQYPQ0QVGXS1ND7UV1GQM215LT2EWG0IWWWZZWFKXRS9T' where id=7; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='6UZHIQ33GCT9GQBHN7CUP24EUR3DARFIFBTVVNYQBNSBWG7Q9EKJJIEZURTAWMNUCNFACD4GUK8XXSYGQY89BYYKW0YU2W5ITCS7Y0U5F8R5D9HIAOCO07XUNERE8QHU51H313JW16N5P2ZBN2V4HUZU3TMWN8B1GATROR80BPVDBUO7NYTUO6RROEZLANH2KOBSJ6YFXYUY9N2OJY7XV97IKWSE30R4JP1DB64N8IFBTLPMVRKL8SSP2BR76P7YI' where id=7; -update noar ti set v3='6UZHIQ33GCT9GQBHN7CUP24EUR3DARFIFBTVVNYQBNSBWG7Q9EKJJIEZURTAWMNUCNFACD4GUK8XXSYGQY89BYYKW0YU2W5ITCS7Y0U5F8R5D9HIAOCO07XUNERE8QHU51H313JW16N5P2ZBN2V4HUZU3TMWN8B1GATROR80BPVDBUO7NYTUO6RROEZLANH2KOBSJ6YFXYUY9N2OJY7XV97IKWSE30R4JP1DB64N8IFBTLPMVRKL8SSP2BR76P7YI' where id=7; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='K6LV9H9QJ71XWIHWV7RBHS9QPU8GWHE64VPDXZVDJKRM13A9J1RGVHOYQU7N5T11LLSSRLZH42I0MX5R82X84N03YZ954G5T52ALJC4DOBK6TPMCJTVGWN4AFVNUO0SJ0AIROS7AWRW8JUQZNAHXVOT11RU4KHOUI43QOUOKUD5TGMH8G0I0WG778DD4CR6P4AF334TZA2C34YFD3RUC547WIWZG97TYYKYZ8R3GTG64W09VMSUT3IPKL8E0G6H2O' where id=8; -update noar ti set v0='K6LV9H9QJ71XWIHWV7RBHS9QPU8GWHE64VPDXZVDJKRM13A9J1RGVHOYQU7N5T11LLSSRLZH42I0MX5R82X84N03YZ954G5T52ALJC4DOBK6TPMCJTVGWN4AFVNUO0SJ0AIROS7AWRW8JUQZNAHXVOT11RU4KHOUI43QOUOKUD5TGMH8G0I0WG778DD4CR6P4AF334TZA2C34YFD3RUC547WIWZG97TYYKYZ8R3GTG64W09VMSUT3IPKL8E0G6H2O' where id=8; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='64ZO05KGENRZWHG1OQO4R5MHCZNZXFW89PFLX5NK19I36I2NITA2AVQN7U9YALKZRWTHCOBMHVXX8PDRXOTNXGPY0P3OYBTJEOZ48V31R22S9J9I6TE8NBHGC24GYYEWWZZMZ6RWULP1CDVPVPECAB167CYMUEH6YJ0RMLVMZXN7ZANCMIQGVC7PWZHC6VMT4GHKGSHHMBG8EMCD35UWBV7S4KT77O6DGFOAPYPZ9YNEWZQ12C63ZK1ZTWL9ATE8U' where id=8; -update noar ti set v1='64ZO05KGENRZWHG1OQO4R5MHCZNZXFW89PFLX5NK19I36I2NITA2AVQN7U9YALKZRWTHCOBMHVXX8PDRXOTNXGPY0P3OYBTJEOZ48V31R22S9J9I6TE8NBHGC24GYYEWWZZMZ6RWULP1CDVPVPECAB167CYMUEH6YJ0RMLVMZXN7ZANCMIQGVC7PWZHC6VMT4GHKGSHHMBG8EMCD35UWBV7S4KT77O6DGFOAPYPZ9YNEWZQ12C63ZK1ZTWL9ATE8U' where id=8; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='55IVFEBV3CMCPLRBP7DGB8NT5J3CF27DHP0BCDEQHLSTGL46KM4ZP5DYIIHRFL4X70Q149GU1G4VOZWCCTC3VKP0C01QQ6VOQXT4X1LDNW2CSQRBG6PT3W9P5543AXO2LKSD1S53EEK7VI6THX8T9IGHB78ORLXHTWFOF1DTQ9D5IRIE9WSZHGQ5L8Z0BF7LT9FH4963IR3MES0GSYKUO8587G1LZEFCEAM720F1JJYGQJ5EAAMRNFAZ02MBBBRSM' where id=8; -update noar ti set v2='55IVFEBV3CMCPLRBP7DGB8NT5J3CF27DHP0BCDEQHLSTGL46KM4ZP5DYIIHRFL4X70Q149GU1G4VOZWCCTC3VKP0C01QQ6VOQXT4X1LDNW2CSQRBG6PT3W9P5543AXO2LKSD1S53EEK7VI6THX8T9IGHB78ORLXHTWFOF1DTQ9D5IRIE9WSZHGQ5L8Z0BF7LT9FH4963IR3MES0GSYKUO8587G1LZEFCEAM720F1JJYGQJ5EAAMRNFAZ02MBBBRSM' where id=8; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='5F05P8URBS9NAYRP75YYAEB2DF6O90RYGWS7XA0ZEHWIL4GD682WOVVWELDX90JSJ2YV3RK27QBGS6LJ1V1YOBROG4K8VRCMH80C54FZR9Z78KACY5W8B8Q6M3RWKWCBIVFI19SMDQM6YEYJZM1FT6VIRET5G4V9ZD0APKCWSI3JVKP3JIRKGUZXMG60TSNSZ7N4ZXIIXKBYB4AVL1QMWRTCIIMZKFJG8VOK8ITKOGP5H7IM2A31OHR60KMI26DA5' where id=8; -update noar ti set v3='5F05P8URBS9NAYRP75YYAEB2DF6O90RYGWS7XA0ZEHWIL4GD682WOVVWELDX90JSJ2YV3RK27QBGS6LJ1V1YOBROG4K8VRCMH80C54FZR9Z78KACY5W8B8Q6M3RWKWCBIVFI19SMDQM6YEYJZM1FT6VIRET5G4V9ZD0APKCWSI3JVKP3JIRKGUZXMG60TSNSZ7N4ZXIIXKBYB4AVL1QMWRTCIIMZKFJG8VOK8ITKOGP5H7IM2A31OHR60KMI26DA5' where id=8; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='8V6OS9RK6FCACS7MT1RL28SHETV1SDW2DC3SSHDZEU38FQTM0LOUX2EU1JPKIC6S7KZ3WQHR9G8REUSHRI2KY09J3JKC2SHMCZMR7FRSWDP7KZ7PNQ93VQUUX75VYFQ8NZYJOOEQ6PFCU0J7IW0BFPG777U0S0DJPD1V4X7C0M9EOLP9CCP5K4N9QNXLGVELV9LV2TGMI37JJCQC44G2CV64H7WSH6PAEQ4LIYJKL8UYLN9I3HU85JPMQH8KXDGJG' where id=9; -update noar ti set v0='8V6OS9RK6FCACS7MT1RL28SHETV1SDW2DC3SSHDZEU38FQTM0LOUX2EU1JPKIC6S7KZ3WQHR9G8REUSHRI2KY09J3JKC2SHMCZMR7FRSWDP7KZ7PNQ93VQUUX75VYFQ8NZYJOOEQ6PFCU0J7IW0BFPG777U0S0DJPD1V4X7C0M9EOLP9CCP5K4N9QNXLGVELV9LV2TGMI37JJCQC44G2CV64H7WSH6PAEQ4LIYJKL8UYLN9I3HU85JPMQH8KXDGJG' where id=9; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='KWRON81VJ4JE8B1OQZL08PJU844NBG4WJ2O1YIOOL7HTKFIG82U5GIY18HOIQXXNL6NAEUCME29M0KUT9RLXMHJDQ7J8FRPNV862J56815VRJLLP4ZG9AV3WNRDSMNVNQ4YK0VIXP76KSY43OI08U5K1T0RV2HPFGE2NXC2O3YPRBBQJR55LHU9TD34UWBMYKKYVV81ROHMHKYCZLZLMFK54B6XGZ5AYD0SC185QCCSGN9IDMJYL6KQELJBF1EY5H' where id=9; -update noar ti set v1='KWRON81VJ4JE8B1OQZL08PJU844NBG4WJ2O1YIOOL7HTKFIG82U5GIY18HOIQXXNL6NAEUCME29M0KUT9RLXMHJDQ7J8FRPNV862J56815VRJLLP4ZG9AV3WNRDSMNVNQ4YK0VIXP76KSY43OI08U5K1T0RV2HPFGE2NXC2O3YPRBBQJR55LHU9TD34UWBMYKKYVV81ROHMHKYCZLZLMFK54B6XGZ5AYD0SC185QCCSGN9IDMJYL6KQELJBF1EY5H' where id=9; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='8RUNX4TUNHBV7J7WBPXMC1CFQHZXJ9XSIG6DVRX6V2VO5UN7IGPIGTIJ8U879ZRX4ES3QT0F4272DUY8AK7HNDMJC8630X00T5JX4NJYTPVJTI43N8GJWAZSSMYZZY5DSPQX0RPA2RBA453WZ234T4RDLJRCEE0S4A2PWAW5468P56G0GQKVD7SSLAIAG8AFIO44V2IN1EADKA2Q5NX5JDTKNVUFWSZBNPM3NZKC6IMJJYJU4MFBPGFGIK58AVUPK' where id=9; -update noar ti set v2='8RUNX4TUNHBV7J7WBPXMC1CFQHZXJ9XSIG6DVRX6V2VO5UN7IGPIGTIJ8U879ZRX4ES3QT0F4272DUY8AK7HNDMJC8630X00T5JX4NJYTPVJTI43N8GJWAZSSMYZZY5DSPQX0RPA2RBA453WZ234T4RDLJRCEE0S4A2PWAW5468P56G0GQKVD7SSLAIAG8AFIO44V2IN1EADKA2Q5NX5JDTKNVUFWSZBNPM3NZKC6IMJJYJU4MFBPGFGIK58AVUPK' where id=9; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='PZC7VKRIK8R2RQD4WGYC0ZBI53AOWTM1KG0QQ1KQWH3MM046P38W2F7YKZCDJCC3JZE7LUCFMJ1ZXSYLI0KUN7V4OTHB2PWHB6S2RJHY3S7LEZ1TA4O3R93HF351OPLNKCDNX3XL7JJI341TUNOVH0YTZ7WN9Z7HUTQ9N030AMLSL081NMYD8HRMJCAQJB6XXYR7R9XBN6SJ8VC9NRRWQQ49H62E1X71QSDRO47JUT9FS7CCWB1RMUPFMW52VPAQ1' where id=9; -update noar ti set v3='PZC7VKRIK8R2RQD4WGYC0ZBI53AOWTM1KG0QQ1KQWH3MM046P38W2F7YKZCDJCC3JZE7LUCFMJ1ZXSYLI0KUN7V4OTHB2PWHB6S2RJHY3S7LEZ1TA4O3R93HF351OPLNKCDNX3XL7JJI341TUNOVH0YTZ7WN9Z7HUTQ9N030AMLSL081NMYD8HRMJCAQJB6XXYR7R9XBN6SJ8VC9NRRWQQ49H62E1X71QSDRO47JUT9FS7CCWB1RMUPFMW52VPAQ1' where id=9; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='TILB2FVJ9E89CM9EMNGMKAG05LA9B6JBOWM4CT7UAE5DY53HXMVGJFC75Z2NZFW1YZZZIB8YTTBUBY0O5JKL5XH3WN8KAB6844VRMKYA5OC1X9YD4X3UTYZ01YPK3YF5LK977KZ6X5TBF5X2QVVZPY3KDQ44DFM5POB3EJHM5B5CV42LML5S04XB6YIB3H9NQDJIXAXS58SK5NHQUZR4S8EFHOEV96D5UKII9P8PQL1JGP15KTT70XSQEDJJ4JNH6' where id=10; -update noar ti set v0='TILB2FVJ9E89CM9EMNGMKAG05LA9B6JBOWM4CT7UAE5DY53HXMVGJFC75Z2NZFW1YZZZIB8YTTBUBY0O5JKL5XH3WN8KAB6844VRMKYA5OC1X9YD4X3UTYZ01YPK3YF5LK977KZ6X5TBF5X2QVVZPY3KDQ44DFM5POB3EJHM5B5CV42LML5S04XB6YIB3H9NQDJIXAXS58SK5NHQUZR4S8EFHOEV96D5UKII9P8PQL1JGP15KTT70XSQEDJJ4JNH6' where id=10; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='H7RDRMIRV69WXYS228RT55O7FHO1JN5VRR8S58RO6IBJE7HG7JQ7I7CBLWWZD08J6BK5EEKGNZVTXIZ3U326GBL3TWGWL6PMEQLM38KDMG702CV3CBH130GH11RG7WJE7PDD0RUICAQS801CLCJWAJFFDTMFTQCP4WN56Z5ZTXBIDDGT8YW09CHMTYPR1NOXWG9BW3052F1EM3QKBZ9A92ZUB991L1LOH7FM7QSFPMW7UO6DRYJG5K5V1XTPC9T88' where id=10; -update noar ti set v1='H7RDRMIRV69WXYS228RT55O7FHO1JN5VRR8S58RO6IBJE7HG7JQ7I7CBLWWZD08J6BK5EEKGNZVTXIZ3U326GBL3TWGWL6PMEQLM38KDMG702CV3CBH130GH11RG7WJE7PDD0RUICAQS801CLCJWAJFFDTMFTQCP4WN56Z5ZTXBIDDGT8YW09CHMTYPR1NOXWG9BW3052F1EM3QKBZ9A92ZUB991L1LOH7FM7QSFPMW7UO6DRYJG5K5V1XTPC9T88' where id=10; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='VPURGZP03AYF64VCYB79C2MJGMOW3LOF4D9U645M5CFFOPF2T5BZIXNLCAHLVOAC27N60G672FR4GPH8I3GRSDXYEIYJIKA2FDVGLZ434NT7F7C91PM9RV0X8PETPF0JTWYOJHD3VO1FJFCBT8AE60CS2GNUKZ04EAH524TMI3L6IGUYKJUTFBVI8F4KDEVKJPOFP175VF1MCQRBHYK9WP17LDWO1D3GDYIOIIJZFTISH65020Q1LMHXUT6K53C9P' where id=10; -update noar ti set v2='VPURGZP03AYF64VCYB79C2MJGMOW3LOF4D9U645M5CFFOPF2T5BZIXNLCAHLVOAC27N60G672FR4GPH8I3GRSDXYEIYJIKA2FDVGLZ434NT7F7C91PM9RV0X8PETPF0JTWYOJHD3VO1FJFCBT8AE60CS2GNUKZ04EAH524TMI3L6IGUYKJUTFBVI8F4KDEVKJPOFP175VF1MCQRBHYK9WP17LDWO1D3GDYIOIIJZFTISH65020Q1LMHXUT6K53C9P' where id=10; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='ERAEHB3K6FHNAM4V65KY2TOFFLTG8T6R7A9C3QEFSO63HU8RZ14GG2VPDA37HXNNKM6SUK7A3E6N5ZV58PJCSJO5XLRXDEUSMGFAU9ZWYZHQO74M9EX7GDBVUAI455ATIVE1C2OVDOXQBUFBMAOCFZOMIF4HLJI06FADRN9ESXB8HIAL285Y3W1SLSEH9I0J53MNRHM46O2S4HV9YI0UN9T8KI2CYQLKBMFIZWDF0AQLWDCZ6BWKVN0F9N5X2T07I' where id=10; -update noar ti set v3='ERAEHB3K6FHNAM4V65KY2TOFFLTG8T6R7A9C3QEFSO63HU8RZ14GG2VPDA37HXNNKM6SUK7A3E6N5ZV58PJCSJO5XLRXDEUSMGFAU9ZWYZHQO74M9EX7GDBVUAI455ATIVE1C2OVDOXQBUFBMAOCFZOMIF4HLJI06FADRN9ESXB8HIAL285Y3W1SLSEH9I0J53MNRHM46O2S4HV9YI0UN9T8KI2CYQLKBMFIZWDF0AQLWDCZ6BWKVN0F9N5X2T07I' where id=10; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='STFEB339U1N7HFMLLPQN3OP5Z3MJE4ACO02GT0YVVIPN2GH1TZHBUPJBQHHWXZ4WCXDVGUEH8MJWTS2FKBKYHN10K2ZHBYX1MFEOXGNHNCW951QCV7RSLN2CSHQU8PVNI4R68LMRY8RS0FIAHTTGU3EDM034IM7DIS310E6C0CB64RT3E1EQRPFJBI1M5W4D3WE39RLPLESPDA4XNCRIHAYPNH9SM2PB08L1VF4QVJFFR4J1JB91KR7P4Q8RGF5JP' where id=11; -update noar ti set v0='STFEB339U1N7HFMLLPQN3OP5Z3MJE4ACO02GT0YVVIPN2GH1TZHBUPJBQHHWXZ4WCXDVGUEH8MJWTS2FKBKYHN10K2ZHBYX1MFEOXGNHNCW951QCV7RSLN2CSHQU8PVNI4R68LMRY8RS0FIAHTTGU3EDM034IM7DIS310E6C0CB64RT3E1EQRPFJBI1M5W4D3WE39RLPLESPDA4XNCRIHAYPNH9SM2PB08L1VF4QVJFFR4J1JB91KR7P4Q8RGF5JP' where id=11; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='JZU6AZDFHLO4IVEZU2VKR8SQGEKTOVBWAVCFIC6O14RAB74WD4SY503KM4GH9R035XFUHB8T6I0SS2YNPG8ZZ1H5QFWOIREHA9NCLOJCESBNIWOJ3NFVF4OGL2Y02ELEA4WNH6G01GATZLEKCJH00RJKZRAGXEIW70CC2I80L3D0RSB5EB5FJEDZD6W71P7ALCWM8S32SGAMH2UQTUJBHWS0CQXEXKW4CWJ9A1XNMN6MNUINBW5OABATA016JTWWI' where id=11; -update noar ti set v1='JZU6AZDFHLO4IVEZU2VKR8SQGEKTOVBWAVCFIC6O14RAB74WD4SY503KM4GH9R035XFUHB8T6I0SS2YNPG8ZZ1H5QFWOIREHA9NCLOJCESBNIWOJ3NFVF4OGL2Y02ELEA4WNH6G01GATZLEKCJH00RJKZRAGXEIW70CC2I80L3D0RSB5EB5FJEDZD6W71P7ALCWM8S32SGAMH2UQTUJBHWS0CQXEXKW4CWJ9A1XNMN6MNUINBW5OABATA016JTWWI' where id=11; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='UM3E5UG6NTBWZI5111D0TVLF4RPDLJQQPQFX2KOCNYIH7KDSH2ZRU3KZOWLMX8GT7795548PFBPXAL4T072X7667ZVMKRQVIXN8IPBNM749OKXL3PPTWQIN9EZ2O1NOZOPG1GC7NI57X8RP0A6RU0ZJ5PCI99E0SYA5HH3RGFRJBCVU875WQQOKLGXJ3A63QX9GVC3BOLXQFNZSRNXYNZO3W0P991R0XPUHO6FV22935OM1N1F6PBHYSDN522COV6' where id=11; -update noar ti set v2='UM3E5UG6NTBWZI5111D0TVLF4RPDLJQQPQFX2KOCNYIH7KDSH2ZRU3KZOWLMX8GT7795548PFBPXAL4T072X7667ZVMKRQVIXN8IPBNM749OKXL3PPTWQIN9EZ2O1NOZOPG1GC7NI57X8RP0A6RU0ZJ5PCI99E0SYA5HH3RGFRJBCVU875WQQOKLGXJ3A63QX9GVC3BOLXQFNZSRNXYNZO3W0P991R0XPUHO6FV22935OM1N1F6PBHYSDN522COV6' where id=11; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='RNO6912YC082O2MX8E0F1B3S6A4ZSOWV44SUWB9KR6SO5WVUK42OAAS7CFYWAJ8E5CTHXFGS8XGDBFRRQ21B8IZHJ1RQNDO7537BWAL1ZZ9J4A90UNYGZYCX8RQLHQ6OERYZ2P2AMQME2ICDZWP7OZ0SU49A0DJ39T7FS16B7H60VX5S7G54BUZY52FZM107NPTT87F4D6NRNPZHZAH14AK3EZVTKVHGBCMFZKOKB66BGMZFAQEWM433QYHRUMFSG' where id=11; -update noar ti set v3='RNO6912YC082O2MX8E0F1B3S6A4ZSOWV44SUWB9KR6SO5WVUK42OAAS7CFYWAJ8E5CTHXFGS8XGDBFRRQ21B8IZHJ1RQNDO7537BWAL1ZZ9J4A90UNYGZYCX8RQLHQ6OERYZ2P2AMQME2ICDZWP7OZ0SU49A0DJ39T7FS16B7H60VX5S7G54BUZY52FZM107NPTT87F4D6NRNPZHZAH14AK3EZVTKVHGBCMFZKOKB66BGMZFAQEWM433QYHRUMFSG' where id=11; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='ZBTYZZQ6N1D6SYSGMVI9OXXHTGB47K1AE70DXFCZ08NSOR5SQXS31Y16Q1BCHBMPUMOOCUXBPUDXRWVLLHB6X4ATXWP7HCUFF6I68KC34ZI7RIR0QRT5RJ79709QX4GGY5D8QCDJ5MSS6JDP1WO0VFP14P9WDS59ONVEBPJ58VD6A168LZCV9FES66NQ9YUDTGP9L88VHP807A15JOXY1XAG2FBEJX6QVHKCFNOK5FCV24ZWRN8TJIPU6SS5OAAHP' where id=12; -update noar ti set v0='ZBTYZZQ6N1D6SYSGMVI9OXXHTGB47K1AE70DXFCZ08NSOR5SQXS31Y16Q1BCHBMPUMOOCUXBPUDXRWVLLHB6X4ATXWP7HCUFF6I68KC34ZI7RIR0QRT5RJ79709QX4GGY5D8QCDJ5MSS6JDP1WO0VFP14P9WDS59ONVEBPJ58VD6A168LZCV9FES66NQ9YUDTGP9L88VHP807A15JOXY1XAG2FBEJX6QVHKCFNOK5FCV24ZWRN8TJIPU6SS5OAAHP' where id=12; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='P2QESD5NKTQKDUSGDDL2G74XRQW8UB1VUWTFKF3W3Z5W5U5FEZ51IHO1D39YBZK479DDSYE1E6PV9A70WDI9HHWWZ4E41Z7CY896TOSCFCW3LW3BHLY4OSBEYDCIV9XHLNQMUWKNJZHAXM3K72LPLGBTOC4IKGZSMRC8S53DH1ZHVR45QOP8OPMM3T8KXDQEPWX6VJXRMSXE81J00AQ8P31Q7BHE60MX2GRFL7F137D22IEHH5W0559W0FYKL9HHQ' where id=12; -update noar ti set v1='P2QESD5NKTQKDUSGDDL2G74XRQW8UB1VUWTFKF3W3Z5W5U5FEZ51IHO1D39YBZK479DDSYE1E6PV9A70WDI9HHWWZ4E41Z7CY896TOSCFCW3LW3BHLY4OSBEYDCIV9XHLNQMUWKNJZHAXM3K72LPLGBTOC4IKGZSMRC8S53DH1ZHVR45QOP8OPMM3T8KXDQEPWX6VJXRMSXE81J00AQ8P31Q7BHE60MX2GRFL7F137D22IEHH5W0559W0FYKL9HHQ' where id=12; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='D8ISEBZFRCZHU6FRW6QUKHYPOHL5RNMIXP4CGNSIF1LKQP03YC7EY9Y75K5OLVRTJPZXOF6WWG8A66E6JR6PSTW5K9SDA5TQH7I5A9B8EQNVWD77C1L5Y4ZL26QY6W7G31T7FKMEJCPN6ZFM2D336D6NGL7SK7ODP891GYPZGKGITMGTPT1HZN9DDX7OJEOONH6SB2R1SW01MATJ80QDHO9X7MMWI2YA3LHA29DZTOS5BZU20CHSEKRFSWBXI78OL' where id=12; -update noar ti set v2='D8ISEBZFRCZHU6FRW6QUKHYPOHL5RNMIXP4CGNSIF1LKQP03YC7EY9Y75K5OLVRTJPZXOF6WWG8A66E6JR6PSTW5K9SDA5TQH7I5A9B8EQNVWD77C1L5Y4ZL26QY6W7G31T7FKMEJCPN6ZFM2D336D6NGL7SK7ODP891GYPZGKGITMGTPT1HZN9DDX7OJEOONH6SB2R1SW01MATJ80QDHO9X7MMWI2YA3LHA29DZTOS5BZU20CHSEKRFSWBXI78OL' where id=12; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='QZZGM5VHOHC036K76P4O6CVQBE680S04LQ5M4QA1G6941S2B5IP3SQFCUJ43ZHEF6W34P0TFB9X4BMI2I5FENA6B7VZ0MKPDT62E4L35WWG0F4VO5TFGYSXBP2Y0ZCWUYR914RUAN1882LR6D2U1N2LQDPOM0UBTVV1RGBSS9AH4Z79IBYZUBTGVSUU84CISE06ANE0WP9HAAJN62GLP61H7FW17EYQP41E52PU0MTET8EPKFP6NGW26LKICF0YT3' where id=12; -update noar ti set v3='QZZGM5VHOHC036K76P4O6CVQBE680S04LQ5M4QA1G6941S2B5IP3SQFCUJ43ZHEF6W34P0TFB9X4BMI2I5FENA6B7VZ0MKPDT62E4L35WWG0F4VO5TFGYSXBP2Y0ZCWUYR914RUAN1882LR6D2U1N2LQDPOM0UBTVV1RGBSS9AH4Z79IBYZUBTGVSUU84CISE06ANE0WP9HAAJN62GLP61H7FW17EYQP41E52PU0MTET8EPKFP6NGW26LKICF0YT3' where id=12; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='CBZ1HGVRQXVSPJXLTAEIOTXNVAR709NC14JTZADASW9BUUEA3U79Z39IM2OP487JCUO5IM332BWRREU5HLK5ZSWA87GOTJUYWX6ATF50J2NKC5C16XRT4TYDHWJZPPGK9BW6EQ9OY2S7TC7UF5R1SJ56AWA60MTDY5X5L4JSC5NV5X9ZV4UJID4MNABB7UNCSRGVNUO0UACKSV4MQ4NWRZ6XB0OKM9FWFA247E1PYPDVI77OUDQVZIKOIH45IHJWQ' where id=13; -update noar ti set v0='CBZ1HGVRQXVSPJXLTAEIOTXNVAR709NC14JTZADASW9BUUEA3U79Z39IM2OP487JCUO5IM332BWRREU5HLK5ZSWA87GOTJUYWX6ATF50J2NKC5C16XRT4TYDHWJZPPGK9BW6EQ9OY2S7TC7UF5R1SJ56AWA60MTDY5X5L4JSC5NV5X9ZV4UJID4MNABB7UNCSRGVNUO0UACKSV4MQ4NWRZ6XB0OKM9FWFA247E1PYPDVI77OUDQVZIKOIH45IHJWQ' where id=13; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='610HGZ8VZ9FP7L3LMRIJOO1RZHRF0HTLRPYXWIU1C3TBCA8EWD0O80JTGXSUDLD2FNXI38W7D7VJ4NOFYJEJYLH1SZJ0NR4TXJ7RJFHKB9G9HLKN5C0GEDMYGYKLHNXI78ORWX5NI3QHCL5TIV3YRSJZVG06FQGF51VT8CENST8X4K4H2Q41I3LQ7JYKT0MKP3DY8U1289AQF6PY4XD6PJHDQEWV1DEUL0PA5BU0MKXVQVQQG8PC1MW19Z7L5388E' where id=13; -update noar ti set v1='610HGZ8VZ9FP7L3LMRIJOO1RZHRF0HTLRPYXWIU1C3TBCA8EWD0O80JTGXSUDLD2FNXI38W7D7VJ4NOFYJEJYLH1SZJ0NR4TXJ7RJFHKB9G9HLKN5C0GEDMYGYKLHNXI78ORWX5NI3QHCL5TIV3YRSJZVG06FQGF51VT8CENST8X4K4H2Q41I3LQ7JYKT0MKP3DY8U1289AQF6PY4XD6PJHDQEWV1DEUL0PA5BU0MKXVQVQQG8PC1MW19Z7L5388E' where id=13; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='BKMBYMGDF76K3BIJM0OD0QUGMIVKGDUPHXQ9YJ29Z924MAI7QFI534ZLNOFJ2RFUXM5S6YZ4FEDRH48NHSH3DTHWHX31TFDAI6UT4VT569AGI3VNXQE2J0XKZ6T2QR42TQVQ963PYD9J12D0PQ5WDODAIGDKSC1UKMHUBUA7BFK11U0MV65DQYBLPBP32VZN47WRWKZ3JKWDLB0QAZP8RNOMUP8FXS90DDCF49S154G7HMR312I2HWMY3KQDO7MZE' where id=13; -update noar ti set v2='BKMBYMGDF76K3BIJM0OD0QUGMIVKGDUPHXQ9YJ29Z924MAI7QFI534ZLNOFJ2RFUXM5S6YZ4FEDRH48NHSH3DTHWHX31TFDAI6UT4VT569AGI3VNXQE2J0XKZ6T2QR42TQVQ963PYD9J12D0PQ5WDODAIGDKSC1UKMHUBUA7BFK11U0MV65DQYBLPBP32VZN47WRWKZ3JKWDLB0QAZP8RNOMUP8FXS90DDCF49S154G7HMR312I2HWMY3KQDO7MZE' where id=13; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='EMN0BPRMR96LBBCRB2HEVSN9Q9856EJD6J6633XDMUX754HXGX4X818JUJS1MLN7XPERDZG7L7G5MG6H7VPVOY34C7JSELCYLDSWUC69LX56JADK6TPXGGVHY7RSBV7E1BFGNC4WMS0FX5PXRI8O4FSEVTONLIPL6A2ZWY3SA96PPCPP09QN8SJF42DJZQ3TRLGEI1VXCJ8GYIP8WFQRQ7KJUEOMVDKJQTM6S1LB6UC07X3K1Q46BL5FZ6ZQC8ULB' where id=13; -update noar ti set v3='EMN0BPRMR96LBBCRB2HEVSN9Q9856EJD6J6633XDMUX754HXGX4X818JUJS1MLN7XPERDZG7L7G5MG6H7VPVOY34C7JSELCYLDSWUC69LX56JADK6TPXGGVHY7RSBV7E1BFGNC4WMS0FX5PXRI8O4FSEVTONLIPL6A2ZWY3SA96PPCPP09QN8SJF42DJZQ3TRLGEI1VXCJ8GYIP8WFQRQ7KJUEOMVDKJQTM6S1LB6UC07X3K1Q46BL5FZ6ZQC8ULB' where id=13; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='2PNWKYJ0IL35C8Y0M5151XVQ63SJVXGWI2D7M2ZIICHF5P40JP9OHT4IZJSLTIFPKD8UJJEZNHATHFYOG171NHM8DEDFHPUA0XXHQM2JG1RCGWYL7IXRFNLKTGGKJDBCAJMIP6A04GU0MVOSZ9D0T34K4P11ATH0J2CHKNYFQ5ZXN4C839MYDMY98GTNI52DWA1FU4MSHKC0EL5EJBK7MEKH1FNGKRWTLDVY82BINBGNO65FH7J6Q3TJ4X5CHTW0F' where id=14; -update noar ti set v0='2PNWKYJ0IL35C8Y0M5151XVQ63SJVXGWI2D7M2ZIICHF5P40JP9OHT4IZJSLTIFPKD8UJJEZNHATHFYOG171NHM8DEDFHPUA0XXHQM2JG1RCGWYL7IXRFNLKTGGKJDBCAJMIP6A04GU0MVOSZ9D0T34K4P11ATH0J2CHKNYFQ5ZXN4C839MYDMY98GTNI52DWA1FU4MSHKC0EL5EJBK7MEKH1FNGKRWTLDVY82BINBGNO65FH7J6Q3TJ4X5CHTW0F' where id=14; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='ETS35EEO8ERWB9ATR3OL6LZ7LZKSEM4SGCFC6IQ5DRYZXLRZNHI8HYUUTC3EIO239AOS9RTBXGUJK54E6UDON5WFCYOHYX5S4263ZOAGBBGDKNAAJWWH1QWNODYBBRW232HJU5UX6442E0K9X027FUFD23U9I3GXTPBWPDF60CA23ZTQ9A1WIK5W47DHESV73DHJTUOBWPVN3JTZ5VA1X4KOET333Q5XOSPE9NZTIVXUL7HR0HBR7P6BG20G4K7NL' where id=14; -update noar ti set v1='ETS35EEO8ERWB9ATR3OL6LZ7LZKSEM4SGCFC6IQ5DRYZXLRZNHI8HYUUTC3EIO239AOS9RTBXGUJK54E6UDON5WFCYOHYX5S4263ZOAGBBGDKNAAJWWH1QWNODYBBRW232HJU5UX6442E0K9X027FUFD23U9I3GXTPBWPDF60CA23ZTQ9A1WIK5W47DHESV73DHJTUOBWPVN3JTZ5VA1X4KOET333Q5XOSPE9NZTIVXUL7HR0HBR7P6BG20G4K7NL' where id=14; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='13QZSK0KQFU1YD4VIJQJNQYS29TI6FPIP6VWPND2YN4NJ6VDTUJWAQXAI7GYM8ZWZ81976RRWXBZJH5KGA0AGGI8DRAGC7HB7Q2FVUE4TK9OWRZ2M5IWH3ZIQBVXU17PTVHWB4ORY424H104NAKYJ4XAAI93VHHF07F4SBBRIRQTYOAL0YKVOX9JUKMNG61A6CO3C66G8HJG2A83VCQ36GYUAMKFOCSGCF6PF5DCJR08PC4AFC781E0MYBKZT3PD3' where id=14; -update noar ti set v2='13QZSK0KQFU1YD4VIJQJNQYS29TI6FPIP6VWPND2YN4NJ6VDTUJWAQXAI7GYM8ZWZ81976RRWXBZJH5KGA0AGGI8DRAGC7HB7Q2FVUE4TK9OWRZ2M5IWH3ZIQBVXU17PTVHWB4ORY424H104NAKYJ4XAAI93VHHF07F4SBBRIRQTYOAL0YKVOX9JUKMNG61A6CO3C66G8HJG2A83VCQ36GYUAMKFOCSGCF6PF5DCJR08PC4AFC781E0MYBKZT3PD3' where id=14; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='INTZ7B0FKLX6FP8USN5MSOQ3DRQQGPBAYY3C3VVSW67D9X5WZPQ2H4KTQQSPWH9DJYJ1AACYL53112HJPK9KFWEVAZBCZPZU24G018YCILZOAZSBN7X9VYOXP572924AB2FGITSWCGRN5LWRZ173HVE1GSY2TKK8CANS1752PGHZLA0XQXJ4N3NE0W5W8XYARFSPI6LAPLNF143N8ZOFOLRBVKA0BQMFKEBF4AHT7AGNB1O556D5Y906Y8WA50NA3' where id=14; -update noar ti set v3='INTZ7B0FKLX6FP8USN5MSOQ3DRQQGPBAYY3C3VVSW67D9X5WZPQ2H4KTQQSPWH9DJYJ1AACYL53112HJPK9KFWEVAZBCZPZU24G018YCILZOAZSBN7X9VYOXP572924AB2FGITSWCGRN5LWRZ173HVE1GSY2TKK8CANS1752PGHZLA0XQXJ4N3NE0W5W8XYARFSPI6LAPLNF143N8ZOFOLRBVKA0BQMFKEBF4AHT7AGNB1O556D5Y906Y8WA50NA3' where id=14; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='OMUCFK4FET86VL9K4Z3D7P92NDDEMMTWUY80OHR2DU2S77LUDZ15Y0J4AUDLT0XYSJBSG4LHOSBHXCQPQLRZ0XLOUC7C3KTOC6PPDFO5RHH41TZ2BV6ZPS1FXJAEGNSDQ9E08SCM0A09QJC445OVSQDR7AM5GV7RYRWH37HL3W8V3WDJ62N4IQHKH08TXE5LQWR5Y2GFQTT5320KSEER3IBVFS4FUCD6WX3GG40T4JCCDZ659FGJA0LM7PCMP3KJV' where id=15; -update noar ti set v0='OMUCFK4FET86VL9K4Z3D7P92NDDEMMTWUY80OHR2DU2S77LUDZ15Y0J4AUDLT0XYSJBSG4LHOSBHXCQPQLRZ0XLOUC7C3KTOC6PPDFO5RHH41TZ2BV6ZPS1FXJAEGNSDQ9E08SCM0A09QJC445OVSQDR7AM5GV7RYRWH37HL3W8V3WDJ62N4IQHKH08TXE5LQWR5Y2GFQTT5320KSEER3IBVFS4FUCD6WX3GG40T4JCCDZ659FGJA0LM7PCMP3KJV' where id=15; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='YLNX5N8CQ4AY5YU90RUT1UELWH2NVKI955NUJ4PD1ZPB25NY4VB5B1BV7KE490YA5CITNJR6RIW58EEF59HVJRN2H8UEHELYTID6QUA7YYQZS0S3L5RSRDV0WIYQCKVNFMBQXXFVJB109GRIPYHRWDDJ9FJ1X8EEH7JXZXLPT0JE4PMFA5RGF9PKYR6XAP5UZ75ZKHRZZW6X1T1PLHNOSH4XISR2F2WSCJ1B1H1O373OMNNK2V8P3APCT9Q6A15LC' where id=15; -update noar ti set v1='YLNX5N8CQ4AY5YU90RUT1UELWH2NVKI955NUJ4PD1ZPB25NY4VB5B1BV7KE490YA5CITNJR6RIW58EEF59HVJRN2H8UEHELYTID6QUA7YYQZS0S3L5RSRDV0WIYQCKVNFMBQXXFVJB109GRIPYHRWDDJ9FJ1X8EEH7JXZXLPT0JE4PMFA5RGF9PKYR6XAP5UZ75ZKHRZZW6X1T1PLHNOSH4XISR2F2WSCJ1B1H1O373OMNNK2V8P3APCT9Q6A15LC' where id=15; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='UUN41LU3WL80F1PGPS1SIQ6PHIXBUCZCHAFOQVWVCOXWJVYEO1JU9LU80HQWAN8V358AJN9JL2LR0NSKKD741ANQKUYG3S82SM7POWXHHPU7BA60CK6PCPQ4C6HF44I9UTAVLWU56XZPJK05ENY9K6ICTF3YXPV1984WTPRP3AD436MPE1KXIXT9U92FVMJ6U3QMSKGNSZVXELP849ZF5SA5EVS0729282903L0APHAOSORFTR6TUW0L7DI63TTC5' where id=15; -update noar ti set v2='UUN41LU3WL80F1PGPS1SIQ6PHIXBUCZCHAFOQVWVCOXWJVYEO1JU9LU80HQWAN8V358AJN9JL2LR0NSKKD741ANQKUYG3S82SM7POWXHHPU7BA60CK6PCPQ4C6HF44I9UTAVLWU56XZPJK05ENY9K6ICTF3YXPV1984WTPRP3AD436MPE1KXIXT9U92FVMJ6U3QMSKGNSZVXELP849ZF5SA5EVS0729282903L0APHAOSORFTR6TUW0L7DI63TTC5' where id=15; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='CRJ95A8151BNBTWQPQEQ0UX3WMYZHTS5I1PMZ0RD5YQDYVXF8K0NN9YF2CEK20EE2N9DG1MZSQDVHLN9R51SHCI7DQCBXRQJ61CNXD3KYDDKOE0RSGWUHCOB4DAC0VF8OBOZXTYDCQNAWBIY4ZQXEWBJPYEUH8ZMS2J4BAES75UPGWD576U0BJZWIS6MQOFNFQATV61O9FKTJ2CRDASMPFLTJSV3YCN6KWTBW8VMRENA3CEZIQGEWQ95R2XS8BYJL' where id=15; -update noar ti set v3='CRJ95A8151BNBTWQPQEQ0UX3WMYZHTS5I1PMZ0RD5YQDYVXF8K0NN9YF2CEK20EE2N9DG1MZSQDVHLN9R51SHCI7DQCBXRQJ61CNXD3KYDDKOE0RSGWUHCOB4DAC0VF8OBOZXTYDCQNAWBIY4ZQXEWBJPYEUH8ZMS2J4BAES75UPGWD576U0BJZWIS6MQOFNFQATV61O9FKTJ2CRDASMPFLTJSV3YCN6KWTBW8VMRENA3CEZIQGEWQ95R2XS8BYJL' where id=15; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='DY5HNMY99RL9AFP3JM9WWU1VLM3K8G9L6HNAA1F61Q6ON1XEKTCS6JVLEL5LOA0C0AZFLPP1B00JHM2HVKOFF2C8KZ63CJIP8INIXF9MYNCAKHZJ4QW46MC9HCKEEP4AKX0KF98T64A4Z5H448V5RF0QHOLA85XVC2VLTEUL4W1UJGNGQ8M9KL9HJZE3C4MW9N6IOEYBQTTKUVRLWJUFSEBKYJIUHSWTUDLOG93QEHAYOJL33LTMZ6CB56BAA4KOE' where id=16; -update noar ti set v0='DY5HNMY99RL9AFP3JM9WWU1VLM3K8G9L6HNAA1F61Q6ON1XEKTCS6JVLEL5LOA0C0AZFLPP1B00JHM2HVKOFF2C8KZ63CJIP8INIXF9MYNCAKHZJ4QW46MC9HCKEEP4AKX0KF98T64A4Z5H448V5RF0QHOLA85XVC2VLTEUL4W1UJGNGQ8M9KL9HJZE3C4MW9N6IOEYBQTTKUVRLWJUFSEBKYJIUHSWTUDLOG93QEHAYOJL33LTMZ6CB56BAA4KOE' where id=16; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='YVIMS6MH43DTBXUPI2AM8DEDCP8OIPTWUU4EFKHW65ALSKSO4O7KOLLE6VIXG5CF17B7C7G2MF4ZMOFFEXTKKBEOHXJBIHZGTVBLCCL9NLDJB8R6KAVYUZ9LDV3XXBB8TTCXW0KSPYMT9JNFC9FS7RULWM03UQK55ABSOCA0D9ZOW967M3KFWNFOQUB8X8UTS0F6DFNJ2PWOX6S80JIG9RO8XFPRB20J07O6EW8UXX7L276SL5P1EB20BGTI44WHL' where id=16; -update noar ti set v1='YVIMS6MH43DTBXUPI2AM8DEDCP8OIPTWUU4EFKHW65ALSKSO4O7KOLLE6VIXG5CF17B7C7G2MF4ZMOFFEXTKKBEOHXJBIHZGTVBLCCL9NLDJB8R6KAVYUZ9LDV3XXBB8TTCXW0KSPYMT9JNFC9FS7RULWM03UQK55ABSOCA0D9ZOW967M3KFWNFOQUB8X8UTS0F6DFNJ2PWOX6S80JIG9RO8XFPRB20J07O6EW8UXX7L276SL5P1EB20BGTI44WHL' where id=16; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='4Z6W9NYSLKE1W93KP5IW301MDBX6XD5CJT8CZ9CEFKHH8A7KPWRME3KP58GGDHGJTI12FSVBS0YNQNU1PSDXWW8CVUJQIBTI8UQVDQF7BKAIU9QAD5PXY7IFUXRFVM4DFAIW6C83QFEEJRBTEZDZTHCJZ49AVPXS8UJ5S62AXAOOPW9FHYK2UNDNY06M0VUTFPIT8IG41B819E8TM9X8Z2UMRW2667OOXKEBGN9JVGL0MGENM4JTWLFG2OH1VUEBZ' where id=16; -update noar ti set v2='4Z6W9NYSLKE1W93KP5IW301MDBX6XD5CJT8CZ9CEFKHH8A7KPWRME3KP58GGDHGJTI12FSVBS0YNQNU1PSDXWW8CVUJQIBTI8UQVDQF7BKAIU9QAD5PXY7IFUXRFVM4DFAIW6C83QFEEJRBTEZDZTHCJZ49AVPXS8UJ5S62AXAOOPW9FHYK2UNDNY06M0VUTFPIT8IG41B819E8TM9X8Z2UMRW2667OOXKEBGN9JVGL0MGENM4JTWLFG2OH1VUEBZ' where id=16; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='6DCS6589XD15G2KDZKYUOECGWA9V71948FBVBSSH7CAY0VK5YW06NKXVCVET0ME4Z1MFSOD03N390VRBQK56EQ3JC7R5KHK1I69KNXLOVHEWFFQ98UK9AYCITUIU4SUHC9M4UN33JUSRL4GWHSIPP2U2A8GVBXBGPXARL9N8VE959SWWUOJKSESON2FHI0PXL0T1AZOW9GC60XS65KBRWDPHSJE13ZAQ71YWYUIDIT5AIGEYZD7EPA8MU0XCRE6VF' where id=16; -update noar ti set v3='6DCS6589XD15G2KDZKYUOECGWA9V71948FBVBSSH7CAY0VK5YW06NKXVCVET0ME4Z1MFSOD03N390VRBQK56EQ3JC7R5KHK1I69KNXLOVHEWFFQ98UK9AYCITUIU4SUHC9M4UN33JUSRL4GWHSIPP2U2A8GVBXBGPXARL9N8VE959SWWUOJKSESON2FHI0PXL0T1AZOW9GC60XS65KBRWDPHSJE13ZAQ71YWYUIDIT5AIGEYZD7EPA8MU0XCRE6VF' where id=16; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='1EX7JUJR8MQ6QW6ITYIBK4RS2BQI4I9FS6ZVBEACZQ853WXRDWWSG6GE3DWWU10YF7710U40XUVNW897MZV8G1EMQYX6XU7P0EPKF7ZTLO31A6XTQBVVPWCX8CZHWQCN0WOW3R5VIRM27D1GQGPSAKJYJ3YF6OQUIH3VFWUOBJHSAN019AL4RZWVIXIZUPFERNH9FUDJR42PLF2UE2FX4OFRF81YF3TJYM9I84J881KHMI3JBDPJDQ8TNBXHULHVF' where id=17; -update noar ti set v0='1EX7JUJR8MQ6QW6ITYIBK4RS2BQI4I9FS6ZVBEACZQ853WXRDWWSG6GE3DWWU10YF7710U40XUVNW897MZV8G1EMQYX6XU7P0EPKF7ZTLO31A6XTQBVVPWCX8CZHWQCN0WOW3R5VIRM27D1GQGPSAKJYJ3YF6OQUIH3VFWUOBJHSAN019AL4RZWVIXIZUPFERNH9FUDJR42PLF2UE2FX4OFRF81YF3TJYM9I84J881KHMI3JBDPJDQ8TNBXHULHVF' where id=17; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='M9XA630UPYUNXTSPY40QES8JDG4274PGCE7B1JN4YLL88GL6UCECK0V84OI8IU63Y2I4EZ16P44HHC0FJLNIOXVIOF1BEMH4DH81QS1966WQR8QESPC3FG0JYJBWLATLK5U20456YTI5N21TC27YBGBVH3LU8DADLPGLM07KLJ1DKSGUXOJXPZBNNG9LIS8AKK7D0JR3MOOWOKRN90EO7PTW8827W52T14RGMQ72XXJNFXPVIYHBQYOYDZUUC8WUM' where id=17; -update noar ti set v1='M9XA630UPYUNXTSPY40QES8JDG4274PGCE7B1JN4YLL88GL6UCECK0V84OI8IU63Y2I4EZ16P44HHC0FJLNIOXVIOF1BEMH4DH81QS1966WQR8QESPC3FG0JYJBWLATLK5U20456YTI5N21TC27YBGBVH3LU8DADLPGLM07KLJ1DKSGUXOJXPZBNNG9LIS8AKK7D0JR3MOOWOKRN90EO7PTW8827W52T14RGMQ72XXJNFXPVIYHBQYOYDZUUC8WUM' where id=17; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='IZULBI6J1M7JAAK559NKOU6YC45H51C6EOOWY0AQXGXZTX0007WVQL8LLY87PWSYVCUQXV0VCHHLCC82IATF9R9B9NKNDL633AQPSW075J2BXG65Q1JV7Q7P5YPQ6LCFWFEBFEZUC2OTARO4JBUUS1KKP6HWM89YIMU8AL236GU45P1JGQQCA6M7RXETNW5DHV4L82E4GZ4VCVY82E31BPPNZJAD1KJ1SOEQ8G1DJ45D04QKBQIJ80VPU82TS93BX' where id=17; -update noar ti set v2='IZULBI6J1M7JAAK559NKOU6YC45H51C6EOOWY0AQXGXZTX0007WVQL8LLY87PWSYVCUQXV0VCHHLCC82IATF9R9B9NKNDL633AQPSW075J2BXG65Q1JV7Q7P5YPQ6LCFWFEBFEZUC2OTARO4JBUUS1KKP6HWM89YIMU8AL236GU45P1JGQQCA6M7RXETNW5DHV4L82E4GZ4VCVY82E31BPPNZJAD1KJ1SOEQ8G1DJ45D04QKBQIJ80VPU82TS93BX' where id=17; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='QG5GTFR49E4F0LKAJ8WKFQUT7R8I2DIY7YCON9SPKW19YNPIHGYFGEYLQTVA8PIIRY3ZEQ80YY44ZZ1GD1CYQLJBV6SVFQBHANBPKX2RQZ8JLTK3UT6O3K527SVI036ENJ1UWFMNZW9DM6QC3MB4ZWMS8PA1K5B2Y55T30VPTWNWZAJICX9Z1TAG5400YH2TGW2Q9P1T8XON02UES0E7FEBWZ5XF5A6ME7B2SMLQWY4KO55LGEW4D25QF0RUYFUMB' where id=17; -update noar ti set v3='QG5GTFR49E4F0LKAJ8WKFQUT7R8I2DIY7YCON9SPKW19YNPIHGYFGEYLQTVA8PIIRY3ZEQ80YY44ZZ1GD1CYQLJBV6SVFQBHANBPKX2RQZ8JLTK3UT6O3K527SVI036ENJ1UWFMNZW9DM6QC3MB4ZWMS8PA1K5B2Y55T30VPTWNWZAJICX9Z1TAG5400YH2TGW2Q9P1T8XON02UES0E7FEBWZ5XF5A6ME7B2SMLQWY4KO55LGEW4D25QF0RUYFUMB' where id=17; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='8K2JZ9ZN54VC5W5YTMU4R2OL2UDKXGYAAK1X2N25MLU1G66DP4SHQQ6H6F0PBW5JTVQNQXVYTQ2OD2T6DP7MFJSJT95NC5EHRC3SVYBVTFLG3ZKAMPC3271AD3LBCUYPXGM4YPDT03QOEZ051EDD1L054XM9SOPWBZ71LFXQN7MZNU0C4Z94ZTZQ661XLDQCGJG16U8XWWXZXLS61EUOOMT2O9OZIHY5SF3GA4L8EBVVCTXCVECHANQVIYJF9TYJA' where id=18; -update noar ti set v0='8K2JZ9ZN54VC5W5YTMU4R2OL2UDKXGYAAK1X2N25MLU1G66DP4SHQQ6H6F0PBW5JTVQNQXVYTQ2OD2T6DP7MFJSJT95NC5EHRC3SVYBVTFLG3ZKAMPC3271AD3LBCUYPXGM4YPDT03QOEZ051EDD1L054XM9SOPWBZ71LFXQN7MZNU0C4Z94ZTZQ661XLDQCGJG16U8XWWXZXLS61EUOOMT2O9OZIHY5SF3GA4L8EBVVCTXCVECHANQVIYJF9TYJA' where id=18; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='P1TI3VGHO4U7XLPQU4J4BOB9061IRDSR2P8F6K7CVSK9OL3JW76HO7HA3YYS89MNTBU6YV0NTMM39Y2XQPEZX04NYJRJ3H7GAJ3VIJP28I8ZPXQ73PPQXB5T3RLBEFEJ80H89V3HS78NJ3JVNMQTQRDKVAWY32LSC7QY88EA436MWEVPJYHKSDSDAVOU9V5TH9LB0P9MDY45B8OQXHCT48GKPHKF9Y3WGRLZ3GCTL8NGANXTS2HU0466DO2E2AXNL' where id=18; -update noar ti set v1='P1TI3VGHO4U7XLPQU4J4BOB9061IRDSR2P8F6K7CVSK9OL3JW76HO7HA3YYS89MNTBU6YV0NTMM39Y2XQPEZX04NYJRJ3H7GAJ3VIJP28I8ZPXQ73PPQXB5T3RLBEFEJ80H89V3HS78NJ3JVNMQTQRDKVAWY32LSC7QY88EA436MWEVPJYHKSDSDAVOU9V5TH9LB0P9MDY45B8OQXHCT48GKPHKF9Y3WGRLZ3GCTL8NGANXTS2HU0466DO2E2AXNL' where id=18; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='0GF9EHOS7Y0HYH0RJK4TZLC4OSF5FPYO5ZGMTUGTP1J0247XMQXDCK3IIGCNJV1DLGZ9LSM3CC6H1WYWB6PET2WUZI5YWL9WTP7E2EWDXZF9IGUJTVV49736J22063ARMMO7VF0DA4HY85G2Z5CM5L536CYO9QGIF8Z2PZCAXYM6VCI7TOHLU257GLQVI04J29D6UYZ1V2TBXI4BNJZGFNW6E1258SLLOAAYMSCUKF6HC0P6B49ZBKBM8GPFEXJAN' where id=18; -update noar ti set v2='0GF9EHOS7Y0HYH0RJK4TZLC4OSF5FPYO5ZGMTUGTP1J0247XMQXDCK3IIGCNJV1DLGZ9LSM3CC6H1WYWB6PET2WUZI5YWL9WTP7E2EWDXZF9IGUJTVV49736J22063ARMMO7VF0DA4HY85G2Z5CM5L536CYO9QGIF8Z2PZCAXYM6VCI7TOHLU257GLQVI04J29D6UYZ1V2TBXI4BNJZGFNW6E1258SLLOAAYMSCUKF6HC0P6B49ZBKBM8GPFEXJAN' where id=18; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='VSJJPAWBOTXJE0RUC1FBYQZSFWY1KQ9O15HB8TABPYVIVEC591859EEHGPUMTLUBQ342QTP33RQQ793NIKBRT10LLOG0GGY4QILVRD48F1RXC10O46NYU0BDY4R7D6CVJLENGPVNUDRR6VCVJ4RGKRK5GS1Y1Q7NWCZ002AWD2A6V610FH2W2FX1X28RMH649YW6LVW1HRZ5VAYGDLYF5QM593F3891FRVN007L2TFPZCWW1WSUAOAK6U1Q69BXUS' where id=18; -update noar ti set v3='VSJJPAWBOTXJE0RUC1FBYQZSFWY1KQ9O15HB8TABPYVIVEC591859EEHGPUMTLUBQ342QTP33RQQ793NIKBRT10LLOG0GGY4QILVRD48F1RXC10O46NYU0BDY4R7D6CVJLENGPVNUDRR6VCVJ4RGKRK5GS1Y1Q7NWCZ002AWD2A6V610FH2W2FX1X28RMH649YW6LVW1HRZ5VAYGDLYF5QM593F3891FRVN007L2TFPZCWW1WSUAOAK6U1Q69BXUS' where id=18; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='J61BZEOQFZ08XSSBJ2LYGFGU741OSER0XJGABRRBAQOOC6X7VNLNANY0AEEXDSVIFZQ9N3V7KYDB1KO3S2JKKLY2PLA6C51NQ82LLG6BBTLID6EWSQP0C1U6X7L5GQ9O9CTDO0IGH66E2XMPYLL3TUZFW507CA9UYILSWZX4SLCHREKOU0JJPT0LDFG89A0TKRK9QMVG1JS1JD2BVXTNPOUHYZB3LO4MQCK3XD7S6V62QV8VLIPOTT2I5ZBUY5FIQ' where id=19; -update noar ti set v0='J61BZEOQFZ08XSSBJ2LYGFGU741OSER0XJGABRRBAQOOC6X7VNLNANY0AEEXDSVIFZQ9N3V7KYDB1KO3S2JKKLY2PLA6C51NQ82LLG6BBTLID6EWSQP0C1U6X7L5GQ9O9CTDO0IGH66E2XMPYLL3TUZFW507CA9UYILSWZX4SLCHREKOU0JJPT0LDFG89A0TKRK9QMVG1JS1JD2BVXTNPOUHYZB3LO4MQCK3XD7S6V62QV8VLIPOTT2I5ZBUY5FIQ' where id=19; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='X9SHZS550ADRHP2NFR6Z5LPL8Q3SIA03ST8FSMZ549EOVY8Q80ZVYG3BPLX4ESMJUFLGC5ILWHVFW5OM2VI8TT1GUPS3HXFDPQ7RNLNKZVJCDL96HQAG4VO26JYHV5CS836W6MUTFDH81Q6S68QLORT48SXYIKN3JJ2NK87MOJKEI9KNL5FBJEC2FTQQSYF8EWP9VTSKU3O41WN55L07H2FYVG986ERQWEUW93PTGHEL6G1PZFAOLNMDFGC37WSQN' where id=19; -update noar ti set v1='X9SHZS550ADRHP2NFR6Z5LPL8Q3SIA03ST8FSMZ549EOVY8Q80ZVYG3BPLX4ESMJUFLGC5ILWHVFW5OM2VI8TT1GUPS3HXFDPQ7RNLNKZVJCDL96HQAG4VO26JYHV5CS836W6MUTFDH81Q6S68QLORT48SXYIKN3JJ2NK87MOJKEI9KNL5FBJEC2FTQQSYF8EWP9VTSKU3O41WN55L07H2FYVG986ERQWEUW93PTGHEL6G1PZFAOLNMDFGC37WSQN' where id=19; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='MCK1ROFUKOOYQKHCHOD2VMXQZ8YHOSX2Q6XD8DPI8XV35BG1Z85DO89GVN6F7OKCTZXD87375GWB8H5QHP8TWUBKO0NVSFVBV5QWP3UB0M9O7PUTHNFRI2VL8EIWFNALBH7G8O2OSNP3X85N672891GCZD3QHU1LX740ST25UM4YJ7GTNCCM7QVLB85AKCU8QGXAQQGUJDFTPY7G6NM4ILR6NSY7E6CKU3QMZ5W3ZJ9O5Z412A464PK6LHA8DKPS4' where id=19; -update noar ti set v2='MCK1ROFUKOOYQKHCHOD2VMXQZ8YHOSX2Q6XD8DPI8XV35BG1Z85DO89GVN6F7OKCTZXD87375GWB8H5QHP8TWUBKO0NVSFVBV5QWP3UB0M9O7PUTHNFRI2VL8EIWFNALBH7G8O2OSNP3X85N672891GCZD3QHU1LX740ST25UM4YJ7GTNCCM7QVLB85AKCU8QGXAQQGUJDFTPY7G6NM4ILR6NSY7E6CKU3QMZ5W3ZJ9O5Z412A464PK6LHA8DKPS4' where id=19; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='YXT6TYZFVOPURSW0RQ3F4YJ9SFHH4E7NJOJPLDC9R48ZPUN8CDSISFKETUPGZLBB18JJ849UPAZEHMDFZ4CANRQAX2WKI740GSXOKVUOWT9KKIBP230B9ZGGSXDEW205SKNCCPCXI3181HKQCYB0TUL1JVSIH8A3A209M9VEEDGDE6B1FYFQCQO1QRJV9S57U6XBQMZ0K8BGJJQE4T7U43M058VAPXGAPKANFGQCB8P8SQ7K4DJFNUXPFKBXJTOV0' where id=19; -update noar ti set v3='YXT6TYZFVOPURSW0RQ3F4YJ9SFHH4E7NJOJPLDC9R48ZPUN8CDSISFKETUPGZLBB18JJ849UPAZEHMDFZ4CANRQAX2WKI740GSXOKVUOWT9KKIBP230B9ZGGSXDEW205SKNCCPCXI3181HKQCYB0TUL1JVSIH8A3A209M9VEEDGDE6B1FYFQCQO1QRJV9S57U6XBQMZ0K8BGJJQE4T7U43M058VAPXGAPKANFGQCB8P8SQ7K4DJFNUXPFKBXJTOV0' where id=19; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='LV01CP920RSCAZHN5VF1W9JEVFDYH596R8J8LC0MF86T3Z1UAYM45873ERUF3EEDP1GOTNSF2IGBLYIXTOI3TVFK1WI9JE0DX1R5WXCKJ9EBH115MTQM4T52S31O05GKVUZ62P9TXQ1J9QV4ZCT4VEOQN4BJKBKH4B7579YR7XP4AW9AVUVAS1P8S6K649WLYMPVMKHZOKRADCRWUARYLFIGW0IS030GMTLGQN9CKN9QR73MR15N5JTOMV9HORU1M' where id=20; -update noar ti set v0='LV01CP920RSCAZHN5VF1W9JEVFDYH596R8J8LC0MF86T3Z1UAYM45873ERUF3EEDP1GOTNSF2IGBLYIXTOI3TVFK1WI9JE0DX1R5WXCKJ9EBH115MTQM4T52S31O05GKVUZ62P9TXQ1J9QV4ZCT4VEOQN4BJKBKH4B7579YR7XP4AW9AVUVAS1P8S6K649WLYMPVMKHZOKRADCRWUARYLFIGW0IS030GMTLGQN9CKN9QR73MR15N5JTOMV9HORU1M' where id=20; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='1UFRXZG0XHBSFLK2C2P2ZO6R90R625ABCFS2N1EHDWLQC9CZ1K5CH797VU1GYB0WR220IXN50J8TOU7NFZIIA6P5BMHXBMTOJ7EHOHAU8MN09C9TV8315GV3HDKSWOLADRYLJMGVQ6EDK4G1C8UW2I59YEMMNIUW0GMIZRMX48FWGBGHZRFUK0LTQ0U12JJXNHIFNTMQ0J83A2MOJMXZMJ3VT89NPGDHZP742QU5MB8QZRJW5MNR7U5BW2FN68UHI' where id=20; -update noar ti set v1='1UFRXZG0XHBSFLK2C2P2ZO6R90R625ABCFS2N1EHDWLQC9CZ1K5CH797VU1GYB0WR220IXN50J8TOU7NFZIIA6P5BMHXBMTOJ7EHOHAU8MN09C9TV8315GV3HDKSWOLADRYLJMGVQ6EDK4G1C8UW2I59YEMMNIUW0GMIZRMX48FWGBGHZRFUK0LTQ0U12JJXNHIFNTMQ0J83A2MOJMXZMJ3VT89NPGDHZP742QU5MB8QZRJW5MNR7U5BW2FN68UHI' where id=20; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='8SK5PQ12JIT36Z8U8U2KML2USL1BVSRB3Y4OV7THU88WF1HQYP6VR9GXEU6JXXGYOPOXKGIB1UQL477WFK0Z4ROJD4X86PZC4RD5PHDRQ1LWL2TVML4KGS59CUU9Z123SWRE902TMW1988N5CI2OPZ5ENMF9SOW3T0346DL6TE0VKTFRERW0JYFGJ99OQAEUI9B5E1C1K9OFR6JRFZMFPJLSEKBUPRB1370URWGMEWD757G72OFBZR6KAUJL9CLWR' where id=20; -update noar ti set v2='8SK5PQ12JIT36Z8U8U2KML2USL1BVSRB3Y4OV7THU88WF1HQYP6VR9GXEU6JXXGYOPOXKGIB1UQL477WFK0Z4ROJD4X86PZC4RD5PHDRQ1LWL2TVML4KGS59CUU9Z123SWRE902TMW1988N5CI2OPZ5ENMF9SOW3T0346DL6TE0VKTFRERW0JYFGJ99OQAEUI9B5E1C1K9OFR6JRFZMFPJLSEKBUPRB1370URWGMEWD757G72OFBZR6KAUJL9CLWR' where id=20; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='T7ZKLIFD9NTGMHUL3XHEHR5WVSYDTDZPD43CNEAWTRAMRI63VD7X5RYPQ9PEXBG249AW68DNN7FME87SWD6IGBUQOAX54KXEOW2EGYIKRQONVFSZFJN0OO2JP9OBQ1NJ6CK8RDD4AC4QKARWMY2H0HFX156B5J43B3OTDSKUS1FIAD1H7ON77RMD5WD6IEUV37UVDTRXED5EFZV7HP9R7ZQ29D4C3V5KZADLRP1RPULWD25RSMQVXGMDG3AFT4FLB' where id=20; -update noar ti set v3='T7ZKLIFD9NTGMHUL3XHEHR5WVSYDTDZPD43CNEAWTRAMRI63VD7X5RYPQ9PEXBG249AW68DNN7FME87SWD6IGBUQOAX54KXEOW2EGYIKRQONVFSZFJN0OO2JP9OBQ1NJ6CK8RDD4AC4QKARWMY2H0HFX156B5J43B3OTDSKUS1FIAD1H7ON77RMD5WD6IEUV37UVDTRXED5EFZV7HP9R7ZQ29D4C3V5KZADLRP1RPULWD25RSMQVXGMDG3AFT4FLB' where id=20; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='W1VTJ1H2REY8435MAB757VIZ0X0Q36L8IHQB818ROI46K7QDUYYXC4YE7DIL247O2X6V0590O71IUDN3JVJP47Z24DJW0SQ0IYYWP6IOLRHF4XHEU7WK8AJ87ZPJV9E6VNY861F2PWANFB6XRXYP0CT0H3ZLDDH663Y8PWYF13MIL5QDVQF2Y2UKVMHI86SFED8HAA2XU035PSBQDSO136J2MLI8Y84GM0T08P5OGJRHJE1LVJ8HZ2UIHYFNO8OU6' where id=21; -update noar ti set v0='W1VTJ1H2REY8435MAB757VIZ0X0Q36L8IHQB818ROI46K7QDUYYXC4YE7DIL247O2X6V0590O71IUDN3JVJP47Z24DJW0SQ0IYYWP6IOLRHF4XHEU7WK8AJ87ZPJV9E6VNY861F2PWANFB6XRXYP0CT0H3ZLDDH663Y8PWYF13MIL5QDVQF2Y2UKVMHI86SFED8HAA2XU035PSBQDSO136J2MLI8Y84GM0T08P5OGJRHJE1LVJ8HZ2UIHYFNO8OU6' where id=21; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='4NS89B2R8N583FYQLH4K8JF4PA22Z2HHWCRKARP1SIKKVH4YW3QKA89V9A5KKI4GFMXREH351Z6Z8F36XV8D8YQBC76EGIV0V17Z4BZZBVVH6WJWQTM33UWSPI0VX5HLCN3YEYNUH6SZO5N7OY0CW00G3ZM3U4QXUFZEEDXI3Y1TMGKFLR1HVH17J14RYDBZ5JG78SPDTAU5GS9RI8THFAWFBJ4ON4IV3MN3G5PQPKXHFLSFWJAHK9OQLDHJL9HMZ' where id=21; -update noar ti set v1='4NS89B2R8N583FYQLH4K8JF4PA22Z2HHWCRKARP1SIKKVH4YW3QKA89V9A5KKI4GFMXREH351Z6Z8F36XV8D8YQBC76EGIV0V17Z4BZZBVVH6WJWQTM33UWSPI0VX5HLCN3YEYNUH6SZO5N7OY0CW00G3ZM3U4QXUFZEEDXI3Y1TMGKFLR1HVH17J14RYDBZ5JG78SPDTAU5GS9RI8THFAWFBJ4ON4IV3MN3G5PQPKXHFLSFWJAHK9OQLDHJL9HMZ' where id=21; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='A0LMSBWZ9N9HNOEL7F8JYWRD40FBX2BQJ5PZMJCDQFPWP9B3YFYNHXDLYLXIIRR00I163U773YB1J3HKXRT77S0FW734KHZ6M14PU8BZJGWV9U22H3O6EC1SZRNTXQXGQ584YBDN3CKTGSFH6RFO8N3M30HQN7O06M5HG62DMVF3UIHE56FM1NS2CVGVCQ86TFBI8N1K4NSIG0GG4SOHAQ3JN69EN84RKP5O7MV2LZQVORM2GQZ3U612OTF40N7EM' where id=21; -update noar ti set v2='A0LMSBWZ9N9HNOEL7F8JYWRD40FBX2BQJ5PZMJCDQFPWP9B3YFYNHXDLYLXIIRR00I163U773YB1J3HKXRT77S0FW734KHZ6M14PU8BZJGWV9U22H3O6EC1SZRNTXQXGQ584YBDN3CKTGSFH6RFO8N3M30HQN7O06M5HG62DMVF3UIHE56FM1NS2CVGVCQ86TFBI8N1K4NSIG0GG4SOHAQ3JN69EN84RKP5O7MV2LZQVORM2GQZ3U612OTF40N7EM' where id=21; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='NZS96BSKLCQF9IT0W1P1C3HB61PCORQDT0MBFBYMPHPOC07VHTEVXUIA8KDFR5TNSIJ4JTECMAZC1730AWPHMTN9RTVKKANK4Z4H4DHO3M2ZWICK84NJ4CS2QK6G8URGBVWGJ4N7HRN2UW82JF99Y9KRXM45O0W7CIPOMQ4U4VL7OAWMATGRWCHLEF5OOME1UFYHRNKMJEAABEP472J7MNTL20L94OS835OQR5F43RMT2I1CIZM4GERKNVQM90QIZ' where id=21; -update noar ti set v3='NZS96BSKLCQF9IT0W1P1C3HB61PCORQDT0MBFBYMPHPOC07VHTEVXUIA8KDFR5TNSIJ4JTECMAZC1730AWPHMTN9RTVKKANK4Z4H4DHO3M2ZWICK84NJ4CS2QK6G8URGBVWGJ4N7HRN2UW82JF99Y9KRXM45O0W7CIPOMQ4U4VL7OAWMATGRWCHLEF5OOME1UFYHRNKMJEAABEP472J7MNTL20L94OS835OQR5F43RMT2I1CIZM4GERKNVQM90QIZ' where id=21; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='UGBZLIBD8CC75F2WQUKFPQJIO0XXHNYJW03ZKO4N0PLCDYNGJNJC7EC5VZLLGBL9SXACXN0VD5RJWG2ERIYRSY0J3P5TULBECQM03BXM0RB5JCBZL6GPPQQXUQGXDDHJ9MKO14OF3DEIW308QTWQ00E0M96QB4CAQGFE79Q28F649ERLALRVGG9BJM2W2NJAW5QHOC71I709WYWQZKLYJ87MTC9IB8CJI8X50D64AEZQPY3BDY00XY61AW0IFDBIL' where id=22; -update noar ti set v0='UGBZLIBD8CC75F2WQUKFPQJIO0XXHNYJW03ZKO4N0PLCDYNGJNJC7EC5VZLLGBL9SXACXN0VD5RJWG2ERIYRSY0J3P5TULBECQM03BXM0RB5JCBZL6GPPQQXUQGXDDHJ9MKO14OF3DEIW308QTWQ00E0M96QB4CAQGFE79Q28F649ERLALRVGG9BJM2W2NJAW5QHOC71I709WYWQZKLYJ87MTC9IB8CJI8X50D64AEZQPY3BDY00XY61AW0IFDBIL' where id=22; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='U2D0N9XSKPXZXC19LLNV01AFVZWMK1T46MEWT7CN1HU839QKJQH1KV4QIQRU8KJ2BEVAV4T6AG0MQ6QKDQBUU35EKLH8EIXLMVMEPI8IEZCAS9256XIIP0B7YZT9FAB7DMXD7MUBNKFP5XQW70EQE4WS5MOKSWYQRJ4DWE0NMPU9NE8DRK9NNEDTMVP2PDW2PJXX5MIVSH9T8TD2OF9WBTK9RP357D9DGUSRXR4AT7F9AGP7ALLRP5JUHJ02F2Y7B' where id=22; -update noar ti set v1='U2D0N9XSKPXZXC19LLNV01AFVZWMK1T46MEWT7CN1HU839QKJQH1KV4QIQRU8KJ2BEVAV4T6AG0MQ6QKDQBUU35EKLH8EIXLMVMEPI8IEZCAS9256XIIP0B7YZT9FAB7DMXD7MUBNKFP5XQW70EQE4WS5MOKSWYQRJ4DWE0NMPU9NE8DRK9NNEDTMVP2PDW2PJXX5MIVSH9T8TD2OF9WBTK9RP357D9DGUSRXR4AT7F9AGP7ALLRP5JUHJ02F2Y7B' where id=22; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='WGPUFZ2V2NUJ8AKGWBFY35R817A5NUEK3RPA0K3441W4NMED0MP0777CCBCNM32CNNAQFCZ61L8HRBTQZ8P5J5RQ69E47PFBVJPKM3E9G88SD8BWSW133QGSLWQUNT7O5VDDUST1ZEEYO93JAN9F0SSJIQKTVUAR5EO0EW4NSURB021ITS4WM9AORN85A6JK29M7LTY28PT150WMHUXO28H7QH1O4EL90EF7NNLL8Z17HPLURNT3L88EDG4IAQ3GG' where id=22; -update noar ti set v2='WGPUFZ2V2NUJ8AKGWBFY35R817A5NUEK3RPA0K3441W4NMED0MP0777CCBCNM32CNNAQFCZ61L8HRBTQZ8P5J5RQ69E47PFBVJPKM3E9G88SD8BWSW133QGSLWQUNT7O5VDDUST1ZEEYO93JAN9F0SSJIQKTVUAR5EO0EW4NSURB021ITS4WM9AORN85A6JK29M7LTY28PT150WMHUXO28H7QH1O4EL90EF7NNLL8Z17HPLURNT3L88EDG4IAQ3GG' where id=22; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='PKP6NQBE0B5BDU8R7HYUAZKYU1C9AFI2OUWA3DTN0U3I6HZBF4NDE2AHLZFN355GDYTVB0ACHAUQRJ0DK3ZRJHUQU1WHQDZDV8AXUP77364HFEUT10KZ96C43IHITGB0HXMUT5G76269RH1VEQ9J29JW3GZZNOQ85TAZUKZXTPE2R4GY9RXIATB1S50EA8F4Q272CVZAQ3FP886ZHJRPZ3YSD3O9S7IRHWFUMRVGMEFB4702JZUJD874Z5EQGOJ4X' where id=22; -update noar ti set v3='PKP6NQBE0B5BDU8R7HYUAZKYU1C9AFI2OUWA3DTN0U3I6HZBF4NDE2AHLZFN355GDYTVB0ACHAUQRJ0DK3ZRJHUQU1WHQDZDV8AXUP77364HFEUT10KZ96C43IHITGB0HXMUT5G76269RH1VEQ9J29JW3GZZNOQ85TAZUKZXTPE2R4GY9RXIATB1S50EA8F4Q272CVZAQ3FP886ZHJRPZ3YSD3O9S7IRHWFUMRVGMEFB4702JZUJD874Z5EQGOJ4X' where id=22; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='8XUE96NUSYCBKQM1BRH2WAN8Z9E46UJOTOPZ9EZF1STTM8RB0T0ODHXS78LP7JL8XJTQ2KMEQ5TSQ3FJ88TA675FNPON62G07XCO9O9ODTCVN298RPMT22V96VDKGDR0FN74MVEBC9AHJ3MKS1U2Q8WO3EMCFZ10VKRGWGTH3C2FSLQPSJOOMR02OICALM8IUIY1DGPUY2SRWW3SP6W1NDRALQTEIBW3DDDTMOR2ZPHE2CKU9H6XGX0D070GNE94L' where id=23; -update noar ti set v0='8XUE96NUSYCBKQM1BRH2WAN8Z9E46UJOTOPZ9EZF1STTM8RB0T0ODHXS78LP7JL8XJTQ2KMEQ5TSQ3FJ88TA675FNPON62G07XCO9O9ODTCVN298RPMT22V96VDKGDR0FN74MVEBC9AHJ3MKS1U2Q8WO3EMCFZ10VKRGWGTH3C2FSLQPSJOOMR02OICALM8IUIY1DGPUY2SRWW3SP6W1NDRALQTEIBW3DDDTMOR2ZPHE2CKU9H6XGX0D070GNE94L' where id=23; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='HFRFDS0MIO9IXBXBAYGZ5UNFH9WDBR0IL9OXTNII28OXZN6BA8XNLTXGKNQIL7220BTDHN6UFD60MI7FYOH691T0ECE7GBJ26G03R9OFX35IVATM9HVKV5BXDO7JVOY9LDNMCUXZ9Z3F37RM0FON3PNSO98LUOZZSTUFIUK90S2ANW5EHD5THE14OPTPX9OKY233Y5NKQUKNE5PMH25E8BS9EJIZJZ9D9S4C9GNW37MUPFJORRRCFG2QMDZY2SP7G' where id=23; -update noar ti set v1='HFRFDS0MIO9IXBXBAYGZ5UNFH9WDBR0IL9OXTNII28OXZN6BA8XNLTXGKNQIL7220BTDHN6UFD60MI7FYOH691T0ECE7GBJ26G03R9OFX35IVATM9HVKV5BXDO7JVOY9LDNMCUXZ9Z3F37RM0FON3PNSO98LUOZZSTUFIUK90S2ANW5EHD5THE14OPTPX9OKY233Y5NKQUKNE5PMH25E8BS9EJIZJZ9D9S4C9GNW37MUPFJORRRCFG2QMDZY2SP7G' where id=23; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='G3PLP00WZ7GHLSPSB5JGEFIBVKUDM35OMABXTO7UJXZHWEB35N7H4E0M1TYPFNLIMXCT4REBMNCRWUN3XDVJEWLUUU0A3KA1ASNTJK0RKSW8B7LJYJOAQIT1HP1ZJ4PVDHA9FLVQAWTKZTZU66V6VW7O0F9TK9KKDC7QRADR6DA70YQM7MCQRRENIYHFSJRPJTM54JV8K9FOLZ8G4ZSQUZ9794EAEIQ3NOCC2IQ6NPX7NDYACVKZ3UYL9O4WE88Q8' where id=23; -update noar ti set v2='G3PLP00WZ7GHLSPSB5JGEFIBVKUDM35OMABXTO7UJXZHWEB35N7H4E0M1TYPFNLIMXCT4REBMNCRWUN3XDVJEWLUUU0A3KA1ASNTJK0RKSW8B7LJYJOAQIT1HP1ZJ4PVDHA9FLVQAWTKZTZU66V6VW7O0F9TK9KKDC7QRADR6DA70YQM7MCQRRENIYHFSJRPJTM54JV8K9FOLZ8G4ZSQUZ9794EAEIQ3NOCC2IQ6NPX7NDYACVKZ3UYL9O4WE88Q8' where id=23; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='42ZSXXWCVHS66K7MKGFW3YM204GW4RVV8TQBPMFFD5GIHDZ24YPLHGHXNHUJRRRMMCQCJN2C9DQACGUJIL582T0LCFU74B3312AFDAR1O2XWT3QTGHWEZD3EK3C8E7FP38ZP82UH7S1OC8LW18AZZRIR5I9UKAKWYYWAYK1JV2UE6EDZA66IJZEGOFQD5G51QVIT9A35ZKWTHE587Q894KJCKL0J07G5XVJEL71Z40MY1MBUQI0N3XL50YRNZFISZ' where id=23; -update noar ti set v3='42ZSXXWCVHS66K7MKGFW3YM204GW4RVV8TQBPMFFD5GIHDZ24YPLHGHXNHUJRRRMMCQCJN2C9DQACGUJIL582T0LCFU74B3312AFDAR1O2XWT3QTGHWEZD3EK3C8E7FP38ZP82UH7S1OC8LW18AZZRIR5I9UKAKWYYWAYK1JV2UE6EDZA66IJZEGOFQD5G51QVIT9A35ZKWTHE587Q894KJCKL0J07G5XVJEL71Z40MY1MBUQI0N3XL50YRNZFISZ' where id=23; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='7J8CHYLGKRVOP13WX9VZ5U4NTMQ0AGPA7RPFQG28LGZD6RYMNIIB99BP1A7I5M0Z3THBS99G3ITMSFAISAR9QFMDHECURHU2MMEGM0BL97UXT9F4622I7VISAYE8ERTOU5HVC1CYX7IOBQDTS9T9ADDLNOOC9NEJPBKL09TMX61SOI83M3BLMLS2SFJ9GRSLUYNCEHHK0MUU6C0XSSB8JJTHDEDQVEY54XG6VFFOZ5IT2C38KNZPOFK2UP0XEPECQ' where id=24; -update noar ti set v0='7J8CHYLGKRVOP13WX9VZ5U4NTMQ0AGPA7RPFQG28LGZD6RYMNIIB99BP1A7I5M0Z3THBS99G3ITMSFAISAR9QFMDHECURHU2MMEGM0BL97UXT9F4622I7VISAYE8ERTOU5HVC1CYX7IOBQDTS9T9ADDLNOOC9NEJPBKL09TMX61SOI83M3BLMLS2SFJ9GRSLUYNCEHHK0MUU6C0XSSB8JJTHDEDQVEY54XG6VFFOZ5IT2C38KNZPOFK2UP0XEPECQ' where id=24; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='D8PJ4MPF1UB0G1QBAKWA2XZ5DPHM7CCT4WAN0DJ0T4VGLW9S33PQA2FG59VSPUXMK0KDHK7WH42A82I6LBYPZDULQUZ1H9GCPH1I7SWMZHYPHX94FKY051OXN83ITWUID6AY3RJ0SR5I15IQR1MH2SWIADQKPYQ9IZZYI40XRLAEX31VKAZVYZJ0I2NQ2P9AL3J0E5YE4WT9FZBQ139GL3TXP476LQ60EOD75F8WVQ38N1G7H8YO5592L5QYT8I0E' where id=24; -update noar ti set v1='D8PJ4MPF1UB0G1QBAKWA2XZ5DPHM7CCT4WAN0DJ0T4VGLW9S33PQA2FG59VSPUXMK0KDHK7WH42A82I6LBYPZDULQUZ1H9GCPH1I7SWMZHYPHX94FKY051OXN83ITWUID6AY3RJ0SR5I15IQR1MH2SWIADQKPYQ9IZZYI40XRLAEX31VKAZVYZJ0I2NQ2P9AL3J0E5YE4WT9FZBQ139GL3TXP476LQ60EOD75F8WVQ38N1G7H8YO5592L5QYT8I0E' where id=24; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='4ZJVIU9H0VJZDIJB32Z1HHDB0WQVP1PIKF07DJRYW5P6GNID1DKJWNNCO32S164MREKD2DWC2KZKNDGD5SZ1G0NZTEMI87CA9MHVJJ9FVB5I9AS8A5WH8R377XHKORXNCU2NH2I3S85IOGFNHJS6SF2MXQ8IDV8X3A0RQ6V9M0T4Q44KZKB9508INMR7DMTKDC3Y0WBQUZUFYDQPB53X1X2CNIAQL5Q8MEHNIH3V0SQBDJR5B934RP236UVTJUXOM' where id=24; -update noar ti set v2='4ZJVIU9H0VJZDIJB32Z1HHDB0WQVP1PIKF07DJRYW5P6GNID1DKJWNNCO32S164MREKD2DWC2KZKNDGD5SZ1G0NZTEMI87CA9MHVJJ9FVB5I9AS8A5WH8R377XHKORXNCU2NH2I3S85IOGFNHJS6SF2MXQ8IDV8X3A0RQ6V9M0T4Q44KZKB9508INMR7DMTKDC3Y0WBQUZUFYDQPB53X1X2CNIAQL5Q8MEHNIH3V0SQBDJR5B934RP236UVTJUXOM' where id=24; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='53ESDP7LESASZGW8TQ767HZP425HAAKXUYFQILKVAALNWOXZM6HK0N4MEF4PAHZ7EYAI1S17P6MC0IRBXOBULT45WVJECYT27YLYDU53YUHR462N0DSGTK6P47S9VJD6RMWIQKKQ4UGN7NJRTWB8CXPU727HVTP0IMR69FB50Y6O6S74UO4OCOM3TOD8P6XSL1BQXH2NH4DQPFOIWWN9SXU1227LJ6UN6K7R9476MZYZTFKK4XFS1WSXHG3P14OKP' where id=24; -update noar ti set v3='53ESDP7LESASZGW8TQ767HZP425HAAKXUYFQILKVAALNWOXZM6HK0N4MEF4PAHZ7EYAI1S17P6MC0IRBXOBULT45WVJECYT27YLYDU53YUHR462N0DSGTK6P47S9VJD6RMWIQKKQ4UGN7NJRTWB8CXPU727HVTP0IMR69FB50Y6O6S74UO4OCOM3TOD8P6XSL1BQXH2NH4DQPFOIWWN9SXU1227LJ6UN6K7R9476MZYZTFKK4XFS1WSXHG3P14OKP' where id=24; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='MD7VLTYM9E79UYYML4O0W1XSTYJ7BHYDCAINIRSFNRI7WTPWGYNXGE7LIZVYO0VIAB4U408XG192QMCKZ6JV7NXPPRATQ86JZQIN2XAZSG6UB41SUTGDX7S5HRTJMEXJFTBR0A32ICY6P6PBYZAL5ZBSD0F13VG5AHWGPRKQIK5AVDFSFVZQHJXOXFV28GIMCU9W94EP6TTILLSN0TLT7QNZ2PD8TCXDFF7FVRJUXY22S9ZP93VQQHQBCLY80Y8WQ' where id=25; -update noar ti set v0='MD7VLTYM9E79UYYML4O0W1XSTYJ7BHYDCAINIRSFNRI7WTPWGYNXGE7LIZVYO0VIAB4U408XG192QMCKZ6JV7NXPPRATQ86JZQIN2XAZSG6UB41SUTGDX7S5HRTJMEXJFTBR0A32ICY6P6PBYZAL5ZBSD0F13VG5AHWGPRKQIK5AVDFSFVZQHJXOXFV28GIMCU9W94EP6TTILLSN0TLT7QNZ2PD8TCXDFF7FVRJUXY22S9ZP93VQQHQBCLY80Y8WQ' where id=25; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='527RZK4NO6ZJMXS85715TCM5ZRSCEJQKJCFICVAOL3ODY6EH1R4U2VD26V1T1KUHU01LX9X28O03I0DKYWLEPC8NLUR1Z74YY7N9XLY1R171QJPKGIPHU5QQIP8LU9M2WMVWVTNSOMHA5KS28R8HFZLDYSDYDA0DG2Y9W3AZ54IZ33CZNJ3N4FO9MA47WHF42PGTIO7NWDUK7KYGWTMM08AWP53Q6MMVDIY31P1NDAKFAW8R7QVC4A78C7ARRWLOP' where id=25; -update noar ti set v1='527RZK4NO6ZJMXS85715TCM5ZRSCEJQKJCFICVAOL3ODY6EH1R4U2VD26V1T1KUHU01LX9X28O03I0DKYWLEPC8NLUR1Z74YY7N9XLY1R171QJPKGIPHU5QQIP8LU9M2WMVWVTNSOMHA5KS28R8HFZLDYSDYDA0DG2Y9W3AZ54IZ33CZNJ3N4FO9MA47WHF42PGTIO7NWDUK7KYGWTMM08AWP53Q6MMVDIY31P1NDAKFAW8R7QVC4A78C7ARRWLOP' where id=25; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='JFG1272IZ1DYJNXK3YRXFOS9N0PUTD2Q5PU5R0XQQ34YCU1JJG9UFKUCMEL0RH59GYETR29E12ZAPJ7XO82BSXA2OLZ33Y5HP1ZSJ1D4EDFWZC9JQE3GFZ9Q3YHPY9GWRCLXTARG7EVOSPFR11M5WQPEWK7QFOSR1GRY1AQPSV3XT9JD35KIMRS72KWRMFZBGHIMD9FC4G6TI01C1IJBS1JOL2Y0RPE2Q0IPEJINOTI5KV4MB3ZUCRWO0COXOPDYP' where id=25; -update noar ti set v2='JFG1272IZ1DYJNXK3YRXFOS9N0PUTD2Q5PU5R0XQQ34YCU1JJG9UFKUCMEL0RH59GYETR29E12ZAPJ7XO82BSXA2OLZ33Y5HP1ZSJ1D4EDFWZC9JQE3GFZ9Q3YHPY9GWRCLXTARG7EVOSPFR11M5WQPEWK7QFOSR1GRY1AQPSV3XT9JD35KIMRS72KWRMFZBGHIMD9FC4G6TI01C1IJBS1JOL2Y0RPE2Q0IPEJINOTI5KV4MB3ZUCRWO0COXOPDYP' where id=25; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='AZ2G226Q2R8HNJTTSVAN59A0KJ7ZK6LE58GEJV3IANTVLBM6F8XW27URGZLC0R4SVGJC78U0UXWJANUYHC0UC6XRQA78F9F8WB0OS6U7XO33S2NGZDBW34KPAQLEDQDZP9GC0U5SJCUTT6EC2VU7F2ZRGL3SWUHCY33B34RC6MIB2K76R3S2NTUFSWF0SPU8TI244CMJM330JBZKAXALUTRAQJEIRN6WID56PX8CWXYXF6UOI9N79TDG9SR982YB0' where id=25; -update noar ti set v3='AZ2G226Q2R8HNJTTSVAN59A0KJ7ZK6LE58GEJV3IANTVLBM6F8XW27URGZLC0R4SVGJC78U0UXWJANUYHC0UC6XRQA78F9F8WB0OS6U7XO33S2NGZDBW34KPAQLEDQDZP9GC0U5SJCUTT6EC2VU7F2ZRGL3SWUHCY33B34RC6MIB2K76R3S2NTUFSWF0SPU8TI244CMJM330JBZKAXALUTRAQJEIRN6WID56PX8CWXYXF6UOI9N79TDG9SR982YB0' where id=25; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='XGWW4COVKK098H85IWP096PUZ8KR80M4WL0ZLE5PRQ7D7M8A1BWNRPVWWXFFNFQS1KL6WE0GEN29QATEKY7350QA2KOSPDV3CDGA5K2CLNQ9QK3UH6ZC31Q5KDQG06EF945V68EM6KCN7B7HQ77IW8P5F7T4XEH1IEVD212F10G8YM61YWAZBGPPQV4H98ZTLZZSQMQXEH5JGFM9ZZ19YY3MHGK8W07JW27F9NYA2J1RF9F00ZSWZWMRZZBXDXQPI' where id=26; -update noar ti set v0='XGWW4COVKK098H85IWP096PUZ8KR80M4WL0ZLE5PRQ7D7M8A1BWNRPVWWXFFNFQS1KL6WE0GEN29QATEKY7350QA2KOSPDV3CDGA5K2CLNQ9QK3UH6ZC31Q5KDQG06EF945V68EM6KCN7B7HQ77IW8P5F7T4XEH1IEVD212F10G8YM61YWAZBGPPQV4H98ZTLZZSQMQXEH5JGFM9ZZ19YY3MHGK8W07JW27F9NYA2J1RF9F00ZSWZWMRZZBXDXQPI' where id=26; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='LSNNWGAB5OQACFE1YHR2JEF13EHQYA6CMOKARHRQF6F1BGXXHPHED9L2VYYS5SOBNBC78HGVA95C7JQTL7DBARI7JJW6KN7ZY0C8S7RYVKTBHG93WPXM8SE2WG930Y3S0PS2PQR049107ZYWLGCROSZABXOQO7PDJE7JACBFQLILIVCFYIOEW9BGX5DPNIHEAC22CQWVMAQZCF3AIQYV4MIM7672BJIYN2QTQFVKA9H1QEWCSQV2HPFS6YFMSKWHF' where id=26; -update noar ti set v1='LSNNWGAB5OQACFE1YHR2JEF13EHQYA6CMOKARHRQF6F1BGXXHPHED9L2VYYS5SOBNBC78HGVA95C7JQTL7DBARI7JJW6KN7ZY0C8S7RYVKTBHG93WPXM8SE2WG930Y3S0PS2PQR049107ZYWLGCROSZABXOQO7PDJE7JACBFQLILIVCFYIOEW9BGX5DPNIHEAC22CQWVMAQZCF3AIQYV4MIM7672BJIYN2QTQFVKA9H1QEWCSQV2HPFS6YFMSKWHF' where id=26; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='GP24FL97JZGRHJZE652AXEA2HGD6G9ZTFTD3A6XCR9DB3FSTFX5TZ1J2RD8OIVLJ06UTKP5FWN1LF0N9W04N0HTYK2YFKLVHXYDVDJ82MKPIDXTDSFQVKL0UJ6FL3VAEV4IZYKTWW9Z8UKVANXSGWKDBJ2VKWUNR8EG3Z3Y3SOR2JPOD78GXBAWO6CNSU4KG038RVWA50IT8V0QRQXBQZLBCL7NSBIKX9V6O9CB0B8RV8WF1J65CT4HZPB7A37444' where id=26; -update noar ti set v2='GP24FL97JZGRHJZE652AXEA2HGD6G9ZTFTD3A6XCR9DB3FSTFX5TZ1J2RD8OIVLJ06UTKP5FWN1LF0N9W04N0HTYK2YFKLVHXYDVDJ82MKPIDXTDSFQVKL0UJ6FL3VAEV4IZYKTWW9Z8UKVANXSGWKDBJ2VKWUNR8EG3Z3Y3SOR2JPOD78GXBAWO6CNSU4KG038RVWA50IT8V0QRQXBQZLBCL7NSBIKX9V6O9CB0B8RV8WF1J65CT4HZPB7A37444' where id=26; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='IWJJ8IXOFW2KT60CO6UMA15QEWE0RJ5YKJFZ7MJ4UF62Y2LXEU3SIKUBL4GBBCSDQ88ILE7LSEEDX3JQ3IK5GC6XO07KFFHA8OM4BZ983ZVCJA9V7VFZ62Q38Z06K8CXFGPS4KMG5L6TUG6SOWBE3A4UZ6TJU9NU6XPEDFAKSR9K2KDO64K9NUCITIXK2PAHU12C62S9N6FNOG27DO5A44W89FD4RS709L1KW89ZWCC7Z2K8ZY8QI6IUZAPDVRKOD' where id=26; -update noar ti set v3='IWJJ8IXOFW2KT60CO6UMA15QEWE0RJ5YKJFZ7MJ4UF62Y2LXEU3SIKUBL4GBBCSDQ88ILE7LSEEDX3JQ3IK5GC6XO07KFFHA8OM4BZ983ZVCJA9V7VFZ62Q38Z06K8CXFGPS4KMG5L6TUG6SOWBE3A4UZ6TJU9NU6XPEDFAKSR9K2KDO64K9NUCITIXK2PAHU12C62S9N6FNOG27DO5A44W89FD4RS709L1KW89ZWCC7Z2K8ZY8QI6IUZAPDVRKOD' where id=26; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='40ET51DFIRBAZZ7PD57GHKU1UL5TXXPR6VGLXZ13VUOARD8V9TWWYOFF891WI0Z004ZSSJ6PKZ808YO4D2YF0QGIAXHDXI2WJXHCKST2V8SVTHHU1TVJ9IB8AVA6MHXWWM0418B64H7DEAMUFY7JPIBIDWVYXTHP42JHL7GIRP4HGVR4MRGQUBXUSJJGKYF5FWT2PIQA102TBFA9Y17HPGRVGZ7LMHKC9FE7DWV2C1NNTJCZLS1B9VU38QFX0WR1L' where id=27; -update noar ti set v0='40ET51DFIRBAZZ7PD57GHKU1UL5TXXPR6VGLXZ13VUOARD8V9TWWYOFF891WI0Z004ZSSJ6PKZ808YO4D2YF0QGIAXHDXI2WJXHCKST2V8SVTHHU1TVJ9IB8AVA6MHXWWM0418B64H7DEAMUFY7JPIBIDWVYXTHP42JHL7GIRP4HGVR4MRGQUBXUSJJGKYF5FWT2PIQA102TBFA9Y17HPGRVGZ7LMHKC9FE7DWV2C1NNTJCZLS1B9VU38QFX0WR1L' where id=27; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='EXXL17US3FVZAEYCR2UOO90O3YAOXXXTL2HL6981VLH19HUACVG6VH24JXJAG0V323Q05ZPM15KNNLLT0JV9B4VSFDKZYBF7D92SNGK3YS31FLWPPAWVPPDPTDK22BZKRAENP6JIPDOYF0EI4TTF9T6F5DBYVRJ2DYROT592TNMS4A9H4XHLJSKXF3IJKSFJ2UDRHBVRBF4IX2HX2ZAM8VJ00HV3JR8AYEA0ZI8QQI57CC66JUOHTRZ051HCE7CUC' where id=27; -update noar ti set v1='EXXL17US3FVZAEYCR2UOO90O3YAOXXXTL2HL6981VLH19HUACVG6VH24JXJAG0V323Q05ZPM15KNNLLT0JV9B4VSFDKZYBF7D92SNGK3YS31FLWPPAWVPPDPTDK22BZKRAENP6JIPDOYF0EI4TTF9T6F5DBYVRJ2DYROT592TNMS4A9H4XHLJSKXF3IJKSFJ2UDRHBVRBF4IX2HX2ZAM8VJ00HV3JR8AYEA0ZI8QQI57CC66JUOHTRZ051HCE7CUC' where id=27; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='I2TVEX131HUB85YRMIOQ0EZ877JJV9NN3829JZII2UUL8W6JDZ2YTTPUJEOOSZO70DEWQ219HQB4AUZQ1PK5AR7LSXZBRMJ79LT7HDO3F628313340XLC8XW9MYKLNCKHXIDLWN3719OQ6DKVD9M2ICE7H2EXGOM2QPFMXQXOP94IOJ3E7HB2CBFP5MOKNOO5VQHE6X08F59UZ987V7CIJDVS8L5FY4710XRA3ATR0R13ZS4U06TZJGFHY7A85G98' where id=27; -update noar ti set v2='I2TVEX131HUB85YRMIOQ0EZ877JJV9NN3829JZII2UUL8W6JDZ2YTTPUJEOOSZO70DEWQ219HQB4AUZQ1PK5AR7LSXZBRMJ79LT7HDO3F628313340XLC8XW9MYKLNCKHXIDLWN3719OQ6DKVD9M2ICE7H2EXGOM2QPFMXQXOP94IOJ3E7HB2CBFP5MOKNOO5VQHE6X08F59UZ987V7CIJDVS8L5FY4710XRA3ATR0R13ZS4U06TZJGFHY7A85G98' where id=27; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='BEO2IUTH4NNLYU7P4J3X59GRPRPYXRKTTY1QRD5JA7EQJC7YMOH47YSBPV0NIQVDV9PG32ZGPYYDOUX3IO7WLKL9AWBQJ40ZYIRW03G050XR8AL9UHWLCJY0R8SICLOEDOLD3T3CID0BMCGPD2NCF6FUO4LFGX3264J0VG37H86LHHAVCDYMNS1F4SA60XD15ZV72U64I8N2A6Z7V2FSZHXRTEHDDA85Q9W7PVRSZ7B3QFTP09MLZBBIN9CD6U0I8' where id=27; -update noar ti set v3='BEO2IUTH4NNLYU7P4J3X59GRPRPYXRKTTY1QRD5JA7EQJC7YMOH47YSBPV0NIQVDV9PG32ZGPYYDOUX3IO7WLKL9AWBQJ40ZYIRW03G050XR8AL9UHWLCJY0R8SICLOEDOLD3T3CID0BMCGPD2NCF6FUO4LFGX3264J0VG37H86LHHAVCDYMNS1F4SA60XD15ZV72U64I8N2A6Z7V2FSZHXRTEHDDA85Q9W7PVRSZ7B3QFTP09MLZBBIN9CD6U0I8' where id=27; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='1PDPPXTL3Q3N3ODSP63B7TX83IM7SOEG4NFY6OI1RGLVT7SISVSKZQYGJ3C6B5KCOYMQ38TO12I068XH31DJY8K6CZ361KKZSUEC548O569N46BRI2GP43LUD817L8KLLFVWMVDLBPRQN294SBPR7M2VETHS72W1IFG4BY29GZ9S5E3IB8TH63Z4O07GYHNC38YXPFUZKPPJV6CP608VJI4RPANS302SB83S5MAOJU5IW991CCWC5RPROEQ7GK1PI' where id=28; -update noar ti set v0='1PDPPXTL3Q3N3ODSP63B7TX83IM7SOEG4NFY6OI1RGLVT7SISVSKZQYGJ3C6B5KCOYMQ38TO12I068XH31DJY8K6CZ361KKZSUEC548O569N46BRI2GP43LUD817L8KLLFVWMVDLBPRQN294SBPR7M2VETHS72W1IFG4BY29GZ9S5E3IB8TH63Z4O07GYHNC38YXPFUZKPPJV6CP608VJI4RPANS302SB83S5MAOJU5IW991CCWC5RPROEQ7GK1PI' where id=28; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='1BVEFAHYLBA8SLVSSB5HIZ7BC5VCKN27FILHHNR25V9MO7XOTY1I8GEOZ8B9CB23L88542JN484MKMMZE94M9U3N8AP8HC30EYADQYQZSOH2TEAZ2DVHLEZ4V2FSYMQBTQMQ6EX1TNX638AM61D5KCC0EPJNPR7FS9VRD9O0TCR79D71YR1SDQ3BTAI1SQS62F7YABR7CEWKEAASQLYIF7F7MOBH933QPNTYDUOB9ONLF3LDLECDJGF4E1BSEWN3N' where id=28; -update noar ti set v1='1BVEFAHYLBA8SLVSSB5HIZ7BC5VCKN27FILHHNR25V9MO7XOTY1I8GEOZ8B9CB23L88542JN484MKMMZE94M9U3N8AP8HC30EYADQYQZSOH2TEAZ2DVHLEZ4V2FSYMQBTQMQ6EX1TNX638AM61D5KCC0EPJNPR7FS9VRD9O0TCR79D71YR1SDQ3BTAI1SQS62F7YABR7CEWKEAASQLYIF7F7MOBH933QPNTYDUOB9ONLF3LDLECDJGF4E1BSEWN3N' where id=28; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='L1AF2NRL0R3YVG5S7MF9YC4EYTZJ1KXX3D06XHKJSD3LF1UQ1D1B0DM1CANTSIF963KGJRXMHCCMU4G3LBQ6QOCDPRGBYM924YOGACFRXX846AW96A8W3U51XYYJM7DSW1BQO22D5S5E2SE2DPO0KLB6N7FK46WM14HUG644GEX8S9AWL50G3PRUB2S2FSQ3HMCR0ZSEPVXT90LPKZYIKJ1S8L2XBU6B4GLQ0PPI0VH49LVZR5ZKEKHYMGWHDDUZW' where id=28; -update noar ti set v2='L1AF2NRL0R3YVG5S7MF9YC4EYTZJ1KXX3D06XHKJSD3LF1UQ1D1B0DM1CANTSIF963KGJRXMHCCMU4G3LBQ6QOCDPRGBYM924YOGACFRXX846AW96A8W3U51XYYJM7DSW1BQO22D5S5E2SE2DPO0KLB6N7FK46WM14HUG644GEX8S9AWL50G3PRUB2S2FSQ3HMCR0ZSEPVXT90LPKZYIKJ1S8L2XBU6B4GLQ0PPI0VH49LVZR5ZKEKHYMGWHDDUZW' where id=28; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='CV3OK1PIW1WGJM1KQJTNXNRG9T9PYHH6DH9HPTYMTYPMLY98K8ZAM349JK4SR6B9L4U2TN0Y45H7OWHRZDQVICEZHRQ68XUKDBA1OYLL8L92XT6RFPLMYQPT3GHUIPA60B9IBXZFN80OT289ZDGXL2BHBI5JWB0KKN2BCWBTN2RTVBLMLH2LAF4NDBUJD7WGPUOX4RZG89RY18S03NZC5TR2OJJ5932O69ZG7VOK5Z11MR82PQKCGL2FFI9HWNXP1' where id=28; -update noar ti set v3='CV3OK1PIW1WGJM1KQJTNXNRG9T9PYHH6DH9HPTYMTYPMLY98K8ZAM349JK4SR6B9L4U2TN0Y45H7OWHRZDQVICEZHRQ68XUKDBA1OYLL8L92XT6RFPLMYQPT3GHUIPA60B9IBXZFN80OT289ZDGXL2BHBI5JWB0KKN2BCWBTN2RTVBLMLH2LAF4NDBUJD7WGPUOX4RZG89RY18S03NZC5TR2OJJ5932O69ZG7VOK5Z11MR82PQKCGL2FFI9HWNXP1' where id=28; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='HKVY2KBUSEEXYG7JWLSVT5HEG1NRG26L37LH2TZ8BV3CXVD17S8DXK9VVC6GOLYCBJUBU354FBTH2PPAKCK7EB2WB5Q8XEHF0YIV1CDMOWJV9ZMCNTP4CJFC9NG5Q2IOX0B9UEX9QJACR5QP9B2PBX3BA45TDKU0L9GRJV87S3LN7QRAAJM11JQJJ0VBN87YNV3UYMQ6V1846TX50EE4LVT7NFOELCWFHPX2FRUHEEWZ8URSBYOJVFI0WZJJ76Y0T' where id=29; -update noar ti set v0='HKVY2KBUSEEXYG7JWLSVT5HEG1NRG26L37LH2TZ8BV3CXVD17S8DXK9VVC6GOLYCBJUBU354FBTH2PPAKCK7EB2WB5Q8XEHF0YIV1CDMOWJV9ZMCNTP4CJFC9NG5Q2IOX0B9UEX9QJACR5QP9B2PBX3BA45TDKU0L9GRJV87S3LN7QRAAJM11JQJJ0VBN87YNV3UYMQ6V1846TX50EE4LVT7NFOELCWFHPX2FRUHEEWZ8URSBYOJVFI0WZJJ76Y0T' where id=29; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='GQXAY9FAJVF1NTFM7UT72OPOAUXIERUMW76E02IKK5MKROUTMTS9D9EQSAGGJSUJYJ037PSCV0P99CK4IERYQPR1Y6XS2DWVP9APLSG99K0SFB9CCNVO8SQ5CHV8C5WW6XB77RLITPR4RCNHFGP64CKRVAA513T2UOP3IN8UJ0C60PW42LB9NLG45CQPAZ2N20E71EN8H8ZJNWB6B7AVV2ZMZ4J3TMS655HDS7M9P5MA6F3G61I3ANWU5EB03QCR8' where id=29; -update noar ti set v1='GQXAY9FAJVF1NTFM7UT72OPOAUXIERUMW76E02IKK5MKROUTMTS9D9EQSAGGJSUJYJ037PSCV0P99CK4IERYQPR1Y6XS2DWVP9APLSG99K0SFB9CCNVO8SQ5CHV8C5WW6XB77RLITPR4RCNHFGP64CKRVAA513T2UOP3IN8UJ0C60PW42LB9NLG45CQPAZ2N20E71EN8H8ZJNWB6B7AVV2ZMZ4J3TMS655HDS7M9P5MA6F3G61I3ANWU5EB03QCR8' where id=29; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='KSTHQ3ASWTOIE2I31S7EK2GOVJ9CQAQDEENGHG8Q895WSZ6BV75VB325G98HIBCRVX0TA2H02A0DIJQH632SYSRGIR970TJHD6D3XZ6JTXIY761IWPHQXAZ2AHUCNC0O10Q9M09EYD5LMLY1EDJHZMOPQHXYORC7SC8WIYGF257AQ4KGGC1WX2FDYWP169C3VA0XBLOAW6NU0QP5NJT064P2KAQXKX5D9O1IUH6UEKIKQ2FJ538YPYMHCLT71KI1M' where id=29; -update noar ti set v2='KSTHQ3ASWTOIE2I31S7EK2GOVJ9CQAQDEENGHG8Q895WSZ6BV75VB325G98HIBCRVX0TA2H02A0DIJQH632SYSRGIR970TJHD6D3XZ6JTXIY761IWPHQXAZ2AHUCNC0O10Q9M09EYD5LMLY1EDJHZMOPQHXYORC7SC8WIYGF257AQ4KGGC1WX2FDYWP169C3VA0XBLOAW6NU0QP5NJT064P2KAQXKX5D9O1IUH6UEKIKQ2FJ538YPYMHCLT71KI1M' where id=29; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='HPKC8C0ZYFBF4AED2VI4EWCXWB98LDYW1ZUFTI8J1Z2ANUOEM79M8R9SHRX5JWK4TWEZUWWM1SECSKPIXYN0KFKXI1D9414L11TE2X5COSQAXOQK3LE7ZTVE16VYVPECLBKKZZRL593X936PHEY4O292BDY7EPMD4DITXQR8XCWIKYDZQEX06LHN3TOVQ8D8E72RL7I3GOQOV4MU143S3NSAOIGH9XU9CFPU9BOAVTO7O6MXWAEC04ULG68WD2REC' where id=29; -update noar ti set v3='HPKC8C0ZYFBF4AED2VI4EWCXWB98LDYW1ZUFTI8J1Z2ANUOEM79M8R9SHRX5JWK4TWEZUWWM1SECSKPIXYN0KFKXI1D9414L11TE2X5COSQAXOQK3LE7ZTVE16VYVPECLBKKZZRL593X936PHEY4O292BDY7EPMD4DITXQR8XCWIKYDZQEX06LHN3TOVQ8D8E72RL7I3GOQOV4MU143S3NSAOIGH9XU9CFPU9BOAVTO7O6MXWAEC04ULG68WD2REC' where id=29; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='SEB5VYG0UCCXMJBFOG9R0AYJZSYPBXHT7T3ESNEV1PK3Z9K6KW04UOOHGGFNJLK0EZYMGBNY3C5REE90DUDGQS8T26XPKH5OCJDHXTMTGHZAK8Y23TOI8TF01PMF1JZHHT1KNP4MVBNKA1MVLRINTFDNI2WIPYWXEHT2MTIX7M2H5JJ6JLBMWHTFGIPG08TUO67DI5FC50XOR7HYXH6KIAOYA9MTF37LPFRCG03QUSUVR9HEPZM7BF7W8VCUJH8BC' where id=30; -update noar ti set v0='SEB5VYG0UCCXMJBFOG9R0AYJZSYPBXHT7T3ESNEV1PK3Z9K6KW04UOOHGGFNJLK0EZYMGBNY3C5REE90DUDGQS8T26XPKH5OCJDHXTMTGHZAK8Y23TOI8TF01PMF1JZHHT1KNP4MVBNKA1MVLRINTFDNI2WIPYWXEHT2MTIX7M2H5JJ6JLBMWHTFGIPG08TUO67DI5FC50XOR7HYXH6KIAOYA9MTF37LPFRCG03QUSUVR9HEPZM7BF7W8VCUJH8BC' where id=30; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='BMPWURUEY3IZXOYMTMD7OQAHPFUE47A8T9Q8SXE95VEVVLBV6QRZEGEP9LBUFHUC17PAAS65D3Y1D9C4H3C3QTDOUAM5TW9XRYNSBQI0L67XBY1OREZ00QXQUV45FFST7JMFGWUY85649TNMF82ZOM3Y7NK68E0H08PMMTB3GGJTMUOH0TFO92HNVXA7HUENJERPX76LLIE6JHNT8HQW0T3BIMCEAX6I5B0ZBWJYRJC51O15TF1YGSH4ADZGR86M9' where id=30; -update noar ti set v1='BMPWURUEY3IZXOYMTMD7OQAHPFUE47A8T9Q8SXE95VEVVLBV6QRZEGEP9LBUFHUC17PAAS65D3Y1D9C4H3C3QTDOUAM5TW9XRYNSBQI0L67XBY1OREZ00QXQUV45FFST7JMFGWUY85649TNMF82ZOM3Y7NK68E0H08PMMTB3GGJTMUOH0TFO92HNVXA7HUENJERPX76LLIE6JHNT8HQW0T3BIMCEAX6I5B0ZBWJYRJC51O15TF1YGSH4ADZGR86M9' where id=30; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='EEM8ECWGIR59COM0OIM0NN9D6R8ZXT28QCAWLBI3WRB6W9IKHARIYLIQX645KTHOXLV8UFI65HD68U533H3XU3RVCWQPWONC377RQPEHEKJ09ME8N0A95K1BYKI9SS20AZ17ZDNFXUK93MX4SO8E2YOYSP1RVI98I0IMFWTQIICLN089NSSSDBL0W3P0KRI1AA98SDW1YJV5AE16175Z8YCR7DEKCVWRWYHQZ1HFLZJ0RZ5RB0HJLCCU89GT268UI' where id=30; -update noar ti set v2='EEM8ECWGIR59COM0OIM0NN9D6R8ZXT28QCAWLBI3WRB6W9IKHARIYLIQX645KTHOXLV8UFI65HD68U533H3XU3RVCWQPWONC377RQPEHEKJ09ME8N0A95K1BYKI9SS20AZ17ZDNFXUK93MX4SO8E2YOYSP1RVI98I0IMFWTQIICLN089NSSSDBL0W3P0KRI1AA98SDW1YJV5AE16175Z8YCR7DEKCVWRWYHQZ1HFLZJ0RZ5RB0HJLCCU89GT268UI' where id=30; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='XV4WH7M3MDSXGXB5AZY22QY4YFRU8CJ6603AF6D8ED5STNRWBG91O02FQ6ZE7URZZ2KH0XQNQLUP9ZB2S0YT8Y0SXL8342BN317FFP375MMQT9TM7LIN9I0B9IVV8QK5LFE7TS7CX2XGKD79M3AK9TZQIDK1GN8IM8HSAVY4L59VVA3X0FJTSQZ115E3Z26SQZL1QDK8YQSGEIXZO1KB8IZGP3UV3Z3XO5J4HXYEBZEONCVOPR6HCA9E7DCZ1EXT0' where id=30; -update noar ti set v3='XV4WH7M3MDSXGXB5AZY22QY4YFRU8CJ6603AF6D8ED5STNRWBG91O02FQ6ZE7URZZ2KH0XQNQLUP9ZB2S0YT8Y0SXL8342BN317FFP375MMQT9TM7LIN9I0B9IVV8QK5LFE7TS7CX2XGKD79M3AK9TZQIDK1GN8IM8HSAVY4L59VVA3X0FJTSQZ115E3Z26SQZL1QDK8YQSGEIXZO1KB8IZGP3UV3Z3XO5J4HXYEBZEONCVOPR6HCA9E7DCZ1EXT0' where id=30; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='USGQUUVN3R8AY8OU7J5CPG3D32QQ6KCVBBDJE5GKTDFUIS9ED1SWNSVIU08U6DNAKYJ1ADMODB8AYI5PFBZFI2FDQGT48134F87ET26CMB0IGTJTVYI7F7W8E18PUSM9VAHZN746YJ49ELHXHAIT30RP29VH2FD3122381W277SVWAOTQFBPJOL4ZR8164F18C522U1R3QSTDX0B5OL3RIPSIHT5HERUW4VLBE1X35KX9VOH7OFJ9WXR8YCAZNUE3' where id=31; -update noar ti set v0='USGQUUVN3R8AY8OU7J5CPG3D32QQ6KCVBBDJE5GKTDFUIS9ED1SWNSVIU08U6DNAKYJ1ADMODB8AYI5PFBZFI2FDQGT48134F87ET26CMB0IGTJTVYI7F7W8E18PUSM9VAHZN746YJ49ELHXHAIT30RP29VH2FD3122381W277SVWAOTQFBPJOL4ZR8164F18C522U1R3QSTDX0B5OL3RIPSIHT5HERUW4VLBE1X35KX9VOH7OFJ9WXR8YCAZNUE3' where id=31; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='6HG9A9NA3CXI9ZTB7UGBKZ26FFVJDDPKVAUB3RBVK5BDJ2WCCLZJ945CRC36FX0MWMEKFPPXZE0QLP37DPR3QBHHN05Q5GZPO0ULDC9PN96AGWNYJCNUKSUT1ODSPAGTTHYFOQGYHGX6GP35YU420OZV2TYOW1T58WF2CPDAXUGLV3URYGR7BM4OA6ISP2UKUAGYS43OX4S0EXH0E8DLHJ6L8H595DQHVK8KTRKMENLYKKCBWWZ30WX8HZ52W386V' where id=31; -update noar ti set v1='6HG9A9NA3CXI9ZTB7UGBKZ26FFVJDDPKVAUB3RBVK5BDJ2WCCLZJ945CRC36FX0MWMEKFPPXZE0QLP37DPR3QBHHN05Q5GZPO0ULDC9PN96AGWNYJCNUKSUT1ODSPAGTTHYFOQGYHGX6GP35YU420OZV2TYOW1T58WF2CPDAXUGLV3URYGR7BM4OA6ISP2UKUAGYS43OX4S0EXH0E8DLHJ6L8H595DQHVK8KTRKMENLYKKCBWWZ30WX8HZ52W386V' where id=31; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='506VCFQW8979C0B58OKSU2SQ3MFVVBJ4YMRG37AOSJOEP1CTE5ITTCH8ZHYW7WZK9B415H8ZYYOXEEN48JB28C5HCCJXVGM0UYCQT30CIB91J2J4HFYCG56715FSO2AWXWU0YV9P06WPA9LX6LSWWC7X08FS9Y6WJSA2PJZD2MO4PNDTL2841Z7AMU2X86C45BQ0LJM371XM91TEIVIY9H66021012660B01EXHUR72HXPHASQL536IZ9T8V82EM8' where id=31; -update noar ti set v2='506VCFQW8979C0B58OKSU2SQ3MFVVBJ4YMRG37AOSJOEP1CTE5ITTCH8ZHYW7WZK9B415H8ZYYOXEEN48JB28C5HCCJXVGM0UYCQT30CIB91J2J4HFYCG56715FSO2AWXWU0YV9P06WPA9LX6LSWWC7X08FS9Y6WJSA2PJZD2MO4PNDTL2841Z7AMU2X86C45BQ0LJM371XM91TEIVIY9H66021012660B01EXHUR72HXPHASQL536IZ9T8V82EM8' where id=31; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='HFPTZVT8CHM2WHXYE56GP3G0G2MG1C6BY6819KBWCF6IQ9ADZ8D8TNR363VG2VO23O4UO0SBD6N7DA91E5J690ITBTV6DLZ83D4EWTOHEFOLAUBX8WV2O35GP583NKRHIHN4PPOTAY07UU5QERNDJU5EH3GC7J5KF5TKDZV3IMXDNHM73IAQ0S1MEDNGLNF5VA1IO80YCFP51E9O4MUDL3D604H12DU69LHDU6BEZ72KC9TFZ1466NGIAYBS4QDF0' where id=31; -update noar ti set v3='HFPTZVT8CHM2WHXYE56GP3G0G2MG1C6BY6819KBWCF6IQ9ADZ8D8TNR363VG2VO23O4UO0SBD6N7DA91E5J690ITBTV6DLZ83D4EWTOHEFOLAUBX8WV2O35GP583NKRHIHN4PPOTAY07UU5QERNDJU5EH3GC7J5KF5TKDZV3IMXDNHM73IAQ0S1MEDNGLNF5VA1IO80YCFP51E9O4MUDL3D604H12DU69LHDU6BEZ72KC9TFZ1466NGIAYBS4QDF0' where id=31; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='7W6GSG53LDKXZSQ3MJD9MSCTTHGS75JLPS2HM3BRXDGDWGQBEAHDFNE4MZRRDT6OYZS9FLX8YTZF4YCAZAZL658BMFZ6NX58UJS0UYUUWASQDC3V4FTVG2X821RB3HB0PWJIONYGU0OZEH5OT7WPKMJMMZ05IF7CCE71ZFO18UOD16Q9B9RFW2BGO1G5TYM8X02KDBC08A4FJGU93HLTFZNPXDRZ53FTXBES98ODKJ1TWGGMYKPL1KBB4HBOAKJ9M' where id=32; -update noar ti set v0='7W6GSG53LDKXZSQ3MJD9MSCTTHGS75JLPS2HM3BRXDGDWGQBEAHDFNE4MZRRDT6OYZS9FLX8YTZF4YCAZAZL658BMFZ6NX58UJS0UYUUWASQDC3V4FTVG2X821RB3HB0PWJIONYGU0OZEH5OT7WPKMJMMZ05IF7CCE71ZFO18UOD16Q9B9RFW2BGO1G5TYM8X02KDBC08A4FJGU93HLTFZNPXDRZ53FTXBES98ODKJ1TWGGMYKPL1KBB4HBOAKJ9M' where id=32; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='GQLCDHO5FAU8T1I11V0LQ4ARS5AINR4XN75MMHND73CJ7GJ1O2GAF4DHT1IVDQVNGTPHTK67ZEBXCPQ5O6ZMURJDKGYEFV3ZIWTDITYY6R3DTJOV5BMCTW1MLQ2CB9ISMF68O2RP8YEOOHS3NHV3W7IXVOCNMCM91DZNT2HFS58JFBPB5KNW0M0EHJC9QOAY13IXH14V89MO1UQXV0TA0DKTG2JUH8ANGTBMYGKXVSXDAHQCOEUZP2LGXK2D1YRMD' where id=32; -update noar ti set v1='GQLCDHO5FAU8T1I11V0LQ4ARS5AINR4XN75MMHND73CJ7GJ1O2GAF4DHT1IVDQVNGTPHTK67ZEBXCPQ5O6ZMURJDKGYEFV3ZIWTDITYY6R3DTJOV5BMCTW1MLQ2CB9ISMF68O2RP8YEOOHS3NHV3W7IXVOCNMCM91DZNT2HFS58JFBPB5KNW0M0EHJC9QOAY13IXH14V89MO1UQXV0TA0DKTG2JUH8ANGTBMYGKXVSXDAHQCOEUZP2LGXK2D1YRMD' where id=32; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='OEK4R7RVKPVE3BM7AK1PU2QO4PF39QTXBT7G11U9GFFNSNEUE3Y01NWTJETKGAZ6O5UWAA0OD35F0YIFQ7ADCEDWCGU00RWYNW83GFF75XOMQOB8JA560HQLT2HIZSAOYD8QJRRKWJ2QHCPNKGTJGB7EIUMNRIT7Q2HPQGORLN41ADVYA6ARQ9EF2AI4FLAAO3ISEJNF2GYEYAY0NVX3JUCHRS82II58UEJGMKZS1W72WRXJ5X0EK6KIPW1JR3KFT' where id=32; -update noar ti set v2='OEK4R7RVKPVE3BM7AK1PU2QO4PF39QTXBT7G11U9GFFNSNEUE3Y01NWTJETKGAZ6O5UWAA0OD35F0YIFQ7ADCEDWCGU00RWYNW83GFF75XOMQOB8JA560HQLT2HIZSAOYD8QJRRKWJ2QHCPNKGTJGB7EIUMNRIT7Q2HPQGORLN41ADVYA6ARQ9EF2AI4FLAAO3ISEJNF2GYEYAY0NVX3JUCHRS82II58UEJGMKZS1W72WRXJ5X0EK6KIPW1JR3KFT' where id=32; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='JP3JGE7PM28QA2IX19WADVBAZYB1TL4V19TBYA79KFN8602XS04M0263X2TNW6BQGBV9J6HZ4Z1CH5TKNCH06ZS5NRIHWSZKS670BYM22RXF3UMZ6NXQO2L7HWNFMLUGQ7RDLYY7M4WFSKKBLG388WS8T5H5A7NJN7WIMJJWR8HC4QVO1T9S43286BIHLX1CFALNJ0J8NUM3QDZT2YO4R81A9H7M9WEIC0QK0VON062IG3MED6MB7F6NRMMQ7G0LW' where id=32; -update noar ti set v3='JP3JGE7PM28QA2IX19WADVBAZYB1TL4V19TBYA79KFN8602XS04M0263X2TNW6BQGBV9J6HZ4Z1CH5TKNCH06ZS5NRIHWSZKS670BYM22RXF3UMZ6NXQO2L7HWNFMLUGQ7RDLYY7M4WFSKKBLG388WS8T5H5A7NJN7WIMJJWR8HC4QVO1T9S43286BIHLX1CFALNJ0J8NUM3QDZT2YO4R81A9H7M9WEIC0QK0VON062IG3MED6MB7F6NRMMQ7G0LW' where id=32; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='XJUNKKGNZYOPYWI0YNXXTUYO0VD841OAH95L5489WKH42SBTEUYXJG4CAR6EH6R1PX4P61LYPWZJR5SSWBL4UGTDKWYSRURLEVI0O8Q8H8P1OOUFJ5OE67B7UGEH9S5VQR8WPIHT3ZVHX3I4NZA9BXF6S00FP4CNZRUB9VMZKXUGW9YDZLH6Q7B7W274I4TAXJTL65IP5GI7EPQLUYKO4C62OII3EGLV1IDI7MF4KX9Y77KOIE7ZPX0IQ8AWF0PF4' where id=33; -update noar ti set v0='XJUNKKGNZYOPYWI0YNXXTUYO0VD841OAH95L5489WKH42SBTEUYXJG4CAR6EH6R1PX4P61LYPWZJR5SSWBL4UGTDKWYSRURLEVI0O8Q8H8P1OOUFJ5OE67B7UGEH9S5VQR8WPIHT3ZVHX3I4NZA9BXF6S00FP4CNZRUB9VMZKXUGW9YDZLH6Q7B7W274I4TAXJTL65IP5GI7EPQLUYKO4C62OII3EGLV1IDI7MF4KX9Y77KOIE7ZPX0IQ8AWF0PF4' where id=33; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='2GQWU5SSRWW772TCQKN4Z75CTVI4FBNPOZ4GLCBJ53D266L1P00K4NU3QNVQOTD5S153G0JQQFB1UJUIK2GAXGBM5UONRK85R2MUU91IQL6G887Z7QXZ0B777NS6JO8CIEY5GKIUUXBP0Q0KC6QGVK9VT5RCLJ0LPJHGN02VPRE48EHNCELO5YVYQOJVXY1CZ085JG6U987ZBMSJAEA6YB5SU4KO3MH4WZ8BEGGOI7JE8C8R35T2SOAJQ0TNATC87' where id=33; -update noar ti set v1='2GQWU5SSRWW772TCQKN4Z75CTVI4FBNPOZ4GLCBJ53D266L1P00K4NU3QNVQOTD5S153G0JQQFB1UJUIK2GAXGBM5UONRK85R2MUU91IQL6G887Z7QXZ0B777NS6JO8CIEY5GKIUUXBP0Q0KC6QGVK9VT5RCLJ0LPJHGN02VPRE48EHNCELO5YVYQOJVXY1CZ085JG6U987ZBMSJAEA6YB5SU4KO3MH4WZ8BEGGOI7JE8C8R35T2SOAJQ0TNATC87' where id=33; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='8L6DFI5EFNTY2L9SFPMJFQGA2Y2BAHIZ8PXP7Q6K9WFCKGIOP3S61V74A5B3GJ8VF4FJYZEE5FEL6GWSQ6D5C1GA8P095H0ST5YD573I4INKDMON9GMN2LGW0E7ORZE72G37540A1H5K83QBUTLK24Y2NMK2R1QHW19XAXWC32RH0P0UAGRY6YS2PLBT7E2KP9A19KH5C7NZXEGP0GQPWHBP1AIQFGLMAOQZH2XFQOQ7CX6CAF6WNCC7WGXFGY2UJ' where id=33; -update noar ti set v2='8L6DFI5EFNTY2L9SFPMJFQGA2Y2BAHIZ8PXP7Q6K9WFCKGIOP3S61V74A5B3GJ8VF4FJYZEE5FEL6GWSQ6D5C1GA8P095H0ST5YD573I4INKDMON9GMN2LGW0E7ORZE72G37540A1H5K83QBUTLK24Y2NMK2R1QHW19XAXWC32RH0P0UAGRY6YS2PLBT7E2KP9A19KH5C7NZXEGP0GQPWHBP1AIQFGLMAOQZH2XFQOQ7CX6CAF6WNCC7WGXFGY2UJ' where id=33; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='9K0I0PMN2FVXAJ7ITQQK9AC1IP346NAT7RBGXBK5KQ42JA73HZIC05K9BW1L9KU2VR0RB9H50DPYN0VOQ58RC4WRSW49L0T4TOV4S96BZWWJBZUIX5Z76QFA8EQQ5PUE6RYTIEGVYSVIMQ14JY75BV44ZXVCTFI71JS4S2J6FXKRICRY3XM1PREQ4ZV6O8BHZTL5NRTLSI4INTSRBYV1QBDJ0RCU6RIQNBYLYN93BMV9KBEDVQSQXJESY52EMZ1EI' where id=33; -update noar ti set v3='9K0I0PMN2FVXAJ7ITQQK9AC1IP346NAT7RBGXBK5KQ42JA73HZIC05K9BW1L9KU2VR0RB9H50DPYN0VOQ58RC4WRSW49L0T4TOV4S96BZWWJBZUIX5Z76QFA8EQQ5PUE6RYTIEGVYSVIMQ14JY75BV44ZXVCTFI71JS4S2J6FXKRICRY3XM1PREQ4ZV6O8BHZTL5NRTLSI4INTSRBYV1QBDJ0RCU6RIQNBYLYN93BMV9KBEDVQSQXJESY52EMZ1EI' where id=33; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='SI26W3G68GS54M7AMEB9AG2I5OEK9BA89KR7TG7KLBFOUGXH1MYIFCYYYX32I96QTKRCRP5QJJDQDR5OJLGC2F4QO90F93LJZZAE6BTN98DFS92IA1XQNN3XKSHW2I9Y02FHVFQ84YOZIM7XLA10KPJ1ZEWNZ7EA99JXHIF4EX3PQRO99LEQ0YXTEWZJQ47OEJZB3DAQDQAKLX7KKZZ2PIGN5EOWANGLUXCKFDX1OOVXB4E1XHUF6O0S32A72YKPG' where id=34; -update noar ti set v0='SI26W3G68GS54M7AMEB9AG2I5OEK9BA89KR7TG7KLBFOUGXH1MYIFCYYYX32I96QTKRCRP5QJJDQDR5OJLGC2F4QO90F93LJZZAE6BTN98DFS92IA1XQNN3XKSHW2I9Y02FHVFQ84YOZIM7XLA10KPJ1ZEWNZ7EA99JXHIF4EX3PQRO99LEQ0YXTEWZJQ47OEJZB3DAQDQAKLX7KKZZ2PIGN5EOWANGLUXCKFDX1OOVXB4E1XHUF6O0S32A72YKPG' where id=34; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='PO8QZ3A2OC1BP6M07DVLPL1GP8ODXZIVUPRPZ6ZCKOIQDU3GFR8D10N2TVB9J7COE8IAEJ1RVSDW84K9T2AGCJQ3DCQKIYESQK0VZSUB5GNLOQYZ9MZ17VYU7CFTZGGHCF8R82HJB7NVCLMVQ1AJZK9P8F89W5IOQ7J59OX0QKV0L712WJX2ARNW75SQPS7FK67QSHKNRDUIEXJVR3F54FY3Z4BL0O9CCN1U2UIUHTGC1ZUZS0TFPN9AZDGHLF9H2' where id=34; -update noar ti set v1='PO8QZ3A2OC1BP6M07DVLPL1GP8ODXZIVUPRPZ6ZCKOIQDU3GFR8D10N2TVB9J7COE8IAEJ1RVSDW84K9T2AGCJQ3DCQKIYESQK0VZSUB5GNLOQYZ9MZ17VYU7CFTZGGHCF8R82HJB7NVCLMVQ1AJZK9P8F89W5IOQ7J59OX0QKV0L712WJX2ARNW75SQPS7FK67QSHKNRDUIEXJVR3F54FY3Z4BL0O9CCN1U2UIUHTGC1ZUZS0TFPN9AZDGHLF9H2' where id=34; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='5N6HRFQ4949NXIMOPNIA6IKQHEXN2B0R7G3T2WS2RCWO7LVJSURZRCQ52O45R598M3BDHGO1ZW22C0WAOOWJ3CDP3SAXKTRHC2W5N9R8MMR50977PSLKYLOTXZ6SKNER8BT4LC7SCPHIRDAFFPP9398I678Q3EV3WIOZDJGE84L3KV0FLNJU0M0OACPH7HD6ENJX4MYB2L29SR28SVCEQUIR644Y0ODRMU8JYK18VZW80UUUR6KPU1LK2JMPU0WPR' where id=34; -update noar ti set v2='5N6HRFQ4949NXIMOPNIA6IKQHEXN2B0R7G3T2WS2RCWO7LVJSURZRCQ52O45R598M3BDHGO1ZW22C0WAOOWJ3CDP3SAXKTRHC2W5N9R8MMR50977PSLKYLOTXZ6SKNER8BT4LC7SCPHIRDAFFPP9398I678Q3EV3WIOZDJGE84L3KV0FLNJU0M0OACPH7HD6ENJX4MYB2L29SR28SVCEQUIR644Y0ODRMU8JYK18VZW80UUUR6KPU1LK2JMPU0WPR' where id=34; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='II772IKVGX1MX8RKL36PYI9JO2BZXQKCQARD630DZQFWCMPYLDRL0XU563SUV37FNISKK1C06JGTMUHKPODBSQ7R8TH9FPXSJVQUBDU6V23GBDOGBQIFAZAH0TWAE6WKG3P2S4AD5EY7K6IM5MM3NJJQRCJM6REH78QG081T5NMLCNGLZCBXI71MTSZ2AMBHU159LJR9XQ59A6SJT7C3UZRRGT0FFVWKKZXDBZV1FXQJ6KM5WXQPCVNO5C22Q5UPY' where id=34; -update noar ti set v3='II772IKVGX1MX8RKL36PYI9JO2BZXQKCQARD630DZQFWCMPYLDRL0XU563SUV37FNISKK1C06JGTMUHKPODBSQ7R8TH9FPXSJVQUBDU6V23GBDOGBQIFAZAH0TWAE6WKG3P2S4AD5EY7K6IM5MM3NJJQRCJM6REH78QG081T5NMLCNGLZCBXI71MTSZ2AMBHU159LJR9XQ59A6SJT7C3UZRRGT0FFVWKKZXDBZV1FXQJ6KM5WXQPCVNO5C22Q5UPY' where id=34; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='6RRGZWPIE81BJ57BSNVWQGQXCK05KYLUFA471G7L3UUN7EX9J1C534B3X41QN8YY6WEO5RMWFSEE30MY01LQN1VEDZA0F7M0K32LZC6ED4VTDPD6IZ2K2443N9R2LO8VOCLZLRJZDBPWIUBNVNDENVFK31M7OVZV0J2JGI4Y2JJQMKJG7SAN3F21OTGURRJ67ARF3NJ80SA2956N74NMUESIWR5C8NUHBGMAP8NJBTS5EZC902Y70TRSQCJP7321P' where id=35; -update noar ti set v0='6RRGZWPIE81BJ57BSNVWQGQXCK05KYLUFA471G7L3UUN7EX9J1C534B3X41QN8YY6WEO5RMWFSEE30MY01LQN1VEDZA0F7M0K32LZC6ED4VTDPD6IZ2K2443N9R2LO8VOCLZLRJZDBPWIUBNVNDENVFK31M7OVZV0J2JGI4Y2JJQMKJG7SAN3F21OTGURRJ67ARF3NJ80SA2956N74NMUESIWR5C8NUHBGMAP8NJBTS5EZC902Y70TRSQCJP7321P' where id=35; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='V8VTPC7BEKW93PHXRRAE123CQ9JIN0L0PQJA9PCBR06O3FF1HD8CHI8OKAABN2J42PXJ2C8JDLCCMGE0MS0D1GF3POQQ5856K3KN49HYD074NAG1ACYL7VOPOVCZMEZMI2Y7KINSBM7JMJNICJ0YTIW1D97QGC9NO1HFME9Q1M9SU98JPU44IGUPFNFP26JNQ6GH9A880NB3BER6SNDPA17S8OV1WM5Z28RYDP057BYFHB041DPAEVYW5KK50YXF8' where id=35; -update noar ti set v1='V8VTPC7BEKW93PHXRRAE123CQ9JIN0L0PQJA9PCBR06O3FF1HD8CHI8OKAABN2J42PXJ2C8JDLCCMGE0MS0D1GF3POQQ5856K3KN49HYD074NAG1ACYL7VOPOVCZMEZMI2Y7KINSBM7JMJNICJ0YTIW1D97QGC9NO1HFME9Q1M9SU98JPU44IGUPFNFP26JNQ6GH9A880NB3BER6SNDPA17S8OV1WM5Z28RYDP057BYFHB041DPAEVYW5KK50YXF8' where id=35; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='M40EG1BA6XTQLKBSJN8A9739NS4QI29XDURDLEMMNIW1CXAOZVGX5J1VG9JPWJKKLNYWKTXEYSEIEUR50OIU84YUDKOBNCA4P4IVD86PMBWPJ6Q0WJU3P7KF3DLQ9H8EP2JJMSSHSR5BCEIS4TSLDTF2H47IH637X80DJNMCTJN2ENEK51ST3UCQQ78AEQ5QHM1XBNW9BR1PPFUMU63NOK8BSM4Y24RCJ9QZWLBAPI6Q13CIB3V4MYZGPFPAYM5E9' where id=35; -update noar ti set v2='M40EG1BA6XTQLKBSJN8A9739NS4QI29XDURDLEMMNIW1CXAOZVGX5J1VG9JPWJKKLNYWKTXEYSEIEUR50OIU84YUDKOBNCA4P4IVD86PMBWPJ6Q0WJU3P7KF3DLQ9H8EP2JJMSSHSR5BCEIS4TSLDTF2H47IH637X80DJNMCTJN2ENEK51ST3UCQQ78AEQ5QHM1XBNW9BR1PPFUMU63NOK8BSM4Y24RCJ9QZWLBAPI6Q13CIB3V4MYZGPFPAYM5E9' where id=35; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='ELPMQLP458OO7NAL97BIEJ1J7ZM4U1BGMDBUTPH1A4WKHDMB5QVX3TJUIELK1MQXH81F008HC2QV2ZM707GB67WFIG2YR7KH3L1HR5JH1527P6BOJG35ORSSIHD1SOFIN39STN53GG74MIARZBYGJHNG1TQGI0A6SW3VV9OVM2MDSJN6IE3E9Z45WAJ2J03HZQ4HEJF96PEGNOPP3RC47419S9HKF1HSU22T6ZT8QBIY1X0U1VTXE73UWUYCSQ4XZ' where id=35; -update noar ti set v3='ELPMQLP458OO7NAL97BIEJ1J7ZM4U1BGMDBUTPH1A4WKHDMB5QVX3TJUIELK1MQXH81F008HC2QV2ZM707GB67WFIG2YR7KH3L1HR5JH1527P6BOJG35ORSSIHD1SOFIN39STN53GG74MIARZBYGJHNG1TQGI0A6SW3VV9OVM2MDSJN6IE3E9Z45WAJ2J03HZQ4HEJF96PEGNOPP3RC47419S9HKF1HSU22T6ZT8QBIY1X0U1VTXE73UWUYCSQ4XZ' where id=35; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='P7JUPRGYYN2914ZB40YYAE78T3CZYKZ3LWMT9X3X94Q4XYS7G4LT1VF4SPHLS0LZQHLAQP1ES8BPI0XNEYGXQC662H4EILD1Z2P4E4CBRYDIJU9OG7SXUSZ6RPHCGYBVQNOFDQIIBC66FGK9V1S0C8RXMQ6R6GL77ZR35HI7HVHSQ0USEBG0J7TQC67CY8V6BD8TRQO0O8SX0HRAVULJMTJR60HAEYYNT4DE25IDPIGX7T88NQUS8ZYOQD9U5LS49' where id=36; -update noar ti set v0='P7JUPRGYYN2914ZB40YYAE78T3CZYKZ3LWMT9X3X94Q4XYS7G4LT1VF4SPHLS0LZQHLAQP1ES8BPI0XNEYGXQC662H4EILD1Z2P4E4CBRYDIJU9OG7SXUSZ6RPHCGYBVQNOFDQIIBC66FGK9V1S0C8RXMQ6R6GL77ZR35HI7HVHSQ0USEBG0J7TQC67CY8V6BD8TRQO0O8SX0HRAVULJMTJR60HAEYYNT4DE25IDPIGX7T88NQUS8ZYOQD9U5LS49' where id=36; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='2V2NF6ULETBD58Z0LEMRB25477HWMDYOYYNLWI3KR86K3CMV5ZF6QGOGFI8FEAYJZVDP9EMU3C291ZXCWL8GDSPIOHPCHL7BU4T9VIS3Y5ZRDRZY9LFR2TOG25ZDI5I8K6EL17ZNRAZ5CANMEGLAY2VHWV8CLBSY3TDEIX9WS25VRYZM76R3A1GSGCIE0JDGFOA1MUJSP14SQD757ME54GACJHG4I0WNR1QKKF7MW3ISJULIWP1MGS8NOG0KZ4YHF' where id=36; -update noar ti set v1='2V2NF6ULETBD58Z0LEMRB25477HWMDYOYYNLWI3KR86K3CMV5ZF6QGOGFI8FEAYJZVDP9EMU3C291ZXCWL8GDSPIOHPCHL7BU4T9VIS3Y5ZRDRZY9LFR2TOG25ZDI5I8K6EL17ZNRAZ5CANMEGLAY2VHWV8CLBSY3TDEIX9WS25VRYZM76R3A1GSGCIE0JDGFOA1MUJSP14SQD757ME54GACJHG4I0WNR1QKKF7MW3ISJULIWP1MGS8NOG0KZ4YHF' where id=36; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='UUVWDIMYHHRSSM4UKUZGDR4TUGPPQKT9ZKTUEY5D88C3WV8O7RWIWFCLYN76BH9PZDPDPEIQLONIWVGIJY60BRQEN6D2CNQFDJHXP6QZLSXTNPG27YJVHZMOVE3D216A4DKHJLSJGXW3VRKH0SLT5PBEHAZDFIYW93HO22I5JM60N6Q6PZXFABE07WBIILAY8LOQRD7B7F4CTETS4XVO5DDJCQGNOTDLF1WUNL2DDXSCNUONOA12G6E8O8ZC3RDPI' where id=36; -update noar ti set v2='UUVWDIMYHHRSSM4UKUZGDR4TUGPPQKT9ZKTUEY5D88C3WV8O7RWIWFCLYN76BH9PZDPDPEIQLONIWVGIJY60BRQEN6D2CNQFDJHXP6QZLSXTNPG27YJVHZMOVE3D216A4DKHJLSJGXW3VRKH0SLT5PBEHAZDFIYW93HO22I5JM60N6Q6PZXFABE07WBIILAY8LOQRD7B7F4CTETS4XVO5DDJCQGNOTDLF1WUNL2DDXSCNUONOA12G6E8O8ZC3RDPI' where id=36; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='PCJJE28CZRNLBBLYX00AVE0PSWUQVEY5AWYSAX3JI85D78HGQ9M7XW7TQT17IDY331HMCWFO4NB4BXXCQD36G5ZJAZ67E6WIOFWW1BKYMIOJYQLEQYP8LCWWSA618L4IRIL6LHJIZ4Q2IYK3QISO5XS91YR7SPPFJNMZ2QIT8FXXWH26HBIZYVXEAUSW6W6K6FMPUJ9NKSHMPG24TNU1UKVV6TEUTSO0T1RXVXWKO89LZDXS21LWUHB2X8TE1RKBS' where id=36; -update noar ti set v3='PCJJE28CZRNLBBLYX00AVE0PSWUQVEY5AWYSAX3JI85D78HGQ9M7XW7TQT17IDY331HMCWFO4NB4BXXCQD36G5ZJAZ67E6WIOFWW1BKYMIOJYQLEQYP8LCWWSA618L4IRIL6LHJIZ4Q2IYK3QISO5XS91YR7SPPFJNMZ2QIT8FXXWH26HBIZYVXEAUSW6W6K6FMPUJ9NKSHMPG24TNU1UKVV6TEUTSO0T1RXVXWKO89LZDXS21LWUHB2X8TE1RKBS' where id=36; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='VZYC2EVSQNE7K10HWF8BZ6FKZX45ANCG9V41LPF4QK5NS5OLC1XMBWMRWXP3X7APPGKBVOX8YAEORQWLKDALS2TJ5EELTSGC2IESQSU49YNB0T98ITOV2D9NPZPB7P340GD5ZGGGMCW6BJ5WUJQRTX397TIX0146ZD8BQMDH42EJ7ZAZGJ9SWGHIDIGPEE2TBR0QHGPVPH184AN5N0628DLV5PVIBPEUDFMJJMKRHU6YMZAG8BFPESJYSP10IJE9A' where id=37; -update noar ti set v0='VZYC2EVSQNE7K10HWF8BZ6FKZX45ANCG9V41LPF4QK5NS5OLC1XMBWMRWXP3X7APPGKBVOX8YAEORQWLKDALS2TJ5EELTSGC2IESQSU49YNB0T98ITOV2D9NPZPB7P340GD5ZGGGMCW6BJ5WUJQRTX397TIX0146ZD8BQMDH42EJ7ZAZGJ9SWGHIDIGPEE2TBR0QHGPVPH184AN5N0628DLV5PVIBPEUDFMJJMKRHU6YMZAG8BFPESJYSP10IJE9A' where id=37; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='QLGG0UEIAR6V8B7G6BVB9NTUOARB4FRCADPLCGJQY8DO5JA4B76917TI57RDEY6Z1IE1PLMDY7OXZOHABENG6EBQGTKEP2WEYWLA8VX4JUR7BFW189IUSX41ZCEANXXBI0B7W8GYHRFRPLRM43U4U10HZI8ZD6DQLKJY2V5G36PUBQMCYVKGTHBQ30MJFAMLWPB76ECVDG5YN8GVTXE229B8S3P1CJ7DSN0UWRN7JBZF03S9LRZXFI4Z04CY81TRT' where id=37; -update noar ti set v1='QLGG0UEIAR6V8B7G6BVB9NTUOARB4FRCADPLCGJQY8DO5JA4B76917TI57RDEY6Z1IE1PLMDY7OXZOHABENG6EBQGTKEP2WEYWLA8VX4JUR7BFW189IUSX41ZCEANXXBI0B7W8GYHRFRPLRM43U4U10HZI8ZD6DQLKJY2V5G36PUBQMCYVKGTHBQ30MJFAMLWPB76ECVDG5YN8GVTXE229B8S3P1CJ7DSN0UWRN7JBZF03S9LRZXFI4Z04CY81TRT' where id=37; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='WCFWJ2VCYRPGWTYQ5PZUJTMM9VA53T1RBSBUPLD36IXOEY13EV5TT38RARM7V82X2I7ZJ1ZLRXAF99PTYD8K1G8JIGH7N25T43E9NIRPMGR7RV2OL9WLBEJ0OT0CQNBKJIO7F2OMVUA20GKMES8BOU74NBJPNCVODQAJFRLK4SP2WDM6KUYXLOY7C2BYJASID5SQNS7ZFZKWHN5M40BGP9LZKDNK05J4N5HA4MHVJLIFHDEUGJ7XPYNGA79SZBBLT' where id=37; -update noar ti set v2='WCFWJ2VCYRPGWTYQ5PZUJTMM9VA53T1RBSBUPLD36IXOEY13EV5TT38RARM7V82X2I7ZJ1ZLRXAF99PTYD8K1G8JIGH7N25T43E9NIRPMGR7RV2OL9WLBEJ0OT0CQNBKJIO7F2OMVUA20GKMES8BOU74NBJPNCVODQAJFRLK4SP2WDM6KUYXLOY7C2BYJASID5SQNS7ZFZKWHN5M40BGP9LZKDNK05J4N5HA4MHVJLIFHDEUGJ7XPYNGA79SZBBLT' where id=37; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='MO2GY6Y24Z3PV67LWO081TA9FMHWX10JVJ8OUIWPACPFZ9PBHPDLHC0B23IQ2YP49BC6WOBVP1L25GG9T0SMQHEAVVN9T2SK6EBOHYCPMB9BIZYSWBES9E3I8AQS4F2ILSAHEKM8UD9TK8QC6CCAN25ZAWR8J0KYTCO63FYA3BJLP0UIL2RJIAST9GDWNQPL463P3B1WWOTGGPE31C9DHKDI20SHQS4Q872VL6HX3MRYM1JB45SOR8SCGWAXVXWQU' where id=37; -update noar ti set v3='MO2GY6Y24Z3PV67LWO081TA9FMHWX10JVJ8OUIWPACPFZ9PBHPDLHC0B23IQ2YP49BC6WOBVP1L25GG9T0SMQHEAVVN9T2SK6EBOHYCPMB9BIZYSWBES9E3I8AQS4F2ILSAHEKM8UD9TK8QC6CCAN25ZAWR8J0KYTCO63FYA3BJLP0UIL2RJIAST9GDWNQPL463P3B1WWOTGGPE31C9DHKDI20SHQS4Q872VL6HX3MRYM1JB45SOR8SCGWAXVXWQU' where id=37; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='BLEMK4WHMRMRC2168NSCHC0J1XDRQJAJWN898EK8XDNFPUQ8WK9G70B1E4C2J6J97KA2BH97WSPQKL7I7TWP26FVJQH15MQ7AHG0Q0B3W2ZTTBALUYM4S171OJV1YC0D1IVK6VSQMLL27OQR9Q8DPF6NAZJVU7BWCEBW79SVGCWFIBE997DUYGV24MP955I2QWGA0D8TSJLJPU2C6P8ZAX1ZZHBZ7PWBKNLFQ0UWZF3FWFY8E1O6K17P3Z6CY5CD7' where id=38; -update noar ti set v0='BLEMK4WHMRMRC2168NSCHC0J1XDRQJAJWN898EK8XDNFPUQ8WK9G70B1E4C2J6J97KA2BH97WSPQKL7I7TWP26FVJQH15MQ7AHG0Q0B3W2ZTTBALUYM4S171OJV1YC0D1IVK6VSQMLL27OQR9Q8DPF6NAZJVU7BWCEBW79SVGCWFIBE997DUYGV24MP955I2QWGA0D8TSJLJPU2C6P8ZAX1ZZHBZ7PWBKNLFQ0UWZF3FWFY8E1O6K17P3Z6CY5CD7' where id=38; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='3U1EKVNAUPBJSZOF7VTPEYGHFUIJ11JETHL8HU65OWMD8TELHE2THLI58JEBCKXCII7QQQAWUGZKA1FWS0EHZUXQFK8DQJ4OB0PWFLKSHCHZDF2HBCY6WRSI7J447TTFNSDGPH07S9J17RGIXI8ROWSPNRXWLOFLHKZBXPMWDL01JWNWFAZ8SFVMBO2V02E2IZ3AO7KUB0LGJTZBG1FAWT0C6PCP54YI5KRYB7ZJSTPUYZXNB3U5P1YFUZHCJ2U8M' where id=38; -update noar ti set v1='3U1EKVNAUPBJSZOF7VTPEYGHFUIJ11JETHL8HU65OWMD8TELHE2THLI58JEBCKXCII7QQQAWUGZKA1FWS0EHZUXQFK8DQJ4OB0PWFLKSHCHZDF2HBCY6WRSI7J447TTFNSDGPH07S9J17RGIXI8ROWSPNRXWLOFLHKZBXPMWDL01JWNWFAZ8SFVMBO2V02E2IZ3AO7KUB0LGJTZBG1FAWT0C6PCP54YI5KRYB7ZJSTPUYZXNB3U5P1YFUZHCJ2U8M' where id=38; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='XYXXOVJA3MVYICGJI92SLTQ8MA44NNQ456OMEAT8TZDDBCNWJH5ZEUVBGGWR9AXMHXKCAMZT6RQZVR6N1R5XOV257EFKV4JKIBOHRSOU0H057G5OZGGECT6YVFC04GVS3BFHXQYIB0AXOWPDAEM9B82ISPB1WWG9I1QEMGHUXRYFNWK7DWORZMFYP25BTUYYFJB7BYPZ37SCAEWMWNNRXLL8PWQYIW12K68AJ1VGLNAE7X2OY41F0FM9JPDSBUPUQ' where id=38; -update noar ti set v2='XYXXOVJA3MVYICGJI92SLTQ8MA44NNQ456OMEAT8TZDDBCNWJH5ZEUVBGGWR9AXMHXKCAMZT6RQZVR6N1R5XOV257EFKV4JKIBOHRSOU0H057G5OZGGECT6YVFC04GVS3BFHXQYIB0AXOWPDAEM9B82ISPB1WWG9I1QEMGHUXRYFNWK7DWORZMFYP25BTUYYFJB7BYPZ37SCAEWMWNNRXLL8PWQYIW12K68AJ1VGLNAE7X2OY41F0FM9JPDSBUPUQ' where id=38; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='5L73SKY8XCDCE44Z5XSXL2IK878E2ZQV6PCRB3Q1CWQ7QU6OBEAXJO7RN2HPX7IXDR17QR54S3C2YCE8FV9X4ILFP7ZZ69FWM2W50ALPA72SUMDBYWVGC9B8ICDOP9PHYZ89ESF0SD9X71M2JGGNAQYAEL6TK15KCSG7EAIUWSW6M3SOZLD4GSUWJZ971TG9UP1AWK6T00KFZJVOAD76ZV10XZ8PZER0DIKK7FBZ18TQDQ4Z0KX8WQM6LX0APV7H4' where id=38; -update noar ti set v3='5L73SKY8XCDCE44Z5XSXL2IK878E2ZQV6PCRB3Q1CWQ7QU6OBEAXJO7RN2HPX7IXDR17QR54S3C2YCE8FV9X4ILFP7ZZ69FWM2W50ALPA72SUMDBYWVGC9B8ICDOP9PHYZ89ESF0SD9X71M2JGGNAQYAEL6TK15KCSG7EAIUWSW6M3SOZLD4GSUWJZ971TG9UP1AWK6T00KFZJVOAD76ZV10XZ8PZER0DIKK7FBZ18TQDQ4Z0KX8WQM6LX0APV7H4' where id=38; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='B4IMNLSGG9KWHN21N6KI1DE8AM0SFA8P6YV5WF3PWKLW9LLO20AW2BL8MH60HAQEP15LE59KU0U9KFE1ZXW154CJXMWNXNWTV1GNR24T6ES5EAXT0Q9P5SN2FAP4BQI8PTPPE0S7FZ5W5NUAB0YG1UXR4KGWNFFZELBBJDBGR4TWIR6SZ0UWLKL398XP8B7712OUSLUBYJZD03GPBBQMWBVSPZWU1O2B4ALC0MFXF7XEINIDHMUWI64EVIB3YTFWW' where id=39; -update noar ti set v0='B4IMNLSGG9KWHN21N6KI1DE8AM0SFA8P6YV5WF3PWKLW9LLO20AW2BL8MH60HAQEP15LE59KU0U9KFE1ZXW154CJXMWNXNWTV1GNR24T6ES5EAXT0Q9P5SN2FAP4BQI8PTPPE0S7FZ5W5NUAB0YG1UXR4KGWNFFZELBBJDBGR4TWIR6SZ0UWLKL398XP8B7712OUSLUBYJZD03GPBBQMWBVSPZWU1O2B4ALC0MFXF7XEINIDHMUWI64EVIB3YTFWW' where id=39; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='WWW6M0YXSMIZJAFX1NPFPL7B9S75TM45GCU759PAHIDWACM5LB5IOY7GZSYK0QOZC9DQ2NNAI4ZW0RAXSZFV6YZ85RTW5JMJTVPYTCJAHSL2QPOZWURJTUI7U3ASW5P99X5QNXPXOCIWVWWFG86L7YLHCE83HPA1V1P3VFPZB6ASQEZIKM5ZKIMFND91UQMCNNYQKSKEMFDAJ7CE9Y134AV2HI4V2O5XA8EL0CDP3UIOBQ4K0WMIPE3I8HHDB18P3' where id=39; -update noar ti set v1='WWW6M0YXSMIZJAFX1NPFPL7B9S75TM45GCU759PAHIDWACM5LB5IOY7GZSYK0QOZC9DQ2NNAI4ZW0RAXSZFV6YZ85RTW5JMJTVPYTCJAHSL2QPOZWURJTUI7U3ASW5P99X5QNXPXOCIWVWWFG86L7YLHCE83HPA1V1P3VFPZB6ASQEZIKM5ZKIMFND91UQMCNNYQKSKEMFDAJ7CE9Y134AV2HI4V2O5XA8EL0CDP3UIOBQ4K0WMIPE3I8HHDB18P3' where id=39; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='R72ZGMWBTTUYGM2EJ0DQFE7LY1B8C6F83VRQQ1EI1TM4GYOMQORPCNZ2FKS1802XU7UGHGMJ5GLB7TVDT54HNVXK9Q6V7H8M7TOUP9L0FC06Y0X3HASMUJPBEB3VTO47OGQ345QKRUGGMMBFK16LTNBNK1QFH5NF3Y2LVD2UV2NALPUPERN0YB06DZ736UPOJS78W22XAHKQ97LU19AP5JXBSLSMKTU96IP087DB89XNP8463RHND2D81SZXX0HQ9' where id=39; -update noar ti set v2='R72ZGMWBTTUYGM2EJ0DQFE7LY1B8C6F83VRQQ1EI1TM4GYOMQORPCNZ2FKS1802XU7UGHGMJ5GLB7TVDT54HNVXK9Q6V7H8M7TOUP9L0FC06Y0X3HASMUJPBEB3VTO47OGQ345QKRUGGMMBFK16LTNBNK1QFH5NF3Y2LVD2UV2NALPUPERN0YB06DZ736UPOJS78W22XAHKQ97LU19AP5JXBSLSMKTU96IP087DB89XNP8463RHND2D81SZXX0HQ9' where id=39; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='I6RAY59JTJM0VVCWEA3KVOGUZ8LUVEWO9TC7IVR40TRTRX0EOMNNV46AHEFHCFA5MJYFLKPDGJXP97WZKG2K3HGUKG6JX81M3SOEX2WNDOFU3J0WD253TGUBE18343XG2HZLI1N0M7GLQ5K179NZ5J7C4QJKV031V3L1PMULL8EAWT1XL05SHW9ZF8TIQ3RRWIZK8T4QDDV6MHZP9B6WXWS6UPGJ448BSK59XLXHNA2ZKADCUV3DOIGZM1TDD2WVN' where id=39; -update noar ti set v3='I6RAY59JTJM0VVCWEA3KVOGUZ8LUVEWO9TC7IVR40TRTRX0EOMNNV46AHEFHCFA5MJYFLKPDGJXP97WZKG2K3HGUKG6JX81M3SOEX2WNDOFU3J0WD253TGUBE18343XG2HZLI1N0M7GLQ5K179NZ5J7C4QJKV031V3L1PMULL8EAWT1XL05SHW9ZF8TIQ3RRWIZK8T4QDDV6MHZP9B6WXWS6UPGJ448BSK59XLXHNA2ZKADCUV3DOIGZM1TDD2WVN' where id=39; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='993LPX5KQ7LIL089G7YFC4ZLW6MBK1SMIMSHVEVLVLG46WJP2H6K9KC3V7MK4UB0I0LHSQW9I1Y3S4HGC781WR9F5QIDL6TL5P3Q9MAL1IFJW5G9MAII7CI0UOJQYLAJDW837MVT7NVVBG0KN58WBZGWP4TEHE5SKSD6B63MLSWUW3HTENUPHWL81A4SV3JL4GR6FJWQOU3RCBLM3H3ZKKIHLS6UB49N3URGCBVPW8KYNSETT57EODXUSB4FFEB96' where id=40; -update noar ti set v0='993LPX5KQ7LIL089G7YFC4ZLW6MBK1SMIMSHVEVLVLG46WJP2H6K9KC3V7MK4UB0I0LHSQW9I1Y3S4HGC781WR9F5QIDL6TL5P3Q9MAL1IFJW5G9MAII7CI0UOJQYLAJDW837MVT7NVVBG0KN58WBZGWP4TEHE5SKSD6B63MLSWUW3HTENUPHWL81A4SV3JL4GR6FJWQOU3RCBLM3H3ZKKIHLS6UB49N3URGCBVPW8KYNSETT57EODXUSB4FFEB96' where id=40; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='G20KIJ273MJUZIS1CETODHSCF2R7IDEC9B911INZS4J5SIAX7O50LPT593YQS8PZFUFYLVIRHDILBW5J5YPRDG2GKX64NEWVEOPBNBNQIGJXLCXDVH9ETJXR936IM6ZX24OPOQPZ6F39GFLEV27809QH9HZQJDBTWNG62TV1686957XBNX0NLHKY2YB19RVM3D43OELFAQ8DAJR7SJ41Z1ZCJCCBGTH2RIL5L7WR8LB141MHU736KZ0B965T6HATI' where id=40; -update noar ti set v1='G20KIJ273MJUZIS1CETODHSCF2R7IDEC9B911INZS4J5SIAX7O50LPT593YQS8PZFUFYLVIRHDILBW5J5YPRDG2GKX64NEWVEOPBNBNQIGJXLCXDVH9ETJXR936IM6ZX24OPOQPZ6F39GFLEV27809QH9HZQJDBTWNG62TV1686957XBNX0NLHKY2YB19RVM3D43OELFAQ8DAJR7SJ41Z1ZCJCCBGTH2RIL5L7WR8LB141MHU736KZ0B965T6HATI' where id=40; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='KQQWXZC7RRYMYUHA95EXL4KSC2YXUNPVOTXTQGVSRTSAFC4DXMQ7C1DEIJDQ682UIUCHJ0985NI7T6OLLCJ4ZKJH1PM93QT2OJFQP576FSLCVB57GEHSFZEXMVJO0KA0FSND0P4QCIFCSETC6TS5HLOGD6CBGW3QIW241P855G4KMGJPSBDXZ4LGC87GZT6Z8101K4MB4WI680G9ZPDR5IOXM6ZO0L7VBTKY4CRQBL990JLBGAXXEWZPM92BZ7SH4' where id=40; -update noar ti set v2='KQQWXZC7RRYMYUHA95EXL4KSC2YXUNPVOTXTQGVSRTSAFC4DXMQ7C1DEIJDQ682UIUCHJ0985NI7T6OLLCJ4ZKJH1PM93QT2OJFQP576FSLCVB57GEHSFZEXMVJO0KA0FSND0P4QCIFCSETC6TS5HLOGD6CBGW3QIW241P855G4KMGJPSBDXZ4LGC87GZT6Z8101K4MB4WI680G9ZPDR5IOXM6ZO0L7VBTKY4CRQBL990JLBGAXXEWZPM92BZ7SH4' where id=40; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='R7732WUFVPUQ2FSPG2M64R2NWRSJXF65DEXK4ZLARSVJBFNRJYTW0OO5FJHWHLZDDURYFCSCF35WDLHR092CRIFC1DWSDC69XZ13ZDL30Y33IQW9ZS682HUG7JTXMKML50J9YJQQ7757LM5PVXS6YMNECT3N9D1H0MKSZCNV4R3SLEGHRCQXI1335UXBZSPP3GD9ZJ64A0KUB2QQZ4O6CDS9P5LSYWKHW8FZSS8I8HHKTFB1MIBMZZI5M7G70DMIM' where id=40; -update noar ti set v3='R7732WUFVPUQ2FSPG2M64R2NWRSJXF65DEXK4ZLARSVJBFNRJYTW0OO5FJHWHLZDDURYFCSCF35WDLHR092CRIFC1DWSDC69XZ13ZDL30Y33IQW9ZS682HUG7JTXMKML50J9YJQQ7757LM5PVXS6YMNECT3N9D1H0MKSZCNV4R3SLEGHRCQXI1335UXBZSPP3GD9ZJ64A0KUB2QQZ4O6CDS9P5LSYWKHW8FZSS8I8HHKTFB1MIBMZZI5M7G70DMIM' where id=40; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='Z3MCG8M3D3Y1FY3T9LXZGFNSPSABYWJPN1LRNSWZZDWLVUMUROCS747SFXQ16L0EFLZ8ZUTXFR0664NYK2MNRBO1CZ0VDHZN9WNIJZSTXD1101APO8RBR4P6NM4CS3KP7B3EBPEJI9VVVO8VSVLZ79B3YX559EC0TF4ANCB9V5DGR0SEX7UX78D9BUIFAZKFWP0UCBOMROPT9AEBMPC0NTM9O6ZGC540D5RF5DR3XVXDC063N6I3EV5MT2O6KYPHO' where id=41; -update noar ti set v0='Z3MCG8M3D3Y1FY3T9LXZGFNSPSABYWJPN1LRNSWZZDWLVUMUROCS747SFXQ16L0EFLZ8ZUTXFR0664NYK2MNRBO1CZ0VDHZN9WNIJZSTXD1101APO8RBR4P6NM4CS3KP7B3EBPEJI9VVVO8VSVLZ79B3YX559EC0TF4ANCB9V5DGR0SEX7UX78D9BUIFAZKFWP0UCBOMROPT9AEBMPC0NTM9O6ZGC540D5RF5DR3XVXDC063N6I3EV5MT2O6KYPHO' where id=41; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='46MKAPEF3NX2QVY44GJC9D7V2Z24DL6B32XK5XG6WI46CB59G13U8CVKBLGF2Z3JI3DTIL4ZCV1QUM8KZJ7HFINJAR69U9XAZLBQK3T0N3D07F0VUBHGXTDSLEM531CDBACDYN51GQ0C0NNALOLSUY5TVEC9YUFB7N17GIHLL1OQIT69VY2BPTP4ZL4RLGJFM6BCNIDZGM2AQ47OKRAA3HUH1H57QBQYDLX3DXXUI4GXIE05822GCIKGGLVH0I5CD' where id=41; -update noar ti set v1='46MKAPEF3NX2QVY44GJC9D7V2Z24DL6B32XK5XG6WI46CB59G13U8CVKBLGF2Z3JI3DTIL4ZCV1QUM8KZJ7HFINJAR69U9XAZLBQK3T0N3D07F0VUBHGXTDSLEM531CDBACDYN51GQ0C0NNALOLSUY5TVEC9YUFB7N17GIHLL1OQIT69VY2BPTP4ZL4RLGJFM6BCNIDZGM2AQ47OKRAA3HUH1H57QBQYDLX3DXXUI4GXIE05822GCIKGGLVH0I5CD' where id=41; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='KJQPN7FELWSAGIMTUZSS5G1Y4S6RZRDM117CQMC2VTXX7WP1WNPHRFTJORJ0ZAV0VKVKRMKXSPL60LTU9BMKXF50XELPVUYYGWHPH5KXIKTJBT1ZUQ5MK4QMKR1I22S8FJHYK29E2UQXK8J50D3JSIWFHGMBENW4KWWZH0RT8F3CGKGNL6F7NHJUV2JX2FXG8AFKRXAO0B5OK9ZEW95LGDJK52OQLW1DZIIIFXXO54JAGOFO350CLZWR9HDEIFKIH' where id=41; -update noar ti set v2='KJQPN7FELWSAGIMTUZSS5G1Y4S6RZRDM117CQMC2VTXX7WP1WNPHRFTJORJ0ZAV0VKVKRMKXSPL60LTU9BMKXF50XELPVUYYGWHPH5KXIKTJBT1ZUQ5MK4QMKR1I22S8FJHYK29E2UQXK8J50D3JSIWFHGMBENW4KWWZH0RT8F3CGKGNL6F7NHJUV2JX2FXG8AFKRXAO0B5OK9ZEW95LGDJK52OQLW1DZIIIFXXO54JAGOFO350CLZWR9HDEIFKIH' where id=41; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='YY06IPGGO2185RI97507ZEU5GJDLL1B1RRXQBPR84A9FZJAS0HIXW5UV3WSD5H274H16JYTIKDKHZ972RWEW1EL0CISWMTJBJ5O4DM649JN3GX1TJGHFOUTBKDGBR2J2RIUG2O8YEVT0Z82QSY0CPC4FRA1S4SVZKXOBS45MUV90MTHVOSU0DSW2EAI4NNFOC2CDKDBNIQGUK887SF6H19XXRV6CQCBGZ4YUWJ49W4HD4IXAHD8Q6PNU0CKO168NV' where id=41; -update noar ti set v3='YY06IPGGO2185RI97507ZEU5GJDLL1B1RRXQBPR84A9FZJAS0HIXW5UV3WSD5H274H16JYTIKDKHZ972RWEW1EL0CISWMTJBJ5O4DM649JN3GX1TJGHFOUTBKDGBR2J2RIUG2O8YEVT0Z82QSY0CPC4FRA1S4SVZKXOBS45MUV90MTHVOSU0DSW2EAI4NNFOC2CDKDBNIQGUK887SF6H19XXRV6CQCBGZ4YUWJ49W4HD4IXAHD8Q6PNU0CKO168NV' where id=41; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='OE23U00BRJNAN1Q6CLG6UX86B4B7F04DNNZ7488OALTICLR3RQL5EKLTQKRH1648N96KZ4JA5GDA19ZL7W0RHH2VN6ND6ZG9Y7OW2JFN3G03JSYEPX9F8ACQ8OPSW64X2GMXA45MXK5L5C84LJH5NGCDD0Z60GN0J48KE72U2QZ78NERFSU6E1KDRNKOFFU6ZXEO5D3708Z28A3A4S7Y6Z6OIQTQ947OZ5E9CDK7ZG73FME1IDK56HWWHE57UMH48' where id=42; -update noar ti set v0='OE23U00BRJNAN1Q6CLG6UX86B4B7F04DNNZ7488OALTICLR3RQL5EKLTQKRH1648N96KZ4JA5GDA19ZL7W0RHH2VN6ND6ZG9Y7OW2JFN3G03JSYEPX9F8ACQ8OPSW64X2GMXA45MXK5L5C84LJH5NGCDD0Z60GN0J48KE72U2QZ78NERFSU6E1KDRNKOFFU6ZXEO5D3708Z28A3A4S7Y6Z6OIQTQ947OZ5E9CDK7ZG73FME1IDK56HWWHE57UMH48' where id=42; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='3F403KPRKN4YWEWE7WSN3MMD5TIRZXP9H7T1P9ZGIYSR8O8QAS65NJKB07TMD875F3NN7RJNDX7FCWNFFEYZ1IIL7B1IAKC21SF1K4K89YMQB0OD0FWQRSPMLGZ8PNXZ0TV2FUKOWHZ48CLP17MCPLLQU1BBOWL43DOHDGXEV7PRA3MA7N80C2MRH9SXXD5YL4WW1C0VPJ6G2UI8K6U82WV1WCZFC50JENMFSXADNVENE71JFDPDIS6VPIQ361NWQ' where id=42; -update noar ti set v1='3F403KPRKN4YWEWE7WSN3MMD5TIRZXP9H7T1P9ZGIYSR8O8QAS65NJKB07TMD875F3NN7RJNDX7FCWNFFEYZ1IIL7B1IAKC21SF1K4K89YMQB0OD0FWQRSPMLGZ8PNXZ0TV2FUKOWHZ48CLP17MCPLLQU1BBOWL43DOHDGXEV7PRA3MA7N80C2MRH9SXXD5YL4WW1C0VPJ6G2UI8K6U82WV1WCZFC50JENMFSXADNVENE71JFDPDIS6VPIQ361NWQ' where id=42; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='A689HC5A2R0QKAS16GKGAHET6NM05JUJ6AXYM71HNYC3IXDW9E476XWMCHBQCQPOM4S44JQTWSZ23D65RIMQ4CZA6TJS5AUSVB3MXQNKVML5J5P4UG2TTPPS128LJACSHZX75SG3ZT8WWJ0RSCKOAL5IOB2B5EFDBAL67PM7YGCGXDHNSMS2WQDDWZTVXENSM6EFOZ0O8756JFBW03XHK5BJ721K4YIXI780QI6C9UHPQL9WKPDM0G6CCYVZE89MK' where id=42; -update noar ti set v2='A689HC5A2R0QKAS16GKGAHET6NM05JUJ6AXYM71HNYC3IXDW9E476XWMCHBQCQPOM4S44JQTWSZ23D65RIMQ4CZA6TJS5AUSVB3MXQNKVML5J5P4UG2TTPPS128LJACSHZX75SG3ZT8WWJ0RSCKOAL5IOB2B5EFDBAL67PM7YGCGXDHNSMS2WQDDWZTVXENSM6EFOZ0O8756JFBW03XHK5BJ721K4YIXI780QI6C9UHPQL9WKPDM0G6CCYVZE89MK' where id=42; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='05RIS5NFQ3ZVDKNECQPV7E7XQ13JPG3WGB40B4WOJ9QERREJ6O8KBBO9BLGZ2GLJJIJCCZOC3QSLH8S6UCU63KZGRTAVV9163IM8XJIB3W5ZNYG299G4OT3OBZOCB7IESUT9HMMLNJYKTIYKZAC106YRV8NSJKIGZ43CEA1YCGJKJ08UHL1JY0XE4CKWQ0BCBXAL2YI8D8WFFYU1IDN2KS9TTGX6CNIBXO653PPC6PXEOF7D5SHS8HTQKLZ1R1K62' where id=42; -update noar ti set v3='05RIS5NFQ3ZVDKNECQPV7E7XQ13JPG3WGB40B4WOJ9QERREJ6O8KBBO9BLGZ2GLJJIJCCZOC3QSLH8S6UCU63KZGRTAVV9163IM8XJIB3W5ZNYG299G4OT3OBZOCB7IESUT9HMMLNJYKTIYKZAC106YRV8NSJKIGZ43CEA1YCGJKJ08UHL1JY0XE4CKWQ0BCBXAL2YI8D8WFFYU1IDN2KS9TTGX6CNIBXO653PPC6PXEOF7D5SHS8HTQKLZ1R1K62' where id=42; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='D1G815F5O4FQG47FUSLT4QB2AFWFCAOF011LO7O0AQ0OF18N8Q8RK5IPTDDNJR3ALHVG1W40ZUA84QTHV71720GRBT6SZG6UAL5A80NIS3IM168Y5GEWDJZ2JZ7CZQHNRUUULBTYKZLKE5ZZRQ6GZYJX0VTM47MKHRPJXM4WZRZXMO4CRURT8BL0J7XYFO3CYN0LE61FVKPAAB8D8I9WLNFT5R0J9R3KKH8LKYWLREW59TY9GE3HPKYBOCGLQI6Q6' where id=43; -update noar ti set v0='D1G815F5O4FQG47FUSLT4QB2AFWFCAOF011LO7O0AQ0OF18N8Q8RK5IPTDDNJR3ALHVG1W40ZUA84QTHV71720GRBT6SZG6UAL5A80NIS3IM168Y5GEWDJZ2JZ7CZQHNRUUULBTYKZLKE5ZZRQ6GZYJX0VTM47MKHRPJXM4WZRZXMO4CRURT8BL0J7XYFO3CYN0LE61FVKPAAB8D8I9WLNFT5R0J9R3KKH8LKYWLREW59TY9GE3HPKYBOCGLQI6Q6' where id=43; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='45JZXZBA53MFMOXQG7UQH6X71TNWY03M2X742VSXT7TFM40B7KYBSNZMWDU6QFHJ5LUEQTOLK3M8KJYSWMIJ8CSYY2R9V1MMJK8L6C997D9PYNWIAUQ7C33BLNKY36BFZ66LC0DJLZXCLQ44N8ANZ2XPPJQUD8N782IIW94Q5U5TIA38T31Q1HUBS6D8QNT2XWQPFD1KQZH8EDSAGECSRJI9ZSCSU4M9X62OT1ECPJGXU5V03SWXH98SF8MGTPWKM' where id=43; -update noar ti set v1='45JZXZBA53MFMOXQG7UQH6X71TNWY03M2X742VSXT7TFM40B7KYBSNZMWDU6QFHJ5LUEQTOLK3M8KJYSWMIJ8CSYY2R9V1MMJK8L6C997D9PYNWIAUQ7C33BLNKY36BFZ66LC0DJLZXCLQ44N8ANZ2XPPJQUD8N782IIW94Q5U5TIA38T31Q1HUBS6D8QNT2XWQPFD1KQZH8EDSAGECSRJI9ZSCSU4M9X62OT1ECPJGXU5V03SWXH98SF8MGTPWKM' where id=43; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='3F00ROGF7G6ZJR61D63E6SSO7DK9NR44CFLCC4CAZVX13XAEUAMMSDK8L5MBJPRG2JR7HCUWT4JATW4MWVRSH0XLDQVRCWVRBDOWVT8VSVDA3BEQU1SZEZXGZW6T5J7TLCUIQ4S4J92PJRG6HV2UULVIU40XV29L1CB9TPW7G1Y8EZEFVOAWQ13TGCVWIXL8N2WBPE32KIOUV5MX7SAFBC1Q0K43US8WK1NAUABBCT41JD525UWGC6M4QQ7JHM9SB' where id=43; -update noar ti set v2='3F00ROGF7G6ZJR61D63E6SSO7DK9NR44CFLCC4CAZVX13XAEUAMMSDK8L5MBJPRG2JR7HCUWT4JATW4MWVRSH0XLDQVRCWVRBDOWVT8VSVDA3BEQU1SZEZXGZW6T5J7TLCUIQ4S4J92PJRG6HV2UULVIU40XV29L1CB9TPW7G1Y8EZEFVOAWQ13TGCVWIXL8N2WBPE32KIOUV5MX7SAFBC1Q0K43US8WK1NAUABBCT41JD525UWGC6M4QQ7JHM9SB' where id=43; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='NBXHDWG2L8H1845MJSD52ZPK7W89T2GPYHWIT2PR9X3BC69632RG0KHE3W6FHD51KNG58Q944SI99SGSZXKM3SBHPAWRI57NTWM0V5F5RMM97B6WJ07MK0D1J67O2HY1ZBWBSQ4YEUFIEPFE0YNYKHH8GRJELYW9G1WJFEX4TAIEK7NXMHJSAP2I48ND2XXZI2EO88623WFBPV87GVNCH9CFUIWCGJ1242PPSOZXGTMNOMPQVXULNKVBFPWDUC4U6' where id=43; -update noar ti set v3='NBXHDWG2L8H1845MJSD52ZPK7W89T2GPYHWIT2PR9X3BC69632RG0KHE3W6FHD51KNG58Q944SI99SGSZXKM3SBHPAWRI57NTWM0V5F5RMM97B6WJ07MK0D1J67O2HY1ZBWBSQ4YEUFIEPFE0YNYKHH8GRJELYW9G1WJFEX4TAIEK7NXMHJSAP2I48ND2XXZI2EO88623WFBPV87GVNCH9CFUIWCGJ1242PPSOZXGTMNOMPQVXULNKVBFPWDUC4U6' where id=43; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='ZASF426FE5FMJKZ7MC4WJJL0BQU9OYY1TRLJK39WCVAVY9B0Q5N4XUVO9XSEQDN9L9HIWSZU51R1WBMHPXRJXNS98660R84NC4J6PRWFBPTQSA28A35SY4A4G8S0JGSOOTBR1781MNE0VMLI1FDGY5MRTW1MFB7ECPQJ4GU36W2WCTE9EXCQDR5WUKSPZYVGCB425GK8Y66UPNNCG32F2FTNZ57OQDIUOXOR9PS8SK5AXU83SCELLRDDRHRCMHLQS' where id=44; -update noar ti set v0='ZASF426FE5FMJKZ7MC4WJJL0BQU9OYY1TRLJK39WCVAVY9B0Q5N4XUVO9XSEQDN9L9HIWSZU51R1WBMHPXRJXNS98660R84NC4J6PRWFBPTQSA28A35SY4A4G8S0JGSOOTBR1781MNE0VMLI1FDGY5MRTW1MFB7ECPQJ4GU36W2WCTE9EXCQDR5WUKSPZYVGCB425GK8Y66UPNNCG32F2FTNZ57OQDIUOXOR9PS8SK5AXU83SCELLRDDRHRCMHLQS' where id=44; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='6FQVOHCK6SESFKS10D3XLCGCMU73G2P4LALWX9FVXORPD43B67ST9AK1KD3PSHF3D9UQCROLCCDHGT0VX2T1CK3MUNI7DI0Y9K42UBKWI8OHQERT0JHFZ3BHGHL7D7OTOQDWD3WMKR26WNG4O5R7GP38LH7GDBMETCZQ9L5Q2O00UHCBL3Y9PIKXL32Y268F8K28NHCPWS189UDLZ1S58A1GNUOM5IWZTHXEQ3HK5W6S2YYUXRC9KEVQESVK4ASDL' where id=44; -update noar ti set v1='6FQVOHCK6SESFKS10D3XLCGCMU73G2P4LALWX9FVXORPD43B67ST9AK1KD3PSHF3D9UQCROLCCDHGT0VX2T1CK3MUNI7DI0Y9K42UBKWI8OHQERT0JHFZ3BHGHL7D7OTOQDWD3WMKR26WNG4O5R7GP38LH7GDBMETCZQ9L5Q2O00UHCBL3Y9PIKXL32Y268F8K28NHCPWS189UDLZ1S58A1GNUOM5IWZTHXEQ3HK5W6S2YYUXRC9KEVQESVK4ASDL' where id=44; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='7UG64XDR4FS4DZG9QTWHWURK1GD2LPCHG8E0VBWE1SWTHVRVD934Y5IKDF5USIMNYG822IT0KMAZ223823C7JURMEZPY5JJY0P5LY7QM7I3MCPWF1OLGPW2PJT1PZYXG71EEWMTM1U8G4FFQZUH8KXHHAMVGSPXR55QLFJ94WUNDGBI0IVBXZX7VODOLERLF0L9KW4RTTQGQF2MSIVUM0JT8LF57NFELCYA1PFNR3QSP471X3OKBGNZ5YH94ZGHWC' where id=44; -update noar ti set v2='7UG64XDR4FS4DZG9QTWHWURK1GD2LPCHG8E0VBWE1SWTHVRVD934Y5IKDF5USIMNYG822IT0KMAZ223823C7JURMEZPY5JJY0P5LY7QM7I3MCPWF1OLGPW2PJT1PZYXG71EEWMTM1U8G4FFQZUH8KXHHAMVGSPXR55QLFJ94WUNDGBI0IVBXZX7VODOLERLF0L9KW4RTTQGQF2MSIVUM0JT8LF57NFELCYA1PFNR3QSP471X3OKBGNZ5YH94ZGHWC' where id=44; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='AWIJB0TG8E28Q6Z994V6W4JL467CY5IMIT0RPUU2WO84S0FL7PM1BCFLAWBXGYQOS28Y6QF2Z0AX6HY4LDZG2GCRD3EBO9SZJ701UR65EBMPGOKSAU0VLRQX6FC248O7F4WVEYQBEL1V1U689SFLNA6JTV5H0KIHT65I2U1LDMPRQEL7HLED0HV68QIXFPJ1VVDOTZGG7PHGA269MMB4MEWQPQH5ERFYZQXS4RNE8PB5LJI950ODXK8S96VS3T8YS' where id=44; -update noar ti set v3='AWIJB0TG8E28Q6Z994V6W4JL467CY5IMIT0RPUU2WO84S0FL7PM1BCFLAWBXGYQOS28Y6QF2Z0AX6HY4LDZG2GCRD3EBO9SZJ701UR65EBMPGOKSAU0VLRQX6FC248O7F4WVEYQBEL1V1U689SFLNA6JTV5H0KIHT65I2U1LDMPRQEL7HLED0HV68QIXFPJ1VVDOTZGG7PHGA269MMB4MEWQPQH5ERFYZQXS4RNE8PB5LJI950ODXK8S96VS3T8YS' where id=44; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='JG9YIO87UTZM2RAH3O5SUU7VDOYWYC2O4WTN9WIEGY9OZ16ZIK3X0QKRBS0M7AFOHZUA7F3JHFKWMUDI9UM6LB8TXCROHPUYJ7Z9GC9Y27X5XA85SJOJK1MRWM15PE6WAU68XYHPRO3VD3F6LDNN20BIFC4D2XNDKA4CMS1VOZG4GQVLWG61K3E5RXPYHL2TWQ9UKX3H5DHEESURLUHOCJLC2PWVGI1UE7LVP6U2BTS0PCCPQBPV214ILUA7MLWFD' where id=45; -update noar ti set v0='JG9YIO87UTZM2RAH3O5SUU7VDOYWYC2O4WTN9WIEGY9OZ16ZIK3X0QKRBS0M7AFOHZUA7F3JHFKWMUDI9UM6LB8TXCROHPUYJ7Z9GC9Y27X5XA85SJOJK1MRWM15PE6WAU68XYHPRO3VD3F6LDNN20BIFC4D2XNDKA4CMS1VOZG4GQVLWG61K3E5RXPYHL2TWQ9UKX3H5DHEESURLUHOCJLC2PWVGI1UE7LVP6U2BTS0PCCPQBPV214ILUA7MLWFD' where id=45; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='HERPPL6A3AUITLQHMY061HWO2IK8GF3L5NORWYH2CC8PQA4C2IPLKSDGSIKY22P3FVV27VA3O2BYZYCIRX4EOM3CVV2BKZDWWOPKREEBBI12K9IC5DR7ZJADKCRG5CC7KQZPWSBZYTW9MJNLOEQ3EFX5YDRXBV5U2WQCKH2KM580HD5LX3G61DRXHTELYTD1J412BZSZZRTL8L63E0Y2AO4P9D0H7Q2X08LQFYIJ9MO5X1SKINILUD7N2TAS3Q14C' where id=45; -update noar ti set v1='HERPPL6A3AUITLQHMY061HWO2IK8GF3L5NORWYH2CC8PQA4C2IPLKSDGSIKY22P3FVV27VA3O2BYZYCIRX4EOM3CVV2BKZDWWOPKREEBBI12K9IC5DR7ZJADKCRG5CC7KQZPWSBZYTW9MJNLOEQ3EFX5YDRXBV5U2WQCKH2KM580HD5LX3G61DRXHTELYTD1J412BZSZZRTL8L63E0Y2AO4P9D0H7Q2X08LQFYIJ9MO5X1SKINILUD7N2TAS3Q14C' where id=45; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='YR5ZMT5CCHI8OIPLX8T01WGBIXXYBVJ8M92NYYQ2NNLM9GW27Z22FRN8Y3DDHE53QSSUGIH6NPSZXCAXVSLHA99VIA61Z15AEXE5CD0RJBJZ64WQE9BTZW8XIG89WYT5U7MONIE46KFH1WV8KZP4HQXYRTSOM39ZI25FMIC409J698GSHVYA22U663VZC77V4KJFB95K7GITFKF82RL5QHZNC2OO5ELLF6OUO3EZNHECA8IV3X71IZBRMUICPQWI9' where id=45; -update noar ti set v2='YR5ZMT5CCHI8OIPLX8T01WGBIXXYBVJ8M92NYYQ2NNLM9GW27Z22FRN8Y3DDHE53QSSUGIH6NPSZXCAXVSLHA99VIA61Z15AEXE5CD0RJBJZ64WQE9BTZW8XIG89WYT5U7MONIE46KFH1WV8KZP4HQXYRTSOM39ZI25FMIC409J698GSHVYA22U663VZC77V4KJFB95K7GITFKF82RL5QHZNC2OO5ELLF6OUO3EZNHECA8IV3X71IZBRMUICPQWI9' where id=45; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='3LXRDHCHL5PEQYT7TDNK1HX2OBGN4N23MQI20QQ4RDDGS4Z6QZVGKJYU7YOD1Z5A0WOMHFMTO1WI6XETQCC4BMSGAJEYNC257PWL7285KOSTX4FQWDTGP9OUI7EEFSTTC9SJAC46FUNOCG3T7QVVDXLEZYGVYPUBSVQSB26DR5TC19TM36XBZ74GVUDX65HWDKMHO1JP7EIGE1FE3TU941FKRACIG66D4BH77A4DPJN5VBEW80K5623WNVZVJD5KJ' where id=45; -update noar ti set v3='3LXRDHCHL5PEQYT7TDNK1HX2OBGN4N23MQI20QQ4RDDGS4Z6QZVGKJYU7YOD1Z5A0WOMHFMTO1WI6XETQCC4BMSGAJEYNC257PWL7285KOSTX4FQWDTGP9OUI7EEFSTTC9SJAC46FUNOCG3T7QVVDXLEZYGVYPUBSVQSB26DR5TC19TM36XBZ74GVUDX65HWDKMHO1JP7EIGE1FE3TU941FKRACIG66D4BH77A4DPJN5VBEW80K5623WNVZVJD5KJ' where id=45; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='9ENTSCYFZO62M5ULORB17RJQLU5V81JGLS82QTRPSZ7H0K1MV0LYI1W96DQ8P3CA2PAIXOVZLZWBH6GDNBOTT82UC4W5SQR0V76LN0H0H84TIRSPN49V1JESHVFCAQPVIAWN1UQ70JZJ8W645XXHF6QQA57VKOIJSVWSKJHRASHE3CIOXD8FW15SKMQ5JU925WT1ID84BTJGU0FIK46G0XFJD6YQIQFYMT5P1EWMUNY6ABY3EHLQEMUW23VB5BUHV' where id=46; -update noar ti set v0='9ENTSCYFZO62M5ULORB17RJQLU5V81JGLS82QTRPSZ7H0K1MV0LYI1W96DQ8P3CA2PAIXOVZLZWBH6GDNBOTT82UC4W5SQR0V76LN0H0H84TIRSPN49V1JESHVFCAQPVIAWN1UQ70JZJ8W645XXHF6QQA57VKOIJSVWSKJHRASHE3CIOXD8FW15SKMQ5JU925WT1ID84BTJGU0FIK46G0XFJD6YQIQFYMT5P1EWMUNY6ABY3EHLQEMUW23VB5BUHV' where id=46; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='DPPW2OFFL7947HVD0B21ZDIFTK7OMK5TJRZWAOXYLNFLT7E99Z5AEYH66MMJEEPVN71EOW7QFPRR0U8L6GQVELC80LY78EJRIL2LCHSX6JDKN3IWJXNPSV88JWBZNNAHHSK75KFL1BZ0DTO26C0IB2ME3K656QJYIBXNEUDPLFEM1N36K310CIQXEJJS15ACJCQJ7S9FR1A8U5VH5IPMUTJENU2CGXEQ7HTY1AD6VPTY4DH4UA1OM93TLZS2R5Y9R' where id=46; -update noar ti set v1='DPPW2OFFL7947HVD0B21ZDIFTK7OMK5TJRZWAOXYLNFLT7E99Z5AEYH66MMJEEPVN71EOW7QFPRR0U8L6GQVELC80LY78EJRIL2LCHSX6JDKN3IWJXNPSV88JWBZNNAHHSK75KFL1BZ0DTO26C0IB2ME3K656QJYIBXNEUDPLFEM1N36K310CIQXEJJS15ACJCQJ7S9FR1A8U5VH5IPMUTJENU2CGXEQ7HTY1AD6VPTY4DH4UA1OM93TLZS2R5Y9R' where id=46; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='UJZNBG6GAPE11AUNX0HMYZC5XYDQ2F8QIPNYUSK1K0BPMT9PT3KXJN71M588CZD6N9829W5OY6ZUBO2NNHN548NE9A99M6TUUO0B157DYAP67XK600355KKALHMKBQLZ3XI39T7YC8JW2OMMBMC3SLH49VLJGDAOOVDCBTY3KKV0OW8EUF1JK27Z19EA8P97P15TEV4KRP1J974FJD4M2QWGUTKL52UT6XX7WRAG1NNSSAFUQNP7JPVUWENDHTN57' where id=46; -update noar ti set v2='UJZNBG6GAPE11AUNX0HMYZC5XYDQ2F8QIPNYUSK1K0BPMT9PT3KXJN71M588CZD6N9829W5OY6ZUBO2NNHN548NE9A99M6TUUO0B157DYAP67XK600355KKALHMKBQLZ3XI39T7YC8JW2OMMBMC3SLH49VLJGDAOOVDCBTY3KKV0OW8EUF1JK27Z19EA8P97P15TEV4KRP1J974FJD4M2QWGUTKL52UT6XX7WRAG1NNSSAFUQNP7JPVUWENDHTN57' where id=46; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='UZQLK670RHRNSORMDVM9Y3CBR0YHPEVIZY84XL9OWXBWL2XSPWR163ICFEU0T9F56O873P2ZS8NACN28CU00T93I3F9SIAYZ66IPWIAUB0R8DG1L0PTQCMW3CZP7P7LE3VKQPWWTWETSMM3HCG21466YF76TKL8DZS5HKRXLWSNU7M8QGX2PHLXDSFY938WK8LSE141P2RAVNWIYY75VVBMIVSELXZMVO8JSVKOKO5O8TEMMS6OY4ZQ7742RXU9MG' where id=46; -update noar ti set v3='UZQLK670RHRNSORMDVM9Y3CBR0YHPEVIZY84XL9OWXBWL2XSPWR163ICFEU0T9F56O873P2ZS8NACN28CU00T93I3F9SIAYZ66IPWIAUB0R8DG1L0PTQCMW3CZP7P7LE3VKQPWWTWETSMM3HCG21466YF76TKL8DZS5HKRXLWSNU7M8QGX2PHLXDSFY938WK8LSE141P2RAVNWIYY75VVBMIVSELXZMVO8JSVKOKO5O8TEMMS6OY4ZQ7742RXU9MG' where id=46; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='QYCOIHOOB8T4ZSR7SSU8GV1M4WJPO16XHINOJ31CQJTOJFTHO3QWZZK1UXZJMECUPOJOM151CQB9EZSA054E7WT5M48EJH9LQ7CV5G6VU9ZOUHQ9Q97HOIR0WMG8CHMMQYHZY3Z3ENKB3VJPB6O54A8RYY8UHLD439HK2FFUJ11QIXXATAKLQ3VZ692PVK5BM39VTBYQ9T6WLG8VNC4WPUBCMZZ2HUWLMEABGDRO74MWM7B1IZQZUTKI2H2R3SG2V' where id=47; -update noar ti set v0='QYCOIHOOB8T4ZSR7SSU8GV1M4WJPO16XHINOJ31CQJTOJFTHO3QWZZK1UXZJMECUPOJOM151CQB9EZSA054E7WT5M48EJH9LQ7CV5G6VU9ZOUHQ9Q97HOIR0WMG8CHMMQYHZY3Z3ENKB3VJPB6O54A8RYY8UHLD439HK2FFUJ11QIXXATAKLQ3VZ692PVK5BM39VTBYQ9T6WLG8VNC4WPUBCMZZ2HUWLMEABGDRO74MWM7B1IZQZUTKI2H2R3SG2V' where id=47; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='M9Z0XNVK6R9G0N4AS7IDBVII5JFYPM48ZGBQCMB7V4T2JVZBVE67HJNI04GK9L426B0VO8DKI33DH2DV80HY7BW5RZS06JI3CNA5RRCVKFVKO85JOMQ43L3F2T3ZPC81HXWZBYNNJAZXTBKDI7U3LIKPVMR8F0DJN5XLGW0B37AU79KROR1THW1MRFIMX1Q51N6N05WJMHRYO2P5UW48511HOIKBNO1W25OT02CWYTR32T82ETHEZL2BNE8L3JISO' where id=47; -update noar ti set v1='M9Z0XNVK6R9G0N4AS7IDBVII5JFYPM48ZGBQCMB7V4T2JVZBVE67HJNI04GK9L426B0VO8DKI33DH2DV80HY7BW5RZS06JI3CNA5RRCVKFVKO85JOMQ43L3F2T3ZPC81HXWZBYNNJAZXTBKDI7U3LIKPVMR8F0DJN5XLGW0B37AU79KROR1THW1MRFIMX1Q51N6N05WJMHRYO2P5UW48511HOIKBNO1W25OT02CWYTR32T82ETHEZL2BNE8L3JISO' where id=47; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='G9EILFGX9P8FSREERZ6D61KGH4GWIZL8LNN9PTXITNY9R800SYWBJ01KZMUXRSZVJ71XNLLTP8FSK78X4VE9S7L5OM1YAQVMBNYHRLZVLF9R8OK1PV946K7E1SG6G47IZL9A3Q59DHEQFFNJ5LKLXE0Y0L4FO4CH5Y2MWPJGVMS51X6AL21S3SBMDPI9PTE4QCNY7NSKT3RJE91NULTRAED38I9J372RQ0WBN2UPCC7P0ILLBX5A33VJUS21YW8DS' where id=47; -update noar ti set v2='G9EILFGX9P8FSREERZ6D61KGH4GWIZL8LNN9PTXITNY9R800SYWBJ01KZMUXRSZVJ71XNLLTP8FSK78X4VE9S7L5OM1YAQVMBNYHRLZVLF9R8OK1PV946K7E1SG6G47IZL9A3Q59DHEQFFNJ5LKLXE0Y0L4FO4CH5Y2MWPJGVMS51X6AL21S3SBMDPI9PTE4QCNY7NSKT3RJE91NULTRAED38I9J372RQ0WBN2UPCC7P0ILLBX5A33VJUS21YW8DS' where id=47; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='9QLF7LOZG6PXILNQ8MNQJBLX1Z6KC0M7OO8QFLSWW4J7TPNKS5QPHU2S54ASGC1XOQGA8L1V9043ASI75YY4N92QG4OTG29OVOQ17T0GGT7ZE2ELR913TSC0P9B9AUE200UY979ZURXF5908BCYB9TSTEKCVNZEOHA590K6ZPRQZS7XHC2ANGHDA65NWVZ4A6EU6B2CD71EKNPLC9OL6CC4XNWUPXNNNAFRN9LDFBGK7R7Q7RQCH9RYKJPF424RDQ' where id=47; -update noar ti set v3='9QLF7LOZG6PXILNQ8MNQJBLX1Z6KC0M7OO8QFLSWW4J7TPNKS5QPHU2S54ASGC1XOQGA8L1V9043ASI75YY4N92QG4OTG29OVOQ17T0GGT7ZE2ELR913TSC0P9B9AUE200UY979ZURXF5908BCYB9TSTEKCVNZEOHA590K6ZPRQZS7XHC2ANGHDA65NWVZ4A6EU6B2CD71EKNPLC9OL6CC4XNWUPXNNNAFRN9LDFBGK7R7Q7RQCH9RYKJPF424RDQ' where id=47; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='84RTZR1O70NRAEV1G7078FW2C01W0N7M7DLJVQS2AN3IN45CBOQHXTE15LVS1O23R2HUBXAF73KW2FCQWAOJ18D33097V2VUI45FE3UM5DNKUPSGAB8X45DXZNKTL00TXM7R9IWEE5ID3DTVYTD6PX3IO7YEMUF5CKXUJS3KZ9FAH9ZPYTZV816ZTQHZKITOKK6SCWP62YOE10ZAAY78KVBE8Y9MVW0I3HU94KII7FPCBDM8K6Y1S4SASYW9SK9N0' where id=48; -update noar ti set v0='84RTZR1O70NRAEV1G7078FW2C01W0N7M7DLJVQS2AN3IN45CBOQHXTE15LVS1O23R2HUBXAF73KW2FCQWAOJ18D33097V2VUI45FE3UM5DNKUPSGAB8X45DXZNKTL00TXM7R9IWEE5ID3DTVYTD6PX3IO7YEMUF5CKXUJS3KZ9FAH9ZPYTZV816ZTQHZKITOKK6SCWP62YOE10ZAAY78KVBE8Y9MVW0I3HU94KII7FPCBDM8K6Y1S4SASYW9SK9N0' where id=48; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='93PI3V8FY5GI1RUR6FVC8LPAR3QVI2GG3QVZECL2ES7TXUVFBMV4PGJC4CX6JTZ8L4TBAW7DCNKE6UZR2JFD4KKNMIOEARK33YQ4FEFN3A21I38VEUUBLN3921NA1K0SFR9MZ7EUPFJNL3AGW4YS8LOCVNQ6ZTK2JZF2EZJLH5F2IP3HUBUT1KSI92E4AXG264F2B92HWNTXZRXOXKIFNMP8W4OL1UM90RE2NZJIHBV5FFKNPW2XTBAPLQN0WWWER' where id=48; -update noar ti set v1='93PI3V8FY5GI1RUR6FVC8LPAR3QVI2GG3QVZECL2ES7TXUVFBMV4PGJC4CX6JTZ8L4TBAW7DCNKE6UZR2JFD4KKNMIOEARK33YQ4FEFN3A21I38VEUUBLN3921NA1K0SFR9MZ7EUPFJNL3AGW4YS8LOCVNQ6ZTK2JZF2EZJLH5F2IP3HUBUT1KSI92E4AXG264F2B92HWNTXZRXOXKIFNMP8W4OL1UM90RE2NZJIHBV5FFKNPW2XTBAPLQN0WWWER' where id=48; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='5E48DYWE6BYJ26ZL0Z8MK84LKOGEY4PEM09FE5PCZ42969EO8D0HR2QP09OM23K4L1VGM8HIISRTDMALQNJDOMHYT9XN8KVVS327TSRTVS1AR708UJ7ICBWNCJURVP37SGZ0HX3WB1MDHL4EYQC8VWL53DF41LZ8XWJ0WIY8GCH12IEFAT4ZCQZPC8SSVLZXXCXDCPQAGRRSJ63PIPY6304W0EL00TXK2YQL8RE4CSP311D9D49H4HLTUUHZ1QK6J' where id=48; -update noar ti set v2='5E48DYWE6BYJ26ZL0Z8MK84LKOGEY4PEM09FE5PCZ42969EO8D0HR2QP09OM23K4L1VGM8HIISRTDMALQNJDOMHYT9XN8KVVS327TSRTVS1AR708UJ7ICBWNCJURVP37SGZ0HX3WB1MDHL4EYQC8VWL53DF41LZ8XWJ0WIY8GCH12IEFAT4ZCQZPC8SSVLZXXCXDCPQAGRRSJ63PIPY6304W0EL00TXK2YQL8RE4CSP311D9D49H4HLTUUHZ1QK6J' where id=48; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='6NVOZATTNOLBLORLPL1YGYFZLS8JGKT8A1WWGBH1GQR75ZNC3W4NPWI6QUIKAZMZCTNITRYH6WTUWCUWBENLUZSH0VXKBXTWALS2Q3YHBTZ1S339UH1C037O88RTY8KQ2F9WZG81EYVPFVWNUQO9W94N1RQ6XUATU21WDW7KGYOVRG8AFGXBPOO08VEUX0AM6SCMRJR6VQRXYV45X9WID0DH2ML48YGUQL948ZLJHTK03CKDDD6NR8UCQTTL04BYD' where id=48; -update noar ti set v3='6NVOZATTNOLBLORLPL1YGYFZLS8JGKT8A1WWGBH1GQR75ZNC3W4NPWI6QUIKAZMZCTNITRYH6WTUWCUWBENLUZSH0VXKBXTWALS2Q3YHBTZ1S339UH1C037O88RTY8KQ2F9WZG81EYVPFVWNUQO9W94N1RQ6XUATU21WDW7KGYOVRG8AFGXBPOO08VEUX0AM6SCMRJR6VQRXYV45X9WID0DH2ML48YGUQL948ZLJHTK03CKDDD6NR8UCQTTL04BYD' where id=48; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='JB20IGZK9ISIU6AY2JYJSMICCOW1IUA0AMW01YJWOV0RXURO5FUKF3C9O9TFYGBQAFUG15LS9ZZ9S505XFFJ2QTA015YJGLVSC4Q1266TD5TZGX3LE1TED8PNMT95HJ4A6R2AFBHH0Y9TG9W7H94YY10JWR2EF2H32BLQC5KO0K97HW3GUTYCK25U8G1KHYNJ74Q27GYA8YX3FCUVHYTZOPG4A2GVS9FFKPSSN59LXLV5ATS3MDORDUY8WMH9RTRX' where id=49; -update noar ti set v0='JB20IGZK9ISIU6AY2JYJSMICCOW1IUA0AMW01YJWOV0RXURO5FUKF3C9O9TFYGBQAFUG15LS9ZZ9S505XFFJ2QTA015YJGLVSC4Q1266TD5TZGX3LE1TED8PNMT95HJ4A6R2AFBHH0Y9TG9W7H94YY10JWR2EF2H32BLQC5KO0K97HW3GUTYCK25U8G1KHYNJ74Q27GYA8YX3FCUVHYTZOPG4A2GVS9FFKPSSN59LXLV5ATS3MDORDUY8WMH9RTRX' where id=49; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='0KC5CQPTHMTR70TV3473ZRLRJ7ND7LZV8CCGXTFVXLTELX6EESZ2042R8PHA3X5W38SYVU5AMCXSTKU51JO5IXHIGPBJURYM7H7VCMH6IR0HKTSR8QGHSRT3FMDEGYXJY6GEM4O8CFFA8G9879O14FJMAOKKIMUYDZQBFEVGHY42YZ06NN77QU5UVMQY3DZJ75NIFKNE7Y26KCCR3RG78DL55YE1Y25UZT7YMO167E4K163OJE8TW3APHI5USXRAO' where id=49; -update noar ti set v1='0KC5CQPTHMTR70TV3473ZRLRJ7ND7LZV8CCGXTFVXLTELX6EESZ2042R8PHA3X5W38SYVU5AMCXSTKU51JO5IXHIGPBJURYM7H7VCMH6IR0HKTSR8QGHSRT3FMDEGYXJY6GEM4O8CFFA8G9879O14FJMAOKKIMUYDZQBFEVGHY42YZ06NN77QU5UVMQY3DZJ75NIFKNE7Y26KCCR3RG78DL55YE1Y25UZT7YMO167E4K163OJE8TW3APHI5USXRAO' where id=49; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='VCXDXU3HTBDOM7OW62IXT71OP82FS4V9P51VB2OJMWBDXSWNEU1PPSJREM2L1YB8Y61E7N2QNOHZP6N5D09RC1XCFX3OBM76J9263TTF2664EYC5BXO5UTXRG4VUTE5NJOLBYSOYC0R244SOJFI6NW6ZO1VU063QZGHMGS5ZUYL83UXUSO6MVL9P5ZI9PSTIBUACWJPYI2I813A1I3XSXCN7RFN3EMM19R6JN024DTZBOQ9AHEDF1BVAR5FVF7815' where id=49; -update noar ti set v2='VCXDXU3HTBDOM7OW62IXT71OP82FS4V9P51VB2OJMWBDXSWNEU1PPSJREM2L1YB8Y61E7N2QNOHZP6N5D09RC1XCFX3OBM76J9263TTF2664EYC5BXO5UTXRG4VUTE5NJOLBYSOYC0R244SOJFI6NW6ZO1VU063QZGHMGS5ZUYL83UXUSO6MVL9P5ZI9PSTIBUACWJPYI2I813A1I3XSXCN7RFN3EMM19R6JN024DTZBOQ9AHEDF1BVAR5FVF7815' where id=49; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='QGK2AXBO1Y27KQ7QXXEHM4O15OKAD3SM6MSSSNYK6ALEBGL9ZGHNCIQIH27A9MN4ENKLUSX7B7WF1WPNB2B3XG0C79UQC6KVKX6Y3GR676NWC86RCFNKZJ3JXO8353DWEN10AGBEVPKZWHGZSL6CITM6C9QMW5J97MLM3DVCVO9YJL6Q1D4XKK5UE0TDX6AQP4MRDH1SB6A9NQH7K1TC8N2X6J8YYDS09W1HJDSAO88QF96YRXKCNVLLCIRYYDSZI' where id=49; -update noar ti set v3='QGK2AXBO1Y27KQ7QXXEHM4O15OKAD3SM6MSSSNYK6ALEBGL9ZGHNCIQIH27A9MN4ENKLUSX7B7WF1WPNB2B3XG0C79UQC6KVKX6Y3GR676NWC86RCFNKZJ3JXO8353DWEN10AGBEVPKZWHGZSL6CITM6C9QMW5J97MLM3DVCVO9YJL6Q1D4XKK5UE0TDX6AQP4MRDH1SB6A9NQH7K1TC8N2X6J8YYDS09W1HJDSAO88QF96YRXKCNVLLCIRYYDSZI' where id=49; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='JMPHE29OP53BE06JT195SZIHHQXQADDF3W06AJ9IFXLLBKPO3T61KL97WC1QOKAZE4QED165Z8BNZNBJBQ4SOEBLDKKCLTH95822CCNTZTKPRAKK980GQ1YFDQKTULQENRPCBYQXI2XODOQ355RWIISOHPQNE10R2SR48E76PWXK3MNVOMIP8H939CI2A0X5KK702YVAPU4793DN9WNQCHKY4RD0Q3P8IO6NIKNE09R3WRUU6HG6PW6YGPHGEM9UP' where id=50; -update noar ti set v0='JMPHE29OP53BE06JT195SZIHHQXQADDF3W06AJ9IFXLLBKPO3T61KL97WC1QOKAZE4QED165Z8BNZNBJBQ4SOEBLDKKCLTH95822CCNTZTKPRAKK980GQ1YFDQKTULQENRPCBYQXI2XODOQ355RWIISOHPQNE10R2SR48E76PWXK3MNVOMIP8H939CI2A0X5KK702YVAPU4793DN9WNQCHKY4RD0Q3P8IO6NIKNE09R3WRUU6HG6PW6YGPHGEM9UP' where id=50; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='HBF5RQQ74SCEF9U9LEYK1T601NEBP4BP82UJGBPU38658Z1LRC14NXQFHH6AQPMMEZFTLXFUVTXT1F661JT0PWDRFQI4NFEAV3ADYTI63HPJT0BWEAZHYF3NG82XWTC6L5YRC513BSDMQ1BFOIA098HW4S0FV19YSADBIEF6Y0U8IW9SYSRMIBVLWWH229RH58MC0SBQRNWVHC66I12O1F9Q9EX8F54AJGA6CI33WEIGHCRDTYYNQ0P3POWQG718S' where id=50; -update noar ti set v1='HBF5RQQ74SCEF9U9LEYK1T601NEBP4BP82UJGBPU38658Z1LRC14NXQFHH6AQPMMEZFTLXFUVTXT1F661JT0PWDRFQI4NFEAV3ADYTI63HPJT0BWEAZHYF3NG82XWTC6L5YRC513BSDMQ1BFOIA098HW4S0FV19YSADBIEF6Y0U8IW9SYSRMIBVLWWH229RH58MC0SBQRNWVHC66I12O1F9Q9EX8F54AJGA6CI33WEIGHCRDTYYNQ0P3POWQG718S' where id=50; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='C3XRV3VY0FFM9V8VAD0MCB68L7TBMYWLJAFNFOQLVWM6AG9FQ3551MWWARWYXTURKXDRX04YO1XO4345ZP0KMX300K4BYMO8WF4HS734SRG8P5A436C09CO4TWVE6414L9JSC463XXO2X0OY9UA2QT8P4SG1024PZAK8B2V6F23EXRVFRG4KGV091KC5P7SXRWR7BV35BXJ86KAS0JIH8GJQXDLPKEMGBJTMV6N4YOHH5X1RM36IZ1NDC2EEDEKR4' where id=50; -update noar ti set v2='C3XRV3VY0FFM9V8VAD0MCB68L7TBMYWLJAFNFOQLVWM6AG9FQ3551MWWARWYXTURKXDRX04YO1XO4345ZP0KMX300K4BYMO8WF4HS734SRG8P5A436C09CO4TWVE6414L9JSC463XXO2X0OY9UA2QT8P4SG1024PZAK8B2V6F23EXRVFRG4KGV091KC5P7SXRWR7BV35BXJ86KAS0JIH8GJQXDLPKEMGBJTMV6N4YOHH5X1RM36IZ1NDC2EEDEKR4' where id=50; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='IURGHSM1X5GYTBU0BZ3QCRC2ZADQB19O4AIR1S9RHP8QEIJQHDQ62D2SSPFOPNKAEIA8E3A35F5AFY1LODRK1XGLIHHS4SV1RZKAKIBQ7G2WWR1N7WKF8H3PMZFW20OCAE4K7UXUSAKN8W2UF3WI5PYG5X3OUH1BUB1KGLP23NMKSAVZPDH7FLW9CCLT14QMY7Y57V1NZFMUHJ60K8IVIFKXWG3HG1T54BDZ9JTX5DCULPIWCARNXPZEKD856NHQH' where id=50; -update noar ti set v3='IURGHSM1X5GYTBU0BZ3QCRC2ZADQB19O4AIR1S9RHP8QEIJQHDQ62D2SSPFOPNKAEIA8E3A35F5AFY1LODRK1XGLIHHS4SV1RZKAKIBQ7G2WWR1N7WKF8H3PMZFW20OCAE4K7UXUSAKN8W2UF3WI5PYG5X3OUH1BUB1KGLP23NMKSAVZPDH7FLW9CCLT14QMY7Y57V1NZFMUHJ60K8IVIFKXWG3HG1T54BDZ9JTX5DCULPIWCARNXPZEKD856NHQH' where id=50; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='W3ZUVR38BY1IPTB60N0OHV4ECOAK6EH4IINTE7OO93ELLLIKP4RPMFHNPPYQYQ0DEAEXV5XUCBDXER6JT6OM0CM29PYQ1X4VKRPDD7JCFEAS9YCB32FX61XRNVYX5RNRS5M0IF2U1KI7OOFU2J9IMM14X1I7N8WDXL7O9PDJTY67OKUON78GLL6K0YB1MCZ6ES73XPCNS0NV2RM9VT1KT8R9KVI0LPNM231NCFNMBV3Y8DL2Q7HNO3JTLS4HZMI2S' where id=51; -update noar ti set v0='W3ZUVR38BY1IPTB60N0OHV4ECOAK6EH4IINTE7OO93ELLLIKP4RPMFHNPPYQYQ0DEAEXV5XUCBDXER6JT6OM0CM29PYQ1X4VKRPDD7JCFEAS9YCB32FX61XRNVYX5RNRS5M0IF2U1KI7OOFU2J9IMM14X1I7N8WDXL7O9PDJTY67OKUON78GLL6K0YB1MCZ6ES73XPCNS0NV2RM9VT1KT8R9KVI0LPNM231NCFNMBV3Y8DL2Q7HNO3JTLS4HZMI2S' where id=51; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='7Y6ERWR5ADIBXXICMYSPIIKYIE8F6Z7JJX2PN3XWBIE2A8HCCOMTAD154YO9H6GITWA316OVQFJAI7G5TDY45DORVGTOBXU781HL9U0SYJRUX2CXI64P57Q3783KJLQIGXZ0I0QJ11PYNMDBBYAPDT0LJO3FL63883S5OAB2022UDQKTFCHIPRH3T6FKNUCRTU7YUZZ47CO21GIH4RV2ADW303ZN65BZQXW4KBMRAX70OZWDVP6QIFKLKGNZ4U1DV' where id=51; -update noar ti set v1='7Y6ERWR5ADIBXXICMYSPIIKYIE8F6Z7JJX2PN3XWBIE2A8HCCOMTAD154YO9H6GITWA316OVQFJAI7G5TDY45DORVGTOBXU781HL9U0SYJRUX2CXI64P57Q3783KJLQIGXZ0I0QJ11PYNMDBBYAPDT0LJO3FL63883S5OAB2022UDQKTFCHIPRH3T6FKNUCRTU7YUZZ47CO21GIH4RV2ADW303ZN65BZQXW4KBMRAX70OZWDVP6QIFKLKGNZ4U1DV' where id=51; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='GM8A7CBKD49TBH5B4YE5BLDZPGRS1XYCKHKQ6P4MGQTQBA8TI3P1O9O42C7VKFWR5LXLPRW76AYKI1JOW3T7MJKN0D8KY3MUF1F77MTALR8JO28FBXNB83LILDIBGRJ2H4BCIT1KL25SSI52YPFA89VBO3R4QX6GQVHJIHB9VO9VK213FH9WU1KI2N99E17PTHWOHZCUXJUP6B7JG1ZK2EOHN0IORWCKB0GTVQF216U7U9QOG7P3RQX31QMUT0N9A' where id=51; -update noar ti set v2='GM8A7CBKD49TBH5B4YE5BLDZPGRS1XYCKHKQ6P4MGQTQBA8TI3P1O9O42C7VKFWR5LXLPRW76AYKI1JOW3T7MJKN0D8KY3MUF1F77MTALR8JO28FBXNB83LILDIBGRJ2H4BCIT1KL25SSI52YPFA89VBO3R4QX6GQVHJIHB9VO9VK213FH9WU1KI2N99E17PTHWOHZCUXJUP6B7JG1ZK2EOHN0IORWCKB0GTVQF216U7U9QOG7P3RQX31QMUT0N9A' where id=51; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='KW6J55I7VBK4F7W9ZKGIU0N8LRC3WIKDA5IN67DV6HK1GTP015C9L1Q07IPJURB68D9WZ81O2VPXYRQPZUMI61LIQYHMHEL9XXDJ0D1K5QQTMDRUXY29AAX7W3NOR3K8J7YPXC9B25EXDAD7O0VCJOIIAIU3KL05NLJPAULZGY31LZ2DRGEC9IPRNUOE7WCNSZO3C5Z97CXLI48ZO2XZGF49TNPK9UQTRDREZVNGKS4UDWQT4FDEI9YP1Y8JRKLQS' where id=51; -update noar ti set v3='KW6J55I7VBK4F7W9ZKGIU0N8LRC3WIKDA5IN67DV6HK1GTP015C9L1Q07IPJURB68D9WZ81O2VPXYRQPZUMI61LIQYHMHEL9XXDJ0D1K5QQTMDRUXY29AAX7W3NOR3K8J7YPXC9B25EXDAD7O0VCJOIIAIU3KL05NLJPAULZGY31LZ2DRGEC9IPRNUOE7WCNSZO3C5Z97CXLI48ZO2XZGF49TNPK9UQTRDREZVNGKS4UDWQT4FDEI9YP1Y8JRKLQS' where id=51; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='23UQE0FZ6UB8TNMLSX1P0BW4SENCQSYZT2J5GDFE2W8A2U3V8WDTO9ANN2UE9TVPY2A3YGSUT7X8VQNXL1LQ22DOYVAQHVKB9PBY2HM1SDEDTBEW9DKF14J1N7XXNU5MD665S55B7CJ1YGF7IUWSZV1G35U1GHJP13PMI1LELWQAJZ2DFTWAE2AOGZVBXW9M3STNRNNA9Y8THMRZGTKMVIVNWYOCHXQG8FDKX3O09ZNBMKL298TEFJ1EFUSOTV6S3' where id=52; -update noar ti set v0='23UQE0FZ6UB8TNMLSX1P0BW4SENCQSYZT2J5GDFE2W8A2U3V8WDTO9ANN2UE9TVPY2A3YGSUT7X8VQNXL1LQ22DOYVAQHVKB9PBY2HM1SDEDTBEW9DKF14J1N7XXNU5MD665S55B7CJ1YGF7IUWSZV1G35U1GHJP13PMI1LELWQAJZ2DFTWAE2AOGZVBXW9M3STNRNNA9Y8THMRZGTKMVIVNWYOCHXQG8FDKX3O09ZNBMKL298TEFJ1EFUSOTV6S3' where id=52; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='PCVR85NU5EPCBR51AD4BE8DW007VMOXH0OISYAODXTY5IO4HD9MY3MOOYCT1F4QF4D22OJDE5V69C40Q6ZRJ029DWRXR1YCQMWG1W43S3IMO0A7L4CAJJ1QSXLRXLVGYW4OE5SDYAVJNA2MWDRQWT6JWTX9C5ELX2L6ZSZOAPZKWW8V9XM0OCZ1PAIVVGRMUR7ZM3BII98U1M426495A6TOOOHVF6VXEYCS3TLDLQVJ7MIXLEBINUFY9IJRHBTW1F' where id=52; -update noar ti set v1='PCVR85NU5EPCBR51AD4BE8DW007VMOXH0OISYAODXTY5IO4HD9MY3MOOYCT1F4QF4D22OJDE5V69C40Q6ZRJ029DWRXR1YCQMWG1W43S3IMO0A7L4CAJJ1QSXLRXLVGYW4OE5SDYAVJNA2MWDRQWT6JWTX9C5ELX2L6ZSZOAPZKWW8V9XM0OCZ1PAIVVGRMUR7ZM3BII98U1M426495A6TOOOHVF6VXEYCS3TLDLQVJ7MIXLEBINUFY9IJRHBTW1F' where id=52; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='1FNSSB0HKGY5CMGPP07EOI2D4DW6499BVKO643QW9G0UVF9QNIAFBS1PT5TI6OQO28QU58XAH8G25UH73NASVJY3ZMFT8RE0VFA3BZ8TLWG9ALCEI53UBDN5W06RZU83K2NZNFR48YMZODGQX81M2A712GP8HV4ICO2JCYF1JX231685YC1J6492KTHXGQPX3W3FEGZUQN3V4FTMZAQDT8YV0O42N82OO866PGPE0ZM7YD4BXU32XINLCMG1RO222' where id=52; -update noar ti set v2='1FNSSB0HKGY5CMGPP07EOI2D4DW6499BVKO643QW9G0UVF9QNIAFBS1PT5TI6OQO28QU58XAH8G25UH73NASVJY3ZMFT8RE0VFA3BZ8TLWG9ALCEI53UBDN5W06RZU83K2NZNFR48YMZODGQX81M2A712GP8HV4ICO2JCYF1JX231685YC1J6492KTHXGQPX3W3FEGZUQN3V4FTMZAQDT8YV0O42N82OO866PGPE0ZM7YD4BXU32XINLCMG1RO222' where id=52; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='AD7R73CGA41XVO20T5YR1FPZ26E4I6WM8Y213HVRIZDQGHUVOI71IPICR9KFLR2FNH7YDFDNRDJOKOD81P6DV6SUXQM8TVNM7HG9ZXIHXQ1Z0F5AVFF5X81AXMKKAI5MN1SCWCXI0D54SCYUKYZI27SHW17OBPAXTUUG1LF520RJKE2GZGH2172Y0B198NI5466UV7IT1EEU5RIG5EFD3DNHBIAMRHP6KZZCJU31ZRNPS1JZKPBYF1U7OOK9UFETO' where id=52; -update noar ti set v3='AD7R73CGA41XVO20T5YR1FPZ26E4I6WM8Y213HVRIZDQGHUVOI71IPICR9KFLR2FNH7YDFDNRDJOKOD81P6DV6SUXQM8TVNM7HG9ZXIHXQ1Z0F5AVFF5X81AXMKKAI5MN1SCWCXI0D54SCYUKYZI27SHW17OBPAXTUUG1LF520RJKE2GZGH2172Y0B198NI5466UV7IT1EEU5RIG5EFD3DNHBIAMRHP6KZZCJU31ZRNPS1JZKPBYF1U7OOK9UFETO' where id=52; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='ZL9FYITBAMBCN7ADBVNOU3A1VS8EUMQL6D0UGH532ALAVH5VL0NS4AG42HXGH5354VRG24TUZBYIVRYRVXNSGFFJHVCEJYJWGPETWFAKP3A8NSDHYHUP7QXPLHY09UFC4IIBU7N4I2X23LS0XEUG2YHVTG15GMIBUC4UWHZDL629FOB4FD7C7OMZIXVK7M7A3FD2ZRKL9RN8XX3F0099ERM0WYV6J306YBZTBGS2U6VRD9AY23Q30IBYJ5JFK0QOP' where id=53; -update noar ti set v0='ZL9FYITBAMBCN7ADBVNOU3A1VS8EUMQL6D0UGH532ALAVH5VL0NS4AG42HXGH5354VRG24TUZBYIVRYRVXNSGFFJHVCEJYJWGPETWFAKP3A8NSDHYHUP7QXPLHY09UFC4IIBU7N4I2X23LS0XEUG2YHVTG15GMIBUC4UWHZDL629FOB4FD7C7OMZIXVK7M7A3FD2ZRKL9RN8XX3F0099ERM0WYV6J306YBZTBGS2U6VRD9AY23Q30IBYJ5JFK0QOP' where id=53; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='PBBKGZEODIR5Q55FA40R3RMUXHYNVDFRF47L4PLQDY0X47X66YJX67RRZB99N8TCRCU6MTL4VRR102MTDXOW18XQE0J39G8QBF1TQ9IOMIIU8M7RSX2BHXMOTPX5ZO741UEXDPGTG6F821AB8ASN9QUE8VLXWT7GEYX6PBE15MP0GYD4UDA1CHAAT53DO86S3MMAUXNCO5SAQPGS33GMXULUTLQGQ1JPP7BKUXI2W0A2YGTLZUAJB86DEZX94BF1G' where id=53; -update noar ti set v1='PBBKGZEODIR5Q55FA40R3RMUXHYNVDFRF47L4PLQDY0X47X66YJX67RRZB99N8TCRCU6MTL4VRR102MTDXOW18XQE0J39G8QBF1TQ9IOMIIU8M7RSX2BHXMOTPX5ZO741UEXDPGTG6F821AB8ASN9QUE8VLXWT7GEYX6PBE15MP0GYD4UDA1CHAAT53DO86S3MMAUXNCO5SAQPGS33GMXULUTLQGQ1JPP7BKUXI2W0A2YGTLZUAJB86DEZX94BF1G' where id=53; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='KDL7HSEBTTF64BH0BKSZP4SOQW3LX1Z7RCJGBJJAP8ZN54E24REUIAIM5Q6YHLOOWFU0PLA6013JT7MG4R6IABW6MG1226AX4XBB71DVOPM3Z2WGGNHD7MAS93F724BMWK06BXGO147P1YCXZ3LZ938WOLBL6NDXM1279N9G0A4KNEGRSRZT1TXSN3UU4UD1XZMQCD3ATEFXM177A5F890IGWPWCBHJ4M9N1L77ZROCO1VSJIMO36YOMQ1F8FDZQX' where id=53; -update noar ti set v2='KDL7HSEBTTF64BH0BKSZP4SOQW3LX1Z7RCJGBJJAP8ZN54E24REUIAIM5Q6YHLOOWFU0PLA6013JT7MG4R6IABW6MG1226AX4XBB71DVOPM3Z2WGGNHD7MAS93F724BMWK06BXGO147P1YCXZ3LZ938WOLBL6NDXM1279N9G0A4KNEGRSRZT1TXSN3UU4UD1XZMQCD3ATEFXM177A5F890IGWPWCBHJ4M9N1L77ZROCO1VSJIMO36YOMQ1F8FDZQX' where id=53; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='A0FQBNDLIDKZ5HDXWBJAZEEEFL5LUZEB90BSCAE8AGYHK76ZCQ3JVA9HP2P7L2Z1GUDSEOY4GGZFAHGN7D0JW3IBRTOBDNK92OK084ANG0K1FYBXCT5HFMBYBORIX3B7FJN15W32KKGXJPWMD0IQITPY6FI3533TTWFLZCA0203QONACATIUXREJX64DU04RYCEGPUVHVXN2C0UO5XJ2F6YFUKUT1CCNPL4X2JHPCUXJBB85FGYH1BD4BJHK8GX3H' where id=53; -update noar ti set v3='A0FQBNDLIDKZ5HDXWBJAZEEEFL5LUZEB90BSCAE8AGYHK76ZCQ3JVA9HP2P7L2Z1GUDSEOY4GGZFAHGN7D0JW3IBRTOBDNK92OK084ANG0K1FYBXCT5HFMBYBORIX3B7FJN15W32KKGXJPWMD0IQITPY6FI3533TTWFLZCA0203QONACATIUXREJX64DU04RYCEGPUVHVXN2C0UO5XJ2F6YFUKUT1CCNPL4X2JHPCUXJBB85FGYH1BD4BJHK8GX3H' where id=53; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='BAPOIHD64B450YH4R56M3XJB67LQPZTN25RWC28ZKGMGA6SMUIWWLIS3Z4KW0OHM24MKQCSNYJ17RX45K0CMQLQPG62NWTJ4QQFOUJE8CDXPC0IVIHCFQMADXNSCT1JPYF6CCMYMG3PY6JYYX7WD5L5PRUADHM5UQDWW4OMSH9G904FV9TMQLBISGJZX6XD1E63FWNHGC5EVBTVRDX49OL35FBY0XFLHHYJN6RNS622UHAQ4LJCF88TZYQDG1QC7V' where id=54; -update noar ti set v0='BAPOIHD64B450YH4R56M3XJB67LQPZTN25RWC28ZKGMGA6SMUIWWLIS3Z4KW0OHM24MKQCSNYJ17RX45K0CMQLQPG62NWTJ4QQFOUJE8CDXPC0IVIHCFQMADXNSCT1JPYF6CCMYMG3PY6JYYX7WD5L5PRUADHM5UQDWW4OMSH9G904FV9TMQLBISGJZX6XD1E63FWNHGC5EVBTVRDX49OL35FBY0XFLHHYJN6RNS622UHAQ4LJCF88TZYQDG1QC7V' where id=54; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='EFY3XLE5OXTUSARCO934E13M3KLI2M1SMZCYZRFCU8LVREMDRCZNI2W619ENYOMDHXMMB3YC7VXYT4I6NGZBQBQXKZAFGRZMX3WI9VKZOWT1ROSYEI2UYJZ9IZXSPKAB90YLVLLCOL7V3DPBF4RJJWP4HR7OR9B7VSHR1OUD0RXXNEWYNIIGHKST58NMEKJP6DGJ312LQU1TLG31SEO4YXWIY2WDBP6PJZCJBKD8LAM7LBO26HFASVT1HPFHZL2BH' where id=54; -update noar ti set v1='EFY3XLE5OXTUSARCO934E13M3KLI2M1SMZCYZRFCU8LVREMDRCZNI2W619ENYOMDHXMMB3YC7VXYT4I6NGZBQBQXKZAFGRZMX3WI9VKZOWT1ROSYEI2UYJZ9IZXSPKAB90YLVLLCOL7V3DPBF4RJJWP4HR7OR9B7VSHR1OUD0RXXNEWYNIIGHKST58NMEKJP6DGJ312LQU1TLG31SEO4YXWIY2WDBP6PJZCJBKD8LAM7LBO26HFASVT1HPFHZL2BH' where id=54; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='N8U6ZPBXUVGIFQKJ5RQL3OATNJ0FTB44I3X93QT9ZDL2L1Q8OXNN2IHICRI8M3NKKGVOIJ4JKHM6YWVU4KKWAZZ55S6CKQ4CIZP5O06HRXT4Q4221BOPIRYEJURNCZF6EUHQ38469X9X46LTNI8MSI8507BXZQBGPCNG1YHBDQ38E63114I7F1VEH8L7SYVX3CA9921OUS4NPUV39VPTELCVVP15ZG2TPWWT8MXD147B0H3N80OBONH727VBFGO0S' where id=54; -update noar ti set v2='N8U6ZPBXUVGIFQKJ5RQL3OATNJ0FTB44I3X93QT9ZDL2L1Q8OXNN2IHICRI8M3NKKGVOIJ4JKHM6YWVU4KKWAZZ55S6CKQ4CIZP5O06HRXT4Q4221BOPIRYEJURNCZF6EUHQ38469X9X46LTNI8MSI8507BXZQBGPCNG1YHBDQ38E63114I7F1VEH8L7SYVX3CA9921OUS4NPUV39VPTELCVVP15ZG2TPWWT8MXD147B0H3N80OBONH727VBFGO0S' where id=54; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='D5WU8HHE9314PJKNKJY44TPZB4RKMQA50XOC3WRFN3HSE4JOL92VUCZQRW1DF6OCVY2AGZNO83O480JJIF3QGMM2LF0XDFXCOKK21EG7TLMW487YPQBA1DAJZANJPGD6JLCQPL939238LBP8GT93I7NSFZ8F3EX3DJ633SSX8MR0WQ010YWIEVHHTDKOH7F7RDGG2HPCQXKADD0NXTVG7XS1H44LRYSNA4GG0WK43LQLDQ1TETU6NCDGJVEO3T0WI' where id=54; -update noar ti set v3='D5WU8HHE9314PJKNKJY44TPZB4RKMQA50XOC3WRFN3HSE4JOL92VUCZQRW1DF6OCVY2AGZNO83O480JJIF3QGMM2LF0XDFXCOKK21EG7TLMW487YPQBA1DAJZANJPGD6JLCQPL939238LBP8GT93I7NSFZ8F3EX3DJ633SSX8MR0WQ010YWIEVHHTDKOH7F7RDGG2HPCQXKADD0NXTVG7XS1H44LRYSNA4GG0WK43LQLDQ1TETU6NCDGJVEO3T0WI' where id=54; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='5KEBZ7PEV4XE1WV6QIO28EEIDZTUSQHU3XXOOM7ADH9W09UQSN2G28IJOY0T1RI70TIER87ZJXWNZWKMONKET7BHBKMKDF9RF5LE5C4LRZBC7EXOEYPCH7W9SDKYJ1LHBEQVCIMEB0VZ50LPHTK8DUIB138KO4A8NW1J3U8AIVHIR8GQBSYZ2W0LH675HZUVT1FLBBV8ZEU2DC9K8HCJGB514HHS0S7DTFWUUQOS342X8LSPHCTHNRL2TRZEOPBIZ' where id=55; -update noar ti set v0='5KEBZ7PEV4XE1WV6QIO28EEIDZTUSQHU3XXOOM7ADH9W09UQSN2G28IJOY0T1RI70TIER87ZJXWNZWKMONKET7BHBKMKDF9RF5LE5C4LRZBC7EXOEYPCH7W9SDKYJ1LHBEQVCIMEB0VZ50LPHTK8DUIB138KO4A8NW1J3U8AIVHIR8GQBSYZ2W0LH675HZUVT1FLBBV8ZEU2DC9K8HCJGB514HHS0S7DTFWUUQOS342X8LSPHCTHNRL2TRZEOPBIZ' where id=55; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='SP782CC3A5B2UIW6REYP3SS0BIX7BER4VPD7483TAUYOMMSSVD69RW8DT18E8LANUGWZ2QFR3CT5VFH6F83H94RA5ED0L572ZDZRYUMO8MJSDXNK9OHJALDMO1UAH0N03ZY969KSOVNZOCO8YNJN37B0QVTI62DON7FGRCRM3B0QDXPOMSAFDGP5LMIEOFP1YUFFXHULAB8THDIMS9DYT0P7RLYXUFUY0785CBG9DZWDWTLOXC9SJLV0CITFX9D7N' where id=55; -update noar ti set v1='SP782CC3A5B2UIW6REYP3SS0BIX7BER4VPD7483TAUYOMMSSVD69RW8DT18E8LANUGWZ2QFR3CT5VFH6F83H94RA5ED0L572ZDZRYUMO8MJSDXNK9OHJALDMO1UAH0N03ZY969KSOVNZOCO8YNJN37B0QVTI62DON7FGRCRM3B0QDXPOMSAFDGP5LMIEOFP1YUFFXHULAB8THDIMS9DYT0P7RLYXUFUY0785CBG9DZWDWTLOXC9SJLV0CITFX9D7N' where id=55; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='UGTQD0STZNDIRFSK9L97HGSOORV00LVXD5U76QDQTZOBI2DFMJWVOF334RQD596ER9Y19LIANSR0K8YNB58V17Z2TM1FXYBP36QQKZ0TSTVRU3PNFUITJYM7BJQTESLEZIR49YX812XTC1CQCZZES1IGQV6I1ITFGJ3J3BDQB74OM6D4XTN2DEFVZZVIWDJBYTXNRUXFRHT47Z3JSHGKX8EP6031YAKQLS4ME5UVDD079BTWQCTRJMWLJ11KSN30R' where id=55; -update noar ti set v2='UGTQD0STZNDIRFSK9L97HGSOORV00LVXD5U76QDQTZOBI2DFMJWVOF334RQD596ER9Y19LIANSR0K8YNB58V17Z2TM1FXYBP36QQKZ0TSTVRU3PNFUITJYM7BJQTESLEZIR49YX812XTC1CQCZZES1IGQV6I1ITFGJ3J3BDQB74OM6D4XTN2DEFVZZVIWDJBYTXNRUXFRHT47Z3JSHGKX8EP6031YAKQLS4ME5UVDD079BTWQCTRJMWLJ11KSN30R' where id=55; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='IR0AVQZZUS3XEJ6O8RR6I238SPQAXJLXZHRZBK98CN4Z59TCVAUQS1ZVD7SB1B5SF2U3XVNUL3D0NQ7XTSEOJ3T6HOY405F2HB8T7TO91R90XJR6IL9SNC2O9T5LRSN3E1GAQT0ASDDRZ1KE7962FX774SECR81O4Z6WKQME9KMVHIN5C9N5145B49T6U71GBID5G1L2A47KPT4HPFH9ETHFY4HW1GX6TFRMF2N8KK0GH6K1ZVU9PMWAUXEZ7KNUH' where id=55; -update noar ti set v3='IR0AVQZZUS3XEJ6O8RR6I238SPQAXJLXZHRZBK98CN4Z59TCVAUQS1ZVD7SB1B5SF2U3XVNUL3D0NQ7XTSEOJ3T6HOY405F2HB8T7TO91R90XJR6IL9SNC2O9T5LRSN3E1GAQT0ASDDRZ1KE7962FX774SECR81O4Z6WKQME9KMVHIN5C9N5145B49T6U71GBID5G1L2A47KPT4HPFH9ETHFY4HW1GX6TFRMF2N8KK0GH6K1ZVU9PMWAUXEZ7KNUH' where id=55; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='2XVRXAUXBGGSHA02PHRF5WM23SVCINVTS31613SIKPF42FW01653P6QQ7AZDGLWWPP3E1V25LPLJ950BP6RH4OUZUP6U5JZ3ESP3CKX7W1CM10ZRKAUL0IHUCP1XJUC3NV33PT3BZQJJ4EWNW2YAAZ9SEFON7DS297QOJJA4WUUWSV43QOO5AJDOSX694MUC2M229TL19XZ80PS1R7BQ1G0RNH2HNK3EN4ENWOHMX8MAVX5JDPGP9IC6RU2DG1RDN' where id=56; -update noar ti set v0='2XVRXAUXBGGSHA02PHRF5WM23SVCINVTS31613SIKPF42FW01653P6QQ7AZDGLWWPP3E1V25LPLJ950BP6RH4OUZUP6U5JZ3ESP3CKX7W1CM10ZRKAUL0IHUCP1XJUC3NV33PT3BZQJJ4EWNW2YAAZ9SEFON7DS297QOJJA4WUUWSV43QOO5AJDOSX694MUC2M229TL19XZ80PS1R7BQ1G0RNH2HNK3EN4ENWOHMX8MAVX5JDPGP9IC6RU2DG1RDN' where id=56; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='WKTYSGIL5KW3XX3ODB3ZXQEIDPYVDFETW2PFC7JQMIEZCIIEKS6V1PR1LI4PLJQXCQALPGJJ7C7MFDNY9ZM3T9W2WGDC82PSSW8ITUD53UTVY426MRX5VJVP9N99HFE3YFSWJOZKRE2NJ6G5IBVG5Y0IDD6AX2Q6HQFD18CVA7S2Z8OXPDDADLFHM0C3BO0CCWHCG67C8G1UJ4UDYWGD7ESPLH3PIGJHT81N3PNI9EBRBV9WC6D7YIU4AY0VXQ8I2' where id=56; -update noar ti set v1='WKTYSGIL5KW3XX3ODB3ZXQEIDPYVDFETW2PFC7JQMIEZCIIEKS6V1PR1LI4PLJQXCQALPGJJ7C7MFDNY9ZM3T9W2WGDC82PSSW8ITUD53UTVY426MRX5VJVP9N99HFE3YFSWJOZKRE2NJ6G5IBVG5Y0IDD6AX2Q6HQFD18CVA7S2Z8OXPDDADLFHM0C3BO0CCWHCG67C8G1UJ4UDYWGD7ESPLH3PIGJHT81N3PNI9EBRBV9WC6D7YIU4AY0VXQ8I2' where id=56; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='VS47NFSA08ZZ47ZVU1HLA7Q29YEZIZ9PTL3SNLGSCLIOR8IKEURY24XRPBZ4AB8YA5S13MBDMJFA4W090FJHJ2GX8GWX0RT0CEHVP129KOL1X2048Z4U605ZIV2ZX9R6UU39GDX60TFRTDMV86USA03IJ9BPC6HPBTXG38MV3DWHWJ9AK272BUM8J7M09EALJSDI76TXU7NVFBGCXJVGGR1U0N1RHP2H2UTUJ7Y2I2INIYIZUGRKTP7Z45OM8S37U' where id=56; -update noar ti set v2='VS47NFSA08ZZ47ZVU1HLA7Q29YEZIZ9PTL3SNLGSCLIOR8IKEURY24XRPBZ4AB8YA5S13MBDMJFA4W090FJHJ2GX8GWX0RT0CEHVP129KOL1X2048Z4U605ZIV2ZX9R6UU39GDX60TFRTDMV86USA03IJ9BPC6HPBTXG38MV3DWHWJ9AK272BUM8J7M09EALJSDI76TXU7NVFBGCXJVGGR1U0N1RHP2H2UTUJ7Y2I2INIYIZUGRKTP7Z45OM8S37U' where id=56; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='TKHXH2TUVZ35KW8ECSY84F6B9G0RN8JZU8LZSGSTUOIAQY5P4KFM8XMI2T4FG2UVDGWNFJAZ9H5BB5MFW90XVGNGS528IEKC1G52UAHPGXF5VH10VO3OC4KO7BO4UKLR380OFXN5KDIUSS86R1TQD6YDDBNXKPDV3ZB059XOSGE0ISD9J0NEG5HDEOGY7MRTYV08937GY5N1THJJIK8FSJDGF0W8OFPWT3OHYM8L1GDLTJVYJ6VOJG1Y96JTTLSAV' where id=56; -update noar ti set v3='TKHXH2TUVZ35KW8ECSY84F6B9G0RN8JZU8LZSGSTUOIAQY5P4KFM8XMI2T4FG2UVDGWNFJAZ9H5BB5MFW90XVGNGS528IEKC1G52UAHPGXF5VH10VO3OC4KO7BO4UKLR380OFXN5KDIUSS86R1TQD6YDDBNXKPDV3ZB059XOSGE0ISD9J0NEG5HDEOGY7MRTYV08937GY5N1THJJIK8FSJDGF0W8OFPWT3OHYM8L1GDLTJVYJ6VOJG1Y96JTTLSAV' where id=56; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='OQRVV7TKUBTCNWOMOHXDKY34RBM65J78BH049YBAMGPN3LEI9X1H7OTDIFN706ISCIAT2B02IRTTSSXF7KVOC8VGVZPWTCVM0FO6ZVP92SXC75DP04MW6YXIJ90P32IZPF1F1SK2SDIQW2QJVZAYFW4ARYY9SU959VSF3L8ZW6Q6E70GRGK71ICY8FZ8SRLH7V1NS96V4JV3TRPBHMBM3HFKBGMY7HA9E0YWZYJ1MRVPATQ5LVOX8B6IUOHJ11LO0' where id=57; -update noar ti set v0='OQRVV7TKUBTCNWOMOHXDKY34RBM65J78BH049YBAMGPN3LEI9X1H7OTDIFN706ISCIAT2B02IRTTSSXF7KVOC8VGVZPWTCVM0FO6ZVP92SXC75DP04MW6YXIJ90P32IZPF1F1SK2SDIQW2QJVZAYFW4ARYY9SU959VSF3L8ZW6Q6E70GRGK71ICY8FZ8SRLH7V1NS96V4JV3TRPBHMBM3HFKBGMY7HA9E0YWZYJ1MRVPATQ5LVOX8B6IUOHJ11LO0' where id=57; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='4TN0SP1FBHJJXDMU0BUGSH16R3HZLP6PBP3898F2VNZXZ0B6267WIFAO0DXSNM4PKAAQQGDB0K4CXR19RPDGNJVC2JBDJJV50LIJH54V6XMHW1ILDV4OOIZ1028L3JP6IZV53F1TA01T640TBXEL2JX5PW85AB753K3NZWO4NHALZ2FWRJS71N130HDL14244HH4LNZOSS6ZUWKU85Q9VE0INU68JGDGIFOTHZJMXFSOR6NYUQD1ELA132DM53Z19' where id=57; -update noar ti set v1='4TN0SP1FBHJJXDMU0BUGSH16R3HZLP6PBP3898F2VNZXZ0B6267WIFAO0DXSNM4PKAAQQGDB0K4CXR19RPDGNJVC2JBDJJV50LIJH54V6XMHW1ILDV4OOIZ1028L3JP6IZV53F1TA01T640TBXEL2JX5PW85AB753K3NZWO4NHALZ2FWRJS71N130HDL14244HH4LNZOSS6ZUWKU85Q9VE0INU68JGDGIFOTHZJMXFSOR6NYUQD1ELA132DM53Z19' where id=57; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='ZT4VWDLJU9A6RX17I03RU04VKQ2IELHQ45XLD70YKQFMMKIOTCB9KINY3BHGVU5QYD2DTE2FIRRXWAERKR8H3VAW1TWMS5PSJHH38SK203CK5QF58CPHZP4YP57U13EVRCV0FANAAKNBU2MNF685D9QY43GOX1LAZWFKIZ961ZZ5HBWN9Q3R9W5OB5G1QTOVUYI9Y0CPMLANDW0BQ21TK3SUPPVNWX05E2XKI4SZ7FJKV4A5GNKW58CSDIBKJ7BKV' where id=57; -update noar ti set v2='ZT4VWDLJU9A6RX17I03RU04VKQ2IELHQ45XLD70YKQFMMKIOTCB9KINY3BHGVU5QYD2DTE2FIRRXWAERKR8H3VAW1TWMS5PSJHH38SK203CK5QF58CPHZP4YP57U13EVRCV0FANAAKNBU2MNF685D9QY43GOX1LAZWFKIZ961ZZ5HBWN9Q3R9W5OB5G1QTOVUYI9Y0CPMLANDW0BQ21TK3SUPPVNWX05E2XKI4SZ7FJKV4A5GNKW58CSDIBKJ7BKV' where id=57; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='1PDH4D1PM0XNQZT5SPS63J000RNAOUBW88BLZ8D1LZR4L1DKN6CMFU2UEKSFKXGA195XKAQUQW6OCXV1HCMAT9W18W6HE46HI6XRHLQH9UPI5DFC0RU5KQNVJ56YU4YPOFO0NZN21IPTQPAF6WHAWEJD6E8N67ZUJMIAET33V0ZR7YUKTDK52SOLJJ1XZ9JZHBRV8S3IEBSR6J90SIO2SCOZO5X98VPR7ZYJ5K4LC446M1BXDX312KAVN6KRPD2IS' where id=57; -update noar ti set v3='1PDH4D1PM0XNQZT5SPS63J000RNAOUBW88BLZ8D1LZR4L1DKN6CMFU2UEKSFKXGA195XKAQUQW6OCXV1HCMAT9W18W6HE46HI6XRHLQH9UPI5DFC0RU5KQNVJ56YU4YPOFO0NZN21IPTQPAF6WHAWEJD6E8N67ZUJMIAET33V0ZR7YUKTDK52SOLJJ1XZ9JZHBRV8S3IEBSR6J90SIO2SCOZO5X98VPR7ZYJ5K4LC446M1BXDX312KAVN6KRPD2IS' where id=57; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='T4IYVQX8QWH7DCJ98VJY092YGKJHA7UB8SNGPBPAHTM1E10925N9RUPCT6MJ1QRBUKRBFJVQGX4XQOJAO29F2SG0RBVOR595QULYSMW5BM5D9F08H9C0P62SCXRKDO87CP14BW15ODYHW3UW6L29P5ORG7U16NVODTM9ZZU8SCTFPWL2AUC6FHTQ8YP2NXMVOHGXJSUWD4VB1XR4IWHAN03GLA62YB66EXIHYYFP0NGYMU5JG8P2245FNTFH2ALSY' where id=58; -update noar ti set v0='T4IYVQX8QWH7DCJ98VJY092YGKJHA7UB8SNGPBPAHTM1E10925N9RUPCT6MJ1QRBUKRBFJVQGX4XQOJAO29F2SG0RBVOR595QULYSMW5BM5D9F08H9C0P62SCXRKDO87CP14BW15ODYHW3UW6L29P5ORG7U16NVODTM9ZZU8SCTFPWL2AUC6FHTQ8YP2NXMVOHGXJSUWD4VB1XR4IWHAN03GLA62YB66EXIHYYFP0NGYMU5JG8P2245FNTFH2ALSY' where id=58; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='H7WEYMXXQ08LK3FKZMLSW30KI0UANO3S634GJ1VSNC8XYR161D3XNQ7ZDAOR19MRUYA33R9NGGHXGOPE88QBB5JKRC9TX6MVSH3JIT0SXZI1OYBD58IG45A4WK9Y3VZSPIF96GDZ8G19Z5IATL4YNUES8AAQKPN0XWDMNCOFRD0JX5VUKORKEDJ8BBWKHCT0HT235HOFB60S35VOWNK0URG8OAOYJ0V5P1NOJ0AWGBX9GMPZVJCOAKXXU2WYOX5GV' where id=58; -update noar ti set v1='H7WEYMXXQ08LK3FKZMLSW30KI0UANO3S634GJ1VSNC8XYR161D3XNQ7ZDAOR19MRUYA33R9NGGHXGOPE88QBB5JKRC9TX6MVSH3JIT0SXZI1OYBD58IG45A4WK9Y3VZSPIF96GDZ8G19Z5IATL4YNUES8AAQKPN0XWDMNCOFRD0JX5VUKORKEDJ8BBWKHCT0HT235HOFB60S35VOWNK0URG8OAOYJ0V5P1NOJ0AWGBX9GMPZVJCOAKXXU2WYOX5GV' where id=58; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='1CKWL0AI2QJC9TJ7FXE8OHM5F3HOGMQBAME9JH19VKQ8OXX3Q4QGJOZ4MDLEJLMWT80RIMO8332NH74LP2FSRGBK541MEJ1IO190U7TVPLB7WQ7AEBIVTYVHQNZ5W5Z8XBMLHYW1T2PASDT8VJKYUYCJESPMGIIEDCOPW4PV3MUZW35GPLMMYPGUYBB75NOO7RERYD4ATM3XF10Y2N9V1QA0NYP6KXH4KS46VLUPV8DB19MA55BHESKJEW9O62777' where id=58; -update noar ti set v2='1CKWL0AI2QJC9TJ7FXE8OHM5F3HOGMQBAME9JH19VKQ8OXX3Q4QGJOZ4MDLEJLMWT80RIMO8332NH74LP2FSRGBK541MEJ1IO190U7TVPLB7WQ7AEBIVTYVHQNZ5W5Z8XBMLHYW1T2PASDT8VJKYUYCJESPMGIIEDCOPW4PV3MUZW35GPLMMYPGUYBB75NOO7RERYD4ATM3XF10Y2N9V1QA0NYP6KXH4KS46VLUPV8DB19MA55BHESKJEW9O62777' where id=58; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='GT2XAWQ1WX4S935LJDP4LU49YKV1PBSTOF0N0ZE8Z9A356SPP9TC92GE9UE5ZX4R14EXLTO4KNZE2MVIDUN3TBFIMXDU8IDGUMHLW79BJSFLB04I8K7RVETY8QIV24MJQHENQUTSXTTENVU6Z56N6SWZNTA0PN5C9XOUM3KRNFTWUU5BIV4JCKD73XVC166VGPV40PHZTJXSF1SXUSLDPIHZ3AQ8O7AHYHKZSGS1SD6TDY6K9AIWFPUTIUCEP4M3K' where id=58; -update noar ti set v3='GT2XAWQ1WX4S935LJDP4LU49YKV1PBSTOF0N0ZE8Z9A356SPP9TC92GE9UE5ZX4R14EXLTO4KNZE2MVIDUN3TBFIMXDU8IDGUMHLW79BJSFLB04I8K7RVETY8QIV24MJQHENQUTSXTTENVU6Z56N6SWZNTA0PN5C9XOUM3KRNFTWUU5BIV4JCKD73XVC166VGPV40PHZTJXSF1SXUSLDPIHZ3AQ8O7AHYHKZSGS1SD6TDY6K9AIWFPUTIUCEP4M3K' where id=58; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='OCJKLR5DWR3C8QSGNPUDDVM8FA7T7UWVKEF80AXPSP50JUKOZKXW9MLTRCSSGQ1WJ3UIM7CED973ORIG8G2X30YR6IABYP5FYXS3BUB8YASSJZ15VDR21UR4D1MKIKOOTBISIG9IUWHC607NUVBA3IRRJRZF13INTJ5UOSDFJEJFQC61NA9IF486JNSEMIZ4WEW0NPWV7SJ5FWHZPOYMYRKTTJI7SU73Y55R53A58S2R7B4TQVUC6WRLKA2XPT6W5' where id=59; -update noar ti set v0='OCJKLR5DWR3C8QSGNPUDDVM8FA7T7UWVKEF80AXPSP50JUKOZKXW9MLTRCSSGQ1WJ3UIM7CED973ORIG8G2X30YR6IABYP5FYXS3BUB8YASSJZ15VDR21UR4D1MKIKOOTBISIG9IUWHC607NUVBA3IRRJRZF13INTJ5UOSDFJEJFQC61NA9IF486JNSEMIZ4WEW0NPWV7SJ5FWHZPOYMYRKTTJI7SU73Y55R53A58S2R7B4TQVUC6WRLKA2XPT6W5' where id=59; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='SZX3XFTLON4AGEFQKX8O2A6BQQBMK0O1J02XXY1DFW8MPKSCVGYVLZ3YOM21V8YHDK7VJHZGI7NX5SOKXF4XVIN2OY7IPWPCSR9J22LHMIUJ1UXRMFCWTU04ZO3OHNB5873V882WYTFWOVLIHD2RQMPRMRBC3FKFUGT7E3SBGVVZ2KKWE82S35T0Y3S13YSIB68Z81FGFCQGDPLL6QWXHELNJB4IJRWH1ER7WM56ITTFHK0IJ9SPVTN7AV9XRR1D3' where id=59; -update noar ti set v1='SZX3XFTLON4AGEFQKX8O2A6BQQBMK0O1J02XXY1DFW8MPKSCVGYVLZ3YOM21V8YHDK7VJHZGI7NX5SOKXF4XVIN2OY7IPWPCSR9J22LHMIUJ1UXRMFCWTU04ZO3OHNB5873V882WYTFWOVLIHD2RQMPRMRBC3FKFUGT7E3SBGVVZ2KKWE82S35T0Y3S13YSIB68Z81FGFCQGDPLL6QWXHELNJB4IJRWH1ER7WM56ITTFHK0IJ9SPVTN7AV9XRR1D3' where id=59; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='SGKGE4Z01FT1ZLC2PAW8G5T8PGG0EUCYSAF8L5MV2C071IHPV5J8O9KA2749U7QUK0AC4A7MWW81HVM3NBRDWDKT1LTEOYH8UGT3QXDIV37U89K8VXAZ9G87BMEAMZI2MSBG5704H4W45B17JIRGJ8QI25O0MLRVN72NS7JJG4754YC8L6C6P26OTWXL6Z4H7ZGB094GML0PHEXA0ISPIS5YX52ZVLSEWPB6XNOHJ8I8TVARPJ9YEDT8VSS0349Q2' where id=59; -update noar ti set v2='SGKGE4Z01FT1ZLC2PAW8G5T8PGG0EUCYSAF8L5MV2C071IHPV5J8O9KA2749U7QUK0AC4A7MWW81HVM3NBRDWDKT1LTEOYH8UGT3QXDIV37U89K8VXAZ9G87BMEAMZI2MSBG5704H4W45B17JIRGJ8QI25O0MLRVN72NS7JJG4754YC8L6C6P26OTWXL6Z4H7ZGB094GML0PHEXA0ISPIS5YX52ZVLSEWPB6XNOHJ8I8TVARPJ9YEDT8VSS0349Q2' where id=59; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='WW7PJ5U5FIPYO51MRLEAD29VOJ4RONVS3U7BAR4Y0BA7ZKOLO3GE7FJCWMSFD58GEHH9I45SPCPMB5EGOZHFVI3ICQ045KPR3CLRI5UA7LN10X0T1I824EY3YMFM0Y4L2N6I9O905JKPA39931IAOT3LQ8ZFN1UWFNQU8HMD86068TAHR1M1XL6EL22P49AJXJMVECPWTERW3D7YV2RQFS1UO4N6KBVIQWN37ZRUUB1ITN7I4D1VD5KMZ6JH9F8G4' where id=59; -update noar ti set v3='WW7PJ5U5FIPYO51MRLEAD29VOJ4RONVS3U7BAR4Y0BA7ZKOLO3GE7FJCWMSFD58GEHH9I45SPCPMB5EGOZHFVI3ICQ045KPR3CLRI5UA7LN10X0T1I824EY3YMFM0Y4L2N6I9O905JKPA39931IAOT3LQ8ZFN1UWFNQU8HMD86068TAHR1M1XL6EL22P49AJXJMVECPWTERW3D7YV2RQFS1UO4N6KBVIQWN37ZRUUB1ITN7I4D1VD5KMZ6JH9F8G4' where id=59; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='AOZVC9T1CKT9IETJ31WKMG7KHLMD0H6H0SAMB3ITD6EUYXKT4SM2U7DNVWT7Y8X0YRPSTVWR0AP74XA9ZHWMBHQ3NC4EGX7B5T9GX9WI04M3EY8EVJDXLC17TYY0TDUPV3Y30MICMKCV0OYCS3TMAR29TL33OKG3VX7BK8WV04HMBSB9YCZOALIAM2R1XK4EIQG4V7R6L4Q0YADNGASZJY8Z3KM467RF308IDJ6SN9TXRWHS30NI42WIX2S5QXVP7' where id=60; -update noar ti set v0='AOZVC9T1CKT9IETJ31WKMG7KHLMD0H6H0SAMB3ITD6EUYXKT4SM2U7DNVWT7Y8X0YRPSTVWR0AP74XA9ZHWMBHQ3NC4EGX7B5T9GX9WI04M3EY8EVJDXLC17TYY0TDUPV3Y30MICMKCV0OYCS3TMAR29TL33OKG3VX7BK8WV04HMBSB9YCZOALIAM2R1XK4EIQG4V7R6L4Q0YADNGASZJY8Z3KM467RF308IDJ6SN9TXRWHS30NI42WIX2S5QXVP7' where id=60; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='MMLN0JIFW6NRG014UZVRAUY0GH8VJ731Z77FPBUZVVRXGVD8L5SOIWTU9CFKRFFY1JUZM74LEWBLUNZGJOZZDTPY93UHS4S27P72QXSB95MP3X8EXYDSCEOO7DMTMYX98GCQ4242HDVLPITE4DB16DJKGCL8HRD2KJXFT6EFMLFX1OWA6ME5JP3KRG0LC2R9IB35EHHQ4MKO7N4QBNEH6EZ8EJXPLWPECQN2M08JAPBP08RJX678HHPJFG46SDO2S' where id=60; -update noar ti set v1='MMLN0JIFW6NRG014UZVRAUY0GH8VJ731Z77FPBUZVVRXGVD8L5SOIWTU9CFKRFFY1JUZM74LEWBLUNZGJOZZDTPY93UHS4S27P72QXSB95MP3X8EXYDSCEOO7DMTMYX98GCQ4242HDVLPITE4DB16DJKGCL8HRD2KJXFT6EFMLFX1OWA6ME5JP3KRG0LC2R9IB35EHHQ4MKO7N4QBNEH6EZ8EJXPLWPECQN2M08JAPBP08RJX678HHPJFG46SDO2S' where id=60; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='QY5UN1Q1FY85OIARC056Q9VM5I46LPE7SY61Z6PNGZVNC31JJHRZ4V9S33CDNJPSD7MXFT8CSYWWLPOB9MQ3KK4IJ7NDE2WCSEUEZ2N1TFI7BOBUK5TG2RGHLTOPIJAMLYOOKIH9Y8BUEZYRW6HEFBS0WBZ38IXH4Y93SN18O6DYV5ISB83HNLFM3YAV03MYPJD09GI30RJZ2WVCA43RSH6ITEGQA3HX1KFRM3ECBVYWXYQDR1SMYHO0EZ9XW2PHT' where id=60; -update noar ti set v2='QY5UN1Q1FY85OIARC056Q9VM5I46LPE7SY61Z6PNGZVNC31JJHRZ4V9S33CDNJPSD7MXFT8CSYWWLPOB9MQ3KK4IJ7NDE2WCSEUEZ2N1TFI7BOBUK5TG2RGHLTOPIJAMLYOOKIH9Y8BUEZYRW6HEFBS0WBZ38IXH4Y93SN18O6DYV5ISB83HNLFM3YAV03MYPJD09GI30RJZ2WVCA43RSH6ITEGQA3HX1KFRM3ECBVYWXYQDR1SMYHO0EZ9XW2PHT' where id=60; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='6LEOVTR64VSNYLW6RIHCEY2CRAFZHKXEQNHT9V60WZNZ7HWXW1P347NY7A8GO4KT7GTFY5832650LMBPT5J2YHANYC0MMDSKC59C8Q85G30TJI9PKMKK2TH7AEDTB18RL82OMQI7IRAQNZUZWP62WDL4MI0XKUBN0VSWG38SZYHMX4D1ZA3G2XXCEFEVUIBQBZV9H5NUM78ENIEVY51PWE7OU9V82LBUXAIV3WPRXKVX9Q7WJCYTP29DG4IIAVEWA' where id=60; -update noar ti set v3='6LEOVTR64VSNYLW6RIHCEY2CRAFZHKXEQNHT9V60WZNZ7HWXW1P347NY7A8GO4KT7GTFY5832650LMBPT5J2YHANYC0MMDSKC59C8Q85G30TJI9PKMKK2TH7AEDTB18RL82OMQI7IRAQNZUZWP62WDL4MI0XKUBN0VSWG38SZYHMX4D1ZA3G2XXCEFEVUIBQBZV9H5NUM78ENIEVY51PWE7OU9V82LBUXAIV3WPRXKVX9Q7WJCYTP29DG4IIAVEWA' where id=60; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='Z06DWH9481KQY5ZFX768QBMQLADK5COYS3Y4O6H5EIUEL3V9OVPWQ1UL1WKLNSZF6A9IDS6W1Q6RZMI3ROTFLE363BVOXDK8SEYZHGE55ZK56JYUWJ6B67P5SIP6S4V0W1ZEI6MNZKXN2NHMU0HKJDU9HDIICVH2C29O8Y4GPFD9NH5L74ZYHXQZ5JC9WLP4H3LD0K5A9B6OT89ZXMAV52N18P06R1PQKXK5C3M1P6XENDYXX9E9VWORZWENUXG9M' where id=61; -update noar ti set v0='Z06DWH9481KQY5ZFX768QBMQLADK5COYS3Y4O6H5EIUEL3V9OVPWQ1UL1WKLNSZF6A9IDS6W1Q6RZMI3ROTFLE363BVOXDK8SEYZHGE55ZK56JYUWJ6B67P5SIP6S4V0W1ZEI6MNZKXN2NHMU0HKJDU9HDIICVH2C29O8Y4GPFD9NH5L74ZYHXQZ5JC9WLP4H3LD0K5A9B6OT89ZXMAV52N18P06R1PQKXK5C3M1P6XENDYXX9E9VWORZWENUXG9M' where id=61; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='FCAIZUEISH1PP8D1UJEMUG2LMIY4FFH9OOCLC9MNLWJ8ISEUK7H1NG74WOC5NGXJO88RW8708K3C1V0J22REYZBKA3P4OW4Z3NGSS8O0R8EQACR0W5T308R178MYU6DK7EYKZI8I34AS9X00NTTYOKPILSVXL1X2V650O1X7TOA23WJEGTCZWKF63GMDS099SC7U7G4FH9STT61069CVVJ3V1L7PVZRYRY9JQUS8DNRXGCL2O221OWZ3FYH18KB6R' where id=61; -update noar ti set v1='FCAIZUEISH1PP8D1UJEMUG2LMIY4FFH9OOCLC9MNLWJ8ISEUK7H1NG74WOC5NGXJO88RW8708K3C1V0J22REYZBKA3P4OW4Z3NGSS8O0R8EQACR0W5T308R178MYU6DK7EYKZI8I34AS9X00NTTYOKPILSVXL1X2V650O1X7TOA23WJEGTCZWKF63GMDS099SC7U7G4FH9STT61069CVVJ3V1L7PVZRYRY9JQUS8DNRXGCL2O221OWZ3FYH18KB6R' where id=61; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='VJSKU2WK2WHEIRX475ME9G71GYLRFCQ3PLISDP8AG0ML2YF1CZ3FZ7BUO4GO8367049CQZNP78901O3MYGCS8B8GEQT8JS6C8UZ6CTQSASARSYMW7AVUA36IQJQZZGIO3AHBCUEFT7ZJJ5JHEGI2N4ZAHBZP7LR4NFZEBKQH6A27G0RQTCI3E9R2DJNWZBH06GFMXS62333RIOVPDA7L35VFRGHJPN4D6ONHFH3PHQFSKIC2HBN1XOB387FP88I1M' where id=61; -update noar ti set v2='VJSKU2WK2WHEIRX475ME9G71GYLRFCQ3PLISDP8AG0ML2YF1CZ3FZ7BUO4GO8367049CQZNP78901O3MYGCS8B8GEQT8JS6C8UZ6CTQSASARSYMW7AVUA36IQJQZZGIO3AHBCUEFT7ZJJ5JHEGI2N4ZAHBZP7LR4NFZEBKQH6A27G0RQTCI3E9R2DJNWZBH06GFMXS62333RIOVPDA7L35VFRGHJPN4D6ONHFH3PHQFSKIC2HBN1XOB387FP88I1M' where id=61; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='I9SDEYSD90H16OQ8OJCZH3TSBAZU4CD4HZ8EPQ8AAADHM1JWLIZ6CZWX6H29IR5YJARZO32GSWODWNC3TZDSUMBNKI918PF1R9UOJHYJVK7DSPLRP78QHVQ7QH9G6QJO68X2RLOLDMH1O5GS3OONBFVWEEA8LAJSR1KX3T5ICPA46IDRHPXK6DKC0U7J7NIBDHKJXYCUDPUK6AA0E6ST3H4SH635J89OFQS5DCR0FH5CU757J65PJTMERPCLHIJ6K' where id=61; -update noar ti set v3='I9SDEYSD90H16OQ8OJCZH3TSBAZU4CD4HZ8EPQ8AAADHM1JWLIZ6CZWX6H29IR5YJARZO32GSWODWNC3TZDSUMBNKI918PF1R9UOJHYJVK7DSPLRP78QHVQ7QH9G6QJO68X2RLOLDMH1O5GS3OONBFVWEEA8LAJSR1KX3T5ICPA46IDRHPXK6DKC0U7J7NIBDHKJXYCUDPUK6AA0E6ST3H4SH635J89OFQS5DCR0FH5CU757J65PJTMERPCLHIJ6K' where id=61; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='NXEXZUGUPS1TTYH4MEMQCOTU47J1L06S1Y5GN3N77G8262UEXHEZ6LKSACZ0MGUE5IMHE5EMSKSG5KBANY09Q64HL579L4OJ7L51HQPT1QMNIEWV4XMH91BB9C0BTOLZRDA0RHL7KQY9IT2ICMYUHVANHFXOJCQO7YKCG8XNAXQ84EVD25315P096U36XTW85N6X6O8D2TMOGCQIMXVPN0SIRFA7WS8D9RSK79B42GDI6RB2E8FA5TEEBT5F4YCHR' where id=62; -update noar ti set v0='NXEXZUGUPS1TTYH4MEMQCOTU47J1L06S1Y5GN3N77G8262UEXHEZ6LKSACZ0MGUE5IMHE5EMSKSG5KBANY09Q64HL579L4OJ7L51HQPT1QMNIEWV4XMH91BB9C0BTOLZRDA0RHL7KQY9IT2ICMYUHVANHFXOJCQO7YKCG8XNAXQ84EVD25315P096U36XTW85N6X6O8D2TMOGCQIMXVPN0SIRFA7WS8D9RSK79B42GDI6RB2E8FA5TEEBT5F4YCHR' where id=62; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='5AU9RJ74MDW27W4LVAXBPYS3NI7AEPDVVY7OEFFS0RDKVYXX6TU08HU72MRJ4860MGPDRFYYKX3GAVGZ85K4NE7CC25JM4RF1LYRTIYH67JLAWN63DODIF0H627PC08LKYGB9FMMZVHGWRKOQU7LZPI5BTC895DB81RATMR7EV02SOREHELLO72EMTWWOIXX8XG8DHJK5FU7EU64XSTRZPTY9BE80M9XK5RO3I9L9ZGE4G0FW7Q4HBXPPUTBL13I8' where id=62; -update noar ti set v1='5AU9RJ74MDW27W4LVAXBPYS3NI7AEPDVVY7OEFFS0RDKVYXX6TU08HU72MRJ4860MGPDRFYYKX3GAVGZ85K4NE7CC25JM4RF1LYRTIYH67JLAWN63DODIF0H627PC08LKYGB9FMMZVHGWRKOQU7LZPI5BTC895DB81RATMR7EV02SOREHELLO72EMTWWOIXX8XG8DHJK5FU7EU64XSTRZPTY9BE80M9XK5RO3I9L9ZGE4G0FW7Q4HBXPPUTBL13I8' where id=62; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='70OX8IB5D52ZKY0YRQDR3P1NMCPNMWO1CQ8KFIVMTRNYKEEFGP1YP2ELLWBEHW24USBQRU6P3DGJ3FJH2TPQJ0Q4X436IGF8QC41XU74K4YOQ5YZNZGZIYY8QS8ZP9IVBHPIKTFYOO5FGAUYALC1XHDZCZUGFCAT8BBYYQXCWQJQ2Y7K72XGA7LUUFRALQG6P57OOYSADVUKYNZ75GX7AMJQBPWOAC5DNDK75XIPE6Q172FRAMRK3OLHDIRUSC14A' where id=62; -update noar ti set v2='70OX8IB5D52ZKY0YRQDR3P1NMCPNMWO1CQ8KFIVMTRNYKEEFGP1YP2ELLWBEHW24USBQRU6P3DGJ3FJH2TPQJ0Q4X436IGF8QC41XU74K4YOQ5YZNZGZIYY8QS8ZP9IVBHPIKTFYOO5FGAUYALC1XHDZCZUGFCAT8BBYYQXCWQJQ2Y7K72XGA7LUUFRALQG6P57OOYSADVUKYNZ75GX7AMJQBPWOAC5DNDK75XIPE6Q172FRAMRK3OLHDIRUSC14A' where id=62; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='122OFJ6KA5NDLUYVNC0PAVE1U3IF10MIATZ9IOTXG6GC8339IJRIFRQ2QHFKU44R0FNRV8HO75VCIQ3YRON1DMOP7TU53DC6SQG6OJ5ICNUZDT3JUI070RZPZ84U4YV5I8ATT1S8SZZ7YUCF5THZK446OFU7NV54KSBRF3LFQ4ZT5C09XDZRHP436GQEE0J8SWM57DT6RV5033VNPV6MN3NR3CLTAIMWNN2W2ON4S914094K295W0DA7T6ULBQ64R' where id=62; -update noar ti set v3='122OFJ6KA5NDLUYVNC0PAVE1U3IF10MIATZ9IOTXG6GC8339IJRIFRQ2QHFKU44R0FNRV8HO75VCIQ3YRON1DMOP7TU53DC6SQG6OJ5ICNUZDT3JUI070RZPZ84U4YV5I8ATT1S8SZZ7YUCF5THZK446OFU7NV54KSBRF3LFQ4ZT5C09XDZRHP436GQEE0J8SWM57DT6RV5033VNPV6MN3NR3CLTAIMWNN2W2ON4S914094K295W0DA7T6ULBQ64R' where id=62; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='7XPULF6CBZ1A8KZW7WRCIRVO2HJSTNY8FH7HFF6OV7KQ5XQL3CSTHZS26YHE84YD9WNW48KH1TNVT9KSAGV8M95NF31N4RRB31QAGLY5QDF1K9LKB369I8UQZZFU5KAN2CSU8ERAZHZOPV611U4L80Y9DGMN1E35JYCQJD2N0WN7SJFGG5STWU2P42KP66DZSFB317VZTL9ZT78LHMZ3VVL74QNZY1B5K0AZYL2LK5L2IU4BV0OC8PYY9X6IM6G2I' where id=63; -update noar ti set v0='7XPULF6CBZ1A8KZW7WRCIRVO2HJSTNY8FH7HFF6OV7KQ5XQL3CSTHZS26YHE84YD9WNW48KH1TNVT9KSAGV8M95NF31N4RRB31QAGLY5QDF1K9LKB369I8UQZZFU5KAN2CSU8ERAZHZOPV611U4L80Y9DGMN1E35JYCQJD2N0WN7SJFGG5STWU2P42KP66DZSFB317VZTL9ZT78LHMZ3VVL74QNZY1B5K0AZYL2LK5L2IU4BV0OC8PYY9X6IM6G2I' where id=63; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='425VW1UHS2MFSSZQYC4MJMDFT6VQUJNYA7D6JZR5TZQY0CU6O2NHSZBE3AY9YMX05Y0ER4LZXUPV6DAOS4ZJDENI9QWXWBQLM6N45VKI4EUQFV96QFLGAPA5WBL2RR5W9L96XZI76OA8LK1KMER86D3VZ7T6VQWZ15KH662NG1YEFPXNXPLZCPKSDVS2TKYAEFD0D5VAWFQ6HS2NB7V8B013ETWJ5XN9S6BXLT38U063CZDVQUPSYM6U9K8C1RFAL' where id=63; -update noar ti set v1='425VW1UHS2MFSSZQYC4MJMDFT6VQUJNYA7D6JZR5TZQY0CU6O2NHSZBE3AY9YMX05Y0ER4LZXUPV6DAOS4ZJDENI9QWXWBQLM6N45VKI4EUQFV96QFLGAPA5WBL2RR5W9L96XZI76OA8LK1KMER86D3VZ7T6VQWZ15KH662NG1YEFPXNXPLZCPKSDVS2TKYAEFD0D5VAWFQ6HS2NB7V8B013ETWJ5XN9S6BXLT38U063CZDVQUPSYM6U9K8C1RFAL' where id=63; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='FIGA0YYCOX1PAY3OZMU14NO5NRN6DH84XGAHB52YXWYFXSPIAUC5YLNAYKDPMRXJK9Q6QBS0E9T88K5NY5C9O08HJ8I3WVVTC9YOWRRHG547IW6UC0Z3ENMUD1LQ2KSELRN4SRQ0ADR0XHNTPJ9PL147WK2KLSQYMTY2P7LDGKE4M76OY6XPRUHWVMCTQM9BRAFWMU9H1PPA0OX2TU7FJWGEPD7ATSU0KV4524ZI0X9FEE95D6DQ5OLWF6HM29X2W' where id=63; -update noar ti set v2='FIGA0YYCOX1PAY3OZMU14NO5NRN6DH84XGAHB52YXWYFXSPIAUC5YLNAYKDPMRXJK9Q6QBS0E9T88K5NY5C9O08HJ8I3WVVTC9YOWRRHG547IW6UC0Z3ENMUD1LQ2KSELRN4SRQ0ADR0XHNTPJ9PL147WK2KLSQYMTY2P7LDGKE4M76OY6XPRUHWVMCTQM9BRAFWMU9H1PPA0OX2TU7FJWGEPD7ATSU0KV4524ZI0X9FEE95D6DQ5OLWF6HM29X2W' where id=63; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='NRMJA9ZDTW4RCGR5VG9S19ZYBAO8R1FRT7JMA26N2PRKIUAUBDQFB1PBD89HVWNT119VIPTYM3PE8JYT1NNMCVYEQWAPN67P0XI9BN4FA2A3Z5O7FYDO0P3FITXFDCDA19D7T82Y9FDCJ49QK3JL9L2MR1YVM1ZD7I792QOJJDAHO0HF10KKY6P99IGVVHBWFM6IQA6JD6KH83U95BQOEBX5BNJSC2CGZA1NFGCZDSPTZH5ZPMYIDPWM372O2HQPR' where id=63; -update noar ti set v3='NRMJA9ZDTW4RCGR5VG9S19ZYBAO8R1FRT7JMA26N2PRKIUAUBDQFB1PBD89HVWNT119VIPTYM3PE8JYT1NNMCVYEQWAPN67P0XI9BN4FA2A3Z5O7FYDO0P3FITXFDCDA19D7T82Y9FDCJ49QK3JL9L2MR1YVM1ZD7I792QOJJDAHO0HF10KKY6P99IGVVHBWFM6IQA6JD6KH83U95BQOEBX5BNJSC2CGZA1NFGCZDSPTZH5ZPMYIDPWM372O2HQPR' where id=63; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='XE7SDGQ7FNX96D0EETW8TBJHY74508G28F219SHG2ZUBHWQ3O631HZ6OD4GASNLZ8T92Z2C6CD1YIS59P7X79W4HYLHW2ZBF8DSX1GDZAA5YYL5IPVQWGSJZIPPY431RMDWRWTGW0NUFNTLELPVPF8GR3TG0SA7DP5YTLJE619C6HYU0WFV3QYZ7R0NOJGKCTDCJXQKSUHS4GWPPBD2JPUXSE0IZ952C98DHI6JVBDX57JNOKCQ2HM851Q7I74WL4' where id=64; -update noar ti set v0='XE7SDGQ7FNX96D0EETW8TBJHY74508G28F219SHG2ZUBHWQ3O631HZ6OD4GASNLZ8T92Z2C6CD1YIS59P7X79W4HYLHW2ZBF8DSX1GDZAA5YYL5IPVQWGSJZIPPY431RMDWRWTGW0NUFNTLELPVPF8GR3TG0SA7DP5YTLJE619C6HYU0WFV3QYZ7R0NOJGKCTDCJXQKSUHS4GWPPBD2JPUXSE0IZ952C98DHI6JVBDX57JNOKCQ2HM851Q7I74WL4' where id=64; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='O1ZV9GEHG7FW6S72BZZK030LZEX0Y1SSNG7ONY2OV7UGRHQAMCHSYRG4TG432DQN1MRT02DLPRM0YNGF47DNX4CIEYNTBW2CX55F1DJXODVM8GTK3QN997Y5HBWV5S42OZUEZTQ21L6OSO7LDOHQQTLN5FH9FBIE2PGV27CYVCJH8RFA1AVXECV1HW0ESNXI9KZ1F286EJ8RJDQIFCXB5BGNR5THFF563H30X5714SL9BWDKMY4864UICDMX5WGX1' where id=64; -update noar ti set v1='O1ZV9GEHG7FW6S72BZZK030LZEX0Y1SSNG7ONY2OV7UGRHQAMCHSYRG4TG432DQN1MRT02DLPRM0YNGF47DNX4CIEYNTBW2CX55F1DJXODVM8GTK3QN997Y5HBWV5S42OZUEZTQ21L6OSO7LDOHQQTLN5FH9FBIE2PGV27CYVCJH8RFA1AVXECV1HW0ESNXI9KZ1F286EJ8RJDQIFCXB5BGNR5THFF563H30X5714SL9BWDKMY4864UICDMX5WGX1' where id=64; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='GJC3EVDTJ11CHNZE8TJO66IGOBHT1I9004BQLJWAKI79CLZBAW7HZ73QR9HIVTEA9L3CWR9YGRA9W55EZMBSH6YNS40B1525KXYBOXGM9Z10BJ7FWS6M9SN4GD6H77O36NKX46R2YPUYZI6EB3JJ314KB0OPS5GHW1FB238IKCL3RFTGI1AC8DBO5FZZKNELMDB2JEVEC5AMGLDWQDLUGH480RN54G1FLUT5ZRB8QS2M3KR9EOGGWJ7DGZSVPSUAC' where id=64; -update noar ti set v2='GJC3EVDTJ11CHNZE8TJO66IGOBHT1I9004BQLJWAKI79CLZBAW7HZ73QR9HIVTEA9L3CWR9YGRA9W55EZMBSH6YNS40B1525KXYBOXGM9Z10BJ7FWS6M9SN4GD6H77O36NKX46R2YPUYZI6EB3JJ314KB0OPS5GHW1FB238IKCL3RFTGI1AC8DBO5FZZKNELMDB2JEVEC5AMGLDWQDLUGH480RN54G1FLUT5ZRB8QS2M3KR9EOGGWJ7DGZSVPSUAC' where id=64; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='7TGO8SWUNJIUOEW78RP3WVK20PKKBND71LFY12JWTK97D5NAHVE8T72HSHMCFQM3SGEDVYKVSBUAY2256GNICQHPZODV6WKMJGOB8CJXCDFYA9FPQ71CF3543W42E7W4RV3MHIC91VSFQZBTWLEKOC6CLF23OGY36VVLM5XMGF3134V466OL7DHTT7IU2ODZMYV07C7CH8RYXOG12EQBCNYK21UL3XM9LUSE7RK0CNWGHL0PJD9K8GBYBUNB7UGS8' where id=64; -update noar ti set v3='7TGO8SWUNJIUOEW78RP3WVK20PKKBND71LFY12JWTK97D5NAHVE8T72HSHMCFQM3SGEDVYKVSBUAY2256GNICQHPZODV6WKMJGOB8CJXCDFYA9FPQ71CF3543W42E7W4RV3MHIC91VSFQZBTWLEKOC6CLF23OGY36VVLM5XMGF3134V466OL7DHTT7IU2ODZMYV07C7CH8RYXOG12EQBCNYK21UL3XM9LUSE7RK0CNWGHL0PJD9K8GBYBUNB7UGS8' where id=64; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='TBZ6JJNFFUZLUACSYXRNADLKFK2SJ7A2JH884CTUMLZY59XUO5FJKLVU5CYPO327DVSCBOOHVXYQKVNCYHNLATG7SBZV5WSRYPYV0M1BKL11XZQJ3MYB7FGGR7L4REIBRV37COJDK1RP4Q7N78A1Q19JLPMVNDSGENPPSR46AUTFCJ4V0XADYI8CQHQ9SMNK4XU3U5K6LR2SVSH12C5L33Q6LV9ANS653E16GG6CM4SE0BJI6X9RCBYFOORL5T1VM' where id=65; -update noar ti set v0='TBZ6JJNFFUZLUACSYXRNADLKFK2SJ7A2JH884CTUMLZY59XUO5FJKLVU5CYPO327DVSCBOOHVXYQKVNCYHNLATG7SBZV5WSRYPYV0M1BKL11XZQJ3MYB7FGGR7L4REIBRV37COJDK1RP4Q7N78A1Q19JLPMVNDSGENPPSR46AUTFCJ4V0XADYI8CQHQ9SMNK4XU3U5K6LR2SVSH12C5L33Q6LV9ANS653E16GG6CM4SE0BJI6X9RCBYFOORL5T1VM' where id=65; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='C9HM3XVOLWVUD2PE7328DNI8QNARV4FXQ2MYGY6MB16ZIOAZCEZIKJE6NBKQ7QTZIFM0CY7Q9D4YH7Z39L85L93PF89SYI430WI6UTGYDAPT9ZZ8XCMOZUZPUR9VX7VN4BWY4X1ATJ21K62GZ8T59K0BNS0QEMV2106WIGYCIPWR4E5YDID3SBXL20RS2CGP9S2KUMCYPQM7BJCTW2LL9WQORNATOGPNGVU5ISK8CPJOMM668P3KI6KMVEN291ZDX' where id=65; -update noar ti set v1='C9HM3XVOLWVUD2PE7328DNI8QNARV4FXQ2MYGY6MB16ZIOAZCEZIKJE6NBKQ7QTZIFM0CY7Q9D4YH7Z39L85L93PF89SYI430WI6UTGYDAPT9ZZ8XCMOZUZPUR9VX7VN4BWY4X1ATJ21K62GZ8T59K0BNS0QEMV2106WIGYCIPWR4E5YDID3SBXL20RS2CGP9S2KUMCYPQM7BJCTW2LL9WQORNATOGPNGVU5ISK8CPJOMM668P3KI6KMVEN291ZDX' where id=65; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='AB9CA313QSU2P6OZCZ7JP715YRCJT1AWY2L65I5SL3OXWP3IBT39UGK7PITXVVOAEP47R24FU1WXC9DW9J89WSEDE2V9YC0G8KNSVYMALVFMNTKHNMMYNAXKANUAA3DS1SJAWMANGF6UUPD9KFHI8XVB1EFQ8FJL87OWM6TR9ERXVQ8EBT9A4XXQ8OAEPVPQ6POWXUKFTT7D3ZM9ABLQ611MMT1ABVZVXOK8L4RMOYD883OOT10IW27R37CU78BHV' where id=65; -update noar ti set v2='AB9CA313QSU2P6OZCZ7JP715YRCJT1AWY2L65I5SL3OXWP3IBT39UGK7PITXVVOAEP47R24FU1WXC9DW9J89WSEDE2V9YC0G8KNSVYMALVFMNTKHNMMYNAXKANUAA3DS1SJAWMANGF6UUPD9KFHI8XVB1EFQ8FJL87OWM6TR9ERXVQ8EBT9A4XXQ8OAEPVPQ6POWXUKFTT7D3ZM9ABLQ611MMT1ABVZVXOK8L4RMOYD883OOT10IW27R37CU78BHV' where id=65; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='16S87X1BMKC4BRHCCI130S0NGSXN9DC2ZKD86C8450J5LCWLHMTBYA55BAXLYIQKY8AE5NGNR69WAQHURP6Q8690UPTSVV7NJS8DPUYSFMIBQI4FVPOKV5I109KZ1GK90BQVBF3IRSHFC92E8IRPYMR3D9GZ6M8TR8HTLZROF8A554AQOEZQO8Z1OA6Y3YLMG8G2D1MHIRSRDOA06ZP5S8OB1YZYB3IIKXQS3T3T94NKFIWWW2TK31GZVG027PGQZ' where id=65; -update noar ti set v3='16S87X1BMKC4BRHCCI130S0NGSXN9DC2ZKD86C8450J5LCWLHMTBYA55BAXLYIQKY8AE5NGNR69WAQHURP6Q8690UPTSVV7NJS8DPUYSFMIBQI4FVPOKV5I109KZ1GK90BQVBF3IRSHFC92E8IRPYMR3D9GZ6M8TR8HTLZROF8A554AQOEZQO8Z1OA6Y3YLMG8G2D1MHIRSRDOA06ZP5S8OB1YZYB3IIKXQS3T3T94NKFIWWW2TK31GZVG027PGQZ' where id=65; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='RZHB0X0RWNC1F7JAFKJJOVMY4KIW4OB1D7X9LRP3WN400ER5MUHK6BVPIMH9ZW3K74MT8JCEXIOI3MQ59Z5DPECLTM7JENDYCLSWWH0UX2DMOBSFFET0LBQO0EFP38AQ09FJQL62ZL8NZLCQ4IYO9SRDZMN8I0ISS43J2P2T4D2TJUAETUKI16UIWJTVJ0OCTN1MNJV1SQILIY5VL4ER48GM4AUXS5SHFP9CBDE0KNWFG0LF19RY1TWX0MQLT1F99' where id=66; -update noar ti set v0='RZHB0X0RWNC1F7JAFKJJOVMY4KIW4OB1D7X9LRP3WN400ER5MUHK6BVPIMH9ZW3K74MT8JCEXIOI3MQ59Z5DPECLTM7JENDYCLSWWH0UX2DMOBSFFET0LBQO0EFP38AQ09FJQL62ZL8NZLCQ4IYO9SRDZMN8I0ISS43J2P2T4D2TJUAETUKI16UIWJTVJ0OCTN1MNJV1SQILIY5VL4ER48GM4AUXS5SHFP9CBDE0KNWFG0LF19RY1TWX0MQLT1F99' where id=66; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='Y84RXR00CGIVCN7CLVXLKAG90IE913CE53WSJDPM2NSNZ6U7I2JM3YLTZKZKHHUNG8F3PELUEBLHTGLQAYWKJ7MJO4KRE11FCL6GUMCP52JUCHR2V23N3ZI01E6T69RB92TM92TXCHVIM4L2JMH3HTULVNNXG6FZT2Z7GE97TXELGE2RFGZ251G6UKVVN6YFI3RGOTNNSWQ08V7TA9SGXE8L9FMYG28JW5T11SC5FP1VQNCA91DK0N6PHS5YCI877' where id=66; -update noar ti set v1='Y84RXR00CGIVCN7CLVXLKAG90IE913CE53WSJDPM2NSNZ6U7I2JM3YLTZKZKHHUNG8F3PELUEBLHTGLQAYWKJ7MJO4KRE11FCL6GUMCP52JUCHR2V23N3ZI01E6T69RB92TM92TXCHVIM4L2JMH3HTULVNNXG6FZT2Z7GE97TXELGE2RFGZ251G6UKVVN6YFI3RGOTNNSWQ08V7TA9SGXE8L9FMYG28JW5T11SC5FP1VQNCA91DK0N6PHS5YCI877' where id=66; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='T2DJLNUNRQ8L67PKZJAMR7OZKZBA64875NT0OL1ATZ4AJPY296XJGNMNMXQV5OKPJCJ5FZL637GVDVK06ALA12G6VOOOXGVVV9ASVN2CG4HWKWVRIV02SV89XN6QSCVTZ01HKRS89HJRBPJZLEDLBTS4JF2DE7VZF872C83ZCD9KD3K2XTE9Y4ZTGD8TB2KX9HTEI0PRS62ZO445QWHLXCI72NFPQA63K77QN9DPQ8AC4O8JXIUX9WLSC4BREEJWZ' where id=66; -update noar ti set v2='T2DJLNUNRQ8L67PKZJAMR7OZKZBA64875NT0OL1ATZ4AJPY296XJGNMNMXQV5OKPJCJ5FZL637GVDVK06ALA12G6VOOOXGVVV9ASVN2CG4HWKWVRIV02SV89XN6QSCVTZ01HKRS89HJRBPJZLEDLBTS4JF2DE7VZF872C83ZCD9KD3K2XTE9Y4ZTGD8TB2KX9HTEI0PRS62ZO445QWHLXCI72NFPQA63K77QN9DPQ8AC4O8JXIUX9WLSC4BREEJWZ' where id=66; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='OJ21PWZ1P9AFTGF3E8RCJSQ0JEZJZIO2A6O9MZ0TH3FJ2GQS5ZB5KNDWI9EEEGAQPIQTUFP8V0SMUJJ1TDOS3DCGRRE3ZHXB8D37U1BYMPGATU1FM9Y5AJTS5SHBL1BMNA1FARSF317SMVF590AF5PBL27RLPSEQF6S1BY6228EBC60VWOAE6426KC8NB0NXPCPCSN5TM6FIMTIK5YCZSQBA1V1KZURMROCGUU6KVQ8ZJFBXL5LLOSJLN0L2M7XTX' where id=66; -update noar ti set v3='OJ21PWZ1P9AFTGF3E8RCJSQ0JEZJZIO2A6O9MZ0TH3FJ2GQS5ZB5KNDWI9EEEGAQPIQTUFP8V0SMUJJ1TDOS3DCGRRE3ZHXB8D37U1BYMPGATU1FM9Y5AJTS5SHBL1BMNA1FARSF317SMVF590AF5PBL27RLPSEQF6S1BY6228EBC60VWOAE6426KC8NB0NXPCPCSN5TM6FIMTIK5YCZSQBA1V1KZURMROCGUU6KVQ8ZJFBXL5LLOSJLN0L2M7XTX' where id=66; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='NQLQUQ92HOZ7R8CA72CBMD7427M960IBKN1VK4OXT2VS1OKRBVUKQYV2SK8FFJUZNG7SNWMC47QOMZXY6KVR8TR3B4JW8XS6B7BSUODTD758N1AEKZNHYWX5TLN44DJKPP0CY8XS7OBI25P7NVOZIA1303QQEZF43ENG7STQPL5ZH26ANXKD9SQAGCSQWBGSRNQSJDY53DEF1HT6798XVW4XVLW0AYJZ0KUGXJO94YJVYY4UJKIJ4FTEVC03JM0M7' where id=67; -update noar ti set v0='NQLQUQ92HOZ7R8CA72CBMD7427M960IBKN1VK4OXT2VS1OKRBVUKQYV2SK8FFJUZNG7SNWMC47QOMZXY6KVR8TR3B4JW8XS6B7BSUODTD758N1AEKZNHYWX5TLN44DJKPP0CY8XS7OBI25P7NVOZIA1303QQEZF43ENG7STQPL5ZH26ANXKD9SQAGCSQWBGSRNQSJDY53DEF1HT6798XVW4XVLW0AYJZ0KUGXJO94YJVYY4UJKIJ4FTEVC03JM0M7' where id=67; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='L4O1ZCQD2DXXFBP1M6CDV7B29H2SNGME8BL5EMSLFCJORX63VDHZ10K8RBA80RUPS8DGOVWGP5G296HMDS8NUZC3PQ5ZA8FH0ECEXWWCQCAVVU58PG0CB7R8G2L2UN7F0GKX4KMWOJZ02G367WAIV81GM1VNO2ECP1DBIIWRSCVALOSD3E7XQL49X7HD3MJ8PPZPTP3D4SG62V63UZZP0PGTJOGWHWI84Z0Q46SVUZTSVT515GDDZ3P6BVAJBY2OA' where id=67; -update noar ti set v1='L4O1ZCQD2DXXFBP1M6CDV7B29H2SNGME8BL5EMSLFCJORX63VDHZ10K8RBA80RUPS8DGOVWGP5G296HMDS8NUZC3PQ5ZA8FH0ECEXWWCQCAVVU58PG0CB7R8G2L2UN7F0GKX4KMWOJZ02G367WAIV81GM1VNO2ECP1DBIIWRSCVALOSD3E7XQL49X7HD3MJ8PPZPTP3D4SG62V63UZZP0PGTJOGWHWI84Z0Q46SVUZTSVT515GDDZ3P6BVAJBY2OA' where id=67; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='Y3ORAVZHZ2CKBO493F9OKE64G80RCXG5KNZFEFP1O3R516BU8EH6SP8GZ4S3WPZ6WIGGHDLNJQXINF3EIZSF9VJEOYDLN7ZFHJL32W9SBTBGBECXR5QCUZBB67G7O1PIT4RSHCJJRJMD8WXLEFV827SY4KBY6JN9EFRD2HPYPGK3VJE7AUMB8Q6HZ8GOIQGTJHP0LUJW8CYIVP7NRFBQZATBALQTNRM0ISS6BPG8QGS9K88N4XEMYSDE7QK7JO4V4' where id=67; -update noar ti set v2='Y3ORAVZHZ2CKBO493F9OKE64G80RCXG5KNZFEFP1O3R516BU8EH6SP8GZ4S3WPZ6WIGGHDLNJQXINF3EIZSF9VJEOYDLN7ZFHJL32W9SBTBGBECXR5QCUZBB67G7O1PIT4RSHCJJRJMD8WXLEFV827SY4KBY6JN9EFRD2HPYPGK3VJE7AUMB8Q6HZ8GOIQGTJHP0LUJW8CYIVP7NRFBQZATBALQTNRM0ISS6BPG8QGS9K88N4XEMYSDE7QK7JO4V4' where id=67; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='UIHTUUTLYHOSI338HKYJT9SZ1QQXGDRXFK1F3LM8GLUFMLMQF0360UD8ZLAGYKHMR9XZ6T4HJV1SWJE40DYN9JEVQPPMX6816TP9LGA0QCWALOLQ6KZUVSS79B20E2CN5GGWNWF9DQCZGWTXDNLVDNDPDPEZ4SEWZ2W8IF9HHBY5NL888EB0GQFPTW5HEU4GGZDAD9TG46YYGKO6R78N9O2JRKHK31AHT73V6E988961WMGZPAQJ1N35B0IHEFMBQ' where id=67; -update noar ti set v3='UIHTUUTLYHOSI338HKYJT9SZ1QQXGDRXFK1F3LM8GLUFMLMQF0360UD8ZLAGYKHMR9XZ6T4HJV1SWJE40DYN9JEVQPPMX6816TP9LGA0QCWALOLQ6KZUVSS79B20E2CN5GGWNWF9DQCZGWTXDNLVDNDPDPEZ4SEWZ2W8IF9HHBY5NL888EB0GQFPTW5HEU4GGZDAD9TG46YYGKO6R78N9O2JRKHK31AHT73V6E988961WMGZPAQJ1N35B0IHEFMBQ' where id=67; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='O0UQFUA1A9SBEGIMESDN1MD5QAPA5ZO7S6A3SD5EFD6MNDWHDMM78TA4X0I5YMKQ6CZMZP49LCDV2XDNJD7P3OXK199JRHAT6D7134CIPMWB1N3WITKR27X6LS7CUUK8FLYOABTRAZNL75FORY735UWG6HFHTWCJ4IBHX55G0J94F3NVA0L7Z6ZNS0EFF2EK767IN7PBAE2J3G9GLB886NL70HYWIW9XO02VPS8DB0HPHAZDL0AD1SSGBC0VLB3E9' where id=68; -update noar ti set v0='O0UQFUA1A9SBEGIMESDN1MD5QAPA5ZO7S6A3SD5EFD6MNDWHDMM78TA4X0I5YMKQ6CZMZP49LCDV2XDNJD7P3OXK199JRHAT6D7134CIPMWB1N3WITKR27X6LS7CUUK8FLYOABTRAZNL75FORY735UWG6HFHTWCJ4IBHX55G0J94F3NVA0L7Z6ZNS0EFF2EK767IN7PBAE2J3G9GLB886NL70HYWIW9XO02VPS8DB0HPHAZDL0AD1SSGBC0VLB3E9' where id=68; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='5LTCSHBTNBGPUU41BXA57FDZGA5PRRI9JBPX8130GUNTPSPJ9VM7Q20AOICZ4IZXW6MRCGF47W6T0J3BKD4UI2U21BINN9E1VB3MU7GBTBAODQZTMI8EZKEYVPE5ANUMS7MAPOW7H30D2PHE4XDNSPQ6C371EV3GJ7PK13YD3N1D4LIJ4R37RQ5R5HFT1C16OCAEZIVDKYPGXZ2ME7CDLY465I1OH93LQ0VHHF2WIFBG98N2LPYSOFTVZU8GH84CV' where id=68; -update noar ti set v1='5LTCSHBTNBGPUU41BXA57FDZGA5PRRI9JBPX8130GUNTPSPJ9VM7Q20AOICZ4IZXW6MRCGF47W6T0J3BKD4UI2U21BINN9E1VB3MU7GBTBAODQZTMI8EZKEYVPE5ANUMS7MAPOW7H30D2PHE4XDNSPQ6C371EV3GJ7PK13YD3N1D4LIJ4R37RQ5R5HFT1C16OCAEZIVDKYPGXZ2ME7CDLY465I1OH93LQ0VHHF2WIFBG98N2LPYSOFTVZU8GH84CV' where id=68; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='7U7H6UOAQF6DYKDBH6VS9N2IJXDFGH3CADHBUN0C2UH1KBSSRTFAFGIA9YV81OP2D2G7BGCX2VCGV72AZL8H6VZDSOIUQHO9OR23F086DZDA32982W3Z67A8KOTRGSW8WY1ATQO9M4W6T7X7LCJ2A2QO3TW4NTE5BPOOJL2VZV02MMVCGMZR30XSNMKTLUYR9WY14CXKNCDXQ5F6JYW0OTN9DBYFC9QXL5KK8QS2V84LDFX7I0NJ0V4NPEYFSYIQR' where id=68; -update noar ti set v2='7U7H6UOAQF6DYKDBH6VS9N2IJXDFGH3CADHBUN0C2UH1KBSSRTFAFGIA9YV81OP2D2G7BGCX2VCGV72AZL8H6VZDSOIUQHO9OR23F086DZDA32982W3Z67A8KOTRGSW8WY1ATQO9M4W6T7X7LCJ2A2QO3TW4NTE5BPOOJL2VZV02MMVCGMZR30XSNMKTLUYR9WY14CXKNCDXQ5F6JYW0OTN9DBYFC9QXL5KK8QS2V84LDFX7I0NJ0V4NPEYFSYIQR' where id=68; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='JDNPQQDCJE6LWW34038G31CBSUGT4QRTN0R2AMD0SEBD5YOK3MA1YKOR2QAEGKREZVWBDTHC0CFEUQAPGJBGH7FFAT7CAO6NAL4AG4XC7UI0SVHYN5TV2WCV0XNMHVYHN8IIFKMWGE7TWDHMNK5GZ8YHF8GA45WP64FIYL1Y8VDRB7FOLZZRKNWZIEWNN4KF4O41KLATOID4WCRPDKLDR1BS5SDMXREX3EL4JMNIJW79BJKEKQNDQA1J65IOUEWW1' where id=68; -update noar ti set v3='JDNPQQDCJE6LWW34038G31CBSUGT4QRTN0R2AMD0SEBD5YOK3MA1YKOR2QAEGKREZVWBDTHC0CFEUQAPGJBGH7FFAT7CAO6NAL4AG4XC7UI0SVHYN5TV2WCV0XNMHVYHN8IIFKMWGE7TWDHMNK5GZ8YHF8GA45WP64FIYL1Y8VDRB7FOLZZRKNWZIEWNN4KF4O41KLATOID4WCRPDKLDR1BS5SDMXREX3EL4JMNIJW79BJKEKQNDQA1J65IOUEWW1' where id=68; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='CWBTRY3CREKBD0E8A6PVNRT1SJHA1EPS47GWEZ911SF6PZCP0R6D11O0VQFLXN1Z3QJ30T0L5SWLIB58DBYZ2LMI9K4PNWWL15WZ7RXMB34MCXXSBV3A9ML79QU4A5QA13MO8OX17KR39UZWXRYQPER9AQULFUDBSJF8H6AUDCSP0LKLX2IQZ13YWNWHLS47ETQHUWU6BGRQIQUQN50LDVZWLMUJRZB4VILPO5HGJKQ9R9OD7SYZ8DF2J82GN3DHX' where id=69; -update noar ti set v0='CWBTRY3CREKBD0E8A6PVNRT1SJHA1EPS47GWEZ911SF6PZCP0R6D11O0VQFLXN1Z3QJ30T0L5SWLIB58DBYZ2LMI9K4PNWWL15WZ7RXMB34MCXXSBV3A9ML79QU4A5QA13MO8OX17KR39UZWXRYQPER9AQULFUDBSJF8H6AUDCSP0LKLX2IQZ13YWNWHLS47ETQHUWU6BGRQIQUQN50LDVZWLMUJRZB4VILPO5HGJKQ9R9OD7SYZ8DF2J82GN3DHX' where id=69; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='9KPQEQ1AJ93X9M12FUDH6140V1L3TYIFT27QU4QRII81VE6TKF4LVYJV8F05G38ADH6Q42G6UL0PZXO2Y2CJM2P6N8FJ2XZBAWK0MGFXYT88466EVQ3SD7LJXC879V813NQ01HQ324TDPZABXQJH3HRW9MZE4DOIX37JCBP2Z0RHKHWTC7FGWVFSN1P1IR96W9T7OE6IKIT89JLBX4PUUUUQUR258XQMZ9ZV3JOO5IB8X9F3QPBPFGIZXZH7M1D5E' where id=69; -update noar ti set v1='9KPQEQ1AJ93X9M12FUDH6140V1L3TYIFT27QU4QRII81VE6TKF4LVYJV8F05G38ADH6Q42G6UL0PZXO2Y2CJM2P6N8FJ2XZBAWK0MGFXYT88466EVQ3SD7LJXC879V813NQ01HQ324TDPZABXQJH3HRW9MZE4DOIX37JCBP2Z0RHKHWTC7FGWVFSN1P1IR96W9T7OE6IKIT89JLBX4PUUUUQUR258XQMZ9ZV3JOO5IB8X9F3QPBPFGIZXZH7M1D5E' where id=69; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='WZ283O0C7H4BW4981I23P8ZLAMAKQ2DGGARBGV5HVC3M4SV0KZW87K8XXIJKQJN2ELB6OFF7YKG5PTB0DWWZNIE72BPQLFKZWN0Z2U0YUUPKBS2R6QRGNRUXU0H7RXHVNNSD53NJ46PJ1CZ8A8JB23R3ZOLVOU6PUVC0SNL2NSVJJ2N0EK3CKPT4FADU1PN61U2VQIFM9VTVEXX3Q7GFLINQXNHNB53VJO3LZEV8TY5LJJ1DGTDNKWHULWUE3UGBS' where id=69; -update noar ti set v2='WZ283O0C7H4BW4981I23P8ZLAMAKQ2DGGARBGV5HVC3M4SV0KZW87K8XXIJKQJN2ELB6OFF7YKG5PTB0DWWZNIE72BPQLFKZWN0Z2U0YUUPKBS2R6QRGNRUXU0H7RXHVNNSD53NJ46PJ1CZ8A8JB23R3ZOLVOU6PUVC0SNL2NSVJJ2N0EK3CKPT4FADU1PN61U2VQIFM9VTVEXX3Q7GFLINQXNHNB53VJO3LZEV8TY5LJJ1DGTDNKWHULWUE3UGBS' where id=69; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='1TTQY4D3DHY1P21FNR3CNXLQQIVOY6WUEZEJ0QIUJOU3BLMVGUNGFJJP7XIN7L1YZ4MBZAIDQHURMY4LTKG6MKS819UIZ3PJH20084A0VTQLS79V4CQXQ7UH4R9R1L56ZE38HYG5TJJ5KHTRMOJK7Q5JXSWXH44XUUASL7DHZX0QQ0MJ6E602DSGL36FLGT6WH406T4CLPMW5XM02V1K4O7YV7GCVXI5K8ZD2UECR1HLUCOC87ZKT0MC2AF6K382Z' where id=69; -update noar ti set v3='1TTQY4D3DHY1P21FNR3CNXLQQIVOY6WUEZEJ0QIUJOU3BLMVGUNGFJJP7XIN7L1YZ4MBZAIDQHURMY4LTKG6MKS819UIZ3PJH20084A0VTQLS79V4CQXQ7UH4R9R1L56ZE38HYG5TJJ5KHTRMOJK7Q5JXSWXH44XUUASL7DHZX0QQ0MJ6E602DSGL36FLGT6WH406T4CLPMW5XM02V1K4O7YV7GCVXI5K8ZD2UECR1HLUCOC87ZKT0MC2AF6K382Z' where id=69; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='L8CTJ4X3CQ3TNN312LONYIHMPRJ9QSTCAVW26HK4LWXFOH4EWPDZ1QGP2H89ESAW1W4WVH7J0KT7FGJ5X5LGZOM3A8BKAXL7H1HBZ907LNRGR2UITF15GIYN8KEFD9UW41E3WYQBZXNMMGE2NRCFLOA3KGVPZ87ERE01C268CGBPY5VOPKY6JME8ENCV8UT8PYGEM39C0RRUIVXCK1JK3AC39KXFHYRMUA420WI24D3F68U2U3IJQBEL2YHC9TN4W' where id=70; -update noar ti set v0='L8CTJ4X3CQ3TNN312LONYIHMPRJ9QSTCAVW26HK4LWXFOH4EWPDZ1QGP2H89ESAW1W4WVH7J0KT7FGJ5X5LGZOM3A8BKAXL7H1HBZ907LNRGR2UITF15GIYN8KEFD9UW41E3WYQBZXNMMGE2NRCFLOA3KGVPZ87ERE01C268CGBPY5VOPKY6JME8ENCV8UT8PYGEM39C0RRUIVXCK1JK3AC39KXFHYRMUA420WI24D3F68U2U3IJQBEL2YHC9TN4W' where id=70; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='WS6AEDXCXTALDXH2ETPHA58G21M6WVU4D47B5DRDQB98BKKMK9IX2D6CBHHMQXQZH0MDNI1GLRRJYL1IQ526MENRF3IFDIV3WVIR4ZE6KLVENRCULHPSMHD6LDSYJAELSOPWPQFLLJNI7C7DUDGD1G5YZEKSHSFT5QWN4IL8RNJLON2NXY40BKYWG40UCN6P7FS8GJJ0IR717YAOA980AGDEXFC2ANFKYSMT2S013HBE8CDTVWGXCACAHBIYJQYYA' where id=70; -update noar ti set v1='WS6AEDXCXTALDXH2ETPHA58G21M6WVU4D47B5DRDQB98BKKMK9IX2D6CBHHMQXQZH0MDNI1GLRRJYL1IQ526MENRF3IFDIV3WVIR4ZE6KLVENRCULHPSMHD6LDSYJAELSOPWPQFLLJNI7C7DUDGD1G5YZEKSHSFT5QWN4IL8RNJLON2NXY40BKYWG40UCN6P7FS8GJJ0IR717YAOA980AGDEXFC2ANFKYSMT2S013HBE8CDTVWGXCACAHBIYJQYYA' where id=70; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='Z83PMP1JR5548HLUP4A4OU6EKVP30L1Q7K26QS9J6RW7J909G2I56M3UAXPMX3UELF9OUNDM0OCPN3M2ONTBNON6UJ0OLS0LKW01XENZLR2J24Z5WG7GOFSLQ6L5T3HQKGZKKPG44TR1J5YND1EZE5KNR39PBPDG4ZY38O8NWHIE73EW67YP15C2LJJIVFXZQQ0W6DDCV5W9FKP7RZF55DER2B6X1B9QN3QZ66A1HIWSALPEF1ZYIL9H140FK0X1K' where id=70; -update noar ti set v2='Z83PMP1JR5548HLUP4A4OU6EKVP30L1Q7K26QS9J6RW7J909G2I56M3UAXPMX3UELF9OUNDM0OCPN3M2ONTBNON6UJ0OLS0LKW01XENZLR2J24Z5WG7GOFSLQ6L5T3HQKGZKKPG44TR1J5YND1EZE5KNR39PBPDG4ZY38O8NWHIE73EW67YP15C2LJJIVFXZQQ0W6DDCV5W9FKP7RZF55DER2B6X1B9QN3QZ66A1HIWSALPEF1ZYIL9H140FK0X1K' where id=70; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='3XLTDHJ440OZLMUBYG84ICLXZ9YSWHWWX8E6680O5KNU80DA9FE7WX6IKP0D7W3LTNU1Q4AWH1MXRDM54LE878NJJUWL1ZA89ZGK15Z4W7XWS5ML4CXJTMZKMAWMJ5VBUN3MI3USBHHMMMCGW5C2IX3WGAN87RRSXCK6ZI9AUGRC8A66PDL9MJ2S0UVYHQRXHJNDE1K4R2WIVMJS7YJMYUAMJDL7401QSKWVXZH2U56B2XBEM2BQ7HH95PGY4ISJP' where id=70; -update noar ti set v3='3XLTDHJ440OZLMUBYG84ICLXZ9YSWHWWX8E6680O5KNU80DA9FE7WX6IKP0D7W3LTNU1Q4AWH1MXRDM54LE878NJJUWL1ZA89ZGK15Z4W7XWS5ML4CXJTMZKMAWMJ5VBUN3MI3USBHHMMMCGW5C2IX3WGAN87RRSXCK6ZI9AUGRC8A66PDL9MJ2S0UVYHQRXHJNDE1K4R2WIVMJS7YJMYUAMJDL7401QSKWVXZH2U56B2XBEM2BQ7HH95PGY4ISJP' where id=70; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='PAQOHGNNE5EV7QDDR0EKMB9NKIEPRJFWPRBN2A4BU0WSPGZBHM4UOQNX0HB7RF3C1CNACXVEFABO1F0JJ5W8B34MV5FBTCSH7DC6FRXWIWMTS46R349YJ8TCVBMU2IM644UL0OYGPTV607GK5D3HZE8J066OJ4W0T65GZHQ58OWUAQG2JD4MP4R87O280JS1ZRXR6L6BX6HETQO63M43JWJ1MXMEDX0KXGFFQ4BQTTVVYGZ9PEW3STAXG69H3YCDE' where id=71; -update noar ti set v0='PAQOHGNNE5EV7QDDR0EKMB9NKIEPRJFWPRBN2A4BU0WSPGZBHM4UOQNX0HB7RF3C1CNACXVEFABO1F0JJ5W8B34MV5FBTCSH7DC6FRXWIWMTS46R349YJ8TCVBMU2IM644UL0OYGPTV607GK5D3HZE8J066OJ4W0T65GZHQ58OWUAQG2JD4MP4R87O280JS1ZRXR6L6BX6HETQO63M43JWJ1MXMEDX0KXGFFQ4BQTTVVYGZ9PEW3STAXG69H3YCDE' where id=71; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='O6BYLZL1SQUJLH6GC404WDYA8ULDGUMAV3UD22TEH4CRWEH31J5YUXZBNTQHEHRGF8R6LCJ6CKYBMSMTF0F6CBK5Z96WMZ6BZAF4H3SYTI2321X7QVRR0UWXPID501I9ROJ2YUGZU81PLYLXRB0FEVKCAA4QQTOXOMGUWY51WLRBR44V1R86BUYC4GEIQQVHNIDYKMUE75QWO8YEX37S7G2K3RHY35GXZHGHW602E3913SZCFDALS1597S6FIMSI5' where id=71; -update noar ti set v1='O6BYLZL1SQUJLH6GC404WDYA8ULDGUMAV3UD22TEH4CRWEH31J5YUXZBNTQHEHRGF8R6LCJ6CKYBMSMTF0F6CBK5Z96WMZ6BZAF4H3SYTI2321X7QVRR0UWXPID501I9ROJ2YUGZU81PLYLXRB0FEVKCAA4QQTOXOMGUWY51WLRBR44V1R86BUYC4GEIQQVHNIDYKMUE75QWO8YEX37S7G2K3RHY35GXZHGHW602E3913SZCFDALS1597S6FIMSI5' where id=71; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='A3GIY8NITTWHH2L3N0MSGF0KWAWHI3M03XW96F06XDL7WKMYLC13QOGXHF2JZL6GX26103D9NZ52L5MC1HE5WPW354646YLDQN4D1WRU5XGG6D5AULWK17LLQPQLDG3647HW5V7QVPXPHLJHKENXERT3U86XKZAKCG7W596369TEVOZ1NC9BL9SYAX7UZQPOLAPQ2KTDQZH21883OEK5ED7TW4AT5XEE6R1H4B3RL1CFID5F855G5MQPIG83XQOWV' where id=71; -update noar ti set v2='A3GIY8NITTWHH2L3N0MSGF0KWAWHI3M03XW96F06XDL7WKMYLC13QOGXHF2JZL6GX26103D9NZ52L5MC1HE5WPW354646YLDQN4D1WRU5XGG6D5AULWK17LLQPQLDG3647HW5V7QVPXPHLJHKENXERT3U86XKZAKCG7W596369TEVOZ1NC9BL9SYAX7UZQPOLAPQ2KTDQZH21883OEK5ED7TW4AT5XEE6R1H4B3RL1CFID5F855G5MQPIG83XQOWV' where id=71; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='PPX1NYCY4YLL1DWXKL67Y7S3AMQMWWYV5LWRZXIH5X2LYLVJP0RYSOBY2FUGB6EJ0WQDY52EHEGS5HTWS2P1EVIM4FIU227YUO1SF4NY3LYV9GMU4E74870A1HD86ZHJJN068LVVIWHZJXM1BBQEFLYTN6T7O265LDLCB846F84J1WOVGR918ZHD41QP60TTEFU9ZAYGTDNG6DD3J6P7RV2A78CWQCHX41FL5J9RZ5ZAZ55K5EYQN8CZ6DNPEUA2U' where id=71; -update noar ti set v3='PPX1NYCY4YLL1DWXKL67Y7S3AMQMWWYV5LWRZXIH5X2LYLVJP0RYSOBY2FUGB6EJ0WQDY52EHEGS5HTWS2P1EVIM4FIU227YUO1SF4NY3LYV9GMU4E74870A1HD86ZHJJN068LVVIWHZJXM1BBQEFLYTN6T7O265LDLCB846F84J1WOVGR918ZHD41QP60TTEFU9ZAYGTDNG6DD3J6P7RV2A78CWQCHX41FL5J9RZ5ZAZ55K5EYQN8CZ6DNPEUA2U' where id=71; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='ZS6ZZKQYHKIX6DIOVRMVY0VFUG3BGQQIGUMYOVTFNRZY0WN8YF7O6RUYAH5O3ZG33H2Z65FQQGZQE1RWKFQD79CH41SNVCREUSET3IZ1F958FHTPNWBCK0M8YM0309ACJXP8XLSCMDA62D98GZQQJ68COODW35A9EUESL0S8HGZ7TJX0D12SNCDNTPMVQHLLFOV404IRU8KEFCK71JWV77C8XP3RERERLV2U95N6P19Z2HZHWKZ1BWXK548HM89KS' where id=72; -update noar ti set v0='ZS6ZZKQYHKIX6DIOVRMVY0VFUG3BGQQIGUMYOVTFNRZY0WN8YF7O6RUYAH5O3ZG33H2Z65FQQGZQE1RWKFQD79CH41SNVCREUSET3IZ1F958FHTPNWBCK0M8YM0309ACJXP8XLSCMDA62D98GZQQJ68COODW35A9EUESL0S8HGZ7TJX0D12SNCDNTPMVQHLLFOV404IRU8KEFCK71JWV77C8XP3RERERLV2U95N6P19Z2HZHWKZ1BWXK548HM89KS' where id=72; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='8506R6MY8CHZK93TCT1WQHYWPSQOEF6U0KDMF34TRTE3E4LGKF1OO48PAW2WEWMIYM2PVX4PSVAL46KI0YFC85AXQL6YV6WDBU4193C83H6NY3W27KTB3E3504ZTRCGIVHOMY41X91JCCRG99PZBW6ZQ55IL2X062NZVFEGV9GWY73T790FAGXBGKX9D1F49OW2SLICLGZ2O9VNX61YONO73JQUQWGPPOY1HDFWOLVNXRGWHLWRWGQ5AAMZQIT17U' where id=72; -update noar ti set v1='8506R6MY8CHZK93TCT1WQHYWPSQOEF6U0KDMF34TRTE3E4LGKF1OO48PAW2WEWMIYM2PVX4PSVAL46KI0YFC85AXQL6YV6WDBU4193C83H6NY3W27KTB3E3504ZTRCGIVHOMY41X91JCCRG99PZBW6ZQ55IL2X062NZVFEGV9GWY73T790FAGXBGKX9D1F49OW2SLICLGZ2O9VNX61YONO73JQUQWGPPOY1HDFWOLVNXRGWHLWRWGQ5AAMZQIT17U' where id=72; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='XUNKIDUBM6FBMBL0XZCLA52WRD2IGF993WZY678TD8ROLU3T32M3B4R867IKX1DZ614N4YF92YOVPK0UPTMHJPR56HMKUOOXEGV9FGNA2SATAHQH2ME0VFZ7J92G14E9QP39VUJA755XVJJPY556N4I9595JMV8AT7ZBS4R02MWXDLZ0B9WGT25FKQH1I851FBCE5IA7OD8LCUVBR5NB58ZCUBF7BAFZ1NIKUCVYU62M08HEF2TH3DSFPD6UDYURE' where id=72; -update noar ti set v2='XUNKIDUBM6FBMBL0XZCLA52WRD2IGF993WZY678TD8ROLU3T32M3B4R867IKX1DZ614N4YF92YOVPK0UPTMHJPR56HMKUOOXEGV9FGNA2SATAHQH2ME0VFZ7J92G14E9QP39VUJA755XVJJPY556N4I9595JMV8AT7ZBS4R02MWXDLZ0B9WGT25FKQH1I851FBCE5IA7OD8LCUVBR5NB58ZCUBF7BAFZ1NIKUCVYU62M08HEF2TH3DSFPD6UDYURE' where id=72; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='P32HEL3LFISXRKR2F7E9CUB5F0F3JPLVR6XPBWMYCEXXTDJHI96037TFU1EKAWV9BRAMJUCMUG4W6PHZF8JOXZ5S3OD7R41ALZ77UB09DB1UYF4L5L4AT5O79UHJX5L0PSP651N11UREL7ZH9QFT3P4ODYBW1DL191AOIBWN42UM82BNSQ56RM73M4AM0UYYKOIACOKHXG4IO93M64CIWVZHF8AC6LKEVV4T9M4WNOMEJE5JK7WNJ0A45E5WFAY72' where id=72; -update noar ti set v3='P32HEL3LFISXRKR2F7E9CUB5F0F3JPLVR6XPBWMYCEXXTDJHI96037TFU1EKAWV9BRAMJUCMUG4W6PHZF8JOXZ5S3OD7R41ALZ77UB09DB1UYF4L5L4AT5O79UHJX5L0PSP651N11UREL7ZH9QFT3P4ODYBW1DL191AOIBWN42UM82BNSQ56RM73M4AM0UYYKOIACOKHXG4IO93M64CIWVZHF8AC6LKEVV4T9M4WNOMEJE5JK7WNJ0A45E5WFAY72' where id=72; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='G0T0FR4FO5EKFHMU4YY6VYVR58QQX0TK7885LRVIFIR8A6L2BQYBZME9DBORU1SX21VL80EWLBP3262H7YS7WQTTMH6T5DRMJTQJ591JF6375DQ6KL6ACATL954D4WQC60UIENOKDMHEVYI2LUJNMQYHGYY6L0EF1DHSP1UHAJJDUM16DB0CNMRJ5TKZJA4WDKLKHRV661S1FXW8VQZ9Z4ZLBBNRNG64EWJFTWQ8YLC2LCYPD0WLWBE9SADQGJOI3' where id=73; -update noar ti set v0='G0T0FR4FO5EKFHMU4YY6VYVR58QQX0TK7885LRVIFIR8A6L2BQYBZME9DBORU1SX21VL80EWLBP3262H7YS7WQTTMH6T5DRMJTQJ591JF6375DQ6KL6ACATL954D4WQC60UIENOKDMHEVYI2LUJNMQYHGYY6L0EF1DHSP1UHAJJDUM16DB0CNMRJ5TKZJA4WDKLKHRV661S1FXW8VQZ9Z4ZLBBNRNG64EWJFTWQ8YLC2LCYPD0WLWBE9SADQGJOI3' where id=73; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='BDL0CWN58ENUO49ARMZWBHJQTNLAYDOLDEKL2KO0M2TCMJS6A09238YQXNBW9YK4GJZ1CCXQTHBSL4RYARLBKVJDDH5YC4RANFAO7XOXQWLLVFEH6R92OXHUAJHT4Q3S3LH6K2AY4NPGBIPBVM0JIHBIWLT008GBB2Q7WFXBT8FVEXR1GT9LLUNHRGF6VOSPJVMUFJM19BFHLX1A9K5MC98Q6BD7LV7DILJOAAR3BP75HS6AEGM5UUQXPLVSKDAEZ' where id=73; -update noar ti set v1='BDL0CWN58ENUO49ARMZWBHJQTNLAYDOLDEKL2KO0M2TCMJS6A09238YQXNBW9YK4GJZ1CCXQTHBSL4RYARLBKVJDDH5YC4RANFAO7XOXQWLLVFEH6R92OXHUAJHT4Q3S3LH6K2AY4NPGBIPBVM0JIHBIWLT008GBB2Q7WFXBT8FVEXR1GT9LLUNHRGF6VOSPJVMUFJM19BFHLX1A9K5MC98Q6BD7LV7DILJOAAR3BP75HS6AEGM5UUQXPLVSKDAEZ' where id=73; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='XQOUXXHLEQQG9CHP01JN95K7MXJXE6Y4V199FVDFYXXCGQ70EZMADR6RVRG7H02OJNZXBS1JCEFA9TBH9ASUGIWQP06JN3WXPV2ZK98ZARIF8D91XBC3BWSOEFN9K12JD1GXXTJT0QHS9CUK480DSS3OAIIFS4E1XZO2FCHHKE5CC3MRF1O0UBK9BF178OMS462ZK4ZY9JEVUBY0IGSUTL9MFVCQI2DRUB9Q3JDE6VU331476SSHQ86AA0OJ0OT2M' where id=73; -update noar ti set v2='XQOUXXHLEQQG9CHP01JN95K7MXJXE6Y4V199FVDFYXXCGQ70EZMADR6RVRG7H02OJNZXBS1JCEFA9TBH9ASUGIWQP06JN3WXPV2ZK98ZARIF8D91XBC3BWSOEFN9K12JD1GXXTJT0QHS9CUK480DSS3OAIIFS4E1XZO2FCHHKE5CC3MRF1O0UBK9BF178OMS462ZK4ZY9JEVUBY0IGSUTL9MFVCQI2DRUB9Q3JDE6VU331476SSHQ86AA0OJ0OT2M' where id=73; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='N2EBMXJ8H4GS6VQS7OGOPJ6MTZO86T0DBC3R8EHMC86876QGVTI9IPBEQ4V0W713F1LL8KIDUR5T8C2CTCT9NKEK1D67WJKFCZDY6Z999S5R0OZNBADWP5FBT202C6HI3OCID9M722Z58Z7O3OBM1ERYZSP1BXXQZ3DPAOK9T5UM3E48XR0VOJQXED54K92AJBLJR93OIF25LNA2JS533X11DGRREZP0V049MOI1ICMWE6UVRI64UQ3ME1QFKRLP4' where id=73; -update noar ti set v3='N2EBMXJ8H4GS6VQS7OGOPJ6MTZO86T0DBC3R8EHMC86876QGVTI9IPBEQ4V0W713F1LL8KIDUR5T8C2CTCT9NKEK1D67WJKFCZDY6Z999S5R0OZNBADWP5FBT202C6HI3OCID9M722Z58Z7O3OBM1ERYZSP1BXXQZ3DPAOK9T5UM3E48XR0VOJQXED54K92AJBLJR93OIF25LNA2JS533X11DGRREZP0V049MOI1ICMWE6UVRI64UQ3ME1QFKRLP4' where id=73; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='UC7DCO0XQ183ARVILDD2MEGELDY305QRRDFIL606PRF5AGCTFSQRN73UI0GQ12WUBHI3QOTV6XGRULSLJD7J0TXKLWTRZFW65SWNVR8RTWMT79PM0SW50D1UNZWB5TVM97ZFRBL04RDFJG5QRQM1SCPEUMCMFW9FW3UNHVXN09QUMYSWEZZN6YX12HSCO4KH13O85ZSNKZAT76PQ4NND0R69WC20907D568ZCR7GJP9U7P9737S57VIS2Y56FH4IP' where id=74; -update noar ti set v0='UC7DCO0XQ183ARVILDD2MEGELDY305QRRDFIL606PRF5AGCTFSQRN73UI0GQ12WUBHI3QOTV6XGRULSLJD7J0TXKLWTRZFW65SWNVR8RTWMT79PM0SW50D1UNZWB5TVM97ZFRBL04RDFJG5QRQM1SCPEUMCMFW9FW3UNHVXN09QUMYSWEZZN6YX12HSCO4KH13O85ZSNKZAT76PQ4NND0R69WC20907D568ZCR7GJP9U7P9737S57VIS2Y56FH4IP' where id=74; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='MK0S7UJQBCXTFKE0P5G0PDCZGMQ4HO7270522MIH4QXLQ2BIEWJAHIT1EKQ9R51MJQKFGSU882POH2RKF09S8JXP5HVQ7W1RT0PZ27F5TFWGVCSAL3TAUGNBFSX9HZXUR7R5J9FSR1EZPY7C0MYA96AXKHQXMZLUBH6FL34C8SF1S7IOZDOQAUJ9I8BVC2W0R8YJ3QLQWW7X434KFAK4916BSJ66ALVN25E57DDYNLVQPC28V1ZE4JU5BMOEJ31TJ' where id=74; -update noar ti set v1='MK0S7UJQBCXTFKE0P5G0PDCZGMQ4HO7270522MIH4QXLQ2BIEWJAHIT1EKQ9R51MJQKFGSU882POH2RKF09S8JXP5HVQ7W1RT0PZ27F5TFWGVCSAL3TAUGNBFSX9HZXUR7R5J9FSR1EZPY7C0MYA96AXKHQXMZLUBH6FL34C8SF1S7IOZDOQAUJ9I8BVC2W0R8YJ3QLQWW7X434KFAK4916BSJ66ALVN25E57DDYNLVQPC28V1ZE4JU5BMOEJ31TJ' where id=74; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='A2HDH0KVYC2HLBA46L6X7FBGBKZ7EEY86GFPBRWQDWES4YQNU9TV4MC30CDT8JA49ONLDUYAW3N0P9ZZDOLWDFCQV6HY9VZEJ4T3A7NSF02TJA8OW03NO2VLE4K7ZE2PTVFFZK77NUZAG7LOHU5OZAT8605F75TWW6RZNYL21GIWABGEW7XRF2BUEZPDY220BFAZH83GW3DMSSNAJIMG7O84MJSECGH3AFU59OLLMS7D4KYRW2HZI62QP2AQX2RPU' where id=74; -update noar ti set v2='A2HDH0KVYC2HLBA46L6X7FBGBKZ7EEY86GFPBRWQDWES4YQNU9TV4MC30CDT8JA49ONLDUYAW3N0P9ZZDOLWDFCQV6HY9VZEJ4T3A7NSF02TJA8OW03NO2VLE4K7ZE2PTVFFZK77NUZAG7LOHU5OZAT8605F75TWW6RZNYL21GIWABGEW7XRF2BUEZPDY220BFAZH83GW3DMSSNAJIMG7O84MJSECGH3AFU59OLLMS7D4KYRW2HZI62QP2AQX2RPU' where id=74; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='ILB9EXDP5M5R2C9X1BVDO92DZO4I79RR2PJ7UYC0M1FV5W5Q84JT0BKXZGQYXQ6M37INZZVBOTW5XBRE139RKHUG35ZOT51ITZANBYZLL0FD4W5SNII32UJ1KJXMI56UFC0JWKCAHH3KS73MO2NI6EPR5ELBF6TEHJ66Y6LR72T1GHRMQE4TCEBWXVI8AXPSZ0D0Q4K3OR4ZI8QGY25H2S3YG5NXOR16SBBAG5AM8LE7XULRIBDIBRSSUO4F4JPKK' where id=74; -update noar ti set v3='ILB9EXDP5M5R2C9X1BVDO92DZO4I79RR2PJ7UYC0M1FV5W5Q84JT0BKXZGQYXQ6M37INZZVBOTW5XBRE139RKHUG35ZOT51ITZANBYZLL0FD4W5SNII32UJ1KJXMI56UFC0JWKCAHH3KS73MO2NI6EPR5ELBF6TEHJ66Y6LR72T1GHRMQE4TCEBWXVI8AXPSZ0D0Q4K3OR4ZI8QGY25H2S3YG5NXOR16SBBAG5AM8LE7XULRIBDIBRSSUO4F4JPKK' where id=74; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='AQE73HB3XBAN7KJEKJQLGMIKUMDX0M97EUOJ8LCWDJB0HWDQFU8VK2TZVSPIY5JH8OVD44V2YJSVDVS814VH19ZBPUJ46TXV4WYOGLG4B8RD490MVTDA50UO1X41ZXOH9TUOSZIXK8CEQV3G6JGKPI1BKZYKY8NNL4AT91EZE9ADUTZ8VLZHIJ618URP79GDDEMUGFR5OUAX1YOLIHX6JX0BIY2KFNU996UEQLRLGP171WL6X0EV7RUZGOGMZ5P0L' where id=75; -update noar ti set v0='AQE73HB3XBAN7KJEKJQLGMIKUMDX0M97EUOJ8LCWDJB0HWDQFU8VK2TZVSPIY5JH8OVD44V2YJSVDVS814VH19ZBPUJ46TXV4WYOGLG4B8RD490MVTDA50UO1X41ZXOH9TUOSZIXK8CEQV3G6JGKPI1BKZYKY8NNL4AT91EZE9ADUTZ8VLZHIJ618URP79GDDEMUGFR5OUAX1YOLIHX6JX0BIY2KFNU996UEQLRLGP171WL6X0EV7RUZGOGMZ5P0L' where id=75; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='TBFOD59SMZJTYZ4J4REYTWVE6V2OSBR3WZK9UU9JFMWCIJY97FFUC2KYB9GKJXYB5Z6LVNFWOQ7AJGEUUJXFJ8MXLW5G6EPNA52YU9ZUX5FWHYKFC9MJFVH63H726C6KFMBME327TY42IK09TKQID6XG2BMVMEBH0I0ESGS1IDT6HOPE8T02LUE5KDTP6QGI68YIHLW7T4K9XYHDOLS5ZDDPFDNOKRV3SQYF7YHFIK7PYY19JUSHNDJSXQ2BZJFYZ' where id=75; -update noar ti set v1='TBFOD59SMZJTYZ4J4REYTWVE6V2OSBR3WZK9UU9JFMWCIJY97FFUC2KYB9GKJXYB5Z6LVNFWOQ7AJGEUUJXFJ8MXLW5G6EPNA52YU9ZUX5FWHYKFC9MJFVH63H726C6KFMBME327TY42IK09TKQID6XG2BMVMEBH0I0ESGS1IDT6HOPE8T02LUE5KDTP6QGI68YIHLW7T4K9XYHDOLS5ZDDPFDNOKRV3SQYF7YHFIK7PYY19JUSHNDJSXQ2BZJFYZ' where id=75; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='NFQ8PR01T9ZZIXON8YYZHTTUN9VPMCIJ1DPSQHK25QKIJ94QIQWPN4A20NTZAUQTNYRKV596BNMW8DDCAT1Q512VJVIFPY0NMP298549EC31KMZ8DZ7PVNT19ZHUE30ECDJLGERS55RFMJWRI2LYKMTVFY0OOKJBCZX9C7QWJGUENL97SXO0L3R4XF4VFSUWNS2N99DM47EAAKOTTIO062VN32EK4JZG4ANQNQBTULABCRXOX0IFL8QV34J1WU73N' where id=75; -update noar ti set v2='NFQ8PR01T9ZZIXON8YYZHTTUN9VPMCIJ1DPSQHK25QKIJ94QIQWPN4A20NTZAUQTNYRKV596BNMW8DDCAT1Q512VJVIFPY0NMP298549EC31KMZ8DZ7PVNT19ZHUE30ECDJLGERS55RFMJWRI2LYKMTVFY0OOKJBCZX9C7QWJGUENL97SXO0L3R4XF4VFSUWNS2N99DM47EAAKOTTIO062VN32EK4JZG4ANQNQBTULABCRXOX0IFL8QV34J1WU73N' where id=75; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='TJIA711030MVUDPFEHPVTAA8GYZ1CRBFIB1AGX572645FUSSVZ2QJVOPLZL5QFHXYXLO3YMR7LBW8VWSR4A38U4VB0LQP795GK5VESGNPQ8KZBN1D4FL0JJNOLH7FKV648R80RLT3EIJKY668T26CE2TKCHP6HC4R3XP33L0JDD91VT47WF16YPESOJFRSSADRFO17OXTR8TOOW8SWGC7MRQHWPF6TEOJTHB4XEWPA1S6L5NO1D24W267R2BR1L6Q' where id=75; -update noar ti set v3='TJIA711030MVUDPFEHPVTAA8GYZ1CRBFIB1AGX572645FUSSVZ2QJVOPLZL5QFHXYXLO3YMR7LBW8VWSR4A38U4VB0LQP795GK5VESGNPQ8KZBN1D4FL0JJNOLH7FKV648R80RLT3EIJKY668T26CE2TKCHP6HC4R3XP33L0JDD91VT47WF16YPESOJFRSSADRFO17OXTR8TOOW8SWGC7MRQHWPF6TEOJTHB4XEWPA1S6L5NO1D24W267R2BR1L6Q' where id=75; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='5R4RDM613H9U030D8HCJK7Q0S7DYSORM6L5LGE8FPKRKP52ZUYKG22LBMRSQK4D39VSP52YO69RL8QIQOW99TQZ56ZAKI9JG6JKOZD6JLLWC83B5TQKPKBAKR8148KNQE021D0JVXU3LOOIWWY4GK51SVD7H3RMQ1SLAS68HM6ZJ5XUCCAXO093MJYWANKRJCCFOYTFZH1G3SNXATUP269LH8OG81M4WRQ04NWI4MXFSA5NBVZK2LK4HJ6SLIO18J' where id=76; -update noar ti set v0='5R4RDM613H9U030D8HCJK7Q0S7DYSORM6L5LGE8FPKRKP52ZUYKG22LBMRSQK4D39VSP52YO69RL8QIQOW99TQZ56ZAKI9JG6JKOZD6JLLWC83B5TQKPKBAKR8148KNQE021D0JVXU3LOOIWWY4GK51SVD7H3RMQ1SLAS68HM6ZJ5XUCCAXO093MJYWANKRJCCFOYTFZH1G3SNXATUP269LH8OG81M4WRQ04NWI4MXFSA5NBVZK2LK4HJ6SLIO18J' where id=76; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='GTXTSCFUCSFMY5Z1O2YK77NA41P0PCCFZVH05E40BUHGNILNPKS5C0DOOIM1GE2JJSRVOM7KYOEL5UNMOLUSCULNJS3AL6IMVPN5TI8H282GVP6EKVR3931SZV7JY2WV6074H5QSFXTL73JFZIXB0A3FNTO3HCYB7HXVIKVBPCIMFTUMOM702ICY70SCD74B65VBNQ0NT3SXHC4RAGNSPEKNOVJV89NAZOCSXYQ70OVIA4034SYGAFXZT9AYK51FZ' where id=76; -update noar ti set v1='GTXTSCFUCSFMY5Z1O2YK77NA41P0PCCFZVH05E40BUHGNILNPKS5C0DOOIM1GE2JJSRVOM7KYOEL5UNMOLUSCULNJS3AL6IMVPN5TI8H282GVP6EKVR3931SZV7JY2WV6074H5QSFXTL73JFZIXB0A3FNTO3HCYB7HXVIKVBPCIMFTUMOM702ICY70SCD74B65VBNQ0NT3SXHC4RAGNSPEKNOVJV89NAZOCSXYQ70OVIA4034SYGAFXZT9AYK51FZ' where id=76; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='BTL3FNIGEDABSP75C9ONT77ILIFWWCY5ZBSFASEQ106T1X2AFPGP88LYSTFBDNQQSP9ODPEMMOJ4SY7SCD9YFFQETVZOAMHJKKRVKEX9G2URA0TPCMKC5R26MN3OFC8SYGC27ETBYV05KQZ8RYKG1NSN3SORAOF40O8PQXX5HB6DH7VN7E832A7469TTQGB1IVA94EQPTLH00N1EO913DMAAAOMWXRCLHXW7IE8589QDROYBRM9R2JMDB5789DDWW' where id=76; -update noar ti set v2='BTL3FNIGEDABSP75C9ONT77ILIFWWCY5ZBSFASEQ106T1X2AFPGP88LYSTFBDNQQSP9ODPEMMOJ4SY7SCD9YFFQETVZOAMHJKKRVKEX9G2URA0TPCMKC5R26MN3OFC8SYGC27ETBYV05KQZ8RYKG1NSN3SORAOF40O8PQXX5HB6DH7VN7E832A7469TTQGB1IVA94EQPTLH00N1EO913DMAAAOMWXRCLHXW7IE8589QDROYBRM9R2JMDB5789DDWW' where id=76; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='OJ41K9N09N6ME08KZTK6726UX1IBMMAIMXC5ZLJ2EQ3A1IOY35RQYP6NIA6VU3SKTS4L4SYW9KL5T5WRET5B4I9BUJZQ35TO7WPIG0B5MCCZ6K3F58BNBIGWOPG9VGSO6AJNVV3ANI1OWAAKKJABAR8G2S01IEASSSVI79DF2F1PVN7PR5KL9YFR4KXLS1XMVRJ5WCXHXAOCGIN3VAY9YHB2X42EN3DIIJRZPFISCQD6U98G0CTCEGXJ6UAHHD8AU' where id=76; -update noar ti set v3='OJ41K9N09N6ME08KZTK6726UX1IBMMAIMXC5ZLJ2EQ3A1IOY35RQYP6NIA6VU3SKTS4L4SYW9KL5T5WRET5B4I9BUJZQ35TO7WPIG0B5MCCZ6K3F58BNBIGWOPG9VGSO6AJNVV3ANI1OWAAKKJABAR8G2S01IEASSSVI79DF2F1PVN7PR5KL9YFR4KXLS1XMVRJ5WCXHXAOCGIN3VAY9YHB2X42EN3DIIJRZPFISCQD6U98G0CTCEGXJ6UAHHD8AU' where id=76; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='7F8CDZI57S0KZRZX482RDMKHE1ZJH5D6VBLKWG5F995MNGU1GO6S1MAICIOFDCS9BTUYZ6VST3MLZWEWLTIJF74XKYVXOHGWNM0H1V5I2DJD2IQKR7N185KUDFRJGCST93ESUD0UPFYVOC8Z23TZVUFZOV1PQ0DS4AYDQ6Q82WWDJ1V8CVJZVG17RGVF1C4SR7ZE8TOPW8FZAMM75Q1LSQYOEZJF1SR99Z702F516EJVEHWUIFQSCSHRPXVRGAW0F' where id=77; -update noar ti set v0='7F8CDZI57S0KZRZX482RDMKHE1ZJH5D6VBLKWG5F995MNGU1GO6S1MAICIOFDCS9BTUYZ6VST3MLZWEWLTIJF74XKYVXOHGWNM0H1V5I2DJD2IQKR7N185KUDFRJGCST93ESUD0UPFYVOC8Z23TZVUFZOV1PQ0DS4AYDQ6Q82WWDJ1V8CVJZVG17RGVF1C4SR7ZE8TOPW8FZAMM75Q1LSQYOEZJF1SR99Z702F516EJVEHWUIFQSCSHRPXVRGAW0F' where id=77; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='ZLP681JM5DP3B1EURBN2LJH91HPPA9XMAO377O6BJ6HTCYDFZMI3LSARSFDJ3H11R4GMN6NNRD7KR4IKF6LZEG1KS3FN7ON4PA21VLUAAGWNCS98AWWIKPJVDL8KY4FY9WIBYBI7M4HUZBG39MK4UPJJKLGVIV196WXFYTOCVLA4A2TLWQ0HAVD7UNZE1G4BUOQSX24F9V5OSDL3QJA9V9L95HXYVOXA1KYHSMLMUGCAXHM91216FJGDHOJ9JZBS7' where id=77; -update noar ti set v1='ZLP681JM5DP3B1EURBN2LJH91HPPA9XMAO377O6BJ6HTCYDFZMI3LSARSFDJ3H11R4GMN6NNRD7KR4IKF6LZEG1KS3FN7ON4PA21VLUAAGWNCS98AWWIKPJVDL8KY4FY9WIBYBI7M4HUZBG39MK4UPJJKLGVIV196WXFYTOCVLA4A2TLWQ0HAVD7UNZE1G4BUOQSX24F9V5OSDL3QJA9V9L95HXYVOXA1KYHSMLMUGCAXHM91216FJGDHOJ9JZBS7' where id=77; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='1A6KJ812QRTHSOQCSR1J1HXEI8R5WI5IL4H3RWUSZE8CT4XJBIL8NDY52FQ04KF4YBE34W978A4UUIRN0H0BG5WTEMAX897W6RILLZQ6PIL38DUNE7W8218FOA2TD1BSB378CCHG6RDE8W7YCZ0BOADXHED8EGL2ZZ5O5ZRLBPRCRSU1BZEK9YQDU025D73W2LZRLSEU8JE05Z1JF61U804XWJNB5P0LJU2QOM0BS39S7N1CSA7VKDLDSBPH7190B' where id=77; -update noar ti set v2='1A6KJ812QRTHSOQCSR1J1HXEI8R5WI5IL4H3RWUSZE8CT4XJBIL8NDY52FQ04KF4YBE34W978A4UUIRN0H0BG5WTEMAX897W6RILLZQ6PIL38DUNE7W8218FOA2TD1BSB378CCHG6RDE8W7YCZ0BOADXHED8EGL2ZZ5O5ZRLBPRCRSU1BZEK9YQDU025D73W2LZRLSEU8JE05Z1JF61U804XWJNB5P0LJU2QOM0BS39S7N1CSA7VKDLDSBPH7190B' where id=77; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='MMXFX5PNICBUFU7X4AEC1653TJ55CZAT9BGL6FGO5ERMRZQUC98AXPTHRAX7VKY57GPHNXGARYO3GNWZZXTO3A2BI1C6M8Q27570SRKI818LMSUML75AJHSM67WMJ4KLOAU5M5R49KGFXE8H5VMM6BR0GYSE6NG9G3EK1QGOA66TMSI8PDD84R8R0EA41RKYHL0SAE80K2KEPATE1TZYORRGRNQAEO6VMGPHBVA1W4JP0F5YPLLM1PQAHFVCHNPQA' where id=77; -update noar ti set v3='MMXFX5PNICBUFU7X4AEC1653TJ55CZAT9BGL6FGO5ERMRZQUC98AXPTHRAX7VKY57GPHNXGARYO3GNWZZXTO3A2BI1C6M8Q27570SRKI818LMSUML75AJHSM67WMJ4KLOAU5M5R49KGFXE8H5VMM6BR0GYSE6NG9G3EK1QGOA66TMSI8PDD84R8R0EA41RKYHL0SAE80K2KEPATE1TZYORRGRNQAEO6VMGPHBVA1W4JP0F5YPLLM1PQAHFVCHNPQA' where id=77; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='NB38CTV7YJHX6YJOPNSA39K6SCQLOQJ3UTK3VBJ6TREVYN5RI2VKYYPFVVZ6XU3HBRCQQ4TNJRMJBXMRVYV8Z04S9ZN5F094AT7L9BOYG3WQQ3YFYW5C9UVEQNQYF4KV3TW454IYW8XBUEKWW016Y3OIFP88ACAIYB9NGAI4VNOGUTXWWO878MHQ7EKOCOU6WN1LYTPUGTXO15Q2LP9UYM9KMUF8XKDF7W85KVSC4NQIVS6518M7KZF3E6FLHAVM4' where id=78; -update noar ti set v0='NB38CTV7YJHX6YJOPNSA39K6SCQLOQJ3UTK3VBJ6TREVYN5RI2VKYYPFVVZ6XU3HBRCQQ4TNJRMJBXMRVYV8Z04S9ZN5F094AT7L9BOYG3WQQ3YFYW5C9UVEQNQYF4KV3TW454IYW8XBUEKWW016Y3OIFP88ACAIYB9NGAI4VNOGUTXWWO878MHQ7EKOCOU6WN1LYTPUGTXO15Q2LP9UYM9KMUF8XKDF7W85KVSC4NQIVS6518M7KZF3E6FLHAVM4' where id=78; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='WOVERXH3OXEMZ8ZIYXF4MJ7SOG71AYOHIRNWFSOLCDP8XVGZCFPGVRN5KRN86QES5LNJ19RA9WX8B6EPBD4FEH05IWIO9QSYKNGEY8UDMEGTSJBORH205CLME5ZUCONC32E0JMS7JQ6AUUMNG6M5CFW6GZK9YFZ8UTAM565FZJ6ZR0QQA98Z7PPPS2HGBQ6TU131XHLGEZ7AUFDGMIJTDHR33BP2DU2AZ600Q1EN1743H7BQNBS7DISP5VT42FZAT' where id=78; -update noar ti set v1='WOVERXH3OXEMZ8ZIYXF4MJ7SOG71AYOHIRNWFSOLCDP8XVGZCFPGVRN5KRN86QES5LNJ19RA9WX8B6EPBD4FEH05IWIO9QSYKNGEY8UDMEGTSJBORH205CLME5ZUCONC32E0JMS7JQ6AUUMNG6M5CFW6GZK9YFZ8UTAM565FZJ6ZR0QQA98Z7PPPS2HGBQ6TU131XHLGEZ7AUFDGMIJTDHR33BP2DU2AZ600Q1EN1743H7BQNBS7DISP5VT42FZAT' where id=78; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='302UGD121Z5ICNJKA3W0FIG5NJVSELC118P9SD0SRT21YAN0TC8TGOT5W3ZV0C5ZN009O8BGQWDB2PM9Y6V95FN7TQZUPK1GQJ6FTJ1N9Q1TQ7P1AQ1OO4MCQDN1FPQD0HFMCCAN720JSI03TVUFUTFR7K5CJXMSXLU8UGCSEDBBU0X05MOWLOY2KHKBBF5YSCVDY181JN0XLH9G9XXBGYSDWTVVVT7BQJ7U8KT6T2DUAW5QJ6WIGLCD4QXQHHHMI' where id=78; -update noar ti set v2='302UGD121Z5ICNJKA3W0FIG5NJVSELC118P9SD0SRT21YAN0TC8TGOT5W3ZV0C5ZN009O8BGQWDB2PM9Y6V95FN7TQZUPK1GQJ6FTJ1N9Q1TQ7P1AQ1OO4MCQDN1FPQD0HFMCCAN720JSI03TVUFUTFR7K5CJXMSXLU8UGCSEDBBU0X05MOWLOY2KHKBBF5YSCVDY181JN0XLH9G9XXBGYSDWTVVVT7BQJ7U8KT6T2DUAW5QJ6WIGLCD4QXQHHHMI' where id=78; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='UZA52RDZ11V1K163GOPSTN2WNMEG3P72W6Q3GORAZVR300CM55DIHXM11Z0CZK9XDK1TESWIGR5PIQDIGVJALJT730UTW4H1C9718EIWJYA673S1O6NA1XLRM8W0QP8YQSC10XT4VIG7Z8AVYL1G1VQ7UZOO4C412AS7GJUFZ4HOWR1F9I91UFXSJ2TUYA6N4L1SLASP59FRLIN5J3GRK2GNC360S586TKXJXU61I6ANNR7B8IJ42SW1W0S1LKWL5' where id=78; -update noar ti set v3='UZA52RDZ11V1K163GOPSTN2WNMEG3P72W6Q3GORAZVR300CM55DIHXM11Z0CZK9XDK1TESWIGR5PIQDIGVJALJT730UTW4H1C9718EIWJYA673S1O6NA1XLRM8W0QP8YQSC10XT4VIG7Z8AVYL1G1VQ7UZOO4C412AS7GJUFZ4HOWR1F9I91UFXSJ2TUYA6N4L1SLASP59FRLIN5J3GRK2GNC360S586TKXJXU61I6ANNR7B8IJ42SW1W0S1LKWL5' where id=78; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='KKUGYZNS00WEJ9K8ZZBC5WSO4B31UWH6UMXZBE4ZTFI8V60DC7D0BLYQXRJ7IH5NL01CVGZRIV6EHF3JUA0J8U8O8YFX912Q2U3C8LVJ3KNAFOQM7K20GD6UQD887NW7JB4ZFAHHL2RYUE3VJYLG3D801N2GWQ1Z47W396XGC35W2H6GWYSOEVSK2QD2BBQHYYOY3ESJFYZRGDM2NFIU7K3RC7JJ6MOUE7LE77R3EJ9KVVEPHDOOBWR52DA1NIT0U' where id=79; -update noar ti set v0='KKUGYZNS00WEJ9K8ZZBC5WSO4B31UWH6UMXZBE4ZTFI8V60DC7D0BLYQXRJ7IH5NL01CVGZRIV6EHF3JUA0J8U8O8YFX912Q2U3C8LVJ3KNAFOQM7K20GD6UQD887NW7JB4ZFAHHL2RYUE3VJYLG3D801N2GWQ1Z47W396XGC35W2H6GWYSOEVSK2QD2BBQHYYOY3ESJFYZRGDM2NFIU7K3RC7JJ6MOUE7LE77R3EJ9KVVEPHDOOBWR52DA1NIT0U' where id=79; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='VUHTVV9ONE2QHRWZR59FIG4RWWO5DNA8A8TBSEPSZGRDQBS4K270QIDWS0Y72S5K2CTUF9P2FDFKBJYCGEF89XVV7L5TDYMXPBD19I5O8MYF1QERNI7VSOPWQNKY5LJFNYRVACLRS0NTIIJEJ1BBGA23I2SGMC9FJIF8CPFOJ74T3MDOL01WXJ640UDZACGRZZ4JTAW0NGLH59VJ55H9OZSUEYAFRK5HCCELRY4251XEQCU2302Y663ZPGN3AELO1' where id=79; -update noar ti set v1='VUHTVV9ONE2QHRWZR59FIG4RWWO5DNA8A8TBSEPSZGRDQBS4K270QIDWS0Y72S5K2CTUF9P2FDFKBJYCGEF89XVV7L5TDYMXPBD19I5O8MYF1QERNI7VSOPWQNKY5LJFNYRVACLRS0NTIIJEJ1BBGA23I2SGMC9FJIF8CPFOJ74T3MDOL01WXJ640UDZACGRZZ4JTAW0NGLH59VJ55H9OZSUEYAFRK5HCCELRY4251XEQCU2302Y663ZPGN3AELO1' where id=79; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='G6HLQ7DEPCLYB9V0QTQJE36F6T2RCYR60SEQAW55LINY7QN83ZZRVFT1XR5C4GLM4IFX9TVLNQ1X0F19DOHHLQ6ABG2572P0BKKPEUV5LIC04VJZMA5EKTHVP1N6I3J4MMNQJHX0T3TLPC8EVLQPN5TQ5XWR0BFHNVTGN1A14JFYJKQTRRBYSOFKMUJHUCF1L1IGB8SBPZH8LMMN9RG6UFENIIFH3WZ81FSDECZOTTX2IVJETIF1NN7Z9EUG9RLK1' where id=79; -update noar ti set v2='G6HLQ7DEPCLYB9V0QTQJE36F6T2RCYR60SEQAW55LINY7QN83ZZRVFT1XR5C4GLM4IFX9TVLNQ1X0F19DOHHLQ6ABG2572P0BKKPEUV5LIC04VJZMA5EKTHVP1N6I3J4MMNQJHX0T3TLPC8EVLQPN5TQ5XWR0BFHNVTGN1A14JFYJKQTRRBYSOFKMUJHUCF1L1IGB8SBPZH8LMMN9RG6UFENIIFH3WZ81FSDECZOTTX2IVJETIF1NN7Z9EUG9RLK1' where id=79; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='UNKLHN1WMIS2Z1N427LRLA61946NXMAQW0K1OZZT2CAY6EC1WL1OACMC0RGAOVU22P681I3TEYUVNZEJ1M1O1Y184D70DY8F5R4VGDQCNM08UMSMQWJGYUJ2HEEB3AZCM4W5NYTGGFEWGH662XYEQV461T4GLJDPCDBN12AKOQ1P606GZS54RIPDDA1J9B21715MOHHKICO9108YPKCMJ54PC92HDXUMH313OLJYJBS93HDMT25N7EMOAHXZZFVT9' where id=79; -update noar ti set v3='UNKLHN1WMIS2Z1N427LRLA61946NXMAQW0K1OZZT2CAY6EC1WL1OACMC0RGAOVU22P681I3TEYUVNZEJ1M1O1Y184D70DY8F5R4VGDQCNM08UMSMQWJGYUJ2HEEB3AZCM4W5NYTGGFEWGH662XYEQV461T4GLJDPCDBN12AKOQ1P606GZS54RIPDDA1J9B21715MOHHKICO9108YPKCMJ54PC92HDXUMH313OLJYJBS93HDMT25N7EMOAHXZZFVT9' where id=79; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='317SXVKJPSEANQUEWXJ7AIFCIPJIYUQ7WBS69PZF4UFUDQ4BMFIXCZKB21L0KDA4GJT3G96T5YAEKX9T7VOQMAUOF5RSL2AE9E428SV3DMCMRRZ9I5HMER03ACIU83R26Z71A9P1YI4MA37VOOEFH8XAO0U6W6M8J7065FNCEGIT7M1UTR03QSDXJT67CV72YDLVT50MVLKQEDSFE60YD2O11XF9TU85NT709VVDRD6NTFUFKKVYBHBDSFPZESW75' where id=80; -update noar ti set v0='317SXVKJPSEANQUEWXJ7AIFCIPJIYUQ7WBS69PZF4UFUDQ4BMFIXCZKB21L0KDA4GJT3G96T5YAEKX9T7VOQMAUOF5RSL2AE9E428SV3DMCMRRZ9I5HMER03ACIU83R26Z71A9P1YI4MA37VOOEFH8XAO0U6W6M8J7065FNCEGIT7M1UTR03QSDXJT67CV72YDLVT50MVLKQEDSFE60YD2O11XF9TU85NT709VVDRD6NTFUFKKVYBHBDSFPZESW75' where id=80; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='Z0N22RXKYVB3MC41CB1V9DG3EMMILB4725CL7YZ54110CJJL235Y22UF0HTYGPLCUCBQPMHGU87MW0R0WNK1BDFA6G5DO0TCHVK5YOI0JBB3TBPF8ZUHXBUK2S01883OIGHMS7AH0WMKYQ1LNHS5E5B7RT9ZE5Z0OX7E9SN4BTSH5C1SSKMWH30C30AH9T9SCO1RURYJXKKX9HAVJOE8PJ08LJRO6BGRKOEINGVHLBNJ9KWEHE3IL4PI8TU0005ZZ' where id=80; -update noar ti set v1='Z0N22RXKYVB3MC41CB1V9DG3EMMILB4725CL7YZ54110CJJL235Y22UF0HTYGPLCUCBQPMHGU87MW0R0WNK1BDFA6G5DO0TCHVK5YOI0JBB3TBPF8ZUHXBUK2S01883OIGHMS7AH0WMKYQ1LNHS5E5B7RT9ZE5Z0OX7E9SN4BTSH5C1SSKMWH30C30AH9T9SCO1RURYJXKKX9HAVJOE8PJ08LJRO6BGRKOEINGVHLBNJ9KWEHE3IL4PI8TU0005ZZ' where id=80; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='I1SFWBGGEZ2SGQRUVRNWJXU734RSJB4JI7GF7X15JP9RA5AFR7WNWNKBX1AE8CVXNZ85DUIS83NSHM1T0JCAJ0OS20MC6VC82O3GRXA3NKXYULVY1UGGTJRH1IKI3T339WOVY3U6JPRHPKQIEQG44CVB3UK9NEAXQQAEKUWNLUJKOD0YG95Z1FT2VLQVWTXYV0WXI3T33XT90APM12AJ5SIWCZV6AKS09W2FXG42YDXR8OMGYVMKMC2RVE4AWM460' where id=80; -update noar ti set v2='I1SFWBGGEZ2SGQRUVRNWJXU734RSJB4JI7GF7X15JP9RA5AFR7WNWNKBX1AE8CVXNZ85DUIS83NSHM1T0JCAJ0OS20MC6VC82O3GRXA3NKXYULVY1UGGTJRH1IKI3T339WOVY3U6JPRHPKQIEQG44CVB3UK9NEAXQQAEKUWNLUJKOD0YG95Z1FT2VLQVWTXYV0WXI3T33XT90APM12AJ5SIWCZV6AKS09W2FXG42YDXR8OMGYVMKMC2RVE4AWM460' where id=80; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='MJ3LUUFRYS54ED2NDFCS0K7N4NCDP9IBITQEOXLU96OJO8IIMUR492N8AESGY2C2SL2U6NDNX5EFVL6PP7Y6QGIZXZ8TUDWN4P47GXVH7D3LY035UDZS5HL56NQXOJJQDO1TEEEUQRTC5E8GQHDWZLP1LU0XBM69YEZYH3M515RZ7C45QX8JI58TDF8J4O69W4TOW7NTB6D9MES4GCTC5T17WWKV3ICKAEGMIUPH3VHI5AJWZWGEQX6QYF4AQS2BT' where id=80; -update noar ti set v3='MJ3LUUFRYS54ED2NDFCS0K7N4NCDP9IBITQEOXLU96OJO8IIMUR492N8AESGY2C2SL2U6NDNX5EFVL6PP7Y6QGIZXZ8TUDWN4P47GXVH7D3LY035UDZS5HL56NQXOJJQDO1TEEEUQRTC5E8GQHDWZLP1LU0XBM69YEZYH3M515RZ7C45QX8JI58TDF8J4O69W4TOW7NTB6D9MES4GCTC5T17WWKV3ICKAEGMIUPH3VHI5AJWZWGEQX6QYF4AQS2BT' where id=80; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='2HJBNNMLY3ZDXX4URFRTXFFLNOAVFL5OJR4LE8ME0HSELHSZ2QC3RAIQYTVBFKVM2QYDC9XADLX3K2ZHSOPOCJ29ZS9T8R9HP6C8T3LK1WUP4ROD5LIR11J2HDTNCQ8MNF9QQ6V46SCOCGNHCMES6Y0JR9AUXOZ18SP67GCABRPVXOOE4RM11UED00QBC8N31HHZZY3CUDRKWGAANMVCQAYGIYAVZ44HID8RE3EY0K64E8KTE0H5OKX5J5U4YK2XC' where id=81; -update noar ti set v0='2HJBNNMLY3ZDXX4URFRTXFFLNOAVFL5OJR4LE8ME0HSELHSZ2QC3RAIQYTVBFKVM2QYDC9XADLX3K2ZHSOPOCJ29ZS9T8R9HP6C8T3LK1WUP4ROD5LIR11J2HDTNCQ8MNF9QQ6V46SCOCGNHCMES6Y0JR9AUXOZ18SP67GCABRPVXOOE4RM11UED00QBC8N31HHZZY3CUDRKWGAANMVCQAYGIYAVZ44HID8RE3EY0K64E8KTE0H5OKX5J5U4YK2XC' where id=81; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='JHZE4NE23OZ9BL1TM5GMR9VHDDU3HP8M6SS2RHDZ7BYBJQC0F35FLKAZAF1DWXRHXP0D2PUM5JUR3J4TDKWDPW8LFBPE3GZLKZS5YQ3ISM1WMMFC07DNDGZIXM13WAN754THD2SPWV8ZXAZKO2VQMYHHI9KX2ZH1FC7ZQAVTACGLZ1NL7HB16L986DBHWKYAYHP7J8BT8W1D3V3K5XEB5K18DT44J0Q22YXFMQTVLAWRIPUFG3FUWS670VLWMZUIU' where id=81; -update noar ti set v1='JHZE4NE23OZ9BL1TM5GMR9VHDDU3HP8M6SS2RHDZ7BYBJQC0F35FLKAZAF1DWXRHXP0D2PUM5JUR3J4TDKWDPW8LFBPE3GZLKZS5YQ3ISM1WMMFC07DNDGZIXM13WAN754THD2SPWV8ZXAZKO2VQMYHHI9KX2ZH1FC7ZQAVTACGLZ1NL7HB16L986DBHWKYAYHP7J8BT8W1D3V3K5XEB5K18DT44J0Q22YXFMQTVLAWRIPUFG3FUWS670VLWMZUIU' where id=81; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='KGA521JM3FBK82CK9TDSKPFEYD72VXXQRZ15QBWEDHOFZMS7YQJ35OPHZCWQ5R7MH1B3YHJN9U09OV3RLEE8F3CIZAD318EM0812RYVEATBF7KEL1BALAWHCDTXMF7PINC3P68MGISR56XBK93VJ8QDOG038EAUT5ZPGC7777Q5OFZLG5PPHX7JW7F5LS6JWC7S1O0L3VYENFDFH3W5QVQY59KHW66FRGZ7TURZ6ZNFHVNX1W936XOGE2FKT28RNY' where id=81; -update noar ti set v2='KGA521JM3FBK82CK9TDSKPFEYD72VXXQRZ15QBWEDHOFZMS7YQJ35OPHZCWQ5R7MH1B3YHJN9U09OV3RLEE8F3CIZAD318EM0812RYVEATBF7KEL1BALAWHCDTXMF7PINC3P68MGISR56XBK93VJ8QDOG038EAUT5ZPGC7777Q5OFZLG5PPHX7JW7F5LS6JWC7S1O0L3VYENFDFH3W5QVQY59KHW66FRGZ7TURZ6ZNFHVNX1W936XOGE2FKT28RNY' where id=81; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='LFR2K57WNKMK5VYQGUMTUVM2KJS0FULGUOEP7QQAYP7VI8PGZFX5UDIXK5XVX0XSHHJF44A4OHXEPPT3OOTNUP9CBATFYZO3N8ZLSMOPXQYE4UFDSPONQGTLTF820J4DQYOBP0F0BPR6ZYCKSI041MNJNHWAV3TGBGNSTOSN8JVGBW7EYEKSZJEXAFK3Q0ZZFG4U2MVG0184NMZ6HESFSXGUYM1HJSCKPJ1LYQ3LZIQQJDWYJXR5AHTYXPI1ZMIP3' where id=81; -update noar ti set v3='LFR2K57WNKMK5VYQGUMTUVM2KJS0FULGUOEP7QQAYP7VI8PGZFX5UDIXK5XVX0XSHHJF44A4OHXEPPT3OOTNUP9CBATFYZO3N8ZLSMOPXQYE4UFDSPONQGTLTF820J4DQYOBP0F0BPR6ZYCKSI041MNJNHWAV3TGBGNSTOSN8JVGBW7EYEKSZJEXAFK3Q0ZZFG4U2MVG0184NMZ6HESFSXGUYM1HJSCKPJ1LYQ3LZIQQJDWYJXR5AHTYXPI1ZMIP3' where id=81; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='UP9EJTXA2RUMNTLGWJJBIZAPE8EFB1M24RNH7VSJZEP7KVSIN57ZOCF7M1ABVE3PNH2TBKFXS692O2GHD8487B9YSDOYM7SA0E4G3ZJYMYT9WPBFTVLJSVRQ719LK1SEAVAN45LLDAYDVY7C2N5ZS6BV1BHMK6B4V2BHWLTN6L23DGWX5911NMO6QJ137UCEX07SIRV5AE4ELP3N1845AS7317A9BWRBW7Q6S62HDY0E6AQWOPGJ2THQ25TSKRZTH' where id=82; -update noar ti set v0='UP9EJTXA2RUMNTLGWJJBIZAPE8EFB1M24RNH7VSJZEP7KVSIN57ZOCF7M1ABVE3PNH2TBKFXS692O2GHD8487B9YSDOYM7SA0E4G3ZJYMYT9WPBFTVLJSVRQ719LK1SEAVAN45LLDAYDVY7C2N5ZS6BV1BHMK6B4V2BHWLTN6L23DGWX5911NMO6QJ137UCEX07SIRV5AE4ELP3N1845AS7317A9BWRBW7Q6S62HDY0E6AQWOPGJ2THQ25TSKRZTH' where id=82; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='8I1JP2U5WSOY3JKTQUNZ8KZZSFBMCLZDA04E89JQIZTERN1WC7URYB1RQXS6U6XP0T91G00MUWTUPS79T9ERCTSXBWAEF8E3NX0B00JQOX8C3VJOZRPKUP4MJZQSG5HI74BYRTVH7HDGZLA2YIVTX98BPI41RSPZJHCQT71RUCGRK0V49L0NYQ06N46LWMKED8T0VXJJE1UKTPJK2XSP6ASIQLDFZCBUTVBGC2APDFZJXA2C76WIRXLH6LZIWL04W' where id=82; -update noar ti set v1='8I1JP2U5WSOY3JKTQUNZ8KZZSFBMCLZDA04E89JQIZTERN1WC7URYB1RQXS6U6XP0T91G00MUWTUPS79T9ERCTSXBWAEF8E3NX0B00JQOX8C3VJOZRPKUP4MJZQSG5HI74BYRTVH7HDGZLA2YIVTX98BPI41RSPZJHCQT71RUCGRK0V49L0NYQ06N46LWMKED8T0VXJJE1UKTPJK2XSP6ASIQLDFZCBUTVBGC2APDFZJXA2C76WIRXLH6LZIWL04W' where id=82; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='VEG9CQ875N3X034OX28G53ALQQ77BQTPMA0E9KPD7QB7FW6AJF8PL3ER7KY3LLDKD1H9QG9ZASY5CTUKBNNRDL56HJA5M9SUJXB0492AUXQIKI3Z7R0M3TOITXCGDF88FR0IPVLD1UGQAOWLRCM7PNLFC1FG50QP0JWH0D3SW00YBJTTR9NIVH6WB1CXIL966LMNZDLNEMT8Q3USAM8DEOJ9CNYV4NS8NUTHSLRSE7F6NV5RS90IBKNUNFQ8RFWVJ' where id=82; -update noar ti set v2='VEG9CQ875N3X034OX28G53ALQQ77BQTPMA0E9KPD7QB7FW6AJF8PL3ER7KY3LLDKD1H9QG9ZASY5CTUKBNNRDL56HJA5M9SUJXB0492AUXQIKI3Z7R0M3TOITXCGDF88FR0IPVLD1UGQAOWLRCM7PNLFC1FG50QP0JWH0D3SW00YBJTTR9NIVH6WB1CXIL966LMNZDLNEMT8Q3USAM8DEOJ9CNYV4NS8NUTHSLRSE7F6NV5RS90IBKNUNFQ8RFWVJ' where id=82; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='Q6BBPII67U59R29LHW3X07M6J5Z9HEB1NE9W1CAHAVMLEAVU8F1DKKS7GDQ6RR9X9236IZDPS72ZCCUITUZG8562X9LEPSM6FAX550JOBVLW7M3U4MFDB34D17AHVCRY4WN7HUU683ENTM62KOSUQIWJ7T9UJKBRVOC00TQ30O1LWYH1J7M4VIEDOP69G39OAFWZ229ZR3GYBT71513R0KXH6SPK0LDNHPXPFXT1QH793FDL91GL7LBL2QWVPVADF' where id=82; -update noar ti set v3='Q6BBPII67U59R29LHW3X07M6J5Z9HEB1NE9W1CAHAVMLEAVU8F1DKKS7GDQ6RR9X9236IZDPS72ZCCUITUZG8562X9LEPSM6FAX550JOBVLW7M3U4MFDB34D17AHVCRY4WN7HUU683ENTM62KOSUQIWJ7T9UJKBRVOC00TQ30O1LWYH1J7M4VIEDOP69G39OAFWZ229ZR3GYBT71513R0KXH6SPK0LDNHPXPFXT1QH793FDL91GL7LBL2QWVPVADF' where id=82; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='4BF5NQRJBZRUFQGU0KQKLSB9JN7PKIJXZBKPJFQBYCTIGFFHEXPTGQOEE9ZL6ZEGXJ742W9YBJQV9ONKYTK0HSSC9KIQ97WLIEMR8FHDSCDFAVAN3WPS5JWSYWQ98LZWVTEAHDGPPVM8KKHG29IM5IVB69BFE60GEVL9X4MJ9NN95FLZPXFWS1NM9P3WI8PO6C7V0PAN5I91APZK3WD5WVWKGNILOUEDO49114CMUJUAA1MZ23AQ9HPUONB5YKJ55' where id=83; -update noar ti set v0='4BF5NQRJBZRUFQGU0KQKLSB9JN7PKIJXZBKPJFQBYCTIGFFHEXPTGQOEE9ZL6ZEGXJ742W9YBJQV9ONKYTK0HSSC9KIQ97WLIEMR8FHDSCDFAVAN3WPS5JWSYWQ98LZWVTEAHDGPPVM8KKHG29IM5IVB69BFE60GEVL9X4MJ9NN95FLZPXFWS1NM9P3WI8PO6C7V0PAN5I91APZK3WD5WVWKGNILOUEDO49114CMUJUAA1MZ23AQ9HPUONB5YKJ55' where id=83; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='THFMIDCUDV5NGX99QS0U603Q55ARNEFBSZOHS04KRWZ7TSFBN8Z8VXR3JRJE63V41JM6TTBX21UTHZ9OGOVPTWAPBS3N6T8LWV3ECEDL99WPD3JKN4TF0V7LTFWD1EI7U6EYP06WJ3RVQ9W682GE74Q8IHA0X1XWCZWL9PRYTBBW4KSII27KEYIJR8WO2XCWBNAH1CSEN4GGHVKDY1EYRX4MEXU3ZHPJV75RZ1Q3IM7GY8E2IKDDA6UXKCEKX4QYW' where id=83; -update noar ti set v1='THFMIDCUDV5NGX99QS0U603Q55ARNEFBSZOHS04KRWZ7TSFBN8Z8VXR3JRJE63V41JM6TTBX21UTHZ9OGOVPTWAPBS3N6T8LWV3ECEDL99WPD3JKN4TF0V7LTFWD1EI7U6EYP06WJ3RVQ9W682GE74Q8IHA0X1XWCZWL9PRYTBBW4KSII27KEYIJR8WO2XCWBNAH1CSEN4GGHVKDY1EYRX4MEXU3ZHPJV75RZ1Q3IM7GY8E2IKDDA6UXKCEKX4QYW' where id=83; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='3QR3DTO8RKAGDVM93NGA0VU4DOSF56HFZNU58QX9HNXV7IR8QCF450DEJ87YY90AJ9QWX90MW3TT1574VWC5I3SUW8STI5ML3U7YDM7XINLY2BA7RKOU855L8FKS9UNOP3DMK2NEW6TDHWF964KD1SDM4T3GPTMLUSQPIZ1LALA1BHHROJ54O4Z6G66HX262D7NAX557R8JJEZG4PWC7LRBJ570JHIAUWDXIJZUQXWHI9NT8YS67L0XRQ1HLWUWXQ' where id=83; -update noar ti set v2='3QR3DTO8RKAGDVM93NGA0VU4DOSF56HFZNU58QX9HNXV7IR8QCF450DEJ87YY90AJ9QWX90MW3TT1574VWC5I3SUW8STI5ML3U7YDM7XINLY2BA7RKOU855L8FKS9UNOP3DMK2NEW6TDHWF964KD1SDM4T3GPTMLUSQPIZ1LALA1BHHROJ54O4Z6G66HX262D7NAX557R8JJEZG4PWC7LRBJ570JHIAUWDXIJZUQXWHI9NT8YS67L0XRQ1HLWUWXQ' where id=83; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='KSKR8VYTUWUPYNBKQX9PGUMIHHIYVDM78LW3FVY7OU1L67RY4NX4XTFAXFSSEOD18N8UJKLQFUJOWIZBMLP6BKW5G31YXLG29XB2CCLBZM9Q8YX9608FKANW5H3O5JDBA3QRLST642CH2ET6IUKT34OHMEIOBUYNVFC5PX5GOZBE3Y132RU8DCE2J5OQDBCC0T2JKYI5GX9ULCV44W6XXBESZEL1Q6CIBGP7OSOO918F5LNI8KHB9PRIDTUY7TNFS' where id=83; -update noar ti set v3='KSKR8VYTUWUPYNBKQX9PGUMIHHIYVDM78LW3FVY7OU1L67RY4NX4XTFAXFSSEOD18N8UJKLQFUJOWIZBMLP6BKW5G31YXLG29XB2CCLBZM9Q8YX9608FKANW5H3O5JDBA3QRLST642CH2ET6IUKT34OHMEIOBUYNVFC5PX5GOZBE3Y132RU8DCE2J5OQDBCC0T2JKYI5GX9ULCV44W6XXBESZEL1Q6CIBGP7OSOO918F5LNI8KHB9PRIDTUY7TNFS' where id=83; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='WNHM4MPPUK2RXYH3ZNBO834CKO2WTCQ26NVK7C0UKM6NTIGLLTSZMC4Q3HE8HCYWZHX6413200LI0CQA7ZQHPNAICSE7ZV3Q9A9YN2HP9JWQX65JR49VONST7NRL19FET065KVE1GNCHTC05KBQVH1EC5V54XNJO4CIWEVB1GYK4AB3HDOE4ST2WTKJ2D66LTMLXD0NYKUFP2GLECZUGNP8HAE1HGQCRX5PDLM6273OV2OI23X7RGEUF2O1ELYDBB' where id=84; -update noar ti set v0='WNHM4MPPUK2RXYH3ZNBO834CKO2WTCQ26NVK7C0UKM6NTIGLLTSZMC4Q3HE8HCYWZHX6413200LI0CQA7ZQHPNAICSE7ZV3Q9A9YN2HP9JWQX65JR49VONST7NRL19FET065KVE1GNCHTC05KBQVH1EC5V54XNJO4CIWEVB1GYK4AB3HDOE4ST2WTKJ2D66LTMLXD0NYKUFP2GLECZUGNP8HAE1HGQCRX5PDLM6273OV2OI23X7RGEUF2O1ELYDBB' where id=84; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='SB6DQ3V0XT7SGQA5QHTTI4D59W2UXD9CDRE6W7658ZIBHW5FR4640L5XU7F1IG0IMF4X7FOT462GGJGKAHTHYPKA32V02585L3ATT4BC7FNV4IJERWS9LLNJKS6EEDJNMPRJNAGR6K10LRI7THSA1LAXTMN0UJ5KP1Q46HN4RU3I2W2DQC1GJK8G1HCVL1YB5BXFXP0MFFB66IR7TEMZ0WL6U2HNC6G6HNFROEHJPX86NEPZLUYD1H6DTIY8ZOCRS' where id=84; -update noar ti set v1='SB6DQ3V0XT7SGQA5QHTTI4D59W2UXD9CDRE6W7658ZIBHW5FR4640L5XU7F1IG0IMF4X7FOT462GGJGKAHTHYPKA32V02585L3ATT4BC7FNV4IJERWS9LLNJKS6EEDJNMPRJNAGR6K10LRI7THSA1LAXTMN0UJ5KP1Q46HN4RU3I2W2DQC1GJK8G1HCVL1YB5BXFXP0MFFB66IR7TEMZ0WL6U2HNC6G6HNFROEHJPX86NEPZLUYD1H6DTIY8ZOCRS' where id=84; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='0CNL8VKPUBNR52B4CXNPMCJRHBV67TMUL0VFNWB03FAX4C66AFGDX0ZV0E5KS0HEXZZ2NFJ5LRSVKSZ5VBQXRHH4GN28CPA33EM3NOWBHWC7G0QGS5YVO1N30Z73HZUY5MKTZZIHAW1QWNQ6U82CC2KMQT4VP1TUB2S1DXBJUZM9437P4RXXH7Z2IXLUOMNY1XFC8N9DNH5WL3VBEJKKU5I5RX93PQAC5UOJ2IOHGSQK135PCA0K97DSV4TP3WAD9' where id=84; -update noar ti set v2='0CNL8VKPUBNR52B4CXNPMCJRHBV67TMUL0VFNWB03FAX4C66AFGDX0ZV0E5KS0HEXZZ2NFJ5LRSVKSZ5VBQXRHH4GN28CPA33EM3NOWBHWC7G0QGS5YVO1N30Z73HZUY5MKTZZIHAW1QWNQ6U82CC2KMQT4VP1TUB2S1DXBJUZM9437P4RXXH7Z2IXLUOMNY1XFC8N9DNH5WL3VBEJKKU5I5RX93PQAC5UOJ2IOHGSQK135PCA0K97DSV4TP3WAD9' where id=84; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='LS6GP1ZTS75NT5ALHWGO0PLQZX28FEYFWXOKK6Q96NFMHQ7R5G32VOEQHK1UUMZJA8QOYQN16T01KJDN89FOCO78GFH8PTX23TJ8C2DK7LX4AQP5TKHZYDB04TGLPUHMVPY7G0F2U4B9N8PHRRRIMDDMRLQNDRDIE64J7S5GCSA0KIKLDBRVE2LFLJD0ASORZNWLBNG6FNDDWA4I7AFD26TWZ2K5E5SA8WX0RJSQXWWKSJXBC6WFUPX2TZXY5OKJU' where id=84; -update noar ti set v3='LS6GP1ZTS75NT5ALHWGO0PLQZX28FEYFWXOKK6Q96NFMHQ7R5G32VOEQHK1UUMZJA8QOYQN16T01KJDN89FOCO78GFH8PTX23TJ8C2DK7LX4AQP5TKHZYDB04TGLPUHMVPY7G0F2U4B9N8PHRRRIMDDMRLQNDRDIE64J7S5GCSA0KIKLDBRVE2LFLJD0ASORZNWLBNG6FNDDWA4I7AFD26TWZ2K5E5SA8WX0RJSQXWWKSJXBC6WFUPX2TZXY5OKJU' where id=84; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='Y3Q3BOUVLDLBVPY2DU3VL1Z1A1711HI0EX3AV1UQE54ODZS8DLPH9DSO1I4PBGO21VK6CG8CP1Y69CGMSL4P6LWFCEVWJJCHKMIH24FKO53KIQQMGKZUXN51ZLKVHS3OV8QE5468UMPOGFB1G0YLV2VVIYZP5J3TFYQV6WO198FLSBL9FR1A23LFP6DQIKN2DMCJ9DHRJ231F7K9CKKOUAVGN3EVKBHYIWPQU0RGNGLV0L63AX4Z7DEQ3NBXY4PVM' where id=85; -update noar ti set v0='Y3Q3BOUVLDLBVPY2DU3VL1Z1A1711HI0EX3AV1UQE54ODZS8DLPH9DSO1I4PBGO21VK6CG8CP1Y69CGMSL4P6LWFCEVWJJCHKMIH24FKO53KIQQMGKZUXN51ZLKVHS3OV8QE5468UMPOGFB1G0YLV2VVIYZP5J3TFYQV6WO198FLSBL9FR1A23LFP6DQIKN2DMCJ9DHRJ231F7K9CKKOUAVGN3EVKBHYIWPQU0RGNGLV0L63AX4Z7DEQ3NBXY4PVM' where id=85; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='HIBDYHGMHEOMDY98GA4K2P4GY5R9J98N9CQVLAQ0IKMZH0BCDHIO7LDVT6L2ZUSUL5MGRHD3DDQKWMNIK3WBUZSX144D557MVUM8QF0GUZ04J7O5CJQC9YSKRBEEYXI0R3WRRQRHQJEGR5HSGCGVH2FF3ASEVC5V68HE2E7K3UF4CJBG200XHJ36J00J4IW2GOQ7BUGM737NXXJWNR3PLJDAIH74DO1MDJWPA3JF30ZN6S27UJCTY178B2YN8PARM' where id=85; -update noar ti set v1='HIBDYHGMHEOMDY98GA4K2P4GY5R9J98N9CQVLAQ0IKMZH0BCDHIO7LDVT6L2ZUSUL5MGRHD3DDQKWMNIK3WBUZSX144D557MVUM8QF0GUZ04J7O5CJQC9YSKRBEEYXI0R3WRRQRHQJEGR5HSGCGVH2FF3ASEVC5V68HE2E7K3UF4CJBG200XHJ36J00J4IW2GOQ7BUGM737NXXJWNR3PLJDAIH74DO1MDJWPA3JF30ZN6S27UJCTY178B2YN8PARM' where id=85; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='HG6035JL1SVXPCC0Y5WIBIQO9Z0ZAG3O97ON5T1VS9U44CDNVPTYV5E48540C5Y55V26SNE1RT8L16QOOCSIGI32K1Z5JM6HV5N793PEMPQ9HP7XCXA140LZGV6THQ9BOIVFE351A5ZKW42R53V77WU0T2KQB80ZEH6FP5G6ZHB6269CCQSGX39TTKMANY19CBHVP3IBUIQRB5O1O1YM2W0NO18KJZRY1X8ZW98F48XLMVU1OTHLB9TY33JO2IBDS' where id=85; -update noar ti set v2='HG6035JL1SVXPCC0Y5WIBIQO9Z0ZAG3O97ON5T1VS9U44CDNVPTYV5E48540C5Y55V26SNE1RT8L16QOOCSIGI32K1Z5JM6HV5N793PEMPQ9HP7XCXA140LZGV6THQ9BOIVFE351A5ZKW42R53V77WU0T2KQB80ZEH6FP5G6ZHB6269CCQSGX39TTKMANY19CBHVP3IBUIQRB5O1O1YM2W0NO18KJZRY1X8ZW98F48XLMVU1OTHLB9TY33JO2IBDS' where id=85; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='TX7X75C978XFPVZK44W0ZE23IJQ9FHIRNA847XD1HE0NO7KS9BDUHB1ZL1LOM1ZF0ZDNV6YX4GWARKNOM34NYD1K950MXFE833UMMEQK9CH200OVCOZYNGIKWQ0S42K3VVJVM8H0OUKIJXXQXGYKYO69UFI5KXM5VP63MZR5122KKHPDAQRP72L1BIV2PBRR0G75DMH6M6NSHYA6SO4XTY8723YYH97S6D4PB4H1PKBHZCEODVZAG7KGIQASH2MCX' where id=85; -update noar ti set v3='TX7X75C978XFPVZK44W0ZE23IJQ9FHIRNA847XD1HE0NO7KS9BDUHB1ZL1LOM1ZF0ZDNV6YX4GWARKNOM34NYD1K950MXFE833UMMEQK9CH200OVCOZYNGIKWQ0S42K3VVJVM8H0OUKIJXXQXGYKYO69UFI5KXM5VP63MZR5122KKHPDAQRP72L1BIV2PBRR0G75DMH6M6NSHYA6SO4XTY8723YYH97S6D4PB4H1PKBHZCEODVZAG7KGIQASH2MCX' where id=85; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='TOI2L67GT79V7MD6EUQARQ6E6TSQLQSD2DV5VCPGKI7E51PRPR6J9EHQXWBZ6J01C6B5ITXP8UQCWMEPVW4QJ2LCZF2MQ0XHRZCQ8K24QPC8NGZKUWAW6M1KIA3NWO9BWXQYOMCAF6GSZIJ2BSKQI9GHULRM5SFP1TRIKMPRNMIZ0KKC95KI5MF33U4DNFPUX2VPK6ZO4XS711ILPRS5DBD4A81IAITZAFHXG71RAT5VQVSIT1M39OK645IUM34YN' where id=86; -update noar ti set v0='TOI2L67GT79V7MD6EUQARQ6E6TSQLQSD2DV5VCPGKI7E51PRPR6J9EHQXWBZ6J01C6B5ITXP8UQCWMEPVW4QJ2LCZF2MQ0XHRZCQ8K24QPC8NGZKUWAW6M1KIA3NWO9BWXQYOMCAF6GSZIJ2BSKQI9GHULRM5SFP1TRIKMPRNMIZ0KKC95KI5MF33U4DNFPUX2VPK6ZO4XS711ILPRS5DBD4A81IAITZAFHXG71RAT5VQVSIT1M39OK645IUM34YN' where id=86; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='V8MY7ZS5FSPCKIBBTUEYH34M801ZFUYETP6EN7AVXNMHZLFH15XJS1MMKDXQV44MKZVY5H0I968O7KXVQ8VHTFUK17L763099QTVE86QTP5OF5PZXIQJGH20DC6JPME7P2ELCLR7TO6HM5U9UMO9Z58B8FDYYAABBF1FLQOAXZ2JEAPLHN94G8WDIILHTFYKRA2OG9JFH6IOTSH82STSC3WGBZSG9RZMWSEP4XD8C7CT9PMDADVWAH2NZSOIA1KYU' where id=86; -update noar ti set v1='V8MY7ZS5FSPCKIBBTUEYH34M801ZFUYETP6EN7AVXNMHZLFH15XJS1MMKDXQV44MKZVY5H0I968O7KXVQ8VHTFUK17L763099QTVE86QTP5OF5PZXIQJGH20DC6JPME7P2ELCLR7TO6HM5U9UMO9Z58B8FDYYAABBF1FLQOAXZ2JEAPLHN94G8WDIILHTFYKRA2OG9JFH6IOTSH82STSC3WGBZSG9RZMWSEP4XD8C7CT9PMDADVWAH2NZSOIA1KYU' where id=86; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='OI6XGHID2H3682J24XGDFK6T75FV6RTXWRNED2OGGY28MFG0G7F083IQ429QFHIJKTUI83M8KCS40L60WD34BLHA47PWQ1N8OV13FS6QF46Y7SHR79WZ1X7GWY6LE1I5XN1CI5NHS9U5S2STN2XNCW77FIWYP476JCQBXA2GA24B1S6KSPXRBU7T0MDS9A0VI6T3X2NNV5F1UWHCEOLG39C2RYT2SAH22ZPYB9DWBVA9VZ9B46QHQAJM49Y9DEU5O' where id=86; -update noar ti set v2='OI6XGHID2H3682J24XGDFK6T75FV6RTXWRNED2OGGY28MFG0G7F083IQ429QFHIJKTUI83M8KCS40L60WD34BLHA47PWQ1N8OV13FS6QF46Y7SHR79WZ1X7GWY6LE1I5XN1CI5NHS9U5S2STN2XNCW77FIWYP476JCQBXA2GA24B1S6KSPXRBU7T0MDS9A0VI6T3X2NNV5F1UWHCEOLG39C2RYT2SAH22ZPYB9DWBVA9VZ9B46QHQAJM49Y9DEU5O' where id=86; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='5O3T1GMMV5WZKHLLE4D7WBIRA8IXU5G0GN59ZXVVHO1MZ1ZX0OV2WKF8T2WO0T0SLLSIICP45RWG5HQOEIYN1TPYUBDKMK27ZTCZ8RX2WSSSXVJ80DH81WDBO2561HLQFMDZVG0R8D0X9FRYMKOOP79HUWBTRNN1PIZ8JP34JLR4AHA7LD88L10I7Z4EXXQ1U809EARQMDPC5R6SGROBMETUDUROLF6D1FXL7DNS3RN3YUTRDAQ33IG4SBDSSW1BR' where id=86; -update noar ti set v3='5O3T1GMMV5WZKHLLE4D7WBIRA8IXU5G0GN59ZXVVHO1MZ1ZX0OV2WKF8T2WO0T0SLLSIICP45RWG5HQOEIYN1TPYUBDKMK27ZTCZ8RX2WSSSXVJ80DH81WDBO2561HLQFMDZVG0R8D0X9FRYMKOOP79HUWBTRNN1PIZ8JP34JLR4AHA7LD88L10I7Z4EXXQ1U809EARQMDPC5R6SGROBMETUDUROLF6D1FXL7DNS3RN3YUTRDAQ33IG4SBDSSW1BR' where id=86; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='RK9SI16NM1A7MCANVK3R9G8FYUMGM6KMXTSLPZU5B0H49HV21G3UU53B1528OL2J8HTMVUK8C9XUU0ZVGLH34KRITAN8WYR6TSHFNSK80PO23SHFIJN1MG71IIX081OWSL5K18E7V1D8MTUSWSI45AKQ5L7SWRZYAXF335JIZOD9FKRAX4CMUDDRFMLVYQYCGJ6J9AINQ3PK5BBBDBF7QH7HQ3MYDVM27K0G4MGAWSZT7E0NX9BDPHH7GJ8TISHFR' where id=87; -update noar ti set v0='RK9SI16NM1A7MCANVK3R9G8FYUMGM6KMXTSLPZU5B0H49HV21G3UU53B1528OL2J8HTMVUK8C9XUU0ZVGLH34KRITAN8WYR6TSHFNSK80PO23SHFIJN1MG71IIX081OWSL5K18E7V1D8MTUSWSI45AKQ5L7SWRZYAXF335JIZOD9FKRAX4CMUDDRFMLVYQYCGJ6J9AINQ3PK5BBBDBF7QH7HQ3MYDVM27K0G4MGAWSZT7E0NX9BDPHH7GJ8TISHFR' where id=87; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='TN96X4NAF2C5LBAMTZX2JD9FO5CP93EUH9USZH2EYSJG3A99UNMZCY3GOSDMEBYLFCGS6UIHQW71B315JRA6CY1H41ERF40Y2OEKH2WHJCUPACHYNE42KUGV00DPXD49COYTO5RN23SHAWSD1C66NCXAMIZARETT1SRRPHRRZX9KJ2EYB1AQCK11G7JGB49ENBBFL3Z0Q685MN1XWZZZRDI7WWYBU19PRNDDLECA6YTOCX3UHJW0EG58FPQ6LBVKD' where id=87; -update noar ti set v1='TN96X4NAF2C5LBAMTZX2JD9FO5CP93EUH9USZH2EYSJG3A99UNMZCY3GOSDMEBYLFCGS6UIHQW71B315JRA6CY1H41ERF40Y2OEKH2WHJCUPACHYNE42KUGV00DPXD49COYTO5RN23SHAWSD1C66NCXAMIZARETT1SRRPHRRZX9KJ2EYB1AQCK11G7JGB49ENBBFL3Z0Q685MN1XWZZZRDI7WWYBU19PRNDDLECA6YTOCX3UHJW0EG58FPQ6LBVKD' where id=87; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='T384QCH1DSJS1RRGH05VTWE6V6AL8UHQ2WNF6H9DFPM89DVGMAJKSG46W3DC27PH17YO7DXEF8D7L1AR6FS9F1EF2Y06M2BWGZS33XB5H2NG0GWGXZH2HUOEKLCTGNBG4QYKKX0OF0WDJWSIOQ5OFIGD2XWEGGNDIU056WCMUU7J5NT7TPATBZG96PG8XB39C7QE6XEDKXKMN6JGAWWDU9G96ZL5WZEX3EXJ8RCDLI9OYFCIFE2YAJB16J9HIVYIB' where id=87; -update noar ti set v2='T384QCH1DSJS1RRGH05VTWE6V6AL8UHQ2WNF6H9DFPM89DVGMAJKSG46W3DC27PH17YO7DXEF8D7L1AR6FS9F1EF2Y06M2BWGZS33XB5H2NG0GWGXZH2HUOEKLCTGNBG4QYKKX0OF0WDJWSIOQ5OFIGD2XWEGGNDIU056WCMUU7J5NT7TPATBZG96PG8XB39C7QE6XEDKXKMN6JGAWWDU9G96ZL5WZEX3EXJ8RCDLI9OYFCIFE2YAJB16J9HIVYIB' where id=87; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='34R1ZKMFJ8SX79GP3IALW65FZOXKUI1KQ2OL23AJJN0W2ND1OO55MKGL4T2FSQHI52QNX5YE79DU2F7LJX8RBS2OF6QYKG9JI59HVQOZEIDQKWMS7EVYJDWONOI7DJ20TNQK3BA1BLFUY45WHTJQ2BTIYSDZ168G0BSZJ4MFMNR5M8DQZJTW23HYCRKS76FWBRYZ0CAYQ9L8S6ZAWG1K0MYE1YHDFYF3YBCMIRCEVNMGBGZRM3ZU4G880PXYYW30V' where id=87; -update noar ti set v3='34R1ZKMFJ8SX79GP3IALW65FZOXKUI1KQ2OL23AJJN0W2ND1OO55MKGL4T2FSQHI52QNX5YE79DU2F7LJX8RBS2OF6QYKG9JI59HVQOZEIDQKWMS7EVYJDWONOI7DJ20TNQK3BA1BLFUY45WHTJQ2BTIYSDZ168G0BSZJ4MFMNR5M8DQZJTW23HYCRKS76FWBRYZ0CAYQ9L8S6ZAWG1K0MYE1YHDFYF3YBCMIRCEVNMGBGZRM3ZU4G880PXYYW30V' where id=87; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='DNVW1TBYCZQ3SL3XBDAH2PBKT2GT9HVF11P4N18WNEXIHO2OUCPQTI9D1Z2TKACRVOD8OMFK2PSIYA0D15YG29PNDPX1BJ9H7C447JQB0IYFUE9GJGGAYVUDDMTV75J5R1N3SXK69GTG07N4ESJ2YOSP5F69XKSJ3FBMF5D9NTU3HHDWIMEYIL17X0WSHYJFV3YXWOCWSF3E44MJ310M5EG4YHB86C3O92HS8LP6Z8IC9KOLSOA8QC5JPUSSGOPNH' where id=88; -update noar ti set v0='DNVW1TBYCZQ3SL3XBDAH2PBKT2GT9HVF11P4N18WNEXIHO2OUCPQTI9D1Z2TKACRVOD8OMFK2PSIYA0D15YG29PNDPX1BJ9H7C447JQB0IYFUE9GJGGAYVUDDMTV75J5R1N3SXK69GTG07N4ESJ2YOSP5F69XKSJ3FBMF5D9NTU3HHDWIMEYIL17X0WSHYJFV3YXWOCWSF3E44MJ310M5EG4YHB86C3O92HS8LP6Z8IC9KOLSOA8QC5JPUSSGOPNH' where id=88; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='GW13J18GQ36UC12VUK84ZG4YWTO84BNLSZYIODIQLK3F8JFJCPCQW5ZRZWZOA5Q1T0DBVGRZWHXSN5RZR02WGMGAVX6LCGNKMD1CKJVSKWBVVTZU1G984S44DWNN75D9EVQ5ZR3SCQK65270ZR7G83I3KOWQH0SJV18IKOA2CYDH7CTFO743W6O9W5A2H40DEUPVGB53VQ2D6YZQBS8S82P4G06VSANHDUXF0L5T9PJPB4TBM2TNJR1W6FWSSXZAT' where id=88; -update noar ti set v1='GW13J18GQ36UC12VUK84ZG4YWTO84BNLSZYIODIQLK3F8JFJCPCQW5ZRZWZOA5Q1T0DBVGRZWHXSN5RZR02WGMGAVX6LCGNKMD1CKJVSKWBVVTZU1G984S44DWNN75D9EVQ5ZR3SCQK65270ZR7G83I3KOWQH0SJV18IKOA2CYDH7CTFO743W6O9W5A2H40DEUPVGB53VQ2D6YZQBS8S82P4G06VSANHDUXF0L5T9PJPB4TBM2TNJR1W6FWSSXZAT' where id=88; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='SLLOG6Y0TRHMWJPJGW0L2FDLS2Q3G34KHNE8J449EDWWZ47C8S11YRHBX596S9ICBURRQWMRL7ATMNMYYXB0BH285X9X1668IW1O57SU4F0SH3S54SHDXWNPXEUGKQD3B77KJ0Y959U0J5R3OP0KSARQLN992RNYPEB0KFLF1ES11TO8CWB8N2GDMDYU2PXR950GFSBVDDC7JDBXEUK6E8OK18TZE45NPERBGE01LJZ9DBUF8X7DSTCF8800SJSK8' where id=88; -update noar ti set v2='SLLOG6Y0TRHMWJPJGW0L2FDLS2Q3G34KHNE8J449EDWWZ47C8S11YRHBX596S9ICBURRQWMRL7ATMNMYYXB0BH285X9X1668IW1O57SU4F0SH3S54SHDXWNPXEUGKQD3B77KJ0Y959U0J5R3OP0KSARQLN992RNYPEB0KFLF1ES11TO8CWB8N2GDMDYU2PXR950GFSBVDDC7JDBXEUK6E8OK18TZE45NPERBGE01LJZ9DBUF8X7DSTCF8800SJSK8' where id=88; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='8GBW401CC5Z6KC7IE4JOA48GDBLMJ9PY5HU3YD5DODCXQRSR2D58UQDFT7YLOS68YYPS3SCL3PORB5J194DJ9APTD8QWHU4KUOY9WRG200VZSXILE5TVKGCFOVYAOSTV7EP33L0XGR5BHMI0K80Y6UP7Q008MBWJHB7V0N10YIKAKABAO2S9O15VNOQYIZ599FUOG7EF0PCYLBMRPAZAR2CKQJXNU79QJA5XVN14KR5RP6GWN0G65BUEMR0BLKZHA' where id=88; -update noar ti set v3='8GBW401CC5Z6KC7IE4JOA48GDBLMJ9PY5HU3YD5DODCXQRSR2D58UQDFT7YLOS68YYPS3SCL3PORB5J194DJ9APTD8QWHU4KUOY9WRG200VZSXILE5TVKGCFOVYAOSTV7EP33L0XGR5BHMI0K80Y6UP7Q008MBWJHB7V0N10YIKAKABAO2S9O15VNOQYIZ599FUOG7EF0PCYLBMRPAZAR2CKQJXNU79QJA5XVN14KR5RP6GWN0G65BUEMR0BLKZHA' where id=88; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='FCRMBUNPXV0ZIOJJMOMTNE1QMTOUTP1AOPLK6LI5LU30190RB7KTZI19K51G3YRETK884VCNCO9QVLZZY5PUPE477R97K0RKIQL1QPDYIQPZCT6QRPOFGY4SQQLC1V8CQBKHVXJLMWUGGKMP8G7X92SISFO1CU8FZHFL015OV934K0KY7EZIE2NLES3JJX6CRLRAR9MGQPQLZYRZFG9H112GLGEANKI3U91MSJ2GKYSQ1NHODGODALC7E32AMKTZ1' where id=89; -update noar ti set v0='FCRMBUNPXV0ZIOJJMOMTNE1QMTOUTP1AOPLK6LI5LU30190RB7KTZI19K51G3YRETK884VCNCO9QVLZZY5PUPE477R97K0RKIQL1QPDYIQPZCT6QRPOFGY4SQQLC1V8CQBKHVXJLMWUGGKMP8G7X92SISFO1CU8FZHFL015OV934K0KY7EZIE2NLES3JJX6CRLRAR9MGQPQLZYRZFG9H112GLGEANKI3U91MSJ2GKYSQ1NHODGODALC7E32AMKTZ1' where id=89; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='6EQU2GAN65WL56K1TYSN7AFNU8K57HVH69I0Y3QT3GQH45WKSIP2BO09XH3WC5LTY1C4TAZME92F6VEM89INT48S3QGD6T2UT38XMYNPBI024UNZO36CS3ICGQY6TK9QZ285KD1908YPDDI1PIFN9OINOCU6UR021EGCXFOE0KD7FF4BWG6K9UMTRV47AL2B7SWZNQ8UYQ3NKOOEFPMDX08IFCXADPTY72O3CERKLI4KK6N9QL8VYLHUSJ6W27X0C' where id=89; -update noar ti set v1='6EQU2GAN65WL56K1TYSN7AFNU8K57HVH69I0Y3QT3GQH45WKSIP2BO09XH3WC5LTY1C4TAZME92F6VEM89INT48S3QGD6T2UT38XMYNPBI024UNZO36CS3ICGQY6TK9QZ285KD1908YPDDI1PIFN9OINOCU6UR021EGCXFOE0KD7FF4BWG6K9UMTRV47AL2B7SWZNQ8UYQ3NKOOEFPMDX08IFCXADPTY72O3CERKLI4KK6N9QL8VYLHUSJ6W27X0C' where id=89; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='8HX17TDB7IF28USMJSYVWPAA9AZPVRPKXJDV85TFUCDIEOYZJE40S4X4UMZGJEHGJEOO4A332NTFXGGCM09JD8Y32UIBGQ21O3097C2COQ3394DK9XLEY5R1RL453GFYTDSJH8BW5FKAQ8HJ3O7M6DHCK10IWF20OES5WNCTR08740BX4HQFIVYG3U6UAP6BMMTXAA7LPC6ODPJM22RZNEJ8BUX06QWISLQIXBDUEZIXNDXD3N5MLY1EYXPP3WJSO' where id=89; -update noar ti set v2='8HX17TDB7IF28USMJSYVWPAA9AZPVRPKXJDV85TFUCDIEOYZJE40S4X4UMZGJEHGJEOO4A332NTFXGGCM09JD8Y32UIBGQ21O3097C2COQ3394DK9XLEY5R1RL453GFYTDSJH8BW5FKAQ8HJ3O7M6DHCK10IWF20OES5WNCTR08740BX4HQFIVYG3U6UAP6BMMTXAA7LPC6ODPJM22RZNEJ8BUX06QWISLQIXBDUEZIXNDXD3N5MLY1EYXPP3WJSO' where id=89; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='CBRMEQSGVPKJX84L68LRNFB0JZJPHNF5LK23C8AEWQVCQZK5HZEVLRMIDN30PYWM2WACK8ACXR35ESB7CGJ5TLS6V4U237T9EYG9IAXDR457QY9NAK7MTE9ZJDCGMV4YPDSH6R76KAEV9O49FH07VW70BDYVRMQS98H7RKMXYOGK4RG3QEN4Z3JB84WEF7JQ9JZG4VAH2KQ895HHU1851NOS6B7KAAPGLWJCI6R5YG1PIHXT8AVW8RGNO9V7BVIYK' where id=89; -update noar ti set v3='CBRMEQSGVPKJX84L68LRNFB0JZJPHNF5LK23C8AEWQVCQZK5HZEVLRMIDN30PYWM2WACK8ACXR35ESB7CGJ5TLS6V4U237T9EYG9IAXDR457QY9NAK7MTE9ZJDCGMV4YPDSH6R76KAEV9O49FH07VW70BDYVRMQS98H7RKMXYOGK4RG3QEN4Z3JB84WEF7JQ9JZG4VAH2KQ895HHU1851NOS6B7KAAPGLWJCI6R5YG1PIHXT8AVW8RGNO9V7BVIYK' where id=89; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='QNA1QO5V7X15MRHFIWTPM54OOJTILBI5FY0WNWBWVOYJLUHVG8BZJZ6DBDVXEW909DLE8BGIB2VZ47M8NR5B73H6NSQQMUAAZF39SL8UXAQ3BES3JK4F9MJZ09KNF12QFTH4XJLDR1L1XJUTYLBQEMXSA11NYZB0K9BJG32NKIO8OFJQ4E5B9G8B17E25AMDTNL6ZLO0BBTL6HOBGRXFLM3UOP10QT99G5LC5NF8Y6G7CB6TFCT3YOYYANM45YAKT' where id=90; -update noar ti set v0='QNA1QO5V7X15MRHFIWTPM54OOJTILBI5FY0WNWBWVOYJLUHVG8BZJZ6DBDVXEW909DLE8BGIB2VZ47M8NR5B73H6NSQQMUAAZF39SL8UXAQ3BES3JK4F9MJZ09KNF12QFTH4XJLDR1L1XJUTYLBQEMXSA11NYZB0K9BJG32NKIO8OFJQ4E5B9G8B17E25AMDTNL6ZLO0BBTL6HOBGRXFLM3UOP10QT99G5LC5NF8Y6G7CB6TFCT3YOYYANM45YAKT' where id=90; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='1O65WKW4MGFDEV2DBWXLKK49LPHD7VOP0S8XDJYTQKBO7WM00AKDVTT8XT5631B6W1XI2KSAEFY0SX7O3DL3EN17OD574EB2RWYCERM0A9Z1AOW0WZBC2AODEXUKZG11IQHJG4IYDUP89GEFWKEDWRADKOA9XHMV37JTFS0V6461KNPFFIJOIXP8QM341KJ0QOVA80OGYFT1CEBQ08DUR2EN0BSJCGHWA3CKZ3IUGRD1E6VV17QUOMY80FPO67BZP' where id=90; -update noar ti set v1='1O65WKW4MGFDEV2DBWXLKK49LPHD7VOP0S8XDJYTQKBO7WM00AKDVTT8XT5631B6W1XI2KSAEFY0SX7O3DL3EN17OD574EB2RWYCERM0A9Z1AOW0WZBC2AODEXUKZG11IQHJG4IYDUP89GEFWKEDWRADKOA9XHMV37JTFS0V6461KNPFFIJOIXP8QM341KJ0QOVA80OGYFT1CEBQ08DUR2EN0BSJCGHWA3CKZ3IUGRD1E6VV17QUOMY80FPO67BZP' where id=90; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='65BYX268QR2EMW17UX9AHB021U6H3MPCB9QJXOSO774S92U28DTREPO0VKC6ROIFYJ10TYA6K75TPX2PMZ1YS90ZJM076CZE721GD63RZAKK3W8MKD1Q7AEEQDIEIABRDWTD1SZ7WLE4XT9C9Z93RIIZY95V3IEUB3T2R6JAC3F2D9ND4MM7NNNWK48XYOEI6PH99T3R3ZO31UA2S3A2LJ4CBA4KGB4JNANILIQIV8ID55VUVDEZ4V8YUD7XSJ2U5' where id=90; -update noar ti set v2='65BYX268QR2EMW17UX9AHB021U6H3MPCB9QJXOSO774S92U28DTREPO0VKC6ROIFYJ10TYA6K75TPX2PMZ1YS90ZJM076CZE721GD63RZAKK3W8MKD1Q7AEEQDIEIABRDWTD1SZ7WLE4XT9C9Z93RIIZY95V3IEUB3T2R6JAC3F2D9ND4MM7NNNWK48XYOEI6PH99T3R3ZO31UA2S3A2LJ4CBA4KGB4JNANILIQIV8ID55VUVDEZ4V8YUD7XSJ2U5' where id=90; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='F7WXSO2SLKFA4VR40QPR2YZ37UXZPGOMKSWGDLZCNOUIOQBOLDW5W0ZJPET3F5WLHT7LLZUJ0P4EOHESDFZ06ESFSYS0NHPO0XGS1N0LM5F9BVIKILIPGRNNWF9GFQQ0O6E7QW1CSWWYL0EKR4NI04VWUHM9OJ40YLWCU7WRW8Q35E1KWXT1MYAVCHBOHH01VZQORV1YIQ4IWMJFZC53KETY0OPLGRH3W398VMW02YLY0IQN6CDFSDASH1Q1B1ODI' where id=90; -update noar ti set v3='F7WXSO2SLKFA4VR40QPR2YZ37UXZPGOMKSWGDLZCNOUIOQBOLDW5W0ZJPET3F5WLHT7LLZUJ0P4EOHESDFZ06ESFSYS0NHPO0XGS1N0LM5F9BVIKILIPGRNNWF9GFQQ0O6E7QW1CSWWYL0EKR4NI04VWUHM9OJ40YLWCU7WRW8Q35E1KWXT1MYAVCHBOHH01VZQORV1YIQ4IWMJFZC53KETY0OPLGRH3W398VMW02YLY0IQN6CDFSDASH1Q1B1ODI' where id=90; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='BXN41P3XDML9LI2WGX6SEKTREEUJNC35ESVWNYC7KDI5VYTDS26N06JCUKZVEFEOZZMB6YHN590EZT2OUT11DU61HL2R4BGQSSE16GWP0VOBUGPGL1BEDOTUTM0IMSI40F5A0LAK5LZ7IQLLC79LG4XCRBO5G23SLT6P1KXD1KX61086ME55Z1ODH6T4VIM3IJEKXBB7JEI7UQ0FRHP9YCCBNZ40UUVW982ZVILNCFK1XBXCK5SXJDZB921KRQQMK' where id=91; -update noar ti set v0='BXN41P3XDML9LI2WGX6SEKTREEUJNC35ESVWNYC7KDI5VYTDS26N06JCUKZVEFEOZZMB6YHN590EZT2OUT11DU61HL2R4BGQSSE16GWP0VOBUGPGL1BEDOTUTM0IMSI40F5A0LAK5LZ7IQLLC79LG4XCRBO5G23SLT6P1KXD1KX61086ME55Z1ODH6T4VIM3IJEKXBB7JEI7UQ0FRHP9YCCBNZ40UUVW982ZVILNCFK1XBXCK5SXJDZB921KRQQMK' where id=91; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='0DJTGK5SQ2C28D1BRS9HVJM0M4SZ50LG6X8YOOC5GYAH2PQE6CWM74QNRVW2LBKF0C97R9WAMPNZCB9CM9MRVDOBVBZZE09OPIWOFARJ0SCX6F9EPJBJT7R8MWD17FB9LIPLBXADYPIVX7DKNJFVT4OE54BVLU3WIA35ODGXW2A9ZK6B6G83WS7LLRTCTGY0E3EYGMXL8LPKU5FPAUJO3MQ3LIPUPWPF66XZWFOF25GCRAN0DHTL2QEHG2C53UCY5' where id=91; -update noar ti set v1='0DJTGK5SQ2C28D1BRS9HVJM0M4SZ50LG6X8YOOC5GYAH2PQE6CWM74QNRVW2LBKF0C97R9WAMPNZCB9CM9MRVDOBVBZZE09OPIWOFARJ0SCX6F9EPJBJT7R8MWD17FB9LIPLBXADYPIVX7DKNJFVT4OE54BVLU3WIA35ODGXW2A9ZK6B6G83WS7LLRTCTGY0E3EYGMXL8LPKU5FPAUJO3MQ3LIPUPWPF66XZWFOF25GCRAN0DHTL2QEHG2C53UCY5' where id=91; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='F8I1Y2DS2GMRUL65S8BAZFCRBOWFU5U9X4C5NAD6TE0Z5OP536AWFCQ3HFLSXVIMGKRFWK4JYZWDMA60LP1FBHRXH1ZIW8HNY39U4XQGDNW95XXM6JL6F0TFFPEEIV0RPC8HOCSVPHCLOW5A144F48952XEEFEZ46AFAKHJGU71GVXVWLZ7KFX84HM6ANUSKF2AAQ6OK4Y8IZHFURJX5ZXC8PHOUU6XEKFHBIWDNK70X6HINH8TN4HFHIL6QN5KPI' where id=91; -update noar ti set v2='F8I1Y2DS2GMRUL65S8BAZFCRBOWFU5U9X4C5NAD6TE0Z5OP536AWFCQ3HFLSXVIMGKRFWK4JYZWDMA60LP1FBHRXH1ZIW8HNY39U4XQGDNW95XXM6JL6F0TFFPEEIV0RPC8HOCSVPHCLOW5A144F48952XEEFEZ46AFAKHJGU71GVXVWLZ7KFX84HM6ANUSKF2AAQ6OK4Y8IZHFURJX5ZXC8PHOUU6XEKFHBIWDNK70X6HINH8TN4HFHIL6QN5KPI' where id=91; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='07LV3REF60SP7BB98CU8BRJBQ25JIZLU3N8I2AZ9FFSGQ30KLL7SAKRXPAFPD8WCOWAA0TYIZZY5AW0FNIPK20O38ZT140QWG1DXMDBT34FIF6U9W0RN2OXGU9MV56PHM2PAG2X3OS5C7I2QEQBK4ORKIRWCEV40KJ14CENPXWKJ1E75LU7OYWHD584HTN537T7H0JDD83PD1Y3OYOO12LZ560PMDZ895PH1SUWELWAEZPO6QU9T6YDEGMKPHKATD' where id=91; -update noar ti set v3='07LV3REF60SP7BB98CU8BRJBQ25JIZLU3N8I2AZ9FFSGQ30KLL7SAKRXPAFPD8WCOWAA0TYIZZY5AW0FNIPK20O38ZT140QWG1DXMDBT34FIF6U9W0RN2OXGU9MV56PHM2PAG2X3OS5C7I2QEQBK4ORKIRWCEV40KJ14CENPXWKJ1E75LU7OYWHD584HTN537T7H0JDD83PD1Y3OYOO12LZ560PMDZ895PH1SUWELWAEZPO6QU9T6YDEGMKPHKATD' where id=91; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='H7VXGSD9HW21CEJZEQ0ZKAQCDS7DHN0W2G4R6SH8QCCB9S6NYXSDD5LV0G3GGT771ODS8M3A4QBBB6I2IOVIUDU66UJME4MH3YBNVXCE40ABPQLHTGYCKHGSTBCT9P48UFW9YDZYK5DBNLELLCASRUQXBQP3GWWWRNHTIHTCKVCXEDEFXNEY9KNMVEC08DH028T8HBFH1T7TF3AN21LC205WX344A9ZKPNRIUI18IG03VBWUUO2NMB2SHH99066IE' where id=92; -update noar ti set v0='H7VXGSD9HW21CEJZEQ0ZKAQCDS7DHN0W2G4R6SH8QCCB9S6NYXSDD5LV0G3GGT771ODS8M3A4QBBB6I2IOVIUDU66UJME4MH3YBNVXCE40ABPQLHTGYCKHGSTBCT9P48UFW9YDZYK5DBNLELLCASRUQXBQP3GWWWRNHTIHTCKVCXEDEFXNEY9KNMVEC08DH028T8HBFH1T7TF3AN21LC205WX344A9ZKPNRIUI18IG03VBWUUO2NMB2SHH99066IE' where id=92; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='2N6GCHM78TBIOTYBHCCFIK5XYNKK9VF149X3QNY6WNKUJR4BYLACQ3W6PRPDPXIAITO1SG245S6U0NII5UDL09PAI00QI0RS2LWLSA7BVNZW8K3OK87SCA4P41F7OJW85FBU4M1EM4JMWUXZULX2UDXKZ3TJDWE6XWAHH0V6SVYHAIA9N1NNDA8HIZ2Y6O6NEFD9CM9LGO7FYQEV12UMR1KD2XZFMLECCQHISM5ILMEGM9FIOMNPUAVD7GSOFPIDC' where id=92; -update noar ti set v1='2N6GCHM78TBIOTYBHCCFIK5XYNKK9VF149X3QNY6WNKUJR4BYLACQ3W6PRPDPXIAITO1SG245S6U0NII5UDL09PAI00QI0RS2LWLSA7BVNZW8K3OK87SCA4P41F7OJW85FBU4M1EM4JMWUXZULX2UDXKZ3TJDWE6XWAHH0V6SVYHAIA9N1NNDA8HIZ2Y6O6NEFD9CM9LGO7FYQEV12UMR1KD2XZFMLECCQHISM5ILMEGM9FIOMNPUAVD7GSOFPIDC' where id=92; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='G16HEGDGKKWUES48KP5L801HZCUEAXCXJL2BMISXVWNPEHU0JQHJEOSVACMAUBMSQ79WEU2PZ8JX92V0TU9078Y0MQTAD3J1MNOIOPR79PB08RM87H624K39SRQZWA2BITVAJ6NWOOG2RGVMJS4NHOU49YHNRCWCOYGA5YQ2ODWH3C6GJ10Y1G7Q8KDGSEEOLWMHQB3ULOBIANT2L205WTVJ3X1LCQL4DR99KTTFM4GT339FPROE2ED00B781TS3B' where id=92; -update noar ti set v2='G16HEGDGKKWUES48KP5L801HZCUEAXCXJL2BMISXVWNPEHU0JQHJEOSVACMAUBMSQ79WEU2PZ8JX92V0TU9078Y0MQTAD3J1MNOIOPR79PB08RM87H624K39SRQZWA2BITVAJ6NWOOG2RGVMJS4NHOU49YHNRCWCOYGA5YQ2ODWH3C6GJ10Y1G7Q8KDGSEEOLWMHQB3ULOBIANT2L205WTVJ3X1LCQL4DR99KTTFM4GT339FPROE2ED00B781TS3B' where id=92; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='LUISH4SMBA0GU26E7EF5Y20881057BZ283VUJWLUVQP3MCCUT3MPCUAT8A9JRYBBRG089V2NHO6QO69K4XO79JWJ72XKSXZWF79JLPEWIQ0HBJ5TEZ1YWGF8Y94Y1POPFGODNIAXHIEU46OXVBUMJDNRSRRT7BXU9NAAY3RWR904XELIR79XFF8NFTODWO3TSU4ZMS84AKULST7D9TGW6XFVA8HXM2PVAQHGWSHRLTVCS2GX8201YGG9HJJBYIVU2' where id=92; -update noar ti set v3='LUISH4SMBA0GU26E7EF5Y20881057BZ283VUJWLUVQP3MCCUT3MPCUAT8A9JRYBBRG089V2NHO6QO69K4XO79JWJ72XKSXZWF79JLPEWIQ0HBJ5TEZ1YWGF8Y94Y1POPFGODNIAXHIEU46OXVBUMJDNRSRRT7BXU9NAAY3RWR904XELIR79XFF8NFTODWO3TSU4ZMS84AKULST7D9TGW6XFVA8HXM2PVAQHGWSHRLTVCS2GX8201YGG9HJJBYIVU2' where id=92; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='6UM3F9UHKZ2ISW2FI8IPN1UCATLKVC6A1P6VJ39XLK8NZCF2RWCCOBH4VA4BTUR3LLNYTX6MJG5Z1TXIFP2KJQTPC4TJ2DPT67Q2FF6D7UVVMUUYESVEOJNA0TWCJOT8V2K0K575TXS3E1C4G199SXD0HD1MGJ253WZKPWNQLHQPCXRJDRF4AI1BW96Y9GVDKPNDNGNM2YYV8ASQPH78B8E6K5XGAXMMUDHA6CCSZUNDYMEPK8UGJXDUVG945DJUU' where id=93; -update noar ti set v0='6UM3F9UHKZ2ISW2FI8IPN1UCATLKVC6A1P6VJ39XLK8NZCF2RWCCOBH4VA4BTUR3LLNYTX6MJG5Z1TXIFP2KJQTPC4TJ2DPT67Q2FF6D7UVVMUUYESVEOJNA0TWCJOT8V2K0K575TXS3E1C4G199SXD0HD1MGJ253WZKPWNQLHQPCXRJDRF4AI1BW96Y9GVDKPNDNGNM2YYV8ASQPH78B8E6K5XGAXMMUDHA6CCSZUNDYMEPK8UGJXDUVG945DJUU' where id=93; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='YKWISDDQSSG39UNNF5QG83YL6DMBAHKQU8T0PL26YQZOXG9W88HDT3Y8KLT7DTE2L38PYB9WTVFDYTJIBPDHX6XGSXPIWJGTHE9V559KPQ3OE06IRVHHLZRFDO92THBD28WACKKVNZ3X4Y00QSPO346NFI0HOBW624AYXFLVFL884RBAEV0T59MSC0TRBB2EJQAKMDMIUNJB93UY6OXVE0TL98SKMUT7AVYSZ49ONUR9CLJ1MY05AH3QMTBTSCG0A' where id=93; -update noar ti set v1='YKWISDDQSSG39UNNF5QG83YL6DMBAHKQU8T0PL26YQZOXG9W88HDT3Y8KLT7DTE2L38PYB9WTVFDYTJIBPDHX6XGSXPIWJGTHE9V559KPQ3OE06IRVHHLZRFDO92THBD28WACKKVNZ3X4Y00QSPO346NFI0HOBW624AYXFLVFL884RBAEV0T59MSC0TRBB2EJQAKMDMIUNJB93UY6OXVE0TL98SKMUT7AVYSZ49ONUR9CLJ1MY05AH3QMTBTSCG0A' where id=93; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='N6G5M55YHRV5QNDIY7ZFPZIKZ7TFVFI6Z3XKQLIJO2HKLZHCHX9G2CIH36W914OKMBD836RBCIVUJVZWVACMQODIIIWQQ906J52X05BH83DI75YTYPST28HHEP748FPM8OATD5T9F1BR0A62MA4F1OCON588906QQD9NSJFUFUI90BYEWZLYJZ49LVUMSXKQDIGEK303GQS6L4QILZKIC46MW0GNXSH4T8ZCRKMPWUDGFK55RC49BT6UPDVJK0NM8' where id=93; -update noar ti set v2='N6G5M55YHRV5QNDIY7ZFPZIKZ7TFVFI6Z3XKQLIJO2HKLZHCHX9G2CIH36W914OKMBD836RBCIVUJVZWVACMQODIIIWQQ906J52X05BH83DI75YTYPST28HHEP748FPM8OATD5T9F1BR0A62MA4F1OCON588906QQD9NSJFUFUI90BYEWZLYJZ49LVUMSXKQDIGEK303GQS6L4QILZKIC46MW0GNXSH4T8ZCRKMPWUDGFK55RC49BT6UPDVJK0NM8' where id=93; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='J9S8RYACHQS0ADM472FULUJXP503SSWYBZXY5K5DRPUOLAY1FPK0FT04IL4TFTBTLGX4VAB1EO8ZUC9U0HUABJZOEQO85GPSQ8S4O5P7YK8Q4K7QPV3HZU0IA8J9F88CBG1Y6XXC4VQAZA3CGSFO491GH47YQ8R6Z0F67MPGUAL7Z76IF2E4YBR1E0L018VBICHAF24JQEX03C9A6UHNFW45A0XP9W6GOOTF0CEF5Z6BJBK0VSZG4FIJ2BRCAKAIQ' where id=93; -update noar ti set v3='J9S8RYACHQS0ADM472FULUJXP503SSWYBZXY5K5DRPUOLAY1FPK0FT04IL4TFTBTLGX4VAB1EO8ZUC9U0HUABJZOEQO85GPSQ8S4O5P7YK8Q4K7QPV3HZU0IA8J9F88CBG1Y6XXC4VQAZA3CGSFO491GH47YQ8R6Z0F67MPGUAL7Z76IF2E4YBR1E0L018VBICHAF24JQEX03C9A6UHNFW45A0XP9W6GOOTF0CEF5Z6BJBK0VSZG4FIJ2BRCAKAIQ' where id=93; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='EM1A2R5V41XC5VG64YL53YNWNO51KR6QDFUJ3UKIYHLJUNTBLDO4VOG57KJOTC86GLLWXWN0N72CQ4CZYYKNAYKG8CAGHPW1QIIFJ2F4IBYQO7O7C6LWEM1BJM0W89K55HPPUNB2V119E0LN0QP5ICRCF9YQ239HLOEE3XE8H6W0S63RPOQ6RBTX8H5IWPT4PWX1L9EEDPRB8819EX12GH05AQZLDUZ0Z0IRGOE4XCCRE5KM311EN5Z6W3JCGDKDQ' where id=94; -update noar ti set v0='EM1A2R5V41XC5VG64YL53YNWNO51KR6QDFUJ3UKIYHLJUNTBLDO4VOG57KJOTC86GLLWXWN0N72CQ4CZYYKNAYKG8CAGHPW1QIIFJ2F4IBYQO7O7C6LWEM1BJM0W89K55HPPUNB2V119E0LN0QP5ICRCF9YQ239HLOEE3XE8H6W0S63RPOQ6RBTX8H5IWPT4PWX1L9EEDPRB8819EX12GH05AQZLDUZ0Z0IRGOE4XCCRE5KM311EN5Z6W3JCGDKDQ' where id=94; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='L9285JDY5DEB8H70RKSOD83JCPQUWT53CZRDGNN1R9ZRC35X0TBD4891YTTT2D559HOXMMVK4A6U2NRUXS3HJMQCZLWT7WS8XB45UW60W42PWUPULIFE3G1H5B2DD3FUW9YCS56KF4OBHTXWOD9F93GTOE5185M4IVS9FNTX75UZ1WYDSRR8GE41R1VKLGTV0M8SNLCOJEEZT191YRIA71F1CG4EBDG3ZN1QCZ7O2HSQ35GEKBHTSNWW8FG0QW0MP' where id=94; -update noar ti set v1='L9285JDY5DEB8H70RKSOD83JCPQUWT53CZRDGNN1R9ZRC35X0TBD4891YTTT2D559HOXMMVK4A6U2NRUXS3HJMQCZLWT7WS8XB45UW60W42PWUPULIFE3G1H5B2DD3FUW9YCS56KF4OBHTXWOD9F93GTOE5185M4IVS9FNTX75UZ1WYDSRR8GE41R1VKLGTV0M8SNLCOJEEZT191YRIA71F1CG4EBDG3ZN1QCZ7O2HSQ35GEKBHTSNWW8FG0QW0MP' where id=94; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='F842MVCK5O8AOUPAR46T9N3CEHMQ13UQ8O0IN85DDVFPXA2I8Q5AQPANL8W707TTT43IG61TWRG691QPFNZXPYKH197MVWJYQ57RD4DZ95P6XEQB5KA1P7NON14H5D44WVRSVKYIGVRI28EXMEZKYNEBYH6LX8OIBOJ4YXLO06JZ9K65B7CKO64L7XXAGL6HLES0DOGOLXV5QKA8MUFJHM091ETPZUZ18MN0JLSQ0LFAZNM80CB5ZCBWSJVM4Q4DE' where id=94; -update noar ti set v2='F842MVCK5O8AOUPAR46T9N3CEHMQ13UQ8O0IN85DDVFPXA2I8Q5AQPANL8W707TTT43IG61TWRG691QPFNZXPYKH197MVWJYQ57RD4DZ95P6XEQB5KA1P7NON14H5D44WVRSVKYIGVRI28EXMEZKYNEBYH6LX8OIBOJ4YXLO06JZ9K65B7CKO64L7XXAGL6HLES0DOGOLXV5QKA8MUFJHM091ETPZUZ18MN0JLSQ0LFAZNM80CB5ZCBWSJVM4Q4DE' where id=94; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='QICNQOQ99XPHAVUQG48270CPQ4D75H315M4HZI66FFPUF4PL08FHH58CA6MK8H8Z74ASTHEIUXBS580BYVBEC8MFDH6WH8HOODJUMRQA1JA7GTJ61KAM2CEGHF9VNCNZ90PGJ2A3C3MPUVYDMGKMFAVJ87WXK21WU49KM7PTBMSF7EG60TBO2VRWA2KB9A7E3ZUH9Y53AW0N4JBN19ZCHUM1NRAEIPH0SZKCPO22EH56QDQ3OG1QUPZ63U1M2MJPU' where id=94; -update noar ti set v3='QICNQOQ99XPHAVUQG48270CPQ4D75H315M4HZI66FFPUF4PL08FHH58CA6MK8H8Z74ASTHEIUXBS580BYVBEC8MFDH6WH8HOODJUMRQA1JA7GTJ61KAM2CEGHF9VNCNZ90PGJ2A3C3MPUVYDMGKMFAVJ87WXK21WU49KM7PTBMSF7EG60TBO2VRWA2KB9A7E3ZUH9Y53AW0N4JBN19ZCHUM1NRAEIPH0SZKCPO22EH56QDQ3OG1QUPZ63U1M2MJPU' where id=94; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='9NBLHVQLDNQ58F9OZYQZZTUACHVCAMHNEXEAP7NOQ2T4U0HFQDPZ4BISMVIASTZZ05B23MB87WEBPHD44RKLV7RY6WGRE35U77HEM1I8FF22AE4915ACNLA27ICTZA7OI6H530Z5EU0AMFKGQJXIGYV1JA0IC7O7KINMXDTXYA7G83SPNAQPFB8WN0HN1704DRRFZ1KEW5RB68G9X100OY8SZ9CFN3B10JTCSMD2JJB27U2FO5AEB4TU9XWVK84DM' where id=95; -update noar ti set v0='9NBLHVQLDNQ58F9OZYQZZTUACHVCAMHNEXEAP7NOQ2T4U0HFQDPZ4BISMVIASTZZ05B23MB87WEBPHD44RKLV7RY6WGRE35U77HEM1I8FF22AE4915ACNLA27ICTZA7OI6H530Z5EU0AMFKGQJXIGYV1JA0IC7O7KINMXDTXYA7G83SPNAQPFB8WN0HN1704DRRFZ1KEW5RB68G9X100OY8SZ9CFN3B10JTCSMD2JJB27U2FO5AEB4TU9XWVK84DM' where id=95; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='7L00YVBJPY9IW9O7HBYHE7WBV2FO3JQDPZWU1M4V8XQIPH9DACJL3T4I9I19NSIE0RIPBVD11AH7BI366XHDF3930OHLV3ID9ST0GW1PWMR9EPF9RGCLQ6I9YLID6EGNP3ZT25FK9U4195J0F8TWZH88F3K39AKNV1BY0N6BYC2I55EUW3970MR06I0YL40KAGKZY50S3WFOGAK9ST7FC8WQDRUSO6V7DIPO7612R16NKS46Z30FBWC7G331Z6O70' where id=95; -update noar ti set v1='7L00YVBJPY9IW9O7HBYHE7WBV2FO3JQDPZWU1M4V8XQIPH9DACJL3T4I9I19NSIE0RIPBVD11AH7BI366XHDF3930OHLV3ID9ST0GW1PWMR9EPF9RGCLQ6I9YLID6EGNP3ZT25FK9U4195J0F8TWZH88F3K39AKNV1BY0N6BYC2I55EUW3970MR06I0YL40KAGKZY50S3WFOGAK9ST7FC8WQDRUSO6V7DIPO7612R16NKS46Z30FBWC7G331Z6O70' where id=95; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='OFUU24WX9EHGQZ1N5TXO5UTFNSKI6E4IMUTUVAAWTLEHBDLDRT0AUOGTYHWUD3RSS7XB960DTMJVOJ7TBOP9LMDJL4I70JF64QYLTPDBI9YSQ7V24PF5WYUOB3ZB8Z32NFNO12JHD8CT16LA09E12NMCK1YPETDW2JIHHAI5984I9YY5DX5TKGWRN67G0RZT13HPMEX910PYZ97DRX7GK7Z58Y908MCH9I6C2W7B5TGH6ZLX72K3ZIV7UTZRXRE8V' where id=95; -update noar ti set v2='OFUU24WX9EHGQZ1N5TXO5UTFNSKI6E4IMUTUVAAWTLEHBDLDRT0AUOGTYHWUD3RSS7XB960DTMJVOJ7TBOP9LMDJL4I70JF64QYLTPDBI9YSQ7V24PF5WYUOB3ZB8Z32NFNO12JHD8CT16LA09E12NMCK1YPETDW2JIHHAI5984I9YY5DX5TKGWRN67G0RZT13HPMEX910PYZ97DRX7GK7Z58Y908MCH9I6C2W7B5TGH6ZLX72K3ZIV7UTZRXRE8V' where id=95; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='K2YW1ZKUH39WHDUCHRRODIMWZ2BT8FDBKQJ5F7SJXMJX144OQTDLEWHGXDDWY3RLV5PQGV9LTDFTAKOHP8O9NGUN89HW9R1MANZJGVNX6DBAMZOP4LF66C1OLVDY9EF08Q6JO1O78P4RFM5Z4M0BUUO5EZHM8NSEXGHF76QQSO8UN2IBYFZL6EGEUTFJCR0G360YR4N94YZ5KN03XAJVK9ODQ7JD7ZCTOV9AV9S0DHLHT2O5NH49C74MS9Q7WE06G' where id=95; -update noar ti set v3='K2YW1ZKUH39WHDUCHRRODIMWZ2BT8FDBKQJ5F7SJXMJX144OQTDLEWHGXDDWY3RLV5PQGV9LTDFTAKOHP8O9NGUN89HW9R1MANZJGVNX6DBAMZOP4LF66C1OLVDY9EF08Q6JO1O78P4RFM5Z4M0BUUO5EZHM8NSEXGHF76QQSO8UN2IBYFZL6EGEUTFJCR0G360YR4N94YZ5KN03XAJVK9ODQ7JD7ZCTOV9AV9S0DHLHT2O5NH49C74MS9Q7WE06G' where id=95; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='23PRE68SZL8CB8MDQ9RCHIWLP7QLE6A89FWVUBVTNDLFM8D1IXJ3NIXPOGLH65FJERVAW9720ALGSBNYL04IB6HPBEOK7B2IAKBKYOZ9QWYM8GCJAAGGVZ9UCJQM978BTHC4LVW40LCCG4KZP6DSMCAUE8SMAGML6JO66FXAUTN5W4S4E1037W59EIL2W3VV56N3VG7DO6TYUTB9UPV4KNLCVU7FUHMMXPES69RWVD2JEJPFU8WWRT4R27PAWGD87' where id=96; -update noar ti set v0='23PRE68SZL8CB8MDQ9RCHIWLP7QLE6A89FWVUBVTNDLFM8D1IXJ3NIXPOGLH65FJERVAW9720ALGSBNYL04IB6HPBEOK7B2IAKBKYOZ9QWYM8GCJAAGGVZ9UCJQM978BTHC4LVW40LCCG4KZP6DSMCAUE8SMAGML6JO66FXAUTN5W4S4E1037W59EIL2W3VV56N3VG7DO6TYUTB9UPV4KNLCVU7FUHMMXPES69RWVD2JEJPFU8WWRT4R27PAWGD87' where id=96; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='2EGQV6UVS25FQ05O6WOOW66G9DX1WHDP90DBIY0YFHJ0M8D3RTZ628VEYMLY69XVMWZVRCJLJX0TKEV2DK20QNNHU694GCRJ7VJM4W527G1K1HYGSXXEDIYB6UA02BR77KITUXYBOEKDKS9OB9DPFEYGAO17PZZKJF2KYBCMO5I82Q8W6PWXQ7CBEKN0QTTTM9W6AF35XXZYORM1EUHQZSRG9RG1VV7YVR3JF4TI4RQL3878114JV8YJIOUF08FHO' where id=96; -update noar ti set v1='2EGQV6UVS25FQ05O6WOOW66G9DX1WHDP90DBIY0YFHJ0M8D3RTZ628VEYMLY69XVMWZVRCJLJX0TKEV2DK20QNNHU694GCRJ7VJM4W527G1K1HYGSXXEDIYB6UA02BR77KITUXYBOEKDKS9OB9DPFEYGAO17PZZKJF2KYBCMO5I82Q8W6PWXQ7CBEKN0QTTTM9W6AF35XXZYORM1EUHQZSRG9RG1VV7YVR3JF4TI4RQL3878114JV8YJIOUF08FHO' where id=96; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='8KCXVTPSXDWRKGYPOGVBWZW8XAZWQEHTAIYIBH6DBRYR61F7MCGMAM91GFM3JXUXNJZ3TA5BUCD4B6ZYYAGYEUZKA0XF8ANXZG2Z0NFDIVJSPLGDI2Z5PI5WW64DQZX0X8EG7B0LEVWVAUNZ0VRE8E5VJMTWTWNLDEA8MX13I2ZP4STC2V362YKHHUO85SSL3GUQELA4KA89FEUODU4Q5WS7GGGAM1YGKIOH0GLWOL11Q6S5Z9G3CGPEJO5Z6RSGY' where id=96; -update noar ti set v2='8KCXVTPSXDWRKGYPOGVBWZW8XAZWQEHTAIYIBH6DBRYR61F7MCGMAM91GFM3JXUXNJZ3TA5BUCD4B6ZYYAGYEUZKA0XF8ANXZG2Z0NFDIVJSPLGDI2Z5PI5WW64DQZX0X8EG7B0LEVWVAUNZ0VRE8E5VJMTWTWNLDEA8MX13I2ZP4STC2V362YKHHUO85SSL3GUQELA4KA89FEUODU4Q5WS7GGGAM1YGKIOH0GLWOL11Q6S5Z9G3CGPEJO5Z6RSGY' where id=96; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='OJ3S0HG0LPIMW4216CVP7Q33BT8Q0P88XPL1447M5YS59R64122ONV1N0EV3RPVKNIWC4NHTO1QL3O42Z6O0T86Q5HY2QG7ZKG5CFIRR289ULWVNBGUJYUZRE2YIHKQ9JPG5LTXRFQIVO3X96KOIW0K56VH3VKVO4MFQVIT5J68U58DHKKO4E6CRSIFU2EKZUQMTID93QCL26G3RYOC4SMDIWNSPV0I3FSV0NH8ZTT5HLHOV08YW63OWG29CI82GB' where id=96; -update noar ti set v3='OJ3S0HG0LPIMW4216CVP7Q33BT8Q0P88XPL1447M5YS59R64122ONV1N0EV3RPVKNIWC4NHTO1QL3O42Z6O0T86Q5HY2QG7ZKG5CFIRR289ULWVNBGUJYUZRE2YIHKQ9JPG5LTXRFQIVO3X96KOIW0K56VH3VKVO4MFQVIT5J68U58DHKKO4E6CRSIFU2EKZUQMTID93QCL26G3RYOC4SMDIWNSPV0I3FSV0NH8ZTT5HLHOV08YW63OWG29CI82GB' where id=96; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='OQ7GNF5TEE5DETEWY4YXA40M4HYDVPFH25YBKSXT21CN2CIHCP6KZU4A0TX4DPGTK6CP8ZE9JONP92LCD0IM3FVZ1HR0YG2XHRZMCBBBDSSVIP144XTQ164BCOYMPGKW4NNO4H0PH90IESD6DZMO71355J1B4E9LKO5K2TY9CMA8X8DH9YANVBZWTW0EC52SZGHN9X8O5NL85T5ITK33Y1GDBMYAZ2ZWQXB88XV0HIKR6QWB6PHAHF26ZEJF2DIXI' where id=97; -update noar ti set v0='OQ7GNF5TEE5DETEWY4YXA40M4HYDVPFH25YBKSXT21CN2CIHCP6KZU4A0TX4DPGTK6CP8ZE9JONP92LCD0IM3FVZ1HR0YG2XHRZMCBBBDSSVIP144XTQ164BCOYMPGKW4NNO4H0PH90IESD6DZMO71355J1B4E9LKO5K2TY9CMA8X8DH9YANVBZWTW0EC52SZGHN9X8O5NL85T5ITK33Y1GDBMYAZ2ZWQXB88XV0HIKR6QWB6PHAHF26ZEJF2DIXI' where id=97; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='SM1L8UU5DQY1A9M8V0Q49K7JKHILKLGOQPCNLMG221GEVGZ07TUPFDAZLZ3EUOGFDGW3RKW2X608IY9AWEGFMKMUGMN9KYW4PVHOS2I136RU53LWWISOJLABZWTAB19P66VODRM4USHX4FFBRFTXNK19SD4A9CIAIFRLTGLMJ958P14ZF1TAOFD6JFO70SB9CN8XTV2H43NW0JJ07T0AG7IGO8QX948W5AHBNNDM4HB8UQ982G9MIWNROM56CKD7F' where id=97; -update noar ti set v1='SM1L8UU5DQY1A9M8V0Q49K7JKHILKLGOQPCNLMG221GEVGZ07TUPFDAZLZ3EUOGFDGW3RKW2X608IY9AWEGFMKMUGMN9KYW4PVHOS2I136RU53LWWISOJLABZWTAB19P66VODRM4USHX4FFBRFTXNK19SD4A9CIAIFRLTGLMJ958P14ZF1TAOFD6JFO70SB9CN8XTV2H43NW0JJ07T0AG7IGO8QX948W5AHBNNDM4HB8UQ982G9MIWNROM56CKD7F' where id=97; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='7TXWVN1C04LBHE1JO7GZ2BNISUMCBQCL1CUIW5AQIIZZSLWSRNF4GZGZAGCQICI1Y9A58ZV59XGTRFEQTXSD66AWD8S0Y80ME0QV1WH4F1ZBZ3SBKKCVPW32CJCYDII3HCFVA2GDUJG670UVLT2BO9V0PD77GP5XIF28DP7NDRMJ53DY1F0ZF09CIJ2VLK71EFJHX0OWEOZ4LZJGG2KLSAD9TMCKBNT08Z4E7XBHG6784M5GF5KIBCYGC29REUUR8' where id=97; -update noar ti set v2='7TXWVN1C04LBHE1JO7GZ2BNISUMCBQCL1CUIW5AQIIZZSLWSRNF4GZGZAGCQICI1Y9A58ZV59XGTRFEQTXSD66AWD8S0Y80ME0QV1WH4F1ZBZ3SBKKCVPW32CJCYDII3HCFVA2GDUJG670UVLT2BO9V0PD77GP5XIF28DP7NDRMJ53DY1F0ZF09CIJ2VLK71EFJHX0OWEOZ4LZJGG2KLSAD9TMCKBNT08Z4E7XBHG6784M5GF5KIBCYGC29REUUR8' where id=97; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='3C5FU7HS2ALTSJ7X424SMIJQ4LMQKMHLJAU37JTMAARV587HDPTEA7J9ONL5G3MFWIC966KWYRXT53XLNKZ7CBLLKNU75VB74INOY7UNUNVWGQHVDGP72PF4ZBIDACTTB1MZX6UIFGI5DCCE6PYKYUHC3DSILGY2DWWMOOELH6JMEA9TZ8O99BXGOZ68IOM6P6TCO0YM5N9E6UWYJO8QEI467AHGHNOY7LKEO3NTLMXKK32OE6809XYLHW37END3L' where id=97; -update noar ti set v3='3C5FU7HS2ALTSJ7X424SMIJQ4LMQKMHLJAU37JTMAARV587HDPTEA7J9ONL5G3MFWIC966KWYRXT53XLNKZ7CBLLKNU75VB74INOY7UNUNVWGQHVDGP72PF4ZBIDACTTB1MZX6UIFGI5DCCE6PYKYUHC3DSILGY2DWWMOOELH6JMEA9TZ8O99BXGOZ68IOM6P6TCO0YM5N9E6UWYJO8QEI467AHGHNOY7LKEO3NTLMXKK32OE6809XYLHW37END3L' where id=97; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='O6TA79MCZWQ2NZNDDC2MSMS9G9OG8AC9WX4RL4DG9KBF0Y16571L2K0E25FA2UJHLK2F3I9TI7OB3H9UTZ4LL9A5SXA24RRUPLTBP4X9QETNJJ6BY52RZIKQHGHQC8BBCK6ZF08CKMPDBIBYND4T7MG569Y52MACO4VJJFFDZD2KE2Y8G6MJKAKMIFB9LMSGPTYAW0BDXRL50EQJUCQBT0U0TDQIONFII9BIBP4NIBPM5TAXIXJYWYQL7IB1S5FU3' where id=98; -update noar ti set v0='O6TA79MCZWQ2NZNDDC2MSMS9G9OG8AC9WX4RL4DG9KBF0Y16571L2K0E25FA2UJHLK2F3I9TI7OB3H9UTZ4LL9A5SXA24RRUPLTBP4X9QETNJJ6BY52RZIKQHGHQC8BBCK6ZF08CKMPDBIBYND4T7MG569Y52MACO4VJJFFDZD2KE2Y8G6MJKAKMIFB9LMSGPTYAW0BDXRL50EQJUCQBT0U0TDQIONFII9BIBP4NIBPM5TAXIXJYWYQL7IB1S5FU3' where id=98; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='UX8STJROHRKWVBKFCNB49AICJCPKRTRU3V29ILHOAOPVKNLFF58GJLIWQZMZH2RXZLOEUKVXFYXSIBY8KEAFNLEIL60VW9Z1ZJ78PU83OVAV8NQ2UE6GCUEGMULEW5X59DBVI1CT1TNPQLOKGY7MUQBEZ758MI54A4QPMC1QQLP7RG9D62G6PAWKJXHYQ3YJEIFLMW0P1AS25I5E9KDD7CGYCOVWNT9A6T60F9I0KOAZ91C1ZZIK5U6VZSURG2M0V' where id=98; -update noar ti set v1='UX8STJROHRKWVBKFCNB49AICJCPKRTRU3V29ILHOAOPVKNLFF58GJLIWQZMZH2RXZLOEUKVXFYXSIBY8KEAFNLEIL60VW9Z1ZJ78PU83OVAV8NQ2UE6GCUEGMULEW5X59DBVI1CT1TNPQLOKGY7MUQBEZ758MI54A4QPMC1QQLP7RG9D62G6PAWKJXHYQ3YJEIFLMW0P1AS25I5E9KDD7CGYCOVWNT9A6T60F9I0KOAZ91C1ZZIK5U6VZSURG2M0V' where id=98; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='MU30X8COOAX3ZGOKXZ4GUWJU5U23LDGFEU2DIGPQX64OADO8NB6G2S0ZA1YUZHK2KUNWZKPB7HKAA6439XWPIUU6POXET1IHSP0O5F5K59AFF00CCA8FIDYLIWFW6XNZHMPCZIHSI5NMZ9ODACTSXM8R6VLF1ZEMLVP45S3874W2IUBY6AUL2CEAEODBAB32JZUE2GZYRATN651OMUQZ8438D0AACQ7VTV3VTZYXHNKQVFDXC24XGSWRPM80HNFYC' where id=98; -update noar ti set v2='MU30X8COOAX3ZGOKXZ4GUWJU5U23LDGFEU2DIGPQX64OADO8NB6G2S0ZA1YUZHK2KUNWZKPB7HKAA6439XWPIUU6POXET1IHSP0O5F5K59AFF00CCA8FIDYLIWFW6XNZHMPCZIHSI5NMZ9ODACTSXM8R6VLF1ZEMLVP45S3874W2IUBY6AUL2CEAEODBAB32JZUE2GZYRATN651OMUQZ8438D0AACQ7VTV3VTZYXHNKQVFDXC24XGSWRPM80HNFYC' where id=98; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='4K0JDOCTLCYRE3DOBQMVV1BD2UQ5O6A9B6NSBGHN2W3B4ALQIAUFXGKHS7JLPSFQ127KQ4I8DEWVIDQTI39H8CU5LYX3S57LGAW2I95BS38MYV1WXNHZRM48SI85GLKS59P6DRFPN6MMYV497E4QPL4ORRWH9X15IUZMH3QLL7NZQERWN4FYUDKAWJ97KFB0L1PO1CA2J65Y481QZ5OWVD6D7HF8Q7DMAY2H1G858459YHUUXSOVP3A1RUOUFGRE2' where id=98; -update noar ti set v3='4K0JDOCTLCYRE3DOBQMVV1BD2UQ5O6A9B6NSBGHN2W3B4ALQIAUFXGKHS7JLPSFQ127KQ4I8DEWVIDQTI39H8CU5LYX3S57LGAW2I95BS38MYV1WXNHZRM48SI85GLKS59P6DRFPN6MMYV497E4QPL4ORRWH9X15IUZMH3QLL7NZQERWN4FYUDKAWJ97KFB0L1PO1CA2J65Y481QZ5OWVD6D7HF8Q7DMAY2H1G858459YHUUXSOVP3A1RUOUFGRE2' where id=98; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='1HD4FEZ6O89K9SIA7520LA3A2LHVNAC0013Y6QULNI84IN83Z6UTD5Z3MA9WVPRBAYOLO05B5ER1VH7B7KRHINK38SENRAZ67D4LCUVUID33WLDD5NEIISBD2ZO21IHWAVYOFAG9Q3LVCKM82NBKO9GTT4SUKPQ3QZBVVLRJRWIW8TLSCHBU8MREUH664MVIT6AFS8TQJN820UDKZYKAT8234995NJG9ZFT7TYJW8NAMP2G7JYN0A2G1ONIQQYDQD' where id=99; -update noar ti set v0='1HD4FEZ6O89K9SIA7520LA3A2LHVNAC0013Y6QULNI84IN83Z6UTD5Z3MA9WVPRBAYOLO05B5ER1VH7B7KRHINK38SENRAZ67D4LCUVUID33WLDD5NEIISBD2ZO21IHWAVYOFAG9Q3LVCKM82NBKO9GTT4SUKPQ3QZBVVLRJRWIW8TLSCHBU8MREUH664MVIT6AFS8TQJN820UDKZYKAT8234995NJG9ZFT7TYJW8NAMP2G7JYN0A2G1ONIQQYDQD' where id=99; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='GAE02TPZQYSWK1XC8AMMVY3AYJI2B40BLR9TZB1NAUBYHS2OD5ITZTRCBAS90YT6Y9H88PC3KZ0JG9RAV7HVFXMTEEQQOMARKNDPJB0GWK3ZWOY7UH2WVDJEQYU0BGLBCAYAUECYL1SUNSUECC5IRZL91O992Z5H308CMI56PTN76ZV1E99JM0M6YL5OKKZ4Q1SEXKNCAWAO5JP1CBKBU9CXMWT2HWHPHCXK3F4251JO1CSNYC3NO2N4L0G4E1JO0' where id=99; -update noar ti set v1='GAE02TPZQYSWK1XC8AMMVY3AYJI2B40BLR9TZB1NAUBYHS2OD5ITZTRCBAS90YT6Y9H88PC3KZ0JG9RAV7HVFXMTEEQQOMARKNDPJB0GWK3ZWOY7UH2WVDJEQYU0BGLBCAYAUECYL1SUNSUECC5IRZL91O992Z5H308CMI56PTN76ZV1E99JM0M6YL5OKKZ4Q1SEXKNCAWAO5JP1CBKBU9CXMWT2HWHPHCXK3F4251JO1CSNYC3NO2N4L0G4E1JO0' where id=99; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='CY0A4E4NBQ2ZS4CMBES53QSW0MQ1BWH8AZO9YV2OXIEZ5HOVMUAPMLMDRFR2CT0SKJMJ6SJN91NCFHUNGLE5MMMDMEGDJUX80PMIJH3XD5YADPPEE5QYLH9DOD2WX5KZ8344G1Q3YHNQHXJG3HRPJ0B5FAOYVVAD1FLSK7AYGJ1FYG7ZZB2OY94EKCKO916RHX4CRH52EH5YBR9V723Y8CN0K4TK7Z19SP2KHOH8YGK4SZ79CYSMRWONKS9ZQ8XD7' where id=99; -update noar ti set v2='CY0A4E4NBQ2ZS4CMBES53QSW0MQ1BWH8AZO9YV2OXIEZ5HOVMUAPMLMDRFR2CT0SKJMJ6SJN91NCFHUNGLE5MMMDMEGDJUX80PMIJH3XD5YADPPEE5QYLH9DOD2WX5KZ8344G1Q3YHNQHXJG3HRPJ0B5FAOYVVAD1FLSK7AYGJ1FYG7ZZB2OY94EKCKO916RHX4CRH52EH5YBR9V723Y8CN0K4TK7Z19SP2KHOH8YGK4SZ79CYSMRWONKS9ZQ8XD7' where id=99; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='DHMZ20B176AOGQAT1TJTAN6DSKYW7Y2C529037IC0ISEW2D6MV6JUKXSMA2IS577MR8IJ0G5ZZS7TYELKW3CFLH969W8IVFR2B9VZ3IYNSK8R4BOSJZGN2SK5MEKCYDVCQRXOTAJCYKO8TMI88VDCNJBH5EDC3AKYUMQEYM1I2YTYBCF1HO6R5JHYR4T8IM5ICZ8AN7DM19LY6F0E9I0Y9WCLJ57R216J7DY1VBNOV8S9SCRDNEGN85W7K8JMI83F' where id=99; -update noar ti set v3='DHMZ20B176AOGQAT1TJTAN6DSKYW7Y2C529037IC0ISEW2D6MV6JUKXSMA2IS577MR8IJ0G5ZZS7TYELKW3CFLH969W8IVFR2B9VZ3IYNSK8R4BOSJZGN2SK5MEKCYDVCQRXOTAJCYKO8TMI88VDCNJBH5EDC3AKYUMQEYM1I2YTYBCF1HO6R5JHYR4T8IM5ICZ8AN7DM19LY6F0E9I0Y9WCLJ57R216J7DY1VBNOV8S9SCRDNEGN85W7K8JMI83F' where id=99; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varchar(256) not null, -v1 varchar(256) not null, -v2 varchar(256) not null, -v3 varchar(256) not null, -b0 text not null -) engine=tokudb; -insert into tt values (1,2,'a','b','c','d','e'); -insert into tt values (2,3,'','','','',''); -insert into tt values (3,4,'','','','',''); -insert into tt values (4,5,'','','','',''); -insert into tt values (5,6,'','','','',''); -insert into tt values (6,7,'','','','',''); -insert into tt values (7,8,'','','','',''); -insert into tt values (8,9,'','','','',''); -insert into tt values (9,10,'','','','',''); -insert into tt values (10,11,'','','','',''); -insert into tt values (11,12,'','','','',''); -insert into tt values (12,13,'','','','',''); -insert into tt values (13,14,'','','','',''); -insert into tt values (14,15,'','','','',''); -insert into tt values (15,16,'','','','',''); -insert into tt values (16,17,'','','','',''); -insert into tt values (17,18,'','','','',''); -insert into tt values (18,19,'','','','',''); -insert into tt values (19,20,'','','','',''); -insert into tt values (20,21,'','','','',''); -insert into tt values (21,22,'','','','',''); -insert into tt values (22,23,'','','','',''); -insert into tt values (23,24,'','','','',''); -insert into tt values (24,25,'','','','',''); -insert into tt values (25,26,'','','','',''); -insert into tt values (26,27,'','','','',''); -insert into tt values (27,28,'','','','',''); -insert into tt values (28,29,'','','','',''); -insert into tt values (29,30,'','','','',''); -insert into tt values (30,31,'','','','',''); -insert into tt values (31,32,'','','','',''); -insert into tt values (32,33,'','','','',''); -insert into tt values (33,34,'','','','',''); -insert into tt values (34,35,'','','','',''); -insert into tt values (35,36,'','','','',''); -insert into tt values (36,37,'','','','',''); -insert into tt values (37,38,'','','','',''); -insert into tt values (38,39,'','','','',''); -insert into tt values (39,40,'','','','',''); -insert into tt values (40,41,'','','','',''); -insert into tt values (41,42,'','','','',''); -insert into tt values (42,43,'','','','',''); -insert into tt values (43,44,'','','','',''); -insert into tt values (44,45,'','','','',''); -insert into tt values (45,46,'','','','',''); -insert into tt values (46,47,'','','','',''); -insert into tt values (47,48,'','','','',''); -insert into tt values (48,49,'','','','',''); -insert into tt values (49,50,'','','','',''); -insert into tt values (50,51,'','','','',''); -insert into tt values (51,52,'','','','',''); -insert into tt values (52,53,'','','','',''); -insert into tt values (53,54,'','','','',''); -insert into tt values (54,55,'','','','',''); -insert into tt values (55,56,'','','','',''); -insert into tt values (56,57,'','','','',''); -insert into tt values (57,58,'','','','',''); -insert into tt values (58,59,'','','','',''); -insert into tt values (59,60,'','','','',''); -insert into tt values (60,61,'','','','',''); -insert into tt values (61,62,'','','','',''); -insert into tt values (62,63,'','','','',''); -insert into tt values (63,64,'','','','',''); -insert into tt values (64,65,'','','','',''); -insert into tt values (65,66,'','','','',''); -insert into tt values (66,67,'','','','',''); -insert into tt values (67,68,'','','','',''); -insert into tt values (68,69,'','','','',''); -insert into tt values (69,70,'','','','',''); -insert into tt values (70,71,'','','','',''); -insert into tt values (71,72,'','','','',''); -insert into tt values (72,73,'','','','',''); -insert into tt values (73,74,'','','','',''); -insert into tt values (74,75,'','','','',''); -insert into tt values (75,76,'','','','',''); -insert into tt values (76,77,'','','','',''); -insert into tt values (77,78,'','','','',''); -insert into tt values (78,79,'','','','',''); -insert into tt values (79,80,'','','','',''); -insert into tt values (80,81,'','','','',''); -insert into tt values (81,82,'','','','',''); -insert into tt values (82,83,'','','','',''); -insert into tt values (83,84,'','','','',''); -insert into tt values (84,85,'','','','',''); -insert into tt values (85,86,'','','','',''); -insert into tt values (86,87,'','','','',''); -insert into tt values (87,88,'','','','',''); -insert into tt values (88,89,'','','','',''); -insert into tt values (89,90,'','','','',''); -insert into tt values (90,91,'','','','',''); -insert into tt values (91,92,'','','','',''); -insert into tt values (92,93,'','','','',''); -insert into tt values (93,94,'','','','',''); -insert into tt values (94,95,'','','','',''); -insert into tt values (95,96,'','','','',''); -insert into tt values (96,97,'','','','',''); -insert into tt values (97,98,'','','','',''); -insert into tt values (98,99,'','','','',''); -insert into tt values (99,100,'','','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='null this 0' where id=0; -update noar ti set v0='null this 0' where id=0; -update noar tt set v1='null is 1' where id=0; -update noar ti set v1='null is 1' where id=0; -update noar tt set v2='null a 2' where id=0; -update noar ti set v2='null a 2' where id=0; -update noar tt set v3='null test 3' where id=0; -update noar ti set v3='null test 3' where id=0; -update noar tt set v0='this 0' where id=1; -update noar ti set v0='this 0' where id=1; -update noar tt set v1='is 1' where id=1; -update noar ti set v1='is 1' where id=1; -update noar tt set v2='another 2' where id=1; -update noar ti set v2='another 2' where id=1; -update noar tt set v3='test 3' where id=1; -update noar ti set v3='test 3' where id=1; -update noar tt set v0='F1A4JJ8LKGDMODWDFFQJT0QRKHWDIGKFJ9QPFOTEY6X8EG2IXY805D96ARABV5HW92N6F2J6RXIVPV6TOFTYP9BSVQRNMPMBKAEFJT5RZDNGLZDVP0DDZ6U6SONSC27TKAQRTEN9A0TQ6RP0HEWN3NFXUKVEM37CXEEHU0H3BLJARM7CSB31RTWDE3WHYEKYR905WCQQ9AXC1ZKAR59IYGQVFX164TW10BEL3JJVJBECFZ91SJXZSRPE7H4ZAXUB7' where id=2; -update noar ti set v0='F1A4JJ8LKGDMODWDFFQJT0QRKHWDIGKFJ9QPFOTEY6X8EG2IXY805D96ARABV5HW92N6F2J6RXIVPV6TOFTYP9BSVQRNMPMBKAEFJT5RZDNGLZDVP0DDZ6U6SONSC27TKAQRTEN9A0TQ6RP0HEWN3NFXUKVEM37CXEEHU0H3BLJARM7CSB31RTWDE3WHYEKYR905WCQQ9AXC1ZKAR59IYGQVFX164TW10BEL3JJVJBECFZ91SJXZSRPE7H4ZAXUB7' where id=2; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='90OGLWTNU84GEJCCGT0MXPY6WK7YULXN59QPRN31RC0KS3PC81SGK7NPNFAW528FTJXQDIONDTWJM5RYXC125KPMLQU6FK689HD6E0UJOAF0YYNMJMKU3N6LCK4NTRSZI2QFMHXS86ZR1PIDCXTCJNKH29UW1NCAOE4Y44RQC0X37IV2ZM0XL8CCK4BNTYYXI5OGAMNI25OHMHHY4J5O6MMFDXCEUK3749JH4EY0MU0MWDEC487H6RZUPJ0SN1L7O' where id=2; -update noar ti set v1='90OGLWTNU84GEJCCGT0MXPY6WK7YULXN59QPRN31RC0KS3PC81SGK7NPNFAW528FTJXQDIONDTWJM5RYXC125KPMLQU6FK689HD6E0UJOAF0YYNMJMKU3N6LCK4NTRSZI2QFMHXS86ZR1PIDCXTCJNKH29UW1NCAOE4Y44RQC0X37IV2ZM0XL8CCK4BNTYYXI5OGAMNI25OHMHHY4J5O6MMFDXCEUK3749JH4EY0MU0MWDEC487H6RZUPJ0SN1L7O' where id=2; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='5QCB9PASK9MVP5B5UZHYJJF2CUGL803ZRY9BMKOC2Z6074AMFMFYZ758J4NBTNMS07L16M2UDJ2KUKE03I8ISC9KW2PN4EW2HH6YNEGYIZJI73BAZQNKAJ0ERLCO119WHIN8GIYMAGKSLC52DNN9WXHU4CVYCRGLITNNC1T5A4WCUMLIG49R2TRGW5L647J8SF405L3E38VLA9YRWXOKUGBKFORY75ZOESKWWFID7ULC9PG4YD3EDH5VILUW5DBY5' where id=2; -update noar ti set v2='5QCB9PASK9MVP5B5UZHYJJF2CUGL803ZRY9BMKOC2Z6074AMFMFYZ758J4NBTNMS07L16M2UDJ2KUKE03I8ISC9KW2PN4EW2HH6YNEGYIZJI73BAZQNKAJ0ERLCO119WHIN8GIYMAGKSLC52DNN9WXHU4CVYCRGLITNNC1T5A4WCUMLIG49R2TRGW5L647J8SF405L3E38VLA9YRWXOKUGBKFORY75ZOESKWWFID7ULC9PG4YD3EDH5VILUW5DBY5' where id=2; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='G69FMB3WF75OUZG57JPZY6H56YU6BBB6A0YE534H89CVJEIHJVP45LE50A08D4JFJ05ZK6XTH1BTZ5T55F1LPQC1G3B50YUYA6364QMI7PWQ61MPUW33DPAMTAWR0GUULCC14SMC5DXNGVI3PBEFUBQ3HSO5CX8X76IGWPWGZ032S5QQATI7YZ34TV1URJHLZKKT4EI45Q49KGT7DCWT75WRNO8TZRNVWQKU06A2R49IX3AGU9DBSUMXPNPMKE3NZ' where id=2; -update noar ti set v3='G69FMB3WF75OUZG57JPZY6H56YU6BBB6A0YE534H89CVJEIHJVP45LE50A08D4JFJ05ZK6XTH1BTZ5T55F1LPQC1G3B50YUYA6364QMI7PWQ61MPUW33DPAMTAWR0GUULCC14SMC5DXNGVI3PBEFUBQ3HSO5CX8X76IGWPWGZ032S5QQATI7YZ34TV1URJHLZKKT4EI45Q49KGT7DCWT75WRNO8TZRNVWQKU06A2R49IX3AGU9DBSUMXPNPMKE3NZ' where id=2; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='ALSZON21LN9TENN7FXZSZQPS5LI1YZTQYEIXWKXW77MJLIBZZ86SE51YD8JAG9OCZ9G8EH9IL73XNVNRWGCFOLAWA6C8TNIMBZWC8NXU7KXSXHGQH1LY865H4FOFCIKLSCSJK02SK4FPXEYN7UNRZWPQEEFXO2MS2IIQ7YX6KP2DU31F9YJSVKJS3MD56VVI3N4GN5Z2RKTBBMUHEKJYMVKPHW4BTWYAS1SNWYBUMGVXCZZIUYCUQ6W316H73QV4D' where id=3; -update noar ti set v0='ALSZON21LN9TENN7FXZSZQPS5LI1YZTQYEIXWKXW77MJLIBZZ86SE51YD8JAG9OCZ9G8EH9IL73XNVNRWGCFOLAWA6C8TNIMBZWC8NXU7KXSXHGQH1LY865H4FOFCIKLSCSJK02SK4FPXEYN7UNRZWPQEEFXO2MS2IIQ7YX6KP2DU31F9YJSVKJS3MD56VVI3N4GN5Z2RKTBBMUHEKJYMVKPHW4BTWYAS1SNWYBUMGVXCZZIUYCUQ6W316H73QV4D' where id=3; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='6DAK7KZC3URTIR620Z1YNDZBDKOTZICKZNAQV44QE9WXPR1Q3ZC5PRBE1KIA2HFMHPAXR0LSEMZVJRZ5YJOFCGEC9BX5NS15YDQ5GZ78VIIFLQLF00WP7H6ZV9A256FVVNFI79ZJ9ZOGP3XXFIVUTJXO7AIYH9JMTA9AFLB6PWNGPY0HD45BJCRNATAW799B48PFEC7JT4YHZ4DSBV392QMYC2YC7L5Z1LYK59G5E2IDQQIQ8L6IKNCV60P3OMNZL' where id=3; -update noar ti set v1='6DAK7KZC3URTIR620Z1YNDZBDKOTZICKZNAQV44QE9WXPR1Q3ZC5PRBE1KIA2HFMHPAXR0LSEMZVJRZ5YJOFCGEC9BX5NS15YDQ5GZ78VIIFLQLF00WP7H6ZV9A256FVVNFI79ZJ9ZOGP3XXFIVUTJXO7AIYH9JMTA9AFLB6PWNGPY0HD45BJCRNATAW799B48PFEC7JT4YHZ4DSBV392QMYC2YC7L5Z1LYK59G5E2IDQQIQ8L6IKNCV60P3OMNZL' where id=3; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='3FJ9WJEKSA70H1TUF49LYQO14FOTKJADPQD7CNQUV2HFL8MASEID8PQQTB3H8ZZQSS6ORMJ9O4H6BV161LW3DS3PYCEMWYMDEPPCLDZEJHP0SDSLZATKY3AB299AFWM6ZU8Q8Y2KVII35SGLJSA0CRY6MXMD1YWOK0WH5ZMVA7QSRCKQLJ8QE77Z7EFMI2VW1JQE5M8RD525PEQ4MXZXJNRZGUPGYV3JYC00K24RJ28Z0QL6GUYOSW55IH3MRBO9H' where id=3; -update noar ti set v2='3FJ9WJEKSA70H1TUF49LYQO14FOTKJADPQD7CNQUV2HFL8MASEID8PQQTB3H8ZZQSS6ORMJ9O4H6BV161LW3DS3PYCEMWYMDEPPCLDZEJHP0SDSLZATKY3AB299AFWM6ZU8Q8Y2KVII35SGLJSA0CRY6MXMD1YWOK0WH5ZMVA7QSRCKQLJ8QE77Z7EFMI2VW1JQE5M8RD525PEQ4MXZXJNRZGUPGYV3JYC00K24RJ28Z0QL6GUYOSW55IH3MRBO9H' where id=3; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='LMLAZ2Y3778S6GP3PKFGMJ965OE7DACKJZB8WUUXUD0KO2SX49KZOBYNRKMC3FSONUR4YDEQ44M3SHKVZV69MWL1FHCROQE8KC76XOMPMNDRKG1VEMUQLN16I7Z09GF20FVSYM1LRL235W0F7ABYPWN3HX9T8RO56JV6W5M2WY97MLTYKBNF2M3DNVQTXM0I2095CK4YYSQ3UWJZ5DWA2W7IZ5ZUVIXBC5TZF41XD3BK5EQ50KCQKVPPZWHPDWTDX' where id=3; -update noar ti set v3='LMLAZ2Y3778S6GP3PKFGMJ965OE7DACKJZB8WUUXUD0KO2SX49KZOBYNRKMC3FSONUR4YDEQ44M3SHKVZV69MWL1FHCROQE8KC76XOMPMNDRKG1VEMUQLN16I7Z09GF20FVSYM1LRL235W0F7ABYPWN3HX9T8RO56JV6W5M2WY97MLTYKBNF2M3DNVQTXM0I2095CK4YYSQ3UWJZ5DWA2W7IZ5ZUVIXBC5TZF41XD3BK5EQ50KCQKVPPZWHPDWTDX' where id=3; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='3TXRH3RKN5QX9QH6UTXAX90FO1KT5E6RQ5YQ0Z0M029DD17ED4UITV9WBSJVJARID1XOP0BGGP4N1TN8RNXX9611YP5ZO9RBEAEHLONS7G3C5XHDYBIBW5H8K0EHP8IV4HJFRE9C4IPVY76K7XTKXK80ZOUNEC58KXPCZ0F4B8FI3O9MSYFDDY2ZRSB9XUWEC3ZMJ75OW8IJLYY6KL8KAT96PE0BMAD7F1FG6PDN9QRYNVO6EAG0QXTTT6XLEE8KA' where id=4; -update noar ti set v0='3TXRH3RKN5QX9QH6UTXAX90FO1KT5E6RQ5YQ0Z0M029DD17ED4UITV9WBSJVJARID1XOP0BGGP4N1TN8RNXX9611YP5ZO9RBEAEHLONS7G3C5XHDYBIBW5H8K0EHP8IV4HJFRE9C4IPVY76K7XTKXK80ZOUNEC58KXPCZ0F4B8FI3O9MSYFDDY2ZRSB9XUWEC3ZMJ75OW8IJLYY6KL8KAT96PE0BMAD7F1FG6PDN9QRYNVO6EAG0QXTTT6XLEE8KA' where id=4; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='V5NGOE1M02EFOTRJ4TDHKEXACA9T6RCFIHMTESJ3AGB3A8OSOBBI38NIIRS1RWGB88JROKZ5AJ2DOQGRQXTW9YRHY1KMVLJVG9LAYXC5LYF8QYAM4QLX90X7EQB13MNKBF5D6GKXJQNK7QR6XO9O42EE4V5V1J4DC9Q2PFAGP64G70085257H1ZOWIKEJ5QZ7M1IK0CQOS9BLBX8ZYWWG541YM5CFTZVIIXJ6CBR89ZHHE0G98C9MGYS9O9A34NP0' where id=4; -update noar ti set v1='V5NGOE1M02EFOTRJ4TDHKEXACA9T6RCFIHMTESJ3AGB3A8OSOBBI38NIIRS1RWGB88JROKZ5AJ2DOQGRQXTW9YRHY1KMVLJVG9LAYXC5LYF8QYAM4QLX90X7EQB13MNKBF5D6GKXJQNK7QR6XO9O42EE4V5V1J4DC9Q2PFAGP64G70085257H1ZOWIKEJ5QZ7M1IK0CQOS9BLBX8ZYWWG541YM5CFTZVIIXJ6CBR89ZHHE0G98C9MGYS9O9A34NP0' where id=4; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='8D07CWZF6LFP35FZRMBY4XSCS2T8VRU35DJHOOZB623NA0BDWJH0GV5ZXBB6C5MO4WOYMYDIP7MORXEHT0RKK9FJ98TA5X47CSZ89WTS5H3SYBNKX2O18L2QXS7NPKDC4G63XL5UL13OQIB5UBC17GH8UTNFPXU9T90OE5EM9GOQTRA5Q24NKFZLYL37R5WT54BJZ0U0RBR3SPDO3JRSJRC35LPHFU7YU8K1Q7MHXE38I59EDNUCS7CA6YMR6M2EF' where id=4; -update noar ti set v2='8D07CWZF6LFP35FZRMBY4XSCS2T8VRU35DJHOOZB623NA0BDWJH0GV5ZXBB6C5MO4WOYMYDIP7MORXEHT0RKK9FJ98TA5X47CSZ89WTS5H3SYBNKX2O18L2QXS7NPKDC4G63XL5UL13OQIB5UBC17GH8UTNFPXU9T90OE5EM9GOQTRA5Q24NKFZLYL37R5WT54BJZ0U0RBR3SPDO3JRSJRC35LPHFU7YU8K1Q7MHXE38I59EDNUCS7CA6YMR6M2EF' where id=4; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='ZKGAA6FDKPFY3SJ5QD9IR1QZNQSRN6OOT0X2PT938OREUVK36H0SMWU43RA5FRPFUXFMKMJV11ZON7PMOVOL2TIIL0O6P0CANLMZMYXNVQ3WZ7GL1CJE7872AGOZR43GI46JDAT9UHTZOULOWB7QS63H3ZABOUTLI38Z1TO091DA0KY0HOT37XJIMA63S6LLQ0JSMJU7D5SW5RWRZLGWRDMIBHS5I3V8KW6MJ44AURJKHSGC5L4SUHLUZTUJ0HYRP' where id=4; -update noar ti set v3='ZKGAA6FDKPFY3SJ5QD9IR1QZNQSRN6OOT0X2PT938OREUVK36H0SMWU43RA5FRPFUXFMKMJV11ZON7PMOVOL2TIIL0O6P0CANLMZMYXNVQ3WZ7GL1CJE7872AGOZR43GI46JDAT9UHTZOULOWB7QS63H3ZABOUTLI38Z1TO091DA0KY0HOT37XJIMA63S6LLQ0JSMJU7D5SW5RWRZLGWRDMIBHS5I3V8KW6MJ44AURJKHSGC5L4SUHLUZTUJ0HYRP' where id=4; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='UZTRANH93975WQMILZ2MUN6R4MZQ73UGRQYWDHD088I2ORRH7UC6ZEIRN6G0PUASQNROBYN2WION2W9IXA25D2RY0RCK7WF9XPZ41QNN2U56T5WFSZI7NFH81QZT80JZ3HXHN16L64SPGU373IS1XTMT9O1OLWQ7KYMUO2ZRT8X8UUFS9NPEVXE7X0NDF4UZ7D5SJNI2D5VAEWMSL4S2I18GWAJQE4YJHRBQ04FWYNMR73QX74Z96BH44T4T51YEC' where id=5; -update noar ti set v0='UZTRANH93975WQMILZ2MUN6R4MZQ73UGRQYWDHD088I2ORRH7UC6ZEIRN6G0PUASQNROBYN2WION2W9IXA25D2RY0RCK7WF9XPZ41QNN2U56T5WFSZI7NFH81QZT80JZ3HXHN16L64SPGU373IS1XTMT9O1OLWQ7KYMUO2ZRT8X8UUFS9NPEVXE7X0NDF4UZ7D5SJNI2D5VAEWMSL4S2I18GWAJQE4YJHRBQ04FWYNMR73QX74Z96BH44T4T51YEC' where id=5; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='D50S6RHBKH1MMTFNNHTC77UIYI18ELNVWR795GI0NM9O8WS06XNALDTXAQFKQRYZSREW2X75N1PKMY4GYZQMQKJ83ZS7TNJ908ICBHWDRF7AN9IJWGX7F7FFSQRJJ1XIJJ861FVMLN7D9N06UBVILS4HLGVDVC5H6BZE5HM2ZAP3OUTCP89CB5TGXUK96YL7OPWDH2AP6PP2A85G7O4ZTQNLH1TI1WX7ZQXL4XBXDQOR6KY8UI49DLHM8SNHW3563' where id=5; -update noar ti set v1='D50S6RHBKH1MMTFNNHTC77UIYI18ELNVWR795GI0NM9O8WS06XNALDTXAQFKQRYZSREW2X75N1PKMY4GYZQMQKJ83ZS7TNJ908ICBHWDRF7AN9IJWGX7F7FFSQRJJ1XIJJ861FVMLN7D9N06UBVILS4HLGVDVC5H6BZE5HM2ZAP3OUTCP89CB5TGXUK96YL7OPWDH2AP6PP2A85G7O4ZTQNLH1TI1WX7ZQXL4XBXDQOR6KY8UI49DLHM8SNHW3563' where id=5; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='O3AB3AX19SHAPTYGPEP7CGJC7P22KJ4GF65U63IE9VGB41GPDQBSCH3I87KFPGEZB2OSC80WNV0186M9YU4NZVC36WUA4DDS6H4QHRNWM1IPUJTU84E4G6HMN4NQZMLJ2XVCQVN00JPAIHHAIK0OUXKT47HM62116K6MMPDBJE65LT7Z94ZHQ2A9V34G43MYWXK88O8ZTVF2M7TS69KAPBM45ELX8DWDCL5CH5NKFH2U8S8XLI5D0XPLICKODKV6D' where id=5; -update noar ti set v2='O3AB3AX19SHAPTYGPEP7CGJC7P22KJ4GF65U63IE9VGB41GPDQBSCH3I87KFPGEZB2OSC80WNV0186M9YU4NZVC36WUA4DDS6H4QHRNWM1IPUJTU84E4G6HMN4NQZMLJ2XVCQVN00JPAIHHAIK0OUXKT47HM62116K6MMPDBJE65LT7Z94ZHQ2A9V34G43MYWXK88O8ZTVF2M7TS69KAPBM45ELX8DWDCL5CH5NKFH2U8S8XLI5D0XPLICKODKV6D' where id=5; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='KCTSSV8ISNBEAFKDGD86F4QCW1MJ09VSJPS1WM10S9I5H3U0URKWJPK8GKH18EVHJ2UFL1POO6O9DAM6DAPI95A5BHU0D85EGMDKQVHPTJZ7CQ2421LM5FI0B16GTVHLM2PU004XTSTIIZ11WVXWHJYWPCXYGY0T4PQHOVICTYL9C8MDW0EYDZV3A0DFI7NNYCCEF3IFFCUV8UVVH1GQTX83GGI0AQVDKLD172GEURRJX6UFCW8J5SQHK8DTB7D0I' where id=5; -update noar ti set v3='KCTSSV8ISNBEAFKDGD86F4QCW1MJ09VSJPS1WM10S9I5H3U0URKWJPK8GKH18EVHJ2UFL1POO6O9DAM6DAPI95A5BHU0D85EGMDKQVHPTJZ7CQ2421LM5FI0B16GTVHLM2PU004XTSTIIZ11WVXWHJYWPCXYGY0T4PQHOVICTYL9C8MDW0EYDZV3A0DFI7NNYCCEF3IFFCUV8UVVH1GQTX83GGI0AQVDKLD172GEURRJX6UFCW8J5SQHK8DTB7D0I' where id=5; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='RSIY4CQGK91NEH3B7MOBI83MS13EUKLJVM1K778UZT8FOC59JE6D7EVCYO3ASNIJQVGYHV3W5IOD14NZ76CSNSX63ZHLDROE258H0IBGCYNZKLMG7SML7WTBBEEMUDVQ1JS7ZDJ7KZAFKQP6IAR2B0FSH14OFA5OD0RMYR1P2OQBK863I6ISGSY2QLLDOR9HH289JLYBXNGGIJS9E5SET8LHG28BGCI2NP0VIMGPAN5T2PTS5U629A5MN44USRSWJ' where id=6; -update noar ti set v0='RSIY4CQGK91NEH3B7MOBI83MS13EUKLJVM1K778UZT8FOC59JE6D7EVCYO3ASNIJQVGYHV3W5IOD14NZ76CSNSX63ZHLDROE258H0IBGCYNZKLMG7SML7WTBBEEMUDVQ1JS7ZDJ7KZAFKQP6IAR2B0FSH14OFA5OD0RMYR1P2OQBK863I6ISGSY2QLLDOR9HH289JLYBXNGGIJS9E5SET8LHG28BGCI2NP0VIMGPAN5T2PTS5U629A5MN44USRSWJ' where id=6; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='9KVIHILYRAKCJ38ZXUXD886V4YVFBNTBCTZG7PDBDQM1RVO578WHZ5LP1RZ9ZYCPM1SMJ6KUVS1TUCCMMBDAM1MTOG6EBSL89576EYTCOWNK0HAPENKFHQO6ONYJO6LZ0H3WYL2WJYUN0YDWI4LGXDW7G9OBWA2LGWZDRICC9135CBHV0HDH8ATGZ6Z62KMIDYZXUSG04WJ2UDY2QQZTJMYSTLCXI05KNSILHXETOZM3GDYBOLVBUWX2FT4T8W3N7' where id=6; -update noar ti set v1='9KVIHILYRAKCJ38ZXUXD886V4YVFBNTBCTZG7PDBDQM1RVO578WHZ5LP1RZ9ZYCPM1SMJ6KUVS1TUCCMMBDAM1MTOG6EBSL89576EYTCOWNK0HAPENKFHQO6ONYJO6LZ0H3WYL2WJYUN0YDWI4LGXDW7G9OBWA2LGWZDRICC9135CBHV0HDH8ATGZ6Z62KMIDYZXUSG04WJ2UDY2QQZTJMYSTLCXI05KNSILHXETOZM3GDYBOLVBUWX2FT4T8W3N7' where id=6; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='HOZ5NVZDAKYR1AUE70K5JN2N0WIF9RKLU0CIZOOQMJ0VD4UWAY3CDGEXYC3P9N5WIN6AAXZIS8OHZER2UAG24EA8X0J0HDTVI9LYG94SX3HW2V4LFLKE2XVRB9ZCZAOALVO4XHBXAALJ0R2JLSPUJ5D1WRCRJ2X82BGSEUAMQR5U9Z1WZU1L5V9HCSLGI5BDTMNJ0QLPPWRBGDUNCGLBEWQAIZC07O4S4GO1HAIXGUV0OC9YHOCNJSP0EAMBQBMYG' where id=6; -update noar ti set v2='HOZ5NVZDAKYR1AUE70K5JN2N0WIF9RKLU0CIZOOQMJ0VD4UWAY3CDGEXYC3P9N5WIN6AAXZIS8OHZER2UAG24EA8X0J0HDTVI9LYG94SX3HW2V4LFLKE2XVRB9ZCZAOALVO4XHBXAALJ0R2JLSPUJ5D1WRCRJ2X82BGSEUAMQR5U9Z1WZU1L5V9HCSLGI5BDTMNJ0QLPPWRBGDUNCGLBEWQAIZC07O4S4GO1HAIXGUV0OC9YHOCNJSP0EAMBQBMYG' where id=6; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='KHDTOKKYJDGD0O41TB01KS8GGC7EL5TCGJPSU5HK5YPYIUCTE4RU2N4ACPJCRGCM94GW29IYRFPJIOKD4AG88WXZLMW37DY3PMPE2S2SCBKQJ0ZCF0BR6VGG45XTSHXPTZX0P24FQIW3RLPPETZ7IBAXL2JQI3NAQ9TESMEEUD1N81Z7PAY8IKQSJU6GNLHNNS09D5DL6MDRGO4ZACVKBM2JV9O2W5YULQMMWQ48ZXNSLTXVR14CNHMU1RO7P10KU' where id=6; -update noar ti set v3='KHDTOKKYJDGD0O41TB01KS8GGC7EL5TCGJPSU5HK5YPYIUCTE4RU2N4ACPJCRGCM94GW29IYRFPJIOKD4AG88WXZLMW37DY3PMPE2S2SCBKQJ0ZCF0BR6VGG45XTSHXPTZX0P24FQIW3RLPPETZ7IBAXL2JQI3NAQ9TESMEEUD1N81Z7PAY8IKQSJU6GNLHNNS09D5DL6MDRGO4ZACVKBM2JV9O2W5YULQMMWQ48ZXNSLTXVR14CNHMU1RO7P10KU' where id=6; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='LHM6SC7V983AQONHQU2KCHOWL4QRC0DFXB3YA3OOOZKJJ0BRQDAUWYA4VKLIU0CVC9RADQMJVEAWWUIE87QX6AM73FLTG8CLUX7COHTK4H6L0GJ1PQE0XA9KRKLQHESS0AIFSQLYB273Z20MP6WIHVJUKZ9NAZ982WCQ7W324DQIOGNSCK92ZQP493QDK5B4FEP97OYRNV2KAVV6IOFXR3UMPYN3DNV3E9U804E2R8NBJL5F0N0W4ER37YDL826X2' where id=7; -update noar ti set v0='LHM6SC7V983AQONHQU2KCHOWL4QRC0DFXB3YA3OOOZKJJ0BRQDAUWYA4VKLIU0CVC9RADQMJVEAWWUIE87QX6AM73FLTG8CLUX7COHTK4H6L0GJ1PQE0XA9KRKLQHESS0AIFSQLYB273Z20MP6WIHVJUKZ9NAZ982WCQ7W324DQIOGNSCK92ZQP493QDK5B4FEP97OYRNV2KAVV6IOFXR3UMPYN3DNV3E9U804E2R8NBJL5F0N0W4ER37YDL826X2' where id=7; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='90XPBAT7BYYDYFB49JHZX76W9VCYKPNAZMOW39OS2EWRO9NXFKO7TPGJ5RQUP94FXZPPRLRXUHOPL7X767PKO3I3CJEL7C96GQK3RCB3XEGT5M93O5TMVIU5B78YEJSO8PLF5I3AO9HJL99Y8MW75ZXDVHAKMKAF4G6KAGIV0LGMMPIS8D5JMR6H87OZ2S6CTWZM4C1GJEB5JQD5G1EHZY99MUSNT9W6KQ3I121T0MBDH18G0SD3168H6Z9H2GA2T' where id=7; -update noar ti set v1='90XPBAT7BYYDYFB49JHZX76W9VCYKPNAZMOW39OS2EWRO9NXFKO7TPGJ5RQUP94FXZPPRLRXUHOPL7X767PKO3I3CJEL7C96GQK3RCB3XEGT5M93O5TMVIU5B78YEJSO8PLF5I3AO9HJL99Y8MW75ZXDVHAKMKAF4G6KAGIV0LGMMPIS8D5JMR6H87OZ2S6CTWZM4C1GJEB5JQD5G1EHZY99MUSNT9W6KQ3I121T0MBDH18G0SD3168H6Z9H2GA2T' where id=7; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='NP8HYW41BNEOI62AMBSV3QL86Q4TR7W8N96HDTXKCOEFFV9OCCB0WP4LME8TUGZ0CO7JNV8HVTH1IVGNJZ7SSRSP18BN8XQ391G6WVI04RTNLYMDTQ823KH72CQWG407HSOEEQ7TI0BK1RJ7OUVX5U0YLLTEMCDMF08T3O4VR9DT4CH9I8NRSCJD7DU3XR5SRKK12519USN2IHHC0F8NNZWQU6B8E4CAIO3XCDFDDJWQYL1Z82Z0DVEI4TIFB6IYQ' where id=7; -update noar ti set v2='NP8HYW41BNEOI62AMBSV3QL86Q4TR7W8N96HDTXKCOEFFV9OCCB0WP4LME8TUGZ0CO7JNV8HVTH1IVGNJZ7SSRSP18BN8XQ391G6WVI04RTNLYMDTQ823KH72CQWG407HSOEEQ7TI0BK1RJ7OUVX5U0YLLTEMCDMF08T3O4VR9DT4CH9I8NRSCJD7DU3XR5SRKK12519USN2IHHC0F8NNZWQU6B8E4CAIO3XCDFDDJWQYL1Z82Z0DVEI4TIFB6IYQ' where id=7; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='F3K57HUK7J1FV955BLWNE6MKETSNKA9NDANUF5WZI36PHXYAV72SHSLZX8CZQMLAESFV4ZWSJBKS34OM75U3LG9MT8620N0TY8AUYEDG6J9F6XVW8B25LKT2QZBEPQN7Q9XPNGPP1MJ898C5NRF1D4SJFZGTL6B1IRJKL3PUZFYF6TUZY2NQL0EBM0GJTGX6D991EPNMQM2373FQC4U1BT8R3WR7H0TJPSOAX0AQPV4T7RIUT4XE3R0FKBWUX237M' where id=7; -update noar ti set v3='F3K57HUK7J1FV955BLWNE6MKETSNKA9NDANUF5WZI36PHXYAV72SHSLZX8CZQMLAESFV4ZWSJBKS34OM75U3LG9MT8620N0TY8AUYEDG6J9F6XVW8B25LKT2QZBEPQN7Q9XPNGPP1MJ898C5NRF1D4SJFZGTL6B1IRJKL3PUZFYF6TUZY2NQL0EBM0GJTGX6D991EPNMQM2373FQC4U1BT8R3WR7H0TJPSOAX0AQPV4T7RIUT4XE3R0FKBWUX237M' where id=7; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='Y5CNULAL1PXJ7XZWI8QX6YYYY36NZKJ7KV1ER3Q6OAURAYQZYHZ38YVOF0MZYR9OK980V7EQA5ZRKE082GVABO1CLOYXFYNZA62XP2RNK21Q9UHRM6XWG2HK9EYCFVA2GLOMQ4E139Q2RC8YVAAI27UQZP8E7BAGAYQ7QJ2FNXFN32I2LULCZZDH3QPL99OU78V4K7LP20MHKR49WI3WFJQPT3IYAOG6CHXA2GHYL7U2OLQ5GW5CZ9AP1HV4O1QCN' where id=8; -update noar ti set v0='Y5CNULAL1PXJ7XZWI8QX6YYYY36NZKJ7KV1ER3Q6OAURAYQZYHZ38YVOF0MZYR9OK980V7EQA5ZRKE082GVABO1CLOYXFYNZA62XP2RNK21Q9UHRM6XWG2HK9EYCFVA2GLOMQ4E139Q2RC8YVAAI27UQZP8E7BAGAYQ7QJ2FNXFN32I2LULCZZDH3QPL99OU78V4K7LP20MHKR49WI3WFJQPT3IYAOG6CHXA2GHYL7U2OLQ5GW5CZ9AP1HV4O1QCN' where id=8; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='Z7TBDC73IVSOY74C6RF5GBRWC96W3MBUF10FISKC1Z3YMC0SGXNCUMBHMXBGQ4XCB9D07SYR8F9HNFCKSPQ8X7EQBA126AQWEIS6D6WA42UMNB18XJZI2B7ZOQUDRANBAOIMQNHUCP04NI0VSVOVYEPOCIRL6DKD21IPZFSY7X7964ZHQNU0SMM4RBB2ZIWF5S0D540KFTIRKVXZZKK2VHWDR819BBXSBVG7ZBHL9JJAWU1VSV8QGQETBC8PFUWI6' where id=8; -update noar ti set v1='Z7TBDC73IVSOY74C6RF5GBRWC96W3MBUF10FISKC1Z3YMC0SGXNCUMBHMXBGQ4XCB9D07SYR8F9HNFCKSPQ8X7EQBA126AQWEIS6D6WA42UMNB18XJZI2B7ZOQUDRANBAOIMQNHUCP04NI0VSVOVYEPOCIRL6DKD21IPZFSY7X7964ZHQNU0SMM4RBB2ZIWF5S0D540KFTIRKVXZZKK2VHWDR819BBXSBVG7ZBHL9JJAWU1VSV8QGQETBC8PFUWI6' where id=8; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='CMJH7J3P1KZVK1IEJXESCPBHBS5L6Z8WB4YT4HZ4SP0XZGKGWMR3H28PXNG8WKWE8QW5DM6UMTLFQOFF9GGU10KK73HTGNFQ9XTX7JAEIEO83NVM3JY3O22L2MDGBSKYIM4NVYDV7CRNN5XIUPJ2NHOHU13KE05AHH08MCX7LHL8Y1SSO3VLLRDA6HLP1R54A1NL7ZA2GPU0LTFP3SJDVZIGA30978AG3T33QP05BSPLAFCBOG59HL1K99SY30GGA' where id=8; -update noar ti set v2='CMJH7J3P1KZVK1IEJXESCPBHBS5L6Z8WB4YT4HZ4SP0XZGKGWMR3H28PXNG8WKWE8QW5DM6UMTLFQOFF9GGU10KK73HTGNFQ9XTX7JAEIEO83NVM3JY3O22L2MDGBSKYIM4NVYDV7CRNN5XIUPJ2NHOHU13KE05AHH08MCX7LHL8Y1SSO3VLLRDA6HLP1R54A1NL7ZA2GPU0LTFP3SJDVZIGA30978AG3T33QP05BSPLAFCBOG59HL1K99SY30GGA' where id=8; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='85QYOPQYOOBEE3G2GRIRV57YB9DERNG48SHLPPUCZSZ6C6JJSZXLJQTTLK09O6DF7ETHB1Z8BTJFBT73G72TS2S3ZMRRZ4EZ38JJRBKI9M8D8CX6ASQZHRF88HE02OZ0PG35154RJBKC74AER4YJ24YAIBCVLCZ2LD1T55BY8Q4PEUHJG3FAQ97I0POCOOTSM92KA5G9IE9IWEM501CGVFGUTJBLSGDDPJAFE63ESJ8F04PICZ2OJ8UF08DX4PIZJ' where id=8; -update noar ti set v3='85QYOPQYOOBEE3G2GRIRV57YB9DERNG48SHLPPUCZSZ6C6JJSZXLJQTTLK09O6DF7ETHB1Z8BTJFBT73G72TS2S3ZMRRZ4EZ38JJRBKI9M8D8CX6ASQZHRF88HE02OZ0PG35154RJBKC74AER4YJ24YAIBCVLCZ2LD1T55BY8Q4PEUHJG3FAQ97I0POCOOTSM92KA5G9IE9IWEM501CGVFGUTJBLSGDDPJAFE63ESJ8F04PICZ2OJ8UF08DX4PIZJ' where id=8; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='CCXWJBA0QUXCGG1T43E8CMG0FLF0568J0MNG4MR85C2AF3HOEEOJ97GD7GQL43OJGHULZK7IWH028XSP9F604UFKBVXRRT90EJJSJA4BUHDEA3REBLQPF6PM1PNH6IX2V0Z0ZNLRWJSMQ4AHI2DJAEANQXF7RNRIV0BMZKZ4LVMROHY1HBIWEDPM8YFGPHM4BTV4AWKL209AM82ACIO94B15LCVE1N9CJICTS9X2NQ8FBDZH8XYDVVVD736PKV90P' where id=9; -update noar ti set v0='CCXWJBA0QUXCGG1T43E8CMG0FLF0568J0MNG4MR85C2AF3HOEEOJ97GD7GQL43OJGHULZK7IWH028XSP9F604UFKBVXRRT90EJJSJA4BUHDEA3REBLQPF6PM1PNH6IX2V0Z0ZNLRWJSMQ4AHI2DJAEANQXF7RNRIV0BMZKZ4LVMROHY1HBIWEDPM8YFGPHM4BTV4AWKL209AM82ACIO94B15LCVE1N9CJICTS9X2NQ8FBDZH8XYDVVVD736PKV90P' where id=9; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='UROABRDCBAA8643XGHW3GJ5GSJQ1XQO6UBP2XD2EN9RCL8AN2PVQZ1TAROUZYNHPKH3VWT4VCBR08V30P1KDW93JM1REDJ58MT1QP81LPA5NM5KXBNJQPP9YGM2S3VIJVXROVHBAWRA2SLEK7YGM2L2T29A3K09NZXR7CVFOG3H8M5C6YBSWQMGAJTFYAU38AXW72NC6TGPCIV1SYL56FIN5ZUF6EQFB28GBA8SF2DV8W6W756H9XXYCGBXX9XFW3' where id=9; -update noar ti set v1='UROABRDCBAA8643XGHW3GJ5GSJQ1XQO6UBP2XD2EN9RCL8AN2PVQZ1TAROUZYNHPKH3VWT4VCBR08V30P1KDW93JM1REDJ58MT1QP81LPA5NM5KXBNJQPP9YGM2S3VIJVXROVHBAWRA2SLEK7YGM2L2T29A3K09NZXR7CVFOG3H8M5C6YBSWQMGAJTFYAU38AXW72NC6TGPCIV1SYL56FIN5ZUF6EQFB28GBA8SF2DV8W6W756H9XXYCGBXX9XFW3' where id=9; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='JHBJNIADQ2IR585CYZOXWQPY572FK0YHY50YINS4MUPZADI64WITP85B4B1ETHHH3II4QZL4GS6E249AVCR2FUGJOR0STTEXYRRG5LC8EFXXU6837XF1WWFH7N5R38KHCB0YPAVASK2V5RHQI0QQX50OT8AUW4Y2GOAL2HTCJENGRVYIEXB46W7MMHQA0J9LDEVDIUUQKUPZIY2AFY1JNF53PDS5WYFJZJXXA05ZII8O9KPDS5VRCSAMWPYGBWR5P' where id=9; -update noar ti set v2='JHBJNIADQ2IR585CYZOXWQPY572FK0YHY50YINS4MUPZADI64WITP85B4B1ETHHH3II4QZL4GS6E249AVCR2FUGJOR0STTEXYRRG5LC8EFXXU6837XF1WWFH7N5R38KHCB0YPAVASK2V5RHQI0QQX50OT8AUW4Y2GOAL2HTCJENGRVYIEXB46W7MMHQA0J9LDEVDIUUQKUPZIY2AFY1JNF53PDS5WYFJZJXXA05ZII8O9KPDS5VRCSAMWPYGBWR5P' where id=9; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='H3W8RD7J0IY3SEMOYRZLNXUWP6SZIQXQMC9DH51RU8RP3IFJR61WY2VYYH78MYYJBWZYB4T1G14Y5783N5WLMAI08OXGWX0IBW53WY2O5QVTT1F6P9P7J4E8M7WMMAVO9UUTSBNUOHKFXQR6FX0QMZ2S5SE4HF2DNJE7QXB0OOMG8K1UQY9J7JE166BDUT3YLHVPH72EXGUKBHN7CA83F5YBM6H1RVFZW25NZLE6AK1GYYLH74SMFFTG3OG5NS5OK' where id=9; -update noar ti set v3='H3W8RD7J0IY3SEMOYRZLNXUWP6SZIQXQMC9DH51RU8RP3IFJR61WY2VYYH78MYYJBWZYB4T1G14Y5783N5WLMAI08OXGWX0IBW53WY2O5QVTT1F6P9P7J4E8M7WMMAVO9UUTSBNUOHKFXQR6FX0QMZ2S5SE4HF2DNJE7QXB0OOMG8K1UQY9J7JE166BDUT3YLHVPH72EXGUKBHN7CA83F5YBM6H1RVFZW25NZLE6AK1GYYLH74SMFFTG3OG5NS5OK' where id=9; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='NPQC5K1Y8D2FH4D9F4AY0KN8YUCM2XLJVH2W9FTWKG1UO69EEGFY8CCAT12G2R4TC472BSSJUJSEFPW5NW9AWLNOUGXXHIM8QSRRUCHE188K2JCGZY09ROGW8FPHOM32A8LQ6XRP32YNAGJOLS37XBOMGWQ05V9XRZ6SA79SNFBMEPG699IFAZGAG10HXIXPHYSNGPDSAJZ81QTWEV7H9VGF6UDT5873VZQV2DLZKFDGI0S8H4QIQEYHOVM9OCW61' where id=10; -update noar ti set v0='NPQC5K1Y8D2FH4D9F4AY0KN8YUCM2XLJVH2W9FTWKG1UO69EEGFY8CCAT12G2R4TC472BSSJUJSEFPW5NW9AWLNOUGXXHIM8QSRRUCHE188K2JCGZY09ROGW8FPHOM32A8LQ6XRP32YNAGJOLS37XBOMGWQ05V9XRZ6SA79SNFBMEPG699IFAZGAG10HXIXPHYSNGPDSAJZ81QTWEV7H9VGF6UDT5873VZQV2DLZKFDGI0S8H4QIQEYHOVM9OCW61' where id=10; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='TF6IWM7FXZE2YW7LAD000UFDXT46G74JRY1SWYK10KG98KP3I1SFT56Q7T9VPOJ0TLZ77BZIHE5VX5R6U2N8H1X9ZQG9ZI3TBQBO5IEPZE7M09QE8ADKSZWC0Q2GYNDDOG0JGMIIPNSGYU2F5MM5KKQ87RSYUMKSQPU8OVUDNTZ525OXVR9DHCBA5UV45X66QLT9XF6N2LYITP4GAA4ICD9UBDCNCQFRWMTO55OTOGJV6ESD5BWJ0E4JTNCLKISTA' where id=10; -update noar ti set v1='TF6IWM7FXZE2YW7LAD000UFDXT46G74JRY1SWYK10KG98KP3I1SFT56Q7T9VPOJ0TLZ77BZIHE5VX5R6U2N8H1X9ZQG9ZI3TBQBO5IEPZE7M09QE8ADKSZWC0Q2GYNDDOG0JGMIIPNSGYU2F5MM5KKQ87RSYUMKSQPU8OVUDNTZ525OXVR9DHCBA5UV45X66QLT9XF6N2LYITP4GAA4ICD9UBDCNCQFRWMTO55OTOGJV6ESD5BWJ0E4JTNCLKISTA' where id=10; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='Y74X1E1ZSSV0V3VH1YY9304X4Y0BYGXCOYFHFVIRI0MWOMRPSEZWJLN26DSJY7SF3304QQEBOE4ICDH4S5ZL7FY08BV4HV6MOHU57Q3QKI52U2K0LKDUP3SXV9ETYTYTW688OV9TMINUA2ZNJHZC6YYHQIRM59YCL8NI61GMMC3DOX436BU1AAABHLOV29AEN30DV9L0WL96FFIZOZHXZQJ2N2ZM1NBTFCMKO5WFKF5BB9PFJAFBWZXNPI0FG1SAE' where id=10; -update noar ti set v2='Y74X1E1ZSSV0V3VH1YY9304X4Y0BYGXCOYFHFVIRI0MWOMRPSEZWJLN26DSJY7SF3304QQEBOE4ICDH4S5ZL7FY08BV4HV6MOHU57Q3QKI52U2K0LKDUP3SXV9ETYTYTW688OV9TMINUA2ZNJHZC6YYHQIRM59YCL8NI61GMMC3DOX436BU1AAABHLOV29AEN30DV9L0WL96FFIZOZHXZQJ2N2ZM1NBTFCMKO5WFKF5BB9PFJAFBWZXNPI0FG1SAE' where id=10; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='8HMT8C2LH8AKHPP7Z33NRP8NZEAAY01FZCH9VO0LT6GXSBL8J4HAE7JT3O4R3PGW40HJK3CHV6T0B560SZH6IVHE6LILO0AR4TNVGUJKC4IU6RZRR9QS1ZN4E6LW9YMKWNK5I7OME75WTDL5QHZXP16SN6ZOD9Z8U488DEFJMZZ193MP7UHJVRQFSR67MY4JN047NGK284E2Y4HP31MWKSIYEFBBHS47CLR08ZJH7I91DKY32KC771VKW3LBVXPLG' where id=10; -update noar ti set v3='8HMT8C2LH8AKHPP7Z33NRP8NZEAAY01FZCH9VO0LT6GXSBL8J4HAE7JT3O4R3PGW40HJK3CHV6T0B560SZH6IVHE6LILO0AR4TNVGUJKC4IU6RZRR9QS1ZN4E6LW9YMKWNK5I7OME75WTDL5QHZXP16SN6ZOD9Z8U488DEFJMZZ193MP7UHJVRQFSR67MY4JN047NGK284E2Y4HP31MWKSIYEFBBHS47CLR08ZJH7I91DKY32KC771VKW3LBVXPLG' where id=10; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='G1PIUPV2DK6CK4M6UDBV8S4D9CHQ934NXHNP4Y8AWZNDY4VWF3EWL9I9FVM97C1LUL2UEUAP33MS0C8UFSVSXXPH8NI03NELI9I1L7OSA53KHNGSFMX5NDGQHEF2BJOJBW069143AYA78HJ6L9C9VX2X8BC53IAUFY5F0QA76LNOKDX10RBHEDLYKJOX9AAGK2KM81GRESU9C9ZUTGP1FNSVWV97M0RY7OKXWZINGMBSG5FPBS3UKE3OMQTAMZH24' where id=11; -update noar ti set v0='G1PIUPV2DK6CK4M6UDBV8S4D9CHQ934NXHNP4Y8AWZNDY4VWF3EWL9I9FVM97C1LUL2UEUAP33MS0C8UFSVSXXPH8NI03NELI9I1L7OSA53KHNGSFMX5NDGQHEF2BJOJBW069143AYA78HJ6L9C9VX2X8BC53IAUFY5F0QA76LNOKDX10RBHEDLYKJOX9AAGK2KM81GRESU9C9ZUTGP1FNSVWV97M0RY7OKXWZINGMBSG5FPBS3UKE3OMQTAMZH24' where id=11; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='1089YGSGCQC7EBSHXDXEKTG1B40ZGVS5ZOW6IHYHGVIB9VDZUYVG1PO8QOIL6JZN5XESZ4BEQ9M122BVSGPQVDKHA0VHLE5DENL07KTDIV4BPWPF0T9YKXZQN6V99MBKF3676VLA5A5S03F4ZD9K9PYX6RGPFOYFKFF1C5RFCJRY53IXGEL4K5AKNG7IULPXATM4384AQBMLPZBTJ9ABISHTHU5G3LLMV177H48TSJYR7BRFCE2PCP4GIJF9MZOBF' where id=11; -update noar ti set v1='1089YGSGCQC7EBSHXDXEKTG1B40ZGVS5ZOW6IHYHGVIB9VDZUYVG1PO8QOIL6JZN5XESZ4BEQ9M122BVSGPQVDKHA0VHLE5DENL07KTDIV4BPWPF0T9YKXZQN6V99MBKF3676VLA5A5S03F4ZD9K9PYX6RGPFOYFKFF1C5RFCJRY53IXGEL4K5AKNG7IULPXATM4384AQBMLPZBTJ9ABISHTHU5G3LLMV177H48TSJYR7BRFCE2PCP4GIJF9MZOBF' where id=11; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='B2DZ6JQ65DH37M765HN6PE6POJURGBVL34DC1IK9AUOGBPUIBLKXQ2BR0NT38GMY1EA3CBG964RGPPUQP631Q50ABJI9GRX95RXJ5WCQA864I3XYK0N8DSN93LP5MS9IQWRWKRO4IMM2SIR4KRN879DUXY5Y8H9RX3MYLSKC2C0CR9LGJYMNXAICQYON8JR6HUY6IR9K91ZQNIMSBBSHE0FA4YLI0G9ZH7UGC55BDNNXSWFR77241PM3M78E7A31C' where id=11; -update noar ti set v2='B2DZ6JQ65DH37M765HN6PE6POJURGBVL34DC1IK9AUOGBPUIBLKXQ2BR0NT38GMY1EA3CBG964RGPPUQP631Q50ABJI9GRX95RXJ5WCQA864I3XYK0N8DSN93LP5MS9IQWRWKRO4IMM2SIR4KRN879DUXY5Y8H9RX3MYLSKC2C0CR9LGJYMNXAICQYON8JR6HUY6IR9K91ZQNIMSBBSHE0FA4YLI0G9ZH7UGC55BDNNXSWFR77241PM3M78E7A31C' where id=11; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='EOOJW86E39PL7F6YDV949XGV9PBF5DYHTVW5W1JJGE661JT74AF3LMN1CYGQPQKDHS1IRY4JSL15S8DJC579THBSJZ2X6U6GOZXUKSGUNZTV6JOZOBNWGXCQKDL439PLRVTP7DLOUKWGX97HJBCHRPQYQRZ9JSJATZ0QHR6UBHVXGLBHWX2YPZRTW3BXLBJWHNCT5GUUA744IPBOG6RQKC5QZZZRVHA7ESYRZWY3S6B8FF8PM0EEW8G7JIO7EN8GC' where id=11; -update noar ti set v3='EOOJW86E39PL7F6YDV949XGV9PBF5DYHTVW5W1JJGE661JT74AF3LMN1CYGQPQKDHS1IRY4JSL15S8DJC579THBSJZ2X6U6GOZXUKSGUNZTV6JOZOBNWGXCQKDL439PLRVTP7DLOUKWGX97HJBCHRPQYQRZ9JSJATZ0QHR6UBHVXGLBHWX2YPZRTW3BXLBJWHNCT5GUUA744IPBOG6RQKC5QZZZRVHA7ESYRZWY3S6B8FF8PM0EEW8G7JIO7EN8GC' where id=11; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='KMPR9IT6KR3MVNV37YWY5E5P88QDA3N05PVNKHGGZM59J6HWWRE8MWRWWJOG440Q69N18BVHM214OR4ONP4R3M4BAFTSWCM5V4PH1H3CJ2SVYE20LW4OI0872NVYCRHDB58BC6QLSEP0O2WXBF0EPVO235Y6BX51QSAMK9S4WY0VVO6Y4ZACT3R03KPZKZGA6UIPVMFAVSTGF6KLFNNFBCNT58BZ4JVHZT96JELZ91TS57ZGUREHU9DSXUTG5LQ6S' where id=12; -update noar ti set v0='KMPR9IT6KR3MVNV37YWY5E5P88QDA3N05PVNKHGGZM59J6HWWRE8MWRWWJOG440Q69N18BVHM214OR4ONP4R3M4BAFTSWCM5V4PH1H3CJ2SVYE20LW4OI0872NVYCRHDB58BC6QLSEP0O2WXBF0EPVO235Y6BX51QSAMK9S4WY0VVO6Y4ZACT3R03KPZKZGA6UIPVMFAVSTGF6KLFNNFBCNT58BZ4JVHZT96JELZ91TS57ZGUREHU9DSXUTG5LQ6S' where id=12; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='7EE0CQ3NMTK6R1YYWA31YHM0PQGU2FMKNR381H3O2FA7ZBW1LIYWYQ21ENPTOA1WWW4IQXF0NMZBKUHNJVGGBK49JK9FWY06299Z66JUF65YJSWOQQMQ2R2KLGON57PCYDQ4AQEKFICIS5M0X36HHZCU8U9QIVESZ3JVDDGT7G19H5OCAIRUHOW20IOA15NXE37YFJFGGSN2SHOP9S0MMAZP8CYZBNZ0Z0M4W720ZXGL4EA2LYV6V24KBN7I0A9PB' where id=12; -update noar ti set v1='7EE0CQ3NMTK6R1YYWA31YHM0PQGU2FMKNR381H3O2FA7ZBW1LIYWYQ21ENPTOA1WWW4IQXF0NMZBKUHNJVGGBK49JK9FWY06299Z66JUF65YJSWOQQMQ2R2KLGON57PCYDQ4AQEKFICIS5M0X36HHZCU8U9QIVESZ3JVDDGT7G19H5OCAIRUHOW20IOA15NXE37YFJFGGSN2SHOP9S0MMAZP8CYZBNZ0Z0M4W720ZXGL4EA2LYV6V24KBN7I0A9PB' where id=12; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='6CAF8P27N9E6X9E5JCC40GMOLY7BQVTDEGVYP11VQN5RJ16O19E88Y3GI9XV9F2U03D2LFV9VCOF1U42B3Z8FTXNKK85DX4W1NZUNYUWFO9C4NC2C5DDGZQRNSB2KKXWED65FFB9QEZHA1PYBDYDYI7DKFSTV7W67ARIXL25S1T4DQU5VADD67PKUGLFANCP4A31CTOBTQKBL3NT3USH33QAJLE7WRBC9ZZ1JL00YWHRFIFVBR0X9JIZ8EZ60LZOK' where id=12; -update noar ti set v2='6CAF8P27N9E6X9E5JCC40GMOLY7BQVTDEGVYP11VQN5RJ16O19E88Y3GI9XV9F2U03D2LFV9VCOF1U42B3Z8FTXNKK85DX4W1NZUNYUWFO9C4NC2C5DDGZQRNSB2KKXWED65FFB9QEZHA1PYBDYDYI7DKFSTV7W67ARIXL25S1T4DQU5VADD67PKUGLFANCP4A31CTOBTQKBL3NT3USH33QAJLE7WRBC9ZZ1JL00YWHRFIFVBR0X9JIZ8EZ60LZOK' where id=12; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='ZQIV6F7BZFC8C74DSG0HDTQGMMZGLLJMI9HDQSJ1MA1H61L160RIJLTCD62TN7NNAVMGRAFGC6A7JHFAQDC8CP1BLB8X8SKUUZS36MP9NIKYSXJAX0GJWNYQG4GZALKC7QK0MIOG9QAAS3LYFFF4FCBMOKZYSDIUIIMOWTRK1J98EY6XQVAIJYCTY8MW95Q44Z6EFJHZL6EF28UE5YL8RL5I94Q2KFO01P9F3MTO4E7SSOK5B3TV7ANYKP4TE3L53' where id=12; -update noar ti set v3='ZQIV6F7BZFC8C74DSG0HDTQGMMZGLLJMI9HDQSJ1MA1H61L160RIJLTCD62TN7NNAVMGRAFGC6A7JHFAQDC8CP1BLB8X8SKUUZS36MP9NIKYSXJAX0GJWNYQG4GZALKC7QK0MIOG9QAAS3LYFFF4FCBMOKZYSDIUIIMOWTRK1J98EY6XQVAIJYCTY8MW95Q44Z6EFJHZL6EF28UE5YL8RL5I94Q2KFO01P9F3MTO4E7SSOK5B3TV7ANYKP4TE3L53' where id=12; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='KKYRHYP0AL4AF6TLSKTYX679JUVVSOHME36YHBYJGDO9W6Q7R1UU6G2KMGSFI4MBS57ZOS75N805F7QPBQK38R36NNUKTINPNJ4FYQQ8UBCI8CJVJD8Y2EKHM9GSJV1HMB7BQTM5V2NB2E2ROZZCFHNAQ0UX7QIKWPWV5LD128CEHRZ4YRRT666SIXEWN93KE7A73LNS0SHREGN2HNFRYAPYU50391B3RNVVGV74XCH2I7FW9B2AGEZTRQ16VYW52' where id=13; -update noar ti set v0='KKYRHYP0AL4AF6TLSKTYX679JUVVSOHME36YHBYJGDO9W6Q7R1UU6G2KMGSFI4MBS57ZOS75N805F7QPBQK38R36NNUKTINPNJ4FYQQ8UBCI8CJVJD8Y2EKHM9GSJV1HMB7BQTM5V2NB2E2ROZZCFHNAQ0UX7QIKWPWV5LD128CEHRZ4YRRT666SIXEWN93KE7A73LNS0SHREGN2HNFRYAPYU50391B3RNVVGV74XCH2I7FW9B2AGEZTRQ16VYW52' where id=13; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='LAK6WXGZNEMT4DWCQLT8WTP5OTJXQAX09QG44BF33SI98W7CELG2ZCEGGGCD3ETGLQG0MGFYZOC153SCQE67JJK64HE44NR2YRSTVYSM2ERGWU80CXZZU3V9FJJA85J32B3FPURONU28FO9CRQVDQK3D5EDSQZG775RGYKQJ37QBZWCHQFJ24WK3T0PFKCCP1JY3QWYVO0D5IWP63QR6H69X5PNHCYNL7ST932F6WYHKWZAUH3IS747WC2CQ94WTZ' where id=13; -update noar ti set v1='LAK6WXGZNEMT4DWCQLT8WTP5OTJXQAX09QG44BF33SI98W7CELG2ZCEGGGCD3ETGLQG0MGFYZOC153SCQE67JJK64HE44NR2YRSTVYSM2ERGWU80CXZZU3V9FJJA85J32B3FPURONU28FO9CRQVDQK3D5EDSQZG775RGYKQJ37QBZWCHQFJ24WK3T0PFKCCP1JY3QWYVO0D5IWP63QR6H69X5PNHCYNL7ST932F6WYHKWZAUH3IS747WC2CQ94WTZ' where id=13; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='XR7TCJ6SWY37YMKIA30A6P0UN4VFV8LE5NP9W074DP0D0CTKAVNJ3GSITM7XH0IDN4TS1XGRX890Z1B54YHOV05L3XBWI7NLB07IM1EOGWZGK2PT8JYS0PN4NOJYPJ9NM1VARNSL2F2T9R4F7OOS2UPI62PXGO0RHSM1XLTMKX49TJSIB7NA7QH5W0O6SE7TPEDEEU59MF7WWMKGJC2T7IVUGUA6CTZ0ULQBXPUB709EONRI5REKAGOHZ5KRUPM80' where id=13; -update noar ti set v2='XR7TCJ6SWY37YMKIA30A6P0UN4VFV8LE5NP9W074DP0D0CTKAVNJ3GSITM7XH0IDN4TS1XGRX890Z1B54YHOV05L3XBWI7NLB07IM1EOGWZGK2PT8JYS0PN4NOJYPJ9NM1VARNSL2F2T9R4F7OOS2UPI62PXGO0RHSM1XLTMKX49TJSIB7NA7QH5W0O6SE7TPEDEEU59MF7WWMKGJC2T7IVUGUA6CTZ0ULQBXPUB709EONRI5REKAGOHZ5KRUPM80' where id=13; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='HSN6YMIJAXLMEEIW4TNEY99KCC3Y75PT91I2036Z0RPD9RNH1534GPRRDP475O3EPYH92QUB5031TPFKRTSRDKOCFQ4HLSOAMUP7PSFEE02SLXPZ38DR6TO97G9FAKHT9VK1RRMFI428LBRZL72YFQ0DTVSKJXWERUE1655ZH4LGAAI7ERIV8KEP7WVZN1K4DBPKD4RM7XI5MY7ZR6IPFQLXVACBVA62ITUUDYL7XYADFQXVV2NJ5ZIGWLBCMJY8A' where id=13; -update noar ti set v3='HSN6YMIJAXLMEEIW4TNEY99KCC3Y75PT91I2036Z0RPD9RNH1534GPRRDP475O3EPYH92QUB5031TPFKRTSRDKOCFQ4HLSOAMUP7PSFEE02SLXPZ38DR6TO97G9FAKHT9VK1RRMFI428LBRZL72YFQ0DTVSKJXWERUE1655ZH4LGAAI7ERIV8KEP7WVZN1K4DBPKD4RM7XI5MY7ZR6IPFQLXVACBVA62ITUUDYL7XYADFQXVV2NJ5ZIGWLBCMJY8A' where id=13; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='DPGL9XGJWM0OHS8TV1CAI4G6WJWBKQOHE9BMN4FTO918WVPAR9PG1MJMUI5Q4PJ640S1R71QLMDJLU0J070TVUVC321UNM8MXKVG622ZZWWW3LIVGAWUM81KTHNYT3H72J317ECJLQWXVQ6J3I5594LE3Z0SDA0SCPH7IHN8SV6D3TXTMLF6SWFD5P3T5V7KP5Q177662SGUX4NS1ZDH0RR3ENKUCZ4C2MYLX8NZCGZWYNGF48L1JX7GUYPMW9XXO' where id=14; -update noar ti set v0='DPGL9XGJWM0OHS8TV1CAI4G6WJWBKQOHE9BMN4FTO918WVPAR9PG1MJMUI5Q4PJ640S1R71QLMDJLU0J070TVUVC321UNM8MXKVG622ZZWWW3LIVGAWUM81KTHNYT3H72J317ECJLQWXVQ6J3I5594LE3Z0SDA0SCPH7IHN8SV6D3TXTMLF6SWFD5P3T5V7KP5Q177662SGUX4NS1ZDH0RR3ENKUCZ4C2MYLX8NZCGZWYNGF48L1JX7GUYPMW9XXO' where id=14; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='82DXNVL7DOKCTQ7FAK8SCL8BTL9J7905QF9TY3NZE08VWBT641HD7F8JWDIB93D1R8T701TNBP819NBN6HTFU88QPOWLQQ9B56YYCR3UPN5YCGEA7X7CK318OM1DIVPN9AM93OQVUGMIXGWK8569CHDAFYJTXNPWIJSHQE0Q3SERS1DB9PQ1WB399LI11YNZ9SY399TUSY4QIKHP0EUNXWKMVQDPNT7Z545T1L534HXP5NG7NES13QJZHPATNN16L' where id=14; -update noar ti set v1='82DXNVL7DOKCTQ7FAK8SCL8BTL9J7905QF9TY3NZE08VWBT641HD7F8JWDIB93D1R8T701TNBP819NBN6HTFU88QPOWLQQ9B56YYCR3UPN5YCGEA7X7CK318OM1DIVPN9AM93OQVUGMIXGWK8569CHDAFYJTXNPWIJSHQE0Q3SERS1DB9PQ1WB399LI11YNZ9SY399TUSY4QIKHP0EUNXWKMVQDPNT7Z545T1L534HXP5NG7NES13QJZHPATNN16L' where id=14; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='E6B4AB06MLZYTMXVDN3BPX4JF1IPDXANJEZ1NE8RXK0QQN6AHFFGQSDQ3YM0A7VUQ8SZTLS7ASLAABRUSBLQMMRB5E85AG1SFH2NLKXZNSC4QSYQ2KO785ZGZATCCZAQ83XSF31B27IBIIYSXTG6ZPID6R74YW6EMUPATOCUOKRN1KPMNFZ926OC6K4T0EFA3E69FM0TN2MJI8G2JPKLK4NERIRGQ9OLNCSEM15FS0M3NCZV9O86V65A028S2IL9Z' where id=14; -update noar ti set v2='E6B4AB06MLZYTMXVDN3BPX4JF1IPDXANJEZ1NE8RXK0QQN6AHFFGQSDQ3YM0A7VUQ8SZTLS7ASLAABRUSBLQMMRB5E85AG1SFH2NLKXZNSC4QSYQ2KO785ZGZATCCZAQ83XSF31B27IBIIYSXTG6ZPID6R74YW6EMUPATOCUOKRN1KPMNFZ926OC6K4T0EFA3E69FM0TN2MJI8G2JPKLK4NERIRGQ9OLNCSEM15FS0M3NCZV9O86V65A028S2IL9Z' where id=14; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='6LDFMFYW502S2CSL96GBL7QA8XCCUYLK169ZSLQX56BPN3PPTUPYMVQ6A4M87CNJ4IKOE3KRAD82AZS4EOIJLHQPDKH9PTTF3WDOVHAJON303YISYMOQMFNJ22RD1M4I08WP8II1FNG9VYE9WGKB4J7DJ3EI5512GBJDRT7SY956EDR77UN3XA0E7JPVDIJ3OQ2IIHI1O6GGQ9J5HVXVT2I4UIBWDTRBJVK1D9GRKVXWWIGOTGSBVA5C7STCV3QTT' where id=14; -update noar ti set v3='6LDFMFYW502S2CSL96GBL7QA8XCCUYLK169ZSLQX56BPN3PPTUPYMVQ6A4M87CNJ4IKOE3KRAD82AZS4EOIJLHQPDKH9PTTF3WDOVHAJON303YISYMOQMFNJ22RD1M4I08WP8II1FNG9VYE9WGKB4J7DJ3EI5512GBJDRT7SY956EDR77UN3XA0E7JPVDIJ3OQ2IIHI1O6GGQ9J5HVXVT2I4UIBWDTRBJVK1D9GRKVXWWIGOTGSBVA5C7STCV3QTT' where id=14; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='146QAZLKFPU3ZM0GRPSDLF2TK6Z58210ZYJPVT7CWQHXSVW7K5Y7PNA5YDV4MPC0S5AY4UQMEGJVLQDV4KAMP6RWHUBOZI7B8MEV1D1V3TXFG52O6YJUAVD4BZMTCC5DWNBETALYMI41TDHEXLFFRVUY1D9I3FU0528U39GYMZFO4TR43W78HJG90S19V92O84H800PP6IT7PWOM3T94F5XC01QEHT0FN5AIEGGXCQ3VXZK542W0RDHITV8KBJ4BD' where id=15; -update noar ti set v0='146QAZLKFPU3ZM0GRPSDLF2TK6Z58210ZYJPVT7CWQHXSVW7K5Y7PNA5YDV4MPC0S5AY4UQMEGJVLQDV4KAMP6RWHUBOZI7B8MEV1D1V3TXFG52O6YJUAVD4BZMTCC5DWNBETALYMI41TDHEXLFFRVUY1D9I3FU0528U39GYMZFO4TR43W78HJG90S19V92O84H800PP6IT7PWOM3T94F5XC01QEHT0FN5AIEGGXCQ3VXZK542W0RDHITV8KBJ4BD' where id=15; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='0N2RODYAYB3DCVX0VXJPRMGIN0K5VFAFK8JPOV2GX173DM8JNLS2XEABOC1CUBU80KE6PGNC8MESOV2TUQK0V71XQMHKBWVWHUNXQ8VAW4LD71B7QTV8WXBLG4LN95IJCU35O6WST1VPWIW4YD0RKYF2P2AFRB7S56U5YLJ1AP9UEGDR92XQKIHIZ1HHP58SDCIP5BG44ZRLYJ7II1664K70MFIHRJDDEP4DRUVXTOU4BMI96QA6X7FWXOJ964Z2Q' where id=15; -update noar ti set v1='0N2RODYAYB3DCVX0VXJPRMGIN0K5VFAFK8JPOV2GX173DM8JNLS2XEABOC1CUBU80KE6PGNC8MESOV2TUQK0V71XQMHKBWVWHUNXQ8VAW4LD71B7QTV8WXBLG4LN95IJCU35O6WST1VPWIW4YD0RKYF2P2AFRB7S56U5YLJ1AP9UEGDR92XQKIHIZ1HHP58SDCIP5BG44ZRLYJ7II1664K70MFIHRJDDEP4DRUVXTOU4BMI96QA6X7FWXOJ964Z2Q' where id=15; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='TIXCEEPHSANG8VF2C9PPVYNVO5EFI1HVXI1XYL6DAJSD29GV2RT0G0HAFUBK42PZ42ONOKEBGXYHXKUAFQCY8ZFJYVKVUQQ3196UD436GYD373SMSHW7UEGE4L9BRJOKNFPPBEXBG4TD1WWJVJCX42BF8PYPDAY1F375KNVWW3L31EUXL311GSKD6LEL3T0BDDS5KXGBFDHDHNJAWELYLG1Z5Q0GP2BKY0VMASFIFND7B0ZPTH8QPPZIX9DJH8WE3' where id=15; -update noar ti set v2='TIXCEEPHSANG8VF2C9PPVYNVO5EFI1HVXI1XYL6DAJSD29GV2RT0G0HAFUBK42PZ42ONOKEBGXYHXKUAFQCY8ZFJYVKVUQQ3196UD436GYD373SMSHW7UEGE4L9BRJOKNFPPBEXBG4TD1WWJVJCX42BF8PYPDAY1F375KNVWW3L31EUXL311GSKD6LEL3T0BDDS5KXGBFDHDHNJAWELYLG1Z5Q0GP2BKY0VMASFIFND7B0ZPTH8QPPZIX9DJH8WE3' where id=15; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='BU80H39TADLUV4GHJFTHN2SRHDQI318ZBYGM08761OJ3SIURCB9U1BEQGQR8TQN0IFPBHMYFNG5S4TIYX465KSSGSIYWNV578MFHH6YWL4YZ2V6FMRNANCKGWN28KM3885S8GSV6V43F9BW4NJ00RR11C01MO1Y12RNV1GC87JFCHVKWHWYKP0GXP8W0ZXKVAL7P4CS3RJQ0QJL4UI2EN3K8NJVCM5EO4CR5QJGEGNAXSJQL27AQ7WLHVH0YI7Q6P' where id=15; -update noar ti set v3='BU80H39TADLUV4GHJFTHN2SRHDQI318ZBYGM08761OJ3SIURCB9U1BEQGQR8TQN0IFPBHMYFNG5S4TIYX465KSSGSIYWNV578MFHH6YWL4YZ2V6FMRNANCKGWN28KM3885S8GSV6V43F9BW4NJ00RR11C01MO1Y12RNV1GC87JFCHVKWHWYKP0GXP8W0ZXKVAL7P4CS3RJQ0QJL4UI2EN3K8NJVCM5EO4CR5QJGEGNAXSJQL27AQ7WLHVH0YI7Q6P' where id=15; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='1MC1WBDNA6FE50LO20BN3F7JE269P183R332QGGYOL6XI4NRO05YTFGQCVCOHRG231G2CLFYFRG20T7HU7J06DJUWRIHBQ0Q8TT2TWGNDBPQPYWMOFY2UUAY06PD79DNAJMBZJ9YL4WEYVQZAM2YLXN1TKB1PQ9ZIHZ5BHWKVQ7A1WPFN60MBQS6I2D5H38X607QW0EORB2CGF0FKMM22F1OMD6UWU12XHZLKJ1IQJMOD0AE1PUI8XWXDLDM1OVV0' where id=16; -update noar ti set v0='1MC1WBDNA6FE50LO20BN3F7JE269P183R332QGGYOL6XI4NRO05YTFGQCVCOHRG231G2CLFYFRG20T7HU7J06DJUWRIHBQ0Q8TT2TWGNDBPQPYWMOFY2UUAY06PD79DNAJMBZJ9YL4WEYVQZAM2YLXN1TKB1PQ9ZIHZ5BHWKVQ7A1WPFN60MBQS6I2D5H38X607QW0EORB2CGF0FKMM22F1OMD6UWU12XHZLKJ1IQJMOD0AE1PUI8XWXDLDM1OVV0' where id=16; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='S2KUJFIG0MEZ8EVL9BA9FGB2BJNNPLSGDJ9M87YQTRLGIJJN1WUG42JLI3M0HUC436F3PPEYJ10YIDVFJ2F30F38NIKD5Y2FH5LY01VJRIVQWZQ8CKJ4LTFMHQOBY79DVT8XLQTUN8LQOP0J3PVQA0VIUZZ9HFGA69C288MSTEA073X2CL75EO6FBEJMPGP7AXUHYIOA7FY6A7EP3ZWB37RUGICAVG4OW0P5YSLXXLN50TZBDQ6XGAFTWLE6RCNB1' where id=16; -update noar ti set v1='S2KUJFIG0MEZ8EVL9BA9FGB2BJNNPLSGDJ9M87YQTRLGIJJN1WUG42JLI3M0HUC436F3PPEYJ10YIDVFJ2F30F38NIKD5Y2FH5LY01VJRIVQWZQ8CKJ4LTFMHQOBY79DVT8XLQTUN8LQOP0J3PVQA0VIUZZ9HFGA69C288MSTEA073X2CL75EO6FBEJMPGP7AXUHYIOA7FY6A7EP3ZWB37RUGICAVG4OW0P5YSLXXLN50TZBDQ6XGAFTWLE6RCNB1' where id=16; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='ECWAIFYYPPCUPR9NY17BMBFKVG4N2XYM9ZFG7I4RLCKDNS2QT4JS2VQLHOHSP8V40MBWRK89IX1L2OEXWWWSCZCC2AZS9ZBPPOGMD5TT0NLDMBDCD7E3PI6X58QQEI1297O7B3SHQ8O5BOX2871SIRG8NWE2LA0OY22HVDO3QLDVHHK13DUP214FHUNORTX5QIFV4R28KCU5T7KSNL0X4N1FKVPVAQEF14K8OBRRUZZA22QKAT239BXR66DPLQTTF' where id=16; -update noar ti set v2='ECWAIFYYPPCUPR9NY17BMBFKVG4N2XYM9ZFG7I4RLCKDNS2QT4JS2VQLHOHSP8V40MBWRK89IX1L2OEXWWWSCZCC2AZS9ZBPPOGMD5TT0NLDMBDCD7E3PI6X58QQEI1297O7B3SHQ8O5BOX2871SIRG8NWE2LA0OY22HVDO3QLDVHHK13DUP214FHUNORTX5QIFV4R28KCU5T7KSNL0X4N1FKVPVAQEF14K8OBRRUZZA22QKAT239BXR66DPLQTTF' where id=16; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='M7TE8AOGANMM3OR3PGXSTGY8E9CD4T4LBWW9JKQR1DGWM4V3C1PQRZ01FBBUEWUDNDLYIG37B6ZSJ8IVNULWMHHG3YWLTKO37V46C5CQ6TAVR9HLXM5US8VB0UJE5GIBOGEP1BRMXDYZYBRFFW9VCWC7WFFMZGOS93HKGGX7IZ3FQAZNJXU58I6HQ13H8MS3A3M1ZEGLAFCDRDLE67FDP1L41Z3WLTFJDB7FQGMRTLLLH8MY6ARTDEPPM3YS45JPD' where id=16; -update noar ti set v3='M7TE8AOGANMM3OR3PGXSTGY8E9CD4T4LBWW9JKQR1DGWM4V3C1PQRZ01FBBUEWUDNDLYIG37B6ZSJ8IVNULWMHHG3YWLTKO37V46C5CQ6TAVR9HLXM5US8VB0UJE5GIBOGEP1BRMXDYZYBRFFW9VCWC7WFFMZGOS93HKGGX7IZ3FQAZNJXU58I6HQ13H8MS3A3M1ZEGLAFCDRDLE67FDP1L41Z3WLTFJDB7FQGMRTLLLH8MY6ARTDEPPM3YS45JPD' where id=16; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='22NCVZ1Q0AFW4FMGZ1I3DXBPISMBTAXDAU945RRMACDJYF44T8AOMJP0VQ8PCPBG5RP3JNUIUCM07SPGVG8A3FL63OWQYKFAESXP2G1FXGK0IKQI94MCOETOD9JKON7A77LXCGMZ2S0Y8Y3YTOR4MUHWC4EFLL7EI99SSPYG69SI0MMESE3FZP0QJHQMF42K58UF0HIKJ6V0AY7ITFIYXNWPMGJ6QLMF9DMYCLODEXVZZM4PARFZ3M28XP9CE8HWF' where id=17; -update noar ti set v0='22NCVZ1Q0AFW4FMGZ1I3DXBPISMBTAXDAU945RRMACDJYF44T8AOMJP0VQ8PCPBG5RP3JNUIUCM07SPGVG8A3FL63OWQYKFAESXP2G1FXGK0IKQI94MCOETOD9JKON7A77LXCGMZ2S0Y8Y3YTOR4MUHWC4EFLL7EI99SSPYG69SI0MMESE3FZP0QJHQMF42K58UF0HIKJ6V0AY7ITFIYXNWPMGJ6QLMF9DMYCLODEXVZZM4PARFZ3M28XP9CE8HWF' where id=17; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='X4UN0BAM3WBARYX8IFUL9UIEE16IFFIW1J0P2PGSDW8MWXN4B700VQTYIV7RARVAV4D5DGZYVXJYE9EUZV3QGLXKQG6PGCE4LTJO7LOUJTIPP1ENDGUYSQFFWO5HEU7ZS5WZH403C5WBI3O27HVMPA22TEST6M02UC4SEBKQB5RCTKWO5Y42A5VMVJJI69VEP5NPX9QFOMHPIS94LD4HDU0GTGB0K2EZXG448PGMYKMF152ERO7AEZ0NKG6RJ0Q5F' where id=17; -update noar ti set v1='X4UN0BAM3WBARYX8IFUL9UIEE16IFFIW1J0P2PGSDW8MWXN4B700VQTYIV7RARVAV4D5DGZYVXJYE9EUZV3QGLXKQG6PGCE4LTJO7LOUJTIPP1ENDGUYSQFFWO5HEU7ZS5WZH403C5WBI3O27HVMPA22TEST6M02UC4SEBKQB5RCTKWO5Y42A5VMVJJI69VEP5NPX9QFOMHPIS94LD4HDU0GTGB0K2EZXG448PGMYKMF152ERO7AEZ0NKG6RJ0Q5F' where id=17; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='YKCOYH0X4PMF0N25DGDSMYP7B4446O9NLP99L9P9BV6C80UD5J0RFDI7KV1XEB0MYWT3JGHD25ZXJQKMSQU257V4STCBVLLCNUPGBY1KUMLS07SCFOSS5MKWZ67LMRXVB494VEGK3B102L268GGTNSPPD0JDYWVHJ9C0KZ25WDT4HM0PTOGMNH5QP6RLSYXA12QZHQE7Z8NWWNXJALMT8RXAA4PBYDVX8QQMQ3DFWX735U04MPAIYO408FGK7YCNS' where id=17; -update noar ti set v2='YKCOYH0X4PMF0N25DGDSMYP7B4446O9NLP99L9P9BV6C80UD5J0RFDI7KV1XEB0MYWT3JGHD25ZXJQKMSQU257V4STCBVLLCNUPGBY1KUMLS07SCFOSS5MKWZ67LMRXVB494VEGK3B102L268GGTNSPPD0JDYWVHJ9C0KZ25WDT4HM0PTOGMNH5QP6RLSYXA12QZHQE7Z8NWWNXJALMT8RXAA4PBYDVX8QQMQ3DFWX735U04MPAIYO408FGK7YCNS' where id=17; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='KP5DX5S0B9VS9WHXSAUMNKM63GIM0SPCC413Y4SHO4ODNKLVFFZ0AM0CD7C929UPOP2MFJGVS8Z1NKJBC5TIRRKZ58C6HZ61K2DLFN0QMS6H4XNWYNULB708SW2RTHCRLY8TJ6D3400IL3SYAIJ2GCT1I3FD95WY3IY8WB7RF1YAS2A18J5FY161W2G14B444KM2LAEJ8N6B20HMYJ6S280TQH77EMS2ZOGE0ANW1KQZIZYW64W0SZNUZ0VLNBXB0' where id=17; -update noar ti set v3='KP5DX5S0B9VS9WHXSAUMNKM63GIM0SPCC413Y4SHO4ODNKLVFFZ0AM0CD7C929UPOP2MFJGVS8Z1NKJBC5TIRRKZ58C6HZ61K2DLFN0QMS6H4XNWYNULB708SW2RTHCRLY8TJ6D3400IL3SYAIJ2GCT1I3FD95WY3IY8WB7RF1YAS2A18J5FY161W2G14B444KM2LAEJ8N6B20HMYJ6S280TQH77EMS2ZOGE0ANW1KQZIZYW64W0SZNUZ0VLNBXB0' where id=17; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='WG6VAJUZN27NNW1XPD5RV9L46GQ0L7CGMJNTASQ4VOU4I1GWFUHDTVQ6031OQ5Y3NIAK2EGTQMVKK1HB4LIVH0BQYWR0J3M3GSIKKJHE0Y0K0186HD1JC0GQR579TVQODPNQ89EEJ8Q8FDIXLJ6UWZA6R8LZRENI6OD6MXZS1YCS0C0CGBLCC48GAYGZWZ0PI3EJ22U21J21T4ZHFYBP97ZTM9I7JNMLA9IEE06X2S9EHGLDVW11BSR4EGQIXNW4W' where id=18; -update noar ti set v0='WG6VAJUZN27NNW1XPD5RV9L46GQ0L7CGMJNTASQ4VOU4I1GWFUHDTVQ6031OQ5Y3NIAK2EGTQMVKK1HB4LIVH0BQYWR0J3M3GSIKKJHE0Y0K0186HD1JC0GQR579TVQODPNQ89EEJ8Q8FDIXLJ6UWZA6R8LZRENI6OD6MXZS1YCS0C0CGBLCC48GAYGZWZ0PI3EJ22U21J21T4ZHFYBP97ZTM9I7JNMLA9IEE06X2S9EHGLDVW11BSR4EGQIXNW4W' where id=18; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='4HQWT2BPJW5BDQ0ZBVVOVNQS9RU4BA34KG25AHJVZ1XBKKKN8RBUC8UHW70N359XMPGPJE6N7Q59J83L1KB8JOO71NB0T7AYWPLZUH56EJZWBCWVHHYVMF7M5IMSISEXIFAKF65JH7LCL0YCCLLMF794G2SZQ811PMPVWF1X8QQQJFETEYTOD6NPB8BXXPRW5AYNA5I9MOAGR09QD7B9D70SUL4OBGSRZHNSW4EM5VMBSY97R84G91DGW24EB1KV4' where id=18; -update noar ti set v1='4HQWT2BPJW5BDQ0ZBVVOVNQS9RU4BA34KG25AHJVZ1XBKKKN8RBUC8UHW70N359XMPGPJE6N7Q59J83L1KB8JOO71NB0T7AYWPLZUH56EJZWBCWVHHYVMF7M5IMSISEXIFAKF65JH7LCL0YCCLLMF794G2SZQ811PMPVWF1X8QQQJFETEYTOD6NPB8BXXPRW5AYNA5I9MOAGR09QD7B9D70SUL4OBGSRZHNSW4EM5VMBSY97R84G91DGW24EB1KV4' where id=18; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='FODMS2CIVRIXOZJ4YZNX12A32R5V5PT6GL0ODOQ90N7T8YRI2KQYOHGKWIJ0XH10W7WJSA3R4U7HGYY4M2V1S2ATTTYLLYPZ3EZM2X6THUF16FQOC6CBQR2B01E4E3QVAKP2YPWKXE0QJQO8JPK2EZRE7Y8WGSFGLY3HVXUHPG8MBY6G6IQFML3KZC1ZKZUMQH9B4CSQ83N64KWY1Y043V75HV3RNW25TZ49V5V53GM6RMLP84KBAPSX0404BG928' where id=18; -update noar ti set v2='FODMS2CIVRIXOZJ4YZNX12A32R5V5PT6GL0ODOQ90N7T8YRI2KQYOHGKWIJ0XH10W7WJSA3R4U7HGYY4M2V1S2ATTTYLLYPZ3EZM2X6THUF16FQOC6CBQR2B01E4E3QVAKP2YPWKXE0QJQO8JPK2EZRE7Y8WGSFGLY3HVXUHPG8MBY6G6IQFML3KZC1ZKZUMQH9B4CSQ83N64KWY1Y043V75HV3RNW25TZ49V5V53GM6RMLP84KBAPSX0404BG928' where id=18; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='1BTDX55UWNACA9AKC3OQOKE16GD6SN1JD9DOHRBSC59XAGJLBS12CRXEZ1TI3V109IFQFP3GH9U61SW7MDVNK27V0X0Z3MN8L8LY728C4W80CI3C6N3J1PGQDKOKW0LWE2S5A2D7XQYK9PXEYXRKQBQZU4SOGXMONV7Y5WJC0DV1HUF4ET6HLR4GNTNI955LAEA5XXWNOM8C7NJ8ZXFXU8Y6YRECWIK1280SSZDZQ2YLC2GP6ID3FN18JQPB8DQ9Y' where id=18; -update noar ti set v3='1BTDX55UWNACA9AKC3OQOKE16GD6SN1JD9DOHRBSC59XAGJLBS12CRXEZ1TI3V109IFQFP3GH9U61SW7MDVNK27V0X0Z3MN8L8LY728C4W80CI3C6N3J1PGQDKOKW0LWE2S5A2D7XQYK9PXEYXRKQBQZU4SOGXMONV7Y5WJC0DV1HUF4ET6HLR4GNTNI955LAEA5XXWNOM8C7NJ8ZXFXU8Y6YRECWIK1280SSZDZQ2YLC2GP6ID3FN18JQPB8DQ9Y' where id=18; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='3S3UA4ROC3XQNGKW81PUL9LQDN01654SV1WKXSV0BY6Q0JFQN6AJI32AC18FEG18W1OVCFS7XV32ID493YWVFDRB4Z8TDDKI7LI477FFPFMGTN2G7EZFA8CL59KKOKKFMY2U57FKVUD9XJJJ5X81LP8WQ9LO3WKVLW3DFMRY9G096KJFLLI0W57FNTIZQB7OLH5I99N45FREQVT2LB0B5QGEIHLVKC1WUEVZK85MOIEIQ21N71SEDSBJP52I9PL4W' where id=19; -update noar ti set v0='3S3UA4ROC3XQNGKW81PUL9LQDN01654SV1WKXSV0BY6Q0JFQN6AJI32AC18FEG18W1OVCFS7XV32ID493YWVFDRB4Z8TDDKI7LI477FFPFMGTN2G7EZFA8CL59KKOKKFMY2U57FKVUD9XJJJ5X81LP8WQ9LO3WKVLW3DFMRY9G096KJFLLI0W57FNTIZQB7OLH5I99N45FREQVT2LB0B5QGEIHLVKC1WUEVZK85MOIEIQ21N71SEDSBJP52I9PL4W' where id=19; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='X1IR527G5348PF69D1VVJQGI14U8TRI6GO0QPOHD5F1X0IUQZ4HC0O3XO9C4R01ZLWZH9LQR5ULGU3N45XZ0NHBYEQS2FIWBX2LYNLYM4U7WVM9Y3EMP4D9JIRHKVG5QSKRUUEALNZBAE78WUQHCD39PR4JJO5N4ALHK3OHEJU5M32A6S7UWFO15P0LA48D6VVKMUM7KY8JMOVUP1I2QGP8NUJ1TAYJXNES8W24CIYJXRTVF1AVU71TIC9QA07LOF' where id=19; -update noar ti set v1='X1IR527G5348PF69D1VVJQGI14U8TRI6GO0QPOHD5F1X0IUQZ4HC0O3XO9C4R01ZLWZH9LQR5ULGU3N45XZ0NHBYEQS2FIWBX2LYNLYM4U7WVM9Y3EMP4D9JIRHKVG5QSKRUUEALNZBAE78WUQHCD39PR4JJO5N4ALHK3OHEJU5M32A6S7UWFO15P0LA48D6VVKMUM7KY8JMOVUP1I2QGP8NUJ1TAYJXNES8W24CIYJXRTVF1AVU71TIC9QA07LOF' where id=19; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='KJ7ZA27HMCST439WCTJV138RKVKCGWQ0D36I65SR0MBFA75FTG1MTL5JR4921Z3JYOSAERNSVJY0LXD29XZ7XHYA3EXIEIGF3WMZKRPMV08SLEGHQTJ88I48HP96JWJBWGB8V198HLQV8LP2IUPSLWFIJD0M35JAN4J54PB9I8N7VCV3MOCSUZOUSD43CYFCRL3CJ1GSZ4Q6E6SJ8J5UUC1ZU51QYFH2EZ1KF9ZD2416THENRTG8IE2MJFHMJX7J5' where id=19; -update noar ti set v2='KJ7ZA27HMCST439WCTJV138RKVKCGWQ0D36I65SR0MBFA75FTG1MTL5JR4921Z3JYOSAERNSVJY0LXD29XZ7XHYA3EXIEIGF3WMZKRPMV08SLEGHQTJ88I48HP96JWJBWGB8V198HLQV8LP2IUPSLWFIJD0M35JAN4J54PB9I8N7VCV3MOCSUZOUSD43CYFCRL3CJ1GSZ4Q6E6SJ8J5UUC1ZU51QYFH2EZ1KF9ZD2416THENRTG8IE2MJFHMJX7J5' where id=19; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='55UKNY3IE2N16U0HZ2O9Q0L515BSAK0J5W80LPSZ4QUN105EKN5IOU9PW6WB1AME17JZT9WV6QH1GWIC56732TMYD7E1MW4ZAMQL49O9Z1HKSIV6C0URGKBFC2MDGLE7J19TQK5RP9MD7331FPII0ZMZFWC1ZAI61GJI3ARQ1SEZVTAI7N6C4XFUAYPKNIVMYE4U343HL1F0KLGGSG7HXMG5L1F1ZW8Q9LLQCXORQPBX1MWUJBXIMD1JD4DI83HHW' where id=19; -update noar ti set v3='55UKNY3IE2N16U0HZ2O9Q0L515BSAK0J5W80LPSZ4QUN105EKN5IOU9PW6WB1AME17JZT9WV6QH1GWIC56732TMYD7E1MW4ZAMQL49O9Z1HKSIV6C0URGKBFC2MDGLE7J19TQK5RP9MD7331FPII0ZMZFWC1ZAI61GJI3ARQ1SEZVTAI7N6C4XFUAYPKNIVMYE4U343HL1F0KLGGSG7HXMG5L1F1ZW8Q9LLQCXORQPBX1MWUJBXIMD1JD4DI83HHW' where id=19; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='9A4B5GRQGF4NXLB6WTBXEO2T5G18CTDFXNN2Y0S9MJTN6V3VOWVTG8R3KG4UQDPXZV9SOZ9EHJT3CTJJKF5MRRAYTF87592OWN6QMOOGS8N37NK45Y93DA8ZVQ2NT1XPOKJFOGDOFWD2TY92XYMWGSS2L8DYCZ6TWBM4H94Y62WNHJP5T7P7EBBBG40H4TT51FMBE2Z4X0SN5FTFFB0A7IL3HEF6APLWAG9P2RKCHFA0M9YXWIGX5MFUWLBO5E3N5' where id=20; -update noar ti set v0='9A4B5GRQGF4NXLB6WTBXEO2T5G18CTDFXNN2Y0S9MJTN6V3VOWVTG8R3KG4UQDPXZV9SOZ9EHJT3CTJJKF5MRRAYTF87592OWN6QMOOGS8N37NK45Y93DA8ZVQ2NT1XPOKJFOGDOFWD2TY92XYMWGSS2L8DYCZ6TWBM4H94Y62WNHJP5T7P7EBBBG40H4TT51FMBE2Z4X0SN5FTFFB0A7IL3HEF6APLWAG9P2RKCHFA0M9YXWIGX5MFUWLBO5E3N5' where id=20; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='ZLG2AY5DRT5OVNO77Z2IU9NQMV8FPO431XBAROHR1FXIY2YVEIOXPNZ22ZMED2ECTPEOLNEWN3EDMYATY32J2QEI5XRJS242T28BXH79PCVYMHDVEV2LVINDRDCB8DYACSA8M6FJMNKGPB9G8YQX5QLXKFX1MXJWOHLW1MVXKSGR5AA0LYJPVFK0LG0UK26TIC4S85P3ZLLTS29C2D92Y6U8TY9N781QN2Z8A8KJ0S3I3L9JTQVMA2DCBEJG4WA92' where id=20; -update noar ti set v1='ZLG2AY5DRT5OVNO77Z2IU9NQMV8FPO431XBAROHR1FXIY2YVEIOXPNZ22ZMED2ECTPEOLNEWN3EDMYATY32J2QEI5XRJS242T28BXH79PCVYMHDVEV2LVINDRDCB8DYACSA8M6FJMNKGPB9G8YQX5QLXKFX1MXJWOHLW1MVXKSGR5AA0LYJPVFK0LG0UK26TIC4S85P3ZLLTS29C2D92Y6U8TY9N781QN2Z8A8KJ0S3I3L9JTQVMA2DCBEJG4WA92' where id=20; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='53T4WDL12NJU2J7V66V4AEB78XI3CSH0AHP0DGGK96ZCJQI73V3Z1PU1325GKXW558482ZP0B2JUDPSXBC9R9RCXE1SUDP41C78DQ3V624SCOYK6ZU1F03NB63N3GF1EZJE1OUSMH0I3PK3HRXXESYSAQF46BNB4DMWAA47KBTZIA7IJY1V6S57SA6DXW4ATKENCH8GEYP01IYF6LPEFXRVL912XTK5LD1H4PR1GRAN14SLG5ES63MM4S3KPZCX1Y' where id=20; -update noar ti set v2='53T4WDL12NJU2J7V66V4AEB78XI3CSH0AHP0DGGK96ZCJQI73V3Z1PU1325GKXW558482ZP0B2JUDPSXBC9R9RCXE1SUDP41C78DQ3V624SCOYK6ZU1F03NB63N3GF1EZJE1OUSMH0I3PK3HRXXESYSAQF46BNB4DMWAA47KBTZIA7IJY1V6S57SA6DXW4ATKENCH8GEYP01IYF6LPEFXRVL912XTK5LD1H4PR1GRAN14SLG5ES63MM4S3KPZCX1Y' where id=20; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='MIUQ1V9AMOCMV1NFBCN6UXKYUE89QWR09P88V5V7JNET38YL65JERW9T54FWCD8QFLDR72S0HV41OVGE54A2UQB0XU7KLMGNK80S1C49O806IIT1MEBS26QP3L0AGJOYOXECQE8EUTWC87JAWRDDD9LEFGMSZ9PBHPZ91BMOUKIJB3KJ9ONCGG7D4DT1TY37YZJBIV6FB69A886ZCY9TZD6WX0EFU46H1GL9F6VFGFGJ3AJ1EA3JUAIPY4W5T43TO' where id=20; -update noar ti set v3='MIUQ1V9AMOCMV1NFBCN6UXKYUE89QWR09P88V5V7JNET38YL65JERW9T54FWCD8QFLDR72S0HV41OVGE54A2UQB0XU7KLMGNK80S1C49O806IIT1MEBS26QP3L0AGJOYOXECQE8EUTWC87JAWRDDD9LEFGMSZ9PBHPZ91BMOUKIJB3KJ9ONCGG7D4DT1TY37YZJBIV6FB69A886ZCY9TZD6WX0EFU46H1GL9F6VFGFGJ3AJ1EA3JUAIPY4W5T43TO' where id=20; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='SVLUC9216J60KEPVL9OC5SJ1H6KQASP581PAU8Y99I28XXPGZ217JOASTSJR1C6CA6ZPWER9DYOQNQM96W8I9N9U2LCSV8C3JTERE1V5CF6YSN8X2U6NQECHMPLQNV8PNXCPLKOI4OYXC83IOMG8QA9C2VG6WIPEQUBLZDNA7C6CWAG0IFYMU1VU5UPQJ0U7XF9ND0JTEKJONI5QKBZ4T2M07FFB566N9DIHRAFJC7UR2MS4SV1SQQMKKGAQEUN6U' where id=21; -update noar ti set v0='SVLUC9216J60KEPVL9OC5SJ1H6KQASP581PAU8Y99I28XXPGZ217JOASTSJR1C6CA6ZPWER9DYOQNQM96W8I9N9U2LCSV8C3JTERE1V5CF6YSN8X2U6NQECHMPLQNV8PNXCPLKOI4OYXC83IOMG8QA9C2VG6WIPEQUBLZDNA7C6CWAG0IFYMU1VU5UPQJ0U7XF9ND0JTEKJONI5QKBZ4T2M07FFB566N9DIHRAFJC7UR2MS4SV1SQQMKKGAQEUN6U' where id=21; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='G387H4MFM9PFE6MBY8BRAHEOY6A1MS9NIAJQMWD3IYVQK36UQRUUZG6R78XDKIC2NX7RNQVLILYKE1VPQ6OD040HKUOYCB00F8OB6ZZPABNZFH2T5DDDDQE1DAU0NIVC5X7WQMIB47AA18D7EWLP1R03D7WKASR8WKGNE3DIDQR3S4UA6UCM174RV9XW8YLAMSJ7SFATJ9LYTNQQW6868SIW0ICY1JB8GXJY0Q4V9EVI0XKFJCUZ9GWFF5BYDXFXW' where id=21; -update noar ti set v1='G387H4MFM9PFE6MBY8BRAHEOY6A1MS9NIAJQMWD3IYVQK36UQRUUZG6R78XDKIC2NX7RNQVLILYKE1VPQ6OD040HKUOYCB00F8OB6ZZPABNZFH2T5DDDDQE1DAU0NIVC5X7WQMIB47AA18D7EWLP1R03D7WKASR8WKGNE3DIDQR3S4UA6UCM174RV9XW8YLAMSJ7SFATJ9LYTNQQW6868SIW0ICY1JB8GXJY0Q4V9EVI0XKFJCUZ9GWFF5BYDXFXW' where id=21; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='RTFNBX0IMOHQGV2J2BO2DCI9GNHL2LUOVXWIV6PRLNRVQTIOS6OTQWA5K66WAWYZBO3IF54ZSMFYADTRNJ8370D8XO5ENUBQ2XNLWQUGOLPMKQ8FDHIR1O3399XV1WXP9BMRKKSQ9MWC6OWUB40LJX0YJIP0DE0BELD1B7YNP7FBG92VZ8NQKS5GAI9Z4XP7VXGTT4SH0EMX44ZOOTV5VXK4ZE2V98M8FEEHW7U5QDP4SJYRI33XOLFKYHFMZX6ZB' where id=21; -update noar ti set v2='RTFNBX0IMOHQGV2J2BO2DCI9GNHL2LUOVXWIV6PRLNRVQTIOS6OTQWA5K66WAWYZBO3IF54ZSMFYADTRNJ8370D8XO5ENUBQ2XNLWQUGOLPMKQ8FDHIR1O3399XV1WXP9BMRKKSQ9MWC6OWUB40LJX0YJIP0DE0BELD1B7YNP7FBG92VZ8NQKS5GAI9Z4XP7VXGTT4SH0EMX44ZOOTV5VXK4ZE2V98M8FEEHW7U5QDP4SJYRI33XOLFKYHFMZX6ZB' where id=21; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='WXBULGD94O04KDUPE250V2XT6DDAL2NSUORYTI50TCRTMNJ8XNRV775P7QEYGS7E9IOWFBUFA2XSFXW0WISEJMYTE0BJKQIXZSQX58E9ANQUH56DBEIWBOY0PIJJNZ3ADLMM49T4RX69IX1W4M86W56DM2ATXLTOGJC0SPPYQMMMWA2MGENIUWKI022W3FWNKLSHSGV8SAEW6XTF6GPYBGLYHS6XUS454PPQE6GGK0UB4TNLDQXFS7UDUGB2CWYQO' where id=21; -update noar ti set v3='WXBULGD94O04KDUPE250V2XT6DDAL2NSUORYTI50TCRTMNJ8XNRV775P7QEYGS7E9IOWFBUFA2XSFXW0WISEJMYTE0BJKQIXZSQX58E9ANQUH56DBEIWBOY0PIJJNZ3ADLMM49T4RX69IX1W4M86W56DM2ATXLTOGJC0SPPYQMMMWA2MGENIUWKI022W3FWNKLSHSGV8SAEW6XTF6GPYBGLYHS6XUS454PPQE6GGK0UB4TNLDQXFS7UDUGB2CWYQO' where id=21; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='JEEZEZGZ7ONLNEXWNOZ6IEOLE70TS3FG9M1B48MGOMZ67QQEZ4KX7PJUIPAECUE8TRF5NOODH9C405C5DD1YESEOMTCGP54NET4WJ0XG3Q88JK6NHAF1T85KM3JDSIUDHXUDGIJA1ISS7YRUBI4NY3SCBP6NEO6YJWP605301X5SQW6GD6E1PR07YPPULZO85CR2EGGM483ZBFJWA1MMBCO8CX6885JAOM078PIA8FTQ1ERDBQRUW2Y30PCGEJ1RC' where id=22; -update noar ti set v0='JEEZEZGZ7ONLNEXWNOZ6IEOLE70TS3FG9M1B48MGOMZ67QQEZ4KX7PJUIPAECUE8TRF5NOODH9C405C5DD1YESEOMTCGP54NET4WJ0XG3Q88JK6NHAF1T85KM3JDSIUDHXUDGIJA1ISS7YRUBI4NY3SCBP6NEO6YJWP605301X5SQW6GD6E1PR07YPPULZO85CR2EGGM483ZBFJWA1MMBCO8CX6885JAOM078PIA8FTQ1ERDBQRUW2Y30PCGEJ1RC' where id=22; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='L14W6JEIRD4STH3155ALH505X12KZM78GJ20UJT7HS7OH05LT36MUTEDO64UEOQCBAQ8SZF2PFHXF7AH4OJ63EA7V4KRD5SJK7B2ZKZ8V0RQJ4WQYVKK1H9SM2WCLJU8WASNP6K5I3WGFT7O56GFX0BBMGJQ9QMPPLFCDIW9X7S1AFV2A91WT9443OQ92J086H7GOJKPC2OHXLLGVSWFG6LRQ165WQ6ZJFV9WHWMY71E6OLP4SBDKFI5XWGT29UW9' where id=22; -update noar ti set v1='L14W6JEIRD4STH3155ALH505X12KZM78GJ20UJT7HS7OH05LT36MUTEDO64UEOQCBAQ8SZF2PFHXF7AH4OJ63EA7V4KRD5SJK7B2ZKZ8V0RQJ4WQYVKK1H9SM2WCLJU8WASNP6K5I3WGFT7O56GFX0BBMGJQ9QMPPLFCDIW9X7S1AFV2A91WT9443OQ92J086H7GOJKPC2OHXLLGVSWFG6LRQ165WQ6ZJFV9WHWMY71E6OLP4SBDKFI5XWGT29UW9' where id=22; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='UO15756S4IHK8GC5580ND2Z523LKMT8J48J4GXFJTBSJ9QTCJ9T1VWDD92UQ7FI82R3BCOLJM4JV09GAW4D02QR3OFJH665RYQYVPW60DXHBFCO1VZTOR4XMOE749DWZUYUJ5L09MKCQLHVF1SKWI3SKXDOE6NNAX6FZD1KC22ILYI6CV379FCZZ525I64Z1WXGHD6O2XNJJSIRQEE5SYDKR75PKLA5B3ZM1WY7SQ0F3EGB8T85IN6NIZH9W8CQCZ' where id=22; -update noar ti set v2='UO15756S4IHK8GC5580ND2Z523LKMT8J48J4GXFJTBSJ9QTCJ9T1VWDD92UQ7FI82R3BCOLJM4JV09GAW4D02QR3OFJH665RYQYVPW60DXHBFCO1VZTOR4XMOE749DWZUYUJ5L09MKCQLHVF1SKWI3SKXDOE6NNAX6FZD1KC22ILYI6CV379FCZZ525I64Z1WXGHD6O2XNJJSIRQEE5SYDKR75PKLA5B3ZM1WY7SQ0F3EGB8T85IN6NIZH9W8CQCZ' where id=22; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='48G9L26BM5A5IL4MF2VFZ7SAC5XQEFKBNU898PMEW7TANRVXIW6Y1JEYQMTURT6HRF355ROJ1E09OR5Z5GI2H3724R86NIBCQ4G2BQFCACINEDJNKN04A46BJGV4G4PPB67ALJJEZJQ0X9EYHISYQH6TCWQ4AX7CL0ZCKNNY6CP2VHYSQ8OCI3JMRBPLJRLB9PXULNTG6IKQ6J4K66C3RM6122FLFTZYZCNKEA692YNF71QS7VU8W260EAHSGO42H' where id=22; -update noar ti set v3='48G9L26BM5A5IL4MF2VFZ7SAC5XQEFKBNU898PMEW7TANRVXIW6Y1JEYQMTURT6HRF355ROJ1E09OR5Z5GI2H3724R86NIBCQ4G2BQFCACINEDJNKN04A46BJGV4G4PPB67ALJJEZJQ0X9EYHISYQH6TCWQ4AX7CL0ZCKNNY6CP2VHYSQ8OCI3JMRBPLJRLB9PXULNTG6IKQ6J4K66C3RM6122FLFTZYZCNKEA692YNF71QS7VU8W260EAHSGO42H' where id=22; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='742W4TS0469RFUNWNWDLI1TQJF2VMR3WZWVURHMRRV7FD4LIRO8HIVBW6SMMJHINQ7IR670MKDA46P3P2IQNJ8GE9JZOC4W2UOIW2HLOTVKVA2NH52P3PSYI8O6XM8ZOESMS5VTSTSYRU29U7Q5P6AH9KNSGMIXOTV24FGT3E7SU1P05XKZVGFRU8OF4YITK37DEUAWY0C57EI95OEH07M99GCXQ68RPZF3DZ84IFGTV4Q35FR8Z01FAEC8F81ZM6' where id=23; -update noar ti set v0='742W4TS0469RFUNWNWDLI1TQJF2VMR3WZWVURHMRRV7FD4LIRO8HIVBW6SMMJHINQ7IR670MKDA46P3P2IQNJ8GE9JZOC4W2UOIW2HLOTVKVA2NH52P3PSYI8O6XM8ZOESMS5VTSTSYRU29U7Q5P6AH9KNSGMIXOTV24FGT3E7SU1P05XKZVGFRU8OF4YITK37DEUAWY0C57EI95OEH07M99GCXQ68RPZF3DZ84IFGTV4Q35FR8Z01FAEC8F81ZM6' where id=23; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='FPBNQIHCIJ810F5HG2JL6G8WW4DNU0POZ3TKRAU0RD32YGB27APJJB3GBO1826IB1C1OVJBSE6X2N0VI8RDWLHE2K36ZNTX1ILGEULWH8W0AH8N2W3B6886XENFFRUGD2C8EXKMD5FMSFWP0VJD7GS244EDSTJXGQA31ZM86EW9HCCH131RVXDVQ54DGD6X8QKRIILOI5355EKFHTKQM9HCP00IWYSNA56JMPZDO7AGJCC31PH4XOB3R23Y89S8AC' where id=23; -update noar ti set v1='FPBNQIHCIJ810F5HG2JL6G8WW4DNU0POZ3TKRAU0RD32YGB27APJJB3GBO1826IB1C1OVJBSE6X2N0VI8RDWLHE2K36ZNTX1ILGEULWH8W0AH8N2W3B6886XENFFRUGD2C8EXKMD5FMSFWP0VJD7GS244EDSTJXGQA31ZM86EW9HCCH131RVXDVQ54DGD6X8QKRIILOI5355EKFHTKQM9HCP00IWYSNA56JMPZDO7AGJCC31PH4XOB3R23Y89S8AC' where id=23; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='SSXNTOVFT1V1W09WGG0UFW0KI84DZUUVAWPH989N2H76M1ZXQLH8FBFG9JC124ESP2Q7U4LSIVFQ681AAO99NJLOHVWI83ALBHUF6QNZKZG0MPPQ4FI02TQUUWRYOUD7IBMQACR36IB7XGZ01U7DI60GCA3AOB9IFHB48KVJTTHVIWBYURC640DHSTKH2YXUSNJHIUBFNLO8BIVJ67WZ60USJ542HEB6KK1TIBDH348LBJ3DIS8V9CMR3A3OCJ6A7' where id=23; -update noar ti set v2='SSXNTOVFT1V1W09WGG0UFW0KI84DZUUVAWPH989N2H76M1ZXQLH8FBFG9JC124ESP2Q7U4LSIVFQ681AAO99NJLOHVWI83ALBHUF6QNZKZG0MPPQ4FI02TQUUWRYOUD7IBMQACR36IB7XGZ01U7DI60GCA3AOB9IFHB48KVJTTHVIWBYURC640DHSTKH2YXUSNJHIUBFNLO8BIVJ67WZ60USJ542HEB6KK1TIBDH348LBJ3DIS8V9CMR3A3OCJ6A7' where id=23; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='7OYKHHGBLUCKU96U9QEYG8RLEAQQRQZRDCTUX6C0AMSPEB867J72NBKRGSKQIBA3TB50J5HYSVPCFTUKDYW54F10W388C046KDSZWYJ8W97FR0WRN7U2T84X5VF54ICHFZF9LNNN4NXP6EUDSX0T39UEI82W5GF1VVCQ8CX7ZLVMEST9KH6267DYB1E067NW2T3IGW8ZJVS9UAWK2ALGHEVOBNAKOENJWE6IGNEND4WK1DMUVVVN0R4S4KEYXYXGY' where id=23; -update noar ti set v3='7OYKHHGBLUCKU96U9QEYG8RLEAQQRQZRDCTUX6C0AMSPEB867J72NBKRGSKQIBA3TB50J5HYSVPCFTUKDYW54F10W388C046KDSZWYJ8W97FR0WRN7U2T84X5VF54ICHFZF9LNNN4NXP6EUDSX0T39UEI82W5GF1VVCQ8CX7ZLVMEST9KH6267DYB1E067NW2T3IGW8ZJVS9UAWK2ALGHEVOBNAKOENJWE6IGNEND4WK1DMUVVVN0R4S4KEYXYXGY' where id=23; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='UKHGEYJNEHB43UYR29RVIX2E69BM38JXOIWFE0YKEGM21M2QBYN9LLTTUZFIGG1MQJL3NJJF4VT704R5L38LZ6JRAQL8XPDRQ4P7JBYKXR43AXWZEO4GF8RD90R1750ZGGFVOCMQPEH1SZLBU9GA5RH3U9XR43D02N1YLV2OK81J1JPEF3SO600S0F9EHDSRZROBYPTO964G2B1IEUT4B8LXV0JQ011KBLNKQ2HY29DY2GIBS2QP0DPYGGGL04VRX' where id=24; -update noar ti set v0='UKHGEYJNEHB43UYR29RVIX2E69BM38JXOIWFE0YKEGM21M2QBYN9LLTTUZFIGG1MQJL3NJJF4VT704R5L38LZ6JRAQL8XPDRQ4P7JBYKXR43AXWZEO4GF8RD90R1750ZGGFVOCMQPEH1SZLBU9GA5RH3U9XR43D02N1YLV2OK81J1JPEF3SO600S0F9EHDSRZROBYPTO964G2B1IEUT4B8LXV0JQ011KBLNKQ2HY29DY2GIBS2QP0DPYGGGL04VRX' where id=24; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='WR3NEMXH8RB6CVIENPJRQE5UU412PHLH1K9LSHKMKQQW1KW57G0YWOS081DB9HL7DBR2B2FW9SUZOS37YTVCHWT8CTTIB78WWTSEVFNTRH4WPZ5BRN1W3Q8Q0IE8ZHAW6VD2JRFI6O384RABB61MF09H9YWX3FLTDU75UG1CTV8NW00BEXI58PHJSWHC4OIOUOKZBN8GQBJFX0WB4HS14LWEJ7MB2KJQDAIEN5J1H78KYLZ9HTKIFQEASH188HTMD' where id=24; -update noar ti set v1='WR3NEMXH8RB6CVIENPJRQE5UU412PHLH1K9LSHKMKQQW1KW57G0YWOS081DB9HL7DBR2B2FW9SUZOS37YTVCHWT8CTTIB78WWTSEVFNTRH4WPZ5BRN1W3Q8Q0IE8ZHAW6VD2JRFI6O384RABB61MF09H9YWX3FLTDU75UG1CTV8NW00BEXI58PHJSWHC4OIOUOKZBN8GQBJFX0WB4HS14LWEJ7MB2KJQDAIEN5J1H78KYLZ9HTKIFQEASH188HTMD' where id=24; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='UCAQ0O4WP1ILS1UAVXLI6P4506AIR4L2C85SDBQGRQ8UCUCRALFACCV62U1CBAI1QNGFDXI59ISN3M48235LYA279VU96P38BFPFJPRNAQXR3H3CAUXTQSQLMJZS00HBWLW2T6ZDP0S8QGHGO84HI0MQ6DAZT4UKYQKAWRE4AIAY3PHEQWX23UN55W2YLKGTFWILEDICTITMZZ5DFIGXMQC9DERTEBU7ZCG2LEWPIR6K3GAWAA9SIK8RPWTS6S0TK' where id=24; -update noar ti set v2='UCAQ0O4WP1ILS1UAVXLI6P4506AIR4L2C85SDBQGRQ8UCUCRALFACCV62U1CBAI1QNGFDXI59ISN3M48235LYA279VU96P38BFPFJPRNAQXR3H3CAUXTQSQLMJZS00HBWLW2T6ZDP0S8QGHGO84HI0MQ6DAZT4UKYQKAWRE4AIAY3PHEQWX23UN55W2YLKGTFWILEDICTITMZZ5DFIGXMQC9DERTEBU7ZCG2LEWPIR6K3GAWAA9SIK8RPWTS6S0TK' where id=24; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='XGLATUXOQZCS5PVNTA7P4BKEHF23QYWXMO6FL334424I087RPN9095VM4SBBK7RSQNW9R1EDNMCLHEFDBWUZ8APJ26POHN3SWHL6BR3W5I3KONYG9TEHM38ELG4EP7GTZ0H3TLGUZS1WT2PF1U468M9PX57DGYTXYH1KET4P8EP24ZBK783ZTRHC60MKYM6CV53TZM5EID31GJAED5DNOG6FBJ31DPCKKB70EG6B1O5V0NUNLY28ZAZMNOTCXY2OM' where id=24; -update noar ti set v3='XGLATUXOQZCS5PVNTA7P4BKEHF23QYWXMO6FL334424I087RPN9095VM4SBBK7RSQNW9R1EDNMCLHEFDBWUZ8APJ26POHN3SWHL6BR3W5I3KONYG9TEHM38ELG4EP7GTZ0H3TLGUZS1WT2PF1U468M9PX57DGYTXYH1KET4P8EP24ZBK783ZTRHC60MKYM6CV53TZM5EID31GJAED5DNOG6FBJ31DPCKKB70EG6B1O5V0NUNLY28ZAZMNOTCXY2OM' where id=24; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='LET2ITC7OAO0EV495YIAH04HVBSXWFG4FS202U7P369X29RB8EBI86EMMKITTGOQROVSVD5ZT2IOE6FXM5SLQLN8QZD3K0MGUEE8UGPBLBAE7PLX71IJ3LLERHTFZTGYWR1E0YA4A3VPZYV9HGCG0149HK7FN36U9DCOE4AM4264LMJ1GK4QOMDKCDMV7JLD5MVUJZX8Y6N8NHHLCQ1FVT7P15LC7CJOPNIO482RXFD8BY53FY0LS895WMW5PKCA0' where id=25; -update noar ti set v0='LET2ITC7OAO0EV495YIAH04HVBSXWFG4FS202U7P369X29RB8EBI86EMMKITTGOQROVSVD5ZT2IOE6FXM5SLQLN8QZD3K0MGUEE8UGPBLBAE7PLX71IJ3LLERHTFZTGYWR1E0YA4A3VPZYV9HGCG0149HK7FN36U9DCOE4AM4264LMJ1GK4QOMDKCDMV7JLD5MVUJZX8Y6N8NHHLCQ1FVT7P15LC7CJOPNIO482RXFD8BY53FY0LS895WMW5PKCA0' where id=25; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='BLLIFZZB3919MUJNPCVE7BSOY7J1YJS7ALBBMYTZVZ3EVHMP47DKE59BUOA4A3H731EYB4AVUCY7KSOGZJDKIL51UMQIW1RI1Q6TRTC1K2430ZU08FTNWROFC250J6X24AIYPL5BG8MIYYPIE36KPG9B1CHLA568L06A22CDU9P90DEP7Z6X0OO4DCNT2ZRL54CPFM0TD71S05RJUALNU4LMCOCSFIB0WYGEDQ1W3UWWD9S2O2IUUSCSUX6E1KGP6' where id=25; -update noar ti set v1='BLLIFZZB3919MUJNPCVE7BSOY7J1YJS7ALBBMYTZVZ3EVHMP47DKE59BUOA4A3H731EYB4AVUCY7KSOGZJDKIL51UMQIW1RI1Q6TRTC1K2430ZU08FTNWROFC250J6X24AIYPL5BG8MIYYPIE36KPG9B1CHLA568L06A22CDU9P90DEP7Z6X0OO4DCNT2ZRL54CPFM0TD71S05RJUALNU4LMCOCSFIB0WYGEDQ1W3UWWD9S2O2IUUSCSUX6E1KGP6' where id=25; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='E3DEFLQW33FV7W6GXU4KUXFAMQ1T2GS0JM7YSZOI8VS8LLGVEFLWPVU19E1Z2GVP7AQ2CT0HSMFJUPALLHHNKH4L327F3FWATH3KFZ2FQL7SE7TNMB35B19KB4ZFWURWC7MENP8OX34BVXOXLHNC06H1T9CHT968UZK6QTGY4D82KMNTQ9FPWTL42B9VEBM8EGK9SMKKZ39KTMTJE1NA2OBBGGLYC4ZRDOHT173EZF1SSQEFTL83OTFFZF6JH741U' where id=25; -update noar ti set v2='E3DEFLQW33FV7W6GXU4KUXFAMQ1T2GS0JM7YSZOI8VS8LLGVEFLWPVU19E1Z2GVP7AQ2CT0HSMFJUPALLHHNKH4L327F3FWATH3KFZ2FQL7SE7TNMB35B19KB4ZFWURWC7MENP8OX34BVXOXLHNC06H1T9CHT968UZK6QTGY4D82KMNTQ9FPWTL42B9VEBM8EGK9SMKKZ39KTMTJE1NA2OBBGGLYC4ZRDOHT173EZF1SSQEFTL83OTFFZF6JH741U' where id=25; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='G7DCK92JDBMTPDWV5E3AU6N81LP41Z2LE157M222BUUC7JNBFAB1CLTM5NRN3E3OT5V0X0PND9RXZJXBCQO6XIG60ZT9UMLKY5JMFVZRFCJ1FVS4WD1RAEGBPNWYWOU857QVJ87C602NB7TDQCAURU7ZE2JCYQCV5N83XW9Z4JCVUS7MOJFLLBOCQEN1BHVCG4ZW11YFN8F8JDAH4F0W4HUZE7D7S3YZC3HEVYMJVWEBQUEI96D5UHCZ9NZ2AFAAS' where id=25; -update noar ti set v3='G7DCK92JDBMTPDWV5E3AU6N81LP41Z2LE157M222BUUC7JNBFAB1CLTM5NRN3E3OT5V0X0PND9RXZJXBCQO6XIG60ZT9UMLKY5JMFVZRFCJ1FVS4WD1RAEGBPNWYWOU857QVJ87C602NB7TDQCAURU7ZE2JCYQCV5N83XW9Z4JCVUS7MOJFLLBOCQEN1BHVCG4ZW11YFN8F8JDAH4F0W4HUZE7D7S3YZC3HEVYMJVWEBQUEI96D5UHCZ9NZ2AFAAS' where id=25; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='92KSYM6D0QCDKV6DR6LGYQAJEPP6K3JK2MTYAJNH0OXI4VQHM83F3BNE98KWRN42GS47PMIAEJ026T8JH1OT3YXNMVVN7SX0EENAWG1UO7M83KHK9WA93W3UYPTSJ1AHT9CLSXFONP9SP2RERG0VNRZQQKIUTPPXO2QE5HJJVIWW051SWF6UUR188AKPEIXZ908JSOEGFJ2QTYY1LZ7GN2AG3JMLT8KOT8VXJRKVVY8BVVI13O5GDKL748CC5T762' where id=26; -update noar ti set v0='92KSYM6D0QCDKV6DR6LGYQAJEPP6K3JK2MTYAJNH0OXI4VQHM83F3BNE98KWRN42GS47PMIAEJ026T8JH1OT3YXNMVVN7SX0EENAWG1UO7M83KHK9WA93W3UYPTSJ1AHT9CLSXFONP9SP2RERG0VNRZQQKIUTPPXO2QE5HJJVIWW051SWF6UUR188AKPEIXZ908JSOEGFJ2QTYY1LZ7GN2AG3JMLT8KOT8VXJRKVVY8BVVI13O5GDKL748CC5T762' where id=26; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='JXZVHXEQD2EXJZ31HK5GXDP0Z5LMZAT3ODLLX9RHRVO581QGVDIY982M6K8KGVDGHQDI1ZMTP3XVO1XTCSB9UUFHNAREOI92W32044SGWWXY5310TIK780YKWDNC1UQ86014PDT4KVHYWCGKYMIEGRLG989E708XTK78R41RQPM370QLS9VNWS6IGY2L6VISSPYVRFF0I4BB966ZGJX5W4K3NH1GEJT5DMN1DFQ7YIL2U9KMHRUUABJC6SEVXDHXA' where id=26; -update noar ti set v1='JXZVHXEQD2EXJZ31HK5GXDP0Z5LMZAT3ODLLX9RHRVO581QGVDIY982M6K8KGVDGHQDI1ZMTP3XVO1XTCSB9UUFHNAREOI92W32044SGWWXY5310TIK780YKWDNC1UQ86014PDT4KVHYWCGKYMIEGRLG989E708XTK78R41RQPM370QLS9VNWS6IGY2L6VISSPYVRFF0I4BB966ZGJX5W4K3NH1GEJT5DMN1DFQ7YIL2U9KMHRUUABJC6SEVXDHXA' where id=26; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='6A6VBLBJYWFNJZP5AO8GHNS5KSAXM4U48R990LAP038RA0YJX9TFPCJMN8QB4MS47U6J8IZHV7FCHE9PTD3ZCS66DTPTME52GQEFDQT33XDYMA8E0CV71SZ4H8FCJ7XXNEU98DW7CNDMOAQ94L3QVM86QJCCC0Z9IS6M1YQYMZ1CDWEQQN95Z6RUM97QMFCZ7UAEFI9D3MNUKP8S8XAA0GT2KBQZW5XXX8K537MZM8IHWQ0PPBDJ1MAA3ARIS7VUD' where id=26; -update noar ti set v2='6A6VBLBJYWFNJZP5AO8GHNS5KSAXM4U48R990LAP038RA0YJX9TFPCJMN8QB4MS47U6J8IZHV7FCHE9PTD3ZCS66DTPTME52GQEFDQT33XDYMA8E0CV71SZ4H8FCJ7XXNEU98DW7CNDMOAQ94L3QVM86QJCCC0Z9IS6M1YQYMZ1CDWEQQN95Z6RUM97QMFCZ7UAEFI9D3MNUKP8S8XAA0GT2KBQZW5XXX8K537MZM8IHWQ0PPBDJ1MAA3ARIS7VUD' where id=26; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='TYG0RN23Z6U36OA28913RTYOSX0EQ6J7Y1ME10VLMRDEBQ4HPF1VWP35TI4GVQ9G28TDTB7ZKRSKIFYFWCX9H8UUX26W0SBX9TBI0VUCPM1PZKYO3P7QQZSH88X7ZK0702KC9GAFFSMKQJA2ARWV2S4741OU4WTJAQ8ZTAM2PH25LK2ERCAX038KMWXN1K1YWV273L6STNQBJZQ7GD26GBO0VT6V9EX7RBIU1JG6UTNRAYMRCVKDVG0MRUWM0OD8O' where id=26; -update noar ti set v3='TYG0RN23Z6U36OA28913RTYOSX0EQ6J7Y1ME10VLMRDEBQ4HPF1VWP35TI4GVQ9G28TDTB7ZKRSKIFYFWCX9H8UUX26W0SBX9TBI0VUCPM1PZKYO3P7QQZSH88X7ZK0702KC9GAFFSMKQJA2ARWV2S4741OU4WTJAQ8ZTAM2PH25LK2ERCAX038KMWXN1K1YWV273L6STNQBJZQ7GD26GBO0VT6V9EX7RBIU1JG6UTNRAYMRCVKDVG0MRUWM0OD8O' where id=26; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='1QKXZMD6C0L0Z79BL758AD91MJFXVS5QMEX33FAPO1HG7L440CS7UO12FGEPW33X6RJ5W5NYORVTOHTLB6K7R3A5THQIN6AIMH05J1EKF9ZZZSL07GG0MSG4UVS1CQ6KYOSC3LR11XERDPT02YJS97HFDFWHMGIFPLHRZPALX5F8KPSQCQU0FVCCLM8NUKG4C9ZTSQHW1Y9BXP876U17NF7O9GR5VN4XG6ATQKKMO5KUVPQV8GK2KUVNR32EIN35G' where id=27; -update noar ti set v0='1QKXZMD6C0L0Z79BL758AD91MJFXVS5QMEX33FAPO1HG7L440CS7UO12FGEPW33X6RJ5W5NYORVTOHTLB6K7R3A5THQIN6AIMH05J1EKF9ZZZSL07GG0MSG4UVS1CQ6KYOSC3LR11XERDPT02YJS97HFDFWHMGIFPLHRZPALX5F8KPSQCQU0FVCCLM8NUKG4C9ZTSQHW1Y9BXP876U17NF7O9GR5VN4XG6ATQKKMO5KUVPQV8GK2KUVNR32EIN35G' where id=27; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='43D4WF8721S3JA8E40KNKVPSRQ0A6CSIGKB60E1WG7723NVXE7ZN2HDSV62XPAXBMOB0OIS42219X1SN23XUQ43LH23L3GNKTZ601EX9G23BP1GUKXXJ4HNEHDW8VVXOVAXFL3R1X0WD2J1FU0R4N8O0DM062SNGZKDZVUV77OOAO2HQ81A29DUJ1TI23VBGNB4BPZN5D9TYHIK72WENPQURVCKRAV21GHUII9Y53UO6I05KKQKZGMLG3HC6JCYR5' where id=27; -update noar ti set v1='43D4WF8721S3JA8E40KNKVPSRQ0A6CSIGKB60E1WG7723NVXE7ZN2HDSV62XPAXBMOB0OIS42219X1SN23XUQ43LH23L3GNKTZ601EX9G23BP1GUKXXJ4HNEHDW8VVXOVAXFL3R1X0WD2J1FU0R4N8O0DM062SNGZKDZVUV77OOAO2HQ81A29DUJ1TI23VBGNB4BPZN5D9TYHIK72WENPQURVCKRAV21GHUII9Y53UO6I05KKQKZGMLG3HC6JCYR5' where id=27; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='TVFMQGD8SHUMGWLDECLPQOZ3DZZJSW6SESKODE5SV4WNWHTUHBQ6KKLQYDHQ8O03HM11S5NX7P20QH30C9102LI7HF754799AIDNN3OQC18CD4OP938YDZCBGFSUW24IY0G8QJQRM7BIE6FVI2WNSV04S67M4JAY20C7LZXYPBAJU17TEJN1X2ONMHM2QTOYSTDDGBPWKQD3D8716WUK1FAG9KFPY44WZXI64BU1SLA8EIFV4C0DEQJJUYGE3HIKF' where id=27; -update noar ti set v2='TVFMQGD8SHUMGWLDECLPQOZ3DZZJSW6SESKODE5SV4WNWHTUHBQ6KKLQYDHQ8O03HM11S5NX7P20QH30C9102LI7HF754799AIDNN3OQC18CD4OP938YDZCBGFSUW24IY0G8QJQRM7BIE6FVI2WNSV04S67M4JAY20C7LZXYPBAJU17TEJN1X2ONMHM2QTOYSTDDGBPWKQD3D8716WUK1FAG9KFPY44WZXI64BU1SLA8EIFV4C0DEQJJUYGE3HIKF' where id=27; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='C0I4MZG3VJFEYG3NN1WMQ4YFNKCB9X3VLF14YMK561P02VCEJT5DY69BT3X2L8TWFY3UEGO8W7MT2AL3ZW0ML9VG7XHT47HJ2FPES3JQO36QYRINFDAO7Z6AOEYWO7N3231SKTE9Q07WB7ME4R9C4LAH2GXWWFUAP3CXERVK88ZAQC0EXYUBNJPVCKK9Y79SY0P676HRIAWYYSN2S9EC1HB264G3WV2P4U2UOZXJWS8HO41NI1JVWEHH54SZRV7F3' where id=27; -update noar ti set v3='C0I4MZG3VJFEYG3NN1WMQ4YFNKCB9X3VLF14YMK561P02VCEJT5DY69BT3X2L8TWFY3UEGO8W7MT2AL3ZW0ML9VG7XHT47HJ2FPES3JQO36QYRINFDAO7Z6AOEYWO7N3231SKTE9Q07WB7ME4R9C4LAH2GXWWFUAP3CXERVK88ZAQC0EXYUBNJPVCKK9Y79SY0P676HRIAWYYSN2S9EC1HB264G3WV2P4U2UOZXJWS8HO41NI1JVWEHH54SZRV7F3' where id=27; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='1OFQBNZLWM12SWD0XSFBDNVNLEMT30TQW6B60KHOW829W8MIO6WVQLU6BRW2SEMSGQHP5T373ZXFDOKKJKEIDNKIH5YL9H6G2RBPVLU2L4ORCRU1JHKEZXO38PIK1Q2MHI2RCEZIIICPFN6RNXUXOWXAH8YFKT06HGKVNOLXEVPZCVR31XMAIK4USJ2CVMJMPW1YBCHRVTHISWU5IDB3E13TKKVMP1SYD1MIKQDT1VOMJ9YF1ITKJRM4URONRKHQS' where id=28; -update noar ti set v0='1OFQBNZLWM12SWD0XSFBDNVNLEMT30TQW6B60KHOW829W8MIO6WVQLU6BRW2SEMSGQHP5T373ZXFDOKKJKEIDNKIH5YL9H6G2RBPVLU2L4ORCRU1JHKEZXO38PIK1Q2MHI2RCEZIIICPFN6RNXUXOWXAH8YFKT06HGKVNOLXEVPZCVR31XMAIK4USJ2CVMJMPW1YBCHRVTHISWU5IDB3E13TKKVMP1SYD1MIKQDT1VOMJ9YF1ITKJRM4URONRKHQS' where id=28; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='GAWPIKDNCSV6UCW3UN6HR4JN75W5HWJZJHBTEE1WCIHNHULR7L9GOB627DMZW895ZDY1PTCLOSN8P32QMITOMKXUIRY67DJU0QZJHQTW147DAASJHWNMQB6ODOXU8EHREC7ECNZB1G9CMJS6BM9FTBCC3UI2VN4SSUAZMF0S052COEBF7DBJHC4T7NCTENF5RH8I44WU839IV1MAFWS10M2V73E4YDCT12VVDU2CPGHMY3CO93LBH053BKUB0ZG8Y' where id=28; -update noar ti set v1='GAWPIKDNCSV6UCW3UN6HR4JN75W5HWJZJHBTEE1WCIHNHULR7L9GOB627DMZW895ZDY1PTCLOSN8P32QMITOMKXUIRY67DJU0QZJHQTW147DAASJHWNMQB6ODOXU8EHREC7ECNZB1G9CMJS6BM9FTBCC3UI2VN4SSUAZMF0S052COEBF7DBJHC4T7NCTENF5RH8I44WU839IV1MAFWS10M2V73E4YDCT12VVDU2CPGHMY3CO93LBH053BKUB0ZG8Y' where id=28; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='5HGPJMITE8NL7NQWI69Q12P9QSCHAQ3WM6Z61YF69VDWSBBG2SS7LR7E6RRTI0IRDEHKP8LWVDAYNYM3FA9OK5EQEPRK53CAFWUSFVOJEGVK28363NJTY7JQPGSKT3LZB7CKLVBNF5C1EP5PPBGLAUTNX5GW9YR27TV0RYEX1SV0HJA7Q7C4IA8QQ4AWLX5GSRABN7LEWSN4NN0XQEOBNY24NFC2UQSNVOK1DJ3CX2RMYB9L2N54IVXMKQHQPRLGV' where id=28; -update noar ti set v2='5HGPJMITE8NL7NQWI69Q12P9QSCHAQ3WM6Z61YF69VDWSBBG2SS7LR7E6RRTI0IRDEHKP8LWVDAYNYM3FA9OK5EQEPRK53CAFWUSFVOJEGVK28363NJTY7JQPGSKT3LZB7CKLVBNF5C1EP5PPBGLAUTNX5GW9YR27TV0RYEX1SV0HJA7Q7C4IA8QQ4AWLX5GSRABN7LEWSN4NN0XQEOBNY24NFC2UQSNVOK1DJ3CX2RMYB9L2N54IVXMKQHQPRLGV' where id=28; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='GXFUU3JKG2XI92GHLAU8WQY8CEIN0TY2PZ66O7NA4LZ2TVSZJC2JLBKCAI7SH2HSZP7GJQ43SQRTU18WCUZG6RA1USKCEHHKIAMAF20WPIA1YBZ979KGUIG2HD0QB4N21BWC89XN7B57ZT2HSYMWS14IOJTAM4UO9EK7GP9E6UAECZATLT30AU58XQ291KCT6GRUDXWXFZY2J2X366NGQHYOWQ8C0GOCHC252KG37IEQTUHIX6SS27CLS4GOCMX8H' where id=28; -update noar ti set v3='GXFUU3JKG2XI92GHLAU8WQY8CEIN0TY2PZ66O7NA4LZ2TVSZJC2JLBKCAI7SH2HSZP7GJQ43SQRTU18WCUZG6RA1USKCEHHKIAMAF20WPIA1YBZ979KGUIG2HD0QB4N21BWC89XN7B57ZT2HSYMWS14IOJTAM4UO9EK7GP9E6UAECZATLT30AU58XQ291KCT6GRUDXWXFZY2J2X366NGQHYOWQ8C0GOCHC252KG37IEQTUHIX6SS27CLS4GOCMX8H' where id=28; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='5K63XUEFQTPX5H2T0IKFAJMAEKAZHSSSVXKPO2KEV9HKCBUV3XKT3VJ3LX9TU6GT9Y4Q9G472AFQ5HIIPUB0VR5CZ9D1FU3673OWW114HIZDXWDTR4H29D1EFSBRG1X7XF67GDLBN4MY64R98JBZBA5K86LGWE8G0O5BYVCSSEXXLP9KYESI4YK8TAOSLP5UEXX8IIWW5J6YXIQFP2AH7G0WGGZWC181NHQK0G2D9BVNWTMBHIS8ZZNLQSIUNMCYJ' where id=29; -update noar ti set v0='5K63XUEFQTPX5H2T0IKFAJMAEKAZHSSSVXKPO2KEV9HKCBUV3XKT3VJ3LX9TU6GT9Y4Q9G472AFQ5HIIPUB0VR5CZ9D1FU3673OWW114HIZDXWDTR4H29D1EFSBRG1X7XF67GDLBN4MY64R98JBZBA5K86LGWE8G0O5BYVCSSEXXLP9KYESI4YK8TAOSLP5UEXX8IIWW5J6YXIQFP2AH7G0WGGZWC181NHQK0G2D9BVNWTMBHIS8ZZNLQSIUNMCYJ' where id=29; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='82MZVZTCME90GI3WF4SLY9V6J7KLUKCBDYSEZAXZZKL9PTT149R2WOA201L74YUTPNQTJABKNOIX17TG5L8FR0NOCQQT3R4XFTBAM4EDO8LCRRWQR7B8QY8E74PPMC7YYEJGFNUG6ADARWDMLKWKZOU8VFIK6AEN6OQQ4A01VH3S4VLEOBCEJRT5D1UTUXVFAZPVR8TD7FX05XX1VBR9NN6QAHR7XTI8R6ED1A3LOCKN5MBUW46IONAAM27Q4V5G3' where id=29; -update noar ti set v1='82MZVZTCME90GI3WF4SLY9V6J7KLUKCBDYSEZAXZZKL9PTT149R2WOA201L74YUTPNQTJABKNOIX17TG5L8FR0NOCQQT3R4XFTBAM4EDO8LCRRWQR7B8QY8E74PPMC7YYEJGFNUG6ADARWDMLKWKZOU8VFIK6AEN6OQQ4A01VH3S4VLEOBCEJRT5D1UTUXVFAZPVR8TD7FX05XX1VBR9NN6QAHR7XTI8R6ED1A3LOCKN5MBUW46IONAAM27Q4V5G3' where id=29; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='TX7ZSXD0M8HEHB1Y8HQ2SXU6AI28RXM8NDRWZ50RSUMA388ACS7VCNEBLDVPC0CYKVW5SFZ065VRQP6MN5DMOKPTCNDWDKPYFEED1OOX59A5FNUIN7WU3RF24HPB6U2P8KL7GUC9GQGFV94VETGRROIHOYI1FDZUDGFHT1FLBULOCMYQEHDHYJQ9CJNLM8IWMUGD0FGMEMT12R5MSPHZGO590ML82TUM20H08GVETBWHO0I4XR9CXPOMGZIVQN8V4' where id=29; -update noar ti set v2='TX7ZSXD0M8HEHB1Y8HQ2SXU6AI28RXM8NDRWZ50RSUMA388ACS7VCNEBLDVPC0CYKVW5SFZ065VRQP6MN5DMOKPTCNDWDKPYFEED1OOX59A5FNUIN7WU3RF24HPB6U2P8KL7GUC9GQGFV94VETGRROIHOYI1FDZUDGFHT1FLBULOCMYQEHDHYJQ9CJNLM8IWMUGD0FGMEMT12R5MSPHZGO590ML82TUM20H08GVETBWHO0I4XR9CXPOMGZIVQN8V4' where id=29; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='AFFXMSGVOOAZY8MZ9DSZUJE6OBIL0OF10EUA3P2WT4LU22BMPBGIGLQHU3D51QREHVS7R8NNAWG4IDEWM11AT17712HR95B633HKGZ7MRJ9WC3UJDETPRBA5KYSKCWSFS32PSQ8CXT9A5VYFQHS9FBZGGUYIL9SPX1ZD7QK6Y1AL3B3OL2KEIZTGT1VSQ5FZ492FL0G10GP8NT6WUKJU325I47XSCZD24WDRQOLZ8OBM1V7YSFCKN4P8ZWCHH2CLU' where id=29; -update noar ti set v3='AFFXMSGVOOAZY8MZ9DSZUJE6OBIL0OF10EUA3P2WT4LU22BMPBGIGLQHU3D51QREHVS7R8NNAWG4IDEWM11AT17712HR95B633HKGZ7MRJ9WC3UJDETPRBA5KYSKCWSFS32PSQ8CXT9A5VYFQHS9FBZGGUYIL9SPX1ZD7QK6Y1AL3B3OL2KEIZTGT1VSQ5FZ492FL0G10GP8NT6WUKJU325I47XSCZD24WDRQOLZ8OBM1V7YSFCKN4P8ZWCHH2CLU' where id=29; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='AVZOVTI3F9H67KQ1NLFI0OMIEH0R1KI9M3HHH4GRT1M4W5539BLOVTUX8NA86O2IYOF56L1JDPC6C6YPTMAXBDAMAWL4IU7CCJPYUU65CO1EJOSD9C23FB7383RPRE2XYRUUS1TXCARLGEL5PMQLHE8HQKFQYGIGU0N80AEN6X4FCI9X3QGAY256O325F5Y9OH6RBG6GY97T84LXJHRKEW0OTWJN1BH2USMV0F0YFR06GWA2AALYUHX82DEIA0CKM' where id=30; -update noar ti set v0='AVZOVTI3F9H67KQ1NLFI0OMIEH0R1KI9M3HHH4GRT1M4W5539BLOVTUX8NA86O2IYOF56L1JDPC6C6YPTMAXBDAMAWL4IU7CCJPYUU65CO1EJOSD9C23FB7383RPRE2XYRUUS1TXCARLGEL5PMQLHE8HQKFQYGIGU0N80AEN6X4FCI9X3QGAY256O325F5Y9OH6RBG6GY97T84LXJHRKEW0OTWJN1BH2USMV0F0YFR06GWA2AALYUHX82DEIA0CKM' where id=30; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='5T4TFDF7T34PGBMBAYVW42LB2Q8Y3FHKFJEVA4QFEAYDF4XH23D91S26B5B0WQLOO2P28PUFQ8PKML3SYVPLXEXNWJZ5UJUA1M6UU6AJGWSHULZKU0RR7JI1ULP8X6RTJRI5QJLASMGHTQW664QGDNQ8QGM5B0RV887QJ8GLLN5GJNQTO9H3EE4QM22ROOOXE8BAU5C1V45Q64P0OSZI4XEJPSIU3Z4INI1GK109SBWFQSY6UU1U06CP2534DJ4NN' where id=30; -update noar ti set v1='5T4TFDF7T34PGBMBAYVW42LB2Q8Y3FHKFJEVA4QFEAYDF4XH23D91S26B5B0WQLOO2P28PUFQ8PKML3SYVPLXEXNWJZ5UJUA1M6UU6AJGWSHULZKU0RR7JI1ULP8X6RTJRI5QJLASMGHTQW664QGDNQ8QGM5B0RV887QJ8GLLN5GJNQTO9H3EE4QM22ROOOXE8BAU5C1V45Q64P0OSZI4XEJPSIU3Z4INI1GK109SBWFQSY6UU1U06CP2534DJ4NN' where id=30; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='D1LGNVY0XEFYZTJPO54TLVNQWOQOOCFS6KH8L7GDNCGVOOIH9H51QAF0OM3ZS2IMNCVTZALSKRA2BZX10DHT5KOCRMF1DN9GHUWF6FUNQCLEL1YJBNNM95JXM3V80MD37FCOJDMDJYZR0685YEUT9T1I4MV2B7AKISGIF367F40LLR1ASMDX2DK46G05SC725369I2ZLJ15CDM0LISR58FUIIMSETQAGAC3NEXS4CVLWZYOQJHUHCQAQ1MCFLRQTC' where id=30; -update noar ti set v2='D1LGNVY0XEFYZTJPO54TLVNQWOQOOCFS6KH8L7GDNCGVOOIH9H51QAF0OM3ZS2IMNCVTZALSKRA2BZX10DHT5KOCRMF1DN9GHUWF6FUNQCLEL1YJBNNM95JXM3V80MD37FCOJDMDJYZR0685YEUT9T1I4MV2B7AKISGIF367F40LLR1ASMDX2DK46G05SC725369I2ZLJ15CDM0LISR58FUIIMSETQAGAC3NEXS4CVLWZYOQJHUHCQAQ1MCFLRQTC' where id=30; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='87QKFKTUOM8OEINHO3ZLKFT3TROZF7LOBGX0F40EULIUCQUUUZB307SSLF266R49M8MJ8QM5J6DLYB0RV7KNVG1CONR4OP89LZS3A12COGA2CZIE57FFPT5U12T68BQY4HEKLBCAJOPF8H0X89OFYIRCCJDM0HBWBP6ZSIEYGN4LFF9U2DICMCKYLVZJHUBNHNA4WQGSQ2C2FCP6QX0K2IC2XCCZHBUQ3ZF9RMG9JZVGVID2LDPKRAP3EO0CB69EG' where id=30; -update noar ti set v3='87QKFKTUOM8OEINHO3ZLKFT3TROZF7LOBGX0F40EULIUCQUUUZB307SSLF266R49M8MJ8QM5J6DLYB0RV7KNVG1CONR4OP89LZS3A12COGA2CZIE57FFPT5U12T68BQY4HEKLBCAJOPF8H0X89OFYIRCCJDM0HBWBP6ZSIEYGN4LFF9U2DICMCKYLVZJHUBNHNA4WQGSQ2C2FCP6QX0K2IC2XCCZHBUQ3ZF9RMG9JZVGVID2LDPKRAP3EO0CB69EG' where id=30; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='QRQ8AHXI58TE4YCNUXJP977CTS6XUNAI1HPFCVBWDU9SJX0BV5I6JGJUO07S8Q0KA0P2FAWX5SWECS1S51PCPYHPMW6VX9ERG3XVTOGYE7LIX1XFB8X8EHC8LGZS049I9HEK77NEBSC012PDBUY2X8HBCHTJ6D2NPZFZKCXOIOEZOF5307J34V2TAII5N97J394D67A2Q89ZLI1Z2QI08S7ESPU5BJPJZIPLV2I1IMQVJKWR787EAATXSTA7AEN4E' where id=31; -update noar ti set v0='QRQ8AHXI58TE4YCNUXJP977CTS6XUNAI1HPFCVBWDU9SJX0BV5I6JGJUO07S8Q0KA0P2FAWX5SWECS1S51PCPYHPMW6VX9ERG3XVTOGYE7LIX1XFB8X8EHC8LGZS049I9HEK77NEBSC012PDBUY2X8HBCHTJ6D2NPZFZKCXOIOEZOF5307J34V2TAII5N97J394D67A2Q89ZLI1Z2QI08S7ESPU5BJPJZIPLV2I1IMQVJKWR787EAATXSTA7AEN4E' where id=31; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='Z21OH7P1L8ZJDXU6YVO2124I51YBBUKUJT8Z3PQRHP03X2N2OYTS1SSNRHFFJGCNC4GIBBM2J036FIWHYYZ77ZNYFE2OND3CGX99SPNB3AT7PJHLJ9L5E6N9YXM9OMTNLMRSTYQJWFA4YVHU116UKNDH0QMBEHSZVBFNBHFI7XZEUE580LMOPTTF4BHD77IKMIUY17VCGX5WPS4SYNP1ODIZZAXYOKCRJ9IOFGN05I4NFGIO1CHD9ZYL045BRDCRC' where id=31; -update noar ti set v1='Z21OH7P1L8ZJDXU6YVO2124I51YBBUKUJT8Z3PQRHP03X2N2OYTS1SSNRHFFJGCNC4GIBBM2J036FIWHYYZ77ZNYFE2OND3CGX99SPNB3AT7PJHLJ9L5E6N9YXM9OMTNLMRSTYQJWFA4YVHU116UKNDH0QMBEHSZVBFNBHFI7XZEUE580LMOPTTF4BHD77IKMIUY17VCGX5WPS4SYNP1ODIZZAXYOKCRJ9IOFGN05I4NFGIO1CHD9ZYL045BRDCRC' where id=31; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='Y57CQVM37ND2CY1PFONY4AOFEQ0ADDUY02CR5NP90PW9YCF2JQGIEU580793NP4XNXWCBRPGYVT1IPNWC6FGWFBVM3GZKZQTPZXRJ4H0FAIK29HW72OQBR60IJGY89GM31BEBLHJ9RBJY88078BL5RCEIY92LLQ8NN2F6MV1T6AAQUHXSLOJLW7EDX6RXC18KJE960BADGP85A82PE1GCT95UREIKHU8RZG2HI725WXZKLN2BBWTF3VVHWSW9AJI5' where id=31; -update noar ti set v2='Y57CQVM37ND2CY1PFONY4AOFEQ0ADDUY02CR5NP90PW9YCF2JQGIEU580793NP4XNXWCBRPGYVT1IPNWC6FGWFBVM3GZKZQTPZXRJ4H0FAIK29HW72OQBR60IJGY89GM31BEBLHJ9RBJY88078BL5RCEIY92LLQ8NN2F6MV1T6AAQUHXSLOJLW7EDX6RXC18KJE960BADGP85A82PE1GCT95UREIKHU8RZG2HI725WXZKLN2BBWTF3VVHWSW9AJI5' where id=31; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='PIDO3T1LWRLTSCJJ6L5JFGN4LLZ5MNWES59153PNS7133YXCQCFZRAOV6XHAEFVEOXGNSIVFZEA7299SE4PQ3ZDJERC6AHLQHQK0HAUOA3E73KCLJS8HSMDRG6VO60JR1GXWOEANVGSOCF6OJS7XXQUAEZX8NEOMYKTNGOA10C45MNYKDRTFY0IAPSLDFCJNL3Y36SALB6FQJOTYQS7653RRUW2ZVCB2N8RCC6SBP7NI92TXUVNW41MY07O8VTN42' where id=31; -update noar ti set v3='PIDO3T1LWRLTSCJJ6L5JFGN4LLZ5MNWES59153PNS7133YXCQCFZRAOV6XHAEFVEOXGNSIVFZEA7299SE4PQ3ZDJERC6AHLQHQK0HAUOA3E73KCLJS8HSMDRG6VO60JR1GXWOEANVGSOCF6OJS7XXQUAEZX8NEOMYKTNGOA10C45MNYKDRTFY0IAPSLDFCJNL3Y36SALB6FQJOTYQS7653RRUW2ZVCB2N8RCC6SBP7NI92TXUVNW41MY07O8VTN42' where id=31; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='3THSCOYLJ4BYEYIMJP04PRX4X56JG055WG81CPI9RV614ANAS33XZOMSFL3ROCRO9CX7WDKNO3WSGXUEUDUA26HH0XH1F83UZFW9HGI3694MPA0QNYHQL3D804U1AV0ZS9Y6N2A6Q66ZO2QQDM2XTWN87RW2GU6U051L9UY8IYUR7ASNQZOPYNKIMXCVDD9F1DP107VOUGOLSL3Q157LOZ4CZJM1KPE1HNYDZ1YN31D35E69ZBZ0ZNU930GZ0YDYM' where id=32; -update noar ti set v0='3THSCOYLJ4BYEYIMJP04PRX4X56JG055WG81CPI9RV614ANAS33XZOMSFL3ROCRO9CX7WDKNO3WSGXUEUDUA26HH0XH1F83UZFW9HGI3694MPA0QNYHQL3D804U1AV0ZS9Y6N2A6Q66ZO2QQDM2XTWN87RW2GU6U051L9UY8IYUR7ASNQZOPYNKIMXCVDD9F1DP107VOUGOLSL3Q157LOZ4CZJM1KPE1HNYDZ1YN31D35E69ZBZ0ZNU930GZ0YDYM' where id=32; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='J184FP5EE2BUC0EKCI70N3KL2HTW25CIJ91GXH40BAHY2LHEQIWUVGWQOFX7Z8A4P7ZEP0LR5LDC62OBLSZD05OYIS2KRJ91A6Q6Q8L3PSA7W62QT6HJ18LQ8IH2AXS4NDFZCAH6YS2Q87U7XBBQISQ43DFO3WG8II9OMDWBZ7NM2F2QEZ2FZIVKS2U5CDJF4OELNO9348WRNT8BD9NH0DR7FKPNMJPWKFH1BNM0X12S54M2YHYXIOWASJ12OEGKY' where id=32; -update noar ti set v1='J184FP5EE2BUC0EKCI70N3KL2HTW25CIJ91GXH40BAHY2LHEQIWUVGWQOFX7Z8A4P7ZEP0LR5LDC62OBLSZD05OYIS2KRJ91A6Q6Q8L3PSA7W62QT6HJ18LQ8IH2AXS4NDFZCAH6YS2Q87U7XBBQISQ43DFO3WG8II9OMDWBZ7NM2F2QEZ2FZIVKS2U5CDJF4OELNO9348WRNT8BD9NH0DR7FKPNMJPWKFH1BNM0X12S54M2YHYXIOWASJ12OEGKY' where id=32; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='TFZOGN64WWC93TFQ5W7L421WBUZ99W55VRJ9AYXJEHE7SCE1EEHHAYP9GXATCMC78JMLN90PSM7NPCLTH09DWSHZ90Y6NPYDQ1NXWR7UB8DKS0VCVY4207OXI3C0HV2UB1GK5HVC61JNAWYZ3GJ59XYMR1NT3191NSGIZLKR5EZG9RRTCDIIFIR1AOX97QR7ONGRXCFAA7SO0VXAIMP3R9P9LDGT07POOSXRSUM4AH5WKTCLYEVSAT4INWIIDFLPH' where id=32; -update noar ti set v2='TFZOGN64WWC93TFQ5W7L421WBUZ99W55VRJ9AYXJEHE7SCE1EEHHAYP9GXATCMC78JMLN90PSM7NPCLTH09DWSHZ90Y6NPYDQ1NXWR7UB8DKS0VCVY4207OXI3C0HV2UB1GK5HVC61JNAWYZ3GJ59XYMR1NT3191NSGIZLKR5EZG9RRTCDIIFIR1AOX97QR7ONGRXCFAA7SO0VXAIMP3R9P9LDGT07POOSXRSUM4AH5WKTCLYEVSAT4INWIIDFLPH' where id=32; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='U3Z9HUXGOBW8B82L7952O4W0JW67ZCJVMSQ10QJZONBNI4HMMTYRBDFAFEOTBX4WAJ1AU89I3XGJ6TJNJDDEQCUZ1YCV27F1QDV78TWK00TYESKNR5CKA25XUNX02U4NDUZBQG3B6RKPTBYQ9CA73J1B5KSUHJE7HDLXHORAV589S3DMPOMNZATHWBS5QFBT1VK8P3RN1TGNQ2TSH7N1QP3F1CZOMLZZJOY61ZOD4FLXKKRRR1KZJH6YFDT0R9IMZ' where id=32; -update noar ti set v3='U3Z9HUXGOBW8B82L7952O4W0JW67ZCJVMSQ10QJZONBNI4HMMTYRBDFAFEOTBX4WAJ1AU89I3XGJ6TJNJDDEQCUZ1YCV27F1QDV78TWK00TYESKNR5CKA25XUNX02U4NDUZBQG3B6RKPTBYQ9CA73J1B5KSUHJE7HDLXHORAV589S3DMPOMNZATHWBS5QFBT1VK8P3RN1TGNQ2TSH7N1QP3F1CZOMLZZJOY61ZOD4FLXKKRRR1KZJH6YFDT0R9IMZ' where id=32; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='XSKXM40W4WOTXYCA6UR8GS2ERD5N8W7QQT6BB404HXXPBDMMTKJGSOHILWLD4D7QC7VUPLASC5NWBY3X8W36IK5DU7RJ6OHMYVYF1C2H9WVQUR1AYNM0XFZIR11167Q57RGMX2J0SPFR56QPPKI2PRJJ5ZVK3DIX5UVWVU1V9NNN20Z31GMYD0XFNUF1J4HBFISU1HC8LX27E9YQDUZFZSJLR42KTQVGI6Q7RO0EOHDZFO39F81RYODOVFQHMJ47T' where id=33; -update noar ti set v0='XSKXM40W4WOTXYCA6UR8GS2ERD5N8W7QQT6BB404HXXPBDMMTKJGSOHILWLD4D7QC7VUPLASC5NWBY3X8W36IK5DU7RJ6OHMYVYF1C2H9WVQUR1AYNM0XFZIR11167Q57RGMX2J0SPFR56QPPKI2PRJJ5ZVK3DIX5UVWVU1V9NNN20Z31GMYD0XFNUF1J4HBFISU1HC8LX27E9YQDUZFZSJLR42KTQVGI6Q7RO0EOHDZFO39F81RYODOVFQHMJ47T' where id=33; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='MVO00J3SZNMRUIL2S0LQEDY9BXD82WI8G9CECGZJTF7K9ZF2H0EMNHRYCN3BP6IY5SVAK95VD47OUPKK9KY9N86RCANP10KSAKNZ8NGE93IHO2C2KVMF3BKFSWQOYKGG5M2SFU30UYR81E0SMTV1FN1SDPPX3B0X4NAY7C2V4Y3WJ6PB74KD4Y79V6COMG5RBHU4AUHXDDESA0WBS8ZRO5YHCTW5D5T6NUFD4RXEBKAV35KNB43PWRFC3QL5DCTV6' where id=33; -update noar ti set v1='MVO00J3SZNMRUIL2S0LQEDY9BXD82WI8G9CECGZJTF7K9ZF2H0EMNHRYCN3BP6IY5SVAK95VD47OUPKK9KY9N86RCANP10KSAKNZ8NGE93IHO2C2KVMF3BKFSWQOYKGG5M2SFU30UYR81E0SMTV1FN1SDPPX3B0X4NAY7C2V4Y3WJ6PB74KD4Y79V6COMG5RBHU4AUHXDDESA0WBS8ZRO5YHCTW5D5T6NUFD4RXEBKAV35KNB43PWRFC3QL5DCTV6' where id=33; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='7TR96M5M7G1QKYIEU7VF5L9O3KQ49X5KBO6EW748DH0ISCJJQWR62CXIDFSMO4I6H1PBTXOOPUEASNZC7GF2681H1ZDWBR22KGPDSX35DIJWOWTEDN826QC98MZTNX3LZNDLU5SYLPUYUTNRJHEVFYNMDAZX1WBH0XP1TKD5VPTRGVOD9M6Y4MDB5C3NR1JYUZ625KDRLJ0AU39A562W5DLF31JXUG7GWWPVJYWDA8GI174HKWN0800YFIPQKG0WV' where id=33; -update noar ti set v2='7TR96M5M7G1QKYIEU7VF5L9O3KQ49X5KBO6EW748DH0ISCJJQWR62CXIDFSMO4I6H1PBTXOOPUEASNZC7GF2681H1ZDWBR22KGPDSX35DIJWOWTEDN826QC98MZTNX3LZNDLU5SYLPUYUTNRJHEVFYNMDAZX1WBH0XP1TKD5VPTRGVOD9M6Y4MDB5C3NR1JYUZ625KDRLJ0AU39A562W5DLF31JXUG7GWWPVJYWDA8GI174HKWN0800YFIPQKG0WV' where id=33; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='EX850XK9PKFSCD03YP9U2ZR2KEVT4GLUMP1TQSVJI5P85E2JLHYLDSRX85CJFE1K2RB9VPGVDJ4RWU7F46UIRR25BZW9LWKCQHJWCEKU0SKOUP9DH9765XPBRUF8QNORZ54YXSG8RNERD3ZUHRR1QZ0UPOIXBAUD74ILFVOJSKJA54V85OU87ZPY8ESZPET2SYAP96L2N3DI7SJQV8AZ379F3FCFF42W7ZXBLFNJKXQARXGQXUVTUA9Y26WIQG5DJ' where id=33; -update noar ti set v3='EX850XK9PKFSCD03YP9U2ZR2KEVT4GLUMP1TQSVJI5P85E2JLHYLDSRX85CJFE1K2RB9VPGVDJ4RWU7F46UIRR25BZW9LWKCQHJWCEKU0SKOUP9DH9765XPBRUF8QNORZ54YXSG8RNERD3ZUHRR1QZ0UPOIXBAUD74ILFVOJSKJA54V85OU87ZPY8ESZPET2SYAP96L2N3DI7SJQV8AZ379F3FCFF42W7ZXBLFNJKXQARXGQXUVTUA9Y26WIQG5DJ' where id=33; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='SFHI9NDE9KJTS2PR3WAOGITVL3O5XC2D6EZGGQS0GAPE879RKWEKMN5JO7GIHY6GAZE77P2HOXF7DCG39XU3HG7HYOQK4XULG9YY1EW5GVHL3IVJJ7HV5NLRJ13KE284G7C7SO69XH7V0KPE3X0S5ADF93QPRAZRQ9T75SOCM2UKTPWY5JDHBI3HJ5W8DHK9MC15VVEZTO7W1417T5JTI307B5EP80OX1LRIT5U6L0EHG35I40YSRTTDF4OIL3MW5' where id=34; -update noar ti set v0='SFHI9NDE9KJTS2PR3WAOGITVL3O5XC2D6EZGGQS0GAPE879RKWEKMN5JO7GIHY6GAZE77P2HOXF7DCG39XU3HG7HYOQK4XULG9YY1EW5GVHL3IVJJ7HV5NLRJ13KE284G7C7SO69XH7V0KPE3X0S5ADF93QPRAZRQ9T75SOCM2UKTPWY5JDHBI3HJ5W8DHK9MC15VVEZTO7W1417T5JTI307B5EP80OX1LRIT5U6L0EHG35I40YSRTTDF4OIL3MW5' where id=34; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='DEDJUM3SPXGT7PQTR99G8UAZNVI4QMJPTUS3G8IBVA91RKY0UKFHPIMBO8XJG79Z4UROWSO68S5V4AL5ZBWYIK31E1N94XC2WRFU8G6SAWF1B78A98E28VYOCC88G3S4NZ52Z3Y49L74NCHKF89KYJDKGKC6OP34IA1ZIVJJ796UMPNYZCBELIPR4XNOYXGBDS5AZYSBFB3FI9J6D3TAHZEXRN6RUNQZSUMLLJQZ3Q7ACW44GC1UB4WWMP7U2NGH8' where id=34; -update noar ti set v1='DEDJUM3SPXGT7PQTR99G8UAZNVI4QMJPTUS3G8IBVA91RKY0UKFHPIMBO8XJG79Z4UROWSO68S5V4AL5ZBWYIK31E1N94XC2WRFU8G6SAWF1B78A98E28VYOCC88G3S4NZ52Z3Y49L74NCHKF89KYJDKGKC6OP34IA1ZIVJJ796UMPNYZCBELIPR4XNOYXGBDS5AZYSBFB3FI9J6D3TAHZEXRN6RUNQZSUMLLJQZ3Q7ACW44GC1UB4WWMP7U2NGH8' where id=34; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='U91REXQP9SQ1RKRPN2RUD73T4C6V95Q9UWP7AQEE6OW44YQUBZ297B599C2TTF61SCTMEYOVWQB4FP4P9I0PDTSLKNXJ3RURNZB6LQF85ZCEP4ET6OEGSRT7QCFVPTXXL3W2XAVCBHLUTTTD6KUM9U490DB1LU9OX2CZST8PRHDSRZ6OE4INQ4DFFYYYQXQDKBTBAN5G2BK4XOXIMEX2DWYMI3JS3G55JT38AY5K5S7TTZEY2V8LA9WVJ2KJEYU84' where id=34; -update noar ti set v2='U91REXQP9SQ1RKRPN2RUD73T4C6V95Q9UWP7AQEE6OW44YQUBZ297B599C2TTF61SCTMEYOVWQB4FP4P9I0PDTSLKNXJ3RURNZB6LQF85ZCEP4ET6OEGSRT7QCFVPTXXL3W2XAVCBHLUTTTD6KUM9U490DB1LU9OX2CZST8PRHDSRZ6OE4INQ4DFFYYYQXQDKBTBAN5G2BK4XOXIMEX2DWYMI3JS3G55JT38AY5K5S7TTZEY2V8LA9WVJ2KJEYU84' where id=34; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='F7RBP3Q9ETJEVGBKI7B699NRJ08Q6X6D0V7A42NR5FD6G64GEZ3YKMQTVH5TOE46Q1HG6JIACDDDGED2WGJU18KAI4UHIOMC5WGMLLI1NJQF6IKG0CQH67A5ZC3BHAWM1ON55CDQHKCXYSD5YMTDRQP2QM46L8DRHAZGMVVM2E573OMM3Q376JY7ACLPD98DTPNEGWF5P79CKV2HBEI58LLGGC3DLO9IXK96PQ9NCU5T4TMXJ4TQBWFDXGG23Q58T' where id=34; -update noar ti set v3='F7RBP3Q9ETJEVGBKI7B699NRJ08Q6X6D0V7A42NR5FD6G64GEZ3YKMQTVH5TOE46Q1HG6JIACDDDGED2WGJU18KAI4UHIOMC5WGMLLI1NJQF6IKG0CQH67A5ZC3BHAWM1ON55CDQHKCXYSD5YMTDRQP2QM46L8DRHAZGMVVM2E573OMM3Q376JY7ACLPD98DTPNEGWF5P79CKV2HBEI58LLGGC3DLO9IXK96PQ9NCU5T4TMXJ4TQBWFDXGG23Q58T' where id=34; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='KIPBKOWZ4H7RA8175AZW3BRYL8H8HIR79KGQRTJDR4CCMDPK1LTP4I20U0KKXUGPX3S0PORGQMZCZFUP5267YFPMTWXIA5ZBL97YZH6VYLZKNMQGXBW6RLUSDHDN93TJHA9XA34PLZ5L1U204DC3S4I9ZEM3MAGWUTBG7CZAE0P2026VV6B095CCWZF1PB5EFPP0LN6VOAIPPGG807YOPALTXNT19K9M9126RMXJIVC4IB0PB5W6PNBPZ5J5B1U2X' where id=35; -update noar ti set v0='KIPBKOWZ4H7RA8175AZW3BRYL8H8HIR79KGQRTJDR4CCMDPK1LTP4I20U0KKXUGPX3S0PORGQMZCZFUP5267YFPMTWXIA5ZBL97YZH6VYLZKNMQGXBW6RLUSDHDN93TJHA9XA34PLZ5L1U204DC3S4I9ZEM3MAGWUTBG7CZAE0P2026VV6B095CCWZF1PB5EFPP0LN6VOAIPPGG807YOPALTXNT19K9M9126RMXJIVC4IB0PB5W6PNBPZ5J5B1U2X' where id=35; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='R3JNMLP698KMVOFVH938MTOIHXUF70QGJYNU8O3L7SCLT7U5DLY6ZYC02WE1N9KG95JND2YTA47EJYRX23NNKQ58WI7Y7U8XKPTRB7MDN51Q8P3Q85V853TQWW5DEO7FAY1PQI1N89CXTJK0FU6FI247BCD2TENU2HXOGY3RGK3A9L9CMYKR64UTT702123V7OEYJE1GGWVV1RM9Y5QAYWLUPXCA42R8F0SPGL9E8JH3Y8FX6GPM1LWHRE048OS5Y' where id=35; -update noar ti set v1='R3JNMLP698KMVOFVH938MTOIHXUF70QGJYNU8O3L7SCLT7U5DLY6ZYC02WE1N9KG95JND2YTA47EJYRX23NNKQ58WI7Y7U8XKPTRB7MDN51Q8P3Q85V853TQWW5DEO7FAY1PQI1N89CXTJK0FU6FI247BCD2TENU2HXOGY3RGK3A9L9CMYKR64UTT702123V7OEYJE1GGWVV1RM9Y5QAYWLUPXCA42R8F0SPGL9E8JH3Y8FX6GPM1LWHRE048OS5Y' where id=35; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='YB1OGOHUMM19PPZ0O81KO52J44MW3F74T09SDV2AGQ0G1WSH2IWTVLN9MFZ55Q0LCGYA4A73ZGLG49IB7MAGLUQ0XN591K0XHYA4ENBF7XH24GVRKC5V70URJV7VQ8AN7Y92JPF8AZHO8H2URLXTVE6T02REGMJNTNX5PM5G04R8DA33EOJV1J79F4MF8EZCN16BIJXO5WPLHI0Z4111RIU4MQI3IWSGF6L3CX0H2AKOZUA9VF5R3KSRRXGVOBZ7H' where id=35; -update noar ti set v2='YB1OGOHUMM19PPZ0O81KO52J44MW3F74T09SDV2AGQ0G1WSH2IWTVLN9MFZ55Q0LCGYA4A73ZGLG49IB7MAGLUQ0XN591K0XHYA4ENBF7XH24GVRKC5V70URJV7VQ8AN7Y92JPF8AZHO8H2URLXTVE6T02REGMJNTNX5PM5G04R8DA33EOJV1J79F4MF8EZCN16BIJXO5WPLHI0Z4111RIU4MQI3IWSGF6L3CX0H2AKOZUA9VF5R3KSRRXGVOBZ7H' where id=35; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='0O9FEN1NI7VV3MCX55WT0W4HV2MTA78ZJDSEXYZWHS4ARLW5YJYMCHBSSKD4DBTMIVGEHR1HNPBUGDSJE8QWS6I86764YV7JHK97F1K3IDG5A700IWPM720C5KSEXR2HHRHYAOA8ERV23XHAJN8M5SS9GLOWIM37TJAULKI8VPR5RFS04PFFJT9AUDCC0BW78YGISCB7LBQW0BZWJBSORJA64R4781YND58JEBKG8TN7KAZFQC3OQRNWS89QX78W5' where id=35; -update noar ti set v3='0O9FEN1NI7VV3MCX55WT0W4HV2MTA78ZJDSEXYZWHS4ARLW5YJYMCHBSSKD4DBTMIVGEHR1HNPBUGDSJE8QWS6I86764YV7JHK97F1K3IDG5A700IWPM720C5KSEXR2HHRHYAOA8ERV23XHAJN8M5SS9GLOWIM37TJAULKI8VPR5RFS04PFFJT9AUDCC0BW78YGISCB7LBQW0BZWJBSORJA64R4781YND58JEBKG8TN7KAZFQC3OQRNWS89QX78W5' where id=35; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='IM8QDXKPVPXKT89A31YI38PGPHQ35TCMVCEB0GV2VRP7T25GC6EG7K8PG9KBLYSE07SVVFHI8GS2AQOHDPRKF6IYWG4737SUQ19CPTXX5W2AHH9LQLS4R5PPODSDDXQXL5QYWKGAJS6DGQR8F5G2WLB8NUI1TESITLG1IGI4HEF013K842XL7EFCD9FS7Q4E23REDCY36OYM0W9Z7CJH3EFSWA5B99H3XULZCFPFRP0ISAW1MQJFB61VL0YHDZYQD' where id=36; -update noar ti set v0='IM8QDXKPVPXKT89A31YI38PGPHQ35TCMVCEB0GV2VRP7T25GC6EG7K8PG9KBLYSE07SVVFHI8GS2AQOHDPRKF6IYWG4737SUQ19CPTXX5W2AHH9LQLS4R5PPODSDDXQXL5QYWKGAJS6DGQR8F5G2WLB8NUI1TESITLG1IGI4HEF013K842XL7EFCD9FS7Q4E23REDCY36OYM0W9Z7CJH3EFSWA5B99H3XULZCFPFRP0ISAW1MQJFB61VL0YHDZYQD' where id=36; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='17QBE7POFBXNMYBLU63YH9QNL6KGBWYQGUNN6W9JXAVS89OBJY9EQEJ5T1CS0M45A1JH4HCBFE97F0G0L5UA29OI3EX3GHDJ8EOB2DUXRKMNIGU7SWEGTRVMYYDBMP500JMNYI8261H19D0B992K1CE1L9PKUVSYBDNJHUTX34SUJ1TJX0ZBJKB0OSYOJ79WKXVOB4YIPIXAMB1Z9TRTDTZ2FT71THDF1R4B98HBCG23P57ZW6NMQ5MOMFSLPYBGE' where id=36; -update noar ti set v1='17QBE7POFBXNMYBLU63YH9QNL6KGBWYQGUNN6W9JXAVS89OBJY9EQEJ5T1CS0M45A1JH4HCBFE97F0G0L5UA29OI3EX3GHDJ8EOB2DUXRKMNIGU7SWEGTRVMYYDBMP500JMNYI8261H19D0B992K1CE1L9PKUVSYBDNJHUTX34SUJ1TJX0ZBJKB0OSYOJ79WKXVOB4YIPIXAMB1Z9TRTDTZ2FT71THDF1R4B98HBCG23P57ZW6NMQ5MOMFSLPYBGE' where id=36; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='O1SUXGDYRNSYX9Q0A1XCKGVYGFFQD2H1VU6OE3GUUCPYEMYQPV0IOS4H9ONK3R0WC6LHXAUBWEQ43ICX4H3B15MQNO999FLJ2VMVAOPS16MJC6XBVVK7F4TK8ZSIYKC529IXQ96T8EL2QZNPW5NAY79OCXEJ2BPELUSYGO6Q3XVXFA8ZMAZD5UAGFDYH3BEHKWNJ3B3NJXSPYXFEFAGWS9TQLMZWDKA5FHBNIYQYEVV1NDAWRYMJ6X1HXB4A583MF' where id=36; -update noar ti set v2='O1SUXGDYRNSYX9Q0A1XCKGVYGFFQD2H1VU6OE3GUUCPYEMYQPV0IOS4H9ONK3R0WC6LHXAUBWEQ43ICX4H3B15MQNO999FLJ2VMVAOPS16MJC6XBVVK7F4TK8ZSIYKC529IXQ96T8EL2QZNPW5NAY79OCXEJ2BPELUSYGO6Q3XVXFA8ZMAZD5UAGFDYH3BEHKWNJ3B3NJXSPYXFEFAGWS9TQLMZWDKA5FHBNIYQYEVV1NDAWRYMJ6X1HXB4A583MF' where id=36; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='UM2YR981US8UTN79O8LQXOQJ3EKID406ASSAOT5LR7V02GO943LC06DUBK87X9VB5XP10VYTLW2V8RAYAEJ9RK5LSFZR7LFV552BKJCLN2GZ93Z8I4ENCMN4GDIFHK4LI9NQM3XEAQXH1MRIIQZDRC2D94NEANNYOXVLHFAHX6RZGRU0BKWCBIF1NVKP0920CJZ6E5KE58C9ER26M2VPC5CP941Z2QG55U06UWUSQ7VDU0ONG0LJXRYZ3WQEZ071H' where id=36; -update noar ti set v3='UM2YR981US8UTN79O8LQXOQJ3EKID406ASSAOT5LR7V02GO943LC06DUBK87X9VB5XP10VYTLW2V8RAYAEJ9RK5LSFZR7LFV552BKJCLN2GZ93Z8I4ENCMN4GDIFHK4LI9NQM3XEAQXH1MRIIQZDRC2D94NEANNYOXVLHFAHX6RZGRU0BKWCBIF1NVKP0920CJZ6E5KE58C9ER26M2VPC5CP941Z2QG55U06UWUSQ7VDU0ONG0LJXRYZ3WQEZ071H' where id=36; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='E7HM12G1PKE9Q53X2NT75Q27YTPCQ6Q5228Q1WTACZEHQA28VEWTLRB0SBBS0NX98Q1543BU53PNDDJY0KA2DU3IIV0OJFXNP93Z9GK6UTIFN1PYC9FR18GY1R09TIL7RZK3ELL4D0D3IBC23VUVYK3BHUDE7J1H62323OJUQQO68SMWS9FOAUKLQLZHOQ1H2I51IRW0NQ1H9SLTHYUH1Q30E39UGNEOV8MLM8VHVDJYQZIWO5XLD7N04TWD9T2M5' where id=37; -update noar ti set v0='E7HM12G1PKE9Q53X2NT75Q27YTPCQ6Q5228Q1WTACZEHQA28VEWTLRB0SBBS0NX98Q1543BU53PNDDJY0KA2DU3IIV0OJFXNP93Z9GK6UTIFN1PYC9FR18GY1R09TIL7RZK3ELL4D0D3IBC23VUVYK3BHUDE7J1H62323OJUQQO68SMWS9FOAUKLQLZHOQ1H2I51IRW0NQ1H9SLTHYUH1Q30E39UGNEOV8MLM8VHVDJYQZIWO5XLD7N04TWD9T2M5' where id=37; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='ABB0S6RL26NXW97E91XYZZGCDAQYTI1JY04EGVXE71QP5T12OTF5WU2332B55LDB6W3P24LO283EV2P00JZXFFFYBB6DQSY9FKS9DC8V3B0NKIRBYRCPU89F8I7CL7YS4T9PXLME4B6YXQXPQQNG90SROEX677XKNTKYXUVUQ1G02KX1067RHWMWGTMT238KLH8IAEY8W7A3ERCUL7V80IQ21ZXVKIDGZV3Y8WJ4DMLKN541Z2M1IXYUOV8KXOP23' where id=37; -update noar ti set v1='ABB0S6RL26NXW97E91XYZZGCDAQYTI1JY04EGVXE71QP5T12OTF5WU2332B55LDB6W3P24LO283EV2P00JZXFFFYBB6DQSY9FKS9DC8V3B0NKIRBYRCPU89F8I7CL7YS4T9PXLME4B6YXQXPQQNG90SROEX677XKNTKYXUVUQ1G02KX1067RHWMWGTMT238KLH8IAEY8W7A3ERCUL7V80IQ21ZXVKIDGZV3Y8WJ4DMLKN541Z2M1IXYUOV8KXOP23' where id=37; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='UVAO28FY9545RHV4QHEQF717OJZ2SVINNIC155EWFW98U1D5E9OAQP61QD8XSAXRZWDCSZIM3C6OTI1JBKPG0W7YA06VGYU3VIJQ4KH8S5RZ7L0A83796RYUI1NGAU7LH5UHP9JCQE53AGXC74416T4DCUOMMHZIZJV6A563LMX96GBMJ7EI78QLBL23781FZENZYLRO8CY89420BP39R79TASYAAVB1N842THPNMNMFRAMH99ZXLWU9GOK16XOF8' where id=37; -update noar ti set v2='UVAO28FY9545RHV4QHEQF717OJZ2SVINNIC155EWFW98U1D5E9OAQP61QD8XSAXRZWDCSZIM3C6OTI1JBKPG0W7YA06VGYU3VIJQ4KH8S5RZ7L0A83796RYUI1NGAU7LH5UHP9JCQE53AGXC74416T4DCUOMMHZIZJV6A563LMX96GBMJ7EI78QLBL23781FZENZYLRO8CY89420BP39R79TASYAAVB1N842THPNMNMFRAMH99ZXLWU9GOK16XOF8' where id=37; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='E804XUFNM5CS6KBB610LA707IS191EKFVSTDEDZEV0RNT7E83E79UVW1UX1D770S9ODRMCIPNLR68VJRRU4T96REOSZ7Y3KUR79HJF6YOJWRT3HLWC03QGCWQEFSPWRZKKFPTWEC68M70UWDP522RFHXMKT8C976F1W17E1EJGM59W8F03GA4K6GPH5UKDSWZSUCGJGQLDTBL6AOULDPLJO1B54XLAIJA6M90D1F7JUXMLB0FUBJ37JIMSYV3D85A' where id=37; -update noar ti set v3='E804XUFNM5CS6KBB610LA707IS191EKFVSTDEDZEV0RNT7E83E79UVW1UX1D770S9ODRMCIPNLR68VJRRU4T96REOSZ7Y3KUR79HJF6YOJWRT3HLWC03QGCWQEFSPWRZKKFPTWEC68M70UWDP522RFHXMKT8C976F1W17E1EJGM59W8F03GA4K6GPH5UKDSWZSUCGJGQLDTBL6AOULDPLJO1B54XLAIJA6M90D1F7JUXMLB0FUBJ37JIMSYV3D85A' where id=37; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='KSRPHW9R54VWIIQYR5AMU7I0FVD5V0FOZ2WGXNL9ZGIE4JAHNW6DRK5P6XLX143GDVI41FM97TY00GQ9U7DMUNPKUUZ8H7CLIBASN948ZELVLW3Z30YP9JCWH9IE2KW6BAT1KRNATOL95PY1SW82ERYT7PDJUT5RAEGTYREB4CFSRWH4SVA6K654LJ03FIRGMKKSGOVJEABFHTRVBK9DS2OTXZ3ZSYW1CW3YL9QXYBQ4CMJQSIDADCYMIC8A1OIQW' where id=38; -update noar ti set v0='KSRPHW9R54VWIIQYR5AMU7I0FVD5V0FOZ2WGXNL9ZGIE4JAHNW6DRK5P6XLX143GDVI41FM97TY00GQ9U7DMUNPKUUZ8H7CLIBASN948ZELVLW3Z30YP9JCWH9IE2KW6BAT1KRNATOL95PY1SW82ERYT7PDJUT5RAEGTYREB4CFSRWH4SVA6K654LJ03FIRGMKKSGOVJEABFHTRVBK9DS2OTXZ3ZSYW1CW3YL9QXYBQ4CMJQSIDADCYMIC8A1OIQW' where id=38; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='CDY0BKT8MTJ47DYFUX93PLD18YZM2OE079MSJDYS1W6CMQOOJB2OVN3N9NL316LMGT9DSN89Q2P6TS2AOYJMB0Y19JE87KOZOO1JQXI7CMI8YWC9DUY86TXL8P88UUGCPKB7TWZWF2JACM8ARX7QZAOV5WQWG0A9V35LVQK6CEHW9U78AWJONKF49JYNA7AO2ZMFM926Z8RD72YWG0Y3Y6RZH6INL42GFTOYQ0LJ1VSCBVSHSXMT9VD97OV9N66NC' where id=38; -update noar ti set v1='CDY0BKT8MTJ47DYFUX93PLD18YZM2OE079MSJDYS1W6CMQOOJB2OVN3N9NL316LMGT9DSN89Q2P6TS2AOYJMB0Y19JE87KOZOO1JQXI7CMI8YWC9DUY86TXL8P88UUGCPKB7TWZWF2JACM8ARX7QZAOV5WQWG0A9V35LVQK6CEHW9U78AWJONKF49JYNA7AO2ZMFM926Z8RD72YWG0Y3Y6RZH6INL42GFTOYQ0LJ1VSCBVSHSXMT9VD97OV9N66NC' where id=38; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='0WRUD5M74TMCCFUW6RT45T7OUB4WLC9VB4X9KCATJI0WZ5J1BXJQ2M7A7A7PBWEJKK0KYVHRFCPBYXMGHDQLOG1P4AP5WRLN54XA9UQA3I8JOF8N2T36UUHQKD35JOAMZLKQPXJ9RNH1SSA9ZRG89BAGIL3NRCLACV8592HKN40M1MQMI2VBX5LP7RK17UUMD07IESVO838N9HR16Z80LHACAR1GE0R0HVBCSSUCKM0MKL8DPV249QEK9BCKHE7LR' where id=38; -update noar ti set v2='0WRUD5M74TMCCFUW6RT45T7OUB4WLC9VB4X9KCATJI0WZ5J1BXJQ2M7A7A7PBWEJKK0KYVHRFCPBYXMGHDQLOG1P4AP5WRLN54XA9UQA3I8JOF8N2T36UUHQKD35JOAMZLKQPXJ9RNH1SSA9ZRG89BAGIL3NRCLACV8592HKN40M1MQMI2VBX5LP7RK17UUMD07IESVO838N9HR16Z80LHACAR1GE0R0HVBCSSUCKM0MKL8DPV249QEK9BCKHE7LR' where id=38; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='DTSJLM92OSKYU8SVNKCZ10CIYYCSJT2OIOYFOGWWKTSQ4QQIMGG91O0QORDGDVWWUY8GPZFOS1WNDCZ4SGNGTIAPUDYR03SET7VW5KPFG24VZIPRIHAC69U4JWVDHE925A8XTXZFFABE7RLGBYNS8JDBSEHMR23CT93LL6UG4SVRTX51AMEODIK5S0U16O5JR9OE5KTLE3NYLMMDVLO00HCJKZCP48HJZB003O1CV2DOW3YK30AB2EM56A71QZZ38' where id=38; -update noar ti set v3='DTSJLM92OSKYU8SVNKCZ10CIYYCSJT2OIOYFOGWWKTSQ4QQIMGG91O0QORDGDVWWUY8GPZFOS1WNDCZ4SGNGTIAPUDYR03SET7VW5KPFG24VZIPRIHAC69U4JWVDHE925A8XTXZFFABE7RLGBYNS8JDBSEHMR23CT93LL6UG4SVRTX51AMEODIK5S0U16O5JR9OE5KTLE3NYLMMDVLO00HCJKZCP48HJZB003O1CV2DOW3YK30AB2EM56A71QZZ38' where id=38; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='KAQ5LAOU70U5RYC8OAG4KYV1HJ23CZMSK1E2I4Z32YBQZKB5A7RECIHXFCYQS3D5HBW2V9E7BGJ2NTIPY35IJKL83TDVBLOKJYMKC1572NUKDF8D1H6544YM06XDNSGGZKKN6KKIDWIWSRGYLHU3X91HGWW14MPCO5NT5OVHVBZO305L1JW4ROE1KHZV3FHDMRC1JC05HRKRNLNRQD9MNKAIV99JE0463KSC8SPCC5USVSB8WC48ME0K9P6IV33SY' where id=39; -update noar ti set v0='KAQ5LAOU70U5RYC8OAG4KYV1HJ23CZMSK1E2I4Z32YBQZKB5A7RECIHXFCYQS3D5HBW2V9E7BGJ2NTIPY35IJKL83TDVBLOKJYMKC1572NUKDF8D1H6544YM06XDNSGGZKKN6KKIDWIWSRGYLHU3X91HGWW14MPCO5NT5OVHVBZO305L1JW4ROE1KHZV3FHDMRC1JC05HRKRNLNRQD9MNKAIV99JE0463KSC8SPCC5USVSB8WC48ME0K9P6IV33SY' where id=39; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='MPNC600OM7GT50W8ZF2VXBPNSVMU15BANJF7AAZLWH3ZNGIQ9ZFMMM7CPYPSO0VW8PD4CCQWXFSE9PSP6I47RZXGK0AWV0B8J8V4OTM23ND4TXFCJQQDA2BQA161SB7TP3054ZI9Q9UN563HLTP35IZ0UH944ST3RLTAX2YA78UTHZJATV2QPFYEELYH3E8GJ1B5BEDM8P25O4WCN0M1WDLSKLU4B5128W1HS8RJ04VMYY2K10ST2GYEOYJMHLDHQ' where id=39; -update noar ti set v1='MPNC600OM7GT50W8ZF2VXBPNSVMU15BANJF7AAZLWH3ZNGIQ9ZFMMM7CPYPSO0VW8PD4CCQWXFSE9PSP6I47RZXGK0AWV0B8J8V4OTM23ND4TXFCJQQDA2BQA161SB7TP3054ZI9Q9UN563HLTP35IZ0UH944ST3RLTAX2YA78UTHZJATV2QPFYEELYH3E8GJ1B5BEDM8P25O4WCN0M1WDLSKLU4B5128W1HS8RJ04VMYY2K10ST2GYEOYJMHLDHQ' where id=39; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='605UIPV63A8Q5KTEC1XDGUKUHZQU8YGCU33EO02NEKDDZ1YT73TGL63AA64WIK2FXKG8U9TNBGLCUZ3CLWPZHF2PRNAVRPA7XTMDI5AMB111BNWXIDZFFIRHLEWTC5YOC6DBJV5VGTD39IE9XIPYBX0ZPMUGH259YGJPHXNVVR1V3FF6AQT0IGCVPWF6ALO4HSB031JQ0W38JG4RYC5ERAV74SLIFFPXCBIMDWZ0BOSHMPQNMS3DQENXI9X6PVNG3' where id=39; -update noar ti set v2='605UIPV63A8Q5KTEC1XDGUKUHZQU8YGCU33EO02NEKDDZ1YT73TGL63AA64WIK2FXKG8U9TNBGLCUZ3CLWPZHF2PRNAVRPA7XTMDI5AMB111BNWXIDZFFIRHLEWTC5YOC6DBJV5VGTD39IE9XIPYBX0ZPMUGH259YGJPHXNVVR1V3FF6AQT0IGCVPWF6ALO4HSB031JQ0W38JG4RYC5ERAV74SLIFFPXCBIMDWZ0BOSHMPQNMS3DQENXI9X6PVNG3' where id=39; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='Y1FYBXZ6G4JFU28VOU58PG15RSOZEF1GDQTE4ONT7BUKOPCB5AN6FV360CM4PJGLNCM38JHHTZMRI5LUC0PGAVI9G4KOEN4I4D6377118MZL152AE0UJDAT1YI6Y9541024C9JRNDH7CP1HEJPUDCLM9P40W6SU8G92E3IV8PNMEMGX4I1RZAEAUA5YVY5S2VQ247J0WE4ZI3Y1PFJIDUHNMZX7W5ZXU6HKRMWXHAUKM8ASLKS4R71DZ9J19ZA361' where id=39; -update noar ti set v3='Y1FYBXZ6G4JFU28VOU58PG15RSOZEF1GDQTE4ONT7BUKOPCB5AN6FV360CM4PJGLNCM38JHHTZMRI5LUC0PGAVI9G4KOEN4I4D6377118MZL152AE0UJDAT1YI6Y9541024C9JRNDH7CP1HEJPUDCLM9P40W6SU8G92E3IV8PNMEMGX4I1RZAEAUA5YVY5S2VQ247J0WE4ZI3Y1PFJIDUHNMZX7W5ZXU6HKRMWXHAUKM8ASLKS4R71DZ9J19ZA361' where id=39; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='0VKQ5X2PQQDTJV12EFUYSXYQU3ISX60OPPIQ0XQKM4MHW2HPQB3PQAS9HSOKT9S6Z2N3DAVFMBC2LQVY5BYO8J6NWFH86FJCPT82YJV5RRU7ATWJ3WGR7WK11Q4CZ8HP7KLY5BGAADOFWMIZR8IN4DVTXGZA9QQTJEHTR0KEYNUZ0CE9RSC7HRJNCORDS1Q7NL01VZEGW6POGQD5E5SJFING7V21VNSQW8CMFLU9ARI3X3RWWMB8DUAGE6FVQWMBI' where id=40; -update noar ti set v0='0VKQ5X2PQQDTJV12EFUYSXYQU3ISX60OPPIQ0XQKM4MHW2HPQB3PQAS9HSOKT9S6Z2N3DAVFMBC2LQVY5BYO8J6NWFH86FJCPT82YJV5RRU7ATWJ3WGR7WK11Q4CZ8HP7KLY5BGAADOFWMIZR8IN4DVTXGZA9QQTJEHTR0KEYNUZ0CE9RSC7HRJNCORDS1Q7NL01VZEGW6POGQD5E5SJFING7V21VNSQW8CMFLU9ARI3X3RWWMB8DUAGE6FVQWMBI' where id=40; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='NYE9S343RDJK6E1Z6PAPI7WJLN5U4BFHJYWOBPMW89VF2OTHRYNSRVZP3OJ0DMCWMZDBOH0KJLWF7IDK6AI7SQ6M8DOT00BQQBUY7Y9E8AGKW8BTXMJEBVYYMXCAUKAIC95U0PRUUK7GG4UI1IXZ4EDO5IK6MGNSG68S30Y6I93TMTNLCX3KQYE03V5SWVXJ7K21VK3SN9FIT7VIK1IZNG1YZRF12K7RJNQXXAIPQBO4XE10VYWPYJS0ANTDEGBNJ' where id=40; -update noar ti set v1='NYE9S343RDJK6E1Z6PAPI7WJLN5U4BFHJYWOBPMW89VF2OTHRYNSRVZP3OJ0DMCWMZDBOH0KJLWF7IDK6AI7SQ6M8DOT00BQQBUY7Y9E8AGKW8BTXMJEBVYYMXCAUKAIC95U0PRUUK7GG4UI1IXZ4EDO5IK6MGNSG68S30Y6I93TMTNLCX3KQYE03V5SWVXJ7K21VK3SN9FIT7VIK1IZNG1YZRF12K7RJNQXXAIPQBO4XE10VYWPYJS0ANTDEGBNJ' where id=40; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='Z6P0FIWZ6JVONA8AW2FPUHTZQQDG3Q6I9LNNPDRKYS7RF4F4S2Z8ASYA7SR5RSWKG9XV3H4IVHJQM0HC8M8QRHU5RGKDLJW02ZPJ63B6XS886B59Y7P29II593EQNKG8OBW3OLXHTJQHV8ZPC118O5U50IAPOHYS1OHIJYNV6YXCKETNF00LCGRAVIWSEUV5RI58SFJ7HJE7U6ZOYY2XX1ST45CELQV1N4IE47JRCUI895W59L6FIY4MTX3BF9JJY' where id=40; -update noar ti set v2='Z6P0FIWZ6JVONA8AW2FPUHTZQQDG3Q6I9LNNPDRKYS7RF4F4S2Z8ASYA7SR5RSWKG9XV3H4IVHJQM0HC8M8QRHU5RGKDLJW02ZPJ63B6XS886B59Y7P29II593EQNKG8OBW3OLXHTJQHV8ZPC118O5U50IAPOHYS1OHIJYNV6YXCKETNF00LCGRAVIWSEUV5RI58SFJ7HJE7U6ZOYY2XX1ST45CELQV1N4IE47JRCUI895W59L6FIY4MTX3BF9JJY' where id=40; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='4QJFZJF1OIDGJO8L3JF1FU8KVRBVCAW0I0OXX34SSV6WKU2TDADOYNHYLKF8S1CN9FF0HSAKFMH0Q47CBSLUBEHS64XSOY0H6WU4KZCFJ130BEYBV4O1Q8KQAHCVRH634IQSXHGH50SMT3Y86819GNDYMNNL6RJFG0LYVYG8JIM22W5D5I961Y2692JKPG4DEVUKIKRHB51F8OEUWTCEH50ECVVLU2SBV6W1NHWESX47TLCHSE796YK6CLNJV765T' where id=40; -update noar ti set v3='4QJFZJF1OIDGJO8L3JF1FU8KVRBVCAW0I0OXX34SSV6WKU2TDADOYNHYLKF8S1CN9FF0HSAKFMH0Q47CBSLUBEHS64XSOY0H6WU4KZCFJ130BEYBV4O1Q8KQAHCVRH634IQSXHGH50SMT3Y86819GNDYMNNL6RJFG0LYVYG8JIM22W5D5I961Y2692JKPG4DEVUKIKRHB51F8OEUWTCEH50ECVVLU2SBV6W1NHWESX47TLCHSE796YK6CLNJV765T' where id=40; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='HWRU6D5LE6HWXEN5S6W52X2HN11LQR9FCIHJPWAF6HSJDR7EEVE288F8DA8M2UZUE7F12BVG61VIDZ7BNXXOZWI3Y2N4705AN3866NQK6YPWH4LI48ZFUCTRLWRLT7563USJJXEKLQOPN1GAUGVR00E44D5WG6T2AHNXS2CFVKMHCJSX5ES2XVOINAQCL1JW07URUIRPAAW4CT81EHCKYNYK3KDRS6ZYL11EF6EQEOE7K2C168T5Y64JVZOK5ELCQ' where id=41; -update noar ti set v0='HWRU6D5LE6HWXEN5S6W52X2HN11LQR9FCIHJPWAF6HSJDR7EEVE288F8DA8M2UZUE7F12BVG61VIDZ7BNXXOZWI3Y2N4705AN3866NQK6YPWH4LI48ZFUCTRLWRLT7563USJJXEKLQOPN1GAUGVR00E44D5WG6T2AHNXS2CFVKMHCJSX5ES2XVOINAQCL1JW07URUIRPAAW4CT81EHCKYNYK3KDRS6ZYL11EF6EQEOE7K2C168T5Y64JVZOK5ELCQ' where id=41; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='2REATM9LDEW0A5B9N2185CGR5PBLVPYDE2DKU0O7M7EJA5PI8DU5J9BGJZI9IQ8U3IRM5AV9I8EFVKZ1AYC26QQU9SNONZAMO6JBL1DRAK7PR8760EA8EYEHV0JF35CKVNB537OQ4Z074XMH2XWU33J8D3S737QHS6FXI9GIUS404ZOIJWXZGVG77S2HO0ZX6TZ7V0URU55IXKXN9JRJBFDZUEM7GO9KOR7BKJH6DEG3WLS88EPLBQ2L1E6ZVJ8A2' where id=41; -update noar ti set v1='2REATM9LDEW0A5B9N2185CGR5PBLVPYDE2DKU0O7M7EJA5PI8DU5J9BGJZI9IQ8U3IRM5AV9I8EFVKZ1AYC26QQU9SNONZAMO6JBL1DRAK7PR8760EA8EYEHV0JF35CKVNB537OQ4Z074XMH2XWU33J8D3S737QHS6FXI9GIUS404ZOIJWXZGVG77S2HO0ZX6TZ7V0URU55IXKXN9JRJBFDZUEM7GO9KOR7BKJH6DEG3WLS88EPLBQ2L1E6ZVJ8A2' where id=41; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='O4UXNKM3O0OFP9BVJB264K46BYHG08QWXJUBQ5JGX0WH9IQ77U3GUSMJZUGFM5QGSSHE0MHM51JQZ7ME2EGR7VTLUNMUEJUZ45TI0E4AN4DTPIAT7O4VRV0W7UZVCS5STJDEUHO305FEPTXLTYELHKA85A0TO2FS1U3GO3513PE7CYRLE2VTPRN6FYIZT82G91WG0K24VF9DIRRO34VSL3C3CRF6WUP4VQM8L9J9VXPIO23V8AEFRRZ4ZDYOGD4UQ' where id=41; -update noar ti set v2='O4UXNKM3O0OFP9BVJB264K46BYHG08QWXJUBQ5JGX0WH9IQ77U3GUSMJZUGFM5QGSSHE0MHM51JQZ7ME2EGR7VTLUNMUEJUZ45TI0E4AN4DTPIAT7O4VRV0W7UZVCS5STJDEUHO305FEPTXLTYELHKA85A0TO2FS1U3GO3513PE7CYRLE2VTPRN6FYIZT82G91WG0K24VF9DIRRO34VSL3C3CRF6WUP4VQM8L9J9VXPIO23V8AEFRRZ4ZDYOGD4UQ' where id=41; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='WWQI6SKZJNZ7NTWKG1DDA6SJOLR7VJHSWRXU4P8QHB1LIH45F96SR4DKB4ZC6JDHRF3LW4CK5DROMHJW2HN7NJQKBH22S9PPRNIODSWC2T2HBDCU30BN5I77HJG8FL7N23TJYHNWTOJ4113Q62315EN4ZG1I8A1YGXL64BP3QWCNWLG13MC0DOE35BFQI6QDOA0G3N8LQEY669BVO29IK2JHHNA7RK3MGX75FHOHPJL77M8L9I9RQZBYKNR8BHDHH' where id=41; -update noar ti set v3='WWQI6SKZJNZ7NTWKG1DDA6SJOLR7VJHSWRXU4P8QHB1LIH45F96SR4DKB4ZC6JDHRF3LW4CK5DROMHJW2HN7NJQKBH22S9PPRNIODSWC2T2HBDCU30BN5I77HJG8FL7N23TJYHNWTOJ4113Q62315EN4ZG1I8A1YGXL64BP3QWCNWLG13MC0DOE35BFQI6QDOA0G3N8LQEY669BVO29IK2JHHNA7RK3MGX75FHOHPJL77M8L9I9RQZBYKNR8BHDHH' where id=41; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='B26APH1QO1T9F9IKE73JKNO8R57JW39FU554JGHS8P4ATSZBNZH1KB278NBBLC4WBBJPGAPPYCX9X12OKI1GJ1MZ7WJX0SZP7SVBO0B1RKU65D3T43ZE7RQYYJYVPLYND4743157YYNRCT8OS28RIS6OE67I8UZAN9I4DLY682DH9DU59VGTXW0K0RS51MSECC5T4M383U2JEE7638HL22UX7U8ZSZUVPHFIEFUU5CUTCOTE4BGTCW4SINRGYD70I' where id=42; -update noar ti set v0='B26APH1QO1T9F9IKE73JKNO8R57JW39FU554JGHS8P4ATSZBNZH1KB278NBBLC4WBBJPGAPPYCX9X12OKI1GJ1MZ7WJX0SZP7SVBO0B1RKU65D3T43ZE7RQYYJYVPLYND4743157YYNRCT8OS28RIS6OE67I8UZAN9I4DLY682DH9DU59VGTXW0K0RS51MSECC5T4M383U2JEE7638HL22UX7U8ZSZUVPHFIEFUU5CUTCOTE4BGTCW4SINRGYD70I' where id=42; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='33Y37JH1L18FFA4NRM2LTCHOXV17IJ75CSEC5ALLORHA3XU6HQKZ40R9N9098QH6BQ1JFL13VOZTK3UB610AZ2HORH933INO6J2ELQMVZIVRU0PSUFHIFWO959KVO994OOHN7Q5JPKL48C3PUU2097M89W92POTGYJ0ZZRKTMU8AOLT0AYU2PS4JGMOOLJC2JXFH80VA8VTMRPPRKVAEB5J2D27Z6L0JZXW1O1NRBSZ1Q7I8BC2TQIDMOXSZ5FUDB' where id=42; -update noar ti set v1='33Y37JH1L18FFA4NRM2LTCHOXV17IJ75CSEC5ALLORHA3XU6HQKZ40R9N9098QH6BQ1JFL13VOZTK3UB610AZ2HORH933INO6J2ELQMVZIVRU0PSUFHIFWO959KVO994OOHN7Q5JPKL48C3PUU2097M89W92POTGYJ0ZZRKTMU8AOLT0AYU2PS4JGMOOLJC2JXFH80VA8VTMRPPRKVAEB5J2D27Z6L0JZXW1O1NRBSZ1Q7I8BC2TQIDMOXSZ5FUDB' where id=42; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='4GA1A28P4CUYP2EPQ4AQHCM823H4GYFEIPJKG98DWKAO3J1IFLEAZHGKZUR60DMBOXIYWVS1D0YSWLCZ2IH7V83X51YWYX9IDI15H8AODQO987TCPOQN5DEY3E2KWS4A50KCQPPYNSNNH80PX92O8VD9QB2FHS7W67SG6EQ0L58O2GKFBSSORERP1WR9AJJRLT70JOTT7LP5ARD8FKHDF2E769XZS9M9WGYI4S0PCJ106D3W8U045QO3WYCZN0LUJ' where id=42; -update noar ti set v2='4GA1A28P4CUYP2EPQ4AQHCM823H4GYFEIPJKG98DWKAO3J1IFLEAZHGKZUR60DMBOXIYWVS1D0YSWLCZ2IH7V83X51YWYX9IDI15H8AODQO987TCPOQN5DEY3E2KWS4A50KCQPPYNSNNH80PX92O8VD9QB2FHS7W67SG6EQ0L58O2GKFBSSORERP1WR9AJJRLT70JOTT7LP5ARD8FKHDF2E769XZS9M9WGYI4S0PCJ106D3W8U045QO3WYCZN0LUJ' where id=42; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='TS3JKU2XDJ5H5CGJAUKUC9WLAHHJJVPNHY3V7VJSP9B7Z4TK8J9HASW8A4M699TGENR50R6LMGMWLVAS421IXCMDP2Q45ZUAK7YPNENVDU1QJD4CUORRGUK2PGZ0SWJNGTC6GOW8EE47EULXXWXCFJC3MOKL5C486TUVB34O0L08CZYSILNJQOPETYEAVK88RFJOTBFRPPAF2PJPWBMOS36J12ASE46IH2W2ZP1UXSSHKXBERCZOS3K6LPF40XD2Y' where id=42; -update noar ti set v3='TS3JKU2XDJ5H5CGJAUKUC9WLAHHJJVPNHY3V7VJSP9B7Z4TK8J9HASW8A4M699TGENR50R6LMGMWLVAS421IXCMDP2Q45ZUAK7YPNENVDU1QJD4CUORRGUK2PGZ0SWJNGTC6GOW8EE47EULXXWXCFJC3MOKL5C486TUVB34O0L08CZYSILNJQOPETYEAVK88RFJOTBFRPPAF2PJPWBMOS36J12ASE46IH2W2ZP1UXSSHKXBERCZOS3K6LPF40XD2Y' where id=42; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='CL6V9SSJP77WE8K1NQ02VZYU8RB2Q38UYZCQCFPX24666ZJD3XM60XWX394V7WV2SN374XR0AHPC9CWVOC434DKI4AJIFR83GKZSIFPOTEBNBP2IA9WY4ZYYVY79Q2QNPCCP7EJQIJW4O90LR1VUCL14MZJIU8KZXYWJR1UYWK21J5QPW7H8ZVA0HGJ3A6CYLOBUCWG52ERI5D2QOJ12T655SQFR74V8OUSQC3V44RAH88VHXBOF4D2ET4BFAHFCR' where id=43; -update noar ti set v0='CL6V9SSJP77WE8K1NQ02VZYU8RB2Q38UYZCQCFPX24666ZJD3XM60XWX394V7WV2SN374XR0AHPC9CWVOC434DKI4AJIFR83GKZSIFPOTEBNBP2IA9WY4ZYYVY79Q2QNPCCP7EJQIJW4O90LR1VUCL14MZJIU8KZXYWJR1UYWK21J5QPW7H8ZVA0HGJ3A6CYLOBUCWG52ERI5D2QOJ12T655SQFR74V8OUSQC3V44RAH88VHXBOF4D2ET4BFAHFCR' where id=43; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='PAVN2IYK705NWIJVC5PRM2K05T2SH5FFN8NK7CCQ5PQF81FAA44WGVEF4L1KDMGKXIM4QNKEQ80DTU2CWVMX92KNE330JPF6RONCWGX8Z0MAIYM9LH7YHZYAFUR0KDKZG0CFHQH6KHKBFDUH0VDX6YL08OB548A6DN65SA3FHIJMBQGM49DCJXQ0BCRW0ZYGUGRZ7T0CLVVAWPDWYFM4EDZ4V97E71LQJ50VMVHOIAYOEUGTTYRB5H89SFHE2BLO8' where id=43; -update noar ti set v1='PAVN2IYK705NWIJVC5PRM2K05T2SH5FFN8NK7CCQ5PQF81FAA44WGVEF4L1KDMGKXIM4QNKEQ80DTU2CWVMX92KNE330JPF6RONCWGX8Z0MAIYM9LH7YHZYAFUR0KDKZG0CFHQH6KHKBFDUH0VDX6YL08OB548A6DN65SA3FHIJMBQGM49DCJXQ0BCRW0ZYGUGRZ7T0CLVVAWPDWYFM4EDZ4V97E71LQJ50VMVHOIAYOEUGTTYRB5H89SFHE2BLO8' where id=43; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='A0WF6AH053APLJUK87DY1YX174LILLJFKIN7SBC969KCFXV7K0BT021NYUYFR4G7Y1XFP9PNUT7P43QDZ0MUKC8DL3IEV13UBQNGYIG6SRU93YWARIJPZLC749X2Y5476MJPZL0V5FNERXRA5J1YYARVP7Q5K3PKANY9F3YNWT075UFU1QS74FZB84Q6SKB75AXCKL7CUPXDNT6GD1G2IJ6BFS8T29UJSHU0QUSC8CRQW78SG5DX44CML2LB0IVIK' where id=43; -update noar ti set v2='A0WF6AH053APLJUK87DY1YX174LILLJFKIN7SBC969KCFXV7K0BT021NYUYFR4G7Y1XFP9PNUT7P43QDZ0MUKC8DL3IEV13UBQNGYIG6SRU93YWARIJPZLC749X2Y5476MJPZL0V5FNERXRA5J1YYARVP7Q5K3PKANY9F3YNWT075UFU1QS74FZB84Q6SKB75AXCKL7CUPXDNT6GD1G2IJ6BFS8T29UJSHU0QUSC8CRQW78SG5DX44CML2LB0IVIK' where id=43; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='BFC1W0PDFLDCE05C8PTZTJ0G748NG4V5Y649F9G4YNCWI1EPWSVVNZFR4LMCN72I28U0G6UPFRXA0W5FA2GFK5NTJ45T3BWBCV98IL9AL08JXTP6HEQLQMB5STFKQPSS4CUJFOBSV95FCC0AMY0UPKR9FIXFSS7CIOEJC9TSCGUS51416EG448IO3E2YKN6ONDMMHZLSL0TIPE0U2A8VGA0D31PX2D8BYCE616RWQTN2B4H0GT67CKL63DUEPYOUR' where id=43; -update noar ti set v3='BFC1W0PDFLDCE05C8PTZTJ0G748NG4V5Y649F9G4YNCWI1EPWSVVNZFR4LMCN72I28U0G6UPFRXA0W5FA2GFK5NTJ45T3BWBCV98IL9AL08JXTP6HEQLQMB5STFKQPSS4CUJFOBSV95FCC0AMY0UPKR9FIXFSS7CIOEJC9TSCGUS51416EG448IO3E2YKN6ONDMMHZLSL0TIPE0U2A8VGA0D31PX2D8BYCE616RWQTN2B4H0GT67CKL63DUEPYOUR' where id=43; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='65HF12YYOHEB5PJYWAMTERZR841XDGENHEJJR27LNLID4VLT4H2VDWFATJG5X9SN3BATFDUG3RXE90IB23YKLDJTHGROBTN91WGE14WW4BPRFJJR9FHVWVCGFRHH7SOPSS08QR5SGIUG1C4PMKJA8X1OX87RPBBLZBP1VU8WB65CEXWSY9DWHJ7A5DK90O00CIUPRJ880DXTVQ0FCZJIV13DMMBMGLJM62O3Y1Y6QU1MSFWPFC4EUH3L0DO4HXDFF' where id=44; -update noar ti set v0='65HF12YYOHEB5PJYWAMTERZR841XDGENHEJJR27LNLID4VLT4H2VDWFATJG5X9SN3BATFDUG3RXE90IB23YKLDJTHGROBTN91WGE14WW4BPRFJJR9FHVWVCGFRHH7SOPSS08QR5SGIUG1C4PMKJA8X1OX87RPBBLZBP1VU8WB65CEXWSY9DWHJ7A5DK90O00CIUPRJ880DXTVQ0FCZJIV13DMMBMGLJM62O3Y1Y6QU1MSFWPFC4EUH3L0DO4HXDFF' where id=44; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='KIZI306Y7UFS5PORP394I02OA9WC6MINBNAR2MHMJE567NCDF3VA1804F4T61BYUFG1L3M6F3IS4H2DB7YAHINPRWM68VR4L8W56440ZR0UY04SXIIWCC8Z5AE85VLGK6ISFE0SI2D0ARP6LVPD33XVETPX7BSHAH0SDREB2YFRSZFP3GPT2JXE4Z9VHMTTL86VT69PPVKFWCVLFGZJQZ6WNWRMC601SPZ3HZZQZ14I95FFF1Z1RWLSRBS6S1MWJ0' where id=44; -update noar ti set v1='KIZI306Y7UFS5PORP394I02OA9WC6MINBNAR2MHMJE567NCDF3VA1804F4T61BYUFG1L3M6F3IS4H2DB7YAHINPRWM68VR4L8W56440ZR0UY04SXIIWCC8Z5AE85VLGK6ISFE0SI2D0ARP6LVPD33XVETPX7BSHAH0SDREB2YFRSZFP3GPT2JXE4Z9VHMTTL86VT69PPVKFWCVLFGZJQZ6WNWRMC601SPZ3HZZQZ14I95FFF1Z1RWLSRBS6S1MWJ0' where id=44; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='6MHXEL4ZSOMZGO5G4G5DIT2YDEPKK79WMFLBDP8G7BN1NOSLGQ5D7KPGPWUGUZ7MTJ9EPE0859QOIALMQ6L0KXGVVX6XRULJV8E64XXO1BZUX7WZ26VXUAVF7NF7ORIR2GHN5W8H2BFJL1XSXDPQOFVWF8VFZZC8YXZNOGF2CELXGBKFJOTRSKNRTLWECJMU3SYOE68TNTKIHGM7IK3T857NVL9LVB7CX12PDWQ2NSUGEYO8IPFHYAZGXZGI88OOR' where id=44; -update noar ti set v2='6MHXEL4ZSOMZGO5G4G5DIT2YDEPKK79WMFLBDP8G7BN1NOSLGQ5D7KPGPWUGUZ7MTJ9EPE0859QOIALMQ6L0KXGVVX6XRULJV8E64XXO1BZUX7WZ26VXUAVF7NF7ORIR2GHN5W8H2BFJL1XSXDPQOFVWF8VFZZC8YXZNOGF2CELXGBKFJOTRSKNRTLWECJMU3SYOE68TNTKIHGM7IK3T857NVL9LVB7CX12PDWQ2NSUGEYO8IPFHYAZGXZGI88OOR' where id=44; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='YSYILL831UYPXYNDIOI5WVI203WTEIC1ZIXUB4QOMLXHB31V9NKV0YP2OXI6Y1RW5BVV19ECCCNS0VFZX98IWC6RCYVYA7TYNGQQRMNFLN3F54R030AEPP2Z4ATQYYT08E8V93896YFVD0PJAXLTYURQUA49F6Y7TMS6T6N5AEINR2K3AESWSQHQ88WYTHOYYZ4WCH2Y431XK4YRDEE5KXPRA17U0NZA0C5CRADFSIXM0Y5F2K87MIFXNKUIR79W8' where id=44; -update noar ti set v3='YSYILL831UYPXYNDIOI5WVI203WTEIC1ZIXUB4QOMLXHB31V9NKV0YP2OXI6Y1RW5BVV19ECCCNS0VFZX98IWC6RCYVYA7TYNGQQRMNFLN3F54R030AEPP2Z4ATQYYT08E8V93896YFVD0PJAXLTYURQUA49F6Y7TMS6T6N5AEINR2K3AESWSQHQ88WYTHOYYZ4WCH2Y431XK4YRDEE5KXPRA17U0NZA0C5CRADFSIXM0Y5F2K87MIFXNKUIR79W8' where id=44; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='FGX6QUO3PGR5QQ0N62GC924DZY3ZAGZAIEVZFFXNC2GC3QBUNVGZK8DL2L0J22WSXO81XCP1QF1WTSU6JH27KCDHB0BZ0JVUREJV57I20SUJ9YMJGCCWP097TK8TM81AJOJLXH7CD4WVZUEOUG695D4H5XDHOSTRITIX1B2DFHN1637YH4RITSHFEUW3K6I3VJB42HV48VYB4EXOVPDK27CW48EC2R3XL0VOUIWS0SGWJUM8XG28PFMSM6XMV6E2I' where id=45; -update noar ti set v0='FGX6QUO3PGR5QQ0N62GC924DZY3ZAGZAIEVZFFXNC2GC3QBUNVGZK8DL2L0J22WSXO81XCP1QF1WTSU6JH27KCDHB0BZ0JVUREJV57I20SUJ9YMJGCCWP097TK8TM81AJOJLXH7CD4WVZUEOUG695D4H5XDHOSTRITIX1B2DFHN1637YH4RITSHFEUW3K6I3VJB42HV48VYB4EXOVPDK27CW48EC2R3XL0VOUIWS0SGWJUM8XG28PFMSM6XMV6E2I' where id=45; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='NXRMLALWVI4DK12MNKT9LW1TW5J2MSQ24ZV0MECFGTUI1HKC08KOQUQYQL3NKA0NVB2HD1SVNB1N7LVGAY8S094SUESHJPFE1Q6FTMZQX2A6FW4DP0WPGLZ3J38VN7LA94GWCMP9VTXHB6NN0J3D72A3QLA48CKQMAIMZ6G57REX7H9DKXETPPGSVIOGQMHTJ11L183Z1UK3JMFOIGOUVXNAXFQQBJF7VCCE4CNFDVLJE915Z25EE7R5CVDVZ5GYV' where id=45; -update noar ti set v1='NXRMLALWVI4DK12MNKT9LW1TW5J2MSQ24ZV0MECFGTUI1HKC08KOQUQYQL3NKA0NVB2HD1SVNB1N7LVGAY8S094SUESHJPFE1Q6FTMZQX2A6FW4DP0WPGLZ3J38VN7LA94GWCMP9VTXHB6NN0J3D72A3QLA48CKQMAIMZ6G57REX7H9DKXETPPGSVIOGQMHTJ11L183Z1UK3JMFOIGOUVXNAXFQQBJF7VCCE4CNFDVLJE915Z25EE7R5CVDVZ5GYV' where id=45; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='P1X0GTIFY7R0IME581PI006OKRAN95XD95KET7M75P192TVDOWL45J1G76T7O8P3FA826F49I6AIUSCSCT6ZGRLDZ1O13DKP2KWX3SHAET63JKGMQ71OU3SQN26C9ED6V47LPIL8WFTQA3NT3H9EF8LLLQ3M8T1BOCDZ5T8XPULJE3HGYXRVL2P4WDMADWV09YAYLCKVJHJBKOZ3R1Y38ZX3ZY3JWZBBHFMTP08WC1MTYDZVSH4A4ZHT1DM344JKU' where id=45; -update noar ti set v2='P1X0GTIFY7R0IME581PI006OKRAN95XD95KET7M75P192TVDOWL45J1G76T7O8P3FA826F49I6AIUSCSCT6ZGRLDZ1O13DKP2KWX3SHAET63JKGMQ71OU3SQN26C9ED6V47LPIL8WFTQA3NT3H9EF8LLLQ3M8T1BOCDZ5T8XPULJE3HGYXRVL2P4WDMADWV09YAYLCKVJHJBKOZ3R1Y38ZX3ZY3JWZBBHFMTP08WC1MTYDZVSH4A4ZHT1DM344JKU' where id=45; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='3OBKSF9DZ7PWMQBBJ584R9E1ULIWQU30MIXM5P2984UO7NQKQHOK2NCG7220JHCPVVK0QMY576ENSJ1043LZYACR3UYK3PNDKT37BWWHLWAKJ2SNDLOH71ZCPEOZCEECIW7ZYE7YRTJPZ1BMCQ7WY3M9872IMMK81ORRLGDHLOLLKFZ5N4GIWEYD636E67NQ20BIGC84VLM5U6QUEA6NWDJVLPWQQFKEFKJZ9MMMCMBZCZEDVWCZ3RYNB12VB2KMI' where id=45; -update noar ti set v3='3OBKSF9DZ7PWMQBBJ584R9E1ULIWQU30MIXM5P2984UO7NQKQHOK2NCG7220JHCPVVK0QMY576ENSJ1043LZYACR3UYK3PNDKT37BWWHLWAKJ2SNDLOH71ZCPEOZCEECIW7ZYE7YRTJPZ1BMCQ7WY3M9872IMMK81ORRLGDHLOLLKFZ5N4GIWEYD636E67NQ20BIGC84VLM5U6QUEA6NWDJVLPWQQFKEFKJZ9MMMCMBZCZEDVWCZ3RYNB12VB2KMI' where id=45; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='XPSVIA76FZZ110SS9WUEQTW50A8ZI4XPPRGEOPX4YBBUKMXI600N6JBVGUNOPNV2A5I0H3KTMC959KW5BOE58LPVMSRAPBEY2APC7W8F34MJL7OL2UCQ7O44WEA6OF6GSABY8V3FFGVM2QO8GOM69CY8IKL8HEQ4GNWOAVINNJ8KWJLFSYZ0940T12SKPT0943UWJB4RY9F4P59IJFW8QTIU86ZYYLRJTP7Y5BYQGAT412WTWGPM86EU4J0YI93LO' where id=46; -update noar ti set v0='XPSVIA76FZZ110SS9WUEQTW50A8ZI4XPPRGEOPX4YBBUKMXI600N6JBVGUNOPNV2A5I0H3KTMC959KW5BOE58LPVMSRAPBEY2APC7W8F34MJL7OL2UCQ7O44WEA6OF6GSABY8V3FFGVM2QO8GOM69CY8IKL8HEQ4GNWOAVINNJ8KWJLFSYZ0940T12SKPT0943UWJB4RY9F4P59IJFW8QTIU86ZYYLRJTP7Y5BYQGAT412WTWGPM86EU4J0YI93LO' where id=46; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='MG6SLBHU0405FQXXGERN6CB8NPI374KDI1NBCA7KDX3HAB4LGAED97XNEE5QXJCE32K0ZDXGQEJPGNDB47RDQAITM3LLCC7UTT5ZAJRF48V5S5XRMVCBP3ICD83TGNPFELIC53UCVAGQTSB8UEC32VAOT1H96TJ3HE3GBR4LR5NYIT97MPUD4X932CE3L358Z4HBA68RW6Z7KEJJPSE6YSO28RTKYXAGSATNMG24Z541QC71TVVKRAJI6FWRTMNEZ' where id=46; -update noar ti set v1='MG6SLBHU0405FQXXGERN6CB8NPI374KDI1NBCA7KDX3HAB4LGAED97XNEE5QXJCE32K0ZDXGQEJPGNDB47RDQAITM3LLCC7UTT5ZAJRF48V5S5XRMVCBP3ICD83TGNPFELIC53UCVAGQTSB8UEC32VAOT1H96TJ3HE3GBR4LR5NYIT97MPUD4X932CE3L358Z4HBA68RW6Z7KEJJPSE6YSO28RTKYXAGSATNMG24Z541QC71TVVKRAJI6FWRTMNEZ' where id=46; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='UZEFVHAPP0YVNF9BYAM9J4OV66NWKXTDHXGU00896DD1SUKHNDTDZVXOD2DM7F7PHFL7LD85OII9NF5N6R49ELLQHVKI4V215YXNIZ1JTM6G4R89O20E9X4SDSV6IH4DGULXSZFUSCLD8LZ6QDQMQC5MT1OKW9J2QHGTSOCJ1L10WZWB1NWPVBXTUIK9MSG97BCTV9I6K8D3XFYNBOXPPNHWXLQATV14T2OOFVWF8W2FTGKJX6UA5DAG94P93TAAO' where id=46; -update noar ti set v2='UZEFVHAPP0YVNF9BYAM9J4OV66NWKXTDHXGU00896DD1SUKHNDTDZVXOD2DM7F7PHFL7LD85OII9NF5N6R49ELLQHVKI4V215YXNIZ1JTM6G4R89O20E9X4SDSV6IH4DGULXSZFUSCLD8LZ6QDQMQC5MT1OKW9J2QHGTSOCJ1L10WZWB1NWPVBXTUIK9MSG97BCTV9I6K8D3XFYNBOXPPNHWXLQATV14T2OOFVWF8W2FTGKJX6UA5DAG94P93TAAO' where id=46; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='N0TSZY0OU3IZOBN1698J3542T295SGXMJNSLP49PUH4GDPHZWZVM0SAGOEYSVDH0XIV7HUG6DDY2327HOQ330OVQEQXO2TH19E580BNRCN79UT8BXL4GBDWXB0QA7B1128IQM9UKF8I1C4K86P4THO1F32NZXY4VPG2L2AX4HARUE3P9YVNV6CIXDV590W5B8QBRK7TYO9B872WNNP9KIY0UHKUN9SZW86FG120GBPMP2QNZQ9P6ELEH183PK1ZDI' where id=46; -update noar ti set v3='N0TSZY0OU3IZOBN1698J3542T295SGXMJNSLP49PUH4GDPHZWZVM0SAGOEYSVDH0XIV7HUG6DDY2327HOQ330OVQEQXO2TH19E580BNRCN79UT8BXL4GBDWXB0QA7B1128IQM9UKF8I1C4K86P4THO1F32NZXY4VPG2L2AX4HARUE3P9YVNV6CIXDV590W5B8QBRK7TYO9B872WNNP9KIY0UHKUN9SZW86FG120GBPMP2QNZQ9P6ELEH183PK1ZDI' where id=46; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='ENTKQFPHX7G2AJ39YUZS9VCYQSLZDAT6P7IS8QDVU8QUPJMJOBOIYIEJG5DIQW9QPR7NTFD6AFI6DI5YMN1BFF9O5OQD0DBEFPUIFSFRI6ORPPIXVYFQ20BU1TMWAJKY5ZOBIF3EC3KXRNFP0X893TVIAWT3KNS85AGW64DU8WYFQK2CK16S5G37XYQ6PY5D34IEAWOCMSBK22V3S6HLK57LV19FI3GRUDH9P7YHO3N31PS8CS2BOP6S2LN6C0O7N' where id=47; -update noar ti set v0='ENTKQFPHX7G2AJ39YUZS9VCYQSLZDAT6P7IS8QDVU8QUPJMJOBOIYIEJG5DIQW9QPR7NTFD6AFI6DI5YMN1BFF9O5OQD0DBEFPUIFSFRI6ORPPIXVYFQ20BU1TMWAJKY5ZOBIF3EC3KXRNFP0X893TVIAWT3KNS85AGW64DU8WYFQK2CK16S5G37XYQ6PY5D34IEAWOCMSBK22V3S6HLK57LV19FI3GRUDH9P7YHO3N31PS8CS2BOP6S2LN6C0O7N' where id=47; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='HY3JITCZX272T7NC3UN2TVK3D4O2795M2YZSBD6TJFJU9KAU6QG0IAKVXD4HQY47BN3O49ILMWBXROE12SVUK880T5QU2EW8NDDWO9SWYM44PLRTFX671C2R93A1VJ216C6GY68Z1W1DAU7VR3GCNSTFGARHZ0UQX2810E46WLK3QC4KV8KJ094CW6MP51N57QPN2USYT5MH2QQOICQ5ZHBGYH4AJECVGMAAJ7D1SB1UGX3DQT55WXXCXZ45SGPME' where id=47; -update noar ti set v1='HY3JITCZX272T7NC3UN2TVK3D4O2795M2YZSBD6TJFJU9KAU6QG0IAKVXD4HQY47BN3O49ILMWBXROE12SVUK880T5QU2EW8NDDWO9SWYM44PLRTFX671C2R93A1VJ216C6GY68Z1W1DAU7VR3GCNSTFGARHZ0UQX2810E46WLK3QC4KV8KJ094CW6MP51N57QPN2USYT5MH2QQOICQ5ZHBGYH4AJECVGMAAJ7D1SB1UGX3DQT55WXXCXZ45SGPME' where id=47; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='QTAVN8W7CMXL08TSM82VSOXZFA2GJGKQH589BLHQXJ2X91H7VVEDQU0CAXJQV0KZI6UCB4TJVDSMAH7KGX3I0VK9H4PCDXMSR3J2APWS08WMQCLUVE7Q9I3XDDALTATU15WRXR5UJG9K0LDJB8HTNJ31KKPFMWHBG4G1IW1DT2R8XJKSWL1YJGO36FY5YR012AR1K7YXTLMVVNMBQOWGRA9YI8T1ZZCITMXDMEO4KBKSMNA1AJ6OH964YVP87HDD3' where id=47; -update noar ti set v2='QTAVN8W7CMXL08TSM82VSOXZFA2GJGKQH589BLHQXJ2X91H7VVEDQU0CAXJQV0KZI6UCB4TJVDSMAH7KGX3I0VK9H4PCDXMSR3J2APWS08WMQCLUVE7Q9I3XDDALTATU15WRXR5UJG9K0LDJB8HTNJ31KKPFMWHBG4G1IW1DT2R8XJKSWL1YJGO36FY5YR012AR1K7YXTLMVVNMBQOWGRA9YI8T1ZZCITMXDMEO4KBKSMNA1AJ6OH964YVP87HDD3' where id=47; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='0MU0DN3CILNTH4P4VW7L346GQH0IBHB2KRHHWUK3IZFKNZP2DDAY318J0I4YTLTOTPH7A9EW3J52MU0R3GRQL6W89PVAM9M0NJPQHCKQC9X5TFR4C40GFMMOGIYFDJN3GOSSEWJ8SYZDIILOKBPKMFAKO41KES23DU1L23H127T48KP97PCW12PI3N4KVBYWWLGB5D68UANS3AFQ8ZUKOI5Z00DKMEK6QK7TGA6MLF714UKVU8XACTFM733INRCTV' where id=47; -update noar ti set v3='0MU0DN3CILNTH4P4VW7L346GQH0IBHB2KRHHWUK3IZFKNZP2DDAY318J0I4YTLTOTPH7A9EW3J52MU0R3GRQL6W89PVAM9M0NJPQHCKQC9X5TFR4C40GFMMOGIYFDJN3GOSSEWJ8SYZDIILOKBPKMFAKO41KES23DU1L23H127T48KP97PCW12PI3N4KVBYWWLGB5D68UANS3AFQ8ZUKOI5Z00DKMEK6QK7TGA6MLF714UKVU8XACTFM733INRCTV' where id=47; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='AJ0ZB1IIX2E3PRBZC7RZDRMBNDSIBNPM107SBFHTRYDGIY66OCRW9XZBQ47N5YMY9KIQ324KRDK4PCI6GR6TGBBFF7BLXO913QN2T7NV4ZX12VWBWOBDU6FQASRAKQ5E91WEA3OIDP3SM7CG1KKF4DP4MC726LCLZV3S1PXPQD8S9ZNCE1OXI2ZJPBI5POXKSRDTCQUS9X6Y66YAPP1022Q1JQKGRRLK4N5PGPVYRUORTT2V1DPD9OGBIJXEFO5RA' where id=48; -update noar ti set v0='AJ0ZB1IIX2E3PRBZC7RZDRMBNDSIBNPM107SBFHTRYDGIY66OCRW9XZBQ47N5YMY9KIQ324KRDK4PCI6GR6TGBBFF7BLXO913QN2T7NV4ZX12VWBWOBDU6FQASRAKQ5E91WEA3OIDP3SM7CG1KKF4DP4MC726LCLZV3S1PXPQD8S9ZNCE1OXI2ZJPBI5POXKSRDTCQUS9X6Y66YAPP1022Q1JQKGRRLK4N5PGPVYRUORTT2V1DPD9OGBIJXEFO5RA' where id=48; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='PK8J4UH5XIC04B8YEQUNHLV7G9XC1S6JOCZFOHENH1VOEO3XQ5FX1SW8V3K18ODKHQEK0RLMK6GN56Z7MB2DLCXT5KTIBZ395UADYZH9RMJMQGWRRYZJPIQPEH4EIOHXFBS0L0M3JBB0O81NY0GSCZSRABK90SLXEMXCJ0RWVA91FAJY82OYE9IGWCJQBEF8IB2HXFZEQL82SWB59ZXIK6P6V1XCMOKF5ETMJ6QI2N81ZPRBMSIDSYBW6IVY94PIO' where id=48; -update noar ti set v1='PK8J4UH5XIC04B8YEQUNHLV7G9XC1S6JOCZFOHENH1VOEO3XQ5FX1SW8V3K18ODKHQEK0RLMK6GN56Z7MB2DLCXT5KTIBZ395UADYZH9RMJMQGWRRYZJPIQPEH4EIOHXFBS0L0M3JBB0O81NY0GSCZSRABK90SLXEMXCJ0RWVA91FAJY82OYE9IGWCJQBEF8IB2HXFZEQL82SWB59ZXIK6P6V1XCMOKF5ETMJ6QI2N81ZPRBMSIDSYBW6IVY94PIO' where id=48; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='DJTOKHUTKMN0KYK6NM03NPXX2745NXWIV0VUMJVAY7Q723QS03WQ4Q4O0GOPIIHZAG94UYHUT8JILAU5PFSP9S084YSRW5Q7FB1FIQIKSGZXMQUL6Q34G3K2140TL3JDEQGDGL6DX61DJVI9X5GNIOVG0U60GXTX9705EV5A21KY1NM0C3AV5OCIP9YXF3OZZ65EI3NS50FY6N9K6A7ZN2VYTGG9HRFNMKJYRC6HN5WUUSPLLZXSPS0R0AJL8YI1Q' where id=48; -update noar ti set v2='DJTOKHUTKMN0KYK6NM03NPXX2745NXWIV0VUMJVAY7Q723QS03WQ4Q4O0GOPIIHZAG94UYHUT8JILAU5PFSP9S084YSRW5Q7FB1FIQIKSGZXMQUL6Q34G3K2140TL3JDEQGDGL6DX61DJVI9X5GNIOVG0U60GXTX9705EV5A21KY1NM0C3AV5OCIP9YXF3OZZ65EI3NS50FY6N9K6A7ZN2VYTGG9HRFNMKJYRC6HN5WUUSPLLZXSPS0R0AJL8YI1Q' where id=48; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='NX5FMM59DI7ZD9BB112JIN1D8M8YUUCW9A8NOC25LL3NBY3VVRMBD4PGL7U47S3BLGK6BONHZ130KZ4QFK2BA0H4NDS2UL2OIG6DO2KX3LNNNJUNX27M01HJENL4PA0NAGYNMHG0L3VER4WPVE4F4YLX03BM7MWU9452R1B6EO5KH4NA0RR533IKHWHD88FJZCG21W7QLWDV2T2MEDZXABPEJC8O8BLY5P5PU7UVJZLVJEO1J4IJWUZ828EGQ41IM' where id=48; -update noar ti set v3='NX5FMM59DI7ZD9BB112JIN1D8M8YUUCW9A8NOC25LL3NBY3VVRMBD4PGL7U47S3BLGK6BONHZ130KZ4QFK2BA0H4NDS2UL2OIG6DO2KX3LNNNJUNX27M01HJENL4PA0NAGYNMHG0L3VER4WPVE4F4YLX03BM7MWU9452R1B6EO5KH4NA0RR533IKHWHD88FJZCG21W7QLWDV2T2MEDZXABPEJC8O8BLY5P5PU7UVJZLVJEO1J4IJWUZ828EGQ41IM' where id=48; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='DP4HVYRKY1OHXM6J5NSADI8AFXEQV4O5U1O9PQH24DDOGOK65KMBF7RDHUVUZOHJQI7855L8SMD45H90F65DW2VPGNZI00PKIE6MDYM2C2N9RB4QCWUCIB902Z54ORAOI79HS3SRZN0C6PKCO265LENOYPWOCYS78Z3J16VW0TFJWDLLP01HUG2FA38SUY8NMKY5XX3ZD6ZW64KH43TAJ9PG2TXLZM27BOL702FVKKOCT01VZ1TIBNIO282U9PIDM' where id=49; -update noar ti set v0='DP4HVYRKY1OHXM6J5NSADI8AFXEQV4O5U1O9PQH24DDOGOK65KMBF7RDHUVUZOHJQI7855L8SMD45H90F65DW2VPGNZI00PKIE6MDYM2C2N9RB4QCWUCIB902Z54ORAOI79HS3SRZN0C6PKCO265LENOYPWOCYS78Z3J16VW0TFJWDLLP01HUG2FA38SUY8NMKY5XX3ZD6ZW64KH43TAJ9PG2TXLZM27BOL702FVKKOCT01VZ1TIBNIO282U9PIDM' where id=49; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='UJCVL59R2GQVTMOEZ81QMICA726D16HQK232QLEK7IER7GV4FX9M6K1DW7D4G1V33G7WY7O1C388CUE33FGRNPSWWF9QRC2UB5PJ8QZ7YOS59FC8EBOA7FLYPKGHOYC5ETHQ3LE5B6BV2V72XAT3UL6M8R9B5UOUMP2TOCRY0JXG9MUMCD3ZLJXN14HEVNNG3VBRMOR9C495LWJAB80AY8YBO0RC0WET9YZI1TDOYSX4B8GB5WFJQ96J7L83ETHGK' where id=49; -update noar ti set v1='UJCVL59R2GQVTMOEZ81QMICA726D16HQK232QLEK7IER7GV4FX9M6K1DW7D4G1V33G7WY7O1C388CUE33FGRNPSWWF9QRC2UB5PJ8QZ7YOS59FC8EBOA7FLYPKGHOYC5ETHQ3LE5B6BV2V72XAT3UL6M8R9B5UOUMP2TOCRY0JXG9MUMCD3ZLJXN14HEVNNG3VBRMOR9C495LWJAB80AY8YBO0RC0WET9YZI1TDOYSX4B8GB5WFJQ96J7L83ETHGK' where id=49; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='OWEU4TKTFUK2F8WXPU5REQBS08WCEAGGZPZMCC0RTLRT7FYWF7V5R8MDHZNXRTHL7VOT28IOYF0NFIU89YTG2OWMUV9ULZ3WLM6NVTD3TLIF7UQ4GSTGG5HKSTG4DCCDIVWV5EEKQ5IX2496UP3ADJIQE9KKEZMHSAA0S4VFM6XCQTKHGATADSJ2IJPGE7U9U6S7IXG5U2MVLYJ1ZGJ9KN4X4X1NPULZKU37D46NKGE0E3ZLYXZIT8JZZ1XQ7CTUV' where id=49; -update noar ti set v2='OWEU4TKTFUK2F8WXPU5REQBS08WCEAGGZPZMCC0RTLRT7FYWF7V5R8MDHZNXRTHL7VOT28IOYF0NFIU89YTG2OWMUV9ULZ3WLM6NVTD3TLIF7UQ4GSTGG5HKSTG4DCCDIVWV5EEKQ5IX2496UP3ADJIQE9KKEZMHSAA0S4VFM6XCQTKHGATADSJ2IJPGE7U9U6S7IXG5U2MVLYJ1ZGJ9KN4X4X1NPULZKU37D46NKGE0E3ZLYXZIT8JZZ1XQ7CTUV' where id=49; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='64HP24BJUE39C4MPRLKFIUM1GB3B7RJJ8MEQ9PSYTWLN9LRHUE0AUI2TZLIDE8YB8SVUF0ZIZ9X0G8RUIWNSYNB70NPJLHADH53X6SH278G72BCVH0KI0UCGBJIU7GO3VW5U3JXB5LHT6TFXZ7WKGX80H8JQ04TT87X8SILUKAV3EI4978Y8E12YG3W75B1AI30YIF63IRTT0QJ7Z49A04MH3IFCBSPZP4VWZ5CT76HQ390P76X8XVJFUNVVUMMY2' where id=49; -update noar ti set v3='64HP24BJUE39C4MPRLKFIUM1GB3B7RJJ8MEQ9PSYTWLN9LRHUE0AUI2TZLIDE8YB8SVUF0ZIZ9X0G8RUIWNSYNB70NPJLHADH53X6SH278G72BCVH0KI0UCGBJIU7GO3VW5U3JXB5LHT6TFXZ7WKGX80H8JQ04TT87X8SILUKAV3EI4978Y8E12YG3W75B1AI30YIF63IRTT0QJ7Z49A04MH3IFCBSPZP4VWZ5CT76HQ390P76X8XVJFUNVVUMMY2' where id=49; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='AH6RJUA0TN3FWVAF6DAJEEXIHY5OE785ML1IUGUUINA37Q1DXMUVTQ4KTJCL4N7V4F166XKCS6UPT4O1J0CXWUI18FDCUUROXJ1GZXO3A11OJKQ6CF40PYPH4Z45L8TGBPJKITHKRAG7C9QQQEAXRKXUATYYE4ETB9DFNMZ0OCLDOI4JK8Z6ONFIBU9IL6Y4FNEQF30VW1EZB1THQ76LMNIWYEE4PNA69VRWIBZ7XSCT35JFHE4ZJOA62TDR5G004' where id=50; -update noar ti set v0='AH6RJUA0TN3FWVAF6DAJEEXIHY5OE785ML1IUGUUINA37Q1DXMUVTQ4KTJCL4N7V4F166XKCS6UPT4O1J0CXWUI18FDCUUROXJ1GZXO3A11OJKQ6CF40PYPH4Z45L8TGBPJKITHKRAG7C9QQQEAXRKXUATYYE4ETB9DFNMZ0OCLDOI4JK8Z6ONFIBU9IL6Y4FNEQF30VW1EZB1THQ76LMNIWYEE4PNA69VRWIBZ7XSCT35JFHE4ZJOA62TDR5G004' where id=50; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='3WJGO08D8N6P32S6TP8LA8EPVKK6F9H51M8E47CBQE2D2UG92ILRKC6NM31CTGNWFSH3PGSHJTHDY9UZEN41YL37PK2J9BYS63D6NT6DQ0V90L13FYFZKE5N0P3K7CGE9KZ3KRYL1T7VMK49NILEDNQN5WZGGQVHQ2G6V2W6163UL5C3AULDGYUSMHMLYDAQNCU4WS1N67HHMUKSNUKFNGYKWF5Y8GXKTL0R55FSKFONJ7KIIDMKLHCALHUAM0IK7' where id=50; -update noar ti set v1='3WJGO08D8N6P32S6TP8LA8EPVKK6F9H51M8E47CBQE2D2UG92ILRKC6NM31CTGNWFSH3PGSHJTHDY9UZEN41YL37PK2J9BYS63D6NT6DQ0V90L13FYFZKE5N0P3K7CGE9KZ3KRYL1T7VMK49NILEDNQN5WZGGQVHQ2G6V2W6163UL5C3AULDGYUSMHMLYDAQNCU4WS1N67HHMUKSNUKFNGYKWF5Y8GXKTL0R55FSKFONJ7KIIDMKLHCALHUAM0IK7' where id=50; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='BCEPH1I4N56QWD8V7ZQ8J63IBTH9VCZ00152KFWIZJO0DIIM46QA9UNRE9YJKQWCLY69YDPR3KFLNI90F9HRSCN0E6RJK038PPYM4VSMR5N387E9CD6GOUY8YPZBC3E41TEOZGEJ9WJ5HWG6VO6DNWGOW0IRN4Z4KILY4VS0ON8V1A0AL60DPGOEDE05IJUTFQW4OCVQENEWD1NP47H1FGOMAWV6G4HSY7548BELL0198FWE820OKTHG6NAEED4N9' where id=50; -update noar ti set v2='BCEPH1I4N56QWD8V7ZQ8J63IBTH9VCZ00152KFWIZJO0DIIM46QA9UNRE9YJKQWCLY69YDPR3KFLNI90F9HRSCN0E6RJK038PPYM4VSMR5N387E9CD6GOUY8YPZBC3E41TEOZGEJ9WJ5HWG6VO6DNWGOW0IRN4Z4KILY4VS0ON8V1A0AL60DPGOEDE05IJUTFQW4OCVQENEWD1NP47H1FGOMAWV6G4HSY7548BELL0198FWE820OKTHG6NAEED4N9' where id=50; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='DDYKE6YKZAILO7XJB95GWV2LPE82HPT151R32YMC6FOZKMEQFW46XH5G3ZIM6N7358EM8MDIZMJSQ35O77J0L7Z8ZRQLHU74DVY4QQRI5QR483EITJ8BYOMAN6G3XJPGLUD5ZABI333KYVU0L5G31NF6WJJMAS62KABSQ0QNE9OBCPKDLM9HJ8LUZ2KV278YPZ2N4XOWQC1VUXLSEMLA0SRQVEYXVZUONGNZUSYILI9N08NYR5EGWDN648CSF598W' where id=50; -update noar ti set v3='DDYKE6YKZAILO7XJB95GWV2LPE82HPT151R32YMC6FOZKMEQFW46XH5G3ZIM6N7358EM8MDIZMJSQ35O77J0L7Z8ZRQLHU74DVY4QQRI5QR483EITJ8BYOMAN6G3XJPGLUD5ZABI333KYVU0L5G31NF6WJJMAS62KABSQ0QNE9OBCPKDLM9HJ8LUZ2KV278YPZ2N4XOWQC1VUXLSEMLA0SRQVEYXVZUONGNZUSYILI9N08NYR5EGWDN648CSF598W' where id=50; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='IX8XV44MYZO5Q4T894ICBBS97IJEUNI9ZWUK0N13R3RT8KEWPGFG1PJ5TLKV9ZD9J75Z4DFXBHL37EYDRLUOMBY8FARXL78QPM0A6MZETUCIK3IM8IWCCK3UZAU233FREHNQ5HPF4M4T9LR5NCERZQF15TOLIV8LZ4OFZ4YE0XUPXWNBCUAFGCHOYHVRL5YWVSTI2BQ3NBVVLASBZBDVK8S2BEZ3ET9RI5W542DJWQF7FTG1MI4TM7Y8AS3ISLUZT' where id=51; -update noar ti set v0='IX8XV44MYZO5Q4T894ICBBS97IJEUNI9ZWUK0N13R3RT8KEWPGFG1PJ5TLKV9ZD9J75Z4DFXBHL37EYDRLUOMBY8FARXL78QPM0A6MZETUCIK3IM8IWCCK3UZAU233FREHNQ5HPF4M4T9LR5NCERZQF15TOLIV8LZ4OFZ4YE0XUPXWNBCUAFGCHOYHVRL5YWVSTI2BQ3NBVVLASBZBDVK8S2BEZ3ET9RI5W542DJWQF7FTG1MI4TM7Y8AS3ISLUZT' where id=51; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='BP6I9HQ6YIS0LYRJOAHTMNFDJOO3FV08BESRLO73HWVLTOR4QGNICXYMNCPIRL0BTHNFUPZUH7BC53F9EHRWIXJUWOT9MP1MA21NB5AKXN3U4PQEQZ1C895XHBB2P9U8UTO5GSCHD8DZYM2J838HACQ5RM3VV28OSP79HVOJ0IX6H6AQPYM8YKPXQIHH5SUCUWUQWL12PRBIR0G1ULZ12VUC2F706VZIN1J89VMBOTD8UDVVES8PEDZAFIC11A34X' where id=51; -update noar ti set v1='BP6I9HQ6YIS0LYRJOAHTMNFDJOO3FV08BESRLO73HWVLTOR4QGNICXYMNCPIRL0BTHNFUPZUH7BC53F9EHRWIXJUWOT9MP1MA21NB5AKXN3U4PQEQZ1C895XHBB2P9U8UTO5GSCHD8DZYM2J838HACQ5RM3VV28OSP79HVOJ0IX6H6AQPYM8YKPXQIHH5SUCUWUQWL12PRBIR0G1ULZ12VUC2F706VZIN1J89VMBOTD8UDVVES8PEDZAFIC11A34X' where id=51; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='Q06RQ2UKQZ06C0GJWGIDCRRNELZJMVF9CZ3YZKBLCILE4DI8DTG73VFR0WICBLNMOUA9L0MU4QF1MGZBQXHJWXKLKEAH4DSN66JNZSX7R0SVIWPEEPUXGZ5XEMTTUQ0NXTIL683LBJG86XK37302SX50SKMXOH9PZ4F6P9SQ3QVOZP5YM5WKMIIBIJN9U44CMOQHH631W9KMPII8ASYGP1CWYTT9398ISFSAPR5NPJ5RHEGDY9VVOHMIR8NSMGEWZ' where id=51; -update noar ti set v2='Q06RQ2UKQZ06C0GJWGIDCRRNELZJMVF9CZ3YZKBLCILE4DI8DTG73VFR0WICBLNMOUA9L0MU4QF1MGZBQXHJWXKLKEAH4DSN66JNZSX7R0SVIWPEEPUXGZ5XEMTTUQ0NXTIL683LBJG86XK37302SX50SKMXOH9PZ4F6P9SQ3QVOZP5YM5WKMIIBIJN9U44CMOQHH631W9KMPII8ASYGP1CWYTT9398ISFSAPR5NPJ5RHEGDY9VVOHMIR8NSMGEWZ' where id=51; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='CK1XXTMAKVNGHF6IHHBVZZMQTEYZ7HG8Z04HFRKN5RCM8GTUIAFPEYRK4IU4IZCSOH5RVZRV97VPGH8UD10TRJ282QHJNM2J485QPA0YCOHUPUPNFZMX6IKWA8KFHJYIAUQOJDPY8I6PQ74MA750X0ETU0F6ZWF6UONZG4O9WK1SXKPONAOKDGANNEOEZ2OYLPKN6P3R6IOVCC94WYETKHU5VEJJE01YC034GYAKABPIACQY15HVMGDNQSZ17GS3U' where id=51; -update noar ti set v3='CK1XXTMAKVNGHF6IHHBVZZMQTEYZ7HG8Z04HFRKN5RCM8GTUIAFPEYRK4IU4IZCSOH5RVZRV97VPGH8UD10TRJ282QHJNM2J485QPA0YCOHUPUPNFZMX6IKWA8KFHJYIAUQOJDPY8I6PQ74MA750X0ETU0F6ZWF6UONZG4O9WK1SXKPONAOKDGANNEOEZ2OYLPKN6P3R6IOVCC94WYETKHU5VEJJE01YC034GYAKABPIACQY15HVMGDNQSZ17GS3U' where id=51; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='M09HWRSUOLJ2POTRP5JCDYVBPMRDMBI1IW0Y7Q22YZSMDS6R7NADS0846PBSZ417UIC7VCED5OKI6GW9BLY8J7AZ1Z7YY6DDMI2M0YQXQT4KLW76UOU5W52FVNAA5PEZ8JD8HYTSF2OK2HDX5K0EHSP3ZV7X75JUKWID9PD3DDJI8YV2X3YL8L183M579APW9C600H4IXB3IZE76MBKW1KFCXDOBIJDYYX2JZ9OM29APVEGNM2FPC3GSQ57EQJ4WX' where id=52; -update noar ti set v0='M09HWRSUOLJ2POTRP5JCDYVBPMRDMBI1IW0Y7Q22YZSMDS6R7NADS0846PBSZ417UIC7VCED5OKI6GW9BLY8J7AZ1Z7YY6DDMI2M0YQXQT4KLW76UOU5W52FVNAA5PEZ8JD8HYTSF2OK2HDX5K0EHSP3ZV7X75JUKWID9PD3DDJI8YV2X3YL8L183M579APW9C600H4IXB3IZE76MBKW1KFCXDOBIJDYYX2JZ9OM29APVEGNM2FPC3GSQ57EQJ4WX' where id=52; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='S7FF8MBVYWBV1EITIENPHUW2BV6N3VOH4J4A7DOK37E9CUOF0TUJHA2FPGUZ9LS56S4OKMMRQ37Y7K2LIO0RIDOHG6JCVV0XA0CZSENOM4GOQC7QYL969ASPW5Q4Y5P2HLXON3CTTHOHB97HT34ML6CU3ELHF6DX4WQHIS9Q8PL2INFMSTZA7NO00PVS6B2BEPZ481PD9VBZENA4WA10NPHEKM6A1LWTZIO0F4R06RBKJ2G6UHJUJGJGTJDNHV2PI' where id=52; -update noar ti set v1='S7FF8MBVYWBV1EITIENPHUW2BV6N3VOH4J4A7DOK37E9CUOF0TUJHA2FPGUZ9LS56S4OKMMRQ37Y7K2LIO0RIDOHG6JCVV0XA0CZSENOM4GOQC7QYL969ASPW5Q4Y5P2HLXON3CTTHOHB97HT34ML6CU3ELHF6DX4WQHIS9Q8PL2INFMSTZA7NO00PVS6B2BEPZ481PD9VBZENA4WA10NPHEKM6A1LWTZIO0F4R06RBKJ2G6UHJUJGJGTJDNHV2PI' where id=52; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='GZD4ATOSQ5JDYQXP9TEDX71YHJFWQTV6VCWJ6TA93QF6WFC1JVJC179TWMYU4OF3GN8NANQ6UW41L60ZNW6IZVU9RROJR2EX4S433ICDLBXWUSUDTL7B94O1EOMR4OXI1DCGVBGQ4MR0991HQPLBHBU91ZOOYUCOKWU0NHFPD4XX5F8S9L2UGPCX5O0Q5MZZGZ41Y05E1GUFK5BS0AMKC55CKSDOG42W3BXO6A31W4HC485MUGKUPYDRUEJC3Y0OI' where id=52; -update noar ti set v2='GZD4ATOSQ5JDYQXP9TEDX71YHJFWQTV6VCWJ6TA93QF6WFC1JVJC179TWMYU4OF3GN8NANQ6UW41L60ZNW6IZVU9RROJR2EX4S433ICDLBXWUSUDTL7B94O1EOMR4OXI1DCGVBGQ4MR0991HQPLBHBU91ZOOYUCOKWU0NHFPD4XX5F8S9L2UGPCX5O0Q5MZZGZ41Y05E1GUFK5BS0AMKC55CKSDOG42W3BXO6A31W4HC485MUGKUPYDRUEJC3Y0OI' where id=52; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='U2YUS4MO6YA2MNGY3ATCE6LZ5ZIRW4ZVBYXVOBWTP4WC8ISQWSNXTXFP47PKHZD3JCNUQRLSF9W09TMX9NLQZG7WYY1UQCGZROSTOI0C31GJ6S81RJE3LT7L5XQO6Q6Q69A0GF3426NJ243Y2CHAXQT403IZ0V9N4TJSOJTF34EJL2MO17IND1SKA61YPCUK9BYPJ503LIPYIBBUQ5LEYTUYJRLYEFHNPPX8PTL7D4KRQDNAC2AWCFH34SA9KXN5P' where id=52; -update noar ti set v3='U2YUS4MO6YA2MNGY3ATCE6LZ5ZIRW4ZVBYXVOBWTP4WC8ISQWSNXTXFP47PKHZD3JCNUQRLSF9W09TMX9NLQZG7WYY1UQCGZROSTOI0C31GJ6S81RJE3LT7L5XQO6Q6Q69A0GF3426NJ243Y2CHAXQT403IZ0V9N4TJSOJTF34EJL2MO17IND1SKA61YPCUK9BYPJ503LIPYIBBUQ5LEYTUYJRLYEFHNPPX8PTL7D4KRQDNAC2AWCFH34SA9KXN5P' where id=52; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='YZ2XJTJJVS8SCDMGKY0T4XZFHMUE76Y6TGXZ16QTSZGBDXP9P0STCB3FWYGBMWE9IH2Y2XT0JTBP5VR4126TEI5V1VA6SP1BCD1VDCSL1V8RZMMUJIJVZAJLMWQ68FE0BOTX16OOB66VA76A8NBZFW26M8M4NPBJOKF3032E5G9H0YVUWKWH9TQAAOGF9ZJ6J86PAVOJGDEJDCYIF179WJRGW665025GLDVF2WAVUPC52YUFRE3H8WY6PAH0GRCAF' where id=53; -update noar ti set v0='YZ2XJTJJVS8SCDMGKY0T4XZFHMUE76Y6TGXZ16QTSZGBDXP9P0STCB3FWYGBMWE9IH2Y2XT0JTBP5VR4126TEI5V1VA6SP1BCD1VDCSL1V8RZMMUJIJVZAJLMWQ68FE0BOTX16OOB66VA76A8NBZFW26M8M4NPBJOKF3032E5G9H0YVUWKWH9TQAAOGF9ZJ6J86PAVOJGDEJDCYIF179WJRGW665025GLDVF2WAVUPC52YUFRE3H8WY6PAH0GRCAF' where id=53; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='GUW4DMWZGEVNXA856NJ6SRQIZ3K99KBUCH1Y9J0V63I8GSNK74NCVQ0JV0MNUYFUTMGOTZXZ59N51LXRMX8GJ1WZEXC6CB2IAYWRK0VQGSXW8RH3AA4BNYXESVQ888PW5GJOCTR7UWQI86681313LATF63IGSJNIWGNLSENWXNFXN42U7WQMM06D0YJYVJT0YFQ97SRY04FZF4BDDOIC7A1LJYV4D2RPXVNO4TWQEZYJ8PVEMHJIU4JURVHTI315Y' where id=53; -update noar ti set v1='GUW4DMWZGEVNXA856NJ6SRQIZ3K99KBUCH1Y9J0V63I8GSNK74NCVQ0JV0MNUYFUTMGOTZXZ59N51LXRMX8GJ1WZEXC6CB2IAYWRK0VQGSXW8RH3AA4BNYXESVQ888PW5GJOCTR7UWQI86681313LATF63IGSJNIWGNLSENWXNFXN42U7WQMM06D0YJYVJT0YFQ97SRY04FZF4BDDOIC7A1LJYV4D2RPXVNO4TWQEZYJ8PVEMHJIU4JURVHTI315Y' where id=53; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='VBGP5D5V2KM99SXNZISEUFL8ECH8FNEIXP78VOKMQVB8NH4FPYO9EOHKHPC06H7U2IBM7A4P748CQL11RRISDNATLSMX3H7G6Z4Z4K6ZLGQCAMPQF27120IPRWTJT2M6UBX1YOSUMHRBL3EZEB282HLSZ0UTNPMQTQASWZSFWGZNP3INXYM0GJBLAM2OSCCI7ARPNCJBJ5VQ9ZNTKPU09J7I1FB2OJ97IBP9FMRKXL0R2ZRNILK3JQ53M6YAKXW9K' where id=53; -update noar ti set v2='VBGP5D5V2KM99SXNZISEUFL8ECH8FNEIXP78VOKMQVB8NH4FPYO9EOHKHPC06H7U2IBM7A4P748CQL11RRISDNATLSMX3H7G6Z4Z4K6ZLGQCAMPQF27120IPRWTJT2M6UBX1YOSUMHRBL3EZEB282HLSZ0UTNPMQTQASWZSFWGZNP3INXYM0GJBLAM2OSCCI7ARPNCJBJ5VQ9ZNTKPU09J7I1FB2OJ97IBP9FMRKXL0R2ZRNILK3JQ53M6YAKXW9K' where id=53; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='0DGY1WNH1HRC430XLVY6KCJEB8R4OBEHJ5QD9VYY28OVE9VMWZO3BAFANRYNDZH8IDJQDNUX56F694IHQDFA9ONO5I7KTZQDGHMB57E64OX129NBGCKR5DZL1XW6O0QOFZ35G975QUCZQGXSI2JB19R5LY51IH3ZEN26FTEKAA0VFDMM4L625M7VHYL17YBPAIJOXIKUW9TAZ8MVQQ6V4CBRXCSO9FXN9TRL8F4QVGY7R7TMDZQKKW64SIX9NMP4S' where id=53; -update noar ti set v3='0DGY1WNH1HRC430XLVY6KCJEB8R4OBEHJ5QD9VYY28OVE9VMWZO3BAFANRYNDZH8IDJQDNUX56F694IHQDFA9ONO5I7KTZQDGHMB57E64OX129NBGCKR5DZL1XW6O0QOFZ35G975QUCZQGXSI2JB19R5LY51IH3ZEN26FTEKAA0VFDMM4L625M7VHYL17YBPAIJOXIKUW9TAZ8MVQQ6V4CBRXCSO9FXN9TRL8F4QVGY7R7TMDZQKKW64SIX9NMP4S' where id=53; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='148KU98F1DWGNJF21QI6TYP4RVND6DX0EB0SPRIZW9CJDCGQA3P4VWTQQUCK9A9V9J0J7QCUZ0SGJ8L1OW6ZHGNZ21P6MHP1N5JI3PKQY6ZMI9E5NOQVPCFRHV06FR0YH1ZDYYVOKAZIYM7DIFZYX3QS6P9XNB3EQIU6EDTIGF6W3VL2I2ZWE0IKA7TD5OFBVAV6ACMYJPFCYABXZMPM6O56D4LC5Z8RIHWZ9TDEBGH6JE2NYJ7RI04SQN4X1A3H3' where id=54; -update noar ti set v0='148KU98F1DWGNJF21QI6TYP4RVND6DX0EB0SPRIZW9CJDCGQA3P4VWTQQUCK9A9V9J0J7QCUZ0SGJ8L1OW6ZHGNZ21P6MHP1N5JI3PKQY6ZMI9E5NOQVPCFRHV06FR0YH1ZDYYVOKAZIYM7DIFZYX3QS6P9XNB3EQIU6EDTIGF6W3VL2I2ZWE0IKA7TD5OFBVAV6ACMYJPFCYABXZMPM6O56D4LC5Z8RIHWZ9TDEBGH6JE2NYJ7RI04SQN4X1A3H3' where id=54; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='XYGVV4QM9AB348JA8DYS2NC2QZMRTU8I2T8BTZBX3CDJOXQ5NBXS041QC29M44YKT7FCPXIO9S3KTDV713VS4LDA01DD1SEDXCL2056NTPEMEOKZZD6BSJZ0FX7PMI739KFLBSTC5I78H9OU49LWI0VWW9IE4P6YXNG3DTX6J12E4GHFKG9OHTGO3WSS7J687RCQXHO1SZL7O21LYYC89FBBB1W651TF5CYWBVANH7L27I63BKJMGX7UA2OXNO49M' where id=54; -update noar ti set v1='XYGVV4QM9AB348JA8DYS2NC2QZMRTU8I2T8BTZBX3CDJOXQ5NBXS041QC29M44YKT7FCPXIO9S3KTDV713VS4LDA01DD1SEDXCL2056NTPEMEOKZZD6BSJZ0FX7PMI739KFLBSTC5I78H9OU49LWI0VWW9IE4P6YXNG3DTX6J12E4GHFKG9OHTGO3WSS7J687RCQXHO1SZL7O21LYYC89FBBB1W651TF5CYWBVANH7L27I63BKJMGX7UA2OXNO49M' where id=54; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='IS2I84XDTHEEC1OPZF2MXH3VU03HZ43FCKBSHHEKR11YXP49QILMKNQUZIA807I5XZR80CIVA17LU546XJWJ6TCHDO3OIGJ7LVWXLBNDM802AR2E7E19XSUDI4M4XRX17VF5TSUFI396CU6PH2FOPBD908RP5F9MBAQRNSAN2STK8YY7HLCJY0VQIP4JIYJ1XRMNA29JKIT9JUKFCPN33S6GA3OCHEWLSGT1AG3MQEL21G3TT7DXACC8ASMGAF4M2' where id=54; -update noar ti set v2='IS2I84XDTHEEC1OPZF2MXH3VU03HZ43FCKBSHHEKR11YXP49QILMKNQUZIA807I5XZR80CIVA17LU546XJWJ6TCHDO3OIGJ7LVWXLBNDM802AR2E7E19XSUDI4M4XRX17VF5TSUFI396CU6PH2FOPBD908RP5F9MBAQRNSAN2STK8YY7HLCJY0VQIP4JIYJ1XRMNA29JKIT9JUKFCPN33S6GA3OCHEWLSGT1AG3MQEL21G3TT7DXACC8ASMGAF4M2' where id=54; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='R9NGX3RGHDCNUMSPBGBNZ2Q0EOJVYLDJ210HAOCU81FL18LJQOTVQ46H537P7SF3CTITMO7BGVTC5MGDY8VXCXPX1514VP31BIHOWLTM7R4ALHWBTYMW4EXMF87YDU6T1Z3Z3VRNIDLH0N3ZNOT215W761ZEXZRQEWY0629YPOI7CUS9LD0I7AZ1QV41J0F0WGZ34G9CHL6W2IOTZOUK76GV4QUEI97VH6SAG8PRTLE73D8J8ISLL0DHDUQH42YSN' where id=54; -update noar ti set v3='R9NGX3RGHDCNUMSPBGBNZ2Q0EOJVYLDJ210HAOCU81FL18LJQOTVQ46H537P7SF3CTITMO7BGVTC5MGDY8VXCXPX1514VP31BIHOWLTM7R4ALHWBTYMW4EXMF87YDU6T1Z3Z3VRNIDLH0N3ZNOT215W761ZEXZRQEWY0629YPOI7CUS9LD0I7AZ1QV41J0F0WGZ34G9CHL6W2IOTZOUK76GV4QUEI97VH6SAG8PRTLE73D8J8ISLL0DHDUQH42YSN' where id=54; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='RXITDSJRNHA6P2EMDU7N0ELY7XBRKYUNBBOLGP1TJU7QPKWEOYIW33WN7F5CYBOME1GP8R5B8MQ3X54FKUJB3ISVW3KHQ0LHV3KWA0T4DXFGFEMKY13D1Y2JQMNA06XOK6DJUVPHV66J8JYKWVFI14ELD4BQSHIJ8YWCID9RJJXMKEQPK2QN6CUS75Y6JEW7ZM15DGKJ58UEC6VP0XFX76MYHL3JMSCUE74T1VCP7MH1LAOD17PE0UZ5XWQC3O9LT' where id=55; -update noar ti set v0='RXITDSJRNHA6P2EMDU7N0ELY7XBRKYUNBBOLGP1TJU7QPKWEOYIW33WN7F5CYBOME1GP8R5B8MQ3X54FKUJB3ISVW3KHQ0LHV3KWA0T4DXFGFEMKY13D1Y2JQMNA06XOK6DJUVPHV66J8JYKWVFI14ELD4BQSHIJ8YWCID9RJJXMKEQPK2QN6CUS75Y6JEW7ZM15DGKJ58UEC6VP0XFX76MYHL3JMSCUE74T1VCP7MH1LAOD17PE0UZ5XWQC3O9LT' where id=55; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='74IZ0QHEDY8EQQ2A6LQLXXZS81RQS32X36LLNHJS56QOGZAQUL1G05JU1UE41JICQCC43LC4YV9COGWQMYH9MB18MI7RYJLTJQ0BVZ3U8SHPORLQSB4DRJ2OYD9S0K0XD2O9F6K0IALIXM1PUIJC55G3JKI7FXJHVG88AL28WCXUT1COLUTSQBO4N7KVA0JFTSPGKT2MD7ETMYLVTOCOKT1M57L85OBX620OOZ8HAV60OW9SCWMGG3027NF77TX7G' where id=55; -update noar ti set v1='74IZ0QHEDY8EQQ2A6LQLXXZS81RQS32X36LLNHJS56QOGZAQUL1G05JU1UE41JICQCC43LC4YV9COGWQMYH9MB18MI7RYJLTJQ0BVZ3U8SHPORLQSB4DRJ2OYD9S0K0XD2O9F6K0IALIXM1PUIJC55G3JKI7FXJHVG88AL28WCXUT1COLUTSQBO4N7KVA0JFTSPGKT2MD7ETMYLVTOCOKT1M57L85OBX620OOZ8HAV60OW9SCWMGG3027NF77TX7G' where id=55; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='QWSM80WQLJQSVD81V9ZZ80UIDKNPZCYZGTPSNIP9P4KABUDS0P9Y2EM5RMPP8X5NNW8LQ81NE3A9B2O3KIAOYBUFTSFFCBBY8HOO3XGY57WDD5L9439BUXBZZ0EWLUU2U9B4LEF35WUA4AMIPWG8LRHQOD4S50NUSKI5CXOBFQGDH4V0W1JFHY58C5W2KO584GTDN1QENOAR59DWXB8A1DJ28MO4D4SYSOV5X2GU57NX6WO3U2SFGEY7B98FW6PVZ' where id=55; -update noar ti set v2='QWSM80WQLJQSVD81V9ZZ80UIDKNPZCYZGTPSNIP9P4KABUDS0P9Y2EM5RMPP8X5NNW8LQ81NE3A9B2O3KIAOYBUFTSFFCBBY8HOO3XGY57WDD5L9439BUXBZZ0EWLUU2U9B4LEF35WUA4AMIPWG8LRHQOD4S50NUSKI5CXOBFQGDH4V0W1JFHY58C5W2KO584GTDN1QENOAR59DWXB8A1DJ28MO4D4SYSOV5X2GU57NX6WO3U2SFGEY7B98FW6PVZ' where id=55; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='4QCW3GZV2PRFCJFL1BNHE4BIEYWLTO32S0XJ803GNHMRQSUEVSWW419I7NR8O2H0MCO0S21BUAB4P6ZQ224QSJSJ7KTP8OB00AQSDAYRDCM5BKVVQTYBJN7LC0VY65YOEWMTZJSLERWV5UIZC5MBI5B77GLDZS1OLHRY2829LV6NH4P2VD955NWLO5U15DZSZP4Z23AHUOULYIJODPR6I558JLJ1O9VHJVYDX8S2BNHKEOYZION1XQ9ZCV2IKBJ0R' where id=55; -update noar ti set v3='4QCW3GZV2PRFCJFL1BNHE4BIEYWLTO32S0XJ803GNHMRQSUEVSWW419I7NR8O2H0MCO0S21BUAB4P6ZQ224QSJSJ7KTP8OB00AQSDAYRDCM5BKVVQTYBJN7LC0VY65YOEWMTZJSLERWV5UIZC5MBI5B77GLDZS1OLHRY2829LV6NH4P2VD955NWLO5U15DZSZP4Z23AHUOULYIJODPR6I558JLJ1O9VHJVYDX8S2BNHKEOYZION1XQ9ZCV2IKBJ0R' where id=55; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='RBC709DFZFIRQVPQJUA4NC5DUQ7JLTSUL7LP4OT32OGWIVEI12O9CTVFKY0T77DACEHDNJ2IRIJ224Q6HXZ6GDT0ZBQ9FI1C82SSZ3J4YECVL17SOUBT5EMUPU4YV5EKRFY27MJ7E97DCWP5BBVPWVFLZQ2HAT1SVJKGWBD6LN1BX7XBJJBDXKKNNFG1X81EUYX5LKB62RW666325USBGASVFAYQ89QV64PBH9KXZB396MVQPFM7KL428798YLRM8' where id=56; -update noar ti set v0='RBC709DFZFIRQVPQJUA4NC5DUQ7JLTSUL7LP4OT32OGWIVEI12O9CTVFKY0T77DACEHDNJ2IRIJ224Q6HXZ6GDT0ZBQ9FI1C82SSZ3J4YECVL17SOUBT5EMUPU4YV5EKRFY27MJ7E97DCWP5BBVPWVFLZQ2HAT1SVJKGWBD6LN1BX7XBJJBDXKKNNFG1X81EUYX5LKB62RW666325USBGASVFAYQ89QV64PBH9KXZB396MVQPFM7KL428798YLRM8' where id=56; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='HO20SZKYX0NH9STYSSEAXDFIS2KLNAHQGEGW16T89UVZHCA1EF8V6G6MYFASOURYNS59PMGVETIY8P5QAQYZS3K6P7KVJP4EMOZ9Y2OGAABTZWH3GJ6HSDDAND5L74BW3BYPZ2J0QZ6B2HP3G807B8NJ95U2YUAVELZ9PDG7G6X2YMZUHFPLGYNGNM4JA9LKTZ2PTNY3W31I7ZBZBIVFDMQPYLE9BE6NEGDG3OJD1I8ORZ0UYVK6XLQLKBMKGD5ZL' where id=56; -update noar ti set v1='HO20SZKYX0NH9STYSSEAXDFIS2KLNAHQGEGW16T89UVZHCA1EF8V6G6MYFASOURYNS59PMGVETIY8P5QAQYZS3K6P7KVJP4EMOZ9Y2OGAABTZWH3GJ6HSDDAND5L74BW3BYPZ2J0QZ6B2HP3G807B8NJ95U2YUAVELZ9PDG7G6X2YMZUHFPLGYNGNM4JA9LKTZ2PTNY3W31I7ZBZBIVFDMQPYLE9BE6NEGDG3OJD1I8ORZ0UYVK6XLQLKBMKGD5ZL' where id=56; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='OKTKCF4MVKK4NY2RXL3V7W3R7IR9J9LR9W6C6UKFQL7RNGPZNCI2RCC7XR46FXPDXRYQRSHQORE96WQC369XKDWSD47TM3IJDMYEDEDZAH3T6H8VO62NV885GRCOSL9SDNLRSUQD4ZNPMOGQUGR2KWPFX947B2LETD9ARJEWDIZW4IQU730J5EQ3NFCQ1OJ621VV8O4R58WZ2UNNEUE4S32YBELKJEJQLI6E63PRIAPHFBAT6P5A4MBNMK6U3HVJ4' where id=56; -update noar ti set v2='OKTKCF4MVKK4NY2RXL3V7W3R7IR9J9LR9W6C6UKFQL7RNGPZNCI2RCC7XR46FXPDXRYQRSHQORE96WQC369XKDWSD47TM3IJDMYEDEDZAH3T6H8VO62NV885GRCOSL9SDNLRSUQD4ZNPMOGQUGR2KWPFX947B2LETD9ARJEWDIZW4IQU730J5EQ3NFCQ1OJ621VV8O4R58WZ2UNNEUE4S32YBELKJEJQLI6E63PRIAPHFBAT6P5A4MBNMK6U3HVJ4' where id=56; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='A3TR0403QJMOPNQ7N9ETM6GMAAXH0X05S3GZ7OY0K2JUHRYUFVQ4AGOIYNZGVEE7KO90CWTUBWKPHZLP6RMSGV46HCZMY5AD2B5QNP5R3K0MT5PX5ZMQZ0ONOFP00JY2E7BUY3U4J6TF4W1P7OJ46EHAN3IWQQ336RUJ7OCJWAWW1WXKYNS9QMFN0I1FSQU2LFD15S4JL2UWH7D34M2R6DJGKPOWC6T1QNKH1CP3PA43SSS5KNMECHAEQ0Y2STGRS' where id=56; -update noar ti set v3='A3TR0403QJMOPNQ7N9ETM6GMAAXH0X05S3GZ7OY0K2JUHRYUFVQ4AGOIYNZGVEE7KO90CWTUBWKPHZLP6RMSGV46HCZMY5AD2B5QNP5R3K0MT5PX5ZMQZ0ONOFP00JY2E7BUY3U4J6TF4W1P7OJ46EHAN3IWQQ336RUJ7OCJWAWW1WXKYNS9QMFN0I1FSQU2LFD15S4JL2UWH7D34M2R6DJGKPOWC6T1QNKH1CP3PA43SSS5KNMECHAEQ0Y2STGRS' where id=56; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='K15RP1F2RBWKQYVW3YPN70EJZJOQ5UJ4ETF3RUR8DWERQB9YWKZWCET3XPRCQEXB4NQ14NB8L7GPFSSZX2P6VBLMJRK0KM81ZCJXZXK51QAH930SLZ9GGMKU6JCQVFLOD9VK7YLZIDNJWY4UXXNXCU8SVWF1TTZMD2INR689AXJ71UYU5AFS07NVK4590P7CBOXMPYKJ1FQGVNTQYUTDVIX73ATXF3F0QKBGB725O4X0YGNT53F3TI2J256R3UTPS' where id=57; -update noar ti set v0='K15RP1F2RBWKQYVW3YPN70EJZJOQ5UJ4ETF3RUR8DWERQB9YWKZWCET3XPRCQEXB4NQ14NB8L7GPFSSZX2P6VBLMJRK0KM81ZCJXZXK51QAH930SLZ9GGMKU6JCQVFLOD9VK7YLZIDNJWY4UXXNXCU8SVWF1TTZMD2INR689AXJ71UYU5AFS07NVK4590P7CBOXMPYKJ1FQGVNTQYUTDVIX73ATXF3F0QKBGB725O4X0YGNT53F3TI2J256R3UTPS' where id=57; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='EB8LKTZO0149MRXMX2V2SPEC9G1N2R5LHKL1XNSEJ3W4R626KV56I4HE33S08KZQLWCF89GGW28WD3QJIIOE52D9WUKJVLQDGU8JWC9H5JVJFQLYKA5GIP11HHGF9JP5JXTIWWCWM169PIIQY89HADZG0FB4PEC86ULCD4Z8N75YCACUXQWYR8QP6QJ5T5RN7RDQIIDIH78T90H7SFJVY4C8N9FL19IJ1QYBS75QFFN58MBKSPJWNYNCYRUZXKZJT' where id=57; -update noar ti set v1='EB8LKTZO0149MRXMX2V2SPEC9G1N2R5LHKL1XNSEJ3W4R626KV56I4HE33S08KZQLWCF89GGW28WD3QJIIOE52D9WUKJVLQDGU8JWC9H5JVJFQLYKA5GIP11HHGF9JP5JXTIWWCWM169PIIQY89HADZG0FB4PEC86ULCD4Z8N75YCACUXQWYR8QP6QJ5T5RN7RDQIIDIH78T90H7SFJVY4C8N9FL19IJ1QYBS75QFFN58MBKSPJWNYNCYRUZXKZJT' where id=57; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='R88IS6E8I6IU48YQ9NV9QPD6T0CSS7WNRV6YCM5GYWCROXB5A3V9RPK4PJYR9R9K9WGG234AF7ICPVMNRBVSS1LN83JO7FQK85GBZSKYJO688XJQDDRXOVXA2YD7XUEE8TSJ6366QIA4C4YY00OB9Q13G4A5YGUBFDF286ENE4HHKWGII2AEBFPOTQHNHSKJ80UBB2PC6P2MBPGCN8D56LF4TL40D9V47BZMR06324ZRNM2NR0OLSHWV2U57YQD9G' where id=57; -update noar ti set v2='R88IS6E8I6IU48YQ9NV9QPD6T0CSS7WNRV6YCM5GYWCROXB5A3V9RPK4PJYR9R9K9WGG234AF7ICPVMNRBVSS1LN83JO7FQK85GBZSKYJO688XJQDDRXOVXA2YD7XUEE8TSJ6366QIA4C4YY00OB9Q13G4A5YGUBFDF286ENE4HHKWGII2AEBFPOTQHNHSKJ80UBB2PC6P2MBPGCN8D56LF4TL40D9V47BZMR06324ZRNM2NR0OLSHWV2U57YQD9G' where id=57; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='QF45GZSFEVMJP97CNQ88Y3QB37GBAUCY3GU5FCT0SPVXY5BRV2ZYLBEX78TU92T0UUA4W0G9RPQZU1K5BX16430S742JKFN4RSVMAZXZBZM5VN6XL4OAWFP5V8J4KEZNNU3I34C1JSS0S3B3K9YE2J44LH2WFQKFRKDARIG2BLGJCD1K5HJ2RWG4TUAFGR84EOUMKT2G6NAQCBR7ZFW3EW15TTWAEVXH9BE2PWBOTN17CKVI3LFP3VZ22V33ZXX90' where id=57; -update noar ti set v3='QF45GZSFEVMJP97CNQ88Y3QB37GBAUCY3GU5FCT0SPVXY5BRV2ZYLBEX78TU92T0UUA4W0G9RPQZU1K5BX16430S742JKFN4RSVMAZXZBZM5VN6XL4OAWFP5V8J4KEZNNU3I34C1JSS0S3B3K9YE2J44LH2WFQKFRKDARIG2BLGJCD1K5HJ2RWG4TUAFGR84EOUMKT2G6NAQCBR7ZFW3EW15TTWAEVXH9BE2PWBOTN17CKVI3LFP3VZ22V33ZXX90' where id=57; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='QZ1JZYIAK1ZMSVJ6BA4RZQBAOH4ULI4GFI8DLQLVT0HSYI823QC0AZIYW3XRB6V3MLKHKD20VQ532FZGGZNO7X3NM43NFYDF7IKHULTZFIVSIVR9XXXSNA79C8JLJN8UZAKQ4M7FGCSS3DWPJIXWJMO0BVSM4CPV18LRLEBP5W8TWWJ9JJ1TBG7V20JXE373LL3M97U25RV256RLO7CW0DQI3LYRWAHX42ZXW196N42WPLTD0DZFJJPR5E3477F6M' where id=58; -update noar ti set v0='QZ1JZYIAK1ZMSVJ6BA4RZQBAOH4ULI4GFI8DLQLVT0HSYI823QC0AZIYW3XRB6V3MLKHKD20VQ532FZGGZNO7X3NM43NFYDF7IKHULTZFIVSIVR9XXXSNA79C8JLJN8UZAKQ4M7FGCSS3DWPJIXWJMO0BVSM4CPV18LRLEBP5W8TWWJ9JJ1TBG7V20JXE373LL3M97U25RV256RLO7CW0DQI3LYRWAHX42ZXW196N42WPLTD0DZFJJPR5E3477F6M' where id=58; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='ED5VEUPZ5V07RKUURO4MU47D6S19HO4KBP6Z4E4QH1QEMQ88B43093HGPGLNRJRHPNKZTY7LH0DRQJT5Y0VTZXHERE2K4HFCPXNRBGVZ7W7HVZUJKDPBIA1T5RFIEKCDHARZB849AODU2IXNL2J8SAZKJBG48SX8RQ43RT2ZVGZJGWS5BMICTSP5YORP07PFZZX4UBLT36AJJVOP3J1DHCJ2OLZWJ24P56XSA5ZFS2QP93VUUIW9UJK5HGOPYA09C' where id=58; -update noar ti set v1='ED5VEUPZ5V07RKUURO4MU47D6S19HO4KBP6Z4E4QH1QEMQ88B43093HGPGLNRJRHPNKZTY7LH0DRQJT5Y0VTZXHERE2K4HFCPXNRBGVZ7W7HVZUJKDPBIA1T5RFIEKCDHARZB849AODU2IXNL2J8SAZKJBG48SX8RQ43RT2ZVGZJGWS5BMICTSP5YORP07PFZZX4UBLT36AJJVOP3J1DHCJ2OLZWJ24P56XSA5ZFS2QP93VUUIW9UJK5HGOPYA09C' where id=58; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='Y6A1TF3MO7TAMRXSUIAXR2SC9T088BX8RZ5OD8SC2OPX0P9ZFD1DR9WCB9R3QMI3F9OSZF7PJU8VC8D6BSAA5NX9HIIOY6ZKWGG0LLHNHYHUIUBT3FHJ4M7HO51243WZNPRRU6GSFL0EHNX2FUMXJ1KWCO22U1YA46F42PDE1Z4RU05XNF0GR2I5XN8DNWPF1L7XCUVTF1DDXON2MS16V43HFK3KDD0I1ZPD53ZXHYHLAMSWOADUX1K6RH7KNOBJ0' where id=58; -update noar ti set v2='Y6A1TF3MO7TAMRXSUIAXR2SC9T088BX8RZ5OD8SC2OPX0P9ZFD1DR9WCB9R3QMI3F9OSZF7PJU8VC8D6BSAA5NX9HIIOY6ZKWGG0LLHNHYHUIUBT3FHJ4M7HO51243WZNPRRU6GSFL0EHNX2FUMXJ1KWCO22U1YA46F42PDE1Z4RU05XNF0GR2I5XN8DNWPF1L7XCUVTF1DDXON2MS16V43HFK3KDD0I1ZPD53ZXHYHLAMSWOADUX1K6RH7KNOBJ0' where id=58; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='VBIEKOIR2GDLKHZQVYIRRO3XUTNIPEPDGKYY5P4UNRZO9LS0AF8M5O2YMIL2247EWPJ88FY4PFP572IWGCWOWI6WHFYGXNIDOH4O4N05W3889J9HAW6ZQMG6BNKCM2NJ0VVG0KCKWWNPQT6FDZF1WXTCI1WYV5MUJ8ZW661HCFG7SQCO4SKLFI9TKBUXIA8F257ISRY07B78A9A321WG63JHJCTUJH7DXAW0L8A8HFLU7AOCU1GJ38TCD7GACX7PP' where id=58; -update noar ti set v3='VBIEKOIR2GDLKHZQVYIRRO3XUTNIPEPDGKYY5P4UNRZO9LS0AF8M5O2YMIL2247EWPJ88FY4PFP572IWGCWOWI6WHFYGXNIDOH4O4N05W3889J9HAW6ZQMG6BNKCM2NJ0VVG0KCKWWNPQT6FDZF1WXTCI1WYV5MUJ8ZW661HCFG7SQCO4SKLFI9TKBUXIA8F257ISRY07B78A9A321WG63JHJCTUJH7DXAW0L8A8HFLU7AOCU1GJ38TCD7GACX7PP' where id=58; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='2BUNCDFLTKP29WTPYHUAP60FHR16VMVZYB5L02EKAE1BCO6EE4ED6NO8BCPC8CZWMH21BTV5IX774YUE4Q3BF94HOP6NPLK42UQG56HQ7GQ9HUQRK43TXIN40G8XNEPS7YMTNFISCFE0MY65HAQ2R3C6VRJ5NOF90A6OM7JMHBJZ9Y3RVMUYEM5KH1AYPW8FSAUGNMJTYAX0IISIZ4CROXG2INWTCYWIZLI2XKK3BQQPX57NS3F12NHC05STLOB6W' where id=59; -update noar ti set v0='2BUNCDFLTKP29WTPYHUAP60FHR16VMVZYB5L02EKAE1BCO6EE4ED6NO8BCPC8CZWMH21BTV5IX774YUE4Q3BF94HOP6NPLK42UQG56HQ7GQ9HUQRK43TXIN40G8XNEPS7YMTNFISCFE0MY65HAQ2R3C6VRJ5NOF90A6OM7JMHBJZ9Y3RVMUYEM5KH1AYPW8FSAUGNMJTYAX0IISIZ4CROXG2INWTCYWIZLI2XKK3BQQPX57NS3F12NHC05STLOB6W' where id=59; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='UHHMAEEGFD4SWCMUUNKK4ZQ212JPB5IAQ8V7CKUOX7S6PWS4BEWK22IO392JZ6CBDHR1CBZ8XE81W3LFJCYH8Q5GGN23F4Q7PMISWICRL7VVH7E6385G57ADOGI2I52M5AF5NKAEWM0G9GROPQOPBHHYL9VJWCY7RZIK1K16WB6BNP3J0LKJ6XCE5I4N5VOKWN68AMFEFOOPE19RIS1WSDS5LXW2JUE0C9O2KNKXI75DU95MH8YKVHAVRV2SBIT94' where id=59; -update noar ti set v1='UHHMAEEGFD4SWCMUUNKK4ZQ212JPB5IAQ8V7CKUOX7S6PWS4BEWK22IO392JZ6CBDHR1CBZ8XE81W3LFJCYH8Q5GGN23F4Q7PMISWICRL7VVH7E6385G57ADOGI2I52M5AF5NKAEWM0G9GROPQOPBHHYL9VJWCY7RZIK1K16WB6BNP3J0LKJ6XCE5I4N5VOKWN68AMFEFOOPE19RIS1WSDS5LXW2JUE0C9O2KNKXI75DU95MH8YKVHAVRV2SBIT94' where id=59; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='OKLA2E4KX2PJANI9HK5YYMORWXX4ITMQR1AGPQB85O9ODQM959YOO995WEUBUXNWSRJIV3QJLAFLWETD4B59442RDVFEEWTSALJYHXJCBMPCY6JOYAM9KMZ1SSMVIFWU7ANPEEJBL6Q9WKPGA1ZVEOWQ2VOD0HO0QXYNAUDM56Y3FUM40FEK3762DL2UD0DPW1W6J0ME4YZS9RG9YGW0QEOQY8ABHB356TRCD04E34B8Q6E3DS73M06XRES8VI8S8' where id=59; -update noar ti set v2='OKLA2E4KX2PJANI9HK5YYMORWXX4ITMQR1AGPQB85O9ODQM959YOO995WEUBUXNWSRJIV3QJLAFLWETD4B59442RDVFEEWTSALJYHXJCBMPCY6JOYAM9KMZ1SSMVIFWU7ANPEEJBL6Q9WKPGA1ZVEOWQ2VOD0HO0QXYNAUDM56Y3FUM40FEK3762DL2UD0DPW1W6J0ME4YZS9RG9YGW0QEOQY8ABHB356TRCD04E34B8Q6E3DS73M06XRES8VI8S8' where id=59; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='K7U5XC1CN76Z4GE40A2GA4099RZATO348S8FG0VRGJ6YX4B2SOR7FOUXW0ZSY0K1QZX4TGXSN9IUAU3FR4F50FXI45KZGZZKBTTZ7S25NI6XPDLUUVWK1H1BRPE3B6TIEV50VLEYDJLO8897QVZWUAGA6SBP19Y3BT7T2VJJ4SE5XAO8PS5R77723YKPM9DBV6V6CFKTBY9Z9OMZQH220TMBMK5EREEHJEGCEANVHBCETCODDICXC8OZZEEE6ZXHV' where id=59; -update noar ti set v3='K7U5XC1CN76Z4GE40A2GA4099RZATO348S8FG0VRGJ6YX4B2SOR7FOUXW0ZSY0K1QZX4TGXSN9IUAU3FR4F50FXI45KZGZZKBTTZ7S25NI6XPDLUUVWK1H1BRPE3B6TIEV50VLEYDJLO8897QVZWUAGA6SBP19Y3BT7T2VJJ4SE5XAO8PS5R77723YKPM9DBV6V6CFKTBY9Z9OMZQH220TMBMK5EREEHJEGCEANVHBCETCODDICXC8OZZEEE6ZXHV' where id=59; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='3L36VFEBBYLBP80FP3EOCYZB85DMKVDPLHD1K7IEZAEVXJNP0HFSV7FNHROIAD69TUJZTYIRLJ68XSPXOKKKL83Q92CQN6FK7KY0YWQYQNVT98XMIN41EJIN2SDB8CMOLVLAA28WM3071GNXAEGFUGG1QST3OCCPV5Y7CTTPZWD6RE49QLPH5DP68U4FINLLJBH1LYJEGLUPVI2K319CJD1AQ213BC1ZK5ESYMD32TQLDIEZOB55DJGUCCMEGQ9NR' where id=60; -update noar ti set v0='3L36VFEBBYLBP80FP3EOCYZB85DMKVDPLHD1K7IEZAEVXJNP0HFSV7FNHROIAD69TUJZTYIRLJ68XSPXOKKKL83Q92CQN6FK7KY0YWQYQNVT98XMIN41EJIN2SDB8CMOLVLAA28WM3071GNXAEGFUGG1QST3OCCPV5Y7CTTPZWD6RE49QLPH5DP68U4FINLLJBH1LYJEGLUPVI2K319CJD1AQ213BC1ZK5ESYMD32TQLDIEZOB55DJGUCCMEGQ9NR' where id=60; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='9QEMVRKCXXE0XM5OVA3MFXIMZ7XLAGAGGQ5UBZLBJG157XO7QSAUW0STGIY0VBZNGJQG9BWOWINUH9KZTR9PFZZ9M3YPK44HCMF19H2EE5P4TILECACI0VTWNXCQBUZHO9MKOUCQEK1GGX01HZB6DGBSH2JI1ZHNLYFJFE7OYDNJVSYAPCYALSDVO9FR2PQ935G1GQ0UIWJ6MZA88JM69NRR6MDJVV6Q0SJVXYSATJSR3SF449KGO6EAKAXPKM1NA' where id=60; -update noar ti set v1='9QEMVRKCXXE0XM5OVA3MFXIMZ7XLAGAGGQ5UBZLBJG157XO7QSAUW0STGIY0VBZNGJQG9BWOWINUH9KZTR9PFZZ9M3YPK44HCMF19H2EE5P4TILECACI0VTWNXCQBUZHO9MKOUCQEK1GGX01HZB6DGBSH2JI1ZHNLYFJFE7OYDNJVSYAPCYALSDVO9FR2PQ935G1GQ0UIWJ6MZA88JM69NRR6MDJVV6Q0SJVXYSATJSR3SF449KGO6EAKAXPKM1NA' where id=60; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='AQHKV58DFWVFKHOVCOLNNAVNAIF00V7BF853WFJ4LL3KLMV77H5A0PIOLCRZJ64P1KEKCI7NSEE9990XIRUU6RN700DIT2E3BB0LMWDVVW0FT7QYVY62JYOIKT8BV5O0Z785BEBNQI3GYL5JS8INF5LYI75QWAE8PL8JQN51IA6XNARG7AFEHKKBU59KT8V7WU4VFEAZ03MUIY8JBLJDZB8DD0GBBYZJ8OJSYQTUL3SDT5HECE2I3M5ZHLSP9YAQB' where id=60; -update noar ti set v2='AQHKV58DFWVFKHOVCOLNNAVNAIF00V7BF853WFJ4LL3KLMV77H5A0PIOLCRZJ64P1KEKCI7NSEE9990XIRUU6RN700DIT2E3BB0LMWDVVW0FT7QYVY62JYOIKT8BV5O0Z785BEBNQI3GYL5JS8INF5LYI75QWAE8PL8JQN51IA6XNARG7AFEHKKBU59KT8V7WU4VFEAZ03MUIY8JBLJDZB8DD0GBBYZJ8OJSYQTUL3SDT5HECE2I3M5ZHLSP9YAQB' where id=60; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='IOGT7GFDG6PXPV2BRZV3UF9HPEZEM7O0Z08PO5P6GEGGI7DAS3RL4DE4XEMLKT9LK10TBMHCENBJ1QIKH0ZR9HENZIPQHNOJKOFNL0FG1XAB96U1E9B1QVUVX0IH5XFUCT5I2VX1FBBUY70KFKTLNYCLFDOF3WQUO4C41RBME6D270F5LRFRF7UJ82NQNJXPP2QJUN6VY1TPCPW2X0G7EKPCAF0BFYCGXNLS56NSWRF8Z0VHXPQ0P2UWTZPSW6BN6' where id=60; -update noar ti set v3='IOGT7GFDG6PXPV2BRZV3UF9HPEZEM7O0Z08PO5P6GEGGI7DAS3RL4DE4XEMLKT9LK10TBMHCENBJ1QIKH0ZR9HENZIPQHNOJKOFNL0FG1XAB96U1E9B1QVUVX0IH5XFUCT5I2VX1FBBUY70KFKTLNYCLFDOF3WQUO4C41RBME6D270F5LRFRF7UJ82NQNJXPP2QJUN6VY1TPCPW2X0G7EKPCAF0BFYCGXNLS56NSWRF8Z0VHXPQ0P2UWTZPSW6BN6' where id=60; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='CUPJV9P6FPRTVUW5W7Z3PQ3H86POO3DAAFLXWT8G3OA2D9V36I2V33OG6Q4ADFO4B9FPKV1946Y5GHT947M6OB6OL7CU5EMHZW05XLCBVOLKMDGYA4DDVB83XIJB3KRBOUEVXM64FSU2WM6IZQR6LH8ZOCYHHO82GG1ZKSSF5L2VK58Y7LJR90LFBZE05TOZ712E6RNM0XTVSYAHMDELWT8E0ANMTVYVRRVU1K4QG7XT3B6CBUA37WP3SV8Y3SUSQ' where id=61; -update noar ti set v0='CUPJV9P6FPRTVUW5W7Z3PQ3H86POO3DAAFLXWT8G3OA2D9V36I2V33OG6Q4ADFO4B9FPKV1946Y5GHT947M6OB6OL7CU5EMHZW05XLCBVOLKMDGYA4DDVB83XIJB3KRBOUEVXM64FSU2WM6IZQR6LH8ZOCYHHO82GG1ZKSSF5L2VK58Y7LJR90LFBZE05TOZ712E6RNM0XTVSYAHMDELWT8E0ANMTVYVRRVU1K4QG7XT3B6CBUA37WP3SV8Y3SUSQ' where id=61; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='ML3GJJJWXM2XPVNS2URI5VF0USCVM6DGOS6Y5ALIHKZUO48WYX9DXUR2L7FFJ4BQANG87GSJ9BE9MCP7TW0CZXCDYJL7O41EIJ70XJQ7TUJ2PSV1XR7K3DQ1QWP0XZ5PH8D4966BO1OBUFHW663KC9EVPHR9UO3XOVYHL0KC0KPJKSCVXW1D3LMTHD3FSKQZJUSSRYX3X8TGH0N6A9HEBRJ0JBZHRTF23SQL3UMSUBFXJBNUDNIL3BXRSO3OUG2JF' where id=61; -update noar ti set v1='ML3GJJJWXM2XPVNS2URI5VF0USCVM6DGOS6Y5ALIHKZUO48WYX9DXUR2L7FFJ4BQANG87GSJ9BE9MCP7TW0CZXCDYJL7O41EIJ70XJQ7TUJ2PSV1XR7K3DQ1QWP0XZ5PH8D4966BO1OBUFHW663KC9EVPHR9UO3XOVYHL0KC0KPJKSCVXW1D3LMTHD3FSKQZJUSSRYX3X8TGH0N6A9HEBRJ0JBZHRTF23SQL3UMSUBFXJBNUDNIL3BXRSO3OUG2JF' where id=61; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='CTSG7S8PW8XRJM9T0F136U65K3TF84P63SOQBR5YVK4UK6HP2SC1BF2M0GWUVDHZ6XZRJI8IH6U66XIKS82S9QHB843EL8O2IY30JJX6T3PPEU1OY4V35D2TMTO3R7Z7R7J284B4FISLCN28TPCLZ2EES09859FQFHDBKIOD2MW3XX8YGVF2J2LLM2GJ3U4IWZ6XXWZ0G4CPNHGLLWJQYD2J3K88OZ2EGFZYZDLSKV146M6889Q9VID3214SLP3I2' where id=61; -update noar ti set v2='CTSG7S8PW8XRJM9T0F136U65K3TF84P63SOQBR5YVK4UK6HP2SC1BF2M0GWUVDHZ6XZRJI8IH6U66XIKS82S9QHB843EL8O2IY30JJX6T3PPEU1OY4V35D2TMTO3R7Z7R7J284B4FISLCN28TPCLZ2EES09859FQFHDBKIOD2MW3XX8YGVF2J2LLM2GJ3U4IWZ6XXWZ0G4CPNHGLLWJQYD2J3K88OZ2EGFZYZDLSKV146M6889Q9VID3214SLP3I2' where id=61; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='OTCD82Z8KQNNWAW8XFO494KN6F6Z3HGY4KGHTBHESAIM217L4C36C3WKZB16QUN2LXNK30TU1RTC63LZMO5PQZ7BFCF7ZWI0PDQKMF6NA5I60FI25WKH6PNUSB9DOZJBUCZT5RWELOR50T09S6SGTETALGAO8IJ13H4V51Z11KIXJ796S9M8BO20PO8DV2BUX0XW8UFG3GBYR84DKO6QQCLTLH7JA335NZWZ101LF681IGRDCB1QIMJPN990WBYEM' where id=61; -update noar ti set v3='OTCD82Z8KQNNWAW8XFO494KN6F6Z3HGY4KGHTBHESAIM217L4C36C3WKZB16QUN2LXNK30TU1RTC63LZMO5PQZ7BFCF7ZWI0PDQKMF6NA5I60FI25WKH6PNUSB9DOZJBUCZT5RWELOR50T09S6SGTETALGAO8IJ13H4V51Z11KIXJ796S9M8BO20PO8DV2BUX0XW8UFG3GBYR84DKO6QQCLTLH7JA335NZWZ101LF681IGRDCB1QIMJPN990WBYEM' where id=61; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='ODWRS3H6FUUFGX3LEYCXMJ1TOIM6ELTEO1Y0YLRP0VQ0A2G04J3OUBFG3OUX174CONP5LON81GQPXQ7M8BA0ZI66KJYRCRB8URD0YDT2RPDIJBEL2I54Y0DE98VCSRVQQ35KPR2S7BUSFWN64V8I0WMA8H3ZNKDTRBYBLRM6QX3DHTKDFAYAVS4N8DT40WD0V0Y88GNM1L6L89G51EIYKTYRAXBJN477YC0SD45LKU989QEQ3MP7Q5YBZ9PSHBJJ5' where id=62; -update noar ti set v0='ODWRS3H6FUUFGX3LEYCXMJ1TOIM6ELTEO1Y0YLRP0VQ0A2G04J3OUBFG3OUX174CONP5LON81GQPXQ7M8BA0ZI66KJYRCRB8URD0YDT2RPDIJBEL2I54Y0DE98VCSRVQQ35KPR2S7BUSFWN64V8I0WMA8H3ZNKDTRBYBLRM6QX3DHTKDFAYAVS4N8DT40WD0V0Y88GNM1L6L89G51EIYKTYRAXBJN477YC0SD45LKU989QEQ3MP7Q5YBZ9PSHBJJ5' where id=62; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='2DYYELS8FMNEX4DC9I8FN6EG4HC86Q1RFSTTZH3UQRJR2AHCHPSZ645MRHDR89LOJYDQKIO45J7RYV7VOLR2IX9TLMAD965LA1Y1NR8BTGD32IW4B0SOFVNXMDUNEBXACXGEAXBILIFKWTW8CWKA6XDGR3TZEJKVBXSV8P1ARHR985QDMZBEVQ3371ZTK0KUYRNKS1SD1FYVTXDHMJWBE6G2HESM2MPRD22MT1D6QMOSTQA073BRUKNY5K0HVYI22' where id=62; -update noar ti set v1='2DYYELS8FMNEX4DC9I8FN6EG4HC86Q1RFSTTZH3UQRJR2AHCHPSZ645MRHDR89LOJYDQKIO45J7RYV7VOLR2IX9TLMAD965LA1Y1NR8BTGD32IW4B0SOFVNXMDUNEBXACXGEAXBILIFKWTW8CWKA6XDGR3TZEJKVBXSV8P1ARHR985QDMZBEVQ3371ZTK0KUYRNKS1SD1FYVTXDHMJWBE6G2HESM2MPRD22MT1D6QMOSTQA073BRUKNY5K0HVYI22' where id=62; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='GLJJB52XUKLG3Y8WMVXKIXNFQ33RX1F6PVQCTZLJJMK853CRWU8NTY3HGDKH8J5ZNY99R5Y6XPL5CA4Z56H30DDVE3V5GIPXTNQ78AUKLLEUD80UTEF69GNF7QDW0SR9O8PVTXODZXTWSZ3LSMJ7ODHLQ7JFOHKOIZ5UYGAZJ6CYBEMA70JQHWOOVFLU0E053Y07X1ZP7B412G62CWO1K010G9HQVU4SYXMIQZHNHK05HNW4ONCU0WLYCJ4RJMYDD' where id=62; -update noar ti set v2='GLJJB52XUKLG3Y8WMVXKIXNFQ33RX1F6PVQCTZLJJMK853CRWU8NTY3HGDKH8J5ZNY99R5Y6XPL5CA4Z56H30DDVE3V5GIPXTNQ78AUKLLEUD80UTEF69GNF7QDW0SR9O8PVTXODZXTWSZ3LSMJ7ODHLQ7JFOHKOIZ5UYGAZJ6CYBEMA70JQHWOOVFLU0E053Y07X1ZP7B412G62CWO1K010G9HQVU4SYXMIQZHNHK05HNW4ONCU0WLYCJ4RJMYDD' where id=62; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='TC910VQJFAGVOMTWOQVY7JP4Y9TZD06CN1VK7WB1V7LMNZQB4W1FCDLX4OG0BHG8MBQZ3YTQ29SRUDAOTRTG0NX701T90O92RDV8JSRR96RFG3B9YB7PBV3XH6JAO5UF0YNJIPVL9B2NEE9VCSVO5UN2YEK2OCATQKZD1NBZOEA2JPZPX0A8PJL2IRX8CJX3TDW2H2ZH1NNJL1ZSZRP9N2XLM3PRG1ABGMNQDOJ0HXDZ5XT0H2H2BK32BH7Q4ODQ2' where id=62; -update noar ti set v3='TC910VQJFAGVOMTWOQVY7JP4Y9TZD06CN1VK7WB1V7LMNZQB4W1FCDLX4OG0BHG8MBQZ3YTQ29SRUDAOTRTG0NX701T90O92RDV8JSRR96RFG3B9YB7PBV3XH6JAO5UF0YNJIPVL9B2NEE9VCSVO5UN2YEK2OCATQKZD1NBZOEA2JPZPX0A8PJL2IRX8CJX3TDW2H2ZH1NNJL1ZSZRP9N2XLM3PRG1ABGMNQDOJ0HXDZ5XT0H2H2BK32BH7Q4ODQ2' where id=62; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='DL1FITJMPASMD3XBWNW2PACFUUUPPEA5EICC3ZEF71UJ87CQS2LSADNBBCKFBHIEL9P5AJXPKM4L5P27SH7MHBUDV8ANCNFVO95LOEOZOPWJNP54TZ2YYU7TEWTC0CNKNQAJBC9J3P8PRN2BW9Q5ETTSP5TTCJGOM021U8EFITHTUJOJSH64G870C0ZQFYBJIL45J0O8RTGO3HFUUHC6RUHOQL1DM6JX88QSLRO2M9S1SRR6I5P0QXWBMCLOY88VA' where id=63; -update noar ti set v0='DL1FITJMPASMD3XBWNW2PACFUUUPPEA5EICC3ZEF71UJ87CQS2LSADNBBCKFBHIEL9P5AJXPKM4L5P27SH7MHBUDV8ANCNFVO95LOEOZOPWJNP54TZ2YYU7TEWTC0CNKNQAJBC9J3P8PRN2BW9Q5ETTSP5TTCJGOM021U8EFITHTUJOJSH64G870C0ZQFYBJIL45J0O8RTGO3HFUUHC6RUHOQL1DM6JX88QSLRO2M9S1SRR6I5P0QXWBMCLOY88VA' where id=63; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='5NFIJNOT6J4SAL4V9QIX4NQJNMOAB4OZFRMLCQB1NQ38IZU3KUW2SQ0KIN5C2AIOTP5C1Z3CNFOESLDR56VT1I1PYETWL3O7WLG770IKWWW6DH5785H6K47HGCZRU0HQYGEDV94NHNEFNIH2G1I8R7JQLSK1XAPH8N04P2GOJM7LETLFT53WTDDP7QC0PV5MPAMZTLL7NP7J1ARKKJWS8FV5EJG9BR59ODPUX6MN2EIPXTAEU38VC5QF4KJOR6D2B' where id=63; -update noar ti set v1='5NFIJNOT6J4SAL4V9QIX4NQJNMOAB4OZFRMLCQB1NQ38IZU3KUW2SQ0KIN5C2AIOTP5C1Z3CNFOESLDR56VT1I1PYETWL3O7WLG770IKWWW6DH5785H6K47HGCZRU0HQYGEDV94NHNEFNIH2G1I8R7JQLSK1XAPH8N04P2GOJM7LETLFT53WTDDP7QC0PV5MPAMZTLL7NP7J1ARKKJWS8FV5EJG9BR59ODPUX6MN2EIPXTAEU38VC5QF4KJOR6D2B' where id=63; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='9FKCHID9HK4TT8O6V1OGJQISQAUL6B9MV2RIL83YDH6D7VYFEA3CGQX0WYN5LCNTJ8AT5PFE20NPC6LDHHOGR9O3HTMS1EKKDMANP3Z0FVX0V1HPO1QAC3P66TS26XKGE3EPUP9QIM6HLJSRJL2L64Q5BYKWLAPDTFOZCYPDOOYGPYUFRXV9RELH3LJ40HPI81VOQ1CHRT39RBRBJ0A693QVHK5JZEG9ARA9JCSJLN76Q6DNOSMZR492QUQK8IX46' where id=63; -update noar ti set v2='9FKCHID9HK4TT8O6V1OGJQISQAUL6B9MV2RIL83YDH6D7VYFEA3CGQX0WYN5LCNTJ8AT5PFE20NPC6LDHHOGR9O3HTMS1EKKDMANP3Z0FVX0V1HPO1QAC3P66TS26XKGE3EPUP9QIM6HLJSRJL2L64Q5BYKWLAPDTFOZCYPDOOYGPYUFRXV9RELH3LJ40HPI81VOQ1CHRT39RBRBJ0A693QVHK5JZEG9ARA9JCSJLN76Q6DNOSMZR492QUQK8IX46' where id=63; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='DA6781X684GEW2RB5V7XXBKI4LD4UOUKPNU42LJCU8KK0LGIL7IS65GGOBDRNT3V0W80EZH11OKWPAMT8VY4C0HPSEYQNZMM74INJ3PMGLAI1L579NXQKBZX5G902PO8XINDCDYXP9XPG3M2XFP33LAEU2B6IY26LFAU2UK8KW9MQVKK5PBS9GP673ZFE9T8JAKVDBW3FEAQC6D07ATX3KHOT7BEUTXVT0WNGBXQJU99UR7GUAX13B83ZAMJWU0LJ' where id=63; -update noar ti set v3='DA6781X684GEW2RB5V7XXBKI4LD4UOUKPNU42LJCU8KK0LGIL7IS65GGOBDRNT3V0W80EZH11OKWPAMT8VY4C0HPSEYQNZMM74INJ3PMGLAI1L579NXQKBZX5G902PO8XINDCDYXP9XPG3M2XFP33LAEU2B6IY26LFAU2UK8KW9MQVKK5PBS9GP673ZFE9T8JAKVDBW3FEAQC6D07ATX3KHOT7BEUTXVT0WNGBXQJU99UR7GUAX13B83ZAMJWU0LJ' where id=63; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='RF0MMWZG6S8ED38OM41VKK0BTO58W17VEBQ4C8LYSTH4GDMPCUBB2ECZ5QJ61O83UV9SMHSXVVMJFFH5Z9QDF0B6B6EEPVXFMMA5OJRZNQHNCGHGN9C9PEYQU113T4AAF9SO1ODLN6BC9XIO8NGPCZREZ0QLVCDZ07B14P4TMM7V71DBOJDAYOAVW0OZLADINSGNBCE4WL1AQHXBCYH9SPODME4PWMSCQ8ONS6LDXVB852AQBCIP2UT4SMABU44LG' where id=64; -update noar ti set v0='RF0MMWZG6S8ED38OM41VKK0BTO58W17VEBQ4C8LYSTH4GDMPCUBB2ECZ5QJ61O83UV9SMHSXVVMJFFH5Z9QDF0B6B6EEPVXFMMA5OJRZNQHNCGHGN9C9PEYQU113T4AAF9SO1ODLN6BC9XIO8NGPCZREZ0QLVCDZ07B14P4TMM7V71DBOJDAYOAVW0OZLADINSGNBCE4WL1AQHXBCYH9SPODME4PWMSCQ8ONS6LDXVB852AQBCIP2UT4SMABU44LG' where id=64; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='22AA821U7P1LJRR8765ODS3WVHDI4L8Y28OGKI02EU9DEVICBHWNMAGVYE5GPK7BJR0WH4Z9QMJZJOHO4N1SWGPJ6LY7SUGPJTNN03B1UA6537PNHGXMB9E9FZPDLNIHNLPA2BWHF6XM4YCTLOSAK9ZILPSI0GX5VA6V4TE6TTNF6WT0ZS5LDCHW60AJS8VXWN075EX009PUY342A3FIC2JO8SCTUQ69DZGMR2XYYGMKL5DJMM7IT77TI5SASMMP6' where id=64; -update noar ti set v1='22AA821U7P1LJRR8765ODS3WVHDI4L8Y28OGKI02EU9DEVICBHWNMAGVYE5GPK7BJR0WH4Z9QMJZJOHO4N1SWGPJ6LY7SUGPJTNN03B1UA6537PNHGXMB9E9FZPDLNIHNLPA2BWHF6XM4YCTLOSAK9ZILPSI0GX5VA6V4TE6TTNF6WT0ZS5LDCHW60AJS8VXWN075EX009PUY342A3FIC2JO8SCTUQ69DZGMR2XYYGMKL5DJMM7IT77TI5SASMMP6' where id=64; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='FDF98Q46E6QV146E2WKM0ZCD18J59ULRRMNW6G1UMILDNQUS38P43DEX8TGO3IJEOY4D919IBL0G32C966M26J7ZCXIQJEE9RYZNSY4G7QSK8WCJUL8J2UCFANG0X2QH0XB0E8DTGJM0CPZZXIX4H1A6Y90LKYCUB8YJYXZZE2BNNVHC70DUP3P2OW4JTB04OPTI19YDCUV7DF9OP9OORV1US2G8SFMB2QT90276A9U8ZA5IBA2URCLH3VCRKS7ZA' where id=64; -update noar ti set v2='FDF98Q46E6QV146E2WKM0ZCD18J59ULRRMNW6G1UMILDNQUS38P43DEX8TGO3IJEOY4D919IBL0G32C966M26J7ZCXIQJEE9RYZNSY4G7QSK8WCJUL8J2UCFANG0X2QH0XB0E8DTGJM0CPZZXIX4H1A6Y90LKYCUB8YJYXZZE2BNNVHC70DUP3P2OW4JTB04OPTI19YDCUV7DF9OP9OORV1US2G8SFMB2QT90276A9U8ZA5IBA2URCLH3VCRKS7ZA' where id=64; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='APV8Z2WH2E5QSXT5ZQUQAWW34W5SE62TF7QFH0RF8FH6FNP8DFMD4A0I0R1P22Y7WWN7A2A841PSPSY6UAD59OUASGDMXPFHTN05SJ8VWRZPD0CHE7QPDZ1X3M0AUADKX6PWQ1R8L6QPA7XXWTU8A9LUJS4WKFOX1H728ZHT1RJOVSUPKZHGCO2TO3N0I58R0PHHLVYXQZXE8CD87DJ9QBJJGUY8M8FP67QE2YAY16ZJMAODNU21SW84P81W87V6H' where id=64; -update noar ti set v3='APV8Z2WH2E5QSXT5ZQUQAWW34W5SE62TF7QFH0RF8FH6FNP8DFMD4A0I0R1P22Y7WWN7A2A841PSPSY6UAD59OUASGDMXPFHTN05SJ8VWRZPD0CHE7QPDZ1X3M0AUADKX6PWQ1R8L6QPA7XXWTU8A9LUJS4WKFOX1H728ZHT1RJOVSUPKZHGCO2TO3N0I58R0PHHLVYXQZXE8CD87DJ9QBJJGUY8M8FP67QE2YAY16ZJMAODNU21SW84P81W87V6H' where id=64; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='80YNN85SEGS9WFQS032YLM55K9KF85751ROK8YLWW24WUE3LE4RF2EZSH2BT4ZK9Q6SRDSFZGDIXBIEGLKHJVVTQMDPV7OQXQTDWSR0IT1HDY5CQ51YW3DPGX8GWWVBZ736021FFMEA88O10Y72LNLQVCAJ1ILRL6UYK5GNRFSYDHMV9HI16NPF6HEKQ7FVFI2Q2JRJTE0NERVDNS5ZVKUCRA5553LF2M0V4D4DBUHEY8OIR1QRWDK68Y5MFQAAWL' where id=65; -update noar ti set v0='80YNN85SEGS9WFQS032YLM55K9KF85751ROK8YLWW24WUE3LE4RF2EZSH2BT4ZK9Q6SRDSFZGDIXBIEGLKHJVVTQMDPV7OQXQTDWSR0IT1HDY5CQ51YW3DPGX8GWWVBZ736021FFMEA88O10Y72LNLQVCAJ1ILRL6UYK5GNRFSYDHMV9HI16NPF6HEKQ7FVFI2Q2JRJTE0NERVDNS5ZVKUCRA5553LF2M0V4D4DBUHEY8OIR1QRWDK68Y5MFQAAWL' where id=65; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='VY7LV44SPEIX0TWZJZX6PMGKEJBXR4B9ETA5XFD2R9RJ9W2MXCM92BPYG0N43BOJ76S4X1UDNAV5I7VM2IXDLBCYBV3FPCTN3FN50T2XEH25HJLCR6DSN3O0PUQIZ1C8PBIQIOW88TMLN7SDXJ5CEALJSMTA7H2XK1B01FV5MMQRQ1MNTMPUFYUER66BVNIWGPPQZ13FDL4RD8RT41O4HC2UKHHQ2LJTS1UJPU4JRQ58YZP5VAIPP9PGDT0H4Q02I' where id=65; -update noar ti set v1='VY7LV44SPEIX0TWZJZX6PMGKEJBXR4B9ETA5XFD2R9RJ9W2MXCM92BPYG0N43BOJ76S4X1UDNAV5I7VM2IXDLBCYBV3FPCTN3FN50T2XEH25HJLCR6DSN3O0PUQIZ1C8PBIQIOW88TMLN7SDXJ5CEALJSMTA7H2XK1B01FV5MMQRQ1MNTMPUFYUER66BVNIWGPPQZ13FDL4RD8RT41O4HC2UKHHQ2LJTS1UJPU4JRQ58YZP5VAIPP9PGDT0H4Q02I' where id=65; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='KRCER8L1A7MZ2Z37C210ANS832VRIX3WK75X1248CMANBEV83REC324H8JR5X5460CECVUYH4MHS8EONJEBS7BEJMBFMZWORFM744O642I9UJ4BFENBU51YF9CSKYF34ZSEO2ZISWNJSWR8PK2FGQLZX8AE1HWM8DMJCCQ6G0N95G0BNDLTDAPDVPP5OPXLXGVGPX7VTSCI5JOXNRHNAD6AVB2QR1U87B3IO2VFB4HJ5NW51GRCX9LVNRW8GW8LBG' where id=65; -update noar ti set v2='KRCER8L1A7MZ2Z37C210ANS832VRIX3WK75X1248CMANBEV83REC324H8JR5X5460CECVUYH4MHS8EONJEBS7BEJMBFMZWORFM744O642I9UJ4BFENBU51YF9CSKYF34ZSEO2ZISWNJSWR8PK2FGQLZX8AE1HWM8DMJCCQ6G0N95G0BNDLTDAPDVPP5OPXLXGVGPX7VTSCI5JOXNRHNAD6AVB2QR1U87B3IO2VFB4HJ5NW51GRCX9LVNRW8GW8LBG' where id=65; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='PVA8LPX2SVW1UL53U4QVXAY5NW2R0BARFM800D8S2JQFBZ7YIDHY0VRIIS3BYB1PJTBJKNC8X7V3Y6IY53NEXYWUYN8KWCRLKXSDM7HJQ2Z9JOA195GXYBTTRIAINHS9UEWJU0ZRJDVLYK7NM10LVL961XGB5DQY8PXLTOI9HTEQ313F19GN4BB3AGXYZ7U4PIUNPYZXUYW1LNRN6LXHIHGFQ789XBZ4IV6IB70DQ399GHJYP3NA9MDF5IZYBGUV2' where id=65; -update noar ti set v3='PVA8LPX2SVW1UL53U4QVXAY5NW2R0BARFM800D8S2JQFBZ7YIDHY0VRIIS3BYB1PJTBJKNC8X7V3Y6IY53NEXYWUYN8KWCRLKXSDM7HJQ2Z9JOA195GXYBTTRIAINHS9UEWJU0ZRJDVLYK7NM10LVL961XGB5DQY8PXLTOI9HTEQ313F19GN4BB3AGXYZ7U4PIUNPYZXUYW1LNRN6LXHIHGFQ789XBZ4IV6IB70DQ399GHJYP3NA9MDF5IZYBGUV2' where id=65; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='F7UKETBHU8Z1JZODQLFDOBXEEM9DIS7U48L7ZIXD2AWF4VSAOWIH91G36DTDCHAM7UMIHWK2UN7C4JSXJZS42Q9UJEMWHP8EWO4E8HLAQ0IVRIWRWEZYMCHNUOAV0YBTA4M2FVAC546BXR7FUF9O5WSTZ17WCPMBFK9HJOPHQC0KIUCJKDLY3V0N5PHZ77MPB3LFOONL6E5J0A2Z9D9DS9O4UZVM3PNHHLK829KG6MG93D18LUYNFOKXDLYOHYLST' where id=66; -update noar ti set v0='F7UKETBHU8Z1JZODQLFDOBXEEM9DIS7U48L7ZIXD2AWF4VSAOWIH91G36DTDCHAM7UMIHWK2UN7C4JSXJZS42Q9UJEMWHP8EWO4E8HLAQ0IVRIWRWEZYMCHNUOAV0YBTA4M2FVAC546BXR7FUF9O5WSTZ17WCPMBFK9HJOPHQC0KIUCJKDLY3V0N5PHZ77MPB3LFOONL6E5J0A2Z9D9DS9O4UZVM3PNHHLK829KG6MG93D18LUYNFOKXDLYOHYLST' where id=66; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='K2C5WM1N0CE5SMI2LJOZIR4W7U663QYO2EB4K0A8LKXI9ZHPAW2MRYJOBO6CHBL8F6TDCW9ZC7EEUURGC8FRSULM4DVNNB61M6PNK1E0RUYHK43ZGFNZW01XNPFLEO4W17GU6WI8U6Z0S6WXRRIM4R8PG9L81RG113ZGO5T6776BO82YLHT07DPLCUVWKS7ZZY4FTM8FQDK9VIG57HLQGZBOZ5OTL76NEEQZERAUZW71NC48705AIXPF4X4IV15ZE' where id=66; -update noar ti set v1='K2C5WM1N0CE5SMI2LJOZIR4W7U663QYO2EB4K0A8LKXI9ZHPAW2MRYJOBO6CHBL8F6TDCW9ZC7EEUURGC8FRSULM4DVNNB61M6PNK1E0RUYHK43ZGFNZW01XNPFLEO4W17GU6WI8U6Z0S6WXRRIM4R8PG9L81RG113ZGO5T6776BO82YLHT07DPLCUVWKS7ZZY4FTM8FQDK9VIG57HLQGZBOZ5OTL76NEEQZERAUZW71NC48705AIXPF4X4IV15ZE' where id=66; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='EBCXAT1T5QQWYXC5ARHO58VVY93ODF2RSKHQAQNNDD9GZIFC6OJ4UGKFR1GRP9AMLG382JAR97XA5HC50LFVP6M2ZZ0FXKECFGDY2ILGZXI5G1CSIUI95XGKKDC7V5Z4YOYWXEV202DFHCR9OV420RGUDY00QB93W7JGCGV1OXJI8AA9O9PPZUOIRUAH62YXF98GCUXB7IPXCYCVIPUL48RGY2286O1OS8JSP31OHJ41F98Z38YF4SIVPH4YG5VHP' where id=66; -update noar ti set v2='EBCXAT1T5QQWYXC5ARHO58VVY93ODF2RSKHQAQNNDD9GZIFC6OJ4UGKFR1GRP9AMLG382JAR97XA5HC50LFVP6M2ZZ0FXKECFGDY2ILGZXI5G1CSIUI95XGKKDC7V5Z4YOYWXEV202DFHCR9OV420RGUDY00QB93W7JGCGV1OXJI8AA9O9PPZUOIRUAH62YXF98GCUXB7IPXCYCVIPUL48RGY2286O1OS8JSP31OHJ41F98Z38YF4SIVPH4YG5VHP' where id=66; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='00DI72N244EJE6PBNYK1AM4UEO3DDR7RQFTSCZV9MBYTDF0PX9KSNPCF589GBKOK1AA1G7H0BIE2LG6B87PI2MELYEYSGGL88YOG4VFBU6A82A3QPJF12KLV2IPE15M7U3X3UDGPB7EK9B491RJN3HLV76PUFDGBNWYAT7CBFJ6DH71XA48FITTYO87VXPEHWXK15IOJSACQRIGFK93GSYVT6W64XBOQZSSZYQ7H888NVODSMO810VVG79U2EYIVR' where id=66; -update noar ti set v3='00DI72N244EJE6PBNYK1AM4UEO3DDR7RQFTSCZV9MBYTDF0PX9KSNPCF589GBKOK1AA1G7H0BIE2LG6B87PI2MELYEYSGGL88YOG4VFBU6A82A3QPJF12KLV2IPE15M7U3X3UDGPB7EK9B491RJN3HLV76PUFDGBNWYAT7CBFJ6DH71XA48FITTYO87VXPEHWXK15IOJSACQRIGFK93GSYVT6W64XBOQZSSZYQ7H888NVODSMO810VVG79U2EYIVR' where id=66; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='GF0SYU852FTRKP8KJMS6IS77BE4QQ3D15KDM7JB854UCGLE6QQXYV5K82VOWTRLVW4RPQOBM023B43X4R1IOEG0TMA1RLRO71YIWEIBFQ7124I9SDMKZEG4HUPSOH1I7ECCNQ2K5LNHMGUMNYSM7CJKA6C7MMA4K6G3F4MXFILFJ2ZQ6TV7ACGJRBRJGRHIIBJUEMT204WJD1YH309444X5AW84MQ8443JKFSDCA6SMSQE1N71IPD4GN2Q8JMZIR0' where id=67; -update noar ti set v0='GF0SYU852FTRKP8KJMS6IS77BE4QQ3D15KDM7JB854UCGLE6QQXYV5K82VOWTRLVW4RPQOBM023B43X4R1IOEG0TMA1RLRO71YIWEIBFQ7124I9SDMKZEG4HUPSOH1I7ECCNQ2K5LNHMGUMNYSM7CJKA6C7MMA4K6G3F4MXFILFJ2ZQ6TV7ACGJRBRJGRHIIBJUEMT204WJD1YH309444X5AW84MQ8443JKFSDCA6SMSQE1N71IPD4GN2Q8JMZIR0' where id=67; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='U5QBCDD5T8XDQ00XEL71GOQ8UVKT456C47ZA7NOP20OSZ0X8C172BZN1AX5H1L4D5BWG89RHT8D6765HPPE6XKBMF2Z4DDLEDYIS6BZS6POMZ6I6NCIZQ0D0PZ4HZPLDZ4DLOLZ15PFLQGONX19YKY8YD2TORBPLUFTERTGFBV5EUF4X7VITRISS1O5PRX390USXCOBB7GCUZHA1A9I1H53RA5Y2ZJ22A92CRO9HKJL9PYZFSZCZ3DA7YZNCAX4Y9' where id=67; -update noar ti set v1='U5QBCDD5T8XDQ00XEL71GOQ8UVKT456C47ZA7NOP20OSZ0X8C172BZN1AX5H1L4D5BWG89RHT8D6765HPPE6XKBMF2Z4DDLEDYIS6BZS6POMZ6I6NCIZQ0D0PZ4HZPLDZ4DLOLZ15PFLQGONX19YKY8YD2TORBPLUFTERTGFBV5EUF4X7VITRISS1O5PRX390USXCOBB7GCUZHA1A9I1H53RA5Y2ZJ22A92CRO9HKJL9PYZFSZCZ3DA7YZNCAX4Y9' where id=67; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='Y35WRROLBG1W06EWAXE1VKYBOF3UR000Y0VHAEEIC48EMBW1QV4XBIKUNZAMVC68EJM4NI4O32L3GDMWE51SOSXH1Z41086OM8254X4E2QIBSDUQROEH1X3FG0NLR7BA1IKO3J5KJ1B65UQQCWV5SR039OR4Q305Z923KQW8BY6IJQ6PQOVSYZ1ANJMRXVT42CUMHW60DDJORX9KMLHPY9F8QO51YZQG56MSIWOMJBI0MQY5ZTVZGDUXH59YN8GEC' where id=67; -update noar ti set v2='Y35WRROLBG1W06EWAXE1VKYBOF3UR000Y0VHAEEIC48EMBW1QV4XBIKUNZAMVC68EJM4NI4O32L3GDMWE51SOSXH1Z41086OM8254X4E2QIBSDUQROEH1X3FG0NLR7BA1IKO3J5KJ1B65UQQCWV5SR039OR4Q305Z923KQW8BY6IJQ6PQOVSYZ1ANJMRXVT42CUMHW60DDJORX9KMLHPY9F8QO51YZQG56MSIWOMJBI0MQY5ZTVZGDUXH59YN8GEC' where id=67; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='KA40T1PMKTH1PL0LCE4BLLHV044DENTK595KZVBCVMO0XCH3DIX9P68HZQB7H66QCZR3GNVHZ5Y26ZQ1WSA0ZAQ2XZXGI6VBHF1ME5BUTKS5LH58UT1XOD1GEXEFZUGLG05XK26YMDTKLSI3K0465SP9945KGM1YIA6ZTGT4UL9GCP8TV3Y9XZBDTV3YDKTFCL7HO1Y83SW4RHGI7SMIFHZNLUFE073JDC099SWIWSND0FQ2U4U1LXR59W4PAN3OP' where id=67; -update noar ti set v3='KA40T1PMKTH1PL0LCE4BLLHV044DENTK595KZVBCVMO0XCH3DIX9P68HZQB7H66QCZR3GNVHZ5Y26ZQ1WSA0ZAQ2XZXGI6VBHF1ME5BUTKS5LH58UT1XOD1GEXEFZUGLG05XK26YMDTKLSI3K0465SP9945KGM1YIA6ZTGT4UL9GCP8TV3Y9XZBDTV3YDKTFCL7HO1Y83SW4RHGI7SMIFHZNLUFE073JDC099SWIWSND0FQ2U4U1LXR59W4PAN3OP' where id=67; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='V1KUJBJNJTEWA5EBAFQMF1THTFJN4EDGL1VIDZZG8CZ53LS1BY1IMFTZJNY2SLEFL1ZPSGVYJ4IORF37XXNNEIKM77UQCWFM1NYMAQI7QZK4X43PQ9TQK56OBL79J1TD6WPQUKTS8VP2H06UVUSKOV3GZXRDWKG7P2TUTTGKBRQYSOI0UA1PJ56PHSIZ21BTU5LTQOFRG48R2LR6JH0AOIF46PH6HE6YMCB8Y98HIJXJH1VONIH7MAI0NDPF5CG5O' where id=68; -update noar ti set v0='V1KUJBJNJTEWA5EBAFQMF1THTFJN4EDGL1VIDZZG8CZ53LS1BY1IMFTZJNY2SLEFL1ZPSGVYJ4IORF37XXNNEIKM77UQCWFM1NYMAQI7QZK4X43PQ9TQK56OBL79J1TD6WPQUKTS8VP2H06UVUSKOV3GZXRDWKG7P2TUTTGKBRQYSOI0UA1PJ56PHSIZ21BTU5LTQOFRG48R2LR6JH0AOIF46PH6HE6YMCB8Y98HIJXJH1VONIH7MAI0NDPF5CG5O' where id=68; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='I7XKNEP29OE3L9JYAXAURUX0GXZXRRFHJA8TP8SSBIZGZMYMWBKNTK2535D6LEODZ5PJT294218XMW0SN7NHY9F78N60OM5IY0IAX91HYCNML4F15YQGKEW9SMUZOKPYBM0DQFG5QEOWZBHYEI0UTSYQH2ZAHTBU61OW34LW81U3HIBNOJ8025LXVOSWYDA6IXZL3LJF5L20VIX8LHYVX113SLJCLMF0CKCPQ5RJ91QNEVFCF5GSSBW6EG05B7WKO' where id=68; -update noar ti set v1='I7XKNEP29OE3L9JYAXAURUX0GXZXRRFHJA8TP8SSBIZGZMYMWBKNTK2535D6LEODZ5PJT294218XMW0SN7NHY9F78N60OM5IY0IAX91HYCNML4F15YQGKEW9SMUZOKPYBM0DQFG5QEOWZBHYEI0UTSYQH2ZAHTBU61OW34LW81U3HIBNOJ8025LXVOSWYDA6IXZL3LJF5L20VIX8LHYVX113SLJCLMF0CKCPQ5RJ91QNEVFCF5GSSBW6EG05B7WKO' where id=68; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='831XK31Q47RZLWGSNMH9QA2BA44GX3HO1K5MWJ7S9N7RHEUCTRHQX3IHSB0XILQXOAJ6LQK3IJP79GT73NJHQR3R4EU3BEBS6GVX2FAJ9R0N05AMS7RU3DTM4PRFHEL12X3D1S5BC1YIVJX2IU83T18Y3YORU5UYUXDU1ANLSFEE45XBDQF7J51ANR1KNCKD940B7W28NW5ZQW88S2BQLPMKENSTXBYCB2WM5812224EDUPJVERCN71A68WKLEYEX' where id=68; -update noar ti set v2='831XK31Q47RZLWGSNMH9QA2BA44GX3HO1K5MWJ7S9N7RHEUCTRHQX3IHSB0XILQXOAJ6LQK3IJP79GT73NJHQR3R4EU3BEBS6GVX2FAJ9R0N05AMS7RU3DTM4PRFHEL12X3D1S5BC1YIVJX2IU83T18Y3YORU5UYUXDU1ANLSFEE45XBDQF7J51ANR1KNCKD940B7W28NW5ZQW88S2BQLPMKENSTXBYCB2WM5812224EDUPJVERCN71A68WKLEYEX' where id=68; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='UK79ZXGNALSWOVV77EASEQ1B1R7MLSZD3CIYOL3OG5NV8FZ46DASZP1HJDXUAW0W34AEQNND6FC0168FGOVHMQZJRR5XFLT4MSLGZX91SG36Q3SULOU3BT316YYC7QCA5DEYHFKNBBOQXVUV2QTW80EYJRGDUCT0DON5XO77HOIO7WR21RTNVBSD2SOT47Z58B0ZQBXB0O0KLQX7DZ5OH0PYTP7A2VDZRWNA2TQE6UFXQU9TNAOQ2IJJZNCCPEBLY' where id=68; -update noar ti set v3='UK79ZXGNALSWOVV77EASEQ1B1R7MLSZD3CIYOL3OG5NV8FZ46DASZP1HJDXUAW0W34AEQNND6FC0168FGOVHMQZJRR5XFLT4MSLGZX91SG36Q3SULOU3BT316YYC7QCA5DEYHFKNBBOQXVUV2QTW80EYJRGDUCT0DON5XO77HOIO7WR21RTNVBSD2SOT47Z58B0ZQBXB0O0KLQX7DZ5OH0PYTP7A2VDZRWNA2TQE6UFXQU9TNAOQ2IJJZNCCPEBLY' where id=68; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='XLIRVX3XH2QRKYSKM64J3RPXL13DD0OJIOPZUFPN78PZ7MZWTLEBZGOE0P9VJ9OOCAGJ8ZEEME7ZBOVFLWY37TU9A8FESOFDTC8J15LUYWJVNMGS5NGW6TOBKB1G2QE1DJB2ZXOYVQTJATP1JLNHR22TXQ88BVPJNEPQ5P71ZC0IS9OAJUFE6BFPM2YTSPPSEOJZR8CFAR9L0TA49CXBS1PLH2COEYYJVMSSEY9EKK5DBFFK4FR8OWK8V427SEV3S' where id=69; -update noar ti set v0='XLIRVX3XH2QRKYSKM64J3RPXL13DD0OJIOPZUFPN78PZ7MZWTLEBZGOE0P9VJ9OOCAGJ8ZEEME7ZBOVFLWY37TU9A8FESOFDTC8J15LUYWJVNMGS5NGW6TOBKB1G2QE1DJB2ZXOYVQTJATP1JLNHR22TXQ88BVPJNEPQ5P71ZC0IS9OAJUFE6BFPM2YTSPPSEOJZR8CFAR9L0TA49CXBS1PLH2COEYYJVMSSEY9EKK5DBFFK4FR8OWK8V427SEV3S' where id=69; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='8JX13HPES0FE1MDLVICQ85Q7RW7HHOJMC07IA4RIQWAIMRHZ6QQWHMTZWBHTGP4YMEJD84B0SU0BI98X567CLJR2BJ9Y0YJHU4LP0EQSG2J1NBVLE6HVY6FIIMT6XMVXE6W5HK1ZZ9Y13VXNQ9T2M2LRZ2N4U87WBGLT7EFT6KIF680IJ62PNXZTPSYZHDNJKWAIN5WNDYUDO03Z5646R0YJJBQTL5MEGYPK6C15GJM69EDYOZYA6MLRUWDGYZ91U' where id=69; -update noar ti set v1='8JX13HPES0FE1MDLVICQ85Q7RW7HHOJMC07IA4RIQWAIMRHZ6QQWHMTZWBHTGP4YMEJD84B0SU0BI98X567CLJR2BJ9Y0YJHU4LP0EQSG2J1NBVLE6HVY6FIIMT6XMVXE6W5HK1ZZ9Y13VXNQ9T2M2LRZ2N4U87WBGLT7EFT6KIF680IJ62PNXZTPSYZHDNJKWAIN5WNDYUDO03Z5646R0YJJBQTL5MEGYPK6C15GJM69EDYOZYA6MLRUWDGYZ91U' where id=69; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='FX82JZPD6S5JNEVXWK49ULK559CZTM8OTOPSTTH5SKK5NV8FQ7D8PLVZC5R2UUEXTEUBI9SH7QQSH5SCG0EUZ2J6TDCZCGIE73N31FMUL95SJXTG3EHR69I0XRJ645G0OBXK7YVW19Q8R1U5BBY6847WXUNO6FZIOBCO16RKLBDMHASMS4C1XTB3M7KH5Q84AESHI2ACUDYF2VMNF3PFURUGM2NPPMMY8B8B7H03YHX3SXKRQ5MCC44Y1GEJ9SOAD' where id=69; -update noar ti set v2='FX82JZPD6S5JNEVXWK49ULK559CZTM8OTOPSTTH5SKK5NV8FQ7D8PLVZC5R2UUEXTEUBI9SH7QQSH5SCG0EUZ2J6TDCZCGIE73N31FMUL95SJXTG3EHR69I0XRJ645G0OBXK7YVW19Q8R1U5BBY6847WXUNO6FZIOBCO16RKLBDMHASMS4C1XTB3M7KH5Q84AESHI2ACUDYF2VMNF3PFURUGM2NPPMMY8B8B7H03YHX3SXKRQ5MCC44Y1GEJ9SOAD' where id=69; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='TJQWYQ4Z60T2T1ZMW0MQ49DPNBZ8MRYQAUVHEMZILKH1MATK7LEYJA1R25ETTA1EGZ9H45ZIWOHPR9IHKEYBTY1SA5NCE0NV6GMR8LFXL0ZD9U3PBZ3EN5QW1SOLHKOECKILDKWA809QJOWM2G9JO2KWFBUFA5D0DHZSZPCDBOWS6AR0JZTY24YXDY26T1RTOGQ00D8SYMIZPGP1RFSL8EHU86AWRDFL6ATX4FAA215G5QJUZLK4S5BI1ENL8PV7V' where id=69; -update noar ti set v3='TJQWYQ4Z60T2T1ZMW0MQ49DPNBZ8MRYQAUVHEMZILKH1MATK7LEYJA1R25ETTA1EGZ9H45ZIWOHPR9IHKEYBTY1SA5NCE0NV6GMR8LFXL0ZD9U3PBZ3EN5QW1SOLHKOECKILDKWA809QJOWM2G9JO2KWFBUFA5D0DHZSZPCDBOWS6AR0JZTY24YXDY26T1RTOGQ00D8SYMIZPGP1RFSL8EHU86AWRDFL6ATX4FAA215G5QJUZLK4S5BI1ENL8PV7V' where id=69; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='496U9MN0L766DHL4SZ71NPS4XF84D2BEK4S6T8S73ABHEP8MMNFU16K4PF4KX0NZ3EZ051NBH8I0QZ2OULX85NVWABENJEG2UN8AZC6Q8V2EBQ0ANBV4YUO3VN8YHN09IYHJ79YXS0RIC8PCYHCBZ8WXLGDGSMN4FBBAZXGW2TE6EM4L8SYAFD7C57RZDTFCT9O2R3712R5C2XCRQ326ML0I3OOSCB0MR3PC6P6D4BMSCYXSGAXTYZYUU4M3W0ZE4' where id=70; -update noar ti set v0='496U9MN0L766DHL4SZ71NPS4XF84D2BEK4S6T8S73ABHEP8MMNFU16K4PF4KX0NZ3EZ051NBH8I0QZ2OULX85NVWABENJEG2UN8AZC6Q8V2EBQ0ANBV4YUO3VN8YHN09IYHJ79YXS0RIC8PCYHCBZ8WXLGDGSMN4FBBAZXGW2TE6EM4L8SYAFD7C57RZDTFCT9O2R3712R5C2XCRQ326ML0I3OOSCB0MR3PC6P6D4BMSCYXSGAXTYZYUU4M3W0ZE4' where id=70; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='RLLMLTGMYGT9V8VJQA5E4DPIHLIWEE28ARTJX25B0EONDI1JD7YQ8OAPLT38WBAY31I9XEVC11U6GGNXM1F8R4B3R9HBY8B64XJQ20OQRH9FDF5OQUI23OMECWMGXGMZKLW0HSTXL7WZY4KVF6BNNLUBECLJ0ZLO5A2T8PLF3H2N5IDBUDI93Q62X934O7LE4UKCKB5WUHIYWXE0LAYIK1OMD5TJYM44CRDZBR49D2CH6G9WPH56KVHDFGQNDHB7Z' where id=70; -update noar ti set v1='RLLMLTGMYGT9V8VJQA5E4DPIHLIWEE28ARTJX25B0EONDI1JD7YQ8OAPLT38WBAY31I9XEVC11U6GGNXM1F8R4B3R9HBY8B64XJQ20OQRH9FDF5OQUI23OMECWMGXGMZKLW0HSTXL7WZY4KVF6BNNLUBECLJ0ZLO5A2T8PLF3H2N5IDBUDI93Q62X934O7LE4UKCKB5WUHIYWXE0LAYIK1OMD5TJYM44CRDZBR49D2CH6G9WPH56KVHDFGQNDHB7Z' where id=70; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='71HCX56X32H1ENTBBYO3RJLHXK9V27BSV76U8Q89ULS8NVP29QNEFT10OPZDG6CJPNF5A50J15XBBGS6G7JL1J5Z0IKO104OJ8FF3QP1Z1MPV8YQJBSEYRROA01FX4XEZGNW0SSASBRIIMJ9529SQ9O8KPKZUB2IVX30X6T59ZJN97KSZZ72VP1IB8MBQWJN1E6X5POX7DDOD29BQ3D605EBLW4A7DPPQ3R9W7NOE37B0AIAD8RW9XGEE01O5BSFF' where id=70; -update noar ti set v2='71HCX56X32H1ENTBBYO3RJLHXK9V27BSV76U8Q89ULS8NVP29QNEFT10OPZDG6CJPNF5A50J15XBBGS6G7JL1J5Z0IKO104OJ8FF3QP1Z1MPV8YQJBSEYRROA01FX4XEZGNW0SSASBRIIMJ9529SQ9O8KPKZUB2IVX30X6T59ZJN97KSZZ72VP1IB8MBQWJN1E6X5POX7DDOD29BQ3D605EBLW4A7DPPQ3R9W7NOE37B0AIAD8RW9XGEE01O5BSFF' where id=70; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='FJLY9YYJ55F8J5PY3TRDWUNXG61YX3AIX8TOYYJTEZIRC9FSU4RBNWELRFXGPJCAVMCP1Y4NRWW78IIVF9Z4VPC6ZJW0B7QTMSTH28R4M8XZ049MJE28MTTT4OLMA2P5RP2OJSQBFRTOZZ5L1N5IQM7AC1BHE3IS990MO3IYEFX27LMYWGVBT0JXZFK4JAE5DVLDA07R7SSP7KNB08KJT8EKA7W4WI24MGFEF46MX906J6JXEGO2NHR865X7NF6KX' where id=70; -update noar ti set v3='FJLY9YYJ55F8J5PY3TRDWUNXG61YX3AIX8TOYYJTEZIRC9FSU4RBNWELRFXGPJCAVMCP1Y4NRWW78IIVF9Z4VPC6ZJW0B7QTMSTH28R4M8XZ049MJE28MTTT4OLMA2P5RP2OJSQBFRTOZZ5L1N5IQM7AC1BHE3IS990MO3IYEFX27LMYWGVBT0JXZFK4JAE5DVLDA07R7SSP7KNB08KJT8EKA7W4WI24MGFEF46MX906J6JXEGO2NHR865X7NF6KX' where id=70; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='9DZYQUSF9OTXF1YUWN6YFPG2ML3927OMDJWVQ6IV9SHJ6HDPKYA7HLWCYHCFUNTEFPFVW9T90ZS9IG8SINX8A49FLY5OFYDUMZ1PK6AXJPTY7ZQ0BZLUSOTIX32AD32KJRY8G5N3YAMWKNCQQ93N7UH0GVVR3JYT4X5DX4ZSK50ZLR3CA38W4JF3GVF7N06QM5AJWWUQ9K0PVI65MUZW5LE09O55039ZSTOUFDZ71ZEOH2R8LVO4L9J7MOYM2BMK1' where id=71; -update noar ti set v0='9DZYQUSF9OTXF1YUWN6YFPG2ML3927OMDJWVQ6IV9SHJ6HDPKYA7HLWCYHCFUNTEFPFVW9T90ZS9IG8SINX8A49FLY5OFYDUMZ1PK6AXJPTY7ZQ0BZLUSOTIX32AD32KJRY8G5N3YAMWKNCQQ93N7UH0GVVR3JYT4X5DX4ZSK50ZLR3CA38W4JF3GVF7N06QM5AJWWUQ9K0PVI65MUZW5LE09O55039ZSTOUFDZ71ZEOH2R8LVO4L9J7MOYM2BMK1' where id=71; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='N240W1BCFPSUI0MJEUYL970QF0D90E18ZTX0W5OPTNSBW964IUD65418K86X0P0AYMAR0LDV8317K7EX6BWDKK0KXFJ0WRRGKXDXIYE58TMKI9BLDRMDYB2EECS6SDXL08CHAE3GB0KUN904QQ30Y908DPYMPUSDRAV87B9KGMMXLI2DFCZENNCM27GB5C165UMNFGV31K78YTW2NWC2CJ2NA3LBPI2ADM73447QTTQ1FS70V6WD510INK7C5DNLN' where id=71; -update noar ti set v1='N240W1BCFPSUI0MJEUYL970QF0D90E18ZTX0W5OPTNSBW964IUD65418K86X0P0AYMAR0LDV8317K7EX6BWDKK0KXFJ0WRRGKXDXIYE58TMKI9BLDRMDYB2EECS6SDXL08CHAE3GB0KUN904QQ30Y908DPYMPUSDRAV87B9KGMMXLI2DFCZENNCM27GB5C165UMNFGV31K78YTW2NWC2CJ2NA3LBPI2ADM73447QTTQ1FS70V6WD510INK7C5DNLN' where id=71; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='622H5KHPBYEHO700WGUETVRWFOFJT2P0BZ2F7VBK205FBIKIU326XWYTELKQOUHJM8VYF5BW5C4PT0QUZ2IONGB9WX0U0EPSP9EREKZFMCHHKX40RKU55KWU5M3IWX2MBJIUM0V409UHR59HVU1NCJ0VOT703CGY5PC97YNOA8K9MDBTDRSBYTZC5067NOC9HI1MWHEWROUTW5JO1JO3V5E8KWJGFA9ZSUJK8J5FM3KXY9O9S6PQUWSP2RH1E8QWL' where id=71; -update noar ti set v2='622H5KHPBYEHO700WGUETVRWFOFJT2P0BZ2F7VBK205FBIKIU326XWYTELKQOUHJM8VYF5BW5C4PT0QUZ2IONGB9WX0U0EPSP9EREKZFMCHHKX40RKU55KWU5M3IWX2MBJIUM0V409UHR59HVU1NCJ0VOT703CGY5PC97YNOA8K9MDBTDRSBYTZC5067NOC9HI1MWHEWROUTW5JO1JO3V5E8KWJGFA9ZSUJK8J5FM3KXY9O9S6PQUWSP2RH1E8QWL' where id=71; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='693SVWB0NU7A8QNGNZUT2YSF0WOCLP26FH657DB76LJN47KRGPPOEG1JVE3K50XIOZHSN5J417ZNQDYWK4HZ9SFN96LL96YSXB3GDLOBBH4VWXOHE21HZ3ST2QX2LAMAZTKQR7AUSKNPOHJVORIY2YG91AD7NO31B53M05B2UZPFZ6M418I04JECNJY2PM3HNCENRH565YNJFWIGN6S4QNYG0KRYFIQ60MGS4YYO77R0OQJK99XTLUNVWPVHM7IDA' where id=71; -update noar ti set v3='693SVWB0NU7A8QNGNZUT2YSF0WOCLP26FH657DB76LJN47KRGPPOEG1JVE3K50XIOZHSN5J417ZNQDYWK4HZ9SFN96LL96YSXB3GDLOBBH4VWXOHE21HZ3ST2QX2LAMAZTKQR7AUSKNPOHJVORIY2YG91AD7NO31B53M05B2UZPFZ6M418I04JECNJY2PM3HNCENRH565YNJFWIGN6S4QNYG0KRYFIQ60MGS4YYO77R0OQJK99XTLUNVWPVHM7IDA' where id=71; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='4KVBI2G1BE6ZJC0ACZ25H195H8N0EGB00HGKZXXV2802TCJYXTR8SZQTW14ROQAZ8LDS61N8AUFGQUNXJQ19R547NY6WJ9WUA47ZZ4FQDAGSHAGRNZWNJC7Y3GSPUPIBKP9FCF15EP8PIDCOV3ZTLX5VAY933EWUKSBNDQYIWN2JIWCUOK0KAY2UCTRHVWSUWJR28H8BVNLDJTDDV29FUSGC71V33YH16GDC4VI3380U0G8LUAFRD823MKEM43F1V' where id=72; -update noar ti set v0='4KVBI2G1BE6ZJC0ACZ25H195H8N0EGB00HGKZXXV2802TCJYXTR8SZQTW14ROQAZ8LDS61N8AUFGQUNXJQ19R547NY6WJ9WUA47ZZ4FQDAGSHAGRNZWNJC7Y3GSPUPIBKP9FCF15EP8PIDCOV3ZTLX5VAY933EWUKSBNDQYIWN2JIWCUOK0KAY2UCTRHVWSUWJR28H8BVNLDJTDDV29FUSGC71V33YH16GDC4VI3380U0G8LUAFRD823MKEM43F1V' where id=72; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='5C9L72EGNPN3XEIC0S8YJX2S4BNQ5FNZ1SLA2KTRF523Q8GJG7B8J4LC8G9I1H6NCI49EUHBS57PV72WWC5XIXBIU5J69QZLNGXHYSIOF4L8VDPCNMB21S9TWQAX3WIVMSVCPD7KRWPIGNDGBFJG385DOBXVF0L86D7GMP1F1NJGM5NOUQWEWIB9E0XWH94YQWYOVS8AOT3QSHTYBZOWFQ3KMF8D2SWTV5GAC0AE2SLCWNT7WUWPGFQZQA89KM7GO' where id=72; -update noar ti set v1='5C9L72EGNPN3XEIC0S8YJX2S4BNQ5FNZ1SLA2KTRF523Q8GJG7B8J4LC8G9I1H6NCI49EUHBS57PV72WWC5XIXBIU5J69QZLNGXHYSIOF4L8VDPCNMB21S9TWQAX3WIVMSVCPD7KRWPIGNDGBFJG385DOBXVF0L86D7GMP1F1NJGM5NOUQWEWIB9E0XWH94YQWYOVS8AOT3QSHTYBZOWFQ3KMF8D2SWTV5GAC0AE2SLCWNT7WUWPGFQZQA89KM7GO' where id=72; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='UZB1VBNEW0BS1PH85F5DTEWFBB0HICPLT3G8NB92FZ01EK6DR0851HNNHRW5ISJ37WMJJR23GDU3U5UAI1V27F2IBZJF0B6154EQ7MX3EP62Q4ES37CG3QZRJHERXTD9U8JLAJ6UH2XPERL0AS87WUCR9J31WWIGG8E8H5E9NT1K427AYWXBSGI0PI5L13F6UABYP5BNENNNUFEHQPLQCRBOQBUFYJ7LIXT4AUEXHCZXBKCLS6OEZJ24AADFQS4P3' where id=72; -update noar ti set v2='UZB1VBNEW0BS1PH85F5DTEWFBB0HICPLT3G8NB92FZ01EK6DR0851HNNHRW5ISJ37WMJJR23GDU3U5UAI1V27F2IBZJF0B6154EQ7MX3EP62Q4ES37CG3QZRJHERXTD9U8JLAJ6UH2XPERL0AS87WUCR9J31WWIGG8E8H5E9NT1K427AYWXBSGI0PI5L13F6UABYP5BNENNNUFEHQPLQCRBOQBUFYJ7LIXT4AUEXHCZXBKCLS6OEZJ24AADFQS4P3' where id=72; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='M9KJ479UTCMETO0MI3SMJLXD47GS0FZ4B3PCN6G50SW38DM3Y8K8KTYK2CI8Q8XC1L1G5IYOSS6ITKLI7PK4WXMNF5N9LVR7XJY51ZQHMFL3M8GZHTQO5DROTOT3SKZ9K528B8XBW9FZX97Y29I6WN5WCKSU4QSU3KAKV1L5WHNOMFNS8Y0TBEMC2EPPZKXVIASWB98TYC4RCURHHZI1KG7HYF32XU1N5OEKI61A4KK0IXRZUYUWJCF5ASV8OTM4F' where id=72; -update noar ti set v3='M9KJ479UTCMETO0MI3SMJLXD47GS0FZ4B3PCN6G50SW38DM3Y8K8KTYK2CI8Q8XC1L1G5IYOSS6ITKLI7PK4WXMNF5N9LVR7XJY51ZQHMFL3M8GZHTQO5DROTOT3SKZ9K528B8XBW9FZX97Y29I6WN5WCKSU4QSU3KAKV1L5WHNOMFNS8Y0TBEMC2EPPZKXVIASWB98TYC4RCURHHZI1KG7HYF32XU1N5OEKI61A4KK0IXRZUYUWJCF5ASV8OTM4F' where id=72; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='7NEC4XECTR7ZW4IJASRU3H7WQGZ9T48SKRZB5J96H6124LC35990VQ1TXGGA1PYMWIH0HKOBIKBACX5Q8XE8A46HZQG9U1GIZJ01E2Y0C97IIKRLJBPWALKO71DRKXP7UA6B1JQ3L5YE3Q98R1ZIHLR4VLOZB46T7YMJHN75MIQ2S31TA4A9A9WX8JN83ZZYTWITPL748FS7AF7986FX2H6UQYESKHGB6NI26PS0PSWGES36AMXHBOZ2KNW5YD3LH' where id=73; -update noar ti set v0='7NEC4XECTR7ZW4IJASRU3H7WQGZ9T48SKRZB5J96H6124LC35990VQ1TXGGA1PYMWIH0HKOBIKBACX5Q8XE8A46HZQG9U1GIZJ01E2Y0C97IIKRLJBPWALKO71DRKXP7UA6B1JQ3L5YE3Q98R1ZIHLR4VLOZB46T7YMJHN75MIQ2S31TA4A9A9WX8JN83ZZYTWITPL748FS7AF7986FX2H6UQYESKHGB6NI26PS0PSWGES36AMXHBOZ2KNW5YD3LH' where id=73; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='C812P5RL4RLS0I5886A1PMR43QI83FMX77FNE69GENXR9ZMSAKJGZQ3DBPR1C64ZP9LQTA27G7NBZPUGLDRBP7VYNXQ8ATX2RE13OVY9X0WU1KE3O436F04H69S4XZD7U2F98Q248D2QQHS53N8A6I6IDDF9UOF1O3QG41381YTTK1V18EZGNW51588P9DZJCNXE8CJU7GN3M0DSEG31OW47JY7P2WO9R6RFIG9Y0WJUICW8PHMF2R5Y0IE49UZL0' where id=73; -update noar ti set v1='C812P5RL4RLS0I5886A1PMR43QI83FMX77FNE69GENXR9ZMSAKJGZQ3DBPR1C64ZP9LQTA27G7NBZPUGLDRBP7VYNXQ8ATX2RE13OVY9X0WU1KE3O436F04H69S4XZD7U2F98Q248D2QQHS53N8A6I6IDDF9UOF1O3QG41381YTTK1V18EZGNW51588P9DZJCNXE8CJU7GN3M0DSEG31OW47JY7P2WO9R6RFIG9Y0WJUICW8PHMF2R5Y0IE49UZL0' where id=73; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='WO8RCONG3AO65JYG2X4N02QYFQGU66QPSD6XANXR578LZ4C54R6MAXMPRWV371MZXNX94XKNZKN717QJ90ZBHF24J36UFI0430JPZZZ7HRWJB8GHAP8MKQ61XICSE0OI97DACR42F69CTXNLH3E7SSGYVDD7CHEPYMV286HS5CFAMJ8Z6SCDPK9SGS4QO82VTYJBBFYSCW09GMMR8OL36DHAWQBQT2FV2NK45KGL38WAEW9U0FZ73TRETTHMBYDNJ' where id=73; -update noar ti set v2='WO8RCONG3AO65JYG2X4N02QYFQGU66QPSD6XANXR578LZ4C54R6MAXMPRWV371MZXNX94XKNZKN717QJ90ZBHF24J36UFI0430JPZZZ7HRWJB8GHAP8MKQ61XICSE0OI97DACR42F69CTXNLH3E7SSGYVDD7CHEPYMV286HS5CFAMJ8Z6SCDPK9SGS4QO82VTYJBBFYSCW09GMMR8OL36DHAWQBQT2FV2NK45KGL38WAEW9U0FZ73TRETTHMBYDNJ' where id=73; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='8FS8A49KS3S2J7ZNUKIVYD8CR1N0SUV8UK1NWBKF8R2GOE1MSDVJLZPY6QZVAHESK0LSENBZIQ5IC86GI1DM0HWYRZEEY5JD19SNNED8E861RG3WT365K0V0N36B0SCRDGS3F5J7NG3RGDIY3U8ZJJCF2RMJ3NLYHAF5CLVCEZT3FN1X2C4B0S5H7V193QB9Z03JEHDBMH3PKPWZBF2XU913FHBN52EGEY9T88KT8WJHCN98JET6RMRFRCC36GPXW' where id=73; -update noar ti set v3='8FS8A49KS3S2J7ZNUKIVYD8CR1N0SUV8UK1NWBKF8R2GOE1MSDVJLZPY6QZVAHESK0LSENBZIQ5IC86GI1DM0HWYRZEEY5JD19SNNED8E861RG3WT365K0V0N36B0SCRDGS3F5J7NG3RGDIY3U8ZJJCF2RMJ3NLYHAF5CLVCEZT3FN1X2C4B0S5H7V193QB9Z03JEHDBMH3PKPWZBF2XU913FHBN52EGEY9T88KT8WJHCN98JET6RMRFRCC36GPXW' where id=73; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='9YNN9O1R1E5LJZ5KIIMVNEVFBFSV5ZHUFOJCJS4AOO6SUX1PN3UIS1PNBTLXD3I1DPMX7JX1JTFACPGBDDZ0XA5M3DQ91WNJK41VCB8OKB1LOWH1L6IE78HHTJ67J7O1XB44432Y1JLJLUE26PRBUYMXSTMTPWWZ4XCMQTDMG1SFG2W9UH3O6OT4XJKMMPS8BMGKHGXW85PLSKRNHA63MUBR63LU11B6ZUDQ0LMGIH2V725V7BNVTYIHB7728T8FZ' where id=74; -update noar ti set v0='9YNN9O1R1E5LJZ5KIIMVNEVFBFSV5ZHUFOJCJS4AOO6SUX1PN3UIS1PNBTLXD3I1DPMX7JX1JTFACPGBDDZ0XA5M3DQ91WNJK41VCB8OKB1LOWH1L6IE78HHTJ67J7O1XB44432Y1JLJLUE26PRBUYMXSTMTPWWZ4XCMQTDMG1SFG2W9UH3O6OT4XJKMMPS8BMGKHGXW85PLSKRNHA63MUBR63LU11B6ZUDQ0LMGIH2V725V7BNVTYIHB7728T8FZ' where id=74; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='OH77FS0E3VHZUNSGAC9ZG4SULNF66MVU6JENVIOISFZ4MIO24O6R2V9QWBET1PVSBO4W2NSWBM479O3G5RB0BF62CJ6FD817P7CW7ZZY04QGCJXA88GKU4RJ1RE6QJT8NK093EKPRJWQ6Y5MQHHMKW5914BPRD65FQ5WHY8Q0GMGQD2OU6BDKOVDS6OWWLI59C7RNHV8XX6X5BUWGR5V3WPRN68LPLEFIVQ2B5BCV9FJXH4ESJPTBF4I1YIX22LXE' where id=74; -update noar ti set v1='OH77FS0E3VHZUNSGAC9ZG4SULNF66MVU6JENVIOISFZ4MIO24O6R2V9QWBET1PVSBO4W2NSWBM479O3G5RB0BF62CJ6FD817P7CW7ZZY04QGCJXA88GKU4RJ1RE6QJT8NK093EKPRJWQ6Y5MQHHMKW5914BPRD65FQ5WHY8Q0GMGQD2OU6BDKOVDS6OWWLI59C7RNHV8XX6X5BUWGR5V3WPRN68LPLEFIVQ2B5BCV9FJXH4ESJPTBF4I1YIX22LXE' where id=74; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='A7U95GIVHS3RJI0XLFMEOCUD7F4SS5BGHSY53I6RO7WBYKW2P2UFS7TT6LF8QCDKL8LRMXQX80MGJGN29T0FDOMQRHVT0PJMY4SODMCOLHPVOS4GQVEEJXN9VXJ39DOMW823K2WXFFY9CUB5XFD3VN8F414YTAECKL1OZ6F0F3BHTYATE5WL8VPUHZODGSI95FFI55OY2GWJ0F5R3QLWQTWRM9S86FJ14CWVG1GTYPU6TMV3BQXCF15GHMSGKR6G6' where id=74; -update noar ti set v2='A7U95GIVHS3RJI0XLFMEOCUD7F4SS5BGHSY53I6RO7WBYKW2P2UFS7TT6LF8QCDKL8LRMXQX80MGJGN29T0FDOMQRHVT0PJMY4SODMCOLHPVOS4GQVEEJXN9VXJ39DOMW823K2WXFFY9CUB5XFD3VN8F414YTAECKL1OZ6F0F3BHTYATE5WL8VPUHZODGSI95FFI55OY2GWJ0F5R3QLWQTWRM9S86FJ14CWVG1GTYPU6TMV3BQXCF15GHMSGKR6G6' where id=74; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='4K0AMB69AHAMZSR7S5O0PLJ76BKVAYIE2O320HMUQJFAX22TFO3S35MIQ4GIJI9KMOQOBA9RPNHMS1T6CFWH5EVI78JQQR9IDBY46WRJVCYCZ8M6YQGQBP9AVC0AD2DS2IBW2HNXD9HOXF1AT7KRHCT4YHP2Z1BPTV7DHMW2EAABY3K698S9836N2AINOUNPLCHQDITXA6U8GYC8KAJOZZJ58JEQXBIRUT3SL2XZWULU5KAS4UW2MOEUUVUSE4SA5' where id=74; -update noar ti set v3='4K0AMB69AHAMZSR7S5O0PLJ76BKVAYIE2O320HMUQJFAX22TFO3S35MIQ4GIJI9KMOQOBA9RPNHMS1T6CFWH5EVI78JQQR9IDBY46WRJVCYCZ8M6YQGQBP9AVC0AD2DS2IBW2HNXD9HOXF1AT7KRHCT4YHP2Z1BPTV7DHMW2EAABY3K698S9836N2AINOUNPLCHQDITXA6U8GYC8KAJOZZJ58JEQXBIRUT3SL2XZWULU5KAS4UW2MOEUUVUSE4SA5' where id=74; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='MAXJK8SCOJ2E8T4VMQ261YKS5WC8TEA9US5KBXUC1T6226LYKNQMSWTIN3A7HZM01SS3WHI1OCNRRJQEJDO1DB2GLHANX99YH1TNCRYWBJ4FDV795TOA1PTTY0G7QS7DGEKL7B4TY5N4V8TLAZWDFWEC52ONF1GICCQO0V8UGVSV797VUREEEFI7ZWB1OYO3IT9BQHEED4L9JWKWDBW2WIFPUWHBZH6QJBNGOQET8HM4WMIXNUSVFJNSSTPDP5THO' where id=75; -update noar ti set v0='MAXJK8SCOJ2E8T4VMQ261YKS5WC8TEA9US5KBXUC1T6226LYKNQMSWTIN3A7HZM01SS3WHI1OCNRRJQEJDO1DB2GLHANX99YH1TNCRYWBJ4FDV795TOA1PTTY0G7QS7DGEKL7B4TY5N4V8TLAZWDFWEC52ONF1GICCQO0V8UGVSV797VUREEEFI7ZWB1OYO3IT9BQHEED4L9JWKWDBW2WIFPUWHBZH6QJBNGOQET8HM4WMIXNUSVFJNSSTPDP5THO' where id=75; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='AVWI8Y3F2LZ4J0IROPDULWOK9XE9GVUIEBO3VUBMSZW1I7RAGGMKEC1A0YN7M6AQT5QEYJFMB6RT5V2SNPSFVFHENSO0X5OGAFPMG95OQZ1LE3XVDD9IJTEG9U7QV249F805C0R4KN71LEF9I2CNPUH8IGZ9IMNBXXLM5S2GL6USLIJVUKSXWJVFNYIAZAIZNT0DOH9FFBP4DK9X6LYIC6E8ZZBZP7TD1ZA0TBW8HUKO1U41JGF5JF0FIDPRKRLB4' where id=75; -update noar ti set v1='AVWI8Y3F2LZ4J0IROPDULWOK9XE9GVUIEBO3VUBMSZW1I7RAGGMKEC1A0YN7M6AQT5QEYJFMB6RT5V2SNPSFVFHENSO0X5OGAFPMG95OQZ1LE3XVDD9IJTEG9U7QV249F805C0R4KN71LEF9I2CNPUH8IGZ9IMNBXXLM5S2GL6USLIJVUKSXWJVFNYIAZAIZNT0DOH9FFBP4DK9X6LYIC6E8ZZBZP7TD1ZA0TBW8HUKO1U41JGF5JF0FIDPRKRLB4' where id=75; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='J2WRIE1SYM8DB6EARECT01QBP6L7359A2ZLH49103EOZ0723AMYCJJNTGNF7F4NZPLUK0NZTJ3X3EGNWIQ7S0P5FNSST5BJ1EZ6NL2U85HQKGM4DYQVUR8O9EASGOI7TJWUMG6RTADPYNPIN227SK3AHTZHYJ7J7U0K1PWXNZO7UL6NK13GS6S5IXM498CM1YUTC24CG5B8JT3T654I33WM7Q0QGYO62ATVEJSHK6IN5TH8SGGE0NDFF8T6C4APFJ' where id=75; -update noar ti set v2='J2WRIE1SYM8DB6EARECT01QBP6L7359A2ZLH49103EOZ0723AMYCJJNTGNF7F4NZPLUK0NZTJ3X3EGNWIQ7S0P5FNSST5BJ1EZ6NL2U85HQKGM4DYQVUR8O9EASGOI7TJWUMG6RTADPYNPIN227SK3AHTZHYJ7J7U0K1PWXNZO7UL6NK13GS6S5IXM498CM1YUTC24CG5B8JT3T654I33WM7Q0QGYO62ATVEJSHK6IN5TH8SGGE0NDFF8T6C4APFJ' where id=75; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='QCF18C0GDB9XJ99UOJ5V5NSHX52SMX4NJCX6YM31XUWCRYOY8BT7HW330ML84ZOJAORF23HL13X9H3FI780K5BML23CE5RKD8MSP5Q4U5PIC3CPVJCO81S7INPU5X1SC1WJK66PSIP3QFLYMZ60MTBDMPZR1YQ0X6BDJQGPHJYXSAV8GH7Q5SBUCT4BGXAFWEWCNTH35QN2S6BRKRI094JGRY2K5EBUMS6H1BBI1YY8T2MCVE9W33CMG2X41MBLXC' where id=75; -update noar ti set v3='QCF18C0GDB9XJ99UOJ5V5NSHX52SMX4NJCX6YM31XUWCRYOY8BT7HW330ML84ZOJAORF23HL13X9H3FI780K5BML23CE5RKD8MSP5Q4U5PIC3CPVJCO81S7INPU5X1SC1WJK66PSIP3QFLYMZ60MTBDMPZR1YQ0X6BDJQGPHJYXSAV8GH7Q5SBUCT4BGXAFWEWCNTH35QN2S6BRKRI094JGRY2K5EBUMS6H1BBI1YY8T2MCVE9W33CMG2X41MBLXC' where id=75; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='71NT19EP84082NY6CJRT4GT5F4VRZHBW4BFBCZWDGYJA5PMNIDJHVP1LHXSMZ22GPH9RWCWE809VIVSA05G6SHT3GHU9TC0V8G8KJTSRK43X5X6EN4DT02EBN3YOVMZMAQL9O9WXLZLJVIHUZS9P1O5NNGVUEOMNT1P9HTI2BNTGLZSNCU59ZQO2B2HI1CD2K330OG33KETLRHM0KZHWY6EGLN5U36F3AN4E4RASWVIF0BQML8CQIK5DFOTWSV1I0' where id=76; -update noar ti set v0='71NT19EP84082NY6CJRT4GT5F4VRZHBW4BFBCZWDGYJA5PMNIDJHVP1LHXSMZ22GPH9RWCWE809VIVSA05G6SHT3GHU9TC0V8G8KJTSRK43X5X6EN4DT02EBN3YOVMZMAQL9O9WXLZLJVIHUZS9P1O5NNGVUEOMNT1P9HTI2BNTGLZSNCU59ZQO2B2HI1CD2K330OG33KETLRHM0KZHWY6EGLN5U36F3AN4E4RASWVIF0BQML8CQIK5DFOTWSV1I0' where id=76; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='BH3KTNOGM94BEH1J2QNK4XOSZIPMXR2G3NXCTRMZFPJOHXTDJU0ZTHK26W6M7J6O1SJLBOD46LI99XVF9KUGCWK81D6AWNUF1VEG8BEL8SYYTB7MX3DISRLI1B4OEZFXZL0UGWQ0R8KBZL774R4GZPI5T2N4NE8YAT5MDCHX7DBVDLKG4YHGV07LBAM7UHOVHQ961WA3TTR0F1743P7P65VIRGN1NMPZP2K3JILT2WFKKTWEX16GZ5RQJS5N99WM0' where id=76; -update noar ti set v1='BH3KTNOGM94BEH1J2QNK4XOSZIPMXR2G3NXCTRMZFPJOHXTDJU0ZTHK26W6M7J6O1SJLBOD46LI99XVF9KUGCWK81D6AWNUF1VEG8BEL8SYYTB7MX3DISRLI1B4OEZFXZL0UGWQ0R8KBZL774R4GZPI5T2N4NE8YAT5MDCHX7DBVDLKG4YHGV07LBAM7UHOVHQ961WA3TTR0F1743P7P65VIRGN1NMPZP2K3JILT2WFKKTWEX16GZ5RQJS5N99WM0' where id=76; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='MYG9WC3PCRJPG9WTEVI0QBKKXNL6MVRDED81DBONL7F1AK717OXTOPMJ44W4441A7UGOBO1OFFEB25TH6QNBUFHVJDO2BZHQTLX4G6LVWF9KS6KQ4DKP8X9YKQQBVJ8V29QRE8N8874BQRUVWTLPW74P13S5IVTCBMLVYODQDV6502G6FUDPY569AVTP7SFWZCVF6CCJQHSFO9JHXNSOF2EA03CYOE0B2DWS7T3GYJ9Y393SR9UBMRPMDJKNQKB0C' where id=76; -update noar ti set v2='MYG9WC3PCRJPG9WTEVI0QBKKXNL6MVRDED81DBONL7F1AK717OXTOPMJ44W4441A7UGOBO1OFFEB25TH6QNBUFHVJDO2BZHQTLX4G6LVWF9KS6KQ4DKP8X9YKQQBVJ8V29QRE8N8874BQRUVWTLPW74P13S5IVTCBMLVYODQDV6502G6FUDPY569AVTP7SFWZCVF6CCJQHSFO9JHXNSOF2EA03CYOE0B2DWS7T3GYJ9Y393SR9UBMRPMDJKNQKB0C' where id=76; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='ZKJR74B19LYTUC4TO15X0I15TZYO0P75YBNV2J3J6T844G08HKUS1Z1LBTKIXWXFGZU77ZTJYVY8TQSO1RFLHZL2XYNRBDL1UCAZMKDZMCK10RM3EM2Y1MW43MGNB2YBS39CMFD6Q9WE6ZIX7CG2P57P006HRKBMUAPOY73LGKRHX09AF8YFSS8TNBWV3E0VE23BV7V3HPBV29JY0C4EUMGL9O75G3OJJOOCRS2NBBSY2LVON6R8G4XKI7VI3882A' where id=76; -update noar ti set v3='ZKJR74B19LYTUC4TO15X0I15TZYO0P75YBNV2J3J6T844G08HKUS1Z1LBTKIXWXFGZU77ZTJYVY8TQSO1RFLHZL2XYNRBDL1UCAZMKDZMCK10RM3EM2Y1MW43MGNB2YBS39CMFD6Q9WE6ZIX7CG2P57P006HRKBMUAPOY73LGKRHX09AF8YFSS8TNBWV3E0VE23BV7V3HPBV29JY0C4EUMGL9O75G3OJJOOCRS2NBBSY2LVON6R8G4XKI7VI3882A' where id=76; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='QEH9QBXR6Q0RUU6VID14PBM1C134IF7ENG6IJUG13TCEEC7P3OO36I6RJMVMBAE47I5KE4856CKGR4YCMKHE4VZWK6R51FXBANSRRSD82NG5X1UFMOIGVTICZSZ7TKYGMOK8YHRD6W5DT8MBYWT5N6Q9KOJKJFFQTGMK13TC40BLF42JR2B5NJTKX1UM0YA05GR108UFGJGN2Q1DD4UCJKC6X2LEBR2RY5FIX9KZ796RMIYFUAQSK73WDJR3K85B0' where id=77; -update noar ti set v0='QEH9QBXR6Q0RUU6VID14PBM1C134IF7ENG6IJUG13TCEEC7P3OO36I6RJMVMBAE47I5KE4856CKGR4YCMKHE4VZWK6R51FXBANSRRSD82NG5X1UFMOIGVTICZSZ7TKYGMOK8YHRD6W5DT8MBYWT5N6Q9KOJKJFFQTGMK13TC40BLF42JR2B5NJTKX1UM0YA05GR108UFGJGN2Q1DD4UCJKC6X2LEBR2RY5FIX9KZ796RMIYFUAQSK73WDJR3K85B0' where id=77; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='ZP4W6KPAR1T6WTWH2MCFRENMQRJJRB66HEG089L5LM728YT3XIF5RVQJ3HSQRRE7G698ABL2LHUEF8UL53CKSZHMSIBNAJPQZS0NJ9UY88HC9OZFIYPEC522AMQZ55A01ZOE6HW3GK3EIF9P6GKJXDQ1DAKMV7RE2B6DRGDUO0J5PINNG1AYSFCQ8QF0CCPWQ06WX3YFW66KF3Z51LNJUROM3TNTK3S22NB3RDLFKUU57OG2FGI40U2U0SKZY8A82' where id=77; -update noar ti set v1='ZP4W6KPAR1T6WTWH2MCFRENMQRJJRB66HEG089L5LM728YT3XIF5RVQJ3HSQRRE7G698ABL2LHUEF8UL53CKSZHMSIBNAJPQZS0NJ9UY88HC9OZFIYPEC522AMQZ55A01ZOE6HW3GK3EIF9P6GKJXDQ1DAKMV7RE2B6DRGDUO0J5PINNG1AYSFCQ8QF0CCPWQ06WX3YFW66KF3Z51LNJUROM3TNTK3S22NB3RDLFKUU57OG2FGI40U2U0SKZY8A82' where id=77; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='34NNL1Y93SHGO2RMH8CGKUXEPYHS4GGK7I3EH6ZPS34D2EO6G4G4AXQQHICGC37UI1XGMPH54E0QC6E6EDN4F543YZ5WPQTZWND9V72NW9BC0ZQUAOBQAR60CDGHDY97O95UZHI7HFQBQY5NVXBMGP7UTVIRAANZ9IA015ELU2G7GUB37XZ1Z8VMVK96VRB8056XIQPS2SP1Z57SZ0EZ3YM8IN9G3IDMB54HQ9OFK0QU3BQERN4T5OOR7PXPXE2QN' where id=77; -update noar ti set v2='34NNL1Y93SHGO2RMH8CGKUXEPYHS4GGK7I3EH6ZPS34D2EO6G4G4AXQQHICGC37UI1XGMPH54E0QC6E6EDN4F543YZ5WPQTZWND9V72NW9BC0ZQUAOBQAR60CDGHDY97O95UZHI7HFQBQY5NVXBMGP7UTVIRAANZ9IA015ELU2G7GUB37XZ1Z8VMVK96VRB8056XIQPS2SP1Z57SZ0EZ3YM8IN9G3IDMB54HQ9OFK0QU3BQERN4T5OOR7PXPXE2QN' where id=77; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='QQRW0CJ6DVZKHMMCDAN0UYIJVJHDIYAXQ239COEG1Q6CH3DA41E6175QW3FSVI87T9INMJ0EZ15NXPE029KLECDS02L6LW3FVFOUVNIVCOI249MS0OZRN2YNLH3OG8W56LXCOU98NOTOAQECGXVA1304KMFLTZ17MQD5CGFSBFDWCC2F5DRNBAIJHMMW4BACUOEGR8EL8T8XD8L4ETKY4RBA9898QCGI5B7JBQXJ1HV6FBATOQW5IS7N0A4LORH42' where id=77; -update noar ti set v3='QQRW0CJ6DVZKHMMCDAN0UYIJVJHDIYAXQ239COEG1Q6CH3DA41E6175QW3FSVI87T9INMJ0EZ15NXPE029KLECDS02L6LW3FVFOUVNIVCOI249MS0OZRN2YNLH3OG8W56LXCOU98NOTOAQECGXVA1304KMFLTZ17MQD5CGFSBFDWCC2F5DRNBAIJHMMW4BACUOEGR8EL8T8XD8L4ETKY4RBA9898QCGI5B7JBQXJ1HV6FBATOQW5IS7N0A4LORH42' where id=77; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='M1TGPFZ27BNJ9HWFB6BWQU9T9J8OXRDSODTL3SMEIYA9J2YG3UIBCNR7YDIH5D3QY81FHBG2WVTO8J9ZA8JGK6GPJG9QD8JXFVI00R9L5KLQQILFULHREK1IN9ABI64EDC081J730AFPLLSUPF6ULW6IVB9DJ1E0J54UMITLZ94VV2JR2CIG1KGU2MYOCT7XB0P6SA7FLBL6KGFVFLJQTITRU0J14JRIQR239Z54YEB5BRSXHVMG5L1UOJQAGOUET' where id=78; -update noar ti set v0='M1TGPFZ27BNJ9HWFB6BWQU9T9J8OXRDSODTL3SMEIYA9J2YG3UIBCNR7YDIH5D3QY81FHBG2WVTO8J9ZA8JGK6GPJG9QD8JXFVI00R9L5KLQQILFULHREK1IN9ABI64EDC081J730AFPLLSUPF6ULW6IVB9DJ1E0J54UMITLZ94VV2JR2CIG1KGU2MYOCT7XB0P6SA7FLBL6KGFVFLJQTITRU0J14JRIQR239Z54YEB5BRSXHVMG5L1UOJQAGOUET' where id=78; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='E45HRG2PE82P2VMGLRV8ITBZOIGC0ROVAD2JNN60W9OLJ1MFE083QW3CVV3TB27XNU8YTKO4KFJFHG3W1UASL4AQR1ERT3RSW2OR5U3MDL0A9RJN2SEFG8ICL9UPZSL93UNR4LCR00A6W21O7K3CFP1XL238PS7OR71JTUPSR4GM947O0IXQJB735GGA1R1UNX1PNTBPP12KP3H1LKFCQW4H9HWUSIUZBT8PQI0V36LJ18ZR9D3QYAT9LB6IW7Z61' where id=78; -update noar ti set v1='E45HRG2PE82P2VMGLRV8ITBZOIGC0ROVAD2JNN60W9OLJ1MFE083QW3CVV3TB27XNU8YTKO4KFJFHG3W1UASL4AQR1ERT3RSW2OR5U3MDL0A9RJN2SEFG8ICL9UPZSL93UNR4LCR00A6W21O7K3CFP1XL238PS7OR71JTUPSR4GM947O0IXQJB735GGA1R1UNX1PNTBPP12KP3H1LKFCQW4H9HWUSIUZBT8PQI0V36LJ18ZR9D3QYAT9LB6IW7Z61' where id=78; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='LT422FNS340WVO7BROC6N63A63S388BF4TD1NJOVN6M2ULE9USLIZS2CD5GGLO9VIM4ZV07VU6QLA5VFZ10P2AJT5CL1CGW4FK1AESTHRUFNBHFDENW8OY6IWTDG7988B9WARPGM41CGSS6VDH7X84SQ6Z1JQDRWD5Z1HI2EUM9143P7OIGQMPBIZ64QQEMQ5USVWFZ1W8RP8Y23QJMFSYXABVVTXAF56JGCCOTICUTLZ7E6H5L6LJI9CJBLLLG4R' where id=78; -update noar ti set v2='LT422FNS340WVO7BROC6N63A63S388BF4TD1NJOVN6M2ULE9USLIZS2CD5GGLO9VIM4ZV07VU6QLA5VFZ10P2AJT5CL1CGW4FK1AESTHRUFNBHFDENW8OY6IWTDG7988B9WARPGM41CGSS6VDH7X84SQ6Z1JQDRWD5Z1HI2EUM9143P7OIGQMPBIZ64QQEMQ5USVWFZ1W8RP8Y23QJMFSYXABVVTXAF56JGCCOTICUTLZ7E6H5L6LJI9CJBLLLG4R' where id=78; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='2RRQQ3G33WUF5HHKU4ZEP20VX1I8YPRAIPYL8AKIP8ZGF3MIHY0K2MA4KFOD6IEGSSWQKBWLERQNS3OQ97CF8CROIC7IJ9FBXIRL39EIB2277KCX5PI977TJX07WP7TZ4XRQTCS26VS3IZFRHE2ECUP2N1G8SGN2DRAXK5APLP39WAN5KEVTN8VBWAGSE3EED3ZLYVR6QXXMZGLDN4QVEAMR9N0IEICCSRAHJLZIH7QS1PM6YWQPBSTXIQIFO9S07' where id=78; -update noar ti set v3='2RRQQ3G33WUF5HHKU4ZEP20VX1I8YPRAIPYL8AKIP8ZGF3MIHY0K2MA4KFOD6IEGSSWQKBWLERQNS3OQ97CF8CROIC7IJ9FBXIRL39EIB2277KCX5PI977TJX07WP7TZ4XRQTCS26VS3IZFRHE2ECUP2N1G8SGN2DRAXK5APLP39WAN5KEVTN8VBWAGSE3EED3ZLYVR6QXXMZGLDN4QVEAMR9N0IEICCSRAHJLZIH7QS1PM6YWQPBSTXIQIFO9S07' where id=78; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='GEY2MGKDC0A7ZOV2SCLHGJLN0UFEP867IBZZJ0KHNUKNAGNMTKLOSDO1A3I06AVWSUE5YTNMG4MB72EHJDYZFE82PGOTOFEAMMHSTQS6JTPXHL2JV9EGXXZY79VR271YWQVHPBPG491H57QDTNXJ1NF28RG7MXKRRGIE08SMIJA7OB8HYOKR7S8KAICAAIYQH6UHVG64IKIYA906ELD7KIA0GRSCJ8F9HJ5DD2ACBXWWPGPXY3K5SS1KLRCVYHBV8' where id=79; -update noar ti set v0='GEY2MGKDC0A7ZOV2SCLHGJLN0UFEP867IBZZJ0KHNUKNAGNMTKLOSDO1A3I06AVWSUE5YTNMG4MB72EHJDYZFE82PGOTOFEAMMHSTQS6JTPXHL2JV9EGXXZY79VR271YWQVHPBPG491H57QDTNXJ1NF28RG7MXKRRGIE08SMIJA7OB8HYOKR7S8KAICAAIYQH6UHVG64IKIYA906ELD7KIA0GRSCJ8F9HJ5DD2ACBXWWPGPXY3K5SS1KLRCVYHBV8' where id=79; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='AUR8O25HT1TRD66PAM3XUVR1X2UFPNO54QXGDTP03OWAIDQLPEPOQ2Y5YX3O1X9HWFPKM76DWEXSHRDIPR791Q9J30NQA24W5MF6MFBMSVR5DQ1X5V8ZOF93X1H4GK0DLP1Z8FQFDXGGMJ2M8G0RH9838AB8T3GSTLU9Q95XY5RJSV9NQ8XMUMFOX3VNDP4CBL58A57EWDGQO2C63I6TGQULG6W5H3DJT2I7VVN90N6ZNK7CLJ5LR0UHU4MTMWUJ0' where id=79; -update noar ti set v1='AUR8O25HT1TRD66PAM3XUVR1X2UFPNO54QXGDTP03OWAIDQLPEPOQ2Y5YX3O1X9HWFPKM76DWEXSHRDIPR791Q9J30NQA24W5MF6MFBMSVR5DQ1X5V8ZOF93X1H4GK0DLP1Z8FQFDXGGMJ2M8G0RH9838AB8T3GSTLU9Q95XY5RJSV9NQ8XMUMFOX3VNDP4CBL58A57EWDGQO2C63I6TGQULG6W5H3DJT2I7VVN90N6ZNK7CLJ5LR0UHU4MTMWUJ0' where id=79; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='HBOTJ0QPHI55D8MEL74B22UE5YGMR4HXPZ85D1X0FIFEY47WAAW44JIAQIH0MHTI4TXEGRR56CZ3IH7OA6DTWFYHCIQLWHMH9THFS46AKSYSSAGKJU3YP81RLTD4LFFLQMYKBWLEXGYEB4XG8ACGU2TR0QX7HT0QYR3LVEUB1LHFS3Q1YPPIJMNTJFMXZNOOWBSOCQYMIYY5F37RHC45X600YYHBCGPM5U7BHI4FVSD16S1XXVGVBFJAPVF0DBH1L' where id=79; -update noar ti set v2='HBOTJ0QPHI55D8MEL74B22UE5YGMR4HXPZ85D1X0FIFEY47WAAW44JIAQIH0MHTI4TXEGRR56CZ3IH7OA6DTWFYHCIQLWHMH9THFS46AKSYSSAGKJU3YP81RLTD4LFFLQMYKBWLEXGYEB4XG8ACGU2TR0QX7HT0QYR3LVEUB1LHFS3Q1YPPIJMNTJFMXZNOOWBSOCQYMIYY5F37RHC45X600YYHBCGPM5U7BHI4FVSD16S1XXVGVBFJAPVF0DBH1L' where id=79; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='KLVA79QM3ENX2ZEDQJ0G0YFX7MG38YA7XVGNI74NRSIGCO2140FROZV5S5GUV62XB4X859ZXJHNZY03R02CLTSZY3A66Z9N52S2P8Z8R2PJR3AKZDRKZHLKC59WX7ZLTKOCEKN2TCL3P3ZJ1MKBWBMZE4LPWAVFLQPIUR4A3L599QK6J456QKNVGXTC8EMNBLRMEXW2OFFLHG0MPU9RDOFTZSWRPA84F602YTXRK39WHXWIM6TNWPXT4IBR0IG1BT' where id=79; -update noar ti set v3='KLVA79QM3ENX2ZEDQJ0G0YFX7MG38YA7XVGNI74NRSIGCO2140FROZV5S5GUV62XB4X859ZXJHNZY03R02CLTSZY3A66Z9N52S2P8Z8R2PJR3AKZDRKZHLKC59WX7ZLTKOCEKN2TCL3P3ZJ1MKBWBMZE4LPWAVFLQPIUR4A3L599QK6J456QKNVGXTC8EMNBLRMEXW2OFFLHG0MPU9RDOFTZSWRPA84F602YTXRK39WHXWIM6TNWPXT4IBR0IG1BT' where id=79; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='13F7SG1T7D1P1IUD396Y3NKF692WWAOKBT5I0CYSZ3CCLJ3VWAPQCJLD31CFSLN6IRV1GPWEQG0NA1XMW7NHH1CG3DF0Z1NYQJE5UUXHMR79XSRFHHXF3814FOD276ILSAZ5G2KOTKQV61PLIGW5XVFKHJV5O6DW5F4AAWRMXGKT54K1HBAUHC5K60Y60EYZDBVXPFOCRYS61XFI2QCM9ZYJJBDLG9TXL0BZ85DUGLOR3YH5SX54TK92QYPUYULQL' where id=80; -update noar ti set v0='13F7SG1T7D1P1IUD396Y3NKF692WWAOKBT5I0CYSZ3CCLJ3VWAPQCJLD31CFSLN6IRV1GPWEQG0NA1XMW7NHH1CG3DF0Z1NYQJE5UUXHMR79XSRFHHXF3814FOD276ILSAZ5G2KOTKQV61PLIGW5XVFKHJV5O6DW5F4AAWRMXGKT54K1HBAUHC5K60Y60EYZDBVXPFOCRYS61XFI2QCM9ZYJJBDLG9TXL0BZ85DUGLOR3YH5SX54TK92QYPUYULQL' where id=80; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='57LW6PGG89D3EYVEKMN3JHTTFVPGO0JJP20MY2ZNJ1OOKV2KKWP2MB7KBN86LAO3W1WAOIUNRU4ZHFBU8LSI95I0A0ZEMRO75BLQV4Z7Y6HALJAUXRFL8K4QXO2BJH1A0XLA5WTISN8FIJS5SUJXMYMFT6GPQS3W3JIO55027QC7Q9B22MCIV0BYVXIWA4RB6R9BA0Y0Q50ZSZ9LXE1RBXYHMQJLWYMZRQNQ90J06P1DK3Y5UAWC3MQ1B1MGD36BE' where id=80; -update noar ti set v1='57LW6PGG89D3EYVEKMN3JHTTFVPGO0JJP20MY2ZNJ1OOKV2KKWP2MB7KBN86LAO3W1WAOIUNRU4ZHFBU8LSI95I0A0ZEMRO75BLQV4Z7Y6HALJAUXRFL8K4QXO2BJH1A0XLA5WTISN8FIJS5SUJXMYMFT6GPQS3W3JIO55027QC7Q9B22MCIV0BYVXIWA4RB6R9BA0Y0Q50ZSZ9LXE1RBXYHMQJLWYMZRQNQ90J06P1DK3Y5UAWC3MQ1B1MGD36BE' where id=80; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='ODJUG17MEZYWLG2TVEEKZ9GD8Z35RE87C4HM07SF05KGBJUNCJR31PTR29VWETVYJSZCHPEVGP3JU2IKZRSZMA2M1LPLLTK0HDULTQIJA2UATWJG0CO03Q9AL3HUJMJNIK1VB2LTERNXOIG016LTMLA2O2ZWCR5F3EN1WG9YZQ4NUYDYAA0MUWO2N6HUO9O86M04JDSTLAJW0PNDQ6XQ7TIDJT8C4JEUTZPU6W78H7V5XM4D0W5OT9DLFIZHGJBI4' where id=80; -update noar ti set v2='ODJUG17MEZYWLG2TVEEKZ9GD8Z35RE87C4HM07SF05KGBJUNCJR31PTR29VWETVYJSZCHPEVGP3JU2IKZRSZMA2M1LPLLTK0HDULTQIJA2UATWJG0CO03Q9AL3HUJMJNIK1VB2LTERNXOIG016LTMLA2O2ZWCR5F3EN1WG9YZQ4NUYDYAA0MUWO2N6HUO9O86M04JDSTLAJW0PNDQ6XQ7TIDJT8C4JEUTZPU6W78H7V5XM4D0W5OT9DLFIZHGJBI4' where id=80; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='SXUVWLXMZXSDJP6JGBYTFAB8B39TO6H7DUQFRZTGQJBPXMWA66FOOP4HFMEWQ4T2WDP2FRRF2HUHEOYZDQ2XHFSFSSRSXAW0NRL9478791RSMAREXVNVUXCAVIR5UPTJF2V4TT05FYD4K4PBGBZWUMSL0SU21S6C54SY8AO4U74DP7L16NQL1NFNZXEB8B3YAGBN7E97R4BXDAAWIFSLFWDSK1RGI48B3I9RXBR2LQXJL469L29WZRC4XD7GYPW2B' where id=80; -update noar ti set v3='SXUVWLXMZXSDJP6JGBYTFAB8B39TO6H7DUQFRZTGQJBPXMWA66FOOP4HFMEWQ4T2WDP2FRRF2HUHEOYZDQ2XHFSFSSRSXAW0NRL9478791RSMAREXVNVUXCAVIR5UPTJF2V4TT05FYD4K4PBGBZWUMSL0SU21S6C54SY8AO4U74DP7L16NQL1NFNZXEB8B3YAGBN7E97R4BXDAAWIFSLFWDSK1RGI48B3I9RXBR2LQXJL469L29WZRC4XD7GYPW2B' where id=80; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='AMLT048K0KR7Q5L8C2BYU1BNGZ3081ZJOGPUCL9DD8XS7V3DVMJE6C47MLFE8SWHZLEEV7E2S6Z9FOP1FH61NLUU6463OUAWB0WF6JZWM3DNNSUHNQ6WNGB7RO96VRSS2GDYIH7HVKEM090TNV7VSBBQ0K7I6OHNSBDJKCV4E30NI4UUV978CCWKCXL49EL197ZZJSTFZHP05GGDPKXCMSHY91LR2VJYGPBD4K0W8U12Y1QHXAPB73UTZG662KSKO' where id=81; -update noar ti set v0='AMLT048K0KR7Q5L8C2BYU1BNGZ3081ZJOGPUCL9DD8XS7V3DVMJE6C47MLFE8SWHZLEEV7E2S6Z9FOP1FH61NLUU6463OUAWB0WF6JZWM3DNNSUHNQ6WNGB7RO96VRSS2GDYIH7HVKEM090TNV7VSBBQ0K7I6OHNSBDJKCV4E30NI4UUV978CCWKCXL49EL197ZZJSTFZHP05GGDPKXCMSHY91LR2VJYGPBD4K0W8U12Y1QHXAPB73UTZG662KSKO' where id=81; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='V6IOC4DMKHUVG4T0VWRVYAYWG7STCVEZEPZWMTE0HIFTR7YBGR8BUY4E8ZSPYVVACFN9MSZZ8LN5Q5FRG8KSNVH8Z32P9SCJSUUHKCZPYC1DPC0ERIZDXOL2NWR1VOLBY688G9I6NI71BQHEGYENHP2F3C0W3C24GUYF6UE26TF64I9KY6HQ0UYBCD9JUTV934RJ13CEEIMUANYVDKKWKO353XW8U3F6ZJCBHOCZXBMH98KNKBZC8R41FOACHC2OG' where id=81; -update noar ti set v1='V6IOC4DMKHUVG4T0VWRVYAYWG7STCVEZEPZWMTE0HIFTR7YBGR8BUY4E8ZSPYVVACFN9MSZZ8LN5Q5FRG8KSNVH8Z32P9SCJSUUHKCZPYC1DPC0ERIZDXOL2NWR1VOLBY688G9I6NI71BQHEGYENHP2F3C0W3C24GUYF6UE26TF64I9KY6HQ0UYBCD9JUTV934RJ13CEEIMUANYVDKKWKO353XW8U3F6ZJCBHOCZXBMH98KNKBZC8R41FOACHC2OG' where id=81; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='YNK9KKE2ATAVT3RSUJ5QXUGS0GEAF1SITNX07D5LO24E5O2XY3FIJ0FVHVRA9U7WLF2Z8JZ6FWRX94G8SLMD3XB87YGCD1YXBWJN8R6Y8M4HODECUZG33JHLKANPH0ZY4AZSHL8VNG7R4XDJGIX6ZECZDWJ7XB1UPLTV1NJUCIWY78SLBQLKF9TDJZVJ2KQACAGYLKN3PX0FYV8VRKBRL2SU7TXOHRAY6BDZUQ492KETRCET7VCEUM1YU5B630TLQ' where id=81; -update noar ti set v2='YNK9KKE2ATAVT3RSUJ5QXUGS0GEAF1SITNX07D5LO24E5O2XY3FIJ0FVHVRA9U7WLF2Z8JZ6FWRX94G8SLMD3XB87YGCD1YXBWJN8R6Y8M4HODECUZG33JHLKANPH0ZY4AZSHL8VNG7R4XDJGIX6ZECZDWJ7XB1UPLTV1NJUCIWY78SLBQLKF9TDJZVJ2KQACAGYLKN3PX0FYV8VRKBRL2SU7TXOHRAY6BDZUQ492KETRCET7VCEUM1YU5B630TLQ' where id=81; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='9NHLMYS4OLQ6BJF5YP5O2CANJ8NBUVY3ZA3JJ95EK08YB4DWWS0ATU7E9XWQFF6P9RL6K10ZNYYIU8UEE5ULOX7D5Y6XXYHZU6UFE5BJEZMMBTBIB7VJ8A3YRM4IE8BX7C90M4ZX5S8148M8277P68FDZKW8YLUOE9SN5AJORM655P99TYHD8E7N7VMZKNGCCNX3K6S0G7ZH1RMK2ZMY8JCDUWV5N0UGXWAHWCL1X78H9OC41LU0GT5EI4IMEUMG1' where id=81; -update noar ti set v3='9NHLMYS4OLQ6BJF5YP5O2CANJ8NBUVY3ZA3JJ95EK08YB4DWWS0ATU7E9XWQFF6P9RL6K10ZNYYIU8UEE5ULOX7D5Y6XXYHZU6UFE5BJEZMMBTBIB7VJ8A3YRM4IE8BX7C90M4ZX5S8148M8277P68FDZKW8YLUOE9SN5AJORM655P99TYHD8E7N7VMZKNGCCNX3K6S0G7ZH1RMK2ZMY8JCDUWV5N0UGXWAHWCL1X78H9OC41LU0GT5EI4IMEUMG1' where id=81; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='DOFCX4P9HYBM8C1ZX6D1AS61K97GR9JFIU2OVM8NH2LKE9ZTZ19RP8KN9I6LYBV8H6KWXETTROSGU32JY0LUC7MOF1N7FWDZF6IIUNABG33LSB8G40OMNMUI9O9QW6A957TFVICO1ZU07HKCSX1N3052GRMTDOB6KZHUVNKKTOQL4V6TC9RFK87HJP64L7SRRBMDHABRI75KAI7CC874N5X8R343ZKQURXTJ30ISRHG9GP9KEHLV7XOT1YHPSUBUP' where id=82; -update noar ti set v0='DOFCX4P9HYBM8C1ZX6D1AS61K97GR9JFIU2OVM8NH2LKE9ZTZ19RP8KN9I6LYBV8H6KWXETTROSGU32JY0LUC7MOF1N7FWDZF6IIUNABG33LSB8G40OMNMUI9O9QW6A957TFVICO1ZU07HKCSX1N3052GRMTDOB6KZHUVNKKTOQL4V6TC9RFK87HJP64L7SRRBMDHABRI75KAI7CC874N5X8R343ZKQURXTJ30ISRHG9GP9KEHLV7XOT1YHPSUBUP' where id=82; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='P951KZJ7IBMVZ5FB6QOSCN1PJO04B2515L6CHATG9DBDXL97UIY6S8K9JVAN3JFZG8FC1XNDNSR8KDGWY8XOFIY0RI5Y7MI8XVHUXWGT33I0X2PWPAFG9XXZXC1YMHMH75Y9SN8C7NOED28NDG95JGZDRUSWER42KOVCXBXMIR1586CXTRUUR5AMTB6YYXY8876VZ4TSZPILMZHKBYAMC8AJPVG12FYKTBM7VTTNLH5ITX4B5F55YQHHR3D797DU0' where id=82; -update noar ti set v1='P951KZJ7IBMVZ5FB6QOSCN1PJO04B2515L6CHATG9DBDXL97UIY6S8K9JVAN3JFZG8FC1XNDNSR8KDGWY8XOFIY0RI5Y7MI8XVHUXWGT33I0X2PWPAFG9XXZXC1YMHMH75Y9SN8C7NOED28NDG95JGZDRUSWER42KOVCXBXMIR1586CXTRUUR5AMTB6YYXY8876VZ4TSZPILMZHKBYAMC8AJPVG12FYKTBM7VTTNLH5ITX4B5F55YQHHR3D797DU0' where id=82; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='JUZG3XE2ETQ2HU2T1T20X3TB7O2H2SL4375I810IQ4DBZHNNP8AK7H5970SWXTNK2PRBZF3PRV1KT8771G7QST9F29PDK3RK6C6NGV0WKW3FBT6D9DGKNPZWJ5GCZFHJSRV0X4VOIKVS8A40D8BWZN4SPDE32VFBCJ052NJ4TZMF9SDNL0SGNX8MUPIBCLTM4UUMI7XZ2QTPYN10TLI8OJHKE0XUU3J2X6WD0ZMW5TPWJQG41OZMWNDCOFQ7EYPXG' where id=82; -update noar ti set v2='JUZG3XE2ETQ2HU2T1T20X3TB7O2H2SL4375I810IQ4DBZHNNP8AK7H5970SWXTNK2PRBZF3PRV1KT8771G7QST9F29PDK3RK6C6NGV0WKW3FBT6D9DGKNPZWJ5GCZFHJSRV0X4VOIKVS8A40D8BWZN4SPDE32VFBCJ052NJ4TZMF9SDNL0SGNX8MUPIBCLTM4UUMI7XZ2QTPYN10TLI8OJHKE0XUU3J2X6WD0ZMW5TPWJQG41OZMWNDCOFQ7EYPXG' where id=82; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='YP41PXNDKYD7BZMXXC6ATY92DIBXGKOES918KQMD2P44FFMWJVYIZAD00SWHN2SRF160YOA6HBB1HNIOC8ZD4VFRDJA4E4WQS0P49N8MGJI73BGZVR2Q8EG8SVXGVY49SCL40E9LE7BN7BT0NDIMFINT63SKSU84QAQOLX3UKZIYTLO8KC1YE1O3TO8277J92DLGVP8P7AMQ6O64PYGIIDVLW39YZX0YPIQNR88561W2FKW8PL7HRDQOLGOKUSM6S' where id=82; -update noar ti set v3='YP41PXNDKYD7BZMXXC6ATY92DIBXGKOES918KQMD2P44FFMWJVYIZAD00SWHN2SRF160YOA6HBB1HNIOC8ZD4VFRDJA4E4WQS0P49N8MGJI73BGZVR2Q8EG8SVXGVY49SCL40E9LE7BN7BT0NDIMFINT63SKSU84QAQOLX3UKZIYTLO8KC1YE1O3TO8277J92DLGVP8P7AMQ6O64PYGIIDVLW39YZX0YPIQNR88561W2FKW8PL7HRDQOLGOKUSM6S' where id=82; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='0FCLZOQDMCW8E1R4GHV75SWZRAFRXSD2RG8BDUOOLK6AXBIJP6SBYL6D9L6AK9R646ZVD6Q4NWQR2VO1L7BT6WU9WIRBYMOIJ53SN4BZV0Y3YDT7XESFLFBJQ4K262P0XMJMYBSEWQEMGJEOJS9Q0YO31STLYJGYABDGDTLP5TCO87XKHGLOVEPB1YW4CEVYC7TJ4XR23TK0ABQB3R2QXPDN9THBV1ZM2X7SG4KM5H1L1SS25KM5D8OTIL3BH0GKT' where id=83; -update noar ti set v0='0FCLZOQDMCW8E1R4GHV75SWZRAFRXSD2RG8BDUOOLK6AXBIJP6SBYL6D9L6AK9R646ZVD6Q4NWQR2VO1L7BT6WU9WIRBYMOIJ53SN4BZV0Y3YDT7XESFLFBJQ4K262P0XMJMYBSEWQEMGJEOJS9Q0YO31STLYJGYABDGDTLP5TCO87XKHGLOVEPB1YW4CEVYC7TJ4XR23TK0ABQB3R2QXPDN9THBV1ZM2X7SG4KM5H1L1SS25KM5D8OTIL3BH0GKT' where id=83; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='6IFMEMMDPF4GHEWAN2USB2WH4XHP17EXAQFQ63ETCBA7TSZZ0H1WHD4J53W7WMZXXHGGJVKCWACCLOXM380GI8IE9T60MF7T5FQVWYYU22WU9UFZOB4OBIRC74LMIOSOM8FRTKTWTOA2OKPPEV3534SGVZT58A5W1KIXVFP0SLQRGZXLB8XA8F33EXQ04R6W4ZZH14PKQ7PDEOXBGE8CIVSU1U3BZ56Q07UDF0YYKE9Z4KJHH7451XC1WYS06B82I' where id=83; -update noar ti set v1='6IFMEMMDPF4GHEWAN2USB2WH4XHP17EXAQFQ63ETCBA7TSZZ0H1WHD4J53W7WMZXXHGGJVKCWACCLOXM380GI8IE9T60MF7T5FQVWYYU22WU9UFZOB4OBIRC74LMIOSOM8FRTKTWTOA2OKPPEV3534SGVZT58A5W1KIXVFP0SLQRGZXLB8XA8F33EXQ04R6W4ZZH14PKQ7PDEOXBGE8CIVSU1U3BZ56Q07UDF0YYKE9Z4KJHH7451XC1WYS06B82I' where id=83; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='MKRVT6JAIFQOWYG4D7L4M36HDUP5438X4HPFGCRTPCIMMXIP4VMFDVWL8NV4LCMZCD2NG09RM0U63UXBSHGY73MO142C4X0O499TQ9TSXEMDYVI1UN4F9QX787NROBJIH9KR0A2IJVOODSZD5Q3137O48N4TUUFWCH5W5YUJPNSZJ282GQF094F979CSQ72TCQOJ05JED1Q6WIGFTBPOML7MEJKII9VYJLMU3NXC5C9GODU4WYNGEQ1S0JN5R0G9H' where id=83; -update noar ti set v2='MKRVT6JAIFQOWYG4D7L4M36HDUP5438X4HPFGCRTPCIMMXIP4VMFDVWL8NV4LCMZCD2NG09RM0U63UXBSHGY73MO142C4X0O499TQ9TSXEMDYVI1UN4F9QX787NROBJIH9KR0A2IJVOODSZD5Q3137O48N4TUUFWCH5W5YUJPNSZJ282GQF094F979CSQ72TCQOJ05JED1Q6WIGFTBPOML7MEJKII9VYJLMU3NXC5C9GODU4WYNGEQ1S0JN5R0G9H' where id=83; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='6M2KK5N3FS7VS20V3O2P68RZJOU1DQ3KERUSM2ZXHWAHA03JAZGND8X1ETQMVSIHPW8CVEJBXEW69NCTS74P9872EBRDBMJ2WC1EZ6N0V90XCGZU7UAEXYHRN447P03IYAOC14KLHMKLW7HHUQOWWQ3FX34DR9PWIJD0KH135CXS9ZPYDYACJHD0NHM07JDU3AOJWQ6C1S4GQEM86M6BNIAP2LJEM8OSHVDJB2PEWB7BHTSJFBEFOP3OIDG8L4J4C' where id=83; -update noar ti set v3='6M2KK5N3FS7VS20V3O2P68RZJOU1DQ3KERUSM2ZXHWAHA03JAZGND8X1ETQMVSIHPW8CVEJBXEW69NCTS74P9872EBRDBMJ2WC1EZ6N0V90XCGZU7UAEXYHRN447P03IYAOC14KLHMKLW7HHUQOWWQ3FX34DR9PWIJD0KH135CXS9ZPYDYACJHD0NHM07JDU3AOJWQ6C1S4GQEM86M6BNIAP2LJEM8OSHVDJB2PEWB7BHTSJFBEFOP3OIDG8L4J4C' where id=83; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='B25EHGXYV5JOK9HJOHC1W0N00KGR7WXAL3LOS8XP26N6GPDH0J66NF1MFIPTVXB8AMQR92NO7JCU6HM5PIQUMLEKQKOUNTIDI7ILAHUBNDZNA20JX99R5FGQNVMAOBZ7DFMD7UA8OBQ81VXZA1F49M50KURP6WZPWW6C9Q15E2SJFPSM2TSSKTNJKHJJLKI84NDGSITSR4YCKPPPPNGPLZRUPSAIBRD2USLOLGS7L8X9TS35TQP5368KVXF5T4VTL' where id=84; -update noar ti set v0='B25EHGXYV5JOK9HJOHC1W0N00KGR7WXAL3LOS8XP26N6GPDH0J66NF1MFIPTVXB8AMQR92NO7JCU6HM5PIQUMLEKQKOUNTIDI7ILAHUBNDZNA20JX99R5FGQNVMAOBZ7DFMD7UA8OBQ81VXZA1F49M50KURP6WZPWW6C9Q15E2SJFPSM2TSSKTNJKHJJLKI84NDGSITSR4YCKPPPPNGPLZRUPSAIBRD2USLOLGS7L8X9TS35TQP5368KVXF5T4VTL' where id=84; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='TWJGKDFNMYNGMY7H75PIGUTMCPGM4CZMVPTKBFYTZ3B11NUCJ3TSZ1ZONHZ4V561J4SIOWAHIQZY8HRBVIMXXYVQMMF32Q1NIPC0V7DDUJYY7JZSLQFVQLPDBSDH4VT08XOXWZE6OV55ZFK2BMP63G8N2DMHZ6OHTLETFQYVED2UNIZ6E2MP1N4NR439AP6QTWF4PFZDFBIST93JIZRXC3RYF44VPGPKPZTY3DT115M8N9NVCW1FPUJE1WI59IY4O' where id=84; -update noar ti set v1='TWJGKDFNMYNGMY7H75PIGUTMCPGM4CZMVPTKBFYTZ3B11NUCJ3TSZ1ZONHZ4V561J4SIOWAHIQZY8HRBVIMXXYVQMMF32Q1NIPC0V7DDUJYY7JZSLQFVQLPDBSDH4VT08XOXWZE6OV55ZFK2BMP63G8N2DMHZ6OHTLETFQYVED2UNIZ6E2MP1N4NR439AP6QTWF4PFZDFBIST93JIZRXC3RYF44VPGPKPZTY3DT115M8N9NVCW1FPUJE1WI59IY4O' where id=84; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='SJOWZC3K6H34AAX7NEJPNQAINLA16GL0XPUGWWXEU6W35MV4VMLG5I5XY98ZO8KORGXMSP2XAZLAY8DF12D93TZQCZROGC2FGH6CXA7KTJ69HHW4P4MT43IY8H5U73Z0JOTK612SPYERDYXZ74BDLESGGRNIY1XTE220RMIDJ6TGBTYSFC263J4BE0GFUKNTOYBE1A78NPECPFX9LYSKCO2KPJ276992T6HVM3P7UQ8VIA8A3DI10RR4NB4LOUKYJ' where id=84; -update noar ti set v2='SJOWZC3K6H34AAX7NEJPNQAINLA16GL0XPUGWWXEU6W35MV4VMLG5I5XY98ZO8KORGXMSP2XAZLAY8DF12D93TZQCZROGC2FGH6CXA7KTJ69HHW4P4MT43IY8H5U73Z0JOTK612SPYERDYXZ74BDLESGGRNIY1XTE220RMIDJ6TGBTYSFC263J4BE0GFUKNTOYBE1A78NPECPFX9LYSKCO2KPJ276992T6HVM3P7UQ8VIA8A3DI10RR4NB4LOUKYJ' where id=84; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='SOCL23PHZJK56QAB7Z6395PU6EP6M6AKKPJQUCO9LP0IV0XH6CEDV8BXLZ38FBHVYIMBDLR0WLIGSJHAH3OTYWEMHRV64X5NHAH9EZ0J5MIUVK8T1BDBYU94LX0AAF3UFBNV0IP9WIT8991OD3ZBUTBQPI27GMOFUGS1QL59N5MKI0ONF7ZEAYO5T0ILEYLVPX1U7I2GYF1JEED33HQCRQ9YPJUWHWP9NGLTBF3FFKR8RZD64DYL4R0M52GWZQOVY' where id=84; -update noar ti set v3='SOCL23PHZJK56QAB7Z6395PU6EP6M6AKKPJQUCO9LP0IV0XH6CEDV8BXLZ38FBHVYIMBDLR0WLIGSJHAH3OTYWEMHRV64X5NHAH9EZ0J5MIUVK8T1BDBYU94LX0AAF3UFBNV0IP9WIT8991OD3ZBUTBQPI27GMOFUGS1QL59N5MKI0ONF7ZEAYO5T0ILEYLVPX1U7I2GYF1JEED33HQCRQ9YPJUWHWP9NGLTBF3FFKR8RZD64DYL4R0M52GWZQOVY' where id=84; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='P28JOIN7NYDCQP380JPX31M167CFI19Y9QQNA7LEDB4OCVDS93H6QINC4MPPE6MMJ7Y4P1KV3VSYU496XDD6D6TZZM2S216R7A2VUES2QH9GM3861AN1Q2J9FBQF9LVV81GVHT7QCRC3G8FP6L0OQJQSLB6H434MHEYW56NJ6H8YRUGKIQ0D9EBHM0K29PC6RG8JMMRW3C95DYUURIXNYYM0LAARQ2GTXUWNFH3S2LNX1ST0ZUU77RR3OSMZBIPJC' where id=85; -update noar ti set v0='P28JOIN7NYDCQP380JPX31M167CFI19Y9QQNA7LEDB4OCVDS93H6QINC4MPPE6MMJ7Y4P1KV3VSYU496XDD6D6TZZM2S216R7A2VUES2QH9GM3861AN1Q2J9FBQF9LVV81GVHT7QCRC3G8FP6L0OQJQSLB6H434MHEYW56NJ6H8YRUGKIQ0D9EBHM0K29PC6RG8JMMRW3C95DYUURIXNYYM0LAARQ2GTXUWNFH3S2LNX1ST0ZUU77RR3OSMZBIPJC' where id=85; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='BOWLIV9HON29C29AWYSNPSN5YW8RZCDTV2NWTX9BQNHOL71SL6W2FI12LUYAGLIIYAIQ53UFMMB8ZL8AM88OGWHAFCWKM1CAXMB6CMJ33U3YOVKQKR45D356GN3TLOTJJQIR5T50BEQQVCEQ0WQKA18ZWCWQWW6M04MSTY85KJOO46LS891KU89TYB4SDVDNJJNR83LS7EPBYAI3WLFFBVOIXN7SUPEJMB4C96XTH9VZ20MOFE50EGPCPJTID024D' where id=85; -update noar ti set v1='BOWLIV9HON29C29AWYSNPSN5YW8RZCDTV2NWTX9BQNHOL71SL6W2FI12LUYAGLIIYAIQ53UFMMB8ZL8AM88OGWHAFCWKM1CAXMB6CMJ33U3YOVKQKR45D356GN3TLOTJJQIR5T50BEQQVCEQ0WQKA18ZWCWQWW6M04MSTY85KJOO46LS891KU89TYB4SDVDNJJNR83LS7EPBYAI3WLFFBVOIXN7SUPEJMB4C96XTH9VZ20MOFE50EGPCPJTID024D' where id=85; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='SOUR5AWU95987LA1BKJSKXN6LQCGBTRMTTDTWEFAGSE9SPIUJHTYMX83MVKE4GR61YQ2VZ9FCF7U5Q8Y4Q7363WBRAHGMSUWNVIJMXD5LGNWHKQSWUC37VK9B4FGTCDLQ000NOZLVE6D5K1OR31K271BLNDSPV2MINO0KGJUYG7X7OYJI3MCO7OPMUYUW4BQ609BTX86LNPBWWPX9L4P2PB2HINDX4EVNH4Y6DW5ADFZJ265SUNFL6LHPNS2J7852' where id=85; -update noar ti set v2='SOUR5AWU95987LA1BKJSKXN6LQCGBTRMTTDTWEFAGSE9SPIUJHTYMX83MVKE4GR61YQ2VZ9FCF7U5Q8Y4Q7363WBRAHGMSUWNVIJMXD5LGNWHKQSWUC37VK9B4FGTCDLQ000NOZLVE6D5K1OR31K271BLNDSPV2MINO0KGJUYG7X7OYJI3MCO7OPMUYUW4BQ609BTX86LNPBWWPX9L4P2PB2HINDX4EVNH4Y6DW5ADFZJ265SUNFL6LHPNS2J7852' where id=85; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='OFT95IE0A713JR984C12GPELKFJXHFK4C9FH293BU8BTCVTP2USR6Q1XIVV2U5CIBVYPK6CYMLCFZKWGSO6QTL7P6XERZK5YLHQSLERKR488COK39IF97LC5V1TAEJB30EUM2S7UIP4UNZUC0C9FT5SE6JJZ881CSB7I654KEBIVM6JDI833Z6MQ62WDQIWJU6WSG9SNSAYN0SRCPDAE4TFWBXTV1P0T1CDH94FRUUYYG6PTMSMNXP2LIQPNHI6AX' where id=85; -update noar ti set v3='OFT95IE0A713JR984C12GPELKFJXHFK4C9FH293BU8BTCVTP2USR6Q1XIVV2U5CIBVYPK6CYMLCFZKWGSO6QTL7P6XERZK5YLHQSLERKR488COK39IF97LC5V1TAEJB30EUM2S7UIP4UNZUC0C9FT5SE6JJZ881CSB7I654KEBIVM6JDI833Z6MQ62WDQIWJU6WSG9SNSAYN0SRCPDAE4TFWBXTV1P0T1CDH94FRUUYYG6PTMSMNXP2LIQPNHI6AX' where id=85; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='7UELP5C694PXYWVGALCEANW32QF7VTKTW6JVU45W8Q84U56ZDT5ZXVA0SXC451E1YDVRHZ6G1MYAX80KDFB9KM6PYEC4IZ6AH0W4HQZE9AMUP84OFRY7BISUIUJX4NUFULGOQMBRRT3M2JEK5J166BGAVF0CH9EF29QLQGO0TD1Z57JG9R4SAA9X5O5A75RQPO0TLWP3RSFP6WMWW7T0PNF5FW54N1DUFMHOPZ8C7VBA1W7XEN9SRHZX01IPO0SIY' where id=86; -update noar ti set v0='7UELP5C694PXYWVGALCEANW32QF7VTKTW6JVU45W8Q84U56ZDT5ZXVA0SXC451E1YDVRHZ6G1MYAX80KDFB9KM6PYEC4IZ6AH0W4HQZE9AMUP84OFRY7BISUIUJX4NUFULGOQMBRRT3M2JEK5J166BGAVF0CH9EF29QLQGO0TD1Z57JG9R4SAA9X5O5A75RQPO0TLWP3RSFP6WMWW7T0PNF5FW54N1DUFMHOPZ8C7VBA1W7XEN9SRHZX01IPO0SIY' where id=86; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='28TC3K6P40MD5AU2WQ6SVT0RRJB3OI687V90NGA2C24IGDWMV8FQRXFSROJT88HTX2DD4147FZMXT4UQIDLX6SNZOWGTWYEXY1X4DLI98UER1L5VYEPPPTBD5V5W31VER1G11JR2OZEKIWB9KC36ZE2HB64NF7ADH4W5FXQ0USR0N2O20P7M09V6EMQF9UTBEE30I8Y5E1DA56BZGWFI7M6B0V95K8C4KZJXAQ850B364JTUQ43ZGLYHEDWTO6D5A' where id=86; -update noar ti set v1='28TC3K6P40MD5AU2WQ6SVT0RRJB3OI687V90NGA2C24IGDWMV8FQRXFSROJT88HTX2DD4147FZMXT4UQIDLX6SNZOWGTWYEXY1X4DLI98UER1L5VYEPPPTBD5V5W31VER1G11JR2OZEKIWB9KC36ZE2HB64NF7ADH4W5FXQ0USR0N2O20P7M09V6EMQF9UTBEE30I8Y5E1DA56BZGWFI7M6B0V95K8C4KZJXAQ850B364JTUQ43ZGLYHEDWTO6D5A' where id=86; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='APW7X4NNHGR8E8JKFQEXT6MV6TFPTKBY5BQ4ZAN5TWLV5JV2Q66U00ICNQHCBQY2SQ0LMS7NV4GWKGH5QNESTH2V9JNVCM9D2Z2J5QC2O39S8ME660EJ6E1A1GX04MSTX4N3CWK5L3XXOFOW236D1MODSB9UEESLROZO2XXC1W9WEZ0DVUQW3HV8OO7EHCKPHSUY9OS61US3AXATC5K163F4WRNJ7QOI7FTGXGI8MLUH0ZHRN1KR1OTEWWBB6B43M' where id=86; -update noar ti set v2='APW7X4NNHGR8E8JKFQEXT6MV6TFPTKBY5BQ4ZAN5TWLV5JV2Q66U00ICNQHCBQY2SQ0LMS7NV4GWKGH5QNESTH2V9JNVCM9D2Z2J5QC2O39S8ME660EJ6E1A1GX04MSTX4N3CWK5L3XXOFOW236D1MODSB9UEESLROZO2XXC1W9WEZ0DVUQW3HV8OO7EHCKPHSUY9OS61US3AXATC5K163F4WRNJ7QOI7FTGXGI8MLUH0ZHRN1KR1OTEWWBB6B43M' where id=86; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='TUUK19F8KL53VN9J1OPP65CU9ISFI6910WXSOY1Q1R9TD8WKS2NYADG92QHDP3H30DMWN316A0E3YV3FVUJ7FHWGCQX5KBMFHX2M9XBF2PM68E90AXQCYJX8ISMVQIPGV1WNKJX9VQ8SD0QLUIMUQ8DKHC4W4H33FTBLCAUBHIHAJSUM4HJF31VT7KVHD46II6FE641H9IMDATO61QIZZ3193Y8NI74NBI8PU84B6WBU0M474BLVN37S3SVDXAK2K' where id=86; -update noar ti set v3='TUUK19F8KL53VN9J1OPP65CU9ISFI6910WXSOY1Q1R9TD8WKS2NYADG92QHDP3H30DMWN316A0E3YV3FVUJ7FHWGCQX5KBMFHX2M9XBF2PM68E90AXQCYJX8ISMVQIPGV1WNKJX9VQ8SD0QLUIMUQ8DKHC4W4H33FTBLCAUBHIHAJSUM4HJF31VT7KVHD46II6FE641H9IMDATO61QIZZ3193Y8NI74NBI8PU84B6WBU0M474BLVN37S3SVDXAK2K' where id=86; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='W924NAW8RD4RSFVX8J7UOLLJTBENRK0M2W3QCMSGD27WIYXHFUAR98KP309MQVTM89F5SDALA915L5QN1QPV8N18G21D64JL1A0ESHTFC2A3AY2UZ86JXTJFDRILIK55KZMZHUCFQUHUSSO8FKMKN2HBXT6YPKYNZ2Y3VBGN8ON490MHVR8PF2OPSNXWLN6MNAWDNE8TWXIY3S38FRJO53V5WESJX2APQBQS2PVYSZ1AA2RYF49TU6V3IMV7CMP7K' where id=87; -update noar ti set v0='W924NAW8RD4RSFVX8J7UOLLJTBENRK0M2W3QCMSGD27WIYXHFUAR98KP309MQVTM89F5SDALA915L5QN1QPV8N18G21D64JL1A0ESHTFC2A3AY2UZ86JXTJFDRILIK55KZMZHUCFQUHUSSO8FKMKN2HBXT6YPKYNZ2Y3VBGN8ON490MHVR8PF2OPSNXWLN6MNAWDNE8TWXIY3S38FRJO53V5WESJX2APQBQS2PVYSZ1AA2RYF49TU6V3IMV7CMP7K' where id=87; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='1WVKVB3U3UUIH5H5PQC1QY6AMRILRTZMDDH1I2DA6TTPEFLY0TRLWJ4TPO7LWIMJZPPO3NF0TV8FAK8C0EQFUYS33H9VQJ5AWOO8RQ3J9VG0ZKOTDC2Y0QBKFVB673WGK3KNLDAIJ0C3X4B39ZV6N8ZJVL4QNJ9QKPAE1DLHK51ADHMVP9Z5BV3GZ7TDBQIRJ4IXF5RAUL5G0XSMO2GNRFRH8GB9G6EBA3SJALT4H888Q271V7F80BH8TC3B8QTTU' where id=87; -update noar ti set v1='1WVKVB3U3UUIH5H5PQC1QY6AMRILRTZMDDH1I2DA6TTPEFLY0TRLWJ4TPO7LWIMJZPPO3NF0TV8FAK8C0EQFUYS33H9VQJ5AWOO8RQ3J9VG0ZKOTDC2Y0QBKFVB673WGK3KNLDAIJ0C3X4B39ZV6N8ZJVL4QNJ9QKPAE1DLHK51ADHMVP9Z5BV3GZ7TDBQIRJ4IXF5RAUL5G0XSMO2GNRFRH8GB9G6EBA3SJALT4H888Q271V7F80BH8TC3B8QTTU' where id=87; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='X8CTNJVJXUM3AEPJEPAVUIZ69FDL6YGCIUEYOY3E2L8NAWP6OOXJWHWNM5E0DVD0L8KEOS2F5FOHT4C42ZQ8JJBAC1V4C8H0GNVD81XU0A9LYBWLK948QQLVLJ89XYQ5RNLSWVHJ3460TKYUTWEHF9AA9OAZ8WTBCSYNQEX8PO1AGWXLLPKPVI4DIO2VTQNDT5DU158Q2JXM5CBEP7RGHLPA3JSU77AN5VMIJ655RZWVTQ10GWH5UDGB2FX7KCS06' where id=87; -update noar ti set v2='X8CTNJVJXUM3AEPJEPAVUIZ69FDL6YGCIUEYOY3E2L8NAWP6OOXJWHWNM5E0DVD0L8KEOS2F5FOHT4C42ZQ8JJBAC1V4C8H0GNVD81XU0A9LYBWLK948QQLVLJ89XYQ5RNLSWVHJ3460TKYUTWEHF9AA9OAZ8WTBCSYNQEX8PO1AGWXLLPKPVI4DIO2VTQNDT5DU158Q2JXM5CBEP7RGHLPA3JSU77AN5VMIJ655RZWVTQ10GWH5UDGB2FX7KCS06' where id=87; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='20WIS5WIPC05JWKY4TIGBXUBJRX6GT8HTOQSAHCKY6PHOQEF4230DZWMTJ342ACJRBXLKCHNTT0ZSXVPEGS33RB8ISHYQKZKAQ1TM4U9448OZ2VML6HH9Q105H1722V2OU80KWAUHNUYZXS5XUSJXKX4P56ALCJ35A9R58TYXFKIMNGF76MKIA5PRKRNN8PG7E3RLST2ROQWPS2KDU21CPDNC0BW4566Z5TXE26W7W2K6HHW8K8B63GZG3FCQTDT8' where id=87; -update noar ti set v3='20WIS5WIPC05JWKY4TIGBXUBJRX6GT8HTOQSAHCKY6PHOQEF4230DZWMTJ342ACJRBXLKCHNTT0ZSXVPEGS33RB8ISHYQKZKAQ1TM4U9448OZ2VML6HH9Q105H1722V2OU80KWAUHNUYZXS5XUSJXKX4P56ALCJ35A9R58TYXFKIMNGF76MKIA5PRKRNN8PG7E3RLST2ROQWPS2KDU21CPDNC0BW4566Z5TXE26W7W2K6HHW8K8B63GZG3FCQTDT8' where id=87; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='U97O0SL9JV96D6A2D39Z50YV8SYRT1B4SZB6UTU6QDH3BFUUQJJAWG30Q58GIGK7COKJEDE0K7ILLCYFI7I0T1KHNGFVDR2IXN8HGVAPZ4WGQCZZPVLFNYHSG5MRCUWTVX2M5C12ZWJ7VBDX4X0V4J7Z3M0WFKPA205P0H2VKGDZJT7ZJYH5YNUVGITKUCZFFWCTC4HNT7XWOHM40BHLJ2G35JBX53VBI39IY2G9AAR2BNGS5A1U9HPCE2ATSULB4' where id=88; -update noar ti set v0='U97O0SL9JV96D6A2D39Z50YV8SYRT1B4SZB6UTU6QDH3BFUUQJJAWG30Q58GIGK7COKJEDE0K7ILLCYFI7I0T1KHNGFVDR2IXN8HGVAPZ4WGQCZZPVLFNYHSG5MRCUWTVX2M5C12ZWJ7VBDX4X0V4J7Z3M0WFKPA205P0H2VKGDZJT7ZJYH5YNUVGITKUCZFFWCTC4HNT7XWOHM40BHLJ2G35JBX53VBI39IY2G9AAR2BNGS5A1U9HPCE2ATSULB4' where id=88; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='WTSXJQ67WTTZ1DNKE9X15IDIVFJSYIQIQ4R9BHDCBJ2XBZBSGRNY9O73WU39ATPTMWHKMDCFQXNQ63FZR2SV1J4ASWXFYTVAV12K3U7RQZ6N1UGG2XFPWJ3VSLKZLRUXS9SS2P8247CQBGZGMCIY9LZIP2RGPNP4XRNXAEH8BST21MBC1CDEZ0MMTEX4PTKUGQOZCJ7JVLI3Y2BI7YVHW4NUDZC5UMMDHJV5EIY3A6SJEBL73J2YZDZA266C2S0JV' where id=88; -update noar ti set v1='WTSXJQ67WTTZ1DNKE9X15IDIVFJSYIQIQ4R9BHDCBJ2XBZBSGRNY9O73WU39ATPTMWHKMDCFQXNQ63FZR2SV1J4ASWXFYTVAV12K3U7RQZ6N1UGG2XFPWJ3VSLKZLRUXS9SS2P8247CQBGZGMCIY9LZIP2RGPNP4XRNXAEH8BST21MBC1CDEZ0MMTEX4PTKUGQOZCJ7JVLI3Y2BI7YVHW4NUDZC5UMMDHJV5EIY3A6SJEBL73J2YZDZA266C2S0JV' where id=88; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='Z953VOAWBDWIZH408RQYSSZ28SSTHEY58I2FRVJVGMO42KTAJJSL3UDHDGN42CLN3BTJ8GV0KUJCBWZE6XIPDPT2D33C0DHO4U7K8QL4Z1A6AEKTU7P0UU18AZXD9PTLCKRHY1WRIRZUI6W0QXV5G7X6RHMQERD25LVP0ZAD39CCBQI9HNFF7FDSBAGI3IS4UO9AS252GKSQU963IQ27JSA8WNU4VH9INY9722MS4HSNBX3VWGZ99VF84RMZ8SCXJ' where id=88; -update noar ti set v2='Z953VOAWBDWIZH408RQYSSZ28SSTHEY58I2FRVJVGMO42KTAJJSL3UDHDGN42CLN3BTJ8GV0KUJCBWZE6XIPDPT2D33C0DHO4U7K8QL4Z1A6AEKTU7P0UU18AZXD9PTLCKRHY1WRIRZUI6W0QXV5G7X6RHMQERD25LVP0ZAD39CCBQI9HNFF7FDSBAGI3IS4UO9AS252GKSQU963IQ27JSA8WNU4VH9INY9722MS4HSNBX3VWGZ99VF84RMZ8SCXJ' where id=88; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='76U1FZRVSCSO9TDC3VM4WUQD2KUGL275IE8GIOX5YROJLZT4YQC5LHSIA224H41HCIG5SSSX6BWWLZIWQJEFMVUTL7K41FLDYWB5QJI3EGOWX9GK1ZI9C0NS30WVLU3EO0EFMQN6VEB8BOJ29Q67QR02V9NLQBUTK8HPA0CVCQE84QQCVTM5OEB1A6KBZLXKYM8J6RNBDAE6K54Z1I6WN0PWMIQFSFM69AF7S4RAQ7P4F8L35N43CKKON42PBA19O' where id=88; -update noar ti set v3='76U1FZRVSCSO9TDC3VM4WUQD2KUGL275IE8GIOX5YROJLZT4YQC5LHSIA224H41HCIG5SSSX6BWWLZIWQJEFMVUTL7K41FLDYWB5QJI3EGOWX9GK1ZI9C0NS30WVLU3EO0EFMQN6VEB8BOJ29Q67QR02V9NLQBUTK8HPA0CVCQE84QQCVTM5OEB1A6KBZLXKYM8J6RNBDAE6K54Z1I6WN0PWMIQFSFM69AF7S4RAQ7P4F8L35N43CKKON42PBA19O' where id=88; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='VCG4HHIMNE2CPDDYNIFZXOPGDUKXTZXRDYLKSCYKGJUGLAOXSY0E4A5IK2FFU9SGNM9LCRXFYN2E78POZVRCFZW86GPF13GTSB143PFYAC6MYSV0T5TZ17PEIJPAL4L8XDAYQSI0UL3NNDAD33ZBVNI4CQ1BIQR5YPMDV1JKBAJKMDH50A7LP74UJ04FYS6SU3G7O1VP7BANSEQPP9NUL2TI98FAE82NTKLDB1IVLKPRMSW2UKW6ZKKZFIVSJD1JB' where id=89; -update noar ti set v0='VCG4HHIMNE2CPDDYNIFZXOPGDUKXTZXRDYLKSCYKGJUGLAOXSY0E4A5IK2FFU9SGNM9LCRXFYN2E78POZVRCFZW86GPF13GTSB143PFYAC6MYSV0T5TZ17PEIJPAL4L8XDAYQSI0UL3NNDAD33ZBVNI4CQ1BIQR5YPMDV1JKBAJKMDH50A7LP74UJ04FYS6SU3G7O1VP7BANSEQPP9NUL2TI98FAE82NTKLDB1IVLKPRMSW2UKW6ZKKZFIVSJD1JB' where id=89; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='WMRA7SFBWL5UHPKDOLUZKFAJZHL4OE4B9LR2FW274ELGV4V8DNWH5HR1EYULNJ02456Z2DIN14LLJ98HKEVCI515VTUJFC5FJCY0L3REYZD4J3D65R4CIW3652M4N2CB1EDC3FKLI4P51I1D82QFGB9L69VBJSBSXQKL2ZZAKQPWHR7LL4BD2TJ9LPN931MNRAJY0ZGGVM6URDMG1DFVMWPNOKD0TXMJ78Y4KWBRNVUVRIGXA2F9ZZK9SIJMBJI6N' where id=89; -update noar ti set v1='WMRA7SFBWL5UHPKDOLUZKFAJZHL4OE4B9LR2FW274ELGV4V8DNWH5HR1EYULNJ02456Z2DIN14LLJ98HKEVCI515VTUJFC5FJCY0L3REYZD4J3D65R4CIW3652M4N2CB1EDC3FKLI4P51I1D82QFGB9L69VBJSBSXQKL2ZZAKQPWHR7LL4BD2TJ9LPN931MNRAJY0ZGGVM6URDMG1DFVMWPNOKD0TXMJ78Y4KWBRNVUVRIGXA2F9ZZK9SIJMBJI6N' where id=89; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='FM64YFV19LCIGG7TPJKDDP32S4HYDTBNLWV8D3J52GB3TGW2GS7710F35S7UC6IA601R9JSHRXEYPPE7WHARTK4KCEWN3IZX7V0ET0X32VCQWTYW1B6U55A53IAERRAMBMQ53F2DKL1615OQMJ0MZRZP32XAUBPP021F29VYPMT070DTCSAZQVK3Z3FVAWNT38MDMJ5G77YSA0XXY1UGCZW80DEPSE7FB2CQ6RXB02QCB7JXVAP4MKVJEFATT5NKE' where id=89; -update noar ti set v2='FM64YFV19LCIGG7TPJKDDP32S4HYDTBNLWV8D3J52GB3TGW2GS7710F35S7UC6IA601R9JSHRXEYPPE7WHARTK4KCEWN3IZX7V0ET0X32VCQWTYW1B6U55A53IAERRAMBMQ53F2DKL1615OQMJ0MZRZP32XAUBPP021F29VYPMT070DTCSAZQVK3Z3FVAWNT38MDMJ5G77YSA0XXY1UGCZW80DEPSE7FB2CQ6RXB02QCB7JXVAP4MKVJEFATT5NKE' where id=89; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='NR44FZDD8CTQKCLZYS3KNY37Q8M0RTL0UOCA74W4NV5ELFTNW3PM2HYCVPNGWAINKBJJ45XTEWDGHM8UJEICLM2URD76FPSPIFE854OPKQ0X2HGVF500X44ZQ09X5X6RRDQVIE0CMCPHSQ0G6E44I71EPKB86D0OXGMMMVC0DY61NKI8Y3GBXAC9OTMWP08RB1G2L00FMDVIEIZ53CW1OI6E6UPSLGIX0K00LBE0B91JPO3B73DR94NBPJQXKIUZY' where id=89; -update noar ti set v3='NR44FZDD8CTQKCLZYS3KNY37Q8M0RTL0UOCA74W4NV5ELFTNW3PM2HYCVPNGWAINKBJJ45XTEWDGHM8UJEICLM2URD76FPSPIFE854OPKQ0X2HGVF500X44ZQ09X5X6RRDQVIE0CMCPHSQ0G6E44I71EPKB86D0OXGMMMVC0DY61NKI8Y3GBXAC9OTMWP08RB1G2L00FMDVIEIZ53CW1OI6E6UPSLGIX0K00LBE0B91JPO3B73DR94NBPJQXKIUZY' where id=89; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='9RA2VTN2QX9RUZT9O8MBOB7YJB6V2EWXH9BPCH2RNVPNQB6B27NLXRMRQ0U4Q71M5EJKYDLX2WGNFLUPEMX3YT3Q5ZCJROMDXARPDALZG741Q63MYR8BBUPJYHU1B97OE93AZE3HUCB5IU8C3TFROVN3LWA20DRYIJY7WY54YNDPF45B59U0OE9O59NDD325P7LJ3WRIS3L49F7QX7JCHUXNDGZ9PACGIBEDOPE0MQ9OETUQN4DDBZRPI5WRDE2HR' where id=90; -update noar ti set v0='9RA2VTN2QX9RUZT9O8MBOB7YJB6V2EWXH9BPCH2RNVPNQB6B27NLXRMRQ0U4Q71M5EJKYDLX2WGNFLUPEMX3YT3Q5ZCJROMDXARPDALZG741Q63MYR8BBUPJYHU1B97OE93AZE3HUCB5IU8C3TFROVN3LWA20DRYIJY7WY54YNDPF45B59U0OE9O59NDD325P7LJ3WRIS3L49F7QX7JCHUXNDGZ9PACGIBEDOPE0MQ9OETUQN4DDBZRPI5WRDE2HR' where id=90; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='H7MXPHCXU68PMAWFC6SU169CQBAWUWUJ1PQOW7W1LXBRHRQGFBWIQ8VC3M7CVLWLSYCSDXTU5VJF03POHY6IT984LBXN5IY33KT1LAVKSD16GZ40AX4IIPBY29LWJSW7OLKID9M6WHWHI2LYMQ4O2DAZJ41L8TNNY9VT3NRP6PBXCOZPF07L9B2VWM8ISOLYN9BA235DWQSZCKON67VC62GM2TD9T9B8U9DCB89CSCS4SR7F0QS3C4EDZ8IRPK3IG' where id=90; -update noar ti set v1='H7MXPHCXU68PMAWFC6SU169CQBAWUWUJ1PQOW7W1LXBRHRQGFBWIQ8VC3M7CVLWLSYCSDXTU5VJF03POHY6IT984LBXN5IY33KT1LAVKSD16GZ40AX4IIPBY29LWJSW7OLKID9M6WHWHI2LYMQ4O2DAZJ41L8TNNY9VT3NRP6PBXCOZPF07L9B2VWM8ISOLYN9BA235DWQSZCKON67VC62GM2TD9T9B8U9DCB89CSCS4SR7F0QS3C4EDZ8IRPK3IG' where id=90; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='BERHOT2VM8OBVA2MPC9HOZDS3I5KAXP2CZFF4AC4N8KF0UZEEH3GE756Y7W8C58U21MXFKUMZNYYS4I88JK8UVZ1KAPR495OUUMKLTYBXTG0WPIKALS09QC2AG5GI7L2GJK1YOPJRWMAQ6I3DUJZ78XRLRL0V8M46NLPAF6Q1SHIOJSALM5WKZ6O70ON8RNTNQAC0OD1GL901U1ZMJKWE7XMETT1J0JBGF0BH9JWVMZBYYAKRWNT5GU8MTRX672OB' where id=90; -update noar ti set v2='BERHOT2VM8OBVA2MPC9HOZDS3I5KAXP2CZFF4AC4N8KF0UZEEH3GE756Y7W8C58U21MXFKUMZNYYS4I88JK8UVZ1KAPR495OUUMKLTYBXTG0WPIKALS09QC2AG5GI7L2GJK1YOPJRWMAQ6I3DUJZ78XRLRL0V8M46NLPAF6Q1SHIOJSALM5WKZ6O70ON8RNTNQAC0OD1GL901U1ZMJKWE7XMETT1J0JBGF0BH9JWVMZBYYAKRWNT5GU8MTRX672OB' where id=90; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='DG0AZ96PWXZ5SVPKJS4BPMAH2EG1HZDDWDQ1ZEDE23289HXTJC8X1ZNYL6YFA7HVULYRQAIYI83B0KJL81ABAKFT4HIJVODY5I93IRMQ4UB5OJD5IUKK3KUZ0AE0WE6DR0DLQOR658LOE4JIJV5MQSME1TN4L0LGXBQP3BIDC51O5E8QO0A7O15Q6M6CH5422SZONJZ22IZULZ1FFMUN7WOGQO5YNSG45ELUXDDPS3PSV9JSXLIKMETZ49EX0ZX0V' where id=90; -update noar ti set v3='DG0AZ96PWXZ5SVPKJS4BPMAH2EG1HZDDWDQ1ZEDE23289HXTJC8X1ZNYL6YFA7HVULYRQAIYI83B0KJL81ABAKFT4HIJVODY5I93IRMQ4UB5OJD5IUKK3KUZ0AE0WE6DR0DLQOR658LOE4JIJV5MQSME1TN4L0LGXBQP3BIDC51O5E8QO0A7O15Q6M6CH5422SZONJZ22IZULZ1FFMUN7WOGQO5YNSG45ELUXDDPS3PSV9JSXLIKMETZ49EX0ZX0V' where id=90; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='BY5VWBEC5OEZECT5LR3XEWZOF0173U98NH3B12LMVHUE46I7IJI7XCT9N19Z15BUYNXL66F9SM3N9B8FBTEBMNGVOB407ZJ4G6L4MDCV9B9MQKH8VSRQKSAZ4WCKJSYHAS4YKWQEYK34SHN50OL3RNZVP8EV597JIZSFJ2SHMJHTL65S4AU7SJGZ9T72JGHK8S2R9M29NDJIC49NIDRWHMYYXFD124QCVB8W8HV8AU2Q3XRFNJWH7XJGJA1483Z5K' where id=91; -update noar ti set v0='BY5VWBEC5OEZECT5LR3XEWZOF0173U98NH3B12LMVHUE46I7IJI7XCT9N19Z15BUYNXL66F9SM3N9B8FBTEBMNGVOB407ZJ4G6L4MDCV9B9MQKH8VSRQKSAZ4WCKJSYHAS4YKWQEYK34SHN50OL3RNZVP8EV597JIZSFJ2SHMJHTL65S4AU7SJGZ9T72JGHK8S2R9M29NDJIC49NIDRWHMYYXFD124QCVB8W8HV8AU2Q3XRFNJWH7XJGJA1483Z5K' where id=91; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='XU9BJBHS59RVNU7W4MZDQKQLKV55OE39Z6AELRZDWS9E3T5TH7S68Y2PCDV9KS9LFJHMD9N1GQ2VRJCMQ6OHEYN16S9CSBHLYMWAINSZEWGE7KFBS8V2LNKJJSFGX0AI4XB4UKVJ4K863NPGUFLAG5EYUTI70VA6XZDNFWFLJ6FU24JT5Y7IUYKDFZIF03JWAD5B6T2EG5NP1W1L5QXF8AHL1MOWLVQVFPR1TRP97E1EIQUPNH5FZRRYH6A8IRX2A' where id=91; -update noar ti set v1='XU9BJBHS59RVNU7W4MZDQKQLKV55OE39Z6AELRZDWS9E3T5TH7S68Y2PCDV9KS9LFJHMD9N1GQ2VRJCMQ6OHEYN16S9CSBHLYMWAINSZEWGE7KFBS8V2LNKJJSFGX0AI4XB4UKVJ4K863NPGUFLAG5EYUTI70VA6XZDNFWFLJ6FU24JT5Y7IUYKDFZIF03JWAD5B6T2EG5NP1W1L5QXF8AHL1MOWLVQVFPR1TRP97E1EIQUPNH5FZRRYH6A8IRX2A' where id=91; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='Y5XLFYPAC8RVPEJ1B66GRC8KRTF5B8QLD2913Z4BUEFT37B5EMZC7YEQEXD6ZS521BEOOOIDPY769L9BNV4UDAW7TNK5XT9ZNA7N1JR80MQ4IYBXT09SLZFZAAMQAX6JQEF11TIP59VP9DJWAIQ11AF7WNU2PSK2YDAPPC597D2T495U0ZKDWMUHHWKP1CHV5FP9CBKCRDYOZ0MCA8KQQRJLWDFQGOJPIGCZK69R0QBNTMZZHRUTBOGXURB18ZD6Z' where id=91; -update noar ti set v2='Y5XLFYPAC8RVPEJ1B66GRC8KRTF5B8QLD2913Z4BUEFT37B5EMZC7YEQEXD6ZS521BEOOOIDPY769L9BNV4UDAW7TNK5XT9ZNA7N1JR80MQ4IYBXT09SLZFZAAMQAX6JQEF11TIP59VP9DJWAIQ11AF7WNU2PSK2YDAPPC597D2T495U0ZKDWMUHHWKP1CHV5FP9CBKCRDYOZ0MCA8KQQRJLWDFQGOJPIGCZK69R0QBNTMZZHRUTBOGXURB18ZD6Z' where id=91; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='OOSZLCXP95N5GMEUKD01RK0TISEK6HY51S9VQFW17ZGTGSM9RKCHTRLY0GLHNUYSYPZSF43BSFUPBLBAF6P5FI714BOQVU15WPB6ELULI8Z7HOWYW2RZ5LK6XTC7RKL8VUZNC13A63C7JKLOZ009VCLQY9QFU1SKLOSMX67SI97VO8YGQ9G36JZGAOK03N0MC8Z2RIR3NV3MNXP5HCDGHY7KFQDE87A7ZSYLH6S5FZH7QEEK725FTYYKBI7JP0T2S' where id=91; -update noar ti set v3='OOSZLCXP95N5GMEUKD01RK0TISEK6HY51S9VQFW17ZGTGSM9RKCHTRLY0GLHNUYSYPZSF43BSFUPBLBAF6P5FI714BOQVU15WPB6ELULI8Z7HOWYW2RZ5LK6XTC7RKL8VUZNC13A63C7JKLOZ009VCLQY9QFU1SKLOSMX67SI97VO8YGQ9G36JZGAOK03N0MC8Z2RIR3NV3MNXP5HCDGHY7KFQDE87A7ZSYLH6S5FZH7QEEK725FTYYKBI7JP0T2S' where id=91; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='SWPRMOJ2CCDN6IZKX7XKJ4R33MA06UVL4F2OEDUUS8W3WBWGZG5PHZZZY25FIUY99CG8T7GWGMJIGN4HOIT502VIAA5JNVXAU4VU1O0IL13A5IDGMO2KRVNNU0DI37QWBXB8SP35Q4921639LJMSJGK0TGGT8GF6MCUP87GCX1ZF2ASSQ5SJVQS9Q25EODTI7N38MOION3AC3XQFNJ9KSGJAA3XGM2REU3DR6YIRXUA3UY4ELKZS115XX1PW8K27Z' where id=92; -update noar ti set v0='SWPRMOJ2CCDN6IZKX7XKJ4R33MA06UVL4F2OEDUUS8W3WBWGZG5PHZZZY25FIUY99CG8T7GWGMJIGN4HOIT502VIAA5JNVXAU4VU1O0IL13A5IDGMO2KRVNNU0DI37QWBXB8SP35Q4921639LJMSJGK0TGGT8GF6MCUP87GCX1ZF2ASSQ5SJVQS9Q25EODTI7N38MOION3AC3XQFNJ9KSGJAA3XGM2REU3DR6YIRXUA3UY4ELKZS115XX1PW8K27Z' where id=92; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='92Q1PA0BZ0WGRWYO3I24IK5J1BUI8C4B98UGK8Y18SOR56EM9FMXCQUQPM8TUHYOE0H4QHRAUR0NIB7LR3YI9ZNDLDKITD9S17T2UCC1KXAOGVLTRCQQQ09N7HZ85M5P6ORP3EAYOIFAUSHNK4DBTA0KDRR5R1Z26H0653EO5DQSKO9VSAMPBEYSY49APBMQ2DXYHOBSWPPBDZ25UF3I4EM9TJCZS0CV49P0PLZ74JR68NV1EGBEOWX5IKS2T8MR8' where id=92; -update noar ti set v1='92Q1PA0BZ0WGRWYO3I24IK5J1BUI8C4B98UGK8Y18SOR56EM9FMXCQUQPM8TUHYOE0H4QHRAUR0NIB7LR3YI9ZNDLDKITD9S17T2UCC1KXAOGVLTRCQQQ09N7HZ85M5P6ORP3EAYOIFAUSHNK4DBTA0KDRR5R1Z26H0653EO5DQSKO9VSAMPBEYSY49APBMQ2DXYHOBSWPPBDZ25UF3I4EM9TJCZS0CV49P0PLZ74JR68NV1EGBEOWX5IKS2T8MR8' where id=92; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='2PLM212TWV9VABPG4RGJEHV3KA8QGKVSN1DXBRUZ3YPH4QJD6L09SO9TCDCU5G7553JEGAA2Z34LO4PZQU522YFSSL09Y22PZG3CISOFTVDDR84Z6ISJ4L59AKNSJ356BEENN4T7RB1Q1MVWA718JV1TAJ1UX61PYL8S8S5IGIT60NR06IAJRQQYNF0IV5LZ8VWQPRMJFZMY6T680466PPFLKUQ8TAP9E0VZUE6GRC3JU2X0ILDZPTZXZ2AG3GLKN' where id=92; -update noar ti set v2='2PLM212TWV9VABPG4RGJEHV3KA8QGKVSN1DXBRUZ3YPH4QJD6L09SO9TCDCU5G7553JEGAA2Z34LO4PZQU522YFSSL09Y22PZG3CISOFTVDDR84Z6ISJ4L59AKNSJ356BEENN4T7RB1Q1MVWA718JV1TAJ1UX61PYL8S8S5IGIT60NR06IAJRQQYNF0IV5LZ8VWQPRMJFZMY6T680466PPFLKUQ8TAP9E0VZUE6GRC3JU2X0ILDZPTZXZ2AG3GLKN' where id=92; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='D79Z78HLHH6AIWWOLDW19K4L4GQ3KUA3DMBZXLZ4HQJVK6YHE0WL9MA9VR2HODFIHBPEQZO7GOWIRNC9FF0PFGUW3ZAZY3ZUHPBTT80WJ9RB31XGUYLALD1TETSPMO12TA29FAWFTW2RGHX1SSWRVA484U7MSY960UCKXQ1YNSVG7YBDU6Z7W5AJU9VIJOV111VRFU3H5MLLGQG6ATAW200IN3JFB9Z60ZNW8ED88K251MILAC5Z6K8RZL4TE99CF' where id=92; -update noar ti set v3='D79Z78HLHH6AIWWOLDW19K4L4GQ3KUA3DMBZXLZ4HQJVK6YHE0WL9MA9VR2HODFIHBPEQZO7GOWIRNC9FF0PFGUW3ZAZY3ZUHPBTT80WJ9RB31XGUYLALD1TETSPMO12TA29FAWFTW2RGHX1SSWRVA484U7MSY960UCKXQ1YNSVG7YBDU6Z7W5AJU9VIJOV111VRFU3H5MLLGQG6ATAW200IN3JFB9Z60ZNW8ED88K251MILAC5Z6K8RZL4TE99CF' where id=92; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='QDZ079CUL8UK2JIJ60XUAT9PIDM2LLGPPQ8H8SP33IZEG41F7EOIW8BE69IIGCJO4XCORFVIERXCEW5SDR16ONXMF8SMM7ES6ECJ5CN350Y4LQWI9OSN48E88RY6UN00UHJK9RYIFKGK23O24CIUXHJ3SY287YO9WDAYG8N97D3EZZ8HXPF0DH5RFY5KLOF7WW6W7GYFCDEIQN9BMBH6S2ZDSQT008GSJ3QZMWPVC0BAVB1CE2DOHA08JQ9GIZRA1' where id=93; -update noar ti set v0='QDZ079CUL8UK2JIJ60XUAT9PIDM2LLGPPQ8H8SP33IZEG41F7EOIW8BE69IIGCJO4XCORFVIERXCEW5SDR16ONXMF8SMM7ES6ECJ5CN350Y4LQWI9OSN48E88RY6UN00UHJK9RYIFKGK23O24CIUXHJ3SY287YO9WDAYG8N97D3EZZ8HXPF0DH5RFY5KLOF7WW6W7GYFCDEIQN9BMBH6S2ZDSQT008GSJ3QZMWPVC0BAVB1CE2DOHA08JQ9GIZRA1' where id=93; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='ITZRRLA40OLHBR9H34H7T0ANTBQC61L659C5AD0BIJMC19DBI7Q4PHIPEMDT6J2EOW8DYFD1SVM7KMBP9B9PQ042DMO04SQS1VLOCKMGZ21163W4DJO0V4FCS8GOYG9V0PUVGZU6E05IOHMWCZYFLVK1JZU6VE6OJOUE9ZDIQ827TZG3MDXJ7I3LGTNOADZ9YYL170WGXNQTWUQYVACWANS1YJRJI1RQ390Q2MF1UNQY6H2130S86MIWXUH3KKKDP' where id=93; -update noar ti set v1='ITZRRLA40OLHBR9H34H7T0ANTBQC61L659C5AD0BIJMC19DBI7Q4PHIPEMDT6J2EOW8DYFD1SVM7KMBP9B9PQ042DMO04SQS1VLOCKMGZ21163W4DJO0V4FCS8GOYG9V0PUVGZU6E05IOHMWCZYFLVK1JZU6VE6OJOUE9ZDIQ827TZG3MDXJ7I3LGTNOADZ9YYL170WGXNQTWUQYVACWANS1YJRJI1RQ390Q2MF1UNQY6H2130S86MIWXUH3KKKDP' where id=93; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='D1Y72DH1QHIOQX9DPN8T57KEOAZXWMNB38VWXAPNAUDTUE1HV91LDM3BFWOOHNKP2GPSVMVYSI1HMOJSH4R4SIYSETFCL69U7VDR4E5W56RDSNG1M7HE2F7P8QSEHMCANMD4Q28F8Z520QU7E6JYWYRFEV08MOFR4STUNQZYA4RDGAAU1J90BAA5LOWHDSQE25K49JGFX2V28CWTQQM9LLVEEN6QE47NNFZ6MIN8P6DVWGOOKPUY6S6NUTC2S9TIZ' where id=93; -update noar ti set v2='D1Y72DH1QHIOQX9DPN8T57KEOAZXWMNB38VWXAPNAUDTUE1HV91LDM3BFWOOHNKP2GPSVMVYSI1HMOJSH4R4SIYSETFCL69U7VDR4E5W56RDSNG1M7HE2F7P8QSEHMCANMD4Q28F8Z520QU7E6JYWYRFEV08MOFR4STUNQZYA4RDGAAU1J90BAA5LOWHDSQE25K49JGFX2V28CWTQQM9LLVEEN6QE47NNFZ6MIN8P6DVWGOOKPUY6S6NUTC2S9TIZ' where id=93; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='REYJHFU5RDQJF0DFD7KH22V3XJR77N3YJ54E0E8QL7R0OAJU5Z96OEM6JUMEQ9NR3QRF5YTIF96BHJ81M5NETO3ZNPAU98TPADGVYJTHJC2XA3HYOGBX4B14I4B51UPQXQLWII7RBECCFBHWKVI2FEOHISPVN5L04N5D1W4XPUNKC859XTRPE3X9V8Q1TAW972F4N8YZNUJ3925ODDTSA6ETVCN5XRH4XEP2TVO4B3MCQHUS0U1AP8WETSARCMP5V' where id=93; -update noar ti set v3='REYJHFU5RDQJF0DFD7KH22V3XJR77N3YJ54E0E8QL7R0OAJU5Z96OEM6JUMEQ9NR3QRF5YTIF96BHJ81M5NETO3ZNPAU98TPADGVYJTHJC2XA3HYOGBX4B14I4B51UPQXQLWII7RBECCFBHWKVI2FEOHISPVN5L04N5D1W4XPUNKC859XTRPE3X9V8Q1TAW972F4N8YZNUJ3925ODDTSA6ETVCN5XRH4XEP2TVO4B3MCQHUS0U1AP8WETSARCMP5V' where id=93; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='09CPJ9QWKQC21LU2VE0WTRVPWJAVEOBOWA4L5XIEZH89Y5M8BLNVUSTVREYST0DL3R4E1FH9UVYR0XDCZ37B7XKJ25BJO39H3BW93FXW2SV2C4M5U50JF9RVMCWSIKMYWD840CZP4USDY0UKY5DOQY5NNFJHCXI22VX6DMCZ6JFJMX3L5HLYKSEXQ2SU1L55ZSZXPUIXD4C9MPWH6NU2QZVIJZO57DACX4BHQ87EA6BHTQPDXIXBLBG4VKOI2PZCF' where id=94; -update noar ti set v0='09CPJ9QWKQC21LU2VE0WTRVPWJAVEOBOWA4L5XIEZH89Y5M8BLNVUSTVREYST0DL3R4E1FH9UVYR0XDCZ37B7XKJ25BJO39H3BW93FXW2SV2C4M5U50JF9RVMCWSIKMYWD840CZP4USDY0UKY5DOQY5NNFJHCXI22VX6DMCZ6JFJMX3L5HLYKSEXQ2SU1L55ZSZXPUIXD4C9MPWH6NU2QZVIJZO57DACX4BHQ87EA6BHTQPDXIXBLBG4VKOI2PZCF' where id=94; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='SEVAP6S9DZJOJGXB984FWD0GB3XG8O3EG8OWBF7XIYDG2VTTH6ICMZ0VAMDVW3TYLPVR89EE9MX3W33EHLUL2B2ZDZPKY63NJVW1KXUESP1KXBYW2SJ1SZH2TPDZHH31FETK9S8O4N7G7MNE4DMKLVYY5UMQE1AXZ0K8UVS8KOR2P8V7OYNSDRWSXQ48DZJ0IB4LS145TWD38QEQY4OI7HKMJY82GJNH94DEZ19GOXA4UEFXI1XXPGH7IG8WS5DPY' where id=94; -update noar ti set v1='SEVAP6S9DZJOJGXB984FWD0GB3XG8O3EG8OWBF7XIYDG2VTTH6ICMZ0VAMDVW3TYLPVR89EE9MX3W33EHLUL2B2ZDZPKY63NJVW1KXUESP1KXBYW2SJ1SZH2TPDZHH31FETK9S8O4N7G7MNE4DMKLVYY5UMQE1AXZ0K8UVS8KOR2P8V7OYNSDRWSXQ48DZJ0IB4LS145TWD38QEQY4OI7HKMJY82GJNH94DEZ19GOXA4UEFXI1XXPGH7IG8WS5DPY' where id=94; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='FR8S6ZJAFR9MDHPM2KDE5K3OXV7D9DP3VIFH7C9R4Q8C79DUPSVNHUD6I7F9PI0GOD94YT0O5X3IX5WE9VUHJ47WQIDW9BOCVF8FDZ8S9YW2UE1U5H386U8X53RVACHB64VIYUSTBZ2S5KBVTCHT4RVC2HEI5NC49FBZMP785UOVAPFC7T9WSGQO2CHB9B9ZIJABS7US0OJVSRJR6GGEPKRQNO837G0KWOMVBCH77R4E3FQUI5VP29CTGOZJTA2X9' where id=94; -update noar ti set v2='FR8S6ZJAFR9MDHPM2KDE5K3OXV7D9DP3VIFH7C9R4Q8C79DUPSVNHUD6I7F9PI0GOD94YT0O5X3IX5WE9VUHJ47WQIDW9BOCVF8FDZ8S9YW2UE1U5H386U8X53RVACHB64VIYUSTBZ2S5KBVTCHT4RVC2HEI5NC49FBZMP785UOVAPFC7T9WSGQO2CHB9B9ZIJABS7US0OJVSRJR6GGEPKRQNO837G0KWOMVBCH77R4E3FQUI5VP29CTGOZJTA2X9' where id=94; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='M0QSCW7STQCRXOO3Y9GXVK417EVJG2GDTDN4NVRSVZAWOP5PMMCJB33CJR5ITNI1NHIG7Q4TEHVWGYRA6AUERJEGB3KYB1O5PEOZQ48Q3TSJ867ZC86Y02OWOP5ZZI0F0MTREN71E3FYFXOTIY9NQLOODMGO0LMKKVRQD9T54I99IE6U343LAUXW20CFGFLU2EZ9T3YRB5CGB2KCV2RLI0X7HPU9R61FMRI2E3S8PHDITQD4KRCEU5M87NL2TKSPG' where id=94; -update noar ti set v3='M0QSCW7STQCRXOO3Y9GXVK417EVJG2GDTDN4NVRSVZAWOP5PMMCJB33CJR5ITNI1NHIG7Q4TEHVWGYRA6AUERJEGB3KYB1O5PEOZQ48Q3TSJ867ZC86Y02OWOP5ZZI0F0MTREN71E3FYFXOTIY9NQLOODMGO0LMKKVRQD9T54I99IE6U343LAUXW20CFGFLU2EZ9T3YRB5CGB2KCV2RLI0X7HPU9R61FMRI2E3S8PHDITQD4KRCEU5M87NL2TKSPG' where id=94; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='DBOKEVKO10MXVDPTMT866DJ3NY58HR28BAASPR3UIB282Y59P0SXQ0949OLF4CXZN6YSSXAJOPO1Y2757CYBDL83SVW1EEVKSG61KTHPBPJ5PI8OZZI7WOZ1QF32S6O0HUCUY9XYXYYGA2WBUGQL7TQSNJYVJA9IYNDFPJHXH6IYVLXSLTSZ30AQVF4CZ6O0YDROMEKKDQGBQZRLZ2IVUXZP0WI4MREQ12MNXK540KYB4QFZ03T0MSYHN7QO9PU2Z' where id=95; -update noar ti set v0='DBOKEVKO10MXVDPTMT866DJ3NY58HR28BAASPR3UIB282Y59P0SXQ0949OLF4CXZN6YSSXAJOPO1Y2757CYBDL83SVW1EEVKSG61KTHPBPJ5PI8OZZI7WOZ1QF32S6O0HUCUY9XYXYYGA2WBUGQL7TQSNJYVJA9IYNDFPJHXH6IYVLXSLTSZ30AQVF4CZ6O0YDROMEKKDQGBQZRLZ2IVUXZP0WI4MREQ12MNXK540KYB4QFZ03T0MSYHN7QO9PU2Z' where id=95; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='D40IC6Y9E3ZL1D344OYH1WO0231NF2KOBIEFTF4O4R5BNBFLJ6GGBULZJE3686X98JZLA70Y7ZQUUXJANKH62E0CZTKOHWQ45NGMHO8MZPGRG7IROQJFSPVMC7EZGBX8W5ZRDJKY0FCCNV2VXWTJD96LWHLGR57FWQGWQF0K0BD1VCIYIE7TDOA5COTL9RZJR7J6S36HGAYT41C7A6XITBRZYBMDPVXETQARII8O2Q7TP5D86QZAML1G2KTXDXWZS' where id=95; -update noar ti set v1='D40IC6Y9E3ZL1D344OYH1WO0231NF2KOBIEFTF4O4R5BNBFLJ6GGBULZJE3686X98JZLA70Y7ZQUUXJANKH62E0CZTKOHWQ45NGMHO8MZPGRG7IROQJFSPVMC7EZGBX8W5ZRDJKY0FCCNV2VXWTJD96LWHLGR57FWQGWQF0K0BD1VCIYIE7TDOA5COTL9RZJR7J6S36HGAYT41C7A6XITBRZYBMDPVXETQARII8O2Q7TP5D86QZAML1G2KTXDXWZS' where id=95; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='W4W77CW3APJ6Q8HC96J5SWR2GG0OQLBD9KRJ3M9VOTK8CI8MMJMPDV4MD0HZYMQBE3UN2C0IOU35GQ3U8E3KN4A7CEAG8O4AP1V5ALNFZJ8D6MA4GAZV3WQFCA5WGWOH6FL7WWIC5TQYQ7L3NEH5MY836NT7MI224JGHYVW1Z9KIUP06KCNDZ945V8BJWUDYWMYYTXHO5QGPCUB0PLVECLLZPN5JWS6CJW53BK9OYEZV9YTQ2R0C0CI67VHYOY417' where id=95; -update noar ti set v2='W4W77CW3APJ6Q8HC96J5SWR2GG0OQLBD9KRJ3M9VOTK8CI8MMJMPDV4MD0HZYMQBE3UN2C0IOU35GQ3U8E3KN4A7CEAG8O4AP1V5ALNFZJ8D6MA4GAZV3WQFCA5WGWOH6FL7WWIC5TQYQ7L3NEH5MY836NT7MI224JGHYVW1Z9KIUP06KCNDZ945V8BJWUDYWMYYTXHO5QGPCUB0PLVECLLZPN5JWS6CJW53BK9OYEZV9YTQ2R0C0CI67VHYOY417' where id=95; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='4BBO20SI6KZ43QA7ASYSWV8OA5UQ1IW3H4Y5HCJH2VIN0ZJL3I69ZU4KQC5L2N2WV3ZPCYEPPYRDR63LYBCU3GOZK36XFLRHU8Q87Y8R9YC8GWP3Y5XNMPVA7IS8XQPRP775HJ7PFADLJE485EQMVZ447ITIM2WRIRYB6X2MG8JXLX3H4KJR23VLF7BZL4O3HOSQOYRKXAJI25V939RBDIUVNR4JT0NWTIDUB0J44I15V5U3358MMTM92UWJJ7PJI' where id=95; -update noar ti set v3='4BBO20SI6KZ43QA7ASYSWV8OA5UQ1IW3H4Y5HCJH2VIN0ZJL3I69ZU4KQC5L2N2WV3ZPCYEPPYRDR63LYBCU3GOZK36XFLRHU8Q87Y8R9YC8GWP3Y5XNMPVA7IS8XQPRP775HJ7PFADLJE485EQMVZ447ITIM2WRIRYB6X2MG8JXLX3H4KJR23VLF7BZL4O3HOSQOYRKXAJI25V939RBDIUVNR4JT0NWTIDUB0J44I15V5U3358MMTM92UWJJ7PJI' where id=95; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='XD58SW0WOZPSUK8BV3KRJTMDVB6ZHCGXA1VMQ5ITCGULPKN9Y379RE0TZIMJ4PTT824INEX0RXE8MKMSWZR8E78GU52W9U2ZQ3Z3NRBONYZIFJDTW0F0UE2T56FQ9IIV36GYVJFH336TP584WO0ZB1H73OJ3Z1DRWXW4YN0PNWLIWG888TBOLPFB5QDP0I80NPZMMNIDSKUBH80S019OZ1NF7QLDDEY2H4K1QJ0XG3J3GOF5DYUYGFS1X2W23JEXJ' where id=96; -update noar ti set v0='XD58SW0WOZPSUK8BV3KRJTMDVB6ZHCGXA1VMQ5ITCGULPKN9Y379RE0TZIMJ4PTT824INEX0RXE8MKMSWZR8E78GU52W9U2ZQ3Z3NRBONYZIFJDTW0F0UE2T56FQ9IIV36GYVJFH336TP584WO0ZB1H73OJ3Z1DRWXW4YN0PNWLIWG888TBOLPFB5QDP0I80NPZMMNIDSKUBH80S019OZ1NF7QLDDEY2H4K1QJ0XG3J3GOF5DYUYGFS1X2W23JEXJ' where id=96; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='TQCRSB14K5BFO78MT2YKNQT2AAEWCVYO63YPC71A7WQPTNYL7X5SHSCDOUHM2YD78KB52ENGBAIR9WE6V25MI20K22JCRMN115LQGX5JC7NEXHPN33N1BAL9Z24XEPTD3QSEX5C4GBWIHO1AUOEMTHXA9ONZFPB7ZD7PKA1CBC7H7736XS0MQP5XL11HH0SXBVQI8GUL5JYTCEU0Z7ATQJFL3IMLF7S97IPX2H9DW1VPKAVSWD01S7E3K47ESZKYZ' where id=96; -update noar ti set v1='TQCRSB14K5BFO78MT2YKNQT2AAEWCVYO63YPC71A7WQPTNYL7X5SHSCDOUHM2YD78KB52ENGBAIR9WE6V25MI20K22JCRMN115LQGX5JC7NEXHPN33N1BAL9Z24XEPTD3QSEX5C4GBWIHO1AUOEMTHXA9ONZFPB7ZD7PKA1CBC7H7736XS0MQP5XL11HH0SXBVQI8GUL5JYTCEU0Z7ATQJFL3IMLF7S97IPX2H9DW1VPKAVSWD01S7E3K47ESZKYZ' where id=96; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='O0LMFHUWRBTJ2RY5OS6ZOMO25H095ZEW1E172HBKDOJ0DOFFH03BJKO8UPQFJB6GAS3WPJENPDZNPDXJ1E0IQYK578Q529ZB9CKOMGILZ2DF9AQSYUPUXMLMA7D4QMLHU3R6LRA79U6WKSC1PT43TMTQOV4QLFI7CIA7G0MWR35AXMBWABYW5CWK9YVXKRH8SGNZIZ47GDR1X8KIV8SZKSVFOH1HARSXZ4UEEFIHX9HNG23AL73P5XDUWCNTVB75Q' where id=96; -update noar ti set v2='O0LMFHUWRBTJ2RY5OS6ZOMO25H095ZEW1E172HBKDOJ0DOFFH03BJKO8UPQFJB6GAS3WPJENPDZNPDXJ1E0IQYK578Q529ZB9CKOMGILZ2DF9AQSYUPUXMLMA7D4QMLHU3R6LRA79U6WKSC1PT43TMTQOV4QLFI7CIA7G0MWR35AXMBWABYW5CWK9YVXKRH8SGNZIZ47GDR1X8KIV8SZKSVFOH1HARSXZ4UEEFIHX9HNG23AL73P5XDUWCNTVB75Q' where id=96; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='IU3EZINLEE3FOULALFNKVCBWO1YPK01DOBWRO37TQMQ1YEL4ZSTDZVM5TUP875Y93YP7UQF279KJFF7Z36S7QAAC55F43EPDYBXUAC905WMVOZX81ZTLWOJDGTPRGQLUHA29WSATMX1U09E0AIILEPXL3T2DDBJWXZ6EZOOENBDWCIC6MC04RT6OA7O50JJKNY15PSJ1PJZQY79BG32GFSSP22I90VCH2XSMUEVY7B1N64Z44QKUABQG3YXGTM03F' where id=96; -update noar ti set v3='IU3EZINLEE3FOULALFNKVCBWO1YPK01DOBWRO37TQMQ1YEL4ZSTDZVM5TUP875Y93YP7UQF279KJFF7Z36S7QAAC55F43EPDYBXUAC905WMVOZX81ZTLWOJDGTPRGQLUHA29WSATMX1U09E0AIILEPXL3T2DDBJWXZ6EZOOENBDWCIC6MC04RT6OA7O50JJKNY15PSJ1PJZQY79BG32GFSSP22I90VCH2XSMUEVY7B1N64Z44QKUABQG3YXGTM03F' where id=96; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='B3HNSREC0R3SW37L1P9XDJ7ZDEPF7KIYPEC1MFMRRU9LHUPNAVJ4VBVRP0FMJJPZ4KXPDYXH9KWSXDHP1YNBS3HKK1IPACF31YIBHIRVCAS59T1DIF6CVRBFF5JW5LZQIONQ0L8DLIKF4PXDAMCN0097GOXY4ABPC23N1G03SCQTX2QTNOP1PDI9M6F7ZVBUHTNV5XBOK90PI6C9R1QF2Q5EULI9SBMOPZ5OAS8698WGVE685TLQWSJGNPD0G1AKA' where id=97; -update noar ti set v0='B3HNSREC0R3SW37L1P9XDJ7ZDEPF7KIYPEC1MFMRRU9LHUPNAVJ4VBVRP0FMJJPZ4KXPDYXH9KWSXDHP1YNBS3HKK1IPACF31YIBHIRVCAS59T1DIF6CVRBFF5JW5LZQIONQ0L8DLIKF4PXDAMCN0097GOXY4ABPC23N1G03SCQTX2QTNOP1PDI9M6F7ZVBUHTNV5XBOK90PI6C9R1QF2Q5EULI9SBMOPZ5OAS8698WGVE685TLQWSJGNPD0G1AKA' where id=97; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='YSMMAZZ1OPW08S47OJPLUV72RO2T2RIUZQREAQ75VE82SYAL6TSSA1MJ3O2A83O1TOAU7VBHAJ5IG4ODR05TY8BN6RFWUEZBJXRW6QOXKJCJ0VEY11Y8YD6JWWK5MHOLAD2FIF4G005RH7GE7TTWX2GONVHAQA4VR8JLVUUPSUV6CY19U0RXWNLP02BCQAEHMJL2F93UC97B08FH2JWT1ZTGYAAV86QYL0BUZ0UCF2895XV86XTSQ7F3TUVWZQEU6' where id=97; -update noar ti set v1='YSMMAZZ1OPW08S47OJPLUV72RO2T2RIUZQREAQ75VE82SYAL6TSSA1MJ3O2A83O1TOAU7VBHAJ5IG4ODR05TY8BN6RFWUEZBJXRW6QOXKJCJ0VEY11Y8YD6JWWK5MHOLAD2FIF4G005RH7GE7TTWX2GONVHAQA4VR8JLVUUPSUV6CY19U0RXWNLP02BCQAEHMJL2F93UC97B08FH2JWT1ZTGYAAV86QYL0BUZ0UCF2895XV86XTSQ7F3TUVWZQEU6' where id=97; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='6FNIPC8ALP3KX15590AW3P68ZPUY6WARFDS5EJ8BBJFVV4RAH6YZX7SDWFMWCTUTFMS0MHL0MXM3LNGRF32CIHKFREOEUBACJV9637UWB04RBOND7KHS73TYP7TBIEANJU49YU3TI881G6V568A4RW4J4EBYYOGMLIEEZS7V5YR8Z3V8AVHP1HBLA70SFWQFVAMILB87J8RY6TSLLRBRLQL9QYJ6Z25YGXCOHN4W2XA1DIDHM6I5I2YYCLAHIKUZR' where id=97; -update noar ti set v2='6FNIPC8ALP3KX15590AW3P68ZPUY6WARFDS5EJ8BBJFVV4RAH6YZX7SDWFMWCTUTFMS0MHL0MXM3LNGRF32CIHKFREOEUBACJV9637UWB04RBOND7KHS73TYP7TBIEANJU49YU3TI881G6V568A4RW4J4EBYYOGMLIEEZS7V5YR8Z3V8AVHP1HBLA70SFWQFVAMILB87J8RY6TSLLRBRLQL9QYJ6Z25YGXCOHN4W2XA1DIDHM6I5I2YYCLAHIKUZR' where id=97; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='G7BEQIQNCPL9V3SQY1ZY26BZQGH7L3K94FMCYZGCCVD45Z8TGJAKPUX8WBH6JGNSZVPP1BCJ8OSVCTD3EE8SVYMXFSY63ECQ4J5V98DGN2E7VYOL7DVJGBAAFNIH6Z04RPD3WDZLCD2OYJ8JFQ0XQJMJYTLT6JF29JXK7FWF8AREXQ2YZPL5X517D8DMRQVIOAM3M11AQSFNSC5GQOS981WACKFS6Z0USGKCSH8R1SHM7LB819CMNEZRON3BDNLTQ' where id=97; -update noar ti set v3='G7BEQIQNCPL9V3SQY1ZY26BZQGH7L3K94FMCYZGCCVD45Z8TGJAKPUX8WBH6JGNSZVPP1BCJ8OSVCTD3EE8SVYMXFSY63ECQ4J5V98DGN2E7VYOL7DVJGBAAFNIH6Z04RPD3WDZLCD2OYJ8JFQ0XQJMJYTLT6JF29JXK7FWF8AREXQ2YZPL5X517D8DMRQVIOAM3M11AQSFNSC5GQOS981WACKFS6Z0USGKCSH8R1SHM7LB819CMNEZRON3BDNLTQ' where id=97; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='17YM75UB7JOWA4MKPQ5PJIYMIM6WVHKOKG4ZA6K4H4RM366MM19ORCT3N3P1LE10843AIPTUPN8HU3OJS3LUQLVFY4LEZ0C8UBHWI048T2GFG40AH5IMPJ4MJHTLWKURD5NIBVH27Y823RSKSJME5LYGEB85T292UGZAIBSV7QB8VPH5P85SHOSGQ6I4MX6SIR31SZOYG9DS7Z8ZEUXU46P974277X7947J7JJXEMCA9L147OBE6YK25WHM90YWMG' where id=98; -update noar ti set v0='17YM75UB7JOWA4MKPQ5PJIYMIM6WVHKOKG4ZA6K4H4RM366MM19ORCT3N3P1LE10843AIPTUPN8HU3OJS3LUQLVFY4LEZ0C8UBHWI048T2GFG40AH5IMPJ4MJHTLWKURD5NIBVH27Y823RSKSJME5LYGEB85T292UGZAIBSV7QB8VPH5P85SHOSGQ6I4MX6SIR31SZOYG9DS7Z8ZEUXU46P974277X7947J7JJXEMCA9L147OBE6YK25WHM90YWMG' where id=98; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='AW4O3Z601EYNZAGBNDECMQUMWIH1PRCKAQD78HL1169PK5KDCQS05DZJ32IH1WMU9WG57IN2VPFDEILS3PY4SO5ZIVOW4LC3IOPA28W6VMQW2EHMSIMLHV6D3THV6UDLANAXQG73WR5DMXZVLM7UXSF3SGI6J5KG1ZUUQFZZV7LGG7S45VL5I9UHI8XXK59VKSMSKKSPRALMZVLEIA8RTB23WA5MKDBN2KC8DE45FD47VCWS4OAHP7C9OWDAGV2S5' where id=98; -update noar ti set v1='AW4O3Z601EYNZAGBNDECMQUMWIH1PRCKAQD78HL1169PK5KDCQS05DZJ32IH1WMU9WG57IN2VPFDEILS3PY4SO5ZIVOW4LC3IOPA28W6VMQW2EHMSIMLHV6D3THV6UDLANAXQG73WR5DMXZVLM7UXSF3SGI6J5KG1ZUUQFZZV7LGG7S45VL5I9UHI8XXK59VKSMSKKSPRALMZVLEIA8RTB23WA5MKDBN2KC8DE45FD47VCWS4OAHP7C9OWDAGV2S5' where id=98; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='74E41LJXI9JTWOC62IRCK1KHTNQKIUW4SWSW7BQXPLHP4NEL99X1VZB21G18PQNRP4J7DWDJE5ZO8DSGIP755HJW3JLM9VLWCLRB9ZXEHDDU8MO639CKOTLLGF5RLRGQTIXG35VDR3KE7D2OMTXJW2JFKWPBVPHS7F0WKMXO9H27PJ68BA2NS0GQ7RT4II0STLSIYMY6VVIZGD4XBVLUU7F0N2NCKQUGPAFOCOB3VAQO9CIXCOXBYJAE6PH36OJB0' where id=98; -update noar ti set v2='74E41LJXI9JTWOC62IRCK1KHTNQKIUW4SWSW7BQXPLHP4NEL99X1VZB21G18PQNRP4J7DWDJE5ZO8DSGIP755HJW3JLM9VLWCLRB9ZXEHDDU8MO639CKOTLLGF5RLRGQTIXG35VDR3KE7D2OMTXJW2JFKWPBVPHS7F0WKMXO9H27PJ68BA2NS0GQ7RT4II0STLSIYMY6VVIZGD4XBVLUU7F0N2NCKQUGPAFOCOB3VAQO9CIXCOXBYJAE6PH36OJB0' where id=98; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='NKAZHADTHWD0N0VHL47U7FMUM6O3MFZN2VAF9YPU98379ZJWS9IPPGPGCWD98V2SRAGBS1Y4WG6AKKVMIWXUZV0CUTZ51CKTPQJQ9BNBSLTGNZ3HC5QP9NITMGMXW7CNTUH1YFGAMN5X7VKE3NE7CNXDZQ6UYBQY03W6MNBRBU0VIWRWL2KUHPEWOI5XHVLDCTUWD5HDU7DJYZ0DRS2J6FXVT6H8JM2OF92XLO31R7Z8CYGECE70TWE0GOP9HU8CS' where id=98; -update noar ti set v3='NKAZHADTHWD0N0VHL47U7FMUM6O3MFZN2VAF9YPU98379ZJWS9IPPGPGCWD98V2SRAGBS1Y4WG6AKKVMIWXUZV0CUTZ51CKTPQJQ9BNBSLTGNZ3HC5QP9NITMGMXW7CNTUH1YFGAMN5X7VKE3NE7CNXDZQ6UYBQY03W6MNBRBU0VIWRWL2KUHPEWOI5XHVLDCTUWD5HDU7DJYZ0DRS2J6FXVT6H8JM2OF92XLO31R7Z8CYGECE70TWE0GOP9HU8CS' where id=98; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='2NTLB3QEKWW5DCDPV43TI8YHPOB8JMD56IRAH1Z8D2H722689BKRAMW638L59NXQRDQG0BOZ3WZK78M2RJRH1ILUOLK0K00MFQ9ATC8CO78PACPD2HMRN3MCJBKKLB0DCNB4J9S6EHTA4VY64NVG9MEUJ1TKE2PGHE8BKOR564PE6K2YD436EUMCVFAEJXQMSB9HYEWNOE3PTT4DNJYAIUK7JRQ7HEGNWX44IMSEOYDSMYEWEKOJSACQV3JYCNYTH' where id=99; -update noar ti set v0='2NTLB3QEKWW5DCDPV43TI8YHPOB8JMD56IRAH1Z8D2H722689BKRAMW638L59NXQRDQG0BOZ3WZK78M2RJRH1ILUOLK0K00MFQ9ATC8CO78PACPD2HMRN3MCJBKKLB0DCNB4J9S6EHTA4VY64NVG9MEUJ1TKE2PGHE8BKOR564PE6K2YD436EUMCVFAEJXQMSB9HYEWNOE3PTT4DNJYAIUK7JRQ7HEGNWX44IMSEOYDSMYEWEKOJSACQV3JYCNYTH' where id=99; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='U1U5AR0AJETU7MHC72BV30C6OAZLXY7KA0ML6AK18UZVIZVI7LAP6N4H5O9CZHOWZEDNGMH7MY81X1IXBFSIFPC3SQAH6Q11FU3K3GHQV0XUMDCIZW3QJFBTSA8GMT25D5KYY7NUTBG9K1966DT8HGB5TR455R7C4GQK1CGQU84A4MRMIL01A6GOUXQGIGPXKVCAPAM27PH9I950DC5R37BXV19JFHMQFC5KPESX9TI9DMPNX1AJG452MVNY60EP7' where id=99; -update noar ti set v1='U1U5AR0AJETU7MHC72BV30C6OAZLXY7KA0ML6AK18UZVIZVI7LAP6N4H5O9CZHOWZEDNGMH7MY81X1IXBFSIFPC3SQAH6Q11FU3K3GHQV0XUMDCIZW3QJFBTSA8GMT25D5KYY7NUTBG9K1966DT8HGB5TR455R7C4GQK1CGQU84A4MRMIL01A6GOUXQGIGPXKVCAPAM27PH9I950DC5R37BXV19JFHMQFC5KPESX9TI9DMPNX1AJG452MVNY60EP7' where id=99; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='4UT93HR61UO15A7VUFJK22JA2T0KLN6BSI96FMSVNM7335TJ9BQV2A6ZDNXBH3LHI6MJWIAR91ALJLDZKB328K49RJIBQYJLT5KKE93X9YDVPMH83XC2AV0SNSPCHWYRPXB9LD6OVM8PWFLOG3OTSPVIDELQHX36OHS7XI4Y5EOUYKHZUCVGB6AA6CAOPT83ISQ0C1WAMFOK2UTJN4B0U8AHPLYVL2X988X4ZGG3OJIOCSMXTV5N8RGC4LDU0VNJY' where id=99; -update noar ti set v2='4UT93HR61UO15A7VUFJK22JA2T0KLN6BSI96FMSVNM7335TJ9BQV2A6ZDNXBH3LHI6MJWIAR91ALJLDZKB328K49RJIBQYJLT5KKE93X9YDVPMH83XC2AV0SNSPCHWYRPXB9LD6OVM8PWFLOG3OTSPVIDELQHX36OHS7XI4Y5EOUYKHZUCVGB6AA6CAOPT83ISQ0C1WAMFOK2UTJN4B0U8AHPLYVL2X988X4ZGG3OJIOCSMXTV5N8RGC4LDU0VNJY' where id=99; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='FH4206H0AKGZAR04LTBY5CRSFC2WL9HU3GIIH93K1B2S87WGEIWKPH9CLJS572M5JIL1OR9R97M52X7ZUL90X6ORSY9MC44H6ITNB1XL6IRKZMYV1Q3E44W33L70HP0XXLYIPPPILG17SRQ3D4J6MKO0716J4Z79WLHU2EMETVR0H81OK6I77ER7YVGV9P9XXCUXZDBKUAN9FAZFWMCW2JE906FCKMHU71P99YI83VQS7GVYQRE1AMDHDP3Y5QLHT' where id=99; -update noar ti set v3='FH4206H0AKGZAR04LTBY5CRSFC2WL9HU3GIIH93K1B2S87WGEIWKPH9CLJS572M5JIL1OR9R97M52X7ZUL90X6ORSY9MC44H6ITNB1XL6IRKZMYV1Q3E44W33L70HP0XXLYIPPPILG17SRQ3D4J6MKO0716J4Z79WLHU2EMETVR0H81OK6I77ER7YVGV9P9XXCUXZDBKUAN9FAZFWMCW2JE906FCKMHU71P99YI83VQS7GVYQRE1AMDHDP3Y5QLHT' where id=99; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varbinary(32) null, -v1 varbinary(32) null, -v2 varbinary(32) null, -v3 varbinary(32) null, -b0 text null -) engine=tokudb; -insert into tt (id) values (0); -insert into tt values (1,2,'a','b','c','d','e'); -insert into tt values (2,3,'','','','',''); -insert into tt values (3,4,'','','','',''); -insert into tt values (4,5,'','','','',''); -insert into tt values (5,6,'','','','',''); -insert into tt values (6,7,'','','','',''); -insert into tt values (7,8,'','','','',''); -insert into tt values (8,9,'','','','',''); -insert into tt values (9,10,'','','','',''); -insert into tt values (10,11,'','','','',''); -insert into tt values (11,12,'','','','',''); -insert into tt values (12,13,'','','','',''); -insert into tt values (13,14,'','','','',''); -insert into tt values (14,15,'','','','',''); -insert into tt values (15,16,'','','','',''); -insert into tt values (16,17,'','','','',''); -insert into tt values (17,18,'','','','',''); -insert into tt values (18,19,'','','','',''); -insert into tt values (19,20,'','','','',''); -insert into tt values (20,21,'','','','',''); -insert into tt values (21,22,'','','','',''); -insert into tt values (22,23,'','','','',''); -insert into tt values (23,24,'','','','',''); -insert into tt values (24,25,'','','','',''); -insert into tt values (25,26,'','','','',''); -insert into tt values (26,27,'','','','',''); -insert into tt values (27,28,'','','','',''); -insert into tt values (28,29,'','','','',''); -insert into tt values (29,30,'','','','',''); -insert into tt values (30,31,'','','','',''); -insert into tt values (31,32,'','','','',''); -insert into tt values (32,33,'','','','',''); -insert into tt values (33,34,'','','','',''); -insert into tt values (34,35,'','','','',''); -insert into tt values (35,36,'','','','',''); -insert into tt values (36,37,'','','','',''); -insert into tt values (37,38,'','','','',''); -insert into tt values (38,39,'','','','',''); -insert into tt values (39,40,'','','','',''); -insert into tt values (40,41,'','','','',''); -insert into tt values (41,42,'','','','',''); -insert into tt values (42,43,'','','','',''); -insert into tt values (43,44,'','','','',''); -insert into tt values (44,45,'','','','',''); -insert into tt values (45,46,'','','','',''); -insert into tt values (46,47,'','','','',''); -insert into tt values (47,48,'','','','',''); -insert into tt values (48,49,'','','','',''); -insert into tt values (49,50,'','','','',''); -insert into tt values (50,51,'','','','',''); -insert into tt values (51,52,'','','','',''); -insert into tt values (52,53,'','','','',''); -insert into tt values (53,54,'','','','',''); -insert into tt values (54,55,'','','','',''); -insert into tt values (55,56,'','','','',''); -insert into tt values (56,57,'','','','',''); -insert into tt values (57,58,'','','','',''); -insert into tt values (58,59,'','','','',''); -insert into tt values (59,60,'','','','',''); -insert into tt values (60,61,'','','','',''); -insert into tt values (61,62,'','','','',''); -insert into tt values (62,63,'','','','',''); -insert into tt values (63,64,'','','','',''); -insert into tt values (64,65,'','','','',''); -insert into tt values (65,66,'','','','',''); -insert into tt values (66,67,'','','','',''); -insert into tt values (67,68,'','','','',''); -insert into tt values (68,69,'','','','',''); -insert into tt values (69,70,'','','','',''); -insert into tt values (70,71,'','','','',''); -insert into tt values (71,72,'','','','',''); -insert into tt values (72,73,'','','','',''); -insert into tt values (73,74,'','','','',''); -insert into tt values (74,75,'','','','',''); -insert into tt values (75,76,'','','','',''); -insert into tt values (76,77,'','','','',''); -insert into tt values (77,78,'','','','',''); -insert into tt values (78,79,'','','','',''); -insert into tt values (79,80,'','','','',''); -insert into tt values (80,81,'','','','',''); -insert into tt values (81,82,'','','','',''); -insert into tt values (82,83,'','','','',''); -insert into tt values (83,84,'','','','',''); -insert into tt values (84,85,'','','','',''); -insert into tt values (85,86,'','','','',''); -insert into tt values (86,87,'','','','',''); -insert into tt values (87,88,'','','','',''); -insert into tt values (88,89,'','','','',''); -insert into tt values (89,90,'','','','',''); -insert into tt values (90,91,'','','','',''); -insert into tt values (91,92,'','','','',''); -insert into tt values (92,93,'','','','',''); -insert into tt values (93,94,'','','','',''); -insert into tt values (94,95,'','','','',''); -insert into tt values (95,96,'','','','',''); -insert into tt values (96,97,'','','','',''); -insert into tt values (97,98,'','','','',''); -insert into tt values (98,99,'','','','',''); -insert into tt values (99,100,'','','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='null this 0' where id=0; -update noar ti set v0='null this 0' where id=0; -update noar tt set v1='null is 1' where id=0; -update noar ti set v1='null is 1' where id=0; -update noar tt set v2='null a 2' where id=0; -update noar ti set v2='null a 2' where id=0; -update noar tt set v3='null test 3' where id=0; -update noar ti set v3='null test 3' where id=0; -update noar tt set v0='this 0' where id=1; -update noar ti set v0='this 0' where id=1; -update noar tt set v1='is 1' where id=1; -update noar ti set v1='is 1' where id=1; -update noar tt set v2='another 2' where id=1; -update noar ti set v2='another 2' where id=1; -update noar tt set v3='test 3' where id=1; -update noar ti set v3='test 3' where id=1; -update noar tt set v0='4CP5X4JI3BIPVDNO7Z7P2CTN520K4QDCN' where id=2; -update noar ti set v0='4CP5X4JI3BIPVDNO7Z7P2CTN520K4QDCN' where id=2; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='HC7PYXH7C9WR60ULA4OMWD4BMR48R8UX5' where id=2; -update noar ti set v1='HC7PYXH7C9WR60ULA4OMWD4BMR48R8UX5' where id=2; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='K5FHOKK2G9C86C3A303DU0FSQQKMFB3YB' where id=2; -update noar ti set v2='K5FHOKK2G9C86C3A303DU0FSQQKMFB3YB' where id=2; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='2CXQ1CMYFAWE2LR87ZBMZOC9CQK8OTVSL' where id=2; -update noar ti set v3='2CXQ1CMYFAWE2LR87ZBMZOC9CQK8OTVSL' where id=2; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='793DR4UA07GWZNEPR58V97HAGQ3I6D6Y2' where id=3; -update noar ti set v0='793DR4UA07GWZNEPR58V97HAGQ3I6D6Y2' where id=3; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='PFBZXCNZYYHWVK5LSXPDQ35QIWY6UBPY7' where id=3; -update noar ti set v1='PFBZXCNZYYHWVK5LSXPDQ35QIWY6UBPY7' where id=3; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='CH11HV0RFRP15DHTDY3SN1F5OG7SPPQ3F' where id=3; -update noar ti set v2='CH11HV0RFRP15DHTDY3SN1F5OG7SPPQ3F' where id=3; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='U011IYJDGLMK4GV05MS9HGF7LF9Q95H2C' where id=3; -update noar ti set v3='U011IYJDGLMK4GV05MS9HGF7LF9Q95H2C' where id=3; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='BB737V4GRTKP57V34ST6L32J3S758HZSD' where id=4; -update noar ti set v0='BB737V4GRTKP57V34ST6L32J3S758HZSD' where id=4; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='0RWSKTVOOQQSKPSFJXP8EIUQ3UU3KXYB6' where id=4; -update noar ti set v1='0RWSKTVOOQQSKPSFJXP8EIUQ3UU3KXYB6' where id=4; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='2GO899F93HU6LIEJNZUOB7J9C9GV46MMK' where id=4; -update noar ti set v2='2GO899F93HU6LIEJNZUOB7J9C9GV46MMK' where id=4; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='8V2N9BGK197IGQD41I3WDI05UYS5J3SNI' where id=4; -update noar ti set v3='8V2N9BGK197IGQD41I3WDI05UYS5J3SNI' where id=4; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='9X7RAASZNH2LCGYKFZJBPTVPZKCACM79O' where id=5; -update noar ti set v0='9X7RAASZNH2LCGYKFZJBPTVPZKCACM79O' where id=5; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='WYARYZCZR9QTCE688SBNNLZ9FDSOX14NY' where id=5; -update noar ti set v1='WYARYZCZR9QTCE688SBNNLZ9FDSOX14NY' where id=5; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='VGD9E8B19FGQYPDNYZM5QVA63HTBHTUGY' where id=5; -update noar ti set v2='VGD9E8B19FGQYPDNYZM5QVA63HTBHTUGY' where id=5; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='JDI5QW4YD7KWG94L73DTK6W3VV4XV3XUU' where id=5; -update noar ti set v3='JDI5QW4YD7KWG94L73DTK6W3VV4XV3XUU' where id=5; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='6OBVEQVQFNVF857T56VJXICJJF5KQL7GJ' where id=6; -update noar ti set v0='6OBVEQVQFNVF857T56VJXICJJF5KQL7GJ' where id=6; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='MJOESFBM818ISRN9P4H0WUPJN48SDCTAT' where id=6; -update noar ti set v1='MJOESFBM818ISRN9P4H0WUPJN48SDCTAT' where id=6; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='QH92HZ1IG9A4HWAX2OFG2CWCW9E5V9RZR' where id=6; -update noar ti set v2='QH92HZ1IG9A4HWAX2OFG2CWCW9E5V9RZR' where id=6; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='HNXV83AOO765VV601XAV74WK28MNSC8TE' where id=6; -update noar ti set v3='HNXV83AOO765VV601XAV74WK28MNSC8TE' where id=6; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='U49CZSR017AKFJ3BX6YDCY9F1OARJ4UTT' where id=7; -update noar ti set v0='U49CZSR017AKFJ3BX6YDCY9F1OARJ4UTT' where id=7; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='RZTYCA4IBDJGC7M74CT2RS899HECRQH7O' where id=7; -update noar ti set v1='RZTYCA4IBDJGC7M74CT2RS899HECRQH7O' where id=7; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='KT312E7DD2LNM91XIAMBUFOTJRHBYNZJ2' where id=7; -update noar ti set v2='KT312E7DD2LNM91XIAMBUFOTJRHBYNZJ2' where id=7; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='FDSOY3E49UUGWPW8ZRGLGMH7OGX1GPIQW' where id=7; -update noar ti set v3='FDSOY3E49UUGWPW8ZRGLGMH7OGX1GPIQW' where id=7; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='CUO9CN8O71QR50KA5ONA2UVKJR1M8UQZM' where id=8; -update noar ti set v0='CUO9CN8O71QR50KA5ONA2UVKJR1M8UQZM' where id=8; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='EDGJ0L7LI1LJD0ZQ3W3EE9KPY9B858K2P' where id=8; -update noar ti set v1='EDGJ0L7LI1LJD0ZQ3W3EE9KPY9B858K2P' where id=8; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='5M22FGC8VPGXEIPZ42ILEDWKN4QGR7XRL' where id=8; -update noar ti set v2='5M22FGC8VPGXEIPZ42ILEDWKN4QGR7XRL' where id=8; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='PQTMEVXQ1Y6MP4FFTK40UUY77OJY9VPPI' where id=8; -update noar ti set v3='PQTMEVXQ1Y6MP4FFTK40UUY77OJY9VPPI' where id=8; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='6TK6YVBHDIR47H1VUITL8CNCADHPJSA6Y' where id=9; -update noar ti set v0='6TK6YVBHDIR47H1VUITL8CNCADHPJSA6Y' where id=9; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='OAU91413DXXAK7M0T9QGRBW2B0PL97FTG' where id=9; -update noar ti set v1='OAU91413DXXAK7M0T9QGRBW2B0PL97FTG' where id=9; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='EX4Y7MO577Z0NOCSSA52PA584HZ896YOJ' where id=9; -update noar ti set v2='EX4Y7MO577Z0NOCSSA52PA584HZ896YOJ' where id=9; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='TNJVERII0US72LZJOAP87UT6ZS320JI4C' where id=9; -update noar ti set v3='TNJVERII0US72LZJOAP87UT6ZS320JI4C' where id=9; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='KX4VD5NDNQYREB9HCNE40PFWIFWJNQCM8' where id=10; -update noar ti set v0='KX4VD5NDNQYREB9HCNE40PFWIFWJNQCM8' where id=10; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='MSBBYB879R6P45IGSCA3PV7TVYU6SMDJW' where id=10; -update noar ti set v1='MSBBYB879R6P45IGSCA3PV7TVYU6SMDJW' where id=10; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='61UJL0OACRSO64FGWGFYQRC1DR8OI1W7Z' where id=10; -update noar ti set v2='61UJL0OACRSO64FGWGFYQRC1DR8OI1W7Z' where id=10; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='DJA5KVC44MAUOXVW58IXTY8KVDJ60W0RU' where id=10; -update noar ti set v3='DJA5KVC44MAUOXVW58IXTY8KVDJ60W0RU' where id=10; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='F3KKDXYITEX2ZJGGXTFX12AK18R722YKV' where id=11; -update noar ti set v0='F3KKDXYITEX2ZJGGXTFX12AK18R722YKV' where id=11; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='BO0GMVUCD7J1SOKOM69WERXWQKET0AQOQ' where id=11; -update noar ti set v1='BO0GMVUCD7J1SOKOM69WERXWQKET0AQOQ' where id=11; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='C5H8G7L00U1EF6Z6J6V6ZGGCU6G4GITBM' where id=11; -update noar ti set v2='C5H8G7L00U1EF6Z6J6V6ZGGCU6G4GITBM' where id=11; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='X0FD3CKW82J2LAPC199SJV81Y6AKH3261' where id=11; -update noar ti set v3='X0FD3CKW82J2LAPC199SJV81Y6AKH3261' where id=11; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='J9M0SX7VQAJWD5RSY6OQRH54ZWPKTTRIG' where id=12; -update noar ti set v0='J9M0SX7VQAJWD5RSY6OQRH54ZWPKTTRIG' where id=12; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='MSWTOLNBO3TVXVUTQ418BHXJWVTIYFYP3' where id=12; -update noar ti set v1='MSWTOLNBO3TVXVUTQ418BHXJWVTIYFYP3' where id=12; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='BURRPFBYSCQCQA1P1B5GDN2FDI7KKBQD2' where id=12; -update noar ti set v2='BURRPFBYSCQCQA1P1B5GDN2FDI7KKBQD2' where id=12; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='AENI8YAP7HCL1VYZS7P7IPV7M4B9P16WR' where id=12; -update noar ti set v3='AENI8YAP7HCL1VYZS7P7IPV7M4B9P16WR' where id=12; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='T33IEGIGPA4YJTIGFY01S9ROY0WN2AHPJ' where id=13; -update noar ti set v0='T33IEGIGPA4YJTIGFY01S9ROY0WN2AHPJ' where id=13; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='A0KOR8TK5S1YUCGTJ141UAGPJC0IQUHA1' where id=13; -update noar ti set v1='A0KOR8TK5S1YUCGTJ141UAGPJC0IQUHA1' where id=13; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='IBO47UGFLR5YMS3OHOES3TFR2RJTNAUI4' where id=13; -update noar ti set v2='IBO47UGFLR5YMS3OHOES3TFR2RJTNAUI4' where id=13; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='9IJN8SQ9DKBSDZMVP5RTJ1N183N22LX9W' where id=13; -update noar ti set v3='9IJN8SQ9DKBSDZMVP5RTJ1N183N22LX9W' where id=13; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='VK7YYZ4DRDRLOXHDHO2376CMZ8O61OQG4' where id=14; -update noar ti set v0='VK7YYZ4DRDRLOXHDHO2376CMZ8O61OQG4' where id=14; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='303BLIRJSIBC6RCSG6MUFJ0YDRJDA35UI' where id=14; -update noar ti set v1='303BLIRJSIBC6RCSG6MUFJ0YDRJDA35UI' where id=14; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='NTYW8UZE23Q6HGHCXWO25G1DRHS0L725A' where id=14; -update noar ti set v2='NTYW8UZE23Q6HGHCXWO25G1DRHS0L725A' where id=14; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='0DKIBFHRCR8T2T5VHOZM6V4TOC787AT4T' where id=14; -update noar ti set v3='0DKIBFHRCR8T2T5VHOZM6V4TOC787AT4T' where id=14; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='5YU92WTZXROC00E31GCF5R3WS1FRJJ1T0' where id=15; -update noar ti set v0='5YU92WTZXROC00E31GCF5R3WS1FRJJ1T0' where id=15; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='03M43BN1ND9B2JUU03B49IPTQE2LM7FA5' where id=15; -update noar ti set v1='03M43BN1ND9B2JUU03B49IPTQE2LM7FA5' where id=15; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='4XIQFZDX4MXHH6BHKVZVJN0ROTRPZFXEJ' where id=15; -update noar ti set v2='4XIQFZDX4MXHH6BHKVZVJN0ROTRPZFXEJ' where id=15; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='M2SGE4XHADZWBQ1Q5QBN5LIYP82JJDDHE' where id=15; -update noar ti set v3='M2SGE4XHADZWBQ1Q5QBN5LIYP82JJDDHE' where id=15; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='DRVDZI5ZFD3UFRDA7Y4EZSXU6KTEXM5QU' where id=16; -update noar ti set v0='DRVDZI5ZFD3UFRDA7Y4EZSXU6KTEXM5QU' where id=16; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='GH8OBG3N7IT91MR877SKTLM6DVZS9N9HL' where id=16; -update noar ti set v1='GH8OBG3N7IT91MR877SKTLM6DVZS9N9HL' where id=16; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='P6ZM3JF3NJHTYHCRRLT1BAINKHSJR42XO' where id=16; -update noar ti set v2='P6ZM3JF3NJHTYHCRRLT1BAINKHSJR42XO' where id=16; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='GC2LVNHRNJ0WY14FJLVKFHVU4WKD1P2WJ' where id=16; -update noar ti set v3='GC2LVNHRNJ0WY14FJLVKFHVU4WKD1P2WJ' where id=16; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='7DPKSYB9BNPQR6ZFXUXGAUW5AAM49F6G5' where id=17; -update noar ti set v0='7DPKSYB9BNPQR6ZFXUXGAUW5AAM49F6G5' where id=17; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='P5BHDAG1RH0P5HCM9584JBPXNM1MW4Z67' where id=17; -update noar ti set v1='P5BHDAG1RH0P5HCM9584JBPXNM1MW4Z67' where id=17; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='ZGR15VERBSHFBXOE0X3IDQ1MGOS1CILMK' where id=17; -update noar ti set v2='ZGR15VERBSHFBXOE0X3IDQ1MGOS1CILMK' where id=17; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='6SGXIXYGD6EBYVQMMNDTE5GN229LZ2XJM' where id=17; -update noar ti set v3='6SGXIXYGD6EBYVQMMNDTE5GN229LZ2XJM' where id=17; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='2WQZCHQZ6YWLS4MHVN7MAXSA3R603FGX3' where id=18; -update noar ti set v0='2WQZCHQZ6YWLS4MHVN7MAXSA3R603FGX3' where id=18; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='TNQEFHY5LKKX5JRH78N952QAUJ88ZFX3R' where id=18; -update noar ti set v1='TNQEFHY5LKKX5JRH78N952QAUJ88ZFX3R' where id=18; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='THRKPBKBBIB1IZO5CMSULQA73FOLUG540' where id=18; -update noar ti set v2='THRKPBKBBIB1IZO5CMSULQA73FOLUG540' where id=18; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='QZW6GAXQ41EIWZ841PIMWTHA7P05FFCWS' where id=18; -update noar ti set v3='QZW6GAXQ41EIWZ841PIMWTHA7P05FFCWS' where id=18; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='5EDU1258VE5LPJQRYTHZ8HIOZFQ81R2WN' where id=19; -update noar ti set v0='5EDU1258VE5LPJQRYTHZ8HIOZFQ81R2WN' where id=19; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='775SD126XX2YC689R3K1MHUWD7IDGXC8D' where id=19; -update noar ti set v1='775SD126XX2YC689R3K1MHUWD7IDGXC8D' where id=19; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='WGFIGIJ4TXCLVTDMHMMBOL9TYSJT2U5J7' where id=19; -update noar ti set v2='WGFIGIJ4TXCLVTDMHMMBOL9TYSJT2U5J7' where id=19; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='B9R4R8WVPSW8UJSLM5XFHDLR4TR2VFAOQ' where id=19; -update noar ti set v3='B9R4R8WVPSW8UJSLM5XFHDLR4TR2VFAOQ' where id=19; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='JLL0RRC526GSC0OZ81S18P5RF6Z693OAB' where id=20; -update noar ti set v0='JLL0RRC526GSC0OZ81S18P5RF6Z693OAB' where id=20; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='4CFN1V3SZHMB880GPEMN4OZVS7JUFKD7H' where id=20; -update noar ti set v1='4CFN1V3SZHMB880GPEMN4OZVS7JUFKD7H' where id=20; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='35QG2JL3N7FAXBV8VXBVNPWBYR9DFQK2J' where id=20; -update noar ti set v2='35QG2JL3N7FAXBV8VXBVNPWBYR9DFQK2J' where id=20; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='9OBSW8L1SSF2BH2HGKJVT1AJ3IUV2SV2T' where id=20; -update noar ti set v3='9OBSW8L1SSF2BH2HGKJVT1AJ3IUV2SV2T' where id=20; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='46WNV380G1UCHVV2Y088QPDKW2XH7IQ34' where id=21; -update noar ti set v0='46WNV380G1UCHVV2Y088QPDKW2XH7IQ34' where id=21; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='UT74SRDGJ162PST8KYOHLNR9NBX4FDNZB' where id=21; -update noar ti set v1='UT74SRDGJ162PST8KYOHLNR9NBX4FDNZB' where id=21; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='PFNMIR36SAP05GKA8V84QPAEXFFXTJF1L' where id=21; -update noar ti set v2='PFNMIR36SAP05GKA8V84QPAEXFFXTJF1L' where id=21; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='8JPG5Z2F7Q82TXDAKY5XV5833VAIOXGS5' where id=21; -update noar ti set v3='8JPG5Z2F7Q82TXDAKY5XV5833VAIOXGS5' where id=21; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='0UKXDDT0GGG902TJUTEXP3WZX9YGUGI2H' where id=22; -update noar ti set v0='0UKXDDT0GGG902TJUTEXP3WZX9YGUGI2H' where id=22; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='KOJB5S4VNENEDL295MJCKSG0U6EWK2PCU' where id=22; -update noar ti set v1='KOJB5S4VNENEDL295MJCKSG0U6EWK2PCU' where id=22; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='U0V3DCABX2ZDQ6RSB5PFLFNY2J01GCK6F' where id=22; -update noar ti set v2='U0V3DCABX2ZDQ6RSB5PFLFNY2J01GCK6F' where id=22; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='0Z3TPX143JBX447B6NJ3LWYMLZ00BBWKK' where id=22; -update noar ti set v3='0Z3TPX143JBX447B6NJ3LWYMLZ00BBWKK' where id=22; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='ZY8EE75LVSXW4AU3EIL3B985J4TOH5IO1' where id=23; -update noar ti set v0='ZY8EE75LVSXW4AU3EIL3B985J4TOH5IO1' where id=23; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='D5FD17Z0K5GAPV0CMS50B2IV75V4IUXZQ' where id=23; -update noar ti set v1='D5FD17Z0K5GAPV0CMS50B2IV75V4IUXZQ' where id=23; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='7MUR2EHV1TRV16HNTPJ00LOO01798AFNB' where id=23; -update noar ti set v2='7MUR2EHV1TRV16HNTPJ00LOO01798AFNB' where id=23; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='AREQ7QKLJF6ZN0Z0UK55U2MSYDAYELT23' where id=23; -update noar ti set v3='AREQ7QKLJF6ZN0Z0UK55U2MSYDAYELT23' where id=23; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='4Q504T13MWXR6ULK0YUWCRI4G3V50P6PF' where id=24; -update noar ti set v0='4Q504T13MWXR6ULK0YUWCRI4G3V50P6PF' where id=24; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='UK541KYG7R7XHGMES2U39VYTK3QMIP2I1' where id=24; -update noar ti set v1='UK541KYG7R7XHGMES2U39VYTK3QMIP2I1' where id=24; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='6BXFG7ZUBWMWKFYU4HX4XCXFBQEGU6ARA' where id=24; -update noar ti set v2='6BXFG7ZUBWMWKFYU4HX4XCXFBQEGU6ARA' where id=24; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='UXGAOQUET56F4Q22WM3HO3RR8STL3BTGX' where id=24; -update noar ti set v3='UXGAOQUET56F4Q22WM3HO3RR8STL3BTGX' where id=24; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='6MYJ4932OBD45L7YC3L5MRMS2PK3X4ODU' where id=25; -update noar ti set v0='6MYJ4932OBD45L7YC3L5MRMS2PK3X4ODU' where id=25; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='JVTGCDRKTA4GXTGEKXDFDV7PKMOGI9IG9' where id=25; -update noar ti set v1='JVTGCDRKTA4GXTGEKXDFDV7PKMOGI9IG9' where id=25; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='SRXI5GYYDI859KJSLAONF19LMWABF8WYK' where id=25; -update noar ti set v2='SRXI5GYYDI859KJSLAONF19LMWABF8WYK' where id=25; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='EFXY8QR9T5F65EG2W2R9JHT8WXCF0EK87' where id=25; -update noar ti set v3='EFXY8QR9T5F65EG2W2R9JHT8WXCF0EK87' where id=25; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='NSO4PI7CNZW5A428BJRH10CJBEH5PZ47Z' where id=26; -update noar ti set v0='NSO4PI7CNZW5A428BJRH10CJBEH5PZ47Z' where id=26; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='8KRE4HS895B1E53HZFOUC1PHZSKU1E8TD' where id=26; -update noar ti set v1='8KRE4HS895B1E53HZFOUC1PHZSKU1E8TD' where id=26; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='M2RROHXDEYBF08RUB7VVED0WMY4FPVDEA' where id=26; -update noar ti set v2='M2RROHXDEYBF08RUB7VVED0WMY4FPVDEA' where id=26; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='AMIARU95LSVVGGSA9GMRHMWR81NTHDJ2S' where id=26; -update noar ti set v3='AMIARU95LSVVGGSA9GMRHMWR81NTHDJ2S' where id=26; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='1NGJS2DZYT851F7V7Q9EN69E5OG6NI2GS' where id=27; -update noar ti set v0='1NGJS2DZYT851F7V7Q9EN69E5OG6NI2GS' where id=27; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='KDHJFRBIFTSSL50L43SRL8NIEH4AC29TV' where id=27; -update noar ti set v1='KDHJFRBIFTSSL50L43SRL8NIEH4AC29TV' where id=27; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='UWNFRLAWJFIE8HTGNVZSLJV8UWFOWYVGM' where id=27; -update noar ti set v2='UWNFRLAWJFIE8HTGNVZSLJV8UWFOWYVGM' where id=27; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='CM9KK9IA3R0JS36E4OPKN4X5P3J3QGXGW' where id=27; -update noar ti set v3='CM9KK9IA3R0JS36E4OPKN4X5P3J3QGXGW' where id=27; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='WXVL0VAU46AEAECLL4IWODIURRN1NRJ61' where id=28; -update noar ti set v0='WXVL0VAU46AEAECLL4IWODIURRN1NRJ61' where id=28; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='FLNXU7KAEBYIA1QVIPGAC0HQGA7CGYB97' where id=28; -update noar ti set v1='FLNXU7KAEBYIA1QVIPGAC0HQGA7CGYB97' where id=28; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='HZ5SSKV25ICEW6MOX1L5FTDCP5LKCTXXT' where id=28; -update noar ti set v2='HZ5SSKV25ICEW6MOX1L5FTDCP5LKCTXXT' where id=28; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='XNGMLS5BJ2IOZM3O0ZN5RQ5OU0O53KFQI' where id=28; -update noar ti set v3='XNGMLS5BJ2IOZM3O0ZN5RQ5OU0O53KFQI' where id=28; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='8X5BD0AQOLFSQRBAUMWH4ZH7KMOJMPM0X' where id=29; -update noar ti set v0='8X5BD0AQOLFSQRBAUMWH4ZH7KMOJMPM0X' where id=29; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='VY2VPMVG4EY938I04X0J8QQJVY5Z82ZCF' where id=29; -update noar ti set v1='VY2VPMVG4EY938I04X0J8QQJVY5Z82ZCF' where id=29; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='2DWL9ZHLGQKW5FX2WWLHHMXIECOP8KX5H' where id=29; -update noar ti set v2='2DWL9ZHLGQKW5FX2WWLHHMXIECOP8KX5H' where id=29; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='B8YMT03HGSMR4G1YQL64ZF89BFMOA3KVI' where id=29; -update noar ti set v3='B8YMT03HGSMR4G1YQL64ZF89BFMOA3KVI' where id=29; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='9TAHULKNSN78RRNNZCLZUVYNR15WBXPQ4' where id=30; -update noar ti set v0='9TAHULKNSN78RRNNZCLZUVYNR15WBXPQ4' where id=30; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='S90UAF4G65THLKJ32ZYHA1Q5ZMLOIK6ZL' where id=30; -update noar ti set v1='S90UAF4G65THLKJ32ZYHA1Q5ZMLOIK6ZL' where id=30; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='XQ3OENJ87EJGBGVR39SSBBPRPNDO7XOS5' where id=30; -update noar ti set v2='XQ3OENJ87EJGBGVR39SSBBPRPNDO7XOS5' where id=30; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='5M4X6EDWDA3VFBBCS5UMYGVL9BMNN0JD4' where id=30; -update noar ti set v3='5M4X6EDWDA3VFBBCS5UMYGVL9BMNN0JD4' where id=30; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='G9162K93ZFX25S2DA7WXGQPDTFWLWLUBZ' where id=31; -update noar ti set v0='G9162K93ZFX25S2DA7WXGQPDTFWLWLUBZ' where id=31; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='BPODCXXZ7O8GFZB9F6HNFU8E8JO5I825K' where id=31; -update noar ti set v1='BPODCXXZ7O8GFZB9F6HNFU8E8JO5I825K' where id=31; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='RPWSOAON5CGL6WZINYDISF7TCGITG2N4H' where id=31; -update noar ti set v2='RPWSOAON5CGL6WZINYDISF7TCGITG2N4H' where id=31; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='X9VFTE9H7U6VZ2XGY1Z190UIAQ34VWS7K' where id=31; -update noar ti set v3='X9VFTE9H7U6VZ2XGY1Z190UIAQ34VWS7K' where id=31; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='MSPBDFB032UUMC2FJLZFOUECQ6X9SY6FN' where id=32; -update noar ti set v0='MSPBDFB032UUMC2FJLZFOUECQ6X9SY6FN' where id=32; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='7E975JP7W479XYPVAAFVAM77KWJR2WDV4' where id=32; -update noar ti set v1='7E975JP7W479XYPVAAFVAM77KWJR2WDV4' where id=32; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='D0FKVNIBA7C0MRDG1YSW5LE1GRCGXIPG8' where id=32; -update noar ti set v2='D0FKVNIBA7C0MRDG1YSW5LE1GRCGXIPG8' where id=32; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='334N2FM0WB4O6SDH99VQTZNOGG21TOH9B' where id=32; -update noar ti set v3='334N2FM0WB4O6SDH99VQTZNOGG21TOH9B' where id=32; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='DCCZEXYNV3379AN2L2VM7FSRC15ZZM5D7' where id=33; -update noar ti set v0='DCCZEXYNV3379AN2L2VM7FSRC15ZZM5D7' where id=33; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='0M67C8QUZIA52ZKYHCMNP94WBU463XIIF' where id=33; -update noar ti set v1='0M67C8QUZIA52ZKYHCMNP94WBU463XIIF' where id=33; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='AIU7JVPC24UL6ZDCKG8XCQZSF66MD4CWI' where id=33; -update noar ti set v2='AIU7JVPC24UL6ZDCKG8XCQZSF66MD4CWI' where id=33; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='JI1W62A1K1IOZ9MY4PMC41RR15RW9K8SI' where id=33; -update noar ti set v3='JI1W62A1K1IOZ9MY4PMC41RR15RW9K8SI' where id=33; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='K3KOWVVOQD2SF82ZQ0FJ8M84JWR63GW7N' where id=34; -update noar ti set v0='K3KOWVVOQD2SF82ZQ0FJ8M84JWR63GW7N' where id=34; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='3RYTC4FST2JNIPZZLY3BVM6DNSV1BYGJO' where id=34; -update noar ti set v1='3RYTC4FST2JNIPZZLY3BVM6DNSV1BYGJO' where id=34; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='PGO9LB9WQQV6I18NB79CIVAOMW1UA5JG5' where id=34; -update noar ti set v2='PGO9LB9WQQV6I18NB79CIVAOMW1UA5JG5' where id=34; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='WXTST0S0NO9Q2XVKUFNLKNOHLPVR5WMW3' where id=34; -update noar ti set v3='WXTST0S0NO9Q2XVKUFNLKNOHLPVR5WMW3' where id=34; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='QCYAPRWZL02L8P0JHB9OYXZZUK7DKEMKZ' where id=35; -update noar ti set v0='QCYAPRWZL02L8P0JHB9OYXZZUK7DKEMKZ' where id=35; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='QX6HNVX1TSMS3KDCTS2UDMD01OSBHGSQA' where id=35; -update noar ti set v1='QX6HNVX1TSMS3KDCTS2UDMD01OSBHGSQA' where id=35; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='9A6BAW9ZMGUU1X16TWO30NZCKWD4C06TQ' where id=35; -update noar ti set v2='9A6BAW9ZMGUU1X16TWO30NZCKWD4C06TQ' where id=35; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='K6S6JOOP7RYSTYT4VEXL71VOGFBY4IPJD' where id=35; -update noar ti set v3='K6S6JOOP7RYSTYT4VEXL71VOGFBY4IPJD' where id=35; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='RI4ANVX8PMG3JB152YV1GBHGC4TL5E5SN' where id=36; -update noar ti set v0='RI4ANVX8PMG3JB152YV1GBHGC4TL5E5SN' where id=36; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='YHU9HEQYPBN5FGJZ74CBMBHAS24PMSCIE' where id=36; -update noar ti set v1='YHU9HEQYPBN5FGJZ74CBMBHAS24PMSCIE' where id=36; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='NWPLUBLTD2UXNG1IDR1UZAFE4VHDYDJPV' where id=36; -update noar ti set v2='NWPLUBLTD2UXNG1IDR1UZAFE4VHDYDJPV' where id=36; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='3J7QSZA1789TZYPWLD5BBHY8VPBI8DZLX' where id=36; -update noar ti set v3='3J7QSZA1789TZYPWLD5BBHY8VPBI8DZLX' where id=36; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='2T7IMNEKKTKT5UPRSSPK1868D0IAPWCVP' where id=37; -update noar ti set v0='2T7IMNEKKTKT5UPRSSPK1868D0IAPWCVP' where id=37; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='G2VKZN58QXC9K7DDT0JGXQDLWIAD0SJF1' where id=37; -update noar ti set v1='G2VKZN58QXC9K7DDT0JGXQDLWIAD0SJF1' where id=37; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='DJPEITEJ6M70B1MWMRIAXUIGQGTFOYYX7' where id=37; -update noar ti set v2='DJPEITEJ6M70B1MWMRIAXUIGQGTFOYYX7' where id=37; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='62XLPFM3EUXBUEP4FBM4X7I6I08NMWXSM' where id=37; -update noar ti set v3='62XLPFM3EUXBUEP4FBM4X7I6I08NMWXSM' where id=37; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='R912P2HF5EHVFY6OYWY328BV0MJWIYB02' where id=38; -update noar ti set v0='R912P2HF5EHVFY6OYWY328BV0MJWIYB02' where id=38; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='ITQL0YP43X806V16F60HUPA0FCKKDEC5D' where id=38; -update noar ti set v1='ITQL0YP43X806V16F60HUPA0FCKKDEC5D' where id=38; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='3MVKMCM37ET5Y3UJDMMS6885EM079QB3Z' where id=38; -update noar ti set v2='3MVKMCM37ET5Y3UJDMMS6885EM079QB3Z' where id=38; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='VMRBAP9TCGCN6X6FRBF5TM1JUMANKD9M6' where id=38; -update noar ti set v3='VMRBAP9TCGCN6X6FRBF5TM1JUMANKD9M6' where id=38; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='DT5E4D9CD7UG4RRZDU3NTGRGWLU8DREYP' where id=39; -update noar ti set v0='DT5E4D9CD7UG4RRZDU3NTGRGWLU8DREYP' where id=39; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='L9GU0DO74KS50X401JR3Q0A8WNUJ5IPEX' where id=39; -update noar ti set v1='L9GU0DO74KS50X401JR3Q0A8WNUJ5IPEX' where id=39; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='FA0WDNHT4UL3IMNHXK7OH3UKKHE1RX8N8' where id=39; -update noar ti set v2='FA0WDNHT4UL3IMNHXK7OH3UKKHE1RX8N8' where id=39; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='IFW24W1X1BB8UTD2VSQGK017K8OHXUW56' where id=39; -update noar ti set v3='IFW24W1X1BB8UTD2VSQGK017K8OHXUW56' where id=39; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='MKJKE3COIAQ3A67Y0RYOHOLFKDLL9GWAJ' where id=40; -update noar ti set v0='MKJKE3COIAQ3A67Y0RYOHOLFKDLL9GWAJ' where id=40; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='GLID9S2KYZB9ACCUWPYKMEDXWP7TG9MFE' where id=40; -update noar ti set v1='GLID9S2KYZB9ACCUWPYKMEDXWP7TG9MFE' where id=40; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='ST2VEUTOE96PSUJDSE8PEQRMH8YB35CTM' where id=40; -update noar ti set v2='ST2VEUTOE96PSUJDSE8PEQRMH8YB35CTM' where id=40; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='A3XJVUHBILK9OHEPUD57RUIRZNVYLG63S' where id=40; -update noar ti set v3='A3XJVUHBILK9OHEPUD57RUIRZNVYLG63S' where id=40; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='3UWR1YYR5HS6ZDU6MRQI7Y15UE24DK2S3' where id=41; -update noar ti set v0='3UWR1YYR5HS6ZDU6MRQI7Y15UE24DK2S3' where id=41; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='VAA4210P14672GH4DM6L0ECZYZ09OSDW8' where id=41; -update noar ti set v1='VAA4210P14672GH4DM6L0ECZYZ09OSDW8' where id=41; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='B8F0TP4VR56U0LQ03DFHHK4JUJ9UB7ENT' where id=41; -update noar ti set v2='B8F0TP4VR56U0LQ03DFHHK4JUJ9UB7ENT' where id=41; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='FFQWF8RJT1PNQIEI57WSVIXHQ2LKTXCUP' where id=41; -update noar ti set v3='FFQWF8RJT1PNQIEI57WSVIXHQ2LKTXCUP' where id=41; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='O6VWMNB08WSKPY52C23PJ0EMB12D7M9ZA' where id=42; -update noar ti set v0='O6VWMNB08WSKPY52C23PJ0EMB12D7M9ZA' where id=42; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='XBXLZOAH7VXWIKBR2LWXG1NI53CZIXKQS' where id=42; -update noar ti set v1='XBXLZOAH7VXWIKBR2LWXG1NI53CZIXKQS' where id=42; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='ABJXY62V528OILRK03WD3Q9QBLFI1B28P' where id=42; -update noar ti set v2='ABJXY62V528OILRK03WD3Q9QBLFI1B28P' where id=42; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='AOXKZHVQHCA41PBLJJNSVEO2UEEFG2JK3' where id=42; -update noar ti set v3='AOXKZHVQHCA41PBLJJNSVEO2UEEFG2JK3' where id=42; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='9LHIQC9TVMFHHFI32KY0OS04GDZ1BTH0L' where id=43; -update noar ti set v0='9LHIQC9TVMFHHFI32KY0OS04GDZ1BTH0L' where id=43; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='RTS18K1IEHJNSA5NRQOZB4HAYBRZ0KJEV' where id=43; -update noar ti set v1='RTS18K1IEHJNSA5NRQOZB4HAYBRZ0KJEV' where id=43; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='V5XQW02KVYP37BSQA5E8MOMOT9VTMJ40I' where id=43; -update noar ti set v2='V5XQW02KVYP37BSQA5E8MOMOT9VTMJ40I' where id=43; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='5Y4B39JWO22GQ2N9P4EO1TLXTWDFT0DEN' where id=43; -update noar ti set v3='5Y4B39JWO22GQ2N9P4EO1TLXTWDFT0DEN' where id=43; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='PGKK16QDOOCE96HKCVBLEMDCKVG9V1JMO' where id=44; -update noar ti set v0='PGKK16QDOOCE96HKCVBLEMDCKVG9V1JMO' where id=44; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='78LW6GXX6Q16BPOVMOYSTYJWYHZ30TR8T' where id=44; -update noar ti set v1='78LW6GXX6Q16BPOVMOYSTYJWYHZ30TR8T' where id=44; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='QEAO4FTMGX0X009R64GRNAC0NRY8T0GOO' where id=44; -update noar ti set v2='QEAO4FTMGX0X009R64GRNAC0NRY8T0GOO' where id=44; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='2X16FM6TI5P79G3II2UQSLY1OVSAT12Q1' where id=44; -update noar ti set v3='2X16FM6TI5P79G3II2UQSLY1OVSAT12Q1' where id=44; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='ESXKX6USB9XY4FYXSD88PQI718391HAGN' where id=45; -update noar ti set v0='ESXKX6USB9XY4FYXSD88PQI718391HAGN' where id=45; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='0P2YNW03FRTHLLQ9FT78C37AUZ1TBV87F' where id=45; -update noar ti set v1='0P2YNW03FRTHLLQ9FT78C37AUZ1TBV87F' where id=45; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='413UKX649L2MF40T6HAZDMA9BESDN115E' where id=45; -update noar ti set v2='413UKX649L2MF40T6HAZDMA9BESDN115E' where id=45; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='2Z7REP7QMAKJAVBAWMVGLLFVOGVC4ADUP' where id=45; -update noar ti set v3='2Z7REP7QMAKJAVBAWMVGLLFVOGVC4ADUP' where id=45; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='8KI3Q799YHUYLMA944I8S0JVXGMXLVZSS' where id=46; -update noar ti set v0='8KI3Q799YHUYLMA944I8S0JVXGMXLVZSS' where id=46; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='TVI3CYJHZUT2AZSP876R33HS83Z5TPAW5' where id=46; -update noar ti set v1='TVI3CYJHZUT2AZSP876R33HS83Z5TPAW5' where id=46; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='RUQ9TZZR1NSFJVTK4220PVZXY8HNFOHQO' where id=46; -update noar ti set v2='RUQ9TZZR1NSFJVTK4220PVZXY8HNFOHQO' where id=46; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='MFMAMIJELQQ8IC9LCYM7UQ4MFXKESN5KN' where id=46; -update noar ti set v3='MFMAMIJELQQ8IC9LCYM7UQ4MFXKESN5KN' where id=46; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='8BYHXNU3NL88TA0WKJFIR4CV28YSEQMW3' where id=47; -update noar ti set v0='8BYHXNU3NL88TA0WKJFIR4CV28YSEQMW3' where id=47; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='QM4BZK70S004B16MVPFPE4MIPYNXEFSX0' where id=47; -update noar ti set v1='QM4BZK70S004B16MVPFPE4MIPYNXEFSX0' where id=47; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='S65PJ06W6S1K6TM82Y2T9FJV161KFAGT5' where id=47; -update noar ti set v2='S65PJ06W6S1K6TM82Y2T9FJV161KFAGT5' where id=47; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='YY6S5Y9EJ9NGN33SCYG3CQOE7H21UU1F0' where id=47; -update noar ti set v3='YY6S5Y9EJ9NGN33SCYG3CQOE7H21UU1F0' where id=47; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='TUSZUPWUJULY4NXRJJ654XQZ71REPCN62' where id=48; -update noar ti set v0='TUSZUPWUJULY4NXRJJ654XQZ71REPCN62' where id=48; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='OZU1HYIF3Y0T71NCTDFSSDMLEE6LLQ5GV' where id=48; -update noar ti set v1='OZU1HYIF3Y0T71NCTDFSSDMLEE6LLQ5GV' where id=48; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='DDOI7O9NTATXXM2FOBFP7D28YQQ2FDWSN' where id=48; -update noar ti set v2='DDOI7O9NTATXXM2FOBFP7D28YQQ2FDWSN' where id=48; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='C44MUD0KVWB2QXDWPR0TFU2AV56XF67LF' where id=48; -update noar ti set v3='C44MUD0KVWB2QXDWPR0TFU2AV56XF67LF' where id=48; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='MN5ZI8YZBWJJS8M9QBX25IU9XCNJHOMKM' where id=49; -update noar ti set v0='MN5ZI8YZBWJJS8M9QBX25IU9XCNJHOMKM' where id=49; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='5V1ER3RIF1HHF1UQ6KKOSH9MK7JV1XDP6' where id=49; -update noar ti set v1='5V1ER3RIF1HHF1UQ6KKOSH9MK7JV1XDP6' where id=49; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='JPVX4KE0GDYVTMOXZ8YWXHHFTZJ5A4LQR' where id=49; -update noar ti set v2='JPVX4KE0GDYVTMOXZ8YWXHHFTZJ5A4LQR' where id=49; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='1XWYOG4TBTULZZ8FH73O0WPQEEFCJEZOV' where id=49; -update noar ti set v3='1XWYOG4TBTULZZ8FH73O0WPQEEFCJEZOV' where id=49; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='COMYTADDRCBA0W7ORYHNUS7GYSQ44CPHD' where id=50; -update noar ti set v0='COMYTADDRCBA0W7ORYHNUS7GYSQ44CPHD' where id=50; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='UQGLOZP913RT96TX8PO1T7TEY9SNZA04B' where id=50; -update noar ti set v1='UQGLOZP913RT96TX8PO1T7TEY9SNZA04B' where id=50; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='XWFLBAJN7VEEB18QCDXLLFIXBTHUHQYYU' where id=50; -update noar ti set v2='XWFLBAJN7VEEB18QCDXLLFIXBTHUHQYYU' where id=50; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='JCR68CBYY518S9CUV1H67WZNZEW4VTXIH' where id=50; -update noar ti set v3='JCR68CBYY518S9CUV1H67WZNZEW4VTXIH' where id=50; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='AHARHQO29A125TK4DYNP1XM5NOHY98FCG' where id=51; -update noar ti set v0='AHARHQO29A125TK4DYNP1XM5NOHY98FCG' where id=51; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='T7BRSPTBZS5O6B6A3CNZSV4G2AZG9V41N' where id=51; -update noar ti set v1='T7BRSPTBZS5O6B6A3CNZSV4G2AZG9V41N' where id=51; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='VFGQCLMOGIZ5UMPCNE2YE0SILQ57P06W8' where id=51; -update noar ti set v2='VFGQCLMOGIZ5UMPCNE2YE0SILQ57P06W8' where id=51; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='YCGUIHJKGKH5I0A2ORBVSR8ROU9WA5TD8' where id=51; -update noar ti set v3='YCGUIHJKGKH5I0A2ORBVSR8ROU9WA5TD8' where id=51; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='BW5Y1UJMS97MDH7AXMSMJLCMOQR873JYP' where id=52; -update noar ti set v0='BW5Y1UJMS97MDH7AXMSMJLCMOQR873JYP' where id=52; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='MSNP8YLE46R6VDXWDI6ULZ6IUSQGYCREI' where id=52; -update noar ti set v1='MSNP8YLE46R6VDXWDI6ULZ6IUSQGYCREI' where id=52; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='LY5M8T1B2DAXX75JBXSX0OMJC4R7OWRSH' where id=52; -update noar ti set v2='LY5M8T1B2DAXX75JBXSX0OMJC4R7OWRSH' where id=52; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='WROEU2PQTO9J7FL6Z05FSA0TUJK4WUYTW' where id=52; -update noar ti set v3='WROEU2PQTO9J7FL6Z05FSA0TUJK4WUYTW' where id=52; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='RVGWA2P5SZ0V3WGJA20Z2AGZ14WNNX3MF' where id=53; -update noar ti set v0='RVGWA2P5SZ0V3WGJA20Z2AGZ14WNNX3MF' where id=53; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='MTEA9XO92VAPSAQT0IEZB21MM0JCDUBLB' where id=53; -update noar ti set v1='MTEA9XO92VAPSAQT0IEZB21MM0JCDUBLB' where id=53; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='7GH7XOZXQ41PYCL1CS6JZSNZGWVI72LWC' where id=53; -update noar ti set v2='7GH7XOZXQ41PYCL1CS6JZSNZGWVI72LWC' where id=53; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='QUBRHSONW9IX0MKCQ4UZM700OLBG3830N' where id=53; -update noar ti set v3='QUBRHSONW9IX0MKCQ4UZM700OLBG3830N' where id=53; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='ZVTO6EZ70ZROU9PUPUBVCTYG2DCN3LXPS' where id=54; -update noar ti set v0='ZVTO6EZ70ZROU9PUPUBVCTYG2DCN3LXPS' where id=54; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='URWVN56QBJE74QSR8MT644SPT4GWQKB50' where id=54; -update noar ti set v1='URWVN56QBJE74QSR8MT644SPT4GWQKB50' where id=54; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='TX79HNUJLAEOW6YH681LZ3TZPVF3QVSY7' where id=54; -update noar ti set v2='TX79HNUJLAEOW6YH681LZ3TZPVF3QVSY7' where id=54; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='F32NHURS5QZ7UCMW1ZLLMEJN4L4XJNBO9' where id=54; -update noar ti set v3='F32NHURS5QZ7UCMW1ZLLMEJN4L4XJNBO9' where id=54; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='FRMSA94HIAGIMN95QNHYDUZIGCVEPDV39' where id=55; -update noar ti set v0='FRMSA94HIAGIMN95QNHYDUZIGCVEPDV39' where id=55; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='SKKXZPI5WKBJRWLZGRAI5H7GCPVS8WL2X' where id=55; -update noar ti set v1='SKKXZPI5WKBJRWLZGRAI5H7GCPVS8WL2X' where id=55; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='GYGJ40LYFGSDS3ZE9TKXDRLR4OOTXP4NE' where id=55; -update noar ti set v2='GYGJ40LYFGSDS3ZE9TKXDRLR4OOTXP4NE' where id=55; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='11RRKQMO6DX54L4V09SBSHVKNSWOUFO5Y' where id=55; -update noar ti set v3='11RRKQMO6DX54L4V09SBSHVKNSWOUFO5Y' where id=55; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='4ZV817AXJ3UNA0SO6S6P188CWN9GIW5CA' where id=56; -update noar ti set v0='4ZV817AXJ3UNA0SO6S6P188CWN9GIW5CA' where id=56; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='TNYVAYCVX998HMIA8NH2TQ47CSQK5IX5W' where id=56; -update noar ti set v1='TNYVAYCVX998HMIA8NH2TQ47CSQK5IX5W' where id=56; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='ESZDWV23P3PQ10WXB5EDPTBEHFDA1E5DX' where id=56; -update noar ti set v2='ESZDWV23P3PQ10WXB5EDPTBEHFDA1E5DX' where id=56; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='381KXP22XWMN41GJVGJNGHKZRELKOQNHZ' where id=56; -update noar ti set v3='381KXP22XWMN41GJVGJNGHKZRELKOQNHZ' where id=56; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='NPNJBVTCADPVI4M0R1VTONQS7WXS3EH81' where id=57; -update noar ti set v0='NPNJBVTCADPVI4M0R1VTONQS7WXS3EH81' where id=57; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='AQBDV4A6BD3A3YAPKSBL7CN9Z6IBNUW82' where id=57; -update noar ti set v1='AQBDV4A6BD3A3YAPKSBL7CN9Z6IBNUW82' where id=57; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='380IWX6KBPG4HLZCRGADNXBTIZG53ABFD' where id=57; -update noar ti set v2='380IWX6KBPG4HLZCRGADNXBTIZG53ABFD' where id=57; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='G18OJAL461G4Q5HSKFKPXTU09QE2RLMY3' where id=57; -update noar ti set v3='G18OJAL461G4Q5HSKFKPXTU09QE2RLMY3' where id=57; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='DDN00LUKD3OEHQV4WQJ2HWDFYSENJCD5X' where id=58; -update noar ti set v0='DDN00LUKD3OEHQV4WQJ2HWDFYSENJCD5X' where id=58; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='3SYGNRCXS4XLTKLEZ04HUN9Y5M4UVZ4HM' where id=58; -update noar ti set v1='3SYGNRCXS4XLTKLEZ04HUN9Y5M4UVZ4HM' where id=58; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='3ISJ1V03VYDPPSLUWGFO9N0FTT89EZ0PT' where id=58; -update noar ti set v2='3ISJ1V03VYDPPSLUWGFO9N0FTT89EZ0PT' where id=58; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='BJEU63TZFNMVR7RDEQ0JPLVPAUN0LJVBY' where id=58; -update noar ti set v3='BJEU63TZFNMVR7RDEQ0JPLVPAUN0LJVBY' where id=58; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='LXEOXDHBGQSWPG70WI0JZZSLV1QU4VHDW' where id=59; -update noar ti set v0='LXEOXDHBGQSWPG70WI0JZZSLV1QU4VHDW' where id=59; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='QDIHTVPP9GXKS21JSH5ZW3JJ2NWE01WO2' where id=59; -update noar ti set v1='QDIHTVPP9GXKS21JSH5ZW3JJ2NWE01WO2' where id=59; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='FN8IF6ASEXAHAGEYX4EQJ8R3S72IMXY2M' where id=59; -update noar ti set v2='FN8IF6ASEXAHAGEYX4EQJ8R3S72IMXY2M' where id=59; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='886L60NO5VI7TTR7V4WDLOOIWBJ68BR6S' where id=59; -update noar ti set v3='886L60NO5VI7TTR7V4WDLOOIWBJ68BR6S' where id=59; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='E70TRHIS59ZZ4NQ59SHATDXZLOTEWLQ3R' where id=60; -update noar ti set v0='E70TRHIS59ZZ4NQ59SHATDXZLOTEWLQ3R' where id=60; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='BTTY4QM632NISEGAC7TA99Q41SHCB1WUC' where id=60; -update noar ti set v1='BTTY4QM632NISEGAC7TA99Q41SHCB1WUC' where id=60; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='IR32QC45X79KNWGGM095VO1J65S5A0TIV' where id=60; -update noar ti set v2='IR32QC45X79KNWGGM095VO1J65S5A0TIV' where id=60; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='T9YGLSNG8J7NHECBA5ESYDLOX74UQFA1G' where id=60; -update noar ti set v3='T9YGLSNG8J7NHECBA5ESYDLOX74UQFA1G' where id=60; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='ZFS6WYHV514XOXZISNCZL1EZA1U739PL6' where id=61; -update noar ti set v0='ZFS6WYHV514XOXZISNCZL1EZA1U739PL6' where id=61; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='5OOH8FMYR0650HTE6M59IWDEBOY9URERS' where id=61; -update noar ti set v1='5OOH8FMYR0650HTE6M59IWDEBOY9URERS' where id=61; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='Q2189FFZX3MR7DGWYRFMGK577WJLXLXO2' where id=61; -update noar ti set v2='Q2189FFZX3MR7DGWYRFMGK577WJLXLXO2' where id=61; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='30MPB9H0JZ2H5FPOZKS8F4OE7FWL3HCO4' where id=61; -update noar ti set v3='30MPB9H0JZ2H5FPOZKS8F4OE7FWL3HCO4' where id=61; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='BMH1ZK3GYMCOFENW8J4BO0Q70EFTGI92F' where id=62; -update noar ti set v0='BMH1ZK3GYMCOFENW8J4BO0Q70EFTGI92F' where id=62; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='QJBBTGAPNAX4M8J4WRJ3CED3IDCJ1C7UV' where id=62; -update noar ti set v1='QJBBTGAPNAX4M8J4WRJ3CED3IDCJ1C7UV' where id=62; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='8I7NGFA0NIB64E1CH2GRBBN0SP8ZU8KBV' where id=62; -update noar ti set v2='8I7NGFA0NIB64E1CH2GRBBN0SP8ZU8KBV' where id=62; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='RV0JH7XZNJM5OGU57SOQCP6KDZU0TSWNA' where id=62; -update noar ti set v3='RV0JH7XZNJM5OGU57SOQCP6KDZU0TSWNA' where id=62; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='8Q9EP1AH3V6CIVJDAPC5RONU6A49Z4UBM' where id=63; -update noar ti set v0='8Q9EP1AH3V6CIVJDAPC5RONU6A49Z4UBM' where id=63; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='DH8XT3SKF1VEML9GBIFVN5KDP0FDYUADL' where id=63; -update noar ti set v1='DH8XT3SKF1VEML9GBIFVN5KDP0FDYUADL' where id=63; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='T2LG8QNMINA7C1JCTQ8LSBLJ42QUGJ9VD' where id=63; -update noar ti set v2='T2LG8QNMINA7C1JCTQ8LSBLJ42QUGJ9VD' where id=63; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='SWR9BMKD2EQPIMFW6PEXNZBUHURY0KTKU' where id=63; -update noar ti set v3='SWR9BMKD2EQPIMFW6PEXNZBUHURY0KTKU' where id=63; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='3HOGCDN135GHCOLTLM8D2GUPTCJSH0UUP' where id=64; -update noar ti set v0='3HOGCDN135GHCOLTLM8D2GUPTCJSH0UUP' where id=64; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='8KL96S41VAINAHN8M5JU5Q4A6XCF7M4BD' where id=64; -update noar ti set v1='8KL96S41VAINAHN8M5JU5Q4A6XCF7M4BD' where id=64; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='KSJQ1OUGKWBN4J9JVGDRAGYHI02F65VN5' where id=64; -update noar ti set v2='KSJQ1OUGKWBN4J9JVGDRAGYHI02F65VN5' where id=64; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='0FF9J862P6PKCZE6A3APEK2QU5LIXY356' where id=64; -update noar ti set v3='0FF9J862P6PKCZE6A3APEK2QU5LIXY356' where id=64; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='J7CRG2XMNEB02IKV1ARDDK70N6Y0UIJBX' where id=65; -update noar ti set v0='J7CRG2XMNEB02IKV1ARDDK70N6Y0UIJBX' where id=65; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='QKDDHXYBZI0R27QFH6CWEN4GSWZWFNGAP' where id=65; -update noar ti set v1='QKDDHXYBZI0R27QFH6CWEN4GSWZWFNGAP' where id=65; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='P4DCWQ4ETGV59I4TUCN7OJTFZ79Y2WNZF' where id=65; -update noar ti set v2='P4DCWQ4ETGV59I4TUCN7OJTFZ79Y2WNZF' where id=65; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='HHSNM8AL42VZ1QD26ITZB24JUPIK90H2H' where id=65; -update noar ti set v3='HHSNM8AL42VZ1QD26ITZB24JUPIK90H2H' where id=65; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='U7QDG74C0O9E7RJ2B0NI7ZNKSMMP319FR' where id=66; -update noar ti set v0='U7QDG74C0O9E7RJ2B0NI7ZNKSMMP319FR' where id=66; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='21LZ0O6I11PGZ5Q9PU54AEWWH2DQCB42M' where id=66; -update noar ti set v1='21LZ0O6I11PGZ5Q9PU54AEWWH2DQCB42M' where id=66; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='XWEQ9A7RK3D3U4A6OGSUYJEY9F8857ODF' where id=66; -update noar ti set v2='XWEQ9A7RK3D3U4A6OGSUYJEY9F8857ODF' where id=66; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='722HYSC3XSUVC4FCDDU62XV3NNLHWINQG' where id=66; -update noar ti set v3='722HYSC3XSUVC4FCDDU62XV3NNLHWINQG' where id=66; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='EF9KFZ0Q574GMQJ9EXK6AVFHVN71W3J84' where id=67; -update noar ti set v0='EF9KFZ0Q574GMQJ9EXK6AVFHVN71W3J84' where id=67; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='L2J0SBTJQ26RCEOBZHLXGZA821K9D5BZC' where id=67; -update noar ti set v1='L2J0SBTJQ26RCEOBZHLXGZA821K9D5BZC' where id=67; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='J2EN7X25VKFNFSP9WS4IOD16T9RTFN5SG' where id=67; -update noar ti set v2='J2EN7X25VKFNFSP9WS4IOD16T9RTFN5SG' where id=67; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='D4II7SOYIQICLXPQMOPXI6N8V3YW5T11N' where id=67; -update noar ti set v3='D4II7SOYIQICLXPQMOPXI6N8V3YW5T11N' where id=67; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='7B5Y00JPNG3CUZ0URYRKYSB2QMOO7D2RE' where id=68; -update noar ti set v0='7B5Y00JPNG3CUZ0URYRKYSB2QMOO7D2RE' where id=68; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='Y55H3LWRWQ40KCA009OLN3XIYTBK6DOYJ' where id=68; -update noar ti set v1='Y55H3LWRWQ40KCA009OLN3XIYTBK6DOYJ' where id=68; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='05IQB948N1ZWWVOE4H9S7CPVN1HIXBAJI' where id=68; -update noar ti set v2='05IQB948N1ZWWVOE4H9S7CPVN1HIXBAJI' where id=68; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='P4QTPZ52FUM1HZVEQXPXHTTPB0AE77N4O' where id=68; -update noar ti set v3='P4QTPZ52FUM1HZVEQXPXHTTPB0AE77N4O' where id=68; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='YGN8KP34GE2OJKQA313IO0VD488FD4BSW' where id=69; -update noar ti set v0='YGN8KP34GE2OJKQA313IO0VD488FD4BSW' where id=69; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='HPQR5L105B7PMCXEXXX1O7YIFFNYVU6N3' where id=69; -update noar ti set v1='HPQR5L105B7PMCXEXXX1O7YIFFNYVU6N3' where id=69; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='LPIUASBAJI6MDE193R8YEHAZ910G2JZAQ' where id=69; -update noar ti set v2='LPIUASBAJI6MDE193R8YEHAZ910G2JZAQ' where id=69; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='DMR9KFWKZYCLZT0SXIFN898SAEI4JVVZN' where id=69; -update noar ti set v3='DMR9KFWKZYCLZT0SXIFN898SAEI4JVVZN' where id=69; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='E2QKXKRXDXU5CISL7RRQKZH65H1ND5T8L' where id=70; -update noar ti set v0='E2QKXKRXDXU5CISL7RRQKZH65H1ND5T8L' where id=70; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='KY8U273TV3S175XX41MBYIYYZEZ07HRHU' where id=70; -update noar ti set v1='KY8U273TV3S175XX41MBYIYYZEZ07HRHU' where id=70; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='E1SY1I1YHONFEXH8DQPRBXYKKM5EFEPXB' where id=70; -update noar ti set v2='E1SY1I1YHONFEXH8DQPRBXYKKM5EFEPXB' where id=70; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='V9Q3MY5BGNEGZDSBOH9V1CEFP8L5UQRYC' where id=70; -update noar ti set v3='V9Q3MY5BGNEGZDSBOH9V1CEFP8L5UQRYC' where id=70; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='HD6ZDFZ1Y05NXJ8GAC5Z7X52IXCSO57CE' where id=71; -update noar ti set v0='HD6ZDFZ1Y05NXJ8GAC5Z7X52IXCSO57CE' where id=71; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='OIYYCVQ8BW32K5HNJS8O3LJPGHZIEIWIW' where id=71; -update noar ti set v1='OIYYCVQ8BW32K5HNJS8O3LJPGHZIEIWIW' where id=71; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='6AA9R8FH4HPJCAYMG5FEGGIH8SLNYONS7' where id=71; -update noar ti set v2='6AA9R8FH4HPJCAYMG5FEGGIH8SLNYONS7' where id=71; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='8F5HTANJ45EYMRR5BUVQZO6XC3UQ0LQU7' where id=71; -update noar ti set v3='8F5HTANJ45EYMRR5BUVQZO6XC3UQ0LQU7' where id=71; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='HXDP5XI1YGXXD30DTPCG8GXH8FA3146U7' where id=72; -update noar ti set v0='HXDP5XI1YGXXD30DTPCG8GXH8FA3146U7' where id=72; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='00AGJNLXQVE9BHL1KP6KVKNLLMZXVD3L2' where id=72; -update noar ti set v1='00AGJNLXQVE9BHL1KP6KVKNLLMZXVD3L2' where id=72; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='HJWX6SF2IS19Z8R0IR7LN9X0INU5WCKPM' where id=72; -update noar ti set v2='HJWX6SF2IS19Z8R0IR7LN9X0INU5WCKPM' where id=72; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='YOJKU4F0DMW3VXUSCB0FYIZL9A741MOAL' where id=72; -update noar ti set v3='YOJKU4F0DMW3VXUSCB0FYIZL9A741MOAL' where id=72; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='54YDDTUJ7F338ADD6MG99GJDG3WP1BIHM' where id=73; -update noar ti set v0='54YDDTUJ7F338ADD6MG99GJDG3WP1BIHM' where id=73; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='OOVBMH2U3H0XZIGOUOFE3TW0LM6C2024Q' where id=73; -update noar ti set v1='OOVBMH2U3H0XZIGOUOFE3TW0LM6C2024Q' where id=73; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='ZGNXVYTHYFFUTJLLVYM6QSWBWGAF0B12B' where id=73; -update noar ti set v2='ZGNXVYTHYFFUTJLLVYM6QSWBWGAF0B12B' where id=73; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='Q7RLJLCOB7R3QWNESTCWQT88TNCSLRWZ6' where id=73; -update noar ti set v3='Q7RLJLCOB7R3QWNESTCWQT88TNCSLRWZ6' where id=73; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='SMCRS1V67Y08U5BX991NO082GWT2BPK80' where id=74; -update noar ti set v0='SMCRS1V67Y08U5BX991NO082GWT2BPK80' where id=74; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='0A28CB6Z3HVUFD1K8XW8HBIOMGZUVMO6S' where id=74; -update noar ti set v1='0A28CB6Z3HVUFD1K8XW8HBIOMGZUVMO6S' where id=74; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='75V771SGC1D9GC1AHHH6X7TA43YZDTMR6' where id=74; -update noar ti set v2='75V771SGC1D9GC1AHHH6X7TA43YZDTMR6' where id=74; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='4O3YYBGFM3ZB4ULJZRC6KR5CGJX5EXJHK' where id=74; -update noar ti set v3='4O3YYBGFM3ZB4ULJZRC6KR5CGJX5EXJHK' where id=74; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='Q2S43IWT3GDUCQI81IJTK7BJJ5L3ECEPV' where id=75; -update noar ti set v0='Q2S43IWT3GDUCQI81IJTK7BJJ5L3ECEPV' where id=75; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='3ZQ9I06NEAUY4AN2AB2XWM2GJXF7VGJWK' where id=75; -update noar ti set v1='3ZQ9I06NEAUY4AN2AB2XWM2GJXF7VGJWK' where id=75; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='A22SZG7S4QCRAB8R7LXT6TRNVN616SV44' where id=75; -update noar ti set v2='A22SZG7S4QCRAB8R7LXT6TRNVN616SV44' where id=75; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='QFFJ24MRB24MSJIW28YHIFFUQD1BKKXXC' where id=75; -update noar ti set v3='QFFJ24MRB24MSJIW28YHIFFUQD1BKKXXC' where id=75; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='Q5J8N0THHXCA8V1WK7CMJI8YYO244FFRP' where id=76; -update noar ti set v0='Q5J8N0THHXCA8V1WK7CMJI8YYO244FFRP' where id=76; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='W5P11AR03PUMZIV514BF68Q14HJZP5HG5' where id=76; -update noar ti set v1='W5P11AR03PUMZIV514BF68Q14HJZP5HG5' where id=76; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='54555ZFZQ9WW3ZB5EDJXA4M4XX3UFWF08' where id=76; -update noar ti set v2='54555ZFZQ9WW3ZB5EDJXA4M4XX3UFWF08' where id=76; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='QOPJBR9SLQUJY7QE9RWTSVTN9VPZUNSNS' where id=76; -update noar ti set v3='QOPJBR9SLQUJY7QE9RWTSVTN9VPZUNSNS' where id=76; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='SW36L31FQDUDKDZCRDG8AR29X3NAHY8T8' where id=77; -update noar ti set v0='SW36L31FQDUDKDZCRDG8AR29X3NAHY8T8' where id=77; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='J97LQNGAEBRMU74F5LBU71BNE7J0QM8P9' where id=77; -update noar ti set v1='J97LQNGAEBRMU74F5LBU71BNE7J0QM8P9' where id=77; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='2GZRW07GGP1P5MZMED64YME3OZ42CUPT2' where id=77; -update noar ti set v2='2GZRW07GGP1P5MZMED64YME3OZ42CUPT2' where id=77; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='SRICPEFRGMSKHEYK6PXT8Q6FO1BU24YAV' where id=77; -update noar ti set v3='SRICPEFRGMSKHEYK6PXT8Q6FO1BU24YAV' where id=77; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='XE2PTQ1BTPRVK0RV7VHRLBGDBSL4YY56Q' where id=78; -update noar ti set v0='XE2PTQ1BTPRVK0RV7VHRLBGDBSL4YY56Q' where id=78; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='A16OWCC43LW3H253ZJBFB9YUORY0ROGTT' where id=78; -update noar ti set v1='A16OWCC43LW3H253ZJBFB9YUORY0ROGTT' where id=78; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='N9ZFY5V8WW9MENCDRRADY61NTWLZR82RP' where id=78; -update noar ti set v2='N9ZFY5V8WW9MENCDRRADY61NTWLZR82RP' where id=78; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='7FR30M3ADDZ49Q2RR13L21B62HVTK4TN5' where id=78; -update noar ti set v3='7FR30M3ADDZ49Q2RR13L21B62HVTK4TN5' where id=78; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='X9PUMY0ZG1T3DSYS9L7459C7XFDWKNBRZ' where id=79; -update noar ti set v0='X9PUMY0ZG1T3DSYS9L7459C7XFDWKNBRZ' where id=79; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='MLN6VEL96SN2143ZBF35PB0K8X6278TOD' where id=79; -update noar ti set v1='MLN6VEL96SN2143ZBF35PB0K8X6278TOD' where id=79; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='1362321A6UEZ7YSPBNKR9V08ZH7548OOZ' where id=79; -update noar ti set v2='1362321A6UEZ7YSPBNKR9V08ZH7548OOZ' where id=79; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='N2V73YL4U821VGWBKDAZUI4WHGDDQO2FH' where id=79; -update noar ti set v3='N2V73YL4U821VGWBKDAZUI4WHGDDQO2FH' where id=79; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='4B8E20FNR5OWZTNI7SYN8JYLR50FW1HB6' where id=80; -update noar ti set v0='4B8E20FNR5OWZTNI7SYN8JYLR50FW1HB6' where id=80; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='ZYAP4KHYNI332X2W9MDT8M2H3PXBEFPMS' where id=80; -update noar ti set v1='ZYAP4KHYNI332X2W9MDT8M2H3PXBEFPMS' where id=80; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='IA45OKMD5P0SUFGK7OG6RDVFNFDLTAXQ9' where id=80; -update noar ti set v2='IA45OKMD5P0SUFGK7OG6RDVFNFDLTAXQ9' where id=80; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='WGRWSFGXRU3UJYDOSNT0HH6WYC9E2UQML' where id=80; -update noar ti set v3='WGRWSFGXRU3UJYDOSNT0HH6WYC9E2UQML' where id=80; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='K1NZYP5A3TVE59JLSULT9GKGES0WJMA7E' where id=81; -update noar ti set v0='K1NZYP5A3TVE59JLSULT9GKGES0WJMA7E' where id=81; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='1OXP30CIIQJOCTK72LT1OK36ZWBIN6FJK' where id=81; -update noar ti set v1='1OXP30CIIQJOCTK72LT1OK36ZWBIN6FJK' where id=81; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='M85XNBL432NZFLISC33CO3Z0KNES5H4JM' where id=81; -update noar ti set v2='M85XNBL432NZFLISC33CO3Z0KNES5H4JM' where id=81; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='2PG2GI9JWLTP5QBXLB2ZYDYDTBHQ3IRSJ' where id=81; -update noar ti set v3='2PG2GI9JWLTP5QBXLB2ZYDYDTBHQ3IRSJ' where id=81; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='A9I2GCJPJK4CNADPUVSXS2JEVK84H67XR' where id=82; -update noar ti set v0='A9I2GCJPJK4CNADPUVSXS2JEVK84H67XR' where id=82; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='2GCE1SV1IGRN98ZASFZTNCYQJHOM1L1UG' where id=82; -update noar ti set v1='2GCE1SV1IGRN98ZASFZTNCYQJHOM1L1UG' where id=82; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='HLU4Y21UHEWD97ODU0027LRKVMCJ1GGTS' where id=82; -update noar ti set v2='HLU4Y21UHEWD97ODU0027LRKVMCJ1GGTS' where id=82; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='EJPXNIE06RG2PS7KOVY5P4NJVC3PUU3VV' where id=82; -update noar ti set v3='EJPXNIE06RG2PS7KOVY5P4NJVC3PUU3VV' where id=82; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='D9S04KER4AI4OFX5Z1456GWVFZV6UD18M' where id=83; -update noar ti set v0='D9S04KER4AI4OFX5Z1456GWVFZV6UD18M' where id=83; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='N2NJAIYIZYZD8J6TGLXP24POVW91VEP5R' where id=83; -update noar ti set v1='N2NJAIYIZYZD8J6TGLXP24POVW91VEP5R' where id=83; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='ED6H5964IFYRRP8HMQ3N7ICN4OK5CAA71' where id=83; -update noar ti set v2='ED6H5964IFYRRP8HMQ3N7ICN4OK5CAA71' where id=83; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='W5NQR98L5J8YNFQCBLT2J6JOQM3TD5L2Y' where id=83; -update noar ti set v3='W5NQR98L5J8YNFQCBLT2J6JOQM3TD5L2Y' where id=83; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='IPL7DK90RMM6EEORED5VONN866QQXDERX' where id=84; -update noar ti set v0='IPL7DK90RMM6EEORED5VONN866QQXDERX' where id=84; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='A3UV5DFCCSMF9A0EWFW4XAEJSDYGKYZ8P' where id=84; -update noar ti set v1='A3UV5DFCCSMF9A0EWFW4XAEJSDYGKYZ8P' where id=84; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='9OLYM17E56DAHL80IWA46RLBA85JHRQ3O' where id=84; -update noar ti set v2='9OLYM17E56DAHL80IWA46RLBA85JHRQ3O' where id=84; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='KBML69OJP9LX4KE0JUNKIQIS8MNZP1DVQ' where id=84; -update noar ti set v3='KBML69OJP9LX4KE0JUNKIQIS8MNZP1DVQ' where id=84; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='7VZMOCE0YEUK32LJXQW51QOU0GMMDI1O8' where id=85; -update noar ti set v0='7VZMOCE0YEUK32LJXQW51QOU0GMMDI1O8' where id=85; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='7ZXQZM41BMMMSZYYP0L41SDSTIXOWWO3L' where id=85; -update noar ti set v1='7ZXQZM41BMMMSZYYP0L41SDSTIXOWWO3L' where id=85; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='0FVQZC3OM9JH0GULU3J9FP7XJ6LSEI6OZ' where id=85; -update noar ti set v2='0FVQZC3OM9JH0GULU3J9FP7XJ6LSEI6OZ' where id=85; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='4CN8G61XMGE56S1ETXPUQG2T6SAYMFQRH' where id=85; -update noar ti set v3='4CN8G61XMGE56S1ETXPUQG2T6SAYMFQRH' where id=85; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='EQNL9BPQEZFIBPK29BZA1VZB7H26UVDNQ' where id=86; -update noar ti set v0='EQNL9BPQEZFIBPK29BZA1VZB7H26UVDNQ' where id=86; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='9N9Y2Q84X94PXY4IHNIGMNCKLHL3J7S5N' where id=86; -update noar ti set v1='9N9Y2Q84X94PXY4IHNIGMNCKLHL3J7S5N' where id=86; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='KX0OQ10I1YL4TK9ZRDO245O0VX4NEJBV6' where id=86; -update noar ti set v2='KX0OQ10I1YL4TK9ZRDO245O0VX4NEJBV6' where id=86; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='QFHV89JZU5OS22X6TVYVISCROSZMOO1RH' where id=86; -update noar ti set v3='QFHV89JZU5OS22X6TVYVISCROSZMOO1RH' where id=86; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='O39YEURV7XZ5W35SD4ZEAQQLU0GIJU985' where id=87; -update noar ti set v0='O39YEURV7XZ5W35SD4ZEAQQLU0GIJU985' where id=87; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='HKWNBZ57F0ZUX8AR8N5X1ZFB59A0VK6IN' where id=87; -update noar ti set v1='HKWNBZ57F0ZUX8AR8N5X1ZFB59A0VK6IN' where id=87; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='D0UQJJ224G2X3AMUEQA5Q720PTWGABVCH' where id=87; -update noar ti set v2='D0UQJJ224G2X3AMUEQA5Q720PTWGABVCH' where id=87; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='WZ7BHPGL52LBR8FBVG3KG3MCZRZAVY47Z' where id=87; -update noar ti set v3='WZ7BHPGL52LBR8FBVG3KG3MCZRZAVY47Z' where id=87; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='G1KJPPG2CD18V57G1E19370KMH016QTK7' where id=88; -update noar ti set v0='G1KJPPG2CD18V57G1E19370KMH016QTK7' where id=88; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='3CCZKEVD0FQP33KP4CIN7778CSJ5TIX8J' where id=88; -update noar ti set v1='3CCZKEVD0FQP33KP4CIN7778CSJ5TIX8J' where id=88; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='VMN4DAEBQHWWA68APK3MSOS0NRP7PG0RJ' where id=88; -update noar ti set v2='VMN4DAEBQHWWA68APK3MSOS0NRP7PG0RJ' where id=88; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='MMQGLE2UJ8PL2KS4RDJ2PZWNGCCIINH7K' where id=88; -update noar ti set v3='MMQGLE2UJ8PL2KS4RDJ2PZWNGCCIINH7K' where id=88; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='9BTG0XOKV8GYMMR7LOR3V88R8412JKM48' where id=89; -update noar ti set v0='9BTG0XOKV8GYMMR7LOR3V88R8412JKM48' where id=89; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='7E0XYZPQD70XZ4HFGSIWJQHSF2FJS0H7Z' where id=89; -update noar ti set v1='7E0XYZPQD70XZ4HFGSIWJQHSF2FJS0H7Z' where id=89; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='MLKPLDJW6Q859KAFRAGOHG4V85B4ONRDX' where id=89; -update noar ti set v2='MLKPLDJW6Q859KAFRAGOHG4V85B4ONRDX' where id=89; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='C9795CRAF6AR32TOYYD6G1W0WOX6WB8U2' where id=89; -update noar ti set v3='C9795CRAF6AR32TOYYD6G1W0WOX6WB8U2' where id=89; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='6QAOPPHCOSHYHKQ0I2K1S4VJHZWH3F64R' where id=90; -update noar ti set v0='6QAOPPHCOSHYHKQ0I2K1S4VJHZWH3F64R' where id=90; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='R7BOE7RFKE8C9AVQQCE2CANSSIKFB4ETY' where id=90; -update noar ti set v1='R7BOE7RFKE8C9AVQQCE2CANSSIKFB4ETY' where id=90; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='DCEQVQKPVXQZZ6GWG4O65WKPQF8R1ZFSP' where id=90; -update noar ti set v2='DCEQVQKPVXQZZ6GWG4O65WKPQF8R1ZFSP' where id=90; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='ZOA3918RTFYQ6Q5MXWG9TM7L8G5U8WGDR' where id=90; -update noar ti set v3='ZOA3918RTFYQ6Q5MXWG9TM7L8G5U8WGDR' where id=90; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='5ZLU7HZ3QYRIGHOC8ETSRLX79QWY73YBY' where id=91; -update noar ti set v0='5ZLU7HZ3QYRIGHOC8ETSRLX79QWY73YBY' where id=91; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='GDDODFCDGO9A42KCC2ZOMCL70LM8U3V3H' where id=91; -update noar ti set v1='GDDODFCDGO9A42KCC2ZOMCL70LM8U3V3H' where id=91; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='0M2CSN6Z1X2S5AL0HF06MUJU3D02BTXN6' where id=91; -update noar ti set v2='0M2CSN6Z1X2S5AL0HF06MUJU3D02BTXN6' where id=91; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='K8WOXGDLKELE9FJ34Z6PVEKG468AYA3ZY' where id=91; -update noar ti set v3='K8WOXGDLKELE9FJ34Z6PVEKG468AYA3ZY' where id=91; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='NZSNG6PV75XWF0KRZ88RWCDIP224JGEVG' where id=92; -update noar ti set v0='NZSNG6PV75XWF0KRZ88RWCDIP224JGEVG' where id=92; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='VMIQDHJL7FK8FPT37IXKK839RWDFX1F0D' where id=92; -update noar ti set v1='VMIQDHJL7FK8FPT37IXKK839RWDFX1F0D' where id=92; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='320BLQ39CLOTR58HKZ52VJK18361767YP' where id=92; -update noar ti set v2='320BLQ39CLOTR58HKZ52VJK18361767YP' where id=92; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='6ZVOR2PKPL4AZCRH08UQP2MXMNVF2HKLA' where id=92; -update noar ti set v3='6ZVOR2PKPL4AZCRH08UQP2MXMNVF2HKLA' where id=92; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='PFWINPQSV8MS3JV3MSJXX2GGEGR2QSSUA' where id=93; -update noar ti set v0='PFWINPQSV8MS3JV3MSJXX2GGEGR2QSSUA' where id=93; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='K2DOTS8WQ5XTW0V4AQ7QQY44XMQUOBUGM' where id=93; -update noar ti set v1='K2DOTS8WQ5XTW0V4AQ7QQY44XMQUOBUGM' where id=93; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='WA5N6D873UWEWYAQ06SD6CEC109CGCWDV' where id=93; -update noar ti set v2='WA5N6D873UWEWYAQ06SD6CEC109CGCWDV' where id=93; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='FWM44LF6GNVPLOK87MMPJWVBSDZ22O630' where id=93; -update noar ti set v3='FWM44LF6GNVPLOK87MMPJWVBSDZ22O630' where id=93; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='IEUK6ZHBBMHDNFGZF4601PP4JWFMABAMK' where id=94; -update noar ti set v0='IEUK6ZHBBMHDNFGZF4601PP4JWFMABAMK' where id=94; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='10GZ9NF0ATDPHJM3UQOFTZPM37UC0DG5I' where id=94; -update noar ti set v1='10GZ9NF0ATDPHJM3UQOFTZPM37UC0DG5I' where id=94; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='R3ISPSPG3WJMOEJN18GEY2494RGVHBKR9' where id=94; -update noar ti set v2='R3ISPSPG3WJMOEJN18GEY2494RGVHBKR9' where id=94; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='X76DHCA5UDZ8QDL688ZEP4RCXCPT1Q6SN' where id=94; -update noar ti set v3='X76DHCA5UDZ8QDL688ZEP4RCXCPT1Q6SN' where id=94; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='IA3P8C6LCCCP3A28GKSAEME9C9EGG38U6' where id=95; -update noar ti set v0='IA3P8C6LCCCP3A28GKSAEME9C9EGG38U6' where id=95; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='C2SJHW0O5EIEWA7Q323ARS83A9TSUDM57' where id=95; -update noar ti set v1='C2SJHW0O5EIEWA7Q323ARS83A9TSUDM57' where id=95; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='D00MQ262E7PX2Z25Y9DMB5KDQSFQGE9NJ' where id=95; -update noar ti set v2='D00MQ262E7PX2Z25Y9DMB5KDQSFQGE9NJ' where id=95; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='09X077XI0W08QLEJ5QOL7DTSJJJ6WIEUH' where id=95; -update noar ti set v3='09X077XI0W08QLEJ5QOL7DTSJJJ6WIEUH' where id=95; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='NBKOZI0RNJVA3RQHAKBTS46CDV6MBY6MV' where id=96; -update noar ti set v0='NBKOZI0RNJVA3RQHAKBTS46CDV6MBY6MV' where id=96; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='L5B45BRUJ5BA5EKJL4RHTNO97J9O5J8CL' where id=96; -update noar ti set v1='L5B45BRUJ5BA5EKJL4RHTNO97J9O5J8CL' where id=96; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='HGPWFNBW76FTY2RJXUAJUE9A1XVO9SKKH' where id=96; -update noar ti set v2='HGPWFNBW76FTY2RJXUAJUE9A1XVO9SKKH' where id=96; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='U5BFEDZFJDN118WAA0VQ45CRUDTIMUCAD' where id=96; -update noar ti set v3='U5BFEDZFJDN118WAA0VQ45CRUDTIMUCAD' where id=96; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='HNBJW9XAI6I36QJOT92JNJT8MAO11CY6O' where id=97; -update noar ti set v0='HNBJW9XAI6I36QJOT92JNJT8MAO11CY6O' where id=97; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='YN3K2VMFRV1H6TQYH1SDRN2Q7K3CPQ6U2' where id=97; -update noar ti set v1='YN3K2VMFRV1H6TQYH1SDRN2Q7K3CPQ6U2' where id=97; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='402DS8LJ1QUGA4EEBFP32NBLKCY2HKOYB' where id=97; -update noar ti set v2='402DS8LJ1QUGA4EEBFP32NBLKCY2HKOYB' where id=97; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='L6JSFBN09KQTCE0TMQ6E5TG5M9R49HG33' where id=97; -update noar ti set v3='L6JSFBN09KQTCE0TMQ6E5TG5M9R49HG33' where id=97; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='SO9KHDO5UDDAD1RJ9YYPXZ3I5ZKU9CIE1' where id=98; -update noar ti set v0='SO9KHDO5UDDAD1RJ9YYPXZ3I5ZKU9CIE1' where id=98; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='KGBR4EUI238ATEPUSJPWHF4ZW9QYBT5B1' where id=98; -update noar ti set v1='KGBR4EUI238ATEPUSJPWHF4ZW9QYBT5B1' where id=98; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='44EJGJL6ST4QELA4OTB8QV06QWJ9MKKD7' where id=98; -update noar ti set v2='44EJGJL6ST4QELA4OTB8QV06QWJ9MKKD7' where id=98; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='70U3VG9612W1R9SX50F94HM5FYA8MG8Q9' where id=98; -update noar ti set v3='70U3VG9612W1R9SX50F94HM5FYA8MG8Q9' where id=98; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='TVTYJ99VH24RJ5PH8DSMX0JNQEW7IU9L0' where id=99; -update noar ti set v0='TVTYJ99VH24RJ5PH8DSMX0JNQEW7IU9L0' where id=99; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='4EWX41LPBMP7P0LW5XW8AOXC3YC5IB4H5' where id=99; -update noar ti set v1='4EWX41LPBMP7P0LW5XW8AOXC3YC5IB4H5' where id=99; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='EFTTO0NNEDA78AJLFIZVJUKY3BAE9NNLR' where id=99; -update noar ti set v2='EFTTO0NNEDA78AJLFIZVJUKY3BAE9NNLR' where id=99; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='0FXW7H2EYTQMK68YNRS116CNUGKL2NYPW' where id=99; -update noar ti set v3='0FXW7H2EYTQMK68YNRS116CNUGKL2NYPW' where id=99; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varbinary(32) not null, -v1 varbinary(32) not null, -v2 varbinary(32) not null, -v3 varbinary(32) not null, -b0 text not null -) engine=tokudb; -insert into tt values (1,2,'a','b','c','d','e'); -insert into tt values (2,3,'','','','',''); -insert into tt values (3,4,'','','','',''); -insert into tt values (4,5,'','','','',''); -insert into tt values (5,6,'','','','',''); -insert into tt values (6,7,'','','','',''); -insert into tt values (7,8,'','','','',''); -insert into tt values (8,9,'','','','',''); -insert into tt values (9,10,'','','','',''); -insert into tt values (10,11,'','','','',''); -insert into tt values (11,12,'','','','',''); -insert into tt values (12,13,'','','','',''); -insert into tt values (13,14,'','','','',''); -insert into tt values (14,15,'','','','',''); -insert into tt values (15,16,'','','','',''); -insert into tt values (16,17,'','','','',''); -insert into tt values (17,18,'','','','',''); -insert into tt values (18,19,'','','','',''); -insert into tt values (19,20,'','','','',''); -insert into tt values (20,21,'','','','',''); -insert into tt values (21,22,'','','','',''); -insert into tt values (22,23,'','','','',''); -insert into tt values (23,24,'','','','',''); -insert into tt values (24,25,'','','','',''); -insert into tt values (25,26,'','','','',''); -insert into tt values (26,27,'','','','',''); -insert into tt values (27,28,'','','','',''); -insert into tt values (28,29,'','','','',''); -insert into tt values (29,30,'','','','',''); -insert into tt values (30,31,'','','','',''); -insert into tt values (31,32,'','','','',''); -insert into tt values (32,33,'','','','',''); -insert into tt values (33,34,'','','','',''); -insert into tt values (34,35,'','','','',''); -insert into tt values (35,36,'','','','',''); -insert into tt values (36,37,'','','','',''); -insert into tt values (37,38,'','','','',''); -insert into tt values (38,39,'','','','',''); -insert into tt values (39,40,'','','','',''); -insert into tt values (40,41,'','','','',''); -insert into tt values (41,42,'','','','',''); -insert into tt values (42,43,'','','','',''); -insert into tt values (43,44,'','','','',''); -insert into tt values (44,45,'','','','',''); -insert into tt values (45,46,'','','','',''); -insert into tt values (46,47,'','','','',''); -insert into tt values (47,48,'','','','',''); -insert into tt values (48,49,'','','','',''); -insert into tt values (49,50,'','','','',''); -insert into tt values (50,51,'','','','',''); -insert into tt values (51,52,'','','','',''); -insert into tt values (52,53,'','','','',''); -insert into tt values (53,54,'','','','',''); -insert into tt values (54,55,'','','','',''); -insert into tt values (55,56,'','','','',''); -insert into tt values (56,57,'','','','',''); -insert into tt values (57,58,'','','','',''); -insert into tt values (58,59,'','','','',''); -insert into tt values (59,60,'','','','',''); -insert into tt values (60,61,'','','','',''); -insert into tt values (61,62,'','','','',''); -insert into tt values (62,63,'','','','',''); -insert into tt values (63,64,'','','','',''); -insert into tt values (64,65,'','','','',''); -insert into tt values (65,66,'','','','',''); -insert into tt values (66,67,'','','','',''); -insert into tt values (67,68,'','','','',''); -insert into tt values (68,69,'','','','',''); -insert into tt values (69,70,'','','','',''); -insert into tt values (70,71,'','','','',''); -insert into tt values (71,72,'','','','',''); -insert into tt values (72,73,'','','','',''); -insert into tt values (73,74,'','','','',''); -insert into tt values (74,75,'','','','',''); -insert into tt values (75,76,'','','','',''); -insert into tt values (76,77,'','','','',''); -insert into tt values (77,78,'','','','',''); -insert into tt values (78,79,'','','','',''); -insert into tt values (79,80,'','','','',''); -insert into tt values (80,81,'','','','',''); -insert into tt values (81,82,'','','','',''); -insert into tt values (82,83,'','','','',''); -insert into tt values (83,84,'','','','',''); -insert into tt values (84,85,'','','','',''); -insert into tt values (85,86,'','','','',''); -insert into tt values (86,87,'','','','',''); -insert into tt values (87,88,'','','','',''); -insert into tt values (88,89,'','','','',''); -insert into tt values (89,90,'','','','',''); -insert into tt values (90,91,'','','','',''); -insert into tt values (91,92,'','','','',''); -insert into tt values (92,93,'','','','',''); -insert into tt values (93,94,'','','','',''); -insert into tt values (94,95,'','','','',''); -insert into tt values (95,96,'','','','',''); -insert into tt values (96,97,'','','','',''); -insert into tt values (97,98,'','','','',''); -insert into tt values (98,99,'','','','',''); -insert into tt values (99,100,'','','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='null this 0' where id=0; -update noar ti set v0='null this 0' where id=0; -update noar tt set v1='null is 1' where id=0; -update noar ti set v1='null is 1' where id=0; -update noar tt set v2='null a 2' where id=0; -update noar ti set v2='null a 2' where id=0; -update noar tt set v3='null test 3' where id=0; -update noar ti set v3='null test 3' where id=0; -update noar tt set v0='this 0' where id=1; -update noar ti set v0='this 0' where id=1; -update noar tt set v1='is 1' where id=1; -update noar ti set v1='is 1' where id=1; -update noar tt set v2='another 2' where id=1; -update noar ti set v2='another 2' where id=1; -update noar tt set v3='test 3' where id=1; -update noar ti set v3='test 3' where id=1; -update noar tt set v0='O9NHDDJMDKIUNPRVJYN6VQX87KBEDQKVI' where id=2; -update noar ti set v0='O9NHDDJMDKIUNPRVJYN6VQX87KBEDQKVI' where id=2; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='Q1QBW21GRLRYIVO9LD2K65Z15SIQBN14Z' where id=2; -update noar ti set v1='Q1QBW21GRLRYIVO9LD2K65Z15SIQBN14Z' where id=2; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='R7TZZ11QHWBAVG1O70GWHZ3YKZIRYDECE' where id=2; -update noar ti set v2='R7TZZ11QHWBAVG1O70GWHZ3YKZIRYDECE' where id=2; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='JKDR781NW03TKLDOHXGXU3FYZ1O7IDT5W' where id=2; -update noar ti set v3='JKDR781NW03TKLDOHXGXU3FYZ1O7IDT5W' where id=2; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='MLKEORAFHMQL32I8PMO90AUI66RJUC9DB' where id=3; -update noar ti set v0='MLKEORAFHMQL32I8PMO90AUI66RJUC9DB' where id=3; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='8E3WWOH8Y3PTZIIRULB7NYXS4JM21CZ2P' where id=3; -update noar ti set v1='8E3WWOH8Y3PTZIIRULB7NYXS4JM21CZ2P' where id=3; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='CX82OQAA14218YUU48UM3M852HHFPTI46' where id=3; -update noar ti set v2='CX82OQAA14218YUU48UM3M852HHFPTI46' where id=3; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='RQCJ1PK1U12TPRZGJ0F4RJ2JN06WVEO2G' where id=3; -update noar ti set v3='RQCJ1PK1U12TPRZGJ0F4RJ2JN06WVEO2G' where id=3; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='5WCN7V58LEQUG4BT7OXSGEC7L9U313SOG' where id=4; -update noar ti set v0='5WCN7V58LEQUG4BT7OXSGEC7L9U313SOG' where id=4; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='NQW2XNBHBTU6PTG7TX6I5ECTUUKANN0HE' where id=4; -update noar ti set v1='NQW2XNBHBTU6PTG7TX6I5ECTUUKANN0HE' where id=4; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='N1JY8MY9LMW97QOWN1H21O2U8ND0BEDAA' where id=4; -update noar ti set v2='N1JY8MY9LMW97QOWN1H21O2U8ND0BEDAA' where id=4; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='3OLVQ8ZMX26KVFGGHW92FADNTZNTLH1XD' where id=4; -update noar ti set v3='3OLVQ8ZMX26KVFGGHW92FADNTZNTLH1XD' where id=4; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='6SV21C45VCMQIWY5ZYY1B6247NKHRZILQ' where id=5; -update noar ti set v0='6SV21C45VCMQIWY5ZYY1B6247NKHRZILQ' where id=5; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='JWJ2PXPNJFIYYG19NU97EYO0FF7WH2NTA' where id=5; -update noar ti set v1='JWJ2PXPNJFIYYG19NU97EYO0FF7WH2NTA' where id=5; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='M9FLAKPCYBDFA1Q5LUEM6YA0JCZKBRUX7' where id=5; -update noar ti set v2='M9FLAKPCYBDFA1Q5LUEM6YA0JCZKBRUX7' where id=5; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='UID3D22OU1GJ4HFTP3CVQBIS0P4I1S2B5' where id=5; -update noar ti set v3='UID3D22OU1GJ4HFTP3CVQBIS0P4I1S2B5' where id=5; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='C0DD07GZZ1HMK7T0MNKEBAQA1WRND0IAW' where id=6; -update noar ti set v0='C0DD07GZZ1HMK7T0MNKEBAQA1WRND0IAW' where id=6; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='TMZWLUOEFJHLBGVS0SKU0IPUZ73VI6UMW' where id=6; -update noar ti set v1='TMZWLUOEFJHLBGVS0SKU0IPUZ73VI6UMW' where id=6; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='7S2NEJJBHWOQFHK3RWHAR426900CF5NYN' where id=6; -update noar ti set v2='7S2NEJJBHWOQFHK3RWHAR426900CF5NYN' where id=6; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='09ZCHETG7WO0USAFFHZ5INP9U7AUIBCKZ' where id=6; -update noar ti set v3='09ZCHETG7WO0USAFFHZ5INP9U7AUIBCKZ' where id=6; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='Y8OXMWL39MMR0YEB2TQU1DDC033BZ5BW1' where id=7; -update noar ti set v0='Y8OXMWL39MMR0YEB2TQU1DDC033BZ5BW1' where id=7; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='HC86NHK9NAUV5OFBYELB1D06HAYQLX4GU' where id=7; -update noar ti set v1='HC86NHK9NAUV5OFBYELB1D06HAYQLX4GU' where id=7; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='QWL2F7Y16CLMYRDB04XUSY1GSA0ISSO76' where id=7; -update noar ti set v2='QWL2F7Y16CLMYRDB04XUSY1GSA0ISSO76' where id=7; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='P2F0GV4EEYN4VE4HDXZ0E7PDKBSQJF6GL' where id=7; -update noar ti set v3='P2F0GV4EEYN4VE4HDXZ0E7PDKBSQJF6GL' where id=7; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='OYB0CLBGINZ3YBWW9NVIHHQYJGAI0X5BT' where id=8; -update noar ti set v0='OYB0CLBGINZ3YBWW9NVIHHQYJGAI0X5BT' where id=8; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='F1QHLVE9P88J6KY7N4TKFBOOILYEOHL4A' where id=8; -update noar ti set v1='F1QHLVE9P88J6KY7N4TKFBOOILYEOHL4A' where id=8; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='QF9ZE2I0VYNZE7QGWB33ZZLD4FIBGVNLT' where id=8; -update noar ti set v2='QF9ZE2I0VYNZE7QGWB33ZZLD4FIBGVNLT' where id=8; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='HWWI750LOVQP7AS10LDFVJNNS8MF9R8GY' where id=8; -update noar ti set v3='HWWI750LOVQP7AS10LDFVJNNS8MF9R8GY' where id=8; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='3WOM3TU4HU1PL7GKZX8OCAEVHYM11GM89' where id=9; -update noar ti set v0='3WOM3TU4HU1PL7GKZX8OCAEVHYM11GM89' where id=9; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='JIHBCC09NDSWMEJTIK0QIP9KAXNBZ9H1Q' where id=9; -update noar ti set v1='JIHBCC09NDSWMEJTIK0QIP9KAXNBZ9H1Q' where id=9; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='78YO3W3NXLUTU16UTYR7555XVFV52KDQC' where id=9; -update noar ti set v2='78YO3W3NXLUTU16UTYR7555XVFV52KDQC' where id=9; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='GXR3FE0JE56D5FQF11AEU4C99T8EXF1ZJ' where id=9; -update noar ti set v3='GXR3FE0JE56D5FQF11AEU4C99T8EXF1ZJ' where id=9; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='HGMVC69FY2Z6BL87OMXLNKBOJMTLCRLFW' where id=10; -update noar ti set v0='HGMVC69FY2Z6BL87OMXLNKBOJMTLCRLFW' where id=10; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='Z3TNXODWL0PNYWPFVR4R3H58D0CWU19BD' where id=10; -update noar ti set v1='Z3TNXODWL0PNYWPFVR4R3H58D0CWU19BD' where id=10; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='0QFA5XYBCEHP0DE6U7RFVB87807HQO64H' where id=10; -update noar ti set v2='0QFA5XYBCEHP0DE6U7RFVB87807HQO64H' where id=10; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='JPYIAZFXKUO9NJPR02VIYU249KANCV92D' where id=10; -update noar ti set v3='JPYIAZFXKUO9NJPR02VIYU249KANCV92D' where id=10; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='AMEZSIYEUDNEGHOS049TJACNNDR6MIC8E' where id=11; -update noar ti set v0='AMEZSIYEUDNEGHOS049TJACNNDR6MIC8E' where id=11; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='H1SWYVWHWADQ7BTQ750J1JO58L6RPY5W7' where id=11; -update noar ti set v1='H1SWYVWHWADQ7BTQ750J1JO58L6RPY5W7' where id=11; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='PLNCWN1ROGM9T0O1MWKDO9L6ESFU0FKR6' where id=11; -update noar ti set v2='PLNCWN1ROGM9T0O1MWKDO9L6ESFU0FKR6' where id=11; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='H9P6KPN6KTCV5PLP9THH67FGM2KYMSF4J' where id=11; -update noar ti set v3='H9P6KPN6KTCV5PLP9THH67FGM2KYMSF4J' where id=11; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='PVNUO91H0R7AKWCF1W2EXEHYATPTAH1E7' where id=12; -update noar ti set v0='PVNUO91H0R7AKWCF1W2EXEHYATPTAH1E7' where id=12; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='U0FOE6HQPNDNJXEP5FBY0A1V6J8HO570E' where id=12; -update noar ti set v1='U0FOE6HQPNDNJXEP5FBY0A1V6J8HO570E' where id=12; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='8V5CG0HWS4EOG7BGBGO534MUJXCDHZVAW' where id=12; -update noar ti set v2='8V5CG0HWS4EOG7BGBGO534MUJXCDHZVAW' where id=12; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='J6TONP8M31IGAAYVBNH546V98JYANY917' where id=12; -update noar ti set v3='J6TONP8M31IGAAYVBNH546V98JYANY917' where id=12; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='9SF0ETUMBG1C2Y5ZR5MRLMYXXL55D4TFA' where id=13; -update noar ti set v0='9SF0ETUMBG1C2Y5ZR5MRLMYXXL55D4TFA' where id=13; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='S8O71MSHHSLZXI2213PHD7HFENE4Y8P6F' where id=13; -update noar ti set v1='S8O71MSHHSLZXI2213PHD7HFENE4Y8P6F' where id=13; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='P8V7H83HGN1SGHXFFUN69JT1VIOVOCTBH' where id=13; -update noar ti set v2='P8V7H83HGN1SGHXFFUN69JT1VIOVOCTBH' where id=13; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='SZQ0XEJ08LD21ZSA55OHC4XL9VVR7CUW1' where id=13; -update noar ti set v3='SZQ0XEJ08LD21ZSA55OHC4XL9VVR7CUW1' where id=13; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='B12IPIJMUDE06SR5RNR0APUJJ97I85R31' where id=14; -update noar ti set v0='B12IPIJMUDE06SR5RNR0APUJJ97I85R31' where id=14; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='SQ1IR20KOWM2DK4RQ0KFJ2UYPAHOZL55J' where id=14; -update noar ti set v1='SQ1IR20KOWM2DK4RQ0KFJ2UYPAHOZL55J' where id=14; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='6O2OW9Y7PNH03AV2P6ISEHMB99NT52RRA' where id=14; -update noar ti set v2='6O2OW9Y7PNH03AV2P6ISEHMB99NT52RRA' where id=14; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='XZNG602TFER48KS2YEW3GOZT4QLDSUSM9' where id=14; -update noar ti set v3='XZNG602TFER48KS2YEW3GOZT4QLDSUSM9' where id=14; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='8P4R9R566P05H5MN3ZQXSGPTKUTOLQ0RT' where id=15; -update noar ti set v0='8P4R9R566P05H5MN3ZQXSGPTKUTOLQ0RT' where id=15; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='BSWDQFWV114F6LNP1FZQ5D384ZLPRHXL0' where id=15; -update noar ti set v1='BSWDQFWV114F6LNP1FZQ5D384ZLPRHXL0' where id=15; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='C18UYE05QL0RYD4WG1O7Y6W74RLOP7948' where id=15; -update noar ti set v2='C18UYE05QL0RYD4WG1O7Y6W74RLOP7948' where id=15; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='SJSLH132HKQBQAOZF91XKJPWTS2NOCTLR' where id=15; -update noar ti set v3='SJSLH132HKQBQAOZF91XKJPWTS2NOCTLR' where id=15; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='UZSVSIGW2JHZGPFPUCF6EHZUQHMM8Q6G6' where id=16; -update noar ti set v0='UZSVSIGW2JHZGPFPUCF6EHZUQHMM8Q6G6' where id=16; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='MZDBG86F95PE2QSYRU855GFUMVC9JWM8Y' where id=16; -update noar ti set v1='MZDBG86F95PE2QSYRU855GFUMVC9JWM8Y' where id=16; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='NF8PIMOIPPYH3AQJR6R8FQMPX10ZBDSFQ' where id=16; -update noar ti set v2='NF8PIMOIPPYH3AQJR6R8FQMPX10ZBDSFQ' where id=16; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='SPXG4OR4XFGUVWDRV7J3G8L2V5RSJYOYM' where id=16; -update noar ti set v3='SPXG4OR4XFGUVWDRV7J3G8L2V5RSJYOYM' where id=16; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='F3A1CHQU0MEJPT62HME1VKM5EQZ57SVXR' where id=17; -update noar ti set v0='F3A1CHQU0MEJPT62HME1VKM5EQZ57SVXR' where id=17; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='TQ2XK26I1XAFIR78Z8THVBD39K4IUZFZE' where id=17; -update noar ti set v1='TQ2XK26I1XAFIR78Z8THVBD39K4IUZFZE' where id=17; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='YVO846KBJ1NV8U6SDTL51M2K3HA4C4H6B' where id=17; -update noar ti set v2='YVO846KBJ1NV8U6SDTL51M2K3HA4C4H6B' where id=17; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='LVDOI1METCQVT2VW2ME3SXROD7EA2GC6F' where id=17; -update noar ti set v3='LVDOI1METCQVT2VW2ME3SXROD7EA2GC6F' where id=17; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='MKDJ79X4CTDYB1YMWDJOCTP82EIDX6XD7' where id=18; -update noar ti set v0='MKDJ79X4CTDYB1YMWDJOCTP82EIDX6XD7' where id=18; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='DXKLQC2B8SLZ49QFJEVKB7W5MSLP10PXB' where id=18; -update noar ti set v1='DXKLQC2B8SLZ49QFJEVKB7W5MSLP10PXB' where id=18; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='OVDNU2U0VYYB4SL9ATQRX14DTPSF2EYC0' where id=18; -update noar ti set v2='OVDNU2U0VYYB4SL9ATQRX14DTPSF2EYC0' where id=18; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='GHA7T9AZU3GP1YB75FOO09LGPIC54YT29' where id=18; -update noar ti set v3='GHA7T9AZU3GP1YB75FOO09LGPIC54YT29' where id=18; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='56YU26EX616AVMGIBO9T55F77CTPBHHTY' where id=19; -update noar ti set v0='56YU26EX616AVMGIBO9T55F77CTPBHHTY' where id=19; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='6IEIJABVSHTL7B7IC8ATYUOOMNG5P4J21' where id=19; -update noar ti set v1='6IEIJABVSHTL7B7IC8ATYUOOMNG5P4J21' where id=19; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='ZQDUTBTFE4OAHNRKF4PT5O7ALF6K0B871' where id=19; -update noar ti set v2='ZQDUTBTFE4OAHNRKF4PT5O7ALF6K0B871' where id=19; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='K7GNNXZ4GV1ONF0XJ5WCOF6TBS88TM1RX' where id=19; -update noar ti set v3='K7GNNXZ4GV1ONF0XJ5WCOF6TBS88TM1RX' where id=19; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='UC8URNJBUZONLBXRPGX52ZHH4DMBJ4QES' where id=20; -update noar ti set v0='UC8URNJBUZONLBXRPGX52ZHH4DMBJ4QES' where id=20; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='QEIWBYOKP8QIBME421MTQK5XT7L5VEIE1' where id=20; -update noar ti set v1='QEIWBYOKP8QIBME421MTQK5XT7L5VEIE1' where id=20; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='LOTIEB7G2YCUSRFF8GY44EZKWPUWR9072' where id=20; -update noar ti set v2='LOTIEB7G2YCUSRFF8GY44EZKWPUWR9072' where id=20; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='98WVRWY6KRR18BR694HT4D9X9HY1UISFD' where id=20; -update noar ti set v3='98WVRWY6KRR18BR694HT4D9X9HY1UISFD' where id=20; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='WGYQ7OOYJWOO3R3593YADT3CA0X24CHGE' where id=21; -update noar ti set v0='WGYQ7OOYJWOO3R3593YADT3CA0X24CHGE' where id=21; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='HEYADKX46NP9STU5WBTMCI51NS2YJN7W0' where id=21; -update noar ti set v1='HEYADKX46NP9STU5WBTMCI51NS2YJN7W0' where id=21; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='6MRK67XGPTU37D5JLR0HMO8KO1RVTCTCK' where id=21; -update noar ti set v2='6MRK67XGPTU37D5JLR0HMO8KO1RVTCTCK' where id=21; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='VJ21I5FYUNUCI6HEVY39MHK5VJKSUWLT4' where id=21; -update noar ti set v3='VJ21I5FYUNUCI6HEVY39MHK5VJKSUWLT4' where id=21; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='RK7QU7GYTGGM50TTY4S4XKLPQ96XU89YM' where id=22; -update noar ti set v0='RK7QU7GYTGGM50TTY4S4XKLPQ96XU89YM' where id=22; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='9XYLSONJ3MWXI8I1PKO03ONPE18JPEY08' where id=22; -update noar ti set v1='9XYLSONJ3MWXI8I1PKO03ONPE18JPEY08' where id=22; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='QUPQ3LGB6745Q9DJUMXA171IQ4Y2HU6G2' where id=22; -update noar ti set v2='QUPQ3LGB6745Q9DJUMXA171IQ4Y2HU6G2' where id=22; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='PKM2DEQIRE82867HKDOEBNV7LBGF3QH43' where id=22; -update noar ti set v3='PKM2DEQIRE82867HKDOEBNV7LBGF3QH43' where id=22; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='28B1SUBXBYD7IBS0GFBPZIIFPTBWEKK41' where id=23; -update noar ti set v0='28B1SUBXBYD7IBS0GFBPZIIFPTBWEKK41' where id=23; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='VOKF6B4GX5RVKM4E1ROO7Q1N904DE93MD' where id=23; -update noar ti set v1='VOKF6B4GX5RVKM4E1ROO7Q1N904DE93MD' where id=23; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='IQQRS8LONX8URZ30TB6EIKNI7MH937U0I' where id=23; -update noar ti set v2='IQQRS8LONX8URZ30TB6EIKNI7MH937U0I' where id=23; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='0MFUCQLDYNBJZX7PH4BX2BPCT6JJU2OCY' where id=23; -update noar ti set v3='0MFUCQLDYNBJZX7PH4BX2BPCT6JJU2OCY' where id=23; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='H35VJ0JJ9M4VKRSKPZSEFOGYHQEXPWD2V' where id=24; -update noar ti set v0='H35VJ0JJ9M4VKRSKPZSEFOGYHQEXPWD2V' where id=24; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='0WVQRQNN4L9T49A8NBOY4TDVRCKZPT4LM' where id=24; -update noar ti set v1='0WVQRQNN4L9T49A8NBOY4TDVRCKZPT4LM' where id=24; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='JEFMF7ET9L805T1WJ8K4ZQ5IVRQ6ZXPJD' where id=24; -update noar ti set v2='JEFMF7ET9L805T1WJ8K4ZQ5IVRQ6ZXPJD' where id=24; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='XE099KPJIXBNUL85T6F1N7JLRW984J9TF' where id=24; -update noar ti set v3='XE099KPJIXBNUL85T6F1N7JLRW984J9TF' where id=24; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='X14F3R7GU1RJOCCW4WX7CTIGT36TE3JRG' where id=25; -update noar ti set v0='X14F3R7GU1RJOCCW4WX7CTIGT36TE3JRG' where id=25; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='U4X1TLXGG39F6MJFB4AJ5AVNVDRQBEH06' where id=25; -update noar ti set v1='U4X1TLXGG39F6MJFB4AJ5AVNVDRQBEH06' where id=25; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='6VLMEP1APE3QP9NGZHV5WAUAJJCFMUP3Y' where id=25; -update noar ti set v2='6VLMEP1APE3QP9NGZHV5WAUAJJCFMUP3Y' where id=25; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='6E0GFNFJIYRBFZ7T6D47QZXFN85X5UGLZ' where id=25; -update noar ti set v3='6E0GFNFJIYRBFZ7T6D47QZXFN85X5UGLZ' where id=25; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='J7FZVM7Z9K8JFMX7X63U5T30O10QA5OMS' where id=26; -update noar ti set v0='J7FZVM7Z9K8JFMX7X63U5T30O10QA5OMS' where id=26; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='47DZY405L0EZ5VIBA5KAAX2N2TQDXPEPN' where id=26; -update noar ti set v1='47DZY405L0EZ5VIBA5KAAX2N2TQDXPEPN' where id=26; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='CT2XH9X3W36YXMAKQPKPIXTDHSII9695N' where id=26; -update noar ti set v2='CT2XH9X3W36YXMAKQPKPIXTDHSII9695N' where id=26; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='GRJJ7OT65HHPSRIRECL3YWXZHUAV950AE' where id=26; -update noar ti set v3='GRJJ7OT65HHPSRIRECL3YWXZHUAV950AE' where id=26; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='T2PQ2G2YUHMZFOIH8KD9WOLVZACI6QXSL' where id=27; -update noar ti set v0='T2PQ2G2YUHMZFOIH8KD9WOLVZACI6QXSL' where id=27; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='WBKMMLEJIH1CELPCOJR4GFCW910192RUC' where id=27; -update noar ti set v1='WBKMMLEJIH1CELPCOJR4GFCW910192RUC' where id=27; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='GW7O784R98OO80ZQRU56JV04O5ZKVCGLM' where id=27; -update noar ti set v2='GW7O784R98OO80ZQRU56JV04O5ZKVCGLM' where id=27; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='4ASKL6U7NE4H92UNQETXZQMELKRUM9RJW' where id=27; -update noar ti set v3='4ASKL6U7NE4H92UNQETXZQMELKRUM9RJW' where id=27; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='VL5UD7E3UXP1Y30T19OUQMDNQQDCVIMF5' where id=28; -update noar ti set v0='VL5UD7E3UXP1Y30T19OUQMDNQQDCVIMF5' where id=28; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='EPLL1XI0NDVRFJTEMPY5Y6U8ERLTL8T6A' where id=28; -update noar ti set v1='EPLL1XI0NDVRFJTEMPY5Y6U8ERLTL8T6A' where id=28; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='2BTSP19L73FQ35FQ5D08MP0C0JKQNYIE9' where id=28; -update noar ti set v2='2BTSP19L73FQ35FQ5D08MP0C0JKQNYIE9' where id=28; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='BH7X40UUGJPX4S4AALT5U9IKEEBUD1OUM' where id=28; -update noar ti set v3='BH7X40UUGJPX4S4AALT5U9IKEEBUD1OUM' where id=28; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='0XYMUNMMYKYKJOFX6KU1VZUXYW2R2SGOG' where id=29; -update noar ti set v0='0XYMUNMMYKYKJOFX6KU1VZUXYW2R2SGOG' where id=29; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='2O9VFIZQU5X3N3SH7X6KBHKZE99NGKJZH' where id=29; -update noar ti set v1='2O9VFIZQU5X3N3SH7X6KBHKZE99NGKJZH' where id=29; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='NLHXCA55YM0YH9ORW54T2DYRWI7PWSMY1' where id=29; -update noar ti set v2='NLHXCA55YM0YH9ORW54T2DYRWI7PWSMY1' where id=29; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='GFEF2SYYVRSHCVM1JX5GYY51H00H87XC2' where id=29; -update noar ti set v3='GFEF2SYYVRSHCVM1JX5GYY51H00H87XC2' where id=29; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='LJMNSZA5O130HP39Q0HGEY7PW6V1TWO3A' where id=30; -update noar ti set v0='LJMNSZA5O130HP39Q0HGEY7PW6V1TWO3A' where id=30; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='J8Q5CVBM83ZF76UY4KAZ0MBCSD3ZZK59O' where id=30; -update noar ti set v1='J8Q5CVBM83ZF76UY4KAZ0MBCSD3ZZK59O' where id=30; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='410FAC6AON5D5DNNS49P87VTKZ5XHY24W' where id=30; -update noar ti set v2='410FAC6AON5D5DNNS49P87VTKZ5XHY24W' where id=30; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='6OVAG8QJYGVZ7H3QSYLOJ4KB5HM9WU201' where id=30; -update noar ti set v3='6OVAG8QJYGVZ7H3QSYLOJ4KB5HM9WU201' where id=30; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='7NHI3QNFIXZQFRN67VXYFNXODUQNYRSGF' where id=31; -update noar ti set v0='7NHI3QNFIXZQFRN67VXYFNXODUQNYRSGF' where id=31; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='2EUIFAF1PD1GQ1X00EUU4G26IUHYE00WI' where id=31; -update noar ti set v1='2EUIFAF1PD1GQ1X00EUU4G26IUHYE00WI' where id=31; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='M1H8FI0O21CY7BVEK624X5QJPHGB919UN' where id=31; -update noar ti set v2='M1H8FI0O21CY7BVEK624X5QJPHGB919UN' where id=31; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='I661L0SLV4WI6NYPB3D97AUILOV6XC0FE' where id=31; -update noar ti set v3='I661L0SLV4WI6NYPB3D97AUILOV6XC0FE' where id=31; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='OGDZHQ95S17YB4LIFHGVFLOJSY1KDSB30' where id=32; -update noar ti set v0='OGDZHQ95S17YB4LIFHGVFLOJSY1KDSB30' where id=32; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='8GQUEDNSHUCLOJNKPIH56TB6L0PBMD65U' where id=32; -update noar ti set v1='8GQUEDNSHUCLOJNKPIH56TB6L0PBMD65U' where id=32; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='HAQQ51MGMVNOXA12ALYIYXHH7A66M4NFF' where id=32; -update noar ti set v2='HAQQ51MGMVNOXA12ALYIYXHH7A66M4NFF' where id=32; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='VW5OEZ7QECGOU9VVRTM4WOX79G2RBWETN' where id=32; -update noar ti set v3='VW5OEZ7QECGOU9VVRTM4WOX79G2RBWETN' where id=32; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='1LSN1T9R98CYSP8SDL6MUHZYC7734XO2X' where id=33; -update noar ti set v0='1LSN1T9R98CYSP8SDL6MUHZYC7734XO2X' where id=33; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='6H4XU6WU6JTODYEWNZ50V0SD2BBJ2CP1M' where id=33; -update noar ti set v1='6H4XU6WU6JTODYEWNZ50V0SD2BBJ2CP1M' where id=33; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='W1HXKNQTDCNJOJQ9H5ZJ0JSG1VQ5ZJSPV' where id=33; -update noar ti set v2='W1HXKNQTDCNJOJQ9H5ZJ0JSG1VQ5ZJSPV' where id=33; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='QQFHL4QXG8NJEKQ9JK8GTRGYKTMOHWLUW' where id=33; -update noar ti set v3='QQFHL4QXG8NJEKQ9JK8GTRGYKTMOHWLUW' where id=33; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='M3WQCU84TA265RO9865JQ6XBSE7NS6Z59' where id=34; -update noar ti set v0='M3WQCU84TA265RO9865JQ6XBSE7NS6Z59' where id=34; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='Z4DNA42Z37ORF1Z9JVTTPOV58RD6VMULU' where id=34; -update noar ti set v1='Z4DNA42Z37ORF1Z9JVTTPOV58RD6VMULU' where id=34; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='ZEOSTBEIKTX7MRRBMG2UYMWLFBH7ZLZQ0' where id=34; -update noar ti set v2='ZEOSTBEIKTX7MRRBMG2UYMWLFBH7ZLZQ0' where id=34; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='S0NBDM8NNEXLKYM6QDRQXHCH56XUVPUEQ' where id=34; -update noar ti set v3='S0NBDM8NNEXLKYM6QDRQXHCH56XUVPUEQ' where id=34; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='HAK9VG8HQJRVEUSNZJMLQ5HJWQL7QZV3C' where id=35; -update noar ti set v0='HAK9VG8HQJRVEUSNZJMLQ5HJWQL7QZV3C' where id=35; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='W27V5QYK0ZTD0G8YZDFAXXUU8528NDBPJ' where id=35; -update noar ti set v1='W27V5QYK0ZTD0G8YZDFAXXUU8528NDBPJ' where id=35; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='CJ9W59MF4VSOBZFJDP40E9YKZIO1Q6KLX' where id=35; -update noar ti set v2='CJ9W59MF4VSOBZFJDP40E9YKZIO1Q6KLX' where id=35; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='TTOFMYRMF7WLKCCI1Y1QCR2D3W6CC0VXO' where id=35; -update noar ti set v3='TTOFMYRMF7WLKCCI1Y1QCR2D3W6CC0VXO' where id=35; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='MF0TRKBPLG9IBFPTG57P7F5ZX2L057ZHT' where id=36; -update noar ti set v0='MF0TRKBPLG9IBFPTG57P7F5ZX2L057ZHT' where id=36; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='TWY9GL4N6YU1MWP8XB1PI8YS3UBWDDNMB' where id=36; -update noar ti set v1='TWY9GL4N6YU1MWP8XB1PI8YS3UBWDDNMB' where id=36; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='5XD0MEQKDMR2HGXBJ6NKSF0HKA6NNS742' where id=36; -update noar ti set v2='5XD0MEQKDMR2HGXBJ6NKSF0HKA6NNS742' where id=36; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='3H0EA6B45WR6FRWTCKCHOJXTHA5BKIT2F' where id=36; -update noar ti set v3='3H0EA6B45WR6FRWTCKCHOJXTHA5BKIT2F' where id=36; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='95E6L7GSV9I7KBBHV3F9KBE23IL6WE8YL' where id=37; -update noar ti set v0='95E6L7GSV9I7KBBHV3F9KBE23IL6WE8YL' where id=37; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='9F3JB8AIRJE6QHTXIEEVZJNLQYJEGXY4H' where id=37; -update noar ti set v1='9F3JB8AIRJE6QHTXIEEVZJNLQYJEGXY4H' where id=37; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='OYH9Y7IVQRZ8G842TPF6N7QNLGLP7AM3C' where id=37; -update noar ti set v2='OYH9Y7IVQRZ8G842TPF6N7QNLGLP7AM3C' where id=37; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='3B1JQXY8WUEFUUGSHRS45CEDCQN0WRNTQ' where id=37; -update noar ti set v3='3B1JQXY8WUEFUUGSHRS45CEDCQN0WRNTQ' where id=37; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='JZQLQ9ZHXFIU7WBCDA6OTRLW3PDSJNUJ7' where id=38; -update noar ti set v0='JZQLQ9ZHXFIU7WBCDA6OTRLW3PDSJNUJ7' where id=38; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='G24SDD849GUFPH2UIUXK6TDPMVZT9KX1C' where id=38; -update noar ti set v1='G24SDD849GUFPH2UIUXK6TDPMVZT9KX1C' where id=38; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='IZD3TF8EYOVOBCBOTZS4RBRQDJEJKBEJ9' where id=38; -update noar ti set v2='IZD3TF8EYOVOBCBOTZS4RBRQDJEJKBEJ9' where id=38; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='95XWXAHWDQKCSS7P7CI97AY8ZPF8HUJDW' where id=38; -update noar ti set v3='95XWXAHWDQKCSS7P7CI97AY8ZPF8HUJDW' where id=38; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='1T3Y4KJWLSI014FJXUJVP4S23RY039MOG' where id=39; -update noar ti set v0='1T3Y4KJWLSI014FJXUJVP4S23RY039MOG' where id=39; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='8MKPK1U4WQUQF4RPY272YOL2SIXE2G6J3' where id=39; -update noar ti set v1='8MKPK1U4WQUQF4RPY272YOL2SIXE2G6J3' where id=39; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='VHDUJNM08T9L9JFP4P742MTE3H6K954ZC' where id=39; -update noar ti set v2='VHDUJNM08T9L9JFP4P742MTE3H6K954ZC' where id=39; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='51C8TP623RGCLWDMRC8XJ0349CGIUYW1S' where id=39; -update noar ti set v3='51C8TP623RGCLWDMRC8XJ0349CGIUYW1S' where id=39; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='TCBKJV7WEFI3NKLR7IV4GROF41X4YGZV8' where id=40; -update noar ti set v0='TCBKJV7WEFI3NKLR7IV4GROF41X4YGZV8' where id=40; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='2N5M3QLKEWTVH0WHD8PEHAMWMD2YKXT4W' where id=40; -update noar ti set v1='2N5M3QLKEWTVH0WHD8PEHAMWMD2YKXT4W' where id=40; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='TO6EK2U8AK5D8WRZLYIP0QU5N1SADEC8B' where id=40; -update noar ti set v2='TO6EK2U8AK5D8WRZLYIP0QU5N1SADEC8B' where id=40; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='J0HIPHB60ZPUTXBHRD2R8A584R08B7QAN' where id=40; -update noar ti set v3='J0HIPHB60ZPUTXBHRD2R8A584R08B7QAN' where id=40; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='QMOCYIW5F2KGTXJWOURV0AUPGOVU0LRD1' where id=41; -update noar ti set v0='QMOCYIW5F2KGTXJWOURV0AUPGOVU0LRD1' where id=41; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='3J81DLRM220BY3D72I3SSMHA2BQ5XR61V' where id=41; -update noar ti set v1='3J81DLRM220BY3D72I3SSMHA2BQ5XR61V' where id=41; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='OBWI4SVE17HETZB0DO93V8F3255DASLP9' where id=41; -update noar ti set v2='OBWI4SVE17HETZB0DO93V8F3255DASLP9' where id=41; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='OVXNZF1UGXBVV6RYR0SS85O7XH6XRHYVU' where id=41; -update noar ti set v3='OVXNZF1UGXBVV6RYR0SS85O7XH6XRHYVU' where id=41; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='ND5SELQZO5NMDPGID2MGDS8QWSPQWRSDC' where id=42; -update noar ti set v0='ND5SELQZO5NMDPGID2MGDS8QWSPQWRSDC' where id=42; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='APFLH78J8RIUQABJO9C0XUJ728S19FMB1' where id=42; -update noar ti set v1='APFLH78J8RIUQABJO9C0XUJ728S19FMB1' where id=42; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='97W8TYYF33GACEUL9NIZ7Y8DL3SEU6M0X' where id=42; -update noar ti set v2='97W8TYYF33GACEUL9NIZ7Y8DL3SEU6M0X' where id=42; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='T7J5UC89PA3I2J3MP6H8FY38G8KCZ8DGE' where id=42; -update noar ti set v3='T7J5UC89PA3I2J3MP6H8FY38G8KCZ8DGE' where id=42; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='L9DAO06YPFO4FNO0YML7601UL297EJLJK' where id=43; -update noar ti set v0='L9DAO06YPFO4FNO0YML7601UL297EJLJK' where id=43; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='T8LPZDBGLKVGF7J8WDPNCGC4UDT5YXT0G' where id=43; -update noar ti set v1='T8LPZDBGLKVGF7J8WDPNCGC4UDT5YXT0G' where id=43; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='F8OE6XPDSL9T5L6RWXGZ37TOR08XQNKLD' where id=43; -update noar ti set v2='F8OE6XPDSL9T5L6RWXGZ37TOR08XQNKLD' where id=43; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='JP7QNSDHCOWOHEZ19AK8WBU3P0HZZZFUC' where id=43; -update noar ti set v3='JP7QNSDHCOWOHEZ19AK8WBU3P0HZZZFUC' where id=43; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='QR5CU9J1BM54KXSALVOU2YYIIT9II5IV7' where id=44; -update noar ti set v0='QR5CU9J1BM54KXSALVOU2YYIIT9II5IV7' where id=44; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='THR2AGEW965PRL7DQ6FPFRVF555HV9BGH' where id=44; -update noar ti set v1='THR2AGEW965PRL7DQ6FPFRVF555HV9BGH' where id=44; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='GK24JP9QKQEJ41FF92VFAFG2J4H367VXY' where id=44; -update noar ti set v2='GK24JP9QKQEJ41FF92VFAFG2J4H367VXY' where id=44; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='RXQ5576BL2NWDIAAZWD6T9ARM4A0CNHPK' where id=44; -update noar ti set v3='RXQ5576BL2NWDIAAZWD6T9ARM4A0CNHPK' where id=44; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='GWR3GW8YSUEHLA2IMYNODZTMABWQL3UVN' where id=45; -update noar ti set v0='GWR3GW8YSUEHLA2IMYNODZTMABWQL3UVN' where id=45; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='BKZNASNZUDYVUMESOFLQQMW3KXZRD8TNI' where id=45; -update noar ti set v1='BKZNASNZUDYVUMESOFLQQMW3KXZRD8TNI' where id=45; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='S9SNZCF4KJ3LOD8LU51I7YIK2NHHL2S9L' where id=45; -update noar ti set v2='S9SNZCF4KJ3LOD8LU51I7YIK2NHHL2S9L' where id=45; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='ZBWLFM6A2VE95ZKNZ8HFZNQ2JVSSWH1VJ' where id=45; -update noar ti set v3='ZBWLFM6A2VE95ZKNZ8HFZNQ2JVSSWH1VJ' where id=45; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='27CIX9UJKS2U48PLDIW59ZDET9LYB9ZP8' where id=46; -update noar ti set v0='27CIX9UJKS2U48PLDIW59ZDET9LYB9ZP8' where id=46; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='1A0ELI6O5NJFOPT5NKL53RVHJE7XE39LY' where id=46; -update noar ti set v1='1A0ELI6O5NJFOPT5NKL53RVHJE7XE39LY' where id=46; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='27J8V1GVO68JHO0CK71DFDXC4HF98GDBK' where id=46; -update noar ti set v2='27J8V1GVO68JHO0CK71DFDXC4HF98GDBK' where id=46; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='AH200JYBSX88DD1XIK7GVDLMJNEYVNRD6' where id=46; -update noar ti set v3='AH200JYBSX88DD1XIK7GVDLMJNEYVNRD6' where id=46; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='H5J4WZ3QWCZA02UB84BPM78RQDK2OTIK5' where id=47; -update noar ti set v0='H5J4WZ3QWCZA02UB84BPM78RQDK2OTIK5' where id=47; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='TL89W61XVOK7G5VUFTKUDY411H6J01DIF' where id=47; -update noar ti set v1='TL89W61XVOK7G5VUFTKUDY411H6J01DIF' where id=47; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='FA4N8L56DOQSQ909DQ4IXVV6QPMB3GXY7' where id=47; -update noar ti set v2='FA4N8L56DOQSQ909DQ4IXVV6QPMB3GXY7' where id=47; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='8S6S0DCK02JY4BEU0UMJAVEK73IXPORDL' where id=47; -update noar ti set v3='8S6S0DCK02JY4BEU0UMJAVEK73IXPORDL' where id=47; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='G9VHLMZMPR34PGYRYYE7EBCVZD62OV7G7' where id=48; -update noar ti set v0='G9VHLMZMPR34PGYRYYE7EBCVZD62OV7G7' where id=48; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='PXSSL3CI37E8NIARJ97E7560CU47S7ZJH' where id=48; -update noar ti set v1='PXSSL3CI37E8NIARJ97E7560CU47S7ZJH' where id=48; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='HL0KH8QSLJTM47SZNB5XYJ334W0T7LQ17' where id=48; -update noar ti set v2='HL0KH8QSLJTM47SZNB5XYJ334W0T7LQ17' where id=48; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='SZL2PQD8RE1IKQ1O9OYB3AD6NJBLI9BWD' where id=48; -update noar ti set v3='SZL2PQD8RE1IKQ1O9OYB3AD6NJBLI9BWD' where id=48; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='Z3AFY4MML6MYH5NG9JSQ72RLK0HO0BG9V' where id=49; -update noar ti set v0='Z3AFY4MML6MYH5NG9JSQ72RLK0HO0BG9V' where id=49; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='8WMTWYRK0DI205EJFQKQBWU67OCNKL2OO' where id=49; -update noar ti set v1='8WMTWYRK0DI205EJFQKQBWU67OCNKL2OO' where id=49; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='I9UEO5RMIUO4RF9LJPZQQ9EFNQQF8Y53O' where id=49; -update noar ti set v2='I9UEO5RMIUO4RF9LJPZQQ9EFNQQF8Y53O' where id=49; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='ILHMCPLH1R46JMUI86NJ3KQXLFDR7T3PV' where id=49; -update noar ti set v3='ILHMCPLH1R46JMUI86NJ3KQXLFDR7T3PV' where id=49; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='RURSQ9L2FSKAFNVYJK1C7FLEJFZHUILXD' where id=50; -update noar ti set v0='RURSQ9L2FSKAFNVYJK1C7FLEJFZHUILXD' where id=50; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='DSL5GCW995JRY82HOPK0IV52JUI4I1RBA' where id=50; -update noar ti set v1='DSL5GCW995JRY82HOPK0IV52JUI4I1RBA' where id=50; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='TRFMGIARIBM6O4HH9YT49EI7ICZDSCCZK' where id=50; -update noar ti set v2='TRFMGIARIBM6O4HH9YT49EI7ICZDSCCZK' where id=50; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='458762STQLMQS5IK2AUZFMMDAQ8GFVW39' where id=50; -update noar ti set v3='458762STQLMQS5IK2AUZFMMDAQ8GFVW39' where id=50; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='7L6UP1XJBFY9RLRQJZMOC52GHJZUXS27J' where id=51; -update noar ti set v0='7L6UP1XJBFY9RLRQJZMOC52GHJZUXS27J' where id=51; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='YTMDICEWMQJTBWBZCB6ALJSSY2HBLGA1B' where id=51; -update noar ti set v1='YTMDICEWMQJTBWBZCB6ALJSSY2HBLGA1B' where id=51; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='L6X04J0C3HWTE8R9JN3YADC02AS5O781E' where id=51; -update noar ti set v2='L6X04J0C3HWTE8R9JN3YADC02AS5O781E' where id=51; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='AD2RYQ8TG4Q0E3T5Y7O8NJERYDHV8Q2UY' where id=51; -update noar ti set v3='AD2RYQ8TG4Q0E3T5Y7O8NJERYDHV8Q2UY' where id=51; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='KIYNLLN5RH3R6LYNPHLAPYV5GB46E2G7W' where id=52; -update noar ti set v0='KIYNLLN5RH3R6LYNPHLAPYV5GB46E2G7W' where id=52; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='MJBQA2HIXRPOH9K42ZIQ9NXLUY9QN93Z3' where id=52; -update noar ti set v1='MJBQA2HIXRPOH9K42ZIQ9NXLUY9QN93Z3' where id=52; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='FERPK7XSW9WSSHW0MMSU32PKC169QA2H6' where id=52; -update noar ti set v2='FERPK7XSW9WSSHW0MMSU32PKC169QA2H6' where id=52; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='DSH8CFWXTX2DLN9XMHLZCASZL6K5XJUUA' where id=52; -update noar ti set v3='DSH8CFWXTX2DLN9XMHLZCASZL6K5XJUUA' where id=52; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='6AN7R1VYJVONXHX17M1DO6RG5RGZZD2T7' where id=53; -update noar ti set v0='6AN7R1VYJVONXHX17M1DO6RG5RGZZD2T7' where id=53; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='JWMPLL8L4A3AJ1YQQOBV89JSSZ1OPKF0I' where id=53; -update noar ti set v1='JWMPLL8L4A3AJ1YQQOBV89JSSZ1OPKF0I' where id=53; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='0LIY2CSI9D3HPPBADYLRUYKHH6Y5J6O0I' where id=53; -update noar ti set v2='0LIY2CSI9D3HPPBADYLRUYKHH6Y5J6O0I' where id=53; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='3TPM46KEH2W2KTRAVUCLDD24ZGIIYE73G' where id=53; -update noar ti set v3='3TPM46KEH2W2KTRAVUCLDD24ZGIIYE73G' where id=53; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='9FMS4I2NTMHR3AJLL5JPKH1MS2BETT508' where id=54; -update noar ti set v0='9FMS4I2NTMHR3AJLL5JPKH1MS2BETT508' where id=54; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='SB1RJLVZA09KX532JNTE5APJUTZU94BR7' where id=54; -update noar ti set v1='SB1RJLVZA09KX532JNTE5APJUTZU94BR7' where id=54; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='SH4NIS1WYNR6W7650I4CMS4WA3EE6EJ06' where id=54; -update noar ti set v2='SH4NIS1WYNR6W7650I4CMS4WA3EE6EJ06' where id=54; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='6M8ZNTNUYGYE8K0GPZCAGMIBB9GODDJ3T' where id=54; -update noar ti set v3='6M8ZNTNUYGYE8K0GPZCAGMIBB9GODDJ3T' where id=54; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='W7DSNS4NZ9283GJVVA48PWEYB8028KQ2B' where id=55; -update noar ti set v0='W7DSNS4NZ9283GJVVA48PWEYB8028KQ2B' where id=55; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='7W0NBJABATJMK0GRD5UMY5GUBFJYKHSOS' where id=55; -update noar ti set v1='7W0NBJABATJMK0GRD5UMY5GUBFJYKHSOS' where id=55; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='57EMBWTTQSRQI2JK20H8MNHYE0KS7K5MA' where id=55; -update noar ti set v2='57EMBWTTQSRQI2JK20H8MNHYE0KS7K5MA' where id=55; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='Y9PMVRMXLN1H6H2ZSL6S8VQYO3XMXOIZC' where id=55; -update noar ti set v3='Y9PMVRMXLN1H6H2ZSL6S8VQYO3XMXOIZC' where id=55; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='QUZ7ABM7U20FX9JU87HPJ45TE9R48DMDI' where id=56; -update noar ti set v0='QUZ7ABM7U20FX9JU87HPJ45TE9R48DMDI' where id=56; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='Q53CBPGSPVA4AUL0BOF9RU6XOH3OBYBXX' where id=56; -update noar ti set v1='Q53CBPGSPVA4AUL0BOF9RU6XOH3OBYBXX' where id=56; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='XI61XGI3OR56KT9GIRRC3CM0IIMNPPTGK' where id=56; -update noar ti set v2='XI61XGI3OR56KT9GIRRC3CM0IIMNPPTGK' where id=56; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='I6YYC6B0ZE88SRV7CQ138T0YASK9VS9C9' where id=56; -update noar ti set v3='I6YYC6B0ZE88SRV7CQ138T0YASK9VS9C9' where id=56; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='7K4KWB5KJQ0FNMMDFA3PAU7XSQ8LDQA7Z' where id=57; -update noar ti set v0='7K4KWB5KJQ0FNMMDFA3PAU7XSQ8LDQA7Z' where id=57; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='T7TM731845GEWLY5D0YTCFZL8E8TY5IS0' where id=57; -update noar ti set v1='T7TM731845GEWLY5D0YTCFZL8E8TY5IS0' where id=57; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='PAD1A0MOKVUAWOVCRU12QPQZL54L58MHM' where id=57; -update noar ti set v2='PAD1A0MOKVUAWOVCRU12QPQZL54L58MHM' where id=57; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='LF7RYQN7OR38JKDHM5MHLS3AKYPO5IKTC' where id=57; -update noar ti set v3='LF7RYQN7OR38JKDHM5MHLS3AKYPO5IKTC' where id=57; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='HPR7W84PVJXJ6GQFULKCJ9CJOZEFQ0BGF' where id=58; -update noar ti set v0='HPR7W84PVJXJ6GQFULKCJ9CJOZEFQ0BGF' where id=58; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='CITNSMY4DF1631N6T90S3SNEHFNTD4R27' where id=58; -update noar ti set v1='CITNSMY4DF1631N6T90S3SNEHFNTD4R27' where id=58; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='ZHZ3JRPT1ZDOFCH6W3B5WRD0Q31KHNK9X' where id=58; -update noar ti set v2='ZHZ3JRPT1ZDOFCH6W3B5WRD0Q31KHNK9X' where id=58; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='70B5U9N677URBUQM0USYHRFBPLPD67IQX' where id=58; -update noar ti set v3='70B5U9N677URBUQM0USYHRFBPLPD67IQX' where id=58; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='LA58EWWSB68PRT1LJJB98AH1PXGNTRC06' where id=59; -update noar ti set v0='LA58EWWSB68PRT1LJJB98AH1PXGNTRC06' where id=59; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='AP637AEY7NGUISPC3KD29OZ1O0G75CR4K' where id=59; -update noar ti set v1='AP637AEY7NGUISPC3KD29OZ1O0G75CR4K' where id=59; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='3EE7QBNM4DYRH3Q74JHVYQIKTI9AWAIK4' where id=59; -update noar ti set v2='3EE7QBNM4DYRH3Q74JHVYQIKTI9AWAIK4' where id=59; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='OAZ7WEOSWUYAYE479F9LD22KB2RE9MLTR' where id=59; -update noar ti set v3='OAZ7WEOSWUYAYE479F9LD22KB2RE9MLTR' where id=59; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='1IQOOZMRYNK70DX2TP46IJ5UUGK495Y1I' where id=60; -update noar ti set v0='1IQOOZMRYNK70DX2TP46IJ5UUGK495Y1I' where id=60; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='DQUK6ERL0VW5VMRVFWS248Y276ZPBMGQE' where id=60; -update noar ti set v1='DQUK6ERL0VW5VMRVFWS248Y276ZPBMGQE' where id=60; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='4ZJBYP0QD2WUBRB4NG9C57IF9GQMCZ38A' where id=60; -update noar ti set v2='4ZJBYP0QD2WUBRB4NG9C57IF9GQMCZ38A' where id=60; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='D5IYVYR9W7A6ZE3C5JW18GTMV7CB0BEWK' where id=60; -update noar ti set v3='D5IYVYR9W7A6ZE3C5JW18GTMV7CB0BEWK' where id=60; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='R6703LWXKEUK76X1YQEZOYWMTMO8QDVI9' where id=61; -update noar ti set v0='R6703LWXKEUK76X1YQEZOYWMTMO8QDVI9' where id=61; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='BQKLJYJMXRCQZINREU6BFYUT0QNZU3Z41' where id=61; -update noar ti set v1='BQKLJYJMXRCQZINREU6BFYUT0QNZU3Z41' where id=61; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='3B4WTYG204536B6U6LSAEQWJSMTILWQGH' where id=61; -update noar ti set v2='3B4WTYG204536B6U6LSAEQWJSMTILWQGH' where id=61; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='HEE35D4CB62BMEIB7WAKFZUONQKSLDWU6' where id=61; -update noar ti set v3='HEE35D4CB62BMEIB7WAKFZUONQKSLDWU6' where id=61; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='TJGMRDOJZKJX3BQY0ROVK9MW6KKHXMAFF' where id=62; -update noar ti set v0='TJGMRDOJZKJX3BQY0ROVK9MW6KKHXMAFF' where id=62; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='T4KXHC3H3HWBCG1S8QP9ET8VT9ZHLTBKO' where id=62; -update noar ti set v1='T4KXHC3H3HWBCG1S8QP9ET8VT9ZHLTBKO' where id=62; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='WGR6RZ9YVEEFV7GCKDBK5J6I47U1E1QAE' where id=62; -update noar ti set v2='WGR6RZ9YVEEFV7GCKDBK5J6I47U1E1QAE' where id=62; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='9QFS45BXHQ5GFEIYLN0B4ZR9ZDSUQ95H8' where id=62; -update noar ti set v3='9QFS45BXHQ5GFEIYLN0B4ZR9ZDSUQ95H8' where id=62; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='C0LB0552ZAI7DB3QKO10LWBGEXEOEACAB' where id=63; -update noar ti set v0='C0LB0552ZAI7DB3QKO10LWBGEXEOEACAB' where id=63; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='VKXX45AKTKLFOCWJZT683TDRWSLH2BJRA' where id=63; -update noar ti set v1='VKXX45AKTKLFOCWJZT683TDRWSLH2BJRA' where id=63; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='9T26MXOSVWZ744I7OC2PH13TERW1GHN0K' where id=63; -update noar ti set v2='9T26MXOSVWZ744I7OC2PH13TERW1GHN0K' where id=63; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='YHWLHXQRM5CXAKOFMIO7HPT0HDUIHQQ91' where id=63; -update noar ti set v3='YHWLHXQRM5CXAKOFMIO7HPT0HDUIHQQ91' where id=63; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='L7QNRDGTFGY21MVR5N9IH1NNUS1C2T9U2' where id=64; -update noar ti set v0='L7QNRDGTFGY21MVR5N9IH1NNUS1C2T9U2' where id=64; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='6PBQ0LHXJAYIYEKFJ04WZU6RXBRD86F90' where id=64; -update noar ti set v1='6PBQ0LHXJAYIYEKFJ04WZU6RXBRD86F90' where id=64; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='EE4MO8VSMDYTXV6LW58KYTNQTRDCHM8BQ' where id=64; -update noar ti set v2='EE4MO8VSMDYTXV6LW58KYTNQTRDCHM8BQ' where id=64; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='EAFFHWK6ZSAS83ZTT5I9VWGK0S568Y5NI' where id=64; -update noar ti set v3='EAFFHWK6ZSAS83ZTT5I9VWGK0S568Y5NI' where id=64; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='FY6BMD1JXRRLTDHVD0LJ5856CYRG1U80Q' where id=65; -update noar ti set v0='FY6BMD1JXRRLTDHVD0LJ5856CYRG1U80Q' where id=65; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='2VKZFS4O1NTHB9XFQL97OLY42WXHKG2B8' where id=65; -update noar ti set v1='2VKZFS4O1NTHB9XFQL97OLY42WXHKG2B8' where id=65; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='5ZN2JQDSGF0P8K6NOD7L1CNU4FAZDIAUL' where id=65; -update noar ti set v2='5ZN2JQDSGF0P8K6NOD7L1CNU4FAZDIAUL' where id=65; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='5G0LZLLYOZ7UZ5M93TWZEYMUVQF6G1SZH' where id=65; -update noar ti set v3='5G0LZLLYOZ7UZ5M93TWZEYMUVQF6G1SZH' where id=65; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='57NOVDL3B0S7PWQMPL07DONGGI9JRW3BP' where id=66; -update noar ti set v0='57NOVDL3B0S7PWQMPL07DONGGI9JRW3BP' where id=66; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='LO6VROUBXYCVZ4ISQM3L470ZUOMLHWT14' where id=66; -update noar ti set v1='LO6VROUBXYCVZ4ISQM3L470ZUOMLHWT14' where id=66; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='YUJ6RUU9EN9LQTZFOA1WW49B4QSD4BINX' where id=66; -update noar ti set v2='YUJ6RUU9EN9LQTZFOA1WW49B4QSD4BINX' where id=66; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='CB93SCQNUAHESR1BECFL62QHUPBRV0O7S' where id=66; -update noar ti set v3='CB93SCQNUAHESR1BECFL62QHUPBRV0O7S' where id=66; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='NJ1T120GMHCEO75BWMHFRJLMM3TOU025C' where id=67; -update noar ti set v0='NJ1T120GMHCEO75BWMHFRJLMM3TOU025C' where id=67; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='6RJI6M9VCLG1AXRIRCS9YA3XLIQWQPVV1' where id=67; -update noar ti set v1='6RJI6M9VCLG1AXRIRCS9YA3XLIQWQPVV1' where id=67; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='IRDGWKGAVDAAA3YKGU6E9ET4D1GZF608S' where id=67; -update noar ti set v2='IRDGWKGAVDAAA3YKGU6E9ET4D1GZF608S' where id=67; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='MJJKZ5RBV3FH79U4AB0SRROCXUEVD0LHR' where id=67; -update noar ti set v3='MJJKZ5RBV3FH79U4AB0SRROCXUEVD0LHR' where id=67; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='2C7JFI6EB3RL5Q4TY04BH8KPWS3TMZS2Z' where id=68; -update noar ti set v0='2C7JFI6EB3RL5Q4TY04BH8KPWS3TMZS2Z' where id=68; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='0HJU1QT9FFPRZUYMKKC0RMV2GPDTTRMUQ' where id=68; -update noar ti set v1='0HJU1QT9FFPRZUYMKKC0RMV2GPDTTRMUQ' where id=68; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='E1BKSMZR2DO79KIRCFIRE716ENZRRNI13' where id=68; -update noar ti set v2='E1BKSMZR2DO79KIRCFIRE716ENZRRNI13' where id=68; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='KFNMOZNA542NFSTZKRNV7Z4HQVO7NE860' where id=68; -update noar ti set v3='KFNMOZNA542NFSTZKRNV7Z4HQVO7NE860' where id=68; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='EWBUXHHDFYK8FGJL0MDB5IZB3SMXJ3VGY' where id=69; -update noar ti set v0='EWBUXHHDFYK8FGJL0MDB5IZB3SMXJ3VGY' where id=69; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='POKHSEI10ZP9LN7L94W206670DWWZK70W' where id=69; -update noar ti set v1='POKHSEI10ZP9LN7L94W206670DWWZK70W' where id=69; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='SWLF1ZB3XVDZM7G93X1LTTDXWPS6OCLFX' where id=69; -update noar ti set v2='SWLF1ZB3XVDZM7G93X1LTTDXWPS6OCLFX' where id=69; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='I232ZNA93R4SOW2EAPO734L1QRPCAQCYI' where id=69; -update noar ti set v3='I232ZNA93R4SOW2EAPO734L1QRPCAQCYI' where id=69; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='OZ6JA65Y43HPC54YDS9E7FNJBAH8EO3AV' where id=70; -update noar ti set v0='OZ6JA65Y43HPC54YDS9E7FNJBAH8EO3AV' where id=70; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='MGGNV6P04LUF60VJX3PVO1I9JOFSMOVGH' where id=70; -update noar ti set v1='MGGNV6P04LUF60VJX3PVO1I9JOFSMOVGH' where id=70; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='JNH9IVRXE84XL76VIDWEVLRCP5427NSUT' where id=70; -update noar ti set v2='JNH9IVRXE84XL76VIDWEVLRCP5427NSUT' where id=70; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='JS565B251FRNHUJDRIEKY0Y6V74R3XMNZ' where id=70; -update noar ti set v3='JS565B251FRNHUJDRIEKY0Y6V74R3XMNZ' where id=70; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='AGRS4ON84TBQBQ252OIMBHO6GLO15CIFV' where id=71; -update noar ti set v0='AGRS4ON84TBQBQ252OIMBHO6GLO15CIFV' where id=71; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='GHY1CEEZP7X211JNGEK2D643TQM16C380' where id=71; -update noar ti set v1='GHY1CEEZP7X211JNGEK2D643TQM16C380' where id=71; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='Y16YKA3RQ37SRX6UDPTKS1WW8IQ4YYQE5' where id=71; -update noar ti set v2='Y16YKA3RQ37SRX6UDPTKS1WW8IQ4YYQE5' where id=71; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='2VELPY70X6ZXB63NDTJ2YXBZMPRWVZSQO' where id=71; -update noar ti set v3='2VELPY70X6ZXB63NDTJ2YXBZMPRWVZSQO' where id=71; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='CMXQ08AY4COWXOQ4OOW5NFI6A4Y9SPLY1' where id=72; -update noar ti set v0='CMXQ08AY4COWXOQ4OOW5NFI6A4Y9SPLY1' where id=72; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='LE98GR5C69TYWOE6VU6X2DZ93YKTTYVGB' where id=72; -update noar ti set v1='LE98GR5C69TYWOE6VU6X2DZ93YKTTYVGB' where id=72; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='QLC63V609RJQ81M2HG2EFOPBZOLNWOXEE' where id=72; -update noar ti set v2='QLC63V609RJQ81M2HG2EFOPBZOLNWOXEE' where id=72; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='UQ0RBLIPP76MIWAECE7DTOLLB9LLSZRTW' where id=72; -update noar ti set v3='UQ0RBLIPP76MIWAECE7DTOLLB9LLSZRTW' where id=72; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='X1IJ1WYMEDBI4MQMEIFF1RE3OWIMC29MQ' where id=73; -update noar ti set v0='X1IJ1WYMEDBI4MQMEIFF1RE3OWIMC29MQ' where id=73; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='Y3V894ZKYOPPIPP6S9XSE95O384NL5F81' where id=73; -update noar ti set v1='Y3V894ZKYOPPIPP6S9XSE95O384NL5F81' where id=73; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='FAHE9Z45MIV12DAZT6DGL24T6CSZJMUZH' where id=73; -update noar ti set v2='FAHE9Z45MIV12DAZT6DGL24T6CSZJMUZH' where id=73; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='99T42KM7M72CS46SDEFJ5P0GZBU6KIAZ6' where id=73; -update noar ti set v3='99T42KM7M72CS46SDEFJ5P0GZBU6KIAZ6' where id=73; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='WBOWI0CEW7B9LI5PDLJC8FIYLKJJ6SH18' where id=74; -update noar ti set v0='WBOWI0CEW7B9LI5PDLJC8FIYLKJJ6SH18' where id=74; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='LSYOJO1Q2V8GPXYCXJA77ZPUF1JL6515N' where id=74; -update noar ti set v1='LSYOJO1Q2V8GPXYCXJA77ZPUF1JL6515N' where id=74; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='O5CUZUT5IYTS1JB86QX8CRZR6ZKF8KCPO' where id=74; -update noar ti set v2='O5CUZUT5IYTS1JB86QX8CRZR6ZKF8KCPO' where id=74; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='HSBWA8KJVH7NMXG8TXWHMPTM153K1803M' where id=74; -update noar ti set v3='HSBWA8KJVH7NMXG8TXWHMPTM153K1803M' where id=74; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='P1AKA9RXMQUPJ8UH4YSF2ZZMM4KI3KLOI' where id=75; -update noar ti set v0='P1AKA9RXMQUPJ8UH4YSF2ZZMM4KI3KLOI' where id=75; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='9BLOFZIHZMD70OKANU3ZT3QUDDP2Z3HK2' where id=75; -update noar ti set v1='9BLOFZIHZMD70OKANU3ZT3QUDDP2Z3HK2' where id=75; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='YLAZUKU8YIKPQU31M87L2MF6HSBNRFGSX' where id=75; -update noar ti set v2='YLAZUKU8YIKPQU31M87L2MF6HSBNRFGSX' where id=75; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='F98NSPC5CA6PWNYZBC606V28D1GC2NLII' where id=75; -update noar ti set v3='F98NSPC5CA6PWNYZBC606V28D1GC2NLII' where id=75; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='T98JPNLVHF2P083KV6N7YKE5FCA670P1H' where id=76; -update noar ti set v0='T98JPNLVHF2P083KV6N7YKE5FCA670P1H' where id=76; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='AZ975CNB0C9FLI9A0L6R7R4H0J0A1K458' where id=76; -update noar ti set v1='AZ975CNB0C9FLI9A0L6R7R4H0J0A1K458' where id=76; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='3N2LLW7WS9ZZ6HZBOKWVHMPQWUF1CC4X0' where id=76; -update noar ti set v2='3N2LLW7WS9ZZ6HZBOKWVHMPQWUF1CC4X0' where id=76; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='73VCJOOT0IQARR6DZET8UHYMHVY2Z6JJ4' where id=76; -update noar ti set v3='73VCJOOT0IQARR6DZET8UHYMHVY2Z6JJ4' where id=76; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='XXB3IJHCAMI97ZQ2ZACHFBGFEXB0CAUSE' where id=77; -update noar ti set v0='XXB3IJHCAMI97ZQ2ZACHFBGFEXB0CAUSE' where id=77; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='21KPBI7SBPI14NKO0C7QUBBCGXK7ZKOTZ' where id=77; -update noar ti set v1='21KPBI7SBPI14NKO0C7QUBBCGXK7ZKOTZ' where id=77; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='URLPIFRVYNAMYCRX7LLKQ5MT7FJFPB7WH' where id=77; -update noar ti set v2='URLPIFRVYNAMYCRX7LLKQ5MT7FJFPB7WH' where id=77; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='YOP561AH87AQJF4L8SVF96A1B1ND7V314' where id=77; -update noar ti set v3='YOP561AH87AQJF4L8SVF96A1B1ND7V314' where id=77; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='ZBFERG4QNM083VQODBXEXH762ZJSWKL92' where id=78; -update noar ti set v0='ZBFERG4QNM083VQODBXEXH762ZJSWKL92' where id=78; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='VQR847OOUIBLXNCD0DDC6R8AUNRB76O91' where id=78; -update noar ti set v1='VQR847OOUIBLXNCD0DDC6R8AUNRB76O91' where id=78; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='ZE40D1M8DAENTUXGQ2MQDFMQZA6O1CVO2' where id=78; -update noar ti set v2='ZE40D1M8DAENTUXGQ2MQDFMQZA6O1CVO2' where id=78; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='7ZGDF7C47NSDM34BH21FVRF21KPWPLPYK' where id=78; -update noar ti set v3='7ZGDF7C47NSDM34BH21FVRF21KPWPLPYK' where id=78; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='4SGF3DQGFXV1CGDG5ANXXO47UY17Y11W8' where id=79; -update noar ti set v0='4SGF3DQGFXV1CGDG5ANXXO47UY17Y11W8' where id=79; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='K5O85JPF9UH5A8G7MHIZW96EUU9A4CFA1' where id=79; -update noar ti set v1='K5O85JPF9UH5A8G7MHIZW96EUU9A4CFA1' where id=79; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='9TBJKUOURFRTJRNJUD5V9MHDXRNUMR1LT' where id=79; -update noar ti set v2='9TBJKUOURFRTJRNJUD5V9MHDXRNUMR1LT' where id=79; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='QJWTFODVSDM8EO6UHJ5KPGLX369ODALZN' where id=79; -update noar ti set v3='QJWTFODVSDM8EO6UHJ5KPGLX369ODALZN' where id=79; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='VLAJ4S98D5U7C43CB5FUM00SD288XO8RV' where id=80; -update noar ti set v0='VLAJ4S98D5U7C43CB5FUM00SD288XO8RV' where id=80; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='13QFF0874RF6M24B64V4OETJGOLOV17E4' where id=80; -update noar ti set v1='13QFF0874RF6M24B64V4OETJGOLOV17E4' where id=80; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='X7SUAGLHK4B0KQFHL7XIR783SIXBV4QN5' where id=80; -update noar ti set v2='X7SUAGLHK4B0KQFHL7XIR783SIXBV4QN5' where id=80; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='R72XWALF9KDJO3WXK8I6WCH34N9G4ZA8O' where id=80; -update noar ti set v3='R72XWALF9KDJO3WXK8I6WCH34N9G4ZA8O' where id=80; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='KTEFFO96XY7KY2IBL894XBPXAZWXAYFL1' where id=81; -update noar ti set v0='KTEFFO96XY7KY2IBL894XBPXAZWXAYFL1' where id=81; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='IWSED1A5WIPWZ3NFHEX8410M80SS29MPC' where id=81; -update noar ti set v1='IWSED1A5WIPWZ3NFHEX8410M80SS29MPC' where id=81; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='JITMLM0KGDD1MPIOYZD4SEYYDY8O0IPZL' where id=81; -update noar ti set v2='JITMLM0KGDD1MPIOYZD4SEYYDY8O0IPZL' where id=81; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='FWGVBCKX4QOL485DJBQVL466IATPH0J0S' where id=81; -update noar ti set v3='FWGVBCKX4QOL485DJBQVL466IATPH0J0S' where id=81; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='DTNA7INNCJNI3P0AYIVAPISMBYR9RMLV5' where id=82; -update noar ti set v0='DTNA7INNCJNI3P0AYIVAPISMBYR9RMLV5' where id=82; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='NNMSJ97H4ZSXEKZKXSXAPPHD4GUNE7OG4' where id=82; -update noar ti set v1='NNMSJ97H4ZSXEKZKXSXAPPHD4GUNE7OG4' where id=82; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='XQMMZ8E3GDICMQ1E5J5RXE8SX78M1XG7L' where id=82; -update noar ti set v2='XQMMZ8E3GDICMQ1E5J5RXE8SX78M1XG7L' where id=82; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='68H0B83BFFWEMG7YZHW2EFCQERQVWGNVK' where id=82; -update noar ti set v3='68H0B83BFFWEMG7YZHW2EFCQERQVWGNVK' where id=82; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='QMO9TTFMPJ4TO73LPFBJ3AC0DEKYAB0ET' where id=83; -update noar ti set v0='QMO9TTFMPJ4TO73LPFBJ3AC0DEKYAB0ET' where id=83; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='5VQTX3YJCEFUF1FG4XWJWLJ14TFZJJXIR' where id=83; -update noar ti set v1='5VQTX3YJCEFUF1FG4XWJWLJ14TFZJJXIR' where id=83; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='RSYL7JADB2ZJCXLWISPT73N8WHTO6IW83' where id=83; -update noar ti set v2='RSYL7JADB2ZJCXLWISPT73N8WHTO6IW83' where id=83; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='ZVCSF05JJG04TIMWUVFE11IKK3L1JU7C5' where id=83; -update noar ti set v3='ZVCSF05JJG04TIMWUVFE11IKK3L1JU7C5' where id=83; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='ZW2OKFTERFEDTGDOSF7E2F92JEE0J5POQ' where id=84; -update noar ti set v0='ZW2OKFTERFEDTGDOSF7E2F92JEE0J5POQ' where id=84; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='XBDJM2ACN0I1MI2J313FEQB1424LR8EDE' where id=84; -update noar ti set v1='XBDJM2ACN0I1MI2J313FEQB1424LR8EDE' where id=84; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='2CB71ZX2DK3QV3GOQEM6Z51F9N2ZCZ8CQ' where id=84; -update noar ti set v2='2CB71ZX2DK3QV3GOQEM6Z51F9N2ZCZ8CQ' where id=84; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='H0H1PLEZZVC0O2NGJ1UKB4UX6WKG9WNO0' where id=84; -update noar ti set v3='H0H1PLEZZVC0O2NGJ1UKB4UX6WKG9WNO0' where id=84; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='CNCY1KPXQ2R9XGXW3358XVK0CPJ3KFBHZ' where id=85; -update noar ti set v0='CNCY1KPXQ2R9XGXW3358XVK0CPJ3KFBHZ' where id=85; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='P7EFQFDLO0O09Q9K4YTEUSN7UDXV9KSZJ' where id=85; -update noar ti set v1='P7EFQFDLO0O09Q9K4YTEUSN7UDXV9KSZJ' where id=85; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='5FDYDRQMZ5T60YZCE7DL8VADZ4Z5F23Z7' where id=85; -update noar ti set v2='5FDYDRQMZ5T60YZCE7DL8VADZ4Z5F23Z7' where id=85; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='45NI5UNX32OO7QWYN33WXNNQPTC14SJT3' where id=85; -update noar ti set v3='45NI5UNX32OO7QWYN33WXNNQPTC14SJT3' where id=85; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='AQEBZQBLDYRATIYRW2Q4VB9Z3QIXFHTMA' where id=86; -update noar ti set v0='AQEBZQBLDYRATIYRW2Q4VB9Z3QIXFHTMA' where id=86; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='G4DPWHM507DIR6LFHS6Z25OIL893V7RE0' where id=86; -update noar ti set v1='G4DPWHM507DIR6LFHS6Z25OIL893V7RE0' where id=86; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='BDHH5S388F9ALHJTSPK3728EY9PCYGIXL' where id=86; -update noar ti set v2='BDHH5S388F9ALHJTSPK3728EY9PCYGIXL' where id=86; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='269GE1YSO0A3ETDNC3839UHISZC5BEXUJ' where id=86; -update noar ti set v3='269GE1YSO0A3ETDNC3839UHISZC5BEXUJ' where id=86; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='9TVS7OAD7LITZBQUL99GKCYOZBCIQBPKQ' where id=87; -update noar ti set v0='9TVS7OAD7LITZBQUL99GKCYOZBCIQBPKQ' where id=87; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='7NDTE4RT66B9DUEKQE590QRVQSEEUBBLP' where id=87; -update noar ti set v1='7NDTE4RT66B9DUEKQE590QRVQSEEUBBLP' where id=87; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='75UU9H5MJ5LDBWHU5GQTJBSOGU4K0EW0I' where id=87; -update noar ti set v2='75UU9H5MJ5LDBWHU5GQTJBSOGU4K0EW0I' where id=87; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='2GTQTOQO0O7XIOV6CTGGV495DG1HZ9JRE' where id=87; -update noar ti set v3='2GTQTOQO0O7XIOV6CTGGV495DG1HZ9JRE' where id=87; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='BKBZD41ZXLAQ2Y7CJ8A9527P8I7PM4KFH' where id=88; -update noar ti set v0='BKBZD41ZXLAQ2Y7CJ8A9527P8I7PM4KFH' where id=88; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='PR6O564MYVY1V2T703CSCFPIDTT9Z7NXH' where id=88; -update noar ti set v1='PR6O564MYVY1V2T703CSCFPIDTT9Z7NXH' where id=88; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='XG59QG8DHXVGPONH4AMM85D5ZJG3MG1GT' where id=88; -update noar ti set v2='XG59QG8DHXVGPONH4AMM85D5ZJG3MG1GT' where id=88; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='E2PMCQJNBY0RIK7672MATBTLUB2CWW2FE' where id=88; -update noar ti set v3='E2PMCQJNBY0RIK7672MATBTLUB2CWW2FE' where id=88; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='ZI17RPYY2F1N7I9CH1K6VVXJJA0PQK0SF' where id=89; -update noar ti set v0='ZI17RPYY2F1N7I9CH1K6VVXJJA0PQK0SF' where id=89; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='62VI8M2LZKFMRHA2P3CNH8XMRDSUKLLPL' where id=89; -update noar ti set v1='62VI8M2LZKFMRHA2P3CNH8XMRDSUKLLPL' where id=89; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='5L98FNGZF9RSO2MY8V3AOXPTWH0W2856B' where id=89; -update noar ti set v2='5L98FNGZF9RSO2MY8V3AOXPTWH0W2856B' where id=89; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='60XB753EJQ1YGGQV083YB9K3T6RK5QDQZ' where id=89; -update noar ti set v3='60XB753EJQ1YGGQV083YB9K3T6RK5QDQZ' where id=89; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='3T7OPS6T17EEELNYMF5KQXCP6T85AAK2W' where id=90; -update noar ti set v0='3T7OPS6T17EEELNYMF5KQXCP6T85AAK2W' where id=90; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='51EGCPTYNNJ9H6H3JIJBRHA7M7Q5DLV6L' where id=90; -update noar ti set v1='51EGCPTYNNJ9H6H3JIJBRHA7M7Q5DLV6L' where id=90; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='1KO904YXC0NBCRART470WFCYNX9I8GRGG' where id=90; -update noar ti set v2='1KO904YXC0NBCRART470WFCYNX9I8GRGG' where id=90; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='HWJUBIFBUL5T8W0TXP0WGC0YSDU4F87QE' where id=90; -update noar ti set v3='HWJUBIFBUL5T8W0TXP0WGC0YSDU4F87QE' where id=90; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='MCX8VBA8SIEVZIKOSFUNEZWALPCVAHZA9' where id=91; -update noar ti set v0='MCX8VBA8SIEVZIKOSFUNEZWALPCVAHZA9' where id=91; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='HMHPSE5ZJX0EPY4AD0SONINHVO9U2KX9U' where id=91; -update noar ti set v1='HMHPSE5ZJX0EPY4AD0SONINHVO9U2KX9U' where id=91; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='U2NLR5IKGB4WV484HQX2U1274N42LR4HM' where id=91; -update noar ti set v2='U2NLR5IKGB4WV484HQX2U1274N42LR4HM' where id=91; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='E8Y7KYC1H57JSOZR5CW9V4I8M1OHTMS3Y' where id=91; -update noar ti set v3='E8Y7KYC1H57JSOZR5CW9V4I8M1OHTMS3Y' where id=91; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='MP24496CCZZZB1WF84X6UTK2ZYJ4Q4JRH' where id=92; -update noar ti set v0='MP24496CCZZZB1WF84X6UTK2ZYJ4Q4JRH' where id=92; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='632NX3QHU2LR265L3N8I0L5JRQ6ATNBDK' where id=92; -update noar ti set v1='632NX3QHU2LR265L3N8I0L5JRQ6ATNBDK' where id=92; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='ZUEOHXZ6I7PJG8CDKCYGC1P9KXOGXPAAL' where id=92; -update noar ti set v2='ZUEOHXZ6I7PJG8CDKCYGC1P9KXOGXPAAL' where id=92; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='V0CC2HHD0CKQH2LHNLT1YCD38CA3VBJON' where id=92; -update noar ti set v3='V0CC2HHD0CKQH2LHNLT1YCD38CA3VBJON' where id=92; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='CIJ08XBVT4N3QBASLZSRNMJX11L27VRTY' where id=93; -update noar ti set v0='CIJ08XBVT4N3QBASLZSRNMJX11L27VRTY' where id=93; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='ODHZY95OPJYEM1YM39CNXSO8TCJ3Q176X' where id=93; -update noar ti set v1='ODHZY95OPJYEM1YM39CNXSO8TCJ3Q176X' where id=93; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='QB6FDMHZA3DZYFFK7Y4Y536F6GMNWXCPG' where id=93; -update noar ti set v2='QB6FDMHZA3DZYFFK7Y4Y536F6GMNWXCPG' where id=93; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='IY18E8SKPI40SGJDA5O2PKMFKUH0S0250' where id=93; -update noar ti set v3='IY18E8SKPI40SGJDA5O2PKMFKUH0S0250' where id=93; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='7HRJGOIOH6M8R3MBABI3347U0NQJDTTZS' where id=94; -update noar ti set v0='7HRJGOIOH6M8R3MBABI3347U0NQJDTTZS' where id=94; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='587585VOKF9DAXK0I27DD895BDT8UJPLI' where id=94; -update noar ti set v1='587585VOKF9DAXK0I27DD895BDT8UJPLI' where id=94; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='P3NA23XVT8YE2CC1M1ANRQ66EMZUVIQBL' where id=94; -update noar ti set v2='P3NA23XVT8YE2CC1M1ANRQ66EMZUVIQBL' where id=94; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='N53W139ISAB8KUGVRX7X6Q9CI6KF637S3' where id=94; -update noar ti set v3='N53W139ISAB8KUGVRX7X6Q9CI6KF637S3' where id=94; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='72C7ANCIBV6PSIJLG1KXGGOV7AUHHK3T9' where id=95; -update noar ti set v0='72C7ANCIBV6PSIJLG1KXGGOV7AUHHK3T9' where id=95; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='LL2TPQYROSPE7WIDE1QRUL697CDK9KKKQ' where id=95; -update noar ti set v1='LL2TPQYROSPE7WIDE1QRUL697CDK9KKKQ' where id=95; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='A2HX1PJKNPXGS8Y7B1XQ2748EC70HVI5Z' where id=95; -update noar ti set v2='A2HX1PJKNPXGS8Y7B1XQ2748EC70HVI5Z' where id=95; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='20Y3TKYBJO9U3175JI59W7Y4XGGW2Z2D9' where id=95; -update noar ti set v3='20Y3TKYBJO9U3175JI59W7Y4XGGW2Z2D9' where id=95; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='154T5LUDKY2WSUB5YX5RQ6J735NDN7YP3' where id=96; -update noar ti set v0='154T5LUDKY2WSUB5YX5RQ6J735NDN7YP3' where id=96; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='ULYRIHE1QD9E4W4V1A9K0F5SE5HEX3ER5' where id=96; -update noar ti set v1='ULYRIHE1QD9E4W4V1A9K0F5SE5HEX3ER5' where id=96; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='1HKPI8WULN8PU2QBVA7IVQUIPXFXTVUCK' where id=96; -update noar ti set v2='1HKPI8WULN8PU2QBVA7IVQUIPXFXTVUCK' where id=96; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='IYGAZNVNCYEAI2OMZEJMVIODDF6FW9845' where id=96; -update noar ti set v3='IYGAZNVNCYEAI2OMZEJMVIODDF6FW9845' where id=96; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='4A38UMXJ8QCZARQMNLESLUKJ72ZU7ESQC' where id=97; -update noar ti set v0='4A38UMXJ8QCZARQMNLESLUKJ72ZU7ESQC' where id=97; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='PAR1XBCZFT852Q8NCIT9300018D1UTLFO' where id=97; -update noar ti set v1='PAR1XBCZFT852Q8NCIT9300018D1UTLFO' where id=97; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='TQWRBG455K6N8PA9KRQCAEW2D5UPF01JS' where id=97; -update noar ti set v2='TQWRBG455K6N8PA9KRQCAEW2D5UPF01JS' where id=97; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='QTKE9966ERUKBBTBFTT49UPWJJBMG9XIE' where id=97; -update noar ti set v3='QTKE9966ERUKBBTBFTT49UPWJJBMG9XIE' where id=97; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='6UUWGKGGVZFMJ2SZPZGT3M6FMCTAY0NEB' where id=98; -update noar ti set v0='6UUWGKGGVZFMJ2SZPZGT3M6FMCTAY0NEB' where id=98; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='1H449U44PIMOS2GKKWF48UJM4F5RE5QNO' where id=98; -update noar ti set v1='1H449U44PIMOS2GKKWF48UJM4F5RE5QNO' where id=98; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='1L0YUIQCJF1G7GICFNVCX5M8B6TCWRSC8' where id=98; -update noar ti set v2='1L0YUIQCJF1G7GICFNVCX5M8B6TCWRSC8' where id=98; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='5S4MH3ZHVWI7R51FW3G265C5YUOHSKRLY' where id=98; -update noar ti set v3='5S4MH3ZHVWI7R51FW3G265C5YUOHSKRLY' where id=98; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='0Z9GTT0CRTSIRMPF3FIP2GJI6LME72GCT' where id=99; -update noar ti set v0='0Z9GTT0CRTSIRMPF3FIP2GJI6LME72GCT' where id=99; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='0PVF9ONHD3QR6ROWWVIW86O4A85UX5INJ' where id=99; -update noar ti set v1='0PVF9ONHD3QR6ROWWVIW86O4A85UX5INJ' where id=99; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='O6DP7BSQ5HRF2GX4QOHHRYXMASKRRB5J3' where id=99; -update noar ti set v2='O6DP7BSQ5HRF2GX4QOHHRYXMASKRRB5J3' where id=99; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='I4NUTHC417X1WZOJT6P9NOBSQAWFOSXPK' where id=99; -update noar ti set v3='I4NUTHC417X1WZOJT6P9NOBSQAWFOSXPK' where id=99; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int null, -v0 varbinary(256) null, -v1 varbinary(256) null, -v2 varbinary(256) null, -v3 varbinary(256) null, -b0 text null -) engine=tokudb; -insert into tt (id) values (0); -insert into tt values (1,2,'a','b','c','d','e'); -insert into tt values (2,3,'','','','',''); -insert into tt values (3,4,'','','','',''); -insert into tt values (4,5,'','','','',''); -insert into tt values (5,6,'','','','',''); -insert into tt values (6,7,'','','','',''); -insert into tt values (7,8,'','','','',''); -insert into tt values (8,9,'','','','',''); -insert into tt values (9,10,'','','','',''); -insert into tt values (10,11,'','','','',''); -insert into tt values (11,12,'','','','',''); -insert into tt values (12,13,'','','','',''); -insert into tt values (13,14,'','','','',''); -insert into tt values (14,15,'','','','',''); -insert into tt values (15,16,'','','','',''); -insert into tt values (16,17,'','','','',''); -insert into tt values (17,18,'','','','',''); -insert into tt values (18,19,'','','','',''); -insert into tt values (19,20,'','','','',''); -insert into tt values (20,21,'','','','',''); -insert into tt values (21,22,'','','','',''); -insert into tt values (22,23,'','','','',''); -insert into tt values (23,24,'','','','',''); -insert into tt values (24,25,'','','','',''); -insert into tt values (25,26,'','','','',''); -insert into tt values (26,27,'','','','',''); -insert into tt values (27,28,'','','','',''); -insert into tt values (28,29,'','','','',''); -insert into tt values (29,30,'','','','',''); -insert into tt values (30,31,'','','','',''); -insert into tt values (31,32,'','','','',''); -insert into tt values (32,33,'','','','',''); -insert into tt values (33,34,'','','','',''); -insert into tt values (34,35,'','','','',''); -insert into tt values (35,36,'','','','',''); -insert into tt values (36,37,'','','','',''); -insert into tt values (37,38,'','','','',''); -insert into tt values (38,39,'','','','',''); -insert into tt values (39,40,'','','','',''); -insert into tt values (40,41,'','','','',''); -insert into tt values (41,42,'','','','',''); -insert into tt values (42,43,'','','','',''); -insert into tt values (43,44,'','','','',''); -insert into tt values (44,45,'','','','',''); -insert into tt values (45,46,'','','','',''); -insert into tt values (46,47,'','','','',''); -insert into tt values (47,48,'','','','',''); -insert into tt values (48,49,'','','','',''); -insert into tt values (49,50,'','','','',''); -insert into tt values (50,51,'','','','',''); -insert into tt values (51,52,'','','','',''); -insert into tt values (52,53,'','','','',''); -insert into tt values (53,54,'','','','',''); -insert into tt values (54,55,'','','','',''); -insert into tt values (55,56,'','','','',''); -insert into tt values (56,57,'','','','',''); -insert into tt values (57,58,'','','','',''); -insert into tt values (58,59,'','','','',''); -insert into tt values (59,60,'','','','',''); -insert into tt values (60,61,'','','','',''); -insert into tt values (61,62,'','','','',''); -insert into tt values (62,63,'','','','',''); -insert into tt values (63,64,'','','','',''); -insert into tt values (64,65,'','','','',''); -insert into tt values (65,66,'','','','',''); -insert into tt values (66,67,'','','','',''); -insert into tt values (67,68,'','','','',''); -insert into tt values (68,69,'','','','',''); -insert into tt values (69,70,'','','','',''); -insert into tt values (70,71,'','','','',''); -insert into tt values (71,72,'','','','',''); -insert into tt values (72,73,'','','','',''); -insert into tt values (73,74,'','','','',''); -insert into tt values (74,75,'','','','',''); -insert into tt values (75,76,'','','','',''); -insert into tt values (76,77,'','','','',''); -insert into tt values (77,78,'','','','',''); -insert into tt values (78,79,'','','','',''); -insert into tt values (79,80,'','','','',''); -insert into tt values (80,81,'','','','',''); -insert into tt values (81,82,'','','','',''); -insert into tt values (82,83,'','','','',''); -insert into tt values (83,84,'','','','',''); -insert into tt values (84,85,'','','','',''); -insert into tt values (85,86,'','','','',''); -insert into tt values (86,87,'','','','',''); -insert into tt values (87,88,'','','','',''); -insert into tt values (88,89,'','','','',''); -insert into tt values (89,90,'','','','',''); -insert into tt values (90,91,'','','','',''); -insert into tt values (91,92,'','','','',''); -insert into tt values (92,93,'','','','',''); -insert into tt values (93,94,'','','','',''); -insert into tt values (94,95,'','','','',''); -insert into tt values (95,96,'','','','',''); -insert into tt values (96,97,'','','','',''); -insert into tt values (97,98,'','','','',''); -insert into tt values (98,99,'','','','',''); -insert into tt values (99,100,'','','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='null this 0' where id=0; -update noar ti set v0='null this 0' where id=0; -update noar tt set v1='null is 1' where id=0; -update noar ti set v1='null is 1' where id=0; -update noar tt set v2='null a 2' where id=0; -update noar ti set v2='null a 2' where id=0; -update noar tt set v3='null test 3' where id=0; -update noar ti set v3='null test 3' where id=0; -update noar tt set v0='this 0' where id=1; -update noar ti set v0='this 0' where id=1; -update noar tt set v1='is 1' where id=1; -update noar ti set v1='is 1' where id=1; -update noar tt set v2='another 2' where id=1; -update noar ti set v2='another 2' where id=1; -update noar tt set v3='test 3' where id=1; -update noar ti set v3='test 3' where id=1; -update noar tt set v0='N5FUIPBLY8BCDFMOM9J59U0Z6ZV7IZ4E3EAR82XWC3AG45V57OCIGRMB3RV2U64D26F8M4220UOTUVAKCFNMNCNNAHJJ1203UCDOLEG6NDI1DKTKDP7L9TMA0F858TW5NITP19TN4QSBMILPWVDQA59KKMG4TW5IDJ2YXVC0L0XOE4LJ7UT764J6Y2RLZDBLD90HWBK9M3RFICD4U9KA6GVDVGWTXMNGUF1QQWBPEMFOWK5TFPP5RV1UDMLGCC3JC' where id=2; -update noar ti set v0='N5FUIPBLY8BCDFMOM9J59U0Z6ZV7IZ4E3EAR82XWC3AG45V57OCIGRMB3RV2U64D26F8M4220UOTUVAKCFNMNCNNAHJJ1203UCDOLEG6NDI1DKTKDP7L9TMA0F858TW5NITP19TN4QSBMILPWVDQA59KKMG4TW5IDJ2YXVC0L0XOE4LJ7UT764J6Y2RLZDBLD90HWBK9M3RFICD4U9KA6GVDVGWTXMNGUF1QQWBPEMFOWK5TFPP5RV1UDMLGCC3JC' where id=2; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='901NIKL85HV562NWKBJ0R1VA63AE1V5IIYMU33TGV3E43TZ2Z3B84JBQ94H1S4IL5KCZ0VVXMHB7Z5W8QMZYSJY9QFRK4AUR8LYOTCXV7SCLKR7713BT4QY7XND05IZQR6RMIFLN0NYOH2L27LVVZXBERLGX7PMM1RYNEUZIW5NKU5P2Q7WOOTEMZ2X0DB2CX2GN49W1Q10MUM2K8Y463OUPGDUY855FXT62EHAZXBAEAFTR7391OXTAPH0V9VG7M' where id=2; -update noar ti set v1='901NIKL85HV562NWKBJ0R1VA63AE1V5IIYMU33TGV3E43TZ2Z3B84JBQ94H1S4IL5KCZ0VVXMHB7Z5W8QMZYSJY9QFRK4AUR8LYOTCXV7SCLKR7713BT4QY7XND05IZQR6RMIFLN0NYOH2L27LVVZXBERLGX7PMM1RYNEUZIW5NKU5P2Q7WOOTEMZ2X0DB2CX2GN49W1Q10MUM2K8Y463OUPGDUY855FXT62EHAZXBAEAFTR7391OXTAPH0V9VG7M' where id=2; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='DYNBQU5XXFPMUXY54REGU5GW8914R17K9IJIRJ4UP153CJJMRXRVRHLO4FW4JZFTG9XOXF14RM7A7AX09NUSRPCVYXAAG5O111GJRTY2RHZBLKLVCUYNFW6SVOL64MHREY9BX26OUTR4W5UV984Z2F07MKR7A8CSEO0Q7JQUONZE1MSD61JV890OPAUPRGER1YQEGISCX2T1G2Q7YMFXY7GPVGFOJO2TGA0QR4OEXFBSAKVVJL2A3XWW1VJKB32BZ' where id=2; -update noar ti set v2='DYNBQU5XXFPMUXY54REGU5GW8914R17K9IJIRJ4UP153CJJMRXRVRHLO4FW4JZFTG9XOXF14RM7A7AX09NUSRPCVYXAAG5O111GJRTY2RHZBLKLVCUYNFW6SVOL64MHREY9BX26OUTR4W5UV984Z2F07MKR7A8CSEO0Q7JQUONZE1MSD61JV890OPAUPRGER1YQEGISCX2T1G2Q7YMFXY7GPVGFOJO2TGA0QR4OEXFBSAKVVJL2A3XWW1VJKB32BZ' where id=2; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='8TBDTM95ASERHO1JDMRTNWWG2FTGM6T7QA5F25XH4YOCLSUK4OS28CUIIYMB49ZG0UKEACZVPVXG81UOHDCTWTGTIVSSTFN5842WSAVD9EE1VHVKJ060YULWCIVSITOJGITMNF6PH6RA2SD2ZHIK1BSX1U2N7H12K8AMO53UMZI1UKNWFMG641Y0CU0154TC1AFBCUECOMF6USXRWQOIS5SZQ8MW065D0V49AIGS7IIR7JER26DDAVOZQ2LXPVT5L' where id=2; -update noar ti set v3='8TBDTM95ASERHO1JDMRTNWWG2FTGM6T7QA5F25XH4YOCLSUK4OS28CUIIYMB49ZG0UKEACZVPVXG81UOHDCTWTGTIVSSTFN5842WSAVD9EE1VHVKJ060YULWCIVSITOJGITMNF6PH6RA2SD2ZHIK1BSX1U2N7H12K8AMO53UMZI1UKNWFMG641Y0CU0154TC1AFBCUECOMF6USXRWQOIS5SZQ8MW065D0V49AIGS7IIR7JER26DDAVOZQ2LXPVT5L' where id=2; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='8OEJETZB0O1XZV5WUHM31U4H9M88EH6295AS05MXZZ6AD6OKBLSZP0V15I5ZWS503YPMZ479IU0J9BKYVI78SU01J20M4NXG863M0ITMD3SEGE9XUECDWL08LA8BVBZMQ87ZEG8A07OT0ZNVQ2JTJSFMXXLU3BTKRT8H5I2FM6QSQTUR99VXEEOZ8ZXQKHI7KAZPW88U644RB7CW64E8CGCN6GCZUTKV6V8XFWSYAUJVX0S2HLZJL3SUHCKJ0E3F4' where id=3; -update noar ti set v0='8OEJETZB0O1XZV5WUHM31U4H9M88EH6295AS05MXZZ6AD6OKBLSZP0V15I5ZWS503YPMZ479IU0J9BKYVI78SU01J20M4NXG863M0ITMD3SEGE9XUECDWL08LA8BVBZMQ87ZEG8A07OT0ZNVQ2JTJSFMXXLU3BTKRT8H5I2FM6QSQTUR99VXEEOZ8ZXQKHI7KAZPW88U644RB7CW64E8CGCN6GCZUTKV6V8XFWSYAUJVX0S2HLZJL3SUHCKJ0E3F4' where id=3; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='WZBXEEGO5NPB68OJ5NGUZY5OS3WAO0I8IKCT96KCD47A5ZLQYMAGTOHINCTRTCMMTF5Z9O7IB2B66R39HTC5ZWIC9RL05TNQE22N91XZAA0CQVCVO8J5I8JEYI0VSOGANNTGHCTZYURX8EPYE7TDTIQNHMQ28DHOFAY81GD82BLPGWV17PH0A1736URXSUO1KUQYZ8PSK6CRGV248VL49PR6IBU3ZYV1QQCMLU5EYXV6YPYZVJLNVND895YJOVEM5' where id=3; -update noar ti set v1='WZBXEEGO5NPB68OJ5NGUZY5OS3WAO0I8IKCT96KCD47A5ZLQYMAGTOHINCTRTCMMTF5Z9O7IB2B66R39HTC5ZWIC9RL05TNQE22N91XZAA0CQVCVO8J5I8JEYI0VSOGANNTGHCTZYURX8EPYE7TDTIQNHMQ28DHOFAY81GD82BLPGWV17PH0A1736URXSUO1KUQYZ8PSK6CRGV248VL49PR6IBU3ZYV1QQCMLU5EYXV6YPYZVJLNVND895YJOVEM5' where id=3; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='Y1QARB3SQBDWJF18Y1QWIDSXUQ45Z6MF6CTM2J25D3LP8CWXK72X5KUGCTIVJD4A923UFSCJQBXM6OOACWEGB5RX03C9ZDK7ZNRVFO2I7CVSUQ1U36TZL6JLKJXCL060F4XUIE1PNVFO43TC5JBBT9PZPSVZRNNEOQ2UW3N8YFJ4VCFGU34L8SM33812TRKGOVFAOLPDZOSW25OP7X55H2WIHFRYLQU5ITCAY3R3H071E1QDY8B6JTTHVOHLI2IY5' where id=3; -update noar ti set v2='Y1QARB3SQBDWJF18Y1QWIDSXUQ45Z6MF6CTM2J25D3LP8CWXK72X5KUGCTIVJD4A923UFSCJQBXM6OOACWEGB5RX03C9ZDK7ZNRVFO2I7CVSUQ1U36TZL6JLKJXCL060F4XUIE1PNVFO43TC5JBBT9PZPSVZRNNEOQ2UW3N8YFJ4VCFGU34L8SM33812TRKGOVFAOLPDZOSW25OP7X55H2WIHFRYLQU5ITCAY3R3H071E1QDY8B6JTTHVOHLI2IY5' where id=3; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='LEERCIAX974R0MFZ27OLIYWQ1JMERYH9M8262B125Y9P2IY5WW2JU0L7Y3QIRJL1NGU7OIT8GUYAR6XFU98TSRMYPIA9JS95UC4CTZ8630DP8VG0GOJTHAUYVWXMPUZ3DOMVIWPLHVO12JCN6L9PBX3ZDKQVV589DW59GZOCKE7U30KB6VUEEP8WR2GIX1957JXN4WRMS8FZAXPBVNJIO9S540YOFNI54T02NB5SHDPDYOFZ3JHYUMEAQRR50MCOU' where id=3; -update noar ti set v3='LEERCIAX974R0MFZ27OLIYWQ1JMERYH9M8262B125Y9P2IY5WW2JU0L7Y3QIRJL1NGU7OIT8GUYAR6XFU98TSRMYPIA9JS95UC4CTZ8630DP8VG0GOJTHAUYVWXMPUZ3DOMVIWPLHVO12JCN6L9PBX3ZDKQVV589DW59GZOCKE7U30KB6VUEEP8WR2GIX1957JXN4WRMS8FZAXPBVNJIO9S540YOFNI54T02NB5SHDPDYOFZ3JHYUMEAQRR50MCOU' where id=3; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='S9VT28U398ANZH2CI6MXDBOBYVU9QSXW5QA3UQSF13GNJSTWKQXMBK56XG0779DRTVOKAFB2OQDPPQYND3BZ1YRIL5RFHD74WC0X9N16J6YEDKAECYWCAIMRS8Q8F2TLUT4NNR1A9HTN0745XVWZ9R37YBAJN3NBG1A60J13UKHI90B1TN3QUROSN6EEGPBUSG6FHNSKU5FLV2PJ767K7YSOL7N87ERAAVPM37DLWQE8I1Z0VUMXXQ2AV2KJB2262' where id=4; -update noar ti set v0='S9VT28U398ANZH2CI6MXDBOBYVU9QSXW5QA3UQSF13GNJSTWKQXMBK56XG0779DRTVOKAFB2OQDPPQYND3BZ1YRIL5RFHD74WC0X9N16J6YEDKAECYWCAIMRS8Q8F2TLUT4NNR1A9HTN0745XVWZ9R37YBAJN3NBG1A60J13UKHI90B1TN3QUROSN6EEGPBUSG6FHNSKU5FLV2PJ767K7YSOL7N87ERAAVPM37DLWQE8I1Z0VUMXXQ2AV2KJB2262' where id=4; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='C7VYDGWY3ZGGCLP58C786Z60L6LSRQ6AELPXVE4OI8PQ87SJL54KHLG6C0F25CP9B9BD8SLSBDKTILXBT4WHMW17NGKOTY2RMEIV0VMRDPUHFF912JFXEF8SIQ37B43A09M0N5YVI7LHRL3Z86ANIHKR4TNAADUAZJXMX5HMYYU43RDQ57FZP8U53UM6R37ODJ45WQD4O0PIZYIOSCT6ABOSN1J3ZOHAZ7QWD5K1PZEAV1WAX0HSGYW4Q5MVOAL51' where id=4; -update noar ti set v1='C7VYDGWY3ZGGCLP58C786Z60L6LSRQ6AELPXVE4OI8PQ87SJL54KHLG6C0F25CP9B9BD8SLSBDKTILXBT4WHMW17NGKOTY2RMEIV0VMRDPUHFF912JFXEF8SIQ37B43A09M0N5YVI7LHRL3Z86ANIHKR4TNAADUAZJXMX5HMYYU43RDQ57FZP8U53UM6R37ODJ45WQD4O0PIZYIOSCT6ABOSN1J3ZOHAZ7QWD5K1PZEAV1WAX0HSGYW4Q5MVOAL51' where id=4; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='WKSVQUTJKW2IQLDIY6WNKRHNO3UB3EVI0GFL0M1B1PCH83MDBN6K8F90NJX1YKESUPCLZM63WPCWK6KI5Y6Y2YA9B4PQ0ITG7OYG6JTQ8R4MCFFV56GNOZ2I0JJRF0VBKHK8J0AP4TN5VIKYWBRKSQ7WK9A2A9SWKIY0UH6RGU11YAE1JHXC19FLK23458VB7COHU51S5KTANQOL48VJUCC2H01CP9OVX24AR42FWFKAPT5K6RK6GJ4OHBKT1ZK5O' where id=4; -update noar ti set v2='WKSVQUTJKW2IQLDIY6WNKRHNO3UB3EVI0GFL0M1B1PCH83MDBN6K8F90NJX1YKESUPCLZM63WPCWK6KI5Y6Y2YA9B4PQ0ITG7OYG6JTQ8R4MCFFV56GNOZ2I0JJRF0VBKHK8J0AP4TN5VIKYWBRKSQ7WK9A2A9SWKIY0UH6RGU11YAE1JHXC19FLK23458VB7COHU51S5KTANQOL48VJUCC2H01CP9OVX24AR42FWFKAPT5K6RK6GJ4OHBKT1ZK5O' where id=4; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='C9TM839RNF1RPA5YGG7VXSPAKPRGTQ5HW6F7JBYD21IMVIWDT25DAK3OHLDBWYB5UKQKWHWGPXZBKCUBUR34GLL64UGL7407GBW40H2N9XCS232N8A2J86BVJ3OPOWGRKO3OVOVC78TOQA01UEGN8Q9OXTC6PWBHVWJJMS3KB11VO50GV37AP1WV61PXAQYV2VSKTCN7LZ8N9VJ581VFDZX1W2PKA7ZYPPZ85N5JEDTILKWOL8MY0KRFS2PM6JHTX' where id=4; -update noar ti set v3='C9TM839RNF1RPA5YGG7VXSPAKPRGTQ5HW6F7JBYD21IMVIWDT25DAK3OHLDBWYB5UKQKWHWGPXZBKCUBUR34GLL64UGL7407GBW40H2N9XCS232N8A2J86BVJ3OPOWGRKO3OVOVC78TOQA01UEGN8Q9OXTC6PWBHVWJJMS3KB11VO50GV37AP1WV61PXAQYV2VSKTCN7LZ8N9VJ581VFDZX1W2PKA7ZYPPZ85N5JEDTILKWOL8MY0KRFS2PM6JHTX' where id=4; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='31PUS63RQ5S5ZW9QG8THBZEAAVGZYCIAKR7VLLR380KVD83EFH93PTO2UHNSCSFPP3KW4Y9FERHM6V1AESB5571ZHFFEKYVT6UVLFLXG1XC5MOPYFBR8XO6MERKSUHIU1ISLOH6TFWJMRV4LVCA1NEVNH4TRS5PUL2UK7E8QO2ZLXYDBTYACGEWTM4OF1ZNTSJZ579D31IK6KWNVG5A772X95156KVGLH3O7UT3LLES80I94Z6XV6B7RCCPN2VRVF' where id=5; -update noar ti set v0='31PUS63RQ5S5ZW9QG8THBZEAAVGZYCIAKR7VLLR380KVD83EFH93PTO2UHNSCSFPP3KW4Y9FERHM6V1AESB5571ZHFFEKYVT6UVLFLXG1XC5MOPYFBR8XO6MERKSUHIU1ISLOH6TFWJMRV4LVCA1NEVNH4TRS5PUL2UK7E8QO2ZLXYDBTYACGEWTM4OF1ZNTSJZ579D31IK6KWNVG5A772X95156KVGLH3O7UT3LLES80I94Z6XV6B7RCCPN2VRVF' where id=5; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='VM0YC3FYONLYG5NSQ8B16T9A3ISBAV2E3JMW6YRUSJXQMRQ2RPQSSC5SZY3C41T0PNOXCJCXHT81UYH9062ICJOT6BZ01YU61E9E9A1S9Y5HDNR63WA4EN556EL7VIV72TKUXI8KWRRJFVESZ28ZJN8D07DFAENNM4BCE829X0EJZKDRWVYUWM9UHWMGWN4HT6TGOI3NADQTIVJSAFXMKQDIOZV9435J8PPMI9HT4PHL77Q3UT5JH9MP2068JG6QB' where id=5; -update noar ti set v1='VM0YC3FYONLYG5NSQ8B16T9A3ISBAV2E3JMW6YRUSJXQMRQ2RPQSSC5SZY3C41T0PNOXCJCXHT81UYH9062ICJOT6BZ01YU61E9E9A1S9Y5HDNR63WA4EN556EL7VIV72TKUXI8KWRRJFVESZ28ZJN8D07DFAENNM4BCE829X0EJZKDRWVYUWM9UHWMGWN4HT6TGOI3NADQTIVJSAFXMKQDIOZV9435J8PPMI9HT4PHL77Q3UT5JH9MP2068JG6QB' where id=5; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='I78PU8Z6D7ZW7VWZ02FYCD0QBPWX494OV8EMQYI8NCBYRV36R2XJ0INZBY9YSOB2FK4IS1JTIFB9IE4YIPK7GJYOI2E9OWL2WAF1D8LCVY8N66I4NEZMEI4IV1SCZ746XEBONETIUHRGSBQWBLP2JU346WDAQBM8XPBEOIMPG4F1Y1V70XDTYG6AYCJ0DYEW7DAVVI5WSDF3PYSIOLDWW32ASEI6W60XB4K0QNIG4EOXRU1W0POOK7HCNCX9YVX8J' where id=5; -update noar ti set v2='I78PU8Z6D7ZW7VWZ02FYCD0QBPWX494OV8EMQYI8NCBYRV36R2XJ0INZBY9YSOB2FK4IS1JTIFB9IE4YIPK7GJYOI2E9OWL2WAF1D8LCVY8N66I4NEZMEI4IV1SCZ746XEBONETIUHRGSBQWBLP2JU346WDAQBM8XPBEOIMPG4F1Y1V70XDTYG6AYCJ0DYEW7DAVVI5WSDF3PYSIOLDWW32ASEI6W60XB4K0QNIG4EOXRU1W0POOK7HCNCX9YVX8J' where id=5; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='SME5KIAA01MC7JD6W3FB8DNE0KEOQLYEX507LX97FMDWJXVQVHRXH212ZPYLGUK0Q173BXICG4SAVIHMJTC626LZ0ZDBTU67OZ07BDYQ06AQZYDTEYCPKJ5OSBYS8T24HEV588QNAHG9POS5P4YLM6TWJS5QZARX9HT0ZN1BHFHD217GNHKZAMZT1YGSPWTK2SN5H5SH4MYXB9K50MWFAVOXVEPRSN2I1DNX431E310L7HANNPUUQPZ12EB8FJQKT' where id=5; -update noar ti set v3='SME5KIAA01MC7JD6W3FB8DNE0KEOQLYEX507LX97FMDWJXVQVHRXH212ZPYLGUK0Q173BXICG4SAVIHMJTC626LZ0ZDBTU67OZ07BDYQ06AQZYDTEYCPKJ5OSBYS8T24HEV588QNAHG9POS5P4YLM6TWJS5QZARX9HT0ZN1BHFHD217GNHKZAMZT1YGSPWTK2SN5H5SH4MYXB9K50MWFAVOXVEPRSN2I1DNX431E310L7HANNPUUQPZ12EB8FJQKT' where id=5; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='IKNEE2VP508DUONR75XYV05NYCDLR6INHORDYCVT1HEMQB5CI9LYBFET2WW0WC2ZYFT8WXGTJEKAA3DG12UO1T9ODY6TSDJY776J0PDJM3D09W41TBDF2QPI2ULZBMLEDAV1D1QCI40SURTBIZLV5QNTV7YYU4B8B0BL6JC2MO43P8ZQBTPJYXITUFH31JKNK9KCP3JMVOQEBZQLG8DJP63DCC171HSW0NRDFBLUU92X43HPS3XC1HEB0KKH9ARPA' where id=6; -update noar ti set v0='IKNEE2VP508DUONR75XYV05NYCDLR6INHORDYCVT1HEMQB5CI9LYBFET2WW0WC2ZYFT8WXGTJEKAA3DG12UO1T9ODY6TSDJY776J0PDJM3D09W41TBDF2QPI2ULZBMLEDAV1D1QCI40SURTBIZLV5QNTV7YYU4B8B0BL6JC2MO43P8ZQBTPJYXITUFH31JKNK9KCP3JMVOQEBZQLG8DJP63DCC171HSW0NRDFBLUU92X43HPS3XC1HEB0KKH9ARPA' where id=6; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='R0JIE2RMDVAEH5DUX6YP6P1KAPA4YPMD5I66QWEJGTEWJSJ2TL53JGJIZMULYRMVSX3Q466GIUL66RMP1397MIM4VFEBHEPGA256N7ONQZZJRIWWPCN0RE0JCHBQ3B5TN2WVYJ19OINYFZEH8TYGLKI3SUBCU0VS2XE57AJYDVB2OXK8ABYWE5UYT6J8PXDUE66NAWNWYFAD2V57RKPMU7FFMC0KRXK60P46V563SZTOXV8YEQT2DHV426GII0976' where id=6; -update noar ti set v1='R0JIE2RMDVAEH5DUX6YP6P1KAPA4YPMD5I66QWEJGTEWJSJ2TL53JGJIZMULYRMVSX3Q466GIUL66RMP1397MIM4VFEBHEPGA256N7ONQZZJRIWWPCN0RE0JCHBQ3B5TN2WVYJ19OINYFZEH8TYGLKI3SUBCU0VS2XE57AJYDVB2OXK8ABYWE5UYT6J8PXDUE66NAWNWYFAD2V57RKPMU7FFMC0KRXK60P46V563SZTOXV8YEQT2DHV426GII0976' where id=6; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='G4QISPS494QVELSOJPRI0727J080Z3FNVUC5JOAE980O099E2XDDKBJWFF4Y6XL12TXJGVJ2YIZ8OMZN1IFDKRB2KI96GGBIGRQYI8DVLDZSAVGGT272NYCKWGHAVYU7QAM1H09Z1N5JJ0TZIQKNJ0QVTWABYMIADFLOLSE8YO5CPE1X3V01Y2MEE4COEO12NDROAY55V12YG236ZCLMWEZNIHGQ89NUZKJPPWHUR1GD6R0MDVNHMBBFMRVCQ6H3N' where id=6; -update noar ti set v2='G4QISPS494QVELSOJPRI0727J080Z3FNVUC5JOAE980O099E2XDDKBJWFF4Y6XL12TXJGVJ2YIZ8OMZN1IFDKRB2KI96GGBIGRQYI8DVLDZSAVGGT272NYCKWGHAVYU7QAM1H09Z1N5JJ0TZIQKNJ0QVTWABYMIADFLOLSE8YO5CPE1X3V01Y2MEE4COEO12NDROAY55V12YG236ZCLMWEZNIHGQ89NUZKJPPWHUR1GD6R0MDVNHMBBFMRVCQ6H3N' where id=6; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='FH4EXOLMHU0WTHT3M4SCFXRKS0QTXTQHDLYZ0Z1JGKVKXDF57XXVCZ6NXAH9XPVZS3THWTIW2EGI3TKGHKHD9J6BZGWKTEN4PZP8Q2E5LAQJNH63BOB4Q8ZS2KL2QEOACW1UMAHS48KNQ9S5DLH168HFRTSJEUBW4689HQQ6MKFI95DCKXRXW0PBOXF7KU7U004L86W57ZTS05NWPCHRBQI7887RVL1AETAMB144V7Y1VFLVBJO7UR9L2M6WT96S9' where id=6; -update noar ti set v3='FH4EXOLMHU0WTHT3M4SCFXRKS0QTXTQHDLYZ0Z1JGKVKXDF57XXVCZ6NXAH9XPVZS3THWTIW2EGI3TKGHKHD9J6BZGWKTEN4PZP8Q2E5LAQJNH63BOB4Q8ZS2KL2QEOACW1UMAHS48KNQ9S5DLH168HFRTSJEUBW4689HQQ6MKFI95DCKXRXW0PBOXF7KU7U004L86W57ZTS05NWPCHRBQI7887RVL1AETAMB144V7Y1VFLVBJO7UR9L2M6WT96S9' where id=6; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='3MER9ZTRIOQ7BORJ2Y35XK8VTXK2FD47VK63HMMPFMFXKQDGFLM5PM5WG1X7VIDM5D8AMC82BUYZ2VS8029ESTYA51US3NP80GRTRFUWKGHZVKGXRRLP2PM5YIZIWZLD3SZ9IQKLKNGMQI6V31UGFKTPSI6Q05GBNIAX2TZIZYL1JN0T4V35JMFOL3KJAIJZ6TH5UUKXQLMSST1KEVN4C78JV1FDQDMDR6PZYERTRPHIDNQXUXPNGQU12OPRZRC01' where id=7; -update noar ti set v0='3MER9ZTRIOQ7BORJ2Y35XK8VTXK2FD47VK63HMMPFMFXKQDGFLM5PM5WG1X7VIDM5D8AMC82BUYZ2VS8029ESTYA51US3NP80GRTRFUWKGHZVKGXRRLP2PM5YIZIWZLD3SZ9IQKLKNGMQI6V31UGFKTPSI6Q05GBNIAX2TZIZYL1JN0T4V35JMFOL3KJAIJZ6TH5UUKXQLMSST1KEVN4C78JV1FDQDMDR6PZYERTRPHIDNQXUXPNGQU12OPRZRC01' where id=7; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='F2A36RO6O7DOIQL6LN1V9ZRYITN5JPI9OW01UTI5C7XOGAK15RU517PW54QFPVZJX4ZF9PVJJQOR2W7DTTQWXA8CE7RGCI0MLXNE85RCZYCS1RYYW3943H5G0V0OKDZ6XG6HET5U52VWGNM5CVCKO33AVIXFUTWWJP1HXHFQ0XCKQ8P5WRRKLIXKJU0Y2M6ZWLKI3B9H5MKDB4CFJQ0L35CGVKVYKXQT2L9GC0JSXTKBYAZ7PPBXEZESSNO32JDNE' where id=7; -update noar ti set v1='F2A36RO6O7DOIQL6LN1V9ZRYITN5JPI9OW01UTI5C7XOGAK15RU517PW54QFPVZJX4ZF9PVJJQOR2W7DTTQWXA8CE7RGCI0MLXNE85RCZYCS1RYYW3943H5G0V0OKDZ6XG6HET5U52VWGNM5CVCKO33AVIXFUTWWJP1HXHFQ0XCKQ8P5WRRKLIXKJU0Y2M6ZWLKI3B9H5MKDB4CFJQ0L35CGVKVYKXQT2L9GC0JSXTKBYAZ7PPBXEZESSNO32JDNE' where id=7; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='RBD8ZJIQY0QS0U6QLM447CD80KZDJZ1OEKYFOQPLR33Z0N263PO1E149WT2S7LPUOYMQHQBVMW6WMUOOOB3HKH61NHOBU6XNWI231297A57YQN4OPU7RSUXJS2W6J4VB99LA4BOITX5157TWILQ5N3VGGNRZ5O0UL6P536V32D4ZX7OWEAJRMRKI89BJ3U08SOKOX6AKQTW373YU6OIGA7JN202S0EAIU1W14V6GJZS5VG6BG91R9YV57UCTQJQLO' where id=7; -update noar ti set v2='RBD8ZJIQY0QS0U6QLM447CD80KZDJZ1OEKYFOQPLR33Z0N263PO1E149WT2S7LPUOYMQHQBVMW6WMUOOOB3HKH61NHOBU6XNWI231297A57YQN4OPU7RSUXJS2W6J4VB99LA4BOITX5157TWILQ5N3VGGNRZ5O0UL6P536V32D4ZX7OWEAJRMRKI89BJ3U08SOKOX6AKQTW373YU6OIGA7JN202S0EAIU1W14V6GJZS5VG6BG91R9YV57UCTQJQLO' where id=7; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='CHIGYE61A8LF6EH5TN6P4AAGT764LLXNSV3DC6WCT3WNJNAW15TL9PGP9PD9F0OB34SC6FIN8FW8EQCI1M8KV534AO4K9HUUGBFHJ25W99SRKMI5SFK1KHAQU1YX99KCNL4ALKZAUSQSLBF1O0CU2XNMH6L7M5JIWIDIN9JE9WKPCM6DQXSP20J8K2OXUVJ0VELEEX0HOXU3B7854LS1JFUAOP1S8KSOALA43ETVTE3LEFQ2YKPE91JMWW8K8IE2C' where id=7; -update noar ti set v3='CHIGYE61A8LF6EH5TN6P4AAGT764LLXNSV3DC6WCT3WNJNAW15TL9PGP9PD9F0OB34SC6FIN8FW8EQCI1M8KV534AO4K9HUUGBFHJ25W99SRKMI5SFK1KHAQU1YX99KCNL4ALKZAUSQSLBF1O0CU2XNMH6L7M5JIWIDIN9JE9WKPCM6DQXSP20J8K2OXUVJ0VELEEX0HOXU3B7854LS1JFUAOP1S8KSOALA43ETVTE3LEFQ2YKPE91JMWW8K8IE2C' where id=7; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='3KOBBPEI8RL9XB02NEHMPQWOHJG9BM7U5K4F86MBHG39KWROZ0LBF28EZIU5N2NBP5Y1SD2EU9QVRIYQW8A1043OAYH3BZPV84L3CBMRGFWBY9JSDMHV6R18H1FW8HOALOIX40EV9PIZ9BM33B1YX9U4TN34MI8H027VXKKIEUL7Q0D2KBJN08P4KDY3T6N8DWQU8H6WU96L41B8DIX5NDICK5RAM45L3MKJKW7WGLRV7OJPUDH0UL9TYON85W0GV' where id=8; -update noar ti set v0='3KOBBPEI8RL9XB02NEHMPQWOHJG9BM7U5K4F86MBHG39KWROZ0LBF28EZIU5N2NBP5Y1SD2EU9QVRIYQW8A1043OAYH3BZPV84L3CBMRGFWBY9JSDMHV6R18H1FW8HOALOIX40EV9PIZ9BM33B1YX9U4TN34MI8H027VXKKIEUL7Q0D2KBJN08P4KDY3T6N8DWQU8H6WU96L41B8DIX5NDICK5RAM45L3MKJKW7WGLRV7OJPUDH0UL9TYON85W0GV' where id=8; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='ECIOEFDMYAGLBT3O1R268ZS1H57E1UAPRVW6YAXLJKG5X7JW77785D9S9CD3E4RJPEKUAWBCCKX8E9T7MD11N3F8GN0NH7BR01V0VR9KQSDM3NEIYFGJOGIHJ9TDLMTE3SQK823FW9PIX9HCVUNJ452BEYF8GM63N4FW5EXOCHO4AIYJKTK5CF3OQQLLJTU4DJZXZMFVY7VB64EV3R8A495T7ZEMXDNVJTOZVEXSY59L0RGUZXHVZRPV27S4U5XWJ' where id=8; -update noar ti set v1='ECIOEFDMYAGLBT3O1R268ZS1H57E1UAPRVW6YAXLJKG5X7JW77785D9S9CD3E4RJPEKUAWBCCKX8E9T7MD11N3F8GN0NH7BR01V0VR9KQSDM3NEIYFGJOGIHJ9TDLMTE3SQK823FW9PIX9HCVUNJ452BEYF8GM63N4FW5EXOCHO4AIYJKTK5CF3OQQLLJTU4DJZXZMFVY7VB64EV3R8A495T7ZEMXDNVJTOZVEXSY59L0RGUZXHVZRPV27S4U5XWJ' where id=8; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='3NOLAGREL8P7LKC2EU895T2IZOQDRLVNP29M79Q15MC2A53FYBZSKXT5OG5ZY2L7WRDCCC0RBUUXGOZZOFTLS3AU0UAZ3MXJ5DPLUD2PGOF7QFFWHMLHDJ28O8B2HJYL3GFN7W2J0W1OR03QEUSK1SK0NK0SS644NSS49X4HSLKM9KD39FBLUROM2LKT6PEG23QGPR8NQOWDTQHNFLE44LQ43LY9KHYL36EPABSGDXQ1BJHHH2TS7RSNI3F2FXQQV' where id=8; -update noar ti set v2='3NOLAGREL8P7LKC2EU895T2IZOQDRLVNP29M79Q15MC2A53FYBZSKXT5OG5ZY2L7WRDCCC0RBUUXGOZZOFTLS3AU0UAZ3MXJ5DPLUD2PGOF7QFFWHMLHDJ28O8B2HJYL3GFN7W2J0W1OR03QEUSK1SK0NK0SS644NSS49X4HSLKM9KD39FBLUROM2LKT6PEG23QGPR8NQOWDTQHNFLE44LQ43LY9KHYL36EPABSGDXQ1BJHHH2TS7RSNI3F2FXQQV' where id=8; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='PQIAGB35N5LJS5XUZX63D942KGK62XNX3XDX53KTN532WEQC7I1UHDLLALU3X50HXH6OHU7DLSPIAOO3TYY9P21L6D109UB75KDE9XPFLX0UOZNQPLBH5ATL1PSEW42LKTBV3K46IR2PZGHGSD4XRLX5TJOCJ6Q96W3ST83BYO3K0AM8DL2JCQH5DXWJQXM5NEDS99SAHEVOV2WOEC4DF3L5FC6SD4YZY2HU2TV2X3UO70Q1E5BWH7IPAN2XDNWKC' where id=8; -update noar ti set v3='PQIAGB35N5LJS5XUZX63D942KGK62XNX3XDX53KTN532WEQC7I1UHDLLALU3X50HXH6OHU7DLSPIAOO3TYY9P21L6D109UB75KDE9XPFLX0UOZNQPLBH5ATL1PSEW42LKTBV3K46IR2PZGHGSD4XRLX5TJOCJ6Q96W3ST83BYO3K0AM8DL2JCQH5DXWJQXM5NEDS99SAHEVOV2WOEC4DF3L5FC6SD4YZY2HU2TV2X3UO70Q1E5BWH7IPAN2XDNWKC' where id=8; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='3CJCDFHZLWKHCM17I3GQCR2KQ8ZREG02KZBI10IYZO2ACEW6H7QSN93OQJ7JQBGJJB71UF8F1SA1UEMQHTABS70R283IJ4FXR6D19TTWS0X5J1DULQ2C9YV01NA6BYKL3NGEWE0E1ZH8JLTDUUP6P6LZI6LE6268EHQIY32XC2A4N3039R0QSR9L4GOCCW7BIXC2JIBLMJ9SDV3IPC1YYA3PLPLR5COWCMKSUIBXQK4X4ETU0CUSYA6DMBUPFSELG' where id=9; -update noar ti set v0='3CJCDFHZLWKHCM17I3GQCR2KQ8ZREG02KZBI10IYZO2ACEW6H7QSN93OQJ7JQBGJJB71UF8F1SA1UEMQHTABS70R283IJ4FXR6D19TTWS0X5J1DULQ2C9YV01NA6BYKL3NGEWE0E1ZH8JLTDUUP6P6LZI6LE6268EHQIY32XC2A4N3039R0QSR9L4GOCCW7BIXC2JIBLMJ9SDV3IPC1YYA3PLPLR5COWCMKSUIBXQK4X4ETU0CUSYA6DMBUPFSELG' where id=9; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='G3GOHGWATRXVR37C1YCCRCOVTMGPWDS1NK1ZL8PALAELQHDNIXGF95CYAW10TQ3VR965CE6ARQJSLL6YJMCQCPWD00YVESE70EKHNU6YRJE3T9J66X1U6HVQIPSC845124XBMJEOPRFS3H37BS7H4F3RJDXY2LRRGQV9B5N7TA5NVNB800BQU47K2XZWM5A7JJGXKA62QB1UAB4ZEG9S81UFBNQEXY22IVZQYTQKU214KFFG9Q07ZVO7WMJ2RJGYJ' where id=9; -update noar ti set v1='G3GOHGWATRXVR37C1YCCRCOVTMGPWDS1NK1ZL8PALAELQHDNIXGF95CYAW10TQ3VR965CE6ARQJSLL6YJMCQCPWD00YVESE70EKHNU6YRJE3T9J66X1U6HVQIPSC845124XBMJEOPRFS3H37BS7H4F3RJDXY2LRRGQV9B5N7TA5NVNB800BQU47K2XZWM5A7JJGXKA62QB1UAB4ZEG9S81UFBNQEXY22IVZQYTQKU214KFFG9Q07ZVO7WMJ2RJGYJ' where id=9; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='S6JQWNHUI0YD0GDXHLMA5JAFN0L3DJIIXV6TPRG7DNI9CRLHAVI2WXD1R5O0R6OBY6A9H1K2H4YVKR5WAZ25PX3OXO814I5WYMIGMKPR73TSTFAC3LTGKR0CD8J0UYIQ7UU7NWGPLZYIZZKJJ00Y2IG4JDH1HDKFDXUPD6YJB1E4X3UG02C4PJPFOSTZ8JORAI9WVDNHYF3QAASGFY3L76FPF95V59XFS7ZLCGGZMZC1FP8WF0AIJ7KVKYBM9Y411' where id=9; -update noar ti set v2='S6JQWNHUI0YD0GDXHLMA5JAFN0L3DJIIXV6TPRG7DNI9CRLHAVI2WXD1R5O0R6OBY6A9H1K2H4YVKR5WAZ25PX3OXO814I5WYMIGMKPR73TSTFAC3LTGKR0CD8J0UYIQ7UU7NWGPLZYIZZKJJ00Y2IG4JDH1HDKFDXUPD6YJB1E4X3UG02C4PJPFOSTZ8JORAI9WVDNHYF3QAASGFY3L76FPF95V59XFS7ZLCGGZMZC1FP8WF0AIJ7KVKYBM9Y411' where id=9; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='UDYQGO0R3RSDM89EZH7GQV11RGIQ6GO9BDRSE0ORS8JRM1UJR9KEOE4KGY7FXU9UVN7OW8SWX4WP13ZH13Y7G3T7XQDXQ4FWKV8PXPG7J38CCS2D3ME5UUNQFR67DYJ02EAPS0UO9P63BXCXRDBODXUAL8BYFD2DP1NREA0DW7KXB8FOUJFPAKML0394FQZF3DTOH4ES10G5XO7RQKVIM5V7QFP5Q2OH88O54V47B6V1P8BGOF04SMCZL0P3BGPDS' where id=9; -update noar ti set v3='UDYQGO0R3RSDM89EZH7GQV11RGIQ6GO9BDRSE0ORS8JRM1UJR9KEOE4KGY7FXU9UVN7OW8SWX4WP13ZH13Y7G3T7XQDXQ4FWKV8PXPG7J38CCS2D3ME5UUNQFR67DYJ02EAPS0UO9P63BXCXRDBODXUAL8BYFD2DP1NREA0DW7KXB8FOUJFPAKML0394FQZF3DTOH4ES10G5XO7RQKVIM5V7QFP5Q2OH88O54V47B6V1P8BGOF04SMCZL0P3BGPDS' where id=9; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='VM74ZVZ91H42LB6M6HVD3C84ESPUNA69FPHP61AH97TV8ECL50O2PK25ZMM3OEP9L9Z0J7IYIY8SP7NAVLRQQQ22C4BBM0W5XIG316D6907OX4U4RR2I3G1C6MTWRQUBCE1YR26GUJ6T8X1BTI5E7UG6F5Q38ETJ8UNAWY072LLPOJDZ5B875NF1MSZE5NXMVM2IVZ6BWJKOOKNV1FVQGP4TELIAQEIB4H4BP0CXF43NMQ7M7AYGDSICVG0SNR06W' where id=10; -update noar ti set v0='VM74ZVZ91H42LB6M6HVD3C84ESPUNA69FPHP61AH97TV8ECL50O2PK25ZMM3OEP9L9Z0J7IYIY8SP7NAVLRQQQ22C4BBM0W5XIG316D6907OX4U4RR2I3G1C6MTWRQUBCE1YR26GUJ6T8X1BTI5E7UG6F5Q38ETJ8UNAWY072LLPOJDZ5B875NF1MSZE5NXMVM2IVZ6BWJKOOKNV1FVQGP4TELIAQEIB4H4BP0CXF43NMQ7M7AYGDSICVG0SNR06W' where id=10; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='I7XA6F281EWOER5VZQC7QQFEMF4BWMLDPMWK3RWBG1WMBENIKRA1YUCG5H0XNDL9NXNIO0MMKXUJGHB3AZF4ZTS2HKEWJNA4VY6T5A0GXVV6ETEHY3V66D1D6TEUOLPHFPIRVMSYEV73UHZ6K1JTJM5C27G83MNHTLOJ1KP55ATEQ4395G9Q36QQM3H47UQZ4N0VS1E4Z1UND5UCPA6YWWRY61IVHRJ884KZ0NFO9S002D2P9B2TI6PJD0Z4VLI0M' where id=10; -update noar ti set v1='I7XA6F281EWOER5VZQC7QQFEMF4BWMLDPMWK3RWBG1WMBENIKRA1YUCG5H0XNDL9NXNIO0MMKXUJGHB3AZF4ZTS2HKEWJNA4VY6T5A0GXVV6ETEHY3V66D1D6TEUOLPHFPIRVMSYEV73UHZ6K1JTJM5C27G83MNHTLOJ1KP55ATEQ4395G9Q36QQM3H47UQZ4N0VS1E4Z1UND5UCPA6YWWRY61IVHRJ884KZ0NFO9S002D2P9B2TI6PJD0Z4VLI0M' where id=10; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='O76BKZPSZK3J8AIJ0CRDMO09URPA1QNC8CNPDLI2MPZU4XCTFNXURS0LTUVJEUU9PJE4TMXXZQ7D9EY8Y9NMBMCPLUCVY1KTM9Y7CX9RH87SRBNM6ECMLQTXIN9VQOA2K8ME0S33PGVWSJIETH0ERZODNTXD7WTJY1YWYS3ABAZCF5OQS95IE7I8LT9LXP69MKARA5GFHWYMQ60EIV9HAZIUI7QZYDYHVNKBEUAGT3CWWHU7B533PV5WLECMH536I' where id=10; -update noar ti set v2='O76BKZPSZK3J8AIJ0CRDMO09URPA1QNC8CNPDLI2MPZU4XCTFNXURS0LTUVJEUU9PJE4TMXXZQ7D9EY8Y9NMBMCPLUCVY1KTM9Y7CX9RH87SRBNM6ECMLQTXIN9VQOA2K8ME0S33PGVWSJIETH0ERZODNTXD7WTJY1YWYS3ABAZCF5OQS95IE7I8LT9LXP69MKARA5GFHWYMQ60EIV9HAZIUI7QZYDYHVNKBEUAGT3CWWHU7B533PV5WLECMH536I' where id=10; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='0POM4VKQ11MTFZ1A3OCIIEXW0GP8AVRZJSWEI7H2Q3LH4LZHW45OLB05CBI50ZEX6NPS03RXH6KDZYHSZ8XVSOV4IQDUBJQE4TGPD87ZM4A37HHXFDD8C23370178WP2FY5LX2E35EOTCHU39CRE4F1TBR9VKA6V79X9ODHS409ESNQANEXGIPMHGT78H5UAGWUOCJ7BK53E3VJR1FM1AGYHBI6RYTGGPYEVYNHPNM1TC7GFEPFZLSNSI6YFT9OZI' where id=10; -update noar ti set v3='0POM4VKQ11MTFZ1A3OCIIEXW0GP8AVRZJSWEI7H2Q3LH4LZHW45OLB05CBI50ZEX6NPS03RXH6KDZYHSZ8XVSOV4IQDUBJQE4TGPD87ZM4A37HHXFDD8C23370178WP2FY5LX2E35EOTCHU39CRE4F1TBR9VKA6V79X9ODHS409ESNQANEXGIPMHGT78H5UAGWUOCJ7BK53E3VJR1FM1AGYHBI6RYTGGPYEVYNHPNM1TC7GFEPFZLSNSI6YFT9OZI' where id=10; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='5Y94ZOFI4OOC7RDNJ0BK9RY5U6G60P5U4QASMKYKGJO51FWQGRNB72KE521N6RVS6OOPV28SNKGV04HLXYGDX98OMLBPZQN6OQNP0R03V4Q0B97EOJEBGJX5MOF2O7L0ZWGSFYF5VYE1Q25ONP55CU4CG4D0YCYZVVS7COOF4I9S85VZ4JT8HYL9NNP3J8LT087GEJGC8X1HYCKDIGO9FLNE1GAP1FTTW43EXPO99Q06SVF3DNJYW2AQH66GKULXP' where id=11; -update noar ti set v0='5Y94ZOFI4OOC7RDNJ0BK9RY5U6G60P5U4QASMKYKGJO51FWQGRNB72KE521N6RVS6OOPV28SNKGV04HLXYGDX98OMLBPZQN6OQNP0R03V4Q0B97EOJEBGJX5MOF2O7L0ZWGSFYF5VYE1Q25ONP55CU4CG4D0YCYZVVS7COOF4I9S85VZ4JT8HYL9NNP3J8LT087GEJGC8X1HYCKDIGO9FLNE1GAP1FTTW43EXPO99Q06SVF3DNJYW2AQH66GKULXP' where id=11; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='1RHR83UJFV03F2GA0I3E35D76NHRAHCB4OR0V494MWSYG6V3ORE17230CQQ35LRQJ6M0VSRR1GO6OBKTFXDDU56QQC4ZGOWQR96TTF5L3CO46ZU43LEXYKJNX1IGIGGPQPQDWZYM30BJS96RJCEFBVJHYE9LDF65JORHHK5VPKSVGDZIX0SIGWKVAJB2BFV7H5BOR9DIPUEZ7Q87OQ95MW8T89EQWGTKXGBAJPUO343Y7ZRTG9XF0EA2D52K5BDY2' where id=11; -update noar ti set v1='1RHR83UJFV03F2GA0I3E35D76NHRAHCB4OR0V494MWSYG6V3ORE17230CQQ35LRQJ6M0VSRR1GO6OBKTFXDDU56QQC4ZGOWQR96TTF5L3CO46ZU43LEXYKJNX1IGIGGPQPQDWZYM30BJS96RJCEFBVJHYE9LDF65JORHHK5VPKSVGDZIX0SIGWKVAJB2BFV7H5BOR9DIPUEZ7Q87OQ95MW8T89EQWGTKXGBAJPUO343Y7ZRTG9XF0EA2D52K5BDY2' where id=11; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='THOVGUU3OM2776HJ7YMHT4LZ05MRHZRKHBDNP1IOYBG2M59GNB31DGO3LSLXBKMKXRH9Z9MLM6WVJQ8JEQCAWG3Y12ZFUO9M5S2U24PV75VEJ1IJG08V5KGFKDZOSTJA9SPUOMPJR9XT1PBB1720J28O9OPS11MFSFPA67HT43LDHF0CM1PIWP4O7DZZH94MN6ULP1HZBMZWZJYHHQ1MUNS4R4GWMMD99P2XCSTBRC13KY84XN1ZKKQKQRWT4MSZG' where id=11; -update noar ti set v2='THOVGUU3OM2776HJ7YMHT4LZ05MRHZRKHBDNP1IOYBG2M59GNB31DGO3LSLXBKMKXRH9Z9MLM6WVJQ8JEQCAWG3Y12ZFUO9M5S2U24PV75VEJ1IJG08V5KGFKDZOSTJA9SPUOMPJR9XT1PBB1720J28O9OPS11MFSFPA67HT43LDHF0CM1PIWP4O7DZZH94MN6ULP1HZBMZWZJYHHQ1MUNS4R4GWMMD99P2XCSTBRC13KY84XN1ZKKQKQRWT4MSZG' where id=11; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='KLS726XGRK14V001SB4RIWT5JL749GKGSG3BZ4Q383DZ4F6BZPL4UVIMYS5RL0BKQULG9W9T1HDUN19SBJPNEYI0COAXWVMHGEU570RM29M3MGQADC1OP97BRFCMI03IUKXOBSEW7LPNLF8S0H1SHQO1KRDP2OA852XL5BTDR50HZZ08J7307B5MIGKTTM4J6CD6Z1DHPQJQEMS6SSWNZH1N5SN2D1FAD9ZX9S2LVVOMJJG42STN3ZEN9SM17LENL' where id=11; -update noar ti set v3='KLS726XGRK14V001SB4RIWT5JL749GKGSG3BZ4Q383DZ4F6BZPL4UVIMYS5RL0BKQULG9W9T1HDUN19SBJPNEYI0COAXWVMHGEU570RM29M3MGQADC1OP97BRFCMI03IUKXOBSEW7LPNLF8S0H1SHQO1KRDP2OA852XL5BTDR50HZZ08J7307B5MIGKTTM4J6CD6Z1DHPQJQEMS6SSWNZH1N5SN2D1FAD9ZX9S2LVVOMJJG42STN3ZEN9SM17LENL' where id=11; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='EEK0C0RGF12J7GDM1O1WGBPB01W0B8KF5AN78XJSBPXJ1BZ79NNJPGB68KC8HZWFJVVV3TFX787TA6QRHCYRBACIVL8DIFGFUREDFPUQSWGIB605KUX906ZBN8HE5F6SR5OA66LS3NICCVD8L4SZRPKK9Z2EPH859I8KTE6LF2DEIHQ8OEQ2TXNLGIU1CHL77XZMZGLT8LXLODJTN760V4SB8WCFAP1CVLS5VVRKE6NKRKMEFC84K5W2CML4XLXHM' where id=12; -update noar ti set v0='EEK0C0RGF12J7GDM1O1WGBPB01W0B8KF5AN78XJSBPXJ1BZ79NNJPGB68KC8HZWFJVVV3TFX787TA6QRHCYRBACIVL8DIFGFUREDFPUQSWGIB605KUX906ZBN8HE5F6SR5OA66LS3NICCVD8L4SZRPKK9Z2EPH859I8KTE6LF2DEIHQ8OEQ2TXNLGIU1CHL77XZMZGLT8LXLODJTN760V4SB8WCFAP1CVLS5VVRKE6NKRKMEFC84K5W2CML4XLXHM' where id=12; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='69KU63BJ41MALFIGAPUW5U4YB12K0VS5C84EQ60ZLBJJHZQY9VBG7JMHFKBLUU7YZXRRXFJC4NZ4IHFRB22FQYRRDMJOAER17YOK7TZ6A27NYMDN6YL48H0WHZ3CRIOF38JKCPOW4XMEC11IGRSNYHWVWNA265KJGAWXWBRD9UPSQ9GV1ZOUN4Z8FBCKACNNARTTDOSQXJTY1PW8HR4HMN9FMIJOB9SMHCC9ZLGWN726AOQF3LE3TAP1VTB46BSNZ' where id=12; -update noar ti set v1='69KU63BJ41MALFIGAPUW5U4YB12K0VS5C84EQ60ZLBJJHZQY9VBG7JMHFKBLUU7YZXRRXFJC4NZ4IHFRB22FQYRRDMJOAER17YOK7TZ6A27NYMDN6YL48H0WHZ3CRIOF38JKCPOW4XMEC11IGRSNYHWVWNA265KJGAWXWBRD9UPSQ9GV1ZOUN4Z8FBCKACNNARTTDOSQXJTY1PW8HR4HMN9FMIJOB9SMHCC9ZLGWN726AOQF3LE3TAP1VTB46BSNZ' where id=12; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='2ZIKLL8IEE2IRP883806DHIWXKH3AJN2SZBF19I8KTZ92CC1APWDOPX9VFOQM57A7BPP1CBCRZVKMNHDMCOJGLB7XL13ICGCSZ9OL6J8XDKHMOFT2ZQBVMOI4N2INW3SNQM2MNR7Y6X5ZTCT1NJ9ONYR5JROPPOTBDJ3PCERN3WN6T8FW1MC4S713UAMEWHHKXMQWROMOZLITDSM8Q30BO39OA1I79SDMHU3NY1TDAFN41N8IR666AFSMPYWDC4TS' where id=12; -update noar ti set v2='2ZIKLL8IEE2IRP883806DHIWXKH3AJN2SZBF19I8KTZ92CC1APWDOPX9VFOQM57A7BPP1CBCRZVKMNHDMCOJGLB7XL13ICGCSZ9OL6J8XDKHMOFT2ZQBVMOI4N2INW3SNQM2MNR7Y6X5ZTCT1NJ9ONYR5JROPPOTBDJ3PCERN3WN6T8FW1MC4S713UAMEWHHKXMQWROMOZLITDSM8Q30BO39OA1I79SDMHU3NY1TDAFN41N8IR666AFSMPYWDC4TS' where id=12; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='15BSSRPGNMG2W8RQUK67UU1JLFDH21KOSU9EWHLMTIVOBIYVV0KW8O8E273PPFZ0LGGCI439J5Y1V3OKNYDO5HLTEXUMPI68KUAUL4WF2NINTUTSHLYXTI8YWS6HCNS3QT0VL7BUBGF2RB1TTBW1D16LDCFNO8VFMRMUWBA9WFGBQWY6PSJI3SLOW1TUXBLZE7N0D6GQ1PR4E45JKLZ173DEEZHUIQ7EN35DPFVMP4C3MOSE70GAS9I71F6WR4WA4' where id=12; -update noar ti set v3='15BSSRPGNMG2W8RQUK67UU1JLFDH21KOSU9EWHLMTIVOBIYVV0KW8O8E273PPFZ0LGGCI439J5Y1V3OKNYDO5HLTEXUMPI68KUAUL4WF2NINTUTSHLYXTI8YWS6HCNS3QT0VL7BUBGF2RB1TTBW1D16LDCFNO8VFMRMUWBA9WFGBQWY6PSJI3SLOW1TUXBLZE7N0D6GQ1PR4E45JKLZ173DEEZHUIQ7EN35DPFVMP4C3MOSE70GAS9I71F6WR4WA4' where id=12; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='7PK3UW845LKDAMJMQXEB4JFM4U9QZL238SNW5K2TSYBWTLHQ4GC7I1YW5Z3R0LPBD7EO7YV6NGVEEL8FXDQ79RXEGQRLMRYNTN473DT96B3S5FZAM5NXV9GX5M3VSSJAAEH81MI3J6BOFV3J4S0HNT1UTR48L0UR97M1X4ROSMIKDOPZ0D8HCM1LVKXXRMFBIRYSQ6T7ZJETLILMCXKOU8M7D0UPDRYKRG60X45N12112DVZE3SAAW375V4XRYFUB' where id=13; -update noar ti set v0='7PK3UW845LKDAMJMQXEB4JFM4U9QZL238SNW5K2TSYBWTLHQ4GC7I1YW5Z3R0LPBD7EO7YV6NGVEEL8FXDQ79RXEGQRLMRYNTN473DT96B3S5FZAM5NXV9GX5M3VSSJAAEH81MI3J6BOFV3J4S0HNT1UTR48L0UR97M1X4ROSMIKDOPZ0D8HCM1LVKXXRMFBIRYSQ6T7ZJETLILMCXKOU8M7D0UPDRYKRG60X45N12112DVZE3SAAW375V4XRYFUB' where id=13; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='RMBX39P1LGB8Q0U4NRC6XCXPXAUG8SHNBDEWO8IFPJ8X6CMA6BTDHVT9PT29FCYFIDZTK1571SIHWIFC6GKUASF49NI3MYK618T0M2275K0CLBB0SQ492NMO83LO2SWKCR3JKR6DKRQQ723G4TQGR1A6LILYADCYA4P327MU6OQ66WLIOWV0IC4EXRXINSU0QZB6VQSRQKIAV5U8C4MGBT7O0XPC23FYDGRY999KY1KO12B85SD6VR14L7K9F50FJ' where id=13; -update noar ti set v1='RMBX39P1LGB8Q0U4NRC6XCXPXAUG8SHNBDEWO8IFPJ8X6CMA6BTDHVT9PT29FCYFIDZTK1571SIHWIFC6GKUASF49NI3MYK618T0M2275K0CLBB0SQ492NMO83LO2SWKCR3JKR6DKRQQ723G4TQGR1A6LILYADCYA4P327MU6OQ66WLIOWV0IC4EXRXINSU0QZB6VQSRQKIAV5U8C4MGBT7O0XPC23FYDGRY999KY1KO12B85SD6VR14L7K9F50FJ' where id=13; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='ZU93JFAVPL8EPW0SWSBSW5LXCN0Y4LSWQEQ1ZXTLKCH7PQBUDRMA7ZGDJYNIIEEWSA0YT0DEPFMXGQIORPDCMK8KSFITR0SKXGHHEL7I0CL0B9RLOXXLE5K09JMLK85CF4JEYW429VR2UGKAUFVTB3AE65XU9X8KEICVK3Y3LRWPQLIPKAS0P1RFPGLFCD9JI3TBE6B0HX7ZZPCNRAYWX6L59Y69TGJWUWJ6Q7GEO8MLBCR1MB1BLXURTI7PD2RJZ' where id=13; -update noar ti set v2='ZU93JFAVPL8EPW0SWSBSW5LXCN0Y4LSWQEQ1ZXTLKCH7PQBUDRMA7ZGDJYNIIEEWSA0YT0DEPFMXGQIORPDCMK8KSFITR0SKXGHHEL7I0CL0B9RLOXXLE5K09JMLK85CF4JEYW429VR2UGKAUFVTB3AE65XU9X8KEICVK3Y3LRWPQLIPKAS0P1RFPGLFCD9JI3TBE6B0HX7ZZPCNRAYWX6L59Y69TGJWUWJ6Q7GEO8MLBCR1MB1BLXURTI7PD2RJZ' where id=13; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='1B5466PNOB9QEYZBBIXMI8W70Q7LPU11JDFROHV84AMT6ZT93USOMV3XJHKVNJ03XGV7ID4FXZ28BBUK5J8U94PQG4V57GXL10CQN2T8L04GKIQ1C4CV7UG0K58L5N9VCREK17S3T0KWL27JA1VSOYOW7Q7P54S0NNYX3ZUDY270O801AFX3IM594B9VUGXWIQUV238QUVRCGYWW9F1C1KZA2ILYJL1V3WZ4IUD1IXI375X7T67TAKWN06DPZBPOY' where id=13; -update noar ti set v3='1B5466PNOB9QEYZBBIXMI8W70Q7LPU11JDFROHV84AMT6ZT93USOMV3XJHKVNJ03XGV7ID4FXZ28BBUK5J8U94PQG4V57GXL10CQN2T8L04GKIQ1C4CV7UG0K58L5N9VCREK17S3T0KWL27JA1VSOYOW7Q7P54S0NNYX3ZUDY270O801AFX3IM594B9VUGXWIQUV238QUVRCGYWW9F1C1KZA2ILYJL1V3WZ4IUD1IXI375X7T67TAKWN06DPZBPOY' where id=13; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='PWXJBK9ACLJIZTGZBVMWKKEB5CU5PSBSEH5K89RNFTUDG5W91KVJHVC9S2CMPIFWKI2ZDQD7LFC17PYX8TXRYEDKR7VFVZY69AZXTVPQMUTJEUS8H2LMGM679Y8JBAUKZ1B9YAXWFBJBYAMXY8DNENU8E4MCBIVJZ8AW7S3RUJP06LBFMIRS8B3SIPOQWM1GMPZAEC5S7TIH8PL7IDVABN2P3A5MEPEPJQ2BA1S3LXF0ZWTFESB2G1P7BL08JDLZ1' where id=14; -update noar ti set v0='PWXJBK9ACLJIZTGZBVMWKKEB5CU5PSBSEH5K89RNFTUDG5W91KVJHVC9S2CMPIFWKI2ZDQD7LFC17PYX8TXRYEDKR7VFVZY69AZXTVPQMUTJEUS8H2LMGM679Y8JBAUKZ1B9YAXWFBJBYAMXY8DNENU8E4MCBIVJZ8AW7S3RUJP06LBFMIRS8B3SIPOQWM1GMPZAEC5S7TIH8PL7IDVABN2P3A5MEPEPJQ2BA1S3LXF0ZWTFESB2G1P7BL08JDLZ1' where id=14; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='CWYTYZTB4ERWMGI2W8PPOJJ85MKG4T1Y19PIY5OKOXGQPZNXY8GW7HQLP3QVSDX50LKDSXTX520TCS82W4422VORS7RT0SA4T5PL26BTM06QJYBXOA0YHJMQ3O0O2IR11WU5LTVKZO5ILAB49ORO9CA5N3EOY5KHMZ26H1F67G9G2JF4LCG4SLKQXNUY1KV64HBB6LLSX1BTMRMNX414C6A22K3HG0SQ8U5H2PNA7MMQP7NTNGGAT26WBJJ0DA89S' where id=14; -update noar ti set v1='CWYTYZTB4ERWMGI2W8PPOJJ85MKG4T1Y19PIY5OKOXGQPZNXY8GW7HQLP3QVSDX50LKDSXTX520TCS82W4422VORS7RT0SA4T5PL26BTM06QJYBXOA0YHJMQ3O0O2IR11WU5LTVKZO5ILAB49ORO9CA5N3EOY5KHMZ26H1F67G9G2JF4LCG4SLKQXNUY1KV64HBB6LLSX1BTMRMNX414C6A22K3HG0SQ8U5H2PNA7MMQP7NTNGGAT26WBJJ0DA89S' where id=14; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='KVZCNPUCEGMV04O6D41DQMSPNV5BOEMQXWNKWEJNKLGAZM2DTI1I7J7IBT8TLHCZ0WS7GCKOW62MN0E9VHOIKEC21PQV3QG2ILLIZE2XM23UJPNBWTR1QX2KGORO4JEV3IJYSDDKD9YTWUQVPJ39H75PJRCZWSE1EZD13J5CC9TA504I151ED3MQA48W8YLQOCMWZ51CS3I9T7AV0S7MUNEIJD7ZCIVAC556T33N6UAYYG0MK99C29GTADOB05LWZ' where id=14; -update noar ti set v2='KVZCNPUCEGMV04O6D41DQMSPNV5BOEMQXWNKWEJNKLGAZM2DTI1I7J7IBT8TLHCZ0WS7GCKOW62MN0E9VHOIKEC21PQV3QG2ILLIZE2XM23UJPNBWTR1QX2KGORO4JEV3IJYSDDKD9YTWUQVPJ39H75PJRCZWSE1EZD13J5CC9TA504I151ED3MQA48W8YLQOCMWZ51CS3I9T7AV0S7MUNEIJD7ZCIVAC556T33N6UAYYG0MK99C29GTADOB05LWZ' where id=14; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='OQREEWT0RSE67A239V7QW6ZSPBOBV989G5DO4TFOAB6RTFWMC6QBJ8HBVF2F4HTXOBD9E53X67YRPPSQHZFVV43AY2VLREOTKCPO0NBRU63MP0YOICW29EFAFP9Z025540J1GY2I8FOWJ1E3GMWNF6X7KGPR82M2Y5L9GO92CZLFYSG3K46WK60TVI36D5ZM6N9EA7E5A8TO2Z0RYHE3GWZ0THRG2JTHT5T79PKYC8HGFPKFXY8NXEEQ55GMVI3G0' where id=14; -update noar ti set v3='OQREEWT0RSE67A239V7QW6ZSPBOBV989G5DO4TFOAB6RTFWMC6QBJ8HBVF2F4HTXOBD9E53X67YRPPSQHZFVV43AY2VLREOTKCPO0NBRU63MP0YOICW29EFAFP9Z025540J1GY2I8FOWJ1E3GMWNF6X7KGPR82M2Y5L9GO92CZLFYSG3K46WK60TVI36D5ZM6N9EA7E5A8TO2Z0RYHE3GWZ0THRG2JTHT5T79PKYC8HGFPKFXY8NXEEQ55GMVI3G0' where id=14; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='MR83IANLYWE7Q1R6NI1JTACZCMC39P7DOX2YC8RRICPVFAFPJM1S3K05740BK65RRA0ZKCISW8T4NTNWUU8YFFF1GIZHS8GUJPVTE9IZBVVIEVF2NTVKFT4638I5140B5XT1RL0YV2CDWLQEOH719W43B5NF4FUBJ0JOUKB7RDG7AW2JFFP9UZEG1HYJHLUAOV18RHTMTAXB6WDW3014YLWAPQJLP3QCS78Q43RWY30ZUXO34RWC9MBA88GTZG38V' where id=15; -update noar ti set v0='MR83IANLYWE7Q1R6NI1JTACZCMC39P7DOX2YC8RRICPVFAFPJM1S3K05740BK65RRA0ZKCISW8T4NTNWUU8YFFF1GIZHS8GUJPVTE9IZBVVIEVF2NTVKFT4638I5140B5XT1RL0YV2CDWLQEOH719W43B5NF4FUBJ0JOUKB7RDG7AW2JFFP9UZEG1HYJHLUAOV18RHTMTAXB6WDW3014YLWAPQJLP3QCS78Q43RWY30ZUXO34RWC9MBA88GTZG38V' where id=15; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='KMP2BQ44FDUD59T37WK2CBTGDBIT1VNLG1KT7HBF2QGCR98AU8BQDM6VWST1Q25ZOB29HRYDWZ8VFTMHX5BWM583BHYSZ7FYO0FHSSVLEZHEOOL95EMOHQH289BGETIP5UPHJM9P7HBUK091KFWLHNPLKM0JKE3PCLKWZVR7M97JW8VZOWKZAWLCE52MD5IRZD30UAMXG4CVPP5QQFLKLD4AV1LJFBRJRJ54K2GQ16ZVVK7MWIS8KBU41T3AHXUPP' where id=15; -update noar ti set v1='KMP2BQ44FDUD59T37WK2CBTGDBIT1VNLG1KT7HBF2QGCR98AU8BQDM6VWST1Q25ZOB29HRYDWZ8VFTMHX5BWM583BHYSZ7FYO0FHSSVLEZHEOOL95EMOHQH289BGETIP5UPHJM9P7HBUK091KFWLHNPLKM0JKE3PCLKWZVR7M97JW8VZOWKZAWLCE52MD5IRZD30UAMXG4CVPP5QQFLKLD4AV1LJFBRJRJ54K2GQ16ZVVK7MWIS8KBU41T3AHXUPP' where id=15; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='UT9IKX7AT2RGHPUFA4WZ3ZFDM30BQZYNNMS2USY7IB1IMNNA1O3I5CJJDSR3LHQLICWNUSKNOM7UPSTJZ1JZN6OQ8288E00OQ102XJRJKBJX0KRXTFXZFUQIWSZZBBMGDFPXO153R1N1FX6ZC1A52V6ZY465FLXB2GY6HG546TZTIDY78BPH07Y4U61D1I79A96P6DS4AMOTG1HAHMI7BU4WLVSAOLT4FAZL4A41GTHQ0X222RZL6T5WPDUG1TE19' where id=15; -update noar ti set v2='UT9IKX7AT2RGHPUFA4WZ3ZFDM30BQZYNNMS2USY7IB1IMNNA1O3I5CJJDSR3LHQLICWNUSKNOM7UPSTJZ1JZN6OQ8288E00OQ102XJRJKBJX0KRXTFXZFUQIWSZZBBMGDFPXO153R1N1FX6ZC1A52V6ZY465FLXB2GY6HG546TZTIDY78BPH07Y4U61D1I79A96P6DS4AMOTG1HAHMI7BU4WLVSAOLT4FAZL4A41GTHQ0X222RZL6T5WPDUG1TE19' where id=15; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='ICKII3HFMKINOU8UMYDKCEH4P7PU5RGF02VCJ6PSWW06LP4HAMCXXSZ5FVIEHGSP1XHG95D4X542FNGZXDAIVRPC0RP54PR6ZJ4YUK4KMQ85YYMJSZAPMCGSR18RXSL40CT4CPG4A9PFT56J5WCVV6DCW4L8IA978PGRU2L3GVBRJMQB0BQE27UBVVZRVX4B359XL4S2EIPT3AU3MTU36O8BXAG2TBMT63DOJQO204P9LJWHJ64CQO567VISFJW0X' where id=15; -update noar ti set v3='ICKII3HFMKINOU8UMYDKCEH4P7PU5RGF02VCJ6PSWW06LP4HAMCXXSZ5FVIEHGSP1XHG95D4X542FNGZXDAIVRPC0RP54PR6ZJ4YUK4KMQ85YYMJSZAPMCGSR18RXSL40CT4CPG4A9PFT56J5WCVV6DCW4L8IA978PGRU2L3GVBRJMQB0BQE27UBVVZRVX4B359XL4S2EIPT3AU3MTU36O8BXAG2TBMT63DOJQO204P9LJWHJ64CQO567VISFJW0X' where id=15; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='DQGN42J0F5OE57YURUHI5VTTG69RIVFYOC3CYWOISK4UU50KBUSD3FD0BN3VLHW92CE0B3YJ35DZB7LPE9WMSPWZ98YQF6YCBK9HUBXP49D4EBLLTRN7MOJ52WVBTCEWXP714WHGH0CMKO1A8QTJQDOKISR9IISDWHZYJ2Q41L5HT4C2WNVWM3YNJO2TPKT18C11BMMCA2XFR9Z45IUF67RE2UESVJFK27V4A99TIPJVPHQM2J43SAQK0WRTBBASE' where id=16; -update noar ti set v0='DQGN42J0F5OE57YURUHI5VTTG69RIVFYOC3CYWOISK4UU50KBUSD3FD0BN3VLHW92CE0B3YJ35DZB7LPE9WMSPWZ98YQF6YCBK9HUBXP49D4EBLLTRN7MOJ52WVBTCEWXP714WHGH0CMKO1A8QTJQDOKISR9IISDWHZYJ2Q41L5HT4C2WNVWM3YNJO2TPKT18C11BMMCA2XFR9Z45IUF67RE2UESVJFK27V4A99TIPJVPHQM2J43SAQK0WRTBBASE' where id=16; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='K7HFG4ISR8HL8RQNIL6IDS9R32RBYZHNB9X13J9EIOILG0PKKW4A6X8LCMXGH7KD6T8JWBW588Y5M13PBHVV4WLRD74KZZJBTY0E9VBF5D8QAOI2T75GA4OJVJ9HUVWB91EQXF0Z1QDHJ5DEBS3EML5K8YZLCVDTWIC16N4WHX0EXNDVWJFRPSAZ1GP8Q7K481K4I1TYX2X1MB8MTOOG5RGGBSSUKFRDEW9O24W7KUJCVXK9SZTDUFHK2SAG59P2G' where id=16; -update noar ti set v1='K7HFG4ISR8HL8RQNIL6IDS9R32RBYZHNB9X13J9EIOILG0PKKW4A6X8LCMXGH7KD6T8JWBW588Y5M13PBHVV4WLRD74KZZJBTY0E9VBF5D8QAOI2T75GA4OJVJ9HUVWB91EQXF0Z1QDHJ5DEBS3EML5K8YZLCVDTWIC16N4WHX0EXNDVWJFRPSAZ1GP8Q7K481K4I1TYX2X1MB8MTOOG5RGGBSSUKFRDEW9O24W7KUJCVXK9SZTDUFHK2SAG59P2G' where id=16; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='XSZHNUE8KT052R1ZK2TBAFM66DQN9R362YLHBP4EPOMBTAKIOE87X26KJSSDVRMBI2NVJTMDQF5XVT1ELMZGFSHA0YVVH1XHKPS27WPLPLER6PNWGJ91BT5SED31S1CBSS112PSHT7REHDGZIB1FAE3S9C02UCSNG36VUCJ8WYRW1G3P1DRYSETB2195T0EBQ0YOSNWO35PUPFY0UICLEPFG03L6GN4CA87QQL2A2SDC36N9KLQSFYN1CSW9PAWB4' where id=16; -update noar ti set v2='XSZHNUE8KT052R1ZK2TBAFM66DQN9R362YLHBP4EPOMBTAKIOE87X26KJSSDVRMBI2NVJTMDQF5XVT1ELMZGFSHA0YVVH1XHKPS27WPLPLER6PNWGJ91BT5SED31S1CBSS112PSHT7REHDGZIB1FAE3S9C02UCSNG36VUCJ8WYRW1G3P1DRYSETB2195T0EBQ0YOSNWO35PUPFY0UICLEPFG03L6GN4CA87QQL2A2SDC36N9KLQSFYN1CSW9PAWB4' where id=16; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='9CFIKEF4C2YAZSK0OV65F4H4GMZZM7MUQIJ1NOPAPBQ9AB5FWTJMUCJSLUZ9H1C4N6MWYB6HNIG8FM76VKJR343KFZ8KCAZ5VUQI82ST3KGGJ8T2A04RUWG86SI799AYDL6AIE0KH9X2Q8PJIHQJ2ZHO71PBD5JEKBD4SWIZA88QFGKZHZMU5WYGHADS3GKIA3YAM17LL122MH2UFTGHFTQ20P3KQOWGCBH6LFIQ8REA1WRJEZCBWA75RKU1FU0JJ' where id=16; -update noar ti set v3='9CFIKEF4C2YAZSK0OV65F4H4GMZZM7MUQIJ1NOPAPBQ9AB5FWTJMUCJSLUZ9H1C4N6MWYB6HNIG8FM76VKJR343KFZ8KCAZ5VUQI82ST3KGGJ8T2A04RUWG86SI799AYDL6AIE0KH9X2Q8PJIHQJ2ZHO71PBD5JEKBD4SWIZA88QFGKZHZMU5WYGHADS3GKIA3YAM17LL122MH2UFTGHFTQ20P3KQOWGCBH6LFIQ8REA1WRJEZCBWA75RKU1FU0JJ' where id=16; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='TY6I6SKGL5UOL42BRO29O1UXOD2JYEMXN8AZ96O7YPAUAL088O07TGEC6DVZOM3839PPZ7KBLFDRRQDKBFYPS72ORXESNCEWKM9UDM6ZR6LAZXA2SW18O705C6AII8IW2BKJ1M0Z424V6WA2ORBSJ7OZLDLGW21S9NYIZOE9OOS2TZNU323E0DX9G4C16VSHMJUCC2IOJR2VCYARZ52M4RU83KDHVFXWX6JBY4BLGYV2ZR4X481UWTP81Y099276K' where id=17; -update noar ti set v0='TY6I6SKGL5UOL42BRO29O1UXOD2JYEMXN8AZ96O7YPAUAL088O07TGEC6DVZOM3839PPZ7KBLFDRRQDKBFYPS72ORXESNCEWKM9UDM6ZR6LAZXA2SW18O705C6AII8IW2BKJ1M0Z424V6WA2ORBSJ7OZLDLGW21S9NYIZOE9OOS2TZNU323E0DX9G4C16VSHMJUCC2IOJR2VCYARZ52M4RU83KDHVFXWX6JBY4BLGYV2ZR4X481UWTP81Y099276K' where id=17; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='S1S76G57X1KT93CONQSL9JR7PWAMNRZQHBFQCJFORM6PQUOIGG9AQRKCJSK5G062464L067LMRZV36N42KNUVNW06BRS6633A5670IY1ZRTEK1W7YVP56T77H7UKL8VHJKWI4TF7D5OOFXGTY887U7F5AAI1VF70RHUCF3OQ7XLRZ2N1S488W1OMNAJUVM03KBLH2EVFYUDHE50MID8PVLS75REXQP0B10ZP6DN5BVYR5A416GR2ZVBKAK0JNJ1RA' where id=17; -update noar ti set v1='S1S76G57X1KT93CONQSL9JR7PWAMNRZQHBFQCJFORM6PQUOIGG9AQRKCJSK5G062464L067LMRZV36N42KNUVNW06BRS6633A5670IY1ZRTEK1W7YVP56T77H7UKL8VHJKWI4TF7D5OOFXGTY887U7F5AAI1VF70RHUCF3OQ7XLRZ2N1S488W1OMNAJUVM03KBLH2EVFYUDHE50MID8PVLS75REXQP0B10ZP6DN5BVYR5A416GR2ZVBKAK0JNJ1RA' where id=17; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='84XUWTY0IAMVDO7BOCMH9N40N46KOI0YM8A6ELLHXG59GUS1KM1Z7FNUP8DQ80RH2GF18X5BTTVMJ6M5RPE4N32QDS9CT0FKRA2Z69QHGGZRHGMKMNRSIMIB7Z5UTMGUE54SPE7MTMZ4Y5Y50BUHE9YOTGZUMSAPYCNP25Y0J0QUM90RV5PGD21244TNMYW2KPGZ3WKR98W5A3720OW7X1UQ3MIEMHDJY6LNA6BIC1ILECNM2KUADB4F9RN6SSS15' where id=17; -update noar ti set v2='84XUWTY0IAMVDO7BOCMH9N40N46KOI0YM8A6ELLHXG59GUS1KM1Z7FNUP8DQ80RH2GF18X5BTTVMJ6M5RPE4N32QDS9CT0FKRA2Z69QHGGZRHGMKMNRSIMIB7Z5UTMGUE54SPE7MTMZ4Y5Y50BUHE9YOTGZUMSAPYCNP25Y0J0QUM90RV5PGD21244TNMYW2KPGZ3WKR98W5A3720OW7X1UQ3MIEMHDJY6LNA6BIC1ILECNM2KUADB4F9RN6SSS15' where id=17; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='ZOG31JVCR5RRBQWGR84B3X7767PQX2XEQZTMDZ3VEPTNHKRZLPBFXSIM38KFG6D1ZH1YYWMDZQ31URMY5C90KMK9C1EWKJH8520U0JGQXWRSDIF88RJ1A4WM1K95TU68H452VIJXJIQBBGESJ2QIB5N8XCWLQPWAS38DN5K9OVYER9ODZFKI2JC92QLBUOJGUADN8O4WDPKOOGA4VGFIBLQFY1M6ICJOK5D2S210NAI4SAVSTVIL594RWP9KGS555' where id=17; -update noar ti set v3='ZOG31JVCR5RRBQWGR84B3X7767PQX2XEQZTMDZ3VEPTNHKRZLPBFXSIM38KFG6D1ZH1YYWMDZQ31URMY5C90KMK9C1EWKJH8520U0JGQXWRSDIF88RJ1A4WM1K95TU68H452VIJXJIQBBGESJ2QIB5N8XCWLQPWAS38DN5K9OVYER9ODZFKI2JC92QLBUOJGUADN8O4WDPKOOGA4VGFIBLQFY1M6ICJOK5D2S210NAI4SAVSTVIL594RWP9KGS555' where id=17; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='4Z0LYXCKI25LHUKIURUNG6Y2S2E74BKW49A90PLP634NOBX6VN68BXDEURWIYDF8PRCDS1KBWZMU8LNVI201UTXZDPE5LMQUZ2GQ6L7GYLFIKAKY00K86GH32O150MOHX2CAYFSQNG077FF60CK67E5B1BY1HAOQK74T7645W6I3MSC3HFW002H2D9Y4OUPUKVQKN4SCY36G1PQCWCAEO3V9YSAM3PCSZU6XM7A8HZGVYFDKZ7BV68AJJ1CRUXFCA' where id=18; -update noar ti set v0='4Z0LYXCKI25LHUKIURUNG6Y2S2E74BKW49A90PLP634NOBX6VN68BXDEURWIYDF8PRCDS1KBWZMU8LNVI201UTXZDPE5LMQUZ2GQ6L7GYLFIKAKY00K86GH32O150MOHX2CAYFSQNG077FF60CK67E5B1BY1HAOQK74T7645W6I3MSC3HFW002H2D9Y4OUPUKVQKN4SCY36G1PQCWCAEO3V9YSAM3PCSZU6XM7A8HZGVYFDKZ7BV68AJJ1CRUXFCA' where id=18; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='CKOKYWHVQ4ZT3FRRUYASZLCTT3MKW08LE4Q5PWRA6O016BGQMM2SZ9FSBIXSU5VQLUF7ZOMSEMU0VBQGQ1017PIE2XXFJSTY9UC7V0IA68VSYQ5XPQ7PWYD6JQ09EHR6B5LA7XWK548SCVV9Q15PXONSX82C3VIC54OXTTKRNS6YUEHN08B14AARBOPQ4EWIAFHL3NLQJC15XNG4Y1FZEI1YRFGQYKJEVXPHYD6B5V695CN0MVUSTRULKIHZEYVKZ' where id=18; -update noar ti set v1='CKOKYWHVQ4ZT3FRRUYASZLCTT3MKW08LE4Q5PWRA6O016BGQMM2SZ9FSBIXSU5VQLUF7ZOMSEMU0VBQGQ1017PIE2XXFJSTY9UC7V0IA68VSYQ5XPQ7PWYD6JQ09EHR6B5LA7XWK548SCVV9Q15PXONSX82C3VIC54OXTTKRNS6YUEHN08B14AARBOPQ4EWIAFHL3NLQJC15XNG4Y1FZEI1YRFGQYKJEVXPHYD6B5V695CN0MVUSTRULKIHZEYVKZ' where id=18; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='SDRECPG8ZCNSLDA4JOPFL554CQ798XKGFEBC25HVR4TVZI6TZWVHQBZHG0KYW6AX80I9G11PRMN2Z1BWKWUFH33AWELPJJHLSP5UJ9K7C0PYBUUM7F8D1VQWKJK70C0XVDIZC1OS52GX1MUA930WG8LNIERCLAZMA0YQ55JHSZAIWTFAROX8HEEHTBV0IZMK98YK4PI6H2CL2AIBTBLWTQOSM54BFI71X4ASSO1QHCLI8OGNQLHC3HCJZO0T4PYGS' where id=18; -update noar ti set v2='SDRECPG8ZCNSLDA4JOPFL554CQ798XKGFEBC25HVR4TVZI6TZWVHQBZHG0KYW6AX80I9G11PRMN2Z1BWKWUFH33AWELPJJHLSP5UJ9K7C0PYBUUM7F8D1VQWKJK70C0XVDIZC1OS52GX1MUA930WG8LNIERCLAZMA0YQ55JHSZAIWTFAROX8HEEHTBV0IZMK98YK4PI6H2CL2AIBTBLWTQOSM54BFI71X4ASSO1QHCLI8OGNQLHC3HCJZO0T4PYGS' where id=18; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='HTOAW4FV211DWN7412E5AAWPCYQRG6JX4KSIT94WV7AEZSACPHY0NB1D05YIEARYWTTUNXXPY6D5O3DJBDA8BZ031HRKYGRGMN9K3O7E1N6HJF8WLR2TOPC9050RQ4P3YXJF5KLERWRC7H8SPGQ472UYLC5IVGHSRYMSJ14DZSDDTGG2PF4FH93JA0PTZPL7I9FAQIWAIPJD89G6A5T4PALJTKWMBIMEZRVYK1UKZJHA4S7IFJWYVNZK0DMKF6MLG' where id=18; -update noar ti set v3='HTOAW4FV211DWN7412E5AAWPCYQRG6JX4KSIT94WV7AEZSACPHY0NB1D05YIEARYWTTUNXXPY6D5O3DJBDA8BZ031HRKYGRGMN9K3O7E1N6HJF8WLR2TOPC9050RQ4P3YXJF5KLERWRC7H8SPGQ472UYLC5IVGHSRYMSJ14DZSDDTGG2PF4FH93JA0PTZPL7I9FAQIWAIPJD89G6A5T4PALJTKWMBIMEZRVYK1UKZJHA4S7IFJWYVNZK0DMKF6MLG' where id=18; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='J2J0ES29Y61EHWTCR8LAQ4R0HVHOW0JFH1VZP7M88CG0XUXMHXLU572Y63HYJ2GK3PNMKN7QVRX7AA216NU3OBFLM1815DHOAICONUP1HL25O8PMLWL7WZ4GSIXCC80DMHRL0KY8Z0Y0DMT7XQKJNZFC23LMCY47C6P09CV4TWOTQWA137HOM457HYDV1Z7W4L99RZKTF37A2S7FFI4KFSAHHSO8FINF3CN8ABSXID8M1BBCXKXD4RTLYWNLMMPW4' where id=19; -update noar ti set v0='J2J0ES29Y61EHWTCR8LAQ4R0HVHOW0JFH1VZP7M88CG0XUXMHXLU572Y63HYJ2GK3PNMKN7QVRX7AA216NU3OBFLM1815DHOAICONUP1HL25O8PMLWL7WZ4GSIXCC80DMHRL0KY8Z0Y0DMT7XQKJNZFC23LMCY47C6P09CV4TWOTQWA137HOM457HYDV1Z7W4L99RZKTF37A2S7FFI4KFSAHHSO8FINF3CN8ABSXID8M1BBCXKXD4RTLYWNLMMPW4' where id=19; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='J7DLWVOJB6YPXAF5LQ2G7NZG6FV7J5TFRVE1QH1QOFL7B6JQN407RLZBMJHJNLC837K3T7RY9M0TX8F7FNY8K4OVA86TAF1EZVHBZZEISI10NKWSXEY5K3JTI2JFPEOI6L150MZ9WFECR8F8FV8ATGYJ69QO5CISXETT0HU25FU19AZRQ0LKJC1LHZ28G83IVSSI440WFPYA1NRTYLDFUCVUV5M21AF6ZYHBV1K2MGNOXCBXR0NCBOWTJBD5QEZ61' where id=19; -update noar ti set v1='J7DLWVOJB6YPXAF5LQ2G7NZG6FV7J5TFRVE1QH1QOFL7B6JQN407RLZBMJHJNLC837K3T7RY9M0TX8F7FNY8K4OVA86TAF1EZVHBZZEISI10NKWSXEY5K3JTI2JFPEOI6L150MZ9WFECR8F8FV8ATGYJ69QO5CISXETT0HU25FU19AZRQ0LKJC1LHZ28G83IVSSI440WFPYA1NRTYLDFUCVUV5M21AF6ZYHBV1K2MGNOXCBXR0NCBOWTJBD5QEZ61' where id=19; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='K9MU7LPUUZVCEQLKTV10NJTSE4TM8B6BH2N7O9QFYVJZG869JH50TSVYMO25NDPW0OTFLJOTHZXE2ZD23FJ7KWPYOZJRLUBK0IWGW85F7VAR3GVT5CXH02BQKYUQR04YBLE4YZZK4YWZAH2LAM3D88F3TIGMZCWKK2R7O0YE5YRREWGAZWL7K3F3KMB0E4NUC8CJXBOBPZ5ARMML1NCPKN2LTCJASNBZ90LKGKM307S2WLTDJBKSYA7IGAC5FPJSW' where id=19; -update noar ti set v2='K9MU7LPUUZVCEQLKTV10NJTSE4TM8B6BH2N7O9QFYVJZG869JH50TSVYMO25NDPW0OTFLJOTHZXE2ZD23FJ7KWPYOZJRLUBK0IWGW85F7VAR3GVT5CXH02BQKYUQR04YBLE4YZZK4YWZAH2LAM3D88F3TIGMZCWKK2R7O0YE5YRREWGAZWL7K3F3KMB0E4NUC8CJXBOBPZ5ARMML1NCPKN2LTCJASNBZ90LKGKM307S2WLTDJBKSYA7IGAC5FPJSW' where id=19; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='FA0WI39W4FQI9MO5G7WD10WO7SPFYHFJUL75GLKYD1ZXHNTQPY72RXST1V17T1MNVYZUEV5O5D7QODU0USVRH4HFZ2NV694E8NBNWRCNUOLDS3SNT6FZ0GUHPS6R4E0VN5XEQZ0XFN84S9GP445NSGXRDWIMY89IYT9KSHGJMLEQZADEMWF1OY09FLT673R4FP6T2ILYINS0K8B1OVINP0V0LUPWGPC5E3M2LA0JLLB7S1B74NFZ4N8ZDIO6YPVMS' where id=19; -update noar ti set v3='FA0WI39W4FQI9MO5G7WD10WO7SPFYHFJUL75GLKYD1ZXHNTQPY72RXST1V17T1MNVYZUEV5O5D7QODU0USVRH4HFZ2NV694E8NBNWRCNUOLDS3SNT6FZ0GUHPS6R4E0VN5XEQZ0XFN84S9GP445NSGXRDWIMY89IYT9KSHGJMLEQZADEMWF1OY09FLT673R4FP6T2ILYINS0K8B1OVINP0V0LUPWGPC5E3M2LA0JLLB7S1B74NFZ4N8ZDIO6YPVMS' where id=19; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='UQQMWAL04Q831U5I6RHE4LKN2HBD5N2D1UIWDV0CFQ0EZFWJ5J2C4Q1CS29C6RAYERUBIIQ9PW1OVTMD24PUIE5GM14TSQKM4IQA8JPRNDJBAB4OGRXMETJRWHTYDUHVI6UTMZ8AZXUXN1UHG7JUD5IZE2WN7HDMVZCLQQK1LFQT9326FS4FAH9OUVHCVC1PGK27MH8X4ZD4NZIIDSFM9RJVNR8MKRO9AXFDKLM2BKMDSDNZ8ZRDWAO9GIBLJDO8B' where id=20; -update noar ti set v0='UQQMWAL04Q831U5I6RHE4LKN2HBD5N2D1UIWDV0CFQ0EZFWJ5J2C4Q1CS29C6RAYERUBIIQ9PW1OVTMD24PUIE5GM14TSQKM4IQA8JPRNDJBAB4OGRXMETJRWHTYDUHVI6UTMZ8AZXUXN1UHG7JUD5IZE2WN7HDMVZCLQQK1LFQT9326FS4FAH9OUVHCVC1PGK27MH8X4ZD4NZIIDSFM9RJVNR8MKRO9AXFDKLM2BKMDSDNZ8ZRDWAO9GIBLJDO8B' where id=20; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='5JGEBJ322PBJ2T1E9LY6ITWX648MUXPX4YYN6YM4QXSCTEJDDJCY7O2Y15WDYPJR0RIK06SO8KRN7B9783I7KJZ80C9QCC788NYLNS8BIJ8U1H3A7AIQP39M6TG81ESRQWTP7K3QM0BIIU9G0FWHYIT3DI7LQ5EEGWDHWISZFWR7BTP2NBMWQQYRAEY48S8JFBJY79M0ZHN1UP7QZJ2GBC5ZDBG0DLP1ORLMG1B0AOJ9E4IESDV9AFQTN33V4Y3Y6' where id=20; -update noar ti set v1='5JGEBJ322PBJ2T1E9LY6ITWX648MUXPX4YYN6YM4QXSCTEJDDJCY7O2Y15WDYPJR0RIK06SO8KRN7B9783I7KJZ80C9QCC788NYLNS8BIJ8U1H3A7AIQP39M6TG81ESRQWTP7K3QM0BIIU9G0FWHYIT3DI7LQ5EEGWDHWISZFWR7BTP2NBMWQQYRAEY48S8JFBJY79M0ZHN1UP7QZJ2GBC5ZDBG0DLP1ORLMG1B0AOJ9E4IESDV9AFQTN33V4Y3Y6' where id=20; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='OG9104ZOQ6WCGCLB8KY60WN6O3QOE6SXO8WL6NPVO9CQP941CZF8J1NJ7A7ZMP48KWWV4MRRLL38RU5R0P8HM4OSQEN6Z06S0IMBNSHD0T5AKOJG1YZWKI7X4MP4LZQDXJHG5ECD5IW04PCIP7NWDYOO0MVS5UFDGW6D6P96Y5JOBO3G00IIJBB7ZAR0ZJ3MFKWP1V1MXKBQGCO3L5KKHRAYC5ID4MW5Q4TUT0B4O12YMMZ2G1NZV3YUSYREHNWKS' where id=20; -update noar ti set v2='OG9104ZOQ6WCGCLB8KY60WN6O3QOE6SXO8WL6NPVO9CQP941CZF8J1NJ7A7ZMP48KWWV4MRRLL38RU5R0P8HM4OSQEN6Z06S0IMBNSHD0T5AKOJG1YZWKI7X4MP4LZQDXJHG5ECD5IW04PCIP7NWDYOO0MVS5UFDGW6D6P96Y5JOBO3G00IIJBB7ZAR0ZJ3MFKWP1V1MXKBQGCO3L5KKHRAYC5ID4MW5Q4TUT0B4O12YMMZ2G1NZV3YUSYREHNWKS' where id=20; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='G0CK9B5NB56WDNYQD7AH6WDHNMU4R8TOTR3TK2FKS6N9YOCZS5NKI0228Z5R7GWXLJZVKFT3IPF1PQSSJLVSPO6XQG07XL0XBCNP2YZFBQIMXJOCAUYLTX4C93CT01IC8OXLI9X7O4WGNS4ZZC1NVZSL1PEP4V2IA70BBYWB8LRNY820UGSSVPTC17RJ1O10DXRDIAH714UBMIV921JRIKRKP7FH64JCCAZSD64JTQ735T7EMAWQLLKWO92P2UCNP' where id=20; -update noar ti set v3='G0CK9B5NB56WDNYQD7AH6WDHNMU4R8TOTR3TK2FKS6N9YOCZS5NKI0228Z5R7GWXLJZVKFT3IPF1PQSSJLVSPO6XQG07XL0XBCNP2YZFBQIMXJOCAUYLTX4C93CT01IC8OXLI9X7O4WGNS4ZZC1NVZSL1PEP4V2IA70BBYWB8LRNY820UGSSVPTC17RJ1O10DXRDIAH714UBMIV921JRIKRKP7FH64JCCAZSD64JTQ735T7EMAWQLLKWO92P2UCNP' where id=20; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='XEKSFWW852KAAHSKEGJ48HGLX99SZGG8QW8PZ0CDRHL5X2W1TOMNSM4RNEZAE1IX4JWTYFDM9SZ9G9KTDOTMT1KFBEUYW0X6BZMBIBNTIRX0UFCM2F6E9FAME4YA4RBMDJSHTT6GUP0QVRPCFLK5XVD0V8M8RDJD5JWWH5YHFI2DTZWG6RRTO1WFPP0HZF15DS7HM4NO5DH96JZQOY01FN9LUWV0BK6E6LXBWBCLKG8BTZULMZFFLZIAEDKX975NG' where id=21; -update noar ti set v0='XEKSFWW852KAAHSKEGJ48HGLX99SZGG8QW8PZ0CDRHL5X2W1TOMNSM4RNEZAE1IX4JWTYFDM9SZ9G9KTDOTMT1KFBEUYW0X6BZMBIBNTIRX0UFCM2F6E9FAME4YA4RBMDJSHTT6GUP0QVRPCFLK5XVD0V8M8RDJD5JWWH5YHFI2DTZWG6RRTO1WFPP0HZF15DS7HM4NO5DH96JZQOY01FN9LUWV0BK6E6LXBWBCLKG8BTZULMZFFLZIAEDKX975NG' where id=21; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='QHR1UAQQ7ITT3HPA7BIQ7QN8PAPE3Y2QTYMJ3DGEAIC0B174127WG6U5FVIQ8YPNHFVHOCI0V70B5WLEC1QPS4NDGEO90KHRH3P617ZB439KSQ10L2TIALZCDA6QVONE27720L5W4JBZBJNCQIX5DJGRRZMSL4IS68VTDE7Y6RZ7FS2RP7F6DMZ2RSVEREI4W9XSL875K5IEOMKSHJYMXCYIRJ22N5O9DXZLEB8UZIQWOIN3O10D2J7YEBF5VWEFF' where id=21; -update noar ti set v1='QHR1UAQQ7ITT3HPA7BIQ7QN8PAPE3Y2QTYMJ3DGEAIC0B174127WG6U5FVIQ8YPNHFVHOCI0V70B5WLEC1QPS4NDGEO90KHRH3P617ZB439KSQ10L2TIALZCDA6QVONE27720L5W4JBZBJNCQIX5DJGRRZMSL4IS68VTDE7Y6RZ7FS2RP7F6DMZ2RSVEREI4W9XSL875K5IEOMKSHJYMXCYIRJ22N5O9DXZLEB8UZIQWOIN3O10D2J7YEBF5VWEFF' where id=21; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='8JJARDA8JIMXNOMZO3QJT0PV7YKFK3ZP9YX8SU3XP1CAWS8XE1AE2KXT5O7V6LJIMJZOGVW7APZG40BR5C46LO54G4KR13VCXUJ60FZEIIOU9I7WZD08QVY6KDUBKL90FHUP5H3ZC6F2OITKSHW5RLF3BGYD3F7W64KHWTCB1FBWP0U42YFTI81PRGN0WSJOL9CPF3WZ0XP0LKI8BL9DHGJD4X2HAYIVCBBEA1RCCCGPADBM0SXX7JAFJHM6VTS6X' where id=21; -update noar ti set v2='8JJARDA8JIMXNOMZO3QJT0PV7YKFK3ZP9YX8SU3XP1CAWS8XE1AE2KXT5O7V6LJIMJZOGVW7APZG40BR5C46LO54G4KR13VCXUJ60FZEIIOU9I7WZD08QVY6KDUBKL90FHUP5H3ZC6F2OITKSHW5RLF3BGYD3F7W64KHWTCB1FBWP0U42YFTI81PRGN0WSJOL9CPF3WZ0XP0LKI8BL9DHGJD4X2HAYIVCBBEA1RCCCGPADBM0SXX7JAFJHM6VTS6X' where id=21; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='EDZ4EMGEZXM3X45IY3C778BVXZJ8X8RW3QEE1WKSB1R1YC69M4B4NZPNMXHO88EQEB18GLFXJLV2VMQUUNNLOAUG3PGUQPOUMP6O3BFNU3A0G7LWSORTEZZJCGRZOL5XIKUKOR2NJMBQF9WEXOLG3WC0PMC2RRRKDLSH8GBVG09SZJIHH5B4CENXV9QQY612ME0C8F5QJ034HV7JDES0NPVH1444FWTGT98YG3TUHDZBICNRM7RNQBG3GUGBUHQ6P' where id=21; -update noar ti set v3='EDZ4EMGEZXM3X45IY3C778BVXZJ8X8RW3QEE1WKSB1R1YC69M4B4NZPNMXHO88EQEB18GLFXJLV2VMQUUNNLOAUG3PGUQPOUMP6O3BFNU3A0G7LWSORTEZZJCGRZOL5XIKUKOR2NJMBQF9WEXOLG3WC0PMC2RRRKDLSH8GBVG09SZJIHH5B4CENXV9QQY612ME0C8F5QJ034HV7JDES0NPVH1444FWTGT98YG3TUHDZBICNRM7RNQBG3GUGBUHQ6P' where id=21; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='WO3CQCJRAK0VLQSJVOHQJYAF2JO2IG6BP8GYAUKA84PENPWV2ZHN46UYD7FY6DOZ0Y7HPI4B7343QHNQ4M3POFQ2CJNCLEQQ4GSPNNEBP7S0AWPP43U3PEWLN08GGR6GPCO012YE53AX8EY5NQ5GBUFDJX01XN6C3ALHOD3I2X3SKXHW6EQP8JGDNUEEYTHRVBTZZKCXKVYA3FDKSQCVO9B7QBJZATATZMXRPK9QNG9KB1HATZZ6Z6YYEROBSBY69' where id=22; -update noar ti set v0='WO3CQCJRAK0VLQSJVOHQJYAF2JO2IG6BP8GYAUKA84PENPWV2ZHN46UYD7FY6DOZ0Y7HPI4B7343QHNQ4M3POFQ2CJNCLEQQ4GSPNNEBP7S0AWPP43U3PEWLN08GGR6GPCO012YE53AX8EY5NQ5GBUFDJX01XN6C3ALHOD3I2X3SKXHW6EQP8JGDNUEEYTHRVBTZZKCXKVYA3FDKSQCVO9B7QBJZATATZMXRPK9QNG9KB1HATZZ6Z6YYEROBSBY69' where id=22; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='BT3TZ0D8XUOV3YHHAUQ3ILBZ0049B8A8JWAQK07GTIMODJITLWBQ39OWKGTBTCOAIFN0UPV8YBJCRP6MSJG81SCDN03HBRM8HT4NUN0CFL57N6IITWA5ZYLK7F9JCKHZGL4EP1QELKLA0XUIEZ4J4L4CC2PUGG836LEKA3L482KCKCIZCZ4WWI9DYLTMRERWGRCZRJU14ECX07Z835ZOILKISVDXR57AHYPE4SN7LBRHIOED69TQ6RT0R9SSG16HB' where id=22; -update noar ti set v1='BT3TZ0D8XUOV3YHHAUQ3ILBZ0049B8A8JWAQK07GTIMODJITLWBQ39OWKGTBTCOAIFN0UPV8YBJCRP6MSJG81SCDN03HBRM8HT4NUN0CFL57N6IITWA5ZYLK7F9JCKHZGL4EP1QELKLA0XUIEZ4J4L4CC2PUGG836LEKA3L482KCKCIZCZ4WWI9DYLTMRERWGRCZRJU14ECX07Z835ZOILKISVDXR57AHYPE4SN7LBRHIOED69TQ6RT0R9SSG16HB' where id=22; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='2YPKLIR4DE1LHKJEJ3XU2WCD96A5G977FZ9Z1WB93ED2GWPT7RRPX2E6SYR0A9ZMG2PGAXYGDIQJ7I67CTVF5ZCL810X1N3HTY3CRC7N4PMKU5DQ3BVB286EK5D0FLZRFB2Z3LIOJQL4R2GU5YZH8Y9R57SRJ4KFLX97D0UVSWLRD7WI00VB2GHDDJT7FJPGIZVV0LLLI3MZRUDEI012Z696XLNSBAHEH7B0ND0LVPBD53WMUSE9V0XYZ4GCGHG7U' where id=22; -update noar ti set v2='2YPKLIR4DE1LHKJEJ3XU2WCD96A5G977FZ9Z1WB93ED2GWPT7RRPX2E6SYR0A9ZMG2PGAXYGDIQJ7I67CTVF5ZCL810X1N3HTY3CRC7N4PMKU5DQ3BVB286EK5D0FLZRFB2Z3LIOJQL4R2GU5YZH8Y9R57SRJ4KFLX97D0UVSWLRD7WI00VB2GHDDJT7FJPGIZVV0LLLI3MZRUDEI012Z696XLNSBAHEH7B0ND0LVPBD53WMUSE9V0XYZ4GCGHG7U' where id=22; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='WOOXVNLOMONDMCGL3E3K673KPZBDZ8IV2ALYTDZAS2BCZYETLJO9XSFWLA1IS12RPPAZU17PFULYIBPLA12BQPX5UA47JCRISP4BMDSHGTSB6N2D339YNZRLM6PI6EST9YBQWW8IDGX5WXCLGVPH3BGADDILS78BIN1UO63XXGTE4SAIZ2OCNKLZ7MW9MY6PG80KGHM3769U9QVP7SGCXQSQG6INEFRFL5W5G6TEHAM00KXF80C7GKC1Z85R7CKJU' where id=22; -update noar ti set v3='WOOXVNLOMONDMCGL3E3K673KPZBDZ8IV2ALYTDZAS2BCZYETLJO9XSFWLA1IS12RPPAZU17PFULYIBPLA12BQPX5UA47JCRISP4BMDSHGTSB6N2D339YNZRLM6PI6EST9YBQWW8IDGX5WXCLGVPH3BGADDILS78BIN1UO63XXGTE4SAIZ2OCNKLZ7MW9MY6PG80KGHM3769U9QVP7SGCXQSQG6INEFRFL5W5G6TEHAM00KXF80C7GKC1Z85R7CKJU' where id=22; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='P7RD9WWB4R1TALVG2A6FVUCDFGTSPD4ZEPB896GSLWSCNS9BQSLXKLPDB7I8NDWYHTLR17JF9HXDFKLU0EIVR1ZS7UWXZYIAUYGJD00WC2V6GD1PLRHLTBUMR30G9FTVJSE0C1D4ZLG0IP8ZV7QX3BH18F3DX01OR0TOKWQMEA7LKJ56Q6LS76JU8CN30T4K5JGF9OUXAOTOLLQZCBK3LHZW1X6OPY7Y003HXGEI3JK9IHXFGWDARVBHIXQG8KQAE' where id=23; -update noar ti set v0='P7RD9WWB4R1TALVG2A6FVUCDFGTSPD4ZEPB896GSLWSCNS9BQSLXKLPDB7I8NDWYHTLR17JF9HXDFKLU0EIVR1ZS7UWXZYIAUYGJD00WC2V6GD1PLRHLTBUMR30G9FTVJSE0C1D4ZLG0IP8ZV7QX3BH18F3DX01OR0TOKWQMEA7LKJ56Q6LS76JU8CN30T4K5JGF9OUXAOTOLLQZCBK3LHZW1X6OPY7Y003HXGEI3JK9IHXFGWDARVBHIXQG8KQAE' where id=23; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='B2SHAL8VGJ1IQRWMPW9IGOVRRVYG2S9O7BALTD7UW60V3FV9OMLX1DR4QC6RQURGDBQU5UVVIN1L615P7P9CBKNDOIG5Y0Q2DP1I8R92SVG5JQGFBX65UR1Y280GPXVBK5W0GI42QFO7HPV65LDOBR9GDNQA8AIXQT3F6RXFVJME435BQ8EKACD9F0H2LWPY2671W93L1R4PW6FQVMDDB2DYE554T4YL9V5GJRYLDBJ7MUF53US5AYBPKHJAYCO81' where id=23; -update noar ti set v1='B2SHAL8VGJ1IQRWMPW9IGOVRRVYG2S9O7BALTD7UW60V3FV9OMLX1DR4QC6RQURGDBQU5UVVIN1L615P7P9CBKNDOIG5Y0Q2DP1I8R92SVG5JQGFBX65UR1Y280GPXVBK5W0GI42QFO7HPV65LDOBR9GDNQA8AIXQT3F6RXFVJME435BQ8EKACD9F0H2LWPY2671W93L1R4PW6FQVMDDB2DYE554T4YL9V5GJRYLDBJ7MUF53US5AYBPKHJAYCO81' where id=23; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='8IEOLDVO1OVED1QFIOBQBVI8V4T0QATA2PXS5Y83KGI58K0D6CDV21XS3MI7YRG1PW9AUVEQ7PXN0J75HIM7QQTH15YI7CPIPYON9DL4IS8IH6CJ6ZLFA1GGT3I6VG3F7A6VPNCTOOS0QM1WKL5HFFKY3GUF4852RWJJIR4L04VKZNIBXZCTJ4VZHKXK1ZKLL149S1024S4IPIRKCCNGKOTVF5WYDQ6PXIPS0AEPGP41EDE9M0E2DTUZII0JRWLKG' where id=23; -update noar ti set v2='8IEOLDVO1OVED1QFIOBQBVI8V4T0QATA2PXS5Y83KGI58K0D6CDV21XS3MI7YRG1PW9AUVEQ7PXN0J75HIM7QQTH15YI7CPIPYON9DL4IS8IH6CJ6ZLFA1GGT3I6VG3F7A6VPNCTOOS0QM1WKL5HFFKY3GUF4852RWJJIR4L04VKZNIBXZCTJ4VZHKXK1ZKLL149S1024S4IPIRKCCNGKOTVF5WYDQ6PXIPS0AEPGP41EDE9M0E2DTUZII0JRWLKG' where id=23; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='GCNB085XUZ0GZ5G66ISVJHQBO3WG50I82MDXJGSVC3WZWL7ZICYR4I4662CWM3NPGLXQ2DWLSCVXHQZEM76LJG2EJEGMSZ8E4M9LNF1FOT9J1LXEVC0V1RD53437SU5TIRUI9ULAG6ZNY8BP9VR2T4RJCGT9VFOB2F53XAT7IA69WCNKNA4LOCCNSS9GE5C3ZL6N9SJ31Y107578R3KGWZVHUDG7C941UTEF22LKVKQEJBN9SVDS93G7UYTQC320X' where id=23; -update noar ti set v3='GCNB085XUZ0GZ5G66ISVJHQBO3WG50I82MDXJGSVC3WZWL7ZICYR4I4662CWM3NPGLXQ2DWLSCVXHQZEM76LJG2EJEGMSZ8E4M9LNF1FOT9J1LXEVC0V1RD53437SU5TIRUI9ULAG6ZNY8BP9VR2T4RJCGT9VFOB2F53XAT7IA69WCNKNA4LOCCNSS9GE5C3ZL6N9SJ31Y107578R3KGWZVHUDG7C941UTEF22LKVKQEJBN9SVDS93G7UYTQC320X' where id=23; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='E0XGOP4HRH8U2O2XGZUOTBFXIRMEJY9MSJZ0JOIVE81AIFIHJSL9YAIFYYJCS4M3L4J3L0QVPNH4WPWCECGX98QSMY90VTPFMXBL2LRZZRBNIY4WAMI17A7Z1Q5BJRIN9F0QFX7W5KX9RQB1CZ3JKY6J4ODA5PMP3CE353G50YOU3W2Z1O39Y7UDXA9OVK1CTDW53REDY0K5ZIFDF750L19I45ZDRX5B3R1UZJ8UA65NL5RL71B56GYI0B2WFYLTB' where id=24; -update noar ti set v0='E0XGOP4HRH8U2O2XGZUOTBFXIRMEJY9MSJZ0JOIVE81AIFIHJSL9YAIFYYJCS4M3L4J3L0QVPNH4WPWCECGX98QSMY90VTPFMXBL2LRZZRBNIY4WAMI17A7Z1Q5BJRIN9F0QFX7W5KX9RQB1CZ3JKY6J4ODA5PMP3CE353G50YOU3W2Z1O39Y7UDXA9OVK1CTDW53REDY0K5ZIFDF750L19I45ZDRX5B3R1UZJ8UA65NL5RL71B56GYI0B2WFYLTB' where id=24; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='GTN8H25Q84ZVX3PM23GR96V21BLZ7L3RBT28LYMX40YRD042JIROH9LFEPXH1ATZSU98G7HHVVQKS5BZ87ZRT9MOU8UBNJI80F4RCZXEN521C3MGEHLYL0DNEPORII3BWPO35U63IWB58KZLE6LDIJJE321ESWQAMGTL46H4J306GF7IEAZPXQ8HNGAM7DUO9HF6H78OMP4N4816HJY8QWVE0JEN0ULTKEOUCH5MFVIDDO3NZQKUUMKDKYIMAYAD8' where id=24; -update noar ti set v1='GTN8H25Q84ZVX3PM23GR96V21BLZ7L3RBT28LYMX40YRD042JIROH9LFEPXH1ATZSU98G7HHVVQKS5BZ87ZRT9MOU8UBNJI80F4RCZXEN521C3MGEHLYL0DNEPORII3BWPO35U63IWB58KZLE6LDIJJE321ESWQAMGTL46H4J306GF7IEAZPXQ8HNGAM7DUO9HF6H78OMP4N4816HJY8QWVE0JEN0ULTKEOUCH5MFVIDDO3NZQKUUMKDKYIMAYAD8' where id=24; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='4H0K4RFAOMPR6OUAYXUOH1WJJVP9T745TF45OM5KM8YYBDP1YM56V0C0IJWICETWUXMP6ZX1AANF2314I749MKWBC3ZJO9RJB7AZJIWERIX3BYFL76QB95H1U64IVFPWXEHZV56SPF732NN30GECWXHW8W2ZXATS1EH8N53WDKSDSFZ0AL2CGZ1S7EC81IXUUU7SQ8Q47E3CG8DVB5J6WC0IY4PDX7CB36CENMHN33X6YKR2EQ8IMR8F2AVDSQZTP' where id=24; -update noar ti set v2='4H0K4RFAOMPR6OUAYXUOH1WJJVP9T745TF45OM5KM8YYBDP1YM56V0C0IJWICETWUXMP6ZX1AANF2314I749MKWBC3ZJO9RJB7AZJIWERIX3BYFL76QB95H1U64IVFPWXEHZV56SPF732NN30GECWXHW8W2ZXATS1EH8N53WDKSDSFZ0AL2CGZ1S7EC81IXUUU7SQ8Q47E3CG8DVB5J6WC0IY4PDX7CB36CENMHN33X6YKR2EQ8IMR8F2AVDSQZTP' where id=24; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='3I2P6SMLR1LY6PGGU867WSDIUE2YB9ACVPKCDLRIHIXM6VSOPS2JMU8XZ98VUBAOSVWUJ3YW2N5KZP2JFDTAV5E51VDZIHKABJLDR717WRUVBM4WKBN7SBDR5BIZUAI3V7GKTWLZYFVDO6T93XV70RUCTQ9J629W4WAE4G6717CC0BFYAOLVI0L95MABQW6E099WB4JK8R5841QV7DEG76AMXANKB41OKL3N7CKTCUF9J8E2WK9BTCLX4JLWBMB0Z' where id=24; -update noar ti set v3='3I2P6SMLR1LY6PGGU867WSDIUE2YB9ACVPKCDLRIHIXM6VSOPS2JMU8XZ98VUBAOSVWUJ3YW2N5KZP2JFDTAV5E51VDZIHKABJLDR717WRUVBM4WKBN7SBDR5BIZUAI3V7GKTWLZYFVDO6T93XV70RUCTQ9J629W4WAE4G6717CC0BFYAOLVI0L95MABQW6E099WB4JK8R5841QV7DEG76AMXANKB41OKL3N7CKTCUF9J8E2WK9BTCLX4JLWBMB0Z' where id=24; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='39XUFD29HM0I9FUXGQ358TF81A48FX1PRDJGBG319N73OJMWFSRRMOWOUXVX0HVIUPHFFELN3NZW0QX24JU0DAGVXGOIBR5BEIJIWR5EBOEARWPTK3SLBE47GG9QQ04USTVKN290H8MSPS9P6AON0H6Q9M4K8LXFIEZB90JXZZZ8UFOA1Z5MKYG2X186VRW5454S9YOTMMAQEG3WWUK4UY0ZTWHNR4ZFIEN2QA5CNW4SK10S1TH8XGOUEBNM8I4LX' where id=25; -update noar ti set v0='39XUFD29HM0I9FUXGQ358TF81A48FX1PRDJGBG319N73OJMWFSRRMOWOUXVX0HVIUPHFFELN3NZW0QX24JU0DAGVXGOIBR5BEIJIWR5EBOEARWPTK3SLBE47GG9QQ04USTVKN290H8MSPS9P6AON0H6Q9M4K8LXFIEZB90JXZZZ8UFOA1Z5MKYG2X186VRW5454S9YOTMMAQEG3WWUK4UY0ZTWHNR4ZFIEN2QA5CNW4SK10S1TH8XGOUEBNM8I4LX' where id=25; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='MERR3SYL0LYN8XNCONSVN6JYOFC7XLA1HCITK123KOTSMJJHT8ATYENA9DH85I2ODFOCX9L891SJ8Z42D94MVGFN9BRSCNWV78A8O9MDKRP9CB0AJKSHBMA3R8K635ZXAJT0OGOG1OF8IRFIIIG4H5NVYJGG44U3UKPKAZ4EXB2ZTAAUUUUPBET76UF74R4NNDBPIWT8SM9YS37UMGWGFVG7SXMA7080Y12EEUJYYCZZZ7KBCJRS1RJ6BBX0UP05R' where id=25; -update noar ti set v1='MERR3SYL0LYN8XNCONSVN6JYOFC7XLA1HCITK123KOTSMJJHT8ATYENA9DH85I2ODFOCX9L891SJ8Z42D94MVGFN9BRSCNWV78A8O9MDKRP9CB0AJKSHBMA3R8K635ZXAJT0OGOG1OF8IRFIIIG4H5NVYJGG44U3UKPKAZ4EXB2ZTAAUUUUPBET76UF74R4NNDBPIWT8SM9YS37UMGWGFVG7SXMA7080Y12EEUJYYCZZZ7KBCJRS1RJ6BBX0UP05R' where id=25; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='2FO4NAM2C26B5U1BF8UQT1MCIDRIC2QSBTD8XF3A3OC8B1NQFJDQWKO3UMJ288N3JFJIQ5WPUOF9C059X9G1ZF7GL91L83EH2P9TI7MJTWUW0AMFU6B694ZRCBRU40HJ0EX6G06GNMCDN6WJ65BVOJHASA2KYDLE0T2JIP0R01GG03SHPK4RE2R2CS3TPUWMOO0KLG08BFG3NTSOZV5FVAB2OXZQHYSQMUJ1EKET0RE5JBTS9EQMLUIEJSMT7LUGO' where id=25; -update noar ti set v2='2FO4NAM2C26B5U1BF8UQT1MCIDRIC2QSBTD8XF3A3OC8B1NQFJDQWKO3UMJ288N3JFJIQ5WPUOF9C059X9G1ZF7GL91L83EH2P9TI7MJTWUW0AMFU6B694ZRCBRU40HJ0EX6G06GNMCDN6WJ65BVOJHASA2KYDLE0T2JIP0R01GG03SHPK4RE2R2CS3TPUWMOO0KLG08BFG3NTSOZV5FVAB2OXZQHYSQMUJ1EKET0RE5JBTS9EQMLUIEJSMT7LUGO' where id=25; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='HMMKT3RWDO07HHXH2AKK4EA8O3I5O3NS1A1TXSZ6V48T9ML8CP30OQNDXQKQBG58YLH8ASDQ8L27GZGDHEAKS2ZUGEMX6P3GADT7L0N53LZSV8SDBA67PT1HO1VQCFYKEBIX8H8E7X58QUDLV8NHLDVZDJDEVM44XI4R5NTBNPAM5J2ATBHSZBKIIM9IQONCEHXOIBGRJTWT54TDK1PKUXZ0HETMU73EJQFOQFUCFOWWDX6NH1GX5B34VWK0GICEG' where id=25; -update noar ti set v3='HMMKT3RWDO07HHXH2AKK4EA8O3I5O3NS1A1TXSZ6V48T9ML8CP30OQNDXQKQBG58YLH8ASDQ8L27GZGDHEAKS2ZUGEMX6P3GADT7L0N53LZSV8SDBA67PT1HO1VQCFYKEBIX8H8E7X58QUDLV8NHLDVZDJDEVM44XI4R5NTBNPAM5J2ATBHSZBKIIM9IQONCEHXOIBGRJTWT54TDK1PKUXZ0HETMU73EJQFOQFUCFOWWDX6NH1GX5B34VWK0GICEG' where id=25; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='C2RS2NLODKUCV4IKB38BZSIHZYYE1Q0SCKCFB49GGMP3TRRN6ZP2CX2C76IGBHQ11T6TTQ66N9QPF1V7K2CLSAJM6PKARLJWAEY646O4VFW0SCY353RXAAYYOY3JPJ1Q0B203GDOQT7FYLFIYIP6C1E0XZW3CUU3BSQNF5YDPWWACE4I2Y6D9J1C08DQAORO4IWRSGU9YC6KF1JL7HFVAFJ5IIF0IUDZ61OQRX9UMAE150YJF98U5EJOYF0GJ4DAU' where id=26; -update noar ti set v0='C2RS2NLODKUCV4IKB38BZSIHZYYE1Q0SCKCFB49GGMP3TRRN6ZP2CX2C76IGBHQ11T6TTQ66N9QPF1V7K2CLSAJM6PKARLJWAEY646O4VFW0SCY353RXAAYYOY3JPJ1Q0B203GDOQT7FYLFIYIP6C1E0XZW3CUU3BSQNF5YDPWWACE4I2Y6D9J1C08DQAORO4IWRSGU9YC6KF1JL7HFVAFJ5IIF0IUDZ61OQRX9UMAE150YJF98U5EJOYF0GJ4DAU' where id=26; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='0YJVHYUJ973HRJIABAMPAX8K6TWXBNUK4LMBY5IIHLQL70JPVCXH2F18RJ1TNUMEHAMATQ4EU2R81PULB9YSW8MW67RX7MD3K8J2YHSHNTO1BZOMRTNJ1ZXUSOHCHDV518JWPFHIZXCLALXAJ7T2TONWTVJ0RTXQJAIXFKYYPTYF3LPZTNPR8TLBYNFAI1QVRNXVRPDM0B2JDJ5ANSHKLITMTQTDOG7MPYCVMVVSKU0UV8O74F4W9XWZRH6GMCZWT' where id=26; -update noar ti set v1='0YJVHYUJ973HRJIABAMPAX8K6TWXBNUK4LMBY5IIHLQL70JPVCXH2F18RJ1TNUMEHAMATQ4EU2R81PULB9YSW8MW67RX7MD3K8J2YHSHNTO1BZOMRTNJ1ZXUSOHCHDV518JWPFHIZXCLALXAJ7T2TONWTVJ0RTXQJAIXFKYYPTYF3LPZTNPR8TLBYNFAI1QVRNXVRPDM0B2JDJ5ANSHKLITMTQTDOG7MPYCVMVVSKU0UV8O74F4W9XWZRH6GMCZWT' where id=26; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='2747KCLKVF755VLZH2CJHIYL9J2Q5SXIDLPS0I23X84FQOUDAIJVIPRN6777R6U9LPHOMSFNS3PX8F6TCXTQNUQ0DKQ2WI4ADAMBSWU7384JYJDCF781LPELGIGNG607DHZXEHDUL6WGV59SGFY9EF4F98AL15OJPGWATGR4CVQM5P8YP86XMVT5S94REEDUA60VSYCKL7DIBK6ASM3YB7O7TK15DWDYBOPB8PC2RID4D6QUTJJPPAL7X55V968UN' where id=26; -update noar ti set v2='2747KCLKVF755VLZH2CJHIYL9J2Q5SXIDLPS0I23X84FQOUDAIJVIPRN6777R6U9LPHOMSFNS3PX8F6TCXTQNUQ0DKQ2WI4ADAMBSWU7384JYJDCF781LPELGIGNG607DHZXEHDUL6WGV59SGFY9EF4F98AL15OJPGWATGR4CVQM5P8YP86XMVT5S94REEDUA60VSYCKL7DIBK6ASM3YB7O7TK15DWDYBOPB8PC2RID4D6QUTJJPPAL7X55V968UN' where id=26; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='6TERZ9M8DGQ3HYD4VLLKH9LKGNSS75S6ZFKDZBA8W1XI5XVB4VMR8UQLFNNDNYWBU71WU2ZDKCOBTEP1O9Y516421LCE8CEU7V1U71KMZQ38ASIVUV6D19YHS1DNX675BYM07C20FEI6AQAKREPQJDDRZ37AAG01C2A1K2TQJ8Z6MY2VGW51MDA765QUT6PJ1U96JVZAMZ0OGZUDNQL68105YYSKI8OGYNKRQ9LNXWRX8PY5ZC5L79KG251CKG7XP' where id=26; -update noar ti set v3='6TERZ9M8DGQ3HYD4VLLKH9LKGNSS75S6ZFKDZBA8W1XI5XVB4VMR8UQLFNNDNYWBU71WU2ZDKCOBTEP1O9Y516421LCE8CEU7V1U71KMZQ38ASIVUV6D19YHS1DNX675BYM07C20FEI6AQAKREPQJDDRZ37AAG01C2A1K2TQJ8Z6MY2VGW51MDA765QUT6PJ1U96JVZAMZ0OGZUDNQL68105YYSKI8OGYNKRQ9LNXWRX8PY5ZC5L79KG251CKG7XP' where id=26; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='QKZ3UMFFSK138ITH538YKUOI35AXGMN8XGPO964RMVJSBVQU5ESKNZPVJCI112S76BDX2HNB93FMDP2PA6KEKYM7T7CAXU284MWPC58XTUDGFO20EZDT8Q6U33W5QSQ3KGRF7XNE62N8TLMPZQJSXMRY90P5NVLG3655TGY63T7QFF09OXF4UVJB65PDMYI3429FR0V1PBWCO6R6E3DB1NGM427UPPKL6ENXKEI2AAHLVL2P1EKZHZWTTZ8JR21UF' where id=27; -update noar ti set v0='QKZ3UMFFSK138ITH538YKUOI35AXGMN8XGPO964RMVJSBVQU5ESKNZPVJCI112S76BDX2HNB93FMDP2PA6KEKYM7T7CAXU284MWPC58XTUDGFO20EZDT8Q6U33W5QSQ3KGRF7XNE62N8TLMPZQJSXMRY90P5NVLG3655TGY63T7QFF09OXF4UVJB65PDMYI3429FR0V1PBWCO6R6E3DB1NGM427UPPKL6ENXKEI2AAHLVL2P1EKZHZWTTZ8JR21UF' where id=27; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='7MN2QHZPXVOVQJT9SHV3QMOMXWMZLS3M6AX041N90X75KZYN8UNK4VBIA2EZ1FADC0E2AWPRS61FAB080IJFRQ5M6J8LEUYTITAA3QRPS5CEXEZ3BQIQMPD4JNJY8XIM46NV2GMOUO4W1NQ7OYDM2D0HI8NAMSYHJQJH0FFBC1172S5VYQ6Z1VOU0WFAM6WAGLJ25KPK1Q5YUNZJK09B8NLK6HNKY5GPCNFYAGS5GFN2WIWH8ZZ5JLXH2KSSIO9KD' where id=27; -update noar ti set v1='7MN2QHZPXVOVQJT9SHV3QMOMXWMZLS3M6AX041N90X75KZYN8UNK4VBIA2EZ1FADC0E2AWPRS61FAB080IJFRQ5M6J8LEUYTITAA3QRPS5CEXEZ3BQIQMPD4JNJY8XIM46NV2GMOUO4W1NQ7OYDM2D0HI8NAMSYHJQJH0FFBC1172S5VYQ6Z1VOU0WFAM6WAGLJ25KPK1Q5YUNZJK09B8NLK6HNKY5GPCNFYAGS5GFN2WIWH8ZZ5JLXH2KSSIO9KD' where id=27; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='SML8WRDMKMUL2UQXZWCZFKSEFR9CIZ47Q5D6X7GOPHZKFY0167QNASXF6MSXWXYFNT2FS575PNR6I6OL4YCFLN1SV5IYJMZWBBJHVEUL1V8BPWRNIKY80J0KQ9N4PAFTO8ZQJ3MFL89U6400MVCEP410A7KPQU4RTTX3OZ7XHN8WJYMTKSP9QLM5PNDVQBVXGAA8B5FMO4PXXIXXSFVNEDZDNAQB4XYTEBLJT933EWAHO4IXDM1FSWCA8DQO0O0SP' where id=27; -update noar ti set v2='SML8WRDMKMUL2UQXZWCZFKSEFR9CIZ47Q5D6X7GOPHZKFY0167QNASXF6MSXWXYFNT2FS575PNR6I6OL4YCFLN1SV5IYJMZWBBJHVEUL1V8BPWRNIKY80J0KQ9N4PAFTO8ZQJ3MFL89U6400MVCEP410A7KPQU4RTTX3OZ7XHN8WJYMTKSP9QLM5PNDVQBVXGAA8B5FMO4PXXIXXSFVNEDZDNAQB4XYTEBLJT933EWAHO4IXDM1FSWCA8DQO0O0SP' where id=27; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='IVBDS3VZRB6GHU1K43OYTRCVMV4AA2H9X0J4KIXXA332YPLWT5PKP6U00OAC806XSYP621EF787D9XX0VMN5PF5EK239JH71GNGD6OB7XV7XI0W7AKET1GHA7MLSJROJB8IDMFWBIQFGLNGKO3UULYQJHR6DJ4GGYO4EDQI086NRHRYPE4OI4LNQINA6JFT10H3BMUFWUY3W9QSC316VBF6LMUS8352Z7COHUWRZO6LX13DE1W94KUR08U1PPFFZ6' where id=27; -update noar ti set v3='IVBDS3VZRB6GHU1K43OYTRCVMV4AA2H9X0J4KIXXA332YPLWT5PKP6U00OAC806XSYP621EF787D9XX0VMN5PF5EK239JH71GNGD6OB7XV7XI0W7AKET1GHA7MLSJROJB8IDMFWBIQFGLNGKO3UULYQJHR6DJ4GGYO4EDQI086NRHRYPE4OI4LNQINA6JFT10H3BMUFWUY3W9QSC316VBF6LMUS8352Z7COHUWRZO6LX13DE1W94KUR08U1PPFFZ6' where id=27; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='ZKST3LOJ5JHA3RGIMD9WXF2V734DMMHHO34ZAQCFA5LGC8QJJTKVWIVD11ZOK51QB5ZURZ6LYEL171UBWW4MTDZZ4JN4XCU5NIHERVBUR0YFXPWKV0GW7TYX26PEI69RHUO4QU0FE06T4YKF2NJQXX3U8KZ6J19P2EYGZ8IMRN2T18EY219CN9A3R92EZ4HWVZC73GFAG9FX6EY0DD1ZBM8N0YQVJFLM4KZTH9Z39AQ1J1AD4IZOWPF00TZM32RPO' where id=28; -update noar ti set v0='ZKST3LOJ5JHA3RGIMD9WXF2V734DMMHHO34ZAQCFA5LGC8QJJTKVWIVD11ZOK51QB5ZURZ6LYEL171UBWW4MTDZZ4JN4XCU5NIHERVBUR0YFXPWKV0GW7TYX26PEI69RHUO4QU0FE06T4YKF2NJQXX3U8KZ6J19P2EYGZ8IMRN2T18EY219CN9A3R92EZ4HWVZC73GFAG9FX6EY0DD1ZBM8N0YQVJFLM4KZTH9Z39AQ1J1AD4IZOWPF00TZM32RPO' where id=28; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='8LH8BNWU4CFBN15JMKI8I0TVJN5EZ4FK9AE8PIPRJ2JOM03E81MEBBY2VG4VGGAIPFO6B1JEAVRQ96PQ8EE4NTT1YUKHXMPE0AHIE16CY0WS2Q9UFZ2ZTNW01MY34EK5QB04GHSJKW9OX5YAKM2PFUWAPEZDT7W16X5SRIOV7ZCDYUU4KGLL5L5HLCZZU60GGW68ZQRM2QBDJGWRTIEYLYHC3T8695R1HE6KAQGA2VDUJKIQTJ0RVXVI3PSDCBQ59' where id=28; -update noar ti set v1='8LH8BNWU4CFBN15JMKI8I0TVJN5EZ4FK9AE8PIPRJ2JOM03E81MEBBY2VG4VGGAIPFO6B1JEAVRQ96PQ8EE4NTT1YUKHXMPE0AHIE16CY0WS2Q9UFZ2ZTNW01MY34EK5QB04GHSJKW9OX5YAKM2PFUWAPEZDT7W16X5SRIOV7ZCDYUU4KGLL5L5HLCZZU60GGW68ZQRM2QBDJGWRTIEYLYHC3T8695R1HE6KAQGA2VDUJKIQTJ0RVXVI3PSDCBQ59' where id=28; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='20S46Y0P3AF4JSHJ4Y1J1WAFG71GHGTWUMKCKI6CQAF4V3CFR9XMTJ2YUTTB0ZTU6CLYPUVLYIVE7MRCKJN76BBB1AUK2OX6UASIQ5H47DDK4DJ36B39GQEXECHQZRUKYJUD5UTQ66IXA5STJFGOP2D3AJU8YGAJ1X5L7XGACIVVCYVW6NBFBY9P85UBC6MI9PXQ06VJ0ZS6OFCDY7M1YBURMZBIWFGPRO5J5FH0P8S7G1SD08BA0VIW9JEBRLUUZ' where id=28; -update noar ti set v2='20S46Y0P3AF4JSHJ4Y1J1WAFG71GHGTWUMKCKI6CQAF4V3CFR9XMTJ2YUTTB0ZTU6CLYPUVLYIVE7MRCKJN76BBB1AUK2OX6UASIQ5H47DDK4DJ36B39GQEXECHQZRUKYJUD5UTQ66IXA5STJFGOP2D3AJU8YGAJ1X5L7XGACIVVCYVW6NBFBY9P85UBC6MI9PXQ06VJ0ZS6OFCDY7M1YBURMZBIWFGPRO5J5FH0P8S7G1SD08BA0VIW9JEBRLUUZ' where id=28; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='3TY92XYW97URV8JEGZ7VZYTPSX5NJFVNWKO7N18H4A1PMEZ9H69HSS9OB0LPXCOK8VDSRJNTUTXTNUQ2X0OKMLROXOAQ5JN2PNEOAWO2DL3UIX6OT6D2NG29IS393C80640884KNC7MGDHUGD9NOKNMZ4GTRPGO54ZFIN7602MMR00D2ZJ5X04GB0M11GMU9WPRNGZCS8O3GZH6BIBY6CIA6MIA85I5OXLM36LQZZ6MOJ9WMEXPKOQI0BUMYFYE7K' where id=28; -update noar ti set v3='3TY92XYW97URV8JEGZ7VZYTPSX5NJFVNWKO7N18H4A1PMEZ9H69HSS9OB0LPXCOK8VDSRJNTUTXTNUQ2X0OKMLROXOAQ5JN2PNEOAWO2DL3UIX6OT6D2NG29IS393C80640884KNC7MGDHUGD9NOKNMZ4GTRPGO54ZFIN7602MMR00D2ZJ5X04GB0M11GMU9WPRNGZCS8O3GZH6BIBY6CIA6MIA85I5OXLM36LQZZ6MOJ9WMEXPKOQI0BUMYFYE7K' where id=28; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='LXV10XHNT0YJOI6VRPXD409C8Y1L7RNWT7IORA4YKF17DLF2XOHXMOHN0LTVGR9AD6ITUBD5VP2T5WQ086OXPMLM9TBAT6BCEWMA722TRLYXOIIJZ372X3MEU62RHS1XENY6IVORRVHMHO8EIHYFZRUKTYAMLRL6CBNUI9C54P1WTSD9RKRLCJZEZX0EP78Z89G5VE63CRMQL55FS2YIF7505LEE93XL7YXK0YIGUH9VK91N76FX3IPG2BO6J8AZ7' where id=29; -update noar ti set v0='LXV10XHNT0YJOI6VRPXD409C8Y1L7RNWT7IORA4YKF17DLF2XOHXMOHN0LTVGR9AD6ITUBD5VP2T5WQ086OXPMLM9TBAT6BCEWMA722TRLYXOIIJZ372X3MEU62RHS1XENY6IVORRVHMHO8EIHYFZRUKTYAMLRL6CBNUI9C54P1WTSD9RKRLCJZEZX0EP78Z89G5VE63CRMQL55FS2YIF7505LEE93XL7YXK0YIGUH9VK91N76FX3IPG2BO6J8AZ7' where id=29; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='NV943HMRK7GDPEV2TOCSQC73YEJBGP9PP4ZGFE2POARAMRHKIEGH601L4NFSN86VO4I69JXLDCW36TSPS57M3A52BYRL0ZMH6Z4DJOGKT657SMV3ETMFOYGFZ9IMDRPR06TLUSX4XNQNPH8UB498F40RHSK1U6N2OM0MXHUBC6YR3WZF8WIQXR6AGTOB2GITIQYPY3MZMSSQO854TGCCAQZUCXC5FVGW18P0ZGANH46MK8E6EU7N7K5DWIXYXJMOS' where id=29; -update noar ti set v1='NV943HMRK7GDPEV2TOCSQC73YEJBGP9PP4ZGFE2POARAMRHKIEGH601L4NFSN86VO4I69JXLDCW36TSPS57M3A52BYRL0ZMH6Z4DJOGKT657SMV3ETMFOYGFZ9IMDRPR06TLUSX4XNQNPH8UB498F40RHSK1U6N2OM0MXHUBC6YR3WZF8WIQXR6AGTOB2GITIQYPY3MZMSSQO854TGCCAQZUCXC5FVGW18P0ZGANH46MK8E6EU7N7K5DWIXYXJMOS' where id=29; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='PMHHSQ67C3G8HKF90KIFQO6CUH78Y1LLJTARWTASXPIKMKWQ4B20GXDLO7D5YS1FTY6HHAMNLMHPR9Z31HWFY0ON5OR9UBJ1KSLU8SJTE8IFJTKL9TPCLS51NFLEE9TH1OTHC0UTACRMMRIMT1MRSU6FWO2D5H0AI7A84XNEGWS9FPB59FM0AYN5DREW8ONKQRQELP9AYKR2NL560GCNN1BU5LPXKYBS05PYF0DSQ4HNRFTXN40KLQNFPZYP7DDDD' where id=29; -update noar ti set v2='PMHHSQ67C3G8HKF90KIFQO6CUH78Y1LLJTARWTASXPIKMKWQ4B20GXDLO7D5YS1FTY6HHAMNLMHPR9Z31HWFY0ON5OR9UBJ1KSLU8SJTE8IFJTKL9TPCLS51NFLEE9TH1OTHC0UTACRMMRIMT1MRSU6FWO2D5H0AI7A84XNEGWS9FPB59FM0AYN5DREW8ONKQRQELP9AYKR2NL560GCNN1BU5LPXKYBS05PYF0DSQ4HNRFTXN40KLQNFPZYP7DDDD' where id=29; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='H1PWAJRJNZU6I983OO5MBSKK5RP12E56OBNEITZY57X8J11UJBURER9ZI670C9T2N21G3IBPBA7IC1106LSEWWQ90FHS6816ENTDCWP1D3JAY9E4Q33TVE0IX681NRIHW0TA4EB8Q8BSR5QZZG96I0UON6D9QN1EM4WHSNQ0LUVXA194KPGGNKHKZOYEM0C407MNOZ65CTSEU88HUYK5PWGIKDW9XHRNW4LGY9I1TQ1DJUGNMA1DV4CI40PYYZPWS' where id=29; -update noar ti set v3='H1PWAJRJNZU6I983OO5MBSKK5RP12E56OBNEITZY57X8J11UJBURER9ZI670C9T2N21G3IBPBA7IC1106LSEWWQ90FHS6816ENTDCWP1D3JAY9E4Q33TVE0IX681NRIHW0TA4EB8Q8BSR5QZZG96I0UON6D9QN1EM4WHSNQ0LUVXA194KPGGNKHKZOYEM0C407MNOZ65CTSEU88HUYK5PWGIKDW9XHRNW4LGY9I1TQ1DJUGNMA1DV4CI40PYYZPWS' where id=29; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='AU0OXSWA6CDQ8V1RJ6ZGW8B1QNXOTKM0WRWHR5DBNO4BK9E2SISOJLVM5EPPKPPJVEQ4DJ4UATRNQ810C300GIRJ64VTJCHA08NOROZMDUKWUV38Q1ZF9KDM3YN6ZLVT7T7G07GDHS60SAWRCY2ZKE60CISNFPNF8ACT9MF648752NWBNHATVAJGF62A1CFKF6VMVYB1XSWYFFSQV8XUYYRO0LW915U8Y3R25L70Q9YGC0NE86CJAJ70NFOO7ZS80' where id=30; -update noar ti set v0='AU0OXSWA6CDQ8V1RJ6ZGW8B1QNXOTKM0WRWHR5DBNO4BK9E2SISOJLVM5EPPKPPJVEQ4DJ4UATRNQ810C300GIRJ64VTJCHA08NOROZMDUKWUV38Q1ZF9KDM3YN6ZLVT7T7G07GDHS60SAWRCY2ZKE60CISNFPNF8ACT9MF648752NWBNHATVAJGF62A1CFKF6VMVYB1XSWYFFSQV8XUYYRO0LW915U8Y3R25L70Q9YGC0NE86CJAJ70NFOO7ZS80' where id=30; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='1DAJTFC8QKQ4THZVMCOY89H4T478NBAQY4ZFQZO4FRXZXL7OHAF1SQ6CI8V6H3ORQUVV4S0KBWHTIK7YCW9OO8P78JJA9CE87AH91PGBUW28XZVPHANUW6O3ERBS7VAM1LJASWPL6C09BEKZAYPAE1I6Y8IDVQKDFCOI09K1AABG6RWCJ67JAKH9A9UN5WW2QGVWUC6TEPQJ7RM4696GUTPDY9XVCLA54LTIOYPII2H3VQOT8ACV1ZPTAKZ8KFIA0' where id=30; -update noar ti set v1='1DAJTFC8QKQ4THZVMCOY89H4T478NBAQY4ZFQZO4FRXZXL7OHAF1SQ6CI8V6H3ORQUVV4S0KBWHTIK7YCW9OO8P78JJA9CE87AH91PGBUW28XZVPHANUW6O3ERBS7VAM1LJASWPL6C09BEKZAYPAE1I6Y8IDVQKDFCOI09K1AABG6RWCJ67JAKH9A9UN5WW2QGVWUC6TEPQJ7RM4696GUTPDY9XVCLA54LTIOYPII2H3VQOT8ACV1ZPTAKZ8KFIA0' where id=30; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='8E200MO7QMM0QU7RINIKZSR8JLZRUSZ82C0H2LOSQLQZ4Z40B863GQTNVEG1KR1PV6B9RTQ9WR9A0B5A5FMXK8ZMJBHJQFHLPMH1Z99PMGXAGQXU5W1PYTMRAM9MKMPTRQTVQGN8QNI4RHT5PIHNB05G3EUZ3TNJYHP407TZIVUK818J4ILMREQV28Q2ED9ZL28BFBXG1A6C6RASFV1PZESAONRUHDFNUT2OIQQ2OAU0FI1HNKI4BR91Z5Z5S7KH3' where id=30; -update noar ti set v2='8E200MO7QMM0QU7RINIKZSR8JLZRUSZ82C0H2LOSQLQZ4Z40B863GQTNVEG1KR1PV6B9RTQ9WR9A0B5A5FMXK8ZMJBHJQFHLPMH1Z99PMGXAGQXU5W1PYTMRAM9MKMPTRQTVQGN8QNI4RHT5PIHNB05G3EUZ3TNJYHP407TZIVUK818J4ILMREQV28Q2ED9ZL28BFBXG1A6C6RASFV1PZESAONRUHDFNUT2OIQQ2OAU0FI1HNKI4BR91Z5Z5S7KH3' where id=30; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='JED4CKSYO2GZUIJUGG5XU4HDCRXP6ZA0WFHNVK7COPDDB3B80GKCFT0TNXX2W0R8EJJO9WSG6WDCV76QAQ6OELSN88SBETG3SIHK740NIOE0L1ZIGBF1C5WZXDTQSKYYI8DFT0OPTOLGQWPEFVHMLT9JS1CE4S4FSJAC6FCUB3EJ67WX5DA8RYWNOQML1EGK5BZMAR4KN0V3ENGZBMPV5LX6SKXILRR6IBRKEA5UUD661GTQD0PUL8V5SA2NEG73B' where id=30; -update noar ti set v3='JED4CKSYO2GZUIJUGG5XU4HDCRXP6ZA0WFHNVK7COPDDB3B80GKCFT0TNXX2W0R8EJJO9WSG6WDCV76QAQ6OELSN88SBETG3SIHK740NIOE0L1ZIGBF1C5WZXDTQSKYYI8DFT0OPTOLGQWPEFVHMLT9JS1CE4S4FSJAC6FCUB3EJ67WX5DA8RYWNOQML1EGK5BZMAR4KN0V3ENGZBMPV5LX6SKXILRR6IBRKEA5UUD661GTQD0PUL8V5SA2NEG73B' where id=30; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='ICP5WMQ659GOI17Y5APP1MNR6K0GWALYF598VA5YBTI8LQBVVOAI9W5EHBVXGQV3X370YHXXFMK8VKU3B9LDVV4EBDIQMMT6FB6QXAQLUM5H8XRMKW0BPDT4R2USR2QGAIF13684E0LJJ0BFCQQPG9R169MIJHOJQP7SFB1SL1PXB8X12UPPPPZQFEV64Q2WKXH7YW5ZW42SCMQUZWSHKCX4ABZXA2J1NYHL3ESAFT01TSLSH6ZO2NWFMZK10XCP9' where id=31; -update noar ti set v0='ICP5WMQ659GOI17Y5APP1MNR6K0GWALYF598VA5YBTI8LQBVVOAI9W5EHBVXGQV3X370YHXXFMK8VKU3B9LDVV4EBDIQMMT6FB6QXAQLUM5H8XRMKW0BPDT4R2USR2QGAIF13684E0LJJ0BFCQQPG9R169MIJHOJQP7SFB1SL1PXB8X12UPPPPZQFEV64Q2WKXH7YW5ZW42SCMQUZWSHKCX4ABZXA2J1NYHL3ESAFT01TSLSH6ZO2NWFMZK10XCP9' where id=31; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='KTZGNSEXC1MQTS1B164LERUQ45C9WURO7YKNZTDL58G0ENKJ1SEK4WC2JVHWTWSSCK6X35G793AB88TJLSFD27DHNXESEBMBIZNGIX7IU2SUSGHY1FT30AMQ2QFLMTHED46759UMKL7RKCLH095S0VQUIGRRV92QH09BGVRKTCXN1VLXT905ICW8R8UJIXT46FEA14VZC56BCTYRQ9CP9LQP1XR8L19ZRC38ZLM4H8DXFZ4UJYU4DZ2UE65F5IIAF' where id=31; -update noar ti set v1='KTZGNSEXC1MQTS1B164LERUQ45C9WURO7YKNZTDL58G0ENKJ1SEK4WC2JVHWTWSSCK6X35G793AB88TJLSFD27DHNXESEBMBIZNGIX7IU2SUSGHY1FT30AMQ2QFLMTHED46759UMKL7RKCLH095S0VQUIGRRV92QH09BGVRKTCXN1VLXT905ICW8R8UJIXT46FEA14VZC56BCTYRQ9CP9LQP1XR8L19ZRC38ZLM4H8DXFZ4UJYU4DZ2UE65F5IIAF' where id=31; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='F43ZYNJVWZZVA4N0WAG6L1A0X9DIWK6T76HKQR76AYWQK8Q8PCWTCW1RUGCW2AHNU4FXBS2KMUUVHH4LOUI6Y24OE1GKWE5LQI3DPODPJOJIHN2U3EUOK6YX7EZJNC9PIBU4PD4JMD22BJA8YVJ1I10BX814RH8JFXA8VMOUYO512N3UFTCZTXAB0U15E8WKEZIJ4DA7CI66H6ZMPGW6BMZA8HHQBMF20EJZ48TPECAC7TR8IJ9B4FNXYCL331BNT' where id=31; -update noar ti set v2='F43ZYNJVWZZVA4N0WAG6L1A0X9DIWK6T76HKQR76AYWQK8Q8PCWTCW1RUGCW2AHNU4FXBS2KMUUVHH4LOUI6Y24OE1GKWE5LQI3DPODPJOJIHN2U3EUOK6YX7EZJNC9PIBU4PD4JMD22BJA8YVJ1I10BX814RH8JFXA8VMOUYO512N3UFTCZTXAB0U15E8WKEZIJ4DA7CI66H6ZMPGW6BMZA8HHQBMF20EJZ48TPECAC7TR8IJ9B4FNXYCL331BNT' where id=31; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='EAJN8CNKSUEXYCFDES83SR207HQ02S41N3KQLC6WII2ZT28I2MYKKRYBM8WVKD5KXU3TADL4W6IRPJTT2SI35BDQ58GS6UO7NGMXUX4FAH80VCW55TFQ54F4WJ6RU5VSHE6ZEBNRALOEDBKTLTXGPWO03YIDA7L46K7ED41PSD0AMFSSDIKCZWKJQLNC5L7T49V4OOH7C4FN6XVH9K260YY24ZMUQSW44DM3C4R1V0J131CWB44EINNY6WKRCL5AR' where id=31; -update noar ti set v3='EAJN8CNKSUEXYCFDES83SR207HQ02S41N3KQLC6WII2ZT28I2MYKKRYBM8WVKD5KXU3TADL4W6IRPJTT2SI35BDQ58GS6UO7NGMXUX4FAH80VCW55TFQ54F4WJ6RU5VSHE6ZEBNRALOEDBKTLTXGPWO03YIDA7L46K7ED41PSD0AMFSSDIKCZWKJQLNC5L7T49V4OOH7C4FN6XVH9K260YY24ZMUQSW44DM3C4R1V0J131CWB44EINNY6WKRCL5AR' where id=31; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='WSP3ZJWDVQ5XACQ0P7XB9I46MV3A487A2E624QPDDZYAQXPILCV54NOV6YCD6T6141T1JOC8NIPP080LO2IRC9PI6UGAIEUE1LJCJP9FSJ4Z5391MSNOYIXYLCH0114JG45DAAOEVDW10GIWYITGCU4VO1PZM9ELSZJ453XRZ261CPMLZF8GB4JRD4IBL7ZY3R4PSYKQH4BUG1S7STRVO50LMNSOA5H72X9QIOWZZ1GAYWJC6MN8P4HNSXR3XAFNW' where id=32; -update noar ti set v0='WSP3ZJWDVQ5XACQ0P7XB9I46MV3A487A2E624QPDDZYAQXPILCV54NOV6YCD6T6141T1JOC8NIPP080LO2IRC9PI6UGAIEUE1LJCJP9FSJ4Z5391MSNOYIXYLCH0114JG45DAAOEVDW10GIWYITGCU4VO1PZM9ELSZJ453XRZ261CPMLZF8GB4JRD4IBL7ZY3R4PSYKQH4BUG1S7STRVO50LMNSOA5H72X9QIOWZZ1GAYWJC6MN8P4HNSXR3XAFNW' where id=32; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='OZM5W0R94MQT5WE47OFXW8G2P0UXLBMRPGZ1159FXXEMK9VKODLWTCLHLJIPBRHR1CYPLXINTEM9SWXP34BT1JWM1X1T6IGGDWF11M59S01ELAWHT31E4CXFNLTCWWKYGESFBTA7PZSUMIPTU5PNE9C7THWMC1ZSXBCEFGJKJBA73Z055M2Z79OUV2P8REMV0G40BKLSWBJ1YJLO9KJVJFSI7BORCGMQEUGFA277QXT978W8JZ3F6F73L65IA1QW5' where id=32; -update noar ti set v1='OZM5W0R94MQT5WE47OFXW8G2P0UXLBMRPGZ1159FXXEMK9VKODLWTCLHLJIPBRHR1CYPLXINTEM9SWXP34BT1JWM1X1T6IGGDWF11M59S01ELAWHT31E4CXFNLTCWWKYGESFBTA7PZSUMIPTU5PNE9C7THWMC1ZSXBCEFGJKJBA73Z055M2Z79OUV2P8REMV0G40BKLSWBJ1YJLO9KJVJFSI7BORCGMQEUGFA277QXT978W8JZ3F6F73L65IA1QW5' where id=32; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='F4FCMAVRQ64ESYF7UXYLP6TPJN8KW57KQVMR97SBV796S8501INZ8GRKRYIONAEAWO85V94I3RQ5WJHFWGY6TDPRJ31HGIGN2RIZSIMEASFT8BQCVXUROGRAVDYVGRMDI8GUM5THQ3VEAZT4OMB5VHRGLGOU70FRGJ3WOA6LOROWGQE44D2TP8F000SXT482NNMKS5N25L40EBVUO7VLX6PX92KXZXFBQMS00JGP0ZSJL9S5NAE97YAHR3IQK2B49' where id=32; -update noar ti set v2='F4FCMAVRQ64ESYF7UXYLP6TPJN8KW57KQVMR97SBV796S8501INZ8GRKRYIONAEAWO85V94I3RQ5WJHFWGY6TDPRJ31HGIGN2RIZSIMEASFT8BQCVXUROGRAVDYVGRMDI8GUM5THQ3VEAZT4OMB5VHRGLGOU70FRGJ3WOA6LOROWGQE44D2TP8F000SXT482NNMKS5N25L40EBVUO7VLX6PX92KXZXFBQMS00JGP0ZSJL9S5NAE97YAHR3IQK2B49' where id=32; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='V0BL5PB096CUSXLGO3NAH6GL79WZM9CLQX0GJRP0PSTMX6T8BSNMYCJWWGJ5IMIMR9HF75YRGC63I3ZIUQYMT44C3JH09V2A5B2RMV107F85F1GPTB8EAOL4P8WD3TDEI4LELY6FY3EN66ZJCDJVPUARGAQV4O8UCEPT9MXD8WP5XCOFA7X18E51OBKVN4RLACY4Y7RK1RCTI95L7K1GI5DL00P2R4DYNKT2QGFAUSII64FY5ZZC1T1VHMCZAQ8FW' where id=32; -update noar ti set v3='V0BL5PB096CUSXLGO3NAH6GL79WZM9CLQX0GJRP0PSTMX6T8BSNMYCJWWGJ5IMIMR9HF75YRGC63I3ZIUQYMT44C3JH09V2A5B2RMV107F85F1GPTB8EAOL4P8WD3TDEI4LELY6FY3EN66ZJCDJVPUARGAQV4O8UCEPT9MXD8WP5XCOFA7X18E51OBKVN4RLACY4Y7RK1RCTI95L7K1GI5DL00P2R4DYNKT2QGFAUSII64FY5ZZC1T1VHMCZAQ8FW' where id=32; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='SMJCJ2I7BYD5ME648PESRGRNDAYLOF0AS1KEDGEGVK53QU0H1YZEVKYOFSMDD47NW277BIEIAGU9KVMIMUPBBV6MFHQTXT39FDSY3EEN0BT1TQ5JQGGT25XOQXENATG424XQ2ADICJZVA6OGQ6UE42ZJEE7MG7T6TVNXNX4ASSER6DTN4F77703UECIGDU1U8556WDHZEOUKB8RDD1WEDMUGVDK2LO9IP8Q41S0RXLFWL9TGVEA8WV7KQFGHFJFO8' where id=33; -update noar ti set v0='SMJCJ2I7BYD5ME648PESRGRNDAYLOF0AS1KEDGEGVK53QU0H1YZEVKYOFSMDD47NW277BIEIAGU9KVMIMUPBBV6MFHQTXT39FDSY3EEN0BT1TQ5JQGGT25XOQXENATG424XQ2ADICJZVA6OGQ6UE42ZJEE7MG7T6TVNXNX4ASSER6DTN4F77703UECIGDU1U8556WDHZEOUKB8RDD1WEDMUGVDK2LO9IP8Q41S0RXLFWL9TGVEA8WV7KQFGHFJFO8' where id=33; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='Z5E0TKVJXTVWLMXLOSWPMNI2S4OEQDTYSE8KZ6KLV2HY6BAEYUQTES81KH1QWKO7NP7GE5CWDZRFIO16Z1AIXSREFCOI5BCA791J2XI6USUZRAJA7IAEYEPXV9UZ4VRRQ2IWRAHJ03S0HUGPNXWKWY5OLPQ2C1JO12VMB8B983V9BXM84IHI8P3GTZ49455TYPBCJ2RLEBEAWONG6C9OHHEU6XA0J65LFD3FWP6Y3AQ2V1BUVKQG85IH1T54KOIOL' where id=33; -update noar ti set v1='Z5E0TKVJXTVWLMXLOSWPMNI2S4OEQDTYSE8KZ6KLV2HY6BAEYUQTES81KH1QWKO7NP7GE5CWDZRFIO16Z1AIXSREFCOI5BCA791J2XI6USUZRAJA7IAEYEPXV9UZ4VRRQ2IWRAHJ03S0HUGPNXWKWY5OLPQ2C1JO12VMB8B983V9BXM84IHI8P3GTZ49455TYPBCJ2RLEBEAWONG6C9OHHEU6XA0J65LFD3FWP6Y3AQ2V1BUVKQG85IH1T54KOIOL' where id=33; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='RI82AQZSNG5COFOSA2TEAJPELHLYTP83M01TZQ0H9LXFQF8NTNFYYC5XJZG5WPRG2BZ305FSKGW1SR8GWH7QW9TXYVGGSW5APS14QQIC5BCVKDM49Y6HW32Q0P76LNONUZEU4514ZMLPUUP98LZ5UE72WC4XXOD5VXFT9ZS2TGLIZKZQTDMFMIM0DL9PA54X4VZXT3HKGB3X21JQ1AG62HH764UPXVOORA8VW7B7BMY1GGET59JCXTB3YY96ADV10' where id=33; -update noar ti set v2='RI82AQZSNG5COFOSA2TEAJPELHLYTP83M01TZQ0H9LXFQF8NTNFYYC5XJZG5WPRG2BZ305FSKGW1SR8GWH7QW9TXYVGGSW5APS14QQIC5BCVKDM49Y6HW32Q0P76LNONUZEU4514ZMLPUUP98LZ5UE72WC4XXOD5VXFT9ZS2TGLIZKZQTDMFMIM0DL9PA54X4VZXT3HKGB3X21JQ1AG62HH764UPXVOORA8VW7B7BMY1GGET59JCXTB3YY96ADV10' where id=33; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='D2TIOP7HZ8XI9MKCCUCB6I0WY905H1GUXYR3PW5OQK0JZL1Y6EPO87PWGFWITHT57W3X9KUU9IJME6BPQTWBXEPWZ9RX7OESNJKSTIS50AYGPKK3KB2YE6N5Q6MDMXNVGUNHPRDHZ3V3MWWKLZJ8V4HE42MGXD1GPS6PXLNZ6VS39L4P28SCI6840Z7C3XZ323D34ZB1FSQA2L8DXBQQE7PEK15SWAQIKKY1DYJCTCWM773JZLFWB4F99SZQW7V6X' where id=33; -update noar ti set v3='D2TIOP7HZ8XI9MKCCUCB6I0WY905H1GUXYR3PW5OQK0JZL1Y6EPO87PWGFWITHT57W3X9KUU9IJME6BPQTWBXEPWZ9RX7OESNJKSTIS50AYGPKK3KB2YE6N5Q6MDMXNVGUNHPRDHZ3V3MWWKLZJ8V4HE42MGXD1GPS6PXLNZ6VS39L4P28SCI6840Z7C3XZ323D34ZB1FSQA2L8DXBQQE7PEK15SWAQIKKY1DYJCTCWM773JZLFWB4F99SZQW7V6X' where id=33; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='CEVPGTNI2AM3CB7BQZ1E68PN3EXOD1LAJRY9PYB9K52MWDPR3O0AIFZ00K76UM0ADJOIH4GT4ONL1ES09U2JSDJMRB4K6F29I1W8G41LZ03JU86HRDYALSPBB3Q7BKFYPW0XUB9KX40QXQ2LQH5RV4D2VBZG7YNLLJRZGWAEMZOML3CC2FPKUN2K76U1TMZD0SE1N17KS78CCAKS8EVDUW0L72VYPM8VGPXNHMK9OQYP6RD22B5SXW1EFX7OKOO6W' where id=34; -update noar ti set v0='CEVPGTNI2AM3CB7BQZ1E68PN3EXOD1LAJRY9PYB9K52MWDPR3O0AIFZ00K76UM0ADJOIH4GT4ONL1ES09U2JSDJMRB4K6F29I1W8G41LZ03JU86HRDYALSPBB3Q7BKFYPW0XUB9KX40QXQ2LQH5RV4D2VBZG7YNLLJRZGWAEMZOML3CC2FPKUN2K76U1TMZD0SE1N17KS78CCAKS8EVDUW0L72VYPM8VGPXNHMK9OQYP6RD22B5SXW1EFX7OKOO6W' where id=34; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='KLY7XAXSCG1PRGYEV2F4CNS74QOZ1HOZ1RZKR5PAQCBKFOG9QGZ4K7CGEYXCDVRFLR08ISL6O0LCE1DHFR6D0RZQ33M8KIIYYAJIQBIFX0SHSXCT998FZ3Y8QBKKSERX39YNTXPL2MKYRNTILEGKJEZXITPGNNNSYGGDUKX67VQLELXMX5V9GGKC6UJPJRV6N2X1U9QHM4ZBG5WHRTDS64NOKNG0HA2B3EYDXM3LT3M0TRGUGVLR3Y8XZWSNMYD2K' where id=34; -update noar ti set v1='KLY7XAXSCG1PRGYEV2F4CNS74QOZ1HOZ1RZKR5PAQCBKFOG9QGZ4K7CGEYXCDVRFLR08ISL6O0LCE1DHFR6D0RZQ33M8KIIYYAJIQBIFX0SHSXCT998FZ3Y8QBKKSERX39YNTXPL2MKYRNTILEGKJEZXITPGNNNSYGGDUKX67VQLELXMX5V9GGKC6UJPJRV6N2X1U9QHM4ZBG5WHRTDS64NOKNG0HA2B3EYDXM3LT3M0TRGUGVLR3Y8XZWSNMYD2K' where id=34; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='TASF19WZC6DOXCQELE13CAMAHCSVM2B62WERVP3OURCLITH5HP4B4Q2XMFBTV40ZIJT2NQK6G7D8YGNI7KRAVKVUDUSWYQTZUTCLCPAGXGS9WVOBJ5ZOACE3I372LMPGQ4UJTBIVZ2A6L553NQBEYN3F2PZZYXRBA9QVQOIU30ANQTH7Y8KTNYSD3DGO61CY8E2QAZYTQ2Z8GCSSIUU4DWJ5WREQRG63UAX58M5UAYGD7D6OEYVL1NGTQ4HZAWLC1' where id=34; -update noar ti set v2='TASF19WZC6DOXCQELE13CAMAHCSVM2B62WERVP3OURCLITH5HP4B4Q2XMFBTV40ZIJT2NQK6G7D8YGNI7KRAVKVUDUSWYQTZUTCLCPAGXGS9WVOBJ5ZOACE3I372LMPGQ4UJTBIVZ2A6L553NQBEYN3F2PZZYXRBA9QVQOIU30ANQTH7Y8KTNYSD3DGO61CY8E2QAZYTQ2Z8GCSSIUU4DWJ5WREQRG63UAX58M5UAYGD7D6OEYVL1NGTQ4HZAWLC1' where id=34; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='YSLWBTDMP4WO0IA84PRKYCUHTS78YHBPADLG8VQ02INCMYTES60W2K2813RP0DZ4NZYHL9BFPGM1Q1XSAEAA1GOI1P5OV1A749XNRQV0UFXKDWJU3UCK4IKVUX15CRMJRYFMH4I38KA16MAU092L3QJQNADKF2QRTGNWZ8VDHTMCW5WWV0TXT3UK1VMH2LVI8MUFTL51U6975IBKC4FA8LELUFJUXXWTO6LH5GAONH1PBMB3475M1RK3DDQCSNKZZ' where id=34; -update noar ti set v3='YSLWBTDMP4WO0IA84PRKYCUHTS78YHBPADLG8VQ02INCMYTES60W2K2813RP0DZ4NZYHL9BFPGM1Q1XSAEAA1GOI1P5OV1A749XNRQV0UFXKDWJU3UCK4IKVUX15CRMJRYFMH4I38KA16MAU092L3QJQNADKF2QRTGNWZ8VDHTMCW5WWV0TXT3UK1VMH2LVI8MUFTL51U6975IBKC4FA8LELUFJUXXWTO6LH5GAONH1PBMB3475M1RK3DDQCSNKZZ' where id=34; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='9Z2WWYVQAO54OROWEGFS1JAQBES4KLXDLOF8LXVPZ17QZMMTUXSRNTGL8GVJO2MWPBZD9CJAY7UK9IL4U4VFGE5FMDMT2YDVA1N8MCCBJL9U0WSUABMK927LBRHTD5RKT1O08AIIL6SMN6J7A1AFW92B7AKKIHWFLVKKP4AHG8RB9S9T0LMBL99CB62L0EQ4FAPUKDCCNBSM0V46DT8YO9YMZLAXB63QAGR3FKMF45DPJRZM62YQ0EBY59RVNJOLD' where id=35; -update noar ti set v0='9Z2WWYVQAO54OROWEGFS1JAQBES4KLXDLOF8LXVPZ17QZMMTUXSRNTGL8GVJO2MWPBZD9CJAY7UK9IL4U4VFGE5FMDMT2YDVA1N8MCCBJL9U0WSUABMK927LBRHTD5RKT1O08AIIL6SMN6J7A1AFW92B7AKKIHWFLVKKP4AHG8RB9S9T0LMBL99CB62L0EQ4FAPUKDCCNBSM0V46DT8YO9YMZLAXB63QAGR3FKMF45DPJRZM62YQ0EBY59RVNJOLD' where id=35; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='04ZO67E1SQKCWA18NIMQELK7GMD212AM2KPOUWINLA66A17D66SKOFLS1EPZ2EDBPGEC3WDHRCK59L7F9OFG71736IJ4CY4JOBP3ERDXB7XZGMCT0OV70TYGTWKLPYXRFBI8YBZ5YWA7KWSHQVE2ZQCT9FFYMYN68PT8QXIEA4IW9DXA2C0AEOENEG5UZLM9H13P4H71ATAHATJ5J4JSDAFAQWRJWIEH6Q2IF1UC552NQRFDRITIIBJW1C9JSGKH8' where id=35; -update noar ti set v1='04ZO67E1SQKCWA18NIMQELK7GMD212AM2KPOUWINLA66A17D66SKOFLS1EPZ2EDBPGEC3WDHRCK59L7F9OFG71736IJ4CY4JOBP3ERDXB7XZGMCT0OV70TYGTWKLPYXRFBI8YBZ5YWA7KWSHQVE2ZQCT9FFYMYN68PT8QXIEA4IW9DXA2C0AEOENEG5UZLM9H13P4H71ATAHATJ5J4JSDAFAQWRJWIEH6Q2IF1UC552NQRFDRITIIBJW1C9JSGKH8' where id=35; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='QAJHN7HVJM4MMZQD2A8MJ9FYRAD6U2S29U5DKF1B1P8J8XJOA0KSD0VYH4EF6GBN5DDLX3WLCCVJLEE3RAFE771CDVUF8EEARH1403WADOO5Q27Y7MB0Z5O94RTVN7F4DH75WWOVZ9ZJ7ZB4QIMADYAHBHOCQO3T968ZDOZH2NW2GPRS38LMGMWO824VZV19TV1J78IH1V27AJ5S78UTE03X58K5AH9VCX2WATUESM25IU0NX9AC9S5B32GQEV4DH' where id=35; -update noar ti set v2='QAJHN7HVJM4MMZQD2A8MJ9FYRAD6U2S29U5DKF1B1P8J8XJOA0KSD0VYH4EF6GBN5DDLX3WLCCVJLEE3RAFE771CDVUF8EEARH1403WADOO5Q27Y7MB0Z5O94RTVN7F4DH75WWOVZ9ZJ7ZB4QIMADYAHBHOCQO3T968ZDOZH2NW2GPRS38LMGMWO824VZV19TV1J78IH1V27AJ5S78UTE03X58K5AH9VCX2WATUESM25IU0NX9AC9S5B32GQEV4DH' where id=35; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='7YF1UUXIU98TX1QII3SE0054PWLELT3IQDFXZZD02IVY4HY5T6JKHR2CDF372IUUYV90F0IZI6K2IDC7BBBON4XGH4GS8T44F2HJWNZBFT7U2VONSOG8A4A9C690BG8WL54F8JY4GBCJQFM8SQBNJ0IWJO8CB17391QLSY7E3HC7U2P2Y7JNW47XCJ4XNP9XUKAHE4UAEGXIP1EBPG2CA0V432KJ5JAAYGUJEFS9B3UHTT907OWDJCJBJ2STVV419' where id=35; -update noar ti set v3='7YF1UUXIU98TX1QII3SE0054PWLELT3IQDFXZZD02IVY4HY5T6JKHR2CDF372IUUYV90F0IZI6K2IDC7BBBON4XGH4GS8T44F2HJWNZBFT7U2VONSOG8A4A9C690BG8WL54F8JY4GBCJQFM8SQBNJ0IWJO8CB17391QLSY7E3HC7U2P2Y7JNW47XCJ4XNP9XUKAHE4UAEGXIP1EBPG2CA0V432KJ5JAAYGUJEFS9B3UHTT907OWDJCJBJ2STVV419' where id=35; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='ZWTE34UL3W26PGM53MOG1JMLSBSP9WALLI7NFY97O95LPDQ7FWT0T5KYL81Y9WREZD8S3SNQV53ROL3365CVCKRIHE2EUQIEU2T4JTFPBAWPUP8HHQBBYHVGN8YG7MQ0WKLSDMQOMS4S0ZNH2UHTKSDMN03N4WGYUZH85EI81W7E9N7ZHDAQA4MT3XGPGN5KQR1PDKXUXMESSNOC89GFL9TFPN263VDU7WEW1AK9VC9YZXZ61O6H1QSGGEZTYOZ3O' where id=36; -update noar ti set v0='ZWTE34UL3W26PGM53MOG1JMLSBSP9WALLI7NFY97O95LPDQ7FWT0T5KYL81Y9WREZD8S3SNQV53ROL3365CVCKRIHE2EUQIEU2T4JTFPBAWPUP8HHQBBYHVGN8YG7MQ0WKLSDMQOMS4S0ZNH2UHTKSDMN03N4WGYUZH85EI81W7E9N7ZHDAQA4MT3XGPGN5KQR1PDKXUXMESSNOC89GFL9TFPN263VDU7WEW1AK9VC9YZXZ61O6H1QSGGEZTYOZ3O' where id=36; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='DB8LWOYT1Q02Z5OY1M5WHNPB1858O29EIHLA3BBAN5AUPEPG4YJCLCY9S6O10URWRV7XQQVLWMHVZWCKDCMJOVH5AORUOP37GO9VHYPA2VI7YS72W28X9P5XGIQBZZK4L5CHF2NMCBNRZIWIHTI9FSBH96W0V37SVXBZ9FJU75OCSOFJ8FBP7PSUNK0DNOKJSEJ1U3J18A1WNP8KHVQUTBQYEREHLLJ2I5G9V0Z8AWQUYD836HCE4HGPPEJS24N67' where id=36; -update noar ti set v1='DB8LWOYT1Q02Z5OY1M5WHNPB1858O29EIHLA3BBAN5AUPEPG4YJCLCY9S6O10URWRV7XQQVLWMHVZWCKDCMJOVH5AORUOP37GO9VHYPA2VI7YS72W28X9P5XGIQBZZK4L5CHF2NMCBNRZIWIHTI9FSBH96W0V37SVXBZ9FJU75OCSOFJ8FBP7PSUNK0DNOKJSEJ1U3J18A1WNP8KHVQUTBQYEREHLLJ2I5G9V0Z8AWQUYD836HCE4HGPPEJS24N67' where id=36; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='3RN6SO2MKI9QEO7D720Y4XYG98XAV7EJ74VHK4GKGIT5BTFQXTC5FCKM9K3WSSR5LZ0PKUDNPB1H1PXLGPO7CPJNHCJZJQT4R59M3L3716DSKPTEF2F8C6B56YO1L51VKTQ3D11REDDDNJO7VAQAJ8AFTAU3ELS0J4W00D98IAKK6P72W5HES28002EDN08RWY8H2GZAK1KPAMNEKDAVPHSIB23QBHQSHRVXNHTVSGQFOEK68X9P3UCDAWW5GPD2P' where id=36; -update noar ti set v2='3RN6SO2MKI9QEO7D720Y4XYG98XAV7EJ74VHK4GKGIT5BTFQXTC5FCKM9K3WSSR5LZ0PKUDNPB1H1PXLGPO7CPJNHCJZJQT4R59M3L3716DSKPTEF2F8C6B56YO1L51VKTQ3D11REDDDNJO7VAQAJ8AFTAU3ELS0J4W00D98IAKK6P72W5HES28002EDN08RWY8H2GZAK1KPAMNEKDAVPHSIB23QBHQSHRVXNHTVSGQFOEK68X9P3UCDAWW5GPD2P' where id=36; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='Y7WMCEAE241842NRD0G9QB4G0AECXE2XJBVYQANEMUBXE4GT1THUEK6RZW0LBD3XDKQU2I3Z4DCKN8HJBT9N91YGKFQVEXW689RSFH8FS29NOGTZC8T03QN8M0R9EHESKISGYRCD6AZ0FF5FC6B1KYXN156Z4IOMY65FDSLNV0XLROTCAFP7CH8MOF0TI6JITWVR3XLWCX4LPHJGR7CTPY8NI9Q9PCE0X1P5EDHO8PJYHDYELJUCTYMNEJJP1ANDR' where id=36; -update noar ti set v3='Y7WMCEAE241842NRD0G9QB4G0AECXE2XJBVYQANEMUBXE4GT1THUEK6RZW0LBD3XDKQU2I3Z4DCKN8HJBT9N91YGKFQVEXW689RSFH8FS29NOGTZC8T03QN8M0R9EHESKISGYRCD6AZ0FF5FC6B1KYXN156Z4IOMY65FDSLNV0XLROTCAFP7CH8MOF0TI6JITWVR3XLWCX4LPHJGR7CTPY8NI9Q9PCE0X1P5EDHO8PJYHDYELJUCTYMNEJJP1ANDR' where id=36; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='5KHDP07RQZBXC8CT2MMV24HBP5XFBECJPHYEN19BRDU8TZLZE3Q1R292UYKDH0B5IEII05OV04BND8ID54UW1X1YZXG6Q0CQZ2AD04E84BEH8QL5K8UBWLNTZCHWNQ3CGBIGFTD0JLLSUA6IPF48LTBJ8OLP6L094G6UXKHHYIU7FFN40LHOUDIEUZD2WQEKH7FAIDMRVCW3LF3HNCNM4YOZCMVWEX1B3WPDXW0H0E8R936E41MU0LODUGTK9GOV2' where id=37; -update noar ti set v0='5KHDP07RQZBXC8CT2MMV24HBP5XFBECJPHYEN19BRDU8TZLZE3Q1R292UYKDH0B5IEII05OV04BND8ID54UW1X1YZXG6Q0CQZ2AD04E84BEH8QL5K8UBWLNTZCHWNQ3CGBIGFTD0JLLSUA6IPF48LTBJ8OLP6L094G6UXKHHYIU7FFN40LHOUDIEUZD2WQEKH7FAIDMRVCW3LF3HNCNM4YOZCMVWEX1B3WPDXW0H0E8R936E41MU0LODUGTK9GOV2' where id=37; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='HM9HKNLFTTDS4F275OOYYVUGOWVZBN96RQ5VW8D1R8THQCW3LOWJ51FVT8BGW0UCI4IU26Q2TYZMIEUPKFLYTOODABG2QB5HQ0GML8XLNVNA8FTIHQ9BCPRK4HORQRN495CQOFQLLF193477Y0VSTOADAFEU3LPQYLJO9ON3AGPCET3SKARETYXLSGYC609QOUFO711O4KFVZUNMAPRKJMYX44CUNJQAKFOEYX46LQH4ED5MRBK8AC99AY5O2N3DW' where id=37; -update noar ti set v1='HM9HKNLFTTDS4F275OOYYVUGOWVZBN96RQ5VW8D1R8THQCW3LOWJ51FVT8BGW0UCI4IU26Q2TYZMIEUPKFLYTOODABG2QB5HQ0GML8XLNVNA8FTIHQ9BCPRK4HORQRN495CQOFQLLF193477Y0VSTOADAFEU3LPQYLJO9ON3AGPCET3SKARETYXLSGYC609QOUFO711O4KFVZUNMAPRKJMYX44CUNJQAKFOEYX46LQH4ED5MRBK8AC99AY5O2N3DW' where id=37; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='7PIF0EM0YX7VOZJL6AOEBIRN0M97MVYZQTL94HVSUI1Y8ZKK1JNPFTX9U8B5IP2VM3S6VWS06OXELAIDKC18LPIGOR4BFFF810H7EC47Z631N5W550WANJX3LXNAKM2X107C73VOUI2IR6P43H6GT9TXQDU53LDZXI8FWT4GT3JACCKFBO4LRAMATOKC2TTH44HU2PIXHTVD930JWGXBHYHKNYR7RYID3QPYRB4DH4RQBTPYBQ9FYOM9JA41V47NW' where id=37; -update noar ti set v2='7PIF0EM0YX7VOZJL6AOEBIRN0M97MVYZQTL94HVSUI1Y8ZKK1JNPFTX9U8B5IP2VM3S6VWS06OXELAIDKC18LPIGOR4BFFF810H7EC47Z631N5W550WANJX3LXNAKM2X107C73VOUI2IR6P43H6GT9TXQDU53LDZXI8FWT4GT3JACCKFBO4LRAMATOKC2TTH44HU2PIXHTVD930JWGXBHYHKNYR7RYID3QPYRB4DH4RQBTPYBQ9FYOM9JA41V47NW' where id=37; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='BHDRUYCC8FJWDWA1KMYVOW6FBNOCJTRLMJP2V5097XFIT1441QKRNEZ75WUWEGE24M3Z7SLITDJ1JLWCOZS7TVW3ZTGSQMTOOBIE5W2PLJO9YBQ41SJMIMQ8D05I3A4D6CLF9LTITTPC3VJ05GDP0Z6BCYB3R3N9036V9U4JF8TODQOHU24XSJXSP05BTFEFI9BFQDR6LU4F6P91UVKL5TF7MMP4360WOSNJM7NXZSVVH8C9WF0G8AUMEC2079OWS' where id=37; -update noar ti set v3='BHDRUYCC8FJWDWA1KMYVOW6FBNOCJTRLMJP2V5097XFIT1441QKRNEZ75WUWEGE24M3Z7SLITDJ1JLWCOZS7TVW3ZTGSQMTOOBIE5W2PLJO9YBQ41SJMIMQ8D05I3A4D6CLF9LTITTPC3VJ05GDP0Z6BCYB3R3N9036V9U4JF8TODQOHU24XSJXSP05BTFEFI9BFQDR6LU4F6P91UVKL5TF7MMP4360WOSNJM7NXZSVVH8C9WF0G8AUMEC2079OWS' where id=37; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='99R3SGHTL5SYXUJG0XYIHP9XI3K7ZYKNK41UBIZ0Q7BTSHFJ0MZ3W9EU5J36G2ZZ7KFORM8QIYTWE0042NWY45BHI4O6B32TSGFCHDI9TMI7NNCG6RTSMVSJRNDIEZVYN6IJOE43Q3CRMPXZ5SGUEB59VOS3XMEGILMI7VYS23SBV1GKCGFZMZSNNB84604ICVATGETO7V9GV56MCXVV3507SKPC4TJCSRLDJ9L4N0YRXA40UH7LQQUWL16T3XR2D' where id=38; -update noar ti set v0='99R3SGHTL5SYXUJG0XYIHP9XI3K7ZYKNK41UBIZ0Q7BTSHFJ0MZ3W9EU5J36G2ZZ7KFORM8QIYTWE0042NWY45BHI4O6B32TSGFCHDI9TMI7NNCG6RTSMVSJRNDIEZVYN6IJOE43Q3CRMPXZ5SGUEB59VOS3XMEGILMI7VYS23SBV1GKCGFZMZSNNB84604ICVATGETO7V9GV56MCXVV3507SKPC4TJCSRLDJ9L4N0YRXA40UH7LQQUWL16T3XR2D' where id=38; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='8XJ9D3TNL6AIZRNLQN73XTV10QHYAMS6CUT1Y5XKWC8V40E2URYC6SAMW0YDWF1QTG95B03KCY1FNMDQTVWPF39E6KAZ5Q920P5WCUQ5YBBY5TK1BVSOJIKG9OC5DG3MG77HXF4JHNNVZUPVE3I0F7JO953XEKHVKDFQ0FVG5E6E1ENM6X9EGLN7K4UG0FH6W9LGOHLKVJJACK2FL0C94VCXE621CKKNH2HG9VGJ40F2JG7GSTVQW1PGX9JL0YW3V' where id=38; -update noar ti set v1='8XJ9D3TNL6AIZRNLQN73XTV10QHYAMS6CUT1Y5XKWC8V40E2URYC6SAMW0YDWF1QTG95B03KCY1FNMDQTVWPF39E6KAZ5Q920P5WCUQ5YBBY5TK1BVSOJIKG9OC5DG3MG77HXF4JHNNVZUPVE3I0F7JO953XEKHVKDFQ0FVG5E6E1ENM6X9EGLN7K4UG0FH6W9LGOHLKVJJACK2FL0C94VCXE621CKKNH2HG9VGJ40F2JG7GSTVQW1PGX9JL0YW3V' where id=38; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='7OJL1AMJOI62PX9UPNGER0DPYE0IMOH0CDBD9OU8VWZGDJ1DAOFXC6UD36Y0QCSC63C5JGSERS8XTBRGW8IUGF3WYC60WN936RZMG6KRST4KZ3YTAASJ2VP0CKGJ4HYEWIC6VPYZK2EVB4BHA57DAVL96R77W9469RVGU06ZUNWDNICDQ0177FNU6K5O3ORHW4OUWU5LSHHSK1JD4GWRRSME1ECTU8B7FFVT52QMGTBL0SME3QSH6I4C0IR4QVW6Q' where id=38; -update noar ti set v2='7OJL1AMJOI62PX9UPNGER0DPYE0IMOH0CDBD9OU8VWZGDJ1DAOFXC6UD36Y0QCSC63C5JGSERS8XTBRGW8IUGF3WYC60WN936RZMG6KRST4KZ3YTAASJ2VP0CKGJ4HYEWIC6VPYZK2EVB4BHA57DAVL96R77W9469RVGU06ZUNWDNICDQ0177FNU6K5O3ORHW4OUWU5LSHHSK1JD4GWRRSME1ECTU8B7FFVT52QMGTBL0SME3QSH6I4C0IR4QVW6Q' where id=38; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='X7I8XRJKUY0PHLB4GEB99VKZU7OT097DEJ0CD7NM7ZT5SAWMUKMTKDTMVLOTAJ0O6PJKI8306ZW9ZL4CVQKCDIRDVN58M3TX5JCODJUQETLWZ078S82LZFAPOBUR7X7MEG76O9RGEMMBGGAQECIFYHN0KRK5RV2F7SGAZ11I2962C5PACSKG11SYTC5Y3KETNOW8W2E5G534R3PJLF5O63JACZ9WJ7M5RF1TCGUHTNQ9W8BS41S9SF6QQUE9WM98N' where id=38; -update noar ti set v3='X7I8XRJKUY0PHLB4GEB99VKZU7OT097DEJ0CD7NM7ZT5SAWMUKMTKDTMVLOTAJ0O6PJKI8306ZW9ZL4CVQKCDIRDVN58M3TX5JCODJUQETLWZ078S82LZFAPOBUR7X7MEG76O9RGEMMBGGAQECIFYHN0KRK5RV2F7SGAZ11I2962C5PACSKG11SYTC5Y3KETNOW8W2E5G534R3PJLF5O63JACZ9WJ7M5RF1TCGUHTNQ9W8BS41S9SF6QQUE9WM98N' where id=38; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='WJO97EIH9Z6P7F3O5KCIM6PR8SLAWJEOFBLQL2J6LVORX5T7CCT2L116VR4RMR8HVLPUWB21G17NS6HM3IIMTLU0J7SWFT1ZQLGFH8H5N8Q72A8AMRVQFW59UBXUZ1YCXW1DVEEFKIOKA4EH57D8A3TP3M6XBPCY4FKMF8P760JEURLXSW06ZGLTQNSQS1GPUZEGW256FRUCO8VE4BD5GXCAPS4BZ898F4R9KHS0LUCFVWGNLVKXN1R7I8EWT8P2L' where id=39; -update noar ti set v0='WJO97EIH9Z6P7F3O5KCIM6PR8SLAWJEOFBLQL2J6LVORX5T7CCT2L116VR4RMR8HVLPUWB21G17NS6HM3IIMTLU0J7SWFT1ZQLGFH8H5N8Q72A8AMRVQFW59UBXUZ1YCXW1DVEEFKIOKA4EH57D8A3TP3M6XBPCY4FKMF8P760JEURLXSW06ZGLTQNSQS1GPUZEGW256FRUCO8VE4BD5GXCAPS4BZ898F4R9KHS0LUCFVWGNLVKXN1R7I8EWT8P2L' where id=39; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='AY288AM1OSME167YWT2XRZPIAHF0DM16EQW6X72JPXTX1MRYG66ZYG5YNV0PNX3WMMQXBC3QYE07WBRWKHY2WK3GFRG1ZXJQ8BW4C6FS0LKLIQI14AIK1RFGFWT15HH3PFVCPXFF4F4PJDRCGC8AD8073TJYFT2LX129I3SEO4JODIBXWF611MFJ40B9VU0T21TEEMM8E2VFF1YXM2U9TQWE7VXH2WQQYS34AGPTSTDFW34FCQPENBH9TU34OCZRD' where id=39; -update noar ti set v1='AY288AM1OSME167YWT2XRZPIAHF0DM16EQW6X72JPXTX1MRYG66ZYG5YNV0PNX3WMMQXBC3QYE07WBRWKHY2WK3GFRG1ZXJQ8BW4C6FS0LKLIQI14AIK1RFGFWT15HH3PFVCPXFF4F4PJDRCGC8AD8073TJYFT2LX129I3SEO4JODIBXWF611MFJ40B9VU0T21TEEMM8E2VFF1YXM2U9TQWE7VXH2WQQYS34AGPTSTDFW34FCQPENBH9TU34OCZRD' where id=39; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='MHOMERN1SPK3N0RLL3N86XZFYIKNCFDWI6V87WTIHS75DGJJ0YAIP69MC06KGGVBRK35KMQNN42KUR6NSA0LGABJ4DZI0DTWNWTZ317UJR8VPLROTXWT6IZR0BO3QVKVVIJL1OPCF19X8JA6SKJEMUOOGYKBQ8T7XPP67X2YCRGS9SGR03LU2IIV4FNI6O1XDFAEQIE4G3SF72UFT91JE4DX3YEWJ3NUMNK5ESVERL4N7GAT8IPE93ZPF2RS5LI7V' where id=39; -update noar ti set v2='MHOMERN1SPK3N0RLL3N86XZFYIKNCFDWI6V87WTIHS75DGJJ0YAIP69MC06KGGVBRK35KMQNN42KUR6NSA0LGABJ4DZI0DTWNWTZ317UJR8VPLROTXWT6IZR0BO3QVKVVIJL1OPCF19X8JA6SKJEMUOOGYKBQ8T7XPP67X2YCRGS9SGR03LU2IIV4FNI6O1XDFAEQIE4G3SF72UFT91JE4DX3YEWJ3NUMNK5ESVERL4N7GAT8IPE93ZPF2RS5LI7V' where id=39; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='H0ECDT4ZNAECTNQ2I2M3JH1U4MJWFEB5ULS7B5NE2BLKCI4UG01KJNKIMAZ4N4107QTZLLV500KWB22WTEGLVWT1OY4QGV04LXY6BJHD0YWLB4NOWRJ3DCMB1E34GFE8R094XIM7KWFX2QLEUQMT72JT4E4BH91Q2SIS6CY9ZSBQAQ8EV0M82P7A9T6YY55SMJYQ070H3914DDMGNIHLIPWRBN20L1HOK6J6S7UOGQFFAWLMLY4CM6F92X9P2UIAK' where id=39; -update noar ti set v3='H0ECDT4ZNAECTNQ2I2M3JH1U4MJWFEB5ULS7B5NE2BLKCI4UG01KJNKIMAZ4N4107QTZLLV500KWB22WTEGLVWT1OY4QGV04LXY6BJHD0YWLB4NOWRJ3DCMB1E34GFE8R094XIM7KWFX2QLEUQMT72JT4E4BH91Q2SIS6CY9ZSBQAQ8EV0M82P7A9T6YY55SMJYQ070H3914DDMGNIHLIPWRBN20L1HOK6J6S7UOGQFFAWLMLY4CM6F92X9P2UIAK' where id=39; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='H6TYWFB0YPE87C06HV6VB15ASSH3T7KHEXJ9BDMGRQ1HEWAYVUI0OQVNJP41SKY8CV9LU428UG3LQ5AOZNVC6XHMCP7MXWLO9UVD6H2UGJXBE1FLZSNLSTWFKBEJD00X097BOTBWVR8JINXFIW6D1T3SSWROT0OP3KY63JD1EKZJ5OBWH6YMBRRUAT9LD5ZZEJGPWCH6JIP9EQ5XSUY1MDLXGI5SW513V2TGM7QOHEWHT2FANAUS7C8VU09U8F4F0' where id=40; -update noar ti set v0='H6TYWFB0YPE87C06HV6VB15ASSH3T7KHEXJ9BDMGRQ1HEWAYVUI0OQVNJP41SKY8CV9LU428UG3LQ5AOZNVC6XHMCP7MXWLO9UVD6H2UGJXBE1FLZSNLSTWFKBEJD00X097BOTBWVR8JINXFIW6D1T3SSWROT0OP3KY63JD1EKZJ5OBWH6YMBRRUAT9LD5ZZEJGPWCH6JIP9EQ5XSUY1MDLXGI5SW513V2TGM7QOHEWHT2FANAUS7C8VU09U8F4F0' where id=40; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='9YCGDP40QAO3GOF4SL44JQ034GH47O2R9AMIT7ERL4X9YAGG8YYHJ9D5OWBRIKNQKDTWVQAH89LLRBC4E3ZAD0QDSCL2FPQ6MC61Y1F087V27N8L2DOV4AYMS4BKWYQEWJC0YT3I595K4B2DQR6FY5Q66AV3TUQ3FK4JO5Z2392QO84NCG8ZX3TFXAFEE41IHSFBY7U2VSMUV6YME8HYNPL6RIFLU1VT22P9CQ1UHGX292LRIAYT91MDD68BVC9AZ' where id=40; -update noar ti set v1='9YCGDP40QAO3GOF4SL44JQ034GH47O2R9AMIT7ERL4X9YAGG8YYHJ9D5OWBRIKNQKDTWVQAH89LLRBC4E3ZAD0QDSCL2FPQ6MC61Y1F087V27N8L2DOV4AYMS4BKWYQEWJC0YT3I595K4B2DQR6FY5Q66AV3TUQ3FK4JO5Z2392QO84NCG8ZX3TFXAFEE41IHSFBY7U2VSMUV6YME8HYNPL6RIFLU1VT22P9CQ1UHGX292LRIAYT91MDD68BVC9AZ' where id=40; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='SG5W35L51AKPAWGI1FKFBFDIWS3XSHV8HA0LC15FOWRBZHPCBORMA8SK6JMJVFUT1JKQI1YAKNR5MXF1P4EW3UWSEFJ0C0ELWDSP96KPLBXRLK40R68D9RK5GM6X032EUGE1BT9ZJZAUE8JM3T51C209NIIVRFC9KEFDYYA85NL6ISF130VS1BRYA0SVTBWTG29JZEXWPXRZXJDLZ30QN3IIDWBOY5ATLHC74LJOLTRAHG9YEXCF65P4DH4K7GQT7' where id=40; -update noar ti set v2='SG5W35L51AKPAWGI1FKFBFDIWS3XSHV8HA0LC15FOWRBZHPCBORMA8SK6JMJVFUT1JKQI1YAKNR5MXF1P4EW3UWSEFJ0C0ELWDSP96KPLBXRLK40R68D9RK5GM6X032EUGE1BT9ZJZAUE8JM3T51C209NIIVRFC9KEFDYYA85NL6ISF130VS1BRYA0SVTBWTG29JZEXWPXRZXJDLZ30QN3IIDWBOY5ATLHC74LJOLTRAHG9YEXCF65P4DH4K7GQT7' where id=40; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='O6AVJDSYRVAH02R5JHW0G6TFMTE5FKNUJ01AG7IKWLT9ZR6VFLH9GD7L10ILXIB2107GFC4CL27NY3W9NJ83LR2ZFIH5BT3771C4K93XH9VIUWKC6FOR897XWACL6R9W6DJCQZFRO4K3POJLGJFA152TLHI5JJG4K5JPH81GP8JSI9VPQXAD5XIT4GWS6PE2SHT79TLYDKT2YF32TYVMGM1PA82TVCQV7KWVPQ36SJ1A5U061MD3P6DKLNJLPJTDH' where id=40; -update noar ti set v3='O6AVJDSYRVAH02R5JHW0G6TFMTE5FKNUJ01AG7IKWLT9ZR6VFLH9GD7L10ILXIB2107GFC4CL27NY3W9NJ83LR2ZFIH5BT3771C4K93XH9VIUWKC6FOR897XWACL6R9W6DJCQZFRO4K3POJLGJFA152TLHI5JJG4K5JPH81GP8JSI9VPQXAD5XIT4GWS6PE2SHT79TLYDKT2YF32TYVMGM1PA82TVCQV7KWVPQ36SJ1A5U061MD3P6DKLNJLPJTDH' where id=40; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='7IEH6KF3NPYH3V42OTV4Y3L11T8XJXUKZQXXD3DOBVWSBLLLJBCKDFKV2W889O84NJN8P3T0NNXZRT85GA5Q05SJF4HR42D51Z52CU53UG8KNUFZDSPNTHAF52608D2U2MWO5ST6YY6VYYSJBEIPVXUJWM899LQDVZM3QTFMONQP0E8H77JU6MZRJMSUQ5EL3GAM1FFDD93E5U13Z65URPBYRZ9YUG1RUPW1AK4WBV1FJ3AFWKRQ5HUQHQ54OFE9N' where id=41; -update noar ti set v0='7IEH6KF3NPYH3V42OTV4Y3L11T8XJXUKZQXXD3DOBVWSBLLLJBCKDFKV2W889O84NJN8P3T0NNXZRT85GA5Q05SJF4HR42D51Z52CU53UG8KNUFZDSPNTHAF52608D2U2MWO5ST6YY6VYYSJBEIPVXUJWM899LQDVZM3QTFMONQP0E8H77JU6MZRJMSUQ5EL3GAM1FFDD93E5U13Z65URPBYRZ9YUG1RUPW1AK4WBV1FJ3AFWKRQ5HUQHQ54OFE9N' where id=41; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='L6C3N4J9BHWSHAC6QX19XOWSM6H755SKBGV5PJ5P8PVT8NM7QJ46EA40XZEVG3ITPC6ZOBRSDSX91SVYLZ52JCUO20EP6GDYPTSQUJNBCFMG45WXSW9O31OB7G1WDOT2XMG0C6GSZL37IJKE8957PQ838YSPIQ7R2X9MZAHYYQNYHX8JDKGZCU2D4IRHSJPNCM5YKFCE08QR0K43QM695XFPE0WI9W6AJYM77FTQ782Q64IGF9UWA22GET3D627GU' where id=41; -update noar ti set v1='L6C3N4J9BHWSHAC6QX19XOWSM6H755SKBGV5PJ5P8PVT8NM7QJ46EA40XZEVG3ITPC6ZOBRSDSX91SVYLZ52JCUO20EP6GDYPTSQUJNBCFMG45WXSW9O31OB7G1WDOT2XMG0C6GSZL37IJKE8957PQ838YSPIQ7R2X9MZAHYYQNYHX8JDKGZCU2D4IRHSJPNCM5YKFCE08QR0K43QM695XFPE0WI9W6AJYM77FTQ782Q64IGF9UWA22GET3D627GU' where id=41; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='2D1P4PF60XUIPEWXSMMUZ69ZRXPTSBQZKFR38JO1C33M0X6GUE8GKYL1TVIB0AK61S3UPB7F57RG478I2BWE9Y48ETCFEIP582TLF0BPMRIL0HT0LTVEBV8A6FO2AU34MZ1X90UKZVUZW5O7MI8JGAFW0FYC61N9E24T961KAZ3YS692Y8MY82LLAR2AOYXP3E3OH73ET4G759KSRG804HP602JD29SAZOGX3OYFAJ6P85WDF8X1H3FQZI572N8VF' where id=41; -update noar ti set v2='2D1P4PF60XUIPEWXSMMUZ69ZRXPTSBQZKFR38JO1C33M0X6GUE8GKYL1TVIB0AK61S3UPB7F57RG478I2BWE9Y48ETCFEIP582TLF0BPMRIL0HT0LTVEBV8A6FO2AU34MZ1X90UKZVUZW5O7MI8JGAFW0FYC61N9E24T961KAZ3YS692Y8MY82LLAR2AOYXP3E3OH73ET4G759KSRG804HP602JD29SAZOGX3OYFAJ6P85WDF8X1H3FQZI572N8VF' where id=41; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='UNSOGZ7KH6PFU7SB5XFJKJF6PONZI4XXZM30SG7H68YR7ASKWVO9LT7RS3RS17VB1S72XWIS7CVN7STMI5RHZFUWFEXNDOXJI7ZXU2CRLLZXT0KPCTK8OBIS2NDO94VY7QK3YNGH4BA34BF1NOKT0ZV1OCB7SVG98QLROCENCR3HSFBL63UM4Y6DE1QELWMLPEVEW4DUNQUFJQBRAHXTF9YPOP70879LJ53WHE61MK5OXPB3JDFOGKF7PESMZOGQI' where id=41; -update noar ti set v3='UNSOGZ7KH6PFU7SB5XFJKJF6PONZI4XXZM30SG7H68YR7ASKWVO9LT7RS3RS17VB1S72XWIS7CVN7STMI5RHZFUWFEXNDOXJI7ZXU2CRLLZXT0KPCTK8OBIS2NDO94VY7QK3YNGH4BA34BF1NOKT0ZV1OCB7SVG98QLROCENCR3HSFBL63UM4Y6DE1QELWMLPEVEW4DUNQUFJQBRAHXTF9YPOP70879LJ53WHE61MK5OXPB3JDFOGKF7PESMZOGQI' where id=41; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='X2VS18LMHN0RSKNKD3V779LTXWS0FD7XE8J6ZSO1WXPFKREBT088TSS26Q7JFT5HZC0WKMBSQ720KMSZR1TYX7CG7Y8RB9JVT3U2D3DZPLC1RDMIFWVJCW5QSQ2LQJW0CRA5A8646G2B0YGAFT4HUCIOC0OLNDOZMB3A2E7PNYSAZK8GYD7AN2VAZE6IYT9W4L5Q4T1F4TDKEJSDVDMHVAYZ1M8WM4P3Y27AFMEVRPEUUNY4ODRQXH7U2HPE60ZHS' where id=42; -update noar ti set v0='X2VS18LMHN0RSKNKD3V779LTXWS0FD7XE8J6ZSO1WXPFKREBT088TSS26Q7JFT5HZC0WKMBSQ720KMSZR1TYX7CG7Y8RB9JVT3U2D3DZPLC1RDMIFWVJCW5QSQ2LQJW0CRA5A8646G2B0YGAFT4HUCIOC0OLNDOZMB3A2E7PNYSAZK8GYD7AN2VAZE6IYT9W4L5Q4T1F4TDKEJSDVDMHVAYZ1M8WM4P3Y27AFMEVRPEUUNY4ODRQXH7U2HPE60ZHS' where id=42; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='QUP7XPWL1USMNE30RH322RXH398Q4JCDHH65L1D5T7D6O50036YVFWOTQCP7EP2LL7BK80HFV4U2N8MQS63EMOHZHEHI2BHQLAH6NA7KX3SU8U3JOFFEUPP4IU4ZSHTLH2OBARE9AZ6IP7ZCXZB08A8KTTKJX7UBDR3I2WK09BGT9W09CD3ZMWI2O52AQDAK1I9AP28K2Y0EH4PPA9PEKV620RDMAR2UG4WWLWJMXZ9L7OOILU2NFMUFBL9WF1FYK' where id=42; -update noar ti set v1='QUP7XPWL1USMNE30RH322RXH398Q4JCDHH65L1D5T7D6O50036YVFWOTQCP7EP2LL7BK80HFV4U2N8MQS63EMOHZHEHI2BHQLAH6NA7KX3SU8U3JOFFEUPP4IU4ZSHTLH2OBARE9AZ6IP7ZCXZB08A8KTTKJX7UBDR3I2WK09BGT9W09CD3ZMWI2O52AQDAK1I9AP28K2Y0EH4PPA9PEKV620RDMAR2UG4WWLWJMXZ9L7OOILU2NFMUFBL9WF1FYK' where id=42; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='LTIIJYKPL9I9KJ0J3GFLHS0DS4SEZRV43NX25MCYG4VWO0SF9YDIEU3XYDGVQGUIHXR3LEEPAD4YY5E0A20L0VC2ZGXXDG9QR80073A0XEEZRUMDHTEB6PJMNJOM2LW0MIUK07I6OYX0UVCEPW9FP9F80OQTQWJ591RC7O8ZY8FH0KZ65DLZQIPSJ6L5KVTWZEDIPWAGGQRFL660ZYD9WE6E4ENOJLTZQXOP6HN1Z123835E3V5Y3ELHYZ3AO08V8' where id=42; -update noar ti set v2='LTIIJYKPL9I9KJ0J3GFLHS0DS4SEZRV43NX25MCYG4VWO0SF9YDIEU3XYDGVQGUIHXR3LEEPAD4YY5E0A20L0VC2ZGXXDG9QR80073A0XEEZRUMDHTEB6PJMNJOM2LW0MIUK07I6OYX0UVCEPW9FP9F80OQTQWJ591RC7O8ZY8FH0KZ65DLZQIPSJ6L5KVTWZEDIPWAGGQRFL660ZYD9WE6E4ENOJLTZQXOP6HN1Z123835E3V5Y3ELHYZ3AO08V8' where id=42; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='JVUTYXYK9ZB5483JK5XKDB1JU0XEQUZ7XQYGNSGSFSFUMO713WKHNHD5TH9JP2292SJ7E7X13EJ486IG6DT6U32ROA9T17USRFQPZR0M9CY4IAOMGYU4D0R6CTT8ZZ6FXGRAUSZASUNTRL5MA5X6WPPAL5ZRTTYD1MULKQFDDC5798KGZ6YJY4434GDRES7E4LVPOB9MMXCWB9HMVQ6E21J7KGI3LTZFNA6PVV1RI6XK5Q7MA345SVYMY12LQGUIU' where id=42; -update noar ti set v3='JVUTYXYK9ZB5483JK5XKDB1JU0XEQUZ7XQYGNSGSFSFUMO713WKHNHD5TH9JP2292SJ7E7X13EJ486IG6DT6U32ROA9T17USRFQPZR0M9CY4IAOMGYU4D0R6CTT8ZZ6FXGRAUSZASUNTRL5MA5X6WPPAL5ZRTTYD1MULKQFDDC5798KGZ6YJY4434GDRES7E4LVPOB9MMXCWB9HMVQ6E21J7KGI3LTZFNA6PVV1RI6XK5Q7MA345SVYMY12LQGUIU' where id=42; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='7OUUNWZK5PQTN3W1OSZAXC6Y2KVIQD6VYIN0TNT9GM7RH746OQN2VZAD64TN7H6F0PUG4COJUFX3IIZAT2CB9G2IDY0IWPK9OW46LS7F1R7833E5UH47L48I6CJ8H6XJ9F04HW2Z3IPU8457PS311F89IT9979SXH19BOSR40ZEK0ULODTS6RURBZZAKR9RMDT26QADIY65046JHRE2GC2ZQ0J2R3H07V1RBOT170KC8Z5O2LANXZ1OY170GC19FN' where id=43; -update noar ti set v0='7OUUNWZK5PQTN3W1OSZAXC6Y2KVIQD6VYIN0TNT9GM7RH746OQN2VZAD64TN7H6F0PUG4COJUFX3IIZAT2CB9G2IDY0IWPK9OW46LS7F1R7833E5UH47L48I6CJ8H6XJ9F04HW2Z3IPU8457PS311F89IT9979SXH19BOSR40ZEK0ULODTS6RURBZZAKR9RMDT26QADIY65046JHRE2GC2ZQ0J2R3H07V1RBOT170KC8Z5O2LANXZ1OY170GC19FN' where id=43; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='K2JI1VC0EQLF3X5JCPHHRJ8VIW9V8C634IZY6414TM1HJK5X3DOSNHS2CBBUQDOR2ZB4JUUB84L6O0JPEQ3Q58FKJZZE1X67SNXTTHD0QXPJR13YJIWLGYJP85QFHB0K3Z5AZ7X0JEVDD70W9SA7SCRQ19TGZZLBZ7E4IK8QO2K7BMZ9U7104ZUPO3IM04ZB7V1TZO8Q76OJR6558NKLJDM4DVIRX0D6XGWOWP62WY4SA1YCIJEBNWLDZ8HCR2XGH' where id=43; -update noar ti set v1='K2JI1VC0EQLF3X5JCPHHRJ8VIW9V8C634IZY6414TM1HJK5X3DOSNHS2CBBUQDOR2ZB4JUUB84L6O0JPEQ3Q58FKJZZE1X67SNXTTHD0QXPJR13YJIWLGYJP85QFHB0K3Z5AZ7X0JEVDD70W9SA7SCRQ19TGZZLBZ7E4IK8QO2K7BMZ9U7104ZUPO3IM04ZB7V1TZO8Q76OJR6558NKLJDM4DVIRX0D6XGWOWP62WY4SA1YCIJEBNWLDZ8HCR2XGH' where id=43; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='FUYIRVAUM5HEEIOW5V4KO6ADS3X0LBLELXSFR2T9IS8KB859RQ4EMT7F20YUT4X49X3JZ9J6UWTAC7P90BHEZ6TZHJY89ILOO47GPMZW68ZVMGI6NX23IJN6NEI8ZY6O3QROKZB9W7TA7KTKUN2UDV6IMZC95H1DVB0FRON57CWDR7GZWS3X5OQD0D6QRAXINE3EK5OYMHQM70R9TK0ESKQVIR0VIPEJ2LLC69AR3AYYAYKDPZS65VGXPYPGTDFE0' where id=43; -update noar ti set v2='FUYIRVAUM5HEEIOW5V4KO6ADS3X0LBLELXSFR2T9IS8KB859RQ4EMT7F20YUT4X49X3JZ9J6UWTAC7P90BHEZ6TZHJY89ILOO47GPMZW68ZVMGI6NX23IJN6NEI8ZY6O3QROKZB9W7TA7KTKUN2UDV6IMZC95H1DVB0FRON57CWDR7GZWS3X5OQD0D6QRAXINE3EK5OYMHQM70R9TK0ESKQVIR0VIPEJ2LLC69AR3AYYAYKDPZS65VGXPYPGTDFE0' where id=43; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='VU2IGL24FS2BPJ36CLN7NJ5EU7M9AJI0T6SX4MGCCJ7FHG3QY60JU3P1DNSS13P9WG8EWJWMNTISDA9IXVZJ99HNAOFRWHVX1EX7Y8NE0RUAAF7SJSWSMPOZK674J2WWY2Q6YRVOKFSFEU80QF0G7CYRKBLCWGNAF38DXLNZTBS44348NETSYBDJKO3M6DU4UG2W098L2KLEKV9QNI2TN04HP9BL1FRCZ3RIQ4JAL1LPFGWOH5J6LN6MNA26P50WD' where id=43; -update noar ti set v3='VU2IGL24FS2BPJ36CLN7NJ5EU7M9AJI0T6SX4MGCCJ7FHG3QY60JU3P1DNSS13P9WG8EWJWMNTISDA9IXVZJ99HNAOFRWHVX1EX7Y8NE0RUAAF7SJSWSMPOZK674J2WWY2Q6YRVOKFSFEU80QF0G7CYRKBLCWGNAF38DXLNZTBS44348NETSYBDJKO3M6DU4UG2W098L2KLEKV9QNI2TN04HP9BL1FRCZ3RIQ4JAL1LPFGWOH5J6LN6MNA26P50WD' where id=43; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='AETR40DV7UPJPYICX0J1EV5HNXQ70XL58VMK1EN6IQA9QNDFPJU97V3HMUFVQQXZT4SKNWHV0QRWWZWO5GPOS6G0EAQW2UJ5PVJWQ4QTVQLPPW40FAL6HHB15KO7MEHKOKL1ZDMTIGZBLZ6RWE0CASLKQV2LB51OV3REA05QL2QZNAG74I9CLN5CE6RLT956GEGY1K2ELAUU2CXXCZNPISEC7RQFIJFJ3FIQ5ZA7WFFVMM2FBODM4AT2LQK1L8H3T' where id=44; -update noar ti set v0='AETR40DV7UPJPYICX0J1EV5HNXQ70XL58VMK1EN6IQA9QNDFPJU97V3HMUFVQQXZT4SKNWHV0QRWWZWO5GPOS6G0EAQW2UJ5PVJWQ4QTVQLPPW40FAL6HHB15KO7MEHKOKL1ZDMTIGZBLZ6RWE0CASLKQV2LB51OV3REA05QL2QZNAG74I9CLN5CE6RLT956GEGY1K2ELAUU2CXXCZNPISEC7RQFIJFJ3FIQ5ZA7WFFVMM2FBODM4AT2LQK1L8H3T' where id=44; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='N8D4IMZN0Y6JIFLUVVW846REB8YSBULSTTOHO8I094O8Q61BDO8KHMJHZA21QKY2UX5L3SMZDWF78RNBAE1LMP1C8JG6TO65D0PNLVPN6VFIE1UZLGY86SR4CAH5O0XP2W8XPGAJN5VODWNLS724A5MSGR914LT30XQC905W5DOLVK259B2Z3LH2X9QEHM5ULYGZPQ3ULXFZKT4X2FBLAOXO1F5H6IR12AQJKFL5QQAM9K532N8VLVBAHSFF5F237' where id=44; -update noar ti set v1='N8D4IMZN0Y6JIFLUVVW846REB8YSBULSTTOHO8I094O8Q61BDO8KHMJHZA21QKY2UX5L3SMZDWF78RNBAE1LMP1C8JG6TO65D0PNLVPN6VFIE1UZLGY86SR4CAH5O0XP2W8XPGAJN5VODWNLS724A5MSGR914LT30XQC905W5DOLVK259B2Z3LH2X9QEHM5ULYGZPQ3ULXFZKT4X2FBLAOXO1F5H6IR12AQJKFL5QQAM9K532N8VLVBAHSFF5F237' where id=44; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='4LRXA2QRHH975VT3K72RLLC16FQ6B9MB15G217WIWL2LWJ3SZ673CTGBX1L6N3DB434DKX2RNS4Y8WSV2M2GG8UUZJYG478ANZV6LKTOBCVYM17N7640GHKRLY1WFMPZPSLH3PO57SQQ12UHT0MQRV6SIUKCMU67SGDXCD08V7VJYHE5TFO71RR0O3JKZ7YL4CVOI87VBVPGZZ4E4B31N6C2FCPFU09RZ2DJX0HTB8G9RKGGM3GM9B8FU728AH94C' where id=44; -update noar ti set v2='4LRXA2QRHH975VT3K72RLLC16FQ6B9MB15G217WIWL2LWJ3SZ673CTGBX1L6N3DB434DKX2RNS4Y8WSV2M2GG8UUZJYG478ANZV6LKTOBCVYM17N7640GHKRLY1WFMPZPSLH3PO57SQQ12UHT0MQRV6SIUKCMU67SGDXCD08V7VJYHE5TFO71RR0O3JKZ7YL4CVOI87VBVPGZZ4E4B31N6C2FCPFU09RZ2DJX0HTB8G9RKGGM3GM9B8FU728AH94C' where id=44; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='0LGG3WR798F5PQT50QWBUFZASSTY5Y75BD2OB9B3XD88J4NGZ93OZ9OILUAE4LTHNGNS65MCD692KWCUD94VX0Q5AXLQS97EZTVJN3XEPEO0J00XYJFBA5KEN6HQNN2QFQIU9T0BD5YDQCKQQIM9PKNLL05FNF2S34FANSQ38WBMEMR22VN0V0O68B50T65601H6JOOGKU0P0XLMBRMK3P0F0ZDI7CN9JBP5C5ABGYQQ4PNP25AGS4T0S72VQSCGX' where id=44; -update noar ti set v3='0LGG3WR798F5PQT50QWBUFZASSTY5Y75BD2OB9B3XD88J4NGZ93OZ9OILUAE4LTHNGNS65MCD692KWCUD94VX0Q5AXLQS97EZTVJN3XEPEO0J00XYJFBA5KEN6HQNN2QFQIU9T0BD5YDQCKQQIM9PKNLL05FNF2S34FANSQ38WBMEMR22VN0V0O68B50T65601H6JOOGKU0P0XLMBRMK3P0F0ZDI7CN9JBP5C5ABGYQQ4PNP25AGS4T0S72VQSCGX' where id=44; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='0V4RR08IBP9NZ6CB8ZRV0XPFMSAPESY3D1WH00H8HCNSHO3DQF62KCMVV1NYT7ZDSO65G0ZLUPME1GKJCVFXGZQWEHEH2GE8IHFT2892EN4IPJUHAIC7MF7KI9FRT4THFC3FSJ1J1YTAC4IA7F0RQRNJ99BL3K90PWZ8OCS6MDWH99ZQP7SJA2XD9XND8F8ZWXG49ERU7JIM43ORTAH1R60S4U5CMIVYQAQE3QI254RB3EBGY1XFZVAGSGWUOZGC7' where id=45; -update noar ti set v0='0V4RR08IBP9NZ6CB8ZRV0XPFMSAPESY3D1WH00H8HCNSHO3DQF62KCMVV1NYT7ZDSO65G0ZLUPME1GKJCVFXGZQWEHEH2GE8IHFT2892EN4IPJUHAIC7MF7KI9FRT4THFC3FSJ1J1YTAC4IA7F0RQRNJ99BL3K90PWZ8OCS6MDWH99ZQP7SJA2XD9XND8F8ZWXG49ERU7JIM43ORTAH1R60S4U5CMIVYQAQE3QI254RB3EBGY1XFZVAGSGWUOZGC7' where id=45; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='3GH5ST5IIZ8ZEG2TW9871HZ0RXZFFDVRQQ6WDFZ50BXH2TEJDACQFXSFQ9ZGXR5OOBOATZ6K0XPULOK373JB5DABA3JSB5TOAPTDKP0FACI0LPGZKMRU1MGJQ0C7QKK2Z9OS879HUKZQD51B43CU7PFETVOJBVQ0RKHZT58FYT4UA4JRHVCIMJTWQ509NSC76A6L0ZXUR69Z756X3AC0JE69NX5M0NVY90ZPFKU6X9UHD1LKAPTHNTKD40KG932YI' where id=45; -update noar ti set v1='3GH5ST5IIZ8ZEG2TW9871HZ0RXZFFDVRQQ6WDFZ50BXH2TEJDACQFXSFQ9ZGXR5OOBOATZ6K0XPULOK373JB5DABA3JSB5TOAPTDKP0FACI0LPGZKMRU1MGJQ0C7QKK2Z9OS879HUKZQD51B43CU7PFETVOJBVQ0RKHZT58FYT4UA4JRHVCIMJTWQ509NSC76A6L0ZXUR69Z756X3AC0JE69NX5M0NVY90ZPFKU6X9UHD1LKAPTHNTKD40KG932YI' where id=45; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='ARR9XXHYF1CM0A7OFKOJOW1PHEY4N2TEOW7IJ3RP3Q88QUQWOKYPMYLD0LY458LIVUIVJD4EOBOGYL8WCJ43GVJW3FKV0B8M4MO1XH644Q6A39VL4HU5LF7W737AI5ITCE5PJN93MDAPB7NW49IXAI1Q3NK5XGWZ2S3TN5UUERX6IDUNA76U7XBJJ328YWKYL7H9ZZYWOOCSHPP505SO33Y0CLJTV0693THI53Y230FLQDKMKV6K7UA7W19FFB4KZ' where id=45; -update noar ti set v2='ARR9XXHYF1CM0A7OFKOJOW1PHEY4N2TEOW7IJ3RP3Q88QUQWOKYPMYLD0LY458LIVUIVJD4EOBOGYL8WCJ43GVJW3FKV0B8M4MO1XH644Q6A39VL4HU5LF7W737AI5ITCE5PJN93MDAPB7NW49IXAI1Q3NK5XGWZ2S3TN5UUERX6IDUNA76U7XBJJ328YWKYL7H9ZZYWOOCSHPP505SO33Y0CLJTV0693THI53Y230FLQDKMKV6K7UA7W19FFB4KZ' where id=45; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='0ACKNANERV1WDP5J4UA0PQLE7QE10ZYUUTMGVAQ3MHTDWKKTSTPNFVIJ5RT1I6FE6XMM7GHG6MDK710ZI5SA67K2TYDRW0KI1UEOY5CT7608OQP3KG8120PHH6CNVA792XOFROJ7HN5ZRLPV2TKFOELEVBOM5DYE64FWJK8JTKKGL42LMCP3HSKO9Z151OCM9OKO6FADFV6O3UEOXZB5UJ9DNYSZY3HT3R0CI2YTJEK9OIROFKYO1DD4OB9ECAN6O' where id=45; -update noar ti set v3='0ACKNANERV1WDP5J4UA0PQLE7QE10ZYUUTMGVAQ3MHTDWKKTSTPNFVIJ5RT1I6FE6XMM7GHG6MDK710ZI5SA67K2TYDRW0KI1UEOY5CT7608OQP3KG8120PHH6CNVA792XOFROJ7HN5ZRLPV2TKFOELEVBOM5DYE64FWJK8JTKKGL42LMCP3HSKO9Z151OCM9OKO6FADFV6O3UEOXZB5UJ9DNYSZY3HT3R0CI2YTJEK9OIROFKYO1DD4OB9ECAN6O' where id=45; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='V9RCSI89T4LGCAOXCVVVCV1R3Q52BQB96VS7C7CVH8VPB8HO3W4OOY6CJNG72KXBBNRCA5WIHAAAHGKAP0RP61LSKT67D9WIMNSQRKPHADKE4VHDUW43MTNO2DARWTZ7P15TJI2YLPKS9QDJ6UU8WCQVJQXS45B5T7NXY0AS56WBOSBFKBFKMPJM694ZA2HW2XGALIX9G0I0ROWYJ9UGMPZV9VNE3QYGG32EGI6LM8JFK5LYIOASKI5LA7C76IURP' where id=46; -update noar ti set v0='V9RCSI89T4LGCAOXCVVVCV1R3Q52BQB96VS7C7CVH8VPB8HO3W4OOY6CJNG72KXBBNRCA5WIHAAAHGKAP0RP61LSKT67D9WIMNSQRKPHADKE4VHDUW43MTNO2DARWTZ7P15TJI2YLPKS9QDJ6UU8WCQVJQXS45B5T7NXY0AS56WBOSBFKBFKMPJM694ZA2HW2XGALIX9G0I0ROWYJ9UGMPZV9VNE3QYGG32EGI6LM8JFK5LYIOASKI5LA7C76IURP' where id=46; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='RIRWWU6AFOYC1OP9V5SGC5XCBQ5Z96X9JXBHCBCJONKMJ4UK9Y4NJRUOE7Z0VUVAGH8YWSYBBJWEJZYW0486D93PBO2ZI52LA3KTWWXEMBKBWYLOJ6YG7YV2M10JQLLR5PLPWC65R61ZRY2FPONB2PKDQQZZNVCKICBXA6AUNIWSL27EKF09ZOBKH25M7B2J6QH3WZ2DDOF0UVT8X172E7PCOXYO7CMPOWPOKD0MJSUTGFR4O7HQR6D7TL6WF96UT' where id=46; -update noar ti set v1='RIRWWU6AFOYC1OP9V5SGC5XCBQ5Z96X9JXBHCBCJONKMJ4UK9Y4NJRUOE7Z0VUVAGH8YWSYBBJWEJZYW0486D93PBO2ZI52LA3KTWWXEMBKBWYLOJ6YG7YV2M10JQLLR5PLPWC65R61ZRY2FPONB2PKDQQZZNVCKICBXA6AUNIWSL27EKF09ZOBKH25M7B2J6QH3WZ2DDOF0UVT8X172E7PCOXYO7CMPOWPOKD0MJSUTGFR4O7HQR6D7TL6WF96UT' where id=46; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='DWWQTXUC74RHFT7HSUKCPVUF33J5R8AP1N21XTYV05C7XQRUFMYZEMBT1CDQSVGSEDHMCVC7BRUZT8VZ8PYO6MI2S9PFKV2JI6HEUBNGEABUAIZJ43PS6QHFSLNU6DC338CZLUB4CR9PO2SVHU2O9Q18UW08W2V13V6T4NPFAY1CW0N1Y09ZJHWQ35BWLTHO9IAKAVMCPOBX9V3P00U5A02RQCFB4LGNYLD757I3Y342ZW5PKHFYQNI3ZO6YN0TQP' where id=46; -update noar ti set v2='DWWQTXUC74RHFT7HSUKCPVUF33J5R8AP1N21XTYV05C7XQRUFMYZEMBT1CDQSVGSEDHMCVC7BRUZT8VZ8PYO6MI2S9PFKV2JI6HEUBNGEABUAIZJ43PS6QHFSLNU6DC338CZLUB4CR9PO2SVHU2O9Q18UW08W2V13V6T4NPFAY1CW0N1Y09ZJHWQ35BWLTHO9IAKAVMCPOBX9V3P00U5A02RQCFB4LGNYLD757I3Y342ZW5PKHFYQNI3ZO6YN0TQP' where id=46; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='HH0Z1A2QNYU5N7MB90DDF33H3OFH3E1ORUTP8L87HRU7NYHGAIONAD5K6W8X8HVYAU11MRXUHPPCJDH9N5EXG1WA1KEMU55Y9AXE895OCXY5GSM4I72JXYGNB26CNZ7VAVA8DELE5A5E63PM6DYIEL04JUFRZ22YUUZ5Y0W2ZZYI3YJ4PHRY9S59FGGRO1PKZ8C596RD0AUOG7UROW9AZLEZZ6EXBOP1Q1IQHU59I9B6IUSTXQH4U461GD5UUA245' where id=46; -update noar ti set v3='HH0Z1A2QNYU5N7MB90DDF33H3OFH3E1ORUTP8L87HRU7NYHGAIONAD5K6W8X8HVYAU11MRXUHPPCJDH9N5EXG1WA1KEMU55Y9AXE895OCXY5GSM4I72JXYGNB26CNZ7VAVA8DELE5A5E63PM6DYIEL04JUFRZ22YUUZ5Y0W2ZZYI3YJ4PHRY9S59FGGRO1PKZ8C596RD0AUOG7UROW9AZLEZZ6EXBOP1Q1IQHU59I9B6IUSTXQH4U461GD5UUA245' where id=46; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='MEWSQH4NSS9ROL1BIGRPDRTL18W6HKGDZBNEUFSWHHYE5ZTRIBQND43A7DMHSTCU24450378JK3D7GM8R0JUAKU2NX7KY1XADQKXACH3LGY8SJIEL69FBLY488BYWLGYYIXBGWYSYGD2KTDEQ86121C3GL0OL734J978NSGKQUM5KTEKE6RQTPPPUWFPMWS8IPU5QVIIRLD21XRIRA4RIECJ65PWRWP2JO7O57TQI8ZRHZGPRAMJKRTU19CB3WSVZ' where id=47; -update noar ti set v0='MEWSQH4NSS9ROL1BIGRPDRTL18W6HKGDZBNEUFSWHHYE5ZTRIBQND43A7DMHSTCU24450378JK3D7GM8R0JUAKU2NX7KY1XADQKXACH3LGY8SJIEL69FBLY488BYWLGYYIXBGWYSYGD2KTDEQ86121C3GL0OL734J978NSGKQUM5KTEKE6RQTPPPUWFPMWS8IPU5QVIIRLD21XRIRA4RIECJ65PWRWP2JO7O57TQI8ZRHZGPRAMJKRTU19CB3WSVZ' where id=47; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='07U6EXGWSBP85X4EGFAGDCFXMJ2BN7TJC6F7MTRYVAB0R7SFOGCPHBYZ81649BUJGS4LV54RAJQQVVKJ13W25Y2SXN4AEEOYPHYZ5MSJ173RDG45CMXLTNBVWTO0GSNJEB2TVYXTNCIXVAQ1N4LCZZOLN6SO7R7B5WVNUOVOS3WJOIJOGIFEXRBV77MWO9NISOG51D4OVPFTBS7WYU4BFX3SFG3VXVC5F2PMRUFLALH0QX8E0A8PPB422PKCV6JV2' where id=47; -update noar ti set v1='07U6EXGWSBP85X4EGFAGDCFXMJ2BN7TJC6F7MTRYVAB0R7SFOGCPHBYZ81649BUJGS4LV54RAJQQVVKJ13W25Y2SXN4AEEOYPHYZ5MSJ173RDG45CMXLTNBVWTO0GSNJEB2TVYXTNCIXVAQ1N4LCZZOLN6SO7R7B5WVNUOVOS3WJOIJOGIFEXRBV77MWO9NISOG51D4OVPFTBS7WYU4BFX3SFG3VXVC5F2PMRUFLALH0QX8E0A8PPB422PKCV6JV2' where id=47; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='4ZE33VS11INXIY5RQ68BSV4CU3WSJOYBL4S9219JN31YOIB9XLCCN5YI4LXWKEES3AXPM28AN5454DRD1NUVXUNEHSO06J74L5GQE15ZS72KV6R2YN5TR66NN87QZOX5RW2CD9EAJQB55JYWX7L3H50WYUONVJ50815YHJB1F6GQJ0QLBRN4VVY8IOQ0LMTT2GA1EACP6QJGJ5959ZL7DE5BH903Q1O2ZT74NWLF8AFS9UKV3416XK4TVTEA1XWVD' where id=47; -update noar ti set v2='4ZE33VS11INXIY5RQ68BSV4CU3WSJOYBL4S9219JN31YOIB9XLCCN5YI4LXWKEES3AXPM28AN5454DRD1NUVXUNEHSO06J74L5GQE15ZS72KV6R2YN5TR66NN87QZOX5RW2CD9EAJQB55JYWX7L3H50WYUONVJ50815YHJB1F6GQJ0QLBRN4VVY8IOQ0LMTT2GA1EACP6QJGJ5959ZL7DE5BH903Q1O2ZT74NWLF8AFS9UKV3416XK4TVTEA1XWVD' where id=47; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='R1SY7FBXRNS2JDRH2WEJ5JR7XTLZHZ0OZLYK3WZFHDA0RR189W6U8S7RMJFW9441IVJ7900TNEPS95KO9RNYQZH00BTYPW0PDEO4RCKF8PURHU0QQIUFRF7NIU69H5RCSLRRWGW7FJFSSNEK64J1Y5YTSO6L2P3EOG7OLRTRA8HS9QERT3448KV286YOKDSWZWIG0QAO1BYDX4FT4SAT9WAHN25CLFTCTTGDV6CCS31UC1X3EDQTEJB5C5PN0BYCD' where id=47; -update noar ti set v3='R1SY7FBXRNS2JDRH2WEJ5JR7XTLZHZ0OZLYK3WZFHDA0RR189W6U8S7RMJFW9441IVJ7900TNEPS95KO9RNYQZH00BTYPW0PDEO4RCKF8PURHU0QQIUFRF7NIU69H5RCSLRRWGW7FJFSSNEK64J1Y5YTSO6L2P3EOG7OLRTRA8HS9QERT3448KV286YOKDSWZWIG0QAO1BYDX4FT4SAT9WAHN25CLFTCTTGDV6CCS31UC1X3EDQTEJB5C5PN0BYCD' where id=47; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='Z3NNEIH7FOIR6GRI7DE1JI3CWVLNABVWMYNV80C09E7LNKU8MIOSXWZVX8XMV3B6VVA38GFNP3RPT9BLIJ4D7LEY2QCAQU8LOSDR9MAXBUGI8YQ2WC4KMLYDN4J5SD4JLFZLZ627HYD0XNB9ZLS4UT3TM1BRVC5U31Z53JY9SPU0YC3EL67C4EUOBWIB6BLA1L9BLGEHB8WH0T5F99S40DMEOMH1DYDTIIVHLS0CX427XJ0I5JAZFNBA52PRX0CDQ' where id=48; -update noar ti set v0='Z3NNEIH7FOIR6GRI7DE1JI3CWVLNABVWMYNV80C09E7LNKU8MIOSXWZVX8XMV3B6VVA38GFNP3RPT9BLIJ4D7LEY2QCAQU8LOSDR9MAXBUGI8YQ2WC4KMLYDN4J5SD4JLFZLZ627HYD0XNB9ZLS4UT3TM1BRVC5U31Z53JY9SPU0YC3EL67C4EUOBWIB6BLA1L9BLGEHB8WH0T5F99S40DMEOMH1DYDTIIVHLS0CX427XJ0I5JAZFNBA52PRX0CDQ' where id=48; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='UQETTULM3ZC910CFODB2IJHTPDKJ677QZXJ6S5QY3J6A6QSHU43P5ASNC6BVAY7QPSW0QYFMAR5N6Q5JK0ZLQQF3C4ZJG3ZYAIX8DWVE6ET8LID4MRW5SBNGHH80EH73QRI2EOZ7R9F0MQRAKCXI20VF5II3CRDN17UQ6UA503ZSY817OTDY1JYHUTHOJJR0F4F3TVVWK5VTN1DTCOB9T7AE1WUN81SNP5STVNR5Y9F8H1TQQFEYGAH1ZALDL5AFU' where id=48; -update noar ti set v1='UQETTULM3ZC910CFODB2IJHTPDKJ677QZXJ6S5QY3J6A6QSHU43P5ASNC6BVAY7QPSW0QYFMAR5N6Q5JK0ZLQQF3C4ZJG3ZYAIX8DWVE6ET8LID4MRW5SBNGHH80EH73QRI2EOZ7R9F0MQRAKCXI20VF5II3CRDN17UQ6UA503ZSY817OTDY1JYHUTHOJJR0F4F3TVVWK5VTN1DTCOB9T7AE1WUN81SNP5STVNR5Y9F8H1TQQFEYGAH1ZALDL5AFU' where id=48; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='XO6WHYZJDUY15PL8GCCSK692T3BKD94YOUTCB5FWGQG0ICUHR4ZQFQ8NB2ZCPKTSYAPBOW9RHG1WHUAVY8IFMC9SNWMN8MGTWJ4Z1O6VX4CELGFE1A5QU5KM4HIDEP3C8CUM524UM54JZ6DLFRWR6O8GOR9TU5WXYFKQWWJ6AWDHRKW1AMRDA4E0VT2R1IAZ26UNM93GY760XKUE9FIPARYRK84FOYQ5GZ6P849GGQL4EZ5ZRQQU40B7UW0CSA88T' where id=48; -update noar ti set v2='XO6WHYZJDUY15PL8GCCSK692T3BKD94YOUTCB5FWGQG0ICUHR4ZQFQ8NB2ZCPKTSYAPBOW9RHG1WHUAVY8IFMC9SNWMN8MGTWJ4Z1O6VX4CELGFE1A5QU5KM4HIDEP3C8CUM524UM54JZ6DLFRWR6O8GOR9TU5WXYFKQWWJ6AWDHRKW1AMRDA4E0VT2R1IAZ26UNM93GY760XKUE9FIPARYRK84FOYQ5GZ6P849GGQL4EZ5ZRQQU40B7UW0CSA88T' where id=48; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='KGKROJSQXWLCGA578DR5ZF7Z6XNFD5JZFIN25KZUXMXCQRY2F47KE4ME724EU1ACF0W2LW6PU07AP5VAVKHSI5WJK1PNY91EM37FWDJSV6B7605PCTG67Y1ZWV2ESISM96W94VP6SD321K6XBCVO1ZFHW5SQBYW09Q5AU7N9RMA68Q0MF5YNLHYT9QLN93SCTQ3Y34T8778C1IH27UEE39Z06E7J0LJVRIXJ8S578W1VV6HXWCFGDDREWOTDOJMYU' where id=48; -update noar ti set v3='KGKROJSQXWLCGA578DR5ZF7Z6XNFD5JZFIN25KZUXMXCQRY2F47KE4ME724EU1ACF0W2LW6PU07AP5VAVKHSI5WJK1PNY91EM37FWDJSV6B7605PCTG67Y1ZWV2ESISM96W94VP6SD321K6XBCVO1ZFHW5SQBYW09Q5AU7N9RMA68Q0MF5YNLHYT9QLN93SCTQ3Y34T8778C1IH27UEE39Z06E7J0LJVRIXJ8S578W1VV6HXWCFGDDREWOTDOJMYU' where id=48; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='2C0TDDNSU7F74W7DMOWTC5XOZQXLJ92FXHA2Z0RG6S9TLQ951G3DOXGXFYXBNZF6BS4KMKUPTEOB7OQDXJVAA3SQN4P6Z60GPUV30RM293QF5KGQC2QZG1M4CX5UVI5KTM665SIV3JCCBGO0AUC6MTKFET3NCKU5VZEZ3NQS0J55IG3PAA8HJIQNIHIS02JZW2J6RFBLBCIXORLAR8K3NGEROL7XP6SM63TV92W62X0976PZKBM6P52WYWQOTD79V' where id=49; -update noar ti set v0='2C0TDDNSU7F74W7DMOWTC5XOZQXLJ92FXHA2Z0RG6S9TLQ951G3DOXGXFYXBNZF6BS4KMKUPTEOB7OQDXJVAA3SQN4P6Z60GPUV30RM293QF5KGQC2QZG1M4CX5UVI5KTM665SIV3JCCBGO0AUC6MTKFET3NCKU5VZEZ3NQS0J55IG3PAA8HJIQNIHIS02JZW2J6RFBLBCIXORLAR8K3NGEROL7XP6SM63TV92W62X0976PZKBM6P52WYWQOTD79V' where id=49; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='HDZ5SU7YMR83FBT3WKOA5LUPSTW7V1XDWU4J6Y3RS8PJOY3V13AR9RXMPE4N507KEPWINZFRF9SMDKMZREGOL4F00LK058YWKGGCHVXN3046CBI4VD47MOD394R1A1LIDRW6G4S2X2XDEXB05IMCCQONA4KX6D0X47FV9OK9B1BSW841NF90A2ENVJ1V4AUE0SCLYGDMM1FSEW6VFAN2UE0ZFBTPBMMOAT26I027KHDFG9WSPIY004V16B1L5GZXN' where id=49; -update noar ti set v1='HDZ5SU7YMR83FBT3WKOA5LUPSTW7V1XDWU4J6Y3RS8PJOY3V13AR9RXMPE4N507KEPWINZFRF9SMDKMZREGOL4F00LK058YWKGGCHVXN3046CBI4VD47MOD394R1A1LIDRW6G4S2X2XDEXB05IMCCQONA4KX6D0X47FV9OK9B1BSW841NF90A2ENVJ1V4AUE0SCLYGDMM1FSEW6VFAN2UE0ZFBTPBMMOAT26I027KHDFG9WSPIY004V16B1L5GZXN' where id=49; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='0Y5VN6FHUGBM5YPMP7CT01J0W65C56RVJRSO43SVPIF2NVATZRMXKLS4AR56TOFK475SY5GK1Y44ABNA84UXAGS6LGEWYUTNBCHQ3J3S4S5YG84GWFJXW522BDINVHZBFPTQBLUYZKDPEQRXXTM3J83E2A2CVL056GK2GF3CHF85VTPW67VRG2A7M6ZPAKMA7WITDRU6Q4W5J6179J1ZOMT10EQHYHMHKCS8MHR70WJKFRGL8D68TYV1GXN6KPIJ1' where id=49; -update noar ti set v2='0Y5VN6FHUGBM5YPMP7CT01J0W65C56RVJRSO43SVPIF2NVATZRMXKLS4AR56TOFK475SY5GK1Y44ABNA84UXAGS6LGEWYUTNBCHQ3J3S4S5YG84GWFJXW522BDINVHZBFPTQBLUYZKDPEQRXXTM3J83E2A2CVL056GK2GF3CHF85VTPW67VRG2A7M6ZPAKMA7WITDRU6Q4W5J6179J1ZOMT10EQHYHMHKCS8MHR70WJKFRGL8D68TYV1GXN6KPIJ1' where id=49; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='JCKTSLW5IWQXWY843YYA3XVS7YAYOLUGO3TAA6TU80Z2R4X8X62IDZE8OV5UWN2X0223GQ6KJI2KVL6V7QCFHCJI2BWIA2RAPBROMVEV7DP6QHVRHVRWY40HU5KEYRDDMQNGMJTOHXS92NLRAXUEIWT5VB1PD6C2UVOMZOA6IDYP5PJE5V4HLPFGNHKSTBOQ9MA7A3FXC6TM3GEYAOO8LWDW43NXQX0FHCFTH9313Z7IXHNL5IZZVPSILVJ4FG2XI' where id=49; -update noar ti set v3='JCKTSLW5IWQXWY843YYA3XVS7YAYOLUGO3TAA6TU80Z2R4X8X62IDZE8OV5UWN2X0223GQ6KJI2KVL6V7QCFHCJI2BWIA2RAPBROMVEV7DP6QHVRHVRWY40HU5KEYRDDMQNGMJTOHXS92NLRAXUEIWT5VB1PD6C2UVOMZOA6IDYP5PJE5V4HLPFGNHKSTBOQ9MA7A3FXC6TM3GEYAOO8LWDW43NXQX0FHCFTH9313Z7IXHNL5IZZVPSILVJ4FG2XI' where id=49; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='B3HHCFWDMM36S7X9QJJKZ8NDSEGGEXOYOCOGD3BHTZY2TQE097IZUTOK1GI94G5O0C8Y7PRRYDHH0M1P8BLUVKJ6CANZ5W8MB9O8UCEYM0GHJ7E87ILTE7DJMH75O0YZ4MCL4ENVL9H50EIRLM9TRGUKDI1PJ9VP7212FE4R4HRBALY49DK80WRISGR45J3RHDP4ALOANMF1W8613CVLEHOJP17ZFNR4F3D7PZYPGHYPBTOWFGNY5F0APADJJC03U' where id=50; -update noar ti set v0='B3HHCFWDMM36S7X9QJJKZ8NDSEGGEXOYOCOGD3BHTZY2TQE097IZUTOK1GI94G5O0C8Y7PRRYDHH0M1P8BLUVKJ6CANZ5W8MB9O8UCEYM0GHJ7E87ILTE7DJMH75O0YZ4MCL4ENVL9H50EIRLM9TRGUKDI1PJ9VP7212FE4R4HRBALY49DK80WRISGR45J3RHDP4ALOANMF1W8613CVLEHOJP17ZFNR4F3D7PZYPGHYPBTOWFGNY5F0APADJJC03U' where id=50; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='ZSXVHFTF1ZYI8DN9M2RF2FLYQH0IPG3PZMXRYJCZ3P5MPT5I7SH5SJYE03PCP9U1NGYGD645O432EF8Q2K0O3U3LCRPWO7VWUMFLIQFF4Y6ZOLMZCGNZJHE0UP7G2T49ZHCADTGM726B1RS9LAQOPT2PVWMPA1Q2D8SNS2LQCAE6Q0PZ3HMKGZPTBUPH4TA5Y14W76LX2663FV8D4YN93IESPCOND3YZAD43QA1YD4TQEWXV9A3SOZE4V240AI0TE' where id=50; -update noar ti set v1='ZSXVHFTF1ZYI8DN9M2RF2FLYQH0IPG3PZMXRYJCZ3P5MPT5I7SH5SJYE03PCP9U1NGYGD645O432EF8Q2K0O3U3LCRPWO7VWUMFLIQFF4Y6ZOLMZCGNZJHE0UP7G2T49ZHCADTGM726B1RS9LAQOPT2PVWMPA1Q2D8SNS2LQCAE6Q0PZ3HMKGZPTBUPH4TA5Y14W76LX2663FV8D4YN93IESPCOND3YZAD43QA1YD4TQEWXV9A3SOZE4V240AI0TE' where id=50; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='COPC5PZKQW75H1JB2V99Q0EHRDMNABBZQJQXMV67XJAPZAAQY4UT3DDXS74SFLOOBPU88MCA3P6HEEKMZ4Y21SA37HK454OLCSWA2SSY0POBLL7CBLRP020YPTIBLZSYV8FK7G1DENNVIQ1KNIUMK7PQ5V4FPUAQMWTB5A0JQMB64K9U3ASGYQR3WXKVTF3PMCAAMDU5UBLO62YGTD3VI5CZQGCAF9W8O0RXXNEKQP30HJDYJHLE20L92L8L2Y5KQ' where id=50; -update noar ti set v2='COPC5PZKQW75H1JB2V99Q0EHRDMNABBZQJQXMV67XJAPZAAQY4UT3DDXS74SFLOOBPU88MCA3P6HEEKMZ4Y21SA37HK454OLCSWA2SSY0POBLL7CBLRP020YPTIBLZSYV8FK7G1DENNVIQ1KNIUMK7PQ5V4FPUAQMWTB5A0JQMB64K9U3ASGYQR3WXKVTF3PMCAAMDU5UBLO62YGTD3VI5CZQGCAF9W8O0RXXNEKQP30HJDYJHLE20L92L8L2Y5KQ' where id=50; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='2Y4IEE44CZIVJGG3BGLHB716UH5O4VXM68VM0FH98H3QSGAI8O2KBX0ETV3H2GGI2PD4Z07MHPCONPUBPSW3YBGJWPNGFDXB37LFR42K50JC7U77P0RAC1TE178LD01S0FRFQ5JSKW92H56CO0I90SLALKABB0ABWCK28UF4Q2N7UIFIQXUMNQ88B5CJBRC4SKWX8B394TR19HTNHRCEUWMLIJCPBMD03T18API3U3H4Y38DY4HH40EVVXDRC6AEF' where id=50; -update noar ti set v3='2Y4IEE44CZIVJGG3BGLHB716UH5O4VXM68VM0FH98H3QSGAI8O2KBX0ETV3H2GGI2PD4Z07MHPCONPUBPSW3YBGJWPNGFDXB37LFR42K50JC7U77P0RAC1TE178LD01S0FRFQ5JSKW92H56CO0I90SLALKABB0ABWCK28UF4Q2N7UIFIQXUMNQ88B5CJBRC4SKWX8B394TR19HTNHRCEUWMLIJCPBMD03T18API3U3H4Y38DY4HH40EVVXDRC6AEF' where id=50; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='9KAHWAZ10DNAUVX8VNCBF3YLYN9PX46Z5G90PYYNZLGZCPQWJIARY2NCSHOTWR3I6NLGMQHVPCOKSC3AFORY2GCJSOIAVUOP2N6RQSX42S6871K6M3O4QTKLMLQNMLJ4DOQWYRIRAI1RV021FVCT0YP79ILOEWQCIDQVBDP7MMCZIIGOFBQU87QC8YUZIZMN1STRRC8ZQULPVG3PA4M0IPCM198HH95X2UEIGL671YCYIJPUIBYFBK6LODY8RO9EE' where id=51; -update noar ti set v0='9KAHWAZ10DNAUVX8VNCBF3YLYN9PX46Z5G90PYYNZLGZCPQWJIARY2NCSHOTWR3I6NLGMQHVPCOKSC3AFORY2GCJSOIAVUOP2N6RQSX42S6871K6M3O4QTKLMLQNMLJ4DOQWYRIRAI1RV021FVCT0YP79ILOEWQCIDQVBDP7MMCZIIGOFBQU87QC8YUZIZMN1STRRC8ZQULPVG3PA4M0IPCM198HH95X2UEIGL671YCYIJPUIBYFBK6LODY8RO9EE' where id=51; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='JRRFBWT3MDK1VJR7GS0Y6EPQ755EVK4V5OOCXKKO4OKTAD2GFM0GFCYR66Z753H15CK2K4Q708CXAADGRV5QFBI5X96COO90GI0IIXKO01ADVJYJFC2AHXZSPE0IJAPYATBPL4XUBYLYTU13MACVU3XBUP6KTQ51BLU5DZJCTK9PR46AU4AU7LRNAP5AZF0YCGHV7ACK90XEO6H8KOYOFYPCNF065RUGM3JWCVC5LUDPJDSGA4I8SZ2I48IRX9NQK' where id=51; -update noar ti set v1='JRRFBWT3MDK1VJR7GS0Y6EPQ755EVK4V5OOCXKKO4OKTAD2GFM0GFCYR66Z753H15CK2K4Q708CXAADGRV5QFBI5X96COO90GI0IIXKO01ADVJYJFC2AHXZSPE0IJAPYATBPL4XUBYLYTU13MACVU3XBUP6KTQ51BLU5DZJCTK9PR46AU4AU7LRNAP5AZF0YCGHV7ACK90XEO6H8KOYOFYPCNF065RUGM3JWCVC5LUDPJDSGA4I8SZ2I48IRX9NQK' where id=51; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='DT8A7KD7QYXD1I317W44YGUSBL22DITUVKYKNT571EHPOW96XW6LTS3JRVOHW3Q0VLF8XEY6KLV05G6K2YLZEW0TMVBH5W02384Y17V1MILYCAXZMF5HGRBPUQPNE90S85AM6M0HNHLQKP9I0OJJC3CJ18S29BD1CMJXHF1SX119EN8T3RDXCI7T77EP655KYQJ5C8OA3V20FDY01UIBYB4KR7NZ2W60ZNY00AADOHIAN0CNHT8RXUI586Z65LOPZ' where id=51; -update noar ti set v2='DT8A7KD7QYXD1I317W44YGUSBL22DITUVKYKNT571EHPOW96XW6LTS3JRVOHW3Q0VLF8XEY6KLV05G6K2YLZEW0TMVBH5W02384Y17V1MILYCAXZMF5HGRBPUQPNE90S85AM6M0HNHLQKP9I0OJJC3CJ18S29BD1CMJXHF1SX119EN8T3RDXCI7T77EP655KYQJ5C8OA3V20FDY01UIBYB4KR7NZ2W60ZNY00AADOHIAN0CNHT8RXUI586Z65LOPZ' where id=51; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='SNHO586PPIZR0DG5HB9LTH3OAJDR144L4XU36B2AXRPRMT962ICONI83IM9DA09HAI00SXIN2D05X8Y3PZEDD6QWKJAT3NEYGCPYBMSW6A71BNL0VU0PP18FYPS8SDP2RYQHNO21XG79X7X8O9JO739K701LARL9GCV08H02WDC712I4I6N579H8J3BLB99N1P7WXNSGMNGYIAL5GJSY73A27CGDA7335YCZWGNV7NVF6SNTD3Q2ESRQ3Z46FQ3PY' where id=51; -update noar ti set v3='SNHO586PPIZR0DG5HB9LTH3OAJDR144L4XU36B2AXRPRMT962ICONI83IM9DA09HAI00SXIN2D05X8Y3PZEDD6QWKJAT3NEYGCPYBMSW6A71BNL0VU0PP18FYPS8SDP2RYQHNO21XG79X7X8O9JO739K701LARL9GCV08H02WDC712I4I6N579H8J3BLB99N1P7WXNSGMNGYIAL5GJSY73A27CGDA7335YCZWGNV7NVF6SNTD3Q2ESRQ3Z46FQ3PY' where id=51; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='YJVAP3M8GHRF00KTP134RRE07NBYCXP67FYM7F2RQBAUV5LZAESBVU6ANEG7XZ9OD7SGDHLR6U94TIQWHLCXPFTNERL3RSXH49L2H3RXCRBYXI4TIM98QHEFHXW1Y3HNEANNV5D9TPTTENGEBMNRO84Z4SR3K7CMJI0MKDVLP7MH9EC3YKYZDG0S1RPMCDS1Y25B5B1UN84K7RAU01X6T1S3S30KP86C3WPU1QZF7K46G1NYXOVI6RF1ZPFFVNA85' where id=52; -update noar ti set v0='YJVAP3M8GHRF00KTP134RRE07NBYCXP67FYM7F2RQBAUV5LZAESBVU6ANEG7XZ9OD7SGDHLR6U94TIQWHLCXPFTNERL3RSXH49L2H3RXCRBYXI4TIM98QHEFHXW1Y3HNEANNV5D9TPTTENGEBMNRO84Z4SR3K7CMJI0MKDVLP7MH9EC3YKYZDG0S1RPMCDS1Y25B5B1UN84K7RAU01X6T1S3S30KP86C3WPU1QZF7K46G1NYXOVI6RF1ZPFFVNA85' where id=52; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='7PWERZDMXS5W3D0RULJNJUIL3O480IR9MIYLGWXHNIYIU9HP38MUP1DA9D6NSEHZ2XL0RTIUI0EEAQV56KOHSAMJY8KYBV52CBO2HLRIQZQYHZZ4TBFHQH23RNMXEIFGXR2KVYU4QFQX5WRIOE1X40TOK58YVP8RU48HR8088RE5J27Y2GRCAKP7OE6DJFCJMHGSRNAY47LYE8FY4EWNI2UK0OEDMAV71EPOU043URXT6TLOC0G6LKMHLHZ285MLJ' where id=52; -update noar ti set v1='7PWERZDMXS5W3D0RULJNJUIL3O480IR9MIYLGWXHNIYIU9HP38MUP1DA9D6NSEHZ2XL0RTIUI0EEAQV56KOHSAMJY8KYBV52CBO2HLRIQZQYHZZ4TBFHQH23RNMXEIFGXR2KVYU4QFQX5WRIOE1X40TOK58YVP8RU48HR8088RE5J27Y2GRCAKP7OE6DJFCJMHGSRNAY47LYE8FY4EWNI2UK0OEDMAV71EPOU043URXT6TLOC0G6LKMHLHZ285MLJ' where id=52; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='ABTN68797XZX1XLT9UYN6TW14OVIYIMEUOTGE0CL2FD0D65APM7UZN4CDF6Q4JKLWGUU2DWKMKTUKZSXIH3J3XXV1YNDMC8C9HAYQ8118P9FRH30I430WD8AUQXM6MSI6SGDFT0CSAHWVPEZL1PEIE453GF38116NVPVB9YMYOOYGE3ZPUP5H4MZ9G3JZKEGPBGJ2HD26M18SPOBNJTEUSFZHRCCACIE3BD18BLOMVB4MJ2MKVSIWBO1A26T69X1P' where id=52; -update noar ti set v2='ABTN68797XZX1XLT9UYN6TW14OVIYIMEUOTGE0CL2FD0D65APM7UZN4CDF6Q4JKLWGUU2DWKMKTUKZSXIH3J3XXV1YNDMC8C9HAYQ8118P9FRH30I430WD8AUQXM6MSI6SGDFT0CSAHWVPEZL1PEIE453GF38116NVPVB9YMYOOYGE3ZPUP5H4MZ9G3JZKEGPBGJ2HD26M18SPOBNJTEUSFZHRCCACIE3BD18BLOMVB4MJ2MKVSIWBO1A26T69X1P' where id=52; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='BME8T6JHZK2ADGLZNTMFMJVCKJM18KRG5LY1VDP1AX324XAWOKZZ1L0HPYLHVEK3U6VZWPEBZRHOLBXQHKIL2275L8I65EIZDNTWFSVHXEM8AUDDFVLZGYL8D7TQ4ANRHBXYMQ02JO87CEC8R4HIXUGSPK3HLWHEM3VDGF5BBKCUJXE5MGNOCM5Z6111C8TGS937QI7FLWOE13MX0U718H2VEIAMPCYD9UIB83RPRBOQ4MSE81G88OD5PB4USJQTT' where id=52; -update noar ti set v3='BME8T6JHZK2ADGLZNTMFMJVCKJM18KRG5LY1VDP1AX324XAWOKZZ1L0HPYLHVEK3U6VZWPEBZRHOLBXQHKIL2275L8I65EIZDNTWFSVHXEM8AUDDFVLZGYL8D7TQ4ANRHBXYMQ02JO87CEC8R4HIXUGSPK3HLWHEM3VDGF5BBKCUJXE5MGNOCM5Z6111C8TGS937QI7FLWOE13MX0U718H2VEIAMPCYD9UIB83RPRBOQ4MSE81G88OD5PB4USJQTT' where id=52; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='VVDXG9N95ESO8IZRXAB7BA7WWBVNQW2ZJ65ISS288DK86W5ZL00OLY8T643JXCH9W3AL4H0RP44RH3LVLKROYRI0NYM27I0Q50IJVBNHJBDZN44DU53NZ0200DTHY481FVC4X5S1PTY6KVTJ7J222HBBNHI5MKROU0MPHVS0RBEP934UBIGS9MZVXMCKQRTDR6MI93B699XQGIHY40TIPI3L21QTI0873ZVZGWNEEY7P8T36M1F2VVPX6HS5SWM5O' where id=53; -update noar ti set v0='VVDXG9N95ESO8IZRXAB7BA7WWBVNQW2ZJ65ISS288DK86W5ZL00OLY8T643JXCH9W3AL4H0RP44RH3LVLKROYRI0NYM27I0Q50IJVBNHJBDZN44DU53NZ0200DTHY481FVC4X5S1PTY6KVTJ7J222HBBNHI5MKROU0MPHVS0RBEP934UBIGS9MZVXMCKQRTDR6MI93B699XQGIHY40TIPI3L21QTI0873ZVZGWNEEY7P8T36M1F2VVPX6HS5SWM5O' where id=53; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='QHS4I64K5EI379CFKU6BR5HOCUT4XAY72IRWTQM18YK6CPKGF3ZEUQQZ9TDB4R2BFXSG6SM8BHSQ6AKMN87UZ7L6AF8TCDG5EOWIZYHFVHYR7B4FAW9MVB4QWC354YLE1RV0YUZ6RZI5HHJW9JQXP9R0IOPD9GL9O4F7ANDCN2EHIQATI2UJ89IBNMZRJG2T56KNTL0J87BHL8OA5KXCXK9G69JDZVT8GIE2CS4LT352VKMTLKI5BR8X8C33MCHL3' where id=53; -update noar ti set v1='QHS4I64K5EI379CFKU6BR5HOCUT4XAY72IRWTQM18YK6CPKGF3ZEUQQZ9TDB4R2BFXSG6SM8BHSQ6AKMN87UZ7L6AF8TCDG5EOWIZYHFVHYR7B4FAW9MVB4QWC354YLE1RV0YUZ6RZI5HHJW9JQXP9R0IOPD9GL9O4F7ANDCN2EHIQATI2UJ89IBNMZRJG2T56KNTL0J87BHL8OA5KXCXK9G69JDZVT8GIE2CS4LT352VKMTLKI5BR8X8C33MCHL3' where id=53; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='69PMN7LPEUKCD1F98FHR3VNX0TEGV0Q1TNNR16NWKW3ODHO4OSIH7CBWO0N8N45F5SVVC3COIJ43P9W9CO67V9RK2256JGUXMGL4HHLZ9C6QLME8IJYV2OB14RHOUC3773EI87QKVK58JZNAS65GELEWQFU93EP1LCVBPXI7CQL94FCHEKQ060BD0H8CO4BRDWY3KZVIRNAB8Q28KLWDH8R34NSUPN4WCOJ46DWZBXUT93L3A58J79314YWZM9RR9' where id=53; -update noar ti set v2='69PMN7LPEUKCD1F98FHR3VNX0TEGV0Q1TNNR16NWKW3ODHO4OSIH7CBWO0N8N45F5SVVC3COIJ43P9W9CO67V9RK2256JGUXMGL4HHLZ9C6QLME8IJYV2OB14RHOUC3773EI87QKVK58JZNAS65GELEWQFU93EP1LCVBPXI7CQL94FCHEKQ060BD0H8CO4BRDWY3KZVIRNAB8Q28KLWDH8R34NSUPN4WCOJ46DWZBXUT93L3A58J79314YWZM9RR9' where id=53; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='WQXSFYOTDQVPELU3QL0ROQ6Z0ES0DL34NV77V594W4MQJYUR1HWC102D4A3UZW6HFY6JFY2TU9KZ3PUHPVO2QHM50OD4OVRHSGF323TMPPBDHQMSIFHPULH6LW99FDD7V1XEHSRKUL7YNGEH6RUPE97P3L9883Y6Z98APJ6KJPVQNLESADXC79LT5W82M3ALIMMIF3ELDIE8UNMJA6GWLXH17FIH8R26N842SD2W6CLN2LIG550Y5PMO2JFC0DF3B' where id=53; -update noar ti set v3='WQXSFYOTDQVPELU3QL0ROQ6Z0ES0DL34NV77V594W4MQJYUR1HWC102D4A3UZW6HFY6JFY2TU9KZ3PUHPVO2QHM50OD4OVRHSGF323TMPPBDHQMSIFHPULH6LW99FDD7V1XEHSRKUL7YNGEH6RUPE97P3L9883Y6Z98APJ6KJPVQNLESADXC79LT5W82M3ALIMMIF3ELDIE8UNMJA6GWLXH17FIH8R26N842SD2W6CLN2LIG550Y5PMO2JFC0DF3B' where id=53; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='K451G7CBWQ1GDYNQ2IJVP4WCF11S8GN9SWKENYCC1D7693YTX6GUAZC47G4AGAT6BFOKT478NF86E5O4O68XEB11Y43CDZPK8AKQJKDUO7CW81D3CHBI7KFLVUY3PU3RLGXUR3HIM1SEVZQEWQI2I4RNGV3CCFYSR0NT2I2WPE5Z4EHT756BNSOI1ZCHGE92XX7MURLZURPF3OAKHDVKGZTBBN0BEKHIGPATVYBX2L7DR5Z6YYOTP1640E8BWT7CK' where id=54; -update noar ti set v0='K451G7CBWQ1GDYNQ2IJVP4WCF11S8GN9SWKENYCC1D7693YTX6GUAZC47G4AGAT6BFOKT478NF86E5O4O68XEB11Y43CDZPK8AKQJKDUO7CW81D3CHBI7KFLVUY3PU3RLGXUR3HIM1SEVZQEWQI2I4RNGV3CCFYSR0NT2I2WPE5Z4EHT756BNSOI1ZCHGE92XX7MURLZURPF3OAKHDVKGZTBBN0BEKHIGPATVYBX2L7DR5Z6YYOTP1640E8BWT7CK' where id=54; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='IMPDJLFC0K0EHX90WZNJMZ1HSANIUK2M2EV1ODSS7CDICR8MXIHIP49A2TCJA95TN7YSKXZZPCS1GCG69QUU80F650W6SZ2T7L4XZ6ZZJE3MZYEENSU6B3APHR44S5XCYRV5GWOEHXH3DOHOETADYNF838LO9OHQTDP32XP3LV99STJ8V3UL3X9RXXNMYK63VKIHQRRLZB6SITJCWP95A1XYUXBQOCI1BO1JHMY38PXZOHXLPPG2CZYIBAV6NQ3ZF' where id=54; -update noar ti set v1='IMPDJLFC0K0EHX90WZNJMZ1HSANIUK2M2EV1ODSS7CDICR8MXIHIP49A2TCJA95TN7YSKXZZPCS1GCG69QUU80F650W6SZ2T7L4XZ6ZZJE3MZYEENSU6B3APHR44S5XCYRV5GWOEHXH3DOHOETADYNF838LO9OHQTDP32XP3LV99STJ8V3UL3X9RXXNMYK63VKIHQRRLZB6SITJCWP95A1XYUXBQOCI1BO1JHMY38PXZOHXLPPG2CZYIBAV6NQ3ZF' where id=54; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='70WYQKTFS682JBEWD82T2YY384U1LZIQMJFGRPYL2JEUQR28AWQ19ATEWXONOKGXEON0TMW107Z1ZXZY2OC3O4FMBPUDH3Q6ILCW3VJHEES8KDZCYP8ZJAYB28Q9189FJ6744G8IHMZPTCY9LSJPLGIP38GAHEOETBGTPSETFSMNI2YW17FZQZ299CYHXQHN70RM4A04M6CQG0E7HPU4GRHKKE0Z82PM47DNB8ZY3LUUT6242SUDD4P3FU5HXV3Y1' where id=54; -update noar ti set v2='70WYQKTFS682JBEWD82T2YY384U1LZIQMJFGRPYL2JEUQR28AWQ19ATEWXONOKGXEON0TMW107Z1ZXZY2OC3O4FMBPUDH3Q6ILCW3VJHEES8KDZCYP8ZJAYB28Q9189FJ6744G8IHMZPTCY9LSJPLGIP38GAHEOETBGTPSETFSMNI2YW17FZQZ299CYHXQHN70RM4A04M6CQG0E7HPU4GRHKKE0Z82PM47DNB8ZY3LUUT6242SUDD4P3FU5HXV3Y1' where id=54; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='B1QS7BYUJ1G9II6JLAWLFNF3ZDNLLW7Y2VPQI34R83CQZC8L4RFHFQME0VMOO4GC3VG8XBP2FULKWGW9PQOZT7059BO0MCS6M44XEIOQE2JUDG67GLIMSXNWXL7NGN90FUOOSS3T60SM3WPF7JSM2WUMUOI4VY98MLG6J98OD712VGJ1Y65GXZT0PPJQ2WJ8FGGFDDXFQ5PAZ15TPZO5OKUZFXBRU2SXKRX72THILRNIPGETT0EZXEMSGU1Y8DJXJ' where id=54; -update noar ti set v3='B1QS7BYUJ1G9II6JLAWLFNF3ZDNLLW7Y2VPQI34R83CQZC8L4RFHFQME0VMOO4GC3VG8XBP2FULKWGW9PQOZT7059BO0MCS6M44XEIOQE2JUDG67GLIMSXNWXL7NGN90FUOOSS3T60SM3WPF7JSM2WUMUOI4VY98MLG6J98OD712VGJ1Y65GXZT0PPJQ2WJ8FGGFDDXFQ5PAZ15TPZO5OKUZFXBRU2SXKRX72THILRNIPGETT0EZXEMSGU1Y8DJXJ' where id=54; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='FT2E93NV3QCL4IENSLMVPXJLRU9UZU8YDHW4VIDTKVE07PD6P7H57NHA6RLP2ZXKDVQKLX2PU79IC5889CP7L5PBKWHE233WKFD0YI5LT3N9IQVA712JAGK7SE72IW2YXON7UELGIC751UTSA7BFLEQ4OXKAWTXOR89HFWI2WPF2TSY13SZA063F9EO2W0714N1TCC23HVLF2FIZFGHI0NUEL127HE7I1YW9A254IEM4T4CEEP8T613FC5WG05CEN' where id=55; -update noar ti set v0='FT2E93NV3QCL4IENSLMVPXJLRU9UZU8YDHW4VIDTKVE07PD6P7H57NHA6RLP2ZXKDVQKLX2PU79IC5889CP7L5PBKWHE233WKFD0YI5LT3N9IQVA712JAGK7SE72IW2YXON7UELGIC751UTSA7BFLEQ4OXKAWTXOR89HFWI2WPF2TSY13SZA063F9EO2W0714N1TCC23HVLF2FIZFGHI0NUEL127HE7I1YW9A254IEM4T4CEEP8T613FC5WG05CEN' where id=55; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='UUSG8E3OZ5GU6JFEAZDZTUVPU9D77QDLVFI72LED3KD8M12EEA0MA7PTSZHWQCSFRZR7Y915OWFLXULX76VYURNKPP0CM6RYKF2Y26QBRWT4UF76EOCCYBSJYB2RB0DSRU44C2AOWT9QA29IOUVSYA2TNPVR0ZL6J3NB0I9BY6BD4G3AOYKJ0RRGOUD0Q47A0BS7TSRFCL9O5B82VDZ55AUE1RMCWF2K0X88OIWTZKWG652YYGJRCKUBF5LW5HLVK' where id=55; -update noar ti set v1='UUSG8E3OZ5GU6JFEAZDZTUVPU9D77QDLVFI72LED3KD8M12EEA0MA7PTSZHWQCSFRZR7Y915OWFLXULX76VYURNKPP0CM6RYKF2Y26QBRWT4UF76EOCCYBSJYB2RB0DSRU44C2AOWT9QA29IOUVSYA2TNPVR0ZL6J3NB0I9BY6BD4G3AOYKJ0RRGOUD0Q47A0BS7TSRFCL9O5B82VDZ55AUE1RMCWF2K0X88OIWTZKWG652YYGJRCKUBF5LW5HLVK' where id=55; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='8IHXAKH9PJDI4NBT0U1XF6XCEXWYQGM1YQZWTNIBVGLGMZFOMG90W3OP69W83KI4A660G79B19U3LNBX5TL8TN9D6LSDDAOZHD4S9H95BOS0Y46JT4ESTEIXPGZY1847UTEODJ822CO4OG2OOJZWCZR3O16GVWZ7OVDW5K8M3YISQ0WLH0VRY0PBUMK095ZK4YA2XA68NTRFM70M798Q2IM8QJD6SAXCCHNCTWBEAHNPB9AD9AUFADZF4SRA28NTZ' where id=55; -update noar ti set v2='8IHXAKH9PJDI4NBT0U1XF6XCEXWYQGM1YQZWTNIBVGLGMZFOMG90W3OP69W83KI4A660G79B19U3LNBX5TL8TN9D6LSDDAOZHD4S9H95BOS0Y46JT4ESTEIXPGZY1847UTEODJ822CO4OG2OOJZWCZR3O16GVWZ7OVDW5K8M3YISQ0WLH0VRY0PBUMK095ZK4YA2XA68NTRFM70M798Q2IM8QJD6SAXCCHNCTWBEAHNPB9AD9AUFADZF4SRA28NTZ' where id=55; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='THPPDHEFNY8IAZKHNH57S5Q5JGI612U28HGOSUYPCO2WHS77MG6Q1EWMX5FE63JQIWIT2OJS3PZYDBOD2KV3MWMYBI36LSW9WLIDFC9PP318YY7N81JEE8KBXG2JWNSXBBBKSEL7ZV7FBU8VAGNPCP8KG1PM5CKDYSVBDIDA7T2C8XH3VT30PH1BHIBS7F884Q0X22531UDULHUNV50L4CKIDJYR6QDYJOWRFW1ONDMPLKYNR1O7R3EUF3PNSEB1Z' where id=55; -update noar ti set v3='THPPDHEFNY8IAZKHNH57S5Q5JGI612U28HGOSUYPCO2WHS77MG6Q1EWMX5FE63JQIWIT2OJS3PZYDBOD2KV3MWMYBI36LSW9WLIDFC9PP318YY7N81JEE8KBXG2JWNSXBBBKSEL7ZV7FBU8VAGNPCP8KG1PM5CKDYSVBDIDA7T2C8XH3VT30PH1BHIBS7F884Q0X22531UDULHUNV50L4CKIDJYR6QDYJOWRFW1ONDMPLKYNR1O7R3EUF3PNSEB1Z' where id=55; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='DGJZ5OJ8R4AZGL4857EH3S8E0NPHE3SW4XXNWRAD7ITLBIK6YMETRJQI5QFEFA6R471R7G4360YFKJJUKFXTDFXXRTZHJ8721BMSDADG5FJE5MMWO9HCOGJVQGRLENPH3H66OHNMGT5URDWZNSOKFHJT5KE7PLKN6CLWSPL6QZLZH7703V9RPJMW5RRZ3UY9JCSJQW8M79S3KKFHPV39IY2L33XUTGZA9D6T39O35EC50EPK3HIWSTJ2ZMI4OZN7D' where id=56; -update noar ti set v0='DGJZ5OJ8R4AZGL4857EH3S8E0NPHE3SW4XXNWRAD7ITLBIK6YMETRJQI5QFEFA6R471R7G4360YFKJJUKFXTDFXXRTZHJ8721BMSDADG5FJE5MMWO9HCOGJVQGRLENPH3H66OHNMGT5URDWZNSOKFHJT5KE7PLKN6CLWSPL6QZLZH7703V9RPJMW5RRZ3UY9JCSJQW8M79S3KKFHPV39IY2L33XUTGZA9D6T39O35EC50EPK3HIWSTJ2ZMI4OZN7D' where id=56; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='YTIQEU3A4OSHIHSIGPYTDDHH92K330QTDKP77E4M7NL4SIU6KTUINUFLDMP060CIG9O7BR8JBT4EK4NZV15J9AYJK4H1WTBH93MSFMWXZ7XZEZCY0PF6TOSOIW3FTA966GCCSO45D0FCXV1S12LSYS50F5QE8QZB2UW9MNBVU567BTFXAPRKXRKN4VNFFRV7BYY2TRTON7GJW6GULABHXCQEZMD6HVD74HP9JXR3QIHHQZ6CT5F8S6A28UXWYNMCW' where id=56; -update noar ti set v1='YTIQEU3A4OSHIHSIGPYTDDHH92K330QTDKP77E4M7NL4SIU6KTUINUFLDMP060CIG9O7BR8JBT4EK4NZV15J9AYJK4H1WTBH93MSFMWXZ7XZEZCY0PF6TOSOIW3FTA966GCCSO45D0FCXV1S12LSYS50F5QE8QZB2UW9MNBVU567BTFXAPRKXRKN4VNFFRV7BYY2TRTON7GJW6GULABHXCQEZMD6HVD74HP9JXR3QIHHQZ6CT5F8S6A28UXWYNMCW' where id=56; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='M6BC8QTDAGG5OA7OJ2SYLFRKD21LTTSVT80V7U0ELLZM2K4X3ZE57LRFCQIQXWP5HIN8LYKG2665JWNHRTGLCHPW8ROL3NIR1KGQ0DUZ4EDDHRENJHIOHIS5OKWIZ2WIOAEOOB73EFVCLQBHECG7UYMIAN1MWE25AX5AI05M00YNXI6WW3Z19AO59SVIKJ6SLSARG1OXAP4HKK11JJOBI8WLZSGD9YHQN9L8LVEVI30HV9KHV1HSUUJ8VY49M3LXI' where id=56; -update noar ti set v2='M6BC8QTDAGG5OA7OJ2SYLFRKD21LTTSVT80V7U0ELLZM2K4X3ZE57LRFCQIQXWP5HIN8LYKG2665JWNHRTGLCHPW8ROL3NIR1KGQ0DUZ4EDDHRENJHIOHIS5OKWIZ2WIOAEOOB73EFVCLQBHECG7UYMIAN1MWE25AX5AI05M00YNXI6WW3Z19AO59SVIKJ6SLSARG1OXAP4HKK11JJOBI8WLZSGD9YHQN9L8LVEVI30HV9KHV1HSUUJ8VY49M3LXI' where id=56; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='6MD7CL2Y95KE3EWVVTI1LF3VUTYERI7GYMABRNVLRJ5N37SWEVTXPTLQU4A3B7MR7KXC5DRHHO1LAWQYPD7RZA04GCZ7C9YOPODJMQ029IV4QZ31QV90UADVTTNC4OCAHET05IMFZ6TH3RE7C1ZBL2O54EHFAN0LCGUZPMWWGQUU2Z4LG2A0ERHT32OIHPMJ1TR5UNSTSU7QZW9L9MERFPWHH4CHQV8K9XWPGZOH6AZ8E7JL6AVECMHLRBMEJ5LLV' where id=56; -update noar ti set v3='6MD7CL2Y95KE3EWVVTI1LF3VUTYERI7GYMABRNVLRJ5N37SWEVTXPTLQU4A3B7MR7KXC5DRHHO1LAWQYPD7RZA04GCZ7C9YOPODJMQ029IV4QZ31QV90UADVTTNC4OCAHET05IMFZ6TH3RE7C1ZBL2O54EHFAN0LCGUZPMWWGQUU2Z4LG2A0ERHT32OIHPMJ1TR5UNSTSU7QZW9L9MERFPWHH4CHQV8K9XWPGZOH6AZ8E7JL6AVECMHLRBMEJ5LLV' where id=56; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='XY71VYW9EMPQ59SQ7MKUIPNBVBKJ6EM6DQF7GRJTM4SNZHUFK6VRXP24JXYZZ9FP6PCQIAQBHYN6YGD4LQ2OLYN23BJVK8LL8FBS64S6G3YPAZYBNJ7SL495FMZMPO2YNPLY5CXT8P4ZYT9TORHU8N0UWL2LAOW938C81JQLDSZR3FC5NBIOZ5T6AYJHQU1ZEIGYNW7NB1SF245QRL5PR2F9QB9B1YR47LATACOK41JZ2YEJAYJRO3HUN0G3X6VO8' where id=57; -update noar ti set v0='XY71VYW9EMPQ59SQ7MKUIPNBVBKJ6EM6DQF7GRJTM4SNZHUFK6VRXP24JXYZZ9FP6PCQIAQBHYN6YGD4LQ2OLYN23BJVK8LL8FBS64S6G3YPAZYBNJ7SL495FMZMPO2YNPLY5CXT8P4ZYT9TORHU8N0UWL2LAOW938C81JQLDSZR3FC5NBIOZ5T6AYJHQU1ZEIGYNW7NB1SF245QRL5PR2F9QB9B1YR47LATACOK41JZ2YEJAYJRO3HUN0G3X6VO8' where id=57; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='8N0TLAXW3AMYN44ZNRZCK9RFWSBQ4BHA2KFJ9AFUCPGRVUYQ79CGJRUIFS6E94EFXN0WABPM7OUI3D2033SM299S6XTMREPQF92XYTL7THW3IT735Z52PQRT5U0MTPITBY4Q1YZM0GWRUIODEFCTKSDNA554FZJZSKY37MSGJ9AOM0YZEY5N5BYFMS2TG7XJSJZ01E5Q46BTVQSPRJRCD9FUCNXK8GRY12H98ZTSP3EZ3R8ADLL2MS7ZHTSCS99YH' where id=57; -update noar ti set v1='8N0TLAXW3AMYN44ZNRZCK9RFWSBQ4BHA2KFJ9AFUCPGRVUYQ79CGJRUIFS6E94EFXN0WABPM7OUI3D2033SM299S6XTMREPQF92XYTL7THW3IT735Z52PQRT5U0MTPITBY4Q1YZM0GWRUIODEFCTKSDNA554FZJZSKY37MSGJ9AOM0YZEY5N5BYFMS2TG7XJSJZ01E5Q46BTVQSPRJRCD9FUCNXK8GRY12H98ZTSP3EZ3R8ADLL2MS7ZHTSCS99YH' where id=57; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='181IME83VOFM1CJ5NU5YRDV993DOHGVCBFDSW9JCQ7G7ORXW58239A10UYZV2S4VUKYNFSX159SXDOYX20HRL8CYEFC0M6V0OI07S1P3HIZ6OWDI3TFL5BXGPVBWKWAQQPZRPNKNHLMKEPFEYTP9NOP0KBGT3C5R0Y8YT6JH909BSFAM5HTR0PL7XZV5WLD0O58HELPH3Q1C95ILUGXYN3C4L8GJCP74U7EAPC99K6R7GPI4B6JW5RDI1WWUUF2J2' where id=57; -update noar ti set v2='181IME83VOFM1CJ5NU5YRDV993DOHGVCBFDSW9JCQ7G7ORXW58239A10UYZV2S4VUKYNFSX159SXDOYX20HRL8CYEFC0M6V0OI07S1P3HIZ6OWDI3TFL5BXGPVBWKWAQQPZRPNKNHLMKEPFEYTP9NOP0KBGT3C5R0Y8YT6JH909BSFAM5HTR0PL7XZV5WLD0O58HELPH3Q1C95ILUGXYN3C4L8GJCP74U7EAPC99K6R7GPI4B6JW5RDI1WWUUF2J2' where id=57; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='MAKEOJBJQT3M3QEOZFP2DHZMLBCOELYQCHWNV2TIRRBXWV7JNFMXG1D18OMJVLLNVD72YWNX20OOKWO7MDR1V5ZBW94IMUHZAQCJGY1YX4J8STOMZBBNCKGHA8DBEIGEH9OLGD5QNYRGVLEKTRZEML3P2Q99OT7BURN4G8EIRH68X1WW242ETZDDDU8XDMXQU87Z1AVKZSMF97FLDGLNY8HGCHT1X8PZ1L7UUK3OJG1NH6EWCG50SILBQA3775NUK' where id=57; -update noar ti set v3='MAKEOJBJQT3M3QEOZFP2DHZMLBCOELYQCHWNV2TIRRBXWV7JNFMXG1D18OMJVLLNVD72YWNX20OOKWO7MDR1V5ZBW94IMUHZAQCJGY1YX4J8STOMZBBNCKGHA8DBEIGEH9OLGD5QNYRGVLEKTRZEML3P2Q99OT7BURN4G8EIRH68X1WW242ETZDDDU8XDMXQU87Z1AVKZSMF97FLDGLNY8HGCHT1X8PZ1L7UUK3OJG1NH6EWCG50SILBQA3775NUK' where id=57; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='XNTCK6K8AXJTL5EURR61UE5KL4QI59LWZWL8W0XHOMUS7WY9D712T5QVUN24U5YG4XSSP1M1EPD9T36SGVOJDXE2XE8AKDZE2OM8DEGVT322JE6TBXA3CXAEGTBKI8WH2T29F08IOIW9U0JXKMOZOJD4LQH2R1RBHI9GYU2D2O5JZYETRJSFZILCXY2GSOO87LSGMO4COJJDJ3IMO5HPUC4TY4DPLFU6JNI2JDL7ZMKE78U1ZRFHGZP8C05X825HG' where id=58; -update noar ti set v0='XNTCK6K8AXJTL5EURR61UE5KL4QI59LWZWL8W0XHOMUS7WY9D712T5QVUN24U5YG4XSSP1M1EPD9T36SGVOJDXE2XE8AKDZE2OM8DEGVT322JE6TBXA3CXAEGTBKI8WH2T29F08IOIW9U0JXKMOZOJD4LQH2R1RBHI9GYU2D2O5JZYETRJSFZILCXY2GSOO87LSGMO4COJJDJ3IMO5HPUC4TY4DPLFU6JNI2JDL7ZMKE78U1ZRFHGZP8C05X825HG' where id=58; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='NITS3G6YX1LZILX51R77TPV16QLNHE0JE25FU308BD37CZ1R0UAVX8JVHH2IJA60HOEI2IUE7SCDEXHRXGYWD524FAHFTT7MEESDC35AKU47Z0JP804UFHR0V36WC23TT4NAI0S66ZOT1C5JCYMEF8CV8FSFWYPFJORAHMVA9BDIQT5S5P2MHURY44OHPQTTCCPGJ0YF5V2THSMP7ULLP2LXM3HC8S26ZKHOVFYJ3I9DUPIX7NTG4Q956GL7X7JSU' where id=58; -update noar ti set v1='NITS3G6YX1LZILX51R77TPV16QLNHE0JE25FU308BD37CZ1R0UAVX8JVHH2IJA60HOEI2IUE7SCDEXHRXGYWD524FAHFTT7MEESDC35AKU47Z0JP804UFHR0V36WC23TT4NAI0S66ZOT1C5JCYMEF8CV8FSFWYPFJORAHMVA9BDIQT5S5P2MHURY44OHPQTTCCPGJ0YF5V2THSMP7ULLP2LXM3HC8S26ZKHOVFYJ3I9DUPIX7NTG4Q956GL7X7JSU' where id=58; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='S0H4JFN1MX70SMLWUO4L939QUPPY9RV1GP0A446JOFH838XGFLOXU8T5EVXZQNS6ANFGKYOAM0TWK224MIJC0IHEKMSA4JE202TJ3Q76VG9E3UPRP7ZIO2FXXH5XBUAXYOJ82Y013CBX2K7S9FEV72ZHL1TZTM55O4ZCJU6P1ZR8E1WH59ATFPWAX7TT4NNSZ5F2BDFJH8Z1R7EUBPDO1DBYBOTWE8ZXTKAXUOHPRX8U7P598JXY5A2L86AHJG24S' where id=58; -update noar ti set v2='S0H4JFN1MX70SMLWUO4L939QUPPY9RV1GP0A446JOFH838XGFLOXU8T5EVXZQNS6ANFGKYOAM0TWK224MIJC0IHEKMSA4JE202TJ3Q76VG9E3UPRP7ZIO2FXXH5XBUAXYOJ82Y013CBX2K7S9FEV72ZHL1TZTM55O4ZCJU6P1ZR8E1WH59ATFPWAX7TT4NNSZ5F2BDFJH8Z1R7EUBPDO1DBYBOTWE8ZXTKAXUOHPRX8U7P598JXY5A2L86AHJG24S' where id=58; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='8WV6OJQZC90L4VLFY10MKFJ0JLW94M2U6FB2X95XNEKDFEDOWOR3WIXJ91PBY3JMAG84X3EDN9LEGK8G3TPOO5UTWRFJFXDN84804OMBSI36OKFEXAK5TCA8IVUNAEMNGOJM84XRU6AU88VMYVLXKC91P5N4L900PX9D6BCYZ4HIJS2GSTYFQN8F9ECT1JXYTE7FDPV2Y3D876ALNON62ZI3BB0P7I4QXIYM2PV8AUVWPG558AQRN3BEW7KDGY4KA' where id=58; -update noar ti set v3='8WV6OJQZC90L4VLFY10MKFJ0JLW94M2U6FB2X95XNEKDFEDOWOR3WIXJ91PBY3JMAG84X3EDN9LEGK8G3TPOO5UTWRFJFXDN84804OMBSI36OKFEXAK5TCA8IVUNAEMNGOJM84XRU6AU88VMYVLXKC91P5N4L900PX9D6BCYZ4HIJS2GSTYFQN8F9ECT1JXYTE7FDPV2Y3D876ALNON62ZI3BB0P7I4QXIYM2PV8AUVWPG558AQRN3BEW7KDGY4KA' where id=58; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='9G6I943PKYH7YHR8TW4RND8B97HJ856LCO5NU7KNH7Z2U6U7BTHO5DPFVNXNT9YB4DJQ2T5MOEBM7KUH039MNCN9IV8KDJ8VEJGK6LGN7VPZSB8YQFM5DHD6KGH48URDT7QDRQD3UBJ5ANNBN39NWT99OO0GDMB4PRA1KA4BYIPGHLZK27OCWFSIML3E0ZAE7NV0TID45GZYFZ6X4MFAVTB8TZ9720K9FD0IFD1FTM4L98N8154LTKW9OBHFZZ9DE' where id=59; -update noar ti set v0='9G6I943PKYH7YHR8TW4RND8B97HJ856LCO5NU7KNH7Z2U6U7BTHO5DPFVNXNT9YB4DJQ2T5MOEBM7KUH039MNCN9IV8KDJ8VEJGK6LGN7VPZSB8YQFM5DHD6KGH48URDT7QDRQD3UBJ5ANNBN39NWT99OO0GDMB4PRA1KA4BYIPGHLZK27OCWFSIML3E0ZAE7NV0TID45GZYFZ6X4MFAVTB8TZ9720K9FD0IFD1FTM4L98N8154LTKW9OBHFZZ9DE' where id=59; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='JFB48J7JXQWZHD2Q6X72OUDC83KI1OT0JUKOF3S0MMZIOV8BU9YMIA22R8WVD69ENZWOB562I69B9LN23EC9RAVBU8ITOMK82XFTX29NACAIXEIH7ANJQX9169M63N6Z5LDBCSQL5Y0W70D2HFALBKGI5XGW9X67YDK5COC0SMK3CJY8YCMP45PDF0GBDV1UR05QSG10DTNTQKLWWPD60SOIUFKAC1VKEBS0ZTFJ7FUPD6Z3COZWENX7ETPYP7P2Z' where id=59; -update noar ti set v1='JFB48J7JXQWZHD2Q6X72OUDC83KI1OT0JUKOF3S0MMZIOV8BU9YMIA22R8WVD69ENZWOB562I69B9LN23EC9RAVBU8ITOMK82XFTX29NACAIXEIH7ANJQX9169M63N6Z5LDBCSQL5Y0W70D2HFALBKGI5XGW9X67YDK5COC0SMK3CJY8YCMP45PDF0GBDV1UR05QSG10DTNTQKLWWPD60SOIUFKAC1VKEBS0ZTFJ7FUPD6Z3COZWENX7ETPYP7P2Z' where id=59; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='6C6KGZNIFUVCEFDBPIPJN6RYHIOYZF79HOT2UBVP65BIQVZFDNPZTI8D8YW5BFJAWTPNFGWUY7LK7EPQHRBVGJBLWJXRK85333TDB3NT1X32IQHBIORHU3SCHXRNUKZ6Y474F7ZKD2YTJR5ZTUR5AHJ82LYEXKGV0B6P5QFD7SBNJVQFNZGL48F7UHLSY4HVQ0NTSQJDGW588624MIIDXKO485ID9ZM0JJCMPB1UZVIS2LLHZC06RHQ9ZKXEFACHZ' where id=59; -update noar ti set v2='6C6KGZNIFUVCEFDBPIPJN6RYHIOYZF79HOT2UBVP65BIQVZFDNPZTI8D8YW5BFJAWTPNFGWUY7LK7EPQHRBVGJBLWJXRK85333TDB3NT1X32IQHBIORHU3SCHXRNUKZ6Y474F7ZKD2YTJR5ZTUR5AHJ82LYEXKGV0B6P5QFD7SBNJVQFNZGL48F7UHLSY4HVQ0NTSQJDGW588624MIIDXKO485ID9ZM0JJCMPB1UZVIS2LLHZC06RHQ9ZKXEFACHZ' where id=59; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='58W1GV25XYESW7KJ89OO4NEWR5L7ZFVKR8D4GTDW3M07UOA1FO9ZQBD6EN0WBO96KR1745XDYI4YP73DOMCA00QVV085QLBAYM08XBAULF0FJRX65ZTH5VQ7USAFX28WGDSL71W57LQGFFIFSQPZ4CS4JM1A64Z87IRYCRABUKSVRE42J98EDN8QADYINB2H2ZFZ1TVPMA5716GFT4HRQMUME5YSZPDX7CU80D1ZDAWI0WHBJMCPMMJ2SR52TP9SG' where id=59; -update noar ti set v3='58W1GV25XYESW7KJ89OO4NEWR5L7ZFVKR8D4GTDW3M07UOA1FO9ZQBD6EN0WBO96KR1745XDYI4YP73DOMCA00QVV085QLBAYM08XBAULF0FJRX65ZTH5VQ7USAFX28WGDSL71W57LQGFFIFSQPZ4CS4JM1A64Z87IRYCRABUKSVRE42J98EDN8QADYINB2H2ZFZ1TVPMA5716GFT4HRQMUME5YSZPDX7CU80D1ZDAWI0WHBJMCPMMJ2SR52TP9SG' where id=59; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='I73EEGL2XCVDFM7A1MMQA51II6O4Z5CURTJLOQUT8WU5MUQIHB9S3XBE2KYV6FIZSJBAWKORN9R8C18FJNGKRUEOZP2CAK5Z7ARBHDZP32OQ1QXKO3I4CVKY0P7L806TSOAO5K8J5TKQUKXKTGXA1SXEVVKD3RIX27U5BGXKD3G8OAXIJP0MYPLZODODEZA0S9P135GCMXK1OXIEAVQY89SKZJRP7497GNUMYBLA822NZV866G5RKQ2TW22RG8B9E' where id=60; -update noar ti set v0='I73EEGL2XCVDFM7A1MMQA51II6O4Z5CURTJLOQUT8WU5MUQIHB9S3XBE2KYV6FIZSJBAWKORN9R8C18FJNGKRUEOZP2CAK5Z7ARBHDZP32OQ1QXKO3I4CVKY0P7L806TSOAO5K8J5TKQUKXKTGXA1SXEVVKD3RIX27U5BGXKD3G8OAXIJP0MYPLZODODEZA0S9P135GCMXK1OXIEAVQY89SKZJRP7497GNUMYBLA822NZV866G5RKQ2TW22RG8B9E' where id=60; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='H7DSCRP710JNTL15CAT1LXSWBOP9D09FMYNBZXIO50DPXHVO8BY7AOZV0GYLM4Y4YI0BGL2NZ9NWRIXR23PSZJ2RXTLN51F8VN26CTSVN80Y2955254SZB85WZWHFYL8AAG6OSH45J4LQZL85GX026L44EYPFCK1RM2MI3PR7BTAJHUQRRFT4CR7YVAQDZTUV6RDSN45PVK4CTHCF6EJYFTQPZ4VEOXM1ORU0LYWEUTL9N2K9EAXO6AJG81DVVYQA' where id=60; -update noar ti set v1='H7DSCRP710JNTL15CAT1LXSWBOP9D09FMYNBZXIO50DPXHVO8BY7AOZV0GYLM4Y4YI0BGL2NZ9NWRIXR23PSZJ2RXTLN51F8VN26CTSVN80Y2955254SZB85WZWHFYL8AAG6OSH45J4LQZL85GX026L44EYPFCK1RM2MI3PR7BTAJHUQRRFT4CR7YVAQDZTUV6RDSN45PVK4CTHCF6EJYFTQPZ4VEOXM1ORU0LYWEUTL9N2K9EAXO6AJG81DVVYQA' where id=60; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='N3HL95RWNSMG5ULYW73MZAM9IJWAZTBW9V2Q77KUR45USYWZCFC135QQ808B9LH4RS7CN7JTPAE7997W8B5MFLGGZA94SOOE5STFWB423VIQU2JPCGKANAY9548RLVXFK614WN1U00TQMMOO3HJWDDPU6MQZ6YF9QHSPYR1KFM6E67DY39E3FF6D4Z4J3NXTZD7P3M4YRHYVW51UXZJJ0NXKK49L7AEK8SE3R0W6KH3IHNCLRU410JFRI6Z514U56' where id=60; -update noar ti set v2='N3HL95RWNSMG5ULYW73MZAM9IJWAZTBW9V2Q77KUR45USYWZCFC135QQ808B9LH4RS7CN7JTPAE7997W8B5MFLGGZA94SOOE5STFWB423VIQU2JPCGKANAY9548RLVXFK614WN1U00TQMMOO3HJWDDPU6MQZ6YF9QHSPYR1KFM6E67DY39E3FF6D4Z4J3NXTZD7P3M4YRHYVW51UXZJJ0NXKK49L7AEK8SE3R0W6KH3IHNCLRU410JFRI6Z514U56' where id=60; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='E5K3CYRB81ZAUEHY3IKPV60QVDE8H66DXJ6X2CCFQLJWDIYJ88W3IHJ0N59OYZNLCGZBDWXWVINI5P3GNZWV9TDCRA5H6SNTNNO1FSST8XB1C3FTOXJ8DNUS8VGWZ6VIV3XG48LWP7TAFE0WNRG6GBV8Z5UNGSA0RUVG4W1YV79AT1J6SZB0UFFRECY88HJD8Z0P68GSA82BBTKXFQMFKV095A42KKBE3BTUGQBFU654Z8H4X1W328JIHYKSNJ5Z7' where id=60; -update noar ti set v3='E5K3CYRB81ZAUEHY3IKPV60QVDE8H66DXJ6X2CCFQLJWDIYJ88W3IHJ0N59OYZNLCGZBDWXWVINI5P3GNZWV9TDCRA5H6SNTNNO1FSST8XB1C3FTOXJ8DNUS8VGWZ6VIV3XG48LWP7TAFE0WNRG6GBV8Z5UNGSA0RUVG4W1YV79AT1J6SZB0UFFRECY88HJD8Z0P68GSA82BBTKXFQMFKV095A42KKBE3BTUGQBFU654Z8H4X1W328JIHYKSNJ5Z7' where id=60; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='BC23ZSPXJFKOKVCR20RS9DYV100NC2SQ5PWICSU1N9CLH1X8FGLI43SP74I97O1I7P6D8Y09PWU3FFAJ6WAWKV9DDDSIT6JUL85R7JAX44WF307AMNP0WAKCRKE5Z8XTMNFJ5PQW2OR9CWMOYLS2ZYLSO7CLMI5XZC9KCAB21PHHY2IF3QJDGDFWYXV9MHYHHIP5QJOP41AZT4L1L3JIKBOTBSPGCIWBP8651VXJPSZOJNAT1PIM8EPRXWGE6LD3Z' where id=61; -update noar ti set v0='BC23ZSPXJFKOKVCR20RS9DYV100NC2SQ5PWICSU1N9CLH1X8FGLI43SP74I97O1I7P6D8Y09PWU3FFAJ6WAWKV9DDDSIT6JUL85R7JAX44WF307AMNP0WAKCRKE5Z8XTMNFJ5PQW2OR9CWMOYLS2ZYLSO7CLMI5XZC9KCAB21PHHY2IF3QJDGDFWYXV9MHYHHIP5QJOP41AZT4L1L3JIKBOTBSPGCIWBP8651VXJPSZOJNAT1PIM8EPRXWGE6LD3Z' where id=61; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='70K25FRSSEQYO12G0KVXDEK7D1JYFVO6C4STN7GGMZTTQD1P067ZYLYZHZEZ8JTJQE2AUNIN27OVAX1S4BU7USZ21FXN2YJAQO8AL417DELPSJF48JS6MIH4WO936IWBF5AJDATB25GO7LWCMRO26TTV1VRRY5LVBVL0JUE8H07GV9KRLDZWGC1ZNJH7C65A262WZPUV6JZVEQH1G1U9W0Y164DCX9WD4UGB7DSQWARN8EBJCKMMCF7A0G1QV8ITL' where id=61; -update noar ti set v1='70K25FRSSEQYO12G0KVXDEK7D1JYFVO6C4STN7GGMZTTQD1P067ZYLYZHZEZ8JTJQE2AUNIN27OVAX1S4BU7USZ21FXN2YJAQO8AL417DELPSJF48JS6MIH4WO936IWBF5AJDATB25GO7LWCMRO26TTV1VRRY5LVBVL0JUE8H07GV9KRLDZWGC1ZNJH7C65A262WZPUV6JZVEQH1G1U9W0Y164DCX9WD4UGB7DSQWARN8EBJCKMMCF7A0G1QV8ITL' where id=61; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='7NF99XEP5HPBEHHYT23I5WZ6U3K87JOY7JNK3K5RE2J1N4RJ52WGPHELFTZ5333SY6BBODGVFH8K66CUDDJHQX25H2ZW36BUE9IF1ALPS5UY762D3KMEZVFHHG720IUOLSDT92UYXE7LUOC054GGFZ2Y7Q320DFM98WGIO162M0O1M7Y998ERE4BZ3S0IOPOG5ZKV1OCFJ3V2TJX3JNSWT54CQBKVQ3XN0OUYXU2V34OXBV2RKVYIVI3D59AR3MX2' where id=61; -update noar ti set v2='7NF99XEP5HPBEHHYT23I5WZ6U3K87JOY7JNK3K5RE2J1N4RJ52WGPHELFTZ5333SY6BBODGVFH8K66CUDDJHQX25H2ZW36BUE9IF1ALPS5UY762D3KMEZVFHHG720IUOLSDT92UYXE7LUOC054GGFZ2Y7Q320DFM98WGIO162M0O1M7Y998ERE4BZ3S0IOPOG5ZKV1OCFJ3V2TJX3JNSWT54CQBKVQ3XN0OUYXU2V34OXBV2RKVYIVI3D59AR3MX2' where id=61; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='A7T0NQ8ASJMHXYNYEY42ICFARK4Q410H42IKEI4DYXW0OQHL6BDAZM03HBYDZI40TE350CENWYK1L61OAOE9FE9IZYLB7MB5TFXODXN67HXUGJ941G4PE2J7MAL3UNGG1DSBF5UAX5WZIBIHXP7JP710PGG2VBVMVRHY28N10SKQOSUDGL9MXX5G7BNOHXJXAA4L106CRENDM3U4V97UBVBJMK3VCXG02OTA9MJ51KKB2N5RZWYO3IPBMN4MIDVF5' where id=61; -update noar ti set v3='A7T0NQ8ASJMHXYNYEY42ICFARK4Q410H42IKEI4DYXW0OQHL6BDAZM03HBYDZI40TE350CENWYK1L61OAOE9FE9IZYLB7MB5TFXODXN67HXUGJ941G4PE2J7MAL3UNGG1DSBF5UAX5WZIBIHXP7JP710PGG2VBVMVRHY28N10SKQOSUDGL9MXX5G7BNOHXJXAA4L106CRENDM3U4V97UBVBJMK3VCXG02OTA9MJ51KKB2N5RZWYO3IPBMN4MIDVF5' where id=61; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='5E4N4TIDSTDNDHHKRACEGMD6B7F64VPYY6J0Y4SJSF4BX26CWN4BLA4QAJH0ED2MMAXWOXX74E5TY7D3STMQ0A7SWZEUMPLGNTE92CZWORV3HSNYBFNBMX5B4AQMJZWAYNN4Z2X0YX36ZN1Q3S8PMMX4I63MXQNW7OQ5NVR7KKO0XIZI5N4KOATMWN8ZZFQ1XEQULEFWVP0IGROQ1UTN1PB6A2QDD3J8F3FK4NS7AP061XFSOOPH6Q69BYH28NR1C' where id=62; -update noar ti set v0='5E4N4TIDSTDNDHHKRACEGMD6B7F64VPYY6J0Y4SJSF4BX26CWN4BLA4QAJH0ED2MMAXWOXX74E5TY7D3STMQ0A7SWZEUMPLGNTE92CZWORV3HSNYBFNBMX5B4AQMJZWAYNN4Z2X0YX36ZN1Q3S8PMMX4I63MXQNW7OQ5NVR7KKO0XIZI5N4KOATMWN8ZZFQ1XEQULEFWVP0IGROQ1UTN1PB6A2QDD3J8F3FK4NS7AP061XFSOOPH6Q69BYH28NR1C' where id=62; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='LLCAJ6M5UL1JWPB3Z8QN63YSPHN25ZLAEHB7UT6V9Y49O6439JCOFK38IR99104NH4MVL3L16U7PE5X0NNRJQE334PKHCG6FC8YI29HRFCAX04YBJJPCMNKHGZJ00G4LJ6I1MRNXM2FK561GH31RKFYL88XJ3133ET839CTKPCHW5OSLZA50MZBWI8GN70F5NH27XN2Q2BU7GC05ZRZ1LSQ60OT1GTZNAJE48WP61ZBMFY1YJC5D5YGI3RE66K54F' where id=62; -update noar ti set v1='LLCAJ6M5UL1JWPB3Z8QN63YSPHN25ZLAEHB7UT6V9Y49O6439JCOFK38IR99104NH4MVL3L16U7PE5X0NNRJQE334PKHCG6FC8YI29HRFCAX04YBJJPCMNKHGZJ00G4LJ6I1MRNXM2FK561GH31RKFYL88XJ3133ET839CTKPCHW5OSLZA50MZBWI8GN70F5NH27XN2Q2BU7GC05ZRZ1LSQ60OT1GTZNAJE48WP61ZBMFY1YJC5D5YGI3RE66K54F' where id=62; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='DXZ8JCRWV7Q0DSTX0TLW5XX0CZSZN5FFY6IWU7FCDADX86Q9JFVG4LNV0FUQQ6NFJJ4WI0TT1QK3VMA5O1VMX4Y3AWK6DJJTMU841BEP79RSHJIXR3A40KO7B45OX9Z1EHD75DWB7MYTI8QYRUJWATPBVD5D37KABKFFOIZ4AA7FP7CRM4FEWVIIQOM5KFZIQ4IYMLCZ41KASQVM2N0D51AQVJC2QKHRJ1462B2WYO7X4MPIBTKMNL5E2QJ6TEXRY' where id=62; -update noar ti set v2='DXZ8JCRWV7Q0DSTX0TLW5XX0CZSZN5FFY6IWU7FCDADX86Q9JFVG4LNV0FUQQ6NFJJ4WI0TT1QK3VMA5O1VMX4Y3AWK6DJJTMU841BEP79RSHJIXR3A40KO7B45OX9Z1EHD75DWB7MYTI8QYRUJWATPBVD5D37KABKFFOIZ4AA7FP7CRM4FEWVIIQOM5KFZIQ4IYMLCZ41KASQVM2N0D51AQVJC2QKHRJ1462B2WYO7X4MPIBTKMNL5E2QJ6TEXRY' where id=62; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='EUCJBIRS74PFT45AO86R084LRGIZ89P5S8TGU79I5A2X05QP83SGBNECXOQR22UEJ0BDJ9OSO5GICJDX9GSE8C1F2AGV0J13NIPQE8R5X3BF241W1GB7YHXFADQ3F1OLOOYPHZ16BMQKRVM94YOXS4127AWB2OZKOS8V8KU40PO8VUOMJVN0KG5ITQPP7W39HE80AWW8FE8LJTCNYBEL9OW6RFL8D8XGUVMN8GS6YQPDUWWQPCOY0DH9DZZX1QALS' where id=62; -update noar ti set v3='EUCJBIRS74PFT45AO86R084LRGIZ89P5S8TGU79I5A2X05QP83SGBNECXOQR22UEJ0BDJ9OSO5GICJDX9GSE8C1F2AGV0J13NIPQE8R5X3BF241W1GB7YHXFADQ3F1OLOOYPHZ16BMQKRVM94YOXS4127AWB2OZKOS8V8KU40PO8VUOMJVN0KG5ITQPP7W39HE80AWW8FE8LJTCNYBEL9OW6RFL8D8XGUVMN8GS6YQPDUWWQPCOY0DH9DZZX1QALS' where id=62; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='39CFH1HQ8UOXCI9E2R28NE4YAHBBVFY9E36BP0LS587UL44S2XTUFIVBWFPODZ5A6PO5LWXVFF1MSPK1U5XT813NZUAZJMJLK7ZD2YL39NTPG2NXZB134HGFCMTO50BCUQXWCZK5WXH03U7SO5T9Q8O2CV5H6EK7FVNBGIKTGUOWXM0TP3F566THK22OA7IQJUD19TV5OKLVY8XUONQGAE10YIDQCNTD5GOZ9IRZ3HING2MQMYPN5R8UB1GPTA6JA' where id=63; -update noar ti set v0='39CFH1HQ8UOXCI9E2R28NE4YAHBBVFY9E36BP0LS587UL44S2XTUFIVBWFPODZ5A6PO5LWXVFF1MSPK1U5XT813NZUAZJMJLK7ZD2YL39NTPG2NXZB134HGFCMTO50BCUQXWCZK5WXH03U7SO5T9Q8O2CV5H6EK7FVNBGIKTGUOWXM0TP3F566THK22OA7IQJUD19TV5OKLVY8XUONQGAE10YIDQCNTD5GOZ9IRZ3HING2MQMYPN5R8UB1GPTA6JA' where id=63; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='RS03SWW2C7K6A80ZS1JNZKYAXCQ6IG6NDR4VX30KJ16P9COD63BHO02C4A7LONEKR7SPJRWQY8BZD4IOUBNDG8UFUI4K5B0P4OOZTO4O6U6ETGCKMZME6P1ILTQKL4LCHWJ4B8FLMIOZR42DXPST9IZKM6CI1WAWK6VW7XYVNDC61Q42YS1A5KX9K7JDEP6GADCOU8ET65KXWZI5GMX7POYJU2YG6VN8LYIMUPNH5N5LN60KO38X14RLKA8YJW5OI' where id=63; -update noar ti set v1='RS03SWW2C7K6A80ZS1JNZKYAXCQ6IG6NDR4VX30KJ16P9COD63BHO02C4A7LONEKR7SPJRWQY8BZD4IOUBNDG8UFUI4K5B0P4OOZTO4O6U6ETGCKMZME6P1ILTQKL4LCHWJ4B8FLMIOZR42DXPST9IZKM6CI1WAWK6VW7XYVNDC61Q42YS1A5KX9K7JDEP6GADCOU8ET65KXWZI5GMX7POYJU2YG6VN8LYIMUPNH5N5LN60KO38X14RLKA8YJW5OI' where id=63; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='H5RAPPDQU8A0YUH4TRLD3DUAP3N4IGFFROZAO1G9V16KWA40SO3NMMAGCQHQ75XADXZPHNJA4X80AW1KR3PD479VLNIIQ0LME3VZJXBF6835AX8TIGVMCL56UGIAKQBSQ0BIRX0NY3LMCW8S4YOIX16LBLC7G4KFPZB5XJFW4KXFT5GEPEDW5ITFRX5XIGBOW43AFKPSXABQA04ZCY8IGV3UBI268YC9O73KE932AQ7LGW9OWI1PY8P9Q6ILIDJXV' where id=63; -update noar ti set v2='H5RAPPDQU8A0YUH4TRLD3DUAP3N4IGFFROZAO1G9V16KWA40SO3NMMAGCQHQ75XADXZPHNJA4X80AW1KR3PD479VLNIIQ0LME3VZJXBF6835AX8TIGVMCL56UGIAKQBSQ0BIRX0NY3LMCW8S4YOIX16LBLC7G4KFPZB5XJFW4KXFT5GEPEDW5ITFRX5XIGBOW43AFKPSXABQA04ZCY8IGV3UBI268YC9O73KE932AQ7LGW9OWI1PY8P9Q6ILIDJXV' where id=63; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='CJH5OL21PLDDG7AISNRCFBESYECZBA533K1MYP7YUMIYVYPXB3C5RFY6WC5MLB8AFTZO1DYVZSKUZOVAULLNWGORAI52OYKGW1K1UMYPDA3245OWWS6VZTX1L90VSWVOGWQQDH0BJ4G2JMTTH646QUMYOXNWMZF3W3QPP6OFZKKHXJQELSQYATQX7M92C6X2YUEM88MMQCZT6XT3215D7ATDS101PLK9DTZ6SK7OVWL4DGD907960Q3NSDL7QB6TF' where id=63; -update noar ti set v3='CJH5OL21PLDDG7AISNRCFBESYECZBA533K1MYP7YUMIYVYPXB3C5RFY6WC5MLB8AFTZO1DYVZSKUZOVAULLNWGORAI52OYKGW1K1UMYPDA3245OWWS6VZTX1L90VSWVOGWQQDH0BJ4G2JMTTH646QUMYOXNWMZF3W3QPP6OFZKKHXJQELSQYATQX7M92C6X2YUEM88MMQCZT6XT3215D7ATDS101PLK9DTZ6SK7OVWL4DGD907960Q3NSDL7QB6TF' where id=63; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='PCN8MXZ3YHRECE96RKQVEF393NXHCW7SQU82CPCFBB87Q5G1U71SJEOXCDOSQODQY536LZGFU64G9I2EMEBBNPQL7Z28XPCKK0JMMUD7DOJYKK9HKZNX8GMHVZ9EH39DPJEQ3ORMY7886M6WS1O79K6X2YB8EJEY0DVY2JVGUBY1GQEO19OK16SM1YYF1PWE295KCHVI41FND8DJSNXNTWBIXDRLIOYJ1DUQC626T9PCI31IQJ1JUJG6VSOM27JAZ' where id=64; -update noar ti set v0='PCN8MXZ3YHRECE96RKQVEF393NXHCW7SQU82CPCFBB87Q5G1U71SJEOXCDOSQODQY536LZGFU64G9I2EMEBBNPQL7Z28XPCKK0JMMUD7DOJYKK9HKZNX8GMHVZ9EH39DPJEQ3ORMY7886M6WS1O79K6X2YB8EJEY0DVY2JVGUBY1GQEO19OK16SM1YYF1PWE295KCHVI41FND8DJSNXNTWBIXDRLIOYJ1DUQC626T9PCI31IQJ1JUJG6VSOM27JAZ' where id=64; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='YIGIF0ZX8QLO64RFT1JXET0653QPXW7GQ131Z3AU254AJU194UU2TZYU2IIMEWU1IJ7XCG3F0QQ0BALFI5YHY2WNFUOG3RFMR4JTU73N6MX7DTR84VMZ1O6Z0F0N2HCC4AXD5N5PY5VBN3VLO1QEBMG73HFSTBUE5Q9VWPWPT17ZZHM17SR9AQBMR8FS70JYTMD6YVN0HU2O8FHY6EWTKOF1C4YVYOA2VNBFNNBZ1LO3SORHIN04K5FCEO0FSOGT1' where id=64; -update noar ti set v1='YIGIF0ZX8QLO64RFT1JXET0653QPXW7GQ131Z3AU254AJU194UU2TZYU2IIMEWU1IJ7XCG3F0QQ0BALFI5YHY2WNFUOG3RFMR4JTU73N6MX7DTR84VMZ1O6Z0F0N2HCC4AXD5N5PY5VBN3VLO1QEBMG73HFSTBUE5Q9VWPWPT17ZZHM17SR9AQBMR8FS70JYTMD6YVN0HU2O8FHY6EWTKOF1C4YVYOA2VNBFNNBZ1LO3SORHIN04K5FCEO0FSOGT1' where id=64; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='C4P5I84A0U101Q924KIC2P6ZAJCXS0D6C51NQ1U4ONHHDNNRC0JU6QMET0009627MF3WRXH2HSXKK0XEQDOPKJAN1AKJ38IW3S9JXVH51SNUE8WOHO25ZRTEU6HCFOVQL630PO8IQDXLBLQOF0NFDPHUHAMTBDLMH366Z3M78EPRAQ09K2X5RKLN16B96VFL8G59ELR9G6E9WV62L7M6EKH32J8ER5BZYW5B0H8QKY4Z1DNZ3GA2FW5D2QQPDKS7M' where id=64; -update noar ti set v2='C4P5I84A0U101Q924KIC2P6ZAJCXS0D6C51NQ1U4ONHHDNNRC0JU6QMET0009627MF3WRXH2HSXKK0XEQDOPKJAN1AKJ38IW3S9JXVH51SNUE8WOHO25ZRTEU6HCFOVQL630PO8IQDXLBLQOF0NFDPHUHAMTBDLMH366Z3M78EPRAQ09K2X5RKLN16B96VFL8G59ELR9G6E9WV62L7M6EKH32J8ER5BZYW5B0H8QKY4Z1DNZ3GA2FW5D2QQPDKS7M' where id=64; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='UPQLVCOOA8X666WEWY85BHB0VIYFT074071R8J27KWVLSQUWRIBEZKOL7HYRS9VS2F3D2451NLAAK1U7YK6HRKTSUTKLLD2D7J47S4R68EFCPPVB7RNCM4VKXEA6IB3OKGUNP0IG7W77S179Z5VSHN0IBMRUY0MXUX573IGJBCPAQA09PMSXRPLED5DZADQVBZJVRKOTM2AHPJXAPT4KC85TEGWLD4HCEXBLNUEXLCY987P1UM48P5EAPGC4BZMKS' where id=64; -update noar ti set v3='UPQLVCOOA8X666WEWY85BHB0VIYFT074071R8J27KWVLSQUWRIBEZKOL7HYRS9VS2F3D2451NLAAK1U7YK6HRKTSUTKLLD2D7J47S4R68EFCPPVB7RNCM4VKXEA6IB3OKGUNP0IG7W77S179Z5VSHN0IBMRUY0MXUX573IGJBCPAQA09PMSXRPLED5DZADQVBZJVRKOTM2AHPJXAPT4KC85TEGWLD4HCEXBLNUEXLCY987P1UM48P5EAPGC4BZMKS' where id=64; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='KW6ZLQWPP4QUOJC76OCDRZ6G74BEQQUWXMA5P5F80PJ49OXZWCR2JMD81NAE9YS0GKEPDOPEMUQ9M24NLJC57MXO8K3N1K6WQS1UZ47PY1T19LRSV5C66J1AA19RLWW47KPLLJKB73V5E9I0G464LO32YJLALAMA58DTP0C9CW7KXBED84704RVC5L6Z8Y6EISXV0QU2UN8WKEG49UMTZFPU0F6N4GJ68Q1CYX8IPJ1FNTLN6FNG8X54AE0NIALVU' where id=65; -update noar ti set v0='KW6ZLQWPP4QUOJC76OCDRZ6G74BEQQUWXMA5P5F80PJ49OXZWCR2JMD81NAE9YS0GKEPDOPEMUQ9M24NLJC57MXO8K3N1K6WQS1UZ47PY1T19LRSV5C66J1AA19RLWW47KPLLJKB73V5E9I0G464LO32YJLALAMA58DTP0C9CW7KXBED84704RVC5L6Z8Y6EISXV0QU2UN8WKEG49UMTZFPU0F6N4GJ68Q1CYX8IPJ1FNTLN6FNG8X54AE0NIALVU' where id=65; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='KIFMD4EKTW5JGB9J5QV6DCWWRPBFYEPI1995IWQ4H9ZVLYTOC3AF3IG301Z4D92YK1L95JNTVZVD93COUCNJNCRG7FW6N31NKXDJQJ8KCQ09TNO66FR9S7Z1EW9DHGH1ZJVHOH0CBGZ29NHGLOSBUP47TUHSQ9N265S565GTIPO2LT00E2KVBVT1T3DA0OJ6R0MSYDXFH0Z34C8IE9RFZS3T2YTQ2KFNJ296AXLSB4T1WAAM1OQY485YHC1Y9F8GQ' where id=65; -update noar ti set v1='KIFMD4EKTW5JGB9J5QV6DCWWRPBFYEPI1995IWQ4H9ZVLYTOC3AF3IG301Z4D92YK1L95JNTVZVD93COUCNJNCRG7FW6N31NKXDJQJ8KCQ09TNO66FR9S7Z1EW9DHGH1ZJVHOH0CBGZ29NHGLOSBUP47TUHSQ9N265S565GTIPO2LT00E2KVBVT1T3DA0OJ6R0MSYDXFH0Z34C8IE9RFZS3T2YTQ2KFNJ296AXLSB4T1WAAM1OQY485YHC1Y9F8GQ' where id=65; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='LT3SB6XVJCYKWLJ5XFOG20GGTFH417GYX503T08133NNW0EGC38J832FD4TQXAB47ROFYZ1JJW8HQ3WM848CWSQ3S6FSIH0TT4NA8MS1TY20I6LHNYL79ZKUDCTNBPZD9BGKB393BATUQ5NJ6G2JUFJYP9SUJHQ8W3NT659MSCPRB0GI4M1M0BAFATEEOGRZZI31G25B0YG7DMV9AH8TJ5ONBMZFCDU9ZHNSMPK4Q371ZHNEXCFKWYUL7DT5Z8PPZ' where id=65; -update noar ti set v2='LT3SB6XVJCYKWLJ5XFOG20GGTFH417GYX503T08133NNW0EGC38J832FD4TQXAB47ROFYZ1JJW8HQ3WM848CWSQ3S6FSIH0TT4NA8MS1TY20I6LHNYL79ZKUDCTNBPZD9BGKB393BATUQ5NJ6G2JUFJYP9SUJHQ8W3NT659MSCPRB0GI4M1M0BAFATEEOGRZZI31G25B0YG7DMV9AH8TJ5ONBMZFCDU9ZHNSMPK4Q371ZHNEXCFKWYUL7DT5Z8PPZ' where id=65; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='PRRX7TRDNUSBYOUFQA3ND47X6RELCDYQMNU9LA22PV0UC4YXJUTTSY111SMWM4CO923B7CXA79M5ERRTH4GWW8XUZX2CIHYML9U8TEJC3ENOL6HMCZ8JPYNNHPVTCN6G6K21DS6IQGSVVB5BSWB3CFDPX7MKK3DOLPEHSMZQ4DGMP74HXTOR1MTDM1H3J6ZH41SC03SVWOEGPGPAQFRUP04GKMXXRJLGSWHVQ5TEIAPVRYZ7EDEXDEC9C41M4TGT8' where id=65; -update noar ti set v3='PRRX7TRDNUSBYOUFQA3ND47X6RELCDYQMNU9LA22PV0UC4YXJUTTSY111SMWM4CO923B7CXA79M5ERRTH4GWW8XUZX2CIHYML9U8TEJC3ENOL6HMCZ8JPYNNHPVTCN6G6K21DS6IQGSVVB5BSWB3CFDPX7MKK3DOLPEHSMZQ4DGMP74HXTOR1MTDM1H3J6ZH41SC03SVWOEGPGPAQFRUP04GKMXXRJLGSWHVQ5TEIAPVRYZ7EDEXDEC9C41M4TGT8' where id=65; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='SBBNU41MNITGINJGLWXUVNS93PEO7C2ZN2LK37CH327WKYRMC9ZMWA8ET2RQ6HYZFUTIWNMJQ0CQ4ZRKRXHNHIGX0T5J4B8IJ2YXZ5FH87ETK72F1WLZVR16DDXY7MG8L05RMFJVHE3XH9EROG3SSBT8UTU7THOIQF5C571UMEAIMYJ5BFRKAUQI2NGF6ITEVA806YPNYAMTW1DJGUFGF4Y1KLHFBT5HQW4AM6I4WBARCR81JREUURYUNV162OSEW' where id=66; -update noar ti set v0='SBBNU41MNITGINJGLWXUVNS93PEO7C2ZN2LK37CH327WKYRMC9ZMWA8ET2RQ6HYZFUTIWNMJQ0CQ4ZRKRXHNHIGX0T5J4B8IJ2YXZ5FH87ETK72F1WLZVR16DDXY7MG8L05RMFJVHE3XH9EROG3SSBT8UTU7THOIQF5C571UMEAIMYJ5BFRKAUQI2NGF6ITEVA806YPNYAMTW1DJGUFGF4Y1KLHFBT5HQW4AM6I4WBARCR81JREUURYUNV162OSEW' where id=66; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='2HDHQ5PJVYQR7CSPMGK5NB1LXPE382STS6110MRU7VDF1RFKQMAOGQIGTG56M5M3P0MPTY55ZACTS03P142PAH1P500CIZJSQ58MDMVCUR5AIMZC5DS8QNKA0E0QG4K2KVVC9V520O0MQ79EE3UFU9B888D0JUPQ7WEPDY85HEND130AIKGUPZGMSP8T6OYPGLY4PWT44JPSB9RXWRQ0L9TCAM126JRE7WOZ33VDP47XXWK8IHXHCNLEXOVKLWXTQ' where id=66; -update noar ti set v1='2HDHQ5PJVYQR7CSPMGK5NB1LXPE382STS6110MRU7VDF1RFKQMAOGQIGTG56M5M3P0MPTY55ZACTS03P142PAH1P500CIZJSQ58MDMVCUR5AIMZC5DS8QNKA0E0QG4K2KVVC9V520O0MQ79EE3UFU9B888D0JUPQ7WEPDY85HEND130AIKGUPZGMSP8T6OYPGLY4PWT44JPSB9RXWRQ0L9TCAM126JRE7WOZ33VDP47XXWK8IHXHCNLEXOVKLWXTQ' where id=66; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='ZLK6HOEVVS608QLNIT3W987DIV5PF15NKPGJA98DXBR17EE3E0D50WC502PLHH7O16LR8W79PXLXVEME1C1FB22LC0023EQJVY1XT7HQ0QUN056YRJZS2D5LLICO70L554V98YFUJ6XHKV3TYJBIS66Q9UNF1TK5DLN6D3AZ369U78M4UGSD52DT77TMROJUTRESOD4ZE4CPHJ5IO9DC7THQZN8SFXMFXJAJDUXF934ETT76218XZ4FHLPTCNNDJM' where id=66; -update noar ti set v2='ZLK6HOEVVS608QLNIT3W987DIV5PF15NKPGJA98DXBR17EE3E0D50WC502PLHH7O16LR8W79PXLXVEME1C1FB22LC0023EQJVY1XT7HQ0QUN056YRJZS2D5LLICO70L554V98YFUJ6XHKV3TYJBIS66Q9UNF1TK5DLN6D3AZ369U78M4UGSD52DT77TMROJUTRESOD4ZE4CPHJ5IO9DC7THQZN8SFXMFXJAJDUXF934ETT76218XZ4FHLPTCNNDJM' where id=66; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='TMWQ5VG5JM2KD4UH7XUFMO7RLZRJJL2UKH8LOFLX675RLRO0BE87574T7DGM3P0U0Z6UO8M1LWFNEW416P8BS8RSPZ7QQTXWCIU6HMM8LRESOT16KYVW0FKHUS12GYJ41X1P90Z1K43F0WS0TA57DEO10ZO5BANXG8TWDZX33DWNTOXMCVSWYFY93C04PLWIDF8W27S6540ILYE8709CWRPYZUYC15WBMZU9FOBFCAWC08UICWY1LBC7I5FJ2O25N' where id=66; -update noar ti set v3='TMWQ5VG5JM2KD4UH7XUFMO7RLZRJJL2UKH8LOFLX675RLRO0BE87574T7DGM3P0U0Z6UO8M1LWFNEW416P8BS8RSPZ7QQTXWCIU6HMM8LRESOT16KYVW0FKHUS12GYJ41X1P90Z1K43F0WS0TA57DEO10ZO5BANXG8TWDZX33DWNTOXMCVSWYFY93C04PLWIDF8W27S6540ILYE8709CWRPYZUYC15WBMZU9FOBFCAWC08UICWY1LBC7I5FJ2O25N' where id=66; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='YFNAB4FB5Z6MBFPDRFWJYVTDXQUAIANDTZ63TSX7N9VRX3ZJCPAHOJAGDXKISNGT6IEQNYFW6UCRWKI77W5K06G4O8RZ6JV9LW8RSRGH4EQ81ECVQWRJVNQIRRT0GNMED29SVHZRO3J9JBUU9Q265E2DX2J1J3P991D5PKQPYFSKFY5LTBC4JSJKPZG7QHND7IIRXF8S8O5USKFDX6PD9ETYN4E951HPWKOMJL3QO4Y3M8K3UHYAA1X1E5WYND4D4' where id=67; -update noar ti set v0='YFNAB4FB5Z6MBFPDRFWJYVTDXQUAIANDTZ63TSX7N9VRX3ZJCPAHOJAGDXKISNGT6IEQNYFW6UCRWKI77W5K06G4O8RZ6JV9LW8RSRGH4EQ81ECVQWRJVNQIRRT0GNMED29SVHZRO3J9JBUU9Q265E2DX2J1J3P991D5PKQPYFSKFY5LTBC4JSJKPZG7QHND7IIRXF8S8O5USKFDX6PD9ETYN4E951HPWKOMJL3QO4Y3M8K3UHYAA1X1E5WYND4D4' where id=67; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='Y30NOVYA0YZLK4QP13UEGQAF90M2E9MOY76OFTZA8RT67GJDS8HQZBB9G7TGFA8DNIEUW8FQSSZ8A6QFUQSWNPAZ3F1VSXGLFG30UODO64GG1917465NHSWG41EBQNMZGZB25YUOL1RPD2QHXQID4S35MRS7DG5OX2XX0JDF2U4UR37N5B3C0WKA8CC83BBSVYWGIZAV8QWIVW85Z2ZIDU5LIKVSBT4E8HMVPNTJWI289NX628ZA0A81DCMVP2E2G' where id=67; -update noar ti set v1='Y30NOVYA0YZLK4QP13UEGQAF90M2E9MOY76OFTZA8RT67GJDS8HQZBB9G7TGFA8DNIEUW8FQSSZ8A6QFUQSWNPAZ3F1VSXGLFG30UODO64GG1917465NHSWG41EBQNMZGZB25YUOL1RPD2QHXQID4S35MRS7DG5OX2XX0JDF2U4UR37N5B3C0WKA8CC83BBSVYWGIZAV8QWIVW85Z2ZIDU5LIKVSBT4E8HMVPNTJWI289NX628ZA0A81DCMVP2E2G' where id=67; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='KHR0E8RGBJ5V4ID9XJRKPZ0102V9GPECTYAK3U47W005S897NVE7MP0085WZVSE9629KMSZDGQ5KH1BUW2KYVBQFC01JRNI0I478GBLNGRZPX22BFKKZTMPHIC4B5XBTBIU1VU2ZOV1XA7YM9KHNI5QXWIE01Z2CKHK1FN2M6CVWFWA1QIDBRQSZWC7Z37J1EHBOIBC88ITHBLDR8LW0PSSMA1MXTJ6VJNKKMW85EYQ6V3H2TXMA7SS4X8JFRVMMT' where id=67; -update noar ti set v2='KHR0E8RGBJ5V4ID9XJRKPZ0102V9GPECTYAK3U47W005S897NVE7MP0085WZVSE9629KMSZDGQ5KH1BUW2KYVBQFC01JRNI0I478GBLNGRZPX22BFKKZTMPHIC4B5XBTBIU1VU2ZOV1XA7YM9KHNI5QXWIE01Z2CKHK1FN2M6CVWFWA1QIDBRQSZWC7Z37J1EHBOIBC88ITHBLDR8LW0PSSMA1MXTJ6VJNKKMW85EYQ6V3H2TXMA7SS4X8JFRVMMT' where id=67; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='UJBA2DGEZYS72P7K7LXGLNDO4MC2RJ1WY1YYM04E42GBIKKXAUEHR47DBBQ9XJFQ1D86CMDEE3UB8M7P5NJSFCN45NJBBSIVAGRS63YMKLOG60G97GCPKJ4MMEUB11B69MLW7809XE2HQPFJF9KS8B5TLLT9FTZ49MODX1NR3CQ52EDJ4F7BZK5MEOTAEFCVTN99RUGW6SAW1LTDD0Q7I8NGCRHUCO1JMS8N9ZXIH4MWH7DCVIXZ3F2QDSO4G1R00' where id=67; -update noar ti set v3='UJBA2DGEZYS72P7K7LXGLNDO4MC2RJ1WY1YYM04E42GBIKKXAUEHR47DBBQ9XJFQ1D86CMDEE3UB8M7P5NJSFCN45NJBBSIVAGRS63YMKLOG60G97GCPKJ4MMEUB11B69MLW7809XE2HQPFJF9KS8B5TLLT9FTZ49MODX1NR3CQ52EDJ4F7BZK5MEOTAEFCVTN99RUGW6SAW1LTDD0Q7I8NGCRHUCO1JMS8N9ZXIH4MWH7DCVIXZ3F2QDSO4G1R00' where id=67; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='BH3ESXIZF6HIPMSRF21LF0YTBVAMG6557ZPNSSLKQ2O4RJ7ZPHI0DGTUZ7GA07ZHHHCTF263SHOR3X6KUWI5V53E42AX67TJHUFP8E48UBRK9BIC7M7OT7WF2REYZ9NBYZG99FI5OGKE5A7FRZMTNFLBZ07RUGEJ1YECL2ZZGRB04C1GUWVH941D35433PTA6MS9MDSIVR4SIYKJGES01KZ2HKDB3KG4Q7Q3GWYV5SDG30T5M7FRK73XYTH5E64XP' where id=68; -update noar ti set v0='BH3ESXIZF6HIPMSRF21LF0YTBVAMG6557ZPNSSLKQ2O4RJ7ZPHI0DGTUZ7GA07ZHHHCTF263SHOR3X6KUWI5V53E42AX67TJHUFP8E48UBRK9BIC7M7OT7WF2REYZ9NBYZG99FI5OGKE5A7FRZMTNFLBZ07RUGEJ1YECL2ZZGRB04C1GUWVH941D35433PTA6MS9MDSIVR4SIYKJGES01KZ2HKDB3KG4Q7Q3GWYV5SDG30T5M7FRK73XYTH5E64XP' where id=68; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='02YIDV7SRYPPTC3VPUOWWGBQHHOOMCFSRHSNHDWGZJQ09ZNPJERQKMHP4XPMECFFJAPUT2UG4O0WMCA9XY2WB614X2PXBNO0YYD7URBMSQG27HJ81B9BGHU55L54H19AV0GBP3QDAF1BB8S3OFBWCKQQ8YK1HXMDNNA7SJCRL61XCHHD1H2JV3AU8FAWR26TJTFVMNRRKAAEUD9RPLCENTYEVG27QBA09HD18UHUMPB874G2OVI6JHQ4BFGMJKUXN' where id=68; -update noar ti set v1='02YIDV7SRYPPTC3VPUOWWGBQHHOOMCFSRHSNHDWGZJQ09ZNPJERQKMHP4XPMECFFJAPUT2UG4O0WMCA9XY2WB614X2PXBNO0YYD7URBMSQG27HJ81B9BGHU55L54H19AV0GBP3QDAF1BB8S3OFBWCKQQ8YK1HXMDNNA7SJCRL61XCHHD1H2JV3AU8FAWR26TJTFVMNRRKAAEUD9RPLCENTYEVG27QBA09HD18UHUMPB874G2OVI6JHQ4BFGMJKUXN' where id=68; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='THLUX81EZAMATVGEYRELNEV8JF4UXX6ATOJRQILZJ4K2FXZ7S11BDSL1HWWCJV2PQZ5OQZ7ZUXSYQVGSMQ9TXL04J2AFA9A4HRAQUXLM57BU3AJIRA7M1DSGM5YFTXLHGDPBB47SWZUYVHJ6IA7SABRRG895RL8NC4LA3ZG4OBBRPILL1XWMF9Z4TM5W46DXLUNS5T53OU256XHPRYBJDVP9DUKIWEYA8163IFO58HB3OCDTA965HFI61JYHBAXES' where id=68; -update noar ti set v2='THLUX81EZAMATVGEYRELNEV8JF4UXX6ATOJRQILZJ4K2FXZ7S11BDSL1HWWCJV2PQZ5OQZ7ZUXSYQVGSMQ9TXL04J2AFA9A4HRAQUXLM57BU3AJIRA7M1DSGM5YFTXLHGDPBB47SWZUYVHJ6IA7SABRRG895RL8NC4LA3ZG4OBBRPILL1XWMF9Z4TM5W46DXLUNS5T53OU256XHPRYBJDVP9DUKIWEYA8163IFO58HB3OCDTA965HFI61JYHBAXES' where id=68; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='P4L46NDPS13Y8GI9Q1MJLQ5Y5154K57CXJVAV3G55V4UKL5UUVMR5B5ACAD40TFSV3AVMU424SZXUAGMEIQ3N0GHSFTPZWIVECS3VZFFQBY595YNR0ALF2TRR2QCSZYCGT6SFTTAH588U3VWBFNCY61TLXUK96QPZHDF4PSTC0T4BADJI53BX34QRG08YDRBCB13VAQUAR52BB3ISMEOUCF2XN8W0TVEUG99Z52PZ2M4DBVOU3EPU025OP4IKZ05T' where id=68; -update noar ti set v3='P4L46NDPS13Y8GI9Q1MJLQ5Y5154K57CXJVAV3G55V4UKL5UUVMR5B5ACAD40TFSV3AVMU424SZXUAGMEIQ3N0GHSFTPZWIVECS3VZFFQBY595YNR0ALF2TRR2QCSZYCGT6SFTTAH588U3VWBFNCY61TLXUK96QPZHDF4PSTC0T4BADJI53BX34QRG08YDRBCB13VAQUAR52BB3ISMEOUCF2XN8W0TVEUG99Z52PZ2M4DBVOU3EPU025OP4IKZ05T' where id=68; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='4WD9AP7AJNXDWXZILNE9Q54GSUUY2XR590TSPN2ABD9LVORNQAS9LZI08P405EM4NPBBC1L7SLW5VQR6IK03PHWX0HQIV0X3GXOWW0V8DJT87R44BX2V0UTOJU6ZWHT0RCKHWK96RU0I1O4JOV7J9V1XIZ9L8N7ABQCP1R43I17QP470VU92WL88I00JD9ISWDTCXP448U9T3WJCVBH5C16GIEIPMDA7ISHZGXNA4LEUKO9QETDPCXRUF0Q698E7M' where id=69; -update noar ti set v0='4WD9AP7AJNXDWXZILNE9Q54GSUUY2XR590TSPN2ABD9LVORNQAS9LZI08P405EM4NPBBC1L7SLW5VQR6IK03PHWX0HQIV0X3GXOWW0V8DJT87R44BX2V0UTOJU6ZWHT0RCKHWK96RU0I1O4JOV7J9V1XIZ9L8N7ABQCP1R43I17QP470VU92WL88I00JD9ISWDTCXP448U9T3WJCVBH5C16GIEIPMDA7ISHZGXNA4LEUKO9QETDPCXRUF0Q698E7M' where id=69; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='VEOT7T36B1XMEAH5FXQBPRQ8D23CW0FQTZSGSGNPIJA27CQCB3OK06HT06HJ0BO3R7D4PYSZSCHMQV763BM95WAJ5CNV7N6C9SQJT9MJ45N6XIHNV66VXL7Y7W9PX51DPKVMC7HAS78S368NM1V716ISVJCRI0RMT7Y733PRUSQ1A6NC9ACWCI7QROEJ1F679JIRWRU3U7K9J388AWF90B716GE1PGGDLEEAROWY9HIPLV2QY5TRAOUNYNOM8WVLL' where id=69; -update noar ti set v1='VEOT7T36B1XMEAH5FXQBPRQ8D23CW0FQTZSGSGNPIJA27CQCB3OK06HT06HJ0BO3R7D4PYSZSCHMQV763BM95WAJ5CNV7N6C9SQJT9MJ45N6XIHNV66VXL7Y7W9PX51DPKVMC7HAS78S368NM1V716ISVJCRI0RMT7Y733PRUSQ1A6NC9ACWCI7QROEJ1F679JIRWRU3U7K9J388AWF90B716GE1PGGDLEEAROWY9HIPLV2QY5TRAOUNYNOM8WVLL' where id=69; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='UNLXFL1CIO2BZEXF0HF38R1I7R8ATZXFCAUBEPWUA6FASR8F65H54LLGHPPS0LJILYE4OBHVKTRS0CY35VS8QLZC2LBPXDTW3ZAQ4E3AOTSZ49KKSLZWGRO3RD36GG9KQYYY7FI5JEF56INDMR8WDSHEA3P886ZGWIGMT9YSM6497IFD6UGRTY2VEI8UZSAPIME3JA70QY0VKQA35IDDGMOJRC6TL28NWCLL1HIPFKD81GR44O1UA9JG2ABLQW9ST' where id=69; -update noar ti set v2='UNLXFL1CIO2BZEXF0HF38R1I7R8ATZXFCAUBEPWUA6FASR8F65H54LLGHPPS0LJILYE4OBHVKTRS0CY35VS8QLZC2LBPXDTW3ZAQ4E3AOTSZ49KKSLZWGRO3RD36GG9KQYYY7FI5JEF56INDMR8WDSHEA3P886ZGWIGMT9YSM6497IFD6UGRTY2VEI8UZSAPIME3JA70QY0VKQA35IDDGMOJRC6TL28NWCLL1HIPFKD81GR44O1UA9JG2ABLQW9ST' where id=69; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='XNK3NWH69GBPW2ZKVHD4IAKUZM55I921YDBDULTCUEGVOFJIEIX02ODA03SZRNCMA88HUF4P0HPGFTRPBVYWVX7VESP5F2NGL0JWJTLB0V0SNZMWK11A0HLFYL5P2IAA84QKWDY70HWCNOLTDJPQF439HLFD73U999II9IPF6FW976S0YTT4JSB61FEMAGGM7F9HKPFGRNYF2ZJZM9Z034BUKM0YG90UM982ZBJQL4HB0EGJKPZWOZK164BGVCHHL' where id=69; -update noar ti set v3='XNK3NWH69GBPW2ZKVHD4IAKUZM55I921YDBDULTCUEGVOFJIEIX02ODA03SZRNCMA88HUF4P0HPGFTRPBVYWVX7VESP5F2NGL0JWJTLB0V0SNZMWK11A0HLFYL5P2IAA84QKWDY70HWCNOLTDJPQF439HLFD73U999II9IPF6FW976S0YTT4JSB61FEMAGGM7F9HKPFGRNYF2ZJZM9Z034BUKM0YG90UM982ZBJQL4HB0EGJKPZWOZK164BGVCHHL' where id=69; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='JOGIVDUE1SLU7XGGAAVGY4CNL724W4RL43JJWDQTW8Z9CJBMBWZ2IZMA2XOPS9CFFWGZ4UFY40TY9UYRGGCKLQINYVAMW9CHVUQG168LE0SVUO5PAT275IH3JX6UXDQH9Y9GRVIZRF1YWJUAJ671ZA9K1KMD95S6FI4DE2QW6LOY3I885GHJXQ5Y70GKS853T481Q7T89X7JD48ZG0WKPEFJOC00IFJX45AUMOMH5J93GVZKYOYQ91NM71J4IESXB' where id=70; -update noar ti set v0='JOGIVDUE1SLU7XGGAAVGY4CNL724W4RL43JJWDQTW8Z9CJBMBWZ2IZMA2XOPS9CFFWGZ4UFY40TY9UYRGGCKLQINYVAMW9CHVUQG168LE0SVUO5PAT275IH3JX6UXDQH9Y9GRVIZRF1YWJUAJ671ZA9K1KMD95S6FI4DE2QW6LOY3I885GHJXQ5Y70GKS853T481Q7T89X7JD48ZG0WKPEFJOC00IFJX45AUMOMH5J93GVZKYOYQ91NM71J4IESXB' where id=70; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='EYOMAU4VLHUE720BDNQ2GG0ZM2ITV7NMJ02P66WE7K9OUXKSBVB18S9514K9Y86EXOZZRNUW6ZGKOL09PFQF3A32SKDDNTFAJOJT06Q6FYEY5EH0BYN638PGPXQRKULK1CSCWHV4Z1MKCPZL9F0P6D9F4YEYPA7GJSU2ST8H02O3LTUA36SF7ZKNWHTGA1AEDAZPE9N811NGDTKJ1GV1G1R9TV96TS7VTWWS18FLARXMK5LM3IZU57P2U0CHA6KU9' where id=70; -update noar ti set v1='EYOMAU4VLHUE720BDNQ2GG0ZM2ITV7NMJ02P66WE7K9OUXKSBVB18S9514K9Y86EXOZZRNUW6ZGKOL09PFQF3A32SKDDNTFAJOJT06Q6FYEY5EH0BYN638PGPXQRKULK1CSCWHV4Z1MKCPZL9F0P6D9F4YEYPA7GJSU2ST8H02O3LTUA36SF7ZKNWHTGA1AEDAZPE9N811NGDTKJ1GV1G1R9TV96TS7VTWWS18FLARXMK5LM3IZU57P2U0CHA6KU9' where id=70; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='58NRQPHAGRVFTOAOEU3BR1RNRT2TADW9ZM46SY93SKRLXBLKLIEY5I5PVHDGA43A14QOQ4IGH7DG70OV3XQP6I6MP97DHJ54MDW8SKABF2T2D9YQ2IFSY5Y87R2QC1EWORBE94EJWZN01NJ5FNW744B32O4X3QFHG96PTM7RHC0GHIKAYCV80C9VWVVMWWGDADCKIAECLMEQAZ204T8AK88ZJ6X66IQB61KAGYTIZ6RX7XONXBNOR4RN1R0VW2HCC' where id=70; -update noar ti set v2='58NRQPHAGRVFTOAOEU3BR1RNRT2TADW9ZM46SY93SKRLXBLKLIEY5I5PVHDGA43A14QOQ4IGH7DG70OV3XQP6I6MP97DHJ54MDW8SKABF2T2D9YQ2IFSY5Y87R2QC1EWORBE94EJWZN01NJ5FNW744B32O4X3QFHG96PTM7RHC0GHIKAYCV80C9VWVVMWWGDADCKIAECLMEQAZ204T8AK88ZJ6X66IQB61KAGYTIZ6RX7XONXBNOR4RN1R0VW2HCC' where id=70; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='P2JYWEB3TGVNBLWEEOS0S5VCQH508JWPYBF5K3EJ3CZ62G4PW10BWPMMGY159RHEPZKW4WKYOSSD734PVWMC8PE8BT8NAH5Z7KA3GGM4HIKZ2ZOSF9LKKJQXD1E9XJ96V58O7MODJMN6XODOX262MD2BU957WH886ZOXNM0L3ESEX51G97L2T0TWJX64ARIIE2JL7LNVLL4V5HIEEXUBQDDG3ACGMQAA3C6CESEP0BO10MUSR789S0Y7XGGIYS579' where id=70; -update noar ti set v3='P2JYWEB3TGVNBLWEEOS0S5VCQH508JWPYBF5K3EJ3CZ62G4PW10BWPMMGY159RHEPZKW4WKYOSSD734PVWMC8PE8BT8NAH5Z7KA3GGM4HIKZ2ZOSF9LKKJQXD1E9XJ96V58O7MODJMN6XODOX262MD2BU957WH886ZOXNM0L3ESEX51G97L2T0TWJX64ARIIE2JL7LNVLL4V5HIEEXUBQDDG3ACGMQAA3C6CESEP0BO10MUSR789S0Y7XGGIYS579' where id=70; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='WEZEQZ33MIVHBUAIQ9H37T8RNOF3TZ8PMT18E6KK5IP43NCMUWG185FN3ING5IR80SGBRI75WVB538IGNPSB5XHH72Y02FVWH9ROMKMWNYH1NTBBILU46QVSLUUKM9IH05IDHOYZZA6CWDONV9WKQ0H853YCCJ450EKA8D4TVC7A6KVO68T6KN5JAFLPD6RPC7IEXQ33MP087HLHCU0542F9R9SDN1IXY6NGV52FQUSILDB7ZI7MW4E1R85XF8U6J' where id=71; -update noar ti set v0='WEZEQZ33MIVHBUAIQ9H37T8RNOF3TZ8PMT18E6KK5IP43NCMUWG185FN3ING5IR80SGBRI75WVB538IGNPSB5XHH72Y02FVWH9ROMKMWNYH1NTBBILU46QVSLUUKM9IH05IDHOYZZA6CWDONV9WKQ0H853YCCJ450EKA8D4TVC7A6KVO68T6KN5JAFLPD6RPC7IEXQ33MP087HLHCU0542F9R9SDN1IXY6NGV52FQUSILDB7ZI7MW4E1R85XF8U6J' where id=71; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='CQ5RZB0WIX9NV012C70BFL41IW3KBXI35F5063R3N3RUMGNOQ8I3XC4EN3ND2IQGZHLEMN1QDF79C76GVJLP0AR8IZC6YQMJ514XGOC4BS7ZKCH4NOE16YA55JIXL66DBVC05QQEQ9ZQ3C9KUY2SAQCV2SCPCCNI0I8NYALWM8VVWH5K7PWVKA52OX0D4CG0D9TGOULGGPA0DV30I0OCV0EBKAJHOG43DHF8HDQD8Z4PDG10ZEAT5UY5V5RV9YQBR' where id=71; -update noar ti set v1='CQ5RZB0WIX9NV012C70BFL41IW3KBXI35F5063R3N3RUMGNOQ8I3XC4EN3ND2IQGZHLEMN1QDF79C76GVJLP0AR8IZC6YQMJ514XGOC4BS7ZKCH4NOE16YA55JIXL66DBVC05QQEQ9ZQ3C9KUY2SAQCV2SCPCCNI0I8NYALWM8VVWH5K7PWVKA52OX0D4CG0D9TGOULGGPA0DV30I0OCV0EBKAJHOG43DHF8HDQD8Z4PDG10ZEAT5UY5V5RV9YQBR' where id=71; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='BNRB43X5QK2RLH59TRW9GMJOY270YNIZGMLYBMNVCW3ALG6IWWCHAL2OKVV7YWF5VKTOLGBLZVTDTPUVDTI7D8T6FWR64XA4Y6VDBIOF5E8NJFMGX2R0SBK0UJC8IS4TIO4VJHTWHN90QMUZIMBW25CXGC9PBEFH0SP2ITLQ15SDLGYXHN71M1G5LY1Q99ONAEHKI5B5OVHK1RFAHC5A11T2L5427O1DBCRIKD1FUC7SDR7IM0ESH20LSBC39YUY3' where id=71; -update noar ti set v2='BNRB43X5QK2RLH59TRW9GMJOY270YNIZGMLYBMNVCW3ALG6IWWCHAL2OKVV7YWF5VKTOLGBLZVTDTPUVDTI7D8T6FWR64XA4Y6VDBIOF5E8NJFMGX2R0SBK0UJC8IS4TIO4VJHTWHN90QMUZIMBW25CXGC9PBEFH0SP2ITLQ15SDLGYXHN71M1G5LY1Q99ONAEHKI5B5OVHK1RFAHC5A11T2L5427O1DBCRIKD1FUC7SDR7IM0ESH20LSBC39YUY3' where id=71; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='6I0VFCYZZI9XTQK557TD6K7OWWWJMKYU1X002UGCEM0RGYJ9QLRVRASD9DFQO7Z9L2JU2DSJNCV299B4AH6UELTUA0ZP1L6QEA49SY1ZDQL1SHB0DHGBCXSSP1WYC57MNNT52HQY769PSULEOZZ79P0HHBCU1QCFO2IH7YWGI5R1009OYANG9ZTTLLW915GZQUZR932CW513M05UATVCXXWG43BR0DN14G17W65YJ23B4V5HJS57T78D7NQF05RGQ' where id=71; -update noar ti set v3='6I0VFCYZZI9XTQK557TD6K7OWWWJMKYU1X002UGCEM0RGYJ9QLRVRASD9DFQO7Z9L2JU2DSJNCV299B4AH6UELTUA0ZP1L6QEA49SY1ZDQL1SHB0DHGBCXSSP1WYC57MNNT52HQY769PSULEOZZ79P0HHBCU1QCFO2IH7YWGI5R1009OYANG9ZTTLLW915GZQUZR932CW513M05UATVCXXWG43BR0DN14G17W65YJ23B4V5HJS57T78D7NQF05RGQ' where id=71; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='GEA32VYUZEO4Y8E3313TLVOETJG4D885IA0H72XLIVD42QTWDJPZPGVVDMDA4QTN24N6X2OOSMCTYNEAL3JBZ9PXGK0T7HGVOCSKJX0PY2ULLD3PQ4ANTN168B86S698JNX01MTYO3Y8S9EF43JE7HEQU4ZRLR4L17NN9I7IKWMP77B02YMS668ZRI4Y29YZ4BROMNTWIYD76X13KIP2P4QIJ27LCQ46R3YE2U1EVG2TJBOKU6ATCUOC828ZHVPOK' where id=72; -update noar ti set v0='GEA32VYUZEO4Y8E3313TLVOETJG4D885IA0H72XLIVD42QTWDJPZPGVVDMDA4QTN24N6X2OOSMCTYNEAL3JBZ9PXGK0T7HGVOCSKJX0PY2ULLD3PQ4ANTN168B86S698JNX01MTYO3Y8S9EF43JE7HEQU4ZRLR4L17NN9I7IKWMP77B02YMS668ZRI4Y29YZ4BROMNTWIYD76X13KIP2P4QIJ27LCQ46R3YE2U1EVG2TJBOKU6ATCUOC828ZHVPOK' where id=72; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='KKI43JO85AAO0CU50JEGZC50F0DZ11QRKC2HA9U88YJXSHL1I9K2G9JYX25NWZNNI3UK5ZML0FAMLQ7QI75DJFAZSSP8DFP81MYA1JQDNWHKUWDJX4DGECAYNOCGS89WYYA47B7HD8IG36EBOWOP6CMH4XZOQDTGWWTONV60CYXPHMWLZX6IJYFRK0YV4D4EH205SQS2J2TO3NL9AIQ9WJV2D4QYBC9C278WS08DUQDQB2MJ1HUI1ECSGP8XN0BP6' where id=72; -update noar ti set v1='KKI43JO85AAO0CU50JEGZC50F0DZ11QRKC2HA9U88YJXSHL1I9K2G9JYX25NWZNNI3UK5ZML0FAMLQ7QI75DJFAZSSP8DFP81MYA1JQDNWHKUWDJX4DGECAYNOCGS89WYYA47B7HD8IG36EBOWOP6CMH4XZOQDTGWWTONV60CYXPHMWLZX6IJYFRK0YV4D4EH205SQS2J2TO3NL9AIQ9WJV2D4QYBC9C278WS08DUQDQB2MJ1HUI1ECSGP8XN0BP6' where id=72; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='B3AR14NAJIBFS6WXNQDU9E2GSL0LSU855ILBS36KUBLF6VK81I134H4UC7F428MV7Z1KHX67NBZM1XH84UATRZWJF0MO6V1LEE24MCLDCN52YRL4A21CF9DSAEMMNK6XGH39XWIKNHXFQIB3FAFZ9VZLVQBILS24UMYZ77LJ2YWOX7TIHGLRTGHIDQOYZ48ETFRVQFDEMJ0Z2XVINPTIZJEKZ3JRUZ77860N1O4NCIQSFMYJX4XKXM65WKK9G0Q2L' where id=72; -update noar ti set v2='B3AR14NAJIBFS6WXNQDU9E2GSL0LSU855ILBS36KUBLF6VK81I134H4UC7F428MV7Z1KHX67NBZM1XH84UATRZWJF0MO6V1LEE24MCLDCN52YRL4A21CF9DSAEMMNK6XGH39XWIKNHXFQIB3FAFZ9VZLVQBILS24UMYZ77LJ2YWOX7TIHGLRTGHIDQOYZ48ETFRVQFDEMJ0Z2XVINPTIZJEKZ3JRUZ77860N1O4NCIQSFMYJX4XKXM65WKK9G0Q2L' where id=72; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='Q3PKU8ERQ21LXTL8B4NJLT2TNH3FEO4OEXROZU4CMLO2BQPPBOP2J4Z3QUP38YPWL01ON0HPDZSLQDFCF3CSVQMBW39PVMN7JJWGHWYNCQKAT9MQX017WXG9M1LAWJMZCIDA0OQ5BQ9CZ8V2WOAQGJYBW3NOGH6RWX3F0828B5H4K0HA417NUIDQPIVF0Y1P3RO8CN0HMDSDHO8NJ0YQ4D78WVSMHHIE8MJOTVVT9ZYMFTH8L2YY9IBUAIQ59VNNL' where id=72; -update noar ti set v3='Q3PKU8ERQ21LXTL8B4NJLT2TNH3FEO4OEXROZU4CMLO2BQPPBOP2J4Z3QUP38YPWL01ON0HPDZSLQDFCF3CSVQMBW39PVMN7JJWGHWYNCQKAT9MQX017WXG9M1LAWJMZCIDA0OQ5BQ9CZ8V2WOAQGJYBW3NOGH6RWX3F0828B5H4K0HA417NUIDQPIVF0Y1P3RO8CN0HMDSDHO8NJ0YQ4D78WVSMHHIE8MJOTVVT9ZYMFTH8L2YY9IBUAIQ59VNNL' where id=72; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='OJQVYIHHZDJEMWVRUUWIYNQ2B82XL2LPN5ENX334LFZ4KYAW2SSFH9JPUB1G9DOLSC4CW6HY1FQDQG4UNGBAZUKC1JFZ6VNHCPVQX9Y6DXAHR0MXSJN19VBI5A6SNFCL6VW5X37HPM2A6BMHCAA752LLDYRH71W9QUW4QSJ2FW8VOLQV1A138BOA9QL4OB55FL3R5JPJW10TOKMMPL465PCL9KXUP3WVNH24MV1XN816GDOMEDNEVC9TS215BJOMU' where id=73; -update noar ti set v0='OJQVYIHHZDJEMWVRUUWIYNQ2B82XL2LPN5ENX334LFZ4KYAW2SSFH9JPUB1G9DOLSC4CW6HY1FQDQG4UNGBAZUKC1JFZ6VNHCPVQX9Y6DXAHR0MXSJN19VBI5A6SNFCL6VW5X37HPM2A6BMHCAA752LLDYRH71W9QUW4QSJ2FW8VOLQV1A138BOA9QL4OB55FL3R5JPJW10TOKMMPL465PCL9KXUP3WVNH24MV1XN816GDOMEDNEVC9TS215BJOMU' where id=73; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='V95LHBUBZOYB47OBCZSYW2FXOX5012KZWQBJ2IPAKWQ479Y3XHW70BZLWGYQU7ETR984Z40CJ84KIGIT1O9DAF224PE3R0QU3CSQJBVH76FROWEB2RDNDNZRTE2HBVYBX7C8K3MF4QNZ6TBQ3IS64B2VOPHFHJUJGCEDI5CTQFHRPR6KK27O21AMFLE02HCJNI6ZTD4UO89Q0C8Y07HNZLWSRCQ1KVPL9IH98HP21IURTOZBG000ULWSABDHGDU9P' where id=73; -update noar ti set v1='V95LHBUBZOYB47OBCZSYW2FXOX5012KZWQBJ2IPAKWQ479Y3XHW70BZLWGYQU7ETR984Z40CJ84KIGIT1O9DAF224PE3R0QU3CSQJBVH76FROWEB2RDNDNZRTE2HBVYBX7C8K3MF4QNZ6TBQ3IS64B2VOPHFHJUJGCEDI5CTQFHRPR6KK27O21AMFLE02HCJNI6ZTD4UO89Q0C8Y07HNZLWSRCQ1KVPL9IH98HP21IURTOZBG000ULWSABDHGDU9P' where id=73; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='19DWGL7ODH4W4JXDA7YB4NNKPYE2TRGTN2028IMCKRIP3349W4C0CPTH6E9OWKGH23NUTVO9ADTRCRMFBW4UH1GXNIO2RPW8B5CB4DTMRW8407YDJ0Q1BI5MU34J17794VLDEYFBX9RAN6MFDRM72JBPXNBJP1DLFHRO8OWF0Q3UC5H6UTI5J1P2NI3L9AGK5T1I1UHP53905MY9DQXSRWYMGS21DML4J8RU23KID9IDC5810UGRZWWAIVIM2DXSS' where id=73; -update noar ti set v2='19DWGL7ODH4W4JXDA7YB4NNKPYE2TRGTN2028IMCKRIP3349W4C0CPTH6E9OWKGH23NUTVO9ADTRCRMFBW4UH1GXNIO2RPW8B5CB4DTMRW8407YDJ0Q1BI5MU34J17794VLDEYFBX9RAN6MFDRM72JBPXNBJP1DLFHRO8OWF0Q3UC5H6UTI5J1P2NI3L9AGK5T1I1UHP53905MY9DQXSRWYMGS21DML4J8RU23KID9IDC5810UGRZWWAIVIM2DXSS' where id=73; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='TUGBWR5FO4WC1S4ZN6J2KHGAR5OLAD767GKFCA0MSEKJK9H19ZB6V07MGGFLCRNUJJS4ACVUOOCN3MEFN46W3UHVJ36U1MC8EKYR8FGWOJYDFVJDKUFURINB17N18K4Q5B3LPSBKPOGX2ZL9MVGO6RB2EWVGPSF31BG87RF4NQJFJ216SZVLQSSPGLAZQ6HBLBGSRUNHATGQ8X7ICNHP3991BA2J0H4TPQX8YZ14MH4EX6E7JON5W5W1DWU80KLWA' where id=73; -update noar ti set v3='TUGBWR5FO4WC1S4ZN6J2KHGAR5OLAD767GKFCA0MSEKJK9H19ZB6V07MGGFLCRNUJJS4ACVUOOCN3MEFN46W3UHVJ36U1MC8EKYR8FGWOJYDFVJDKUFURINB17N18K4Q5B3LPSBKPOGX2ZL9MVGO6RB2EWVGPSF31BG87RF4NQJFJ216SZVLQSSPGLAZQ6HBLBGSRUNHATGQ8X7ICNHP3991BA2J0H4TPQX8YZ14MH4EX6E7JON5W5W1DWU80KLWA' where id=73; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='IXVHN2KO2BEDPMJG7XK5DJGY7AUZRHNSNNVRWJ4WU76BXVY6ENNE08NWXX3BJAFAG6CL59U5A5DF9R25IJCVPSVB8F4PX0TL0LW6HY0F7DBNFC8D4XU3ZSSGWATI7TXO0XSSC4KIV2HGSPIBSL88AXB2A6TSUP8JFI62DEEM2U6O76V722PDKCV6KKR0ITKRF6W1TAHRRR0S75OGKIOMAA9JRUSE3J7KYW7FDSH9GFJF9Y32B0SVVDVFV3GGPSHLI' where id=74; -update noar ti set v0='IXVHN2KO2BEDPMJG7XK5DJGY7AUZRHNSNNVRWJ4WU76BXVY6ENNE08NWXX3BJAFAG6CL59U5A5DF9R25IJCVPSVB8F4PX0TL0LW6HY0F7DBNFC8D4XU3ZSSGWATI7TXO0XSSC4KIV2HGSPIBSL88AXB2A6TSUP8JFI62DEEM2U6O76V722PDKCV6KKR0ITKRF6W1TAHRRR0S75OGKIOMAA9JRUSE3J7KYW7FDSH9GFJF9Y32B0SVVDVFV3GGPSHLI' where id=74; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='BGMV0FYBUTJG0ODDE8SEXM924JMID23BCV69G4FBTWNRO93G0YOTSAX9AN35V9ZYMKQF3VW9F24I1VJ2ISKQOE3R646WKIVG29WNRFRE3K64NKSCTF76JY8DDAH5B76IN5GV8175U8P5ZU8J111R3VWH1JJGD1ENC12H0PWCWV6N30JWHU7X6RZQE53S7BP5PXJ7QW7PL2SO8WQKWRA7G574TO3VWLN16SCJWQVTQ15KCRT5XN8YHJN3NXJIA4GGY' where id=74; -update noar ti set v1='BGMV0FYBUTJG0ODDE8SEXM924JMID23BCV69G4FBTWNRO93G0YOTSAX9AN35V9ZYMKQF3VW9F24I1VJ2ISKQOE3R646WKIVG29WNRFRE3K64NKSCTF76JY8DDAH5B76IN5GV8175U8P5ZU8J111R3VWH1JJGD1ENC12H0PWCWV6N30JWHU7X6RZQE53S7BP5PXJ7QW7PL2SO8WQKWRA7G574TO3VWLN16SCJWQVTQ15KCRT5XN8YHJN3NXJIA4GGY' where id=74; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='DO40UQ8OYI08NOL5F3RJEHIBDLM0QV0ONHRE7138HFIYM3KP9KZ58SP3TOVZ8C8XJC5GYQ5EPQGWGIIUTFWIBU07PB4IRZ6039BPK9HLP8F1COIA4HE35LKN2YDNP4A0IINHL10L3UL3YBPPLT11FJJKSRUO6OPPRBLKASSTPCW2193ZC3PNNSO3LBE9CHOOOQ70BNCQ1M3E73UHM6XMKW5MNM72SNNY226662P27ZGYUOA04WP3JBNFNKS6J13TI' where id=74; -update noar ti set v2='DO40UQ8OYI08NOL5F3RJEHIBDLM0QV0ONHRE7138HFIYM3KP9KZ58SP3TOVZ8C8XJC5GYQ5EPQGWGIIUTFWIBU07PB4IRZ6039BPK9HLP8F1COIA4HE35LKN2YDNP4A0IINHL10L3UL3YBPPLT11FJJKSRUO6OPPRBLKASSTPCW2193ZC3PNNSO3LBE9CHOOOQ70BNCQ1M3E73UHM6XMKW5MNM72SNNY226662P27ZGYUOA04WP3JBNFNKS6J13TI' where id=74; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='FD3BIZ39DJ7XU0NKEWHT2Q17J19E9PDN2S4FS2TIUQN12511KJJV3ROIPF6TOD5K6PI7QWRXJOCZFZ3OPUVV3IQX061MPTMXUJDTNI6MO5N9OMDE7RKOLBFCPZSLMIW3L20UCOYIQKUQV63FCWYJKLOE6EZTQXFFNKZ9HS79W2YR76OZPM12D1AEUFSPT464980H58YBBGVVH6F7LAKWLFKDU0T36ONS3TJ3FI7Q5CUF7Q643D24L493Q9VKKIUXS' where id=74; -update noar ti set v3='FD3BIZ39DJ7XU0NKEWHT2Q17J19E9PDN2S4FS2TIUQN12511KJJV3ROIPF6TOD5K6PI7QWRXJOCZFZ3OPUVV3IQX061MPTMXUJDTNI6MO5N9OMDE7RKOLBFCPZSLMIW3L20UCOYIQKUQV63FCWYJKLOE6EZTQXFFNKZ9HS79W2YR76OZPM12D1AEUFSPT464980H58YBBGVVH6F7LAKWLFKDU0T36ONS3TJ3FI7Q5CUF7Q643D24L493Q9VKKIUXS' where id=74; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='XEDOXIB62G0GD64FA796N7DNQ5F8H33Z60NO2APOG5TIULCZ7RWX0CQOIK3JXZYARHASN19GPNTV9PQEN2GIWPMSNKDCES5XCK2T0D67DVSXR8LG3A6C938C5JRAU6EDRJASCHD6CSWAT628AU6ALAC3P6X7CBJ0P9XK475K8WEN1BH0TD0V3PQD63ZSA1S9WHX11JVU2GYLT2YLVBMUJH4CHCWB6P4WY6IBRDT21Q8TU4EL7J29GIF4KEGZ686CO' where id=75; -update noar ti set v0='XEDOXIB62G0GD64FA796N7DNQ5F8H33Z60NO2APOG5TIULCZ7RWX0CQOIK3JXZYARHASN19GPNTV9PQEN2GIWPMSNKDCES5XCK2T0D67DVSXR8LG3A6C938C5JRAU6EDRJASCHD6CSWAT628AU6ALAC3P6X7CBJ0P9XK475K8WEN1BH0TD0V3PQD63ZSA1S9WHX11JVU2GYLT2YLVBMUJH4CHCWB6P4WY6IBRDT21Q8TU4EL7J29GIF4KEGZ686CO' where id=75; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='LZJY9L28JLUGLU3UO23WH0B5CCF3UOIK7Z3N60939DY83YTZI3E2UUIC489V7427CTVL8RTN723QWFTI1FVFTFRQB0C7HSMFJDMHD1UYI5OKR9HKZWMFRUBT91STZ7BQ6AZ4WWHENZLZDS0119B9ABVYO7J7447NRF2A8AYMIRKEX13X99ZP6QANWU5WPCGV2E536EP7NP6LOCV5EPLLN7ESKUSDCUY0CCAK6LC1EMO7QZI1BZWYRO7S5U42TS832' where id=75; -update noar ti set v1='LZJY9L28JLUGLU3UO23WH0B5CCF3UOIK7Z3N60939DY83YTZI3E2UUIC489V7427CTVL8RTN723QWFTI1FVFTFRQB0C7HSMFJDMHD1UYI5OKR9HKZWMFRUBT91STZ7BQ6AZ4WWHENZLZDS0119B9ABVYO7J7447NRF2A8AYMIRKEX13X99ZP6QANWU5WPCGV2E536EP7NP6LOCV5EPLLN7ESKUSDCUY0CCAK6LC1EMO7QZI1BZWYRO7S5U42TS832' where id=75; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='JKKWF9Q2L72OVYXSFM8SDPSGU3U4XW95ZW7K2Y4TUP1GSY3OI6U03J5FICPXQBPPTGT3T0XYKZ14EAIUEA0XIPCVOAPJ5SB9K9GVEM0QRRR2R1HO9UXB4NE8VRGZ3ZFVD5BPMHFS0KVTXLS13PV03D9AK088FD11H1VZ0DVYNCSVW2C28WDIUPP0IYX6XDXUYDIW8N7GT1A3RREDHS586AU0X9OQIQGD6O5IHMH5X9EWFGPCFBXC3DDKSA2TGSXAZ' where id=75; -update noar ti set v2='JKKWF9Q2L72OVYXSFM8SDPSGU3U4XW95ZW7K2Y4TUP1GSY3OI6U03J5FICPXQBPPTGT3T0XYKZ14EAIUEA0XIPCVOAPJ5SB9K9GVEM0QRRR2R1HO9UXB4NE8VRGZ3ZFVD5BPMHFS0KVTXLS13PV03D9AK088FD11H1VZ0DVYNCSVW2C28WDIUPP0IYX6XDXUYDIW8N7GT1A3RREDHS586AU0X9OQIQGD6O5IHMH5X9EWFGPCFBXC3DDKSA2TGSXAZ' where id=75; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='Q1VU1V7TLIS46IA99L44VRGFO81TPTU3C0F3MPZC46Z7HKP28HVNSPXP7ANN8MZFX0M9BC9U66WND1KVFV397JFP0W5K6LQ03IUGKVBJPZF3D7YWXD9EGL4QT3D3WZ02HZ476I8ENDDERWBRJ417VBNOO9ZS88AC2LVC45EGXCMA0L8ANHDT9C9R02V440MU5OPNGOMS3U9KIS5EGTASTA1BPJR6U1KY30YLO341CTXDZ4DIFQAUXG6DEAV6H9N47' where id=75; -update noar ti set v3='Q1VU1V7TLIS46IA99L44VRGFO81TPTU3C0F3MPZC46Z7HKP28HVNSPXP7ANN8MZFX0M9BC9U66WND1KVFV397JFP0W5K6LQ03IUGKVBJPZF3D7YWXD9EGL4QT3D3WZ02HZ476I8ENDDERWBRJ417VBNOO9ZS88AC2LVC45EGXCMA0L8ANHDT9C9R02V440MU5OPNGOMS3U9KIS5EGTASTA1BPJR6U1KY30YLO341CTXDZ4DIFQAUXG6DEAV6H9N47' where id=75; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='DGVDRPM4M78IAZLHGB6QPIP2Q2M57EAFHZ3QBNSQK0CP5MM33YFQNWW88MJSFKCTWKXTT0VHSDNX0AUAMYLNOF74EJ8DC9RA1X4BCG3FVE0BH5ISUG6MBHEO32ZKQVOTEHOBWNL2GM73QKCRNWUO1XHB3BBP3FR03L7897EJ3HXTPH94HX85T7D2CFGIMEC34680KZH26E1KJBRG3JPCAIHAY0HBX73K0KCWZVNJOSCYWFLWKEZ7Q9CW234ZQ92Y1' where id=76; -update noar ti set v0='DGVDRPM4M78IAZLHGB6QPIP2Q2M57EAFHZ3QBNSQK0CP5MM33YFQNWW88MJSFKCTWKXTT0VHSDNX0AUAMYLNOF74EJ8DC9RA1X4BCG3FVE0BH5ISUG6MBHEO32ZKQVOTEHOBWNL2GM73QKCRNWUO1XHB3BBP3FR03L7897EJ3HXTPH94HX85T7D2CFGIMEC34680KZH26E1KJBRG3JPCAIHAY0HBX73K0KCWZVNJOSCYWFLWKEZ7Q9CW234ZQ92Y1' where id=76; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='TOR40LL50S3CB1GW901HQP3D3EFF8CWVHV8NR4LGVA8P7ESZOF1W9UMHDU716E5SPL259Z1X4F639EYYOONQ3IJG7OMPIN7QZ5V3ZWP1EY0RM7IZCJY1DRQGCRKG8OTXUBW9AHR7AZIXY13B7P7RCAPX8I0MK6HJGHJZD8YOKM7ZJ9S6XFX452KLLW7MAJV3KG2PDC8C7TYEH017ZIZGBN66U3ABY04ABNH7FH0KP443TRZ5A4N5NCVBKRQ334IVU' where id=76; -update noar ti set v1='TOR40LL50S3CB1GW901HQP3D3EFF8CWVHV8NR4LGVA8P7ESZOF1W9UMHDU716E5SPL259Z1X4F639EYYOONQ3IJG7OMPIN7QZ5V3ZWP1EY0RM7IZCJY1DRQGCRKG8OTXUBW9AHR7AZIXY13B7P7RCAPX8I0MK6HJGHJZD8YOKM7ZJ9S6XFX452KLLW7MAJV3KG2PDC8C7TYEH017ZIZGBN66U3ABY04ABNH7FH0KP443TRZ5A4N5NCVBKRQ334IVU' where id=76; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='SN1EP8Y85PRPO1RPFGLHV7AHF4Y88JVNZAJE7ZPNW8CWTURPFU8EOYMCZ66TFAO2J679FQAPE4UQ21S35V7O1MFTRGWQ6TIU7X0H25FEFR9BRFDPSVBDWL3LLR6097LYWN9L2M3WHYYVCKHOW12HW6NSMH19QXMAJY159MGW6PNHURIFKBR2P0XXCRTUZP7WDPBM7B9IRFV6J90UW8AIFQROTB34NOT7ZA1I1BEV0PQ5IE34T9VX4QB3GYMZ4P4C1' where id=76; -update noar ti set v2='SN1EP8Y85PRPO1RPFGLHV7AHF4Y88JVNZAJE7ZPNW8CWTURPFU8EOYMCZ66TFAO2J679FQAPE4UQ21S35V7O1MFTRGWQ6TIU7X0H25FEFR9BRFDPSVBDWL3LLR6097LYWN9L2M3WHYYVCKHOW12HW6NSMH19QXMAJY159MGW6PNHURIFKBR2P0XXCRTUZP7WDPBM7B9IRFV6J90UW8AIFQROTB34NOT7ZA1I1BEV0PQ5IE34T9VX4QB3GYMZ4P4C1' where id=76; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='VNPXIFNWBJL398TGBQZLUNS11WZY5H3Q50TL41DE20P2IYM3DW81GPFPE3KM0385RIMN8IJ0KBF324OHDO2H4FMNZ3TBI5MSOKQI6SPMPZ8DRUBDLATQ6JI0130UGVB9LXKO36ZUPTEJ1IOPVC5SU2P6W0WU26FBGJIIQJFMYCT6QK16OHYEQG356VUD31K58AR3Z8ZKLFWG4SXNAU5ZP5LOE59TE6LP0C89DPOUE8VNFEN7MASS2FU2TIB96FY61' where id=76; -update noar ti set v3='VNPXIFNWBJL398TGBQZLUNS11WZY5H3Q50TL41DE20P2IYM3DW81GPFPE3KM0385RIMN8IJ0KBF324OHDO2H4FMNZ3TBI5MSOKQI6SPMPZ8DRUBDLATQ6JI0130UGVB9LXKO36ZUPTEJ1IOPVC5SU2P6W0WU26FBGJIIQJFMYCT6QK16OHYEQG356VUD31K58AR3Z8ZKLFWG4SXNAU5ZP5LOE59TE6LP0C89DPOUE8VNFEN7MASS2FU2TIB96FY61' where id=76; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='4WEJ6QCF8K5CYS20J88ICFQPCX470NAKBBLA5RMYB0XCK2S8C6RNIQ5LLWZR58W8ET0R2DL5I75E0YVQRC9VSPYK842NDRQLBP4SR4XMR374CS257OVQJ8TJAVTF3RS7CNZCIVN874UHR70YQO4GGQ113QEJ47EN5D1OZQNCCQU6VBMY7CPUFMB01JGH1M3R56ONEOIDNIGCHLBKI3BM2BVJ9WBPXPC2UZSEYWB222Z4LGWYM0UOZUHNA5VJCJANP' where id=77; -update noar ti set v0='4WEJ6QCF8K5CYS20J88ICFQPCX470NAKBBLA5RMYB0XCK2S8C6RNIQ5LLWZR58W8ET0R2DL5I75E0YVQRC9VSPYK842NDRQLBP4SR4XMR374CS257OVQJ8TJAVTF3RS7CNZCIVN874UHR70YQO4GGQ113QEJ47EN5D1OZQNCCQU6VBMY7CPUFMB01JGH1M3R56ONEOIDNIGCHLBKI3BM2BVJ9WBPXPC2UZSEYWB222Z4LGWYM0UOZUHNA5VJCJANP' where id=77; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='NM8HV723TWUXSOBD7UIRKVOV7H5YJ83QYYUFI0H10XPEYE1F0D51VNWRG0YLO39ONIHJ6HBM6WIZAFYFUT8DBT5K637RW8BT05UU3XSPHLHEOG62W6GGYSWSM1VVC6O3RU08WSPCZ8Z9W56DJXQRCQX79OKWIGE0GTVJ5IFF3F5LQXWOUBVOZ55EK2J1UHZK4A22KFN656WWMBGYNVBZYFT9RSW8N8BYI5UKG9Q8IW8XVDQ9WZVDI6TVPQGHDH16T' where id=77; -update noar ti set v1='NM8HV723TWUXSOBD7UIRKVOV7H5YJ83QYYUFI0H10XPEYE1F0D51VNWRG0YLO39ONIHJ6HBM6WIZAFYFUT8DBT5K637RW8BT05UU3XSPHLHEOG62W6GGYSWSM1VVC6O3RU08WSPCZ8Z9W56DJXQRCQX79OKWIGE0GTVJ5IFF3F5LQXWOUBVOZ55EK2J1UHZK4A22KFN656WWMBGYNVBZYFT9RSW8N8BYI5UKG9Q8IW8XVDQ9WZVDI6TVPQGHDH16T' where id=77; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='T8BEEU1BI4QFYVTHCAUKHUAU4VRI86XUGCL66119CXJMXQU0Q6J3TR4SCJIHIMJMUGMJ84B22XGGSOTVOVZO1TJT8YIS3G6Y1ETTYK9061SY3N9GG6GYUXU3O4VENJ1138BU7KQAKXE457SDR9D6U1B3F8H07ZWEF7UCU0WRNIP2PD3F9D8NP7DXJR06ND3SYST5AIPKW3DS5I6CENXA6E6GJQ8XB40VGSZ9MWMIQMUVQ5P6CNUL9FMB4FEGTJCA4' where id=77; -update noar ti set v2='T8BEEU1BI4QFYVTHCAUKHUAU4VRI86XUGCL66119CXJMXQU0Q6J3TR4SCJIHIMJMUGMJ84B22XGGSOTVOVZO1TJT8YIS3G6Y1ETTYK9061SY3N9GG6GYUXU3O4VENJ1138BU7KQAKXE457SDR9D6U1B3F8H07ZWEF7UCU0WRNIP2PD3F9D8NP7DXJR06ND3SYST5AIPKW3DS5I6CENXA6E6GJQ8XB40VGSZ9MWMIQMUVQ5P6CNUL9FMB4FEGTJCA4' where id=77; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='Z2LB146QXCQ1K30327L0P5C61U2NHPVF43EUZB8LMPNM0VZULCK1L77BK760Y16RS0I6TZ8VLC7OEUAC90NMRMN6PWBUKS0R9C7K5J5CXX5XMP50Y4EPK7M7DR6SFIKGOSMEC0X5NE7D8OQ8BW2M8R2UK5G6EMSON0PDVYW9LTZQ1SRSOOGD08EPKS53RHYRLJ7G3NYIFUVGTESDQPOQG3JTGHPSLLE0CSFHWMTN5DPLIX25ZZXWPD8UU3DMIO8G3' where id=77; -update noar ti set v3='Z2LB146QXCQ1K30327L0P5C61U2NHPVF43EUZB8LMPNM0VZULCK1L77BK760Y16RS0I6TZ8VLC7OEUAC90NMRMN6PWBUKS0R9C7K5J5CXX5XMP50Y4EPK7M7DR6SFIKGOSMEC0X5NE7D8OQ8BW2M8R2UK5G6EMSON0PDVYW9LTZQ1SRSOOGD08EPKS53RHYRLJ7G3NYIFUVGTESDQPOQG3JTGHPSLLE0CSFHWMTN5DPLIX25ZZXWPD8UU3DMIO8G3' where id=77; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='29IEVV2VC30F5OO9DQXIXTA11VXKRXB158ZNV40SNKBAMVHCY48LZ7EXQ879A08N766L46AKJJCE2W32TR8OQOIHFC3RV8232SABMQK0X3D32STQZXQMD2AP7FIDNYTKLDC5V19EMSB0179BJPZ33J7206FQZXZHDT2UMBRUTHMABIFNCX4WLEUWAGN2A0TZDBULK4GHDNPJFWDJJDOQAQO0XSLBUNA61QTSK720OOV3GATYBIPXA1EBIED2DNXOE' where id=78; -update noar ti set v0='29IEVV2VC30F5OO9DQXIXTA11VXKRXB158ZNV40SNKBAMVHCY48LZ7EXQ879A08N766L46AKJJCE2W32TR8OQOIHFC3RV8232SABMQK0X3D32STQZXQMD2AP7FIDNYTKLDC5V19EMSB0179BJPZ33J7206FQZXZHDT2UMBRUTHMABIFNCX4WLEUWAGN2A0TZDBULK4GHDNPJFWDJJDOQAQO0XSLBUNA61QTSK720OOV3GATYBIPXA1EBIED2DNXOE' where id=78; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='O2CZ4IKJ3US5Q376OFNLFOC5U789CY4WYVKMZBY6G4DGZPN2REBJRVCBD1VHJNUL9PDPLFHY6Y9PND3KJZEOPUU0S1CU1JXC63CD2VA1095X311EGB306DMB20PNMQZZPWG8DDI653DLS2L4WQF8MAPC8ZHBKSN9UEA35JDE6LJ5MTGVY7FN9FVY8MRL5PB8EFURSE3N524HUD7109VQZ1BB73SKTV0XVX1512PXH7P93AGKUNNN3IG8TN4T9L0MW' where id=78; -update noar ti set v1='O2CZ4IKJ3US5Q376OFNLFOC5U789CY4WYVKMZBY6G4DGZPN2REBJRVCBD1VHJNUL9PDPLFHY6Y9PND3KJZEOPUU0S1CU1JXC63CD2VA1095X311EGB306DMB20PNMQZZPWG8DDI653DLS2L4WQF8MAPC8ZHBKSN9UEA35JDE6LJ5MTGVY7FN9FVY8MRL5PB8EFURSE3N524HUD7109VQZ1BB73SKTV0XVX1512PXH7P93AGKUNNN3IG8TN4T9L0MW' where id=78; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='7MVBE30ICEGL02SN6Z82VSS93YD88NHCIR09WMZHD5L5JA4K366JQAD1TRRED086OVNV4ZW80E8PP1ZKP1ACZ53PGJVXVSI0NNC0CN1XW6RFC0FUBMF535X9A4FWA28C1BSB9FOIJJXGAX3JE9F0AWOW0HQYTQRMYLWAUMD1MXN9324Q8QW40U4TGFD3W8J2NP29VIML4F2GNYDQWTV5M3QRCVSMEN2DZ8X0ADL0TH28LLHYQ2DVNY9G979C5NJXF' where id=78; -update noar ti set v2='7MVBE30ICEGL02SN6Z82VSS93YD88NHCIR09WMZHD5L5JA4K366JQAD1TRRED086OVNV4ZW80E8PP1ZKP1ACZ53PGJVXVSI0NNC0CN1XW6RFC0FUBMF535X9A4FWA28C1BSB9FOIJJXGAX3JE9F0AWOW0HQYTQRMYLWAUMD1MXN9324Q8QW40U4TGFD3W8J2NP29VIML4F2GNYDQWTV5M3QRCVSMEN2DZ8X0ADL0TH28LLHYQ2DVNY9G979C5NJXF' where id=78; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='NXI9Z1155C569CT5SCNSUP1A94YUH0PQ8K6BJ40PCFL3TSL37GE4F55JWK87BQUERLU9TMN8RHHAWUL6VKF7JR6U6XJLQH8E3NTL8XJJW38ZOG0U9SS8A6LUJJWWLV3RTUP8M24RJUOU16ZUP8IW0BSFBPUDA6O5GI89QHBCQ9G3IV1NXDXC7WIH0AM5R1QHC2ATKCXGRH2C1BBOFJ8IDN5V55O6ALOZ7OFVAMMBL624GHZVRBBL4FCLOX5IG7CT9' where id=78; -update noar ti set v3='NXI9Z1155C569CT5SCNSUP1A94YUH0PQ8K6BJ40PCFL3TSL37GE4F55JWK87BQUERLU9TMN8RHHAWUL6VKF7JR6U6XJLQH8E3NTL8XJJW38ZOG0U9SS8A6LUJJWWLV3RTUP8M24RJUOU16ZUP8IW0BSFBPUDA6O5GI89QHBCQ9G3IV1NXDXC7WIH0AM5R1QHC2ATKCXGRH2C1BBOFJ8IDN5V55O6ALOZ7OFVAMMBL624GHZVRBBL4FCLOX5IG7CT9' where id=78; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='Q3FFZD7DDX86QMDGSJY2BRU58T98MFBN7BSDX49FII54HWDENRUHG6GP3X2SS4TD10U9OHHIW74AA99VHLM05GQECAJCA106FQX0B9CSQ5ULJ2LHTA3JSW9DU6GYQFGDNPXCRE2TQ0F4D3T0ICXJIK4UH8CN94CKVZYWETQ6M14L4P4VLLJFT2ODOIM5OG1C37CTMI84H462WMR0U75238YRCZ32335JO2T37ATFFU2R986OFMB21LRSXU7OZ8LSB' where id=79; -update noar ti set v0='Q3FFZD7DDX86QMDGSJY2BRU58T98MFBN7BSDX49FII54HWDENRUHG6GP3X2SS4TD10U9OHHIW74AA99VHLM05GQECAJCA106FQX0B9CSQ5ULJ2LHTA3JSW9DU6GYQFGDNPXCRE2TQ0F4D3T0ICXJIK4UH8CN94CKVZYWETQ6M14L4P4VLLJFT2ODOIM5OG1C37CTMI84H462WMR0U75238YRCZ32335JO2T37ATFFU2R986OFMB21LRSXU7OZ8LSB' where id=79; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='1CHHHKNY6CMSUK3X4JJYU1ID0T2WYA4QSL7C5KSJ8L1WULYTTPSWPJLNPEV7R9D37H0F819S5PDBQ483AO8ZYT64O69U2XPV0EP9X549G4PPBKMY1P8Z1JOMAANYSO6JF19GJ1IHUBVOSZDNGROFG26KW31CF8HSSVJRTVRUXSQTDJKI1KF3J281QAL41WP4Q2CKXRNCWLQ4QUOV1C8UN4DYCSPN5PYD1KHZ5I7MIQ6ZDLR4S7R5BXVQ3CK04D63M' where id=79; -update noar ti set v1='1CHHHKNY6CMSUK3X4JJYU1ID0T2WYA4QSL7C5KSJ8L1WULYTTPSWPJLNPEV7R9D37H0F819S5PDBQ483AO8ZYT64O69U2XPV0EP9X549G4PPBKMY1P8Z1JOMAANYSO6JF19GJ1IHUBVOSZDNGROFG26KW31CF8HSSVJRTVRUXSQTDJKI1KF3J281QAL41WP4Q2CKXRNCWLQ4QUOV1C8UN4DYCSPN5PYD1KHZ5I7MIQ6ZDLR4S7R5BXVQ3CK04D63M' where id=79; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='9LW7DQ1MLCRTJ9L1BRBBYOAR4M89KDJT9U00AO2VV7C48FOJRR1YQ17G0ACP25CL88T9KN2IHKNIQNZE27W2YZTD3D6JUPME6URTAPYTY7UTE80CS1GHBBJIRLLATPIBMXO1H47ZZBN1ZW07TX1P49PX4GZXNWT837N4QMS1KZ5MHGQ86Z7A2GDPDE12BH2S41RG0A1GVD52BXKXI7YFG57KUGS1C9TKYUMTZVMAQ34A60FI43R4R4HDTMVJC2QYA' where id=79; -update noar ti set v2='9LW7DQ1MLCRTJ9L1BRBBYOAR4M89KDJT9U00AO2VV7C48FOJRR1YQ17G0ACP25CL88T9KN2IHKNIQNZE27W2YZTD3D6JUPME6URTAPYTY7UTE80CS1GHBBJIRLLATPIBMXO1H47ZZBN1ZW07TX1P49PX4GZXNWT837N4QMS1KZ5MHGQ86Z7A2GDPDE12BH2S41RG0A1GVD52BXKXI7YFG57KUGS1C9TKYUMTZVMAQ34A60FI43R4R4HDTMVJC2QYA' where id=79; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='O8LRF4704XQ0JSM6M02LTI146T773PP9T4ZYYQO36S4CCBPLR8T6CUAP02YVKZ66ZHD35OUDMHGATSR5RUB6KZEDUO4FQWH8Q9ONW70C1LFTE7D4WP3EIC3RJH7XQWS7Q8PCMX7O5MUODVB6B3H8CE6PUMNJAKND4PODW6D3DGG5C8VBV7CKIB2OKGSGDPMN6SFT8R03MV07L4EASBRM7EXIRXZ80DJ7QHKRUITBY45X7L4ASLBBTOABIHRU7VEUA' where id=79; -update noar ti set v3='O8LRF4704XQ0JSM6M02LTI146T773PP9T4ZYYQO36S4CCBPLR8T6CUAP02YVKZ66ZHD35OUDMHGATSR5RUB6KZEDUO4FQWH8Q9ONW70C1LFTE7D4WP3EIC3RJH7XQWS7Q8PCMX7O5MUODVB6B3H8CE6PUMNJAKND4PODW6D3DGG5C8VBV7CKIB2OKGSGDPMN6SFT8R03MV07L4EASBRM7EXIRXZ80DJ7QHKRUITBY45X7L4ASLBBTOABIHRU7VEUA' where id=79; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='5ERX9GS9UO6KRUFIFQ3EYM7WIWVX4BN5MQZLKH3ZK9UYY5QSHKP0G04ALNCD2TNHQ7TXURQNH07B3OR16KOEUUJPJMC12MEX88SOPSM6OR9OZA549SN9768C3KMXDTX94XPFBJDO8K0RWHU6CEMYIGYMOI39HJN6SYLB79WLIO4FWMV8CHOR23N3UHVOVCUMGQI7HF52OEFEDUFLLAKDD04JEW6F5QS7EGL8JUHPN4IX1ORREBK8P1CVGU0H90P5G' where id=80; -update noar ti set v0='5ERX9GS9UO6KRUFIFQ3EYM7WIWVX4BN5MQZLKH3ZK9UYY5QSHKP0G04ALNCD2TNHQ7TXURQNH07B3OR16KOEUUJPJMC12MEX88SOPSM6OR9OZA549SN9768C3KMXDTX94XPFBJDO8K0RWHU6CEMYIGYMOI39HJN6SYLB79WLIO4FWMV8CHOR23N3UHVOVCUMGQI7HF52OEFEDUFLLAKDD04JEW6F5QS7EGL8JUHPN4IX1ORREBK8P1CVGU0H90P5G' where id=80; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='Z760IJEEUXH9MNILGXL3X1AICMXZ8K9G66B2WA39SDVDG9CNWCKZU1XXDA5LNYV4UT5DORMX17T6PNR0V4B3TD7VTAY0F4ZWW4U34P3COLBBIXR7567URPVZKKP857QH0230GNQ629SUTBQPQ5WPH4RQHYQUWMWLF1NHCMB7JFPTXPML67FSAMXE975VL4DCK3A8Q46BLOIXG3QETW7EWDHQPXLUYSKP61B71LTM1LNF0ZTOW02A95QAEQOL02VQ4' where id=80; -update noar ti set v1='Z760IJEEUXH9MNILGXL3X1AICMXZ8K9G66B2WA39SDVDG9CNWCKZU1XXDA5LNYV4UT5DORMX17T6PNR0V4B3TD7VTAY0F4ZWW4U34P3COLBBIXR7567URPVZKKP857QH0230GNQ629SUTBQPQ5WPH4RQHYQUWMWLF1NHCMB7JFPTXPML67FSAMXE975VL4DCK3A8Q46BLOIXG3QETW7EWDHQPXLUYSKP61B71LTM1LNF0ZTOW02A95QAEQOL02VQ4' where id=80; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='L78CIOWIEKYZTNHFVWC6TW66NLQJ0GP4CASGEJ5B79LD5MLVVPIG6R8W98T1OZ16ZY7QXHZ8QIZADOFMRV2AOXPW3GRD9K087QBCGQ9TWA7LAF26KDJ51P9SM0N7L8E2K6MRYUVY04GG4TZZMNP0GLH8U8TRNB7PYO7NE96HGX26MJSXXDBZ7QRBRWSWKOUA0IVO1H95XLFACM8J37TH97K1JSG6AUFLEA7Q8X6IHM7385I7PIE5J69KGYKPLP0YL' where id=80; -update noar ti set v2='L78CIOWIEKYZTNHFVWC6TW66NLQJ0GP4CASGEJ5B79LD5MLVVPIG6R8W98T1OZ16ZY7QXHZ8QIZADOFMRV2AOXPW3GRD9K087QBCGQ9TWA7LAF26KDJ51P9SM0N7L8E2K6MRYUVY04GG4TZZMNP0GLH8U8TRNB7PYO7NE96HGX26MJSXXDBZ7QRBRWSWKOUA0IVO1H95XLFACM8J37TH97K1JSG6AUFLEA7Q8X6IHM7385I7PIE5J69KGYKPLP0YL' where id=80; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='ROHU3JWF647KJDT4HJUJ2S5WQ1HJFDCE6BMNDUETEV9AENM3MMVBDENN42MHS4093TUCWNF3UBLEN8AVQ9R8RNUQ0KODU3CJXDKU79JMOK6B17ZQX5H066299S03HG2CS7HAE0XWA31Z5O27BDTBMH00AMZGURMXAY6N3DKPHWGXJMTPV8F2K261BHUBAXB3K9QY38MC7AZJIAVHF350FFPFBVPRV9CCJVNFNXFO00VFH5BO71J2M97BHCZH5GGII' where id=80; -update noar ti set v3='ROHU3JWF647KJDT4HJUJ2S5WQ1HJFDCE6BMNDUETEV9AENM3MMVBDENN42MHS4093TUCWNF3UBLEN8AVQ9R8RNUQ0KODU3CJXDKU79JMOK6B17ZQX5H066299S03HG2CS7HAE0XWA31Z5O27BDTBMH00AMZGURMXAY6N3DKPHWGXJMTPV8F2K261BHUBAXB3K9QY38MC7AZJIAVHF350FFPFBVPRV9CCJVNFNXFO00VFH5BO71J2M97BHCZH5GGII' where id=80; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='7IAQL7HCL9MS2N4H6MQRE7R98CHC5JRXI61AJOZQBLQVQ7PKGYAML3TMKZP6TCYNYEI030V838YCWSLKHT557WWIJ0MJIQA8WMMJHWHNIG4PXPAN626XG7PQT8BWJEVZ8VMNQGHCCYAXVZA4OMKO6H9AQK719WCQUZFG3CD928C7RN270PZIAZB3SHFLZSAK20WJK8VHVFN9CQ8XFGB0Q41TGNBQH8E1N2N290PNMUUCZ7YS0MWN6S1GD6D9CDF38' where id=81; -update noar ti set v0='7IAQL7HCL9MS2N4H6MQRE7R98CHC5JRXI61AJOZQBLQVQ7PKGYAML3TMKZP6TCYNYEI030V838YCWSLKHT557WWIJ0MJIQA8WMMJHWHNIG4PXPAN626XG7PQT8BWJEVZ8VMNQGHCCYAXVZA4OMKO6H9AQK719WCQUZFG3CD928C7RN270PZIAZB3SHFLZSAK20WJK8VHVFN9CQ8XFGB0Q41TGNBQH8E1N2N290PNMUUCZ7YS0MWN6S1GD6D9CDF38' where id=81; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='WHCYLKOEHI8OEAXP0KP8WICKENH4S8LI6246ZG0NVGL8G4WZFB1CM8GEA10O4G79LO79T0YKNKNHE8Y1VMPGB1YBHRA5SR6R3F9GC0K45CG9AYWG0OZ52AKNMF50YA9Q22OKXQZ111CHQESQAXEASOTAVF0ZFJ156DXRYPTW9M7OE2QDJGBEGCY9H63YHN6MI95K2ZMJPWE02VMFGTSKHAY92X65TCRXI4LXSDPGBHDXNM84ZWDOC2WX3S51A93BM' where id=81; -update noar ti set v1='WHCYLKOEHI8OEAXP0KP8WICKENH4S8LI6246ZG0NVGL8G4WZFB1CM8GEA10O4G79LO79T0YKNKNHE8Y1VMPGB1YBHRA5SR6R3F9GC0K45CG9AYWG0OZ52AKNMF50YA9Q22OKXQZ111CHQESQAXEASOTAVF0ZFJ156DXRYPTW9M7OE2QDJGBEGCY9H63YHN6MI95K2ZMJPWE02VMFGTSKHAY92X65TCRXI4LXSDPGBHDXNM84ZWDOC2WX3S51A93BM' where id=81; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='GGVI66QTBSD6H37N1UFPW2UASZB6U08I538EFE6AYGEOSG1Y4OL50FRIUW1TYDSX5NAGMUBQTVP1EI4NK85IR7BATNDZ2GTXWOROVV0GQ1IO5W1FSANU1FD6L81X6QP8EFSJ49BZO286PLZAFYNNSA6ANW8NUB8ZDO6BXOUU2NE3IC3NCUYE27L5BB0UPNNAFMOTTOXOHG3BZTV004FS0ID6H740HMCXNNTPED13B6NAUDYMBZSXHRDK42CL6WR5E' where id=81; -update noar ti set v2='GGVI66QTBSD6H37N1UFPW2UASZB6U08I538EFE6AYGEOSG1Y4OL50FRIUW1TYDSX5NAGMUBQTVP1EI4NK85IR7BATNDZ2GTXWOROVV0GQ1IO5W1FSANU1FD6L81X6QP8EFSJ49BZO286PLZAFYNNSA6ANW8NUB8ZDO6BXOUU2NE3IC3NCUYE27L5BB0UPNNAFMOTTOXOHG3BZTV004FS0ID6H740HMCXNNTPED13B6NAUDYMBZSXHRDK42CL6WR5E' where id=81; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='0CUC6PG8338586R61KV252EUYFR6KCS93634XBUJYBEBJDT0DPE4U2HCQVHLBDMQZAISIVR7DOE0YHF200PAUKMKTC7DKMGYD66XVTPKVBAO0XQJ3PRZEWR5YFXKCL3O1OXNI52P3R2JZ7VS492LH2ROOQJS7M7D8TX8T38BTNJQ702C9Q49UFV6H2WGRE85XKBPAYW0JLECJCPK78O95YP8M0W5URK8707NUBMPHALYU67CCO8HOVH2DARLRYJ9E' where id=81; -update noar ti set v3='0CUC6PG8338586R61KV252EUYFR6KCS93634XBUJYBEBJDT0DPE4U2HCQVHLBDMQZAISIVR7DOE0YHF200PAUKMKTC7DKMGYD66XVTPKVBAO0XQJ3PRZEWR5YFXKCL3O1OXNI52P3R2JZ7VS492LH2ROOQJS7M7D8TX8T38BTNJQ702C9Q49UFV6H2WGRE85XKBPAYW0JLECJCPK78O95YP8M0W5URK8707NUBMPHALYU67CCO8HOVH2DARLRYJ9E' where id=81; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='SROIC3LDYM70OIGPPB8C8TCQFKGYIH7MO31KZM3B36A2F74R99PFX9YELIANGQZP5OY3XRBVU3264KB971HUBIBVLD2PY3NPEOOU8SJQLHCPF6BCJTMEF5YMU0UKPGSBO3I9EPN6DQCINB3PDKGPV7XCXLAPCTV5L07SYFAQ1PXW1IKXWV2V76EOAJHERBMWMNSTU9KVT9S8DEHB4MQW55HGZHSY9EZG97H4RUUT36EWBYJGXHZT1NV59EYHJRQHR' where id=82; -update noar ti set v0='SROIC3LDYM70OIGPPB8C8TCQFKGYIH7MO31KZM3B36A2F74R99PFX9YELIANGQZP5OY3XRBVU3264KB971HUBIBVLD2PY3NPEOOU8SJQLHCPF6BCJTMEF5YMU0UKPGSBO3I9EPN6DQCINB3PDKGPV7XCXLAPCTV5L07SYFAQ1PXW1IKXWV2V76EOAJHERBMWMNSTU9KVT9S8DEHB4MQW55HGZHSY9EZG97H4RUUT36EWBYJGXHZT1NV59EYHJRQHR' where id=82; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='UDYCTXDNP6G6W3I140VDNAPYR48F2ETEPFV0RKPET0388DS7793BKGHR8TWBMGZMIIL52T9Z1FQ2IVQD7K895IUE3GZO92AOGF8U1GGYGU7NMXMXVUBY6OMIQRGNZ56BMAOO9L8GYKSH5HS1YTAD8CIXE1N7W93OEBVCJGSW4ZXUKBHGFFZIPXL93BEYLK9FKY6AUYAVCZIRWPG6SVSTW79KP0FWZYO0Y85UMXBGNJJ7PZDMRNR3HA09U4O4XBR8Y' where id=82; -update noar ti set v1='UDYCTXDNP6G6W3I140VDNAPYR48F2ETEPFV0RKPET0388DS7793BKGHR8TWBMGZMIIL52T9Z1FQ2IVQD7K895IUE3GZO92AOGF8U1GGYGU7NMXMXVUBY6OMIQRGNZ56BMAOO9L8GYKSH5HS1YTAD8CIXE1N7W93OEBVCJGSW4ZXUKBHGFFZIPXL93BEYLK9FKY6AUYAVCZIRWPG6SVSTW79KP0FWZYO0Y85UMXBGNJJ7PZDMRNR3HA09U4O4XBR8Y' where id=82; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='74EERGPYEQ8TB15ROHJZUQS70ZR8XBV0ESRE60YP6NLNKAPHYVS1PN3WIN65YVPTLQOARM9PX521WLO718I3DHRGDFGMULT6I5BPGMMK8SPE87G7BMA6BRIXCLFY6DF6PVEN0G1U9F0GZXN2AARQNV0HJL9KEQP08VPUNXM2P1RJG7B79Y4O0YCIOQ2WDJQKWERATSTR6JN1BACF3QMH5T8LQRTTIVGVI27Y6YYS0TCRLH62LYRIC7CKVJYYFW9YR' where id=82; -update noar ti set v2='74EERGPYEQ8TB15ROHJZUQS70ZR8XBV0ESRE60YP6NLNKAPHYVS1PN3WIN65YVPTLQOARM9PX521WLO718I3DHRGDFGMULT6I5BPGMMK8SPE87G7BMA6BRIXCLFY6DF6PVEN0G1U9F0GZXN2AARQNV0HJL9KEQP08VPUNXM2P1RJG7B79Y4O0YCIOQ2WDJQKWERATSTR6JN1BACF3QMH5T8LQRTTIVGVI27Y6YYS0TCRLH62LYRIC7CKVJYYFW9YR' where id=82; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='5C29FPCW6KQ1CGGHRXVNX6NYT4A7R9MKEJZTXWQXV5MJ3028G00BR6438SUVYQ6G518WBVN5UQSUF2DG16H54XA42G3FJGU2J2RVC58LR7LE456XODPR0Y74J4TN66DY6RUEOEINZW4NHZVZGCFDG6S5Z1H2L0NX3KKZ4CUI4S9YMNOIBRFBTYN039WL6S0FTVFZTLU4LJSV71VSHZEEQTRH1F8OLT1NPQ0GJ8IARUHCJDOTIFHLX7CX25EPZRSFF' where id=82; -update noar ti set v3='5C29FPCW6KQ1CGGHRXVNX6NYT4A7R9MKEJZTXWQXV5MJ3028G00BR6438SUVYQ6G518WBVN5UQSUF2DG16H54XA42G3FJGU2J2RVC58LR7LE456XODPR0Y74J4TN66DY6RUEOEINZW4NHZVZGCFDG6S5Z1H2L0NX3KKZ4CUI4S9YMNOIBRFBTYN039WL6S0FTVFZTLU4LJSV71VSHZEEQTRH1F8OLT1NPQ0GJ8IARUHCJDOTIFHLX7CX25EPZRSFF' where id=82; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='A93HJINGRDUQSPDDEO9JTQ3I5LZ7G29YXND123YYRRT0A1RLN870GBD1HSEI4JGOYSPRBU6QPX2H7Z1MRZ8Z2W1MNRZHPLKR0USOSDWLJD9B982AQGAQQBFEHM96H099B7WT8OEDAJTO181FW9N9WCMUOQE3NR0FCJHOLJDGM5COIV0Q2M467D04UU7M0BDF4SY8VZQT3Y3A7RLXAXD4351YNEOSQSQDM73U4EFC4SBDYJKIFK36FKS76C93WLNC6' where id=83; -update noar ti set v0='A93HJINGRDUQSPDDEO9JTQ3I5LZ7G29YXND123YYRRT0A1RLN870GBD1HSEI4JGOYSPRBU6QPX2H7Z1MRZ8Z2W1MNRZHPLKR0USOSDWLJD9B982AQGAQQBFEHM96H099B7WT8OEDAJTO181FW9N9WCMUOQE3NR0FCJHOLJDGM5COIV0Q2M467D04UU7M0BDF4SY8VZQT3Y3A7RLXAXD4351YNEOSQSQDM73U4EFC4SBDYJKIFK36FKS76C93WLNC6' where id=83; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='ENHVA29U3RP4WUZ395S1LOVG22X26CBAI0ZE342Q8CEWNLTO0GNF2GIN54OSEXK35AJ7I3FFQQCHYQQ7G27FJCYFD24920TSIWTJ9KQE0C6POSK8CKUC8T5061ILO4OJAVGQJE2P6CDUEZU93JA2HZ50NF3IXF5P24Q8V7ZYHS801487UNF6AOD2SI3YVVEW8M39BZEJ5ZLA66SCI18YQ48V02J91FDJO9H3LF8FYTF35SKYKW7DQZOU3OYRP5RLW' where id=83; -update noar ti set v1='ENHVA29U3RP4WUZ395S1LOVG22X26CBAI0ZE342Q8CEWNLTO0GNF2GIN54OSEXK35AJ7I3FFQQCHYQQ7G27FJCYFD24920TSIWTJ9KQE0C6POSK8CKUC8T5061ILO4OJAVGQJE2P6CDUEZU93JA2HZ50NF3IXF5P24Q8V7ZYHS801487UNF6AOD2SI3YVVEW8M39BZEJ5ZLA66SCI18YQ48V02J91FDJO9H3LF8FYTF35SKYKW7DQZOU3OYRP5RLW' where id=83; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='OCC0KHJO0C6BAIRDZOVJ6XWKDNEK3PH1OQTIUOF8WQRD31UAQOA51N9NXZYRCFUOGSQRADNMUMI4KAFI8IUIGG5XBGKF35QR2VQCSQS8OFLXIBZY2HC6E3CG55L5X8KBRFX1F5M9ISWLDJQOPP8QANTN7VSUYRA8R3JDXQ2KK0WMTSTAIY3ZBQUWT7O4IHP3WHGBQRL7M2FCP1TDK51MAO180U9RUUP97IKPDZZO0GTAL7MIRKIW03DGSXTG0AJTM' where id=83; -update noar ti set v2='OCC0KHJO0C6BAIRDZOVJ6XWKDNEK3PH1OQTIUOF8WQRD31UAQOA51N9NXZYRCFUOGSQRADNMUMI4KAFI8IUIGG5XBGKF35QR2VQCSQS8OFLXIBZY2HC6E3CG55L5X8KBRFX1F5M9ISWLDJQOPP8QANTN7VSUYRA8R3JDXQ2KK0WMTSTAIY3ZBQUWT7O4IHP3WHGBQRL7M2FCP1TDK51MAO180U9RUUP97IKPDZZO0GTAL7MIRKIW03DGSXTG0AJTM' where id=83; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='AQA45B652PEG93X2GUTBCA2CL7LG6DWQ3MW7YBI4T2M8JEEULAPKKS87K84MYCYLZTTGF7O9ZIQDDAM2FDKYCFGX4NOLQO4ZHO1Q1HBD64BWHOK7EC4H40585WRSYO6B8MXCW837TP0R9OX9JMZ6S23S4LUFB9KCN75CVAS34DWOUNHR0GAVXBGTVO0MHCL639JZNDJ8QOK9ASA7TEEIJNSXXZM7MVB96ED59E3JJZ4F62X6KISZOTRQPZPHCWTDZ' where id=83; -update noar ti set v3='AQA45B652PEG93X2GUTBCA2CL7LG6DWQ3MW7YBI4T2M8JEEULAPKKS87K84MYCYLZTTGF7O9ZIQDDAM2FDKYCFGX4NOLQO4ZHO1Q1HBD64BWHOK7EC4H40585WRSYO6B8MXCW837TP0R9OX9JMZ6S23S4LUFB9KCN75CVAS34DWOUNHR0GAVXBGTVO0MHCL639JZNDJ8QOK9ASA7TEEIJNSXXZM7MVB96ED59E3JJZ4F62X6KISZOTRQPZPHCWTDZ' where id=83; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='VHPHX3FNR8BD432JAU9JYZBEGTBEM8NYUVI1S3E5MBKLKN29314QG5XJ04QTEL61TSVO9QQHM3VIH3YHLAJ6QPZEXVSM34OLT5V9S91J10NZTG40XGUNKSTTC83TQ37DQZYKRNKPQWY5L4ZGK5D1V0C8BJGM9KEK43L2LL5UMQR7HWS78Z040DARY0C8X7PLG8J805DIB16LZMPVOKPGC7KWZAKFOF0AJK1M6LWJWO6IFT9PNRL73FSE0MFLYXGAJ' where id=84; -update noar ti set v0='VHPHX3FNR8BD432JAU9JYZBEGTBEM8NYUVI1S3E5MBKLKN29314QG5XJ04QTEL61TSVO9QQHM3VIH3YHLAJ6QPZEXVSM34OLT5V9S91J10NZTG40XGUNKSTTC83TQ37DQZYKRNKPQWY5L4ZGK5D1V0C8BJGM9KEK43L2LL5UMQR7HWS78Z040DARY0C8X7PLG8J805DIB16LZMPVOKPGC7KWZAKFOF0AJK1M6LWJWO6IFT9PNRL73FSE0MFLYXGAJ' where id=84; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='DA8A6LDDZ1LVOOLD12D58LQ0L4R1C54ONGOEJH62BMVJ6S9LGCF2X3CNFP7X3N31VQSQQKZN2ZFO9EBFS84URHR01YPS2PLT7DPF5U44O06V41B6ZJUPPZTQHO9XM9Z9001RVFHJL7BETRRFDEJM7829O9VELWKVXFQBT1MPCC857DJGVPWVO5H5RPNBA10F8KKORGXJUA6UU22MOFEIHD1TAK5XGO0K1S94UWBYZYUESCBH5DA6U77WEOU4G6NNX' where id=84; -update noar ti set v1='DA8A6LDDZ1LVOOLD12D58LQ0L4R1C54ONGOEJH62BMVJ6S9LGCF2X3CNFP7X3N31VQSQQKZN2ZFO9EBFS84URHR01YPS2PLT7DPF5U44O06V41B6ZJUPPZTQHO9XM9Z9001RVFHJL7BETRRFDEJM7829O9VELWKVXFQBT1MPCC857DJGVPWVO5H5RPNBA10F8KKORGXJUA6UU22MOFEIHD1TAK5XGO0K1S94UWBYZYUESCBH5DA6U77WEOU4G6NNX' where id=84; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='PJ5LUALL2G88Y3ZL176YQU77760USNMM7DQFCAURHMULAAJYXAZ3L9FSS2U59WXBWH0U9ZHUE7NK9EJK3FPIA3FTDS3SIY4152K1GXXBRZE00OKT04Y6W5ENMX6K0XRW0X6RGECKIYI22GX1XC4R14RN4SO9N7M1MFB12LH3J3UN4FIFYK69XKRPE4BWDUWCV7X5W878NHED2ENWETP79LKP2JK75E72B236NS6CWW3N24TIBGBOH3AO3LAPEU10D' where id=84; -update noar ti set v2='PJ5LUALL2G88Y3ZL176YQU77760USNMM7DQFCAURHMULAAJYXAZ3L9FSS2U59WXBWH0U9ZHUE7NK9EJK3FPIA3FTDS3SIY4152K1GXXBRZE00OKT04Y6W5ENMX6K0XRW0X6RGECKIYI22GX1XC4R14RN4SO9N7M1MFB12LH3J3UN4FIFYK69XKRPE4BWDUWCV7X5W878NHED2ENWETP79LKP2JK75E72B236NS6CWW3N24TIBGBOH3AO3LAPEU10D' where id=84; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='0FHAHXLKZRNNHJTOKUA302UYRBXTI3UY45XHDTF7719QRQWXHN3EF360U8YRPVPZ4RZ8VLSPQIKNHGPFKFX8593TT8OMWQRQH1TGH4DSNSHARZP419E7XG7NXP4ZS4L8Q2MTWGXK4K9GCMQV8UOIKDIMZ8MWSWJXKPQ7WFH9RTAPTA5OXR4F5ACOV84T2HGJPI43W3UNMJJ847H0IB1C3LWQXI61Y0YZGAW5KB7MW68KKQIHI1MIKYRU24JH9Z4LN' where id=84; -update noar ti set v3='0FHAHXLKZRNNHJTOKUA302UYRBXTI3UY45XHDTF7719QRQWXHN3EF360U8YRPVPZ4RZ8VLSPQIKNHGPFKFX8593TT8OMWQRQH1TGH4DSNSHARZP419E7XG7NXP4ZS4L8Q2MTWGXK4K9GCMQV8UOIKDIMZ8MWSWJXKPQ7WFH9RTAPTA5OXR4F5ACOV84T2HGJPI43W3UNMJJ847H0IB1C3LWQXI61Y0YZGAW5KB7MW68KKQIHI1MIKYRU24JH9Z4LN' where id=84; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='YMN4JN4O60G3GKYKGC45LL1YUC7VEJL6GMDCZJ2B0V9C8XYRQ7MEMZCP0VYS3QG8MZQIADP8OG9O1LQJJNTWJQ7E088KCUBFK0G8AL383HER588LS9OMVRYGRQZCCJTQI9V9H8EXT8B56TFLJ1B3AOA3ZW98AYNOYGZ30TJK7QITF7VTHYMLERXYTUDO036X4QN7SWP3QJVTWZGV6KICM1RK8SBH93RGR56I0FJ3IGEEDUO9QEJIWJTMOO88JEJF7' where id=85; -update noar ti set v0='YMN4JN4O60G3GKYKGC45LL1YUC7VEJL6GMDCZJ2B0V9C8XYRQ7MEMZCP0VYS3QG8MZQIADP8OG9O1LQJJNTWJQ7E088KCUBFK0G8AL383HER588LS9OMVRYGRQZCCJTQI9V9H8EXT8B56TFLJ1B3AOA3ZW98AYNOYGZ30TJK7QITF7VTHYMLERXYTUDO036X4QN7SWP3QJVTWZGV6KICM1RK8SBH93RGR56I0FJ3IGEEDUO9QEJIWJTMOO88JEJF7' where id=85; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='93YXNF3DWKVF61JYNWHWBJ2L68D8SWGM8EX7RIC05S64NR9VRSLKEQOKOMYZARSPCG6LS7BFPLUUT7USADWFI7HW71FR4KANRS2CB6BBWHI81P4V84FTL2UKTGXZBIJI4PUL38N5ABWCYPMC49UUTE0PPACP0B4BRAUV9OLCTC0WULUU0UKDBRAZUW784BO6ESB34W7JLVCKJDBP7YE32JXZ5GXRBUQJYJM779JRRI8WXFE15OF78LCRNVWUTTEAQ' where id=85; -update noar ti set v1='93YXNF3DWKVF61JYNWHWBJ2L68D8SWGM8EX7RIC05S64NR9VRSLKEQOKOMYZARSPCG6LS7BFPLUUT7USADWFI7HW71FR4KANRS2CB6BBWHI81P4V84FTL2UKTGXZBIJI4PUL38N5ABWCYPMC49UUTE0PPACP0B4BRAUV9OLCTC0WULUU0UKDBRAZUW784BO6ESB34W7JLVCKJDBP7YE32JXZ5GXRBUQJYJM779JRRI8WXFE15OF78LCRNVWUTTEAQ' where id=85; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='3QTKKLRXFDNGY27FTGIOTM2ODR7UI88BC8E6LOUXZUFWC0BFZRHBSMB1TTFEF7UBO8X3YI7DMDXYVSVWYAUGAYHVC7CEORJP5PSN6YN3JEJHDEBECLIKLMPYC8BDU3HNYZ0S9Q2CX915E7MQXNVIT8BYL1CA8D26S0QZV4YKT02DN80EX9DUTA7WGJK04ZU23MHX8DBCVESLKXDFG63ZCF8EDD54M6CLAXZ8J3DFFYNYS2XIWLH9MLYQLSYSTUO6C' where id=85; -update noar ti set v2='3QTKKLRXFDNGY27FTGIOTM2ODR7UI88BC8E6LOUXZUFWC0BFZRHBSMB1TTFEF7UBO8X3YI7DMDXYVSVWYAUGAYHVC7CEORJP5PSN6YN3JEJHDEBECLIKLMPYC8BDU3HNYZ0S9Q2CX915E7MQXNVIT8BYL1CA8D26S0QZV4YKT02DN80EX9DUTA7WGJK04ZU23MHX8DBCVESLKXDFG63ZCF8EDD54M6CLAXZ8J3DFFYNYS2XIWLH9MLYQLSYSTUO6C' where id=85; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='B8049LHH5FY9AO6WH71L37MBXUHYT4624TX7ZUP5XNL6GF938UC6FB6BTLY8TWHRPW1ZTCIRXS58BWSDN0UO0WX2MZ3U65APTH9IGF650HNRTXHXZFOB1IPQPX239CJXIBD4ECS8MWKN62OO3LEBIE2A454W74X14XE7X7X0068E8L7Q3623NEMWZ1FZKW63M90X787THKZ4FCVVNL76HKXTNXFSDX1V5JTYF41F7XANF4QNZ4XJAFZTIAT3J34SI' where id=85; -update noar ti set v3='B8049LHH5FY9AO6WH71L37MBXUHYT4624TX7ZUP5XNL6GF938UC6FB6BTLY8TWHRPW1ZTCIRXS58BWSDN0UO0WX2MZ3U65APTH9IGF650HNRTXHXZFOB1IPQPX239CJXIBD4ECS8MWKN62OO3LEBIE2A454W74X14XE7X7X0068E8L7Q3623NEMWZ1FZKW63M90X787THKZ4FCVVNL76HKXTNXFSDX1V5JTYF41F7XANF4QNZ4XJAFZTIAT3J34SI' where id=85; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='07PA99K9Y08R1MHMN8ZPHNZYDDFYKO0PQLHFPQQH4P727IA16R5VO6CJDBQFXI0EC2VMNRITR3WV9HPGJDRIOHUJ00G4S8F5OF8WQNTGC2HPTD9EFI4CK0OVKROTPEEMYP97LEUFWW0GGX4AKXAH7S0JWHJT2N9YU7VPQ9TX7NU2I6O05V7RNS0MYXRSDC3CXXPHXKURL0P42O8GB9XKEXPWZWYEJB6SPGDQU0B9RT8X6VVAQACJYMNY2EU5KKRFH' where id=86; -update noar ti set v0='07PA99K9Y08R1MHMN8ZPHNZYDDFYKO0PQLHFPQQH4P727IA16R5VO6CJDBQFXI0EC2VMNRITR3WV9HPGJDRIOHUJ00G4S8F5OF8WQNTGC2HPTD9EFI4CK0OVKROTPEEMYP97LEUFWW0GGX4AKXAH7S0JWHJT2N9YU7VPQ9TX7NU2I6O05V7RNS0MYXRSDC3CXXPHXKURL0P42O8GB9XKEXPWZWYEJB6SPGDQU0B9RT8X6VVAQACJYMNY2EU5KKRFH' where id=86; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='MGJOO4EAVA6XK9GVC0I5FGJQ8R88FHA4PXPS0F57S06VJGWVW30VVS426Q2XSZELYBJKOT008PA4R64HJE19QQD8OQ4WHLMY9UH47WT14M10CTQWHLFWP01JXIXBHEMAKCBF1QB6I6D4OK62FMWXIP20BQWL2T13FJ8Y3Q9230T8SK2V4GO2HC9706YSRN75X3IBO6JRTSJ0YO4NBEIOFVKQZ6YD7OUOPU6OV4OK8L82JHUU4W6A8UFHJPV7GTYPV' where id=86; -update noar ti set v1='MGJOO4EAVA6XK9GVC0I5FGJQ8R88FHA4PXPS0F57S06VJGWVW30VVS426Q2XSZELYBJKOT008PA4R64HJE19QQD8OQ4WHLMY9UH47WT14M10CTQWHLFWP01JXIXBHEMAKCBF1QB6I6D4OK62FMWXIP20BQWL2T13FJ8Y3Q9230T8SK2V4GO2HC9706YSRN75X3IBO6JRTSJ0YO4NBEIOFVKQZ6YD7OUOPU6OV4OK8L82JHUU4W6A8UFHJPV7GTYPV' where id=86; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='0LZB9SU9TDHNNTS3IJ7RA3ABA91ZGHYNMC9JV8GU75YIA0TVVCK7UIQIHR738T5G0RXHYTNTK3NSJ0MW95JWY7ANVL7X16ON0FJ4RIALH7U06RSI9GHWGU2A00G5SMKL0SM0ANNB39SFN2ZPO03IALQ6MNJW6IN0VG9EGGKBLI9DCJ7F9ZC7V7ZPI5696F4T3VGI54CSDANPRB39UXCRW1GJDQIXVTK4WAI8XCBU0UJA8RFSYW6ON6SI9OJQIX4OY' where id=86; -update noar ti set v2='0LZB9SU9TDHNNTS3IJ7RA3ABA91ZGHYNMC9JV8GU75YIA0TVVCK7UIQIHR738T5G0RXHYTNTK3NSJ0MW95JWY7ANVL7X16ON0FJ4RIALH7U06RSI9GHWGU2A00G5SMKL0SM0ANNB39SFN2ZPO03IALQ6MNJW6IN0VG9EGGKBLI9DCJ7F9ZC7V7ZPI5696F4T3VGI54CSDANPRB39UXCRW1GJDQIXVTK4WAI8XCBU0UJA8RFSYW6ON6SI9OJQIX4OY' where id=86; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='PMV0PY6F1MMZVICFX1NIBKQ7TGHWN5TG7Q6084EAN1S0OPFQGINF5EOOFEJPDDXWTTCN9OZC7HSHBBOXW18GG0XAGBBIJAK7HHRAZOMTYVHX7CJYHBW0NPQZ4N0ICUD6TLAHXP8RRYCLVH5UQ0L1CSXTBWQWZNW8GCKURBA0FAN5XJIK57YCF69OALKB1BRL7N5NLPIJ7OHC0E2V65TJURH9Y8CXDRMOOGUJSGHYLS7TGZ34DEIQY0P1H4NT3MF3Y' where id=86; -update noar ti set v3='PMV0PY6F1MMZVICFX1NIBKQ7TGHWN5TG7Q6084EAN1S0OPFQGINF5EOOFEJPDDXWTTCN9OZC7HSHBBOXW18GG0XAGBBIJAK7HHRAZOMTYVHX7CJYHBW0NPQZ4N0ICUD6TLAHXP8RRYCLVH5UQ0L1CSXTBWQWZNW8GCKURBA0FAN5XJIK57YCF69OALKB1BRL7N5NLPIJ7OHC0E2V65TJURH9Y8CXDRMOOGUJSGHYLS7TGZ34DEIQY0P1H4NT3MF3Y' where id=86; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='88TCH8BT2A3WQ60BCG7RR6B923JDQ8L26NS8X7J2UPM0AQVH5A0SC1L6V5312Y3KP2RDWHXW1DOW0NSXJEOD1I7YEU8YCCJ54KWGMSMNP3DA6RM4WHGYPVK6OE9IZ3LN3K7L7KZBLSQQFQW2O4XEFL0GYWTJ1ITLTZ1HKKGRNWUNBIV5R1W2CH0B3D616L8B2CWXA49DNCEDGNS2E17PI0FGA49XVZW6JT2PR7T9J8LAMT5NQIUFCMIJ8ZYGZYGFT' where id=87; -update noar ti set v0='88TCH8BT2A3WQ60BCG7RR6B923JDQ8L26NS8X7J2UPM0AQVH5A0SC1L6V5312Y3KP2RDWHXW1DOW0NSXJEOD1I7YEU8YCCJ54KWGMSMNP3DA6RM4WHGYPVK6OE9IZ3LN3K7L7KZBLSQQFQW2O4XEFL0GYWTJ1ITLTZ1HKKGRNWUNBIV5R1W2CH0B3D616L8B2CWXA49DNCEDGNS2E17PI0FGA49XVZW6JT2PR7T9J8LAMT5NQIUFCMIJ8ZYGZYGFT' where id=87; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='8MH9FXKUB9191VRDMZ2DVPLA2LO0EB8PBRZMMAVCTQPJ4EGL1F01P66W7CNR39ZYJDP73LZTW2I76VP8JBH7VCP6NMI1QBN20JE080DTPCO7DQMZ7SPXBOKUSEU2S35GRR3FYS16U20R2UR87OKVFWSQO8DT3PL3FG49BHS56PY66TY6XXNL4EXE68XX2CB2IYKNYEP5TXCDUYGAY44OVHC288U97G0Q4WXAGMTI5H79FDLIFIMBU2K1L1PY0OR2G' where id=87; -update noar ti set v1='8MH9FXKUB9191VRDMZ2DVPLA2LO0EB8PBRZMMAVCTQPJ4EGL1F01P66W7CNR39ZYJDP73LZTW2I76VP8JBH7VCP6NMI1QBN20JE080DTPCO7DQMZ7SPXBOKUSEU2S35GRR3FYS16U20R2UR87OKVFWSQO8DT3PL3FG49BHS56PY66TY6XXNL4EXE68XX2CB2IYKNYEP5TXCDUYGAY44OVHC288U97G0Q4WXAGMTI5H79FDLIFIMBU2K1L1PY0OR2G' where id=87; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='QNNPUX98IZ1946B7Y0FSA753076LCPYH1LF69OFIAK95LHFSHPDVFV8X00WLI6G8OQQMN1BNP2GUCLL0P1EE90A73RHO1FN7X27X0Z7B64BHNIIK63BQ1EZM85QTXT9CKHW63DB8ZV093SKGMM9QE318O93H1QUYVD8NYS2CGGHXP832A5YX1IO5HY8917LF5TSC7U2WSG1UPPYHJTHQ01ZFAW1XKZBEAIEON8D8GLJSC5FWI7P93FO0BTV3F2AL0' where id=87; -update noar ti set v2='QNNPUX98IZ1946B7Y0FSA753076LCPYH1LF69OFIAK95LHFSHPDVFV8X00WLI6G8OQQMN1BNP2GUCLL0P1EE90A73RHO1FN7X27X0Z7B64BHNIIK63BQ1EZM85QTXT9CKHW63DB8ZV093SKGMM9QE318O93H1QUYVD8NYS2CGGHXP832A5YX1IO5HY8917LF5TSC7U2WSG1UPPYHJTHQ01ZFAW1XKZBEAIEON8D8GLJSC5FWI7P93FO0BTV3F2AL0' where id=87; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='K3ZM9BYF6TPV9G5OLX9MC1VE72RJH3EUK00RSCMTXRPOFPJFVAMPPL449BSYZISR9Z33PQGEZ8TOHW5BNPBKBBUWE94EHCS2DW8CBDIREK6082LJ6GZUTCQL6BEU90Q5MOXE2A044XT5IYZDM1KP9MEHPY37DRR1B769VWT5H8LXV0I3TBRYM116DQF2C6MAM15EJW14JRQT9CVAESURHIJD2X41OL70HMA37GJF34YEBMEBPP9T2RFWW4JUFVA8N' where id=87; -update noar ti set v3='K3ZM9BYF6TPV9G5OLX9MC1VE72RJH3EUK00RSCMTXRPOFPJFVAMPPL449BSYZISR9Z33PQGEZ8TOHW5BNPBKBBUWE94EHCS2DW8CBDIREK6082LJ6GZUTCQL6BEU90Q5MOXE2A044XT5IYZDM1KP9MEHPY37DRR1B769VWT5H8LXV0I3TBRYM116DQF2C6MAM15EJW14JRQT9CVAESURHIJD2X41OL70HMA37GJF34YEBMEBPP9T2RFWW4JUFVA8N' where id=87; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='131I42L7FIJGNQ7KYY88QWDKYY6SHJX405VSN6JHPM6WS96NAF806N784S476OF5GPLELZNMZ5HUK5R5NTB5ANVSSDMG2NUY98EWW6YQBZ1BMDBBXHD87MCH2UCUJLEKY2TWKIPIJRK4Z85JVWCT7CF5NG65N7O63DV1HC1H55C00F2NUTBL4BUILRAOZ20KFSTX8VUDUSXC03K6X8CMGRTWS7Y891TX7ATCIJPTN3O4YETH2M5NF0V5Q7C5VF01F' where id=88; -update noar ti set v0='131I42L7FIJGNQ7KYY88QWDKYY6SHJX405VSN6JHPM6WS96NAF806N784S476OF5GPLELZNMZ5HUK5R5NTB5ANVSSDMG2NUY98EWW6YQBZ1BMDBBXHD87MCH2UCUJLEKY2TWKIPIJRK4Z85JVWCT7CF5NG65N7O63DV1HC1H55C00F2NUTBL4BUILRAOZ20KFSTX8VUDUSXC03K6X8CMGRTWS7Y891TX7ATCIJPTN3O4YETH2M5NF0V5Q7C5VF01F' where id=88; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='EWUPKULP6UG5MF1MRX86EMIP7TGZ680BG1R9VJQZBNB94TDK02VWSIT57KVCWSM1YOQ61YEKEG4PAY3PRA9QBXPEC6GIPZ0FASZLADBU9YSKN3FUH48CH0578JQAQAA5ECX6UB0OZ91TR9WWSIKQLEGGFKNH2MFSH6MRL0QTMAZYMLIY2ZAT6LK98JZVGJSDAO90SW4Z16RLIGZI3AD5VGRNMWG7BQG1PMI8C2UNUVJC4C1L60Z2SP1NL8UW6PA94' where id=88; -update noar ti set v1='EWUPKULP6UG5MF1MRX86EMIP7TGZ680BG1R9VJQZBNB94TDK02VWSIT57KVCWSM1YOQ61YEKEG4PAY3PRA9QBXPEC6GIPZ0FASZLADBU9YSKN3FUH48CH0578JQAQAA5ECX6UB0OZ91TR9WWSIKQLEGGFKNH2MFSH6MRL0QTMAZYMLIY2ZAT6LK98JZVGJSDAO90SW4Z16RLIGZI3AD5VGRNMWG7BQG1PMI8C2UNUVJC4C1L60Z2SP1NL8UW6PA94' where id=88; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='5YH8LTLGSJ0D6LUU5JQEAOJ34R5Y3XDZOR8ZYWE1DKW0HPR6RLSVCNAV377YCHPR0BBJKVEOAG07XAORX1119SWM72S0CEPCYMV3N9TLWTPJSPOGX0BJJ3UZKQZJJUTMLL6K5N1UIKWXBZNCOWMMJUVRT4CLFWMO7253IL3MO8GCNG3PJ4XN5XSGM5QQ9VM3P3RGDW03OSBZE8NRKH7PWZX4M5PPTB29D44PL6DRO7TRHK2XZ388NUJTGW5WNF9UN' where id=88; -update noar ti set v2='5YH8LTLGSJ0D6LUU5JQEAOJ34R5Y3XDZOR8ZYWE1DKW0HPR6RLSVCNAV377YCHPR0BBJKVEOAG07XAORX1119SWM72S0CEPCYMV3N9TLWTPJSPOGX0BJJ3UZKQZJJUTMLL6K5N1UIKWXBZNCOWMMJUVRT4CLFWMO7253IL3MO8GCNG3PJ4XN5XSGM5QQ9VM3P3RGDW03OSBZE8NRKH7PWZX4M5PPTB29D44PL6DRO7TRHK2XZ388NUJTGW5WNF9UN' where id=88; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='6962IUYMMANZF4VQCQR9W0OA9PXEL6VA2ZOQULH3J8EASPTD45V45O2JPHVXTX7M3OMHR4AXPTRLU9CRZR091K7L59ZAVV4KCXAQ0I0OY7Z5Y32IABDWIZY5T034EKWQ68BHS1020CRWLW8BXBJV6JI2204IQ4KY3CIP619PUTN42QBGM9JO0ANCGBAOLH9V4DQYCQM3FY4YQ0IJM7PCZEFAJGOAR1H7P5L0YL9L12R6EYLKRN2U6M679PVVKN4J2' where id=88; -update noar ti set v3='6962IUYMMANZF4VQCQR9W0OA9PXEL6VA2ZOQULH3J8EASPTD45V45O2JPHVXTX7M3OMHR4AXPTRLU9CRZR091K7L59ZAVV4KCXAQ0I0OY7Z5Y32IABDWIZY5T034EKWQ68BHS1020CRWLW8BXBJV6JI2204IQ4KY3CIP619PUTN42QBGM9JO0ANCGBAOLH9V4DQYCQM3FY4YQ0IJM7PCZEFAJGOAR1H7P5L0YL9L12R6EYLKRN2U6M679PVVKN4J2' where id=88; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='BRYU5QKKR83PAV2SQG7T3S0D3YWEDNQMR59GTKOJH6KRFAGYYRL0C9OUR3OTXLTWM06UCWG89KIQN7G91ZKGUIQMY6HX2RLJ66U2TI4WUJG929BTQF57ZS6HSRDTPE5KGXRY937O21GI6E8DY44SFREGU9NQH514SNU8U4KV10RCYHTUKW29CZAH9V9RU6ME6QAO06Z4IQGRSFRRLOP8ZLJWK1IWUXUK72M8A71A3LGETXOGYOAYH5R4E1D1XCT39' where id=89; -update noar ti set v0='BRYU5QKKR83PAV2SQG7T3S0D3YWEDNQMR59GTKOJH6KRFAGYYRL0C9OUR3OTXLTWM06UCWG89KIQN7G91ZKGUIQMY6HX2RLJ66U2TI4WUJG929BTQF57ZS6HSRDTPE5KGXRY937O21GI6E8DY44SFREGU9NQH514SNU8U4KV10RCYHTUKW29CZAH9V9RU6ME6QAO06Z4IQGRSFRRLOP8ZLJWK1IWUXUK72M8A71A3LGETXOGYOAYH5R4E1D1XCT39' where id=89; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='SH1GPNR8TGM4YSB1DQDHLEANT329WTK199FQEXJW3TMAEM09UWKKYHME3LBDY0M8YI1ASZDK87QN7M7Z97BBBBII6BI7YX1XAMQP5G3RL311OW0C3BCK3DA28KW69EVUPD59NOPQ0SIDNJCQ0PEX523XJCG4WSYAMQFMJA1PL5DLIC3C0RNQM819C906J6593Z34XJH0AQSY0YNAV14UGD8MAEPD84HON0CUZU7M3T6CG7023Z4SUQUSARCNW095Z' where id=89; -update noar ti set v1='SH1GPNR8TGM4YSB1DQDHLEANT329WTK199FQEXJW3TMAEM09UWKKYHME3LBDY0M8YI1ASZDK87QN7M7Z97BBBBII6BI7YX1XAMQP5G3RL311OW0C3BCK3DA28KW69EVUPD59NOPQ0SIDNJCQ0PEX523XJCG4WSYAMQFMJA1PL5DLIC3C0RNQM819C906J6593Z34XJH0AQSY0YNAV14UGD8MAEPD84HON0CUZU7M3T6CG7023Z4SUQUSARCNW095Z' where id=89; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='CZPY45G01J75DBNI6SSSTQ9GJUEHR22QVYTCTRDH0ZXHWKET6I4KRVB3ND5LC9BQJONLVUYD4J6V83K3K37LVUF5Y9DALIGE5N4OM50TEZ0VQGVXN48W7BMAV089ZT1A9XPRRW6Q6J676GMDKRNX7YTM4Y1AK62SVRO534DF5EII753729NSPPLRW9RO2F1MJN7FFTFL2F8XKE42K3L0QQOFKY1JVIVCFV160ENRLUEU4XQB097S344R5XT1TOX3Z' where id=89; -update noar ti set v2='CZPY45G01J75DBNI6SSSTQ9GJUEHR22QVYTCTRDH0ZXHWKET6I4KRVB3ND5LC9BQJONLVUYD4J6V83K3K37LVUF5Y9DALIGE5N4OM50TEZ0VQGVXN48W7BMAV089ZT1A9XPRRW6Q6J676GMDKRNX7YTM4Y1AK62SVRO534DF5EII753729NSPPLRW9RO2F1MJN7FFTFL2F8XKE42K3L0QQOFKY1JVIVCFV160ENRLUEU4XQB097S344R5XT1TOX3Z' where id=89; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='Q1SCK8LHFCEOUSR3VFDPFA3NOG3OSR9NHL8QW50OMU73FD3M4YXQ3YAQQIK03M23FNFQSV3HXRDZP1N1ZHECG2D41ORP3QITSO3TKW23N0CI9I7571T66KAO5YTMK6TJW84CPB7J9R4U4QUZBEN2AZIPE7WBIQBB3FNLN1YC79OLTUZH0ZO3K84EKXR3VFBINZY8N6ICOCSSN4X10QDBNMIT8LPT6N8KEHA4FGMB47E9KSI26G4WC0K8EYLHG6R5Q' where id=89; -update noar ti set v3='Q1SCK8LHFCEOUSR3VFDPFA3NOG3OSR9NHL8QW50OMU73FD3M4YXQ3YAQQIK03M23FNFQSV3HXRDZP1N1ZHECG2D41ORP3QITSO3TKW23N0CI9I7571T66KAO5YTMK6TJW84CPB7J9R4U4QUZBEN2AZIPE7WBIQBB3FNLN1YC79OLTUZH0ZO3K84EKXR3VFBINZY8N6ICOCSSN4X10QDBNMIT8LPT6N8KEHA4FGMB47E9KSI26G4WC0K8EYLHG6R5Q' where id=89; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='1L1W7ANM6CLDIZ148DXZ5IIHL7UX92HNYZ3F5OXCI5QJ6SBPPO7GCC8PIJ9O5HPV0939V0RHWU591TET75M313Z6951U1ZI26BBEM05X66O67TTDLBXJGLEDLRO07KJRDL2445QQGFOU57ZR3JXCG6TUFW8FGVGO9X702FRLCNGCL031UJ5PV9JTKKET6FWSU7Z28ARAQD0IULOUHHPZOXCVCR2X158CGDULERO8DM8BQA1VZN9IZJXMBKUAQ3ZC7' where id=90; -update noar ti set v0='1L1W7ANM6CLDIZ148DXZ5IIHL7UX92HNYZ3F5OXCI5QJ6SBPPO7GCC8PIJ9O5HPV0939V0RHWU591TET75M313Z6951U1ZI26BBEM05X66O67TTDLBXJGLEDLRO07KJRDL2445QQGFOU57ZR3JXCG6TUFW8FGVGO9X702FRLCNGCL031UJ5PV9JTKKET6FWSU7Z28ARAQD0IULOUHHPZOXCVCR2X158CGDULERO8DM8BQA1VZN9IZJXMBKUAQ3ZC7' where id=90; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='R4GXHHW8HUA2NE93YTIBLWISI09ZXUWT4R1BQZS6LYY7TGRM13RAB2526IO5P9CUJB0PHTK6DHYPI4QA187AAQDPYJMI5XUH7ZU86S4ZYYVM8CB25YEBOJ3DEVZ2HTCD4R9LBBPX6SMXERV3EI4YTFFFD3KUVQS6G6KJNYWYNKCISSF438F9M1CF287MXYP8NIUJOU9AJ86X82GU2TSLBLBNJWJGGQKLOG3PNPC7UEQ172Z2G15I2DQJUC10BFFOR' where id=90; -update noar ti set v1='R4GXHHW8HUA2NE93YTIBLWISI09ZXUWT4R1BQZS6LYY7TGRM13RAB2526IO5P9CUJB0PHTK6DHYPI4QA187AAQDPYJMI5XUH7ZU86S4ZYYVM8CB25YEBOJ3DEVZ2HTCD4R9LBBPX6SMXERV3EI4YTFFFD3KUVQS6G6KJNYWYNKCISSF438F9M1CF287MXYP8NIUJOU9AJ86X82GU2TSLBLBNJWJGGQKLOG3PNPC7UEQ172Z2G15I2DQJUC10BFFOR' where id=90; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='63VGP2SCNVZAYTH1KDUK5LLLTE20FWEL4Z1XYJIT8QWQEDM68FPDKXF6MNDI2A5TOOE9UHPOVR9BDTWLSCQ5TTFU2KR7EFL4A22F2684BHUL5IA2RXN3PEHZUMIWJV0INMXM8UOVY1K5UNRHSWKIK7RQ61MK8891GAXMB2ISK4U2YYB46DYNQXX87QBGHX8376UTVZQZJYDBREBHE5TBLARCMYUW28N3QZXJ2PC8BWJ7VRKJS0Q2MYLTWTE9FY1ZK' where id=90; -update noar ti set v2='63VGP2SCNVZAYTH1KDUK5LLLTE20FWEL4Z1XYJIT8QWQEDM68FPDKXF6MNDI2A5TOOE9UHPOVR9BDTWLSCQ5TTFU2KR7EFL4A22F2684BHUL5IA2RXN3PEHZUMIWJV0INMXM8UOVY1K5UNRHSWKIK7RQ61MK8891GAXMB2ISK4U2YYB46DYNQXX87QBGHX8376UTVZQZJYDBREBHE5TBLARCMYUW28N3QZXJ2PC8BWJ7VRKJS0Q2MYLTWTE9FY1ZK' where id=90; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='4XXV8VTI8TV1DJALD6ZQTAXR0SE05D7N5KWRZZ8VZFL71XB33CZWVO9V0C8UFCBGCGF4I2VWPXSFNSFMM4WWS0NWWRW2HGLWJMBNWNCL47IC6YMT2074VSO1NJFW8QHZ1S7LEH1DH4CD8ROCP4K5C9PN99ID4A545NDKII8O3WZLKH3YXC6KGAGC1A4OFBPKKO1H6QANDJJEPI4HU6DED0NB4FHWB86YIOKR9QK830ZS3XTHLX9UQ6HUHIUSTSXO5' where id=90; -update noar ti set v3='4XXV8VTI8TV1DJALD6ZQTAXR0SE05D7N5KWRZZ8VZFL71XB33CZWVO9V0C8UFCBGCGF4I2VWPXSFNSFMM4WWS0NWWRW2HGLWJMBNWNCL47IC6YMT2074VSO1NJFW8QHZ1S7LEH1DH4CD8ROCP4K5C9PN99ID4A545NDKII8O3WZLKH3YXC6KGAGC1A4OFBPKKO1H6QANDJJEPI4HU6DED0NB4FHWB86YIOKR9QK830ZS3XTHLX9UQ6HUHIUSTSXO5' where id=90; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='FWVLA52VDA5RM3ASLMI5F264IB2WSYYEOUGXEZNJ1N9INIYY8ZSKHMWI7HF9CZ7O746WPOQ4KH04318VOQORYW0KLMGKQJ2A87BBT19BG9YDOB4DNV1GINKSZ5GPKDM0G3H7ON0G8HKIR71M3MCYJK8S6R5O40CM3R3FCU0QL9D34O1CQSS1HCXVCXUM9EYLN6N0RCBPF6DO5QXRY2OJRG7FXFFTNZ01UMPMSGLNRLJ9DX0ZGF8942YQNI6ZPVLRJ' where id=91; -update noar ti set v0='FWVLA52VDA5RM3ASLMI5F264IB2WSYYEOUGXEZNJ1N9INIYY8ZSKHMWI7HF9CZ7O746WPOQ4KH04318VOQORYW0KLMGKQJ2A87BBT19BG9YDOB4DNV1GINKSZ5GPKDM0G3H7ON0G8HKIR71M3MCYJK8S6R5O40CM3R3FCU0QL9D34O1CQSS1HCXVCXUM9EYLN6N0RCBPF6DO5QXRY2OJRG7FXFFTNZ01UMPMSGLNRLJ9DX0ZGF8942YQNI6ZPVLRJ' where id=91; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='8VVJ3ZIVBBM8OH9SL8O1CIC5HON4HFPLWHYM55KM1FBCVAW327EBT80RDUCJLV1615NOCA0TFBL6CYRPKHL6ZMJ1A2FIT50KV7KFN6CGUJUYLT8J2XGY7AUMHOT2QR6OXO052TEMSKQ3UU04YH20BQ37MG0CYHY9QZ77VYRTZ9N0T8RR4779PRS0OMBUNU7Y6W9CU0AS6PSJPADV1MQ0K0H9BF5DZFFHVFMTXHMEQR0WPL76UG3XUWALI3SV9L7NE' where id=91; -update noar ti set v1='8VVJ3ZIVBBM8OH9SL8O1CIC5HON4HFPLWHYM55KM1FBCVAW327EBT80RDUCJLV1615NOCA0TFBL6CYRPKHL6ZMJ1A2FIT50KV7KFN6CGUJUYLT8J2XGY7AUMHOT2QR6OXO052TEMSKQ3UU04YH20BQ37MG0CYHY9QZ77VYRTZ9N0T8RR4779PRS0OMBUNU7Y6W9CU0AS6PSJPADV1MQ0K0H9BF5DZFFHVFMTXHMEQR0WPL76UG3XUWALI3SV9L7NE' where id=91; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='C3Z1IFT3RZWXJGZA9DDKQQ881R0PLTHTEFDQ2VDY2209TOVOSCT1MA28WBYKQ37HOI9P6KD00KLNAK00G98OZ8ARF5ZM072HRU5ATNBBNRE1V5K6FRBUHGED5788H0D0KV26YKXR3CAYVRKN5W5YIOBE8V44UUC0GZDLVDRGYHXL2TUCWD3A9DIS8NPVL2V1A9063B1BZST0U736FS0BVNJSP9I8V8XFWCFS3QTM7QSNHMPUIL70BL5J2QK7ACONM' where id=91; -update noar ti set v2='C3Z1IFT3RZWXJGZA9DDKQQ881R0PLTHTEFDQ2VDY2209TOVOSCT1MA28WBYKQ37HOI9P6KD00KLNAK00G98OZ8ARF5ZM072HRU5ATNBBNRE1V5K6FRBUHGED5788H0D0KV26YKXR3CAYVRKN5W5YIOBE8V44UUC0GZDLVDRGYHXL2TUCWD3A9DIS8NPVL2V1A9063B1BZST0U736FS0BVNJSP9I8V8XFWCFS3QTM7QSNHMPUIL70BL5J2QK7ACONM' where id=91; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='GM8NUPGQZQXY8MJ4IFSCNJEDHXF3OY1HP3U7ER0J9AOVN5PFULM0440NGDOK5ZVBOFWP611KWHTC1CCLFCA76HRXUPN6ZYU0QV0EBI9XNT9NA6FW4NFIKZO6RN4GCFT4ZGFM0R2KB2S2FMUTH7JRZI30OOM682NQUAZY5BU3HXDBQOGQZ47YQWJZOHKNE09A69RNYI6FA4BL4ZIDHUQTPQ2IHBRQTZAIKAMBXYEV3KLCFXSO9N1K4VVYH6BSE26Z6' where id=91; -update noar ti set v3='GM8NUPGQZQXY8MJ4IFSCNJEDHXF3OY1HP3U7ER0J9AOVN5PFULM0440NGDOK5ZVBOFWP611KWHTC1CCLFCA76HRXUPN6ZYU0QV0EBI9XNT9NA6FW4NFIKZO6RN4GCFT4ZGFM0R2KB2S2FMUTH7JRZI30OOM682NQUAZY5BU3HXDBQOGQZ47YQWJZOHKNE09A69RNYI6FA4BL4ZIDHUQTPQ2IHBRQTZAIKAMBXYEV3KLCFXSO9N1K4VVYH6BSE26Z6' where id=91; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='RVV1H440G7IF2JHF0GI37EP291FYD9RXRP5ST5Z1GG41J1Y6R1ELJZSUHMKQ52H92MFE72OI40AJKSPHPKTGW5KKC83OSWYFU2YMY2KNNYXP2A2F5LBBB9NYVALIY3J12YLHQR9C3N8BUF7A9OMOA9SY8FAVNUVTYOYWCJGKLXCUYNUWD47WLQAILOQT6LROTT9Z6RY6FBXGYIEA6VYJD69SY7752NEBEZIAG4YB99TIIAE1ZKNBONZ134F1X39JD' where id=92; -update noar ti set v0='RVV1H440G7IF2JHF0GI37EP291FYD9RXRP5ST5Z1GG41J1Y6R1ELJZSUHMKQ52H92MFE72OI40AJKSPHPKTGW5KKC83OSWYFU2YMY2KNNYXP2A2F5LBBB9NYVALIY3J12YLHQR9C3N8BUF7A9OMOA9SY8FAVNUVTYOYWCJGKLXCUYNUWD47WLQAILOQT6LROTT9Z6RY6FBXGYIEA6VYJD69SY7752NEBEZIAG4YB99TIIAE1ZKNBONZ134F1X39JD' where id=92; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='E5PPN4GMT8RKWB2ZCX0TRLNJLJRVPKB9WKG46DYD3ITX1EI1ABX0KPQ01LWYSSCFRCNRXK3NPGHYZ47QDABF07LK1HNC2NM3OSQW13TB9JPKQVS2I9NC7VH47P3BAYMQYLKQP16LSZJSC92U098ULCRDJO2DJXTDBQ0A5YRV45L525UPZ1RAEXQE4UIS6H8W1Y3660IY5MOKBJWIFUFKU94IB4IFIDJ44FE0H99ZNXA4LD3075A4ZJYBZN5JQCT34' where id=92; -update noar ti set v1='E5PPN4GMT8RKWB2ZCX0TRLNJLJRVPKB9WKG46DYD3ITX1EI1ABX0KPQ01LWYSSCFRCNRXK3NPGHYZ47QDABF07LK1HNC2NM3OSQW13TB9JPKQVS2I9NC7VH47P3BAYMQYLKQP16LSZJSC92U098ULCRDJO2DJXTDBQ0A5YRV45L525UPZ1RAEXQE4UIS6H8W1Y3660IY5MOKBJWIFUFKU94IB4IFIDJ44FE0H99ZNXA4LD3075A4ZJYBZN5JQCT34' where id=92; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='0N9AJV21Y70A87DVQMZGAVG663IMW936TIKECOWLCE5JPVRWFNQFZS8JDXIPIY5UOQETRJNDL9EUS96IRD15P2NIHA0B91MIKZMHOTM2ZQK3XBDFLD3411U38USXOYX35YXY2LLY31170T7H5MZAOTAIV4L791D0D9B5U2684CKRFY58Q1T41SP8ZCCU35N5EZ71EPTVXTMFO194MKR1Z8MJIED2KQ373NNG4ALI028MZBAJ1J3J7N3RTECPSS8S1' where id=92; -update noar ti set v2='0N9AJV21Y70A87DVQMZGAVG663IMW936TIKECOWLCE5JPVRWFNQFZS8JDXIPIY5UOQETRJNDL9EUS96IRD15P2NIHA0B91MIKZMHOTM2ZQK3XBDFLD3411U38USXOYX35YXY2LLY31170T7H5MZAOTAIV4L791D0D9B5U2684CKRFY58Q1T41SP8ZCCU35N5EZ71EPTVXTMFO194MKR1Z8MJIED2KQ373NNG4ALI028MZBAJ1J3J7N3RTECPSS8S1' where id=92; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='5NRG9TPQJFGZPU55R7HQ7DAE2WMTN6S3HGTZAN8HBIMFKDCG3DTAP4AWGSKEBBFYJGG8RGTYXWIBBVPHW66F4HLSFZBXLINYJZ8F8DNUTF0ZERIIOGRSQFXPMD0F3D2LHRJU14JSQ4COTDYT87Y79ZX8ZV5NI2H5SP1YM9Y9C8UN0YCBNMVRKRVPQ3AYQVEW1O4QB3BHXZKGGGRLYX2ULCR2ONSGYVES6JXWO4O6KA68ACHXRT5F28FAMQNNEV5GC' where id=92; -update noar ti set v3='5NRG9TPQJFGZPU55R7HQ7DAE2WMTN6S3HGTZAN8HBIMFKDCG3DTAP4AWGSKEBBFYJGG8RGTYXWIBBVPHW66F4HLSFZBXLINYJZ8F8DNUTF0ZERIIOGRSQFXPMD0F3D2LHRJU14JSQ4COTDYT87Y79ZX8ZV5NI2H5SP1YM9Y9C8UN0YCBNMVRKRVPQ3AYQVEW1O4QB3BHXZKGGGRLYX2ULCR2ONSGYVES6JXWO4O6KA68ACHXRT5F28FAMQNNEV5GC' where id=92; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='8OGUBG5PSFM9YFCRNYE1P416D66N991D3KNN79ITKN9Q4B37N7CPZVYP1BSTV60QHPWFGIUDRZKQWEG797PZ4KVX9XM0JI1MCPADAKTQYHJXIGB81Y3DLT8T7LMBWFSJ122KF8MQ3MX2WN68WWSSELG62H40WNTXORE23MM3RDK77OKCEH9ZP64Q0UKUJAINMDW8ENN3Y16AKHHOGD1XIXG131GCC43O3BSNDOWB9DW8S5JQKOH8PU272XJWLC0X5' where id=93; -update noar ti set v0='8OGUBG5PSFM9YFCRNYE1P416D66N991D3KNN79ITKN9Q4B37N7CPZVYP1BSTV60QHPWFGIUDRZKQWEG797PZ4KVX9XM0JI1MCPADAKTQYHJXIGB81Y3DLT8T7LMBWFSJ122KF8MQ3MX2WN68WWSSELG62H40WNTXORE23MM3RDK77OKCEH9ZP64Q0UKUJAINMDW8ENN3Y16AKHHOGD1XIXG131GCC43O3BSNDOWB9DW8S5JQKOH8PU272XJWLC0X5' where id=93; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='NI8A2ZUGRMA1UG3K6IC036SQ8LCRHMQB83WKHTTELLFPES4LPHT6JLXRKN30OFSUQMM574L5UB4Q02MVD786BC3RIJ1MQVCTW0GOJSFOAZSYDJWASIHSM414RQJQ6VVVVUIRAWJSGMKPN0P848MR3BLIWVCUE1DNDO2PXUKNWQYQG2KQ0EKZCYSDYRYSS2SXYSTDO471SQF93XYOXTV453HYONU7YVFHWWC3CD2M3WD7NR0P3HQH6STCC1RFV24PX' where id=93; -update noar ti set v1='NI8A2ZUGRMA1UG3K6IC036SQ8LCRHMQB83WKHTTELLFPES4LPHT6JLXRKN30OFSUQMM574L5UB4Q02MVD786BC3RIJ1MQVCTW0GOJSFOAZSYDJWASIHSM414RQJQ6VVVVUIRAWJSGMKPN0P848MR3BLIWVCUE1DNDO2PXUKNWQYQG2KQ0EKZCYSDYRYSS2SXYSTDO471SQF93XYOXTV453HYONU7YVFHWWC3CD2M3WD7NR0P3HQH6STCC1RFV24PX' where id=93; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='DPB3F7N6LDXWNRN56ZS9VR5STMD2ZHULKMRNRWGQAW3S3AS1LZX6TUHHH54342YFUFU4IQ34O7FYFWDMF8KY5QD08XD4WO8TP5DRAVOHEXQ5I47L6CIG2W9PZNS7H2T1Y8J6IWGJQGBHVOTF6GHN3X7OWGVEXQZT74T05231P6YDNTSACUFERNGP2JCZ4TT2G0BTM7000UPIXW96B9I5ZTGQZRKHU8LPC49UWFH0GVM2I4NBHXWNFM3SIIZED8B5J' where id=93; -update noar ti set v2='DPB3F7N6LDXWNRN56ZS9VR5STMD2ZHULKMRNRWGQAW3S3AS1LZX6TUHHH54342YFUFU4IQ34O7FYFWDMF8KY5QD08XD4WO8TP5DRAVOHEXQ5I47L6CIG2W9PZNS7H2T1Y8J6IWGJQGBHVOTF6GHN3X7OWGVEXQZT74T05231P6YDNTSACUFERNGP2JCZ4TT2G0BTM7000UPIXW96B9I5ZTGQZRKHU8LPC49UWFH0GVM2I4NBHXWNFM3SIIZED8B5J' where id=93; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='MIQBKX7ELS237YC2M98LXMMLQDEVSWJR0DDHJFBQ4HFCWXBZAJSUKMLFHRH853EBQCZOVBKQT96SR5SNY94IMSRSJIGJH0IAJUHNLJ15PZILRX2PQ0HK8YKSPI32H8Q4Q0R5STBQ2NJB1OO6YXQHNZN26PMZQKIEOM38T623KNNW4S18YZ93C4YBNOOBR9VG2C2B5Z8FEUBGXCU2R9TM0TEDDH7MQ1EDFAA5KHO2KV96I8FQJZI2QC1ZH8ZG44USR' where id=93; -update noar ti set v3='MIQBKX7ELS237YC2M98LXMMLQDEVSWJR0DDHJFBQ4HFCWXBZAJSUKMLFHRH853EBQCZOVBKQT96SR5SNY94IMSRSJIGJH0IAJUHNLJ15PZILRX2PQ0HK8YKSPI32H8Q4Q0R5STBQ2NJB1OO6YXQHNZN26PMZQKIEOM38T623KNNW4S18YZ93C4YBNOOBR9VG2C2B5Z8FEUBGXCU2R9TM0TEDDH7MQ1EDFAA5KHO2KV96I8FQJZI2QC1ZH8ZG44USR' where id=93; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='BXSTQD4OXKGNOO4RO94ELJKW31RICSUJZW2AHBIYOC3NSL0LJHGYAGW358OWXVQMCMWX9Y14UGIKJL7SC42WMX9FCARJL39JG59FFUFXKMQKP4DNPSDN8Y0NPMDX93NSFGUEE99OUAJWV3NC1WL9G0TGJLD7WS3AA1APY9DT5UV0LTOC5M5TCTGORYNOM7Q0YFBVQ5BKWYC1TFQT8VN0F9QVF2EJQPS1DQW1GEVMCP7VEZ5K3AUPB0IK9GYX64ASG' where id=94; -update noar ti set v0='BXSTQD4OXKGNOO4RO94ELJKW31RICSUJZW2AHBIYOC3NSL0LJHGYAGW358OWXVQMCMWX9Y14UGIKJL7SC42WMX9FCARJL39JG59FFUFXKMQKP4DNPSDN8Y0NPMDX93NSFGUEE99OUAJWV3NC1WL9G0TGJLD7WS3AA1APY9DT5UV0LTOC5M5TCTGORYNOM7Q0YFBVQ5BKWYC1TFQT8VN0F9QVF2EJQPS1DQW1GEVMCP7VEZ5K3AUPB0IK9GYX64ASG' where id=94; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='FII52OV4TALWIPZ5GT7ONEQUI9RUXZASEPCIR5136AHM1T1GDB3L8OGDESTWRYOHJOLXLHKRTZ0MKQZ6Q90DD097161T0OGFXM2QAVS8KQG9JNDRBTW2QPV713KWRW0JFDDN2A5021O1ZUIH15WYC9X79KJD8RX5X72BNPOI8EDJUMB61IHOCIW6H1PW569F3B751YTHFM0ZITZTG079D0FALBNHRA5JNC7J1C62O3DK6PX633LM3RS4MO0PUZSRK' where id=94; -update noar ti set v1='FII52OV4TALWIPZ5GT7ONEQUI9RUXZASEPCIR5136AHM1T1GDB3L8OGDESTWRYOHJOLXLHKRTZ0MKQZ6Q90DD097161T0OGFXM2QAVS8KQG9JNDRBTW2QPV713KWRW0JFDDN2A5021O1ZUIH15WYC9X79KJD8RX5X72BNPOI8EDJUMB61IHOCIW6H1PW569F3B751YTHFM0ZITZTG079D0FALBNHRA5JNC7J1C62O3DK6PX633LM3RS4MO0PUZSRK' where id=94; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='GN624I010EQ4SAY5RJ6DFYMQ5KQ1P7G3Q7C05N4PL7WRGEKA1FEUCWWQA2TARB00S75C6UFAPGZ2H5DOHYV69UUYL0P13047M0JJ8E6TKALBWGM0USLCDK2LMLBB8OAEEV2QTBBHZHA6L4S7JV8VNMD5H7T5DTZJG5597F3TQHQEIQQC5XBEYDB3OCPJEKZFFAY6Q8UBWCUXXOR6G2WKXP7XN7KJFVY6WPG9IWUDT9PDDJB1B7KH367UT0BY8ZGP6' where id=94; -update noar ti set v2='GN624I010EQ4SAY5RJ6DFYMQ5KQ1P7G3Q7C05N4PL7WRGEKA1FEUCWWQA2TARB00S75C6UFAPGZ2H5DOHYV69UUYL0P13047M0JJ8E6TKALBWGM0USLCDK2LMLBB8OAEEV2QTBBHZHA6L4S7JV8VNMD5H7T5DTZJG5597F3TQHQEIQQC5XBEYDB3OCPJEKZFFAY6Q8UBWCUXXOR6G2WKXP7XN7KJFVY6WPG9IWUDT9PDDJB1B7KH367UT0BY8ZGP6' where id=94; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='FD4M8P78IKEG20ZDD8FOFUVUHPU9A450K8TUKKBML04GX4G2HQOMXHHJ55XAIGN3SC18JC0SG8V8GPZCPN84FRKPO4AGTWVYA8155W1EMD2IDJMRYS1UTHSJ7RVOEXHAEX8X7N7Y1PI0PC28D3F4KV8AX8AEFQT6Z2SRBRIMO3I540PYM2LTI6YWI5J9OZ02VZX6UW1MX3Z18S1RJXZMN4D1QFA2G8QIU6VRZFM7R95ZH7UPJLHYGZ157N5513OMB' where id=94; -update noar ti set v3='FD4M8P78IKEG20ZDD8FOFUVUHPU9A450K8TUKKBML04GX4G2HQOMXHHJ55XAIGN3SC18JC0SG8V8GPZCPN84FRKPO4AGTWVYA8155W1EMD2IDJMRYS1UTHSJ7RVOEXHAEX8X7N7Y1PI0PC28D3F4KV8AX8AEFQT6Z2SRBRIMO3I540PYM2LTI6YWI5J9OZ02VZX6UW1MX3Z18S1RJXZMN4D1QFA2G8QIU6VRZFM7R95ZH7UPJLHYGZ157N5513OMB' where id=94; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='0XROE5VBHWTIYZBM57KHFWK6RD4BWI5ED4GRPKD3VIR1BPYWZSSX2G6RZHI3D7664T03FT1F5TI42OSEMSD302YIX6O8S77NLYBJUB4KR1FXLDEV8I5VI9G10P7MPQ81K2ZYJG9YQ49FPU7VCEVWAKY2B96YDL50NHQCK61C98J8N9DWEVNOC34NNS2W2COINLWI03BEJHMWNL4Z839ON2MK1YMPMQKOTYC50YRCLF0G6PYTJHC90GH9P1Z3WT10T' where id=95; -update noar ti set v0='0XROE5VBHWTIYZBM57KHFWK6RD4BWI5ED4GRPKD3VIR1BPYWZSSX2G6RZHI3D7664T03FT1F5TI42OSEMSD302YIX6O8S77NLYBJUB4KR1FXLDEV8I5VI9G10P7MPQ81K2ZYJG9YQ49FPU7VCEVWAKY2B96YDL50NHQCK61C98J8N9DWEVNOC34NNS2W2COINLWI03BEJHMWNL4Z839ON2MK1YMPMQKOTYC50YRCLF0G6PYTJHC90GH9P1Z3WT10T' where id=95; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='L3RBAQC8WPF07BZ5GZRIGRQBZWOWY3PW8PDMBJKWLEEL5AVWMA4JL5X9TKM3RF0R3UFZSJD7VEJW12PXR1CNXXNYAHFIHYR4VLM0PE4CL2GC1O30IL363BYQVZMU6CW4FG38W4F6U2ZERSDD6Z8FIP4F5QWA139K4797GOY1NXKKDTYOZD0Q6CVHBUW7P13J56K69QEBQO3SP9N9AJ06IERWAH3RER9HYNAQDP8E3FLI4A6XDQ53CX3DDI9Z0Z56T' where id=95; -update noar ti set v1='L3RBAQC8WPF07BZ5GZRIGRQBZWOWY3PW8PDMBJKWLEEL5AVWMA4JL5X9TKM3RF0R3UFZSJD7VEJW12PXR1CNXXNYAHFIHYR4VLM0PE4CL2GC1O30IL363BYQVZMU6CW4FG38W4F6U2ZERSDD6Z8FIP4F5QWA139K4797GOY1NXKKDTYOZD0Q6CVHBUW7P13J56K69QEBQO3SP9N9AJ06IERWAH3RER9HYNAQDP8E3FLI4A6XDQ53CX3DDI9Z0Z56T' where id=95; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='AQ81O2S4REJQC4L0WV4D9YSN6MOZA60X0RCQGYJ6JR1KU5FSUXJYDKGVQ4H4E2MUUBPY4P5KNJSFGACEZT2ON3A4ZDHE2P687SOAAK3J3QAUZLNV6F3N3SDZXGWD93C7S9HTCWV7QZ5VR53K0SC6UVQR9R857U6XKDPZMCPNAJCCH9M6FVM4C6P73U7IJFX4P8GZQV3B64KY1GK8CUFPMS45LVMLCGOQ2BSEL2ATVXO18FKD9T3Y3ABNQ848DWAMX' where id=95; -update noar ti set v2='AQ81O2S4REJQC4L0WV4D9YSN6MOZA60X0RCQGYJ6JR1KU5FSUXJYDKGVQ4H4E2MUUBPY4P5KNJSFGACEZT2ON3A4ZDHE2P687SOAAK3J3QAUZLNV6F3N3SDZXGWD93C7S9HTCWV7QZ5VR53K0SC6UVQR9R857U6XKDPZMCPNAJCCH9M6FVM4C6P73U7IJFX4P8GZQV3B64KY1GK8CUFPMS45LVMLCGOQ2BSEL2ATVXO18FKD9T3Y3ABNQ848DWAMX' where id=95; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='QZY4PIYS1TFSH4IU2SM8CMYF7BPT2GDWF3ELD5MNBAOSAN5PBKGA4OOZRHBI7RX7ZA1BVVI1KVYW4KNH6H0M5YPIULN06UZIO3W9KY2SJOOOBJ4SO8NV9V1OLFCRBJ0OSDHRIX3T3HEN17QSWVHKSS2AQYO91BOZI8IY8R8QTSYMZDKEDYY2WGHE35GXIY3FWE67RIDCDBNGQE2HCJCPP0DF8ZK157C5TMK9C7EMFK6DW4YYYRXDA4CZNVWM8HS7R' where id=95; -update noar ti set v3='QZY4PIYS1TFSH4IU2SM8CMYF7BPT2GDWF3ELD5MNBAOSAN5PBKGA4OOZRHBI7RX7ZA1BVVI1KVYW4KNH6H0M5YPIULN06UZIO3W9KY2SJOOOBJ4SO8NV9V1OLFCRBJ0OSDHRIX3T3HEN17QSWVHKSS2AQYO91BOZI8IY8R8QTSYMZDKEDYY2WGHE35GXIY3FWE67RIDCDBNGQE2HCJCPP0DF8ZK157C5TMK9C7EMFK6DW4YYYRXDA4CZNVWM8HS7R' where id=95; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='IQNTGGRADUTD2YZMX6UO5Y5MG75AYWMJYT14V8JACENITUTWQ08P7PRZAK9HKFS9TH5MEB792FNKOGGB14URFX7PZVLOK0VIZS6KW0WT6QHNOJI7MBATHUQG7SO4LZ4FB174IP35E4UI59FTL7BZPCCBYQIGS5NJ7Y2UDD2NZ20DIW0NKFCBRH6QAPI0WHZ9B1AFV398T64CM3JJO4RBAUK2JSUVK1GUEE6BGMVWMWJF8A4DLNFRDJ2ZKO6FFAR1N' where id=96; -update noar ti set v0='IQNTGGRADUTD2YZMX6UO5Y5MG75AYWMJYT14V8JACENITUTWQ08P7PRZAK9HKFS9TH5MEB792FNKOGGB14URFX7PZVLOK0VIZS6KW0WT6QHNOJI7MBATHUQG7SO4LZ4FB174IP35E4UI59FTL7BZPCCBYQIGS5NJ7Y2UDD2NZ20DIW0NKFCBRH6QAPI0WHZ9B1AFV398T64CM3JJO4RBAUK2JSUVK1GUEE6BGMVWMWJF8A4DLNFRDJ2ZKO6FFAR1N' where id=96; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='IOVZOSB1FQBQKSP0I5CPH8KQL2Q8JFCX2BUKXJJ9ZEQQ9LWG7NFDY7USIT0RJGMQ85HJ5QA0WBZ1ESFXK83LFN8ZKZMSZXK099EILWLC83CIOEC986M1LHC00T9Q1B8SJAIZO8C96JEKUBXQA26FO5EEUIM7AEU68L0GPDXRMWDL85S1AYVY8UQTO216W1MTY95QHAVKPSSNU2YUEY9586QN8CHLJKMVHDXEQHF5IH2RGQCKXBL222SBT6GZO3XE7' where id=96; -update noar ti set v1='IOVZOSB1FQBQKSP0I5CPH8KQL2Q8JFCX2BUKXJJ9ZEQQ9LWG7NFDY7USIT0RJGMQ85HJ5QA0WBZ1ESFXK83LFN8ZKZMSZXK099EILWLC83CIOEC986M1LHC00T9Q1B8SJAIZO8C96JEKUBXQA26FO5EEUIM7AEU68L0GPDXRMWDL85S1AYVY8UQTO216W1MTY95QHAVKPSSNU2YUEY9586QN8CHLJKMVHDXEQHF5IH2RGQCKXBL222SBT6GZO3XE7' where id=96; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='WZW2UZT4T1OHXCLAPWVPOIIL6LQ9MCEFBDUD6F057EW1TTS74F4W31UV3M9GTZDHA975FPZUF4LQJVI9W1PO1VFXL4MSCD6SQH003CGN8HGTWXS4DLMIMJGNTDXLLPASKIXZN3AVN39KPF48V6PQOZOW7USRO2Z3RGBN89JQMHH7AI382XK7COKOI9ZWPEJR3DJ9W4KPSIA6DTWQYRJH991Z3FNCS5JK880IL5P8DA6IC8ULWFTZGQ7UZT3483XX0' where id=96; -update noar ti set v2='WZW2UZT4T1OHXCLAPWVPOIIL6LQ9MCEFBDUD6F057EW1TTS74F4W31UV3M9GTZDHA975FPZUF4LQJVI9W1PO1VFXL4MSCD6SQH003CGN8HGTWXS4DLMIMJGNTDXLLPASKIXZN3AVN39KPF48V6PQOZOW7USRO2Z3RGBN89JQMHH7AI382XK7COKOI9ZWPEJR3DJ9W4KPSIA6DTWQYRJH991Z3FNCS5JK880IL5P8DA6IC8ULWFTZGQ7UZT3483XX0' where id=96; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='W71DTVQ7AAPG8A48LYFDQ9CZ2F0QUQPDQHY6YCT6UZZ9KI3V72W4XRXVA6TP4TMNJUBLW8UA2BLHFOSEQ53PXHMXDOIDDO8G1ZIE5PBU61ZG3W28A9M6JETXY6PCBZ97N0UGCWKZKAIA38ZOD03CV9OL0WVQHNRE3H18M05N9S9SE53Y0T5MQIB702EVBKM4PR4VHHZ0XMEO3C68MN8EETBC33AT3NR26E332D0YVNXMUW8S6UD84RYT4TJSCIRVJ' where id=96; -update noar ti set v3='W71DTVQ7AAPG8A48LYFDQ9CZ2F0QUQPDQHY6YCT6UZZ9KI3V72W4XRXVA6TP4TMNJUBLW8UA2BLHFOSEQ53PXHMXDOIDDO8G1ZIE5PBU61ZG3W28A9M6JETXY6PCBZ97N0UGCWKZKAIA38ZOD03CV9OL0WVQHNRE3H18M05N9S9SE53Y0T5MQIB702EVBKM4PR4VHHZ0XMEO3C68MN8EETBC33AT3NR26E332D0YVNXMUW8S6UD84RYT4TJSCIRVJ' where id=96; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='EQQ7QU2WKRN0S69XW8ROIL27L0NYD1RCITRN1CU7YHRAZGJA3X6BC7VUNQN81DPK62R0R94FFWNYQS4EJQPOMSJ1Z6P7ZH1XB8N6QD8IYNEOWNA66T3DU424SEY7LK48XD9X03C8DYNCRRH9UJM5KNOA1JFDEPZVVVATYXBUQBOPDC65BTMUDMIMR4OJ64J4ERU4H4EE9RHBQG5Y4AUXRI6736QQ63DG1Q3ZKON5ISN5S94I48H48SALW5UAB3Q5J' where id=97; -update noar ti set v0='EQQ7QU2WKRN0S69XW8ROIL27L0NYD1RCITRN1CU7YHRAZGJA3X6BC7VUNQN81DPK62R0R94FFWNYQS4EJQPOMSJ1Z6P7ZH1XB8N6QD8IYNEOWNA66T3DU424SEY7LK48XD9X03C8DYNCRRH9UJM5KNOA1JFDEPZVVVATYXBUQBOPDC65BTMUDMIMR4OJ64J4ERU4H4EE9RHBQG5Y4AUXRI6736QQ63DG1Q3ZKON5ISN5S94I48H48SALW5UAB3Q5J' where id=97; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='EPINWAM58B1T15VZAOUMSX7T76A8OQJUDEVCZSRJAQQMF62RJI2ALMEY9ZT3YXLXG7MKNCDY57OX50SXN7AU3Q5C4E5CTSB3W84IRGEG3EERP7QOEM4RKYPFEAMZH1AOIMCCDRBTIX9QJ96J36OAQXE1RF6F49G70ADVWHZGGTPJWQ35UINBYWZ5PVMVPL7WGYHJP1FQ7MH4K82JWBKAAXVUAW56BH7MVWQYFXK2JTOM1X72F1X8FIVHGA84P7XFX' where id=97; -update noar ti set v1='EPINWAM58B1T15VZAOUMSX7T76A8OQJUDEVCZSRJAQQMF62RJI2ALMEY9ZT3YXLXG7MKNCDY57OX50SXN7AU3Q5C4E5CTSB3W84IRGEG3EERP7QOEM4RKYPFEAMZH1AOIMCCDRBTIX9QJ96J36OAQXE1RF6F49G70ADVWHZGGTPJWQ35UINBYWZ5PVMVPL7WGYHJP1FQ7MH4K82JWBKAAXVUAW56BH7MVWQYFXK2JTOM1X72F1X8FIVHGA84P7XFX' where id=97; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='PPBNZAYK39P1F1LVEBZARC5B4N4V75V8S38J9B32WLT1KR8NYIR80VIA15DZTH28PJ6J7MQX211112OA0PH7EL3LRQ3UOAJZOUILVLP81C0GT6XYKQAHZ00FU1LNHUXQJIY262VEDV4BBWKBOWCTGLT31AWKWO6OOVZ4FCHZIT75TIECH70D5MUWMIXJQ7BSUUI6FJN2823YEGKCZT24UEMSG458W5PR0Q47RHW9BZ2HVSQMW67B9SA8ALWOUA2RG' where id=97; -update noar ti set v2='PPBNZAYK39P1F1LVEBZARC5B4N4V75V8S38J9B32WLT1KR8NYIR80VIA15DZTH28PJ6J7MQX211112OA0PH7EL3LRQ3UOAJZOUILVLP81C0GT6XYKQAHZ00FU1LNHUXQJIY262VEDV4BBWKBOWCTGLT31AWKWO6OOVZ4FCHZIT75TIECH70D5MUWMIXJQ7BSUUI6FJN2823YEGKCZT24UEMSG458W5PR0Q47RHW9BZ2HVSQMW67B9SA8ALWOUA2RG' where id=97; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='DWYM1QY2KK4ZNVADX0CZE4CEUW13L45PV6UMAKCCD63Z19ZCNQ2ANTX33K9I8GNIMGBPZYT3HO9YWJVHZ5TOW8WRCE23HIDPNCLTKXZXQR2SHQ2SBEXVOLD5GIE97EVM4JC6KK1B01MXOFY41B947YJ3CJXDK0UWCLGYWTLHWSK9DUVTZLIXBWRTV48E5LAOSLIXCNNYB2W2XX3HPY45CXFDTBHFXUC6TGNAB4217EVPLXOM3DS2YMRVRP4HHZ498' where id=97; -update noar ti set v3='DWYM1QY2KK4ZNVADX0CZE4CEUW13L45PV6UMAKCCD63Z19ZCNQ2ANTX33K9I8GNIMGBPZYT3HO9YWJVHZ5TOW8WRCE23HIDPNCLTKXZXQR2SHQ2SBEXVOLD5GIE97EVM4JC6KK1B01MXOFY41B947YJ3CJXDK0UWCLGYWTLHWSK9DUVTZLIXBWRTV48E5LAOSLIXCNNYB2W2XX3HPY45CXFDTBHFXUC6TGNAB4217EVPLXOM3DS2YMRVRP4HHZ498' where id=97; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='6OX69SYHPIQGJ5WNI1GIH6Q6MIWQ3QL1F2XPR6KDK1TBT6RR4QAW5LEI4IUXBSZJ02PRXCS01YP0SHCYV3I9AUMZ41HE3QQ7VWBP5PLK8DOP2DSKND32VSC0YNH8PJ3DRUDO0BMUKNA22O8VPJIQTIYU03SOFEVPB3HUN7JICGNMD1F0S4M473DZIB2WZHGYGJ95AGRF82DMDOHRRCCI6R12XR19X801GXR1P49LN00LKP6YLWOVFQDV8SLLEB6WZ' where id=98; -update noar ti set v0='6OX69SYHPIQGJ5WNI1GIH6Q6MIWQ3QL1F2XPR6KDK1TBT6RR4QAW5LEI4IUXBSZJ02PRXCS01YP0SHCYV3I9AUMZ41HE3QQ7VWBP5PLK8DOP2DSKND32VSC0YNH8PJ3DRUDO0BMUKNA22O8VPJIQTIYU03SOFEVPB3HUN7JICGNMD1F0S4M473DZIB2WZHGYGJ95AGRF82DMDOHRRCCI6R12XR19X801GXR1P49LN00LKP6YLWOVFQDV8SLLEB6WZ' where id=98; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='OMETU5ZLOT7SAEVMZD3OFQC7GEJTGIMFP8BGWC8F6T4F7KNVC0DQG4UZ09PFLDX6ET0QYRWJ89R6GWA322TRMKH2LOA1IIV15NBTHYUM1QNNC11VE9ZEUGXOQYEBMKAWD5XBH18X8K3WWX73FNP7L6YE9RO0THJCHL5R1TG3O21TB3WDJQR4HWOP7QMTOTVHQYTSK97WN53REXZRQBPY7F6VMOQY31T3H34IUBCYVQN5Y8RNBRJSMAHLL5NW868MK' where id=98; -update noar ti set v1='OMETU5ZLOT7SAEVMZD3OFQC7GEJTGIMFP8BGWC8F6T4F7KNVC0DQG4UZ09PFLDX6ET0QYRWJ89R6GWA322TRMKH2LOA1IIV15NBTHYUM1QNNC11VE9ZEUGXOQYEBMKAWD5XBH18X8K3WWX73FNP7L6YE9RO0THJCHL5R1TG3O21TB3WDJQR4HWOP7QMTOTVHQYTSK97WN53REXZRQBPY7F6VMOQY31T3H34IUBCYVQN5Y8RNBRJSMAHLL5NW868MK' where id=98; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='EZ8ZDWSXIIVZ3R41UPLC80LGH6BVDI56P8276QMGKSJ6HZQ5JJXIEJHKB1K5OG5J1L7OXWCZVBTCX4RMQDTK3ZGWL6WFCMD0YX1M3GS8N53TN32126QJQJH2R5PCOITFTRVVNMDQUMZRE2T5J3X1R7AHLA47M5LHQ4PEOB9ZFJRXQVDIFZZS3FVW12EPN9U664JJJ1FKGSROJJLY1FOSJ3I7JGWFCFNDPBEVF5D9HUV11PGN8SLWPFD5KOXHHB7OW' where id=98; -update noar ti set v2='EZ8ZDWSXIIVZ3R41UPLC80LGH6BVDI56P8276QMGKSJ6HZQ5JJXIEJHKB1K5OG5J1L7OXWCZVBTCX4RMQDTK3ZGWL6WFCMD0YX1M3GS8N53TN32126QJQJH2R5PCOITFTRVVNMDQUMZRE2T5J3X1R7AHLA47M5LHQ4PEOB9ZFJRXQVDIFZZS3FVW12EPN9U664JJJ1FKGSROJJLY1FOSJ3I7JGWFCFNDPBEVF5D9HUV11PGN8SLWPFD5KOXHHB7OW' where id=98; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='Y5GGZJ2QXMB5R0NP4D7TG248GQ1YOB2R7MJ637HVV6M6QSEMG3E0S5TK2VRTYS3H8ZNU0C59IY4CALDNX57C6VW8AEPSZ33BPCRYKBMPC1PFXE0SX4NHD8E3FQVHXJJ5OCK9A4WMNCW8IBRV7VWAYEW5NH4N1XCZ47U5C85WZ6JRA9FG8KAUO3F1K5GEPLEFQWI41HZVIDQKR93QBSR2RF9HGKLS3TW7AOUUBW8QO81YBOYLE48YVEX97NOPBOIL0' where id=98; -update noar ti set v3='Y5GGZJ2QXMB5R0NP4D7TG248GQ1YOB2R7MJ637HVV6M6QSEMG3E0S5TK2VRTYS3H8ZNU0C59IY4CALDNX57C6VW8AEPSZ33BPCRYKBMPC1PFXE0SX4NHD8E3FQVHXJJ5OCK9A4WMNCW8IBRV7VWAYEW5NH4N1XCZ47U5C85WZ6JRA9FG8KAUO3F1K5GEPLEFQWI41HZVIDQKR93QBSR2RF9HGKLS3TW7AOUUBW8QO81YBOYLE48YVEX97NOPBOIL0' where id=98; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='5HY6NJLDSBZZOYZWZ8Y4KTFQ7PVXI6759G5WN3KERA17M6DJMSQISJCRRK34CIXOWIWA2622J2DDAJJHO2ZNUZDUMXVPD6XNMEEZBHVI3OUO09OZY2V3I61RSBZXGBL2YO6IMHKWHIKGD6QXOWSA6G6NAFTGR651YPX8HMQY7FIHERVNAGO9UDS3V06UIYJNY8QPZX0878TEIGJ4ASMZ1GV0MW5L0FHNXEYLWCYS3RT6X5QE2SB16TOFFRX1GEF2B' where id=99; -update noar ti set v0='5HY6NJLDSBZZOYZWZ8Y4KTFQ7PVXI6759G5WN3KERA17M6DJMSQISJCRRK34CIXOWIWA2622J2DDAJJHO2ZNUZDUMXVPD6XNMEEZBHVI3OUO09OZY2V3I61RSBZXGBL2YO6IMHKWHIKGD6QXOWSA6G6NAFTGR651YPX8HMQY7FIHERVNAGO9UDS3V06UIYJNY8QPZX0878TEIGJ4ASMZ1GV0MW5L0FHNXEYLWCYS3RT6X5QE2SB16TOFFRX1GEF2B' where id=99; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='T4HGGT928YXUXK5JFRSZVC010NU1WUSBU8BSJSP2CL9JHQK3WX03T0VH6R7V2EPPW5FY44BPELIBZHCD4O4E5TKA9NL10D8ZDNVFDQL97INZHH4LJ6A0OHQ8WXLC5VGRFJP1Z49SRAQC5G3SI5SKWQU03FL12ZAFUINI1WF4LGYW06OWSTK6Z79MNIEQSF770Z6L42OKPTKG49VTFSQADBBEPF1O2HM1SKM5NU5FGGJ8SZJ7N3ASLWX7WXWELLLTQ' where id=99; -update noar ti set v1='T4HGGT928YXUXK5JFRSZVC010NU1WUSBU8BSJSP2CL9JHQK3WX03T0VH6R7V2EPPW5FY44BPELIBZHCD4O4E5TKA9NL10D8ZDNVFDQL97INZHH4LJ6A0OHQ8WXLC5VGRFJP1Z49SRAQC5G3SI5SKWQU03FL12ZAFUINI1WF4LGYW06OWSTK6Z79MNIEQSF770Z6L42OKPTKG49VTFSQADBBEPF1O2HM1SKM5NU5FGGJ8SZJ7N3ASLWX7WXWELLLTQ' where id=99; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='AAD2T24WXCYCSUJK3U748EJFRUU6SYRJIL25YIKIFFMPK98R1KY4UZ09DI1T3I7M0HH0THN46E4RAX1CWAZJ31AAHCQAYWRYIEJ763CTWOU3PI5FC5EKIEEEK2RQNY75JVB68U46K7HAQP6QUBHP5O3A4SW8VNIF7M9UNGRRCP4D1WIAG39BY2P4OWCMDCATFCU3G976SCJXX0ZY8DTYWEWYFTQMA53XZGFO5W477IDQAMJED80RZWEG5IRBJKO07' where id=99; -update noar ti set v2='AAD2T24WXCYCSUJK3U748EJFRUU6SYRJIL25YIKIFFMPK98R1KY4UZ09DI1T3I7M0HH0THN46E4RAX1CWAZJ31AAHCQAYWRYIEJ763CTWOU3PI5FC5EKIEEEK2RQNY75JVB68U46K7HAQP6QUBHP5O3A4SW8VNIF7M9UNGRRCP4D1WIAG39BY2P4OWCMDCATFCU3G976SCJXX0ZY8DTYWEWYFTQMA53XZGFO5W477IDQAMJED80RZWEG5IRBJKO07' where id=99; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='088C17CAB877RRXLZQAN3GCERG21GT9XDZNLW18J01ARBZOL74W52UBX83O6G6G98XS03MBPQIO7S774BQMBCAW9HLP8T9X81EWDPKM6CM9N0YQLXZP0D3UTV8PCD9CBH0VLEWQWPNUHO0L9B8Y7Z4EHWOBVGLKWPO539WYWXRX3OL0W47CV40L5QYFKCWKAOU78Y274ZJ9GVUD6WDHF7R8ZC11BUS9DH21HD9TGTVDSAJW3YKVTQ7LRT8552YF7H' where id=99; -update noar ti set v3='088C17CAB877RRXLZQAN3GCERG21GT9XDZNLW18J01ARBZOL74W52UBX83O6G6G98XS03MBPQIO7S774BQMBCAW9HLP8T9X81EWDPKM6CM9N0YQLXZP0D3UTV8PCD9CBH0VLEWQWPNUHO0L9B8Y7Z4EHWOBVGLKWPO539WYWXRX3OL0W47CV40L5QYFKCWKAOU78Y274ZJ9GVUD6WDHF7R8ZC11BUS9DH21HD9TGTVDSAJW3YKVTQ7LRT8552YF7H' where id=99; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt (id bigint unsigned primary key, -f0 int not null, -v0 varbinary(256) not null, -v1 varbinary(256) not null, -v2 varbinary(256) not null, -v3 varbinary(256) not null, -b0 text not null -) engine=tokudb; -insert into tt values (1,2,'a','b','c','d','e'); -insert into tt values (2,3,'','','','',''); -insert into tt values (3,4,'','','','',''); -insert into tt values (4,5,'','','','',''); -insert into tt values (5,6,'','','','',''); -insert into tt values (6,7,'','','','',''); -insert into tt values (7,8,'','','','',''); -insert into tt values (8,9,'','','','',''); -insert into tt values (9,10,'','','','',''); -insert into tt values (10,11,'','','','',''); -insert into tt values (11,12,'','','','',''); -insert into tt values (12,13,'','','','',''); -insert into tt values (13,14,'','','','',''); -insert into tt values (14,15,'','','','',''); -insert into tt values (15,16,'','','','',''); -insert into tt values (16,17,'','','','',''); -insert into tt values (17,18,'','','','',''); -insert into tt values (18,19,'','','','',''); -insert into tt values (19,20,'','','','',''); -insert into tt values (20,21,'','','','',''); -insert into tt values (21,22,'','','','',''); -insert into tt values (22,23,'','','','',''); -insert into tt values (23,24,'','','','',''); -insert into tt values (24,25,'','','','',''); -insert into tt values (25,26,'','','','',''); -insert into tt values (26,27,'','','','',''); -insert into tt values (27,28,'','','','',''); -insert into tt values (28,29,'','','','',''); -insert into tt values (29,30,'','','','',''); -insert into tt values (30,31,'','','','',''); -insert into tt values (31,32,'','','','',''); -insert into tt values (32,33,'','','','',''); -insert into tt values (33,34,'','','','',''); -insert into tt values (34,35,'','','','',''); -insert into tt values (35,36,'','','','',''); -insert into tt values (36,37,'','','','',''); -insert into tt values (37,38,'','','','',''); -insert into tt values (38,39,'','','','',''); -insert into tt values (39,40,'','','','',''); -insert into tt values (40,41,'','','','',''); -insert into tt values (41,42,'','','','',''); -insert into tt values (42,43,'','','','',''); -insert into tt values (43,44,'','','','',''); -insert into tt values (44,45,'','','','',''); -insert into tt values (45,46,'','','','',''); -insert into tt values (46,47,'','','','',''); -insert into tt values (47,48,'','','','',''); -insert into tt values (48,49,'','','','',''); -insert into tt values (49,50,'','','','',''); -insert into tt values (50,51,'','','','',''); -insert into tt values (51,52,'','','','',''); -insert into tt values (52,53,'','','','',''); -insert into tt values (53,54,'','','','',''); -insert into tt values (54,55,'','','','',''); -insert into tt values (55,56,'','','','',''); -insert into tt values (56,57,'','','','',''); -insert into tt values (57,58,'','','','',''); -insert into tt values (58,59,'','','','',''); -insert into tt values (59,60,'','','','',''); -insert into tt values (60,61,'','','','',''); -insert into tt values (61,62,'','','','',''); -insert into tt values (62,63,'','','','',''); -insert into tt values (63,64,'','','','',''); -insert into tt values (64,65,'','','','',''); -insert into tt values (65,66,'','','','',''); -insert into tt values (66,67,'','','','',''); -insert into tt values (67,68,'','','','',''); -insert into tt values (68,69,'','','','',''); -insert into tt values (69,70,'','','','',''); -insert into tt values (70,71,'','','','',''); -insert into tt values (71,72,'','','','',''); -insert into tt values (72,73,'','','','',''); -insert into tt values (73,74,'','','','',''); -insert into tt values (74,75,'','','','',''); -insert into tt values (75,76,'','','','',''); -insert into tt values (76,77,'','','','',''); -insert into tt values (77,78,'','','','',''); -insert into tt values (78,79,'','','','',''); -insert into tt values (79,80,'','','','',''); -insert into tt values (80,81,'','','','',''); -insert into tt values (81,82,'','','','',''); -insert into tt values (82,83,'','','','',''); -insert into tt values (83,84,'','','','',''); -insert into tt values (84,85,'','','','',''); -insert into tt values (85,86,'','','','',''); -insert into tt values (86,87,'','','','',''); -insert into tt values (87,88,'','','','',''); -insert into tt values (88,89,'','','','',''); -insert into tt values (89,90,'','','','',''); -insert into tt values (90,91,'','','','',''); -insert into tt values (91,92,'','','','',''); -insert into tt values (92,93,'','','','',''); -insert into tt values (93,94,'','','','',''); -insert into tt values (94,95,'','','','',''); -insert into tt values (95,96,'','','','',''); -insert into tt values (96,97,'','','','',''); -insert into tt values (97,98,'','','','',''); -insert into tt values (98,99,'','','','',''); -insert into tt values (99,100,'','','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='null this 0' where id=0; -update noar ti set v0='null this 0' where id=0; -update noar tt set v1='null is 1' where id=0; -update noar ti set v1='null is 1' where id=0; -update noar tt set v2='null a 2' where id=0; -update noar ti set v2='null a 2' where id=0; -update noar tt set v3='null test 3' where id=0; -update noar ti set v3='null test 3' where id=0; -update noar tt set v0='this 0' where id=1; -update noar ti set v0='this 0' where id=1; -update noar tt set v1='is 1' where id=1; -update noar ti set v1='is 1' where id=1; -update noar tt set v2='another 2' where id=1; -update noar ti set v2='another 2' where id=1; -update noar tt set v3='test 3' where id=1; -update noar ti set v3='test 3' where id=1; -update noar tt set v0='HXQARM7X1ZS6SRO83LVDNWF5OCL7F92VRP8L9J740BWJDF3BXC6MT2X6OQQGVEQ37LEX0RNL77GO7CZ5VZNDKUAALOY03UOEXCT897YJXN8IRV264SXJK9RXT5QL3FOZMRTQ8K5BGWAHFI8YX4I8MGBASVYC7ZRPXFAV4TGKY3ZYP6NCNTM515ZSEKVU7UMW4NMK1BYERGJOD8W0ZS45NTEYG0C9E1MTQYMQHV11RI8N4PBGOBDUQHOZEKBKUTETC' where id=2; -update noar ti set v0='HXQARM7X1ZS6SRO83LVDNWF5OCL7F92VRP8L9J740BWJDF3BXC6MT2X6OQQGVEQ37LEX0RNL77GO7CZ5VZNDKUAALOY03UOEXCT897YJXN8IRV264SXJK9RXT5QL3FOZMRTQ8K5BGWAHFI8YX4I8MGBASVYC7ZRPXFAV4TGKY3ZYP6NCNTM515ZSEKVU7UMW4NMK1BYERGJOD8W0ZS45NTEYG0C9E1MTQYMQHV11RI8N4PBGOBDUQHOZEKBKUTETC' where id=2; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='CP94ISC8FR6RF5QXJOUJSFNRUSLE1X4B9IPKTO5QSB8LTILPZC4MWZ134IAYHFQSD1VQ3DO4B129LD9QIF7OQQIC2YYW5ZJTOTB4S7OX2JMUQ97RLZFO7VNFTL6PB22QBNCCHV806V6QUOQGBIA4QPVJB0EYZ60TPT2Z5GXLAUUJ5J2D51WOJN8BRE8PG8KJ992CBN3ZL32OATOHF14YRYCPMED1YTOUO3RDPSQ7KCAA21FLL64BPRCADHQ8SUBJF' where id=2; -update noar ti set v1='CP94ISC8FR6RF5QXJOUJSFNRUSLE1X4B9IPKTO5QSB8LTILPZC4MWZ134IAYHFQSD1VQ3DO4B129LD9QIF7OQQIC2YYW5ZJTOTB4S7OX2JMUQ97RLZFO7VNFTL6PB22QBNCCHV806V6QUOQGBIA4QPVJB0EYZ60TPT2Z5GXLAUUJ5J2D51WOJN8BRE8PG8KJ992CBN3ZL32OATOHF14YRYCPMED1YTOUO3RDPSQ7KCAA21FLL64BPRCADHQ8SUBJF' where id=2; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='9H141GVH408C2JXFI7SYSLBZ9JS65H12XH7A986LETBIQLOYYVE1F6HMBGS60CW0RQF6SDML1IH139NDHITI9403OLOHWTR18QFBXIGIWA5UVVLBRE0ZYQEPI0PI4MBY3S9D6CS4E804RM406ZDY66ZL7UWIE4NGBVX8ITNQ83AJ93PRF45675HO5Z5QBPD1AH02Z9KUS56DKUASNZAVG2DCRN7MBIIP0SOF4VUOG7HGTP9P1KRQ8HD5C4NGBGI6A' where id=2; -update noar ti set v2='9H141GVH408C2JXFI7SYSLBZ9JS65H12XH7A986LETBIQLOYYVE1F6HMBGS60CW0RQF6SDML1IH139NDHITI9403OLOHWTR18QFBXIGIWA5UVVLBRE0ZYQEPI0PI4MBY3S9D6CS4E804RM406ZDY66ZL7UWIE4NGBVX8ITNQ83AJ93PRF45675HO5Z5QBPD1AH02Z9KUS56DKUASNZAVG2DCRN7MBIIP0SOF4VUOG7HGTP9P1KRQ8HD5C4NGBGI6A' where id=2; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='2XH2XO870O3Z97MBUK92L2QQMPCNUAJHTYFVO2Y33A7VJUMACBMPXZ6OMHMKVGBXYAHC5B2K13EYC834FCNTR9INOV0HX3A4YO131XLADU70KVVIQQ7LJV4J82TSQ91XTJ8LDH6APZDHI813OAAUMNJLNUW8626TKFSU3ZLNLMV7PAZM6397EQG89OON7VJN4LM4ACB2C695IG1NSVBYVKOTMTSR22YB29YYHKWIHQMC7CH7F81JF9E35DF1G7KPL' where id=2; -update noar ti set v3='2XH2XO870O3Z97MBUK92L2QQMPCNUAJHTYFVO2Y33A7VJUMACBMPXZ6OMHMKVGBXYAHC5B2K13EYC834FCNTR9INOV0HX3A4YO131XLADU70KVVIQQ7LJV4J82TSQ91XTJ8LDH6APZDHI813OAAUMNJLNUW8626TKFSU3ZLNLMV7PAZM6397EQG89OON7VJN4LM4ACB2C695IG1NSVBYVKOTMTSR22YB29YYHKWIHQMC7CH7F81JF9E35DF1G7KPL' where id=2; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='440DIBISFADWRW2V3COGT5VTLA5G71PWSJMN8ZTRVA11E3WNW5JHTKIXEOH56NAWZS1ZTOQ1ZV3ONKSQ639IR92AS2U1YIRHMOW5AM6GB0BNUU5JPWX3O1X7WEY3ZWE16KH4G20JLW0L4QEYXORPKD3U6T8B4DEY1WUIKKKKFZ8XYM87WKTL63E4UVIF7123Q6IEY9ASFBISM2AHTL4KGHRLO3J2NZ3YBEJNDSKGCD6ME52JMNAKHGE2ZUVTTZMGV' where id=3; -update noar ti set v0='440DIBISFADWRW2V3COGT5VTLA5G71PWSJMN8ZTRVA11E3WNW5JHTKIXEOH56NAWZS1ZTOQ1ZV3ONKSQ639IR92AS2U1YIRHMOW5AM6GB0BNUU5JPWX3O1X7WEY3ZWE16KH4G20JLW0L4QEYXORPKD3U6T8B4DEY1WUIKKKKFZ8XYM87WKTL63E4UVIF7123Q6IEY9ASFBISM2AHTL4KGHRLO3J2NZ3YBEJNDSKGCD6ME52JMNAKHGE2ZUVTTZMGV' where id=3; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='7MUG6Q7UT4GXZZVO2WG0IJ18CJI5ZXI93V88HP70410KNM6B3AJOCAEYMSRZTIU4JZJU6HIOYO13FHDWS57BR7N88M2K1ROADIR0ZKHNHFW5473RVQ3DLLHEG0B9JOEVUB8J4G0NQKZVS5XWV5JN4LOXMMMPEKYEB3FEKKLO04CPE4CW5C2A7CBDYIMYLTCM9PF8U3RLLCNAQ8M6B265LD91XNH0BRRYVKQTUCFZ4NHJGFDHBB9034L78DZFGSCY9' where id=3; -update noar ti set v1='7MUG6Q7UT4GXZZVO2WG0IJ18CJI5ZXI93V88HP70410KNM6B3AJOCAEYMSRZTIU4JZJU6HIOYO13FHDWS57BR7N88M2K1ROADIR0ZKHNHFW5473RVQ3DLLHEG0B9JOEVUB8J4G0NQKZVS5XWV5JN4LOXMMMPEKYEB3FEKKLO04CPE4CW5C2A7CBDYIMYLTCM9PF8U3RLLCNAQ8M6B265LD91XNH0BRRYVKQTUCFZ4NHJGFDHBB9034L78DZFGSCY9' where id=3; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='6I01XADNR08W7F9B89LQWI6VQR7KNH7ZGX44Z1NF2Y5A78VFLY24VMCTYSLAC9YS7TLJ56CC3MIIS01ARE9DT8JGJKD58VREHXMNRMF9YC5JNQTOR2PIHL7WTMEYJ3VH09R9DETE1UCXSK2K3ZCCXZ8D44D9XV9VIVNOHHSW10XU8QVLVY21GUJFYHYBJBTOF7PKDGTYXR6VQ0AA18BIB4NEPBW34JHWCR3C6JE0W2G5QIV7LNBN26BDCYRD7S4T9' where id=3; -update noar ti set v2='6I01XADNR08W7F9B89LQWI6VQR7KNH7ZGX44Z1NF2Y5A78VFLY24VMCTYSLAC9YS7TLJ56CC3MIIS01ARE9DT8JGJKD58VREHXMNRMF9YC5JNQTOR2PIHL7WTMEYJ3VH09R9DETE1UCXSK2K3ZCCXZ8D44D9XV9VIVNOHHSW10XU8QVLVY21GUJFYHYBJBTOF7PKDGTYXR6VQ0AA18BIB4NEPBW34JHWCR3C6JE0W2G5QIV7LNBN26BDCYRD7S4T9' where id=3; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='BMJJUN9V7HS8SWT4F2MCPZB7FE6KDUKUU43IRNU2DOJXPX58YNNHER1B4DQ41SEET9LVD4WVX9IJNWBZBDT1VKS7049QASQ15IAZ0DXFKO93XW1XWXG1GCYN1HONDSQ4PP3LIU8WAFLA9RM8TYBB8LQ0D819R5BPX11M1Y816SGSLCVZGGXZY75Z7KKOF3KFQBNJZB06CUBM4CQ8M0X9G5YEGGS682UE5G52DWW1HM19VGVQEO9DX5APMHUPUK0OK' where id=3; -update noar ti set v3='BMJJUN9V7HS8SWT4F2MCPZB7FE6KDUKUU43IRNU2DOJXPX58YNNHER1B4DQ41SEET9LVD4WVX9IJNWBZBDT1VKS7049QASQ15IAZ0DXFKO93XW1XWXG1GCYN1HONDSQ4PP3LIU8WAFLA9RM8TYBB8LQ0D819R5BPX11M1Y816SGSLCVZGGXZY75Z7KKOF3KFQBNJZB06CUBM4CQ8M0X9G5YEGGS682UE5G52DWW1HM19VGVQEO9DX5APMHUPUK0OK' where id=3; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='ZJXWEASEZMXD3BNOHGPMVXP8EH5JMP79HUEIJWCARE5F3G8ISCRHMGZWCKA971FRH2Q5NTBML46F61J8YBBEDME6X3BY3GLL6E8BLESNS700WFO2VO7R0BK5E99DMRG4BQHD4MDD4T4Z1E69TUYOZ5QXP0JHHDTUEPDD719JWX4HBHCFUIBXAYMPXA5E91GKNH5639U1QGM7LP29L0W2WAUHVH9I7O6RUL3WGVV22OV7HZK1IQKIDBOGGM8ZI8TKV' where id=4; -update noar ti set v0='ZJXWEASEZMXD3BNOHGPMVXP8EH5JMP79HUEIJWCARE5F3G8ISCRHMGZWCKA971FRH2Q5NTBML46F61J8YBBEDME6X3BY3GLL6E8BLESNS700WFO2VO7R0BK5E99DMRG4BQHD4MDD4T4Z1E69TUYOZ5QXP0JHHDTUEPDD719JWX4HBHCFUIBXAYMPXA5E91GKNH5639U1QGM7LP29L0W2WAUHVH9I7O6RUL3WGVV22OV7HZK1IQKIDBOGGM8ZI8TKV' where id=4; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='8D3PKJ4BICVJKSPJJ1ZS3MG8F17FLFGDV8BL4TJ1ZQ8DENW8A2TOJT3AGGOM2FPMP8KWLA7R8SH35DYX7BFKLV9TL7H62FV7VA49JGT8ICPH9LAO65JCSVXRJWBE09222MJRFZDIB9934SGXXT005DW1HCKK3IGPNBF83DLK0EET77YAF7WFUK98NY0THDUQ5CDJ5WE14PKKH54FXDYOR6MXL87VD8LRRLX9AEPG5Z2E06B9E88X3SMF6WIQ4FJMK' where id=4; -update noar ti set v1='8D3PKJ4BICVJKSPJJ1ZS3MG8F17FLFGDV8BL4TJ1ZQ8DENW8A2TOJT3AGGOM2FPMP8KWLA7R8SH35DYX7BFKLV9TL7H62FV7VA49JGT8ICPH9LAO65JCSVXRJWBE09222MJRFZDIB9934SGXXT005DW1HCKK3IGPNBF83DLK0EET77YAF7WFUK98NY0THDUQ5CDJ5WE14PKKH54FXDYOR6MXL87VD8LRRLX9AEPG5Z2E06B9E88X3SMF6WIQ4FJMK' where id=4; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='GJGBSMJO675H8X1HCMZZ0P1D49AMK7PZRP4U6FAWAQ1BT0US9431CB351VUNTQEJ06ZQ375341MWEDPTQJ9M6S53ZBZEG1VZ3OO8U09FYUE4KBPW5DTN1HNX3FHEX12RPA5C6QEY83FK1ZJ9FH2YZDZF23SXI2YC4128Z4PR242IJZ9G8NJB25O1YJUCSOQ0DTUL76GSF0SUQLU6KF8YU2LJDIBNS5YO4FBPJXL7GXNNZYWGWCG4QICSB4XY1J6CN' where id=4; -update noar ti set v2='GJGBSMJO675H8X1HCMZZ0P1D49AMK7PZRP4U6FAWAQ1BT0US9431CB351VUNTQEJ06ZQ375341MWEDPTQJ9M6S53ZBZEG1VZ3OO8U09FYUE4KBPW5DTN1HNX3FHEX12RPA5C6QEY83FK1ZJ9FH2YZDZF23SXI2YC4128Z4PR242IJZ9G8NJB25O1YJUCSOQ0DTUL76GSF0SUQLU6KF8YU2LJDIBNS5YO4FBPJXL7GXNNZYWGWCG4QICSB4XY1J6CN' where id=4; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='IIWFVUF80WOR7ZIJHQFWVWKSP210DGF7P9JLEXHNPPSY7K8J6GMYJXYSFBK27207QA5RTBEWE6J0F9SL1S8A5R7VM0GW6VWIRL0JPRMG56MAM3H910Y3KAUN72F7KKRONLYH2LU7PHR41MQIVE573T1TCGKEV0NNSTY67KV63T0U3EKYTLZ0CXZCOAYTB409Y5FY632FRFDDKJFSDQHF0W8X32ESCPS9MPLV65TKYP0MCVWGCRCF9WTJY6NXUK4W6' where id=4; -update noar ti set v3='IIWFVUF80WOR7ZIJHQFWVWKSP210DGF7P9JLEXHNPPSY7K8J6GMYJXYSFBK27207QA5RTBEWE6J0F9SL1S8A5R7VM0GW6VWIRL0JPRMG56MAM3H910Y3KAUN72F7KKRONLYH2LU7PHR41MQIVE573T1TCGKEV0NNSTY67KV63T0U3EKYTLZ0CXZCOAYTB409Y5FY632FRFDDKJFSDQHF0W8X32ESCPS9MPLV65TKYP0MCVWGCRCF9WTJY6NXUK4W6' where id=4; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='T3SGM9F0HHF9TGA5VIUUNYEDLWWGZ2UJDS02T2IU4MNLP81JFV0TAQPU27LF5N9YH9UYI7ISEO4RAVTJG31RTI3UU1PQP4920TJ53U8NDXURZZU6UU6M9JGGGPEAB4NDXLBBMI9LF74E8FHYVRYAKFAYIKEOPRSLNUI06TFY46CLZPLAXLJ07OT9TV9HV5SO9F5LNK9QPA6ZAK3TNBI6OBE0VSHPP14SGUJTCBKKLQUT76MQV0U95OX0MEDJ8SIOG' where id=5; -update noar ti set v0='T3SGM9F0HHF9TGA5VIUUNYEDLWWGZ2UJDS02T2IU4MNLP81JFV0TAQPU27LF5N9YH9UYI7ISEO4RAVTJG31RTI3UU1PQP4920TJ53U8NDXURZZU6UU6M9JGGGPEAB4NDXLBBMI9LF74E8FHYVRYAKFAYIKEOPRSLNUI06TFY46CLZPLAXLJ07OT9TV9HV5SO9F5LNK9QPA6ZAK3TNBI6OBE0VSHPP14SGUJTCBKKLQUT76MQV0U95OX0MEDJ8SIOG' where id=5; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='77BFM7WKREFSTQ19XJ8RYLNTVFNAXE4DBHMNJ1W9LKXU9GYDDJOFTAXI8JBFOGCV5XIDY544C85K87Q04JR8X84J7N6NW8X4V4HA7MKDVBAGHFYPPY529I92ZLZAIRUYB7R37SUAZQSKPFZEGNWH5KCTJIY003MGLZST7FVF0O8M20YBA15AHI3VQV34KH17DI2T1ILUH41ZNUFMBTBIFAN7ZKQRBTTCW99XTLFWO8DFTVIIIDH49HTTMQ3QRX9Z1' where id=5; -update noar ti set v1='77BFM7WKREFSTQ19XJ8RYLNTVFNAXE4DBHMNJ1W9LKXU9GYDDJOFTAXI8JBFOGCV5XIDY544C85K87Q04JR8X84J7N6NW8X4V4HA7MKDVBAGHFYPPY529I92ZLZAIRUYB7R37SUAZQSKPFZEGNWH5KCTJIY003MGLZST7FVF0O8M20YBA15AHI3VQV34KH17DI2T1ILUH41ZNUFMBTBIFAN7ZKQRBTTCW99XTLFWO8DFTVIIIDH49HTTMQ3QRX9Z1' where id=5; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='9E4SU4R7VEHMPWNC6JEG4LHP4RC918X3O0IAX76AKV2RDLQ28TS71CUD2AYWUP2MGXQN44DFVDQ9DKQX87BM01LPZALOO6U3ZO5DU0L14CJO3CD5OGYUDIP2JR88VOEWDEKZ9PQYP8ADQ0KVCKT9XIO3N7O7VAXTOR9QQW5D5JTKI6P0VYIWKU8KP41ZUM7OD0JCAQSU7LIA8DPWKOYOT3VC3X90ZV1Q1Y6XQ5TDRG4DP86P1XHM5QA3R73ZRFSMU' where id=5; -update noar ti set v2='9E4SU4R7VEHMPWNC6JEG4LHP4RC918X3O0IAX76AKV2RDLQ28TS71CUD2AYWUP2MGXQN44DFVDQ9DKQX87BM01LPZALOO6U3ZO5DU0L14CJO3CD5OGYUDIP2JR88VOEWDEKZ9PQYP8ADQ0KVCKT9XIO3N7O7VAXTOR9QQW5D5JTKI6P0VYIWKU8KP41ZUM7OD0JCAQSU7LIA8DPWKOYOT3VC3X90ZV1Q1Y6XQ5TDRG4DP86P1XHM5QA3R73ZRFSMU' where id=5; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='459LKZ51NEUVZ5TRZ8KD6RG9Y9EEAXUD8ZEJWXLYZQOWYQTY6KMOGQTN9FWIRM5TE3TOD63JJLZ7KIHQHO1ECT1HEY80KJZJLBR4XGL0OPHGEBZ5FFLQZ60E7PRFEFGLKJIN9HSLFYMQPD1MWBTXU8CS9BGUWT31DUZ5X7KCFZBT9VUGAYCTK6JWNP2E0WXWCY8UTO7LB9GT4D23ZT93XPWS3W9TQ8Y4JK8AIEECC349B56EAG2N8T2KWC4FOK5GB' where id=5; -update noar ti set v3='459LKZ51NEUVZ5TRZ8KD6RG9Y9EEAXUD8ZEJWXLYZQOWYQTY6KMOGQTN9FWIRM5TE3TOD63JJLZ7KIHQHO1ECT1HEY80KJZJLBR4XGL0OPHGEBZ5FFLQZ60E7PRFEFGLKJIN9HSLFYMQPD1MWBTXU8CS9BGUWT31DUZ5X7KCFZBT9VUGAYCTK6JWNP2E0WXWCY8UTO7LB9GT4D23ZT93XPWS3W9TQ8Y4JK8AIEECC349B56EAG2N8T2KWC4FOK5GB' where id=5; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='VM9LCXGPDS2BXF0QDUEYK8BDI0WCXBNJLN8HS15SY426N1DEMFTVI69I1IH4M7432ZWFR86PPXSFJOBONWCSG203EMC2OJHVJBY3XFHDY85MOIMZR7V3TMW1ZJMTKGWZ1NSK02A8BOZ7QGMTUABV1HTLM2THK3NMWHFMQLRZ6AGBAU511E5FAO5QXU960CPV6G2N5SNS6ATFTJCH1ZWQJ7S4JBJH8L8NBI80J1EUO4GKW4SAT5D3G5B470ED63GN7' where id=6; -update noar ti set v0='VM9LCXGPDS2BXF0QDUEYK8BDI0WCXBNJLN8HS15SY426N1DEMFTVI69I1IH4M7432ZWFR86PPXSFJOBONWCSG203EMC2OJHVJBY3XFHDY85MOIMZR7V3TMW1ZJMTKGWZ1NSK02A8BOZ7QGMTUABV1HTLM2THK3NMWHFMQLRZ6AGBAU511E5FAO5QXU960CPV6G2N5SNS6ATFTJCH1ZWQJ7S4JBJH8L8NBI80J1EUO4GKW4SAT5D3G5B470ED63GN7' where id=6; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='Q9K414ODT08291LVJP5NMUHGZKLTV6DY1WV5S9G89LNR9LB773ENYADVZQNFNFDI3S0PBPLZ3LQFDVWWL3DNB1XUEAYJYKW06VAAL12XF64MCGIFUITME3JCKMY1QUQ1GYXCUCK7NLQWD94CPB74F302O1YK5YZWNUT5ROU8ON6WIEN1AW5MQNYB91BODVM1AKP1TWWV75NXDLT0QNX38HEVYBYQOJL4PYO6SRCQXTWEEMB17A2OP6NXCU36F1CX5' where id=6; -update noar ti set v1='Q9K414ODT08291LVJP5NMUHGZKLTV6DY1WV5S9G89LNR9LB773ENYADVZQNFNFDI3S0PBPLZ3LQFDVWWL3DNB1XUEAYJYKW06VAAL12XF64MCGIFUITME3JCKMY1QUQ1GYXCUCK7NLQWD94CPB74F302O1YK5YZWNUT5ROU8ON6WIEN1AW5MQNYB91BODVM1AKP1TWWV75NXDLT0QNX38HEVYBYQOJL4PYO6SRCQXTWEEMB17A2OP6NXCU36F1CX5' where id=6; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='GB9HHFJVTQO39O8O42N7OV3AHZYTV3D9PDJDYFN0EY09B2VKIH9IWIS60X6AWAXM1B4QX9XF9HJ1MA9HB50GR9LSPOAHSMQ1PZV8KHX9N89A4RVCAO0YL42RN9AR7COJ7NY6FZG1XHEMBD0R7UEGJ0O3CZBO3NUBGMB2U8OY0017U6QIJCG8VNTLWN1ZZ4YQLPLU7VRUAIU7W0K55B8JQFODM7M3IGQBE8EUS9MEG8KHY4Z5SFY4GNQO5QGAYGX19' where id=6; -update noar ti set v2='GB9HHFJVTQO39O8O42N7OV3AHZYTV3D9PDJDYFN0EY09B2VKIH9IWIS60X6AWAXM1B4QX9XF9HJ1MA9HB50GR9LSPOAHSMQ1PZV8KHX9N89A4RVCAO0YL42RN9AR7COJ7NY6FZG1XHEMBD0R7UEGJ0O3CZBO3NUBGMB2U8OY0017U6QIJCG8VNTLWN1ZZ4YQLPLU7VRUAIU7W0K55B8JQFODM7M3IGQBE8EUS9MEG8KHY4Z5SFY4GNQO5QGAYGX19' where id=6; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='517YPKKKPZGE939Z5V3BUTHZUJQ5UXWTGT1MFCL54F9IGLHJP5DHZEC1V02QCRZWAWUPDWMTTT2CLV9SD944YFJT8GRLQI7FRY9MW76YV4DRO5CBVZ3ZM9GSRJAWO7759XLO21WUHVB7O3FAJ70E713HDVA092GL09TCS40T4VISH2BXQ10UTI1YEFRZOKEYXRC23GXHMC4J9LTT5YIW5I2M5ELZIMZFHKERIUVJ2BZT821XR4MX8HQ5VULVVHFQ5' where id=6; -update noar ti set v3='517YPKKKPZGE939Z5V3BUTHZUJQ5UXWTGT1MFCL54F9IGLHJP5DHZEC1V02QCRZWAWUPDWMTTT2CLV9SD944YFJT8GRLQI7FRY9MW76YV4DRO5CBVZ3ZM9GSRJAWO7759XLO21WUHVB7O3FAJ70E713HDVA092GL09TCS40T4VISH2BXQ10UTI1YEFRZOKEYXRC23GXHMC4J9LTT5YIW5I2M5ELZIMZFHKERIUVJ2BZT821XR4MX8HQ5VULVVHFQ5' where id=6; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='RTJEPXOK0PKPC8SZN4H4LSBRITZ8M1820RZYUUJCAKFFZND9P7JWY5H7WGHB4P25IBXAB2ATQFLFOE7FJD4ZESEZ3IGWHUPZ35GQ28HEQGH7TZ2FV8FYEGG11ST45TBSTCNUNK38Q0LB5VA1KNSOG9JOURGD5GF7HMYDL0YJVU0TOXR9WLK1PFDI1NQGJY0A30IK0AQ4XL8QWPFQ0KVEQYO8IZF9XDKQVJSLV8Q834GHERRE3MPFUSQ6MBIBPEL1L' where id=7; -update noar ti set v0='RTJEPXOK0PKPC8SZN4H4LSBRITZ8M1820RZYUUJCAKFFZND9P7JWY5H7WGHB4P25IBXAB2ATQFLFOE7FJD4ZESEZ3IGWHUPZ35GQ28HEQGH7TZ2FV8FYEGG11ST45TBSTCNUNK38Q0LB5VA1KNSOG9JOURGD5GF7HMYDL0YJVU0TOXR9WLK1PFDI1NQGJY0A30IK0AQ4XL8QWPFQ0KVEQYO8IZF9XDKQVJSLV8Q834GHERRE3MPFUSQ6MBIBPEL1L' where id=7; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='BR3N3TYGCY425OB42XAIYPDWDZBOOYQ4HVOKX26OXG947F69MUTW6NXT9XRLSRDMNQQV682RZI6XR8OEO2POL1GM2K35DMR9L6K6YOX7L42AL7Z5DJMXGQ5B2XQGTZ6A7DNP06CCCSMMJ8R20QGW6JGNNI4VN1F7PQY6JR8E3BW82VZVTEN2QYJJRS73AZ9QA8Q5E7G31C3BGDU43FTBLDJ9GRXBF2LLNIYUR2JTPDBLE4R64N2HKYALOBZ1OEPCU' where id=7; -update noar ti set v1='BR3N3TYGCY425OB42XAIYPDWDZBOOYQ4HVOKX26OXG947F69MUTW6NXT9XRLSRDMNQQV682RZI6XR8OEO2POL1GM2K35DMR9L6K6YOX7L42AL7Z5DJMXGQ5B2XQGTZ6A7DNP06CCCSMMJ8R20QGW6JGNNI4VN1F7PQY6JR8E3BW82VZVTEN2QYJJRS73AZ9QA8Q5E7G31C3BGDU43FTBLDJ9GRXBF2LLNIYUR2JTPDBLE4R64N2HKYALOBZ1OEPCU' where id=7; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='SL3JXYSP33BACQD2I94HOF5DW1Y577QLKIY8X83KX09SRGFLYAY35766V1C5ZADM99XQQ5B351ZIJFZI3NVIJ1EUG4N55ZIP15RMD4NYX7L5VHDTO5Y8RMRLTXMOCYSDJJ30SRHSCPEGATIRZ4XSAU4II83MZG75025IWG77UPEAK6FTUPWBNCCXMU1U80V9XQI302IIUI7RBFC4YIQSKHQWMAM97HWV69EZJ5TS6GUC3T4A9HOYUHFNV6BBF8CGR' where id=7; -update noar ti set v2='SL3JXYSP33BACQD2I94HOF5DW1Y577QLKIY8X83KX09SRGFLYAY35766V1C5ZADM99XQQ5B351ZIJFZI3NVIJ1EUG4N55ZIP15RMD4NYX7L5VHDTO5Y8RMRLTXMOCYSDJJ30SRHSCPEGATIRZ4XSAU4II83MZG75025IWG77UPEAK6FTUPWBNCCXMU1U80V9XQI302IIUI7RBFC4YIQSKHQWMAM97HWV69EZJ5TS6GUC3T4A9HOYUHFNV6BBF8CGR' where id=7; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='SG2TTFA79JQTR676JWQ5D053X40K5MQBYAU0DODYXPA507R3WVBBVCEP9KN6HNB8VH972VICRBVVX3MA679LJT9QVB3ZBF0ZT6OFB8JCPLXX9LNOUY1A4OCNPUONMLLU5X3LVQEEWQ1VWQBKETR6J7P3C0C5QCCGUST8JADO3JBSY3ES1K4AWSCTK0GRJ28B9JQZ38WNBZ0QEOHUNPR27KN88XIJWEWVK4E3YXF0OYYC653ZWQCR6LC04868OY6XF' where id=7; -update noar ti set v3='SG2TTFA79JQTR676JWQ5D053X40K5MQBYAU0DODYXPA507R3WVBBVCEP9KN6HNB8VH972VICRBVVX3MA679LJT9QVB3ZBF0ZT6OFB8JCPLXX9LNOUY1A4OCNPUONMLLU5X3LVQEEWQ1VWQBKETR6J7P3C0C5QCCGUST8JADO3JBSY3ES1K4AWSCTK0GRJ28B9JQZ38WNBZ0QEOHUNPR27KN88XIJWEWVK4E3YXF0OYYC653ZWQCR6LC04868OY6XF' where id=7; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='6Z8109SOVJDDUWRTZ7W3TNXVNSFYZLEPYEGCRYCZPABBYGR3QAFVCXLXG9PJX9VPTFXCUHBYO0XEFYKQW07ZZMPOGLV740QAWB7Z9BURCAJVDSW6AWQBV8XL3AE1KW8YVUWY1FTOAGLIAUO7UWK41IYVTF1YP2EK9H7P19I0HNDBAA6WHXI9PB23JKKJTCJQ2FP8AO8DS427PQQ5COEIO113NQ7JQEY3GOZWG1TE2G9LDLJ3W7072PEH0ALVFPQBW' where id=8; -update noar ti set v0='6Z8109SOVJDDUWRTZ7W3TNXVNSFYZLEPYEGCRYCZPABBYGR3QAFVCXLXG9PJX9VPTFXCUHBYO0XEFYKQW07ZZMPOGLV740QAWB7Z9BURCAJVDSW6AWQBV8XL3AE1KW8YVUWY1FTOAGLIAUO7UWK41IYVTF1YP2EK9H7P19I0HNDBAA6WHXI9PB23JKKJTCJQ2FP8AO8DS427PQQ5COEIO113NQ7JQEY3GOZWG1TE2G9LDLJ3W7072PEH0ALVFPQBW' where id=8; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='3M8DXQC5UXZHYCMLFSPSUP4U1VW4DTD8MM16PZKCWQIA4MDD1DU0LS4YRXZ04BE4AOLPN6JKZF52AWFHQYG688JLYBR1XT3HFDBIS4I9XLONXAM9489FEWEIA4O23Q0UY82WVXX56AUZ9S0N3ERAF92OFH6BAM7YAOJTD348XKTBD52AIRKD56QYD8RH39JT1CNB0A1Y3CIAFLJ0HB6QLNXBZHO1GFQR98O0HOYOKGC1NY3SEHVAWGPCYN5ZZHJWL' where id=8; -update noar ti set v1='3M8DXQC5UXZHYCMLFSPSUP4U1VW4DTD8MM16PZKCWQIA4MDD1DU0LS4YRXZ04BE4AOLPN6JKZF52AWFHQYG688JLYBR1XT3HFDBIS4I9XLONXAM9489FEWEIA4O23Q0UY82WVXX56AUZ9S0N3ERAF92OFH6BAM7YAOJTD348XKTBD52AIRKD56QYD8RH39JT1CNB0A1Y3CIAFLJ0HB6QLNXBZHO1GFQR98O0HOYOKGC1NY3SEHVAWGPCYN5ZZHJWL' where id=8; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='0RC1AZUH5QVDDQWSM0RE9XJIGVJN1ZFUP1O9NTRMHRPUZDMULV3C4ZXSKBZ73TC5F7487QXZ8ZV81QDZPQ3DEZBHRII0T6YFJXG54HV6OITHFEYATG8D27CYVJY58JRHK2CM7EHF45CWAG5GL7IXQD76VSLO9YEPRJWQGFK3YUSIY1J4Z4TD8HEN1C5CFT5ETJ4MP6N8UAQ3MQGXZO71WSR0Y26W1CARA0C095OKKG0ECXK6DMFKOO8EVZPECY92E' where id=8; -update noar ti set v2='0RC1AZUH5QVDDQWSM0RE9XJIGVJN1ZFUP1O9NTRMHRPUZDMULV3C4ZXSKBZ73TC5F7487QXZ8ZV81QDZPQ3DEZBHRII0T6YFJXG54HV6OITHFEYATG8D27CYVJY58JRHK2CM7EHF45CWAG5GL7IXQD76VSLO9YEPRJWQGFK3YUSIY1J4Z4TD8HEN1C5CFT5ETJ4MP6N8UAQ3MQGXZO71WSR0Y26W1CARA0C095OKKG0ECXK6DMFKOO8EVZPECY92E' where id=8; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='8E0W95X2JLN1TQHNSVEGV7XG2N0Y4Q13JWWK83BZ7SX41O9VJQ5BFNFCGTRMB4AOQSSKA2GZQOQVNP4X6TPIC3CIGCF8X1O3RUTZ0OF8BQ64CSPT8ORMNGF2XYXCE2PODKJUB2URX76HZS2LVFGWNSBFVVCZEN2OFJ06A11UJ1BMR19FIFA6UOZ29KU3Z0GA5U2VSMPUP47KSB08908R4WH1N2Y4ZHOM04DZ106VUVXV1GQ0IZ62BFGRY29KXQ3RI' where id=8; -update noar ti set v3='8E0W95X2JLN1TQHNSVEGV7XG2N0Y4Q13JWWK83BZ7SX41O9VJQ5BFNFCGTRMB4AOQSSKA2GZQOQVNP4X6TPIC3CIGCF8X1O3RUTZ0OF8BQ64CSPT8ORMNGF2XYXCE2PODKJUB2URX76HZS2LVFGWNSBFVVCZEN2OFJ06A11UJ1BMR19FIFA6UOZ29KU3Z0GA5U2VSMPUP47KSB08908R4WH1N2Y4ZHOM04DZ106VUVXV1GQ0IZ62BFGRY29KXQ3RI' where id=8; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='LKX57SWVK5IE30N7BHD3C80L769S62BXRK1A5NAOC7TU3J1E8XDZT6T4UE4AJOGJMNMS9DNC8EAT65NZ135608MBF3ZJZZJWWQSXDFV8HKN71PHPT8U6I2YX352X40JUH5XQVRNB5AYXP9K93RKC3EM2U4HP2P11QDR1AJLNWN3KHR84ASL3QOZZQP58EGZQIUQYHAXI8S9H7BDCWGN9ACC6BS7RSQZ2CCA021GAD280WJOFL4J9VPDWM59OHK2I7' where id=9; -update noar ti set v0='LKX57SWVK5IE30N7BHD3C80L769S62BXRK1A5NAOC7TU3J1E8XDZT6T4UE4AJOGJMNMS9DNC8EAT65NZ135608MBF3ZJZZJWWQSXDFV8HKN71PHPT8U6I2YX352X40JUH5XQVRNB5AYXP9K93RKC3EM2U4HP2P11QDR1AJLNWN3KHR84ASL3QOZZQP58EGZQIUQYHAXI8S9H7BDCWGN9ACC6BS7RSQZ2CCA021GAD280WJOFL4J9VPDWM59OHK2I7' where id=9; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='LAB2DLVFDCPF3S5FTZ536C082X007E9VK0IQF2FZGKYDB8Y7UD15XNBC0XHP68GN9K8DIQ63G6RWN6YQZFXPVMAHM2J9MIGJU3N7QIR17G6IKXKU7WSMFDIF0LBUM8SH3DKSXEMZ5R7UKYF762H3JZ8STOU934Z4WLBL9XIH3W7CDQC0R6SFW7HPBBA9237BDCDTXVFPBTY4SM9EIAPXAJYIYSIJ2NC0N7JCHG5I1OC6OP7KHTE3A39SHSWYBFHCE' where id=9; -update noar ti set v1='LAB2DLVFDCPF3S5FTZ536C082X007E9VK0IQF2FZGKYDB8Y7UD15XNBC0XHP68GN9K8DIQ63G6RWN6YQZFXPVMAHM2J9MIGJU3N7QIR17G6IKXKU7WSMFDIF0LBUM8SH3DKSXEMZ5R7UKYF762H3JZ8STOU934Z4WLBL9XIH3W7CDQC0R6SFW7HPBBA9237BDCDTXVFPBTY4SM9EIAPXAJYIYSIJ2NC0N7JCHG5I1OC6OP7KHTE3A39SHSWYBFHCE' where id=9; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='UPA3863V3G3BFATC0PGP4KNKMO034WQYLSMXSCABQBJISNSBXS0GY5U97PY6EZVI0RI5RTXH4FTTPLD3M3TQJP6INVTOCIGQS9R82PY8DR7KJLZOL15DFW4WWPSV6FF53OF9J06MNQO8HJUKC9R1BTG3CDXX8MFLDIUH9J7CK8E8VA3IPAQQPJZX5IJMOUVUU2397YP0T69HHWU6FS50UCP2B7XIYP1B63VX91B3M3430WSTO2186KX8TY2VQMPUQ' where id=9; -update noar ti set v2='UPA3863V3G3BFATC0PGP4KNKMO034WQYLSMXSCABQBJISNSBXS0GY5U97PY6EZVI0RI5RTXH4FTTPLD3M3TQJP6INVTOCIGQS9R82PY8DR7KJLZOL15DFW4WWPSV6FF53OF9J06MNQO8HJUKC9R1BTG3CDXX8MFLDIUH9J7CK8E8VA3IPAQQPJZX5IJMOUVUU2397YP0T69HHWU6FS50UCP2B7XIYP1B63VX91B3M3430WSTO2186KX8TY2VQMPUQ' where id=9; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='CGWF4UHGUSJ0V0R4BM4OXCUN3WIYF1XBQV0R81BXU94JHJWAY1H9LN8YR47MI56X9UNSW6OXIAYT827OYPKMFBWAQN3DYOWEZY8WOEXRDQQD7ZV5D9LV98QXD5RW6LH0B8QAXZBPLHC3SV779Z2TCXQZNZHVQ3MVIBHJ2KWGN76SO16DPNAXIV6DMRWF167GSU3A8DCW6HGAJG4EIGE408HLFZB0Z4X9WGJC1OZDNPVC9QSY9QBF7Z2H2KGLT8DHA' where id=9; -update noar ti set v3='CGWF4UHGUSJ0V0R4BM4OXCUN3WIYF1XBQV0R81BXU94JHJWAY1H9LN8YR47MI56X9UNSW6OXIAYT827OYPKMFBWAQN3DYOWEZY8WOEXRDQQD7ZV5D9LV98QXD5RW6LH0B8QAXZBPLHC3SV779Z2TCXQZNZHVQ3MVIBHJ2KWGN76SO16DPNAXIV6DMRWF167GSU3A8DCW6HGAJG4EIGE408HLFZB0Z4X9WGJC1OZDNPVC9QSY9QBF7Z2H2KGLT8DHA' where id=9; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='5MWI8L5Q1UCHJND2A5E13OJHQAOWZRQLPKJTH9NBBF5KB5SFUST56UJ0MURFTN79NBLW2E9ESMSO9HAQAQJSQ8KJRMD4O1U9BGE3Q7WQEH3Q8V6QM5TFW6CYOLJ8F6LW9Z141PU74K2SWCBLJF9FR61BM3K7IIVAX0KAIW7HIFCV1Y2R8NJ7JTGOF4K17CCXW90RW4REW7XSOMLTI07FAR7JJVVY08GWLKYCQVETAV9CBWFTB2VQJYXPF11S6HETK' where id=10; -update noar ti set v0='5MWI8L5Q1UCHJND2A5E13OJHQAOWZRQLPKJTH9NBBF5KB5SFUST56UJ0MURFTN79NBLW2E9ESMSO9HAQAQJSQ8KJRMD4O1U9BGE3Q7WQEH3Q8V6QM5TFW6CYOLJ8F6LW9Z141PU74K2SWCBLJF9FR61BM3K7IIVAX0KAIW7HIFCV1Y2R8NJ7JTGOF4K17CCXW90RW4REW7XSOMLTI07FAR7JJVVY08GWLKYCQVETAV9CBWFTB2VQJYXPF11S6HETK' where id=10; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='C49KN2OLITD139WCYM0ECVCJ6D01Z16HETLLLJGT4AZEN97OQ3R4C65VP4WSE8FYVIUZG5DBXLG9EHTDC97Y67BTB34YORGZSSV1GK315TXREO5X9PJHV7MOEFX6LQP17A41QKZNMQ280SODLE2R2EN59F06L4D9UV3G10SB62QGUIF19UWT0XY2XPAPPMIQ66I7WCM4LWO2Z0NGZ29QPFHRPJZBCLUIYB47EBBAUPPRPBXNTFBBXFSC1FPAAXSY5' where id=10; -update noar ti set v1='C49KN2OLITD139WCYM0ECVCJ6D01Z16HETLLLJGT4AZEN97OQ3R4C65VP4WSE8FYVIUZG5DBXLG9EHTDC97Y67BTB34YORGZSSV1GK315TXREO5X9PJHV7MOEFX6LQP17A41QKZNMQ280SODLE2R2EN59F06L4D9UV3G10SB62QGUIF19UWT0XY2XPAPPMIQ66I7WCM4LWO2Z0NGZ29QPFHRPJZBCLUIYB47EBBAUPPRPBXNTFBBXFSC1FPAAXSY5' where id=10; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='H7L0LK8JRYQIVVJQA8FNK1K8LJ6BE17323OUEU5SD1RZ3JW2N7EKGJ5MNM1HA2E4PCSLX3J5KNK8056UCC5I38HIY8L57ST22BYNW53YMST40VNKOIDW4QG3A54J25FBZHS55EQTXYLA31M31TCS84SP314ZOR67NA0P5DBJ6ULTTHZP41XRYX20C78IVNLLJ1HJA2WU3YMXSL0OTZNLN6X4XDQNUW1D5JT5AW7SRLKV446RCR3YU92PXX58Y75CW' where id=10; -update noar ti set v2='H7L0LK8JRYQIVVJQA8FNK1K8LJ6BE17323OUEU5SD1RZ3JW2N7EKGJ5MNM1HA2E4PCSLX3J5KNK8056UCC5I38HIY8L57ST22BYNW53YMST40VNKOIDW4QG3A54J25FBZHS55EQTXYLA31M31TCS84SP314ZOR67NA0P5DBJ6ULTTHZP41XRYX20C78IVNLLJ1HJA2WU3YMXSL0OTZNLN6X4XDQNUW1D5JT5AW7SRLKV446RCR3YU92PXX58Y75CW' where id=10; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='R96YM73YM4R0B1UNOEJNCB8YGAITGGYL0TLWYLS31LHF19XUDQBNLVZEJM0PEHP4BEOGF0FX2AI83UDPVY59WIJGMFC9G74FFJA3HV92TBCEB00V768UMIEB4C0ZR4U7M0JONP5NTVC2VSZSBMEFF6KTNUE05RCE20AR4IQX4WY1UOREP6F6IT07PQVYHNF3W6AGUANQOZI90QNC2ZSHAIR6UHZGOML3BB9SYQ0UTNMPOJ7T0NXED620VNC0RQ3MR' where id=10; -update noar ti set v3='R96YM73YM4R0B1UNOEJNCB8YGAITGGYL0TLWYLS31LHF19XUDQBNLVZEJM0PEHP4BEOGF0FX2AI83UDPVY59WIJGMFC9G74FFJA3HV92TBCEB00V768UMIEB4C0ZR4U7M0JONP5NTVC2VSZSBMEFF6KTNUE05RCE20AR4IQX4WY1UOREP6F6IT07PQVYHNF3W6AGUANQOZI90QNC2ZSHAIR6UHZGOML3BB9SYQ0UTNMPOJ7T0NXED620VNC0RQ3MR' where id=10; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='04OSZWABN8XYY4HEHYQJRM7M2XPBD8UTK1LGYIMPLC18WQU8QR3A1HJB2L9P8RA6ZLG3U56XC5VV71CT29KDCW0FUOZC3XGA7RGJZTGPZFD8E1JFVLND694GI6NNH3D36UXLE5F296PXRCC7NH7PUJS5ZQI1ZYC3TAH71S5LGJZPJTIZPPU6OOEZSVOZ26P6F6KG380CLRWV81TYQKPQL4TE3EST8X8Q5AFNAQ6HBJJ9XFAK8642TYUZQLGEK7P0G' where id=11; -update noar ti set v0='04OSZWABN8XYY4HEHYQJRM7M2XPBD8UTK1LGYIMPLC18WQU8QR3A1HJB2L9P8RA6ZLG3U56XC5VV71CT29KDCW0FUOZC3XGA7RGJZTGPZFD8E1JFVLND694GI6NNH3D36UXLE5F296PXRCC7NH7PUJS5ZQI1ZYC3TAH71S5LGJZPJTIZPPU6OOEZSVOZ26P6F6KG380CLRWV81TYQKPQL4TE3EST8X8Q5AFNAQ6HBJJ9XFAK8642TYUZQLGEK7P0G' where id=11; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='8E2N7HIEARWE7A2FUX14OL351UO3J88GLZYU3RDC5FBBY37FRBXFPIZQ9EQHNT753I4IJ3W648RGXG3STBZPUJ7TETT8QHKC7M3Z4FTNX5PEOT8OJH41IK7YZA4IK2UOK1B34RVC21JPSFFGRA5MZZ053O2T7IXW99Z49TMGJP22C6W42CT3UWY7X1HC9CWGR3NFB6K54SIPIAA6RGBQ0NR488KL85XUW0B7E1UMT12RC4WAVDMZAAJB3HIESDVX9' where id=11; -update noar ti set v1='8E2N7HIEARWE7A2FUX14OL351UO3J88GLZYU3RDC5FBBY37FRBXFPIZQ9EQHNT753I4IJ3W648RGXG3STBZPUJ7TETT8QHKC7M3Z4FTNX5PEOT8OJH41IK7YZA4IK2UOK1B34RVC21JPSFFGRA5MZZ053O2T7IXW99Z49TMGJP22C6W42CT3UWY7X1HC9CWGR3NFB6K54SIPIAA6RGBQ0NR488KL85XUW0B7E1UMT12RC4WAVDMZAAJB3HIESDVX9' where id=11; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='ZTDXW5EMDB874E1R5QJZ1VRX7C5YV4568RUA65LQDVT8PPHOVQFI25HA2LY6TXZS84SACW20K1RYKZQ59MM05ICVXNV4TVN7LP9P6CI5O1T6G7U9F8F1VRSBU65WZFF0YOLSJ3Q3KVZ7WVMAF5SZT6BKC8WNTITLWKPJP3SJL1UBAAPZ27S8BHHEJX202E1NPYRCP8VPJEK8AE238OPHRT2P8RDH0FZLOHW17WAB2GQQVL4FR4RM33IUXVUEE3HL0' where id=11; -update noar ti set v2='ZTDXW5EMDB874E1R5QJZ1VRX7C5YV4568RUA65LQDVT8PPHOVQFI25HA2LY6TXZS84SACW20K1RYKZQ59MM05ICVXNV4TVN7LP9P6CI5O1T6G7U9F8F1VRSBU65WZFF0YOLSJ3Q3KVZ7WVMAF5SZT6BKC8WNTITLWKPJP3SJL1UBAAPZ27S8BHHEJX202E1NPYRCP8VPJEK8AE238OPHRT2P8RDH0FZLOHW17WAB2GQQVL4FR4RM33IUXVUEE3HL0' where id=11; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='AB9PDSQ9YG0LBM3R95BLRP238RC8GSOJ4KMOIUZP6JD30SVS5ZYE2G4NX2KBW3IZ3DBL6E8NHY2RSSODMLWQFUTP9AYRTKSH44MQJ1BJSJ68ROS3X95WCJHZMVQW8LLGSA76XMD44TKKYPVUL7UVNHZPFTNQ3ILPYEAX8FI8X1FMKKQTOYBYUXG4JPL0G41VYW9VHUOVSK4YQ7E7L0J6R09JRHEPQQFP114Z4BAHRCU31LTTODWKN0R6SJOJK4BCJ' where id=11; -update noar ti set v3='AB9PDSQ9YG0LBM3R95BLRP238RC8GSOJ4KMOIUZP6JD30SVS5ZYE2G4NX2KBW3IZ3DBL6E8NHY2RSSODMLWQFUTP9AYRTKSH44MQJ1BJSJ68ROS3X95WCJHZMVQW8LLGSA76XMD44TKKYPVUL7UVNHZPFTNQ3ILPYEAX8FI8X1FMKKQTOYBYUXG4JPL0G41VYW9VHUOVSK4YQ7E7L0J6R09JRHEPQQFP114Z4BAHRCU31LTTODWKN0R6SJOJK4BCJ' where id=11; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='V5LXYKY6V5LZ1ZEYN00JYGI9Z5VSX0NX2QG85LKPGTK4H8IX7WJ3616O693JUUP82F9XJAVOJ9IH3YK5YT3WFQ5X3D4RM0IAX3M30KZY3G23Q9A4XC74ZOYH5TD18293O5HY2EJH7S9XCVB1GKC1P1MD9Y11V0WSEA15LI6XXNSCC9KQFQ1RS7S0HNCMJL64OQ2T1KVEFVR3E2AQOUB5SWX023MY6TY2DDDPUL28NEA3N0G1ZEV7135NAG7D5OK5G' where id=12; -update noar ti set v0='V5LXYKY6V5LZ1ZEYN00JYGI9Z5VSX0NX2QG85LKPGTK4H8IX7WJ3616O693JUUP82F9XJAVOJ9IH3YK5YT3WFQ5X3D4RM0IAX3M30KZY3G23Q9A4XC74ZOYH5TD18293O5HY2EJH7S9XCVB1GKC1P1MD9Y11V0WSEA15LI6XXNSCC9KQFQ1RS7S0HNCMJL64OQ2T1KVEFVR3E2AQOUB5SWX023MY6TY2DDDPUL28NEA3N0G1ZEV7135NAG7D5OK5G' where id=12; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='ZFN6OAEU26G707F962O4QHOZPX6W0D0QWRPRAJOFX8XPMRN9Y0TP1G34WAZYA45M3EZ78WCA84SCYS1261QZ4ZS3ULL36AS0VXJDWNJWFX3S05B3AEMANUWFEVJNVIAGB6PE6893N55ZX6QDPWPL364CAR21DXICCEXUTTPALNVO2ZRY6TRQUH6PTRBNO72MLWJ9YCAQPQNUAVCOYNQ66YQYD0I5FK01H50G1WDN8VH2JG0FRESSN5PLOF9PQD5QR' where id=12; -update noar ti set v1='ZFN6OAEU26G707F962O4QHOZPX6W0D0QWRPRAJOFX8XPMRN9Y0TP1G34WAZYA45M3EZ78WCA84SCYS1261QZ4ZS3ULL36AS0VXJDWNJWFX3S05B3AEMANUWFEVJNVIAGB6PE6893N55ZX6QDPWPL364CAR21DXICCEXUTTPALNVO2ZRY6TRQUH6PTRBNO72MLWJ9YCAQPQNUAVCOYNQ66YQYD0I5FK01H50G1WDN8VH2JG0FRESSN5PLOF9PQD5QR' where id=12; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='VQX0Z8GIYB6PDTQQ3QWOJ3UEYKJR19SD53FCIJPVJ5PG2PZCA15JF90K3CCXX2WJ5YAH2SBJ6V7RWZMWR34NGNM57OUBQ31M9XYWD7AMVTE2YMLH45V64A7EIL22LRMFNBH23OFGMMG72U8RUZUUY7VL48MWH9KQ8XBJJCL4GLA9P7BI6Z3FD5VEYN6NLZBAD38E2UKNFYZWF0C7ZHTQYMSZZI5ZKBCU1UZCD8G0BUZCUVMVTTSSZD8APYS1S2JQS' where id=12; -update noar ti set v2='VQX0Z8GIYB6PDTQQ3QWOJ3UEYKJR19SD53FCIJPVJ5PG2PZCA15JF90K3CCXX2WJ5YAH2SBJ6V7RWZMWR34NGNM57OUBQ31M9XYWD7AMVTE2YMLH45V64A7EIL22LRMFNBH23OFGMMG72U8RUZUUY7VL48MWH9KQ8XBJJCL4GLA9P7BI6Z3FD5VEYN6NLZBAD38E2UKNFYZWF0C7ZHTQYMSZZI5ZKBCU1UZCD8G0BUZCUVMVTTSSZD8APYS1S2JQS' where id=12; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='H3M5YB8VKJX9HCV2B0ZA4NZXHC8H8YTAY9A9SXI8MS1YRBISRAH5TG2N2GQK31GP12JX5J4XRSLB9A1CY4GMKVHZFMK738PPKUNJMCCHKL8CUYCRCLSQVT56CO9J87AZ9TIQG1UCR9M49CJR0JV0N3184GMXTCDTC3QGJP78NGFBMVEF8WHD3XK4X1EU49YEVMDC4AP6MA2QISRR5VSS9TAZ1YK9CJKLG0LE1SF53XQG1PZQHQ2IAAKPMGQ2IP0KN' where id=12; -update noar ti set v3='H3M5YB8VKJX9HCV2B0ZA4NZXHC8H8YTAY9A9SXI8MS1YRBISRAH5TG2N2GQK31GP12JX5J4XRSLB9A1CY4GMKVHZFMK738PPKUNJMCCHKL8CUYCRCLSQVT56CO9J87AZ9TIQG1UCR9M49CJR0JV0N3184GMXTCDTC3QGJP78NGFBMVEF8WHD3XK4X1EU49YEVMDC4AP6MA2QISRR5VSS9TAZ1YK9CJKLG0LE1SF53XQG1PZQHQ2IAAKPMGQ2IP0KN' where id=12; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='0BQ6JUDERPBLQAZNK08MLPXJNCWNYQ1LUPIIG87140824SGIOWRJREI8HEG918VT3Y2QL272H26K80BT5L112AE0M3RDVC5IU653G5SBWITYM11G419FMLNE54HPQE05A28A0TH7U8OEE1B0TRPWT2V8D5UF1XEEEJ0KRYTPRQX8UQQLFFAQRJOSHE78KOM8BMKO8D2U05HU2XMXLZAFYHT2JJ14JAJE9Q3X76O8S3LJ2D5Q995OWH8I8VNV4S34E' where id=13; -update noar ti set v0='0BQ6JUDERPBLQAZNK08MLPXJNCWNYQ1LUPIIG87140824SGIOWRJREI8HEG918VT3Y2QL272H26K80BT5L112AE0M3RDVC5IU653G5SBWITYM11G419FMLNE54HPQE05A28A0TH7U8OEE1B0TRPWT2V8D5UF1XEEEJ0KRYTPRQX8UQQLFFAQRJOSHE78KOM8BMKO8D2U05HU2XMXLZAFYHT2JJ14JAJE9Q3X76O8S3LJ2D5Q995OWH8I8VNV4S34E' where id=13; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='9AMZKRYJEMP4690BPS403LC8UT5MODEBM22BAG4D39U0Q4TBE4EWK96ZD8NUZI5TV8R9T0N6Q2ASJV0JTZUEMKXT1MOV3Z5JET3OIFZUWHKV7GE2U1HJBLFQCKUMK8P0HTMMEFSFCIH0IAL677H2DKTRA2KTCZTFJMIUZVF4E9CAREB74X2P2ZLPQHESFSY2N1ILJHCXBHSFD8J0YHAZS5IWLRCPG241RX1AFY43N4T4RTAIQY6REPXRL1U6IEPZ7' where id=13; -update noar ti set v1='9AMZKRYJEMP4690BPS403LC8UT5MODEBM22BAG4D39U0Q4TBE4EWK96ZD8NUZI5TV8R9T0N6Q2ASJV0JTZUEMKXT1MOV3Z5JET3OIFZUWHKV7GE2U1HJBLFQCKUMK8P0HTMMEFSFCIH0IAL677H2DKTRA2KTCZTFJMIUZVF4E9CAREB74X2P2ZLPQHESFSY2N1ILJHCXBHSFD8J0YHAZS5IWLRCPG241RX1AFY43N4T4RTAIQY6REPXRL1U6IEPZ7' where id=13; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='FCCDBULZN5AC5HUZMOU1J5QRCS4S1C7Z371Y8Z7N88H67IF2M8TMELBN8W1BH9ZQVGDMFQP0VLDXKYLTZUYBPBW0UO7MBPSH4AZ60AIOTIUB9LW8P0TI2U15RF62E5YPC8S5LZ05QXMSMHDCVU0RUAJ943L2GH41VRLYRUHCKUVQDAHCH20KLMY8F76EGCO1DD7GG1IJ2BN2N0IJBAAMB54QQ2Q4Z3RZYSX9383G53983PGKFS0UXMZO7J1U4HKZU' where id=13; -update noar ti set v2='FCCDBULZN5AC5HUZMOU1J5QRCS4S1C7Z371Y8Z7N88H67IF2M8TMELBN8W1BH9ZQVGDMFQP0VLDXKYLTZUYBPBW0UO7MBPSH4AZ60AIOTIUB9LW8P0TI2U15RF62E5YPC8S5LZ05QXMSMHDCVU0RUAJ943L2GH41VRLYRUHCKUVQDAHCH20KLMY8F76EGCO1DD7GG1IJ2BN2N0IJBAAMB54QQ2Q4Z3RZYSX9383G53983PGKFS0UXMZO7J1U4HKZU' where id=13; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='SAQMCV95TG3T09WH0B904FML7IG727PSMJ9TN7102TPY13JMAFKBIZSTUJJS5DJ21KMMHYJTXEGGIU83KIGIYNPEKRW8VI1CHWHTL6N7EX8DZMEMR356G4BRL4FASSVCSN1RU0FEIWGDKCCW38AYQERJRT2UVWDH2LC7ZHFODGJ16TJKU3ARDPIBDEJ5H0CWK3JV96XWYSU6Z9HWJD5G2F78HEPQU615XWYJKG7TIQA7NJ3U2B09GASBEU2YZO59H' where id=13; -update noar ti set v3='SAQMCV95TG3T09WH0B904FML7IG727PSMJ9TN7102TPY13JMAFKBIZSTUJJS5DJ21KMMHYJTXEGGIU83KIGIYNPEKRW8VI1CHWHTL6N7EX8DZMEMR356G4BRL4FASSVCSN1RU0FEIWGDKCCW38AYQERJRT2UVWDH2LC7ZHFODGJ16TJKU3ARDPIBDEJ5H0CWK3JV96XWYSU6Z9HWJD5G2F78HEPQU615XWYJKG7TIQA7NJ3U2B09GASBEU2YZO59H' where id=13; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='8P7YV1QBXTRVC6H3J5GN8BKD2CIN7H0YNSXE7VQD94SODKPKGOO7TOAHDUORC2JTLR63I81JXNFT0Y9P9ITRAX9R93W7MAGKB6LCYFSTXF53TKUASMF0ZHND54QB1Y4BV5PL4DLQ5SVMH560FVD0CA38HCLDVY278DSWSMGYAQACJL792TZ6M6LEXTMDI90ZI2TIQBQ23KEI0T8A79SUIH2XTS5MOYE7KFE3O93ERNIXVPYNQWZBTNVAFGUSX93QK' where id=14; -update noar ti set v0='8P7YV1QBXTRVC6H3J5GN8BKD2CIN7H0YNSXE7VQD94SODKPKGOO7TOAHDUORC2JTLR63I81JXNFT0Y9P9ITRAX9R93W7MAGKB6LCYFSTXF53TKUASMF0ZHND54QB1Y4BV5PL4DLQ5SVMH560FVD0CA38HCLDVY278DSWSMGYAQACJL792TZ6M6LEXTMDI90ZI2TIQBQ23KEI0T8A79SUIH2XTS5MOYE7KFE3O93ERNIXVPYNQWZBTNVAFGUSX93QK' where id=14; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='AB353RMDDKRCC3CI27XQNS4GL6N20K2GN99IG7KEABKLL3DKHL2VXWUYP2PKZIXHMQBGCWVIQUN7N7NSOWU7X79WLT4D4DZG5KBNKH86T5JK0YPHJZGNTP9OCBMJQXOEN0SV6DQOYAYWMY0VLLNU95DQWT13Y11MP2MO8HPAGXU945VW033XZSWKR1VEZYSFY7UVMWC3WJUAB266C6CCCDIIGQ0181MWZBCQXD7ZDDGPSGVNMX33DP0F2KZK4R46O' where id=14; -update noar ti set v1='AB353RMDDKRCC3CI27XQNS4GL6N20K2GN99IG7KEABKLL3DKHL2VXWUYP2PKZIXHMQBGCWVIQUN7N7NSOWU7X79WLT4D4DZG5KBNKH86T5JK0YPHJZGNTP9OCBMJQXOEN0SV6DQOYAYWMY0VLLNU95DQWT13Y11MP2MO8HPAGXU945VW033XZSWKR1VEZYSFY7UVMWC3WJUAB266C6CCCDIIGQ0181MWZBCQXD7ZDDGPSGVNMX33DP0F2KZK4R46O' where id=14; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='8YFKAMF2GMDUTSJVHV96FLY3H175FH18XC854DX64XPJQ91WJ1OVP5D4UKIM4924J3KTRUW4BP5HI5N9PFZ7GKBYMGJLBO47ZTX0UR6J6THBB0QQNMDDUXTTMJ9V9KPIPF1W6RFMZ6YVKZGPHH33LY4TDKMMQHGGG6XTIRE1MN55LAGLO4UL4X4DDBJO7D4ZKQZYFO73JDHZIUI0SI5J7B5NMG4J84EHK9J4SCYQLRYJMS0KV5AJ9E4BF5VH11KZE' where id=14; -update noar ti set v2='8YFKAMF2GMDUTSJVHV96FLY3H175FH18XC854DX64XPJQ91WJ1OVP5D4UKIM4924J3KTRUW4BP5HI5N9PFZ7GKBYMGJLBO47ZTX0UR6J6THBB0QQNMDDUXTTMJ9V9KPIPF1W6RFMZ6YVKZGPHH33LY4TDKMMQHGGG6XTIRE1MN55LAGLO4UL4X4DDBJO7D4ZKQZYFO73JDHZIUI0SI5J7B5NMG4J84EHK9J4SCYQLRYJMS0KV5AJ9E4BF5VH11KZE' where id=14; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='BWL7S5A8NUCR0ON6T559WQF9WN3ZB726H7583ETHGB6C0G3262K4IZU89HVEK1Y6SDIEPV1X5MPXUP5022VZZLTC2XULSS3258EW1KABNPHUGYIICT20OIPX2VKACTXFP5IVFP35U2JNUN3XQGHYOLLNGHED1KHJINJ0DGP6Q2BBUJ1ILBJTM2VB3VP22H9LJ8BBW6YHKNFRSFV6ST9ZVIMS8H5IHFV2V6YGQVYEHL08FW1EXTNJ14BOJRI2QFESI' where id=14; -update noar ti set v3='BWL7S5A8NUCR0ON6T559WQF9WN3ZB726H7583ETHGB6C0G3262K4IZU89HVEK1Y6SDIEPV1X5MPXUP5022VZZLTC2XULSS3258EW1KABNPHUGYIICT20OIPX2VKACTXFP5IVFP35U2JNUN3XQGHYOLLNGHED1KHJINJ0DGP6Q2BBUJ1ILBJTM2VB3VP22H9LJ8BBW6YHKNFRSFV6ST9ZVIMS8H5IHFV2V6YGQVYEHL08FW1EXTNJ14BOJRI2QFESI' where id=14; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='NIPNXTQ3XUDFIJL0BLCV2HN2L73P7VN4FU97OYLNYXSMOLO1FY70O4XSEQYHQSSF80PE42N7G3X9WV1CNP5QY0V3F2ERA2FFN3EQ4WZTHIBYBAHTX5TG9TSV000AN6LMTKDKLAN87NCLHOVLFQEJKYF4UXPAQIO7Y1TOLI43SBA6Y6KM8HFDGQKWO79FUAG9VL58PUDM0VGK2AY2T6L49ROU3PKJAE1T497O72CX2DVR3LPG247LCDKLAT5WQVBQH' where id=15; -update noar ti set v0='NIPNXTQ3XUDFIJL0BLCV2HN2L73P7VN4FU97OYLNYXSMOLO1FY70O4XSEQYHQSSF80PE42N7G3X9WV1CNP5QY0V3F2ERA2FFN3EQ4WZTHIBYBAHTX5TG9TSV000AN6LMTKDKLAN87NCLHOVLFQEJKYF4UXPAQIO7Y1TOLI43SBA6Y6KM8HFDGQKWO79FUAG9VL58PUDM0VGK2AY2T6L49ROU3PKJAE1T497O72CX2DVR3LPG247LCDKLAT5WQVBQH' where id=15; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='76BG85Z4HU5UG4K7LZTWWSGATWCKBZYC1N7O9F5KSDCV22Y72GI9PPFMH1UD99SADG003CCVBN3WLR0KB8FW0X9TV73IHSNOUT33D6J269EGZCQVIIO9I4AW3O1ULOZRTFB687M2GTEGAJG7OMAKL526W4Y5F93QKCKBWA3EOHKPO9JBABZHFG3P7WGYC712OXJBCSYXSMQR112OWHY4VNXN581FHSNP9G3QKXL27Q4V8GL2GXO8WVZB0XI5JENE6' where id=15; -update noar ti set v1='76BG85Z4HU5UG4K7LZTWWSGATWCKBZYC1N7O9F5KSDCV22Y72GI9PPFMH1UD99SADG003CCVBN3WLR0KB8FW0X9TV73IHSNOUT33D6J269EGZCQVIIO9I4AW3O1ULOZRTFB687M2GTEGAJG7OMAKL526W4Y5F93QKCKBWA3EOHKPO9JBABZHFG3P7WGYC712OXJBCSYXSMQR112OWHY4VNXN581FHSNP9G3QKXL27Q4V8GL2GXO8WVZB0XI5JENE6' where id=15; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='ZSLQN4KDSAOJ5ZHX3C46SNFQQY1CDQ02B32NIGSA7WEE9BVHL8CLWTN5HOQO6BMNETRRQMKURCRYT8CSC7E57OL0MAKU8AUKLLRNPYHHSF4RD1VUSJL6WJ8ZM3K2DVUBZDS0FERUXDJDWK340QHX24PWHHN3K7P0YOGFMEH99ZU9N7ESCUT82QUICZQWXZTOCM3Z9LTUL4P2FZFAD5K0X13Q4LWQ66TW7FMBT0FEOF73T1T84LUM1JDZ062T017KJ' where id=15; -update noar ti set v2='ZSLQN4KDSAOJ5ZHX3C46SNFQQY1CDQ02B32NIGSA7WEE9BVHL8CLWTN5HOQO6BMNETRRQMKURCRYT8CSC7E57OL0MAKU8AUKLLRNPYHHSF4RD1VUSJL6WJ8ZM3K2DVUBZDS0FERUXDJDWK340QHX24PWHHN3K7P0YOGFMEH99ZU9N7ESCUT82QUICZQWXZTOCM3Z9LTUL4P2FZFAD5K0X13Q4LWQ66TW7FMBT0FEOF73T1T84LUM1JDZ062T017KJ' where id=15; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='9ZQF665VYVHA7BI6PSJAVBQIKURT04GKN9VYB29189TCLHPSVVIKCL4MPPDZCZQAR5GAQD0MSQSJT21G27BL4YZA68P7SXEX4VTJF3VNRTXMJ7H0N40NNLL0N569X3KRH2C1X5CGMCA765DR4JJCVZ7M5F47UYPTHUBC5LP8DUCG52WEI51JX03L8X5Z0YTOFQNRVZ5FZGO5WE05P8WEYW8BJSK5XBN287BLRYPGRS10DGTCXWAQUIA1H6V5I4HU9' where id=15; -update noar ti set v3='9ZQF665VYVHA7BI6PSJAVBQIKURT04GKN9VYB29189TCLHPSVVIKCL4MPPDZCZQAR5GAQD0MSQSJT21G27BL4YZA68P7SXEX4VTJF3VNRTXMJ7H0N40NNLL0N569X3KRH2C1X5CGMCA765DR4JJCVZ7M5F47UYPTHUBC5LP8DUCG52WEI51JX03L8X5Z0YTOFQNRVZ5FZGO5WE05P8WEYW8BJSK5XBN287BLRYPGRS10DGTCXWAQUIA1H6V5I4HU9' where id=15; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='Y3QO4M5KHDN1SV95J8DA6THASVE799AGXWIFFTBYDY8N7WQL15KRNQX9E1P9MU7GYMB2CTNQE6WJG0TEU3Y7F28JLMU713WMVUCGGTPAHT7DK7S1G4A4A7KW7QXHC7JJ4R3WVZIKWLCXY0TC2EKULSR4DVOTFLW24QNKBY111298J27EXFU2Z6P40M0OTZO5X3BSVQJDOA23XYU8N6QC20RIY6N6M4VSJN3H4NR355LZEXOT7K64BFI6PX0G0V8G5' where id=16; -update noar ti set v0='Y3QO4M5KHDN1SV95J8DA6THASVE799AGXWIFFTBYDY8N7WQL15KRNQX9E1P9MU7GYMB2CTNQE6WJG0TEU3Y7F28JLMU713WMVUCGGTPAHT7DK7S1G4A4A7KW7QXHC7JJ4R3WVZIKWLCXY0TC2EKULSR4DVOTFLW24QNKBY111298J27EXFU2Z6P40M0OTZO5X3BSVQJDOA23XYU8N6QC20RIY6N6M4VSJN3H4NR355LZEXOT7K64BFI6PX0G0V8G5' where id=16; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='BUOKN95C2YZKYIR5NHASDKBN4NACXND9CLBIHGCUB040Z7Y1USZ7ZHW82DU3J4HO921LLXINRF3ZHL3CKBPLX34TIKW6CZKS6IW3VOGBHLMKQ0D1ABF2MPIQ8CQY7X4K74BGJG7MOGXZ5RKJ03ZKPM9AYUECGJQ6H7AJNX2VAPKIFF3UCA20LPEY1D9HFLX0XDBIPKFMC1XWJGGPF0LFHBLIPNMQV90ROSWX7IVFRI6L0X6ZV922WFNGMEM0P7PZT' where id=16; -update noar ti set v1='BUOKN95C2YZKYIR5NHASDKBN4NACXND9CLBIHGCUB040Z7Y1USZ7ZHW82DU3J4HO921LLXINRF3ZHL3CKBPLX34TIKW6CZKS6IW3VOGBHLMKQ0D1ABF2MPIQ8CQY7X4K74BGJG7MOGXZ5RKJ03ZKPM9AYUECGJQ6H7AJNX2VAPKIFF3UCA20LPEY1D9HFLX0XDBIPKFMC1XWJGGPF0LFHBLIPNMQV90ROSWX7IVFRI6L0X6ZV922WFNGMEM0P7PZT' where id=16; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='A4GWW90Z56JY82G9YDXZ3QA31DDD06E0BKSADEOFWLW554Z20JSITTW0TAMMTM68ZO7H74DY6K1NMD2KRAIMA585YQBB3R6D3XFWXGR9436W5HZC5CHSWNZ370YZG7UIQIKPQRO5EXGUXTNR8HQSZNSRPS9OKSZIV5OM2M6W4CRYZCSYZRFW78L5AX4SKV0W3TE27OG1ORY7RMW1P582QPDUPYOHGE2TJOOC6A5QHIK8O9N0QLB8YG3U39QF4Q7Z8' where id=16; -update noar ti set v2='A4GWW90Z56JY82G9YDXZ3QA31DDD06E0BKSADEOFWLW554Z20JSITTW0TAMMTM68ZO7H74DY6K1NMD2KRAIMA585YQBB3R6D3XFWXGR9436W5HZC5CHSWNZ370YZG7UIQIKPQRO5EXGUXTNR8HQSZNSRPS9OKSZIV5OM2M6W4CRYZCSYZRFW78L5AX4SKV0W3TE27OG1ORY7RMW1P582QPDUPYOHGE2TJOOC6A5QHIK8O9N0QLB8YG3U39QF4Q7Z8' where id=16; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='BG9HW8OWS91PFB05GXEG0LWJ94M35PKRMO5ZLMKY9Q2BTUBKDFU7W6V1DK0J9XSII1A75Q4XBRXR5K7IBH7EEJ39JZ0SUUI91P9OUKQFNOGYUGXVZI7NDBDOW42XOFYZJ76E9M3SF2ORBA6KKVHT9B4KR580DTKH9DD2AVDXZAFQVF16CFH0MW8FPY26JBVFSEMI5WIX902EEEJY2XPFC5C9S44OT04HPXX9WWBFEJM2712WZWYFFFVJPLKS5MD3B' where id=16; -update noar ti set v3='BG9HW8OWS91PFB05GXEG0LWJ94M35PKRMO5ZLMKY9Q2BTUBKDFU7W6V1DK0J9XSII1A75Q4XBRXR5K7IBH7EEJ39JZ0SUUI91P9OUKQFNOGYUGXVZI7NDBDOW42XOFYZJ76E9M3SF2ORBA6KKVHT9B4KR580DTKH9DD2AVDXZAFQVF16CFH0MW8FPY26JBVFSEMI5WIX902EEEJY2XPFC5C9S44OT04HPXX9WWBFEJM2712WZWYFFFVJPLKS5MD3B' where id=16; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='VFQA6QPOFSNDFRN56LI3PTXZRP0CGVA1OSQWW2RJR8F3868FWND46KU8FVX5MU6UC4IEF4A8BVFCML4HNXYTXZJ2KNGZLNXFHPU6RPMKOAGMD47H8FQQLEWZMQNPPRAVMNDAMCVMFVGWB0XRJGTMCB3MKY00NPV3KQF5WFJ984LNF96I7LS3ON6O4ES9JDVZ3ZPGD7Z8HUX221Y2EEYDHXJUNT1YL6HKFR0ONSGG0ZTQ5KQ2IMW8OOTOBOC7ZZSR3' where id=17; -update noar ti set v0='VFQA6QPOFSNDFRN56LI3PTXZRP0CGVA1OSQWW2RJR8F3868FWND46KU8FVX5MU6UC4IEF4A8BVFCML4HNXYTXZJ2KNGZLNXFHPU6RPMKOAGMD47H8FQQLEWZMQNPPRAVMNDAMCVMFVGWB0XRJGTMCB3MKY00NPV3KQF5WFJ984LNF96I7LS3ON6O4ES9JDVZ3ZPGD7Z8HUX221Y2EEYDHXJUNT1YL6HKFR0ONSGG0ZTQ5KQ2IMW8OOTOBOC7ZZSR3' where id=17; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='0KSFJCJ74RB0HDOS6RC38GZ7QMQMB6U86X2H24Y6UYBKJQKJ6ZXME4IJCDJYLKQYHOMLV3N2RR7AHOEHIKXUW7SSWDF2EUD5MG8B9PCRFM5ECP0CUD71T6M18CJ1IIDAAJHAZTTH3MDDBYGSE1QXOPBBA51IYAKKWKGBSO7ZP2FHIEXZVCSK9IDC1W54UARPQISV35MHFG9WD3OMGFALDO97OXKPRP3ZXS2R1TFQ6INRHRFHP1TUFAFZT27QPZ2EE' where id=17; -update noar ti set v1='0KSFJCJ74RB0HDOS6RC38GZ7QMQMB6U86X2H24Y6UYBKJQKJ6ZXME4IJCDJYLKQYHOMLV3N2RR7AHOEHIKXUW7SSWDF2EUD5MG8B9PCRFM5ECP0CUD71T6M18CJ1IIDAAJHAZTTH3MDDBYGSE1QXOPBBA51IYAKKWKGBSO7ZP2FHIEXZVCSK9IDC1W54UARPQISV35MHFG9WD3OMGFALDO97OXKPRP3ZXS2R1TFQ6INRHRFHP1TUFAFZT27QPZ2EE' where id=17; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='UDT60KSPD9246V4VB66HWC7SODE7UKZFS4VLE775641EQ0HBNEKMWMMVU0H7NGS65RIETAR9T5TIWODQKJATR8G0G7KNYD7Y0KWEKTV9J5S7C6JHXHXI8I8IZ4Q14Z4580GEP1J7PWI8HQ34V1131HOTW5CEHDEVDXKMAYNO2HKT8P3B5RGM5P05UQQ5QQJ868THVSDCVLFKC9MMAYD8SBIYX1FLE9LFE9FKVSCAH8L29CF6BMN5IQOSJ64RMTAN2' where id=17; -update noar ti set v2='UDT60KSPD9246V4VB66HWC7SODE7UKZFS4VLE775641EQ0HBNEKMWMMVU0H7NGS65RIETAR9T5TIWODQKJATR8G0G7KNYD7Y0KWEKTV9J5S7C6JHXHXI8I8IZ4Q14Z4580GEP1J7PWI8HQ34V1131HOTW5CEHDEVDXKMAYNO2HKT8P3B5RGM5P05UQQ5QQJ868THVSDCVLFKC9MMAYD8SBIYX1FLE9LFE9FKVSCAH8L29CF6BMN5IQOSJ64RMTAN2' where id=17; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='W9P796ZQ6AZYXDJDMKFI4PO42JA995NAKF3NQZXT481A81R209I0XORUSBY2CS8E6SOKDAUAEXI4HFZX8F3J6CRF0B42BC0T4VEVXBODUIAIJD9AAHIFVK9O5OMHHUXI8F3EXX76ZF6ADK3MJY541V7PWJ03Q3JQWH15OVPGTQFRCPF887XSFE0XXW8HWIS6KFLPB3L0PEJYTGQ9OP71TGVGS8OY4DXX1M8Q56DK4NIMFQ46YAD3WLW6DACMGGNCZ' where id=17; -update noar ti set v3='W9P796ZQ6AZYXDJDMKFI4PO42JA995NAKF3NQZXT481A81R209I0XORUSBY2CS8E6SOKDAUAEXI4HFZX8F3J6CRF0B42BC0T4VEVXBODUIAIJD9AAHIFVK9O5OMHHUXI8F3EXX76ZF6ADK3MJY541V7PWJ03Q3JQWH15OVPGTQFRCPF887XSFE0XXW8HWIS6KFLPB3L0PEJYTGQ9OP71TGVGS8OY4DXX1M8Q56DK4NIMFQ46YAD3WLW6DACMGGNCZ' where id=17; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='J7NA8DDFOMJ87RW8GVVQ35RDBYYY9VT4PV3XELFE9T54QQFYL6JQ3SA4G3MH2S8F1EVX8JB3BS7BPCT3GAB24ZJ5JKSMVMVZ3OCP0KDBV1C6AQYES3JGKPOOQ5TQIIXYRY212G0L2QZL1PJQ4UTVYN6M6UNOUFIRY415ENKN7841SZBM2DWSUUU2N4LHAS3Q6FUOV1TO93U0P6N0P9X4PM1JWGX23BHKRO8DE6DF48I73F2JW9IMR05HOQCC27X3J' where id=18; -update noar ti set v0='J7NA8DDFOMJ87RW8GVVQ35RDBYYY9VT4PV3XELFE9T54QQFYL6JQ3SA4G3MH2S8F1EVX8JB3BS7BPCT3GAB24ZJ5JKSMVMVZ3OCP0KDBV1C6AQYES3JGKPOOQ5TQIIXYRY212G0L2QZL1PJQ4UTVYN6M6UNOUFIRY415ENKN7841SZBM2DWSUUU2N4LHAS3Q6FUOV1TO93U0P6N0P9X4PM1JWGX23BHKRO8DE6DF48I73F2JW9IMR05HOQCC27X3J' where id=18; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='MO3OA8KS7ED5CA3JOSSF68991H67ERM2W0GVLSRTX30ANIGYCZCRKV2HF8WNLJQ9T7JGL3NFP22LUVY0PKBKNSZM0R223E0QCREU2AS51EU5K9RB3QXY8AFQVDUJNFDNX3KKFK0HDWQC90I7M9NV41RKO9VIJ2XVYDLC9CIT5N63Y6D5JZ38VA4ADXZR4OA7LNI7O7HZ3CF4C0MQ3OTQTJIRNUWNXLQJOZ89S8JTC3O6WINFJXU41MVW0NKLF7S7L' where id=18; -update noar ti set v1='MO3OA8KS7ED5CA3JOSSF68991H67ERM2W0GVLSRTX30ANIGYCZCRKV2HF8WNLJQ9T7JGL3NFP22LUVY0PKBKNSZM0R223E0QCREU2AS51EU5K9RB3QXY8AFQVDUJNFDNX3KKFK0HDWQC90I7M9NV41RKO9VIJ2XVYDLC9CIT5N63Y6D5JZ38VA4ADXZR4OA7LNI7O7HZ3CF4C0MQ3OTQTJIRNUWNXLQJOZ89S8JTC3O6WINFJXU41MVW0NKLF7S7L' where id=18; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='KC7OAY1ZX24X7I78TFM797E9P0NGC4VUCDCRWG5ZU9DD6E0O901FB8EH2GRMUO15EZLFMDQPX6T43ODLSVNWE95TN4V5Q0DYAIRMZEUJK515F5NKAPN9WJB34BWKGUQ4QRX0U6EQMXTVK5DGFL0YGDT2JO1WIEIJZBBZQKRUBF8K1HPI2ODGQ95CLB4DNF4BLYLIBXUE9UWD6F0CDLLQ3U8CLKWO5IQPE9XBGU853LOUXPNLE57F0G84QIHGIA7RO' where id=18; -update noar ti set v2='KC7OAY1ZX24X7I78TFM797E9P0NGC4VUCDCRWG5ZU9DD6E0O901FB8EH2GRMUO15EZLFMDQPX6T43ODLSVNWE95TN4V5Q0DYAIRMZEUJK515F5NKAPN9WJB34BWKGUQ4QRX0U6EQMXTVK5DGFL0YGDT2JO1WIEIJZBBZQKRUBF8K1HPI2ODGQ95CLB4DNF4BLYLIBXUE9UWD6F0CDLLQ3U8CLKWO5IQPE9XBGU853LOUXPNLE57F0G84QIHGIA7RO' where id=18; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='EUJNGCYJ6PVHSKBAF8F990V4LS87E0USG55RIS0T3HXHAU5JVEJQ0HQ8BGJT1CT2MNW2WL96K8K26KOHOMCHAP8T9NH4MZXSHWW8ZMA7VNAJ46ZTFZ5PHUGZX1T4B7RAM66HSCHNQ1631RP2SDQC3WN72LDQYW9O7TJ4UJXDWWGEPX5XPQ5KQZP6KH7FIAL2C4WIGG16F4TND40PFX6TFK0JXPBNBQ6YY69C4PAXYMIPBZV3S7D7KYBC0047BDS4U' where id=18; -update noar ti set v3='EUJNGCYJ6PVHSKBAF8F990V4LS87E0USG55RIS0T3HXHAU5JVEJQ0HQ8BGJT1CT2MNW2WL96K8K26KOHOMCHAP8T9NH4MZXSHWW8ZMA7VNAJ46ZTFZ5PHUGZX1T4B7RAM66HSCHNQ1631RP2SDQC3WN72LDQYW9O7TJ4UJXDWWGEPX5XPQ5KQZP6KH7FIAL2C4WIGG16F4TND40PFX6TFK0JXPBNBQ6YY69C4PAXYMIPBZV3S7D7KYBC0047BDS4U' where id=18; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='P05IYRHSPYQZRFCOM1WVHVDCWFYHVN0DVJBLZ6JD3MEBA7416LIQX91OVGEG4BZK9DNE0EM3FEPQ7O3BDULAH86E2CYYAPKNP4CMZ24H0VV6QJQVHM2ED7W0CGWUCXH1R1UFN3ZZ9TAH9K5YLMNPVCU8IUPZ3E5GUWVH1XP5AFA00O4R0IW0W23AYAHTOQBLG96VGI815JWXKSICM6VYOVJZZC3HTCN5RG0XMX1YRQJR8EWIOEDK2N4W3J4G9PMJ3' where id=19; -update noar ti set v0='P05IYRHSPYQZRFCOM1WVHVDCWFYHVN0DVJBLZ6JD3MEBA7416LIQX91OVGEG4BZK9DNE0EM3FEPQ7O3BDULAH86E2CYYAPKNP4CMZ24H0VV6QJQVHM2ED7W0CGWUCXH1R1UFN3ZZ9TAH9K5YLMNPVCU8IUPZ3E5GUWVH1XP5AFA00O4R0IW0W23AYAHTOQBLG96VGI815JWXKSICM6VYOVJZZC3HTCN5RG0XMX1YRQJR8EWIOEDK2N4W3J4G9PMJ3' where id=19; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='05F4SCFZ9ROHGZRW53MRW2VH23UNYZXB4UO4O45OK9LVPWNWNFSUC9Q0L8Y7NAUJA8XN2WK5JL6DWSHP9563QB911OO190DHVGWWGI3DQZCP0E2Z1SHIE4YVYQG66D1GA74UQ579E9O3O64I6BC8G6DSNAMGBDZF0X5KS6XEK3V6M2XE3HL3D5PG9N1PRDFNKWDG7YG6EH9XEIW6OLGR6XFDDDPWFQ40Y04XQZ94P5VVECWZW99UYXM8O9C1G1WRD' where id=19; -update noar ti set v1='05F4SCFZ9ROHGZRW53MRW2VH23UNYZXB4UO4O45OK9LVPWNWNFSUC9Q0L8Y7NAUJA8XN2WK5JL6DWSHP9563QB911OO190DHVGWWGI3DQZCP0E2Z1SHIE4YVYQG66D1GA74UQ579E9O3O64I6BC8G6DSNAMGBDZF0X5KS6XEK3V6M2XE3HL3D5PG9N1PRDFNKWDG7YG6EH9XEIW6OLGR6XFDDDPWFQ40Y04XQZ94P5VVECWZW99UYXM8O9C1G1WRD' where id=19; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='6OIMVHGV4MQI6G7BFJS0WK553G7N1TU176FN6ERI6CEPNM59QAFE4XEODP1N0SS5CSQ71C97ACW3DJ0QJ9BBPETGS6K97IC0ZGQHB7G8O3EEW49NZLOB2KDYC8MU8ALC7W0E7H1WVLZDTK5M1TBFVEBRRV793921INLUP40D3GY70TFJ2FAT8NNRQZGEDJO1JE62JCBPO29P3S50SS4FHLNQMOBTF0QTTLY8D2FM2JL2AQYZSZM9UK9C8XWJLWYPL' where id=19; -update noar ti set v2='6OIMVHGV4MQI6G7BFJS0WK553G7N1TU176FN6ERI6CEPNM59QAFE4XEODP1N0SS5CSQ71C97ACW3DJ0QJ9BBPETGS6K97IC0ZGQHB7G8O3EEW49NZLOB2KDYC8MU8ALC7W0E7H1WVLZDTK5M1TBFVEBRRV793921INLUP40D3GY70TFJ2FAT8NNRQZGEDJO1JE62JCBPO29P3S50SS4FHLNQMOBTF0QTTLY8D2FM2JL2AQYZSZM9UK9C8XWJLWYPL' where id=19; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='34RDPZPFXV6K7SR2X6CIUMEJY8ZKI5RJ6AAF11FPO9KKDO2RRJGQN8SRUHA47WOS1CMP065FPKFB5A8O4N9ISAXWCZ9I2TMC641XP10SJYHMYTNMDSOUXKJOYJHHW3BR86TQ9A5BMD9ADK03EHMAXDU5FMK2XA8P5HGX7FYXMVL7NY3YDMA26HHQYHQLDH15AJHZWHNHT10Y83E763DOEVF8CVWPPTE9G9S9LZJCGU3T55M7MKI1PNULMTE1LZUSC' where id=19; -update noar ti set v3='34RDPZPFXV6K7SR2X6CIUMEJY8ZKI5RJ6AAF11FPO9KKDO2RRJGQN8SRUHA47WOS1CMP065FPKFB5A8O4N9ISAXWCZ9I2TMC641XP10SJYHMYTNMDSOUXKJOYJHHW3BR86TQ9A5BMD9ADK03EHMAXDU5FMK2XA8P5HGX7FYXMVL7NY3YDMA26HHQYHQLDH15AJHZWHNHT10Y83E763DOEVF8CVWPPTE9G9S9LZJCGU3T55M7MKI1PNULMTE1LZUSC' where id=19; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='R0JF5O8W9C6EFOULZRNJ66WBXRN7FPIS5JMPYK44SMTCOEDN18P2MNBEUSMIFOMDUR48RB5DUSODRO5U2JSWK16N8EEC96B8XGGI4I6KEAM3EQX6320BHVSQMN5EDUR1IVKEYV9Z8717H7X0HU6PE7VJ6WTK8S61VS84ZKJJVVIY2107SV84Y9KK64AVVQ0G56QZ5DEVLCBLQQCWIZD9Z59G6PH33285XCP9DLDNA5N7DR8CMQVEL7B9C8L3MFB0L' where id=20; -update noar ti set v0='R0JF5O8W9C6EFOULZRNJ66WBXRN7FPIS5JMPYK44SMTCOEDN18P2MNBEUSMIFOMDUR48RB5DUSODRO5U2JSWK16N8EEC96B8XGGI4I6KEAM3EQX6320BHVSQMN5EDUR1IVKEYV9Z8717H7X0HU6PE7VJ6WTK8S61VS84ZKJJVVIY2107SV84Y9KK64AVVQ0G56QZ5DEVLCBLQQCWIZD9Z59G6PH33285XCP9DLDNA5N7DR8CMQVEL7B9C8L3MFB0L' where id=20; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='VGMCHGSZZR6TX86S67VLOZAOANYQ6CBIISLDT2ZHYYQSHNCA14VET1TKCJC2AY71A6ZXQAM1B1Z269IWAORAOX0I0M3L9Q6RYK8M80UHY4SWQK11KBP63GIG3PP8OF9MCBQBZO6C32Z6LBTMLIIT0AUW8FTYWADEMEZDSIVTG3HWRR1X7HGYC3VVHGNKRH6YH9SJ9AZOSJB4LV59CMDN81T3R3770ONHRD5IZEY2A3PK04NJVSBMZI7NFN55C49ZJ' where id=20; -update noar ti set v1='VGMCHGSZZR6TX86S67VLOZAOANYQ6CBIISLDT2ZHYYQSHNCA14VET1TKCJC2AY71A6ZXQAM1B1Z269IWAORAOX0I0M3L9Q6RYK8M80UHY4SWQK11KBP63GIG3PP8OF9MCBQBZO6C32Z6LBTMLIIT0AUW8FTYWADEMEZDSIVTG3HWRR1X7HGYC3VVHGNKRH6YH9SJ9AZOSJB4LV59CMDN81T3R3770ONHRD5IZEY2A3PK04NJVSBMZI7NFN55C49ZJ' where id=20; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='84QXI3JETHU11TT5V9RYRZQQY74DOMWYF3HUY23HZZSHIS8AWTE82I53MR4E8K97HQXRAELLXOS2ODA1DDLP357IBFH01XX0SHZIYR6IOL2UUI39Z5FPOL8LBICXG9F8QXYLJY7QWB5YKK8PWQSNDG1ATEXYCKWP18J9R1I4CFE0R6US90USQUXI31O82SJYNAN809F8IQ6YREECUGPJG55SWVPKB4O9UW7RA2DYPJ73EKJG1D9Z7VL1ZCWN5GLYG' where id=20; -update noar ti set v2='84QXI3JETHU11TT5V9RYRZQQY74DOMWYF3HUY23HZZSHIS8AWTE82I53MR4E8K97HQXRAELLXOS2ODA1DDLP357IBFH01XX0SHZIYR6IOL2UUI39Z5FPOL8LBICXG9F8QXYLJY7QWB5YKK8PWQSNDG1ATEXYCKWP18J9R1I4CFE0R6US90USQUXI31O82SJYNAN809F8IQ6YREECUGPJG55SWVPKB4O9UW7RA2DYPJ73EKJG1D9Z7VL1ZCWN5GLYG' where id=20; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='CU9PRJ19A2XGY4PYIBILRCB8XY2WK7G5UEB2SBTS4AYUI33E6XGHSJ07HJMH77F1N30WQMXVPLV92BAWVJH12PMYXCOQCS44LBQ8EGVRO1NFRUNXILTCTEUU0WX0OMDK6LGYOASBU7OK9J99FVYFSPERHZDPB19V0NXWKZJ6XC6QBTAJP6XSXGAWJVNCGGQCL14XM4N5UICFCXITEL4GVJ8LVJ7Y9Y8ZZ4187Y3HNXGP81MAQZULP0LVKNOJR1JFF' where id=20; -update noar ti set v3='CU9PRJ19A2XGY4PYIBILRCB8XY2WK7G5UEB2SBTS4AYUI33E6XGHSJ07HJMH77F1N30WQMXVPLV92BAWVJH12PMYXCOQCS44LBQ8EGVRO1NFRUNXILTCTEUU0WX0OMDK6LGYOASBU7OK9J99FVYFSPERHZDPB19V0NXWKZJ6XC6QBTAJP6XSXGAWJVNCGGQCL14XM4N5UICFCXITEL4GVJ8LVJ7Y9Y8ZZ4187Y3HNXGP81MAQZULP0LVKNOJR1JFF' where id=20; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='8TRV4USLXJZ2Y042NRYC5M2IRQ5UUFC2YZFJBLPRDADRAFJSG0YQ1FD0ROSCMG4W79C3WUJC90MJGAI17PS6CWXO9Z433RGRYNKKH86VY47HLAWDIX8O6CNTDD4NSI8OKZJZZBNVREAR7JBNM9RP78AFKE88I2TFH7NROLSGLQA8Y0P2DH3NS1L8H4Q6FI8J8VMRGOJRUAC1ZA50CV11OZY7WFO34LN5AYTEMFOKXB2603P9KCXGMXOFU4ZBOHH83' where id=21; -update noar ti set v0='8TRV4USLXJZ2Y042NRYC5M2IRQ5UUFC2YZFJBLPRDADRAFJSG0YQ1FD0ROSCMG4W79C3WUJC90MJGAI17PS6CWXO9Z433RGRYNKKH86VY47HLAWDIX8O6CNTDD4NSI8OKZJZZBNVREAR7JBNM9RP78AFKE88I2TFH7NROLSGLQA8Y0P2DH3NS1L8H4Q6FI8J8VMRGOJRUAC1ZA50CV11OZY7WFO34LN5AYTEMFOKXB2603P9KCXGMXOFU4ZBOHH83' where id=21; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='RHGJ1VLS0T9N6BPSFGZXUQRM9RFGNFXTP8U3R3S7WCVTRWSB38MGUP09ZMNQGK8CQ2TUOM8L0ZMHB5IVRFWJZ1P7KC06LGGWUR4YE7HDUGNUNDZDG6ITPKBY171IJ0EP8AA68Y46AUOAM7CXCJA6QLJ8I7KLPCGT3QSCA2ORYPXTBHD4DJFR2AHE4DFUY6IOQE0BNR4KR6SL59CY0V64HERSJ0NFM80ZR4N1R9B6AP4XVHNMP02PQME78KP399ROC' where id=21; -update noar ti set v1='RHGJ1VLS0T9N6BPSFGZXUQRM9RFGNFXTP8U3R3S7WCVTRWSB38MGUP09ZMNQGK8CQ2TUOM8L0ZMHB5IVRFWJZ1P7KC06LGGWUR4YE7HDUGNUNDZDG6ITPKBY171IJ0EP8AA68Y46AUOAM7CXCJA6QLJ8I7KLPCGT3QSCA2ORYPXTBHD4DJFR2AHE4DFUY6IOQE0BNR4KR6SL59CY0V64HERSJ0NFM80ZR4N1R9B6AP4XVHNMP02PQME78KP399ROC' where id=21; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='BLGASJTXH1V5RT3L5OZXKPPHERZS0F36T88R8FSEUXVOMJY64LL2LWN10DBGW3C5PJ0C81EURUA3VSXLXN87PZXXC0LUME8AQUQ5E0G0T7U7LDO8X528607NSEXR85GWG32HFDB3M6UGPENTEIMNDR8TQGF9F9OKOVLLNZGCE8ITFFEYL5Q8SL74UM516P67424K4LQIL8NV9UE68DVA9WH8GBEODRN3NU9K367O6IS8EG6CE52G2J3AEID1WYK5Q' where id=21; -update noar ti set v2='BLGASJTXH1V5RT3L5OZXKPPHERZS0F36T88R8FSEUXVOMJY64LL2LWN10DBGW3C5PJ0C81EURUA3VSXLXN87PZXXC0LUME8AQUQ5E0G0T7U7LDO8X528607NSEXR85GWG32HFDB3M6UGPENTEIMNDR8TQGF9F9OKOVLLNZGCE8ITFFEYL5Q8SL74UM516P67424K4LQIL8NV9UE68DVA9WH8GBEODRN3NU9K367O6IS8EG6CE52G2J3AEID1WYK5Q' where id=21; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='LKMFI2U4UT5K195NK8VDDETYAXAAJPF2WRQTWAA4D5RSKKBW25UYC95ZDHZ5T34JHCDMS3P151G3S287F5XNL18ZH4WLZD4MCBRD2D0Q0V1M2ZYZHA7AX0PDGIS6DEO9QY7HF5UPAC3T7FULJY3YYWPMB7XUFWEU84K3599LEZKNC7USYYW5IMFJJLP39N24NQAA9ZEMTPFMYGKVU5HFM1VTMCIZ3ZOHUYVSKV1JY79DF8CDWS78NXY843NFEOJNM' where id=21; -update noar ti set v3='LKMFI2U4UT5K195NK8VDDETYAXAAJPF2WRQTWAA4D5RSKKBW25UYC95ZDHZ5T34JHCDMS3P151G3S287F5XNL18ZH4WLZD4MCBRD2D0Q0V1M2ZYZHA7AX0PDGIS6DEO9QY7HF5UPAC3T7FULJY3YYWPMB7XUFWEU84K3599LEZKNC7USYYW5IMFJJLP39N24NQAA9ZEMTPFMYGKVU5HFM1VTMCIZ3ZOHUYVSKV1JY79DF8CDWS78NXY843NFEOJNM' where id=21; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='49S6PQXZJXO1TSSOAXPB0W2Q33CXG4SC3U0F8DHD3SPOP06OKTMIAS9LM8LU8KZ69H47AAF9VHTM8G7YY1P2469WRFOXR0S56JM6W7QN41VQ5DFJDF3U3LAXIBPYG6QMO66WQ6KNS7HO9QX9QR9SMNLFP4KQHND021FT4A5DPW3EOZO8S9IPFLOP89WN0EOEFPFO9A3ZOYL4QZRUFUH5A6NUBF4KJZPE5FMGVX8WX1DREETUTZM6UEI8M0UY3BG8T' where id=22; -update noar ti set v0='49S6PQXZJXO1TSSOAXPB0W2Q33CXG4SC3U0F8DHD3SPOP06OKTMIAS9LM8LU8KZ69H47AAF9VHTM8G7YY1P2469WRFOXR0S56JM6W7QN41VQ5DFJDF3U3LAXIBPYG6QMO66WQ6KNS7HO9QX9QR9SMNLFP4KQHND021FT4A5DPW3EOZO8S9IPFLOP89WN0EOEFPFO9A3ZOYL4QZRUFUH5A6NUBF4KJZPE5FMGVX8WX1DREETUTZM6UEI8M0UY3BG8T' where id=22; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='VGGJ4R69QOCMZ2MVU1J5U19W0B4BF7KQYD3WY0GWWW1DXFB2B0NF4FOXQXPCU7G88XY8HP77X8WWINLH7TNWURMZ15YJI0KH2N47W6UYQPQX0A14NZQ2ROY44VGHQICCJ2VGVTE58UJPSMA4M3QJNH62MB02KC5C92Y3C1RQYAWQ3WSLMXB9SFU1MSX3RSDBA02ITJ86BWQZL6CB671QALA05PO7CIJFDOO1FEOSVSUW934XOT5TZYOCBK0WII9YT' where id=22; -update noar ti set v1='VGGJ4R69QOCMZ2MVU1J5U19W0B4BF7KQYD3WY0GWWW1DXFB2B0NF4FOXQXPCU7G88XY8HP77X8WWINLH7TNWURMZ15YJI0KH2N47W6UYQPQX0A14NZQ2ROY44VGHQICCJ2VGVTE58UJPSMA4M3QJNH62MB02KC5C92Y3C1RQYAWQ3WSLMXB9SFU1MSX3RSDBA02ITJ86BWQZL6CB671QALA05PO7CIJFDOO1FEOSVSUW934XOT5TZYOCBK0WII9YT' where id=22; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='AADJ962WUP6UOSLGT0E15CBFLGQSJGIYSE5OBENUKLH57P5P5VKV5KUYAHV6OH5QHDQFAP9VH47HFTH4QLBMG3D7GH550F0VQFOLDC61BS568152S1SIXZR8YFZNHROMQP76GODLNBDIS8PAW26HW0F1LVKW4T4IVG4P5N006LM8X15E02RX6KWDF3LCFTZLMTDD2V02QF44ZZ8G8EV2GDYMPYHPP56QB872RRRUQ2LHIKEBML5MTXJB070R8396Z' where id=22; -update noar ti set v2='AADJ962WUP6UOSLGT0E15CBFLGQSJGIYSE5OBENUKLH57P5P5VKV5KUYAHV6OH5QHDQFAP9VH47HFTH4QLBMG3D7GH550F0VQFOLDC61BS568152S1SIXZR8YFZNHROMQP76GODLNBDIS8PAW26HW0F1LVKW4T4IVG4P5N006LM8X15E02RX6KWDF3LCFTZLMTDD2V02QF44ZZ8G8EV2GDYMPYHPP56QB872RRRUQ2LHIKEBML5MTXJB070R8396Z' where id=22; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='17MVMQ8RCO0PFAYPKMXA1ZKCDLEW9HMR5TK0QGXCYW4C3I5U1HNUABCLUN0VSQ9FN7O5NRMEQAQW73FM46F9UO3QBX7IMWNQRWGWW5QEAB9AE07GIUE962FDO80TH571EZZBP7J81E5V8UNITPTRVFEMZRZT3G7M0918AW59N9HDQYANVI0TVX0G9YDDU4Q0FJYI3L2PXL9NJ84XH43L6NQY73WYLOXP9N0YC1Y9IVLPV9GWIR2MU0KKXDAIMEVQ5' where id=22; -update noar ti set v3='17MVMQ8RCO0PFAYPKMXA1ZKCDLEW9HMR5TK0QGXCYW4C3I5U1HNUABCLUN0VSQ9FN7O5NRMEQAQW73FM46F9UO3QBX7IMWNQRWGWW5QEAB9AE07GIUE962FDO80TH571EZZBP7J81E5V8UNITPTRVFEMZRZT3G7M0918AW59N9HDQYANVI0TVX0G9YDDU4Q0FJYI3L2PXL9NJ84XH43L6NQY73WYLOXP9N0YC1Y9IVLPV9GWIR2MU0KKXDAIMEVQ5' where id=22; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='6GYJ3TQ7GG360E76XG8CCE7M9UPY89FTLSWNJY8WDZOZ24IYJ2LUBT7BOW315Z04Y4XD04R0X5TLYWQZN246EUFXU44MVPHY3QLXFLMRCHLPUYOE3KQ3XO34X0YXP2Z2IPECO745VX710O72KES736RC8BQ91EWXEDV413H5C709WS068YEIWJTC6N15ZYLRVNJ4XB721ZBFS5AL985VYRQ6QYH0KKFIQTQQQXSH6YIWDYGIMZYMYMRWXAR5V9IZV' where id=23; -update noar ti set v0='6GYJ3TQ7GG360E76XG8CCE7M9UPY89FTLSWNJY8WDZOZ24IYJ2LUBT7BOW315Z04Y4XD04R0X5TLYWQZN246EUFXU44MVPHY3QLXFLMRCHLPUYOE3KQ3XO34X0YXP2Z2IPECO745VX710O72KES736RC8BQ91EWXEDV413H5C709WS068YEIWJTC6N15ZYLRVNJ4XB721ZBFS5AL985VYRQ6QYH0KKFIQTQQQXSH6YIWDYGIMZYMYMRWXAR5V9IZV' where id=23; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='CVJWYFWYSZL79KSZPCVR1JT9XO7WJ2HQ07Y4LMWO4UKY1IFDPY17O75AM7EZ0J2NDMU3RUY38I45EBLXCH5L7PKDJNASQC4DDVHN3RU1ZYHH7BMQAA2PH26X7EVS63K5BCQPR6JSR6MUYA2HDNNEU15FCQCE1JPHBW4596G06XRSKQR4AVANM0WYN15SYTXKNMHKO2ZSV78HBL2PYDI9GMNWZA19MNTXVX49HSA0AWXC7RL7R4GQS1V5B54255LK6' where id=23; -update noar ti set v1='CVJWYFWYSZL79KSZPCVR1JT9XO7WJ2HQ07Y4LMWO4UKY1IFDPY17O75AM7EZ0J2NDMU3RUY38I45EBLXCH5L7PKDJNASQC4DDVHN3RU1ZYHH7BMQAA2PH26X7EVS63K5BCQPR6JSR6MUYA2HDNNEU15FCQCE1JPHBW4596G06XRSKQR4AVANM0WYN15SYTXKNMHKO2ZSV78HBL2PYDI9GMNWZA19MNTXVX49HSA0AWXC7RL7R4GQS1V5B54255LK6' where id=23; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='6ZLJ1ORHQTCYPNWA5JJKNUUI1D2B1VSHAEBRA4B8ZBU4NRKJX24ZWECOHIOCIUOS9NCBQHT4BTSOEBDYSECXKLDR7THFZS35L1WQ7DQDDZZBIMB7PEZQQ27XXNDR0WYA3TT17KZV4IQ9JOIOVXHCYTQ2S6ZQ1GIWQ9JN5HQ8ULCTG9PZP490JAAVBVDSNKTDL4T1ROUSV4JIN90R1LW629Y73E60550M4P7ES2E8IU3ES058SGS34Z5AKG4MDUZ8O' where id=23; -update noar ti set v2='6ZLJ1ORHQTCYPNWA5JJKNUUI1D2B1VSHAEBRA4B8ZBU4NRKJX24ZWECOHIOCIUOS9NCBQHT4BTSOEBDYSECXKLDR7THFZS35L1WQ7DQDDZZBIMB7PEZQQ27XXNDR0WYA3TT17KZV4IQ9JOIOVXHCYTQ2S6ZQ1GIWQ9JN5HQ8ULCTG9PZP490JAAVBVDSNKTDL4T1ROUSV4JIN90R1LW629Y73E60550M4P7ES2E8IU3ES058SGS34Z5AKG4MDUZ8O' where id=23; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='POZ605KQ10GA7A7056U6F1UTKYGEEKS56VSLI9SVIAQW8AMGC7O0DNMUMTJDX3WE6B47I9EQB79XS5MGHXSZHMODMJG89XVVM210YK1WQMWNY1EYW95Z9LOV1Z1TPEF862IIYIB31KV5HF2A4BNOK02T4197ZL90DVB9XU8AYBHJCVOR7Y0HZOEZY0GUH5NSSJ7GG41PPW4M8ZMV0OKBPN51I2JBJWJK277IBCPLKVCJBN0CEHPZBQG06LOV831HJ' where id=23; -update noar ti set v3='POZ605KQ10GA7A7056U6F1UTKYGEEKS56VSLI9SVIAQW8AMGC7O0DNMUMTJDX3WE6B47I9EQB79XS5MGHXSZHMODMJG89XVVM210YK1WQMWNY1EYW95Z9LOV1Z1TPEF862IIYIB31KV5HF2A4BNOK02T4197ZL90DVB9XU8AYBHJCVOR7Y0HZOEZY0GUH5NSSJ7GG41PPW4M8ZMV0OKBPN51I2JBJWJK277IBCPLKVCJBN0CEHPZBQG06LOV831HJ' where id=23; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='3QUJA2NN8LQ8IUUQ6I94GGKVJC90EHLOFD6BADS49P1RBXIK1C4OEG86PVC82QNPIGM17GJD6TEMH57N5PMWIJTU1PZBE9PMESNRQMCG6K6TYJ0OPTQRP3Y6488GL168DMBII2FYURECXG5MQ2KM06D00JND1YMNFLG4I2QDHJKC8DFSS3WI3R01HXPK5ZA36V4T5CK3PBYPPKZPJBN8YFVQ2VWACYVKRTG1TZJV2J7006JL24LIBPEIDI0DDG3ZQ' where id=24; -update noar ti set v0='3QUJA2NN8LQ8IUUQ6I94GGKVJC90EHLOFD6BADS49P1RBXIK1C4OEG86PVC82QNPIGM17GJD6TEMH57N5PMWIJTU1PZBE9PMESNRQMCG6K6TYJ0OPTQRP3Y6488GL168DMBII2FYURECXG5MQ2KM06D00JND1YMNFLG4I2QDHJKC8DFSS3WI3R01HXPK5ZA36V4T5CK3PBYPPKZPJBN8YFVQ2VWACYVKRTG1TZJV2J7006JL24LIBPEIDI0DDG3ZQ' where id=24; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='MV6VYZX7XFAH09ONK2APDARSW4VU02XPQSZKOFK3SLQKLD7I6O32FTL8T2UC1AH059ZTDGY7SBCLMU4E88A25FH5I5UAEK62BDXLIDUW6SVFBI9RYTU330BT6YKJ4AZSKBE2AALD676ZANCQCD3628LXJUM9HDF96E9FC05WTYXGYPFTAMIJY9CZMSNPRIGI6Y1R8MTV0M6J9370U25YG3VF3LT27AVYEUPKBBCVUINFXTM9TL1YUO06KE0AG50U0' where id=24; -update noar ti set v1='MV6VYZX7XFAH09ONK2APDARSW4VU02XPQSZKOFK3SLQKLD7I6O32FTL8T2UC1AH059ZTDGY7SBCLMU4E88A25FH5I5UAEK62BDXLIDUW6SVFBI9RYTU330BT6YKJ4AZSKBE2AALD676ZANCQCD3628LXJUM9HDF96E9FC05WTYXGYPFTAMIJY9CZMSNPRIGI6Y1R8MTV0M6J9370U25YG3VF3LT27AVYEUPKBBCVUINFXTM9TL1YUO06KE0AG50U0' where id=24; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='QH1U8J2ANLNCTQYX7ZXTN2JZ2BM65HGXMXW1H5URGRSR1Y8V6ERUFKTG08HSM5GX8AW01BMJEPNO5GIJRXEGN2KY8PZVK4SF07VS0QOEA24W5RB9XUXUFBTHDGS21DU7WH70CKI8IG2MFR0VTXXVVVEX9GITV5D7U2Y99PF1ECE7RPKGFO0JMZFCTVEENFVG4UQEUYNE8BMVKPXP55U81KVGFQPN87LOJNZCA8KFWCEJ7LNP96UPE43NI3I6O5SM5' where id=24; -update noar ti set v2='QH1U8J2ANLNCTQYX7ZXTN2JZ2BM65HGXMXW1H5URGRSR1Y8V6ERUFKTG08HSM5GX8AW01BMJEPNO5GIJRXEGN2KY8PZVK4SF07VS0QOEA24W5RB9XUXUFBTHDGS21DU7WH70CKI8IG2MFR0VTXXVVVEX9GITV5D7U2Y99PF1ECE7RPKGFO0JMZFCTVEENFVG4UQEUYNE8BMVKPXP55U81KVGFQPN87LOJNZCA8KFWCEJ7LNP96UPE43NI3I6O5SM5' where id=24; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='ESWBWQFN08XQZPMYWEV4UFL0F3321YHBM3OOC1141L3RCP9O213EAY41PS2384FSLI7U0JKCJVNHXN1CCBHJXDDAACET0XILTGP2X4PF4WA5AK4P5XJH8HF74PP6N83WKCI67BO6Z08Q0VB2ZB0F3WYFJPCAMSTG9HDGYSSM0B42LDWQEY91ZMCREVLSLUKAB8PUHLCVNBN8YJFE8877XG8MNUXA7T193Q7OMYZD0OKMRT11SLTXKBRB8ML8B0Y8Z' where id=24; -update noar ti set v3='ESWBWQFN08XQZPMYWEV4UFL0F3321YHBM3OOC1141L3RCP9O213EAY41PS2384FSLI7U0JKCJVNHXN1CCBHJXDDAACET0XILTGP2X4PF4WA5AK4P5XJH8HF74PP6N83WKCI67BO6Z08Q0VB2ZB0F3WYFJPCAMSTG9HDGYSSM0B42LDWQEY91ZMCREVLSLUKAB8PUHLCVNBN8YJFE8877XG8MNUXA7T193Q7OMYZD0OKMRT11SLTXKBRB8ML8B0Y8Z' where id=24; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='81J30FMX1T09PIXYANJ2LXXOOXW8O9SP6ZZD9N18TAOMFTY0KLRVEDAHJQFKJGEMLQ1VF1UFBOKQW1PFIZ7D532UT9SQR0D8G125Z0YKVAMOBV679VPOCHA5D5MHXNZ1VKNH4Q2ERAVH4X13TVGBXAKZMU6GT50VYXBN6D649KBJ7MV11MOUWL7Y4H1N1M2KKVDQ0FFIXEWFEMSMNR0LGAVAYUSUAPRHA5VOMNX0I9JO3BT7ZTJFG0PH67S7P9QG5' where id=25; -update noar ti set v0='81J30FMX1T09PIXYANJ2LXXOOXW8O9SP6ZZD9N18TAOMFTY0KLRVEDAHJQFKJGEMLQ1VF1UFBOKQW1PFIZ7D532UT9SQR0D8G125Z0YKVAMOBV679VPOCHA5D5MHXNZ1VKNH4Q2ERAVH4X13TVGBXAKZMU6GT50VYXBN6D649KBJ7MV11MOUWL7Y4H1N1M2KKVDQ0FFIXEWFEMSMNR0LGAVAYUSUAPRHA5VOMNX0I9JO3BT7ZTJFG0PH67S7P9QG5' where id=25; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='3GT2T6AUI87IJ6XYTOPKBK5X574LWH9MQP9M6Q6IQNS5AVBH3SKEKQMD1K0KQ2B8YFVY5OH7RMN2S7XAN3QAL9SFOTSGO7B6A4SSKCLPHP96MQEQX3NKM876AJ52BO3LSUVB5VWDJ3PPPNVHRE9N7FFOSWTDNTEZQQLKQ0MH74MQTB1TBT77LBM3MAF1CDH6UC16OX4A2F891R4KYJ9CG6VADM38XHY5TGSAYW3LDGFTD9REG2J2P612U169RCE2Y' where id=25; -update noar ti set v1='3GT2T6AUI87IJ6XYTOPKBK5X574LWH9MQP9M6Q6IQNS5AVBH3SKEKQMD1K0KQ2B8YFVY5OH7RMN2S7XAN3QAL9SFOTSGO7B6A4SSKCLPHP96MQEQX3NKM876AJ52BO3LSUVB5VWDJ3PPPNVHRE9N7FFOSWTDNTEZQQLKQ0MH74MQTB1TBT77LBM3MAF1CDH6UC16OX4A2F891R4KYJ9CG6VADM38XHY5TGSAYW3LDGFTD9REG2J2P612U169RCE2Y' where id=25; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='XHJZRRUSIDVND93JGKWH3J1OS4F1N32WRKP74BTN9RZF2VWEAO2TBB4KNNE6AH3MHYMYFJO1E6Y3EUQBYL7BVYUWBQ0JZGNWMFVT4V3N1EQ8XPICM2970BMOAI0VDXODSAZOS4RLTPEEQ85GWYH7F9Y8DBOIYLPSVAMDW5QC22Q8U5TY91W2K3B8ITESTAGQ6INC6IPZ3PGYZH90LLM8RKU68EETU2Z3RFTA0YGSFFLZ8HQ5OTP5W4H2W9DTGEUN4' where id=25; -update noar ti set v2='XHJZRRUSIDVND93JGKWH3J1OS4F1N32WRKP74BTN9RZF2VWEAO2TBB4KNNE6AH3MHYMYFJO1E6Y3EUQBYL7BVYUWBQ0JZGNWMFVT4V3N1EQ8XPICM2970BMOAI0VDXODSAZOS4RLTPEEQ85GWYH7F9Y8DBOIYLPSVAMDW5QC22Q8U5TY91W2K3B8ITESTAGQ6INC6IPZ3PGYZH90LLM8RKU68EETU2Z3RFTA0YGSFFLZ8HQ5OTP5W4H2W9DTGEUN4' where id=25; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='0BBEXG0WRACW3QWPFZE5WBQE6YQZZRNKJVG8RIWSANUVX4I0ETMERYTF899OKN9CYKHTSBKPR9L6NGB57Z0VSSZGETFPULIT3C6BMZ045FYOI4TFTCF6WWSJ1LDZ2BAPR74SQSCC2PDM0ZXM4E8YVAV33H52L6ZD4JV0JY7SNAXVOC5R0BA4491SPA3H1AJREZV863VANHM2LYO0AW78SF0IG68SKW2NMFJAJXRS48PDORNSQ85N9TIAOS83NLSTQ' where id=25; -update noar ti set v3='0BBEXG0WRACW3QWPFZE5WBQE6YQZZRNKJVG8RIWSANUVX4I0ETMERYTF899OKN9CYKHTSBKPR9L6NGB57Z0VSSZGETFPULIT3C6BMZ045FYOI4TFTCF6WWSJ1LDZ2BAPR74SQSCC2PDM0ZXM4E8YVAV33H52L6ZD4JV0JY7SNAXVOC5R0BA4491SPA3H1AJREZV863VANHM2LYO0AW78SF0IG68SKW2NMFJAJXRS48PDORNSQ85N9TIAOS83NLSTQ' where id=25; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='AELV5TY2XKP26JTBTS5Z90TPMUT6233ONJXMFAPEDVEIF9RNC6TB9TRP0WLRUZJ0UZK9JU9EXML437K2WNF1P2EA8P4LD5VEG5TFF46RGTRPI5OI6V1POQF8UFEATKYL9W87IVH9YG1CCSWPG8JGIRBRQF0A04BG6RSCTNYDKRC4ZH5596V7EP8SKLC2F49JW04LVOS9J643EJ77X8NR8PWH3PMVGJ9D9JSSO5YIBFUY7C426CO0S12C04MS7LK96' where id=26; -update noar ti set v0='AELV5TY2XKP26JTBTS5Z90TPMUT6233ONJXMFAPEDVEIF9RNC6TB9TRP0WLRUZJ0UZK9JU9EXML437K2WNF1P2EA8P4LD5VEG5TFF46RGTRPI5OI6V1POQF8UFEATKYL9W87IVH9YG1CCSWPG8JGIRBRQF0A04BG6RSCTNYDKRC4ZH5596V7EP8SKLC2F49JW04LVOS9J643EJ77X8NR8PWH3PMVGJ9D9JSSO5YIBFUY7C426CO0S12C04MS7LK96' where id=26; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='52VDF6V2BHAIANC339MVMDK20XLMHFNTERDXCIZRTFGQS2TNL9F1F2MA7HN97RNKUH3EOAZ58ZUVCM1XW0TBBQO69ZEFM4T51RPYJ1F3S4QT1IZVWN4VPF0IHP7IBF0VSR6V11EBYZHDGRZQ589DJ4RMWQAO1A36PK4Q0A1W2MQ2RIAUP9H4J5T0TSPSQWTS8DOVV3EK920F8OOHUAPB9NOJVA0SF4JXJB8MX8605AAYB5E341041VMSZ9RC08YFN' where id=26; -update noar ti set v1='52VDF6V2BHAIANC339MVMDK20XLMHFNTERDXCIZRTFGQS2TNL9F1F2MA7HN97RNKUH3EOAZ58ZUVCM1XW0TBBQO69ZEFM4T51RPYJ1F3S4QT1IZVWN4VPF0IHP7IBF0VSR6V11EBYZHDGRZQ589DJ4RMWQAO1A36PK4Q0A1W2MQ2RIAUP9H4J5T0TSPSQWTS8DOVV3EK920F8OOHUAPB9NOJVA0SF4JXJB8MX8605AAYB5E341041VMSZ9RC08YFN' where id=26; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='JHKKDWD0I2ISHDQBJGISUS6ZYYVQF9HF0FWX24NSCU8E1K5VRH8WZRP5SY5XVCUZVXS9AUH8CWIIXVQ728T0W47HJ7KR3YVY69WSTHIHI9YML9NJZ88HB1J4ZE91CXNHEPMRMD9YYG69C1H6T87T3E8BCP13882XX8VEY2SSZR2C580VN4PL0F0DE726DALIC7I0G6N3520HMCSGMHUVJLAFNWQB5RP4NM593OD6GNM2C1PB1G6JMUBX3G87J19GS' where id=26; -update noar ti set v2='JHKKDWD0I2ISHDQBJGISUS6ZYYVQF9HF0FWX24NSCU8E1K5VRH8WZRP5SY5XVCUZVXS9AUH8CWIIXVQ728T0W47HJ7KR3YVY69WSTHIHI9YML9NJZ88HB1J4ZE91CXNHEPMRMD9YYG69C1H6T87T3E8BCP13882XX8VEY2SSZR2C580VN4PL0F0DE726DALIC7I0G6N3520HMCSGMHUVJLAFNWQB5RP4NM593OD6GNM2C1PB1G6JMUBX3G87J19GS' where id=26; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='R3R8U0P7ULLNNJRKJXZEB4QA5D5DGNCQSQ98JEY8PAZS15C2SPO7RWNXIPCWXG3OWFVAMJ8AXMX5HLH4DXX6M2884DSC99RCV501FC96VBYCA6JWNH9CMYQGNTI5GM3HNEU1OTT18SI03XOX6AELE98UKUFD8J0967FPN3NLIENEEKLQKH1KUXQOY20EZNXE8T2LPQ6XIYQPYRD6L29YDMRSLVWLB39WXLBT4ZV8G1IQQD4PAHYBZHIQH07C1XJ1Z' where id=26; -update noar ti set v3='R3R8U0P7ULLNNJRKJXZEB4QA5D5DGNCQSQ98JEY8PAZS15C2SPO7RWNXIPCWXG3OWFVAMJ8AXMX5HLH4DXX6M2884DSC99RCV501FC96VBYCA6JWNH9CMYQGNTI5GM3HNEU1OTT18SI03XOX6AELE98UKUFD8J0967FPN3NLIENEEKLQKH1KUXQOY20EZNXE8T2LPQ6XIYQPYRD6L29YDMRSLVWLB39WXLBT4ZV8G1IQQD4PAHYBZHIQH07C1XJ1Z' where id=26; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='14SQ6M9B8T18XUN95SQCSS0L8VTKEJD4EBEN4WXSQRMGIUHR0TTHQ9CB0DT5NVH2F1J2OJHL98DAL3UUCUSW80GYGEOB0JMO8F285KBSW4GTM6ZV45NAS4QXSQZFMGM44W964474CBUMYUXMZ4X2279XZ0VKUS6JQUHUDG2OWOLS4SE94W3ES4B180HRU7TG5FQEHEP7RYXGETB4LY37PEM7B4BPTQA9V8H1E4PPLYSROWVBTROMBFQWYKBL6LWU4' where id=27; -update noar ti set v0='14SQ6M9B8T18XUN95SQCSS0L8VTKEJD4EBEN4WXSQRMGIUHR0TTHQ9CB0DT5NVH2F1J2OJHL98DAL3UUCUSW80GYGEOB0JMO8F285KBSW4GTM6ZV45NAS4QXSQZFMGM44W964474CBUMYUXMZ4X2279XZ0VKUS6JQUHUDG2OWOLS4SE94W3ES4B180HRU7TG5FQEHEP7RYXGETB4LY37PEM7B4BPTQA9V8H1E4PPLYSROWVBTROMBFQWYKBL6LWU4' where id=27; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='LTIKKUJMOU0JBSS9UD2N9D9ZVPFQD7A4F970DAV5D6T0VODSM7KSC4NS1X0YGSC7C504M66U8K4LMI5DDMCEI13YKFF2D23CQ7HAB9SFOKX2AW365WD3OW6Y9C3N2SMXTXVCMZWONGWICWYZ3YCK53MT5WYXKIOJCQLM1OVMP9VFUM7BOUUMEV4XX00FZ5N9GKGYA0TDM9M11ELCP22NCS37JGPBPXBWCDBGJL6IWHO8OLOZZ0MKS57RGEZNHOSGH' where id=27; -update noar ti set v1='LTIKKUJMOU0JBSS9UD2N9D9ZVPFQD7A4F970DAV5D6T0VODSM7KSC4NS1X0YGSC7C504M66U8K4LMI5DDMCEI13YKFF2D23CQ7HAB9SFOKX2AW365WD3OW6Y9C3N2SMXTXVCMZWONGWICWYZ3YCK53MT5WYXKIOJCQLM1OVMP9VFUM7BOUUMEV4XX00FZ5N9GKGYA0TDM9M11ELCP22NCS37JGPBPXBWCDBGJL6IWHO8OLOZZ0MKS57RGEZNHOSGH' where id=27; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='TLTNGXA7OUAJ0SGKV9PH4XTC118MCP2KESLQX77H47ICR16D70O0O2PS2P5FUP0U8Q0MTU9NKZZ8WAJA1A1JURF3JDKJZ5GOCLAJTLJG1RHYOJ86II4NQKJCZYCWWSPOFR1NEMLHJE3D664AI6VUYQ1OVKZ2EJ3GCSEUC8DUZI5GXRJY3E3SH4278V4ME0M2R9PD6VT8J7V5R5VH003LE7H8L5WORVHSG1788B928PMOUZR6SY0UYG3S3ZVYMHG2N' where id=27; -update noar ti set v2='TLTNGXA7OUAJ0SGKV9PH4XTC118MCP2KESLQX77H47ICR16D70O0O2PS2P5FUP0U8Q0MTU9NKZZ8WAJA1A1JURF3JDKJZ5GOCLAJTLJG1RHYOJ86II4NQKJCZYCWWSPOFR1NEMLHJE3D664AI6VUYQ1OVKZ2EJ3GCSEUC8DUZI5GXRJY3E3SH4278V4ME0M2R9PD6VT8J7V5R5VH003LE7H8L5WORVHSG1788B928PMOUZR6SY0UYG3S3ZVYMHG2N' where id=27; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='QC1MK2XJPJ4H86T1OSJ9P8PEI41QXDOVW6F46W2V6QR5FMG500S4GM73J3TVOHSDCZHQ9DJLI975BX8YQAKLIQNKKSWWLXVWN54WLADWY7W7BYR2MUBGMFK3RZH68EANDBEYE7YFJ6VVUR7NBCNQNDGCGNR9MEU8467U9BRR2UAKQJK1TTVWHBDEMJSGWR7G5G2H87GWNKKZB51IFV9E5TN3QS96QY1QM0RQODGZHTEEL7SKE1APD510AUCQ85KCB' where id=27; -update noar ti set v3='QC1MK2XJPJ4H86T1OSJ9P8PEI41QXDOVW6F46W2V6QR5FMG500S4GM73J3TVOHSDCZHQ9DJLI975BX8YQAKLIQNKKSWWLXVWN54WLADWY7W7BYR2MUBGMFK3RZH68EANDBEYE7YFJ6VVUR7NBCNQNDGCGNR9MEU8467U9BRR2UAKQJK1TTVWHBDEMJSGWR7G5G2H87GWNKKZB51IFV9E5TN3QS96QY1QM0RQODGZHTEEL7SKE1APD510AUCQ85KCB' where id=27; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='BM9UY69WUYPP2FSIR7DAD8M18G0V1WCLXZQ9YF3Z4AT9G02AO4P5ZJU3LOIDZ2IJY9X6ZND8SIJK258GSTKUUCD0MP29BIR3ZH2Z15YHQDAP914MU0CHY96XM3QHA61C6AJEFJOS19BP57ZYIZZNGHZ6231N4Q30F9NZDRLWMQNNH2XQNX2EU4VMIJ70QPUB5322OMBYHYT8H11095IICUI6XD1D9GDAEZO2H15DCI8TXL7HVCITTDCTVU1UMENZX' where id=28; -update noar ti set v0='BM9UY69WUYPP2FSIR7DAD8M18G0V1WCLXZQ9YF3Z4AT9G02AO4P5ZJU3LOIDZ2IJY9X6ZND8SIJK258GSTKUUCD0MP29BIR3ZH2Z15YHQDAP914MU0CHY96XM3QHA61C6AJEFJOS19BP57ZYIZZNGHZ6231N4Q30F9NZDRLWMQNNH2XQNX2EU4VMIJ70QPUB5322OMBYHYT8H11095IICUI6XD1D9GDAEZO2H15DCI8TXL7HVCITTDCTVU1UMENZX' where id=28; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='5OKWR34LOOG9BEAJU34OQHKU0M3IDR1OUKRTJPFJHFUH5KFQZMO1SNEY2UTH8HYMYP8UCC6H9I41H267VA098KKFA24G1IFGW7QCFKL7O33L4H2FO7EXA4L9V3DU79FNMG5TZMQ19DYNBJNIZ1MEUZQG2DLITIMRFTG1PIQPOWXGRUMESUTEZRN7WTLYM7BTD8MEJ2DOJZKPAWL80GS0RPWY0CVRAQR7WLAB7D256N414WXF3RK7HT3PEBQGY3DB8' where id=28; -update noar ti set v1='5OKWR34LOOG9BEAJU34OQHKU0M3IDR1OUKRTJPFJHFUH5KFQZMO1SNEY2UTH8HYMYP8UCC6H9I41H267VA098KKFA24G1IFGW7QCFKL7O33L4H2FO7EXA4L9V3DU79FNMG5TZMQ19DYNBJNIZ1MEUZQG2DLITIMRFTG1PIQPOWXGRUMESUTEZRN7WTLYM7BTD8MEJ2DOJZKPAWL80GS0RPWY0CVRAQR7WLAB7D256N414WXF3RK7HT3PEBQGY3DB8' where id=28; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='YUN0QFB9UB4C76P409QXBBVIX77MYH425FL4S3VZNPRJREJZ8V9B3SKLAWONL84HZKF4T4S9SRJKMGYNPHHEJ27C5SXCDTJ2S23DRB7O0NNJUO5ZIRKTZZASME1KYCNGKUP4LNKKWZ2XWE3U990RCDJ91D61WCX5E9TAH6OGSMK9AYALFSE3BFSHY7LFHGYOUZQJFNNX3DGX8N7CXSLU3XC7RIZCTLVMQDDTJYJGF08RNASW1KQI1EBOENNRMPNBR' where id=28; -update noar ti set v2='YUN0QFB9UB4C76P409QXBBVIX77MYH425FL4S3VZNPRJREJZ8V9B3SKLAWONL84HZKF4T4S9SRJKMGYNPHHEJ27C5SXCDTJ2S23DRB7O0NNJUO5ZIRKTZZASME1KYCNGKUP4LNKKWZ2XWE3U990RCDJ91D61WCX5E9TAH6OGSMK9AYALFSE3BFSHY7LFHGYOUZQJFNNX3DGX8N7CXSLU3XC7RIZCTLVMQDDTJYJGF08RNASW1KQI1EBOENNRMPNBR' where id=28; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='FQGWZ0W7ZCBJO3PP2GAT5IU7TEDZ77EJVP0AAPNR3WYQNAQUCANIC4FO0ALR91KWYVQY9FFKPU4WVLRCFW6DAS4UUF49ESB3WLJ2OCFI36BMXDUPJJQ4P7XPLR6DUZ8KL95990QJHPXTQU19TYV7XAKR48GMD58995CP1G4PTNDUHSIJFG3EGO1EXC24BAYOMDYCNN9AMH7EXYTESS5DMTP3JHXMUEISK7VNDRBPKZYFN67WJ2KE3TDSKF6BA7BQU' where id=28; -update noar ti set v3='FQGWZ0W7ZCBJO3PP2GAT5IU7TEDZ77EJVP0AAPNR3WYQNAQUCANIC4FO0ALR91KWYVQY9FFKPU4WVLRCFW6DAS4UUF49ESB3WLJ2OCFI36BMXDUPJJQ4P7XPLR6DUZ8KL95990QJHPXTQU19TYV7XAKR48GMD58995CP1G4PTNDUHSIJFG3EGO1EXC24BAYOMDYCNN9AMH7EXYTESS5DMTP3JHXMUEISK7VNDRBPKZYFN67WJ2KE3TDSKF6BA7BQU' where id=28; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='PR12EJBD6QG7FV4GNQ69DLY5XJX8EP8RDOR2PU9KCOKD7KHC9ENURHO3D96GI799B5ISM093XN0ROHOAKHNDRN6CFEAYXBFP00RFYJTRT6CCT2A7D15HBKMTWLVK5WAXH3KMRN3IT6LTK0ZORN9X4B2MU2N5MAPZJL2WL7L5KAECFL8I2LHNH836P6TW119IDQINDC7W4S603TSNGNRER47ATJ5Z7REEQII7B4EWMB3KX2TQ0QY8QZV591DT447PH' where id=29; -update noar ti set v0='PR12EJBD6QG7FV4GNQ69DLY5XJX8EP8RDOR2PU9KCOKD7KHC9ENURHO3D96GI799B5ISM093XN0ROHOAKHNDRN6CFEAYXBFP00RFYJTRT6CCT2A7D15HBKMTWLVK5WAXH3KMRN3IT6LTK0ZORN9X4B2MU2N5MAPZJL2WL7L5KAECFL8I2LHNH836P6TW119IDQINDC7W4S603TSNGNRER47ATJ5Z7REEQII7B4EWMB3KX2TQ0QY8QZV591DT447PH' where id=29; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='E3Z9UQF3FBTD08OF9XZJT4U4JCY6G6U5BH9GHBXVMSZYQWBFJS20Y2VI18QTHQXQWKJN78QZ6ID6B21RO5A6EE9ZCIW3430TOHALN2MTGBJNNB6909R1UXM2CZ7VSN7P3WVSA2J78TILHTC8DFGSLJ7GNCX266C2VVDE7NSPSW335FXRO95J8P697GYK6976YKWBIEZYTH7WE8FOVCHNDDM8CN7IZ6TVTTA0B55V9B56KT3DH9FOHAYYPOZX99CCE' where id=29; -update noar ti set v1='E3Z9UQF3FBTD08OF9XZJT4U4JCY6G6U5BH9GHBXVMSZYQWBFJS20Y2VI18QTHQXQWKJN78QZ6ID6B21RO5A6EE9ZCIW3430TOHALN2MTGBJNNB6909R1UXM2CZ7VSN7P3WVSA2J78TILHTC8DFGSLJ7GNCX266C2VVDE7NSPSW335FXRO95J8P697GYK6976YKWBIEZYTH7WE8FOVCHNDDM8CN7IZ6TVTTA0B55V9B56KT3DH9FOHAYYPOZX99CCE' where id=29; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='E1IZ53SPMWVTHH356XGEFAOKNMJ6RNSLPJVEEF738LOQW3T2GJOREJPDFDM9WCZ5JM1ZD1VEU5MYDOCN09H5PXDAX140GL4C1CYM9WI51BP7PPXXTMBWSR2BWL3MKJ9GUMUEU44LECULA7AYBPOIO0F1GQQLS4CMKBXE6LI1EYRQ23357K1GV7DG2QR9UYJI44DSWDXHUS8322WO9R1OBBU4U3DF11GGGAFOE2YOLUC1SB7UZUAS8FLEXXY633DX6' where id=29; -update noar ti set v2='E1IZ53SPMWVTHH356XGEFAOKNMJ6RNSLPJVEEF738LOQW3T2GJOREJPDFDM9WCZ5JM1ZD1VEU5MYDOCN09H5PXDAX140GL4C1CYM9WI51BP7PPXXTMBWSR2BWL3MKJ9GUMUEU44LECULA7AYBPOIO0F1GQQLS4CMKBXE6LI1EYRQ23357K1GV7DG2QR9UYJI44DSWDXHUS8322WO9R1OBBU4U3DF11GGGAFOE2YOLUC1SB7UZUAS8FLEXXY633DX6' where id=29; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='EHYOUSMDAJA6HFP3RN7FWVK2JHW1J3CGDG32QD93SA6BWZ3RB8YGX825H8H7KJRG7TBI2HEZV8ZV3XO9P2YFJ6R3CG1RZPWA01U2EFERK62KM6I43GFDYVTRHD59NPC1YGP1KW5EMI0J8MRQNHHUI1FBKK15YJPJR2TO16NZZGDHCI1IYE0XXDDSM52OYV9T69XBB4W8RTRDZS7KWH3YNB2R5JSKHF17EZNTY8P5OBB96T55NYHZKEE77484IB4FS' where id=29; -update noar ti set v3='EHYOUSMDAJA6HFP3RN7FWVK2JHW1J3CGDG32QD93SA6BWZ3RB8YGX825H8H7KJRG7TBI2HEZV8ZV3XO9P2YFJ6R3CG1RZPWA01U2EFERK62KM6I43GFDYVTRHD59NPC1YGP1KW5EMI0J8MRQNHHUI1FBKK15YJPJR2TO16NZZGDHCI1IYE0XXDDSM52OYV9T69XBB4W8RTRDZS7KWH3YNB2R5JSKHF17EZNTY8P5OBB96T55NYHZKEE77484IB4FS' where id=29; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='A8SOCOKOXSANBDWQVMJ4ERXE4CSFKV8D4B0KSAER0API3SJ6G6FQ8VXGFPNVOQ4OU0K2FT1Z78WK3SBTELGT7PLCJ8JE0KAVUWFXGHNMOTQQXB5GEYT0UJLFRR201TLROF3VZPSJ63N4KXSC5UWSXLLMNRBFQ78XVIXKQKFQ9QBUQV3RNUOVR9DPETTM88OZBWWW3NDSWVATQRYTFGNMEEQOO4NS8ZQ484PMLD0YUG2ENQP6M12TX11V5O8S6BEAW' where id=30; -update noar ti set v0='A8SOCOKOXSANBDWQVMJ4ERXE4CSFKV8D4B0KSAER0API3SJ6G6FQ8VXGFPNVOQ4OU0K2FT1Z78WK3SBTELGT7PLCJ8JE0KAVUWFXGHNMOTQQXB5GEYT0UJLFRR201TLROF3VZPSJ63N4KXSC5UWSXLLMNRBFQ78XVIXKQKFQ9QBUQV3RNUOVR9DPETTM88OZBWWW3NDSWVATQRYTFGNMEEQOO4NS8ZQ484PMLD0YUG2ENQP6M12TX11V5O8S6BEAW' where id=30; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='UZCU1TSDNZB5Z6R0JR916UOWDGK9OBCPA8R5XYYGXZIYRC36JF07CBNRIWYZJ4J0P695TY731DFUAIW10AHHBIOWKVET3MA1XDQUMH2AESGI7XKSYQN0802I4A9YIL7BBBGBO0RAGC5GXVOAGATVP93AFPHHWZZGKKCD1KUJ0SI158PQGZ4YA8814TS951ONGJ1FCVM7U7UII13SNCWD3QE7FAOU6G7XDFTCHAR9E5HFZNLY2V09YSLX9Y2ZB1BNS' where id=30; -update noar ti set v1='UZCU1TSDNZB5Z6R0JR916UOWDGK9OBCPA8R5XYYGXZIYRC36JF07CBNRIWYZJ4J0P695TY731DFUAIW10AHHBIOWKVET3MA1XDQUMH2AESGI7XKSYQN0802I4A9YIL7BBBGBO0RAGC5GXVOAGATVP93AFPHHWZZGKKCD1KUJ0SI158PQGZ4YA8814TS951ONGJ1FCVM7U7UII13SNCWD3QE7FAOU6G7XDFTCHAR9E5HFZNLY2V09YSLX9Y2ZB1BNS' where id=30; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='UQO8AFUSLDZKCMQAPRTEFZ3T20WLELNA0A8ALYCM52A0KWNDOAJYGNK35C6F3ZJMBLGU4ZYT0GTUHPXWT1GPCW26DQWIX4S4DS7HXKYKCLF86EAGWQCW37D3R7LZ8CLNNHW8TUU4Y028EVN93RIQGNNW9L21XX9WAHSZEWLFAMPMZXM1VI4VR7WTB8R0XOIBLZH0GFFNYF86R8CTD2H3NUGNUMKYT7ZR9QC22ZYIY9EBU9E7XDTFQI6SM6N6AY6Q0' where id=30; -update noar ti set v2='UQO8AFUSLDZKCMQAPRTEFZ3T20WLELNA0A8ALYCM52A0KWNDOAJYGNK35C6F3ZJMBLGU4ZYT0GTUHPXWT1GPCW26DQWIX4S4DS7HXKYKCLF86EAGWQCW37D3R7LZ8CLNNHW8TUU4Y028EVN93RIQGNNW9L21XX9WAHSZEWLFAMPMZXM1VI4VR7WTB8R0XOIBLZH0GFFNYF86R8CTD2H3NUGNUMKYT7ZR9QC22ZYIY9EBU9E7XDTFQI6SM6N6AY6Q0' where id=30; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='O8VP1VV8KFCC1VDBP96SC07ONPBV43RU9A939XNP18AYPKN1O7V8088VK70P3Y4TLGKNKQERUYQE2CI0RJSSNDCPIEC08GKNDOB7VEWSK5RJHNR6YPV800DXIZV9BBY0VOCQE30AHN6ZKQVW52AORWHEOHTSSHZN3MJAZZZ7MQKROJJ7SC0GP5WEBJ4CH882EWE8XWCT4UWNUCDENGOB56QXLOX9XMNBH35INO016TNCO0V2W9K39CWDDZ860MXQ2' where id=30; -update noar ti set v3='O8VP1VV8KFCC1VDBP96SC07ONPBV43RU9A939XNP18AYPKN1O7V8088VK70P3Y4TLGKNKQERUYQE2CI0RJSSNDCPIEC08GKNDOB7VEWSK5RJHNR6YPV800DXIZV9BBY0VOCQE30AHN6ZKQVW52AORWHEOHTSSHZN3MJAZZZ7MQKROJJ7SC0GP5WEBJ4CH882EWE8XWCT4UWNUCDENGOB56QXLOX9XMNBH35INO016TNCO0V2W9K39CWDDZ860MXQ2' where id=30; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='IB0Z7TPVX8Q2TA32KC6S89FE2VEB82FGEJ8L67EI5ZRRE0G0H0G3PBYJI8E2H8NSDNCU2UNY8MRM8WOY5KOU6VTN5G5O2ZPK6Z9OSD5DZ44HWJJN2AQ0VOEA21LMJ71FMI0DQ17JSTU15MUFW5N5TY5LLI6FWX8HF4W5BNO8Z5ULNGJPO18XMCIQD7Z0ROA926YQ9BLTSCICLNGIXFA7FKSTDQIVFPEY9MGFZGRRJOG26IEFFS6SGD0P4DWV1NFY9' where id=31; -update noar ti set v0='IB0Z7TPVX8Q2TA32KC6S89FE2VEB82FGEJ8L67EI5ZRRE0G0H0G3PBYJI8E2H8NSDNCU2UNY8MRM8WOY5KOU6VTN5G5O2ZPK6Z9OSD5DZ44HWJJN2AQ0VOEA21LMJ71FMI0DQ17JSTU15MUFW5N5TY5LLI6FWX8HF4W5BNO8Z5ULNGJPO18XMCIQD7Z0ROA926YQ9BLTSCICLNGIXFA7FKSTDQIVFPEY9MGFZGRRJOG26IEFFS6SGD0P4DWV1NFY9' where id=31; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='KA5048BUOODD90DRYV4B9EY1UVLK1FLT37YGK2ZCYB2CNIAFQYWPAZZE6PDZEWZX0UXYANT38QJS04Q6JWV7YOUFZIONH9EIEWTL6KPH20LQSG466782PVVEZ4LWY7U31DDNJ6AADVF38ZHC6026WNNUAMQB6HWH7K3LW6K830J6R7ZXEWWVMQRGP09Q3QSXTA62C5CFY604U8R24F0KZKS0B27LSLF5CZPSZMIXTNZE7QLEYJJ234TA6O331CEFK' where id=31; -update noar ti set v1='KA5048BUOODD90DRYV4B9EY1UVLK1FLT37YGK2ZCYB2CNIAFQYWPAZZE6PDZEWZX0UXYANT38QJS04Q6JWV7YOUFZIONH9EIEWTL6KPH20LQSG466782PVVEZ4LWY7U31DDNJ6AADVF38ZHC6026WNNUAMQB6HWH7K3LW6K830J6R7ZXEWWVMQRGP09Q3QSXTA62C5CFY604U8R24F0KZKS0B27LSLF5CZPSZMIXTNZE7QLEYJJ234TA6O331CEFK' where id=31; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='V3IWJA42H3WKWUY7RKSP5FP8NGIZD00CIAI5ZB1RMXAHROTKZPFNYAQM8JJIDFYBD5IOJM9A9JEZPWGHYRKWKBQWBT32EVV2IBHD6MYIYDC3VN36Y2JZ819U85MQDJWQL7UUKFR3MINVQKJA1P7NNJ3MX2D0DKGAOYYM4XGIEDJQG4MB8RMDVVEJMC6R5CQCR81TTL0NJG21ZSG0AKR097J5DAJYFJG8PGM00DISDZ1PXOIL0I1C7EDEFBCRVGBFU' where id=31; -update noar ti set v2='V3IWJA42H3WKWUY7RKSP5FP8NGIZD00CIAI5ZB1RMXAHROTKZPFNYAQM8JJIDFYBD5IOJM9A9JEZPWGHYRKWKBQWBT32EVV2IBHD6MYIYDC3VN36Y2JZ819U85MQDJWQL7UUKFR3MINVQKJA1P7NNJ3MX2D0DKGAOYYM4XGIEDJQG4MB8RMDVVEJMC6R5CQCR81TTL0NJG21ZSG0AKR097J5DAJYFJG8PGM00DISDZ1PXOIL0I1C7EDEFBCRVGBFU' where id=31; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='VWJAN93Y8M3HX5N6KGMQIBWU121BYJVUTM2T1X8YUYMHVWBV4LHCVLJEVZYIH0QR9O1LFY60QXM1YE7SWXW9C2J1MB9RYLG03BCLEI3ZVMJVFJDZ3A4Q7L85D5QQPBQXYI12P8NNRVQLLK4FH40RVF7WCGBP1NXU4O4NHLAWB1XJS4KBOQJZXVRL4RV62RY8R9YOQ0798CRGT06MNA6DICQTIMJLG20S78VMRR9MS0KSEU4XF0TPMM2204I91IDDR' where id=31; -update noar ti set v3='VWJAN93Y8M3HX5N6KGMQIBWU121BYJVUTM2T1X8YUYMHVWBV4LHCVLJEVZYIH0QR9O1LFY60QXM1YE7SWXW9C2J1MB9RYLG03BCLEI3ZVMJVFJDZ3A4Q7L85D5QQPBQXYI12P8NNRVQLLK4FH40RVF7WCGBP1NXU4O4NHLAWB1XJS4KBOQJZXVRL4RV62RY8R9YOQ0798CRGT06MNA6DICQTIMJLG20S78VMRR9MS0KSEU4XF0TPMM2204I91IDDR' where id=31; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='O3E5NHT1DJTJ6B1C8DTGNZUJYFHS1BVUQAN02YCRH10H6NP9PWAYUUC43MC3KE42Y5HUS1J1HIVUR5MS439C8KE3WHD26JRRU58M0L6OBMJXJNGTRM1TYWY0K6FO7BWLUUIXZ12140NIU8Z0MEZX6G8X7VXW5NMMA9R27DN1XFMD4858KY3A48LPTTLN36ZIT25K45T7XVT2VM8YIX53OIWXQVY0069ZKRU94YDM6UR2IH99IC7EX2QJ80W1S2SHK' where id=32; -update noar ti set v0='O3E5NHT1DJTJ6B1C8DTGNZUJYFHS1BVUQAN02YCRH10H6NP9PWAYUUC43MC3KE42Y5HUS1J1HIVUR5MS439C8KE3WHD26JRRU58M0L6OBMJXJNGTRM1TYWY0K6FO7BWLUUIXZ12140NIU8Z0MEZX6G8X7VXW5NMMA9R27DN1XFMD4858KY3A48LPTTLN36ZIT25K45T7XVT2VM8YIX53OIWXQVY0069ZKRU94YDM6UR2IH99IC7EX2QJ80W1S2SHK' where id=32; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='UCY7ZLOQWXX3W9GPJCOHKDO8R5I6E33JDIFY77KXR4HCZ05FUKHMU5GZ6OQI3EB48AUHV63TSP5XL80JB4BE7W62I85T28MK866TVT1583CPMS9Y6IEM2QJW8RD2837NFO8RR35DLP8OS4S88LP5U77ZM2XREJZG4AUAW7W99ZVTMBDVSKZYLNLZYIDBM6NHQ2N1TX8IJITKI8WAMVV3CTB0YB78U3ZRN8PKWMLCHVP2Z28NUVHBXHJJYD89IWF9H' where id=32; -update noar ti set v1='UCY7ZLOQWXX3W9GPJCOHKDO8R5I6E33JDIFY77KXR4HCZ05FUKHMU5GZ6OQI3EB48AUHV63TSP5XL80JB4BE7W62I85T28MK866TVT1583CPMS9Y6IEM2QJW8RD2837NFO8RR35DLP8OS4S88LP5U77ZM2XREJZG4AUAW7W99ZVTMBDVSKZYLNLZYIDBM6NHQ2N1TX8IJITKI8WAMVV3CTB0YB78U3ZRN8PKWMLCHVP2Z28NUVHBXHJJYD89IWF9H' where id=32; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='VQL8O3HNFP7N14ISQ326AEJ9I7KJD7LW9DPRZR5VO2SLON787MPB5DT2NFAMS3QQ3YMFDPUKZQKC6TWCNCVGE5SFI52XL20B06IFPE06ZJTXODN6WESAW92QR4KS9LG0D56832YRXS8F3CR78KXX699PXNY4V07M117NBBLCNCWH0R1MUILN88QK1K57DGF8XEOFYXKJNTZOQ4P7V4YZB4C62CNF7OD162RKR4RTADBISYLT2O5LNUS3R0M8DDJKF' where id=32; -update noar ti set v2='VQL8O3HNFP7N14ISQ326AEJ9I7KJD7LW9DPRZR5VO2SLON787MPB5DT2NFAMS3QQ3YMFDPUKZQKC6TWCNCVGE5SFI52XL20B06IFPE06ZJTXODN6WESAW92QR4KS9LG0D56832YRXS8F3CR78KXX699PXNY4V07M117NBBLCNCWH0R1MUILN88QK1K57DGF8XEOFYXKJNTZOQ4P7V4YZB4C62CNF7OD162RKR4RTADBISYLT2O5LNUS3R0M8DDJKF' where id=32; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='QOTFGZC3MKU8AAFZWBN07SE9DZOSFSO42NYUZIDKHEF596JTWJAHBQY1ZF6RXF5YOAT3HJM1C1NTG91A7J6SCKWK1G5OR2XKGUSK9OYFL5UXT1EJKYZP5BH7XEFBZ6M6RFS12FAE7OAVJF3OTY567ASC8DJB0SSWH4ULATMUUOO6MVZHPQFSKS4W201QY2S68DG18GJBT6ZJAC90I7IF2EDXYPXM1E0VMMYZJK9TM14VSU3ZJAFLAI2GGJPQQQJ11' where id=32; -update noar ti set v3='QOTFGZC3MKU8AAFZWBN07SE9DZOSFSO42NYUZIDKHEF596JTWJAHBQY1ZF6RXF5YOAT3HJM1C1NTG91A7J6SCKWK1G5OR2XKGUSK9OYFL5UXT1EJKYZP5BH7XEFBZ6M6RFS12FAE7OAVJF3OTY567ASC8DJB0SSWH4ULATMUUOO6MVZHPQFSKS4W201QY2S68DG18GJBT6ZJAC90I7IF2EDXYPXM1E0VMMYZJK9TM14VSU3ZJAFLAI2GGJPQQQJ11' where id=32; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='XD6GMOBPO8POPL6K4RJOJYZR7PNROL2RRAVVUMMSMCB0H3I7VNOJWFV5TG7KDMEJT5K636GTLAGSGDHA9006Z31I63I59ZQZABVFQR4HR4L3LSXF8S3IJ2OM5ZDFOM6SMEIPIFKITY9AIWRA7NMRD6GUD3V2HLDEZGU10PLPAIUGHTTE10WP6E895L3XE3JC0FAF2R42H7CJSMGWF3T0JYLT03PAR482MMFUF0HT0M90QU4ZVNTTW3K94BLDPN4W1' where id=33; -update noar ti set v0='XD6GMOBPO8POPL6K4RJOJYZR7PNROL2RRAVVUMMSMCB0H3I7VNOJWFV5TG7KDMEJT5K636GTLAGSGDHA9006Z31I63I59ZQZABVFQR4HR4L3LSXF8S3IJ2OM5ZDFOM6SMEIPIFKITY9AIWRA7NMRD6GUD3V2HLDEZGU10PLPAIUGHTTE10WP6E895L3XE3JC0FAF2R42H7CJSMGWF3T0JYLT03PAR482MMFUF0HT0M90QU4ZVNTTW3K94BLDPN4W1' where id=33; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='UHZ23YKNC4EAKAL7U3C84W0J5FHDMIMJB9CHK6NCMJ84LYO0OW201K68BSU7VTUVUW68HQ0MKRS2RCD36WNOT5I9HE4R2VUS4XJA546EJH0T8JNQ46SWCVY1AO0SAUNVP2ZIFLCUCR4Z4R8M4C7XS44H2WHDZQI7IYKLP430PN5DZT974CB4M6EU3YYUU26IZHQ4YQ7DZBADO2ETPG8V4843UK19H2SAMXGOFIWA4YL6QQ0D0TZ353M8M8APSDLF3' where id=33; -update noar ti set v1='UHZ23YKNC4EAKAL7U3C84W0J5FHDMIMJB9CHK6NCMJ84LYO0OW201K68BSU7VTUVUW68HQ0MKRS2RCD36WNOT5I9HE4R2VUS4XJA546EJH0T8JNQ46SWCVY1AO0SAUNVP2ZIFLCUCR4Z4R8M4C7XS44H2WHDZQI7IYKLP430PN5DZT974CB4M6EU3YYUU26IZHQ4YQ7DZBADO2ETPG8V4843UK19H2SAMXGOFIWA4YL6QQ0D0TZ353M8M8APSDLF3' where id=33; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='5NBNKIO5LYRW5QECL4ZT4W0R9I6GDM2F3819LR0GTWV0GPW652R6UHFOW2FTYVO3IPH1T5OVQ6K6AYM5KEW0O1PJVCNY0YQUY9A4NTHD4SDPKLFXSRO16MWCIZZ05WQO5TEV1TE826ZAW50WI4N2OWCBAMCD4MOAE879NNVSGB6I0HEPUHHG8U6HFSDODEU5GDHX1PFCS49H9H7N0KJOIJ23C3I61X1IVE5MJY5FNE9CHG3COKZF41Z7H61WFGT6F' where id=33; -update noar ti set v2='5NBNKIO5LYRW5QECL4ZT4W0R9I6GDM2F3819LR0GTWV0GPW652R6UHFOW2FTYVO3IPH1T5OVQ6K6AYM5KEW0O1PJVCNY0YQUY9A4NTHD4SDPKLFXSRO16MWCIZZ05WQO5TEV1TE826ZAW50WI4N2OWCBAMCD4MOAE879NNVSGB6I0HEPUHHG8U6HFSDODEU5GDHX1PFCS49H9H7N0KJOIJ23C3I61X1IVE5MJY5FNE9CHG3COKZF41Z7H61WFGT6F' where id=33; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='2Z7CL7TZ3WYE0KSGC84QVQTQ9HJRYIE4AFR6ZBIWC502095GO3NRTN8UUFOQEQNVMMYUYMWOANQ9SZC3086YQJEBAGRYCNLPTX5BYW8X35FP3QAJ9KLILM856Q7AESEZ1AYBMV75CQRO5OG4BRWB6MV76BSYTXQ7U9NFTK6G8O5HI1CPTCB80O26WHQ79N0BJZFBEET4EX5ID744V7RL08AFMT0FO7U1CCLX53RLD302BZ5TNJKBLFXGC1G60QX8B' where id=33; -update noar ti set v3='2Z7CL7TZ3WYE0KSGC84QVQTQ9HJRYIE4AFR6ZBIWC502095GO3NRTN8UUFOQEQNVMMYUYMWOANQ9SZC3086YQJEBAGRYCNLPTX5BYW8X35FP3QAJ9KLILM856Q7AESEZ1AYBMV75CQRO5OG4BRWB6MV76BSYTXQ7U9NFTK6G8O5HI1CPTCB80O26WHQ79N0BJZFBEET4EX5ID744V7RL08AFMT0FO7U1CCLX53RLD302BZ5TNJKBLFXGC1G60QX8B' where id=33; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='96BHOUVW5ZGEHU12H02DMDKYX2UD5J4V4QLW3IQY7G2S7ZG8O49N6C3KI0AGUJCMNA06KOC52SZIK4Z4EGGZHMX53HB5F1WMI832BOOI6R5JU8QC3TECJVZS6XX6H3BAVEIZQ5I410GTVDEZPVIL7MNLZ9QWWVMR28WNJDZGK29R9QWZ6FRH4S5MLJL8DS6MJ4UUALBCMF24EORNATDG3QT4EEIU9A3XTGWIMACMRL5KRUB1JD4QK6030AFB06ONC' where id=34; -update noar ti set v0='96BHOUVW5ZGEHU12H02DMDKYX2UD5J4V4QLW3IQY7G2S7ZG8O49N6C3KI0AGUJCMNA06KOC52SZIK4Z4EGGZHMX53HB5F1WMI832BOOI6R5JU8QC3TECJVZS6XX6H3BAVEIZQ5I410GTVDEZPVIL7MNLZ9QWWVMR28WNJDZGK29R9QWZ6FRH4S5MLJL8DS6MJ4UUALBCMF24EORNATDG3QT4EEIU9A3XTGWIMACMRL5KRUB1JD4QK6030AFB06ONC' where id=34; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='W6LX7F2N5U0D5T4F6L750TTUKYLFCYZGZCCQ7NPV6A4BOBD7TQDP0XIQSREZ1EED9PYWSY64QH183DXTBQRRTW0ARFXZS81QSFIN6O7UGFWVY1G5C748KW9GEPOEHK3CF9IMJHBSDRXBSL0A7KVOP822UKCYTQU51ADRQEPZRCVFP2S8RSUDWQ727VJ7P6IZF0R1G3PLA5EL0WOM4RZPVQ0RQM4H1IE8HC7KPBV4KL574X8X567G5GTOE5NT4KTWE' where id=34; -update noar ti set v1='W6LX7F2N5U0D5T4F6L750TTUKYLFCYZGZCCQ7NPV6A4BOBD7TQDP0XIQSREZ1EED9PYWSY64QH183DXTBQRRTW0ARFXZS81QSFIN6O7UGFWVY1G5C748KW9GEPOEHK3CF9IMJHBSDRXBSL0A7KVOP822UKCYTQU51ADRQEPZRCVFP2S8RSUDWQ727VJ7P6IZF0R1G3PLA5EL0WOM4RZPVQ0RQM4H1IE8HC7KPBV4KL574X8X567G5GTOE5NT4KTWE' where id=34; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='V21AICMQ729RR0PNVVIH4AWH525N5TOR7GTAEBZ6W7UDQ30B5IACD91YI5Y12DM4YF01PQNIMNB42W983NVRZWSLFEYAP2ESXJELLETUNXPB33KR9R78ZPAI8S9FABROTD8QKUHQ8PVTHDGYWA4KPVRCINQS42FALYX324VHUE7UASJVK99M5XMS70FKU8683I2JSFHDGTP8178TFZCRRD6XZO364EFSMEDF96U4EXEO5CV3OKKE2OUWI6QGPKB4Q' where id=34; -update noar ti set v2='V21AICMQ729RR0PNVVIH4AWH525N5TOR7GTAEBZ6W7UDQ30B5IACD91YI5Y12DM4YF01PQNIMNB42W983NVRZWSLFEYAP2ESXJELLETUNXPB33KR9R78ZPAI8S9FABROTD8QKUHQ8PVTHDGYWA4KPVRCINQS42FALYX324VHUE7UASJVK99M5XMS70FKU8683I2JSFHDGTP8178TFZCRRD6XZO364EFSMEDF96U4EXEO5CV3OKKE2OUWI6QGPKB4Q' where id=34; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='BNJRCA1JX2QYXRADCXY75J5AGEEIY4HNKQUU2T662TRZKS59SLE6M4RFI5IQCK2KBK9SG1MMB6VB61YVK1XGWB17OFI6FSFADXGRGHQDMJ74MDGSYS8ZAMES8E3F9V29PXF0BKOA7A6QDXBXEO43KWQELU6FMWC6XIXRICV3VM734PWT7AX8O8T533H8UYQUTBD8GTQPNZV9T1CHSQKA96ZUY8TFWY5NN6KF8N5ET50ATE0XRUVY6V0ETCE31YIP4' where id=34; -update noar ti set v3='BNJRCA1JX2QYXRADCXY75J5AGEEIY4HNKQUU2T662TRZKS59SLE6M4RFI5IQCK2KBK9SG1MMB6VB61YVK1XGWB17OFI6FSFADXGRGHQDMJ74MDGSYS8ZAMES8E3F9V29PXF0BKOA7A6QDXBXEO43KWQELU6FMWC6XIXRICV3VM734PWT7AX8O8T533H8UYQUTBD8GTQPNZV9T1CHSQKA96ZUY8TFWY5NN6KF8N5ET50ATE0XRUVY6V0ETCE31YIP4' where id=34; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='8KBV6X4UKRJDPYWYI63STCRG47D369Q2YK2TNX3DJNUBLP41BZOVMKGRY0LB4PN4SNZWBZWZBB7SB61S2SWY9WAZWF1OD2W8GBUDVC1AZQPDGWH2434AQBUSXW8TZ7R3YAH1IHGKLKH9O0P60KGGHLKJIBMSP3SXKCE95UEDB8DE7N1EKCFJRBO0D6SIZ87L5JYXTB0MV43LZCFM6VI9CHHS02KH9HK0EC32VIT6J1NFV5VR7TMPM0Z6P3RAP4EJ9' where id=35; -update noar ti set v0='8KBV6X4UKRJDPYWYI63STCRG47D369Q2YK2TNX3DJNUBLP41BZOVMKGRY0LB4PN4SNZWBZWZBB7SB61S2SWY9WAZWF1OD2W8GBUDVC1AZQPDGWH2434AQBUSXW8TZ7R3YAH1IHGKLKH9O0P60KGGHLKJIBMSP3SXKCE95UEDB8DE7N1EKCFJRBO0D6SIZ87L5JYXTB0MV43LZCFM6VI9CHHS02KH9HK0EC32VIT6J1NFV5VR7TMPM0Z6P3RAP4EJ9' where id=35; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='CHV4OBDGYWDKHDDPQLBGQD5PZXNBIGZNRVBPELV3051ROSAS9H2OTAB6FFW75WZN97BDTLWP34H79GMA6C4VWC4W6CLZIG3A44O28HZCK3ZGQR9INLXXUVJ4CZ82T4FFKCHW0TZ0QHDGMDHW6E93E08IIVAAJ5NR6ZZWHFGR93TTIGCSQYWRNLODTBM9MGA8X41POBIWSN38746BFKAK294VQZBCJ1JAUPUBVX1QJ7ZSEKKM9X2TAT6BOCB19WE1B' where id=35; -update noar ti set v1='CHV4OBDGYWDKHDDPQLBGQD5PZXNBIGZNRVBPELV3051ROSAS9H2OTAB6FFW75WZN97BDTLWP34H79GMA6C4VWC4W6CLZIG3A44O28HZCK3ZGQR9INLXXUVJ4CZ82T4FFKCHW0TZ0QHDGMDHW6E93E08IIVAAJ5NR6ZZWHFGR93TTIGCSQYWRNLODTBM9MGA8X41POBIWSN38746BFKAK294VQZBCJ1JAUPUBVX1QJ7ZSEKKM9X2TAT6BOCB19WE1B' where id=35; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='01AMHL7K1YHLRCBUJWGMEZW9NJXXRAWOQTX273P4302T2HLTT5MHT6WG40ABVIP57D8VWDT1N5CXGV5T4BIA2FKXS8LQ5OA9YZO5YQSGXEIT5T7NSBQKWV9TR8QUPBAXGL72LHBJLDWWAF3DXG7GRYOYLL2CS8J27YUGJUVOCCYWXE938Z5OU2CUMP7X2I7FD6AOCN8RRQCDN2MKPB3NWL1IJ23L7MIWQV9L29RB4M9EVQPC3NVZVX3W0TPRZSEYJ' where id=35; -update noar ti set v2='01AMHL7K1YHLRCBUJWGMEZW9NJXXRAWOQTX273P4302T2HLTT5MHT6WG40ABVIP57D8VWDT1N5CXGV5T4BIA2FKXS8LQ5OA9YZO5YQSGXEIT5T7NSBQKWV9TR8QUPBAXGL72LHBJLDWWAF3DXG7GRYOYLL2CS8J27YUGJUVOCCYWXE938Z5OU2CUMP7X2I7FD6AOCN8RRQCDN2MKPB3NWL1IJ23L7MIWQV9L29RB4M9EVQPC3NVZVX3W0TPRZSEYJ' where id=35; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='9IAYO057TG9GABJS7WL1S3UVCNSVA2IVRH5UARYW5CASEXPUY8ATGUQZ5X386RJA042NW6F49DBKKAWYV0MRZU1FMHIMFQOE8XWRJ8PKLLT0RFOYG9CYUJF0DSQOUJJ1R8FYT0OFGM4M0VXGPPA0X5896WTN30RNBDZQA9KMVH5KHXOVA117YMZVBMYFS7QADGJMX3L82WC5LHOSLGO3UQPYO50IANIJXHHZP86OMRVU0KZYVRGO31IZD71L1AR0U' where id=35; -update noar ti set v3='9IAYO057TG9GABJS7WL1S3UVCNSVA2IVRH5UARYW5CASEXPUY8ATGUQZ5X386RJA042NW6F49DBKKAWYV0MRZU1FMHIMFQOE8XWRJ8PKLLT0RFOYG9CYUJF0DSQOUJJ1R8FYT0OFGM4M0VXGPPA0X5896WTN30RNBDZQA9KMVH5KHXOVA117YMZVBMYFS7QADGJMX3L82WC5LHOSLGO3UQPYO50IANIJXHHZP86OMRVU0KZYVRGO31IZD71L1AR0U' where id=35; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='M0U4EX7P7N41957A3YUCSJ1DSPR3S2KOBYKWVB0Q8OZA60ASJ9VIFS2XWTT104DISKA44DDTDJAOBNILFRWZESNJ2NZN2L4MOMXMOE1MYN3PZ7I1IXZ0TDTMP6SCIVELPF2LPE4OOB0JEQH22FLITQMS3IJ3MRFZTQWSVY9I5Y2E4X13QZW97TCQWST2YL57T4VKHWB5ACN22G0VWT2VB1MZWNLRPCB9G6RFFY9WOEMWN109V7D73WT731ANVVXCR' where id=36; -update noar ti set v0='M0U4EX7P7N41957A3YUCSJ1DSPR3S2KOBYKWVB0Q8OZA60ASJ9VIFS2XWTT104DISKA44DDTDJAOBNILFRWZESNJ2NZN2L4MOMXMOE1MYN3PZ7I1IXZ0TDTMP6SCIVELPF2LPE4OOB0JEQH22FLITQMS3IJ3MRFZTQWSVY9I5Y2E4X13QZW97TCQWST2YL57T4VKHWB5ACN22G0VWT2VB1MZWNLRPCB9G6RFFY9WOEMWN109V7D73WT731ANVVXCR' where id=36; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='T9YOL0GZXKSCXLVTGCJEO3VXAPZF0LLO8MCIT9DC9W7TPC2WH7GI4NE8HUR10X48HGDJ059HRBJ7KSDIMD1FCBBA7QCP3DLWCBBATU6Z7L3447CBLR3A3SINSAX3FDGTO1DNGWLGQCHHPVI7LOCA8N8X8ESF7OXR1W82BI75OP5TPSO3Z7UZZXTQVWIY11EFJQYW1Z01T19R748BMW0R9WHL9DE9KR16SJ2MD6X1BFVUZJLBZ2QVARSEQAS7NB03D' where id=36; -update noar ti set v1='T9YOL0GZXKSCXLVTGCJEO3VXAPZF0LLO8MCIT9DC9W7TPC2WH7GI4NE8HUR10X48HGDJ059HRBJ7KSDIMD1FCBBA7QCP3DLWCBBATU6Z7L3447CBLR3A3SINSAX3FDGTO1DNGWLGQCHHPVI7LOCA8N8X8ESF7OXR1W82BI75OP5TPSO3Z7UZZXTQVWIY11EFJQYW1Z01T19R748BMW0R9WHL9DE9KR16SJ2MD6X1BFVUZJLBZ2QVARSEQAS7NB03D' where id=36; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='B1O2TZIWYV1B9W6IB4V3YY8UDINKM3RIYCN8WINIHYCD9SQJJXJWRDRJXR93P6EVOZS4YIIGI9Y9NYZL1NHLQ2BCPI2R089P242RO04OHI2Z7UTUR95SS57S6EDWYSG1JALLNJB2Z5Q5BSUN65VBCLCD520CW6B2K9YGHXK9W6EKFFESZQUK49MYMKOMRT5IEBMMADGCLMFSEQW2947ZMMUGV75B670T55YV6N4YTBXYHQ77F6PSXOUSOLQY7HB6R' where id=36; -update noar ti set v2='B1O2TZIWYV1B9W6IB4V3YY8UDINKM3RIYCN8WINIHYCD9SQJJXJWRDRJXR93P6EVOZS4YIIGI9Y9NYZL1NHLQ2BCPI2R089P242RO04OHI2Z7UTUR95SS57S6EDWYSG1JALLNJB2Z5Q5BSUN65VBCLCD520CW6B2K9YGHXK9W6EKFFESZQUK49MYMKOMRT5IEBMMADGCLMFSEQW2947ZMMUGV75B670T55YV6N4YTBXYHQ77F6PSXOUSOLQY7HB6R' where id=36; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='VVCDXOYRKOIWZZ7SAILFI0SZ6U8T06FH16SSKJ0T0VADHJGDM5XTUJYTORV494KNEIUWNDEFRQXVDK6SRQNNCCLVMD6Z3EGJNMLG7SR9UD9NE4XKT4R1JJU9J2EBU34MCYD2JT6RDJBPTZ4BJTLZXLFF8EHEHU7JMH59NISYO4Z9399SODI04482J4J70Y5V3797OFBJQ5OOZNOT7UUE6QGEY3XD19PY62626L8R8WWZ3MG7N677S3053FSB21LR3' where id=36; -update noar ti set v3='VVCDXOYRKOIWZZ7SAILFI0SZ6U8T06FH16SSKJ0T0VADHJGDM5XTUJYTORV494KNEIUWNDEFRQXVDK6SRQNNCCLVMD6Z3EGJNMLG7SR9UD9NE4XKT4R1JJU9J2EBU34MCYD2JT6RDJBPTZ4BJTLZXLFF8EHEHU7JMH59NISYO4Z9399SODI04482J4J70Y5V3797OFBJQ5OOZNOT7UUE6QGEY3XD19PY62626L8R8WWZ3MG7N677S3053FSB21LR3' where id=36; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='ZJD2A0ARO578WAFTKJ9FTOM5ZBJGBVIQZ27SUM1YBT26R5MAL0WNS0T6HFT20TFMUN8C1YDMXVRQTERZ15E4KCD0SGL4H17L9OJY1XZFBW7U6KH2SOT95Y6DO5R148FRVB2PDOOO1PX9NOYF4MYCRF211VC4EIGYCCPQBL3D5C0BOY5SU3T5BKX5NYXFFLYB23F26YN84YVZGPL2GXMKZSLMVT0R490LBSGH9B11FDJIPRBM79B5HCHZ3O8E3CI4G' where id=37; -update noar ti set v0='ZJD2A0ARO578WAFTKJ9FTOM5ZBJGBVIQZ27SUM1YBT26R5MAL0WNS0T6HFT20TFMUN8C1YDMXVRQTERZ15E4KCD0SGL4H17L9OJY1XZFBW7U6KH2SOT95Y6DO5R148FRVB2PDOOO1PX9NOYF4MYCRF211VC4EIGYCCPQBL3D5C0BOY5SU3T5BKX5NYXFFLYB23F26YN84YVZGPL2GXMKZSLMVT0R490LBSGH9B11FDJIPRBM79B5HCHZ3O8E3CI4G' where id=37; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='7YKRX49F3N63FNVPCI8Q2FV2H10DNO30AGGZ94UD0BAMOGEWRRJUZA6HXO1ZF3YGUR5ZBNIK0B0VO799ZISVUNX3G4QVNASECBJVX1QOLCAPSER2D5YAF7WMDOVH8YKYSF107HX0VD91IXPTWSK4EDVJFX4H1RIDP7AWXPZSGVSXZARANZGUEOS8MP5YNOPEO5QS4DVKKPR3XEZAOR1R8C9F2OWAM9TDSO063OZRX4SHGIQ672CZM6X4LRGSPKGY2' where id=37; -update noar ti set v1='7YKRX49F3N63FNVPCI8Q2FV2H10DNO30AGGZ94UD0BAMOGEWRRJUZA6HXO1ZF3YGUR5ZBNIK0B0VO799ZISVUNX3G4QVNASECBJVX1QOLCAPSER2D5YAF7WMDOVH8YKYSF107HX0VD91IXPTWSK4EDVJFX4H1RIDP7AWXPZSGVSXZARANZGUEOS8MP5YNOPEO5QS4DVKKPR3XEZAOR1R8C9F2OWAM9TDSO063OZRX4SHGIQ672CZM6X4LRGSPKGY2' where id=37; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='MLIXAB8I8VUC3A0PVUZ53S26QQEUH0MDFT3JOQ9LNNEMYHNVMAK9F5VU2XC62FFLSV8DU1NWCGHLIBZY98NRSYSB6YCTYDN19EDXYWCSS6T166QF9YH5M7S5YCDC7G7IWKC8IK4NR5BOPJ15U1O6S6JMMX9L16GK8YV7V6Q3MC9HDLX0NV6OQ4J6P0IA8XVQH8YXLR1NM5YI3WBZO7EQBR07FTFP8OT2G1VBXT3AISXF19XBH1DOIIOL6C8HP5WH6' where id=37; -update noar ti set v2='MLIXAB8I8VUC3A0PVUZ53S26QQEUH0MDFT3JOQ9LNNEMYHNVMAK9F5VU2XC62FFLSV8DU1NWCGHLIBZY98NRSYSB6YCTYDN19EDXYWCSS6T166QF9YH5M7S5YCDC7G7IWKC8IK4NR5BOPJ15U1O6S6JMMX9L16GK8YV7V6Q3MC9HDLX0NV6OQ4J6P0IA8XVQH8YXLR1NM5YI3WBZO7EQBR07FTFP8OT2G1VBXT3AISXF19XBH1DOIIOL6C8HP5WH6' where id=37; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='18PSJSHLJQYHU7EMFIQNJTG3ZP4RU0NT1KA6UK1GZV2DPBXP07WYX457IKJD0Y13O4JYGY7Y8G25QV136V00EJWGZO6S5X8S41P17QREBV3UNWVHSC6AYC48KVNGS7Y9QEAMFNLOMQX6SELIR485DUSQ6KD65U0W6IJA24CZKC5CAEKUAU5O3Y8TL107L42WMRJ51M0S3PPY68AFYCQYOBLXSCLS2NSWSW1QP8M9MO7VURCTJ18Y9M5PM9V2O0L79' where id=37; -update noar ti set v3='18PSJSHLJQYHU7EMFIQNJTG3ZP4RU0NT1KA6UK1GZV2DPBXP07WYX457IKJD0Y13O4JYGY7Y8G25QV136V00EJWGZO6S5X8S41P17QREBV3UNWVHSC6AYC48KVNGS7Y9QEAMFNLOMQX6SELIR485DUSQ6KD65U0W6IJA24CZKC5CAEKUAU5O3Y8TL107L42WMRJ51M0S3PPY68AFYCQYOBLXSCLS2NSWSW1QP8M9MO7VURCTJ18Y9M5PM9V2O0L79' where id=37; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='0PPCXEXQAW6NZFYBHVFDNXZ72IOU6U0NAF6GHCC2CBWJ6FR5O60OE59X12DR94LWQH7W6RAARA3K5UA7CN7SON15SE8YYKN0BG0ME02E4X5F202TFP027IT7E7SCQYC48GVBMM4QD0V2OA4K29M96SRGRUABIKIEO8659YWZ00T2SXLB44GGIDQ4A5LL62LITG52N88ZYH2OSVYDZNUW8L6V6QZF1CG3E1H7DBRWSEZAEX122QQ87VME71Z9SMXWM' where id=38; -update noar ti set v0='0PPCXEXQAW6NZFYBHVFDNXZ72IOU6U0NAF6GHCC2CBWJ6FR5O60OE59X12DR94LWQH7W6RAARA3K5UA7CN7SON15SE8YYKN0BG0ME02E4X5F202TFP027IT7E7SCQYC48GVBMM4QD0V2OA4K29M96SRGRUABIKIEO8659YWZ00T2SXLB44GGIDQ4A5LL62LITG52N88ZYH2OSVYDZNUW8L6V6QZF1CG3E1H7DBRWSEZAEX122QQ87VME71Z9SMXWM' where id=38; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='MQ9NKR88QS3JT8D73FKF7H049V8F9FV152K381RG6MG7LXAX4LXPZIVSF7HS29RGMSTQLGAFOBB2ASWPTKZX8J9NT0A0KLR7V2SI3EUCV74HBWABGQIE7S4X3G0FXGRFISMI13X1PX87G1LSRB0WJFVV8YKR4UDFD9J2T0FI53580WEJHJGAG3IDLIJPQX2PFY3WJIJ1ZIN625KA5SAXI207M26A7J5D9Y8Q65ONKSTP41KO01K9AJPFUVEZHLYVA' where id=38; -update noar ti set v1='MQ9NKR88QS3JT8D73FKF7H049V8F9FV152K381RG6MG7LXAX4LXPZIVSF7HS29RGMSTQLGAFOBB2ASWPTKZX8J9NT0A0KLR7V2SI3EUCV74HBWABGQIE7S4X3G0FXGRFISMI13X1PX87G1LSRB0WJFVV8YKR4UDFD9J2T0FI53580WEJHJGAG3IDLIJPQX2PFY3WJIJ1ZIN625KA5SAXI207M26A7J5D9Y8Q65ONKSTP41KO01K9AJPFUVEZHLYVA' where id=38; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='J66BHK5CX59CGBKBR1II3CDGTBW1II3ND5XMK5E4J0LN4LLA3190T2V8BP1E2820PV0TUIA86JQ8P9E4NLAPJ4Y1BMFLQ1PNVDJSMO46IBOAKJ675ECHKXYE7LR892XQTDVHENA3L3SMWVY1090VFTQ658JY33ZSWSW777Y0W9II98SUM49CRD1QM4UU5BWUNCBVIUINHYHQ7RLD16NY9EK0CF9EVCCCC1XUBF23BEMVX8IOQXKHQFT0EIDSL9T6U' where id=38; -update noar ti set v2='J66BHK5CX59CGBKBR1II3CDGTBW1II3ND5XMK5E4J0LN4LLA3190T2V8BP1E2820PV0TUIA86JQ8P9E4NLAPJ4Y1BMFLQ1PNVDJSMO46IBOAKJ675ECHKXYE7LR892XQTDVHENA3L3SMWVY1090VFTQ658JY33ZSWSW777Y0W9II98SUM49CRD1QM4UU5BWUNCBVIUINHYHQ7RLD16NY9EK0CF9EVCCCC1XUBF23BEMVX8IOQXKHQFT0EIDSL9T6U' where id=38; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='6EPLPYENJL5DS3BMXF5E5TUQ1WVCZHOAXZQFK0VG212FC5SFFPLIKCSXYE2ROQT5QM32YVHY6C0JCMH4730VU6A840PMMXA2P1INN2ZT8JKY4SUC6FN2YJSGBF1B6QK7TX8GIGDH8AZEGFAJVTCCB7VN5O74HPB78W5EMBPNANJECEI00RFE76A9BSJ75M1AEMI8QA2GMZMXNOT6IPMXXYKY041XQ6WB439CPFUNB8SJ8GQBQVP286ZCFH6GU11DR' where id=38; -update noar ti set v3='6EPLPYENJL5DS3BMXF5E5TUQ1WVCZHOAXZQFK0VG212FC5SFFPLIKCSXYE2ROQT5QM32YVHY6C0JCMH4730VU6A840PMMXA2P1INN2ZT8JKY4SUC6FN2YJSGBF1B6QK7TX8GIGDH8AZEGFAJVTCCB7VN5O74HPB78W5EMBPNANJECEI00RFE76A9BSJ75M1AEMI8QA2GMZMXNOT6IPMXXYKY041XQ6WB439CPFUNB8SJ8GQBQVP286ZCFH6GU11DR' where id=38; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='MBIJLQRMHX8UN2DL59P0SL86NBBALZN4MXLLMYFCZO4P6XAWKHHFBDIPWAPAM2OLRO4KQ2GJ50J70C0HPHOTJ67U4F2DGZ4RVF6GVK5N68EPGIVQOI79L6E42MC1GPJO3GME4UZ4VHL3VQIIG90ZUJNEHX8WN3XKSJA2DRTIFB1CVXZ10VSS0ZQ7S1RMTUR21W31P245K7RZ1FSCLG265U5GHTCXR4VXNQQ29AYTPS2NZCH07CIQBPLB9ZMCRMTTA' where id=39; -update noar ti set v0='MBIJLQRMHX8UN2DL59P0SL86NBBALZN4MXLLMYFCZO4P6XAWKHHFBDIPWAPAM2OLRO4KQ2GJ50J70C0HPHOTJ67U4F2DGZ4RVF6GVK5N68EPGIVQOI79L6E42MC1GPJO3GME4UZ4VHL3VQIIG90ZUJNEHX8WN3XKSJA2DRTIFB1CVXZ10VSS0ZQ7S1RMTUR21W31P245K7RZ1FSCLG265U5GHTCXR4VXNQQ29AYTPS2NZCH07CIQBPLB9ZMCRMTTA' where id=39; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='NSFIH0HZH8POOGYFFYPK4GIE3B1UD5WRRI6SOU1B05BGPAINR7O02M1729R1VVW4UF3KHD7CJNUCKU1NRHLQGIBRO4XSAKD61Y3IZBJKXDTTEZLSFIW60A7IYH5TM96PZSCL4QMUJ5JGC8IFGURM7LBZ27AYXH9W0I476X8DFEFU8SXDTU85J0EKMSTZHGSSTFGYYAZYR8NFUAVEW9T8B9TOWPR2SXH3PBIP87ORSWT4WZG9ARQHL5GJ23A6RQOXA' where id=39; -update noar ti set v1='NSFIH0HZH8POOGYFFYPK4GIE3B1UD5WRRI6SOU1B05BGPAINR7O02M1729R1VVW4UF3KHD7CJNUCKU1NRHLQGIBRO4XSAKD61Y3IZBJKXDTTEZLSFIW60A7IYH5TM96PZSCL4QMUJ5JGC8IFGURM7LBZ27AYXH9W0I476X8DFEFU8SXDTU85J0EKMSTZHGSSTFGYYAZYR8NFUAVEW9T8B9TOWPR2SXH3PBIP87ORSWT4WZG9ARQHL5GJ23A6RQOXA' where id=39; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='KACBVXR9WWP571WUNBLZZRBI8T3ZLMNYQYCQEDHNC9SQ9AW555ZF0JFSC38Q65C9MDQPXX9VMOK3EI6N8CNCSZDMWXLH0XDJHEBYPURWHVY6BAEX5V67C08085VN31ANK5MLR9TNDYUPS2SU7R8FX0FUK2SDUXV5PYEYMT02A20LB8VI0CQAXM0GEMFBTUWW7CY5F0NMUSPCF0JEM21QLFZMMWG19U1KW3ZTV091R5QSF230Q5I58IF0USUCQ8I4Q' where id=39; -update noar ti set v2='KACBVXR9WWP571WUNBLZZRBI8T3ZLMNYQYCQEDHNC9SQ9AW555ZF0JFSC38Q65C9MDQPXX9VMOK3EI6N8CNCSZDMWXLH0XDJHEBYPURWHVY6BAEX5V67C08085VN31ANK5MLR9TNDYUPS2SU7R8FX0FUK2SDUXV5PYEYMT02A20LB8VI0CQAXM0GEMFBTUWW7CY5F0NMUSPCF0JEM21QLFZMMWG19U1KW3ZTV091R5QSF230Q5I58IF0USUCQ8I4Q' where id=39; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='IICHG9NY81SCAQMR7JPS16WZ5QN3NGGNIEAI9JVFLUAJJWD2KJUVXN54702OW7TV7JPCCCZT6U2SMNQB5GE7GAJFBRZQW8OFAC1TXMRPYBNP1NJGR4FLPR517PM8CQBBACCPCSY2AIFDCU8LSI53RQGTDCR0HLI425KEZK8P9ASGU8JI84QTLYG38A584996KCT70A7SBSLYLBQFM0FMVSGQCQPJQECHTR86XAS9W5E5SJQ8QMHEFMTKW1AZ2DQHA' where id=39; -update noar ti set v3='IICHG9NY81SCAQMR7JPS16WZ5QN3NGGNIEAI9JVFLUAJJWD2KJUVXN54702OW7TV7JPCCCZT6U2SMNQB5GE7GAJFBRZQW8OFAC1TXMRPYBNP1NJGR4FLPR517PM8CQBBACCPCSY2AIFDCU8LSI53RQGTDCR0HLI425KEZK8P9ASGU8JI84QTLYG38A584996KCT70A7SBSLYLBQFM0FMVSGQCQPJQECHTR86XAS9W5E5SJQ8QMHEFMTKW1AZ2DQHA' where id=39; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='JS2SF26JP07VS8U1UW57MYH066TW6RJ5ORZ193DCV0R67XT51BGF0VQVOMF6SMANMF66N5FHY62H0X8WHNB0FDRWIEKUHWZAZB2M6ZDNAMWPL68GL6N9X2TRPZ6VVZKYR0FLPDPZFT9J26SHUDCYDSTS3KKSPZQL40DW9U29WUKXA2GD5ZXU6UD20H1KERE7I9NC0QXUGB0T5S50MHJPW68W8E2QOLUF61PXWOAF3JVG3GZONY1EBU2DVXXMGKGHB' where id=40; -update noar ti set v0='JS2SF26JP07VS8U1UW57MYH066TW6RJ5ORZ193DCV0R67XT51BGF0VQVOMF6SMANMF66N5FHY62H0X8WHNB0FDRWIEKUHWZAZB2M6ZDNAMWPL68GL6N9X2TRPZ6VVZKYR0FLPDPZFT9J26SHUDCYDSTS3KKSPZQL40DW9U29WUKXA2GD5ZXU6UD20H1KERE7I9NC0QXUGB0T5S50MHJPW68W8E2QOLUF61PXWOAF3JVG3GZONY1EBU2DVXXMGKGHB' where id=40; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='RU9KPNR8CRROLPYW026M8NDR45WQ3CHJY1J7BYICHACR8BT2UL3XL8PVAS6T0IE915IXV5IPZP3T9N4P4J5MAH9M19AQ8S0JD9H0EPKQWQFA1HXFLWVEDDD8EF7WTH5YE7T6FGIRVM5VFHG7RDJ793SSKRAF5VSVJDMP11VT75M6OPGUPL900ZJ1842LGC0M3J3KPF60R2AVB83YG2WYE49YM2IW22YV65PNJXLVFDW20PWJR14QKOX26HU9RTQ1S' where id=40; -update noar ti set v1='RU9KPNR8CRROLPYW026M8NDR45WQ3CHJY1J7BYICHACR8BT2UL3XL8PVAS6T0IE915IXV5IPZP3T9N4P4J5MAH9M19AQ8S0JD9H0EPKQWQFA1HXFLWVEDDD8EF7WTH5YE7T6FGIRVM5VFHG7RDJ793SSKRAF5VSVJDMP11VT75M6OPGUPL900ZJ1842LGC0M3J3KPF60R2AVB83YG2WYE49YM2IW22YV65PNJXLVFDW20PWJR14QKOX26HU9RTQ1S' where id=40; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='KIQLRRPH20523ZEAX8M9299NH77Z7O6W0CLRN0R5H2QEZ8PP4YUUYP8MSZDC76UNEXPR93EGKGJ232I81G2KBYK73RCWOJKFPG58D8MDNOWPRGT7RI257Q6ZOGR1MVPX9P96OOFRC0UF1E8BC2TDK6LM54JBAGAOTKRBY6YSQ33MOE0JRP8JWHVMG2PI1JK7CR0V2SNCU32TPHXPCX00MW8O2DZTTX8LURL0OQ3DVWLSWWDKH47JOHRJ2NVBUTD5D' where id=40; -update noar ti set v2='KIQLRRPH20523ZEAX8M9299NH77Z7O6W0CLRN0R5H2QEZ8PP4YUUYP8MSZDC76UNEXPR93EGKGJ232I81G2KBYK73RCWOJKFPG58D8MDNOWPRGT7RI257Q6ZOGR1MVPX9P96OOFRC0UF1E8BC2TDK6LM54JBAGAOTKRBY6YSQ33MOE0JRP8JWHVMG2PI1JK7CR0V2SNCU32TPHXPCX00MW8O2DZTTX8LURL0OQ3DVWLSWWDKH47JOHRJ2NVBUTD5D' where id=40; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='NIY892D98R34VRPVDPXGWYEYR78HTUOWTVAIZE1YX34I7DL9SVJ8ZTKFLDAWVWNUT9H7PQVFU21RESZZIRNMXO7OSSF8DXCHMJLOA93NAWJNLUR1DI8XT9N8IEHMN68R6FONVYZVIDJYT5C5FXW4B7BD0IF2LCD1AO8U665HWH9ASVX0FM6R1Q4BXOKZO72ZGH0FI5FWL9NURKN4PLZ8TXJ57VJ30AP92FL7AKO1JU5REVJHG40PX3GJUC4AHISJH' where id=40; -update noar ti set v3='NIY892D98R34VRPVDPXGWYEYR78HTUOWTVAIZE1YX34I7DL9SVJ8ZTKFLDAWVWNUT9H7PQVFU21RESZZIRNMXO7OSSF8DXCHMJLOA93NAWJNLUR1DI8XT9N8IEHMN68R6FONVYZVIDJYT5C5FXW4B7BD0IF2LCD1AO8U665HWH9ASVX0FM6R1Q4BXOKZO72ZGH0FI5FWL9NURKN4PLZ8TXJ57VJ30AP92FL7AKO1JU5REVJHG40PX3GJUC4AHISJH' where id=40; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='C1HMR8AVREFGKVQ63C7D47U9PQZYGKQR3XII6F3990712OKXQJBSYUHWPY5GSKP3QO2D08X1SKULCWAAUKXFNFQJN65QA4O1C3X1EL3JPSIBD24GTLAOR3CXEWFF5MEUSQJKIYVJ3FZPHMAHMUNTN4GASTNMM856OO9URCX519HU7HPMB6DQMJYJVT9UXTWUS9ATL31D77AL4ZLSBSNOQ1DMYC5838E2VE5ZJLE00Y9N6EJ5AE584L449RBK3IFHE' where id=41; -update noar ti set v0='C1HMR8AVREFGKVQ63C7D47U9PQZYGKQR3XII6F3990712OKXQJBSYUHWPY5GSKP3QO2D08X1SKULCWAAUKXFNFQJN65QA4O1C3X1EL3JPSIBD24GTLAOR3CXEWFF5MEUSQJKIYVJ3FZPHMAHMUNTN4GASTNMM856OO9URCX519HU7HPMB6DQMJYJVT9UXTWUS9ATL31D77AL4ZLSBSNOQ1DMYC5838E2VE5ZJLE00Y9N6EJ5AE584L449RBK3IFHE' where id=41; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='2M27TTLJMUW78ZLY31CJ4HTV8OHD7IBLO3BLACHI5O63JUK7RL0VZZ1E4EDSTHRINUOWO64QXH9Q6ZVBRNIKPIZBDG9DJPFIU6E5X84JHXBBL51M0XYQATB7PSM8WYC6YT15PW2GRJ1OV8NCTT01HGMT5IK02SJW7Y1UB5R8NJUZC4J9885H1ZDWID4H2W6OK005S2IQ44UDGKU01EPHAOXAV05FX7TKVT19CZ9BZ12W6G5XJBC773GD2WCV0T9L7' where id=41; -update noar ti set v1='2M27TTLJMUW78ZLY31CJ4HTV8OHD7IBLO3BLACHI5O63JUK7RL0VZZ1E4EDSTHRINUOWO64QXH9Q6ZVBRNIKPIZBDG9DJPFIU6E5X84JHXBBL51M0XYQATB7PSM8WYC6YT15PW2GRJ1OV8NCTT01HGMT5IK02SJW7Y1UB5R8NJUZC4J9885H1ZDWID4H2W6OK005S2IQ44UDGKU01EPHAOXAV05FX7TKVT19CZ9BZ12W6G5XJBC773GD2WCV0T9L7' where id=41; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='P32XQK94PPU6P6XSDX80S4AWBPQVGMI87R8IYP490S1EFEHOTROI7XWZYJMA1R3SNTTBDTDN6EN5OV4C2WEGKM3F2QICKUY83ZH548QINBZR1BSYP8L2YMBM947TQ86E1TP6DCVISFVKWHH3KLJYZUOJANJEQJ6CZYDEWJTMGIAJSN4NYB409P12VKBPDU7DCY1SJ7CDN7U3S1U15MFK2MUH2ANQFNH58742X5YBDGZK8PT3VQH9D5WBLV8BCYZAZ' where id=41; -update noar ti set v2='P32XQK94PPU6P6XSDX80S4AWBPQVGMI87R8IYP490S1EFEHOTROI7XWZYJMA1R3SNTTBDTDN6EN5OV4C2WEGKM3F2QICKUY83ZH548QINBZR1BSYP8L2YMBM947TQ86E1TP6DCVISFVKWHH3KLJYZUOJANJEQJ6CZYDEWJTMGIAJSN4NYB409P12VKBPDU7DCY1SJ7CDN7U3S1U15MFK2MUH2ANQFNH58742X5YBDGZK8PT3VQH9D5WBLV8BCYZAZ' where id=41; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='K80ACSSQCTWAUUVH9B8ZXO5O1ZVDB11L5X2TBTT3QHCT6TWP46IJMP18XNMWL5ZFOMDM4F4A70BRJHQWJGA43OTVNLIZAXV6XVBPTSZTWR5BPQ1PW6Z2SHWLHINEQGW1NBODSR59LPCOQRSMIERXSOA0SX3OOK1B9IOSZELC6FZKCCB3GKFE0JNEVFFFSGFTRRYBSH563FYQU45KF3IQBTJ51E39IHGUFYGTNJT1VHBBUHT47BFAMKIK5B4H4O5DW' where id=41; -update noar ti set v3='K80ACSSQCTWAUUVH9B8ZXO5O1ZVDB11L5X2TBTT3QHCT6TWP46IJMP18XNMWL5ZFOMDM4F4A70BRJHQWJGA43OTVNLIZAXV6XVBPTSZTWR5BPQ1PW6Z2SHWLHINEQGW1NBODSR59LPCOQRSMIERXSOA0SX3OOK1B9IOSZELC6FZKCCB3GKFE0JNEVFFFSGFTRRYBSH563FYQU45KF3IQBTJ51E39IHGUFYGTNJT1VHBBUHT47BFAMKIK5B4H4O5DW' where id=41; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='AXE6E25KSO6X9FQ378OHFQJSL3Y587JHS6PS7N5TWKS0MU0PO4MU3NB64O341DQRWO0OLPL9DZ1N0CPEBKOQX8QPF0MX465BV4MML06D6GL37YX7FNVY73Z7JKD9Y6WCN5KSA1PEZ94FRMPL79ABK51SG3ETE4FMVFQF5M3YP72B2FPB1SI322X2IIL2HKECLWW9Z6IZDSDG3NPJX0B02GC39JVXUIQK4Y04A4ADW9NAVC73J8Z5WJU7U5J3OTPC9' where id=42; -update noar ti set v0='AXE6E25KSO6X9FQ378OHFQJSL3Y587JHS6PS7N5TWKS0MU0PO4MU3NB64O341DQRWO0OLPL9DZ1N0CPEBKOQX8QPF0MX465BV4MML06D6GL37YX7FNVY73Z7JKD9Y6WCN5KSA1PEZ94FRMPL79ABK51SG3ETE4FMVFQF5M3YP72B2FPB1SI322X2IIL2HKECLWW9Z6IZDSDG3NPJX0B02GC39JVXUIQK4Y04A4ADW9NAVC73J8Z5WJU7U5J3OTPC9' where id=42; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='73TOUD4EONX110H0DV7HE3HZVITV2ECQMO3QI5GL1OYXUHD4HK3422B2SIL9D0KFEODL2BD0AZJ7BFU7L7YL7YQI1A118DWTB0EU7OICZQLSF18NTGU24MUPXSXUHZY62CHOB4NNDNZ9C87FCTVVR7IT9F4853U485QQVT476K8ZE3EUIHIAXQVRMYZO6A0HNV693J2ZZK4J9AIEOR3SRP6278IAUXORSJRZ7NIOUUQXFQGON4APBRK2HDCC4ZBQJ' where id=42; -update noar ti set v1='73TOUD4EONX110H0DV7HE3HZVITV2ECQMO3QI5GL1OYXUHD4HK3422B2SIL9D0KFEODL2BD0AZJ7BFU7L7YL7YQI1A118DWTB0EU7OICZQLSF18NTGU24MUPXSXUHZY62CHOB4NNDNZ9C87FCTVVR7IT9F4853U485QQVT476K8ZE3EUIHIAXQVRMYZO6A0HNV693J2ZZK4J9AIEOR3SRP6278IAUXORSJRZ7NIOUUQXFQGON4APBRK2HDCC4ZBQJ' where id=42; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='8SNJHZKVFOKMR9JBXBSP14F7VRUPNQQ9AO779YSPCXBCVH8RNS8ZQ25KAVEUW68WXZ5CBT2S3P51CUP2HJWZSDAN28CBNBHQSB44YASD0YWTN17R8143THIBC2HCR41J8JOS5VCHUJDUEY8CGYSWGY9EWOI36X4NGTMEALRCFNKJR2W9TWCYZQFM963S6IBF1Y3MON44NL98MOCRIKZ5O97N6AM3E28JJ9WO5S7EA8WK74K0CRFLR5MBJR35PMIZN' where id=42; -update noar ti set v2='8SNJHZKVFOKMR9JBXBSP14F7VRUPNQQ9AO779YSPCXBCVH8RNS8ZQ25KAVEUW68WXZ5CBT2S3P51CUP2HJWZSDAN28CBNBHQSB44YASD0YWTN17R8143THIBC2HCR41J8JOS5VCHUJDUEY8CGYSWGY9EWOI36X4NGTMEALRCFNKJR2W9TWCYZQFM963S6IBF1Y3MON44NL98MOCRIKZ5O97N6AM3E28JJ9WO5S7EA8WK74K0CRFLR5MBJR35PMIZN' where id=42; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='26WCQVQYMI48CW3TL65ZS4F5R9MTI048B05BF60S9OHG46ZY0NEOAZFCCHH7IUNP1N93HS872SFTB2LZ3NH7RYR5WIWX2DLZCER9I1C1P1BEPOSC3S3AS66HFI15D8Y1Y31U90L207YABO9KPJEASZM4PX0V7RQCNRXTS10X2LDWC722MXTVJPWTXYV2513V3QAYAK9HMQXZXKCA668PZG1HFK6VN2WYWW8VEWRBLNV5B9CL98THF8T4PQ2MBI38P' where id=42; -update noar ti set v3='26WCQVQYMI48CW3TL65ZS4F5R9MTI048B05BF60S9OHG46ZY0NEOAZFCCHH7IUNP1N93HS872SFTB2LZ3NH7RYR5WIWX2DLZCER9I1C1P1BEPOSC3S3AS66HFI15D8Y1Y31U90L207YABO9KPJEASZM4PX0V7RQCNRXTS10X2LDWC722MXTVJPWTXYV2513V3QAYAK9HMQXZXKCA668PZG1HFK6VN2WYWW8VEWRBLNV5B9CL98THF8T4PQ2MBI38P' where id=42; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='N4QGLNWDK955DOINBQI4XMPW86UUQDBAZA1B6U6BBCDCRNXDGA7G97YJLTTM9XUPYCCVK9VKDZFMQZRC8QT83CG0Y73MPQYBN5MDSPF3H58EU9C1HGUZIVD5T0A62RKW3DBI6MLYDJPBYY33EOTBGYE2QTPO0TABRG7RPU9JHKU5WKIPZO58UGB7FV5MGHK5YQCZMT3EZF5M7KNKJ0YRH2EZAXG2TQ6G4BQQLIH92I1PI256H0ZWZLNROCLN4O0BE' where id=43; -update noar ti set v0='N4QGLNWDK955DOINBQI4XMPW86UUQDBAZA1B6U6BBCDCRNXDGA7G97YJLTTM9XUPYCCVK9VKDZFMQZRC8QT83CG0Y73MPQYBN5MDSPF3H58EU9C1HGUZIVD5T0A62RKW3DBI6MLYDJPBYY33EOTBGYE2QTPO0TABRG7RPU9JHKU5WKIPZO58UGB7FV5MGHK5YQCZMT3EZF5M7KNKJ0YRH2EZAXG2TQ6G4BQQLIH92I1PI256H0ZWZLNROCLN4O0BE' where id=43; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='C5WNK7DO09CLH11GEQ15TCEF2UW5XOLKZ6XXEMYMC1LYTAMPBY6HRGRUKURWHTS9JPNWL41BP8PM9686W2U0B8R9JSB2HQU71KM8N6Z75PFUI97S7GOMCJ9YNW43U1LFU26X8SK8RF7EIL6TMSM8FFXAT91XM96W0NPTYOLFEUEI8CYQ555FACHLW0V4R1E3QG62F3FVBBGW05MI6AZZWLAJ688GVGOIE2C8UTZUT7CJYANKIUIRT92MTH45YVG20' where id=43; -update noar ti set v1='C5WNK7DO09CLH11GEQ15TCEF2UW5XOLKZ6XXEMYMC1LYTAMPBY6HRGRUKURWHTS9JPNWL41BP8PM9686W2U0B8R9JSB2HQU71KM8N6Z75PFUI97S7GOMCJ9YNW43U1LFU26X8SK8RF7EIL6TMSM8FFXAT91XM96W0NPTYOLFEUEI8CYQ555FACHLW0V4R1E3QG62F3FVBBGW05MI6AZZWLAJ688GVGOIE2C8UTZUT7CJYANKIUIRT92MTH45YVG20' where id=43; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='KSZXG1B5O09HBMBYGDCWHIST8GRJEHY8PN4IB7TBDN01PJMOLBWY9TMLI3X5V80U2K5NNNZ2P9TTQFG1HBW1T1YY1VP3UDV1LKFNTGOWPM12XFN82W8T083GY7HR6BLYMPT0ZQHTSGMXCE7BY5L2BOB5GUWZINU36VMGLYJXX63OHXTVCHC7Q8ISLOZC3DSN2HDTM1APTXHIXKYQFZ3UCLWD09SDZ7TJ72ZYKMWNGA7QU9MGVACKXXFWYQDOS2SMC' where id=43; -update noar ti set v2='KSZXG1B5O09HBMBYGDCWHIST8GRJEHY8PN4IB7TBDN01PJMOLBWY9TMLI3X5V80U2K5NNNZ2P9TTQFG1HBW1T1YY1VP3UDV1LKFNTGOWPM12XFN82W8T083GY7HR6BLYMPT0ZQHTSGMXCE7BY5L2BOB5GUWZINU36VMGLYJXX63OHXTVCHC7Q8ISLOZC3DSN2HDTM1APTXHIXKYQFZ3UCLWD09SDZ7TJ72ZYKMWNGA7QU9MGVACKXXFWYQDOS2SMC' where id=43; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='V8LZAYWQ9VSGN0UH6ODPBSDK0N28GI0OWTC2ZNJ9S6SCJ4FJA4YGHUR8DJ84X5VXJRC71AXL92XF78L9CISJK00TVXMEMG0CC4O0S0BSOOEIPZKM5CI0A981N0CYPNGW66IPMTVPEQMWQCD8EE0JINYSQNW96RSQ5RHV1PDV47Y0VSHRESBF7T2VPO1LTTIGQSQWOVFW9I4KYVCVB8YMI5JI8X64L37GB7FIU5Z39D1VAW0WPVPI7JFQ5K59PLRNV' where id=43; -update noar ti set v3='V8LZAYWQ9VSGN0UH6ODPBSDK0N28GI0OWTC2ZNJ9S6SCJ4FJA4YGHUR8DJ84X5VXJRC71AXL92XF78L9CISJK00TVXMEMG0CC4O0S0BSOOEIPZKM5CI0A981N0CYPNGW66IPMTVPEQMWQCD8EE0JINYSQNW96RSQ5RHV1PDV47Y0VSHRESBF7T2VPO1LTTIGQSQWOVFW9I4KYVCVB8YMI5JI8X64L37GB7FIU5Z39D1VAW0WPVPI7JFQ5K59PLRNV' where id=43; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='JG70S82EH2XF6QK131GSV1AKI0CK0MH0ZSB477ZNQYRLL8DE8W9P9FV1DTUXNT3GPHRP49YZAI5I9HWRU24KQZANZWFRY1QA67KSSVQIN9ZS9PVGNLHRUPU47R0WXB6VB8NI1YBWQ4VO4EFR65XW8XLM7KG2SRNRFYVF7P54YAJS7L3QF2S68RJWHA22T73YA8N11N05E0N0C9PRDBAKKAFJ0Z0MD70XOOOPDM7K6KGQAXD78Q4CIT8PYDQ39UD3Q' where id=44; -update noar ti set v0='JG70S82EH2XF6QK131GSV1AKI0CK0MH0ZSB477ZNQYRLL8DE8W9P9FV1DTUXNT3GPHRP49YZAI5I9HWRU24KQZANZWFRY1QA67KSSVQIN9ZS9PVGNLHRUPU47R0WXB6VB8NI1YBWQ4VO4EFR65XW8XLM7KG2SRNRFYVF7P54YAJS7L3QF2S68RJWHA22T73YA8N11N05E0N0C9PRDBAKKAFJ0Z0MD70XOOOPDM7K6KGQAXD78Q4CIT8PYDQ39UD3Q' where id=44; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='07SG3BPYWQQEEPPUXICSE0JKJDFA0C3DD95G0MF2KDDBSGP636C9KSJ4JDO2W9UDT3FI465Z8WSWYULSNIH5XT7XYUTMNQRXJSGC3Q7TU8FGLFSHVX2FMKP4OU25X9NPNOQ0VUYR76DFE9MB25EMCZ8254D116AC9HUB1QSYMVQUO7IJNLZKYWSI0S973LHC0I87Y8415RJMAW8SE5EDRN5HUMGFOL2QSLCVLMB5DPZK3SHMPBQOU59PL2NDZYMAY' where id=44; -update noar ti set v1='07SG3BPYWQQEEPPUXICSE0JKJDFA0C3DD95G0MF2KDDBSGP636C9KSJ4JDO2W9UDT3FI465Z8WSWYULSNIH5XT7XYUTMNQRXJSGC3Q7TU8FGLFSHVX2FMKP4OU25X9NPNOQ0VUYR76DFE9MB25EMCZ8254D116AC9HUB1QSYMVQUO7IJNLZKYWSI0S973LHC0I87Y8415RJMAW8SE5EDRN5HUMGFOL2QSLCVLMB5DPZK3SHMPBQOU59PL2NDZYMAY' where id=44; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='1RXGUMTFHFSC2VP8HGPVKV4ZKJPBDQTQ4OK8UKMRHUKEMZGZ5CA6GKAZ5BHY5I3KM1I2Z6G28K8T9Q3QCII043K742N6KOJMWLFADKMBV59VAXE2TAC2P2K0KWLB3NX6V7TP5HPZUT60NGETTCOWFC299PQKE8VVGI6NRTKEKXMS6YXK5INJHL4W8XW2A269VR5OHMJDOE1HT1PUMYGUJA4PZCL21VN7UUJ7TF2P968OH7LRB2RR5ML6Y5XU2Y0QC' where id=44; -update noar ti set v2='1RXGUMTFHFSC2VP8HGPVKV4ZKJPBDQTQ4OK8UKMRHUKEMZGZ5CA6GKAZ5BHY5I3KM1I2Z6G28K8T9Q3QCII043K742N6KOJMWLFADKMBV59VAXE2TAC2P2K0KWLB3NX6V7TP5HPZUT60NGETTCOWFC299PQKE8VVGI6NRTKEKXMS6YXK5INJHL4W8XW2A269VR5OHMJDOE1HT1PUMYGUJA4PZCL21VN7UUJ7TF2P968OH7LRB2RR5ML6Y5XU2Y0QC' where id=44; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='NKL5I1GO2TCCE7RR4QIHHIX3QP0NX2BZXAD6DBSWXY2JJTWI63HF2C6P317LOR0CN6NIVMITIQ97NC06DJINN1UBDSAGHK1B3ZXW3N0YG8NH4OGEA9GINKXND5QQW00RE80DDCZ5658TIQQ3I0QTMZ24EIPN8GRY3L4WW2DJ44TJ2OUF2Y6YPE0469HYDISL1J3NGKMPB6GDSL01PXHSGT3E3P9O4QAT4RMR925FJRH3UJJM7LAAMAXH95TK1J0PC' where id=44; -update noar ti set v3='NKL5I1GO2TCCE7RR4QIHHIX3QP0NX2BZXAD6DBSWXY2JJTWI63HF2C6P317LOR0CN6NIVMITIQ97NC06DJINN1UBDSAGHK1B3ZXW3N0YG8NH4OGEA9GINKXND5QQW00RE80DDCZ5658TIQQ3I0QTMZ24EIPN8GRY3L4WW2DJ44TJ2OUF2Y6YPE0469HYDISL1J3NGKMPB6GDSL01PXHSGT3E3P9O4QAT4RMR925FJRH3UJJM7LAAMAXH95TK1J0PC' where id=44; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='QJLVI60CSI69F3T7M9J6LRGMMEF7QBZ140K30QJ6PCHLSWCP5PLFDNCLFY5GUVZYBJ26I3P4D8C7LF5QYD3XGY6HNMP3UKCLXV6IRN6WA50NIUDJ1K0V60YPORJCJUFURIPD5MA4SQWAQQ0B62M1GHJKEXMFMFAUE1VH2UEJ98G9075NEITENA5V94BBVPQ7DIGOTVDPEM6UN8OYY0L0LXDTYQO2BFO47XEO6U5SS0V4BMH8FTK537Z2JCZYEVFB0' where id=45; -update noar ti set v0='QJLVI60CSI69F3T7M9J6LRGMMEF7QBZ140K30QJ6PCHLSWCP5PLFDNCLFY5GUVZYBJ26I3P4D8C7LF5QYD3XGY6HNMP3UKCLXV6IRN6WA50NIUDJ1K0V60YPORJCJUFURIPD5MA4SQWAQQ0B62M1GHJKEXMFMFAUE1VH2UEJ98G9075NEITENA5V94BBVPQ7DIGOTVDPEM6UN8OYY0L0LXDTYQO2BFO47XEO6U5SS0V4BMH8FTK537Z2JCZYEVFB0' where id=45; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='0MED4MORQR2O4BOE2U9MH6LFRAIEP1HTR4MLPLYBRV3FZLH57T4O4XU8C3VWRILWECMJJZSYLVD9YAIG4OVOK06LUY002LNSLBMGVGDRHVE1R7G3I4H3J2SMWPHUV3WEMPDB0DSW72EFDQW1AEGV2GLP2KO7LZVPYDCSG0P69LZPLY7DPRPXSXOS2Z3OVXC8RX1X5EBFKRRSP9EFITVST68QO991P9GE0S19MUSDR23CLMQYP1HP47J29WVP2I1CA' where id=45; -update noar ti set v1='0MED4MORQR2O4BOE2U9MH6LFRAIEP1HTR4MLPLYBRV3FZLH57T4O4XU8C3VWRILWECMJJZSYLVD9YAIG4OVOK06LUY002LNSLBMGVGDRHVE1R7G3I4H3J2SMWPHUV3WEMPDB0DSW72EFDQW1AEGV2GLP2KO7LZVPYDCSG0P69LZPLY7DPRPXSXOS2Z3OVXC8RX1X5EBFKRRSP9EFITVST68QO991P9GE0S19MUSDR23CLMQYP1HP47J29WVP2I1CA' where id=45; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='BIG3O7ZSKC73JJW8LEXUOOEU3HZX9F3GTIXC08U7QQOGA74LOEUTY1T738SV9TAHINHU6JKK5RPW80NIXC9RHN6YHRJ1YBV8LEK4XARWJM3IMXEJP6PWB7WVB7EMDZKK42DSQ2NG7HGL6IX04EBK1HI6JJ16GW452PA6YAEU6H61HQ9T7LZPVGTBP6NMYKN7KPXOQKBOYG06LJ6WPSMN2S2NFKCDC1KDZD6ILJ83HSQSF5YCZDEWN3D5EC9AGYUW0' where id=45; -update noar ti set v2='BIG3O7ZSKC73JJW8LEXUOOEU3HZX9F3GTIXC08U7QQOGA74LOEUTY1T738SV9TAHINHU6JKK5RPW80NIXC9RHN6YHRJ1YBV8LEK4XARWJM3IMXEJP6PWB7WVB7EMDZKK42DSQ2NG7HGL6IX04EBK1HI6JJ16GW452PA6YAEU6H61HQ9T7LZPVGTBP6NMYKN7KPXOQKBOYG06LJ6WPSMN2S2NFKCDC1KDZD6ILJ83HSQSF5YCZDEWN3D5EC9AGYUW0' where id=45; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='OUYC9DKTGWZGFT4A2NRBER81EVCO2O3UA8VOUMDQJDSO52KN420UL6NE4PK94H9H62WM6THTLWK4QZXSKLVCZHRTUJ5S0FUHRKWTEFEP4FU62F1BYF23U2UQS091VV8AAACCECK0XFK85O1SHU03GZKA0TFODE1EFBOC3HTA42IIA3IS8W0YRUMPT4EQI4KI4V4I9T79ZV200J4O8IURWZHF070JWBUR702E9SEPNZ9Z95CVYHU10P1O0AMLGA9Y9' where id=45; -update noar ti set v3='OUYC9DKTGWZGFT4A2NRBER81EVCO2O3UA8VOUMDQJDSO52KN420UL6NE4PK94H9H62WM6THTLWK4QZXSKLVCZHRTUJ5S0FUHRKWTEFEP4FU62F1BYF23U2UQS091VV8AAACCECK0XFK85O1SHU03GZKA0TFODE1EFBOC3HTA42IIA3IS8W0YRUMPT4EQI4KI4V4I9T79ZV200J4O8IURWZHF070JWBUR702E9SEPNZ9Z95CVYHU10P1O0AMLGA9Y9' where id=45; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='PB6DJX0JC33IS056GK6KS818CFG0U90X8WVOUM4WYRM7RZXFZWM91LA9VF5LWY0ERXO349YZM8EUF7Y7J6DWDDZA4AANVSO5OVQL1GBQMOLL5V80V4TFLBQNN2X7YWOW5IY6FYWR4GK0XXG7NQ64P89YYADE3V27BWVJ9REG4PD33XEX4DINBT64RSDPO476HGLKW3RNH4SFCC3CL95A14DNWE17RSNBIX8U3590R7GXN2VB7LIG1A3H9T9Y58TCL' where id=46; -update noar ti set v0='PB6DJX0JC33IS056GK6KS818CFG0U90X8WVOUM4WYRM7RZXFZWM91LA9VF5LWY0ERXO349YZM8EUF7Y7J6DWDDZA4AANVSO5OVQL1GBQMOLL5V80V4TFLBQNN2X7YWOW5IY6FYWR4GK0XXG7NQ64P89YYADE3V27BWVJ9REG4PD33XEX4DINBT64RSDPO476HGLKW3RNH4SFCC3CL95A14DNWE17RSNBIX8U3590R7GXN2VB7LIG1A3H9T9Y58TCL' where id=46; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='F83WA3EXCAFGQ1J7S9CZTE399YABHZODSXR0D506Z2KEWZ7982MHMU8JTC6GCITMDVUG1ZQHEQT7MQHLVHKNE5719S6SUSLKZ9JGR224GHBZIVTD4AM09YISFRK1TLN7LMJSDIETBZRNR7U91Q13PP4V42MC6S0JSZRNAF83CN37Q2C4Y8O8TMJBICTR0ERJ4523EAJ3LKL6BFDVQVPUVWF0D5XABZXR75Z98NHSOELQ4U8XMX1727847VE2NNQQG' where id=46; -update noar ti set v1='F83WA3EXCAFGQ1J7S9CZTE399YABHZODSXR0D506Z2KEWZ7982MHMU8JTC6GCITMDVUG1ZQHEQT7MQHLVHKNE5719S6SUSLKZ9JGR224GHBZIVTD4AM09YISFRK1TLN7LMJSDIETBZRNR7U91Q13PP4V42MC6S0JSZRNAF83CN37Q2C4Y8O8TMJBICTR0ERJ4523EAJ3LKL6BFDVQVPUVWF0D5XABZXR75Z98NHSOELQ4U8XMX1727847VE2NNQQG' where id=46; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='VF2FHUXPTMJCPPC6ND5MY7L1YPUXSV4NWLQOE0COYQJ09WA940LR6V0M2FPD7LYW20UELPDE8BMUOKR1THQS1X1YBCO3KJW1C60K16ADIGLM05OEGLB5DSUZT3SDFQI2P3OQ4ONO95FI5UPLZE8ZVRRTVJQDUT6LEVFNRLMW67I2KVXCDU27L2CPS3KDEKRTFC7HIXEV6LFAYU74CCI7DAM2U76IX075N8HGAX8U8ZOWWXT10DNPI6LCY12LXO38W' where id=46; -update noar ti set v2='VF2FHUXPTMJCPPC6ND5MY7L1YPUXSV4NWLQOE0COYQJ09WA940LR6V0M2FPD7LYW20UELPDE8BMUOKR1THQS1X1YBCO3KJW1C60K16ADIGLM05OEGLB5DSUZT3SDFQI2P3OQ4ONO95FI5UPLZE8ZVRRTVJQDUT6LEVFNRLMW67I2KVXCDU27L2CPS3KDEKRTFC7HIXEV6LFAYU74CCI7DAM2U76IX075N8HGAX8U8ZOWWXT10DNPI6LCY12LXO38W' where id=46; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='1EB42JNSJZPAFH6Z91LNXM3U5AHA7KOW5QKPR1Y18HTDDJWRQIB4DE9A0BI8D77ZAS49I2Y0YV0U35XT5DRAM5DI644XMIFBLL6X7D0XE2E9IXSQUS4WI340PH3RUYCC7QPIJNH58XTKG0PFD3F2OZ43CASBUT9XDR9SA4ESDBDG6GUVZOQGV9ZF7GZ91HQV3ZPI9RCLUSKYJ4KRR1IPM3EZW9X9VD7ID06EVB9MR60WQF2K94VQS4V6FLP67EFE4' where id=46; -update noar ti set v3='1EB42JNSJZPAFH6Z91LNXM3U5AHA7KOW5QKPR1Y18HTDDJWRQIB4DE9A0BI8D77ZAS49I2Y0YV0U35XT5DRAM5DI644XMIFBLL6X7D0XE2E9IXSQUS4WI340PH3RUYCC7QPIJNH58XTKG0PFD3F2OZ43CASBUT9XDR9SA4ESDBDG6GUVZOQGV9ZF7GZ91HQV3ZPI9RCLUSKYJ4KRR1IPM3EZW9X9VD7ID06EVB9MR60WQF2K94VQS4V6FLP67EFE4' where id=46; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='AXWTUPJFKOTIA2IGWM4MX9SBKLG9Y2GM0NBE9DAISHQOS4I5ZYXRNXZ631JY9S48RY2IRQCBHF457P1G20HXOUHGYN54U06QE9KHLVDIEWR1IF34B12VVM5CUZLDYN5W6BM20EGYUJRV9S5AWO5WU7D14D5WOW7P0FPG9WXZLXPUPNTKS4VXESSISW6BM1P5UDIUGBII7370S9UJFXF4P0SA55RK9Y47P92FAE6QKG2HS528DU4VSL3H1N19MV5RB' where id=47; -update noar ti set v0='AXWTUPJFKOTIA2IGWM4MX9SBKLG9Y2GM0NBE9DAISHQOS4I5ZYXRNXZ631JY9S48RY2IRQCBHF457P1G20HXOUHGYN54U06QE9KHLVDIEWR1IF34B12VVM5CUZLDYN5W6BM20EGYUJRV9S5AWO5WU7D14D5WOW7P0FPG9WXZLXPUPNTKS4VXESSISW6BM1P5UDIUGBII7370S9UJFXF4P0SA55RK9Y47P92FAE6QKG2HS528DU4VSL3H1N19MV5RB' where id=47; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='U5HRVCAYKV0YX0Z7UFWFRFMGQZOL74CRFPA12V5RQHAOAB8WHT2GQTRWBBNMZ9ZEKM7P5CCGTNBYY5N3OHM520HNB01TRJBS9JRG6ZBGWEWNKPSNHJHB1B0Q4GWCDHLO24NMGC8KFGXKC7F8CIOA33PQODFSZCBLM55BE3P41S9COGW04H0KC767XWMUWDS879SA7MRDMXA09I0IUCXWZUWDDB5FP3Z3LXXYQ1JCDGXE9RQNO8PFGSU2GYBTPAXBU' where id=47; -update noar ti set v1='U5HRVCAYKV0YX0Z7UFWFRFMGQZOL74CRFPA12V5RQHAOAB8WHT2GQTRWBBNMZ9ZEKM7P5CCGTNBYY5N3OHM520HNB01TRJBS9JRG6ZBGWEWNKPSNHJHB1B0Q4GWCDHLO24NMGC8KFGXKC7F8CIOA33PQODFSZCBLM55BE3P41S9COGW04H0KC767XWMUWDS879SA7MRDMXA09I0IUCXWZUWDDB5FP3Z3LXXYQ1JCDGXE9RQNO8PFGSU2GYBTPAXBU' where id=47; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='SS4H5RR972GX6AC6L42C5NSQK1EPB2RZ3339ZIP8S6LBDZX9LNKF5D6DAX8EFV0HW3WCI7E4HPPYP3Q1GJRCD2F98FAR4D2526LBFVWF5F3X546B8C82D6KTC633L1BSWCKRF4MYFWOW4M9NVRAYQILXAS4XZ206T3H3K1R9V6EAH79XM6T1KJPH8N2CGY2G9JJM7ZVTKMWXXWWUMZG737VKB1441EA53REMQI9303XF96GS7JQRHAVMBCKFL15AE' where id=47; -update noar ti set v2='SS4H5RR972GX6AC6L42C5NSQK1EPB2RZ3339ZIP8S6LBDZX9LNKF5D6DAX8EFV0HW3WCI7E4HPPYP3Q1GJRCD2F98FAR4D2526LBFVWF5F3X546B8C82D6KTC633L1BSWCKRF4MYFWOW4M9NVRAYQILXAS4XZ206T3H3K1R9V6EAH79XM6T1KJPH8N2CGY2G9JJM7ZVTKMWXXWWUMZG737VKB1441EA53REMQI9303XF96GS7JQRHAVMBCKFL15AE' where id=47; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='OUX8FNHCWK1ZK9IHMWM8RMU1N006C2AFDN17KHGJJSOD8ZL3K7R6FWR8LIVSR0DLGHIFR4SO6EMXXOPZ3RZSEDQ70JJIW0COS50W4MIPUZ4PFZUHNDDBP3PFCMEQQIXUMN0E82BPR2DTMQEBLAZA7ON3QX7V612H4UO6H9ZK1Q9IQT4G95APIRXDNNLFZQTOZPWNNNJ67MHTRMN2T49PTZH9H55GXEE4PY6I551NZAVD5NRVOMXZ1MRQNWC2RY6W7' where id=47; -update noar ti set v3='OUX8FNHCWK1ZK9IHMWM8RMU1N006C2AFDN17KHGJJSOD8ZL3K7R6FWR8LIVSR0DLGHIFR4SO6EMXXOPZ3RZSEDQ70JJIW0COS50W4MIPUZ4PFZUHNDDBP3PFCMEQQIXUMN0E82BPR2DTMQEBLAZA7ON3QX7V612H4UO6H9ZK1Q9IQT4G95APIRXDNNLFZQTOZPWNNNJ67MHTRMN2T49PTZH9H55GXEE4PY6I551NZAVD5NRVOMXZ1MRQNWC2RY6W7' where id=47; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='MB5H1GDPS1VCHQ9PW1EDK84A367DLALIB92THATAP0MY21UZSLKIQMVALPITBWYZ1T6DKOMNMDJ26BP7P29QOFVY0Q1QGQ1DS4JPNKH5IJO1I1YRV3SSWBTFRF14ITYQD7FU7PV0IGUJ1A21XP8CF3ZJ9T7QB5T9OOAQPGJ0KVOM6GYJ7WA369TOV7TDRGQU1GEFYLSYRIWTTGCN6C07EQAYX9MF399JCZ3OBTDH9WDKFERXJGO95DAAIPAF0H4YK' where id=48; -update noar ti set v0='MB5H1GDPS1VCHQ9PW1EDK84A367DLALIB92THATAP0MY21UZSLKIQMVALPITBWYZ1T6DKOMNMDJ26BP7P29QOFVY0Q1QGQ1DS4JPNKH5IJO1I1YRV3SSWBTFRF14ITYQD7FU7PV0IGUJ1A21XP8CF3ZJ9T7QB5T9OOAQPGJ0KVOM6GYJ7WA369TOV7TDRGQU1GEFYLSYRIWTTGCN6C07EQAYX9MF399JCZ3OBTDH9WDKFERXJGO95DAAIPAF0H4YK' where id=48; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='WS7R7FP866JN1TTU7QFKA4URDL1IS3ENK8PL5YPOGILQ76VUFO9Y362VTAHA19J3VM4WMZON3U0KU80KCEL6G3AR9HXHFPJ98RP3YAD9IEZBTK7FU8L512R3Q3JO2EAFYLY7RONZTGZ44DF66IGNA0E2NKF8GBELZIRS55I7VOD7CTM3M60PDIACWRZAOA61NHC8BCWI8CDROUYKK0OHYGX18O71HZLHON3U3TAGPB9MJN3CCCSRW0EF0WS7H18HD' where id=48; -update noar ti set v1='WS7R7FP866JN1TTU7QFKA4URDL1IS3ENK8PL5YPOGILQ76VUFO9Y362VTAHA19J3VM4WMZON3U0KU80KCEL6G3AR9HXHFPJ98RP3YAD9IEZBTK7FU8L512R3Q3JO2EAFYLY7RONZTGZ44DF66IGNA0E2NKF8GBELZIRS55I7VOD7CTM3M60PDIACWRZAOA61NHC8BCWI8CDROUYKK0OHYGX18O71HZLHON3U3TAGPB9MJN3CCCSRW0EF0WS7H18HD' where id=48; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='OURRGQBAB4425PAAVQDZCSF3DEWUW1CVBB3C7UCCKJSWRR1D4IFS7P8UMI59MIO6YOAH3AJUAHBT05416W8WH5501TFITBJGRWQM61Q4IND4GH8L85ZBULJQOX54XT51AXUASK179GJRJWTIH8MXFORV4Z9Y9DIBBDF6VC5MWBCOVBLCQU6WX8PGP59B4G7HVT1TOA2ULTNJX5OAP6WVU92RI1M47SIHHPI6FV3F68KRO27T572PN5NIGL6TOG2BO' where id=48; -update noar ti set v2='OURRGQBAB4425PAAVQDZCSF3DEWUW1CVBB3C7UCCKJSWRR1D4IFS7P8UMI59MIO6YOAH3AJUAHBT05416W8WH5501TFITBJGRWQM61Q4IND4GH8L85ZBULJQOX54XT51AXUASK179GJRJWTIH8MXFORV4Z9Y9DIBBDF6VC5MWBCOVBLCQU6WX8PGP59B4G7HVT1TOA2ULTNJX5OAP6WVU92RI1M47SIHHPI6FV3F68KRO27T572PN5NIGL6TOG2BO' where id=48; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='M2GZYWGU6K2Z1BRUCDWQM4MX6YZ0VHVWKMVIH3YTKBQNXUYGIVEYKCIIA80205LX9OYPVGWFDOWUQBQENQQCT0CDEJ59HVFTTG7J4EG455TAXBDIHSZMZWKK9AZ6118VHSOGVEINMWWWWZUGGM79GAT5PZKI1WR8EA6J24XGGCOVKLK77UWA8LJ91GZLFEI0F0QUVBAGX4125SAJXK2HBKJMVD165V4W8DCLS3UCVWZXPPFDO6QBWHDXRKFKALR86' where id=48; -update noar ti set v3='M2GZYWGU6K2Z1BRUCDWQM4MX6YZ0VHVWKMVIH3YTKBQNXUYGIVEYKCIIA80205LX9OYPVGWFDOWUQBQENQQCT0CDEJ59HVFTTG7J4EG455TAXBDIHSZMZWKK9AZ6118VHSOGVEINMWWWWZUGGM79GAT5PZKI1WR8EA6J24XGGCOVKLK77UWA8LJ91GZLFEI0F0QUVBAGX4125SAJXK2HBKJMVD165V4W8DCLS3UCVWZXPPFDO6QBWHDXRKFKALR86' where id=48; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='AO8D9J3S7JLAIEP1567XBBM1YRUQ7R9TTBOOUCNW1WWEBVB43X0CU7VO90UC42FQUATL201RCV6QF476ELOBZEFI2J7RJZ94OR9CFTJZ1GZRJ0BO0MFLYIQD8YQ79NTMYM6P768O0GENJT4HQTMMITS5Z6TE1HY1EYTH12C0WIXI3H10BDQHOMQH9XPWN7PKBNRKVSEDQBANGB90IARLZNRP77IBID3YRG3LZUAF12DY7HJ1CCK05TR5PVGPFTZ03' where id=49; -update noar ti set v0='AO8D9J3S7JLAIEP1567XBBM1YRUQ7R9TTBOOUCNW1WWEBVB43X0CU7VO90UC42FQUATL201RCV6QF476ELOBZEFI2J7RJZ94OR9CFTJZ1GZRJ0BO0MFLYIQD8YQ79NTMYM6P768O0GENJT4HQTMMITS5Z6TE1HY1EYTH12C0WIXI3H10BDQHOMQH9XPWN7PKBNRKVSEDQBANGB90IARLZNRP77IBID3YRG3LZUAF12DY7HJ1CCK05TR5PVGPFTZ03' where id=49; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='XCKZM3OD2Z7IVD51S1UZKBLJOBHZ21CA37Z0ZLXXXU9WWPGHHKF8B7WIISUTNZ9XV48UMBS92BGSUKW1G1K0AEND4PEC7X5TUIGYOSOTUELEV5GRAO686I6SLPHO3HDM0JX9NO3BRNE44IZ9EKY0VR225LWRSLP8Z6OZTGN2O7BAD9DBRRS8VZ3O87ZDZO8X2UAS7UCFUF8T7PZ0BSAU2T4X91N9EXA8FDYQSNGKRMJOC1Y0IJA6Q6P8H1MBRQTLZ' where id=49; -update noar ti set v1='XCKZM3OD2Z7IVD51S1UZKBLJOBHZ21CA37Z0ZLXXXU9WWPGHHKF8B7WIISUTNZ9XV48UMBS92BGSUKW1G1K0AEND4PEC7X5TUIGYOSOTUELEV5GRAO686I6SLPHO3HDM0JX9NO3BRNE44IZ9EKY0VR225LWRSLP8Z6OZTGN2O7BAD9DBRRS8VZ3O87ZDZO8X2UAS7UCFUF8T7PZ0BSAU2T4X91N9EXA8FDYQSNGKRMJOC1Y0IJA6Q6P8H1MBRQTLZ' where id=49; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='HX8HWM57ZA4REZHCZ5QIFX3EHDZ5VOQALTPQ9RGTUREZD61Q2EE71ARF7Q070OECZOR74YX0VMXQ8OUOWG5U1JYJXRKLFY9OKJ1W5G19WZN3RYNTLBJTFWV66CCRGWCDS984LVZ2MX00PFU5O1PEVR6NZEDN91BYU3YNR88HI3VZ1L926IYZF7UTJOUJ7J3I6LT8KAOTF0EJXK9K2MYTAHJM430XVQ3CX1Q8D59FBWJCBBYD285SMF9MGHOZUMJX2' where id=49; -update noar ti set v2='HX8HWM57ZA4REZHCZ5QIFX3EHDZ5VOQALTPQ9RGTUREZD61Q2EE71ARF7Q070OECZOR74YX0VMXQ8OUOWG5U1JYJXRKLFY9OKJ1W5G19WZN3RYNTLBJTFWV66CCRGWCDS984LVZ2MX00PFU5O1PEVR6NZEDN91BYU3YNR88HI3VZ1L926IYZF7UTJOUJ7J3I6LT8KAOTF0EJXK9K2MYTAHJM430XVQ3CX1Q8D59FBWJCBBYD285SMF9MGHOZUMJX2' where id=49; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='GNK7N79NMO26ME4T9KR9W4L8G8252XOYJVKGG3UF8K0CXS9YKT7V75YBZHMDSL8XVGGLI50SSDKX0MPDVRR91YGM3YWKOBI9ZKDZ6YLMX6XST30TX98XKUZHOE2PIR4P3ND98UAVQ0N1TDXZ8979OCOG9CZYVQMT3AC72VQZ9SN78WW41GEKAODMR7FI1DXR91AIBOAQ0VS6QEIO5Q3EQHJKR3QD312WC3OQ5RHX45ELD10QNZFLR81V8DR8IJ8WD' where id=49; -update noar ti set v3='GNK7N79NMO26ME4T9KR9W4L8G8252XOYJVKGG3UF8K0CXS9YKT7V75YBZHMDSL8XVGGLI50SSDKX0MPDVRR91YGM3YWKOBI9ZKDZ6YLMX6XST30TX98XKUZHOE2PIR4P3ND98UAVQ0N1TDXZ8979OCOG9CZYVQMT3AC72VQZ9SN78WW41GEKAODMR7FI1DXR91AIBOAQ0VS6QEIO5Q3EQHJKR3QD312WC3OQ5RHX45ELD10QNZFLR81V8DR8IJ8WD' where id=49; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='37HT7BYR78EERPH9RVTTIOBKTLDDE9S7WVA8ZUA76MVVW2Q10E6AT0BNWCSDFB0B0HJ802F2LN6CGQJ0DU6DJ8G37WONMW0KHOFJQOVHT3YQN3FR3IFT6L90958O9AMBASZ2CEJDJT8GV0XQ67ZYC7T6PJHYS7OSITUI1126TMFUW3ADSJZBKQKJQR5B2PGVABS2V62ZKZRQDC48YAV2HV7XOGJRQQAF736COH274QB9Z0Y6M9GCQHFP9PXWRNNMH' where id=50; -update noar ti set v0='37HT7BYR78EERPH9RVTTIOBKTLDDE9S7WVA8ZUA76MVVW2Q10E6AT0BNWCSDFB0B0HJ802F2LN6CGQJ0DU6DJ8G37WONMW0KHOFJQOVHT3YQN3FR3IFT6L90958O9AMBASZ2CEJDJT8GV0XQ67ZYC7T6PJHYS7OSITUI1126TMFUW3ADSJZBKQKJQR5B2PGVABS2V62ZKZRQDC48YAV2HV7XOGJRQQAF736COH274QB9Z0Y6M9GCQHFP9PXWRNNMH' where id=50; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='M2UYZV7J77TIQRXJXXOIV7AHONHGSGR85FSDETGPJAGIN4WP7WA4INPXCC1UKW38MYWIMPZOQVM7BQJXKVBOB9LRVL2FNAKP3U6SKTVQ4VAW2PNKRNBMJ9SXLJNBWBUJEUXFPL30SXBW2PVKII5AGTPT9MGL2NXMCGX23PRU5O0769FS4Z9AYQ9CCWKZ4FB3H265QPRGL2JZ6DG4U4WJUIA5TAJB439F2APCSHVGCUV0SPVUGUADCS33MIZTBHM3J' where id=50; -update noar ti set v1='M2UYZV7J77TIQRXJXXOIV7AHONHGSGR85FSDETGPJAGIN4WP7WA4INPXCC1UKW38MYWIMPZOQVM7BQJXKVBOB9LRVL2FNAKP3U6SKTVQ4VAW2PNKRNBMJ9SXLJNBWBUJEUXFPL30SXBW2PVKII5AGTPT9MGL2NXMCGX23PRU5O0769FS4Z9AYQ9CCWKZ4FB3H265QPRGL2JZ6DG4U4WJUIA5TAJB439F2APCSHVGCUV0SPVUGUADCS33MIZTBHM3J' where id=50; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='FP83NGEV9S1FG0GW9R022EWXKFSLJ5ERTIEK2KO05FGPNPUAVYGNKNNQLVPYXS2C988FHSVGJ3UGXJXTE1MAC8DZAAQ6XM71XR2HHFSYQ4DJ3EHWKSTRU72XGAU3A1Z95J1UL4CYFM0DKZDCYCKXOZETZX37EPCZ1JOTAMLFM0BUQC4BKNGUK5K82FKVXR7Z9RN8G1UQKF2A7MHV22PZXYERT0ICT3QD9C1JFN2XMROQPEAONYCABVRR8HNF6KHEN' where id=50; -update noar ti set v2='FP83NGEV9S1FG0GW9R022EWXKFSLJ5ERTIEK2KO05FGPNPUAVYGNKNNQLVPYXS2C988FHSVGJ3UGXJXTE1MAC8DZAAQ6XM71XR2HHFSYQ4DJ3EHWKSTRU72XGAU3A1Z95J1UL4CYFM0DKZDCYCKXOZETZX37EPCZ1JOTAMLFM0BUQC4BKNGUK5K82FKVXR7Z9RN8G1UQKF2A7MHV22PZXYERT0ICT3QD9C1JFN2XMROQPEAONYCABVRR8HNF6KHEN' where id=50; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='YEV58MS7K3YGU404NGCT58AWBHF392C5LBUJGHP9PZSB9IIQAFBH8S74TQ6HSMO4NZDULW4H5PKMZ2KUTESKFC93GRP1O83QSG85ILG4WPZNW778PTQD8GHO2ILAVQX1T72GXYXE46ELH5JOQOHB1IJMIXQ7SQMB38QR58PFFTGOT626JM1C4TWN5RROFMEPDENLHTD0PONBFP6PGQQCLWUNGW3KCHM9PBWC4QYSXOVWN8HCHIYWVT4S9MQZXZXTM' where id=50; -update noar ti set v3='YEV58MS7K3YGU404NGCT58AWBHF392C5LBUJGHP9PZSB9IIQAFBH8S74TQ6HSMO4NZDULW4H5PKMZ2KUTESKFC93GRP1O83QSG85ILG4WPZNW778PTQD8GHO2ILAVQX1T72GXYXE46ELH5JOQOHB1IJMIXQ7SQMB38QR58PFFTGOT626JM1C4TWN5RROFMEPDENLHTD0PONBFP6PGQQCLWUNGW3KCHM9PBWC4QYSXOVWN8HCHIYWVT4S9MQZXZXTM' where id=50; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='L02SLSQNFP6MNF48RGP7WVWH0TWBROBHU26EP167Q5BUMEZQHDDJZ0G5TVDM0QHA9ZV4Z0OB96NBPQOGL30EBXWX2Z30AF2F9W3JPQXLR9SAPB0YIHMPK9NPB1MGL9SQU1OPKRHFJU2GNBWVQQRG2IYPX18UITGOLZKZH5SHDBH3UTRZ54INUXBL9SK7KL83VSH0D6OSX6RHAJ9JZZJW9JJ3G5HUZE4TWNJS5NNLOQ2OTSOVO3QB015LLWAHKJ8T2' where id=51; -update noar ti set v0='L02SLSQNFP6MNF48RGP7WVWH0TWBROBHU26EP167Q5BUMEZQHDDJZ0G5TVDM0QHA9ZV4Z0OB96NBPQOGL30EBXWX2Z30AF2F9W3JPQXLR9SAPB0YIHMPK9NPB1MGL9SQU1OPKRHFJU2GNBWVQQRG2IYPX18UITGOLZKZH5SHDBH3UTRZ54INUXBL9SK7KL83VSH0D6OSX6RHAJ9JZZJW9JJ3G5HUZE4TWNJS5NNLOQ2OTSOVO3QB015LLWAHKJ8T2' where id=51; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='TXPG9ZZWW0R5EWHR1AWDMBAYHOF2JEYO1Z28SQ21V1ECQFW9L20ITYB0BOPWA6T9XEY56FTQWBPCZZDQMZ3XOCRWH6H0C7Z4L879UA8B1KLQK0JOMLK0V67HO1D181Q1CAAPEXNQ0ZA9IZXX8XBASO844UN3RGXCTA1YU53AE6T37TQ383UZPWTGBAZ8GHZ5MZWJHQ4I5GR1DLPDHW8XC6OA04R6BTBIEHLSYXYZX1X7QNI1R66QAW85FZWP4SYSX' where id=51; -update noar ti set v1='TXPG9ZZWW0R5EWHR1AWDMBAYHOF2JEYO1Z28SQ21V1ECQFW9L20ITYB0BOPWA6T9XEY56FTQWBPCZZDQMZ3XOCRWH6H0C7Z4L879UA8B1KLQK0JOMLK0V67HO1D181Q1CAAPEXNQ0ZA9IZXX8XBASO844UN3RGXCTA1YU53AE6T37TQ383UZPWTGBAZ8GHZ5MZWJHQ4I5GR1DLPDHW8XC6OA04R6BTBIEHLSYXYZX1X7QNI1R66QAW85FZWP4SYSX' where id=51; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='90I06DOQD2WMCSHO3DMYUX0JX8E13HRTF4G00Z6P2J33BLLUB4105474BIDK426DO8NLVS8V17G7V9RX9AH292GF4BUZNEECW6Z496HWG5U7LXEFEW42WA3QV5CKSQNVIOFYZVZUD1MRU82J5WPNLUFIBAW4C2APG5LR3SR0WKN6RWS83YM23FXNWPBUB6OU49EKP9M5B64NI8QABYG1D8V4CROHCQRZMXF5BT23YLS5RGVWCNOHZ3Q4VNGGMKJQR' where id=51; -update noar ti set v2='90I06DOQD2WMCSHO3DMYUX0JX8E13HRTF4G00Z6P2J33BLLUB4105474BIDK426DO8NLVS8V17G7V9RX9AH292GF4BUZNEECW6Z496HWG5U7LXEFEW42WA3QV5CKSQNVIOFYZVZUD1MRU82J5WPNLUFIBAW4C2APG5LR3SR0WKN6RWS83YM23FXNWPBUB6OU49EKP9M5B64NI8QABYG1D8V4CROHCQRZMXF5BT23YLS5RGVWCNOHZ3Q4VNGGMKJQR' where id=51; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='XSVOFDOIVFWQXX8CTHTBUFDSPDAGU8OMD18HUFYEY4TFA04CSAMLQZGHSO29VDQPQTKTP1JQGGHWJJNH1K30633EZP20DDPXD7B6SLPNACGV1U6CVRZX76FA6OVWLP1ZQ0UNG34NHL7X8L8IPK03YT9TN24K0C5F5XWY9LIJPOD70G4XJBXZBZLWDCHC15BY6VG4O7H1WCH90F06YHJ1KXDQW7S52BBETH613H6RLU5MPVT2VAVJYWMRE7F9G6F3E' where id=51; -update noar ti set v3='XSVOFDOIVFWQXX8CTHTBUFDSPDAGU8OMD18HUFYEY4TFA04CSAMLQZGHSO29VDQPQTKTP1JQGGHWJJNH1K30633EZP20DDPXD7B6SLPNACGV1U6CVRZX76FA6OVWLP1ZQ0UNG34NHL7X8L8IPK03YT9TN24K0C5F5XWY9LIJPOD70G4XJBXZBZLWDCHC15BY6VG4O7H1WCH90F06YHJ1KXDQW7S52BBETH613H6RLU5MPVT2VAVJYWMRE7F9G6F3E' where id=51; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='L0ZPPT7SS7BAVC7TR9C68FWR0WAA78EN1SX4R31ZI74CRBA4L35LEZZEJVDIZ0SJZBIRDBF2RA1RE2U5A5O1UCP9L7EBL8W7A3ZQ4ES2XZ83ZQW16YQUA1UDOFB3ZUHLEJVAOR54S3QBZQANO20I9KJCXJAS5YT82MTXN1CIGWH2JVIYHOB5V0BEB5MLQ0HHG6IXEI5GONM6YZA01QHJR8MLEPRVNM8DBUYVQ473KB54GF5LO35OG0UTT4Y05DLNL' where id=52; -update noar ti set v0='L0ZPPT7SS7BAVC7TR9C68FWR0WAA78EN1SX4R31ZI74CRBA4L35LEZZEJVDIZ0SJZBIRDBF2RA1RE2U5A5O1UCP9L7EBL8W7A3ZQ4ES2XZ83ZQW16YQUA1UDOFB3ZUHLEJVAOR54S3QBZQANO20I9KJCXJAS5YT82MTXN1CIGWH2JVIYHOB5V0BEB5MLQ0HHG6IXEI5GONM6YZA01QHJR8MLEPRVNM8DBUYVQ473KB54GF5LO35OG0UTT4Y05DLNL' where id=52; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='PWI8CZ9UWFWBDES4AVY04QUTPTF2QC3KERXSNWUJS1U636EP6KEEOTXSDLW4QVF7Z662Z3V7XRTJEA4PMQ1NAH8H3OLEUVQ7IAKMJD87286B2LVQQ63TD6YVG2H1XFY5TPLEVBUJYGK7IL7JI140LJ3Z110LQ1YZPIH0NC63DM1ZIJI9FY43P9NXYF75XJHPVQMPWTD1AVRAB8O8SRZ9KICCNQ7X03LVYWOV7D4VKB1ISDAXFLOVCSR4P875AQAWJ' where id=52; -update noar ti set v1='PWI8CZ9UWFWBDES4AVY04QUTPTF2QC3KERXSNWUJS1U636EP6KEEOTXSDLW4QVF7Z662Z3V7XRTJEA4PMQ1NAH8H3OLEUVQ7IAKMJD87286B2LVQQ63TD6YVG2H1XFY5TPLEVBUJYGK7IL7JI140LJ3Z110LQ1YZPIH0NC63DM1ZIJI9FY43P9NXYF75XJHPVQMPWTD1AVRAB8O8SRZ9KICCNQ7X03LVYWOV7D4VKB1ISDAXFLOVCSR4P875AQAWJ' where id=52; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='CI0801VOLLZWCYYZVBL3M0PDXTMXOOHTRZWFNF7XSIZRL6E8U22KU09WH08Q9FBEJG9M9QY9NA89G3LBB8JAOUPO1LI1ZX49BMV6P7YQHDBL8G9ABZISV2BTA0G7HOOT6UKIM67JOFLVDQ137JM5OUPQLLSPX1Z4SWV2OD3L6LAPTWFF7QY9YTPVWRWDEBRWC2GZ5V52J3JUAWGF1DG93ODJE09FMZ8YEZ7U13HNUA60SX1BTD1SJS094E07FPX33' where id=52; -update noar ti set v2='CI0801VOLLZWCYYZVBL3M0PDXTMXOOHTRZWFNF7XSIZRL6E8U22KU09WH08Q9FBEJG9M9QY9NA89G3LBB8JAOUPO1LI1ZX49BMV6P7YQHDBL8G9ABZISV2BTA0G7HOOT6UKIM67JOFLVDQ137JM5OUPQLLSPX1Z4SWV2OD3L6LAPTWFF7QY9YTPVWRWDEBRWC2GZ5V52J3JUAWGF1DG93ODJE09FMZ8YEZ7U13HNUA60SX1BTD1SJS094E07FPX33' where id=52; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='CAS3QUFXWJLZ11XBP5SBRBWCHRB4YTFVDK8CRBS4NX9P0UHDRVR9BWF8GC0FVTZO3N4QYJE85DTSZ2Q9RTMR2Z32EFMEC9IA9CGP1LO27L110BMCPVH0I4E96Y8K7Y41A2L8XSYQVQ3CTMDS99M9WOAGIH5Q9KJOX3J2MMBQSR4MJA7V3DFZ0ZNM2QW9ACEN14MBY2KIFTQJVN1A6W0YSE6V014MDIPRRYAHTRGL5431V84L1GRCS1LIKJ4SIOGWX' where id=52; -update noar ti set v3='CAS3QUFXWJLZ11XBP5SBRBWCHRB4YTFVDK8CRBS4NX9P0UHDRVR9BWF8GC0FVTZO3N4QYJE85DTSZ2Q9RTMR2Z32EFMEC9IA9CGP1LO27L110BMCPVH0I4E96Y8K7Y41A2L8XSYQVQ3CTMDS99M9WOAGIH5Q9KJOX3J2MMBQSR4MJA7V3DFZ0ZNM2QW9ACEN14MBY2KIFTQJVN1A6W0YSE6V014MDIPRRYAHTRGL5431V84L1GRCS1LIKJ4SIOGWX' where id=52; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='F9Y7SXJEGYF82G7OCV8JBC0XC895SAD409K42N9FPADHWKIEYT7WH0IZQ1SYEXBD22XV4FTGBTUO9JTI9KCTSX5W0F0AN3Z1I89NHWIYNQTCZ9QLO6BLART4L3HLEYR7PPHX0651ABD7UZL587JFGND5AJHJZJMBR8INF5UUDR86PZIOZQCNIIELH9D59C9BYKUT1IVOWWLCRRMXA9ZKIQNDBMIQ2V7OXU8A5MMSB4NFQVP1SLEZTCWWA018RSGQX' where id=53; -update noar ti set v0='F9Y7SXJEGYF82G7OCV8JBC0XC895SAD409K42N9FPADHWKIEYT7WH0IZQ1SYEXBD22XV4FTGBTUO9JTI9KCTSX5W0F0AN3Z1I89NHWIYNQTCZ9QLO6BLART4L3HLEYR7PPHX0651ABD7UZL587JFGND5AJHJZJMBR8INF5UUDR86PZIOZQCNIIELH9D59C9BYKUT1IVOWWLCRRMXA9ZKIQNDBMIQ2V7OXU8A5MMSB4NFQVP1SLEZTCWWA018RSGQX' where id=53; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='MRBFQBTUE41O7ZNL2YQ81SOWIEF1V4Y8UNVZ3K8MWCNCRAYNTCMHFEG3KAP3I08FIN3TJPGJTW6BH8FH06Y97N9SWOQNE5BGKNLNVRRQPSW4VBPT7W1SGK5ZXXA1341JCE3QB83S8BOMCXZC5MU6V8XVXEO5NIK2CC4EU8VMPSDAHKNU22M8RXP4KU2MYXEENQWDXYBSF41EAW177715PGQ7GD0M2O2A21KXFMZ259FDPJFP0VXJOEYF79255ZCQ4' where id=53; -update noar ti set v1='MRBFQBTUE41O7ZNL2YQ81SOWIEF1V4Y8UNVZ3K8MWCNCRAYNTCMHFEG3KAP3I08FIN3TJPGJTW6BH8FH06Y97N9SWOQNE5BGKNLNVRRQPSW4VBPT7W1SGK5ZXXA1341JCE3QB83S8BOMCXZC5MU6V8XVXEO5NIK2CC4EU8VMPSDAHKNU22M8RXP4KU2MYXEENQWDXYBSF41EAW177715PGQ7GD0M2O2A21KXFMZ259FDPJFP0VXJOEYF79255ZCQ4' where id=53; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='YFRBEYDP8189782U16KDH6YKK1PFYYLSPF6ZZBJR4YZ6HY9U1NJWPBUQNKZM95U21272FISYKZW9S4NZQEBIDFKN2IO58LPMTT2M8E6TMQDEVQQQ2CY19IM8MHN1FY04947C9KTQJS6WY20O0K1WKJCLOQWPNPB64FPIACPEC00RVJSSSS7B7QFFWXE2U2NBR6O9EOBTUFG72ZJWNE9OW6C5CCJ9J1PNKBHXZ8W2GRPPML059CJ65FJTQP0TA6JXT' where id=53; -update noar ti set v2='YFRBEYDP8189782U16KDH6YKK1PFYYLSPF6ZZBJR4YZ6HY9U1NJWPBUQNKZM95U21272FISYKZW9S4NZQEBIDFKN2IO58LPMTT2M8E6TMQDEVQQQ2CY19IM8MHN1FY04947C9KTQJS6WY20O0K1WKJCLOQWPNPB64FPIACPEC00RVJSSSS7B7QFFWXE2U2NBR6O9EOBTUFG72ZJWNE9OW6C5CCJ9J1PNKBHXZ8W2GRPPML059CJ65FJTQP0TA6JXT' where id=53; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='LVM1V0I9MZ3SOPEVCLGTBIIACYI2SUING6FEEFWK5WR0T6WHQAB8RD0M2ILS5S1GYV34Z03JEK1Z4BTQUM62CYQTMHJUYU4H1YHQPEERDXYTENM3BGALT5FIFPYP7X0JL98OY9QVKF27BTAA8PWS8BW7BAL71UASZLDQMF8U01S5EBUM0DIC5NAI5F19OTDEKKI7KBHMV51317E4LMHEGGAM22X04PHJLL8NN6PX9UYHS6B8687FEVY6MIC7YBJXZ' where id=53; -update noar ti set v3='LVM1V0I9MZ3SOPEVCLGTBIIACYI2SUING6FEEFWK5WR0T6WHQAB8RD0M2ILS5S1GYV34Z03JEK1Z4BTQUM62CYQTMHJUYU4H1YHQPEERDXYTENM3BGALT5FIFPYP7X0JL98OY9QVKF27BTAA8PWS8BW7BAL71UASZLDQMF8U01S5EBUM0DIC5NAI5F19OTDEKKI7KBHMV51317E4LMHEGGAM22X04PHJLL8NN6PX9UYHS6B8687FEVY6MIC7YBJXZ' where id=53; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='ADFWI0G6MCB2ET4MQVWSOGJWVZ0RUNCG0SMSC2U35CLW3DWP8K6W3ZKM6N1TCPY4U82GOI7LZFTWTG4E087X4VPKE0L3HPNBMTGAKYMVZZ03TIB2GM07C4JFOTT05TOCV7RV25KT45TM30CEK86YW904O6J2O5DOFEYK5U3CEUB319TWTF3JJ4PPSWOQVHFOTPI0HT5BYI6AX3FUUAN4LPV8I9NJ5VLYCJZC3OH81MS98UGR5GHBHLDA8W28N97M5' where id=54; -update noar ti set v0='ADFWI0G6MCB2ET4MQVWSOGJWVZ0RUNCG0SMSC2U35CLW3DWP8K6W3ZKM6N1TCPY4U82GOI7LZFTWTG4E087X4VPKE0L3HPNBMTGAKYMVZZ03TIB2GM07C4JFOTT05TOCV7RV25KT45TM30CEK86YW904O6J2O5DOFEYK5U3CEUB319TWTF3JJ4PPSWOQVHFOTPI0HT5BYI6AX3FUUAN4LPV8I9NJ5VLYCJZC3OH81MS98UGR5GHBHLDA8W28N97M5' where id=54; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='0SVFOEMGZ3H24E1ATRK5UFXXZ7N9TVDSA59V4OCY2EWR5PL5L6QQLPMZNW5GDK3L7CEK4AJ05G4NCVBKMR4AFDAFYVOX96X6ZMFTXIDQ1M3XER1W8FHVW69A5B604KGHNBSPS03NSY4E54PAYFD8Y4284H2VN2CD7XE35MIQTOZDOK77PP8IFRT45PN8JX9OIJSNGI2XKJW5X96GN1XUUPO4B0NPQX6VT3QZC7I6A2TXJ4VMT8DW00P9EQM9BGMQM' where id=54; -update noar ti set v1='0SVFOEMGZ3H24E1ATRK5UFXXZ7N9TVDSA59V4OCY2EWR5PL5L6QQLPMZNW5GDK3L7CEK4AJ05G4NCVBKMR4AFDAFYVOX96X6ZMFTXIDQ1M3XER1W8FHVW69A5B604KGHNBSPS03NSY4E54PAYFD8Y4284H2VN2CD7XE35MIQTOZDOK77PP8IFRT45PN8JX9OIJSNGI2XKJW5X96GN1XUUPO4B0NPQX6VT3QZC7I6A2TXJ4VMT8DW00P9EQM9BGMQM' where id=54; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='KU18A9HPHCO93FHXGDH4MMSSX2U9MASPMNU6XSGK5FT2KEAIFSEM0CA4M3VO9OPIVG29S5Y4K40G53SOTEZ2R521PEWY6L185E5M1456W8EAVCIWXZU5WCPB31094WT5IVU7TNPZ8FIKNH5ALMWSE5AK0UZ5NRFF80GSRYKPYZTECQYC7NXS6PLESLBES36K2T6HT2RDUMWWPR2KQMAPNPYNIK1HFXCU3AMYKAI97D74O55E5OGHNWNLXOXGURD3B' where id=54; -update noar ti set v2='KU18A9HPHCO93FHXGDH4MMSSX2U9MASPMNU6XSGK5FT2KEAIFSEM0CA4M3VO9OPIVG29S5Y4K40G53SOTEZ2R521PEWY6L185E5M1456W8EAVCIWXZU5WCPB31094WT5IVU7TNPZ8FIKNH5ALMWSE5AK0UZ5NRFF80GSRYKPYZTECQYC7NXS6PLESLBES36K2T6HT2RDUMWWPR2KQMAPNPYNIK1HFXCU3AMYKAI97D74O55E5OGHNWNLXOXGURD3B' where id=54; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='PCQKPKVK305WUYEQ6YG3BVVQPEE58UD3ST6IV3406AS8EWQX064ZB1724J4M4EA4I9BF6L9KZB774JLF8SUPP49DQL641SNIR01T2SDT9VE84UNTJBPWDMECC4A3V0M5NLDL08ZYXLYJ0H4QVPXVUHXB5IWSVI06ZXGYM18THWEXGURXRCP5YBGJB0CFRQ43IVWT8O2NOWZ2T3XLUZEP5N5S2YOK08686MM08DQULZZCJ8DMCTQK7Z6LQA7J0ZGNS' where id=54; -update noar ti set v3='PCQKPKVK305WUYEQ6YG3BVVQPEE58UD3ST6IV3406AS8EWQX064ZB1724J4M4EA4I9BF6L9KZB774JLF8SUPP49DQL641SNIR01T2SDT9VE84UNTJBPWDMECC4A3V0M5NLDL08ZYXLYJ0H4QVPXVUHXB5IWSVI06ZXGYM18THWEXGURXRCP5YBGJB0CFRQ43IVWT8O2NOWZ2T3XLUZEP5N5S2YOK08686MM08DQULZZCJ8DMCTQK7Z6LQA7J0ZGNS' where id=54; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='196RZHXSWGM81DT1VMWLAC2Y17JN2SP7FL9RRY3RDVXAEZYR5L61IGN2I2WXLBDXC6Z8DOU2OV8USNYWUPJA7JMLSNN3AG4DUM0A7XD8X9OPRAQDFKWJ6JNRQ8X2O9ERIR6A8VPUHEMTK6Q2J03DIZ7LYQ0XBIMMJ1JI65R3DW677LWG4Y560KMTQEQFHL7ROUASJ4UQWPNF6MDJG2W26KQOOCERQHA9JMWMGDLET359PK0Y4C1EPSES4PPPZL8YO' where id=55; -update noar ti set v0='196RZHXSWGM81DT1VMWLAC2Y17JN2SP7FL9RRY3RDVXAEZYR5L61IGN2I2WXLBDXC6Z8DOU2OV8USNYWUPJA7JMLSNN3AG4DUM0A7XD8X9OPRAQDFKWJ6JNRQ8X2O9ERIR6A8VPUHEMTK6Q2J03DIZ7LYQ0XBIMMJ1JI65R3DW677LWG4Y560KMTQEQFHL7ROUASJ4UQWPNF6MDJG2W26KQOOCERQHA9JMWMGDLET359PK0Y4C1EPSES4PPPZL8YO' where id=55; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='F8GQ95HDP1DFXK5LHOAHGHVDVSBQI977RAZGXJVU6THHC0TWY7IM33BDT7M213XPCSO9D1XBBZWRX330Z2S2FOQY3XG190Q0H53ZG0XZCTIBM1L3T2NG0X8XBU018QFVL2BBSJMKIIVFJVPT5U01VN196NUZJ1OOEWC0BTK48UG4Y4J6BOG1TF4LFHFTX62ABBGSF0UP0OWTSG0GOBIUQYRSF04AJYHT9O78M11YEFZUQGJKB2SW26WSLLB8VPYS8' where id=55; -update noar ti set v1='F8GQ95HDP1DFXK5LHOAHGHVDVSBQI977RAZGXJVU6THHC0TWY7IM33BDT7M213XPCSO9D1XBBZWRX330Z2S2FOQY3XG190Q0H53ZG0XZCTIBM1L3T2NG0X8XBU018QFVL2BBSJMKIIVFJVPT5U01VN196NUZJ1OOEWC0BTK48UG4Y4J6BOG1TF4LFHFTX62ABBGSF0UP0OWTSG0GOBIUQYRSF04AJYHT9O78M11YEFZUQGJKB2SW26WSLLB8VPYS8' where id=55; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='K1I0Z2B7ZN3QBN086EHRGA27VHY9RO2YB2H681THW0HPUB497APGDOZOKMYHVDQBELBRB1JA75WE4402XI00J21TC82YF1W9KSXSYR9ESND2YSC1R1DP3ZRRNVV1RACHXA6470W0BFH65EJMWRUYK6IIKJZAZPLRH5FBYU31OBSJE9UBAU2M26IZXKVI0CKWQVUHJ3HX3C2X0DFYDQLPY9KPFRBPOO05XJYLXB7O3WWFOX7XBIPV1P2TRJC46LVVG' where id=55; -update noar ti set v2='K1I0Z2B7ZN3QBN086EHRGA27VHY9RO2YB2H681THW0HPUB497APGDOZOKMYHVDQBELBRB1JA75WE4402XI00J21TC82YF1W9KSXSYR9ESND2YSC1R1DP3ZRRNVV1RACHXA6470W0BFH65EJMWRUYK6IIKJZAZPLRH5FBYU31OBSJE9UBAU2M26IZXKVI0CKWQVUHJ3HX3C2X0DFYDQLPY9KPFRBPOO05XJYLXB7O3WWFOX7XBIPV1P2TRJC46LVVG' where id=55; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='F9TSKR4WWEF9ZUV53CTC9GHA1TGHF4885ZJYEMBDXG0NO1NBCJFLCXMFAC7QJEW0QA2V9R4QEH1SS5UD5IBU84LYZ13XL3NV6Q1V2PU6HAOTTSKYT4YHA2862JXZ5CED5SIJK8ZJ877XIR9F47BMGE2Y40J2H43N61GO0SKJ6CGO4HVYH586BR4FIAWLU6TFG2B5ZL71IMG2GIA0P45NKQ2S8KWHAWCEI5ET8UJC0AP4FB8OHGANZTDHFHY41JV22' where id=55; -update noar ti set v3='F9TSKR4WWEF9ZUV53CTC9GHA1TGHF4885ZJYEMBDXG0NO1NBCJFLCXMFAC7QJEW0QA2V9R4QEH1SS5UD5IBU84LYZ13XL3NV6Q1V2PU6HAOTTSKYT4YHA2862JXZ5CED5SIJK8ZJ877XIR9F47BMGE2Y40J2H43N61GO0SKJ6CGO4HVYH586BR4FIAWLU6TFG2B5ZL71IMG2GIA0P45NKQ2S8KWHAWCEI5ET8UJC0AP4FB8OHGANZTDHFHY41JV22' where id=55; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='8FC304K4BSVBUGNNNPNYXYDNC0EB0KSATJKOFEALXTTOB9BDWIC2D7ODG2JO8KCJXDNISTFHLHMTYB5PBMLSY7HI7EGWXBPZEWKJQH3RLB7F44P2UQKCMVA99VA1Z46DZR94Q79CY46D6WD84AYNTURPAS8KMKI8MN555QFOXKF9BLK019CL56EJ70KCIP3930YNQ0PJJDSDIANA7JA428DAHL738D5NJOBAX8T7ONZ5H6NP74LHEF9Y183PRCJLY' where id=56; -update noar ti set v0='8FC304K4BSVBUGNNNPNYXYDNC0EB0KSATJKOFEALXTTOB9BDWIC2D7ODG2JO8KCJXDNISTFHLHMTYB5PBMLSY7HI7EGWXBPZEWKJQH3RLB7F44P2UQKCMVA99VA1Z46DZR94Q79CY46D6WD84AYNTURPAS8KMKI8MN555QFOXKF9BLK019CL56EJ70KCIP3930YNQ0PJJDSDIANA7JA428DAHL738D5NJOBAX8T7ONZ5H6NP74LHEF9Y183PRCJLY' where id=56; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='D558J5CLD9TOLNJH29UJSVHLLRDNJ8M3QCW3030TPAX9UNAFGXUUJ8X63JRUOIRQNO83XOOMXC15HF02SOGV0G79V0A0408E7BD7YM2UWL8PYDQKQZQPP12YMJ85Q7N4WUO0Z7JBV402Q0VZ3RZG1EHEHSES8UOG36I0Y7NPUJC85QQEWVJ4P5ZHLFO1EGR5Y2W3V7AHEY9IJFHS2ZV4VIHRP0TAC78FYBTR79QNV0GBFTUBV3W878PMDSM7USWRS' where id=56; -update noar ti set v1='D558J5CLD9TOLNJH29UJSVHLLRDNJ8M3QCW3030TPAX9UNAFGXUUJ8X63JRUOIRQNO83XOOMXC15HF02SOGV0G79V0A0408E7BD7YM2UWL8PYDQKQZQPP12YMJ85Q7N4WUO0Z7JBV402Q0VZ3RZG1EHEHSES8UOG36I0Y7NPUJC85QQEWVJ4P5ZHLFO1EGR5Y2W3V7AHEY9IJFHS2ZV4VIHRP0TAC78FYBTR79QNV0GBFTUBV3W878PMDSM7USWRS' where id=56; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='0Z1YYXWV5WQKMUBUUZ0Q9GRJEDB4OM2MUMSA9WR2EFF6F7ZSVPREZ4MMV0GXRORDA0JAO7KGZZ9MTI4T2VFBZSGPAGLUFY7YJB6XT1P9M91Z5LL0EMFCW2KLWWZ6P65VZQ2KFOI77VQBH02GPKB1FY9RX44DPIG8F8DBIIDZM7O0NW5U1YNQBNQU3OD4XR8FHC2GNJ5WK6075COH3EKP6HE5DNUL6OTQ8LLFNTLY6X87JTQL5OWC026F98N5D3AS6' where id=56; -update noar ti set v2='0Z1YYXWV5WQKMUBUUZ0Q9GRJEDB4OM2MUMSA9WR2EFF6F7ZSVPREZ4MMV0GXRORDA0JAO7KGZZ9MTI4T2VFBZSGPAGLUFY7YJB6XT1P9M91Z5LL0EMFCW2KLWWZ6P65VZQ2KFOI77VQBH02GPKB1FY9RX44DPIG8F8DBIIDZM7O0NW5U1YNQBNQU3OD4XR8FHC2GNJ5WK6075COH3EKP6HE5DNUL6OTQ8LLFNTLY6X87JTQL5OWC026F98N5D3AS6' where id=56; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='0O9I6F4LTHAFNYSW1LVG2L95O4GM0BKQV84Q96YBQ1LSC6Q1NDDVL0VG8DRI7T28CHR6K1JBG3VDA347LOPCB6VYIAFE4A9LKOB1H5JDVG6HNFE6IFGRIFJJCIEOGNGZJYAEA5O2J3H4G0URYLCNASZ6FGCNA6KYNCKCIUOWV9P9UW2ALVKC2PF1KH4MBWFDEW0DH07A1UNLUDHEFIKCCLH9ZQ51DTXVDYFVH6ICFT2YW77FZQN1YWMNK7LRPSHA1' where id=56; -update noar ti set v3='0O9I6F4LTHAFNYSW1LVG2L95O4GM0BKQV84Q96YBQ1LSC6Q1NDDVL0VG8DRI7T28CHR6K1JBG3VDA347LOPCB6VYIAFE4A9LKOB1H5JDVG6HNFE6IFGRIFJJCIEOGNGZJYAEA5O2J3H4G0URYLCNASZ6FGCNA6KYNCKCIUOWV9P9UW2ALVKC2PF1KH4MBWFDEW0DH07A1UNLUDHEFIKCCLH9ZQ51DTXVDYFVH6ICFT2YW77FZQN1YWMNK7LRPSHA1' where id=56; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='AGYV8UPPSEGYRUQDKCAB5G55LMFLXI44EMJGQMROZP03F07M2WQK1M4ZY92BRXZEIASUT1D8ON19D6L7C48CIKAUMLL73ZB01CGIHTKXCGCGPE1DLCDUMYYU0Q2JIS5AJJKHWL2NNVQONE2P5OR28FSKYUF3DWXRSY4OSDKRAM1KDR95PETVNOPSZYN0MUC3O8IJELHASQDHQEC7GQRSC7BAXPXZMSIIMUOXKK58R6TG360XEYC3F4Z39OHMIUKJ7' where id=57; -update noar ti set v0='AGYV8UPPSEGYRUQDKCAB5G55LMFLXI44EMJGQMROZP03F07M2WQK1M4ZY92BRXZEIASUT1D8ON19D6L7C48CIKAUMLL73ZB01CGIHTKXCGCGPE1DLCDUMYYU0Q2JIS5AJJKHWL2NNVQONE2P5OR28FSKYUF3DWXRSY4OSDKRAM1KDR95PETVNOPSZYN0MUC3O8IJELHASQDHQEC7GQRSC7BAXPXZMSIIMUOXKK58R6TG360XEYC3F4Z39OHMIUKJ7' where id=57; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='KUNQBP46MWE0UJ57J9LHSMWOLWEJPXT0V9I1NZG68O7EBJYCACHSEOI0A3YNYK44AJN1LCW3L201123YJ9L36NSWFUYXV53K8136L8SUXCFYFW8A9WY7V3MG5ZEV8PR6HN426PWY3H9PO0VY368VBHRPYOE7EW7FFA6UNGZWAN9T8AD1AY2SYAWRNHZU11VLYLMPAGD6YH6BY9INGQLGLUMDUP9Q6SU6716IY8HTJXSA3BKG7OHJ7HXDNCAGULLU1' where id=57; -update noar ti set v1='KUNQBP46MWE0UJ57J9LHSMWOLWEJPXT0V9I1NZG68O7EBJYCACHSEOI0A3YNYK44AJN1LCW3L201123YJ9L36NSWFUYXV53K8136L8SUXCFYFW8A9WY7V3MG5ZEV8PR6HN426PWY3H9PO0VY368VBHRPYOE7EW7FFA6UNGZWAN9T8AD1AY2SYAWRNHZU11VLYLMPAGD6YH6BY9INGQLGLUMDUP9Q6SU6716IY8HTJXSA3BKG7OHJ7HXDNCAGULLU1' where id=57; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='CFXKAH3P31CZNHLUUQYVHJGFUW93VM345SRSZEE8HFI69G48G2CZ9SJG6SV993RZO7J9L933LS9454Z0SBBYTZSKTDQC5DELH5DGWE80TVJAW8Z5AOPM0AR9YAAPH8DDV5E87HW00NNO1QEQTEXZ22B3X2GOB9IF8K0J5VS9AAXEZ5V1O56D49PLY3XCWIPNMDIMJBZYCSE30WEX6SFB5OFNUNXV1Y5EO5Q9A71D41PC10CXF1MYNALONSCUJ233M' where id=57; -update noar ti set v2='CFXKAH3P31CZNHLUUQYVHJGFUW93VM345SRSZEE8HFI69G48G2CZ9SJG6SV993RZO7J9L933LS9454Z0SBBYTZSKTDQC5DELH5DGWE80TVJAW8Z5AOPM0AR9YAAPH8DDV5E87HW00NNO1QEQTEXZ22B3X2GOB9IF8K0J5VS9AAXEZ5V1O56D49PLY3XCWIPNMDIMJBZYCSE30WEX6SFB5OFNUNXV1Y5EO5Q9A71D41PC10CXF1MYNALONSCUJ233M' where id=57; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='CSY88EP4UG4BWCOC8BY9ILZZX9XZCSZJP7NZ77PHOMCASPTVL0UTDS525SGLO3PZW5RFTWJKGY8OWLLXI2BS6BE855X8BLZMUVMLV6FYLN9K0S8RRS6RBK42CK3JOKAIAJUYRPOYVZAB0D66ITXOV6K36UQOQ6ED8ONL6SNR1EK41426IC8D9UOWBESEHGJ83FGBRG31XEXH36UUIASEAQGXYS7SCF8PVVK7429VDGE1SYBJIGDQ8VUU7L5GY4GZ1' where id=57; -update noar ti set v3='CSY88EP4UG4BWCOC8BY9ILZZX9XZCSZJP7NZ77PHOMCASPTVL0UTDS525SGLO3PZW5RFTWJKGY8OWLLXI2BS6BE855X8BLZMUVMLV6FYLN9K0S8RRS6RBK42CK3JOKAIAJUYRPOYVZAB0D66ITXOV6K36UQOQ6ED8ONL6SNR1EK41426IC8D9UOWBESEHGJ83FGBRG31XEXH36UUIASEAQGXYS7SCF8PVVK7429VDGE1SYBJIGDQ8VUU7L5GY4GZ1' where id=57; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='AQIKFKXZ1VYWLL8ASN42UD0SHSK7CTXPR6Q7EGFVM1ARTZAN8MC5SEXSNDZ4NQL8LJUPR2CCSQBGIQTE7T7WLVEBEJAM0V6AAEWLI9GW57OF7QGSRDTT33UMV2O102JTBYNWHF4TSDWQMCS2EVR3AIBJBCBF71YB64FWWN8OR273I8PIXP2T1II2Y2SHX967RT6CP20POQQ2S44Y35AOH6BTCX1JLH86EUQ46GUZBJVCICO3PQ8UE150A5WAF7YQR' where id=58; -update noar ti set v0='AQIKFKXZ1VYWLL8ASN42UD0SHSK7CTXPR6Q7EGFVM1ARTZAN8MC5SEXSNDZ4NQL8LJUPR2CCSQBGIQTE7T7WLVEBEJAM0V6AAEWLI9GW57OF7QGSRDTT33UMV2O102JTBYNWHF4TSDWQMCS2EVR3AIBJBCBF71YB64FWWN8OR273I8PIXP2T1II2Y2SHX967RT6CP20POQQ2S44Y35AOH6BTCX1JLH86EUQ46GUZBJVCICO3PQ8UE150A5WAF7YQR' where id=58; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='3IJYIF852HE5W2MBBSH4H8APM3U2SR6J4O4HAB2DXHZSEF9E9I0SM8R1KLJYOU7HJVJN8WH090ZXQW8WRXI4JXBYRWWON0IADZ869P1CHJJI59ZL5JWCIWEUJUABKCY31IVWAL7IIB39M2E3NG63J2WQ44WSG2H26616P972UGUAV7Q84S0H5F0LG45AITQZQEHAAE4XXYADK0D3NDZQZRLXLQWAGW632LMX6V76MFPEFF4HBIQMF1A8R6P6H7D2I' where id=58; -update noar ti set v1='3IJYIF852HE5W2MBBSH4H8APM3U2SR6J4O4HAB2DXHZSEF9E9I0SM8R1KLJYOU7HJVJN8WH090ZXQW8WRXI4JXBYRWWON0IADZ869P1CHJJI59ZL5JWCIWEUJUABKCY31IVWAL7IIB39M2E3NG63J2WQ44WSG2H26616P972UGUAV7Q84S0H5F0LG45AITQZQEHAAE4XXYADK0D3NDZQZRLXLQWAGW632LMX6V76MFPEFF4HBIQMF1A8R6P6H7D2I' where id=58; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='JJIX2VVHNVNZYELVOSO886TWWQWTXYMNDBU913VNQ5338ZIPNSIGAJEKIDSACIDKZOQAUOLJRT1IZRVLKQYHGAYBZWEM8YH2T1UIBNZ4WNABYUE4DVU5XMSEQZ84P09RG6VWPHS7EJSJJ72U4ZVH236E8A0H8I6CFK9JT3ADKV7RKSDMSGE2D6PLGSB5585IM7IAHD60SXFTPK7626N5673ECXV6U7LUSGPQGRNBSQU0GPQ3YH5HFCHRW0XMUSHMQ' where id=58; -update noar ti set v2='JJIX2VVHNVNZYELVOSO886TWWQWTXYMNDBU913VNQ5338ZIPNSIGAJEKIDSACIDKZOQAUOLJRT1IZRVLKQYHGAYBZWEM8YH2T1UIBNZ4WNABYUE4DVU5XMSEQZ84P09RG6VWPHS7EJSJJ72U4ZVH236E8A0H8I6CFK9JT3ADKV7RKSDMSGE2D6PLGSB5585IM7IAHD60SXFTPK7626N5673ECXV6U7LUSGPQGRNBSQU0GPQ3YH5HFCHRW0XMUSHMQ' where id=58; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='KWR3OUUM72I0LMZK2AKTT7D814PGC0UVQEQV9V7TWYDPOX1MJNML7PBM1BRK6VOSH0WY3A5D5CFVF1JAPZT7OEANPWORJXCMS9SS5K0ZTUADNRB62TLXTZWM00FPQJG60PV7D905S22EZ48DW31Z6SF2H3LL91WOVIGOC9ARXY7E2YVWNFGQ24JMH4YNLVKIUYBHMOXMLFD00T6ALA8FTS9Z0T4PLBMQ45390X5N4PLV0M4XUU6Z4N10G92UB5OER' where id=58; -update noar ti set v3='KWR3OUUM72I0LMZK2AKTT7D814PGC0UVQEQV9V7TWYDPOX1MJNML7PBM1BRK6VOSH0WY3A5D5CFVF1JAPZT7OEANPWORJXCMS9SS5K0ZTUADNRB62TLXTZWM00FPQJG60PV7D905S22EZ48DW31Z6SF2H3LL91WOVIGOC9ARXY7E2YVWNFGQ24JMH4YNLVKIUYBHMOXMLFD00T6ALA8FTS9Z0T4PLBMQ45390X5N4PLV0M4XUU6Z4N10G92UB5OER' where id=58; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='CUVD9E35O4D9EGPG33EEQKUQIV9BCANRXED6GFNI2CQU4U2G19FOMP7W02JQ4RGM0CWWBLIDWVDG1F8EZDZYJVRR6NTNTF46DAHE5DULJQLU9QZCX6Z45SVNIUH8B6ZBY17OPC4DTNA1WDCABUDHSSTIKAXZVIIPRTC4YCNQ0FGBAL9HEYIWHKZLZHNJTJWDAWD5PGSL7S44QH2P2EK2KIV1W14SYGQYS8HKU9Y2CGA39DJRAPL5DTEO9M3LJCPKB' where id=59; -update noar ti set v0='CUVD9E35O4D9EGPG33EEQKUQIV9BCANRXED6GFNI2CQU4U2G19FOMP7W02JQ4RGM0CWWBLIDWVDG1F8EZDZYJVRR6NTNTF46DAHE5DULJQLU9QZCX6Z45SVNIUH8B6ZBY17OPC4DTNA1WDCABUDHSSTIKAXZVIIPRTC4YCNQ0FGBAL9HEYIWHKZLZHNJTJWDAWD5PGSL7S44QH2P2EK2KIV1W14SYGQYS8HKU9Y2CGA39DJRAPL5DTEO9M3LJCPKB' where id=59; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='V6TSWDUGK603NG3I4KR128P5SE1NONW8CT0DTOUB34Q24EMYUM4OK7FAJXRL5EGAT5HB2VQEMSZLFVBBUH5CUR0ACIUMAG93K9OXJ6LLC7RM3WU5TR9CJAWJSD4OOEIM1P4FYWP9NQXX7NZ76HDDYQA5XHWOKRNFUUYB4SGN69L0W88EC7PYW1ORBDDPCEV9Y7KPVQPHLBRP4TG1HONHE1ZURBU1OW7EDTMWN6PU9O226RDW9BMH0BMFZ7XYMUX87' where id=59; -update noar ti set v1='V6TSWDUGK603NG3I4KR128P5SE1NONW8CT0DTOUB34Q24EMYUM4OK7FAJXRL5EGAT5HB2VQEMSZLFVBBUH5CUR0ACIUMAG93K9OXJ6LLC7RM3WU5TR9CJAWJSD4OOEIM1P4FYWP9NQXX7NZ76HDDYQA5XHWOKRNFUUYB4SGN69L0W88EC7PYW1ORBDDPCEV9Y7KPVQPHLBRP4TG1HONHE1ZURBU1OW7EDTMWN6PU9O226RDW9BMH0BMFZ7XYMUX87' where id=59; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='4TURTU1T1JLUT90V8FUBNKKT08WILZNBYEF0GCW4VXER993RBH8MMWS5Y05M52LETQMXG0927UVJ89J4EZ6NR98XITSH2YF4T7UAUUW0I47I7I9Z8OOGZB8XADJBNHCN5MLPMHJPNU9U4ZIG8A540THY9T8UH7VL5EMX1FHDJW5FJM2TVBJG3JWLJS8QVMBTOTJHA2U85VB4U9Q992I4EUXVR3PD2RUKQ30X8QOMMSU7QS06LTR2SB4O1GZH8Q067' where id=59; -update noar ti set v2='4TURTU1T1JLUT90V8FUBNKKT08WILZNBYEF0GCW4VXER993RBH8MMWS5Y05M52LETQMXG0927UVJ89J4EZ6NR98XITSH2YF4T7UAUUW0I47I7I9Z8OOGZB8XADJBNHCN5MLPMHJPNU9U4ZIG8A540THY9T8UH7VL5EMX1FHDJW5FJM2TVBJG3JWLJS8QVMBTOTJHA2U85VB4U9Q992I4EUXVR3PD2RUKQ30X8QOMMSU7QS06LTR2SB4O1GZH8Q067' where id=59; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='QQVLJE4MR0VANDS2IV2FVVHBAQ4G6P1MD221WG1YZRTL52EDE23S9HKZ9PY3OL6V62FXYY5SUNSUTW81ZCZG05QLHB68UOTIRVT2SHNVWCZCK702PM9NVAD8F7VEQ7HBSOIHZRE2ZCR2JGLQLCTOOC3T1R14P3TPF91BQWY2QHP01YGCKVRJFD1AY0741NFDXI40VKSHXXDPQ5JNQ4045LODL91ZD9B7OY1K48OFU3I9SVY3D2T1NK8O8KLFULHME' where id=59; -update noar ti set v3='QQVLJE4MR0VANDS2IV2FVVHBAQ4G6P1MD221WG1YZRTL52EDE23S9HKZ9PY3OL6V62FXYY5SUNSUTW81ZCZG05QLHB68UOTIRVT2SHNVWCZCK702PM9NVAD8F7VEQ7HBSOIHZRE2ZCR2JGLQLCTOOC3T1R14P3TPF91BQWY2QHP01YGCKVRJFD1AY0741NFDXI40VKSHXXDPQ5JNQ4045LODL91ZD9B7OY1K48OFU3I9SVY3D2T1NK8O8KLFULHME' where id=59; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='0A941Z4EG2IV9GWFF19FW7BXF5PWXFEBS5SJHDGKMFF5O9W74903TBQA4VZ4MJ8PJNZC77R7CZO4QZ3ZL0B9UE11L3QXCK04QTOUKHK7V9TO35REW2LVZPJ06OA5Q04M0G14G81M408HPWCA6LTID12VHE5PL2F2RFWZQVYQMUSLMJXK5IID1XNV683DE6PIE5VD68W5V7OLOLU92O2GAW2UZD1BVLAI0PVUXUC8MHZJU9BDWNC5HJRI6FO4SPNM9' where id=60; -update noar ti set v0='0A941Z4EG2IV9GWFF19FW7BXF5PWXFEBS5SJHDGKMFF5O9W74903TBQA4VZ4MJ8PJNZC77R7CZO4QZ3ZL0B9UE11L3QXCK04QTOUKHK7V9TO35REW2LVZPJ06OA5Q04M0G14G81M408HPWCA6LTID12VHE5PL2F2RFWZQVYQMUSLMJXK5IID1XNV683DE6PIE5VD68W5V7OLOLU92O2GAW2UZD1BVLAI0PVUXUC8MHZJU9BDWNC5HJRI6FO4SPNM9' where id=60; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='FWIEVICR740U0VRVWLEU8QSSB3I5T1OA3KAAO5XCZ1P7CMLWVWQRXPAZCO1YK31D3RDXXLCIX4LUBJJRN5X3HHJ071S6XKMNYZ1IXZGC93KZU4TWC6EQBIPEMOZG1TNV4NEJL6KXFNWCCELJ0NJIHVHHLAN17ENNHDJIQCUILPV9ZHU9WHUK2URZ6FXC6ZPZHZ3G8W8DEN3AGKMS59GE4RSLL6EGI61C5XU18TVPD1K6N5KQWHW96TBZNFG74UNPV' where id=60; -update noar ti set v1='FWIEVICR740U0VRVWLEU8QSSB3I5T1OA3KAAO5XCZ1P7CMLWVWQRXPAZCO1YK31D3RDXXLCIX4LUBJJRN5X3HHJ071S6XKMNYZ1IXZGC93KZU4TWC6EQBIPEMOZG1TNV4NEJL6KXFNWCCELJ0NJIHVHHLAN17ENNHDJIQCUILPV9ZHU9WHUK2URZ6FXC6ZPZHZ3G8W8DEN3AGKMS59GE4RSLL6EGI61C5XU18TVPD1K6N5KQWHW96TBZNFG74UNPV' where id=60; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='RF018ZFV31DFDMEOW8L97JX8FSEDLH60GNPY79IGHH5LKSRV5SV48US3ERB2GLX3HYKORWGLCP1WPEZID1M0K06AFSP3LCHQ1P3Q7A1AUY5UYSHPB89IAKD280RYDL0VGWMN0A40O9P50ZREO7P9G0FUOU3JBHDCOZSMZO29XG1RQ126M3N393A2PIUFRNTXI59LAZQ52BM2RW4T01974SZGJNANP17DAL82QBRGHL3V4MGE3OJBRZR25QOSAHX05' where id=60; -update noar ti set v2='RF018ZFV31DFDMEOW8L97JX8FSEDLH60GNPY79IGHH5LKSRV5SV48US3ERB2GLX3HYKORWGLCP1WPEZID1M0K06AFSP3LCHQ1P3Q7A1AUY5UYSHPB89IAKD280RYDL0VGWMN0A40O9P50ZREO7P9G0FUOU3JBHDCOZSMZO29XG1RQ126M3N393A2PIUFRNTXI59LAZQ52BM2RW4T01974SZGJNANP17DAL82QBRGHL3V4MGE3OJBRZR25QOSAHX05' where id=60; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='NBQY3B9ELPVPUDV83M7M7BCGPWAKYT6XGEZ0VQXOGTAJ5S30U86DOJ0WCEE8LK3OG634DUWPE6VHW2F0PX3V2P73NROV32PTU0XTKMNE7XDIPF1DR8WEJZ1OK3F1YLCPRRMQTFRCK3WWLI2U59W27PE5D8465BK25ENG75RPDPXU2RLAH4TN09NWBQY75F51RF38T7IQCP6LFOKRI8EBC4O2I88HK7RLHUJOF7H5YVFEA2QNG25AW5BXIU62EU8MW' where id=60; -update noar ti set v3='NBQY3B9ELPVPUDV83M7M7BCGPWAKYT6XGEZ0VQXOGTAJ5S30U86DOJ0WCEE8LK3OG634DUWPE6VHW2F0PX3V2P73NROV32PTU0XTKMNE7XDIPF1DR8WEJZ1OK3F1YLCPRRMQTFRCK3WWLI2U59W27PE5D8465BK25ENG75RPDPXU2RLAH4TN09NWBQY75F51RF38T7IQCP6LFOKRI8EBC4O2I88HK7RLHUJOF7H5YVFEA2QNG25AW5BXIU62EU8MW' where id=60; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='JRK0ZCGIIRW4ZBUGCEKZ79X4TISEQDRUKABZ52FVDYN7KZ5DZ6Q2LNSAJAJXJPH1GB2QEC9874EHMGIYIEOBGI2TI0I9EG83ZR76QAHH45E3R5UQNPIQ82AYGBYGZE6K53E0P37RVV8DYUXKTQRUTNETLR322OPN6BFD9XZJ1J04WMDTYG6V1CD8WKBRPH24UPME6I6P7V4Z7I1APJRWISAIA6RZ9DAHETDZ2TBSMAVQBIWOELQDKX2LJ6GKH6TDX' where id=61; -update noar ti set v0='JRK0ZCGIIRW4ZBUGCEKZ79X4TISEQDRUKABZ52FVDYN7KZ5DZ6Q2LNSAJAJXJPH1GB2QEC9874EHMGIYIEOBGI2TI0I9EG83ZR76QAHH45E3R5UQNPIQ82AYGBYGZE6K53E0P37RVV8DYUXKTQRUTNETLR322OPN6BFD9XZJ1J04WMDTYG6V1CD8WKBRPH24UPME6I6P7V4Z7I1APJRWISAIA6RZ9DAHETDZ2TBSMAVQBIWOELQDKX2LJ6GKH6TDX' where id=61; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='4BGKVM9119Z1D0OYE9EX855MEUSPQ802FXDBDBS9UHP2PMFHOTPRSA526G1Y9HIEDWMQGSF6L9QVZ1MC482BEGM4C82XJOZR6SSQIO0XA81NF4AQAFLBZAT4L310FJN23JYT0AMNDISSJD0B7HDN8J7WTBL4PB5CU03VG3U8CAKF07PP68NB7Q4KJ9DHE7TBSINOABRTGAVDQCO2248Q3NEP5W035D0K7JGEWFPZYNITX2C5E1YHZTLO5W3248XC2' where id=61; -update noar ti set v1='4BGKVM9119Z1D0OYE9EX855MEUSPQ802FXDBDBS9UHP2PMFHOTPRSA526G1Y9HIEDWMQGSF6L9QVZ1MC482BEGM4C82XJOZR6SSQIO0XA81NF4AQAFLBZAT4L310FJN23JYT0AMNDISSJD0B7HDN8J7WTBL4PB5CU03VG3U8CAKF07PP68NB7Q4KJ9DHE7TBSINOABRTGAVDQCO2248Q3NEP5W035D0K7JGEWFPZYNITX2C5E1YHZTLO5W3248XC2' where id=61; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='Y5W2HMA232FFNHFWW8OIO6VJBVWHHKJC4KJLPD5S9D5ZNR9E82PW4VNO0M64B0W5JSPJZB7QY0HK3XTHMHJBO7LN3R34QWJ4XHK0AC26NNWWU562MU0PBICIMR5L08SKWUH3PE93M15AO2CY5YVBXIOK719BPCQRBNBAAC6UDDELK3R8XEVURBO3U8LYYBTJCM6T2ZFFQYV0328QL5L2ECPCGSNLAGKGLHMXE7IEB9PVKPSDTLC31S441X3C0M857' where id=61; -update noar ti set v2='Y5W2HMA232FFNHFWW8OIO6VJBVWHHKJC4KJLPD5S9D5ZNR9E82PW4VNO0M64B0W5JSPJZB7QY0HK3XTHMHJBO7LN3R34QWJ4XHK0AC26NNWWU562MU0PBICIMR5L08SKWUH3PE93M15AO2CY5YVBXIOK719BPCQRBNBAAC6UDDELK3R8XEVURBO3U8LYYBTJCM6T2ZFFQYV0328QL5L2ECPCGSNLAGKGLHMXE7IEB9PVKPSDTLC31S441X3C0M857' where id=61; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='IFY4880GO7ICBN1AKFJ37R410OOD8R062DQIMJKG50FF8RGU5SWS3VWJ5VVLBWXBLQG0HG9HU3X7DOHARQ36S7GGTDOM6HK9JN8GEBD0TP7GYR2GQ7KRHGL8Z4881NV8C92BU4H14LUL5OPVZT5W0C1TAL2Q5MEWDL78VENONCEPD1GSQ40S1V68IDN5IGTLG5JPO62SE13O5JCUUBDDB1S06FIU15SJHAI50ILM6MJ7XIREBW47140EPFYJDJB25' where id=61; -update noar ti set v3='IFY4880GO7ICBN1AKFJ37R410OOD8R062DQIMJKG50FF8RGU5SWS3VWJ5VVLBWXBLQG0HG9HU3X7DOHARQ36S7GGTDOM6HK9JN8GEBD0TP7GYR2GQ7KRHGL8Z4881NV8C92BU4H14LUL5OPVZT5W0C1TAL2Q5MEWDL78VENONCEPD1GSQ40S1V68IDN5IGTLG5JPO62SE13O5JCUUBDDB1S06FIU15SJHAI50ILM6MJ7XIREBW47140EPFYJDJB25' where id=61; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='EQQ6RB6C2M7FIOYXCQ0I8VVDGITDTYE16AZDLCYIJ8VVK3EU0X3QKMQ0AZRYS1CQ5XHTEVMS6TIC0IL3GJD6JEHIMOEPTDYSQZ6CHMLXLN7JCRKRH1UVEORFJMWMVODXNPG07D7S6IS6ORCKO6LZRDV19NFUUDMJTTT18GFQ03A7WLBUOUGXQLCLZBNJBGA1D75VQEU48HCEG11NGW6JIQYITGH0OF79DTAML6APHN6M3SSEO7R5FJXFFDMPJ7JN5' where id=62; -update noar ti set v0='EQQ6RB6C2M7FIOYXCQ0I8VVDGITDTYE16AZDLCYIJ8VVK3EU0X3QKMQ0AZRYS1CQ5XHTEVMS6TIC0IL3GJD6JEHIMOEPTDYSQZ6CHMLXLN7JCRKRH1UVEORFJMWMVODXNPG07D7S6IS6ORCKO6LZRDV19NFUUDMJTTT18GFQ03A7WLBUOUGXQLCLZBNJBGA1D75VQEU48HCEG11NGW6JIQYITGH0OF79DTAML6APHN6M3SSEO7R5FJXFFDMPJ7JN5' where id=62; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='V6PRL6BXT1NRCGQL5R1FFC9IWQHWMQ6PCRNEQ2HXZG34ZTYCD7E5ARETURGYMYDXRVTTZ26CARBWAPWISIS643NNJJREN2AI9Z8OZY8BW6NXKZRO55GDKIAZWXKODV7BBWIE2I5KY8EA2JPXTHKC4IR1SYN5EAS2ZYG14NVFIT48RFPJAFGRCRAFAO7GIERNPPBW9F0EKW1YBMTEFDXBYM10YUFV4RJXB1ZP26HNA8MCFWHRYWY8K1C3L5U8Q9PQ8' where id=62; -update noar ti set v1='V6PRL6BXT1NRCGQL5R1FFC9IWQHWMQ6PCRNEQ2HXZG34ZTYCD7E5ARETURGYMYDXRVTTZ26CARBWAPWISIS643NNJJREN2AI9Z8OZY8BW6NXKZRO55GDKIAZWXKODV7BBWIE2I5KY8EA2JPXTHKC4IR1SYN5EAS2ZYG14NVFIT48RFPJAFGRCRAFAO7GIERNPPBW9F0EKW1YBMTEFDXBYM10YUFV4RJXB1ZP26HNA8MCFWHRYWY8K1C3L5U8Q9PQ8' where id=62; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='9YNM51YZSRIDLE1AQKO2NGB5E5CLMG5K1B7U8G1FRZLGQUR85JUZKDNHAL2XS7NZH7362L7BUDK6O693Y1CSQ88UWEEH5AJ50ZCV258LH6WC681J41KKR053K569BPUW6CM6DVIYP4KXY0B3HJKP8QEP4DUTX6M2LQP2LMKNVVI3SFOQ41KODDQE6IDRK468ZB2NFRSALT69395B40OJMK26IAK8VIU364RF05V16TH6ZN4MZ3ETYJNCIMQ3348MF' where id=62; -update noar ti set v2='9YNM51YZSRIDLE1AQKO2NGB5E5CLMG5K1B7U8G1FRZLGQUR85JUZKDNHAL2XS7NZH7362L7BUDK6O693Y1CSQ88UWEEH5AJ50ZCV258LH6WC681J41KKR053K569BPUW6CM6DVIYP4KXY0B3HJKP8QEP4DUTX6M2LQP2LMKNVVI3SFOQ41KODDQE6IDRK468ZB2NFRSALT69395B40OJMK26IAK8VIU364RF05V16TH6ZN4MZ3ETYJNCIMQ3348MF' where id=62; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='XQRQZJFSQLKXNJUNAAMNFQ3HBTQ5KP8SOXE4IEWAVNJRRCDDV4W16VPRX1JQLZRMNIWIPMA7LT8MTTJ7SM5JP51I8CJ5W2MXKQVZIF6HEM42W5O7OGK6QEU9A8G3FJYWPUT98QPTFQ8DILIBSBR45TGULXBRMTBFNHKL640X48X2D25U55EKEZ7GZDZSBZ8CUAP2CV67IP6LVXHJ694VDYZS1P5DS7Y6N6VR52YHPKQYGLOEJQI9ZYAX1ZRYXBN3P' where id=62; -update noar ti set v3='XQRQZJFSQLKXNJUNAAMNFQ3HBTQ5KP8SOXE4IEWAVNJRRCDDV4W16VPRX1JQLZRMNIWIPMA7LT8MTTJ7SM5JP51I8CJ5W2MXKQVZIF6HEM42W5O7OGK6QEU9A8G3FJYWPUT98QPTFQ8DILIBSBR45TGULXBRMTBFNHKL640X48X2D25U55EKEZ7GZDZSBZ8CUAP2CV67IP6LVXHJ694VDYZS1P5DS7Y6N6VR52YHPKQYGLOEJQI9ZYAX1ZRYXBN3P' where id=62; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='MLK5OMNX996177NKDXK50ITSDODH5R4D9MJ9YJ6FJA5PP9Q58N680T2YISVF0RHD4YMV5MCY3YJZZZ973D1QR25HWMXE1WJE4VV7GGJ9K1HFEOJ9XQ3GPNOTG6YIXJGVNX26UKZDQNAGYQX9N7MMOF9GIU3P213BVA45DXNGHE5W6FVVPAQO3FLCVHUJ583CGAHQKBSCJRB709OK8XJA9MGGGO4IR3YU7MT32JTXTKLK5EP6WVMUAZ69D2MFB8CJW' where id=63; -update noar ti set v0='MLK5OMNX996177NKDXK50ITSDODH5R4D9MJ9YJ6FJA5PP9Q58N680T2YISVF0RHD4YMV5MCY3YJZZZ973D1QR25HWMXE1WJE4VV7GGJ9K1HFEOJ9XQ3GPNOTG6YIXJGVNX26UKZDQNAGYQX9N7MMOF9GIU3P213BVA45DXNGHE5W6FVVPAQO3FLCVHUJ583CGAHQKBSCJRB709OK8XJA9MGGGO4IR3YU7MT32JTXTKLK5EP6WVMUAZ69D2MFB8CJW' where id=63; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='9OSWRG5UVOR5SRJEYJ0YERVUXWTKNH5A4M3UMJQ6UOQRQIB59YXK4LH9XMQCR5324NTLYH0YQSHJ8MOM89BSFFN1A4COO2P14AQ402TQ5GCCK4CGL14PU6JTMV3Y3D5BFZ4CGV04N2UWA8PN0QG576PK4BBIHTMRWSCEDD8GQHUB6UBWS2UOQQE8N1865PJMTGFFINPM6HDE1ATZBUA1LLE4LJJ190DEAV3LRBLB6HP481512FRGQOLL2XV9DW8KX' where id=63; -update noar ti set v1='9OSWRG5UVOR5SRJEYJ0YERVUXWTKNH5A4M3UMJQ6UOQRQIB59YXK4LH9XMQCR5324NTLYH0YQSHJ8MOM89BSFFN1A4COO2P14AQ402TQ5GCCK4CGL14PU6JTMV3Y3D5BFZ4CGV04N2UWA8PN0QG576PK4BBIHTMRWSCEDD8GQHUB6UBWS2UOQQE8N1865PJMTGFFINPM6HDE1ATZBUA1LLE4LJJ190DEAV3LRBLB6HP481512FRGQOLL2XV9DW8KX' where id=63; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='PHIWXGZOHQKX30KUJNFVHC37XSM5COMUZ9QKVK6PAI1OVM8B4TT7N6X7RTSVQVZVVAOLDEKC1OT59K6RPYTH36O0I6BUFQ4O9MVQF73K6CD2ZPDQIDCIEONELUHNTBMDI3MF6QLLOOTED00EWK2STVNJV2ADBFZNDOMQ1EGQZ6337J8AOUISNN9CM4SB24UZ00YS3G33OLNS8C5HK0XKTCDBXB1UVN70N2JB3IDAMBNIHYDPFDQHU3CVIHQ8DT9QG' where id=63; -update noar ti set v2='PHIWXGZOHQKX30KUJNFVHC37XSM5COMUZ9QKVK6PAI1OVM8B4TT7N6X7RTSVQVZVVAOLDEKC1OT59K6RPYTH36O0I6BUFQ4O9MVQF73K6CD2ZPDQIDCIEONELUHNTBMDI3MF6QLLOOTED00EWK2STVNJV2ADBFZNDOMQ1EGQZ6337J8AOUISNN9CM4SB24UZ00YS3G33OLNS8C5HK0XKTCDBXB1UVN70N2JB3IDAMBNIHYDPFDQHU3CVIHQ8DT9QG' where id=63; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='VQML9GORFV07CPK1BYL0NSI1QUU7T8N0W6K11SPUW0OQ105AQEA7IC0XOY9F8GFBCF1EYZW7IPO4V21E01HNDFQO8HRYILOV6RRCT1UDN0YQ1Z8F9JE2PUC1HL1YDXIQ5KZTIK1NJ8Z5G3KG1KLHFE3ODHNXH555DXPN7SW8N58KDZ0AB1VYATTOH5QGLCEQF03PTODZEXN21DPTO13HO84F5W6SRQCC33RRNCRWSYWHDOAVBARZYV2ZI8NC1PEL9' where id=63; -update noar ti set v3='VQML9GORFV07CPK1BYL0NSI1QUU7T8N0W6K11SPUW0OQ105AQEA7IC0XOY9F8GFBCF1EYZW7IPO4V21E01HNDFQO8HRYILOV6RRCT1UDN0YQ1Z8F9JE2PUC1HL1YDXIQ5KZTIK1NJ8Z5G3KG1KLHFE3ODHNXH555DXPN7SW8N58KDZ0AB1VYATTOH5QGLCEQF03PTODZEXN21DPTO13HO84F5W6SRQCC33RRNCRWSYWHDOAVBARZYV2ZI8NC1PEL9' where id=63; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='A6FOTIU48JWADRZ1YRIC9JV4RLBS1KASLST56JPC9RWMY07UK1RC1A4GB0AC93MX9IK20QSK8RIC2TC8WKPXCO0XVFCJJMA3NVEGL6RL9YF3JHRD44A8QOVC2QLHLAK297ZT6OIMXNWBWRGNQF0328QU7F71GL1OWTHECVH11RKYK8VWKMD4WYOLK42U0M07OFJDXUCIBXD6LJYMFVD5EW43GRR3ZDM71R69ZPC0ZR4TLMQENPDZ0KHYVDQ7E58G0' where id=64; -update noar ti set v0='A6FOTIU48JWADRZ1YRIC9JV4RLBS1KASLST56JPC9RWMY07UK1RC1A4GB0AC93MX9IK20QSK8RIC2TC8WKPXCO0XVFCJJMA3NVEGL6RL9YF3JHRD44A8QOVC2QLHLAK297ZT6OIMXNWBWRGNQF0328QU7F71GL1OWTHECVH11RKYK8VWKMD4WYOLK42U0M07OFJDXUCIBXD6LJYMFVD5EW43GRR3ZDM71R69ZPC0ZR4TLMQENPDZ0KHYVDQ7E58G0' where id=64; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='WTY5C15ZEU2ERV7HHY1A0DOPS8MNN2LQ0YY9339UE0YTTYCPPZ2WZI0Y3CKS5RJO8QKZPNWPVXZ9DUY86MU5NJDT8I60H49T443M5VL7AWAVIPGSVDMJO4A6PSPMSBTGRTV4NM8D3P871BETF5MU4W0N1VQ4JD2Y768U7NNCJAT7NWE5V9UEWW71MZJZXB4IZPS617PRA1WMXGNOHKPMQBEPHTDY2DCZR54E12HNVEG5H60ALKFDJPGKFDVKPMECG' where id=64; -update noar ti set v1='WTY5C15ZEU2ERV7HHY1A0DOPS8MNN2LQ0YY9339UE0YTTYCPPZ2WZI0Y3CKS5RJO8QKZPNWPVXZ9DUY86MU5NJDT8I60H49T443M5VL7AWAVIPGSVDMJO4A6PSPMSBTGRTV4NM8D3P871BETF5MU4W0N1VQ4JD2Y768U7NNCJAT7NWE5V9UEWW71MZJZXB4IZPS617PRA1WMXGNOHKPMQBEPHTDY2DCZR54E12HNVEG5H60ALKFDJPGKFDVKPMECG' where id=64; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='RPTENB3ETSR98K7JT4P1F5RR2W1AMUFPEDT32FHZL13G0ENWNO95COKI6091QTXPBQIS5A5O8ELBOI46HP26HEJOBN3BXVV2XN8FYIMJAXW9V2X8158F1TAKTVF1CRYRCMXXTIHZZV8T66V0VLYG5T1U5E3WHB7RRNABCGDKBM2X5I3PL7EEJ9JM44MMFBFUWPXAILABIMSWJNEA6EQNT1P43F0MARLDXH817TS33ZP9L717N34PIAPCRRPVMGBEZ' where id=64; -update noar ti set v2='RPTENB3ETSR98K7JT4P1F5RR2W1AMUFPEDT32FHZL13G0ENWNO95COKI6091QTXPBQIS5A5O8ELBOI46HP26HEJOBN3BXVV2XN8FYIMJAXW9V2X8158F1TAKTVF1CRYRCMXXTIHZZV8T66V0VLYG5T1U5E3WHB7RRNABCGDKBM2X5I3PL7EEJ9JM44MMFBFUWPXAILABIMSWJNEA6EQNT1P43F0MARLDXH817TS33ZP9L717N34PIAPCRRPVMGBEZ' where id=64; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='3UO0GQYJYKUPJ7LR2ARKLGK6NVT945WTKI40XSBZ5YIJAX2XGR0N4ZYDUAAMCLYKFVX9VLXUIDOZGEXND1M7H8VGM511AOWQFY3IO402UTEKPJ6X5QRNCWZCYA50H4PVKUNI152UHAJTP6MRP7K1RUVX1AOL1RYUHQW7NJ0H6XL35TESBVQ1UKAB3LIUW0E5RUPLWYBZQMU3IRLWJPJN1WP3SICJTYP735JDML352Z0XZW2NJ89B9L0UQVXFQY60C' where id=64; -update noar ti set v3='3UO0GQYJYKUPJ7LR2ARKLGK6NVT945WTKI40XSBZ5YIJAX2XGR0N4ZYDUAAMCLYKFVX9VLXUIDOZGEXND1M7H8VGM511AOWQFY3IO402UTEKPJ6X5QRNCWZCYA50H4PVKUNI152UHAJTP6MRP7K1RUVX1AOL1RYUHQW7NJ0H6XL35TESBVQ1UKAB3LIUW0E5RUPLWYBZQMU3IRLWJPJN1WP3SICJTYP735JDML352Z0XZW2NJ89B9L0UQVXFQY60C' where id=64; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='IZ5G9W8JX3FFNW6K6OINC65XZECSI57UNWCS2CEDRC8F16NDEZAOAFR4WPS5TA756DQH213J5DVEPP2NLWZGK7JHIMHZ1IO23KS65Z21SX0BKUKCY5CX8NI1PH9WPG2LO9Y0LSCC9E30SHAJXBTBXVN8SCF2E5O2GLIPLKD9TRWF4ONYNBOBY7WSNJF9HLV80XJ2NEOLWK2YWRQSZXUJ20TK82PZPNGFG64XJQBEPRP4E3DU1A5VXQEJ9GVVXHFIC' where id=65; -update noar ti set v0='IZ5G9W8JX3FFNW6K6OINC65XZECSI57UNWCS2CEDRC8F16NDEZAOAFR4WPS5TA756DQH213J5DVEPP2NLWZGK7JHIMHZ1IO23KS65Z21SX0BKUKCY5CX8NI1PH9WPG2LO9Y0LSCC9E30SHAJXBTBXVN8SCF2E5O2GLIPLKD9TRWF4ONYNBOBY7WSNJF9HLV80XJ2NEOLWK2YWRQSZXUJ20TK82PZPNGFG64XJQBEPRP4E3DU1A5VXQEJ9GVVXHFIC' where id=65; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='G1JY3SIR0KJIPR3TR69AO2H2AAM1ORIPCLQ092ZEG2YUU8AQJFYL8GU12CVLA3X6XOEQLNLXJBGPL77CN1CJA4KX88U2EC7E2WMLCO1RXZU33XQ356ZUL3IWE6UOKCZY19AR5S52NMCMYM3U18MELYQFZPC6B1K0KKRFHTF39FC6YHUCG1VUEC7FP1J2EO4EABY6HQOZFM5JCOLTRTYXVIONRERSM0SYIKGFHPRJJKGO7PXPU6UQ2SLQQIN5H87I2' where id=65; -update noar ti set v1='G1JY3SIR0KJIPR3TR69AO2H2AAM1ORIPCLQ092ZEG2YUU8AQJFYL8GU12CVLA3X6XOEQLNLXJBGPL77CN1CJA4KX88U2EC7E2WMLCO1RXZU33XQ356ZUL3IWE6UOKCZY19AR5S52NMCMYM3U18MELYQFZPC6B1K0KKRFHTF39FC6YHUCG1VUEC7FP1J2EO4EABY6HQOZFM5JCOLTRTYXVIONRERSM0SYIKGFHPRJJKGO7PXPU6UQ2SLQQIN5H87I2' where id=65; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='JQB1AV58BGRQQK0ZUJCY3WH0XB67DV9MGLLR03864TD6TKEFNB4L7N2XXJLBULAZPUR2RQCP6AJDUM2IHX9FL8X81EAK39HZIMUZDU4Q2DE894N7D6GCR8IGML0YPLEGPKEDMWXQCX2LGIAR4BW5BV5HV2HZW93EQKWQAAMREEKWQLMFHGW7M1BXCYABJN8WM9AN81MOE41559XZLBWWCWLSDDCJ559SABWTUAX7MNOQ7N11ECRODOLS6M2MSL1Z1' where id=65; -update noar ti set v2='JQB1AV58BGRQQK0ZUJCY3WH0XB67DV9MGLLR03864TD6TKEFNB4L7N2XXJLBULAZPUR2RQCP6AJDUM2IHX9FL8X81EAK39HZIMUZDU4Q2DE894N7D6GCR8IGML0YPLEGPKEDMWXQCX2LGIAR4BW5BV5HV2HZW93EQKWQAAMREEKWQLMFHGW7M1BXCYABJN8WM9AN81MOE41559XZLBWWCWLSDDCJ559SABWTUAX7MNOQ7N11ECRODOLS6M2MSL1Z1' where id=65; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='BIWL5WWAB109BEHRG07GTEAO15240MWVWARPT82JRWBOTUV7OBIO4C51OIHO54JDJ2DVK4G9LEPEQGE2CQ1P92ADSAM0RVV3INHU823TX8VC889YP1YC2LOBD87GRZMKCCMU85H3B11DC9FVFDDOOUAGR8O6N7ROKPKC231HZVRCGBS84BWWSDYMSB69IPBYBIJPPWVXOJGY8XDKMBNQ0Z9D684LHNOTFATXFBXAC6ZRW491Y92WVLQ44DYPR1RCA' where id=65; -update noar ti set v3='BIWL5WWAB109BEHRG07GTEAO15240MWVWARPT82JRWBOTUV7OBIO4C51OIHO54JDJ2DVK4G9LEPEQGE2CQ1P92ADSAM0RVV3INHU823TX8VC889YP1YC2LOBD87GRZMKCCMU85H3B11DC9FVFDDOOUAGR8O6N7ROKPKC231HZVRCGBS84BWWSDYMSB69IPBYBIJPPWVXOJGY8XDKMBNQ0Z9D684LHNOTFATXFBXAC6ZRW491Y92WVLQ44DYPR1RCA' where id=65; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='698QAF0IVRQSE28DJA5L43GQKTT1JI5AQYGN85D28AM2F89AF1QEV50ZLHOR2E63NQIHQ8SG1ZHPZ1XFAPKR47MVXT570CAG5B7V9RFV86B1BIXCHL7ZW00VMQ0XZT86OCGXKTB6RY5JCGVW7DF0ORPEK42RXYKLU54N13HW7QZRCXXK7UJQDN3CC61877S7BRRK67UNJ319QK0W4CHDTAKQKNVGOH7EA4WER7RXDOR1I2MZ0BCKBR20W74IK9QW4' where id=66; -update noar ti set v0='698QAF0IVRQSE28DJA5L43GQKTT1JI5AQYGN85D28AM2F89AF1QEV50ZLHOR2E63NQIHQ8SG1ZHPZ1XFAPKR47MVXT570CAG5B7V9RFV86B1BIXCHL7ZW00VMQ0XZT86OCGXKTB6RY5JCGVW7DF0ORPEK42RXYKLU54N13HW7QZRCXXK7UJQDN3CC61877S7BRRK67UNJ319QK0W4CHDTAKQKNVGOH7EA4WER7RXDOR1I2MZ0BCKBR20W74IK9QW4' where id=66; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='BVA3SX2Z9PCS1MSM7FF4B7NOL1BSM6DFSD8DRUJ6E3B72AK2IHQNZDL9CF1ZZ64ES79VIM3UWRNY0HTNOVPQTLYYV8X4XVMDUVCIF1HO0YVDSY61FB0JE63R1QWQBIZN2VNQCFNKOPRV5OVEH9A18N07BZ3HK7F41TLOJTNE1542S4LU6UIS8YGXEKN2BR8J12JGHM6A51NFV3XHM8R00X6OUQW1CJKHCZR3096G80OJMWGGXXGTV7IAX8WO1FM8D' where id=66; -update noar ti set v1='BVA3SX2Z9PCS1MSM7FF4B7NOL1BSM6DFSD8DRUJ6E3B72AK2IHQNZDL9CF1ZZ64ES79VIM3UWRNY0HTNOVPQTLYYV8X4XVMDUVCIF1HO0YVDSY61FB0JE63R1QWQBIZN2VNQCFNKOPRV5OVEH9A18N07BZ3HK7F41TLOJTNE1542S4LU6UIS8YGXEKN2BR8J12JGHM6A51NFV3XHM8R00X6OUQW1CJKHCZR3096G80OJMWGGXXGTV7IAX8WO1FM8D' where id=66; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='0XZ0ZGTMG3V0ZFQ6JYBLXOKY11SVP6IF7SYZW7QB4DFF8MA2AF36W5NJ8T4S066TWJ55T7VLPN4BS2LJYHSK1QIVTWMLISXX1UIFXO50KO1MS11OUWYA9DSN6L04WRCE03IOQYRHKP9986KQAHCU991PYT9457LFIS74WTMSMGWO3WDY3A5S43LW9TUGK2T5K97ZTG3ROKH05DIT05SIHRDG9CR88OL2AO2S9OA5OKCMCOSS74FGZWUPW0Y3PN1Q0' where id=66; -update noar ti set v2='0XZ0ZGTMG3V0ZFQ6JYBLXOKY11SVP6IF7SYZW7QB4DFF8MA2AF36W5NJ8T4S066TWJ55T7VLPN4BS2LJYHSK1QIVTWMLISXX1UIFXO50KO1MS11OUWYA9DSN6L04WRCE03IOQYRHKP9986KQAHCU991PYT9457LFIS74WTMSMGWO3WDY3A5S43LW9TUGK2T5K97ZTG3ROKH05DIT05SIHRDG9CR88OL2AO2S9OA5OKCMCOSS74FGZWUPW0Y3PN1Q0' where id=66; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='YO0D586IHMZX1B8C2DCNV3RYQMD9KD6COQ4JABGD71L1EYF1ASLO3HLWFSJQNPWWQQ1IN9BOCPEZ4OFKLMLTBICAWMHHO3TVX10J5AVFWTZPC7YAPUO3EVFPFTHN79H82FDE98HY5ZTLOJI235EK7UQH25ESA3GO14Q5AQDWVO9PXILFJ0KH4TB56XS80QY5ED5GHD4STEL7JE87NTVHMGI8129E44RNU6GYOKKVSMC80YGX3C9LEX1MJW5HM5S9O' where id=66; -update noar ti set v3='YO0D586IHMZX1B8C2DCNV3RYQMD9KD6COQ4JABGD71L1EYF1ASLO3HLWFSJQNPWWQQ1IN9BOCPEZ4OFKLMLTBICAWMHHO3TVX10J5AVFWTZPC7YAPUO3EVFPFTHN79H82FDE98HY5ZTLOJI235EK7UQH25ESA3GO14Q5AQDWVO9PXILFJ0KH4TB56XS80QY5ED5GHD4STEL7JE87NTVHMGI8129E44RNU6GYOKKVSMC80YGX3C9LEX1MJW5HM5S9O' where id=66; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='0QHV2YSY3JS1ZXXKYXFEEXTTJD1APH1NKZ20JEPH69432V5SCACYH7RXJEZ0V866WJTDMQZASC6MUI1ARHDRSY7QZY27UXR4HCQV7IKT4WHB55D1DL9DLWV29U5S7V2BF207397J04UF8Z2LLB1GDJMWUHB3BUM1JS7G441LCLHVONHA5Q39X05IZGC4MUS46TBP79QJU6FMCWF7FJD1Y5JYGR0R7804QK4OK58AMKMR0V3PXW53ARTN4A4IY2R0F' where id=67; -update noar ti set v0='0QHV2YSY3JS1ZXXKYXFEEXTTJD1APH1NKZ20JEPH69432V5SCACYH7RXJEZ0V866WJTDMQZASC6MUI1ARHDRSY7QZY27UXR4HCQV7IKT4WHB55D1DL9DLWV29U5S7V2BF207397J04UF8Z2LLB1GDJMWUHB3BUM1JS7G441LCLHVONHA5Q39X05IZGC4MUS46TBP79QJU6FMCWF7FJD1Y5JYGR0R7804QK4OK58AMKMR0V3PXW53ARTN4A4IY2R0F' where id=67; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='HEUXEQC9LEARKUAB3CSE471DMJTC3XKE1M3SBY13Y6OBVKA0SK6OTL4LUZT0OOXL2K3GJAU8HBAOFHVINDQU6OFWT90DFAXJ97E6XFON2TKWEFMDZEK1T9REG076BXB4JBNPRN68ME3Z6T1HRYYXHI5YG3HJOGB6M540EZ4PCY0HUSSFM2I0R97SB3BMILXKYEYGEYVEBDC25614NUQWISOCT3710QEO8XAF42M5RDSG055MF2DLE5RLCJY9VOO6C' where id=67; -update noar ti set v1='HEUXEQC9LEARKUAB3CSE471DMJTC3XKE1M3SBY13Y6OBVKA0SK6OTL4LUZT0OOXL2K3GJAU8HBAOFHVINDQU6OFWT90DFAXJ97E6XFON2TKWEFMDZEK1T9REG076BXB4JBNPRN68ME3Z6T1HRYYXHI5YG3HJOGB6M540EZ4PCY0HUSSFM2I0R97SB3BMILXKYEYGEYVEBDC25614NUQWISOCT3710QEO8XAF42M5RDSG055MF2DLE5RLCJY9VOO6C' where id=67; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='HPH1C6QGUFJVG2CZKPC785GZ8OMYYQ4LWUT0J52VKMQIF4QVXW8Z4PCPAYN0OPTBJHR7SNMKOEETQ3MGBN79486K329C6MVDFX5QJG4LE76AFGFSQZ240ZNTWS3Z2ED8ALOOQO0D79S3YCYK1OKI1225EOJ01ZGUVAY9WL0WO3AHWADP956X9WU07EHB0IMKPJQ40A2CTC1DDU7AMHG18R9YY5ZPRR98XJABECZ80B5N58HK6WKIIP52U736Q38EF' where id=67; -update noar ti set v2='HPH1C6QGUFJVG2CZKPC785GZ8OMYYQ4LWUT0J52VKMQIF4QVXW8Z4PCPAYN0OPTBJHR7SNMKOEETQ3MGBN79486K329C6MVDFX5QJG4LE76AFGFSQZ240ZNTWS3Z2ED8ALOOQO0D79S3YCYK1OKI1225EOJ01ZGUVAY9WL0WO3AHWADP956X9WU07EHB0IMKPJQ40A2CTC1DDU7AMHG18R9YY5ZPRR98XJABECZ80B5N58HK6WKIIP52U736Q38EF' where id=67; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='WFURLW3O0WJEP5Z8S1J3D3KKVQ2QEU65R02H77N9Y8WWJIC3H0DNHH3PJGMHLG0CAE7L910NR1TXW9QRY3R1JBP3SPUM4PHQO9G9JQWZCKQVR0NDMPG41EYI3O5LCXV4UDAD5GOECEQNT1MLDTSQ9ZAK4ULPP3RV13K2UTMYZMX8N6PVGRZDOYWPTGKK8M0ISQBXXVMEXZDCI1EGZXB4QQ2I8Y0PJN5GOM1QD0SSKLCNR3P78IOAP0QK3VJRTYAJ8' where id=67; -update noar ti set v3='WFURLW3O0WJEP5Z8S1J3D3KKVQ2QEU65R02H77N9Y8WWJIC3H0DNHH3PJGMHLG0CAE7L910NR1TXW9QRY3R1JBP3SPUM4PHQO9G9JQWZCKQVR0NDMPG41EYI3O5LCXV4UDAD5GOECEQNT1MLDTSQ9ZAK4ULPP3RV13K2UTMYZMX8N6PVGRZDOYWPTGKK8M0ISQBXXVMEXZDCI1EGZXB4QQ2I8Y0PJN5GOM1QD0SSKLCNR3P78IOAP0QK3VJRTYAJ8' where id=67; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='SH0X13UGX8HL56FVPGWPJXRX9DA4AOCQEJEVPROCNI22GO3O7CKKUG91V32DSR2DOESVXT6VMJFM26QT2BQFNKPY2P1NFDHNHWMPLNYLJ7AI8IL9ZFD0MSDVPUFBBCMB8L7430NKAX5L21A2V9CMCZXUUH9O6T7KWY6MO4Z3713PX4BLTQOQD2BVW0JZTDTDTQWZLCXRQO8UWF96NFONL6QMF0N2RXIJKREO37EOJL8KAHIIKGR4ID33FC3JWAGIK' where id=68; -update noar ti set v0='SH0X13UGX8HL56FVPGWPJXRX9DA4AOCQEJEVPROCNI22GO3O7CKKUG91V32DSR2DOESVXT6VMJFM26QT2BQFNKPY2P1NFDHNHWMPLNYLJ7AI8IL9ZFD0MSDVPUFBBCMB8L7430NKAX5L21A2V9CMCZXUUH9O6T7KWY6MO4Z3713PX4BLTQOQD2BVW0JZTDTDTQWZLCXRQO8UWF96NFONL6QMF0N2RXIJKREO37EOJL8KAHIIKGR4ID33FC3JWAGIK' where id=68; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='XTONFIT2HEX1SIGY1QM512E302HYAGJE0WNYFPAPMTHLX8KTMZFFGAORFVGNLJXHYG09C315O2L2SCBIDFS4RGGH2WB03RXWCUJ6MUKUJ7WODHI7O8BKDIXZFRTCA8B27BS2LDZX2MHUEXY2ESRSZ05CU5LK8TXKZBXBPMKU85ZGO8Q5BNUJ7QYPMJTVF2FNG307B32WP4ZXJXSTFJ7Q95X0I5OSVFYKIY62VYJB8P1R9QL2YFZZ6OE8FGIJORCSW' where id=68; -update noar ti set v1='XTONFIT2HEX1SIGY1QM512E302HYAGJE0WNYFPAPMTHLX8KTMZFFGAORFVGNLJXHYG09C315O2L2SCBIDFS4RGGH2WB03RXWCUJ6MUKUJ7WODHI7O8BKDIXZFRTCA8B27BS2LDZX2MHUEXY2ESRSZ05CU5LK8TXKZBXBPMKU85ZGO8Q5BNUJ7QYPMJTVF2FNG307B32WP4ZXJXSTFJ7Q95X0I5OSVFYKIY62VYJB8P1R9QL2YFZZ6OE8FGIJORCSW' where id=68; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='RY89K8BQULSAX3380IKWDM4327A0KVRXR30KP7138JM19MTFBYDO7J2LJ19ELA21B8W5IAZML9HOTFLA7NPG750N6FN38INLWBAJ3TMDTFSYBII1F8YV4CNE8GOCD3OFB5SZJVJDHOEH4UQTNLDGQN2J7Y3XLRAKJMY1YGJ1WNYDHMTX4OS8KAD253DIL83HFP975HY2WECLVORROCIW0RCIE8FIT2XJE3UZAJFX6CB0WEHY7ARG344LT3RA0JDMU' where id=68; -update noar ti set v2='RY89K8BQULSAX3380IKWDM4327A0KVRXR30KP7138JM19MTFBYDO7J2LJ19ELA21B8W5IAZML9HOTFLA7NPG750N6FN38INLWBAJ3TMDTFSYBII1F8YV4CNE8GOCD3OFB5SZJVJDHOEH4UQTNLDGQN2J7Y3XLRAKJMY1YGJ1WNYDHMTX4OS8KAD253DIL83HFP975HY2WECLVORROCIW0RCIE8FIT2XJE3UZAJFX6CB0WEHY7ARG344LT3RA0JDMU' where id=68; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='K0QQA5MDSGU6MWXGWC8F7T0YS0JNAL4TQNOIP56TMPVUN1QR0Q14GHF4GKZWKRBL01BCXWVIK7LPSH8RK6XBF83GOTH1FHSOT1P670Z9M6MYB7PVDWYHPWDY3VP2CW6P4EJNOWB3MY6UN0CFQ95GHCPTJNSBJ880N6X6ZZC34QYPGIPJ62NK5BHIX8VITCS0DRF9LD9GH67NWBAL9OQB6JMKGI3968IXK81I56OTHW10WCBT1ITQDOXNTANN2BZ4Y' where id=68; -update noar ti set v3='K0QQA5MDSGU6MWXGWC8F7T0YS0JNAL4TQNOIP56TMPVUN1QR0Q14GHF4GKZWKRBL01BCXWVIK7LPSH8RK6XBF83GOTH1FHSOT1P670Z9M6MYB7PVDWYHPWDY3VP2CW6P4EJNOWB3MY6UN0CFQ95GHCPTJNSBJ880N6X6ZZC34QYPGIPJ62NK5BHIX8VITCS0DRF9LD9GH67NWBAL9OQB6JMKGI3968IXK81I56OTHW10WCBT1ITQDOXNTANN2BZ4Y' where id=68; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='F8JII6T7EL9A2FGD4HE506JAZC4P6QI58JI9RGODOBPBX0Y00UJ445PLGE5CQ4XSXAUEYUT6G6MPZDDL3EYDNOVKVEZVYWF0W2N6QBVV6X3GX6SUH0RH4P10LZ8RKS4V2K7VAKZKA2FS86B4LDKWPN0QAQQMXW3FGDW7FS0XLN2MTR03LEYDC0V0QGM2WM3JJIFFKLFJPR7JWYYIVZGLHLRPS83XU2C4PPBW445DELM7QRQR75DW3GYB3P7RSAXQJ' where id=69; -update noar ti set v0='F8JII6T7EL9A2FGD4HE506JAZC4P6QI58JI9RGODOBPBX0Y00UJ445PLGE5CQ4XSXAUEYUT6G6MPZDDL3EYDNOVKVEZVYWF0W2N6QBVV6X3GX6SUH0RH4P10LZ8RKS4V2K7VAKZKA2FS86B4LDKWPN0QAQQMXW3FGDW7FS0XLN2MTR03LEYDC0V0QGM2WM3JJIFFKLFJPR7JWYYIVZGLHLRPS83XU2C4PPBW445DELM7QRQR75DW3GYB3P7RSAXQJ' where id=69; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='UL0VE33M30IXP67YW5TUFCZLX9SKK5B3VRV18OHVV02RB1ZIQ78WDAT685TN3960YG10S2PNL4EF95AKEF0FH0MLMHW4GX85T3HCZXU5I42PNDJ373M26PQ1RWWONT9LJHU905W31PPMCW8F0LU25K17R0EL5D7HH5GCZCHFU306BUREP9I8O4HIU9C58BK9X2Y04SPFCJWFGJE0A8YAPFEIOX0DBCHXBX8P1T6UB9V6AIM2KJOXBQPWITZ7OD31B' where id=69; -update noar ti set v1='UL0VE33M30IXP67YW5TUFCZLX9SKK5B3VRV18OHVV02RB1ZIQ78WDAT685TN3960YG10S2PNL4EF95AKEF0FH0MLMHW4GX85T3HCZXU5I42PNDJ373M26PQ1RWWONT9LJHU905W31PPMCW8F0LU25K17R0EL5D7HH5GCZCHFU306BUREP9I8O4HIU9C58BK9X2Y04SPFCJWFGJE0A8YAPFEIOX0DBCHXBX8P1T6UB9V6AIM2KJOXBQPWITZ7OD31B' where id=69; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='D4UD3SBDHA9JBDOMG893SFTQRM5OYZ3J2M3Q9WNXOIKVAIDIE29YFBF6RPEB4UCO3TBKD0BLC8N0N4JELRPV86CLQHBAB00EMHL3TQ16NVWD8QSODCP4CXR32K3CRIN4PEENNT1B02AHPU31J8OX9N6VRA05OYLGJY03A0338N1K6XQJV7I8G5HZ4YPDEEO5S8QMYSQ0IMQDCDY15QVSP2P0LF127WSNMC83PNQC9E0GASDGRD6BEJ0UWN8Y1IJ94' where id=69; -update noar ti set v2='D4UD3SBDHA9JBDOMG893SFTQRM5OYZ3J2M3Q9WNXOIKVAIDIE29YFBF6RPEB4UCO3TBKD0BLC8N0N4JELRPV86CLQHBAB00EMHL3TQ16NVWD8QSODCP4CXR32K3CRIN4PEENNT1B02AHPU31J8OX9N6VRA05OYLGJY03A0338N1K6XQJV7I8G5HZ4YPDEEO5S8QMYSQ0IMQDCDY15QVSP2P0LF127WSNMC83PNQC9E0GASDGRD6BEJ0UWN8Y1IJ94' where id=69; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='KQ5EYSAZRD9DFQXP8GI1TJSR66GASD0R0QC3Q3D6XQ5C5K0R2RXID4LPOALCTZY5L6YB87HLQG68GE0N2BEPQTHDQD0ENZQAFNHM6WTXME02GPCVYXKZNSKJWNK5VWDTPR1K8E2DV6X41P6YE090437PZPHO48ERONXAQ73XYWDIFTBPXPKYIX8P9W5ONFISC45VDEWNQEWS0EXF0EMMCRIBE1ENG6QDV871LI7SGYMXD1I5CE8C9P6YCJ1K8OOXC' where id=69; -update noar ti set v3='KQ5EYSAZRD9DFQXP8GI1TJSR66GASD0R0QC3Q3D6XQ5C5K0R2RXID4LPOALCTZY5L6YB87HLQG68GE0N2BEPQTHDQD0ENZQAFNHM6WTXME02GPCVYXKZNSKJWNK5VWDTPR1K8E2DV6X41P6YE090437PZPHO48ERONXAQ73XYWDIFTBPXPKYIX8P9W5ONFISC45VDEWNQEWS0EXF0EMMCRIBE1ENG6QDV871LI7SGYMXD1I5CE8C9P6YCJ1K8OOXC' where id=69; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='XK5O7XTAISPFIB4Z0ROPEHZPDBYTMU3HE8O4SYGLGXA3MSF1CURWCJHF6R1N3IKYA4DMTP13JKTOWRGUSJ3B6FPWGR861YYB8EHM4C8C4ZU8C6LZ96TK1YV9D6TGR40WV1D1HVQK8PTSUPPVW13RY34HL6RQ8R41H1VK4RJAYO6VUZ5YI8ASG0ZA28JDVAQ4CPQW84SVDJLW0O8CMXLG3TDHLCKQA6P44I7NR3PI4D0M6Z337XTW17XJHDDEPZQWO' where id=70; -update noar ti set v0='XK5O7XTAISPFIB4Z0ROPEHZPDBYTMU3HE8O4SYGLGXA3MSF1CURWCJHF6R1N3IKYA4DMTP13JKTOWRGUSJ3B6FPWGR861YYB8EHM4C8C4ZU8C6LZ96TK1YV9D6TGR40WV1D1HVQK8PTSUPPVW13RY34HL6RQ8R41H1VK4RJAYO6VUZ5YI8ASG0ZA28JDVAQ4CPQW84SVDJLW0O8CMXLG3TDHLCKQA6P44I7NR3PI4D0M6Z337XTW17XJHDDEPZQWO' where id=70; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='E4LFFSA1J925QOFISTE14MMMS7TJDPBPFHJL1P62IBB6ZQ9LV16SBA297IWYL86064QNSAC8FODZZMTRG5RDXF9PAB5HCV6CFI56OTO2F55OT2MGDE0QHFO8BE53V5Z7SA6DJI6QGQN45WQJ1B5HOT4E5D3JVDJ1Y3R7MQYUN99O0DDLCGTSSGDMGQI4U7VAIR8P0RDGQRLWQGLBN3Z73EEZBUROI2QDIANHKZX0TA7KKBLIMISMPKIE0X2PMW8SM' where id=70; -update noar ti set v1='E4LFFSA1J925QOFISTE14MMMS7TJDPBPFHJL1P62IBB6ZQ9LV16SBA297IWYL86064QNSAC8FODZZMTRG5RDXF9PAB5HCV6CFI56OTO2F55OT2MGDE0QHFO8BE53V5Z7SA6DJI6QGQN45WQJ1B5HOT4E5D3JVDJ1Y3R7MQYUN99O0DDLCGTSSGDMGQI4U7VAIR8P0RDGQRLWQGLBN3Z73EEZBUROI2QDIANHKZX0TA7KKBLIMISMPKIE0X2PMW8SM' where id=70; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='WELHWOKHZZ3O1QOR1MUIKUDC5HW8OSXP2MW0SKCUQTLCQPUWZ1BV3CVEABS1PLQN8EU1KCDQ5ICWW0IK8T963FIDGUKH0IDGQLRP4MH22A3QC6J7AP6S8I6JWZ630SDBVRM3I5ZT7ZIJN0QLI73Z84JXQFRJLF0A9GYYOL03KCTCIOESIKUY8130AUY7VF2BGWXMFEGV2U45EDGKVUP4ILPESV4JXV9FXLMXY1OEY19Q9C5A6YZQNQTBEES9CXFH1' where id=70; -update noar ti set v2='WELHWOKHZZ3O1QOR1MUIKUDC5HW8OSXP2MW0SKCUQTLCQPUWZ1BV3CVEABS1PLQN8EU1KCDQ5ICWW0IK8T963FIDGUKH0IDGQLRP4MH22A3QC6J7AP6S8I6JWZ630SDBVRM3I5ZT7ZIJN0QLI73Z84JXQFRJLF0A9GYYOL03KCTCIOESIKUY8130AUY7VF2BGWXMFEGV2U45EDGKVUP4ILPESV4JXV9FXLMXY1OEY19Q9C5A6YZQNQTBEES9CXFH1' where id=70; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='NN98J202D6MHL1OX7XZP6CB0X67BBW02WJIVUBQB2P491X3NR1C3H5I3MQDN7Q3OXKI7MXTZ3FV4ML1D36A0R5FX849N0G6G2M1UJ6QXJ9WVSOXS2W12746BN2YY54FNQ7N64CCRQ89DPF8L0YR70NCY8OYFR71LRKCSNT3ZEOH23XMHP050HCWTJOQTTKBAMOQDUVGC0YREF4EZX35UDJ4WKM194NIE6QO8W299YKWBGRD6IQGW4F2WOA8OM1TA6' where id=70; -update noar ti set v3='NN98J202D6MHL1OX7XZP6CB0X67BBW02WJIVUBQB2P491X3NR1C3H5I3MQDN7Q3OXKI7MXTZ3FV4ML1D36A0R5FX849N0G6G2M1UJ6QXJ9WVSOXS2W12746BN2YY54FNQ7N64CCRQ89DPF8L0YR70NCY8OYFR71LRKCSNT3ZEOH23XMHP050HCWTJOQTTKBAMOQDUVGC0YREF4EZX35UDJ4WKM194NIE6QO8W299YKWBGRD6IQGW4F2WOA8OM1TA6' where id=70; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='YFRPIK542K92D9ORHSDG0MO6HRMLHASGU1I7N57A6CFWF99HWYVDJAAWC61TL0640QAGTV46V50HKTS9LN764W2M1GQYFEDLWL1FN9A95BSYS5MF2IKYROY382PGSN7VINU781K2XXYSND5VJ2LEDS0TMQHC6XG7RB2P7VZME4UZMAK8U0DNCI5YT2EYV9LIO3EYVQLMKKWBQFLL25VIXRXF0XCDB9NJBFSAWVEJL8C0FGOELC9E6FNJP1JX5JLCH' where id=71; -update noar ti set v0='YFRPIK542K92D9ORHSDG0MO6HRMLHASGU1I7N57A6CFWF99HWYVDJAAWC61TL0640QAGTV46V50HKTS9LN764W2M1GQYFEDLWL1FN9A95BSYS5MF2IKYROY382PGSN7VINU781K2XXYSND5VJ2LEDS0TMQHC6XG7RB2P7VZME4UZMAK8U0DNCI5YT2EYV9LIO3EYVQLMKKWBQFLL25VIXRXF0XCDB9NJBFSAWVEJL8C0FGOELC9E6FNJP1JX5JLCH' where id=71; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='J3XU346XQGSUTTYFKWBTN7IYUOQEXQLFIU9YA6TADH3NMINHBPD8E6ZTZVGXXVVOF1GOMO7A0BMJIYA5ARDZ3ZXVFYPI8596XQ87MLQQZVX0YOKWSJFNHFFG3SFF1OFJ0GDOPZ5UBMJ6CXHX2L26U8I711AD3LPM88H99UXMVTA7Z0ECDKLB4FJ0XIGPWA9QWTSZBJTVXG1XDL1LVN0PZTE2A7LUO9ZLXL0Q4LSQD5MT1OTQL30ZZWSSOHR18KNLV' where id=71; -update noar ti set v1='J3XU346XQGSUTTYFKWBTN7IYUOQEXQLFIU9YA6TADH3NMINHBPD8E6ZTZVGXXVVOF1GOMO7A0BMJIYA5ARDZ3ZXVFYPI8596XQ87MLQQZVX0YOKWSJFNHFFG3SFF1OFJ0GDOPZ5UBMJ6CXHX2L26U8I711AD3LPM88H99UXMVTA7Z0ECDKLB4FJ0XIGPWA9QWTSZBJTVXG1XDL1LVN0PZTE2A7LUO9ZLXL0Q4LSQD5MT1OTQL30ZZWSSOHR18KNLV' where id=71; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='V469URBLW2ZEIAF61MEEW6SQ4UZ7WSBF78RU9OHWM579KG5YAGJCOOL2SV7LBUMZUYV1WJUMHTYCDPJ764B24L0V7EQSHIBQG2KDPUGQHYVCB4QOVKXRQXAJ1X5F6M4U6TAMOIZWYD95PG51NQCC26IJP9HD0FQWEQHCP3ORX0JHMU0GYCVSC86BDTZNN1AAOUI642250ETQPT58EUJ6MDBK7RV5OICFG77ADQ0GINX6D3BNQ8OQ3Y0AWFVBJIKHF' where id=71; -update noar ti set v2='V469URBLW2ZEIAF61MEEW6SQ4UZ7WSBF78RU9OHWM579KG5YAGJCOOL2SV7LBUMZUYV1WJUMHTYCDPJ764B24L0V7EQSHIBQG2KDPUGQHYVCB4QOVKXRQXAJ1X5F6M4U6TAMOIZWYD95PG51NQCC26IJP9HD0FQWEQHCP3ORX0JHMU0GYCVSC86BDTZNN1AAOUI642250ETQPT58EUJ6MDBK7RV5OICFG77ADQ0GINX6D3BNQ8OQ3Y0AWFVBJIKHF' where id=71; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='TIJ8M4LSSCBMCRQH08HT77VAUZ8XFIQZVBXJHL3NXBGRSQE5U28PS3F48SBV2BPIPLVP4RD9YCT8ZQHAWZE3B33957HHHGBJI5909MJZPWRYVOIZ30673AZ6SX85JS8DWXUX1JS09GVMCE0NK4H29RAFDW1IRBGKLXJF9X4XUTWN91DOQJY9OBWHFL99KEU4FIZIF1K5C1EME3AXDEUDC6E4ZJ81PTJCZ4L4VHTTRUZ4EKK0NAFII3D31H4B4Z7WD' where id=71; -update noar ti set v3='TIJ8M4LSSCBMCRQH08HT77VAUZ8XFIQZVBXJHL3NXBGRSQE5U28PS3F48SBV2BPIPLVP4RD9YCT8ZQHAWZE3B33957HHHGBJI5909MJZPWRYVOIZ30673AZ6SX85JS8DWXUX1JS09GVMCE0NK4H29RAFDW1IRBGKLXJF9X4XUTWN91DOQJY9OBWHFL99KEU4FIZIF1K5C1EME3AXDEUDC6E4ZJ81PTJCZ4L4VHTTRUZ4EKK0NAFII3D31H4B4Z7WD' where id=71; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='4923FUZ9C8VB2SS9SMTKUEQSUCPJZ6BMZTZFUSOPYJTC2T2ULN27ETBZLFEFZWW7VQMA7VCSG2AUK8L6A8TDZLTJOMDK8K711AOUGXIPUHZ5K8T04HSHLNO24YR00ML2XFPKY189GFWKT5EJF8FL0TZEHJBQRSNDOI0J68GBH6XYG2U7T7MBJJRMRAAC3DDBU62M7PEOTA0HVZEUZQQ3AO5N3ED4LQJ1J7E1ELSD325MMGH4ORUU4OU454E3TFNPW' where id=72; -update noar ti set v0='4923FUZ9C8VB2SS9SMTKUEQSUCPJZ6BMZTZFUSOPYJTC2T2ULN27ETBZLFEFZWW7VQMA7VCSG2AUK8L6A8TDZLTJOMDK8K711AOUGXIPUHZ5K8T04HSHLNO24YR00ML2XFPKY189GFWKT5EJF8FL0TZEHJBQRSNDOI0J68GBH6XYG2U7T7MBJJRMRAAC3DDBU62M7PEOTA0HVZEUZQQ3AO5N3ED4LQJ1J7E1ELSD325MMGH4ORUU4OU454E3TFNPW' where id=72; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='B7VS1GQXUXDHDE6750REEMOYWEJ93J46HCF5TDBY8M18I7QXJ1Z6GIIWMG2G69DN2TS193N04XFFNLPJK04HK78MILVNVZWO2XQ8Z4V71TBKQT92T4RM00KM7F4D8L3UTH8W5PB28LCTQO9PEUBNXC779BX4ZIO2BJB6C0FMJ0WSNX18FVMQZ0Q4SYK6J6T13COUNIOXXSL3X9F41F2317W6F5EX746NSJS4YYP8K63DZFWD4B01Y3P6NGTK85VEZ' where id=72; -update noar ti set v1='B7VS1GQXUXDHDE6750REEMOYWEJ93J46HCF5TDBY8M18I7QXJ1Z6GIIWMG2G69DN2TS193N04XFFNLPJK04HK78MILVNVZWO2XQ8Z4V71TBKQT92T4RM00KM7F4D8L3UTH8W5PB28LCTQO9PEUBNXC779BX4ZIO2BJB6C0FMJ0WSNX18FVMQZ0Q4SYK6J6T13COUNIOXXSL3X9F41F2317W6F5EX746NSJS4YYP8K63DZFWD4B01Y3P6NGTK85VEZ' where id=72; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='S61LPEQUXN6S0KC9Z1W5QYATW6HZSBX9A15MTONV9MM06P4X29JVFRT9M9KI9Y6SROQC4UNWLDVRHWG4M0DIJASW8JJH3K81JVOUTP8WN2RTBI42XXSNM4LRIIOLNNGRD6GW44EJGUSYM6WGCTU6NERD42WI25YLT090KYIP4IWBLEF91Z2NQEVEOG67FUTLFII8YZ7OIO5F52R5QGHWX63SVILEPIKEZ6MOBRF692OI64Z3A8LLYXRCBG6G2R15Q' where id=72; -update noar ti set v2='S61LPEQUXN6S0KC9Z1W5QYATW6HZSBX9A15MTONV9MM06P4X29JVFRT9M9KI9Y6SROQC4UNWLDVRHWG4M0DIJASW8JJH3K81JVOUTP8WN2RTBI42XXSNM4LRIIOLNNGRD6GW44EJGUSYM6WGCTU6NERD42WI25YLT090KYIP4IWBLEF91Z2NQEVEOG67FUTLFII8YZ7OIO5F52R5QGHWX63SVILEPIKEZ6MOBRF692OI64Z3A8LLYXRCBG6G2R15Q' where id=72; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='KE8FRYTJ2OYB6WOW5AGK9JHM88CUEACNTHYQGJRJQCNYWF9FQ0GOGT9QIOGLTTYI37BBJ2VY2E1H8NII07NIN5AQZM0C18IA4ROV991DHHC0TM0NNQXF45XXSIFT1U1K3ZAQC5YRAGT7R5URPKSWDTLEMM411VW6Q8K8MFTDXJ8FYPUTCHRBMZ595EE8BL3PLGCZP06SS0RXW41XEWXQFN8QAGDJ1LJDGJ5YG8NZNPNSN8S9YP482ZLF6P926WSFU' where id=72; -update noar ti set v3='KE8FRYTJ2OYB6WOW5AGK9JHM88CUEACNTHYQGJRJQCNYWF9FQ0GOGT9QIOGLTTYI37BBJ2VY2E1H8NII07NIN5AQZM0C18IA4ROV991DHHC0TM0NNQXF45XXSIFT1U1K3ZAQC5YRAGT7R5URPKSWDTLEMM411VW6Q8K8MFTDXJ8FYPUTCHRBMZ595EE8BL3PLGCZP06SS0RXW41XEWXQFN8QAGDJ1LJDGJ5YG8NZNPNSN8S9YP482ZLF6P926WSFU' where id=72; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='9CB91B5WD7UMVUJQGVQTD49SCGF6WMV2I0CFXJR3APIWUPWNP8LSR2CY8OL84FBDSRP2MGMNBJ4P31LCXG2IC3ICVJPNM4P0HZQYYY1L5J9BDJOAL4GUS7JCFSZ4WTU53CL385XSK45G56JNU9E6MWHSODZYLZ5AJKVAKYUNUY9UGOMT4RE9K1J9CH1X8WHQQYXODL85IYJ2Z9I8ZE32C6R98O6FEHP06YB7DZBDSCOHS4OA31HEM1O12HC0DYBIC' where id=73; -update noar ti set v0='9CB91B5WD7UMVUJQGVQTD49SCGF6WMV2I0CFXJR3APIWUPWNP8LSR2CY8OL84FBDSRP2MGMNBJ4P31LCXG2IC3ICVJPNM4P0HZQYYY1L5J9BDJOAL4GUS7JCFSZ4WTU53CL385XSK45G56JNU9E6MWHSODZYLZ5AJKVAKYUNUY9UGOMT4RE9K1J9CH1X8WHQQYXODL85IYJ2Z9I8ZE32C6R98O6FEHP06YB7DZBDSCOHS4OA31HEM1O12HC0DYBIC' where id=73; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='S7CPPV8WQDPDQMB5RNVLBUJAKOVJBLST3TEX0MJWZRSDKW4SF2UVZGW9R8WB4C6CR8IOYE4C61X0QCFKGFCBYY5RGZ6XU4S9Q71ACMAUY7VKDJONUFELZY4JI56S8XXUWWNWC16FV3B4TD5TH5TBVNRFKO3Y2XM6VKRG888T2OH82TJ4N7910IPY9Y2GLZ274CV5ZGR23AXHVIBENR1PPHTSHILA9AYW2POKOK63JMQMVW2UD2GIG7452E121LVXP' where id=73; -update noar ti set v1='S7CPPV8WQDPDQMB5RNVLBUJAKOVJBLST3TEX0MJWZRSDKW4SF2UVZGW9R8WB4C6CR8IOYE4C61X0QCFKGFCBYY5RGZ6XU4S9Q71ACMAUY7VKDJONUFELZY4JI56S8XXUWWNWC16FV3B4TD5TH5TBVNRFKO3Y2XM6VKRG888T2OH82TJ4N7910IPY9Y2GLZ274CV5ZGR23AXHVIBENR1PPHTSHILA9AYW2POKOK63JMQMVW2UD2GIG7452E121LVXP' where id=73; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='3S8L7M742YLSQI65DUNEZDD5C771A435R9PDBHHR38AC1ZYMWG0OW6BOG94AIX3ATWJ055JF0X4NENH0CA4L6J0U1XGAQQN70O3LWLR57F7MMISEL41TV895SEC4CXOT4KSR5MBMHJL0FR88ASZWP2KW1RDWN4V9K5XGB0ES1PLVYCDZ45CZCOPP35UFZ3WMG614VUYG4JP7VX96DA6WRTSFQIBP3UAPHGOU05UC0SLZ7DYNPWHOMWEVI0OZI5V40' where id=73; -update noar ti set v2='3S8L7M742YLSQI65DUNEZDD5C771A435R9PDBHHR38AC1ZYMWG0OW6BOG94AIX3ATWJ055JF0X4NENH0CA4L6J0U1XGAQQN70O3LWLR57F7MMISEL41TV895SEC4CXOT4KSR5MBMHJL0FR88ASZWP2KW1RDWN4V9K5XGB0ES1PLVYCDZ45CZCOPP35UFZ3WMG614VUYG4JP7VX96DA6WRTSFQIBP3UAPHGOU05UC0SLZ7DYNPWHOMWEVI0OZI5V40' where id=73; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='4IFPJW2AGP7HSP6CEN4SLLL8XE9Y4UTBLDCOYCIBMK6ZI8WM3BGOO19ZT2LX4G79QMJH7TE7KOPYDR2PAO6APT3JIJ3OGNH85CTBAQZWOY1LXIMDPOG1OS5OZNKDU7SZTUSLETAHRE3VAZ5IAO493S5N8UOST4P2BM6XB92FDVW3C9WSZ9A4O2MOIH79TL4UPKF96HE7MVRRPC2A64ETW4GZO1MH2EPYGWHC1UTKZFJGEFHHUFM46YKA7B1AHZZD2' where id=73; -update noar ti set v3='4IFPJW2AGP7HSP6CEN4SLLL8XE9Y4UTBLDCOYCIBMK6ZI8WM3BGOO19ZT2LX4G79QMJH7TE7KOPYDR2PAO6APT3JIJ3OGNH85CTBAQZWOY1LXIMDPOG1OS5OZNKDU7SZTUSLETAHRE3VAZ5IAO493S5N8UOST4P2BM6XB92FDVW3C9WSZ9A4O2MOIH79TL4UPKF96HE7MVRRPC2A64ETW4GZO1MH2EPYGWHC1UTKZFJGEFHHUFM46YKA7B1AHZZD2' where id=73; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='4U6SRBJ8NTLWAPC4SDPZN3RYZ9YORA5VUTNZRJQ3FQKSYJAR1M1UK2FJJ8B1OMN40KVL43M24TSA7L1AR5A0XYNR6YMUDOC6THT5225G3J01YM5KYXU7BAN0K227SGQ3ZBKU3WMVIEFH9O14YCEEAGQ8WBW6IZSVIHOM0LVA8Y7QEZFWEEEFR7PFKFORQBXENJOCB433JZ3HSAIPZRC24S7W036J5ISPH9LDVP832MG1NY80OOV60URI9JMNGYID9' where id=74; -update noar ti set v0='4U6SRBJ8NTLWAPC4SDPZN3RYZ9YORA5VUTNZRJQ3FQKSYJAR1M1UK2FJJ8B1OMN40KVL43M24TSA7L1AR5A0XYNR6YMUDOC6THT5225G3J01YM5KYXU7BAN0K227SGQ3ZBKU3WMVIEFH9O14YCEEAGQ8WBW6IZSVIHOM0LVA8Y7QEZFWEEEFR7PFKFORQBXENJOCB433JZ3HSAIPZRC24S7W036J5ISPH9LDVP832MG1NY80OOV60URI9JMNGYID9' where id=74; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='SCY94S3SS1B716ZVXOMSQXIV84IAE60B4888EQGK9S6YVWIAK3ITNTA2YS14A1ZOOLSXNTO6PBVIKTWMCKEB8HS0T5GUZT07HJBEQUYT8GVSB79L70LZGRGY9VKK5Y8YQJ98W4XVTBN1B48C9C3X130LLONJA90FQION5E17K8KKEU7GJ8VXKA6GVLAB3G9XJ2NS8G5IKQKZUDTR9NX23NF738ZU6JC50B49RYZJC4JC2WT98OCAJUW46SCHCWJZX' where id=74; -update noar ti set v1='SCY94S3SS1B716ZVXOMSQXIV84IAE60B4888EQGK9S6YVWIAK3ITNTA2YS14A1ZOOLSXNTO6PBVIKTWMCKEB8HS0T5GUZT07HJBEQUYT8GVSB79L70LZGRGY9VKK5Y8YQJ98W4XVTBN1B48C9C3X130LLONJA90FQION5E17K8KKEU7GJ8VXKA6GVLAB3G9XJ2NS8G5IKQKZUDTR9NX23NF738ZU6JC50B49RYZJC4JC2WT98OCAJUW46SCHCWJZX' where id=74; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='3MOJPPCWMCY7LZX1V6N08LUS6P6IF0O2G2B0IAWFYV7VSZAAZ4L4RDOV28ENC4J6IBBS0P7WMBPLT1UNJNO2YNESJC20K1T2V039W6DB4U9AA95A3HROO8HCLVDHI1X5TDLJLWYKYFF05G5GH6JUMPNAHYR0QTCV2NK33N1TIWM2KK21ENP7NKESYWGUI66SDGIJ7R08PIKV2GFT2SXWISXE61UWPDBLO1MWKLA3DU9OUT4WDNEBDK8CX6EUPDVTH' where id=74; -update noar ti set v2='3MOJPPCWMCY7LZX1V6N08LUS6P6IF0O2G2B0IAWFYV7VSZAAZ4L4RDOV28ENC4J6IBBS0P7WMBPLT1UNJNO2YNESJC20K1T2V039W6DB4U9AA95A3HROO8HCLVDHI1X5TDLJLWYKYFF05G5GH6JUMPNAHYR0QTCV2NK33N1TIWM2KK21ENP7NKESYWGUI66SDGIJ7R08PIKV2GFT2SXWISXE61UWPDBLO1MWKLA3DU9OUT4WDNEBDK8CX6EUPDVTH' where id=74; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='2MN0GKNKCTDHL4JG1UNE5BGPMWHKFP3SFIVF787RKBYIYM4V42QL95CZK3ZMDNGL22XWELJ9BRARV4E26FA9ELLLL8FLPS2BL746WO8ZHKFPHQAFHP3N921BQY2Y7B5QH99R6SQ6KG7XD5V25CB8AVBU443FEHB4IZOUSQTODXVYZAQDILSXV440GHY7IJ09FQ1RUBULQPG56JJ7X6JXDN7S1R5ZSRUC368RB27S342XS7OQM07VWM99BRYXIKURK' where id=74; -update noar ti set v3='2MN0GKNKCTDHL4JG1UNE5BGPMWHKFP3SFIVF787RKBYIYM4V42QL95CZK3ZMDNGL22XWELJ9BRARV4E26FA9ELLLL8FLPS2BL746WO8ZHKFPHQAFHP3N921BQY2Y7B5QH99R6SQ6KG7XD5V25CB8AVBU443FEHB4IZOUSQTODXVYZAQDILSXV440GHY7IJ09FQ1RUBULQPG56JJ7X6JXDN7S1R5ZSRUC368RB27S342XS7OQM07VWM99BRYXIKURK' where id=74; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='6FCV3W9RQ4B1P1SNF745MID6YK0F7WDBWW25H2UR539DVV2PQTICFZ3C9QRFZ7ZBNTI2UVVQCCYVZK4VSX7KOULFZEAF0229LMKU9YEYGXW2ZKC0G6IBPPXBH35OATNOZKKGOFWRGJGBQKPUDUZKA83L9A9WLEIUNSVJ7DQZXUYWB4XRLAIDABG7IIXI6TMBG5IC27J3U9DL8GF8M5C8Q57JV222KGMXJVQKVHIIHMOMQA46GOG7EHHPAUINUVX8B' where id=75; -update noar ti set v0='6FCV3W9RQ4B1P1SNF745MID6YK0F7WDBWW25H2UR539DVV2PQTICFZ3C9QRFZ7ZBNTI2UVVQCCYVZK4VSX7KOULFZEAF0229LMKU9YEYGXW2ZKC0G6IBPPXBH35OATNOZKKGOFWRGJGBQKPUDUZKA83L9A9WLEIUNSVJ7DQZXUYWB4XRLAIDABG7IIXI6TMBG5IC27J3U9DL8GF8M5C8Q57JV222KGMXJVQKVHIIHMOMQA46GOG7EHHPAUINUVX8B' where id=75; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='VR4NED14HX9SFOJ6RS62SIRCHHMQO3F4DS1GHLTK1FLBVMJXSIIOD3V34SKQ2YQ8L42A9YV5B4Z1P20IFZ4S2BLLN1NOEH9OCHU5DIAKL34M997K9TU6EZKHNIMBS9OJKTRCP7LJTZZCTVA19GUNQUTJOZCAWEOM8665SC7QKLUM7T76K52DX1ITTPE90L9F00V7IZM54QP6AGZEH6K9W9QYX3MD13TIZAONM333SH8WSZ8Y1GGIHRMKJOSHQBPST' where id=75; -update noar ti set v1='VR4NED14HX9SFOJ6RS62SIRCHHMQO3F4DS1GHLTK1FLBVMJXSIIOD3V34SKQ2YQ8L42A9YV5B4Z1P20IFZ4S2BLLN1NOEH9OCHU5DIAKL34M997K9TU6EZKHNIMBS9OJKTRCP7LJTZZCTVA19GUNQUTJOZCAWEOM8665SC7QKLUM7T76K52DX1ITTPE90L9F00V7IZM54QP6AGZEH6K9W9QYX3MD13TIZAONM333SH8WSZ8Y1GGIHRMKJOSHQBPST' where id=75; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='K44JPUE83N81GY0NRA8JTL4L7RVB36Y1VSSA6FW1525WMM6UX5Z3GQF6EJCD31YVWOX3MBPJLXPE7JOZZ4S9TP2Z2Q9BJY1WJEKGEAKGE40A849FADDQOYMU8UU515ACU1KGHBF4FBBFR96T4ZFZXWGBKQHBZU6U34RWRZ5YR12UMC7LGIECJAS0UK774QOLMN97XVATXTPJGCOR0U7LUH4GUP2ZHZ37QMCH3Z7E91HPP5S8QXWF3TCD67HS7T1EZ' where id=75; -update noar ti set v2='K44JPUE83N81GY0NRA8JTL4L7RVB36Y1VSSA6FW1525WMM6UX5Z3GQF6EJCD31YVWOX3MBPJLXPE7JOZZ4S9TP2Z2Q9BJY1WJEKGEAKGE40A849FADDQOYMU8UU515ACU1KGHBF4FBBFR96T4ZFZXWGBKQHBZU6U34RWRZ5YR12UMC7LGIECJAS0UK774QOLMN97XVATXTPJGCOR0U7LUH4GUP2ZHZ37QMCH3Z7E91HPP5S8QXWF3TCD67HS7T1EZ' where id=75; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='HKHJA63CY8D34IU6BFOOG21VORX8C7M672KRPN0C1TLSDC38MGXI0X1UKV44671YDMLLN3I1A693ZWIQU1D2QFK5QG9LTW723P6OP18YO4NNBNXP66QI61PC27KKYBK83SICHFNO7K37JF1V5NTHTDCTPT7T7JND1R1NEOWUQ0U4NXLLIINLQWK284K74U34OD2R68V2M0OXV123NWAGWE5XWOYU3GU1CH3K5W13UGW2N15G0QU8L7BOPSOQ6Z7I7' where id=75; -update noar ti set v3='HKHJA63CY8D34IU6BFOOG21VORX8C7M672KRPN0C1TLSDC38MGXI0X1UKV44671YDMLLN3I1A693ZWIQU1D2QFK5QG9LTW723P6OP18YO4NNBNXP66QI61PC27KKYBK83SICHFNO7K37JF1V5NTHTDCTPT7T7JND1R1NEOWUQ0U4NXLLIINLQWK284K74U34OD2R68V2M0OXV123NWAGWE5XWOYU3GU1CH3K5W13UGW2N15G0QU8L7BOPSOQ6Z7I7' where id=75; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='1UH6NRKWMVCGYAF3R4Q65BR4JOANCQYV06XPL2FAVYRAWXKFCEBFZ3LUSDSZPHS06KDNU3Z7ZGD0QLRBVVGBVI877CJ4AI8MN9I82HBSYJ86PJV83M734KX6YGUOARKV4MLD5LRMPGFNH4V1ATJQQY5BNVOPMUNGPUVH7XK0V51QNJX390ZHX5J6NY0LJ9NTV2HH6NSD4HAEC4OAFJGRKYYJX6NXL9P1FGY25810IGH3LUVSTNSL91NBCHDG79IFF' where id=76; -update noar ti set v0='1UH6NRKWMVCGYAF3R4Q65BR4JOANCQYV06XPL2FAVYRAWXKFCEBFZ3LUSDSZPHS06KDNU3Z7ZGD0QLRBVVGBVI877CJ4AI8MN9I82HBSYJ86PJV83M734KX6YGUOARKV4MLD5LRMPGFNH4V1ATJQQY5BNVOPMUNGPUVH7XK0V51QNJX390ZHX5J6NY0LJ9NTV2HH6NSD4HAEC4OAFJGRKYYJX6NXL9P1FGY25810IGH3LUVSTNSL91NBCHDG79IFF' where id=76; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='E8R00BKNSPVOV9O06UFQKV6BRY8LLJJO7KCF9OAZQIMLM4VZ6YL8SNW7R5BY1Y737NFD52OKXEFIA1O43XJ6Q24MIHJNQGG69WIN9Z5NAYKU552T15P7D7N56NR55KLAIM1V9VKRQJLXUJLB5L55SDDGFHAQO5MGAYFKIQ26IQ0YD4QEELVWL76DUDG4PNGHT1N6TASQ0LJPFNFU56UAEDQM6DHKN6M4H8XQPTXCKN9AG0XRBMGY4FW3DZ0AUZXXH' where id=76; -update noar ti set v1='E8R00BKNSPVOV9O06UFQKV6BRY8LLJJO7KCF9OAZQIMLM4VZ6YL8SNW7R5BY1Y737NFD52OKXEFIA1O43XJ6Q24MIHJNQGG69WIN9Z5NAYKU552T15P7D7N56NR55KLAIM1V9VKRQJLXUJLB5L55SDDGFHAQO5MGAYFKIQ26IQ0YD4QEELVWL76DUDG4PNGHT1N6TASQ0LJPFNFU56UAEDQM6DHKN6M4H8XQPTXCKN9AG0XRBMGY4FW3DZ0AUZXXH' where id=76; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='K1HD98641FDCHEWHOC1Q43L1EQHYILBBTCPHK3DJYWY7LPG9BMK48RCZFZPZUSGLETR7XFNC5KKK74MZ2FBJVLDNWUD966KG7VSA46D2F0YL3O0NERYCQJF0J8CH8828ILH812JBG7IW7VNE7PREB2MQFP2SFSQRRWQ4SKWPWNWR98ODGDBD4P4SARPEH77SDOEJ0BHMX1NOZJD3KULBJ7UGXSWLQ6DHENTVXI1N7RGRR6P6NHPV58QYZDU3VLUV8' where id=76; -update noar ti set v2='K1HD98641FDCHEWHOC1Q43L1EQHYILBBTCPHK3DJYWY7LPG9BMK48RCZFZPZUSGLETR7XFNC5KKK74MZ2FBJVLDNWUD966KG7VSA46D2F0YL3O0NERYCQJF0J8CH8828ILH812JBG7IW7VNE7PREB2MQFP2SFSQRRWQ4SKWPWNWR98ODGDBD4P4SARPEH77SDOEJ0BHMX1NOZJD3KULBJ7UGXSWLQ6DHENTVXI1N7RGRR6P6NHPV58QYZDU3VLUV8' where id=76; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='7M9XV1GQQJN22D12Z4QU3NVE33X5TRK20DA7ZK6RXOAYP62JWIU0YQWZCFKZN6EJCJ875XIF7YHOE3B3S2CH4UMLAB6KPDVLPNS6T9R82L9D3LEJPBB178YCV1BFDPQGNHYMKBN7SDGYQG1EZS16P36RJ8JTRXX5KBQZH0EGK8MCXLUMLGNB4RXE4W56PPEW5H5L2LSW3KCZQ1XD1SF2EDBUH90O8CIWTFTZTMWZQIK7HZ07SQQNOQ39UMACKHZ7B' where id=76; -update noar ti set v3='7M9XV1GQQJN22D12Z4QU3NVE33X5TRK20DA7ZK6RXOAYP62JWIU0YQWZCFKZN6EJCJ875XIF7YHOE3B3S2CH4UMLAB6KPDVLPNS6T9R82L9D3LEJPBB178YCV1BFDPQGNHYMKBN7SDGYQG1EZS16P36RJ8JTRXX5KBQZH0EGK8MCXLUMLGNB4RXE4W56PPEW5H5L2LSW3KCZQ1XD1SF2EDBUH90O8CIWTFTZTMWZQIK7HZ07SQQNOQ39UMACKHZ7B' where id=76; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='Y0X21K01JOROS64RCVXJIZ5P915919548PNC48QXQV1JYSPX1NKECQ8A27ZXPHF72Y18HEFUPSQGZKY2IASHE6A2XAY32UG5Q5EP61RHRWF0255WKEYX1H8FL30NV3D6TK02L03GYK0KDZ5UFUQ795KZT6ZTB5BDLBDBPKZ45TZU26016JEYNLCT71TVXXOFH9Q5WX8B341T215D8GAQAQ6L0F86X7STD0G6G8KWZOBVI7D8U0WQHS26OVMVEAPHY' where id=77; -update noar ti set v0='Y0X21K01JOROS64RCVXJIZ5P915919548PNC48QXQV1JYSPX1NKECQ8A27ZXPHF72Y18HEFUPSQGZKY2IASHE6A2XAY32UG5Q5EP61RHRWF0255WKEYX1H8FL30NV3D6TK02L03GYK0KDZ5UFUQ795KZT6ZTB5BDLBDBPKZ45TZU26016JEYNLCT71TVXXOFH9Q5WX8B341T215D8GAQAQ6L0F86X7STD0G6G8KWZOBVI7D8U0WQHS26OVMVEAPHY' where id=77; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='3UZNHPJWOTPKIOFVBGEDE3VS34IYJTKA3W1VXYQ4F4F68VR8M7YIE0BSTNR0D3M72S6NYMZWMKK4XBOXLQJXRT4S0OHDENV40ZGIUCQM1RCJOWP11VJ9UUKT10J6PGH76JM60VCKJ0UJO81T0ZKCKAQQ6TVQMZ6AWOEFKKUFOPB0TKO8O3V47TYN6AWBGQDLK85PZ8QC8WBRBBF0504QO8ORODEYVJUEZBKUNEMEPL8I3N4P15XEZV4UUKC13SFFD' where id=77; -update noar ti set v1='3UZNHPJWOTPKIOFVBGEDE3VS34IYJTKA3W1VXYQ4F4F68VR8M7YIE0BSTNR0D3M72S6NYMZWMKK4XBOXLQJXRT4S0OHDENV40ZGIUCQM1RCJOWP11VJ9UUKT10J6PGH76JM60VCKJ0UJO81T0ZKCKAQQ6TVQMZ6AWOEFKKUFOPB0TKO8O3V47TYN6AWBGQDLK85PZ8QC8WBRBBF0504QO8ORODEYVJUEZBKUNEMEPL8I3N4P15XEZV4UUKC13SFFD' where id=77; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='BK0XLWGMSO3G9PUXI2ALOWONIRS4OYW77WJ0VQNHWUVUF2ZFABNZP3LLVA3ELIP3GOX4GL9Y5O0DN2J8SN7YQHGF9FB6ZO6U865WPARKOW01VXAHMRFDQTKH071J5WRB0HAK4SFGJWXIJNBB4G03NRVBUMPVKLZHZ4E8UKZ8AI088HCZPHWKDY6VEK27OECSEYFQMU10IK76922K6BKQISJ78COQJLDZHYHNI1VWBKEW6X4Z1Q2WRJKWYYU4FA9ZG' where id=77; -update noar ti set v2='BK0XLWGMSO3G9PUXI2ALOWONIRS4OYW77WJ0VQNHWUVUF2ZFABNZP3LLVA3ELIP3GOX4GL9Y5O0DN2J8SN7YQHGF9FB6ZO6U865WPARKOW01VXAHMRFDQTKH071J5WRB0HAK4SFGJWXIJNBB4G03NRVBUMPVKLZHZ4E8UKZ8AI088HCZPHWKDY6VEK27OECSEYFQMU10IK76922K6BKQISJ78COQJLDZHYHNI1VWBKEW6X4Z1Q2WRJKWYYU4FA9ZG' where id=77; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='PBYBVDSMU71C3KRULCTZ3MESIFK15Y1X3CYOOV9E3ZHJQRT4YPQJX3XD9F9SGI310NV7CGDL2U9U19A2WI11JORKYW5K6S3VV3TAJJ0M2KODAVRE0B5LB8UMUE17P9L1283C1SO0V1XO5ZFIFSB37YY8FEJJCCD0CO242580XG2GMB9U1C8XQ5X5TPZ18FUMO0L66KTH3WRMC5CGJ05SM3RXUA85Q528Q6YU8URQLWZ6EOXZ5E69AHT7M2OCLOP0V' where id=77; -update noar ti set v3='PBYBVDSMU71C3KRULCTZ3MESIFK15Y1X3CYOOV9E3ZHJQRT4YPQJX3XD9F9SGI310NV7CGDL2U9U19A2WI11JORKYW5K6S3VV3TAJJ0M2KODAVRE0B5LB8UMUE17P9L1283C1SO0V1XO5ZFIFSB37YY8FEJJCCD0CO242580XG2GMB9U1C8XQ5X5TPZ18FUMO0L66KTH3WRMC5CGJ05SM3RXUA85Q528Q6YU8URQLWZ6EOXZ5E69AHT7M2OCLOP0V' where id=77; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='XZZXMF5AN6Z9244CI69NPBUJ8UTW7NCHOIU3SNQYZX67PRRKV22QLOUVN3EVGVY9TDYDROIX6W2P43PP07KZU2EGS4RRIZWBRAD7JCRGG435MDI7GXC3N7UPDYBYFS0MOL15KFFRZPPGG3T9U19GSZ31DYMEXADQ18K4WFOH3DW20MXEQV59V8PRDXY4800SYJH0JB5CP7RUTMPALPIJS6ACBCRKMEQ7AY4V65JFUWYYF2DGFVJSVEA3V32NVCSI8' where id=78; -update noar ti set v0='XZZXMF5AN6Z9244CI69NPBUJ8UTW7NCHOIU3SNQYZX67PRRKV22QLOUVN3EVGVY9TDYDROIX6W2P43PP07KZU2EGS4RRIZWBRAD7JCRGG435MDI7GXC3N7UPDYBYFS0MOL15KFFRZPPGG3T9U19GSZ31DYMEXADQ18K4WFOH3DW20MXEQV59V8PRDXY4800SYJH0JB5CP7RUTMPALPIJS6ACBCRKMEQ7AY4V65JFUWYYF2DGFVJSVEA3V32NVCSI8' where id=78; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='Q50TIDU0O84HE11QSQN4L83ASFGW5XCWM1MC38WZH218A5QN4AKUP4OLHB0HV096HRPQDB7AV2JKKAKDLF46MMKGLSZGNVT79QFPQF0M0R43WXAP26OXGQCHPUM479XZIEYA1A2K2O93W3YWMRD02Z0F5R2D3CPJLWREPPIIVKAJULI9PIH53HCDLMI88YZX1US6ZB5SR4IE68DD7R6N3EGIBG7MU9NECW9HZ39WJKBM8AQF8K7DJ29GULOX99OJG' where id=78; -update noar ti set v1='Q50TIDU0O84HE11QSQN4L83ASFGW5XCWM1MC38WZH218A5QN4AKUP4OLHB0HV096HRPQDB7AV2JKKAKDLF46MMKGLSZGNVT79QFPQF0M0R43WXAP26OXGQCHPUM479XZIEYA1A2K2O93W3YWMRD02Z0F5R2D3CPJLWREPPIIVKAJULI9PIH53HCDLMI88YZX1US6ZB5SR4IE68DD7R6N3EGIBG7MU9NECW9HZ39WJKBM8AQF8K7DJ29GULOX99OJG' where id=78; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='ZX31YBDENGT4ZUZ3M15EHDQ0H4QJYFGZ28UYD1SI2OEW8WTGDXO0US62RRZWTDY9CWP1308P07KTKS6N3NH8J6M9XNPY3U85GTP8IA8BHFF6MHRKD34RJ9CNG523CXSICUHREMOBYTNDFICPLD3Q23WF0LUOCXOT0BTLZO0LHHX5MU52RALZ2B03NDDN7C1F3X0YAZMPT174IORNAW3IAQB9YG9MZOO1HTD3F1GOMO9XNKECX48885PPMF0L8Z2OQ' where id=78; -update noar ti set v2='ZX31YBDENGT4ZUZ3M15EHDQ0H4QJYFGZ28UYD1SI2OEW8WTGDXO0US62RRZWTDY9CWP1308P07KTKS6N3NH8J6M9XNPY3U85GTP8IA8BHFF6MHRKD34RJ9CNG523CXSICUHREMOBYTNDFICPLD3Q23WF0LUOCXOT0BTLZO0LHHX5MU52RALZ2B03NDDN7C1F3X0YAZMPT174IORNAW3IAQB9YG9MZOO1HTD3F1GOMO9XNKECX48885PPMF0L8Z2OQ' where id=78; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='GXYG7808ZF0F88QWX1ZBH44CCAC8GDIOWDUUVWZYSDCZSDGH5LCQZIJZEJLVISFPPJ7KPBOJQOQ6658CU89HLQC9L4ZEAW08OYTTYZFWMNWR8X1E8CFKRXRTRI4U6KTSHNRDOMQYMKD1JWNYXTX08ZO7ANY3CJLBWP6I4JIH5ZTVAGCJQIN2ZRXFJOUKTHY7PEF7QJ259G3DSIWOAMOYACR9FD9PL6OL2YYPH0W3F4A6BJLAP7FTZEDXFXPYEIQTN' where id=78; -update noar ti set v3='GXYG7808ZF0F88QWX1ZBH44CCAC8GDIOWDUUVWZYSDCZSDGH5LCQZIJZEJLVISFPPJ7KPBOJQOQ6658CU89HLQC9L4ZEAW08OYTTYZFWMNWR8X1E8CFKRXRTRI4U6KTSHNRDOMQYMKD1JWNYXTX08ZO7ANY3CJLBWP6I4JIH5ZTVAGCJQIN2ZRXFJOUKTHY7PEF7QJ259G3DSIWOAMOYACR9FD9PL6OL2YYPH0W3F4A6BJLAP7FTZEDXFXPYEIQTN' where id=78; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='PMJHK06HYCSFCNMRFGWMWU44Q1BW8YQ11GHJW88ADUGZ8JQQKFNQH5QKMC1TAVE2AI4U409H0DV2OSD051332FEMN2K3J6E6O7BVKH3R5NGN6WCR8GUXF9QNUYE9QCY1Y5QCU4R211JGD1NIP2GPQINWEV354V2GAVXC0WUPBSZ0YRLC4WW2ADIGQQMY8PK5U7WX4TJ59KXAKNWSNN1JJWVBQHM4O9SNHMN52UW0J1YDTP6KCFA6DB6QZVFAZUPVN' where id=79; -update noar ti set v0='PMJHK06HYCSFCNMRFGWMWU44Q1BW8YQ11GHJW88ADUGZ8JQQKFNQH5QKMC1TAVE2AI4U409H0DV2OSD051332FEMN2K3J6E6O7BVKH3R5NGN6WCR8GUXF9QNUYE9QCY1Y5QCU4R211JGD1NIP2GPQINWEV354V2GAVXC0WUPBSZ0YRLC4WW2ADIGQQMY8PK5U7WX4TJ59KXAKNWSNN1JJWVBQHM4O9SNHMN52UW0J1YDTP6KCFA6DB6QZVFAZUPVN' where id=79; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='ANZCL9NTECQ337BYT0I9ZQW2XLBGK1OMIU8CPE3JIIX4ITETBTBLI432NBNXQ4ZS7I92JAFUUTGULJ1I5FMSTX07IUXDMM529ZSIQYYQKXGG9K6U036KEYAD21S6P2CSLAICAAWYA8GVRMZNCWTLP1JFTSHXVM1RPOV184WA698ON67GWKE9VUB2XFE69OA0A6M0ZGIVUPT4OD7J6HLIJCKK3ED2LS2PICTBG23UO5S3NCYEKDNMWIIVP5PZRBY0K' where id=79; -update noar ti set v1='ANZCL9NTECQ337BYT0I9ZQW2XLBGK1OMIU8CPE3JIIX4ITETBTBLI432NBNXQ4ZS7I92JAFUUTGULJ1I5FMSTX07IUXDMM529ZSIQYYQKXGG9K6U036KEYAD21S6P2CSLAICAAWYA8GVRMZNCWTLP1JFTSHXVM1RPOV184WA698ON67GWKE9VUB2XFE69OA0A6M0ZGIVUPT4OD7J6HLIJCKK3ED2LS2PICTBG23UO5S3NCYEKDNMWIIVP5PZRBY0K' where id=79; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='ERC73LHB2CVEY9C5416UXYTRMK7L5STH2Q9CQHRYD7CQKKG2QQSZDRXJ16ELIR8W73VB5HO15G93XO4MFB52IUJUBT8V4LGQN9B8ABGR26RUYSRPL73OOSTV7W2HWZABQ8DEQ3B3TZULKZ2J7MOV2VMKQKUFBJEOWV9IRXXO28GRAMY1M8Q9G0CX4FZE4D5J1WXWA1W0AG4YLTOQ1JR3XAMU9MXOZ7NH295DAYUL95N4RIHVCPT3PVR2959H1W7SY' where id=79; -update noar ti set v2='ERC73LHB2CVEY9C5416UXYTRMK7L5STH2Q9CQHRYD7CQKKG2QQSZDRXJ16ELIR8W73VB5HO15G93XO4MFB52IUJUBT8V4LGQN9B8ABGR26RUYSRPL73OOSTV7W2HWZABQ8DEQ3B3TZULKZ2J7MOV2VMKQKUFBJEOWV9IRXXO28GRAMY1M8Q9G0CX4FZE4D5J1WXWA1W0AG4YLTOQ1JR3XAMU9MXOZ7NH295DAYUL95N4RIHVCPT3PVR2959H1W7SY' where id=79; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='4I4JFAAGMW4T3BM9YUVER5IZ6U9U1C9079H6S360DJ96S2ES8HY3ERN7LUB6JF737F6UWKIYRHNMFLCB8GM3X8L9PNENBEA6UGX3509HB5OYZCW4LE49JNJX0NK02TJHUH79YQSO6DVBBPXNFMRPJ0B68FF6HZIE18EC502QLPVKLM4RD18PPXCBP9ONOPFFFCX6LTKNA19T47GM7KUNFSN6PCUTT6CHINZOUJMHIHRTZW2OOVWYB5YPKJSODEERV' where id=79; -update noar ti set v3='4I4JFAAGMW4T3BM9YUVER5IZ6U9U1C9079H6S360DJ96S2ES8HY3ERN7LUB6JF737F6UWKIYRHNMFLCB8GM3X8L9PNENBEA6UGX3509HB5OYZCW4LE49JNJX0NK02TJHUH79YQSO6DVBBPXNFMRPJ0B68FF6HZIE18EC502QLPVKLM4RD18PPXCBP9ONOPFFFCX6LTKNA19T47GM7KUNFSN6PCUTT6CHINZOUJMHIHRTZW2OOVWYB5YPKJSODEERV' where id=79; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='OGE1PNX6W81XKL4S9J9EM8U3BZRE3ZJQ2V2BGONQ3I5RYG31H4DRLZ233WZ28UUH1KYOH95KUCC3EE78CX3A908SAM25AEIBWAWOY8I810IO4PGV6DAWPDFNXHJZUMXFK7GQKUAIKZK60C7C1MR295WWAQCBS8P9156WK1FA724FZ0ECYMPICO37ALT7QHAD1E27Z3WF6GJ9HD3GYZPDVMMT3TDBXH4KVCF5RY6ZQTRSFU9O3S9APGV4YZX15E9CT' where id=80; -update noar ti set v0='OGE1PNX6W81XKL4S9J9EM8U3BZRE3ZJQ2V2BGONQ3I5RYG31H4DRLZ233WZ28UUH1KYOH95KUCC3EE78CX3A908SAM25AEIBWAWOY8I810IO4PGV6DAWPDFNXHJZUMXFK7GQKUAIKZK60C7C1MR295WWAQCBS8P9156WK1FA724FZ0ECYMPICO37ALT7QHAD1E27Z3WF6GJ9HD3GYZPDVMMT3TDBXH4KVCF5RY6ZQTRSFU9O3S9APGV4YZX15E9CT' where id=80; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='XAAQGPLKVSALYLCKCRXFLKQEV8E4R671MNWV1J3TF21H7LVUCK4I94P6JW1SD9A8AETHG4DA1WC46V7WOECUUC8DTKBYJWVY3456N191V2U5PKLDN22P0TE6DFHX6JR0WKDE91JY6ZI6BLFXBJYY2H4ZZQLYMWGOPLGPZ2CLBCBVWYZF3I0WLSDX48U2LF453UYXR6LB35D2DXXDD0TBAAGJQF3XCX3C2A023DELGQQFNIG15VTW7XTDI4IAFH08H' where id=80; -update noar ti set v1='XAAQGPLKVSALYLCKCRXFLKQEV8E4R671MNWV1J3TF21H7LVUCK4I94P6JW1SD9A8AETHG4DA1WC46V7WOECUUC8DTKBYJWVY3456N191V2U5PKLDN22P0TE6DFHX6JR0WKDE91JY6ZI6BLFXBJYY2H4ZZQLYMWGOPLGPZ2CLBCBVWYZF3I0WLSDX48U2LF453UYXR6LB35D2DXXDD0TBAAGJQF3XCX3C2A023DELGQQFNIG15VTW7XTDI4IAFH08H' where id=80; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='3L080BAQAUV1E5NDE673QQ57Q2RFIMNSPGDJRJHV2U7NJ67QJ6NDBKFOIF4WEOUVBOZ5MGDAG8A7KS0SP83WWKPYEMALJ704N66IZLSWL27CUMEWG1HXOK1LYIJFH2VHD719WDTV9BXG1GCSDIUUPK0LN5T5EPXDM5K4BZJG7YH5PLTOPZCO8TKB7TIDCWBQJNBGOH7IDEJTHJTNUK0QAQ0OFTWXU41NDGDW8W2QG3KX6MY6QV63UXJTLEI0EJ6KY' where id=80; -update noar ti set v2='3L080BAQAUV1E5NDE673QQ57Q2RFIMNSPGDJRJHV2U7NJ67QJ6NDBKFOIF4WEOUVBOZ5MGDAG8A7KS0SP83WWKPYEMALJ704N66IZLSWL27CUMEWG1HXOK1LYIJFH2VHD719WDTV9BXG1GCSDIUUPK0LN5T5EPXDM5K4BZJG7YH5PLTOPZCO8TKB7TIDCWBQJNBGOH7IDEJTHJTNUK0QAQ0OFTWXU41NDGDW8W2QG3KX6MY6QV63UXJTLEI0EJ6KY' where id=80; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='XOPCY9TJ5PBMNYCRPGISOJ1E1Z5PM55QBCN2ER3MEAMP31RS2TTGFR8L7WLR6EMVQ0GY5PXFPRGZG2QWHGLJ4WV9ULB2YAYM9TK9P387LH6SMCMXB9ZVQ525GI2C13FUL58QKSHALKSRKLP47NZNT4Y3YGSYUNM5IFIFSN4ZIYLMJ060GMIW0HNOW0PVVDNQQWRI5K9CUXREFP6ENRXBQUEFLZGSBHXOX5NXES3OG4W4QN87UF8TOOWIZHUM3L4K1' where id=80; -update noar ti set v3='XOPCY9TJ5PBMNYCRPGISOJ1E1Z5PM55QBCN2ER3MEAMP31RS2TTGFR8L7WLR6EMVQ0GY5PXFPRGZG2QWHGLJ4WV9ULB2YAYM9TK9P387LH6SMCMXB9ZVQ525GI2C13FUL58QKSHALKSRKLP47NZNT4Y3YGSYUNM5IFIFSN4ZIYLMJ060GMIW0HNOW0PVVDNQQWRI5K9CUXREFP6ENRXBQUEFLZGSBHXOX5NXES3OG4W4QN87UF8TOOWIZHUM3L4K1' where id=80; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='HVKWOFNPTF1XMCLUA128Z0FL6MS60M2AUTQ3QLM4QH4VRELRLKZQTX8UW93T26WJUSAL9936LRKCUIMS8D500DEP9WFJUOJ6KFF7IH1FCT0YTIRUUEOCCJD4FYX70D89BT3HXBDV7IFHRMRHM7GQAUD1KJGKQ0SLPOFKS2Z0PCRRSZ9XYW21CZ82ZAFCCWTT5CNWA41QU31F7EVA27E2WNJM05WC96LMAU5V0KL89IFGRNE67NPVHQSOGVPCOCDS8' where id=81; -update noar ti set v0='HVKWOFNPTF1XMCLUA128Z0FL6MS60M2AUTQ3QLM4QH4VRELRLKZQTX8UW93T26WJUSAL9936LRKCUIMS8D500DEP9WFJUOJ6KFF7IH1FCT0YTIRUUEOCCJD4FYX70D89BT3HXBDV7IFHRMRHM7GQAUD1KJGKQ0SLPOFKS2Z0PCRRSZ9XYW21CZ82ZAFCCWTT5CNWA41QU31F7EVA27E2WNJM05WC96LMAU5V0KL89IFGRNE67NPVHQSOGVPCOCDS8' where id=81; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='GNOOCOB7KGE3IX7P29O9OPRXYYEWN6JEC2RZ79BY87753GSDM4NCODWAX7FQI1YQI8BGDFF93Y50USRWZGGBHCSCKHF62NUNQC48B5YDX9BDEFIODJDXRESB7H9UC54NUYEPK99B0TWI52CIY4I6N5AK10HZDD5S6HSERVS3KMVJR3MAATX05SN4WQRRBWDP9B2ZTEO957LXKKCMW6D7M09MG3GHR3L2K6XNAVRFN0AFH1W4TJ140426UVALCPDO8' where id=81; -update noar ti set v1='GNOOCOB7KGE3IX7P29O9OPRXYYEWN6JEC2RZ79BY87753GSDM4NCODWAX7FQI1YQI8BGDFF93Y50USRWZGGBHCSCKHF62NUNQC48B5YDX9BDEFIODJDXRESB7H9UC54NUYEPK99B0TWI52CIY4I6N5AK10HZDD5S6HSERVS3KMVJR3MAATX05SN4WQRRBWDP9B2ZTEO957LXKKCMW6D7M09MG3GHR3L2K6XNAVRFN0AFH1W4TJ140426UVALCPDO8' where id=81; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='WYJ9Z0PH4GMGW3Q8HA0M8LJTWEL32CELY7PRWFHUZGN22LXS4YP7OPG39Q056DWRRDTEINCDGV5DDEV7V0V37CSH3L90I5LFZ5QPCSYKHZNMSF1F3C5FYC3I2QBD5GJLRJYMWCYQRH9AADH9K3MF7PX582SQQISFU5X8OF1JLYZNABO0RWNP1TID9FOSV01ZXEL7A2EZGBL6H56RGA0BGC4I7EI504VAAWYHW7PDSMPZTRM2UXNKC765U1DAD6JQ6' where id=81; -update noar ti set v2='WYJ9Z0PH4GMGW3Q8HA0M8LJTWEL32CELY7PRWFHUZGN22LXS4YP7OPG39Q056DWRRDTEINCDGV5DDEV7V0V37CSH3L90I5LFZ5QPCSYKHZNMSF1F3C5FYC3I2QBD5GJLRJYMWCYQRH9AADH9K3MF7PX582SQQISFU5X8OF1JLYZNABO0RWNP1TID9FOSV01ZXEL7A2EZGBL6H56RGA0BGC4I7EI504VAAWYHW7PDSMPZTRM2UXNKC765U1DAD6JQ6' where id=81; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='DS8WQ78VGLXXIWT4BR4KORNH3PN74C47T4Z4H9YE8QS4W71JA5VGS1M9YBLXQYI8IH0OTPMW9UD4BTFSTAOD5W08L1Z8UF8D6EWL5V6BQ9VN81KBQC99TJNLXXBL8R5JS8DH4TZ6B11GY79HNI5VZCSXUJJZLREQP4UBNUD6LNXA5F878DZLEESJXGCHXH4GN9AWPK5C93ELSCIAJU6PMPK4898L4BGH1ZTZR9YOW06IXD1EOCERBTGLQP35OJ6T7' where id=81; -update noar ti set v3='DS8WQ78VGLXXIWT4BR4KORNH3PN74C47T4Z4H9YE8QS4W71JA5VGS1M9YBLXQYI8IH0OTPMW9UD4BTFSTAOD5W08L1Z8UF8D6EWL5V6BQ9VN81KBQC99TJNLXXBL8R5JS8DH4TZ6B11GY79HNI5VZCSXUJJZLREQP4UBNUD6LNXA5F878DZLEESJXGCHXH4GN9AWPK5C93ELSCIAJU6PMPK4898L4BGH1ZTZR9YOW06IXD1EOCERBTGLQP35OJ6T7' where id=81; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='Z1AFFAFJ8HEXQ6KWLXHTWSQME27Q0UPVYC5F0UP14OWUINMNXPLM0AIYR1VOCWF6MOQRNZ2ESBK6OD5Y3YCIZLKEHS6RX0K1U6JSGEGKODHSRHOZ9WKVKSPP11U9HHQH7W5IUXRWINAT837WDUXVOQF9R1YEHF9KYPM1NN09HMP7P0U7CCVTM3RNLBCSMCVQAJ4EA84ZTPXWEKOA8327TKU27BA8LDXZM3EUBGK7LWP8CZT8H7FZW26LR5Y6QRG6H' where id=82; -update noar ti set v0='Z1AFFAFJ8HEXQ6KWLXHTWSQME27Q0UPVYC5F0UP14OWUINMNXPLM0AIYR1VOCWF6MOQRNZ2ESBK6OD5Y3YCIZLKEHS6RX0K1U6JSGEGKODHSRHOZ9WKVKSPP11U9HHQH7W5IUXRWINAT837WDUXVOQF9R1YEHF9KYPM1NN09HMP7P0U7CCVTM3RNLBCSMCVQAJ4EA84ZTPXWEKOA8327TKU27BA8LDXZM3EUBGK7LWP8CZT8H7FZW26LR5Y6QRG6H' where id=82; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='S4NWT2J6P6SYKFPVUIJ3KYGIVY7H2354FD29C0C7GQ3FNBA998IT9GNPHK1PL7TR3T72MYLN76PQ73YUPW3VF3PD64B708NZMZ4KW85WFL3ESORTNAKGXEAOEAF5J8N0ACZMZRY3UTMI7OO3G9DMRUXCJHQ95944VX8QN4PD0L3AQFD847I425R5VSOGQ9XVKYKU7W8A7LZW2R6VY77VLVSULK0OOPZK4S0Y36MEIESDA7I4XEUT8Q3OF0CD7A9IZ' where id=82; -update noar ti set v1='S4NWT2J6P6SYKFPVUIJ3KYGIVY7H2354FD29C0C7GQ3FNBA998IT9GNPHK1PL7TR3T72MYLN76PQ73YUPW3VF3PD64B708NZMZ4KW85WFL3ESORTNAKGXEAOEAF5J8N0ACZMZRY3UTMI7OO3G9DMRUXCJHQ95944VX8QN4PD0L3AQFD847I425R5VSOGQ9XVKYKU7W8A7LZW2R6VY77VLVSULK0OOPZK4S0Y36MEIESDA7I4XEUT8Q3OF0CD7A9IZ' where id=82; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='FTICG6DF3C5TLX9AIU7AGG28LDH5JM36AY5I6CM6Q5ZPPCK0ESHK2YII7IZ4USI6KEW9YBW1FI95C367O7JVU3JSFJJX7JMT2E2TLXMP5ZOLHAOD0H5UUZQRLFPU83V6TRLZ6DSR9BG97HHK4ENQ926FJD01H7OTC4F11PBAMB40RUGJT9KQUJU5MGQY4WE21MD09KVKQWFQS3334C2QMF1C9MYT11P6TGYOT77W96F8HDS84SZJGP1W7EVCM9Y1D' where id=82; -update noar ti set v2='FTICG6DF3C5TLX9AIU7AGG28LDH5JM36AY5I6CM6Q5ZPPCK0ESHK2YII7IZ4USI6KEW9YBW1FI95C367O7JVU3JSFJJX7JMT2E2TLXMP5ZOLHAOD0H5UUZQRLFPU83V6TRLZ6DSR9BG97HHK4ENQ926FJD01H7OTC4F11PBAMB40RUGJT9KQUJU5MGQY4WE21MD09KVKQWFQS3334C2QMF1C9MYT11P6TGYOT77W96F8HDS84SZJGP1W7EVCM9Y1D' where id=82; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='Y3MGK8MKGSBMROFRXDIMDWRYAJWGPQQ8NWVAHYQX4AWKTAL1FPJKQNTQGRZCMH5WJMP9W4AB2C3270F03CDB082Z2N2X8G1CJ8Y9KA6QKG0Y3CUYSM13E88OV9CZP9LGK449XU2SIRPMLY5LD1U15H4ED6BDJNHQI1Q7SO8XFCKR07UEKFZ2VNWDPXSQ5D8EPI4LN90XDLK616GH693F5YZ20DQOJ3VN31M6ZDXH333ERFSHJ9OSMFEMHBR7TSCMP' where id=82; -update noar ti set v3='Y3MGK8MKGSBMROFRXDIMDWRYAJWGPQQ8NWVAHYQX4AWKTAL1FPJKQNTQGRZCMH5WJMP9W4AB2C3270F03CDB082Z2N2X8G1CJ8Y9KA6QKG0Y3CUYSM13E88OV9CZP9LGK449XU2SIRPMLY5LD1U15H4ED6BDJNHQI1Q7SO8XFCKR07UEKFZ2VNWDPXSQ5D8EPI4LN90XDLK616GH693F5YZ20DQOJ3VN31M6ZDXH333ERFSHJ9OSMFEMHBR7TSCMP' where id=82; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='OTMLOVFELN5DWW9P8ZQYJ3DGFDA5MQVEIC42HBGGXZ5TYKZR9RGJSJGNAK7IYPTMUIFDOLGWCSVF61H2JLO8DIRSR1MBOEUMGS7NZKKU5IK74JQATCK7KP3D7M3XH11X8TL0014PT7XER24EC3VLW8A0UF9HNSZHNO5O0JWIJI6FJSBP1ZKOIG2V6ZCLE8K2C8C5HXZN2RI69N4IH7YW09INDH16B9YA5ZJE3D4QW9OVFKX3P44V0PO7CKVTF7XOC' where id=83; -update noar ti set v0='OTMLOVFELN5DWW9P8ZQYJ3DGFDA5MQVEIC42HBGGXZ5TYKZR9RGJSJGNAK7IYPTMUIFDOLGWCSVF61H2JLO8DIRSR1MBOEUMGS7NZKKU5IK74JQATCK7KP3D7M3XH11X8TL0014PT7XER24EC3VLW8A0UF9HNSZHNO5O0JWIJI6FJSBP1ZKOIG2V6ZCLE8K2C8C5HXZN2RI69N4IH7YW09INDH16B9YA5ZJE3D4QW9OVFKX3P44V0PO7CKVTF7XOC' where id=83; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='0MP1KZYYN416GXEW0YIGMX1DK05PNGEJHH0WAK03J64VVDCKPB7675TF8AZTESKARPVLHCHT9BGVCM12QT7OZ2IWIB87G7NU0O02VIW5L3VSWFIG2MIG82O8RI7VQ696LQAWS4XI8R97EJK0ZF5I6V564A15L8YV5UDPQAEPFJKQMLZ9BBX961E3TGUUAKGDPVNU49ILB4BOTIIKYR7WXCXY3OTD92Q9F8PS3I81DKM0FQDQCKDGSHHNV94ZOFD8T' where id=83; -update noar ti set v1='0MP1KZYYN416GXEW0YIGMX1DK05PNGEJHH0WAK03J64VVDCKPB7675TF8AZTESKARPVLHCHT9BGVCM12QT7OZ2IWIB87G7NU0O02VIW5L3VSWFIG2MIG82O8RI7VQ696LQAWS4XI8R97EJK0ZF5I6V564A15L8YV5UDPQAEPFJKQMLZ9BBX961E3TGUUAKGDPVNU49ILB4BOTIIKYR7WXCXY3OTD92Q9F8PS3I81DKM0FQDQCKDGSHHNV94ZOFD8T' where id=83; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='9CRFIG074L6A6UIQRVPP5GFXXHPFN4SQI26AFPNRIYI49H5UNA63CXD39QIT8GW3U8V9DKPNGW4WJY9CMKL7K32P559F5HHC7DOD79V8FD8CQ8D2P4VZJTJCHMVAADTTO32XX7WBU9EXTI21XMU8QR4MPQN5SH29V0IOW2BUI3AHIXSYPV95RSMREPIRN29R6XVU9N3B9G7RQEX0I39LTVDYBEYGLTPE8SF7KJCJS9J9ODRJSTSKA4ULXG7ILKACZ' where id=83; -update noar ti set v2='9CRFIG074L6A6UIQRVPP5GFXXHPFN4SQI26AFPNRIYI49H5UNA63CXD39QIT8GW3U8V9DKPNGW4WJY9CMKL7K32P559F5HHC7DOD79V8FD8CQ8D2P4VZJTJCHMVAADTTO32XX7WBU9EXTI21XMU8QR4MPQN5SH29V0IOW2BUI3AHIXSYPV95RSMREPIRN29R6XVU9N3B9G7RQEX0I39LTVDYBEYGLTPE8SF7KJCJS9J9ODRJSTSKA4ULXG7ILKACZ' where id=83; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='VE01PQ912HNRHFOE9D944S39B7OISUTX4XQ0KMH24FOJIQF2EYBP4OHOQY6Q7MIEIN0ST2GVR9QQPTLIEKPZ7HHAO4UIQYATG7N2QF9RZIAQA4GCRRFXM5PE0H2AG4HPDLG4RILYMB44VVZ6J7092Q1UVBXUC090R9A6OPJWXB657XCT8CBN13MFPQ16I22D6W6X4C1RCBI73KRH2Q6LGLU611BXUWQKX4TGFK2TS76KVWHMRCOLYQ4ZVRLQLO4P9' where id=83; -update noar ti set v3='VE01PQ912HNRHFOE9D944S39B7OISUTX4XQ0KMH24FOJIQF2EYBP4OHOQY6Q7MIEIN0ST2GVR9QQPTLIEKPZ7HHAO4UIQYATG7N2QF9RZIAQA4GCRRFXM5PE0H2AG4HPDLG4RILYMB44VVZ6J7092Q1UVBXUC090R9A6OPJWXB657XCT8CBN13MFPQ16I22D6W6X4C1RCBI73KRH2Q6LGLU611BXUWQKX4TGFK2TS76KVWHMRCOLYQ4ZVRLQLO4P9' where id=83; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='ZJB6MJMV1LCAKQIJ5JYA6YCNIH1QOLIG5DDLMMXBVJ2NQHKNRIUA0PT2VBB5YBVCRF9TZ0OG7BYOTVAI6XT6GW0GAIQ8MN0RC3S1OIEYK1VBXUEB76AVATQ0HI9GB4T3DWF8AJJFCJ8HQ82ISMHHOKUJTXEO0MXDJWKPCZMR50HNX3H4VDOUBISUKARQRVK54ZNLO44KIW7S2S2YLGRM9YXD37IV33KEYIBN3XQBNMIPCXE3BIGJWS34N61B8J73V' where id=84; -update noar ti set v0='ZJB6MJMV1LCAKQIJ5JYA6YCNIH1QOLIG5DDLMMXBVJ2NQHKNRIUA0PT2VBB5YBVCRF9TZ0OG7BYOTVAI6XT6GW0GAIQ8MN0RC3S1OIEYK1VBXUEB76AVATQ0HI9GB4T3DWF8AJJFCJ8HQ82ISMHHOKUJTXEO0MXDJWKPCZMR50HNX3H4VDOUBISUKARQRVK54ZNLO44KIW7S2S2YLGRM9YXD37IV33KEYIBN3XQBNMIPCXE3BIGJWS34N61B8J73V' where id=84; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='VHFC8M5QVI85GA5BBKL57FLV4OWT1WF3AOQTVPDNS5KTSSCG1M5YR58AFFOA7XOIVMKCUOG7VAKUYH0QPPD068FTLQ03RU2FGQXM126NMTL6CQHDAXGCV7EKN7VPCPKQWCI4MRCV0WUX1NNG2ZCID4LQHRHAQA95542AV8COA35FUO0GMQ37L62HBZ3VFG369W4KTNPYR4TR8QM6JGQT6RTZW8KJRUO51S6L45OLBFWY6KF6BNDFRU2G59E0NM2GF' where id=84; -update noar ti set v1='VHFC8M5QVI85GA5BBKL57FLV4OWT1WF3AOQTVPDNS5KTSSCG1M5YR58AFFOA7XOIVMKCUOG7VAKUYH0QPPD068FTLQ03RU2FGQXM126NMTL6CQHDAXGCV7EKN7VPCPKQWCI4MRCV0WUX1NNG2ZCID4LQHRHAQA95542AV8COA35FUO0GMQ37L62HBZ3VFG369W4KTNPYR4TR8QM6JGQT6RTZW8KJRUO51S6L45OLBFWY6KF6BNDFRU2G59E0NM2GF' where id=84; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='CISL18PE36Z2RYM3TMO4S91FF0PQDRLL0CSDUYBFUDDFNJAS38MX1XZJKYHMTETY7BNV8Z9TVCS5RXI1A1FP8VYAQ8KNDSZNY7WIVDOC4WATSO5AGX7K0WZCEZM2U060TDE0TL3JJLFVT7CPLOY1JP57X12R7NHHQS4CX9DH7NUAK13LJSCBVGE9BAVFFT1I1GA1TTLXFUG0B15TACPL3FINNS48HM3UVIQ90ELSWRRZUBNTTNVKAL6KEVO87WBZS' where id=84; -update noar ti set v2='CISL18PE36Z2RYM3TMO4S91FF0PQDRLL0CSDUYBFUDDFNJAS38MX1XZJKYHMTETY7BNV8Z9TVCS5RXI1A1FP8VYAQ8KNDSZNY7WIVDOC4WATSO5AGX7K0WZCEZM2U060TDE0TL3JJLFVT7CPLOY1JP57X12R7NHHQS4CX9DH7NUAK13LJSCBVGE9BAVFFT1I1GA1TTLXFUG0B15TACPL3FINNS48HM3UVIQ90ELSWRRZUBNTTNVKAL6KEVO87WBZS' where id=84; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='ISGODRA200H08GXEPOU3MXIV4IJGMDUKIQCYL2QDVM9XJFUSNP0X5MGER3IKQ6D5J6E6DEPEZW8ICTGP6XNYSKCY52YVZ504RWKCABB94161STQWB5SDP1TJYAKRV6BGD6CUFTE9RE6CVYJUZ3PHWM503LA8HQ9OE8XGME5DP787BBIM8M3TRTBNGE1L84G7UK0SFJJY404YL5CT1WCLUHTIJ0UT5U5U5FRIRT9L45X71KL93SLK2VUNM66Y8BIMA' where id=84; -update noar ti set v3='ISGODRA200H08GXEPOU3MXIV4IJGMDUKIQCYL2QDVM9XJFUSNP0X5MGER3IKQ6D5J6E6DEPEZW8ICTGP6XNYSKCY52YVZ504RWKCABB94161STQWB5SDP1TJYAKRV6BGD6CUFTE9RE6CVYJUZ3PHWM503LA8HQ9OE8XGME5DP787BBIM8M3TRTBNGE1L84G7UK0SFJJY404YL5CT1WCLUHTIJ0UT5U5U5FRIRT9L45X71KL93SLK2VUNM66Y8BIMA' where id=84; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='49LF2XJUH54TIKVSMLM741OLVFYVO8GPNZPVR3M7U3UO5989IUIOBISZCVF9J58Q1B5EJCGU8QWWNLHA3Y80947DMV9KNLXPO0U02PF3QCZU37B2QL1UL0U5O9GXBQDRGFC5HFMA50ME7GUH4K9IIKQHYA8STE1OR2JYL0KNBNN557XPIIV5TI4C11B1Y3X7UI2XBTI9CI0VAOHJXEO2V761L215HFIW20W547OPHNOAPFGYSWNEP09JTFEPI0EIP' where id=85; -update noar ti set v0='49LF2XJUH54TIKVSMLM741OLVFYVO8GPNZPVR3M7U3UO5989IUIOBISZCVF9J58Q1B5EJCGU8QWWNLHA3Y80947DMV9KNLXPO0U02PF3QCZU37B2QL1UL0U5O9GXBQDRGFC5HFMA50ME7GUH4K9IIKQHYA8STE1OR2JYL0KNBNN557XPIIV5TI4C11B1Y3X7UI2XBTI9CI0VAOHJXEO2V761L215HFIW20W547OPHNOAPFGYSWNEP09JTFEPI0EIP' where id=85; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='8GL79SB1XRSAZHYVP7FPYSH1N1XHMWX7JYJXCOQQKK7Q09MSN6792UST3PTXCIPAEHOC5NYMLVXOII6BJU81U4RQR2TBL5XP1OGIC9LFN4388OSJJYUIUHP1PVH6M65O23X0U8ALCHD8OGA3S69QA23R6L39YWZZ62HCDDZGBFSLP9V874M01VYPWQCY2WFIH32NTWRZ4Q069EFOA6MPNTOT6YT0OPEDHBTPT435AG61V723UX8O03QBGQQL44M1Y' where id=85; -update noar ti set v1='8GL79SB1XRSAZHYVP7FPYSH1N1XHMWX7JYJXCOQQKK7Q09MSN6792UST3PTXCIPAEHOC5NYMLVXOII6BJU81U4RQR2TBL5XP1OGIC9LFN4388OSJJYUIUHP1PVH6M65O23X0U8ALCHD8OGA3S69QA23R6L39YWZZ62HCDDZGBFSLP9V874M01VYPWQCY2WFIH32NTWRZ4Q069EFOA6MPNTOT6YT0OPEDHBTPT435AG61V723UX8O03QBGQQL44M1Y' where id=85; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='80XLWF4LZ3GKQKU5M1MXKQMX8LXOKMJ5UAFGNSIKACLN05L0I1QYYKZGOWVJMLZYYM71732QLIWQMQWPUA0GBRYFDV8JPRLJS8STUIYTKRVDYHNVNX4VISJBPB0RHRJ9TVJ7GWG8LTEQEBLGYBR402XS7H007G50PZG2X4QLOUAH8YCO9TIY0F26VTZFI2B8LLMUD11EV0C87RKYK0XZ9IFG4WBXY4MS7DEZYLF1M9S7FU0YG13Y681JM51VSF47Q' where id=85; -update noar ti set v2='80XLWF4LZ3GKQKU5M1MXKQMX8LXOKMJ5UAFGNSIKACLN05L0I1QYYKZGOWVJMLZYYM71732QLIWQMQWPUA0GBRYFDV8JPRLJS8STUIYTKRVDYHNVNX4VISJBPB0RHRJ9TVJ7GWG8LTEQEBLGYBR402XS7H007G50PZG2X4QLOUAH8YCO9TIY0F26VTZFI2B8LLMUD11EV0C87RKYK0XZ9IFG4WBXY4MS7DEZYLF1M9S7FU0YG13Y681JM51VSF47Q' where id=85; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='I55NQ0DV2O5PAH8W81QUYVBS4F9BDG14MHNREC30TY30OFDGZ5A5IY43AT7A9WTXTJIIQ0IERJH22JKGE61AV1C016YWUQZSNS472WOC5QJ2Z030XSHEGBI2RSROEX0G6TH7L71FDZA0Q0HVOS4M2KBBEEM8K0WJUI1OH160ZYG2DEUXZADVI7CHLI6G904PCKH55CGBRIW8EGQNMRN1UOKR205EXFLUT17UH03MDTVPWQ02NUUBH7LS41TIHHY4W' where id=85; -update noar ti set v3='I55NQ0DV2O5PAH8W81QUYVBS4F9BDG14MHNREC30TY30OFDGZ5A5IY43AT7A9WTXTJIIQ0IERJH22JKGE61AV1C016YWUQZSNS472WOC5QJ2Z030XSHEGBI2RSROEX0G6TH7L71FDZA0Q0HVOS4M2KBBEEM8K0WJUI1OH160ZYG2DEUXZADVI7CHLI6G904PCKH55CGBRIW8EGQNMRN1UOKR205EXFLUT17UH03MDTVPWQ02NUUBH7LS41TIHHY4W' where id=85; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='KMITW1TN044QC5VOFYY0Q5EBI6ALKUUUBDMZBLP4PVG48MGZ8WD84ASK5M2BSDQVD53GTTTOZZVGU81CDBTLZFQOM0XYNLHH4EPGBSB6IV8F6QBN5MJ4G7Q57EDOTJ2NZIOO9UB0365DSCU7TQP3TD7UARAUF3M6TS008QPZIKKV24ZJ7NEQ349A8J62NM15JPL5UO3KXYEVH66SAKS96FEVNF8QH9GQ15CO4WKDS7L0B4ELYS7UMAHNBD382WPU6' where id=86; -update noar ti set v0='KMITW1TN044QC5VOFYY0Q5EBI6ALKUUUBDMZBLP4PVG48MGZ8WD84ASK5M2BSDQVD53GTTTOZZVGU81CDBTLZFQOM0XYNLHH4EPGBSB6IV8F6QBN5MJ4G7Q57EDOTJ2NZIOO9UB0365DSCU7TQP3TD7UARAUF3M6TS008QPZIKKV24ZJ7NEQ349A8J62NM15JPL5UO3KXYEVH66SAKS96FEVNF8QH9GQ15CO4WKDS7L0B4ELYS7UMAHNBD382WPU6' where id=86; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='937DKZR6XCWJDJ4ZERII10RY8G7QCJSUBMVG49BZKIXBKYNQCZSN5EZNNXCAX11WO18MSYBACNGXVE5186PW1JMH5HSTCI3D4AILVS607E88E5CIO1NZ5P4V4JDFLS5S1FJ6I5PU80B75DYXH2QI0CKAQVE0N6YJDX4ZO7CBQECRRZ80XKHASI2IHFKGQVUMHOCM2UQ5AF28YSV47K7TTQO5MTEMG6K5F0XB2DDM773ABMIUKXMSU75CNK70R5K5S' where id=86; -update noar ti set v1='937DKZR6XCWJDJ4ZERII10RY8G7QCJSUBMVG49BZKIXBKYNQCZSN5EZNNXCAX11WO18MSYBACNGXVE5186PW1JMH5HSTCI3D4AILVS607E88E5CIO1NZ5P4V4JDFLS5S1FJ6I5PU80B75DYXH2QI0CKAQVE0N6YJDX4ZO7CBQECRRZ80XKHASI2IHFKGQVUMHOCM2UQ5AF28YSV47K7TTQO5MTEMG6K5F0XB2DDM773ABMIUKXMSU75CNK70R5K5S' where id=86; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='6GW2VIOWKEJ8ESVVTRMGODL2SNCEIN8DYTZ7BN1YAJNON5CIC46FH0Z52WBYO7CYAE11MPQ9JU0J2PQVDRCIZN5X68W1M5DDD7CYNYFKFH2A466ROLZYQLFS7NLK9MAVG004PDDGSYEG3YDQHGCFCN7AYXO3MJ12I99ERIOK5HC7HTYHHNHIARE3FJHUF4KYSPEZZE6XU81GD2DN30ZIPJK5RGT3OHWYTD9YHQFYKGQUZCFRHYKF66HU6784Q3UY0' where id=86; -update noar ti set v2='6GW2VIOWKEJ8ESVVTRMGODL2SNCEIN8DYTZ7BN1YAJNON5CIC46FH0Z52WBYO7CYAE11MPQ9JU0J2PQVDRCIZN5X68W1M5DDD7CYNYFKFH2A466ROLZYQLFS7NLK9MAVG004PDDGSYEG3YDQHGCFCN7AYXO3MJ12I99ERIOK5HC7HTYHHNHIARE3FJHUF4KYSPEZZE6XU81GD2DN30ZIPJK5RGT3OHWYTD9YHQFYKGQUZCFRHYKF66HU6784Q3UY0' where id=86; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='7WVTO26UVFWPTATT9MJFCHJBKR2ZMOADMLUGV7C427LCWJ7EQ57X201KIFPPPWAXRLRNL0YJ91YB3O0B4W4YXQ3CYA7SVV71GNY6VDGKAIF2HDSLIX3PGQWMKHWQIY48EQ9FMCFC33H22W4FW4EL34SL5DE0MIOFL6RND20MAEKPO8PATTIHREMVF1W5GG3ILSH7D7IYCB73CL2L63QJ57QCYQVQY3RRVAKKE368VFFHJXO9THMLZNL3DP52YTOWX' where id=86; -update noar ti set v3='7WVTO26UVFWPTATT9MJFCHJBKR2ZMOADMLUGV7C427LCWJ7EQ57X201KIFPPPWAXRLRNL0YJ91YB3O0B4W4YXQ3CYA7SVV71GNY6VDGKAIF2HDSLIX3PGQWMKHWQIY48EQ9FMCFC33H22W4FW4EL34SL5DE0MIOFL6RND20MAEKPO8PATTIHREMVF1W5GG3ILSH7D7IYCB73CL2L63QJ57QCYQVQY3RRVAKKE368VFFHJXO9THMLZNL3DP52YTOWX' where id=86; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='TVTAELH553TRH2LW915RRLWWLUZQ7A851IW85T7PFWSISU6KBRQFNNU04MCH4FRE1IR6NW9FYOFE3Q06NNVKZJYVTA8F7GFBE4XQBR7KX3COQS64AAIY261BNYH6IRQGVYYMV4ZVH48NDBTVDBHIN9LHT0CT9RCFRSA8Q1IO8RGV683VO4Y3OFJJ22TNVHVKCBIPMNINY6PXQLG6FNEU2KULNIJK2PTPSGCMUSAYP3C7650J3CX2XYS52OKI7DK9I' where id=87; -update noar ti set v0='TVTAELH553TRH2LW915RRLWWLUZQ7A851IW85T7PFWSISU6KBRQFNNU04MCH4FRE1IR6NW9FYOFE3Q06NNVKZJYVTA8F7GFBE4XQBR7KX3COQS64AAIY261BNYH6IRQGVYYMV4ZVH48NDBTVDBHIN9LHT0CT9RCFRSA8Q1IO8RGV683VO4Y3OFJJ22TNVHVKCBIPMNINY6PXQLG6FNEU2KULNIJK2PTPSGCMUSAYP3C7650J3CX2XYS52OKI7DK9I' where id=87; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='MFOO4B51J9HDOBT48ARQ117ZJYM7ENIF4XAKA7F5ZRR0U5E8H5SSD2CO2GD9RPOPHPY7CVX56JQKNWC4L9ZVSR6NFRCSQYOFTQLQP4S9UTNG8DFGAD72EO4KJBWKEELPO59UY6Q3ERK80NQATGRKT8OUWSBC3JBJ1QPQ5C3ZEWJA3O7OI9RDRJ66YZPUVXIWMCWDJI7H2SBMBMYHMMBLFSETUWA94H7ZBRANR3AYMX06IMI4ZFGDE1EGY7QQDF9BN' where id=87; -update noar ti set v1='MFOO4B51J9HDOBT48ARQ117ZJYM7ENIF4XAKA7F5ZRR0U5E8H5SSD2CO2GD9RPOPHPY7CVX56JQKNWC4L9ZVSR6NFRCSQYOFTQLQP4S9UTNG8DFGAD72EO4KJBWKEELPO59UY6Q3ERK80NQATGRKT8OUWSBC3JBJ1QPQ5C3ZEWJA3O7OI9RDRJ66YZPUVXIWMCWDJI7H2SBMBMYHMMBLFSETUWA94H7ZBRANR3AYMX06IMI4ZFGDE1EGY7QQDF9BN' where id=87; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='E2KIABUGKRBTPRUHNUG0TP9E8AKDCBX4TDJJR87Z6ADS0BA3CZOY3F5PAQ9GNNLPEHIQYP42D3UFOC7WN55Z7A3LA02KT54RV1FG05GW9C7G98ZJED7IVU2E0DAZBR3YYT69IR4TZGN4WLW8H4CRJ4J82SVA58VOUI6ZQTMEC94NUO2G4BKZW3S1VAW1T714I4PB7DM0SCCGIHS0SVR7WR7WIDN4MAB5ZXF37WR0RM9V65PQHXJF1BGUEUS05C0EX' where id=87; -update noar ti set v2='E2KIABUGKRBTPRUHNUG0TP9E8AKDCBX4TDJJR87Z6ADS0BA3CZOY3F5PAQ9GNNLPEHIQYP42D3UFOC7WN55Z7A3LA02KT54RV1FG05GW9C7G98ZJED7IVU2E0DAZBR3YYT69IR4TZGN4WLW8H4CRJ4J82SVA58VOUI6ZQTMEC94NUO2G4BKZW3S1VAW1T714I4PB7DM0SCCGIHS0SVR7WR7WIDN4MAB5ZXF37WR0RM9V65PQHXJF1BGUEUS05C0EX' where id=87; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='CMG6KAEA2E3M3DCXKBAMGGG4TXHWTP6QHHKJ3CY1T2AKUBP2DPOF3JQXBRORE11J6X1QHY16J5M5OG74W1VE78ZVCD4UWDGWC5PVB5Y9YVWQ3ZPHFFW7WZN79S49FBDFQQGRUUTL805V8I5A1R6L3N2AJITY8NIVZQ1BFBV7X2HV01YAOBXSBXO1QMQYKL74RMFGCWYDWTIK02YM09AV4SLJPRW4IS7ITXB0P9YD7ITGBKTKY2HG5OM3Q633ZQ282' where id=87; -update noar ti set v3='CMG6KAEA2E3M3DCXKBAMGGG4TXHWTP6QHHKJ3CY1T2AKUBP2DPOF3JQXBRORE11J6X1QHY16J5M5OG74W1VE78ZVCD4UWDGWC5PVB5Y9YVWQ3ZPHFFW7WZN79S49FBDFQQGRUUTL805V8I5A1R6L3N2AJITY8NIVZQ1BFBV7X2HV01YAOBXSBXO1QMQYKL74RMFGCWYDWTIK02YM09AV4SLJPRW4IS7ITXB0P9YD7ITGBKTKY2HG5OM3Q633ZQ282' where id=87; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='JWGXVKTG89T8MXB18UHWQ24QW8TH27MIVIHCE453AXY874SOQI7ODP58C8069DDCFKJWDLWSDVR8P8KR92PG6XM2I62W6NOLBFJJE97WNCKICXCDZNCR52190LM1H28W6DKIH3MH6TPNA2L1AH1DOTDYEZDZA2NNE1ELHSLAE5QQSNMTDOV216FTHDUSXUGCBKZW5D5HJBOBZP2K5RVVCNZ6D9DX0UHDWBKLYSY233LN78HVLJC40ERONQ3QWIAG6' where id=88; -update noar ti set v0='JWGXVKTG89T8MXB18UHWQ24QW8TH27MIVIHCE453AXY874SOQI7ODP58C8069DDCFKJWDLWSDVR8P8KR92PG6XM2I62W6NOLBFJJE97WNCKICXCDZNCR52190LM1H28W6DKIH3MH6TPNA2L1AH1DOTDYEZDZA2NNE1ELHSLAE5QQSNMTDOV216FTHDUSXUGCBKZW5D5HJBOBZP2K5RVVCNZ6D9DX0UHDWBKLYSY233LN78HVLJC40ERONQ3QWIAG6' where id=88; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='TOFNGY7WGDL6P7700N7RF9776HR6ADJSOBTXTGVR4Z90WH8PMFHR91OY125A6INJDSYEW0I28TNP12B0HBHQWWUMK8JAQ3Q9EHXP6ZCOX82M6AFX493ZW2WJ5CYUVRGMEW70KRX22YWAVBWOE5LPZKX0L6MM1J9MMRYKKIAKPQJJF2XW4KYGF0NM4FW0JLXVYMV9VK060T33CMBX3X4LMX4F641BQBZWYKVIR5NGQAU8ZANPJS6HQNYRSXAFQ7YD4' where id=88; -update noar ti set v1='TOFNGY7WGDL6P7700N7RF9776HR6ADJSOBTXTGVR4Z90WH8PMFHR91OY125A6INJDSYEW0I28TNP12B0HBHQWWUMK8JAQ3Q9EHXP6ZCOX82M6AFX493ZW2WJ5CYUVRGMEW70KRX22YWAVBWOE5LPZKX0L6MM1J9MMRYKKIAKPQJJF2XW4KYGF0NM4FW0JLXVYMV9VK060T33CMBX3X4LMX4F641BQBZWYKVIR5NGQAU8ZANPJS6HQNYRSXAFQ7YD4' where id=88; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='J185Q4TTRTGJCGUZ8ELJW9E6TXO1I0ANHSAINO8BW6M3NVZIZBG2TX5FE1OSRHRDVCI4YW9RL2MAM8QKXRC7RUPFZHZA867R6572OUMYYDD7Y6KHN3E3G77H4BAR224NBMJ1RRTKRABH5KGPYKZQRMAPQE5EECIPDGQ3T1RUYUIMJHA32G3RRXVXUMBJOS6RCSH3HYMK0IUOW1YCBDRIF79Q3V7S6PZOG0M3TRZV3B2HP6P35G2D4KZKTTQ8ZR1R9' where id=88; -update noar ti set v2='J185Q4TTRTGJCGUZ8ELJW9E6TXO1I0ANHSAINO8BW6M3NVZIZBG2TX5FE1OSRHRDVCI4YW9RL2MAM8QKXRC7RUPFZHZA867R6572OUMYYDD7Y6KHN3E3G77H4BAR224NBMJ1RRTKRABH5KGPYKZQRMAPQE5EECIPDGQ3T1RUYUIMJHA32G3RRXVXUMBJOS6RCSH3HYMK0IUOW1YCBDRIF79Q3V7S6PZOG0M3TRZV3B2HP6P35G2D4KZKTTQ8ZR1R9' where id=88; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='NX9U9U7LCTO2XCGC1YP7VZ9CI4OYSZ5P0DH1PCP47GNC0P2IE9R08N1IQJOFAK3XK37YYUYBS7X5EQDUU9MXTEJ13230SP3K1QMAHPYMRYPO7TBI4NFPAJAGT54ZF47OH9Y82EAQYMZYNB3O24PVT1EKZQBK3II3SJ9Q8VPFJ2B17W32C5AG02THSREHO9P5VP9HBLZGLJCQF9Y65IRA0UPEBLERXZHIS7I2RSVC3H7J8RCI53Q35MBYDMP2UEVPV' where id=88; -update noar ti set v3='NX9U9U7LCTO2XCGC1YP7VZ9CI4OYSZ5P0DH1PCP47GNC0P2IE9R08N1IQJOFAK3XK37YYUYBS7X5EQDUU9MXTEJ13230SP3K1QMAHPYMRYPO7TBI4NFPAJAGT54ZF47OH9Y82EAQYMZYNB3O24PVT1EKZQBK3II3SJ9Q8VPFJ2B17W32C5AG02THSREHO9P5VP9HBLZGLJCQF9Y65IRA0UPEBLERXZHIS7I2RSVC3H7J8RCI53Q35MBYDMP2UEVPV' where id=88; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='XBYXZ8MFXPU5SVC7HVP9GEIU9O3S0NHTVMTMX55BQAHA1WF65U5W52WCXSIORXUIR71XQ28N0UKKY80WDIOYKO2SKY3KD2NAC3CWTF5ZDPEFWTASQ9P2RJSZ5UGOTRPKNAGMIUNKWS46WV33Q2HJ7ZH7EUBX83P87FWDRNYGFTKNLH0HYIK10HXWSZP2AXFAOKNEOQI21UFGALXA9OSZ47QNVCLRIAL9QN0VOAYBW33SJNS7B8LP27DW8IMDKNZ55' where id=89; -update noar ti set v0='XBYXZ8MFXPU5SVC7HVP9GEIU9O3S0NHTVMTMX55BQAHA1WF65U5W52WCXSIORXUIR71XQ28N0UKKY80WDIOYKO2SKY3KD2NAC3CWTF5ZDPEFWTASQ9P2RJSZ5UGOTRPKNAGMIUNKWS46WV33Q2HJ7ZH7EUBX83P87FWDRNYGFTKNLH0HYIK10HXWSZP2AXFAOKNEOQI21UFGALXA9OSZ47QNVCLRIAL9QN0VOAYBW33SJNS7B8LP27DW8IMDKNZ55' where id=89; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='XK4YWCJUAN8ZN7KLLZTFSVWRM1L99FJNSG3UGFPPB9DGX5MIQZ27LAYSEB2MCSQMKC0Q9GSDYRVVTJAA8MJTYRON3O142CV1HMDXLGNSNMZNOD4UFWT5SXXULZBG2T5X7396GZAN5CWALNBBYBTPZRZNZBYCIA2VCHI8RR8D7DP5UV1ET3CEJHH4WLS8C8S8DKMM4QXNH32JE06T7FVXWX8MZHLBZNKJ9R33IO9MO46DMB271IO9SCUON3GNRLYNM' where id=89; -update noar ti set v1='XK4YWCJUAN8ZN7KLLZTFSVWRM1L99FJNSG3UGFPPB9DGX5MIQZ27LAYSEB2MCSQMKC0Q9GSDYRVVTJAA8MJTYRON3O142CV1HMDXLGNSNMZNOD4UFWT5SXXULZBG2T5X7396GZAN5CWALNBBYBTPZRZNZBYCIA2VCHI8RR8D7DP5UV1ET3CEJHH4WLS8C8S8DKMM4QXNH32JE06T7FVXWX8MZHLBZNKJ9R33IO9MO46DMB271IO9SCUON3GNRLYNM' where id=89; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='A3QKPK822VDQ5085BZHJE918BJI27EQK2F44LGCJGKZKOYR0ZK153ZSAO0T5WD54LIDIXQ44A1XVS9BTBQC3OTNNA79PGDXAUEE9TG2Y2UYUA8QWK7DN5ZQ6L678TK32DXEOEZXW9LEAZSOO5LNMUQSALQNI8O8NNZU4NVYYWLIYRPM7WZVG6LQCLJGD33NEI2PR09TBW54OANH13UTBAGJY2MBRTJW97GVRMP76YDFZPMGH4VOKOPB9EE86215A0' where id=89; -update noar ti set v2='A3QKPK822VDQ5085BZHJE918BJI27EQK2F44LGCJGKZKOYR0ZK153ZSAO0T5WD54LIDIXQ44A1XVS9BTBQC3OTNNA79PGDXAUEE9TG2Y2UYUA8QWK7DN5ZQ6L678TK32DXEOEZXW9LEAZSOO5LNMUQSALQNI8O8NNZU4NVYYWLIYRPM7WZVG6LQCLJGD33NEI2PR09TBW54OANH13UTBAGJY2MBRTJW97GVRMP76YDFZPMGH4VOKOPB9EE86215A0' where id=89; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='AXB04X27LL84R6APRE2WD5ZQDOT5C54WDITI67PKM44FI7JL1T8JT9KCIWDDHOLRGQWUV02DPWQC0LRP6QJTQDZNAONKKZNJYKU4PHZ3WN7D835VMWXYSFXJ1LYDX4W54MVV7664V1WY5LTSDPTNUF8JSFWEOSXRPQ8G78K47FE1GJKZIBUQ3DAEARX1NM2GLB4UMA7WO0J5AW85RY2O186RVJ1P6WDEQICU0Z6D4S68GA1P0U9RN2X7YTVI3WB57' where id=89; -update noar ti set v3='AXB04X27LL84R6APRE2WD5ZQDOT5C54WDITI67PKM44FI7JL1T8JT9KCIWDDHOLRGQWUV02DPWQC0LRP6QJTQDZNAONKKZNJYKU4PHZ3WN7D835VMWXYSFXJ1LYDX4W54MVV7664V1WY5LTSDPTNUF8JSFWEOSXRPQ8G78K47FE1GJKZIBUQ3DAEARX1NM2GLB4UMA7WO0J5AW85RY2O186RVJ1P6WDEQICU0Z6D4S68GA1P0U9RN2X7YTVI3WB57' where id=89; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='24A512R1E15GG6V6BIM0F1I4KOVBRDK2KB5X5I2TR0I11DOJUYA9QPPFXE2HXUCMJYUPPXUHKV71DI246KTMUF4S69XO68YWRN9STUR8D49Y2M88K0NHPVLHTOPIA9R9J4Q2VHCKTL9WUN8BCY6RO52F6ZBGFBU4TAUH91MUF5BXFN8BMZD72HH55FUBNWT7J7PKUKYF8JRG725OU7CPKQDUBU76UM3GAJ9QZ78DKAGYZUF7P7AMFBCO3KCXP9PA1' where id=90; -update noar ti set v0='24A512R1E15GG6V6BIM0F1I4KOVBRDK2KB5X5I2TR0I11DOJUYA9QPPFXE2HXUCMJYUPPXUHKV71DI246KTMUF4S69XO68YWRN9STUR8D49Y2M88K0NHPVLHTOPIA9R9J4Q2VHCKTL9WUN8BCY6RO52F6ZBGFBU4TAUH91MUF5BXFN8BMZD72HH55FUBNWT7J7PKUKYF8JRG725OU7CPKQDUBU76UM3GAJ9QZ78DKAGYZUF7P7AMFBCO3KCXP9PA1' where id=90; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='BFBNTLUIIAIUE88NCG72GU8G6RQ166LL7GIID03YQF5D8194M6M8QOKQY0TJLSTKSTZSWJGQKLOIFH57I3FVLPCUN8SGXP2GM6R6YN4ETIV6VVZVFYXPRIF2QEPNZD6SRMH1YC17IOLM5BZSLBO91C6KYSCGATHVIHROFAAXB70Z8JO3PKN341N0UCCN6ZGKN873W5X4XTK4DQGEJ776LXEL1TAVVGXQC7WKU3WDU7NBJAJ5GQXZRU1L71BWBUTUZ' where id=90; -update noar ti set v1='BFBNTLUIIAIUE88NCG72GU8G6RQ166LL7GIID03YQF5D8194M6M8QOKQY0TJLSTKSTZSWJGQKLOIFH57I3FVLPCUN8SGXP2GM6R6YN4ETIV6VVZVFYXPRIF2QEPNZD6SRMH1YC17IOLM5BZSLBO91C6KYSCGATHVIHROFAAXB70Z8JO3PKN341N0UCCN6ZGKN873W5X4XTK4DQGEJ776LXEL1TAVVGXQC7WKU3WDU7NBJAJ5GQXZRU1L71BWBUTUZ' where id=90; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='82MJYN32AKGV01ZNZXV7ZTNR4U1B1YT403BVJV3UGYU6KG94FW69R31416L91HLNBDK0EH8LKOTVJRF13Q40D7EEXFUMX1QNSEC8LS213TCCGK6OQTPJOSF9QHDKZPZIX9LYI0F597QG796I3DQ57WU2MEBVMQGFJ3PL6ZE0WQURGMU2LFNKFRICV73UJ3T4WL9W602LPPVEENT1C1T5RUTBBGW8HTUIGNVO3PJ2GMFKXTBP4P8IAJ50S6TTLXYF6' where id=90; -update noar ti set v2='82MJYN32AKGV01ZNZXV7ZTNR4U1B1YT403BVJV3UGYU6KG94FW69R31416L91HLNBDK0EH8LKOTVJRF13Q40D7EEXFUMX1QNSEC8LS213TCCGK6OQTPJOSF9QHDKZPZIX9LYI0F597QG796I3DQ57WU2MEBVMQGFJ3PL6ZE0WQURGMU2LFNKFRICV73UJ3T4WL9W602LPPVEENT1C1T5RUTBBGW8HTUIGNVO3PJ2GMFKXTBP4P8IAJ50S6TTLXYF6' where id=90; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='4KMNFGP2LIIFBGSA0AEPA70TDRUU4T2R80BBGS0DBV5F76ET9U45GUANOHWS8ABURIIG4W2YD9WM0R3M6G9DXWIHKE5LPNUMGDO73VLJLPICQEYSXOPZ5CZXGIV8JNIF4UHUYM889Y8GZSHUFDZLUIMNU0LCWU3VF9I6UEVZGESDPKQBFYDPHVOR4SC0GOKPQFFXXT69RIYYRMIBQ9WO6K4VXBEVEX0M6WOVPA2R2N836BU35V5M6GLHL299FS5JQ' where id=90; -update noar ti set v3='4KMNFGP2LIIFBGSA0AEPA70TDRUU4T2R80BBGS0DBV5F76ET9U45GUANOHWS8ABURIIG4W2YD9WM0R3M6G9DXWIHKE5LPNUMGDO73VLJLPICQEYSXOPZ5CZXGIV8JNIF4UHUYM889Y8GZSHUFDZLUIMNU0LCWU3VF9I6UEVZGESDPKQBFYDPHVOR4SC0GOKPQFFXXT69RIYYRMIBQ9WO6K4VXBEVEX0M6WOVPA2R2N836BU35V5M6GLHL299FS5JQ' where id=90; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='H5RVFYRB8FUGWOI6VTWMAXK37BXF7W665LYAQ43K87HTDVZA1KOB6ZPA2BPM7H0QICWDRTQ34S8B2ZVU7ZZSDI9UTL9MQJ16ZNVI0EYRQCRJ0YHH1K7Z3TSLH6MAUM5DBCNRNWMSNFN6YBNDXGAXGB6JKIAC3HQ36SSLYG5BS1U0PG63L2GGPGDWIO95LGICJ59X3X9C9L2OL7P6743HB2A3OZ85G7LDZAPHGLIS9OZ17ZCZ7HZ951Q4DGQMKC5E8' where id=91; -update noar ti set v0='H5RVFYRB8FUGWOI6VTWMAXK37BXF7W665LYAQ43K87HTDVZA1KOB6ZPA2BPM7H0QICWDRTQ34S8B2ZVU7ZZSDI9UTL9MQJ16ZNVI0EYRQCRJ0YHH1K7Z3TSLH6MAUM5DBCNRNWMSNFN6YBNDXGAXGB6JKIAC3HQ36SSLYG5BS1U0PG63L2GGPGDWIO95LGICJ59X3X9C9L2OL7P6743HB2A3OZ85G7LDZAPHGLIS9OZ17ZCZ7HZ951Q4DGQMKC5E8' where id=91; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='3QTQ22O79WXROW10ZIGKFK9C0ON1CSOWUVAAC88P2LXZ6EFW22ZWYMIPPI7X13KSDBWFW8BRRUMSUYIJK5TYXSDT1QTQVSN7X2O6GTKUMS2RGW4H2P3EMF5KD1WTE8N43VZB9THRNWIZ8YLMOQYHZMLU1R5PLP9DK8AFQZDT6VV3BH93183J59E26OICO9X51TII3WXDV90CLTQKP5TK1EM3PG7NV7SXV17N7G4WIGQOFMP5RAHYLTQQHLZK2H383' where id=91; -update noar ti set v1='3QTQ22O79WXROW10ZIGKFK9C0ON1CSOWUVAAC88P2LXZ6EFW22ZWYMIPPI7X13KSDBWFW8BRRUMSUYIJK5TYXSDT1QTQVSN7X2O6GTKUMS2RGW4H2P3EMF5KD1WTE8N43VZB9THRNWIZ8YLMOQYHZMLU1R5PLP9DK8AFQZDT6VV3BH93183J59E26OICO9X51TII3WXDV90CLTQKP5TK1EM3PG7NV7SXV17N7G4WIGQOFMP5RAHYLTQQHLZK2H383' where id=91; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='5PI4Q9TEN68K5DAGII5EBTQZ0YW4CH8WRMN0SXA69CXAV55P78BD3TXIRT6TVG54E0SK12YG85HYE2EJRHK65YZT25C95Z5ZFT1M9U8RSKAJ7QA3K29L2BDL43QBKQFN1BVSMIZ5DAB4GKTMQLBQ7K98LJH70FWZWX5R5RXUZ8QSSNMNMMHC7BKWOWY3L0SM120ZGD59T2T5ONVCJN8NBD7INEROY3SWNZ45AQ8G48YKIPT5U9QNNWHLKPSWFOIUZ' where id=91; -update noar ti set v2='5PI4Q9TEN68K5DAGII5EBTQZ0YW4CH8WRMN0SXA69CXAV55P78BD3TXIRT6TVG54E0SK12YG85HYE2EJRHK65YZT25C95Z5ZFT1M9U8RSKAJ7QA3K29L2BDL43QBKQFN1BVSMIZ5DAB4GKTMQLBQ7K98LJH70FWZWX5R5RXUZ8QSSNMNMMHC7BKWOWY3L0SM120ZGD59T2T5ONVCJN8NBD7INEROY3SWNZ45AQ8G48YKIPT5U9QNNWHLKPSWFOIUZ' where id=91; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='HMCIFVLIP82EB98V66WN595HAFU5UZD2W10RR126OP0HTKEFXPQ9FCKEK094B6SNLMMKP606ULPU1S21YMFM1RDZFAM6D9N07DEPVFPSFRU8QBYUWX3H6PMELJZQ6LHP1I7Y26GOQC0NGTP7SPDDNG7A2KSBOOUHTDUXNV199ITGHOCFCE2Q1DL7T2HLTDJOMQ4HURE6PKVTOOJIYRJQGPA3WS2GJC018Q75QZ7UXL0L5A8QA9M0GSPOP8YMFOBF2' where id=91; -update noar ti set v3='HMCIFVLIP82EB98V66WN595HAFU5UZD2W10RR126OP0HTKEFXPQ9FCKEK094B6SNLMMKP606ULPU1S21YMFM1RDZFAM6D9N07DEPVFPSFRU8QBYUWX3H6PMELJZQ6LHP1I7Y26GOQC0NGTP7SPDDNG7A2KSBOOUHTDUXNV199ITGHOCFCE2Q1DL7T2HLTDJOMQ4HURE6PKVTOOJIYRJQGPA3WS2GJC018Q75QZ7UXL0L5A8QA9M0GSPOP8YMFOBF2' where id=91; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='785RE4HQE4VE16P5AWUB1V4J4DQJJBO8RP69GU94BEN98LHXML7F54A2Z1PK9XAH28J9K3MH86F6DLZ201JPNKXN38U7FLX7FJWIDYYM32JA6VC0NES00BCNAWU4QT5IV8J8A8KJ8EDAXB00OHFJ7SMDBDVXCV6ETLVL0JLKQSVPG93ZTD89061FVJ1AOW2B9EEEMM6KJKPLNGMO0NHP7US308Y90NI2YFDS1VLPX8NROVEUO9H7B9XVGWZSMKO3J' where id=92; -update noar ti set v0='785RE4HQE4VE16P5AWUB1V4J4DQJJBO8RP69GU94BEN98LHXML7F54A2Z1PK9XAH28J9K3MH86F6DLZ201JPNKXN38U7FLX7FJWIDYYM32JA6VC0NES00BCNAWU4QT5IV8J8A8KJ8EDAXB00OHFJ7SMDBDVXCV6ETLVL0JLKQSVPG93ZTD89061FVJ1AOW2B9EEEMM6KJKPLNGMO0NHP7US308Y90NI2YFDS1VLPX8NROVEUO9H7B9XVGWZSMKO3J' where id=92; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='0EAB2PKE0VSX30YVSJQA0WHFBN56CHFLCMTLDOEWUL1C3F08S1X0K2PUNJ5KYJLIDKOQW3A4N9YDFQLLVGCUERSQUUCZZ6ZXF3PEKD643XONVHBU1OIBIUSV2A2M4PU7NUZAL01LUZJGUI1EQUIWOXSML2OZNNFRJS3P98RB7AJ6MHPB3D5CH2WN7ROML9Q9P4Q3N2H6TY9ZN7BD3TKAQRBL1H1CNYM0PGKOO15MKHD7EWY10H80LGVFYNBBMBAAS' where id=92; -update noar ti set v1='0EAB2PKE0VSX30YVSJQA0WHFBN56CHFLCMTLDOEWUL1C3F08S1X0K2PUNJ5KYJLIDKOQW3A4N9YDFQLLVGCUERSQUUCZZ6ZXF3PEKD643XONVHBU1OIBIUSV2A2M4PU7NUZAL01LUZJGUI1EQUIWOXSML2OZNNFRJS3P98RB7AJ6MHPB3D5CH2WN7ROML9Q9P4Q3N2H6TY9ZN7BD3TKAQRBL1H1CNYM0PGKOO15MKHD7EWY10H80LGVFYNBBMBAAS' where id=92; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='2NJ4IUDLWPW0YBQ67EP3TRNDYMEP4LMAEDSRCVHW3VU5VUJ7U401VU5DCVO6RN4GMFU95CZCBL5BPXISWPSS9ID05H21MC5TDAQ0MNWQ85E69KFY4JRALHNEFWV1JFGLIF1AFSEN2CN5GL463TT9RPUKNJITW5ICZ5SQXD4VSKU94C7T9WU6QFW8MIDHCYYNI18GYQ23M6RCB2MRHOXIB9H78YI3191CI8BVLAT9W6GKABFKVM0MGV7V0Y7XP4352' where id=92; -update noar ti set v2='2NJ4IUDLWPW0YBQ67EP3TRNDYMEP4LMAEDSRCVHW3VU5VUJ7U401VU5DCVO6RN4GMFU95CZCBL5BPXISWPSS9ID05H21MC5TDAQ0MNWQ85E69KFY4JRALHNEFWV1JFGLIF1AFSEN2CN5GL463TT9RPUKNJITW5ICZ5SQXD4VSKU94C7T9WU6QFW8MIDHCYYNI18GYQ23M6RCB2MRHOXIB9H78YI3191CI8BVLAT9W6GKABFKVM0MGV7V0Y7XP4352' where id=92; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='JOZ0SGSDWBX0I0Z1JWZROGVYLQGHVI5RA0YVPGEG4C2MVK3F8HKWBTNZN05KV4SJJVTFML71ERZ1M3ZDOBCUIHXBE4V01B35PYOFYJJ83OWOUY93SAUSE62ZX5WJZSNUNGTJSN3R56VNP5OG0VD9YS70FQQVCTMQKL434AS124GGPRJKQ7AVSWRYO6PA8KF035TVPFCDWAENYPUPF7ZQQLJQ291VD850Q2SFGTJ22TJDNQVP40O4LQS3DXZVO2ZZA' where id=92; -update noar ti set v3='JOZ0SGSDWBX0I0Z1JWZROGVYLQGHVI5RA0YVPGEG4C2MVK3F8HKWBTNZN05KV4SJJVTFML71ERZ1M3ZDOBCUIHXBE4V01B35PYOFYJJ83OWOUY93SAUSE62ZX5WJZSNUNGTJSN3R56VNP5OG0VD9YS70FQQVCTMQKL434AS124GGPRJKQ7AVSWRYO6PA8KF035TVPFCDWAENYPUPF7ZQQLJQ291VD850Q2SFGTJ22TJDNQVP40O4LQS3DXZVO2ZZA' where id=92; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='DGCYFK8V52C5Q39UFQQI6GFV9MS2STLV1IVMQE8B3D5XVXHY0JGLH4QVNXM5X63RMO9XNQRMK1ZBW8K9B9Q2J4ANK8XIV3UF00ZQ5ZP51Z77E1UDIA0TY82H5SWNODE7SSE3LZJK4SROJ3W4LTMA3VIKBR8AROSTKU634XKY2ZQUUPD4295PMJED0ZRVDXP3SSEVM6WBTPDS37NGXA8TSYQFN59LR83GEYD24W26KAJIRQ6EGYLXFXQI56ZO1TZ47' where id=93; -update noar ti set v0='DGCYFK8V52C5Q39UFQQI6GFV9MS2STLV1IVMQE8B3D5XVXHY0JGLH4QVNXM5X63RMO9XNQRMK1ZBW8K9B9Q2J4ANK8XIV3UF00ZQ5ZP51Z77E1UDIA0TY82H5SWNODE7SSE3LZJK4SROJ3W4LTMA3VIKBR8AROSTKU634XKY2ZQUUPD4295PMJED0ZRVDXP3SSEVM6WBTPDS37NGXA8TSYQFN59LR83GEYD24W26KAJIRQ6EGYLXFXQI56ZO1TZ47' where id=93; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='X6UQMQPRLVDDO364Q5ZVKKIG7150PHH2IAK1UJ14RPMFDIC60TSCUWPFG89I85K0VU78SVGB74XE5Z8LKMH8BJL3CRLZNRROZIKFGF8SOL88ODQOM3QL6Q2TVNAO0S5QCO7VDFWVGG9Y78D29XNKLPG34YXQO9B2G43AY2CH6ICUNC8TXAHI7IFF8IE19073OZDW4UNV3ODEXOWNIHGPQS8LFEY62R7E0XZOXM14YA0MNQ9URB12029KOXJS5ADWN' where id=93; -update noar ti set v1='X6UQMQPRLVDDO364Q5ZVKKIG7150PHH2IAK1UJ14RPMFDIC60TSCUWPFG89I85K0VU78SVGB74XE5Z8LKMH8BJL3CRLZNRROZIKFGF8SOL88ODQOM3QL6Q2TVNAO0S5QCO7VDFWVGG9Y78D29XNKLPG34YXQO9B2G43AY2CH6ICUNC8TXAHI7IFF8IE19073OZDW4UNV3ODEXOWNIHGPQS8LFEY62R7E0XZOXM14YA0MNQ9URB12029KOXJS5ADWN' where id=93; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='QK5GWKB4T0VEGNP4JCJGEB2RHM5X9S1A42N33117H88ETLIJU4Z9L53SLUMZYA3VA64420NO3LFARVDSTKHUNYW4VEMP5MELEDU587HXCS9AXDPI54AOPH8EDR8AO0BPDKQOLL4NY726N1KVLA044I0MVFU63X61H7H3E8W1UT097PUOPAI1VVTMT4APDE8LAB567UZ2964ZTXSHGDLODX8Q2VX6IUBT37EE9A9VRO9X6ZXGRD1SLLZLKIRUGFDF5' where id=93; -update noar ti set v2='QK5GWKB4T0VEGNP4JCJGEB2RHM5X9S1A42N33117H88ETLIJU4Z9L53SLUMZYA3VA64420NO3LFARVDSTKHUNYW4VEMP5MELEDU587HXCS9AXDPI54AOPH8EDR8AO0BPDKQOLL4NY726N1KVLA044I0MVFU63X61H7H3E8W1UT097PUOPAI1VVTMT4APDE8LAB567UZ2964ZTXSHGDLODX8Q2VX6IUBT37EE9A9VRO9X6ZXGRD1SLLZLKIRUGFDF5' where id=93; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='MD2G12QTM7C1ADRLCAQIA3K91899IXUVBL9I2R90EOCPMKM8METIYDDJFUZA85HDLDBO2KI30IAJC5P4L195QRIHBTV18I30GB5QWBG9DPU3S4SAP4BIRNUBW871W4BJJM4B8LRW7SNT7QEFBR7L5MU52JCAZOPWNGGDN63XUKKZL929LPWUY7IRYVHIROFE9K3WMFBYCWP21VFB3KI7QICAWU6OR4LGQHLFZ92FXZABR7D4B0O75LZKUU3GO8SEK' where id=93; -update noar ti set v3='MD2G12QTM7C1ADRLCAQIA3K91899IXUVBL9I2R90EOCPMKM8METIYDDJFUZA85HDLDBO2KI30IAJC5P4L195QRIHBTV18I30GB5QWBG9DPU3S4SAP4BIRNUBW871W4BJJM4B8LRW7SNT7QEFBR7L5MU52JCAZOPWNGGDN63XUKKZL929LPWUY7IRYVHIROFE9K3WMFBYCWP21VFB3KI7QICAWU6OR4LGQHLFZ92FXZABR7D4B0O75LZKUU3GO8SEK' where id=93; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='H11BFIZVDXIQJSLBQRQ5J8F5H50NY1Q8VIN7KZM72TOK3E1XBJXV3ABNPPV9FEH3RDYXGL37XK2Z2HOQVUTS3RBKHELHI08TJD0AFBBSCXGLRWMG3OZ6Q1GH49BSOIUWWXUM84S441W33FRE3U9XIS8F69LEXY81L4V8B9CEQ5AX7J2NR43W80IIRJXWDF20283YSJKHDB9GHMXWE988IXFUG29CCBKAEMAUPVA9L475WSXQ4VYI8UOOKCOT6X5TQ' where id=94; -update noar ti set v0='H11BFIZVDXIQJSLBQRQ5J8F5H50NY1Q8VIN7KZM72TOK3E1XBJXV3ABNPPV9FEH3RDYXGL37XK2Z2HOQVUTS3RBKHELHI08TJD0AFBBSCXGLRWMG3OZ6Q1GH49BSOIUWWXUM84S441W33FRE3U9XIS8F69LEXY81L4V8B9CEQ5AX7J2NR43W80IIRJXWDF20283YSJKHDB9GHMXWE988IXFUG29CCBKAEMAUPVA9L475WSXQ4VYI8UOOKCOT6X5TQ' where id=94; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='WPC7JU4ENGC774U45EX78DMKHIZ30Y3K57FQ8P0JCHM3YI794O39DLY2D7YS9LN5XZ9DCIAU3UHY4JG6OT9OCWJLIKCNX06RVYUML9WS0OA1ZCOO4AHXOH1Y34KPHYO9MU09DH88J4IBADOPC5TCADI3OFDFJGW5IE96ZFXVXLL3ZGVANB637LHS7F6NXHDH49C6ULHU8KX8W86TZV1BEWS7HEVXDDM41IKMXB862OJCRRP86M7O10GTZF73CQIVE' where id=94; -update noar ti set v1='WPC7JU4ENGC774U45EX78DMKHIZ30Y3K57FQ8P0JCHM3YI794O39DLY2D7YS9LN5XZ9DCIAU3UHY4JG6OT9OCWJLIKCNX06RVYUML9WS0OA1ZCOO4AHXOH1Y34KPHYO9MU09DH88J4IBADOPC5TCADI3OFDFJGW5IE96ZFXVXLL3ZGVANB637LHS7F6NXHDH49C6ULHU8KX8W86TZV1BEWS7HEVXDDM41IKMXB862OJCRRP86M7O10GTZF73CQIVE' where id=94; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='TQO5EOT4LBPGC3PCJIJVZ6YMHOEZPSCI8S6HDAPJTS95E178XYUY53HFHSYXT4I9ELX7G2QDOBSD76ABGMHY2W96V0KT7FTF18035Y6RW8NDFPZBYSCJY99IM1PV0ELMI1QKN3ZAUQM8RY6VOY7MREQLGLCVYLOXQZ2L9CK4R5J3R0ZVZZBSJWZFDH25K8LNM3OPHZE57ENKK8TLLIJS6PV1Q011NCHGD61BLGZZD3KZD4X8U0XTPN57J873UHG6P' where id=94; -update noar ti set v2='TQO5EOT4LBPGC3PCJIJVZ6YMHOEZPSCI8S6HDAPJTS95E178XYUY53HFHSYXT4I9ELX7G2QDOBSD76ABGMHY2W96V0KT7FTF18035Y6RW8NDFPZBYSCJY99IM1PV0ELMI1QKN3ZAUQM8RY6VOY7MREQLGLCVYLOXQZ2L9CK4R5J3R0ZVZZBSJWZFDH25K8LNM3OPHZE57ENKK8TLLIJS6PV1Q011NCHGD61BLGZZD3KZD4X8U0XTPN57J873UHG6P' where id=94; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='W9Y750CILBYT3Z127LDRTG7RZQNCVB9OAQIHMSOSYM82F7H732IZ5WAO0NBY15SXE9N2H3PSRLAL75FT9KDW79M1SE9T89ANRHNAAA11CIE0AI2NCZVFJFT0EP3ZWYLVRY354B1AS2OXH889OCQ9CRQGZ9RRS6DNFY7Y6PL3CREQH6B3OXWMIWX3BQR8DD5AE43Z1DBC8KRZVS5GZZ2YKX3113TMGB15TE6CI97A51SJSI25JZ0L86UCUV44HERY5' where id=94; -update noar ti set v3='W9Y750CILBYT3Z127LDRTG7RZQNCVB9OAQIHMSOSYM82F7H732IZ5WAO0NBY15SXE9N2H3PSRLAL75FT9KDW79M1SE9T89ANRHNAAA11CIE0AI2NCZVFJFT0EP3ZWYLVRY354B1AS2OXH889OCQ9CRQGZ9RRS6DNFY7Y6PL3CREQH6B3OXWMIWX3BQR8DD5AE43Z1DBC8KRZVS5GZZ2YKX3113TMGB15TE6CI97A51SJSI25JZ0L86UCUV44HERY5' where id=94; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='6EH7QOIVOHN03HU0CUMJ0N2D4WM04O1P7UFKK2HJAP1A4PMOYXI4UB7SJ9NQ6K734OVFRAAB7L7IC1AZGVYECSFPS1KJX2XBJOGLFLSRADJLPSVOD56DXV0G8I7OFHH9UW9XCKR7F0547HZ1ZA6QN1PQBA25HW02EWAR909H3KZ7P8ULQXK07MRWELUUG6DR6S9WPU0OSPM73B5JMJ0R3PNTDT37JZB28VCUZQWFZYKXP25LGAMWXWZ9G6E40AF5X' where id=95; -update noar ti set v0='6EH7QOIVOHN03HU0CUMJ0N2D4WM04O1P7UFKK2HJAP1A4PMOYXI4UB7SJ9NQ6K734OVFRAAB7L7IC1AZGVYECSFPS1KJX2XBJOGLFLSRADJLPSVOD56DXV0G8I7OFHH9UW9XCKR7F0547HZ1ZA6QN1PQBA25HW02EWAR909H3KZ7P8ULQXK07MRWELUUG6DR6S9WPU0OSPM73B5JMJ0R3PNTDT37JZB28VCUZQWFZYKXP25LGAMWXWZ9G6E40AF5X' where id=95; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='5F5NA2DAJF52WVJZIPTVS277X9YJG5X0WE98SRQ5P00TF072U92VFG5BEHZXIPB9Y88137RSUR571QM9AGC0ZNDMOXTYOFW08LVJSF3EL4KQIDZN3MO28KE1WMNPPK4VM5A1AO65SDLFUSQYO0ZED3HKFG05JWNFC99GMC23K1LYC78RTJINJVZU2LI75M35MQZ3UU2ZMYDL2T0FTUDJ4RE74UE9AKYU6D4F7O9MY5SVPBBCFSVD0EAZAHBJVWK88' where id=95; -update noar ti set v1='5F5NA2DAJF52WVJZIPTVS277X9YJG5X0WE98SRQ5P00TF072U92VFG5BEHZXIPB9Y88137RSUR571QM9AGC0ZNDMOXTYOFW08LVJSF3EL4KQIDZN3MO28KE1WMNPPK4VM5A1AO65SDLFUSQYO0ZED3HKFG05JWNFC99GMC23K1LYC78RTJINJVZU2LI75M35MQZ3UU2ZMYDL2T0FTUDJ4RE74UE9AKYU6D4F7O9MY5SVPBBCFSVD0EAZAHBJVWK88' where id=95; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='Q2LDQOBULXJYLQOXWFCE3RSBY0V05RTKQCTYQETDUKUJZTLUUK01X7HGB4X0UZ67YG2CYE7O5PWYKXCOT9LNCVKWEG5Q4IGA5W4T9T1NFPA4LJ7EISBXHWA109RFB5AJMM2O7MZ57HHCD71E6AMLOFC90MSKXPUTW58D12FDRPUSZ18Z2R75D7Q0ED2BHKHAH6NT0BUDYBY6EIVCMATYKT7O6O51FDWA5LJPF3DLQF7NJVS5I7A3XG3L2B33K1O7V' where id=95; -update noar ti set v2='Q2LDQOBULXJYLQOXWFCE3RSBY0V05RTKQCTYQETDUKUJZTLUUK01X7HGB4X0UZ67YG2CYE7O5PWYKXCOT9LNCVKWEG5Q4IGA5W4T9T1NFPA4LJ7EISBXHWA109RFB5AJMM2O7MZ57HHCD71E6AMLOFC90MSKXPUTW58D12FDRPUSZ18Z2R75D7Q0ED2BHKHAH6NT0BUDYBY6EIVCMATYKT7O6O51FDWA5LJPF3DLQF7NJVS5I7A3XG3L2B33K1O7V' where id=95; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='REKOS1KNF5KJOVW58D7X5AZP883BHX8A2GOE8FJBNYXBKMERMYY2L2L0LMTNYNK538E4MJN79BEQ76KVF3Q26VNTZY7HEHZI2L1VXJK5KI1CC5SWNZF96V8H533EF2C331NZX1RTUIIXAGBX9M3UQPZDLM7R5FVO0T1BU1EGM3W9KVYOLELU65V7WWHSYNA6AQNBPEL9M4PGIOJG8XN8M9ZV1TM6XBLUEZKQGX2WDEIN9EE7QOOB7LO7HF833O9U8' where id=95; -update noar ti set v3='REKOS1KNF5KJOVW58D7X5AZP883BHX8A2GOE8FJBNYXBKMERMYY2L2L0LMTNYNK538E4MJN79BEQ76KVF3Q26VNTZY7HEHZI2L1VXJK5KI1CC5SWNZF96V8H533EF2C331NZX1RTUIIXAGBX9M3UQPZDLM7R5FVO0T1BU1EGM3W9KVYOLELU65V7WWHSYNA6AQNBPEL9M4PGIOJG8XN8M9ZV1TM6XBLUEZKQGX2WDEIN9EE7QOOB7LO7HF833O9U8' where id=95; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='FAAXUMQKWZIUTMKRYCF2CX25NLPKPG6MQ8CO4N030L52E79HDW3Q4LS2CV8F4WYKWQPP9QFJ9ES33XKMXLOMGXWVVHMGJNWUJG1X2EQA20K01CK855O3OED02VIG92SWAKHS4265HHUDIV4YZJYOXVD706BTSZV128OGQ6UKU4BHIYCCTMHA7Y92D8J9Y4X2D6BXIOYFX6D4E0OXULQUCK5JOU3P55M7QY7P6SB1GVJFZPJ887Q2LYXHQ6TZJ8UH8' where id=96; -update noar ti set v0='FAAXUMQKWZIUTMKRYCF2CX25NLPKPG6MQ8CO4N030L52E79HDW3Q4LS2CV8F4WYKWQPP9QFJ9ES33XKMXLOMGXWVVHMGJNWUJG1X2EQA20K01CK855O3OED02VIG92SWAKHS4265HHUDIV4YZJYOXVD706BTSZV128OGQ6UKU4BHIYCCTMHA7Y92D8J9Y4X2D6BXIOYFX6D4E0OXULQUCK5JOU3P55M7QY7P6SB1GVJFZPJ887Q2LYXHQ6TZJ8UH8' where id=96; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='AVB7L0JPH7EAEIWJBTF17FS34SU9LT3GWLYWJWL0X0V0YUYBT85P9Q9IX57TTDUA609O7RVDVLXX2IQJ9DBLZYUVSEXDK8Z2VC0HB9JRMM98OXK7ZUF4BQEB7EPO39U9IPFG0G0MIAMDWGNWYQC1QHAQYEOHXZ6TBV39QKF5WLF25I8OMWMRTW81SC9JEPIFVQNKTTATW720V9Y8HIS1XJT9UGXWJZFK3OJZ98Q30AR38GURYFZPVLAEXMWF1TLZ7' where id=96; -update noar ti set v1='AVB7L0JPH7EAEIWJBTF17FS34SU9LT3GWLYWJWL0X0V0YUYBT85P9Q9IX57TTDUA609O7RVDVLXX2IQJ9DBLZYUVSEXDK8Z2VC0HB9JRMM98OXK7ZUF4BQEB7EPO39U9IPFG0G0MIAMDWGNWYQC1QHAQYEOHXZ6TBV39QKF5WLF25I8OMWMRTW81SC9JEPIFVQNKTTATW720V9Y8HIS1XJT9UGXWJZFK3OJZ98Q30AR38GURYFZPVLAEXMWF1TLZ7' where id=96; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='VTGHTU2UTBEA0Q2C9VHJBGB3A2SG9YL68EH0N3HKIN8RL3ZQM9G2MYZCICJ5X9WGJ26HGLNXGBD61ZT3VPTRUT9V2NSPA2441VQYACSCM3J160CYBZ71PWWKPI1THMQWXD7RSQBBLQYJB9GYLIXSLXIHBVMFAEVGR1H4SRKMCTFX0EKVVM8UQ394F22FVZPTO8LNA3N7BCASHK7YOZM2AMW03PXHD7K4IKSHBZ524VRRER0T35PZICZNHSFO34Z4W' where id=96; -update noar ti set v2='VTGHTU2UTBEA0Q2C9VHJBGB3A2SG9YL68EH0N3HKIN8RL3ZQM9G2MYZCICJ5X9WGJ26HGLNXGBD61ZT3VPTRUT9V2NSPA2441VQYACSCM3J160CYBZ71PWWKPI1THMQWXD7RSQBBLQYJB9GYLIXSLXIHBVMFAEVGR1H4SRKMCTFX0EKVVM8UQ394F22FVZPTO8LNA3N7BCASHK7YOZM2AMW03PXHD7K4IKSHBZ524VRRER0T35PZICZNHSFO34Z4W' where id=96; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='UFJ5JLTP7WUETVGL7QAV005KL9XZ2MNNTHP7O5012TUVA6BGJ79UDMQC5OGYYCW98IZ1WOW35ZB0FSGY2BP8FGJZZ835HRNPSDJ6M2SSWLYMO2IJ6J5F0VYS84NKECE7X53K6RTBDDO0VB3ZM32Z49M8ZCVN7GT8IVEQ9O3SNQMRNY65CRVAK1VSI55E8ZUVY4IWHF6GFI7X6G6H2R75IGA1ASR0BGVBDF32IYWT4DSPJ1II3UCA9D19FLX3NC2ZX' where id=96; -update noar ti set v3='UFJ5JLTP7WUETVGL7QAV005KL9XZ2MNNTHP7O5012TUVA6BGJ79UDMQC5OGYYCW98IZ1WOW35ZB0FSGY2BP8FGJZZ835HRNPSDJ6M2SSWLYMO2IJ6J5F0VYS84NKECE7X53K6RTBDDO0VB3ZM32Z49M8ZCVN7GT8IVEQ9O3SNQMRNY65CRVAK1VSI55E8ZUVY4IWHF6GFI7X6G6H2R75IGA1ASR0BGVBDF32IYWT4DSPJ1II3UCA9D19FLX3NC2ZX' where id=96; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='2257OFXUKLFS2FB5DWHAL2W2YCLFCWSIZ1OYHQXG7DIU8MR0M5N22GZHSIK17MSZ19SGW6LWPUS6DEMLI8LNUHYOUUR6VHWJ9V1EOFVTKPH91AIG559AH6VGZHGDW5G42RCTNQ9LVVYHOQZ9P0VEW0D96WCJHSKUG07ZZFZUB6Q2J4RQ828O09OHJJOP8XF5R5WYBRYCVZL965JLKB58YMLXOMHO8MJTI8SO3XB8QX30O4Z1TY5OTCC734ISR5OR8' where id=97; -update noar ti set v0='2257OFXUKLFS2FB5DWHAL2W2YCLFCWSIZ1OYHQXG7DIU8MR0M5N22GZHSIK17MSZ19SGW6LWPUS6DEMLI8LNUHYOUUR6VHWJ9V1EOFVTKPH91AIG559AH6VGZHGDW5G42RCTNQ9LVVYHOQZ9P0VEW0D96WCJHSKUG07ZZFZUB6Q2J4RQ828O09OHJJOP8XF5R5WYBRYCVZL965JLKB58YMLXOMHO8MJTI8SO3XB8QX30O4Z1TY5OTCC734ISR5OR8' where id=97; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='PCWGA3O10XR00QS2SWXP0U7JQH8G0O5U6H3GK8TONZCESJJBF97BKWFRCNE9N58SPDMWIC3QL7U4QD3MBLMVAJO062J3JLE6HBNUOV6SJL0UEZLQKG80ZG4DS51V9NU9DQICOPGAXPNUO59V680NATGNIH0E5O0KJE30NNW4ZZ0ILP5H9QS5ZJ8RHT1MG8QABXSRVS0RS4C661EW8YNO3X6ZWMLZ133IHJVUPJNUPKTCXT027620U4IYBPPZ14E0L' where id=97; -update noar ti set v1='PCWGA3O10XR00QS2SWXP0U7JQH8G0O5U6H3GK8TONZCESJJBF97BKWFRCNE9N58SPDMWIC3QL7U4QD3MBLMVAJO062J3JLE6HBNUOV6SJL0UEZLQKG80ZG4DS51V9NU9DQICOPGAXPNUO59V680NATGNIH0E5O0KJE30NNW4ZZ0ILP5H9QS5ZJ8RHT1MG8QABXSRVS0RS4C661EW8YNO3X6ZWMLZ133IHJVUPJNUPKTCXT027620U4IYBPPZ14E0L' where id=97; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='T58S91X3BNFNRYPR3IMKC9D6UJOZA7BJ19Q9EC0TZJFHJIQAI8C4RUE71REVF85BRQ7M7UAPK6L2UUW6WVTGY9W2JAN1D1WLC5OV8DL7ZXUT6QAPLSR5VX5I7JEE0ZLBUVV0ST7LBH7444Y01YJ0TZGX3LFKAGPPWMGTQ3KJ4FV9Q9L3M6Q0BXTOYTH225XK5NG9Y3MD8WBI2CN2PIUNONJXQGXXJ8GIZMDWFWNV7L9IJXVPDJAXISI14EQD0I1LL' where id=97; -update noar ti set v2='T58S91X3BNFNRYPR3IMKC9D6UJOZA7BJ19Q9EC0TZJFHJIQAI8C4RUE71REVF85BRQ7M7UAPK6L2UUW6WVTGY9W2JAN1D1WLC5OV8DL7ZXUT6QAPLSR5VX5I7JEE0ZLBUVV0ST7LBH7444Y01YJ0TZGX3LFKAGPPWMGTQ3KJ4FV9Q9L3M6Q0BXTOYTH225XK5NG9Y3MD8WBI2CN2PIUNONJXQGXXJ8GIZMDWFWNV7L9IJXVPDJAXISI14EQD0I1LL' where id=97; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='ELR5OYU9FXZFHMBF3J2HG47AII8Y02M473OWKDEZ2AK6V3JKJWXQLM4K1Z27YA0VS6ZROJNK2RVEGWWEQBNK0AAPXZUSCJUQKD4NOGVMX3T6BNJSAGTV6NJHQHPHUZ85YJXVUD9FM1K6RK855XRKYU4MVDNB6PH9NY9OGOHR5E04LA34YRE4L8P780ERJD5OAG347T8XAMB038NGQADTYLX3PDI0MN1IXYK1A1OEZC6AIED8IPYFMQ59QQGOGLP93' where id=97; -update noar ti set v3='ELR5OYU9FXZFHMBF3J2HG47AII8Y02M473OWKDEZ2AK6V3JKJWXQLM4K1Z27YA0VS6ZROJNK2RVEGWWEQBNK0AAPXZUSCJUQKD4NOGVMX3T6BNJSAGTV6NJHQHPHUZ85YJXVUD9FM1K6RK855XRKYU4MVDNB6PH9NY9OGOHR5E04LA34YRE4L8P780ERJD5OAG347T8XAMB038NGQADTYLX3PDI0MN1IXYK1A1OEZC6AIED8IPYFMQ59QQGOGLP93' where id=97; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='PPZV0EDGI7ZL7GY81JGDYNOM2C58PD0MX2XFOC99C94BIPS89HBE0QWJM69W5TX37WICUILTDTERRFN8MNR4CK2WVKMXJI2LZAZTQTIKXDKIWXQZW34FCSP64P9QCAFNBDBJCODEGPCFVP5AZC3GYEXIMWB8IU7PVBUXK481YL49T4P99H0CI6WCMZBNEDT500DG6DE1F6QM5IQGW5I4MHQVKEHGMOYE8A66AC946MRUPJ8WMJ2CGBPTQT8VYYMUF' where id=98; -update noar ti set v0='PPZV0EDGI7ZL7GY81JGDYNOM2C58PD0MX2XFOC99C94BIPS89HBE0QWJM69W5TX37WICUILTDTERRFN8MNR4CK2WVKMXJI2LZAZTQTIKXDKIWXQZW34FCSP64P9QCAFNBDBJCODEGPCFVP5AZC3GYEXIMWB8IU7PVBUXK481YL49T4P99H0CI6WCMZBNEDT500DG6DE1F6QM5IQGW5I4MHQVKEHGMOYE8A66AC946MRUPJ8WMJ2CGBPTQT8VYYMUF' where id=98; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='MHE8ZHDRQMBO2NN7RQVMUJNFF1HZJLSBMHBYWO0YAZFO3D28C3O0GYH3IMCKBH8IOCIGWS89W56Y0J96HMUKJKCYOMWDTH02RYZ54WLQGERGQ3T92H7KUGYKS8OI06GGE04RAHEJ33BTF8KGBPCBJC62UP4K4T8X1M0MX4S8GIYGUTV0YKAAJVOPZTTMMYTK9KMCHHXTLHN36J88IFHW37N3J9FRTZDTI2EYW7XDNHYXZ6AB5XCNMQP8MMPVTO4M3' where id=98; -update noar ti set v1='MHE8ZHDRQMBO2NN7RQVMUJNFF1HZJLSBMHBYWO0YAZFO3D28C3O0GYH3IMCKBH8IOCIGWS89W56Y0J96HMUKJKCYOMWDTH02RYZ54WLQGERGQ3T92H7KUGYKS8OI06GGE04RAHEJ33BTF8KGBPCBJC62UP4K4T8X1M0MX4S8GIYGUTV0YKAAJVOPZTTMMYTK9KMCHHXTLHN36J88IFHW37N3J9FRTZDTI2EYW7XDNHYXZ6AB5XCNMQP8MMPVTO4M3' where id=98; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='SWJ9LT09OCC8EVXVTOFW27OXE71E9F49XOLWOG49Z8755GNPS5QH5X6AJ3IUPOGR0R6DQY9ABXIEZB3KQLRLMT50C7YVDJ0F4A3RRJ42N19UFEM34Y6115Y4UBLY7RA794MV1DZGDXR34T8KB6QR2ZFX3ZX8UT0965P9T2FR51JGBS3VOWPR5SD9IRGI9Y62NQ9WH569HZBM8IHAAVZ7Q9EZEE9J95ZYYC4QAOHY9GMUD2QMGEJYL5QSEC6MHXD4K' where id=98; -update noar ti set v2='SWJ9LT09OCC8EVXVTOFW27OXE71E9F49XOLWOG49Z8755GNPS5QH5X6AJ3IUPOGR0R6DQY9ABXIEZB3KQLRLMT50C7YVDJ0F4A3RRJ42N19UFEM34Y6115Y4UBLY7RA794MV1DZGDXR34T8KB6QR2ZFX3ZX8UT0965P9T2FR51JGBS3VOWPR5SD9IRGI9Y62NQ9WH569HZBM8IHAAVZ7Q9EZEE9J95ZYYC4QAOHY9GMUD2QMGEJYL5QSEC6MHXD4K' where id=98; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='JCOI29KEC0NYM1G3ZGCEYW8GGJKG8BZ5XNK0WKBWU0H0RN3XJ3GT5L2Y7LF0PHRE0KNCX9EOE6KMCPZJ5CWA88C6YAEGS4U5LNQ55CFUQCF8PIIT9VV4NHMV0MHM91D01NGTTVY3Z4B1O7QQNZGB52781EYNX0UT5OQMD19IETHNFI1FH80HS03RXPJRA49448T726CY77U5T338NONRYUF2PP40D3Z05LG8V0382Y7ULY0UR5ZVZ1BB812OQUEBT' where id=98; -update noar ti set v3='JCOI29KEC0NYM1G3ZGCEYW8GGJKG8BZ5XNK0WKBWU0H0RN3XJ3GT5L2Y7LF0PHRE0KNCX9EOE6KMCPZJ5CWA88C6YAEGS4U5LNQ55CFUQCF8PIIT9VV4NHMV0MHM91D01NGTTVY3Z4B1O7QQNZGB52781EYNX0UT5OQMD19IETHNFI1FH80HS03RXPJRA49448T726CY77U5T338NONRYUF2PP40D3Z05LG8V0382Y7ULY0UR5ZVZ1BB812OQUEBT' where id=98; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -update noar tt set v0='L2I9WV9C7179KOVWGEBPR14V2R8KHW9ADCF27C1QS2LWYBOU4SIPEJK86PMMNGZQ5XDXPT4QNS3F5N8DN5L9V934ER2JYAA6PFZ61WPBVDB3WMEBAVQZ53B64V74RRA1Z6KC9EFI9ZGDJU45WJY7XIQGUUXRCI60EA6AUCYI36RON8K1E1Z4BSYK1N2GPWKPK8K25XEJWH99NK5BGSUZGMSDT15D6I2A9BNHMS4DUFFGTX9TBHKDULLZTUENPHXSB' where id=99; -update noar ti set v0='L2I9WV9C7179KOVWGEBPR14V2R8KHW9ADCF27C1QS2LWYBOU4SIPEJK86PMMNGZQ5XDXPT4QNS3F5N8DN5L9V934ER2JYAA6PFZ61WPBVDB3WMEBAVQZ53B64V74RRA1Z6KC9EFI9ZGDJU45WJY7XIQGUUXRCI60EA6AUCYI36RON8K1E1Z4BSYK1N2GPWKPK8K25XEJWH99NK5BGSUZGMSDT15D6I2A9BNHMS4DUFFGTX9TBHKDULLZTUENPHXSB' where id=99; -Warnings: -Warning 1265 Data truncated for column 'v0' at row 1 -update noar tt set v1='3YNWGOW6CV4GMJAWES6GY0RIZLCYXJQV0GP9SB089WRV1LAIIQOEHS1NDVZTD0N5DJH6SFXIAR5B86F4F14CK9ND8RZOQ55X59PK3L7Z8E36UNTNFE5C1852AZEC1P1TY8QPINDZO5QBSBKRXOG0TWE4OAJ082PIO6KJZVMHDI5ANLKLPRP7N9O6OIFJLB5EM9M04SGFOWSRJDGPZJXGUUHUE9VRY21DM7A0RC6N3YZFNJG8Q6XQIY3J8JTQRO64V' where id=99; -update noar ti set v1='3YNWGOW6CV4GMJAWES6GY0RIZLCYXJQV0GP9SB089WRV1LAIIQOEHS1NDVZTD0N5DJH6SFXIAR5B86F4F14CK9ND8RZOQ55X59PK3L7Z8E36UNTNFE5C1852AZEC1P1TY8QPINDZO5QBSBKRXOG0TWE4OAJ082PIO6KJZVMHDI5ANLKLPRP7N9O6OIFJLB5EM9M04SGFOWSRJDGPZJXGUUHUE9VRY21DM7A0RC6N3YZFNJG8Q6XQIY3J8JTQRO64V' where id=99; -Warnings: -Warning 1265 Data truncated for column 'v1' at row 1 -update noar tt set v2='2QS184OQUSY2T1FOAWQIE57GN9DGAXSDLAASV89Q3FBLHZXOLFJUFNBHVAHYXCG42R8PZL3BQ1RRAID83P7N4YMMGZDKG4UM7CKVVJN5M36MR574PDLC1ADMBHRFLO4CO39HP4LPUMMVY22M0QDSJILNIM4H7YUS32R8OE7MURE1N2GIRB93JQUHY5OZG743QWEY6Y98ADMP7P1YL3XDBSVZKQ2DVLN4NTC37HV3F1T0OZ5ATLLGTZPARNF4BII0A' where id=99; -update noar ti set v2='2QS184OQUSY2T1FOAWQIE57GN9DGAXSDLAASV89Q3FBLHZXOLFJUFNBHVAHYXCG42R8PZL3BQ1RRAID83P7N4YMMGZDKG4UM7CKVVJN5M36MR574PDLC1ADMBHRFLO4CO39HP4LPUMMVY22M0QDSJILNIM4H7YUS32R8OE7MURE1N2GIRB93JQUHY5OZG743QWEY6Y98ADMP7P1YL3XDBSVZKQ2DVLN4NTC37HV3F1T0OZ5ATLLGTZPARNF4BII0A' where id=99; -Warnings: -Warning 1265 Data truncated for column 'v2' at row 1 -update noar tt set v3='GSTHW6G2VM1R3YG9RI9KQIMUAO37JPPXHVUL6AXRRA1AV2730CYIKKOQTAL1A2S4NFSV1YDKRWE854E2I7XY12GYDJ1P41WMFYOA3IW4UPAXR1JI5B5RNJI9IXZJEXOT7DWI6XUZ1GF6HDNU480SB6HNM6ZEJBROFRWEIK0T12CCTP7VOQ10H18WGEG5K9NCSGCO6B3328U663KYNC107S58LHXF02I2WI69CBGF3OE2ISAOYH2UIDN7PWFVR5XNL' where id=99; -update noar ti set v3='GSTHW6G2VM1R3YG9RI9KQIMUAO37JPPXHVUL6AXRRA1AV2730CYIKKOQTAL1A2S4NFSV1YDKRWE854E2I7XY12GYDJ1P41WMFYOA3IW4UPAXR1JI5B5RNJI9IXZJEXOT7DWI6XUZ1GF6HDNU480SB6HNM6ZEJBROFRWEIK0T12CCTP7VOQ10H18WGEG5K9NCSGCO6B3328U663KYNC107S58LHXF02I2WI69CBGF3OE2ISAOYH2UIDN7PWFVR5XNL' where id=99; -Warnings: -Warning 1265 Data truncated for column 'v3' at row 1 -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; +This test does not produce any output on success diff --git a/mysql-test/suite/tokudb/r/fast_upsert_bin_pad.result b/mysql-test/suite/tokudb/r/fast_upsert_bin_pad.result index 44cf18a79b20f83cfac349ad638637f260638fb8..1955c1632d2ce1893b892ed09367542cc1b88071 100644 GIT binary patch delta 225 zcmbQt`iQl@IJHEfBtN?}B`H2NFEJ@6H9jq|xFo)`pg6Ut#MaQ73#6bpwYWGlKTn~! zFeg4YKPA;xqc}AuHMvBgD77FbF*#Mk!2u?vqaGX*fnhRtCL}h$RW-&-nd~r^Gd3acWVCt>MJ2CKG=u evE=0^7EP97?1C`PFiK3`%_s!pI6xTOOxFQ5U^f*2 diff --git a/mysql-test/suite/tokudb/r/fast_upsert_char.result b/mysql-test/suite/tokudb/r/fast_upsert_char.result index d8036ff66070..aa9be20e7edb 100644 --- a/mysql-test/suite/tokudb/r/fast_upsert_char.result +++ b/mysql-test/suite/tokudb/r/fast_upsert_char.result @@ -1,19 +1,19 @@ -set default_storage_engine='tokudb'; -drop table if exists tt, ti; -set tokudb_disable_slow_upsert=1; -create table tt (id int primary key, c char(32), b binary(32)); +set tokudb_enable_fast_upsert=1; +set session sql_mode=(select replace(@@sql_mode,'STRICT_TRANS_TABLES','')); +set session sql_mode=(select replace(@@sql_mode,'STRICT_ALL_TABLES','')); +create table tt (id int primary key, c char(32), b binary(32)) engine = tokudb; create table ti like tt; alter table ti engine=innodb; -insert noar into tt values (1,null,null) on duplicate key update c='hi'; -insert noar into ti values (1,null,null) on duplicate key update c='hi'; +insert into tt values (1,null,null) on duplicate key update c='hi'; +insert into ti values (1,null,null) on duplicate key update c='hi'; include/diff_tables.inc [test.tt, test.ti] -insert noar into tt values (1,null,null) on duplicate key update c='there'; -insert noar into ti values (1,null,null) on duplicate key update c='there'; +insert into tt values (1,null,null) on duplicate key update c='there'; +insert into ti values (1,null,null) on duplicate key update c='there'; include/diff_tables.inc [test.tt, test.ti] -insert noar into tt values (1,null,null) on duplicate key update b='you'; -insert noar into ti values (1,null,null) on duplicate key update b='you'; +insert into tt values (1,null,null) on duplicate key update b='you'; +insert into ti values (1,null,null) on duplicate key update b='you'; include/diff_tables.inc [test.tt, test.ti] -insert noar into tt values (1,null,null) on duplicate key update b='people'; -insert noar into ti values (1,null,null) on duplicate key update b='people'; +insert into tt values (1,null,null) on duplicate key update b='people'; +insert into ti values (1,null,null) on duplicate key update b='people'; include/diff_tables.inc [test.tt, test.ti] drop table tt, ti; diff --git a/mysql-test/suite/tokudb/r/fast_upsert_deadlock.result b/mysql-test/suite/tokudb/r/fast_upsert_deadlock.result index 192d32d9a95e..d7ec18951e1f 100644 --- a/mysql-test/suite/tokudb/r/fast_upsert_deadlock.result +++ b/mysql-test/suite/tokudb/r/fast_upsert_deadlock.result @@ -1,12 +1,17 @@ -drop table if exists t; -set default_storage_engine='tokudb'; -create table t (id bigint primary key, b bigint not null default 0); +set tokudb_enable_fast_upsert=1; +set session sql_mode=(select replace(@@sql_mode,'STRICT_TRANS_TABLES','')); +set session sql_mode=(select replace(@@sql_mode,'STRICT_ALL_TABLES','')); +create table t (id bigint primary key, b bigint not null default 0) +engine = tokudb; +SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'STRICT_TRANS_TABLES','')); +SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'STRICT_ALL_TABLES','')); +set tokudb_enable_fast_upsert=1; begin; -insert noar into t (id) values (1) on duplicate key update b=b+1; +insert into t (id) values (1) on duplicate key update b=b+1; begin; -insert noar into t (id) values (2) on duplicate key update b=b-1; -insert noar into t (id) values (2) on duplicate key update b=b+1; -insert noar into t (id) values (1) on duplicate key update b=b-1; +insert into t (id) values (2) on duplicate key update b=b-1; +insert into t (id) values (2) on duplicate key update b=b+1; +insert into t (id) values (1) on duplicate key update b=b-1; Got one of the listed errors rollback; commit; diff --git a/mysql-test/suite/tokudb/r/fast_upsert_int.result b/mysql-test/suite/tokudb/r/fast_upsert_int.result index 0d500c480a8f..4a963777fc08 100644 --- a/mysql-test/suite/tokudb/r/fast_upsert_int.result +++ b/mysql-test/suite/tokudb/r/fast_upsert_int.result @@ -1,427 +1 @@ -set default_storage_engine='tokudb'; -drop table if exists tt, ti; -set tokudb_disable_slow_update=1; -create table tt ( -id tinyint null primary key, -x tinyint null, -y tinyint null, -z tinyint null, -a char(32), aa varchar(32) -); -insert noar into tt (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into tt (id) values (1) on duplicate key update y=0,z=42; -insert noar into tt (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into tt (id) values (1) on duplicate key update y=y-1; -insert noar into tt (id) values (1) on duplicate key update z=z-100; -create table ti like tt; -alter table ti engine=innodb; -insert noar into ti (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into ti (id) values (1) on duplicate key update y=0,z=42; -insert noar into ti (id) values (1) on duplicate key update y=y+1,z=z+100; -Warnings: -Warning 1264 Out of range value for column 'z' at row 1 -insert noar into ti (id) values (1) on duplicate key update y=y-1; -insert noar into ti (id) values (1) on duplicate key update z=z-100; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt ( -id tinyint not null primary key, -x tinyint not null default 0, -y tinyint not null default 0, -z tinyint not null default 0, -a char(32), aa varchar(32) -); -insert noar into tt (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into tt (id) values (1) on duplicate key update y=0,z=42; -insert noar into tt (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into tt (id) values (1) on duplicate key update y=y-1; -insert noar into tt (id) values (1) on duplicate key update z=z-100; -create table ti like tt; -alter table ti engine=innodb; -insert noar into ti (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into ti (id) values (1) on duplicate key update y=0,z=42; -insert noar into ti (id) values (1) on duplicate key update y=y+1,z=z+100; -Warnings: -Warning 1264 Out of range value for column 'z' at row 1 -insert noar into ti (id) values (1) on duplicate key update y=y-1; -insert noar into ti (id) values (1) on duplicate key update z=z-100; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt ( -id tinyint unsigned null primary key, -x tinyint unsigned null, -y tinyint unsigned null, -z tinyint unsigned null, -a char(32), aa varchar(32) -); -insert noar into tt (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into tt (id) values (1) on duplicate key update y=0,z=42; -insert noar into tt (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into tt (id) values (1) on duplicate key update y=y-1; -insert noar into tt (id) values (1) on duplicate key update z=z-100; -create table ti like tt; -alter table ti engine=innodb; -insert noar into ti (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into ti (id) values (1) on duplicate key update y=0,z=42; -insert noar into ti (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into ti (id) values (1) on duplicate key update y=y-1; -insert noar into ti (id) values (1) on duplicate key update z=z-100; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt ( -id tinyint unsigned not null primary key, -x tinyint unsigned not null default 0, -y tinyint unsigned not null default 0, -z tinyint unsigned not null default 0, -a char(32), aa varchar(32) -); -insert noar into tt (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into tt (id) values (1) on duplicate key update y=0,z=42; -insert noar into tt (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into tt (id) values (1) on duplicate key update y=y-1; -insert noar into tt (id) values (1) on duplicate key update z=z-100; -create table ti like tt; -alter table ti engine=innodb; -insert noar into ti (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into ti (id) values (1) on duplicate key update y=0,z=42; -insert noar into ti (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into ti (id) values (1) on duplicate key update y=y-1; -insert noar into ti (id) values (1) on duplicate key update z=z-100; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt ( -id smallint null primary key, -x smallint null, -y smallint null, -z smallint null, -a char(32), aa varchar(32) -); -insert noar into tt (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into tt (id) values (1) on duplicate key update y=0,z=42; -insert noar into tt (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into tt (id) values (1) on duplicate key update y=y-1; -insert noar into tt (id) values (1) on duplicate key update z=z-100; -create table ti like tt; -alter table ti engine=innodb; -insert noar into ti (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into ti (id) values (1) on duplicate key update y=0,z=42; -insert noar into ti (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into ti (id) values (1) on duplicate key update y=y-1; -insert noar into ti (id) values (1) on duplicate key update z=z-100; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt ( -id smallint not null primary key, -x smallint not null default 0, -y smallint not null default 0, -z smallint not null default 0, -a char(32), aa varchar(32) -); -insert noar into tt (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into tt (id) values (1) on duplicate key update y=0,z=42; -insert noar into tt (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into tt (id) values (1) on duplicate key update y=y-1; -insert noar into tt (id) values (1) on duplicate key update z=z-100; -create table ti like tt; -alter table ti engine=innodb; -insert noar into ti (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into ti (id) values (1) on duplicate key update y=0,z=42; -insert noar into ti (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into ti (id) values (1) on duplicate key update y=y-1; -insert noar into ti (id) values (1) on duplicate key update z=z-100; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt ( -id smallint unsigned null primary key, -x smallint unsigned null, -y smallint unsigned null, -z smallint unsigned null, -a char(32), aa varchar(32) -); -insert noar into tt (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into tt (id) values (1) on duplicate key update y=0,z=42; -insert noar into tt (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into tt (id) values (1) on duplicate key update y=y-1; -insert noar into tt (id) values (1) on duplicate key update z=z-100; -create table ti like tt; -alter table ti engine=innodb; -insert noar into ti (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into ti (id) values (1) on duplicate key update y=0,z=42; -insert noar into ti (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into ti (id) values (1) on duplicate key update y=y-1; -insert noar into ti (id) values (1) on duplicate key update z=z-100; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt ( -id smallint unsigned not null primary key, -x smallint unsigned not null default 0, -y smallint unsigned not null default 0, -z smallint unsigned not null default 0, -a char(32), aa varchar(32) -); -insert noar into tt (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into tt (id) values (1) on duplicate key update y=0,z=42; -insert noar into tt (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into tt (id) values (1) on duplicate key update y=y-1; -insert noar into tt (id) values (1) on duplicate key update z=z-100; -create table ti like tt; -alter table ti engine=innodb; -insert noar into ti (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into ti (id) values (1) on duplicate key update y=0,z=42; -insert noar into ti (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into ti (id) values (1) on duplicate key update y=y-1; -insert noar into ti (id) values (1) on duplicate key update z=z-100; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt ( -id mediumint null primary key, -x mediumint null, -y mediumint null, -z mediumint null, -a char(32), aa varchar(32) -); -insert noar into tt (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into tt (id) values (1) on duplicate key update y=0,z=42; -insert noar into tt (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into tt (id) values (1) on duplicate key update y=y-1; -insert noar into tt (id) values (1) on duplicate key update z=z-100; -create table ti like tt; -alter table ti engine=innodb; -insert noar into ti (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into ti (id) values (1) on duplicate key update y=0,z=42; -insert noar into ti (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into ti (id) values (1) on duplicate key update y=y-1; -insert noar into ti (id) values (1) on duplicate key update z=z-100; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt ( -id mediumint not null primary key, -x mediumint not null default 0, -y mediumint not null default 0, -z mediumint not null default 0, -a char(32), aa varchar(32) -); -insert noar into tt (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into tt (id) values (1) on duplicate key update y=0,z=42; -insert noar into tt (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into tt (id) values (1) on duplicate key update y=y-1; -insert noar into tt (id) values (1) on duplicate key update z=z-100; -create table ti like tt; -alter table ti engine=innodb; -insert noar into ti (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into ti (id) values (1) on duplicate key update y=0,z=42; -insert noar into ti (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into ti (id) values (1) on duplicate key update y=y-1; -insert noar into ti (id) values (1) on duplicate key update z=z-100; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt ( -id mediumint unsigned null primary key, -x mediumint unsigned null, -y mediumint unsigned null, -z mediumint unsigned null, -a char(32), aa varchar(32) -); -insert noar into tt (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into tt (id) values (1) on duplicate key update y=0,z=42; -insert noar into tt (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into tt (id) values (1) on duplicate key update y=y-1; -insert noar into tt (id) values (1) on duplicate key update z=z-100; -create table ti like tt; -alter table ti engine=innodb; -insert noar into ti (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into ti (id) values (1) on duplicate key update y=0,z=42; -insert noar into ti (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into ti (id) values (1) on duplicate key update y=y-1; -insert noar into ti (id) values (1) on duplicate key update z=z-100; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt ( -id mediumint unsigned not null primary key, -x mediumint unsigned not null default 0, -y mediumint unsigned not null default 0, -z mediumint unsigned not null default 0, -a char(32), aa varchar(32) -); -insert noar into tt (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into tt (id) values (1) on duplicate key update y=0,z=42; -insert noar into tt (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into tt (id) values (1) on duplicate key update y=y-1; -insert noar into tt (id) values (1) on duplicate key update z=z-100; -create table ti like tt; -alter table ti engine=innodb; -insert noar into ti (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into ti (id) values (1) on duplicate key update y=0,z=42; -insert noar into ti (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into ti (id) values (1) on duplicate key update y=y-1; -insert noar into ti (id) values (1) on duplicate key update z=z-100; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt ( -id int null primary key, -x int null, -y int null, -z int null, -a char(32), aa varchar(32) -); -insert noar into tt (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into tt (id) values (1) on duplicate key update y=0,z=42; -insert noar into tt (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into tt (id) values (1) on duplicate key update y=y-1; -insert noar into tt (id) values (1) on duplicate key update z=z-100; -create table ti like tt; -alter table ti engine=innodb; -insert noar into ti (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into ti (id) values (1) on duplicate key update y=0,z=42; -insert noar into ti (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into ti (id) values (1) on duplicate key update y=y-1; -insert noar into ti (id) values (1) on duplicate key update z=z-100; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt ( -id int not null primary key, -x int not null default 0, -y int not null default 0, -z int not null default 0, -a char(32), aa varchar(32) -); -insert noar into tt (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into tt (id) values (1) on duplicate key update y=0,z=42; -insert noar into tt (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into tt (id) values (1) on duplicate key update y=y-1; -insert noar into tt (id) values (1) on duplicate key update z=z-100; -create table ti like tt; -alter table ti engine=innodb; -insert noar into ti (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into ti (id) values (1) on duplicate key update y=0,z=42; -insert noar into ti (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into ti (id) values (1) on duplicate key update y=y-1; -insert noar into ti (id) values (1) on duplicate key update z=z-100; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt ( -id int unsigned null primary key, -x int unsigned null, -y int unsigned null, -z int unsigned null, -a char(32), aa varchar(32) -); -insert noar into tt (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into tt (id) values (1) on duplicate key update y=0,z=42; -insert noar into tt (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into tt (id) values (1) on duplicate key update y=y-1; -insert noar into tt (id) values (1) on duplicate key update z=z-100; -create table ti like tt; -alter table ti engine=innodb; -insert noar into ti (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into ti (id) values (1) on duplicate key update y=0,z=42; -insert noar into ti (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into ti (id) values (1) on duplicate key update y=y-1; -insert noar into ti (id) values (1) on duplicate key update z=z-100; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt ( -id int unsigned not null primary key, -x int unsigned not null default 0, -y int unsigned not null default 0, -z int unsigned not null default 0, -a char(32), aa varchar(32) -); -insert noar into tt (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into tt (id) values (1) on duplicate key update y=0,z=42; -insert noar into tt (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into tt (id) values (1) on duplicate key update y=y-1; -insert noar into tt (id) values (1) on duplicate key update z=z-100; -create table ti like tt; -alter table ti engine=innodb; -insert noar into ti (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into ti (id) values (1) on duplicate key update y=0,z=42; -insert noar into ti (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into ti (id) values (1) on duplicate key update y=y-1; -insert noar into ti (id) values (1) on duplicate key update z=z-100; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt ( -id bigint null primary key, -x bigint null, -y bigint null, -z bigint null, -a char(32), aa varchar(32) -); -insert noar into tt (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into tt (id) values (1) on duplicate key update y=0,z=42; -insert noar into tt (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into tt (id) values (1) on duplicate key update y=y-1; -insert noar into tt (id) values (1) on duplicate key update z=z-100; -create table ti like tt; -alter table ti engine=innodb; -insert noar into ti (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into ti (id) values (1) on duplicate key update y=0,z=42; -insert noar into ti (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into ti (id) values (1) on duplicate key update y=y-1; -insert noar into ti (id) values (1) on duplicate key update z=z-100; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt ( -id bigint not null primary key, -x bigint not null default 0, -y bigint not null default 0, -z bigint not null default 0, -a char(32), aa varchar(32) -); -insert noar into tt (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into tt (id) values (1) on duplicate key update y=0,z=42; -insert noar into tt (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into tt (id) values (1) on duplicate key update y=y-1; -insert noar into tt (id) values (1) on duplicate key update z=z-100; -create table ti like tt; -alter table ti engine=innodb; -insert noar into ti (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into ti (id) values (1) on duplicate key update y=0,z=42; -insert noar into ti (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into ti (id) values (1) on duplicate key update y=y-1; -insert noar into ti (id) values (1) on duplicate key update z=z-100; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt ( -id bigint unsigned null primary key, -x bigint unsigned null, -y bigint unsigned null, -z bigint unsigned null, -a char(32), aa varchar(32) -); -insert noar into tt (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into tt (id) values (1) on duplicate key update y=0,z=42; -insert noar into tt (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into tt (id) values (1) on duplicate key update y=y-1; -insert noar into tt (id) values (1) on duplicate key update z=z-100; -create table ti like tt; -alter table ti engine=innodb; -insert noar into ti (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into ti (id) values (1) on duplicate key update y=0,z=42; -insert noar into ti (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into ti (id) values (1) on duplicate key update y=y-1; -insert noar into ti (id) values (1) on duplicate key update z=z-100; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; -create table tt ( -id bigint unsigned not null primary key, -x bigint unsigned not null default 0, -y bigint unsigned not null default 0, -z bigint unsigned not null default 0, -a char(32), aa varchar(32) -); -insert noar into tt (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into tt (id) values (1) on duplicate key update y=0,z=42; -insert noar into tt (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into tt (id) values (1) on duplicate key update y=y-1; -insert noar into tt (id) values (1) on duplicate key update z=z-100; -create table ti like tt; -alter table ti engine=innodb; -insert noar into ti (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into ti (id) values (1) on duplicate key update y=0,z=42; -insert noar into ti (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into ti (id) values (1) on duplicate key update y=y-1; -insert noar into ti (id) values (1) on duplicate key update z=z-100; -include/diff_tables.inc [test.tt, test.ti] -drop table tt, ti; +This test does not produce any output on success diff --git a/mysql-test/suite/tokudb/r/fast_upsert_key.result b/mysql-test/suite/tokudb/r/fast_upsert_key.result index 95e31062c882..d05f40619eda 100644 --- a/mysql-test/suite/tokudb/r/fast_upsert_key.result +++ b/mysql-test/suite/tokudb/r/fast_upsert_key.result @@ -1,23 +1,40 @@ -set default_storage_engine='tokudb'; -drop table if exists t; -set tokudb_disable_slow_upsert=1; -create table t (a int, b char(32), c varchar(32), d blob); -insert noar into t values (1,null,null,null) on duplicate key update a=42; +set tokudb_enable_fast_upsert=1; +set session sql_mode=(select replace(@@sql_mode,'STRICT_TRANS_TABLES','')); +set session sql_mode=(select replace(@@sql_mode,'STRICT_ALL_TABLES','')); +create table t (a int, b char(32), c varchar(32), d blob) engine = tokudb; +insert into t values (1,null,null,null) on duplicate key update a=42; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version drop table t; -create table t (id int primary key, a int, b char(32), c varchar(32), d blob, clustering key(a)); -insert noar into t values (1,null,null,null,null) on duplicate key update a=42; +create table t (id int primary key, +a int, b char(32), +c varchar(32), +d blob, +clustering key(a)) engine = tokudb; +insert into t values (1,null,null,null,null) on duplicate key update a=42; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version drop table t; -create table t (id int primary key, a int, b char(32), c varchar(32), d blob, key(c)); -insert noar into t values (1,null,null,null,null) on duplicate key update a=42; +create table t (id int primary key, +a int, +b char(32), +c varchar(32), +d blob, +key(c)) engine = tokudb ; +insert into t values (1,null,null,null,null) on duplicate key update a=42; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version drop table t; -create table t (id int, a int, b char(32), c varchar(32), d blob, primary key(id, a)); -insert noar into t values (1,2,null,null,null) on duplicate key update a=42; +create table t (id int, +a int, b char(32), +c varchar(32), +d blob, +primary key(id, a)) engine = tokudb; +insert into t values (1,2,null,null,null) on duplicate key update a=42; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version drop table t; -create table t (id int, a int, b char(32), c varchar(32), d blob, primary key(a, id)); -insert noar into t values (1,2,null,null,null) on duplicate key update a=42; +create table t (id int, +a int, b char(32), +c varchar(32), +d blob, +primary key(a, id)) engine = tokudb; +insert into t values (1,2,null,null,null) on duplicate key update a=42; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version drop table t; diff --git a/mysql-test/suite/tokudb/r/fast_upsert_sqlmode.result b/mysql-test/suite/tokudb/r/fast_upsert_sqlmode.result index 9b1fd60d691c..30a6448b0a26 100644 --- a/mysql-test/suite/tokudb/r/fast_upsert_sqlmode.result +++ b/mysql-test/suite/tokudb/r/fast_upsert_sqlmode.result @@ -1,17 +1,16 @@ -set default_storage_engine='tokudb'; -drop table if exists t; -set tokudb_disable_slow_upsert=1; -create table t (id int primary key, x int not null); -insert noar into t values (1,0); -insert noar into t values (1,0) on duplicate key update x=42; -insert noar into t values (1,0) on duplicate key update x=x+1; -insert noar into t values (1,0) on duplicate key update x=x-1; +set tokudb_enable_fast_upsert=1; +set session sql_mode=(select replace(@@sql_mode,'STRICT_TRANS_TABLES','')); +set session sql_mode=(select replace(@@sql_mode,'STRICT_ALL_TABLES','')); +create table t (id int primary key, x int not null) engine = tokudb; +insert into t values (1,0); +insert into t values (1,0) on duplicate key update x=42; +insert into t values (1,0) on duplicate key update x=x+1; +insert into t values (1,0) on duplicate key update x=x-1; set session sql_mode="NO_ENGINE_SUBSTITUTION,traditional"; -insert noar into t values (1,0) on duplicate key update x=42; +insert into t values (1,0) on duplicate key update x=42; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -insert noar into t values (1,0) on duplicate key update x=x+1; +insert into t values (1,0) on duplicate key update x=x+1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -insert noar into t values (1,0) on duplicate key update x=x-1; +insert into t values (1,0) on duplicate key update x=x-1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version -set session sql_mode="NO_ENGINE_SUBSTITUTION"; drop table t; diff --git a/mysql-test/suite/tokudb/r/fast_upsert_values.result b/mysql-test/suite/tokudb/r/fast_upsert_values.result index d2214fb1cd92..6930584465cc 100644 --- a/mysql-test/suite/tokudb/r/fast_upsert_values.result +++ b/mysql-test/suite/tokudb/r/fast_upsert_values.result @@ -1,22 +1,22 @@ -set default_storage_engine='tokudb'; -drop table if exists t; -set tokudb_disable_slow_upsert=1; -create table t (id int primary key, x int not null); -insert noar into t values (1,1); -insert noar into t values (1,1) on duplicate key update x=x+1; +set session sql_mode=(select replace(@@sql_mode,'STRICT_TRANS_TABLES','')); +set session sql_mode=(select replace(@@sql_mode,'STRICT_ALL_TABLES','')); +set tokudb_enable_fast_upsert=1; +create table t (id int primary key, x int not null) engine = tokudb; +insert into t values (1,1); +insert into t values (1,1) on duplicate key update x=x+1; select * from t; id x 1 2 -insert noar into t values (1,10) on duplicate key update x=values(x)+1; +insert into t values (1,10) on duplicate key update x=values(x)+1; ERROR 42000: Table 't' uses an extension that doesn't exist in this XYZ version select * from t; id x 1 2 -insert noar into t values (1,10) on duplicate key update x=x+values(x); +insert into t values (1,10) on duplicate key update x=x+values(x); select * from t; id x 1 12 -insert noar into t values (1,100) on duplicate key update x=x+values(x); +insert into t values (1,100) on duplicate key update x=x+values(x); select * from t; id x 1 112 diff --git a/mysql-test/suite/tokudb/t/disabled.def b/mysql-test/suite/tokudb/t/disabled.def index f7413a0edc5d..751794ac690e 100644 --- a/mysql-test/suite/tokudb/t/disabled.def +++ b/mysql-test/suite/tokudb/t/disabled.def @@ -2,27 +2,3 @@ mvcc-19: tokutek mvcc-20: tokutek mvcc-27: tokutek storage_engine_default: tokudb is not the default storage engine -fast_update_binlog_mixed : https://tokutek.atlassian.net/browse/DB-871 -fast_update_binlog_row : https://tokutek.atlassian.net/browse/DB-871 -fast_update_binlog_statement : https://tokutek.atlassian.net/browse/DB-871 -fast_update_blobs_fixed_varchar : https://tokutek.atlassian.net/browse/DB-871 -fast_update_blobs : https://tokutek.atlassian.net/browse/DB-871 -fast_update_blobs_with_varchar : https://tokutek.atlassian.net/browse/DB-871 -fast_update_char : https://tokutek.atlassian.net/browse/DB-871 -fast_update_deadlock : https://tokutek.atlassian.net/browse/DB-871 -fast_update_decr_floor : https://tokutek.atlassian.net/browse/DB-871 -fast_update_disable_slow_update : https://tokutek.atlassian.net/browse/DB-871 -fast_update_error : https://tokutek.atlassian.net/browse/DB-871 -fast_update_int_bounds : https://tokutek.atlassian.net/browse/DB-871 -fast_update_int : https://tokutek.atlassian.net/browse/DB-871 -fast_update_key : https://tokutek.atlassian.net/browse/DB-871 -fast_update_sqlmode : https://tokutek.atlassian.net/browse/DB-871 -fast_update_uint_bounds : https://tokutek.atlassian.net/browse/DB-871 -fast_update_varchar : https://tokutek.atlassian.net/browse/DB-871 -fast_upsert_bin_pad : https://tokutek.atlassian.net/browse/DB-871 -fast_upsert_char : https://tokutek.atlassian.net/browse/DB-871 -fast_upsert_deadlock : https://tokutek.atlassian.net/browse/DB-871 -fast_upsert_int : https://tokutek.atlassian.net/browse/DB-871 -fast_upsert_key : https://tokutek.atlassian.net/browse/DB-871 -fast_upsert_sqlmode : https://tokutek.atlassian.net/browse/DB-871 -fast_upsert_values : https://tokutek.atlassian.net/browse/DB-871 diff --git a/mysql-test/suite/tokudb/t/fast_update_binlog_mixed-master.opt b/mysql-test/suite/tokudb/t/fast_update_binlog_mixed-master.opt new file mode 100644 index 000000000000..215b68b35096 --- /dev/null +++ b/mysql-test/suite/tokudb/t/fast_update_binlog_mixed-master.opt @@ -0,0 +1,2 @@ +--binlog-format=mixed + diff --git a/mysql-test/suite/tokudb/t/fast_update_binlog_mixed.test b/mysql-test/suite/tokudb/t/fast_update_binlog_mixed.test index 28a11cf302c2..a8bcab826ac6 100644 --- a/mysql-test/suite/tokudb/t/fast_update_binlog_mixed.test +++ b/mysql-test/suite/tokudb/t/fast_update_binlog_mixed.test @@ -2,18 +2,15 @@ source include/master-slave.inc; source include/have_binlog_format_mixed.inc; source include/have_tokudb.inc; -set default_storage_engine='tokudb'; -create table tt (id int primary key, x int); - -set session tokudb_disable_slow_upsert=1; +create table tt (id int primary key, x int) engine = tokudb; connection master; -show variables like 'binlog_format'; -show variables like 'server_id'; +source ../include/setup_fast_update_upsert.inc; +set session tokudb_enable_fast_update=1; connection slave; -show variables like 'binlog_format'; -show variables like 'server_id'; +source ../include/setup_fast_update_upsert.inc; +set session tokudb_enable_fast_update=1; connection master; @@ -36,7 +33,7 @@ while ($i < $n) { # update a bunch of rows let $i=0; while ($i < $n) { - eval update noar tt set x=x+1 where id=$i; + eval update tt set x=x+1 where id=$i; inc $i; } select * from tt where x != 2; diff --git a/mysql-test/suite/tokudb/t/fast_update_binlog_row-master.opt b/mysql-test/suite/tokudb/t/fast_update_binlog_row-master.opt new file mode 100644 index 000000000000..40fd126d18a3 --- /dev/null +++ b/mysql-test/suite/tokudb/t/fast_update_binlog_row-master.opt @@ -0,0 +1,2 @@ +--binlog-format=row + diff --git a/mysql-test/suite/tokudb/t/fast_update_binlog_row.test b/mysql-test/suite/tokudb/t/fast_update_binlog_row.test index 6a8342eb4d92..f416a14c2d4c 100644 --- a/mysql-test/suite/tokudb/t/fast_update_binlog_row.test +++ b/mysql-test/suite/tokudb/t/fast_update_binlog_row.test @@ -1,29 +1,28 @@ source include/have_binlog_format_row.inc; source include/have_tokudb.inc; -set default_storage_engine='tokudb'; -create table tt (id int primary key, x int); +create table tt (id int primary key, x int) engine = tokudb; -set session tokudb_disable_slow_upsert=1; +source ../include/setup_fast_update_upsert.inc; +set session tokudb_enable_fast_update=1; +set session tokudb_enable_fast_upsert=1; -insert noar into tt values (1,0); +insert into tt values (1,0); replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; error ER_UNSUPPORTED_EXTENSION; -insert noar into tt values (1,0) on duplicate key update x=x+1; +insert into tt values (1,0) on duplicate key update x=x+1; replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; error ER_UNSUPPORTED_EXTENSION; -insert noar into tt values (2,0) on duplicate key update x=x+1; - -set session tokudb_disable_slow_update=1; +insert into tt values (2,0) on duplicate key update x=x+1; replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; error ER_UNSUPPORTED_EXTENSION; -update noar tt set x=x+1 where id=1; +update tt set x=x+1 where id=1; replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; error ER_UNSUPPORTED_EXTENSION; -update noar tt set x=x+1 where id=2; +update tt set x=x+1 where id=2; drop table tt; diff --git a/mysql-test/suite/tokudb/t/fast_update_binlog_statement-master.opt b/mysql-test/suite/tokudb/t/fast_update_binlog_statement-master.opt new file mode 100644 index 000000000000..0dac5e9fb9cf --- /dev/null +++ b/mysql-test/suite/tokudb/t/fast_update_binlog_statement-master.opt @@ -0,0 +1,2 @@ +--binlog-format=statement + diff --git a/mysql-test/suite/tokudb/t/fast_update_binlog_statement.test b/mysql-test/suite/tokudb/t/fast_update_binlog_statement.test index bab2aadb340d..6f6775e3d692 100644 --- a/mysql-test/suite/tokudb/t/fast_update_binlog_statement.test +++ b/mysql-test/suite/tokudb/t/fast_update_binlog_statement.test @@ -2,18 +2,15 @@ source include/master-slave.inc; source include/have_binlog_format_statement.inc; source include/have_tokudb.inc; -set default_storage_engine='tokudb'; -create table tt (id int primary key, x int); - -set session tokudb_disable_slow_upsert=1; +create table tt (id int primary key, x int) engine = tokudb; connection master; -show variables like 'binlog_format'; -show variables like 'server_id'; +source ../include/setup_fast_update_upsert.inc; +set session tokudb_enable_fast_update=1; connection slave; -show variables like 'binlog_format'; -show variables like 'server_id'; +source ../include/setup_fast_update_upsert.inc; +set session tokudb_enable_fast_update=1; connection master; @@ -36,7 +33,7 @@ while ($i < $n) { # update a bunch of rows let $i=0; while ($i < $n) { - eval update noar tt set x=x+1 where id=$i; + eval update tt set x=x+1 where id=$i; inc $i; } select * from tt where x != 2; diff --git a/mysql-test/suite/tokudb/t/fast_update_blobs.py b/mysql-test/suite/tokudb/t/fast_update_blobs.py deleted file mode 100644 index 06b89626120d..000000000000 --- a/mysql-test/suite/tokudb/t/fast_update_blobs.py +++ /dev/null @@ -1,57 +0,0 @@ -#!/usr/bin/env python - -import sys -import random -import string - -def main(): - print "# generated by tokudb_fast_update_blobs.py" - print "source include/have_tokudb.inc;" - print "source include/have_innodb.inc;" - print "set default_storage_engine='tokudb';" - print "disable_warnings;" - print "drop table if exists t;" - print "enable_warnings;" - - nrows = 10 - - blob_types = [ 'tinyblob', 'blob', 'mediumblob', 'longblob', 'text' ] - for a in blob_types: - for b in blob_types: - for c in blob_types: - for n in [ 'null', 'not null' ]: - test_blobs([ a, b, c ] , n, nrows) - return 0 - -def test_blobs(cols, n, nrows): - print "create table tt (id bigint unsigned primary key," - # print " f0 int %s," % (n) - for i in range(len(cols)): - if i < len(cols)-1: - print " b%d %s %s," % (i, cols[i], n) - else: - print " b%d %s %s" % (i, cols[i], n) - print ") engine=tokudb;" - - for id in range(1,nrows): - if n == 'null': - print "insert into tt (id) values (%d);" % (id) - else: - print "insert into tt values (%d,'','','');" % (id) - - print "create table ti like tt;" - print "alter table ti engine=innodb;" - print "insert into ti select * from tt;" - - for id in range(1,nrows): - for i in range(3): - long_str = ''.join(random.choice(string.ascii_uppercase + string.digits) for x in range(random.randint(1,32))) - print "update noar tt set b%d='%s' where id=%d;" % (i, long_str, id) - print "update noar ti set b%d='%s' where id=%d;" % (i, long_str, id) - - print "let $diff_tables = test.tt, test.ti;" - print "source include/diff_tables.inc;" - - print "drop table tt, ti;" - -sys.exit(main()) diff --git a/mysql-test/suite/tokudb/t/fast_update_blobs.test b/mysql-test/suite/tokudb/t/fast_update_blobs.test index 1c91116bc992..05d6937572bc 100644 --- a/mysql-test/suite/tokudb/t/fast_update_blobs.test +++ b/mysql-test/suite/tokudb/t/fast_update_blobs.test @@ -1,18507 +1,68 @@ -# generated by tokudb_fast_update_blobs.py -source include/have_tokudb.inc; -source include/have_innodb.inc; -set default_storage_engine='tokudb'; -disable_warnings; -drop table if exists t; -enable_warnings; -create table tt (id bigint unsigned primary key, - b0 tinyblob null, - b1 tinyblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='O3XN3EYXMGZTZN1K5U5MZVJSTCI' where id=1; -update noar ti set b0='O3XN3EYXMGZTZN1K5U5MZVJSTCI' where id=1; -update noar tt set b1='NUJSL2DPUO3Y2VJJMOXGIKD5' where id=1; -update noar ti set b1='NUJSL2DPUO3Y2VJJMOXGIKD5' where id=1; -update noar tt set b2='GYH1A64A160VD620KTYFI0LMWTHTQ' where id=1; -update noar ti set b2='GYH1A64A160VD620KTYFI0LMWTHTQ' where id=1; -update noar tt set b0='R6NPFB2F' where id=2; -update noar ti set b0='R6NPFB2F' where id=2; -update noar tt set b1='I2FJYHVA88B5QIRGWO' where id=2; -update noar ti set b1='I2FJYHVA88B5QIRGWO' where id=2; -update noar tt set b2='VXNCR7V92TOSSD4S9CP1LU2QS7OYWI' where id=2; -update noar ti set b2='VXNCR7V92TOSSD4S9CP1LU2QS7OYWI' where id=2; -update noar tt set b0='0UQ09GUSN08XS' where id=3; -update noar ti set b0='0UQ09GUSN08XS' where id=3; -update noar tt set b1='5LWNM0Y07MT1PW2' where id=3; -update noar ti set b1='5LWNM0Y07MT1PW2' where id=3; -update noar tt set b2='HN4' where id=3; -update noar ti set b2='HN4' where id=3; -update noar tt set b0='C1QZDQRLS0PTQBP' where id=4; -update noar ti set b0='C1QZDQRLS0PTQBP' where id=4; -update noar tt set b1='143H1LL68O8ZQJI7K99JQVLCZ9' where id=4; -update noar ti set b1='143H1LL68O8ZQJI7K99JQVLCZ9' where id=4; -update noar tt set b2='4YOVMJ' where id=4; -update noar ti set b2='4YOVMJ' where id=4; -update noar tt set b0='T9SL9H4JFRX5BXQBG' where id=5; -update noar ti set b0='T9SL9H4JFRX5BXQBG' where id=5; -update noar tt set b1='IERUZ3U5PS27T7' where id=5; -update noar ti set b1='IERUZ3U5PS27T7' where id=5; -update noar tt set b2='3FJ10AUIZ70MM9N11G4GZ2SD' where id=5; -update noar ti set b2='3FJ10AUIZ70MM9N11G4GZ2SD' where id=5; -update noar tt set b0='2NW6C3TI50EG0EP8UXI4LDLQ8Q6AG02' where id=6; -update noar ti set b0='2NW6C3TI50EG0EP8UXI4LDLQ8Q6AG02' where id=6; -update noar tt set b1='W52A7GZSPSTEMZU80PEM' where id=6; -update noar ti set b1='W52A7GZSPSTEMZU80PEM' where id=6; -update noar tt set b2='F24TFX952ZCB8LKYJK3V5RPLC216' where id=6; -update noar ti set b2='F24TFX952ZCB8LKYJK3V5RPLC216' where id=6; -update noar tt set b0='CLKM' where id=7; -update noar ti set b0='CLKM' where id=7; -update noar tt set b1='V922ZOJPOWQ8DYEU1WPLNUI2V' where id=7; -update noar ti set b1='V922ZOJPOWQ8DYEU1WPLNUI2V' where id=7; -update noar tt set b2='KJHGLHTC' where id=7; -update noar ti set b2='KJHGLHTC' where id=7; -update noar tt set b0='OGYBFJIZYQ' where id=8; -update noar ti set b0='OGYBFJIZYQ' where id=8; -update noar tt set b1='37VFBYBMAZ4I139RNG8URUOU' where id=8; -update noar ti set b1='37VFBYBMAZ4I139RNG8URUOU' where id=8; -update noar tt set b2='2IA' where id=8; -update noar ti set b2='2IA' where id=8; -update noar tt set b0='Q' where id=9; -update noar ti set b0='Q' where id=9; -update noar tt set b1='E' where id=9; -update noar ti set b1='E' where id=9; -update noar tt set b2='VICTYSWSPPYUHIPU0HCJE' where id=9; -update noar ti set b2='VICTYSWSPPYUHIPU0HCJE' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 tinyblob not null, - b1 tinyblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='78I7U' where id=1; -update noar ti set b0='78I7U' where id=1; -update noar tt set b1='2E' where id=1; -update noar ti set b1='2E' where id=1; -update noar tt set b2='Q2YKT0GTIOJXMLP' where id=1; -update noar ti set b2='Q2YKT0GTIOJXMLP' where id=1; -update noar tt set b0='E92J7SF7I48BP708TPG52I5' where id=2; -update noar ti set b0='E92J7SF7I48BP708TPG52I5' where id=2; -update noar tt set b1='R1Z9BSQKSB2SNUEYBP' where id=2; -update noar ti set b1='R1Z9BSQKSB2SNUEYBP' where id=2; -update noar tt set b2='4CE0T3D4V5LKBQKPR' where id=2; -update noar ti set b2='4CE0T3D4V5LKBQKPR' where id=2; -update noar tt set b0='T48NWMCR57OKPX5TYOV4U0' where id=3; -update noar ti set b0='T48NWMCR57OKPX5TYOV4U0' where id=3; -update noar tt set b1='81PWG56P2IG' where id=3; -update noar ti set b1='81PWG56P2IG' where id=3; -update noar tt set b2='RDGBM1UKE1JMOWHMX' where id=3; -update noar ti set b2='RDGBM1UKE1JMOWHMX' where id=3; -update noar tt set b0='I7SF7FI49T' where id=4; -update noar ti set b0='I7SF7FI49T' where id=4; -update noar tt set b1='7W2SY6IPNVID3Z9VA5VK51' where id=4; -update noar ti set b1='7W2SY6IPNVID3Z9VA5VK51' where id=4; -update noar tt set b2='J1SN8MNYDL69E7ZT1' where id=4; -update noar ti set b2='J1SN8MNYDL69E7ZT1' where id=4; -update noar tt set b0='ZQGK' where id=5; -update noar ti set b0='ZQGK' where id=5; -update noar tt set b1='V1H7K4A7VL5YC8' where id=5; -update noar ti set b1='V1H7K4A7VL5YC8' where id=5; -update noar tt set b2='WXXGE8SNSOG0SYKJTUUFP3TT' where id=5; -update noar ti set b2='WXXGE8SNSOG0SYKJTUUFP3TT' where id=5; -update noar tt set b0='I3JCH6NJX8M6675' where id=6; -update noar ti set b0='I3JCH6NJX8M6675' where id=6; -update noar tt set b1='ONSN97QXAQHJN' where id=6; -update noar ti set b1='ONSN97QXAQHJN' where id=6; -update noar tt set b2='SDSEY521KDIYIAJQ' where id=6; -update noar ti set b2='SDSEY521KDIYIAJQ' where id=6; -update noar tt set b0='7AUYSC9VLF0GUZXVWY1XGG125JDM2BD' where id=7; -update noar ti set b0='7AUYSC9VLF0GUZXVWY1XGG125JDM2BD' where id=7; -update noar tt set b1='TW2N' where id=7; -update noar ti set b1='TW2N' where id=7; -update noar tt set b2='UBOG0O1TQRMF44XE2LPILC5HUTB' where id=7; -update noar ti set b2='UBOG0O1TQRMF44XE2LPILC5HUTB' where id=7; -update noar tt set b0='RNILQ' where id=8; -update noar ti set b0='RNILQ' where id=8; -update noar tt set b1='Y4K42HA5ZBKY1GSCYHHRABS3' where id=8; -update noar ti set b1='Y4K42HA5ZBKY1GSCYHHRABS3' where id=8; -update noar tt set b2='K83J4' where id=8; -update noar ti set b2='K83J4' where id=8; -update noar tt set b0='SGIG8LERFZH5IN4' where id=9; -update noar ti set b0='SGIG8LERFZH5IN4' where id=9; -update noar tt set b1='DOB38I74JNL' where id=9; -update noar ti set b1='DOB38I74JNL' where id=9; -update noar tt set b2='NF7GFC2OWLCIL1FK' where id=9; -update noar ti set b2='NF7GFC2OWLCIL1FK' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 tinyblob null, - b1 tinyblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='2ZMNW7MOI7XPC1SFNTNERTRG' where id=1; -update noar ti set b0='2ZMNW7MOI7XPC1SFNTNERTRG' where id=1; -update noar tt set b1='BYMTR69R' where id=1; -update noar ti set b1='BYMTR69R' where id=1; -update noar tt set b2='HL7' where id=1; -update noar ti set b2='HL7' where id=1; -update noar tt set b0='OZY1X19RJPGK8X00FRJL2F2NX' where id=2; -update noar ti set b0='OZY1X19RJPGK8X00FRJL2F2NX' where id=2; -update noar tt set b1='O2' where id=2; -update noar ti set b1='O2' where id=2; -update noar tt set b2='OTXZ24LPI7XYS7R26PNZ8' where id=2; -update noar ti set b2='OTXZ24LPI7XYS7R26PNZ8' where id=2; -update noar tt set b0='WNS6QDEXUIN7XIPE6G7HCI7I9NANP214' where id=3; -update noar ti set b0='WNS6QDEXUIN7XIPE6G7HCI7I9NANP214' where id=3; -update noar tt set b1='XUH4VZ1V67H5YZEPT8OVG9H7KFJ' where id=3; -update noar ti set b1='XUH4VZ1V67H5YZEPT8OVG9H7KFJ' where id=3; -update noar tt set b2='0EAC437AZVUO' where id=3; -update noar ti set b2='0EAC437AZVUO' where id=3; -update noar tt set b0='WM9' where id=4; -update noar ti set b0='WM9' where id=4; -update noar tt set b1='DF' where id=4; -update noar ti set b1='DF' where id=4; -update noar tt set b2='JWDAVSRXZYL6JBCEYU6YJXI3XPAGQ' where id=4; -update noar ti set b2='JWDAVSRXZYL6JBCEYU6YJXI3XPAGQ' where id=4; -update noar tt set b0='1' where id=5; -update noar ti set b0='1' where id=5; -update noar tt set b1='HOMT' where id=5; -update noar ti set b1='HOMT' where id=5; -update noar tt set b2='611LSHXW6C6' where id=5; -update noar ti set b2='611LSHXW6C6' where id=5; -update noar tt set b0='JMSBV35M4WX32UTN6' where id=6; -update noar ti set b0='JMSBV35M4WX32UTN6' where id=6; -update noar tt set b1='JQXWCHWG29RUAFA505RJU' where id=6; -update noar ti set b1='JQXWCHWG29RUAFA505RJU' where id=6; -update noar tt set b2='J96ILGE2OIV4N806O9PDLOJ' where id=6; -update noar ti set b2='J96ILGE2OIV4N806O9PDLOJ' where id=6; -update noar tt set b0='XO1VG8FBRDZD0SPU81NM' where id=7; -update noar ti set b0='XO1VG8FBRDZD0SPU81NM' where id=7; -update noar tt set b1='KY0MJVN' where id=7; -update noar ti set b1='KY0MJVN' where id=7; -update noar tt set b2='DNQ' where id=7; -update noar ti set b2='DNQ' where id=7; -update noar tt set b0='8XEKKIYOYS' where id=8; -update noar ti set b0='8XEKKIYOYS' where id=8; -update noar tt set b1='COVKXI827HCTZXZN8JHAC934JESF' where id=8; -update noar ti set b1='COVKXI827HCTZXZN8JHAC934JESF' where id=8; -update noar tt set b2='MA9SYQHPSQPDZMA9X' where id=8; -update noar ti set b2='MA9SYQHPSQPDZMA9X' where id=8; -update noar tt set b0='JQSW65RE1F6DI275' where id=9; -update noar ti set b0='JQSW65RE1F6DI275' where id=9; -update noar tt set b1='1LTAL1EJVLMJ4DAQY1OTX4I8ZOEDDS' where id=9; -update noar ti set b1='1LTAL1EJVLMJ4DAQY1OTX4I8ZOEDDS' where id=9; -update noar tt set b2='A8' where id=9; -update noar ti set b2='A8' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 tinyblob not null, - b1 tinyblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='VQOCKPL5H5DVLKVGMILZB0GZIK623L' where id=1; -update noar ti set b0='VQOCKPL5H5DVLKVGMILZB0GZIK623L' where id=1; -update noar tt set b1='3MRBTKCK069RHIDH1G51E' where id=1; -update noar ti set b1='3MRBTKCK069RHIDH1G51E' where id=1; -update noar tt set b2='IRFBLSQK734N83DBVL9C7OM56726' where id=1; -update noar ti set b2='IRFBLSQK734N83DBVL9C7OM56726' where id=1; -update noar tt set b0='5E0MA' where id=2; -update noar ti set b0='5E0MA' where id=2; -update noar tt set b1='YCS1EEK83OL' where id=2; -update noar ti set b1='YCS1EEK83OL' where id=2; -update noar tt set b2='PSTHRKGQDURK' where id=2; -update noar ti set b2='PSTHRKGQDURK' where id=2; -update noar tt set b0='H' where id=3; -update noar ti set b0='H' where id=3; -update noar tt set b1='R8WJJVIJV98M2SG0KIZG0SC9' where id=3; -update noar ti set b1='R8WJJVIJV98M2SG0KIZG0SC9' where id=3; -update noar tt set b2='ZYNCPB2CR42I7EPP7UQYVMLM' where id=3; -update noar ti set b2='ZYNCPB2CR42I7EPP7UQYVMLM' where id=3; -update noar tt set b0='1B1H2FKGCWOICZ83MAHE3O' where id=4; -update noar ti set b0='1B1H2FKGCWOICZ83MAHE3O' where id=4; -update noar tt set b1='WRHNYKV2B5LXAH70GPSPGG5' where id=4; -update noar ti set b1='WRHNYKV2B5LXAH70GPSPGG5' where id=4; -update noar tt set b2='S7SYT3T4EZGZ7VOQ88T5J2Z6TIJD2JLJ' where id=4; -update noar ti set b2='S7SYT3T4EZGZ7VOQ88T5J2Z6TIJD2JLJ' where id=4; -update noar tt set b0='72SNGZS4Q6OYF6EKM6KCCZRRJ57' where id=5; -update noar ti set b0='72SNGZS4Q6OYF6EKM6KCCZRRJ57' where id=5; -update noar tt set b1='T8F3D1PBIYHWGFBF83G025W' where id=5; -update noar ti set b1='T8F3D1PBIYHWGFBF83G025W' where id=5; -update noar tt set b2='9' where id=5; -update noar ti set b2='9' where id=5; -update noar tt set b0='3PAQF3PS3D89H' where id=6; -update noar ti set b0='3PAQF3PS3D89H' where id=6; -update noar tt set b1='Z5Y8S9X56BBZ29BXTDN1P1V' where id=6; -update noar ti set b1='Z5Y8S9X56BBZ29BXTDN1P1V' where id=6; -update noar tt set b2='X252FUABR21UFQBQDP2WNGDXMT' where id=6; -update noar ti set b2='X252FUABR21UFQBQDP2WNGDXMT' where id=6; -update noar tt set b0='DALFKMTLJZ5BXRG4EKS2FHLMVXPQL' where id=7; -update noar ti set b0='DALFKMTLJZ5BXRG4EKS2FHLMVXPQL' where id=7; -update noar tt set b1='RPQ8H6VEL5O6' where id=7; -update noar ti set b1='RPQ8H6VEL5O6' where id=7; -update noar tt set b2='ZF0DNOYMWRDWNNIS3HZY6WGU0NKI6EJ' where id=7; -update noar ti set b2='ZF0DNOYMWRDWNNIS3HZY6WGU0NKI6EJ' where id=7; -update noar tt set b0='Z4O3V4T5W' where id=8; -update noar ti set b0='Z4O3V4T5W' where id=8; -update noar tt set b1='12YE' where id=8; -update noar ti set b1='12YE' where id=8; -update noar tt set b2='GX5T10S2D5OGE9J1AMUNU1JPCZQ2' where id=8; -update noar ti set b2='GX5T10S2D5OGE9J1AMUNU1JPCZQ2' where id=8; -update noar tt set b0='Y' where id=9; -update noar ti set b0='Y' where id=9; -update noar tt set b1='O9PN' where id=9; -update noar ti set b1='O9PN' where id=9; -update noar tt set b2='B30TY855SEBYUJ86K3AYSW84DQLZ' where id=9; -update noar ti set b2='B30TY855SEBYUJ86K3AYSW84DQLZ' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 tinyblob null, - b1 tinyblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='XHX7H' where id=1; -update noar ti set b0='XHX7H' where id=1; -update noar tt set b1='70248WWK1SJUXW5M7H75KWRJK' where id=1; -update noar ti set b1='70248WWK1SJUXW5M7H75KWRJK' where id=1; -update noar tt set b2='2NTMLCWX1FQ3XZXCR7D8HPK8ZQ' where id=1; -update noar ti set b2='2NTMLCWX1FQ3XZXCR7D8HPK8ZQ' where id=1; -update noar tt set b0='L4Z9' where id=2; -update noar ti set b0='L4Z9' where id=2; -update noar tt set b1='UOLOKXZIO4FR7YYXRKGNU8VYE4D9' where id=2; -update noar ti set b1='UOLOKXZIO4FR7YYXRKGNU8VYE4D9' where id=2; -update noar tt set b2='40XELRCMK59A8MW521P' where id=2; -update noar ti set b2='40XELRCMK59A8MW521P' where id=2; -update noar tt set b0='A8PKOY8Q5EVB2KZ2OFABA9LH3GOOHFS' where id=3; -update noar ti set b0='A8PKOY8Q5EVB2KZ2OFABA9LH3GOOHFS' where id=3; -update noar tt set b1='2FHUA1G4SC89LVA1OEZN48IYX6O5G3' where id=3; -update noar ti set b1='2FHUA1G4SC89LVA1OEZN48IYX6O5G3' where id=3; -update noar tt set b2='8I12GS5B9SPHRKB4WJ0PHVIUY8' where id=3; -update noar ti set b2='8I12GS5B9SPHRKB4WJ0PHVIUY8' where id=3; -update noar tt set b0='QSJ0IPK3WGQ5FR75EAD6TECBU074ZDD4' where id=4; -update noar ti set b0='QSJ0IPK3WGQ5FR75EAD6TECBU074ZDD4' where id=4; -update noar tt set b1='AB82KEF1B7K2MQHQT' where id=4; -update noar ti set b1='AB82KEF1B7K2MQHQT' where id=4; -update noar tt set b2='QC8GL01FICTFYDKD958ZA81J' where id=4; -update noar ti set b2='QC8GL01FICTFYDKD958ZA81J' where id=4; -update noar tt set b0='DQJM1A9YDKA2NDZU4IJ9NIYS3RAB' where id=5; -update noar ti set b0='DQJM1A9YDKA2NDZU4IJ9NIYS3RAB' where id=5; -update noar tt set b1='KYNBC' where id=5; -update noar ti set b1='KYNBC' where id=5; -update noar tt set b2='CGMBIPMI16L0JI3O1TB7LLO' where id=5; -update noar ti set b2='CGMBIPMI16L0JI3O1TB7LLO' where id=5; -update noar tt set b0='1I87DCEFLW' where id=6; -update noar ti set b0='1I87DCEFLW' where id=6; -update noar tt set b1='SFFIDXJU4CKXUZETTVYAL2WL' where id=6; -update noar ti set b1='SFFIDXJU4CKXUZETTVYAL2WL' where id=6; -update noar tt set b2='9LQK51TFID4GU' where id=6; -update noar ti set b2='9LQK51TFID4GU' where id=6; -update noar tt set b0='ZH3YEK8W' where id=7; -update noar ti set b0='ZH3YEK8W' where id=7; -update noar tt set b1='DH2DLTG3LX9QQCG55ZS4VNFRMF' where id=7; -update noar ti set b1='DH2DLTG3LX9QQCG55ZS4VNFRMF' where id=7; -update noar tt set b2='OLEFIDX' where id=7; -update noar ti set b2='OLEFIDX' where id=7; -update noar tt set b0='4G2DDE6S6' where id=8; -update noar ti set b0='4G2DDE6S6' where id=8; -update noar tt set b1='UQVXK0N7BZ6VL' where id=8; -update noar ti set b1='UQVXK0N7BZ6VL' where id=8; -update noar tt set b2='KERVJYBEOIYZI4RJIJAJACE86L5ZZ1LZ' where id=8; -update noar ti set b2='KERVJYBEOIYZI4RJIJAJACE86L5ZZ1LZ' where id=8; -update noar tt set b0='ZV5ZM' where id=9; -update noar ti set b0='ZV5ZM' where id=9; -update noar tt set b1='W' where id=9; -update noar ti set b1='W' where id=9; -update noar tt set b2='MT' where id=9; -update noar ti set b2='MT' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 tinyblob not null, - b1 tinyblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='NUXZ5RL0IJMYU45DPNFA96OOKUSEEH4' where id=1; -update noar ti set b0='NUXZ5RL0IJMYU45DPNFA96OOKUSEEH4' where id=1; -update noar tt set b1='HRCSHQZ43RE3M4JWWZH9X2U8' where id=1; -update noar ti set b1='HRCSHQZ43RE3M4JWWZH9X2U8' where id=1; -update noar tt set b2='A5E92XIT2SJGQHL' where id=1; -update noar ti set b2='A5E92XIT2SJGQHL' where id=1; -update noar tt set b0='LQKN4SPQ4D0' where id=2; -update noar ti set b0='LQKN4SPQ4D0' where id=2; -update noar tt set b1='XEGFM13YYUXX6DZ9' where id=2; -update noar ti set b1='XEGFM13YYUXX6DZ9' where id=2; -update noar tt set b2='03Q' where id=2; -update noar ti set b2='03Q' where id=2; -update noar tt set b0='LZ5MR01QEB7NW' where id=3; -update noar ti set b0='LZ5MR01QEB7NW' where id=3; -update noar tt set b1='4XRTJXIGD6FWLO20' where id=3; -update noar ti set b1='4XRTJXIGD6FWLO20' where id=3; -update noar tt set b2='8WLU8HWLI5OBSTUK1MIO' where id=3; -update noar ti set b2='8WLU8HWLI5OBSTUK1MIO' where id=3; -update noar tt set b0='QVDNHUKS4D' where id=4; -update noar ti set b0='QVDNHUKS4D' where id=4; -update noar tt set b1='ILQ3ZX70' where id=4; -update noar ti set b1='ILQ3ZX70' where id=4; -update noar tt set b2='2GP6' where id=4; -update noar ti set b2='2GP6' where id=4; -update noar tt set b0='FD' where id=5; -update noar ti set b0='FD' where id=5; -update noar tt set b1='IKKX' where id=5; -update noar ti set b1='IKKX' where id=5; -update noar tt set b2='9TVIX7LVDPXP' where id=5; -update noar ti set b2='9TVIX7LVDPXP' where id=5; -update noar tt set b0='IIO' where id=6; -update noar ti set b0='IIO' where id=6; -update noar tt set b1='HVH0RIDW2SEIPZWEXMV8S4R53FEE' where id=6; -update noar ti set b1='HVH0RIDW2SEIPZWEXMV8S4R53FEE' where id=6; -update noar tt set b2='NVZD7TBH0JXLDF36RM' where id=6; -update noar ti set b2='NVZD7TBH0JXLDF36RM' where id=6; -update noar tt set b0='5CGJYTET3XOUB7465GENRZOXH' where id=7; -update noar ti set b0='5CGJYTET3XOUB7465GENRZOXH' where id=7; -update noar tt set b1='Q81RZ584O113C9NPBF77GLU4AK' where id=7; -update noar ti set b1='Q81RZ584O113C9NPBF77GLU4AK' where id=7; -update noar tt set b2='MFHOY' where id=7; -update noar ti set b2='MFHOY' where id=7; -update noar tt set b0='G6T8VSVL58VIR' where id=8; -update noar ti set b0='G6T8VSVL58VIR' where id=8; -update noar tt set b1='7PB8QVUESXMQGHU6T' where id=8; -update noar ti set b1='7PB8QVUESXMQGHU6T' where id=8; -update noar tt set b2='FAWC4TYYMFOF0EMZTZOKZDGE693' where id=8; -update noar ti set b2='FAWC4TYYMFOF0EMZTZOKZDGE693' where id=8; -update noar tt set b0='3PHHB4DXRIH31KRNW4ERO4JP04ZF9ZC' where id=9; -update noar ti set b0='3PHHB4DXRIH31KRNW4ERO4JP04ZF9ZC' where id=9; -update noar tt set b1='WURT2JDSMEQJ72RCFX2' where id=9; -update noar ti set b1='WURT2JDSMEQJ72RCFX2' where id=9; -update noar tt set b2='Y9QEDVCOXUPKJWC7CVKWPTUGW8' where id=9; -update noar ti set b2='Y9QEDVCOXUPKJWC7CVKWPTUGW8' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 tinyblob null, - b1 tinyblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='E' where id=1; -update noar ti set b0='E' where id=1; -update noar tt set b1='DUYTE2MT0WSCRXZEN380DMUTSYT71B' where id=1; -update noar ti set b1='DUYTE2MT0WSCRXZEN380DMUTSYT71B' where id=1; -update noar tt set b2='348CU' where id=1; -update noar ti set b2='348CU' where id=1; -update noar tt set b0='OIBQKKYIY' where id=2; -update noar ti set b0='OIBQKKYIY' where id=2; -update noar tt set b1='R976ZBP25S0X9PPOY1NNAR' where id=2; -update noar ti set b1='R976ZBP25S0X9PPOY1NNAR' where id=2; -update noar tt set b2='FBBS' where id=2; -update noar ti set b2='FBBS' where id=2; -update noar tt set b0='PUGBX1YCQ2W353' where id=3; -update noar ti set b0='PUGBX1YCQ2W353' where id=3; -update noar tt set b1='1CQ' where id=3; -update noar ti set b1='1CQ' where id=3; -update noar tt set b2='7ANSC30V' where id=3; -update noar ti set b2='7ANSC30V' where id=3; -update noar tt set b0='6ZMFLWZVLJ6ZUGYDL5M5U31BWK' where id=4; -update noar ti set b0='6ZMFLWZVLJ6ZUGYDL5M5U31BWK' where id=4; -update noar tt set b1='40LVE0SITV4FXPFM1MSKTCF9ZGM3' where id=4; -update noar ti set b1='40LVE0SITV4FXPFM1MSKTCF9ZGM3' where id=4; -update noar tt set b2='1R8' where id=4; -update noar ti set b2='1R8' where id=4; -update noar tt set b0='FWD1SAM1BDI8' where id=5; -update noar ti set b0='FWD1SAM1BDI8' where id=5; -update noar tt set b1='1ZRU1LAVEVXQ2290WQYVWKYHS9DGP3' where id=5; -update noar ti set b1='1ZRU1LAVEVXQ2290WQYVWKYHS9DGP3' where id=5; -update noar tt set b2='XA' where id=5; -update noar ti set b2='XA' where id=5; -update noar tt set b0='BI7GAOW3G' where id=6; -update noar ti set b0='BI7GAOW3G' where id=6; -update noar tt set b1='KGB' where id=6; -update noar ti set b1='KGB' where id=6; -update noar tt set b2='WLYAZVYP27KDSUILDPHYLJFOERPQEYQ3' where id=6; -update noar ti set b2='WLYAZVYP27KDSUILDPHYLJFOERPQEYQ3' where id=6; -update noar tt set b0='7YISX5CUDJH' where id=7; -update noar ti set b0='7YISX5CUDJH' where id=7; -update noar tt set b1='VODNM1OUTLYDYGZPGH5LYS2Y5PACG' where id=7; -update noar ti set b1='VODNM1OUTLYDYGZPGH5LYS2Y5PACG' where id=7; -update noar tt set b2='8R24DIUHLITO0HUDNS' where id=7; -update noar ti set b2='8R24DIUHLITO0HUDNS' where id=7; -update noar tt set b0='2OB0A6PC6VJP7PK33V6' where id=8; -update noar ti set b0='2OB0A6PC6VJP7PK33V6' where id=8; -update noar tt set b1='2TFGQ3YXC0' where id=8; -update noar ti set b1='2TFGQ3YXC0' where id=8; -update noar tt set b2='N1PK7NXUONYKEYEZXZ3HU8' where id=8; -update noar ti set b2='N1PK7NXUONYKEYEZXZ3HU8' where id=8; -update noar tt set b0='SOE02A3GUY913QQLVLUGB' where id=9; -update noar ti set b0='SOE02A3GUY913QQLVLUGB' where id=9; -update noar tt set b1='VQ1JX' where id=9; -update noar ti set b1='VQ1JX' where id=9; -update noar tt set b2='64MNBYFJLP322NHM9' where id=9; -update noar ti set b2='64MNBYFJLP322NHM9' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 tinyblob not null, - b1 tinyblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='XDAQ' where id=1; -update noar ti set b0='XDAQ' where id=1; -update noar tt set b1='VMWKBKP7A88SQURQGQJF7EX' where id=1; -update noar ti set b1='VMWKBKP7A88SQURQGQJF7EX' where id=1; -update noar tt set b2='5894HPJ9CL6' where id=1; -update noar ti set b2='5894HPJ9CL6' where id=1; -update noar tt set b0='O0RC' where id=2; -update noar ti set b0='O0RC' where id=2; -update noar tt set b1='KHHIB46XQJXJITZSF0SP4IPHPZD2P' where id=2; -update noar ti set b1='KHHIB46XQJXJITZSF0SP4IPHPZD2P' where id=2; -update noar tt set b2='XEIJOG' where id=2; -update noar ti set b2='XEIJOG' where id=2; -update noar tt set b0='77' where id=3; -update noar ti set b0='77' where id=3; -update noar tt set b1='J6NWB9ECQ7HW' where id=3; -update noar ti set b1='J6NWB9ECQ7HW' where id=3; -update noar tt set b2='8IKTO5RFV60NZO' where id=3; -update noar ti set b2='8IKTO5RFV60NZO' where id=3; -update noar tt set b0='VL3J0U18MHNWHP4UY2' where id=4; -update noar ti set b0='VL3J0U18MHNWHP4UY2' where id=4; -update noar tt set b1='HQG2U2C2KEH1QGP32' where id=4; -update noar ti set b1='HQG2U2C2KEH1QGP32' where id=4; -update noar tt set b2='2EK40KX2QPWLSI5F94C2TFA6Y9CG' where id=4; -update noar ti set b2='2EK40KX2QPWLSI5F94C2TFA6Y9CG' where id=4; -update noar tt set b0='BTXSRAYF1NI69VSLKDXGZ' where id=5; -update noar ti set b0='BTXSRAYF1NI69VSLKDXGZ' where id=5; -update noar tt set b1='RE' where id=5; -update noar ti set b1='RE' where id=5; -update noar tt set b2='6KK727IC0J0M1WWR7EYI88MTQ87' where id=5; -update noar ti set b2='6KK727IC0J0M1WWR7EYI88MTQ87' where id=5; -update noar tt set b0='S8WTCV8C9NF1PIFEX2HIUZUITT5XS7' where id=6; -update noar ti set b0='S8WTCV8C9NF1PIFEX2HIUZUITT5XS7' where id=6; -update noar tt set b1='4' where id=6; -update noar ti set b1='4' where id=6; -update noar tt set b2='IMTR26ZDPHGP57C6E3Q' where id=6; -update noar ti set b2='IMTR26ZDPHGP57C6E3Q' where id=6; -update noar tt set b0='GO0OUK72C67QUVDM5KF4N52VD2' where id=7; -update noar ti set b0='GO0OUK72C67QUVDM5KF4N52VD2' where id=7; -update noar tt set b1='8290NN8J5246IOBBQJHUZV' where id=7; -update noar ti set b1='8290NN8J5246IOBBQJHUZV' where id=7; -update noar tt set b2='OYB0N7YX1L1M31QLMO7LJ0Z5IQWM' where id=7; -update noar ti set b2='OYB0N7YX1L1M31QLMO7LJ0Z5IQWM' where id=7; -update noar tt set b0='K7OYBCJRFMJCDJ1LHNKVNXXL' where id=8; -update noar ti set b0='K7OYBCJRFMJCDJ1LHNKVNXXL' where id=8; -update noar tt set b1='1QCDJ8VLZR14ERF4VW7' where id=8; -update noar ti set b1='1QCDJ8VLZR14ERF4VW7' where id=8; -update noar tt set b2='AJBATT' where id=8; -update noar ti set b2='AJBATT' where id=8; -update noar tt set b0='STHCKDVFEWH5F8OODT' where id=9; -update noar ti set b0='STHCKDVFEWH5F8OODT' where id=9; -update noar tt set b1='150UQWNDMIX3J4SAED' where id=9; -update noar ti set b1='150UQWNDMIX3J4SAED' where id=9; -update noar tt set b2='FW3S181UYHPGD7XS9US' where id=9; -update noar ti set b2='FW3S181UYHPGD7XS9US' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 tinyblob null, - b1 tinyblob null, - b2 text null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='T83' where id=1; -update noar ti set b0='T83' where id=1; -update noar tt set b1='X48LAEEHK3ZH4V0NJ2YMVD' where id=1; -update noar ti set b1='X48LAEEHK3ZH4V0NJ2YMVD' where id=1; -update noar tt set b2='E6WJPGMSRHRDB' where id=1; -update noar ti set b2='E6WJPGMSRHRDB' where id=1; -update noar tt set b0='P5PHN4PM2G77JGF8Q' where id=2; -update noar ti set b0='P5PHN4PM2G77JGF8Q' where id=2; -update noar tt set b1='7C41T' where id=2; -update noar ti set b1='7C41T' where id=2; -update noar tt set b2='OYFXXMWFB5CV' where id=2; -update noar ti set b2='OYFXXMWFB5CV' where id=2; -update noar tt set b0='Y0ZQ5U2RRARVF' where id=3; -update noar ti set b0='Y0ZQ5U2RRARVF' where id=3; -update noar tt set b1='8XX12WLULLQ' where id=3; -update noar ti set b1='8XX12WLULLQ' where id=3; -update noar tt set b2='U4WNXJUWJZP8I3NQ51OAV4U7KTX9C' where id=3; -update noar ti set b2='U4WNXJUWJZP8I3NQ51OAV4U7KTX9C' where id=3; -update noar tt set b0='N7BSKZ3Y67' where id=4; -update noar ti set b0='N7BSKZ3Y67' where id=4; -update noar tt set b1='K5936GKS' where id=4; -update noar ti set b1='K5936GKS' where id=4; -update noar tt set b2='1ZO' where id=4; -update noar ti set b2='1ZO' where id=4; -update noar tt set b0='NY9DL1EZPR5' where id=5; -update noar ti set b0='NY9DL1EZPR5' where id=5; -update noar tt set b1='TQ6W4Y6KVJ6AA9QAB' where id=5; -update noar ti set b1='TQ6W4Y6KVJ6AA9QAB' where id=5; -update noar tt set b2='GP9894AUG675QNW' where id=5; -update noar ti set b2='GP9894AUG675QNW' where id=5; -update noar tt set b0='CZGZ9L99X6P9J9L4K6' where id=6; -update noar ti set b0='CZGZ9L99X6P9J9L4K6' where id=6; -update noar tt set b1='VKXYTSCF7JWFNPP1MGBEUDF5C' where id=6; -update noar ti set b1='VKXYTSCF7JWFNPP1MGBEUDF5C' where id=6; -update noar tt set b2='SLC08ZH6ABF56M4ZA2T1BR' where id=6; -update noar ti set b2='SLC08ZH6ABF56M4ZA2T1BR' where id=6; -update noar tt set b0='L' where id=7; -update noar ti set b0='L' where id=7; -update noar tt set b1='KYDSUG' where id=7; -update noar ti set b1='KYDSUG' where id=7; -update noar tt set b2='I4ZSA23JNPV5QI4KFXQIB536YAYBIE2Q' where id=7; -update noar ti set b2='I4ZSA23JNPV5QI4KFXQIB536YAYBIE2Q' where id=7; -update noar tt set b0='39A7UTUCUG6PYCJ8NA5LS' where id=8; -update noar ti set b0='39A7UTUCUG6PYCJ8NA5LS' where id=8; -update noar tt set b1='25S89JJZ' where id=8; -update noar ti set b1='25S89JJZ' where id=8; -update noar tt set b2='YTE0JXKIJ0YTDO' where id=8; -update noar ti set b2='YTE0JXKIJ0YTDO' where id=8; -update noar tt set b0='TY8TL9W8NGZTE1QMFYK3D1W426Z' where id=9; -update noar ti set b0='TY8TL9W8NGZTE1QMFYK3D1W426Z' where id=9; -update noar tt set b1='SNN' where id=9; -update noar ti set b1='SNN' where id=9; -update noar tt set b2='GTS3LG8H85VPSD69EF3X34AKL93HMN8' where id=9; -update noar ti set b2='GTS3LG8H85VPSD69EF3X34AKL93HMN8' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 tinyblob not null, - b1 tinyblob not null, - b2 text not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='FLAD1DU9OIS5NG4U7BRH58WZ' where id=1; -update noar ti set b0='FLAD1DU9OIS5NG4U7BRH58WZ' where id=1; -update noar tt set b1='D6R0TPWR39QI4WELUE1N9139L337PIP' where id=1; -update noar ti set b1='D6R0TPWR39QI4WELUE1N9139L337PIP' where id=1; -update noar tt set b2='PT1PGFYPJIF0YQYHIZTX0CPER8NDK5' where id=1; -update noar ti set b2='PT1PGFYPJIF0YQYHIZTX0CPER8NDK5' where id=1; -update noar tt set b0='6PAC8KGF5EJZDZT' where id=2; -update noar ti set b0='6PAC8KGF5EJZDZT' where id=2; -update noar tt set b1='QB0RNZ0B76A73J7G3P9AAZQR220' where id=2; -update noar ti set b1='QB0RNZ0B76A73J7G3P9AAZQR220' where id=2; -update noar tt set b2='FWMXEQOZNZ' where id=2; -update noar ti set b2='FWMXEQOZNZ' where id=2; -update noar tt set b0='YVT4RPNTLO1G7HSQXE' where id=3; -update noar ti set b0='YVT4RPNTLO1G7HSQXE' where id=3; -update noar tt set b1='DPU3E51A9ZNWX1BJ9R3BS21GKDA' where id=3; -update noar ti set b1='DPU3E51A9ZNWX1BJ9R3BS21GKDA' where id=3; -update noar tt set b2='OB2VHDDM9SB0CI3HF3IAF' where id=3; -update noar ti set b2='OB2VHDDM9SB0CI3HF3IAF' where id=3; -update noar tt set b0='O6RM9IXR6EYFKYRAJP8DPBELZMK' where id=4; -update noar ti set b0='O6RM9IXR6EYFKYRAJP8DPBELZMK' where id=4; -update noar tt set b1='O8LUFAMEQVZOMJVUB4TGDBV' where id=4; -update noar ti set b1='O8LUFAMEQVZOMJVUB4TGDBV' where id=4; -update noar tt set b2='K6FRSLXB7BMOXMEZT7O3L0RVB' where id=4; -update noar ti set b2='K6FRSLXB7BMOXMEZT7O3L0RVB' where id=4; -update noar tt set b0='SZIE4M82QR3XSNZ3M' where id=5; -update noar ti set b0='SZIE4M82QR3XSNZ3M' where id=5; -update noar tt set b1='EODT7VSE8QDZURNG2I' where id=5; -update noar ti set b1='EODT7VSE8QDZURNG2I' where id=5; -update noar tt set b2='CQIYLXBZHF' where id=5; -update noar ti set b2='CQIYLXBZHF' where id=5; -update noar tt set b0='830KNDTN2VW2C' where id=6; -update noar ti set b0='830KNDTN2VW2C' where id=6; -update noar tt set b1='VML26A88V2GELPA2UM1E14J8' where id=6; -update noar ti set b1='VML26A88V2GELPA2UM1E14J8' where id=6; -update noar tt set b2='9OLDUH' where id=6; -update noar ti set b2='9OLDUH' where id=6; -update noar tt set b0='0C4NH6OS20EEXYT48MCGVTNT0NP' where id=7; -update noar ti set b0='0C4NH6OS20EEXYT48MCGVTNT0NP' where id=7; -update noar tt set b1='WIO6QBQUBOFRNFKKNSV' where id=7; -update noar ti set b1='WIO6QBQUBOFRNFKKNSV' where id=7; -update noar tt set b2='MHJZ6DF8JOCGG9G5NAJWT845PPWPFFN' where id=7; -update noar ti set b2='MHJZ6DF8JOCGG9G5NAJWT845PPWPFFN' where id=7; -update noar tt set b0='MGN3KRMZWRMZ59NU2ZWII' where id=8; -update noar ti set b0='MGN3KRMZWRMZ59NU2ZWII' where id=8; -update noar tt set b1='E1LLD5KHRL9E' where id=8; -update noar ti set b1='E1LLD5KHRL9E' where id=8; -update noar tt set b2='WKQWXX7U2PD9DETEEMZLI26' where id=8; -update noar ti set b2='WKQWXX7U2PD9DETEEMZLI26' where id=8; -update noar tt set b0='Z44ZNT67L2C' where id=9; -update noar ti set b0='Z44ZNT67L2C' where id=9; -update noar tt set b1='UC6X34E4EZOA1BXAGU62STY3' where id=9; -update noar ti set b1='UC6X34E4EZOA1BXAGU62STY3' where id=9; -update noar tt set b2='ZP795KUPO3' where id=9; -update noar ti set b2='ZP795KUPO3' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 tinyblob null, - b1 blob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='W3E1BRU0QDRV7U052ZO8IYDY8' where id=1; -update noar ti set b0='W3E1BRU0QDRV7U052ZO8IYDY8' where id=1; -update noar tt set b1='1I56MCIYGN1XJ2' where id=1; -update noar ti set b1='1I56MCIYGN1XJ2' where id=1; -update noar tt set b2='YO5BN084JGRG' where id=1; -update noar ti set b2='YO5BN084JGRG' where id=1; -update noar tt set b0='1VLFX19NQ30GNIY1I2IJO0' where id=2; -update noar ti set b0='1VLFX19NQ30GNIY1I2IJO0' where id=2; -update noar tt set b1='7X2X4Q0ECDQH9Z716ML2DVQG8K' where id=2; -update noar ti set b1='7X2X4Q0ECDQH9Z716ML2DVQG8K' where id=2; -update noar tt set b2='FOAZC78KKO4N7CPBI7PFAMR3' where id=2; -update noar ti set b2='FOAZC78KKO4N7CPBI7PFAMR3' where id=2; -update noar tt set b0='BILB6BB71S5WA8S1DGNUA' where id=3; -update noar ti set b0='BILB6BB71S5WA8S1DGNUA' where id=3; -update noar tt set b1='1J6KN' where id=3; -update noar ti set b1='1J6KN' where id=3; -update noar tt set b2='S3' where id=3; -update noar ti set b2='S3' where id=3; -update noar tt set b0='3S1J5OTZW0A9RXHX9V' where id=4; -update noar ti set b0='3S1J5OTZW0A9RXHX9V' where id=4; -update noar tt set b1='YOTTW35UFC746O4KV37ILBK1WXW' where id=4; -update noar ti set b1='YOTTW35UFC746O4KV37ILBK1WXW' where id=4; -update noar tt set b2='UVRDWL1UBNWVT' where id=4; -update noar ti set b2='UVRDWL1UBNWVT' where id=4; -update noar tt set b0='KUWJPYFNL4MQXXUOS70TBOKQ5KF9TR' where id=5; -update noar ti set b0='KUWJPYFNL4MQXXUOS70TBOKQ5KF9TR' where id=5; -update noar tt set b1='GJ0QJZHLAMJV5SGC' where id=5; -update noar ti set b1='GJ0QJZHLAMJV5SGC' where id=5; -update noar tt set b2='7YZ60YY22K0AEEOIU0ZDN5' where id=5; -update noar ti set b2='7YZ60YY22K0AEEOIU0ZDN5' where id=5; -update noar tt set b0='586F' where id=6; -update noar ti set b0='586F' where id=6; -update noar tt set b1='QYJ93MZVBQWTK9B602FL' where id=6; -update noar ti set b1='QYJ93MZVBQWTK9B602FL' where id=6; -update noar tt set b2='TFL4VBCSYKY38FQPDA' where id=6; -update noar ti set b2='TFL4VBCSYKY38FQPDA' where id=6; -update noar tt set b0='5TTWSW3DPO3NT9' where id=7; -update noar ti set b0='5TTWSW3DPO3NT9' where id=7; -update noar tt set b1='GBBBC4X06T3LPN1JRBSZ' where id=7; -update noar ti set b1='GBBBC4X06T3LPN1JRBSZ' where id=7; -update noar tt set b2='GCQXIJFWLPKKCERQTS34QU4XUFWG4R' where id=7; -update noar ti set b2='GCQXIJFWLPKKCERQTS34QU4XUFWG4R' where id=7; -update noar tt set b0='ILIQQ3' where id=8; -update noar ti set b0='ILIQQ3' where id=8; -update noar tt set b1='6CAGH4E7SGX' where id=8; -update noar ti set b1='6CAGH4E7SGX' where id=8; -update noar tt set b2='98' where id=8; -update noar ti set b2='98' where id=8; -update noar tt set b0='BBIG0PVO87K' where id=9; -update noar ti set b0='BBIG0PVO87K' where id=9; -update noar tt set b1='ARJ1CMNVXQGJF6NX82' where id=9; -update noar ti set b1='ARJ1CMNVXQGJF6NX82' where id=9; -update noar tt set b2='5W9S1AF' where id=9; -update noar ti set b2='5W9S1AF' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 tinyblob not null, - b1 blob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='G1' where id=1; -update noar ti set b0='G1' where id=1; -update noar tt set b1='LP4PGUIVD2KVEOHG4G33P' where id=1; -update noar ti set b1='LP4PGUIVD2KVEOHG4G33P' where id=1; -update noar tt set b2='96F7VE7YN15VB52PZOA3TAXH85C' where id=1; -update noar ti set b2='96F7VE7YN15VB52PZOA3TAXH85C' where id=1; -update noar tt set b0='W31SHEPO0HUY5GV39SOW2LDW1OBUL' where id=2; -update noar ti set b0='W31SHEPO0HUY5GV39SOW2LDW1OBUL' where id=2; -update noar tt set b1='8DK9G' where id=2; -update noar ti set b1='8DK9G' where id=2; -update noar tt set b2='4O7SVQTY' where id=2; -update noar ti set b2='4O7SVQTY' where id=2; -update noar tt set b0='FUKX6X' where id=3; -update noar ti set b0='FUKX6X' where id=3; -update noar tt set b1='TPKJ4' where id=3; -update noar ti set b1='TPKJ4' where id=3; -update noar tt set b2='F7Z4Y04F4XBHYAYKD8' where id=3; -update noar ti set b2='F7Z4Y04F4XBHYAYKD8' where id=3; -update noar tt set b0='S09TJEE3VM5CWIZ3JDZ8TJ02' where id=4; -update noar ti set b0='S09TJEE3VM5CWIZ3JDZ8TJ02' where id=4; -update noar tt set b1='996' where id=4; -update noar ti set b1='996' where id=4; -update noar tt set b2='8IB0BBSXQR8Z2C4FP3GGG1K3Y9' where id=4; -update noar ti set b2='8IB0BBSXQR8Z2C4FP3GGG1K3Y9' where id=4; -update noar tt set b0='QY5KX' where id=5; -update noar ti set b0='QY5KX' where id=5; -update noar tt set b1='FI0TK' where id=5; -update noar ti set b1='FI0TK' where id=5; -update noar tt set b2='46RKT9QZG' where id=5; -update noar ti set b2='46RKT9QZG' where id=5; -update noar tt set b0='70Y4WLLLWS7YI0H7NUZN87' where id=6; -update noar ti set b0='70Y4WLLLWS7YI0H7NUZN87' where id=6; -update noar tt set b1='65UMA352KWXTE3WINMO52KN' where id=6; -update noar ti set b1='65UMA352KWXTE3WINMO52KN' where id=6; -update noar tt set b2='0KL6P4LD5MGAJ03NPU9X03BEVCPNO2' where id=6; -update noar ti set b2='0KL6P4LD5MGAJ03NPU9X03BEVCPNO2' where id=6; -update noar tt set b0='H2' where id=7; -update noar ti set b0='H2' where id=7; -update noar tt set b1='M4G61' where id=7; -update noar ti set b1='M4G61' where id=7; -update noar tt set b2='SMPY8OYCK3E5OF6N1B2X' where id=7; -update noar ti set b2='SMPY8OYCK3E5OF6N1B2X' where id=7; -update noar tt set b0='N44T19OMKUEH' where id=8; -update noar ti set b0='N44T19OMKUEH' where id=8; -update noar tt set b1='CKVR10TK6483Z553RQYV579' where id=8; -update noar ti set b1='CKVR10TK6483Z553RQYV579' where id=8; -update noar tt set b2='J3U3ZGSS3ASI2EV7168C4PPTCP4K' where id=8; -update noar ti set b2='J3U3ZGSS3ASI2EV7168C4PPTCP4K' where id=8; -update noar tt set b0='MSVCREOPDHFM8SEIEM6079YJVT' where id=9; -update noar ti set b0='MSVCREOPDHFM8SEIEM6079YJVT' where id=9; -update noar tt set b1='JPLMM7HS' where id=9; -update noar ti set b1='JPLMM7HS' where id=9; -update noar tt set b2='W11DG4Z889J1DA0YRC23Y' where id=9; -update noar ti set b2='W11DG4Z889J1DA0YRC23Y' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 tinyblob null, - b1 blob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='CQQ20FBKF9CLXAO8H' where id=1; -update noar ti set b0='CQQ20FBKF9CLXAO8H' where id=1; -update noar tt set b1='7D28UR82M5EQG1U8TDV4' where id=1; -update noar ti set b1='7D28UR82M5EQG1U8TDV4' where id=1; -update noar tt set b2='W' where id=1; -update noar ti set b2='W' where id=1; -update noar tt set b0='98D763XQ' where id=2; -update noar ti set b0='98D763XQ' where id=2; -update noar tt set b1='NX81TXXVGYJXRTGCBKGY8FLEV2' where id=2; -update noar ti set b1='NX81TXXVGYJXRTGCBKGY8FLEV2' where id=2; -update noar tt set b2='MAO3HC' where id=2; -update noar ti set b2='MAO3HC' where id=2; -update noar tt set b0='Y0CI' where id=3; -update noar ti set b0='Y0CI' where id=3; -update noar tt set b1='SSVK0B556CS' where id=3; -update noar ti set b1='SSVK0B556CS' where id=3; -update noar tt set b2='NM8AFB2S6T6XR5I0CMEDN9MAY' where id=3; -update noar ti set b2='NM8AFB2S6T6XR5I0CMEDN9MAY' where id=3; -update noar tt set b0='M3IHPBO' where id=4; -update noar ti set b0='M3IHPBO' where id=4; -update noar tt set b1='CV1P92O9FWKCWKBV' where id=4; -update noar ti set b1='CV1P92O9FWKCWKBV' where id=4; -update noar tt set b2='N6LZWRY04OBC3171GL3OF4LMWOWKAC8K' where id=4; -update noar ti set b2='N6LZWRY04OBC3171GL3OF4LMWOWKAC8K' where id=4; -update noar tt set b0='QR1' where id=5; -update noar ti set b0='QR1' where id=5; -update noar tt set b1='ND0WUELCVPSU' where id=5; -update noar ti set b1='ND0WUELCVPSU' where id=5; -update noar tt set b2='J58WCUVVYKXOX23IEK3B' where id=5; -update noar ti set b2='J58WCUVVYKXOX23IEK3B' where id=5; -update noar tt set b0='YPF8UO33Z66JTM64W' where id=6; -update noar ti set b0='YPF8UO33Z66JTM64W' where id=6; -update noar tt set b1='RGPKQ9USTQKZ' where id=6; -update noar ti set b1='RGPKQ9USTQKZ' where id=6; -update noar tt set b2='MB88S2L5TXQHFXU30PP34TF6F7IUBG' where id=6; -update noar ti set b2='MB88S2L5TXQHFXU30PP34TF6F7IUBG' where id=6; -update noar tt set b0='O0FTPQUKUS6GBDYYD' where id=7; -update noar ti set b0='O0FTPQUKUS6GBDYYD' where id=7; -update noar tt set b1='XWKV8OENAIGM4' where id=7; -update noar ti set b1='XWKV8OENAIGM4' where id=7; -update noar tt set b2='VCXV6XC0NM48IG3WNUJNOY3JWXF98IQ9' where id=7; -update noar ti set b2='VCXV6XC0NM48IG3WNUJNOY3JWXF98IQ9' where id=7; -update noar tt set b0='LPTK4JADRI6HB0' where id=8; -update noar ti set b0='LPTK4JADRI6HB0' where id=8; -update noar tt set b1='CMP7BGPEH5HE4MCAFVKFOK567CBIQSUS' where id=8; -update noar ti set b1='CMP7BGPEH5HE4MCAFVKFOK567CBIQSUS' where id=8; -update noar tt set b2='EO' where id=8; -update noar ti set b2='EO' where id=8; -update noar tt set b0='UFZOWSXE0Y5QMFOWWW2L' where id=9; -update noar ti set b0='UFZOWSXE0Y5QMFOWWW2L' where id=9; -update noar tt set b1='XAXW6AREZZBVIHVE0J660IE0D46S04AB' where id=9; -update noar ti set b1='XAXW6AREZZBVIHVE0J660IE0D46S04AB' where id=9; -update noar tt set b2='G8ZSERN0TMTZ5MI3Q7TEEHRRH9Z' where id=9; -update noar ti set b2='G8ZSERN0TMTZ5MI3Q7TEEHRRH9Z' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 tinyblob not null, - b1 blob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='YB' where id=1; -update noar ti set b0='YB' where id=1; -update noar tt set b1='6NA7XYO28TKA75RND7MTI' where id=1; -update noar ti set b1='6NA7XYO28TKA75RND7MTI' where id=1; -update noar tt set b2='KL91GF8BLQRBOCE02JM3XRBBH' where id=1; -update noar ti set b2='KL91GF8BLQRBOCE02JM3XRBBH' where id=1; -update noar tt set b0='F1RI64V9YN7Y4VNIQ0IKLAI' where id=2; -update noar ti set b0='F1RI64V9YN7Y4VNIQ0IKLAI' where id=2; -update noar tt set b1='2U8Q9KD497XPFRJKC' where id=2; -update noar ti set b1='2U8Q9KD497XPFRJKC' where id=2; -update noar tt set b2='CTX86TY41S4COK62' where id=2; -update noar ti set b2='CTX86TY41S4COK62' where id=2; -update noar tt set b0='A1539Z2Y2C4KO' where id=3; -update noar ti set b0='A1539Z2Y2C4KO' where id=3; -update noar tt set b1='2VTLWM39ZJ1SW2D' where id=3; -update noar ti set b1='2VTLWM39ZJ1SW2D' where id=3; -update noar tt set b2='0PH0JTOTU1Q29H1TH' where id=3; -update noar ti set b2='0PH0JTOTU1Q29H1TH' where id=3; -update noar tt set b0='SIKAV8UZBK0J3RU' where id=4; -update noar ti set b0='SIKAV8UZBK0J3RU' where id=4; -update noar tt set b1='6H3M6N028SA1HT2' where id=4; -update noar ti set b1='6H3M6N028SA1HT2' where id=4; -update noar tt set b2='193J9L9FBGBYO5RX2HG07TV85VKV' where id=4; -update noar ti set b2='193J9L9FBGBYO5RX2HG07TV85VKV' where id=4; -update noar tt set b0='Q9SEGANQW35PGJSBJGLX48XH9' where id=5; -update noar ti set b0='Q9SEGANQW35PGJSBJGLX48XH9' where id=5; -update noar tt set b1='TIPBCO2X5NXW2B0CF' where id=5; -update noar ti set b1='TIPBCO2X5NXW2B0CF' where id=5; -update noar tt set b2='RB6GQK6PYEPRTMCE1' where id=5; -update noar ti set b2='RB6GQK6PYEPRTMCE1' where id=5; -update noar tt set b0='W' where id=6; -update noar ti set b0='W' where id=6; -update noar tt set b1='KTC8' where id=6; -update noar ti set b1='KTC8' where id=6; -update noar tt set b2='CR1RXZEDHFP6O' where id=6; -update noar ti set b2='CR1RXZEDHFP6O' where id=6; -update noar tt set b0='XKYNUGAKQL4' where id=7; -update noar ti set b0='XKYNUGAKQL4' where id=7; -update noar tt set b1='R2PER83QXP4YDUXYXXE' where id=7; -update noar ti set b1='R2PER83QXP4YDUXYXXE' where id=7; -update noar tt set b2='KF1J' where id=7; -update noar ti set b2='KF1J' where id=7; -update noar tt set b0='2HY6MVCXM6F2VLKIBSCV5BJ5APAT52X' where id=8; -update noar ti set b0='2HY6MVCXM6F2VLKIBSCV5BJ5APAT52X' where id=8; -update noar tt set b1='GV3FSDITS39B4E2152L9QQW9KR1' where id=8; -update noar ti set b1='GV3FSDITS39B4E2152L9QQW9KR1' where id=8; -update noar tt set b2='JVJGA13TXG' where id=8; -update noar ti set b2='JVJGA13TXG' where id=8; -update noar tt set b0='K07DD' where id=9; -update noar ti set b0='K07DD' where id=9; -update noar tt set b1='0DOL50' where id=9; -update noar ti set b1='0DOL50' where id=9; -update noar tt set b2='AKSCKJCMCP31EEULWVGME' where id=9; -update noar ti set b2='AKSCKJCMCP31EEULWVGME' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 tinyblob null, - b1 blob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='M0WI88R27XF17NNSYV4MWD4EHFYT4ZN' where id=1; -update noar ti set b0='M0WI88R27XF17NNSYV4MWD4EHFYT4ZN' where id=1; -update noar tt set b1='7B154ZQPG3CP500HVK6796PQ469Z' where id=1; -update noar ti set b1='7B154ZQPG3CP500HVK6796PQ469Z' where id=1; -update noar tt set b2='ZSOS2GSH2H6KDOYLQUHUC5FMDW5B6N' where id=1; -update noar ti set b2='ZSOS2GSH2H6KDOYLQUHUC5FMDW5B6N' where id=1; -update noar tt set b0='0JED16Q9M3OYDCE9ADWIT' where id=2; -update noar ti set b0='0JED16Q9M3OYDCE9ADWIT' where id=2; -update noar tt set b1='ISFL7F' where id=2; -update noar ti set b1='ISFL7F' where id=2; -update noar tt set b2='JMWKPL6H84T89CIXQSCBS8Y' where id=2; -update noar ti set b2='JMWKPL6H84T89CIXQSCBS8Y' where id=2; -update noar tt set b0='0B' where id=3; -update noar ti set b0='0B' where id=3; -update noar tt set b1='2Q' where id=3; -update noar ti set b1='2Q' where id=3; -update noar tt set b2='KLD' where id=3; -update noar ti set b2='KLD' where id=3; -update noar tt set b0='9YCRAMCH5VVJNX1777X9NOW5GWLR45' where id=4; -update noar ti set b0='9YCRAMCH5VVJNX1777X9NOW5GWLR45' where id=4; -update noar tt set b1='VTHEJP' where id=4; -update noar ti set b1='VTHEJP' where id=4; -update noar tt set b2='QY4JBID6XQJE' where id=4; -update noar ti set b2='QY4JBID6XQJE' where id=4; -update noar tt set b0='D2X9' where id=5; -update noar ti set b0='D2X9' where id=5; -update noar tt set b1='Y7V3O80H1460PLM1' where id=5; -update noar ti set b1='Y7V3O80H1460PLM1' where id=5; -update noar tt set b2='GK8F0SW6D9C35' where id=5; -update noar ti set b2='GK8F0SW6D9C35' where id=5; -update noar tt set b0='HBL6AF6AUDGJU1P2L4X7FJ2KDQY' where id=6; -update noar ti set b0='HBL6AF6AUDGJU1P2L4X7FJ2KDQY' where id=6; -update noar tt set b1='RVNZ660' where id=6; -update noar ti set b1='RVNZ660' where id=6; -update noar tt set b2='DQM3' where id=6; -update noar ti set b2='DQM3' where id=6; -update noar tt set b0='F12SFLDWC5GIUS' where id=7; -update noar ti set b0='F12SFLDWC5GIUS' where id=7; -update noar tt set b1='KNU' where id=7; -update noar ti set b1='KNU' where id=7; -update noar tt set b2='KKBEDHEZCQDMJIJZMJ1UQ12ARK916O' where id=7; -update noar ti set b2='KKBEDHEZCQDMJIJZMJ1UQ12ARK916O' where id=7; -update noar tt set b0='X75C7ZY1AT' where id=8; -update noar ti set b0='X75C7ZY1AT' where id=8; -update noar tt set b1='TH7KMW1IO9JRKXQR2NBE9X85S554NB1' where id=8; -update noar ti set b1='TH7KMW1IO9JRKXQR2NBE9X85S554NB1' where id=8; -update noar tt set b2='T1UBOPGPW4C8A95L3UW96VK7UCEGBQC' where id=8; -update noar ti set b2='T1UBOPGPW4C8A95L3UW96VK7UCEGBQC' where id=8; -update noar tt set b0='ZVSQRQV' where id=9; -update noar ti set b0='ZVSQRQV' where id=9; -update noar tt set b1='ED1WY0SU' where id=9; -update noar ti set b1='ED1WY0SU' where id=9; -update noar tt set b2='93A58OVP0SQPZAYWU6FFQO2WHAJW3' where id=9; -update noar ti set b2='93A58OVP0SQPZAYWU6FFQO2WHAJW3' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 tinyblob not null, - b1 blob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='PBZ5' where id=1; -update noar ti set b0='PBZ5' where id=1; -update noar tt set b1='WA4D' where id=1; -update noar ti set b1='WA4D' where id=1; -update noar tt set b2='5X22DH9QMGE6GL423VVZSX9SEL6D9W' where id=1; -update noar ti set b2='5X22DH9QMGE6GL423VVZSX9SEL6D9W' where id=1; -update noar tt set b0='5TDZI1NG8LA7' where id=2; -update noar ti set b0='5TDZI1NG8LA7' where id=2; -update noar tt set b1='DK6I6YQQAKU' where id=2; -update noar ti set b1='DK6I6YQQAKU' where id=2; -update noar tt set b2='QLUP' where id=2; -update noar ti set b2='QLUP' where id=2; -update noar tt set b0='NDU7RWPL6HLW2TNTQMHSUJ3' where id=3; -update noar ti set b0='NDU7RWPL6HLW2TNTQMHSUJ3' where id=3; -update noar tt set b1='XKSPE0UZP7KX7' where id=3; -update noar ti set b1='XKSPE0UZP7KX7' where id=3; -update noar tt set b2='0UFZOQ9V7U0RI1EYA9A1' where id=3; -update noar ti set b2='0UFZOQ9V7U0RI1EYA9A1' where id=3; -update noar tt set b0='Z1BMVZXFSLPWMKARLIJ3C521MH8R0' where id=4; -update noar ti set b0='Z1BMVZXFSLPWMKARLIJ3C521MH8R0' where id=4; -update noar tt set b1='J22MX2IK8OG' where id=4; -update noar ti set b1='J22MX2IK8OG' where id=4; -update noar tt set b2='4W' where id=4; -update noar ti set b2='4W' where id=4; -update noar tt set b0='C2KAH' where id=5; -update noar ti set b0='C2KAH' where id=5; -update noar tt set b1='WF8C0Z9H7X6486S335GUK9RGZJTQ8' where id=5; -update noar ti set b1='WF8C0Z9H7X6486S335GUK9RGZJTQ8' where id=5; -update noar tt set b2='PFKHD013QZ7L' where id=5; -update noar ti set b2='PFKHD013QZ7L' where id=5; -update noar tt set b0='4HJ8EFFYXPWXDB5IFZTYYA2' where id=6; -update noar ti set b0='4HJ8EFFYXPWXDB5IFZTYYA2' where id=6; -update noar tt set b1='4DFR9JEE9AD7193OUYVA9Z67JK3YR57M' where id=6; -update noar ti set b1='4DFR9JEE9AD7193OUYVA9Z67JK3YR57M' where id=6; -update noar tt set b2='GKDATR4GK5BQ5IHFQ8NJJR2' where id=6; -update noar ti set b2='GKDATR4GK5BQ5IHFQ8NJJR2' where id=6; -update noar tt set b0='48TDHZ' where id=7; -update noar ti set b0='48TDHZ' where id=7; -update noar tt set b1='FV2GTDI0QI0JC19' where id=7; -update noar ti set b1='FV2GTDI0QI0JC19' where id=7; -update noar tt set b2='JG8HXRTBB5YLSBM40PAOQW6LLSX9W3Y' where id=7; -update noar ti set b2='JG8HXRTBB5YLSBM40PAOQW6LLSX9W3Y' where id=7; -update noar tt set b0='SHKGZWRYV2EY2C4NOVBV0Z6QL77TT' where id=8; -update noar ti set b0='SHKGZWRYV2EY2C4NOVBV0Z6QL77TT' where id=8; -update noar tt set b1='LAJ37V0' where id=8; -update noar ti set b1='LAJ37V0' where id=8; -update noar tt set b2='31HVRWD3ROXFP7O5PJMC' where id=8; -update noar ti set b2='31HVRWD3ROXFP7O5PJMC' where id=8; -update noar tt set b0='YXAL3S6DOGZ4ZEUVO02LG' where id=9; -update noar ti set b0='YXAL3S6DOGZ4ZEUVO02LG' where id=9; -update noar tt set b1='G' where id=9; -update noar ti set b1='G' where id=9; -update noar tt set b2='46HIP9JK' where id=9; -update noar ti set b2='46HIP9JK' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 tinyblob null, - b1 blob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='BXJ7QD5CN60DC' where id=1; -update noar ti set b0='BXJ7QD5CN60DC' where id=1; -update noar tt set b1='SR7XRP327RKAHI0BSV2GQF9RXYO' where id=1; -update noar ti set b1='SR7XRP327RKAHI0BSV2GQF9RXYO' where id=1; -update noar tt set b2='NCPT4NVNV' where id=1; -update noar ti set b2='NCPT4NVNV' where id=1; -update noar tt set b0='TV4PGD9W3CJM1OANPKZDFKN8WNQYJNPN' where id=2; -update noar ti set b0='TV4PGD9W3CJM1OANPKZDFKN8WNQYJNPN' where id=2; -update noar tt set b1='8RI30V3ZQFAII43XWLCYB6TSI8' where id=2; -update noar ti set b1='8RI30V3ZQFAII43XWLCYB6TSI8' where id=2; -update noar tt set b2='LQO69OFXE2QSTP' where id=2; -update noar ti set b2='LQO69OFXE2QSTP' where id=2; -update noar tt set b0='QB4KJUGZSM' where id=3; -update noar ti set b0='QB4KJUGZSM' where id=3; -update noar tt set b1='3VCV77A89B8ECEGVQ6Y2GT51YFBCHN' where id=3; -update noar ti set b1='3VCV77A89B8ECEGVQ6Y2GT51YFBCHN' where id=3; -update noar tt set b2='DX0N7V13XEM009JORY262' where id=3; -update noar ti set b2='DX0N7V13XEM009JORY262' where id=3; -update noar tt set b0='HIG8U2GHT76BF8QRAB8H0949N' where id=4; -update noar ti set b0='HIG8U2GHT76BF8QRAB8H0949N' where id=4; -update noar tt set b1='9D6ESING7D2JSCM66JHARHIFFA8BBO9' where id=4; -update noar ti set b1='9D6ESING7D2JSCM66JHARHIFFA8BBO9' where id=4; -update noar tt set b2='I' where id=4; -update noar ti set b2='I' where id=4; -update noar tt set b0='LFFU3M3R23883RIO8Z00RXFF6OI7' where id=5; -update noar ti set b0='LFFU3M3R23883RIO8Z00RXFF6OI7' where id=5; -update noar tt set b1='943M5PMWQ' where id=5; -update noar ti set b1='943M5PMWQ' where id=5; -update noar tt set b2='08' where id=5; -update noar ti set b2='08' where id=5; -update noar tt set b0='PUQC49FYLWKBPV' where id=6; -update noar ti set b0='PUQC49FYLWKBPV' where id=6; -update noar tt set b1='LDVP4D7GYGHR33E' where id=6; -update noar ti set b1='LDVP4D7GYGHR33E' where id=6; -update noar tt set b2='9RDVM7GDHUGWPK7E8Q7IQ0' where id=6; -update noar ti set b2='9RDVM7GDHUGWPK7E8Q7IQ0' where id=6; -update noar tt set b0='E1U1N' where id=7; -update noar ti set b0='E1U1N' where id=7; -update noar tt set b1='KR68MDP85H1E' where id=7; -update noar ti set b1='KR68MDP85H1E' where id=7; -update noar tt set b2='3OGM7' where id=7; -update noar ti set b2='3OGM7' where id=7; -update noar tt set b0='96GPPR2SWZ0HGNLT7VWHPVMJF3S85W9' where id=8; -update noar ti set b0='96GPPR2SWZ0HGNLT7VWHPVMJF3S85W9' where id=8; -update noar tt set b1='N77AE7G57H2VW0PY' where id=8; -update noar ti set b1='N77AE7G57H2VW0PY' where id=8; -update noar tt set b2='5YCO' where id=8; -update noar ti set b2='5YCO' where id=8; -update noar tt set b0='CCY' where id=9; -update noar ti set b0='CCY' where id=9; -update noar tt set b1='MW7DKSWJV9KQA8IHRDI' where id=9; -update noar ti set b1='MW7DKSWJV9KQA8IHRDI' where id=9; -update noar tt set b2='2UVBD7RV9OQ1ET7YX4IU' where id=9; -update noar ti set b2='2UVBD7RV9OQ1ET7YX4IU' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 tinyblob not null, - b1 blob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='P3OR865OZCUSETY5' where id=1; -update noar ti set b0='P3OR865OZCUSETY5' where id=1; -update noar tt set b1='VIOG' where id=1; -update noar ti set b1='VIOG' where id=1; -update noar tt set b2='250TIVPKIXMPZ1C6Z5Y' where id=1; -update noar ti set b2='250TIVPKIXMPZ1C6Z5Y' where id=1; -update noar tt set b0='VM7I6NPR1XJN5JCHSUEH8PO38E0' where id=2; -update noar ti set b0='VM7I6NPR1XJN5JCHSUEH8PO38E0' where id=2; -update noar tt set b1='H' where id=2; -update noar ti set b1='H' where id=2; -update noar tt set b2='0P2NI' where id=2; -update noar ti set b2='0P2NI' where id=2; -update noar tt set b0='IGUVHY8524WPPGDPX5Q727IWK2' where id=3; -update noar ti set b0='IGUVHY8524WPPGDPX5Q727IWK2' where id=3; -update noar tt set b1='6TRDXA1NGYVYP8MU2PWR6Q33' where id=3; -update noar ti set b1='6TRDXA1NGYVYP8MU2PWR6Q33' where id=3; -update noar tt set b2='CDBAZME9LHTJ7SDMSQIPXT4AK' where id=3; -update noar ti set b2='CDBAZME9LHTJ7SDMSQIPXT4AK' where id=3; -update noar tt set b0='E17Q0M0GVPWZFVUPALGLF7Z' where id=4; -update noar ti set b0='E17Q0M0GVPWZFVUPALGLF7Z' where id=4; -update noar tt set b1='B138' where id=4; -update noar ti set b1='B138' where id=4; -update noar tt set b2='K28OT3' where id=4; -update noar ti set b2='K28OT3' where id=4; -update noar tt set b0='799NAUH9LZ6DQ2YM4YBDJXK0UP5C' where id=5; -update noar ti set b0='799NAUH9LZ6DQ2YM4YBDJXK0UP5C' where id=5; -update noar tt set b1='6ZN7TJLGBMFMI54KDBYH1' where id=5; -update noar ti set b1='6ZN7TJLGBMFMI54KDBYH1' where id=5; -update noar tt set b2='L3WOXG7WTTXC3IV' where id=5; -update noar ti set b2='L3WOXG7WTTXC3IV' where id=5; -update noar tt set b0='6DJX9N6ILL5TKHDKGEQFVFF3BT4' where id=6; -update noar ti set b0='6DJX9N6ILL5TKHDKGEQFVFF3BT4' where id=6; -update noar tt set b1='64MY4' where id=6; -update noar ti set b1='64MY4' where id=6; -update noar tt set b2='GOEJLSUYTIODH6NRU4N2ZQLV69EKRKU' where id=6; -update noar ti set b2='GOEJLSUYTIODH6NRU4N2ZQLV69EKRKU' where id=6; -update noar tt set b0='3M' where id=7; -update noar ti set b0='3M' where id=7; -update noar tt set b1='DZ88RA0VGO9OQAP1B877TIIJ' where id=7; -update noar ti set b1='DZ88RA0VGO9OQAP1B877TIIJ' where id=7; -update noar tt set b2='P7X3Y0U09' where id=7; -update noar ti set b2='P7X3Y0U09' where id=7; -update noar tt set b0='L1LTSJSTTAN' where id=8; -update noar ti set b0='L1LTSJSTTAN' where id=8; -update noar tt set b1='DIJE7V2X273ZJ5Q46LK526R8XAT0CD' where id=8; -update noar ti set b1='DIJE7V2X273ZJ5Q46LK526R8XAT0CD' where id=8; -update noar tt set b2='HDUWY57FI15DVFMH1X' where id=8; -update noar ti set b2='HDUWY57FI15DVFMH1X' where id=8; -update noar tt set b0='LWLFO7R2QHKNV87FR7S' where id=9; -update noar ti set b0='LWLFO7R2QHKNV87FR7S' where id=9; -update noar tt set b1='2RZUVK3S31BP6FB6Y0HSBW1NQ' where id=9; -update noar ti set b1='2RZUVK3S31BP6FB6Y0HSBW1NQ' where id=9; -update noar tt set b2='ZUY' where id=9; -update noar ti set b2='ZUY' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 tinyblob null, - b1 blob null, - b2 text null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='N5FAV' where id=1; -update noar ti set b0='N5FAV' where id=1; -update noar tt set b1='RYFWXW1F9RL' where id=1; -update noar ti set b1='RYFWXW1F9RL' where id=1; -update noar tt set b2='7DPV6J2QCEC5ADBFD3LGHEPQ45' where id=1; -update noar ti set b2='7DPV6J2QCEC5ADBFD3LGHEPQ45' where id=1; -update noar tt set b0='JIPOEWS3URK01XP4' where id=2; -update noar ti set b0='JIPOEWS3URK01XP4' where id=2; -update noar tt set b1='YOS5YFF2TLF' where id=2; -update noar ti set b1='YOS5YFF2TLF' where id=2; -update noar tt set b2='37NBJ61XX81S7MA1AYNE8JATUVML' where id=2; -update noar ti set b2='37NBJ61XX81S7MA1AYNE8JATUVML' where id=2; -update noar tt set b0='QQAF5MC' where id=3; -update noar ti set b0='QQAF5MC' where id=3; -update noar tt set b1='DY38O7X13Q9NQO435UNGT2GETFVEO80' where id=3; -update noar ti set b1='DY38O7X13Q9NQO435UNGT2GETFVEO80' where id=3; -update noar tt set b2='6JQECIJEBHAZ4XX45R6GUW19XG' where id=3; -update noar ti set b2='6JQECIJEBHAZ4XX45R6GUW19XG' where id=3; -update noar tt set b0='24AJA' where id=4; -update noar ti set b0='24AJA' where id=4; -update noar tt set b1='81E25ALZALDIW7SL2FOYANUMI0BEM1MD' where id=4; -update noar ti set b1='81E25ALZALDIW7SL2FOYANUMI0BEM1MD' where id=4; -update noar tt set b2='3BA2X' where id=4; -update noar ti set b2='3BA2X' where id=4; -update noar tt set b0='BNKHC8BMS5H28LNPCLY3DPJG0E86' where id=5; -update noar ti set b0='BNKHC8BMS5H28LNPCLY3DPJG0E86' where id=5; -update noar tt set b1='9CTRWMLS1FU634SKTZ0BHX' where id=5; -update noar ti set b1='9CTRWMLS1FU634SKTZ0BHX' where id=5; -update noar tt set b2='ZHIFCL6FCTUGV' where id=5; -update noar ti set b2='ZHIFCL6FCTUGV' where id=5; -update noar tt set b0='DQ9BCIUOL7UOB' where id=6; -update noar ti set b0='DQ9BCIUOL7UOB' where id=6; -update noar tt set b1='2Q5K2JDNDNMB79GEZO8S9E6SMU' where id=6; -update noar ti set b1='2Q5K2JDNDNMB79GEZO8S9E6SMU' where id=6; -update noar tt set b2='292UMJRNFY13ROE6ADFOF' where id=6; -update noar ti set b2='292UMJRNFY13ROE6ADFOF' where id=6; -update noar tt set b0='V1GX25GBFALLY0ANX95G454SE4F6H' where id=7; -update noar ti set b0='V1GX25GBFALLY0ANX95G454SE4F6H' where id=7; -update noar tt set b1='2OJI3LOTMTT2OB60P0N087EYP3' where id=7; -update noar ti set b1='2OJI3LOTMTT2OB60P0N087EYP3' where id=7; -update noar tt set b2='WS' where id=7; -update noar ti set b2='WS' where id=7; -update noar tt set b0='0Y5IB6UIQIKT58' where id=8; -update noar ti set b0='0Y5IB6UIQIKT58' where id=8; -update noar tt set b1='KIX01AKQWO8UAO4XBTA0' where id=8; -update noar ti set b1='KIX01AKQWO8UAO4XBTA0' where id=8; -update noar tt set b2='H0J8RBH3DTSM1XZ9CJZCJHEHFUR' where id=8; -update noar ti set b2='H0J8RBH3DTSM1XZ9CJZCJHEHFUR' where id=8; -update noar tt set b0='1EH88DP9RH' where id=9; -update noar ti set b0='1EH88DP9RH' where id=9; -update noar tt set b1='9N64S3DOR754' where id=9; -update noar ti set b1='9N64S3DOR754' where id=9; -update noar tt set b2='GFGUGUQVHR3JL50XHRY8SL3TEM' where id=9; -update noar ti set b2='GFGUGUQVHR3JL50XHRY8SL3TEM' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 tinyblob not null, - b1 blob not null, - b2 text not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='OHE09CVN1PE6SOQ0TQIDQ966YRR' where id=1; -update noar ti set b0='OHE09CVN1PE6SOQ0TQIDQ966YRR' where id=1; -update noar tt set b1='2OA1ZU9B69P4LKS45N5HY82Q77WE' where id=1; -update noar ti set b1='2OA1ZU9B69P4LKS45N5HY82Q77WE' where id=1; -update noar tt set b2='BDDR6TUDPRAV12BSO42SHUH20SFS1' where id=1; -update noar ti set b2='BDDR6TUDPRAV12BSO42SHUH20SFS1' where id=1; -update noar tt set b0='NATFMK64HO0H1' where id=2; -update noar ti set b0='NATFMK64HO0H1' where id=2; -update noar tt set b1='NRR2H7LOZ87FSGKKDKOMDEFXXV8X15L' where id=2; -update noar ti set b1='NRR2H7LOZ87FSGKKDKOMDEFXXV8X15L' where id=2; -update noar tt set b2='X9RQIR7QAXVLKE' where id=2; -update noar ti set b2='X9RQIR7QAXVLKE' where id=2; -update noar tt set b0='SMXBH03' where id=3; -update noar ti set b0='SMXBH03' where id=3; -update noar tt set b1='LMF8WXBU6UUSS05VLM4AWXNK' where id=3; -update noar ti set b1='LMF8WXBU6UUSS05VLM4AWXNK' where id=3; -update noar tt set b2='K25NU1I1A7G1H37X8J' where id=3; -update noar ti set b2='K25NU1I1A7G1H37X8J' where id=3; -update noar tt set b0='YCAQOFZJORR6GHNPB5W4S5SXLNQHKJ' where id=4; -update noar ti set b0='YCAQOFZJORR6GHNPB5W4S5SXLNQHKJ' where id=4; -update noar tt set b1='UKVS095MVDHQFY' where id=4; -update noar ti set b1='UKVS095MVDHQFY' where id=4; -update noar tt set b2='P8YU3T6VH7RJZP' where id=4; -update noar ti set b2='P8YU3T6VH7RJZP' where id=4; -update noar tt set b0='MQWW3T3OE39ACEE4ORTN7E6E00BKY0WE' where id=5; -update noar ti set b0='MQWW3T3OE39ACEE4ORTN7E6E00BKY0WE' where id=5; -update noar tt set b1='D1W8LB4' where id=5; -update noar ti set b1='D1W8LB4' where id=5; -update noar tt set b2='5PUG6EW1NKHLO' where id=5; -update noar ti set b2='5PUG6EW1NKHLO' where id=5; -update noar tt set b0='MJ' where id=6; -update noar ti set b0='MJ' where id=6; -update noar tt set b1='9T' where id=6; -update noar ti set b1='9T' where id=6; -update noar tt set b2='JS' where id=6; -update noar ti set b2='JS' where id=6; -update noar tt set b0='PWMQ9Y62JLYVANGVNW2P' where id=7; -update noar ti set b0='PWMQ9Y62JLYVANGVNW2P' where id=7; -update noar tt set b1='4LSY6RIPCNCUJMAIW168LP4V1J4GMA' where id=7; -update noar ti set b1='4LSY6RIPCNCUJMAIW168LP4V1J4GMA' where id=7; -update noar tt set b2='2K8VOWIRB' where id=7; -update noar ti set b2='2K8VOWIRB' where id=7; -update noar tt set b0='D3FWQY2N45AD234LMFR6EE' where id=8; -update noar ti set b0='D3FWQY2N45AD234LMFR6EE' where id=8; -update noar tt set b1='D8PFGU6K1FZROQI2OKBPE' where id=8; -update noar ti set b1='D8PFGU6K1FZROQI2OKBPE' where id=8; -update noar tt set b2='UI2QM6RXB63N35PG0ZR6AE' where id=8; -update noar ti set b2='UI2QM6RXB63N35PG0ZR6AE' where id=8; -update noar tt set b0='HW8QRKNLSCZLLKVFI2PPF8UUO8ZB' where id=9; -update noar ti set b0='HW8QRKNLSCZLLKVFI2PPF8UUO8ZB' where id=9; -update noar tt set b1='V5O58RH9M2DTNG1WCNHU6UYI3' where id=9; -update noar ti set b1='V5O58RH9M2DTNG1WCNHU6UYI3' where id=9; -update noar tt set b2='VYTJN24E' where id=9; -update noar ti set b2='VYTJN24E' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 tinyblob null, - b1 mediumblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='7H20YF66A9RXV7GQ5J' where id=1; -update noar ti set b0='7H20YF66A9RXV7GQ5J' where id=1; -update noar tt set b1='IOAO4KGB5V31WO5' where id=1; -update noar ti set b1='IOAO4KGB5V31WO5' where id=1; -update noar tt set b2='RV57OU' where id=1; -update noar ti set b2='RV57OU' where id=1; -update noar tt set b0='OKHLNT1VZWFLDA6V2KX9EBAOF' where id=2; -update noar ti set b0='OKHLNT1VZWFLDA6V2KX9EBAOF' where id=2; -update noar tt set b1='SXLOO2Q3QHBIYJOOF9R5EE35CJV9' where id=2; -update noar ti set b1='SXLOO2Q3QHBIYJOOF9R5EE35CJV9' where id=2; -update noar tt set b2='NLX3M8' where id=2; -update noar ti set b2='NLX3M8' where id=2; -update noar tt set b0='RA9J9RZXZOBMX1' where id=3; -update noar ti set b0='RA9J9RZXZOBMX1' where id=3; -update noar tt set b1='P8TTGU2N4HNZVDT6184YH' where id=3; -update noar ti set b1='P8TTGU2N4HNZVDT6184YH' where id=3; -update noar tt set b2='3' where id=3; -update noar ti set b2='3' where id=3; -update noar tt set b0='D' where id=4; -update noar ti set b0='D' where id=4; -update noar tt set b1='4CY862DE' where id=4; -update noar ti set b1='4CY862DE' where id=4; -update noar tt set b2='HJ6K7T1DOUIJ8FV82LJ5' where id=4; -update noar ti set b2='HJ6K7T1DOUIJ8FV82LJ5' where id=4; -update noar tt set b0='8J0HWDJ120V' where id=5; -update noar ti set b0='8J0HWDJ120V' where id=5; -update noar tt set b1='U3XHYGU5HD' where id=5; -update noar ti set b1='U3XHYGU5HD' where id=5; -update noar tt set b2='SR3CRVL6OV' where id=5; -update noar ti set b2='SR3CRVL6OV' where id=5; -update noar tt set b0='MI' where id=6; -update noar ti set b0='MI' where id=6; -update noar tt set b1='0IA4PJS6DZ' where id=6; -update noar ti set b1='0IA4PJS6DZ' where id=6; -update noar tt set b2='QJHUDCHA4IYE' where id=6; -update noar ti set b2='QJHUDCHA4IYE' where id=6; -update noar tt set b0='SW5E' where id=7; -update noar ti set b0='SW5E' where id=7; -update noar tt set b1='8LETY9NARJSWRKOMD9EPH98WC3CE' where id=7; -update noar ti set b1='8LETY9NARJSWRKOMD9EPH98WC3CE' where id=7; -update noar tt set b2='XZA2174D548YOBREK4XJI' where id=7; -update noar ti set b2='XZA2174D548YOBREK4XJI' where id=7; -update noar tt set b0='KSK' where id=8; -update noar ti set b0='KSK' where id=8; -update noar tt set b1='YS7GP2LEZA22K2T804VTMPPI' where id=8; -update noar ti set b1='YS7GP2LEZA22K2T804VTMPPI' where id=8; -update noar tt set b2='J15HJL0K7E5WLYRBS34RD5SKTAPMOR' where id=8; -update noar ti set b2='J15HJL0K7E5WLYRBS34RD5SKTAPMOR' where id=8; -update noar tt set b0='X8UBULN4DAPQJ4J0SKRF8XIA' where id=9; -update noar ti set b0='X8UBULN4DAPQJ4J0SKRF8XIA' where id=9; -update noar tt set b1='J69B8PDS4PG3HCX6NB0UF2G5YJ92X6' where id=9; -update noar ti set b1='J69B8PDS4PG3HCX6NB0UF2G5YJ92X6' where id=9; -update noar tt set b2='LNLBZUVT51QSB8J154H0GX6OG' where id=9; -update noar ti set b2='LNLBZUVT51QSB8J154H0GX6OG' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 tinyblob not null, - b1 mediumblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='D5NHT94GAYKZ0ZL8WJFOCP8C5Z955F' where id=1; -update noar ti set b0='D5NHT94GAYKZ0ZL8WJFOCP8C5Z955F' where id=1; -update noar tt set b1='E95' where id=1; -update noar ti set b1='E95' where id=1; -update noar tt set b2='E9S2FF4NARNCMNONETF904M547Y5A837' where id=1; -update noar ti set b2='E9S2FF4NARNCMNONETF904M547Y5A837' where id=1; -update noar tt set b0='DMVF21TT7UOOVLZG2M64' where id=2; -update noar ti set b0='DMVF21TT7UOOVLZG2M64' where id=2; -update noar tt set b1='7VVLJ672EB' where id=2; -update noar ti set b1='7VVLJ672EB' where id=2; -update noar tt set b2='K7' where id=2; -update noar ti set b2='K7' where id=2; -update noar tt set b0='NQI3T161XHZN5YHTZWD68SLXTNIN' where id=3; -update noar ti set b0='NQI3T161XHZN5YHTZWD68SLXTNIN' where id=3; -update noar tt set b1='T5I' where id=3; -update noar ti set b1='T5I' where id=3; -update noar tt set b2='20T3' where id=3; -update noar ti set b2='20T3' where id=3; -update noar tt set b0='EOS29XP3SERP0YJ2JAQRJ3' where id=4; -update noar ti set b0='EOS29XP3SERP0YJ2JAQRJ3' where id=4; -update noar tt set b1='QR379A0X6BVCODK1OPRW1LN6FD7PEZ2' where id=4; -update noar ti set b1='QR379A0X6BVCODK1OPRW1LN6FD7PEZ2' where id=4; -update noar tt set b2='82OANMH93' where id=4; -update noar ti set b2='82OANMH93' where id=4; -update noar tt set b0='31FIVXNTDC' where id=5; -update noar ti set b0='31FIVXNTDC' where id=5; -update noar tt set b1='5JZ8PZLP8IU50775QN0WPLMVOL7CJ9S' where id=5; -update noar ti set b1='5JZ8PZLP8IU50775QN0WPLMVOL7CJ9S' where id=5; -update noar tt set b2='EEEOV0XTLKJPEB07ZQ8P0D5O82A4BBTX' where id=5; -update noar ti set b2='EEEOV0XTLKJPEB07ZQ8P0D5O82A4BBTX' where id=5; -update noar tt set b0='AMMWWL6LQEJPRSTJLWFIGWT' where id=6; -update noar ti set b0='AMMWWL6LQEJPRSTJLWFIGWT' where id=6; -update noar tt set b1='HQPQZCS' where id=6; -update noar ti set b1='HQPQZCS' where id=6; -update noar tt set b2='HCVDS7GXPCLFTXB07WQCJX' where id=6; -update noar ti set b2='HCVDS7GXPCLFTXB07WQCJX' where id=6; -update noar tt set b0='OMNW' where id=7; -update noar ti set b0='OMNW' where id=7; -update noar tt set b1='2JTU2WCEE5T0A19' where id=7; -update noar ti set b1='2JTU2WCEE5T0A19' where id=7; -update noar tt set b2='27FB02D29NJBRT6F' where id=7; -update noar ti set b2='27FB02D29NJBRT6F' where id=7; -update noar tt set b0='R' where id=8; -update noar ti set b0='R' where id=8; -update noar tt set b1='FV' where id=8; -update noar ti set b1='FV' where id=8; -update noar tt set b2='QXYW88W2KI23FOGY04' where id=8; -update noar ti set b2='QXYW88W2KI23FOGY04' where id=8; -update noar tt set b0='3G01CANSG3FDFKHOODJKQB6FX' where id=9; -update noar ti set b0='3G01CANSG3FDFKHOODJKQB6FX' where id=9; -update noar tt set b1='UN6KUYV6UFWHVYWQKI7S1DDN6' where id=9; -update noar ti set b1='UN6KUYV6UFWHVYWQKI7S1DDN6' where id=9; -update noar tt set b2='EEUT1VDOTNJMTM5NFJPZH' where id=9; -update noar ti set b2='EEUT1VDOTNJMTM5NFJPZH' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 tinyblob null, - b1 mediumblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='G3V17GK52' where id=1; -update noar ti set b0='G3V17GK52' where id=1; -update noar tt set b1='QHKDP02I65QSN' where id=1; -update noar ti set b1='QHKDP02I65QSN' where id=1; -update noar tt set b2='0JZ0CNQSUBS' where id=1; -update noar ti set b2='0JZ0CNQSUBS' where id=1; -update noar tt set b0='FGH0FPCA02P' where id=2; -update noar ti set b0='FGH0FPCA02P' where id=2; -update noar tt set b1='T5FEBH06R2FOZ40' where id=2; -update noar ti set b1='T5FEBH06R2FOZ40' where id=2; -update noar tt set b2='6' where id=2; -update noar ti set b2='6' where id=2; -update noar tt set b0='6A0XBN3F4DS2V2S' where id=3; -update noar ti set b0='6A0XBN3F4DS2V2S' where id=3; -update noar tt set b1='HGXSH0G3Z7EHQAI09FLJX' where id=3; -update noar ti set b1='HGXSH0G3Z7EHQAI09FLJX' where id=3; -update noar tt set b2='RZ86H6959C4001UMGW5J12WKMV039VH' where id=3; -update noar ti set b2='RZ86H6959C4001UMGW5J12WKMV039VH' where id=3; -update noar tt set b0='3G' where id=4; -update noar ti set b0='3G' where id=4; -update noar tt set b1='2KFCAJ2Q9TG8E3GTL3GSEM28XU6IIC4A' where id=4; -update noar ti set b1='2KFCAJ2Q9TG8E3GTL3GSEM28XU6IIC4A' where id=4; -update noar tt set b2='TFH78N9S' where id=4; -update noar ti set b2='TFH78N9S' where id=4; -update noar tt set b0='FNUJ7W' where id=5; -update noar ti set b0='FNUJ7W' where id=5; -update noar tt set b1='PVOABGSIGWNVQ5Y' where id=5; -update noar ti set b1='PVOABGSIGWNVQ5Y' where id=5; -update noar tt set b2='IJS0H0N92DP9Y8SWNZBAUU' where id=5; -update noar ti set b2='IJS0H0N92DP9Y8SWNZBAUU' where id=5; -update noar tt set b0='AGZHX' where id=6; -update noar ti set b0='AGZHX' where id=6; -update noar tt set b1='KPT3LZVGI' where id=6; -update noar ti set b1='KPT3LZVGI' where id=6; -update noar tt set b2='TD60T4QZJNAGLC1UE299XV' where id=6; -update noar ti set b2='TD60T4QZJNAGLC1UE299XV' where id=6; -update noar tt set b0='NK7ZXDZGGHJ531MUPCB13' where id=7; -update noar ti set b0='NK7ZXDZGGHJ531MUPCB13' where id=7; -update noar tt set b1='789A10YLUFH44S' where id=7; -update noar ti set b1='789A10YLUFH44S' where id=7; -update noar tt set b2='2ZBHBA8PDC7T0RZ93T' where id=7; -update noar ti set b2='2ZBHBA8PDC7T0RZ93T' where id=7; -update noar tt set b0='7XYYW' where id=8; -update noar ti set b0='7XYYW' where id=8; -update noar tt set b1='EJJ' where id=8; -update noar ti set b1='EJJ' where id=8; -update noar tt set b2='TOG0E6BYRKJV' where id=8; -update noar ti set b2='TOG0E6BYRKJV' where id=8; -update noar tt set b0='P94KRHR' where id=9; -update noar ti set b0='P94KRHR' where id=9; -update noar tt set b1='WDGKG7UBRX3FKBC2HR' where id=9; -update noar ti set b1='WDGKG7UBRX3FKBC2HR' where id=9; -update noar tt set b2='HDRRZ8MNM2YQ5LDTS' where id=9; -update noar ti set b2='HDRRZ8MNM2YQ5LDTS' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 tinyblob not null, - b1 mediumblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='LR1F2C5AYWHSULZV972FP0LNDTQ93UEY' where id=1; -update noar ti set b0='LR1F2C5AYWHSULZV972FP0LNDTQ93UEY' where id=1; -update noar tt set b1='VNS2FD255YHT737ZJAXMC56' where id=1; -update noar ti set b1='VNS2FD255YHT737ZJAXMC56' where id=1; -update noar tt set b2='WMCUL9CKIUUL29E11KVCAAB0B' where id=1; -update noar ti set b2='WMCUL9CKIUUL29E11KVCAAB0B' where id=1; -update noar tt set b0='HKU9TSDFCW83P4ADM91QT2SVRQMVV' where id=2; -update noar ti set b0='HKU9TSDFCW83P4ADM91QT2SVRQMVV' where id=2; -update noar tt set b1='THK6Q0PI7NVU9PXBW3RK3IZ1PMB6X3' where id=2; -update noar ti set b1='THK6Q0PI7NVU9PXBW3RK3IZ1PMB6X3' where id=2; -update noar tt set b2='LLVLZ91MUSQXOXFE8BYBC2GSIU3U54XN' where id=2; -update noar ti set b2='LLVLZ91MUSQXOXFE8BYBC2GSIU3U54XN' where id=2; -update noar tt set b0='8DVOSZRLWSTIK' where id=3; -update noar ti set b0='8DVOSZRLWSTIK' where id=3; -update noar tt set b1='2BGTY67YW7KX5TX1U5MD5' where id=3; -update noar ti set b1='2BGTY67YW7KX5TX1U5MD5' where id=3; -update noar tt set b2='UV9UNZDQECM0N2' where id=3; -update noar ti set b2='UV9UNZDQECM0N2' where id=3; -update noar tt set b0='OYXPNG3IALFMOKKTKBZF' where id=4; -update noar ti set b0='OYXPNG3IALFMOKKTKBZF' where id=4; -update noar tt set b1='YEPI66UUA1A240GD48' where id=4; -update noar ti set b1='YEPI66UUA1A240GD48' where id=4; -update noar tt set b2='HE4J4W7ZRZWLZI26XR23' where id=4; -update noar ti set b2='HE4J4W7ZRZWLZI26XR23' where id=4; -update noar tt set b0='130E6Y38TW24D082' where id=5; -update noar ti set b0='130E6Y38TW24D082' where id=5; -update noar tt set b1='VG018IS8ZQN1D' where id=5; -update noar ti set b1='VG018IS8ZQN1D' where id=5; -update noar tt set b2='QH6X8N45BQEG6FD4XHGD2JRAZGN6W6' where id=5; -update noar ti set b2='QH6X8N45BQEG6FD4XHGD2JRAZGN6W6' where id=5; -update noar tt set b0='HZJNJ9QPUC94J' where id=6; -update noar ti set b0='HZJNJ9QPUC94J' where id=6; -update noar tt set b1='12AQKBWP7' where id=6; -update noar ti set b1='12AQKBWP7' where id=6; -update noar tt set b2='LDOGKBAG57B7UCCNAD56V' where id=6; -update noar ti set b2='LDOGKBAG57B7UCCNAD56V' where id=6; -update noar tt set b0='M72' where id=7; -update noar ti set b0='M72' where id=7; -update noar tt set b1='13W65YYJOH49XZ8LE' where id=7; -update noar ti set b1='13W65YYJOH49XZ8LE' where id=7; -update noar tt set b2='CFCY' where id=7; -update noar ti set b2='CFCY' where id=7; -update noar tt set b0='K82JOXYRGMBEONIOXKGI4E3L0J' where id=8; -update noar ti set b0='K82JOXYRGMBEONIOXKGI4E3L0J' where id=8; -update noar tt set b1='BPW' where id=8; -update noar ti set b1='BPW' where id=8; -update noar tt set b2='AB3TYGHITLU260KVRVHUZSALSTLO55C' where id=8; -update noar ti set b2='AB3TYGHITLU260KVRVHUZSALSTLO55C' where id=8; -update noar tt set b0='5KSA3BQ1X1F86XAS' where id=9; -update noar ti set b0='5KSA3BQ1X1F86XAS' where id=9; -update noar tt set b1='6R689A37RVWEZ8RK4' where id=9; -update noar ti set b1='6R689A37RVWEZ8RK4' where id=9; -update noar tt set b2='249XCEBEUHQLF413TJ74LP' where id=9; -update noar ti set b2='249XCEBEUHQLF413TJ74LP' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 tinyblob null, - b1 mediumblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='VCO0JPLDALLG' where id=1; -update noar ti set b0='VCO0JPLDALLG' where id=1; -update noar tt set b1='YZ73XB0JK6XYBGSGAS9MJJ' where id=1; -update noar ti set b1='YZ73XB0JK6XYBGSGAS9MJJ' where id=1; -update noar tt set b2='DUB9P3TDVP2KEI' where id=1; -update noar ti set b2='DUB9P3TDVP2KEI' where id=1; -update noar tt set b0='L1X84LWN8QRDM' where id=2; -update noar ti set b0='L1X84LWN8QRDM' where id=2; -update noar tt set b1='HOR89OUSLFZQ' where id=2; -update noar ti set b1='HOR89OUSLFZQ' where id=2; -update noar tt set b2='II07KOFF5BETPB24O77O8Z' where id=2; -update noar ti set b2='II07KOFF5BETPB24O77O8Z' where id=2; -update noar tt set b0='3C5G9CY6G9BZ50KLHRYE' where id=3; -update noar ti set b0='3C5G9CY6G9BZ50KLHRYE' where id=3; -update noar tt set b1='BOT9A33IKQNQ' where id=3; -update noar ti set b1='BOT9A33IKQNQ' where id=3; -update noar tt set b2='19HXK4IFAMY409SFK00ZPMG' where id=3; -update noar ti set b2='19HXK4IFAMY409SFK00ZPMG' where id=3; -update noar tt set b0='A9MNK5MS60QKEJCRAGF6H55' where id=4; -update noar ti set b0='A9MNK5MS60QKEJCRAGF6H55' where id=4; -update noar tt set b1='BFVYS6M7OO494V6SIV8O7A' where id=4; -update noar ti set b1='BFVYS6M7OO494V6SIV8O7A' where id=4; -update noar tt set b2='Q0ZJKOUJV2Y8WFFYIMV20VKZHASNYL7' where id=4; -update noar ti set b2='Q0ZJKOUJV2Y8WFFYIMV20VKZHASNYL7' where id=4; -update noar tt set b0='YQ5CWFGV4LA5YU' where id=5; -update noar ti set b0='YQ5CWFGV4LA5YU' where id=5; -update noar tt set b1='3VG46KQDCT6EZFRFCT93OGBYP' where id=5; -update noar ti set b1='3VG46KQDCT6EZFRFCT93OGBYP' where id=5; -update noar tt set b2='L0H' where id=5; -update noar ti set b2='L0H' where id=5; -update noar tt set b0='58WDO1GR881BAT6VMOE0JAIO1U8ATM' where id=6; -update noar ti set b0='58WDO1GR881BAT6VMOE0JAIO1U8ATM' where id=6; -update noar tt set b1='W04PPC20CNITELJ24TJE9' where id=6; -update noar ti set b1='W04PPC20CNITELJ24TJE9' where id=6; -update noar tt set b2='FKO06Y1WWP9EF9231X8FSOF' where id=6; -update noar ti set b2='FKO06Y1WWP9EF9231X8FSOF' where id=6; -update noar tt set b0='6YV3CFTPOQMYFJAP74132DZ' where id=7; -update noar ti set b0='6YV3CFTPOQMYFJAP74132DZ' where id=7; -update noar tt set b1='NPZCGPF1KDZAZ8THVONNE' where id=7; -update noar ti set b1='NPZCGPF1KDZAZ8THVONNE' where id=7; -update noar tt set b2='FXFENBCXULQ6THLA5N1RKX' where id=7; -update noar ti set b2='FXFENBCXULQ6THLA5N1RKX' where id=7; -update noar tt set b0='Q6FWAJY98GNLU8RH4' where id=8; -update noar ti set b0='Q6FWAJY98GNLU8RH4' where id=8; -update noar tt set b1='38ZHPSGDNKDMVCDJ4SV0LLKGS' where id=8; -update noar ti set b1='38ZHPSGDNKDMVCDJ4SV0LLKGS' where id=8; -update noar tt set b2='X8P14PZT9PTRVF' where id=8; -update noar ti set b2='X8P14PZT9PTRVF' where id=8; -update noar tt set b0='SDRKTAPHLVRD13SOAKS0WRCE' where id=9; -update noar ti set b0='SDRKTAPHLVRD13SOAKS0WRCE' where id=9; -update noar tt set b1='XXCT9B8IUTBHFEMQ7TH6L30XK9CP5' where id=9; -update noar ti set b1='XXCT9B8IUTBHFEMQ7TH6L30XK9CP5' where id=9; -update noar tt set b2='DC0L9V' where id=9; -update noar ti set b2='DC0L9V' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 tinyblob not null, - b1 mediumblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='8H5QEMP8Z93WE6J6H244WHNPLMNYIYA' where id=1; -update noar ti set b0='8H5QEMP8Z93WE6J6H244WHNPLMNYIYA' where id=1; -update noar tt set b1='M3Y4OT4' where id=1; -update noar ti set b1='M3Y4OT4' where id=1; -update noar tt set b2='0YFUJA8U3TZOPC6RXLJ3F69ZUPZYQPT' where id=1; -update noar ti set b2='0YFUJA8U3TZOPC6RXLJ3F69ZUPZYQPT' where id=1; -update noar tt set b0='FGGBOVA2XVGBH1E42QILO1N1BQ8CXBZI' where id=2; -update noar ti set b0='FGGBOVA2XVGBH1E42QILO1N1BQ8CXBZI' where id=2; -update noar tt set b1='VJ3D0R0JKTQ' where id=2; -update noar ti set b1='VJ3D0R0JKTQ' where id=2; -update noar tt set b2='8H8MPL0OG2CJJV5OQX05TNSUDVQL' where id=2; -update noar ti set b2='8H8MPL0OG2CJJV5OQX05TNSUDVQL' where id=2; -update noar tt set b0='6L12YITZKF4LDG44HCUIII78K' where id=3; -update noar ti set b0='6L12YITZKF4LDG44HCUIII78K' where id=3; -update noar tt set b1='WEX3OO556LIWHS8DPO6BBYTUY2X2' where id=3; -update noar ti set b1='WEX3OO556LIWHS8DPO6BBYTUY2X2' where id=3; -update noar tt set b2='NW' where id=3; -update noar ti set b2='NW' where id=3; -update noar tt set b0='MYDT5X143' where id=4; -update noar ti set b0='MYDT5X143' where id=4; -update noar tt set b1='04WKK4YFP4C807FZNQZPSVT' where id=4; -update noar ti set b1='04WKK4YFP4C807FZNQZPSVT' where id=4; -update noar tt set b2='R92M8YAE9YHF8JWHTU3YU' where id=4; -update noar ti set b2='R92M8YAE9YHF8JWHTU3YU' where id=4; -update noar tt set b0='PSFXPY89A39M0' where id=5; -update noar ti set b0='PSFXPY89A39M0' where id=5; -update noar tt set b1='T9QQ2P57OU67CJY' where id=5; -update noar ti set b1='T9QQ2P57OU67CJY' where id=5; -update noar tt set b2='MGYSY6VJUR4' where id=5; -update noar ti set b2='MGYSY6VJUR4' where id=5; -update noar tt set b0='8W37RYQ4JM9ITCP10PFJ5U2' where id=6; -update noar ti set b0='8W37RYQ4JM9ITCP10PFJ5U2' where id=6; -update noar tt set b1='H5O79F36HZS' where id=6; -update noar ti set b1='H5O79F36HZS' where id=6; -update noar tt set b2='WB9' where id=6; -update noar ti set b2='WB9' where id=6; -update noar tt set b0='AK7WTU9IVQNJXCE66XHKHYDQN0OE' where id=7; -update noar ti set b0='AK7WTU9IVQNJXCE66XHKHYDQN0OE' where id=7; -update noar tt set b1='UCJEYUVAOSM1UFXZPKPLOK4KOBFNLXP' where id=7; -update noar ti set b1='UCJEYUVAOSM1UFXZPKPLOK4KOBFNLXP' where id=7; -update noar tt set b2='23WBK' where id=7; -update noar ti set b2='23WBK' where id=7; -update noar tt set b0='Q276ZA93FRTBQNPYFWBI4Y2VF7N3' where id=8; -update noar ti set b0='Q276ZA93FRTBQNPYFWBI4Y2VF7N3' where id=8; -update noar tt set b1='97BBSW4XFX1C95TLO1T1LRAZLQ9NFN5A' where id=8; -update noar ti set b1='97BBSW4XFX1C95TLO1T1LRAZLQ9NFN5A' where id=8; -update noar tt set b2='DUKXEJK0JAC6W62BTZ5E' where id=8; -update noar ti set b2='DUKXEJK0JAC6W62BTZ5E' where id=8; -update noar tt set b0='M49S057P13EDI3DGCUS6UTA9N' where id=9; -update noar ti set b0='M49S057P13EDI3DGCUS6UTA9N' where id=9; -update noar tt set b1='BIT6W9BP45A04HII58G' where id=9; -update noar ti set b1='BIT6W9BP45A04HII58G' where id=9; -update noar tt set b2='0X24QVI' where id=9; -update noar ti set b2='0X24QVI' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 tinyblob null, - b1 mediumblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='RC3FJ0G' where id=1; -update noar ti set b0='RC3FJ0G' where id=1; -update noar tt set b1='4LWJ05NF59SO8A7N55B' where id=1; -update noar ti set b1='4LWJ05NF59SO8A7N55B' where id=1; -update noar tt set b2='V388YCB879EAURE' where id=1; -update noar ti set b2='V388YCB879EAURE' where id=1; -update noar tt set b0='GUUFRAJ' where id=2; -update noar ti set b0='GUUFRAJ' where id=2; -update noar tt set b1='YISROZ786YAUVSM' where id=2; -update noar ti set b1='YISROZ786YAUVSM' where id=2; -update noar tt set b2='FZ779HQ5MV1' where id=2; -update noar ti set b2='FZ779HQ5MV1' where id=2; -update noar tt set b0='TSXHOQGC4MOLERHFF7XCTKZK9U0' where id=3; -update noar ti set b0='TSXHOQGC4MOLERHFF7XCTKZK9U0' where id=3; -update noar tt set b1='TP9FIWYOXXOORH7ZFFT9X2UXJJR' where id=3; -update noar ti set b1='TP9FIWYOXXOORH7ZFFT9X2UXJJR' where id=3; -update noar tt set b2='ORZ37L3X9H101WX' where id=3; -update noar ti set b2='ORZ37L3X9H101WX' where id=3; -update noar tt set b0='8' where id=4; -update noar ti set b0='8' where id=4; -update noar tt set b1='QHVO7KU808904CP7MB503ELDJ79YKZ' where id=4; -update noar ti set b1='QHVO7KU808904CP7MB503ELDJ79YKZ' where id=4; -update noar tt set b2='ED0USKHRYPZWWNOHR6BJ' where id=4; -update noar ti set b2='ED0USKHRYPZWWNOHR6BJ' where id=4; -update noar tt set b0='F7UPEJ6THCHF' where id=5; -update noar ti set b0='F7UPEJ6THCHF' where id=5; -update noar tt set b1='UVGYAJTXTSD16SOSTB03' where id=5; -update noar ti set b1='UVGYAJTXTSD16SOSTB03' where id=5; -update noar tt set b2='382KK8' where id=5; -update noar ti set b2='382KK8' where id=5; -update noar tt set b0='ATAP386S4Q7XL5' where id=6; -update noar ti set b0='ATAP386S4Q7XL5' where id=6; -update noar tt set b1='J' where id=6; -update noar ti set b1='J' where id=6; -update noar tt set b2='QWB7VVS8VSVMWM' where id=6; -update noar ti set b2='QWB7VVS8VSVMWM' where id=6; -update noar tt set b0='Q42T35O3MXCHH0XUGPO0BE1T2Z3Y25I9' where id=7; -update noar ti set b0='Q42T35O3MXCHH0XUGPO0BE1T2Z3Y25I9' where id=7; -update noar tt set b1='VD5W0ZS' where id=7; -update noar ti set b1='VD5W0ZS' where id=7; -update noar tt set b2='Q7WDRS9XBHCF' where id=7; -update noar ti set b2='Q7WDRS9XBHCF' where id=7; -update noar tt set b0='U6DUHCZGKKZNAANMYNVZT7SVY8' where id=8; -update noar ti set b0='U6DUHCZGKKZNAANMYNVZT7SVY8' where id=8; -update noar tt set b1='M' where id=8; -update noar ti set b1='M' where id=8; -update noar tt set b2='3NXRJ' where id=8; -update noar ti set b2='3NXRJ' where id=8; -update noar tt set b0='99N97C7' where id=9; -update noar ti set b0='99N97C7' where id=9; -update noar tt set b1='7JKF57BEDGDX5DJ5PYV182F4Q5M8CUJ0' where id=9; -update noar ti set b1='7JKF57BEDGDX5DJ5PYV182F4Q5M8CUJ0' where id=9; -update noar tt set b2='VDB' where id=9; -update noar ti set b2='VDB' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 tinyblob not null, - b1 mediumblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='XKDY8ACXOX8ENOXXR8RYBH8FAMAL6N' where id=1; -update noar ti set b0='XKDY8ACXOX8ENOXXR8RYBH8FAMAL6N' where id=1; -update noar tt set b1='IMHPNCEL9' where id=1; -update noar ti set b1='IMHPNCEL9' where id=1; -update noar tt set b2='L7L62L800Z4WVCIHCVINV94XL' where id=1; -update noar ti set b2='L7L62L800Z4WVCIHCVINV94XL' where id=1; -update noar tt set b0='RBPSPQWGWPLTHQ6F' where id=2; -update noar ti set b0='RBPSPQWGWPLTHQ6F' where id=2; -update noar tt set b1='8W2JYOK4B3' where id=2; -update noar ti set b1='8W2JYOK4B3' where id=2; -update noar tt set b2='8RW6127MR8K3ZME6LSCPSY9QRMM' where id=2; -update noar ti set b2='8RW6127MR8K3ZME6LSCPSY9QRMM' where id=2; -update noar tt set b0='ZJFQLEMC9J3MUPKH02XRFPKJ1GPA2' where id=3; -update noar ti set b0='ZJFQLEMC9J3MUPKH02XRFPKJ1GPA2' where id=3; -update noar tt set b1='7VV561KMJX7VRDGAKBZBMPRA' where id=3; -update noar ti set b1='7VV561KMJX7VRDGAKBZBMPRA' where id=3; -update noar tt set b2='HO45A8DY59MXR' where id=3; -update noar ti set b2='HO45A8DY59MXR' where id=3; -update noar tt set b0='9YGFHMPAOJT' where id=4; -update noar ti set b0='9YGFHMPAOJT' where id=4; -update noar tt set b1='Q783BWI451RKUTIUORM0A1XH1D' where id=4; -update noar ti set b1='Q783BWI451RKUTIUORM0A1XH1D' where id=4; -update noar tt set b2='4Q4QGYUCLA8P2' where id=4; -update noar ti set b2='4Q4QGYUCLA8P2' where id=4; -update noar tt set b0='Z2LI0DW41QA3NF335ISKDALN94ID1B' where id=5; -update noar ti set b0='Z2LI0DW41QA3NF335ISKDALN94ID1B' where id=5; -update noar tt set b1='94X08DXN3JGSN6OX5TNY' where id=5; -update noar ti set b1='94X08DXN3JGSN6OX5TNY' where id=5; -update noar tt set b2='08XHC0A9QE61JNX0H8M65J85XT1RB' where id=5; -update noar ti set b2='08XHC0A9QE61JNX0H8M65J85XT1RB' where id=5; -update noar tt set b0='1FIX84TDQI' where id=6; -update noar ti set b0='1FIX84TDQI' where id=6; -update noar tt set b1='CJ' where id=6; -update noar ti set b1='CJ' where id=6; -update noar tt set b2='B3DWKDMOHVKR' where id=6; -update noar ti set b2='B3DWKDMOHVKR' where id=6; -update noar tt set b0='AAKRU7H1L5W69XQ' where id=7; -update noar ti set b0='AAKRU7H1L5W69XQ' where id=7; -update noar tt set b1='GKX5U1G9GNZ1NNM4JE' where id=7; -update noar ti set b1='GKX5U1G9GNZ1NNM4JE' where id=7; -update noar tt set b2='QZBFHDQM23R3O' where id=7; -update noar ti set b2='QZBFHDQM23R3O' where id=7; -update noar tt set b0='ZRK9EJLOLDOYIBUAJUUKO' where id=8; -update noar ti set b0='ZRK9EJLOLDOYIBUAJUUKO' where id=8; -update noar tt set b1='7XSY' where id=8; -update noar ti set b1='7XSY' where id=8; -update noar tt set b2='R996UUTNJO99CM8' where id=8; -update noar ti set b2='R996UUTNJO99CM8' where id=8; -update noar tt set b0='582YZLBRXAEEDBS' where id=9; -update noar ti set b0='582YZLBRXAEEDBS' where id=9; -update noar tt set b1='IYYTVFADGRGCWS1' where id=9; -update noar ti set b1='IYYTVFADGRGCWS1' where id=9; -update noar tt set b2='D1T' where id=9; -update noar ti set b2='D1T' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 tinyblob null, - b1 mediumblob null, - b2 text null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='WIRORQ4KM9V8XE7PMT3GTSNNMT5' where id=1; -update noar ti set b0='WIRORQ4KM9V8XE7PMT3GTSNNMT5' where id=1; -update noar tt set b1='A3251TI36XPC9HO2U' where id=1; -update noar ti set b1='A3251TI36XPC9HO2U' where id=1; -update noar tt set b2='DQUMFTXH3F8O2GAK310VY2WE7H' where id=1; -update noar ti set b2='DQUMFTXH3F8O2GAK310VY2WE7H' where id=1; -update noar tt set b0='L' where id=2; -update noar ti set b0='L' where id=2; -update noar tt set b1='64TO' where id=2; -update noar ti set b1='64TO' where id=2; -update noar tt set b2='RG5ZJ18J3T259N193KHQ' where id=2; -update noar ti set b2='RG5ZJ18J3T259N193KHQ' where id=2; -update noar tt set b0='3KNWN' where id=3; -update noar ti set b0='3KNWN' where id=3; -update noar tt set b1='U8CKKEJT3P6QOFST681FF7' where id=3; -update noar ti set b1='U8CKKEJT3P6QOFST681FF7' where id=3; -update noar tt set b2='NUFA1BREMJPZCKO4RNL4EYCENJ' where id=3; -update noar ti set b2='NUFA1BREMJPZCKO4RNL4EYCENJ' where id=3; -update noar tt set b0='UZYNXGAF' where id=4; -update noar ti set b0='UZYNXGAF' where id=4; -update noar tt set b1='SIVSRI6XXDU' where id=4; -update noar ti set b1='SIVSRI6XXDU' where id=4; -update noar tt set b2='B1V3JA96D' where id=4; -update noar ti set b2='B1V3JA96D' where id=4; -update noar tt set b0='LBU' where id=5; -update noar ti set b0='LBU' where id=5; -update noar tt set b1='R' where id=5; -update noar ti set b1='R' where id=5; -update noar tt set b2='8XXOBX49KD' where id=5; -update noar ti set b2='8XXOBX49KD' where id=5; -update noar tt set b0='0K0RQ1EO3VW0H1L218H8EN64Q' where id=6; -update noar ti set b0='0K0RQ1EO3VW0H1L218H8EN64Q' where id=6; -update noar tt set b1='EZT3PQVTFNRSHIVV5ZCXJXEMG12U1NYN' where id=6; -update noar ti set b1='EZT3PQVTFNRSHIVV5ZCXJXEMG12U1NYN' where id=6; -update noar tt set b2='AY2PLXYBQJBXDF8Z' where id=6; -update noar ti set b2='AY2PLXYBQJBXDF8Z' where id=6; -update noar tt set b0='VF4ULFAUOSVG7ZDTKQ' where id=7; -update noar ti set b0='VF4ULFAUOSVG7ZDTKQ' where id=7; -update noar tt set b1='C9A3AP6' where id=7; -update noar ti set b1='C9A3AP6' where id=7; -update noar tt set b2='8LXTB1' where id=7; -update noar ti set b2='8LXTB1' where id=7; -update noar tt set b0='ZDO9R2W21' where id=8; -update noar ti set b0='ZDO9R2W21' where id=8; -update noar tt set b1='F3R362HRMBMV3OV4WAG601DQQK' where id=8; -update noar ti set b1='F3R362HRMBMV3OV4WAG601DQQK' where id=8; -update noar tt set b2='XERMA9UCH8F1F2P2282VK' where id=8; -update noar ti set b2='XERMA9UCH8F1F2P2282VK' where id=8; -update noar tt set b0='B5CXB4Z1QOTWCHZQ22WV7' where id=9; -update noar ti set b0='B5CXB4Z1QOTWCHZQ22WV7' where id=9; -update noar tt set b1='AUKE2FUDO4ZXJ4JW8MTS8' where id=9; -update noar ti set b1='AUKE2FUDO4ZXJ4JW8MTS8' where id=9; -update noar tt set b2='M9Z4LORON659SNL' where id=9; -update noar ti set b2='M9Z4LORON659SNL' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 tinyblob not null, - b1 mediumblob not null, - b2 text not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='58VWJ07B' where id=1; -update noar ti set b0='58VWJ07B' where id=1; -update noar tt set b1='S962AC7' where id=1; -update noar ti set b1='S962AC7' where id=1; -update noar tt set b2='G4SZ7R35GUN3P26A' where id=1; -update noar ti set b2='G4SZ7R35GUN3P26A' where id=1; -update noar tt set b0='ALUHYRRH8HKH4Z51VK0I' where id=2; -update noar ti set b0='ALUHYRRH8HKH4Z51VK0I' where id=2; -update noar tt set b1='M3I11KSUB9' where id=2; -update noar ti set b1='M3I11KSUB9' where id=2; -update noar tt set b2='2T5TKRLXULPZ22T5STNLTUMQHKWEB1E' where id=2; -update noar ti set b2='2T5TKRLXULPZ22T5STNLTUMQHKWEB1E' where id=2; -update noar tt set b0='7CF' where id=3; -update noar ti set b0='7CF' where id=3; -update noar tt set b1='GTRZCS6U26EZX6BCEK9NO73M2' where id=3; -update noar ti set b1='GTRZCS6U26EZX6BCEK9NO73M2' where id=3; -update noar tt set b2='KDE' where id=3; -update noar ti set b2='KDE' where id=3; -update noar tt set b0='GLZV5M1WQFPJ3' where id=4; -update noar ti set b0='GLZV5M1WQFPJ3' where id=4; -update noar tt set b1='2GKJLOHPWK3PEE6' where id=4; -update noar ti set b1='2GKJLOHPWK3PEE6' where id=4; -update noar tt set b2='VCKWGAFKWEOFL1JQ9L' where id=4; -update noar ti set b2='VCKWGAFKWEOFL1JQ9L' where id=4; -update noar tt set b0='AX7RMVA9NQ61X7ZXVDCP2FI6L0PT' where id=5; -update noar ti set b0='AX7RMVA9NQ61X7ZXVDCP2FI6L0PT' where id=5; -update noar tt set b1='IMF0L3S64G6PUKRGFM2' where id=5; -update noar ti set b1='IMF0L3S64G6PUKRGFM2' where id=5; -update noar tt set b2='9LSKI5BR7DH3VQRLPW74OTLS' where id=5; -update noar ti set b2='9LSKI5BR7DH3VQRLPW74OTLS' where id=5; -update noar tt set b0='GQS3EC50U3BVCM6H3H4ZLYKI21C5' where id=6; -update noar ti set b0='GQS3EC50U3BVCM6H3H4ZLYKI21C5' where id=6; -update noar tt set b1='SAIMB8RE' where id=6; -update noar ti set b1='SAIMB8RE' where id=6; -update noar tt set b2='LBJJQ7MRSG8G0F38CDEB' where id=6; -update noar ti set b2='LBJJQ7MRSG8G0F38CDEB' where id=6; -update noar tt set b0='3D9XWMT0JF2Y5H2JLBTLZGP5K05J11' where id=7; -update noar ti set b0='3D9XWMT0JF2Y5H2JLBTLZGP5K05J11' where id=7; -update noar tt set b1='81FU' where id=7; -update noar ti set b1='81FU' where id=7; -update noar tt set b2='218UUTD8T4' where id=7; -update noar ti set b2='218UUTD8T4' where id=7; -update noar tt set b0='2K' where id=8; -update noar ti set b0='2K' where id=8; -update noar tt set b1='B2TWOZWNY6EAVO5KY8' where id=8; -update noar ti set b1='B2TWOZWNY6EAVO5KY8' where id=8; -update noar tt set b2='SPJCRCLHK5IPYSCN8CZR8WGRPD' where id=8; -update noar ti set b2='SPJCRCLHK5IPYSCN8CZR8WGRPD' where id=8; -update noar tt set b0='BYRBSWCWWWYLF5TXB6HHTVNU' where id=9; -update noar ti set b0='BYRBSWCWWWYLF5TXB6HHTVNU' where id=9; -update noar tt set b1='02G6UOLOEICXBBVFFG32U8PJKXKK6BMX' where id=9; -update noar ti set b1='02G6UOLOEICXBBVFFG32U8PJKXKK6BMX' where id=9; -update noar tt set b2='MP2GH63NZ64MDCC6YPBO1549AHVH3' where id=9; -update noar ti set b2='MP2GH63NZ64MDCC6YPBO1549AHVH3' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 tinyblob null, - b1 longblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='WXA7SP1HUDKEAHG00OY' where id=1; -update noar ti set b0='WXA7SP1HUDKEAHG00OY' where id=1; -update noar tt set b1='D4Y89QEGNY7DALJV2CDG' where id=1; -update noar ti set b1='D4Y89QEGNY7DALJV2CDG' where id=1; -update noar tt set b2='86CBXEO2MDCVKW52IWBJBFOE93W1' where id=1; -update noar ti set b2='86CBXEO2MDCVKW52IWBJBFOE93W1' where id=1; -update noar tt set b0='W0PGLR2FOPV8YF' where id=2; -update noar ti set b0='W0PGLR2FOPV8YF' where id=2; -update noar tt set b1='4D2LGR9Y' where id=2; -update noar ti set b1='4D2LGR9Y' where id=2; -update noar tt set b2='U7OYN1T7OI2895OSPWD' where id=2; -update noar ti set b2='U7OYN1T7OI2895OSPWD' where id=2; -update noar tt set b0='HJVNM9XM6PH7IEBZPG08CSM' where id=3; -update noar ti set b0='HJVNM9XM6PH7IEBZPG08CSM' where id=3; -update noar tt set b1='45PYSB58HTPHPWK60B4ORHPVJKVOJ' where id=3; -update noar ti set b1='45PYSB58HTPHPWK60B4ORHPVJKVOJ' where id=3; -update noar tt set b2='PCEJ7C' where id=3; -update noar ti set b2='PCEJ7C' where id=3; -update noar tt set b0='0ZCFY1TD0' where id=4; -update noar ti set b0='0ZCFY1TD0' where id=4; -update noar tt set b1='A5Y7D2VYANTWMF6RNS2DZBWYQ28' where id=4; -update noar ti set b1='A5Y7D2VYANTWMF6RNS2DZBWYQ28' where id=4; -update noar tt set b2='8L6RY6LDAOPWA' where id=4; -update noar ti set b2='8L6RY6LDAOPWA' where id=4; -update noar tt set b0='8OO5F3EUNAG0XNIWH36Q6O75O7A7' where id=5; -update noar ti set b0='8OO5F3EUNAG0XNIWH36Q6O75O7A7' where id=5; -update noar tt set b1='OLX5GHAATYOGGTF0PE2' where id=5; -update noar ti set b1='OLX5GHAATYOGGTF0PE2' where id=5; -update noar tt set b2='PQ7HLR2YXZ6BYEJF63CE' where id=5; -update noar ti set b2='PQ7HLR2YXZ6BYEJF63CE' where id=5; -update noar tt set b0='6H5S8G6F0F1F3W9PBUD8I0U' where id=6; -update noar ti set b0='6H5S8G6F0F1F3W9PBUD8I0U' where id=6; -update noar tt set b1='3W70ZQE2YSU' where id=6; -update noar ti set b1='3W70ZQE2YSU' where id=6; -update noar tt set b2='4' where id=6; -update noar ti set b2='4' where id=6; -update noar tt set b0='F93UERCGUA5H31QTL' where id=7; -update noar ti set b0='F93UERCGUA5H31QTL' where id=7; -update noar tt set b1='GMNM73XZLCJIF66AM6GZ14C6GX' where id=7; -update noar ti set b1='GMNM73XZLCJIF66AM6GZ14C6GX' where id=7; -update noar tt set b2='4OLM1P4' where id=7; -update noar ti set b2='4OLM1P4' where id=7; -update noar tt set b0='MW7YIKK8E2B78OGCH8Q8CQRMOQYG' where id=8; -update noar ti set b0='MW7YIKK8E2B78OGCH8Q8CQRMOQYG' where id=8; -update noar tt set b1='F84QH8AIP9Y83THER' where id=8; -update noar ti set b1='F84QH8AIP9Y83THER' where id=8; -update noar tt set b2='WDLC7KHUM5KDASBWVT7HTHT' where id=8; -update noar ti set b2='WDLC7KHUM5KDASBWVT7HTHT' where id=8; -update noar tt set b0='A6F58NLMH1' where id=9; -update noar ti set b0='A6F58NLMH1' where id=9; -update noar tt set b1='QW6F011ZNG4MLIQ53PHXSCHVEPLSDG5' where id=9; -update noar ti set b1='QW6F011ZNG4MLIQ53PHXSCHVEPLSDG5' where id=9; -update noar tt set b2='U89X7VALQUXVDMCJ0F3HV2D' where id=9; -update noar ti set b2='U89X7VALQUXVDMCJ0F3HV2D' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 tinyblob not null, - b1 longblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='166MH3AEDCXCP3O7GRTTQZRO6BJKU19' where id=1; -update noar ti set b0='166MH3AEDCXCP3O7GRTTQZRO6BJKU19' where id=1; -update noar tt set b1='3C396EJJX7P' where id=1; -update noar ti set b1='3C396EJJX7P' where id=1; -update noar tt set b2='78AI3H1XRXU4' where id=1; -update noar ti set b2='78AI3H1XRXU4' where id=1; -update noar tt set b0='7QA9XB7YAEA05MCW144SI' where id=2; -update noar ti set b0='7QA9XB7YAEA05MCW144SI' where id=2; -update noar tt set b1='5OJIX' where id=2; -update noar ti set b1='5OJIX' where id=2; -update noar tt set b2='9RW4R36P4ASMH3S' where id=2; -update noar ti set b2='9RW4R36P4ASMH3S' where id=2; -update noar tt set b0='9' where id=3; -update noar ti set b0='9' where id=3; -update noar tt set b1='M0IC' where id=3; -update noar ti set b1='M0IC' where id=3; -update noar tt set b2='2SHOH1OK9' where id=3; -update noar ti set b2='2SHOH1OK9' where id=3; -update noar tt set b0='LQXJ0MK7LTPFDU8ZUG24JK6D' where id=4; -update noar ti set b0='LQXJ0MK7LTPFDU8ZUG24JK6D' where id=4; -update noar tt set b1='9US7U8O3RXETUBRH4W' where id=4; -update noar ti set b1='9US7U8O3RXETUBRH4W' where id=4; -update noar tt set b2='OJXDY' where id=4; -update noar ti set b2='OJXDY' where id=4; -update noar tt set b0='N' where id=5; -update noar ti set b0='N' where id=5; -update noar tt set b1='M7N7HKM5T05ZIUCV9BER' where id=5; -update noar ti set b1='M7N7HKM5T05ZIUCV9BER' where id=5; -update noar tt set b2='53' where id=5; -update noar ti set b2='53' where id=5; -update noar tt set b0='ELN3RS21Y94U3P6O9L81G7ANC' where id=6; -update noar ti set b0='ELN3RS21Y94U3P6O9L81G7ANC' where id=6; -update noar tt set b1='27XQXUH7BQNE' where id=6; -update noar ti set b1='27XQXUH7BQNE' where id=6; -update noar tt set b2='1' where id=6; -update noar ti set b2='1' where id=6; -update noar tt set b0='NLML8' where id=7; -update noar ti set b0='NLML8' where id=7; -update noar tt set b1='JJIITAXW2HMSZ7L5UXR1QRR' where id=7; -update noar ti set b1='JJIITAXW2HMSZ7L5UXR1QRR' where id=7; -update noar tt set b2='TEWE7JN90' where id=7; -update noar ti set b2='TEWE7JN90' where id=7; -update noar tt set b0='U0AU7M00Z65JGLYM41VEC8V23V' where id=8; -update noar ti set b0='U0AU7M00Z65JGLYM41VEC8V23V' where id=8; -update noar tt set b1='QK' where id=8; -update noar ti set b1='QK' where id=8; -update noar tt set b2='TU6HO1ZWTHP0SQQOD7UKZK047' where id=8; -update noar ti set b2='TU6HO1ZWTHP0SQQOD7UKZK047' where id=8; -update noar tt set b0='YQ245XZBQLDXKCR' where id=9; -update noar ti set b0='YQ245XZBQLDXKCR' where id=9; -update noar tt set b1='VYJ3P7V5BWD6P908EKQEAQRS32HYB' where id=9; -update noar ti set b1='VYJ3P7V5BWD6P908EKQEAQRS32HYB' where id=9; -update noar tt set b2='OW6OAAE6YJMQ9QID' where id=9; -update noar ti set b2='OW6OAAE6YJMQ9QID' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 tinyblob null, - b1 longblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='3FYCUHVXJUWWR' where id=1; -update noar ti set b0='3FYCUHVXJUWWR' where id=1; -update noar tt set b1='OLSES8XDHIV' where id=1; -update noar ti set b1='OLSES8XDHIV' where id=1; -update noar tt set b2='T0KK244ZUAM9X84VJTUWY5IMH4' where id=1; -update noar ti set b2='T0KK244ZUAM9X84VJTUWY5IMH4' where id=1; -update noar tt set b0='A1SON62ULFVY1P' where id=2; -update noar ti set b0='A1SON62ULFVY1P' where id=2; -update noar tt set b1='BTQW520G58GQ1KN15C6GWPJ4DVH7W' where id=2; -update noar ti set b1='BTQW520G58GQ1KN15C6GWPJ4DVH7W' where id=2; -update noar tt set b2='0B' where id=2; -update noar ti set b2='0B' where id=2; -update noar tt set b0='5M996XG24LKZAC4L90IUW9' where id=3; -update noar ti set b0='5M996XG24LKZAC4L90IUW9' where id=3; -update noar tt set b1='QRJX14P243BP5E9WIAC' where id=3; -update noar ti set b1='QRJX14P243BP5E9WIAC' where id=3; -update noar tt set b2='QFXCMAXUBZTY6VK8GR3OXDJAPLE3RRP3' where id=3; -update noar ti set b2='QFXCMAXUBZTY6VK8GR3OXDJAPLE3RRP3' where id=3; -update noar tt set b0='Q8QFM1L5UOL36CL' where id=4; -update noar ti set b0='Q8QFM1L5UOL36CL' where id=4; -update noar tt set b1='SU6ADSJIBUKCP72OO44YJ' where id=4; -update noar ti set b1='SU6ADSJIBUKCP72OO44YJ' where id=4; -update noar tt set b2='T5BF45JTPVXPC2WQ4YUPB' where id=4; -update noar ti set b2='T5BF45JTPVXPC2WQ4YUPB' where id=4; -update noar tt set b0='OLQ2KW8KPS8X' where id=5; -update noar ti set b0='OLQ2KW8KPS8X' where id=5; -update noar tt set b1='LJPWC23XJT667T09MOI96' where id=5; -update noar ti set b1='LJPWC23XJT667T09MOI96' where id=5; -update noar tt set b2='FUU3MAMEX1QB9SBEO' where id=5; -update noar ti set b2='FUU3MAMEX1QB9SBEO' where id=5; -update noar tt set b0='84' where id=6; -update noar ti set b0='84' where id=6; -update noar tt set b1='O9SRSGIUITLXUFJIULAGGTVIBP' where id=6; -update noar ti set b1='O9SRSGIUITLXUFJIULAGGTVIBP' where id=6; -update noar tt set b2='TY7RHZI1PEJIP5D4S' where id=6; -update noar ti set b2='TY7RHZI1PEJIP5D4S' where id=6; -update noar tt set b0='BG6MCPR' where id=7; -update noar ti set b0='BG6MCPR' where id=7; -update noar tt set b1='GURK96DSFMDT5CR' where id=7; -update noar ti set b1='GURK96DSFMDT5CR' where id=7; -update noar tt set b2='M3D4NOFLZK3XF8' where id=7; -update noar ti set b2='M3D4NOFLZK3XF8' where id=7; -update noar tt set b0='6RGFQ9C5PC' where id=8; -update noar ti set b0='6RGFQ9C5PC' where id=8; -update noar tt set b1='TCC0934YN3IWLMSUB3' where id=8; -update noar ti set b1='TCC0934YN3IWLMSUB3' where id=8; -update noar tt set b2='AQ3' where id=8; -update noar ti set b2='AQ3' where id=8; -update noar tt set b0='PEM68STZNX358JKECE712MM' where id=9; -update noar ti set b0='PEM68STZNX358JKECE712MM' where id=9; -update noar tt set b1='IXNHU' where id=9; -update noar ti set b1='IXNHU' where id=9; -update noar tt set b2='EV6BAVDVJGXC8TN5XMG' where id=9; -update noar ti set b2='EV6BAVDVJGXC8TN5XMG' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 tinyblob not null, - b1 longblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='SH93XMF3AHVZ4S' where id=1; -update noar ti set b0='SH93XMF3AHVZ4S' where id=1; -update noar tt set b1='7IU3NH' where id=1; -update noar ti set b1='7IU3NH' where id=1; -update noar tt set b2='9PHIRPDK2' where id=1; -update noar ti set b2='9PHIRPDK2' where id=1; -update noar tt set b0='8ND8GZP1VYMHMKLEH72Y6Z' where id=2; -update noar ti set b0='8ND8GZP1VYMHMKLEH72Y6Z' where id=2; -update noar tt set b1='5Q7RKUTRI7SXBOV7Y9HCSURX3D' where id=2; -update noar ti set b1='5Q7RKUTRI7SXBOV7Y9HCSURX3D' where id=2; -update noar tt set b2='9V8K7PXD4SK4MRED6C48D612600' where id=2; -update noar ti set b2='9V8K7PXD4SK4MRED6C48D612600' where id=2; -update noar tt set b0='3H23IVIK467' where id=3; -update noar ti set b0='3H23IVIK467' where id=3; -update noar tt set b1='S5P8VXGG5MPIAP' where id=3; -update noar ti set b1='S5P8VXGG5MPIAP' where id=3; -update noar tt set b2='AHBTX5BTTYU5DXSP7PVNPJQ7AG' where id=3; -update noar ti set b2='AHBTX5BTTYU5DXSP7PVNPJQ7AG' where id=3; -update noar tt set b0='AANIZ1153DQ3IYBONFHYGOINVXRG' where id=4; -update noar ti set b0='AANIZ1153DQ3IYBONFHYGOINVXRG' where id=4; -update noar tt set b1='LGHOP7DNLW274' where id=4; -update noar ti set b1='LGHOP7DNLW274' where id=4; -update noar tt set b2='2AW8MQLKX9V95C4KW6Y1JB2O' where id=4; -update noar ti set b2='2AW8MQLKX9V95C4KW6Y1JB2O' where id=4; -update noar tt set b0='EPOP' where id=5; -update noar ti set b0='EPOP' where id=5; -update noar tt set b1='9G76VFO821Y2W0MVN48RCBB5V3TNB7M0' where id=5; -update noar ti set b1='9G76VFO821Y2W0MVN48RCBB5V3TNB7M0' where id=5; -update noar tt set b2='L0S8WT13TWB' where id=5; -update noar ti set b2='L0S8WT13TWB' where id=5; -update noar tt set b0='IYX9EI5N6YZJT0YU7BGDTL23JXEB9D3Y' where id=6; -update noar ti set b0='IYX9EI5N6YZJT0YU7BGDTL23JXEB9D3Y' where id=6; -update noar tt set b1='G08NUJECYUQTQZHQWMPPG0GUZWTBD7MO' where id=6; -update noar ti set b1='G08NUJECYUQTQZHQWMPPG0GUZWTBD7MO' where id=6; -update noar tt set b2='YAUH1BUM' where id=6; -update noar ti set b2='YAUH1BUM' where id=6; -update noar tt set b0='IKNVP7LCTZSZ1ROPVIP4U' where id=7; -update noar ti set b0='IKNVP7LCTZSZ1ROPVIP4U' where id=7; -update noar tt set b1='GOA0QNQF2M4' where id=7; -update noar ti set b1='GOA0QNQF2M4' where id=7; -update noar tt set b2='KJU92DVMH5' where id=7; -update noar ti set b2='KJU92DVMH5' where id=7; -update noar tt set b0='9R6573CAA5Q0W6PHM39M3W7O64U2E' where id=8; -update noar ti set b0='9R6573CAA5Q0W6PHM39M3W7O64U2E' where id=8; -update noar tt set b1='OP5NZWOTR4VV80RFSWGGK2MA' where id=8; -update noar ti set b1='OP5NZWOTR4VV80RFSWGGK2MA' where id=8; -update noar tt set b2='TN' where id=8; -update noar ti set b2='TN' where id=8; -update noar tt set b0='LSHJ5C0ZL' where id=9; -update noar ti set b0='LSHJ5C0ZL' where id=9; -update noar tt set b1='7SQA3937P0D8JU9V' where id=9; -update noar ti set b1='7SQA3937P0D8JU9V' where id=9; -update noar tt set b2='VKNSLMEA7' where id=9; -update noar ti set b2='VKNSLMEA7' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 tinyblob null, - b1 longblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='OK7AIIPW4IDXD1SD' where id=1; -update noar ti set b0='OK7AIIPW4IDXD1SD' where id=1; -update noar tt set b1='VWHFAOEC53GBBJDKAIMI3QSJU' where id=1; -update noar ti set b1='VWHFAOEC53GBBJDKAIMI3QSJU' where id=1; -update noar tt set b2='PKHPS' where id=1; -update noar ti set b2='PKHPS' where id=1; -update noar tt set b0='DTYNVT00GFQEYVVJPR2HMO2L8B' where id=2; -update noar ti set b0='DTYNVT00GFQEYVVJPR2HMO2L8B' where id=2; -update noar tt set b1='54KMF19CSD9K85686IE6F' where id=2; -update noar ti set b1='54KMF19CSD9K85686IE6F' where id=2; -update noar tt set b2='Z604T31AA' where id=2; -update noar ti set b2='Z604T31AA' where id=2; -update noar tt set b0='14KAF2Q16FY8FHA7M5GM36WHGONDJT4' where id=3; -update noar ti set b0='14KAF2Q16FY8FHA7M5GM36WHGONDJT4' where id=3; -update noar tt set b1='FJH98KFN9U5FLXWQ5U6LUYDE6B' where id=3; -update noar ti set b1='FJH98KFN9U5FLXWQ5U6LUYDE6B' where id=3; -update noar tt set b2='9' where id=3; -update noar ti set b2='9' where id=3; -update noar tt set b0='YE6NHHUSRJPXSX' where id=4; -update noar ti set b0='YE6NHHUSRJPXSX' where id=4; -update noar tt set b1='BO6YJZVDZGI8NXT0G' where id=4; -update noar ti set b1='BO6YJZVDZGI8NXT0G' where id=4; -update noar tt set b2='7Z' where id=4; -update noar ti set b2='7Z' where id=4; -update noar tt set b0='YTKGJI09L4O4GM6RB84YODFW9N' where id=5; -update noar ti set b0='YTKGJI09L4O4GM6RB84YODFW9N' where id=5; -update noar tt set b1='8DYMBLB' where id=5; -update noar ti set b1='8DYMBLB' where id=5; -update noar tt set b2='FR76TS6RN' where id=5; -update noar ti set b2='FR76TS6RN' where id=5; -update noar tt set b0='XM9L24AZEQNS9U6H' where id=6; -update noar ti set b0='XM9L24AZEQNS9U6H' where id=6; -update noar tt set b1='WT' where id=6; -update noar ti set b1='WT' where id=6; -update noar tt set b2='ZI' where id=6; -update noar ti set b2='ZI' where id=6; -update noar tt set b0='ONF0G' where id=7; -update noar ti set b0='ONF0G' where id=7; -update noar tt set b1='0G0G8QIEQ' where id=7; -update noar ti set b1='0G0G8QIEQ' where id=7; -update noar tt set b2='XOZIJ2F4M1E0MT3YOBQFWGR' where id=7; -update noar ti set b2='XOZIJ2F4M1E0MT3YOBQFWGR' where id=7; -update noar tt set b0='LYMRU' where id=8; -update noar ti set b0='LYMRU' where id=8; -update noar tt set b1='KT4J557BTJVDLMO1E7P' where id=8; -update noar ti set b1='KT4J557BTJVDLMO1E7P' where id=8; -update noar tt set b2='CTJ6JJB05GO' where id=8; -update noar ti set b2='CTJ6JJB05GO' where id=8; -update noar tt set b0='HQV4GGXN4BML' where id=9; -update noar ti set b0='HQV4GGXN4BML' where id=9; -update noar tt set b1='B98RQD4K' where id=9; -update noar ti set b1='B98RQD4K' where id=9; -update noar tt set b2='A4KVWSW2BCEDPL3DJ95' where id=9; -update noar ti set b2='A4KVWSW2BCEDPL3DJ95' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 tinyblob not null, - b1 longblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='QRJR3AY1WUSN' where id=1; -update noar ti set b0='QRJR3AY1WUSN' where id=1; -update noar tt set b1='YYB7SZSQ8E06W' where id=1; -update noar ti set b1='YYB7SZSQ8E06W' where id=1; -update noar tt set b2='O' where id=1; -update noar ti set b2='O' where id=1; -update noar tt set b0='GN441L3IV50M4DPFX2' where id=2; -update noar ti set b0='GN441L3IV50M4DPFX2' where id=2; -update noar tt set b1='QZA8UWIM1PW750X8FW' where id=2; -update noar ti set b1='QZA8UWIM1PW750X8FW' where id=2; -update noar tt set b2='IWZEUOSSFDT0U1NFX5VDUWMCH' where id=2; -update noar ti set b2='IWZEUOSSFDT0U1NFX5VDUWMCH' where id=2; -update noar tt set b0='VO3Z8QO804BWD3DLVPPE8SWKG1LD' where id=3; -update noar ti set b0='VO3Z8QO804BWD3DLVPPE8SWKG1LD' where id=3; -update noar tt set b1='L5' where id=3; -update noar ti set b1='L5' where id=3; -update noar tt set b2='PDGK50QTEHWYYKN68X78YQ' where id=3; -update noar ti set b2='PDGK50QTEHWYYKN68X78YQ' where id=3; -update noar tt set b0='HLCPXHF' where id=4; -update noar ti set b0='HLCPXHF' where id=4; -update noar tt set b1='HS17C8BFK9CSYKJ5KYR' where id=4; -update noar ti set b1='HS17C8BFK9CSYKJ5KYR' where id=4; -update noar tt set b2='YPPEDN0YAO4SB2' where id=4; -update noar ti set b2='YPPEDN0YAO4SB2' where id=4; -update noar tt set b0='2UGGI' where id=5; -update noar ti set b0='2UGGI' where id=5; -update noar tt set b1='7F4UBQ' where id=5; -update noar ti set b1='7F4UBQ' where id=5; -update noar tt set b2='3R' where id=5; -update noar ti set b2='3R' where id=5; -update noar tt set b0='KP2W7G86NB3QDVVXO' where id=6; -update noar ti set b0='KP2W7G86NB3QDVVXO' where id=6; -update noar tt set b1='AXZ9VG63F' where id=6; -update noar ti set b1='AXZ9VG63F' where id=6; -update noar tt set b2='04SEY1G66F73U0Z' where id=6; -update noar ti set b2='04SEY1G66F73U0Z' where id=6; -update noar tt set b0='2K56ILPAM9IB' where id=7; -update noar ti set b0='2K56ILPAM9IB' where id=7; -update noar tt set b1='ZECBKQNED5XGPBJETYT6IU' where id=7; -update noar ti set b1='ZECBKQNED5XGPBJETYT6IU' where id=7; -update noar tt set b2='N7HH5DJIWBIXSMUPTUO9D14BIOEEZB1G' where id=7; -update noar ti set b2='N7HH5DJIWBIXSMUPTUO9D14BIOEEZB1G' where id=7; -update noar tt set b0='D31RONWAQF995FZ5L' where id=8; -update noar ti set b0='D31RONWAQF995FZ5L' where id=8; -update noar tt set b1='XBSL1F8PXC2RX2Z0U9' where id=8; -update noar ti set b1='XBSL1F8PXC2RX2Z0U9' where id=8; -update noar tt set b2='Q0ECZR5CS6JDFVJR85E6NNUXB0OVQ' where id=8; -update noar ti set b2='Q0ECZR5CS6JDFVJR85E6NNUXB0OVQ' where id=8; -update noar tt set b0='0K9' where id=9; -update noar ti set b0='0K9' where id=9; -update noar tt set b1='QRR36PG66K4G8HLBCC14B62' where id=9; -update noar ti set b1='QRR36PG66K4G8HLBCC14B62' where id=9; -update noar tt set b2='PVTZ8AN9T0BI3GX6YVWC' where id=9; -update noar ti set b2='PVTZ8AN9T0BI3GX6YVWC' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 tinyblob null, - b1 longblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='V4EXPNC4DXHNG' where id=1; -update noar ti set b0='V4EXPNC4DXHNG' where id=1; -update noar tt set b1='SVZ5L6R' where id=1; -update noar ti set b1='SVZ5L6R' where id=1; -update noar tt set b2='77UESANOA857QU' where id=1; -update noar ti set b2='77UESANOA857QU' where id=1; -update noar tt set b0='0R5' where id=2; -update noar ti set b0='0R5' where id=2; -update noar tt set b1='Z87UOK84DW2JXSH02JVOA1K1SDGH34UD' where id=2; -update noar ti set b1='Z87UOK84DW2JXSH02JVOA1K1SDGH34UD' where id=2; -update noar tt set b2='AHQRBXA0L50JMFM96SR6TRBGN45YL' where id=2; -update noar ti set b2='AHQRBXA0L50JMFM96SR6TRBGN45YL' where id=2; -update noar tt set b0='U6BQMY1WGUB4S' where id=3; -update noar ti set b0='U6BQMY1WGUB4S' where id=3; -update noar tt set b1='64S7596QB0D0XEML' where id=3; -update noar ti set b1='64S7596QB0D0XEML' where id=3; -update noar tt set b2='BQ5F' where id=3; -update noar ti set b2='BQ5F' where id=3; -update noar tt set b0='Q3QASTAZZYK9QNAVIPGHAJYW7' where id=4; -update noar ti set b0='Q3QASTAZZYK9QNAVIPGHAJYW7' where id=4; -update noar tt set b1='J0HWO627U6P8HMRESVK6' where id=4; -update noar ti set b1='J0HWO627U6P8HMRESVK6' where id=4; -update noar tt set b2='O0ENHDV' where id=4; -update noar ti set b2='O0ENHDV' where id=4; -update noar tt set b0='C893AUEKROVS5' where id=5; -update noar ti set b0='C893AUEKROVS5' where id=5; -update noar tt set b1='6NR' where id=5; -update noar ti set b1='6NR' where id=5; -update noar tt set b2='8QC5NTX4C8SWCKT0P5ZFY44AN' where id=5; -update noar ti set b2='8QC5NTX4C8SWCKT0P5ZFY44AN' where id=5; -update noar tt set b0='KE1TGBH7FLN3QT7PWW' where id=6; -update noar ti set b0='KE1TGBH7FLN3QT7PWW' where id=6; -update noar tt set b1='64MWOKJI7' where id=6; -update noar ti set b1='64MWOKJI7' where id=6; -update noar tt set b2='VPZP0UTUG5PCLLHYJ4ZKINX6KN3D' where id=6; -update noar ti set b2='VPZP0UTUG5PCLLHYJ4ZKINX6KN3D' where id=6; -update noar tt set b0='5QMP3U3IAZR2M4BIN3K0QOZEG' where id=7; -update noar ti set b0='5QMP3U3IAZR2M4BIN3K0QOZEG' where id=7; -update noar tt set b1='78RKVS7SYP98EC4UI01' where id=7; -update noar ti set b1='78RKVS7SYP98EC4UI01' where id=7; -update noar tt set b2='3ZPI3WITUTNZ0AFXS2OZ' where id=7; -update noar ti set b2='3ZPI3WITUTNZ0AFXS2OZ' where id=7; -update noar tt set b0='017JE1G' where id=8; -update noar ti set b0='017JE1G' where id=8; -update noar tt set b1='60S' where id=8; -update noar ti set b1='60S' where id=8; -update noar tt set b2='UBDB3PKH5VYSU3LUKC7ABXR3JY3XFG' where id=8; -update noar ti set b2='UBDB3PKH5VYSU3LUKC7ABXR3JY3XFG' where id=8; -update noar tt set b0='0GAV03D' where id=9; -update noar ti set b0='0GAV03D' where id=9; -update noar tt set b1='WEA46YHICT9JRIJL' where id=9; -update noar ti set b1='WEA46YHICT9JRIJL' where id=9; -update noar tt set b2='3LRQ4CJIQIR7NHV' where id=9; -update noar ti set b2='3LRQ4CJIQIR7NHV' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 tinyblob not null, - b1 longblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='SIUOUQMQ94GMYUWWA4LL2JVURA2' where id=1; -update noar ti set b0='SIUOUQMQ94GMYUWWA4LL2JVURA2' where id=1; -update noar tt set b1='JIBD' where id=1; -update noar ti set b1='JIBD' where id=1; -update noar tt set b2='USWPA1J2AM9YOJHS65S' where id=1; -update noar ti set b2='USWPA1J2AM9YOJHS65S' where id=1; -update noar tt set b0='M4XC5M2VEZAR5SZZYWQ1MV78FGDEK' where id=2; -update noar ti set b0='M4XC5M2VEZAR5SZZYWQ1MV78FGDEK' where id=2; -update noar tt set b1='KA' where id=2; -update noar ti set b1='KA' where id=2; -update noar tt set b2='IG09OLU5DESH7L8RR29IG201DLWLMS' where id=2; -update noar ti set b2='IG09OLU5DESH7L8RR29IG201DLWLMS' where id=2; -update noar tt set b0='L9EDIO9IXIW8WZYQYVVW04N7DUY6' where id=3; -update noar ti set b0='L9EDIO9IXIW8WZYQYVVW04N7DUY6' where id=3; -update noar tt set b1='VJ' where id=3; -update noar ti set b1='VJ' where id=3; -update noar tt set b2='7P9P6E9B98VKB' where id=3; -update noar ti set b2='7P9P6E9B98VKB' where id=3; -update noar tt set b0='13' where id=4; -update noar ti set b0='13' where id=4; -update noar tt set b1='CHQUBL8UKBCBQE14D2JTPVXW33VKIOK' where id=4; -update noar ti set b1='CHQUBL8UKBCBQE14D2JTPVXW33VKIOK' where id=4; -update noar tt set b2='3F0OTCG0ERAZ9VLSG6JW6' where id=4; -update noar ti set b2='3F0OTCG0ERAZ9VLSG6JW6' where id=4; -update noar tt set b0='HH7GW75U' where id=5; -update noar ti set b0='HH7GW75U' where id=5; -update noar tt set b1='CLBXJJL209T9T1LE2UNZA' where id=5; -update noar ti set b1='CLBXJJL209T9T1LE2UNZA' where id=5; -update noar tt set b2='TIAVVOU3' where id=5; -update noar ti set b2='TIAVVOU3' where id=5; -update noar tt set b0='V8HDFCXHUJD8O8UJDG8UP89D2TR' where id=6; -update noar ti set b0='V8HDFCXHUJD8O8UJDG8UP89D2TR' where id=6; -update noar tt set b1='QA' where id=6; -update noar ti set b1='QA' where id=6; -update noar tt set b2='BQCG46E0D7GY8X7YES1OJ48SNJ4' where id=6; -update noar ti set b2='BQCG46E0D7GY8X7YES1OJ48SNJ4' where id=6; -update noar tt set b0='9FK5ZZV' where id=7; -update noar ti set b0='9FK5ZZV' where id=7; -update noar tt set b1='39GP3USPT5CI9YIV6LPI0D7PK0D2' where id=7; -update noar ti set b1='39GP3USPT5CI9YIV6LPI0D7PK0D2' where id=7; -update noar tt set b2='9C4C2R89T' where id=7; -update noar ti set b2='9C4C2R89T' where id=7; -update noar tt set b0='DJN0GRYNI07R99NWYRROPCNRFJMV1R' where id=8; -update noar ti set b0='DJN0GRYNI07R99NWYRROPCNRFJMV1R' where id=8; -update noar tt set b1='B9T7EZRIPV7SDL54BGW8M' where id=8; -update noar ti set b1='B9T7EZRIPV7SDL54BGW8M' where id=8; -update noar tt set b2='TAHG3DP0TNP9D35T3OG115246K9W27F' where id=8; -update noar ti set b2='TAHG3DP0TNP9D35T3OG115246K9W27F' where id=8; -update noar tt set b0='4GXJ5D2X27XZ6X0PV2LGURBYLG4XC1ZI' where id=9; -update noar ti set b0='4GXJ5D2X27XZ6X0PV2LGURBYLG4XC1ZI' where id=9; -update noar tt set b1='B6IZ1GE2X9LG17DRKQNA7RYZCT3EK4D5' where id=9; -update noar ti set b1='B6IZ1GE2X9LG17DRKQNA7RYZCT3EK4D5' where id=9; -update noar tt set b2='QHLK2DOD9AQQ0C' where id=9; -update noar ti set b2='QHLK2DOD9AQQ0C' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 tinyblob null, - b1 longblob null, - b2 text null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='TPJ3V1L' where id=1; -update noar ti set b0='TPJ3V1L' where id=1; -update noar tt set b1='LYLO3Q3638DJJYPSR9UH5X' where id=1; -update noar ti set b1='LYLO3Q3638DJJYPSR9UH5X' where id=1; -update noar tt set b2='HUF' where id=1; -update noar ti set b2='HUF' where id=1; -update noar tt set b0='NWU3N76SC4U0GPPMM43G5FIZ' where id=2; -update noar ti set b0='NWU3N76SC4U0GPPMM43G5FIZ' where id=2; -update noar tt set b1='B7GTI3IWHD1NRWZ29W2BQDP6F62OYR' where id=2; -update noar ti set b1='B7GTI3IWHD1NRWZ29W2BQDP6F62OYR' where id=2; -update noar tt set b2='FMQXSFXA4IH54Y' where id=2; -update noar ti set b2='FMQXSFXA4IH54Y' where id=2; -update noar tt set b0='UPDP71UGIPBOPC5YCH0M1DPEW4' where id=3; -update noar ti set b0='UPDP71UGIPBOPC5YCH0M1DPEW4' where id=3; -update noar tt set b1='9408YTEZ8T663GTS2QQX4746EK5J1F1S' where id=3; -update noar ti set b1='9408YTEZ8T663GTS2QQX4746EK5J1F1S' where id=3; -update noar tt set b2='7GUW9SK72J533N5FXC1K8LNULNVTICU' where id=3; -update noar ti set b2='7GUW9SK72J533N5FXC1K8LNULNVTICU' where id=3; -update noar tt set b0='5ZSOS8M4RL1XWQ8HY' where id=4; -update noar ti set b0='5ZSOS8M4RL1XWQ8HY' where id=4; -update noar tt set b1='X5Z5' where id=4; -update noar ti set b1='X5Z5' where id=4; -update noar tt set b2='LNRQ93XDBJDYQFXVO2RJ37H5HNMHVEJ' where id=4; -update noar ti set b2='LNRQ93XDBJDYQFXVO2RJ37H5HNMHVEJ' where id=4; -update noar tt set b0='94C2GL4YNGAASVN92IT2NW0QQP2RI' where id=5; -update noar ti set b0='94C2GL4YNGAASVN92IT2NW0QQP2RI' where id=5; -update noar tt set b1='X6ITDE7ABH53PF' where id=5; -update noar ti set b1='X6ITDE7ABH53PF' where id=5; -update noar tt set b2='W' where id=5; -update noar ti set b2='W' where id=5; -update noar tt set b0='CEG3XGBX6RQ7B1FENR3' where id=6; -update noar ti set b0='CEG3XGBX6RQ7B1FENR3' where id=6; -update noar tt set b1='CO4D27' where id=6; -update noar ti set b1='CO4D27' where id=6; -update noar tt set b2='DOIM41UC9' where id=6; -update noar ti set b2='DOIM41UC9' where id=6; -update noar tt set b0='0WADZ1INY29EM4NRYZQ3W5BSH9' where id=7; -update noar ti set b0='0WADZ1INY29EM4NRYZQ3W5BSH9' where id=7; -update noar tt set b1='BLV10XRZ11JW6GKD9PT2095822N8UKL' where id=7; -update noar ti set b1='BLV10XRZ11JW6GKD9PT2095822N8UKL' where id=7; -update noar tt set b2='XL0N1RL4UGLEEI4IMXOK0Q9CM8RD34W' where id=7; -update noar ti set b2='XL0N1RL4UGLEEI4IMXOK0Q9CM8RD34W' where id=7; -update noar tt set b0='QBL41UGAVZR93301XC' where id=8; -update noar ti set b0='QBL41UGAVZR93301XC' where id=8; -update noar tt set b1='LDHXR' where id=8; -update noar ti set b1='LDHXR' where id=8; -update noar tt set b2='N2QE8D3GV' where id=8; -update noar ti set b2='N2QE8D3GV' where id=8; -update noar tt set b0='9R10GK0V2OS1P0R' where id=9; -update noar ti set b0='9R10GK0V2OS1P0R' where id=9; -update noar tt set b1='MWZRTKITWAU26FG' where id=9; -update noar ti set b1='MWZRTKITWAU26FG' where id=9; -update noar tt set b2='JNN6LED3DUMX5MINF94PUSA2X8BISZ' where id=9; -update noar ti set b2='JNN6LED3DUMX5MINF94PUSA2X8BISZ' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 tinyblob not null, - b1 longblob not null, - b2 text not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='SY45AWJB48MZHC43VI5DW' where id=1; -update noar ti set b0='SY45AWJB48MZHC43VI5DW' where id=1; -update noar tt set b1='96H' where id=1; -update noar ti set b1='96H' where id=1; -update noar tt set b2='1689MM2JZTPDAE8MNJY0EGRDK4' where id=1; -update noar ti set b2='1689MM2JZTPDAE8MNJY0EGRDK4' where id=1; -update noar tt set b0='C0O19W54H7X2EO0PJCIKC7' where id=2; -update noar ti set b0='C0O19W54H7X2EO0PJCIKC7' where id=2; -update noar tt set b1='JZBUGA4LZ4A60UZLUY1FFL8HROP3WUTX' where id=2; -update noar ti set b1='JZBUGA4LZ4A60UZLUY1FFL8HROP3WUTX' where id=2; -update noar tt set b2='WHY8VQENSVNTT3QEBSP' where id=2; -update noar ti set b2='WHY8VQENSVNTT3QEBSP' where id=2; -update noar tt set b0='TJ1O' where id=3; -update noar ti set b0='TJ1O' where id=3; -update noar tt set b1='4W0PA0WW' where id=3; -update noar ti set b1='4W0PA0WW' where id=3; -update noar tt set b2='S' where id=3; -update noar ti set b2='S' where id=3; -update noar tt set b0='PA0HGG5DVJC' where id=4; -update noar ti set b0='PA0HGG5DVJC' where id=4; -update noar tt set b1='VJH47XXPJ2O44R' where id=4; -update noar ti set b1='VJH47XXPJ2O44R' where id=4; -update noar tt set b2='5WON0SLKQORMLW327OP0I5YE' where id=4; -update noar ti set b2='5WON0SLKQORMLW327OP0I5YE' where id=4; -update noar tt set b0='K0FNWKUDU6PGTKBTQTD4FLBY1' where id=5; -update noar ti set b0='K0FNWKUDU6PGTKBTQTD4FLBY1' where id=5; -update noar tt set b1='0W6L6LE' where id=5; -update noar ti set b1='0W6L6LE' where id=5; -update noar tt set b2='PJCQRB7UFFS2RJEL' where id=5; -update noar ti set b2='PJCQRB7UFFS2RJEL' where id=5; -update noar tt set b0='IL6TP1RFJR94HAG7VYK7DL6AHQVN635F' where id=6; -update noar ti set b0='IL6TP1RFJR94HAG7VYK7DL6AHQVN635F' where id=6; -update noar tt set b1='QZTO52EKP2Y2Y4557L1I9MTYVKWCD' where id=6; -update noar ti set b1='QZTO52EKP2Y2Y4557L1I9MTYVKWCD' where id=6; -update noar tt set b2='XSLJT3MNK6RK4HECD5E56ESQTG01PCEA' where id=6; -update noar ti set b2='XSLJT3MNK6RK4HECD5E56ESQTG01PCEA' where id=6; -update noar tt set b0='TMAQ9ZOG4XPOGRZ' where id=7; -update noar ti set b0='TMAQ9ZOG4XPOGRZ' where id=7; -update noar tt set b1='YXAQPPYBPDFGH9WA3NUL3BZCX' where id=7; -update noar ti set b1='YXAQPPYBPDFGH9WA3NUL3BZCX' where id=7; -update noar tt set b2='PID8CVM27K9RJ1UB' where id=7; -update noar ti set b2='PID8CVM27K9RJ1UB' where id=7; -update noar tt set b0='PHFJ0NU50ZKFNXO' where id=8; -update noar ti set b0='PHFJ0NU50ZKFNXO' where id=8; -update noar tt set b1='WPBV4VCJ6U7MT8E' where id=8; -update noar ti set b1='WPBV4VCJ6U7MT8E' where id=8; -update noar tt set b2='R' where id=8; -update noar ti set b2='R' where id=8; -update noar tt set b0='958GJCAH96O' where id=9; -update noar ti set b0='958GJCAH96O' where id=9; -update noar tt set b1='AIUQ5E7L5BC53HLU3VB1' where id=9; -update noar ti set b1='AIUQ5E7L5BC53HLU3VB1' where id=9; -update noar tt set b2='VBEYW2GGA5C' where id=9; -update noar ti set b2='VBEYW2GGA5C' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 tinyblob null, - b1 text null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='XACHNX1V8L2VN8CILGTLWM' where id=1; -update noar ti set b0='XACHNX1V8L2VN8CILGTLWM' where id=1; -update noar tt set b1='A9MTUNFL5EDEMLWLI9RU4SIP' where id=1; -update noar ti set b1='A9MTUNFL5EDEMLWLI9RU4SIP' where id=1; -update noar tt set b2='M2LZ26BJND1NFOJDYCVDYY2C' where id=1; -update noar ti set b2='M2LZ26BJND1NFOJDYCVDYY2C' where id=1; -update noar tt set b0='1CL0J9L' where id=2; -update noar ti set b0='1CL0J9L' where id=2; -update noar tt set b1='26AIX' where id=2; -update noar ti set b1='26AIX' where id=2; -update noar tt set b2='9FRXB7JIQLUJM002NJ5RMV' where id=2; -update noar ti set b2='9FRXB7JIQLUJM002NJ5RMV' where id=2; -update noar tt set b0='6ZAEY1SYBUQL9' where id=3; -update noar ti set b0='6ZAEY1SYBUQL9' where id=3; -update noar tt set b1='IVQ4JSP77Y7UULE9A1A' where id=3; -update noar ti set b1='IVQ4JSP77Y7UULE9A1A' where id=3; -update noar tt set b2='C' where id=3; -update noar ti set b2='C' where id=3; -update noar tt set b0='YACCA1YGYGN' where id=4; -update noar ti set b0='YACCA1YGYGN' where id=4; -update noar tt set b1='TXP' where id=4; -update noar ti set b1='TXP' where id=4; -update noar tt set b2='Y3SQ73D3M7IP510OJN9ITSQO' where id=4; -update noar ti set b2='Y3SQ73D3M7IP510OJN9ITSQO' where id=4; -update noar tt set b0='EEQTPLLTY9BL617N' where id=5; -update noar ti set b0='EEQTPLLTY9BL617N' where id=5; -update noar tt set b1='NLBYP5VR2UQV' where id=5; -update noar ti set b1='NLBYP5VR2UQV' where id=5; -update noar tt set b2='5HUWC9Z1YAFNNQJ4BSXTBH' where id=5; -update noar ti set b2='5HUWC9Z1YAFNNQJ4BSXTBH' where id=5; -update noar tt set b0='X2Q6MI0C3DA21AO64P92RSUG2' where id=6; -update noar ti set b0='X2Q6MI0C3DA21AO64P92RSUG2' where id=6; -update noar tt set b1='MYB0RH25CM5Q' where id=6; -update noar ti set b1='MYB0RH25CM5Q' where id=6; -update noar tt set b2='K' where id=6; -update noar ti set b2='K' where id=6; -update noar tt set b0='OXQD66LHD40N05OX0UZUIVOKJF25G7Z' where id=7; -update noar ti set b0='OXQD66LHD40N05OX0UZUIVOKJF25G7Z' where id=7; -update noar tt set b1='VXWOLY7TY4L56GYDDYVUAPV0YM' where id=7; -update noar ti set b1='VXWOLY7TY4L56GYDDYVUAPV0YM' where id=7; -update noar tt set b2='7T2MC1QTPL9RVZZ6VWQJ0N1EL' where id=7; -update noar ti set b2='7T2MC1QTPL9RVZZ6VWQJ0N1EL' where id=7; -update noar tt set b0='BDGIOLLOX41TG66DSIG97IZ3RLWXB' where id=8; -update noar ti set b0='BDGIOLLOX41TG66DSIG97IZ3RLWXB' where id=8; -update noar tt set b1='FLHNNI472K' where id=8; -update noar ti set b1='FLHNNI472K' where id=8; -update noar tt set b2='Z7PR1N6R5A7CXK' where id=8; -update noar ti set b2='Z7PR1N6R5A7CXK' where id=8; -update noar tt set b0='FVEOP338T7' where id=9; -update noar ti set b0='FVEOP338T7' where id=9; -update noar tt set b1='KY0LPIV' where id=9; -update noar ti set b1='KY0LPIV' where id=9; -update noar tt set b2='Q1Z5ZR294ITKWNUCG01ME' where id=9; -update noar ti set b2='Q1Z5ZR294ITKWNUCG01ME' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 tinyblob not null, - b1 text not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='4ZTREP' where id=1; -update noar ti set b0='4ZTREP' where id=1; -update noar tt set b1='L8X5S9IQ2RAHKD6XM3Z9KTQNO78YTW' where id=1; -update noar ti set b1='L8X5S9IQ2RAHKD6XM3Z9KTQNO78YTW' where id=1; -update noar tt set b2='41YMD8JTG51IEPGRGTQ6MM225E' where id=1; -update noar ti set b2='41YMD8JTG51IEPGRGTQ6MM225E' where id=1; -update noar tt set b0='2PLFJJ82CMFP42NE5018RC65' where id=2; -update noar ti set b0='2PLFJJ82CMFP42NE5018RC65' where id=2; -update noar tt set b1='8282NR6B' where id=2; -update noar ti set b1='8282NR6B' where id=2; -update noar tt set b2='4XGVY3J' where id=2; -update noar ti set b2='4XGVY3J' where id=2; -update noar tt set b0='29VMTNQG642ZYUT8PJWECJS' where id=3; -update noar ti set b0='29VMTNQG642ZYUT8PJWECJS' where id=3; -update noar tt set b1='JZW2D' where id=3; -update noar ti set b1='JZW2D' where id=3; -update noar tt set b2='BR1MP4ZC90V46MDG' where id=3; -update noar ti set b2='BR1MP4ZC90V46MDG' where id=3; -update noar tt set b0='NMS9QB' where id=4; -update noar ti set b0='NMS9QB' where id=4; -update noar tt set b1='3A26DG0S2XHI' where id=4; -update noar ti set b1='3A26DG0S2XHI' where id=4; -update noar tt set b2='QPJIUG' where id=4; -update noar ti set b2='QPJIUG' where id=4; -update noar tt set b0='O2OPXB1YLKS4PWF4' where id=5; -update noar ti set b0='O2OPXB1YLKS4PWF4' where id=5; -update noar tt set b1='VZQJMENLLJ8PZUYPVJQ6WRFQ5VYKLY' where id=5; -update noar ti set b1='VZQJMENLLJ8PZUYPVJQ6WRFQ5VYKLY' where id=5; -update noar tt set b2='RW2Y42NS7VZZ' where id=5; -update noar ti set b2='RW2Y42NS7VZZ' where id=5; -update noar tt set b0='JIU7D6LO5RA' where id=6; -update noar ti set b0='JIU7D6LO5RA' where id=6; -update noar tt set b1='RHLROSF28RI' where id=6; -update noar ti set b1='RHLROSF28RI' where id=6; -update noar tt set b2='3H5YMX4MZ94L35EAEAZLADR4D2TEP' where id=6; -update noar ti set b2='3H5YMX4MZ94L35EAEAZLADR4D2TEP' where id=6; -update noar tt set b0='N3J5GB7JGOT' where id=7; -update noar ti set b0='N3J5GB7JGOT' where id=7; -update noar tt set b1='74D0861LTF58RLG' where id=7; -update noar ti set b1='74D0861LTF58RLG' where id=7; -update noar tt set b2='OVU3UN' where id=7; -update noar ti set b2='OVU3UN' where id=7; -update noar tt set b0='UYP0FCWXVJXXVQ91653G1Q1' where id=8; -update noar ti set b0='UYP0FCWXVJXXVQ91653G1Q1' where id=8; -update noar tt set b1='MI45Q2XOB5LIYZR7HT6PRB' where id=8; -update noar ti set b1='MI45Q2XOB5LIYZR7HT6PRB' where id=8; -update noar tt set b2='RAGG7VXX7DZ40FALUEX' where id=8; -update noar ti set b2='RAGG7VXX7DZ40FALUEX' where id=8; -update noar tt set b0='NK' where id=9; -update noar ti set b0='NK' where id=9; -update noar tt set b1='ZGSZI1LMJ1BI82XFI6' where id=9; -update noar ti set b1='ZGSZI1LMJ1BI82XFI6' where id=9; -update noar tt set b2='CV1TLDFLXTRYFMYPEKI57U6YXX2FG' where id=9; -update noar ti set b2='CV1TLDFLXTRYFMYPEKI57U6YXX2FG' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 tinyblob null, - b1 text null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='J6UT4L0CV5TFE' where id=1; -update noar ti set b0='J6UT4L0CV5TFE' where id=1; -update noar tt set b1='ULUG7J2AP3RBZR9BEWG48N6' where id=1; -update noar ti set b1='ULUG7J2AP3RBZR9BEWG48N6' where id=1; -update noar tt set b2='B5PFGDG0FVSR' where id=1; -update noar ti set b2='B5PFGDG0FVSR' where id=1; -update noar tt set b0='ACILM35DA1RCEMX72QNYDS' where id=2; -update noar ti set b0='ACILM35DA1RCEMX72QNYDS' where id=2; -update noar tt set b1='UDL9EWXMJYR5' where id=2; -update noar ti set b1='UDL9EWXMJYR5' where id=2; -update noar tt set b2='O9ZMOIXEA' where id=2; -update noar ti set b2='O9ZMOIXEA' where id=2; -update noar tt set b0='45BESPEY2SBE' where id=3; -update noar ti set b0='45BESPEY2SBE' where id=3; -update noar tt set b1='O655ZSCFIE871GV4PT3FI' where id=3; -update noar ti set b1='O655ZSCFIE871GV4PT3FI' where id=3; -update noar tt set b2='JYUSOPL0UTP19Y2ZXZMI2UEPKF' where id=3; -update noar ti set b2='JYUSOPL0UTP19Y2ZXZMI2UEPKF' where id=3; -update noar tt set b0='NP' where id=4; -update noar ti set b0='NP' where id=4; -update noar tt set b1='U68SQCT' where id=4; -update noar ti set b1='U68SQCT' where id=4; -update noar tt set b2='TDPUMJLW0JAK3D7Y1IHR' where id=4; -update noar ti set b2='TDPUMJLW0JAK3D7Y1IHR' where id=4; -update noar tt set b0='J8EM359HBKQT0' where id=5; -update noar ti set b0='J8EM359HBKQT0' where id=5; -update noar tt set b1='MGCQE9TVGNA1PBOSCMGYNHJZD' where id=5; -update noar ti set b1='MGCQE9TVGNA1PBOSCMGYNHJZD' where id=5; -update noar tt set b2='H8JXMDJKJ84C28OAX' where id=5; -update noar ti set b2='H8JXMDJKJ84C28OAX' where id=5; -update noar tt set b0='X3YBKBN9J0' where id=6; -update noar ti set b0='X3YBKBN9J0' where id=6; -update noar tt set b1='9EN14YI0UBGRKRGZX1ET' where id=6; -update noar ti set b1='9EN14YI0UBGRKRGZX1ET' where id=6; -update noar tt set b2='UICXV153KI63KIA3YL9YN58IP5P14B' where id=6; -update noar ti set b2='UICXV153KI63KIA3YL9YN58IP5P14B' where id=6; -update noar tt set b0='4UU4G6MY8DTWZVASILHQ' where id=7; -update noar ti set b0='4UU4G6MY8DTWZVASILHQ' where id=7; -update noar tt set b1='8Z7LRW9ENCJA5VT25AKUUO04' where id=7; -update noar ti set b1='8Z7LRW9ENCJA5VT25AKUUO04' where id=7; -update noar tt set b2='BMER3TQ1A3FIH9O' where id=7; -update noar ti set b2='BMER3TQ1A3FIH9O' where id=7; -update noar tt set b0='FY1YP7EHHO2GSO13Q8UERG5GL1D' where id=8; -update noar ti set b0='FY1YP7EHHO2GSO13Q8UERG5GL1D' where id=8; -update noar tt set b1='VNA082E3LI9G' where id=8; -update noar ti set b1='VNA082E3LI9G' where id=8; -update noar tt set b2='91EDWQ87M' where id=8; -update noar ti set b2='91EDWQ87M' where id=8; -update noar tt set b0='RZ3YBHHYG5WWXOZJMIE' where id=9; -update noar ti set b0='RZ3YBHHYG5WWXOZJMIE' where id=9; -update noar tt set b1='XN8LKNMPI' where id=9; -update noar ti set b1='XN8LKNMPI' where id=9; -update noar tt set b2='5Z' where id=9; -update noar ti set b2='5Z' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 tinyblob not null, - b1 text not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='JAOF86PXKZMP1DCOGYPEX67EUZAZD' where id=1; -update noar ti set b0='JAOF86PXKZMP1DCOGYPEX67EUZAZD' where id=1; -update noar tt set b1='LDG5RVX8F' where id=1; -update noar ti set b1='LDG5RVX8F' where id=1; -update noar tt set b2='ZCR6M6394O' where id=1; -update noar ti set b2='ZCR6M6394O' where id=1; -update noar tt set b0='9ZSJM50B2Y3MFOUVKC' where id=2; -update noar ti set b0='9ZSJM50B2Y3MFOUVKC' where id=2; -update noar tt set b1='SCCEKNG6YF' where id=2; -update noar ti set b1='SCCEKNG6YF' where id=2; -update noar tt set b2='PKXDPVWGICX5LHIHZKRI' where id=2; -update noar ti set b2='PKXDPVWGICX5LHIHZKRI' where id=2; -update noar tt set b0='F98Q0DMX' where id=3; -update noar ti set b0='F98Q0DMX' where id=3; -update noar tt set b1='HSWFR62' where id=3; -update noar ti set b1='HSWFR62' where id=3; -update noar tt set b2='FOTDH' where id=3; -update noar ti set b2='FOTDH' where id=3; -update noar tt set b0='KCK' where id=4; -update noar ti set b0='KCK' where id=4; -update noar tt set b1='UQTU3ZCBGJX' where id=4; -update noar ti set b1='UQTU3ZCBGJX' where id=4; -update noar tt set b2='B37KUKFKMC3EET1IP6' where id=4; -update noar ti set b2='B37KUKFKMC3EET1IP6' where id=4; -update noar tt set b0='DBLPTXA' where id=5; -update noar ti set b0='DBLPTXA' where id=5; -update noar tt set b1='WW7SS8L91YKM' where id=5; -update noar ti set b1='WW7SS8L91YKM' where id=5; -update noar tt set b2='NA' where id=5; -update noar ti set b2='NA' where id=5; -update noar tt set b0='NRNCPQLLLBBL5YN36PC3L7P811HCETY' where id=6; -update noar ti set b0='NRNCPQLLLBBL5YN36PC3L7P811HCETY' where id=6; -update noar tt set b1='P2K8SUMEKQGRHS9H4IO7L5EPZ7' where id=6; -update noar ti set b1='P2K8SUMEKQGRHS9H4IO7L5EPZ7' where id=6; -update noar tt set b2='RXOJ5' where id=6; -update noar ti set b2='RXOJ5' where id=6; -update noar tt set b0='RDDNNT' where id=7; -update noar ti set b0='RDDNNT' where id=7; -update noar tt set b1='CGQK3MHL0A20NU' where id=7; -update noar ti set b1='CGQK3MHL0A20NU' where id=7; -update noar tt set b2='UFK0AUJ7ZITUZZOSBPMB6C1Q' where id=7; -update noar ti set b2='UFK0AUJ7ZITUZZOSBPMB6C1Q' where id=7; -update noar tt set b0='TDRVBP3' where id=8; -update noar ti set b0='TDRVBP3' where id=8; -update noar tt set b1='L4TJZ5AHCQKQ9YJ89M' where id=8; -update noar ti set b1='L4TJZ5AHCQKQ9YJ89M' where id=8; -update noar tt set b2='CJWQN82XPOZG88O27UV01NGJ02V2K' where id=8; -update noar ti set b2='CJWQN82XPOZG88O27UV01NGJ02V2K' where id=8; -update noar tt set b0='SS9YA7U3VCZSS34VJDDE' where id=9; -update noar ti set b0='SS9YA7U3VCZSS34VJDDE' where id=9; -update noar tt set b1='KL5OI2675CDMOGA234B2BR3Y8' where id=9; -update noar ti set b1='KL5OI2675CDMOGA234B2BR3Y8' where id=9; -update noar tt set b2='6FYOP' where id=9; -update noar ti set b2='6FYOP' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 tinyblob null, - b1 text null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='NQ6E2TT4QEUBCL0BM5QYMUXKUUC' where id=1; -update noar ti set b0='NQ6E2TT4QEUBCL0BM5QYMUXKUUC' where id=1; -update noar tt set b1='2OZH' where id=1; -update noar ti set b1='2OZH' where id=1; -update noar tt set b2='M' where id=1; -update noar ti set b2='M' where id=1; -update noar tt set b0='6FZANCNLQB5500WADDZAK' where id=2; -update noar ti set b0='6FZANCNLQB5500WADDZAK' where id=2; -update noar tt set b1='AQNIUDUTQIFS' where id=2; -update noar ti set b1='AQNIUDUTQIFS' where id=2; -update noar tt set b2='539MKB4ULIIPBQTQ9N' where id=2; -update noar ti set b2='539MKB4ULIIPBQTQ9N' where id=2; -update noar tt set b0='T9K4XVUEVWP' where id=3; -update noar ti set b0='T9K4XVUEVWP' where id=3; -update noar tt set b1='53UC17TUE2R' where id=3; -update noar ti set b1='53UC17TUE2R' where id=3; -update noar tt set b2='M9H86EJYS258IAST' where id=3; -update noar ti set b2='M9H86EJYS258IAST' where id=3; -update noar tt set b0='GRQEOSO0KL5T' where id=4; -update noar ti set b0='GRQEOSO0KL5T' where id=4; -update noar tt set b1='06T5RMX3X06GN0T3627I4GPAQHV' where id=4; -update noar ti set b1='06T5RMX3X06GN0T3627I4GPAQHV' where id=4; -update noar tt set b2='S71PWP7V0OPD0P6JW' where id=4; -update noar ti set b2='S71PWP7V0OPD0P6JW' where id=4; -update noar tt set b0='QA43317YFTZ8Z5YIISY' where id=5; -update noar ti set b0='QA43317YFTZ8Z5YIISY' where id=5; -update noar tt set b1='S0PDNFO517' where id=5; -update noar ti set b1='S0PDNFO517' where id=5; -update noar tt set b2='8RLSMA8BC8SXOMV7G' where id=5; -update noar ti set b2='8RLSMA8BC8SXOMV7G' where id=5; -update noar tt set b0='WA3MOZRQSM9TRED7L0H' where id=6; -update noar ti set b0='WA3MOZRQSM9TRED7L0H' where id=6; -update noar tt set b1='SQ9' where id=6; -update noar ti set b1='SQ9' where id=6; -update noar tt set b2='AI24SPUR5ELGV' where id=6; -update noar ti set b2='AI24SPUR5ELGV' where id=6; -update noar tt set b0='AK67' where id=7; -update noar ti set b0='AK67' where id=7; -update noar tt set b1='ZKN47H9X6KD6W' where id=7; -update noar ti set b1='ZKN47H9X6KD6W' where id=7; -update noar tt set b2='AVCJG4V34FIFWQLO3A4KDVB' where id=7; -update noar ti set b2='AVCJG4V34FIFWQLO3A4KDVB' where id=7; -update noar tt set b0='YGS9AS49D' where id=8; -update noar ti set b0='YGS9AS49D' where id=8; -update noar tt set b1='04G70' where id=8; -update noar ti set b1='04G70' where id=8; -update noar tt set b2='WUIG8UVJ5K3ESR4EA59G5GEK' where id=8; -update noar ti set b2='WUIG8UVJ5K3ESR4EA59G5GEK' where id=8; -update noar tt set b0='9Y59RWP' where id=9; -update noar ti set b0='9Y59RWP' where id=9; -update noar tt set b1='PO24Y3PXHMZ' where id=9; -update noar ti set b1='PO24Y3PXHMZ' where id=9; -update noar tt set b2='ZF9SWWE06ND4J1J4OW6Y5NDIR1B' where id=9; -update noar ti set b2='ZF9SWWE06ND4J1J4OW6Y5NDIR1B' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 tinyblob not null, - b1 text not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='CB7DR' where id=1; -update noar ti set b0='CB7DR' where id=1; -update noar tt set b1='3IV0V4FWCZSE8K63AQ2ABWB' where id=1; -update noar ti set b1='3IV0V4FWCZSE8K63AQ2ABWB' where id=1; -update noar tt set b2='JDTM2D021NWIIN' where id=1; -update noar ti set b2='JDTM2D021NWIIN' where id=1; -update noar tt set b0='BITNE28A94O6QUP' where id=2; -update noar ti set b0='BITNE28A94O6QUP' where id=2; -update noar tt set b1='UMNQHNDV' where id=2; -update noar ti set b1='UMNQHNDV' where id=2; -update noar tt set b2='JERM91Z2E5LU9CC' where id=2; -update noar ti set b2='JERM91Z2E5LU9CC' where id=2; -update noar tt set b0='2W2JH6VCFYO6QCE0DI0IWWJ07LQAVAQS' where id=3; -update noar ti set b0='2W2JH6VCFYO6QCE0DI0IWWJ07LQAVAQS' where id=3; -update noar tt set b1='5RYPYWU0361KJB44H9YC00AY3H8KYKB' where id=3; -update noar ti set b1='5RYPYWU0361KJB44H9YC00AY3H8KYKB' where id=3; -update noar tt set b2='I7V5B0TF' where id=3; -update noar ti set b2='I7V5B0TF' where id=3; -update noar tt set b0='GSHODRIHOYZRWESEQD6B0L' where id=4; -update noar ti set b0='GSHODRIHOYZRWESEQD6B0L' where id=4; -update noar tt set b1='P9OO2VK94SQX7954EITPZ1VWX9KQQ27' where id=4; -update noar ti set b1='P9OO2VK94SQX7954EITPZ1VWX9KQQ27' where id=4; -update noar tt set b2='2NBA9A86IJO6L' where id=4; -update noar ti set b2='2NBA9A86IJO6L' where id=4; -update noar tt set b0='3TDU4' where id=5; -update noar ti set b0='3TDU4' where id=5; -update noar tt set b1='CMCUYBXLGZUX2KZ0' where id=5; -update noar ti set b1='CMCUYBXLGZUX2KZ0' where id=5; -update noar tt set b2='4O4M2' where id=5; -update noar ti set b2='4O4M2' where id=5; -update noar tt set b0='WUVU8KP4WO' where id=6; -update noar ti set b0='WUVU8KP4WO' where id=6; -update noar tt set b1='NCCSZ' where id=6; -update noar ti set b1='NCCSZ' where id=6; -update noar tt set b2='3BFOMBUZAYFA1F36OSC5QJHU2MKP' where id=6; -update noar ti set b2='3BFOMBUZAYFA1F36OSC5QJHU2MKP' where id=6; -update noar tt set b0='GUX' where id=7; -update noar ti set b0='GUX' where id=7; -update noar tt set b1='CMKTB0YO39RHKZNY0M81ZW' where id=7; -update noar ti set b1='CMKTB0YO39RHKZNY0M81ZW' where id=7; -update noar tt set b2='KK7IRA9L20NW9R9ZGXP5' where id=7; -update noar ti set b2='KK7IRA9L20NW9R9ZGXP5' where id=7; -update noar tt set b0='GSI2IM6JPB2L' where id=8; -update noar ti set b0='GSI2IM6JPB2L' where id=8; -update noar tt set b1='U' where id=8; -update noar ti set b1='U' where id=8; -update noar tt set b2='Y70ZWZNCLRAU44ALT7SL9F2' where id=8; -update noar ti set b2='Y70ZWZNCLRAU44ALT7SL9F2' where id=8; -update noar tt set b0='CZKFARQ39XKQRYMEOPZ4ROXKTB4' where id=9; -update noar ti set b0='CZKFARQ39XKQRYMEOPZ4ROXKTB4' where id=9; -update noar tt set b1='C4T7JPODAU7C0PFY2FGG089NYSISK' where id=9; -update noar ti set b1='C4T7JPODAU7C0PFY2FGG089NYSISK' where id=9; -update noar tt set b2='AVIL6S41XDR' where id=9; -update noar ti set b2='AVIL6S41XDR' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 tinyblob null, - b1 text null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='ID15RM6NVRAE2G1SVR3ID6NMNE8' where id=1; -update noar ti set b0='ID15RM6NVRAE2G1SVR3ID6NMNE8' where id=1; -update noar tt set b1='5HM871AGHGOMW5M90ATJCQ94LLT' where id=1; -update noar ti set b1='5HM871AGHGOMW5M90ATJCQ94LLT' where id=1; -update noar tt set b2='N0ZJ8991LSCTIPFCEC59E3' where id=1; -update noar ti set b2='N0ZJ8991LSCTIPFCEC59E3' where id=1; -update noar tt set b0='KUTQ50HVQYE6COC26MBXCU1' where id=2; -update noar ti set b0='KUTQ50HVQYE6COC26MBXCU1' where id=2; -update noar tt set b1='YLDR7E378DNE' where id=2; -update noar ti set b1='YLDR7E378DNE' where id=2; -update noar tt set b2='NJJVF17WBMUWCSYY82F0' where id=2; -update noar ti set b2='NJJVF17WBMUWCSYY82F0' where id=2; -update noar tt set b0='3FQEA5CICF' where id=3; -update noar ti set b0='3FQEA5CICF' where id=3; -update noar tt set b1='ZQKVL3BTHCPO8R86RXMAGO' where id=3; -update noar ti set b1='ZQKVL3BTHCPO8R86RXMAGO' where id=3; -update noar tt set b2='SUDTA2Q17P8PC8EJXV3SQEQKGKQ' where id=3; -update noar ti set b2='SUDTA2Q17P8PC8EJXV3SQEQKGKQ' where id=3; -update noar tt set b0='ACZNH5S' where id=4; -update noar ti set b0='ACZNH5S' where id=4; -update noar tt set b1='7FLNC66NGQXBP6C9HM7EZW' where id=4; -update noar ti set b1='7FLNC66NGQXBP6C9HM7EZW' where id=4; -update noar tt set b2='1QVH7ZG3DBS8CYBKJH4' where id=4; -update noar ti set b2='1QVH7ZG3DBS8CYBKJH4' where id=4; -update noar tt set b0='SL2JPIFL9KJH9Y0ZNA' where id=5; -update noar ti set b0='SL2JPIFL9KJH9Y0ZNA' where id=5; -update noar tt set b1='74MXZYEC23I88SRDCDKL0KEN3XIGA' where id=5; -update noar ti set b1='74MXZYEC23I88SRDCDKL0KEN3XIGA' where id=5; -update noar tt set b2='F' where id=5; -update noar ti set b2='F' where id=5; -update noar tt set b0='ML4FYQJY' where id=6; -update noar ti set b0='ML4FYQJY' where id=6; -update noar tt set b1='J5A25CVP62XE15ZNWTDL' where id=6; -update noar ti set b1='J5A25CVP62XE15ZNWTDL' where id=6; -update noar tt set b2='AJ97L5X' where id=6; -update noar ti set b2='AJ97L5X' where id=6; -update noar tt set b0='4C1BU1FHDZGIWOB1UCOCK9' where id=7; -update noar ti set b0='4C1BU1FHDZGIWOB1UCOCK9' where id=7; -update noar tt set b1='RPP' where id=7; -update noar ti set b1='RPP' where id=7; -update noar tt set b2='TE76F0I8RK0YW680LKEPYMP2SFV6CO' where id=7; -update noar ti set b2='TE76F0I8RK0YW680LKEPYMP2SFV6CO' where id=7; -update noar tt set b0='X' where id=8; -update noar ti set b0='X' where id=8; -update noar tt set b1='O0X6BSPSO126CGGS2BG3KL' where id=8; -update noar ti set b1='O0X6BSPSO126CGGS2BG3KL' where id=8; -update noar tt set b2='JBJ0451' where id=8; -update noar ti set b2='JBJ0451' where id=8; -update noar tt set b0='F34MEXGXKFBM2UT' where id=9; -update noar ti set b0='F34MEXGXKFBM2UT' where id=9; -update noar tt set b1='BSRWZP0Z' where id=9; -update noar ti set b1='BSRWZP0Z' where id=9; -update noar tt set b2='37EEOCYR6T3PNEDX3FBQ92G4T53WODTW' where id=9; -update noar ti set b2='37EEOCYR6T3PNEDX3FBQ92G4T53WODTW' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 tinyblob not null, - b1 text not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='7JBUS90CC54ZP' where id=1; -update noar ti set b0='7JBUS90CC54ZP' where id=1; -update noar tt set b1='Q3GDRWNXSY5D6MN7NO6IFE1O4FKSJ' where id=1; -update noar ti set b1='Q3GDRWNXSY5D6MN7NO6IFE1O4FKSJ' where id=1; -update noar tt set b2='7O74JBSYLSGCO1BSEDBGUK7P4F8UPYHY' where id=1; -update noar ti set b2='7O74JBSYLSGCO1BSEDBGUK7P4F8UPYHY' where id=1; -update noar tt set b0='VZY0DWFNAZOFKNZ60GSQQYFFPJXM' where id=2; -update noar ti set b0='VZY0DWFNAZOFKNZ60GSQQYFFPJXM' where id=2; -update noar tt set b1='CALYLSO8EXTSLTJFPTPXDT302' where id=2; -update noar ti set b1='CALYLSO8EXTSLTJFPTPXDT302' where id=2; -update noar tt set b2='BCLO1TUGPY9PS6VMPB4H53' where id=2; -update noar ti set b2='BCLO1TUGPY9PS6VMPB4H53' where id=2; -update noar tt set b0='LDNC3KFAGW5I' where id=3; -update noar ti set b0='LDNC3KFAGW5I' where id=3; -update noar tt set b1='MUYKZMYSE05JY16RL9RPL' where id=3; -update noar ti set b1='MUYKZMYSE05JY16RL9RPL' where id=3; -update noar tt set b2='9V56GV2MB7ST6EQ0C373AW3VJYPIB3' where id=3; -update noar ti set b2='9V56GV2MB7ST6EQ0C373AW3VJYPIB3' where id=3; -update noar tt set b0='GEY8K2LOBOUWBYMIJ9562W4TF6OCBB5' where id=4; -update noar ti set b0='GEY8K2LOBOUWBYMIJ9562W4TF6OCBB5' where id=4; -update noar tt set b1='LJBIHLQ535ZNG1EK7BT' where id=4; -update noar ti set b1='LJBIHLQ535ZNG1EK7BT' where id=4; -update noar tt set b2='9N646DR7QUUOC' where id=4; -update noar ti set b2='9N646DR7QUUOC' where id=4; -update noar tt set b0='430HB1DAVS6CF' where id=5; -update noar ti set b0='430HB1DAVS6CF' where id=5; -update noar tt set b1='0OV3ZGF2JUUDEKR5L' where id=5; -update noar ti set b1='0OV3ZGF2JUUDEKR5L' where id=5; -update noar tt set b2='5CFJKPAREPGLQYBVV736BL01Z' where id=5; -update noar ti set b2='5CFJKPAREPGLQYBVV736BL01Z' where id=5; -update noar tt set b0='AD312BIYRDC' where id=6; -update noar ti set b0='AD312BIYRDC' where id=6; -update noar tt set b1='Z16' where id=6; -update noar ti set b1='Z16' where id=6; -update noar tt set b2='LGZWGGFJ5UF36HJDJYD2K' where id=6; -update noar ti set b2='LGZWGGFJ5UF36HJDJYD2K' where id=6; -update noar tt set b0='E3QALDLJUSKLJRLI3F5TXI1KF' where id=7; -update noar ti set b0='E3QALDLJUSKLJRLI3F5TXI1KF' where id=7; -update noar tt set b1='UWI9LX49HEZ49F1AJ21ZDWVXII42RL' where id=7; -update noar ti set b1='UWI9LX49HEZ49F1AJ21ZDWVXII42RL' where id=7; -update noar tt set b2='8W9Y' where id=7; -update noar ti set b2='8W9Y' where id=7; -update noar tt set b0='KHXNWY' where id=8; -update noar ti set b0='KHXNWY' where id=8; -update noar tt set b1='JY99H9VWYTEYZAP2P8ICC1' where id=8; -update noar ti set b1='JY99H9VWYTEYZAP2P8ICC1' where id=8; -update noar tt set b2='AXAF9HDTLTU' where id=8; -update noar ti set b2='AXAF9HDTLTU' where id=8; -update noar tt set b0='YYQTPL5FVDQS9OQ2HGAZT19I' where id=9; -update noar ti set b0='YYQTPL5FVDQS9OQ2HGAZT19I' where id=9; -update noar tt set b1='6J0DCU71M0ASWYCZPRML1G4KMWLKO9' where id=9; -update noar ti set b1='6J0DCU71M0ASWYCZPRML1G4KMWLKO9' where id=9; -update noar tt set b2='M0H5STWTOHCH9PC' where id=9; -update noar ti set b2='M0H5STWTOHCH9PC' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 tinyblob null, - b1 text null, - b2 text null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='91DCSZ52QOPUF59N8T' where id=1; -update noar ti set b0='91DCSZ52QOPUF59N8T' where id=1; -update noar tt set b1='91IHWVIPDW753US2CW9TDI' where id=1; -update noar ti set b1='91IHWVIPDW753US2CW9TDI' where id=1; -update noar tt set b2='00D2H' where id=1; -update noar ti set b2='00D2H' where id=1; -update noar tt set b0='XZDPPXL0GDH1QZL9DSQK60OI0M1X84X' where id=2; -update noar ti set b0='XZDPPXL0GDH1QZL9DSQK60OI0M1X84X' where id=2; -update noar tt set b1='I' where id=2; -update noar ti set b1='I' where id=2; -update noar tt set b2='AHEXM1L97KOTB9KXI29YGDSY6FOF' where id=2; -update noar ti set b2='AHEXM1L97KOTB9KXI29YGDSY6FOF' where id=2; -update noar tt set b0='VYILFYJM08X5A1ZURWVYE6X7ADXO2S' where id=3; -update noar ti set b0='VYILFYJM08X5A1ZURWVYE6X7ADXO2S' where id=3; -update noar tt set b1='VAV9I4VHTMEZ0U8IEZQV' where id=3; -update noar ti set b1='VAV9I4VHTMEZ0U8IEZQV' where id=3; -update noar tt set b2='3PP5X4QIEXYD6C93ASOSQZVZW4TINIY' where id=3; -update noar ti set b2='3PP5X4QIEXYD6C93ASOSQZVZW4TINIY' where id=3; -update noar tt set b0='0XLZV04KSUMJFY92AK71V5AN3' where id=4; -update noar ti set b0='0XLZV04KSUMJFY92AK71V5AN3' where id=4; -update noar tt set b1='C4M9BGY6GTKID0D8W7QFIG' where id=4; -update noar ti set b1='C4M9BGY6GTKID0D8W7QFIG' where id=4; -update noar tt set b2='B4UK' where id=4; -update noar ti set b2='B4UK' where id=4; -update noar tt set b0='KIF9PC0XV722MUNP8CKWAVX' where id=5; -update noar ti set b0='KIF9PC0XV722MUNP8CKWAVX' where id=5; -update noar tt set b1='ULKUU2EK' where id=5; -update noar ti set b1='ULKUU2EK' where id=5; -update noar tt set b2='0RP6EJLHGTFEZLSUJM3FV' where id=5; -update noar ti set b2='0RP6EJLHGTFEZLSUJM3FV' where id=5; -update noar tt set b0='EKB7' where id=6; -update noar ti set b0='EKB7' where id=6; -update noar tt set b1='94K' where id=6; -update noar ti set b1='94K' where id=6; -update noar tt set b2='PA9H' where id=6; -update noar ti set b2='PA9H' where id=6; -update noar tt set b0='OAQ9A2Z2WWDK2C05JYB1XVNCSCVOAX' where id=7; -update noar ti set b0='OAQ9A2Z2WWDK2C05JYB1XVNCSCVOAX' where id=7; -update noar tt set b1='3UG8NITM4B' where id=7; -update noar ti set b1='3UG8NITM4B' where id=7; -update noar tt set b2='PS6MJPIGPL7WBXD6QHCWEF5EZ7' where id=7; -update noar ti set b2='PS6MJPIGPL7WBXD6QHCWEF5EZ7' where id=7; -update noar tt set b0='29ZHZEZ6IXV50BXETX8' where id=8; -update noar ti set b0='29ZHZEZ6IXV50BXETX8' where id=8; -update noar tt set b1='8I3NM1AZEP' where id=8; -update noar ti set b1='8I3NM1AZEP' where id=8; -update noar tt set b2='ZIE8PAUV13PKXDSB' where id=8; -update noar ti set b2='ZIE8PAUV13PKXDSB' where id=8; -update noar tt set b0='P7ZZOLEGWA' where id=9; -update noar ti set b0='P7ZZOLEGWA' where id=9; -update noar tt set b1='ZEY1GVHHPTJMQ8YIXEODPKD6A893' where id=9; -update noar ti set b1='ZEY1GVHHPTJMQ8YIXEODPKD6A893' where id=9; -update noar tt set b2='3U3PCBQYYCMKR3SHEJ' where id=9; -update noar ti set b2='3U3PCBQYYCMKR3SHEJ' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 tinyblob not null, - b1 text not null, - b2 text not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='3VHW6PMZ2' where id=1; -update noar ti set b0='3VHW6PMZ2' where id=1; -update noar tt set b1='KOTGK0AV3UUROTM' where id=1; -update noar ti set b1='KOTGK0AV3UUROTM' where id=1; -update noar tt set b2='NQ2OJDDTWDURBJA4' where id=1; -update noar ti set b2='NQ2OJDDTWDURBJA4' where id=1; -update noar tt set b0='GTTPG2F21EXGXIMTS51HV5LYM452NMX' where id=2; -update noar ti set b0='GTTPG2F21EXGXIMTS51HV5LYM452NMX' where id=2; -update noar tt set b1='GBYE0' where id=2; -update noar ti set b1='GBYE0' where id=2; -update noar tt set b2='M9TO3FKFONZ5F3JQGZSOP2ILQRDBX' where id=2; -update noar ti set b2='M9TO3FKFONZ5F3JQGZSOP2ILQRDBX' where id=2; -update noar tt set b0='B4319RTBKXUV955KWWU2MKUO' where id=3; -update noar ti set b0='B4319RTBKXUV955KWWU2MKUO' where id=3; -update noar tt set b1='Q6PIZF4PZQZLK414RJEDFW' where id=3; -update noar ti set b1='Q6PIZF4PZQZLK414RJEDFW' where id=3; -update noar tt set b2='09UP4L2FGEJ53AFXVDMICCYCF5XV4' where id=3; -update noar ti set b2='09UP4L2FGEJ53AFXVDMICCYCF5XV4' where id=3; -update noar tt set b0='MF2U3X8OEE44EIJGW3F7I9T' where id=4; -update noar ti set b0='MF2U3X8OEE44EIJGW3F7I9T' where id=4; -update noar tt set b1='AQHCVO6WNYD4960ZQPP5' where id=4; -update noar ti set b1='AQHCVO6WNYD4960ZQPP5' where id=4; -update noar tt set b2='A04YIZ' where id=4; -update noar ti set b2='A04YIZ' where id=4; -update noar tt set b0='539WAPOAOKDJ5EYUSX4F' where id=5; -update noar ti set b0='539WAPOAOKDJ5EYUSX4F' where id=5; -update noar tt set b1='YX5DH' where id=5; -update noar ti set b1='YX5DH' where id=5; -update noar tt set b2='KBNW7EI9GT' where id=5; -update noar ti set b2='KBNW7EI9GT' where id=5; -update noar tt set b0='YTKJ4' where id=6; -update noar ti set b0='YTKJ4' where id=6; -update noar tt set b1='W8T941CRUZGE018BDESL26RYYQDLPR5K' where id=6; -update noar ti set b1='W8T941CRUZGE018BDESL26RYYQDLPR5K' where id=6; -update noar tt set b2='CIJ4JAYKUG' where id=6; -update noar ti set b2='CIJ4JAYKUG' where id=6; -update noar tt set b0='IMK5JCJD6FKDYH2KTTLFBCOPTOU' where id=7; -update noar ti set b0='IMK5JCJD6FKDYH2KTTLFBCOPTOU' where id=7; -update noar tt set b1='YQC2H44B78Z8PDTZ54FLH81BLYR28DK' where id=7; -update noar ti set b1='YQC2H44B78Z8PDTZ54FLH81BLYR28DK' where id=7; -update noar tt set b2='LT36URXKF16PVURRC61WUL' where id=7; -update noar ti set b2='LT36URXKF16PVURRC61WUL' where id=7; -update noar tt set b0='CK8JJ2RH79NGC3K79LZ9' where id=8; -update noar ti set b0='CK8JJ2RH79NGC3K79LZ9' where id=8; -update noar tt set b1='H' where id=8; -update noar ti set b1='H' where id=8; -update noar tt set b2='AOUJ2RUBOYPERTL02V7XPYSKHPLS4' where id=8; -update noar ti set b2='AOUJ2RUBOYPERTL02V7XPYSKHPLS4' where id=8; -update noar tt set b0='TYY4B20YTLT1WHX0I3E74O' where id=9; -update noar ti set b0='TYY4B20YTLT1WHX0I3E74O' where id=9; -update noar tt set b1='5MSSOO3CQILR74TVY86' where id=9; -update noar ti set b1='5MSSOO3CQILR74TVY86' where id=9; -update noar tt set b2='V21B9TTH2X612MTDW2Y' where id=9; -update noar ti set b2='V21B9TTH2X612MTDW2Y' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 blob null, - b1 tinyblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='LC8S6KPDD' where id=1; -update noar ti set b0='LC8S6KPDD' where id=1; -update noar tt set b1='TLLDEARF982' where id=1; -update noar ti set b1='TLLDEARF982' where id=1; -update noar tt set b2='ZVM3PFRK4JBRJJ48E129XZDDT' where id=1; -update noar ti set b2='ZVM3PFRK4JBRJJ48E129XZDDT' where id=1; -update noar tt set b0='XAQEJUH9CAW2CN2Y1OQ9QFBC' where id=2; -update noar ti set b0='XAQEJUH9CAW2CN2Y1OQ9QFBC' where id=2; -update noar tt set b1='33VKW0R95SXFZ' where id=2; -update noar ti set b1='33VKW0R95SXFZ' where id=2; -update noar tt set b2='AMGX9F' where id=2; -update noar ti set b2='AMGX9F' where id=2; -update noar tt set b0='1X1A6V' where id=3; -update noar ti set b0='1X1A6V' where id=3; -update noar tt set b1='J6T2XWFYLXJH6QREZ0' where id=3; -update noar ti set b1='J6T2XWFYLXJH6QREZ0' where id=3; -update noar tt set b2='RTBMVXOCOEISHDYKDTGE8' where id=3; -update noar ti set b2='RTBMVXOCOEISHDYKDTGE8' where id=3; -update noar tt set b0='BJM' where id=4; -update noar ti set b0='BJM' where id=4; -update noar tt set b1='KE50380QJ' where id=4; -update noar ti set b1='KE50380QJ' where id=4; -update noar tt set b2='87RJDL8EBX9XNJSKBAW9E30QOCS' where id=4; -update noar ti set b2='87RJDL8EBX9XNJSKBAW9E30QOCS' where id=4; -update noar tt set b0='O1VW0L1NLSGZLJBYQ9GNB917E' where id=5; -update noar ti set b0='O1VW0L1NLSGZLJBYQ9GNB917E' where id=5; -update noar tt set b1='XR321T8Z2WP5ZCKONENKVT4GV' where id=5; -update noar ti set b1='XR321T8Z2WP5ZCKONENKVT4GV' where id=5; -update noar tt set b2='NDF5N1R5OMSLJ04IWMZRVP' where id=5; -update noar ti set b2='NDF5N1R5OMSLJ04IWMZRVP' where id=5; -update noar tt set b0='2BB3BYC' where id=6; -update noar ti set b0='2BB3BYC' where id=6; -update noar tt set b1='BH2DF2O33A1S1VI8YUFQA4JWES9Z2LU' where id=6; -update noar ti set b1='BH2DF2O33A1S1VI8YUFQA4JWES9Z2LU' where id=6; -update noar tt set b2='XRYJSI04OJ74M1IL6F9ZS015GV' where id=6; -update noar ti set b2='XRYJSI04OJ74M1IL6F9ZS015GV' where id=6; -update noar tt set b0='PZKP9ERFSAJVOHCO7ONL' where id=7; -update noar ti set b0='PZKP9ERFSAJVOHCO7ONL' where id=7; -update noar tt set b1='WDMGY5HTUIN81RFPELXUE' where id=7; -update noar ti set b1='WDMGY5HTUIN81RFPELXUE' where id=7; -update noar tt set b2='FY774Z2PJ91O9XB817TZ078I' where id=7; -update noar ti set b2='FY774Z2PJ91O9XB817TZ078I' where id=7; -update noar tt set b0='4JJD618STH' where id=8; -update noar ti set b0='4JJD618STH' where id=8; -update noar tt set b1='OKLS4X' where id=8; -update noar ti set b1='OKLS4X' where id=8; -update noar tt set b2='UBMIJRROMCESRXBOI9AHQ4GC' where id=8; -update noar ti set b2='UBMIJRROMCESRXBOI9AHQ4GC' where id=8; -update noar tt set b0='Z3WSQBRPALJ2HLQ' where id=9; -update noar ti set b0='Z3WSQBRPALJ2HLQ' where id=9; -update noar tt set b1='8SWZFU0F0XUH' where id=9; -update noar ti set b1='8SWZFU0F0XUH' where id=9; -update noar tt set b2='TUHBCKAOBEYGP0RWXHC5R' where id=9; -update noar ti set b2='TUHBCKAOBEYGP0RWXHC5R' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 blob not null, - b1 tinyblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='R93JVVYJJGWJH' where id=1; -update noar ti set b0='R93JVVYJJGWJH' where id=1; -update noar tt set b1='Q7YYMWIZKRHL' where id=1; -update noar ti set b1='Q7YYMWIZKRHL' where id=1; -update noar tt set b2='IVYNOOU7MHO2VL29HBN' where id=1; -update noar ti set b2='IVYNOOU7MHO2VL29HBN' where id=1; -update noar tt set b0='DOZKTU7CZ5X1NQOBH4IWFS7YN5S' where id=2; -update noar ti set b0='DOZKTU7CZ5X1NQOBH4IWFS7YN5S' where id=2; -update noar tt set b1='O6' where id=2; -update noar ti set b1='O6' where id=2; -update noar tt set b2='6NF' where id=2; -update noar ti set b2='6NF' where id=2; -update noar tt set b0='R' where id=3; -update noar ti set b0='R' where id=3; -update noar tt set b1='GSRB8VQIA7SF7WRE3XW14MIHUG' where id=3; -update noar ti set b1='GSRB8VQIA7SF7WRE3XW14MIHUG' where id=3; -update noar tt set b2='Z4SEBK' where id=3; -update noar ti set b2='Z4SEBK' where id=3; -update noar tt set b0='EU0NG5RLNQ0FG93SIRDU9A' where id=4; -update noar ti set b0='EU0NG5RLNQ0FG93SIRDU9A' where id=4; -update noar tt set b1='IJL4UHLTW8BM4GA5657' where id=4; -update noar ti set b1='IJL4UHLTW8BM4GA5657' where id=4; -update noar tt set b2='23' where id=4; -update noar ti set b2='23' where id=4; -update noar tt set b0='ZDN5A5GS3OS7LQY88E01BHTQMFN5' where id=5; -update noar ti set b0='ZDN5A5GS3OS7LQY88E01BHTQMFN5' where id=5; -update noar tt set b1='V' where id=5; -update noar ti set b1='V' where id=5; -update noar tt set b2='BBKV7E3NK63DB7PTNB5ZD27X' where id=5; -update noar ti set b2='BBKV7E3NK63DB7PTNB5ZD27X' where id=5; -update noar tt set b0='VAFM6B2QNOD565NT' where id=6; -update noar ti set b0='VAFM6B2QNOD565NT' where id=6; -update noar tt set b1='NZXGAS' where id=6; -update noar ti set b1='NZXGAS' where id=6; -update noar tt set b2='2I1K' where id=6; -update noar ti set b2='2I1K' where id=6; -update noar tt set b0='2KHYAGWQDIRI7' where id=7; -update noar ti set b0='2KHYAGWQDIRI7' where id=7; -update noar tt set b1='Z1YJXP5X080O6TZZC6CXIH2' where id=7; -update noar ti set b1='Z1YJXP5X080O6TZZC6CXIH2' where id=7; -update noar tt set b2='MDPB0RZV9CYYPZKYVLW9OKU1NH' where id=7; -update noar ti set b2='MDPB0RZV9CYYPZKYVLW9OKU1NH' where id=7; -update noar tt set b0='E5XVD0B3DVXQ2' where id=8; -update noar ti set b0='E5XVD0B3DVXQ2' where id=8; -update noar tt set b1='P9T' where id=8; -update noar ti set b1='P9T' where id=8; -update noar tt set b2='YV20LJ44P09WMKTBX10YSXQ6628BSG' where id=8; -update noar ti set b2='YV20LJ44P09WMKTBX10YSXQ6628BSG' where id=8; -update noar tt set b0='90F4IHGCHNWIBXCKYHK6AOTXXSIRK' where id=9; -update noar ti set b0='90F4IHGCHNWIBXCKYHK6AOTXXSIRK' where id=9; -update noar tt set b1='CXCQVMV9GZ2GMKGXEDV3' where id=9; -update noar ti set b1='CXCQVMV9GZ2GMKGXEDV3' where id=9; -update noar tt set b2='2Y' where id=9; -update noar ti set b2='2Y' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 blob null, - b1 tinyblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='PEP5' where id=1; -update noar ti set b0='PEP5' where id=1; -update noar tt set b1='0M1I4BRP' where id=1; -update noar ti set b1='0M1I4BRP' where id=1; -update noar tt set b2='TG68K9G337OOXS41DJOR' where id=1; -update noar ti set b2='TG68K9G337OOXS41DJOR' where id=1; -update noar tt set b0='LAFGLX4X2RI0P0CCVW1C07N9' where id=2; -update noar ti set b0='LAFGLX4X2RI0P0CCVW1C07N9' where id=2; -update noar tt set b1='Z' where id=2; -update noar ti set b1='Z' where id=2; -update noar tt set b2='5A1RV7LFLWKYH5LYKJ' where id=2; -update noar ti set b2='5A1RV7LFLWKYH5LYKJ' where id=2; -update noar tt set b0='7FQUO63Y4J3F6XY5TK8WBL1JC' where id=3; -update noar ti set b0='7FQUO63Y4J3F6XY5TK8WBL1JC' where id=3; -update noar tt set b1='ZCFL2' where id=3; -update noar ti set b1='ZCFL2' where id=3; -update noar tt set b2='UAHJRG88YC' where id=3; -update noar ti set b2='UAHJRG88YC' where id=3; -update noar tt set b0='X8MRZEL6JK4171PBO1LZA' where id=4; -update noar ti set b0='X8MRZEL6JK4171PBO1LZA' where id=4; -update noar tt set b1='2XLXGEI' where id=4; -update noar ti set b1='2XLXGEI' where id=4; -update noar tt set b2='C975AHK0Z27QDSYVVA4L' where id=4; -update noar ti set b2='C975AHK0Z27QDSYVVA4L' where id=4; -update noar tt set b0='W51BKRA1Y0OFVGT45X7I' where id=5; -update noar ti set b0='W51BKRA1Y0OFVGT45X7I' where id=5; -update noar tt set b1='VH3YFW0ZYJGQAYTYCWEBCH' where id=5; -update noar ti set b1='VH3YFW0ZYJGQAYTYCWEBCH' where id=5; -update noar tt set b2='FRBI6B14RG9U9UR592ET15APGR8W' where id=5; -update noar ti set b2='FRBI6B14RG9U9UR592ET15APGR8W' where id=5; -update noar tt set b0='TETT3YQ7QK9NAJRBHKC26GKRIB8Q' where id=6; -update noar ti set b0='TETT3YQ7QK9NAJRBHKC26GKRIB8Q' where id=6; -update noar tt set b1='8QBHGJIDHZDIG8P5PQ0T' where id=6; -update noar ti set b1='8QBHGJIDHZDIG8P5PQ0T' where id=6; -update noar tt set b2='TTTCN0' where id=6; -update noar ti set b2='TTTCN0' where id=6; -update noar tt set b0='0HCXJ' where id=7; -update noar ti set b0='0HCXJ' where id=7; -update noar tt set b1='6M20GGPW' where id=7; -update noar ti set b1='6M20GGPW' where id=7; -update noar tt set b2='H4PLC08K2YNCTTSEKOOATSOZC' where id=7; -update noar ti set b2='H4PLC08K2YNCTTSEKOOATSOZC' where id=7; -update noar tt set b0='6ZT2BYN' where id=8; -update noar ti set b0='6ZT2BYN' where id=8; -update noar tt set b1='C' where id=8; -update noar ti set b1='C' where id=8; -update noar tt set b2='9O50YGHXIBRJ1JAJV6XSXWBVLQ10F' where id=8; -update noar ti set b2='9O50YGHXIBRJ1JAJV6XSXWBVLQ10F' where id=8; -update noar tt set b0='0V2590NK7A2R8CUD' where id=9; -update noar ti set b0='0V2590NK7A2R8CUD' where id=9; -update noar tt set b1='A25YFMPK4BFE5NSBM2F' where id=9; -update noar ti set b1='A25YFMPK4BFE5NSBM2F' where id=9; -update noar tt set b2='FUTR' where id=9; -update noar ti set b2='FUTR' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 blob not null, - b1 tinyblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='SEEJNAC9DJK5GNKNR8W' where id=1; -update noar ti set b0='SEEJNAC9DJK5GNKNR8W' where id=1; -update noar tt set b1='FHRNE3KON82' where id=1; -update noar ti set b1='FHRNE3KON82' where id=1; -update noar tt set b2='2VY2YKWAQHTL3ZMQYYUSH2X' where id=1; -update noar ti set b2='2VY2YKWAQHTL3ZMQYYUSH2X' where id=1; -update noar tt set b0='ECECHGW0JU383KKXKWP22J9DFT48020' where id=2; -update noar ti set b0='ECECHGW0JU383KKXKWP22J9DFT48020' where id=2; -update noar tt set b1='9UA4TJ5UNGWAEXSRT' where id=2; -update noar ti set b1='9UA4TJ5UNGWAEXSRT' where id=2; -update noar tt set b2='NUJ3C6NAEHY' where id=2; -update noar ti set b2='NUJ3C6NAEHY' where id=2; -update noar tt set b0='BM45KXCGD13W' where id=3; -update noar ti set b0='BM45KXCGD13W' where id=3; -update noar tt set b1='OTM8SVJQF5YJ7QWW2MG7OG5' where id=3; -update noar ti set b1='OTM8SVJQF5YJ7QWW2MG7OG5' where id=3; -update noar tt set b2='0GW3NNBC1IBDHBHQA4N26UNZLK6E14' where id=3; -update noar ti set b2='0GW3NNBC1IBDHBHQA4N26UNZLK6E14' where id=3; -update noar tt set b0='9F53FRNHTUMARSSHZWVODPVETVD3FZ' where id=4; -update noar ti set b0='9F53FRNHTUMARSSHZWVODPVETVD3FZ' where id=4; -update noar tt set b1='4D58G6ES' where id=4; -update noar ti set b1='4D58G6ES' where id=4; -update noar tt set b2='9LGGUHPFFS6C8Q' where id=4; -update noar ti set b2='9LGGUHPFFS6C8Q' where id=4; -update noar tt set b0='8BE9BDC8CUJ' where id=5; -update noar ti set b0='8BE9BDC8CUJ' where id=5; -update noar tt set b1='5U9GAOG25169IZ1DVKQS' where id=5; -update noar ti set b1='5U9GAOG25169IZ1DVKQS' where id=5; -update noar tt set b2='TU' where id=5; -update noar ti set b2='TU' where id=5; -update noar tt set b0='B5YH59M1N4D2STGW53AEU3LKJU' where id=6; -update noar ti set b0='B5YH59M1N4D2STGW53AEU3LKJU' where id=6; -update noar tt set b1='BAYSON04AWUZKZPIII1HV4S4TVHTS9V' where id=6; -update noar ti set b1='BAYSON04AWUZKZPIII1HV4S4TVHTS9V' where id=6; -update noar tt set b2='HTRN4Y8HJ9J13NLKE3K27JXDWJX' where id=6; -update noar ti set b2='HTRN4Y8HJ9J13NLKE3K27JXDWJX' where id=6; -update noar tt set b0='GPVBNFUQWO2I1J7JH6HSK' where id=7; -update noar ti set b0='GPVBNFUQWO2I1J7JH6HSK' where id=7; -update noar tt set b1='DFAX1A56JBW6Y7AO0S4JFMTGEXFCRQU' where id=7; -update noar ti set b1='DFAX1A56JBW6Y7AO0S4JFMTGEXFCRQU' where id=7; -update noar tt set b2='3BVI11ICJX659667G265' where id=7; -update noar ti set b2='3BVI11ICJX659667G265' where id=7; -update noar tt set b0='ZME9A' where id=8; -update noar ti set b0='ZME9A' where id=8; -update noar tt set b1='UPTYEY4UNJPCEMCI6NVVL5LW' where id=8; -update noar ti set b1='UPTYEY4UNJPCEMCI6NVVL5LW' where id=8; -update noar tt set b2='0V6JJU3Z3VE' where id=8; -update noar ti set b2='0V6JJU3Z3VE' where id=8; -update noar tt set b0='F2BKAP8T8R8T4R3WKMVOXZ' where id=9; -update noar ti set b0='F2BKAP8T8R8T4R3WKMVOXZ' where id=9; -update noar tt set b1='JDF2T0VFB7W2MKQMU' where id=9; -update noar ti set b1='JDF2T0VFB7W2MKQMU' where id=9; -update noar tt set b2='TJGGCMAD2XJ7NHZ' where id=9; -update noar ti set b2='TJGGCMAD2XJ7NHZ' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 blob null, - b1 tinyblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='89HQW2DZA6JSQRBZZ0GD0HGCGY3' where id=1; -update noar ti set b0='89HQW2DZA6JSQRBZZ0GD0HGCGY3' where id=1; -update noar tt set b1='NQX44RYUJENELUWJRR0PNEMBRLM5QX' where id=1; -update noar ti set b1='NQX44RYUJENELUWJRR0PNEMBRLM5QX' where id=1; -update noar tt set b2='OZ' where id=1; -update noar ti set b2='OZ' where id=1; -update noar tt set b0='PMB9FGECN5X7GF' where id=2; -update noar ti set b0='PMB9FGECN5X7GF' where id=2; -update noar tt set b1='61' where id=2; -update noar ti set b1='61' where id=2; -update noar tt set b2='6ESZLOBK2DN2XTVPB' where id=2; -update noar ti set b2='6ESZLOBK2DN2XTVPB' where id=2; -update noar tt set b0='JVZBP4BYUPKX' where id=3; -update noar ti set b0='JVZBP4BYUPKX' where id=3; -update noar tt set b1='24263MZNY58HDNO62BSFKWPJW77MXLN' where id=3; -update noar ti set b1='24263MZNY58HDNO62BSFKWPJW77MXLN' where id=3; -update noar tt set b2='D' where id=3; -update noar ti set b2='D' where id=3; -update noar tt set b0='2Y5C' where id=4; -update noar ti set b0='2Y5C' where id=4; -update noar tt set b1='B186EW3PAX2OVMHA05MQOC5DP' where id=4; -update noar ti set b1='B186EW3PAX2OVMHA05MQOC5DP' where id=4; -update noar tt set b2='LHCC7Y7I3GC70S8ZDJZ77GQT3K' where id=4; -update noar ti set b2='LHCC7Y7I3GC70S8ZDJZ77GQT3K' where id=4; -update noar tt set b0='9BA' where id=5; -update noar ti set b0='9BA' where id=5; -update noar tt set b1='FK' where id=5; -update noar ti set b1='FK' where id=5; -update noar tt set b2='JG9DVPO8S' where id=5; -update noar ti set b2='JG9DVPO8S' where id=5; -update noar tt set b0='K0ZPUBQQR21SOZOROVA0WDPW3ZIT' where id=6; -update noar ti set b0='K0ZPUBQQR21SOZOROVA0WDPW3ZIT' where id=6; -update noar tt set b1='9KM3XYBPW40G3' where id=6; -update noar ti set b1='9KM3XYBPW40G3' where id=6; -update noar tt set b2='6J96HOV' where id=6; -update noar ti set b2='6J96HOV' where id=6; -update noar tt set b0='CDKVHA3MZX' where id=7; -update noar ti set b0='CDKVHA3MZX' where id=7; -update noar tt set b1='2DU' where id=7; -update noar ti set b1='2DU' where id=7; -update noar tt set b2='55FNZK1VXBM0Z0UIHHRBZCANSNQDJW' where id=7; -update noar ti set b2='55FNZK1VXBM0Z0UIHHRBZCANSNQDJW' where id=7; -update noar tt set b0='OA89GY2RBCBE8H3OLTYCBEZ7TO7BH2X' where id=8; -update noar ti set b0='OA89GY2RBCBE8H3OLTYCBEZ7TO7BH2X' where id=8; -update noar tt set b1='I' where id=8; -update noar ti set b1='I' where id=8; -update noar tt set b2='21OL' where id=8; -update noar ti set b2='21OL' where id=8; -update noar tt set b0='X2JEQ9NJ0YM6E0E88F5' where id=9; -update noar ti set b0='X2JEQ9NJ0YM6E0E88F5' where id=9; -update noar tt set b1='26RRYIA42ZYNE571RKXIXL' where id=9; -update noar ti set b1='26RRYIA42ZYNE571RKXIXL' where id=9; -update noar tt set b2='1QOCKUXOB1PQXHSYKU13' where id=9; -update noar ti set b2='1QOCKUXOB1PQXHSYKU13' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 blob not null, - b1 tinyblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='QKJ2VXAUU54GLFSLNL' where id=1; -update noar ti set b0='QKJ2VXAUU54GLFSLNL' where id=1; -update noar tt set b1='VQHEADM5' where id=1; -update noar ti set b1='VQHEADM5' where id=1; -update noar tt set b2='4J3AR3P3CO' where id=1; -update noar ti set b2='4J3AR3P3CO' where id=1; -update noar tt set b0='V' where id=2; -update noar ti set b0='V' where id=2; -update noar tt set b1='Z5B9YFY7' where id=2; -update noar ti set b1='Z5B9YFY7' where id=2; -update noar tt set b2='5IZZ8O87R8H9JLOUKTACH89ZG' where id=2; -update noar ti set b2='5IZZ8O87R8H9JLOUKTACH89ZG' where id=2; -update noar tt set b0='0IKFJ6GBDKS1Q' where id=3; -update noar ti set b0='0IKFJ6GBDKS1Q' where id=3; -update noar tt set b1='BCAAXYSWPSNRPHU1S19E07HP' where id=3; -update noar ti set b1='BCAAXYSWPSNRPHU1S19E07HP' where id=3; -update noar tt set b2='9EKB1V28W8M7CGN' where id=3; -update noar ti set b2='9EKB1V28W8M7CGN' where id=3; -update noar tt set b0='WMZZ11JK' where id=4; -update noar ti set b0='WMZZ11JK' where id=4; -update noar tt set b1='X1RCX7ASBLJ1EGNP7' where id=4; -update noar ti set b1='X1RCX7ASBLJ1EGNP7' where id=4; -update noar tt set b2='4CB94JR2ZZ' where id=4; -update noar ti set b2='4CB94JR2ZZ' where id=4; -update noar tt set b0='M3' where id=5; -update noar ti set b0='M3' where id=5; -update noar tt set b1='6GAY6ZXVT1CMHYIWQ8XTGTDFI0WVQMKL' where id=5; -update noar ti set b1='6GAY6ZXVT1CMHYIWQ8XTGTDFI0WVQMKL' where id=5; -update noar tt set b2='UCDRVCSWHCWYC67SRAR' where id=5; -update noar ti set b2='UCDRVCSWHCWYC67SRAR' where id=5; -update noar tt set b0='D0W4JKELXUL' where id=6; -update noar ti set b0='D0W4JKELXUL' where id=6; -update noar tt set b1='HDA4YQQNXCIGWQ348Z' where id=6; -update noar ti set b1='HDA4YQQNXCIGWQ348Z' where id=6; -update noar tt set b2='JBAKJMPT2QNJ4IECLUY4JYNV' where id=6; -update noar ti set b2='JBAKJMPT2QNJ4IECLUY4JYNV' where id=6; -update noar tt set b0='WFO3OIB87X3DK6S1I' where id=7; -update noar ti set b0='WFO3OIB87X3DK6S1I' where id=7; -update noar tt set b1='RS3D5PBFZO9CJWVNLHYT' where id=7; -update noar ti set b1='RS3D5PBFZO9CJWVNLHYT' where id=7; -update noar tt set b2='G' where id=7; -update noar ti set b2='G' where id=7; -update noar tt set b0='2' where id=8; -update noar ti set b0='2' where id=8; -update noar tt set b1='DJRIBESMKXG8S' where id=8; -update noar ti set b1='DJRIBESMKXG8S' where id=8; -update noar tt set b2='KORZIRY4DCLUTCZKKYAY47RQR4XTE2KK' where id=8; -update noar ti set b2='KORZIRY4DCLUTCZKKYAY47RQR4XTE2KK' where id=8; -update noar tt set b0='706B' where id=9; -update noar ti set b0='706B' where id=9; -update noar tt set b1='5GMQUM37WM2XWG6HJV1JGG7AYBHADM5' where id=9; -update noar ti set b1='5GMQUM37WM2XWG6HJV1JGG7AYBHADM5' where id=9; -update noar tt set b2='T0508F2Q9KOGQZXN' where id=9; -update noar ti set b2='T0508F2Q9KOGQZXN' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 blob null, - b1 tinyblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='FDEE00SJGD9Y1W2K7VQSFM7BRF7' where id=1; -update noar ti set b0='FDEE00SJGD9Y1W2K7VQSFM7BRF7' where id=1; -update noar tt set b1='4VBS9YDTZEDRJJM7PZFOHR4YN' where id=1; -update noar ti set b1='4VBS9YDTZEDRJJM7PZFOHR4YN' where id=1; -update noar tt set b2='XMC33BXO5TD64AUOLM' where id=1; -update noar ti set b2='XMC33BXO5TD64AUOLM' where id=1; -update noar tt set b0='8KBB3HQLAWI69NSDRW2' where id=2; -update noar ti set b0='8KBB3HQLAWI69NSDRW2' where id=2; -update noar tt set b1='BQX7B0QR594IAITQCVRH6' where id=2; -update noar ti set b1='BQX7B0QR594IAITQCVRH6' where id=2; -update noar tt set b2='6ONNFQBSJLYNKSW57MJ35E' where id=2; -update noar ti set b2='6ONNFQBSJLYNKSW57MJ35E' where id=2; -update noar tt set b0='PRFTAF07EFUG74GO0' where id=3; -update noar ti set b0='PRFTAF07EFUG74GO0' where id=3; -update noar tt set b1='AE9388LG1Q1V6YZ6WPEIYS' where id=3; -update noar ti set b1='AE9388LG1Q1V6YZ6WPEIYS' where id=3; -update noar tt set b2='8BX07HRNM8WVGZDQQES5TT8IMLA' where id=3; -update noar ti set b2='8BX07HRNM8WVGZDQQES5TT8IMLA' where id=3; -update noar tt set b0='9UGBMVPXOGSEAMGBBF7KN59FK9P9' where id=4; -update noar ti set b0='9UGBMVPXOGSEAMGBBF7KN59FK9P9' where id=4; -update noar tt set b1='89JBHBYODU547JUCHIRHUZLGAKNVLSLH' where id=4; -update noar ti set b1='89JBHBYODU547JUCHIRHUZLGAKNVLSLH' where id=4; -update noar tt set b2='0UBOSKPIS51HKQHY91J99G4U1ERLFH' where id=4; -update noar ti set b2='0UBOSKPIS51HKQHY91J99G4U1ERLFH' where id=4; -update noar tt set b0='I8' where id=5; -update noar ti set b0='I8' where id=5; -update noar tt set b1='CTK5BOQ8BSRB3POABSCUGIVS09C' where id=5; -update noar ti set b1='CTK5BOQ8BSRB3POABSCUGIVS09C' where id=5; -update noar tt set b2='OU01N' where id=5; -update noar ti set b2='OU01N' where id=5; -update noar tt set b0='FMFS' where id=6; -update noar ti set b0='FMFS' where id=6; -update noar tt set b1='PHHGM8F60860CJEVB59B8QKM8T3ZP0' where id=6; -update noar ti set b1='PHHGM8F60860CJEVB59B8QKM8T3ZP0' where id=6; -update noar tt set b2='6KRPVX34JMJG41QBWZAJJ5' where id=6; -update noar ti set b2='6KRPVX34JMJG41QBWZAJJ5' where id=6; -update noar tt set b0='BV2VGQD' where id=7; -update noar ti set b0='BV2VGQD' where id=7; -update noar tt set b1='JY0VHUBJ0YZNNZ8VYAO6HSSYLMA6K' where id=7; -update noar ti set b1='JY0VHUBJ0YZNNZ8VYAO6HSSYLMA6K' where id=7; -update noar tt set b2='FGS7P4Q' where id=7; -update noar ti set b2='FGS7P4Q' where id=7; -update noar tt set b0='MQMZBVENUCJ8UJJ09XNW6IYU2HXQXO' where id=8; -update noar ti set b0='MQMZBVENUCJ8UJJ09XNW6IYU2HXQXO' where id=8; -update noar tt set b1='UASAGZ68COLPUOCTC55' where id=8; -update noar ti set b1='UASAGZ68COLPUOCTC55' where id=8; -update noar tt set b2='4Y8DGERP9R40MM24Z2' where id=8; -update noar ti set b2='4Y8DGERP9R40MM24Z2' where id=8; -update noar tt set b0='46R6F31ILFURWXRZ7SB2U2U' where id=9; -update noar ti set b0='46R6F31ILFURWXRZ7SB2U2U' where id=9; -update noar tt set b1='Y4Y4B3S7' where id=9; -update noar ti set b1='Y4Y4B3S7' where id=9; -update noar tt set b2='RYKIS12QMX' where id=9; -update noar ti set b2='RYKIS12QMX' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 blob not null, - b1 tinyblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='HSFH0ZTYWAWAHMCG7FMSPJF0Z8' where id=1; -update noar ti set b0='HSFH0ZTYWAWAHMCG7FMSPJF0Z8' where id=1; -update noar tt set b1='FW0A82DHRGPWW172BE37QY7NZWGS056Q' where id=1; -update noar ti set b1='FW0A82DHRGPWW172BE37QY7NZWGS056Q' where id=1; -update noar tt set b2='7WFSWBH1ZB5K9VGDERAZ3' where id=1; -update noar ti set b2='7WFSWBH1ZB5K9VGDERAZ3' where id=1; -update noar tt set b0='BNLQV27O4' where id=2; -update noar ti set b0='BNLQV27O4' where id=2; -update noar tt set b1='GCPGNML' where id=2; -update noar ti set b1='GCPGNML' where id=2; -update noar tt set b2='KBJSGMHY037OUXI19MIIC8G36EH2G5' where id=2; -update noar ti set b2='KBJSGMHY037OUXI19MIIC8G36EH2G5' where id=2; -update noar tt set b0='L4C5DMA0ZHTX80DOO28LEZ3DRHFX1' where id=3; -update noar ti set b0='L4C5DMA0ZHTX80DOO28LEZ3DRHFX1' where id=3; -update noar tt set b1='TIA737NKMB4NYWV0CUVZRZS17X' where id=3; -update noar ti set b1='TIA737NKMB4NYWV0CUVZRZS17X' where id=3; -update noar tt set b2='PI6XBD7ZO8VYFN94Z5DF6W' where id=3; -update noar ti set b2='PI6XBD7ZO8VYFN94Z5DF6W' where id=3; -update noar tt set b0='YAXJ29E6' where id=4; -update noar ti set b0='YAXJ29E6' where id=4; -update noar tt set b1='UOYZGEDRRATO' where id=4; -update noar ti set b1='UOYZGEDRRATO' where id=4; -update noar tt set b2='JJ8IYIEGMSQ' where id=4; -update noar ti set b2='JJ8IYIEGMSQ' where id=4; -update noar tt set b0='6' where id=5; -update noar ti set b0='6' where id=5; -update noar tt set b1='EWW35KLM88QKELLNH1NU9GASCGK09E' where id=5; -update noar ti set b1='EWW35KLM88QKELLNH1NU9GASCGK09E' where id=5; -update noar tt set b2='AEL3YG2NYESC8SGI6' where id=5; -update noar ti set b2='AEL3YG2NYESC8SGI6' where id=5; -update noar tt set b0='T0BWPQIK7V1OX2Q5QKID3B9' where id=6; -update noar ti set b0='T0BWPQIK7V1OX2Q5QKID3B9' where id=6; -update noar tt set b1='HJ' where id=6; -update noar ti set b1='HJ' where id=6; -update noar tt set b2='LNVTTVZ0V9TJ1M' where id=6; -update noar ti set b2='LNVTTVZ0V9TJ1M' where id=6; -update noar tt set b0='8ZDS806O8WM9ZS4IY07M' where id=7; -update noar ti set b0='8ZDS806O8WM9ZS4IY07M' where id=7; -update noar tt set b1='VV' where id=7; -update noar ti set b1='VV' where id=7; -update noar tt set b2='WCC2CJAU6D7YDWNU81XH4RKKLMM' where id=7; -update noar ti set b2='WCC2CJAU6D7YDWNU81XH4RKKLMM' where id=7; -update noar tt set b0='LWQ7NYFOBTX0YHXK9' where id=8; -update noar ti set b0='LWQ7NYFOBTX0YHXK9' where id=8; -update noar tt set b1='PGQYIJRK' where id=8; -update noar ti set b1='PGQYIJRK' where id=8; -update noar tt set b2='533Q0D' where id=8; -update noar ti set b2='533Q0D' where id=8; -update noar tt set b0='JTI9QQ9S5U57YJPX7SOLZ7YJWXL' where id=9; -update noar ti set b0='JTI9QQ9S5U57YJPX7SOLZ7YJWXL' where id=9; -update noar tt set b1='UQ8T18V5N' where id=9; -update noar ti set b1='UQ8T18V5N' where id=9; -update noar tt set b2='L6V03NK4BM686NRIL2XUL1TJ2UQZM4TH' where id=9; -update noar ti set b2='L6V03NK4BM686NRIL2XUL1TJ2UQZM4TH' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 blob null, - b1 tinyblob null, - b2 text null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='PJ1E2HNNBI4ELOR3D12XPPOAQ9DSV' where id=1; -update noar ti set b0='PJ1E2HNNBI4ELOR3D12XPPOAQ9DSV' where id=1; -update noar tt set b1='68BP87VDYTSIYZJKLIL60BN603I0' where id=1; -update noar ti set b1='68BP87VDYTSIYZJKLIL60BN603I0' where id=1; -update noar tt set b2='0BBFOY9HAG6VIXO6Q13PW' where id=1; -update noar ti set b2='0BBFOY9HAG6VIXO6Q13PW' where id=1; -update noar tt set b0='SR5XPP0YP76VA6V9NQBZ' where id=2; -update noar ti set b0='SR5XPP0YP76VA6V9NQBZ' where id=2; -update noar tt set b1='R1REPTM31Q5' where id=2; -update noar ti set b1='R1REPTM31Q5' where id=2; -update noar tt set b2='DI4RB2W63KPOZ6TVT68TR' where id=2; -update noar ti set b2='DI4RB2W63KPOZ6TVT68TR' where id=2; -update noar tt set b0='ZLVRXQHYMMPX3P81712GCLHLNSX0' where id=3; -update noar ti set b0='ZLVRXQHYMMPX3P81712GCLHLNSX0' where id=3; -update noar tt set b1='CPPOLKZE6ONH1I2N' where id=3; -update noar ti set b1='CPPOLKZE6ONH1I2N' where id=3; -update noar tt set b2='WSUHEQQM7Y7XGNVEV' where id=3; -update noar ti set b2='WSUHEQQM7Y7XGNVEV' where id=3; -update noar tt set b0='9MJJKQGO0' where id=4; -update noar ti set b0='9MJJKQGO0' where id=4; -update noar tt set b1='YSBTVV7YXKMQBJSXJCM6B59' where id=4; -update noar ti set b1='YSBTVV7YXKMQBJSXJCM6B59' where id=4; -update noar tt set b2='JO1RCM80UZKQGTYSQJ6' where id=4; -update noar ti set b2='JO1RCM80UZKQGTYSQJ6' where id=4; -update noar tt set b0='0YD46MV1XPS' where id=5; -update noar ti set b0='0YD46MV1XPS' where id=5; -update noar tt set b1='03' where id=5; -update noar ti set b1='03' where id=5; -update noar tt set b2='0JOLC82TINTME' where id=5; -update noar ti set b2='0JOLC82TINTME' where id=5; -update noar tt set b0='I0J37Y85HOMS847YR1D9XFWM' where id=6; -update noar ti set b0='I0J37Y85HOMS847YR1D9XFWM' where id=6; -update noar tt set b1='5GPA0UDONNC6XIF6' where id=6; -update noar ti set b1='5GPA0UDONNC6XIF6' where id=6; -update noar tt set b2='U425D3Z41P8OC' where id=6; -update noar ti set b2='U425D3Z41P8OC' where id=6; -update noar tt set b0='WG' where id=7; -update noar ti set b0='WG' where id=7; -update noar tt set b1='A8INT0H' where id=7; -update noar ti set b1='A8INT0H' where id=7; -update noar tt set b2='JMGT52ZFPU6T67Z0Y20LS7' where id=7; -update noar ti set b2='JMGT52ZFPU6T67Z0Y20LS7' where id=7; -update noar tt set b0='KT8EFTIRVHR3Q0ZJVTWPJUBKOYF97IG2' where id=8; -update noar ti set b0='KT8EFTIRVHR3Q0ZJVTWPJUBKOYF97IG2' where id=8; -update noar tt set b1='BK5GAXW' where id=8; -update noar ti set b1='BK5GAXW' where id=8; -update noar tt set b2='SMTYS20L9C06PH8RRN87' where id=8; -update noar ti set b2='SMTYS20L9C06PH8RRN87' where id=8; -update noar tt set b0='2UELG1RA45IC6FLK97PLSE87VD8ZAF' where id=9; -update noar ti set b0='2UELG1RA45IC6FLK97PLSE87VD8ZAF' where id=9; -update noar tt set b1='9' where id=9; -update noar ti set b1='9' where id=9; -update noar tt set b2='8LK5FLJIKUY6GL5' where id=9; -update noar ti set b2='8LK5FLJIKUY6GL5' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 blob not null, - b1 tinyblob not null, - b2 text not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='AAXLS5G0PPUS' where id=1; -update noar ti set b0='AAXLS5G0PPUS' where id=1; -update noar tt set b1='WBBO5Q' where id=1; -update noar ti set b1='WBBO5Q' where id=1; -update noar tt set b2='814OEE9XUVIGN3PU7U3APBPI' where id=1; -update noar ti set b2='814OEE9XUVIGN3PU7U3APBPI' where id=1; -update noar tt set b0='XPLJ89D046BAKOO3EVDW1' where id=2; -update noar ti set b0='XPLJ89D046BAKOO3EVDW1' where id=2; -update noar tt set b1='TT8X8VOJG' where id=2; -update noar ti set b1='TT8X8VOJG' where id=2; -update noar tt set b2='JVV0CL' where id=2; -update noar ti set b2='JVV0CL' where id=2; -update noar tt set b0='J' where id=3; -update noar ti set b0='J' where id=3; -update noar tt set b1='RSRIUJ' where id=3; -update noar ti set b1='RSRIUJ' where id=3; -update noar tt set b2='LR2ZIH' where id=3; -update noar ti set b2='LR2ZIH' where id=3; -update noar tt set b0='6GF9CAL1EJLYO' where id=4; -update noar ti set b0='6GF9CAL1EJLYO' where id=4; -update noar tt set b1='JQYFXCUBLAWP2B' where id=4; -update noar ti set b1='JQYFXCUBLAWP2B' where id=4; -update noar tt set b2='LICKD8USL37F5F3RYYPSQSN' where id=4; -update noar ti set b2='LICKD8USL37F5F3RYYPSQSN' where id=4; -update noar tt set b0='Y4LGGE9XBOZ4' where id=5; -update noar ti set b0='Y4LGGE9XBOZ4' where id=5; -update noar tt set b1='6ZC2MRJ' where id=5; -update noar ti set b1='6ZC2MRJ' where id=5; -update noar tt set b2='30X3EE19FXZQVYSDTLDNAUCXP97SW99' where id=5; -update noar ti set b2='30X3EE19FXZQVYSDTLDNAUCXP97SW99' where id=5; -update noar tt set b0='KD9RVH' where id=6; -update noar ti set b0='KD9RVH' where id=6; -update noar tt set b1='U8GYRTCCXBVL7D' where id=6; -update noar ti set b1='U8GYRTCCXBVL7D' where id=6; -update noar tt set b2='0Z822KQQ4CI3G20C290O05' where id=6; -update noar ti set b2='0Z822KQQ4CI3G20C290O05' where id=6; -update noar tt set b0='TOO353J5QJ5PXT7QR' where id=7; -update noar ti set b0='TOO353J5QJ5PXT7QR' where id=7; -update noar tt set b1='9L4KVXIM9E1WF6Z8EB5APXVEL' where id=7; -update noar ti set b1='9L4KVXIM9E1WF6Z8EB5APXVEL' where id=7; -update noar tt set b2='F9XI1K' where id=7; -update noar ti set b2='F9XI1K' where id=7; -update noar tt set b0='39IV1R3FSSA3SV' where id=8; -update noar ti set b0='39IV1R3FSSA3SV' where id=8; -update noar tt set b1='WM15C2NO3WMTQ1L56LAQ' where id=8; -update noar ti set b1='WM15C2NO3WMTQ1L56LAQ' where id=8; -update noar tt set b2='BEQ04' where id=8; -update noar ti set b2='BEQ04' where id=8; -update noar tt set b0='MCIDX6SA137ZUIDQH5VQNE3HNLDLV1S' where id=9; -update noar ti set b0='MCIDX6SA137ZUIDQH5VQNE3HNLDLV1S' where id=9; -update noar tt set b1='WLNH9CVRXRM4' where id=9; -update noar ti set b1='WLNH9CVRXRM4' where id=9; -update noar tt set b2='JY2IKQH2A1L6ENF0NF73' where id=9; -update noar ti set b2='JY2IKQH2A1L6ENF0NF73' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 blob null, - b1 blob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='IXZWHX4CZCW9ML2S65PTDI1HJ35U2ON' where id=1; -update noar ti set b0='IXZWHX4CZCW9ML2S65PTDI1HJ35U2ON' where id=1; -update noar tt set b1='QR3HW6I0KDWUK5' where id=1; -update noar ti set b1='QR3HW6I0KDWUK5' where id=1; -update noar tt set b2='U22MTI3N89H50N4BOYB7TUIS1PTV16EV' where id=1; -update noar ti set b2='U22MTI3N89H50N4BOYB7TUIS1PTV16EV' where id=1; -update noar tt set b0='QCS3D652TVA9DYYIYX87' where id=2; -update noar ti set b0='QCS3D652TVA9DYYIYX87' where id=2; -update noar tt set b1='DQGMST' where id=2; -update noar ti set b1='DQGMST' where id=2; -update noar tt set b2='LK9HJC4TVACHAHRATRA0TEB9K8OK' where id=2; -update noar ti set b2='LK9HJC4TVACHAHRATRA0TEB9K8OK' where id=2; -update noar tt set b0='SYTWGM7QYA9JO45UV85ED4' where id=3; -update noar ti set b0='SYTWGM7QYA9JO45UV85ED4' where id=3; -update noar tt set b1='MUB5JTTLW' where id=3; -update noar ti set b1='MUB5JTTLW' where id=3; -update noar tt set b2='YQR3ICEQA71' where id=3; -update noar ti set b2='YQR3ICEQA71' where id=3; -update noar tt set b0='SX' where id=4; -update noar ti set b0='SX' where id=4; -update noar tt set b1='IDG64I47X6PI0FYMB' where id=4; -update noar ti set b1='IDG64I47X6PI0FYMB' where id=4; -update noar tt set b2='2SHFW1M6UB437PA' where id=4; -update noar ti set b2='2SHFW1M6UB437PA' where id=4; -update noar tt set b0='43ZLUHPPBMAK6EA7SFID8' where id=5; -update noar ti set b0='43ZLUHPPBMAK6EA7SFID8' where id=5; -update noar tt set b1='H9L5L0KQG9IWXK46L1T' where id=5; -update noar ti set b1='H9L5L0KQG9IWXK46L1T' where id=5; -update noar tt set b2='8E09LXUMO' where id=5; -update noar ti set b2='8E09LXUMO' where id=5; -update noar tt set b0='CMCNAJWVO2QHB7C2UE2GFY' where id=6; -update noar ti set b0='CMCNAJWVO2QHB7C2UE2GFY' where id=6; -update noar tt set b1='JWVMMU' where id=6; -update noar ti set b1='JWVMMU' where id=6; -update noar tt set b2='7ER1I3QIR23P06LDKY1DMSGXR' where id=6; -update noar ti set b2='7ER1I3QIR23P06LDKY1DMSGXR' where id=6; -update noar tt set b0='Q8FPD00R73' where id=7; -update noar ti set b0='Q8FPD00R73' where id=7; -update noar tt set b1='1PXML1EAX7EVDACPEJV' where id=7; -update noar ti set b1='1PXML1EAX7EVDACPEJV' where id=7; -update noar tt set b2='Z84KEYJQRZA01CZR67' where id=7; -update noar ti set b2='Z84KEYJQRZA01CZR67' where id=7; -update noar tt set b0='Y5NA6ZHJ7M9X43' where id=8; -update noar ti set b0='Y5NA6ZHJ7M9X43' where id=8; -update noar tt set b1='GRNUNYHSFWWB6SJI37F5HBHHK3IJJ' where id=8; -update noar ti set b1='GRNUNYHSFWWB6SJI37F5HBHHK3IJJ' where id=8; -update noar tt set b2='I1XNSPT08' where id=8; -update noar ti set b2='I1XNSPT08' where id=8; -update noar tt set b0='8TBDS1ZAVCTZCZ8D' where id=9; -update noar ti set b0='8TBDS1ZAVCTZCZ8D' where id=9; -update noar tt set b1='W' where id=9; -update noar ti set b1='W' where id=9; -update noar tt set b2='95QSR3SL5KUZ' where id=9; -update noar ti set b2='95QSR3SL5KUZ' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 blob not null, - b1 blob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='WVAI8AEDFU6X1E4O6JYXNV7ELO90Q' where id=1; -update noar ti set b0='WVAI8AEDFU6X1E4O6JYXNV7ELO90Q' where id=1; -update noar tt set b1='6RHS0DF2OE1KKY6EKQO70' where id=1; -update noar ti set b1='6RHS0DF2OE1KKY6EKQO70' where id=1; -update noar tt set b2='Z1D4ZRTTRG3DAD8P6SO4FH1FV' where id=1; -update noar ti set b2='Z1D4ZRTTRG3DAD8P6SO4FH1FV' where id=1; -update noar tt set b0='GE89XGF9XIH8' where id=2; -update noar ti set b0='GE89XGF9XIH8' where id=2; -update noar tt set b1='AILJ5MACC5W' where id=2; -update noar ti set b1='AILJ5MACC5W' where id=2; -update noar tt set b2='9RGXWEA6CGO8G' where id=2; -update noar ti set b2='9RGXWEA6CGO8G' where id=2; -update noar tt set b0='043GDPRT3PN3UJCPQ6SUQB' where id=3; -update noar ti set b0='043GDPRT3PN3UJCPQ6SUQB' where id=3; -update noar tt set b1='WMCKIY0NQJI7J8T4J2' where id=3; -update noar ti set b1='WMCKIY0NQJI7J8T4J2' where id=3; -update noar tt set b2='COC9JP7DGW7E3LZU48449L' where id=3; -update noar ti set b2='COC9JP7DGW7E3LZU48449L' where id=3; -update noar tt set b0='IY4NG8VI1XELF8QKT9D42U5B3ERULKS' where id=4; -update noar ti set b0='IY4NG8VI1XELF8QKT9D42U5B3ERULKS' where id=4; -update noar tt set b1='L8ENZSLYV1KUT2849FO4A8DKHDYUDC5' where id=4; -update noar ti set b1='L8ENZSLYV1KUT2849FO4A8DKHDYUDC5' where id=4; -update noar tt set b2='DMNEG6' where id=4; -update noar ti set b2='DMNEG6' where id=4; -update noar tt set b0='U4NO' where id=5; -update noar ti set b0='U4NO' where id=5; -update noar tt set b1='I4X7OL' where id=5; -update noar ti set b1='I4X7OL' where id=5; -update noar tt set b2='SIG8DLU3EUFWPXA4AOD0' where id=5; -update noar ti set b2='SIG8DLU3EUFWPXA4AOD0' where id=5; -update noar tt set b0='2DSFS0IMOS' where id=6; -update noar ti set b0='2DSFS0IMOS' where id=6; -update noar tt set b1='LVTRKJA3QM8NS9GP3TOOYK9CYFKQQFOX' where id=6; -update noar ti set b1='LVTRKJA3QM8NS9GP3TOOYK9CYFKQQFOX' where id=6; -update noar tt set b2='ZTN7NFM8E584MLMPIVO0PDNX5XRVH' where id=6; -update noar ti set b2='ZTN7NFM8E584MLMPIVO0PDNX5XRVH' where id=6; -update noar tt set b0='R3UX8RP4PDR4CJK' where id=7; -update noar ti set b0='R3UX8RP4PDR4CJK' where id=7; -update noar tt set b1='16R9JH7' where id=7; -update noar ti set b1='16R9JH7' where id=7; -update noar tt set b2='U81LKIQVFI20UJEUO0VS2OAV' where id=7; -update noar ti set b2='U81LKIQVFI20UJEUO0VS2OAV' where id=7; -update noar tt set b0='HB9HCVU' where id=8; -update noar ti set b0='HB9HCVU' where id=8; -update noar tt set b1='470I0WQAP2666' where id=8; -update noar ti set b1='470I0WQAP2666' where id=8; -update noar tt set b2='SGZ1B0ARGAHV2YQ' where id=8; -update noar ti set b2='SGZ1B0ARGAHV2YQ' where id=8; -update noar tt set b0='1AY7PKEEPN32' where id=9; -update noar ti set b0='1AY7PKEEPN32' where id=9; -update noar tt set b1='VUQRLRXIHSJ6V264GOEJYWEWO0A' where id=9; -update noar ti set b1='VUQRLRXIHSJ6V264GOEJYWEWO0A' where id=9; -update noar tt set b2='7Y0W723Y23YVYJ6GPA4F' where id=9; -update noar ti set b2='7Y0W723Y23YVYJ6GPA4F' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 blob null, - b1 blob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='98P9O693V1NXZ9LP' where id=1; -update noar ti set b0='98P9O693V1NXZ9LP' where id=1; -update noar tt set b1='K9T6WBSQB7PVAK3JZVXN' where id=1; -update noar ti set b1='K9T6WBSQB7PVAK3JZVXN' where id=1; -update noar tt set b2='IPZGMVHE63DI5BDS05A487' where id=1; -update noar ti set b2='IPZGMVHE63DI5BDS05A487' where id=1; -update noar tt set b0='BSVY0QSL9W9GPFKMSO5A2BN7HMC1UX' where id=2; -update noar ti set b0='BSVY0QSL9W9GPFKMSO5A2BN7HMC1UX' where id=2; -update noar tt set b1='MIFHIG' where id=2; -update noar ti set b1='MIFHIG' where id=2; -update noar tt set b2='6139EB0SNTZEP0XKAOPM' where id=2; -update noar ti set b2='6139EB0SNTZEP0XKAOPM' where id=2; -update noar tt set b0='T73I1FL5AUDUA' where id=3; -update noar ti set b0='T73I1FL5AUDUA' where id=3; -update noar tt set b1='42ZUAEJSMHLR8N068TS7ZRVK47D' where id=3; -update noar ti set b1='42ZUAEJSMHLR8N068TS7ZRVK47D' where id=3; -update noar tt set b2='I6UK8YK5FO4OF' where id=3; -update noar ti set b2='I6UK8YK5FO4OF' where id=3; -update noar tt set b0='PTR8P4K3LALD285V' where id=4; -update noar ti set b0='PTR8P4K3LALD285V' where id=4; -update noar tt set b1='QGQ8M6WWTGIVZ9J11MRIAJZ7LYY' where id=4; -update noar ti set b1='QGQ8M6WWTGIVZ9J11MRIAJZ7LYY' where id=4; -update noar tt set b2='A54MBVPNYX02' where id=4; -update noar ti set b2='A54MBVPNYX02' where id=4; -update noar tt set b0='G2IRAH5HEZGV1' where id=5; -update noar ti set b0='G2IRAH5HEZGV1' where id=5; -update noar tt set b1='K7P8CWD3G1NEJ0B606NEC0AM9EWM' where id=5; -update noar ti set b1='K7P8CWD3G1NEJ0B606NEC0AM9EWM' where id=5; -update noar tt set b2='9WC5K0JYPSGEP0CTP59' where id=5; -update noar ti set b2='9WC5K0JYPSGEP0CTP59' where id=5; -update noar tt set b0='3S' where id=6; -update noar ti set b0='3S' where id=6; -update noar tt set b1='ZQ96C864' where id=6; -update noar ti set b1='ZQ96C864' where id=6; -update noar tt set b2='HHPMIIPN0ZDT6A9VVB675V29VS' where id=6; -update noar ti set b2='HHPMIIPN0ZDT6A9VVB675V29VS' where id=6; -update noar tt set b0='18XOL' where id=7; -update noar ti set b0='18XOL' where id=7; -update noar tt set b1='DXAXGVAYWAIEYDUQIJSH2J5J1K5' where id=7; -update noar ti set b1='DXAXGVAYWAIEYDUQIJSH2J5J1K5' where id=7; -update noar tt set b2='805OY0Y0B7J974FGTWN2QMO9' where id=7; -update noar ti set b2='805OY0Y0B7J974FGTWN2QMO9' where id=7; -update noar tt set b0='N1U6ZUL0MWO' where id=8; -update noar ti set b0='N1U6ZUL0MWO' where id=8; -update noar tt set b1='EBXY2S14913PV2MHYM8' where id=8; -update noar ti set b1='EBXY2S14913PV2MHYM8' where id=8; -update noar tt set b2='E6V25MRE8EGW4KRBEC744LST69R1HU5' where id=8; -update noar ti set b2='E6V25MRE8EGW4KRBEC744LST69R1HU5' where id=8; -update noar tt set b0='RFT7ZQI963AT85JNAQPO' where id=9; -update noar ti set b0='RFT7ZQI963AT85JNAQPO' where id=9; -update noar tt set b1='1S' where id=9; -update noar ti set b1='1S' where id=9; -update noar tt set b2='3ZC31H3O22' where id=9; -update noar ti set b2='3ZC31H3O22' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 blob not null, - b1 blob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='QAO3X5CJKILWGDLA' where id=1; -update noar ti set b0='QAO3X5CJKILWGDLA' where id=1; -update noar tt set b1='9F9E8DSZ48V4PI50' where id=1; -update noar ti set b1='9F9E8DSZ48V4PI50' where id=1; -update noar tt set b2='AP6SL7SAH96NR228TS1F6' where id=1; -update noar ti set b2='AP6SL7SAH96NR228TS1F6' where id=1; -update noar tt set b0='DYTLSR4NZ6RVVUAM' where id=2; -update noar ti set b0='DYTLSR4NZ6RVVUAM' where id=2; -update noar tt set b1='TA5VJ42QB227AMUHDPL0IRSZSEMC' where id=2; -update noar ti set b1='TA5VJ42QB227AMUHDPL0IRSZSEMC' where id=2; -update noar tt set b2='ETQ8U6W998SW28J48' where id=2; -update noar ti set b2='ETQ8U6W998SW28J48' where id=2; -update noar tt set b0='5FSBN03813OG12CF54PTN9' where id=3; -update noar ti set b0='5FSBN03813OG12CF54PTN9' where id=3; -update noar tt set b1='0HFJUX62W4V28TFU3E0XJY' where id=3; -update noar ti set b1='0HFJUX62W4V28TFU3E0XJY' where id=3; -update noar tt set b2='17N' where id=3; -update noar ti set b2='17N' where id=3; -update noar tt set b0='D' where id=4; -update noar ti set b0='D' where id=4; -update noar tt set b1='Z3JBC1MTM2XC746ONBL44' where id=4; -update noar ti set b1='Z3JBC1MTM2XC746ONBL44' where id=4; -update noar tt set b2='RTD' where id=4; -update noar ti set b2='RTD' where id=4; -update noar tt set b0='9CCBGMSK9F8Q2RUXFS5VDVLGEZ63KWMS' where id=5; -update noar ti set b0='9CCBGMSK9F8Q2RUXFS5VDVLGEZ63KWMS' where id=5; -update noar tt set b1='UB3EX0L1N71AYE6BM85OWAHPDPC' where id=5; -update noar ti set b1='UB3EX0L1N71AYE6BM85OWAHPDPC' where id=5; -update noar tt set b2='MID3MUDG' where id=5; -update noar ti set b2='MID3MUDG' where id=5; -update noar tt set b0='UDX1TX8O69PLNWCR03VE3B3Z8IYCF8O' where id=6; -update noar ti set b0='UDX1TX8O69PLNWCR03VE3B3Z8IYCF8O' where id=6; -update noar tt set b1='IO07JDTZD0YSCW7D7JULKH2XR8Q' where id=6; -update noar ti set b1='IO07JDTZD0YSCW7D7JULKH2XR8Q' where id=6; -update noar tt set b2='RG4DI8AJED6CSID7V3ZO4OGTTZ1' where id=6; -update noar ti set b2='RG4DI8AJED6CSID7V3ZO4OGTTZ1' where id=6; -update noar tt set b0='LPRTXX5' where id=7; -update noar ti set b0='LPRTXX5' where id=7; -update noar tt set b1='HHIXGFDHRB' where id=7; -update noar ti set b1='HHIXGFDHRB' where id=7; -update noar tt set b2='9H8NPOIGYBP6U487P1ZUROFOAT5SJW97' where id=7; -update noar ti set b2='9H8NPOIGYBP6U487P1ZUROFOAT5SJW97' where id=7; -update noar tt set b0='KK7Y06H' where id=8; -update noar ti set b0='KK7Y06H' where id=8; -update noar tt set b1='01SMRXUZ2R' where id=8; -update noar ti set b1='01SMRXUZ2R' where id=8; -update noar tt set b2='FRLFQZEXW7O2YP4M' where id=8; -update noar ti set b2='FRLFQZEXW7O2YP4M' where id=8; -update noar tt set b0='WM9K587L' where id=9; -update noar ti set b0='WM9K587L' where id=9; -update noar tt set b1='00BIDQXMH' where id=9; -update noar ti set b1='00BIDQXMH' where id=9; -update noar tt set b2='DKLS' where id=9; -update noar ti set b2='DKLS' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 blob null, - b1 blob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='ZI0WNWKEK8CLBNA8586IKD62TIMCSJ2B' where id=1; -update noar ti set b0='ZI0WNWKEK8CLBNA8586IKD62TIMCSJ2B' where id=1; -update noar tt set b1='Y2TW67X7' where id=1; -update noar ti set b1='Y2TW67X7' where id=1; -update noar tt set b2='PH' where id=1; -update noar ti set b2='PH' where id=1; -update noar tt set b0='VUIQ65K' where id=2; -update noar ti set b0='VUIQ65K' where id=2; -update noar tt set b1='0VGZ8KWSB' where id=2; -update noar ti set b1='0VGZ8KWSB' where id=2; -update noar tt set b2='C8DYRPU2JW1CP5' where id=2; -update noar ti set b2='C8DYRPU2JW1CP5' where id=2; -update noar tt set b0='X' where id=3; -update noar ti set b0='X' where id=3; -update noar tt set b1='Q5F3MZZ' where id=3; -update noar ti set b1='Q5F3MZZ' where id=3; -update noar tt set b2='YZ1R0TJLARJ61DHG6G39XW5N891Y' where id=3; -update noar ti set b2='YZ1R0TJLARJ61DHG6G39XW5N891Y' where id=3; -update noar tt set b0='O1K423U69LMMA5E1HKH' where id=4; -update noar ti set b0='O1K423U69LMMA5E1HKH' where id=4; -update noar tt set b1='R6VOP94BXWDICWTD1N' where id=4; -update noar ti set b1='R6VOP94BXWDICWTD1N' where id=4; -update noar tt set b2='I6SFGIYV5Z0R6FA17FT289Y2JKEMLD' where id=4; -update noar ti set b2='I6SFGIYV5Z0R6FA17FT289Y2JKEMLD' where id=4; -update noar tt set b0='P0PTIZBT0VBQ8Z5O1' where id=5; -update noar ti set b0='P0PTIZBT0VBQ8Z5O1' where id=5; -update noar tt set b1='Z3NM65FDT5ES2CCH0T1' where id=5; -update noar ti set b1='Z3NM65FDT5ES2CCH0T1' where id=5; -update noar tt set b2='CF2' where id=5; -update noar ti set b2='CF2' where id=5; -update noar tt set b0='LWK' where id=6; -update noar ti set b0='LWK' where id=6; -update noar tt set b1='3YF2DGHA' where id=6; -update noar ti set b1='3YF2DGHA' where id=6; -update noar tt set b2='DFQCONK04' where id=6; -update noar ti set b2='DFQCONK04' where id=6; -update noar tt set b0='5KAMOFWPXOP' where id=7; -update noar ti set b0='5KAMOFWPXOP' where id=7; -update noar tt set b1='BHU8F' where id=7; -update noar ti set b1='BHU8F' where id=7; -update noar tt set b2='NIRQ47GP' where id=7; -update noar ti set b2='NIRQ47GP' where id=7; -update noar tt set b0='T4OH01O811EB8H' where id=8; -update noar ti set b0='T4OH01O811EB8H' where id=8; -update noar tt set b1='0FHEH8U045T3Z3VECYRNXQYGU4WU' where id=8; -update noar ti set b1='0FHEH8U045T3Z3VECYRNXQYGU4WU' where id=8; -update noar tt set b2='14T35GPVUVPXONKOO0S7D4JM6TPHO7SH' where id=8; -update noar ti set b2='14T35GPVUVPXONKOO0S7D4JM6TPHO7SH' where id=8; -update noar tt set b0='6894B5HADGHLN' where id=9; -update noar ti set b0='6894B5HADGHLN' where id=9; -update noar tt set b1='V3F401GUM1H60HSYN5XMXN69P' where id=9; -update noar ti set b1='V3F401GUM1H60HSYN5XMXN69P' where id=9; -update noar tt set b2='BANDB' where id=9; -update noar ti set b2='BANDB' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 blob not null, - b1 blob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='YAX' where id=1; -update noar ti set b0='YAX' where id=1; -update noar tt set b1='UUA8JI8ZRUIL' where id=1; -update noar ti set b1='UUA8JI8ZRUIL' where id=1; -update noar tt set b2='Z5P2NI5V8AWINU6KLP' where id=1; -update noar ti set b2='Z5P2NI5V8AWINU6KLP' where id=1; -update noar tt set b0='JAWR6XH3F0TOPI47J6KEOQT82NW' where id=2; -update noar ti set b0='JAWR6XH3F0TOPI47J6KEOQT82NW' where id=2; -update noar tt set b1='QYP3K9BECZ9NS41BTMY27' where id=2; -update noar ti set b1='QYP3K9BECZ9NS41BTMY27' where id=2; -update noar tt set b2='8VUI5AMSC92RZX8GH1' where id=2; -update noar ti set b2='8VUI5AMSC92RZX8GH1' where id=2; -update noar tt set b0='D0W7G4U9SPQVLG6ZPAVN1LL' where id=3; -update noar ti set b0='D0W7G4U9SPQVLG6ZPAVN1LL' where id=3; -update noar tt set b1='R2YXFUKPZBADY6N1GCQFEXRY078FNA' where id=3; -update noar ti set b1='R2YXFUKPZBADY6N1GCQFEXRY078FNA' where id=3; -update noar tt set b2='R7PLQXEX25WHZ94HW7HYP' where id=3; -update noar ti set b2='R7PLQXEX25WHZ94HW7HYP' where id=3; -update noar tt set b0='U0W9ZVMKM7K8' where id=4; -update noar ti set b0='U0W9ZVMKM7K8' where id=4; -update noar tt set b1='U' where id=4; -update noar ti set b1='U' where id=4; -update noar tt set b2='3FOIEYZCL2X3UW' where id=4; -update noar ti set b2='3FOIEYZCL2X3UW' where id=4; -update noar tt set b0='P9NSYCPG1P0BFEQOHQ0YL5C9VMKZU' where id=5; -update noar ti set b0='P9NSYCPG1P0BFEQOHQ0YL5C9VMKZU' where id=5; -update noar tt set b1='4OY294SQFNFZM' where id=5; -update noar ti set b1='4OY294SQFNFZM' where id=5; -update noar tt set b2='XDK7' where id=5; -update noar ti set b2='XDK7' where id=5; -update noar tt set b0='MPY0FEGK1ZQ8CG90G' where id=6; -update noar ti set b0='MPY0FEGK1ZQ8CG90G' where id=6; -update noar tt set b1='N4MM4PIAHXR4GYYIQ8NP7RRY3RVWC' where id=6; -update noar ti set b1='N4MM4PIAHXR4GYYIQ8NP7RRY3RVWC' where id=6; -update noar tt set b2='HENDN4UMXS3BFHV9B4Z3ZUXKW927RM' where id=6; -update noar ti set b2='HENDN4UMXS3BFHV9B4Z3ZUXKW927RM' where id=6; -update noar tt set b0='CWW8WZ21JMGASA1EGAM6T8GPN37KXT65' where id=7; -update noar ti set b0='CWW8WZ21JMGASA1EGAM6T8GPN37KXT65' where id=7; -update noar tt set b1='GHXPI36S' where id=7; -update noar ti set b1='GHXPI36S' where id=7; -update noar tt set b2='1G8VRE7Y58F0' where id=7; -update noar ti set b2='1G8VRE7Y58F0' where id=7; -update noar tt set b0='V4IG5V8MPL6VYH8LK3198WTU' where id=8; -update noar ti set b0='V4IG5V8MPL6VYH8LK3198WTU' where id=8; -update noar tt set b1='M9LL14XZOAO9JY6COFRWECC' where id=8; -update noar ti set b1='M9LL14XZOAO9JY6COFRWECC' where id=8; -update noar tt set b2='NVRAKYIWYPFFOD0BT5T4Z' where id=8; -update noar ti set b2='NVRAKYIWYPFFOD0BT5T4Z' where id=8; -update noar tt set b0='M0JILK4VK7SVE557XUW908ZNHM4VD1TV' where id=9; -update noar ti set b0='M0JILK4VK7SVE557XUW908ZNHM4VD1TV' where id=9; -update noar tt set b1='K9U3DVOMLAVP8KGQ11NYEV6HE6JS' where id=9; -update noar ti set b1='K9U3DVOMLAVP8KGQ11NYEV6HE6JS' where id=9; -update noar tt set b2='N9ENZX5NTSTOHLVBPRY9' where id=9; -update noar ti set b2='N9ENZX5NTSTOHLVBPRY9' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 blob null, - b1 blob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='56AMJL983G85V1XPLSP0' where id=1; -update noar ti set b0='56AMJL983G85V1XPLSP0' where id=1; -update noar tt set b1='3FWFB4' where id=1; -update noar ti set b1='3FWFB4' where id=1; -update noar tt set b2='0DZO1YWIZDXEZSW6QL3R1JE' where id=1; -update noar ti set b2='0DZO1YWIZDXEZSW6QL3R1JE' where id=1; -update noar tt set b0='DH6YE' where id=2; -update noar ti set b0='DH6YE' where id=2; -update noar tt set b1='Z1Y31' where id=2; -update noar ti set b1='Z1Y31' where id=2; -update noar tt set b2='C6H46H7IPKQ9RTN' where id=2; -update noar ti set b2='C6H46H7IPKQ9RTN' where id=2; -update noar tt set b0='M2JTOSE3ZUE7Z8D' where id=3; -update noar ti set b0='M2JTOSE3ZUE7Z8D' where id=3; -update noar tt set b1='P6ITGSNVA97Z11AGIW5BZLTFNDVG9GZ0' where id=3; -update noar ti set b1='P6ITGSNVA97Z11AGIW5BZLTFNDVG9GZ0' where id=3; -update noar tt set b2='D8RUIFXX15BSYKOTZLM1J6YVECXQ' where id=3; -update noar ti set b2='D8RUIFXX15BSYKOTZLM1J6YVECXQ' where id=3; -update noar tt set b0='ZB' where id=4; -update noar ti set b0='ZB' where id=4; -update noar tt set b1='BY264UQW5RX5T2KB2M' where id=4; -update noar ti set b1='BY264UQW5RX5T2KB2M' where id=4; -update noar tt set b2='P4Y' where id=4; -update noar ti set b2='P4Y' where id=4; -update noar tt set b0='R0E536JU0' where id=5; -update noar ti set b0='R0E536JU0' where id=5; -update noar tt set b1='NE1TFYCHQG8VZIMH8KB1NDG' where id=5; -update noar ti set b1='NE1TFYCHQG8VZIMH8KB1NDG' where id=5; -update noar tt set b2='L9FE' where id=5; -update noar ti set b2='L9FE' where id=5; -update noar tt set b0='IOW7HK5VP3JMKWOWR' where id=6; -update noar ti set b0='IOW7HK5VP3JMKWOWR' where id=6; -update noar tt set b1='H5PH3OLPW2' where id=6; -update noar ti set b1='H5PH3OLPW2' where id=6; -update noar tt set b2='A4SJ6UOC' where id=6; -update noar ti set b2='A4SJ6UOC' where id=6; -update noar tt set b0='OGXACY' where id=7; -update noar ti set b0='OGXACY' where id=7; -update noar tt set b1='1HDURLDWQFU6W0R68' where id=7; -update noar ti set b1='1HDURLDWQFU6W0R68' where id=7; -update noar tt set b2='9KSVB3P8GBVL7WSS29W6E' where id=7; -update noar ti set b2='9KSVB3P8GBVL7WSS29W6E' where id=7; -update noar tt set b0='AZ60M6KYCGAB08GR' where id=8; -update noar ti set b0='AZ60M6KYCGAB08GR' where id=8; -update noar tt set b1='5ET0Q4B4IE8BI4TG8' where id=8; -update noar ti set b1='5ET0Q4B4IE8BI4TG8' where id=8; -update noar tt set b2='KM8' where id=8; -update noar ti set b2='KM8' where id=8; -update noar tt set b0='Z2LE2LISQB2VTFH2M022RRN76BOQB' where id=9; -update noar ti set b0='Z2LE2LISQB2VTFH2M022RRN76BOQB' where id=9; -update noar tt set b1='B02MWV49R10TWTQZGDEMHFO1G4' where id=9; -update noar ti set b1='B02MWV49R10TWTQZGDEMHFO1G4' where id=9; -update noar tt set b2='9' where id=9; -update noar ti set b2='9' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 blob not null, - b1 blob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='D5RQ5CZ' where id=1; -update noar ti set b0='D5RQ5CZ' where id=1; -update noar tt set b1='M3XX7GMJ6LGX2GY75V20W4Q0LFBIX65' where id=1; -update noar ti set b1='M3XX7GMJ6LGX2GY75V20W4Q0LFBIX65' where id=1; -update noar tt set b2='PW' where id=1; -update noar ti set b2='PW' where id=1; -update noar tt set b0='RP7G3Z93X41UAZDJH' where id=2; -update noar ti set b0='RP7G3Z93X41UAZDJH' where id=2; -update noar tt set b1='3F310XIFVRVS663KAOF' where id=2; -update noar ti set b1='3F310XIFVRVS663KAOF' where id=2; -update noar tt set b2='ZN' where id=2; -update noar ti set b2='ZN' where id=2; -update noar tt set b0='HCO5RM66HFYY21VCRYK8IE274CUI0Z45' where id=3; -update noar ti set b0='HCO5RM66HFYY21VCRYK8IE274CUI0Z45' where id=3; -update noar tt set b1='O2HHP099ZWSR4AV7QTY' where id=3; -update noar ti set b1='O2HHP099ZWSR4AV7QTY' where id=3; -update noar tt set b2='I9AY8RMGX3YBY6DC104JW4UX' where id=3; -update noar ti set b2='I9AY8RMGX3YBY6DC104JW4UX' where id=3; -update noar tt set b0='Q4GH6SWGDV6' where id=4; -update noar ti set b0='Q4GH6SWGDV6' where id=4; -update noar tt set b1='NZGJYI3Z8PPAERH4WBKGH17O6RXN3RRD' where id=4; -update noar ti set b1='NZGJYI3Z8PPAERH4WBKGH17O6RXN3RRD' where id=4; -update noar tt set b2='M0VB12ETATHJXPV71C' where id=4; -update noar ti set b2='M0VB12ETATHJXPV71C' where id=4; -update noar tt set b0='CRT1768U969' where id=5; -update noar ti set b0='CRT1768U969' where id=5; -update noar tt set b1='9G5190KKG4KY7VYLNRTRDAYGRZLMRVN' where id=5; -update noar ti set b1='9G5190KKG4KY7VYLNRTRDAYGRZLMRVN' where id=5; -update noar tt set b2='MDH77KMMKEUX0WLYNL9ZHP7GTZ5' where id=5; -update noar ti set b2='MDH77KMMKEUX0WLYNL9ZHP7GTZ5' where id=5; -update noar tt set b0='E' where id=6; -update noar ti set b0='E' where id=6; -update noar tt set b1='AG1HPZKJZI2V3I2OY2KYZMF6R60R' where id=6; -update noar ti set b1='AG1HPZKJZI2V3I2OY2KYZMF6R60R' where id=6; -update noar tt set b2='ELA3ZVF41SQIDZSQ40' where id=6; -update noar ti set b2='ELA3ZVF41SQIDZSQ40' where id=6; -update noar tt set b0='3S' where id=7; -update noar ti set b0='3S' where id=7; -update noar tt set b1='NV' where id=7; -update noar ti set b1='NV' where id=7; -update noar tt set b2='0NXW8QE' where id=7; -update noar ti set b2='0NXW8QE' where id=7; -update noar tt set b0='YWF1WJL1YAHW5S' where id=8; -update noar ti set b0='YWF1WJL1YAHW5S' where id=8; -update noar tt set b1='QT18FZ87HUWU09YV50P' where id=8; -update noar ti set b1='QT18FZ87HUWU09YV50P' where id=8; -update noar tt set b2='F44MCHPPP4NVX0MGQX3YDHKK0ZX3' where id=8; -update noar ti set b2='F44MCHPPP4NVX0MGQX3YDHKK0ZX3' where id=8; -update noar tt set b0='HJ' where id=9; -update noar ti set b0='HJ' where id=9; -update noar tt set b1='399DX' where id=9; -update noar ti set b1='399DX' where id=9; -update noar tt set b2='D' where id=9; -update noar ti set b2='D' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 blob null, - b1 blob null, - b2 text null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='KUL9R62R5XHT9TLKXWAJ2' where id=1; -update noar ti set b0='KUL9R62R5XHT9TLKXWAJ2' where id=1; -update noar tt set b1='I16AISVK0C84JN94O' where id=1; -update noar ti set b1='I16AISVK0C84JN94O' where id=1; -update noar tt set b2='DZBSYN6XM3LQRMUOHVS' where id=1; -update noar ti set b2='DZBSYN6XM3LQRMUOHVS' where id=1; -update noar tt set b0='9QX7EWVD01RNO0K31H1C46P5Y' where id=2; -update noar ti set b0='9QX7EWVD01RNO0K31H1C46P5Y' where id=2; -update noar tt set b1='T5W4UV' where id=2; -update noar ti set b1='T5W4UV' where id=2; -update noar tt set b2='NSM3QUAFH69G13E71ZQ5FT' where id=2; -update noar ti set b2='NSM3QUAFH69G13E71ZQ5FT' where id=2; -update noar tt set b0='FZMG4K9M9' where id=3; -update noar ti set b0='FZMG4K9M9' where id=3; -update noar tt set b1='KDK2I3CZ5ODM4COM' where id=3; -update noar ti set b1='KDK2I3CZ5ODM4COM' where id=3; -update noar tt set b2='Q8CHH3VNZXM5JBOAK' where id=3; -update noar ti set b2='Q8CHH3VNZXM5JBOAK' where id=3; -update noar tt set b0='Z' where id=4; -update noar ti set b0='Z' where id=4; -update noar tt set b1='T9Z' where id=4; -update noar ti set b1='T9Z' where id=4; -update noar tt set b2='26PX3YLA2DBLW2KQ9T8ER825PG5AU2VX' where id=4; -update noar ti set b2='26PX3YLA2DBLW2KQ9T8ER825PG5AU2VX' where id=4; -update noar tt set b0='IYOSIQVCY0QYKLDMDBVTR5CKP47YC9C' where id=5; -update noar ti set b0='IYOSIQVCY0QYKLDMDBVTR5CKP47YC9C' where id=5; -update noar tt set b1='NEOGGYNOPY4JC1JXJ' where id=5; -update noar ti set b1='NEOGGYNOPY4JC1JXJ' where id=5; -update noar tt set b2='QD8W0VPV' where id=5; -update noar ti set b2='QD8W0VPV' where id=5; -update noar tt set b0='OHEIOC8XO6C7RTLXBIH99777UU7WZE3I' where id=6; -update noar ti set b0='OHEIOC8XO6C7RTLXBIH99777UU7WZE3I' where id=6; -update noar tt set b1='GDVTQ' where id=6; -update noar ti set b1='GDVTQ' where id=6; -update noar tt set b2='KSON25ZJHPPV2VCA1MADX2BGAGOEZ' where id=6; -update noar ti set b2='KSON25ZJHPPV2VCA1MADX2BGAGOEZ' where id=6; -update noar tt set b0='BYN85BOSV1PLLQB2AGSJLXBIHQUR' where id=7; -update noar ti set b0='BYN85BOSV1PLLQB2AGSJLXBIHQUR' where id=7; -update noar tt set b1='18EPY4WOA0PRS4UEH8IDQWFRMONY' where id=7; -update noar ti set b1='18EPY4WOA0PRS4UEH8IDQWFRMONY' where id=7; -update noar tt set b2='2K1WWKV3FFQ9GE1IVCG0' where id=7; -update noar ti set b2='2K1WWKV3FFQ9GE1IVCG0' where id=7; -update noar tt set b0='6O50X7JG01O476B92PVF' where id=8; -update noar ti set b0='6O50X7JG01O476B92PVF' where id=8; -update noar tt set b1='JF1' where id=8; -update noar ti set b1='JF1' where id=8; -update noar tt set b2='O8JXY5CFDL20' where id=8; -update noar ti set b2='O8JXY5CFDL20' where id=8; -update noar tt set b0='V27DZ' where id=9; -update noar ti set b0='V27DZ' where id=9; -update noar tt set b1='NBZCN2ASHLBS0SFFZ87R0D98' where id=9; -update noar ti set b1='NBZCN2ASHLBS0SFFZ87R0D98' where id=9; -update noar tt set b2='GEL' where id=9; -update noar ti set b2='GEL' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 blob not null, - b1 blob not null, - b2 text not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='2J50PUSKS4CLILJ8BE' where id=1; -update noar ti set b0='2J50PUSKS4CLILJ8BE' where id=1; -update noar tt set b1='IZ7O58ECHPB9EJEF8H43UMVWC' where id=1; -update noar ti set b1='IZ7O58ECHPB9EJEF8H43UMVWC' where id=1; -update noar tt set b2='KSB8DY5VBCSVTJ' where id=1; -update noar ti set b2='KSB8DY5VBCSVTJ' where id=1; -update noar tt set b0='OP4RAOMGCIBUS9WP8O3GE8' where id=2; -update noar ti set b0='OP4RAOMGCIBUS9WP8O3GE8' where id=2; -update noar tt set b1='YXPLOGN9198B' where id=2; -update noar ti set b1='YXPLOGN9198B' where id=2; -update noar tt set b2='LA3M88Q' where id=2; -update noar ti set b2='LA3M88Q' where id=2; -update noar tt set b0='KHVIJHK6JLLYEGNG59QD6C6BXQFOD' where id=3; -update noar ti set b0='KHVIJHK6JLLYEGNG59QD6C6BXQFOD' where id=3; -update noar tt set b1='AQWK4196CLH31W5OF0K' where id=3; -update noar ti set b1='AQWK4196CLH31W5OF0K' where id=3; -update noar tt set b2='WQ3TDBB7I9' where id=3; -update noar ti set b2='WQ3TDBB7I9' where id=3; -update noar tt set b0='83D0GE8JEZBMPUGRXWAGACZB8TBSNMN' where id=4; -update noar ti set b0='83D0GE8JEZBMPUGRXWAGACZB8TBSNMN' where id=4; -update noar tt set b1='I6QS32TU' where id=4; -update noar ti set b1='I6QS32TU' where id=4; -update noar tt set b2='SV6UBP82JBWED' where id=4; -update noar ti set b2='SV6UBP82JBWED' where id=4; -update noar tt set b0='U' where id=5; -update noar ti set b0='U' where id=5; -update noar tt set b1='G5PVDKYQE2SFB5W445VJEK22JABFMB' where id=5; -update noar ti set b1='G5PVDKYQE2SFB5W445VJEK22JABFMB' where id=5; -update noar tt set b2='EOGDCBZLP7EB4O2V8SN' where id=5; -update noar ti set b2='EOGDCBZLP7EB4O2V8SN' where id=5; -update noar tt set b0='SA56' where id=6; -update noar ti set b0='SA56' where id=6; -update noar tt set b1='AAD24XLTEBO3R3HXZ2BHV0QY0J' where id=6; -update noar ti set b1='AAD24XLTEBO3R3HXZ2BHV0QY0J' where id=6; -update noar tt set b2='6TTM4VGMWV44BX457MNLAHN35KT' where id=6; -update noar ti set b2='6TTM4VGMWV44BX457MNLAHN35KT' where id=6; -update noar tt set b0='1G32Y30YJMQZKCV60V6RMHTY34' where id=7; -update noar ti set b0='1G32Y30YJMQZKCV60V6RMHTY34' where id=7; -update noar tt set b1='FRBYVQX0L2XTWWQJ0MNBTE13BUCCW' where id=7; -update noar ti set b1='FRBYVQX0L2XTWWQJ0MNBTE13BUCCW' where id=7; -update noar tt set b2='2C1PB72YP3XJPYDLS5Q90SDMSM5O275H' where id=7; -update noar ti set b2='2C1PB72YP3XJPYDLS5Q90SDMSM5O275H' where id=7; -update noar tt set b0='34QQYD9ABXX820FRK278269SY5RZ3' where id=8; -update noar ti set b0='34QQYD9ABXX820FRK278269SY5RZ3' where id=8; -update noar tt set b1='UQG9UCA6JER9C6AWJP9QLXV' where id=8; -update noar ti set b1='UQG9UCA6JER9C6AWJP9QLXV' where id=8; -update noar tt set b2='QIMCR0S7' where id=8; -update noar ti set b2='QIMCR0S7' where id=8; -update noar tt set b0='UHXB' where id=9; -update noar ti set b0='UHXB' where id=9; -update noar tt set b1='V8STWNA1AEQVKVDB7ZL8' where id=9; -update noar ti set b1='V8STWNA1AEQVKVDB7ZL8' where id=9; -update noar tt set b2='8KZE20JFQ7F80V' where id=9; -update noar ti set b2='8KZE20JFQ7F80V' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 blob null, - b1 mediumblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='7CDYYCLYVV3P' where id=1; -update noar ti set b0='7CDYYCLYVV3P' where id=1; -update noar tt set b1='GBZFHZ9' where id=1; -update noar ti set b1='GBZFHZ9' where id=1; -update noar tt set b2='T4BUQYE' where id=1; -update noar ti set b2='T4BUQYE' where id=1; -update noar tt set b0='S2EZBRBRWZ021679I5BNYZCP1VIUTJ' where id=2; -update noar ti set b0='S2EZBRBRWZ021679I5BNYZCP1VIUTJ' where id=2; -update noar tt set b1='G7LQ' where id=2; -update noar ti set b1='G7LQ' where id=2; -update noar tt set b2='XMN08ZVS2TRN6HE4JX9L' where id=2; -update noar ti set b2='XMN08ZVS2TRN6HE4JX9L' where id=2; -update noar tt set b0='O0P' where id=3; -update noar ti set b0='O0P' where id=3; -update noar tt set b1='S4OTKHKYR5UWJYEI2ILP04YL3JLT' where id=3; -update noar ti set b1='S4OTKHKYR5UWJYEI2ILP04YL3JLT' where id=3; -update noar tt set b2='J2EZDFMNI04QC35' where id=3; -update noar ti set b2='J2EZDFMNI04QC35' where id=3; -update noar tt set b0='AA7754SASPCBQ3KQRP21M' where id=4; -update noar ti set b0='AA7754SASPCBQ3KQRP21M' where id=4; -update noar tt set b1='1F358JYFLDLOXI' where id=4; -update noar ti set b1='1F358JYFLDLOXI' where id=4; -update noar tt set b2='HR0AQW8FX1E' where id=4; -update noar ti set b2='HR0AQW8FX1E' where id=4; -update noar tt set b0='PVMT' where id=5; -update noar ti set b0='PVMT' where id=5; -update noar tt set b1='2XR3QS' where id=5; -update noar ti set b1='2XR3QS' where id=5; -update noar tt set b2='ITAGAD' where id=5; -update noar ti set b2='ITAGAD' where id=5; -update noar tt set b0='6L68VMJY3SYTRRDC4HYA' where id=6; -update noar ti set b0='6L68VMJY3SYTRRDC4HYA' where id=6; -update noar tt set b1='WJUHNDSXWWAG' where id=6; -update noar ti set b1='WJUHNDSXWWAG' where id=6; -update noar tt set b2='58RVBGH37AO139VKFAQSK' where id=6; -update noar ti set b2='58RVBGH37AO139VKFAQSK' where id=6; -update noar tt set b0='67UD1' where id=7; -update noar ti set b0='67UD1' where id=7; -update noar tt set b1='2I8W7ESDGFM4Y5E' where id=7; -update noar ti set b1='2I8W7ESDGFM4Y5E' where id=7; -update noar tt set b2='X9EX9UGJEVO1OFNBW2A2GC2HARGT1' where id=7; -update noar ti set b2='X9EX9UGJEVO1OFNBW2A2GC2HARGT1' where id=7; -update noar tt set b0='0VR9B5RD28PB4W4QMWVRRFPVCL' where id=8; -update noar ti set b0='0VR9B5RD28PB4W4QMWVRRFPVCL' where id=8; -update noar tt set b1='5C7BUUI807GM63M' where id=8; -update noar ti set b1='5C7BUUI807GM63M' where id=8; -update noar tt set b2='K' where id=8; -update noar ti set b2='K' where id=8; -update noar tt set b0='ER' where id=9; -update noar ti set b0='ER' where id=9; -update noar tt set b1='OQ3MYTZL4ESWL6Z8V' where id=9; -update noar ti set b1='OQ3MYTZL4ESWL6Z8V' where id=9; -update noar tt set b2='JIDOINACMUZU' where id=9; -update noar ti set b2='JIDOINACMUZU' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 blob not null, - b1 mediumblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='C6' where id=1; -update noar ti set b0='C6' where id=1; -update noar tt set b1='SOU6MIDKZC2SRYNIPESS8XSDENUA4' where id=1; -update noar ti set b1='SOU6MIDKZC2SRYNIPESS8XSDENUA4' where id=1; -update noar tt set b2='ARIUNWKSHU12NXO3RMMAPORPTP6GW' where id=1; -update noar ti set b2='ARIUNWKSHU12NXO3RMMAPORPTP6GW' where id=1; -update noar tt set b0='QO39RTKRAI' where id=2; -update noar ti set b0='QO39RTKRAI' where id=2; -update noar tt set b1='Y3XLVR33AXH7TVD9U07C2UO' where id=2; -update noar ti set b1='Y3XLVR33AXH7TVD9U07C2UO' where id=2; -update noar tt set b2='RT9ZNAF' where id=2; -update noar ti set b2='RT9ZNAF' where id=2; -update noar tt set b0='L987SRYNJVZ2P3E3SIY5I3' where id=3; -update noar ti set b0='L987SRYNJVZ2P3E3SIY5I3' where id=3; -update noar tt set b1='GLGA44' where id=3; -update noar ti set b1='GLGA44' where id=3; -update noar tt set b2='RU6U5' where id=3; -update noar ti set b2='RU6U5' where id=3; -update noar tt set b0='LZKU6COFRGCPOZK1VMVMS0F7' where id=4; -update noar ti set b0='LZKU6COFRGCPOZK1VMVMS0F7' where id=4; -update noar tt set b1='PYDZ60VDWUDKA9FQWP06A0I' where id=4; -update noar ti set b1='PYDZ60VDWUDKA9FQWP06A0I' where id=4; -update noar tt set b2='6JH9Q' where id=4; -update noar ti set b2='6JH9Q' where id=4; -update noar tt set b0='L0RESOTBTQV' where id=5; -update noar ti set b0='L0RESOTBTQV' where id=5; -update noar tt set b1='D2' where id=5; -update noar ti set b1='D2' where id=5; -update noar tt set b2='UG2GQNWXSYM' where id=5; -update noar ti set b2='UG2GQNWXSYM' where id=5; -update noar tt set b0='T8J' where id=6; -update noar ti set b0='T8J' where id=6; -update noar tt set b1='A3V96R26JYETEC7BRJNUOU3CYHXU5OR' where id=6; -update noar ti set b1='A3V96R26JYETEC7BRJNUOU3CYHXU5OR' where id=6; -update noar tt set b2='LCALHV6OS4RAO2MQSAX93NP334Q' where id=6; -update noar ti set b2='LCALHV6OS4RAO2MQSAX93NP334Q' where id=6; -update noar tt set b0='1YYQCPJV7OUC' where id=7; -update noar ti set b0='1YYQCPJV7OUC' where id=7; -update noar tt set b1='J76VDPWGNVZ81' where id=7; -update noar ti set b1='J76VDPWGNVZ81' where id=7; -update noar tt set b2='BG56WWJXFXMIHG4VUFK10XP' where id=7; -update noar ti set b2='BG56WWJXFXMIHG4VUFK10XP' where id=7; -update noar tt set b0='6BBHJLWDH8QZZH' where id=8; -update noar ti set b0='6BBHJLWDH8QZZH' where id=8; -update noar tt set b1='71P23X3Q77XFK3S0QQEO9MZVC88' where id=8; -update noar ti set b1='71P23X3Q77XFK3S0QQEO9MZVC88' where id=8; -update noar tt set b2='LZXU4W69N2DR' where id=8; -update noar ti set b2='LZXU4W69N2DR' where id=8; -update noar tt set b0='HETGMBF3GSCNU2C4DASNP' where id=9; -update noar ti set b0='HETGMBF3GSCNU2C4DASNP' where id=9; -update noar tt set b1='22GV5RJOB5H7741' where id=9; -update noar ti set b1='22GV5RJOB5H7741' where id=9; -update noar tt set b2='IDDR5KA9OHDG70M5ZC' where id=9; -update noar ti set b2='IDDR5KA9OHDG70M5ZC' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 blob null, - b1 mediumblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='QHY19YQGCFEAQNPCDES9WSB7W7D7' where id=1; -update noar ti set b0='QHY19YQGCFEAQNPCDES9WSB7W7D7' where id=1; -update noar tt set b1='AF' where id=1; -update noar ti set b1='AF' where id=1; -update noar tt set b2='Y7KFGW5T7SV' where id=1; -update noar ti set b2='Y7KFGW5T7SV' where id=1; -update noar tt set b0='VC0IUSILD4PN81LG48YUY' where id=2; -update noar ti set b0='VC0IUSILD4PN81LG48YUY' where id=2; -update noar tt set b1='HRQ45I18BYA7GQBSMS' where id=2; -update noar ti set b1='HRQ45I18BYA7GQBSMS' where id=2; -update noar tt set b2='TF2HGCXUXXICVYW7PJG50K7BN' where id=2; -update noar ti set b2='TF2HGCXUXXICVYW7PJG50K7BN' where id=2; -update noar tt set b0='DM28KDBKQ71' where id=3; -update noar ti set b0='DM28KDBKQ71' where id=3; -update noar tt set b1='ZOTKU2Z25LMH78I1EGKTSVE7U0' where id=3; -update noar ti set b1='ZOTKU2Z25LMH78I1EGKTSVE7U0' where id=3; -update noar tt set b2='GPP6VN80AFJMNJ168695' where id=3; -update noar ti set b2='GPP6VN80AFJMNJ168695' where id=3; -update noar tt set b0='LRNFCS3D8HJL28' where id=4; -update noar ti set b0='LRNFCS3D8HJL28' where id=4; -update noar tt set b1='8EWKJ5ORQNDO158EJN0' where id=4; -update noar ti set b1='8EWKJ5ORQNDO158EJN0' where id=4; -update noar tt set b2='16JQ36TDSTKNJ780L2N9U' where id=4; -update noar ti set b2='16JQ36TDSTKNJ780L2N9U' where id=4; -update noar tt set b0='56RW5' where id=5; -update noar ti set b0='56RW5' where id=5; -update noar tt set b1='R7TL1XXDTN005D74MY9L' where id=5; -update noar ti set b1='R7TL1XXDTN005D74MY9L' where id=5; -update noar tt set b2='R0C' where id=5; -update noar ti set b2='R0C' where id=5; -update noar tt set b0='8ISFYDRRMQW0NDBPEC9L' where id=6; -update noar ti set b0='8ISFYDRRMQW0NDBPEC9L' where id=6; -update noar tt set b1='9PZLQTMB3RQHAP8XV5NI61LMQ0OM5' where id=6; -update noar ti set b1='9PZLQTMB3RQHAP8XV5NI61LMQ0OM5' where id=6; -update noar tt set b2='JUN9TLDZDV2N0RW9' where id=6; -update noar ti set b2='JUN9TLDZDV2N0RW9' where id=6; -update noar tt set b0='QCQ1GDVCVPDJH87QV' where id=7; -update noar ti set b0='QCQ1GDVCVPDJH87QV' where id=7; -update noar tt set b1='LOVX89LS6NE' where id=7; -update noar ti set b1='LOVX89LS6NE' where id=7; -update noar tt set b2='P' where id=7; -update noar ti set b2='P' where id=7; -update noar tt set b0='H7J22C64A28FAJ0TPGZC4N09EW7HP6Y' where id=8; -update noar ti set b0='H7J22C64A28FAJ0TPGZC4N09EW7HP6Y' where id=8; -update noar tt set b1='Z8DU5NMHP8XOI' where id=8; -update noar ti set b1='Z8DU5NMHP8XOI' where id=8; -update noar tt set b2='J205717P18L' where id=8; -update noar ti set b2='J205717P18L' where id=8; -update noar tt set b0='BAEHP6VAXCU2PC79GRQJ4TFE4ZTTPHB' where id=9; -update noar ti set b0='BAEHP6VAXCU2PC79GRQJ4TFE4ZTTPHB' where id=9; -update noar tt set b1='D4IJGT76XBJ9WSIC' where id=9; -update noar ti set b1='D4IJGT76XBJ9WSIC' where id=9; -update noar tt set b2='ERZ182THFSO1X1C' where id=9; -update noar ti set b2='ERZ182THFSO1X1C' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 blob not null, - b1 mediumblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='17AJDBI9' where id=1; -update noar ti set b0='17AJDBI9' where id=1; -update noar tt set b1='A53RGXM55SQQ16PE98R4ILCHOJL9KK27' where id=1; -update noar ti set b1='A53RGXM55SQQ16PE98R4ILCHOJL9KK27' where id=1; -update noar tt set b2='UIVSAMSD5SONPH0OYYX' where id=1; -update noar ti set b2='UIVSAMSD5SONPH0OYYX' where id=1; -update noar tt set b0='9W1O62Y4CR2FV5K0XEYXB' where id=2; -update noar ti set b0='9W1O62Y4CR2FV5K0XEYXB' where id=2; -update noar tt set b1='HOTTZNLX4PU3T68ZL8IAIHZQ' where id=2; -update noar ti set b1='HOTTZNLX4PU3T68ZL8IAIHZQ' where id=2; -update noar tt set b2='5KZ' where id=2; -update noar ti set b2='5KZ' where id=2; -update noar tt set b0='8XWIIERQXFLK8AKC1R1' where id=3; -update noar ti set b0='8XWIIERQXFLK8AKC1R1' where id=3; -update noar tt set b1='ZMEA7VELZYAQFHH1' where id=3; -update noar ti set b1='ZMEA7VELZYAQFHH1' where id=3; -update noar tt set b2='25O1X' where id=3; -update noar ti set b2='25O1X' where id=3; -update noar tt set b0='2FGED7D2KGPDLN' where id=4; -update noar ti set b0='2FGED7D2KGPDLN' where id=4; -update noar tt set b1='LN' where id=4; -update noar ti set b1='LN' where id=4; -update noar tt set b2='REZOU5LK3VX1ALEWM' where id=4; -update noar ti set b2='REZOU5LK3VX1ALEWM' where id=4; -update noar tt set b0='YCG' where id=5; -update noar ti set b0='YCG' where id=5; -update noar tt set b1='BAYLK1X9WTBT4TVG21V' where id=5; -update noar ti set b1='BAYLK1X9WTBT4TVG21V' where id=5; -update noar tt set b2='KWXST8PVYOSNRI0' where id=5; -update noar ti set b2='KWXST8PVYOSNRI0' where id=5; -update noar tt set b0='0I45AIEGXIA5UXC2' where id=6; -update noar ti set b0='0I45AIEGXIA5UXC2' where id=6; -update noar tt set b1='D5V346' where id=6; -update noar ti set b1='D5V346' where id=6; -update noar tt set b2='8' where id=6; -update noar ti set b2='8' where id=6; -update noar tt set b0='O891VTQKFH' where id=7; -update noar ti set b0='O891VTQKFH' where id=7; -update noar tt set b1='DS1EWMZR9RL5DA47Y3XP6UWEUQ5RDP' where id=7; -update noar ti set b1='DS1EWMZR9RL5DA47Y3XP6UWEUQ5RDP' where id=7; -update noar tt set b2='4Z34HE15BBU6YR31SKKFO2NMUZU2' where id=7; -update noar ti set b2='4Z34HE15BBU6YR31SKKFO2NMUZU2' where id=7; -update noar tt set b0='DP5H34ZBD9RXLQ80J3I3XHZLXIXBM' where id=8; -update noar ti set b0='DP5H34ZBD9RXLQ80J3I3XHZLXIXBM' where id=8; -update noar tt set b1='483RCPP45FUATV7YG5L' where id=8; -update noar ti set b1='483RCPP45FUATV7YG5L' where id=8; -update noar tt set b2='VC4D88' where id=8; -update noar ti set b2='VC4D88' where id=8; -update noar tt set b0='P' where id=9; -update noar ti set b0='P' where id=9; -update noar tt set b1='QMTZBK6UYYYW8Z' where id=9; -update noar ti set b1='QMTZBK6UYYYW8Z' where id=9; -update noar tt set b2='NSU' where id=9; -update noar ti set b2='NSU' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 blob null, - b1 mediumblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='65YJEE13IWQUE' where id=1; -update noar ti set b0='65YJEE13IWQUE' where id=1; -update noar tt set b1='TCTC1A' where id=1; -update noar ti set b1='TCTC1A' where id=1; -update noar tt set b2='OZXJ' where id=1; -update noar ti set b2='OZXJ' where id=1; -update noar tt set b0='TMS' where id=2; -update noar ti set b0='TMS' where id=2; -update noar tt set b1='ZWERA63F20BCAV3' where id=2; -update noar ti set b1='ZWERA63F20BCAV3' where id=2; -update noar tt set b2='L05MPNDVRUXSHD4P1RH' where id=2; -update noar ti set b2='L05MPNDVRUXSHD4P1RH' where id=2; -update noar tt set b0='EDLHA' where id=3; -update noar ti set b0='EDLHA' where id=3; -update noar tt set b1='73FRWPOG3' where id=3; -update noar ti set b1='73FRWPOG3' where id=3; -update noar tt set b2='DKHW3HVOO7YI1SR9V4LRU14E09ECG' where id=3; -update noar ti set b2='DKHW3HVOO7YI1SR9V4LRU14E09ECG' where id=3; -update noar tt set b0='YXF0VZISJ08NI6SEFLYM1GXPO' where id=4; -update noar ti set b0='YXF0VZISJ08NI6SEFLYM1GXPO' where id=4; -update noar tt set b1='XI5GWIEERUB19Y98ZMC' where id=4; -update noar ti set b1='XI5GWIEERUB19Y98ZMC' where id=4; -update noar tt set b2='WAV8FKTKQEACKL5IKKQ0E' where id=4; -update noar ti set b2='WAV8FKTKQEACKL5IKKQ0E' where id=4; -update noar tt set b0='06KHAXKMQTNW8B58CH1TATN9HHRU' where id=5; -update noar ti set b0='06KHAXKMQTNW8B58CH1TATN9HHRU' where id=5; -update noar tt set b1='NSNJ1PC01PN4NH' where id=5; -update noar ti set b1='NSNJ1PC01PN4NH' where id=5; -update noar tt set b2='LIVS5P695JXJXC7TXX975PBAMW' where id=5; -update noar ti set b2='LIVS5P695JXJXC7TXX975PBAMW' where id=5; -update noar tt set b0='L1CGVE' where id=6; -update noar ti set b0='L1CGVE' where id=6; -update noar tt set b1='K62BND8ATNVYH82TJL7JP2BQFP' where id=6; -update noar ti set b1='K62BND8ATNVYH82TJL7JP2BQFP' where id=6; -update noar tt set b2='69W77LR0AIXSUV3J6LW7UZNVE30' where id=6; -update noar ti set b2='69W77LR0AIXSUV3J6LW7UZNVE30' where id=6; -update noar tt set b0='1B6BH39B' where id=7; -update noar ti set b0='1B6BH39B' where id=7; -update noar tt set b1='JSYHA6JRTBYIMRBDTU' where id=7; -update noar ti set b1='JSYHA6JRTBYIMRBDTU' where id=7; -update noar tt set b2='P7O2D' where id=7; -update noar ti set b2='P7O2D' where id=7; -update noar tt set b0='ZR2GCW88R0V' where id=8; -update noar ti set b0='ZR2GCW88R0V' where id=8; -update noar tt set b1='WIFGDOLS5XXEJBG' where id=8; -update noar ti set b1='WIFGDOLS5XXEJBG' where id=8; -update noar tt set b2='6XGD7H0202357X9R6VSUKSR' where id=8; -update noar ti set b2='6XGD7H0202357X9R6VSUKSR' where id=8; -update noar tt set b0='ZYXY9PE3HP4870TLBPKEB7JVNCF' where id=9; -update noar ti set b0='ZYXY9PE3HP4870TLBPKEB7JVNCF' where id=9; -update noar tt set b1='E5GNDGEL12YEX3F6MCR4G4' where id=9; -update noar ti set b1='E5GNDGEL12YEX3F6MCR4G4' where id=9; -update noar tt set b2='LI34MJ75ED0C3MPTR30BS9RQV02I' where id=9; -update noar ti set b2='LI34MJ75ED0C3MPTR30BS9RQV02I' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 blob not null, - b1 mediumblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='TOBQKN42SUUGP63XRGHY1J5' where id=1; -update noar ti set b0='TOBQKN42SUUGP63XRGHY1J5' where id=1; -update noar tt set b1='G4FKD' where id=1; -update noar ti set b1='G4FKD' where id=1; -update noar tt set b2='G' where id=1; -update noar ti set b2='G' where id=1; -update noar tt set b0='900SYJ5N0CTFSSW0IIFEB6U4E8' where id=2; -update noar ti set b0='900SYJ5N0CTFSSW0IIFEB6U4E8' where id=2; -update noar tt set b1='PNTRT71405K6SHAEBVAX' where id=2; -update noar ti set b1='PNTRT71405K6SHAEBVAX' where id=2; -update noar tt set b2='0D7T1OCJDHV6VIV9DZ5' where id=2; -update noar ti set b2='0D7T1OCJDHV6VIV9DZ5' where id=2; -update noar tt set b0='YHPBGEIAYMWFE2RR3W3S4IB' where id=3; -update noar ti set b0='YHPBGEIAYMWFE2RR3W3S4IB' where id=3; -update noar tt set b1='VAN8EKUEXNKRE' where id=3; -update noar ti set b1='VAN8EKUEXNKRE' where id=3; -update noar tt set b2='XJCR2JHJW5' where id=3; -update noar ti set b2='XJCR2JHJW5' where id=3; -update noar tt set b0='OXG5W7JU' where id=4; -update noar ti set b0='OXG5W7JU' where id=4; -update noar tt set b1='2L0QK0ZGS2GNH9CJG6JDZ1' where id=4; -update noar ti set b1='2L0QK0ZGS2GNH9CJG6JDZ1' where id=4; -update noar tt set b2='L2B7CLE3Q955XDFE2UR' where id=4; -update noar ti set b2='L2B7CLE3Q955XDFE2UR' where id=4; -update noar tt set b0='556B7WWPS5ZMMLMMH9Y6R86TTVI' where id=5; -update noar ti set b0='556B7WWPS5ZMMLMMH9Y6R86TTVI' where id=5; -update noar tt set b1='A5H2HTJ7NXYC1TDTE8RTYK0RIPXE' where id=5; -update noar ti set b1='A5H2HTJ7NXYC1TDTE8RTYK0RIPXE' where id=5; -update noar tt set b2='BXGQDZ3NYE0ORJ9Q7L3GTQ' where id=5; -update noar ti set b2='BXGQDZ3NYE0ORJ9Q7L3GTQ' where id=5; -update noar tt set b0='J13DGJMKK' where id=6; -update noar ti set b0='J13DGJMKK' where id=6; -update noar tt set b1='OKXKB36SIBQ6DYTAWWNCQRN' where id=6; -update noar ti set b1='OKXKB36SIBQ6DYTAWWNCQRN' where id=6; -update noar tt set b2='X' where id=6; -update noar ti set b2='X' where id=6; -update noar tt set b0='MQF' where id=7; -update noar ti set b0='MQF' where id=7; -update noar tt set b1='DF4BYC54BPBT16UGQDLQTT' where id=7; -update noar ti set b1='DF4BYC54BPBT16UGQDLQTT' where id=7; -update noar tt set b2='B6QFZ6D8JNN5ZP66R8G0A0HT6' where id=7; -update noar ti set b2='B6QFZ6D8JNN5ZP66R8G0A0HT6' where id=7; -update noar tt set b0='1P4JOLC1RP' where id=8; -update noar ti set b0='1P4JOLC1RP' where id=8; -update noar tt set b1='TSZ73EN' where id=8; -update noar ti set b1='TSZ73EN' where id=8; -update noar tt set b2='6CGX2FBTI8Y0VY2EUU4' where id=8; -update noar ti set b2='6CGX2FBTI8Y0VY2EUU4' where id=8; -update noar tt set b0='IE9PE17JCCSZZNYWWN7OFYZ0NHGDHM' where id=9; -update noar ti set b0='IE9PE17JCCSZZNYWWN7OFYZ0NHGDHM' where id=9; -update noar tt set b1='8PT11CX4KBBLGB0' where id=9; -update noar ti set b1='8PT11CX4KBBLGB0' where id=9; -update noar tt set b2='W4' where id=9; -update noar ti set b2='W4' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 blob null, - b1 mediumblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='9RMD' where id=1; -update noar ti set b0='9RMD' where id=1; -update noar tt set b1='TYIPDO3YUIUCVODS4' where id=1; -update noar ti set b1='TYIPDO3YUIUCVODS4' where id=1; -update noar tt set b2='6IV' where id=1; -update noar ti set b2='6IV' where id=1; -update noar tt set b0='6QH0E2YXDJNOCEHTAR2NTKDK20P9VWBQ' where id=2; -update noar ti set b0='6QH0E2YXDJNOCEHTAR2NTKDK20P9VWBQ' where id=2; -update noar tt set b1='3CIQ61ZPJ2XEIJEIVAZM17QAN' where id=2; -update noar ti set b1='3CIQ61ZPJ2XEIJEIVAZM17QAN' where id=2; -update noar tt set b2='EIHD06DJEAK5K1' where id=2; -update noar ti set b2='EIHD06DJEAK5K1' where id=2; -update noar tt set b0='RKKOEX2AIKMYTOK2LX' where id=3; -update noar ti set b0='RKKOEX2AIKMYTOK2LX' where id=3; -update noar tt set b1='I' where id=3; -update noar ti set b1='I' where id=3; -update noar tt set b2='W2R8SPPSDARAW20IL2PDHYQ1N5LZWDDT' where id=3; -update noar ti set b2='W2R8SPPSDARAW20IL2PDHYQ1N5LZWDDT' where id=3; -update noar tt set b0='1BHBGALM' where id=4; -update noar ti set b0='1BHBGALM' where id=4; -update noar tt set b1='NC23ZCD8' where id=4; -update noar ti set b1='NC23ZCD8' where id=4; -update noar tt set b2='XZ' where id=4; -update noar ti set b2='XZ' where id=4; -update noar tt set b0='1PQ0BA7' where id=5; -update noar ti set b0='1PQ0BA7' where id=5; -update noar tt set b1='187K13162HY8VE7HX7U7TX1N4OGGTXY' where id=5; -update noar ti set b1='187K13162HY8VE7HX7U7TX1N4OGGTXY' where id=5; -update noar tt set b2='H8TN56V' where id=5; -update noar ti set b2='H8TN56V' where id=5; -update noar tt set b0='1' where id=6; -update noar ti set b0='1' where id=6; -update noar tt set b1='OBY25SU3KGENETDEX6GHZA2D1D1MZJNO' where id=6; -update noar ti set b1='OBY25SU3KGENETDEX6GHZA2D1D1MZJNO' where id=6; -update noar tt set b2='V1P3HAQRATR52GGRFHM6SG' where id=6; -update noar ti set b2='V1P3HAQRATR52GGRFHM6SG' where id=6; -update noar tt set b0='83KD5K1Y137GDQKR8AA0VOYRZ6R6LYKC' where id=7; -update noar ti set b0='83KD5K1Y137GDQKR8AA0VOYRZ6R6LYKC' where id=7; -update noar tt set b1='JTLVFSMCVBHO' where id=7; -update noar ti set b1='JTLVFSMCVBHO' where id=7; -update noar tt set b2='EZIZDAKTNMEDTR91HB5AJJBM' where id=7; -update noar ti set b2='EZIZDAKTNMEDTR91HB5AJJBM' where id=7; -update noar tt set b0='C8GCJOOI0T4N8O' where id=8; -update noar ti set b0='C8GCJOOI0T4N8O' where id=8; -update noar tt set b1='8Q0C3NVR8' where id=8; -update noar ti set b1='8Q0C3NVR8' where id=8; -update noar tt set b2='NID37C0FSL14ZSTGY' where id=8; -update noar ti set b2='NID37C0FSL14ZSTGY' where id=8; -update noar tt set b0='J00I6E86QOY27A9H7O82YQSRFXVY' where id=9; -update noar ti set b0='J00I6E86QOY27A9H7O82YQSRFXVY' where id=9; -update noar tt set b1='PGV9HBB4WLB' where id=9; -update noar ti set b1='PGV9HBB4WLB' where id=9; -update noar tt set b2='T' where id=9; -update noar ti set b2='T' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 blob not null, - b1 mediumblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='JRQ8DE4AB8NKCJXNHTNFTW5V8OKOX5K' where id=1; -update noar ti set b0='JRQ8DE4AB8NKCJXNHTNFTW5V8OKOX5K' where id=1; -update noar tt set b1='AIF22OVYI11YHRPD2LXXA0V3' where id=1; -update noar ti set b1='AIF22OVYI11YHRPD2LXXA0V3' where id=1; -update noar tt set b2='7DTC5DJ5G7TIDO8' where id=1; -update noar ti set b2='7DTC5DJ5G7TIDO8' where id=1; -update noar tt set b0='8' where id=2; -update noar ti set b0='8' where id=2; -update noar tt set b1='JXQOS9' where id=2; -update noar ti set b1='JXQOS9' where id=2; -update noar tt set b2='12O2O1T3N0P8KRRGEJS7B' where id=2; -update noar ti set b2='12O2O1T3N0P8KRRGEJS7B' where id=2; -update noar tt set b0='AX1T88VFY7RI3QB' where id=3; -update noar ti set b0='AX1T88VFY7RI3QB' where id=3; -update noar tt set b1='N4CMM2U1WGGXI7EKQ' where id=3; -update noar ti set b1='N4CMM2U1WGGXI7EKQ' where id=3; -update noar tt set b2='197JHL39G90FSL8VYQMQS' where id=3; -update noar ti set b2='197JHL39G90FSL8VYQMQS' where id=3; -update noar tt set b0='TDCNRDGPMRN9RU' where id=4; -update noar ti set b0='TDCNRDGPMRN9RU' where id=4; -update noar tt set b1='ZKKNM' where id=4; -update noar ti set b1='ZKKNM' where id=4; -update noar tt set b2='ULG0UUUE5Z7GVJGAALB6TGTK4' where id=4; -update noar ti set b2='ULG0UUUE5Z7GVJGAALB6TGTK4' where id=4; -update noar tt set b0='DIPOUWJYOMHHDIE6' where id=5; -update noar ti set b0='DIPOUWJYOMHHDIE6' where id=5; -update noar tt set b1='1X1SFHWKJ3NMQX510XRJENT4S' where id=5; -update noar ti set b1='1X1SFHWKJ3NMQX510XRJENT4S' where id=5; -update noar tt set b2='QCBUTH8YUR263U05GNOB5Q' where id=5; -update noar ti set b2='QCBUTH8YUR263U05GNOB5Q' where id=5; -update noar tt set b0='W1ZQ' where id=6; -update noar ti set b0='W1ZQ' where id=6; -update noar tt set b1='7NV0B333' where id=6; -update noar ti set b1='7NV0B333' where id=6; -update noar tt set b2='IF6OH1I4CMIVJ5HQBCKEWA' where id=6; -update noar ti set b2='IF6OH1I4CMIVJ5HQBCKEWA' where id=6; -update noar tt set b0='A1XWKO7' where id=7; -update noar ti set b0='A1XWKO7' where id=7; -update noar tt set b1='26LZNFVSG8P1Y0ZD9PGRV' where id=7; -update noar ti set b1='26LZNFVSG8P1Y0ZD9PGRV' where id=7; -update noar tt set b2='5G6O2RKTG' where id=7; -update noar ti set b2='5G6O2RKTG' where id=7; -update noar tt set b0='FKQV6DP5VRD364PVGTQG48MTQ' where id=8; -update noar ti set b0='FKQV6DP5VRD364PVGTQG48MTQ' where id=8; -update noar tt set b1='14IBLVPMUDIL14GN1' where id=8; -update noar ti set b1='14IBLVPMUDIL14GN1' where id=8; -update noar tt set b2='SX4PM3NPHD638' where id=8; -update noar ti set b2='SX4PM3NPHD638' where id=8; -update noar tt set b0='HLV213O72HW7YRQSGJD5M' where id=9; -update noar ti set b0='HLV213O72HW7YRQSGJD5M' where id=9; -update noar tt set b1='IBQ8NKFYS' where id=9; -update noar ti set b1='IBQ8NKFYS' where id=9; -update noar tt set b2='CJ3AW0YAXK7GZ3NR4V0KNVZGO08HTG' where id=9; -update noar ti set b2='CJ3AW0YAXK7GZ3NR4V0KNVZGO08HTG' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 blob null, - b1 mediumblob null, - b2 text null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='XW0PG070O391K72FDZIS7' where id=1; -update noar ti set b0='XW0PG070O391K72FDZIS7' where id=1; -update noar tt set b1='S' where id=1; -update noar ti set b1='S' where id=1; -update noar tt set b2='KTI8Z92T69FLTCDFN2PARZB5GZY44' where id=1; -update noar ti set b2='KTI8Z92T69FLTCDFN2PARZB5GZY44' where id=1; -update noar tt set b0='ZHF4' where id=2; -update noar ti set b0='ZHF4' where id=2; -update noar tt set b1='UBNUJQRVDRETQRXWOAXTW59G02CB0' where id=2; -update noar ti set b1='UBNUJQRVDRETQRXWOAXTW59G02CB0' where id=2; -update noar tt set b2='805FBNL1W' where id=2; -update noar ti set b2='805FBNL1W' where id=2; -update noar tt set b0='TIZLMT55R8LBU4H6LYJNJC7JBAJZEPK9' where id=3; -update noar ti set b0='TIZLMT55R8LBU4H6LYJNJC7JBAJZEPK9' where id=3; -update noar tt set b1='5P1W37GHJCY' where id=3; -update noar ti set b1='5P1W37GHJCY' where id=3; -update noar tt set b2='UHQ' where id=3; -update noar ti set b2='UHQ' where id=3; -update noar tt set b0='2J1T0B6BXK0T13K' where id=4; -update noar ti set b0='2J1T0B6BXK0T13K' where id=4; -update noar tt set b1='KVFQGXVV2NMWTEW6PORP' where id=4; -update noar ti set b1='KVFQGXVV2NMWTEW6PORP' where id=4; -update noar tt set b2='GC0E5VURDYYC' where id=4; -update noar ti set b2='GC0E5VURDYYC' where id=4; -update noar tt set b0='Y' where id=5; -update noar ti set b0='Y' where id=5; -update noar tt set b1='09MCJ2IEPNZQ302ES9QD6O35EDKJAXU' where id=5; -update noar ti set b1='09MCJ2IEPNZQ302ES9QD6O35EDKJAXU' where id=5; -update noar tt set b2='16YGB78H3H3FXKO8JXLH36QOY8O9LMFT' where id=5; -update noar ti set b2='16YGB78H3H3FXKO8JXLH36QOY8O9LMFT' where id=5; -update noar tt set b0='E9H7' where id=6; -update noar ti set b0='E9H7' where id=6; -update noar tt set b1='782SIPI2PQUIHBKX014RRI' where id=6; -update noar ti set b1='782SIPI2PQUIHBKX014RRI' where id=6; -update noar tt set b2='PKYYVDSWF00V5VDJTEVMFB5SOFPP9' where id=6; -update noar ti set b2='PKYYVDSWF00V5VDJTEVMFB5SOFPP9' where id=6; -update noar tt set b0='LRQSJNM8IJ' where id=7; -update noar ti set b0='LRQSJNM8IJ' where id=7; -update noar tt set b1='7YM0CR7635FYELLOA6N4N155OM7ODA2' where id=7; -update noar ti set b1='7YM0CR7635FYELLOA6N4N155OM7ODA2' where id=7; -update noar tt set b2='52SET7KYZ' where id=7; -update noar ti set b2='52SET7KYZ' where id=7; -update noar tt set b0='QA0WV6' where id=8; -update noar ti set b0='QA0WV6' where id=8; -update noar tt set b1='NOELJ7UF1S1V8F0JX21CN5XVI4UJ490Q' where id=8; -update noar ti set b1='NOELJ7UF1S1V8F0JX21CN5XVI4UJ490Q' where id=8; -update noar tt set b2='1TZ110V6J7BL' where id=8; -update noar ti set b2='1TZ110V6J7BL' where id=8; -update noar tt set b0='864XZ0BNOSHR' where id=9; -update noar ti set b0='864XZ0BNOSHR' where id=9; -update noar tt set b1='ZTYAMK4TO8OMA0KWLV8' where id=9; -update noar ti set b1='ZTYAMK4TO8OMA0KWLV8' where id=9; -update noar tt set b2='C6IFCKRZH7Q9RVXU6C' where id=9; -update noar ti set b2='C6IFCKRZH7Q9RVXU6C' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 blob not null, - b1 mediumblob not null, - b2 text not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='8A3E7GNRJNWH1LICL603SIMW' where id=1; -update noar ti set b0='8A3E7GNRJNWH1LICL603SIMW' where id=1; -update noar tt set b1='L5ZUIANIN7YPH08SF6FACDJ' where id=1; -update noar ti set b1='L5ZUIANIN7YPH08SF6FACDJ' where id=1; -update noar tt set b2='5TT18' where id=1; -update noar ti set b2='5TT18' where id=1; -update noar tt set b0='COZY' where id=2; -update noar ti set b0='COZY' where id=2; -update noar tt set b1='6J29CSX73NBUF4R28PY4CVHAVI26U' where id=2; -update noar ti set b1='6J29CSX73NBUF4R28PY4CVHAVI26U' where id=2; -update noar tt set b2='4NYPYLX6Z100VQFH9Y2E' where id=2; -update noar ti set b2='4NYPYLX6Z100VQFH9Y2E' where id=2; -update noar tt set b0='59CCV5112PZRDB' where id=3; -update noar ti set b0='59CCV5112PZRDB' where id=3; -update noar tt set b1='9QAT315TO4C8N5HNJ0H36FZOJ39JISR' where id=3; -update noar ti set b1='9QAT315TO4C8N5HNJ0H36FZOJ39JISR' where id=3; -update noar tt set b2='E' where id=3; -update noar ti set b2='E' where id=3; -update noar tt set b0='1Z5AGHX' where id=4; -update noar ti set b0='1Z5AGHX' where id=4; -update noar tt set b1='I5MCPCL0HDHW' where id=4; -update noar ti set b1='I5MCPCL0HDHW' where id=4; -update noar tt set b2='BRJWNH91X5TD4Q4CBUIV5HG' where id=4; -update noar ti set b2='BRJWNH91X5TD4Q4CBUIV5HG' where id=4; -update noar tt set b0='ZJ2LCP' where id=5; -update noar ti set b0='ZJ2LCP' where id=5; -update noar tt set b1='9PFOHP58' where id=5; -update noar ti set b1='9PFOHP58' where id=5; -update noar tt set b2='E5D5IM5RZ6' where id=5; -update noar ti set b2='E5D5IM5RZ6' where id=5; -update noar tt set b0='0JI1' where id=6; -update noar ti set b0='0JI1' where id=6; -update noar tt set b1='Q81T' where id=6; -update noar ti set b1='Q81T' where id=6; -update noar tt set b2='HI5SXOMFVM7XSS2VFNAS661' where id=6; -update noar ti set b2='HI5SXOMFVM7XSS2VFNAS661' where id=6; -update noar tt set b0='WKROC99QPP' where id=7; -update noar ti set b0='WKROC99QPP' where id=7; -update noar tt set b1='MJLUQLTA65R9KKD40XB49OOOIR8624' where id=7; -update noar ti set b1='MJLUQLTA65R9KKD40XB49OOOIR8624' where id=7; -update noar tt set b2='84UCRON6EQMN0PCX1I6PYIWK96' where id=7; -update noar ti set b2='84UCRON6EQMN0PCX1I6PYIWK96' where id=7; -update noar tt set b0='3ZX7YSDOSBLK2O3163I' where id=8; -update noar ti set b0='3ZX7YSDOSBLK2O3163I' where id=8; -update noar tt set b1='6ODEIKVWGIBWHCH0ER20A7L' where id=8; -update noar ti set b1='6ODEIKVWGIBWHCH0ER20A7L' where id=8; -update noar tt set b2='6ORJ6ML11Y' where id=8; -update noar ti set b2='6ORJ6ML11Y' where id=8; -update noar tt set b0='DD5PRF62PI' where id=9; -update noar ti set b0='DD5PRF62PI' where id=9; -update noar tt set b1='KM7GBCPJ46P00L' where id=9; -update noar ti set b1='KM7GBCPJ46P00L' where id=9; -update noar tt set b2='V00KLD1QT7R3N81W4YKNV2KAO1ZBZ' where id=9; -update noar ti set b2='V00KLD1QT7R3N81W4YKNV2KAO1ZBZ' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 blob null, - b1 longblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='S9D8CGW60YGMTQMWKRDREED6A5QO' where id=1; -update noar ti set b0='S9D8CGW60YGMTQMWKRDREED6A5QO' where id=1; -update noar tt set b1='NVCBR4MERA08P7131Q3MRU3OCV14S38P' where id=1; -update noar ti set b1='NVCBR4MERA08P7131Q3MRU3OCV14S38P' where id=1; -update noar tt set b2='KLIM06OJPKVKFTUOD1VHGBKL3GR8VRGX' where id=1; -update noar ti set b2='KLIM06OJPKVKFTUOD1VHGBKL3GR8VRGX' where id=1; -update noar tt set b0='SWKR3YCK3UU8WMEU4UC3DBO32ZY0C' where id=2; -update noar ti set b0='SWKR3YCK3UU8WMEU4UC3DBO32ZY0C' where id=2; -update noar tt set b1='SYL2HJYD06L70ERBKTIKFFAI6' where id=2; -update noar ti set b1='SYL2HJYD06L70ERBKTIKFFAI6' where id=2; -update noar tt set b2='CPIVVNQX4TZR' where id=2; -update noar ti set b2='CPIVVNQX4TZR' where id=2; -update noar tt set b0='O6LZEOFE332J' where id=3; -update noar ti set b0='O6LZEOFE332J' where id=3; -update noar tt set b1='6K1TG4' where id=3; -update noar ti set b1='6K1TG4' where id=3; -update noar tt set b2='Y8WRN3DZ7SG60NHPYCQMRZ42S9FV' where id=3; -update noar ti set b2='Y8WRN3DZ7SG60NHPYCQMRZ42S9FV' where id=3; -update noar tt set b0='BPFSXIEV9EE2AXHQY48P' where id=4; -update noar ti set b0='BPFSXIEV9EE2AXHQY48P' where id=4; -update noar tt set b1='4QK0J7786RI3U8GL8' where id=4; -update noar ti set b1='4QK0J7786RI3U8GL8' where id=4; -update noar tt set b2='7BZQ3Y5PQM5545IZ' where id=4; -update noar ti set b2='7BZQ3Y5PQM5545IZ' where id=4; -update noar tt set b0='F9X5Y0PDAZPVSALW7ZG6ORKE' where id=5; -update noar ti set b0='F9X5Y0PDAZPVSALW7ZG6ORKE' where id=5; -update noar tt set b1='RNVNCLSRAZMG4B1ERM1KEI3' where id=5; -update noar ti set b1='RNVNCLSRAZMG4B1ERM1KEI3' where id=5; -update noar tt set b2='DVMQ8L' where id=5; -update noar ti set b2='DVMQ8L' where id=5; -update noar tt set b0='TKLUQHR44TEAJARKF' where id=6; -update noar ti set b0='TKLUQHR44TEAJARKF' where id=6; -update noar tt set b1='AN6T3S7PWCZYMO7J' where id=6; -update noar ti set b1='AN6T3S7PWCZYMO7J' where id=6; -update noar tt set b2='VG7J5A5JM6GSPYP29LLIB4' where id=6; -update noar ti set b2='VG7J5A5JM6GSPYP29LLIB4' where id=6; -update noar tt set b0='8LCRSAMFP8CG984YF7Z' where id=7; -update noar ti set b0='8LCRSAMFP8CG984YF7Z' where id=7; -update noar tt set b1='3YEF6XOJ80V074X' where id=7; -update noar ti set b1='3YEF6XOJ80V074X' where id=7; -update noar tt set b2='4X293VJ' where id=7; -update noar ti set b2='4X293VJ' where id=7; -update noar tt set b0='8V7KDWK7' where id=8; -update noar ti set b0='8V7KDWK7' where id=8; -update noar tt set b1='UGVZ2Y6A' where id=8; -update noar ti set b1='UGVZ2Y6A' where id=8; -update noar tt set b2='TWL2XU3NQ34Y9O' where id=8; -update noar ti set b2='TWL2XU3NQ34Y9O' where id=8; -update noar tt set b0='J8LIS3KDS' where id=9; -update noar ti set b0='J8LIS3KDS' where id=9; -update noar tt set b1='8D2ED4075IL' where id=9; -update noar ti set b1='8D2ED4075IL' where id=9; -update noar tt set b2='33P6MMTEXXA0PQ778QFWBTJ' where id=9; -update noar ti set b2='33P6MMTEXXA0PQ778QFWBTJ' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 blob not null, - b1 longblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='7IZSEFD' where id=1; -update noar ti set b0='7IZSEFD' where id=1; -update noar tt set b1='4GJL9N7FHSIDG61M0XNTZ' where id=1; -update noar ti set b1='4GJL9N7FHSIDG61M0XNTZ' where id=1; -update noar tt set b2='YS9AII1CJDMF' where id=1; -update noar ti set b2='YS9AII1CJDMF' where id=1; -update noar tt set b0='H434P0HTV6OT92R09TQUS' where id=2; -update noar ti set b0='H434P0HTV6OT92R09TQUS' where id=2; -update noar tt set b1='HWW7IR4R5PFSPX' where id=2; -update noar ti set b1='HWW7IR4R5PFSPX' where id=2; -update noar tt set b2='8V51UP8H379U89BKY4BW50T' where id=2; -update noar ti set b2='8V51UP8H379U89BKY4BW50T' where id=2; -update noar tt set b0='3MG9NIUOU90SA8JCYL0V' where id=3; -update noar ti set b0='3MG9NIUOU90SA8JCYL0V' where id=3; -update noar tt set b1='0V1R4520PXY9TMM2CR7SB' where id=3; -update noar ti set b1='0V1R4520PXY9TMM2CR7SB' where id=3; -update noar tt set b2='3VTGYLUQVS41PFOYC4K5' where id=3; -update noar ti set b2='3VTGYLUQVS41PFOYC4K5' where id=3; -update noar tt set b0='UCLRQEJMTV6QFYXTHZ06L6GF' where id=4; -update noar ti set b0='UCLRQEJMTV6QFYXTHZ06L6GF' where id=4; -update noar tt set b1='ICAQ96TZUI32UHDO6NAKL' where id=4; -update noar ti set b1='ICAQ96TZUI32UHDO6NAKL' where id=4; -update noar tt set b2='HN55NKJC45LKROJ1DSTU84C' where id=4; -update noar ti set b2='HN55NKJC45LKROJ1DSTU84C' where id=4; -update noar tt set b0='N8JOW3KH' where id=5; -update noar ti set b0='N8JOW3KH' where id=5; -update noar tt set b1='T7ERDYJXVZ6JW0Z3M' where id=5; -update noar ti set b1='T7ERDYJXVZ6JW0Z3M' where id=5; -update noar tt set b2='EVR9BR8BKLEX50EMD674W1' where id=5; -update noar ti set b2='EVR9BR8BKLEX50EMD674W1' where id=5; -update noar tt set b0='SK0794NV4R7T' where id=6; -update noar ti set b0='SK0794NV4R7T' where id=6; -update noar tt set b1='1V4XK5PFGI1' where id=6; -update noar ti set b1='1V4XK5PFGI1' where id=6; -update noar tt set b2='WF7977XX5Q65S' where id=6; -update noar ti set b2='WF7977XX5Q65S' where id=6; -update noar tt set b0='0LLPSQ3VOIY' where id=7; -update noar ti set b0='0LLPSQ3VOIY' where id=7; -update noar tt set b1='LRDKSH1VM3GUY2LVWUPC4FK64FOA2' where id=7; -update noar ti set b1='LRDKSH1VM3GUY2LVWUPC4FK64FOA2' where id=7; -update noar tt set b2='P4T488LX0D34' where id=7; -update noar ti set b2='P4T488LX0D34' where id=7; -update noar tt set b0='EBQCITCU3W' where id=8; -update noar ti set b0='EBQCITCU3W' where id=8; -update noar tt set b1='A' where id=8; -update noar ti set b1='A' where id=8; -update noar tt set b2='B7' where id=8; -update noar ti set b2='B7' where id=8; -update noar tt set b0='K8KPAL103WSS9PIAL9M70K3W639MPFUY' where id=9; -update noar ti set b0='K8KPAL103WSS9PIAL9M70K3W639MPFUY' where id=9; -update noar tt set b1='CZYNCMLPJBRTATMTQCVQ3J7L94J3R' where id=9; -update noar ti set b1='CZYNCMLPJBRTATMTQCVQ3J7L94J3R' where id=9; -update noar tt set b2='H1KGAR37TJ6GVGWFC6DFYHC6PXE' where id=9; -update noar ti set b2='H1KGAR37TJ6GVGWFC6DFYHC6PXE' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 blob null, - b1 longblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='S6BGCNQML5VSMTO' where id=1; -update noar ti set b0='S6BGCNQML5VSMTO' where id=1; -update noar tt set b1='VD1EVKRC2TFQ1CC6FKCZRYI8' where id=1; -update noar ti set b1='VD1EVKRC2TFQ1CC6FKCZRYI8' where id=1; -update noar tt set b2='X67SI5CDCJVVYCV' where id=1; -update noar ti set b2='X67SI5CDCJVVYCV' where id=1; -update noar tt set b0='68IYT2VTPGU53XUWLB4LQAK' where id=2; -update noar ti set b0='68IYT2VTPGU53XUWLB4LQAK' where id=2; -update noar tt set b1='XOZO8CN6N3' where id=2; -update noar ti set b1='XOZO8CN6N3' where id=2; -update noar tt set b2='PACFQEVFS4B2CZFNFOMYN5Z2' where id=2; -update noar ti set b2='PACFQEVFS4B2CZFNFOMYN5Z2' where id=2; -update noar tt set b0='1X96A1W1Y9907GZTISROBGP' where id=3; -update noar ti set b0='1X96A1W1Y9907GZTISROBGP' where id=3; -update noar tt set b1='4VM' where id=3; -update noar ti set b1='4VM' where id=3; -update noar tt set b2='52Y8Q' where id=3; -update noar ti set b2='52Y8Q' where id=3; -update noar tt set b0='0WOWESWQE6LGRUID7M7C93EVWLXUMYEN' where id=4; -update noar ti set b0='0WOWESWQE6LGRUID7M7C93EVWLXUMYEN' where id=4; -update noar tt set b1='J9B4WWK0LRQ9ET8MMAA' where id=4; -update noar ti set b1='J9B4WWK0LRQ9ET8MMAA' where id=4; -update noar tt set b2='ULGR71U7E70H6DZQ' where id=4; -update noar ti set b2='ULGR71U7E70H6DZQ' where id=4; -update noar tt set b0='4QYK2JM7JX7' where id=5; -update noar ti set b0='4QYK2JM7JX7' where id=5; -update noar tt set b1='C22ZY4W56PJHRKR' where id=5; -update noar ti set b1='C22ZY4W56PJHRKR' where id=5; -update noar tt set b2='C8RW9DEW2Q0DH2IRJJ' where id=5; -update noar ti set b2='C8RW9DEW2Q0DH2IRJJ' where id=5; -update noar tt set b0='82KG51AFJ7RP4ZEEJR7B6IK1M18OG0R1' where id=6; -update noar ti set b0='82KG51AFJ7RP4ZEEJR7B6IK1M18OG0R1' where id=6; -update noar tt set b1='XQP12ZWUTZ13WP8ZT5L' where id=6; -update noar ti set b1='XQP12ZWUTZ13WP8ZT5L' where id=6; -update noar tt set b2='O6KDED44V4SDF25HGK6H9N9B1IYOPYLS' where id=6; -update noar ti set b2='O6KDED44V4SDF25HGK6H9N9B1IYOPYLS' where id=6; -update noar tt set b0='RR5YOKA5L07KO78' where id=7; -update noar ti set b0='RR5YOKA5L07KO78' where id=7; -update noar tt set b1='DWS2FO1AF0YWUPUULKXWH' where id=7; -update noar ti set b1='DWS2FO1AF0YWUPUULKXWH' where id=7; -update noar tt set b2='HBHBYW0M' where id=7; -update noar ti set b2='HBHBYW0M' where id=7; -update noar tt set b0='KT17UQ5YLCA829XDOP4VDICS' where id=8; -update noar ti set b0='KT17UQ5YLCA829XDOP4VDICS' where id=8; -update noar tt set b1='HF6X3YCI9LCT5GPP8KTMYH63WI' where id=8; -update noar ti set b1='HF6X3YCI9LCT5GPP8KTMYH63WI' where id=8; -update noar tt set b2='WV3HEI8VOTJ9BYWON1LDPT4E' where id=8; -update noar ti set b2='WV3HEI8VOTJ9BYWON1LDPT4E' where id=8; -update noar tt set b0='2EOX3GK1TWM74' where id=9; -update noar ti set b0='2EOX3GK1TWM74' where id=9; -update noar tt set b1='T' where id=9; -update noar ti set b1='T' where id=9; -update noar tt set b2='NIYO3ETGFOO3B' where id=9; -update noar ti set b2='NIYO3ETGFOO3B' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 blob not null, - b1 longblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='0O5V16R4A5DALWQDBH5RQKD8X08GI4' where id=1; -update noar ti set b0='0O5V16R4A5DALWQDBH5RQKD8X08GI4' where id=1; -update noar tt set b1='D6L6LAGOD4311SH9' where id=1; -update noar ti set b1='D6L6LAGOD4311SH9' where id=1; -update noar tt set b2='JP58UA92HK6VLBUXHOVG62K4S4' where id=1; -update noar ti set b2='JP58UA92HK6VLBUXHOVG62K4S4' where id=1; -update noar tt set b0='XH' where id=2; -update noar ti set b0='XH' where id=2; -update noar tt set b1='VF6FH7OU' where id=2; -update noar ti set b1='VF6FH7OU' where id=2; -update noar tt set b2='4B34ABOY1LEM2Q7VQYA1AG50S1' where id=2; -update noar ti set b2='4B34ABOY1LEM2Q7VQYA1AG50S1' where id=2; -update noar tt set b0='QQ' where id=3; -update noar ti set b0='QQ' where id=3; -update noar tt set b1='618U8RXFJ01SV' where id=3; -update noar ti set b1='618U8RXFJ01SV' where id=3; -update noar tt set b2='0CBTO' where id=3; -update noar ti set b2='0CBTO' where id=3; -update noar tt set b0='59MT12LIVYGU705D8' where id=4; -update noar ti set b0='59MT12LIVYGU705D8' where id=4; -update noar tt set b1='WGBTAYK4GEJBPZC41Z3C85' where id=4; -update noar ti set b1='WGBTAYK4GEJBPZC41Z3C85' where id=4; -update noar tt set b2='S6' where id=4; -update noar ti set b2='S6' where id=4; -update noar tt set b0='KR0DUUTWSZCL2OJT0XIYDYT' where id=5; -update noar ti set b0='KR0DUUTWSZCL2OJT0XIYDYT' where id=5; -update noar tt set b1='5' where id=5; -update noar ti set b1='5' where id=5; -update noar tt set b2='YG9' where id=5; -update noar ti set b2='YG9' where id=5; -update noar tt set b0='REFVO3MHK1GJZQQAAKE' where id=6; -update noar ti set b0='REFVO3MHK1GJZQQAAKE' where id=6; -update noar tt set b1='F0DCOBO00MT8HZ' where id=6; -update noar ti set b1='F0DCOBO00MT8HZ' where id=6; -update noar tt set b2='E7AG8DSHYH8' where id=6; -update noar ti set b2='E7AG8DSHYH8' where id=6; -update noar tt set b0='BI0CX22WA4D' where id=7; -update noar ti set b0='BI0CX22WA4D' where id=7; -update noar tt set b1='R96V1S' where id=7; -update noar ti set b1='R96V1S' where id=7; -update noar tt set b2='JBLZKZXNWX21TJLET97XQ0K' where id=7; -update noar ti set b2='JBLZKZXNWX21TJLET97XQ0K' where id=7; -update noar tt set b0='K2KV2' where id=8; -update noar ti set b0='K2KV2' where id=8; -update noar tt set b1='7HTCOWTR9L3HQUY4OU5SA7' where id=8; -update noar ti set b1='7HTCOWTR9L3HQUY4OU5SA7' where id=8; -update noar tt set b2='2PZW8Y' where id=8; -update noar ti set b2='2PZW8Y' where id=8; -update noar tt set b0='JEO' where id=9; -update noar ti set b0='JEO' where id=9; -update noar tt set b1='9BQQX' where id=9; -update noar ti set b1='9BQQX' where id=9; -update noar tt set b2='KCRXVZNI72E022VFZME7ESUL' where id=9; -update noar ti set b2='KCRXVZNI72E022VFZME7ESUL' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 blob null, - b1 longblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='Z9DRIG2' where id=1; -update noar ti set b0='Z9DRIG2' where id=1; -update noar tt set b1='59RW2H' where id=1; -update noar ti set b1='59RW2H' where id=1; -update noar tt set b2='ZAFZPRWT' where id=1; -update noar ti set b2='ZAFZPRWT' where id=1; -update noar tt set b0='DRHEAF' where id=2; -update noar ti set b0='DRHEAF' where id=2; -update noar tt set b1='8IJPRLI86NV7MSSTP3S4' where id=2; -update noar ti set b1='8IJPRLI86NV7MSSTP3S4' where id=2; -update noar tt set b2='XISFCCV64GTIND6K3FGFEF1M4M' where id=2; -update noar ti set b2='XISFCCV64GTIND6K3FGFEF1M4M' where id=2; -update noar tt set b0='B6LZN46M309RX510TN0DZQSC49C83RT' where id=3; -update noar ti set b0='B6LZN46M309RX510TN0DZQSC49C83RT' where id=3; -update noar tt set b1='6W3357AR8SM9276W5Q03' where id=3; -update noar ti set b1='6W3357AR8SM9276W5Q03' where id=3; -update noar tt set b2='O1Y1YU1Q17QHYYHIA8L5O' where id=3; -update noar ti set b2='O1Y1YU1Q17QHYYHIA8L5O' where id=3; -update noar tt set b0='1OK0VTISQKQX' where id=4; -update noar ti set b0='1OK0VTISQKQX' where id=4; -update noar tt set b1='N8QVL' where id=4; -update noar ti set b1='N8QVL' where id=4; -update noar tt set b2='GAKWM18ZYD92YY0SFPISSW' where id=4; -update noar ti set b2='GAKWM18ZYD92YY0SFPISSW' where id=4; -update noar tt set b0='2JB1OQJLFEOE80KAEX5TMXED' where id=5; -update noar ti set b0='2JB1OQJLFEOE80KAEX5TMXED' where id=5; -update noar tt set b1='I3EAL2Y40NRP6C5EE9Y7VHKCX0H3O9A' where id=5; -update noar ti set b1='I3EAL2Y40NRP6C5EE9Y7VHKCX0H3O9A' where id=5; -update noar tt set b2='H2SDNMO7VWVZECEO57M41U0748SV1S' where id=5; -update noar ti set b2='H2SDNMO7VWVZECEO57M41U0748SV1S' where id=5; -update noar tt set b0='RK3WZ8QHQ3H73IUKKMQ' where id=6; -update noar ti set b0='RK3WZ8QHQ3H73IUKKMQ' where id=6; -update noar tt set b1='NDYVM09MKNQ1AFLZ6JFXSN69R9HV' where id=6; -update noar ti set b1='NDYVM09MKNQ1AFLZ6JFXSN69R9HV' where id=6; -update noar tt set b2='8UCX79SYBO0X8' where id=6; -update noar ti set b2='8UCX79SYBO0X8' where id=6; -update noar tt set b0='Z6G' where id=7; -update noar ti set b0='Z6G' where id=7; -update noar tt set b1='T' where id=7; -update noar ti set b1='T' where id=7; -update noar tt set b2='ILF218J65OX74' where id=7; -update noar ti set b2='ILF218J65OX74' where id=7; -update noar tt set b0='FTYIY590VAJY0616MBDOC7Q' where id=8; -update noar ti set b0='FTYIY590VAJY0616MBDOC7Q' where id=8; -update noar tt set b1='II7YNFI2SXTLYADNGM9W91' where id=8; -update noar ti set b1='II7YNFI2SXTLYADNGM9W91' where id=8; -update noar tt set b2='WYSX1ZJZ69CLFZGE2OO1K9BNZ' where id=8; -update noar ti set b2='WYSX1ZJZ69CLFZGE2OO1K9BNZ' where id=8; -update noar tt set b0='70VICVAIWLJOZRY5XFCLRYG' where id=9; -update noar ti set b0='70VICVAIWLJOZRY5XFCLRYG' where id=9; -update noar tt set b1='HA41' where id=9; -update noar ti set b1='HA41' where id=9; -update noar tt set b2='LJN5OANDXOAWWYE8P5L4T6DLXV' where id=9; -update noar ti set b2='LJN5OANDXOAWWYE8P5L4T6DLXV' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 blob not null, - b1 longblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='IGFPUXUTPHXORPXDS9PZDB' where id=1; -update noar ti set b0='IGFPUXUTPHXORPXDS9PZDB' where id=1; -update noar tt set b1='3UUEPV5RDZB90S' where id=1; -update noar ti set b1='3UUEPV5RDZB90S' where id=1; -update noar tt set b2='7' where id=1; -update noar ti set b2='7' where id=1; -update noar tt set b0='EQK99PG8CYOJQ5RIRRX7TQCS' where id=2; -update noar ti set b0='EQK99PG8CYOJQ5RIRRX7TQCS' where id=2; -update noar tt set b1='MD' where id=2; -update noar ti set b1='MD' where id=2; -update noar tt set b2='EJ51C9I' where id=2; -update noar ti set b2='EJ51C9I' where id=2; -update noar tt set b0='CDD' where id=3; -update noar ti set b0='CDD' where id=3; -update noar tt set b1='VGPPO49NP8E4MUV0W3' where id=3; -update noar ti set b1='VGPPO49NP8E4MUV0W3' where id=3; -update noar tt set b2='9BQBGZ5E6DGQ5AZJYAMKN3GX' where id=3; -update noar ti set b2='9BQBGZ5E6DGQ5AZJYAMKN3GX' where id=3; -update noar tt set b0='MC5C6EKTD4HB7ZUF3' where id=4; -update noar ti set b0='MC5C6EKTD4HB7ZUF3' where id=4; -update noar tt set b1='BT2D0BK11557' where id=4; -update noar ti set b1='BT2D0BK11557' where id=4; -update noar tt set b2='A3BH399UBJ3JPMJ' where id=4; -update noar ti set b2='A3BH399UBJ3JPMJ' where id=4; -update noar tt set b0='48820CW4C7P7LWG' where id=5; -update noar ti set b0='48820CW4C7P7LWG' where id=5; -update noar tt set b1='LKNWTC1XWMX15NI7C7AQR9T' where id=5; -update noar ti set b1='LKNWTC1XWMX15NI7C7AQR9T' where id=5; -update noar tt set b2='TXO4L8OSFV3YPT' where id=5; -update noar ti set b2='TXO4L8OSFV3YPT' where id=5; -update noar tt set b0='I303F0E8UJRK6H8YHH70EPEIK' where id=6; -update noar ti set b0='I303F0E8UJRK6H8YHH70EPEIK' where id=6; -update noar tt set b1='2M4D2Q6XEA2OL4Z9KO4VB' where id=6; -update noar ti set b1='2M4D2Q6XEA2OL4Z9KO4VB' where id=6; -update noar tt set b2='ZMOUB7ETM94F719ULVOB1HG4AL3PP' where id=6; -update noar ti set b2='ZMOUB7ETM94F719ULVOB1HG4AL3PP' where id=6; -update noar tt set b0='GSL6NOHLUIPLJF6DM81UZQUN73XZP' where id=7; -update noar ti set b0='GSL6NOHLUIPLJF6DM81UZQUN73XZP' where id=7; -update noar tt set b1='ZHITRPU6JETS90OH' where id=7; -update noar ti set b1='ZHITRPU6JETS90OH' where id=7; -update noar tt set b2='0GVVNAK1K7DW7CBYZ9Z77H1' where id=7; -update noar ti set b2='0GVVNAK1K7DW7CBYZ9Z77H1' where id=7; -update noar tt set b0='PYXSEUBVM1ELYZO634W4AEDBXKW9WR' where id=8; -update noar ti set b0='PYXSEUBVM1ELYZO634W4AEDBXKW9WR' where id=8; -update noar tt set b1='GW465TWLHZB52' where id=8; -update noar ti set b1='GW465TWLHZB52' where id=8; -update noar tt set b2='QX41Q57G8ZNW8M9JV3WGR4SC6K' where id=8; -update noar ti set b2='QX41Q57G8ZNW8M9JV3WGR4SC6K' where id=8; -update noar tt set b0='ZCARQTAIX15MNWZRD9V7BYXEBS' where id=9; -update noar ti set b0='ZCARQTAIX15MNWZRD9V7BYXEBS' where id=9; -update noar tt set b1='00OFNNG1B0' where id=9; -update noar ti set b1='00OFNNG1B0' where id=9; -update noar tt set b2='X' where id=9; -update noar ti set b2='X' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 blob null, - b1 longblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='RV4HLLCLNSEZBKOOROTQSDA5' where id=1; -update noar ti set b0='RV4HLLCLNSEZBKOOROTQSDA5' where id=1; -update noar tt set b1='OSJ5BTRV3D' where id=1; -update noar ti set b1='OSJ5BTRV3D' where id=1; -update noar tt set b2='ZXFRGMI' where id=1; -update noar ti set b2='ZXFRGMI' where id=1; -update noar tt set b0='OKD966601VZDTT4QJREZ2Z0EW4TF' where id=2; -update noar ti set b0='OKD966601VZDTT4QJREZ2Z0EW4TF' where id=2; -update noar tt set b1='Z1' where id=2; -update noar ti set b1='Z1' where id=2; -update noar tt set b2='DBW0' where id=2; -update noar ti set b2='DBW0' where id=2; -update noar tt set b0='LTUVFUI6K8MEJGR39OB' where id=3; -update noar ti set b0='LTUVFUI6K8MEJGR39OB' where id=3; -update noar tt set b1='4E6OI5IG99V8H68NV13' where id=3; -update noar ti set b1='4E6OI5IG99V8H68NV13' where id=3; -update noar tt set b2='RT6LPPT36V9JDZMFJGXIAYW34H0EE' where id=3; -update noar ti set b2='RT6LPPT36V9JDZMFJGXIAYW34H0EE' where id=3; -update noar tt set b0='74JUQ5ARCZ' where id=4; -update noar ti set b0='74JUQ5ARCZ' where id=4; -update noar tt set b1='Z7BW2' where id=4; -update noar ti set b1='Z7BW2' where id=4; -update noar tt set b2='EMZH0U' where id=4; -update noar ti set b2='EMZH0U' where id=4; -update noar tt set b0='60V7CY06Z' where id=5; -update noar ti set b0='60V7CY06Z' where id=5; -update noar tt set b1='TAEP7THUV2OCI533QOA4NU3AQSAX2' where id=5; -update noar ti set b1='TAEP7THUV2OCI533QOA4NU3AQSAX2' where id=5; -update noar tt set b2='74' where id=5; -update noar ti set b2='74' where id=5; -update noar tt set b0='QPV50ZSO6P5VDHMCK7EB2E1' where id=6; -update noar ti set b0='QPV50ZSO6P5VDHMCK7EB2E1' where id=6; -update noar tt set b1='B3O9FWA9XMVTMAB3COZBB4ZDQTMRLVR5' where id=6; -update noar ti set b1='B3O9FWA9XMVTMAB3COZBB4ZDQTMRLVR5' where id=6; -update noar tt set b2='48DES2TG9T31KZA615CWY802H35' where id=6; -update noar ti set b2='48DES2TG9T31KZA615CWY802H35' where id=6; -update noar tt set b0='ZWZD85HMA4WLB' where id=7; -update noar ti set b0='ZWZD85HMA4WLB' where id=7; -update noar tt set b1='HFVM9E6AKPKJR80QEK1VNN6LA' where id=7; -update noar ti set b1='HFVM9E6AKPKJR80QEK1VNN6LA' where id=7; -update noar tt set b2='MUSG' where id=7; -update noar ti set b2='MUSG' where id=7; -update noar tt set b0='H1PHGFV745FIURX2L' where id=8; -update noar ti set b0='H1PHGFV745FIURX2L' where id=8; -update noar tt set b1='KXNAZMARY6PEWFPD1TU' where id=8; -update noar ti set b1='KXNAZMARY6PEWFPD1TU' where id=8; -update noar tt set b2='IR274' where id=8; -update noar ti set b2='IR274' where id=8; -update noar tt set b0='6B1HS' where id=9; -update noar ti set b0='6B1HS' where id=9; -update noar tt set b1='UWSHKJCUSXC4TUNN73MW1LXBKK1VXE' where id=9; -update noar ti set b1='UWSHKJCUSXC4TUNN73MW1LXBKK1VXE' where id=9; -update noar tt set b2='ENGXWAL5H3' where id=9; -update noar ti set b2='ENGXWAL5H3' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 blob not null, - b1 longblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='I65YP8Q6RMOPP1' where id=1; -update noar ti set b0='I65YP8Q6RMOPP1' where id=1; -update noar tt set b1='A6S5VGN45FOYI2WH08ZIUUNS' where id=1; -update noar ti set b1='A6S5VGN45FOYI2WH08ZIUUNS' where id=1; -update noar tt set b2='D' where id=1; -update noar ti set b2='D' where id=1; -update noar tt set b0='3VVR' where id=2; -update noar ti set b0='3VVR' where id=2; -update noar tt set b1='YJ166H' where id=2; -update noar ti set b1='YJ166H' where id=2; -update noar tt set b2='YQL8AUSTOTDZFC5X1L75488DWHTYD' where id=2; -update noar ti set b2='YQL8AUSTOTDZFC5X1L75488DWHTYD' where id=2; -update noar tt set b0='9WXXI59' where id=3; -update noar ti set b0='9WXXI59' where id=3; -update noar tt set b1='43UCYDP6' where id=3; -update noar ti set b1='43UCYDP6' where id=3; -update noar tt set b2='44DJIDPX6X' where id=3; -update noar ti set b2='44DJIDPX6X' where id=3; -update noar tt set b0='X9EM2Q7DN6XA9EYTMKON9LES7' where id=4; -update noar ti set b0='X9EM2Q7DN6XA9EYTMKON9LES7' where id=4; -update noar tt set b1='YB8D3BOZ80HWSU1MESE05NTECJJAN6' where id=4; -update noar ti set b1='YB8D3BOZ80HWSU1MESE05NTECJJAN6' where id=4; -update noar tt set b2='FXL1UX9BB5LWE48O9F956ZRBE1S1SVA' where id=4; -update noar ti set b2='FXL1UX9BB5LWE48O9F956ZRBE1S1SVA' where id=4; -update noar tt set b0='10KPQ' where id=5; -update noar ti set b0='10KPQ' where id=5; -update noar tt set b1='GY0POJ8NM3J061AFL' where id=5; -update noar ti set b1='GY0POJ8NM3J061AFL' where id=5; -update noar tt set b2='104SXWP9IT9NNPA518U' where id=5; -update noar ti set b2='104SXWP9IT9NNPA518U' where id=5; -update noar tt set b0='LRKHUZ1X' where id=6; -update noar ti set b0='LRKHUZ1X' where id=6; -update noar tt set b1='GB' where id=6; -update noar ti set b1='GB' where id=6; -update noar tt set b2='6OLMUD' where id=6; -update noar ti set b2='6OLMUD' where id=6; -update noar tt set b0='121LKKWOJF0GK5J5MFZ7TG6U' where id=7; -update noar ti set b0='121LKKWOJF0GK5J5MFZ7TG6U' where id=7; -update noar tt set b1='2HH' where id=7; -update noar ti set b1='2HH' where id=7; -update noar tt set b2='QLBB99UECVAL0AGMINQK8YFH8' where id=7; -update noar ti set b2='QLBB99UECVAL0AGMINQK8YFH8' where id=7; -update noar tt set b0='1JLLP564VGPC1NSC4MO' where id=8; -update noar ti set b0='1JLLP564VGPC1NSC4MO' where id=8; -update noar tt set b1='V0RBCUR9R7ERSVEX' where id=8; -update noar ti set b1='V0RBCUR9R7ERSVEX' where id=8; -update noar tt set b2='UYYO7EG7XEF4PA6' where id=8; -update noar ti set b2='UYYO7EG7XEF4PA6' where id=8; -update noar tt set b0='Z1KLG' where id=9; -update noar ti set b0='Z1KLG' where id=9; -update noar tt set b1='G31ZEHD8RYC' where id=9; -update noar ti set b1='G31ZEHD8RYC' where id=9; -update noar tt set b2='0EOG74086EN49' where id=9; -update noar ti set b2='0EOG74086EN49' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 blob null, - b1 longblob null, - b2 text null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='ND3WYA' where id=1; -update noar ti set b0='ND3WYA' where id=1; -update noar tt set b1='O0WNNIJXSCQL0KNGXT4AHUCS9NNLWJ' where id=1; -update noar ti set b1='O0WNNIJXSCQL0KNGXT4AHUCS9NNLWJ' where id=1; -update noar tt set b2='LN6H5B6' where id=1; -update noar ti set b2='LN6H5B6' where id=1; -update noar tt set b0='G5HP1ZNNSX' where id=2; -update noar ti set b0='G5HP1ZNNSX' where id=2; -update noar tt set b1='C567L66GSSVNQL1D8UHVOZKLGWA9C' where id=2; -update noar ti set b1='C567L66GSSVNQL1D8UHVOZKLGWA9C' where id=2; -update noar tt set b2='85MHG8F3FUPGJKHEC' where id=2; -update noar ti set b2='85MHG8F3FUPGJKHEC' where id=2; -update noar tt set b0='T2ZH0DDO35XS3P1K' where id=3; -update noar ti set b0='T2ZH0DDO35XS3P1K' where id=3; -update noar tt set b1='RD5Y7CJ2TK6NRSPGNFTDJ3UX3J' where id=3; -update noar ti set b1='RD5Y7CJ2TK6NRSPGNFTDJ3UX3J' where id=3; -update noar tt set b2='78HFOQGARPMT790A' where id=3; -update noar ti set b2='78HFOQGARPMT790A' where id=3; -update noar tt set b0='A1008GD7MFMG0ZMP8CFZ0910FOXYZNA2' where id=4; -update noar ti set b0='A1008GD7MFMG0ZMP8CFZ0910FOXYZNA2' where id=4; -update noar tt set b1='Z8PY55DXURH15XSJBZ5O2SBT8K9B' where id=4; -update noar ti set b1='Z8PY55DXURH15XSJBZ5O2SBT8K9B' where id=4; -update noar tt set b2='R9ZKAJ69OL0KUFMXARKW4NWHWK' where id=4; -update noar ti set b2='R9ZKAJ69OL0KUFMXARKW4NWHWK' where id=4; -update noar tt set b0='DZK70UFCTD' where id=5; -update noar ti set b0='DZK70UFCTD' where id=5; -update noar tt set b1='L48I5RC2EA2TVF' where id=5; -update noar ti set b1='L48I5RC2EA2TVF' where id=5; -update noar tt set b2='1IOM92TI8BDNQEUMWWS' where id=5; -update noar ti set b2='1IOM92TI8BDNQEUMWWS' where id=5; -update noar tt set b0='PDO' where id=6; -update noar ti set b0='PDO' where id=6; -update noar tt set b1='WWH9Y6YZVMT56' where id=6; -update noar ti set b1='WWH9Y6YZVMT56' where id=6; -update noar tt set b2='2Z20PMRNSKD0BV38EITE6OOVD1Z8CQIN' where id=6; -update noar ti set b2='2Z20PMRNSKD0BV38EITE6OOVD1Z8CQIN' where id=6; -update noar tt set b0='CV4UQ523CL9UZUSJX88OXXU9J' where id=7; -update noar ti set b0='CV4UQ523CL9UZUSJX88OXXU9J' where id=7; -update noar tt set b1='RTNVM4KHK5OAMMRMOBSN' where id=7; -update noar ti set b1='RTNVM4KHK5OAMMRMOBSN' where id=7; -update noar tt set b2='K1KDUQ1TJP04Z2G48' where id=7; -update noar ti set b2='K1KDUQ1TJP04Z2G48' where id=7; -update noar tt set b0='GS4QQFS5F5PHTZEDCY95OIWVRCFCFA' where id=8; -update noar ti set b0='GS4QQFS5F5PHTZEDCY95OIWVRCFCFA' where id=8; -update noar tt set b1='NNM0V2MZUM76Y1JLHB2UQLXIPU0016' where id=8; -update noar ti set b1='NNM0V2MZUM76Y1JLHB2UQLXIPU0016' where id=8; -update noar tt set b2='O14734HMEVI' where id=8; -update noar ti set b2='O14734HMEVI' where id=8; -update noar tt set b0='JK0GUW' where id=9; -update noar ti set b0='JK0GUW' where id=9; -update noar tt set b1='D9UEO2TCB1NTVJUQNSMSO7O' where id=9; -update noar ti set b1='D9UEO2TCB1NTVJUQNSMSO7O' where id=9; -update noar tt set b2='5GWVO7U0DHDK69Y2H053EE' where id=9; -update noar ti set b2='5GWVO7U0DHDK69Y2H053EE' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 blob not null, - b1 longblob not null, - b2 text not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='A6JGJ5JYDYG9M1D5ZY1G5X8LBK' where id=1; -update noar ti set b0='A6JGJ5JYDYG9M1D5ZY1G5X8LBK' where id=1; -update noar tt set b1='3CNMX8YH9BGGVEHS4CE' where id=1; -update noar ti set b1='3CNMX8YH9BGGVEHS4CE' where id=1; -update noar tt set b2='ZUA' where id=1; -update noar ti set b2='ZUA' where id=1; -update noar tt set b0='JJVUTKSYA4' where id=2; -update noar ti set b0='JJVUTKSYA4' where id=2; -update noar tt set b1='EDPEUCVHKFNP4IL2UE3' where id=2; -update noar ti set b1='EDPEUCVHKFNP4IL2UE3' where id=2; -update noar tt set b2='O2KVM93RDC4WGYV7LZ05G8B3N4E7X' where id=2; -update noar ti set b2='O2KVM93RDC4WGYV7LZ05G8B3N4E7X' where id=2; -update noar tt set b0='0T4JUDAIU' where id=3; -update noar ti set b0='0T4JUDAIU' where id=3; -update noar tt set b1='B0X21O' where id=3; -update noar ti set b1='B0X21O' where id=3; -update noar tt set b2='UXE1HG7IFDKNVRKB' where id=3; -update noar ti set b2='UXE1HG7IFDKNVRKB' where id=3; -update noar tt set b0='0QSQOR5Y2T93MAPCVPS2ZV' where id=4; -update noar ti set b0='0QSQOR5Y2T93MAPCVPS2ZV' where id=4; -update noar tt set b1='5U334HV76C0F3YGNF8GKLCF4BZ08QR' where id=4; -update noar ti set b1='5U334HV76C0F3YGNF8GKLCF4BZ08QR' where id=4; -update noar tt set b2='M113B8LRIMZOZX0G' where id=4; -update noar ti set b2='M113B8LRIMZOZX0G' where id=4; -update noar tt set b0='V4ZINFU59S' where id=5; -update noar ti set b0='V4ZINFU59S' where id=5; -update noar tt set b1='G6LJC9P5LLWJV9ANSPSQPPPAWYHGON' where id=5; -update noar ti set b1='G6LJC9P5LLWJV9ANSPSQPPPAWYHGON' where id=5; -update noar tt set b2='KZFNNN85SCLW4LFM458TII7NNK' where id=5; -update noar ti set b2='KZFNNN85SCLW4LFM458TII7NNK' where id=5; -update noar tt set b0='R0' where id=6; -update noar ti set b0='R0' where id=6; -update noar tt set b1='BA4KGZFQEBLX2XRD1QOR' where id=6; -update noar ti set b1='BA4KGZFQEBLX2XRD1QOR' where id=6; -update noar tt set b2='X2XC3F94D' where id=6; -update noar ti set b2='X2XC3F94D' where id=6; -update noar tt set b0='2YRLUJK6SLF3XC7M' where id=7; -update noar ti set b0='2YRLUJK6SLF3XC7M' where id=7; -update noar tt set b1='J2NT4C7PLLBGEDU3GOMEU6JP' where id=7; -update noar ti set b1='J2NT4C7PLLBGEDU3GOMEU6JP' where id=7; -update noar tt set b2='6JO97FFNJHTQMCC2AM01G3F4D0A9XXUW' where id=7; -update noar ti set b2='6JO97FFNJHTQMCC2AM01G3F4D0A9XXUW' where id=7; -update noar tt set b0='4QLZZPL3DNR22B3LX3XC85K5' where id=8; -update noar ti set b0='4QLZZPL3DNR22B3LX3XC85K5' where id=8; -update noar tt set b1='8C1MDIF7N0' where id=8; -update noar ti set b1='8C1MDIF7N0' where id=8; -update noar tt set b2='6YXGDYIXWAJP2LI2MI6Q0' where id=8; -update noar ti set b2='6YXGDYIXWAJP2LI2MI6Q0' where id=8; -update noar tt set b0='5WH4145AGVDBEG3BHV4JYMMF' where id=9; -update noar ti set b0='5WH4145AGVDBEG3BHV4JYMMF' where id=9; -update noar tt set b1='QNR4O6DPU' where id=9; -update noar ti set b1='QNR4O6DPU' where id=9; -update noar tt set b2='HFLXU8R1G' where id=9; -update noar ti set b2='HFLXU8R1G' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 blob null, - b1 text null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='B1EUCR' where id=1; -update noar ti set b0='B1EUCR' where id=1; -update noar tt set b1='VKU0K8YVVJ1M1DI79BEYHB0ZW' where id=1; -update noar ti set b1='VKU0K8YVVJ1M1DI79BEYHB0ZW' where id=1; -update noar tt set b2='YH88B551C' where id=1; -update noar ti set b2='YH88B551C' where id=1; -update noar tt set b0='9X67O7K6W2EYW4' where id=2; -update noar ti set b0='9X67O7K6W2EYW4' where id=2; -update noar tt set b1='9GYG9F44' where id=2; -update noar ti set b1='9GYG9F44' where id=2; -update noar tt set b2='JDOAQ6KUC5CMFR03CM' where id=2; -update noar ti set b2='JDOAQ6KUC5CMFR03CM' where id=2; -update noar tt set b0='9CPHQ7B8Z3' where id=3; -update noar ti set b0='9CPHQ7B8Z3' where id=3; -update noar tt set b1='2TVWNIGSVHZLJ' where id=3; -update noar ti set b1='2TVWNIGSVHZLJ' where id=3; -update noar tt set b2='VQR6C5W17KDJ2L32' where id=3; -update noar ti set b2='VQR6C5W17KDJ2L32' where id=3; -update noar tt set b0='TV2' where id=4; -update noar ti set b0='TV2' where id=4; -update noar tt set b1='JN415DV9HPR8PLHX61HJ7GG092' where id=4; -update noar ti set b1='JN415DV9HPR8PLHX61HJ7GG092' where id=4; -update noar tt set b2='1UO' where id=4; -update noar ti set b2='1UO' where id=4; -update noar tt set b0='XTPCW9609D79KN7TU' where id=5; -update noar ti set b0='XTPCW9609D79KN7TU' where id=5; -update noar tt set b1='JKMU2DGEMAB' where id=5; -update noar ti set b1='JKMU2DGEMAB' where id=5; -update noar tt set b2='S3O716HW0MFK6CSLDIIP3YYCXXA' where id=5; -update noar ti set b2='S3O716HW0MFK6CSLDIIP3YYCXXA' where id=5; -update noar tt set b0='VP3F77ZOTLX0' where id=6; -update noar ti set b0='VP3F77ZOTLX0' where id=6; -update noar tt set b1='WFFD8W3B4C9SYSH2VDJFT64V' where id=6; -update noar ti set b1='WFFD8W3B4C9SYSH2VDJFT64V' where id=6; -update noar tt set b2='D3VR83F2X8X5PPVOKT' where id=6; -update noar ti set b2='D3VR83F2X8X5PPVOKT' where id=6; -update noar tt set b0='YRIZ03REJNJHGSZS7NBVCVXKW' where id=7; -update noar ti set b0='YRIZ03REJNJHGSZS7NBVCVXKW' where id=7; -update noar tt set b1='U2P9IPQ85ADK' where id=7; -update noar ti set b1='U2P9IPQ85ADK' where id=7; -update noar tt set b2='F74G2GNZ' where id=7; -update noar ti set b2='F74G2GNZ' where id=7; -update noar tt set b0='0120V4BYBR' where id=8; -update noar ti set b0='0120V4BYBR' where id=8; -update noar tt set b1='7496AO8CA9ZAJIX8CJEYAGGIXGST4' where id=8; -update noar ti set b1='7496AO8CA9ZAJIX8CJEYAGGIXGST4' where id=8; -update noar tt set b2='FZZ8MZCTVE8AQN3162GABOPRJ9C6T' where id=8; -update noar ti set b2='FZZ8MZCTVE8AQN3162GABOPRJ9C6T' where id=8; -update noar tt set b0='IR4G6VQBK8DLV6' where id=9; -update noar ti set b0='IR4G6VQBK8DLV6' where id=9; -update noar tt set b1='157A149HUF2MJVOBRTSB3A' where id=9; -update noar ti set b1='157A149HUF2MJVOBRTSB3A' where id=9; -update noar tt set b2='ESD9EIVNV2G3MK9Z86SC13ZSMICFXUA' where id=9; -update noar ti set b2='ESD9EIVNV2G3MK9Z86SC13ZSMICFXUA' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 blob not null, - b1 text not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='T4RZHTYOV92D077ZVD43JFF' where id=1; -update noar ti set b0='T4RZHTYOV92D077ZVD43JFF' where id=1; -update noar tt set b1='TQFD' where id=1; -update noar ti set b1='TQFD' where id=1; -update noar tt set b2='A' where id=1; -update noar ti set b2='A' where id=1; -update noar tt set b0='XHRCV97MTPE21A16TGZJ' where id=2; -update noar ti set b0='XHRCV97MTPE21A16TGZJ' where id=2; -update noar tt set b1='5BPP1' where id=2; -update noar ti set b1='5BPP1' where id=2; -update noar tt set b2='YZE70KE20TX4OZGW' where id=2; -update noar ti set b2='YZE70KE20TX4OZGW' where id=2; -update noar tt set b0='S9Z7D1A7OSZI58RJ21WYHDBMBAWK' where id=3; -update noar ti set b0='S9Z7D1A7OSZI58RJ21WYHDBMBAWK' where id=3; -update noar tt set b1='UGKFG7Y5YMQF0D1NQGCVJNEUS' where id=3; -update noar ti set b1='UGKFG7Y5YMQF0D1NQGCVJNEUS' where id=3; -update noar tt set b2='Y' where id=3; -update noar ti set b2='Y' where id=3; -update noar tt set b0='DRJ6HDNKW' where id=4; -update noar ti set b0='DRJ6HDNKW' where id=4; -update noar tt set b1='ILT47' where id=4; -update noar ti set b1='ILT47' where id=4; -update noar tt set b2='QQMJQGI7EV2C51MJ75VIF10N6' where id=4; -update noar ti set b2='QQMJQGI7EV2C51MJ75VIF10N6' where id=4; -update noar tt set b0='FAZB86899K4' where id=5; -update noar ti set b0='FAZB86899K4' where id=5; -update noar tt set b1='GCHLZYZPY8QJ60W' where id=5; -update noar ti set b1='GCHLZYZPY8QJ60W' where id=5; -update noar tt set b2='98O8PX' where id=5; -update noar ti set b2='98O8PX' where id=5; -update noar tt set b0='S' where id=6; -update noar ti set b0='S' where id=6; -update noar tt set b1='RSRBLPT172OA5SXM' where id=6; -update noar ti set b1='RSRBLPT172OA5SXM' where id=6; -update noar tt set b2='ZTCQAVC1TYKN938RLJCGNJ' where id=6; -update noar ti set b2='ZTCQAVC1TYKN938RLJCGNJ' where id=6; -update noar tt set b0='YFT9WPF81' where id=7; -update noar ti set b0='YFT9WPF81' where id=7; -update noar tt set b1='EF4E9DUGS3UWKLIM150G' where id=7; -update noar ti set b1='EF4E9DUGS3UWKLIM150G' where id=7; -update noar tt set b2='RW3EYE3UGWS' where id=7; -update noar ti set b2='RW3EYE3UGWS' where id=7; -update noar tt set b0='P' where id=8; -update noar ti set b0='P' where id=8; -update noar tt set b1='CG9P7SYZCK0MMHYZRO' where id=8; -update noar ti set b1='CG9P7SYZCK0MMHYZRO' where id=8; -update noar tt set b2='2FBGWQ8S6BRIK23BF3AZ4ODUDQBX' where id=8; -update noar ti set b2='2FBGWQ8S6BRIK23BF3AZ4ODUDQBX' where id=8; -update noar tt set b0='5HDPAV2625DUZ3IWP17M4XOUC' where id=9; -update noar ti set b0='5HDPAV2625DUZ3IWP17M4XOUC' where id=9; -update noar tt set b1='D5' where id=9; -update noar ti set b1='D5' where id=9; -update noar tt set b2='Z62O27HTVQ8EP7I' where id=9; -update noar ti set b2='Z62O27HTVQ8EP7I' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 blob null, - b1 text null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='HA1HIAMV2HH' where id=1; -update noar ti set b0='HA1HIAMV2HH' where id=1; -update noar tt set b1='45EX2GGUMF6882GXEWHEAH4T7K8T6LH' where id=1; -update noar ti set b1='45EX2GGUMF6882GXEWHEAH4T7K8T6LH' where id=1; -update noar tt set b2='KEIQI2K' where id=1; -update noar ti set b2='KEIQI2K' where id=1; -update noar tt set b0='ARTUUP4SGQK77PH9I' where id=2; -update noar ti set b0='ARTUUP4SGQK77PH9I' where id=2; -update noar tt set b1='JFGHH15' where id=2; -update noar ti set b1='JFGHH15' where id=2; -update noar tt set b2='4W7BS4VZC02701' where id=2; -update noar ti set b2='4W7BS4VZC02701' where id=2; -update noar tt set b0='QDUL0ORSDP' where id=3; -update noar ti set b0='QDUL0ORSDP' where id=3; -update noar tt set b1='7FOK3YA' where id=3; -update noar ti set b1='7FOK3YA' where id=3; -update noar tt set b2='7J1B4IB5WCXU5S3JL7CUNQGF1' where id=3; -update noar ti set b2='7J1B4IB5WCXU5S3JL7CUNQGF1' where id=3; -update noar tt set b0='HX7UFX4SMJZ1QVHYQBY' where id=4; -update noar ti set b0='HX7UFX4SMJZ1QVHYQBY' where id=4; -update noar tt set b1='O9M' where id=4; -update noar ti set b1='O9M' where id=4; -update noar tt set b2='8ULWYUKC8H6Q9CIY8PLNKG9Z988AO' where id=4; -update noar ti set b2='8ULWYUKC8H6Q9CIY8PLNKG9Z988AO' where id=4; -update noar tt set b0='WEGH8P35N6G6K' where id=5; -update noar ti set b0='WEGH8P35N6G6K' where id=5; -update noar tt set b1='N' where id=5; -update noar ti set b1='N' where id=5; -update noar tt set b2='LYMBO5R67XEDQ641CUCXJ' where id=5; -update noar ti set b2='LYMBO5R67XEDQ641CUCXJ' where id=5; -update noar tt set b0='112IOFAN' where id=6; -update noar ti set b0='112IOFAN' where id=6; -update noar tt set b1='MSGCHV0NCZ7ZP74KIIARPW0P96FJGUO' where id=6; -update noar ti set b1='MSGCHV0NCZ7ZP74KIIARPW0P96FJGUO' where id=6; -update noar tt set b2='56F' where id=6; -update noar ti set b2='56F' where id=6; -update noar tt set b0='WSC6E7Q2Y3ZTVF6QVOQ' where id=7; -update noar ti set b0='WSC6E7Q2Y3ZTVF6QVOQ' where id=7; -update noar tt set b1='TJ6HKNWSOSLM0EEN5EL' where id=7; -update noar ti set b1='TJ6HKNWSOSLM0EEN5EL' where id=7; -update noar tt set b2='T9W9HDQTZG1I82HW6DGCWXMVS4FC' where id=7; -update noar ti set b2='T9W9HDQTZG1I82HW6DGCWXMVS4FC' where id=7; -update noar tt set b0='53ZT4AD' where id=8; -update noar ti set b0='53ZT4AD' where id=8; -update noar tt set b1='P1GGPXU5WFC43718F5O4O' where id=8; -update noar ti set b1='P1GGPXU5WFC43718F5O4O' where id=8; -update noar tt set b2='MVHG2E' where id=8; -update noar ti set b2='MVHG2E' where id=8; -update noar tt set b0='I5BL2WISRM5EVQJRVV84WXO57T4N' where id=9; -update noar ti set b0='I5BL2WISRM5EVQJRVV84WXO57T4N' where id=9; -update noar tt set b1='FYYJ0J3YKDDUYD7PWQCAM' where id=9; -update noar ti set b1='FYYJ0J3YKDDUYD7PWQCAM' where id=9; -update noar tt set b2='XRNJSJNUOPHMJ0H1W0QTME19' where id=9; -update noar ti set b2='XRNJSJNUOPHMJ0H1W0QTME19' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 blob not null, - b1 text not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='8EGO5L81728RPV4062RFW871PJYU9' where id=1; -update noar ti set b0='8EGO5L81728RPV4062RFW871PJYU9' where id=1; -update noar tt set b1='NX8UVM1AYN3CNYWRMJ2Y02Z0CNR5YS' where id=1; -update noar ti set b1='NX8UVM1AYN3CNYWRMJ2Y02Z0CNR5YS' where id=1; -update noar tt set b2='Y12LXQQ' where id=1; -update noar ti set b2='Y12LXQQ' where id=1; -update noar tt set b0='0BVQ7MB38GA' where id=2; -update noar ti set b0='0BVQ7MB38GA' where id=2; -update noar tt set b1='C01ZDY' where id=2; -update noar ti set b1='C01ZDY' where id=2; -update noar tt set b2='SETD4N39CHLM318H5E1WLWX' where id=2; -update noar ti set b2='SETD4N39CHLM318H5E1WLWX' where id=2; -update noar tt set b0='HA2LVP7NDKTXO1HHY3KAWQAIW' where id=3; -update noar ti set b0='HA2LVP7NDKTXO1HHY3KAWQAIW' where id=3; -update noar tt set b1='E9TWBDPA' where id=3; -update noar ti set b1='E9TWBDPA' where id=3; -update noar tt set b2='31' where id=3; -update noar ti set b2='31' where id=3; -update noar tt set b0='N1RBV1E57FFZMECMYPVBQCMCL57T6X' where id=4; -update noar ti set b0='N1RBV1E57FFZMECMYPVBQCMCL57T6X' where id=4; -update noar tt set b1='TN4OXKOF9NANKFX' where id=4; -update noar ti set b1='TN4OXKOF9NANKFX' where id=4; -update noar tt set b2='D21Q8HTGK' where id=4; -update noar ti set b2='D21Q8HTGK' where id=4; -update noar tt set b0='FHJ22A160B62SM72QI' where id=5; -update noar ti set b0='FHJ22A160B62SM72QI' where id=5; -update noar tt set b1='2BG2W7FF30EWYUS' where id=5; -update noar ti set b1='2BG2W7FF30EWYUS' where id=5; -update noar tt set b2='9VI9BG5VTQBZKGTLIOXUKE' where id=5; -update noar ti set b2='9VI9BG5VTQBZKGTLIOXUKE' where id=5; -update noar tt set b0='0ACIBLG2ISBH7U0' where id=6; -update noar ti set b0='0ACIBLG2ISBH7U0' where id=6; -update noar tt set b1='TP6FONDAL2KJVOM2NVMD5M3G' where id=6; -update noar ti set b1='TP6FONDAL2KJVOM2NVMD5M3G' where id=6; -update noar tt set b2='KC' where id=6; -update noar ti set b2='KC' where id=6; -update noar tt set b0='3A8GWSCW78AMUF' where id=7; -update noar ti set b0='3A8GWSCW78AMUF' where id=7; -update noar tt set b1='DV9QLRMQNQS' where id=7; -update noar ti set b1='DV9QLRMQNQS' where id=7; -update noar tt set b2='HOIUMKDXKZFBB6211T' where id=7; -update noar ti set b2='HOIUMKDXKZFBB6211T' where id=7; -update noar tt set b0='6P' where id=8; -update noar ti set b0='6P' where id=8; -update noar tt set b1='Y4MJE9N6CTPU2QIUHKD4SR7VQZK8S81' where id=8; -update noar ti set b1='Y4MJE9N6CTPU2QIUHKD4SR7VQZK8S81' where id=8; -update noar tt set b2='8BLLILMS7MI02V6RRQQDPWEE' where id=8; -update noar ti set b2='8BLLILMS7MI02V6RRQQDPWEE' where id=8; -update noar tt set b0='05HGJ2ZTCPITH5I18CTSP1' where id=9; -update noar ti set b0='05HGJ2ZTCPITH5I18CTSP1' where id=9; -update noar tt set b1='NVTJO9JHT3BCDGFVML9MNO' where id=9; -update noar ti set b1='NVTJO9JHT3BCDGFVML9MNO' where id=9; -update noar tt set b2='I6LVEERZ3J6E8' where id=9; -update noar ti set b2='I6LVEERZ3J6E8' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 blob null, - b1 text null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='UDJ5W3RPHI02CA' where id=1; -update noar ti set b0='UDJ5W3RPHI02CA' where id=1; -update noar tt set b1='IWKOODAOFT4RS5T6E6YF6FM7GWK' where id=1; -update noar ti set b1='IWKOODAOFT4RS5T6E6YF6FM7GWK' where id=1; -update noar tt set b2='0HUQAGALI' where id=1; -update noar ti set b2='0HUQAGALI' where id=1; -update noar tt set b0='UIQZ18K5FC02J2LU' where id=2; -update noar ti set b0='UIQZ18K5FC02J2LU' where id=2; -update noar tt set b1='DEK6BPTJ' where id=2; -update noar ti set b1='DEK6BPTJ' where id=2; -update noar tt set b2='F2H7NWIDZL9AWYZ4JQ0XMG3FB' where id=2; -update noar ti set b2='F2H7NWIDZL9AWYZ4JQ0XMG3FB' where id=2; -update noar tt set b0='Z8D1C4J6IC7NY7OKY5AB43FSKSMBSXXF' where id=3; -update noar ti set b0='Z8D1C4J6IC7NY7OKY5AB43FSKSMBSXXF' where id=3; -update noar tt set b1='VR0P9KPR510FU9QSTFEH4' where id=3; -update noar ti set b1='VR0P9KPR510FU9QSTFEH4' where id=3; -update noar tt set b2='I6UMQ59YSDFJ4LO4543VV2L' where id=3; -update noar ti set b2='I6UMQ59YSDFJ4LO4543VV2L' where id=3; -update noar tt set b0='R6YPBQ2OV5AT22VENGQO4GOJ' where id=4; -update noar ti set b0='R6YPBQ2OV5AT22VENGQO4GOJ' where id=4; -update noar tt set b1='XJ0TAIIVXJNDE2J836SE7' where id=4; -update noar ti set b1='XJ0TAIIVXJNDE2J836SE7' where id=4; -update noar tt set b2='1OQ73M' where id=4; -update noar ti set b2='1OQ73M' where id=4; -update noar tt set b0='LVE5T9HMVMI5HWMHTWZU5YY3VH' where id=5; -update noar ti set b0='LVE5T9HMVMI5HWMHTWZU5YY3VH' where id=5; -update noar tt set b1='FEA8YTBLNJU258GUGUJ70GV9B' where id=5; -update noar ti set b1='FEA8YTBLNJU258GUGUJ70GV9B' where id=5; -update noar tt set b2='P9TAHRCDJ2K69XF1NL1' where id=5; -update noar ti set b2='P9TAHRCDJ2K69XF1NL1' where id=5; -update noar tt set b0='VWED1OTEDB62D6JJ66' where id=6; -update noar ti set b0='VWED1OTEDB62D6JJ66' where id=6; -update noar tt set b1='1M8JPPLK1OT5PUL7TW2L1MX32NXCXD' where id=6; -update noar ti set b1='1M8JPPLK1OT5PUL7TW2L1MX32NXCXD' where id=6; -update noar tt set b2='CPIKRKHJKGCPQUGK1672HN' where id=6; -update noar ti set b2='CPIKRKHJKGCPQUGK1672HN' where id=6; -update noar tt set b0='O7TZFIEFB0ZTFFZ6EU9A7L2PNX' where id=7; -update noar ti set b0='O7TZFIEFB0ZTFFZ6EU9A7L2PNX' where id=7; -update noar tt set b1='YXTJ9S5VW2KD09D2B9Z7S8AW7RQW9NQE' where id=7; -update noar ti set b1='YXTJ9S5VW2KD09D2B9Z7S8AW7RQW9NQE' where id=7; -update noar tt set b2='NRLTOPISL5NGANN' where id=7; -update noar ti set b2='NRLTOPISL5NGANN' where id=7; -update noar tt set b0='11BPELVZ6JV8NUGFMK2YO' where id=8; -update noar ti set b0='11BPELVZ6JV8NUGFMK2YO' where id=8; -update noar tt set b1='BENH3OXMOT40J' where id=8; -update noar ti set b1='BENH3OXMOT40J' where id=8; -update noar tt set b2='QWQ5UMZB0Q80AG3Q0UZDTF63YK8S8J5' where id=8; -update noar ti set b2='QWQ5UMZB0Q80AG3Q0UZDTF63YK8S8J5' where id=8; -update noar tt set b0='T2' where id=9; -update noar ti set b0='T2' where id=9; -update noar tt set b1='5VMBH0X6340U4E9UA95L1NSUDRSD' where id=9; -update noar ti set b1='5VMBH0X6340U4E9UA95L1NSUDRSD' where id=9; -update noar tt set b2='07XICTUD4CK6XTTEC2JDV' where id=9; -update noar ti set b2='07XICTUD4CK6XTTEC2JDV' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 blob not null, - b1 text not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='EDZTEJZONZLOLHZDY' where id=1; -update noar ti set b0='EDZTEJZONZLOLHZDY' where id=1; -update noar tt set b1='W3B52JOBRQUFLE7R' where id=1; -update noar ti set b1='W3B52JOBRQUFLE7R' where id=1; -update noar tt set b2='Z4ALPLU' where id=1; -update noar ti set b2='Z4ALPLU' where id=1; -update noar tt set b0='I2DO4X2E08E6NKCN7' where id=2; -update noar ti set b0='I2DO4X2E08E6NKCN7' where id=2; -update noar tt set b1='1ABP' where id=2; -update noar ti set b1='1ABP' where id=2; -update noar tt set b2='CT8Y369UVG1S015BRQOIYA' where id=2; -update noar ti set b2='CT8Y369UVG1S015BRQOIYA' where id=2; -update noar tt set b0='VAPEDI' where id=3; -update noar ti set b0='VAPEDI' where id=3; -update noar tt set b1='J4GLCT0A04SL' where id=3; -update noar ti set b1='J4GLCT0A04SL' where id=3; -update noar tt set b2='CPLUX8JR8BXT' where id=3; -update noar ti set b2='CPLUX8JR8BXT' where id=3; -update noar tt set b0='STGMGI3F1SMIT4FGGHLJ' where id=4; -update noar ti set b0='STGMGI3F1SMIT4FGGHLJ' where id=4; -update noar tt set b1='ZIVAR7XEOSZ2' where id=4; -update noar ti set b1='ZIVAR7XEOSZ2' where id=4; -update noar tt set b2='M5SIDWZ0BQQ048S7JKR74F8' where id=4; -update noar ti set b2='M5SIDWZ0BQQ048S7JKR74F8' where id=4; -update noar tt set b0='EW2RE7WEXNG4QBNZMVWD' where id=5; -update noar ti set b0='EW2RE7WEXNG4QBNZMVWD' where id=5; -update noar tt set b1='SM0RIHD7BN771MC56JYDE1PIHHWEV' where id=5; -update noar ti set b1='SM0RIHD7BN771MC56JYDE1PIHHWEV' where id=5; -update noar tt set b2='2ZCP4' where id=5; -update noar ti set b2='2ZCP4' where id=5; -update noar tt set b0='F8LZUXTWNUJHIB9JAQPC' where id=6; -update noar ti set b0='F8LZUXTWNUJHIB9JAQPC' where id=6; -update noar tt set b1='U' where id=6; -update noar ti set b1='U' where id=6; -update noar tt set b2='EVJPU4C94LR9' where id=6; -update noar ti set b2='EVJPU4C94LR9' where id=6; -update noar tt set b0='7QOMWZPD1QR63NZ9LAC96IZY6CO8154T' where id=7; -update noar ti set b0='7QOMWZPD1QR63NZ9LAC96IZY6CO8154T' where id=7; -update noar tt set b1='BKRGK9UL' where id=7; -update noar ti set b1='BKRGK9UL' where id=7; -update noar tt set b2='WHJQS5A' where id=7; -update noar ti set b2='WHJQS5A' where id=7; -update noar tt set b0='J820YVR6DJK7SQ9EW6XV9H045I1D2' where id=8; -update noar ti set b0='J820YVR6DJK7SQ9EW6XV9H045I1D2' where id=8; -update noar tt set b1='6E4O0ES2BJ5YRG24X' where id=8; -update noar ti set b1='6E4O0ES2BJ5YRG24X' where id=8; -update noar tt set b2='A46S4C7PIWHDL4YV' where id=8; -update noar ti set b2='A46S4C7PIWHDL4YV' where id=8; -update noar tt set b0='5D5D' where id=9; -update noar ti set b0='5D5D' where id=9; -update noar tt set b1='L1DP8MN2K' where id=9; -update noar ti set b1='L1DP8MN2K' where id=9; -update noar tt set b2='1WU6NWLJCALZUG0H5AX9W9YPL6PMSM2' where id=9; -update noar ti set b2='1WU6NWLJCALZUG0H5AX9W9YPL6PMSM2' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 blob null, - b1 text null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='W3IA19UIZY1KC751B' where id=1; -update noar ti set b0='W3IA19UIZY1KC751B' where id=1; -update noar tt set b1='E5HC1LONEX9AZ65D0AAISY99RHT' where id=1; -update noar ti set b1='E5HC1LONEX9AZ65D0AAISY99RHT' where id=1; -update noar tt set b2='X5NGFGVUUJQHLFUHMTMPFDZ9J' where id=1; -update noar ti set b2='X5NGFGVUUJQHLFUHMTMPFDZ9J' where id=1; -update noar tt set b0='52UJSV3' where id=2; -update noar ti set b0='52UJSV3' where id=2; -update noar tt set b1='L37XA72ODF426OEHTEC' where id=2; -update noar ti set b1='L37XA72ODF426OEHTEC' where id=2; -update noar tt set b2='F0F9M43TNV8UIB' where id=2; -update noar ti set b2='F0F9M43TNV8UIB' where id=2; -update noar tt set b0='SZ5SSAIW9QPDS5Y' where id=3; -update noar ti set b0='SZ5SSAIW9QPDS5Y' where id=3; -update noar tt set b1='TUNEO04475K426O4I6' where id=3; -update noar ti set b1='TUNEO04475K426O4I6' where id=3; -update noar tt set b2='NIETHOR663IPECZR8U9UUBU1VG6EBDK' where id=3; -update noar ti set b2='NIETHOR663IPECZR8U9UUBU1VG6EBDK' where id=3; -update noar tt set b0='U3C53R' where id=4; -update noar ti set b0='U3C53R' where id=4; -update noar tt set b1='1P3WNES2T32XMGOYHIUC755TP' where id=4; -update noar ti set b1='1P3WNES2T32XMGOYHIUC755TP' where id=4; -update noar tt set b2='6UAHCBWF2JBOPM' where id=4; -update noar ti set b2='6UAHCBWF2JBOPM' where id=4; -update noar tt set b0='J0AG2NX' where id=5; -update noar ti set b0='J0AG2NX' where id=5; -update noar tt set b1='W' where id=5; -update noar ti set b1='W' where id=5; -update noar tt set b2='9X0G5J' where id=5; -update noar ti set b2='9X0G5J' where id=5; -update noar tt set b0='80OCZLO2X8A5VVDWOH1' where id=6; -update noar ti set b0='80OCZLO2X8A5VVDWOH1' where id=6; -update noar tt set b1='4PULS' where id=6; -update noar ti set b1='4PULS' where id=6; -update noar tt set b2='54BV' where id=6; -update noar ti set b2='54BV' where id=6; -update noar tt set b0='IQYR2839P0VA35JB69GABVJE' where id=7; -update noar ti set b0='IQYR2839P0VA35JB69GABVJE' where id=7; -update noar tt set b1='X4WV9QNADO' where id=7; -update noar ti set b1='X4WV9QNADO' where id=7; -update noar tt set b2='E0W9' where id=7; -update noar ti set b2='E0W9' where id=7; -update noar tt set b0='GNSUWQ85FIPJANX58RFZ1PY1PT8' where id=8; -update noar ti set b0='GNSUWQ85FIPJANX58RFZ1PY1PT8' where id=8; -update noar tt set b1='JSTLNO9ZCBWPRBYXYXFKF5EJX936YS' where id=8; -update noar ti set b1='JSTLNO9ZCBWPRBYXYXFKF5EJX936YS' where id=8; -update noar tt set b2='XFFW' where id=8; -update noar ti set b2='XFFW' where id=8; -update noar tt set b0='20BGNJ' where id=9; -update noar ti set b0='20BGNJ' where id=9; -update noar tt set b1='DL8A3XINIRN44W275IA' where id=9; -update noar ti set b1='DL8A3XINIRN44W275IA' where id=9; -update noar tt set b2='K16' where id=9; -update noar ti set b2='K16' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 blob not null, - b1 text not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='YAI1RJVG5HVWK2DOOTFI' where id=1; -update noar ti set b0='YAI1RJVG5HVWK2DOOTFI' where id=1; -update noar tt set b1='7F9NKS90DULKGW' where id=1; -update noar ti set b1='7F9NKS90DULKGW' where id=1; -update noar tt set b2='LZD1WD' where id=1; -update noar ti set b2='LZD1WD' where id=1; -update noar tt set b0='T8RY05QML9R2JAAAC0ZS' where id=2; -update noar ti set b0='T8RY05QML9R2JAAAC0ZS' where id=2; -update noar tt set b1='NUHRN3200BKNTEF9KGHIC00KL6455S' where id=2; -update noar ti set b1='NUHRN3200BKNTEF9KGHIC00KL6455S' where id=2; -update noar tt set b2='VKG2SP1O' where id=2; -update noar ti set b2='VKG2SP1O' where id=2; -update noar tt set b0='M45XTWC67ERX6' where id=3; -update noar ti set b0='M45XTWC67ERX6' where id=3; -update noar tt set b1='7T3A3OZM6L8CZ618LR445W72EEOCW7' where id=3; -update noar ti set b1='7T3A3OZM6L8CZ618LR445W72EEOCW7' where id=3; -update noar tt set b2='UQRWCK4ON8EOULPQFO2ST' where id=3; -update noar ti set b2='UQRWCK4ON8EOULPQFO2ST' where id=3; -update noar tt set b0='3J9X4TSW9OASS7XE4L' where id=4; -update noar ti set b0='3J9X4TSW9OASS7XE4L' where id=4; -update noar tt set b1='20HQSVWXEL585YIMX1N' where id=4; -update noar ti set b1='20HQSVWXEL585YIMX1N' where id=4; -update noar tt set b2='6G' where id=4; -update noar ti set b2='6G' where id=4; -update noar tt set b0='VE' where id=5; -update noar ti set b0='VE' where id=5; -update noar tt set b1='P2K9F0PI0I' where id=5; -update noar ti set b1='P2K9F0PI0I' where id=5; -update noar tt set b2='O957F' where id=5; -update noar ti set b2='O957F' where id=5; -update noar tt set b0='2ZAGNW74LF62AI0Q0MIUFUENHMVQE' where id=6; -update noar ti set b0='2ZAGNW74LF62AI0Q0MIUFUENHMVQE' where id=6; -update noar tt set b1='BHVD6PM' where id=6; -update noar ti set b1='BHVD6PM' where id=6; -update noar tt set b2='0TUXEQ1' where id=6; -update noar ti set b2='0TUXEQ1' where id=6; -update noar tt set b0='WE178WBM64YFNA0VR8R72' where id=7; -update noar ti set b0='WE178WBM64YFNA0VR8R72' where id=7; -update noar tt set b1='CEOBRM8B5RJPJIOWG5J201BX4H' where id=7; -update noar ti set b1='CEOBRM8B5RJPJIOWG5J201BX4H' where id=7; -update noar tt set b2='8OFITYK0IFVKCEYEEC' where id=7; -update noar ti set b2='8OFITYK0IFVKCEYEEC' where id=7; -update noar tt set b0='55N14DB5S1ZPLBF8YCK6DQBD1AU' where id=8; -update noar ti set b0='55N14DB5S1ZPLBF8YCK6DQBD1AU' where id=8; -update noar tt set b1='CE8CUTQ8T' where id=8; -update noar ti set b1='CE8CUTQ8T' where id=8; -update noar tt set b2='R44PRV4S8UJJVCFEY6OUD72' where id=8; -update noar ti set b2='R44PRV4S8UJJVCFEY6OUD72' where id=8; -update noar tt set b0='HT3BB1NSR1WYIWD7R2NKB' where id=9; -update noar ti set b0='HT3BB1NSR1WYIWD7R2NKB' where id=9; -update noar tt set b1='1V1AYK88R4B77I2' where id=9; -update noar ti set b1='1V1AYK88R4B77I2' where id=9; -update noar tt set b2='OL0F' where id=9; -update noar ti set b2='OL0F' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 blob null, - b1 text null, - b2 text null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='BG2X' where id=1; -update noar ti set b0='BG2X' where id=1; -update noar tt set b1='UY6IKKOSWBTTL2VW00' where id=1; -update noar ti set b1='UY6IKKOSWBTTL2VW00' where id=1; -update noar tt set b2='NF7WJICX71U' where id=1; -update noar ti set b2='NF7WJICX71U' where id=1; -update noar tt set b0='VHD07HKZCKMCOQ2E2UP' where id=2; -update noar ti set b0='VHD07HKZCKMCOQ2E2UP' where id=2; -update noar tt set b1='63WNHJM' where id=2; -update noar ti set b1='63WNHJM' where id=2; -update noar tt set b2='UNUV7RTG3CR0190G94TRQ0WPYG' where id=2; -update noar ti set b2='UNUV7RTG3CR0190G94TRQ0WPYG' where id=2; -update noar tt set b0='QG' where id=3; -update noar ti set b0='QG' where id=3; -update noar tt set b1='WZ0' where id=3; -update noar ti set b1='WZ0' where id=3; -update noar tt set b2='IVJNO9' where id=3; -update noar ti set b2='IVJNO9' where id=3; -update noar tt set b0='CGL' where id=4; -update noar ti set b0='CGL' where id=4; -update noar tt set b1='SULWDBXVXPT7UTR51' where id=4; -update noar ti set b1='SULWDBXVXPT7UTR51' where id=4; -update noar tt set b2='YTIG5IC9V19N6BKH7SK7MPKCDJ60YYCI' where id=4; -update noar ti set b2='YTIG5IC9V19N6BKH7SK7MPKCDJ60YYCI' where id=4; -update noar tt set b0='D2J9TR4KJH3VUF4KPQVXS0H687DUODC' where id=5; -update noar ti set b0='D2J9TR4KJH3VUF4KPQVXS0H687DUODC' where id=5; -update noar tt set b1='8JGAWQGIZG' where id=5; -update noar ti set b1='8JGAWQGIZG' where id=5; -update noar tt set b2='DTWP3ROISNNVRIQ8GJ1GT0' where id=5; -update noar ti set b2='DTWP3ROISNNVRIQ8GJ1GT0' where id=5; -update noar tt set b0='X9KK4D8' where id=6; -update noar ti set b0='X9KK4D8' where id=6; -update noar tt set b1='1D5WN511SYYH1U6R1Y82' where id=6; -update noar ti set b1='1D5WN511SYYH1U6R1Y82' where id=6; -update noar tt set b2='U1' where id=6; -update noar ti set b2='U1' where id=6; -update noar tt set b0='PVK9HKH22ZN' where id=7; -update noar ti set b0='PVK9HKH22ZN' where id=7; -update noar tt set b1='S6TGWWSYE9JNT16' where id=7; -update noar ti set b1='S6TGWWSYE9JNT16' where id=7; -update noar tt set b2='W48ZH6UD1N1W95' where id=7; -update noar ti set b2='W48ZH6UD1N1W95' where id=7; -update noar tt set b0='F9RERUVB0D' where id=8; -update noar ti set b0='F9RERUVB0D' where id=8; -update noar tt set b1='TKQS9USU7ZO6PDMSOXA9' where id=8; -update noar ti set b1='TKQS9USU7ZO6PDMSOXA9' where id=8; -update noar tt set b2='7' where id=8; -update noar ti set b2='7' where id=8; -update noar tt set b0='BO7H134KVBQJ' where id=9; -update noar ti set b0='BO7H134KVBQJ' where id=9; -update noar tt set b1='EQXK7T8KGWIVKGLHKYQLVZ4VYUOA1' where id=9; -update noar ti set b1='EQXK7T8KGWIVKGLHKYQLVZ4VYUOA1' where id=9; -update noar tt set b2='9R0K9R32A1NXM7PVO' where id=9; -update noar ti set b2='9R0K9R32A1NXM7PVO' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 blob not null, - b1 text not null, - b2 text not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='6YJIUM3DXU5L88YZDGUK3Y4PI5R7' where id=1; -update noar ti set b0='6YJIUM3DXU5L88YZDGUK3Y4PI5R7' where id=1; -update noar tt set b1='WC89MCBB' where id=1; -update noar ti set b1='WC89MCBB' where id=1; -update noar tt set b2='RO44MTP21CU27' where id=1; -update noar ti set b2='RO44MTP21CU27' where id=1; -update noar tt set b0='HN9DXG0IU5WOFZO1Y3BJR9W' where id=2; -update noar ti set b0='HN9DXG0IU5WOFZO1Y3BJR9W' where id=2; -update noar tt set b1='XBN68N8' where id=2; -update noar ti set b1='XBN68N8' where id=2; -update noar tt set b2='3WG4Z' where id=2; -update noar ti set b2='3WG4Z' where id=2; -update noar tt set b0='R6Z546BGZ9YCCC6NGJ75ZV73QZ2' where id=3; -update noar ti set b0='R6Z546BGZ9YCCC6NGJ75ZV73QZ2' where id=3; -update noar tt set b1='OX8IO1YEL' where id=3; -update noar ti set b1='OX8IO1YEL' where id=3; -update noar tt set b2='2CV' where id=3; -update noar ti set b2='2CV' where id=3; -update noar tt set b0='NR45N4L93KTP91NT8XXE' where id=4; -update noar ti set b0='NR45N4L93KTP91NT8XXE' where id=4; -update noar tt set b1='OU7ER9' where id=4; -update noar ti set b1='OU7ER9' where id=4; -update noar tt set b2='DYU92F9A4NW230YJ3KZ20SI23' where id=4; -update noar ti set b2='DYU92F9A4NW230YJ3KZ20SI23' where id=4; -update noar tt set b0='TMBV' where id=5; -update noar ti set b0='TMBV' where id=5; -update noar tt set b1='2C0QQZE' where id=5; -update noar ti set b1='2C0QQZE' where id=5; -update noar tt set b2='2GCGV48N9OXXOM03HUGRDN' where id=5; -update noar ti set b2='2GCGV48N9OXXOM03HUGRDN' where id=5; -update noar tt set b0='75DRF204E30BJUAM67Z7JUW8CHIH4RK' where id=6; -update noar ti set b0='75DRF204E30BJUAM67Z7JUW8CHIH4RK' where id=6; -update noar tt set b1='HSZMFUUO5U2MU' where id=6; -update noar ti set b1='HSZMFUUO5U2MU' where id=6; -update noar tt set b2='0WGW88OQZBIX32MVN3EDUXF0' where id=6; -update noar ti set b2='0WGW88OQZBIX32MVN3EDUXF0' where id=6; -update noar tt set b0='PZL6E' where id=7; -update noar ti set b0='PZL6E' where id=7; -update noar tt set b1='2LC5JHCES1XOJE42QZCJ44ANKR0S' where id=7; -update noar ti set b1='2LC5JHCES1XOJE42QZCJ44ANKR0S' where id=7; -update noar tt set b2='4M20PZCX5GXE84L1L173OA8J5B' where id=7; -update noar ti set b2='4M20PZCX5GXE84L1L173OA8J5B' where id=7; -update noar tt set b0='OUUCMWSID2GYBV6IHR69' where id=8; -update noar ti set b0='OUUCMWSID2GYBV6IHR69' where id=8; -update noar tt set b1='MUVOME2X' where id=8; -update noar ti set b1='MUVOME2X' where id=8; -update noar tt set b2='SD9' where id=8; -update noar ti set b2='SD9' where id=8; -update noar tt set b0='2L1DV5DJU' where id=9; -update noar ti set b0='2L1DV5DJU' where id=9; -update noar tt set b1='1R5K1GNYARBRPEWQSU5' where id=9; -update noar ti set b1='1R5K1GNYARBRPEWQSU5' where id=9; -update noar tt set b2='13YB' where id=9; -update noar ti set b2='13YB' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 mediumblob null, - b1 tinyblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='126ME164I4' where id=1; -update noar ti set b0='126ME164I4' where id=1; -update noar tt set b1='5NI66P9XPXF0LMIPFBMO5OA5X1PF6SFW' where id=1; -update noar ti set b1='5NI66P9XPXF0LMIPFBMO5OA5X1PF6SFW' where id=1; -update noar tt set b2='8YF8TEGHBTFDVJEIKTWARSDFGAW7REVD' where id=1; -update noar ti set b2='8YF8TEGHBTFDVJEIKTWARSDFGAW7REVD' where id=1; -update noar tt set b0='SBSQERN72IRK8MD4D58UDJK7IMHQ' where id=2; -update noar ti set b0='SBSQERN72IRK8MD4D58UDJK7IMHQ' where id=2; -update noar tt set b1='B3BXCV3T' where id=2; -update noar ti set b1='B3BXCV3T' where id=2; -update noar tt set b2='IYCJVFA32U57A9JS1M8EY3YF0V7K' where id=2; -update noar ti set b2='IYCJVFA32U57A9JS1M8EY3YF0V7K' where id=2; -update noar tt set b0='VHLMO42D04HF7LDU54BHCYNHUG2ASE' where id=3; -update noar ti set b0='VHLMO42D04HF7LDU54BHCYNHUG2ASE' where id=3; -update noar tt set b1='USJ' where id=3; -update noar ti set b1='USJ' where id=3; -update noar tt set b2='EDI2X7Y2P33G1LEQLCQDFAJ2WFR3Z' where id=3; -update noar ti set b2='EDI2X7Y2P33G1LEQLCQDFAJ2WFR3Z' where id=3; -update noar tt set b0='B75PU0T58A30P91UMPPBEM6G3LD7' where id=4; -update noar ti set b0='B75PU0T58A30P91UMPPBEM6G3LD7' where id=4; -update noar tt set b1='4P4JMLBO' where id=4; -update noar ti set b1='4P4JMLBO' where id=4; -update noar tt set b2='T4JFWGIP21' where id=4; -update noar ti set b2='T4JFWGIP21' where id=4; -update noar tt set b0='E4FIGD9SAOF5RBU' where id=5; -update noar ti set b0='E4FIGD9SAOF5RBU' where id=5; -update noar tt set b1='Y7N4' where id=5; -update noar ti set b1='Y7N4' where id=5; -update noar tt set b2='TBT41O8HP1VJNRSL3' where id=5; -update noar ti set b2='TBT41O8HP1VJNRSL3' where id=5; -update noar tt set b0='F3' where id=6; -update noar ti set b0='F3' where id=6; -update noar tt set b1='WCJWOWHR3IEUD3HCL5FG2' where id=6; -update noar ti set b1='WCJWOWHR3IEUD3HCL5FG2' where id=6; -update noar tt set b2='MJVUIUQ3Y' where id=6; -update noar ti set b2='MJVUIUQ3Y' where id=6; -update noar tt set b0='CVJQTXFGZI97QJ9IVOM3EXYO18J3VNFP' where id=7; -update noar ti set b0='CVJQTXFGZI97QJ9IVOM3EXYO18J3VNFP' where id=7; -update noar tt set b1='LGV1H1P3SVY732SYFQW8FG1PK' where id=7; -update noar ti set b1='LGV1H1P3SVY732SYFQW8FG1PK' where id=7; -update noar tt set b2='3UVVSSE4ZFWIJ' where id=7; -update noar ti set b2='3UVVSSE4ZFWIJ' where id=7; -update noar tt set b0='ARSKK4U17TCPVXJVK1HBUJ3RY37AQ6JM' where id=8; -update noar ti set b0='ARSKK4U17TCPVXJVK1HBUJ3RY37AQ6JM' where id=8; -update noar tt set b1='JTAG1CNAU9T86A04D' where id=8; -update noar ti set b1='JTAG1CNAU9T86A04D' where id=8; -update noar tt set b2='JF1ELTCLJIGLHGX0TP1' where id=8; -update noar ti set b2='JF1ELTCLJIGLHGX0TP1' where id=8; -update noar tt set b0='MUWM8RW' where id=9; -update noar ti set b0='MUWM8RW' where id=9; -update noar tt set b1='R6I8D0F4O58R1S52QZ' where id=9; -update noar ti set b1='R6I8D0F4O58R1S52QZ' where id=9; -update noar tt set b2='BDFN2OAM3MV7XUSM0UBGT9' where id=9; -update noar ti set b2='BDFN2OAM3MV7XUSM0UBGT9' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 mediumblob not null, - b1 tinyblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='TOQXPL0YQ84X8FISSQD3GP6G91D6WKL' where id=1; -update noar ti set b0='TOQXPL0YQ84X8FISSQD3GP6G91D6WKL' where id=1; -update noar tt set b1='XMJLU8FO5KU6CD243EU1KD4Z8H2C7V4L' where id=1; -update noar ti set b1='XMJLU8FO5KU6CD243EU1KD4Z8H2C7V4L' where id=1; -update noar tt set b2='8MS82E' where id=1; -update noar ti set b2='8MS82E' where id=1; -update noar tt set b0='J8UF5IWND19R10PSELGPVDJ6ENB' where id=2; -update noar ti set b0='J8UF5IWND19R10PSELGPVDJ6ENB' where id=2; -update noar tt set b1='AWS8T6V6HBG6FVJNFO66QEBT' where id=2; -update noar ti set b1='AWS8T6V6HBG6FVJNFO66QEBT' where id=2; -update noar tt set b2='SY2IHCUK6XSDN1TW' where id=2; -update noar ti set b2='SY2IHCUK6XSDN1TW' where id=2; -update noar tt set b0='1W7U5M66BHCAL6F' where id=3; -update noar ti set b0='1W7U5M66BHCAL6F' where id=3; -update noar tt set b1='UG102ERN' where id=3; -update noar ti set b1='UG102ERN' where id=3; -update noar tt set b2='COWHSG43NDFYMU2NHJC9NZJG' where id=3; -update noar ti set b2='COWHSG43NDFYMU2NHJC9NZJG' where id=3; -update noar tt set b0='067CYMTKJ0Y92LJ80B7V48F' where id=4; -update noar ti set b0='067CYMTKJ0Y92LJ80B7V48F' where id=4; -update noar tt set b1='RO8ZISHJ6E7FN3UZ0MJW' where id=4; -update noar ti set b1='RO8ZISHJ6E7FN3UZ0MJW' where id=4; -update noar tt set b2='KHCXPGTELK560WL7KR81RCGQDVXY0PMZ' where id=4; -update noar ti set b2='KHCXPGTELK560WL7KR81RCGQDVXY0PMZ' where id=4; -update noar tt set b0='BZBW1Q' where id=5; -update noar ti set b0='BZBW1Q' where id=5; -update noar tt set b1='08X74ERR6FHVR9QP2YA4' where id=5; -update noar ti set b1='08X74ERR6FHVR9QP2YA4' where id=5; -update noar tt set b2='YE2G0D98A84X56DIRSMS5M0EVJ3M' where id=5; -update noar ti set b2='YE2G0D98A84X56DIRSMS5M0EVJ3M' where id=5; -update noar tt set b0='IL2HM8MBPP' where id=6; -update noar ti set b0='IL2HM8MBPP' where id=6; -update noar tt set b1='6O5VGK0NU4ML5O0SU6GIRFK9WS' where id=6; -update noar ti set b1='6O5VGK0NU4ML5O0SU6GIRFK9WS' where id=6; -update noar tt set b2='Y3BGTN41TEZQM0W34639M' where id=6; -update noar ti set b2='Y3BGTN41TEZQM0W34639M' where id=6; -update noar tt set b0='O0' where id=7; -update noar ti set b0='O0' where id=7; -update noar tt set b1='PVL9B5P9995TI73QC5LEHE2ZAUTVD2' where id=7; -update noar ti set b1='PVL9B5P9995TI73QC5LEHE2ZAUTVD2' where id=7; -update noar tt set b2='UES' where id=7; -update noar ti set b2='UES' where id=7; -update noar tt set b0='6NGK3R3Y4M3WM3O' where id=8; -update noar ti set b0='6NGK3R3Y4M3WM3O' where id=8; -update noar tt set b1='9ASX73COHOYHL1ZVLSWQ4IBE1WZ2JON' where id=8; -update noar ti set b1='9ASX73COHOYHL1ZVLSWQ4IBE1WZ2JON' where id=8; -update noar tt set b2='RLSQUW1J3DKRJWE7Q' where id=8; -update noar ti set b2='RLSQUW1J3DKRJWE7Q' where id=8; -update noar tt set b0='RGFVE460GQ' where id=9; -update noar ti set b0='RGFVE460GQ' where id=9; -update noar tt set b1='8RST9AV224' where id=9; -update noar ti set b1='8RST9AV224' where id=9; -update noar tt set b2='WIPY25E3TV' where id=9; -update noar ti set b2='WIPY25E3TV' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 mediumblob null, - b1 tinyblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='O8U' where id=1; -update noar ti set b0='O8U' where id=1; -update noar tt set b1='2RDLA1ZYPNBKZ9U2TP' where id=1; -update noar ti set b1='2RDLA1ZYPNBKZ9U2TP' where id=1; -update noar tt set b2='TT' where id=1; -update noar ti set b2='TT' where id=1; -update noar tt set b0='V7X' where id=2; -update noar ti set b0='V7X' where id=2; -update noar tt set b1='3KFLKNJ6KCZXH0' where id=2; -update noar ti set b1='3KFLKNJ6KCZXH0' where id=2; -update noar tt set b2='05TUBMQPNJXR6SRT4' where id=2; -update noar ti set b2='05TUBMQPNJXR6SRT4' where id=2; -update noar tt set b0='P4DV6' where id=3; -update noar ti set b0='P4DV6' where id=3; -update noar tt set b1='KGNRCMY21J2SI3VOUUS54S8AI' where id=3; -update noar ti set b1='KGNRCMY21J2SI3VOUUS54S8AI' where id=3; -update noar tt set b2='FV39CR' where id=3; -update noar ti set b2='FV39CR' where id=3; -update noar tt set b0='7' where id=4; -update noar ti set b0='7' where id=4; -update noar tt set b1='9TVGWWTKV3V25IR' where id=4; -update noar ti set b1='9TVGWWTKV3V25IR' where id=4; -update noar tt set b2='MZZ7M612OWBWZF931G' where id=4; -update noar ti set b2='MZZ7M612OWBWZF931G' where id=4; -update noar tt set b0='X0' where id=5; -update noar ti set b0='X0' where id=5; -update noar tt set b1='8CHXGXO1LC4312NU' where id=5; -update noar ti set b1='8CHXGXO1LC4312NU' where id=5; -update noar tt set b2='SAB' where id=5; -update noar ti set b2='SAB' where id=5; -update noar tt set b0='5SSOUP01IVG7QUI134XMH8PQLKX42HRX' where id=6; -update noar ti set b0='5SSOUP01IVG7QUI134XMH8PQLKX42HRX' where id=6; -update noar tt set b1='0I7NQP6ZL9VU414QT2PMSOIWEH7' where id=6; -update noar ti set b1='0I7NQP6ZL9VU414QT2PMSOIWEH7' where id=6; -update noar tt set b2='5RT2Y' where id=6; -update noar ti set b2='5RT2Y' where id=6; -update noar tt set b0='BMYG6OOGJHIFI2W0HUEWJI60ER' where id=7; -update noar ti set b0='BMYG6OOGJHIFI2W0HUEWJI60ER' where id=7; -update noar tt set b1='CJ7TRWQFN4OKMUU0QF23Q' where id=7; -update noar ti set b1='CJ7TRWQFN4OKMUU0QF23Q' where id=7; -update noar tt set b2='ILZII8X3UDMDN4HBMYNVC76M4TEV96' where id=7; -update noar ti set b2='ILZII8X3UDMDN4HBMYNVC76M4TEV96' where id=7; -update noar tt set b0='TQERA9KMBRN08NS3IEBHB' where id=8; -update noar ti set b0='TQERA9KMBRN08NS3IEBHB' where id=8; -update noar tt set b1='5GDI4H' where id=8; -update noar ti set b1='5GDI4H' where id=8; -update noar tt set b2='614OMCY3CUIEIMIZOLBTU' where id=8; -update noar ti set b2='614OMCY3CUIEIMIZOLBTU' where id=8; -update noar tt set b0='JM1TLRQZY8TCS1' where id=9; -update noar ti set b0='JM1TLRQZY8TCS1' where id=9; -update noar tt set b1='1FPOMFV0XC' where id=9; -update noar ti set b1='1FPOMFV0XC' where id=9; -update noar tt set b2='RK2TXCE90OYM0N0QYHIC' where id=9; -update noar ti set b2='RK2TXCE90OYM0N0QYHIC' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 mediumblob not null, - b1 tinyblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='3NO3QE8SVFDP7USX4Z5Y0NT2PI9M3X' where id=1; -update noar ti set b0='3NO3QE8SVFDP7USX4Z5Y0NT2PI9M3X' where id=1; -update noar tt set b1='MZDRHIQHVE1U' where id=1; -update noar ti set b1='MZDRHIQHVE1U' where id=1; -update noar tt set b2='AE866SA8O' where id=1; -update noar ti set b2='AE866SA8O' where id=1; -update noar tt set b0='3MJ97O5TMFUM9R7RGG97PLKOIY1EU4L' where id=2; -update noar ti set b0='3MJ97O5TMFUM9R7RGG97PLKOIY1EU4L' where id=2; -update noar tt set b1='N3YX' where id=2; -update noar ti set b1='N3YX' where id=2; -update noar tt set b2='VGJPIXFSRYGC9XESK5FFMSODQJJUAJ' where id=2; -update noar ti set b2='VGJPIXFSRYGC9XESK5FFMSODQJJUAJ' where id=2; -update noar tt set b0='U0DZTNTHT4KMB' where id=3; -update noar ti set b0='U0DZTNTHT4KMB' where id=3; -update noar tt set b1='BTBNSJ0Q02XJ7UIW' where id=3; -update noar ti set b1='BTBNSJ0Q02XJ7UIW' where id=3; -update noar tt set b2='BGW9PLDYAF74HXISD5XZV8E' where id=3; -update noar ti set b2='BGW9PLDYAF74HXISD5XZV8E' where id=3; -update noar tt set b0='TYF9WD0BV3392SLDR6C9R65ZBB35NP' where id=4; -update noar ti set b0='TYF9WD0BV3392SLDR6C9R65ZBB35NP' where id=4; -update noar tt set b1='IEOVT9T8A2LD1RKOL800XK' where id=4; -update noar ti set b1='IEOVT9T8A2LD1RKOL800XK' where id=4; -update noar tt set b2='45MQPXAQ3MK' where id=4; -update noar ti set b2='45MQPXAQ3MK' where id=4; -update noar tt set b0='UO9TMG2FPUXKO7VQAS0RVUT0C44' where id=5; -update noar ti set b0='UO9TMG2FPUXKO7VQAS0RVUT0C44' where id=5; -update noar tt set b1='HG6MW3CZMT076DKQ63MP6U' where id=5; -update noar ti set b1='HG6MW3CZMT076DKQ63MP6U' where id=5; -update noar tt set b2='ACOBS79' where id=5; -update noar ti set b2='ACOBS79' where id=5; -update noar tt set b0='N9UBNU31' where id=6; -update noar ti set b0='N9UBNU31' where id=6; -update noar tt set b1='QGQ5JJOP' where id=6; -update noar ti set b1='QGQ5JJOP' where id=6; -update noar tt set b2='3ORB5GAHWR45Q3F0G03IVPKU9S55E' where id=6; -update noar ti set b2='3ORB5GAHWR45Q3F0G03IVPKU9S55E' where id=6; -update noar tt set b0='ZG3LA4' where id=7; -update noar ti set b0='ZG3LA4' where id=7; -update noar tt set b1='RJEM7X6SO79WNCZ1EJ7YG' where id=7; -update noar ti set b1='RJEM7X6SO79WNCZ1EJ7YG' where id=7; -update noar tt set b2='RZQ2TFUB6I9S1ND9GE97LHW8TI4VG3' where id=7; -update noar ti set b2='RZQ2TFUB6I9S1ND9GE97LHW8TI4VG3' where id=7; -update noar tt set b0='M8CFRB67TF6VUIAZGQLA96Q' where id=8; -update noar ti set b0='M8CFRB67TF6VUIAZGQLA96Q' where id=8; -update noar tt set b1='CE39QBK72IY3A9R83BUGODRZ8T843V' where id=8; -update noar ti set b1='CE39QBK72IY3A9R83BUGODRZ8T843V' where id=8; -update noar tt set b2='3XL5CFCM' where id=8; -update noar ti set b2='3XL5CFCM' where id=8; -update noar tt set b0='ZLBDLDB0LTRNVUT1HMT41B09' where id=9; -update noar ti set b0='ZLBDLDB0LTRNVUT1HMT41B09' where id=9; -update noar tt set b1='LZUWC4R2DLQSCA7DA7G17WL' where id=9; -update noar ti set b1='LZUWC4R2DLQSCA7DA7G17WL' where id=9; -update noar tt set b2='90T1TPKPL' where id=9; -update noar ti set b2='90T1TPKPL' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 mediumblob null, - b1 tinyblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='LZT3B24BZJ58MTFPI0AY15ND7' where id=1; -update noar ti set b0='LZT3B24BZJ58MTFPI0AY15ND7' where id=1; -update noar tt set b1='C' where id=1; -update noar ti set b1='C' where id=1; -update noar tt set b2='H' where id=1; -update noar ti set b2='H' where id=1; -update noar tt set b0='PL9HXR38V96OMJLOCE' where id=2; -update noar ti set b0='PL9HXR38V96OMJLOCE' where id=2; -update noar tt set b1='64TYG5GXTSBSQL0U5' where id=2; -update noar ti set b1='64TYG5GXTSBSQL0U5' where id=2; -update noar tt set b2='5EXFNEJWFK1EW6O24BAUUQXTKHLIR' where id=2; -update noar ti set b2='5EXFNEJWFK1EW6O24BAUUQXTKHLIR' where id=2; -update noar tt set b0='JLAT3P' where id=3; -update noar ti set b0='JLAT3P' where id=3; -update noar tt set b1='CZZFILH6V2QJ6KQGGB4LZNQ' where id=3; -update noar ti set b1='CZZFILH6V2QJ6KQGGB4LZNQ' where id=3; -update noar tt set b2='T6GT6GX054H6KTZO' where id=3; -update noar ti set b2='T6GT6GX054H6KTZO' where id=3; -update noar tt set b0='KCLTZS' where id=4; -update noar ti set b0='KCLTZS' where id=4; -update noar tt set b1='ETMHSQZ89W3A67GEUFU9GOEZJ751YID' where id=4; -update noar ti set b1='ETMHSQZ89W3A67GEUFU9GOEZJ751YID' where id=4; -update noar tt set b2='ZUPQR2C3' where id=4; -update noar ti set b2='ZUPQR2C3' where id=4; -update noar tt set b0='P6Z7HZCAWM8TT4MR' where id=5; -update noar ti set b0='P6Z7HZCAWM8TT4MR' where id=5; -update noar tt set b1='9OZI2KZV0BJXPNDP8D5' where id=5; -update noar ti set b1='9OZI2KZV0BJXPNDP8D5' where id=5; -update noar tt set b2='SJB4SAACJX0033SGL5FS7Z4OW' where id=5; -update noar ti set b2='SJB4SAACJX0033SGL5FS7Z4OW' where id=5; -update noar tt set b0='Z5HY3UTTJM4SZJI4P7B' where id=6; -update noar ti set b0='Z5HY3UTTJM4SZJI4P7B' where id=6; -update noar tt set b1='SR3XY' where id=6; -update noar ti set b1='SR3XY' where id=6; -update noar tt set b2='7H2Y' where id=6; -update noar ti set b2='7H2Y' where id=6; -update noar tt set b0='9S0YRAE9BRVAEO2P62PJL1TNNPZ' where id=7; -update noar ti set b0='9S0YRAE9BRVAEO2P62PJL1TNNPZ' where id=7; -update noar tt set b1='TFF9CRW0R3UUGEFKMMSQDKA3' where id=7; -update noar ti set b1='TFF9CRW0R3UUGEFKMMSQDKA3' where id=7; -update noar tt set b2='KSSI31U8XGN' where id=7; -update noar ti set b2='KSSI31U8XGN' where id=7; -update noar tt set b0='GZODJABN6ERHMG' where id=8; -update noar ti set b0='GZODJABN6ERHMG' where id=8; -update noar tt set b1='2LFOYJUNKYNWA' where id=8; -update noar ti set b1='2LFOYJUNKYNWA' where id=8; -update noar tt set b2='JM2WLM7FFHNER' where id=8; -update noar ti set b2='JM2WLM7FFHNER' where id=8; -update noar tt set b0='Y' where id=9; -update noar ti set b0='Y' where id=9; -update noar tt set b1='WTRPBE2GYCSZNGSWFHXOLDB6YEMX1K' where id=9; -update noar ti set b1='WTRPBE2GYCSZNGSWFHXOLDB6YEMX1K' where id=9; -update noar tt set b2='F0Q0U4GUEJWOY4YPGLFZ8NPEUAZTO3O' where id=9; -update noar ti set b2='F0Q0U4GUEJWOY4YPGLFZ8NPEUAZTO3O' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 mediumblob not null, - b1 tinyblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='A05SRQJGZ7' where id=1; -update noar ti set b0='A05SRQJGZ7' where id=1; -update noar tt set b1='V01D0Q6H28EVEIHQN1W6J' where id=1; -update noar ti set b1='V01D0Q6H28EVEIHQN1W6J' where id=1; -update noar tt set b2='2CUKXE4TXHAERP8PCR3OOLFGWQ5' where id=1; -update noar ti set b2='2CUKXE4TXHAERP8PCR3OOLFGWQ5' where id=1; -update noar tt set b0='NHD3V11P0FFD2UY6L21XZ2EMEYJIXKL5' where id=2; -update noar ti set b0='NHD3V11P0FFD2UY6L21XZ2EMEYJIXKL5' where id=2; -update noar tt set b1='5NJQ8QVAPV2TVK' where id=2; -update noar ti set b1='5NJQ8QVAPV2TVK' where id=2; -update noar tt set b2='VM4X3FQVC4' where id=2; -update noar ti set b2='VM4X3FQVC4' where id=2; -update noar tt set b0='DJ' where id=3; -update noar ti set b0='DJ' where id=3; -update noar tt set b1='NESZVJJD4B1ZM9O4E0VXOE' where id=3; -update noar ti set b1='NESZVJJD4B1ZM9O4E0VXOE' where id=3; -update noar tt set b2='3YJGJN' where id=3; -update noar ti set b2='3YJGJN' where id=3; -update noar tt set b0='RQ35TNJS' where id=4; -update noar ti set b0='RQ35TNJS' where id=4; -update noar tt set b1='5MM41JVC6R55EQE08PCS92RSQ' where id=4; -update noar ti set b1='5MM41JVC6R55EQE08PCS92RSQ' where id=4; -update noar tt set b2='KVCYVFNB43W' where id=4; -update noar ti set b2='KVCYVFNB43W' where id=4; -update noar tt set b0='3XZOC52CW' where id=5; -update noar ti set b0='3XZOC52CW' where id=5; -update noar tt set b1='0QJCD82UR6RIYAJLD1LDN1F1O' where id=5; -update noar ti set b1='0QJCD82UR6RIYAJLD1LDN1F1O' where id=5; -update noar tt set b2='E1KFF5C5EHAD1G6C6GTM9W9M5FT36D' where id=5; -update noar ti set b2='E1KFF5C5EHAD1G6C6GTM9W9M5FT36D' where id=5; -update noar tt set b0='HMK9NUY' where id=6; -update noar ti set b0='HMK9NUY' where id=6; -update noar tt set b1='G5D5RADDHGMMHWWBD' where id=6; -update noar ti set b1='G5D5RADDHGMMHWWBD' where id=6; -update noar tt set b2='FMMC3WMBIZSY' where id=6; -update noar ti set b2='FMMC3WMBIZSY' where id=6; -update noar tt set b0='PAQMG3JHRTOHM' where id=7; -update noar ti set b0='PAQMG3JHRTOHM' where id=7; -update noar tt set b1='HIUOWXIA1JV' where id=7; -update noar ti set b1='HIUOWXIA1JV' where id=7; -update noar tt set b2='QWG53YIKUC0G2WJI0L22SGGUI3P5' where id=7; -update noar ti set b2='QWG53YIKUC0G2WJI0L22SGGUI3P5' where id=7; -update noar tt set b0='L8ZNTB2Y' where id=8; -update noar ti set b0='L8ZNTB2Y' where id=8; -update noar tt set b1='Z779' where id=8; -update noar ti set b1='Z779' where id=8; -update noar tt set b2='JU43J7HCRRF' where id=8; -update noar ti set b2='JU43J7HCRRF' where id=8; -update noar tt set b0='14BF' where id=9; -update noar ti set b0='14BF' where id=9; -update noar tt set b1='LT47822OH70XCY5B1CYE3WGJZ168R0' where id=9; -update noar ti set b1='LT47822OH70XCY5B1CYE3WGJZ168R0' where id=9; -update noar tt set b2='FAEQNRP4HL2WW' where id=9; -update noar ti set b2='FAEQNRP4HL2WW' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 mediumblob null, - b1 tinyblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='AMECKXNV9YV8MTFOXZRYRJ0LCRHSDERU' where id=1; -update noar ti set b0='AMECKXNV9YV8MTFOXZRYRJ0LCRHSDERU' where id=1; -update noar tt set b1='HATOGF668ZZ2GO9YY8VGFH2MQTKTS1W3' where id=1; -update noar ti set b1='HATOGF668ZZ2GO9YY8VGFH2MQTKTS1W3' where id=1; -update noar tt set b2='VAIP2NN40' where id=1; -update noar ti set b2='VAIP2NN40' where id=1; -update noar tt set b0='7SS6BBCLKC5HGH7X406GXH0BCJWH' where id=2; -update noar ti set b0='7SS6BBCLKC5HGH7X406GXH0BCJWH' where id=2; -update noar tt set b1='EXY0XM' where id=2; -update noar ti set b1='EXY0XM' where id=2; -update noar tt set b2='HPY9F7NHPJJS8LA8V5' where id=2; -update noar ti set b2='HPY9F7NHPJJS8LA8V5' where id=2; -update noar tt set b0='9972H5GWJ0SHHLUHL5D06QE3VN' where id=3; -update noar ti set b0='9972H5GWJ0SHHLUHL5D06QE3VN' where id=3; -update noar tt set b1='7FJON' where id=3; -update noar ti set b1='7FJON' where id=3; -update noar tt set b2='CXWT5EMH0ADR8TM3IP5MP4L1N90G5U' where id=3; -update noar ti set b2='CXWT5EMH0ADR8TM3IP5MP4L1N90G5U' where id=3; -update noar tt set b0='7JFY99S8Q7SM5BWUB5MMFUSI10IVMD' where id=4; -update noar ti set b0='7JFY99S8Q7SM5BWUB5MMFUSI10IVMD' where id=4; -update noar tt set b1='10EZS17XQVRZ' where id=4; -update noar ti set b1='10EZS17XQVRZ' where id=4; -update noar tt set b2='8VQLS0BOACK9ZHM9I' where id=4; -update noar ti set b2='8VQLS0BOACK9ZHM9I' where id=4; -update noar tt set b0='D' where id=5; -update noar ti set b0='D' where id=5; -update noar tt set b1='JUYCRU4LNJ4SQTMB' where id=5; -update noar ti set b1='JUYCRU4LNJ4SQTMB' where id=5; -update noar tt set b2='VSTKFPQU5U06H2EUOPZI29TER4OAF' where id=5; -update noar ti set b2='VSTKFPQU5U06H2EUOPZI29TER4OAF' where id=5; -update noar tt set b0='VZSIYE' where id=6; -update noar ti set b0='VZSIYE' where id=6; -update noar tt set b1='LT' where id=6; -update noar ti set b1='LT' where id=6; -update noar tt set b2='ZCH2UWLV0HL8VHBZAS2FQMYV61' where id=6; -update noar ti set b2='ZCH2UWLV0HL8VHBZAS2FQMYV61' where id=6; -update noar tt set b0='4HR2T3HCBO9LAYMI2BFUYJ' where id=7; -update noar ti set b0='4HR2T3HCBO9LAYMI2BFUYJ' where id=7; -update noar tt set b1='W4NGL9JPIQPV70VYQYFE0T9W' where id=7; -update noar ti set b1='W4NGL9JPIQPV70VYQYFE0T9W' where id=7; -update noar tt set b2='V2011CWV9PD0Z' where id=7; -update noar ti set b2='V2011CWV9PD0Z' where id=7; -update noar tt set b0='VESMIIJH65VN' where id=8; -update noar ti set b0='VESMIIJH65VN' where id=8; -update noar tt set b1='EWJ' where id=8; -update noar ti set b1='EWJ' where id=8; -update noar tt set b2='NHNQMWJYDNOCDIJ2Y9I4LG05THXX' where id=8; -update noar ti set b2='NHNQMWJYDNOCDIJ2Y9I4LG05THXX' where id=8; -update noar tt set b0='BJ6IVVLXARD45JHT' where id=9; -update noar ti set b0='BJ6IVVLXARD45JHT' where id=9; -update noar tt set b1='XFOF22HUDV3ZR8SX9' where id=9; -update noar ti set b1='XFOF22HUDV3ZR8SX9' where id=9; -update noar tt set b2='QZ77HKNP39KE7UVQYM1130J9' where id=9; -update noar ti set b2='QZ77HKNP39KE7UVQYM1130J9' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 mediumblob not null, - b1 tinyblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='U2T' where id=1; -update noar ti set b0='U2T' where id=1; -update noar tt set b1='903ENKDKW1' where id=1; -update noar ti set b1='903ENKDKW1' where id=1; -update noar tt set b2='6M2K5BL4YI1SKN' where id=1; -update noar ti set b2='6M2K5BL4YI1SKN' where id=1; -update noar tt set b0='FIC0G5YWH' where id=2; -update noar ti set b0='FIC0G5YWH' where id=2; -update noar tt set b1='135P99OLVSS1ZU55' where id=2; -update noar ti set b1='135P99OLVSS1ZU55' where id=2; -update noar tt set b2='8NQSORKUCSYNZNT70SHQA9ZYEKHG3' where id=2; -update noar ti set b2='8NQSORKUCSYNZNT70SHQA9ZYEKHG3' where id=2; -update noar tt set b0='HNB4TYD1GJIM3YPFVVEGHM9X8RQ3DXF' where id=3; -update noar ti set b0='HNB4TYD1GJIM3YPFVVEGHM9X8RQ3DXF' where id=3; -update noar tt set b1='AA1XX' where id=3; -update noar ti set b1='AA1XX' where id=3; -update noar tt set b2='CSBECP1H4RBYP' where id=3; -update noar ti set b2='CSBECP1H4RBYP' where id=3; -update noar tt set b0='E31BK1N0M' where id=4; -update noar ti set b0='E31BK1N0M' where id=4; -update noar tt set b1='GI8' where id=4; -update noar ti set b1='GI8' where id=4; -update noar tt set b2='PXX' where id=4; -update noar ti set b2='PXX' where id=4; -update noar tt set b0='0ULS' where id=5; -update noar ti set b0='0ULS' where id=5; -update noar tt set b1='CDC9' where id=5; -update noar ti set b1='CDC9' where id=5; -update noar tt set b2='NP57DQX' where id=5; -update noar ti set b2='NP57DQX' where id=5; -update noar tt set b0='ST2S4FTE8UMSK05NJOEP3TC' where id=6; -update noar ti set b0='ST2S4FTE8UMSK05NJOEP3TC' where id=6; -update noar tt set b1='BHMOD23PJERY6U' where id=6; -update noar ti set b1='BHMOD23PJERY6U' where id=6; -update noar tt set b2='J8B0V34HODM0H48O0DDW6J6FS9CDM' where id=6; -update noar ti set b2='J8B0V34HODM0H48O0DDW6J6FS9CDM' where id=6; -update noar tt set b0='0YIOYTP6GAAHQXPUNFL5D8FNMI' where id=7; -update noar ti set b0='0YIOYTP6GAAHQXPUNFL5D8FNMI' where id=7; -update noar tt set b1='9XBT9BHAY1MXWT2OK' where id=7; -update noar ti set b1='9XBT9BHAY1MXWT2OK' where id=7; -update noar tt set b2='AM' where id=7; -update noar ti set b2='AM' where id=7; -update noar tt set b0='KMM0M9' where id=8; -update noar ti set b0='KMM0M9' where id=8; -update noar tt set b1='EQN5AKY0CN75AZGCRHM4I8DL7ILLROW' where id=8; -update noar ti set b1='EQN5AKY0CN75AZGCRHM4I8DL7ILLROW' where id=8; -update noar tt set b2='AA0EWJ12' where id=8; -update noar ti set b2='AA0EWJ12' where id=8; -update noar tt set b0='QMPP9ZOZR4XGEWGVRZ5E6OTFFMBD' where id=9; -update noar ti set b0='QMPP9ZOZR4XGEWGVRZ5E6OTFFMBD' where id=9; -update noar tt set b1='GK9R9BWB6H1EKA2' where id=9; -update noar ti set b1='GK9R9BWB6H1EKA2' where id=9; -update noar tt set b2='4LV3Q2F79VOD02IU3393PJF7OITV2AUU' where id=9; -update noar ti set b2='4LV3Q2F79VOD02IU3393PJF7OITV2AUU' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 mediumblob null, - b1 tinyblob null, - b2 text null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='AA5HG6QGVVMLY53N966G96TI' where id=1; -update noar ti set b0='AA5HG6QGVVMLY53N966G96TI' where id=1; -update noar tt set b1='RG' where id=1; -update noar ti set b1='RG' where id=1; -update noar tt set b2='FCMJM' where id=1; -update noar ti set b2='FCMJM' where id=1; -update noar tt set b0='HUFIUZSQVH00107P0ZP652GD' where id=2; -update noar ti set b0='HUFIUZSQVH00107P0ZP652GD' where id=2; -update noar tt set b1='SDY3WEXZRP46DQPJG0GJB7A6T' where id=2; -update noar ti set b1='SDY3WEXZRP46DQPJG0GJB7A6T' where id=2; -update noar tt set b2='ZEEAA' where id=2; -update noar ti set b2='ZEEAA' where id=2; -update noar tt set b0='B4T419WE0' where id=3; -update noar ti set b0='B4T419WE0' where id=3; -update noar tt set b1='LWNTY2FYA7Q6OCDPIMVQV3Q' where id=3; -update noar ti set b1='LWNTY2FYA7Q6OCDPIMVQV3Q' where id=3; -update noar tt set b2='0NG74UWP9589JI' where id=3; -update noar ti set b2='0NG74UWP9589JI' where id=3; -update noar tt set b0='RO1KN9C4O9X0EGJG9F5API' where id=4; -update noar ti set b0='RO1KN9C4O9X0EGJG9F5API' where id=4; -update noar tt set b1='VSI5TA5PCAJ5FB' where id=4; -update noar ti set b1='VSI5TA5PCAJ5FB' where id=4; -update noar tt set b2='4VV276B51YDWQTA52JWTTGTMM5DH' where id=4; -update noar ti set b2='4VV276B51YDWQTA52JWTTGTMM5DH' where id=4; -update noar tt set b0='8L42EF8W1ITHIBI' where id=5; -update noar ti set b0='8L42EF8W1ITHIBI' where id=5; -update noar tt set b1='B4FFOD8XJ87EZ0MOCVGE1A' where id=5; -update noar ti set b1='B4FFOD8XJ87EZ0MOCVGE1A' where id=5; -update noar tt set b2='Q5Z' where id=5; -update noar ti set b2='Q5Z' where id=5; -update noar tt set b0='28DVY1MKS2IWSSVT8J' where id=6; -update noar ti set b0='28DVY1MKS2IWSSVT8J' where id=6; -update noar tt set b1='LD' where id=6; -update noar ti set b1='LD' where id=6; -update noar tt set b2='PAVN' where id=6; -update noar ti set b2='PAVN' where id=6; -update noar tt set b0='3FB' where id=7; -update noar ti set b0='3FB' where id=7; -update noar tt set b1='MXJ32CKR9F85QOEQW7QKK87' where id=7; -update noar ti set b1='MXJ32CKR9F85QOEQW7QKK87' where id=7; -update noar tt set b2='1B8M8R7XGPDKEXRLN' where id=7; -update noar ti set b2='1B8M8R7XGPDKEXRLN' where id=7; -update noar tt set b0='KFMHZJIDOOS' where id=8; -update noar ti set b0='KFMHZJIDOOS' where id=8; -update noar tt set b1='N81W91SLJE98SMGGD' where id=8; -update noar ti set b1='N81W91SLJE98SMGGD' where id=8; -update noar tt set b2='YRARYP' where id=8; -update noar ti set b2='YRARYP' where id=8; -update noar tt set b0='JJPJSULAEU6' where id=9; -update noar ti set b0='JJPJSULAEU6' where id=9; -update noar tt set b1='JZI' where id=9; -update noar ti set b1='JZI' where id=9; -update noar tt set b2='FAZS8L0NNL09Y0OXSLSFQHXGCR' where id=9; -update noar ti set b2='FAZS8L0NNL09Y0OXSLSFQHXGCR' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 mediumblob not null, - b1 tinyblob not null, - b2 text not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='YMYCE8P8GMI7' where id=1; -update noar ti set b0='YMYCE8P8GMI7' where id=1; -update noar tt set b1='UZTBJ4THRVTSY20Q7Q2ZO8FYOA' where id=1; -update noar ti set b1='UZTBJ4THRVTSY20Q7Q2ZO8FYOA' where id=1; -update noar tt set b2='AJGXMDZ7X8' where id=1; -update noar ti set b2='AJGXMDZ7X8' where id=1; -update noar tt set b0='Y8O5HW3L4KBNEINC7M4GE7LZI' where id=2; -update noar ti set b0='Y8O5HW3L4KBNEINC7M4GE7LZI' where id=2; -update noar tt set b1='X2ZTV5HOCD6SPLDNOQYGMEG' where id=2; -update noar ti set b1='X2ZTV5HOCD6SPLDNOQYGMEG' where id=2; -update noar tt set b2='8HH8H71W0558C58N6ST9QZQJ39J6NXMP' where id=2; -update noar ti set b2='8HH8H71W0558C58N6ST9QZQJ39J6NXMP' where id=2; -update noar tt set b0='TNFY7' where id=3; -update noar ti set b0='TNFY7' where id=3; -update noar tt set b1='JEAB54UV1ENN8S6F' where id=3; -update noar ti set b1='JEAB54UV1ENN8S6F' where id=3; -update noar tt set b2='4SRC5NPY2N6JS2VGSC5BD7' where id=3; -update noar ti set b2='4SRC5NPY2N6JS2VGSC5BD7' where id=3; -update noar tt set b0='5NLP436C0GTZJE3NO9462NV' where id=4; -update noar ti set b0='5NLP436C0GTZJE3NO9462NV' where id=4; -update noar tt set b1='2PPH2R' where id=4; -update noar ti set b1='2PPH2R' where id=4; -update noar tt set b2='FT8B55Q97K5F01FLQXN6IB5IHX' where id=4; -update noar ti set b2='FT8B55Q97K5F01FLQXN6IB5IHX' where id=4; -update noar tt set b0='68VIBY5PW8W143FHF3YG' where id=5; -update noar ti set b0='68VIBY5PW8W143FHF3YG' where id=5; -update noar tt set b1='UT' where id=5; -update noar ti set b1='UT' where id=5; -update noar tt set b2='K4RPOHHTSRDIGQYO753GWG72U' where id=5; -update noar ti set b2='K4RPOHHTSRDIGQYO753GWG72U' where id=5; -update noar tt set b0='MO7YS' where id=6; -update noar ti set b0='MO7YS' where id=6; -update noar tt set b1='MQQ2O46FB9LA' where id=6; -update noar ti set b1='MQQ2O46FB9LA' where id=6; -update noar tt set b2='7ROGCMX0C9WFU3CZS3FVZCFW' where id=6; -update noar ti set b2='7ROGCMX0C9WFU3CZS3FVZCFW' where id=6; -update noar tt set b0='2PFN9A7BA8D3U8JEW2' where id=7; -update noar ti set b0='2PFN9A7BA8D3U8JEW2' where id=7; -update noar tt set b1='R6L460429H8J7HKTAX' where id=7; -update noar ti set b1='R6L460429H8J7HKTAX' where id=7; -update noar tt set b2='KS95ZJOYHZ2757URU18' where id=7; -update noar ti set b2='KS95ZJOYHZ2757URU18' where id=7; -update noar tt set b0='SPDC5UL0ICY5WAAXEWEL3W9C0' where id=8; -update noar ti set b0='SPDC5UL0ICY5WAAXEWEL3W9C0' where id=8; -update noar tt set b1='DJS2KYQ9VLMP8HFP4IT427FM' where id=8; -update noar ti set b1='DJS2KYQ9VLMP8HFP4IT427FM' where id=8; -update noar tt set b2='35' where id=8; -update noar ti set b2='35' where id=8; -update noar tt set b0='RLYZGX4MUS4V7M4MLCVNHMWSGDDK9' where id=9; -update noar ti set b0='RLYZGX4MUS4V7M4MLCVNHMWSGDDK9' where id=9; -update noar tt set b1='H' where id=9; -update noar ti set b1='H' where id=9; -update noar tt set b2='NEH1YQIO2YJDPUSQ' where id=9; -update noar ti set b2='NEH1YQIO2YJDPUSQ' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 mediumblob null, - b1 blob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='VKPLK3N1ZIKT2H' where id=1; -update noar ti set b0='VKPLK3N1ZIKT2H' where id=1; -update noar tt set b1='LGT0YSN2PZLV1J6J8' where id=1; -update noar ti set b1='LGT0YSN2PZLV1J6J8' where id=1; -update noar tt set b2='7CSRRNGWYEVRH685AZQ98VU3U' where id=1; -update noar ti set b2='7CSRRNGWYEVRH685AZQ98VU3U' where id=1; -update noar tt set b0='LJVZZS65CV9L0LXT72I2O' where id=2; -update noar ti set b0='LJVZZS65CV9L0LXT72I2O' where id=2; -update noar tt set b1='PYFD8X2RUNJTGL78L' where id=2; -update noar ti set b1='PYFD8X2RUNJTGL78L' where id=2; -update noar tt set b2='HMNGSQ67GORBH8NYBOJTQNOLV0' where id=2; -update noar ti set b2='HMNGSQ67GORBH8NYBOJTQNOLV0' where id=2; -update noar tt set b0='QUQT1BMGCF7QD5RH3E2FDCYG2HTKE' where id=3; -update noar ti set b0='QUQT1BMGCF7QD5RH3E2FDCYG2HTKE' where id=3; -update noar tt set b1='RK7AK1N0S27WUR9V' where id=3; -update noar ti set b1='RK7AK1N0S27WUR9V' where id=3; -update noar tt set b2='3L' where id=3; -update noar ti set b2='3L' where id=3; -update noar tt set b0='JP4ZP7R9DG019H6S6DVUK9N9' where id=4; -update noar ti set b0='JP4ZP7R9DG019H6S6DVUK9N9' where id=4; -update noar tt set b1='6OK2GAJ85EXM5LQLNEU3' where id=4; -update noar ti set b1='6OK2GAJ85EXM5LQLNEU3' where id=4; -update noar tt set b2='2ML1QL1EQNBMTWE3VW6V9EZBC6V' where id=4; -update noar ti set b2='2ML1QL1EQNBMTWE3VW6V9EZBC6V' where id=4; -update noar tt set b0='8V3Q9BISTIOVU30EGGER4QO' where id=5; -update noar ti set b0='8V3Q9BISTIOVU30EGGER4QO' where id=5; -update noar tt set b1='LYW0RNG6K4FHMJH4L4MNJBX1O339' where id=5; -update noar ti set b1='LYW0RNG6K4FHMJH4L4MNJBX1O339' where id=5; -update noar tt set b2='DXJVMTC5RA8K6Z0' where id=5; -update noar ti set b2='DXJVMTC5RA8K6Z0' where id=5; -update noar tt set b0='BTT' where id=6; -update noar ti set b0='BTT' where id=6; -update noar tt set b1='EDSDMIZT' where id=6; -update noar ti set b1='EDSDMIZT' where id=6; -update noar tt set b2='RJ8GH25E83V36B7L0OM1F8IUJ' where id=6; -update noar ti set b2='RJ8GH25E83V36B7L0OM1F8IUJ' where id=6; -update noar tt set b0='RY' where id=7; -update noar ti set b0='RY' where id=7; -update noar tt set b1='FETAKMZA1TAYVC' where id=7; -update noar ti set b1='FETAKMZA1TAYVC' where id=7; -update noar tt set b2='D4ON5F2LHUWNGYSK659NMD26EMJR' where id=7; -update noar ti set b2='D4ON5F2LHUWNGYSK659NMD26EMJR' where id=7; -update noar tt set b0='6' where id=8; -update noar ti set b0='6' where id=8; -update noar tt set b1='NP7Q' where id=8; -update noar ti set b1='NP7Q' where id=8; -update noar tt set b2='92GHAK3UC41BQQQ74WDJKEZU4004W' where id=8; -update noar ti set b2='92GHAK3UC41BQQQ74WDJKEZU4004W' where id=8; -update noar tt set b0='4I70HF60JPC5AXVS' where id=9; -update noar ti set b0='4I70HF60JPC5AXVS' where id=9; -update noar tt set b1='XG5KV63MIR4' where id=9; -update noar ti set b1='XG5KV63MIR4' where id=9; -update noar tt set b2='M' where id=9; -update noar ti set b2='M' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 mediumblob not null, - b1 blob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='MDFIB' where id=1; -update noar ti set b0='MDFIB' where id=1; -update noar tt set b1='OQGVS0EOTEIM4N2UDZRMYZUR2ELJ1ZKI' where id=1; -update noar ti set b1='OQGVS0EOTEIM4N2UDZRMYZUR2ELJ1ZKI' where id=1; -update noar tt set b2='2UYHY7Q8SHCVVXMW38PD4TJP8IDT6IT' where id=1; -update noar ti set b2='2UYHY7Q8SHCVVXMW38PD4TJP8IDT6IT' where id=1; -update noar tt set b0='0AHCRI641CCOI4E7LNU55HZLOB' where id=2; -update noar ti set b0='0AHCRI641CCOI4E7LNU55HZLOB' where id=2; -update noar tt set b1='5BRY' where id=2; -update noar ti set b1='5BRY' where id=2; -update noar tt set b2='2W4GA02T952WC3LB8ZB7' where id=2; -update noar ti set b2='2W4GA02T952WC3LB8ZB7' where id=2; -update noar tt set b0='T9N54ULE3FM7QW9I6R65VZT0R' where id=3; -update noar ti set b0='T9N54ULE3FM7QW9I6R65VZT0R' where id=3; -update noar tt set b1='MIIUIJFI6Q0' where id=3; -update noar ti set b1='MIIUIJFI6Q0' where id=3; -update noar tt set b2='Y33MADV1S88N77O7BDV97RPA24' where id=3; -update noar ti set b2='Y33MADV1S88N77O7BDV97RPA24' where id=3; -update noar tt set b0='0OW7KECKABL7H25IV77X' where id=4; -update noar ti set b0='0OW7KECKABL7H25IV77X' where id=4; -update noar tt set b1='Z69J3UK9C0FQLMHK6DACGO' where id=4; -update noar ti set b1='Z69J3UK9C0FQLMHK6DACGO' where id=4; -update noar tt set b2='FKNZ3E0HAVK2F7OQF81HGY' where id=4; -update noar ti set b2='FKNZ3E0HAVK2F7OQF81HGY' where id=4; -update noar tt set b0='SJEG65Q5XMVJDMSNIPE2PA4' where id=5; -update noar ti set b0='SJEG65Q5XMVJDMSNIPE2PA4' where id=5; -update noar tt set b1='X0LAU7QAE' where id=5; -update noar ti set b1='X0LAU7QAE' where id=5; -update noar tt set b2='VA4TZ0' where id=5; -update noar ti set b2='VA4TZ0' where id=5; -update noar tt set b0='S67IEBZ5VE9E6KXVN69C6IKBXNC79' where id=6; -update noar ti set b0='S67IEBZ5VE9E6KXVN69C6IKBXNC79' where id=6; -update noar tt set b1='JS1T1T9WUJ0ONCALCWXRIP61' where id=6; -update noar ti set b1='JS1T1T9WUJ0ONCALCWXRIP61' where id=6; -update noar tt set b2='41IM1TLAGJRUF' where id=6; -update noar ti set b2='41IM1TLAGJRUF' where id=6; -update noar tt set b0='O4B6EQJIG6YGTE24JBUE9USP8YCXAYO' where id=7; -update noar ti set b0='O4B6EQJIG6YGTE24JBUE9USP8YCXAYO' where id=7; -update noar tt set b1='M1AGL5R1WUX8VPH2PD07K9' where id=7; -update noar ti set b1='M1AGL5R1WUX8VPH2PD07K9' where id=7; -update noar tt set b2='56JGZ0WFQ0CO' where id=7; -update noar ti set b2='56JGZ0WFQ0CO' where id=7; -update noar tt set b0='98WQGN0SEA3KWPX9' where id=8; -update noar ti set b0='98WQGN0SEA3KWPX9' where id=8; -update noar tt set b1='M' where id=8; -update noar ti set b1='M' where id=8; -update noar tt set b2='CCMBWCMP8EBLDBROU87X51YJ0PFGQDQ' where id=8; -update noar ti set b2='CCMBWCMP8EBLDBROU87X51YJ0PFGQDQ' where id=8; -update noar tt set b0='7EZ975GBTEZ8WNXJLPAGT7DBHS38BI' where id=9; -update noar ti set b0='7EZ975GBTEZ8WNXJLPAGT7DBHS38BI' where id=9; -update noar tt set b1='31ZGLQA6MNJCMHWH' where id=9; -update noar ti set b1='31ZGLQA6MNJCMHWH' where id=9; -update noar tt set b2='V2HSZ2ARKWL9ELN' where id=9; -update noar ti set b2='V2HSZ2ARKWL9ELN' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 mediumblob null, - b1 blob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='7AKGPPU11NCCRVU' where id=1; -update noar ti set b0='7AKGPPU11NCCRVU' where id=1; -update noar tt set b1='6IFGUZKQ2QOVLP492MIQ1OGMLKX' where id=1; -update noar ti set b1='6IFGUZKQ2QOVLP492MIQ1OGMLKX' where id=1; -update noar tt set b2='82DX861HZI' where id=1; -update noar ti set b2='82DX861HZI' where id=1; -update noar tt set b0='SKZ2I5L' where id=2; -update noar ti set b0='SKZ2I5L' where id=2; -update noar tt set b1='P9' where id=2; -update noar ti set b1='P9' where id=2; -update noar tt set b2='S93P0NASDKH91NAD03EUP4IRN' where id=2; -update noar ti set b2='S93P0NASDKH91NAD03EUP4IRN' where id=2; -update noar tt set b0='XE8FRXQ7NQPYZ' where id=3; -update noar ti set b0='XE8FRXQ7NQPYZ' where id=3; -update noar tt set b1='9AX6HGJ9XXMMGOSR658RH8H6KU' where id=3; -update noar ti set b1='9AX6HGJ9XXMMGOSR658RH8H6KU' where id=3; -update noar tt set b2='HHEI5' where id=3; -update noar ti set b2='HHEI5' where id=3; -update noar tt set b0='CYKKBK7S7S7D' where id=4; -update noar ti set b0='CYKKBK7S7S7D' where id=4; -update noar tt set b1='1C67J3MPCG4NKAQ0KYLDYNY' where id=4; -update noar ti set b1='1C67J3MPCG4NKAQ0KYLDYNY' where id=4; -update noar tt set b2='FVTB3MJI5A4UZBLLVHEK26QJ8Y3606G' where id=4; -update noar ti set b2='FVTB3MJI5A4UZBLLVHEK26QJ8Y3606G' where id=4; -update noar tt set b0='F5AXCNHWHF831HHCO4' where id=5; -update noar ti set b0='F5AXCNHWHF831HHCO4' where id=5; -update noar tt set b1='4Y7L42E36MZT6DM49H66V3B4L' where id=5; -update noar ti set b1='4Y7L42E36MZT6DM49H66V3B4L' where id=5; -update noar tt set b2='P' where id=5; -update noar ti set b2='P' where id=5; -update noar tt set b0='GRX6JREF7TMQ1FLW8' where id=6; -update noar ti set b0='GRX6JREF7TMQ1FLW8' where id=6; -update noar tt set b1='4YC0XH6C8' where id=6; -update noar ti set b1='4YC0XH6C8' where id=6; -update noar tt set b2='C' where id=6; -update noar ti set b2='C' where id=6; -update noar tt set b0='ICYOVFN1IZ48H8RQQESGDHL1N4IXT' where id=7; -update noar ti set b0='ICYOVFN1IZ48H8RQQESGDHL1N4IXT' where id=7; -update noar tt set b1='N1OL87YNVZY17DE5XIUTMB9KLPTIIW' where id=7; -update noar ti set b1='N1OL87YNVZY17DE5XIUTMB9KLPTIIW' where id=7; -update noar tt set b2='0IPWNZQWWODVEFLHVHVUOZ4CDDOB1Z' where id=7; -update noar ti set b2='0IPWNZQWWODVEFLHVHVUOZ4CDDOB1Z' where id=7; -update noar tt set b0='2L540LSQDZ9D7' where id=8; -update noar ti set b0='2L540LSQDZ9D7' where id=8; -update noar tt set b1='4O69ZESBJCLEWZFHZBR3' where id=8; -update noar ti set b1='4O69ZESBJCLEWZFHZBR3' where id=8; -update noar tt set b2='J' where id=8; -update noar ti set b2='J' where id=8; -update noar tt set b0='RLJ7OMM5RG9NS3JU6JNGNDKS' where id=9; -update noar ti set b0='RLJ7OMM5RG9NS3JU6JNGNDKS' where id=9; -update noar tt set b1='BK3SQAX98YDFZG6C0YA6YRSNF0SE' where id=9; -update noar ti set b1='BK3SQAX98YDFZG6C0YA6YRSNF0SE' where id=9; -update noar tt set b2='3G5AHBMBABMFAYASK1S8P18' where id=9; -update noar ti set b2='3G5AHBMBABMFAYASK1S8P18' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 mediumblob not null, - b1 blob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='O91C7UOF2' where id=1; -update noar ti set b0='O91C7UOF2' where id=1; -update noar tt set b1='FDOELIS4SXL88' where id=1; -update noar ti set b1='FDOELIS4SXL88' where id=1; -update noar tt set b2='KETCLYBDCEUP4UX6DUV8JXAY' where id=1; -update noar ti set b2='KETCLYBDCEUP4UX6DUV8JXAY' where id=1; -update noar tt set b0='FVS8NGVZS3NS1C' where id=2; -update noar ti set b0='FVS8NGVZS3NS1C' where id=2; -update noar tt set b1='18RUXF2PF' where id=2; -update noar ti set b1='18RUXF2PF' where id=2; -update noar tt set b2='NAO' where id=2; -update noar ti set b2='NAO' where id=2; -update noar tt set b0='KHPPOP8K1F0OK9Z' where id=3; -update noar ti set b0='KHPPOP8K1F0OK9Z' where id=3; -update noar tt set b1='L7TEXY6O2G' where id=3; -update noar ti set b1='L7TEXY6O2G' where id=3; -update noar tt set b2='K6J6MY4ISE3' where id=3; -update noar ti set b2='K6J6MY4ISE3' where id=3; -update noar tt set b0='NVHHMT6GV0WN' where id=4; -update noar ti set b0='NVHHMT6GV0WN' where id=4; -update noar tt set b1='FP65XW87J8RLCQ7EQP' where id=4; -update noar ti set b1='FP65XW87J8RLCQ7EQP' where id=4; -update noar tt set b2='63CIMN' where id=4; -update noar ti set b2='63CIMN' where id=4; -update noar tt set b0='TRP2PJEMO' where id=5; -update noar ti set b0='TRP2PJEMO' where id=5; -update noar tt set b1='I2HA' where id=5; -update noar ti set b1='I2HA' where id=5; -update noar tt set b2='42XNK4KW1' where id=5; -update noar ti set b2='42XNK4KW1' where id=5; -update noar tt set b0='W3U' where id=6; -update noar ti set b0='W3U' where id=6; -update noar tt set b1='ALQ8C4RHKDP9NFX8561SJGJ' where id=6; -update noar ti set b1='ALQ8C4RHKDP9NFX8561SJGJ' where id=6; -update noar tt set b2='DGE1WSFZIPJ5AL' where id=6; -update noar ti set b2='DGE1WSFZIPJ5AL' where id=6; -update noar tt set b0='NLW2JZHCG3PM1TWA5' where id=7; -update noar ti set b0='NLW2JZHCG3PM1TWA5' where id=7; -update noar tt set b1='9999KA9DY' where id=7; -update noar ti set b1='9999KA9DY' where id=7; -update noar tt set b2='XELOLNNA' where id=7; -update noar ti set b2='XELOLNNA' where id=7; -update noar tt set b0='NQYSBME4MRMEIL1T5AG4QEDES0TUOSI5' where id=8; -update noar ti set b0='NQYSBME4MRMEIL1T5AG4QEDES0TUOSI5' where id=8; -update noar tt set b1='B8SH6SJLUCZ3CVFKX7' where id=8; -update noar ti set b1='B8SH6SJLUCZ3CVFKX7' where id=8; -update noar tt set b2='S5UK' where id=8; -update noar ti set b2='S5UK' where id=8; -update noar tt set b0='J24J15XUVQ4TWAYJZO3E9OF6UHT96' where id=9; -update noar ti set b0='J24J15XUVQ4TWAYJZO3E9OF6UHT96' where id=9; -update noar tt set b1='P40V3QGZKN2IWXVEVDZJD18SD237U6N' where id=9; -update noar ti set b1='P40V3QGZKN2IWXVEVDZJD18SD237U6N' where id=9; -update noar tt set b2='V1L0KAX6TW70B3U3HH4989AIQL' where id=9; -update noar ti set b2='V1L0KAX6TW70B3U3HH4989AIQL' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 mediumblob null, - b1 blob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='3X26JF2IKOEJXR8RI8SJD4K1RQTZL77' where id=1; -update noar ti set b0='3X26JF2IKOEJXR8RI8SJD4K1RQTZL77' where id=1; -update noar tt set b1='1H89K0' where id=1; -update noar ti set b1='1H89K0' where id=1; -update noar tt set b2='AEBSTU3QJ7J' where id=1; -update noar ti set b2='AEBSTU3QJ7J' where id=1; -update noar tt set b0='IOVPXM9H' where id=2; -update noar ti set b0='IOVPXM9H' where id=2; -update noar tt set b1='DB03N79WJTM2' where id=2; -update noar ti set b1='DB03N79WJTM2' where id=2; -update noar tt set b2='6YZ' where id=2; -update noar ti set b2='6YZ' where id=2; -update noar tt set b0='MZBW4' where id=3; -update noar ti set b0='MZBW4' where id=3; -update noar tt set b1='VMGNKDF879CIPWM' where id=3; -update noar ti set b1='VMGNKDF879CIPWM' where id=3; -update noar tt set b2='9TAQQZ3YLFC8BZFSFP0OMH18E89QR2' where id=3; -update noar ti set b2='9TAQQZ3YLFC8BZFSFP0OMH18E89QR2' where id=3; -update noar tt set b0='QKALGN8UWXN5HK' where id=4; -update noar ti set b0='QKALGN8UWXN5HK' where id=4; -update noar tt set b1='DPYQX3EAGFPK3V09JGI3KOGNVSH3' where id=4; -update noar ti set b1='DPYQX3EAGFPK3V09JGI3KOGNVSH3' where id=4; -update noar tt set b2='XL9I080FF1ZPPQE1XXFXKTM14ETEU7R8' where id=4; -update noar ti set b2='XL9I080FF1ZPPQE1XXFXKTM14ETEU7R8' where id=4; -update noar tt set b0='LICZX7Z6L3UN9FGWFZMWA5' where id=5; -update noar ti set b0='LICZX7Z6L3UN9FGWFZMWA5' where id=5; -update noar tt set b1='W5HCDPWAYHRNLLEO' where id=5; -update noar ti set b1='W5HCDPWAYHRNLLEO' where id=5; -update noar tt set b2='Q38DFVLCJZWIS' where id=5; -update noar ti set b2='Q38DFVLCJZWIS' where id=5; -update noar tt set b0='XCWFUJEO7WH7I582SLGQMFOPAWSH' where id=6; -update noar ti set b0='XCWFUJEO7WH7I582SLGQMFOPAWSH' where id=6; -update noar tt set b1='W5TW0ZVH2KJJ9EM' where id=6; -update noar ti set b1='W5TW0ZVH2KJJ9EM' where id=6; -update noar tt set b2='3UQ32GZEYCEJR1F6GZ9D20Y4F' where id=6; -update noar ti set b2='3UQ32GZEYCEJR1F6GZ9D20Y4F' where id=6; -update noar tt set b0='VWA2Z4A7RG3LUMQSOACV8' where id=7; -update noar ti set b0='VWA2Z4A7RG3LUMQSOACV8' where id=7; -update noar tt set b1='74OBJ3' where id=7; -update noar ti set b1='74OBJ3' where id=7; -update noar tt set b2='DQ2FS82GDOWDKLFGT36X8Z3WBY5NHFZ' where id=7; -update noar ti set b2='DQ2FS82GDOWDKLFGT36X8Z3WBY5NHFZ' where id=7; -update noar tt set b0='847XT' where id=8; -update noar ti set b0='847XT' where id=8; -update noar tt set b1='DEFNGHAXTWVF7T5CFXD1YZIBXFWOE' where id=8; -update noar ti set b1='DEFNGHAXTWVF7T5CFXD1YZIBXFWOE' where id=8; -update noar tt set b2='I8Y94A9M12EE2PA8KH4LDCP' where id=8; -update noar ti set b2='I8Y94A9M12EE2PA8KH4LDCP' where id=8; -update noar tt set b0='6IWV2H0OSVESQUNFNIDM8SHM99MSEJG' where id=9; -update noar ti set b0='6IWV2H0OSVESQUNFNIDM8SHM99MSEJG' where id=9; -update noar tt set b1='X95F5RRP6BQRCL9ZGTR9FW' where id=9; -update noar ti set b1='X95F5RRP6BQRCL9ZGTR9FW' where id=9; -update noar tt set b2='EZ7MCODQ4T370IYQK0Q3Z4GE1TY4' where id=9; -update noar ti set b2='EZ7MCODQ4T370IYQK0Q3Z4GE1TY4' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 mediumblob not null, - b1 blob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='EJAYT73EFQF0JXCSHI6FCN68I' where id=1; -update noar ti set b0='EJAYT73EFQF0JXCSHI6FCN68I' where id=1; -update noar tt set b1='IZ4DWL82DMXQWHO39WJ' where id=1; -update noar ti set b1='IZ4DWL82DMXQWHO39WJ' where id=1; -update noar tt set b2='SW9AN82TRMA3O2' where id=1; -update noar ti set b2='SW9AN82TRMA3O2' where id=1; -update noar tt set b0='WJJ0LQEQMCCLZ3CYQOFAQM9RCQE2S5QK' where id=2; -update noar ti set b0='WJJ0LQEQMCCLZ3CYQOFAQM9RCQE2S5QK' where id=2; -update noar tt set b1='IKUX9' where id=2; -update noar ti set b1='IKUX9' where id=2; -update noar tt set b2='TBKO9S9YME5VMUMNM' where id=2; -update noar ti set b2='TBKO9S9YME5VMUMNM' where id=2; -update noar tt set b0='V4K0MSWCYRKVLAR1SDGD6VI8UIB6WKTV' where id=3; -update noar ti set b0='V4K0MSWCYRKVLAR1SDGD6VI8UIB6WKTV' where id=3; -update noar tt set b1='82DRWXJLWU0' where id=3; -update noar ti set b1='82DRWXJLWU0' where id=3; -update noar tt set b2='7CJLP30J0DEZ8DHXY9QL0REB1IP6C7' where id=3; -update noar ti set b2='7CJLP30J0DEZ8DHXY9QL0REB1IP6C7' where id=3; -update noar tt set b0='2W1KES6ZG' where id=4; -update noar ti set b0='2W1KES6ZG' where id=4; -update noar tt set b1='H6S8HZOE1OC12DLH' where id=4; -update noar ti set b1='H6S8HZOE1OC12DLH' where id=4; -update noar tt set b2='4KCV' where id=4; -update noar ti set b2='4KCV' where id=4; -update noar tt set b0='E1D1' where id=5; -update noar ti set b0='E1D1' where id=5; -update noar tt set b1='6R93XA7P7XS56BN9RE7L8CVU30UN6' where id=5; -update noar ti set b1='6R93XA7P7XS56BN9RE7L8CVU30UN6' where id=5; -update noar tt set b2='12D8WBNCCKT4VDTFTN2OUY41VKL' where id=5; -update noar ti set b2='12D8WBNCCKT4VDTFTN2OUY41VKL' where id=5; -update noar tt set b0='7AAB27VV' where id=6; -update noar ti set b0='7AAB27VV' where id=6; -update noar tt set b1='6JJVG4X4O9GG' where id=6; -update noar ti set b1='6JJVG4X4O9GG' where id=6; -update noar tt set b2='UUJW9L1LQUN0V6CBPPYYKL' where id=6; -update noar ti set b2='UUJW9L1LQUN0V6CBPPYYKL' where id=6; -update noar tt set b0='H7LKPK14' where id=7; -update noar ti set b0='H7LKPK14' where id=7; -update noar tt set b1='NNIC' where id=7; -update noar ti set b1='NNIC' where id=7; -update noar tt set b2='912R7JF3SGDANWMX' where id=7; -update noar ti set b2='912R7JF3SGDANWMX' where id=7; -update noar tt set b0='WR68BE4JVU9LR75NRIORVNL2' where id=8; -update noar ti set b0='WR68BE4JVU9LR75NRIORVNL2' where id=8; -update noar tt set b1='VI5' where id=8; -update noar ti set b1='VI5' where id=8; -update noar tt set b2='N3PA4V290N1' where id=8; -update noar ti set b2='N3PA4V290N1' where id=8; -update noar tt set b0='C1SFTQNYT6CYT21WLXUJCYIMF6' where id=9; -update noar ti set b0='C1SFTQNYT6CYT21WLXUJCYIMF6' where id=9; -update noar tt set b1='TN13NYRJ' where id=9; -update noar ti set b1='TN13NYRJ' where id=9; -update noar tt set b2='D6ZM8YMGN8DKA0669II8' where id=9; -update noar ti set b2='D6ZM8YMGN8DKA0669II8' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 mediumblob null, - b1 blob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='1' where id=1; -update noar ti set b0='1' where id=1; -update noar tt set b1='L0N' where id=1; -update noar ti set b1='L0N' where id=1; -update noar tt set b2='AQQKVUJ9J' where id=1; -update noar ti set b2='AQQKVUJ9J' where id=1; -update noar tt set b0='E1PEZCW' where id=2; -update noar ti set b0='E1PEZCW' where id=2; -update noar tt set b1='4XBXLQHGD8YVSEQH88' where id=2; -update noar ti set b1='4XBXLQHGD8YVSEQH88' where id=2; -update noar tt set b2='QRLE9CRZAW0CP0CZK75' where id=2; -update noar ti set b2='QRLE9CRZAW0CP0CZK75' where id=2; -update noar tt set b0='4DWWUJ8FIP4H7C08QLID9' where id=3; -update noar ti set b0='4DWWUJ8FIP4H7C08QLID9' where id=3; -update noar tt set b1='ZWN0ARCSA4EBX52BLK36QVDRNDK7O3CW' where id=3; -update noar ti set b1='ZWN0ARCSA4EBX52BLK36QVDRNDK7O3CW' where id=3; -update noar tt set b2='Z' where id=3; -update noar ti set b2='Z' where id=3; -update noar tt set b0='UZNR324660DTPQ' where id=4; -update noar ti set b0='UZNR324660DTPQ' where id=4; -update noar tt set b1='ULR0Z' where id=4; -update noar ti set b1='ULR0Z' where id=4; -update noar tt set b2='S0WF13' where id=4; -update noar ti set b2='S0WF13' where id=4; -update noar tt set b0='YBO0YM' where id=5; -update noar ti set b0='YBO0YM' where id=5; -update noar tt set b1='GB4FX7AVD' where id=5; -update noar ti set b1='GB4FX7AVD' where id=5; -update noar tt set b2='WZX9U35NHLDLV4NK1ND1PL35A' where id=5; -update noar ti set b2='WZX9U35NHLDLV4NK1ND1PL35A' where id=5; -update noar tt set b0='9QSDYIK0X9N2SC' where id=6; -update noar ti set b0='9QSDYIK0X9N2SC' where id=6; -update noar tt set b1='W818Y' where id=6; -update noar ti set b1='W818Y' where id=6; -update noar tt set b2='KC7UY55SPKOJ' where id=6; -update noar ti set b2='KC7UY55SPKOJ' where id=6; -update noar tt set b0='THR6G359C' where id=7; -update noar ti set b0='THR6G359C' where id=7; -update noar tt set b1='9C6H4G78JPKM' where id=7; -update noar ti set b1='9C6H4G78JPKM' where id=7; -update noar tt set b2='8S9TGUB85I60MCM9' where id=7; -update noar ti set b2='8S9TGUB85I60MCM9' where id=7; -update noar tt set b0='TDL' where id=8; -update noar ti set b0='TDL' where id=8; -update noar tt set b1='85THFM0SKT34ARK2H1U3FIK72D9' where id=8; -update noar ti set b1='85THFM0SKT34ARK2H1U3FIK72D9' where id=8; -update noar tt set b2='7Y8X23H2FTD2T786JSW1R47PDBYFQ' where id=8; -update noar ti set b2='7Y8X23H2FTD2T786JSW1R47PDBYFQ' where id=8; -update noar tt set b0='S3Z15XFEBPYEW2NZM' where id=9; -update noar ti set b0='S3Z15XFEBPYEW2NZM' where id=9; -update noar tt set b1='R' where id=9; -update noar ti set b1='R' where id=9; -update noar tt set b2='QWIRW1T84WI9KTZ0W20Y2' where id=9; -update noar ti set b2='QWIRW1T84WI9KTZ0W20Y2' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 mediumblob not null, - b1 blob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='22WZ3FQ0ZUBMHZV9' where id=1; -update noar ti set b0='22WZ3FQ0ZUBMHZV9' where id=1; -update noar tt set b1='RSR1JAJDTRHLXTSGXJZ6WQTZHUGC' where id=1; -update noar ti set b1='RSR1JAJDTRHLXTSGXJZ6WQTZHUGC' where id=1; -update noar tt set b2='C3KE1GRUKMX24YJ207NB0BFIGLCOJ4F' where id=1; -update noar ti set b2='C3KE1GRUKMX24YJ207NB0BFIGLCOJ4F' where id=1; -update noar tt set b0='K09S3DYTK7MY7GAF' where id=2; -update noar ti set b0='K09S3DYTK7MY7GAF' where id=2; -update noar tt set b1='6EQHPW' where id=2; -update noar ti set b1='6EQHPW' where id=2; -update noar tt set b2='C6TNIL' where id=2; -update noar ti set b2='C6TNIL' where id=2; -update noar tt set b0='CVC79L9RD8S6WHRYUKWBIB08' where id=3; -update noar ti set b0='CVC79L9RD8S6WHRYUKWBIB08' where id=3; -update noar tt set b1='9P6JZ6B9LP9EQ6H' where id=3; -update noar ti set b1='9P6JZ6B9LP9EQ6H' where id=3; -update noar tt set b2='LTR15JO1CM5LLVKS7TDVYLFG8I79ZA' where id=3; -update noar ti set b2='LTR15JO1CM5LLVKS7TDVYLFG8I79ZA' where id=3; -update noar tt set b0='CJ3ECLJKIC73ZSX' where id=4; -update noar ti set b0='CJ3ECLJKIC73ZSX' where id=4; -update noar tt set b1='MI60P6L28O1D0UQ9NPW6XDLSA67FPO85' where id=4; -update noar ti set b1='MI60P6L28O1D0UQ9NPW6XDLSA67FPO85' where id=4; -update noar tt set b2='CQEZH6R6A9IH00WEK8JASF5PD0' where id=4; -update noar ti set b2='CQEZH6R6A9IH00WEK8JASF5PD0' where id=4; -update noar tt set b0='PQBFU01JRLDBRP5' where id=5; -update noar ti set b0='PQBFU01JRLDBRP5' where id=5; -update noar tt set b1='ZAWCQ9NOHB7' where id=5; -update noar ti set b1='ZAWCQ9NOHB7' where id=5; -update noar tt set b2='ACAAP0DFRUASTFUWJKIKAG' where id=5; -update noar ti set b2='ACAAP0DFRUASTFUWJKIKAG' where id=5; -update noar tt set b0='NH2TH' where id=6; -update noar ti set b0='NH2TH' where id=6; -update noar tt set b1='SEMC3JGTY5ET8PRRTMMR0TYJ' where id=6; -update noar ti set b1='SEMC3JGTY5ET8PRRTMMR0TYJ' where id=6; -update noar tt set b2='I0TOS1V1SM' where id=6; -update noar ti set b2='I0TOS1V1SM' where id=6; -update noar tt set b0='7V30E5Q' where id=7; -update noar ti set b0='7V30E5Q' where id=7; -update noar tt set b1='SX' where id=7; -update noar ti set b1='SX' where id=7; -update noar tt set b2='Q0IG' where id=7; -update noar ti set b2='Q0IG' where id=7; -update noar tt set b0='9AYRVW331LKLZ' where id=8; -update noar ti set b0='9AYRVW331LKLZ' where id=8; -update noar tt set b1='1Z7WEU11JK9S4QS21GZV' where id=8; -update noar ti set b1='1Z7WEU11JK9S4QS21GZV' where id=8; -update noar tt set b2='2Q78XXOA' where id=8; -update noar ti set b2='2Q78XXOA' where id=8; -update noar tt set b0='7R' where id=9; -update noar ti set b0='7R' where id=9; -update noar tt set b1='QSC' where id=9; -update noar ti set b1='QSC' where id=9; -update noar tt set b2='4A2DJWOV1UP6BE59HQ' where id=9; -update noar ti set b2='4A2DJWOV1UP6BE59HQ' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 mediumblob null, - b1 blob null, - b2 text null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='MSIMS2NJBQ6G' where id=1; -update noar ti set b0='MSIMS2NJBQ6G' where id=1; -update noar tt set b1='Y5IIO7KZ46GNNTAX5XNBF8SWL2BPKFT' where id=1; -update noar ti set b1='Y5IIO7KZ46GNNTAX5XNBF8SWL2BPKFT' where id=1; -update noar tt set b2='SPCOX5B8PCDRZ49S' where id=1; -update noar ti set b2='SPCOX5B8PCDRZ49S' where id=1; -update noar tt set b0='KM5F7FYPG24L46MRK5DVAH' where id=2; -update noar ti set b0='KM5F7FYPG24L46MRK5DVAH' where id=2; -update noar tt set b1='V6R5EMQB' where id=2; -update noar ti set b1='V6R5EMQB' where id=2; -update noar tt set b2='XAY2Q60TILQGUZSILTC7YXP' where id=2; -update noar ti set b2='XAY2Q60TILQGUZSILTC7YXP' where id=2; -update noar tt set b0='VMHYRIMI5XQKQ1TMZAEA20' where id=3; -update noar ti set b0='VMHYRIMI5XQKQ1TMZAEA20' where id=3; -update noar tt set b1='0FZF4RH7GEFW6U232Y' where id=3; -update noar ti set b1='0FZF4RH7GEFW6U232Y' where id=3; -update noar tt set b2='Q3MMINMGRD7PCYZMQL89VY6T' where id=3; -update noar ti set b2='Q3MMINMGRD7PCYZMQL89VY6T' where id=3; -update noar tt set b0='UPO2F4KASA7POVOGHMFU' where id=4; -update noar ti set b0='UPO2F4KASA7POVOGHMFU' where id=4; -update noar tt set b1='4ASTYO' where id=4; -update noar ti set b1='4ASTYO' where id=4; -update noar tt set b2='V5FT7N4F2N2F2SE37RQIT3YK' where id=4; -update noar ti set b2='V5FT7N4F2N2F2SE37RQIT3YK' where id=4; -update noar tt set b0='UMY5ONQU217ZGJZLU097' where id=5; -update noar ti set b0='UMY5ONQU217ZGJZLU097' where id=5; -update noar tt set b1='PSIFNNQIUM2YS4ITLEMXXZ92K' where id=5; -update noar ti set b1='PSIFNNQIUM2YS4ITLEMXXZ92K' where id=5; -update noar tt set b2='TCFFM6RBB6M1XOLMIUW' where id=5; -update noar ti set b2='TCFFM6RBB6M1XOLMIUW' where id=5; -update noar tt set b0='82JBQJR5KY7VHPDLR6W5' where id=6; -update noar ti set b0='82JBQJR5KY7VHPDLR6W5' where id=6; -update noar tt set b1='DME03HOM3Z9XOMCT53FT2T' where id=6; -update noar ti set b1='DME03HOM3Z9XOMCT53FT2T' where id=6; -update noar tt set b2='O5R4TX3ORZR1' where id=6; -update noar ti set b2='O5R4TX3ORZR1' where id=6; -update noar tt set b0='SLP' where id=7; -update noar ti set b0='SLP' where id=7; -update noar tt set b1='DYCNPMKRY12UGG9Y02AP8E2Y' where id=7; -update noar ti set b1='DYCNPMKRY12UGG9Y02AP8E2Y' where id=7; -update noar tt set b2='FFNU' where id=7; -update noar ti set b2='FFNU' where id=7; -update noar tt set b0='S8G07KK16CPD0KMT054BQQX4BQV' where id=8; -update noar ti set b0='S8G07KK16CPD0KMT054BQQX4BQV' where id=8; -update noar tt set b1='HB2H5C7HI01TZ4KNXIFKVF0ZCL' where id=8; -update noar ti set b1='HB2H5C7HI01TZ4KNXIFKVF0ZCL' where id=8; -update noar tt set b2='9JSROBS45G4M878HRRYDLAYS' where id=8; -update noar ti set b2='9JSROBS45G4M878HRRYDLAYS' where id=8; -update noar tt set b0='ZUD7W4N1ATN' where id=9; -update noar ti set b0='ZUD7W4N1ATN' where id=9; -update noar tt set b1='7D7MPVZ7LIJY41ANQPC83APJM' where id=9; -update noar ti set b1='7D7MPVZ7LIJY41ANQPC83APJM' where id=9; -update noar tt set b2='7E83N26' where id=9; -update noar ti set b2='7E83N26' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 mediumblob not null, - b1 blob not null, - b2 text not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='P' where id=1; -update noar ti set b0='P' where id=1; -update noar tt set b1='P5GXUISHA' where id=1; -update noar ti set b1='P5GXUISHA' where id=1; -update noar tt set b2='AMKV' where id=1; -update noar ti set b2='AMKV' where id=1; -update noar tt set b0='1M' where id=2; -update noar ti set b0='1M' where id=2; -update noar tt set b1='ZLEERLPLTTANHGEC1' where id=2; -update noar ti set b1='ZLEERLPLTTANHGEC1' where id=2; -update noar tt set b2='E9MAJQCI94PY45VT1HU1782Y11O' where id=2; -update noar ti set b2='E9MAJQCI94PY45VT1HU1782Y11O' where id=2; -update noar tt set b0='Z4S528S2502' where id=3; -update noar ti set b0='Z4S528S2502' where id=3; -update noar tt set b1='2V7M3LQPCA5R4K1KMZ421RD' where id=3; -update noar ti set b1='2V7M3LQPCA5R4K1KMZ421RD' where id=3; -update noar tt set b2='SP0RNMDX0NFV1K' where id=3; -update noar ti set b2='SP0RNMDX0NFV1K' where id=3; -update noar tt set b0='GXA0MTKXAS9S26FODNE' where id=4; -update noar ti set b0='GXA0MTKXAS9S26FODNE' where id=4; -update noar tt set b1='2UE2V5MBC' where id=4; -update noar ti set b1='2UE2V5MBC' where id=4; -update noar tt set b2='91U6BU5TSUXJN35WXO4U872K3' where id=4; -update noar ti set b2='91U6BU5TSUXJN35WXO4U872K3' where id=4; -update noar tt set b0='FDRN6' where id=5; -update noar ti set b0='FDRN6' where id=5; -update noar tt set b1='UUBC4ORQHCTQP1' where id=5; -update noar ti set b1='UUBC4ORQHCTQP1' where id=5; -update noar tt set b2='27NP2S41' where id=5; -update noar ti set b2='27NP2S41' where id=5; -update noar tt set b0='7' where id=6; -update noar ti set b0='7' where id=6; -update noar tt set b1='QM84AD1VSB556AWDB03WYCUJ' where id=6; -update noar ti set b1='QM84AD1VSB556AWDB03WYCUJ' where id=6; -update noar tt set b2='2S4DPYHBAX4EOLDX0RMWIOK' where id=6; -update noar ti set b2='2S4DPYHBAX4EOLDX0RMWIOK' where id=6; -update noar tt set b0='QD' where id=7; -update noar ti set b0='QD' where id=7; -update noar tt set b1='28CGS888QNM6Z99UNARO' where id=7; -update noar ti set b1='28CGS888QNM6Z99UNARO' where id=7; -update noar tt set b2='MVLD78E1J' where id=7; -update noar ti set b2='MVLD78E1J' where id=7; -update noar tt set b0='LJ66FSSAA170ELUMEPIWZP0OZ8P2DUL' where id=8; -update noar ti set b0='LJ66FSSAA170ELUMEPIWZP0OZ8P2DUL' where id=8; -update noar tt set b1='GDNJAHWG' where id=8; -update noar ti set b1='GDNJAHWG' where id=8; -update noar tt set b2='LGD' where id=8; -update noar ti set b2='LGD' where id=8; -update noar tt set b0='Y0P4H' where id=9; -update noar ti set b0='Y0P4H' where id=9; -update noar tt set b1='F2QNF3D1BQGC' where id=9; -update noar ti set b1='F2QNF3D1BQGC' where id=9; -update noar tt set b2='ZJPHA58THT4GPYHW6MNEH5CBJ0' where id=9; -update noar ti set b2='ZJPHA58THT4GPYHW6MNEH5CBJ0' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 mediumblob null, - b1 mediumblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='346' where id=1; -update noar ti set b0='346' where id=1; -update noar tt set b1='84P9J' where id=1; -update noar ti set b1='84P9J' where id=1; -update noar tt set b2='IQWRE' where id=1; -update noar ti set b2='IQWRE' where id=1; -update noar tt set b0='H2W8A0RDIBPXG6O0U2U3E4R224' where id=2; -update noar ti set b0='H2W8A0RDIBPXG6O0U2U3E4R224' where id=2; -update noar tt set b1='P450GN9OV9' where id=2; -update noar ti set b1='P450GN9OV9' where id=2; -update noar tt set b2='KQ5M' where id=2; -update noar ti set b2='KQ5M' where id=2; -update noar tt set b0='JW4F0728JTXKM5LS3MJM3ZDKP6YKQU' where id=3; -update noar ti set b0='JW4F0728JTXKM5LS3MJM3ZDKP6YKQU' where id=3; -update noar tt set b1='T274QNQKO7Z86FJP42CE3XQ3DR5AES' where id=3; -update noar ti set b1='T274QNQKO7Z86FJP42CE3XQ3DR5AES' where id=3; -update noar tt set b2='4J' where id=3; -update noar ti set b2='4J' where id=3; -update noar tt set b0='9EFS5L36GAFM' where id=4; -update noar ti set b0='9EFS5L36GAFM' where id=4; -update noar tt set b1='D2UJVNS01272WL' where id=4; -update noar ti set b1='D2UJVNS01272WL' where id=4; -update noar tt set b2='7H8S2RDEH56IK9IJ6WMK6B1W77' where id=4; -update noar ti set b2='7H8S2RDEH56IK9IJ6WMK6B1W77' where id=4; -update noar tt set b0='WEU7FNNNUOW5FC' where id=5; -update noar ti set b0='WEU7FNNNUOW5FC' where id=5; -update noar tt set b1='VJLDG5FDJR41ZVYK' where id=5; -update noar ti set b1='VJLDG5FDJR41ZVYK' where id=5; -update noar tt set b2='505CKWK5SYJ1H33XP8YE4A9' where id=5; -update noar ti set b2='505CKWK5SYJ1H33XP8YE4A9' where id=5; -update noar tt set b0='VE4C61TWA5J5CM6' where id=6; -update noar ti set b0='VE4C61TWA5J5CM6' where id=6; -update noar tt set b1='W' where id=6; -update noar ti set b1='W' where id=6; -update noar tt set b2='9IM9MHLNVEJLORYR2' where id=6; -update noar ti set b2='9IM9MHLNVEJLORYR2' where id=6; -update noar tt set b0='PRJ18M7J9BOG7YE' where id=7; -update noar ti set b0='PRJ18M7J9BOG7YE' where id=7; -update noar tt set b1='LFTA28KX75B9TPTWXFG4Q' where id=7; -update noar ti set b1='LFTA28KX75B9TPTWXFG4Q' where id=7; -update noar tt set b2='LHVJ7NXTRNOKGBMDEWJQ' where id=7; -update noar ti set b2='LHVJ7NXTRNOKGBMDEWJQ' where id=7; -update noar tt set b0='BG9I68B' where id=8; -update noar ti set b0='BG9I68B' where id=8; -update noar tt set b1='ISCD8G04JC794SIL3LX8MLI7' where id=8; -update noar ti set b1='ISCD8G04JC794SIL3LX8MLI7' where id=8; -update noar tt set b2='DG' where id=8; -update noar ti set b2='DG' where id=8; -update noar tt set b0='YGKP2NRFBRT84' where id=9; -update noar ti set b0='YGKP2NRFBRT84' where id=9; -update noar tt set b1='03VF' where id=9; -update noar ti set b1='03VF' where id=9; -update noar tt set b2='90UQKJYBNHND17GAR' where id=9; -update noar ti set b2='90UQKJYBNHND17GAR' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 mediumblob not null, - b1 mediumblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='6YRU50V3ATPC501BOQVTXL8868L52' where id=1; -update noar ti set b0='6YRU50V3ATPC501BOQVTXL8868L52' where id=1; -update noar tt set b1='08BIC1P1Q' where id=1; -update noar ti set b1='08BIC1P1Q' where id=1; -update noar tt set b2='QPDNDN7EYKKAHIJT0VRSGTUWDP06QHQ8' where id=1; -update noar ti set b2='QPDNDN7EYKKAHIJT0VRSGTUWDP06QHQ8' where id=1; -update noar tt set b0='NKZDG9CXZA' where id=2; -update noar ti set b0='NKZDG9CXZA' where id=2; -update noar tt set b1='BG825UXM2D' where id=2; -update noar ti set b1='BG825UXM2D' where id=2; -update noar tt set b2='K2NJILYK234B' where id=2; -update noar ti set b2='K2NJILYK234B' where id=2; -update noar tt set b0='15NIC8087P5' where id=3; -update noar ti set b0='15NIC8087P5' where id=3; -update noar tt set b1='B8YX3XP' where id=3; -update noar ti set b1='B8YX3XP' where id=3; -update noar tt set b2='CRDN503VDT' where id=3; -update noar ti set b2='CRDN503VDT' where id=3; -update noar tt set b0='AYT6AIF9FWQVV' where id=4; -update noar ti set b0='AYT6AIF9FWQVV' where id=4; -update noar tt set b1='E6O0' where id=4; -update noar ti set b1='E6O0' where id=4; -update noar tt set b2='OQ6A2BIUO3SVK0PD0OJ8DEFSXPUHUE' where id=4; -update noar ti set b2='OQ6A2BIUO3SVK0PD0OJ8DEFSXPUHUE' where id=4; -update noar tt set b0='P1LP9441U28B3EUW6CGMYACKB0' where id=5; -update noar ti set b0='P1LP9441U28B3EUW6CGMYACKB0' where id=5; -update noar tt set b1='YMP9WH9TM5VO2S0GEMK76P76H9MZ' where id=5; -update noar ti set b1='YMP9WH9TM5VO2S0GEMK76P76H9MZ' where id=5; -update noar tt set b2='BDIH' where id=5; -update noar ti set b2='BDIH' where id=5; -update noar tt set b0='1SDQR5' where id=6; -update noar ti set b0='1SDQR5' where id=6; -update noar tt set b1='0X9NCUXZIG22B5' where id=6; -update noar ti set b1='0X9NCUXZIG22B5' where id=6; -update noar tt set b2='TOUZPMSNGRWDR' where id=6; -update noar ti set b2='TOUZPMSNGRWDR' where id=6; -update noar tt set b0='CPO187XAHQEGW1S1FDAZDSPYQ' where id=7; -update noar ti set b0='CPO187XAHQEGW1S1FDAZDSPYQ' where id=7; -update noar tt set b1='3QIV1PEBAB0L' where id=7; -update noar ti set b1='3QIV1PEBAB0L' where id=7; -update noar tt set b2='GMMB0GKL315' where id=7; -update noar ti set b2='GMMB0GKL315' where id=7; -update noar tt set b0='RS13W6Z1AUXR' where id=8; -update noar ti set b0='RS13W6Z1AUXR' where id=8; -update noar tt set b1='4Z2H3V52XRMAUMY763NOO3GV' where id=8; -update noar ti set b1='4Z2H3V52XRMAUMY763NOO3GV' where id=8; -update noar tt set b2='GIW1FTH8TB' where id=8; -update noar ti set b2='GIW1FTH8TB' where id=8; -update noar tt set b0='92G26S3NU86O7DGGURQ71' where id=9; -update noar ti set b0='92G26S3NU86O7DGGURQ71' where id=9; -update noar tt set b1='K5R79G5VTHRSCP' where id=9; -update noar ti set b1='K5R79G5VTHRSCP' where id=9; -update noar tt set b2='2TOUXTX37XZ7W6Q' where id=9; -update noar ti set b2='2TOUXTX37XZ7W6Q' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 mediumblob null, - b1 mediumblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='K20XMQ5ICM14FF' where id=1; -update noar ti set b0='K20XMQ5ICM14FF' where id=1; -update noar tt set b1='0NR' where id=1; -update noar ti set b1='0NR' where id=1; -update noar tt set b2='YKOUNOC' where id=1; -update noar ti set b2='YKOUNOC' where id=1; -update noar tt set b0='2CT8R' where id=2; -update noar ti set b0='2CT8R' where id=2; -update noar tt set b1='TZYUMDD' where id=2; -update noar ti set b1='TZYUMDD' where id=2; -update noar tt set b2='O4MWZJS' where id=2; -update noar ti set b2='O4MWZJS' where id=2; -update noar tt set b0='3K8UTRHBGC352I4A9ZL4OTCY2P' where id=3; -update noar ti set b0='3K8UTRHBGC352I4A9ZL4OTCY2P' where id=3; -update noar tt set b1='YFA5ZHPQNH4SIXSM5J5B5JC6NOS4JCH9' where id=3; -update noar ti set b1='YFA5ZHPQNH4SIXSM5J5B5JC6NOS4JCH9' where id=3; -update noar tt set b2='0Y478KRDRJM5E9HUGFQW83415' where id=3; -update noar ti set b2='0Y478KRDRJM5E9HUGFQW83415' where id=3; -update noar tt set b0='89V0' where id=4; -update noar ti set b0='89V0' where id=4; -update noar tt set b1='YOCMJQV9DMNGBXH6L' where id=4; -update noar ti set b1='YOCMJQV9DMNGBXH6L' where id=4; -update noar tt set b2='6KRBZ6KSR3K1UH327XJ8RXRM' where id=4; -update noar ti set b2='6KRBZ6KSR3K1UH327XJ8RXRM' where id=4; -update noar tt set b0='7M6EI4TJBNVQIZE3FA1TCCT0ABAW9EJ6' where id=5; -update noar ti set b0='7M6EI4TJBNVQIZE3FA1TCCT0ABAW9EJ6' where id=5; -update noar tt set b1='BHCJENERCZ2FDYWH7CH51FSL' where id=5; -update noar ti set b1='BHCJENERCZ2FDYWH7CH51FSL' where id=5; -update noar tt set b2='YXMUXG3P' where id=5; -update noar ti set b2='YXMUXG3P' where id=5; -update noar tt set b0='5' where id=6; -update noar ti set b0='5' where id=6; -update noar tt set b1='MSO2AU2INQ8KQFHQFEKC1' where id=6; -update noar ti set b1='MSO2AU2INQ8KQFHQFEKC1' where id=6; -update noar tt set b2='YQC2SIYODUIG88' where id=6; -update noar ti set b2='YQC2SIYODUIG88' where id=6; -update noar tt set b0='BZGP0N0WW94' where id=7; -update noar ti set b0='BZGP0N0WW94' where id=7; -update noar tt set b1='OSWCW9CV7KLK1RZ9MECOP5' where id=7; -update noar ti set b1='OSWCW9CV7KLK1RZ9MECOP5' where id=7; -update noar tt set b2='9X2HWBJ7OC1PBQ4' where id=7; -update noar ti set b2='9X2HWBJ7OC1PBQ4' where id=7; -update noar tt set b0='FQIUY7LUR3KKEG2E7KEFED5V0MW' where id=8; -update noar ti set b0='FQIUY7LUR3KKEG2E7KEFED5V0MW' where id=8; -update noar tt set b1='AUZSU' where id=8; -update noar ti set b1='AUZSU' where id=8; -update noar tt set b2='FGRCY' where id=8; -update noar ti set b2='FGRCY' where id=8; -update noar tt set b0='H5E6IJMPXJC' where id=9; -update noar ti set b0='H5E6IJMPXJC' where id=9; -update noar tt set b1='G62F1053W7' where id=9; -update noar ti set b1='G62F1053W7' where id=9; -update noar tt set b2='NPHPQ560DCNFGUEA' where id=9; -update noar ti set b2='NPHPQ560DCNFGUEA' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 mediumblob not null, - b1 mediumblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='UEPOWINI' where id=1; -update noar ti set b0='UEPOWINI' where id=1; -update noar tt set b1='WKGVV76LB4UBMC48HIBLD4M2QE' where id=1; -update noar ti set b1='WKGVV76LB4UBMC48HIBLD4M2QE' where id=1; -update noar tt set b2='5V37M1DQ' where id=1; -update noar ti set b2='5V37M1DQ' where id=1; -update noar tt set b0='OBULB2GPD7Y0PV4V79DLOLMT9' where id=2; -update noar ti set b0='OBULB2GPD7Y0PV4V79DLOLMT9' where id=2; -update noar tt set b1='IWQW2X42COGFS0A8F0N3KN6PG' where id=2; -update noar ti set b1='IWQW2X42COGFS0A8F0N3KN6PG' where id=2; -update noar tt set b2='AD4X5P' where id=2; -update noar ti set b2='AD4X5P' where id=2; -update noar tt set b0='LG1LPJUAI4MQXKO9D1O8Z08P18UM8Y' where id=3; -update noar ti set b0='LG1LPJUAI4MQXKO9D1O8Z08P18UM8Y' where id=3; -update noar tt set b1='CTGY99WEBKZH4SNWY' where id=3; -update noar ti set b1='CTGY99WEBKZH4SNWY' where id=3; -update noar tt set b2='L7GNOLVYTONCJ5MDK3ODKX2X' where id=3; -update noar ti set b2='L7GNOLVYTONCJ5MDK3ODKX2X' where id=3; -update noar tt set b0='OHUPUAZC2TARNQ' where id=4; -update noar ti set b0='OHUPUAZC2TARNQ' where id=4; -update noar tt set b1='F6R9J9' where id=4; -update noar ti set b1='F6R9J9' where id=4; -update noar tt set b2='WX' where id=4; -update noar ti set b2='WX' where id=4; -update noar tt set b0='4UARZDMBUV2RQRU49623Y0VMSQ' where id=5; -update noar ti set b0='4UARZDMBUV2RQRU49623Y0VMSQ' where id=5; -update noar tt set b1='VP34VK10RASDCQI3X7J0JO8X' where id=5; -update noar ti set b1='VP34VK10RASDCQI3X7J0JO8X' where id=5; -update noar tt set b2='WJFFRJB3AJQQGAN3NOHS3N9D86G' where id=5; -update noar ti set b2='WJFFRJB3AJQQGAN3NOHS3N9D86G' where id=5; -update noar tt set b0='V7TA9' where id=6; -update noar ti set b0='V7TA9' where id=6; -update noar tt set b1='IK3UI59XXL9H5T6CWY8M1WIUP7OJK' where id=6; -update noar ti set b1='IK3UI59XXL9H5T6CWY8M1WIUP7OJK' where id=6; -update noar tt set b2='1ACTUFUYBTQCY2R8S1K2ACLF' where id=6; -update noar ti set b2='1ACTUFUYBTQCY2R8S1K2ACLF' where id=6; -update noar tt set b0='T625PDFFOBDUJK2A1KVE' where id=7; -update noar ti set b0='T625PDFFOBDUJK2A1KVE' where id=7; -update noar tt set b1='23SSDBWB4TSWB8YIPAD5T3ZGHOH2FI9O' where id=7; -update noar ti set b1='23SSDBWB4TSWB8YIPAD5T3ZGHOH2FI9O' where id=7; -update noar tt set b2='U68BHPDQ6KDFQI865PZQ1DA' where id=7; -update noar ti set b2='U68BHPDQ6KDFQI865PZQ1DA' where id=7; -update noar tt set b0='4AFE5FF6SUQWPVRX9DY7PTS647D29H1I' where id=8; -update noar ti set b0='4AFE5FF6SUQWPVRX9DY7PTS647D29H1I' where id=8; -update noar tt set b1='2JY8X3GADKY0S1VT8Q' where id=8; -update noar ti set b1='2JY8X3GADKY0S1VT8Q' where id=8; -update noar tt set b2='ZIF9BYLNGX154X8K' where id=8; -update noar ti set b2='ZIF9BYLNGX154X8K' where id=8; -update noar tt set b0='7H1TU8YP5A0D' where id=9; -update noar ti set b0='7H1TU8YP5A0D' where id=9; -update noar tt set b1='ADW9A33GI' where id=9; -update noar ti set b1='ADW9A33GI' where id=9; -update noar tt set b2='6IU5TYU9OCB3F4UN9A10HLRF' where id=9; -update noar ti set b2='6IU5TYU9OCB3F4UN9A10HLRF' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 mediumblob null, - b1 mediumblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='P6WFN8S6301YT6PTL2H19SDUG1L' where id=1; -update noar ti set b0='P6WFN8S6301YT6PTL2H19SDUG1L' where id=1; -update noar tt set b1='WT4OI' where id=1; -update noar ti set b1='WT4OI' where id=1; -update noar tt set b2='GNZ' where id=1; -update noar ti set b2='GNZ' where id=1; -update noar tt set b0='POPSLHFW5QON1FT7AYJ6Y' where id=2; -update noar ti set b0='POPSLHFW5QON1FT7AYJ6Y' where id=2; -update noar tt set b1='HY3' where id=2; -update noar ti set b1='HY3' where id=2; -update noar tt set b2='ARFF5BETLD8AJJM' where id=2; -update noar ti set b2='ARFF5BETLD8AJJM' where id=2; -update noar tt set b0='HZ3U9ACQD0RZ' where id=3; -update noar ti set b0='HZ3U9ACQD0RZ' where id=3; -update noar tt set b1='Y730TNJRJFZT8LHDQHDDBD68JBF7G00' where id=3; -update noar ti set b1='Y730TNJRJFZT8LHDQHDDBD68JBF7G00' where id=3; -update noar tt set b2='3Y9W090ESO0SDFNCUJJN' where id=3; -update noar ti set b2='3Y9W090ESO0SDFNCUJJN' where id=3; -update noar tt set b0='TX753P8Y6OEJRGCRQ36FJGP0M11L' where id=4; -update noar ti set b0='TX753P8Y6OEJRGCRQ36FJGP0M11L' where id=4; -update noar tt set b1='O4SSRIWGVDZTTA9VZP7' where id=4; -update noar ti set b1='O4SSRIWGVDZTTA9VZP7' where id=4; -update noar tt set b2='2KHD2MAZPKM6EGWVU47WVF' where id=4; -update noar ti set b2='2KHD2MAZPKM6EGWVU47WVF' where id=4; -update noar tt set b0='4QVZKM' where id=5; -update noar ti set b0='4QVZKM' where id=5; -update noar tt set b1='0NJVRH' where id=5; -update noar ti set b1='0NJVRH' where id=5; -update noar tt set b2='V' where id=5; -update noar ti set b2='V' where id=5; -update noar tt set b0='85RL2F4OBNK' where id=6; -update noar ti set b0='85RL2F4OBNK' where id=6; -update noar tt set b1='PYGDSSP9E9' where id=6; -update noar ti set b1='PYGDSSP9E9' where id=6; -update noar tt set b2='2N5XN6O' where id=6; -update noar ti set b2='2N5XN6O' where id=6; -update noar tt set b0='QQG91P0SP1AXBV34X7I' where id=7; -update noar ti set b0='QQG91P0SP1AXBV34X7I' where id=7; -update noar tt set b1='QJ1RI65PXRIB3XNSIPJ05V5M' where id=7; -update noar ti set b1='QJ1RI65PXRIB3XNSIPJ05V5M' where id=7; -update noar tt set b2='NL13BN1UF870L4WD' where id=7; -update noar ti set b2='NL13BN1UF870L4WD' where id=7; -update noar tt set b0='OSZALWNP8A' where id=8; -update noar ti set b0='OSZALWNP8A' where id=8; -update noar tt set b1='UP1EOBGBI73I3QMI8G0P1' where id=8; -update noar ti set b1='UP1EOBGBI73I3QMI8G0P1' where id=8; -update noar tt set b2='1DTP8Z5509706J5MDAS4733S7Q2JEKF3' where id=8; -update noar ti set b2='1DTP8Z5509706J5MDAS4733S7Q2JEKF3' where id=8; -update noar tt set b0='PKDZWEWQW3FAGDMI5QLSLWQZP0' where id=9; -update noar ti set b0='PKDZWEWQW3FAGDMI5QLSLWQZP0' where id=9; -update noar tt set b1='W3GGOEW4YI6WM09QR51DU2VCH6N6T4FZ' where id=9; -update noar ti set b1='W3GGOEW4YI6WM09QR51DU2VCH6N6T4FZ' where id=9; -update noar tt set b2='TOR4GCUAWVDT2TTR8HGUK38T0QVS3D1Z' where id=9; -update noar ti set b2='TOR4GCUAWVDT2TTR8HGUK38T0QVS3D1Z' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 mediumblob not null, - b1 mediumblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='GXSOQ7Y8MU0T2NYW81VXE7' where id=1; -update noar ti set b0='GXSOQ7Y8MU0T2NYW81VXE7' where id=1; -update noar tt set b1='9IKISSJJP94ULPMVA3PY' where id=1; -update noar ti set b1='9IKISSJJP94ULPMVA3PY' where id=1; -update noar tt set b2='6F0A1XO70VDST4Y' where id=1; -update noar ti set b2='6F0A1XO70VDST4Y' where id=1; -update noar tt set b0='2658MQ8OLXXWUYZS2' where id=2; -update noar ti set b0='2658MQ8OLXXWUYZS2' where id=2; -update noar tt set b1='2' where id=2; -update noar ti set b1='2' where id=2; -update noar tt set b2='XYNDTRKJ7N4C4JK' where id=2; -update noar ti set b2='XYNDTRKJ7N4C4JK' where id=2; -update noar tt set b0='G' where id=3; -update noar ti set b0='G' where id=3; -update noar tt set b1='1ZWM1CMIOZ1L70L' where id=3; -update noar ti set b1='1ZWM1CMIOZ1L70L' where id=3; -update noar tt set b2='KZEPB0CKY04QY3T406ZJ7QPP49UE' where id=3; -update noar ti set b2='KZEPB0CKY04QY3T406ZJ7QPP49UE' where id=3; -update noar tt set b0='DN6TGQGWLFC7FNCDVB4V1H1RUNTT' where id=4; -update noar ti set b0='DN6TGQGWLFC7FNCDVB4V1H1RUNTT' where id=4; -update noar tt set b1='SE0A7EG7OJHQS' where id=4; -update noar ti set b1='SE0A7EG7OJHQS' where id=4; -update noar tt set b2='3LDB8TIZUDRDCXM15U' where id=4; -update noar ti set b2='3LDB8TIZUDRDCXM15U' where id=4; -update noar tt set b0='RMQV63TKMJ6J' where id=5; -update noar ti set b0='RMQV63TKMJ6J' where id=5; -update noar tt set b1='R13LT1CXL6OUC737DD3C5A' where id=5; -update noar ti set b1='R13LT1CXL6OUC737DD3C5A' where id=5; -update noar tt set b2='GL2HS67PERDK2WI2P423ZLXL' where id=5; -update noar ti set b2='GL2HS67PERDK2WI2P423ZLXL' where id=5; -update noar tt set b0='SVDK4ZRGTOY4V7ZJ2XQQUKE0UL0EMJ' where id=6; -update noar ti set b0='SVDK4ZRGTOY4V7ZJ2XQQUKE0UL0EMJ' where id=6; -update noar tt set b1='W70M' where id=6; -update noar ti set b1='W70M' where id=6; -update noar tt set b2='QADLOFC4Q' where id=6; -update noar ti set b2='QADLOFC4Q' where id=6; -update noar tt set b0='3MIAR00DAZ' where id=7; -update noar ti set b0='3MIAR00DAZ' where id=7; -update noar tt set b1='01PA8WLFSFEZN2XA' where id=7; -update noar ti set b1='01PA8WLFSFEZN2XA' where id=7; -update noar tt set b2='8R1GFIUYGLP' where id=7; -update noar ti set b2='8R1GFIUYGLP' where id=7; -update noar tt set b0='KRMIL9JIRJJB5HW8BXCXK61VM1YYV2XR' where id=8; -update noar ti set b0='KRMIL9JIRJJB5HW8BXCXK61VM1YYV2XR' where id=8; -update noar tt set b1='8T1FA8H9B75Y191OC48Z738' where id=8; -update noar ti set b1='8T1FA8H9B75Y191OC48Z738' where id=8; -update noar tt set b2='C' where id=8; -update noar ti set b2='C' where id=8; -update noar tt set b0='CMOIIWX5R96XEN7GDP7O0' where id=9; -update noar ti set b0='CMOIIWX5R96XEN7GDP7O0' where id=9; -update noar tt set b1='PQNHV3TGXWYVB207C3KIXO0E6UFOG92J' where id=9; -update noar ti set b1='PQNHV3TGXWYVB207C3KIXO0E6UFOG92J' where id=9; -update noar tt set b2='QV1KYD2TXGLPZ' where id=9; -update noar ti set b2='QV1KYD2TXGLPZ' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 mediumblob null, - b1 mediumblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='YVZSPRURV56CHEXFPAJNC91114ZFQ48' where id=1; -update noar ti set b0='YVZSPRURV56CHEXFPAJNC91114ZFQ48' where id=1; -update noar tt set b1='DGL1F7Z08WLV5IQMJ5OQ9' where id=1; -update noar ti set b1='DGL1F7Z08WLV5IQMJ5OQ9' where id=1; -update noar tt set b2='YHU0YFWJ36TZBUY39RURXU3F' where id=1; -update noar ti set b2='YHU0YFWJ36TZBUY39RURXU3F' where id=1; -update noar tt set b0='1KDWZ6' where id=2; -update noar ti set b0='1KDWZ6' where id=2; -update noar tt set b1='WPKIJGS8U6OW0KQ' where id=2; -update noar ti set b1='WPKIJGS8U6OW0KQ' where id=2; -update noar tt set b2='UKNXU2D6' where id=2; -update noar ti set b2='UKNXU2D6' where id=2; -update noar tt set b0='DNXQTCNIILPE3' where id=3; -update noar ti set b0='DNXQTCNIILPE3' where id=3; -update noar tt set b1='VVTVVMZB8ZJ1C4N80DUWUL' where id=3; -update noar ti set b1='VVTVVMZB8ZJ1C4N80DUWUL' where id=3; -update noar tt set b2='1IYDTB9RW' where id=3; -update noar ti set b2='1IYDTB9RW' where id=3; -update noar tt set b0='SM9S4RM2OLJHH82OK1VV' where id=4; -update noar ti set b0='SM9S4RM2OLJHH82OK1VV' where id=4; -update noar tt set b1='ZGVH' where id=4; -update noar ti set b1='ZGVH' where id=4; -update noar tt set b2='BVJLZ3DPZ457XP92SFPLVA6GK' where id=4; -update noar ti set b2='BVJLZ3DPZ457XP92SFPLVA6GK' where id=4; -update noar tt set b0='VPQSA3J7S0CCZ8Q71AD0XJQS' where id=5; -update noar ti set b0='VPQSA3J7S0CCZ8Q71AD0XJQS' where id=5; -update noar tt set b1='0J53AY66ZO18P4G1CIW1U1N9Q9PBQ' where id=5; -update noar ti set b1='0J53AY66ZO18P4G1CIW1U1N9Q9PBQ' where id=5; -update noar tt set b2='2UH3OD3L49N2KVWVVNDTGYSX9' where id=5; -update noar ti set b2='2UH3OD3L49N2KVWVVNDTGYSX9' where id=5; -update noar tt set b0='027HVWMX' where id=6; -update noar ti set b0='027HVWMX' where id=6; -update noar tt set b1='0EWP60VWSG' where id=6; -update noar ti set b1='0EWP60VWSG' where id=6; -update noar tt set b2='SBWDFAWDP2PW8PC1LYZ' where id=6; -update noar ti set b2='SBWDFAWDP2PW8PC1LYZ' where id=6; -update noar tt set b0='VC224VNW0C118R1ABKF1MEX' where id=7; -update noar ti set b0='VC224VNW0C118R1ABKF1MEX' where id=7; -update noar tt set b1='YJAVPB3O' where id=7; -update noar ti set b1='YJAVPB3O' where id=7; -update noar tt set b2='XOH8YK' where id=7; -update noar ti set b2='XOH8YK' where id=7; -update noar tt set b0='I4PTT0OYGANXEAGYHO191GY' where id=8; -update noar ti set b0='I4PTT0OYGANXEAGYHO191GY' where id=8; -update noar tt set b1='97' where id=8; -update noar ti set b1='97' where id=8; -update noar tt set b2='0G4US9C6ME2U9UW8ASP0O89' where id=8; -update noar ti set b2='0G4US9C6ME2U9UW8ASP0O89' where id=8; -update noar tt set b0='MHIHYR7MNOZXNZDRRKVCJB1GQANIA12' where id=9; -update noar ti set b0='MHIHYR7MNOZXNZDRRKVCJB1GQANIA12' where id=9; -update noar tt set b1='RV9YGBTMGKJZ8U11TJMECE' where id=9; -update noar ti set b1='RV9YGBTMGKJZ8U11TJMECE' where id=9; -update noar tt set b2='ZT9BB6HA1L80DAEKJFME' where id=9; -update noar ti set b2='ZT9BB6HA1L80DAEKJFME' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 mediumblob not null, - b1 mediumblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='6CAUYPW6EL' where id=1; -update noar ti set b0='6CAUYPW6EL' where id=1; -update noar tt set b1='NV9BR1BI6UJ' where id=1; -update noar ti set b1='NV9BR1BI6UJ' where id=1; -update noar tt set b2='JOXP2S3T0ZCVVKF' where id=1; -update noar ti set b2='JOXP2S3T0ZCVVKF' where id=1; -update noar tt set b0='736HKDM40' where id=2; -update noar ti set b0='736HKDM40' where id=2; -update noar tt set b1='999TXVGNA1FPQR' where id=2; -update noar ti set b1='999TXVGNA1FPQR' where id=2; -update noar tt set b2='8EQOQLECSGYGZT38X7YJPQ5FKFX1P1' where id=2; -update noar ti set b2='8EQOQLECSGYGZT38X7YJPQ5FKFX1P1' where id=2; -update noar tt set b0='VG0' where id=3; -update noar ti set b0='VG0' where id=3; -update noar tt set b1='5FRJYS' where id=3; -update noar ti set b1='5FRJYS' where id=3; -update noar tt set b2='EECZUH6K5PZ7CTY' where id=3; -update noar ti set b2='EECZUH6K5PZ7CTY' where id=3; -update noar tt set b0='M9T0HGZZGR' where id=4; -update noar ti set b0='M9T0HGZZGR' where id=4; -update noar tt set b1='QSDMVSYKJXJWIOO9K9' where id=4; -update noar ti set b1='QSDMVSYKJXJWIOO9K9' where id=4; -update noar tt set b2='6VWOLASJWXEEE2KGIEHXJUFO' where id=4; -update noar ti set b2='6VWOLASJWXEEE2KGIEHXJUFO' where id=4; -update noar tt set b0='AASGZL6TG912HM2MOCXUR' where id=5; -update noar ti set b0='AASGZL6TG912HM2MOCXUR' where id=5; -update noar tt set b1='P5KHI1V4LZF02XW' where id=5; -update noar ti set b1='P5KHI1V4LZF02XW' where id=5; -update noar tt set b2='EXSL7PAYETH8I' where id=5; -update noar ti set b2='EXSL7PAYETH8I' where id=5; -update noar tt set b0='0XN1YJICC01KGESUZF0H0L4OR5ML8K' where id=6; -update noar ti set b0='0XN1YJICC01KGESUZF0H0L4OR5ML8K' where id=6; -update noar tt set b1='G34DBPX8CQB2G02ZXZ4UMEL' where id=6; -update noar ti set b1='G34DBPX8CQB2G02ZXZ4UMEL' where id=6; -update noar tt set b2='N7' where id=6; -update noar ti set b2='N7' where id=6; -update noar tt set b0='Z5' where id=7; -update noar ti set b0='Z5' where id=7; -update noar tt set b1='NY3XMNT4PULZ2A9GBSX9JUS9LH' where id=7; -update noar ti set b1='NY3XMNT4PULZ2A9GBSX9JUS9LH' where id=7; -update noar tt set b2='L6EMKMTZ1M28N3HJE5XQLSB1FI' where id=7; -update noar ti set b2='L6EMKMTZ1M28N3HJE5XQLSB1FI' where id=7; -update noar tt set b0='Z6EFHLC10ZTTSL4JAQ9KPDE4' where id=8; -update noar ti set b0='Z6EFHLC10ZTTSL4JAQ9KPDE4' where id=8; -update noar tt set b1='4CBBYRA9VK6WY2DNRLLX4C79C8EV' where id=8; -update noar ti set b1='4CBBYRA9VK6WY2DNRLLX4C79C8EV' where id=8; -update noar tt set b2='2U4U02WW1EY1M8SCZKTAZDCGIMF4L8' where id=8; -update noar ti set b2='2U4U02WW1EY1M8SCZKTAZDCGIMF4L8' where id=8; -update noar tt set b0='OJ00U7A71MXNCE01YGFX8NBN90' where id=9; -update noar ti set b0='OJ00U7A71MXNCE01YGFX8NBN90' where id=9; -update noar tt set b1='8V6' where id=9; -update noar ti set b1='8V6' where id=9; -update noar tt set b2='9549E1OMTCYIYB21E3O2PV5N8CER30XY' where id=9; -update noar ti set b2='9549E1OMTCYIYB21E3O2PV5N8CER30XY' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 mediumblob null, - b1 mediumblob null, - b2 text null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='F7' where id=1; -update noar ti set b0='F7' where id=1; -update noar tt set b1='LSKALVO1TA' where id=1; -update noar ti set b1='LSKALVO1TA' where id=1; -update noar tt set b2='VQ0ENLI6G0E' where id=1; -update noar ti set b2='VQ0ENLI6G0E' where id=1; -update noar tt set b0='XAAZKI' where id=2; -update noar ti set b0='XAAZKI' where id=2; -update noar tt set b1='B5LTVGXCICBTRK05JY12' where id=2; -update noar ti set b1='B5LTVGXCICBTRK05JY12' where id=2; -update noar tt set b2='FCEQWB' where id=2; -update noar ti set b2='FCEQWB' where id=2; -update noar tt set b0='ZKDS5HAQ1UHL046JLEFBCFK8G' where id=3; -update noar ti set b0='ZKDS5HAQ1UHL046JLEFBCFK8G' where id=3; -update noar tt set b1='001IR8BY' where id=3; -update noar ti set b1='001IR8BY' where id=3; -update noar tt set b2='K9EA' where id=3; -update noar ti set b2='K9EA' where id=3; -update noar tt set b0='8UDFO9BE2EP87B2PQTBTY7W11B4GZI9' where id=4; -update noar ti set b0='8UDFO9BE2EP87B2PQTBTY7W11B4GZI9' where id=4; -update noar tt set b1='J3XPCEUY0X0ZO53Q' where id=4; -update noar ti set b1='J3XPCEUY0X0ZO53Q' where id=4; -update noar tt set b2='7030KX1FA0C6HRY6G6SEJ0Y9U' where id=4; -update noar ti set b2='7030KX1FA0C6HRY6G6SEJ0Y9U' where id=4; -update noar tt set b0='V' where id=5; -update noar ti set b0='V' where id=5; -update noar tt set b1='2J8MSZ134CBYT3CHZ0VQ' where id=5; -update noar ti set b1='2J8MSZ134CBYT3CHZ0VQ' where id=5; -update noar tt set b2='TH93LXEQ81W7JD9B5U7N6LRGYCZD' where id=5; -update noar ti set b2='TH93LXEQ81W7JD9B5U7N6LRGYCZD' where id=5; -update noar tt set b0='L3A50UKS2KTGPWOWS9QBA1L2XR' where id=6; -update noar ti set b0='L3A50UKS2KTGPWOWS9QBA1L2XR' where id=6; -update noar tt set b1='T9XOWRH' where id=6; -update noar ti set b1='T9XOWRH' where id=6; -update noar tt set b2='W9N92P6W2EDFRJYQ3P9CZ' where id=6; -update noar ti set b2='W9N92P6W2EDFRJYQ3P9CZ' where id=6; -update noar tt set b0='U37OKI2NHSGMGBTUND' where id=7; -update noar ti set b0='U37OKI2NHSGMGBTUND' where id=7; -update noar tt set b1='MROWBFH9FIJMCGFJAZN7CI38Q' where id=7; -update noar ti set b1='MROWBFH9FIJMCGFJAZN7CI38Q' where id=7; -update noar tt set b2='NE2FE3ADN2HLAJFBRJAH4C' where id=7; -update noar ti set b2='NE2FE3ADN2HLAJFBRJAH4C' where id=7; -update noar tt set b0='MEWI2ZWW8PGN' where id=8; -update noar ti set b0='MEWI2ZWW8PGN' where id=8; -update noar tt set b1='IOK449PT5AZK1SXOJD1Q' where id=8; -update noar ti set b1='IOK449PT5AZK1SXOJD1Q' where id=8; -update noar tt set b2='06DW4LX6WNB' where id=8; -update noar ti set b2='06DW4LX6WNB' where id=8; -update noar tt set b0='EENSHC0IGEUWW77OFGJBRFKA4DB4D' where id=9; -update noar ti set b0='EENSHC0IGEUWW77OFGJBRFKA4DB4D' where id=9; -update noar tt set b1='VT9EYPF9B6CYHKZ7UG5YCM97UXFI0PCT' where id=9; -update noar ti set b1='VT9EYPF9B6CYHKZ7UG5YCM97UXFI0PCT' where id=9; -update noar tt set b2='QMYR' where id=9; -update noar ti set b2='QMYR' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 mediumblob not null, - b1 mediumblob not null, - b2 text not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='S' where id=1; -update noar ti set b0='S' where id=1; -update noar tt set b1='1I1YHX9UNR369ZS5FT' where id=1; -update noar ti set b1='1I1YHX9UNR369ZS5FT' where id=1; -update noar tt set b2='VQFOVRR10NADRRHBEKBMA06DTY2Q' where id=1; -update noar ti set b2='VQFOVRR10NADRRHBEKBMA06DTY2Q' where id=1; -update noar tt set b0='E97K7Q93YPFA9B3PUV' where id=2; -update noar ti set b0='E97K7Q93YPFA9B3PUV' where id=2; -update noar tt set b1='CY1OM0INXGW9XB6THLMNMM441' where id=2; -update noar ti set b1='CY1OM0INXGW9XB6THLMNMM441' where id=2; -update noar tt set b2='RCALC83TID0GSFMQHJA' where id=2; -update noar ti set b2='RCALC83TID0GSFMQHJA' where id=2; -update noar tt set b0='O2H2V79N2WO07QCCA' where id=3; -update noar ti set b0='O2H2V79N2WO07QCCA' where id=3; -update noar tt set b1='CK' where id=3; -update noar ti set b1='CK' where id=3; -update noar tt set b2='6QEDY4T0EHC4POKF2GFMCQ' where id=3; -update noar ti set b2='6QEDY4T0EHC4POKF2GFMCQ' where id=3; -update noar tt set b0='47DNAX5TQJLSWWV8NDASSTFH9VIF' where id=4; -update noar ti set b0='47DNAX5TQJLSWWV8NDASSTFH9VIF' where id=4; -update noar tt set b1='AES2MT4MCUQ7WBCJDBK' where id=4; -update noar ti set b1='AES2MT4MCUQ7WBCJDBK' where id=4; -update noar tt set b2='1WAV830TBGMFYHHD' where id=4; -update noar ti set b2='1WAV830TBGMFYHHD' where id=4; -update noar tt set b0='8IGASXFEQCJZLIPF4XTU7SK' where id=5; -update noar ti set b0='8IGASXFEQCJZLIPF4XTU7SK' where id=5; -update noar tt set b1='86TE048W4WEG5PW3YYUKUTRSYQ' where id=5; -update noar ti set b1='86TE048W4WEG5PW3YYUKUTRSYQ' where id=5; -update noar tt set b2='8T5' where id=5; -update noar ti set b2='8T5' where id=5; -update noar tt set b0='WMQO8O9B9FELFGIX2F' where id=6; -update noar ti set b0='WMQO8O9B9FELFGIX2F' where id=6; -update noar tt set b1='I616XPHHLS9D9FSW5BO20ERJRGF' where id=6; -update noar ti set b1='I616XPHHLS9D9FSW5BO20ERJRGF' where id=6; -update noar tt set b2='2A0' where id=6; -update noar ti set b2='2A0' where id=6; -update noar tt set b0='1E13TBB' where id=7; -update noar ti set b0='1E13TBB' where id=7; -update noar tt set b1='R34SV9Q079NDH9QLAYGIVG' where id=7; -update noar ti set b1='R34SV9Q079NDH9QLAYGIVG' where id=7; -update noar tt set b2='GI7Y6OOIN3B1IIUCA8S2KM5A0F9CV82' where id=7; -update noar ti set b2='GI7Y6OOIN3B1IIUCA8S2KM5A0F9CV82' where id=7; -update noar tt set b0='J8O3H9YC51NJQFX4Z7BEPS' where id=8; -update noar ti set b0='J8O3H9YC51NJQFX4Z7BEPS' where id=8; -update noar tt set b1='08WE5QAF3GFETJNGGO2BVFAFAOOOVZAU' where id=8; -update noar ti set b1='08WE5QAF3GFETJNGGO2BVFAFAOOOVZAU' where id=8; -update noar tt set b2='U7X78FYM' where id=8; -update noar ti set b2='U7X78FYM' where id=8; -update noar tt set b0='GSO6' where id=9; -update noar ti set b0='GSO6' where id=9; -update noar tt set b1='T7511LP29OS6VKSCC' where id=9; -update noar ti set b1='T7511LP29OS6VKSCC' where id=9; -update noar tt set b2='JMQ1' where id=9; -update noar ti set b2='JMQ1' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 mediumblob null, - b1 longblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='NA618TEHZX90CZFHBQDTC1V8XG9J75' where id=1; -update noar ti set b0='NA618TEHZX90CZFHBQDTC1V8XG9J75' where id=1; -update noar tt set b1='YTVASEIF' where id=1; -update noar ti set b1='YTVASEIF' where id=1; -update noar tt set b2='Y9RI6C78SD02T3X7KGTYQD76EQ7S' where id=1; -update noar ti set b2='Y9RI6C78SD02T3X7KGTYQD76EQ7S' where id=1; -update noar tt set b0='OO' where id=2; -update noar ti set b0='OO' where id=2; -update noar tt set b1='361GKY38WX0ED5S1DGA' where id=2; -update noar ti set b1='361GKY38WX0ED5S1DGA' where id=2; -update noar tt set b2='92Q' where id=2; -update noar ti set b2='92Q' where id=2; -update noar tt set b0='R0KDIDIA760DSETGB4PLOW5' where id=3; -update noar ti set b0='R0KDIDIA760DSETGB4PLOW5' where id=3; -update noar tt set b1='C' where id=3; -update noar ti set b1='C' where id=3; -update noar tt set b2='I4444EF9C2I' where id=3; -update noar ti set b2='I4444EF9C2I' where id=3; -update noar tt set b0='WVSTWO3BG' where id=4; -update noar ti set b0='WVSTWO3BG' where id=4; -update noar tt set b1='2XI3ZORR0BO5I245GEKZ' where id=4; -update noar ti set b1='2XI3ZORR0BO5I245GEKZ' where id=4; -update noar tt set b2='RRLDJ8' where id=4; -update noar ti set b2='RRLDJ8' where id=4; -update noar tt set b0='7' where id=5; -update noar ti set b0='7' where id=5; -update noar tt set b1='QI6MAPFBO3CP' where id=5; -update noar ti set b1='QI6MAPFBO3CP' where id=5; -update noar tt set b2='98TA4DPA5ON9BCVMA0Z' where id=5; -update noar ti set b2='98TA4DPA5ON9BCVMA0Z' where id=5; -update noar tt set b0='2G' where id=6; -update noar ti set b0='2G' where id=6; -update noar tt set b1='MYXD4ARGJWS55L9EXYC38RN4KMP' where id=6; -update noar ti set b1='MYXD4ARGJWS55L9EXYC38RN4KMP' where id=6; -update noar tt set b2='Y6481' where id=6; -update noar ti set b2='Y6481' where id=6; -update noar tt set b0='QH75' where id=7; -update noar ti set b0='QH75' where id=7; -update noar tt set b1='X3VFIAB337LYD7DBF' where id=7; -update noar ti set b1='X3VFIAB337LYD7DBF' where id=7; -update noar tt set b2='W6PWF0DV78' where id=7; -update noar ti set b2='W6PWF0DV78' where id=7; -update noar tt set b0='VUH87V5F' where id=8; -update noar ti set b0='VUH87V5F' where id=8; -update noar tt set b1='9TIEGAW1MPASPDCVI8' where id=8; -update noar ti set b1='9TIEGAW1MPASPDCVI8' where id=8; -update noar tt set b2='T53N9R4A6GX9AFHJAXSBV05NWGTQ8MY5' where id=8; -update noar ti set b2='T53N9R4A6GX9AFHJAXSBV05NWGTQ8MY5' where id=8; -update noar tt set b0='GR' where id=9; -update noar ti set b0='GR' where id=9; -update noar tt set b1='Z79RVKK5BPSGF3J3ORK08OE58SL' where id=9; -update noar ti set b1='Z79RVKK5BPSGF3J3ORK08OE58SL' where id=9; -update noar tt set b2='RA' where id=9; -update noar ti set b2='RA' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 mediumblob not null, - b1 longblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='ZBGN66XH999Q9NEUF2RPNPP0ZW' where id=1; -update noar ti set b0='ZBGN66XH999Q9NEUF2RPNPP0ZW' where id=1; -update noar tt set b1='3Q0JKSO2Z5URP' where id=1; -update noar ti set b1='3Q0JKSO2Z5URP' where id=1; -update noar tt set b2='62S31IO5R7GSO4T67R9MSNGIRMWM' where id=1; -update noar ti set b2='62S31IO5R7GSO4T67R9MSNGIRMWM' where id=1; -update noar tt set b0='8JUBE94QLIIZRIZHH91HKDULEI82' where id=2; -update noar ti set b0='8JUBE94QLIIZRIZHH91HKDULEI82' where id=2; -update noar tt set b1='SRY8TJ2P2U0GNNMY7UQ06RJ5' where id=2; -update noar ti set b1='SRY8TJ2P2U0GNNMY7UQ06RJ5' where id=2; -update noar tt set b2='3E3582KWGAV' where id=2; -update noar ti set b2='3E3582KWGAV' where id=2; -update noar tt set b0='KRR08HTNGOQFATE' where id=3; -update noar ti set b0='KRR08HTNGOQFATE' where id=3; -update noar tt set b1='LHRC9549LTIAX408KGYLXC95ALVNOFD' where id=3; -update noar ti set b1='LHRC9549LTIAX408KGYLXC95ALVNOFD' where id=3; -update noar tt set b2='2FXVSY' where id=3; -update noar ti set b2='2FXVSY' where id=3; -update noar tt set b0='IU85IK7Q3' where id=4; -update noar ti set b0='IU85IK7Q3' where id=4; -update noar tt set b1='FXQ3XVXUK' where id=4; -update noar ti set b1='FXQ3XVXUK' where id=4; -update noar tt set b2='CZ47BC8ORPQPX8UVG0Q3ZTUC' where id=4; -update noar ti set b2='CZ47BC8ORPQPX8UVG0Q3ZTUC' where id=4; -update noar tt set b0='UXUUWQYNFZBGTIK41QZIEFTU6E35K6T' where id=5; -update noar ti set b0='UXUUWQYNFZBGTIK41QZIEFTU6E35K6T' where id=5; -update noar tt set b1='36L35ZIKE9' where id=5; -update noar ti set b1='36L35ZIKE9' where id=5; -update noar tt set b2='JGHEW6KHAMN6I0JRNM' where id=5; -update noar ti set b2='JGHEW6KHAMN6I0JRNM' where id=5; -update noar tt set b0='0K99Q2CWX3QGLH0CAGQW9JO73' where id=6; -update noar ti set b0='0K99Q2CWX3QGLH0CAGQW9JO73' where id=6; -update noar tt set b1='V8X4FUEET36BYH6IHCHOWLKMQURAOJLQ' where id=6; -update noar ti set b1='V8X4FUEET36BYH6IHCHOWLKMQURAOJLQ' where id=6; -update noar tt set b2='V9T4CJV55OTC' where id=6; -update noar ti set b2='V9T4CJV55OTC' where id=6; -update noar tt set b0='KEO9CF4VUE92ZBNNR23LPPZXX7VI25XB' where id=7; -update noar ti set b0='KEO9CF4VUE92ZBNNR23LPPZXX7VI25XB' where id=7; -update noar tt set b1='B8' where id=7; -update noar ti set b1='B8' where id=7; -update noar tt set b2='1P' where id=7; -update noar ti set b2='1P' where id=7; -update noar tt set b0='9JU5XTJQ8K4HH2LJ7A' where id=8; -update noar ti set b0='9JU5XTJQ8K4HH2LJ7A' where id=8; -update noar tt set b1='V5K2CS3ID7EFEA7D1MM4QNQVLES' where id=8; -update noar ti set b1='V5K2CS3ID7EFEA7D1MM4QNQVLES' where id=8; -update noar tt set b2='3VPWI83QLNJU4WJ1' where id=8; -update noar ti set b2='3VPWI83QLNJU4WJ1' where id=8; -update noar tt set b0='633PXANQAGN60YC35L' where id=9; -update noar ti set b0='633PXANQAGN60YC35L' where id=9; -update noar tt set b1='ZP9ZHVA05KAL' where id=9; -update noar ti set b1='ZP9ZHVA05KAL' where id=9; -update noar tt set b2='J5KPZMNK1UPHXM2QHPSF1' where id=9; -update noar ti set b2='J5KPZMNK1UPHXM2QHPSF1' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 mediumblob null, - b1 longblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='NXQQRD3M53K6NF7IG92WK2' where id=1; -update noar ti set b0='NXQQRD3M53K6NF7IG92WK2' where id=1; -update noar tt set b1='I67SVCO2K1ZJ' where id=1; -update noar ti set b1='I67SVCO2K1ZJ' where id=1; -update noar tt set b2='I8P8YDS6KM6IRE7MNGCF' where id=1; -update noar ti set b2='I8P8YDS6KM6IRE7MNGCF' where id=1; -update noar tt set b0='Y2BA9' where id=2; -update noar ti set b0='Y2BA9' where id=2; -update noar tt set b1='HX5EKYFMQ3VRMNZFE6FH834TU' where id=2; -update noar ti set b1='HX5EKYFMQ3VRMNZFE6FH834TU' where id=2; -update noar tt set b2='338MG5UD1568BKI7Q7VXRH' where id=2; -update noar ti set b2='338MG5UD1568BKI7Q7VXRH' where id=2; -update noar tt set b0='UPT2SBB0WCVVNIT5Q13LA3ADYP' where id=3; -update noar ti set b0='UPT2SBB0WCVVNIT5Q13LA3ADYP' where id=3; -update noar tt set b1='EAVNHGU4MBF' where id=3; -update noar ti set b1='EAVNHGU4MBF' where id=3; -update noar tt set b2='GMIK44SYDK5UVA5C73J1VLJ4' where id=3; -update noar ti set b2='GMIK44SYDK5UVA5C73J1VLJ4' where id=3; -update noar tt set b0='J5NTXPBKQWD4CXLXSTE9GLZI8' where id=4; -update noar ti set b0='J5NTXPBKQWD4CXLXSTE9GLZI8' where id=4; -update noar tt set b1='FJ3SS8Y33FI5EK2M7IINN3Q7ALX' where id=4; -update noar ti set b1='FJ3SS8Y33FI5EK2M7IINN3Q7ALX' where id=4; -update noar tt set b2='NC16L3DLGP0KTW6O' where id=4; -update noar ti set b2='NC16L3DLGP0KTW6O' where id=4; -update noar tt set b0='Y32B7DG1B96EVU6436R7URQURO3MLYB' where id=5; -update noar ti set b0='Y32B7DG1B96EVU6436R7URQURO3MLYB' where id=5; -update noar tt set b1='GTWXKLA41ZRP8M22XSQQIM65' where id=5; -update noar ti set b1='GTWXKLA41ZRP8M22XSQQIM65' where id=5; -update noar tt set b2='YZD' where id=5; -update noar ti set b2='YZD' where id=5; -update noar tt set b0='B491VCNL4OYTZ5O1FF5RRF7U6' where id=6; -update noar ti set b0='B491VCNL4OYTZ5O1FF5RRF7U6' where id=6; -update noar tt set b1='EN3G0PC30KQ34XLFUAQR4' where id=6; -update noar ti set b1='EN3G0PC30KQ34XLFUAQR4' where id=6; -update noar tt set b2='LJ41D97' where id=6; -update noar ti set b2='LJ41D97' where id=6; -update noar tt set b0='WHBH65AFVEQ6H4P' where id=7; -update noar ti set b0='WHBH65AFVEQ6H4P' where id=7; -update noar tt set b1='8U59FI0LWKLVLNF5' where id=7; -update noar ti set b1='8U59FI0LWKLVLNF5' where id=7; -update noar tt set b2='15OVTL4S' where id=7; -update noar ti set b2='15OVTL4S' where id=7; -update noar tt set b0='L3UXTOFNSL251GMFH' where id=8; -update noar ti set b0='L3UXTOFNSL251GMFH' where id=8; -update noar tt set b1='J' where id=8; -update noar ti set b1='J' where id=8; -update noar tt set b2='KF1RO4N7WEO6QCWVUL' where id=8; -update noar ti set b2='KF1RO4N7WEO6QCWVUL' where id=8; -update noar tt set b0='4MSXYR4ABDFQXRVCZP5' where id=9; -update noar ti set b0='4MSXYR4ABDFQXRVCZP5' where id=9; -update noar tt set b1='7ISP2DR3001KSVQ6OHBS4JP' where id=9; -update noar ti set b1='7ISP2DR3001KSVQ6OHBS4JP' where id=9; -update noar tt set b2='48JY9SSEJZZXR80DWU' where id=9; -update noar ti set b2='48JY9SSEJZZXR80DWU' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 mediumblob not null, - b1 longblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='KO4OLH6SJXNY1R9UUQBLYGORMD' where id=1; -update noar ti set b0='KO4OLH6SJXNY1R9UUQBLYGORMD' where id=1; -update noar tt set b1='LZH9L4K002Q2ZZPBGZO27GRD' where id=1; -update noar ti set b1='LZH9L4K002Q2ZZPBGZO27GRD' where id=1; -update noar tt set b2='17A95DDREMLFVFG' where id=1; -update noar ti set b2='17A95DDREMLFVFG' where id=1; -update noar tt set b0='XCWFW6N02XT1JJZDCUTM1JN84ODHX' where id=2; -update noar ti set b0='XCWFW6N02XT1JJZDCUTM1JN84ODHX' where id=2; -update noar tt set b1='D788' where id=2; -update noar ti set b1='D788' where id=2; -update noar tt set b2='V6XZ' where id=2; -update noar ti set b2='V6XZ' where id=2; -update noar tt set b0='2DK1UBRVDBHVUENY4UEG2' where id=3; -update noar ti set b0='2DK1UBRVDBHVUENY4UEG2' where id=3; -update noar tt set b1='D3WJD5P3Q' where id=3; -update noar ti set b1='D3WJD5P3Q' where id=3; -update noar tt set b2='09QYU' where id=3; -update noar ti set b2='09QYU' where id=3; -update noar tt set b0='4KNVGVL' where id=4; -update noar ti set b0='4KNVGVL' where id=4; -update noar tt set b1='PNP3XAT1W' where id=4; -update noar ti set b1='PNP3XAT1W' where id=4; -update noar tt set b2='YSUCD8BDH63M98XA' where id=4; -update noar ti set b2='YSUCD8BDH63M98XA' where id=4; -update noar tt set b0='08R0L2BP967A' where id=5; -update noar ti set b0='08R0L2BP967A' where id=5; -update noar tt set b1='6J35EG97AWMVXOCCMMC6MLLDSF' where id=5; -update noar ti set b1='6J35EG97AWMVXOCCMMC6MLLDSF' where id=5; -update noar tt set b2='Q447UQ604H3UXLNAJ' where id=5; -update noar ti set b2='Q447UQ604H3UXLNAJ' where id=5; -update noar tt set b0='69MG7R9JH3UD2VYOTE0KNBVCB53M696B' where id=6; -update noar ti set b0='69MG7R9JH3UD2VYOTE0KNBVCB53M696B' where id=6; -update noar tt set b1='GLGGL6U1SG' where id=6; -update noar ti set b1='GLGGL6U1SG' where id=6; -update noar tt set b2='R00O9ECHZSYM5FIMSQY' where id=6; -update noar ti set b2='R00O9ECHZSYM5FIMSQY' where id=6; -update noar tt set b0='AH2W33QDICC269L69B9N0MFRVCW' where id=7; -update noar ti set b0='AH2W33QDICC269L69B9N0MFRVCW' where id=7; -update noar tt set b1='T6J2WH2I3Z5RWXVTSI7S4C6T7STOXXD' where id=7; -update noar ti set b1='T6J2WH2I3Z5RWXVTSI7S4C6T7STOXXD' where id=7; -update noar tt set b2='KSWRONRU4N7' where id=7; -update noar ti set b2='KSWRONRU4N7' where id=7; -update noar tt set b0='W6GGGMFZYS4OV6IJQG9VM' where id=8; -update noar ti set b0='W6GGGMFZYS4OV6IJQG9VM' where id=8; -update noar tt set b1='ZDHL3' where id=8; -update noar ti set b1='ZDHL3' where id=8; -update noar tt set b2='BCEOMRP0N01ZN1IB4A0' where id=8; -update noar ti set b2='BCEOMRP0N01ZN1IB4A0' where id=8; -update noar tt set b0='274URTSFZNZXXFUUODCLOKRLB753' where id=9; -update noar ti set b0='274URTSFZNZXXFUUODCLOKRLB753' where id=9; -update noar tt set b1='EEP0A' where id=9; -update noar ti set b1='EEP0A' where id=9; -update noar tt set b2='3H60DMQDZM35FQECAOFUJ0' where id=9; -update noar ti set b2='3H60DMQDZM35FQECAOFUJ0' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 mediumblob null, - b1 longblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='QEB3L4H90L8M9GEJTO0XIPE' where id=1; -update noar ti set b0='QEB3L4H90L8M9GEJTO0XIPE' where id=1; -update noar tt set b1='R3R24PNNIG8N65EIDJT' where id=1; -update noar ti set b1='R3R24PNNIG8N65EIDJT' where id=1; -update noar tt set b2='AZWFBDKVQ0E' where id=1; -update noar ti set b2='AZWFBDKVQ0E' where id=1; -update noar tt set b0='A36IN830DMYRBZC' where id=2; -update noar ti set b0='A36IN830DMYRBZC' where id=2; -update noar tt set b1='QLM8JTATMNIES9XESY' where id=2; -update noar ti set b1='QLM8JTATMNIES9XESY' where id=2; -update noar tt set b2='C26XNJX2NPBZILAYVHGKRS' where id=2; -update noar ti set b2='C26XNJX2NPBZILAYVHGKRS' where id=2; -update noar tt set b0='QT49FWECT9BS7A05NJ50FR7PG' where id=3; -update noar ti set b0='QT49FWECT9BS7A05NJ50FR7PG' where id=3; -update noar tt set b1='ATVWFNDOQ1R8' where id=3; -update noar ti set b1='ATVWFNDOQ1R8' where id=3; -update noar tt set b2='V' where id=3; -update noar ti set b2='V' where id=3; -update noar tt set b0='LPQKBR4IPN82SYO6A13W' where id=4; -update noar ti set b0='LPQKBR4IPN82SYO6A13W' where id=4; -update noar tt set b1='S7GAZ1INVKTJ' where id=4; -update noar ti set b1='S7GAZ1INVKTJ' where id=4; -update noar tt set b2='UYGU0JI9AI' where id=4; -update noar ti set b2='UYGU0JI9AI' where id=4; -update noar tt set b0='84T1AHYMJ' where id=5; -update noar ti set b0='84T1AHYMJ' where id=5; -update noar tt set b1='XW15XWNAKM' where id=5; -update noar ti set b1='XW15XWNAKM' where id=5; -update noar tt set b2='TXCEOAXNJ0CBRD31PEK3ZV0' where id=5; -update noar ti set b2='TXCEOAXNJ0CBRD31PEK3ZV0' where id=5; -update noar tt set b0='CPYZNWJBWN0O6X4ZSSZ4TDFCZMPIQ' where id=6; -update noar ti set b0='CPYZNWJBWN0O6X4ZSSZ4TDFCZMPIQ' where id=6; -update noar tt set b1='X9IDKTBK074WCZ92NWS6' where id=6; -update noar ti set b1='X9IDKTBK074WCZ92NWS6' where id=6; -update noar tt set b2='OT3QWO2' where id=6; -update noar ti set b2='OT3QWO2' where id=6; -update noar tt set b0='K4Z0SRYW9X39WDR6M1XI31DIY0Q6' where id=7; -update noar ti set b0='K4Z0SRYW9X39WDR6M1XI31DIY0Q6' where id=7; -update noar tt set b1='9KJPW50GJF28FJXP60KWP4MNVIR' where id=7; -update noar ti set b1='9KJPW50GJF28FJXP60KWP4MNVIR' where id=7; -update noar tt set b2='NKTGTP6Z88L73QKR' where id=7; -update noar ti set b2='NKTGTP6Z88L73QKR' where id=7; -update noar tt set b0='7A01' where id=8; -update noar ti set b0='7A01' where id=8; -update noar tt set b1='XDXY5DJHJXXGJTXK' where id=8; -update noar ti set b1='XDXY5DJHJXXGJTXK' where id=8; -update noar tt set b2='3O' where id=8; -update noar ti set b2='3O' where id=8; -update noar tt set b0='0K0SZ6N1NJEZCTNXA0B8M41N2IKJ' where id=9; -update noar ti set b0='0K0SZ6N1NJEZCTNXA0B8M41N2IKJ' where id=9; -update noar tt set b1='LLM7F8LF' where id=9; -update noar ti set b1='LLM7F8LF' where id=9; -update noar tt set b2='DJBWF1AI23LB4IF1O81RLJXTP2V2S9U' where id=9; -update noar ti set b2='DJBWF1AI23LB4IF1O81RLJXTP2V2S9U' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 mediumblob not null, - b1 longblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='S2GNWID48DVN' where id=1; -update noar ti set b0='S2GNWID48DVN' where id=1; -update noar tt set b1='OP7BN4PVZJ75AAFBMV1749B1OASG' where id=1; -update noar ti set b1='OP7BN4PVZJ75AAFBMV1749B1OASG' where id=1; -update noar tt set b2='6BWBHHCPT' where id=1; -update noar ti set b2='6BWBHHCPT' where id=1; -update noar tt set b0='87' where id=2; -update noar ti set b0='87' where id=2; -update noar tt set b1='R70I2AXYVJS' where id=2; -update noar ti set b1='R70I2AXYVJS' where id=2; -update noar tt set b2='S8X0XMCORSW5Z' where id=2; -update noar ti set b2='S8X0XMCORSW5Z' where id=2; -update noar tt set b0='Q8KA8L1ZO0OTCO1K0RTPAAS033GKXYX' where id=3; -update noar ti set b0='Q8KA8L1ZO0OTCO1K0RTPAAS033GKXYX' where id=3; -update noar tt set b1='DAJCJIW60JU1NUO0EHA7B2SWSPH2' where id=3; -update noar ti set b1='DAJCJIW60JU1NUO0EHA7B2SWSPH2' where id=3; -update noar tt set b2='56854R' where id=3; -update noar ti set b2='56854R' where id=3; -update noar tt set b0='MA64632MHVXC' where id=4; -update noar ti set b0='MA64632MHVXC' where id=4; -update noar tt set b1='8Z5DPNB' where id=4; -update noar ti set b1='8Z5DPNB' where id=4; -update noar tt set b2='IY44E3' where id=4; -update noar ti set b2='IY44E3' where id=4; -update noar tt set b0='5WE6S5' where id=5; -update noar ti set b0='5WE6S5' where id=5; -update noar tt set b1='NPX' where id=5; -update noar ti set b1='NPX' where id=5; -update noar tt set b2='1BAKLV9JYJFDZQHRIRKCZQ9EMAOEM32' where id=5; -update noar ti set b2='1BAKLV9JYJFDZQHRIRKCZQ9EMAOEM32' where id=5; -update noar tt set b0='JCY' where id=6; -update noar ti set b0='JCY' where id=6; -update noar tt set b1='LAHAK6KVY73SBNQHV7B2AC3UQ1LQY' where id=6; -update noar ti set b1='LAHAK6KVY73SBNQHV7B2AC3UQ1LQY' where id=6; -update noar tt set b2='1S7EMKKQHB9L' where id=6; -update noar ti set b2='1S7EMKKQHB9L' where id=6; -update noar tt set b0='G5QJOG8H2KTWKQA86R8ND14SHO' where id=7; -update noar ti set b0='G5QJOG8H2KTWKQA86R8ND14SHO' where id=7; -update noar tt set b1='CSXYJQZFL45CIIJ' where id=7; -update noar ti set b1='CSXYJQZFL45CIIJ' where id=7; -update noar tt set b2='RVLHD7DKC8KE6I5SA00T3XKF2SJQAIC' where id=7; -update noar ti set b2='RVLHD7DKC8KE6I5SA00T3XKF2SJQAIC' where id=7; -update noar tt set b0='645EV2FJ72QLO24F58RVKODYAHZ' where id=8; -update noar ti set b0='645EV2FJ72QLO24F58RVKODYAHZ' where id=8; -update noar tt set b1='TN' where id=8; -update noar ti set b1='TN' where id=8; -update noar tt set b2='9SD7ZYLA9JTKZ7KINPRLKQCEYBSLTHXM' where id=8; -update noar ti set b2='9SD7ZYLA9JTKZ7KINPRLKQCEYBSLTHXM' where id=8; -update noar tt set b0='VFZEHQZZ4MAKFGEOHZ4VTHT55' where id=9; -update noar ti set b0='VFZEHQZZ4MAKFGEOHZ4VTHT55' where id=9; -update noar tt set b1='GJI4MEN8D4554SKXD' where id=9; -update noar ti set b1='GJI4MEN8D4554SKXD' where id=9; -update noar tt set b2='PU2UXKL4TJ' where id=9; -update noar ti set b2='PU2UXKL4TJ' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 mediumblob null, - b1 longblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='QGP605SFDMORJVG1X4A8HFF47R1GMXU' where id=1; -update noar ti set b0='QGP605SFDMORJVG1X4A8HFF47R1GMXU' where id=1; -update noar tt set b1='RMND1JHVZFKU5MRUTY2X6KXD5NOVD4RP' where id=1; -update noar ti set b1='RMND1JHVZFKU5MRUTY2X6KXD5NOVD4RP' where id=1; -update noar tt set b2='XC5RRXD4UIJNYYVXO' where id=1; -update noar ti set b2='XC5RRXD4UIJNYYVXO' where id=1; -update noar tt set b0='L1D' where id=2; -update noar ti set b0='L1D' where id=2; -update noar tt set b1='3' where id=2; -update noar ti set b1='3' where id=2; -update noar tt set b2='J4FURTLO7LOHFI6WCDVX5' where id=2; -update noar ti set b2='J4FURTLO7LOHFI6WCDVX5' where id=2; -update noar tt set b0='CPKZBHO1AE8FOMDX6QOTAE' where id=3; -update noar ti set b0='CPKZBHO1AE8FOMDX6QOTAE' where id=3; -update noar tt set b1='Z0Z83M4987340NEB2637' where id=3; -update noar ti set b1='Z0Z83M4987340NEB2637' where id=3; -update noar tt set b2='0E9G11M74UYE3IE9EEDL' where id=3; -update noar ti set b2='0E9G11M74UYE3IE9EEDL' where id=3; -update noar tt set b0='6N99N5I' where id=4; -update noar ti set b0='6N99N5I' where id=4; -update noar tt set b1='SFLEK27' where id=4; -update noar ti set b1='SFLEK27' where id=4; -update noar tt set b2='9TNERZ7UCPFT09TXNB' where id=4; -update noar ti set b2='9TNERZ7UCPFT09TXNB' where id=4; -update noar tt set b0='WRRLSIN' where id=5; -update noar ti set b0='WRRLSIN' where id=5; -update noar tt set b1='20UD58MVO' where id=5; -update noar ti set b1='20UD58MVO' where id=5; -update noar tt set b2='O22I3AAI91GPOPJW5VE' where id=5; -update noar ti set b2='O22I3AAI91GPOPJW5VE' where id=5; -update noar tt set b0='48X5A0KD6HNRA0PYRO34' where id=6; -update noar ti set b0='48X5A0KD6HNRA0PYRO34' where id=6; -update noar tt set b1='RUVCMGC05CKVUTKGFH8NH1CF' where id=6; -update noar ti set b1='RUVCMGC05CKVUTKGFH8NH1CF' where id=6; -update noar tt set b2='ERCBW35363OYOBYREBDJRDCNTSGUB8N8' where id=6; -update noar ti set b2='ERCBW35363OYOBYREBDJRDCNTSGUB8N8' where id=6; -update noar tt set b0='PHGE90JKAE14EVI' where id=7; -update noar ti set b0='PHGE90JKAE14EVI' where id=7; -update noar tt set b1='PUX8' where id=7; -update noar ti set b1='PUX8' where id=7; -update noar tt set b2='U562PGF7JNY3XPDA7ONZ' where id=7; -update noar ti set b2='U562PGF7JNY3XPDA7ONZ' where id=7; -update noar tt set b0='LJKEHRQUK58A7KLG6JQGN' where id=8; -update noar ti set b0='LJKEHRQUK58A7KLG6JQGN' where id=8; -update noar tt set b1='3IK2Q' where id=8; -update noar ti set b1='3IK2Q' where id=8; -update noar tt set b2='9LUEWCJIP1KKV6JNZXRYOEZW7YUG8Z7M' where id=8; -update noar ti set b2='9LUEWCJIP1KKV6JNZXRYOEZW7YUG8Z7M' where id=8; -update noar tt set b0='GJY3JNVBRPI1GR44YATZTW12IVA5P' where id=9; -update noar ti set b0='GJY3JNVBRPI1GR44YATZTW12IVA5P' where id=9; -update noar tt set b1='QMKPYZAGVG89OSFIFPBXY74SRT7' where id=9; -update noar ti set b1='QMKPYZAGVG89OSFIFPBXY74SRT7' where id=9; -update noar tt set b2='3KJTATITCH2IG90S' where id=9; -update noar ti set b2='3KJTATITCH2IG90S' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 mediumblob not null, - b1 longblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='XLSSZRO' where id=1; -update noar ti set b0='XLSSZRO' where id=1; -update noar tt set b1='8' where id=1; -update noar ti set b1='8' where id=1; -update noar tt set b2='S8Q4QRFZYUFT36KU4EO78UPHHTX1F9C' where id=1; -update noar ti set b2='S8Q4QRFZYUFT36KU4EO78UPHHTX1F9C' where id=1; -update noar tt set b0='MAZR66TUMVRHAVG' where id=2; -update noar ti set b0='MAZR66TUMVRHAVG' where id=2; -update noar tt set b1='P8L5Y36PX' where id=2; -update noar ti set b1='P8L5Y36PX' where id=2; -update noar tt set b2='R0QWA98' where id=2; -update noar ti set b2='R0QWA98' where id=2; -update noar tt set b0='5XFZQ2UIQV6KLOQC3IJSIO84J66' where id=3; -update noar ti set b0='5XFZQ2UIQV6KLOQC3IJSIO84J66' where id=3; -update noar tt set b1='NV0WHD413MZ5UG0Q' where id=3; -update noar ti set b1='NV0WHD413MZ5UG0Q' where id=3; -update noar tt set b2='Q58X4R1NKDN07' where id=3; -update noar ti set b2='Q58X4R1NKDN07' where id=3; -update noar tt set b0='6LPVBTEW8' where id=4; -update noar ti set b0='6LPVBTEW8' where id=4; -update noar tt set b1='3UD320' where id=4; -update noar ti set b1='3UD320' where id=4; -update noar tt set b2='Z5U' where id=4; -update noar ti set b2='Z5U' where id=4; -update noar tt set b0='ZZ0F8BTA696P7' where id=5; -update noar ti set b0='ZZ0F8BTA696P7' where id=5; -update noar tt set b1='ERZ63IQCGM5GJSM73PBNWQVV2TDR' where id=5; -update noar ti set b1='ERZ63IQCGM5GJSM73PBNWQVV2TDR' where id=5; -update noar tt set b2='EH0T8993' where id=5; -update noar ti set b2='EH0T8993' where id=5; -update noar tt set b0='2XHTI3RA3ONPUTYQSQJDBIU0D' where id=6; -update noar ti set b0='2XHTI3RA3ONPUTYQSQJDBIU0D' where id=6; -update noar tt set b1='HN82VINZLWBNA69TOPU' where id=6; -update noar ti set b1='HN82VINZLWBNA69TOPU' where id=6; -update noar tt set b2='EAHU7YT1YP91SYEIOI29F6188' where id=6; -update noar ti set b2='EAHU7YT1YP91SYEIOI29F6188' where id=6; -update noar tt set b0='7GXGKG54FPDRKXJ' where id=7; -update noar ti set b0='7GXGKG54FPDRKXJ' where id=7; -update noar tt set b1='8QOHIX9AJ3030XGQZAAYKE8VEGX9' where id=7; -update noar ti set b1='8QOHIX9AJ3030XGQZAAYKE8VEGX9' where id=7; -update noar tt set b2='W8VM84Q' where id=7; -update noar ti set b2='W8VM84Q' where id=7; -update noar tt set b0='EV' where id=8; -update noar ti set b0='EV' where id=8; -update noar tt set b1='8HG0P' where id=8; -update noar ti set b1='8HG0P' where id=8; -update noar tt set b2='6J8XB9T2VKOGZ64AX7TJEB' where id=8; -update noar ti set b2='6J8XB9T2VKOGZ64AX7TJEB' where id=8; -update noar tt set b0='ECQLJ96HLRXI51N43K0ROIOESK6U' where id=9; -update noar ti set b0='ECQLJ96HLRXI51N43K0ROIOESK6U' where id=9; -update noar tt set b1='DRML428XG4R67BX0FN2G9GU' where id=9; -update noar ti set b1='DRML428XG4R67BX0FN2G9GU' where id=9; -update noar tt set b2='EW2G0TEWQ8GBQCRIH0083N5O' where id=9; -update noar ti set b2='EW2G0TEWQ8GBQCRIH0083N5O' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 mediumblob null, - b1 longblob null, - b2 text null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='MAXMPF7TUV0MCI56H1YFPH5' where id=1; -update noar ti set b0='MAXMPF7TUV0MCI56H1YFPH5' where id=1; -update noar tt set b1='S5EKMHZJ8CLDJ9MNKIFDL2H550SLET' where id=1; -update noar ti set b1='S5EKMHZJ8CLDJ9MNKIFDL2H550SLET' where id=1; -update noar tt set b2='C8KWQI6XUM04JT7OVZ' where id=1; -update noar ti set b2='C8KWQI6XUM04JT7OVZ' where id=1; -update noar tt set b0='LQEYSD1WNZTEGU2H67LBR6FZ0TX68Q' where id=2; -update noar ti set b0='LQEYSD1WNZTEGU2H67LBR6FZ0TX68Q' where id=2; -update noar tt set b1='4UYF6' where id=2; -update noar ti set b1='4UYF6' where id=2; -update noar tt set b2='X4S07Q4BPNVLFI70RX3GZHT8' where id=2; -update noar ti set b2='X4S07Q4BPNVLFI70RX3GZHT8' where id=2; -update noar tt set b0='F6MZ9NJELPT20WGF06OJQEK' where id=3; -update noar ti set b0='F6MZ9NJELPT20WGF06OJQEK' where id=3; -update noar tt set b1='S5O0BME9J8LYOAUECGIE26ZJ5HT' where id=3; -update noar ti set b1='S5O0BME9J8LYOAUECGIE26ZJ5HT' where id=3; -update noar tt set b2='6X8PYH566263PDZCHLKSYGAD9BMZP1' where id=3; -update noar ti set b2='6X8PYH566263PDZCHLKSYGAD9BMZP1' where id=3; -update noar tt set b0='R4K3C5YXY' where id=4; -update noar ti set b0='R4K3C5YXY' where id=4; -update noar tt set b1='BZ3VDZCVF33MFAJID27VS98' where id=4; -update noar ti set b1='BZ3VDZCVF33MFAJID27VS98' where id=4; -update noar tt set b2='919DT0JYDNP83TDYULW7ADCKU0KONWI' where id=4; -update noar ti set b2='919DT0JYDNP83TDYULW7ADCKU0KONWI' where id=4; -update noar tt set b0='X4' where id=5; -update noar ti set b0='X4' where id=5; -update noar tt set b1='Y8EMEG189APTMZQZNOZC8BEWRE' where id=5; -update noar ti set b1='Y8EMEG189APTMZQZNOZC8BEWRE' where id=5; -update noar tt set b2='O8G8767UNH2EGP51EDKM73' where id=5; -update noar ti set b2='O8G8767UNH2EGP51EDKM73' where id=5; -update noar tt set b0='T' where id=6; -update noar ti set b0='T' where id=6; -update noar tt set b1='UCOOJ2XL5I' where id=6; -update noar ti set b1='UCOOJ2XL5I' where id=6; -update noar tt set b2='GOAHWCD3HAT' where id=6; -update noar ti set b2='GOAHWCD3HAT' where id=6; -update noar tt set b0='RLWOZRXGBWP4U' where id=7; -update noar ti set b0='RLWOZRXGBWP4U' where id=7; -update noar tt set b1='003TSEHK4X0IN' where id=7; -update noar ti set b1='003TSEHK4X0IN' where id=7; -update noar tt set b2='VVRVGIUJXC1AQ9VEOM6Z50H7GDA6GOMD' where id=7; -update noar ti set b2='VVRVGIUJXC1AQ9VEOM6Z50H7GDA6GOMD' where id=7; -update noar tt set b0='DUX0L' where id=8; -update noar ti set b0='DUX0L' where id=8; -update noar tt set b1='JAZY2' where id=8; -update noar ti set b1='JAZY2' where id=8; -update noar tt set b2='KOSRX1CYE3IYSQ52O4NXSQH' where id=8; -update noar ti set b2='KOSRX1CYE3IYSQ52O4NXSQH' where id=8; -update noar tt set b0='T' where id=9; -update noar ti set b0='T' where id=9; -update noar tt set b1='I1' where id=9; -update noar ti set b1='I1' where id=9; -update noar tt set b2='M6IJVN179XNMABFH77B7XYQRO3ZPK6PX' where id=9; -update noar ti set b2='M6IJVN179XNMABFH77B7XYQRO3ZPK6PX' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 mediumblob not null, - b1 longblob not null, - b2 text not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='ARF2OX6I4NCXXOJABZ3CJ' where id=1; -update noar ti set b0='ARF2OX6I4NCXXOJABZ3CJ' where id=1; -update noar tt set b1='NWIX38X5JHKFVS2J3K0HSXSF' where id=1; -update noar ti set b1='NWIX38X5JHKFVS2J3K0HSXSF' where id=1; -update noar tt set b2='T3QSG3MSW4GR4KOY7' where id=1; -update noar ti set b2='T3QSG3MSW4GR4KOY7' where id=1; -update noar tt set b0='TB4KUIEG0P3RJE9O8TJFCK2A6SD66WPN' where id=2; -update noar ti set b0='TB4KUIEG0P3RJE9O8TJFCK2A6SD66WPN' where id=2; -update noar tt set b1='ZB38GFHO5G25' where id=2; -update noar ti set b1='ZB38GFHO5G25' where id=2; -update noar tt set b2='DOXK2H4BDYPQ' where id=2; -update noar ti set b2='DOXK2H4BDYPQ' where id=2; -update noar tt set b0='HI2INZC3LV' where id=3; -update noar ti set b0='HI2INZC3LV' where id=3; -update noar tt set b1='SEYL29YL09' where id=3; -update noar ti set b1='SEYL29YL09' where id=3; -update noar tt set b2='Q373ECQ6WFJYBTX33IHAW9VV1Z74Y' where id=3; -update noar ti set b2='Q373ECQ6WFJYBTX33IHAW9VV1Z74Y' where id=3; -update noar tt set b0='IOFI267CHU6NYW5XD' where id=4; -update noar ti set b0='IOFI267CHU6NYW5XD' where id=4; -update noar tt set b1='1AZDD78RDDKF' where id=4; -update noar ti set b1='1AZDD78RDDKF' where id=4; -update noar tt set b2='J5XXCDGGQ' where id=4; -update noar ti set b2='J5XXCDGGQ' where id=4; -update noar tt set b0='COVLBUULRWR9ET91497QKD1ARXA24FX' where id=5; -update noar ti set b0='COVLBUULRWR9ET91497QKD1ARXA24FX' where id=5; -update noar tt set b1='FO87IWC9NOFOQ7H7LMWBHQTL0DMRV' where id=5; -update noar ti set b1='FO87IWC9NOFOQ7H7LMWBHQTL0DMRV' where id=5; -update noar tt set b2='NGRXKNKH8F' where id=5; -update noar ti set b2='NGRXKNKH8F' where id=5; -update noar tt set b0='B14N1BBIV' where id=6; -update noar ti set b0='B14N1BBIV' where id=6; -update noar tt set b1='GQGLP8AILOUJX7KR' where id=6; -update noar ti set b1='GQGLP8AILOUJX7KR' where id=6; -update noar tt set b2='VEZ00YSQH91RP854VU6WYX3O6WV' where id=6; -update noar ti set b2='VEZ00YSQH91RP854VU6WYX3O6WV' where id=6; -update noar tt set b0='HGG16UAO75AXAWXNHN2BJH6NF8' where id=7; -update noar ti set b0='HGG16UAO75AXAWXNHN2BJH6NF8' where id=7; -update noar tt set b1='HE69FHE59A62' where id=7; -update noar ti set b1='HE69FHE59A62' where id=7; -update noar tt set b2='QGYJUGF4SH2FVAIOSIUH7RIHQGAYT4IF' where id=7; -update noar ti set b2='QGYJUGF4SH2FVAIOSIUH7RIHQGAYT4IF' where id=7; -update noar tt set b0='0QPCNEPH4HS3Y95056PYHD' where id=8; -update noar ti set b0='0QPCNEPH4HS3Y95056PYHD' where id=8; -update noar tt set b1='76VVLV9EUICA8VI14EWHOZ981S' where id=8; -update noar ti set b1='76VVLV9EUICA8VI14EWHOZ981S' where id=8; -update noar tt set b2='FP9GJ88TSSXHZ6IG78HZL8LOE' where id=8; -update noar ti set b2='FP9GJ88TSSXHZ6IG78HZL8LOE' where id=8; -update noar tt set b0='9MK5D1D120TUO930' where id=9; -update noar ti set b0='9MK5D1D120TUO930' where id=9; -update noar tt set b1='ZIKXPL7092J9X5HGM0M8K3JGJY7C7L5' where id=9; -update noar ti set b1='ZIKXPL7092J9X5HGM0M8K3JGJY7C7L5' where id=9; -update noar tt set b2='896QEL8BV8U' where id=9; -update noar ti set b2='896QEL8BV8U' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 mediumblob null, - b1 text null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='W0QJFVJ' where id=1; -update noar ti set b0='W0QJFVJ' where id=1; -update noar tt set b1='YM1BF3D6W4TQOFK93FGYD8' where id=1; -update noar ti set b1='YM1BF3D6W4TQOFK93FGYD8' where id=1; -update noar tt set b2='FB6EQWNT30U4J' where id=1; -update noar ti set b2='FB6EQWNT30U4J' where id=1; -update noar tt set b0='P6P5PTOVMOWYREA5WLZA6MLJE8' where id=2; -update noar ti set b0='P6P5PTOVMOWYREA5WLZA6MLJE8' where id=2; -update noar tt set b1='HF' where id=2; -update noar ti set b1='HF' where id=2; -update noar tt set b2='RX470Z0SCFQ8A73FP2QVNTAVCV' where id=2; -update noar ti set b2='RX470Z0SCFQ8A73FP2QVNTAVCV' where id=2; -update noar tt set b0='9LKU6FRQVHWPBCYT915SINB9PZT3' where id=3; -update noar ti set b0='9LKU6FRQVHWPBCYT915SINB9PZT3' where id=3; -update noar tt set b1='OI' where id=3; -update noar ti set b1='OI' where id=3; -update noar tt set b2='7RJ1V' where id=3; -update noar ti set b2='7RJ1V' where id=3; -update noar tt set b0='Z7F9J8HST42KX4CR9CF97J48' where id=4; -update noar ti set b0='Z7F9J8HST42KX4CR9CF97J48' where id=4; -update noar tt set b1='OJUDCULJW2F' where id=4; -update noar ti set b1='OJUDCULJW2F' where id=4; -update noar tt set b2='2YBFLBOTWURCB0WGXIZU5L' where id=4; -update noar ti set b2='2YBFLBOTWURCB0WGXIZU5L' where id=4; -update noar tt set b0='WM3J2U097STSKM6U6DW7UJZ82S3' where id=5; -update noar ti set b0='WM3J2U097STSKM6U6DW7UJZ82S3' where id=5; -update noar tt set b1='UPF2RESCJ328IRRF0JE4' where id=5; -update noar ti set b1='UPF2RESCJ328IRRF0JE4' where id=5; -update noar tt set b2='E51TQ8CWY2O9370GPECYGE' where id=5; -update noar ti set b2='E51TQ8CWY2O9370GPECYGE' where id=5; -update noar tt set b0='6B5D7SRKWBVRD' where id=6; -update noar ti set b0='6B5D7SRKWBVRD' where id=6; -update noar tt set b1='BOKNV90GOXK7LS9DE94JZ4E3H130' where id=6; -update noar ti set b1='BOKNV90GOXK7LS9DE94JZ4E3H130' where id=6; -update noar tt set b2='0973T91EOUKAJ21KTO3UVDG2138XDE0P' where id=6; -update noar ti set b2='0973T91EOUKAJ21KTO3UVDG2138XDE0P' where id=6; -update noar tt set b0='E5EJ5O2KSMY301OH82D7QTLINLLAXO8' where id=7; -update noar ti set b0='E5EJ5O2KSMY301OH82D7QTLINLLAXO8' where id=7; -update noar tt set b1='2OO1VI791DPW' where id=7; -update noar ti set b1='2OO1VI791DPW' where id=7; -update noar tt set b2='M4L3WADCIDTSKP0K4B' where id=7; -update noar ti set b2='M4L3WADCIDTSKP0K4B' where id=7; -update noar tt set b0='OHLFBDOPP8LDRSVGFUKYF' where id=8; -update noar ti set b0='OHLFBDOPP8LDRSVGFUKYF' where id=8; -update noar tt set b1='HNGAG0PI2P14' where id=8; -update noar ti set b1='HNGAG0PI2P14' where id=8; -update noar tt set b2='LHO4A4W1ABLSI8OFLHLJ7ITQ0AJS08L' where id=8; -update noar ti set b2='LHO4A4W1ABLSI8OFLHLJ7ITQ0AJS08L' where id=8; -update noar tt set b0='1L4U80T47PB7QH9UB8EELVY6ZDF' where id=9; -update noar ti set b0='1L4U80T47PB7QH9UB8EELVY6ZDF' where id=9; -update noar tt set b1='4D8M2CDJ3HGPO9I8Q1IOBCIA' where id=9; -update noar ti set b1='4D8M2CDJ3HGPO9I8Q1IOBCIA' where id=9; -update noar tt set b2='XC8FQAYG7ZIJ33Y9GFND89NEZ' where id=9; -update noar ti set b2='XC8FQAYG7ZIJ33Y9GFND89NEZ' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 mediumblob not null, - b1 text not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='QGWQDDONQL5X25L8VNYUUXU' where id=1; -update noar ti set b0='QGWQDDONQL5X25L8VNYUUXU' where id=1; -update noar tt set b1='EBL959YUAGUP1EPG2520JJDFH7OTM7XZ' where id=1; -update noar ti set b1='EBL959YUAGUP1EPG2520JJDFH7OTM7XZ' where id=1; -update noar tt set b2='1M3E1RBQE4UQAEIYNL7ESD03J' where id=1; -update noar ti set b2='1M3E1RBQE4UQAEIYNL7ESD03J' where id=1; -update noar tt set b0='8TJ' where id=2; -update noar ti set b0='8TJ' where id=2; -update noar tt set b1='1Q3Y77861R3AA9GCECZZ6E9MDLZP' where id=2; -update noar ti set b1='1Q3Y77861R3AA9GCECZZ6E9MDLZP' where id=2; -update noar tt set b2='HUN0WK1W5DUDLPUOHW' where id=2; -update noar ti set b2='HUN0WK1W5DUDLPUOHW' where id=2; -update noar tt set b0='GEQB5UIWO18S2JCI4O8536FTLVF0CR9K' where id=3; -update noar ti set b0='GEQB5UIWO18S2JCI4O8536FTLVF0CR9K' where id=3; -update noar tt set b1='P1YBSPIH2ZRKBN6ES' where id=3; -update noar ti set b1='P1YBSPIH2ZRKBN6ES' where id=3; -update noar tt set b2='LB5AASRDMOTT2POT3HED081HMHY49YN' where id=3; -update noar ti set b2='LB5AASRDMOTT2POT3HED081HMHY49YN' where id=3; -update noar tt set b0='5DYIRSIV5ZXMTKHL90FJ3K23' where id=4; -update noar ti set b0='5DYIRSIV5ZXMTKHL90FJ3K23' where id=4; -update noar tt set b1='YRAOVCPOBGHZZXDJRBTE8ZOR9KLD2' where id=4; -update noar ti set b1='YRAOVCPOBGHZZXDJRBTE8ZOR9KLD2' where id=4; -update noar tt set b2='8S35YGWXSQY22PPWC8SR5V20' where id=4; -update noar ti set b2='8S35YGWXSQY22PPWC8SR5V20' where id=4; -update noar tt set b0='CM1P4AU' where id=5; -update noar ti set b0='CM1P4AU' where id=5; -update noar tt set b1='TFQBR6' where id=5; -update noar ti set b1='TFQBR6' where id=5; -update noar tt set b2='PBGEKEEWEJGA' where id=5; -update noar ti set b2='PBGEKEEWEJGA' where id=5; -update noar tt set b0='A1KAGH5DTD510F2AH7TI6Q6Z13LA27T' where id=6; -update noar ti set b0='A1KAGH5DTD510F2AH7TI6Q6Z13LA27T' where id=6; -update noar tt set b1='X8FD0OFUZ64GWTW2RY5JP' where id=6; -update noar ti set b1='X8FD0OFUZ64GWTW2RY5JP' where id=6; -update noar tt set b2='3P7CJ7PKQIDQZVSQUQIT6QC4EEIVX26' where id=6; -update noar ti set b2='3P7CJ7PKQIDQZVSQUQIT6QC4EEIVX26' where id=6; -update noar tt set b0='06136OVB9R' where id=7; -update noar ti set b0='06136OVB9R' where id=7; -update noar tt set b1='ECTIILXY4HY8NH11H' where id=7; -update noar ti set b1='ECTIILXY4HY8NH11H' where id=7; -update noar tt set b2='IC2P5EB' where id=7; -update noar ti set b2='IC2P5EB' where id=7; -update noar tt set b0='IGP12N09O1SVH' where id=8; -update noar ti set b0='IGP12N09O1SVH' where id=8; -update noar tt set b1='JRMWRF4CYVMU2IL2OJC331G8GC5' where id=8; -update noar ti set b1='JRMWRF4CYVMU2IL2OJC331G8GC5' where id=8; -update noar tt set b2='TRRJCPEGX3N13TX8' where id=8; -update noar ti set b2='TRRJCPEGX3N13TX8' where id=8; -update noar tt set b0='D563TB8' where id=9; -update noar ti set b0='D563TB8' where id=9; -update noar tt set b1='TNY' where id=9; -update noar ti set b1='TNY' where id=9; -update noar tt set b2='PBLTJHGO6UE' where id=9; -update noar ti set b2='PBLTJHGO6UE' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 mediumblob null, - b1 text null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='OJYDB8MWAB63YTG0E1JHFAPSEN8O39LG' where id=1; -update noar ti set b0='OJYDB8MWAB63YTG0E1JHFAPSEN8O39LG' where id=1; -update noar tt set b1='WEGWFTFTVR8TW7SII56CXYW' where id=1; -update noar ti set b1='WEGWFTFTVR8TW7SII56CXYW' where id=1; -update noar tt set b2='Y3NR81I9IF0XUF0MHY4IGB36' where id=1; -update noar ti set b2='Y3NR81I9IF0XUF0MHY4IGB36' where id=1; -update noar tt set b0='D' where id=2; -update noar ti set b0='D' where id=2; -update noar tt set b1='EKVU3NT3N0VK0YT4WI4V208D6P' where id=2; -update noar ti set b1='EKVU3NT3N0VK0YT4WI4V208D6P' where id=2; -update noar tt set b2='7N7CWUOSN0U30AEWR23F3J25' where id=2; -update noar ti set b2='7N7CWUOSN0U30AEWR23F3J25' where id=2; -update noar tt set b0='0DFBT' where id=3; -update noar ti set b0='0DFBT' where id=3; -update noar tt set b1='49QW73ZWRP501FZ62RV932VXQ80ZZZ1T' where id=3; -update noar ti set b1='49QW73ZWRP501FZ62RV932VXQ80ZZZ1T' where id=3; -update noar tt set b2='ITX2UTXA4USKKPCN9W0REEUYJSMSPJ' where id=3; -update noar ti set b2='ITX2UTXA4USKKPCN9W0REEUYJSMSPJ' where id=3; -update noar tt set b0='XRYLIKBG' where id=4; -update noar ti set b0='XRYLIKBG' where id=4; -update noar tt set b1='D1L4AVKB3PY29' where id=4; -update noar ti set b1='D1L4AVKB3PY29' where id=4; -update noar tt set b2='DY6P9IFKZGHA0O9QSP7Y48E2K0O3' where id=4; -update noar ti set b2='DY6P9IFKZGHA0O9QSP7Y48E2K0O3' where id=4; -update noar tt set b0='G' where id=5; -update noar ti set b0='G' where id=5; -update noar tt set b1='30DKW9NKEH2PLYT67' where id=5; -update noar ti set b1='30DKW9NKEH2PLYT67' where id=5; -update noar tt set b2='UYLWN4VI7YOJDY98BYC06H' where id=5; -update noar ti set b2='UYLWN4VI7YOJDY98BYC06H' where id=5; -update noar tt set b0='HD5C5FO62R60MV32' where id=6; -update noar ti set b0='HD5C5FO62R60MV32' where id=6; -update noar tt set b1='JPMT3ORK6X6B' where id=6; -update noar ti set b1='JPMT3ORK6X6B' where id=6; -update noar tt set b2='JMCN7IEYYPX5A7P7AKU' where id=6; -update noar ti set b2='JMCN7IEYYPX5A7P7AKU' where id=6; -update noar tt set b0='6ZT2CAC6SPGFJT' where id=7; -update noar ti set b0='6ZT2CAC6SPGFJT' where id=7; -update noar tt set b1='VWXZURFZ05JU1O2NEQUKAPUV4' where id=7; -update noar ti set b1='VWXZURFZ05JU1O2NEQUKAPUV4' where id=7; -update noar tt set b2='ZZ8DDB6FQC50ER9KZMX285' where id=7; -update noar ti set b2='ZZ8DDB6FQC50ER9KZMX285' where id=7; -update noar tt set b0='DZJGBEZX6I7UPE9TA' where id=8; -update noar ti set b0='DZJGBEZX6I7UPE9TA' where id=8; -update noar tt set b1='L27Q' where id=8; -update noar ti set b1='L27Q' where id=8; -update noar tt set b2='7UHPKHZWJY4H0P8VP7U4NULH19R0M' where id=8; -update noar ti set b2='7UHPKHZWJY4H0P8VP7U4NULH19R0M' where id=8; -update noar tt set b0='C0G51KDVAZ2BKY03FAY4E' where id=9; -update noar ti set b0='C0G51KDVAZ2BKY03FAY4E' where id=9; -update noar tt set b1='M5PCQ9U0G1VSKJ5RHL4HENT' where id=9; -update noar ti set b1='M5PCQ9U0G1VSKJ5RHL4HENT' where id=9; -update noar tt set b2='7PG5GFY0BINV4A' where id=9; -update noar ti set b2='7PG5GFY0BINV4A' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 mediumblob not null, - b1 text not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='WPLDP7C9S5COMWMF8L0UUJ' where id=1; -update noar ti set b0='WPLDP7C9S5COMWMF8L0UUJ' where id=1; -update noar tt set b1='S4QEXH0J9T' where id=1; -update noar ti set b1='S4QEXH0J9T' where id=1; -update noar tt set b2='ADA4K9BMN6Y7IR98WL' where id=1; -update noar ti set b2='ADA4K9BMN6Y7IR98WL' where id=1; -update noar tt set b0='1NN67JASBVRJ' where id=2; -update noar ti set b0='1NN67JASBVRJ' where id=2; -update noar tt set b1='DJP9MTVJMNF7M6DP4BRCKGT53' where id=2; -update noar ti set b1='DJP9MTVJMNF7M6DP4BRCKGT53' where id=2; -update noar tt set b2='X3YFQC62W25L2OMCZISXI2WP' where id=2; -update noar ti set b2='X3YFQC62W25L2OMCZISXI2WP' where id=2; -update noar tt set b0='KLCDLI5TTTM3TLT6PULCOHW' where id=3; -update noar ti set b0='KLCDLI5TTTM3TLT6PULCOHW' where id=3; -update noar tt set b1='8A4KA8V4DWXNK2UCMSNXDNZ0XIUMCK' where id=3; -update noar ti set b1='8A4KA8V4DWXNK2UCMSNXDNZ0XIUMCK' where id=3; -update noar tt set b2='WSKRRRSTW1VW4UJ9XBNUX3M' where id=3; -update noar ti set b2='WSKRRRSTW1VW4UJ9XBNUX3M' where id=3; -update noar tt set b0='ZDMKXU8JYR891BTOIZ050Y6EDB' where id=4; -update noar ti set b0='ZDMKXU8JYR891BTOIZ050Y6EDB' where id=4; -update noar tt set b1='J4XUPSONCZZDEI6IFW' where id=4; -update noar ti set b1='J4XUPSONCZZDEI6IFW' where id=4; -update noar tt set b2='U9WKYA6' where id=4; -update noar ti set b2='U9WKYA6' where id=4; -update noar tt set b0='G66' where id=5; -update noar ti set b0='G66' where id=5; -update noar tt set b1='KIFJN1NZGZDY5MVDRJQ' where id=5; -update noar ti set b1='KIFJN1NZGZDY5MVDRJQ' where id=5; -update noar tt set b2='QI2KOTI' where id=5; -update noar ti set b2='QI2KOTI' where id=5; -update noar tt set b0='6LI7VNF5DE7J4IBMOSKCR9693XCVVRE' where id=6; -update noar ti set b0='6LI7VNF5DE7J4IBMOSKCR9693XCVVRE' where id=6; -update noar tt set b1='JLIJWW1ENFYVXUX0O4FOW' where id=6; -update noar ti set b1='JLIJWW1ENFYVXUX0O4FOW' where id=6; -update noar tt set b2='7IML6T4324046OECV9J5RP0KRAL0' where id=6; -update noar ti set b2='7IML6T4324046OECV9J5RP0KRAL0' where id=6; -update noar tt set b0='FQVFWHN88E9XZ9KT' where id=7; -update noar ti set b0='FQVFWHN88E9XZ9KT' where id=7; -update noar tt set b1='ZCORTFD9TO' where id=7; -update noar ti set b1='ZCORTFD9TO' where id=7; -update noar tt set b2='NZWVZV5M7UEGZE412K48' where id=7; -update noar ti set b2='NZWVZV5M7UEGZE412K48' where id=7; -update noar tt set b0='14ZWGXXU02SJGP1R7ETFU5' where id=8; -update noar ti set b0='14ZWGXXU02SJGP1R7ETFU5' where id=8; -update noar tt set b1='MW9IVFHIBZDAYGC1F2KIV0E' where id=8; -update noar ti set b1='MW9IVFHIBZDAYGC1F2KIV0E' where id=8; -update noar tt set b2='OY' where id=8; -update noar ti set b2='OY' where id=8; -update noar tt set b0='ZCE1Z1' where id=9; -update noar ti set b0='ZCE1Z1' where id=9; -update noar tt set b1='ID6VRJF66OU8SN60EY' where id=9; -update noar ti set b1='ID6VRJF66OU8SN60EY' where id=9; -update noar tt set b2='DM39LR37P6XB7KQXY' where id=9; -update noar ti set b2='DM39LR37P6XB7KQXY' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 mediumblob null, - b1 text null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='MO26TDAU' where id=1; -update noar ti set b0='MO26TDAU' where id=1; -update noar tt set b1='OLY4PJ9DUHJRJ4MAT1WYDO8T03R69' where id=1; -update noar ti set b1='OLY4PJ9DUHJRJ4MAT1WYDO8T03R69' where id=1; -update noar tt set b2='M6JJZ08IG2MO99XAETZ70RM' where id=1; -update noar ti set b2='M6JJZ08IG2MO99XAETZ70RM' where id=1; -update noar tt set b0='B77CGU2C3' where id=2; -update noar ti set b0='B77CGU2C3' where id=2; -update noar tt set b1='9FGMC9UV' where id=2; -update noar ti set b1='9FGMC9UV' where id=2; -update noar tt set b2='PJXELC' where id=2; -update noar ti set b2='PJXELC' where id=2; -update noar tt set b0='HXGLD' where id=3; -update noar ti set b0='HXGLD' where id=3; -update noar tt set b1='C36IY80' where id=3; -update noar ti set b1='C36IY80' where id=3; -update noar tt set b2='PJPIRG2MO' where id=3; -update noar ti set b2='PJPIRG2MO' where id=3; -update noar tt set b0='7QZ1UONC' where id=4; -update noar ti set b0='7QZ1UONC' where id=4; -update noar tt set b1='DKSZ13EZV0H86XZG5E10U' where id=4; -update noar ti set b1='DKSZ13EZV0H86XZG5E10U' where id=4; -update noar tt set b2='WAX1MPIF2N2SXAI3NX' where id=4; -update noar ti set b2='WAX1MPIF2N2SXAI3NX' where id=4; -update noar tt set b0='P' where id=5; -update noar ti set b0='P' where id=5; -update noar tt set b1='WCNF845CIL32MU11UUST7' where id=5; -update noar ti set b1='WCNF845CIL32MU11UUST7' where id=5; -update noar tt set b2='7DPY2HIGM' where id=5; -update noar ti set b2='7DPY2HIGM' where id=5; -update noar tt set b0='XC9REDW3OFHXI08CWH4Q' where id=6; -update noar ti set b0='XC9REDW3OFHXI08CWH4Q' where id=6; -update noar tt set b1='R5N915M1Q0QI4EOP7' where id=6; -update noar ti set b1='R5N915M1Q0QI4EOP7' where id=6; -update noar tt set b2='TTK8KG5CCCN71SWMIK' where id=6; -update noar ti set b2='TTK8KG5CCCN71SWMIK' where id=6; -update noar tt set b0='RJPKUXAVTW252NE' where id=7; -update noar ti set b0='RJPKUXAVTW252NE' where id=7; -update noar tt set b1='HWCQBI7B965LGCS8UU3A' where id=7; -update noar ti set b1='HWCQBI7B965LGCS8UU3A' where id=7; -update noar tt set b2='G3P7O9PG4LD5Z8IMLTVT0K5E6' where id=7; -update noar ti set b2='G3P7O9PG4LD5Z8IMLTVT0K5E6' where id=7; -update noar tt set b0='QOBKPBE6VF45GYCNC' where id=8; -update noar ti set b0='QOBKPBE6VF45GYCNC' where id=8; -update noar tt set b1='A7MG33' where id=8; -update noar ti set b1='A7MG33' where id=8; -update noar tt set b2='6YTS36DH0ZTJ1JVF3PD07T968A' where id=8; -update noar ti set b2='6YTS36DH0ZTJ1JVF3PD07T968A' where id=8; -update noar tt set b0='9HQ3TSV' where id=9; -update noar ti set b0='9HQ3TSV' where id=9; -update noar tt set b1='VM82BLAHGL5T97UYA' where id=9; -update noar ti set b1='VM82BLAHGL5T97UYA' where id=9; -update noar tt set b2='BV7B20OH71VL3A7J' where id=9; -update noar ti set b2='BV7B20OH71VL3A7J' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 mediumblob not null, - b1 text not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='SQSFIG54XSZ1E' where id=1; -update noar ti set b0='SQSFIG54XSZ1E' where id=1; -update noar tt set b1='6BXXLC212IQEQ' where id=1; -update noar ti set b1='6BXXLC212IQEQ' where id=1; -update noar tt set b2='GYVTR' where id=1; -update noar ti set b2='GYVTR' where id=1; -update noar tt set b0='LMF3IIR5HK225OXPP' where id=2; -update noar ti set b0='LMF3IIR5HK225OXPP' where id=2; -update noar tt set b1='RR0F06FJBW' where id=2; -update noar ti set b1='RR0F06FJBW' where id=2; -update noar tt set b2='4AMQY64RN6LUME5TYAB519Q' where id=2; -update noar ti set b2='4AMQY64RN6LUME5TYAB519Q' where id=2; -update noar tt set b0='RYQU2MQ' where id=3; -update noar ti set b0='RYQU2MQ' where id=3; -update noar tt set b1='Z3T' where id=3; -update noar ti set b1='Z3T' where id=3; -update noar tt set b2='FEKQEZ1V3AXGTRZ' where id=3; -update noar ti set b2='FEKQEZ1V3AXGTRZ' where id=3; -update noar tt set b0='J0FM9KOZUR7RO7JRSOVL0UJ' where id=4; -update noar ti set b0='J0FM9KOZUR7RO7JRSOVL0UJ' where id=4; -update noar tt set b1='24QUOXMREDZ5AS2BMQHYMW' where id=4; -update noar ti set b1='24QUOXMREDZ5AS2BMQHYMW' where id=4; -update noar tt set b2='ECOGBNK9IPH0WQIXW7' where id=4; -update noar ti set b2='ECOGBNK9IPH0WQIXW7' where id=4; -update noar tt set b0='OCY6M8H3GGQ57T8HJG5YF9' where id=5; -update noar ti set b0='OCY6M8H3GGQ57T8HJG5YF9' where id=5; -update noar tt set b1='9J3GLLT7QGGNL5' where id=5; -update noar ti set b1='9J3GLLT7QGGNL5' where id=5; -update noar tt set b2='O' where id=5; -update noar ti set b2='O' where id=5; -update noar tt set b0='38G39L714NT2F6TJ2' where id=6; -update noar ti set b0='38G39L714NT2F6TJ2' where id=6; -update noar tt set b1='Y5O1P9JY' where id=6; -update noar ti set b1='Y5O1P9JY' where id=6; -update noar tt set b2='HPKLJ3M2LLA24J93N6AL5D' where id=6; -update noar ti set b2='HPKLJ3M2LLA24J93N6AL5D' where id=6; -update noar tt set b0='84FQUWELNZGNWUHXWCB4N4YQ5S' where id=7; -update noar ti set b0='84FQUWELNZGNWUHXWCB4N4YQ5S' where id=7; -update noar tt set b1='QNE3' where id=7; -update noar ti set b1='QNE3' where id=7; -update noar tt set b2='A4VSP8T3SSXQ' where id=7; -update noar ti set b2='A4VSP8T3SSXQ' where id=7; -update noar tt set b0='EXFL3VSS21ZYCLRW2UW4OVYYT' where id=8; -update noar ti set b0='EXFL3VSS21ZYCLRW2UW4OVYYT' where id=8; -update noar tt set b1='HCAHS6X6M92VVSC7P2' where id=8; -update noar ti set b1='HCAHS6X6M92VVSC7P2' where id=8; -update noar tt set b2='J8TWW74' where id=8; -update noar ti set b2='J8TWW74' where id=8; -update noar tt set b0='9LXGXJ4ERVU7D9Z' where id=9; -update noar ti set b0='9LXGXJ4ERVU7D9Z' where id=9; -update noar tt set b1='E' where id=9; -update noar ti set b1='E' where id=9; -update noar tt set b2='4STJCY7EQ74FUNJHA9C' where id=9; -update noar ti set b2='4STJCY7EQ74FUNJHA9C' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 mediumblob null, - b1 text null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='MEY' where id=1; -update noar ti set b0='MEY' where id=1; -update noar tt set b1='WO8KREUBEIEZLLN7BOSUO05FXSTMGX' where id=1; -update noar ti set b1='WO8KREUBEIEZLLN7BOSUO05FXSTMGX' where id=1; -update noar tt set b2='BHEXCELMKQZQ2FI9XCIZ' where id=1; -update noar ti set b2='BHEXCELMKQZQ2FI9XCIZ' where id=1; -update noar tt set b0='GR35XAX7DH0IVGCZXE' where id=2; -update noar ti set b0='GR35XAX7DH0IVGCZXE' where id=2; -update noar tt set b1='KIZHZ1' where id=2; -update noar ti set b1='KIZHZ1' where id=2; -update noar tt set b2='JVIUV8JDRF7LSREK43L7YEA8R0P' where id=2; -update noar ti set b2='JVIUV8JDRF7LSREK43L7YEA8R0P' where id=2; -update noar tt set b0='DCVA0MAQ' where id=3; -update noar ti set b0='DCVA0MAQ' where id=3; -update noar tt set b1='VSIV4KCPQVJN' where id=3; -update noar ti set b1='VSIV4KCPQVJN' where id=3; -update noar tt set b2='NURPT' where id=3; -update noar ti set b2='NURPT' where id=3; -update noar tt set b0='CBX256Z5QSS8TDK547BLJ8USDF' where id=4; -update noar ti set b0='CBX256Z5QSS8TDK547BLJ8USDF' where id=4; -update noar tt set b1='W' where id=4; -update noar ti set b1='W' where id=4; -update noar tt set b2='PHL73DJ8MIFYBXS8GQN00' where id=4; -update noar ti set b2='PHL73DJ8MIFYBXS8GQN00' where id=4; -update noar tt set b0='PDAPO' where id=5; -update noar ti set b0='PDAPO' where id=5; -update noar tt set b1='75BOFPWVTS0SX9H13U' where id=5; -update noar ti set b1='75BOFPWVTS0SX9H13U' where id=5; -update noar tt set b2='U' where id=5; -update noar ti set b2='U' where id=5; -update noar tt set b0='6TTBI9QBDL8YC0BQ' where id=6; -update noar ti set b0='6TTBI9QBDL8YC0BQ' where id=6; -update noar tt set b1='R0RFXKIK8Q229G84HCG65GPFYHYPV4' where id=6; -update noar ti set b1='R0RFXKIK8Q229G84HCG65GPFYHYPV4' where id=6; -update noar tt set b2='YLVD17U4C2J9OQWTEPB3LURN0XL0Y3G' where id=6; -update noar ti set b2='YLVD17U4C2J9OQWTEPB3LURN0XL0Y3G' where id=6; -update noar tt set b0='LK1DQH34TFB0CK5BA1I' where id=7; -update noar ti set b0='LK1DQH34TFB0CK5BA1I' where id=7; -update noar tt set b1='NQ3HCK' where id=7; -update noar ti set b1='NQ3HCK' where id=7; -update noar tt set b2='KNDF1DKQRH5PO92' where id=7; -update noar ti set b2='KNDF1DKQRH5PO92' where id=7; -update noar tt set b0='UEMG' where id=8; -update noar ti set b0='UEMG' where id=8; -update noar tt set b1='8CXCKX5NRK9NTZ6IQE5R' where id=8; -update noar ti set b1='8CXCKX5NRK9NTZ6IQE5R' where id=8; -update noar tt set b2='ENVP2Z6ADCZ7N' where id=8; -update noar ti set b2='ENVP2Z6ADCZ7N' where id=8; -update noar tt set b0='TH4AGQYIC2VTL' where id=9; -update noar ti set b0='TH4AGQYIC2VTL' where id=9; -update noar tt set b1='NO3XHO0U' where id=9; -update noar ti set b1='NO3XHO0U' where id=9; -update noar tt set b2='FOS0YAIHPEJ4GXN47ME6S2I34KDCRF5' where id=9; -update noar ti set b2='FOS0YAIHPEJ4GXN47ME6S2I34KDCRF5' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 mediumblob not null, - b1 text not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='47GCPQAS8Z' where id=1; -update noar ti set b0='47GCPQAS8Z' where id=1; -update noar tt set b1='RUUX6W0XPRGR1T' where id=1; -update noar ti set b1='RUUX6W0XPRGR1T' where id=1; -update noar tt set b2='O1OLWMDZE4N4KQTQ6V5SSQQ' where id=1; -update noar ti set b2='O1OLWMDZE4N4KQTQ6V5SSQQ' where id=1; -update noar tt set b0='5' where id=2; -update noar ti set b0='5' where id=2; -update noar tt set b1='2C16JT7MNVVYOOFGMCUH4H17UV2' where id=2; -update noar ti set b1='2C16JT7MNVVYOOFGMCUH4H17UV2' where id=2; -update noar tt set b2='HX4ZXAAAPJRGAEPNYGW' where id=2; -update noar ti set b2='HX4ZXAAAPJRGAEPNYGW' where id=2; -update noar tt set b0='UOEWA5QXDC' where id=3; -update noar ti set b0='UOEWA5QXDC' where id=3; -update noar tt set b1='Z6XUNYQK6CCEMFY1' where id=3; -update noar ti set b1='Z6XUNYQK6CCEMFY1' where id=3; -update noar tt set b2='VYBYWHFYAH8NZQSYSKBMI0X6T4V5PB' where id=3; -update noar ti set b2='VYBYWHFYAH8NZQSYSKBMI0X6T4V5PB' where id=3; -update noar tt set b0='RC28XF0SK9PK0ADQ' where id=4; -update noar ti set b0='RC28XF0SK9PK0ADQ' where id=4; -update noar tt set b1='Z3MJHR9Y' where id=4; -update noar ti set b1='Z3MJHR9Y' where id=4; -update noar tt set b2='PGVG9TYDNRXL4PHSNE2' where id=4; -update noar ti set b2='PGVG9TYDNRXL4PHSNE2' where id=4; -update noar tt set b0='Z8HXG3YMG81O' where id=5; -update noar ti set b0='Z8HXG3YMG81O' where id=5; -update noar tt set b1='HANBKEQB' where id=5; -update noar ti set b1='HANBKEQB' where id=5; -update noar tt set b2='WET8XPK0U46O04F2PWLYO' where id=5; -update noar ti set b2='WET8XPK0U46O04F2PWLYO' where id=5; -update noar tt set b0='1ZDVLUAH7SA3Y3C' where id=6; -update noar ti set b0='1ZDVLUAH7SA3Y3C' where id=6; -update noar tt set b1='7UXYUP8DL' where id=6; -update noar ti set b1='7UXYUP8DL' where id=6; -update noar tt set b2='43IEZTC48NRTT' where id=6; -update noar ti set b2='43IEZTC48NRTT' where id=6; -update noar tt set b0='CN0U6MFEDO87QXBTFV' where id=7; -update noar ti set b0='CN0U6MFEDO87QXBTFV' where id=7; -update noar tt set b1='12IR' where id=7; -update noar ti set b1='12IR' where id=7; -update noar tt set b2='AJ781Y60NOULD5D4EB6TRJ' where id=7; -update noar ti set b2='AJ781Y60NOULD5D4EB6TRJ' where id=7; -update noar tt set b0='F2R0ODT21WYB7UTUMMAX9QUT' where id=8; -update noar ti set b0='F2R0ODT21WYB7UTUMMAX9QUT' where id=8; -update noar tt set b1='UX96QNPUSYZ5N6' where id=8; -update noar ti set b1='UX96QNPUSYZ5N6' where id=8; -update noar tt set b2='KJPX7L' where id=8; -update noar ti set b2='KJPX7L' where id=8; -update noar tt set b0='HS9MW0WYQW1SOPDL9AFQ09RM' where id=9; -update noar ti set b0='HS9MW0WYQW1SOPDL9AFQ09RM' where id=9; -update noar tt set b1='2BN1M4X3C5151D634XWJ0F' where id=9; -update noar ti set b1='2BN1M4X3C5151D634XWJ0F' where id=9; -update noar tt set b2='3TF8SXGPMCDCUYXQVXFKYA1NX' where id=9; -update noar ti set b2='3TF8SXGPMCDCUYXQVXFKYA1NX' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 mediumblob null, - b1 text null, - b2 text null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='MV18' where id=1; -update noar ti set b0='MV18' where id=1; -update noar tt set b1='BBFXPWAZSE6R3KFIMM2KPW5' where id=1; -update noar ti set b1='BBFXPWAZSE6R3KFIMM2KPW5' where id=1; -update noar tt set b2='KM0ZBQMDVQBIZS80IHP2C' where id=1; -update noar ti set b2='KM0ZBQMDVQBIZS80IHP2C' where id=1; -update noar tt set b0='DRFLPZY511AXR8X722' where id=2; -update noar ti set b0='DRFLPZY511AXR8X722' where id=2; -update noar tt set b1='UZYAY9KJN6GN05N2Q4N15TK1FIGTQOK' where id=2; -update noar ti set b1='UZYAY9KJN6GN05N2Q4N15TK1FIGTQOK' where id=2; -update noar tt set b2='IW2GAUW4F83SDJML05MJNHVJLEH' where id=2; -update noar ti set b2='IW2GAUW4F83SDJML05MJNHVJLEH' where id=2; -update noar tt set b0='D06OK45UXZ52A1DTP7M1' where id=3; -update noar ti set b0='D06OK45UXZ52A1DTP7M1' where id=3; -update noar tt set b1='U' where id=3; -update noar ti set b1='U' where id=3; -update noar tt set b2='MOTJ7AML' where id=3; -update noar ti set b2='MOTJ7AML' where id=3; -update noar tt set b0='NJFIU7G28CN' where id=4; -update noar ti set b0='NJFIU7G28CN' where id=4; -update noar tt set b1='2RCIF4W' where id=4; -update noar ti set b1='2RCIF4W' where id=4; -update noar tt set b2='REBFM32' where id=4; -update noar ti set b2='REBFM32' where id=4; -update noar tt set b0='IVQMCZ9EFCI8BGMJ9Y8QVQVM4UGBAOD' where id=5; -update noar ti set b0='IVQMCZ9EFCI8BGMJ9Y8QVQVM4UGBAOD' where id=5; -update noar tt set b1='E5' where id=5; -update noar ti set b1='E5' where id=5; -update noar tt set b2='RL0RVKCO6UTR9B3TJ' where id=5; -update noar ti set b2='RL0RVKCO6UTR9B3TJ' where id=5; -update noar tt set b0='G' where id=6; -update noar ti set b0='G' where id=6; -update noar tt set b1='ZF' where id=6; -update noar ti set b1='ZF' where id=6; -update noar tt set b2='9M58ZXGHXIQZKMUH1ZJMM6BDQX4I' where id=6; -update noar ti set b2='9M58ZXGHXIQZKMUH1ZJMM6BDQX4I' where id=6; -update noar tt set b0='4NUHJK9Q4UBU9776I0ILL7OADOM33G' where id=7; -update noar ti set b0='4NUHJK9Q4UBU9776I0ILL7OADOM33G' where id=7; -update noar tt set b1='I4VIYZXAEF3RKS9PGRHQUZWMS5RNLT' where id=7; -update noar ti set b1='I4VIYZXAEF3RKS9PGRHQUZWMS5RNLT' where id=7; -update noar tt set b2='ER0OE7' where id=7; -update noar ti set b2='ER0OE7' where id=7; -update noar tt set b0='ZME8Q' where id=8; -update noar ti set b0='ZME8Q' where id=8; -update noar tt set b1='ESLK1' where id=8; -update noar ti set b1='ESLK1' where id=8; -update noar tt set b2='CAGDTXCI2MJ' where id=8; -update noar ti set b2='CAGDTXCI2MJ' where id=8; -update noar tt set b0='WEDXNTS76L0J55CIWBHJ7' where id=9; -update noar ti set b0='WEDXNTS76L0J55CIWBHJ7' where id=9; -update noar tt set b1='CDYAACCVDNH' where id=9; -update noar ti set b1='CDYAACCVDNH' where id=9; -update noar tt set b2='CREPE4E97E' where id=9; -update noar ti set b2='CREPE4E97E' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 mediumblob not null, - b1 text not null, - b2 text not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='QC8Y8WMF2K31HRB8K1BABCIFEK2O7ZT1' where id=1; -update noar ti set b0='QC8Y8WMF2K31HRB8K1BABCIFEK2O7ZT1' where id=1; -update noar tt set b1='FJHT4U2MD3E001UC840968924PVD' where id=1; -update noar ti set b1='FJHT4U2MD3E001UC840968924PVD' where id=1; -update noar tt set b2='7VVN5F4TJKXVG' where id=1; -update noar ti set b2='7VVN5F4TJKXVG' where id=1; -update noar tt set b0='KAO8X7OYFBI2WHB3UQN47J1M4J' where id=2; -update noar ti set b0='KAO8X7OYFBI2WHB3UQN47J1M4J' where id=2; -update noar tt set b1='VSRFYUKV8VT46VWAV' where id=2; -update noar ti set b1='VSRFYUKV8VT46VWAV' where id=2; -update noar tt set b2='F1FXID9F' where id=2; -update noar ti set b2='F1FXID9F' where id=2; -update noar tt set b0='C' where id=3; -update noar ti set b0='C' where id=3; -update noar tt set b1='LYQLD3MOJHFTLYQJZTW7D' where id=3; -update noar ti set b1='LYQLD3MOJHFTLYQJZTW7D' where id=3; -update noar tt set b2='AOR38IUWZXLUIQIV1' where id=3; -update noar ti set b2='AOR38IUWZXLUIQIV1' where id=3; -update noar tt set b0='0MPJ71PDA0Z6663Q' where id=4; -update noar ti set b0='0MPJ71PDA0Z6663Q' where id=4; -update noar tt set b1='P2AD5S' where id=4; -update noar ti set b1='P2AD5S' where id=4; -update noar tt set b2='TZQ4LHVDN2UFLZ0P' where id=4; -update noar ti set b2='TZQ4LHVDN2UFLZ0P' where id=4; -update noar tt set b0='CSGGA6LH3FDSKN9AXVMDQ1JJ314AB2BJ' where id=5; -update noar ti set b0='CSGGA6LH3FDSKN9AXVMDQ1JJ314AB2BJ' where id=5; -update noar tt set b1='XK9P4BMU6RC424CNBO0POJL8' where id=5; -update noar ti set b1='XK9P4BMU6RC424CNBO0POJL8' where id=5; -update noar tt set b2='DALCTHKLU5RT3P' where id=5; -update noar ti set b2='DALCTHKLU5RT3P' where id=5; -update noar tt set b0='DFZUWI09WO' where id=6; -update noar ti set b0='DFZUWI09WO' where id=6; -update noar tt set b1='PQDNREGTFT0A' where id=6; -update noar ti set b1='PQDNREGTFT0A' where id=6; -update noar tt set b2='TUI2HHEO4H1IIFWTQA3' where id=6; -update noar ti set b2='TUI2HHEO4H1IIFWTQA3' where id=6; -update noar tt set b0='77' where id=7; -update noar ti set b0='77' where id=7; -update noar tt set b1='NGZNLFE318H8VHKLU1Y8X6RCJI0L25B' where id=7; -update noar ti set b1='NGZNLFE318H8VHKLU1Y8X6RCJI0L25B' where id=7; -update noar tt set b2='L1MV' where id=7; -update noar ti set b2='L1MV' where id=7; -update noar tt set b0='EABNWWR5W8YP94LBL8A4S4BLEBCYCVI2' where id=8; -update noar ti set b0='EABNWWR5W8YP94LBL8A4S4BLEBCYCVI2' where id=8; -update noar tt set b1='E8IGWGKYLN6RH275FMCHYDSTW' where id=8; -update noar ti set b1='E8IGWGKYLN6RH275FMCHYDSTW' where id=8; -update noar tt set b2='HTRDE033P5NLT0ZXTCZ' where id=8; -update noar ti set b2='HTRDE033P5NLT0ZXTCZ' where id=8; -update noar tt set b0='GODI9RMP6' where id=9; -update noar ti set b0='GODI9RMP6' where id=9; -update noar tt set b1='XZRQT0PIFZHJI23FG' where id=9; -update noar ti set b1='XZRQT0PIFZHJI23FG' where id=9; -update noar tt set b2='XOWPY1BNL679JDHKBKY8G95EG3' where id=9; -update noar ti set b2='XOWPY1BNL679JDHKBKY8G95EG3' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 longblob null, - b1 tinyblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='AO1Q5U9DUO' where id=1; -update noar ti set b0='AO1Q5U9DUO' where id=1; -update noar tt set b1='2V80' where id=1; -update noar ti set b1='2V80' where id=1; -update noar tt set b2='H2DJRSWGQE31N4DCMGJG4E5' where id=1; -update noar ti set b2='H2DJRSWGQE31N4DCMGJG4E5' where id=1; -update noar tt set b0='C1EB85YC9F4E2A06H7NZJA' where id=2; -update noar ti set b0='C1EB85YC9F4E2A06H7NZJA' where id=2; -update noar tt set b1='0C95J97UME2LZXM' where id=2; -update noar ti set b1='0C95J97UME2LZXM' where id=2; -update noar tt set b2='DYAMC3LJ8JB7IIDXZWR7' where id=2; -update noar ti set b2='DYAMC3LJ8JB7IIDXZWR7' where id=2; -update noar tt set b0='8JGN0M2QJ6' where id=3; -update noar ti set b0='8JGN0M2QJ6' where id=3; -update noar tt set b1='1ZSV3C' where id=3; -update noar ti set b1='1ZSV3C' where id=3; -update noar tt set b2='WLXCGC4INPCHJIGZF04D53ROXCD' where id=3; -update noar ti set b2='WLXCGC4INPCHJIGZF04D53ROXCD' where id=3; -update noar tt set b0='BOBD4YMJPPVU5JUXOQ5Z7YDO' where id=4; -update noar ti set b0='BOBD4YMJPPVU5JUXOQ5Z7YDO' where id=4; -update noar tt set b1='TY3749KD8QI3IP16CXJH5' where id=4; -update noar ti set b1='TY3749KD8QI3IP16CXJH5' where id=4; -update noar tt set b2='8GH9PU1C7PSZB3BJ' where id=4; -update noar ti set b2='8GH9PU1C7PSZB3BJ' where id=4; -update noar tt set b0='7YA56URK0CR5VMXI8R7VATMWUVNT3BAN' where id=5; -update noar ti set b0='7YA56URK0CR5VMXI8R7VATMWUVNT3BAN' where id=5; -update noar tt set b1='5WJFTNMHH' where id=5; -update noar ti set b1='5WJFTNMHH' where id=5; -update noar tt set b2='IYX' where id=5; -update noar ti set b2='IYX' where id=5; -update noar tt set b0='5X0O7GYS66631NP8066L7EVYCMEZHCY' where id=6; -update noar ti set b0='5X0O7GYS66631NP8066L7EVYCMEZHCY' where id=6; -update noar tt set b1='4BLUDKH4CCCHU8E4K2F' where id=6; -update noar ti set b1='4BLUDKH4CCCHU8E4K2F' where id=6; -update noar tt set b2='B4IR' where id=6; -update noar ti set b2='B4IR' where id=6; -update noar tt set b0='7CYJF6U7DCZA3F9AXO9J' where id=7; -update noar ti set b0='7CYJF6U7DCZA3F9AXO9J' where id=7; -update noar tt set b1='Y0VE4DUYQWYVBLZ4SGAY' where id=7; -update noar ti set b1='Y0VE4DUYQWYVBLZ4SGAY' where id=7; -update noar tt set b2='W58MCELG8SR963AIJVXD8Q2U' where id=7; -update noar ti set b2='W58MCELG8SR963AIJVXD8Q2U' where id=7; -update noar tt set b0='CP8E8FM2XFYNHUP0K7YOFVVYEIZB0' where id=8; -update noar ti set b0='CP8E8FM2XFYNHUP0K7YOFVVYEIZB0' where id=8; -update noar tt set b1='ASQQ1O' where id=8; -update noar ti set b1='ASQQ1O' where id=8; -update noar tt set b2='KC528T2F40C5G8QMK75OM98T7B' where id=8; -update noar ti set b2='KC528T2F40C5G8QMK75OM98T7B' where id=8; -update noar tt set b0='BY1DWN2568BVQ860EZ12F5E7Q94MQ' where id=9; -update noar ti set b0='BY1DWN2568BVQ860EZ12F5E7Q94MQ' where id=9; -update noar tt set b1='OVKD6KYWHN' where id=9; -update noar ti set b1='OVKD6KYWHN' where id=9; -update noar tt set b2='J4NLTRTR2L8BCN0TX0A7OBQJXSDU4QMH' where id=9; -update noar ti set b2='J4NLTRTR2L8BCN0TX0A7OBQJXSDU4QMH' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 longblob not null, - b1 tinyblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='9K9' where id=1; -update noar ti set b0='9K9' where id=1; -update noar tt set b1='9DLH0DX2RCO' where id=1; -update noar ti set b1='9DLH0DX2RCO' where id=1; -update noar tt set b2='E' where id=1; -update noar ti set b2='E' where id=1; -update noar tt set b0='5FHW3MDI9WW4VAQJIQK9FS8WY0JHP3' where id=2; -update noar ti set b0='5FHW3MDI9WW4VAQJIQK9FS8WY0JHP3' where id=2; -update noar tt set b1='RWZ' where id=2; -update noar ti set b1='RWZ' where id=2; -update noar tt set b2='C1ZTZJF2THA1C' where id=2; -update noar ti set b2='C1ZTZJF2THA1C' where id=2; -update noar tt set b0='NHRAJ' where id=3; -update noar ti set b0='NHRAJ' where id=3; -update noar tt set b1='M9IFM79TMCWCV8IZZUSFUY0ST' where id=3; -update noar ti set b1='M9IFM79TMCWCV8IZZUSFUY0ST' where id=3; -update noar tt set b2='4F9H7I1K' where id=3; -update noar ti set b2='4F9H7I1K' where id=3; -update noar tt set b0='9COAH4ZYBHBLYZUSWTCYKL9KHX30SN' where id=4; -update noar ti set b0='9COAH4ZYBHBLYZUSWTCYKL9KHX30SN' where id=4; -update noar tt set b1='AVA5JQE5VTV76I1B18JKYWEPLMXK' where id=4; -update noar ti set b1='AVA5JQE5VTV76I1B18JKYWEPLMXK' where id=4; -update noar tt set b2='YPC1JFEN' where id=4; -update noar ti set b2='YPC1JFEN' where id=4; -update noar tt set b0='6R6FQ7OGEW5ZYPGRCGB8KIXVMJ' where id=5; -update noar ti set b0='6R6FQ7OGEW5ZYPGRCGB8KIXVMJ' where id=5; -update noar tt set b1='900SKJ4S' where id=5; -update noar ti set b1='900SKJ4S' where id=5; -update noar tt set b2='L8LUY297DXC6DMH24GQA5LDZFLDGY' where id=5; -update noar ti set b2='L8LUY297DXC6DMH24GQA5LDZFLDGY' where id=5; -update noar tt set b0='15B2E38A9PWIR2ZT5E02' where id=6; -update noar ti set b0='15B2E38A9PWIR2ZT5E02' where id=6; -update noar tt set b1='K3EQT3HVFNCOKX7KVEBPVV0623DC' where id=6; -update noar ti set b1='K3EQT3HVFNCOKX7KVEBPVV0623DC' where id=6; -update noar tt set b2='O1YW52AJF' where id=6; -update noar ti set b2='O1YW52AJF' where id=6; -update noar tt set b0='MPDOF2HY4G706LF4FTSSFCH4UAJ' where id=7; -update noar ti set b0='MPDOF2HY4G706LF4FTSSFCH4UAJ' where id=7; -update noar tt set b1='PGH2B44H' where id=7; -update noar ti set b1='PGH2B44H' where id=7; -update noar tt set b2='ZWM5D8B' where id=7; -update noar ti set b2='ZWM5D8B' where id=7; -update noar tt set b0='PMI296281Z1MZNC9FEZQI' where id=8; -update noar ti set b0='PMI296281Z1MZNC9FEZQI' where id=8; -update noar tt set b1='WUTL8LBBT4E6L5OCQ7' where id=8; -update noar ti set b1='WUTL8LBBT4E6L5OCQ7' where id=8; -update noar tt set b2='81633JX' where id=8; -update noar ti set b2='81633JX' where id=8; -update noar tt set b0='4C6HTXWGN3W8R9HE' where id=9; -update noar ti set b0='4C6HTXWGN3W8R9HE' where id=9; -update noar tt set b1='VCEE6B2423S' where id=9; -update noar ti set b1='VCEE6B2423S' where id=9; -update noar tt set b2='OHT2X' where id=9; -update noar ti set b2='OHT2X' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 longblob null, - b1 tinyblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='SAM56HN8BG7QD80G8' where id=1; -update noar ti set b0='SAM56HN8BG7QD80G8' where id=1; -update noar tt set b1='R15XSOH2OSR4YAFE9ODY' where id=1; -update noar ti set b1='R15XSOH2OSR4YAFE9ODY' where id=1; -update noar tt set b2='0IQ6JWUO9BB6KZOJPV08P4XNHKK71U' where id=1; -update noar ti set b2='0IQ6JWUO9BB6KZOJPV08P4XNHKK71U' where id=1; -update noar tt set b0='LZ9T40P9' where id=2; -update noar ti set b0='LZ9T40P9' where id=2; -update noar tt set b1='D3SMXZ78I4S4K7WOMHW5T4C9R4WS9V' where id=2; -update noar ti set b1='D3SMXZ78I4S4K7WOMHW5T4C9R4WS9V' where id=2; -update noar tt set b2='8NPZFBYPQ3YSV6FO' where id=2; -update noar ti set b2='8NPZFBYPQ3YSV6FO' where id=2; -update noar tt set b0='TC5IHPDFRQWI3HKXLI9HC' where id=3; -update noar ti set b0='TC5IHPDFRQWI3HKXLI9HC' where id=3; -update noar tt set b1='7K2L0X8U0OVOIEDSMW86X' where id=3; -update noar ti set b1='7K2L0X8U0OVOIEDSMW86X' where id=3; -update noar tt set b2='W6HVMDLNMEFES8CRS' where id=3; -update noar ti set b2='W6HVMDLNMEFES8CRS' where id=3; -update noar tt set b0='OT53A2L1E5PVH' where id=4; -update noar ti set b0='OT53A2L1E5PVH' where id=4; -update noar tt set b1='5PUH44ZFM' where id=4; -update noar ti set b1='5PUH44ZFM' where id=4; -update noar tt set b2='VSEGOVEEN2O' where id=4; -update noar ti set b2='VSEGOVEEN2O' where id=4; -update noar tt set b0='45CGK5WD3YGL06' where id=5; -update noar ti set b0='45CGK5WD3YGL06' where id=5; -update noar tt set b1='BBYC0LCVOI5' where id=5; -update noar ti set b1='BBYC0LCVOI5' where id=5; -update noar tt set b2='AM151X28L4TXXXN7TU746X0MNZPM' where id=5; -update noar ti set b2='AM151X28L4TXXXN7TU746X0MNZPM' where id=5; -update noar tt set b0='1Y6' where id=6; -update noar ti set b0='1Y6' where id=6; -update noar tt set b1='HZ633R2Q9C' where id=6; -update noar ti set b1='HZ633R2Q9C' where id=6; -update noar tt set b2='8LMDSC8SR5JAR2OGHOMPEY5L5NBL6' where id=6; -update noar ti set b2='8LMDSC8SR5JAR2OGHOMPEY5L5NBL6' where id=6; -update noar tt set b0='PLPHB' where id=7; -update noar ti set b0='PLPHB' where id=7; -update noar tt set b1='1W8KXWQ7J2QK4N1JXGS2I6FCOIN' where id=7; -update noar ti set b1='1W8KXWQ7J2QK4N1JXGS2I6FCOIN' where id=7; -update noar tt set b2='GH8F6FJ29MY' where id=7; -update noar ti set b2='GH8F6FJ29MY' where id=7; -update noar tt set b0='O4CI9KUCGCW0V3JF8NBHXXMM51' where id=8; -update noar ti set b0='O4CI9KUCGCW0V3JF8NBHXXMM51' where id=8; -update noar tt set b1='OOVHQN9YMUXP0EDWNBCN7S8V' where id=8; -update noar ti set b1='OOVHQN9YMUXP0EDWNBCN7S8V' where id=8; -update noar tt set b2='LMMRQYAYYLWUS6' where id=8; -update noar ti set b2='LMMRQYAYYLWUS6' where id=8; -update noar tt set b0='YPG2VBTQGS' where id=9; -update noar ti set b0='YPG2VBTQGS' where id=9; -update noar tt set b1='O1WJ4JTW3AA0USFZNPCHB6IXNL' where id=9; -update noar ti set b1='O1WJ4JTW3AA0USFZNPCHB6IXNL' where id=9; -update noar tt set b2='1WQCD2FF' where id=9; -update noar ti set b2='1WQCD2FF' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 longblob not null, - b1 tinyblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='6S8VG4MAQA84CDN6UBD3J' where id=1; -update noar ti set b0='6S8VG4MAQA84CDN6UBD3J' where id=1; -update noar tt set b1='YFPFW55NM' where id=1; -update noar ti set b1='YFPFW55NM' where id=1; -update noar tt set b2='I9VI569FANSAE3XRWT2' where id=1; -update noar ti set b2='I9VI569FANSAE3XRWT2' where id=1; -update noar tt set b0='S' where id=2; -update noar ti set b0='S' where id=2; -update noar tt set b1='7K0MJV3C8P693M778O5V6K9ERG' where id=2; -update noar ti set b1='7K0MJV3C8P693M778O5V6K9ERG' where id=2; -update noar tt set b2='22IIESGLKV655X6ILO3RF5H1F' where id=2; -update noar ti set b2='22IIESGLKV655X6ILO3RF5H1F' where id=2; -update noar tt set b0='4SPA43Y1P4AAX4SNX8RPQ8QN9' where id=3; -update noar ti set b0='4SPA43Y1P4AAX4SNX8RPQ8QN9' where id=3; -update noar tt set b1='6' where id=3; -update noar ti set b1='6' where id=3; -update noar tt set b2='PAISUR28Z3FJXQWQ8SGP' where id=3; -update noar ti set b2='PAISUR28Z3FJXQWQ8SGP' where id=3; -update noar tt set b0='BOG3GB1AVT4PW' where id=4; -update noar ti set b0='BOG3GB1AVT4PW' where id=4; -update noar tt set b1='N8RWDFKEN4KP3OJQH' where id=4; -update noar ti set b1='N8RWDFKEN4KP3OJQH' where id=4; -update noar tt set b2='PNX3VV' where id=4; -update noar ti set b2='PNX3VV' where id=4; -update noar tt set b0='M' where id=5; -update noar ti set b0='M' where id=5; -update noar tt set b1='NXHRY6WIRK8DTGKKT7J2ASZ5I3F' where id=5; -update noar ti set b1='NXHRY6WIRK8DTGKKT7J2ASZ5I3F' where id=5; -update noar tt set b2='C0OMGNA85F' where id=5; -update noar ti set b2='C0OMGNA85F' where id=5; -update noar tt set b0='X7E9PF5W81VPECZ5U4G' where id=6; -update noar ti set b0='X7E9PF5W81VPECZ5U4G' where id=6; -update noar tt set b1='NM4038656KF77157N6' where id=6; -update noar ti set b1='NM4038656KF77157N6' where id=6; -update noar tt set b2='UX1VR87WWOZ50LBTIJE70M' where id=6; -update noar ti set b2='UX1VR87WWOZ50LBTIJE70M' where id=6; -update noar tt set b0='E0E5E9YUWLF' where id=7; -update noar ti set b0='E0E5E9YUWLF' where id=7; -update noar tt set b1='7WZJMK' where id=7; -update noar ti set b1='7WZJMK' where id=7; -update noar tt set b2='OO95XV6PACZH79YCRK' where id=7; -update noar ti set b2='OO95XV6PACZH79YCRK' where id=7; -update noar tt set b0='ZHDPAYP57BF29STXJYI' where id=8; -update noar ti set b0='ZHDPAYP57BF29STXJYI' where id=8; -update noar tt set b1='YRPQ10EMVCC0FM837T' where id=8; -update noar ti set b1='YRPQ10EMVCC0FM837T' where id=8; -update noar tt set b2='M6549RAU5ZTZ92W' where id=8; -update noar ti set b2='M6549RAU5ZTZ92W' where id=8; -update noar tt set b0='XWGAR890BTT2E2IF5PXSIFA' where id=9; -update noar ti set b0='XWGAR890BTT2E2IF5PXSIFA' where id=9; -update noar tt set b1='M3J35HC6BFQ1K900' where id=9; -update noar ti set b1='M3J35HC6BFQ1K900' where id=9; -update noar tt set b2='MPCC44697O40O' where id=9; -update noar ti set b2='MPCC44697O40O' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 longblob null, - b1 tinyblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='2QQUGS60TPE' where id=1; -update noar ti set b0='2QQUGS60TPE' where id=1; -update noar tt set b1='OD' where id=1; -update noar ti set b1='OD' where id=1; -update noar tt set b2='2QIIC55' where id=1; -update noar ti set b2='2QIIC55' where id=1; -update noar tt set b0='MRJLC2Z' where id=2; -update noar ti set b0='MRJLC2Z' where id=2; -update noar tt set b1='FUKJ2' where id=2; -update noar ti set b1='FUKJ2' where id=2; -update noar tt set b2='MC4M' where id=2; -update noar ti set b2='MC4M' where id=2; -update noar tt set b0='L2TXBHOASM14BLBVH3F92HX' where id=3; -update noar ti set b0='L2TXBHOASM14BLBVH3F92HX' where id=3; -update noar tt set b1='KRC' where id=3; -update noar ti set b1='KRC' where id=3; -update noar tt set b2='CH905BEE0YZBWE5UQTEY' where id=3; -update noar ti set b2='CH905BEE0YZBWE5UQTEY' where id=3; -update noar tt set b0='1K9V2T0HARGXHT7W' where id=4; -update noar ti set b0='1K9V2T0HARGXHT7W' where id=4; -update noar tt set b1='6RD3VD1E' where id=4; -update noar ti set b1='6RD3VD1E' where id=4; -update noar tt set b2='S0Q5NQFY7EC1DSNKR80' where id=4; -update noar ti set b2='S0Q5NQFY7EC1DSNKR80' where id=4; -update noar tt set b0='6S' where id=5; -update noar ti set b0='6S' where id=5; -update noar tt set b1='H7TXMBG5AQKYX0MEQ6S7DBS' where id=5; -update noar ti set b1='H7TXMBG5AQKYX0MEQ6S7DBS' where id=5; -update noar tt set b2='T6VF1E1J7WPOJGV22G2HN6R11WSRMU6' where id=5; -update noar ti set b2='T6VF1E1J7WPOJGV22G2HN6R11WSRMU6' where id=5; -update noar tt set b0='TSEVF' where id=6; -update noar ti set b0='TSEVF' where id=6; -update noar tt set b1='28JC0KDPQP0SIKD849TFGOGXM' where id=6; -update noar ti set b1='28JC0KDPQP0SIKD849TFGOGXM' where id=6; -update noar tt set b2='ZTSGA0RR1PYFAXAA1RJ7WZ' where id=6; -update noar ti set b2='ZTSGA0RR1PYFAXAA1RJ7WZ' where id=6; -update noar tt set b0='1RC5JR1NWDGQ2' where id=7; -update noar ti set b0='1RC5JR1NWDGQ2' where id=7; -update noar tt set b1='IO8V0YARYH1YLO6DXX' where id=7; -update noar ti set b1='IO8V0YARYH1YLO6DXX' where id=7; -update noar tt set b2='M50' where id=7; -update noar ti set b2='M50' where id=7; -update noar tt set b0='TCV53HBRVIRICVOH4N6K7ZIDW' where id=8; -update noar ti set b0='TCV53HBRVIRICVOH4N6K7ZIDW' where id=8; -update noar tt set b1='5AYQP99305I' where id=8; -update noar ti set b1='5AYQP99305I' where id=8; -update noar tt set b2='N0R323A7CLL1SL4YRG3' where id=8; -update noar ti set b2='N0R323A7CLL1SL4YRG3' where id=8; -update noar tt set b0='F0JZW67YWB7' where id=9; -update noar ti set b0='F0JZW67YWB7' where id=9; -update noar tt set b1='1ENYGRL9' where id=9; -update noar ti set b1='1ENYGRL9' where id=9; -update noar tt set b2='C6ECU7ZXZ528I26WI' where id=9; -update noar ti set b2='C6ECU7ZXZ528I26WI' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 longblob not null, - b1 tinyblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='T8NSVY70MOJ2ETMHEP0N' where id=1; -update noar ti set b0='T8NSVY70MOJ2ETMHEP0N' where id=1; -update noar tt set b1='1Y5N5CVJRI590G' where id=1; -update noar ti set b1='1Y5N5CVJRI590G' where id=1; -update noar tt set b2='GHM8OHW' where id=1; -update noar ti set b2='GHM8OHW' where id=1; -update noar tt set b0='6S74ZO0I' where id=2; -update noar ti set b0='6S74ZO0I' where id=2; -update noar tt set b1='SB0ZH000IQ18NN0AH6P6ESHKCUC8E2AH' where id=2; -update noar ti set b1='SB0ZH000IQ18NN0AH6P6ESHKCUC8E2AH' where id=2; -update noar tt set b2='S1RD2FS' where id=2; -update noar ti set b2='S1RD2FS' where id=2; -update noar tt set b0='9ALNRHQEF5XLPH6' where id=3; -update noar ti set b0='9ALNRHQEF5XLPH6' where id=3; -update noar tt set b1='9O76H' where id=3; -update noar ti set b1='9O76H' where id=3; -update noar tt set b2='ABX4J7DTW7WBWC' where id=3; -update noar ti set b2='ABX4J7DTW7WBWC' where id=3; -update noar tt set b0='2FK59KPVTTB2C73ADSD5KA4C' where id=4; -update noar ti set b0='2FK59KPVTTB2C73ADSD5KA4C' where id=4; -update noar tt set b1='PMQFFW' where id=4; -update noar ti set b1='PMQFFW' where id=4; -update noar tt set b2='JR2JK8MNHH6J6VED29M0V17QZIV' where id=4; -update noar ti set b2='JR2JK8MNHH6J6VED29M0V17QZIV' where id=4; -update noar tt set b0='J0J949UY7HY6PL' where id=5; -update noar ti set b0='J0J949UY7HY6PL' where id=5; -update noar tt set b1='GEG9TMW8R0' where id=5; -update noar ti set b1='GEG9TMW8R0' where id=5; -update noar tt set b2='TPIYH7UZ0YRZUE6BCX' where id=5; -update noar ti set b2='TPIYH7UZ0YRZUE6BCX' where id=5; -update noar tt set b0='5IDJCQP4QIS9INXHNM' where id=6; -update noar ti set b0='5IDJCQP4QIS9INXHNM' where id=6; -update noar tt set b1='2' where id=6; -update noar ti set b1='2' where id=6; -update noar tt set b2='EG0LA5PCMA4CF7' where id=6; -update noar ti set b2='EG0LA5PCMA4CF7' where id=6; -update noar tt set b0='ZR2R6V753JDT3RJ' where id=7; -update noar ti set b0='ZR2R6V753JDT3RJ' where id=7; -update noar tt set b1='ECOV20CT003622M2SC37POU1US' where id=7; -update noar ti set b1='ECOV20CT003622M2SC37POU1US' where id=7; -update noar tt set b2='KD4GA34DSP' where id=7; -update noar ti set b2='KD4GA34DSP' where id=7; -update noar tt set b0='Z6DMP9' where id=8; -update noar ti set b0='Z6DMP9' where id=8; -update noar tt set b1='GEA9LTKCUY355LRH' where id=8; -update noar ti set b1='GEA9LTKCUY355LRH' where id=8; -update noar tt set b2='WDOW8PNXTWDZZ8GP1NPL5R26LIS9' where id=8; -update noar ti set b2='WDOW8PNXTWDZZ8GP1NPL5R26LIS9' where id=8; -update noar tt set b0='5LL1EAPYJ61KWOKKBPHZ2KA' where id=9; -update noar ti set b0='5LL1EAPYJ61KWOKKBPHZ2KA' where id=9; -update noar tt set b1='3H9IOO' where id=9; -update noar ti set b1='3H9IOO' where id=9; -update noar tt set b2='DDVWEORJ0YX7RJWSGOR' where id=9; -update noar ti set b2='DDVWEORJ0YX7RJWSGOR' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 longblob null, - b1 tinyblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='0BWCLHYO278EPHVO6URJ24' where id=1; -update noar ti set b0='0BWCLHYO278EPHVO6URJ24' where id=1; -update noar tt set b1='8AK0YL81MIJWH2RMMNWCYHYY1GYVG' where id=1; -update noar ti set b1='8AK0YL81MIJWH2RMMNWCYHYY1GYVG' where id=1; -update noar tt set b2='01SK8MRA9HBWHBEYJQ2RPL' where id=1; -update noar ti set b2='01SK8MRA9HBWHBEYJQ2RPL' where id=1; -update noar tt set b0='IV2RDYXOMOR877BW9R' where id=2; -update noar ti set b0='IV2RDYXOMOR877BW9R' where id=2; -update noar tt set b1='PN76KOCRHYZXJB2MNE' where id=2; -update noar ti set b1='PN76KOCRHYZXJB2MNE' where id=2; -update noar tt set b2='4' where id=2; -update noar ti set b2='4' where id=2; -update noar tt set b0='TJVXQKNV544V6I1EMB' where id=3; -update noar ti set b0='TJVXQKNV544V6I1EMB' where id=3; -update noar tt set b1='3NVX1LKP89REHKNQYNIW' where id=3; -update noar ti set b1='3NVX1LKP89REHKNQYNIW' where id=3; -update noar tt set b2='SIBATQUYCPQUKIVGL32L42Q2U7OSRPZ7' where id=3; -update noar ti set b2='SIBATQUYCPQUKIVGL32L42Q2U7OSRPZ7' where id=3; -update noar tt set b0='YGNWP03WN4OV' where id=4; -update noar ti set b0='YGNWP03WN4OV' where id=4; -update noar tt set b1='KBBY3SLSIO3H9VW760427DML07APJ' where id=4; -update noar ti set b1='KBBY3SLSIO3H9VW760427DML07APJ' where id=4; -update noar tt set b2='I4C6STI5EZPIUCB47' where id=4; -update noar ti set b2='I4C6STI5EZPIUCB47' where id=4; -update noar tt set b0='6HMYTMBOHK7ZG7HI' where id=5; -update noar ti set b0='6HMYTMBOHK7ZG7HI' where id=5; -update noar tt set b1='2YBE6W2LISOLJ2TOL83ANX' where id=5; -update noar ti set b1='2YBE6W2LISOLJ2TOL83ANX' where id=5; -update noar tt set b2='N4LBGJIRV5UJUC6ZU0N5UIDH' where id=5; -update noar ti set b2='N4LBGJIRV5UJUC6ZU0N5UIDH' where id=5; -update noar tt set b0='KYIJLX' where id=6; -update noar ti set b0='KYIJLX' where id=6; -update noar tt set b1='2EG3NAKA7XLIJZZ0GENA5KPY' where id=6; -update noar ti set b1='2EG3NAKA7XLIJZZ0GENA5KPY' where id=6; -update noar tt set b2='WCBFPTLC7' where id=6; -update noar ti set b2='WCBFPTLC7' where id=6; -update noar tt set b0='A5Y9ZQM0G5AHPM2JMEDKLMBWCCRI' where id=7; -update noar ti set b0='A5Y9ZQM0G5AHPM2JMEDKLMBWCCRI' where id=7; -update noar tt set b1='Q7M' where id=7; -update noar ti set b1='Q7M' where id=7; -update noar tt set b2='GC1P5' where id=7; -update noar ti set b2='GC1P5' where id=7; -update noar tt set b0='QMXRY5M8PLXZ7LGTNWNWELOXPE' where id=8; -update noar ti set b0='QMXRY5M8PLXZ7LGTNWNWELOXPE' where id=8; -update noar tt set b1='FURDKNG4YI35XMOKPJ' where id=8; -update noar ti set b1='FURDKNG4YI35XMOKPJ' where id=8; -update noar tt set b2='Q7MV00AYRYNPZR6B5GW4ID2S2QA' where id=8; -update noar ti set b2='Q7MV00AYRYNPZR6B5GW4ID2S2QA' where id=8; -update noar tt set b0='801F3' where id=9; -update noar ti set b0='801F3' where id=9; -update noar tt set b1='ABGSOMIFS2TEFZLG2OH4S28ND' where id=9; -update noar ti set b1='ABGSOMIFS2TEFZLG2OH4S28ND' where id=9; -update noar tt set b2='0B' where id=9; -update noar ti set b2='0B' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 longblob not null, - b1 tinyblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='HYULH0EP5M8' where id=1; -update noar ti set b0='HYULH0EP5M8' where id=1; -update noar tt set b1='T9QEY2GNZ09V6SQ7SP' where id=1; -update noar ti set b1='T9QEY2GNZ09V6SQ7SP' where id=1; -update noar tt set b2='9FY4MXBQ82NZDO8ZQOY1B' where id=1; -update noar ti set b2='9FY4MXBQ82NZDO8ZQOY1B' where id=1; -update noar tt set b0='091LJ8FUTIA30IXFB2SY6' where id=2; -update noar ti set b0='091LJ8FUTIA30IXFB2SY6' where id=2; -update noar tt set b1='01BTTHIHI52M8ZLMVLO08ROL82NMC7F' where id=2; -update noar ti set b1='01BTTHIHI52M8ZLMVLO08ROL82NMC7F' where id=2; -update noar tt set b2='8VT8Y' where id=2; -update noar ti set b2='8VT8Y' where id=2; -update noar tt set b0='99OT5FQ' where id=3; -update noar ti set b0='99OT5FQ' where id=3; -update noar tt set b1='WICHM8MB6Q3F5M3OCECL7CO5' where id=3; -update noar ti set b1='WICHM8MB6Q3F5M3OCECL7CO5' where id=3; -update noar tt set b2='3RWK9JB3W7M4ZYSPU73ESH8RMWSW2N4' where id=3; -update noar ti set b2='3RWK9JB3W7M4ZYSPU73ESH8RMWSW2N4' where id=3; -update noar tt set b0='RT28R567061I' where id=4; -update noar ti set b0='RT28R567061I' where id=4; -update noar tt set b1='2G7BY2I79' where id=4; -update noar ti set b1='2G7BY2I79' where id=4; -update noar tt set b2='T' where id=4; -update noar ti set b2='T' where id=4; -update noar tt set b0='SHQW8BAXW6RYLN48O24LO8' where id=5; -update noar ti set b0='SHQW8BAXW6RYLN48O24LO8' where id=5; -update noar tt set b1='JOUTFFQZQCPCLMZRP' where id=5; -update noar ti set b1='JOUTFFQZQCPCLMZRP' where id=5; -update noar tt set b2='QNPC00ZJQ' where id=5; -update noar ti set b2='QNPC00ZJQ' where id=5; -update noar tt set b0='U4CQNM' where id=6; -update noar ti set b0='U4CQNM' where id=6; -update noar tt set b1='LBTTDH' where id=6; -update noar ti set b1='LBTTDH' where id=6; -update noar tt set b2='X25T0ZP3SMSWW7TE3IAB6GG151X' where id=6; -update noar ti set b2='X25T0ZP3SMSWW7TE3IAB6GG151X' where id=6; -update noar tt set b0='VSEYXELJNC4RO37RI6VTCIWQ9K9DD' where id=7; -update noar ti set b0='VSEYXELJNC4RO37RI6VTCIWQ9K9DD' where id=7; -update noar tt set b1='AM1K2Y78M0NYXTH6CG' where id=7; -update noar ti set b1='AM1K2Y78M0NYXTH6CG' where id=7; -update noar tt set b2='I5PCD9F3T9N8O7SYHB9QSU9J' where id=7; -update noar ti set b2='I5PCD9F3T9N8O7SYHB9QSU9J' where id=7; -update noar tt set b0='ECDO82LO' where id=8; -update noar ti set b0='ECDO82LO' where id=8; -update noar tt set b1='5UGU7XK' where id=8; -update noar ti set b1='5UGU7XK' where id=8; -update noar tt set b2='8AUBTFNUGF36SGSO3S' where id=8; -update noar ti set b2='8AUBTFNUGF36SGSO3S' where id=8; -update noar tt set b0='XRPVTL9V4WJP5C1W5Z5W1MWYNKU8' where id=9; -update noar ti set b0='XRPVTL9V4WJP5C1W5Z5W1MWYNKU8' where id=9; -update noar tt set b1='JQ3QW5VNJML1' where id=9; -update noar ti set b1='JQ3QW5VNJML1' where id=9; -update noar tt set b2='YY4NJ6VQEVAG6R182ACA8GHB' where id=9; -update noar ti set b2='YY4NJ6VQEVAG6R182ACA8GHB' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 longblob null, - b1 tinyblob null, - b2 text null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='9OAH7ZQKU326WS89' where id=1; -update noar ti set b0='9OAH7ZQKU326WS89' where id=1; -update noar tt set b1='URDN20WMFHSVETY' where id=1; -update noar ti set b1='URDN20WMFHSVETY' where id=1; -update noar tt set b2='C58B2DR2VTZ1JWLDXWD25UCL7O4SSV7' where id=1; -update noar ti set b2='C58B2DR2VTZ1JWLDXWD25UCL7O4SSV7' where id=1; -update noar tt set b0='N9USYEY1NWE' where id=2; -update noar ti set b0='N9USYEY1NWE' where id=2; -update noar tt set b1='YXAA801C8NCNCGK84C94IOWPP' where id=2; -update noar ti set b1='YXAA801C8NCNCGK84C94IOWPP' where id=2; -update noar tt set b2='YN3PCLXOTCVCJ5OWXOIUIPLYWPOP' where id=2; -update noar ti set b2='YN3PCLXOTCVCJ5OWXOIUIPLYWPOP' where id=2; -update noar tt set b0='N6UY69VK70TDUTXXR26JTGI2GE' where id=3; -update noar ti set b0='N6UY69VK70TDUTXXR26JTGI2GE' where id=3; -update noar tt set b1='QOGCPSDN5VPFW7611SXRCMMT1GGL6TC' where id=3; -update noar ti set b1='QOGCPSDN5VPFW7611SXRCMMT1GGL6TC' where id=3; -update noar tt set b2='AFM28GUN26CSE3' where id=3; -update noar ti set b2='AFM28GUN26CSE3' where id=3; -update noar tt set b0='UWOPMSTKSSMHGL0MWI15AD' where id=4; -update noar ti set b0='UWOPMSTKSSMHGL0MWI15AD' where id=4; -update noar tt set b1='26XMMIWK0Q' where id=4; -update noar ti set b1='26XMMIWK0Q' where id=4; -update noar tt set b2='MRFDVNRRVDNO3H' where id=4; -update noar ti set b2='MRFDVNRRVDNO3H' where id=4; -update noar tt set b0='V96NNPMYCA9ZMLJ9D01QD' where id=5; -update noar ti set b0='V96NNPMYCA9ZMLJ9D01QD' where id=5; -update noar tt set b1='0' where id=5; -update noar ti set b1='0' where id=5; -update noar tt set b2='2F2RML5OI48950RIF378W' where id=5; -update noar ti set b2='2F2RML5OI48950RIF378W' where id=5; -update noar tt set b0='BPY695C7AHD' where id=6; -update noar ti set b0='BPY695C7AHD' where id=6; -update noar tt set b1='248OQ9GSR2RYXBWDC4KL8X1IZ' where id=6; -update noar ti set b1='248OQ9GSR2RYXBWDC4KL8X1IZ' where id=6; -update noar tt set b2='VVG3V' where id=6; -update noar ti set b2='VVG3V' where id=6; -update noar tt set b0='IU8' where id=7; -update noar ti set b0='IU8' where id=7; -update noar tt set b1='2MDLCF1HBPK' where id=7; -update noar ti set b1='2MDLCF1HBPK' where id=7; -update noar tt set b2='DHANDJYN13HKRGMHU97XU7LTHFJ04' where id=7; -update noar ti set b2='DHANDJYN13HKRGMHU97XU7LTHFJ04' where id=7; -update noar tt set b0='PMKN6JH7M8LRSAUI77NKWG0' where id=8; -update noar ti set b0='PMKN6JH7M8LRSAUI77NKWG0' where id=8; -update noar tt set b1='CWP6S5YLYR' where id=8; -update noar ti set b1='CWP6S5YLYR' where id=8; -update noar tt set b2='8NDVQJY' where id=8; -update noar ti set b2='8NDVQJY' where id=8; -update noar tt set b0='95OQ48VEO5NUU5O' where id=9; -update noar ti set b0='95OQ48VEO5NUU5O' where id=9; -update noar tt set b1='QLS' where id=9; -update noar ti set b1='QLS' where id=9; -update noar tt set b2='3T9RVG' where id=9; -update noar ti set b2='3T9RVG' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 longblob not null, - b1 tinyblob not null, - b2 text not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='PDSTKPDZE91' where id=1; -update noar ti set b0='PDSTKPDZE91' where id=1; -update noar tt set b1='E3' where id=1; -update noar ti set b1='E3' where id=1; -update noar tt set b2='JS' where id=1; -update noar ti set b2='JS' where id=1; -update noar tt set b0='F58' where id=2; -update noar ti set b0='F58' where id=2; -update noar tt set b1='2TO70GQPNANV2N66MMM6BO' where id=2; -update noar ti set b1='2TO70GQPNANV2N66MMM6BO' where id=2; -update noar tt set b2='BRZRB0HCX575NDPLZO3O475AH' where id=2; -update noar ti set b2='BRZRB0HCX575NDPLZO3O475AH' where id=2; -update noar tt set b0='E1NFTPA91D722R84FGZLIC' where id=3; -update noar ti set b0='E1NFTPA91D722R84FGZLIC' where id=3; -update noar tt set b1='ZXT03M7HGKP4SMTPQVR5L' where id=3; -update noar ti set b1='ZXT03M7HGKP4SMTPQVR5L' where id=3; -update noar tt set b2='FZK0NDUE7AF' where id=3; -update noar ti set b2='FZK0NDUE7AF' where id=3; -update noar tt set b0='IWPG63U6C8D' where id=4; -update noar ti set b0='IWPG63U6C8D' where id=4; -update noar tt set b1='0P4' where id=4; -update noar ti set b1='0P4' where id=4; -update noar tt set b2='N2QF' where id=4; -update noar ti set b2='N2QF' where id=4; -update noar tt set b0='OGR8QE52KQN0MOI1CBQ0CVERT2' where id=5; -update noar ti set b0='OGR8QE52KQN0MOI1CBQ0CVERT2' where id=5; -update noar tt set b1='9' where id=5; -update noar ti set b1='9' where id=5; -update noar tt set b2='523RCD1AE' where id=5; -update noar ti set b2='523RCD1AE' where id=5; -update noar tt set b0='1ZDG0QNTS3N7HZSLOS' where id=6; -update noar ti set b0='1ZDG0QNTS3N7HZSLOS' where id=6; -update noar tt set b1='42SRZSWXYCCB4H3JQWXPEV1H' where id=6; -update noar ti set b1='42SRZSWXYCCB4H3JQWXPEV1H' where id=6; -update noar tt set b2='YFO' where id=6; -update noar ti set b2='YFO' where id=6; -update noar tt set b0='ILFGIKC3CXIWBZ5N68XCAG' where id=7; -update noar ti set b0='ILFGIKC3CXIWBZ5N68XCAG' where id=7; -update noar tt set b1='69WLZBPZE06Y2ILA5X6T' where id=7; -update noar ti set b1='69WLZBPZE06Y2ILA5X6T' where id=7; -update noar tt set b2='CB2RZSYO060H04L' where id=7; -update noar ti set b2='CB2RZSYO060H04L' where id=7; -update noar tt set b0='T49IQ0OD1KBKBW1G87S9HN0TMXC6' where id=8; -update noar ti set b0='T49IQ0OD1KBKBW1G87S9HN0TMXC6' where id=8; -update noar tt set b1='13' where id=8; -update noar ti set b1='13' where id=8; -update noar tt set b2='BSQD1YMXZ2NX0S9OGW50BAJ' where id=8; -update noar ti set b2='BSQD1YMXZ2NX0S9OGW50BAJ' where id=8; -update noar tt set b0='O6' where id=9; -update noar ti set b0='O6' where id=9; -update noar tt set b1='CK1I41K4KL0IN2NLYRXTAXWLW' where id=9; -update noar ti set b1='CK1I41K4KL0IN2NLYRXTAXWLW' where id=9; -update noar tt set b2='II8LMTGKMBFQ1E02RFB2N2Q0CLUZ' where id=9; -update noar ti set b2='II8LMTGKMBFQ1E02RFB2N2Q0CLUZ' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 longblob null, - b1 blob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='FYCQ4S8' where id=1; -update noar ti set b0='FYCQ4S8' where id=1; -update noar tt set b1='35B' where id=1; -update noar ti set b1='35B' where id=1; -update noar tt set b2='P8VN7P687AL48LX5GSZADPBNXFPD4C' where id=1; -update noar ti set b2='P8VN7P687AL48LX5GSZADPBNXFPD4C' where id=1; -update noar tt set b0='PLLTKRB02' where id=2; -update noar ti set b0='PLLTKRB02' where id=2; -update noar tt set b1='X8E6V5OVJL2GHBI2P6' where id=2; -update noar ti set b1='X8E6V5OVJL2GHBI2P6' where id=2; -update noar tt set b2='TIJ8MT3MGQGUB3AFEX' where id=2; -update noar ti set b2='TIJ8MT3MGQGUB3AFEX' where id=2; -update noar tt set b0='H78VKU4401' where id=3; -update noar ti set b0='H78VKU4401' where id=3; -update noar tt set b1='CCM22' where id=3; -update noar ti set b1='CCM22' where id=3; -update noar tt set b2='7A03CT9XZH3ER1SFY' where id=3; -update noar ti set b2='7A03CT9XZH3ER1SFY' where id=3; -update noar tt set b0='EYT4P9YTVTJTNULH59N1K' where id=4; -update noar ti set b0='EYT4P9YTVTJTNULH59N1K' where id=4; -update noar tt set b1='84O63N84MW6G1RCTN' where id=4; -update noar ti set b1='84O63N84MW6G1RCTN' where id=4; -update noar tt set b2='HPBKWC2CXFUFUDFOISLA05CHIBMQ6' where id=4; -update noar ti set b2='HPBKWC2CXFUFUDFOISLA05CHIBMQ6' where id=4; -update noar tt set b0='N8MF9PCA4Z6YX134' where id=5; -update noar ti set b0='N8MF9PCA4Z6YX134' where id=5; -update noar tt set b1='VVN9233GFFLJTF73H' where id=5; -update noar ti set b1='VVN9233GFFLJTF73H' where id=5; -update noar tt set b2='RHTNFYN2JJ7S3EHDZY696YHM82Y' where id=5; -update noar ti set b2='RHTNFYN2JJ7S3EHDZY696YHM82Y' where id=5; -update noar tt set b0='8FKKBVSQ2DD82Y3D853FEYWLH' where id=6; -update noar ti set b0='8FKKBVSQ2DD82Y3D853FEYWLH' where id=6; -update noar tt set b1='R7OZFKH0BXI2HTLSHY40TQUEZ6F' where id=6; -update noar ti set b1='R7OZFKH0BXI2HTLSHY40TQUEZ6F' where id=6; -update noar tt set b2='CQBC461FFJYUM68O0VR1ECIDMD2UIQ' where id=6; -update noar ti set b2='CQBC461FFJYUM68O0VR1ECIDMD2UIQ' where id=6; -update noar tt set b0='0RPIXAGCIBDD7U7J2' where id=7; -update noar ti set b0='0RPIXAGCIBDD7U7J2' where id=7; -update noar tt set b1='1ZR196R3BKHH349JP9PRJWD' where id=7; -update noar ti set b1='1ZR196R3BKHH349JP9PRJWD' where id=7; -update noar tt set b2='ND352LZPIGODOAE87MJS0EKH8LT676L' where id=7; -update noar ti set b2='ND352LZPIGODOAE87MJS0EKH8LT676L' where id=7; -update noar tt set b0='7DH3TV' where id=8; -update noar ti set b0='7DH3TV' where id=8; -update noar tt set b1='XRT54KYS58Y9FM4OOJC0U8C6DCND' where id=8; -update noar ti set b1='XRT54KYS58Y9FM4OOJC0U8C6DCND' where id=8; -update noar tt set b2='QS5702EDN5GBQMBSMNXT' where id=8; -update noar ti set b2='QS5702EDN5GBQMBSMNXT' where id=8; -update noar tt set b0='V45OU6BZ1P' where id=9; -update noar ti set b0='V45OU6BZ1P' where id=9; -update noar tt set b1='J85UR68X4N3RF5QNNLM4OPE8QV' where id=9; -update noar ti set b1='J85UR68X4N3RF5QNNLM4OPE8QV' where id=9; -update noar tt set b2='QO' where id=9; -update noar ti set b2='QO' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 longblob not null, - b1 blob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='KI3LKGOFDHFP9648RD2N48BBBP8F' where id=1; -update noar ti set b0='KI3LKGOFDHFP9648RD2N48BBBP8F' where id=1; -update noar tt set b1='1AGDVES6MMFRDUFDTBHGBC43BIN2' where id=1; -update noar ti set b1='1AGDVES6MMFRDUFDTBHGBC43BIN2' where id=1; -update noar tt set b2='BDQI5O1ALFOEWZHNMF7Q42ERH9' where id=1; -update noar ti set b2='BDQI5O1ALFOEWZHNMF7Q42ERH9' where id=1; -update noar tt set b0='TH8MZGQ7RARK9F0A088LHWJXTU7RQ9Y' where id=2; -update noar ti set b0='TH8MZGQ7RARK9F0A088LHWJXTU7RQ9Y' where id=2; -update noar tt set b1='OYB7L67O8RP9OAQ' where id=2; -update noar ti set b1='OYB7L67O8RP9OAQ' where id=2; -update noar tt set b2='3U5RHVIDLFNU3RDLCY' where id=2; -update noar ti set b2='3U5RHVIDLFNU3RDLCY' where id=2; -update noar tt set b0='82IM1ATOAOWSVWR62TXT9T' where id=3; -update noar ti set b0='82IM1ATOAOWSVWR62TXT9T' where id=3; -update noar tt set b1='Q4A' where id=3; -update noar ti set b1='Q4A' where id=3; -update noar tt set b2='32U53FTIF90QIF9DBFYDQ51' where id=3; -update noar ti set b2='32U53FTIF90QIF9DBFYDQ51' where id=3; -update noar tt set b0='OL5LBLVZOKDEM66RV39' where id=4; -update noar ti set b0='OL5LBLVZOKDEM66RV39' where id=4; -update noar tt set b1='ZG6T9O9WG7W8KX0ANYRD' where id=4; -update noar ti set b1='ZG6T9O9WG7W8KX0ANYRD' where id=4; -update noar tt set b2='HZQ34JJ9RVX003VKTGQKZPV9Q' where id=4; -update noar ti set b2='HZQ34JJ9RVX003VKTGQKZPV9Q' where id=4; -update noar tt set b0='W0UTC7ZE9UQQO' where id=5; -update noar ti set b0='W0UTC7ZE9UQQO' where id=5; -update noar tt set b1='SF9M1332U3LPWMA5Y7' where id=5; -update noar ti set b1='SF9M1332U3LPWMA5Y7' where id=5; -update noar tt set b2='TOA7NBKVBY953' where id=5; -update noar ti set b2='TOA7NBKVBY953' where id=5; -update noar tt set b0='XJ' where id=6; -update noar ti set b0='XJ' where id=6; -update noar tt set b1='3INUXN7RBVWIBI6VH85' where id=6; -update noar ti set b1='3INUXN7RBVWIBI6VH85' where id=6; -update noar tt set b2='1DPZSY9Z7XPB0VHMQQBOF8W7XZOH' where id=6; -update noar ti set b2='1DPZSY9Z7XPB0VHMQQBOF8W7XZOH' where id=6; -update noar tt set b0='X3E875' where id=7; -update noar ti set b0='X3E875' where id=7; -update noar tt set b1='8S1M9VHOUC3RK3DRZZ' where id=7; -update noar ti set b1='8S1M9VHOUC3RK3DRZZ' where id=7; -update noar tt set b2='DAXXE30KXBCJ2GSK7T64YKHKGDBLGC2' where id=7; -update noar ti set b2='DAXXE30KXBCJ2GSK7T64YKHKGDBLGC2' where id=7; -update noar tt set b0='84Y7F35ABG9BYK04EFFOGLI89N' where id=8; -update noar ti set b0='84Y7F35ABG9BYK04EFFOGLI89N' where id=8; -update noar tt set b1='99LFZWRY9WGSHLHFPP6QKGZVLLHU747D' where id=8; -update noar ti set b1='99LFZWRY9WGSHLHFPP6QKGZVLLHU747D' where id=8; -update noar tt set b2='H0RBGA2BY1396M48VC3E4ZGRXTJHVSF' where id=8; -update noar ti set b2='H0RBGA2BY1396M48VC3E4ZGRXTJHVSF' where id=8; -update noar tt set b0='H' where id=9; -update noar ti set b0='H' where id=9; -update noar tt set b1='BI8090ZMCTBV6A8O0M1FZQU' where id=9; -update noar ti set b1='BI8090ZMCTBV6A8O0M1FZQU' where id=9; -update noar tt set b2='1YNO52GZFN80LITZ69' where id=9; -update noar ti set b2='1YNO52GZFN80LITZ69' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 longblob null, - b1 blob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='P7GBXU2I' where id=1; -update noar ti set b0='P7GBXU2I' where id=1; -update noar tt set b1='H' where id=1; -update noar ti set b1='H' where id=1; -update noar tt set b2='ZL5RMN4PU' where id=1; -update noar ti set b2='ZL5RMN4PU' where id=1; -update noar tt set b0='KTMJ7DC693YHSIDX' where id=2; -update noar ti set b0='KTMJ7DC693YHSIDX' where id=2; -update noar tt set b1='61DW7JEP4JTXVSD94ZVGYN9' where id=2; -update noar ti set b1='61DW7JEP4JTXVSD94ZVGYN9' where id=2; -update noar tt set b2='RVHWFX8LCL8F' where id=2; -update noar ti set b2='RVHWFX8LCL8F' where id=2; -update noar tt set b0='CSEUQIHDL6XISQG1FY' where id=3; -update noar ti set b0='CSEUQIHDL6XISQG1FY' where id=3; -update noar tt set b1='9XO7KNHSNOUCXWZGT2VXK8Z3YUI' where id=3; -update noar ti set b1='9XO7KNHSNOUCXWZGT2VXK8Z3YUI' where id=3; -update noar tt set b2='814IJMG93S' where id=3; -update noar ti set b2='814IJMG93S' where id=3; -update noar tt set b0='6WXCOYCDPYB9DZJMWJDPFH6KV90RMS5' where id=4; -update noar ti set b0='6WXCOYCDPYB9DZJMWJDPFH6KV90RMS5' where id=4; -update noar tt set b1='H2YLU8VFWJQQUP' where id=4; -update noar ti set b1='H2YLU8VFWJQQUP' where id=4; -update noar tt set b2='QNNZKNW62JDZAS' where id=4; -update noar ti set b2='QNNZKNW62JDZAS' where id=4; -update noar tt set b0='0CLBPFMSZCFQ7VP' where id=5; -update noar ti set b0='0CLBPFMSZCFQ7VP' where id=5; -update noar tt set b1='TLPWMYSFOBTN' where id=5; -update noar ti set b1='TLPWMYSFOBTN' where id=5; -update noar tt set b2='AZZ2' where id=5; -update noar ti set b2='AZZ2' where id=5; -update noar tt set b0='VI54HTTGSSG9FGXEA' where id=6; -update noar ti set b0='VI54HTTGSSG9FGXEA' where id=6; -update noar tt set b1='W43M91NONCI4B6GA6GMMNPCOY38QP0' where id=6; -update noar ti set b1='W43M91NONCI4B6GA6GMMNPCOY38QP0' where id=6; -update noar tt set b2='6B1S2LJXDI7Z4M4N5BYW9M5' where id=6; -update noar ti set b2='6B1S2LJXDI7Z4M4N5BYW9M5' where id=6; -update noar tt set b0='BJ98ALF1' where id=7; -update noar ti set b0='BJ98ALF1' where id=7; -update noar tt set b1='IBQ6YU36AGR11W' where id=7; -update noar ti set b1='IBQ6YU36AGR11W' where id=7; -update noar tt set b2='RHUP7LK5KRYMIYQZH1ZM5Y8' where id=7; -update noar ti set b2='RHUP7LK5KRYMIYQZH1ZM5Y8' where id=7; -update noar tt set b0='6SV3Y7UQT779WX0G3' where id=8; -update noar ti set b0='6SV3Y7UQT779WX0G3' where id=8; -update noar tt set b1='11M1EZXN5X1RMN81LDS610C' where id=8; -update noar ti set b1='11M1EZXN5X1RMN81LDS610C' where id=8; -update noar tt set b2='UUH14XTJVMG9IMJF7' where id=8; -update noar ti set b2='UUH14XTJVMG9IMJF7' where id=8; -update noar tt set b0='FJSCNC5D96ALI50BUDBG' where id=9; -update noar ti set b0='FJSCNC5D96ALI50BUDBG' where id=9; -update noar tt set b1='0D3NY2R2903CQ4S2A3AR' where id=9; -update noar ti set b1='0D3NY2R2903CQ4S2A3AR' where id=9; -update noar tt set b2='Y4YN1R' where id=9; -update noar ti set b2='Y4YN1R' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 longblob not null, - b1 blob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='RSV1XSY00FF' where id=1; -update noar ti set b0='RSV1XSY00FF' where id=1; -update noar tt set b1='STZUCWW' where id=1; -update noar ti set b1='STZUCWW' where id=1; -update noar tt set b2='W7ANLT9PJHKJW3CZUS' where id=1; -update noar ti set b2='W7ANLT9PJHKJW3CZUS' where id=1; -update noar tt set b0='YZ9A7ISZME1H4' where id=2; -update noar ti set b0='YZ9A7ISZME1H4' where id=2; -update noar tt set b1='DRNP7XEK7BIY8Q3TS6GGJWF0169BP' where id=2; -update noar ti set b1='DRNP7XEK7BIY8Q3TS6GGJWF0169BP' where id=2; -update noar tt set b2='PYZ9O7WNWH1DE' where id=2; -update noar ti set b2='PYZ9O7WNWH1DE' where id=2; -update noar tt set b0='37' where id=3; -update noar ti set b0='37' where id=3; -update noar tt set b1='G2XHVK9WREITW4FW' where id=3; -update noar ti set b1='G2XHVK9WREITW4FW' where id=3; -update noar tt set b2='TGJC7WT5XP0OXLKI' where id=3; -update noar ti set b2='TGJC7WT5XP0OXLKI' where id=3; -update noar tt set b0='RUYO092MKJ2D4NZBYVNRDE1E3' where id=4; -update noar ti set b0='RUYO092MKJ2D4NZBYVNRDE1E3' where id=4; -update noar tt set b1='80F8GBYCNKU3X2I39' where id=4; -update noar ti set b1='80F8GBYCNKU3X2I39' where id=4; -update noar tt set b2='KZN8BYISTCYF7OBIU' where id=4; -update noar ti set b2='KZN8BYISTCYF7OBIU' where id=4; -update noar tt set b0='FZ4AFEU65A' where id=5; -update noar ti set b0='FZ4AFEU65A' where id=5; -update noar tt set b1='RU' where id=5; -update noar ti set b1='RU' where id=5; -update noar tt set b2='PGN28I70YFPT7HSR1FMU0CQH' where id=5; -update noar ti set b2='PGN28I70YFPT7HSR1FMU0CQH' where id=5; -update noar tt set b0='G083EX25WVGXC5F7Y' where id=6; -update noar ti set b0='G083EX25WVGXC5F7Y' where id=6; -update noar tt set b1='7YLRA7BHA0NW5' where id=6; -update noar ti set b1='7YLRA7BHA0NW5' where id=6; -update noar tt set b2='CR1CE5JY04K' where id=6; -update noar ti set b2='CR1CE5JY04K' where id=6; -update noar tt set b0='F' where id=7; -update noar ti set b0='F' where id=7; -update noar tt set b1='CY68LEQMQ224DKWJM' where id=7; -update noar ti set b1='CY68LEQMQ224DKWJM' where id=7; -update noar tt set b2='7WEQT8U' where id=7; -update noar ti set b2='7WEQT8U' where id=7; -update noar tt set b0='7ARPD9VPZO' where id=8; -update noar ti set b0='7ARPD9VPZO' where id=8; -update noar tt set b1='HUORAOXM13NQM6TIUAHRUVYFCMAL6KE4' where id=8; -update noar ti set b1='HUORAOXM13NQM6TIUAHRUVYFCMAL6KE4' where id=8; -update noar tt set b2='9BPCXLB' where id=8; -update noar ti set b2='9BPCXLB' where id=8; -update noar tt set b0='CEZLV1BOUKKQ30EJ' where id=9; -update noar ti set b0='CEZLV1BOUKKQ30EJ' where id=9; -update noar tt set b1='H0Y' where id=9; -update noar ti set b1='H0Y' where id=9; -update noar tt set b2='2H0F' where id=9; -update noar ti set b2='2H0F' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 longblob null, - b1 blob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='PKZ07U' where id=1; -update noar ti set b0='PKZ07U' where id=1; -update noar tt set b1='RQDZV72DDNECMNRL' where id=1; -update noar ti set b1='RQDZV72DDNECMNRL' where id=1; -update noar tt set b2='DFGTB33X' where id=1; -update noar ti set b2='DFGTB33X' where id=1; -update noar tt set b0='FH4EO7Y9RAC6TUYUWWZ5C13J70' where id=2; -update noar ti set b0='FH4EO7Y9RAC6TUYUWWZ5C13J70' where id=2; -update noar tt set b1='O9AZUPNJRM5D' where id=2; -update noar ti set b1='O9AZUPNJRM5D' where id=2; -update noar tt set b2='8CQTJ3HKHVML5E89' where id=2; -update noar ti set b2='8CQTJ3HKHVML5E89' where id=2; -update noar tt set b0='5EN' where id=3; -update noar ti set b0='5EN' where id=3; -update noar tt set b1='3' where id=3; -update noar ti set b1='3' where id=3; -update noar tt set b2='BLLT2PIIJ9SET531ICELVCUL' where id=3; -update noar ti set b2='BLLT2PIIJ9SET531ICELVCUL' where id=3; -update noar tt set b0='HHHB7DOZ41OT9K0ZT6AXHO' where id=4; -update noar ti set b0='HHHB7DOZ41OT9K0ZT6AXHO' where id=4; -update noar tt set b1='QWL89319SJ07NLNF' where id=4; -update noar ti set b1='QWL89319SJ07NLNF' where id=4; -update noar tt set b2='Q8XM48VXSM87QNZJFD1MIUWEUSZ8SJ0' where id=4; -update noar ti set b2='Q8XM48VXSM87QNZJFD1MIUWEUSZ8SJ0' where id=4; -update noar tt set b0='MI7V9CGT' where id=5; -update noar ti set b0='MI7V9CGT' where id=5; -update noar tt set b1='F4D2TA' where id=5; -update noar ti set b1='F4D2TA' where id=5; -update noar tt set b2='75' where id=5; -update noar ti set b2='75' where id=5; -update noar tt set b0='X5' where id=6; -update noar ti set b0='X5' where id=6; -update noar tt set b1='GSGBU4CLLDRZC2' where id=6; -update noar ti set b1='GSGBU4CLLDRZC2' where id=6; -update noar tt set b2='U8OADT7WWE5WQDAYMCK9F0Q04ZFEN' where id=6; -update noar ti set b2='U8OADT7WWE5WQDAYMCK9F0Q04ZFEN' where id=6; -update noar tt set b0='Y7OPDYU47AQF' where id=7; -update noar ti set b0='Y7OPDYU47AQF' where id=7; -update noar tt set b1='TQAA04AE3VZAS14Y71ITL0' where id=7; -update noar ti set b1='TQAA04AE3VZAS14Y71ITL0' where id=7; -update noar tt set b2='WGQJI40Y16NUIZAAQKSKXNN39' where id=7; -update noar ti set b2='WGQJI40Y16NUIZAAQKSKXNN39' where id=7; -update noar tt set b0='E2O' where id=8; -update noar ti set b0='E2O' where id=8; -update noar tt set b1='64M7YPD8' where id=8; -update noar ti set b1='64M7YPD8' where id=8; -update noar tt set b2='J' where id=8; -update noar ti set b2='J' where id=8; -update noar tt set b0='Z' where id=9; -update noar ti set b0='Z' where id=9; -update noar tt set b1='XLDS2S24' where id=9; -update noar ti set b1='XLDS2S24' where id=9; -update noar tt set b2='HLA2LL5N7QS3LK9T14AX' where id=9; -update noar ti set b2='HLA2LL5N7QS3LK9T14AX' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 longblob not null, - b1 blob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='ODFQBMOJ9C5HW2GEUTIO1ULWZJG5EMY' where id=1; -update noar ti set b0='ODFQBMOJ9C5HW2GEUTIO1ULWZJG5EMY' where id=1; -update noar tt set b1='1CK2HUAF52QFKLOEEXLI6IU20TN5VZB' where id=1; -update noar ti set b1='1CK2HUAF52QFKLOEEXLI6IU20TN5VZB' where id=1; -update noar tt set b2='ZQNKH9GGAFKINFTVSZV' where id=1; -update noar ti set b2='ZQNKH9GGAFKINFTVSZV' where id=1; -update noar tt set b0='JAQ1XIYE4OH28' where id=2; -update noar ti set b0='JAQ1XIYE4OH28' where id=2; -update noar tt set b1='95FGL5Y924ZKR3ZGVC7O6JRK3U98FR1G' where id=2; -update noar ti set b1='95FGL5Y924ZKR3ZGVC7O6JRK3U98FR1G' where id=2; -update noar tt set b2='GUH2I' where id=2; -update noar ti set b2='GUH2I' where id=2; -update noar tt set b0='XHVFXPRGELBLWQZTRQQRAS' where id=3; -update noar ti set b0='XHVFXPRGELBLWQZTRQQRAS' where id=3; -update noar tt set b1='FYNGE6QKP7I8LYPLDY9KUV7CBNL' where id=3; -update noar ti set b1='FYNGE6QKP7I8LYPLDY9KUV7CBNL' where id=3; -update noar tt set b2='HLC302TMZOWGF77P94723' where id=3; -update noar ti set b2='HLC302TMZOWGF77P94723' where id=3; -update noar tt set b0='V42L6H9ESXZE6YM0TI0HJ' where id=4; -update noar ti set b0='V42L6H9ESXZE6YM0TI0HJ' where id=4; -update noar tt set b1='J8ELZNRLVTMR0G19UKVYJJ7P3FPZJZY8' where id=4; -update noar ti set b1='J8ELZNRLVTMR0G19UKVYJJ7P3FPZJZY8' where id=4; -update noar tt set b2='WGDX39SEMN43IY4LU' where id=4; -update noar ti set b2='WGDX39SEMN43IY4LU' where id=4; -update noar tt set b0='3' where id=5; -update noar ti set b0='3' where id=5; -update noar tt set b1='FXRP3U89IL019Y8ASAC8OOG8LQLBGXP5' where id=5; -update noar ti set b1='FXRP3U89IL019Y8ASAC8OOG8LQLBGXP5' where id=5; -update noar tt set b2='N315G9MWFAND8BRWWXGXF4EB2' where id=5; -update noar ti set b2='N315G9MWFAND8BRWWXGXF4EB2' where id=5; -update noar tt set b0='L' where id=6; -update noar ti set b0='L' where id=6; -update noar tt set b1='BKRKBGQT29V2T47BLETD1OD1A51Q9GT' where id=6; -update noar ti set b1='BKRKBGQT29V2T47BLETD1OD1A51Q9GT' where id=6; -update noar tt set b2='SH2EYK' where id=6; -update noar ti set b2='SH2EYK' where id=6; -update noar tt set b0='SX85B75' where id=7; -update noar ti set b0='SX85B75' where id=7; -update noar tt set b1='9LBMIUWTN4KZY2V8P6C4WS95EP6V' where id=7; -update noar ti set b1='9LBMIUWTN4KZY2V8P6C4WS95EP6V' where id=7; -update noar tt set b2='23CSPD2RUC1RSK2VQJFSCAGSNLK8D69' where id=7; -update noar ti set b2='23CSPD2RUC1RSK2VQJFSCAGSNLK8D69' where id=7; -update noar tt set b0='4NVAXNV2A0C09GEV7AQ7SC6J' where id=8; -update noar ti set b0='4NVAXNV2A0C09GEV7AQ7SC6J' where id=8; -update noar tt set b1='C9F1B2PWUMTITLMF2T8ZS' where id=8; -update noar ti set b1='C9F1B2PWUMTITLMF2T8ZS' where id=8; -update noar tt set b2='9C' where id=8; -update noar ti set b2='9C' where id=8; -update noar tt set b0='EU3IC1JKD1PHPYL65KC14XV' where id=9; -update noar ti set b0='EU3IC1JKD1PHPYL65KC14XV' where id=9; -update noar tt set b1='POL7NS1S5' where id=9; -update noar ti set b1='POL7NS1S5' where id=9; -update noar tt set b2='AMTX' where id=9; -update noar ti set b2='AMTX' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 longblob null, - b1 blob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='ENPIQ87BJMOJQJX67HP' where id=1; -update noar ti set b0='ENPIQ87BJMOJQJX67HP' where id=1; -update noar tt set b1='JEIMVJVNDOP72K9' where id=1; -update noar ti set b1='JEIMVJVNDOP72K9' where id=1; -update noar tt set b2='3' where id=1; -update noar ti set b2='3' where id=1; -update noar tt set b0='ED4T34F1922DFW9A' where id=2; -update noar ti set b0='ED4T34F1922DFW9A' where id=2; -update noar tt set b1='OL' where id=2; -update noar ti set b1='OL' where id=2; -update noar tt set b2='D7ZIWCL33J9XFNWTRV029RSZ2' where id=2; -update noar ti set b2='D7ZIWCL33J9XFNWTRV029RSZ2' where id=2; -update noar tt set b0='TZVW' where id=3; -update noar ti set b0='TZVW' where id=3; -update noar tt set b1='FSPC4SJW32E3OVJ6H' where id=3; -update noar ti set b1='FSPC4SJW32E3OVJ6H' where id=3; -update noar tt set b2='XOQUAXRI421KQIJ4694QSRQTM5Z66V' where id=3; -update noar ti set b2='XOQUAXRI421KQIJ4694QSRQTM5Z66V' where id=3; -update noar tt set b0='CIRXJL4IV6A8HE29TNNWFRBGJ' where id=4; -update noar ti set b0='CIRXJL4IV6A8HE29TNNWFRBGJ' where id=4; -update noar tt set b1='VMW8FZS' where id=4; -update noar ti set b1='VMW8FZS' where id=4; -update noar tt set b2='1ROB5A1JYBGM9M1NR2YDN9NVA' where id=4; -update noar ti set b2='1ROB5A1JYBGM9M1NR2YDN9NVA' where id=4; -update noar tt set b0='OEAENQ23ZWDRANJ' where id=5; -update noar ti set b0='OEAENQ23ZWDRANJ' where id=5; -update noar tt set b1='USZ3ULJNCRSIA0H70AVZZP4V' where id=5; -update noar ti set b1='USZ3ULJNCRSIA0H70AVZZP4V' where id=5; -update noar tt set b2='SR942GZFO3HKOX' where id=5; -update noar ti set b2='SR942GZFO3HKOX' where id=5; -update noar tt set b0='DCVOP' where id=6; -update noar ti set b0='DCVOP' where id=6; -update noar tt set b1='CSOTEHAHFHCL' where id=6; -update noar ti set b1='CSOTEHAHFHCL' where id=6; -update noar tt set b2='6Y2DXL4DXG17LCX1MAJ1Y' where id=6; -update noar ti set b2='6Y2DXL4DXG17LCX1MAJ1Y' where id=6; -update noar tt set b0='WC74ECVEP6YQ82' where id=7; -update noar ti set b0='WC74ECVEP6YQ82' where id=7; -update noar tt set b1='8TRH69PAVJE6904C66G7XBAPXX62FC' where id=7; -update noar ti set b1='8TRH69PAVJE6904C66G7XBAPXX62FC' where id=7; -update noar tt set b2='0NGH9WS' where id=7; -update noar ti set b2='0NGH9WS' where id=7; -update noar tt set b0='2E7IKLF7QZ3VRH8W88G5H7HK' where id=8; -update noar ti set b0='2E7IKLF7QZ3VRH8W88G5H7HK' where id=8; -update noar tt set b1='NNGNDKL' where id=8; -update noar ti set b1='NNGNDKL' where id=8; -update noar tt set b2='K4ODJ2XYSUVXJR0ZQ3510' where id=8; -update noar ti set b2='K4ODJ2XYSUVXJR0ZQ3510' where id=8; -update noar tt set b0='UNFTM5' where id=9; -update noar ti set b0='UNFTM5' where id=9; -update noar tt set b1='1K9PRBHKHVPOH5D2UJ0JSCPFCMN8VHW' where id=9; -update noar ti set b1='1K9PRBHKHVPOH5D2UJ0JSCPFCMN8VHW' where id=9; -update noar tt set b2='8J49AWQSEHADA09EQO6T8B2AYZYRIV39' where id=9; -update noar ti set b2='8J49AWQSEHADA09EQO6T8B2AYZYRIV39' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 longblob not null, - b1 blob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='4YR5OV2' where id=1; -update noar ti set b0='4YR5OV2' where id=1; -update noar tt set b1='TMH04BZ7KMMEJHF3XPKQZ1HK63AJQ' where id=1; -update noar ti set b1='TMH04BZ7KMMEJHF3XPKQZ1HK63AJQ' where id=1; -update noar tt set b2='4MSGH' where id=1; -update noar ti set b2='4MSGH' where id=1; -update noar tt set b0='HGP145XAWG5JIZQSGYYTBKNH0' where id=2; -update noar ti set b0='HGP145XAWG5JIZQSGYYTBKNH0' where id=2; -update noar tt set b1='4UFAD8B2A9FHOU8462HZ' where id=2; -update noar ti set b1='4UFAD8B2A9FHOU8462HZ' where id=2; -update noar tt set b2='O2Q77QH9BVOKYVVUCP4X' where id=2; -update noar ti set b2='O2Q77QH9BVOKYVVUCP4X' where id=2; -update noar tt set b0='DSINLDN0953FXRWNADCVP8LXLHH83ETA' where id=3; -update noar ti set b0='DSINLDN0953FXRWNADCVP8LXLHH83ETA' where id=3; -update noar tt set b1='8ZAIILLVTWNJBVV2Y7C2LP82M3PD' where id=3; -update noar ti set b1='8ZAIILLVTWNJBVV2Y7C2LP82M3PD' where id=3; -update noar tt set b2='HDVS3WLSS2OFR01C' where id=3; -update noar ti set b2='HDVS3WLSS2OFR01C' where id=3; -update noar tt set b0='66CG2YLNL4MAXVWW4SF2' where id=4; -update noar ti set b0='66CG2YLNL4MAXVWW4SF2' where id=4; -update noar tt set b1='3IS7GBN5JYNECRVUCVI7GIO86DB0R9' where id=4; -update noar ti set b1='3IS7GBN5JYNECRVUCVI7GIO86DB0R9' where id=4; -update noar tt set b2='FX2LL' where id=4; -update noar ti set b2='FX2LL' where id=4; -update noar tt set b0='7' where id=5; -update noar ti set b0='7' where id=5; -update noar tt set b1='RHBCYBESGLJNP9L' where id=5; -update noar ti set b1='RHBCYBESGLJNP9L' where id=5; -update noar tt set b2='DA9SKWUNC4LG' where id=5; -update noar ti set b2='DA9SKWUNC4LG' where id=5; -update noar tt set b0='1KEGXR44Y9MT9AX9YLPBI5DPT' where id=6; -update noar ti set b0='1KEGXR44Y9MT9AX9YLPBI5DPT' where id=6; -update noar tt set b1='4MW6F3KY6GDVOILZGGD4IZNFBKT' where id=6; -update noar ti set b1='4MW6F3KY6GDVOILZGGD4IZNFBKT' where id=6; -update noar tt set b2='FP9KL111TZD' where id=6; -update noar ti set b2='FP9KL111TZD' where id=6; -update noar tt set b0='B169' where id=7; -update noar ti set b0='B169' where id=7; -update noar tt set b1='SYTMF9HKR5OV04MSX' where id=7; -update noar ti set b1='SYTMF9HKR5OV04MSX' where id=7; -update noar tt set b2='8Z5MGK3Y3P2Y2JJ73WPG4TROKUYX6' where id=7; -update noar ti set b2='8Z5MGK3Y3P2Y2JJ73WPG4TROKUYX6' where id=7; -update noar tt set b0='UISFEX1OH47N6XLH8Z6R3UKDY' where id=8; -update noar ti set b0='UISFEX1OH47N6XLH8Z6R3UKDY' where id=8; -update noar tt set b1='TDWONE8LK71QK0Z2O4ACJEMSO' where id=8; -update noar ti set b1='TDWONE8LK71QK0Z2O4ACJEMSO' where id=8; -update noar tt set b2='7' where id=8; -update noar ti set b2='7' where id=8; -update noar tt set b0='1DIFDQ33SJ' where id=9; -update noar ti set b0='1DIFDQ33SJ' where id=9; -update noar tt set b1='YW' where id=9; -update noar ti set b1='YW' where id=9; -update noar tt set b2='2YBNPH4B4K9J' where id=9; -update noar ti set b2='2YBNPH4B4K9J' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 longblob null, - b1 blob null, - b2 text null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='QAXRZK5KTF05RY' where id=1; -update noar ti set b0='QAXRZK5KTF05RY' where id=1; -update noar tt set b1='0HVVWKQ9R2ZCY78VWGH4W8IO4F8BFI6' where id=1; -update noar ti set b1='0HVVWKQ9R2ZCY78VWGH4W8IO4F8BFI6' where id=1; -update noar tt set b2='BIME7O4DB5UYBR59F51VQ35G0X9SESE6' where id=1; -update noar ti set b2='BIME7O4DB5UYBR59F51VQ35G0X9SESE6' where id=1; -update noar tt set b0='Z4TH37UC8OQBPM9MKYEU' where id=2; -update noar ti set b0='Z4TH37UC8OQBPM9MKYEU' where id=2; -update noar tt set b1='CE6C8IAX4G6HHKABWNSX8' where id=2; -update noar ti set b1='CE6C8IAX4G6HHKABWNSX8' where id=2; -update noar tt set b2='K1LUOIOBRXYV2VXYK7O6T9P' where id=2; -update noar ti set b2='K1LUOIOBRXYV2VXYK7O6T9P' where id=2; -update noar tt set b0='0YXQE4HK7Z4' where id=3; -update noar ti set b0='0YXQE4HK7Z4' where id=3; -update noar tt set b1='DBQ2IKRP0ZSATUWH4FNF' where id=3; -update noar ti set b1='DBQ2IKRP0ZSATUWH4FNF' where id=3; -update noar tt set b2='UNM' where id=3; -update noar ti set b2='UNM' where id=3; -update noar tt set b0='8M6HWWJ5YW4Q0P2T0OCEHUTFWCKK' where id=4; -update noar ti set b0='8M6HWWJ5YW4Q0P2T0OCEHUTFWCKK' where id=4; -update noar tt set b1='8O' where id=4; -update noar ti set b1='8O' where id=4; -update noar tt set b2='K6AF' where id=4; -update noar ti set b2='K6AF' where id=4; -update noar tt set b0='W6IXIPZDQ1JKSJTMSXNF4XQ7XRJU' where id=5; -update noar ti set b0='W6IXIPZDQ1JKSJTMSXNF4XQ7XRJU' where id=5; -update noar tt set b1='7UF2W5SGY39DV93RIIRD5PB5DUWBQ47' where id=5; -update noar ti set b1='7UF2W5SGY39DV93RIIRD5PB5DUWBQ47' where id=5; -update noar tt set b2='VCCOWF' where id=5; -update noar ti set b2='VCCOWF' where id=5; -update noar tt set b0='QIQ2WRN2JG5' where id=6; -update noar ti set b0='QIQ2WRN2JG5' where id=6; -update noar tt set b1='9NVFK9Z7OD' where id=6; -update noar ti set b1='9NVFK9Z7OD' where id=6; -update noar tt set b2='HAPWZICVOCREFE1FYVZFVJ' where id=6; -update noar ti set b2='HAPWZICVOCREFE1FYVZFVJ' where id=6; -update noar tt set b0='TRKE5YSBPNENH9N' where id=7; -update noar ti set b0='TRKE5YSBPNENH9N' where id=7; -update noar tt set b1='AUOOJFP42U6846T5FRIZYY3' where id=7; -update noar ti set b1='AUOOJFP42U6846T5FRIZYY3' where id=7; -update noar tt set b2='5RC6PKF2' where id=7; -update noar ti set b2='5RC6PKF2' where id=7; -update noar tt set b0='Z5U3DBBB67QB' where id=8; -update noar ti set b0='Z5U3DBBB67QB' where id=8; -update noar tt set b1='B28TS61AQUL3E4WIKX8G6EJJ' where id=8; -update noar ti set b1='B28TS61AQUL3E4WIKX8G6EJJ' where id=8; -update noar tt set b2='WADXA8MBY2ZSFPJQCBVU8DJWY4YLFTV' where id=8; -update noar ti set b2='WADXA8MBY2ZSFPJQCBVU8DJWY4YLFTV' where id=8; -update noar tt set b0='3JY1IXFGGJV00F281OFEJX7EQ6CTB8J' where id=9; -update noar ti set b0='3JY1IXFGGJV00F281OFEJX7EQ6CTB8J' where id=9; -update noar tt set b1='YDQC52Q6V3QMAKCFI6TWHI6LD25E' where id=9; -update noar ti set b1='YDQC52Q6V3QMAKCFI6TWHI6LD25E' where id=9; -update noar tt set b2='ZM50PVKOJ1' where id=9; -update noar ti set b2='ZM50PVKOJ1' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 longblob not null, - b1 blob not null, - b2 text not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='UIN6LSZOIQALWMSJYZGS9H' where id=1; -update noar ti set b0='UIN6LSZOIQALWMSJYZGS9H' where id=1; -update noar tt set b1='N6IIRBLCWO8C6OL8Z6A' where id=1; -update noar ti set b1='N6IIRBLCWO8C6OL8Z6A' where id=1; -update noar tt set b2='NJ1RWAC' where id=1; -update noar ti set b2='NJ1RWAC' where id=1; -update noar tt set b0='K691ZTWVMOCSR3DPI2' where id=2; -update noar ti set b0='K691ZTWVMOCSR3DPI2' where id=2; -update noar tt set b1='P8TYGH4OZ9NX95D19VYWI8' where id=2; -update noar ti set b1='P8TYGH4OZ9NX95D19VYWI8' where id=2; -update noar tt set b2='1CK27Z61SFUOJNEAODL3R8' where id=2; -update noar ti set b2='1CK27Z61SFUOJNEAODL3R8' where id=2; -update noar tt set b0='NGDGM03E25T' where id=3; -update noar ti set b0='NGDGM03E25T' where id=3; -update noar tt set b1='CS51C9XZP0S' where id=3; -update noar ti set b1='CS51C9XZP0S' where id=3; -update noar tt set b2='S0V6YWRP' where id=3; -update noar ti set b2='S0V6YWRP' where id=3; -update noar tt set b0='CP87S787CQJDQUI985I9E6' where id=4; -update noar ti set b0='CP87S787CQJDQUI985I9E6' where id=4; -update noar tt set b1='J8WW7NK1ELXNM323' where id=4; -update noar ti set b1='J8WW7NK1ELXNM323' where id=4; -update noar tt set b2='63IFZJ' where id=4; -update noar ti set b2='63IFZJ' where id=4; -update noar tt set b0='449VMKOWBMC80SYHI0C1HZ' where id=5; -update noar ti set b0='449VMKOWBMC80SYHI0C1HZ' where id=5; -update noar tt set b1='W8NUI2R1' where id=5; -update noar ti set b1='W8NUI2R1' where id=5; -update noar tt set b2='K89UZY6B1C4RBE' where id=5; -update noar ti set b2='K89UZY6B1C4RBE' where id=5; -update noar tt set b0='VUNXE4G05Y39HWW6X' where id=6; -update noar ti set b0='VUNXE4G05Y39HWW6X' where id=6; -update noar tt set b1='6WDUD8ZLY9UHNWO8UIG1OKMLMX' where id=6; -update noar ti set b1='6WDUD8ZLY9UHNWO8UIG1OKMLMX' where id=6; -update noar tt set b2='1GPF0Q' where id=6; -update noar ti set b2='1GPF0Q' where id=6; -update noar tt set b0='W9RXONTWFWDXVPPZQLP2NO2' where id=7; -update noar ti set b0='W9RXONTWFWDXVPPZQLP2NO2' where id=7; -update noar tt set b1='GFSKHX9AAAD5OM' where id=7; -update noar ti set b1='GFSKHX9AAAD5OM' where id=7; -update noar tt set b2='CRPQKMNOXWU56WQ5TF' where id=7; -update noar ti set b2='CRPQKMNOXWU56WQ5TF' where id=7; -update noar tt set b0='N9X1GX' where id=8; -update noar ti set b0='N9X1GX' where id=8; -update noar tt set b1='EDB9GS4SB40XX37XZOQNT04I' where id=8; -update noar ti set b1='EDB9GS4SB40XX37XZOQNT04I' where id=8; -update noar tt set b2='KVIN' where id=8; -update noar ti set b2='KVIN' where id=8; -update noar tt set b0='KC9L880VLFID96SBPHU6I' where id=9; -update noar ti set b0='KC9L880VLFID96SBPHU6I' where id=9; -update noar tt set b1='F1BU01H40ZR9WVSV3AA2' where id=9; -update noar ti set b1='F1BU01H40ZR9WVSV3AA2' where id=9; -update noar tt set b2='REJHZA0MTF5DIFXK2X8FKZV' where id=9; -update noar ti set b2='REJHZA0MTF5DIFXK2X8FKZV' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 longblob null, - b1 mediumblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='9WY4UVN1N6RW5' where id=1; -update noar ti set b0='9WY4UVN1N6RW5' where id=1; -update noar tt set b1='FVM6Z7YO4528HX' where id=1; -update noar ti set b1='FVM6Z7YO4528HX' where id=1; -update noar tt set b2='TNYUO4' where id=1; -update noar ti set b2='TNYUO4' where id=1; -update noar tt set b0='EIDJG721JXO29ITLO' where id=2; -update noar ti set b0='EIDJG721JXO29ITLO' where id=2; -update noar tt set b1='QEB2334H' where id=2; -update noar ti set b1='QEB2334H' where id=2; -update noar tt set b2='DCOZ8GG0VL7481JMB2CWHEU7ZOWD' where id=2; -update noar ti set b2='DCOZ8GG0VL7481JMB2CWHEU7ZOWD' where id=2; -update noar tt set b0='LVTV0WFBRWN461VD37' where id=3; -update noar ti set b0='LVTV0WFBRWN461VD37' where id=3; -update noar tt set b1='9' where id=3; -update noar ti set b1='9' where id=3; -update noar tt set b2='LQBPEW1ZQZNVFJZI8RN6' where id=3; -update noar ti set b2='LQBPEW1ZQZNVFJZI8RN6' where id=3; -update noar tt set b0='IH0WQNH' where id=4; -update noar ti set b0='IH0WQNH' where id=4; -update noar tt set b1='UA4K6FIFQV' where id=4; -update noar ti set b1='UA4K6FIFQV' where id=4; -update noar tt set b2='CL' where id=4; -update noar ti set b2='CL' where id=4; -update noar tt set b0='9VQ7PPXO667V7E94PYUFQK4FL' where id=5; -update noar ti set b0='9VQ7PPXO667V7E94PYUFQK4FL' where id=5; -update noar tt set b1='52EY8YFMX8X3M06IL' where id=5; -update noar ti set b1='52EY8YFMX8X3M06IL' where id=5; -update noar tt set b2='2RH9M1Y' where id=5; -update noar ti set b2='2RH9M1Y' where id=5; -update noar tt set b0='HZ16E873PXHA3K8VNRAD1' where id=6; -update noar ti set b0='HZ16E873PXHA3K8VNRAD1' where id=6; -update noar tt set b1='9RO5173ZYP' where id=6; -update noar ti set b1='9RO5173ZYP' where id=6; -update noar tt set b2='CVTKD0N0YFRNCB5DZF2HXA' where id=6; -update noar ti set b2='CVTKD0N0YFRNCB5DZF2HXA' where id=6; -update noar tt set b0='BX' where id=7; -update noar ti set b0='BX' where id=7; -update noar tt set b1='8PW8ADO9HBH' where id=7; -update noar ti set b1='8PW8ADO9HBH' where id=7; -update noar tt set b2='93C5R66R9BFTK1YNQ' where id=7; -update noar ti set b2='93C5R66R9BFTK1YNQ' where id=7; -update noar tt set b0='SK49SRN2SZB5HCUMI7HU' where id=8; -update noar ti set b0='SK49SRN2SZB5HCUMI7HU' where id=8; -update noar tt set b1='I6ZT6F73PDU80RMC38DA' where id=8; -update noar ti set b1='I6ZT6F73PDU80RMC38DA' where id=8; -update noar tt set b2='WGOSTZH26245ZYRS46ZPOR' where id=8; -update noar ti set b2='WGOSTZH26245ZYRS46ZPOR' where id=8; -update noar tt set b0='H1' where id=9; -update noar ti set b0='H1' where id=9; -update noar tt set b1='6VEFOJINMX1U5DT7' where id=9; -update noar ti set b1='6VEFOJINMX1U5DT7' where id=9; -update noar tt set b2='68FL5VYHZ89SKA645Y0LKWD' where id=9; -update noar ti set b2='68FL5VYHZ89SKA645Y0LKWD' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 longblob not null, - b1 mediumblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='8DQW5WBMTRXJY9KRANK8H3YMKLZ30K1' where id=1; -update noar ti set b0='8DQW5WBMTRXJY9KRANK8H3YMKLZ30K1' where id=1; -update noar tt set b1='A98Z60U1JET53XA09YSD15QSE9YL' where id=1; -update noar ti set b1='A98Z60U1JET53XA09YSD15QSE9YL' where id=1; -update noar tt set b2='7AA264A0XNUBWHB2DHW' where id=1; -update noar ti set b2='7AA264A0XNUBWHB2DHW' where id=1; -update noar tt set b0='M' where id=2; -update noar ti set b0='M' where id=2; -update noar tt set b1='KJ89S07OE2IMKF924P2M2UF9' where id=2; -update noar ti set b1='KJ89S07OE2IMKF924P2M2UF9' where id=2; -update noar tt set b2='ICM92DK4' where id=2; -update noar ti set b2='ICM92DK4' where id=2; -update noar tt set b0='8NMQ1GGNDVGKP0SGP2GSGQNC' where id=3; -update noar ti set b0='8NMQ1GGNDVGKP0SGP2GSGQNC' where id=3; -update noar tt set b1='GP1QPEHS59MT1ZDCYJHWJOG7NHPE7' where id=3; -update noar ti set b1='GP1QPEHS59MT1ZDCYJHWJOG7NHPE7' where id=3; -update noar tt set b2='6OX5W6789XIVV010LA' where id=3; -update noar ti set b2='6OX5W6789XIVV010LA' where id=3; -update noar tt set b0='0RWA0540MONOTNWPIWA50VFGDHEM4SS' where id=4; -update noar ti set b0='0RWA0540MONOTNWPIWA50VFGDHEM4SS' where id=4; -update noar tt set b1='OW7' where id=4; -update noar ti set b1='OW7' where id=4; -update noar tt set b2='U2CQK2WYCG1L913208IET42' where id=4; -update noar ti set b2='U2CQK2WYCG1L913208IET42' where id=4; -update noar tt set b0='KAYKUL0J9OQ45B1' where id=5; -update noar ti set b0='KAYKUL0J9OQ45B1' where id=5; -update noar tt set b1='R7H30DYSCZE6QJQWOGW53RBLZY49' where id=5; -update noar ti set b1='R7H30DYSCZE6QJQWOGW53RBLZY49' where id=5; -update noar tt set b2='A8TUNVR1F0F1AQA4XA5M860' where id=5; -update noar ti set b2='A8TUNVR1F0F1AQA4XA5M860' where id=5; -update noar tt set b0='9F2A1G' where id=6; -update noar ti set b0='9F2A1G' where id=6; -update noar tt set b1='58UQG6XST8Z0C9YY' where id=6; -update noar ti set b1='58UQG6XST8Z0C9YY' where id=6; -update noar tt set b2='782RIGIQPIF8P116W85F' where id=6; -update noar ti set b2='782RIGIQPIF8P116W85F' where id=6; -update noar tt set b0='A7U4LM1J265LO' where id=7; -update noar ti set b0='A7U4LM1J265LO' where id=7; -update noar tt set b1='F690H' where id=7; -update noar ti set b1='F690H' where id=7; -update noar tt set b2='B312GJFW7NG002WBK' where id=7; -update noar ti set b2='B312GJFW7NG002WBK' where id=7; -update noar tt set b0='EFP9BPPSA1X0339VXXBOT' where id=8; -update noar ti set b0='EFP9BPPSA1X0339VXXBOT' where id=8; -update noar tt set b1='6HL7H1H7FL5EH77D' where id=8; -update noar ti set b1='6HL7H1H7FL5EH77D' where id=8; -update noar tt set b2='CL' where id=8; -update noar ti set b2='CL' where id=8; -update noar tt set b0='22OS4QLQOSGS6BOX' where id=9; -update noar ti set b0='22OS4QLQOSGS6BOX' where id=9; -update noar tt set b1='S05M97K' where id=9; -update noar ti set b1='S05M97K' where id=9; -update noar tt set b2='93VZTP0QCC5N5NGRQI' where id=9; -update noar ti set b2='93VZTP0QCC5N5NGRQI' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 longblob null, - b1 mediumblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='7KVAM' where id=1; -update noar ti set b0='7KVAM' where id=1; -update noar tt set b1='AG7GAKAU8VXENX9HHIS7WSZRG6UWC9' where id=1; -update noar ti set b1='AG7GAKAU8VXENX9HHIS7WSZRG6UWC9' where id=1; -update noar tt set b2='JBKF2DYN1GF9P' where id=1; -update noar ti set b2='JBKF2DYN1GF9P' where id=1; -update noar tt set b0='1HU5' where id=2; -update noar ti set b0='1HU5' where id=2; -update noar tt set b1='0D59PARTH7HZ625LCZJMUO' where id=2; -update noar ti set b1='0D59PARTH7HZ625LCZJMUO' where id=2; -update noar tt set b2='VNTG6FNKZ5V22GZLR3A80TYZPI2' where id=2; -update noar ti set b2='VNTG6FNKZ5V22GZLR3A80TYZPI2' where id=2; -update noar tt set b0='HBGYWSH2QZDTH6VGDO1W2RF70GW' where id=3; -update noar ti set b0='HBGYWSH2QZDTH6VGDO1W2RF70GW' where id=3; -update noar tt set b1='V629VCCC3OVMPE1' where id=3; -update noar ti set b1='V629VCCC3OVMPE1' where id=3; -update noar tt set b2='2J95W41W66' where id=3; -update noar ti set b2='2J95W41W66' where id=3; -update noar tt set b0='XYYF16JGDCI2JYLYLWT8K7YFG' where id=4; -update noar ti set b0='XYYF16JGDCI2JYLYLWT8K7YFG' where id=4; -update noar tt set b1='M6FK0245FQ7MZLB7GQSFIL' where id=4; -update noar ti set b1='M6FK0245FQ7MZLB7GQSFIL' where id=4; -update noar tt set b2='FQRK' where id=4; -update noar ti set b2='FQRK' where id=4; -update noar tt set b0='HU2873TTB' where id=5; -update noar ti set b0='HU2873TTB' where id=5; -update noar tt set b1='27IQQ' where id=5; -update noar ti set b1='27IQQ' where id=5; -update noar tt set b2='Y8' where id=5; -update noar ti set b2='Y8' where id=5; -update noar tt set b0='7H' where id=6; -update noar ti set b0='7H' where id=6; -update noar tt set b1='24LS7IHXF' where id=6; -update noar ti set b1='24LS7IHXF' where id=6; -update noar tt set b2='T' where id=6; -update noar ti set b2='T' where id=6; -update noar tt set b0='0Z62IIV4ST' where id=7; -update noar ti set b0='0Z62IIV4ST' where id=7; -update noar tt set b1='7AV29C1IU984FXHCSRGWFSAX' where id=7; -update noar ti set b1='7AV29C1IU984FXHCSRGWFSAX' where id=7; -update noar tt set b2='U2WOU7' where id=7; -update noar ti set b2='U2WOU7' where id=7; -update noar tt set b0='F1FKZMXR' where id=8; -update noar ti set b0='F1FKZMXR' where id=8; -update noar tt set b1='WCS0NN0UFCT' where id=8; -update noar ti set b1='WCS0NN0UFCT' where id=8; -update noar tt set b2='PU2U87VVY90Y' where id=8; -update noar ti set b2='PU2U87VVY90Y' where id=8; -update noar tt set b0='P4IWAARBSZ1PUB' where id=9; -update noar ti set b0='P4IWAARBSZ1PUB' where id=9; -update noar tt set b1='KTQD8GIMBS2FP1PTJKKXFRSWAN6N' where id=9; -update noar ti set b1='KTQD8GIMBS2FP1PTJKKXFRSWAN6N' where id=9; -update noar tt set b2='N8YRTE0KJR0RJU' where id=9; -update noar ti set b2='N8YRTE0KJR0RJU' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 longblob not null, - b1 mediumblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='4X44KD5PUV2AB59GLIS' where id=1; -update noar ti set b0='4X44KD5PUV2AB59GLIS' where id=1; -update noar tt set b1='GUZFZEOPFFMR2CBAZM1IZQTD' where id=1; -update noar ti set b1='GUZFZEOPFFMR2CBAZM1IZQTD' where id=1; -update noar tt set b2='Q72YBK0TSJYHHY8PU' where id=1; -update noar ti set b2='Q72YBK0TSJYHHY8PU' where id=1; -update noar tt set b0='K19LDDP5C' where id=2; -update noar ti set b0='K19LDDP5C' where id=2; -update noar tt set b1='J6OBZKSTJ2JMO6QON' where id=2; -update noar ti set b1='J6OBZKSTJ2JMO6QON' where id=2; -update noar tt set b2='UDMV2VF31' where id=2; -update noar ti set b2='UDMV2VF31' where id=2; -update noar tt set b0='L5WGNU4WNIWH' where id=3; -update noar ti set b0='L5WGNU4WNIWH' where id=3; -update noar tt set b1='K75U2I' where id=3; -update noar ti set b1='K75U2I' where id=3; -update noar tt set b2='NZ55E' where id=3; -update noar ti set b2='NZ55E' where id=3; -update noar tt set b0='YQOB' where id=4; -update noar ti set b0='YQOB' where id=4; -update noar tt set b1='NXRM03CJW9' where id=4; -update noar ti set b1='NXRM03CJW9' where id=4; -update noar tt set b2='JGLE0BDVC72BQL379W' where id=4; -update noar ti set b2='JGLE0BDVC72BQL379W' where id=4; -update noar tt set b0='SYL3LQZYLJXJADASRPY7UUOO494HU' where id=5; -update noar ti set b0='SYL3LQZYLJXJADASRPY7UUOO494HU' where id=5; -update noar tt set b1='74NYBECENCTMECVHTANU0U' where id=5; -update noar ti set b1='74NYBECENCTMECVHTANU0U' where id=5; -update noar tt set b2='I1LS6BVPIU6AAFK2' where id=5; -update noar ti set b2='I1LS6BVPIU6AAFK2' where id=5; -update noar tt set b0='MCBSWZ3K3BOLH688CUKIBWS8ACODDFZ' where id=6; -update noar ti set b0='MCBSWZ3K3BOLH688CUKIBWS8ACODDFZ' where id=6; -update noar tt set b1='WIFT09PZWS2C42Q2PO6G2JF7QBEFO0' where id=6; -update noar ti set b1='WIFT09PZWS2C42Q2PO6G2JF7QBEFO0' where id=6; -update noar tt set b2='RYC8MM85X2QJE4OGS247UK42WU4X' where id=6; -update noar ti set b2='RYC8MM85X2QJE4OGS247UK42WU4X' where id=6; -update noar tt set b0='KVPZC4ZXTAOMSINCDGVNJ1OI' where id=7; -update noar ti set b0='KVPZC4ZXTAOMSINCDGVNJ1OI' where id=7; -update noar tt set b1='S60E9CU30Z4MYLX4' where id=7; -update noar ti set b1='S60E9CU30Z4MYLX4' where id=7; -update noar tt set b2='DW90E' where id=7; -update noar ti set b2='DW90E' where id=7; -update noar tt set b0='8YLSKDT5MR0TGVFG5WE3EORCEE' where id=8; -update noar ti set b0='8YLSKDT5MR0TGVFG5WE3EORCEE' where id=8; -update noar tt set b1='XLJSPV40KBLNNML' where id=8; -update noar ti set b1='XLJSPV40KBLNNML' where id=8; -update noar tt set b2='3TWZ1ZI' where id=8; -update noar ti set b2='3TWZ1ZI' where id=8; -update noar tt set b0='AOS56W' where id=9; -update noar ti set b0='AOS56W' where id=9; -update noar tt set b1='P379HOGZL9OGNTP23PUBSELFL' where id=9; -update noar ti set b1='P379HOGZL9OGNTP23PUBSELFL' where id=9; -update noar tt set b2='6NX5LO2H7U447EB34ZTX5' where id=9; -update noar ti set b2='6NX5LO2H7U447EB34ZTX5' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 longblob null, - b1 mediumblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='2HRCAP0905VZZN' where id=1; -update noar ti set b0='2HRCAP0905VZZN' where id=1; -update noar tt set b1='AX5W379S76BX' where id=1; -update noar ti set b1='AX5W379S76BX' where id=1; -update noar tt set b2='U3RA' where id=1; -update noar ti set b2='U3RA' where id=1; -update noar tt set b0='9G' where id=2; -update noar ti set b0='9G' where id=2; -update noar tt set b1='EKD8MUW0VE43O8YX54TZLOBSV2BC' where id=2; -update noar ti set b1='EKD8MUW0VE43O8YX54TZLOBSV2BC' where id=2; -update noar tt set b2='N63O2K45Y8G1SOR' where id=2; -update noar ti set b2='N63O2K45Y8G1SOR' where id=2; -update noar tt set b0='0MG0AN' where id=3; -update noar ti set b0='0MG0AN' where id=3; -update noar tt set b1='G6U9MCHSN76DXGP2DJ58T7JW' where id=3; -update noar ti set b1='G6U9MCHSN76DXGP2DJ58T7JW' where id=3; -update noar tt set b2='T005F4' where id=3; -update noar ti set b2='T005F4' where id=3; -update noar tt set b0='4PRQXZ9UI4HQYZ0C2L' where id=4; -update noar ti set b0='4PRQXZ9UI4HQYZ0C2L' where id=4; -update noar tt set b1='MF75X11414E' where id=4; -update noar ti set b1='MF75X11414E' where id=4; -update noar tt set b2='YGZUB2BJ72L24KA' where id=4; -update noar ti set b2='YGZUB2BJ72L24KA' where id=4; -update noar tt set b0='OTTOY3SL23GRFCG' where id=5; -update noar ti set b0='OTTOY3SL23GRFCG' where id=5; -update noar tt set b1='D457VTVI86PIOT0NHTU' where id=5; -update noar ti set b1='D457VTVI86PIOT0NHTU' where id=5; -update noar tt set b2='EJ4MQJGBAFHJGWKAZO2SDV' where id=5; -update noar ti set b2='EJ4MQJGBAFHJGWKAZO2SDV' where id=5; -update noar tt set b0='N86' where id=6; -update noar ti set b0='N86' where id=6; -update noar tt set b1='0JLVBVQ6HBOA3L' where id=6; -update noar ti set b1='0JLVBVQ6HBOA3L' where id=6; -update noar tt set b2='P52JAO' where id=6; -update noar ti set b2='P52JAO' where id=6; -update noar tt set b0='CIXD6375TYSKN2D0B2AM09NYD8FAJ6' where id=7; -update noar ti set b0='CIXD6375TYSKN2D0B2AM09NYD8FAJ6' where id=7; -update noar tt set b1='5DPK0NP' where id=7; -update noar ti set b1='5DPK0NP' where id=7; -update noar tt set b2='3ISKSVQO9UUWV70MZB' where id=7; -update noar ti set b2='3ISKSVQO9UUWV70MZB' where id=7; -update noar tt set b0='VMSZNXG67HA1H2PE90YJ9HI0P' where id=8; -update noar ti set b0='VMSZNXG67HA1H2PE90YJ9HI0P' where id=8; -update noar tt set b1='IHCGN1QMFZZ9IF81OAREN93IWONP4' where id=8; -update noar ti set b1='IHCGN1QMFZZ9IF81OAREN93IWONP4' where id=8; -update noar tt set b2='2Y7IVAILB1AEE4WS23' where id=8; -update noar ti set b2='2Y7IVAILB1AEE4WS23' where id=8; -update noar tt set b0='KQJY9VW30LCGNUBT6K8BKPRAHWGFWLT' where id=9; -update noar ti set b0='KQJY9VW30LCGNUBT6K8BKPRAHWGFWLT' where id=9; -update noar tt set b1='55SQU999SQM' where id=9; -update noar ti set b1='55SQU999SQM' where id=9; -update noar tt set b2='5Q' where id=9; -update noar ti set b2='5Q' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 longblob not null, - b1 mediumblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='FA1E95MXS945VHWE13CFX2IM1' where id=1; -update noar ti set b0='FA1E95MXS945VHWE13CFX2IM1' where id=1; -update noar tt set b1='7RIHIQWB0OGWMN' where id=1; -update noar ti set b1='7RIHIQWB0OGWMN' where id=1; -update noar tt set b2='O5T7ZU9MUCT7RQP4' where id=1; -update noar ti set b2='O5T7ZU9MUCT7RQP4' where id=1; -update noar tt set b0='I1594G1NTW' where id=2; -update noar ti set b0='I1594G1NTW' where id=2; -update noar tt set b1='XMJGF9BO5T67ZEDM0FDT832N4HJE' where id=2; -update noar ti set b1='XMJGF9BO5T67ZEDM0FDT832N4HJE' where id=2; -update noar tt set b2='5JFWAF4NVPYNN7BZQQKW3Y0R1G' where id=2; -update noar ti set b2='5JFWAF4NVPYNN7BZQQKW3Y0R1G' where id=2; -update noar tt set b0='INBO28LEJ5522W2HGPJNZV' where id=3; -update noar ti set b0='INBO28LEJ5522W2HGPJNZV' where id=3; -update noar tt set b1='3GV7KD1RP3W' where id=3; -update noar ti set b1='3GV7KD1RP3W' where id=3; -update noar tt set b2='KQ8' where id=3; -update noar ti set b2='KQ8' where id=3; -update noar tt set b0='8SAC48T7RQV4NE66GSC4SWHR45F50T5' where id=4; -update noar ti set b0='8SAC48T7RQV4NE66GSC4SWHR45F50T5' where id=4; -update noar tt set b1='Y3EOTNDEXTG' where id=4; -update noar ti set b1='Y3EOTNDEXTG' where id=4; -update noar tt set b2='F23Q' where id=4; -update noar ti set b2='F23Q' where id=4; -update noar tt set b0='BQYNBGCE8IG0EQ6WY0QUYE5BJZ9B3' where id=5; -update noar ti set b0='BQYNBGCE8IG0EQ6WY0QUYE5BJZ9B3' where id=5; -update noar tt set b1='CCA67' where id=5; -update noar ti set b1='CCA67' where id=5; -update noar tt set b2='BMPL9SFXQA4U53F9TZFQ8A' where id=5; -update noar ti set b2='BMPL9SFXQA4U53F9TZFQ8A' where id=5; -update noar tt set b0='Z' where id=6; -update noar ti set b0='Z' where id=6; -update noar tt set b1='RKZ85JF1DHJGFGEL3' where id=6; -update noar ti set b1='RKZ85JF1DHJGFGEL3' where id=6; -update noar tt set b2='HUKZT97AVB9FG' where id=6; -update noar ti set b2='HUKZT97AVB9FG' where id=6; -update noar tt set b0='F5PIC6IVDAIG' where id=7; -update noar ti set b0='F5PIC6IVDAIG' where id=7; -update noar tt set b1='B8DC39H7HL857V4LIDV1H9AADDRAPRRN' where id=7; -update noar ti set b1='B8DC39H7HL857V4LIDV1H9AADDRAPRRN' where id=7; -update noar tt set b2='IBMAFBKRP9110OT3' where id=7; -update noar ti set b2='IBMAFBKRP9110OT3' where id=7; -update noar tt set b0='7XCQKY8QM4LD7' where id=8; -update noar ti set b0='7XCQKY8QM4LD7' where id=8; -update noar tt set b1='FNJW' where id=8; -update noar ti set b1='FNJW' where id=8; -update noar tt set b2='T8X8C4KNVP12Y0OSPGNJ' where id=8; -update noar ti set b2='T8X8C4KNVP12Y0OSPGNJ' where id=8; -update noar tt set b0='OTF42VCU9TVRLL24AINGU5L' where id=9; -update noar ti set b0='OTF42VCU9TVRLL24AINGU5L' where id=9; -update noar tt set b1='6CIR6DVLXFNI58BS7YN8LFWOJB8XI4C' where id=9; -update noar ti set b1='6CIR6DVLXFNI58BS7YN8LFWOJB8XI4C' where id=9; -update noar tt set b2='7XOC4WSG9PWL' where id=9; -update noar ti set b2='7XOC4WSG9PWL' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 longblob null, - b1 mediumblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='7P7VWR46M3K33Z3BYF' where id=1; -update noar ti set b0='7P7VWR46M3K33Z3BYF' where id=1; -update noar tt set b1='0IYUYTC8SX5UK5' where id=1; -update noar ti set b1='0IYUYTC8SX5UK5' where id=1; -update noar tt set b2='NXB1JU8NQJ85USRBVRFAF0N7XGD' where id=1; -update noar ti set b2='NXB1JU8NQJ85USRBVRFAF0N7XGD' where id=1; -update noar tt set b0='LYZDZIU8T1C9KNFPX8TGD32YGBWVZK' where id=2; -update noar ti set b0='LYZDZIU8T1C9KNFPX8TGD32YGBWVZK' where id=2; -update noar tt set b1='SKGQPIWP9974I3CMY90UHE423JM' where id=2; -update noar ti set b1='SKGQPIWP9974I3CMY90UHE423JM' where id=2; -update noar tt set b2='69WQFYV4PC0LBPVMKFF' where id=2; -update noar ti set b2='69WQFYV4PC0LBPVMKFF' where id=2; -update noar tt set b0='A6V959GEP86BDYAN373' where id=3; -update noar ti set b0='A6V959GEP86BDYAN373' where id=3; -update noar tt set b1='XJPR38131Q1BQR4FIW57YNJ4O' where id=3; -update noar ti set b1='XJPR38131Q1BQR4FIW57YNJ4O' where id=3; -update noar tt set b2='ES6XBCEW90EBS' where id=3; -update noar ti set b2='ES6XBCEW90EBS' where id=3; -update noar tt set b0='DYYUF2KGPQCUKCGW1HGVU9EFOH3BEKRH' where id=4; -update noar ti set b0='DYYUF2KGPQCUKCGW1HGVU9EFOH3BEKRH' where id=4; -update noar tt set b1='T' where id=4; -update noar ti set b1='T' where id=4; -update noar tt set b2='8806HIZCYWQGP84Y' where id=4; -update noar ti set b2='8806HIZCYWQGP84Y' where id=4; -update noar tt set b0='K66RLI8C8ZBW' where id=5; -update noar ti set b0='K66RLI8C8ZBW' where id=5; -update noar tt set b1='VZ' where id=5; -update noar ti set b1='VZ' where id=5; -update noar tt set b2='R6V30DDMUPYS1OIVE6E8R1VBVP6DA4' where id=5; -update noar ti set b2='R6V30DDMUPYS1OIVE6E8R1VBVP6DA4' where id=5; -update noar tt set b0='O1SAV3HZIXG' where id=6; -update noar ti set b0='O1SAV3HZIXG' where id=6; -update noar tt set b1='UP62E8JWIIRCVK74XPUCI' where id=6; -update noar ti set b1='UP62E8JWIIRCVK74XPUCI' where id=6; -update noar tt set b2='Y4D' where id=6; -update noar ti set b2='Y4D' where id=6; -update noar tt set b0='V' where id=7; -update noar ti set b0='V' where id=7; -update noar tt set b1='YCI' where id=7; -update noar ti set b1='YCI' where id=7; -update noar tt set b2='R' where id=7; -update noar ti set b2='R' where id=7; -update noar tt set b0='FMBEURZ2KGJ5PS380XBMU6Y' where id=8; -update noar ti set b0='FMBEURZ2KGJ5PS380XBMU6Y' where id=8; -update noar tt set b1='T106L5CAST5PFE0VS623TFGEYZZ32C' where id=8; -update noar ti set b1='T106L5CAST5PFE0VS623TFGEYZZ32C' where id=8; -update noar tt set b2='385N53THZY79SF5RIM5ODBXDAKJ' where id=8; -update noar ti set b2='385N53THZY79SF5RIM5ODBXDAKJ' where id=8; -update noar tt set b0='QC5RZNFNU7UXGLT8FCDP9E7JY4ZWE0OE' where id=9; -update noar ti set b0='QC5RZNFNU7UXGLT8FCDP9E7JY4ZWE0OE' where id=9; -update noar tt set b1='NP2THCZJI400L9HELKYX' where id=9; -update noar ti set b1='NP2THCZJI400L9HELKYX' where id=9; -update noar tt set b2='28GR' where id=9; -update noar ti set b2='28GR' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 longblob not null, - b1 mediumblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='9WCJKFAZWB2KC' where id=1; -update noar ti set b0='9WCJKFAZWB2KC' where id=1; -update noar tt set b1='8TEX' where id=1; -update noar ti set b1='8TEX' where id=1; -update noar tt set b2='J1' where id=1; -update noar ti set b2='J1' where id=1; -update noar tt set b0='J0NC0MH' where id=2; -update noar ti set b0='J0NC0MH' where id=2; -update noar tt set b1='E00Y2O6J02D7RWMT' where id=2; -update noar ti set b1='E00Y2O6J02D7RWMT' where id=2; -update noar tt set b2='53IQCEG9BGXA4' where id=2; -update noar ti set b2='53IQCEG9BGXA4' where id=2; -update noar tt set b0='A499G37C' where id=3; -update noar ti set b0='A499G37C' where id=3; -update noar tt set b1='LO3X3BK4EL1RGMUWHQQERQXG' where id=3; -update noar ti set b1='LO3X3BK4EL1RGMUWHQQERQXG' where id=3; -update noar tt set b2='A7CV61DBVY33PLHL7MJD1AGVJNX0S2' where id=3; -update noar ti set b2='A7CV61DBVY33PLHL7MJD1AGVJNX0S2' where id=3; -update noar tt set b0='O5WZ459K4UF' where id=4; -update noar ti set b0='O5WZ459K4UF' where id=4; -update noar tt set b1='GLWJT8EO' where id=4; -update noar ti set b1='GLWJT8EO' where id=4; -update noar tt set b2='JI1RAX70CHL7IJRXPJ' where id=4; -update noar ti set b2='JI1RAX70CHL7IJRXPJ' where id=4; -update noar tt set b0='I39' where id=5; -update noar ti set b0='I39' where id=5; -update noar tt set b1='V096YO741VT2C33N4108QYSYHIGH' where id=5; -update noar ti set b1='V096YO741VT2C33N4108QYSYHIGH' where id=5; -update noar tt set b2='MV9JJ23SGNJ3IXJIDWN9HEUA50WZRY2' where id=5; -update noar ti set b2='MV9JJ23SGNJ3IXJIDWN9HEUA50WZRY2' where id=5; -update noar tt set b0='CEGX6WPZ0GGA' where id=6; -update noar ti set b0='CEGX6WPZ0GGA' where id=6; -update noar tt set b1='W' where id=6; -update noar ti set b1='W' where id=6; -update noar tt set b2='AVEHC3N2865I' where id=6; -update noar ti set b2='AVEHC3N2865I' where id=6; -update noar tt set b0='TWT3XE24F8CPDECQ' where id=7; -update noar ti set b0='TWT3XE24F8CPDECQ' where id=7; -update noar tt set b1='ED27COR9YM5ZA' where id=7; -update noar ti set b1='ED27COR9YM5ZA' where id=7; -update noar tt set b2='EAY35MSNQLGHD3LS2FV30J7JE1Y' where id=7; -update noar ti set b2='EAY35MSNQLGHD3LS2FV30J7JE1Y' where id=7; -update noar tt set b0='MW31JXELXP51Q754' where id=8; -update noar ti set b0='MW31JXELXP51Q754' where id=8; -update noar tt set b1='W8BGOASW' where id=8; -update noar ti set b1='W8BGOASW' where id=8; -update noar tt set b2='ZEMOYL4B2JI40MT70A' where id=8; -update noar ti set b2='ZEMOYL4B2JI40MT70A' where id=8; -update noar tt set b0='7F8R2KBX4NN1NYIDQ9IP3D' where id=9; -update noar ti set b0='7F8R2KBX4NN1NYIDQ9IP3D' where id=9; -update noar tt set b1='S07MWS3K0' where id=9; -update noar ti set b1='S07MWS3K0' where id=9; -update noar tt set b2='KPD1BFOIDVMWCY8RBXW5EA' where id=9; -update noar ti set b2='KPD1BFOIDVMWCY8RBXW5EA' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 longblob null, - b1 mediumblob null, - b2 text null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='0S' where id=1; -update noar ti set b0='0S' where id=1; -update noar tt set b1='Y8SP5F1GMZULHWT5' where id=1; -update noar ti set b1='Y8SP5F1GMZULHWT5' where id=1; -update noar tt set b2='YMWNAFC5PM7ZSZMTV' where id=1; -update noar ti set b2='YMWNAFC5PM7ZSZMTV' where id=1; -update noar tt set b0='GN102Z3FDV5KJ5F4RTSGNL08HN7O3' where id=2; -update noar ti set b0='GN102Z3FDV5KJ5F4RTSGNL08HN7O3' where id=2; -update noar tt set b1='HR1PNWRJGCBVZ5J9QN7' where id=2; -update noar ti set b1='HR1PNWRJGCBVZ5J9QN7' where id=2; -update noar tt set b2='URZ73ZIZO5F' where id=2; -update noar ti set b2='URZ73ZIZO5F' where id=2; -update noar tt set b0='NXPQ8ZCKPO96L' where id=3; -update noar ti set b0='NXPQ8ZCKPO96L' where id=3; -update noar tt set b1='72X8GEOOW9UULY7KVQ8EBBG' where id=3; -update noar ti set b1='72X8GEOOW9UULY7KVQ8EBBG' where id=3; -update noar tt set b2='42MODMQL9YNUQYX32P2HHROR1G5' where id=3; -update noar ti set b2='42MODMQL9YNUQYX32P2HHROR1G5' where id=3; -update noar tt set b0='DN3X7ZX2HT' where id=4; -update noar ti set b0='DN3X7ZX2HT' where id=4; -update noar tt set b1='3KYIR' where id=4; -update noar ti set b1='3KYIR' where id=4; -update noar tt set b2='BFEVJMPSSZK9FOUO' where id=4; -update noar ti set b2='BFEVJMPSSZK9FOUO' where id=4; -update noar tt set b0='TYBWSAX4R77B15BO' where id=5; -update noar ti set b0='TYBWSAX4R77B15BO' where id=5; -update noar tt set b1='6O8WFI6INKLBFTWPAJJNP26UXU' where id=5; -update noar ti set b1='6O8WFI6INKLBFTWPAJJNP26UXU' where id=5; -update noar tt set b2='SA97NF74WKQBKL1QU666AUUBDU3WAN' where id=5; -update noar ti set b2='SA97NF74WKQBKL1QU666AUUBDU3WAN' where id=5; -update noar tt set b0='JMXI7' where id=6; -update noar ti set b0='JMXI7' where id=6; -update noar tt set b1='5IKDW03TKYOG6RI84W6O' where id=6; -update noar ti set b1='5IKDW03TKYOG6RI84W6O' where id=6; -update noar tt set b2='AG' where id=6; -update noar ti set b2='AG' where id=6; -update noar tt set b0='4TQKM38CZJG1FXFV8FFB64IQGAT7P' where id=7; -update noar ti set b0='4TQKM38CZJG1FXFV8FFB64IQGAT7P' where id=7; -update noar tt set b1='OSEDUHZY6' where id=7; -update noar ti set b1='OSEDUHZY6' where id=7; -update noar tt set b2='9W64VN' where id=7; -update noar ti set b2='9W64VN' where id=7; -update noar tt set b0='MB3UDSMUYX25WW' where id=8; -update noar ti set b0='MB3UDSMUYX25WW' where id=8; -update noar tt set b1='TZIH9H9RV603LUG4TTF' where id=8; -update noar ti set b1='TZIH9H9RV603LUG4TTF' where id=8; -update noar tt set b2='1XIRUAKWKP63OY57X3HDDL5V' where id=8; -update noar ti set b2='1XIRUAKWKP63OY57X3HDDL5V' where id=8; -update noar tt set b0='KAL85OSD6' where id=9; -update noar ti set b0='KAL85OSD6' where id=9; -update noar tt set b1='3DIRBRFFUGO6SIP6JZ' where id=9; -update noar ti set b1='3DIRBRFFUGO6SIP6JZ' where id=9; -update noar tt set b2='T9YUML9EFXX96OTX' where id=9; -update noar ti set b2='T9YUML9EFXX96OTX' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 longblob not null, - b1 mediumblob not null, - b2 text not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='3Z1O' where id=1; -update noar ti set b0='3Z1O' where id=1; -update noar tt set b1='K3RZVY05DRXGKFIS' where id=1; -update noar ti set b1='K3RZVY05DRXGKFIS' where id=1; -update noar tt set b2='7' where id=1; -update noar ti set b2='7' where id=1; -update noar tt set b0='6' where id=2; -update noar ti set b0='6' where id=2; -update noar tt set b1='4W1UFA6SHFBSR6BEF' where id=2; -update noar ti set b1='4W1UFA6SHFBSR6BEF' where id=2; -update noar tt set b2='4' where id=2; -update noar ti set b2='4' where id=2; -update noar tt set b0='68E5ZSX9SXXBRAU2QNMX8WFU2OQV' where id=3; -update noar ti set b0='68E5ZSX9SXXBRAU2QNMX8WFU2OQV' where id=3; -update noar tt set b1='ZXLJKNPT7ZDT0N8WKS' where id=3; -update noar ti set b1='ZXLJKNPT7ZDT0N8WKS' where id=3; -update noar tt set b2='AN7CC6P6S259WQ18QINXNOVBAB' where id=3; -update noar ti set b2='AN7CC6P6S259WQ18QINXNOVBAB' where id=3; -update noar tt set b0='A19RJCOIBN2' where id=4; -update noar ti set b0='A19RJCOIBN2' where id=4; -update noar tt set b1='K7HU9SO' where id=4; -update noar ti set b1='K7HU9SO' where id=4; -update noar tt set b2='Y3F5F6UD0K7' where id=4; -update noar ti set b2='Y3F5F6UD0K7' where id=4; -update noar tt set b0='V3AFEWALPM' where id=5; -update noar ti set b0='V3AFEWALPM' where id=5; -update noar tt set b1='EGY18YN7VO7IMW56N4ZEZFZPPITX' where id=5; -update noar ti set b1='EGY18YN7VO7IMW56N4ZEZFZPPITX' where id=5; -update noar tt set b2='RH' where id=5; -update noar ti set b2='RH' where id=5; -update noar tt set b0='3I3BWXW00BN2' where id=6; -update noar ti set b0='3I3BWXW00BN2' where id=6; -update noar tt set b1='YK8H7G4GVLP2DJTK' where id=6; -update noar ti set b1='YK8H7G4GVLP2DJTK' where id=6; -update noar tt set b2='TKOLZBD33YYLZHOCH1ENWJ4WUDJG9VF' where id=6; -update noar ti set b2='TKOLZBD33YYLZHOCH1ENWJ4WUDJG9VF' where id=6; -update noar tt set b0='7XDDUD7K0QUC' where id=7; -update noar ti set b0='7XDDUD7K0QUC' where id=7; -update noar tt set b1='12Y5TLV5S9DFULS' where id=7; -update noar ti set b1='12Y5TLV5S9DFULS' where id=7; -update noar tt set b2='Y45B2N81B4L4B5H6JPD5DMK67' where id=7; -update noar ti set b2='Y45B2N81B4L4B5H6JPD5DMK67' where id=7; -update noar tt set b0='E0JHKNVFAR3KPTD637' where id=8; -update noar ti set b0='E0JHKNVFAR3KPTD637' where id=8; -update noar tt set b1='PYMF51R3FE94PYB4R' where id=8; -update noar ti set b1='PYMF51R3FE94PYB4R' where id=8; -update noar tt set b2='G02HEX4P7' where id=8; -update noar ti set b2='G02HEX4P7' where id=8; -update noar tt set b0='KECZD' where id=9; -update noar ti set b0='KECZD' where id=9; -update noar tt set b1='WGYB464SCYUGEW8JNFHIX24SRE8H8MF' where id=9; -update noar ti set b1='WGYB464SCYUGEW8JNFHIX24SRE8H8MF' where id=9; -update noar tt set b2='XJST2DY' where id=9; -update noar ti set b2='XJST2DY' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 longblob null, - b1 longblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='R0HJK7N43O5' where id=1; -update noar ti set b0='R0HJK7N43O5' where id=1; -update noar tt set b1='67YBE4PLEFK' where id=1; -update noar ti set b1='67YBE4PLEFK' where id=1; -update noar tt set b2='928WX319S0DVW1E5O' where id=1; -update noar ti set b2='928WX319S0DVW1E5O' where id=1; -update noar tt set b0='ZN7XB' where id=2; -update noar ti set b0='ZN7XB' where id=2; -update noar tt set b1='W05UKU6L8' where id=2; -update noar ti set b1='W05UKU6L8' where id=2; -update noar tt set b2='ZT9Y8WIK1NALC6WR6AEQT0V0' where id=2; -update noar ti set b2='ZT9Y8WIK1NALC6WR6AEQT0V0' where id=2; -update noar tt set b0='LJBJTTIK39YLBVONT5NF7MA' where id=3; -update noar ti set b0='LJBJTTIK39YLBVONT5NF7MA' where id=3; -update noar tt set b1='GU75XPE8' where id=3; -update noar ti set b1='GU75XPE8' where id=3; -update noar tt set b2='VYGB51BKSA0UQEASS8UPM0SHRCSJ99N' where id=3; -update noar ti set b2='VYGB51BKSA0UQEASS8UPM0SHRCSJ99N' where id=3; -update noar tt set b0='R5RXTZ0RP7QC598B6V3' where id=4; -update noar ti set b0='R5RXTZ0RP7QC598B6V3' where id=4; -update noar tt set b1='2WE2S4YIMM4IQ9U' where id=4; -update noar ti set b1='2WE2S4YIMM4IQ9U' where id=4; -update noar tt set b2='AN02UDUSCHR' where id=4; -update noar ti set b2='AN02UDUSCHR' where id=4; -update noar tt set b0='BELMINE0LSCPU6KYF68V2P4PNZ7' where id=5; -update noar ti set b0='BELMINE0LSCPU6KYF68V2P4PNZ7' where id=5; -update noar tt set b1='1UH7BBSEOY' where id=5; -update noar ti set b1='1UH7BBSEOY' where id=5; -update noar tt set b2='JOB7D3J6NS0O4YFZKN' where id=5; -update noar ti set b2='JOB7D3J6NS0O4YFZKN' where id=5; -update noar tt set b0='VD9K1CA15D7VVWMM' where id=6; -update noar ti set b0='VD9K1CA15D7VVWMM' where id=6; -update noar tt set b1='96M5MVE8IFCKR438W9PE2L' where id=6; -update noar ti set b1='96M5MVE8IFCKR438W9PE2L' where id=6; -update noar tt set b2='XHENFSNRZZ2CCXVP5O' where id=6; -update noar ti set b2='XHENFSNRZZ2CCXVP5O' where id=6; -update noar tt set b0='6JWEQLBSCFJSHH8' where id=7; -update noar ti set b0='6JWEQLBSCFJSHH8' where id=7; -update noar tt set b1='ZS87OOWG6JI0WKEEWD' where id=7; -update noar ti set b1='ZS87OOWG6JI0WKEEWD' where id=7; -update noar tt set b2='RB3CBJ5PHG7OWQV94DUI04PSLHB8' where id=7; -update noar ti set b2='RB3CBJ5PHG7OWQV94DUI04PSLHB8' where id=7; -update noar tt set b0='LOAVEIF79OAJNXETED48D6J6F' where id=8; -update noar ti set b0='LOAVEIF79OAJNXETED48D6J6F' where id=8; -update noar tt set b1='KUXTEM64U080052KJSLRDZOQGR5M9H' where id=8; -update noar ti set b1='KUXTEM64U080052KJSLRDZOQGR5M9H' where id=8; -update noar tt set b2='7P3IHE7N' where id=8; -update noar ti set b2='7P3IHE7N' where id=8; -update noar tt set b0='GJJPZ0U8XA6ML5O6D02KH0' where id=9; -update noar ti set b0='GJJPZ0U8XA6ML5O6D02KH0' where id=9; -update noar tt set b1='CBVU8V2TPJ97924S64YJND0Z4MBA9NG5' where id=9; -update noar ti set b1='CBVU8V2TPJ97924S64YJND0Z4MBA9NG5' where id=9; -update noar tt set b2='L0IIEXDAY4K3K5J95XYI2QHQB3ON0A' where id=9; -update noar ti set b2='L0IIEXDAY4K3K5J95XYI2QHQB3ON0A' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 longblob not null, - b1 longblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='O8WKUP0OJPHVO' where id=1; -update noar ti set b0='O8WKUP0OJPHVO' where id=1; -update noar tt set b1='KK9WTL5IKLWMW' where id=1; -update noar ti set b1='KK9WTL5IKLWMW' where id=1; -update noar tt set b2='HVQUD0PE0XWBN1MWD' where id=1; -update noar ti set b2='HVQUD0PE0XWBN1MWD' where id=1; -update noar tt set b0='HM3G7ACS9SU0YAWOPG' where id=2; -update noar ti set b0='HM3G7ACS9SU0YAWOPG' where id=2; -update noar tt set b1='JLHCSX7S69K6B86LCDKBL' where id=2; -update noar ti set b1='JLHCSX7S69K6B86LCDKBL' where id=2; -update noar tt set b2='8A4V7OQHV57EV9LQ17CJQQ' where id=2; -update noar ti set b2='8A4V7OQHV57EV9LQ17CJQQ' where id=2; -update noar tt set b0='C3W9X9RDX3OCY1BNWGDJVL8BRZ7E7B' where id=3; -update noar ti set b0='C3W9X9RDX3OCY1BNWGDJVL8BRZ7E7B' where id=3; -update noar tt set b1='H7ZHP5YILHI' where id=3; -update noar ti set b1='H7ZHP5YILHI' where id=3; -update noar tt set b2='CJNLQD2EWZ0DD03PC' where id=3; -update noar ti set b2='CJNLQD2EWZ0DD03PC' where id=3; -update noar tt set b0='TNIHXTKU8YA8K2G1BUSGIPM98GHP6' where id=4; -update noar ti set b0='TNIHXTKU8YA8K2G1BUSGIPM98GHP6' where id=4; -update noar tt set b1='8' where id=4; -update noar ti set b1='8' where id=4; -update noar tt set b2='Y2RP22TQM8EZC6IK2XR' where id=4; -update noar ti set b2='Y2RP22TQM8EZC6IK2XR' where id=4; -update noar tt set b0='JWIMKLKO' where id=5; -update noar ti set b0='JWIMKLKO' where id=5; -update noar tt set b1='DIIDNP0' where id=5; -update noar ti set b1='DIIDNP0' where id=5; -update noar tt set b2='7GG5758KKWFWZZS8BI282Q3TY' where id=5; -update noar ti set b2='7GG5758KKWFWZZS8BI282Q3TY' where id=5; -update noar tt set b0='HRU8N95LXV2L4BEP6Z3ACGNGI0OAFW9H' where id=6; -update noar ti set b0='HRU8N95LXV2L4BEP6Z3ACGNGI0OAFW9H' where id=6; -update noar tt set b1='YRHIWZFD59A7MQDYM0M' where id=6; -update noar ti set b1='YRHIWZFD59A7MQDYM0M' where id=6; -update noar tt set b2='M7MIYJRVFCZ8S' where id=6; -update noar ti set b2='M7MIYJRVFCZ8S' where id=6; -update noar tt set b0='4LF6QFJ49V1FWXX3P' where id=7; -update noar ti set b0='4LF6QFJ49V1FWXX3P' where id=7; -update noar tt set b1='B' where id=7; -update noar ti set b1='B' where id=7; -update noar tt set b2='Z7VKCPZWJYUA51NNSZ4I57RMT' where id=7; -update noar ti set b2='Z7VKCPZWJYUA51NNSZ4I57RMT' where id=7; -update noar tt set b0='O' where id=8; -update noar ti set b0='O' where id=8; -update noar tt set b1='79JWR7V3O' where id=8; -update noar ti set b1='79JWR7V3O' where id=8; -update noar tt set b2='E6KLVRC66LD60AMTJFWRPGRCJM' where id=8; -update noar ti set b2='E6KLVRC66LD60AMTJFWRPGRCJM' where id=8; -update noar tt set b0='KCCDWV' where id=9; -update noar ti set b0='KCCDWV' where id=9; -update noar tt set b1='XWQK9QSHLF1TOX5ZM54JS6S7UTWU' where id=9; -update noar ti set b1='XWQK9QSHLF1TOX5ZM54JS6S7UTWU' where id=9; -update noar tt set b2='4B9XB25G1LF7N8535CUPD003IH51L' where id=9; -update noar ti set b2='4B9XB25G1LF7N8535CUPD003IH51L' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 longblob null, - b1 longblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='M6' where id=1; -update noar ti set b0='M6' where id=1; -update noar tt set b1='6WB5YDKXASEESOEIB0CGQ9FQB9BM0' where id=1; -update noar ti set b1='6WB5YDKXASEESOEIB0CGQ9FQB9BM0' where id=1; -update noar tt set b2='MWRV1ZC71KY' where id=1; -update noar ti set b2='MWRV1ZC71KY' where id=1; -update noar tt set b0='P' where id=2; -update noar ti set b0='P' where id=2; -update noar tt set b1='PBG23HPBYPJFWGGTTVQAVA1221A' where id=2; -update noar ti set b1='PBG23HPBYPJFWGGTTVQAVA1221A' where id=2; -update noar tt set b2='N5ODQH4CJNW3Y043G748CKFM55' where id=2; -update noar ti set b2='N5ODQH4CJNW3Y043G748CKFM55' where id=2; -update noar tt set b0='JFGNBFXQZY41RCK7EEZ3UMB5YS' where id=3; -update noar ti set b0='JFGNBFXQZY41RCK7EEZ3UMB5YS' where id=3; -update noar tt set b1='KYS6VKGUWE0O' where id=3; -update noar ti set b1='KYS6VKGUWE0O' where id=3; -update noar tt set b2='24KE6M2' where id=3; -update noar ti set b2='24KE6M2' where id=3; -update noar tt set b0='9PE715FW0LW8' where id=4; -update noar ti set b0='9PE715FW0LW8' where id=4; -update noar tt set b1='6S4QWFKRY7CQCHRTE8' where id=4; -update noar ti set b1='6S4QWFKRY7CQCHRTE8' where id=4; -update noar tt set b2='Z6HYGVQMIH8ZZRVIZCQH2517JVAM6WAF' where id=4; -update noar ti set b2='Z6HYGVQMIH8ZZRVIZCQH2517JVAM6WAF' where id=4; -update noar tt set b0='0' where id=5; -update noar ti set b0='0' where id=5; -update noar tt set b1='JM8G7EZOUK' where id=5; -update noar ti set b1='JM8G7EZOUK' where id=5; -update noar tt set b2='J2QLZXW1BS77WRCPFWDK0R7R40XWL5G' where id=5; -update noar ti set b2='J2QLZXW1BS77WRCPFWDK0R7R40XWL5G' where id=5; -update noar tt set b0='64WAV8VYYW4SJ9AXC7GAYXV66JT' where id=6; -update noar ti set b0='64WAV8VYYW4SJ9AXC7GAYXV66JT' where id=6; -update noar tt set b1='IRCO0S0B62VWHKKY4LQ' where id=6; -update noar ti set b1='IRCO0S0B62VWHKKY4LQ' where id=6; -update noar tt set b2='YE7TSIK8J3T6PPJYK5HXWORSGSH' where id=6; -update noar ti set b2='YE7TSIK8J3T6PPJYK5HXWORSGSH' where id=6; -update noar tt set b0='UQ2LESGHE' where id=7; -update noar ti set b0='UQ2LESGHE' where id=7; -update noar tt set b1='ZNQKKJGEPZX7KHW0QKJ5J3G62H' where id=7; -update noar ti set b1='ZNQKKJGEPZX7KHW0QKJ5J3G62H' where id=7; -update noar tt set b2='1U' where id=7; -update noar ti set b2='1U' where id=7; -update noar tt set b0='EGLLD3VTQG94' where id=8; -update noar ti set b0='EGLLD3VTQG94' where id=8; -update noar tt set b1='OFPKB092PQ' where id=8; -update noar ti set b1='OFPKB092PQ' where id=8; -update noar tt set b2='27FUKE1Q4N0K9VMYZNBNVN0TZ1' where id=8; -update noar ti set b2='27FUKE1Q4N0K9VMYZNBNVN0TZ1' where id=8; -update noar tt set b0='O46O' where id=9; -update noar ti set b0='O46O' where id=9; -update noar tt set b1='FCMBEMW0OFUVPO4HFG1' where id=9; -update noar ti set b1='FCMBEMW0OFUVPO4HFG1' where id=9; -update noar tt set b2='8HFH5IXT25D51NJ2' where id=9; -update noar ti set b2='8HFH5IXT25D51NJ2' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 longblob not null, - b1 longblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='LOIGPTMH2X0PVMR' where id=1; -update noar ti set b0='LOIGPTMH2X0PVMR' where id=1; -update noar tt set b1='57RGHKZE8M3OXGE' where id=1; -update noar ti set b1='57RGHKZE8M3OXGE' where id=1; -update noar tt set b2='LJHDI' where id=1; -update noar ti set b2='LJHDI' where id=1; -update noar tt set b0='9Y08OP0C3TPM0I67GKS52J9IBDWESIQ5' where id=2; -update noar ti set b0='9Y08OP0C3TPM0I67GKS52J9IBDWESIQ5' where id=2; -update noar tt set b1='63JJSAJFUBT00N5A63FV4' where id=2; -update noar ti set b1='63JJSAJFUBT00N5A63FV4' where id=2; -update noar tt set b2='TMQ47D4PZ7BKVK' where id=2; -update noar ti set b2='TMQ47D4PZ7BKVK' where id=2; -update noar tt set b0='7AFUGYCRF7ITUP9UBU9RQV' where id=3; -update noar ti set b0='7AFUGYCRF7ITUP9UBU9RQV' where id=3; -update noar tt set b1='XUTWM' where id=3; -update noar ti set b1='XUTWM' where id=3; -update noar tt set b2='EMGLMKTYRPSOI2OOULQZ' where id=3; -update noar ti set b2='EMGLMKTYRPSOI2OOULQZ' where id=3; -update noar tt set b0='0JE8HS' where id=4; -update noar ti set b0='0JE8HS' where id=4; -update noar tt set b1='YH0VA0DYH3F0A266D0TH1X5DP1W3CAT9' where id=4; -update noar ti set b1='YH0VA0DYH3F0A266D0TH1X5DP1W3CAT9' where id=4; -update noar tt set b2='6N33REG8SD4FHOS' where id=4; -update noar ti set b2='6N33REG8SD4FHOS' where id=4; -update noar tt set b0='MD4KNI3O3YPL3RPZPRVKL03' where id=5; -update noar ti set b0='MD4KNI3O3YPL3RPZPRVKL03' where id=5; -update noar tt set b1='RORK4YSJCSVRT' where id=5; -update noar ti set b1='RORK4YSJCSVRT' where id=5; -update noar tt set b2='C8ID8J2N7' where id=5; -update noar ti set b2='C8ID8J2N7' where id=5; -update noar tt set b0='ZU8F3BTWZG3P4018BBZPC' where id=6; -update noar ti set b0='ZU8F3BTWZG3P4018BBZPC' where id=6; -update noar tt set b1='0Z1FIOWA' where id=6; -update noar ti set b1='0Z1FIOWA' where id=6; -update noar tt set b2='TSGTY6PRQP4AT1HSNAO5WFB00JIQ2' where id=6; -update noar ti set b2='TSGTY6PRQP4AT1HSNAO5WFB00JIQ2' where id=6; -update noar tt set b0='N07TZK' where id=7; -update noar ti set b0='N07TZK' where id=7; -update noar tt set b1='GQ9OF7L2C' where id=7; -update noar ti set b1='GQ9OF7L2C' where id=7; -update noar tt set b2='6DZ2EY' where id=7; -update noar ti set b2='6DZ2EY' where id=7; -update noar tt set b0='T2QJSVQC4C1C6' where id=8; -update noar ti set b0='T2QJSVQC4C1C6' where id=8; -update noar tt set b1='DAO' where id=8; -update noar ti set b1='DAO' where id=8; -update noar tt set b2='OGCR9' where id=8; -update noar ti set b2='OGCR9' where id=8; -update noar tt set b0='2M' where id=9; -update noar ti set b0='2M' where id=9; -update noar tt set b1='Y4UB9DLPJVU77PS0EOENBQ5KZ' where id=9; -update noar ti set b1='Y4UB9DLPJVU77PS0EOENBQ5KZ' where id=9; -update noar tt set b2='05TWF3FI3IU6GS0VCVY5E4R9VJHT' where id=9; -update noar ti set b2='05TWF3FI3IU6GS0VCVY5E4R9VJHT' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 longblob null, - b1 longblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='TCW6EBVP9UP9QGMUS51KORF' where id=1; -update noar ti set b0='TCW6EBVP9UP9QGMUS51KORF' where id=1; -update noar tt set b1='8C3LUI4LKPTXEZLKMN55GYB' where id=1; -update noar ti set b1='8C3LUI4LKPTXEZLKMN55GYB' where id=1; -update noar tt set b2='42B6N2JQJNSCLKPA4PS3NL' where id=1; -update noar ti set b2='42B6N2JQJNSCLKPA4PS3NL' where id=1; -update noar tt set b0='QVSDA9OP9GA1497N' where id=2; -update noar ti set b0='QVSDA9OP9GA1497N' where id=2; -update noar tt set b1='O7VYDWML6GQR47VSOGLOOXYGT7NV' where id=2; -update noar ti set b1='O7VYDWML6GQR47VSOGLOOXYGT7NV' where id=2; -update noar tt set b2='HOSWBF1OKMCPINYL8ZSPFZJ' where id=2; -update noar ti set b2='HOSWBF1OKMCPINYL8ZSPFZJ' where id=2; -update noar tt set b0='Q8LK2JFAMAA1Q7GHC9VUUIZ12D' where id=3; -update noar ti set b0='Q8LK2JFAMAA1Q7GHC9VUUIZ12D' where id=3; -update noar tt set b1='I4N6RHTNI4QZELU0O194UHQ29R4O' where id=3; -update noar ti set b1='I4N6RHTNI4QZELU0O194UHQ29R4O' where id=3; -update noar tt set b2='1TPSL' where id=3; -update noar ti set b2='1TPSL' where id=3; -update noar tt set b0='OZRGLMGJUUDWXHU1TK' where id=4; -update noar ti set b0='OZRGLMGJUUDWXHU1TK' where id=4; -update noar tt set b1='MJ60Q5R2WH0MNTO1ORB230HXDL84L' where id=4; -update noar ti set b1='MJ60Q5R2WH0MNTO1ORB230HXDL84L' where id=4; -update noar tt set b2='041ND2IUG5F4RMG58N5' where id=4; -update noar ti set b2='041ND2IUG5F4RMG58N5' where id=4; -update noar tt set b0='SNZE32A' where id=5; -update noar ti set b0='SNZE32A' where id=5; -update noar tt set b1='KE66HRYN6CR' where id=5; -update noar ti set b1='KE66HRYN6CR' where id=5; -update noar tt set b2='KEZMOKYAOMVCIST330EO2PWW7' where id=5; -update noar ti set b2='KEZMOKYAOMVCIST330EO2PWW7' where id=5; -update noar tt set b0='9P2XB5CPWOZWV3GYYFI0RW0U4B63NDI8' where id=6; -update noar ti set b0='9P2XB5CPWOZWV3GYYFI0RW0U4B63NDI8' where id=6; -update noar tt set b1='KH1XS0JT' where id=6; -update noar ti set b1='KH1XS0JT' where id=6; -update noar tt set b2='USXE69YTV7FHGNQ' where id=6; -update noar ti set b2='USXE69YTV7FHGNQ' where id=6; -update noar tt set b0='DRPVW0RCXA8MDIBI' where id=7; -update noar ti set b0='DRPVW0RCXA8MDIBI' where id=7; -update noar tt set b1='8HBE24DW4SMQAR684WBOG8AOW20ZW1' where id=7; -update noar ti set b1='8HBE24DW4SMQAR684WBOG8AOW20ZW1' where id=7; -update noar tt set b2='T5Q9A00' where id=7; -update noar ti set b2='T5Q9A00' where id=7; -update noar tt set b0='AEJTADFSQO58GJ8RUWL8QF77Y679G9' where id=8; -update noar ti set b0='AEJTADFSQO58GJ8RUWL8QF77Y679G9' where id=8; -update noar tt set b1='VYCQ17FLWVL' where id=8; -update noar ti set b1='VYCQ17FLWVL' where id=8; -update noar tt set b2='ZT8NI2P9IXQW7ABNZDBG3' where id=8; -update noar ti set b2='ZT8NI2P9IXQW7ABNZDBG3' where id=8; -update noar tt set b0='YN1W59WFGNGAXBYCTPZSB' where id=9; -update noar ti set b0='YN1W59WFGNGAXBYCTPZSB' where id=9; -update noar tt set b1='K1K4E0L52QD4Z2S2XT3P0PAW0D51P5' where id=9; -update noar ti set b1='K1K4E0L52QD4Z2S2XT3P0PAW0D51P5' where id=9; -update noar tt set b2='QX0U6J6ES7HECXBYHZG221SVAQC14' where id=9; -update noar ti set b2='QX0U6J6ES7HECXBYHZG221SVAQC14' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 longblob not null, - b1 longblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='XHH8E0XSN2I4NSK8A5DVRCP' where id=1; -update noar ti set b0='XHH8E0XSN2I4NSK8A5DVRCP' where id=1; -update noar tt set b1='AZERK72OLM48' where id=1; -update noar ti set b1='AZERK72OLM48' where id=1; -update noar tt set b2='FKE252EO' where id=1; -update noar ti set b2='FKE252EO' where id=1; -update noar tt set b0='PP9EED' where id=2; -update noar ti set b0='PP9EED' where id=2; -update noar tt set b1='5R' where id=2; -update noar ti set b1='5R' where id=2; -update noar tt set b2='4I6XG7D5R37RG3LU00J80' where id=2; -update noar ti set b2='4I6XG7D5R37RG3LU00J80' where id=2; -update noar tt set b0='HY8A2JS8YGQ1X950WNQQV' where id=3; -update noar ti set b0='HY8A2JS8YGQ1X950WNQQV' where id=3; -update noar tt set b1='70MXOM7E5EFKICV4ZZ1VXRXYBXFBWV5' where id=3; -update noar ti set b1='70MXOM7E5EFKICV4ZZ1VXRXYBXFBWV5' where id=3; -update noar tt set b2='KH' where id=3; -update noar ti set b2='KH' where id=3; -update noar tt set b0='CLUWPWGVV0VQS70AZXP4L' where id=4; -update noar ti set b0='CLUWPWGVV0VQS70AZXP4L' where id=4; -update noar tt set b1='6IBA3QKDFC86' where id=4; -update noar ti set b1='6IBA3QKDFC86' where id=4; -update noar tt set b2='8RAKOD46SSM011UG402AE' where id=4; -update noar ti set b2='8RAKOD46SSM011UG402AE' where id=4; -update noar tt set b0='47OOAO3OY7F71LSYTSH8G2CD42IVVGLD' where id=5; -update noar ti set b0='47OOAO3OY7F71LSYTSH8G2CD42IVVGLD' where id=5; -update noar tt set b1='5DCEX' where id=5; -update noar ti set b1='5DCEX' where id=5; -update noar tt set b2='936' where id=5; -update noar ti set b2='936' where id=5; -update noar tt set b0='OKXI7BSNF8VFXV9071ENG9E8RPM3' where id=6; -update noar ti set b0='OKXI7BSNF8VFXV9071ENG9E8RPM3' where id=6; -update noar tt set b1='ZNVFE7YGFHV' where id=6; -update noar ti set b1='ZNVFE7YGFHV' where id=6; -update noar tt set b2='48SD6JZNU6ZCBARXSSAZ4XCAAP' where id=6; -update noar ti set b2='48SD6JZNU6ZCBARXSSAZ4XCAAP' where id=6; -update noar tt set b0='PO5Y4CKD9CEUJK3UKCSJJ' where id=7; -update noar ti set b0='PO5Y4CKD9CEUJK3UKCSJJ' where id=7; -update noar tt set b1='GTMT0N7G0SN49C86N6XE1Y5R3HBCN' where id=7; -update noar ti set b1='GTMT0N7G0SN49C86N6XE1Y5R3HBCN' where id=7; -update noar tt set b2='EXI9CZZ7HTL9YDLMJNEGUSJU6' where id=7; -update noar ti set b2='EXI9CZZ7HTL9YDLMJNEGUSJU6' where id=7; -update noar tt set b0='GT3GZU2LPMI4HKCEHZZUFGLEC0O' where id=8; -update noar ti set b0='GT3GZU2LPMI4HKCEHZZUFGLEC0O' where id=8; -update noar tt set b1='BFWH8096KEUJPQHYFIMTTYU8WEY' where id=8; -update noar ti set b1='BFWH8096KEUJPQHYFIMTTYU8WEY' where id=8; -update noar tt set b2='S' where id=8; -update noar ti set b2='S' where id=8; -update noar tt set b0='1K45W48ID7H1EDY' where id=9; -update noar ti set b0='1K45W48ID7H1EDY' where id=9; -update noar tt set b1='GYLG39VE0JBO1MB5QLWTY' where id=9; -update noar ti set b1='GYLG39VE0JBO1MB5QLWTY' where id=9; -update noar tt set b2='RC0IPBSC' where id=9; -update noar ti set b2='RC0IPBSC' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 longblob null, - b1 longblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='VH69R' where id=1; -update noar ti set b0='VH69R' where id=1; -update noar tt set b1='1' where id=1; -update noar ti set b1='1' where id=1; -update noar tt set b2='KU0KOINH1J33J' where id=1; -update noar ti set b2='KU0KOINH1J33J' where id=1; -update noar tt set b0='3J39WA7HOWMUDVO4TD5R5JAXAR' where id=2; -update noar ti set b0='3J39WA7HOWMUDVO4TD5R5JAXAR' where id=2; -update noar tt set b1='2GEGVMH7T3K' where id=2; -update noar ti set b1='2GEGVMH7T3K' where id=2; -update noar tt set b2='BHLG33DTOJTJ2I15' where id=2; -update noar ti set b2='BHLG33DTOJTJ2I15' where id=2; -update noar tt set b0='2QLPTOEITFGJJSVACZ2' where id=3; -update noar ti set b0='2QLPTOEITFGJJSVACZ2' where id=3; -update noar tt set b1='KXCDLQIKEI0YCWT' where id=3; -update noar ti set b1='KXCDLQIKEI0YCWT' where id=3; -update noar tt set b2='AOM956HPGAV178JJ4LBQJOTA' where id=3; -update noar ti set b2='AOM956HPGAV178JJ4LBQJOTA' where id=3; -update noar tt set b0='M1KU9H' where id=4; -update noar ti set b0='M1KU9H' where id=4; -update noar tt set b1='OICW0BW5CU2C' where id=4; -update noar ti set b1='OICW0BW5CU2C' where id=4; -update noar tt set b2='M' where id=4; -update noar ti set b2='M' where id=4; -update noar tt set b0='RAEZSIUWDXWC8' where id=5; -update noar ti set b0='RAEZSIUWDXWC8' where id=5; -update noar tt set b1='PKCRYIL7FQP8UOHPHCI7' where id=5; -update noar ti set b1='PKCRYIL7FQP8UOHPHCI7' where id=5; -update noar tt set b2='PM3S0ZZABNWW2SJSMJR7QRGZZW' where id=5; -update noar ti set b2='PM3S0ZZABNWW2SJSMJR7QRGZZW' where id=5; -update noar tt set b0='Q1VR6YF' where id=6; -update noar ti set b0='Q1VR6YF' where id=6; -update noar tt set b1='ZF8PIXB4QVUL' where id=6; -update noar ti set b1='ZF8PIXB4QVUL' where id=6; -update noar tt set b2='9PIY24FPU2NLO5DFR' where id=6; -update noar ti set b2='9PIY24FPU2NLO5DFR' where id=6; -update noar tt set b0='R8ELXK9S618HG1NC6KRDKRVYJCNL1I' where id=7; -update noar ti set b0='R8ELXK9S618HG1NC6KRDKRVYJCNL1I' where id=7; -update noar tt set b1='IQQRKI9KAR7FMSNYBP0T' where id=7; -update noar ti set b1='IQQRKI9KAR7FMSNYBP0T' where id=7; -update noar tt set b2='OXF525BKZ3CHRMS9HIOHY' where id=7; -update noar ti set b2='OXF525BKZ3CHRMS9HIOHY' where id=7; -update noar tt set b0='KSJGXCHACNFN7AM' where id=8; -update noar ti set b0='KSJGXCHACNFN7AM' where id=8; -update noar tt set b1='4QBJRH2QXN95JFQM4' where id=8; -update noar ti set b1='4QBJRH2QXN95JFQM4' where id=8; -update noar tt set b2='SLG1MNLMALG3T5' where id=8; -update noar ti set b2='SLG1MNLMALG3T5' where id=8; -update noar tt set b0='0SUC73T9V41OF0YYW8BKEYNGA3L' where id=9; -update noar ti set b0='0SUC73T9V41OF0YYW8BKEYNGA3L' where id=9; -update noar tt set b1='UMU77' where id=9; -update noar ti set b1='UMU77' where id=9; -update noar tt set b2='2VD77658L33TDFZ267T51S9OQ0A8' where id=9; -update noar ti set b2='2VD77658L33TDFZ267T51S9OQ0A8' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 longblob not null, - b1 longblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='RX' where id=1; -update noar ti set b0='RX' where id=1; -update noar tt set b1='7SFJKQ7NGLUF72G' where id=1; -update noar ti set b1='7SFJKQ7NGLUF72G' where id=1; -update noar tt set b2='0PS3ZQ82RIRXU3QZ2HXT7JT25' where id=1; -update noar ti set b2='0PS3ZQ82RIRXU3QZ2HXT7JT25' where id=1; -update noar tt set b0='P8IPKEVX6GG08UY4X1LR3XRPHOO1ODHH' where id=2; -update noar ti set b0='P8IPKEVX6GG08UY4X1LR3XRPHOO1ODHH' where id=2; -update noar tt set b1='XK6IA9WF7UVL7WSTM' where id=2; -update noar ti set b1='XK6IA9WF7UVL7WSTM' where id=2; -update noar tt set b2='VDIY64XOB7BLIJXFRI721NH' where id=2; -update noar ti set b2='VDIY64XOB7BLIJXFRI721NH' where id=2; -update noar tt set b0='J821WCG' where id=3; -update noar ti set b0='J821WCG' where id=3; -update noar tt set b1='80EX56MFC7IUZH92Y6JGYVH4U8' where id=3; -update noar ti set b1='80EX56MFC7IUZH92Y6JGYVH4U8' where id=3; -update noar tt set b2='XHS44SE0OG7VZ6AW6S431GUDH' where id=3; -update noar ti set b2='XHS44SE0OG7VZ6AW6S431GUDH' where id=3; -update noar tt set b0='EH3NET' where id=4; -update noar ti set b0='EH3NET' where id=4; -update noar tt set b1='TRR4VRBAHIKACQK9POT0H9SH0S1UEI4K' where id=4; -update noar ti set b1='TRR4VRBAHIKACQK9POT0H9SH0S1UEI4K' where id=4; -update noar tt set b2='PTOXLSHDOZVJ4LWT' where id=4; -update noar ti set b2='PTOXLSHDOZVJ4LWT' where id=4; -update noar tt set b0='GYZI' where id=5; -update noar ti set b0='GYZI' where id=5; -update noar tt set b1='YAEMFXIFLF4' where id=5; -update noar ti set b1='YAEMFXIFLF4' where id=5; -update noar tt set b2='ZVSIY6IF0' where id=5; -update noar ti set b2='ZVSIY6IF0' where id=5; -update noar tt set b0='IXOY98PLQ9OS9WUVBI397UQTN' where id=6; -update noar ti set b0='IXOY98PLQ9OS9WUVBI397UQTN' where id=6; -update noar tt set b1='XNSK1FW6XABO1HJGHYMRT' where id=6; -update noar ti set b1='XNSK1FW6XABO1HJGHYMRT' where id=6; -update noar tt set b2='B2HUPDHI42ICSX9KTZUD2EO4' where id=6; -update noar ti set b2='B2HUPDHI42ICSX9KTZUD2EO4' where id=6; -update noar tt set b0='1KV9NUL8DBR1699UPBH8FY8VZMKO' where id=7; -update noar ti set b0='1KV9NUL8DBR1699UPBH8FY8VZMKO' where id=7; -update noar tt set b1='7MAVLJXTDOQT5W5OW7FLCE4MC8558HGM' where id=7; -update noar ti set b1='7MAVLJXTDOQT5W5OW7FLCE4MC8558HGM' where id=7; -update noar tt set b2='7F99MF82OI64IFU37Q7DHASXMIRU' where id=7; -update noar ti set b2='7F99MF82OI64IFU37Q7DHASXMIRU' where id=7; -update noar tt set b0='OW0FE9S45ZTL5NBR7952SMGH0A5GYGNB' where id=8; -update noar ti set b0='OW0FE9S45ZTL5NBR7952SMGH0A5GYGNB' where id=8; -update noar tt set b1='KHZEVA47Y3G3EB4TTG47L890L8SVH' where id=8; -update noar ti set b1='KHZEVA47Y3G3EB4TTG47L890L8SVH' where id=8; -update noar tt set b2='3YYY52H1O9Z7TDJ63UT8' where id=8; -update noar ti set b2='3YYY52H1O9Z7TDJ63UT8' where id=8; -update noar tt set b0='KV5CBWGS2' where id=9; -update noar ti set b0='KV5CBWGS2' where id=9; -update noar tt set b1='K01P1ADJHBX9BCU2H579SUMF' where id=9; -update noar ti set b1='K01P1ADJHBX9BCU2H579SUMF' where id=9; -update noar tt set b2='ZTM617SXJQO962JQILLLJ51' where id=9; -update noar ti set b2='ZTM617SXJQO962JQILLLJ51' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 longblob null, - b1 longblob null, - b2 text null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='2WIKWBMMPT0BTDOSXDMBT0C' where id=1; -update noar ti set b0='2WIKWBMMPT0BTDOSXDMBT0C' where id=1; -update noar tt set b1='TGLJ1KJOGBEQKJP2LL' where id=1; -update noar ti set b1='TGLJ1KJOGBEQKJP2LL' where id=1; -update noar tt set b2='XKOKP4L285RBK8' where id=1; -update noar ti set b2='XKOKP4L285RBK8' where id=1; -update noar tt set b0='100MFWVG1L' where id=2; -update noar ti set b0='100MFWVG1L' where id=2; -update noar tt set b1='9XAKCPD3' where id=2; -update noar ti set b1='9XAKCPD3' where id=2; -update noar tt set b2='FUYFBZRR5TFCOHPC' where id=2; -update noar ti set b2='FUYFBZRR5TFCOHPC' where id=2; -update noar tt set b0='7I15R7YPIB8HO7OAJM5F0KL' where id=3; -update noar ti set b0='7I15R7YPIB8HO7OAJM5F0KL' where id=3; -update noar tt set b1='SU' where id=3; -update noar ti set b1='SU' where id=3; -update noar tt set b2='LP63XBPZ6R9SA6TFXL' where id=3; -update noar ti set b2='LP63XBPZ6R9SA6TFXL' where id=3; -update noar tt set b0='M70TWLABYGZ5HTH2DY4EZR' where id=4; -update noar ti set b0='M70TWLABYGZ5HTH2DY4EZR' where id=4; -update noar tt set b1='KX2I8N7TUCJRTF6E5T8TCEBY8XSE74CH' where id=4; -update noar ti set b1='KX2I8N7TUCJRTF6E5T8TCEBY8XSE74CH' where id=4; -update noar tt set b2='78Y7C6Q7IPA5X0VGSY4X5U70JSN9X8' where id=4; -update noar ti set b2='78Y7C6Q7IPA5X0VGSY4X5U70JSN9X8' where id=4; -update noar tt set b0='TRQ31J29CXMTFFQR1BRKZ4OLS3VNJ' where id=5; -update noar ti set b0='TRQ31J29CXMTFFQR1BRKZ4OLS3VNJ' where id=5; -update noar tt set b1='9KRQKLE71' where id=5; -update noar ti set b1='9KRQKLE71' where id=5; -update noar tt set b2='CW8BYP2AK41K43IGUP' where id=5; -update noar ti set b2='CW8BYP2AK41K43IGUP' where id=5; -update noar tt set b0='X3UO96CRHWBGZAY9H98S2' where id=6; -update noar ti set b0='X3UO96CRHWBGZAY9H98S2' where id=6; -update noar tt set b1='2MLWK3MDDBZ6' where id=6; -update noar ti set b1='2MLWK3MDDBZ6' where id=6; -update noar tt set b2='D7GGF1B6GJBUQK91TZZYFAWXN8ZJ' where id=6; -update noar ti set b2='D7GGF1B6GJBUQK91TZZYFAWXN8ZJ' where id=6; -update noar tt set b0='R9H5MTFZ3ZT80MCI' where id=7; -update noar ti set b0='R9H5MTFZ3ZT80MCI' where id=7; -update noar tt set b1='FXZSVI7TP' where id=7; -update noar ti set b1='FXZSVI7TP' where id=7; -update noar tt set b2='ON84ZS5BOJOYDICM' where id=7; -update noar ti set b2='ON84ZS5BOJOYDICM' where id=7; -update noar tt set b0='MDL5FYSRTB1HXSLSTW' where id=8; -update noar ti set b0='MDL5FYSRTB1HXSLSTW' where id=8; -update noar tt set b1='1HYNFP' where id=8; -update noar ti set b1='1HYNFP' where id=8; -update noar tt set b2='6FW32QWAD5QAUSHGFSAGBV3NW2Y4' where id=8; -update noar ti set b2='6FW32QWAD5QAUSHGFSAGBV3NW2Y4' where id=8; -update noar tt set b0='E9ZPTE6UYGOZN71HT7RKNRATSMG7T' where id=9; -update noar ti set b0='E9ZPTE6UYGOZN71HT7RKNRATSMG7T' where id=9; -update noar tt set b1='Z35NU7RZK9S0DIKZBDGRFH' where id=9; -update noar ti set b1='Z35NU7RZK9S0DIKZBDGRFH' where id=9; -update noar tt set b2='46GB' where id=9; -update noar ti set b2='46GB' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 longblob not null, - b1 longblob not null, - b2 text not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='BH' where id=1; -update noar ti set b0='BH' where id=1; -update noar tt set b1='XX7RVUO4SIWCIVA7DMFFN3V6U' where id=1; -update noar ti set b1='XX7RVUO4SIWCIVA7DMFFN3V6U' where id=1; -update noar tt set b2='3LKF5' where id=1; -update noar ti set b2='3LKF5' where id=1; -update noar tt set b0='C8IJZ8LM08' where id=2; -update noar ti set b0='C8IJZ8LM08' where id=2; -update noar tt set b1='XPW4AV1YV3V' where id=2; -update noar ti set b1='XPW4AV1YV3V' where id=2; -update noar tt set b2='R3M39UVD5VSPO1WHGFXC47HBJOLBE' where id=2; -update noar ti set b2='R3M39UVD5VSPO1WHGFXC47HBJOLBE' where id=2; -update noar tt set b0='MDYZ4UMN' where id=3; -update noar ti set b0='MDYZ4UMN' where id=3; -update noar tt set b1='8U4G9SL1ECWR7MQPUWVUKM64ZF' where id=3; -update noar ti set b1='8U4G9SL1ECWR7MQPUWVUKM64ZF' where id=3; -update noar tt set b2='5' where id=3; -update noar ti set b2='5' where id=3; -update noar tt set b0='1CKYP7OR7TV7WOE' where id=4; -update noar ti set b0='1CKYP7OR7TV7WOE' where id=4; -update noar tt set b1='N8S' where id=4; -update noar ti set b1='N8S' where id=4; -update noar tt set b2='Y9KNQYN1TIJ8R3MMY9' where id=4; -update noar ti set b2='Y9KNQYN1TIJ8R3MMY9' where id=4; -update noar tt set b0='2J34U29IYY78WEVDEM2MMOQJDSTA' where id=5; -update noar ti set b0='2J34U29IYY78WEVDEM2MMOQJDSTA' where id=5; -update noar tt set b1='4Y68T5KGB9AMO2RQJ4YTOZYI' where id=5; -update noar ti set b1='4Y68T5KGB9AMO2RQJ4YTOZYI' where id=5; -update noar tt set b2='QBLXNG' where id=5; -update noar ti set b2='QBLXNG' where id=5; -update noar tt set b0='OVKTJB6EMLIBSKX' where id=6; -update noar ti set b0='OVKTJB6EMLIBSKX' where id=6; -update noar tt set b1='1LU91IHNHXOIALCCKCPUTTRVB' where id=6; -update noar ti set b1='1LU91IHNHXOIALCCKCPUTTRVB' where id=6; -update noar tt set b2='1YHRCT7' where id=6; -update noar ti set b2='1YHRCT7' where id=6; -update noar tt set b0='LT2QECPJ8ZGPE23R9MDQCW9LPG51DYN' where id=7; -update noar ti set b0='LT2QECPJ8ZGPE23R9MDQCW9LPG51DYN' where id=7; -update noar tt set b1='2XH2JJL3' where id=7; -update noar ti set b1='2XH2JJL3' where id=7; -update noar tt set b2='FY6D293RBNTB3SXH5Z7KW' where id=7; -update noar ti set b2='FY6D293RBNTB3SXH5Z7KW' where id=7; -update noar tt set b0='C7QF' where id=8; -update noar ti set b0='C7QF' where id=8; -update noar tt set b1='XAW65IM9JAAZ6V86R0F223WOO' where id=8; -update noar ti set b1='XAW65IM9JAAZ6V86R0F223WOO' where id=8; -update noar tt set b2='KV5OJN4B' where id=8; -update noar ti set b2='KV5OJN4B' where id=8; -update noar tt set b0='JAHB8FQT2D36DV4UX' where id=9; -update noar ti set b0='JAHB8FQT2D36DV4UX' where id=9; -update noar tt set b1='4PPNZJ' where id=9; -update noar ti set b1='4PPNZJ' where id=9; -update noar tt set b2='PPGI736QC17GGCA' where id=9; -update noar ti set b2='PPGI736QC17GGCA' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 longblob null, - b1 text null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='3YRR7GNBKJZOIQLADTO' where id=1; -update noar ti set b0='3YRR7GNBKJZOIQLADTO' where id=1; -update noar tt set b1='3E' where id=1; -update noar ti set b1='3E' where id=1; -update noar tt set b2='ELLO9IKPCOX11HV64LS5RVLQ40H8FG' where id=1; -update noar ti set b2='ELLO9IKPCOX11HV64LS5RVLQ40H8FG' where id=1; -update noar tt set b0='9W0E' where id=2; -update noar ti set b0='9W0E' where id=2; -update noar tt set b1='C07K9E2R61X7P' where id=2; -update noar ti set b1='C07K9E2R61X7P' where id=2; -update noar tt set b2='0IHZU2DFEP0ZK8DZMYXYN4H' where id=2; -update noar ti set b2='0IHZU2DFEP0ZK8DZMYXYN4H' where id=2; -update noar tt set b0='EVVN8BOWTNO4' where id=3; -update noar ti set b0='EVVN8BOWTNO4' where id=3; -update noar tt set b1='5UA3' where id=3; -update noar ti set b1='5UA3' where id=3; -update noar tt set b2='BQNR3PGGO' where id=3; -update noar ti set b2='BQNR3PGGO' where id=3; -update noar tt set b0='6WYQXCORSR8IDTF4M83P12073P' where id=4; -update noar ti set b0='6WYQXCORSR8IDTF4M83P12073P' where id=4; -update noar tt set b1='0F0F7E' where id=4; -update noar ti set b1='0F0F7E' where id=4; -update noar tt set b2='8MUPWP77CNI74YHCRTTBG0OQL7' where id=4; -update noar ti set b2='8MUPWP77CNI74YHCRTTBG0OQL7' where id=4; -update noar tt set b0='8J' where id=5; -update noar ti set b0='8J' where id=5; -update noar tt set b1='T1XJR0DQTPH' where id=5; -update noar ti set b1='T1XJR0DQTPH' where id=5; -update noar tt set b2='RTXMS51KBXM7TLOWDO34V7C3SYM' where id=5; -update noar ti set b2='RTXMS51KBXM7TLOWDO34V7C3SYM' where id=5; -update noar tt set b0='64ENRG818K' where id=6; -update noar ti set b0='64ENRG818K' where id=6; -update noar tt set b1='V359EERFLGTGF86GU' where id=6; -update noar ti set b1='V359EERFLGTGF86GU' where id=6; -update noar tt set b2='OKEWJ5HPG82BW9Q' where id=6; -update noar ti set b2='OKEWJ5HPG82BW9Q' where id=6; -update noar tt set b0='B2T0Z4F2MQ4' where id=7; -update noar ti set b0='B2T0Z4F2MQ4' where id=7; -update noar tt set b1='EE' where id=7; -update noar ti set b1='EE' where id=7; -update noar tt set b2='LHBI3' where id=7; -update noar ti set b2='LHBI3' where id=7; -update noar tt set b0='O3O' where id=8; -update noar ti set b0='O3O' where id=8; -update noar tt set b1='WRQMGL0UL1QC' where id=8; -update noar ti set b1='WRQMGL0UL1QC' where id=8; -update noar tt set b2='ITBDHX2' where id=8; -update noar ti set b2='ITBDHX2' where id=8; -update noar tt set b0='FJQD1PUN9UNRPTY4O6RBAF6' where id=9; -update noar ti set b0='FJQD1PUN9UNRPTY4O6RBAF6' where id=9; -update noar tt set b1='U72IE' where id=9; -update noar ti set b1='U72IE' where id=9; -update noar tt set b2='MHW3V5H4RX7BK1KHXD8FHR3C9SK4Y84' where id=9; -update noar ti set b2='MHW3V5H4RX7BK1KHXD8FHR3C9SK4Y84' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 longblob not null, - b1 text not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='UGA5RP5GQVX6K5C3SK' where id=1; -update noar ti set b0='UGA5RP5GQVX6K5C3SK' where id=1; -update noar tt set b1='Q037HZVZMPDHWOD30D7JSKJ17KRIHWEG' where id=1; -update noar ti set b1='Q037HZVZMPDHWOD30D7JSKJ17KRIHWEG' where id=1; -update noar tt set b2='J' where id=1; -update noar ti set b2='J' where id=1; -update noar tt set b0='BH5Z6SC5AK87FK0' where id=2; -update noar ti set b0='BH5Z6SC5AK87FK0' where id=2; -update noar tt set b1='H7W3NNOGOSOXO' where id=2; -update noar ti set b1='H7W3NNOGOSOXO' where id=2; -update noar tt set b2='MPYY2' where id=2; -update noar ti set b2='MPYY2' where id=2; -update noar tt set b0='PYF0UJLUISPVI' where id=3; -update noar ti set b0='PYF0UJLUISPVI' where id=3; -update noar tt set b1='QTRQYD3JWZQGETKDFZE3MZIG9N0PH' where id=3; -update noar ti set b1='QTRQYD3JWZQGETKDFZE3MZIG9N0PH' where id=3; -update noar tt set b2='2NNT7DJT6R4KHXDXO6KY1723QATECD' where id=3; -update noar ti set b2='2NNT7DJT6R4KHXDXO6KY1723QATECD' where id=3; -update noar tt set b0='V3' where id=4; -update noar ti set b0='V3' where id=4; -update noar tt set b1='AHASUQ1OXD1GCV6X1Y915FT' where id=4; -update noar ti set b1='AHASUQ1OXD1GCV6X1Y915FT' where id=4; -update noar tt set b2='MGJMYRBTVQJ34CBBL9GJ8GEP07349' where id=4; -update noar ti set b2='MGJMYRBTVQJ34CBBL9GJ8GEP07349' where id=4; -update noar tt set b0='2Q5SVI4IRZAM2TISEABH0UG99O15' where id=5; -update noar ti set b0='2Q5SVI4IRZAM2TISEABH0UG99O15' where id=5; -update noar tt set b1='0RDD50BFQQRDJXD6R' where id=5; -update noar ti set b1='0RDD50BFQQRDJXD6R' where id=5; -update noar tt set b2='S13IBYF6UWKOOGF' where id=5; -update noar ti set b2='S13IBYF6UWKOOGF' where id=5; -update noar tt set b0='A73KY6' where id=6; -update noar ti set b0='A73KY6' where id=6; -update noar tt set b1='KQA5MY6GWPGUVBITQ0QOMNIJK' where id=6; -update noar ti set b1='KQA5MY6GWPGUVBITQ0QOMNIJK' where id=6; -update noar tt set b2='F8JSSGO75DT3FUP8CRBMB6U9SI7AF9' where id=6; -update noar ti set b2='F8JSSGO75DT3FUP8CRBMB6U9SI7AF9' where id=6; -update noar tt set b0='ODHO2TOU5E2' where id=7; -update noar ti set b0='ODHO2TOU5E2' where id=7; -update noar tt set b1='1C49DCZSASYUAFWVQHV0' where id=7; -update noar ti set b1='1C49DCZSASYUAFWVQHV0' where id=7; -update noar tt set b2='EKT76EMAVIM' where id=7; -update noar ti set b2='EKT76EMAVIM' where id=7; -update noar tt set b0='MV1I9WNI2RN3SU5J' where id=8; -update noar ti set b0='MV1I9WNI2RN3SU5J' where id=8; -update noar tt set b1='ZB0BIWVWKPY' where id=8; -update noar ti set b1='ZB0BIWVWKPY' where id=8; -update noar tt set b2='R2A7L5SCDKUBFRXVFZ078XI4F0Q' where id=8; -update noar ti set b2='R2A7L5SCDKUBFRXVFZ078XI4F0Q' where id=8; -update noar tt set b0='EDROEI5PKGT0' where id=9; -update noar ti set b0='EDROEI5PKGT0' where id=9; -update noar tt set b1='68Z9IRV04BRXGYK' where id=9; -update noar ti set b1='68Z9IRV04BRXGYK' where id=9; -update noar tt set b2='CUY50A2L5LSZUG3E4410X43Z62VQ' where id=9; -update noar ti set b2='CUY50A2L5LSZUG3E4410X43Z62VQ' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 longblob null, - b1 text null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='J6FCD74UVB5' where id=1; -update noar ti set b0='J6FCD74UVB5' where id=1; -update noar tt set b1='H5WHS10JQM60O9' where id=1; -update noar ti set b1='H5WHS10JQM60O9' where id=1; -update noar tt set b2='9686UOK9UONR7398POIO4JL4J7FHVG0C' where id=1; -update noar ti set b2='9686UOK9UONR7398POIO4JL4J7FHVG0C' where id=1; -update noar tt set b0='ZUIYRD' where id=2; -update noar ti set b0='ZUIYRD' where id=2; -update noar tt set b1='L2SB3MFF01' where id=2; -update noar ti set b1='L2SB3MFF01' where id=2; -update noar tt set b2='7FT9HU6PL82VRXXO1YX5SVWEL3OWF7R' where id=2; -update noar ti set b2='7FT9HU6PL82VRXXO1YX5SVWEL3OWF7R' where id=2; -update noar tt set b0='EKT64H605JFTJEE' where id=3; -update noar ti set b0='EKT64H605JFTJEE' where id=3; -update noar tt set b1='FKY5TXTC5ZQ7JLRWFKOA862IV92HR' where id=3; -update noar ti set b1='FKY5TXTC5ZQ7JLRWFKOA862IV92HR' where id=3; -update noar tt set b2='1JUNHV1O1DHI56M' where id=3; -update noar ti set b2='1JUNHV1O1DHI56M' where id=3; -update noar tt set b0='E48CPX4JO' where id=4; -update noar ti set b0='E48CPX4JO' where id=4; -update noar tt set b1='1J264W' where id=4; -update noar ti set b1='1J264W' where id=4; -update noar tt set b2='SOP6F9TFH9371RJAL7XEQLWUHC' where id=4; -update noar ti set b2='SOP6F9TFH9371RJAL7XEQLWUHC' where id=4; -update noar tt set b0='DMDLFB85GFGXYO56FFFQQ' where id=5; -update noar ti set b0='DMDLFB85GFGXYO56FFFQQ' where id=5; -update noar tt set b1='PTQK6PEZ250WEAXPQR6M2O' where id=5; -update noar ti set b1='PTQK6PEZ250WEAXPQR6M2O' where id=5; -update noar tt set b2='QJ9J7' where id=5; -update noar ti set b2='QJ9J7' where id=5; -update noar tt set b0='1N' where id=6; -update noar ti set b0='1N' where id=6; -update noar tt set b1='ZRDECDH' where id=6; -update noar ti set b1='ZRDECDH' where id=6; -update noar tt set b2='FP0KL0ON9BM273YWP' where id=6; -update noar ti set b2='FP0KL0ON9BM273YWP' where id=6; -update noar tt set b0='LZP10T28A8R' where id=7; -update noar ti set b0='LZP10T28A8R' where id=7; -update noar tt set b1='XH3LBXFYZMBB' where id=7; -update noar ti set b1='XH3LBXFYZMBB' where id=7; -update noar tt set b2='KZB8' where id=7; -update noar ti set b2='KZB8' where id=7; -update noar tt set b0='SLO162JR7QM8P5VAPNZQY4M3IAXXXGS' where id=8; -update noar ti set b0='SLO162JR7QM8P5VAPNZQY4M3IAXXXGS' where id=8; -update noar tt set b1='7HKRTCHTFMHN' where id=8; -update noar ti set b1='7HKRTCHTFMHN' where id=8; -update noar tt set b2='LRWG6FPRCJJI0XYD' where id=8; -update noar ti set b2='LRWG6FPRCJJI0XYD' where id=8; -update noar tt set b0='TMC2R9T9J' where id=9; -update noar ti set b0='TMC2R9T9J' where id=9; -update noar tt set b1='CK38ZD95JWM' where id=9; -update noar ti set b1='CK38ZD95JWM' where id=9; -update noar tt set b2='8JCWBVUMYZDFA' where id=9; -update noar ti set b2='8JCWBVUMYZDFA' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 longblob not null, - b1 text not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='W5H0A7QOV7Z4GRUSWPB4C4' where id=1; -update noar ti set b0='W5H0A7QOV7Z4GRUSWPB4C4' where id=1; -update noar tt set b1='QWM' where id=1; -update noar ti set b1='QWM' where id=1; -update noar tt set b2='LPJ' where id=1; -update noar ti set b2='LPJ' where id=1; -update noar tt set b0='51FZQGI1HE76MSJFSB67K9BR' where id=2; -update noar ti set b0='51FZQGI1HE76MSJFSB67K9BR' where id=2; -update noar tt set b1='WP7VCQL3K7FXY78ZX5JZ7FT8I36G' where id=2; -update noar ti set b1='WP7VCQL3K7FXY78ZX5JZ7FT8I36G' where id=2; -update noar tt set b2='P6GIVWFKV4GOJH01UIJK' where id=2; -update noar ti set b2='P6GIVWFKV4GOJH01UIJK' where id=2; -update noar tt set b0='NPZSZOA2CFE1MFMEO9UIFY4RKW21I3' where id=3; -update noar ti set b0='NPZSZOA2CFE1MFMEO9UIFY4RKW21I3' where id=3; -update noar tt set b1='2CHULP14F0' where id=3; -update noar ti set b1='2CHULP14F0' where id=3; -update noar tt set b2='2VN4' where id=3; -update noar ti set b2='2VN4' where id=3; -update noar tt set b0='B346T0F3GH7HUGVSXP8E2KWYY7PX48WH' where id=4; -update noar ti set b0='B346T0F3GH7HUGVSXP8E2KWYY7PX48WH' where id=4; -update noar tt set b1='QMH04RIB0L1B' where id=4; -update noar ti set b1='QMH04RIB0L1B' where id=4; -update noar tt set b2='JU9MQ' where id=4; -update noar ti set b2='JU9MQ' where id=4; -update noar tt set b0='KOY2CD' where id=5; -update noar ti set b0='KOY2CD' where id=5; -update noar tt set b1='NF' where id=5; -update noar ti set b1='NF' where id=5; -update noar tt set b2='FA0RSJUT1S9I04N7WR58BVUOW4B3Q' where id=5; -update noar ti set b2='FA0RSJUT1S9I04N7WR58BVUOW4B3Q' where id=5; -update noar tt set b0='QZVQ' where id=6; -update noar ti set b0='QZVQ' where id=6; -update noar tt set b1='QWCIK63XQRC9LUPBGGQ058BV10' where id=6; -update noar ti set b1='QWCIK63XQRC9LUPBGGQ058BV10' where id=6; -update noar tt set b2='5QD9IKRLULQ' where id=6; -update noar ti set b2='5QD9IKRLULQ' where id=6; -update noar tt set b0='IVVMK5K6GU1' where id=7; -update noar ti set b0='IVVMK5K6GU1' where id=7; -update noar tt set b1='OR8KI32IW987HBEH4YTP' where id=7; -update noar ti set b1='OR8KI32IW987HBEH4YTP' where id=7; -update noar tt set b2='LX10XK7NIIPZFM1MU9G3BSCTB61988P' where id=7; -update noar ti set b2='LX10XK7NIIPZFM1MU9G3BSCTB61988P' where id=7; -update noar tt set b0='QP83DRFFB1B9SPU68JC' where id=8; -update noar ti set b0='QP83DRFFB1B9SPU68JC' where id=8; -update noar tt set b1='C6VSDYJ7A3928BYS' where id=8; -update noar ti set b1='C6VSDYJ7A3928BYS' where id=8; -update noar tt set b2='Y6A4' where id=8; -update noar ti set b2='Y6A4' where id=8; -update noar tt set b0='R1IEXEDHKURI5PIGU1QI319S' where id=9; -update noar ti set b0='R1IEXEDHKURI5PIGU1QI319S' where id=9; -update noar tt set b1='DYOXZHN4WEJTGQY5Z0K56WX1UNN4O' where id=9; -update noar ti set b1='DYOXZHN4WEJTGQY5Z0K56WX1UNN4O' where id=9; -update noar tt set b2='9SIJVBSVNZ2DPPITJAOL7NZI' where id=9; -update noar ti set b2='9SIJVBSVNZ2DPPITJAOL7NZI' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 longblob null, - b1 text null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='SD8LNOMFZJMJIN7A76Q6C2' where id=1; -update noar ti set b0='SD8LNOMFZJMJIN7A76Q6C2' where id=1; -update noar tt set b1='7CG' where id=1; -update noar ti set b1='7CG' where id=1; -update noar tt set b2='EJ1XQC1QEVLKCNWFAT4XY90HTW' where id=1; -update noar ti set b2='EJ1XQC1QEVLKCNWFAT4XY90HTW' where id=1; -update noar tt set b0='1R1TWOIZ48RSM6L1LX5XAGB4X' where id=2; -update noar ti set b0='1R1TWOIZ48RSM6L1LX5XAGB4X' where id=2; -update noar tt set b1='XVSF67DEFB3O2FA20USQTI6BEBSZI8' where id=2; -update noar ti set b1='XVSF67DEFB3O2FA20USQTI6BEBSZI8' where id=2; -update noar tt set b2='YZ9TSCBHD904R07GM' where id=2; -update noar ti set b2='YZ9TSCBHD904R07GM' where id=2; -update noar tt set b0='KSOIIEM36HWG4OC5VRNBWPV6PXHBIM5H' where id=3; -update noar ti set b0='KSOIIEM36HWG4OC5VRNBWPV6PXHBIM5H' where id=3; -update noar tt set b1='A8N01RR1WCSU1SS2I8VHNG3E7' where id=3; -update noar ti set b1='A8N01RR1WCSU1SS2I8VHNG3E7' where id=3; -update noar tt set b2='W8FZZ0N50CZ573683OC77B' where id=3; -update noar ti set b2='W8FZZ0N50CZ573683OC77B' where id=3; -update noar tt set b0='JIVJMP5E6SE9SQR8ABXH9AIHPJ3UBST4' where id=4; -update noar ti set b0='JIVJMP5E6SE9SQR8ABXH9AIHPJ3UBST4' where id=4; -update noar tt set b1='4TDI0M9YG3MTI51JYRL5A0Y43B30' where id=4; -update noar ti set b1='4TDI0M9YG3MTI51JYRL5A0Y43B30' where id=4; -update noar tt set b2='RTD' where id=4; -update noar ti set b2='RTD' where id=4; -update noar tt set b0='O' where id=5; -update noar ti set b0='O' where id=5; -update noar tt set b1='GZIHJPGN9B' where id=5; -update noar ti set b1='GZIHJPGN9B' where id=5; -update noar tt set b2='5MD2VBPM' where id=5; -update noar ti set b2='5MD2VBPM' where id=5; -update noar tt set b0='KKVFF6E27078NKO2MA4' where id=6; -update noar ti set b0='KKVFF6E27078NKO2MA4' where id=6; -update noar tt set b1='PMWX4ZHPF5GB4WNB1OPT5DROV' where id=6; -update noar ti set b1='PMWX4ZHPF5GB4WNB1OPT5DROV' where id=6; -update noar tt set b2='A' where id=6; -update noar ti set b2='A' where id=6; -update noar tt set b0='X' where id=7; -update noar ti set b0='X' where id=7; -update noar tt set b1='GG24EDPR' where id=7; -update noar ti set b1='GG24EDPR' where id=7; -update noar tt set b2='NN437ZTIVTN' where id=7; -update noar ti set b2='NN437ZTIVTN' where id=7; -update noar tt set b0='K876776IE07' where id=8; -update noar ti set b0='K876776IE07' where id=8; -update noar tt set b1='4TA2MKQ5CJIY6LB4A0U7DRWJK5T6' where id=8; -update noar ti set b1='4TA2MKQ5CJIY6LB4A0U7DRWJK5T6' where id=8; -update noar tt set b2='SUC7B4NVT36O96SX' where id=8; -update noar ti set b2='SUC7B4NVT36O96SX' where id=8; -update noar tt set b0='KVN53LB8RRYZUUR' where id=9; -update noar ti set b0='KVN53LB8RRYZUUR' where id=9; -update noar tt set b1='7QFOZ7' where id=9; -update noar ti set b1='7QFOZ7' where id=9; -update noar tt set b2='KIKSK89TRP93IRB7QBYUO4JP7X518Z' where id=9; -update noar ti set b2='KIKSK89TRP93IRB7QBYUO4JP7X518Z' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 longblob not null, - b1 text not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='J836QLFGB91' where id=1; -update noar ti set b0='J836QLFGB91' where id=1; -update noar tt set b1='DVE18VX1C3YUYUHM4LHGZ9F57UHFT' where id=1; -update noar ti set b1='DVE18VX1C3YUYUHM4LHGZ9F57UHFT' where id=1; -update noar tt set b2='2HOCJ' where id=1; -update noar ti set b2='2HOCJ' where id=1; -update noar tt set b0='RWE7U2ZOVVLUUCH94BHPZQJC' where id=2; -update noar ti set b0='RWE7U2ZOVVLUUCH94BHPZQJC' where id=2; -update noar tt set b1='47FHIZ02XZXPDIJ25PQAJQ67QTT40K' where id=2; -update noar ti set b1='47FHIZ02XZXPDIJ25PQAJQ67QTT40K' where id=2; -update noar tt set b2='B0C4I' where id=2; -update noar ti set b2='B0C4I' where id=2; -update noar tt set b0='B04J7EPS19Y9JXYVZCBSB49L6SO6WTB6' where id=3; -update noar ti set b0='B04J7EPS19Y9JXYVZCBSB49L6SO6WTB6' where id=3; -update noar tt set b1='5ZBZ' where id=3; -update noar ti set b1='5ZBZ' where id=3; -update noar tt set b2='A8UH8AMVZFSYEILYY4NAOID14OUBBR' where id=3; -update noar ti set b2='A8UH8AMVZFSYEILYY4NAOID14OUBBR' where id=3; -update noar tt set b0='QF4N6K' where id=4; -update noar ti set b0='QF4N6K' where id=4; -update noar tt set b1='7JR0SLTGZY8JD2I' where id=4; -update noar ti set b1='7JR0SLTGZY8JD2I' where id=4; -update noar tt set b2='6AR' where id=4; -update noar ti set b2='6AR' where id=4; -update noar tt set b0='NL3RV98YUI46IJZMW33VCHA' where id=5; -update noar ti set b0='NL3RV98YUI46IJZMW33VCHA' where id=5; -update noar tt set b1='E9ZBPZ988HVR' where id=5; -update noar ti set b1='E9ZBPZ988HVR' where id=5; -update noar tt set b2='5JAIYR4H9R49JX3QU' where id=5; -update noar ti set b2='5JAIYR4H9R49JX3QU' where id=5; -update noar tt set b0='DX5XM' where id=6; -update noar ti set b0='DX5XM' where id=6; -update noar tt set b1='M430F56IMR' where id=6; -update noar ti set b1='M430F56IMR' where id=6; -update noar tt set b2='MTYQ51J8NKRRX2' where id=6; -update noar ti set b2='MTYQ51J8NKRRX2' where id=6; -update noar tt set b0='1VZ8NRAO3O72AL8EDUVFHROS94' where id=7; -update noar ti set b0='1VZ8NRAO3O72AL8EDUVFHROS94' where id=7; -update noar tt set b1='X5ORGUCXSLQTO' where id=7; -update noar ti set b1='X5ORGUCXSLQTO' where id=7; -update noar tt set b2='YIXNY' where id=7; -update noar ti set b2='YIXNY' where id=7; -update noar tt set b0='B1OGLBDU3BWA7DBFGMZ4OCB' where id=8; -update noar ti set b0='B1OGLBDU3BWA7DBFGMZ4OCB' where id=8; -update noar tt set b1='Q6DKOT844' where id=8; -update noar ti set b1='Q6DKOT844' where id=8; -update noar tt set b2='0ML0O877PF4D3H0PG1MIX6S' where id=8; -update noar ti set b2='0ML0O877PF4D3H0PG1MIX6S' where id=8; -update noar tt set b0='IW6GNF0DLNK5G5IUHLXJXD52OK' where id=9; -update noar ti set b0='IW6GNF0DLNK5G5IUHLXJXD52OK' where id=9; -update noar tt set b1='N8HRAHAHZX5SKMEVJI3TY6WKP78' where id=9; -update noar ti set b1='N8HRAHAHZX5SKMEVJI3TY6WKP78' where id=9; -update noar tt set b2='LDT2L5CSYWBJSK6' where id=9; -update noar ti set b2='LDT2L5CSYWBJSK6' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 longblob null, - b1 text null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='VHUPQMV3EEHHVAFA3AFTTID59CUOERXJ' where id=1; -update noar ti set b0='VHUPQMV3EEHHVAFA3AFTTID59CUOERXJ' where id=1; -update noar tt set b1='K991DO78VPO7SZSCVCFY8P1CGSL' where id=1; -update noar ti set b1='K991DO78VPO7SZSCVCFY8P1CGSL' where id=1; -update noar tt set b2='W5' where id=1; -update noar ti set b2='W5' where id=1; -update noar tt set b0='97WVCGVLTCIGYR' where id=2; -update noar ti set b0='97WVCGVLTCIGYR' where id=2; -update noar tt set b1='S5G' where id=2; -update noar ti set b1='S5G' where id=2; -update noar tt set b2='K1ESXBK3S19ZC2' where id=2; -update noar ti set b2='K1ESXBK3S19ZC2' where id=2; -update noar tt set b0='8V5GOVFP0VMSTBZFIYL3JYPBIPFKUM4P' where id=3; -update noar ti set b0='8V5GOVFP0VMSTBZFIYL3JYPBIPFKUM4P' where id=3; -update noar tt set b1='5J6YE826HEGAJNBER86T6Y3LZDVWZ4Z' where id=3; -update noar ti set b1='5J6YE826HEGAJNBER86T6Y3LZDVWZ4Z' where id=3; -update noar tt set b2='5MNX2IZ' where id=3; -update noar ti set b2='5MNX2IZ' where id=3; -update noar tt set b0='PLZB7' where id=4; -update noar ti set b0='PLZB7' where id=4; -update noar tt set b1='GVP7YDHSWIKB3P81P54M5TCDY0Z' where id=4; -update noar ti set b1='GVP7YDHSWIKB3P81P54M5TCDY0Z' where id=4; -update noar tt set b2='MIFCZ5FSG29F6A92V' where id=4; -update noar ti set b2='MIFCZ5FSG29F6A92V' where id=4; -update noar tt set b0='T4Z6JRZ8A528NLII5I' where id=5; -update noar ti set b0='T4Z6JRZ8A528NLII5I' where id=5; -update noar tt set b1='XA71' where id=5; -update noar ti set b1='XA71' where id=5; -update noar tt set b2='5CO1SE0TV4F0SCVSD' where id=5; -update noar ti set b2='5CO1SE0TV4F0SCVSD' where id=5; -update noar tt set b0='YKTEE7GXJLN9PB' where id=6; -update noar ti set b0='YKTEE7GXJLN9PB' where id=6; -update noar tt set b1='BZPJSGBLX732JERF3UJ2Z2FN' where id=6; -update noar ti set b1='BZPJSGBLX732JERF3UJ2Z2FN' where id=6; -update noar tt set b2='CVCVEAA4' where id=6; -update noar ti set b2='CVCVEAA4' where id=6; -update noar tt set b0='TOJL6M1VYI1' where id=7; -update noar ti set b0='TOJL6M1VYI1' where id=7; -update noar tt set b1='HRW0SQCE4CQE7U' where id=7; -update noar ti set b1='HRW0SQCE4CQE7U' where id=7; -update noar tt set b2='8VW59GFHIVBILH29LNDQ28KMYFXQU193' where id=7; -update noar ti set b2='8VW59GFHIVBILH29LNDQ28KMYFXQU193' where id=7; -update noar tt set b0='TM93JZRXAAWWG7HZY' where id=8; -update noar ti set b0='TM93JZRXAAWWG7HZY' where id=8; -update noar tt set b1='A69J5XKEIFLLT33RW7P8' where id=8; -update noar ti set b1='A69J5XKEIFLLT33RW7P8' where id=8; -update noar tt set b2='LPJTU0ZY5SX70NSM3I26NQSWRS' where id=8; -update noar ti set b2='LPJTU0ZY5SX70NSM3I26NQSWRS' where id=8; -update noar tt set b0='W65TICZSD1YDI' where id=9; -update noar ti set b0='W65TICZSD1YDI' where id=9; -update noar tt set b1='QIXKROMIO9P' where id=9; -update noar ti set b1='QIXKROMIO9P' where id=9; -update noar tt set b2='Y2' where id=9; -update noar ti set b2='Y2' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 longblob not null, - b1 text not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='IXLQ' where id=1; -update noar ti set b0='IXLQ' where id=1; -update noar tt set b1='0GV8ET59V74TSL6UAKVQK7IA' where id=1; -update noar ti set b1='0GV8ET59V74TSL6UAKVQK7IA' where id=1; -update noar tt set b2='J5LLXL9C0Z' where id=1; -update noar ti set b2='J5LLXL9C0Z' where id=1; -update noar tt set b0='GN1' where id=2; -update noar ti set b0='GN1' where id=2; -update noar tt set b1='GCEHA6AQ8BC7ZJVBSH5TN0YBB' where id=2; -update noar ti set b1='GCEHA6AQ8BC7ZJVBSH5TN0YBB' where id=2; -update noar tt set b2='RRUM0MZ3F6UIBCGYY1ZRB6' where id=2; -update noar ti set b2='RRUM0MZ3F6UIBCGYY1ZRB6' where id=2; -update noar tt set b0='CHTLDYNLKO070GRYHN5AO' where id=3; -update noar ti set b0='CHTLDYNLKO070GRYHN5AO' where id=3; -update noar tt set b1='T6R74' where id=3; -update noar ti set b1='T6R74' where id=3; -update noar tt set b2='02QEW3K4JAZBMDPI3U34ITG' where id=3; -update noar ti set b2='02QEW3K4JAZBMDPI3U34ITG' where id=3; -update noar tt set b0='F86MITJKWEBY571S4' where id=4; -update noar ti set b0='F86MITJKWEBY571S4' where id=4; -update noar tt set b1='WCMSVXB2KATELVUDFXNR4B1CLLOTV' where id=4; -update noar ti set b1='WCMSVXB2KATELVUDFXNR4B1CLLOTV' where id=4; -update noar tt set b2='PWC' where id=4; -update noar ti set b2='PWC' where id=4; -update noar tt set b0='WPIL3JE320Z' where id=5; -update noar ti set b0='WPIL3JE320Z' where id=5; -update noar tt set b1='DNNVGHQWIHL2VB' where id=5; -update noar ti set b1='DNNVGHQWIHL2VB' where id=5; -update noar tt set b2='1Y1Z' where id=5; -update noar ti set b2='1Y1Z' where id=5; -update noar tt set b0='8I14EXD02CS' where id=6; -update noar ti set b0='8I14EXD02CS' where id=6; -update noar tt set b1='OPCV6ODUMXJ4' where id=6; -update noar ti set b1='OPCV6ODUMXJ4' where id=6; -update noar tt set b2='HTG0EQPAKHZ13DXTGLTXU7OW601PES' where id=6; -update noar ti set b2='HTG0EQPAKHZ13DXTGLTXU7OW601PES' where id=6; -update noar tt set b0='DPBY7XPODUL' where id=7; -update noar ti set b0='DPBY7XPODUL' where id=7; -update noar tt set b1='Y' where id=7; -update noar ti set b1='Y' where id=7; -update noar tt set b2='LJWJWLS3BRN' where id=7; -update noar ti set b2='LJWJWLS3BRN' where id=7; -update noar tt set b0='YKRGG60SV7370054Z10FO' where id=8; -update noar ti set b0='YKRGG60SV7370054Z10FO' where id=8; -update noar tt set b1='TUCXJJOP1ZZXTC9S1IOT3H' where id=8; -update noar ti set b1='TUCXJJOP1ZZXTC9S1IOT3H' where id=8; -update noar tt set b2='UQ7N2WEJFIOS3FDP9' where id=8; -update noar ti set b2='UQ7N2WEJFIOS3FDP9' where id=8; -update noar tt set b0='E40AN7BDA3PITTUSCD9ZZMMMKD9K' where id=9; -update noar ti set b0='E40AN7BDA3PITTUSCD9ZZMMMKD9K' where id=9; -update noar tt set b1='I93Z1FXE2HHMHCP8524DH1LV' where id=9; -update noar ti set b1='I93Z1FXE2HHMHCP8524DH1LV' where id=9; -update noar tt set b2='F8GN2' where id=9; -update noar ti set b2='F8GN2' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 longblob null, - b1 text null, - b2 text null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='W725N51H71T565X5T9X1' where id=1; -update noar ti set b0='W725N51H71T565X5T9X1' where id=1; -update noar tt set b1='HUELY9ZD20MVBVDI' where id=1; -update noar ti set b1='HUELY9ZD20MVBVDI' where id=1; -update noar tt set b2='GRL5E7IA5W12INXDIK0ZQ2Z5V6J1' where id=1; -update noar ti set b2='GRL5E7IA5W12INXDIK0ZQ2Z5V6J1' where id=1; -update noar tt set b0='OW' where id=2; -update noar ti set b0='OW' where id=2; -update noar tt set b1='N3O0NU0EPNA60BYWWC1Y97TV' where id=2; -update noar ti set b1='N3O0NU0EPNA60BYWWC1Y97TV' where id=2; -update noar tt set b2='P' where id=2; -update noar ti set b2='P' where id=2; -update noar tt set b0='ZQPCWFYWD9W' where id=3; -update noar ti set b0='ZQPCWFYWD9W' where id=3; -update noar tt set b1='MFWBI8N0QN14D4B94UMMNT6RW4BWXA' where id=3; -update noar ti set b1='MFWBI8N0QN14D4B94UMMNT6RW4BWXA' where id=3; -update noar tt set b2='YBX3QB40G25OSXCJ1K4FD297Z0L' where id=3; -update noar ti set b2='YBX3QB40G25OSXCJ1K4FD297Z0L' where id=3; -update noar tt set b0='KMR7G47F42Y' where id=4; -update noar ti set b0='KMR7G47F42Y' where id=4; -update noar tt set b1='U291AF6KA' where id=4; -update noar ti set b1='U291AF6KA' where id=4; -update noar tt set b2='UZIA1WNZ7QT4' where id=4; -update noar ti set b2='UZIA1WNZ7QT4' where id=4; -update noar tt set b0='NQ6DWZO45XCVWZIU6KNJM' where id=5; -update noar ti set b0='NQ6DWZO45XCVWZIU6KNJM' where id=5; -update noar tt set b1='UW9F7U' where id=5; -update noar ti set b1='UW9F7U' where id=5; -update noar tt set b2='K1IIRFTCWD7MB4X7' where id=5; -update noar ti set b2='K1IIRFTCWD7MB4X7' where id=5; -update noar tt set b0='2MN2UKF6N5SZWRU7' where id=6; -update noar ti set b0='2MN2UKF6N5SZWRU7' where id=6; -update noar tt set b1='233OZPX30ZW3284HGVODFHT' where id=6; -update noar ti set b1='233OZPX30ZW3284HGVODFHT' where id=6; -update noar tt set b2='Q0R0SO9R8Z50FFZ1TNFBZ4T5' where id=6; -update noar ti set b2='Q0R0SO9R8Z50FFZ1TNFBZ4T5' where id=6; -update noar tt set b0='90TJKR5AUJIB740YG5' where id=7; -update noar ti set b0='90TJKR5AUJIB740YG5' where id=7; -update noar tt set b1='Q3G5HYWMM8ZT51OND73QG7RQF8MH5' where id=7; -update noar ti set b1='Q3G5HYWMM8ZT51OND73QG7RQF8MH5' where id=7; -update noar tt set b2='FC0Z6LO041XJBG5O1ALZYTM15TRK0ZGN' where id=7; -update noar ti set b2='FC0Z6LO041XJBG5O1ALZYTM15TRK0ZGN' where id=7; -update noar tt set b0='RPGEPQ5JE5EZGPHHHE1KPZELS5J' where id=8; -update noar ti set b0='RPGEPQ5JE5EZGPHHHE1KPZELS5J' where id=8; -update noar tt set b1='I' where id=8; -update noar ti set b1='I' where id=8; -update noar tt set b2='BM7SW4MQ8YTUU4X4WTH' where id=8; -update noar ti set b2='BM7SW4MQ8YTUU4X4WTH' where id=8; -update noar tt set b0='XHOI1Y3UOSLIFVORTA4X6Q8KWNZVH6L' where id=9; -update noar ti set b0='XHOI1Y3UOSLIFVORTA4X6Q8KWNZVH6L' where id=9; -update noar tt set b1='A8BPZX77AZQO' where id=9; -update noar ti set b1='A8BPZX77AZQO' where id=9; -update noar tt set b2='N' where id=9; -update noar ti set b2='N' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 longblob not null, - b1 text not null, - b2 text not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='S2FIIC4M2KV' where id=1; -update noar ti set b0='S2FIIC4M2KV' where id=1; -update noar tt set b1='YQSR' where id=1; -update noar ti set b1='YQSR' where id=1; -update noar tt set b2='FZC5TKJVBMB1WW7L' where id=1; -update noar ti set b2='FZC5TKJVBMB1WW7L' where id=1; -update noar tt set b0='7B1L17ADXH' where id=2; -update noar ti set b0='7B1L17ADXH' where id=2; -update noar tt set b1='NCRLGJ0HPRNA9FCM3' where id=2; -update noar ti set b1='NCRLGJ0HPRNA9FCM3' where id=2; -update noar tt set b2='HKBJCG1I2W4BLOV9' where id=2; -update noar ti set b2='HKBJCG1I2W4BLOV9' where id=2; -update noar tt set b0='NOPYPMB90PM7YHZK5AMVLP7NETD2' where id=3; -update noar ti set b0='NOPYPMB90PM7YHZK5AMVLP7NETD2' where id=3; -update noar tt set b1='RBU04MRNSEH4ZWJKJFIUS8G26KKDZ6N3' where id=3; -update noar ti set b1='RBU04MRNSEH4ZWJKJFIUS8G26KKDZ6N3' where id=3; -update noar tt set b2='DSPMVAY35RJLC8727' where id=3; -update noar ti set b2='DSPMVAY35RJLC8727' where id=3; -update noar tt set b0='X' where id=4; -update noar ti set b0='X' where id=4; -update noar tt set b1='M4YT2XF6B3' where id=4; -update noar ti set b1='M4YT2XF6B3' where id=4; -update noar tt set b2='LHB' where id=4; -update noar ti set b2='LHB' where id=4; -update noar tt set b0='6NUWYOVU7XBGL56IS' where id=5; -update noar ti set b0='6NUWYOVU7XBGL56IS' where id=5; -update noar tt set b1='WPU226NBPDPFHKPUZOASR4B' where id=5; -update noar ti set b1='WPU226NBPDPFHKPUZOASR4B' where id=5; -update noar tt set b2='F767Y2X1Z3U' where id=5; -update noar ti set b2='F767Y2X1Z3U' where id=5; -update noar tt set b0='LKIIMW3J090F6O3SMNQ3M' where id=6; -update noar ti set b0='LKIIMW3J090F6O3SMNQ3M' where id=6; -update noar tt set b1='N' where id=6; -update noar ti set b1='N' where id=6; -update noar tt set b2='6TZ6PIQ4VV2T' where id=6; -update noar ti set b2='6TZ6PIQ4VV2T' where id=6; -update noar tt set b0='X3V2F9U5OLX35QQG4ULCET0WIRK97' where id=7; -update noar ti set b0='X3V2F9U5OLX35QQG4ULCET0WIRK97' where id=7; -update noar tt set b1='7S54PCK5URKOHY6PVO5K' where id=7; -update noar ti set b1='7S54PCK5URKOHY6PVO5K' where id=7; -update noar tt set b2='NOYD7G7I' where id=7; -update noar ti set b2='NOYD7G7I' where id=7; -update noar tt set b0='IDE4A5' where id=8; -update noar ti set b0='IDE4A5' where id=8; -update noar tt set b1='0WZ0JADT8' where id=8; -update noar ti set b1='0WZ0JADT8' where id=8; -update noar tt set b2='DRJ85FAS8RN6BA2I0HWEA2Q' where id=8; -update noar ti set b2='DRJ85FAS8RN6BA2I0HWEA2Q' where id=8; -update noar tt set b0='BF39NXSJIP8OLCVGBN00' where id=9; -update noar ti set b0='BF39NXSJIP8OLCVGBN00' where id=9; -update noar tt set b1='PLLY62BC0UM8BLGJGGJ7LU15MG' where id=9; -update noar ti set b1='PLLY62BC0UM8BLGJGGJ7LU15MG' where id=9; -update noar tt set b2='0JBCQDQWFGODF' where id=9; -update noar ti set b2='0JBCQDQWFGODF' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 text null, - b1 tinyblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='WS9RHW5CQ7AKYJKMRXL2RZLLR' where id=1; -update noar ti set b0='WS9RHW5CQ7AKYJKMRXL2RZLLR' where id=1; -update noar tt set b1='0B7HZ582I1M0U6KM7D' where id=1; -update noar ti set b1='0B7HZ582I1M0U6KM7D' where id=1; -update noar tt set b2='2308KMB641OE' where id=1; -update noar ti set b2='2308KMB641OE' where id=1; -update noar tt set b0='52PYZU3ZQ4H6NUDU1P3XH' where id=2; -update noar ti set b0='52PYZU3ZQ4H6NUDU1P3XH' where id=2; -update noar tt set b1='X4NJAT8JN8L4B0BB' where id=2; -update noar ti set b1='X4NJAT8JN8L4B0BB' where id=2; -update noar tt set b2='K' where id=2; -update noar ti set b2='K' where id=2; -update noar tt set b0='ZWCR50LDMJ0' where id=3; -update noar ti set b0='ZWCR50LDMJ0' where id=3; -update noar tt set b1='ERHQ1Z45GDSPN4NUGP5YO4V4CDGKK3V' where id=3; -update noar ti set b1='ERHQ1Z45GDSPN4NUGP5YO4V4CDGKK3V' where id=3; -update noar tt set b2='W' where id=3; -update noar ti set b2='W' where id=3; -update noar tt set b0='PPQMNYBOOH69' where id=4; -update noar ti set b0='PPQMNYBOOH69' where id=4; -update noar tt set b1='Z7ZZTK8473T0T76Y0TF27' where id=4; -update noar ti set b1='Z7ZZTK8473T0T76Y0TF27' where id=4; -update noar tt set b2='AO5UEGO9BDNB2WMYVJF4ZPLA' where id=4; -update noar ti set b2='AO5UEGO9BDNB2WMYVJF4ZPLA' where id=4; -update noar tt set b0='FMDR0GVWPQ6QYPK0K9AASP4KJJZO71C9' where id=5; -update noar ti set b0='FMDR0GVWPQ6QYPK0K9AASP4KJJZO71C9' where id=5; -update noar tt set b1='BXM5OQMOV2H3T31NMV02Y' where id=5; -update noar ti set b1='BXM5OQMOV2H3T31NMV02Y' where id=5; -update noar tt set b2='3AEF5NH2KER56WAGNAQ' where id=5; -update noar ti set b2='3AEF5NH2KER56WAGNAQ' where id=5; -update noar tt set b0='K2DGUVO2ITLS5JMV54I4OKH' where id=6; -update noar ti set b0='K2DGUVO2ITLS5JMV54I4OKH' where id=6; -update noar tt set b1='MRUR5S6ZXDBMA' where id=6; -update noar ti set b1='MRUR5S6ZXDBMA' where id=6; -update noar tt set b2='B4K8Q80ATJJFD9F29L8ZQS98H0FXX2K5' where id=6; -update noar ti set b2='B4K8Q80ATJJFD9F29L8ZQS98H0FXX2K5' where id=6; -update noar tt set b0='I5GYSX' where id=7; -update noar ti set b0='I5GYSX' where id=7; -update noar tt set b1='RL' where id=7; -update noar ti set b1='RL' where id=7; -update noar tt set b2='C9DV9LB2YGHVDDQBUIEF' where id=7; -update noar ti set b2='C9DV9LB2YGHVDDQBUIEF' where id=7; -update noar tt set b0='7Q' where id=8; -update noar ti set b0='7Q' where id=8; -update noar tt set b1='3U90HTAFIVXNAXU3J0RHFJ' where id=8; -update noar ti set b1='3U90HTAFIVXNAXU3J0RHFJ' where id=8; -update noar tt set b2='9FFX6765EPY7' where id=8; -update noar ti set b2='9FFX6765EPY7' where id=8; -update noar tt set b0='XCYOVGDHDNKKB0BGPYI102JR7EIXZET' where id=9; -update noar ti set b0='XCYOVGDHDNKKB0BGPYI102JR7EIXZET' where id=9; -update noar tt set b1='48NH5Z5OJ80HSJ8AH4OH1U3' where id=9; -update noar ti set b1='48NH5Z5OJ80HSJ8AH4OH1U3' where id=9; -update noar tt set b2='EE6K02P5AB' where id=9; -update noar ti set b2='EE6K02P5AB' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 text not null, - b1 tinyblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='W' where id=1; -update noar ti set b0='W' where id=1; -update noar tt set b1='LMTP0HBUV' where id=1; -update noar ti set b1='LMTP0HBUV' where id=1; -update noar tt set b2='HSVVBHU73SE6IWY621FX' where id=1; -update noar ti set b2='HSVVBHU73SE6IWY621FX' where id=1; -update noar tt set b0='N4CSLN' where id=2; -update noar ti set b0='N4CSLN' where id=2; -update noar tt set b1='UJABUUEUV18WB' where id=2; -update noar ti set b1='UJABUUEUV18WB' where id=2; -update noar tt set b2='V48QOLP0DP7QZDZSW4QCE' where id=2; -update noar ti set b2='V48QOLP0DP7QZDZSW4QCE' where id=2; -update noar tt set b0='9TZTJNYHJ3' where id=3; -update noar ti set b0='9TZTJNYHJ3' where id=3; -update noar tt set b1='6XH9OPDVC' where id=3; -update noar ti set b1='6XH9OPDVC' where id=3; -update noar tt set b2='HCOUDQ' where id=3; -update noar ti set b2='HCOUDQ' where id=3; -update noar tt set b0='99PQGD56BU7FHQGWOYJC' where id=4; -update noar ti set b0='99PQGD56BU7FHQGWOYJC' where id=4; -update noar tt set b1='LAHI6UJO6EKB7Z5WH5D334Q4UJM7LA' where id=4; -update noar ti set b1='LAHI6UJO6EKB7Z5WH5D334Q4UJM7LA' where id=4; -update noar tt set b2='J7RXGNDEBS3XZNRS7M3CUU1' where id=4; -update noar ti set b2='J7RXGNDEBS3XZNRS7M3CUU1' where id=4; -update noar tt set b0='V9EFS' where id=5; -update noar ti set b0='V9EFS' where id=5; -update noar tt set b1='BFJ3' where id=5; -update noar ti set b1='BFJ3' where id=5; -update noar tt set b2='OXPR9QS654' where id=5; -update noar ti set b2='OXPR9QS654' where id=5; -update noar tt set b0='806K' where id=6; -update noar ti set b0='806K' where id=6; -update noar tt set b1='7K94TPJ741TEI' where id=6; -update noar ti set b1='7K94TPJ741TEI' where id=6; -update noar tt set b2='3JN63UR0DNOXZPP683742HJ' where id=6; -update noar ti set b2='3JN63UR0DNOXZPP683742HJ' where id=6; -update noar tt set b0='Z4SMHSB06M5O59UM952HQS5608KH' where id=7; -update noar ti set b0='Z4SMHSB06M5O59UM952HQS5608KH' where id=7; -update noar tt set b1='DWG0ADX0ZJQORJL' where id=7; -update noar ti set b1='DWG0ADX0ZJQORJL' where id=7; -update noar tt set b2='CA4ITK2UZFGKJMM01FZ' where id=7; -update noar ti set b2='CA4ITK2UZFGKJMM01FZ' where id=7; -update noar tt set b0='30ARYOKSVNFNJNL' where id=8; -update noar ti set b0='30ARYOKSVNFNJNL' where id=8; -update noar tt set b1='7EF0MV6535YX1QYTOOVG4QK1' where id=8; -update noar ti set b1='7EF0MV6535YX1QYTOOVG4QK1' where id=8; -update noar tt set b2='I2INHN7R09XBX' where id=8; -update noar ti set b2='I2INHN7R09XBX' where id=8; -update noar tt set b0='VCOHKSB7V3I87ORQ2CN0N7LHNXA7HWF' where id=9; -update noar ti set b0='VCOHKSB7V3I87ORQ2CN0N7LHNXA7HWF' where id=9; -update noar tt set b1='LA5ILHAA31QU2ZFYL' where id=9; -update noar ti set b1='LA5ILHAA31QU2ZFYL' where id=9; -update noar tt set b2='SPZD17HVKKU' where id=9; -update noar ti set b2='SPZD17HVKKU' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 text null, - b1 tinyblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='GCXZ895YBASD0IK1ELMFLN0UC' where id=1; -update noar ti set b0='GCXZ895YBASD0IK1ELMFLN0UC' where id=1; -update noar tt set b1='Y876W40Z5VYB2GDI9BV' where id=1; -update noar ti set b1='Y876W40Z5VYB2GDI9BV' where id=1; -update noar tt set b2='71C1KOZ3B8VEJP5Z2QYBMP78UGB1Y' where id=1; -update noar ti set b2='71C1KOZ3B8VEJP5Z2QYBMP78UGB1Y' where id=1; -update noar tt set b0='FI1Z0OS5D8U1D4SSCL' where id=2; -update noar ti set b0='FI1Z0OS5D8U1D4SSCL' where id=2; -update noar tt set b1='HXVYGU' where id=2; -update noar ti set b1='HXVYGU' where id=2; -update noar tt set b2='ZKCU' where id=2; -update noar ti set b2='ZKCU' where id=2; -update noar tt set b0='QUPNV94G' where id=3; -update noar ti set b0='QUPNV94G' where id=3; -update noar tt set b1='4SO1QP7AW08GCUPQ' where id=3; -update noar ti set b1='4SO1QP7AW08GCUPQ' where id=3; -update noar tt set b2='9I8MMI4DPDXFSK6U1TDXMVSSM' where id=3; -update noar ti set b2='9I8MMI4DPDXFSK6U1TDXMVSSM' where id=3; -update noar tt set b0='V9' where id=4; -update noar ti set b0='V9' where id=4; -update noar tt set b1='FAWA8YRHOX2I63H6EF93' where id=4; -update noar ti set b1='FAWA8YRHOX2I63H6EF93' where id=4; -update noar tt set b2='FAXSY62Q3LKKC68I3W991MACWTD37L' where id=4; -update noar ti set b2='FAXSY62Q3LKKC68I3W991MACWTD37L' where id=4; -update noar tt set b0='NYMONSDQ4MQ' where id=5; -update noar ti set b0='NYMONSDQ4MQ' where id=5; -update noar tt set b1='0HHYNS4VL7JFIW36PHZB88C7J' where id=5; -update noar ti set b1='0HHYNS4VL7JFIW36PHZB88C7J' where id=5; -update noar tt set b2='IZNWS78X9LDDVGLQDBRW2K83TDAM' where id=5; -update noar ti set b2='IZNWS78X9LDDVGLQDBRW2K83TDAM' where id=5; -update noar tt set b0='GGIQ4EY772KPSG501T9RQAEKDVQX' where id=6; -update noar ti set b0='GGIQ4EY772KPSG501T9RQAEKDVQX' where id=6; -update noar tt set b1='CF13HBZHJGB2ERMND9WZ4VOMV6QH' where id=6; -update noar ti set b1='CF13HBZHJGB2ERMND9WZ4VOMV6QH' where id=6; -update noar tt set b2='M9MN72C' where id=6; -update noar ti set b2='M9MN72C' where id=6; -update noar tt set b0='8H6G54PQQHAT196FPL4Y60DD9BMT' where id=7; -update noar ti set b0='8H6G54PQQHAT196FPL4Y60DD9BMT' where id=7; -update noar tt set b1='XFZ' where id=7; -update noar ti set b1='XFZ' where id=7; -update noar tt set b2='XH5' where id=7; -update noar ti set b2='XH5' where id=7; -update noar tt set b0='CBTBDHU5WNR9DPKSTLUNPIT0N7J7O77P' where id=8; -update noar ti set b0='CBTBDHU5WNR9DPKSTLUNPIT0N7J7O77P' where id=8; -update noar tt set b1='0V0W2UYBT' where id=8; -update noar ti set b1='0V0W2UYBT' where id=8; -update noar tt set b2='TAGL08D35XLRRKLUPITQBKR3DZUZ' where id=8; -update noar ti set b2='TAGL08D35XLRRKLUPITQBKR3DZUZ' where id=8; -update noar tt set b0='873B3' where id=9; -update noar ti set b0='873B3' where id=9; -update noar tt set b1='G2RCWFZX2UEOPX6FMS71PVXM' where id=9; -update noar ti set b1='G2RCWFZX2UEOPX6FMS71PVXM' where id=9; -update noar tt set b2='JI969NWTEN1RZ8BUTPZTK' where id=9; -update noar ti set b2='JI969NWTEN1RZ8BUTPZTK' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 text not null, - b1 tinyblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='W02CNZAIFE6IA3XPHR1HFZL4DEJKP1' where id=1; -update noar ti set b0='W02CNZAIFE6IA3XPHR1HFZL4DEJKP1' where id=1; -update noar tt set b1='2S0RGEC2NWEMOKIVLCNGA98NE5ZUADK' where id=1; -update noar ti set b1='2S0RGEC2NWEMOKIVLCNGA98NE5ZUADK' where id=1; -update noar tt set b2='6ALIGAHIG7OU6CYHHB46A0CO7FM7' where id=1; -update noar ti set b2='6ALIGAHIG7OU6CYHHB46A0CO7FM7' where id=1; -update noar tt set b0='7MI8UGUB6D9CM' where id=2; -update noar ti set b0='7MI8UGUB6D9CM' where id=2; -update noar tt set b1='9OZOGGDN05L0KC4YV17EG7ARPURZJ' where id=2; -update noar ti set b1='9OZOGGDN05L0KC4YV17EG7ARPURZJ' where id=2; -update noar tt set b2='KJWDCTGKH' where id=2; -update noar ti set b2='KJWDCTGKH' where id=2; -update noar tt set b0='SRLFGXFU' where id=3; -update noar ti set b0='SRLFGXFU' where id=3; -update noar tt set b1='NRAXYY33FI76750' where id=3; -update noar ti set b1='NRAXYY33FI76750' where id=3; -update noar tt set b2='HJOX9BI6KCST6M9VH2HBM0' where id=3; -update noar ti set b2='HJOX9BI6KCST6M9VH2HBM0' where id=3; -update noar tt set b0='1' where id=4; -update noar ti set b0='1' where id=4; -update noar tt set b1='7OPKY500TN6QA5LIVTE608C' where id=4; -update noar ti set b1='7OPKY500TN6QA5LIVTE608C' where id=4; -update noar tt set b2='N1TP86ODBIETCM4A6KH' where id=4; -update noar ti set b2='N1TP86ODBIETCM4A6KH' where id=4; -update noar tt set b0='91TQYZYM7GJLU99Q' where id=5; -update noar ti set b0='91TQYZYM7GJLU99Q' where id=5; -update noar tt set b1='HJIC7GF' where id=5; -update noar ti set b1='HJIC7GF' where id=5; -update noar tt set b2='DUT1H546UGUP0' where id=5; -update noar ti set b2='DUT1H546UGUP0' where id=5; -update noar tt set b0='I4KL0FJMFN7G88CM8A1YZRJFI' where id=6; -update noar ti set b0='I4KL0FJMFN7G88CM8A1YZRJFI' where id=6; -update noar tt set b1='Y5GX9NCQ2MH03' where id=6; -update noar ti set b1='Y5GX9NCQ2MH03' where id=6; -update noar tt set b2='3Y6G0GLO' where id=6; -update noar ti set b2='3Y6G0GLO' where id=6; -update noar tt set b0='COVBM' where id=7; -update noar ti set b0='COVBM' where id=7; -update noar tt set b1='VSRX00E6' where id=7; -update noar ti set b1='VSRX00E6' where id=7; -update noar tt set b2='IYNB6AJG90M6HI' where id=7; -update noar ti set b2='IYNB6AJG90M6HI' where id=7; -update noar tt set b0='UQK1HUF1EM04BEV4HA27' where id=8; -update noar ti set b0='UQK1HUF1EM04BEV4HA27' where id=8; -update noar tt set b1='UMPI' where id=8; -update noar ti set b1='UMPI' where id=8; -update noar tt set b2='BETVTQP5FSD6Q79XM' where id=8; -update noar ti set b2='BETVTQP5FSD6Q79XM' where id=8; -update noar tt set b0='6JZAY3R6UU5O3H' where id=9; -update noar ti set b0='6JZAY3R6UU5O3H' where id=9; -update noar tt set b1='EDXP5TEFI4OL0KLHVGJ5I2DB2SU' where id=9; -update noar ti set b1='EDXP5TEFI4OL0KLHVGJ5I2DB2SU' where id=9; -update noar tt set b2='W82SEP' where id=9; -update noar ti set b2='W82SEP' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 text null, - b1 tinyblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='R2BWLS' where id=1; -update noar ti set b0='R2BWLS' where id=1; -update noar tt set b1='ZDF9RS0NKL2GN0WG03BX' where id=1; -update noar ti set b1='ZDF9RS0NKL2GN0WG03BX' where id=1; -update noar tt set b2='OAI' where id=1; -update noar ti set b2='OAI' where id=1; -update noar tt set b0='1646ESR6RAL2PLJQHBFPG' where id=2; -update noar ti set b0='1646ESR6RAL2PLJQHBFPG' where id=2; -update noar tt set b1='3AZX293T2' where id=2; -update noar ti set b1='3AZX293T2' where id=2; -update noar tt set b2='L3AIYOZLK5' where id=2; -update noar ti set b2='L3AIYOZLK5' where id=2; -update noar tt set b0='S' where id=3; -update noar ti set b0='S' where id=3; -update noar tt set b1='XLYS9DA8I2I3NB3K09RUDZP26X' where id=3; -update noar ti set b1='XLYS9DA8I2I3NB3K09RUDZP26X' where id=3; -update noar tt set b2='9E' where id=3; -update noar ti set b2='9E' where id=3; -update noar tt set b0='7CIX6DFZ4P' where id=4; -update noar ti set b0='7CIX6DFZ4P' where id=4; -update noar tt set b1='CBAGXJS52VC4CCE3294TPMW7JCW' where id=4; -update noar ti set b1='CBAGXJS52VC4CCE3294TPMW7JCW' where id=4; -update noar tt set b2='96RZW66O6YKB6S1F4Q4ROSOANN951KE3' where id=4; -update noar ti set b2='96RZW66O6YKB6S1F4Q4ROSOANN951KE3' where id=4; -update noar tt set b0='CN4IMBRA6VFRQCAHTYX0FKRPI6GLI1' where id=5; -update noar ti set b0='CN4IMBRA6VFRQCAHTYX0FKRPI6GLI1' where id=5; -update noar tt set b1='UI' where id=5; -update noar ti set b1='UI' where id=5; -update noar tt set b2='6HGTWM1WK873UOEHXJILP7UT' where id=5; -update noar ti set b2='6HGTWM1WK873UOEHXJILP7UT' where id=5; -update noar tt set b0='J' where id=6; -update noar ti set b0='J' where id=6; -update noar tt set b1='QO9F2ZTHGUQS7ZV' where id=6; -update noar ti set b1='QO9F2ZTHGUQS7ZV' where id=6; -update noar tt set b2='RW0T7PHY31X2ZLMK3FGK8OL' where id=6; -update noar ti set b2='RW0T7PHY31X2ZLMK3FGK8OL' where id=6; -update noar tt set b0='6L5M21FO7GRRK1BGWQ' where id=7; -update noar ti set b0='6L5M21FO7GRRK1BGWQ' where id=7; -update noar tt set b1='YHZKTIH6MSL4V0FMJSNPLA' where id=7; -update noar ti set b1='YHZKTIH6MSL4V0FMJSNPLA' where id=7; -update noar tt set b2='PLKQZJOBU75APK3UK5GUU' where id=7; -update noar ti set b2='PLKQZJOBU75APK3UK5GUU' where id=7; -update noar tt set b0='Q01INRM3YFONS4OMY8AT84' where id=8; -update noar ti set b0='Q01INRM3YFONS4OMY8AT84' where id=8; -update noar tt set b1='YDLY7AEMS' where id=8; -update noar ti set b1='YDLY7AEMS' where id=8; -update noar tt set b2='JDMIJAFT0' where id=8; -update noar ti set b2='JDMIJAFT0' where id=8; -update noar tt set b0='LYMGXEHWIPSU0' where id=9; -update noar ti set b0='LYMGXEHWIPSU0' where id=9; -update noar tt set b1='NSVKLSVLJNGDU' where id=9; -update noar ti set b1='NSVKLSVLJNGDU' where id=9; -update noar tt set b2='JCNMN0PNRDM4ZUD37AD0I4SCL34' where id=9; -update noar ti set b2='JCNMN0PNRDM4ZUD37AD0I4SCL34' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 text not null, - b1 tinyblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='KZLVWSLYP' where id=1; -update noar ti set b0='KZLVWSLYP' where id=1; -update noar tt set b1='PRIGWZX2' where id=1; -update noar ti set b1='PRIGWZX2' where id=1; -update noar tt set b2='ORQZVPP0JOJCXEOIBISVBO' where id=1; -update noar ti set b2='ORQZVPP0JOJCXEOIBISVBO' where id=1; -update noar tt set b0='BR2ZBJSWSOBQ' where id=2; -update noar ti set b0='BR2ZBJSWSOBQ' where id=2; -update noar tt set b1='LNQ85NN3W0' where id=2; -update noar ti set b1='LNQ85NN3W0' where id=2; -update noar tt set b2='E' where id=2; -update noar ti set b2='E' where id=2; -update noar tt set b0='3NHG5H' where id=3; -update noar ti set b0='3NHG5H' where id=3; -update noar tt set b1='T8GJE56GLP0MUOD0L700H25L7IYWZR' where id=3; -update noar ti set b1='T8GJE56GLP0MUOD0L700H25L7IYWZR' where id=3; -update noar tt set b2='OGMXEXZ6N4GZLC0FCGJYCM6DQ4F' where id=3; -update noar ti set b2='OGMXEXZ6N4GZLC0FCGJYCM6DQ4F' where id=3; -update noar tt set b0='AKFH' where id=4; -update noar ti set b0='AKFH' where id=4; -update noar tt set b1='MJ6KLHS7Z' where id=4; -update noar ti set b1='MJ6KLHS7Z' where id=4; -update noar tt set b2='JUBQVRKCG' where id=4; -update noar ti set b2='JUBQVRKCG' where id=4; -update noar tt set b0='FKMRKIMU' where id=5; -update noar ti set b0='FKMRKIMU' where id=5; -update noar tt set b1='U50ZE5FFO9W8E4K6AFP2EFYW08QOJUO' where id=5; -update noar ti set b1='U50ZE5FFO9W8E4K6AFP2EFYW08QOJUO' where id=5; -update noar tt set b2='CM1SWIRPXU5' where id=5; -update noar ti set b2='CM1SWIRPXU5' where id=5; -update noar tt set b0='M5PCMRB' where id=6; -update noar ti set b0='M5PCMRB' where id=6; -update noar tt set b1='FBURUI3K4GA0FVDWT' where id=6; -update noar ti set b1='FBURUI3K4GA0FVDWT' where id=6; -update noar tt set b2='C4O14LBKH942WDPOHTA7727RO5' where id=6; -update noar ti set b2='C4O14LBKH942WDPOHTA7727RO5' where id=6; -update noar tt set b0='8NW0SXJJVB6BIGXN86O7WFI' where id=7; -update noar ti set b0='8NW0SXJJVB6BIGXN86O7WFI' where id=7; -update noar tt set b1='HX7U13QFVN' where id=7; -update noar ti set b1='HX7U13QFVN' where id=7; -update noar tt set b2='3YLV3HUTQZ0HBDP83IMZKSWROKD' where id=7; -update noar ti set b2='3YLV3HUTQZ0HBDP83IMZKSWROKD' where id=7; -update noar tt set b0='861WKMVZYTDRCL218STCI5Q37TG' where id=8; -update noar ti set b0='861WKMVZYTDRCL218STCI5Q37TG' where id=8; -update noar tt set b1='G' where id=8; -update noar ti set b1='G' where id=8; -update noar tt set b2='28J7TPGOZY1L2H5NI4BXO' where id=8; -update noar ti set b2='28J7TPGOZY1L2H5NI4BXO' where id=8; -update noar tt set b0='9WU9K6AVXMHLHE' where id=9; -update noar ti set b0='9WU9K6AVXMHLHE' where id=9; -update noar tt set b1='V6W2F0RW2OI6' where id=9; -update noar ti set b1='V6W2F0RW2OI6' where id=9; -update noar tt set b2='TO6RY9SO8EUZG' where id=9; -update noar ti set b2='TO6RY9SO8EUZG' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 text null, - b1 tinyblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='P026RGI7' where id=1; -update noar ti set b0='P026RGI7' where id=1; -update noar tt set b1='HMB9' where id=1; -update noar ti set b1='HMB9' where id=1; -update noar tt set b2='9WXAOR36R22G4KIOMF61CJOPPREE1FPV' where id=1; -update noar ti set b2='9WXAOR36R22G4KIOMF61CJOPPREE1FPV' where id=1; -update noar tt set b0='Z7SLVMLJI90YXKSME4U5JSWW1NDAGPOJ' where id=2; -update noar ti set b0='Z7SLVMLJI90YXKSME4U5JSWW1NDAGPOJ' where id=2; -update noar tt set b1='L6GG3W5SD1J9KNDX9N86EHFF4IJ0G' where id=2; -update noar ti set b1='L6GG3W5SD1J9KNDX9N86EHFF4IJ0G' where id=2; -update noar tt set b2='I2EJVK6KO9CLLBW1GBL2VDW1JZXV' where id=2; -update noar ti set b2='I2EJVK6KO9CLLBW1GBL2VDW1JZXV' where id=2; -update noar tt set b0='7WT8QY6JHLN4PL' where id=3; -update noar ti set b0='7WT8QY6JHLN4PL' where id=3; -update noar tt set b1='ESYH9FOXUA' where id=3; -update noar ti set b1='ESYH9FOXUA' where id=3; -update noar tt set b2='VKU89BAEF0SML8GWML1M2O8U05NAN5F0' where id=3; -update noar ti set b2='VKU89BAEF0SML8GWML1M2O8U05NAN5F0' where id=3; -update noar tt set b0='NBQI1ETMT9YQTOJEMRMSV' where id=4; -update noar ti set b0='NBQI1ETMT9YQTOJEMRMSV' where id=4; -update noar tt set b1='5NBGCT6QI8I' where id=4; -update noar ti set b1='5NBGCT6QI8I' where id=4; -update noar tt set b2='G99KPIG3B1R3AMCH69LH9BUNFXC2G' where id=4; -update noar ti set b2='G99KPIG3B1R3AMCH69LH9BUNFXC2G' where id=4; -update noar tt set b0='AX5IKUQ7814AJMG8VJTY' where id=5; -update noar ti set b0='AX5IKUQ7814AJMG8VJTY' where id=5; -update noar tt set b1='0HRT' where id=5; -update noar ti set b1='0HRT' where id=5; -update noar tt set b2='JI0LRN' where id=5; -update noar ti set b2='JI0LRN' where id=5; -update noar tt set b0='ZLLRV' where id=6; -update noar ti set b0='ZLLRV' where id=6; -update noar tt set b1='AZO0WPETD1IEU2W0E' where id=6; -update noar ti set b1='AZO0WPETD1IEU2W0E' where id=6; -update noar tt set b2='2QWQNWUT7LJEJ0OMLZVANPHYRH' where id=6; -update noar ti set b2='2QWQNWUT7LJEJ0OMLZVANPHYRH' where id=6; -update noar tt set b0='VYCG8MQ1NXT4UG431981BA1CELN9X8' where id=7; -update noar ti set b0='VYCG8MQ1NXT4UG431981BA1CELN9X8' where id=7; -update noar tt set b1='N6FO' where id=7; -update noar ti set b1='N6FO' where id=7; -update noar tt set b2='YLLY98BWGIO81FAP6' where id=7; -update noar ti set b2='YLLY98BWGIO81FAP6' where id=7; -update noar tt set b0='18AF2WKP4MMXGCOWAL4' where id=8; -update noar ti set b0='18AF2WKP4MMXGCOWAL4' where id=8; -update noar tt set b1='5KVYXVMIUE8KC05A4JJY' where id=8; -update noar ti set b1='5KVYXVMIUE8KC05A4JJY' where id=8; -update noar tt set b2='C6X19L' where id=8; -update noar ti set b2='C6X19L' where id=8; -update noar tt set b0='U9B' where id=9; -update noar ti set b0='U9B' where id=9; -update noar tt set b1='P03ERPU' where id=9; -update noar ti set b1='P03ERPU' where id=9; -update noar tt set b2='2K926FRYLL80CNFU7V' where id=9; -update noar ti set b2='2K926FRYLL80CNFU7V' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 text not null, - b1 tinyblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='LDZQ62' where id=1; -update noar ti set b0='LDZQ62' where id=1; -update noar tt set b1='TSHQCJAKBWKNSP' where id=1; -update noar ti set b1='TSHQCJAKBWKNSP' where id=1; -update noar tt set b2='V925Z2RR' where id=1; -update noar ti set b2='V925Z2RR' where id=1; -update noar tt set b0='8TA2EGNM082' where id=2; -update noar ti set b0='8TA2EGNM082' where id=2; -update noar tt set b1='ROPWSPB4JF7YPB4TM0PRPO' where id=2; -update noar ti set b1='ROPWSPB4JF7YPB4TM0PRPO' where id=2; -update noar tt set b2='NY0MFA6FH8UA' where id=2; -update noar ti set b2='NY0MFA6FH8UA' where id=2; -update noar tt set b0='9J0NTMDNSGDPJGRF' where id=3; -update noar ti set b0='9J0NTMDNSGDPJGRF' where id=3; -update noar tt set b1='GXXXJPHPV0JUJMP' where id=3; -update noar ti set b1='GXXXJPHPV0JUJMP' where id=3; -update noar tt set b2='01YM61LJ38X6' where id=3; -update noar ti set b2='01YM61LJ38X6' where id=3; -update noar tt set b0='N' where id=4; -update noar ti set b0='N' where id=4; -update noar tt set b1='G7UPQ9Y44OKF0TXUMZ2' where id=4; -update noar ti set b1='G7UPQ9Y44OKF0TXUMZ2' where id=4; -update noar tt set b2='TB5J' where id=4; -update noar ti set b2='TB5J' where id=4; -update noar tt set b0='A' where id=5; -update noar ti set b0='A' where id=5; -update noar tt set b1='6V70U56BSZGKY7NS5WVMQATXSXZ4' where id=5; -update noar ti set b1='6V70U56BSZGKY7NS5WVMQATXSXZ4' where id=5; -update noar tt set b2='WZIUE5OYFUQ4UA9CZVUBM1613ZP' where id=5; -update noar ti set b2='WZIUE5OYFUQ4UA9CZVUBM1613ZP' where id=5; -update noar tt set b0='ZTMC5C5Y67ZTOZHY' where id=6; -update noar ti set b0='ZTMC5C5Y67ZTOZHY' where id=6; -update noar tt set b1='147TP9MG12D7ATN5RB4HUHQRV' where id=6; -update noar ti set b1='147TP9MG12D7ATN5RB4HUHQRV' where id=6; -update noar tt set b2='VMHDCJ1J' where id=6; -update noar ti set b2='VMHDCJ1J' where id=6; -update noar tt set b0='UVK2JX29QW0W4DHOW2BQ4N' where id=7; -update noar ti set b0='UVK2JX29QW0W4DHOW2BQ4N' where id=7; -update noar tt set b1='A1EN6R7ABSBIK1JZY1CGSKWXBSGH' where id=7; -update noar ti set b1='A1EN6R7ABSBIK1JZY1CGSKWXBSGH' where id=7; -update noar tt set b2='EJ59VT5YXEEAM6BO86W6T' where id=7; -update noar ti set b2='EJ59VT5YXEEAM6BO86W6T' where id=7; -update noar tt set b0='U' where id=8; -update noar ti set b0='U' where id=8; -update noar tt set b1='78YUR0Q3D3K9U' where id=8; -update noar ti set b1='78YUR0Q3D3K9U' where id=8; -update noar tt set b2='IUM9GL98NMSU2ZY3BBN4SBLP3N' where id=8; -update noar ti set b2='IUM9GL98NMSU2ZY3BBN4SBLP3N' where id=8; -update noar tt set b0='FWVPAF0F0M3MKIUOVF4W1P' where id=9; -update noar ti set b0='FWVPAF0F0M3MKIUOVF4W1P' where id=9; -update noar tt set b1='WEXY9Y' where id=9; -update noar ti set b1='WEXY9Y' where id=9; -update noar tt set b2='J5RTQE5QAS' where id=9; -update noar ti set b2='J5RTQE5QAS' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 text null, - b1 tinyblob null, - b2 text null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='5C19WLU0CCGOFGGXQFW' where id=1; -update noar ti set b0='5C19WLU0CCGOFGGXQFW' where id=1; -update noar tt set b1='JZ11HN04EHQ61FA7QZFCT7TDJR' where id=1; -update noar ti set b1='JZ11HN04EHQ61FA7QZFCT7TDJR' where id=1; -update noar tt set b2='OFEOC45Q7USIYH5GLN6Q' where id=1; -update noar ti set b2='OFEOC45Q7USIYH5GLN6Q' where id=1; -update noar tt set b0='GL95P5IC6C8MDD7LWVLX9UEJO9IY5N1' where id=2; -update noar ti set b0='GL95P5IC6C8MDD7LWVLX9UEJO9IY5N1' where id=2; -update noar tt set b1='J4EJLSR2' where id=2; -update noar ti set b1='J4EJLSR2' where id=2; -update noar tt set b2='71153JRQONJ8DJZX37W6TLRLH' where id=2; -update noar ti set b2='71153JRQONJ8DJZX37W6TLRLH' where id=2; -update noar tt set b0='SGZVUKASDZQJTYFSL0XOE' where id=3; -update noar ti set b0='SGZVUKASDZQJTYFSL0XOE' where id=3; -update noar tt set b1='BFOB7FKIUVCB' where id=3; -update noar ti set b1='BFOB7FKIUVCB' where id=3; -update noar tt set b2='CTZDNML' where id=3; -update noar ti set b2='CTZDNML' where id=3; -update noar tt set b0='VFC8ZT5EFNA91HDN0ME2' where id=4; -update noar ti set b0='VFC8ZT5EFNA91HDN0ME2' where id=4; -update noar tt set b1='9HYIJD02YJC0TT5A' where id=4; -update noar ti set b1='9HYIJD02YJC0TT5A' where id=4; -update noar tt set b2='BGGBA3B6IK' where id=4; -update noar ti set b2='BGGBA3B6IK' where id=4; -update noar tt set b0='1ZAG871BYX00E0CHQ528B76JLWIYIGK' where id=5; -update noar ti set b0='1ZAG871BYX00E0CHQ528B76JLWIYIGK' where id=5; -update noar tt set b1='QR0QXSBRJDS5YDQ' where id=5; -update noar ti set b1='QR0QXSBRJDS5YDQ' where id=5; -update noar tt set b2='P1X' where id=5; -update noar ti set b2='P1X' where id=5; -update noar tt set b0='NMK41PD5HFO4A0L20JK46QB3FDN5AB' where id=6; -update noar ti set b0='NMK41PD5HFO4A0L20JK46QB3FDN5AB' where id=6; -update noar tt set b1='UQMAPQ3INLUX85L4RS2H' where id=6; -update noar ti set b1='UQMAPQ3INLUX85L4RS2H' where id=6; -update noar tt set b2='WG7KRKI3J51ZPWVE8NEE7OHW4GF' where id=6; -update noar ti set b2='WG7KRKI3J51ZPWVE8NEE7OHW4GF' where id=6; -update noar tt set b0='VYXOSHBDRNGO6P3HSYQ53GHWGODXG7KU' where id=7; -update noar ti set b0='VYXOSHBDRNGO6P3HSYQ53GHWGODXG7KU' where id=7; -update noar tt set b1='E9WE4QJ4' where id=7; -update noar ti set b1='E9WE4QJ4' where id=7; -update noar tt set b2='VM71160W2HBBWXQO735I' where id=7; -update noar ti set b2='VM71160W2HBBWXQO735I' where id=7; -update noar tt set b0='A11YB1TQEHRRY88A2F1YZB5U3' where id=8; -update noar ti set b0='A11YB1TQEHRRY88A2F1YZB5U3' where id=8; -update noar tt set b1='EKDSPE0BMY' where id=8; -update noar ti set b1='EKDSPE0BMY' where id=8; -update noar tt set b2='QOUAQXFP8GE8M8GESVCOIIV5C6V5' where id=8; -update noar ti set b2='QOUAQXFP8GE8M8GESVCOIIV5C6V5' where id=8; -update noar tt set b0='2JT6TY' where id=9; -update noar ti set b0='2JT6TY' where id=9; -update noar tt set b1='SZTYLSBW7VQ' where id=9; -update noar ti set b1='SZTYLSBW7VQ' where id=9; -update noar tt set b2='87' where id=9; -update noar ti set b2='87' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 text not null, - b1 tinyblob not null, - b2 text not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='IUUKUIZIUNFRBJA1' where id=1; -update noar ti set b0='IUUKUIZIUNFRBJA1' where id=1; -update noar tt set b1='I7VEUQV1I2I3SIK1D3R0' where id=1; -update noar ti set b1='I7VEUQV1I2I3SIK1D3R0' where id=1; -update noar tt set b2='RLD962Z' where id=1; -update noar ti set b2='RLD962Z' where id=1; -update noar tt set b0='GIDBPR6XSWNT2P54' where id=2; -update noar ti set b0='GIDBPR6XSWNT2P54' where id=2; -update noar tt set b1='WNZ4B1WM31A2H9N6F6WPMCHY1Q' where id=2; -update noar ti set b1='WNZ4B1WM31A2H9N6F6WPMCHY1Q' where id=2; -update noar tt set b2='1J9DP0GVU3FZY' where id=2; -update noar ti set b2='1J9DP0GVU3FZY' where id=2; -update noar tt set b0='VSXJHTPJKYEDGP4SLHG0JLS54X' where id=3; -update noar ti set b0='VSXJHTPJKYEDGP4SLHG0JLS54X' where id=3; -update noar tt set b1='M4L3E3C6MFGX5GDIS9OGPHQ7F1' where id=3; -update noar ti set b1='M4L3E3C6MFGX5GDIS9OGPHQ7F1' where id=3; -update noar tt set b2='MJNMPY1T' where id=3; -update noar ti set b2='MJNMPY1T' where id=3; -update noar tt set b0='95OKX9T8U40BF' where id=4; -update noar ti set b0='95OKX9T8U40BF' where id=4; -update noar tt set b1='MUU1NMS69K' where id=4; -update noar ti set b1='MUU1NMS69K' where id=4; -update noar tt set b2='VKO8L48K29YTD1GJWRF1ZKZVYJFHFIK' where id=4; -update noar ti set b2='VKO8L48K29YTD1GJWRF1ZKZVYJFHFIK' where id=4; -update noar tt set b0='ECAFMVP' where id=5; -update noar ti set b0='ECAFMVP' where id=5; -update noar tt set b1='NMVUYN6DF9NA1GYAK8L5N0PI4J5FXB' where id=5; -update noar ti set b1='NMVUYN6DF9NA1GYAK8L5N0PI4J5FXB' where id=5; -update noar tt set b2='76E5XR398OY1ZRR5M4O5' where id=5; -update noar ti set b2='76E5XR398OY1ZRR5M4O5' where id=5; -update noar tt set b0='5MACI4J4S8MISFHETAA8F' where id=6; -update noar ti set b0='5MACI4J4S8MISFHETAA8F' where id=6; -update noar tt set b1='YB136' where id=6; -update noar ti set b1='YB136' where id=6; -update noar tt set b2='46' where id=6; -update noar ti set b2='46' where id=6; -update noar tt set b0='RYJ2E9MU62OCUPE3Q15NXSOWPJ' where id=7; -update noar ti set b0='RYJ2E9MU62OCUPE3Q15NXSOWPJ' where id=7; -update noar tt set b1='ANJ4DJQDDA1URAHXU9LB79V8DFCTTL' where id=7; -update noar ti set b1='ANJ4DJQDDA1URAHXU9LB79V8DFCTTL' where id=7; -update noar tt set b2='Q3I5RKQOAJN' where id=7; -update noar ti set b2='Q3I5RKQOAJN' where id=7; -update noar tt set b0='JVD6Y3GRUG' where id=8; -update noar ti set b0='JVD6Y3GRUG' where id=8; -update noar tt set b1='1QJ4SAN6Q' where id=8; -update noar ti set b1='1QJ4SAN6Q' where id=8; -update noar tt set b2='1CAWYWTL2Y1DZ4ER5JH1QXZ6RZKM6Y' where id=8; -update noar ti set b2='1CAWYWTL2Y1DZ4ER5JH1QXZ6RZKM6Y' where id=8; -update noar tt set b0='XFPY1Y0USG87O18SAACSQ' where id=9; -update noar ti set b0='XFPY1Y0USG87O18SAACSQ' where id=9; -update noar tt set b1='YX2JU92LEPE0PAH0JRMCG4C0I9XEU' where id=9; -update noar ti set b1='YX2JU92LEPE0PAH0JRMCG4C0I9XEU' where id=9; -update noar tt set b2='IUELD0ATIF341LF0RT86YJXO4F2' where id=9; -update noar ti set b2='IUELD0ATIF341LF0RT86YJXO4F2' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 text null, - b1 blob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='639LW3SSYAH9ZKNWZOOH9A5WRT8HDZ9' where id=1; -update noar ti set b0='639LW3SSYAH9ZKNWZOOH9A5WRT8HDZ9' where id=1; -update noar tt set b1='OO4NXLDGOLPR0JCAHG724X174EAH2EI6' where id=1; -update noar ti set b1='OO4NXLDGOLPR0JCAHG724X174EAH2EI6' where id=1; -update noar tt set b2='BWE' where id=1; -update noar ti set b2='BWE' where id=1; -update noar tt set b0='70RQS' where id=2; -update noar ti set b0='70RQS' where id=2; -update noar tt set b1='959F09ZP' where id=2; -update noar ti set b1='959F09ZP' where id=2; -update noar tt set b2='LUJ8FWF3JKHTX' where id=2; -update noar ti set b2='LUJ8FWF3JKHTX' where id=2; -update noar tt set b0='R501GHKFLRXMYI3EV6DAO6F6A5W90PF' where id=3; -update noar ti set b0='R501GHKFLRXMYI3EV6DAO6F6A5W90PF' where id=3; -update noar tt set b1='VHXCSQXP765CQE0X9W2D' where id=3; -update noar ti set b1='VHXCSQXP765CQE0X9W2D' where id=3; -update noar tt set b2='VV' where id=3; -update noar ti set b2='VV' where id=3; -update noar tt set b0='UMN6WVI' where id=4; -update noar ti set b0='UMN6WVI' where id=4; -update noar tt set b1='VSCSC' where id=4; -update noar ti set b1='VSCSC' where id=4; -update noar tt set b2='QQILSU15ZC13OFR' where id=4; -update noar ti set b2='QQILSU15ZC13OFR' where id=4; -update noar tt set b0='3TFOOURBK' where id=5; -update noar ti set b0='3TFOOURBK' where id=5; -update noar tt set b1='OJKB44779HHS85NU2QQPTMH8GACK' where id=5; -update noar ti set b1='OJKB44779HHS85NU2QQPTMH8GACK' where id=5; -update noar tt set b2='4QE0RQ' where id=5; -update noar ti set b2='4QE0RQ' where id=5; -update noar tt set b0='JWDMXPXGJZH5V6I6DG9N' where id=6; -update noar ti set b0='JWDMXPXGJZH5V6I6DG9N' where id=6; -update noar tt set b1='7P3JUWPHCRI8AYNVR6' where id=6; -update noar ti set b1='7P3JUWPHCRI8AYNVR6' where id=6; -update noar tt set b2='3NUA5984ZRUPB4GF' where id=6; -update noar ti set b2='3NUA5984ZRUPB4GF' where id=6; -update noar tt set b0='VQQFLPAJ735O8V1DLRVLX84D557O' where id=7; -update noar ti set b0='VQQFLPAJ735O8V1DLRVLX84D557O' where id=7; -update noar tt set b1='76IHAPI4OJVP' where id=7; -update noar ti set b1='76IHAPI4OJVP' where id=7; -update noar tt set b2='RV0GX0ET1ESQ9LD' where id=7; -update noar ti set b2='RV0GX0ET1ESQ9LD' where id=7; -update noar tt set b0='M725JA0F' where id=8; -update noar ti set b0='M725JA0F' where id=8; -update noar tt set b1='DGNJ34BNQV3ZRFVYQD' where id=8; -update noar ti set b1='DGNJ34BNQV3ZRFVYQD' where id=8; -update noar tt set b2='EXSXZ3T3' where id=8; -update noar ti set b2='EXSXZ3T3' where id=8; -update noar tt set b0='GLUJBG3CD6P9ASKO0IHK8NG' where id=9; -update noar ti set b0='GLUJBG3CD6P9ASKO0IHK8NG' where id=9; -update noar tt set b1='XF' where id=9; -update noar ti set b1='XF' where id=9; -update noar tt set b2='01GLNOYMINL2LWTP14XTMQP5ZCD82NQD' where id=9; -update noar ti set b2='01GLNOYMINL2LWTP14XTMQP5ZCD82NQD' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 text not null, - b1 blob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='CVK0WBAQCY9D0VNT' where id=1; -update noar ti set b0='CVK0WBAQCY9D0VNT' where id=1; -update noar tt set b1='1GNE' where id=1; -update noar ti set b1='1GNE' where id=1; -update noar tt set b2='GMW1G9UIPYXAHTB4DNFEFQK5DD' where id=1; -update noar ti set b2='GMW1G9UIPYXAHTB4DNFEFQK5DD' where id=1; -update noar tt set b0='N7C0NKZFYQTI4DVBAWDS' where id=2; -update noar ti set b0='N7C0NKZFYQTI4DVBAWDS' where id=2; -update noar tt set b1='V8M4JV7Z91G9FM' where id=2; -update noar ti set b1='V8M4JV7Z91G9FM' where id=2; -update noar tt set b2='OC1KN7W3GZTGU8H5O' where id=2; -update noar ti set b2='OC1KN7W3GZTGU8H5O' where id=2; -update noar tt set b0='RA4XEY38I' where id=3; -update noar ti set b0='RA4XEY38I' where id=3; -update noar tt set b1='4067UUNNJ2Z1OMDG902WZ' where id=3; -update noar ti set b1='4067UUNNJ2Z1OMDG902WZ' where id=3; -update noar tt set b2='Z8Q7X1864VLQLA44K1OLU7HR7P5C' where id=3; -update noar ti set b2='Z8Q7X1864VLQLA44K1OLU7HR7P5C' where id=3; -update noar tt set b0='MKXU68RGV2JFUBLAFKW' where id=4; -update noar ti set b0='MKXU68RGV2JFUBLAFKW' where id=4; -update noar tt set b1='WY' where id=4; -update noar ti set b1='WY' where id=4; -update noar tt set b2='94PLXX31OLV9ZNOKKNF4QQJCPZC1RZ64' where id=4; -update noar ti set b2='94PLXX31OLV9ZNOKKNF4QQJCPZC1RZ64' where id=4; -update noar tt set b0='EVSIMUTGQJ8H2BDE3W4NU0RB48WZEIF3' where id=5; -update noar ti set b0='EVSIMUTGQJ8H2BDE3W4NU0RB48WZEIF3' where id=5; -update noar tt set b1='KBFS7C9CW7VTA8FVGRC5GWT4TRCB0KQO' where id=5; -update noar ti set b1='KBFS7C9CW7VTA8FVGRC5GWT4TRCB0KQO' where id=5; -update noar tt set b2='9CE3ITZNPH4THWMAM69F' where id=5; -update noar ti set b2='9CE3ITZNPH4THWMAM69F' where id=5; -update noar tt set b0='2AJ1IT271KPC49SNXMPLWI8' where id=6; -update noar ti set b0='2AJ1IT271KPC49SNXMPLWI8' where id=6; -update noar tt set b1='H68KJGZZ82QT0' where id=6; -update noar ti set b1='H68KJGZZ82QT0' where id=6; -update noar tt set b2='DRF8L7I40BJ68OXRSMC2MQV' where id=6; -update noar ti set b2='DRF8L7I40BJ68OXRSMC2MQV' where id=6; -update noar tt set b0='8VDUN8L' where id=7; -update noar ti set b0='8VDUN8L' where id=7; -update noar tt set b1='DQYXN1SVB' where id=7; -update noar ti set b1='DQYXN1SVB' where id=7; -update noar tt set b2='DFZQS9F1N3XSRS9CTCR' where id=7; -update noar ti set b2='DFZQS9F1N3XSRS9CTCR' where id=7; -update noar tt set b0='YUDJ16IKZSM77ZYJMA3XEJAPG1' where id=8; -update noar ti set b0='YUDJ16IKZSM77ZYJMA3XEJAPG1' where id=8; -update noar tt set b1='PEDQ01X' where id=8; -update noar ti set b1='PEDQ01X' where id=8; -update noar tt set b2='OB6UCNX3OLZPPGREZT5XPJ4' where id=8; -update noar ti set b2='OB6UCNX3OLZPPGREZT5XPJ4' where id=8; -update noar tt set b0='JDG1OW' where id=9; -update noar ti set b0='JDG1OW' where id=9; -update noar tt set b1='P5UQAPXFURKWC2VAIEZBHBIIU8' where id=9; -update noar ti set b1='P5UQAPXFURKWC2VAIEZBHBIIU8' where id=9; -update noar tt set b2='27' where id=9; -update noar ti set b2='27' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 text null, - b1 blob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='6604SEUPOJ1NH' where id=1; -update noar ti set b0='6604SEUPOJ1NH' where id=1; -update noar tt set b1='U9UKP73' where id=1; -update noar ti set b1='U9UKP73' where id=1; -update noar tt set b2='D20SE4B542DH5VQNU20KOSF6' where id=1; -update noar ti set b2='D20SE4B542DH5VQNU20KOSF6' where id=1; -update noar tt set b0='NF9XX' where id=2; -update noar ti set b0='NF9XX' where id=2; -update noar tt set b1='24ZM1CL7P' where id=2; -update noar ti set b1='24ZM1CL7P' where id=2; -update noar tt set b2='GIV9E0CEGWFO2APSS62LB2YDOU' where id=2; -update noar ti set b2='GIV9E0CEGWFO2APSS62LB2YDOU' where id=2; -update noar tt set b0='7FYNCVTSF75RXRBU94F3ILDL25GWMF' where id=3; -update noar ti set b0='7FYNCVTSF75RXRBU94F3ILDL25GWMF' where id=3; -update noar tt set b1='TM' where id=3; -update noar ti set b1='TM' where id=3; -update noar tt set b2='BZ0PGFK3NFMCWN5A57HD0QT777TO4' where id=3; -update noar ti set b2='BZ0PGFK3NFMCWN5A57HD0QT777TO4' where id=3; -update noar tt set b0='LMMPIO1Z3' where id=4; -update noar ti set b0='LMMPIO1Z3' where id=4; -update noar tt set b1='CPKDUI5UVT37Q2WF0UICR4T' where id=4; -update noar ti set b1='CPKDUI5UVT37Q2WF0UICR4T' where id=4; -update noar tt set b2='PXZRXSAO7R4LK5AG' where id=4; -update noar ti set b2='PXZRXSAO7R4LK5AG' where id=4; -update noar tt set b0='7SWE1SWALSTRY' where id=5; -update noar ti set b0='7SWE1SWALSTRY' where id=5; -update noar tt set b1='8IAPWSFR66EV4G' where id=5; -update noar ti set b1='8IAPWSFR66EV4G' where id=5; -update noar tt set b2='WLXCIO2HMZTHQ752H' where id=5; -update noar ti set b2='WLXCIO2HMZTHQ752H' where id=5; -update noar tt set b0='X1K5ULAKDCTH' where id=6; -update noar ti set b0='X1K5ULAKDCTH' where id=6; -update noar tt set b1='VU5GM75G7X5RBO8BSBYBUPEQ13V70R' where id=6; -update noar ti set b1='VU5GM75G7X5RBO8BSBYBUPEQ13V70R' where id=6; -update noar tt set b2='OSZE1IM69X' where id=6; -update noar ti set b2='OSZE1IM69X' where id=6; -update noar tt set b0='N4G6CRZX4K7YQ25ZEMGR674U9EFAPYKF' where id=7; -update noar ti set b0='N4G6CRZX4K7YQ25ZEMGR674U9EFAPYKF' where id=7; -update noar tt set b1='F8K1ETN3HQ62M' where id=7; -update noar ti set b1='F8K1ETN3HQ62M' where id=7; -update noar tt set b2='J8B5XCR' where id=7; -update noar ti set b2='J8B5XCR' where id=7; -update noar tt set b0='EGGSUMHTUZ2Z49D0P2NNMWPNU29' where id=8; -update noar ti set b0='EGGSUMHTUZ2Z49D0P2NNMWPNU29' where id=8; -update noar tt set b1='TSP0V0F7YFFP1KC' where id=8; -update noar ti set b1='TSP0V0F7YFFP1KC' where id=8; -update noar tt set b2='X6VM77DCFUFWE9OME' where id=8; -update noar ti set b2='X6VM77DCFUFWE9OME' where id=8; -update noar tt set b0='F695SRM8F6RMKMTDGEUWRWQIUSIBJZ' where id=9; -update noar ti set b0='F695SRM8F6RMKMTDGEUWRWQIUSIBJZ' where id=9; -update noar tt set b1='XP427W4M6C7JWKLNHC39VH6E2QQVXW23' where id=9; -update noar ti set b1='XP427W4M6C7JWKLNHC39VH6E2QQVXW23' where id=9; -update noar tt set b2='PL4S46' where id=9; -update noar ti set b2='PL4S46' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 text not null, - b1 blob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='ZPW4ZC0FLWL' where id=1; -update noar ti set b0='ZPW4ZC0FLWL' where id=1; -update noar tt set b1='HRCFD' where id=1; -update noar ti set b1='HRCFD' where id=1; -update noar tt set b2='XMYRIB8X7DBYPENWR0E4N90SN27517W7' where id=1; -update noar ti set b2='XMYRIB8X7DBYPENWR0E4N90SN27517W7' where id=1; -update noar tt set b0='ANWYLJ7F3OVWYZZ15V27SZV1C2' where id=2; -update noar ti set b0='ANWYLJ7F3OVWYZZ15V27SZV1C2' where id=2; -update noar tt set b1='PBBDLSO9N7' where id=2; -update noar ti set b1='PBBDLSO9N7' where id=2; -update noar tt set b2='B4PBXG3NFGWOYQ5G6R1CSB' where id=2; -update noar ti set b2='B4PBXG3NFGWOYQ5G6R1CSB' where id=2; -update noar tt set b0='PENOUEMLJ5B1RC9L' where id=3; -update noar ti set b0='PENOUEMLJ5B1RC9L' where id=3; -update noar tt set b1='W95CKPSD7LJZNZEOPYDT3U' where id=3; -update noar ti set b1='W95CKPSD7LJZNZEOPYDT3U' where id=3; -update noar tt set b2='AO2ZUAJ44T3J' where id=3; -update noar ti set b2='AO2ZUAJ44T3J' where id=3; -update noar tt set b0='639I9XEB8NUM31TDPVVXPNANX3RSWH' where id=4; -update noar ti set b0='639I9XEB8NUM31TDPVVXPNANX3RSWH' where id=4; -update noar tt set b1='FZTY6' where id=4; -update noar ti set b1='FZTY6' where id=4; -update noar tt set b2='SEUWCXV7KAP' where id=4; -update noar ti set b2='SEUWCXV7KAP' where id=4; -update noar tt set b0='7NJI84HPMG99STTH370A3VVPULZE' where id=5; -update noar ti set b0='7NJI84HPMG99STTH370A3VVPULZE' where id=5; -update noar tt set b1='DMS1X1CR52AS25OOABXADW' where id=5; -update noar ti set b1='DMS1X1CR52AS25OOABXADW' where id=5; -update noar tt set b2='IME633' where id=5; -update noar ti set b2='IME633' where id=5; -update noar tt set b0='ZACORRE3QOAL71KOB4D7AK2UXXESWF' where id=6; -update noar ti set b0='ZACORRE3QOAL71KOB4D7AK2UXXESWF' where id=6; -update noar tt set b1='8S7W28XKIMSS085OXY4VCMXD49AXN' where id=6; -update noar ti set b1='8S7W28XKIMSS085OXY4VCMXD49AXN' where id=6; -update noar tt set b2='L91NFDQTXW849L0TDVC8QKSD9SCR6' where id=6; -update noar ti set b2='L91NFDQTXW849L0TDVC8QKSD9SCR6' where id=6; -update noar tt set b0='9GZG8PCEQNFJU7EQLI9ARFGST' where id=7; -update noar ti set b0='9GZG8PCEQNFJU7EQLI9ARFGST' where id=7; -update noar tt set b1='IX16SA4' where id=7; -update noar ti set b1='IX16SA4' where id=7; -update noar tt set b2='VG4EI3Q1H' where id=7; -update noar ti set b2='VG4EI3Q1H' where id=7; -update noar tt set b0='MY8HU0U2WH38W' where id=8; -update noar ti set b0='MY8HU0U2WH38W' where id=8; -update noar tt set b1='V' where id=8; -update noar ti set b1='V' where id=8; -update noar tt set b2='U5YFNFL3RU9794DGIG2E6KZW85QPLM' where id=8; -update noar ti set b2='U5YFNFL3RU9794DGIG2E6KZW85QPLM' where id=8; -update noar tt set b0='JE94WZHA6G75VPEXZAVV' where id=9; -update noar ti set b0='JE94WZHA6G75VPEXZAVV' where id=9; -update noar tt set b1='3QT5' where id=9; -update noar ti set b1='3QT5' where id=9; -update noar tt set b2='8HUO9PI' where id=9; -update noar ti set b2='8HUO9PI' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 text null, - b1 blob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='Z0YMM5JM2NXUZRYPR' where id=1; -update noar ti set b0='Z0YMM5JM2NXUZRYPR' where id=1; -update noar tt set b1='ZI4QU' where id=1; -update noar ti set b1='ZI4QU' where id=1; -update noar tt set b2='IWLYQGF4F9XR' where id=1; -update noar ti set b2='IWLYQGF4F9XR' where id=1; -update noar tt set b0='8DF7PDUAK1Q8JO08I' where id=2; -update noar ti set b0='8DF7PDUAK1Q8JO08I' where id=2; -update noar tt set b1='CZ53T' where id=2; -update noar ti set b1='CZ53T' where id=2; -update noar tt set b2='2C8CV37B302RT4BES' where id=2; -update noar ti set b2='2C8CV37B302RT4BES' where id=2; -update noar tt set b0='GHYTKCC1RU62343XDLQ' where id=3; -update noar ti set b0='GHYTKCC1RU62343XDLQ' where id=3; -update noar tt set b1='ZPIC05VC4073GRPEVDLU1YY097ZQ' where id=3; -update noar ti set b1='ZPIC05VC4073GRPEVDLU1YY097ZQ' where id=3; -update noar tt set b2='68Y8EOS4ATCPDD' where id=3; -update noar ti set b2='68Y8EOS4ATCPDD' where id=3; -update noar tt set b0='TVO3MA44RIQC7B57ZSBDHVBG49JQEYJ' where id=4; -update noar ti set b0='TVO3MA44RIQC7B57ZSBDHVBG49JQEYJ' where id=4; -update noar tt set b1='2MF3' where id=4; -update noar ti set b1='2MF3' where id=4; -update noar tt set b2='HKSV7BZFVNLUXJU6OGVPGYRN' where id=4; -update noar ti set b2='HKSV7BZFVNLUXJU6OGVPGYRN' where id=4; -update noar tt set b0='BDC859S7' where id=5; -update noar ti set b0='BDC859S7' where id=5; -update noar tt set b1='AL3TQ1FEOB29PY811DZDD7L' where id=5; -update noar ti set b1='AL3TQ1FEOB29PY811DZDD7L' where id=5; -update noar tt set b2='ISINVKF23GAJLFF8KEC2FCY0' where id=5; -update noar ti set b2='ISINVKF23GAJLFF8KEC2FCY0' where id=5; -update noar tt set b0='NLJX7SF5ILDY6SHUPBFJLU' where id=6; -update noar ti set b0='NLJX7SF5ILDY6SHUPBFJLU' where id=6; -update noar tt set b1='NYE6E34KK7MJFTIC6UC8ZHUQ0H' where id=6; -update noar ti set b1='NYE6E34KK7MJFTIC6UC8ZHUQ0H' where id=6; -update noar tt set b2='ZR' where id=6; -update noar ti set b2='ZR' where id=6; -update noar tt set b0='7U3BBQI5DH4H' where id=7; -update noar ti set b0='7U3BBQI5DH4H' where id=7; -update noar tt set b1='MPYYN6Y92SG6ADA6WOBB9DS1RBF1E2' where id=7; -update noar ti set b1='MPYYN6Y92SG6ADA6WOBB9DS1RBF1E2' where id=7; -update noar tt set b2='P911GC' where id=7; -update noar ti set b2='P911GC' where id=7; -update noar tt set b0='YXYGPU9KQUXG' where id=8; -update noar ti set b0='YXYGPU9KQUXG' where id=8; -update noar tt set b1='15W4' where id=8; -update noar ti set b1='15W4' where id=8; -update noar tt set b2='22MEOHC9T3BTK0VPSVOPH9LR' where id=8; -update noar ti set b2='22MEOHC9T3BTK0VPSVOPH9LR' where id=8; -update noar tt set b0='JILIU' where id=9; -update noar ti set b0='JILIU' where id=9; -update noar tt set b1='O2GGP60RF2R7W4Z3R' where id=9; -update noar ti set b1='O2GGP60RF2R7W4Z3R' where id=9; -update noar tt set b2='7' where id=9; -update noar ti set b2='7' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 text not null, - b1 blob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='OEWYKUULY0Q7E3Y1NU8LX1EF2P4R6PD' where id=1; -update noar ti set b0='OEWYKUULY0Q7E3Y1NU8LX1EF2P4R6PD' where id=1; -update noar tt set b1='DN' where id=1; -update noar ti set b1='DN' where id=1; -update noar tt set b2='P7QT77VLUR2BGCXW9M1' where id=1; -update noar ti set b2='P7QT77VLUR2BGCXW9M1' where id=1; -update noar tt set b0='FPV99KYKUFTOQU' where id=2; -update noar ti set b0='FPV99KYKUFTOQU' where id=2; -update noar tt set b1='AY25HWDKZFVHYI4KUFOOLBR' where id=2; -update noar ti set b1='AY25HWDKZFVHYI4KUFOOLBR' where id=2; -update noar tt set b2='KWWNEU9SU8N9JLPH6D0' where id=2; -update noar ti set b2='KWWNEU9SU8N9JLPH6D0' where id=2; -update noar tt set b0='V34O7O5F7TC89GWNXK14A5WS' where id=3; -update noar ti set b0='V34O7O5F7TC89GWNXK14A5WS' where id=3; -update noar tt set b1='JWASTWP6EIIOH609BA7LX7CQI' where id=3; -update noar ti set b1='JWASTWP6EIIOH609BA7LX7CQI' where id=3; -update noar tt set b2='YIY0HZBFA' where id=3; -update noar ti set b2='YIY0HZBFA' where id=3; -update noar tt set b0='8H7DXS102TU3IXV0CCIZJXK' where id=4; -update noar ti set b0='8H7DXS102TU3IXV0CCIZJXK' where id=4; -update noar tt set b1='W' where id=4; -update noar ti set b1='W' where id=4; -update noar tt set b2='6QPG4F8JY0XBI5ZUCY4' where id=4; -update noar ti set b2='6QPG4F8JY0XBI5ZUCY4' where id=4; -update noar tt set b0='AW2KK' where id=5; -update noar ti set b0='AW2KK' where id=5; -update noar tt set b1='TJ6S4ZFS4486CBCD6AXJFI' where id=5; -update noar ti set b1='TJ6S4ZFS4486CBCD6AXJFI' where id=5; -update noar tt set b2='IS5W52VX669CAB8PJSSJMJ6ZQQ741QH' where id=5; -update noar ti set b2='IS5W52VX669CAB8PJSSJMJ6ZQQ741QH' where id=5; -update noar tt set b0='7A6Z6VEZJRSM' where id=6; -update noar ti set b0='7A6Z6VEZJRSM' where id=6; -update noar tt set b1='G696QBIK2QTVEVIZOWG9E2S' where id=6; -update noar ti set b1='G696QBIK2QTVEVIZOWG9E2S' where id=6; -update noar tt set b2='IZ073IH8YIOA' where id=6; -update noar ti set b2='IZ073IH8YIOA' where id=6; -update noar tt set b0='22I7VKEJDLR8WR891QMXIK8B0ESL70L' where id=7; -update noar ti set b0='22I7VKEJDLR8WR891QMXIK8B0ESL70L' where id=7; -update noar tt set b1='KZ4P7UQ391WEFSY797W2M3Q8PU' where id=7; -update noar ti set b1='KZ4P7UQ391WEFSY797W2M3Q8PU' where id=7; -update noar tt set b2='UD4U6MQMX89' where id=7; -update noar ti set b2='UD4U6MQMX89' where id=7; -update noar tt set b0='N026JXH0BVWP' where id=8; -update noar ti set b0='N026JXH0BVWP' where id=8; -update noar tt set b1='FYTUD' where id=8; -update noar ti set b1='FYTUD' where id=8; -update noar tt set b2='54' where id=8; -update noar ti set b2='54' where id=8; -update noar tt set b0='C1BT' where id=9; -update noar ti set b0='C1BT' where id=9; -update noar tt set b1='V0' where id=9; -update noar ti set b1='V0' where id=9; -update noar tt set b2='S6MOT0M8JOH8JN3DPS7P3A' where id=9; -update noar ti set b2='S6MOT0M8JOH8JN3DPS7P3A' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 text null, - b1 blob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='ZBRG79B9G5RZEND4O7GQ9L' where id=1; -update noar ti set b0='ZBRG79B9G5RZEND4O7GQ9L' where id=1; -update noar tt set b1='40M' where id=1; -update noar ti set b1='40M' where id=1; -update noar tt set b2='AGW99IRGKV36OHW186A9CDMF1W' where id=1; -update noar ti set b2='AGW99IRGKV36OHW186A9CDMF1W' where id=1; -update noar tt set b0='4RHC85920A6RF' where id=2; -update noar ti set b0='4RHC85920A6RF' where id=2; -update noar tt set b1='X613EFQG9X5G7B92Y8M5U3A' where id=2; -update noar ti set b1='X613EFQG9X5G7B92Y8M5U3A' where id=2; -update noar tt set b2='ZXAKH' where id=2; -update noar ti set b2='ZXAKH' where id=2; -update noar tt set b0='S1DWBV0EOJCSXTWZ2P8TX4B' where id=3; -update noar ti set b0='S1DWBV0EOJCSXTWZ2P8TX4B' where id=3; -update noar tt set b1='O0DDZ53H3OKX0KDO6MK4OR' where id=3; -update noar ti set b1='O0DDZ53H3OKX0KDO6MK4OR' where id=3; -update noar tt set b2='J18WK' where id=3; -update noar ti set b2='J18WK' where id=3; -update noar tt set b0='969OH' where id=4; -update noar ti set b0='969OH' where id=4; -update noar tt set b1='DWJCHH7TVC3CWTBCPO6R0WK' where id=4; -update noar ti set b1='DWJCHH7TVC3CWTBCPO6R0WK' where id=4; -update noar tt set b2='GTT15TVKP' where id=4; -update noar ti set b2='GTT15TVKP' where id=4; -update noar tt set b0='25IL7ZXWJN9YWSPEZ26P8CSUKW0E' where id=5; -update noar ti set b0='25IL7ZXWJN9YWSPEZ26P8CSUKW0E' where id=5; -update noar tt set b1='LLC89' where id=5; -update noar ti set b1='LLC89' where id=5; -update noar tt set b2='CRY8702G6LVMB' where id=5; -update noar ti set b2='CRY8702G6LVMB' where id=5; -update noar tt set b0='HFE' where id=6; -update noar ti set b0='HFE' where id=6; -update noar tt set b1='EBWZ' where id=6; -update noar ti set b1='EBWZ' where id=6; -update noar tt set b2='FD' where id=6; -update noar ti set b2='FD' where id=6; -update noar tt set b0='LP3QOJEELP' where id=7; -update noar ti set b0='LP3QOJEELP' where id=7; -update noar tt set b1='R2OPGOQETJP' where id=7; -update noar ti set b1='R2OPGOQETJP' where id=7; -update noar tt set b2='2C2VXCUH1B9XL3YFW3NNJ4QNMB09QF' where id=7; -update noar ti set b2='2C2VXCUH1B9XL3YFW3NNJ4QNMB09QF' where id=7; -update noar tt set b0='7WVMQOGLF632B99IG3UDBPWR5RUL58QM' where id=8; -update noar ti set b0='7WVMQOGLF632B99IG3UDBPWR5RUL58QM' where id=8; -update noar tt set b1='GJBCRUWTQXDBEL1G7JU9MYP5AV7L0D8' where id=8; -update noar ti set b1='GJBCRUWTQXDBEL1G7JU9MYP5AV7L0D8' where id=8; -update noar tt set b2='T2EAB1E9L3MD4BIK1' where id=8; -update noar ti set b2='T2EAB1E9L3MD4BIK1' where id=8; -update noar tt set b0='M40E8H6JM6' where id=9; -update noar ti set b0='M40E8H6JM6' where id=9; -update noar tt set b1='HTYWYY9D0BSZMO0XRAZG2LXZMWS' where id=9; -update noar ti set b1='HTYWYY9D0BSZMO0XRAZG2LXZMWS' where id=9; -update noar tt set b2='XUB8ZSSJNJDAJ45PVYXN4GR2O1GBQT9' where id=9; -update noar ti set b2='XUB8ZSSJNJDAJ45PVYXN4GR2O1GBQT9' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 text not null, - b1 blob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='ECB3EOOST' where id=1; -update noar ti set b0='ECB3EOOST' where id=1; -update noar tt set b1='3' where id=1; -update noar ti set b1='3' where id=1; -update noar tt set b2='DT7AZRXV235GNTCG' where id=1; -update noar ti set b2='DT7AZRXV235GNTCG' where id=1; -update noar tt set b0='AJ' where id=2; -update noar ti set b0='AJ' where id=2; -update noar tt set b1='ZKRBO8BSF1QTD1O2YH8S3EQ' where id=2; -update noar ti set b1='ZKRBO8BSF1QTD1O2YH8S3EQ' where id=2; -update noar tt set b2='SWW2Y9S1NJ9CEEPL4X798V9' where id=2; -update noar ti set b2='SWW2Y9S1NJ9CEEPL4X798V9' where id=2; -update noar tt set b0='6MNNRV73AF0VZ3Z' where id=3; -update noar ti set b0='6MNNRV73AF0VZ3Z' where id=3; -update noar tt set b1='WKI' where id=3; -update noar ti set b1='WKI' where id=3; -update noar tt set b2='LDO005JI41OV6K099DZJQ4IS85' where id=3; -update noar ti set b2='LDO005JI41OV6K099DZJQ4IS85' where id=3; -update noar tt set b0='FZRNQGH6GJAE4S1XGOKZFCOR0' where id=4; -update noar ti set b0='FZRNQGH6GJAE4S1XGOKZFCOR0' where id=4; -update noar tt set b1='Y9HQ8FFNO3E53VLIGW4Q' where id=4; -update noar ti set b1='Y9HQ8FFNO3E53VLIGW4Q' where id=4; -update noar tt set b2='51282NTOVOEY77F' where id=4; -update noar ti set b2='51282NTOVOEY77F' where id=4; -update noar tt set b0='AZN4K5RY2OK' where id=5; -update noar ti set b0='AZN4K5RY2OK' where id=5; -update noar tt set b1='ULQ1KDH8Q' where id=5; -update noar ti set b1='ULQ1KDH8Q' where id=5; -update noar tt set b2='B0O0E15KI' where id=5; -update noar ti set b2='B0O0E15KI' where id=5; -update noar tt set b0='D36PS8GP5A85BT4PWGACGLD' where id=6; -update noar ti set b0='D36PS8GP5A85BT4PWGACGLD' where id=6; -update noar tt set b1='HJA2EVLGSMIMW' where id=6; -update noar ti set b1='HJA2EVLGSMIMW' where id=6; -update noar tt set b2='4X' where id=6; -update noar ti set b2='4X' where id=6; -update noar tt set b0='TDSTY3C9AMSBLWX83U2CBPI46' where id=7; -update noar ti set b0='TDSTY3C9AMSBLWX83U2CBPI46' where id=7; -update noar tt set b1='QJQL6O7A4AH9YVGKD72IU9P' where id=7; -update noar ti set b1='QJQL6O7A4AH9YVGKD72IU9P' where id=7; -update noar tt set b2='DIP13EXSBZEEM0K8NR0W23631K1J' where id=7; -update noar ti set b2='DIP13EXSBZEEM0K8NR0W23631K1J' where id=7; -update noar tt set b0='UQK9W7AR0H3I4UFPNCF1' where id=8; -update noar ti set b0='UQK9W7AR0H3I4UFPNCF1' where id=8; -update noar tt set b1='HJAZ' where id=8; -update noar ti set b1='HJAZ' where id=8; -update noar tt set b2='A569YD19ZF23K67YWVY' where id=8; -update noar ti set b2='A569YD19ZF23K67YWVY' where id=8; -update noar tt set b0='8WQW4RKLPDM2NL9B484D1MBM6UGMB3B4' where id=9; -update noar ti set b0='8WQW4RKLPDM2NL9B484D1MBM6UGMB3B4' where id=9; -update noar tt set b1='BNKWZ' where id=9; -update noar ti set b1='BNKWZ' where id=9; -update noar tt set b2='AVV955VSW47QH1CI42D0JZPG5C' where id=9; -update noar ti set b2='AVV955VSW47QH1CI42D0JZPG5C' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 text null, - b1 blob null, - b2 text null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='NBT461F4JIGF6B3KY70D3HCE25HVJ' where id=1; -update noar ti set b0='NBT461F4JIGF6B3KY70D3HCE25HVJ' where id=1; -update noar tt set b1='L41VQCK6DMMFND1KRV45H4' where id=1; -update noar ti set b1='L41VQCK6DMMFND1KRV45H4' where id=1; -update noar tt set b2='761E2M' where id=1; -update noar ti set b2='761E2M' where id=1; -update noar tt set b0='823Y9MXU' where id=2; -update noar ti set b0='823Y9MXU' where id=2; -update noar tt set b1='W165L' where id=2; -update noar ti set b1='W165L' where id=2; -update noar tt set b2='EJ66JI8AEI31YA' where id=2; -update noar ti set b2='EJ66JI8AEI31YA' where id=2; -update noar tt set b0='P7TRKT' where id=3; -update noar ti set b0='P7TRKT' where id=3; -update noar tt set b1='7RXAVJO' where id=3; -update noar ti set b1='7RXAVJO' where id=3; -update noar tt set b2='N' where id=3; -update noar ti set b2='N' where id=3; -update noar tt set b0='C24JOPE1FAY8WG39A4A0VNN85MMQPCN' where id=4; -update noar ti set b0='C24JOPE1FAY8WG39A4A0VNN85MMQPCN' where id=4; -update noar tt set b1='L0BYK' where id=4; -update noar ti set b1='L0BYK' where id=4; -update noar tt set b2='R' where id=4; -update noar ti set b2='R' where id=4; -update noar tt set b0='ZNPL0YRH2DX97MFQZDF5VH' where id=5; -update noar ti set b0='ZNPL0YRH2DX97MFQZDF5VH' where id=5; -update noar tt set b1='U2PAATZ1CQER202LLVBGE6A4HFDNOTH' where id=5; -update noar ti set b1='U2PAATZ1CQER202LLVBGE6A4HFDNOTH' where id=5; -update noar tt set b2='QRFL' where id=5; -update noar ti set b2='QRFL' where id=5; -update noar tt set b0='4WF5ZDFTYJ5TTDBSLLQ' where id=6; -update noar ti set b0='4WF5ZDFTYJ5TTDBSLLQ' where id=6; -update noar tt set b1='MTSA8YVP7XR0FHYE1' where id=6; -update noar ti set b1='MTSA8YVP7XR0FHYE1' where id=6; -update noar tt set b2='8MCJOJTMW7R42ALI0LZPVKJLYDMVZ9' where id=6; -update noar ti set b2='8MCJOJTMW7R42ALI0LZPVKJLYDMVZ9' where id=6; -update noar tt set b0='5CZIS' where id=7; -update noar ti set b0='5CZIS' where id=7; -update noar tt set b1='867FEWDBMDXK81MP8DQNH5CU4HT986AN' where id=7; -update noar ti set b1='867FEWDBMDXK81MP8DQNH5CU4HT986AN' where id=7; -update noar tt set b2='G43YTE6FP1WXH9JBV' where id=7; -update noar ti set b2='G43YTE6FP1WXH9JBV' where id=7; -update noar tt set b0='65K8A6QLXGX6439IDJ433TOO5AA' where id=8; -update noar ti set b0='65K8A6QLXGX6439IDJ433TOO5AA' where id=8; -update noar tt set b1='9W76O63W7V4Y0Q31U1WEHQR7' where id=8; -update noar ti set b1='9W76O63W7V4Y0Q31U1WEHQR7' where id=8; -update noar tt set b2='NLBIYQ8G3FZXP' where id=8; -update noar ti set b2='NLBIYQ8G3FZXP' where id=8; -update noar tt set b0='8M9OLVIMC4IPQ9' where id=9; -update noar ti set b0='8M9OLVIMC4IPQ9' where id=9; -update noar tt set b1='IA2SK9O1XLB2NVLOWQDECFEZ6WN6' where id=9; -update noar ti set b1='IA2SK9O1XLB2NVLOWQDECFEZ6WN6' where id=9; -update noar tt set b2='Y6HM4KI0DIOAST57MU29OXNVP8' where id=9; -update noar ti set b2='Y6HM4KI0DIOAST57MU29OXNVP8' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 text not null, - b1 blob not null, - b2 text not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='9220T0A2HMH8PIR46F' where id=1; -update noar ti set b0='9220T0A2HMH8PIR46F' where id=1; -update noar tt set b1='QN7FF6OFKXBZC83EEVMF93YIHE' where id=1; -update noar ti set b1='QN7FF6OFKXBZC83EEVMF93YIHE' where id=1; -update noar tt set b2='DG71G8XOKJWL3PXPGWUIIXRQP4H' where id=1; -update noar ti set b2='DG71G8XOKJWL3PXPGWUIIXRQP4H' where id=1; -update noar tt set b0='C8IGFNSQMW7T5XSRPR3J99D22P' where id=2; -update noar ti set b0='C8IGFNSQMW7T5XSRPR3J99D22P' where id=2; -update noar tt set b1='PSB6Q2NC' where id=2; -update noar ti set b1='PSB6Q2NC' where id=2; -update noar tt set b2='RG0K57VG0HQUOUD0' where id=2; -update noar ti set b2='RG0K57VG0HQUOUD0' where id=2; -update noar tt set b0='VFXLJ1AM44AG1UHGDRYDU3GRG7KON4ZF' where id=3; -update noar ti set b0='VFXLJ1AM44AG1UHGDRYDU3GRG7KON4ZF' where id=3; -update noar tt set b1='ELHQO7Q7ZSIH7TB52VZZVY9' where id=3; -update noar ti set b1='ELHQO7Q7ZSIH7TB52VZZVY9' where id=3; -update noar tt set b2='72ST27NWEE6HBXYW051' where id=3; -update noar ti set b2='72ST27NWEE6HBXYW051' where id=3; -update noar tt set b0='XB' where id=4; -update noar ti set b0='XB' where id=4; -update noar tt set b1='59LZB2HU5IE2F5' where id=4; -update noar ti set b1='59LZB2HU5IE2F5' where id=4; -update noar tt set b2='M1VLCBAGLK6H1HXW' where id=4; -update noar ti set b2='M1VLCBAGLK6H1HXW' where id=4; -update noar tt set b0='VRJPWTGN' where id=5; -update noar ti set b0='VRJPWTGN' where id=5; -update noar tt set b1='QI8U81BF4LPXPIZYKK' where id=5; -update noar ti set b1='QI8U81BF4LPXPIZYKK' where id=5; -update noar tt set b2='82CDXLP59L5CKGP9BVO22B3J0GB0ZW' where id=5; -update noar ti set b2='82CDXLP59L5CKGP9BVO22B3J0GB0ZW' where id=5; -update noar tt set b0='02OYPKBNKR7E0Z1ZPBZDZ' where id=6; -update noar ti set b0='02OYPKBNKR7E0Z1ZPBZDZ' where id=6; -update noar tt set b1='9Z3WM5VSE' where id=6; -update noar ti set b1='9Z3WM5VSE' where id=6; -update noar tt set b2='63ZIB046VLTD4O5VPKX' where id=6; -update noar ti set b2='63ZIB046VLTD4O5VPKX' where id=6; -update noar tt set b0='MG5HS2' where id=7; -update noar ti set b0='MG5HS2' where id=7; -update noar tt set b1='5LIXBE4DGTF84UI7WRN8WB48LG94C' where id=7; -update noar ti set b1='5LIXBE4DGTF84UI7WRN8WB48LG94C' where id=7; -update noar tt set b2='X3HA80ZMJA6YR83XKMGGRIKIPG' where id=7; -update noar ti set b2='X3HA80ZMJA6YR83XKMGGRIKIPG' where id=7; -update noar tt set b0='KPWLLJG6B8L9VV' where id=8; -update noar ti set b0='KPWLLJG6B8L9VV' where id=8; -update noar tt set b1='0Z1AU57IVCBBFGX0ZBO' where id=8; -update noar ti set b1='0Z1AU57IVCBBFGX0ZBO' where id=8; -update noar tt set b2='YNCNTIX7KLQXD1' where id=8; -update noar ti set b2='YNCNTIX7KLQXD1' where id=8; -update noar tt set b0='U4QFAL1Y64SK2OJ0MH0NF' where id=9; -update noar ti set b0='U4QFAL1Y64SK2OJ0MH0NF' where id=9; -update noar tt set b1='IKS12Y0VM2' where id=9; -update noar ti set b1='IKS12Y0VM2' where id=9; -update noar tt set b2='1H6QA' where id=9; -update noar ti set b2='1H6QA' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 text null, - b1 mediumblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='X0S5ABI3AUYI83844TSV30978RGAXM' where id=1; -update noar ti set b0='X0S5ABI3AUYI83844TSV30978RGAXM' where id=1; -update noar tt set b1='YE8F7WZ2YPR4PUL2Q32SL5IA8' where id=1; -update noar ti set b1='YE8F7WZ2YPR4PUL2Q32SL5IA8' where id=1; -update noar tt set b2='NMP3QFUB3LZKUFS' where id=1; -update noar ti set b2='NMP3QFUB3LZKUFS' where id=1; -update noar tt set b0='HM48YMB8GUD7MHTFPZTB' where id=2; -update noar ti set b0='HM48YMB8GUD7MHTFPZTB' where id=2; -update noar tt set b1='KWBDN6VO7TRXXSNUS05IWZA850FS' where id=2; -update noar ti set b1='KWBDN6VO7TRXXSNUS05IWZA850FS' where id=2; -update noar tt set b2='1KH9YBYVOOST1712HSE0C96D4RJ6JM' where id=2; -update noar ti set b2='1KH9YBYVOOST1712HSE0C96D4RJ6JM' where id=2; -update noar tt set b0='WMG2UWPRYDO' where id=3; -update noar ti set b0='WMG2UWPRYDO' where id=3; -update noar tt set b1='T1IW3XTE281R5IGAB22VV88A0QB28IFN' where id=3; -update noar ti set b1='T1IW3XTE281R5IGAB22VV88A0QB28IFN' where id=3; -update noar tt set b2='TL0X2V9P577U3' where id=3; -update noar ti set b2='TL0X2V9P577U3' where id=3; -update noar tt set b0='XQU3M65OYG41OLHKRS4L' where id=4; -update noar ti set b0='XQU3M65OYG41OLHKRS4L' where id=4; -update noar tt set b1='HQ6J3M0SGEYYKBKUP52G6D59' where id=4; -update noar ti set b1='HQ6J3M0SGEYYKBKUP52G6D59' where id=4; -update noar tt set b2='26P8LE1L36' where id=4; -update noar ti set b2='26P8LE1L36' where id=4; -update noar tt set b0='YM77UE0' where id=5; -update noar ti set b0='YM77UE0' where id=5; -update noar tt set b1='Q0ALCATADV3XED' where id=5; -update noar ti set b1='Q0ALCATADV3XED' where id=5; -update noar tt set b2='HA9S7Y8TJJQ95S' where id=5; -update noar ti set b2='HA9S7Y8TJJQ95S' where id=5; -update noar tt set b0='UUD' where id=6; -update noar ti set b0='UUD' where id=6; -update noar tt set b1='IO3FHBCQ4CGWW' where id=6; -update noar ti set b1='IO3FHBCQ4CGWW' where id=6; -update noar tt set b2='J8CK17GJ8FOJ' where id=6; -update noar ti set b2='J8CK17GJ8FOJ' where id=6; -update noar tt set b0='6JDL18UKAH7TXORDN40Q' where id=7; -update noar ti set b0='6JDL18UKAH7TXORDN40Q' where id=7; -update noar tt set b1='87FZAU27' where id=7; -update noar ti set b1='87FZAU27' where id=7; -update noar tt set b2='WWQ2OS784LL8OGJTLN2QSBKZXCVB3A' where id=7; -update noar ti set b2='WWQ2OS784LL8OGJTLN2QSBKZXCVB3A' where id=7; -update noar tt set b0='UQYXETVAH8CZVRIUI1S' where id=8; -update noar ti set b0='UQYXETVAH8CZVRIUI1S' where id=8; -update noar tt set b1='S88GEIRLHWWG0Q' where id=8; -update noar ti set b1='S88GEIRLHWWG0Q' where id=8; -update noar tt set b2='1PLMDYYZJ2' where id=8; -update noar ti set b2='1PLMDYYZJ2' where id=8; -update noar tt set b0='B50CSRX8IIUOF7PL65MVCULH0WTRJ60' where id=9; -update noar ti set b0='B50CSRX8IIUOF7PL65MVCULH0WTRJ60' where id=9; -update noar tt set b1='SJD3MPLDIGV6IQE8' where id=9; -update noar ti set b1='SJD3MPLDIGV6IQE8' where id=9; -update noar tt set b2='CI2V0IC6FY0I4' where id=9; -update noar ti set b2='CI2V0IC6FY0I4' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 text not null, - b1 mediumblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='CJTE' where id=1; -update noar ti set b0='CJTE' where id=1; -update noar tt set b1='PYQ0MDVWL9EEJWAX9HC82' where id=1; -update noar ti set b1='PYQ0MDVWL9EEJWAX9HC82' where id=1; -update noar tt set b2='PPZZLUOUNT8C3JP44' where id=1; -update noar ti set b2='PPZZLUOUNT8C3JP44' where id=1; -update noar tt set b0='A4ZF0SL49YRGNKR4B34836CHQUC6PD0' where id=2; -update noar ti set b0='A4ZF0SL49YRGNKR4B34836CHQUC6PD0' where id=2; -update noar tt set b1='TP5W92IJKPCMCJNI6CQLW' where id=2; -update noar ti set b1='TP5W92IJKPCMCJNI6CQLW' where id=2; -update noar tt set b2='CS5UF' where id=2; -update noar ti set b2='CS5UF' where id=2; -update noar tt set b0='JZGUSQTIA5Z15LO2NMYPJ' where id=3; -update noar ti set b0='JZGUSQTIA5Z15LO2NMYPJ' where id=3; -update noar tt set b1='M8T' where id=3; -update noar ti set b1='M8T' where id=3; -update noar tt set b2='B8E4NGYG9LXNKSUO6S' where id=3; -update noar ti set b2='B8E4NGYG9LXNKSUO6S' where id=3; -update noar tt set b0='9YON3RE0W896TOFMDSF4OFCR3QEH' where id=4; -update noar ti set b0='9YON3RE0W896TOFMDSF4OFCR3QEH' where id=4; -update noar tt set b1='QACCCZ91KH0U1G21I4TCYQ4Y5' where id=4; -update noar ti set b1='QACCCZ91KH0U1G21I4TCYQ4Y5' where id=4; -update noar tt set b2='YPQN1PD04GSNH' where id=4; -update noar ti set b2='YPQN1PD04GSNH' where id=4; -update noar tt set b0='HFOVI3S23LZMOQ84N3L3U4CEZNTJ' where id=5; -update noar ti set b0='HFOVI3S23LZMOQ84N3L3U4CEZNTJ' where id=5; -update noar tt set b1='QG5NI275LUGTJ10C6U' where id=5; -update noar ti set b1='QG5NI275LUGTJ10C6U' where id=5; -update noar tt set b2='IE5USMKZNBCMKQHBZ10EWQRFIZX2S1' where id=5; -update noar ti set b2='IE5USMKZNBCMKQHBZ10EWQRFIZX2S1' where id=5; -update noar tt set b0='I6EVI' where id=6; -update noar ti set b0='I6EVI' where id=6; -update noar tt set b1='YMSRQSIS9R6AIX9M0QV' where id=6; -update noar ti set b1='YMSRQSIS9R6AIX9M0QV' where id=6; -update noar tt set b2='OGF' where id=6; -update noar ti set b2='OGF' where id=6; -update noar tt set b0='KP5VR5MK2WKAFW6YM7OJRU' where id=7; -update noar ti set b0='KP5VR5MK2WKAFW6YM7OJRU' where id=7; -update noar tt set b1='AX49E3OSHZ1DXX8FBODUPEQ' where id=7; -update noar ti set b1='AX49E3OSHZ1DXX8FBODUPEQ' where id=7; -update noar tt set b2='KHXKNFBOQ8M3Y5HSZJ' where id=7; -update noar ti set b2='KHXKNFBOQ8M3Y5HSZJ' where id=7; -update noar tt set b0='6IDJH8EZVIOFDTTPNOTGH9H1YKP7SVW7' where id=8; -update noar ti set b0='6IDJH8EZVIOFDTTPNOTGH9H1YKP7SVW7' where id=8; -update noar tt set b1='870PQEAXH6XU' where id=8; -update noar ti set b1='870PQEAXH6XU' where id=8; -update noar tt set b2='K3N4W0JN' where id=8; -update noar ti set b2='K3N4W0JN' where id=8; -update noar tt set b0='UA4OBVP' where id=9; -update noar ti set b0='UA4OBVP' where id=9; -update noar tt set b1='JFOUKEJFILNPC' where id=9; -update noar ti set b1='JFOUKEJFILNPC' where id=9; -update noar tt set b2='3J7KDIVWZEI1LTDRLQZH' where id=9; -update noar ti set b2='3J7KDIVWZEI1LTDRLQZH' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 text null, - b1 mediumblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='BF8FMI5OV3MNRME81W0TRC7XTQ7SBCBA' where id=1; -update noar ti set b0='BF8FMI5OV3MNRME81W0TRC7XTQ7SBCBA' where id=1; -update noar tt set b1='0S9BFER54JXZV' where id=1; -update noar ti set b1='0S9BFER54JXZV' where id=1; -update noar tt set b2='8H1M7N20Y8P3H80UMZ9M' where id=1; -update noar ti set b2='8H1M7N20Y8P3H80UMZ9M' where id=1; -update noar tt set b0='GHYTFR6FP6S0WJUNGE' where id=2; -update noar ti set b0='GHYTFR6FP6S0WJUNGE' where id=2; -update noar tt set b1='CCNSS' where id=2; -update noar ti set b1='CCNSS' where id=2; -update noar tt set b2='8O8TZ1RAZMM41CM' where id=2; -update noar ti set b2='8O8TZ1RAZMM41CM' where id=2; -update noar tt set b0='C2ESVEREHWQCQTOYGN6' where id=3; -update noar ti set b0='C2ESVEREHWQCQTOYGN6' where id=3; -update noar tt set b1='SANT9F' where id=3; -update noar ti set b1='SANT9F' where id=3; -update noar tt set b2='RGQYTEC8LSXXDHB3ABBP4U4C66ENGL1' where id=3; -update noar ti set b2='RGQYTEC8LSXXDHB3ABBP4U4C66ENGL1' where id=3; -update noar tt set b0='0VDZUGXVXAN4HW4A9ITEK2E209' where id=4; -update noar ti set b0='0VDZUGXVXAN4HW4A9ITEK2E209' where id=4; -update noar tt set b1='VEOSK9FXWFPW6U1KUF' where id=4; -update noar ti set b1='VEOSK9FXWFPW6U1KUF' where id=4; -update noar tt set b2='2JEOMXXOWTVU58XLY9NKA6VP' where id=4; -update noar ti set b2='2JEOMXXOWTVU58XLY9NKA6VP' where id=4; -update noar tt set b0='AAMQLFWQPZEC7XF77IC49B3YIFB' where id=5; -update noar ti set b0='AAMQLFWQPZEC7XF77IC49B3YIFB' where id=5; -update noar tt set b1='FIX' where id=5; -update noar ti set b1='FIX' where id=5; -update noar tt set b2='RAA95L9XGL7HY1SPB4PTQB97JD36N0' where id=5; -update noar ti set b2='RAA95L9XGL7HY1SPB4PTQB97JD36N0' where id=5; -update noar tt set b0='NIN0ME935VFQHL79UHMHVUMIX6OV4' where id=6; -update noar ti set b0='NIN0ME935VFQHL79UHMHVUMIX6OV4' where id=6; -update noar tt set b1='XFHGM' where id=6; -update noar ti set b1='XFHGM' where id=6; -update noar tt set b2='7NY2O3YR' where id=6; -update noar ti set b2='7NY2O3YR' where id=6; -update noar tt set b0='4TDJXIXKTGZTVP7FD9O6QWB' where id=7; -update noar ti set b0='4TDJXIXKTGZTVP7FD9O6QWB' where id=7; -update noar tt set b1='4JV4UC8Z2MMM0B4T9E7D6MC3NPYQXL8' where id=7; -update noar ti set b1='4JV4UC8Z2MMM0B4T9E7D6MC3NPYQXL8' where id=7; -update noar tt set b2='WEF5RKFXNTMBIQ06GJE5DQUV' where id=7; -update noar ti set b2='WEF5RKFXNTMBIQ06GJE5DQUV' where id=7; -update noar tt set b0='M8F9BRE7FG02AE2XMJKI4SGIMI65S' where id=8; -update noar ti set b0='M8F9BRE7FG02AE2XMJKI4SGIMI65S' where id=8; -update noar tt set b1='GK5WRIKSK4XUH2VRJVUFW' where id=8; -update noar ti set b1='GK5WRIKSK4XUH2VRJVUFW' where id=8; -update noar tt set b2='JTI37YQD0I2J' where id=8; -update noar ti set b2='JTI37YQD0I2J' where id=8; -update noar tt set b0='DQD9M7CWCBGS7NT1ZMEKF' where id=9; -update noar ti set b0='DQD9M7CWCBGS7NT1ZMEKF' where id=9; -update noar tt set b1='PBA1AEQJJCPGDV5E4' where id=9; -update noar ti set b1='PBA1AEQJJCPGDV5E4' where id=9; -update noar tt set b2='YZH1ZEZROAUD' where id=9; -update noar ti set b2='YZH1ZEZROAUD' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 text not null, - b1 mediumblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='2WI8IZ9' where id=1; -update noar ti set b0='2WI8IZ9' where id=1; -update noar tt set b1='VIVEZ0Y3JU9E8OH4C88TUS0LZIVR' where id=1; -update noar ti set b1='VIVEZ0Y3JU9E8OH4C88TUS0LZIVR' where id=1; -update noar tt set b2='8CFENFZ7FR5UOSZ7CNHTPX5UFJ1AC5I' where id=1; -update noar ti set b2='8CFENFZ7FR5UOSZ7CNHTPX5UFJ1AC5I' where id=1; -update noar tt set b0='X8LZ6OL0VQ6C' where id=2; -update noar ti set b0='X8LZ6OL0VQ6C' where id=2; -update noar tt set b1='XNIIY2XNSQTV8I8FBONZIAX' where id=2; -update noar ti set b1='XNIIY2XNSQTV8I8FBONZIAX' where id=2; -update noar tt set b2='S4J8EKR2SJXDT1K7VK4K2CAAB' where id=2; -update noar ti set b2='S4J8EKR2SJXDT1K7VK4K2CAAB' where id=2; -update noar tt set b0='W9PTO2QCQ8R' where id=3; -update noar ti set b0='W9PTO2QCQ8R' where id=3; -update noar tt set b1='AEDBOLJJ' where id=3; -update noar ti set b1='AEDBOLJJ' where id=3; -update noar tt set b2='8D8PFX89G0EW4R0R3XJG9CC1ASR' where id=3; -update noar ti set b2='8D8PFX89G0EW4R0R3XJG9CC1ASR' where id=3; -update noar tt set b0='LPRIH2I' where id=4; -update noar ti set b0='LPRIH2I' where id=4; -update noar tt set b1='IH12BTA0NKKFEQNQV4XMM' where id=4; -update noar ti set b1='IH12BTA0NKKFEQNQV4XMM' where id=4; -update noar tt set b2='YHOWHQSF' where id=4; -update noar ti set b2='YHOWHQSF' where id=4; -update noar tt set b0='HU2B02V9JZI7HR2TZKHD5ZVSCTKSQCL' where id=5; -update noar ti set b0='HU2B02V9JZI7HR2TZKHD5ZVSCTKSQCL' where id=5; -update noar tt set b1='V3T8UDWF95ZD3WSQZY6ZSZ5' where id=5; -update noar ti set b1='V3T8UDWF95ZD3WSQZY6ZSZ5' where id=5; -update noar tt set b2='F3HY8QP040TBJWRCCQQRTNVL' where id=5; -update noar ti set b2='F3HY8QP040TBJWRCCQQRTNVL' where id=5; -update noar tt set b0='6VK' where id=6; -update noar ti set b0='6VK' where id=6; -update noar tt set b1='DMYKRP3A31UU8LRZ5FE3RF8BFRX' where id=6; -update noar ti set b1='DMYKRP3A31UU8LRZ5FE3RF8BFRX' where id=6; -update noar tt set b2='RXZEP8UDXX4QAEHN0DHM6FUMMRUQN2' where id=6; -update noar ti set b2='RXZEP8UDXX4QAEHN0DHM6FUMMRUQN2' where id=6; -update noar tt set b0='MFEGY0' where id=7; -update noar ti set b0='MFEGY0' where id=7; -update noar tt set b1='AKOPUMQQDOC0V0T28NS5MY9YT5DRKSX0' where id=7; -update noar ti set b1='AKOPUMQQDOC0V0T28NS5MY9YT5DRKSX0' where id=7; -update noar tt set b2='2VYB4WHU77LZQ1P' where id=7; -update noar ti set b2='2VYB4WHU77LZQ1P' where id=7; -update noar tt set b0='H9SJQCBGJ6D7' where id=8; -update noar ti set b0='H9SJQCBGJ6D7' where id=8; -update noar tt set b1='1785LTCHMHA2Q' where id=8; -update noar ti set b1='1785LTCHMHA2Q' where id=8; -update noar tt set b2='JEJJ' where id=8; -update noar ti set b2='JEJJ' where id=8; -update noar tt set b0='QB7BP2WL' where id=9; -update noar ti set b0='QB7BP2WL' where id=9; -update noar tt set b1='JX' where id=9; -update noar ti set b1='JX' where id=9; -update noar tt set b2='XY87SOQ4NONQ3X7' where id=9; -update noar ti set b2='XY87SOQ4NONQ3X7' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 text null, - b1 mediumblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='NS7MMJRW5IIECP3GD1J22IKZOB' where id=1; -update noar ti set b0='NS7MMJRW5IIECP3GD1J22IKZOB' where id=1; -update noar tt set b1='N4J1BJJR7X34JAL970LXJYFYHGR' where id=1; -update noar ti set b1='N4J1BJJR7X34JAL970LXJYFYHGR' where id=1; -update noar tt set b2='AAGYHPJ3E0FQTZO' where id=1; -update noar ti set b2='AAGYHPJ3E0FQTZO' where id=1; -update noar tt set b0='UX3O5GNNSPL6TWHX85' where id=2; -update noar ti set b0='UX3O5GNNSPL6TWHX85' where id=2; -update noar tt set b1='B8XLIKSYCBB9BLG8FYV20N1WKEG6HWN' where id=2; -update noar ti set b1='B8XLIKSYCBB9BLG8FYV20N1WKEG6HWN' where id=2; -update noar tt set b2='BX3WLY05L16NKO2YU3K8' where id=2; -update noar ti set b2='BX3WLY05L16NKO2YU3K8' where id=2; -update noar tt set b0='VSZIM8W2A1' where id=3; -update noar ti set b0='VSZIM8W2A1' where id=3; -update noar tt set b1='FK37F7FG9OHDZTDW' where id=3; -update noar ti set b1='FK37F7FG9OHDZTDW' where id=3; -update noar tt set b2='NW2XMFHPL4PX1LOKVQ00V5JZNOTU' where id=3; -update noar ti set b2='NW2XMFHPL4PX1LOKVQ00V5JZNOTU' where id=3; -update noar tt set b0='YYWG58MPQKES63' where id=4; -update noar ti set b0='YYWG58MPQKES63' where id=4; -update noar tt set b1='W4CQ9KMF' where id=4; -update noar ti set b1='W4CQ9KMF' where id=4; -update noar tt set b2='EQDCYJ7AJ15D9' where id=4; -update noar ti set b2='EQDCYJ7AJ15D9' where id=4; -update noar tt set b0='K' where id=5; -update noar ti set b0='K' where id=5; -update noar tt set b1='I3ITBINECVO' where id=5; -update noar ti set b1='I3ITBINECVO' where id=5; -update noar tt set b2='Y006C4KR03U9' where id=5; -update noar ti set b2='Y006C4KR03U9' where id=5; -update noar tt set b0='DAQI8IUSWQ' where id=6; -update noar ti set b0='DAQI8IUSWQ' where id=6; -update noar tt set b1='Q4ERIJ' where id=6; -update noar ti set b1='Q4ERIJ' where id=6; -update noar tt set b2='69ALED3PKX2Z2UWZBE0WFZ' where id=6; -update noar ti set b2='69ALED3PKX2Z2UWZBE0WFZ' where id=6; -update noar tt set b0='5UUYI36GIYQCQJT5A6FGD62R9OD71ASC' where id=7; -update noar ti set b0='5UUYI36GIYQCQJT5A6FGD62R9OD71ASC' where id=7; -update noar tt set b1='MLM1KTXNMJNQ4WORGUP3J0DL0' where id=7; -update noar ti set b1='MLM1KTXNMJNQ4WORGUP3J0DL0' where id=7; -update noar tt set b2='XBC8HFTAQ7LF5O2YP6E' where id=7; -update noar ti set b2='XBC8HFTAQ7LF5O2YP6E' where id=7; -update noar tt set b0='KBKZN58GN4Q' where id=8; -update noar ti set b0='KBKZN58GN4Q' where id=8; -update noar tt set b1='Z79TSD2SZ29DJ' where id=8; -update noar ti set b1='Z79TSD2SZ29DJ' where id=8; -update noar tt set b2='Q1IKFP' where id=8; -update noar ti set b2='Q1IKFP' where id=8; -update noar tt set b0='0A1YV' where id=9; -update noar ti set b0='0A1YV' where id=9; -update noar tt set b1='VA8N2UFZPHUOSXDY40W2TJ3S' where id=9; -update noar ti set b1='VA8N2UFZPHUOSXDY40W2TJ3S' where id=9; -update noar tt set b2='JUPWBP15V' where id=9; -update noar ti set b2='JUPWBP15V' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 text not null, - b1 mediumblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='B42YXTJ11558L3SS2A755' where id=1; -update noar ti set b0='B42YXTJ11558L3SS2A755' where id=1; -update noar tt set b1='6URJO63N2UCB8SV' where id=1; -update noar ti set b1='6URJO63N2UCB8SV' where id=1; -update noar tt set b2='7ZXAW9LETGZO323WWWL' where id=1; -update noar ti set b2='7ZXAW9LETGZO323WWWL' where id=1; -update noar tt set b0='9C61BPXPEER0VS2ZM51IRC4TVY83RJ8' where id=2; -update noar ti set b0='9C61BPXPEER0VS2ZM51IRC4TVY83RJ8' where id=2; -update noar tt set b1='DSZYS96XN' where id=2; -update noar ti set b1='DSZYS96XN' where id=2; -update noar tt set b2='5EO8S394DJRP' where id=2; -update noar ti set b2='5EO8S394DJRP' where id=2; -update noar tt set b0='12V4R9NGD682JLSLFY' where id=3; -update noar ti set b0='12V4R9NGD682JLSLFY' where id=3; -update noar tt set b1='IAO7RKWYU95SIF8C3' where id=3; -update noar ti set b1='IAO7RKWYU95SIF8C3' where id=3; -update noar tt set b2='SEBEDH6FAHGS6WIJTYAEUXSUQEPOR' where id=3; -update noar ti set b2='SEBEDH6FAHGS6WIJTYAEUXSUQEPOR' where id=3; -update noar tt set b0='6S04A0WC4P8TZN3T1EN9J4M' where id=4; -update noar ti set b0='6S04A0WC4P8TZN3T1EN9J4M' where id=4; -update noar tt set b1='EQ16VY3H89ZC4ADZFN6DSSB2FC9TK' where id=4; -update noar ti set b1='EQ16VY3H89ZC4ADZFN6DSSB2FC9TK' where id=4; -update noar tt set b2='3MSE9TBIVEXULDHAZZDBPYJM0QO' where id=4; -update noar ti set b2='3MSE9TBIVEXULDHAZZDBPYJM0QO' where id=4; -update noar tt set b0='1SDS1DXSA5' where id=5; -update noar ti set b0='1SDS1DXSA5' where id=5; -update noar tt set b1='DYU26KP9DJC0FMCOI3' where id=5; -update noar ti set b1='DYU26KP9DJC0FMCOI3' where id=5; -update noar tt set b2='U51619EWS8X5ARJSCQQZSOUZ377IR7L' where id=5; -update noar ti set b2='U51619EWS8X5ARJSCQQZSOUZ377IR7L' where id=5; -update noar tt set b0='FB6T8RZMCACBCEHI22X' where id=6; -update noar ti set b0='FB6T8RZMCACBCEHI22X' where id=6; -update noar tt set b1='ZI4' where id=6; -update noar ti set b1='ZI4' where id=6; -update noar tt set b2='6UMZPCXPEFLDM2RN5OFOQ' where id=6; -update noar ti set b2='6UMZPCXPEFLDM2RN5OFOQ' where id=6; -update noar tt set b0='2SOF3TELW33KHF63BL' where id=7; -update noar ti set b0='2SOF3TELW33KHF63BL' where id=7; -update noar tt set b1='7U' where id=7; -update noar ti set b1='7U' where id=7; -update noar tt set b2='1EYMATWT9BW6Z7X5WE3' where id=7; -update noar ti set b2='1EYMATWT9BW6Z7X5WE3' where id=7; -update noar tt set b0='7Z443FLV86ZH2501EOKGXXZ' where id=8; -update noar ti set b0='7Z443FLV86ZH2501EOKGXXZ' where id=8; -update noar tt set b1='PLV57' where id=8; -update noar ti set b1='PLV57' where id=8; -update noar tt set b2='KWB04L' where id=8; -update noar ti set b2='KWB04L' where id=8; -update noar tt set b0='EAFY9MI42W52M' where id=9; -update noar ti set b0='EAFY9MI42W52M' where id=9; -update noar tt set b1='1Y1C5C1U0MNW9XV3FKZ1Q23' where id=9; -update noar ti set b1='1Y1C5C1U0MNW9XV3FKZ1Q23' where id=9; -update noar tt set b2='2C8XFM53DUH' where id=9; -update noar ti set b2='2C8XFM53DUH' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 text null, - b1 mediumblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='Q1ZTCN9' where id=1; -update noar ti set b0='Q1ZTCN9' where id=1; -update noar tt set b1='VUIEEFQRXCE8689D87D8SLJ5' where id=1; -update noar ti set b1='VUIEEFQRXCE8689D87D8SLJ5' where id=1; -update noar tt set b2='Q4MIDSUO6EY337N1B3O1' where id=1; -update noar ti set b2='Q4MIDSUO6EY337N1B3O1' where id=1; -update noar tt set b0='Y1CZXZIJJBSJ79X' where id=2; -update noar ti set b0='Y1CZXZIJJBSJ79X' where id=2; -update noar tt set b1='PYOBZ2F212PX6O0M2E' where id=2; -update noar ti set b1='PYOBZ2F212PX6O0M2E' where id=2; -update noar tt set b2='2AAZYS99XL83EYF9Z4' where id=2; -update noar ti set b2='2AAZYS99XL83EYF9Z4' where id=2; -update noar tt set b0='HMDFCWFA8DRTJRZC8MA3' where id=3; -update noar ti set b0='HMDFCWFA8DRTJRZC8MA3' where id=3; -update noar tt set b1='267XDLG5AHJQ6HFC0INFC0HYWU1A2CRU' where id=3; -update noar ti set b1='267XDLG5AHJQ6HFC0INFC0HYWU1A2CRU' where id=3; -update noar tt set b2='J3AE3V7TPOVCDG37T6NB' where id=3; -update noar ti set b2='J3AE3V7TPOVCDG37T6NB' where id=3; -update noar tt set b0='FO20IT04ORHJMM12COG088YT' where id=4; -update noar ti set b0='FO20IT04ORHJMM12COG088YT' where id=4; -update noar tt set b1='6SNE0H24TV2CTJDG' where id=4; -update noar ti set b1='6SNE0H24TV2CTJDG' where id=4; -update noar tt set b2='ZIS2ET5324LHUGQ3VDE8G' where id=4; -update noar ti set b2='ZIS2ET5324LHUGQ3VDE8G' where id=4; -update noar tt set b0='V5N6AZLRRE3TV' where id=5; -update noar ti set b0='V5N6AZLRRE3TV' where id=5; -update noar tt set b1='EELN' where id=5; -update noar ti set b1='EELN' where id=5; -update noar tt set b2='67HZJK73HWS6KSYZK96' where id=5; -update noar ti set b2='67HZJK73HWS6KSYZK96' where id=5; -update noar tt set b0='UX4ANK1BE69TVFB13H9F1AEZRX5' where id=6; -update noar ti set b0='UX4ANK1BE69TVFB13H9F1AEZRX5' where id=6; -update noar tt set b1='OH2I1R8CL4EG94SO2LKNJUDVTFY' where id=6; -update noar ti set b1='OH2I1R8CL4EG94SO2LKNJUDVTFY' where id=6; -update noar tt set b2='0Q2EGS9T9C6FZ973KPBN56GVZK' where id=6; -update noar ti set b2='0Q2EGS9T9C6FZ973KPBN56GVZK' where id=6; -update noar tt set b0='JB53U7R6' where id=7; -update noar ti set b0='JB53U7R6' where id=7; -update noar tt set b1='T77JK24HG6L5GHRJU' where id=7; -update noar ti set b1='T77JK24HG6L5GHRJU' where id=7; -update noar tt set b2='0YFM97NAKHEB22G4T13857O58WHOCI' where id=7; -update noar ti set b2='0YFM97NAKHEB22G4T13857O58WHOCI' where id=7; -update noar tt set b0='4SECL86MXMMEP7KA12TP7' where id=8; -update noar ti set b0='4SECL86MXMMEP7KA12TP7' where id=8; -update noar tt set b1='AY6CPI4POOCV2H399OCF6V' where id=8; -update noar ti set b1='AY6CPI4POOCV2H399OCF6V' where id=8; -update noar tt set b2='TR' where id=8; -update noar ti set b2='TR' where id=8; -update noar tt set b0='MCU578SYBED9RSWNCRO4264' where id=9; -update noar ti set b0='MCU578SYBED9RSWNCRO4264' where id=9; -update noar tt set b1='9V0QU7VILY7GVPVKQFYJ8J4144RV2D' where id=9; -update noar ti set b1='9V0QU7VILY7GVPVKQFYJ8J4144RV2D' where id=9; -update noar tt set b2='6E9Q9M8Q8WQAFR0W1KQZF9D4L8' where id=9; -update noar ti set b2='6E9Q9M8Q8WQAFR0W1KQZF9D4L8' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 text not null, - b1 mediumblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='PTLIFNY16MRL2495OL31JBA6EUFZQ' where id=1; -update noar ti set b0='PTLIFNY16MRL2495OL31JBA6EUFZQ' where id=1; -update noar tt set b1='3ICDB1LDOJMWSHUKC2J' where id=1; -update noar ti set b1='3ICDB1LDOJMWSHUKC2J' where id=1; -update noar tt set b2='FUTAZ' where id=1; -update noar ti set b2='FUTAZ' where id=1; -update noar tt set b0='RW4661J70687XJB7NU50WY56' where id=2; -update noar ti set b0='RW4661J70687XJB7NU50WY56' where id=2; -update noar tt set b1='KNAFYUXHDXJ750YHU1' where id=2; -update noar ti set b1='KNAFYUXHDXJ750YHU1' where id=2; -update noar tt set b2='HHXFF9P9JSZ3VO' where id=2; -update noar ti set b2='HHXFF9P9JSZ3VO' where id=2; -update noar tt set b0='LCW646' where id=3; -update noar ti set b0='LCW646' where id=3; -update noar tt set b1='4CDWTYITSHA9Z' where id=3; -update noar ti set b1='4CDWTYITSHA9Z' where id=3; -update noar tt set b2='237R8Y' where id=3; -update noar ti set b2='237R8Y' where id=3; -update noar tt set b0='QSYCQ' where id=4; -update noar ti set b0='QSYCQ' where id=4; -update noar tt set b1='H9E9KGGOBFVG' where id=4; -update noar ti set b1='H9E9KGGOBFVG' where id=4; -update noar tt set b2='AF01ZHN0GRUFD4CNNJ1431' where id=4; -update noar ti set b2='AF01ZHN0GRUFD4CNNJ1431' where id=4; -update noar tt set b0='5KI19YN7HZ32ZR259' where id=5; -update noar ti set b0='5KI19YN7HZ32ZR259' where id=5; -update noar tt set b1='ESYEW3U9G' where id=5; -update noar ti set b1='ESYEW3U9G' where id=5; -update noar tt set b2='41RLKV' where id=5; -update noar ti set b2='41RLKV' where id=5; -update noar tt set b0='B8EOH268AMN' where id=6; -update noar ti set b0='B8EOH268AMN' where id=6; -update noar tt set b1='QF2RQF8Q6704HRSEYNQJH441YFNF0' where id=6; -update noar ti set b1='QF2RQF8Q6704HRSEYNQJH441YFNF0' where id=6; -update noar tt set b2='CI8NO7V' where id=6; -update noar ti set b2='CI8NO7V' where id=6; -update noar tt set b0='8JUE0UOR0ECQ90J6ZTE097CJXPA' where id=7; -update noar ti set b0='8JUE0UOR0ECQ90J6ZTE097CJXPA' where id=7; -update noar tt set b1='FG6FFBVYM9A' where id=7; -update noar ti set b1='FG6FFBVYM9A' where id=7; -update noar tt set b2='V1ZZPJ73LZC0W76H9XF' where id=7; -update noar ti set b2='V1ZZPJ73LZC0W76H9XF' where id=7; -update noar tt set b0='G9CGK3PV9FABT7VG5NN1219LL' where id=8; -update noar ti set b0='G9CGK3PV9FABT7VG5NN1219LL' where id=8; -update noar tt set b1='Q3ZH5Q8J2ORJZ' where id=8; -update noar ti set b1='Q3ZH5Q8J2ORJZ' where id=8; -update noar tt set b2='FVQI3MYISE9ESOYSB' where id=8; -update noar ti set b2='FVQI3MYISE9ESOYSB' where id=8; -update noar tt set b0='4HHTTK' where id=9; -update noar ti set b0='4HHTTK' where id=9; -update noar tt set b1='5VT67S0S7YC5CHQ9VJRE' where id=9; -update noar ti set b1='5VT67S0S7YC5CHQ9VJRE' where id=9; -update noar tt set b2='5KWG061WWAGNL521A' where id=9; -update noar ti set b2='5KWG061WWAGNL521A' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 text null, - b1 mediumblob null, - b2 text null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='F1KPE' where id=1; -update noar ti set b0='F1KPE' where id=1; -update noar tt set b1='UZKD4TK45MYMKZPQ9F6I' where id=1; -update noar ti set b1='UZKD4TK45MYMKZPQ9F6I' where id=1; -update noar tt set b2='IQPWGKQME4SRRB4NQRI45ZTZJE' where id=1; -update noar ti set b2='IQPWGKQME4SRRB4NQRI45ZTZJE' where id=1; -update noar tt set b0='3YXNF7LEJ9ULZ2A' where id=2; -update noar ti set b0='3YXNF7LEJ9ULZ2A' where id=2; -update noar tt set b1='0O4I29IFUTX5GOEL' where id=2; -update noar ti set b1='0O4I29IFUTX5GOEL' where id=2; -update noar tt set b2='K60S8RLS8C86VU96Y9XAC05O55T' where id=2; -update noar ti set b2='K60S8RLS8C86VU96Y9XAC05O55T' where id=2; -update noar tt set b0='86TSE9D6M2' where id=3; -update noar ti set b0='86TSE9D6M2' where id=3; -update noar tt set b1='QY8XQICM17' where id=3; -update noar ti set b1='QY8XQICM17' where id=3; -update noar tt set b2='S3YIF43WK8LV617A7YY7LZ9J' where id=3; -update noar ti set b2='S3YIF43WK8LV617A7YY7LZ9J' where id=3; -update noar tt set b0='9VWXP37V' where id=4; -update noar ti set b0='9VWXP37V' where id=4; -update noar tt set b1='JX6384SVV3KLY9HMWVE8XQKX892ZZ' where id=4; -update noar ti set b1='JX6384SVV3KLY9HMWVE8XQKX892ZZ' where id=4; -update noar tt set b2='JR6JIHS7ZGPZTML4H9OPFYYW' where id=4; -update noar ti set b2='JR6JIHS7ZGPZTML4H9OPFYYW' where id=4; -update noar tt set b0='9PMJ81BFSRW07WT6UG0ICGWNV2Q1QX5' where id=5; -update noar ti set b0='9PMJ81BFSRW07WT6UG0ICGWNV2Q1QX5' where id=5; -update noar tt set b1='9ACHG9FTHCVYX0ICE4NHW1L' where id=5; -update noar ti set b1='9ACHG9FTHCVYX0ICE4NHW1L' where id=5; -update noar tt set b2='5' where id=5; -update noar ti set b2='5' where id=5; -update noar tt set b0='YF6GZE6QL4BXXXSOK9B1' where id=6; -update noar ti set b0='YF6GZE6QL4BXXXSOK9B1' where id=6; -update noar tt set b1='X8' where id=6; -update noar ti set b1='X8' where id=6; -update noar tt set b2='2I0NDLS8' where id=6; -update noar ti set b2='2I0NDLS8' where id=6; -update noar tt set b0='38CVZ57NIZOWZ7WK6' where id=7; -update noar ti set b0='38CVZ57NIZOWZ7WK6' where id=7; -update noar tt set b1='4AS06GZAUQJ0' where id=7; -update noar ti set b1='4AS06GZAUQJ0' where id=7; -update noar tt set b2='K3TME' where id=7; -update noar ti set b2='K3TME' where id=7; -update noar tt set b0='JP9O7DK2NP7ZEY' where id=8; -update noar ti set b0='JP9O7DK2NP7ZEY' where id=8; -update noar tt set b1='REZUKM5Z4X28OOLKJ2PKDIGGYC2D' where id=8; -update noar ti set b1='REZUKM5Z4X28OOLKJ2PKDIGGYC2D' where id=8; -update noar tt set b2='CNHLKRIFD2Q0M5FVTEOLC09IPDEH' where id=8; -update noar ti set b2='CNHLKRIFD2Q0M5FVTEOLC09IPDEH' where id=8; -update noar tt set b0='TENQM314ZB7PL5XIX' where id=9; -update noar ti set b0='TENQM314ZB7PL5XIX' where id=9; -update noar tt set b1='BKR3OVXX64UUIWWF' where id=9; -update noar ti set b1='BKR3OVXX64UUIWWF' where id=9; -update noar tt set b2='U' where id=9; -update noar ti set b2='U' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 text not null, - b1 mediumblob not null, - b2 text not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='FZLG1JJ6REQTI4C6FIFBIC8NVVSCG4' where id=1; -update noar ti set b0='FZLG1JJ6REQTI4C6FIFBIC8NVVSCG4' where id=1; -update noar tt set b1='E5EYERVZOMPYYHN5XOUBF' where id=1; -update noar ti set b1='E5EYERVZOMPYYHN5XOUBF' where id=1; -update noar tt set b2='QFGWX7ZONIZW17M7QF9KMKLTNAH' where id=1; -update noar ti set b2='QFGWX7ZONIZW17M7QF9KMKLTNAH' where id=1; -update noar tt set b0='QD4H9HIP95Y4' where id=2; -update noar ti set b0='QD4H9HIP95Y4' where id=2; -update noar tt set b1='4TPXNUPI517KMFAA7T8P03MHU' where id=2; -update noar ti set b1='4TPXNUPI517KMFAA7T8P03MHU' where id=2; -update noar tt set b2='9MCF0LPM66GFQU49DV4F' where id=2; -update noar ti set b2='9MCF0LPM66GFQU49DV4F' where id=2; -update noar tt set b0='ODT' where id=3; -update noar ti set b0='ODT' where id=3; -update noar tt set b1='C1D0P0076RHFD9CDVQ9II0L1OF3LL' where id=3; -update noar ti set b1='C1D0P0076RHFD9CDVQ9II0L1OF3LL' where id=3; -update noar tt set b2='JMYFWQWMNCDZYEP4ZNW50F895OW' where id=3; -update noar ti set b2='JMYFWQWMNCDZYEP4ZNW50F895OW' where id=3; -update noar tt set b0='PAIPB3NQN' where id=4; -update noar ti set b0='PAIPB3NQN' where id=4; -update noar tt set b1='EC0NJU5USYIWDBXYZFPQQGKIR8' where id=4; -update noar ti set b1='EC0NJU5USYIWDBXYZFPQQGKIR8' where id=4; -update noar tt set b2='ZAPDPQR0GWVPQ7JOZBYF' where id=4; -update noar ti set b2='ZAPDPQR0GWVPQ7JOZBYF' where id=4; -update noar tt set b0='ZVG0E2G4YSFWXXI48FIOYYQ1JBBSWK' where id=5; -update noar ti set b0='ZVG0E2G4YSFWXXI48FIOYYQ1JBBSWK' where id=5; -update noar tt set b1='E1SM6MHM04' where id=5; -update noar ti set b1='E1SM6MHM04' where id=5; -update noar tt set b2='Q0YZ1WU25RVIF0SHOR8P2OXIN' where id=5; -update noar ti set b2='Q0YZ1WU25RVIF0SHOR8P2OXIN' where id=5; -update noar tt set b0='WFYU' where id=6; -update noar ti set b0='WFYU' where id=6; -update noar tt set b1='WNV76YAIUJN0ICYEXVQUQKXN7U6D' where id=6; -update noar ti set b1='WNV76YAIUJN0ICYEXVQUQKXN7U6D' where id=6; -update noar tt set b2='0R3B34FEFCZ4UN' where id=6; -update noar ti set b2='0R3B34FEFCZ4UN' where id=6; -update noar tt set b0='J2ZGLJJG8IUP7UHK4219VRVB9MM' where id=7; -update noar ti set b0='J2ZGLJJG8IUP7UHK4219VRVB9MM' where id=7; -update noar tt set b1='T623353FCRJGLPU676D8WALK6Z23VVQL' where id=7; -update noar ti set b1='T623353FCRJGLPU676D8WALK6Z23VVQL' where id=7; -update noar tt set b2='DZ' where id=7; -update noar ti set b2='DZ' where id=7; -update noar tt set b0='BY5HHOCT3093NKT' where id=8; -update noar ti set b0='BY5HHOCT3093NKT' where id=8; -update noar tt set b1='XBSIJGQJWZK7E0X1Z7' where id=8; -update noar ti set b1='XBSIJGQJWZK7E0X1Z7' where id=8; -update noar tt set b2='IQWMK3YBNTHPCOC9SE3LKQCOFZH' where id=8; -update noar ti set b2='IQWMK3YBNTHPCOC9SE3LKQCOFZH' where id=8; -update noar tt set b0='1YNRS1GX9Y2DHX0XB5BP29IULIYXH87Z' where id=9; -update noar ti set b0='1YNRS1GX9Y2DHX0XB5BP29IULIYXH87Z' where id=9; -update noar tt set b1='FA8PCZAUHHN847DPVD20V' where id=9; -update noar ti set b1='FA8PCZAUHHN847DPVD20V' where id=9; -update noar tt set b2='7HPTYCMEJDA8ACGI4AUYXD89XAESI' where id=9; -update noar ti set b2='7HPTYCMEJDA8ACGI4AUYXD89XAESI' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 text null, - b1 longblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='UUGMOZ1P3' where id=1; -update noar ti set b0='UUGMOZ1P3' where id=1; -update noar tt set b1='PBWC9AMOAT0NJTZRFDHAYJI9YNBYOPXW' where id=1; -update noar ti set b1='PBWC9AMOAT0NJTZRFDHAYJI9YNBYOPXW' where id=1; -update noar tt set b2='8F6X32CU7TLEJYCKSUWR' where id=1; -update noar ti set b2='8F6X32CU7TLEJYCKSUWR' where id=1; -update noar tt set b0='SNC6LN383ACJ4K0Y1NJ' where id=2; -update noar ti set b0='SNC6LN383ACJ4K0Y1NJ' where id=2; -update noar tt set b1='0HJPYQPGGOO40O26ZQK438L1LB0' where id=2; -update noar ti set b1='0HJPYQPGGOO40O26ZQK438L1LB0' where id=2; -update noar tt set b2='EAYEUB079Q6ULB' where id=2; -update noar ti set b2='EAYEUB079Q6ULB' where id=2; -update noar tt set b0='FBK0CKXVMY0NCQM7' where id=3; -update noar ti set b0='FBK0CKXVMY0NCQM7' where id=3; -update noar tt set b1='TM' where id=3; -update noar ti set b1='TM' where id=3; -update noar tt set b2='YL22GZAQSVO2JASQCI3FZX8HPSI' where id=3; -update noar ti set b2='YL22GZAQSVO2JASQCI3FZX8HPSI' where id=3; -update noar tt set b0='9QR2QL9QQR6BF' where id=4; -update noar ti set b0='9QR2QL9QQR6BF' where id=4; -update noar tt set b1='2F4LIFNIHGDSUSTINS0WUQMIV' where id=4; -update noar ti set b1='2F4LIFNIHGDSUSTINS0WUQMIV' where id=4; -update noar tt set b2='K4' where id=4; -update noar ti set b2='K4' where id=4; -update noar tt set b0='GDCE31TWJT' where id=5; -update noar ti set b0='GDCE31TWJT' where id=5; -update noar tt set b1='71Z3FE5XK6L9' where id=5; -update noar ti set b1='71Z3FE5XK6L9' where id=5; -update noar tt set b2='DBX91DP6TO' where id=5; -update noar ti set b2='DBX91DP6TO' where id=5; -update noar tt set b0='WO06OFL' where id=6; -update noar ti set b0='WO06OFL' where id=6; -update noar tt set b1='34' where id=6; -update noar ti set b1='34' where id=6; -update noar tt set b2='JNH9' where id=6; -update noar ti set b2='JNH9' where id=6; -update noar tt set b0='Y1Q2QPCMLDXGVVKEL026QTVCZMEE' where id=7; -update noar ti set b0='Y1Q2QPCMLDXGVVKEL026QTVCZMEE' where id=7; -update noar tt set b1='RI1RYZG3L2GFW18Z03HOYC5' where id=7; -update noar ti set b1='RI1RYZG3L2GFW18Z03HOYC5' where id=7; -update noar tt set b2='10OCM08ETI7GHGB3FA' where id=7; -update noar ti set b2='10OCM08ETI7GHGB3FA' where id=7; -update noar tt set b0='LU6L0URZ9S3OQFK24YINC1' where id=8; -update noar ti set b0='LU6L0URZ9S3OQFK24YINC1' where id=8; -update noar tt set b1='QX7RVVV' where id=8; -update noar ti set b1='QX7RVVV' where id=8; -update noar tt set b2='KX0MPDVWDG3MX7NLVTI5SQ4' where id=8; -update noar ti set b2='KX0MPDVWDG3MX7NLVTI5SQ4' where id=8; -update noar tt set b0='036' where id=9; -update noar ti set b0='036' where id=9; -update noar tt set b1='0W0UZUP2HSA22U0IAS5' where id=9; -update noar ti set b1='0W0UZUP2HSA22U0IAS5' where id=9; -update noar tt set b2='OZ0F' where id=9; -update noar ti set b2='OZ0F' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 text not null, - b1 longblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='FG5GFLPIXT02' where id=1; -update noar ti set b0='FG5GFLPIXT02' where id=1; -update noar tt set b1='KYGJ4KO2M5K9699II6AGHI5T' where id=1; -update noar ti set b1='KYGJ4KO2M5K9699II6AGHI5T' where id=1; -update noar tt set b2='TJS03JSU2' where id=1; -update noar ti set b2='TJS03JSU2' where id=1; -update noar tt set b0='GSB' where id=2; -update noar ti set b0='GSB' where id=2; -update noar tt set b1='YO' where id=2; -update noar ti set b1='YO' where id=2; -update noar tt set b2='P99PYJZHXZFHQBDUQX' where id=2; -update noar ti set b2='P99PYJZHXZFHQBDUQX' where id=2; -update noar tt set b0='QQTGTYCEZHO7DS5Z0BT0HI' where id=3; -update noar ti set b0='QQTGTYCEZHO7DS5Z0BT0HI' where id=3; -update noar tt set b1='O42TZUJVKA7YEHVGYZ9' where id=3; -update noar ti set b1='O42TZUJVKA7YEHVGYZ9' where id=3; -update noar tt set b2='COKYO8BHKV5UBBOFBD3G7' where id=3; -update noar ti set b2='COKYO8BHKV5UBBOFBD3G7' where id=3; -update noar tt set b0='YTS9FYDEO87B599JY7V5JMXE' where id=4; -update noar ti set b0='YTS9FYDEO87B599JY7V5JMXE' where id=4; -update noar tt set b1='H14MBK1' where id=4; -update noar ti set b1='H14MBK1' where id=4; -update noar tt set b2='J1UUIK1W5JIETHQZ4HDRZWA' where id=4; -update noar ti set b2='J1UUIK1W5JIETHQZ4HDRZWA' where id=4; -update noar tt set b0='WW6S001TL1QV' where id=5; -update noar ti set b0='WW6S001TL1QV' where id=5; -update noar tt set b1='3SL' where id=5; -update noar ti set b1='3SL' where id=5; -update noar tt set b2='2350D0PGAD' where id=5; -update noar ti set b2='2350D0PGAD' where id=5; -update noar tt set b0='PY7KV6DLP' where id=6; -update noar ti set b0='PY7KV6DLP' where id=6; -update noar tt set b1='CJ5W6JZF203YL2E1JMBZKA483VH3JRI' where id=6; -update noar ti set b1='CJ5W6JZF203YL2E1JMBZKA483VH3JRI' where id=6; -update noar tt set b2='QGXI0Q8YJ' where id=6; -update noar ti set b2='QGXI0Q8YJ' where id=6; -update noar tt set b0='BU6WFNRGHPBWILUDPHBSIHRDI2ZGU6I' where id=7; -update noar ti set b0='BU6WFNRGHPBWILUDPHBSIHRDI2ZGU6I' where id=7; -update noar tt set b1='IVKCI5SIWEMS6Z677N0B1DME8JJ25L2I' where id=7; -update noar ti set b1='IVKCI5SIWEMS6Z677N0B1DME8JJ25L2I' where id=7; -update noar tt set b2='U8' where id=7; -update noar ti set b2='U8' where id=7; -update noar tt set b0='92PT815NVI59ES' where id=8; -update noar ti set b0='92PT815NVI59ES' where id=8; -update noar tt set b1='U3E9DZ4H37O8KYNPI' where id=8; -update noar ti set b1='U3E9DZ4H37O8KYNPI' where id=8; -update noar tt set b2='M1P1AL8RI5GT28OMG38PVPAKGJM8OY' where id=8; -update noar ti set b2='M1P1AL8RI5GT28OMG38PVPAKGJM8OY' where id=8; -update noar tt set b0='NJ97NFK6QUZ' where id=9; -update noar ti set b0='NJ97NFK6QUZ' where id=9; -update noar tt set b1='9N1MYO' where id=9; -update noar ti set b1='9N1MYO' where id=9; -update noar tt set b2='BDMG7MDSYCCHVJY2TEI7' where id=9; -update noar ti set b2='BDMG7MDSYCCHVJY2TEI7' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 text null, - b1 longblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='EDIY6' where id=1; -update noar ti set b0='EDIY6' where id=1; -update noar tt set b1='58TPY5G' where id=1; -update noar ti set b1='58TPY5G' where id=1; -update noar tt set b2='8' where id=1; -update noar ti set b2='8' where id=1; -update noar tt set b0='TED6CUCZ2YTLEWABEODOHKPY' where id=2; -update noar ti set b0='TED6CUCZ2YTLEWABEODOHKPY' where id=2; -update noar tt set b1='MFNK' where id=2; -update noar ti set b1='MFNK' where id=2; -update noar tt set b2='CP2P45YB5RDFB2EKL4836' where id=2; -update noar ti set b2='CP2P45YB5RDFB2EKL4836' where id=2; -update noar tt set b0='TBQ9QWAZE2E26H3185DTTU2FCX' where id=3; -update noar ti set b0='TBQ9QWAZE2E26H3185DTTU2FCX' where id=3; -update noar tt set b1='8X44NE7RGRDRF4BCBZE3HPZZGLG9ZP9' where id=3; -update noar ti set b1='8X44NE7RGRDRF4BCBZE3HPZZGLG9ZP9' where id=3; -update noar tt set b2='4B9HKB4FOT05OTXEUVYTKD2YXQK' where id=3; -update noar ti set b2='4B9HKB4FOT05OTXEUVYTKD2YXQK' where id=3; -update noar tt set b0='P1EGDBQWU8Y98WCZ74W' where id=4; -update noar ti set b0='P1EGDBQWU8Y98WCZ74W' where id=4; -update noar tt set b1='X' where id=4; -update noar ti set b1='X' where id=4; -update noar tt set b2='K33PV3VRODEC3AWYU4LX3' where id=4; -update noar ti set b2='K33PV3VRODEC3AWYU4LX3' where id=4; -update noar tt set b0='AAD3SCXGXZ7KHLELVA' where id=5; -update noar ti set b0='AAD3SCXGXZ7KHLELVA' where id=5; -update noar tt set b1='NFB49OZR7JWU0ONDOJT6H' where id=5; -update noar ti set b1='NFB49OZR7JWU0ONDOJT6H' where id=5; -update noar tt set b2='97FWTMW3O2BQDFJCPAHA7ORR917EI' where id=5; -update noar ti set b2='97FWTMW3O2BQDFJCPAHA7ORR917EI' where id=5; -update noar tt set b0='1MEIX05A06L1KHZB767GB2Y' where id=6; -update noar ti set b0='1MEIX05A06L1KHZB767GB2Y' where id=6; -update noar tt set b1='KYUPVOMHNKWTEBF1' where id=6; -update noar ti set b1='KYUPVOMHNKWTEBF1' where id=6; -update noar tt set b2='GOL' where id=6; -update noar ti set b2='GOL' where id=6; -update noar tt set b0='S991AE337P7VLMOQ' where id=7; -update noar ti set b0='S991AE337P7VLMOQ' where id=7; -update noar tt set b1='26EB8QJTV5KOTXZJDH2N' where id=7; -update noar ti set b1='26EB8QJTV5KOTXZJDH2N' where id=7; -update noar tt set b2='6W8J8R68' where id=7; -update noar ti set b2='6W8J8R68' where id=7; -update noar tt set b0='BO3TGF' where id=8; -update noar ti set b0='BO3TGF' where id=8; -update noar tt set b1='ZUFG02URD9W4WJSFZ6XVR8V1PH1VXONT' where id=8; -update noar ti set b1='ZUFG02URD9W4WJSFZ6XVR8V1PH1VXONT' where id=8; -update noar tt set b2='WCNKT1RP4CZ035P2KRDTQF2A' where id=8; -update noar ti set b2='WCNKT1RP4CZ035P2KRDTQF2A' where id=8; -update noar tt set b0='3RV4SVJNFH5807' where id=9; -update noar ti set b0='3RV4SVJNFH5807' where id=9; -update noar tt set b1='HH0E8QCB9INLB' where id=9; -update noar ti set b1='HH0E8QCB9INLB' where id=9; -update noar tt set b2='9' where id=9; -update noar ti set b2='9' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 text not null, - b1 longblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='S1BZX1GMU2YND3ET9RJBOP7Q2S' where id=1; -update noar ti set b0='S1BZX1GMU2YND3ET9RJBOP7Q2S' where id=1; -update noar tt set b1='V0K31OUURZTPZO' where id=1; -update noar ti set b1='V0K31OUURZTPZO' where id=1; -update noar tt set b2='4ZZWYX4XPJHEYA88GMBDB5E' where id=1; -update noar ti set b2='4ZZWYX4XPJHEYA88GMBDB5E' where id=1; -update noar tt set b0='UNS8VQ6BTRS7LQRZH0Y' where id=2; -update noar ti set b0='UNS8VQ6BTRS7LQRZH0Y' where id=2; -update noar tt set b1='98H7FEP5HT' where id=2; -update noar ti set b1='98H7FEP5HT' where id=2; -update noar tt set b2='QTPIF0' where id=2; -update noar ti set b2='QTPIF0' where id=2; -update noar tt set b0='I6VATVQRU1VXHUIGYTBKE5' where id=3; -update noar ti set b0='I6VATVQRU1VXHUIGYTBKE5' where id=3; -update noar tt set b1='PYCER' where id=3; -update noar ti set b1='PYCER' where id=3; -update noar tt set b2='7CDT8FFD9OS19F1T2XIYJ' where id=3; -update noar ti set b2='7CDT8FFD9OS19F1T2XIYJ' where id=3; -update noar tt set b0='N0B501K95GPMN51NW' where id=4; -update noar ti set b0='N0B501K95GPMN51NW' where id=4; -update noar tt set b1='YD87UKN4S0' where id=4; -update noar ti set b1='YD87UKN4S0' where id=4; -update noar tt set b2='CZ7L9BHYOTL45P3P5HVCI77PV45R' where id=4; -update noar ti set b2='CZ7L9BHYOTL45P3P5HVCI77PV45R' where id=4; -update noar tt set b0='292MSMHCG9J7W8JV24Q' where id=5; -update noar ti set b0='292MSMHCG9J7W8JV24Q' where id=5; -update noar tt set b1='MWCPOCMY' where id=5; -update noar ti set b1='MWCPOCMY' where id=5; -update noar tt set b2='PG' where id=5; -update noar ti set b2='PG' where id=5; -update noar tt set b0='YBKSVEI6S76HXMT7J' where id=6; -update noar ti set b0='YBKSVEI6S76HXMT7J' where id=6; -update noar tt set b1='ASIL8EPIEP' where id=6; -update noar ti set b1='ASIL8EPIEP' where id=6; -update noar tt set b2='XEFHH7CNNMOYS0FQ4JGIRPZ' where id=6; -update noar ti set b2='XEFHH7CNNMOYS0FQ4JGIRPZ' where id=6; -update noar tt set b0='SVK3OKVD592V3DLJGZWI' where id=7; -update noar ti set b0='SVK3OKVD592V3DLJGZWI' where id=7; -update noar tt set b1='ZDN6T0H31T6U6SPT319GJS8AO6' where id=7; -update noar ti set b1='ZDN6T0H31T6U6SPT319GJS8AO6' where id=7; -update noar tt set b2='PTZED93DMLC9MH25D2H0' where id=7; -update noar ti set b2='PTZED93DMLC9MH25D2H0' where id=7; -update noar tt set b0='Z2257C73FE768H3OGQYRQYJ' where id=8; -update noar ti set b0='Z2257C73FE768H3OGQYRQYJ' where id=8; -update noar tt set b1='JFE2BNXQ6F6QO4F36PV' where id=8; -update noar ti set b1='JFE2BNXQ6F6QO4F36PV' where id=8; -update noar tt set b2='YNYCFK4IEVWDEK2I2NPGYPMDF' where id=8; -update noar ti set b2='YNYCFK4IEVWDEK2I2NPGYPMDF' where id=8; -update noar tt set b0='P7TEHC1E7H' where id=9; -update noar ti set b0='P7TEHC1E7H' where id=9; -update noar tt set b1='GAMS' where id=9; -update noar ti set b1='GAMS' where id=9; -update noar tt set b2='ISQVEH5DWMZA9CFO6TX' where id=9; -update noar ti set b2='ISQVEH5DWMZA9CFO6TX' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 text null, - b1 longblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='VEV9WU59A5QRVQHC' where id=1; -update noar ti set b0='VEV9WU59A5QRVQHC' where id=1; -update noar tt set b1='WV6Q5JD1392NNJMAKJ5' where id=1; -update noar ti set b1='WV6Q5JD1392NNJMAKJ5' where id=1; -update noar tt set b2='WN52ORPN75BUDPO8E1T29' where id=1; -update noar ti set b2='WN52ORPN75BUDPO8E1T29' where id=1; -update noar tt set b0='LNFEZR474NVFI' where id=2; -update noar ti set b0='LNFEZR474NVFI' where id=2; -update noar tt set b1='I4J85LC7Y5C6UAFAYW86GG8M7O0OUTN' where id=2; -update noar ti set b1='I4J85LC7Y5C6UAFAYW86GG8M7O0OUTN' where id=2; -update noar tt set b2='3DZU6' where id=2; -update noar ti set b2='3DZU6' where id=2; -update noar tt set b0='P6XMKGEREU7AA7ROKVRWVTAAN' where id=3; -update noar ti set b0='P6XMKGEREU7AA7ROKVRWVTAAN' where id=3; -update noar tt set b1='U32B4Y8PRCDZV5I3M29ITBE1' where id=3; -update noar ti set b1='U32B4Y8PRCDZV5I3M29ITBE1' where id=3; -update noar tt set b2='K9U3T4I6J3CG' where id=3; -update noar ti set b2='K9U3T4I6J3CG' where id=3; -update noar tt set b0='CR' where id=4; -update noar ti set b0='CR' where id=4; -update noar tt set b1='B38BF9K2P' where id=4; -update noar ti set b1='B38BF9K2P' where id=4; -update noar tt set b2='1IFYUVT2064YST' where id=4; -update noar ti set b2='1IFYUVT2064YST' where id=4; -update noar tt set b0='NT' where id=5; -update noar ti set b0='NT' where id=5; -update noar tt set b1='W9X11NURLXPNWPXN30' where id=5; -update noar ti set b1='W9X11NURLXPNWPXN30' where id=5; -update noar tt set b2='ZWI9O' where id=5; -update noar ti set b2='ZWI9O' where id=5; -update noar tt set b0='RN600UL03M' where id=6; -update noar ti set b0='RN600UL03M' where id=6; -update noar tt set b1='6FQDTUI' where id=6; -update noar ti set b1='6FQDTUI' where id=6; -update noar tt set b2='ITYTZVLJTMG9QY5TG00JVHIZTH' where id=6; -update noar ti set b2='ITYTZVLJTMG9QY5TG00JVHIZTH' where id=6; -update noar tt set b0='H8EKMVY2SZ7JW4YXVRO7Q' where id=7; -update noar ti set b0='H8EKMVY2SZ7JW4YXVRO7Q' where id=7; -update noar tt set b1='R18EEVGLUATFI1JRR2VJE16NVJO' where id=7; -update noar ti set b1='R18EEVGLUATFI1JRR2VJE16NVJO' where id=7; -update noar tt set b2='FG4G' where id=7; -update noar ti set b2='FG4G' where id=7; -update noar tt set b0='5NM000UZDLIF' where id=8; -update noar ti set b0='5NM000UZDLIF' where id=8; -update noar tt set b1='HYXNAJ8QYF' where id=8; -update noar ti set b1='HYXNAJ8QYF' where id=8; -update noar tt set b2='URU0KZ4NK2U' where id=8; -update noar ti set b2='URU0KZ4NK2U' where id=8; -update noar tt set b0='LRQK35RR' where id=9; -update noar ti set b0='LRQK35RR' where id=9; -update noar tt set b1='QACJ71GE6K5Z' where id=9; -update noar ti set b1='QACJ71GE6K5Z' where id=9; -update noar tt set b2='MSTWYPU' where id=9; -update noar ti set b2='MSTWYPU' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 text not null, - b1 longblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='QDV1DW52NO1MN4WBTEHIA3' where id=1; -update noar ti set b0='QDV1DW52NO1MN4WBTEHIA3' where id=1; -update noar tt set b1='8Y23EXK4M9OJUBIEX1040CN7O0KIHVY' where id=1; -update noar ti set b1='8Y23EXK4M9OJUBIEX1040CN7O0KIHVY' where id=1; -update noar tt set b2='G1ZFVE1R9JMUG' where id=1; -update noar ti set b2='G1ZFVE1R9JMUG' where id=1; -update noar tt set b0='G1VTP8VER9X5XF76IHM' where id=2; -update noar ti set b0='G1VTP8VER9X5XF76IHM' where id=2; -update noar tt set b1='SA73SUE0VCNOE7BFNMD51ECOCHLO' where id=2; -update noar ti set b1='SA73SUE0VCNOE7BFNMD51ECOCHLO' where id=2; -update noar tt set b2='HPKDPWSVCQV' where id=2; -update noar ti set b2='HPKDPWSVCQV' where id=2; -update noar tt set b0='1FYN8LDJ6DNLJ34' where id=3; -update noar ti set b0='1FYN8LDJ6DNLJ34' where id=3; -update noar tt set b1='Z1SZ9WQ7VX' where id=3; -update noar ti set b1='Z1SZ9WQ7VX' where id=3; -update noar tt set b2='C4II1NMNM6JKNDQ5C80TZXKYZT' where id=3; -update noar ti set b2='C4II1NMNM6JKNDQ5C80TZXKYZT' where id=3; -update noar tt set b0='4XFAFZ8EF4QFK6XHLWC6BGH' where id=4; -update noar ti set b0='4XFAFZ8EF4QFK6XHLWC6BGH' where id=4; -update noar tt set b1='EMH5CJKDFI387I7LFB3A9HUQOCWQSJ' where id=4; -update noar ti set b1='EMH5CJKDFI387I7LFB3A9HUQOCWQSJ' where id=4; -update noar tt set b2='0JHKEL816XK' where id=4; -update noar ti set b2='0JHKEL816XK' where id=4; -update noar tt set b0='LPZCG1NJLEJ93YM9YWZ8C' where id=5; -update noar ti set b0='LPZCG1NJLEJ93YM9YWZ8C' where id=5; -update noar tt set b1='4I26Y2BZUYJDWBB5R9OZIBN9E' where id=5; -update noar ti set b1='4I26Y2BZUYJDWBB5R9OZIBN9E' where id=5; -update noar tt set b2='PPJJ82O7WFYXZK4D6LF44EZ' where id=5; -update noar ti set b2='PPJJ82O7WFYXZK4D6LF44EZ' where id=5; -update noar tt set b0='DE3306BZ9H185S' where id=6; -update noar ti set b0='DE3306BZ9H185S' where id=6; -update noar tt set b1='DC6RPIWT22VB9MRF5EL5V' where id=6; -update noar ti set b1='DC6RPIWT22VB9MRF5EL5V' where id=6; -update noar tt set b2='F5VQ' where id=6; -update noar ti set b2='F5VQ' where id=6; -update noar tt set b0='I3ZX4DBGGUQA39FDULDSD' where id=7; -update noar ti set b0='I3ZX4DBGGUQA39FDULDSD' where id=7; -update noar tt set b1='T4F' where id=7; -update noar ti set b1='T4F' where id=7; -update noar tt set b2='D1VR6GGTXT8Z4F' where id=7; -update noar ti set b2='D1VR6GGTXT8Z4F' where id=7; -update noar tt set b0='VSC6LZCV2ZE416NVFT764' where id=8; -update noar ti set b0='VSC6LZCV2ZE416NVFT764' where id=8; -update noar tt set b1='AUYFPW84B73M6HJ1OAT7F4L2940KLE' where id=8; -update noar ti set b1='AUYFPW84B73M6HJ1OAT7F4L2940KLE' where id=8; -update noar tt set b2='KX63IC4RB0PVY5D3FNGUJLEK2DMFY9' where id=8; -update noar ti set b2='KX63IC4RB0PVY5D3FNGUJLEK2DMFY9' where id=8; -update noar tt set b0='CY4P7S18Q9XA28M5XXG1N9CO8' where id=9; -update noar ti set b0='CY4P7S18Q9XA28M5XXG1N9CO8' where id=9; -update noar tt set b1='YFHB0JI3ZYNUZ404MZ4AAF' where id=9; -update noar ti set b1='YFHB0JI3ZYNUZ404MZ4AAF' where id=9; -update noar tt set b2='D9GAS0S5ROW' where id=9; -update noar ti set b2='D9GAS0S5ROW' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 text null, - b1 longblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='2NGUMPZUZX0TL260L' where id=1; -update noar ti set b0='2NGUMPZUZX0TL260L' where id=1; -update noar tt set b1='DW8W78O1G5OQ2EF0V3ID8DSH48O' where id=1; -update noar ti set b1='DW8W78O1G5OQ2EF0V3ID8DSH48O' where id=1; -update noar tt set b2='2JSMC5IUQBXOL1MX16TGXAJH' where id=1; -update noar ti set b2='2JSMC5IUQBXOL1MX16TGXAJH' where id=1; -update noar tt set b0='HIAH3SCF1YAVTQ3E1DZNGNVW' where id=2; -update noar ti set b0='HIAH3SCF1YAVTQ3E1DZNGNVW' where id=2; -update noar tt set b1='5EKU2AC' where id=2; -update noar ti set b1='5EKU2AC' where id=2; -update noar tt set b2='PGZ4HGDFR5MG9RFQPSW1J48E' where id=2; -update noar ti set b2='PGZ4HGDFR5MG9RFQPSW1J48E' where id=2; -update noar tt set b0='ZTTHM7B3BXVE' where id=3; -update noar ti set b0='ZTTHM7B3BXVE' where id=3; -update noar tt set b1='ZSNFZI9EUVQNEJNS26723HR' where id=3; -update noar ti set b1='ZSNFZI9EUVQNEJNS26723HR' where id=3; -update noar tt set b2='DKATUL9WLR81U5AO9H7FI' where id=3; -update noar ti set b2='DKATUL9WLR81U5AO9H7FI' where id=3; -update noar tt set b0='9R' where id=4; -update noar ti set b0='9R' where id=4; -update noar tt set b1='BZXBHWT' where id=4; -update noar ti set b1='BZXBHWT' where id=4; -update noar tt set b2='VC663OJ8UT9EW5P07LZ7B38JS2' where id=4; -update noar ti set b2='VC663OJ8UT9EW5P07LZ7B38JS2' where id=4; -update noar tt set b0='M2T' where id=5; -update noar ti set b0='M2T' where id=5; -update noar tt set b1='H6CXFZ725MF1PPCSZF' where id=5; -update noar ti set b1='H6CXFZ725MF1PPCSZF' where id=5; -update noar tt set b2='0VVHL1FA457G06IJETDPD45C0V5EUU' where id=5; -update noar ti set b2='0VVHL1FA457G06IJETDPD45C0V5EUU' where id=5; -update noar tt set b0='VJW3KOMHUQL4RW' where id=6; -update noar ti set b0='VJW3KOMHUQL4RW' where id=6; -update noar tt set b1='2B28D758GWHYYCXM4X' where id=6; -update noar ti set b1='2B28D758GWHYYCXM4X' where id=6; -update noar tt set b2='Y3J29IF87PC' where id=6; -update noar ti set b2='Y3J29IF87PC' where id=6; -update noar tt set b0='1' where id=7; -update noar ti set b0='1' where id=7; -update noar tt set b1='TQHPLGW8PLJQB9A' where id=7; -update noar ti set b1='TQHPLGW8PLJQB9A' where id=7; -update noar tt set b2='I89R20VLFWTEJ6WPY6VPW' where id=7; -update noar ti set b2='I89R20VLFWTEJ6WPY6VPW' where id=7; -update noar tt set b0='EQVFQ13R5L66IC7P9SNQ90GXFJ2VMV' where id=8; -update noar ti set b0='EQVFQ13R5L66IC7P9SNQ90GXFJ2VMV' where id=8; -update noar tt set b1='HXUSMNLI22HYEONA2GA6' where id=8; -update noar ti set b1='HXUSMNLI22HYEONA2GA6' where id=8; -update noar tt set b2='5DH9JOODED0Q7FM82I7ZKGYWWTG1' where id=8; -update noar ti set b2='5DH9JOODED0Q7FM82I7ZKGYWWTG1' where id=8; -update noar tt set b0='JSRU0RMHB3DZDIW13R3Q7BC3SAA' where id=9; -update noar ti set b0='JSRU0RMHB3DZDIW13R3Q7BC3SAA' where id=9; -update noar tt set b1='Z2JW8XTSL51UPV7B9OS3D' where id=9; -update noar ti set b1='Z2JW8XTSL51UPV7B9OS3D' where id=9; -update noar tt set b2='ZMU' where id=9; -update noar ti set b2='ZMU' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 text not null, - b1 longblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='LJKN0KJFQ' where id=1; -update noar ti set b0='LJKN0KJFQ' where id=1; -update noar tt set b1='J8PFJQGICL' where id=1; -update noar ti set b1='J8PFJQGICL' where id=1; -update noar tt set b2='4AA3XU1LOHABMVAHPBZ631ALUFCZO9V' where id=1; -update noar ti set b2='4AA3XU1LOHABMVAHPBZ631ALUFCZO9V' where id=1; -update noar tt set b0='7O6' where id=2; -update noar ti set b0='7O6' where id=2; -update noar tt set b1='M6D2N2N4W5VYB06EKI' where id=2; -update noar ti set b1='M6D2N2N4W5VYB06EKI' where id=2; -update noar tt set b2='8E0TC8I31M6L572PHIXMRA' where id=2; -update noar ti set b2='8E0TC8I31M6L572PHIXMRA' where id=2; -update noar tt set b0='22BVZD36B74GL8467REMX1O4' where id=3; -update noar ti set b0='22BVZD36B74GL8467REMX1O4' where id=3; -update noar tt set b1='H17E70BNU9039OJG89UF3K3TI' where id=3; -update noar ti set b1='H17E70BNU9039OJG89UF3K3TI' where id=3; -update noar tt set b2='26M8B15CDHG5YEK' where id=3; -update noar ti set b2='26M8B15CDHG5YEK' where id=3; -update noar tt set b0='QTA5LHL4PILPW7NPQQ90PITP012M' where id=4; -update noar ti set b0='QTA5LHL4PILPW7NPQQ90PITP012M' where id=4; -update noar tt set b1='O68YTNV7MS2D' where id=4; -update noar ti set b1='O68YTNV7MS2D' where id=4; -update noar tt set b2='LOVI692I2W67ICLBID' where id=4; -update noar ti set b2='LOVI692I2W67ICLBID' where id=4; -update noar tt set b0='GKH3D' where id=5; -update noar ti set b0='GKH3D' where id=5; -update noar tt set b1='X0CMCGJM773FR99DV4BIAB' where id=5; -update noar ti set b1='X0CMCGJM773FR99DV4BIAB' where id=5; -update noar tt set b2='DRRUR4GR9BSW' where id=5; -update noar ti set b2='DRRUR4GR9BSW' where id=5; -update noar tt set b0='QDZR' where id=6; -update noar ti set b0='QDZR' where id=6; -update noar tt set b1='8OW73WTSBTU6LAXIK79J516X' where id=6; -update noar ti set b1='8OW73WTSBTU6LAXIK79J516X' where id=6; -update noar tt set b2='NLHR487IVFOBOF9OQ69SQ8R8WJP6X' where id=6; -update noar ti set b2='NLHR487IVFOBOF9OQ69SQ8R8WJP6X' where id=6; -update noar tt set b0='U2U1O0SBSAG' where id=7; -update noar ti set b0='U2U1O0SBSAG' where id=7; -update noar tt set b1='5GE0IWAZ1M6M126RGXLE' where id=7; -update noar ti set b1='5GE0IWAZ1M6M126RGXLE' where id=7; -update noar tt set b2='N279NXUJ2SWUAYUOXEPLYEUO' where id=7; -update noar ti set b2='N279NXUJ2SWUAYUOXEPLYEUO' where id=7; -update noar tt set b0='2C18JJE3CF6Q92UMJ9' where id=8; -update noar ti set b0='2C18JJE3CF6Q92UMJ9' where id=8; -update noar tt set b1='XIIXQGXKOT7G2P5JANVOS8X' where id=8; -update noar ti set b1='XIIXQGXKOT7G2P5JANVOS8X' where id=8; -update noar tt set b2='AC6CJR5Z8J81S4RK31F8M' where id=8; -update noar ti set b2='AC6CJR5Z8J81S4RK31F8M' where id=8; -update noar tt set b0='T595' where id=9; -update noar ti set b0='T595' where id=9; -update noar tt set b1='6HUCK6POCSAFHSZLNRVPLMGO8B' where id=9; -update noar ti set b1='6HUCK6POCSAFHSZLNRVPLMGO8B' where id=9; -update noar tt set b2='GQ89J3PPUW17294K0H7A9Z8J8XEP0M' where id=9; -update noar ti set b2='GQ89J3PPUW17294K0H7A9Z8J8XEP0M' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 text null, - b1 longblob null, - b2 text null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='HL0FNP7CE9H9B3G9BDLETK' where id=1; -update noar ti set b0='HL0FNP7CE9H9B3G9BDLETK' where id=1; -update noar tt set b1='PVO' where id=1; -update noar ti set b1='PVO' where id=1; -update noar tt set b2='S8YNFEYYWLMVIYGUMBDT8WQG5L6QKU5' where id=1; -update noar ti set b2='S8YNFEYYWLMVIYGUMBDT8WQG5L6QKU5' where id=1; -update noar tt set b0='GM184QL0VV6TSWV' where id=2; -update noar ti set b0='GM184QL0VV6TSWV' where id=2; -update noar tt set b1='SJZW15OHPP3MCWYRES9NMM7VEIE4' where id=2; -update noar ti set b1='SJZW15OHPP3MCWYRES9NMM7VEIE4' where id=2; -update noar tt set b2='DVHRUQ1BPVBB8PIC51F3RCYUE7T6ZOHT' where id=2; -update noar ti set b2='DVHRUQ1BPVBB8PIC51F3RCYUE7T6ZOHT' where id=2; -update noar tt set b0='T3SUCNTHSHUW9S5VRBV97SC' where id=3; -update noar ti set b0='T3SUCNTHSHUW9S5VRBV97SC' where id=3; -update noar tt set b1='OP8VT8F4AH9J9D9' where id=3; -update noar ti set b1='OP8VT8F4AH9J9D9' where id=3; -update noar tt set b2='5IW2MK4C7Q5Z3Q3W9M1JEOCNGIB4R' where id=3; -update noar ti set b2='5IW2MK4C7Q5Z3Q3W9M1JEOCNGIB4R' where id=3; -update noar tt set b0='01JNLPY3FC07Q7MR7SEUOG4' where id=4; -update noar ti set b0='01JNLPY3FC07Q7MR7SEUOG4' where id=4; -update noar tt set b1='BIMVQMYKY778883059GDKSWIPX47S' where id=4; -update noar ti set b1='BIMVQMYKY778883059GDKSWIPX47S' where id=4; -update noar tt set b2='00YU0I95PUABBNAMI1GCKCABOVUS' where id=4; -update noar ti set b2='00YU0I95PUABBNAMI1GCKCABOVUS' where id=4; -update noar tt set b0='3U6BE' where id=5; -update noar ti set b0='3U6BE' where id=5; -update noar tt set b1='FG334ISBNVVT2ROXCSJ' where id=5; -update noar ti set b1='FG334ISBNVVT2ROXCSJ' where id=5; -update noar tt set b2='T53RHR1265QK2VRI1W36QP77MAK7X' where id=5; -update noar ti set b2='T53RHR1265QK2VRI1W36QP77MAK7X' where id=5; -update noar tt set b0='H8JW' where id=6; -update noar ti set b0='H8JW' where id=6; -update noar tt set b1='GAKIJANPJVG1W3HJZG22SF1K2VPM7HT' where id=6; -update noar ti set b1='GAKIJANPJVG1W3HJZG22SF1K2VPM7HT' where id=6; -update noar tt set b2='WD94AI6BDICDEZ6IG8J9IZPJQC' where id=6; -update noar ti set b2='WD94AI6BDICDEZ6IG8J9IZPJQC' where id=6; -update noar tt set b0='YABRBGGTPYX522I3V' where id=7; -update noar ti set b0='YABRBGGTPYX522I3V' where id=7; -update noar tt set b1='G7E7PGPLOW4958282' where id=7; -update noar ti set b1='G7E7PGPLOW4958282' where id=7; -update noar tt set b2='MCB9TKDZBXHLW' where id=7; -update noar ti set b2='MCB9TKDZBXHLW' where id=7; -update noar tt set b0='ADN8PPM' where id=8; -update noar ti set b0='ADN8PPM' where id=8; -update noar tt set b1='42XRCNNAUE1F6KOEL2GQNX' where id=8; -update noar ti set b1='42XRCNNAUE1F6KOEL2GQNX' where id=8; -update noar tt set b2='S30726STKNXAZUAG6MKT8P5Y65PK0M' where id=8; -update noar ti set b2='S30726STKNXAZUAG6MKT8P5Y65PK0M' where id=8; -update noar tt set b0='F7C1E0GW6YKTZMNMLB8WKJKKEIKY' where id=9; -update noar ti set b0='F7C1E0GW6YKTZMNMLB8WKJKKEIKY' where id=9; -update noar tt set b1='KE5E8S9LXN2GZCCH' where id=9; -update noar ti set b1='KE5E8S9LXN2GZCCH' where id=9; -update noar tt set b2='QL3' where id=9; -update noar ti set b2='QL3' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 text not null, - b1 longblob not null, - b2 text not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='X6LMVB76NTAXAGOR8DN5PL3X3TTUXCB' where id=1; -update noar ti set b0='X6LMVB76NTAXAGOR8DN5PL3X3TTUXCB' where id=1; -update noar tt set b1='LS566VGAAI6RQ7JP1J10OGE' where id=1; -update noar ti set b1='LS566VGAAI6RQ7JP1J10OGE' where id=1; -update noar tt set b2='7MH' where id=1; -update noar ti set b2='7MH' where id=1; -update noar tt set b0='4K4OMGG0PIO2ZSAGP' where id=2; -update noar ti set b0='4K4OMGG0PIO2ZSAGP' where id=2; -update noar tt set b1='U2L8X89150GACC6BIDKI0XSV5P094' where id=2; -update noar ti set b1='U2L8X89150GACC6BIDKI0XSV5P094' where id=2; -update noar tt set b2='G2T1I8Q8S9IBYQECZ86RZ4TTIACVZ' where id=2; -update noar ti set b2='G2T1I8Q8S9IBYQECZ86RZ4TTIACVZ' where id=2; -update noar tt set b0='3OHI6SLJZIA3OVB' where id=3; -update noar ti set b0='3OHI6SLJZIA3OVB' where id=3; -update noar tt set b1='MILHDQXXBYL0RA82IGQDO' where id=3; -update noar ti set b1='MILHDQXXBYL0RA82IGQDO' where id=3; -update noar tt set b2='0LX36X4AO' where id=3; -update noar ti set b2='0LX36X4AO' where id=3; -update noar tt set b0='KY3MG5742LGRZBC232TXTE1BH60SV' where id=4; -update noar ti set b0='KY3MG5742LGRZBC232TXTE1BH60SV' where id=4; -update noar tt set b1='P' where id=4; -update noar ti set b1='P' where id=4; -update noar tt set b2='927QY4ZJXANNGEHQM8JTGGE1B' where id=4; -update noar ti set b2='927QY4ZJXANNGEHQM8JTGGE1B' where id=4; -update noar tt set b0='R9JQPMS4KQFWF4ABBF6' where id=5; -update noar ti set b0='R9JQPMS4KQFWF4ABBF6' where id=5; -update noar tt set b1='J' where id=5; -update noar ti set b1='J' where id=5; -update noar tt set b2='SPF2VKZTAAR' where id=5; -update noar ti set b2='SPF2VKZTAAR' where id=5; -update noar tt set b0='EJ5YBRPHR' where id=6; -update noar ti set b0='EJ5YBRPHR' where id=6; -update noar tt set b1='GV2' where id=6; -update noar ti set b1='GV2' where id=6; -update noar tt set b2='HI90YAE5DF2WA7OIV2DDJHZKNM8EADH' where id=6; -update noar ti set b2='HI90YAE5DF2WA7OIV2DDJHZKNM8EADH' where id=6; -update noar tt set b0='R' where id=7; -update noar ti set b0='R' where id=7; -update noar tt set b1='5R2ZMNI8U4OSCN1RSXHA79OC66ACH' where id=7; -update noar ti set b1='5R2ZMNI8U4OSCN1RSXHA79OC66ACH' where id=7; -update noar tt set b2='9YFCAX' where id=7; -update noar ti set b2='9YFCAX' where id=7; -update noar tt set b0='Y1RN6IF8X31Y3DKNZ5GGPB3I2Z3DOA' where id=8; -update noar ti set b0='Y1RN6IF8X31Y3DKNZ5GGPB3I2Z3DOA' where id=8; -update noar tt set b1='B45L2BGXIR6AGB18MIL4IJ1YIE' where id=8; -update noar ti set b1='B45L2BGXIR6AGB18MIL4IJ1YIE' where id=8; -update noar tt set b2='3H02CTVAJ1UYT2BS8SJX5JB4V4JXXFA' where id=8; -update noar ti set b2='3H02CTVAJ1UYT2BS8SJX5JB4V4JXXFA' where id=8; -update noar tt set b0='954IT78G5DN4D' where id=9; -update noar ti set b0='954IT78G5DN4D' where id=9; -update noar tt set b1='S0ONUXIFI67G7T' where id=9; -update noar ti set b1='S0ONUXIFI67G7T' where id=9; -update noar tt set b2='K41RZTCZ61FMR' where id=9; -update noar ti set b2='K41RZTCZ61FMR' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 text null, - b1 text null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='9PDRR' where id=1; -update noar ti set b0='9PDRR' where id=1; -update noar tt set b1='YJWT6F3FJF6O69D4L2' where id=1; -update noar ti set b1='YJWT6F3FJF6O69D4L2' where id=1; -update noar tt set b2='N4QR' where id=1; -update noar ti set b2='N4QR' where id=1; -update noar tt set b0='B5R9FO1' where id=2; -update noar ti set b0='B5R9FO1' where id=2; -update noar tt set b1='0Q39EW' where id=2; -update noar ti set b1='0Q39EW' where id=2; -update noar tt set b2='96LO1MFORWSRU0JKFVNDX2KX1XGNINJ' where id=2; -update noar ti set b2='96LO1MFORWSRU0JKFVNDX2KX1XGNINJ' where id=2; -update noar tt set b0='Y4YX8921BJM4DW3Z7Z0W' where id=3; -update noar ti set b0='Y4YX8921BJM4DW3Z7Z0W' where id=3; -update noar tt set b1='ITM8GR2EDW8L7QA7QTD1JRFCC7NR6AZD' where id=3; -update noar ti set b1='ITM8GR2EDW8L7QA7QTD1JRFCC7NR6AZD' where id=3; -update noar tt set b2='9WWY7BGR7JMDIIZCF4A7FQPZN64N' where id=3; -update noar ti set b2='9WWY7BGR7JMDIIZCF4A7FQPZN64N' where id=3; -update noar tt set b0='Z6L250O1S' where id=4; -update noar ti set b0='Z6L250O1S' where id=4; -update noar tt set b1='YQL6L44N9XX39G6L23CZC5QOKY' where id=4; -update noar ti set b1='YQL6L44N9XX39G6L23CZC5QOKY' where id=4; -update noar tt set b2='2J0V08Z6RZD5WBKCXTEZW1FZLRDW7Y' where id=4; -update noar ti set b2='2J0V08Z6RZD5WBKCXTEZW1FZLRDW7Y' where id=4; -update noar tt set b0='IW5Q65CI0THXPBGQ3NAXXDNI06' where id=5; -update noar ti set b0='IW5Q65CI0THXPBGQ3NAXXDNI06' where id=5; -update noar tt set b1='U3B9K0CFSOOJ0RLKZW0MKUHEPYQ' where id=5; -update noar ti set b1='U3B9K0CFSOOJ0RLKZW0MKUHEPYQ' where id=5; -update noar tt set b2='PCPIC5BCS23NVUGXK4' where id=5; -update noar ti set b2='PCPIC5BCS23NVUGXK4' where id=5; -update noar tt set b0='29YI53POYKDJXB6DOKPEYBZSB9C' where id=6; -update noar ti set b0='29YI53POYKDJXB6DOKPEYBZSB9C' where id=6; -update noar tt set b1='UU4WGE7FUQVIFXD98O' where id=6; -update noar ti set b1='UU4WGE7FUQVIFXD98O' where id=6; -update noar tt set b2='MX3WNZ' where id=6; -update noar ti set b2='MX3WNZ' where id=6; -update noar tt set b0='3KV07CY5WSTUUUSD67DBEG6B' where id=7; -update noar ti set b0='3KV07CY5WSTUUUSD67DBEG6B' where id=7; -update noar tt set b1='9H8LBF7IPVSJVEWCEDDFKWOS' where id=7; -update noar ti set b1='9H8LBF7IPVSJVEWCEDDFKWOS' where id=7; -update noar tt set b2='8AN159KCL5KERUVC' where id=7; -update noar ti set b2='8AN159KCL5KERUVC' where id=7; -update noar tt set b0='7MMD31CWOVRTHTGM6CDAX35W7' where id=8; -update noar ti set b0='7MMD31CWOVRTHTGM6CDAX35W7' where id=8; -update noar tt set b1='XHM8L9CUJURAT' where id=8; -update noar ti set b1='XHM8L9CUJURAT' where id=8; -update noar tt set b2='CB3VD5FFE9T9WW3GGDZW09DWAQO' where id=8; -update noar ti set b2='CB3VD5FFE9T9WW3GGDZW09DWAQO' where id=8; -update noar tt set b0='767TM4RMFEBRS4NSYVSI6U8MKB8C' where id=9; -update noar ti set b0='767TM4RMFEBRS4NSYVSI6U8MKB8C' where id=9; -update noar tt set b1='D7X2NO5F6V6S01APM6O30EG5BHKM' where id=9; -update noar ti set b1='D7X2NO5F6V6S01APM6O30EG5BHKM' where id=9; -update noar tt set b2='6SDB8NYHYVZWXZEFTYC50X8YN' where id=9; -update noar ti set b2='6SDB8NYHYVZWXZEFTYC50X8YN' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 text not null, - b1 text not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='9YTTXBH3O0JP8JHED' where id=1; -update noar ti set b0='9YTTXBH3O0JP8JHED' where id=1; -update noar tt set b1='BDSIF9GRHQ4SE0FO0PTW9GK' where id=1; -update noar ti set b1='BDSIF9GRHQ4SE0FO0PTW9GK' where id=1; -update noar tt set b2='9X3XHHY7BETNSR30NA44GUDFLCZRMFZ' where id=1; -update noar ti set b2='9X3XHHY7BETNSR30NA44GUDFLCZRMFZ' where id=1; -update noar tt set b0='NV3MVBDLV7FNH6PB8J5O06IVRV' where id=2; -update noar ti set b0='NV3MVBDLV7FNH6PB8J5O06IVRV' where id=2; -update noar tt set b1='LKXSN4SGRH2S8CRG' where id=2; -update noar ti set b1='LKXSN4SGRH2S8CRG' where id=2; -update noar tt set b2='U4Z0FNP2LK3PG' where id=2; -update noar ti set b2='U4Z0FNP2LK3PG' where id=2; -update noar tt set b0='50ZUMS' where id=3; -update noar ti set b0='50ZUMS' where id=3; -update noar tt set b1='60TXDK826A8NIVQ0ITO79H7S0VBQY93' where id=3; -update noar ti set b1='60TXDK826A8NIVQ0ITO79H7S0VBQY93' where id=3; -update noar tt set b2='HVJIGK1ZZ1C' where id=3; -update noar ti set b2='HVJIGK1ZZ1C' where id=3; -update noar tt set b0='K0MB' where id=4; -update noar ti set b0='K0MB' where id=4; -update noar tt set b1='XXGFNIO' where id=4; -update noar ti set b1='XXGFNIO' where id=4; -update noar tt set b2='AVHY40W9J7Z' where id=4; -update noar ti set b2='AVHY40W9J7Z' where id=4; -update noar tt set b0='Q' where id=5; -update noar ti set b0='Q' where id=5; -update noar tt set b1='5BLHLE' where id=5; -update noar ti set b1='5BLHLE' where id=5; -update noar tt set b2='TT6I' where id=5; -update noar ti set b2='TT6I' where id=5; -update noar tt set b0='TR6TBKNST5US9OF6J19AFF34K8KZH' where id=6; -update noar ti set b0='TR6TBKNST5US9OF6J19AFF34K8KZH' where id=6; -update noar tt set b1='08VYPDAD' where id=6; -update noar ti set b1='08VYPDAD' where id=6; -update noar tt set b2='SC2IP6C' where id=6; -update noar ti set b2='SC2IP6C' where id=6; -update noar tt set b0='WQYRGW4BHD17YJC8U1KMXUWE2WH' where id=7; -update noar ti set b0='WQYRGW4BHD17YJC8U1KMXUWE2WH' where id=7; -update noar tt set b1='0I1VKWQ5YCC9RQCFXXDQ0OGIE0EYSEM1' where id=7; -update noar ti set b1='0I1VKWQ5YCC9RQCFXXDQ0OGIE0EYSEM1' where id=7; -update noar tt set b2='TAIIGOZ1IVKIZCQJ0VPB1Y59Y' where id=7; -update noar ti set b2='TAIIGOZ1IVKIZCQJ0VPB1Y59Y' where id=7; -update noar tt set b0='MYPFFRUD9U9JQUCIE2VB1' where id=8; -update noar ti set b0='MYPFFRUD9U9JQUCIE2VB1' where id=8; -update noar tt set b1='AJXFU5274YAHNGLY64KL4QVWY14DQI' where id=8; -update noar ti set b1='AJXFU5274YAHNGLY64KL4QVWY14DQI' where id=8; -update noar tt set b2='XMKA9NAK0CUECYB0QLBCUZZKZ8M0IO7' where id=8; -update noar ti set b2='XMKA9NAK0CUECYB0QLBCUZZKZ8M0IO7' where id=8; -update noar tt set b0='ZAQ' where id=9; -update noar ti set b0='ZAQ' where id=9; -update noar tt set b1='UKJZ1K865PGML0CR' where id=9; -update noar ti set b1='UKJZ1K865PGML0CR' where id=9; -update noar tt set b2='3JZNQ6KYFI5CVIPW2' where id=9; -update noar ti set b2='3JZNQ6KYFI5CVIPW2' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 text null, - b1 text null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='TKPI1SH2U0AA0QK5AAFPL3Z6DJIG4C' where id=1; -update noar ti set b0='TKPI1SH2U0AA0QK5AAFPL3Z6DJIG4C' where id=1; -update noar tt set b1='5VTYJ7IAH' where id=1; -update noar ti set b1='5VTYJ7IAH' where id=1; -update noar tt set b2='IWIH3TXEVUEOUB57FW6YO3O0XU2WXXWL' where id=1; -update noar ti set b2='IWIH3TXEVUEOUB57FW6YO3O0XU2WXXWL' where id=1; -update noar tt set b0='6PAXYU1552ZPFC8LHU3EB9V65NX262JA' where id=2; -update noar ti set b0='6PAXYU1552ZPFC8LHU3EB9V65NX262JA' where id=2; -update noar tt set b1='53UX1QOKRL7X8TXY85EZ' where id=2; -update noar ti set b1='53UX1QOKRL7X8TXY85EZ' where id=2; -update noar tt set b2='IHKV66Q2MTXPGWJJ' where id=2; -update noar ti set b2='IHKV66Q2MTXPGWJJ' where id=2; -update noar tt set b0='I0BGQKWU5L5JOKJWDLGXUKJDIP' where id=3; -update noar ti set b0='I0BGQKWU5L5JOKJWDLGXUKJDIP' where id=3; -update noar tt set b1='I18ATAJ20NKWC798E8EPIKQ4PYRH1EIZ' where id=3; -update noar ti set b1='I18ATAJ20NKWC798E8EPIKQ4PYRH1EIZ' where id=3; -update noar tt set b2='5' where id=3; -update noar ti set b2='5' where id=3; -update noar tt set b0='XSLQBWR13ENOHEY2W' where id=4; -update noar ti set b0='XSLQBWR13ENOHEY2W' where id=4; -update noar tt set b1='Z' where id=4; -update noar ti set b1='Z' where id=4; -update noar tt set b2='J54QREWMG121FEVNRC0SOAPBWB00YML8' where id=4; -update noar ti set b2='J54QREWMG121FEVNRC0SOAPBWB00YML8' where id=4; -update noar tt set b0='COAA589ST1CR0KT9I8RV0YU' where id=5; -update noar ti set b0='COAA589ST1CR0KT9I8RV0YU' where id=5; -update noar tt set b1='ZE72TSPZOVD50KLOKOP' where id=5; -update noar ti set b1='ZE72TSPZOVD50KLOKOP' where id=5; -update noar tt set b2='JH9ILCHR9WOVD55OOY34ZKVNU6' where id=5; -update noar ti set b2='JH9ILCHR9WOVD55OOY34ZKVNU6' where id=5; -update noar tt set b0='BVLQB5IZ7FYRS7YHET0PWZ' where id=6; -update noar ti set b0='BVLQB5IZ7FYRS7YHET0PWZ' where id=6; -update noar tt set b1='ORKV' where id=6; -update noar ti set b1='ORKV' where id=6; -update noar tt set b2='ZAPAO0VY74V2GNBM204HIE9NEO3OL1S' where id=6; -update noar ti set b2='ZAPAO0VY74V2GNBM204HIE9NEO3OL1S' where id=6; -update noar tt set b0='CP06CLD2RARFYGE8' where id=7; -update noar ti set b0='CP06CLD2RARFYGE8' where id=7; -update noar tt set b1='GTKGXWTKS14QVAHPND5' where id=7; -update noar ti set b1='GTKGXWTKS14QVAHPND5' where id=7; -update noar tt set b2='CM' where id=7; -update noar ti set b2='CM' where id=7; -update noar tt set b0='A3SJHCG64MY3SDDGP1H4TMFRJ9309D1S' where id=8; -update noar ti set b0='A3SJHCG64MY3SDDGP1H4TMFRJ9309D1S' where id=8; -update noar tt set b1='QR6J3GUTI8PHITP' where id=8; -update noar ti set b1='QR6J3GUTI8PHITP' where id=8; -update noar tt set b2='INP2JHVS1KGJ8F2X7AHYX8WMEVMOI87V' where id=8; -update noar ti set b2='INP2JHVS1KGJ8F2X7AHYX8WMEVMOI87V' where id=8; -update noar tt set b0='4OOENX85VMTHK0YOO4VASHQJ6FW4JTG' where id=9; -update noar ti set b0='4OOENX85VMTHK0YOO4VASHQJ6FW4JTG' where id=9; -update noar tt set b1='QY1D23A7XH3X' where id=9; -update noar ti set b1='QY1D23A7XH3X' where id=9; -update noar tt set b2='IZJJRU7DRVI3F2' where id=9; -update noar ti set b2='IZJJRU7DRVI3F2' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 text not null, - b1 text not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='ZOJ9SW49HXQQAZFK' where id=1; -update noar ti set b0='ZOJ9SW49HXQQAZFK' where id=1; -update noar tt set b1='6YP47XZYE1MVTK65OERJKIL2YET80BK' where id=1; -update noar ti set b1='6YP47XZYE1MVTK65OERJKIL2YET80BK' where id=1; -update noar tt set b2='K6B2HO6PT' where id=1; -update noar ti set b2='K6B2HO6PT' where id=1; -update noar tt set b0='G7UWUB4' where id=2; -update noar ti set b0='G7UWUB4' where id=2; -update noar tt set b1='H5NY6M6N96BLF9ICD2M8Y66VE' where id=2; -update noar ti set b1='H5NY6M6N96BLF9ICD2M8Y66VE' where id=2; -update noar tt set b2='DH0SBB0MMP09FDKGYRXGVNU1G92P44' where id=2; -update noar ti set b2='DH0SBB0MMP09FDKGYRXGVNU1G92P44' where id=2; -update noar tt set b0='GPHWBK8' where id=3; -update noar ti set b0='GPHWBK8' where id=3; -update noar tt set b1='TQ2JG9D0WP48GOR04L3GTDRBHG' where id=3; -update noar ti set b1='TQ2JG9D0WP48GOR04L3GTDRBHG' where id=3; -update noar tt set b2='AT1V1LM2K3G' where id=3; -update noar ti set b2='AT1V1LM2K3G' where id=3; -update noar tt set b0='QI4AM1Q8W5L4ENGSCR6KPQZOL9S6IF' where id=4; -update noar ti set b0='QI4AM1Q8W5L4ENGSCR6KPQZOL9S6IF' where id=4; -update noar tt set b1='PA2IBLRSF2USL6W32J7DSNLUVPUONY7H' where id=4; -update noar ti set b1='PA2IBLRSF2USL6W32J7DSNLUVPUONY7H' where id=4; -update noar tt set b2='735WPLOM' where id=4; -update noar ti set b2='735WPLOM' where id=4; -update noar tt set b0='U8MXOUAJU8Q0HLQZ8U5SLN9' where id=5; -update noar ti set b0='U8MXOUAJU8Q0HLQZ8U5SLN9' where id=5; -update noar tt set b1='G15702GA2MAUTTE9L87GY' where id=5; -update noar ti set b1='G15702GA2MAUTTE9L87GY' where id=5; -update noar tt set b2='NCWJ661R' where id=5; -update noar ti set b2='NCWJ661R' where id=5; -update noar tt set b0='939WN2' where id=6; -update noar ti set b0='939WN2' where id=6; -update noar tt set b1='01RSWCKNG7KR6GRAV7FLB901IYQV' where id=6; -update noar ti set b1='01RSWCKNG7KR6GRAV7FLB901IYQV' where id=6; -update noar tt set b2='B' where id=6; -update noar ti set b2='B' where id=6; -update noar tt set b0='1RNSOBU73X' where id=7; -update noar ti set b0='1RNSOBU73X' where id=7; -update noar tt set b1='3W606F9XRYI89205LMZNG1BS19XNU' where id=7; -update noar ti set b1='3W606F9XRYI89205LMZNG1BS19XNU' where id=7; -update noar tt set b2='JH4HDYDVZT9ITR' where id=7; -update noar ti set b2='JH4HDYDVZT9ITR' where id=7; -update noar tt set b0='PHJU3GC28F97RFABA2V69GGB0BUT235' where id=8; -update noar ti set b0='PHJU3GC28F97RFABA2V69GGB0BUT235' where id=8; -update noar tt set b1='53XB8R8PWE1NNNB7' where id=8; -update noar ti set b1='53XB8R8PWE1NNNB7' where id=8; -update noar tt set b2='UFPD2BL4SIOGE4VBF7O2O6L68VT' where id=8; -update noar ti set b2='UFPD2BL4SIOGE4VBF7O2O6L68VT' where id=8; -update noar tt set b0='V4F3D791' where id=9; -update noar ti set b0='V4F3D791' where id=9; -update noar tt set b1='9H4PC2PS3YEKU' where id=9; -update noar ti set b1='9H4PC2PS3YEKU' where id=9; -update noar tt set b2='6YVZOJIQCVDTPSX6N6GRG' where id=9; -update noar ti set b2='6YVZOJIQCVDTPSX6N6GRG' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 text null, - b1 text null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='8PFJXWHPTLME3MS7VAJ9ONHHQQ' where id=1; -update noar ti set b0='8PFJXWHPTLME3MS7VAJ9ONHHQQ' where id=1; -update noar tt set b1='C6RF5LRN62Q7TTG' where id=1; -update noar ti set b1='C6RF5LRN62Q7TTG' where id=1; -update noar tt set b2='X' where id=1; -update noar ti set b2='X' where id=1; -update noar tt set b0='YR4KE' where id=2; -update noar ti set b0='YR4KE' where id=2; -update noar tt set b1='R1WEIKTVQNOODULE' where id=2; -update noar ti set b1='R1WEIKTVQNOODULE' where id=2; -update noar tt set b2='0E2RPX0CRPKS5XXAAA9YDC5HL' where id=2; -update noar ti set b2='0E2RPX0CRPKS5XXAAA9YDC5HL' where id=2; -update noar tt set b0='ZQ80K8E8KJSMFXX' where id=3; -update noar ti set b0='ZQ80K8E8KJSMFXX' where id=3; -update noar tt set b1='13' where id=3; -update noar ti set b1='13' where id=3; -update noar tt set b2='2P1LXI' where id=3; -update noar ti set b2='2P1LXI' where id=3; -update noar tt set b0='YJMVH7FHL83P7DAR6BE396792V5FTXXE' where id=4; -update noar ti set b0='YJMVH7FHL83P7DAR6BE396792V5FTXXE' where id=4; -update noar tt set b1='1O32R1Q57Y6VBUG49PIIQ' where id=4; -update noar ti set b1='1O32R1Q57Y6VBUG49PIIQ' where id=4; -update noar tt set b2='J2Q' where id=4; -update noar ti set b2='J2Q' where id=4; -update noar tt set b0='JHZ60NXWD1Z1AU1' where id=5; -update noar ti set b0='JHZ60NXWD1Z1AU1' where id=5; -update noar tt set b1='KWRSEAMTEJR2FA7' where id=5; -update noar ti set b1='KWRSEAMTEJR2FA7' where id=5; -update noar tt set b2='IPIYGP01EUO' where id=5; -update noar ti set b2='IPIYGP01EUO' where id=5; -update noar tt set b0='S1P0MAEVOEQKFWAMRFHQA99ZB' where id=6; -update noar ti set b0='S1P0MAEVOEQKFWAMRFHQA99ZB' where id=6; -update noar tt set b1='DQOJ2V96R8H' where id=6; -update noar ti set b1='DQOJ2V96R8H' where id=6; -update noar tt set b2='70T9DR7KCA7WS5RLA40IPSJP' where id=6; -update noar ti set b2='70T9DR7KCA7WS5RLA40IPSJP' where id=6; -update noar tt set b0='TRMSFWV66PF' where id=7; -update noar ti set b0='TRMSFWV66PF' where id=7; -update noar tt set b1='8WSO2LT0VUHP1RMIM' where id=7; -update noar ti set b1='8WSO2LT0VUHP1RMIM' where id=7; -update noar tt set b2='DHKM3N3IJVJC' where id=7; -update noar ti set b2='DHKM3N3IJVJC' where id=7; -update noar tt set b0='T9GZ47NM' where id=8; -update noar ti set b0='T9GZ47NM' where id=8; -update noar tt set b1='68I4PDRVJE2' where id=8; -update noar ti set b1='68I4PDRVJE2' where id=8; -update noar tt set b2='ALPRPCMWH4I9OCHFRJ5WSRP4KORZFO7A' where id=8; -update noar ti set b2='ALPRPCMWH4I9OCHFRJ5WSRP4KORZFO7A' where id=8; -update noar tt set b0='2PH7G3W' where id=9; -update noar ti set b0='2PH7G3W' where id=9; -update noar tt set b1='VF4MQFQB9V6XA64VZV73Q6V1B037E9VO' where id=9; -update noar ti set b1='VF4MQFQB9V6XA64VZV73Q6V1B037E9VO' where id=9; -update noar tt set b2='S' where id=9; -update noar ti set b2='S' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 text not null, - b1 text not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='QUJ9LBDNAXIHUFMR991SEHLDPJM' where id=1; -update noar ti set b0='QUJ9LBDNAXIHUFMR991SEHLDPJM' where id=1; -update noar tt set b1='UWA642K8WUJN78WE2R0A3AC1Z' where id=1; -update noar ti set b1='UWA642K8WUJN78WE2R0A3AC1Z' where id=1; -update noar tt set b2='RDZ9US' where id=1; -update noar ti set b2='RDZ9US' where id=1; -update noar tt set b0='4EW1J0I8' where id=2; -update noar ti set b0='4EW1J0I8' where id=2; -update noar tt set b1='P0IRCH8UR9KU52478' where id=2; -update noar ti set b1='P0IRCH8UR9KU52478' where id=2; -update noar tt set b2='HJOZI2OW98D7' where id=2; -update noar ti set b2='HJOZI2OW98D7' where id=2; -update noar tt set b0='9RJ9D9369596' where id=3; -update noar ti set b0='9RJ9D9369596' where id=3; -update noar tt set b1='TVXNJ5BU691U8Z01S' where id=3; -update noar ti set b1='TVXNJ5BU691U8Z01S' where id=3; -update noar tt set b2='C9LZXIVO2R1F3BDLA1HDR7' where id=3; -update noar ti set b2='C9LZXIVO2R1F3BDLA1HDR7' where id=3; -update noar tt set b0='IML54WVA5PRYNRPE0R7VAVD7DGL' where id=4; -update noar ti set b0='IML54WVA5PRYNRPE0R7VAVD7DGL' where id=4; -update noar tt set b1='FUOSDQBJ203P' where id=4; -update noar ti set b1='FUOSDQBJ203P' where id=4; -update noar tt set b2='QC11' where id=4; -update noar ti set b2='QC11' where id=4; -update noar tt set b0='OL2UZNX6J19SWR90S5ECPB2HC' where id=5; -update noar ti set b0='OL2UZNX6J19SWR90S5ECPB2HC' where id=5; -update noar tt set b1='A' where id=5; -update noar ti set b1='A' where id=5; -update noar tt set b2='68N06E5CUAV792AO' where id=5; -update noar ti set b2='68N06E5CUAV792AO' where id=5; -update noar tt set b0='H4U5K' where id=6; -update noar ti set b0='H4U5K' where id=6; -update noar tt set b1='6CTY54R1CV7MP8IRSITGY2E' where id=6; -update noar ti set b1='6CTY54R1CV7MP8IRSITGY2E' where id=6; -update noar tt set b2='Y50MFVAV039SF9YQUXIXIQP' where id=6; -update noar ti set b2='Y50MFVAV039SF9YQUXIXIQP' where id=6; -update noar tt set b0='VJ934C6XP73X7IHALF2008YX1RXCHKLL' where id=7; -update noar ti set b0='VJ934C6XP73X7IHALF2008YX1RXCHKLL' where id=7; -update noar tt set b1='F1FBJUSLMKORRUK0F2PF5JQWAV' where id=7; -update noar ti set b1='F1FBJUSLMKORRUK0F2PF5JQWAV' where id=7; -update noar tt set b2='8I1VRK' where id=7; -update noar ti set b2='8I1VRK' where id=7; -update noar tt set b0='1IFCV5OWSCDA0H69FP2L' where id=8; -update noar ti set b0='1IFCV5OWSCDA0H69FP2L' where id=8; -update noar tt set b1='U6ZE3HIWNQPFS0VMSV' where id=8; -update noar ti set b1='U6ZE3HIWNQPFS0VMSV' where id=8; -update noar tt set b2='OPO075JAZXT62TEHK' where id=8; -update noar ti set b2='OPO075JAZXT62TEHK' where id=8; -update noar tt set b0='UDXBKR5BT' where id=9; -update noar ti set b0='UDXBKR5BT' where id=9; -update noar tt set b1='M5M687DEUEBDZJ0OMCR71DGGDN84YG0' where id=9; -update noar ti set b1='M5M687DEUEBDZJ0OMCR71DGGDN84YG0' where id=9; -update noar tt set b2='3YV1IT' where id=9; -update noar ti set b2='3YV1IT' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 text null, - b1 text null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='P4AD2RGQ5Z8FCJFHPY1XPBFQ' where id=1; -update noar ti set b0='P4AD2RGQ5Z8FCJFHPY1XPBFQ' where id=1; -update noar tt set b1='00MV75PG3' where id=1; -update noar ti set b1='00MV75PG3' where id=1; -update noar tt set b2='RYVYLRSWKBTDMYEC1L1JT9D5ZMFX' where id=1; -update noar ti set b2='RYVYLRSWKBTDMYEC1L1JT9D5ZMFX' where id=1; -update noar tt set b0='U2TANQAGA77NH1K58V2R3' where id=2; -update noar ti set b0='U2TANQAGA77NH1K58V2R3' where id=2; -update noar tt set b1='63VLXO1C3D54A2' where id=2; -update noar ti set b1='63VLXO1C3D54A2' where id=2; -update noar tt set b2='JK2HLGFR8KK9F3KM3THI8' where id=2; -update noar ti set b2='JK2HLGFR8KK9F3KM3THI8' where id=2; -update noar tt set b0='BFIDS55EUYYHFCPQ7RVFZTZY35SDFP' where id=3; -update noar ti set b0='BFIDS55EUYYHFCPQ7RVFZTZY35SDFP' where id=3; -update noar tt set b1='UU6H2SZWJTX7MT8CH' where id=3; -update noar ti set b1='UU6H2SZWJTX7MT8CH' where id=3; -update noar tt set b2='JISET1GTB2PXR' where id=3; -update noar ti set b2='JISET1GTB2PXR' where id=3; -update noar tt set b0='E8PGHJ00E0EV8D9PJG44XKMWC1ZFPECH' where id=4; -update noar ti set b0='E8PGHJ00E0EV8D9PJG44XKMWC1ZFPECH' where id=4; -update noar tt set b1='XCO5EK1BCRPXK' where id=4; -update noar ti set b1='XCO5EK1BCRPXK' where id=4; -update noar tt set b2='N4DKM' where id=4; -update noar ti set b2='N4DKM' where id=4; -update noar tt set b0='4LGHUC2' where id=5; -update noar ti set b0='4LGHUC2' where id=5; -update noar tt set b1='SQG1PEBF3X44D0P4QI6936S93' where id=5; -update noar ti set b1='SQG1PEBF3X44D0P4QI6936S93' where id=5; -update noar tt set b2='V1SNEVI1QR31ZKJ5ZP4' where id=5; -update noar ti set b2='V1SNEVI1QR31ZKJ5ZP4' where id=5; -update noar tt set b0='8' where id=6; -update noar ti set b0='8' where id=6; -update noar tt set b1='LI9M938N2DY6O63RYS3' where id=6; -update noar ti set b1='LI9M938N2DY6O63RYS3' where id=6; -update noar tt set b2='I91ME1ZUAD6H2XO86WJK5BHEQS' where id=6; -update noar ti set b2='I91ME1ZUAD6H2XO86WJK5BHEQS' where id=6; -update noar tt set b0='ZDH6QOA6V42TN' where id=7; -update noar ti set b0='ZDH6QOA6V42TN' where id=7; -update noar tt set b1='OCIJD' where id=7; -update noar ti set b1='OCIJD' where id=7; -update noar tt set b2='NA9621YEEDZGASGE0' where id=7; -update noar ti set b2='NA9621YEEDZGASGE0' where id=7; -update noar tt set b0='7FGZFLEPTGIZZKZMRSMY9' where id=8; -update noar ti set b0='7FGZFLEPTGIZZKZMRSMY9' where id=8; -update noar tt set b1='61U3PWW00LL731GIOCZG' where id=8; -update noar ti set b1='61U3PWW00LL731GIOCZG' where id=8; -update noar tt set b2='4573VI901F86GDSDO4NL9661B' where id=8; -update noar ti set b2='4573VI901F86GDSDO4NL9661B' where id=8; -update noar tt set b0='BB1T3VLBBTF3J1JQIIM3' where id=9; -update noar ti set b0='BB1T3VLBBTF3J1JQIIM3' where id=9; -update noar tt set b1='YODBR' where id=9; -update noar ti set b1='YODBR' where id=9; -update noar tt set b2='PB6SXV8USIP4U0UQLUSONBQ0' where id=9; -update noar ti set b2='PB6SXV8USIP4U0UQLUSONBQ0' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 text not null, - b1 text not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='31PKJM51YE4' where id=1; -update noar ti set b0='31PKJM51YE4' where id=1; -update noar tt set b1='WXXEI' where id=1; -update noar ti set b1='WXXEI' where id=1; -update noar tt set b2='YLN3FHUROB2FO2BR3DFS6' where id=1; -update noar ti set b2='YLN3FHUROB2FO2BR3DFS6' where id=1; -update noar tt set b0='HF4HBXQ6IS' where id=2; -update noar ti set b0='HF4HBXQ6IS' where id=2; -update noar tt set b1='Q8PDD' where id=2; -update noar ti set b1='Q8PDD' where id=2; -update noar tt set b2='O3X1SR3BJI2ZV9' where id=2; -update noar ti set b2='O3X1SR3BJI2ZV9' where id=2; -update noar tt set b0='UKDG5PRMIO4I' where id=3; -update noar ti set b0='UKDG5PRMIO4I' where id=3; -update noar tt set b1='JNO5J8O4NFBJEUN5QC8YH3VTBS4Y4' where id=3; -update noar ti set b1='JNO5J8O4NFBJEUN5QC8YH3VTBS4Y4' where id=3; -update noar tt set b2='MAEOTNCLB30YK2AP8N' where id=3; -update noar ti set b2='MAEOTNCLB30YK2AP8N' where id=3; -update noar tt set b0='NUBEYHPAOZOXHSY1TOLMN6F3JHXJ0Y72' where id=4; -update noar ti set b0='NUBEYHPAOZOXHSY1TOLMN6F3JHXJ0Y72' where id=4; -update noar tt set b1='RBR0JR6F6B8GWHK1W40BW4' where id=4; -update noar ti set b1='RBR0JR6F6B8GWHK1W40BW4' where id=4; -update noar tt set b2='X7WECAGSM9P5' where id=4; -update noar ti set b2='X7WECAGSM9P5' where id=4; -update noar tt set b0='DRVXBSP42P' where id=5; -update noar ti set b0='DRVXBSP42P' where id=5; -update noar tt set b1='MEO5' where id=5; -update noar ti set b1='MEO5' where id=5; -update noar tt set b2='NWR7410JBM0QX101I' where id=5; -update noar ti set b2='NWR7410JBM0QX101I' where id=5; -update noar tt set b0='U4LM8OY6H744' where id=6; -update noar ti set b0='U4LM8OY6H744' where id=6; -update noar tt set b1='JZLIYZVWLOSH7RQ6' where id=6; -update noar ti set b1='JZLIYZVWLOSH7RQ6' where id=6; -update noar tt set b2='AK7ERXV9UDLOAUFC6ZD8Z' where id=6; -update noar ti set b2='AK7ERXV9UDLOAUFC6ZD8Z' where id=6; -update noar tt set b0='EI13RVZEBO' where id=7; -update noar ti set b0='EI13RVZEBO' where id=7; -update noar tt set b1='MOKVMZ9NOFBE5MZ1R3' where id=7; -update noar ti set b1='MOKVMZ9NOFBE5MZ1R3' where id=7; -update noar tt set b2='IS1909KHX46Y52T75' where id=7; -update noar ti set b2='IS1909KHX46Y52T75' where id=7; -update noar tt set b0='7IAF' where id=8; -update noar ti set b0='7IAF' where id=8; -update noar tt set b1='V53X6XCV3KSPPXJV' where id=8; -update noar ti set b1='V53X6XCV3KSPPXJV' where id=8; -update noar tt set b2='F15HUXD0D2Z' where id=8; -update noar ti set b2='F15HUXD0D2Z' where id=8; -update noar tt set b0='7SA2WI9HJ16JCG92O78I0' where id=9; -update noar ti set b0='7SA2WI9HJ16JCG92O78I0' where id=9; -update noar tt set b1='QYVUDKJ' where id=9; -update noar ti set b1='QYVUDKJ' where id=9; -update noar tt set b2='75EKSBDTZEY6ZMUSR9RG99LKG3I' where id=9; -update noar ti set b2='75EKSBDTZEY6ZMUSR9RG99LKG3I' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 text null, - b1 text null, - b2 text null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='KGT2OUVZ4RW75Z720HTRXUEUT0C9L' where id=1; -update noar ti set b0='KGT2OUVZ4RW75Z720HTRXUEUT0C9L' where id=1; -update noar tt set b1='7VVLWMQ5RZI49LQ3CYGTBW37VRV1C08Y' where id=1; -update noar ti set b1='7VVLWMQ5RZI49LQ3CYGTBW37VRV1C08Y' where id=1; -update noar tt set b2='UHM3PVVOFK' where id=1; -update noar ti set b2='UHM3PVVOFK' where id=1; -update noar tt set b0='3WLFBVTSTFOAR1H6LZJII57' where id=2; -update noar ti set b0='3WLFBVTSTFOAR1H6LZJII57' where id=2; -update noar tt set b1='3RV5I3S44HLJ5C22YE1V1LZHV4XU5O7' where id=2; -update noar ti set b1='3RV5I3S44HLJ5C22YE1V1LZHV4XU5O7' where id=2; -update noar tt set b2='EH' where id=2; -update noar ti set b2='EH' where id=2; -update noar tt set b0='04K67BHVGEVC2IIE' where id=3; -update noar ti set b0='04K67BHVGEVC2IIE' where id=3; -update noar tt set b1='VQRJQFRDPSN2EO88GU84C' where id=3; -update noar ti set b1='VQRJQFRDPSN2EO88GU84C' where id=3; -update noar tt set b2='0E' where id=3; -update noar ti set b2='0E' where id=3; -update noar tt set b0='Z4KC4F123J711' where id=4; -update noar ti set b0='Z4KC4F123J711' where id=4; -update noar tt set b1='K07' where id=4; -update noar ti set b1='K07' where id=4; -update noar tt set b2='3CEN03R' where id=4; -update noar ti set b2='3CEN03R' where id=4; -update noar tt set b0='LZXPD2UT' where id=5; -update noar ti set b0='LZXPD2UT' where id=5; -update noar tt set b1='E386' where id=5; -update noar ti set b1='E386' where id=5; -update noar tt set b2='N6V64UW' where id=5; -update noar ti set b2='N6V64UW' where id=5; -update noar tt set b0='MZE3EVZ0GTQ847GEAHQ' where id=6; -update noar ti set b0='MZE3EVZ0GTQ847GEAHQ' where id=6; -update noar tt set b1='4J0F9WUCWY06C5IV9QBLUXXE1' where id=6; -update noar ti set b1='4J0F9WUCWY06C5IV9QBLUXXE1' where id=6; -update noar tt set b2='FRCJF1683XAKVEE' where id=6; -update noar ti set b2='FRCJF1683XAKVEE' where id=6; -update noar tt set b0='DR8V3B9VRB8UWPKDYNWN9VN14B' where id=7; -update noar ti set b0='DR8V3B9VRB8UWPKDYNWN9VN14B' where id=7; -update noar tt set b1='OTNQCJDJRKVUXXPU' where id=7; -update noar ti set b1='OTNQCJDJRKVUXXPU' where id=7; -update noar tt set b2='BIIJLOMAME661KQ7A2' where id=7; -update noar ti set b2='BIIJLOMAME661KQ7A2' where id=7; -update noar tt set b0='IS17X2UTDBJQBKOHQ997MQAFM7XK' where id=8; -update noar ti set b0='IS17X2UTDBJQBKOHQ997MQAFM7XK' where id=8; -update noar tt set b1='4103QO4O9HPIZ7Z970RORJ85J99QU2J2' where id=8; -update noar ti set b1='4103QO4O9HPIZ7Z970RORJ85J99QU2J2' where id=8; -update noar tt set b2='AWCPPC74S89S7GBV9ZZMJJN2CZX' where id=8; -update noar ti set b2='AWCPPC74S89S7GBV9ZZMJJN2CZX' where id=8; -update noar tt set b0='7373' where id=9; -update noar ti set b0='7373' where id=9; -update noar tt set b1='42O9AXDJDCC6GCTD7FI7' where id=9; -update noar ti set b1='42O9AXDJDCC6GCTD7FI7' where id=9; -update noar tt set b2='GO6MZKMUBB318SARJ' where id=9; -update noar ti set b2='GO6MZKMUBB318SARJ' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - b0 text not null, - b1 text not null, - b2 text not null -) engine=tokudb; -insert into tt values (1,'','',''); -insert into tt values (2,'','',''); -insert into tt values (3,'','',''); -insert into tt values (4,'','',''); -insert into tt values (5,'','',''); -insert into tt values (6,'','',''); -insert into tt values (7,'','',''); -insert into tt values (8,'','',''); -insert into tt values (9,'','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set b0='BN5I0IAG1H81K6N61ZL5DLGEEMR' where id=1; -update noar ti set b0='BN5I0IAG1H81K6N61ZL5DLGEEMR' where id=1; -update noar tt set b1='VI48T0MVLTMP21BJS607BACKW8' where id=1; -update noar ti set b1='VI48T0MVLTMP21BJS607BACKW8' where id=1; -update noar tt set b2='LR' where id=1; -update noar ti set b2='LR' where id=1; -update noar tt set b0='AOJ79MI3DOM7BB6IVCV4CN8' where id=2; -update noar ti set b0='AOJ79MI3DOM7BB6IVCV4CN8' where id=2; -update noar tt set b1='WSXB92NDOIWDCLCQGD2LM4CZX' where id=2; -update noar ti set b1='WSXB92NDOIWDCLCQGD2LM4CZX' where id=2; -update noar tt set b2='KNHK' where id=2; -update noar ti set b2='KNHK' where id=2; -update noar tt set b0='2G9N7R6EFQA7JE13ATMA3AH357VDS' where id=3; -update noar ti set b0='2G9N7R6EFQA7JE13ATMA3AH357VDS' where id=3; -update noar tt set b1='WJYP9XQVJ8RKEPQAGV' where id=3; -update noar ti set b1='WJYP9XQVJ8RKEPQAGV' where id=3; -update noar tt set b2='BFXR1STWUZY9RM' where id=3; -update noar ti set b2='BFXR1STWUZY9RM' where id=3; -update noar tt set b0='K0F3W234B0LZY6' where id=4; -update noar ti set b0='K0F3W234B0LZY6' where id=4; -update noar tt set b1='O5T9Y10C8OED2OC92ZJ8AB5WBCXCOB9S' where id=4; -update noar ti set b1='O5T9Y10C8OED2OC92ZJ8AB5WBCXCOB9S' where id=4; -update noar tt set b2='GBUS6Y9ECF' where id=4; -update noar ti set b2='GBUS6Y9ECF' where id=4; -update noar tt set b0='ZHC' where id=5; -update noar ti set b0='ZHC' where id=5; -update noar tt set b1='DQR9P5VSSBA01WQ' where id=5; -update noar ti set b1='DQR9P5VSSBA01WQ' where id=5; -update noar tt set b2='5' where id=5; -update noar ti set b2='5' where id=5; -update noar tt set b0='6T62BGHYI4JSUP45AT2ANX5' where id=6; -update noar ti set b0='6T62BGHYI4JSUP45AT2ANX5' where id=6; -update noar tt set b1='2XP9KMPQM56VQAPFI9H4CMMM4BW' where id=6; -update noar ti set b1='2XP9KMPQM56VQAPFI9H4CMMM4BW' where id=6; -update noar tt set b2='0QZ5R40' where id=6; -update noar ti set b2='0QZ5R40' where id=6; -update noar tt set b0='CXCL4RYSR57W7V3G1QK3M5W0ZH7' where id=7; -update noar ti set b0='CXCL4RYSR57W7V3G1QK3M5W0ZH7' where id=7; -update noar tt set b1='0HJLH1JK' where id=7; -update noar ti set b1='0HJLH1JK' where id=7; -update noar tt set b2='R09YIQW78' where id=7; -update noar ti set b2='R09YIQW78' where id=7; -update noar tt set b0='QLDCVCMHCISPBS8H9I' where id=8; -update noar ti set b0='QLDCVCMHCISPBS8H9I' where id=8; -update noar tt set b1='9Z1MCQY6GN5CVGWTE266LIE' where id=8; -update noar ti set b1='9Z1MCQY6GN5CVGWTE266LIE' where id=8; -update noar tt set b2='2IQ4JF3X0RK181I7DKZY' where id=8; -update noar ti set b2='2IQ4JF3X0RK181I7DKZY' where id=8; -update noar tt set b0='UDWIQTSM59BA8DBSPNLYS0EEJDFCFG' where id=9; -update noar ti set b0='UDWIQTSM59BA8DBSPNLYS0EEJDFCFG' where id=9; -update noar tt set b1='L' where id=9; -update noar ti set b1='L' where id=9; -update noar tt set b2='OQ22J6SMTSA0KSHTMU' where id=9; -update noar ti set b2='OQ22J6SMTSA0KSHTMU' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; +--source ../include/fast_update_gen_header.inc + +--let GENERATED=$MYSQL_TMP_DIR/generated_fast_update_blobs.inc + +--perl + + my $nrows = 10; + open(FILE, '>', "$ENV{GENERATED}") or die; + my @blob_types = ('tinyblob', 'blob', 'mediumblob', 'longblob', 'text'); + foreach my $a (@blob_types) { + foreach my $b (@blob_types) { + foreach my $c (@blob_types) { + foreach my $n ('null', 'not null') { + test_blobs([$a, $b, $c], $n, $nrows); + } + } + } + } + close FILE; + + sub test_blobs { + my $cols = shift; + my $n = shift; + my $nrows = shift; + + print FILE 'create table tt (id bigint unsigned primary key,'; + foreach my $i (0 .. $#{$cols}) { + if ($i < $#{$cols}) { + print FILE " b$i $cols->[$i] $n, "; + } + else { + print FILE "b$i $cols->[$i] $n"; + } + + } + print FILE ") engine=tokudb;\n"; + + foreach my $id (1 .. $nrows) { + if ($n eq 'null') { + print FILE "insert into tt (id) values ($id);\n"; + } + else { + print FILE "insert into tt values ($id,'','','');\n"; + } + } + + print FILE "create table ti like tt;\n"; + print FILE "alter table ti engine=innodb;\n"; + print FILE "insert into ti select * from tt;\n"; + + foreach my $id (1 .. $nrows) { + foreach my $i (0 .. $#{$cols}) { + my $long_str = rnd_str((rand(32) + 1), ("A" .. "Z", 0 .. 9)); + print FILE "update tt set b$i='$long_str' where id=$id;\n"; + print FILE "update ti set b$i='$long_str' where id=$id;\n"; + } + } + + print FILE '--let $diff_tables = test.tt, test.ti'."\n"; + print FILE '--source include/diff_tables.inc'."\n"; + print FILE 'drop table tt, ti;'; + } + + sub rnd_str { join '', @_[ map{ rand @_ } 1 .. shift ] } + +EOF + +--source ../include/fast_update_gen_footer_silent.inc diff --git a/mysql-test/suite/tokudb/t/fast_update_blobs_fixed_varchar.py b/mysql-test/suite/tokudb/t/fast_update_blobs_fixed_varchar.py deleted file mode 100644 index 6288b5b2a53b..000000000000 --- a/mysql-test/suite/tokudb/t/fast_update_blobs_fixed_varchar.py +++ /dev/null @@ -1,63 +0,0 @@ -#!/usr/bin/env python - -import sys -import random -import string - -def main(): - print "# generated by tokudb_fast_update_blobs_fixed_varchar.py" - print "source include/have_tokudb.inc;" - print "source include/have_innodb.inc;" - print "set default_storage_engine='tokudb';" - print "disable_warnings;" - print "drop table if exists t;" - print "enable_warnings;" - - nrows = 10 - - blob_types = [ 'tinyblob', 'blob', 'mediumblob', 'longblob' ] - for a in blob_types: - for b in blob_types: - for c in blob_types: - for n in [ 'null', 'not null' ]: - for v in [ 'varchar(32)', 'varchar(256)' ]: - test_blobs([ a, b, c ] , v, n, nrows) - return 0 - -def test_blobs(cols, v, n, nrows): - print "create table tt (id bigint unsigned primary key," - print " f0 int %s," % (n) - print " v0 %s %s," % (v, n) - for i in range(len(cols)): - if i < len(cols)-1: - print " b%d %s %s," % (i, cols[i], n) - else: - print " b%d %s %s" % (i, cols[i], n) - print ") engine=tokudb;" - - for id in range(1,nrows): - if n == 'null': - print "insert into tt (id) values (%d);" % (id) - else: - print "insert into tt values (%d,0,'','','','');" % (id) - - print "create table ti like tt;" - print "alter table ti engine=innodb;" - print "insert into ti select * from tt;" - - for id in range(1,nrows): - for i in range(3): - long_str = ''.join(random.choice(string.ascii_uppercase + string.digits) for x in range(random.randint(1,32))) - print "update noar tt set v%d='%s' where id=%d;" % (0, long_str, id) - print "update noar ti set v%d='%s' where id=%d;" % (0, long_str, id) - - long_str = ''.join(random.choice(string.ascii_uppercase + string.digits) for x in range(random.randint(1,32))) - print "update noar tt set b%d='%s' where id=%d;" % (i, long_str, id) - print "update noar ti set b%d='%s' where id=%d;" % (i, long_str, id) - - print "let $diff_tables = test.tt, test.ti;" - print "source include/diff_tables.inc;" - - print "drop table tt, ti;" - -sys.exit(main()) diff --git a/mysql-test/suite/tokudb/t/fast_update_blobs_fixed_varchar.test b/mysql-test/suite/tokudb/t/fast_update_blobs_fixed_varchar.test deleted file mode 100644 index c4df1a29f39f..000000000000 --- a/mysql-test/suite/tokudb/t/fast_update_blobs_fixed_varchar.test +++ /dev/null @@ -1,33287 +0,0 @@ -# generated by tokudb_fast_update_blobs_fixed_varchar.py -source include/have_tokudb.inc; -source include/have_innodb.inc; -set default_storage_engine='tokudb'; -disable_warnings; -drop table if exists t; -enable_warnings; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 tinyblob null, - b1 tinyblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='UP9F5O0JN4QXD8HH' where id=1; -update noar ti set v0='UP9F5O0JN4QXD8HH' where id=1; -update noar tt set b0='EQGX2U37E6GA0YSE85' where id=1; -update noar ti set b0='EQGX2U37E6GA0YSE85' where id=1; -update noar tt set v0='EAYWOECTE' where id=1; -update noar ti set v0='EAYWOECTE' where id=1; -update noar tt set b1='3DQMQ1AYYQMVH7KIDGQRPPYR2DG5L4FX' where id=1; -update noar ti set b1='3DQMQ1AYYQMVH7KIDGQRPPYR2DG5L4FX' where id=1; -update noar tt set v0='QAAYX2OSCJTKYCHQPOEVKQBB13B4U' where id=1; -update noar ti set v0='QAAYX2OSCJTKYCHQPOEVKQBB13B4U' where id=1; -update noar tt set b2='R7P1J6O112EUCRDX0WCD7IDVXRJ68' where id=1; -update noar ti set b2='R7P1J6O112EUCRDX0WCD7IDVXRJ68' where id=1; -update noar tt set v0='C2G3ODA9SGFXDOKM15LR9ZD8X' where id=2; -update noar ti set v0='C2G3ODA9SGFXDOKM15LR9ZD8X' where id=2; -update noar tt set b0='P2AACV03N5JCQ' where id=2; -update noar ti set b0='P2AACV03N5JCQ' where id=2; -update noar tt set v0='B6I2SNUZO7BF17MH8EN7WHCPCIE1NB' where id=2; -update noar ti set v0='B6I2SNUZO7BF17MH8EN7WHCPCIE1NB' where id=2; -update noar tt set b1='P39L5F08ZPVJE010T1ACA9ROE5Y5KWK' where id=2; -update noar ti set b1='P39L5F08ZPVJE010T1ACA9ROE5Y5KWK' where id=2; -update noar tt set v0='UEX612R01T443' where id=2; -update noar ti set v0='UEX612R01T443' where id=2; -update noar tt set b2='9BXWW9NT7MJPZH6E4LW' where id=2; -update noar ti set b2='9BXWW9NT7MJPZH6E4LW' where id=2; -update noar tt set v0='8VRY65Q0PZXYZMEWB7PAD08KK5T90973' where id=3; -update noar ti set v0='8VRY65Q0PZXYZMEWB7PAD08KK5T90973' where id=3; -update noar tt set b0='VN13VOB0DINTY1UYRUZQF1ASFG' where id=3; -update noar ti set b0='VN13VOB0DINTY1UYRUZQF1ASFG' where id=3; -update noar tt set v0='NKWSR6DE2RCFOSHBOWLUUDZ9CL4T8' where id=3; -update noar ti set v0='NKWSR6DE2RCFOSHBOWLUUDZ9CL4T8' where id=3; -update noar tt set b1='QB' where id=3; -update noar ti set b1='QB' where id=3; -update noar tt set v0='2EKWUEP95ULXGJB4OF' where id=3; -update noar ti set v0='2EKWUEP95ULXGJB4OF' where id=3; -update noar tt set b2='Q6IYFN' where id=3; -update noar ti set b2='Q6IYFN' where id=3; -update noar tt set v0='IKQCVMC' where id=4; -update noar ti set v0='IKQCVMC' where id=4; -update noar tt set b0='N535EEK3NPFVSLTB2FAFWRROGD744ZN' where id=4; -update noar ti set b0='N535EEK3NPFVSLTB2FAFWRROGD744ZN' where id=4; -update noar tt set v0='QHNVMNDLY3G4WOVP' where id=4; -update noar ti set v0='QHNVMNDLY3G4WOVP' where id=4; -update noar tt set b1='HDPRGT6XXXGVMZKEN9DN9' where id=4; -update noar ti set b1='HDPRGT6XXXGVMZKEN9DN9' where id=4; -update noar tt set v0='CV12CSM2AVQGZPHXA3Y2' where id=4; -update noar ti set v0='CV12CSM2AVQGZPHXA3Y2' where id=4; -update noar tt set b2='CW7Z0PVFFDQ8CK' where id=4; -update noar ti set b2='CW7Z0PVFFDQ8CK' where id=4; -update noar tt set v0='7SC69BS2SHACUDZVAT8KFC4' where id=5; -update noar ti set v0='7SC69BS2SHACUDZVAT8KFC4' where id=5; -update noar tt set b0='JDNI7VC' where id=5; -update noar ti set b0='JDNI7VC' where id=5; -update noar tt set v0='5SBZI8TP' where id=5; -update noar ti set v0='5SBZI8TP' where id=5; -update noar tt set b1='RTFVTNJXKCRHBSGJRY0IZN' where id=5; -update noar ti set b1='RTFVTNJXKCRHBSGJRY0IZN' where id=5; -update noar tt set v0='56VE0IR8LWSTMCHM' where id=5; -update noar ti set v0='56VE0IR8LWSTMCHM' where id=5; -update noar tt set b2='3FSJ78' where id=5; -update noar ti set b2='3FSJ78' where id=5; -update noar tt set v0='2X4Q8S76IL22ER5A2GVT' where id=6; -update noar ti set v0='2X4Q8S76IL22ER5A2GVT' where id=6; -update noar tt set b0='Y9101E34S6Z2OYB5MDYQPZGCM3IZL7' where id=6; -update noar ti set b0='Y9101E34S6Z2OYB5MDYQPZGCM3IZL7' where id=6; -update noar tt set v0='YQQR77N2QTM' where id=6; -update noar ti set v0='YQQR77N2QTM' where id=6; -update noar tt set b1='1ZALS3OP2JRCSCO8H66BE09WV8HC' where id=6; -update noar ti set b1='1ZALS3OP2JRCSCO8H66BE09WV8HC' where id=6; -update noar tt set v0='D8QT15LKKEJFNJG298Q77ZU' where id=6; -update noar ti set v0='D8QT15LKKEJFNJG298Q77ZU' where id=6; -update noar tt set b2='HYLO1AYTN' where id=6; -update noar ti set b2='HYLO1AYTN' where id=6; -update noar tt set v0='UFIWRPMOVW5C' where id=7; -update noar ti set v0='UFIWRPMOVW5C' where id=7; -update noar tt set b0='PES1N2P9GMTJDLGJAP5QDVQ4BNG' where id=7; -update noar ti set b0='PES1N2P9GMTJDLGJAP5QDVQ4BNG' where id=7; -update noar tt set v0='VLAQQZAT' where id=7; -update noar ti set v0='VLAQQZAT' where id=7; -update noar tt set b1='73FP' where id=7; -update noar ti set b1='73FP' where id=7; -update noar tt set v0='4DU1OB96AM6WMHZDR24WNN7NPI4' where id=7; -update noar ti set v0='4DU1OB96AM6WMHZDR24WNN7NPI4' where id=7; -update noar tt set b2='G1RF3N24F1U8L9I589U8WMO' where id=7; -update noar ti set b2='G1RF3N24F1U8L9I589U8WMO' where id=7; -update noar tt set v0='UYF92O382IWRRQ6MM1ZFAPQNZ8' where id=8; -update noar ti set v0='UYF92O382IWRRQ6MM1ZFAPQNZ8' where id=8; -update noar tt set b0='8KTWN9NSBQT6' where id=8; -update noar ti set b0='8KTWN9NSBQT6' where id=8; -update noar tt set v0='942BQ1D9B' where id=8; -update noar ti set v0='942BQ1D9B' where id=8; -update noar tt set b1='3IFV1B2FJY' where id=8; -update noar ti set b1='3IFV1B2FJY' where id=8; -update noar tt set v0='87I84MN9HJUQKYIFDPBRHR1' where id=8; -update noar ti set v0='87I84MN9HJUQKYIFDPBRHR1' where id=8; -update noar tt set b2='LYY8ML7GUN7UJ7IX53RYP2L' where id=8; -update noar ti set b2='LYY8ML7GUN7UJ7IX53RYP2L' where id=8; -update noar tt set v0='2XKR0RNJJPIN3Y4H' where id=9; -update noar ti set v0='2XKR0RNJJPIN3Y4H' where id=9; -update noar tt set b0='LDO4E' where id=9; -update noar ti set b0='LDO4E' where id=9; -update noar tt set v0='WHMJ' where id=9; -update noar ti set v0='WHMJ' where id=9; -update noar tt set b1='J2LM4S9MV' where id=9; -update noar ti set b1='J2LM4S9MV' where id=9; -update noar tt set v0='XXZEOMP3LRDU' where id=9; -update noar ti set v0='XXZEOMP3LRDU' where id=9; -update noar tt set b2='IE' where id=9; -update noar ti set b2='IE' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 tinyblob null, - b1 tinyblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='FV4DRG1LHP44HGV4NZR7TVIEWZ' where id=1; -update noar ti set v0='FV4DRG1LHP44HGV4NZR7TVIEWZ' where id=1; -update noar tt set b0='FS5PN4X2B32UINXW99V' where id=1; -update noar ti set b0='FS5PN4X2B32UINXW99V' where id=1; -update noar tt set v0='8MUQ8W189DGFJ5A8N8UO7NX2196MC07X' where id=1; -update noar ti set v0='8MUQ8W189DGFJ5A8N8UO7NX2196MC07X' where id=1; -update noar tt set b1='GZ3JC972E2NQEJ11M9IBZBTCXN' where id=1; -update noar ti set b1='GZ3JC972E2NQEJ11M9IBZBTCXN' where id=1; -update noar tt set v0='RHDYV4J2V78CSQI64WTQQV5MXGCR' where id=1; -update noar ti set v0='RHDYV4J2V78CSQI64WTQQV5MXGCR' where id=1; -update noar tt set b2='8MRPKVQM95Z6KHLNISO' where id=1; -update noar ti set b2='8MRPKVQM95Z6KHLNISO' where id=1; -update noar tt set v0='DXDUTO3S' where id=2; -update noar ti set v0='DXDUTO3S' where id=2; -update noar tt set b0='0I3UWLX861OUTPKVS4BN0XY' where id=2; -update noar ti set b0='0I3UWLX861OUTPKVS4BN0XY' where id=2; -update noar tt set v0='JXTIVEBV5XAVAO5D8' where id=2; -update noar ti set v0='JXTIVEBV5XAVAO5D8' where id=2; -update noar tt set b1='OLK6YMPAX' where id=2; -update noar ti set b1='OLK6YMPAX' where id=2; -update noar tt set v0='PKSX8' where id=2; -update noar ti set v0='PKSX8' where id=2; -update noar tt set b2='TR3HACE395' where id=2; -update noar ti set b2='TR3HACE395' where id=2; -update noar tt set v0='RVDWQJWJ7WJ31' where id=3; -update noar ti set v0='RVDWQJWJ7WJ31' where id=3; -update noar tt set b0='IWLR3WDB4URQJ325UVOPSAAQFE75K' where id=3; -update noar ti set b0='IWLR3WDB4URQJ325UVOPSAAQFE75K' where id=3; -update noar tt set v0='ICKMSBE7BB6XKU20326K' where id=3; -update noar ti set v0='ICKMSBE7BB6XKU20326K' where id=3; -update noar tt set b1='UNCMR8LMHNRPIV7TPUEA0WETDA' where id=3; -update noar ti set b1='UNCMR8LMHNRPIV7TPUEA0WETDA' where id=3; -update noar tt set v0='U8J0B0QD78HJJUJHB7A9R4CW27PBCEI' where id=3; -update noar ti set v0='U8J0B0QD78HJJUJHB7A9R4CW27PBCEI' where id=3; -update noar tt set b2='9O6QERAE1N5HA2ZX8XFOUVM90UANZQ' where id=3; -update noar ti set b2='9O6QERAE1N5HA2ZX8XFOUVM90UANZQ' where id=3; -update noar tt set v0='7AHJNKB1Z8U' where id=4; -update noar ti set v0='7AHJNKB1Z8U' where id=4; -update noar tt set b0='ZCTM9I' where id=4; -update noar ti set b0='ZCTM9I' where id=4; -update noar tt set v0='I8831J2C65TMWH9QG' where id=4; -update noar ti set v0='I8831J2C65TMWH9QG' where id=4; -update noar tt set b1='57GZ4NT0' where id=4; -update noar ti set b1='57GZ4NT0' where id=4; -update noar tt set v0='4ALMNYRG2AIWX1X5PUL7' where id=4; -update noar ti set v0='4ALMNYRG2AIWX1X5PUL7' where id=4; -update noar tt set b2='G8VLK2UJHDKN0CKREQU2V05HMDXT' where id=4; -update noar ti set b2='G8VLK2UJHDKN0CKREQU2V05HMDXT' where id=4; -update noar tt set v0='IFK8SRQR7OLE' where id=5; -update noar ti set v0='IFK8SRQR7OLE' where id=5; -update noar tt set b0='357P3X2S0R9V6ZXUWS' where id=5; -update noar ti set b0='357P3X2S0R9V6ZXUWS' where id=5; -update noar tt set v0='LFFTV125YF8EWV8U5PWY7LFHI5O5' where id=5; -update noar ti set v0='LFFTV125YF8EWV8U5PWY7LFHI5O5' where id=5; -update noar tt set b1='UG7KBKA931KNNT8TES3GY8XTQ' where id=5; -update noar ti set b1='UG7KBKA931KNNT8TES3GY8XTQ' where id=5; -update noar tt set v0='RK0Z2K1' where id=5; -update noar ti set v0='RK0Z2K1' where id=5; -update noar tt set b2='U6RCPA' where id=5; -update noar ti set b2='U6RCPA' where id=5; -update noar tt set v0='4MVHJPMHU72F5WMTA' where id=6; -update noar ti set v0='4MVHJPMHU72F5WMTA' where id=6; -update noar tt set b0='KCBTKDVRMH95K92' where id=6; -update noar ti set b0='KCBTKDVRMH95K92' where id=6; -update noar tt set v0='PDEJJ3T7IRI1LH4FVNM904PEN3ST108' where id=6; -update noar ti set v0='PDEJJ3T7IRI1LH4FVNM904PEN3ST108' where id=6; -update noar tt set b1='XM9OQPKZOBE' where id=6; -update noar ti set b1='XM9OQPKZOBE' where id=6; -update noar tt set v0='SZ7FDMF2E62FOJ8' where id=6; -update noar ti set v0='SZ7FDMF2E62FOJ8' where id=6; -update noar tt set b2='0C' where id=6; -update noar ti set b2='0C' where id=6; -update noar tt set v0='H9PXC7IBJFEPO' where id=7; -update noar ti set v0='H9PXC7IBJFEPO' where id=7; -update noar tt set b0='BIAS' where id=7; -update noar ti set b0='BIAS' where id=7; -update noar tt set v0='FZTAA5N6G74ZAF96QTK' where id=7; -update noar ti set v0='FZTAA5N6G74ZAF96QTK' where id=7; -update noar tt set b1='91IPC' where id=7; -update noar ti set b1='91IPC' where id=7; -update noar tt set v0='FZ5J' where id=7; -update noar ti set v0='FZ5J' where id=7; -update noar tt set b2='9B8XON1A2SIVAXVL6SOUSATA4JABU' where id=7; -update noar ti set b2='9B8XON1A2SIVAXVL6SOUSATA4JABU' where id=7; -update noar tt set v0='7UE62ORJT08A5' where id=8; -update noar ti set v0='7UE62ORJT08A5' where id=8; -update noar tt set b0='R7' where id=8; -update noar ti set b0='R7' where id=8; -update noar tt set v0='HUAN1GQIYG97GDIZA8RDTZSWPPY' where id=8; -update noar ti set v0='HUAN1GQIYG97GDIZA8RDTZSWPPY' where id=8; -update noar tt set b1='Y90' where id=8; -update noar ti set b1='Y90' where id=8; -update noar tt set v0='4TPOP' where id=8; -update noar ti set v0='4TPOP' where id=8; -update noar tt set b2='25CO3E822C8V0U51C0EOES2ZTAB4CZ0' where id=8; -update noar ti set b2='25CO3E822C8V0U51C0EOES2ZTAB4CZ0' where id=8; -update noar tt set v0='TTSNQKRUK85MVP9IPBMRY94C59' where id=9; -update noar ti set v0='TTSNQKRUK85MVP9IPBMRY94C59' where id=9; -update noar tt set b0='5D6JG1GGEMMH1X' where id=9; -update noar ti set b0='5D6JG1GGEMMH1X' where id=9; -update noar tt set v0='06RZDZW60' where id=9; -update noar ti set v0='06RZDZW60' where id=9; -update noar tt set b1='BNZ0U' where id=9; -update noar ti set b1='BNZ0U' where id=9; -update noar tt set v0='78Y8EGDRPM14PNR2DMXOZ1NC2FKF' where id=9; -update noar ti set v0='78Y8EGDRPM14PNR2DMXOZ1NC2FKF' where id=9; -update noar tt set b2='OOT1X' where id=9; -update noar ti set b2='OOT1X' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 tinyblob not null, - b1 tinyblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='VAKDKACN7UGM3' where id=1; -update noar ti set v0='VAKDKACN7UGM3' where id=1; -update noar tt set b0='2INNKXHAQ9C6QM' where id=1; -update noar ti set b0='2INNKXHAQ9C6QM' where id=1; -update noar tt set v0='W3SXABYIYYNHYMO1Q1XUMRTA0Z' where id=1; -update noar ti set v0='W3SXABYIYYNHYMO1Q1XUMRTA0Z' where id=1; -update noar tt set b1='FXWR8OYZTZ4BC8I5OBL3VM0AU' where id=1; -update noar ti set b1='FXWR8OYZTZ4BC8I5OBL3VM0AU' where id=1; -update noar tt set v0='UPTOQLZMLDGIHUPJZCK1Q' where id=1; -update noar ti set v0='UPTOQLZMLDGIHUPJZCK1Q' where id=1; -update noar tt set b2='P52EODM7ILUW9D3HJPK3PX3ZYP2M9J4V' where id=1; -update noar ti set b2='P52EODM7ILUW9D3HJPK3PX3ZYP2M9J4V' where id=1; -update noar tt set v0='G10QH4YXOPZW' where id=2; -update noar ti set v0='G10QH4YXOPZW' where id=2; -update noar tt set b0='4KEAGOEA922JI911K5PJ439' where id=2; -update noar ti set b0='4KEAGOEA922JI911K5PJ439' where id=2; -update noar tt set v0='CHOEPH6F' where id=2; -update noar ti set v0='CHOEPH6F' where id=2; -update noar tt set b1='KU1B83' where id=2; -update noar ti set b1='KU1B83' where id=2; -update noar tt set v0='HB5QQAP698WR4AVNF6' where id=2; -update noar ti set v0='HB5QQAP698WR4AVNF6' where id=2; -update noar tt set b2='WEIJ1BMVXJBDAKK2R7' where id=2; -update noar ti set b2='WEIJ1BMVXJBDAKK2R7' where id=2; -update noar tt set v0='JHSI1SUOPI8L8ACQPUB05HNP0B59' where id=3; -update noar ti set v0='JHSI1SUOPI8L8ACQPUB05HNP0B59' where id=3; -update noar tt set b0='T6FJIH8XKBRTG5WIOB' where id=3; -update noar ti set b0='T6FJIH8XKBRTG5WIOB' where id=3; -update noar tt set v0='OQLCJ4W6EM5' where id=3; -update noar ti set v0='OQLCJ4W6EM5' where id=3; -update noar tt set b1='GC84AGICWXQM1PKZH7382T1NZH8J' where id=3; -update noar ti set b1='GC84AGICWXQM1PKZH7382T1NZH8J' where id=3; -update noar tt set v0='RVW26FZ1FYIP7LWEDXN5DKT' where id=3; -update noar ti set v0='RVW26FZ1FYIP7LWEDXN5DKT' where id=3; -update noar tt set b2='ALVUZTUO87J1HFHLIVTOMI2P' where id=3; -update noar ti set b2='ALVUZTUO87J1HFHLIVTOMI2P' where id=3; -update noar tt set v0='UPQFDFLILA9GMY8ZP' where id=4; -update noar ti set v0='UPQFDFLILA9GMY8ZP' where id=4; -update noar tt set b0='8VO13VMPUE0RNQTR66Q5FG5CUMWIKUIG' where id=4; -update noar ti set b0='8VO13VMPUE0RNQTR66Q5FG5CUMWIKUIG' where id=4; -update noar tt set v0='28WY6FGO5LO7TY9F6ADVHSHHZLF0BDF' where id=4; -update noar ti set v0='28WY6FGO5LO7TY9F6ADVHSHHZLF0BDF' where id=4; -update noar tt set b1='6A' where id=4; -update noar ti set b1='6A' where id=4; -update noar tt set v0='NVQ2G891R7J1VFPWIQMPRKZ9P6U3' where id=4; -update noar ti set v0='NVQ2G891R7J1VFPWIQMPRKZ9P6U3' where id=4; -update noar tt set b2='VACFHQB260KA8FSHD' where id=4; -update noar ti set b2='VACFHQB260KA8FSHD' where id=4; -update noar tt set v0='UQ04H702XE3' where id=5; -update noar ti set v0='UQ04H702XE3' where id=5; -update noar tt set b0='4WK90T' where id=5; -update noar ti set b0='4WK90T' where id=5; -update noar tt set v0='G0X4UU92GBWF7MRMXLRIKFMTVL9QVFWO' where id=5; -update noar ti set v0='G0X4UU92GBWF7MRMXLRIKFMTVL9QVFWO' where id=5; -update noar tt set b1='67' where id=5; -update noar ti set b1='67' where id=5; -update noar tt set v0='62SKJ7JK11UR43YI385HCHI' where id=5; -update noar ti set v0='62SKJ7JK11UR43YI385HCHI' where id=5; -update noar tt set b2='FSB6QPRBEE6DY' where id=5; -update noar ti set b2='FSB6QPRBEE6DY' where id=5; -update noar tt set v0='TNSFYZTZO13PJCOXL6CV3O1RTU8UW' where id=6; -update noar ti set v0='TNSFYZTZO13PJCOXL6CV3O1RTU8UW' where id=6; -update noar tt set b0='BS1DL0BE35ID9SHB5ZE5FRASU' where id=6; -update noar ti set b0='BS1DL0BE35ID9SHB5ZE5FRASU' where id=6; -update noar tt set v0='ZY239H2DDXXYG' where id=6; -update noar ti set v0='ZY239H2DDXXYG' where id=6; -update noar tt set b1='KXFX21DFWC009FAH3KRZ7EBF3GR' where id=6; -update noar ti set b1='KXFX21DFWC009FAH3KRZ7EBF3GR' where id=6; -update noar tt set v0='TWFH53ICC' where id=6; -update noar ti set v0='TWFH53ICC' where id=6; -update noar tt set b2='Q4HWKTLFCKNOS' where id=6; -update noar ti set b2='Q4HWKTLFCKNOS' where id=6; -update noar tt set v0='LNTCIVFWR1FIX1XX588G43KVKI36F0NT' where id=7; -update noar ti set v0='LNTCIVFWR1FIX1XX588G43KVKI36F0NT' where id=7; -update noar tt set b0='0WHO6CZVMUFYHG22V9TJ7' where id=7; -update noar ti set b0='0WHO6CZVMUFYHG22V9TJ7' where id=7; -update noar tt set v0='7EQZZANQLD8BACAZ71OOALT0X' where id=7; -update noar ti set v0='7EQZZANQLD8BACAZ71OOALT0X' where id=7; -update noar tt set b1='PSPD411S51' where id=7; -update noar ti set b1='PSPD411S51' where id=7; -update noar tt set v0='WCKC4UWEQ02PSDDBTY8E' where id=7; -update noar ti set v0='WCKC4UWEQ02PSDDBTY8E' where id=7; -update noar tt set b2='C' where id=7; -update noar ti set b2='C' where id=7; -update noar tt set v0='IOEQJD1QBNUYBMYN3H' where id=8; -update noar ti set v0='IOEQJD1QBNUYBMYN3H' where id=8; -update noar tt set b0='ODNNLZR7LV8HC0I3TWHW' where id=8; -update noar ti set b0='ODNNLZR7LV8HC0I3TWHW' where id=8; -update noar tt set v0='OJRL9VSISYGV19' where id=8; -update noar ti set v0='OJRL9VSISYGV19' where id=8; -update noar tt set b1='92HSSW48949ZJ' where id=8; -update noar ti set b1='92HSSW48949ZJ' where id=8; -update noar tt set v0='R8MEEA3PLQJUZAOAU5UB4TZNO5RK0' where id=8; -update noar ti set v0='R8MEEA3PLQJUZAOAU5UB4TZNO5RK0' where id=8; -update noar tt set b2='VILUT4VXEUZ7WVQKC' where id=8; -update noar ti set b2='VILUT4VXEUZ7WVQKC' where id=8; -update noar tt set v0='5XXICQ2TY' where id=9; -update noar ti set v0='5XXICQ2TY' where id=9; -update noar tt set b0='JJRLLY6ZTS4' where id=9; -update noar ti set b0='JJRLLY6ZTS4' where id=9; -update noar tt set v0='S8QDOSBA' where id=9; -update noar ti set v0='S8QDOSBA' where id=9; -update noar tt set b1='2I65NAZ8H87BWLM7KBU0KSJUC5F6Q' where id=9; -update noar ti set b1='2I65NAZ8H87BWLM7KBU0KSJUC5F6Q' where id=9; -update noar tt set v0='ULKFH' where id=9; -update noar ti set v0='ULKFH' where id=9; -update noar tt set b2='TVTWI14US' where id=9; -update noar ti set b2='TVTWI14US' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 tinyblob not null, - b1 tinyblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='QETZC' where id=1; -update noar ti set v0='QETZC' where id=1; -update noar tt set b0='TBFFSKY5BH9W3ULR' where id=1; -update noar ti set b0='TBFFSKY5BH9W3ULR' where id=1; -update noar tt set v0='W0MFEVQ5CS168WH5KFMIKAWH9JQNN4W' where id=1; -update noar ti set v0='W0MFEVQ5CS168WH5KFMIKAWH9JQNN4W' where id=1; -update noar tt set b1='8QP6I5ASCMN83IZ3USHA21VI2' where id=1; -update noar ti set b1='8QP6I5ASCMN83IZ3USHA21VI2' where id=1; -update noar tt set v0='9JWYOU3K6WZI' where id=1; -update noar ti set v0='9JWYOU3K6WZI' where id=1; -update noar tt set b2='IN4KR562PBMSF' where id=1; -update noar ti set b2='IN4KR562PBMSF' where id=1; -update noar tt set v0='EIKL96PTPQ794B' where id=2; -update noar ti set v0='EIKL96PTPQ794B' where id=2; -update noar tt set b0='KN8188232Q8' where id=2; -update noar ti set b0='KN8188232Q8' where id=2; -update noar tt set v0='FF3' where id=2; -update noar ti set v0='FF3' where id=2; -update noar tt set b1='TB' where id=2; -update noar ti set b1='TB' where id=2; -update noar tt set v0='QPV4RBSX4125AWTY834' where id=2; -update noar ti set v0='QPV4RBSX4125AWTY834' where id=2; -update noar tt set b2='XU9S3BBQ' where id=2; -update noar ti set b2='XU9S3BBQ' where id=2; -update noar tt set v0='JZJGSUJLBWEIA4IX17ZJAUXWT' where id=3; -update noar ti set v0='JZJGSUJLBWEIA4IX17ZJAUXWT' where id=3; -update noar tt set b0='F2KY1HSC4PTG' where id=3; -update noar ti set b0='F2KY1HSC4PTG' where id=3; -update noar tt set v0='90G8C3HR' where id=3; -update noar ti set v0='90G8C3HR' where id=3; -update noar tt set b1='BX6Y2M3C1J85QTCJQDTO9FJ' where id=3; -update noar ti set b1='BX6Y2M3C1J85QTCJQDTO9FJ' where id=3; -update noar tt set v0='T7Y8' where id=3; -update noar ti set v0='T7Y8' where id=3; -update noar tt set b2='6IQY88FIXBUZP9PPR' where id=3; -update noar ti set b2='6IQY88FIXBUZP9PPR' where id=3; -update noar tt set v0='UBN41YI25' where id=4; -update noar ti set v0='UBN41YI25' where id=4; -update noar tt set b0='D36WQNQHAUZZXT26ZT8S69ZOKYN' where id=4; -update noar ti set b0='D36WQNQHAUZZXT26ZT8S69ZOKYN' where id=4; -update noar tt set v0='PC9PZZF8FD42E1RTYLHEDC' where id=4; -update noar ti set v0='PC9PZZF8FD42E1RTYLHEDC' where id=4; -update noar tt set b1='XYS7CK3GL4WRO' where id=4; -update noar ti set b1='XYS7CK3GL4WRO' where id=4; -update noar tt set v0='O7FOKS2XW4AJY6DOBITB8ZKLU' where id=4; -update noar ti set v0='O7FOKS2XW4AJY6DOBITB8ZKLU' where id=4; -update noar tt set b2='33CYAEQV38XU9YQYUQ50C1' where id=4; -update noar ti set b2='33CYAEQV38XU9YQYUQ50C1' where id=4; -update noar tt set v0='E83ZUZD7ZR1DCUFF0HR0U8ODLKOING' where id=5; -update noar ti set v0='E83ZUZD7ZR1DCUFF0HR0U8ODLKOING' where id=5; -update noar tt set b0='MZ69' where id=5; -update noar ti set b0='MZ69' where id=5; -update noar tt set v0='ACDSD99DMU1SSANQ4CGNR0YGIFSWIP3' where id=5; -update noar ti set v0='ACDSD99DMU1SSANQ4CGNR0YGIFSWIP3' where id=5; -update noar tt set b1='R' where id=5; -update noar ti set b1='R' where id=5; -update noar tt set v0='PJJP7H9OBOPBLD1XJX9' where id=5; -update noar ti set v0='PJJP7H9OBOPBLD1XJX9' where id=5; -update noar tt set b2='FPSV3B0P2NY7ZQT' where id=5; -update noar ti set b2='FPSV3B0P2NY7ZQT' where id=5; -update noar tt set v0='F4VDWWI3I75P4RR3GVHLGH' where id=6; -update noar ti set v0='F4VDWWI3I75P4RR3GVHLGH' where id=6; -update noar tt set b0='5VB87QH59H29RQLCAX4' where id=6; -update noar ti set b0='5VB87QH59H29RQLCAX4' where id=6; -update noar tt set v0='3HLJ0VCMM0OHQSK20R7MA91' where id=6; -update noar ti set v0='3HLJ0VCMM0OHQSK20R7MA91' where id=6; -update noar tt set b1='C7QKBMEGNQ7XV8Y4IYF' where id=6; -update noar ti set b1='C7QKBMEGNQ7XV8Y4IYF' where id=6; -update noar tt set v0='JRGEXWSFP2YZHMXO' where id=6; -update noar ti set v0='JRGEXWSFP2YZHMXO' where id=6; -update noar tt set b2='S8206U7YHC0' where id=6; -update noar ti set b2='S8206U7YHC0' where id=6; -update noar tt set v0='NTXQQX' where id=7; -update noar ti set v0='NTXQQX' where id=7; -update noar tt set b0='QURBVUCJWX9RK19R8N4B072VITFP41' where id=7; -update noar ti set b0='QURBVUCJWX9RK19R8N4B072VITFP41' where id=7; -update noar tt set v0='8GG30NBC7R059IZIP8' where id=7; -update noar ti set v0='8GG30NBC7R059IZIP8' where id=7; -update noar tt set b1='RJBP9AORKOYEHOPSKDRBUEYQMF34P' where id=7; -update noar ti set b1='RJBP9AORKOYEHOPSKDRBUEYQMF34P' where id=7; -update noar tt set v0='5C2NDN3WNS5XP3AS' where id=7; -update noar ti set v0='5C2NDN3WNS5XP3AS' where id=7; -update noar tt set b2='SE62H4S14' where id=7; -update noar ti set b2='SE62H4S14' where id=7; -update noar tt set v0='LGDNOAIMMRYGY3YKGDVTXOWD05WPA1N' where id=8; -update noar ti set v0='LGDNOAIMMRYGY3YKGDVTXOWD05WPA1N' where id=8; -update noar tt set b0='V4M5BI8QZ41Q' where id=8; -update noar ti set b0='V4M5BI8QZ41Q' where id=8; -update noar tt set v0='EE7RPU1GWTK7CH' where id=8; -update noar ti set v0='EE7RPU1GWTK7CH' where id=8; -update noar tt set b1='9BVHAABUKRU4G1T0MCKIELXWM5G' where id=8; -update noar ti set b1='9BVHAABUKRU4G1T0MCKIELXWM5G' where id=8; -update noar tt set v0='G8VF6M6W9JC6WBYD2O3KRA7AT' where id=8; -update noar ti set v0='G8VF6M6W9JC6WBYD2O3KRA7AT' where id=8; -update noar tt set b2='Z1OE5UXP5JM' where id=8; -update noar ti set b2='Z1OE5UXP5JM' where id=8; -update noar tt set v0='7MRC91R7MC1HEP6MKEMRQ5R4OR7PC' where id=9; -update noar ti set v0='7MRC91R7MC1HEP6MKEMRQ5R4OR7PC' where id=9; -update noar tt set b0='XNYR0LL6' where id=9; -update noar ti set b0='XNYR0LL6' where id=9; -update noar tt set v0='30PDV' where id=9; -update noar ti set v0='30PDV' where id=9; -update noar tt set b1='I2FTDXR0JKWPOPM9OAUB9EGSD6' where id=9; -update noar ti set b1='I2FTDXR0JKWPOPM9OAUB9EGSD6' where id=9; -update noar tt set v0='PT' where id=9; -update noar ti set v0='PT' where id=9; -update noar tt set b2='915O3J8G6EJH8FA' where id=9; -update noar ti set b2='915O3J8G6EJH8FA' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 tinyblob null, - b1 tinyblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='GWUF6Q87WWWUX1QXW' where id=1; -update noar ti set v0='GWUF6Q87WWWUX1QXW' where id=1; -update noar tt set b0='ZCU3V6ZFNSEGV8FE8CTAIK7UUF1VF6' where id=1; -update noar ti set b0='ZCU3V6ZFNSEGV8FE8CTAIK7UUF1VF6' where id=1; -update noar tt set v0='BVQFNY3G0F8M9TY2V39YI' where id=1; -update noar ti set v0='BVQFNY3G0F8M9TY2V39YI' where id=1; -update noar tt set b1='PUAY76GUN6LT7W5TW6V9T' where id=1; -update noar ti set b1='PUAY76GUN6LT7W5TW6V9T' where id=1; -update noar tt set v0='CSPTN1ZPILA7VHVI77ELIEQZDKY' where id=1; -update noar ti set v0='CSPTN1ZPILA7VHVI77ELIEQZDKY' where id=1; -update noar tt set b2='2HTW962P9V' where id=1; -update noar ti set b2='2HTW962P9V' where id=1; -update noar tt set v0='4P7V99N74CHERVHHO0D4KBW28' where id=2; -update noar ti set v0='4P7V99N74CHERVHHO0D4KBW28' where id=2; -update noar tt set b0='BE6T2P053ZZK228F' where id=2; -update noar ti set b0='BE6T2P053ZZK228F' where id=2; -update noar tt set v0='4Y1' where id=2; -update noar ti set v0='4Y1' where id=2; -update noar tt set b1='V68Q9IZ7AZYZTWZIYJBF4MWD' where id=2; -update noar ti set b1='V68Q9IZ7AZYZTWZIYJBF4MWD' where id=2; -update noar tt set v0='HQ301L35BQHC79' where id=2; -update noar ti set v0='HQ301L35BQHC79' where id=2; -update noar tt set b2='PU6I' where id=2; -update noar ti set b2='PU6I' where id=2; -update noar tt set v0='9KN' where id=3; -update noar ti set v0='9KN' where id=3; -update noar tt set b0='WSYIPK2J' where id=3; -update noar ti set b0='WSYIPK2J' where id=3; -update noar tt set v0='YUG48SU6GAH' where id=3; -update noar ti set v0='YUG48SU6GAH' where id=3; -update noar tt set b1='6QBKIJO' where id=3; -update noar ti set b1='6QBKIJO' where id=3; -update noar tt set v0='INT' where id=3; -update noar ti set v0='INT' where id=3; -update noar tt set b2='691YYKB36QQ3' where id=3; -update noar ti set b2='691YYKB36QQ3' where id=3; -update noar tt set v0='GV6A2LQ1BICRHSG5' where id=4; -update noar ti set v0='GV6A2LQ1BICRHSG5' where id=4; -update noar tt set b0='VJX07MIPR0' where id=4; -update noar ti set b0='VJX07MIPR0' where id=4; -update noar tt set v0='6O6HXB7T8HSDSIA0I' where id=4; -update noar ti set v0='6O6HXB7T8HSDSIA0I' where id=4; -update noar tt set b1='SPB1RRMHM' where id=4; -update noar ti set b1='SPB1RRMHM' where id=4; -update noar tt set v0='VRS6VBF9CX5RZ491MVSOWQ4040XB2DWB' where id=4; -update noar ti set v0='VRS6VBF9CX5RZ491MVSOWQ4040XB2DWB' where id=4; -update noar tt set b2='3UNO4AL1AYIGYFXOJ14FLKCKLE76' where id=4; -update noar ti set b2='3UNO4AL1AYIGYFXOJ14FLKCKLE76' where id=4; -update noar tt set v0='EUFVIWUJ9335G1O8B8ICTPPMNAHAO3' where id=5; -update noar ti set v0='EUFVIWUJ9335G1O8B8ICTPPMNAHAO3' where id=5; -update noar tt set b0='ZEWP6Y21KJLMKMJ' where id=5; -update noar ti set b0='ZEWP6Y21KJLMKMJ' where id=5; -update noar tt set v0='PNPFO72319BVC7NBE34YD6VC5LYI6' where id=5; -update noar ti set v0='PNPFO72319BVC7NBE34YD6VC5LYI6' where id=5; -update noar tt set b1='4SIXIJIG5B' where id=5; -update noar ti set b1='4SIXIJIG5B' where id=5; -update noar tt set v0='JJJBYJAQ' where id=5; -update noar ti set v0='JJJBYJAQ' where id=5; -update noar tt set b2='E2M6LMONX38NXAA96VNZ8L0J' where id=5; -update noar ti set b2='E2M6LMONX38NXAA96VNZ8L0J' where id=5; -update noar tt set v0='7RMJUCAMFMEO7UH2GK8MLGDWM5I46Y' where id=6; -update noar ti set v0='7RMJUCAMFMEO7UH2GK8MLGDWM5I46Y' where id=6; -update noar tt set b0='IXVG0MCJE9F1DIIZ' where id=6; -update noar ti set b0='IXVG0MCJE9F1DIIZ' where id=6; -update noar tt set v0='NTFS5XE6GX74Z4Q1A2KD' where id=6; -update noar ti set v0='NTFS5XE6GX74Z4Q1A2KD' where id=6; -update noar tt set b1='J28C3O26G65K91CMD29UB0Z' where id=6; -update noar ti set b1='J28C3O26G65K91CMD29UB0Z' where id=6; -update noar tt set v0='05MEPHCVARQ' where id=6; -update noar ti set v0='05MEPHCVARQ' where id=6; -update noar tt set b2='LCKD2ORUDT0A4FSJF26F76J979LU8' where id=6; -update noar ti set b2='LCKD2ORUDT0A4FSJF26F76J979LU8' where id=6; -update noar tt set v0='M4L5K355LPYM8Q6KDSG93M68VV4Z' where id=7; -update noar ti set v0='M4L5K355LPYM8Q6KDSG93M68VV4Z' where id=7; -update noar tt set b0='NE531CI' where id=7; -update noar ti set b0='NE531CI' where id=7; -update noar tt set v0='WUM7D8NR' where id=7; -update noar ti set v0='WUM7D8NR' where id=7; -update noar tt set b1='3QDV0YC7W23L0CD2P5' where id=7; -update noar ti set b1='3QDV0YC7W23L0CD2P5' where id=7; -update noar tt set v0='18XOOA4BJ91AKRTT6DWUWLD5T5Q9' where id=7; -update noar ti set v0='18XOOA4BJ91AKRTT6DWUWLD5T5Q9' where id=7; -update noar tt set b2='767' where id=7; -update noar ti set b2='767' where id=7; -update noar tt set v0='KCVSPID558BWCE7VQS13LZFXT2F' where id=8; -update noar ti set v0='KCVSPID558BWCE7VQS13LZFXT2F' where id=8; -update noar tt set b0='149RUW7I1B89USG2N3X' where id=8; -update noar ti set b0='149RUW7I1B89USG2N3X' where id=8; -update noar tt set v0='GDMK0X9B4EUQGWSM4OB6A6NK1HLXO' where id=8; -update noar ti set v0='GDMK0X9B4EUQGWSM4OB6A6NK1HLXO' where id=8; -update noar tt set b1='X7R' where id=8; -update noar ti set b1='X7R' where id=8; -update noar tt set v0='6AFQRMNSGZZ92X42ENI83QK78MJL' where id=8; -update noar ti set v0='6AFQRMNSGZZ92X42ENI83QK78MJL' where id=8; -update noar tt set b2='WASUL5O52II3Y9N6LTVKIX' where id=8; -update noar ti set b2='WASUL5O52II3Y9N6LTVKIX' where id=8; -update noar tt set v0='ETPO6VXV54BD6' where id=9; -update noar ti set v0='ETPO6VXV54BD6' where id=9; -update noar tt set b0='IT5H87V' where id=9; -update noar ti set b0='IT5H87V' where id=9; -update noar tt set v0='H13F1498WH29X6VJW12Y7A97801N10VO' where id=9; -update noar ti set v0='H13F1498WH29X6VJW12Y7A97801N10VO' where id=9; -update noar tt set b1='NO4TCPZ8XBLG33PP2CWYCNF4P' where id=9; -update noar ti set b1='NO4TCPZ8XBLG33PP2CWYCNF4P' where id=9; -update noar tt set v0='V4ZQFEQ2X1IK0W' where id=9; -update noar ti set v0='V4ZQFEQ2X1IK0W' where id=9; -update noar tt set b2='0Q49W1U8M1NS7E8BAR2MY7PDZM6' where id=9; -update noar ti set b2='0Q49W1U8M1NS7E8BAR2MY7PDZM6' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 tinyblob null, - b1 tinyblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='94937Y8ZS6B8UT3JNU43LY47TSY' where id=1; -update noar ti set v0='94937Y8ZS6B8UT3JNU43LY47TSY' where id=1; -update noar tt set b0='9TP198CFJR' where id=1; -update noar ti set b0='9TP198CFJR' where id=1; -update noar tt set v0='55H1YW4YSH4Q' where id=1; -update noar ti set v0='55H1YW4YSH4Q' where id=1; -update noar tt set b1='QX8CYN553IJSAIE4HQZFX8JAONPFP' where id=1; -update noar ti set b1='QX8CYN553IJSAIE4HQZFX8JAONPFP' where id=1; -update noar tt set v0='FPVDOM2S1S3E74' where id=1; -update noar ti set v0='FPVDOM2S1S3E74' where id=1; -update noar tt set b2='E1BWI9D39XI50' where id=1; -update noar ti set b2='E1BWI9D39XI50' where id=1; -update noar tt set v0='MBYDYL' where id=2; -update noar ti set v0='MBYDYL' where id=2; -update noar tt set b0='X' where id=2; -update noar ti set b0='X' where id=2; -update noar tt set v0='W0VI4WEWXSJNGVMKFH' where id=2; -update noar ti set v0='W0VI4WEWXSJNGVMKFH' where id=2; -update noar tt set b1='63R' where id=2; -update noar ti set b1='63R' where id=2; -update noar tt set v0='1K5TT2MRENM87JOSQ57HGU86HBBWH8' where id=2; -update noar ti set v0='1K5TT2MRENM87JOSQ57HGU86HBBWH8' where id=2; -update noar tt set b2='5QZG9QFLIQ2KER1TJ9VH' where id=2; -update noar ti set b2='5QZG9QFLIQ2KER1TJ9VH' where id=2; -update noar tt set v0='YRZGVC7LBEY88Q0T4QPBBTXXBSNN8' where id=3; -update noar ti set v0='YRZGVC7LBEY88Q0T4QPBBTXXBSNN8' where id=3; -update noar tt set b0='AKOKNIY8PBGCU' where id=3; -update noar ti set b0='AKOKNIY8PBGCU' where id=3; -update noar tt set v0='27B79PBL4QNS4G7AV0K43' where id=3; -update noar ti set v0='27B79PBL4QNS4G7AV0K43' where id=3; -update noar tt set b1='EVRHBFSETK' where id=3; -update noar ti set b1='EVRHBFSETK' where id=3; -update noar tt set v0='H8B8WSH' where id=3; -update noar ti set v0='H8B8WSH' where id=3; -update noar tt set b2='YULW7LTJCZJA02VNX3V0M' where id=3; -update noar ti set b2='YULW7LTJCZJA02VNX3V0M' where id=3; -update noar tt set v0='JPYZUZUC97RT6JA23OU' where id=4; -update noar ti set v0='JPYZUZUC97RT6JA23OU' where id=4; -update noar tt set b0='04NA8NXBG78MU' where id=4; -update noar ti set b0='04NA8NXBG78MU' where id=4; -update noar tt set v0='FED98K4MP' where id=4; -update noar ti set v0='FED98K4MP' where id=4; -update noar tt set b1='F1VR6TZ1K52' where id=4; -update noar ti set b1='F1VR6TZ1K52' where id=4; -update noar tt set v0='7HO0WY6D1XK' where id=4; -update noar ti set v0='7HO0WY6D1XK' where id=4; -update noar tt set b2='Q8IHI4A7' where id=4; -update noar ti set b2='Q8IHI4A7' where id=4; -update noar tt set v0='R82G' where id=5; -update noar ti set v0='R82G' where id=5; -update noar tt set b0='9UX6PFYQT' where id=5; -update noar ti set b0='9UX6PFYQT' where id=5; -update noar tt set v0='O90SP331MXJD8' where id=5; -update noar ti set v0='O90SP331MXJD8' where id=5; -update noar tt set b1='VSP2X9' where id=5; -update noar ti set b1='VSP2X9' where id=5; -update noar tt set v0='9O7HNUAFE7EZPNVL4H' where id=5; -update noar ti set v0='9O7HNUAFE7EZPNVL4H' where id=5; -update noar tt set b2='CWWNWYAEUT7X' where id=5; -update noar ti set b2='CWWNWYAEUT7X' where id=5; -update noar tt set v0='I4G1MRWGHIGAA' where id=6; -update noar ti set v0='I4G1MRWGHIGAA' where id=6; -update noar tt set b0='8F9GWX6YPAUDER17K5' where id=6; -update noar ti set b0='8F9GWX6YPAUDER17K5' where id=6; -update noar tt set v0='YL1NHUXMJYVR004AV5MB' where id=6; -update noar ti set v0='YL1NHUXMJYVR004AV5MB' where id=6; -update noar tt set b1='74YG2583WJ0EWNUWYQMWC5DKZ1BHYQ0' where id=6; -update noar ti set b1='74YG2583WJ0EWNUWYQMWC5DKZ1BHYQ0' where id=6; -update noar tt set v0='GXN9V3VYIH0DWMBFT9H91IJKN' where id=6; -update noar ti set v0='GXN9V3VYIH0DWMBFT9H91IJKN' where id=6; -update noar tt set b2='TC8U32U98FGXV6B94YDZOKPOSPL' where id=6; -update noar ti set b2='TC8U32U98FGXV6B94YDZOKPOSPL' where id=6; -update noar tt set v0='39MFY6FJT7PV6XZ4T' where id=7; -update noar ti set v0='39MFY6FJT7PV6XZ4T' where id=7; -update noar tt set b0='CVWHPW97GJ' where id=7; -update noar ti set b0='CVWHPW97GJ' where id=7; -update noar tt set v0='Q4GP' where id=7; -update noar ti set v0='Q4GP' where id=7; -update noar tt set b1='6AM3C7F2NO1NDD1DXIM' where id=7; -update noar ti set b1='6AM3C7F2NO1NDD1DXIM' where id=7; -update noar tt set v0='CCLP2TUG' where id=7; -update noar ti set v0='CCLP2TUG' where id=7; -update noar tt set b2='BV7UA' where id=7; -update noar ti set b2='BV7UA' where id=7; -update noar tt set v0='H5TIU1HN5H6S' where id=8; -update noar ti set v0='H5TIU1HN5H6S' where id=8; -update noar tt set b0='TPNQ6PKGDH7FRN' where id=8; -update noar ti set b0='TPNQ6PKGDH7FRN' where id=8; -update noar tt set v0='YATXKM3ZO4M2WSKJ4AJJRIMKJ1WWZ' where id=8; -update noar ti set v0='YATXKM3ZO4M2WSKJ4AJJRIMKJ1WWZ' where id=8; -update noar tt set b1='IUBVN' where id=8; -update noar ti set b1='IUBVN' where id=8; -update noar tt set v0='NJ' where id=8; -update noar ti set v0='NJ' where id=8; -update noar tt set b2='WI2WZ8ZC9IRVU3OJU04Q2IGIY' where id=8; -update noar ti set b2='WI2WZ8ZC9IRVU3OJU04Q2IGIY' where id=8; -update noar tt set v0='LOHGD82GJ9HE4P70Y9GX2HNEGYJDA0F' where id=9; -update noar ti set v0='LOHGD82GJ9HE4P70Y9GX2HNEGYJDA0F' where id=9; -update noar tt set b0='XIG3K30QJ3N3J7AWRBDQEKFNXYY' where id=9; -update noar ti set b0='XIG3K30QJ3N3J7AWRBDQEKFNXYY' where id=9; -update noar tt set v0='WDVP5U92KZNYU' where id=9; -update noar ti set v0='WDVP5U92KZNYU' where id=9; -update noar tt set b1='P4X1Z8SNE' where id=9; -update noar ti set b1='P4X1Z8SNE' where id=9; -update noar tt set v0='ZO' where id=9; -update noar ti set v0='ZO' where id=9; -update noar tt set b2='DHYMQIK7RBAZ12G8ISTU' where id=9; -update noar ti set b2='DHYMQIK7RBAZ12G8ISTU' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 tinyblob not null, - b1 tinyblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='OD7U2GWRE4VBNUF1Q2OLW2GX0NIZG' where id=1; -update noar ti set v0='OD7U2GWRE4VBNUF1Q2OLW2GX0NIZG' where id=1; -update noar tt set b0='Z' where id=1; -update noar ti set b0='Z' where id=1; -update noar tt set v0='0NMBXJKAJ5ECX' where id=1; -update noar ti set v0='0NMBXJKAJ5ECX' where id=1; -update noar tt set b1='96' where id=1; -update noar ti set b1='96' where id=1; -update noar tt set v0='SQZC1FUZK' where id=1; -update noar ti set v0='SQZC1FUZK' where id=1; -update noar tt set b2='U3UEF26K59HNGYQ' where id=1; -update noar ti set b2='U3UEF26K59HNGYQ' where id=1; -update noar tt set v0='CUM51DE70R0P98N8QLW85VLUJJ85A4FA' where id=2; -update noar ti set v0='CUM51DE70R0P98N8QLW85VLUJJ85A4FA' where id=2; -update noar tt set b0='RY29M' where id=2; -update noar ti set b0='RY29M' where id=2; -update noar tt set v0='69SSVPI88KJPYU3CBPBZ' where id=2; -update noar ti set v0='69SSVPI88KJPYU3CBPBZ' where id=2; -update noar tt set b1='0PWCMD59CY5GJD0JR4EG6P7SIBX9QXC' where id=2; -update noar ti set b1='0PWCMD59CY5GJD0JR4EG6P7SIBX9QXC' where id=2; -update noar tt set v0='NQ9TP' where id=2; -update noar ti set v0='NQ9TP' where id=2; -update noar tt set b2='395' where id=2; -update noar ti set b2='395' where id=2; -update noar tt set v0='XZ3W5IEF' where id=3; -update noar ti set v0='XZ3W5IEF' where id=3; -update noar tt set b0='1EV8' where id=3; -update noar ti set b0='1EV8' where id=3; -update noar tt set v0='3GC1X' where id=3; -update noar ti set v0='3GC1X' where id=3; -update noar tt set b1='V6L5I2CMX3T876B5F6LXNN0ZUJ012Q9B' where id=3; -update noar ti set b1='V6L5I2CMX3T876B5F6LXNN0ZUJ012Q9B' where id=3; -update noar tt set v0='M764Q230O59PS78ZI' where id=3; -update noar ti set v0='M764Q230O59PS78ZI' where id=3; -update noar tt set b2='GQP5BGSGJWJ3W59BQ' where id=3; -update noar ti set b2='GQP5BGSGJWJ3W59BQ' where id=3; -update noar tt set v0='3BOP3AUY2' where id=4; -update noar ti set v0='3BOP3AUY2' where id=4; -update noar tt set b0='R47OJ1DD26TDV0KAD0DYFZXUHVBL5' where id=4; -update noar ti set b0='R47OJ1DD26TDV0KAD0DYFZXUHVBL5' where id=4; -update noar tt set v0='48AB02Z4WGF36W671LL23NGOP4' where id=4; -update noar ti set v0='48AB02Z4WGF36W671LL23NGOP4' where id=4; -update noar tt set b1='KBG3FMVLCMF735RE' where id=4; -update noar ti set b1='KBG3FMVLCMF735RE' where id=4; -update noar tt set v0='3GBRRDA1G7DXILQT02ZOB2JK1N' where id=4; -update noar ti set v0='3GBRRDA1G7DXILQT02ZOB2JK1N' where id=4; -update noar tt set b2='PZJ0T31G5LAQUCK2H53QUPTD8W6UJ' where id=4; -update noar ti set b2='PZJ0T31G5LAQUCK2H53QUPTD8W6UJ' where id=4; -update noar tt set v0='X6WDT9ZZEA6RZ2PSQ6BD80P03DSD29K' where id=5; -update noar ti set v0='X6WDT9ZZEA6RZ2PSQ6BD80P03DSD29K' where id=5; -update noar tt set b0='IGS' where id=5; -update noar ti set b0='IGS' where id=5; -update noar tt set v0='I84RXOJQCBFT9VA67SL37278K1FUPH' where id=5; -update noar ti set v0='I84RXOJQCBFT9VA67SL37278K1FUPH' where id=5; -update noar tt set b1='0QRESRYD1B8V34P09YT68ZK' where id=5; -update noar ti set b1='0QRESRYD1B8V34P09YT68ZK' where id=5; -update noar tt set v0='5AV5YLOLWC' where id=5; -update noar ti set v0='5AV5YLOLWC' where id=5; -update noar tt set b2='7' where id=5; -update noar ti set b2='7' where id=5; -update noar tt set v0='1E' where id=6; -update noar ti set v0='1E' where id=6; -update noar tt set b0='7XRZ3WJCKRTBRP' where id=6; -update noar ti set b0='7XRZ3WJCKRTBRP' where id=6; -update noar tt set v0='RUBPZ0C2' where id=6; -update noar ti set v0='RUBPZ0C2' where id=6; -update noar tt set b1='BDDVDB6TCQFJ69D3' where id=6; -update noar ti set b1='BDDVDB6TCQFJ69D3' where id=6; -update noar tt set v0='E' where id=6; -update noar ti set v0='E' where id=6; -update noar tt set b2='S03UXBDW18QC8ZVASS2T7R1HMY' where id=6; -update noar ti set b2='S03UXBDW18QC8ZVASS2T7R1HMY' where id=6; -update noar tt set v0='55' where id=7; -update noar ti set v0='55' where id=7; -update noar tt set b0='JFATL6SREEOIDZ6A9UN4CC' where id=7; -update noar ti set b0='JFATL6SREEOIDZ6A9UN4CC' where id=7; -update noar tt set v0='11S' where id=7; -update noar ti set v0='11S' where id=7; -update noar tt set b1='5KGSQ' where id=7; -update noar ti set b1='5KGSQ' where id=7; -update noar tt set v0='1' where id=7; -update noar ti set v0='1' where id=7; -update noar tt set b2='6HGM2NSDU52ESTP396DDXUDGG38ORY3' where id=7; -update noar ti set b2='6HGM2NSDU52ESTP396DDXUDGG38ORY3' where id=7; -update noar tt set v0='WDPYZ17V' where id=8; -update noar ti set v0='WDPYZ17V' where id=8; -update noar tt set b0='2HIKX2GKUXHKDQJJX2GYC7MRUI' where id=8; -update noar ti set b0='2HIKX2GKUXHKDQJJX2GYC7MRUI' where id=8; -update noar tt set v0='5MW6WUHMT4IIM48UID3P' where id=8; -update noar ti set v0='5MW6WUHMT4IIM48UID3P' where id=8; -update noar tt set b1='TZYAHU6LCH' where id=8; -update noar ti set b1='TZYAHU6LCH' where id=8; -update noar tt set v0='MZ0N8EAAUTTXFIQYAFO8HCCJ3IVX' where id=8; -update noar ti set v0='MZ0N8EAAUTTXFIQYAFO8HCCJ3IVX' where id=8; -update noar tt set b2='KKN4SQ8FXK3O0LFM8ULFIOT08X7MEA' where id=8; -update noar ti set b2='KKN4SQ8FXK3O0LFM8ULFIOT08X7MEA' where id=8; -update noar tt set v0='ZGPM8Q2DECD4GNAM' where id=9; -update noar ti set v0='ZGPM8Q2DECD4GNAM' where id=9; -update noar tt set b0='CGBIZU3S5I34' where id=9; -update noar ti set b0='CGBIZU3S5I34' where id=9; -update noar tt set v0='BO8OIBJJ' where id=9; -update noar ti set v0='BO8OIBJJ' where id=9; -update noar tt set b1='VBDU42CL7M3DST3CZX' where id=9; -update noar ti set b1='VBDU42CL7M3DST3CZX' where id=9; -update noar tt set v0='8UXMPQEC7VPCL78DN7V1HIQF' where id=9; -update noar ti set v0='8UXMPQEC7VPCL78DN7V1HIQF' where id=9; -update noar tt set b2='LS1O9ISP2F0VMVAVZCPXOQPBD2ELA' where id=9; -update noar ti set b2='LS1O9ISP2F0VMVAVZCPXOQPBD2ELA' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 tinyblob not null, - b1 tinyblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='L' where id=1; -update noar ti set v0='L' where id=1; -update noar tt set b0='2FL5A671O3BLN70Z' where id=1; -update noar ti set b0='2FL5A671O3BLN70Z' where id=1; -update noar tt set v0='QXX2ACY06ZJYJNA6J374KEPB8' where id=1; -update noar ti set v0='QXX2ACY06ZJYJNA6J374KEPB8' where id=1; -update noar tt set b1='Z88LKRG9PVV' where id=1; -update noar ti set b1='Z88LKRG9PVV' where id=1; -update noar tt set v0='ITJVKBDE8V9GRU' where id=1; -update noar ti set v0='ITJVKBDE8V9GRU' where id=1; -update noar tt set b2='4NB2Z321QTPS33VXP5CLC1Z2G' where id=1; -update noar ti set b2='4NB2Z321QTPS33VXP5CLC1Z2G' where id=1; -update noar tt set v0='XJZT' where id=2; -update noar ti set v0='XJZT' where id=2; -update noar tt set b0='ZZ581EA78P1C4JQ' where id=2; -update noar ti set b0='ZZ581EA78P1C4JQ' where id=2; -update noar tt set v0='3CTYFUJY7LGYH5M6W' where id=2; -update noar ti set v0='3CTYFUJY7LGYH5M6W' where id=2; -update noar tt set b1='TB3I44RRHR4KJ' where id=2; -update noar ti set b1='TB3I44RRHR4KJ' where id=2; -update noar tt set v0='1CIW99I4R' where id=2; -update noar ti set v0='1CIW99I4R' where id=2; -update noar tt set b2='ZWIH2IPVXOOP8U8II' where id=2; -update noar ti set b2='ZWIH2IPVXOOP8U8II' where id=2; -update noar tt set v0='94LBME0N20NQMBR2BJQ49VZFK0ALI' where id=3; -update noar ti set v0='94LBME0N20NQMBR2BJQ49VZFK0ALI' where id=3; -update noar tt set b0='AFQI5X' where id=3; -update noar ti set b0='AFQI5X' where id=3; -update noar tt set v0='7AEDRDU66H00O9' where id=3; -update noar ti set v0='7AEDRDU66H00O9' where id=3; -update noar tt set b1='N1KM9GDCMUQTJ0LR' where id=3; -update noar ti set b1='N1KM9GDCMUQTJ0LR' where id=3; -update noar tt set v0='T5JGMRMIE016C2507BU7ILNEXI4G7X' where id=3; -update noar ti set v0='T5JGMRMIE016C2507BU7ILNEXI4G7X' where id=3; -update noar tt set b2='YV71Y' where id=3; -update noar ti set b2='YV71Y' where id=3; -update noar tt set v0='W' where id=4; -update noar ti set v0='W' where id=4; -update noar tt set b0='FZIWANCO77X4I5GHWTXV70L1UP0' where id=4; -update noar ti set b0='FZIWANCO77X4I5GHWTXV70L1UP0' where id=4; -update noar tt set v0='9K6BSUMDAZXGRC4W59RFL2C6GMXC524' where id=4; -update noar ti set v0='9K6BSUMDAZXGRC4W59RFL2C6GMXC524' where id=4; -update noar tt set b1='U2SBKAUALJ4Y5Q5OFU7KDF' where id=4; -update noar ti set b1='U2SBKAUALJ4Y5Q5OFU7KDF' where id=4; -update noar tt set v0='8R' where id=4; -update noar ti set v0='8R' where id=4; -update noar tt set b2='APZGIGFP18' where id=4; -update noar ti set b2='APZGIGFP18' where id=4; -update noar tt set v0='P' where id=5; -update noar ti set v0='P' where id=5; -update noar tt set b0='X8KG1HVY63KSFC08JOCAD' where id=5; -update noar ti set b0='X8KG1HVY63KSFC08JOCAD' where id=5; -update noar tt set v0='LS1U' where id=5; -update noar ti set v0='LS1U' where id=5; -update noar tt set b1='CWT3RKAZOCJS1TL' where id=5; -update noar ti set b1='CWT3RKAZOCJS1TL' where id=5; -update noar tt set v0='9MPSX9LPAGGJ8DJDO' where id=5; -update noar ti set v0='9MPSX9LPAGGJ8DJDO' where id=5; -update noar tt set b2='4V5YJ4953RQOMBG5O5' where id=5; -update noar ti set b2='4V5YJ4953RQOMBG5O5' where id=5; -update noar tt set v0='X81V6DQB9QG' where id=6; -update noar ti set v0='X81V6DQB9QG' where id=6; -update noar tt set b0='BTZQ83C0SCNSPLB103N4ADSXTJC1ACYM' where id=6; -update noar ti set b0='BTZQ83C0SCNSPLB103N4ADSXTJC1ACYM' where id=6; -update noar tt set v0='5CIDA4LCP7L8R6UBZ8LOZZ' where id=6; -update noar ti set v0='5CIDA4LCP7L8R6UBZ8LOZZ' where id=6; -update noar tt set b1='THX6T8NMBMS12NVSFCFM49OA5JVZ1' where id=6; -update noar ti set b1='THX6T8NMBMS12NVSFCFM49OA5JVZ1' where id=6; -update noar tt set v0='IRTO5W6GB1R6RZRVEXQPM6QQNKRLXTAS' where id=6; -update noar ti set v0='IRTO5W6GB1R6RZRVEXQPM6QQNKRLXTAS' where id=6; -update noar tt set b2='676QFRVGJ2EOCIXM0FOROPQ06' where id=6; -update noar ti set b2='676QFRVGJ2EOCIXM0FOROPQ06' where id=6; -update noar tt set v0='BAUNIP8914WKN5J52DGOWUGF' where id=7; -update noar ti set v0='BAUNIP8914WKN5J52DGOWUGF' where id=7; -update noar tt set b0='2EQ2M3WYFNOV' where id=7; -update noar ti set b0='2EQ2M3WYFNOV' where id=7; -update noar tt set v0='ZNN2Y9N5U55UUI6BPR' where id=7; -update noar ti set v0='ZNN2Y9N5U55UUI6BPR' where id=7; -update noar tt set b1='C47TW' where id=7; -update noar ti set b1='C47TW' where id=7; -update noar tt set v0='OU0NFUMIG7A2LW2T7P8BKDNCSSWLENT' where id=7; -update noar ti set v0='OU0NFUMIG7A2LW2T7P8BKDNCSSWLENT' where id=7; -update noar tt set b2='R5Q9Z2KD5OFHVPCUNIHHTD2MS52SDT' where id=7; -update noar ti set b2='R5Q9Z2KD5OFHVPCUNIHHTD2MS52SDT' where id=7; -update noar tt set v0='PT30PI2W8B0' where id=8; -update noar ti set v0='PT30PI2W8B0' where id=8; -update noar tt set b0='HK3C2VEG' where id=8; -update noar ti set b0='HK3C2VEG' where id=8; -update noar tt set v0='DCCLO9RUZ8O' where id=8; -update noar ti set v0='DCCLO9RUZ8O' where id=8; -update noar tt set b1='IZJYZPBRDCIWKIQJQS' where id=8; -update noar ti set b1='IZJYZPBRDCIWKIQJQS' where id=8; -update noar tt set v0='SDQIQC9XF0JYZ85TTKJ9Q8AW4ZFYRFUB' where id=8; -update noar ti set v0='SDQIQC9XF0JYZ85TTKJ9Q8AW4ZFYRFUB' where id=8; -update noar tt set b2='4ALWL4JIDD4IBGULTO08RN95RS2' where id=8; -update noar ti set b2='4ALWL4JIDD4IBGULTO08RN95RS2' where id=8; -update noar tt set v0='FVH3MLV0Q6RV3S8WL9VQ29JDOSJ' where id=9; -update noar ti set v0='FVH3MLV0Q6RV3S8WL9VQ29JDOSJ' where id=9; -update noar tt set b0='HPA6RHHBVPMWCLJTXDR' where id=9; -update noar ti set b0='HPA6RHHBVPMWCLJTXDR' where id=9; -update noar tt set v0='5XAGO1' where id=9; -update noar ti set v0='5XAGO1' where id=9; -update noar tt set b1='64G01OQJKHYJOEKVPCQV0' where id=9; -update noar ti set b1='64G01OQJKHYJOEKVPCQV0' where id=9; -update noar tt set v0='YQHPG0SW6QBGRDYF' where id=9; -update noar ti set v0='YQHPG0SW6QBGRDYF' where id=9; -update noar tt set b2='D9MJMYKITVI9H' where id=9; -update noar ti set b2='D9MJMYKITVI9H' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 tinyblob null, - b1 tinyblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='NY6I53I6NQ43Z3NE3GK27BS' where id=1; -update noar ti set v0='NY6I53I6NQ43Z3NE3GK27BS' where id=1; -update noar tt set b0='9M5A' where id=1; -update noar ti set b0='9M5A' where id=1; -update noar tt set v0='3WC52KXRYED8N4RG578' where id=1; -update noar ti set v0='3WC52KXRYED8N4RG578' where id=1; -update noar tt set b1='CFCQHJ1ZGY6X62BCX4WEQMHYHCZB77DL' where id=1; -update noar ti set b1='CFCQHJ1ZGY6X62BCX4WEQMHYHCZB77DL' where id=1; -update noar tt set v0='WZK8Z06Q8V6VZBVYPNSIKF7' where id=1; -update noar ti set v0='WZK8Z06Q8V6VZBVYPNSIKF7' where id=1; -update noar tt set b2='D' where id=1; -update noar ti set b2='D' where id=1; -update noar tt set v0='HIO6O0DZTZI25BMQP9' where id=2; -update noar ti set v0='HIO6O0DZTZI25BMQP9' where id=2; -update noar tt set b0='IHQ0FPU6WDRRMCJ7W6KB' where id=2; -update noar ti set b0='IHQ0FPU6WDRRMCJ7W6KB' where id=2; -update noar tt set v0='EYOP5UD' where id=2; -update noar ti set v0='EYOP5UD' where id=2; -update noar tt set b1='134X8Q' where id=2; -update noar ti set b1='134X8Q' where id=2; -update noar tt set v0='YSC2TV' where id=2; -update noar ti set v0='YSC2TV' where id=2; -update noar tt set b2='RDF9KMIH13Q2K0RBFBQHCCW' where id=2; -update noar ti set b2='RDF9KMIH13Q2K0RBFBQHCCW' where id=2; -update noar tt set v0='TU7CLC265Z3KYCTSK4P5VRXDU85PDY' where id=3; -update noar ti set v0='TU7CLC265Z3KYCTSK4P5VRXDU85PDY' where id=3; -update noar tt set b0='RYN4YHF35587CHO89H8584YBOZ' where id=3; -update noar ti set b0='RYN4YHF35587CHO89H8584YBOZ' where id=3; -update noar tt set v0='WJKXQNWJAP' where id=3; -update noar ti set v0='WJKXQNWJAP' where id=3; -update noar tt set b1='VX43Y650ZF9MJ48AC2VJPSPA1V4' where id=3; -update noar ti set b1='VX43Y650ZF9MJ48AC2VJPSPA1V4' where id=3; -update noar tt set v0='SINUFU60YCD0XB' where id=3; -update noar ti set v0='SINUFU60YCD0XB' where id=3; -update noar tt set b2='4QTRL' where id=3; -update noar ti set b2='4QTRL' where id=3; -update noar tt set v0='6DZMOESLINOXOFI6R24TM7C' where id=4; -update noar ti set v0='6DZMOESLINOXOFI6R24TM7C' where id=4; -update noar tt set b0='A1W13TZV' where id=4; -update noar ti set b0='A1W13TZV' where id=4; -update noar tt set v0='U7Q8H' where id=4; -update noar ti set v0='U7Q8H' where id=4; -update noar tt set b1='3DY7QYLMAX8DKVBUQOYFECB1C1Y' where id=4; -update noar ti set b1='3DY7QYLMAX8DKVBUQOYFECB1C1Y' where id=4; -update noar tt set v0='14VXFJCVMF469L8A6' where id=4; -update noar ti set v0='14VXFJCVMF469L8A6' where id=4; -update noar tt set b2='PABFN3XZWBL2PDY3OKT2H83' where id=4; -update noar ti set b2='PABFN3XZWBL2PDY3OKT2H83' where id=4; -update noar tt set v0='0JBOS89X8' where id=5; -update noar ti set v0='0JBOS89X8' where id=5; -update noar tt set b0='Z65DHL101QK76IJEW1' where id=5; -update noar ti set b0='Z65DHL101QK76IJEW1' where id=5; -update noar tt set v0='841064AI51KZRXWEXON66WF843HUN5O' where id=5; -update noar ti set v0='841064AI51KZRXWEXON66WF843HUN5O' where id=5; -update noar tt set b1='OYL3NDMKKYNQP6WHO8DUMRSDEV0SHG' where id=5; -update noar ti set b1='OYL3NDMKKYNQP6WHO8DUMRSDEV0SHG' where id=5; -update noar tt set v0='WCTD1IC' where id=5; -update noar ti set v0='WCTD1IC' where id=5; -update noar tt set b2='14Z8NAC5EFJYDOV5L23295W99FCRV' where id=5; -update noar ti set b2='14Z8NAC5EFJYDOV5L23295W99FCRV' where id=5; -update noar tt set v0='3HGRO53DFO' where id=6; -update noar ti set v0='3HGRO53DFO' where id=6; -update noar tt set b0='MWRAVX2J4XN9' where id=6; -update noar ti set b0='MWRAVX2J4XN9' where id=6; -update noar tt set v0='UFY8TS2D3Q4C77B' where id=6; -update noar ti set v0='UFY8TS2D3Q4C77B' where id=6; -update noar tt set b1='Y5L5J2RVN2CGT' where id=6; -update noar ti set b1='Y5L5J2RVN2CGT' where id=6; -update noar tt set v0='IH8I6XP1X691O' where id=6; -update noar ti set v0='IH8I6XP1X691O' where id=6; -update noar tt set b2='LMYYGGAOUEBWZ8CQHL0LINSW' where id=6; -update noar ti set b2='LMYYGGAOUEBWZ8CQHL0LINSW' where id=6; -update noar tt set v0='5P2Z1M0OS' where id=7; -update noar ti set v0='5P2Z1M0OS' where id=7; -update noar tt set b0='OPO722WMQXDTSQS9W4' where id=7; -update noar ti set b0='OPO722WMQXDTSQS9W4' where id=7; -update noar tt set v0='KYSAKL' where id=7; -update noar ti set v0='KYSAKL' where id=7; -update noar tt set b1='99YMP8FRZV03O7LG1' where id=7; -update noar ti set b1='99YMP8FRZV03O7LG1' where id=7; -update noar tt set v0='XQJT7NW4HYTNRM' where id=7; -update noar ti set v0='XQJT7NW4HYTNRM' where id=7; -update noar tt set b2='88OMWNINWYCJW2MDOPTB4TLCZDLG' where id=7; -update noar ti set b2='88OMWNINWYCJW2MDOPTB4TLCZDLG' where id=7; -update noar tt set v0='G6PHZFSV0CO6VZCL8C3Q3N3P' where id=8; -update noar ti set v0='G6PHZFSV0CO6VZCL8C3Q3N3P' where id=8; -update noar tt set b0='Q8LQNIPP0YCOKNI' where id=8; -update noar ti set b0='Q8LQNIPP0YCOKNI' where id=8; -update noar tt set v0='IRS2SKGU6898WQKKN104AA1IQZTIY' where id=8; -update noar ti set v0='IRS2SKGU6898WQKKN104AA1IQZTIY' where id=8; -update noar tt set b1='579Z2G7VN' where id=8; -update noar ti set b1='579Z2G7VN' where id=8; -update noar tt set v0='T5MYDI' where id=8; -update noar ti set v0='T5MYDI' where id=8; -update noar tt set b2='879OJ6J76ZCY' where id=8; -update noar ti set b2='879OJ6J76ZCY' where id=8; -update noar tt set v0='AXM4E' where id=9; -update noar ti set v0='AXM4E' where id=9; -update noar tt set b0='JM79E52Y1J8M07GMMPIHI7K8GGUEA' where id=9; -update noar ti set b0='JM79E52Y1J8M07GMMPIHI7K8GGUEA' where id=9; -update noar tt set v0='7X016' where id=9; -update noar ti set v0='7X016' where id=9; -update noar tt set b1='TQN4UF00YDS' where id=9; -update noar ti set b1='TQN4UF00YDS' where id=9; -update noar tt set v0='B6CKV5SWBUO024WIGOXOH7E5J' where id=9; -update noar ti set v0='B6CKV5SWBUO024WIGOXOH7E5J' where id=9; -update noar tt set b2='22YNXHK2BJYE4EY44U9ZV' where id=9; -update noar ti set b2='22YNXHK2BJYE4EY44U9ZV' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 tinyblob null, - b1 tinyblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='AH0QPE6' where id=1; -update noar ti set v0='AH0QPE6' where id=1; -update noar tt set b0='KOW0OPILMP' where id=1; -update noar ti set b0='KOW0OPILMP' where id=1; -update noar tt set v0='VYQRZ53O' where id=1; -update noar ti set v0='VYQRZ53O' where id=1; -update noar tt set b1='XHRJUZU506VQ7VXXYBWOY768JYPC' where id=1; -update noar ti set b1='XHRJUZU506VQ7VXXYBWOY768JYPC' where id=1; -update noar tt set v0='NSQMQ7M1QYKO5D' where id=1; -update noar ti set v0='NSQMQ7M1QYKO5D' where id=1; -update noar tt set b2='3170DAEAV68K1Z9' where id=1; -update noar ti set b2='3170DAEAV68K1Z9' where id=1; -update noar tt set v0='ZYPJOYEQQRLV1C9IUB' where id=2; -update noar ti set v0='ZYPJOYEQQRLV1C9IUB' where id=2; -update noar tt set b0='ME1D9ZSQZXG2SAS4WWKIJ' where id=2; -update noar ti set b0='ME1D9ZSQZXG2SAS4WWKIJ' where id=2; -update noar tt set v0='7S7XA8UK' where id=2; -update noar ti set v0='7S7XA8UK' where id=2; -update noar tt set b1='WOSI7SGUGD0Y' where id=2; -update noar ti set b1='WOSI7SGUGD0Y' where id=2; -update noar tt set v0='CM6' where id=2; -update noar ti set v0='CM6' where id=2; -update noar tt set b2='CVZONN07AXKD8A' where id=2; -update noar ti set b2='CVZONN07AXKD8A' where id=2; -update noar tt set v0='ACUP1MTUXUHQ' where id=3; -update noar ti set v0='ACUP1MTUXUHQ' where id=3; -update noar tt set b0='TB8DF8XOT5BJIJTM4GXT' where id=3; -update noar ti set b0='TB8DF8XOT5BJIJTM4GXT' where id=3; -update noar tt set v0='SVI24A1XH3WQN' where id=3; -update noar ti set v0='SVI24A1XH3WQN' where id=3; -update noar tt set b1='QSTAFZKF' where id=3; -update noar ti set b1='QSTAFZKF' where id=3; -update noar tt set v0='5R9ZK' where id=3; -update noar ti set v0='5R9ZK' where id=3; -update noar tt set b2='5IH15FMEGO5PW' where id=3; -update noar ti set b2='5IH15FMEGO5PW' where id=3; -update noar tt set v0='OLMD96PZ7V9ZVKQF3TLL8' where id=4; -update noar ti set v0='OLMD96PZ7V9ZVKQF3TLL8' where id=4; -update noar tt set b0='17KW3KEH52VIT21YEELVTQVVP' where id=4; -update noar ti set b0='17KW3KEH52VIT21YEELVTQVVP' where id=4; -update noar tt set v0='8XN2L5H4O74S' where id=4; -update noar ti set v0='8XN2L5H4O74S' where id=4; -update noar tt set b1='FHGZV50WE1VQ0CP9FKOPL8BJ' where id=4; -update noar ti set b1='FHGZV50WE1VQ0CP9FKOPL8BJ' where id=4; -update noar tt set v0='7EPKTYU7WG80OEBZ5' where id=4; -update noar ti set v0='7EPKTYU7WG80OEBZ5' where id=4; -update noar tt set b2='NJ1PU' where id=4; -update noar ti set b2='NJ1PU' where id=4; -update noar tt set v0='0JTXLLPR33Z' where id=5; -update noar ti set v0='0JTXLLPR33Z' where id=5; -update noar tt set b0='THOKSU8N2WAZI52R7B16D3LSAEU3ONO' where id=5; -update noar ti set b0='THOKSU8N2WAZI52R7B16D3LSAEU3ONO' where id=5; -update noar tt set v0='08KBBM4VSCYWENBVR' where id=5; -update noar ti set v0='08KBBM4VSCYWENBVR' where id=5; -update noar tt set b1='18UQ4HTXH05RMT' where id=5; -update noar ti set b1='18UQ4HTXH05RMT' where id=5; -update noar tt set v0='XZGKBSVKB6IA' where id=5; -update noar ti set v0='XZGKBSVKB6IA' where id=5; -update noar tt set b2='G' where id=5; -update noar ti set b2='G' where id=5; -update noar tt set v0='0AIUVJK8353JJHBZG11R44EV5OVQXV' where id=6; -update noar ti set v0='0AIUVJK8353JJHBZG11R44EV5OVQXV' where id=6; -update noar tt set b0='2' where id=6; -update noar ti set b0='2' where id=6; -update noar tt set v0='67TC4RXIU4J' where id=6; -update noar ti set v0='67TC4RXIU4J' where id=6; -update noar tt set b1='D09O3Q69M5HRNB06FTBMG' where id=6; -update noar ti set b1='D09O3Q69M5HRNB06FTBMG' where id=6; -update noar tt set v0='G1XBK8HV3' where id=6; -update noar ti set v0='G1XBK8HV3' where id=6; -update noar tt set b2='ZD53QVOY3K2IQ9Z9JJ6R1A' where id=6; -update noar ti set b2='ZD53QVOY3K2IQ9Z9JJ6R1A' where id=6; -update noar tt set v0='L9VOXIQHG7KL49BR23' where id=7; -update noar ti set v0='L9VOXIQHG7KL49BR23' where id=7; -update noar tt set b0='7HWQ5QUZV4XCCP7FOW' where id=7; -update noar ti set b0='7HWQ5QUZV4XCCP7FOW' where id=7; -update noar tt set v0='Y6E00MR1TKSTHC0NFXPGY892' where id=7; -update noar ti set v0='Y6E00MR1TKSTHC0NFXPGY892' where id=7; -update noar tt set b1='37VZIDMPXDBKGM' where id=7; -update noar ti set b1='37VZIDMPXDBKGM' where id=7; -update noar tt set v0='ZH7JNDM75ZPKNSXOPGENYV' where id=7; -update noar ti set v0='ZH7JNDM75ZPKNSXOPGENYV' where id=7; -update noar tt set b2='T1MO7TLWKGNY4ELCKW0' where id=7; -update noar ti set b2='T1MO7TLWKGNY4ELCKW0' where id=7; -update noar tt set v0='BUNE0RBQ1BZHKPE' where id=8; -update noar ti set v0='BUNE0RBQ1BZHKPE' where id=8; -update noar tt set b0='079SASB411YF18C2L00ZFZW59WJCRC' where id=8; -update noar ti set b0='079SASB411YF18C2L00ZFZW59WJCRC' where id=8; -update noar tt set v0='HO92F0CTWJ27ZWXFX8RX782EAOPR2YQ' where id=8; -update noar ti set v0='HO92F0CTWJ27ZWXFX8RX782EAOPR2YQ' where id=8; -update noar tt set b1='TASLAWC7CR250B0W9SEQOCMLCHTHNV' where id=8; -update noar ti set b1='TASLAWC7CR250B0W9SEQOCMLCHTHNV' where id=8; -update noar tt set v0='GFM5181G1KR' where id=8; -update noar ti set v0='GFM5181G1KR' where id=8; -update noar tt set b2='EGGELRME' where id=8; -update noar ti set b2='EGGELRME' where id=8; -update noar tt set v0='NU' where id=9; -update noar ti set v0='NU' where id=9; -update noar tt set b0='WXQ' where id=9; -update noar ti set b0='WXQ' where id=9; -update noar tt set v0='LYAW83V0ESNKSV42' where id=9; -update noar ti set v0='LYAW83V0ESNKSV42' where id=9; -update noar tt set b1='Q30QVJU432J' where id=9; -update noar ti set b1='Q30QVJU432J' where id=9; -update noar tt set v0='Y4AM8CYHHHGIH58OOJGMPWT' where id=9; -update noar ti set v0='Y4AM8CYHHHGIH58OOJGMPWT' where id=9; -update noar tt set b2='PJ1KK9M8DISBU6R8NP7BQM03' where id=9; -update noar ti set b2='PJ1KK9M8DISBU6R8NP7BQM03' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 tinyblob not null, - b1 tinyblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='EBDMVSE8SRS7' where id=1; -update noar ti set v0='EBDMVSE8SRS7' where id=1; -update noar tt set b0='3LLM47LYOHNHCMTKWDDL7J0PI3' where id=1; -update noar ti set b0='3LLM47LYOHNHCMTKWDDL7J0PI3' where id=1; -update noar tt set v0='ISMD5S9F3YHP8N61T60QIRWRW2YYI8' where id=1; -update noar ti set v0='ISMD5S9F3YHP8N61T60QIRWRW2YYI8' where id=1; -update noar tt set b1='YPTNHMJ6DEG2Z' where id=1; -update noar ti set b1='YPTNHMJ6DEG2Z' where id=1; -update noar tt set v0='MT58845PR24AZKRA0CXGGK2VOW' where id=1; -update noar ti set v0='MT58845PR24AZKRA0CXGGK2VOW' where id=1; -update noar tt set b2='U5PJTBALJ6G6S3R1G5GBI2KY5GHBT' where id=1; -update noar ti set b2='U5PJTBALJ6G6S3R1G5GBI2KY5GHBT' where id=1; -update noar tt set v0='JL4YOZB838MTJPSX9YK5INP54D' where id=2; -update noar ti set v0='JL4YOZB838MTJPSX9YK5INP54D' where id=2; -update noar tt set b0='6JNJRKL8L' where id=2; -update noar ti set b0='6JNJRKL8L' where id=2; -update noar tt set v0='97B6OSWMVOJ7P' where id=2; -update noar ti set v0='97B6OSWMVOJ7P' where id=2; -update noar tt set b1='BBZHEEZ58' where id=2; -update noar ti set b1='BBZHEEZ58' where id=2; -update noar tt set v0='K8H4AEJIG88D6L54' where id=2; -update noar ti set v0='K8H4AEJIG88D6L54' where id=2; -update noar tt set b2='OBVWZ9IS75O7OXGIEAE' where id=2; -update noar ti set b2='OBVWZ9IS75O7OXGIEAE' where id=2; -update noar tt set v0='R5W6007CPK3SKCC197EKYF6IIML' where id=3; -update noar ti set v0='R5W6007CPK3SKCC197EKYF6IIML' where id=3; -update noar tt set b0='0RPTS8X76FNYKXJESBQ6IJCZJ6466DFQ' where id=3; -update noar ti set b0='0RPTS8X76FNYKXJESBQ6IJCZJ6466DFQ' where id=3; -update noar tt set v0='1QXF0V6' where id=3; -update noar ti set v0='1QXF0V6' where id=3; -update noar tt set b1='545MG8ERXEY0ES2GWU6' where id=3; -update noar ti set b1='545MG8ERXEY0ES2GWU6' where id=3; -update noar tt set v0='9OER' where id=3; -update noar ti set v0='9OER' where id=3; -update noar tt set b2='2XLQR2ZLSAAF1J' where id=3; -update noar ti set b2='2XLQR2ZLSAAF1J' where id=3; -update noar tt set v0='AIG6T' where id=4; -update noar ti set v0='AIG6T' where id=4; -update noar tt set b0='UAA3DJVM4A67LENS9IQE4O34DAAZHE' where id=4; -update noar ti set b0='UAA3DJVM4A67LENS9IQE4O34DAAZHE' where id=4; -update noar tt set v0='Z8MH6087LWNL' where id=4; -update noar ti set v0='Z8MH6087LWNL' where id=4; -update noar tt set b1='2TO7O2GWF1S' where id=4; -update noar ti set b1='2TO7O2GWF1S' where id=4; -update noar tt set v0='112DGTZZFIGU6UW' where id=4; -update noar ti set v0='112DGTZZFIGU6UW' where id=4; -update noar tt set b2='ZUX' where id=4; -update noar ti set b2='ZUX' where id=4; -update noar tt set v0='5R812U1J4KC3I98Q9CD4Z5' where id=5; -update noar ti set v0='5R812U1J4KC3I98Q9CD4Z5' where id=5; -update noar tt set b0='W19LR394V1PUNQ5TOST08LK4JJ81' where id=5; -update noar ti set b0='W19LR394V1PUNQ5TOST08LK4JJ81' where id=5; -update noar tt set v0='N046OAF7KWWTFCHAK7M1MNEFUX6' where id=5; -update noar ti set v0='N046OAF7KWWTFCHAK7M1MNEFUX6' where id=5; -update noar tt set b1='BEX90' where id=5; -update noar ti set b1='BEX90' where id=5; -update noar tt set v0='W6ZJC283GG6XDRKDA00CU' where id=5; -update noar ti set v0='W6ZJC283GG6XDRKDA00CU' where id=5; -update noar tt set b2='SW6YF65ZZR' where id=5; -update noar ti set b2='SW6YF65ZZR' where id=5; -update noar tt set v0='FN4SQB7CLT' where id=6; -update noar ti set v0='FN4SQB7CLT' where id=6; -update noar tt set b0='91ESNOZG2HT8W5C3IL61K' where id=6; -update noar ti set b0='91ESNOZG2HT8W5C3IL61K' where id=6; -update noar tt set v0='OA0GW' where id=6; -update noar ti set v0='OA0GW' where id=6; -update noar tt set b1='KYB42T420M2S0RG5MVHEH8' where id=6; -update noar ti set b1='KYB42T420M2S0RG5MVHEH8' where id=6; -update noar tt set v0='SNXZDT6LXH' where id=6; -update noar ti set v0='SNXZDT6LXH' where id=6; -update noar tt set b2='3VXMULO4' where id=6; -update noar ti set b2='3VXMULO4' where id=6; -update noar tt set v0='24X59TQ4AO7TXEA8N' where id=7; -update noar ti set v0='24X59TQ4AO7TXEA8N' where id=7; -update noar tt set b0='OJNXGIEWCEJP0BO2ETUL2DRH3254VQ3' where id=7; -update noar ti set b0='OJNXGIEWCEJP0BO2ETUL2DRH3254VQ3' where id=7; -update noar tt set v0='C4ED5SOI' where id=7; -update noar ti set v0='C4ED5SOI' where id=7; -update noar tt set b1='FDEMF79SMDVEDRZV' where id=7; -update noar ti set b1='FDEMF79SMDVEDRZV' where id=7; -update noar tt set v0='45NRX77NHZ9DPO91YW24SFVC7R6PJ' where id=7; -update noar ti set v0='45NRX77NHZ9DPO91YW24SFVC7R6PJ' where id=7; -update noar tt set b2='H5DO1XGPAND5QL9ID' where id=7; -update noar ti set b2='H5DO1XGPAND5QL9ID' where id=7; -update noar tt set v0='735' where id=8; -update noar ti set v0='735' where id=8; -update noar tt set b0='F33F1LGLFK6MISSLGLQNIESWEGGNC59C' where id=8; -update noar ti set b0='F33F1LGLFK6MISSLGLQNIESWEGGNC59C' where id=8; -update noar tt set v0='Z74TECDZ0XQHY6B51AFC8B7G3A09GG2F' where id=8; -update noar ti set v0='Z74TECDZ0XQHY6B51AFC8B7G3A09GG2F' where id=8; -update noar tt set b1='OWZBVCAL9IARJLEV7J9RUGC' where id=8; -update noar ti set b1='OWZBVCAL9IARJLEV7J9RUGC' where id=8; -update noar tt set v0='HSG8G82JQIJEMQUMZMQ5ILG1UW' where id=8; -update noar ti set v0='HSG8G82JQIJEMQUMZMQ5ILG1UW' where id=8; -update noar tt set b2='1LZKUV2MNSKPN' where id=8; -update noar ti set b2='1LZKUV2MNSKPN' where id=8; -update noar tt set v0='1KMVQ13VKUTNUD8' where id=9; -update noar ti set v0='1KMVQ13VKUTNUD8' where id=9; -update noar tt set b0='8P7A9S32XDJZT44BQFQXMUMQ72' where id=9; -update noar ti set b0='8P7A9S32XDJZT44BQFQXMUMQ72' where id=9; -update noar tt set v0='HN7EL' where id=9; -update noar ti set v0='HN7EL' where id=9; -update noar tt set b1='YR8SBTP58NJMXP5BV24OL0K5B' where id=9; -update noar ti set b1='YR8SBTP58NJMXP5BV24OL0K5B' where id=9; -update noar tt set v0='MI782QHDFKDKX866T9KBZ09XVFJ' where id=9; -update noar ti set v0='MI782QHDFKDKX866T9KBZ09XVFJ' where id=9; -update noar tt set b2='9RE0JEAC4TGJ' where id=9; -update noar ti set b2='9RE0JEAC4TGJ' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 tinyblob not null, - b1 tinyblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='K8NSPJ189F8KM6OROEJOJ1NMIV9Y8K6' where id=1; -update noar ti set v0='K8NSPJ189F8KM6OROEJOJ1NMIV9Y8K6' where id=1; -update noar tt set b0='6LMF64A8OS2X3' where id=1; -update noar ti set b0='6LMF64A8OS2X3' where id=1; -update noar tt set v0='NNI1BGFAA9OM1JWZHRSDSL2KUVM44FI' where id=1; -update noar ti set v0='NNI1BGFAA9OM1JWZHRSDSL2KUVM44FI' where id=1; -update noar tt set b1='ZBROJ6Q3HRIT4GZ9V' where id=1; -update noar ti set b1='ZBROJ6Q3HRIT4GZ9V' where id=1; -update noar tt set v0='Q11983622ERSVR05GIPBXR' where id=1; -update noar ti set v0='Q11983622ERSVR05GIPBXR' where id=1; -update noar tt set b2='KN7KF' where id=1; -update noar ti set b2='KN7KF' where id=1; -update noar tt set v0='SB5ISHJJV44VO77GE8SKA7139TC38OL' where id=2; -update noar ti set v0='SB5ISHJJV44VO77GE8SKA7139TC38OL' where id=2; -update noar tt set b0='53Z8NQIBR7D10BD414BY' where id=2; -update noar ti set b0='53Z8NQIBR7D10BD414BY' where id=2; -update noar tt set v0='STPDGQUQ0LAO6SA402T1P8' where id=2; -update noar ti set v0='STPDGQUQ0LAO6SA402T1P8' where id=2; -update noar tt set b1='MKEXV3R8IK08W2J0QYJU362' where id=2; -update noar ti set b1='MKEXV3R8IK08W2J0QYJU362' where id=2; -update noar tt set v0='AP6Y9D9785T6W7FK6O1FPMGQOTLSWD' where id=2; -update noar ti set v0='AP6Y9D9785T6W7FK6O1FPMGQOTLSWD' where id=2; -update noar tt set b2='G59NTPAVZ95H2I82Q5B' where id=2; -update noar ti set b2='G59NTPAVZ95H2I82Q5B' where id=2; -update noar tt set v0='P7009TG4BTBWX' where id=3; -update noar ti set v0='P7009TG4BTBWX' where id=3; -update noar tt set b0='0SABYIY6HXY6M' where id=3; -update noar ti set b0='0SABYIY6HXY6M' where id=3; -update noar tt set v0='089COAGUJXOHIHSX9Y1VOR1O6' where id=3; -update noar ti set v0='089COAGUJXOHIHSX9Y1VOR1O6' where id=3; -update noar tt set b1='KWQEBDL877LC' where id=3; -update noar ti set b1='KWQEBDL877LC' where id=3; -update noar tt set v0='Y711VK8VM4KZYRYQB2CJG8J36' where id=3; -update noar ti set v0='Y711VK8VM4KZYRYQB2CJG8J36' where id=3; -update noar tt set b2='ZWXUKT4BQBTER9N6V' where id=3; -update noar ti set b2='ZWXUKT4BQBTER9N6V' where id=3; -update noar tt set v0='8TH9CZFHVO6LTLFZB73M7Q' where id=4; -update noar ti set v0='8TH9CZFHVO6LTLFZB73M7Q' where id=4; -update noar tt set b0='DPO8UJ6ZHYN3J0BL92' where id=4; -update noar ti set b0='DPO8UJ6ZHYN3J0BL92' where id=4; -update noar tt set v0='E2N' where id=4; -update noar ti set v0='E2N' where id=4; -update noar tt set b1='HBOUE8ABT5Q5DBGKN' where id=4; -update noar ti set b1='HBOUE8ABT5Q5DBGKN' where id=4; -update noar tt set v0='C6DA97JFDC' where id=4; -update noar ti set v0='C6DA97JFDC' where id=4; -update noar tt set b2='KJ47WRCHX9CDVXU99LMU' where id=4; -update noar ti set b2='KJ47WRCHX9CDVXU99LMU' where id=4; -update noar tt set v0='XFR3J' where id=5; -update noar ti set v0='XFR3J' where id=5; -update noar tt set b0='P78MA' where id=5; -update noar ti set b0='P78MA' where id=5; -update noar tt set v0='VGJFEI8BSG3VHUBNEPTI' where id=5; -update noar ti set v0='VGJFEI8BSG3VHUBNEPTI' where id=5; -update noar tt set b1='3EG2W3DYKCVK' where id=5; -update noar ti set b1='3EG2W3DYKCVK' where id=5; -update noar tt set v0='7M8LRFW9XOL945G' where id=5; -update noar ti set v0='7M8LRFW9XOL945G' where id=5; -update noar tt set b2='92LZO2S465NJ3ZZNVTH' where id=5; -update noar ti set b2='92LZO2S465NJ3ZZNVTH' where id=5; -update noar tt set v0='E5KTDNHV8YRLR8MS185F886N' where id=6; -update noar ti set v0='E5KTDNHV8YRLR8MS185F886N' where id=6; -update noar tt set b0='84W3KV27G41M470O5UM2MV58' where id=6; -update noar ti set b0='84W3KV27G41M470O5UM2MV58' where id=6; -update noar tt set v0='8WL1S7VOITW3A0V9EKAYZ5WSH5AVABKI' where id=6; -update noar ti set v0='8WL1S7VOITW3A0V9EKAYZ5WSH5AVABKI' where id=6; -update noar tt set b1='HVAUU0T8RUA7KFWQHXH102UCQZNP' where id=6; -update noar ti set b1='HVAUU0T8RUA7KFWQHXH102UCQZNP' where id=6; -update noar tt set v0='YRBNYN9OQEX299P95WWZ16GG1XEU' where id=6; -update noar ti set v0='YRBNYN9OQEX299P95WWZ16GG1XEU' where id=6; -update noar tt set b2='1JZW6RL836Y0B' where id=6; -update noar ti set b2='1JZW6RL836Y0B' where id=6; -update noar tt set v0='9AO0PMC1U3NK5VU6Y0A' where id=7; -update noar ti set v0='9AO0PMC1U3NK5VU6Y0A' where id=7; -update noar tt set b0='DXED3P' where id=7; -update noar ti set b0='DXED3P' where id=7; -update noar tt set v0='N91HXSDSGQ8957CF4SH' where id=7; -update noar ti set v0='N91HXSDSGQ8957CF4SH' where id=7; -update noar tt set b1='19RTEBXJ' where id=7; -update noar ti set b1='19RTEBXJ' where id=7; -update noar tt set v0='NA583' where id=7; -update noar ti set v0='NA583' where id=7; -update noar tt set b2='A8PIRU08HHI8P4NH1H7M8' where id=7; -update noar ti set b2='A8PIRU08HHI8P4NH1H7M8' where id=7; -update noar tt set v0='TCKTNX00RS7OCBZS6R' where id=8; -update noar ti set v0='TCKTNX00RS7OCBZS6R' where id=8; -update noar tt set b0='PFH2ECI5PSYY5X6RVW' where id=8; -update noar ti set b0='PFH2ECI5PSYY5X6RVW' where id=8; -update noar tt set v0='ZJLFP22U5MOVF' where id=8; -update noar ti set v0='ZJLFP22U5MOVF' where id=8; -update noar tt set b1='89XI3QPR7JM7LJD596FDN' where id=8; -update noar ti set b1='89XI3QPR7JM7LJD596FDN' where id=8; -update noar tt set v0='DNMX5QSFKDQJ' where id=8; -update noar ti set v0='DNMX5QSFKDQJ' where id=8; -update noar tt set b2='PMANK0RF34GV' where id=8; -update noar ti set b2='PMANK0RF34GV' where id=8; -update noar tt set v0='CP9OR4' where id=9; -update noar ti set v0='CP9OR4' where id=9; -update noar tt set b0='UBARS9EYH43DRZ4RQJQIP1X2JP2CP' where id=9; -update noar ti set b0='UBARS9EYH43DRZ4RQJQIP1X2JP2CP' where id=9; -update noar tt set v0='CIXEAVKVXU' where id=9; -update noar ti set v0='CIXEAVKVXU' where id=9; -update noar tt set b1='S9RGTGFSCE8CUTA2ZTQ934BBPGG' where id=9; -update noar ti set b1='S9RGTGFSCE8CUTA2ZTQ934BBPGG' where id=9; -update noar tt set v0='O6TZ8JM8A4W1' where id=9; -update noar ti set v0='O6TZ8JM8A4W1' where id=9; -update noar tt set b2='3QWTT010XHC5UHLN4S06' where id=9; -update noar ti set b2='3QWTT010XHC5UHLN4S06' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 tinyblob null, - b1 tinyblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='IO183H14D1WS' where id=1; -update noar ti set v0='IO183H14D1WS' where id=1; -update noar tt set b0='4659HHPODFOX7H28I' where id=1; -update noar ti set b0='4659HHPODFOX7H28I' where id=1; -update noar tt set v0='V794014B20ZPL8UA93XN4D4GN452ISBM' where id=1; -update noar ti set v0='V794014B20ZPL8UA93XN4D4GN452ISBM' where id=1; -update noar tt set b1='NP' where id=1; -update noar ti set b1='NP' where id=1; -update noar tt set v0='HZD70LUSY' where id=1; -update noar ti set v0='HZD70LUSY' where id=1; -update noar tt set b2='2W7TW' where id=1; -update noar ti set b2='2W7TW' where id=1; -update noar tt set v0='LG5Y5UAYTY0JI' where id=2; -update noar ti set v0='LG5Y5UAYTY0JI' where id=2; -update noar tt set b0='LI0' where id=2; -update noar ti set b0='LI0' where id=2; -update noar tt set v0='V0PQLUP624SPBJTVPYY6LWZ' where id=2; -update noar ti set v0='V0PQLUP624SPBJTVPYY6LWZ' where id=2; -update noar tt set b1='FFGMF67N' where id=2; -update noar ti set b1='FFGMF67N' where id=2; -update noar tt set v0='9ILULRIJ49FOWO701RS8US6EN0CLC' where id=2; -update noar ti set v0='9ILULRIJ49FOWO701RS8US6EN0CLC' where id=2; -update noar tt set b2='R2XLNNPFM35QH9PTFG7429YES3' where id=2; -update noar ti set b2='R2XLNNPFM35QH9PTFG7429YES3' where id=2; -update noar tt set v0='GO60CLY8UW1IE5DMDM' where id=3; -update noar ti set v0='GO60CLY8UW1IE5DMDM' where id=3; -update noar tt set b0='G7HTHTB611JX19W6CETJPCTDYFTC5' where id=3; -update noar ti set b0='G7HTHTB611JX19W6CETJPCTDYFTC5' where id=3; -update noar tt set v0='FPR08WZUWZD' where id=3; -update noar ti set v0='FPR08WZUWZD' where id=3; -update noar tt set b1='RFELQ2O9XNWVT8E1AO43S7O' where id=3; -update noar ti set b1='RFELQ2O9XNWVT8E1AO43S7O' where id=3; -update noar tt set v0='6JCMUIRX4CDT8R5V334OSNEQ8C' where id=3; -update noar ti set v0='6JCMUIRX4CDT8R5V334OSNEQ8C' where id=3; -update noar tt set b2='1W0RNVBQ9UQT0BXI' where id=3; -update noar ti set b2='1W0RNVBQ9UQT0BXI' where id=3; -update noar tt set v0='RHM' where id=4; -update noar ti set v0='RHM' where id=4; -update noar tt set b0='8O1VS8JKLHNNVEI2VTQIVBIK0' where id=4; -update noar ti set b0='8O1VS8JKLHNNVEI2VTQIVBIK0' where id=4; -update noar tt set v0='F1Y45M' where id=4; -update noar ti set v0='F1Y45M' where id=4; -update noar tt set b1='0AISSMOOX1GNSOIUN7B4C2708U8U1' where id=4; -update noar ti set b1='0AISSMOOX1GNSOIUN7B4C2708U8U1' where id=4; -update noar tt set v0='4FPJ12U2KXUUF34UUCF2HA7SU' where id=4; -update noar ti set v0='4FPJ12U2KXUUF34UUCF2HA7SU' where id=4; -update noar tt set b2='KEL3VYHM' where id=4; -update noar ti set b2='KEL3VYHM' where id=4; -update noar tt set v0='YSR5UG5GCIWVQB1VKWW4O0HEPU57A2' where id=5; -update noar ti set v0='YSR5UG5GCIWVQB1VKWW4O0HEPU57A2' where id=5; -update noar tt set b0='OW8NRFQ7RUF4WW0' where id=5; -update noar ti set b0='OW8NRFQ7RUF4WW0' where id=5; -update noar tt set v0='ZSLIWZKVJWS0XXD' where id=5; -update noar ti set v0='ZSLIWZKVJWS0XXD' where id=5; -update noar tt set b1='TW5TC0P8LQ7LK41H3NDGL5CC' where id=5; -update noar ti set b1='TW5TC0P8LQ7LK41H3NDGL5CC' where id=5; -update noar tt set v0='CR' where id=5; -update noar ti set v0='CR' where id=5; -update noar tt set b2='3A62GE0' where id=5; -update noar ti set b2='3A62GE0' where id=5; -update noar tt set v0='JIT6Z9A8DFG084KW7G' where id=6; -update noar ti set v0='JIT6Z9A8DFG084KW7G' where id=6; -update noar tt set b0='HM' where id=6; -update noar ti set b0='HM' where id=6; -update noar tt set v0='WJH3UE76ZSG' where id=6; -update noar ti set v0='WJH3UE76ZSG' where id=6; -update noar tt set b1='4NGYH5TWD57ZRWRV' where id=6; -update noar ti set b1='4NGYH5TWD57ZRWRV' where id=6; -update noar tt set v0='119K6HXZD492URWUT1ZEIOG' where id=6; -update noar ti set v0='119K6HXZD492URWUT1ZEIOG' where id=6; -update noar tt set b2='RCO3B5MT2DGXQZ' where id=6; -update noar ti set b2='RCO3B5MT2DGXQZ' where id=6; -update noar tt set v0='OJ291GEPK1RMR07OFH9' where id=7; -update noar ti set v0='OJ291GEPK1RMR07OFH9' where id=7; -update noar tt set b0='H24GEC0NZHAGY4QC757OI2QNFY74' where id=7; -update noar ti set b0='H24GEC0NZHAGY4QC757OI2QNFY74' where id=7; -update noar tt set v0='3P19Y7OJYE' where id=7; -update noar ti set v0='3P19Y7OJYE' where id=7; -update noar tt set b1='JH' where id=7; -update noar ti set b1='JH' where id=7; -update noar tt set v0='5' where id=7; -update noar ti set v0='5' where id=7; -update noar tt set b2='TAYUPP3H7J5RE70I8WWPKXEAA' where id=7; -update noar ti set b2='TAYUPP3H7J5RE70I8WWPKXEAA' where id=7; -update noar tt set v0='CFG0DPZS0CMB' where id=8; -update noar ti set v0='CFG0DPZS0CMB' where id=8; -update noar tt set b0='J6GJABCR9SJKK6BO5' where id=8; -update noar ti set b0='J6GJABCR9SJKK6BO5' where id=8; -update noar tt set v0='ERVZ4EV9HZXZS6YTS9P' where id=8; -update noar ti set v0='ERVZ4EV9HZXZS6YTS9P' where id=8; -update noar tt set b1='47TDQS84MGAB9Z4TC' where id=8; -update noar ti set b1='47TDQS84MGAB9Z4TC' where id=8; -update noar tt set v0='8GNSVLA8IHMYTUOYIM' where id=8; -update noar ti set v0='8GNSVLA8IHMYTUOYIM' where id=8; -update noar tt set b2='O475F' where id=8; -update noar ti set b2='O475F' where id=8; -update noar tt set v0='GG4GDZ4CSPDY2MGGS6L9QBH5W6' where id=9; -update noar ti set v0='GG4GDZ4CSPDY2MGGS6L9QBH5W6' where id=9; -update noar tt set b0='GES24NIWZ0FJ09HTB8' where id=9; -update noar ti set b0='GES24NIWZ0FJ09HTB8' where id=9; -update noar tt set v0='S2NHJIET' where id=9; -update noar ti set v0='S2NHJIET' where id=9; -update noar tt set b1='LZSCMC5B3MGLGS68WDDLX122GHBW8WR' where id=9; -update noar ti set b1='LZSCMC5B3MGLGS68WDDLX122GHBW8WR' where id=9; -update noar tt set v0='NNRHRO87YKM9ZHMXIXY94GO6T84EXDU7' where id=9; -update noar ti set v0='NNRHRO87YKM9ZHMXIXY94GO6T84EXDU7' where id=9; -update noar tt set b2='DUYWTHBGQTFWY0F7WBBRUIKL9CA5' where id=9; -update noar ti set b2='DUYWTHBGQTFWY0F7WBBRUIKL9CA5' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 tinyblob null, - b1 tinyblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='FQJEBWZ5H9QATEP' where id=1; -update noar ti set v0='FQJEBWZ5H9QATEP' where id=1; -update noar tt set b0='94KXNTAJHCFX3JG458XUZGAGAFFX' where id=1; -update noar ti set b0='94KXNTAJHCFX3JG458XUZGAGAFFX' where id=1; -update noar tt set v0='S4WX0KP4IYHF7WPV7WLVOZ79K81' where id=1; -update noar ti set v0='S4WX0KP4IYHF7WPV7WLVOZ79K81' where id=1; -update noar tt set b1='NF' where id=1; -update noar ti set b1='NF' where id=1; -update noar tt set v0='FYD1C8XIBYI16SHIVJJYNPY6P' where id=1; -update noar ti set v0='FYD1C8XIBYI16SHIVJJYNPY6P' where id=1; -update noar tt set b2='YXXQPI18CCSAAKIC5R3N52LUMGF7AJW' where id=1; -update noar ti set b2='YXXQPI18CCSAAKIC5R3N52LUMGF7AJW' where id=1; -update noar tt set v0='JRPGR9ZV6VQLXX4UZ5S229ZQB0SZ2' where id=2; -update noar ti set v0='JRPGR9ZV6VQLXX4UZ5S229ZQB0SZ2' where id=2; -update noar tt set b0='WEN30AFXA6DLGXWGAZ' where id=2; -update noar ti set b0='WEN30AFXA6DLGXWGAZ' where id=2; -update noar tt set v0='VP0W5C5TY' where id=2; -update noar ti set v0='VP0W5C5TY' where id=2; -update noar tt set b1='SX79T2M' where id=2; -update noar ti set b1='SX79T2M' where id=2; -update noar tt set v0='SMA1R3STCSPCR84YO8J9C26L2' where id=2; -update noar ti set v0='SMA1R3STCSPCR84YO8J9C26L2' where id=2; -update noar tt set b2='UZFK1OQXFUZG' where id=2; -update noar ti set b2='UZFK1OQXFUZG' where id=2; -update noar tt set v0='EGWWLFQJ0B1' where id=3; -update noar ti set v0='EGWWLFQJ0B1' where id=3; -update noar tt set b0='4V8RMAL' where id=3; -update noar ti set b0='4V8RMAL' where id=3; -update noar tt set v0='72GDUYZ86W8RJQYXL6QEE' where id=3; -update noar ti set v0='72GDUYZ86W8RJQYXL6QEE' where id=3; -update noar tt set b1='BZKLCI' where id=3; -update noar ti set b1='BZKLCI' where id=3; -update noar tt set v0='IHBKYL1BDZ6UT672YO' where id=3; -update noar ti set v0='IHBKYL1BDZ6UT672YO' where id=3; -update noar tt set b2='ULBHM2GQSZE57FYYBC7R2' where id=3; -update noar ti set b2='ULBHM2GQSZE57FYYBC7R2' where id=3; -update noar tt set v0='KX1L5YMHYO5TWA2NFF2ZC' where id=4; -update noar ti set v0='KX1L5YMHYO5TWA2NFF2ZC' where id=4; -update noar tt set b0='V8DA0B9D' where id=4; -update noar ti set b0='V8DA0B9D' where id=4; -update noar tt set v0='J7FI7Z46YLY5591JREZCXU55L7' where id=4; -update noar ti set v0='J7FI7Z46YLY5591JREZCXU55L7' where id=4; -update noar tt set b1='LYMOJ2NBZ3QSJHPUK2L2' where id=4; -update noar ti set b1='LYMOJ2NBZ3QSJHPUK2L2' where id=4; -update noar tt set v0='C1PDF82HCNUMTX7TD0IAUGU8781' where id=4; -update noar ti set v0='C1PDF82HCNUMTX7TD0IAUGU8781' where id=4; -update noar tt set b2='SHV4DZNX2T26CR0BA7GWG5139PTNG' where id=4; -update noar ti set b2='SHV4DZNX2T26CR0BA7GWG5139PTNG' where id=4; -update noar tt set v0='T772XEVGTFV' where id=5; -update noar ti set v0='T772XEVGTFV' where id=5; -update noar tt set b0='CFMKN8LUFBEBNRE4FJG7V7YU17IIE' where id=5; -update noar ti set b0='CFMKN8LUFBEBNRE4FJG7V7YU17IIE' where id=5; -update noar tt set v0='D' where id=5; -update noar ti set v0='D' where id=5; -update noar tt set b1='B6P2Y36S7LV04DBT' where id=5; -update noar ti set b1='B6P2Y36S7LV04DBT' where id=5; -update noar tt set v0='FUSTNCDCMYB00USXC9SG' where id=5; -update noar ti set v0='FUSTNCDCMYB00USXC9SG' where id=5; -update noar tt set b2='45X6B9C9CKO7ACSDYWF2C0UPEWBVD' where id=5; -update noar ti set b2='45X6B9C9CKO7ACSDYWF2C0UPEWBVD' where id=5; -update noar tt set v0='YRF' where id=6; -update noar ti set v0='YRF' where id=6; -update noar tt set b0='FIT19WCTO' where id=6; -update noar ti set b0='FIT19WCTO' where id=6; -update noar tt set v0='HUT7DKH54G3SEE08R8U1SCOJY' where id=6; -update noar ti set v0='HUT7DKH54G3SEE08R8U1SCOJY' where id=6; -update noar tt set b1='K5PWHFU4QXCT8PULYCJN845' where id=6; -update noar ti set b1='K5PWHFU4QXCT8PULYCJN845' where id=6; -update noar tt set v0='1ZV6T12OVT0O9J7WKV' where id=6; -update noar ti set v0='1ZV6T12OVT0O9J7WKV' where id=6; -update noar tt set b2='3AMDBYZFPO2GDDZGHKC7GBNJ' where id=6; -update noar ti set b2='3AMDBYZFPO2GDDZGHKC7GBNJ' where id=6; -update noar tt set v0='62649G70QT23G598IR5CKLPND4SFUKQ' where id=7; -update noar ti set v0='62649G70QT23G598IR5CKLPND4SFUKQ' where id=7; -update noar tt set b0='Q7PI30WPVLNLW00' where id=7; -update noar ti set b0='Q7PI30WPVLNLW00' where id=7; -update noar tt set v0='U4DU6U03LW0GDV' where id=7; -update noar ti set v0='U4DU6U03LW0GDV' where id=7; -update noar tt set b1='581AR1P21X8HKGJYNDH0AGXB' where id=7; -update noar ti set b1='581AR1P21X8HKGJYNDH0AGXB' where id=7; -update noar tt set v0='OEOCXX8MB38GTMW' where id=7; -update noar ti set v0='OEOCXX8MB38GTMW' where id=7; -update noar tt set b2='Y6G8ZWVI5EGH7NMJ326OQKJWZMCCO5IA' where id=7; -update noar ti set b2='Y6G8ZWVI5EGH7NMJ326OQKJWZMCCO5IA' where id=7; -update noar tt set v0='CM8RUHC2HEH2MSY47BATWMXMXIWV' where id=8; -update noar ti set v0='CM8RUHC2HEH2MSY47BATWMXMXIWV' where id=8; -update noar tt set b0='J48HOSOIR8ITD' where id=8; -update noar ti set b0='J48HOSOIR8ITD' where id=8; -update noar tt set v0='CJ7DM7VIS5FVFFTSC1A9T3IPOX512' where id=8; -update noar ti set v0='CJ7DM7VIS5FVFFTSC1A9T3IPOX512' where id=8; -update noar tt set b1='DDDA0C1KCQAGLX02PUPYX9JOTH1Q4WBY' where id=8; -update noar ti set b1='DDDA0C1KCQAGLX02PUPYX9JOTH1Q4WBY' where id=8; -update noar tt set v0='5WMFIGARIK08F4WOA1' where id=8; -update noar ti set v0='5WMFIGARIK08F4WOA1' where id=8; -update noar tt set b2='3C74W5EAAU06EEK745CEYPKEMQD' where id=8; -update noar ti set b2='3C74W5EAAU06EEK745CEYPKEMQD' where id=8; -update noar tt set v0='8YQL4C2UA838FLPTK8' where id=9; -update noar ti set v0='8YQL4C2UA838FLPTK8' where id=9; -update noar tt set b0='6MIA72A297ZYL2VLGDJ3HD1XR' where id=9; -update noar ti set b0='6MIA72A297ZYL2VLGDJ3HD1XR' where id=9; -update noar tt set v0='MW5PFU7AUWFDGRE6' where id=9; -update noar ti set v0='MW5PFU7AUWFDGRE6' where id=9; -update noar tt set b1='OTBG4W5FF1ZY6OML4FVJP1H14IBH' where id=9; -update noar ti set b1='OTBG4W5FF1ZY6OML4FVJP1H14IBH' where id=9; -update noar tt set v0='UGMRBVTEORP6EM3TJ' where id=9; -update noar ti set v0='UGMRBVTEORP6EM3TJ' where id=9; -update noar tt set b2='V' where id=9; -update noar ti set b2='V' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 tinyblob not null, - b1 tinyblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='7XTT73TB6O2ZROIS6Y' where id=1; -update noar ti set v0='7XTT73TB6O2ZROIS6Y' where id=1; -update noar tt set b0='Q7KGHH' where id=1; -update noar ti set b0='Q7KGHH' where id=1; -update noar tt set v0='XY1VOS09GPAWLXEETTVSP3T0' where id=1; -update noar ti set v0='XY1VOS09GPAWLXEETTVSP3T0' where id=1; -update noar tt set b1='1TK8D' where id=1; -update noar ti set b1='1TK8D' where id=1; -update noar tt set v0='16XA06KSW6NIT' where id=1; -update noar ti set v0='16XA06KSW6NIT' where id=1; -update noar tt set b2='7T3DDNQPF4OYECMNFGX5OXJF' where id=1; -update noar ti set b2='7T3DDNQPF4OYECMNFGX5OXJF' where id=1; -update noar tt set v0='IIN4XULFRSR58UT4H6XTFOFSNAYMMQBB' where id=2; -update noar ti set v0='IIN4XULFRSR58UT4H6XTFOFSNAYMMQBB' where id=2; -update noar tt set b0='ZFCOTEUO684CUJBGJSDWO7W' where id=2; -update noar ti set b0='ZFCOTEUO684CUJBGJSDWO7W' where id=2; -update noar tt set v0='X9FHNE7G6YYWCBP9EWH8RD4W' where id=2; -update noar ti set v0='X9FHNE7G6YYWCBP9EWH8RD4W' where id=2; -update noar tt set b1='M4OYBT793CUJ1674PHUUEAM8J55MS' where id=2; -update noar ti set b1='M4OYBT793CUJ1674PHUUEAM8J55MS' where id=2; -update noar tt set v0='F' where id=2; -update noar ti set v0='F' where id=2; -update noar tt set b2='2GX93CUWKA7GKHTWMR' where id=2; -update noar ti set b2='2GX93CUWKA7GKHTWMR' where id=2; -update noar tt set v0='3S8UD79J7ZMYZ' where id=3; -update noar ti set v0='3S8UD79J7ZMYZ' where id=3; -update noar tt set b0='6TBMQGKGL2JMT' where id=3; -update noar ti set b0='6TBMQGKGL2JMT' where id=3; -update noar tt set v0='Z950E9IRHP5L1VTLMJ0MECLQC51' where id=3; -update noar ti set v0='Z950E9IRHP5L1VTLMJ0MECLQC51' where id=3; -update noar tt set b1='4TZ3B' where id=3; -update noar ti set b1='4TZ3B' where id=3; -update noar tt set v0='V' where id=3; -update noar ti set v0='V' where id=3; -update noar tt set b2='4GU1VTRD5GF87HNJPJYP2SXK0IRBQPY' where id=3; -update noar ti set b2='4GU1VTRD5GF87HNJPJYP2SXK0IRBQPY' where id=3; -update noar tt set v0='ECEYJOFA504OPSNOEAOJ' where id=4; -update noar ti set v0='ECEYJOFA504OPSNOEAOJ' where id=4; -update noar tt set b0='OUYV5F' where id=4; -update noar ti set b0='OUYV5F' where id=4; -update noar tt set v0='7Y6J6LXKONTTGEVEUA9Z' where id=4; -update noar ti set v0='7Y6J6LXKONTTGEVEUA9Z' where id=4; -update noar tt set b1='P3LW' where id=4; -update noar ti set b1='P3LW' where id=4; -update noar tt set v0='SZ38GAN2EM51' where id=4; -update noar ti set v0='SZ38GAN2EM51' where id=4; -update noar tt set b2='9E' where id=4; -update noar ti set b2='9E' where id=4; -update noar tt set v0='2' where id=5; -update noar ti set v0='2' where id=5; -update noar tt set b0='IF7YOOD8UCL7FL' where id=5; -update noar ti set b0='IF7YOOD8UCL7FL' where id=5; -update noar tt set v0='HUHXW5QJF7P' where id=5; -update noar ti set v0='HUHXW5QJF7P' where id=5; -update noar tt set b1='54I625COL1E' where id=5; -update noar ti set b1='54I625COL1E' where id=5; -update noar tt set v0='T61CCMJU0FWNX' where id=5; -update noar ti set v0='T61CCMJU0FWNX' where id=5; -update noar tt set b2='Y1G0RDSE184U3EI21NQWJS7' where id=5; -update noar ti set b2='Y1G0RDSE184U3EI21NQWJS7' where id=5; -update noar tt set v0='HUHMVG3C6KFUIWZYPSJWAJFILVTWW0' where id=6; -update noar ti set v0='HUHMVG3C6KFUIWZYPSJWAJFILVTWW0' where id=6; -update noar tt set b0='SSS4' where id=6; -update noar ti set b0='SSS4' where id=6; -update noar tt set v0='22Q3QFMX9O6EK8JH5J' where id=6; -update noar ti set v0='22Q3QFMX9O6EK8JH5J' where id=6; -update noar tt set b1='GFQYG61MUE3BO5' where id=6; -update noar ti set b1='GFQYG61MUE3BO5' where id=6; -update noar tt set v0='MJ6RUYCTN1B04IXPBI6K7VONB3RZO' where id=6; -update noar ti set v0='MJ6RUYCTN1B04IXPBI6K7VONB3RZO' where id=6; -update noar tt set b2='QC1UN0X0ZDF6YK' where id=6; -update noar ti set b2='QC1UN0X0ZDF6YK' where id=6; -update noar tt set v0='16GAUCR1A7FZV3BN0' where id=7; -update noar ti set v0='16GAUCR1A7FZV3BN0' where id=7; -update noar tt set b0='4S71LZQD1MV4PLZ9K273TF0I' where id=7; -update noar ti set b0='4S71LZQD1MV4PLZ9K273TF0I' where id=7; -update noar tt set v0='B3DX22JT9KMPOMG4YQNQSEZD8I' where id=7; -update noar ti set v0='B3DX22JT9KMPOMG4YQNQSEZD8I' where id=7; -update noar tt set b1='901DP42WV97QFW1NLYDRR88AWP' where id=7; -update noar ti set b1='901DP42WV97QFW1NLYDRR88AWP' where id=7; -update noar tt set v0='RH1H99MQBOWGDNA6F0ZCAU0EHY' where id=7; -update noar ti set v0='RH1H99MQBOWGDNA6F0ZCAU0EHY' where id=7; -update noar tt set b2='UTJ24G95SZK28WIZTEG7FQAS2G5AFH' where id=7; -update noar ti set b2='UTJ24G95SZK28WIZTEG7FQAS2G5AFH' where id=7; -update noar tt set v0='5INBHYAFHU6UNXWXW82' where id=8; -update noar ti set v0='5INBHYAFHU6UNXWXW82' where id=8; -update noar tt set b0='R8' where id=8; -update noar ti set b0='R8' where id=8; -update noar tt set v0='86J3XWPQBDAE7DH6N4BSWCNKQ0DSICR4' where id=8; -update noar ti set v0='86J3XWPQBDAE7DH6N4BSWCNKQ0DSICR4' where id=8; -update noar tt set b1='XO9ADPIOC15W65' where id=8; -update noar ti set b1='XO9ADPIOC15W65' where id=8; -update noar tt set v0='ZWX' where id=8; -update noar ti set v0='ZWX' where id=8; -update noar tt set b2='DI02PG5UHYGW26QIP7RFN5' where id=8; -update noar ti set b2='DI02PG5UHYGW26QIP7RFN5' where id=8; -update noar tt set v0='23B' where id=9; -update noar ti set v0='23B' where id=9; -update noar tt set b0='OK7CO7B605S05ZEA2R' where id=9; -update noar ti set b0='OK7CO7B605S05ZEA2R' where id=9; -update noar tt set v0='MRAVTBHQJ2KMBQ' where id=9; -update noar ti set v0='MRAVTBHQJ2KMBQ' where id=9; -update noar tt set b1='VBVVXR' where id=9; -update noar ti set b1='VBVVXR' where id=9; -update noar tt set v0='WVYRUL7OKPOCAG' where id=9; -update noar ti set v0='WVYRUL7OKPOCAG' where id=9; -update noar tt set b2='AZYZ2TNI4' where id=9; -update noar ti set b2='AZYZ2TNI4' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 tinyblob not null, - b1 tinyblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='P8ERNEXJX0' where id=1; -update noar ti set v0='P8ERNEXJX0' where id=1; -update noar tt set b0='46LLDX6PU5W3C1AK8' where id=1; -update noar ti set b0='46LLDX6PU5W3C1AK8' where id=1; -update noar tt set v0='89DEUI' where id=1; -update noar ti set v0='89DEUI' where id=1; -update noar tt set b1='51OIFUHAFC' where id=1; -update noar ti set b1='51OIFUHAFC' where id=1; -update noar tt set v0='YDG1IG3BOYA8D9J7LNZM' where id=1; -update noar ti set v0='YDG1IG3BOYA8D9J7LNZM' where id=1; -update noar tt set b2='Q31K7LUKOKN63WE0536ZJVXE4VFGYJL' where id=1; -update noar ti set b2='Q31K7LUKOKN63WE0536ZJVXE4VFGYJL' where id=1; -update noar tt set v0='V' where id=2; -update noar ti set v0='V' where id=2; -update noar tt set b0='4' where id=2; -update noar ti set b0='4' where id=2; -update noar tt set v0='HF3LV51L9NUVQ16H' where id=2; -update noar ti set v0='HF3LV51L9NUVQ16H' where id=2; -update noar tt set b1='9TLL9T' where id=2; -update noar ti set b1='9TLL9T' where id=2; -update noar tt set v0='NJD6IG' where id=2; -update noar ti set v0='NJD6IG' where id=2; -update noar tt set b2='ZZ0LN5ILJ7E1WWMME26J6BFR5' where id=2; -update noar ti set b2='ZZ0LN5ILJ7E1WWMME26J6BFR5' where id=2; -update noar tt set v0='BMZSSN5DZ68AAZHDFVDKT6AOIN4' where id=3; -update noar ti set v0='BMZSSN5DZ68AAZHDFVDKT6AOIN4' where id=3; -update noar tt set b0='IYBES7D33F' where id=3; -update noar ti set b0='IYBES7D33F' where id=3; -update noar tt set v0='VRV9J3OELG82TP49NIIL93K0ILZK8OEH' where id=3; -update noar ti set v0='VRV9J3OELG82TP49NIIL93K0ILZK8OEH' where id=3; -update noar tt set b1='BAZMSYZ9' where id=3; -update noar ti set b1='BAZMSYZ9' where id=3; -update noar tt set v0='71TVIPM60CDQ' where id=3; -update noar ti set v0='71TVIPM60CDQ' where id=3; -update noar tt set b2='PQ0CQ9TQJ30QHIE6VMFKUZ0VM24' where id=3; -update noar ti set b2='PQ0CQ9TQJ30QHIE6VMFKUZ0VM24' where id=3; -update noar tt set v0='FK2QS2M38MG4SB' where id=4; -update noar ti set v0='FK2QS2M38MG4SB' where id=4; -update noar tt set b0='BJ53EUSXGLSJT2DK0HRSTKVNOC' where id=4; -update noar ti set b0='BJ53EUSXGLSJT2DK0HRSTKVNOC' where id=4; -update noar tt set v0='AW0JKGZG' where id=4; -update noar ti set v0='AW0JKGZG' where id=4; -update noar tt set b1='QYF22DIANJZJDLW' where id=4; -update noar ti set b1='QYF22DIANJZJDLW' where id=4; -update noar tt set v0='UOKB2TZJGOAY7W0CCY13IM6DCN83RNV' where id=4; -update noar ti set v0='UOKB2TZJGOAY7W0CCY13IM6DCN83RNV' where id=4; -update noar tt set b2='QFGB82ROQMFRJ' where id=4; -update noar ti set b2='QFGB82ROQMFRJ' where id=4; -update noar tt set v0='GCT1' where id=5; -update noar ti set v0='GCT1' where id=5; -update noar tt set b0='4AY3G3TMA6K1KLOG' where id=5; -update noar ti set b0='4AY3G3TMA6K1KLOG' where id=5; -update noar tt set v0='E2NQGKV9NQ' where id=5; -update noar ti set v0='E2NQGKV9NQ' where id=5; -update noar tt set b1='0FZXXTL56A9FDWQWTV8VDE5' where id=5; -update noar ti set b1='0FZXXTL56A9FDWQWTV8VDE5' where id=5; -update noar tt set v0='2' where id=5; -update noar ti set v0='2' where id=5; -update noar tt set b2='XNHFGL9O4331TJ8O5WGJ' where id=5; -update noar ti set b2='XNHFGL9O4331TJ8O5WGJ' where id=5; -update noar tt set v0='3WN2' where id=6; -update noar ti set v0='3WN2' where id=6; -update noar tt set b0='4OHP6FSU5QAPFHYGW3' where id=6; -update noar ti set b0='4OHP6FSU5QAPFHYGW3' where id=6; -update noar tt set v0='6LZLS7JDJZMXTEL09' where id=6; -update noar ti set v0='6LZLS7JDJZMXTEL09' where id=6; -update noar tt set b1='E56W' where id=6; -update noar ti set b1='E56W' where id=6; -update noar tt set v0='Z' where id=6; -update noar ti set v0='Z' where id=6; -update noar tt set b2='QL4P44RMBNPTM1BGXORDXA' where id=6; -update noar ti set b2='QL4P44RMBNPTM1BGXORDXA' where id=6; -update noar tt set v0='V72KAJT49Q3XNJJH3BZ38UIDBR' where id=7; -update noar ti set v0='V72KAJT49Q3XNJJH3BZ38UIDBR' where id=7; -update noar tt set b0='A8ZHTF28G2ESEKC2P' where id=7; -update noar ti set b0='A8ZHTF28G2ESEKC2P' where id=7; -update noar tt set v0='MSU2TK7T7X8H2PO002' where id=7; -update noar ti set v0='MSU2TK7T7X8H2PO002' where id=7; -update noar tt set b1='OEIVQ9JNR12TLNS9F9TRBO' where id=7; -update noar ti set b1='OEIVQ9JNR12TLNS9F9TRBO' where id=7; -update noar tt set v0='ORMWQRG' where id=7; -update noar ti set v0='ORMWQRG' where id=7; -update noar tt set b2='2TGJ' where id=7; -update noar ti set b2='2TGJ' where id=7; -update noar tt set v0='DM8NIYDI3UY7VYOP6CA' where id=8; -update noar ti set v0='DM8NIYDI3UY7VYOP6CA' where id=8; -update noar tt set b0='0R8SCQQHS2' where id=8; -update noar ti set b0='0R8SCQQHS2' where id=8; -update noar tt set v0='73V4GP8ZGHQUPGHJQNEMSNB6ZDC09RB' where id=8; -update noar ti set v0='73V4GP8ZGHQUPGHJQNEMSNB6ZDC09RB' where id=8; -update noar tt set b1='T5PUHSVI2D42NGLBRORMZ5QYC5DTXTZ' where id=8; -update noar ti set b1='T5PUHSVI2D42NGLBRORMZ5QYC5DTXTZ' where id=8; -update noar tt set v0='VQFLD8QM79CJWYS' where id=8; -update noar ti set v0='VQFLD8QM79CJWYS' where id=8; -update noar tt set b2='U71T03E3B7RY' where id=8; -update noar ti set b2='U71T03E3B7RY' where id=8; -update noar tt set v0='040Z9WA6YSCGWQ9B5W4NU423DTFI' where id=9; -update noar ti set v0='040Z9WA6YSCGWQ9B5W4NU423DTFI' where id=9; -update noar tt set b0='7S5ZH62ONHLKBLLQM6J9ME9PA2EP' where id=9; -update noar ti set b0='7S5ZH62ONHLKBLLQM6J9ME9PA2EP' where id=9; -update noar tt set v0='EPH88UO2JBO4A45I1MH7U9LLQT' where id=9; -update noar ti set v0='EPH88UO2JBO4A45I1MH7U9LLQT' where id=9; -update noar tt set b1='KBVAOHS4TOMRVITUY9PFOU9HHF' where id=9; -update noar ti set b1='KBVAOHS4TOMRVITUY9PFOU9HHF' where id=9; -update noar tt set v0='0JGT7D8SMB9C3EIG54GE57U12' where id=9; -update noar ti set v0='0JGT7D8SMB9C3EIG54GE57U12' where id=9; -update noar tt set b2='2Y57' where id=9; -update noar ti set b2='2Y57' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 tinyblob null, - b1 blob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='BROUDSR' where id=1; -update noar ti set v0='BROUDSR' where id=1; -update noar tt set b0='RIX5UPSX8W3TD609MDRNEN' where id=1; -update noar ti set b0='RIX5UPSX8W3TD609MDRNEN' where id=1; -update noar tt set v0='FA2DJ12YMS4AGIP0AP38FZ4OG' where id=1; -update noar ti set v0='FA2DJ12YMS4AGIP0AP38FZ4OG' where id=1; -update noar tt set b1='MF3RMRFVZ1DL9FGW2IPNCF' where id=1; -update noar ti set b1='MF3RMRFVZ1DL9FGW2IPNCF' where id=1; -update noar tt set v0='2FGI' where id=1; -update noar ti set v0='2FGI' where id=1; -update noar tt set b2='DUJD9TNRDDT7IRA5SG429RDYRKPF7YYS' where id=1; -update noar ti set b2='DUJD9TNRDDT7IRA5SG429RDYRKPF7YYS' where id=1; -update noar tt set v0='KZA3SVRJMGZ' where id=2; -update noar ti set v0='KZA3SVRJMGZ' where id=2; -update noar tt set b0='BDM6QA64CL' where id=2; -update noar ti set b0='BDM6QA64CL' where id=2; -update noar tt set v0='KJDHM84OLBFC8HEV0U0' where id=2; -update noar ti set v0='KJDHM84OLBFC8HEV0U0' where id=2; -update noar tt set b1='G1SL9DX1N3O0CHC5I' where id=2; -update noar ti set b1='G1SL9DX1N3O0CHC5I' where id=2; -update noar tt set v0='1740XYPAI2DR1C' where id=2; -update noar ti set v0='1740XYPAI2DR1C' where id=2; -update noar tt set b2='UU' where id=2; -update noar ti set b2='UU' where id=2; -update noar tt set v0='HSHCU568NJ4QCQC9HDIU236FWGWW' where id=3; -update noar ti set v0='HSHCU568NJ4QCQC9HDIU236FWGWW' where id=3; -update noar tt set b0='4WPHC740' where id=3; -update noar ti set b0='4WPHC740' where id=3; -update noar tt set v0='SG33S788P0HN1B3AQX6' where id=3; -update noar ti set v0='SG33S788P0HN1B3AQX6' where id=3; -update noar tt set b1='44SHY2BBA9BLFRYF1FKKA5TE' where id=3; -update noar ti set b1='44SHY2BBA9BLFRYF1FKKA5TE' where id=3; -update noar tt set v0='ITFEBA8WACVKR67GS5QQ0OTQBAHB' where id=3; -update noar ti set v0='ITFEBA8WACVKR67GS5QQ0OTQBAHB' where id=3; -update noar tt set b2='YA4KQWU4AFP6SIO8' where id=3; -update noar ti set b2='YA4KQWU4AFP6SIO8' where id=3; -update noar tt set v0='BQ7W9X' where id=4; -update noar ti set v0='BQ7W9X' where id=4; -update noar tt set b0='QFUTQUZZF71D5J' where id=4; -update noar ti set b0='QFUTQUZZF71D5J' where id=4; -update noar tt set v0='2NPYTD9N3OJPUBJHSRH4RWMBOWQFT2P' where id=4; -update noar ti set v0='2NPYTD9N3OJPUBJHSRH4RWMBOWQFT2P' where id=4; -update noar tt set b1='1L98HMNCNYU' where id=4; -update noar ti set b1='1L98HMNCNYU' where id=4; -update noar tt set v0='6QIPIGAAFURBQ7DCUFBKHE7FTUEQWMB' where id=4; -update noar ti set v0='6QIPIGAAFURBQ7DCUFBKHE7FTUEQWMB' where id=4; -update noar tt set b2='60PQQJWWA9AZ' where id=4; -update noar ti set b2='60PQQJWWA9AZ' where id=4; -update noar tt set v0='WWQCW66A' where id=5; -update noar ti set v0='WWQCW66A' where id=5; -update noar tt set b0='M1MY4PN8NFJP' where id=5; -update noar ti set b0='M1MY4PN8NFJP' where id=5; -update noar tt set v0='DHTNK6F7SEKJVX0SIWCPGWA77IAQKY2U' where id=5; -update noar ti set v0='DHTNK6F7SEKJVX0SIWCPGWA77IAQKY2U' where id=5; -update noar tt set b1='B' where id=5; -update noar ti set b1='B' where id=5; -update noar tt set v0='6BYP' where id=5; -update noar ti set v0='6BYP' where id=5; -update noar tt set b2='HICT9Z5K4E' where id=5; -update noar ti set b2='HICT9Z5K4E' where id=5; -update noar tt set v0='F' where id=6; -update noar ti set v0='F' where id=6; -update noar tt set b0='MQZO2RFT36J' where id=6; -update noar ti set b0='MQZO2RFT36J' where id=6; -update noar tt set v0='ABFV2ZBHW67QVLBTGQMS662N2X' where id=6; -update noar ti set v0='ABFV2ZBHW67QVLBTGQMS662N2X' where id=6; -update noar tt set b1='7BKQ3B8NSXP3DVP94W67' where id=6; -update noar ti set b1='7BKQ3B8NSXP3DVP94W67' where id=6; -update noar tt set v0='4VSCO3SE9ENG1RHBJCDVHFVOEGJLX0' where id=6; -update noar ti set v0='4VSCO3SE9ENG1RHBJCDVHFVOEGJLX0' where id=6; -update noar tt set b2='9LFYQYL80G82XGFQ' where id=6; -update noar ti set b2='9LFYQYL80G82XGFQ' where id=6; -update noar tt set v0='OBREEN9N8JK5PF4TFS27FOI' where id=7; -update noar ti set v0='OBREEN9N8JK5PF4TFS27FOI' where id=7; -update noar tt set b0='WBJPALYRNREZ1DG97W22LW3YNPZ' where id=7; -update noar ti set b0='WBJPALYRNREZ1DG97W22LW3YNPZ' where id=7; -update noar tt set v0='G30MQH1Z3NTR7XBKHF' where id=7; -update noar ti set v0='G30MQH1Z3NTR7XBKHF' where id=7; -update noar tt set b1='0' where id=7; -update noar ti set b1='0' where id=7; -update noar tt set v0='JE7YZ' where id=7; -update noar ti set v0='JE7YZ' where id=7; -update noar tt set b2='KZK' where id=7; -update noar ti set b2='KZK' where id=7; -update noar tt set v0='W16ESY' where id=8; -update noar ti set v0='W16ESY' where id=8; -update noar tt set b0='2KHZO6WI' where id=8; -update noar ti set b0='2KHZO6WI' where id=8; -update noar tt set v0='0CPXCSLBIS5K522R' where id=8; -update noar ti set v0='0CPXCSLBIS5K522R' where id=8; -update noar tt set b1='A58CI6K4NQ7FQAPKWE9LG8OO' where id=8; -update noar ti set b1='A58CI6K4NQ7FQAPKWE9LG8OO' where id=8; -update noar tt set v0='BZRNYKOYM83Y93UCTAR1' where id=8; -update noar ti set v0='BZRNYKOYM83Y93UCTAR1' where id=8; -update noar tt set b2='JC2R1Z090XG8TBIPREB8RVM0LCGW' where id=8; -update noar ti set b2='JC2R1Z090XG8TBIPREB8RVM0LCGW' where id=8; -update noar tt set v0='1BS' where id=9; -update noar ti set v0='1BS' where id=9; -update noar tt set b0='3KLCZHEJFGRE1RWD27IFY0' where id=9; -update noar ti set b0='3KLCZHEJFGRE1RWD27IFY0' where id=9; -update noar tt set v0='IIPL2GQ7RWMNSAAZM2EBN9LWMHY7EXVE' where id=9; -update noar ti set v0='IIPL2GQ7RWMNSAAZM2EBN9LWMHY7EXVE' where id=9; -update noar tt set b1='OSRXH' where id=9; -update noar ti set b1='OSRXH' where id=9; -update noar tt set v0='MOJUUCMQUO0' where id=9; -update noar ti set v0='MOJUUCMQUO0' where id=9; -update noar tt set b2='EFKIQ6TG9RBD1N0IRU5QFJS7' where id=9; -update noar ti set b2='EFKIQ6TG9RBD1N0IRU5QFJS7' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 tinyblob null, - b1 blob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='SRYJIKT9UMDUUVMJWKG' where id=1; -update noar ti set v0='SRYJIKT9UMDUUVMJWKG' where id=1; -update noar tt set b0='I6IK9FCUHYKXOM' where id=1; -update noar ti set b0='I6IK9FCUHYKXOM' where id=1; -update noar tt set v0='HUV9FWP3J26VL' where id=1; -update noar ti set v0='HUV9FWP3J26VL' where id=1; -update noar tt set b1='3WOW43V1QDPD6ZJ' where id=1; -update noar ti set b1='3WOW43V1QDPD6ZJ' where id=1; -update noar tt set v0='3J2NLWHDFJE0EH8ZAXD2U1827USBPIV' where id=1; -update noar ti set v0='3J2NLWHDFJE0EH8ZAXD2U1827USBPIV' where id=1; -update noar tt set b2='Y497E01' where id=1; -update noar ti set b2='Y497E01' where id=1; -update noar tt set v0='H1JY' where id=2; -update noar ti set v0='H1JY' where id=2; -update noar tt set b0='YI35EOFSQB7EZ7CRW7S9QI' where id=2; -update noar ti set b0='YI35EOFSQB7EZ7CRW7S9QI' where id=2; -update noar tt set v0='7LKGN6KR7MLI3XZVXA3TFYM' where id=2; -update noar ti set v0='7LKGN6KR7MLI3XZVXA3TFYM' where id=2; -update noar tt set b1='BE2S48NUFB7XPK9OUQSVE41PAZN0W' where id=2; -update noar ti set b1='BE2S48NUFB7XPK9OUQSVE41PAZN0W' where id=2; -update noar tt set v0='TAV8CKC1CEXWQF6G5R0QJ93' where id=2; -update noar ti set v0='TAV8CKC1CEXWQF6G5R0QJ93' where id=2; -update noar tt set b2='0DQPMM' where id=2; -update noar ti set b2='0DQPMM' where id=2; -update noar tt set v0='NY7MI21QOVN15AYK6A64' where id=3; -update noar ti set v0='NY7MI21QOVN15AYK6A64' where id=3; -update noar tt set b0='NEEQHUG6JF4GM7MH6KH63WQU604A' where id=3; -update noar ti set b0='NEEQHUG6JF4GM7MH6KH63WQU604A' where id=3; -update noar tt set v0='6H6SHGNTN7' where id=3; -update noar ti set v0='6H6SHGNTN7' where id=3; -update noar tt set b1='KT0GOJI68W5RVC9OU25240RLD5WJBR2' where id=3; -update noar ti set b1='KT0GOJI68W5RVC9OU25240RLD5WJBR2' where id=3; -update noar tt set v0='F5TC01JDVCVGUZN1WSTEXZ' where id=3; -update noar ti set v0='F5TC01JDVCVGUZN1WSTEXZ' where id=3; -update noar tt set b2='XUKBAL579EL1D' where id=3; -update noar ti set b2='XUKBAL579EL1D' where id=3; -update noar tt set v0='0VJEEDOX1YX1C2IRBUD' where id=4; -update noar ti set v0='0VJEEDOX1YX1C2IRBUD' where id=4; -update noar tt set b0='CHG' where id=4; -update noar ti set b0='CHG' where id=4; -update noar tt set v0='CPBEFBD' where id=4; -update noar ti set v0='CPBEFBD' where id=4; -update noar tt set b1='4I6' where id=4; -update noar ti set b1='4I6' where id=4; -update noar tt set v0='6UAQ6M4IWS1ILD798ZRF29YI73ZGFP2P' where id=4; -update noar ti set v0='6UAQ6M4IWS1ILD798ZRF29YI73ZGFP2P' where id=4; -update noar tt set b2='7RZBWU77YZSE' where id=4; -update noar ti set b2='7RZBWU77YZSE' where id=4; -update noar tt set v0='IHCY' where id=5; -update noar ti set v0='IHCY' where id=5; -update noar tt set b0='NF7MX9803ULIJCVUTSVGHDX6DGY0HCA7' where id=5; -update noar ti set b0='NF7MX9803ULIJCVUTSVGHDX6DGY0HCA7' where id=5; -update noar tt set v0='9HW38U6NN7' where id=5; -update noar ti set v0='9HW38U6NN7' where id=5; -update noar tt set b1='W5QHTB383UTHMHTA51STZFE' where id=5; -update noar ti set b1='W5QHTB383UTHMHTA51STZFE' where id=5; -update noar tt set v0='6H662CU5AK0ZVSLO91' where id=5; -update noar ti set v0='6H662CU5AK0ZVSLO91' where id=5; -update noar tt set b2='R' where id=5; -update noar ti set b2='R' where id=5; -update noar tt set v0='NIE1Y2RAXOXDF53KQE68GDYJ6QSP' where id=6; -update noar ti set v0='NIE1Y2RAXOXDF53KQE68GDYJ6QSP' where id=6; -update noar tt set b0='1HJIHCTB9UQ7SP77OO1GCB0XGZ' where id=6; -update noar ti set b0='1HJIHCTB9UQ7SP77OO1GCB0XGZ' where id=6; -update noar tt set v0='0' where id=6; -update noar ti set v0='0' where id=6; -update noar tt set b1='E5' where id=6; -update noar ti set b1='E5' where id=6; -update noar tt set v0='K5' where id=6; -update noar ti set v0='K5' where id=6; -update noar tt set b2='JDWGFIUQ58ZFW619J5V4N63' where id=6; -update noar ti set b2='JDWGFIUQ58ZFW619J5V4N63' where id=6; -update noar tt set v0='B486QLU' where id=7; -update noar ti set v0='B486QLU' where id=7; -update noar tt set b0='BYGMXZ2AJ55VN0DL8HHNGYNXAEAA7Z9' where id=7; -update noar ti set b0='BYGMXZ2AJ55VN0DL8HHNGYNXAEAA7Z9' where id=7; -update noar tt set v0='PF' where id=7; -update noar ti set v0='PF' where id=7; -update noar tt set b1='B384EWQEFMAH7SIHFGK98YQ3YY6CX7EA' where id=7; -update noar ti set b1='B384EWQEFMAH7SIHFGK98YQ3YY6CX7EA' where id=7; -update noar tt set v0='H5GZVSYQAXU24' where id=7; -update noar ti set v0='H5GZVSYQAXU24' where id=7; -update noar tt set b2='LLOXPNDN3SFLP29YOML' where id=7; -update noar ti set b2='LLOXPNDN3SFLP29YOML' where id=7; -update noar tt set v0='I5D7YUMCCM6B' where id=8; -update noar ti set v0='I5D7YUMCCM6B' where id=8; -update noar tt set b0='C5SM3TMLLRRSHROTJ' where id=8; -update noar ti set b0='C5SM3TMLLRRSHROTJ' where id=8; -update noar tt set v0='XSEOI' where id=8; -update noar ti set v0='XSEOI' where id=8; -update noar tt set b1='VTQ' where id=8; -update noar ti set b1='VTQ' where id=8; -update noar tt set v0='GQ23CUQG4O' where id=8; -update noar ti set v0='GQ23CUQG4O' where id=8; -update noar tt set b2='RGTFQ1BLW25X72BHAUHHD8' where id=8; -update noar ti set b2='RGTFQ1BLW25X72BHAUHHD8' where id=8; -update noar tt set v0='K7828F3XRT6XEE4PWP9J2T' where id=9; -update noar ti set v0='K7828F3XRT6XEE4PWP9J2T' where id=9; -update noar tt set b0='KDVF7O1W6S6JSRVV1EE' where id=9; -update noar ti set b0='KDVF7O1W6S6JSRVV1EE' where id=9; -update noar tt set v0='RS84B7KKF' where id=9; -update noar ti set v0='RS84B7KKF' where id=9; -update noar tt set b1='4V1QC9TC1O7J7C' where id=9; -update noar ti set b1='4V1QC9TC1O7J7C' where id=9; -update noar tt set v0='2IUL5W04RM34NU6M9QGQSX1' where id=9; -update noar ti set v0='2IUL5W04RM34NU6M9QGQSX1' where id=9; -update noar tt set b2='0RYE2TOC' where id=9; -update noar ti set b2='0RYE2TOC' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 tinyblob not null, - b1 blob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='1M3BDN2LYVWHKCQ75NL' where id=1; -update noar ti set v0='1M3BDN2LYVWHKCQ75NL' where id=1; -update noar tt set b0='WIP8ZSUE5TWWDFRZ5PRGQ2' where id=1; -update noar ti set b0='WIP8ZSUE5TWWDFRZ5PRGQ2' where id=1; -update noar tt set v0='IVBVLGZYOJ0KOLDC1EJ2' where id=1; -update noar ti set v0='IVBVLGZYOJ0KOLDC1EJ2' where id=1; -update noar tt set b1='B2UVWA7PX2U2Y7I8XW5U' where id=1; -update noar ti set b1='B2UVWA7PX2U2Y7I8XW5U' where id=1; -update noar tt set v0='EYITE2Z9PS2' where id=1; -update noar ti set v0='EYITE2Z9PS2' where id=1; -update noar tt set b2='GIJ6XAP' where id=1; -update noar ti set b2='GIJ6XAP' where id=1; -update noar tt set v0='L3N86NTCWANSI9YAV' where id=2; -update noar ti set v0='L3N86NTCWANSI9YAV' where id=2; -update noar tt set b0='G' where id=2; -update noar ti set b0='G' where id=2; -update noar tt set v0='P7IGSKL6V3E4PEE9FLJRBDLJZ' where id=2; -update noar ti set v0='P7IGSKL6V3E4PEE9FLJRBDLJZ' where id=2; -update noar tt set b1='UKRP' where id=2; -update noar ti set b1='UKRP' where id=2; -update noar tt set v0='VSPIM7XWS63UKL78BZE09C2T' where id=2; -update noar ti set v0='VSPIM7XWS63UKL78BZE09C2T' where id=2; -update noar tt set b2='MBMPE7OE18X3YOF19' where id=2; -update noar ti set b2='MBMPE7OE18X3YOF19' where id=2; -update noar tt set v0='N0MTRRTI6GQVUXQ8' where id=3; -update noar ti set v0='N0MTRRTI6GQVUXQ8' where id=3; -update noar tt set b0='DLWFSYJEJ' where id=3; -update noar ti set b0='DLWFSYJEJ' where id=3; -update noar tt set v0='LFN' where id=3; -update noar ti set v0='LFN' where id=3; -update noar tt set b1='9E' where id=3; -update noar ti set b1='9E' where id=3; -update noar tt set v0='3V9YIBI3NSG14PLAUT8AF9' where id=3; -update noar ti set v0='3V9YIBI3NSG14PLAUT8AF9' where id=3; -update noar tt set b2='GFCL5OSNEESH' where id=3; -update noar ti set b2='GFCL5OSNEESH' where id=3; -update noar tt set v0='JL' where id=4; -update noar ti set v0='JL' where id=4; -update noar tt set b0='QOXK7Q0RHTN6B9LI' where id=4; -update noar ti set b0='QOXK7Q0RHTN6B9LI' where id=4; -update noar tt set v0='6HRO' where id=4; -update noar ti set v0='6HRO' where id=4; -update noar tt set b1='99VDLOCABCSKGDIZV2FAH6JP23YI' where id=4; -update noar ti set b1='99VDLOCABCSKGDIZV2FAH6JP23YI' where id=4; -update noar tt set v0='XA62B38YU0A0E' where id=4; -update noar ti set v0='XA62B38YU0A0E' where id=4; -update noar tt set b2='R6NPUAIAMBBVO1YGHA' where id=4; -update noar ti set b2='R6NPUAIAMBBVO1YGHA' where id=4; -update noar tt set v0='MJU' where id=5; -update noar ti set v0='MJU' where id=5; -update noar tt set b0='9BGE34Y6HBP' where id=5; -update noar ti set b0='9BGE34Y6HBP' where id=5; -update noar tt set v0='643ONEEBMJ513YTII3AYC6' where id=5; -update noar ti set v0='643ONEEBMJ513YTII3AYC6' where id=5; -update noar tt set b1='KR5OW82C9TJZ' where id=5; -update noar ti set b1='KR5OW82C9TJZ' where id=5; -update noar tt set v0='TKQJ2WHKB32H243G' where id=5; -update noar ti set v0='TKQJ2WHKB32H243G' where id=5; -update noar tt set b2='JOZZLIU466' where id=5; -update noar ti set b2='JOZZLIU466' where id=5; -update noar tt set v0='MXUCG5TGOAZPLNJOQ6DR2D' where id=6; -update noar ti set v0='MXUCG5TGOAZPLNJOQ6DR2D' where id=6; -update noar tt set b0='6ZSWB' where id=6; -update noar ti set b0='6ZSWB' where id=6; -update noar tt set v0='5' where id=6; -update noar ti set v0='5' where id=6; -update noar tt set b1='7YDUL' where id=6; -update noar ti set b1='7YDUL' where id=6; -update noar tt set v0='ATNVMUR03DOQWJYH2R0GKEQ5BAMDL' where id=6; -update noar ti set v0='ATNVMUR03DOQWJYH2R0GKEQ5BAMDL' where id=6; -update noar tt set b2='SLYHPNHJGA5C4' where id=6; -update noar ti set b2='SLYHPNHJGA5C4' where id=6; -update noar tt set v0='3XK9Y53' where id=7; -update noar ti set v0='3XK9Y53' where id=7; -update noar tt set b0='0ERE' where id=7; -update noar ti set b0='0ERE' where id=7; -update noar tt set v0='HRA20YBAAOA9AAO9BV' where id=7; -update noar ti set v0='HRA20YBAAOA9AAO9BV' where id=7; -update noar tt set b1='ECZBAA43XYZM52IU8W02KTHQMSJDLJB0' where id=7; -update noar ti set b1='ECZBAA43XYZM52IU8W02KTHQMSJDLJB0' where id=7; -update noar tt set v0='US8W3DHMGUB5' where id=7; -update noar ti set v0='US8W3DHMGUB5' where id=7; -update noar tt set b2='U1W12ER0A2C27' where id=7; -update noar ti set b2='U1W12ER0A2C27' where id=7; -update noar tt set v0='ZKOSAEBJLNUI0ASUBF2KMSVFT7D' where id=8; -update noar ti set v0='ZKOSAEBJLNUI0ASUBF2KMSVFT7D' where id=8; -update noar tt set b0='8MOJRLW5ZS8' where id=8; -update noar ti set b0='8MOJRLW5ZS8' where id=8; -update noar tt set v0='YLZ67TXQD5KM3TMFBMWTMO9HT05Z3GO' where id=8; -update noar ti set v0='YLZ67TXQD5KM3TMFBMWTMO9HT05Z3GO' where id=8; -update noar tt set b1='QYPWFX16YXC6UDQL5YD6AS204Q15' where id=8; -update noar ti set b1='QYPWFX16YXC6UDQL5YD6AS204Q15' where id=8; -update noar tt set v0='FY07OGWCSW' where id=8; -update noar ti set v0='FY07OGWCSW' where id=8; -update noar tt set b2='E69NUAPLPQYMZ3' where id=8; -update noar ti set b2='E69NUAPLPQYMZ3' where id=8; -update noar tt set v0='4ZUMNJ9QV6NN9H6JJVI' where id=9; -update noar ti set v0='4ZUMNJ9QV6NN9H6JJVI' where id=9; -update noar tt set b0='4' where id=9; -update noar ti set b0='4' where id=9; -update noar tt set v0='2UCK' where id=9; -update noar ti set v0='2UCK' where id=9; -update noar tt set b1='7B5YOYFVS9F5M' where id=9; -update noar ti set b1='7B5YOYFVS9F5M' where id=9; -update noar tt set v0='9CJWUGM69HNBDGLKO38TE5L12ADO' where id=9; -update noar ti set v0='9CJWUGM69HNBDGLKO38TE5L12ADO' where id=9; -update noar tt set b2='5E9QX8EC1OCFS9HNY2' where id=9; -update noar ti set b2='5E9QX8EC1OCFS9HNY2' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 tinyblob not null, - b1 blob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='D16B' where id=1; -update noar ti set v0='D16B' where id=1; -update noar tt set b0='1GLRM' where id=1; -update noar ti set b0='1GLRM' where id=1; -update noar tt set v0='BWI' where id=1; -update noar ti set v0='BWI' where id=1; -update noar tt set b1='93XR68CG95P1FQ1AHRBWGQTBLZTBDCOZ' where id=1; -update noar ti set b1='93XR68CG95P1FQ1AHRBWGQTBLZTBDCOZ' where id=1; -update noar tt set v0='51CTWC3F4GJES8K4WAAZRFLR7C' where id=1; -update noar ti set v0='51CTWC3F4GJES8K4WAAZRFLR7C' where id=1; -update noar tt set b2='6Q050V' where id=1; -update noar ti set b2='6Q050V' where id=1; -update noar tt set v0='5KQRMV9R310WGQP8XOL' where id=2; -update noar ti set v0='5KQRMV9R310WGQP8XOL' where id=2; -update noar tt set b0='3X1HAD54DRB4MPS' where id=2; -update noar ti set b0='3X1HAD54DRB4MPS' where id=2; -update noar tt set v0='ID3PCB7AMA47VPDJKRCB87J1JVH4XZW' where id=2; -update noar ti set v0='ID3PCB7AMA47VPDJKRCB87J1JVH4XZW' where id=2; -update noar tt set b1='DRCLLAJP082OGQOFP' where id=2; -update noar ti set b1='DRCLLAJP082OGQOFP' where id=2; -update noar tt set v0='TIZ09' where id=2; -update noar ti set v0='TIZ09' where id=2; -update noar tt set b2='FITZRU85OZ3C' where id=2; -update noar ti set b2='FITZRU85OZ3C' where id=2; -update noar tt set v0='OMX9HNFQMFE0XTB' where id=3; -update noar ti set v0='OMX9HNFQMFE0XTB' where id=3; -update noar tt set b0='C2TINHJMIKHWBMK9PCPU7XS2O' where id=3; -update noar ti set b0='C2TINHJMIKHWBMK9PCPU7XS2O' where id=3; -update noar tt set v0='Z365ZS7F30D0IGO7WX81LD8RFHVT' where id=3; -update noar ti set v0='Z365ZS7F30D0IGO7WX81LD8RFHVT' where id=3; -update noar tt set b1='Z5W2JOI' where id=3; -update noar ti set b1='Z5W2JOI' where id=3; -update noar tt set v0='NZH2S8YRKZ29OBRX62M0HLTV7MMPW7' where id=3; -update noar ti set v0='NZH2S8YRKZ29OBRX62M0HLTV7MMPW7' where id=3; -update noar tt set b2='B104PRWOJMAPGY1VRDAOZC6GF5QM1W' where id=3; -update noar ti set b2='B104PRWOJMAPGY1VRDAOZC6GF5QM1W' where id=3; -update noar tt set v0='5V75N3V' where id=4; -update noar ti set v0='5V75N3V' where id=4; -update noar tt set b0='OUZT2ZB4TRH8KAE4LLPHI1' where id=4; -update noar ti set b0='OUZT2ZB4TRH8KAE4LLPHI1' where id=4; -update noar tt set v0='RDWE9JTRLPEHSMD1X7WN3' where id=4; -update noar ti set v0='RDWE9JTRLPEHSMD1X7WN3' where id=4; -update noar tt set b1='T5WR21RGSA7GUO7X' where id=4; -update noar ti set b1='T5WR21RGSA7GUO7X' where id=4; -update noar tt set v0='8FV' where id=4; -update noar ti set v0='8FV' where id=4; -update noar tt set b2='AK7P964L' where id=4; -update noar ti set b2='AK7P964L' where id=4; -update noar tt set v0='I4TT8488NY40' where id=5; -update noar ti set v0='I4TT8488NY40' where id=5; -update noar tt set b0='B057L4QV' where id=5; -update noar ti set b0='B057L4QV' where id=5; -update noar tt set v0='9ZCQXIJUON2TLU394' where id=5; -update noar ti set v0='9ZCQXIJUON2TLU394' where id=5; -update noar tt set b1='VKBNM' where id=5; -update noar ti set b1='VKBNM' where id=5; -update noar tt set v0='FW0E5N2LVX703UIAI44XY' where id=5; -update noar ti set v0='FW0E5N2LVX703UIAI44XY' where id=5; -update noar tt set b2='6GD5MNMXP4CSJEMVOP7IPUFD' where id=5; -update noar ti set b2='6GD5MNMXP4CSJEMVOP7IPUFD' where id=5; -update noar tt set v0='Y' where id=6; -update noar ti set v0='Y' where id=6; -update noar tt set b0='N778ONW15IE4' where id=6; -update noar ti set b0='N778ONW15IE4' where id=6; -update noar tt set v0='KDWKCNG464TOLSF46N9' where id=6; -update noar ti set v0='KDWKCNG464TOLSF46N9' where id=6; -update noar tt set b1='V7ADAMKHGLH0CXKWEVMCA9W' where id=6; -update noar ti set b1='V7ADAMKHGLH0CXKWEVMCA9W' where id=6; -update noar tt set v0='1UVE4PLGLR7V2OTFW7FB8' where id=6; -update noar ti set v0='1UVE4PLGLR7V2OTFW7FB8' where id=6; -update noar tt set b2='0H4ZY8F62LTM6V1093P2EEVGAY036A0' where id=6; -update noar ti set b2='0H4ZY8F62LTM6V1093P2EEVGAY036A0' where id=6; -update noar tt set v0='FBRSFD24Q603JJJQJA0U6MJ1U3Y' where id=7; -update noar ti set v0='FBRSFD24Q603JJJQJA0U6MJ1U3Y' where id=7; -update noar tt set b0='Z7KPMID44AT' where id=7; -update noar ti set b0='Z7KPMID44AT' where id=7; -update noar tt set v0='715A4JQ0HMSC7HOY0' where id=7; -update noar ti set v0='715A4JQ0HMSC7HOY0' where id=7; -update noar tt set b1='3C7UVSJNTN' where id=7; -update noar ti set b1='3C7UVSJNTN' where id=7; -update noar tt set v0='1S5ZS' where id=7; -update noar ti set v0='1S5ZS' where id=7; -update noar tt set b2='5X45ZRH6V8UQFK0767S0IRPTVBT62RE0' where id=7; -update noar ti set b2='5X45ZRH6V8UQFK0767S0IRPTVBT62RE0' where id=7; -update noar tt set v0='MUIHBB9LOF' where id=8; -update noar ti set v0='MUIHBB9LOF' where id=8; -update noar tt set b0='58Q8' where id=8; -update noar ti set b0='58Q8' where id=8; -update noar tt set v0='0TX' where id=8; -update noar ti set v0='0TX' where id=8; -update noar tt set b1='OIY8EE3' where id=8; -update noar ti set b1='OIY8EE3' where id=8; -update noar tt set v0='CFKBOCQP9O' where id=8; -update noar ti set v0='CFKBOCQP9O' where id=8; -update noar tt set b2='W0WCO3LKT0D8OHVX5' where id=8; -update noar ti set b2='W0WCO3LKT0D8OHVX5' where id=8; -update noar tt set v0='VH8XQZ' where id=9; -update noar ti set v0='VH8XQZ' where id=9; -update noar tt set b0='1BA3N' where id=9; -update noar ti set b0='1BA3N' where id=9; -update noar tt set v0='12YQQ23GYSM9M7T3SY0CAYCFQ5WJ4W' where id=9; -update noar ti set v0='12YQQ23GYSM9M7T3SY0CAYCFQ5WJ4W' where id=9; -update noar tt set b1='6TPTEJV2MA9AZ0K9JQ9KEKK9GK6' where id=9; -update noar ti set b1='6TPTEJV2MA9AZ0K9JQ9KEKK9GK6' where id=9; -update noar tt set v0='Q' where id=9; -update noar ti set v0='Q' where id=9; -update noar tt set b2='JUQP2VLQXK5M4DPBNZA71V023' where id=9; -update noar ti set b2='JUQP2VLQXK5M4DPBNZA71V023' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 tinyblob null, - b1 blob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='U50AJQ1JN1G0YH' where id=1; -update noar ti set v0='U50AJQ1JN1G0YH' where id=1; -update noar tt set b0='VAF3V1GU' where id=1; -update noar ti set b0='VAF3V1GU' where id=1; -update noar tt set v0='WJNS9B6981XFM1M1GF0XUI0' where id=1; -update noar ti set v0='WJNS9B6981XFM1M1GF0XUI0' where id=1; -update noar tt set b1='ZS5NQBM9YRUEMMGCSBFQYZS1T' where id=1; -update noar ti set b1='ZS5NQBM9YRUEMMGCSBFQYZS1T' where id=1; -update noar tt set v0='BX9VN7U7F4H1EU0CZ2VXLX36SMT' where id=1; -update noar ti set v0='BX9VN7U7F4H1EU0CZ2VXLX36SMT' where id=1; -update noar tt set b2='3G4CDC88E6435QRY' where id=1; -update noar ti set b2='3G4CDC88E6435QRY' where id=1; -update noar tt set v0='8J43KAUNM9' where id=2; -update noar ti set v0='8J43KAUNM9' where id=2; -update noar tt set b0='TH' where id=2; -update noar ti set b0='TH' where id=2; -update noar tt set v0='VS' where id=2; -update noar ti set v0='VS' where id=2; -update noar tt set b1='YOZ59SCEO8MVYNKIKJR' where id=2; -update noar ti set b1='YOZ59SCEO8MVYNKIKJR' where id=2; -update noar tt set v0='CMKKFCMT1K17U' where id=2; -update noar ti set v0='CMKKFCMT1K17U' where id=2; -update noar tt set b2='PYK0ACLSWCG22BKK9ITELHJ1' where id=2; -update noar ti set b2='PYK0ACLSWCG22BKK9ITELHJ1' where id=2; -update noar tt set v0='7QZUQ7SX6KTKPM6YLE31KVR3SLZRLOQ' where id=3; -update noar ti set v0='7QZUQ7SX6KTKPM6YLE31KVR3SLZRLOQ' where id=3; -update noar tt set b0='0OEV8YCO4T0HC8LKP47MY036MKEVES' where id=3; -update noar ti set b0='0OEV8YCO4T0HC8LKP47MY036MKEVES' where id=3; -update noar tt set v0='TDIPGQKTPH6CHWO4A5N4WNZ6UW' where id=3; -update noar ti set v0='TDIPGQKTPH6CHWO4A5N4WNZ6UW' where id=3; -update noar tt set b1='8PHCVSWXKSC8KL7PUOH' where id=3; -update noar ti set b1='8PHCVSWXKSC8KL7PUOH' where id=3; -update noar tt set v0='UOSA8ZTCO7684' where id=3; -update noar ti set v0='UOSA8ZTCO7684' where id=3; -update noar tt set b2='RGNKGWGGTXRNKA' where id=3; -update noar ti set b2='RGNKGWGGTXRNKA' where id=3; -update noar tt set v0='ABMW' where id=4; -update noar ti set v0='ABMW' where id=4; -update noar tt set b0='MAIY1I7W3YQA1QCKC3HUOPXQE02TQ6T' where id=4; -update noar ti set b0='MAIY1I7W3YQA1QCKC3HUOPXQE02TQ6T' where id=4; -update noar tt set v0='IHN7FTEI1D5M4JCTHNBY5GIDLHCLK5J9' where id=4; -update noar ti set v0='IHN7FTEI1D5M4JCTHNBY5GIDLHCLK5J9' where id=4; -update noar tt set b1='0PVBMVE' where id=4; -update noar ti set b1='0PVBMVE' where id=4; -update noar tt set v0='K' where id=4; -update noar ti set v0='K' where id=4; -update noar tt set b2='KA9J0D8SW7H4X6KMTG387N8EIG2Y' where id=4; -update noar ti set b2='KA9J0D8SW7H4X6KMTG387N8EIG2Y' where id=4; -update noar tt set v0='XECTDXBWT04EQJ8HQKXGGQ19NVIRDB' where id=5; -update noar ti set v0='XECTDXBWT04EQJ8HQKXGGQ19NVIRDB' where id=5; -update noar tt set b0='6K5XICS4' where id=5; -update noar ti set b0='6K5XICS4' where id=5; -update noar tt set v0='6WKS2DY0EPK3W' where id=5; -update noar ti set v0='6WKS2DY0EPK3W' where id=5; -update noar tt set b1='RD1PEV' where id=5; -update noar ti set b1='RD1PEV' where id=5; -update noar tt set v0='PSXIERURXWIWAJLZOHU7VSD' where id=5; -update noar ti set v0='PSXIERURXWIWAJLZOHU7VSD' where id=5; -update noar tt set b2='TX88HBADG4Y9N4FNKRQEB2' where id=5; -update noar ti set b2='TX88HBADG4Y9N4FNKRQEB2' where id=5; -update noar tt set v0='9UVEYD7AWTYQZOFBST08SJFWP2GD6J' where id=6; -update noar ti set v0='9UVEYD7AWTYQZOFBST08SJFWP2GD6J' where id=6; -update noar tt set b0='BQGUELQ0NJY0NCVTXTUNI3Q7ZLJUT' where id=6; -update noar ti set b0='BQGUELQ0NJY0NCVTXTUNI3Q7ZLJUT' where id=6; -update noar tt set v0='P4S5FGG0HC8BPUH6OE2FSI' where id=6; -update noar ti set v0='P4S5FGG0HC8BPUH6OE2FSI' where id=6; -update noar tt set b1='DB66VV0DE1Y3LPPP6JBNY1K' where id=6; -update noar ti set b1='DB66VV0DE1Y3LPPP6JBNY1K' where id=6; -update noar tt set v0='WPN' where id=6; -update noar ti set v0='WPN' where id=6; -update noar tt set b2='VHRHD6PZ3KO4M3Z' where id=6; -update noar ti set b2='VHRHD6PZ3KO4M3Z' where id=6; -update noar tt set v0='96AJTQZKM' where id=7; -update noar ti set v0='96AJTQZKM' where id=7; -update noar tt set b0='KH9K6' where id=7; -update noar ti set b0='KH9K6' where id=7; -update noar tt set v0='9EAE' where id=7; -update noar ti set v0='9EAE' where id=7; -update noar tt set b1='OP4NVCVKSFROYVOFM7GD0QJYKAVN3Y' where id=7; -update noar ti set b1='OP4NVCVKSFROYVOFM7GD0QJYKAVN3Y' where id=7; -update noar tt set v0='9ZANWI5' where id=7; -update noar ti set v0='9ZANWI5' where id=7; -update noar tt set b2='EMIAHLYA9R7OZ3KS8BDMAYMU22LY5Z' where id=7; -update noar ti set b2='EMIAHLYA9R7OZ3KS8BDMAYMU22LY5Z' where id=7; -update noar tt set v0='N92XHAMJE561R2Q0OJV2F95TSL58' where id=8; -update noar ti set v0='N92XHAMJE561R2Q0OJV2F95TSL58' where id=8; -update noar tt set b0='13K46DNSTTDOG' where id=8; -update noar ti set b0='13K46DNSTTDOG' where id=8; -update noar tt set v0='S18HGU8671HPALLH' where id=8; -update noar ti set v0='S18HGU8671HPALLH' where id=8; -update noar tt set b1='5TCFNGVDEQE71KW71YQUY6RFUGX' where id=8; -update noar ti set b1='5TCFNGVDEQE71KW71YQUY6RFUGX' where id=8; -update noar tt set v0='MR2EE98P9' where id=8; -update noar ti set v0='MR2EE98P9' where id=8; -update noar tt set b2='07JYA894MPURF4' where id=8; -update noar ti set b2='07JYA894MPURF4' where id=8; -update noar tt set v0='K67V75EW1A89BAB596N0X' where id=9; -update noar ti set v0='K67V75EW1A89BAB596N0X' where id=9; -update noar tt set b0='SY2QCCXKBEK2DT36U37J9MZUU' where id=9; -update noar ti set b0='SY2QCCXKBEK2DT36U37J9MZUU' where id=9; -update noar tt set v0='Q9HR' where id=9; -update noar ti set v0='Q9HR' where id=9; -update noar tt set b1='TB474GT9P915JA7' where id=9; -update noar ti set b1='TB474GT9P915JA7' where id=9; -update noar tt set v0='EIXA2H2E0XLCBJ3REOGVLSOCL2VYQGR' where id=9; -update noar ti set v0='EIXA2H2E0XLCBJ3REOGVLSOCL2VYQGR' where id=9; -update noar tt set b2='64MAF15KBC5Y8ZH236Q9KWRNL9Q' where id=9; -update noar ti set b2='64MAF15KBC5Y8ZH236Q9KWRNL9Q' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 tinyblob null, - b1 blob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='2I' where id=1; -update noar ti set v0='2I' where id=1; -update noar tt set b0='P1VI3KLF905KLGIKEXXXLI' where id=1; -update noar ti set b0='P1VI3KLF905KLGIKEXXXLI' where id=1; -update noar tt set v0='ZL66BQBQM17YN8NN' where id=1; -update noar ti set v0='ZL66BQBQM17YN8NN' where id=1; -update noar tt set b1='ZLNEVXTXK7OZJJ2NXOW75P20MA0AII' where id=1; -update noar ti set b1='ZLNEVXTXK7OZJJ2NXOW75P20MA0AII' where id=1; -update noar tt set v0='JYM' where id=1; -update noar ti set v0='JYM' where id=1; -update noar tt set b2='O7EZG' where id=1; -update noar ti set b2='O7EZG' where id=1; -update noar tt set v0='OJQX6UFC' where id=2; -update noar ti set v0='OJQX6UFC' where id=2; -update noar tt set b0='UA5Z9GE' where id=2; -update noar ti set b0='UA5Z9GE' where id=2; -update noar tt set v0='QKP63Y2BX56XFNX2T8WFHRTAQ' where id=2; -update noar ti set v0='QKP63Y2BX56XFNX2T8WFHRTAQ' where id=2; -update noar tt set b1='AZ92EZ1WD5462TBK4OJ3S5A4EMY20V' where id=2; -update noar ti set b1='AZ92EZ1WD5462TBK4OJ3S5A4EMY20V' where id=2; -update noar tt set v0='OFKREEXUWFEGP' where id=2; -update noar ti set v0='OFKREEXUWFEGP' where id=2; -update noar tt set b2='XGQ4D6WQ1U1N' where id=2; -update noar ti set b2='XGQ4D6WQ1U1N' where id=2; -update noar tt set v0='HB' where id=3; -update noar ti set v0='HB' where id=3; -update noar tt set b0='5NFEO3XO' where id=3; -update noar ti set b0='5NFEO3XO' where id=3; -update noar tt set v0='B3QNL6UGV5HTUJ4K7F9LDAF7RI57IMS' where id=3; -update noar ti set v0='B3QNL6UGV5HTUJ4K7F9LDAF7RI57IMS' where id=3; -update noar tt set b1='LB' where id=3; -update noar ti set b1='LB' where id=3; -update noar tt set v0='JNO3Q2YQLGP8XKMBULG' where id=3; -update noar ti set v0='JNO3Q2YQLGP8XKMBULG' where id=3; -update noar tt set b2='AS8IA3VPRLP4RRUQ73KA9499JQTU5IZ' where id=3; -update noar ti set b2='AS8IA3VPRLP4RRUQ73KA9499JQTU5IZ' where id=3; -update noar tt set v0='X0YQZQOCBTAVPPYD3ITSP19B6FGJZ4' where id=4; -update noar ti set v0='X0YQZQOCBTAVPPYD3ITSP19B6FGJZ4' where id=4; -update noar tt set b0='UO3BO1GU1' where id=4; -update noar ti set b0='UO3BO1GU1' where id=4; -update noar tt set v0='QT6NUID7WWRIPAKTKXI' where id=4; -update noar ti set v0='QT6NUID7WWRIPAKTKXI' where id=4; -update noar tt set b1='7OY2KLZUCP237I4FQC526E' where id=4; -update noar ti set b1='7OY2KLZUCP237I4FQC526E' where id=4; -update noar tt set v0='C8GU5JOE7M5FWUC2F' where id=4; -update noar ti set v0='C8GU5JOE7M5FWUC2F' where id=4; -update noar tt set b2='U824PWKGO1JY' where id=4; -update noar ti set b2='U824PWKGO1JY' where id=4; -update noar tt set v0='XL4GSK0MSY7FV' where id=5; -update noar ti set v0='XL4GSK0MSY7FV' where id=5; -update noar tt set b0='L48Q7HUKLKEWXDLILEVTOVRMCNYGKA' where id=5; -update noar ti set b0='L48Q7HUKLKEWXDLILEVTOVRMCNYGKA' where id=5; -update noar tt set v0='09YWQBVCZD4UBJE0J8' where id=5; -update noar ti set v0='09YWQBVCZD4UBJE0J8' where id=5; -update noar tt set b1='8DIWKYPD7E' where id=5; -update noar ti set b1='8DIWKYPD7E' where id=5; -update noar tt set v0='C3WXE4WDIUZY0XTPPDY42TOSIPP7QTS' where id=5; -update noar ti set v0='C3WXE4WDIUZY0XTPPDY42TOSIPP7QTS' where id=5; -update noar tt set b2='TDF3LPX43QS' where id=5; -update noar ti set b2='TDF3LPX43QS' where id=5; -update noar tt set v0='83HIYUSKT5XZ9AJH3U0' where id=6; -update noar ti set v0='83HIYUSKT5XZ9AJH3U0' where id=6; -update noar tt set b0='EQ5BGX62ZD4I' where id=6; -update noar ti set b0='EQ5BGX62ZD4I' where id=6; -update noar tt set v0='0P65' where id=6; -update noar ti set v0='0P65' where id=6; -update noar tt set b1='OLQUJG4V840WOZ5KQDDT2Z' where id=6; -update noar ti set b1='OLQUJG4V840WOZ5KQDDT2Z' where id=6; -update noar tt set v0='JKY8DKPSU5ZCSE4RZY7UWTECQROJSV' where id=6; -update noar ti set v0='JKY8DKPSU5ZCSE4RZY7UWTECQROJSV' where id=6; -update noar tt set b2='HWR99ZT6212ZD03XNDJ0HE6PBJ2XA' where id=6; -update noar ti set b2='HWR99ZT6212ZD03XNDJ0HE6PBJ2XA' where id=6; -update noar tt set v0='W9P1NM' where id=7; -update noar ti set v0='W9P1NM' where id=7; -update noar tt set b0='1DR7JOE0K3I6LHHPV6YTAOK39YN6' where id=7; -update noar ti set b0='1DR7JOE0K3I6LHHPV6YTAOK39YN6' where id=7; -update noar tt set v0='I6X4RWB7KNGMX' where id=7; -update noar ti set v0='I6X4RWB7KNGMX' where id=7; -update noar tt set b1='2M1L5Q6IE6RKXXCARG3G' where id=7; -update noar ti set b1='2M1L5Q6IE6RKXXCARG3G' where id=7; -update noar tt set v0='HB89KGI' where id=7; -update noar ti set v0='HB89KGI' where id=7; -update noar tt set b2='E3F4X52INZYBPN' where id=7; -update noar ti set b2='E3F4X52INZYBPN' where id=7; -update noar tt set v0='94Q79ZPQ' where id=8; -update noar ti set v0='94Q79ZPQ' where id=8; -update noar tt set b0='MF2NV06' where id=8; -update noar ti set b0='MF2NV06' where id=8; -update noar tt set v0='WHC1TTOU9WB5G7V1L' where id=8; -update noar ti set v0='WHC1TTOU9WB5G7V1L' where id=8; -update noar tt set b1='UOFP6Q' where id=8; -update noar ti set b1='UOFP6Q' where id=8; -update noar tt set v0='TFAA7CBYCM' where id=8; -update noar ti set v0='TFAA7CBYCM' where id=8; -update noar tt set b2='UBXAVUGQZ3K1R6O42YOTDPAKB' where id=8; -update noar ti set b2='UBXAVUGQZ3K1R6O42YOTDPAKB' where id=8; -update noar tt set v0='NP0R2D4L39UZ5KHB3FGNKJJW8X0MKD' where id=9; -update noar ti set v0='NP0R2D4L39UZ5KHB3FGNKJJW8X0MKD' where id=9; -update noar tt set b0='W54TD8RFZJPL0CH' where id=9; -update noar ti set b0='W54TD8RFZJPL0CH' where id=9; -update noar tt set v0='HHP7FFFJLG6XAW' where id=9; -update noar ti set v0='HHP7FFFJLG6XAW' where id=9; -update noar tt set b1='QVM199Y8KLB' where id=9; -update noar ti set b1='QVM199Y8KLB' where id=9; -update noar tt set v0='BVLR61' where id=9; -update noar ti set v0='BVLR61' where id=9; -update noar tt set b2='4F4EMXB23ZMBZ' where id=9; -update noar ti set b2='4F4EMXB23ZMBZ' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 tinyblob not null, - b1 blob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='JGZ22PUX22RVYWUQ90NI0W' where id=1; -update noar ti set v0='JGZ22PUX22RVYWUQ90NI0W' where id=1; -update noar tt set b0='Y6Y491PDVJKINUAGF4HXB1' where id=1; -update noar ti set b0='Y6Y491PDVJKINUAGF4HXB1' where id=1; -update noar tt set v0='3MEOHP6BVGLTOWGWX' where id=1; -update noar ti set v0='3MEOHP6BVGLTOWGWX' where id=1; -update noar tt set b1='6IFIC' where id=1; -update noar ti set b1='6IFIC' where id=1; -update noar tt set v0='0QFO1J' where id=1; -update noar ti set v0='0QFO1J' where id=1; -update noar tt set b2='GP7V8FP358G5S6ZE123UZMMUT50V' where id=1; -update noar ti set b2='GP7V8FP358G5S6ZE123UZMMUT50V' where id=1; -update noar tt set v0='HR8' where id=2; -update noar ti set v0='HR8' where id=2; -update noar tt set b0='SGUB2' where id=2; -update noar ti set b0='SGUB2' where id=2; -update noar tt set v0='EQ' where id=2; -update noar ti set v0='EQ' where id=2; -update noar tt set b1='9AB7D4IVRSRRSZ99' where id=2; -update noar ti set b1='9AB7D4IVRSRRSZ99' where id=2; -update noar tt set v0='YIYKIYQ3NPQTDXT4SKP1EE4' where id=2; -update noar ti set v0='YIYKIYQ3NPQTDXT4SKP1EE4' where id=2; -update noar tt set b2='9BO4H8QVM64IMSIWATXXI3D5' where id=2; -update noar ti set b2='9BO4H8QVM64IMSIWATXXI3D5' where id=2; -update noar tt set v0='00CSJNTU00LPOWDN2' where id=3; -update noar ti set v0='00CSJNTU00LPOWDN2' where id=3; -update noar tt set b0='WDY4KP6TI6T0NJQ4' where id=3; -update noar ti set b0='WDY4KP6TI6T0NJQ4' where id=3; -update noar tt set v0='ROUAJGDG2ZAHLU8MBWV09ZKMBUQ8IXW9' where id=3; -update noar ti set v0='ROUAJGDG2ZAHLU8MBWV09ZKMBUQ8IXW9' where id=3; -update noar tt set b1='W3RM35S3XD7055ENC9QGD4RQUYMOSXY' where id=3; -update noar ti set b1='W3RM35S3XD7055ENC9QGD4RQUYMOSXY' where id=3; -update noar tt set v0='KCBO8YT5QQ3XX8UR303CN32TJ' where id=3; -update noar ti set v0='KCBO8YT5QQ3XX8UR303CN32TJ' where id=3; -update noar tt set b2='3QVT7VU4HNAA9M4K3RY' where id=3; -update noar ti set b2='3QVT7VU4HNAA9M4K3RY' where id=3; -update noar tt set v0='19HAA3' where id=4; -update noar ti set v0='19HAA3' where id=4; -update noar tt set b0='PHN1UGAGK91H1YG3SM0O5FOPDSSJN' where id=4; -update noar ti set b0='PHN1UGAGK91H1YG3SM0O5FOPDSSJN' where id=4; -update noar tt set v0='UH24UTV72RU4O52HF' where id=4; -update noar ti set v0='UH24UTV72RU4O52HF' where id=4; -update noar tt set b1='D' where id=4; -update noar ti set b1='D' where id=4; -update noar tt set v0='P7DVWXYY5AVEGL35CAY36R' where id=4; -update noar ti set v0='P7DVWXYY5AVEGL35CAY36R' where id=4; -update noar tt set b2='9MCHIPI' where id=4; -update noar ti set b2='9MCHIPI' where id=4; -update noar tt set v0='PLQ8YYR4VTVMUJX8WRAT75BL8BJ2WH03' where id=5; -update noar ti set v0='PLQ8YYR4VTVMUJX8WRAT75BL8BJ2WH03' where id=5; -update noar tt set b0='NJKSRC2YQ0' where id=5; -update noar ti set b0='NJKSRC2YQ0' where id=5; -update noar tt set v0='98C64' where id=5; -update noar ti set v0='98C64' where id=5; -update noar tt set b1='KXQCT7XYWHLOJSNEDRIUML' where id=5; -update noar ti set b1='KXQCT7XYWHLOJSNEDRIUML' where id=5; -update noar tt set v0='FI3' where id=5; -update noar ti set v0='FI3' where id=5; -update noar tt set b2='3B8B4' where id=5; -update noar ti set b2='3B8B4' where id=5; -update noar tt set v0='HB033COOVWJKICWALPEO' where id=6; -update noar ti set v0='HB033COOVWJKICWALPEO' where id=6; -update noar tt set b0='VVJTVSDU6V090WRVK6BXW07RYJH' where id=6; -update noar ti set b0='VVJTVSDU6V090WRVK6BXW07RYJH' where id=6; -update noar tt set v0='WFK7YDQ3N6STR' where id=6; -update noar ti set v0='WFK7YDQ3N6STR' where id=6; -update noar tt set b1='QBULJ4330JUTOYL1M' where id=6; -update noar ti set b1='QBULJ4330JUTOYL1M' where id=6; -update noar tt set v0='C3M9DJJ' where id=6; -update noar ti set v0='C3M9DJJ' where id=6; -update noar tt set b2='2P74326LDCSTLA7OK4' where id=6; -update noar ti set b2='2P74326LDCSTLA7OK4' where id=6; -update noar tt set v0='46BJOC70NG5DP4HM68ARTTP6L8HXHYII' where id=7; -update noar ti set v0='46BJOC70NG5DP4HM68ARTTP6L8HXHYII' where id=7; -update noar tt set b0='CUP3DH234BCVBMZ' where id=7; -update noar ti set b0='CUP3DH234BCVBMZ' where id=7; -update noar tt set v0='PER6R2JCKVZGB7J' where id=7; -update noar ti set v0='PER6R2JCKVZGB7J' where id=7; -update noar tt set b1='53NRH80AK7AXT1QXSDUOE38' where id=7; -update noar ti set b1='53NRH80AK7AXT1QXSDUOE38' where id=7; -update noar tt set v0='VT748Z0BGB1O802K' where id=7; -update noar ti set v0='VT748Z0BGB1O802K' where id=7; -update noar tt set b2='D' where id=7; -update noar ti set b2='D' where id=7; -update noar tt set v0='KSU4N' where id=8; -update noar ti set v0='KSU4N' where id=8; -update noar tt set b0='K1H6OGC9P1ZFQ' where id=8; -update noar ti set b0='K1H6OGC9P1ZFQ' where id=8; -update noar tt set v0='SOIS7YSD7Z' where id=8; -update noar ti set v0='SOIS7YSD7Z' where id=8; -update noar tt set b1='EHE6QU8O27TY20L051T2535SOKO5JMG' where id=8; -update noar ti set b1='EHE6QU8O27TY20L051T2535SOKO5JMG' where id=8; -update noar tt set v0='B8LZU3VOWWKN' where id=8; -update noar ti set v0='B8LZU3VOWWKN' where id=8; -update noar tt set b2='XUIIUYK5UH8G7' where id=8; -update noar ti set b2='XUIIUYK5UH8G7' where id=8; -update noar tt set v0='L9EPDQWUXG6R8U2Q' where id=9; -update noar ti set v0='L9EPDQWUXG6R8U2Q' where id=9; -update noar tt set b0='NUP1ZFAUNKWKSLU4OGWAO4N21' where id=9; -update noar ti set b0='NUP1ZFAUNKWKSLU4OGWAO4N21' where id=9; -update noar tt set v0='8XRYAZ' where id=9; -update noar ti set v0='8XRYAZ' where id=9; -update noar tt set b1='RN6TXKN4' where id=9; -update noar ti set b1='RN6TXKN4' where id=9; -update noar tt set v0='93H5657J0AOL4ZPI4SRA' where id=9; -update noar ti set v0='93H5657J0AOL4ZPI4SRA' where id=9; -update noar tt set b2='DUE35HFWL6GGA6RJ9R' where id=9; -update noar ti set b2='DUE35HFWL6GGA6RJ9R' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 tinyblob not null, - b1 blob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='PCDEW2UXS4MRD2769QUFSNV1NV2J' where id=1; -update noar ti set v0='PCDEW2UXS4MRD2769QUFSNV1NV2J' where id=1; -update noar tt set b0='8AEVLOYIXTK51YZ5XLYBP148GJK' where id=1; -update noar ti set b0='8AEVLOYIXTK51YZ5XLYBP148GJK' where id=1; -update noar tt set v0='Y56OUJ7X6KC5B5PNKV' where id=1; -update noar ti set v0='Y56OUJ7X6KC5B5PNKV' where id=1; -update noar tt set b1='46275Z336R900LG0' where id=1; -update noar ti set b1='46275Z336R900LG0' where id=1; -update noar tt set v0='N0QEM7KWBPBOSZJQOFMFII' where id=1; -update noar ti set v0='N0QEM7KWBPBOSZJQOFMFII' where id=1; -update noar tt set b2='SAN4NOL' where id=1; -update noar ti set b2='SAN4NOL' where id=1; -update noar tt set v0='75A1BLXT2CI1MY352DRWGH' where id=2; -update noar ti set v0='75A1BLXT2CI1MY352DRWGH' where id=2; -update noar tt set b0='BJSL60TCELZ06IWA2NVTQ1LW92C' where id=2; -update noar ti set b0='BJSL60TCELZ06IWA2NVTQ1LW92C' where id=2; -update noar tt set v0='INK' where id=2; -update noar ti set v0='INK' where id=2; -update noar tt set b1='UX3W0WU9F9R27SVY3' where id=2; -update noar ti set b1='UX3W0WU9F9R27SVY3' where id=2; -update noar tt set v0='202MO30MWSJ3RBGJ' where id=2; -update noar ti set v0='202MO30MWSJ3RBGJ' where id=2; -update noar tt set b2='U971UM3IOS7LSP0ABARE5SU1' where id=2; -update noar ti set b2='U971UM3IOS7LSP0ABARE5SU1' where id=2; -update noar tt set v0='J7N199SON5ZMNWW' where id=3; -update noar ti set v0='J7N199SON5ZMNWW' where id=3; -update noar tt set b0='TSCTQCKWTIA16HDFF3HQZLT7ZAO9ZLUA' where id=3; -update noar ti set b0='TSCTQCKWTIA16HDFF3HQZLT7ZAO9ZLUA' where id=3; -update noar tt set v0='7SYK77QJZL8CI5TFBB7Q92' where id=3; -update noar ti set v0='7SYK77QJZL8CI5TFBB7Q92' where id=3; -update noar tt set b1='STG' where id=3; -update noar ti set b1='STG' where id=3; -update noar tt set v0='3JQ4HGVAFN77' where id=3; -update noar ti set v0='3JQ4HGVAFN77' where id=3; -update noar tt set b2='ALTL3UIEV3DE3PJNS7X3ZD13M51D6X' where id=3; -update noar ti set b2='ALTL3UIEV3DE3PJNS7X3ZD13M51D6X' where id=3; -update noar tt set v0='NMHW6POKCLRE0SG5D' where id=4; -update noar ti set v0='NMHW6POKCLRE0SG5D' where id=4; -update noar tt set b0='9T1LN0NHL0WFPC4R0LF92RP49L3' where id=4; -update noar ti set b0='9T1LN0NHL0WFPC4R0LF92RP49L3' where id=4; -update noar tt set v0='IFV9V7M47G6LS1PIDA7L1LUMCNMV' where id=4; -update noar ti set v0='IFV9V7M47G6LS1PIDA7L1LUMCNMV' where id=4; -update noar tt set b1='E' where id=4; -update noar ti set b1='E' where id=4; -update noar tt set v0='LKSJSI3W6G2T6G1A4OFY4' where id=4; -update noar ti set v0='LKSJSI3W6G2T6G1A4OFY4' where id=4; -update noar tt set b2='O90GIRSQJFHMRRAZ3N22SC9XZV6WLI4N' where id=4; -update noar ti set b2='O90GIRSQJFHMRRAZ3N22SC9XZV6WLI4N' where id=4; -update noar tt set v0='S9GK6K05JI7NVTLWZU9F0HSM1H0Z' where id=5; -update noar ti set v0='S9GK6K05JI7NVTLWZU9F0HSM1H0Z' where id=5; -update noar tt set b0='Y943RBCB56KZWNP0OR58JQHFXI1' where id=5; -update noar ti set b0='Y943RBCB56KZWNP0OR58JQHFXI1' where id=5; -update noar tt set v0='XR0LUZ3NRULEL13F' where id=5; -update noar ti set v0='XR0LUZ3NRULEL13F' where id=5; -update noar tt set b1='UEU3FSKSTFUG34QK8S1' where id=5; -update noar ti set b1='UEU3FSKSTFUG34QK8S1' where id=5; -update noar tt set v0='NDS' where id=5; -update noar ti set v0='NDS' where id=5; -update noar tt set b2='1KH365LZF35GJPDCRK0VN48KILJL' where id=5; -update noar ti set b2='1KH365LZF35GJPDCRK0VN48KILJL' where id=5; -update noar tt set v0='TNPCV1Z4ZMYJCAOQRBP' where id=6; -update noar ti set v0='TNPCV1Z4ZMYJCAOQRBP' where id=6; -update noar tt set b0='P1E0YW' where id=6; -update noar ti set b0='P1E0YW' where id=6; -update noar tt set v0='Y8G0MAGA3EVQKQXP1YKWKMIGR' where id=6; -update noar ti set v0='Y8G0MAGA3EVQKQXP1YKWKMIGR' where id=6; -update noar tt set b1='BXQ8EB8GZ9KU6' where id=6; -update noar ti set b1='BXQ8EB8GZ9KU6' where id=6; -update noar tt set v0='P9EDQX45D649GHOK9QXV5KNGB' where id=6; -update noar ti set v0='P9EDQX45D649GHOK9QXV5KNGB' where id=6; -update noar tt set b2='8NVA' where id=6; -update noar ti set b2='8NVA' where id=6; -update noar tt set v0='9U' where id=7; -update noar ti set v0='9U' where id=7; -update noar tt set b0='CZE082LCU1ICVFMUJNAZ4L0MA7ZPJ' where id=7; -update noar ti set b0='CZE082LCU1ICVFMUJNAZ4L0MA7ZPJ' where id=7; -update noar tt set v0='7KA025ITKEY7XSO5DEJXF5' where id=7; -update noar ti set v0='7KA025ITKEY7XSO5DEJXF5' where id=7; -update noar tt set b1='QDPJWOZA785IWSOD74VGM4' where id=7; -update noar ti set b1='QDPJWOZA785IWSOD74VGM4' where id=7; -update noar tt set v0='5028WYOHG3QSDHY4IKO41BJ6UCRU' where id=7; -update noar ti set v0='5028WYOHG3QSDHY4IKO41BJ6UCRU' where id=7; -update noar tt set b2='D80FF0YB163LD844VQ573TL' where id=7; -update noar ti set b2='D80FF0YB163LD844VQ573TL' where id=7; -update noar tt set v0='A0BCIUZX8RYKAMDOOA1VTQ8I5Y' where id=8; -update noar ti set v0='A0BCIUZX8RYKAMDOOA1VTQ8I5Y' where id=8; -update noar tt set b0='6QJEW9' where id=8; -update noar ti set b0='6QJEW9' where id=8; -update noar tt set v0='W5IXOQAA4OBYPGB8' where id=8; -update noar ti set v0='W5IXOQAA4OBYPGB8' where id=8; -update noar tt set b1='4IN2M2UD' where id=8; -update noar ti set b1='4IN2M2UD' where id=8; -update noar tt set v0='05TE675X1A1DM' where id=8; -update noar ti set v0='05TE675X1A1DM' where id=8; -update noar tt set b2='3JYYJZ' where id=8; -update noar ti set b2='3JYYJZ' where id=8; -update noar tt set v0='EPFKWCVOPGXJCWGW' where id=9; -update noar ti set v0='EPFKWCVOPGXJCWGW' where id=9; -update noar tt set b0='D6N26Y0EB6XXR4EF2G' where id=9; -update noar ti set b0='D6N26Y0EB6XXR4EF2G' where id=9; -update noar tt set v0='0BW' where id=9; -update noar ti set v0='0BW' where id=9; -update noar tt set b1='U3' where id=9; -update noar ti set b1='U3' where id=9; -update noar tt set v0='OPITJ9GXYBBZLWD8VQOAIWVFW1P63' where id=9; -update noar ti set v0='OPITJ9GXYBBZLWD8VQOAIWVFW1P63' where id=9; -update noar tt set b2='7FDVO1BS5JVV08LUEU77BV' where id=9; -update noar ti set b2='7FDVO1BS5JVV08LUEU77BV' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 tinyblob null, - b1 blob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='6B5LYFZEER6TF1OIDUAP8HD' where id=1; -update noar ti set v0='6B5LYFZEER6TF1OIDUAP8HD' where id=1; -update noar tt set b0='XFPXPKBN3792X8PNCA0TZ1TTHA9295R7' where id=1; -update noar ti set b0='XFPXPKBN3792X8PNCA0TZ1TTHA9295R7' where id=1; -update noar tt set v0='T82NXGLCTBNWD59' where id=1; -update noar ti set v0='T82NXGLCTBNWD59' where id=1; -update noar tt set b1='34F670' where id=1; -update noar ti set b1='34F670' where id=1; -update noar tt set v0='UR7FPKM' where id=1; -update noar ti set v0='UR7FPKM' where id=1; -update noar tt set b2='IIF0G8F0U1MSQ' where id=1; -update noar ti set b2='IIF0G8F0U1MSQ' where id=1; -update noar tt set v0='9KE2DXE' where id=2; -update noar ti set v0='9KE2DXE' where id=2; -update noar tt set b0='X58CN7EJI5TX4RY5VGFEOV2OPJ' where id=2; -update noar ti set b0='X58CN7EJI5TX4RY5VGFEOV2OPJ' where id=2; -update noar tt set v0='FM0PE' where id=2; -update noar ti set v0='FM0PE' where id=2; -update noar tt set b1='2HI8LRAFUFFGME20KEVE7PVUCEZ' where id=2; -update noar ti set b1='2HI8LRAFUFFGME20KEVE7PVUCEZ' where id=2; -update noar tt set v0='M2QL' where id=2; -update noar ti set v0='M2QL' where id=2; -update noar tt set b2='4QRFDXKH0GJBVB' where id=2; -update noar ti set b2='4QRFDXKH0GJBVB' where id=2; -update noar tt set v0='080BP' where id=3; -update noar ti set v0='080BP' where id=3; -update noar tt set b0='V2VN' where id=3; -update noar ti set b0='V2VN' where id=3; -update noar tt set v0='JPUGCY0NCBHGLVQO' where id=3; -update noar ti set v0='JPUGCY0NCBHGLVQO' where id=3; -update noar tt set b1='G5HAS6QK0BUWGF8' where id=3; -update noar ti set b1='G5HAS6QK0BUWGF8' where id=3; -update noar tt set v0='RYJASUZR' where id=3; -update noar ti set v0='RYJASUZR' where id=3; -update noar tt set b2='B2PUJJILJDPQGT4' where id=3; -update noar ti set b2='B2PUJJILJDPQGT4' where id=3; -update noar tt set v0='FQUAAEZQSUEP69LAOAQN' where id=4; -update noar ti set v0='FQUAAEZQSUEP69LAOAQN' where id=4; -update noar tt set b0='JXDCUFFWA8Q86SGAA8RBI' where id=4; -update noar ti set b0='JXDCUFFWA8Q86SGAA8RBI' where id=4; -update noar tt set v0='1VINNTSHBZ9H4' where id=4; -update noar ti set v0='1VINNTSHBZ9H4' where id=4; -update noar tt set b1='G7DZ3NE8JFO7P' where id=4; -update noar ti set b1='G7DZ3NE8JFO7P' where id=4; -update noar tt set v0='99F91LAHG944QVUL' where id=4; -update noar ti set v0='99F91LAHG944QVUL' where id=4; -update noar tt set b2='PZV' where id=4; -update noar ti set b2='PZV' where id=4; -update noar tt set v0='MWL6NQ8WFTJ6T' where id=5; -update noar ti set v0='MWL6NQ8WFTJ6T' where id=5; -update noar tt set b0='7FB36L2GM5JSHQD6Q3C3WT' where id=5; -update noar ti set b0='7FB36L2GM5JSHQD6Q3C3WT' where id=5; -update noar tt set v0='04298HR9ZRFL3PSD2GDV53B1MEP058' where id=5; -update noar ti set v0='04298HR9ZRFL3PSD2GDV53B1MEP058' where id=5; -update noar tt set b1='EUBD1KUO1S2J' where id=5; -update noar ti set b1='EUBD1KUO1S2J' where id=5; -update noar tt set v0='0VZ3ECY2IU1EMZA85TFWGLX6VKO5EP' where id=5; -update noar ti set v0='0VZ3ECY2IU1EMZA85TFWGLX6VKO5EP' where id=5; -update noar tt set b2='TRSJN9Z4HF16F' where id=5; -update noar ti set b2='TRSJN9Z4HF16F' where id=5; -update noar tt set v0='Y4U6AZ4DR8F' where id=6; -update noar ti set v0='Y4U6AZ4DR8F' where id=6; -update noar tt set b0='7LEFKGWT94FVEBOKYVR0IC' where id=6; -update noar ti set b0='7LEFKGWT94FVEBOKYVR0IC' where id=6; -update noar tt set v0='MV7F' where id=6; -update noar ti set v0='MV7F' where id=6; -update noar tt set b1='I7QR' where id=6; -update noar ti set b1='I7QR' where id=6; -update noar tt set v0='SCP3UDJLZJH0M2ZYEL41PDJU' where id=6; -update noar ti set v0='SCP3UDJLZJH0M2ZYEL41PDJU' where id=6; -update noar tt set b2='HYJTBRJ84KMJ0' where id=6; -update noar ti set b2='HYJTBRJ84KMJ0' where id=6; -update noar tt set v0='68XV89D4TG6JY' where id=7; -update noar ti set v0='68XV89D4TG6JY' where id=7; -update noar tt set b0='J4DAA' where id=7; -update noar ti set b0='J4DAA' where id=7; -update noar tt set v0='HOOS0S27Z1IQ' where id=7; -update noar ti set v0='HOOS0S27Z1IQ' where id=7; -update noar tt set b1='M5WVHVJQ' where id=7; -update noar ti set b1='M5WVHVJQ' where id=7; -update noar tt set v0='FZGNYL9XKC1IFGP5RMAWCJ28PCSTUSP' where id=7; -update noar ti set v0='FZGNYL9XKC1IFGP5RMAWCJ28PCSTUSP' where id=7; -update noar tt set b2='4H9JSEGPGIW0AQT95URDXWDCG3B129' where id=7; -update noar ti set b2='4H9JSEGPGIW0AQT95URDXWDCG3B129' where id=7; -update noar tt set v0='Q41UB2MFEMYICSMH8B5LSW6C288M4MV' where id=8; -update noar ti set v0='Q41UB2MFEMYICSMH8B5LSW6C288M4MV' where id=8; -update noar tt set b0='0W8CHC2R5O9RLJOJARXFSFX' where id=8; -update noar ti set b0='0W8CHC2R5O9RLJOJARXFSFX' where id=8; -update noar tt set v0='HAFBFNG' where id=8; -update noar ti set v0='HAFBFNG' where id=8; -update noar tt set b1='3UKFNBNFD96F1LG577F9SFC9F43H8P3A' where id=8; -update noar ti set b1='3UKFNBNFD96F1LG577F9SFC9F43H8P3A' where id=8; -update noar tt set v0='0SJK2YS5XP19S83RZP3SJ4' where id=8; -update noar ti set v0='0SJK2YS5XP19S83RZP3SJ4' where id=8; -update noar tt set b2='LKSR9R' where id=8; -update noar ti set b2='LKSR9R' where id=8; -update noar tt set v0='3' where id=9; -update noar ti set v0='3' where id=9; -update noar tt set b0='BUHAUWE' where id=9; -update noar ti set b0='BUHAUWE' where id=9; -update noar tt set v0='6KNM5ZR7TGKPYWQ7A5E08U76A' where id=9; -update noar ti set v0='6KNM5ZR7TGKPYWQ7A5E08U76A' where id=9; -update noar tt set b1='S' where id=9; -update noar ti set b1='S' where id=9; -update noar tt set v0='I' where id=9; -update noar ti set v0='I' where id=9; -update noar tt set b2='PUZIW8ML' where id=9; -update noar ti set b2='PUZIW8ML' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 tinyblob null, - b1 blob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='C3DXT5S' where id=1; -update noar ti set v0='C3DXT5S' where id=1; -update noar tt set b0='8EO1WTUFC0LWN' where id=1; -update noar ti set b0='8EO1WTUFC0LWN' where id=1; -update noar tt set v0='DA2XQOYGHAL' where id=1; -update noar ti set v0='DA2XQOYGHAL' where id=1; -update noar tt set b1='LBVLH18GCGVCQMTRNA9' where id=1; -update noar ti set b1='LBVLH18GCGVCQMTRNA9' where id=1; -update noar tt set v0='WDOI0FG44RUVMDH04PQXXWFSPIHGY6BY' where id=1; -update noar ti set v0='WDOI0FG44RUVMDH04PQXXWFSPIHGY6BY' where id=1; -update noar tt set b2='R229LSDCR' where id=1; -update noar ti set b2='R229LSDCR' where id=1; -update noar tt set v0='5IDZ5YW0J7D6WMPET66JYLPH8Q5QCS' where id=2; -update noar ti set v0='5IDZ5YW0J7D6WMPET66JYLPH8Q5QCS' where id=2; -update noar tt set b0='HX' where id=2; -update noar ti set b0='HX' where id=2; -update noar tt set v0='VQMNJXZ8FEJODOCFVS4T5MOIRAXG' where id=2; -update noar ti set v0='VQMNJXZ8FEJODOCFVS4T5MOIRAXG' where id=2; -update noar tt set b1='RGI92TQN81' where id=2; -update noar ti set b1='RGI92TQN81' where id=2; -update noar tt set v0='2V2AJEC57QHJXHGTA' where id=2; -update noar ti set v0='2V2AJEC57QHJXHGTA' where id=2; -update noar tt set b2='C6PX0G' where id=2; -update noar ti set b2='C6PX0G' where id=2; -update noar tt set v0='F6UTTEO8JTKGDF36Y3X1E9PIIBX' where id=3; -update noar ti set v0='F6UTTEO8JTKGDF36Y3X1E9PIIBX' where id=3; -update noar tt set b0='7E1IVSHIIZ8ZZU52' where id=3; -update noar ti set b0='7E1IVSHIIZ8ZZU52' where id=3; -update noar tt set v0='5QT1NDMGX29M0XHTYOCYH' where id=3; -update noar ti set v0='5QT1NDMGX29M0XHTYOCYH' where id=3; -update noar tt set b1='EKC' where id=3; -update noar ti set b1='EKC' where id=3; -update noar tt set v0='5L4YFFLX3X4NMZNR1MPQG35' where id=3; -update noar ti set v0='5L4YFFLX3X4NMZNR1MPQG35' where id=3; -update noar tt set b2='XQ64OCC6NGJJN0E7C4TGVRWG2KXCQ6' where id=3; -update noar ti set b2='XQ64OCC6NGJJN0E7C4TGVRWG2KXCQ6' where id=3; -update noar tt set v0='OLUKY7GTN04KJE3TG' where id=4; -update noar ti set v0='OLUKY7GTN04KJE3TG' where id=4; -update noar tt set b0='66QXTP6BBCW95F' where id=4; -update noar ti set b0='66QXTP6BBCW95F' where id=4; -update noar tt set v0='K' where id=4; -update noar ti set v0='K' where id=4; -update noar tt set b1='GON6T3UBR1SNJLPOD32LK' where id=4; -update noar ti set b1='GON6T3UBR1SNJLPOD32LK' where id=4; -update noar tt set v0='VNRAU1JZB02LNK4E32PBV00Z9EEHBUKX' where id=4; -update noar ti set v0='VNRAU1JZB02LNK4E32PBV00Z9EEHBUKX' where id=4; -update noar tt set b2='F0PP9G4BKJGUN' where id=4; -update noar ti set b2='F0PP9G4BKJGUN' where id=4; -update noar tt set v0='HOEC' where id=5; -update noar ti set v0='HOEC' where id=5; -update noar tt set b0='E2CI2TNI8DHORJ' where id=5; -update noar ti set b0='E2CI2TNI8DHORJ' where id=5; -update noar tt set v0='CR0K0KDJ86VV201QK8XE06' where id=5; -update noar ti set v0='CR0K0KDJ86VV201QK8XE06' where id=5; -update noar tt set b1='SIU7Q73K80' where id=5; -update noar ti set b1='SIU7Q73K80' where id=5; -update noar tt set v0='F9RTRGD0KM4FJX9LR5TWH50IIFEUDX1M' where id=5; -update noar ti set v0='F9RTRGD0KM4FJX9LR5TWH50IIFEUDX1M' where id=5; -update noar tt set b2='ADPS5DX10VWCY46M1JMLHIDW336CA' where id=5; -update noar ti set b2='ADPS5DX10VWCY46M1JMLHIDW336CA' where id=5; -update noar tt set v0='QQS9FY9IEXNBYT6QDU9Q89' where id=6; -update noar ti set v0='QQS9FY9IEXNBYT6QDU9Q89' where id=6; -update noar tt set b0='CAPVR994XAZ17D97KIBW89A2D' where id=6; -update noar ti set b0='CAPVR994XAZ17D97KIBW89A2D' where id=6; -update noar tt set v0='SO6' where id=6; -update noar ti set v0='SO6' where id=6; -update noar tt set b1='OBJC0N9RL82WOX3226WVK0SEEELZRI' where id=6; -update noar ti set b1='OBJC0N9RL82WOX3226WVK0SEEELZRI' where id=6; -update noar tt set v0='LHUBM79WKW1GIS7W7NZJ0SLK' where id=6; -update noar ti set v0='LHUBM79WKW1GIS7W7NZJ0SLK' where id=6; -update noar tt set b2='7IIIVNPZOY7Y6PQOEGKT' where id=6; -update noar ti set b2='7IIIVNPZOY7Y6PQOEGKT' where id=6; -update noar tt set v0='GQGXDN6FKY0E5W8UX92R8C4DG3MMOSTS' where id=7; -update noar ti set v0='GQGXDN6FKY0E5W8UX92R8C4DG3MMOSTS' where id=7; -update noar tt set b0='4ASI9COMIRVZCJ9HUDU2RE3AOODA8S0' where id=7; -update noar ti set b0='4ASI9COMIRVZCJ9HUDU2RE3AOODA8S0' where id=7; -update noar tt set v0='KSWFSU' where id=7; -update noar ti set v0='KSWFSU' where id=7; -update noar tt set b1='B6TAA473WR' where id=7; -update noar ti set b1='B6TAA473WR' where id=7; -update noar tt set v0='XI2CF6BS8Q94IG664R7BFHI4EZ3LB' where id=7; -update noar ti set v0='XI2CF6BS8Q94IG664R7BFHI4EZ3LB' where id=7; -update noar tt set b2='C3JB6EZ31V0LN2Y9GIN' where id=7; -update noar ti set b2='C3JB6EZ31V0LN2Y9GIN' where id=7; -update noar tt set v0='6I2Z81YA2UPRQOVI' where id=8; -update noar ti set v0='6I2Z81YA2UPRQOVI' where id=8; -update noar tt set b0='162Z4MPQADM' where id=8; -update noar ti set b0='162Z4MPQADM' where id=8; -update noar tt set v0='23GRKMS' where id=8; -update noar ti set v0='23GRKMS' where id=8; -update noar tt set b1='0YAYYLOQ5FR2K6LNRDZU2' where id=8; -update noar ti set b1='0YAYYLOQ5FR2K6LNRDZU2' where id=8; -update noar tt set v0='JIJDACY9Y0ULYG6DIETHY474' where id=8; -update noar ti set v0='JIJDACY9Y0ULYG6DIETHY474' where id=8; -update noar tt set b2='59M2PBKEX2HYURXMS0J7AZ1KXMF8' where id=8; -update noar ti set b2='59M2PBKEX2HYURXMS0J7AZ1KXMF8' where id=8; -update noar tt set v0='3KX7I4EMHI1TCEAZYR504DP7N' where id=9; -update noar ti set v0='3KX7I4EMHI1TCEAZYR504DP7N' where id=9; -update noar tt set b0='4GE5EQ7VU2L' where id=9; -update noar ti set b0='4GE5EQ7VU2L' where id=9; -update noar tt set v0='NPH7MHLZXCI5ZLK4X' where id=9; -update noar ti set v0='NPH7MHLZXCI5ZLK4X' where id=9; -update noar tt set b1='QS67A8QQYKBTSONRU8P' where id=9; -update noar ti set b1='QS67A8QQYKBTSONRU8P' where id=9; -update noar tt set v0='IYH360I' where id=9; -update noar ti set v0='IYH360I' where id=9; -update noar tt set b2='ZH' where id=9; -update noar ti set b2='ZH' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 tinyblob not null, - b1 blob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='EY2KOT82FZ4FU' where id=1; -update noar ti set v0='EY2KOT82FZ4FU' where id=1; -update noar tt set b0='M9Y9H' where id=1; -update noar ti set b0='M9Y9H' where id=1; -update noar tt set v0='V4CPWY9' where id=1; -update noar ti set v0='V4CPWY9' where id=1; -update noar tt set b1='RLOVRWMKZNLNL9AY9F' where id=1; -update noar ti set b1='RLOVRWMKZNLNL9AY9F' where id=1; -update noar tt set v0='HVKEPSI' where id=1; -update noar ti set v0='HVKEPSI' where id=1; -update noar tt set b2='FSUWSIP1N8LH1RGTZP' where id=1; -update noar ti set b2='FSUWSIP1N8LH1RGTZP' where id=1; -update noar tt set v0='GV0H6I0L4DR0G' where id=2; -update noar ti set v0='GV0H6I0L4DR0G' where id=2; -update noar tt set b0='X0ITOY' where id=2; -update noar ti set b0='X0ITOY' where id=2; -update noar tt set v0='W' where id=2; -update noar ti set v0='W' where id=2; -update noar tt set b1='ZE2WQ9' where id=2; -update noar ti set b1='ZE2WQ9' where id=2; -update noar tt set v0='AXT1DCWHH6ADJED' where id=2; -update noar ti set v0='AXT1DCWHH6ADJED' where id=2; -update noar tt set b2='BQLKNKZU5P' where id=2; -update noar ti set b2='BQLKNKZU5P' where id=2; -update noar tt set v0='EV655YZBBY9' where id=3; -update noar ti set v0='EV655YZBBY9' where id=3; -update noar tt set b0='YVL' where id=3; -update noar ti set b0='YVL' where id=3; -update noar tt set v0='5BM4SI9T74QYJ5DO' where id=3; -update noar ti set v0='5BM4SI9T74QYJ5DO' where id=3; -update noar tt set b1='K2I08J6D' where id=3; -update noar ti set b1='K2I08J6D' where id=3; -update noar tt set v0='7YHPSP' where id=3; -update noar ti set v0='7YHPSP' where id=3; -update noar tt set b2='GSZA' where id=3; -update noar ti set b2='GSZA' where id=3; -update noar tt set v0='KW837W77GBTV3YIVT0M6DBXLLLUPO' where id=4; -update noar ti set v0='KW837W77GBTV3YIVT0M6DBXLLLUPO' where id=4; -update noar tt set b0='BW0S60WQ2SKCT75DZBJ2V' where id=4; -update noar ti set b0='BW0S60WQ2SKCT75DZBJ2V' where id=4; -update noar tt set v0='XLVI9UGH2QT8DIHLZOFVS0RLIS0HK0XB' where id=4; -update noar ti set v0='XLVI9UGH2QT8DIHLZOFVS0RLIS0HK0XB' where id=4; -update noar tt set b1='KELX3DWU3221X6DRMFHCR3FKUZ3Y6MM5' where id=4; -update noar ti set b1='KELX3DWU3221X6DRMFHCR3FKUZ3Y6MM5' where id=4; -update noar tt set v0='NMYYLI' where id=4; -update noar ti set v0='NMYYLI' where id=4; -update noar tt set b2='R8GB1X56EK2' where id=4; -update noar ti set b2='R8GB1X56EK2' where id=4; -update noar tt set v0='T7HS2RGP' where id=5; -update noar ti set v0='T7HS2RGP' where id=5; -update noar tt set b0='MAWBUNW' where id=5; -update noar ti set b0='MAWBUNW' where id=5; -update noar tt set v0='RHUV9VBFZWIVS0PQM3AQ' where id=5; -update noar ti set v0='RHUV9VBFZWIVS0PQM3AQ' where id=5; -update noar tt set b1='W1GTO1E' where id=5; -update noar ti set b1='W1GTO1E' where id=5; -update noar tt set v0='MI' where id=5; -update noar ti set v0='MI' where id=5; -update noar tt set b2='2FMUZ' where id=5; -update noar ti set b2='2FMUZ' where id=5; -update noar tt set v0='5UHFDUT' where id=6; -update noar ti set v0='5UHFDUT' where id=6; -update noar tt set b0='PO82BUFTM8UW4T9CW5CE' where id=6; -update noar ti set b0='PO82BUFTM8UW4T9CW5CE' where id=6; -update noar tt set v0='5O6JJ0OLDL87SD' where id=6; -update noar ti set v0='5O6JJ0OLDL87SD' where id=6; -update noar tt set b1='TBKKH643Y5MLRMDH5NZIVJZ9HP1N1' where id=6; -update noar ti set b1='TBKKH643Y5MLRMDH5NZIVJZ9HP1N1' where id=6; -update noar tt set v0='AE3' where id=6; -update noar ti set v0='AE3' where id=6; -update noar tt set b2='XZQ' where id=6; -update noar ti set b2='XZQ' where id=6; -update noar tt set v0='IK71I8BNGAO' where id=7; -update noar ti set v0='IK71I8BNGAO' where id=7; -update noar tt set b0='LKRWNU7LSVDDS1AV6SSL0VZJRK271CCL' where id=7; -update noar ti set b0='LKRWNU7LSVDDS1AV6SSL0VZJRK271CCL' where id=7; -update noar tt set v0='XBHNEAGTQH' where id=7; -update noar ti set v0='XBHNEAGTQH' where id=7; -update noar tt set b1='TZ7HA' where id=7; -update noar ti set b1='TZ7HA' where id=7; -update noar tt set v0='UZGTIP3CTTI8296N3W64WI1FBED' where id=7; -update noar ti set v0='UZGTIP3CTTI8296N3W64WI1FBED' where id=7; -update noar tt set b2='1HO' where id=7; -update noar ti set b2='1HO' where id=7; -update noar tt set v0='QZGTOMM6CA' where id=8; -update noar ti set v0='QZGTOMM6CA' where id=8; -update noar tt set b0='QNS2ENVLTD11WO' where id=8; -update noar ti set b0='QNS2ENVLTD11WO' where id=8; -update noar tt set v0='2F77494RHWG06SAGISA' where id=8; -update noar ti set v0='2F77494RHWG06SAGISA' where id=8; -update noar tt set b1='U' where id=8; -update noar ti set b1='U' where id=8; -update noar tt set v0='JHV3S2WSK1Q1FTMOZQMT' where id=8; -update noar ti set v0='JHV3S2WSK1Q1FTMOZQMT' where id=8; -update noar tt set b2='8G3144RP88EOQI3IJX2PKFEJJCMBZFFA' where id=8; -update noar ti set b2='8G3144RP88EOQI3IJX2PKFEJJCMBZFFA' where id=8; -update noar tt set v0='4H5EGT9UOKKP2F113ZE3RWOAQ5G' where id=9; -update noar ti set v0='4H5EGT9UOKKP2F113ZE3RWOAQ5G' where id=9; -update noar tt set b0='MS' where id=9; -update noar ti set b0='MS' where id=9; -update noar tt set v0='27YMHNTMO' where id=9; -update noar ti set v0='27YMHNTMO' where id=9; -update noar tt set b1='0WMAH17RW0XSEK67M5DWE8FM312S' where id=9; -update noar ti set b1='0WMAH17RW0XSEK67M5DWE8FM312S' where id=9; -update noar tt set v0='72H94E7RWBSWH' where id=9; -update noar ti set v0='72H94E7RWBSWH' where id=9; -update noar tt set b2='KKN1RK271JNFCFA8CFLAMS85' where id=9; -update noar ti set b2='KKN1RK271JNFCFA8CFLAMS85' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 tinyblob not null, - b1 blob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='F47PP3MSOMOXLF0VPVO5HR2XMQ' where id=1; -update noar ti set v0='F47PP3MSOMOXLF0VPVO5HR2XMQ' where id=1; -update noar tt set b0='JHO0QT5EDZE9HC0DA1EUQ' where id=1; -update noar ti set b0='JHO0QT5EDZE9HC0DA1EUQ' where id=1; -update noar tt set v0='PPKUUXRW3JI' where id=1; -update noar ti set v0='PPKUUXRW3JI' where id=1; -update noar tt set b1='5ENA40PFDZQ7BEAS' where id=1; -update noar ti set b1='5ENA40PFDZQ7BEAS' where id=1; -update noar tt set v0='8' where id=1; -update noar ti set v0='8' where id=1; -update noar tt set b2='QYXB85F79E8K1O9VV58F53YVMY811NZR' where id=1; -update noar ti set b2='QYXB85F79E8K1O9VV58F53YVMY811NZR' where id=1; -update noar tt set v0='ZJWX' where id=2; -update noar ti set v0='ZJWX' where id=2; -update noar tt set b0='AHDNUCOCHS0U8GLH' where id=2; -update noar ti set b0='AHDNUCOCHS0U8GLH' where id=2; -update noar tt set v0='HNGZ2XPYQ' where id=2; -update noar ti set v0='HNGZ2XPYQ' where id=2; -update noar tt set b1='YB0WZHGHEBC6JQIZ' where id=2; -update noar ti set b1='YB0WZHGHEBC6JQIZ' where id=2; -update noar tt set v0='ZB5UW3UVZ7CPYXZ4TEIXW6BP' where id=2; -update noar ti set v0='ZB5UW3UVZ7CPYXZ4TEIXW6BP' where id=2; -update noar tt set b2='BQYI0XVEATBV1S8V45LZFAZUFV5FF' where id=2; -update noar ti set b2='BQYI0XVEATBV1S8V45LZFAZUFV5FF' where id=2; -update noar tt set v0='QCSNGR51XP22R0PJH5VKLZ61IILWLV' where id=3; -update noar ti set v0='QCSNGR51XP22R0PJH5VKLZ61IILWLV' where id=3; -update noar tt set b0='8BHWG3YMZ9S5Y' where id=3; -update noar ti set b0='8BHWG3YMZ9S5Y' where id=3; -update noar tt set v0='4LJQKTEWJIDBICUEJ4JVMAR' where id=3; -update noar ti set v0='4LJQKTEWJIDBICUEJ4JVMAR' where id=3; -update noar tt set b1='P7X4LP2CPD4M3O' where id=3; -update noar ti set b1='P7X4LP2CPD4M3O' where id=3; -update noar tt set v0='NAJH6NAG93V' where id=3; -update noar ti set v0='NAJH6NAG93V' where id=3; -update noar tt set b2='NM5R9HVG' where id=3; -update noar ti set b2='NM5R9HVG' where id=3; -update noar tt set v0='F0W7KZJLT7W37YWETQRIC7YIOFLFJ' where id=4; -update noar ti set v0='F0W7KZJLT7W37YWETQRIC7YIOFLFJ' where id=4; -update noar tt set b0='V1S' where id=4; -update noar ti set b0='V1S' where id=4; -update noar tt set v0='QG939T0RCTZZOK45OI' where id=4; -update noar ti set v0='QG939T0RCTZZOK45OI' where id=4; -update noar tt set b1='SNNLYMMNJH' where id=4; -update noar ti set b1='SNNLYMMNJH' where id=4; -update noar tt set v0='HJM1CT8RBSCD2VT9A9S1GQY' where id=4; -update noar ti set v0='HJM1CT8RBSCD2VT9A9S1GQY' where id=4; -update noar tt set b2='Z2JQCR43FP91R0PYW0JWFQ6H84N4' where id=4; -update noar ti set b2='Z2JQCR43FP91R0PYW0JWFQ6H84N4' where id=4; -update noar tt set v0='A' where id=5; -update noar ti set v0='A' where id=5; -update noar tt set b0='4A27OKHX0IXYTLXDQTC1JD0V' where id=5; -update noar ti set b0='4A27OKHX0IXYTLXDQTC1JD0V' where id=5; -update noar tt set v0='BDM4L1S9S6PC' where id=5; -update noar ti set v0='BDM4L1S9S6PC' where id=5; -update noar tt set b1='SWM1UC59OEZF99YJ' where id=5; -update noar ti set b1='SWM1UC59OEZF99YJ' where id=5; -update noar tt set v0='LBA8NGT8OS5AG239F' where id=5; -update noar ti set v0='LBA8NGT8OS5AG239F' where id=5; -update noar tt set b2='6K63LDEO5V857YD65CCJPLPIM78NQHYL' where id=5; -update noar ti set b2='6K63LDEO5V857YD65CCJPLPIM78NQHYL' where id=5; -update noar tt set v0='5B' where id=6; -update noar ti set v0='5B' where id=6; -update noar tt set b0='DE1ZCYS7YGC0RIJSOQ4B1R6VTYR6C' where id=6; -update noar ti set b0='DE1ZCYS7YGC0RIJSOQ4B1R6VTYR6C' where id=6; -update noar tt set v0='TNSW6MX2025GN4FAHQV7VO4CP' where id=6; -update noar ti set v0='TNSW6MX2025GN4FAHQV7VO4CP' where id=6; -update noar tt set b1='AVJW' where id=6; -update noar ti set b1='AVJW' where id=6; -update noar tt set v0='170QOOJCSKFNFBDELG9DU38DB75' where id=6; -update noar ti set v0='170QOOJCSKFNFBDELG9DU38DB75' where id=6; -update noar tt set b2='86B4OYLL764FGSPLRTJW3SSAKLE1YFT' where id=6; -update noar ti set b2='86B4OYLL764FGSPLRTJW3SSAKLE1YFT' where id=6; -update noar tt set v0='I' where id=7; -update noar ti set v0='I' where id=7; -update noar tt set b0='L1X29TN9QIECOHR2UFKYB12DMQV0O' where id=7; -update noar ti set b0='L1X29TN9QIECOHR2UFKYB12DMQV0O' where id=7; -update noar tt set v0='EJRE4JFNAOAK847M55GLUWBNWE' where id=7; -update noar ti set v0='EJRE4JFNAOAK847M55GLUWBNWE' where id=7; -update noar tt set b1='UKTH3YBA3W1771A' where id=7; -update noar ti set b1='UKTH3YBA3W1771A' where id=7; -update noar tt set v0='OWCQ6OYM0BXPA3F18K0ZAZIGHKOD' where id=7; -update noar ti set v0='OWCQ6OYM0BXPA3F18K0ZAZIGHKOD' where id=7; -update noar tt set b2='MJMJIHWB6QJNN8RBO67FHA' where id=7; -update noar ti set b2='MJMJIHWB6QJNN8RBO67FHA' where id=7; -update noar tt set v0='UAIS15X33YK46N' where id=8; -update noar ti set v0='UAIS15X33YK46N' where id=8; -update noar tt set b0='7ATDEB4XSSL8MYRN' where id=8; -update noar ti set b0='7ATDEB4XSSL8MYRN' where id=8; -update noar tt set v0='MV5LZ4XYDJ' where id=8; -update noar ti set v0='MV5LZ4XYDJ' where id=8; -update noar tt set b1='5T' where id=8; -update noar ti set b1='5T' where id=8; -update noar tt set v0='NHS2853EAA' where id=8; -update noar ti set v0='NHS2853EAA' where id=8; -update noar tt set b2='H7F8K8NZOFTNW6X1VJ6LAC' where id=8; -update noar ti set b2='H7F8K8NZOFTNW6X1VJ6LAC' where id=8; -update noar tt set v0='0AE69HV' where id=9; -update noar ti set v0='0AE69HV' where id=9; -update noar tt set b0='RSKND4QZZ8U98W80Q' where id=9; -update noar ti set b0='RSKND4QZZ8U98W80Q' where id=9; -update noar tt set v0='417IGVZ8QR8ER9Q2U' where id=9; -update noar ti set v0='417IGVZ8QR8ER9Q2U' where id=9; -update noar tt set b1='ABR1A1MUSQHULUDYEP7NVNC9ZJ5' where id=9; -update noar ti set b1='ABR1A1MUSQHULUDYEP7NVNC9ZJ5' where id=9; -update noar tt set v0='PQRCI081DPZJGQYNV8KZHN' where id=9; -update noar ti set v0='PQRCI081DPZJGQYNV8KZHN' where id=9; -update noar tt set b2='505DPHW1EXFMR' where id=9; -update noar ti set b2='505DPHW1EXFMR' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 tinyblob null, - b1 blob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='WDHRS33KNLU32YXJP21A768C' where id=1; -update noar ti set v0='WDHRS33KNLU32YXJP21A768C' where id=1; -update noar tt set b0='MT48Z8JVYERY' where id=1; -update noar ti set b0='MT48Z8JVYERY' where id=1; -update noar tt set v0='IBO854VLI1' where id=1; -update noar ti set v0='IBO854VLI1' where id=1; -update noar tt set b1='MOZBITZUWASZ9JYCMX80' where id=1; -update noar ti set b1='MOZBITZUWASZ9JYCMX80' where id=1; -update noar tt set v0='RIF9NKVN88ENLI75WZ2OXDL92EQQWIW' where id=1; -update noar ti set v0='RIF9NKVN88ENLI75WZ2OXDL92EQQWIW' where id=1; -update noar tt set b2='K8SXDWAT7' where id=1; -update noar ti set b2='K8SXDWAT7' where id=1; -update noar tt set v0='X22TLC9EGL16' where id=2; -update noar ti set v0='X22TLC9EGL16' where id=2; -update noar tt set b0='08L4YG2DL6QRHQ0XO9S84GR' where id=2; -update noar ti set b0='08L4YG2DL6QRHQ0XO9S84GR' where id=2; -update noar tt set v0='ILB75339J325GRXFYRFFWWN9WEDA3' where id=2; -update noar ti set v0='ILB75339J325GRXFYRFFWWN9WEDA3' where id=2; -update noar tt set b1='MIYQRPKROHMWFRPBJH8Z9TFC' where id=2; -update noar ti set b1='MIYQRPKROHMWFRPBJH8Z9TFC' where id=2; -update noar tt set v0='VGZMHDKLJD4' where id=2; -update noar ti set v0='VGZMHDKLJD4' where id=2; -update noar tt set b2='1' where id=2; -update noar ti set b2='1' where id=2; -update noar tt set v0='9TJW89D1O' where id=3; -update noar ti set v0='9TJW89D1O' where id=3; -update noar tt set b0='ADJJ0Q417KDF39P96SLWHVTALR1X' where id=3; -update noar ti set b0='ADJJ0Q417KDF39P96SLWHVTALR1X' where id=3; -update noar tt set v0='P2V' where id=3; -update noar ti set v0='P2V' where id=3; -update noar tt set b1='BMQN6LGMA96C381159TO5AP9K' where id=3; -update noar ti set b1='BMQN6LGMA96C381159TO5AP9K' where id=3; -update noar tt set v0='XHA42IO' where id=3; -update noar ti set v0='XHA42IO' where id=3; -update noar tt set b2='P2W54ORD96LT3SNG84F1' where id=3; -update noar ti set b2='P2W54ORD96LT3SNG84F1' where id=3; -update noar tt set v0='NGGBXXO71SJZOTSQXI1NG6UCHCN91' where id=4; -update noar ti set v0='NGGBXXO71SJZOTSQXI1NG6UCHCN91' where id=4; -update noar tt set b0='L1ZPXHQ1JL' where id=4; -update noar ti set b0='L1ZPXHQ1JL' where id=4; -update noar tt set v0='O6BD1XKCK5FBOY6H54ETMMRN6' where id=4; -update noar ti set v0='O6BD1XKCK5FBOY6H54ETMMRN6' where id=4; -update noar tt set b1='UH3BS8VNNKX3ASL9' where id=4; -update noar ti set b1='UH3BS8VNNKX3ASL9' where id=4; -update noar tt set v0='GPBTD6L8RYD5QCIPK6VD3HZ8IGTUGA' where id=4; -update noar ti set v0='GPBTD6L8RYD5QCIPK6VD3HZ8IGTUGA' where id=4; -update noar tt set b2='9AZIG1SYZ9HG' where id=4; -update noar ti set b2='9AZIG1SYZ9HG' where id=4; -update noar tt set v0='NNZLTH' where id=5; -update noar ti set v0='NNZLTH' where id=5; -update noar tt set b0='94BZ3UMM7SWIRCHEDYFII' where id=5; -update noar ti set b0='94BZ3UMM7SWIRCHEDYFII' where id=5; -update noar tt set v0='HY2UPSP89T4BENWNM21FV5FQDLC' where id=5; -update noar ti set v0='HY2UPSP89T4BENWNM21FV5FQDLC' where id=5; -update noar tt set b1='I1TDJM' where id=5; -update noar ti set b1='I1TDJM' where id=5; -update noar tt set v0='CG6EOB89HUB7RA6RI64JK4O' where id=5; -update noar ti set v0='CG6EOB89HUB7RA6RI64JK4O' where id=5; -update noar tt set b2='ALSO4' where id=5; -update noar ti set b2='ALSO4' where id=5; -update noar tt set v0='UAB5AOOZLXNN7BXTEBDB' where id=6; -update noar ti set v0='UAB5AOOZLXNN7BXTEBDB' where id=6; -update noar tt set b0='I7' where id=6; -update noar ti set b0='I7' where id=6; -update noar tt set v0='8AEU5SN6QL4HZ3ZRY52GX2LBJIL' where id=6; -update noar ti set v0='8AEU5SN6QL4HZ3ZRY52GX2LBJIL' where id=6; -update noar tt set b1='UEPO6' where id=6; -update noar ti set b1='UEPO6' where id=6; -update noar tt set v0='CRK9W1DT' where id=6; -update noar ti set v0='CRK9W1DT' where id=6; -update noar tt set b2='P9Y7TLVVIFW8' where id=6; -update noar ti set b2='P9Y7TLVVIFW8' where id=6; -update noar tt set v0='XT5J63Z5H38I3TQWP3WDUO355V1J' where id=7; -update noar ti set v0='XT5J63Z5H38I3TQWP3WDUO355V1J' where id=7; -update noar tt set b0='20YY3GGQH2Z' where id=7; -update noar ti set b0='20YY3GGQH2Z' where id=7; -update noar tt set v0='ZE09IM92WRDK4FLPU73B8MYQ8KEFZB' where id=7; -update noar ti set v0='ZE09IM92WRDK4FLPU73B8MYQ8KEFZB' where id=7; -update noar tt set b1='LQ72X3FWAC2XW5KJDC3IU9PAUJVR4' where id=7; -update noar ti set b1='LQ72X3FWAC2XW5KJDC3IU9PAUJVR4' where id=7; -update noar tt set v0='U' where id=7; -update noar ti set v0='U' where id=7; -update noar tt set b2='2ROGFED5' where id=7; -update noar ti set b2='2ROGFED5' where id=7; -update noar tt set v0='ZONDL0IBOLZDU9H273IVP74YMNOI3BS9' where id=8; -update noar ti set v0='ZONDL0IBOLZDU9H273IVP74YMNOI3BS9' where id=8; -update noar tt set b0='6O25X1RVAIHQ' where id=8; -update noar ti set b0='6O25X1RVAIHQ' where id=8; -update noar tt set v0='6ZD6IJP43TW' where id=8; -update noar ti set v0='6ZD6IJP43TW' where id=8; -update noar tt set b1='6I0S1FVOFA8RB0' where id=8; -update noar ti set b1='6I0S1FVOFA8RB0' where id=8; -update noar tt set v0='RLXHM9HN2LM7T026A05ITRDTV' where id=8; -update noar ti set v0='RLXHM9HN2LM7T026A05ITRDTV' where id=8; -update noar tt set b2='WGT957DVXGCAA7HT' where id=8; -update noar ti set b2='WGT957DVXGCAA7HT' where id=8; -update noar tt set v0='PASDGS5HN57VJM2UMWJ388' where id=9; -update noar ti set v0='PASDGS5HN57VJM2UMWJ388' where id=9; -update noar tt set b0='R3HCKR5HHB7G591NWRUHM0' where id=9; -update noar ti set b0='R3HCKR5HHB7G591NWRUHM0' where id=9; -update noar tt set v0='3Q4UCD7DOJJ1DQFRTEUVZU4IFB' where id=9; -update noar ti set v0='3Q4UCD7DOJJ1DQFRTEUVZU4IFB' where id=9; -update noar tt set b1='SCW0N5NDPKB0NHK9TJ' where id=9; -update noar ti set b1='SCW0N5NDPKB0NHK9TJ' where id=9; -update noar tt set v0='2YAYTWYB2XF3RBQYMSA78X5WRCWS' where id=9; -update noar ti set v0='2YAYTWYB2XF3RBQYMSA78X5WRCWS' where id=9; -update noar tt set b2='U8W5KH07VVXYT4LRTUAFIPCVII7YPS8F' where id=9; -update noar ti set b2='U8W5KH07VVXYT4LRTUAFIPCVII7YPS8F' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 tinyblob null, - b1 blob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='NTBA40QD64OZI9SOUMH' where id=1; -update noar ti set v0='NTBA40QD64OZI9SOUMH' where id=1; -update noar tt set b0='Q4LM' where id=1; -update noar ti set b0='Q4LM' where id=1; -update noar tt set v0='UD6C9R8TS93UM62PGW51KV78' where id=1; -update noar ti set v0='UD6C9R8TS93UM62PGW51KV78' where id=1; -update noar tt set b1='WTU0GJ3QIS4M' where id=1; -update noar ti set b1='WTU0GJ3QIS4M' where id=1; -update noar tt set v0='0AJU' where id=1; -update noar ti set v0='0AJU' where id=1; -update noar tt set b2='U803RIBS0KKX3VXBW' where id=1; -update noar ti set b2='U803RIBS0KKX3VXBW' where id=1; -update noar tt set v0='XW82C4PGSSYF8A85Z3TB8LTH07GU' where id=2; -update noar ti set v0='XW82C4PGSSYF8A85Z3TB8LTH07GU' where id=2; -update noar tt set b0='6CWV' where id=2; -update noar ti set b0='6CWV' where id=2; -update noar tt set v0='CPE' where id=2; -update noar ti set v0='CPE' where id=2; -update noar tt set b1='09I17I8ZA4O33EXT4ANNMA0Y5' where id=2; -update noar ti set b1='09I17I8ZA4O33EXT4ANNMA0Y5' where id=2; -update noar tt set v0='R' where id=2; -update noar ti set v0='R' where id=2; -update noar tt set b2='OABDSQSZ14' where id=2; -update noar ti set b2='OABDSQSZ14' where id=2; -update noar tt set v0='LKZ7QI0PERNZQY' where id=3; -update noar ti set v0='LKZ7QI0PERNZQY' where id=3; -update noar tt set b0='RUPT58G4NO9KBTDLO2T7AM7T' where id=3; -update noar ti set b0='RUPT58G4NO9KBTDLO2T7AM7T' where id=3; -update noar tt set v0='1E4REOGM52K' where id=3; -update noar ti set v0='1E4REOGM52K' where id=3; -update noar tt set b1='HYO3NDK2' where id=3; -update noar ti set b1='HYO3NDK2' where id=3; -update noar tt set v0='SC1Z' where id=3; -update noar ti set v0='SC1Z' where id=3; -update noar tt set b2='0' where id=3; -update noar ti set b2='0' where id=3; -update noar tt set v0='C' where id=4; -update noar ti set v0='C' where id=4; -update noar tt set b0='ARJMG8ZXXRKLDXZ' where id=4; -update noar ti set b0='ARJMG8ZXXRKLDXZ' where id=4; -update noar tt set v0='ZP1R308EZ87A82Q' where id=4; -update noar ti set v0='ZP1R308EZ87A82Q' where id=4; -update noar tt set b1='GN6BS59HGGAGDO' where id=4; -update noar ti set b1='GN6BS59HGGAGDO' where id=4; -update noar tt set v0='4DXJ8N43JPC57LX1A8T3OSM28KI' where id=4; -update noar ti set v0='4DXJ8N43JPC57LX1A8T3OSM28KI' where id=4; -update noar tt set b2='G8YQXBW25N' where id=4; -update noar ti set b2='G8YQXBW25N' where id=4; -update noar tt set v0='2679RC1V' where id=5; -update noar ti set v0='2679RC1V' where id=5; -update noar tt set b0='BBOF' where id=5; -update noar ti set b0='BBOF' where id=5; -update noar tt set v0='E2HNQTT8I' where id=5; -update noar ti set v0='E2HNQTT8I' where id=5; -update noar tt set b1='1AHUEVCVNZVQYVO7SX2VZE5' where id=5; -update noar ti set b1='1AHUEVCVNZVQYVO7SX2VZE5' where id=5; -update noar tt set v0='PXAWT9OF9D' where id=5; -update noar ti set v0='PXAWT9OF9D' where id=5; -update noar tt set b2='RUAFNTPYGD3JQGOVWLHLBP8KI' where id=5; -update noar ti set b2='RUAFNTPYGD3JQGOVWLHLBP8KI' where id=5; -update noar tt set v0='6QR3JYQHJLY6MCTG3BLZZ3K4TMJVGE6' where id=6; -update noar ti set v0='6QR3JYQHJLY6MCTG3BLZZ3K4TMJVGE6' where id=6; -update noar tt set b0='C80B6B4RRADS9XYF97LD4XOG' where id=6; -update noar ti set b0='C80B6B4RRADS9XYF97LD4XOG' where id=6; -update noar tt set v0='PJKX0YZ4SSIL' where id=6; -update noar ti set v0='PJKX0YZ4SSIL' where id=6; -update noar tt set b1='HWGFOS06UTONKW7MA9GAC1TXDZZM37PJ' where id=6; -update noar ti set b1='HWGFOS06UTONKW7MA9GAC1TXDZZM37PJ' where id=6; -update noar tt set v0='G' where id=6; -update noar ti set v0='G' where id=6; -update noar tt set b2='H3LS006JS4' where id=6; -update noar ti set b2='H3LS006JS4' where id=6; -update noar tt set v0='94KUF' where id=7; -update noar ti set v0='94KUF' where id=7; -update noar tt set b0='MH3ETLZNK4HLK68QAQZRRNO5' where id=7; -update noar ti set b0='MH3ETLZNK4HLK68QAQZRRNO5' where id=7; -update noar tt set v0='SPAFV9SF4ZQTUSGFRFF1A9' where id=7; -update noar ti set v0='SPAFV9SF4ZQTUSGFRFF1A9' where id=7; -update noar tt set b1='2' where id=7; -update noar ti set b1='2' where id=7; -update noar tt set v0='35RV386OX75TTP' where id=7; -update noar ti set v0='35RV386OX75TTP' where id=7; -update noar tt set b2='T3JEQU9QQ6P1XSXK3SJ6I' where id=7; -update noar ti set b2='T3JEQU9QQ6P1XSXK3SJ6I' where id=7; -update noar tt set v0='J8KONOV8F4PE' where id=8; -update noar ti set v0='J8KONOV8F4PE' where id=8; -update noar tt set b0='DA56BXX0MSX6PZDCI3IE' where id=8; -update noar ti set b0='DA56BXX0MSX6PZDCI3IE' where id=8; -update noar tt set v0='LDHS1OLTXTVZA852X' where id=8; -update noar ti set v0='LDHS1OLTXTVZA852X' where id=8; -update noar tt set b1='244JSQ3DWZ4B6ICJO2YUANJPZ' where id=8; -update noar ti set b1='244JSQ3DWZ4B6ICJO2YUANJPZ' where id=8; -update noar tt set v0='93QP6V6E5R21NZFPEN7JC' where id=8; -update noar ti set v0='93QP6V6E5R21NZFPEN7JC' where id=8; -update noar tt set b2='TIQQF5TEZ' where id=8; -update noar ti set b2='TIQQF5TEZ' where id=8; -update noar tt set v0='58JV6TXHDF4W62HWKHEUSZMZ' where id=9; -update noar ti set v0='58JV6TXHDF4W62HWKHEUSZMZ' where id=9; -update noar tt set b0='Y917I60YNKO2V7DERIC0OGE62J9RR' where id=9; -update noar ti set b0='Y917I60YNKO2V7DERIC0OGE62J9RR' where id=9; -update noar tt set v0='0UHU3' where id=9; -update noar ti set v0='0UHU3' where id=9; -update noar tt set b1='Z5U4DA9C8E2FSF2MSG0KJ' where id=9; -update noar ti set b1='Z5U4DA9C8E2FSF2MSG0KJ' where id=9; -update noar tt set v0='7G34N83XULZK89V8MKVKHJEY' where id=9; -update noar ti set v0='7G34N83XULZK89V8MKVKHJEY' where id=9; -update noar tt set b2='708DN748AGPTIB4YK' where id=9; -update noar ti set b2='708DN748AGPTIB4YK' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 tinyblob not null, - b1 blob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='TU6AGUZJNNAZ7MW2N2UQ' where id=1; -update noar ti set v0='TU6AGUZJNNAZ7MW2N2UQ' where id=1; -update noar tt set b0='FL9RXSX' where id=1; -update noar ti set b0='FL9RXSX' where id=1; -update noar tt set v0='3K58VLTO58QYNOJNLHCV3LNZS' where id=1; -update noar ti set v0='3K58VLTO58QYNOJNLHCV3LNZS' where id=1; -update noar tt set b1='NN19J06QIO0UI8' where id=1; -update noar ti set b1='NN19J06QIO0UI8' where id=1; -update noar tt set v0='0671GVZ45D' where id=1; -update noar ti set v0='0671GVZ45D' where id=1; -update noar tt set b2='VOQLA6NMSO7XKGF6Y4CMS' where id=1; -update noar ti set b2='VOQLA6NMSO7XKGF6Y4CMS' where id=1; -update noar tt set v0='4MQ27LH8MN1F1DC9HZMDIMOKX0P' where id=2; -update noar ti set v0='4MQ27LH8MN1F1DC9HZMDIMOKX0P' where id=2; -update noar tt set b0='DGOOLVFI1' where id=2; -update noar ti set b0='DGOOLVFI1' where id=2; -update noar tt set v0='GJPSHLI' where id=2; -update noar ti set v0='GJPSHLI' where id=2; -update noar tt set b1='BZOXOYVV4BDOERKF4UY' where id=2; -update noar ti set b1='BZOXOYVV4BDOERKF4UY' where id=2; -update noar tt set v0='9BT3K9GY6LUSENS0J6UVDQQ5IGO' where id=2; -update noar ti set v0='9BT3K9GY6LUSENS0J6UVDQQ5IGO' where id=2; -update noar tt set b2='0DFSFATOIB' where id=2; -update noar ti set b2='0DFSFATOIB' where id=2; -update noar tt set v0='2' where id=3; -update noar ti set v0='2' where id=3; -update noar tt set b0='ETKXJ9P0V138UQLZ6' where id=3; -update noar ti set b0='ETKXJ9P0V138UQLZ6' where id=3; -update noar tt set v0='GYE2910FGUIVYQDYI663P4LW2LK3S' where id=3; -update noar ti set v0='GYE2910FGUIVYQDYI663P4LW2LK3S' where id=3; -update noar tt set b1='L' where id=3; -update noar ti set b1='L' where id=3; -update noar tt set v0='VAARRI' where id=3; -update noar ti set v0='VAARRI' where id=3; -update noar tt set b2='A' where id=3; -update noar ti set b2='A' where id=3; -update noar tt set v0='HWUE5JK9PRW27NAZV' where id=4; -update noar ti set v0='HWUE5JK9PRW27NAZV' where id=4; -update noar tt set b0='J5XQ6ISFQGK0MCXS3' where id=4; -update noar ti set b0='J5XQ6ISFQGK0MCXS3' where id=4; -update noar tt set v0='Z5STV9X' where id=4; -update noar ti set v0='Z5STV9X' where id=4; -update noar tt set b1='SEUNDD' where id=4; -update noar ti set b1='SEUNDD' where id=4; -update noar tt set v0='TQ0RW9DNG' where id=4; -update noar ti set v0='TQ0RW9DNG' where id=4; -update noar tt set b2='TPG9ZBD5S38EB' where id=4; -update noar ti set b2='TPG9ZBD5S38EB' where id=4; -update noar tt set v0='Y026IPMF3FPDEVS8DRU' where id=5; -update noar ti set v0='Y026IPMF3FPDEVS8DRU' where id=5; -update noar tt set b0='E4F0GXRULUMQ4CD8X08F50NJ' where id=5; -update noar ti set b0='E4F0GXRULUMQ4CD8X08F50NJ' where id=5; -update noar tt set v0='Q8ITIU8FFQMY8VI8YAIYX9JE473' where id=5; -update noar ti set v0='Q8ITIU8FFQMY8VI8YAIYX9JE473' where id=5; -update noar tt set b1='B85Z57UMWSFJLIIRM18FL4153L3' where id=5; -update noar ti set b1='B85Z57UMWSFJLIIRM18FL4153L3' where id=5; -update noar tt set v0='NE6IRZS' where id=5; -update noar ti set v0='NE6IRZS' where id=5; -update noar tt set b2='GKMVZB26W90COI5NIYXQ4G9IS9H5O1' where id=5; -update noar ti set b2='GKMVZB26W90COI5NIYXQ4G9IS9H5O1' where id=5; -update noar tt set v0='KC41VLR3T0' where id=6; -update noar ti set v0='KC41VLR3T0' where id=6; -update noar tt set b0='FLBLCNSV' where id=6; -update noar ti set b0='FLBLCNSV' where id=6; -update noar tt set v0='5ME6W4JJSG5GPTTPNK2TCURNWP' where id=6; -update noar ti set v0='5ME6W4JJSG5GPTTPNK2TCURNWP' where id=6; -update noar tt set b1='UA11OKFXPVQERX2GT3NQ1ZKF' where id=6; -update noar ti set b1='UA11OKFXPVQERX2GT3NQ1ZKF' where id=6; -update noar tt set v0='4B7FQBLJEU9KMAE7RHCJU8' where id=6; -update noar ti set v0='4B7FQBLJEU9KMAE7RHCJU8' where id=6; -update noar tt set b2='W60F2' where id=6; -update noar ti set b2='W60F2' where id=6; -update noar tt set v0='M' where id=7; -update noar ti set v0='M' where id=7; -update noar tt set b0='4W' where id=7; -update noar ti set b0='4W' where id=7; -update noar tt set v0='6FEVIL132IP5NS' where id=7; -update noar ti set v0='6FEVIL132IP5NS' where id=7; -update noar tt set b1='2PREOOKF7I' where id=7; -update noar ti set b1='2PREOOKF7I' where id=7; -update noar tt set v0='CD3DF9GLUASVAW1H' where id=7; -update noar ti set v0='CD3DF9GLUASVAW1H' where id=7; -update noar tt set b2='CGPUGUIZO7IPE' where id=7; -update noar ti set b2='CGPUGUIZO7IPE' where id=7; -update noar tt set v0='695UXWCGK' where id=8; -update noar ti set v0='695UXWCGK' where id=8; -update noar tt set b0='JOVPMBRAQF' where id=8; -update noar ti set b0='JOVPMBRAQF' where id=8; -update noar tt set v0='FC6NCXPX7TCMV42ODDUFK5UT6F7Q' where id=8; -update noar ti set v0='FC6NCXPX7TCMV42ODDUFK5UT6F7Q' where id=8; -update noar tt set b1='ETOJUFCE2YVPNBX7J' where id=8; -update noar ti set b1='ETOJUFCE2YVPNBX7J' where id=8; -update noar tt set v0='2' where id=8; -update noar ti set v0='2' where id=8; -update noar tt set b2='B7L9C6VIY9H94QVAADP6XXF6NSO' where id=8; -update noar ti set b2='B7L9C6VIY9H94QVAADP6XXF6NSO' where id=8; -update noar tt set v0='6KGBP' where id=9; -update noar ti set v0='6KGBP' where id=9; -update noar tt set b0='MFJNPF81H' where id=9; -update noar ti set b0='MFJNPF81H' where id=9; -update noar tt set v0='QHZ1CW3VWA' where id=9; -update noar ti set v0='QHZ1CW3VWA' where id=9; -update noar tt set b1='60HGFVDQ9' where id=9; -update noar ti set b1='60HGFVDQ9' where id=9; -update noar tt set v0='7JXN5T3AEDJKU2H3MW8' where id=9; -update noar ti set v0='7JXN5T3AEDJKU2H3MW8' where id=9; -update noar tt set b2='A9' where id=9; -update noar ti set b2='A9' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 tinyblob not null, - b1 blob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='ML14I87M52OI3LOV' where id=1; -update noar ti set v0='ML14I87M52OI3LOV' where id=1; -update noar tt set b0='T2LNXF' where id=1; -update noar ti set b0='T2LNXF' where id=1; -update noar tt set v0='COW30MX' where id=1; -update noar ti set v0='COW30MX' where id=1; -update noar tt set b1='56GS6CYR054HPMAGJ4RH7J' where id=1; -update noar ti set b1='56GS6CYR054HPMAGJ4RH7J' where id=1; -update noar tt set v0='O8V74TFYBTIJY5HBNFZRK' where id=1; -update noar ti set v0='O8V74TFYBTIJY5HBNFZRK' where id=1; -update noar tt set b2='R2HV8TFSBPO9H25DZC4NDJNBKBK' where id=1; -update noar ti set b2='R2HV8TFSBPO9H25DZC4NDJNBKBK' where id=1; -update noar tt set v0='0M945P8TLQCZA5' where id=2; -update noar ti set v0='0M945P8TLQCZA5' where id=2; -update noar tt set b0='TMQSAXK3O6CV2VWUN8EGU' where id=2; -update noar ti set b0='TMQSAXK3O6CV2VWUN8EGU' where id=2; -update noar tt set v0='2BL1YR8ICTX9QJ91Y1P0V0S0FLXCAE' where id=2; -update noar ti set v0='2BL1YR8ICTX9QJ91Y1P0V0S0FLXCAE' where id=2; -update noar tt set b1='CSP8Y9V9E84MJLYWIYPF25JG87L0II' where id=2; -update noar ti set b1='CSP8Y9V9E84MJLYWIYPF25JG87L0II' where id=2; -update noar tt set v0='QNY1AVCIOXDBR0' where id=2; -update noar ti set v0='QNY1AVCIOXDBR0' where id=2; -update noar tt set b2='KP1CKU61O697A01X1EBIHXJ' where id=2; -update noar ti set b2='KP1CKU61O697A01X1EBIHXJ' where id=2; -update noar tt set v0='R95XHB9Z4X' where id=3; -update noar ti set v0='R95XHB9Z4X' where id=3; -update noar tt set b0='W978LDZMI4MB' where id=3; -update noar ti set b0='W978LDZMI4MB' where id=3; -update noar tt set v0='P5F1OZWC0LD38GND4D6I4M4URG3J2R' where id=3; -update noar ti set v0='P5F1OZWC0LD38GND4D6I4M4URG3J2R' where id=3; -update noar tt set b1='QXAQYTQZI' where id=3; -update noar ti set b1='QXAQYTQZI' where id=3; -update noar tt set v0='E7BQ2O7FO169' where id=3; -update noar ti set v0='E7BQ2O7FO169' where id=3; -update noar tt set b2='QE79JY1OL6F8SBI698' where id=3; -update noar ti set b2='QE79JY1OL6F8SBI698' where id=3; -update noar tt set v0='731ZKG3HSTTV5Q3C' where id=4; -update noar ti set v0='731ZKG3HSTTV5Q3C' where id=4; -update noar tt set b0='YQRTSFL4I6VQT9YSPP9ZUX63VVPCJ' where id=4; -update noar ti set b0='YQRTSFL4I6VQT9YSPP9ZUX63VVPCJ' where id=4; -update noar tt set v0='L3HTQW1NYIC0JVIW07' where id=4; -update noar ti set v0='L3HTQW1NYIC0JVIW07' where id=4; -update noar tt set b1='QNQT640' where id=4; -update noar ti set b1='QNQT640' where id=4; -update noar tt set v0='9EN0UFDTMKH9Z8QXMC6GIO' where id=4; -update noar ti set v0='9EN0UFDTMKH9Z8QXMC6GIO' where id=4; -update noar tt set b2='Q2AJ9GTIIEGIP4XYJXGUZGMSU' where id=4; -update noar ti set b2='Q2AJ9GTIIEGIP4XYJXGUZGMSU' where id=4; -update noar tt set v0='MSRAE8U85OQ6DH4GR' where id=5; -update noar ti set v0='MSRAE8U85OQ6DH4GR' where id=5; -update noar tt set b0='WKM' where id=5; -update noar ti set b0='WKM' where id=5; -update noar tt set v0='TC3S69MW6Y' where id=5; -update noar ti set v0='TC3S69MW6Y' where id=5; -update noar tt set b1='VPFE729THU' where id=5; -update noar ti set b1='VPFE729THU' where id=5; -update noar tt set v0='RQPXLU' where id=5; -update noar ti set v0='RQPXLU' where id=5; -update noar tt set b2='DPQ5VOOHOQH991K91M' where id=5; -update noar ti set b2='DPQ5VOOHOQH991K91M' where id=5; -update noar tt set v0='578R66NDCDOTU7K3E6Q' where id=6; -update noar ti set v0='578R66NDCDOTU7K3E6Q' where id=6; -update noar tt set b0='NL3QLUXO30S9YS8U84E23MVDYFIHZI' where id=6; -update noar ti set b0='NL3QLUXO30S9YS8U84E23MVDYFIHZI' where id=6; -update noar tt set v0='UND1DXNIOZ3A3XXBJLP' where id=6; -update noar ti set v0='UND1DXNIOZ3A3XXBJLP' where id=6; -update noar tt set b1='XKRDXYOAD7C7JG12QWG8E' where id=6; -update noar ti set b1='XKRDXYOAD7C7JG12QWG8E' where id=6; -update noar tt set v0='Y0XWR' where id=6; -update noar ti set v0='Y0XWR' where id=6; -update noar tt set b2='CFVG5P6V32N0BQB' where id=6; -update noar ti set b2='CFVG5P6V32N0BQB' where id=6; -update noar tt set v0='A0JJQPEMKG9I0YM8RQ0S0W' where id=7; -update noar ti set v0='A0JJQPEMKG9I0YM8RQ0S0W' where id=7; -update noar tt set b0='J616TJ3PI' where id=7; -update noar ti set b0='J616TJ3PI' where id=7; -update noar tt set v0='TEW3GCB8J7NELIG8BFNO44BU61E4' where id=7; -update noar ti set v0='TEW3GCB8J7NELIG8BFNO44BU61E4' where id=7; -update noar tt set b1='SD7JBTBO4MFD' where id=7; -update noar ti set b1='SD7JBTBO4MFD' where id=7; -update noar tt set v0='0E4S75CQ' where id=7; -update noar ti set v0='0E4S75CQ' where id=7; -update noar tt set b2='TYPD5454GII' where id=7; -update noar ti set b2='TYPD5454GII' where id=7; -update noar tt set v0='7B3DJPI7UW986UWKMNW9SF0MKDEEWT' where id=8; -update noar ti set v0='7B3DJPI7UW986UWKMNW9SF0MKDEEWT' where id=8; -update noar tt set b0='U' where id=8; -update noar ti set b0='U' where id=8; -update noar tt set v0='RRHU3ZNOK3TECPWR8M4PKTGZBN2TQ' where id=8; -update noar ti set v0='RRHU3ZNOK3TECPWR8M4PKTGZBN2TQ' where id=8; -update noar tt set b1='IF5Q7D7386XB5W702' where id=8; -update noar ti set b1='IF5Q7D7386XB5W702' where id=8; -update noar tt set v0='HZOWIY1VLZ2RMP' where id=8; -update noar ti set v0='HZOWIY1VLZ2RMP' where id=8; -update noar tt set b2='2E' where id=8; -update noar ti set b2='2E' where id=8; -update noar tt set v0='D70ZQ2CR172AUAH9' where id=9; -update noar ti set v0='D70ZQ2CR172AUAH9' where id=9; -update noar tt set b0='U84LRLN262APJLEUPBEBDHY' where id=9; -update noar ti set b0='U84LRLN262APJLEUPBEBDHY' where id=9; -update noar tt set v0='RHCMI' where id=9; -update noar ti set v0='RHCMI' where id=9; -update noar tt set b1='MWM' where id=9; -update noar ti set b1='MWM' where id=9; -update noar tt set v0='UFHKTSEXQ67JF8HUYH1DTB' where id=9; -update noar ti set v0='UFHKTSEXQ67JF8HUYH1DTB' where id=9; -update noar tt set b2='MDU8' where id=9; -update noar ti set b2='MDU8' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 tinyblob null, - b1 mediumblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='1VRMFX4G4AFLE4E5MY80XC5' where id=1; -update noar ti set v0='1VRMFX4G4AFLE4E5MY80XC5' where id=1; -update noar tt set b0='95WWKVA6F9FI8Q' where id=1; -update noar ti set b0='95WWKVA6F9FI8Q' where id=1; -update noar tt set v0='Q92TF1A61BHBRNJS7EXPI2I6' where id=1; -update noar ti set v0='Q92TF1A61BHBRNJS7EXPI2I6' where id=1; -update noar tt set b1='6TQB8PLTSONSD5TSE5NWM' where id=1; -update noar ti set b1='6TQB8PLTSONSD5TSE5NWM' where id=1; -update noar tt set v0='7QEMA86' where id=1; -update noar ti set v0='7QEMA86' where id=1; -update noar tt set b2='45QK8EPONXV' where id=1; -update noar ti set b2='45QK8EPONXV' where id=1; -update noar tt set v0='WZUKY9G5QH1KS4O05TN9QS5HZVJU6FQ' where id=2; -update noar ti set v0='WZUKY9G5QH1KS4O05TN9QS5HZVJU6FQ' where id=2; -update noar tt set b0='Z5OFP9S8' where id=2; -update noar ti set b0='Z5OFP9S8' where id=2; -update noar tt set v0='TU3STU3KUFBCFYIRYWEU' where id=2; -update noar ti set v0='TU3STU3KUFBCFYIRYWEU' where id=2; -update noar tt set b1='BRE0DWJNFEWE9YRH' where id=2; -update noar ti set b1='BRE0DWJNFEWE9YRH' where id=2; -update noar tt set v0='J7IEQE5703' where id=2; -update noar ti set v0='J7IEQE5703' where id=2; -update noar tt set b2='C107VTIDCQ8' where id=2; -update noar ti set b2='C107VTIDCQ8' where id=2; -update noar tt set v0='TCQLXXI8L80Z51K3C52O1P42SK4HD' where id=3; -update noar ti set v0='TCQLXXI8L80Z51K3C52O1P42SK4HD' where id=3; -update noar tt set b0='NSR9322' where id=3; -update noar ti set b0='NSR9322' where id=3; -update noar tt set v0='ZUZPG4LPXP723W5XIP3E6WEPVJAV' where id=3; -update noar ti set v0='ZUZPG4LPXP723W5XIP3E6WEPVJAV' where id=3; -update noar tt set b1='01PAEMGO52JMRX3EQQQPDQJ' where id=3; -update noar ti set b1='01PAEMGO52JMRX3EQQQPDQJ' where id=3; -update noar tt set v0='EK47LGXJP7731RW5V4Y' where id=3; -update noar ti set v0='EK47LGXJP7731RW5V4Y' where id=3; -update noar tt set b2='TEQLRLO0I72QHO1QMBI6DVKX1I' where id=3; -update noar ti set b2='TEQLRLO0I72QHO1QMBI6DVKX1I' where id=3; -update noar tt set v0='93OREX1ON9856K418AN8THCUHBO9VKC' where id=4; -update noar ti set v0='93OREX1ON9856K418AN8THCUHBO9VKC' where id=4; -update noar tt set b0='H21OQD37G4AVZDPEQ' where id=4; -update noar ti set b0='H21OQD37G4AVZDPEQ' where id=4; -update noar tt set v0='01FX4KUTJAN7' where id=4; -update noar ti set v0='01FX4KUTJAN7' where id=4; -update noar tt set b1='S' where id=4; -update noar ti set b1='S' where id=4; -update noar tt set v0='N8W' where id=4; -update noar ti set v0='N8W' where id=4; -update noar tt set b2='C67OG9AQW2XHSX788EC8M7F6QCM' where id=4; -update noar ti set b2='C67OG9AQW2XHSX788EC8M7F6QCM' where id=4; -update noar tt set v0='K6LC3SY0XEENCU4K6ZZ' where id=5; -update noar ti set v0='K6LC3SY0XEENCU4K6ZZ' where id=5; -update noar tt set b0='0974UPAJ3XD891G0' where id=5; -update noar ti set b0='0974UPAJ3XD891G0' where id=5; -update noar tt set v0='5BKCZY9NSXADUMATIWDY' where id=5; -update noar ti set v0='5BKCZY9NSXADUMATIWDY' where id=5; -update noar tt set b1='4T055CZ9LV8JJSWRNQBY379G' where id=5; -update noar ti set b1='4T055CZ9LV8JJSWRNQBY379G' where id=5; -update noar tt set v0='Z8VLTI10CF49ZQWN3' where id=5; -update noar ti set v0='Z8VLTI10CF49ZQWN3' where id=5; -update noar tt set b2='E7KJVJ33LKFN' where id=5; -update noar ti set b2='E7KJVJ33LKFN' where id=5; -update noar tt set v0='TZF1F8LC9NF3XGPMEGYJOP5YA' where id=6; -update noar ti set v0='TZF1F8LC9NF3XGPMEGYJOP5YA' where id=6; -update noar tt set b0='Y1HFKWOK2H7E6FQOIFXM3L3PDH9718J' where id=6; -update noar ti set b0='Y1HFKWOK2H7E6FQOIFXM3L3PDH9718J' where id=6; -update noar tt set v0='X4LTQQIHHNBXYLEUQ89C528Z76' where id=6; -update noar ti set v0='X4LTQQIHHNBXYLEUQ89C528Z76' where id=6; -update noar tt set b1='PSI9VQIR0IGSZ5KYE5QH164X' where id=6; -update noar ti set b1='PSI9VQIR0IGSZ5KYE5QH164X' where id=6; -update noar tt set v0='B8CYNXMT0RY75ZZMJN' where id=6; -update noar ti set v0='B8CYNXMT0RY75ZZMJN' where id=6; -update noar tt set b2='PAO8I6IZL5VGPUMB2TICK86C9UE00' where id=6; -update noar ti set b2='PAO8I6IZL5VGPUMB2TICK86C9UE00' where id=6; -update noar tt set v0='GGHTK97KZU34ISSAS7' where id=7; -update noar ti set v0='GGHTK97KZU34ISSAS7' where id=7; -update noar tt set b0='JRDP0EG' where id=7; -update noar ti set b0='JRDP0EG' where id=7; -update noar tt set v0='AF71GQ22W2Y5GYZT8EU4XKWHVHWBB' where id=7; -update noar ti set v0='AF71GQ22W2Y5GYZT8EU4XKWHVHWBB' where id=7; -update noar tt set b1='L1V93SPN2HITIYAN6P77YC' where id=7; -update noar ti set b1='L1V93SPN2HITIYAN6P77YC' where id=7; -update noar tt set v0='0RAPR9TJY' where id=7; -update noar ti set v0='0RAPR9TJY' where id=7; -update noar tt set b2='UPN14PREIP49OWNVE0' where id=7; -update noar ti set b2='UPN14PREIP49OWNVE0' where id=7; -update noar tt set v0='VQHCIUT0L87M8I5U06PJ' where id=8; -update noar ti set v0='VQHCIUT0L87M8I5U06PJ' where id=8; -update noar tt set b0='L7RBJILG0TX4QL2' where id=8; -update noar ti set b0='L7RBJILG0TX4QL2' where id=8; -update noar tt set v0='Z3ZW2I4VVBS5JD70Z48R6C7' where id=8; -update noar ti set v0='Z3ZW2I4VVBS5JD70Z48R6C7' where id=8; -update noar tt set b1='2DZKW' where id=8; -update noar ti set b1='2DZKW' where id=8; -update noar tt set v0='52KZVFC596F1WJNAKYE9CX25' where id=8; -update noar ti set v0='52KZVFC596F1WJNAKYE9CX25' where id=8; -update noar tt set b2='WEBHH5442FRO7W93AKRFLKP0' where id=8; -update noar ti set b2='WEBHH5442FRO7W93AKRFLKP0' where id=8; -update noar tt set v0='DZX0S0Q' where id=9; -update noar ti set v0='DZX0S0Q' where id=9; -update noar tt set b0='PCI0KO7' where id=9; -update noar ti set b0='PCI0KO7' where id=9; -update noar tt set v0='30RGI' where id=9; -update noar ti set v0='30RGI' where id=9; -update noar tt set b1='40SDA' where id=9; -update noar ti set b1='40SDA' where id=9; -update noar tt set v0='SZ16SPALTGY95V1QK3VWPYJXPZOHM' where id=9; -update noar ti set v0='SZ16SPALTGY95V1QK3VWPYJXPZOHM' where id=9; -update noar tt set b2='AEMV' where id=9; -update noar ti set b2='AEMV' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 tinyblob null, - b1 mediumblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='2W15VZFAGXO1IC20U6K3SN8' where id=1; -update noar ti set v0='2W15VZFAGXO1IC20U6K3SN8' where id=1; -update noar tt set b0='8EF9STP63WTU0KLDZYIH8UW0675OP7CV' where id=1; -update noar ti set b0='8EF9STP63WTU0KLDZYIH8UW0675OP7CV' where id=1; -update noar tt set v0='9Y1PSK6UUVNV8BYG0YIDEP2Q7BY' where id=1; -update noar ti set v0='9Y1PSK6UUVNV8BYG0YIDEP2Q7BY' where id=1; -update noar tt set b1='2AFZH5L727JLNJ8KZL36F9' where id=1; -update noar ti set b1='2AFZH5L727JLNJ8KZL36F9' where id=1; -update noar tt set v0='BIQB6B7FHO' where id=1; -update noar ti set v0='BIQB6B7FHO' where id=1; -update noar tt set b2='GL6LI1VFUX5IH' where id=1; -update noar ti set b2='GL6LI1VFUX5IH' where id=1; -update noar tt set v0='0PWUOCW9D37V21PQCSVP49FR' where id=2; -update noar ti set v0='0PWUOCW9D37V21PQCSVP49FR' where id=2; -update noar tt set b0='E0KJHOP8OJ0ENAJT' where id=2; -update noar ti set b0='E0KJHOP8OJ0ENAJT' where id=2; -update noar tt set v0='N3DOFVD7SJSY975RY53ZLC2CIZ6W' where id=2; -update noar ti set v0='N3DOFVD7SJSY975RY53ZLC2CIZ6W' where id=2; -update noar tt set b1='1CUKK1JN2WM0NLZ8' where id=2; -update noar ti set b1='1CUKK1JN2WM0NLZ8' where id=2; -update noar tt set v0='7K82' where id=2; -update noar ti set v0='7K82' where id=2; -update noar tt set b2='OOTEM3T1FZPX4D697UOEY5QX' where id=2; -update noar ti set b2='OOTEM3T1FZPX4D697UOEY5QX' where id=2; -update noar tt set v0='62HM5Y6NQTGHLEVYLZGIJ' where id=3; -update noar ti set v0='62HM5Y6NQTGHLEVYLZGIJ' where id=3; -update noar tt set b0='86V67W2YUT' where id=3; -update noar ti set b0='86V67W2YUT' where id=3; -update noar tt set v0='P' where id=3; -update noar ti set v0='P' where id=3; -update noar tt set b1='O5RQZC' where id=3; -update noar ti set b1='O5RQZC' where id=3; -update noar tt set v0='945WIBXTP57Y' where id=3; -update noar ti set v0='945WIBXTP57Y' where id=3; -update noar tt set b2='8SKKNV1X48PYBW' where id=3; -update noar ti set b2='8SKKNV1X48PYBW' where id=3; -update noar tt set v0='O1454YCYQHV4LOE1JYI' where id=4; -update noar ti set v0='O1454YCYQHV4LOE1JYI' where id=4; -update noar tt set b0='VG' where id=4; -update noar ti set b0='VG' where id=4; -update noar tt set v0='3R0ORL518D133GW7RGUD1JU8L' where id=4; -update noar ti set v0='3R0ORL518D133GW7RGUD1JU8L' where id=4; -update noar tt set b1='R1CKQ46TYP66UY8G' where id=4; -update noar ti set b1='R1CKQ46TYP66UY8G' where id=4; -update noar tt set v0='B8J8X695GO46DTG72M4MD0CUCSOXJ7J' where id=4; -update noar ti set v0='B8J8X695GO46DTG72M4MD0CUCSOXJ7J' where id=4; -update noar tt set b2='U4JE' where id=4; -update noar ti set b2='U4JE' where id=4; -update noar tt set v0='DVVZN8SWPMJA51SH69TM' where id=5; -update noar ti set v0='DVVZN8SWPMJA51SH69TM' where id=5; -update noar tt set b0='7WAOKHFI0TTXPMT10T5NFW5' where id=5; -update noar ti set b0='7WAOKHFI0TTXPMT10T5NFW5' where id=5; -update noar tt set v0='85VVXM0YGWDTT051NDPSVR2R6O' where id=5; -update noar ti set v0='85VVXM0YGWDTT051NDPSVR2R6O' where id=5; -update noar tt set b1='2BAZF' where id=5; -update noar ti set b1='2BAZF' where id=5; -update noar tt set v0='A1Z9ULRVF5LIXAYC6NC8J6K0PYM1DPP' where id=5; -update noar ti set v0='A1Z9ULRVF5LIXAYC6NC8J6K0PYM1DPP' where id=5; -update noar tt set b2='FV0L1XNPL8PKXJJ7F' where id=5; -update noar ti set b2='FV0L1XNPL8PKXJJ7F' where id=5; -update noar tt set v0='7MNF3R3DB2I051ETSS1K57' where id=6; -update noar ti set v0='7MNF3R3DB2I051ETSS1K57' where id=6; -update noar tt set b0='PHTK3TVC5DV1KRTKY4AMVY793' where id=6; -update noar ti set b0='PHTK3TVC5DV1KRTKY4AMVY793' where id=6; -update noar tt set v0='Z7QR3SPPNVA7ZWWNCMFYKOC' where id=6; -update noar ti set v0='Z7QR3SPPNVA7ZWWNCMFYKOC' where id=6; -update noar tt set b1='4P8ESDAC4UL' where id=6; -update noar ti set b1='4P8ESDAC4UL' where id=6; -update noar tt set v0='AYHVDJ9Z69E68F8G1I82BZQF' where id=6; -update noar ti set v0='AYHVDJ9Z69E68F8G1I82BZQF' where id=6; -update noar tt set b2='B7G7E9ZZJEO2LK66A' where id=6; -update noar ti set b2='B7G7E9ZZJEO2LK66A' where id=6; -update noar tt set v0='SHS2CK4' where id=7; -update noar ti set v0='SHS2CK4' where id=7; -update noar tt set b0='9FMVEOKOHMDLHXPP' where id=7; -update noar ti set b0='9FMVEOKOHMDLHXPP' where id=7; -update noar tt set v0='EWEL' where id=7; -update noar ti set v0='EWEL' where id=7; -update noar tt set b1='53NGDLL6TPJ' where id=7; -update noar ti set b1='53NGDLL6TPJ' where id=7; -update noar tt set v0='BCJP0' where id=7; -update noar ti set v0='BCJP0' where id=7; -update noar tt set b2='GMEY' where id=7; -update noar ti set b2='GMEY' where id=7; -update noar tt set v0='6DMI660WV9OQ0H7YO7YNRFP8UMOJA8NJ' where id=8; -update noar ti set v0='6DMI660WV9OQ0H7YO7YNRFP8UMOJA8NJ' where id=8; -update noar tt set b0='YZPW8BPV4K25EII9QH72P1' where id=8; -update noar ti set b0='YZPW8BPV4K25EII9QH72P1' where id=8; -update noar tt set v0='JGE0' where id=8; -update noar ti set v0='JGE0' where id=8; -update noar tt set b1='5D5EM68LJM8NOT0APW1VW56MPT' where id=8; -update noar ti set b1='5D5EM68LJM8NOT0APW1VW56MPT' where id=8; -update noar tt set v0='R2I5CBP4OPLTOO9LI3O' where id=8; -update noar ti set v0='R2I5CBP4OPLTOO9LI3O' where id=8; -update noar tt set b2='9RL6EL0WFKYGLGQR26' where id=8; -update noar ti set b2='9RL6EL0WFKYGLGQR26' where id=8; -update noar tt set v0='GBNPRCQ2ZGKE7KWD25D087JLSK1SEG3' where id=9; -update noar ti set v0='GBNPRCQ2ZGKE7KWD25D087JLSK1SEG3' where id=9; -update noar tt set b0='02VBYZ4TEGFVJ6953O7500B5UI13NZ' where id=9; -update noar ti set b0='02VBYZ4TEGFVJ6953O7500B5UI13NZ' where id=9; -update noar tt set v0='ACZS0HW6KVOPED80B' where id=9; -update noar ti set v0='ACZS0HW6KVOPED80B' where id=9; -update noar tt set b1='65L4NEL' where id=9; -update noar ti set b1='65L4NEL' where id=9; -update noar tt set v0='RR93HUL3GKJK4H59F' where id=9; -update noar ti set v0='RR93HUL3GKJK4H59F' where id=9; -update noar tt set b2='KEXJK79LG6Z7SQVON9OGBIFHDH882' where id=9; -update noar ti set b2='KEXJK79LG6Z7SQVON9OGBIFHDH882' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 tinyblob not null, - b1 mediumblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='KB7NNFEPFGD30AN5' where id=1; -update noar ti set v0='KB7NNFEPFGD30AN5' where id=1; -update noar tt set b0='HM33PSO674GLJB2NSXDY3VYEIRA7C1' where id=1; -update noar ti set b0='HM33PSO674GLJB2NSXDY3VYEIRA7C1' where id=1; -update noar tt set v0='0G1GH0BHIFS2JC62VY6XXPETSNYQI89' where id=1; -update noar ti set v0='0G1GH0BHIFS2JC62VY6XXPETSNYQI89' where id=1; -update noar tt set b1='QTQK1OM2RRCECOB9PJ2KZ' where id=1; -update noar ti set b1='QTQK1OM2RRCECOB9PJ2KZ' where id=1; -update noar tt set v0='0WZ8SVUCDJQFV7E5X6JAQEYFZN5XE' where id=1; -update noar ti set v0='0WZ8SVUCDJQFV7E5X6JAQEYFZN5XE' where id=1; -update noar tt set b2='BPDGHY' where id=1; -update noar ti set b2='BPDGHY' where id=1; -update noar tt set v0='FQUCKXGA' where id=2; -update noar ti set v0='FQUCKXGA' where id=2; -update noar tt set b0='4DWH' where id=2; -update noar ti set b0='4DWH' where id=2; -update noar tt set v0='ZZGNZV' where id=2; -update noar ti set v0='ZZGNZV' where id=2; -update noar tt set b1='Y9C3MRKYGBB9WLADG9' where id=2; -update noar ti set b1='Y9C3MRKYGBB9WLADG9' where id=2; -update noar tt set v0='AWCYQGFU2L92560YWRYH42Z' where id=2; -update noar ti set v0='AWCYQGFU2L92560YWRYH42Z' where id=2; -update noar tt set b2='N4S' where id=2; -update noar ti set b2='N4S' where id=2; -update noar tt set v0='I0DW85196WMNH03Q33PF2L6VQGKV3' where id=3; -update noar ti set v0='I0DW85196WMNH03Q33PF2L6VQGKV3' where id=3; -update noar tt set b0='LNPO' where id=3; -update noar ti set b0='LNPO' where id=3; -update noar tt set v0='QB5OKN4BP8E9' where id=3; -update noar ti set v0='QB5OKN4BP8E9' where id=3; -update noar tt set b1='AN7N10DQ31LVRQF9E5ZMN5TYHRU162W' where id=3; -update noar ti set b1='AN7N10DQ31LVRQF9E5ZMN5TYHRU162W' where id=3; -update noar tt set v0='HOL454K4D4PN' where id=3; -update noar ti set v0='HOL454K4D4PN' where id=3; -update noar tt set b2='8EKNE77L5LIZQ' where id=3; -update noar ti set b2='8EKNE77L5LIZQ' where id=3; -update noar tt set v0='E232C91K3JZSREE1U' where id=4; -update noar ti set v0='E232C91K3JZSREE1U' where id=4; -update noar tt set b0='LHRPTQVPOVMJV3' where id=4; -update noar ti set b0='LHRPTQVPOVMJV3' where id=4; -update noar tt set v0='S1GT6D3Z2IERK1TU88K2CUG30D6A4' where id=4; -update noar ti set v0='S1GT6D3Z2IERK1TU88K2CUG30D6A4' where id=4; -update noar tt set b1='JZ49KQ9FPJWOA45Y' where id=4; -update noar ti set b1='JZ49KQ9FPJWOA45Y' where id=4; -update noar tt set v0='ADD4RRT' where id=4; -update noar ti set v0='ADD4RRT' where id=4; -update noar tt set b2='KJC1YB8A' where id=4; -update noar ti set b2='KJC1YB8A' where id=4; -update noar tt set v0='7BPQZJG8VNYA4LH' where id=5; -update noar ti set v0='7BPQZJG8VNYA4LH' where id=5; -update noar tt set b0='29AN65ZZ6C2TO05YUGM8NREB3YT7I' where id=5; -update noar ti set b0='29AN65ZZ6C2TO05YUGM8NREB3YT7I' where id=5; -update noar tt set v0='K26EJK6SD8Z38E0C' where id=5; -update noar ti set v0='K26EJK6SD8Z38E0C' where id=5; -update noar tt set b1='XRT0QPQK4QJMYQF4MKG58P' where id=5; -update noar ti set b1='XRT0QPQK4QJMYQF4MKG58P' where id=5; -update noar tt set v0='AIZQ7FSGEWH7OPWSFKG2D' where id=5; -update noar ti set v0='AIZQ7FSGEWH7OPWSFKG2D' where id=5; -update noar tt set b2='JKZCGQL6P3IMWUHOY8Z2HARF' where id=5; -update noar ti set b2='JKZCGQL6P3IMWUHOY8Z2HARF' where id=5; -update noar tt set v0='CQ' where id=6; -update noar ti set v0='CQ' where id=6; -update noar tt set b0='58HUYQY8B2MABOG4' where id=6; -update noar ti set b0='58HUYQY8B2MABOG4' where id=6; -update noar tt set v0='PS0HAVDN8RH' where id=6; -update noar ti set v0='PS0HAVDN8RH' where id=6; -update noar tt set b1='N3CP3PP1S8DQWJCZW4EUWJD68Y' where id=6; -update noar ti set b1='N3CP3PP1S8DQWJCZW4EUWJD68Y' where id=6; -update noar tt set v0='02WB2K89S0JD4CFTKMKV' where id=6; -update noar ti set v0='02WB2K89S0JD4CFTKMKV' where id=6; -update noar tt set b2='CHFMR6F387X5LZLH2RMKXNTY0N0XIH' where id=6; -update noar ti set b2='CHFMR6F387X5LZLH2RMKXNTY0N0XIH' where id=6; -update noar tt set v0='HVNT8ORVFHSWZ382K1D7Q8WWIHSVUI' where id=7; -update noar ti set v0='HVNT8ORVFHSWZ382K1D7Q8WWIHSVUI' where id=7; -update noar tt set b0='4820B5WHWAKY' where id=7; -update noar ti set b0='4820B5WHWAKY' where id=7; -update noar tt set v0='QJBZZWA8054FOQENMYA7EM05U' where id=7; -update noar ti set v0='QJBZZWA8054FOQENMYA7EM05U' where id=7; -update noar tt set b1='DBU55XYF' where id=7; -update noar ti set b1='DBU55XYF' where id=7; -update noar tt set v0='FKS68V' where id=7; -update noar ti set v0='FKS68V' where id=7; -update noar tt set b2='HR7ZOPG2AGXHD6EGWGJW8PZT5FZ3' where id=7; -update noar ti set b2='HR7ZOPG2AGXHD6EGWGJW8PZT5FZ3' where id=7; -update noar tt set v0='X8RD' where id=8; -update noar ti set v0='X8RD' where id=8; -update noar tt set b0='ESSZY48XWLJXWBO9914EI0EM7JN' where id=8; -update noar ti set b0='ESSZY48XWLJXWBO9914EI0EM7JN' where id=8; -update noar tt set v0='5KTRQOQER14ZGDSVUFR4J6K4ZZASRO32' where id=8; -update noar ti set v0='5KTRQOQER14ZGDSVUFR4J6K4ZZASRO32' where id=8; -update noar tt set b1='LVC13F6' where id=8; -update noar ti set b1='LVC13F6' where id=8; -update noar tt set v0='PAVVSO76NPBUAZE4QXEF4' where id=8; -update noar ti set v0='PAVVSO76NPBUAZE4QXEF4' where id=8; -update noar tt set b2='QB2RXEPZ7UWINA677EIS3E02B0W3H19A' where id=8; -update noar ti set b2='QB2RXEPZ7UWINA677EIS3E02B0W3H19A' where id=8; -update noar tt set v0='VVVCTAITDEJHR3EQ6Z0M' where id=9; -update noar ti set v0='VVVCTAITDEJHR3EQ6Z0M' where id=9; -update noar tt set b0='7Y2Y21FL1MOZD7OAV580P5I' where id=9; -update noar ti set b0='7Y2Y21FL1MOZD7OAV580P5I' where id=9; -update noar tt set v0='PC7YS2BJ8I8ETJ7K8D647RGVUOAA4T' where id=9; -update noar ti set v0='PC7YS2BJ8I8ETJ7K8D647RGVUOAA4T' where id=9; -update noar tt set b1='6X5SUSZ7J4LIO9TJ31C629ZBZQ5LT' where id=9; -update noar ti set b1='6X5SUSZ7J4LIO9TJ31C629ZBZQ5LT' where id=9; -update noar tt set v0='6OSYYISFEW37TE' where id=9; -update noar ti set v0='6OSYYISFEW37TE' where id=9; -update noar tt set b2='AU4V744OWFIATF00E7WFHT' where id=9; -update noar ti set b2='AU4V744OWFIATF00E7WFHT' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 tinyblob not null, - b1 mediumblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='5RAQUY' where id=1; -update noar ti set v0='5RAQUY' where id=1; -update noar tt set b0='PDYSWCEONZER' where id=1; -update noar ti set b0='PDYSWCEONZER' where id=1; -update noar tt set v0='RT1W2I6N6L7FE5FN' where id=1; -update noar ti set v0='RT1W2I6N6L7FE5FN' where id=1; -update noar tt set b1='ZE' where id=1; -update noar ti set b1='ZE' where id=1; -update noar tt set v0='LI4EQR4LRI26X5TG06YL9DQ' where id=1; -update noar ti set v0='LI4EQR4LRI26X5TG06YL9DQ' where id=1; -update noar tt set b2='WTBVKL9M8J6LA' where id=1; -update noar ti set b2='WTBVKL9M8J6LA' where id=1; -update noar tt set v0='J13WWK7MCA' where id=2; -update noar ti set v0='J13WWK7MCA' where id=2; -update noar tt set b0='S' where id=2; -update noar ti set b0='S' where id=2; -update noar tt set v0='IUZCTB13WJCPZIL6OK7YRV7QF0XRF090' where id=2; -update noar ti set v0='IUZCTB13WJCPZIL6OK7YRV7QF0XRF090' where id=2; -update noar tt set b1='2UQ2U5BHGQUO0TG5' where id=2; -update noar ti set b1='2UQ2U5BHGQUO0TG5' where id=2; -update noar tt set v0='LI8F3G0SJODO3Y' where id=2; -update noar ti set v0='LI8F3G0SJODO3Y' where id=2; -update noar tt set b2='QNG3Q9AXRNH3IN1T4V' where id=2; -update noar ti set b2='QNG3Q9AXRNH3IN1T4V' where id=2; -update noar tt set v0='7A7VMT3260TBMEEOJ1GKN' where id=3; -update noar ti set v0='7A7VMT3260TBMEEOJ1GKN' where id=3; -update noar tt set b0='Y7' where id=3; -update noar ti set b0='Y7' where id=3; -update noar tt set v0='0LHVCF9EVYL5' where id=3; -update noar ti set v0='0LHVCF9EVYL5' where id=3; -update noar tt set b1='LR4NJ0' where id=3; -update noar ti set b1='LR4NJ0' where id=3; -update noar tt set v0='N784Z87F5EZ8XRQ' where id=3; -update noar ti set v0='N784Z87F5EZ8XRQ' where id=3; -update noar tt set b2='XUQU9JZ789P' where id=3; -update noar ti set b2='XUQU9JZ789P' where id=3; -update noar tt set v0='T5097HTJOUECSV4MA11LNILA47S4' where id=4; -update noar ti set v0='T5097HTJOUECSV4MA11LNILA47S4' where id=4; -update noar tt set b0='BOJIMD1NI78B' where id=4; -update noar ti set b0='BOJIMD1NI78B' where id=4; -update noar tt set v0='5LCKAANXHBAF18B1K' where id=4; -update noar ti set v0='5LCKAANXHBAF18B1K' where id=4; -update noar tt set b1='Q94N8AJHT9' where id=4; -update noar ti set b1='Q94N8AJHT9' where id=4; -update noar tt set v0='DXLTI183PJLSM1DNTPDOV' where id=4; -update noar ti set v0='DXLTI183PJLSM1DNTPDOV' where id=4; -update noar tt set b2='1I1Q7ANREC' where id=4; -update noar ti set b2='1I1Q7ANREC' where id=4; -update noar tt set v0='6KSXNGN5EOREL9' where id=5; -update noar ti set v0='6KSXNGN5EOREL9' where id=5; -update noar tt set b0='6XWD45L6SE0KOQSHQ25ZLSG5Q1' where id=5; -update noar ti set b0='6XWD45L6SE0KOQSHQ25ZLSG5Q1' where id=5; -update noar tt set v0='8Y321P6' where id=5; -update noar ti set v0='8Y321P6' where id=5; -update noar tt set b1='05P' where id=5; -update noar ti set b1='05P' where id=5; -update noar tt set v0='F' where id=5; -update noar ti set v0='F' where id=5; -update noar tt set b2='9LH195JEGW9TY0K9HFO3' where id=5; -update noar ti set b2='9LH195JEGW9TY0K9HFO3' where id=5; -update noar tt set v0='WHQ9P6JPQ6AEUOS661OW187HA757TYNY' where id=6; -update noar ti set v0='WHQ9P6JPQ6AEUOS661OW187HA757TYNY' where id=6; -update noar tt set b0='5YIFUMY9FN7' where id=6; -update noar ti set b0='5YIFUMY9FN7' where id=6; -update noar tt set v0='6F4Z0HU8ZJLEP5MNX0OX' where id=6; -update noar ti set v0='6F4Z0HU8ZJLEP5MNX0OX' where id=6; -update noar tt set b1='17YBZ9N' where id=6; -update noar ti set b1='17YBZ9N' where id=6; -update noar tt set v0='SXBC549EQOCE' where id=6; -update noar ti set v0='SXBC549EQOCE' where id=6; -update noar tt set b2='A6UGNGV4RLTPT6KV4D8W' where id=6; -update noar ti set b2='A6UGNGV4RLTPT6KV4D8W' where id=6; -update noar tt set v0='VQ7SSCUM1A9NRCT9Q' where id=7; -update noar ti set v0='VQ7SSCUM1A9NRCT9Q' where id=7; -update noar tt set b0='XZVPF9XQO6RZPHXAIWYCANXB2YMD' where id=7; -update noar ti set b0='XZVPF9XQO6RZPHXAIWYCANXB2YMD' where id=7; -update noar tt set v0='TPXWN6G2JUKH7K1AFIN3JXVL' where id=7; -update noar ti set v0='TPXWN6G2JUKH7K1AFIN3JXVL' where id=7; -update noar tt set b1='ITXCSQGBCPB4H8964PVM6' where id=7; -update noar ti set b1='ITXCSQGBCPB4H8964PVM6' where id=7; -update noar tt set v0='8N82MIQXQTQRVQ9EZK2FF81OYEIH' where id=7; -update noar ti set v0='8N82MIQXQTQRVQ9EZK2FF81OYEIH' where id=7; -update noar tt set b2='9TU66KR2O411WN' where id=7; -update noar ti set b2='9TU66KR2O411WN' where id=7; -update noar tt set v0='8PZEVNMGRINNDE' where id=8; -update noar ti set v0='8PZEVNMGRINNDE' where id=8; -update noar tt set b0='RP' where id=8; -update noar ti set b0='RP' where id=8; -update noar tt set v0='CPE0M5UJWR0LJNXC' where id=8; -update noar ti set v0='CPE0M5UJWR0LJNXC' where id=8; -update noar tt set b1='4SINDZR9PVFA8EV35HBG7N' where id=8; -update noar ti set b1='4SINDZR9PVFA8EV35HBG7N' where id=8; -update noar tt set v0='0IUD1QG' where id=8; -update noar ti set v0='0IUD1QG' where id=8; -update noar tt set b2='8XB67B5M' where id=8; -update noar ti set b2='8XB67B5M' where id=8; -update noar tt set v0='VALP9O' where id=9; -update noar ti set v0='VALP9O' where id=9; -update noar tt set b0='F0' where id=9; -update noar ti set b0='F0' where id=9; -update noar tt set v0='IJ9EA919X' where id=9; -update noar ti set v0='IJ9EA919X' where id=9; -update noar tt set b1='WB9XJK9L1WG2S3D4CCKADWWSQ0' where id=9; -update noar ti set b1='WB9XJK9L1WG2S3D4CCKADWWSQ0' where id=9; -update noar tt set v0='PB0T1ONB3VMV49VP704KWX0EXO' where id=9; -update noar ti set v0='PB0T1ONB3VMV49VP704KWX0EXO' where id=9; -update noar tt set b2='OT' where id=9; -update noar ti set b2='OT' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 tinyblob null, - b1 mediumblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='LFO6J9LUCSDMJ9KO6DE6QQA' where id=1; -update noar ti set v0='LFO6J9LUCSDMJ9KO6DE6QQA' where id=1; -update noar tt set b0='HP1UH3I8E921KJQHJPBIRJE1Q0' where id=1; -update noar ti set b0='HP1UH3I8E921KJQHJPBIRJE1Q0' where id=1; -update noar tt set v0='RBGFPQA' where id=1; -update noar ti set v0='RBGFPQA' where id=1; -update noar tt set b1='MW5TZKCIXC8LEH1' where id=1; -update noar ti set b1='MW5TZKCIXC8LEH1' where id=1; -update noar tt set v0='5ZUA5ENER506ZMBIIA66DP91' where id=1; -update noar ti set v0='5ZUA5ENER506ZMBIIA66DP91' where id=1; -update noar tt set b2='A5PK3C44I2E' where id=1; -update noar ti set b2='A5PK3C44I2E' where id=1; -update noar tt set v0='VZKPMUB5ERASO1OZUMHH05DH' where id=2; -update noar ti set v0='VZKPMUB5ERASO1OZUMHH05DH' where id=2; -update noar tt set b0='D0NF45PFAURFIO6QVIAR1V9Y9WJUW' where id=2; -update noar ti set b0='D0NF45PFAURFIO6QVIAR1V9Y9WJUW' where id=2; -update noar tt set v0='W55OHMMA7YGNXDM9Z3YHIX7U4KXU3' where id=2; -update noar ti set v0='W55OHMMA7YGNXDM9Z3YHIX7U4KXU3' where id=2; -update noar tt set b1='D2BV6AT541R3QSPJQLNBQQ7BE31TCTZU' where id=2; -update noar ti set b1='D2BV6AT541R3QSPJQLNBQQ7BE31TCTZU' where id=2; -update noar tt set v0='9SITWNATENASOMPBGTA6' where id=2; -update noar ti set v0='9SITWNATENASOMPBGTA6' where id=2; -update noar tt set b2='U5KN6JV' where id=2; -update noar ti set b2='U5KN6JV' where id=2; -update noar tt set v0='4AZC0LR5YTQDH0780SWTF1G' where id=3; -update noar ti set v0='4AZC0LR5YTQDH0780SWTF1G' where id=3; -update noar tt set b0='J8VHEVVO' where id=3; -update noar ti set b0='J8VHEVVO' where id=3; -update noar tt set v0='7IM' where id=3; -update noar ti set v0='7IM' where id=3; -update noar tt set b1='U816FOYS' where id=3; -update noar ti set b1='U816FOYS' where id=3; -update noar tt set v0='0PTO9VCHOC7' where id=3; -update noar ti set v0='0PTO9VCHOC7' where id=3; -update noar tt set b2='AAQ' where id=3; -update noar ti set b2='AAQ' where id=3; -update noar tt set v0='1VTVFGJ8YDKFSKL41SW9' where id=4; -update noar ti set v0='1VTVFGJ8YDKFSKL41SW9' where id=4; -update noar tt set b0='9WHQZPZVMY5852X' where id=4; -update noar ti set b0='9WHQZPZVMY5852X' where id=4; -update noar tt set v0='3R936A7QG76F29' where id=4; -update noar ti set v0='3R936A7QG76F29' where id=4; -update noar tt set b1='GBOUZUXI00115FAVGV37ZL2RIJIK6I' where id=4; -update noar ti set b1='GBOUZUXI00115FAVGV37ZL2RIJIK6I' where id=4; -update noar tt set v0='LHVZKVLE0' where id=4; -update noar ti set v0='LHVZKVLE0' where id=4; -update noar tt set b2='PVD3A7HFZFZ74IEM3ZV0WL7O7T' where id=4; -update noar ti set b2='PVD3A7HFZFZ74IEM3ZV0WL7O7T' where id=4; -update noar tt set v0='UOMIE5BI4ASD' where id=5; -update noar ti set v0='UOMIE5BI4ASD' where id=5; -update noar tt set b0='GR' where id=5; -update noar ti set b0='GR' where id=5; -update noar tt set v0='6RDPF0C8QIJK7GLJG0WNW7V4LR3UMNK' where id=5; -update noar ti set v0='6RDPF0C8QIJK7GLJG0WNW7V4LR3UMNK' where id=5; -update noar tt set b1='AILNU53' where id=5; -update noar ti set b1='AILNU53' where id=5; -update noar tt set v0='OCUVH5L74DYX7FJKPHE2BVL' where id=5; -update noar ti set v0='OCUVH5L74DYX7FJKPHE2BVL' where id=5; -update noar tt set b2='3S8OJDXQIZX2D6ISY4Z352GCOR2SN' where id=5; -update noar ti set b2='3S8OJDXQIZX2D6ISY4Z352GCOR2SN' where id=5; -update noar tt set v0='1QQGMJYOOU6S067CKX' where id=6; -update noar ti set v0='1QQGMJYOOU6S067CKX' where id=6; -update noar tt set b0='L6KX28HGI3QCN8D8K0COPCL3Y1OO5V7' where id=6; -update noar ti set b0='L6KX28HGI3QCN8D8K0COPCL3Y1OO5V7' where id=6; -update noar tt set v0='OXNGWK0D' where id=6; -update noar ti set v0='OXNGWK0D' where id=6; -update noar tt set b1='L2O8MRM9IQ' where id=6; -update noar ti set b1='L2O8MRM9IQ' where id=6; -update noar tt set v0='KUB6QUNG8HF7' where id=6; -update noar ti set v0='KUB6QUNG8HF7' where id=6; -update noar tt set b2='NH7T9Z2YW9V' where id=6; -update noar ti set b2='NH7T9Z2YW9V' where id=6; -update noar tt set v0='8EUWNWJJBYQ' where id=7; -update noar ti set v0='8EUWNWJJBYQ' where id=7; -update noar tt set b0='EI27UT8EEF4DPTD3PJS9YQ1TQVL' where id=7; -update noar ti set b0='EI27UT8EEF4DPTD3PJS9YQ1TQVL' where id=7; -update noar tt set v0='8T5M2VQL8DRNKE9NPV3' where id=7; -update noar ti set v0='8T5M2VQL8DRNKE9NPV3' where id=7; -update noar tt set b1='BIVGNZ270YUUGWZF' where id=7; -update noar ti set b1='BIVGNZ270YUUGWZF' where id=7; -update noar tt set v0='RBDOR8F27YUR6B' where id=7; -update noar ti set v0='RBDOR8F27YUR6B' where id=7; -update noar tt set b2='T8G0UQV2FFA1J2DMH5TFTJGAG' where id=7; -update noar ti set b2='T8G0UQV2FFA1J2DMH5TFTJGAG' where id=7; -update noar tt set v0='W0Q68WXLP' where id=8; -update noar ti set v0='W0Q68WXLP' where id=8; -update noar tt set b0='PYC' where id=8; -update noar ti set b0='PYC' where id=8; -update noar tt set v0='N9I5SB3KJD6Z87X7GC40UMUEOLMVI' where id=8; -update noar ti set v0='N9I5SB3KJD6Z87X7GC40UMUEOLMVI' where id=8; -update noar tt set b1='WLJAO1WQE6' where id=8; -update noar ti set b1='WLJAO1WQE6' where id=8; -update noar tt set v0='F89YEUYOT3RY413X6Z9RBG0UL05H5Y0' where id=8; -update noar ti set v0='F89YEUYOT3RY413X6Z9RBG0UL05H5Y0' where id=8; -update noar tt set b2='ABXDN951SMBYK1HJIHE2AU5EXB2XCVP2' where id=8; -update noar ti set b2='ABXDN951SMBYK1HJIHE2AU5EXB2XCVP2' where id=8; -update noar tt set v0='232' where id=9; -update noar ti set v0='232' where id=9; -update noar tt set b0='9YX5O1CY26QL63OCD288PJFT6U1' where id=9; -update noar ti set b0='9YX5O1CY26QL63OCD288PJFT6U1' where id=9; -update noar tt set v0='MC68RVH1J96EZK89NAKZBMBJ50WSWY' where id=9; -update noar ti set v0='MC68RVH1J96EZK89NAKZBMBJ50WSWY' where id=9; -update noar tt set b1='28OSL1M5NDHP48VWBF1FYYCR1ZN9O' where id=9; -update noar ti set b1='28OSL1M5NDHP48VWBF1FYYCR1ZN9O' where id=9; -update noar tt set v0='5SYHN8JCZBH5ARMLEI' where id=9; -update noar ti set v0='5SYHN8JCZBH5ARMLEI' where id=9; -update noar tt set b2='CDVZL1LR3UZEHCRR' where id=9; -update noar ti set b2='CDVZL1LR3UZEHCRR' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 tinyblob null, - b1 mediumblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='0BWP0' where id=1; -update noar ti set v0='0BWP0' where id=1; -update noar tt set b0='SGA' where id=1; -update noar ti set b0='SGA' where id=1; -update noar tt set v0='A8VSWYDJLGTX19M35PMCOSMV1ENIO0' where id=1; -update noar ti set v0='A8VSWYDJLGTX19M35PMCOSMV1ENIO0' where id=1; -update noar tt set b1='H58D9MOWNNZD5QDT' where id=1; -update noar ti set b1='H58D9MOWNNZD5QDT' where id=1; -update noar tt set v0='977V76KUAY4ZP52OOEMR0Q' where id=1; -update noar ti set v0='977V76KUAY4ZP52OOEMR0Q' where id=1; -update noar tt set b2='U5UT8HSNUKLTNG' where id=1; -update noar ti set b2='U5UT8HSNUKLTNG' where id=1; -update noar tt set v0='JR3OTPUDTD6JDW5M9KA22J' where id=2; -update noar ti set v0='JR3OTPUDTD6JDW5M9KA22J' where id=2; -update noar tt set b0='IPS6IJ5UJVQF' where id=2; -update noar ti set b0='IPS6IJ5UJVQF' where id=2; -update noar tt set v0='JYTX' where id=2; -update noar ti set v0='JYTX' where id=2; -update noar tt set b1='D0' where id=2; -update noar ti set b1='D0' where id=2; -update noar tt set v0='BAHUFJ8LWHPITWIHUV7WNL08O50FBA6J' where id=2; -update noar ti set v0='BAHUFJ8LWHPITWIHUV7WNL08O50FBA6J' where id=2; -update noar tt set b2='OXS9M6IHACX0T3E2Y6VG3N5T5UEA7' where id=2; -update noar ti set b2='OXS9M6IHACX0T3E2Y6VG3N5T5UEA7' where id=2; -update noar tt set v0='TB6JGCA1JSUK7GF4RUBBXG' where id=3; -update noar ti set v0='TB6JGCA1JSUK7GF4RUBBXG' where id=3; -update noar tt set b0='PG4AL8PCFDW0S84N' where id=3; -update noar ti set b0='PG4AL8PCFDW0S84N' where id=3; -update noar tt set v0='94TVPUOBVA266HK87ZGSP1M8W1P5GA' where id=3; -update noar ti set v0='94TVPUOBVA266HK87ZGSP1M8W1P5GA' where id=3; -update noar tt set b1='IQWYNVVP' where id=3; -update noar ti set b1='IQWYNVVP' where id=3; -update noar tt set v0='7P4MG6PZK6EE6TMMEVAJEVGCLPOKHSN' where id=3; -update noar ti set v0='7P4MG6PZK6EE6TMMEVAJEVGCLPOKHSN' where id=3; -update noar tt set b2='SRJF0WZPPW4L' where id=3; -update noar ti set b2='SRJF0WZPPW4L' where id=3; -update noar tt set v0='UKMLTWAK0KQJM73W0EO1B' where id=4; -update noar ti set v0='UKMLTWAK0KQJM73W0EO1B' where id=4; -update noar tt set b0='8Q5GOWZVNIT3T' where id=4; -update noar ti set b0='8Q5GOWZVNIT3T' where id=4; -update noar tt set v0='7YE8' where id=4; -update noar ti set v0='7YE8' where id=4; -update noar tt set b1='295AY9U2' where id=4; -update noar ti set b1='295AY9U2' where id=4; -update noar tt set v0='M36S9OMALWBMN' where id=4; -update noar ti set v0='M36S9OMALWBMN' where id=4; -update noar tt set b2='LEA5QF6IZZV8VJ7CBPKIOW8K5' where id=4; -update noar ti set b2='LEA5QF6IZZV8VJ7CBPKIOW8K5' where id=4; -update noar tt set v0='ARHJH1T2YE2EKK0OA69' where id=5; -update noar ti set v0='ARHJH1T2YE2EKK0OA69' where id=5; -update noar tt set b0='9NXOTRT6ZE7ET7N' where id=5; -update noar ti set b0='9NXOTRT6ZE7ET7N' where id=5; -update noar tt set v0='9Y' where id=5; -update noar ti set v0='9Y' where id=5; -update noar tt set b1='U7J9X28TW6C0E8Z62BL455TPX' where id=5; -update noar ti set b1='U7J9X28TW6C0E8Z62BL455TPX' where id=5; -update noar tt set v0='V282' where id=5; -update noar ti set v0='V282' where id=5; -update noar tt set b2='OBRSGLZQSM0UW4J6IK6RY' where id=5; -update noar ti set b2='OBRSGLZQSM0UW4J6IK6RY' where id=5; -update noar tt set v0='P' where id=6; -update noar ti set v0='P' where id=6; -update noar tt set b0='WZSX7DM8MPLD7' where id=6; -update noar ti set b0='WZSX7DM8MPLD7' where id=6; -update noar tt set v0='J1NZ' where id=6; -update noar ti set v0='J1NZ' where id=6; -update noar tt set b1='X' where id=6; -update noar ti set b1='X' where id=6; -update noar tt set v0='PFYED' where id=6; -update noar ti set v0='PFYED' where id=6; -update noar tt set b2='2VBL40UJ8RZXK7K3O8V8K' where id=6; -update noar ti set b2='2VBL40UJ8RZXK7K3O8V8K' where id=6; -update noar tt set v0='BMTT6HKT' where id=7; -update noar ti set v0='BMTT6HKT' where id=7; -update noar tt set b0='Y09GSCNXJ7KVNS' where id=7; -update noar ti set b0='Y09GSCNXJ7KVNS' where id=7; -update noar tt set v0='VRTJL0' where id=7; -update noar ti set v0='VRTJL0' where id=7; -update noar tt set b1='V73BY90FHEWCL7CW' where id=7; -update noar ti set b1='V73BY90FHEWCL7CW' where id=7; -update noar tt set v0='TJX7LSW5X23PUIRLY7UDFVJT2QP' where id=7; -update noar ti set v0='TJX7LSW5X23PUIRLY7UDFVJT2QP' where id=7; -update noar tt set b2='A1L6VGE' where id=7; -update noar ti set b2='A1L6VGE' where id=7; -update noar tt set v0='PORL6H2CVBVDS' where id=8; -update noar ti set v0='PORL6H2CVBVDS' where id=8; -update noar tt set b0='2V6HTENJ' where id=8; -update noar ti set b0='2V6HTENJ' where id=8; -update noar tt set v0='X1ZAQEV0NKO11' where id=8; -update noar ti set v0='X1ZAQEV0NKO11' where id=8; -update noar tt set b1='OO1NEXWRHUGL8IR5E7' where id=8; -update noar ti set b1='OO1NEXWRHUGL8IR5E7' where id=8; -update noar tt set v0='8OTFC9C' where id=8; -update noar ti set v0='8OTFC9C' where id=8; -update noar tt set b2='RAYG7R5179GCEQXWX4M6BF448RY7I' where id=8; -update noar ti set b2='RAYG7R5179GCEQXWX4M6BF448RY7I' where id=8; -update noar tt set v0='EY89HUXM9UKM' where id=9; -update noar ti set v0='EY89HUXM9UKM' where id=9; -update noar tt set b0='R4MD71HZJLPJKYL5' where id=9; -update noar ti set b0='R4MD71HZJLPJKYL5' where id=9; -update noar tt set v0='Y7IPXM05N1' where id=9; -update noar ti set v0='Y7IPXM05N1' where id=9; -update noar tt set b1='GNLY9GZEI7ZKDP05K' where id=9; -update noar ti set b1='GNLY9GZEI7ZKDP05K' where id=9; -update noar tt set v0='63BA8YP1LQQLR8BL2AJ62U' where id=9; -update noar ti set v0='63BA8YP1LQQLR8BL2AJ62U' where id=9; -update noar tt set b2='F93M70Q39H8HR9' where id=9; -update noar ti set b2='F93M70Q39H8HR9' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 tinyblob not null, - b1 mediumblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='DIXB7DVORSS0YJ6M4KO3LYBKQKEYW' where id=1; -update noar ti set v0='DIXB7DVORSS0YJ6M4KO3LYBKQKEYW' where id=1; -update noar tt set b0='RAOXPW2H0XA60DKRFI985' where id=1; -update noar ti set b0='RAOXPW2H0XA60DKRFI985' where id=1; -update noar tt set v0='E9Q0J7M0ZF0IK1AF2N2FZFS8GZ' where id=1; -update noar ti set v0='E9Q0J7M0ZF0IK1AF2N2FZFS8GZ' where id=1; -update noar tt set b1='L1PKSET9ADDWPC3102' where id=1; -update noar ti set b1='L1PKSET9ADDWPC3102' where id=1; -update noar tt set v0='7WUS' where id=1; -update noar ti set v0='7WUS' where id=1; -update noar tt set b2='P6VLAF7TTL29DU2Q2PJTL13GPB' where id=1; -update noar ti set b2='P6VLAF7TTL29DU2Q2PJTL13GPB' where id=1; -update noar tt set v0='ADHAL' where id=2; -update noar ti set v0='ADHAL' where id=2; -update noar tt set b0='HVKTO64PQW87YILTMJTXGTSMAJ' where id=2; -update noar ti set b0='HVKTO64PQW87YILTMJTXGTSMAJ' where id=2; -update noar tt set v0='JO6NO69OOA29' where id=2; -update noar ti set v0='JO6NO69OOA29' where id=2; -update noar tt set b1='RO28C' where id=2; -update noar ti set b1='RO28C' where id=2; -update noar tt set v0='KO0A0MKPDPKM' where id=2; -update noar ti set v0='KO0A0MKPDPKM' where id=2; -update noar tt set b2='RMN6W3' where id=2; -update noar ti set b2='RMN6W3' where id=2; -update noar tt set v0='Q78ASDJS6ON6A3R9NQ00' where id=3; -update noar ti set v0='Q78ASDJS6ON6A3R9NQ00' where id=3; -update noar tt set b0='YDBM7OZL0QNGSJ' where id=3; -update noar ti set b0='YDBM7OZL0QNGSJ' where id=3; -update noar tt set v0='89K9AFEMUAGQBJ9WI47CMF1QFB065W5C' where id=3; -update noar ti set v0='89K9AFEMUAGQBJ9WI47CMF1QFB065W5C' where id=3; -update noar tt set b1='140AK8AJOWX8EBHJXQR0R8BYOAYUT4' where id=3; -update noar ti set b1='140AK8AJOWX8EBHJXQR0R8BYOAYUT4' where id=3; -update noar tt set v0='Y4R3W1CSM8Y' where id=3; -update noar ti set v0='Y4R3W1CSM8Y' where id=3; -update noar tt set b2='K1' where id=3; -update noar ti set b2='K1' where id=3; -update noar tt set v0='8A1I3X8I3Z6QXNA' where id=4; -update noar ti set v0='8A1I3X8I3Z6QXNA' where id=4; -update noar tt set b0='LIB' where id=4; -update noar ti set b0='LIB' where id=4; -update noar tt set v0='N9BTGQYBJXNEOIHM' where id=4; -update noar ti set v0='N9BTGQYBJXNEOIHM' where id=4; -update noar tt set b1='16H4Y5J8' where id=4; -update noar ti set b1='16H4Y5J8' where id=4; -update noar tt set v0='E' where id=4; -update noar ti set v0='E' where id=4; -update noar tt set b2='AERU7CMEE3QOTK' where id=4; -update noar ti set b2='AERU7CMEE3QOTK' where id=4; -update noar tt set v0='TCBQ' where id=5; -update noar ti set v0='TCBQ' where id=5; -update noar tt set b0='5CAWV3T0BMU66ULL6MJ9X4PUWHYFU' where id=5; -update noar ti set b0='5CAWV3T0BMU66ULL6MJ9X4PUWHYFU' where id=5; -update noar tt set v0='88ZQSJ8I' where id=5; -update noar ti set v0='88ZQSJ8I' where id=5; -update noar tt set b1='5AUFKZTTNFBC8TGSN1QIO' where id=5; -update noar ti set b1='5AUFKZTTNFBC8TGSN1QIO' where id=5; -update noar tt set v0='Q1TRAVTHCUZZPY927L6OASZP0UH2WYIF' where id=5; -update noar ti set v0='Q1TRAVTHCUZZPY927L6OASZP0UH2WYIF' where id=5; -update noar tt set b2='41OQMMNQKF72PCUCTQL897RNUC1TQK' where id=5; -update noar ti set b2='41OQMMNQKF72PCUCTQL897RNUC1TQK' where id=5; -update noar tt set v0='RF' where id=6; -update noar ti set v0='RF' where id=6; -update noar tt set b0='3YIE0OGJAQ2L1P9I94YKB9NIT90O3LZ' where id=6; -update noar ti set b0='3YIE0OGJAQ2L1P9I94YKB9NIT90O3LZ' where id=6; -update noar tt set v0='RP4TD8F5X04312BOD8HU07R553WS' where id=6; -update noar ti set v0='RP4TD8F5X04312BOD8HU07R553WS' where id=6; -update noar tt set b1='U' where id=6; -update noar ti set b1='U' where id=6; -update noar tt set v0='A3O9SE4QRROMO3NKKC07S3H' where id=6; -update noar ti set v0='A3O9SE4QRROMO3NKKC07S3H' where id=6; -update noar tt set b2='9NH68AXM8EHXT72N6BSZT6AELME' where id=6; -update noar ti set b2='9NH68AXM8EHXT72N6BSZT6AELME' where id=6; -update noar tt set v0='V' where id=7; -update noar ti set v0='V' where id=7; -update noar tt set b0='447352BQN1SO5O3ZO7UGJ' where id=7; -update noar ti set b0='447352BQN1SO5O3ZO7UGJ' where id=7; -update noar tt set v0='TF4W75LL5OZTWW8BD86BWDGA88' where id=7; -update noar ti set v0='TF4W75LL5OZTWW8BD86BWDGA88' where id=7; -update noar tt set b1='VSQHZD7SKSQSOXJ' where id=7; -update noar ti set b1='VSQHZD7SKSQSOXJ' where id=7; -update noar tt set v0='3F' where id=7; -update noar ti set v0='3F' where id=7; -update noar tt set b2='BDIT3UNK2D15JL1X8OILFX9T9754MX' where id=7; -update noar ti set b2='BDIT3UNK2D15JL1X8OILFX9T9754MX' where id=7; -update noar tt set v0='4IOV74FCTZ3IS71ZXB6EMRE0J1375GPH' where id=8; -update noar ti set v0='4IOV74FCTZ3IS71ZXB6EMRE0J1375GPH' where id=8; -update noar tt set b0='IJCV7JI0U6HY' where id=8; -update noar ti set b0='IJCV7JI0U6HY' where id=8; -update noar tt set v0='DI9UWF52HRT' where id=8; -update noar ti set v0='DI9UWF52HRT' where id=8; -update noar tt set b1='19SHPH1FM7' where id=8; -update noar ti set b1='19SHPH1FM7' where id=8; -update noar tt set v0='8GPCCD8U6SOISS43KG6CL9GHDD0H' where id=8; -update noar ti set v0='8GPCCD8U6SOISS43KG6CL9GHDD0H' where id=8; -update noar tt set b2='RSYLJ' where id=8; -update noar ti set b2='RSYLJ' where id=8; -update noar tt set v0='D1OQ4U29CZKC6GLL6FCVFKXAKEJ6L' where id=9; -update noar ti set v0='D1OQ4U29CZKC6GLL6FCVFKXAKEJ6L' where id=9; -update noar tt set b0='M0W61AUZK7SKBS0Z1FY' where id=9; -update noar ti set b0='M0W61AUZK7SKBS0Z1FY' where id=9; -update noar tt set v0='L' where id=9; -update noar ti set v0='L' where id=9; -update noar tt set b1='7KYOPIBM99BCQ0LIWVDSQFZW449070' where id=9; -update noar ti set b1='7KYOPIBM99BCQ0LIWVDSQFZW449070' where id=9; -update noar tt set v0='JVSK7PKW6XHNF5WAG3IOLCIFNZ' where id=9; -update noar ti set v0='JVSK7PKW6XHNF5WAG3IOLCIFNZ' where id=9; -update noar tt set b2='BVQ6R7TNV60ODTT1FRDA73ET6QVSZ87' where id=9; -update noar ti set b2='BVQ6R7TNV60ODTT1FRDA73ET6QVSZ87' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 tinyblob not null, - b1 mediumblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='7I16QVHZR66AL41ZH4FTZHPZ201AC' where id=1; -update noar ti set v0='7I16QVHZR66AL41ZH4FTZHPZ201AC' where id=1; -update noar tt set b0='KKD' where id=1; -update noar ti set b0='KKD' where id=1; -update noar tt set v0='3XPM6HMVDVFTJMEJEJUAR5HSU1' where id=1; -update noar ti set v0='3XPM6HMVDVFTJMEJEJUAR5HSU1' where id=1; -update noar tt set b1='QTDWBVMXDK5KT' where id=1; -update noar ti set b1='QTDWBVMXDK5KT' where id=1; -update noar tt set v0='KVG9MK7S8C3I1JB0ESDJ7DAI' where id=1; -update noar ti set v0='KVG9MK7S8C3I1JB0ESDJ7DAI' where id=1; -update noar tt set b2='7J1P1MMJMA172' where id=1; -update noar ti set b2='7J1P1MMJMA172' where id=1; -update noar tt set v0='RNR6' where id=2; -update noar ti set v0='RNR6' where id=2; -update noar tt set b0='21JTA51SGQ46OYG25PU' where id=2; -update noar ti set b0='21JTA51SGQ46OYG25PU' where id=2; -update noar tt set v0='XC86ZUWD8FWPA26N8ZVGO2COGP' where id=2; -update noar ti set v0='XC86ZUWD8FWPA26N8ZVGO2COGP' where id=2; -update noar tt set b1='94YTJP5ITMAWX4V2YJ1YJSW44IBI' where id=2; -update noar ti set b1='94YTJP5ITMAWX4V2YJ1YJSW44IBI' where id=2; -update noar tt set v0='6WTGLOXR5UFCZEUQ2T3GVR' where id=2; -update noar ti set v0='6WTGLOXR5UFCZEUQ2T3GVR' where id=2; -update noar tt set b2='SK8T3XW9OUPIQDJ' where id=2; -update noar ti set b2='SK8T3XW9OUPIQDJ' where id=2; -update noar tt set v0='BMYNVI' where id=3; -update noar ti set v0='BMYNVI' where id=3; -update noar tt set b0='K11Z908MZVTSK5T3QGCFN5155A' where id=3; -update noar ti set b0='K11Z908MZVTSK5T3QGCFN5155A' where id=3; -update noar tt set v0='UNIUDPNGVDDXMWG' where id=3; -update noar ti set v0='UNIUDPNGVDDXMWG' where id=3; -update noar tt set b1='POVPBA1G1J4IQMX8J2S0G5M8O' where id=3; -update noar ti set b1='POVPBA1G1J4IQMX8J2S0G5M8O' where id=3; -update noar tt set v0='GDHVCKE2LV1N796' where id=3; -update noar ti set v0='GDHVCKE2LV1N796' where id=3; -update noar tt set b2='5YXYVVVP1IW2OG' where id=3; -update noar ti set b2='5YXYVVVP1IW2OG' where id=3; -update noar tt set v0='1DM7APHTV4Y8U4AUYDPU5SE7D9929H' where id=4; -update noar ti set v0='1DM7APHTV4Y8U4AUYDPU5SE7D9929H' where id=4; -update noar tt set b0='BCJSYPO4XS6D4BDP6NHA0QEIUJK6LD' where id=4; -update noar ti set b0='BCJSYPO4XS6D4BDP6NHA0QEIUJK6LD' where id=4; -update noar tt set v0='5WCB04GX2QW5VZAWMN4QB9EBOAK6M9' where id=4; -update noar ti set v0='5WCB04GX2QW5VZAWMN4QB9EBOAK6M9' where id=4; -update noar tt set b1='H' where id=4; -update noar ti set b1='H' where id=4; -update noar tt set v0='DT7945J17KV' where id=4; -update noar ti set v0='DT7945J17KV' where id=4; -update noar tt set b2='OB8KMNU' where id=4; -update noar ti set b2='OB8KMNU' where id=4; -update noar tt set v0='7SPXSUCMJ0JJ1ACSMHTSMXNZZ3VLO34' where id=5; -update noar ti set v0='7SPXSUCMJ0JJ1ACSMHTSMXNZZ3VLO34' where id=5; -update noar tt set b0='CXKK13O8DT7W75JSPRP2G' where id=5; -update noar ti set b0='CXKK13O8DT7W75JSPRP2G' where id=5; -update noar tt set v0='XQFOTKSCBERE1YV9' where id=5; -update noar ti set v0='XQFOTKSCBERE1YV9' where id=5; -update noar tt set b1='BU5UMGDCO6N8T5CWBHI76OAC0NUL2X' where id=5; -update noar ti set b1='BU5UMGDCO6N8T5CWBHI76OAC0NUL2X' where id=5; -update noar tt set v0='A' where id=5; -update noar ti set v0='A' where id=5; -update noar tt set b2='L6UCV41J66P4V5' where id=5; -update noar ti set b2='L6UCV41J66P4V5' where id=5; -update noar tt set v0='VRXJDL118RS' where id=6; -update noar ti set v0='VRXJDL118RS' where id=6; -update noar tt set b0='JXU89PSCQPDOWTJZ54DPTV0GH8RT' where id=6; -update noar ti set b0='JXU89PSCQPDOWTJZ54DPTV0GH8RT' where id=6; -update noar tt set v0='RVX0X9XSRBD05K2OUK' where id=6; -update noar ti set v0='RVX0X9XSRBD05K2OUK' where id=6; -update noar tt set b1='4T8GB3K' where id=6; -update noar ti set b1='4T8GB3K' where id=6; -update noar tt set v0='4GP5MACVYNWWMRC' where id=6; -update noar ti set v0='4GP5MACVYNWWMRC' where id=6; -update noar tt set b2='EE9J56' where id=6; -update noar ti set b2='EE9J56' where id=6; -update noar tt set v0='UA1YFZPY8YG3D4YNV' where id=7; -update noar ti set v0='UA1YFZPY8YG3D4YNV' where id=7; -update noar tt set b0='OEH7V6QFRRYP' where id=7; -update noar ti set b0='OEH7V6QFRRYP' where id=7; -update noar tt set v0='G482J8GK4GOQF' where id=7; -update noar ti set v0='G482J8GK4GOQF' where id=7; -update noar tt set b1='1QAOG3C6H4FPXM1FV0W38223HM205D0M' where id=7; -update noar ti set b1='1QAOG3C6H4FPXM1FV0W38223HM205D0M' where id=7; -update noar tt set v0='D' where id=7; -update noar ti set v0='D' where id=7; -update noar tt set b2='J2PJKPD3IJDWJ2FVG790O1511DZ0' where id=7; -update noar ti set b2='J2PJKPD3IJDWJ2FVG790O1511DZ0' where id=7; -update noar tt set v0='IWF4TMZ3U' where id=8; -update noar ti set v0='IWF4TMZ3U' where id=8; -update noar tt set b0='6SMHHEEM5Y' where id=8; -update noar ti set b0='6SMHHEEM5Y' where id=8; -update noar tt set v0='HAQIPOOEOB8A2Y5GSQUA7XEZF5' where id=8; -update noar ti set v0='HAQIPOOEOB8A2Y5GSQUA7XEZF5' where id=8; -update noar tt set b1='H650P' where id=8; -update noar ti set b1='H650P' where id=8; -update noar tt set v0='OWZIQYDZO' where id=8; -update noar ti set v0='OWZIQYDZO' where id=8; -update noar tt set b2='2KRH0CML7JQQFVAYJG8SSV' where id=8; -update noar ti set b2='2KRH0CML7JQQFVAYJG8SSV' where id=8; -update noar tt set v0='DT06CMEN433K' where id=9; -update noar ti set v0='DT06CMEN433K' where id=9; -update noar tt set b0='J' where id=9; -update noar ti set b0='J' where id=9; -update noar tt set v0='GFEVOXFXTZSUAYX65NSZU389LA6SE' where id=9; -update noar ti set v0='GFEVOXFXTZSUAYX65NSZU389LA6SE' where id=9; -update noar tt set b1='OB' where id=9; -update noar ti set b1='OB' where id=9; -update noar tt set v0='QE8HQV' where id=9; -update noar ti set v0='QE8HQV' where id=9; -update noar tt set b2='PWL00I4' where id=9; -update noar ti set b2='PWL00I4' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 tinyblob null, - b1 mediumblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='7Z858Y5VZ8NKN5L99R5XT4' where id=1; -update noar ti set v0='7Z858Y5VZ8NKN5L99R5XT4' where id=1; -update noar tt set b0='E9LDR1BDEV8I8X1S5CYQD91PSVL5I' where id=1; -update noar ti set b0='E9LDR1BDEV8I8X1S5CYQD91PSVL5I' where id=1; -update noar tt set v0='KKFUNM9NIBCJSOZEC04T4YYR3RW' where id=1; -update noar ti set v0='KKFUNM9NIBCJSOZEC04T4YYR3RW' where id=1; -update noar tt set b1='S5MD95WOAGVP8TVHKP9VRK8N9' where id=1; -update noar ti set b1='S5MD95WOAGVP8TVHKP9VRK8N9' where id=1; -update noar tt set v0='QW6GROI0CP183Z48ESY2DW366F' where id=1; -update noar ti set v0='QW6GROI0CP183Z48ESY2DW366F' where id=1; -update noar tt set b2='2EJ8VKCNME5O94UXNRMIS3FS' where id=1; -update noar ti set b2='2EJ8VKCNME5O94UXNRMIS3FS' where id=1; -update noar tt set v0='LAG' where id=2; -update noar ti set v0='LAG' where id=2; -update noar tt set b0='YJW9G' where id=2; -update noar ti set b0='YJW9G' where id=2; -update noar tt set v0='3BSFC8SOOBVX5YXHM534D6TMR5KHZKR' where id=2; -update noar ti set v0='3BSFC8SOOBVX5YXHM534D6TMR5KHZKR' where id=2; -update noar tt set b1='0O3IIKEMQ3DQNAIFD2L' where id=2; -update noar ti set b1='0O3IIKEMQ3DQNAIFD2L' where id=2; -update noar tt set v0='K4ZKQTSDAPJXS7HRVZ2UGN885HF' where id=2; -update noar ti set v0='K4ZKQTSDAPJXS7HRVZ2UGN885HF' where id=2; -update noar tt set b2='YRS616TBSWJQZ' where id=2; -update noar ti set b2='YRS616TBSWJQZ' where id=2; -update noar tt set v0='EIHFPEU65' where id=3; -update noar ti set v0='EIHFPEU65' where id=3; -update noar tt set b0='78XU0Y' where id=3; -update noar ti set b0='78XU0Y' where id=3; -update noar tt set v0='L146AC11XZA' where id=3; -update noar ti set v0='L146AC11XZA' where id=3; -update noar tt set b1='3LP149XR4UY2NJ3PJVNZ9X1BIJREG' where id=3; -update noar ti set b1='3LP149XR4UY2NJ3PJVNZ9X1BIJREG' where id=3; -update noar tt set v0='0C9EMH17SJWTEQC45SXTFEFQXCAG' where id=3; -update noar ti set v0='0C9EMH17SJWTEQC45SXTFEFQXCAG' where id=3; -update noar tt set b2='LTE5WKHH77PTEF3SX3S8' where id=3; -update noar ti set b2='LTE5WKHH77PTEF3SX3S8' where id=3; -update noar tt set v0='MZJDL7WLKQH9QXU' where id=4; -update noar ti set v0='MZJDL7WLKQH9QXU' where id=4; -update noar tt set b0='S9TAMM1IXUG8N6EKL' where id=4; -update noar ti set b0='S9TAMM1IXUG8N6EKL' where id=4; -update noar tt set v0='WZ8' where id=4; -update noar ti set v0='WZ8' where id=4; -update noar tt set b1='N1DVAOUGP6IZQ' where id=4; -update noar ti set b1='N1DVAOUGP6IZQ' where id=4; -update noar tt set v0='U8YKS397AIG' where id=4; -update noar ti set v0='U8YKS397AIG' where id=4; -update noar tt set b2='CB2P9CK3TKGGCJAT1GCM5TVHPTL' where id=4; -update noar ti set b2='CB2P9CK3TKGGCJAT1GCM5TVHPTL' where id=4; -update noar tt set v0='A672DWVSQKD8UI9DKFSTE4QO04MVYR' where id=5; -update noar ti set v0='A672DWVSQKD8UI9DKFSTE4QO04MVYR' where id=5; -update noar tt set b0='PZDSXVTKO6X8N8AFHR0I4HT' where id=5; -update noar ti set b0='PZDSXVTKO6X8N8AFHR0I4HT' where id=5; -update noar tt set v0='9XB3PM8WDU12' where id=5; -update noar ti set v0='9XB3PM8WDU12' where id=5; -update noar tt set b1='G5Z20O4X25BYJZXYERMG39WY3RK4KS' where id=5; -update noar ti set b1='G5Z20O4X25BYJZXYERMG39WY3RK4KS' where id=5; -update noar tt set v0='M1TL1CGO3H907GOXFMZ24MEVE48' where id=5; -update noar ti set v0='M1TL1CGO3H907GOXFMZ24MEVE48' where id=5; -update noar tt set b2='2JI1XUJWWSBH8SQ0WF25KOVJVT8QP8V' where id=5; -update noar ti set b2='2JI1XUJWWSBH8SQ0WF25KOVJVT8QP8V' where id=5; -update noar tt set v0='VC9XCXGJI' where id=6; -update noar ti set v0='VC9XCXGJI' where id=6; -update noar tt set b0='G0LI6NX6NXY6N5UH4K' where id=6; -update noar ti set b0='G0LI6NX6NXY6N5UH4K' where id=6; -update noar tt set v0='2WUB3FLDW522V8258FRA4Q' where id=6; -update noar ti set v0='2WUB3FLDW522V8258FRA4Q' where id=6; -update noar tt set b1='NYUOA5ISGOIHQVE4A' where id=6; -update noar ti set b1='NYUOA5ISGOIHQVE4A' where id=6; -update noar tt set v0='BZIHQRIAC64ECGOXMP55XK25L8V15' where id=6; -update noar ti set v0='BZIHQRIAC64ECGOXMP55XK25L8V15' where id=6; -update noar tt set b2='ST1XVS1Y6BRN352WDU0K' where id=6; -update noar ti set b2='ST1XVS1Y6BRN352WDU0K' where id=6; -update noar tt set v0='44UM' where id=7; -update noar ti set v0='44UM' where id=7; -update noar tt set b0='I5CQYP' where id=7; -update noar ti set b0='I5CQYP' where id=7; -update noar tt set v0='TJ343D1B3VWBIGG7NM' where id=7; -update noar ti set v0='TJ343D1B3VWBIGG7NM' where id=7; -update noar tt set b1='BXRYO2WNW36J1LWGYFTSD' where id=7; -update noar ti set b1='BXRYO2WNW36J1LWGYFTSD' where id=7; -update noar tt set v0='1E5D4PGNE4K4PPF5Y7' where id=7; -update noar ti set v0='1E5D4PGNE4K4PPF5Y7' where id=7; -update noar tt set b2='X64IMDG6OY1AXORNE' where id=7; -update noar ti set b2='X64IMDG6OY1AXORNE' where id=7; -update noar tt set v0='C87D6PCJ1CQ7CE9W2G487UM7GR160O' where id=8; -update noar ti set v0='C87D6PCJ1CQ7CE9W2G487UM7GR160O' where id=8; -update noar tt set b0='G' where id=8; -update noar ti set b0='G' where id=8; -update noar tt set v0='6WVA84SF805DAE43GF0LZB77H2D23' where id=8; -update noar ti set v0='6WVA84SF805DAE43GF0LZB77H2D23' where id=8; -update noar tt set b1='RJXO1WV60MHO7QJDMLLS5864KTPIX6' where id=8; -update noar ti set b1='RJXO1WV60MHO7QJDMLLS5864KTPIX6' where id=8; -update noar tt set v0='Y8' where id=8; -update noar ti set v0='Y8' where id=8; -update noar tt set b2='L3F5NGAUCR0O7F9EZB7' where id=8; -update noar ti set b2='L3F5NGAUCR0O7F9EZB7' where id=8; -update noar tt set v0='JTWG7CW' where id=9; -update noar ti set v0='JTWG7CW' where id=9; -update noar tt set b0='1EHDDNDS308FLBSJYSONAN3K1N97' where id=9; -update noar ti set b0='1EHDDNDS308FLBSJYSONAN3K1N97' where id=9; -update noar tt set v0='HXZJJ3Z02TW0RR4NYL9T5MXH2MSM62V' where id=9; -update noar ti set v0='HXZJJ3Z02TW0RR4NYL9T5MXH2MSM62V' where id=9; -update noar tt set b1='53W417XTIZNEAWWCG6K1SY0DO3F5' where id=9; -update noar ti set b1='53W417XTIZNEAWWCG6K1SY0DO3F5' where id=9; -update noar tt set v0='2JS79G5' where id=9; -update noar ti set v0='2JS79G5' where id=9; -update noar tt set b2='M4TTSJFI' where id=9; -update noar ti set b2='M4TTSJFI' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 tinyblob null, - b1 mediumblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='D68GG5Q9SOQATAJUIA71FZ0LEDUJV' where id=1; -update noar ti set v0='D68GG5Q9SOQATAJUIA71FZ0LEDUJV' where id=1; -update noar tt set b0='M6L7IKRR77JHURU1PAHKKO5' where id=1; -update noar ti set b0='M6L7IKRR77JHURU1PAHKKO5' where id=1; -update noar tt set v0='B32PCJG2QFKW056ZAR' where id=1; -update noar ti set v0='B32PCJG2QFKW056ZAR' where id=1; -update noar tt set b1='N7QS2BWRG3SLC' where id=1; -update noar ti set b1='N7QS2BWRG3SLC' where id=1; -update noar tt set v0='UQ64Y7DPBKG5' where id=1; -update noar ti set v0='UQ64Y7DPBKG5' where id=1; -update noar tt set b2='HD4QCS8BRY5XK5XIEVOFB' where id=1; -update noar ti set b2='HD4QCS8BRY5XK5XIEVOFB' where id=1; -update noar tt set v0='QXX6SFI6IGJTYGB78V9N' where id=2; -update noar ti set v0='QXX6SFI6IGJTYGB78V9N' where id=2; -update noar tt set b0='CE0I08TZ70OMNBVXH' where id=2; -update noar ti set b0='CE0I08TZ70OMNBVXH' where id=2; -update noar tt set v0='X4LAQGDSRN4SUR1GMJMDBUSQX5WWFI4' where id=2; -update noar ti set v0='X4LAQGDSRN4SUR1GMJMDBUSQX5WWFI4' where id=2; -update noar tt set b1='F74' where id=2; -update noar ti set b1='F74' where id=2; -update noar tt set v0='XFKZW' where id=2; -update noar ti set v0='XFKZW' where id=2; -update noar tt set b2='CWOHV9JOST77Z6DRWXBGPVTGWTAE3668' where id=2; -update noar ti set b2='CWOHV9JOST77Z6DRWXBGPVTGWTAE3668' where id=2; -update noar tt set v0='113R56G447OXN' where id=3; -update noar ti set v0='113R56G447OXN' where id=3; -update noar tt set b0='1J4VS2HN0H1GLX' where id=3; -update noar ti set b0='1J4VS2HN0H1GLX' where id=3; -update noar tt set v0='5I8UK79FU3EPV2P01DIL8TVZ5RPQK40' where id=3; -update noar ti set v0='5I8UK79FU3EPV2P01DIL8TVZ5RPQK40' where id=3; -update noar tt set b1='DT6GZG4F7VVXKSODBPXFONXT' where id=3; -update noar ti set b1='DT6GZG4F7VVXKSODBPXFONXT' where id=3; -update noar tt set v0='ZV62DWN8NDA2TZH51GP9' where id=3; -update noar ti set v0='ZV62DWN8NDA2TZH51GP9' where id=3; -update noar tt set b2='HV6VBZEX23A' where id=3; -update noar ti set b2='HV6VBZEX23A' where id=3; -update noar tt set v0='BE' where id=4; -update noar ti set v0='BE' where id=4; -update noar tt set b0='9D2YHOQIKL978QDU7WBGDZ9' where id=4; -update noar ti set b0='9D2YHOQIKL978QDU7WBGDZ9' where id=4; -update noar tt set v0='H8Z0P33VT7Z0R17DA8' where id=4; -update noar ti set v0='H8Z0P33VT7Z0R17DA8' where id=4; -update noar tt set b1='BQ2HZ2WMKRUU76I0PEYLZGB' where id=4; -update noar ti set b1='BQ2HZ2WMKRUU76I0PEYLZGB' where id=4; -update noar tt set v0='MM' where id=4; -update noar ti set v0='MM' where id=4; -update noar tt set b2='OAB3M7JQTU2UT4YPG' where id=4; -update noar ti set b2='OAB3M7JQTU2UT4YPG' where id=4; -update noar tt set v0='ESJHULU968AI45R' where id=5; -update noar ti set v0='ESJHULU968AI45R' where id=5; -update noar tt set b0='4IG69AXMK2PFPGJITJF5VN7H4LC' where id=5; -update noar ti set b0='4IG69AXMK2PFPGJITJF5VN7H4LC' where id=5; -update noar tt set v0='GWO4X' where id=5; -update noar ti set v0='GWO4X' where id=5; -update noar tt set b1='VIPWYMLC' where id=5; -update noar ti set b1='VIPWYMLC' where id=5; -update noar tt set v0='UI7W299N46VA4115O3' where id=5; -update noar ti set v0='UI7W299N46VA4115O3' where id=5; -update noar tt set b2='IRHYWH9112H5AT' where id=5; -update noar ti set b2='IRHYWH9112H5AT' where id=5; -update noar tt set v0='RLPAXD7BR7ZNBE28CVROUTKAI7WA7A9' where id=6; -update noar ti set v0='RLPAXD7BR7ZNBE28CVROUTKAI7WA7A9' where id=6; -update noar tt set b0='Y10NRZSOYNI' where id=6; -update noar ti set b0='Y10NRZSOYNI' where id=6; -update noar tt set v0='5' where id=6; -update noar ti set v0='5' where id=6; -update noar tt set b1='KBVSUGQ46GM' where id=6; -update noar ti set b1='KBVSUGQ46GM' where id=6; -update noar tt set v0='MXBS7CXSSB9ONXTGE55L3GNGW' where id=6; -update noar ti set v0='MXBS7CXSSB9ONXTGE55L3GNGW' where id=6; -update noar tt set b2='7A' where id=6; -update noar ti set b2='7A' where id=6; -update noar tt set v0='W74N269MMSYJ9LRXXA' where id=7; -update noar ti set v0='W74N269MMSYJ9LRXXA' where id=7; -update noar tt set b0='FWDL5' where id=7; -update noar ti set b0='FWDL5' where id=7; -update noar tt set v0='8ULHZH9MCXPG3' where id=7; -update noar ti set v0='8ULHZH9MCXPG3' where id=7; -update noar tt set b1='Y6J2M' where id=7; -update noar ti set b1='Y6J2M' where id=7; -update noar tt set v0='YV51SWJN7W4GULEZ2RKUD12I' where id=7; -update noar ti set v0='YV51SWJN7W4GULEZ2RKUD12I' where id=7; -update noar tt set b2='DE9I19TJR75FQTQDQ0HWZADBY' where id=7; -update noar ti set b2='DE9I19TJR75FQTQDQ0HWZADBY' where id=7; -update noar tt set v0='BLECES8XEXKTB2KY7FK9SQ16WY3JV' where id=8; -update noar ti set v0='BLECES8XEXKTB2KY7FK9SQ16WY3JV' where id=8; -update noar tt set b0='AR' where id=8; -update noar ti set b0='AR' where id=8; -update noar tt set v0='09IRF87DNC' where id=8; -update noar ti set v0='09IRF87DNC' where id=8; -update noar tt set b1='OICBIIUGDPPOAVGSWOSL1UCI2ICEPQ' where id=8; -update noar ti set b1='OICBIIUGDPPOAVGSWOSL1UCI2ICEPQ' where id=8; -update noar tt set v0='S16J2' where id=8; -update noar ti set v0='S16J2' where id=8; -update noar tt set b2='9RY8PFPAA9UAGNVT5UYSB2KNNDGQ1K' where id=8; -update noar ti set b2='9RY8PFPAA9UAGNVT5UYSB2KNNDGQ1K' where id=8; -update noar tt set v0='6D26BW19C2H9E0YB2' where id=9; -update noar ti set v0='6D26BW19C2H9E0YB2' where id=9; -update noar tt set b0='MED6' where id=9; -update noar ti set b0='MED6' where id=9; -update noar tt set v0='M0QWIXGOO068AXGB528E704V8MX' where id=9; -update noar ti set v0='M0QWIXGOO068AXGB528E704V8MX' where id=9; -update noar tt set b1='ZJC4W89KJC2FHJGB' where id=9; -update noar ti set b1='ZJC4W89KJC2FHJGB' where id=9; -update noar tt set v0='HQKDA2Y4S338AX76RUFTW3DTU44N40' where id=9; -update noar ti set v0='HQKDA2Y4S338AX76RUFTW3DTU44N40' where id=9; -update noar tt set b2='QZFMIAIEGLEXXTNT' where id=9; -update noar ti set b2='QZFMIAIEGLEXXTNT' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 tinyblob not null, - b1 mediumblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='S3F7S9AK0YP' where id=1; -update noar ti set v0='S3F7S9AK0YP' where id=1; -update noar tt set b0='Z5UUTMGMKKZJ' where id=1; -update noar ti set b0='Z5UUTMGMKKZJ' where id=1; -update noar tt set v0='K3L7RJO' where id=1; -update noar ti set v0='K3L7RJO' where id=1; -update noar tt set b1='1622058N4DPL7H55O5OOL4VUR51RBIIV' where id=1; -update noar ti set b1='1622058N4DPL7H55O5OOL4VUR51RBIIV' where id=1; -update noar tt set v0='K31R9YMPUNN98F01KA0FIZ' where id=1; -update noar ti set v0='K31R9YMPUNN98F01KA0FIZ' where id=1; -update noar tt set b2='NFJ72P3VX50PQTU3JREOK7DO77' where id=1; -update noar ti set b2='NFJ72P3VX50PQTU3JREOK7DO77' where id=1; -update noar tt set v0='3W6OXZC779BHQLZ2YDX774J7TULGDCX' where id=2; -update noar ti set v0='3W6OXZC779BHQLZ2YDX774J7TULGDCX' where id=2; -update noar tt set b0='Y2WB054PXLQ0Q2RL40280TYRK7' where id=2; -update noar ti set b0='Y2WB054PXLQ0Q2RL40280TYRK7' where id=2; -update noar tt set v0='IK4' where id=2; -update noar ti set v0='IK4' where id=2; -update noar tt set b1='ETBRSMGLTFRUPHTTP' where id=2; -update noar ti set b1='ETBRSMGLTFRUPHTTP' where id=2; -update noar tt set v0='B79HM6DJD4NWN8' where id=2; -update noar ti set v0='B79HM6DJD4NWN8' where id=2; -update noar tt set b2='V2MKIYITZS0M3L5JCLF3S' where id=2; -update noar ti set b2='V2MKIYITZS0M3L5JCLF3S' where id=2; -update noar tt set v0='2ZB67WCYT37M61OMFBBIAYWP3' where id=3; -update noar ti set v0='2ZB67WCYT37M61OMFBBIAYWP3' where id=3; -update noar tt set b0='EV4WGVR93A8CAG9FUL' where id=3; -update noar ti set b0='EV4WGVR93A8CAG9FUL' where id=3; -update noar tt set v0='IPVFRLP' where id=3; -update noar ti set v0='IPVFRLP' where id=3; -update noar tt set b1='31LU3C' where id=3; -update noar ti set b1='31LU3C' where id=3; -update noar tt set v0='OO7ZU06UD77M1RQZZFY03A' where id=3; -update noar ti set v0='OO7ZU06UD77M1RQZZFY03A' where id=3; -update noar tt set b2='60VHD7B5Y4W' where id=3; -update noar ti set b2='60VHD7B5Y4W' where id=3; -update noar tt set v0='BB94V2JU6ALPIBTLG' where id=4; -update noar ti set v0='BB94V2JU6ALPIBTLG' where id=4; -update noar tt set b0='6IXQYM3N0IV8PTZ2I' where id=4; -update noar ti set b0='6IXQYM3N0IV8PTZ2I' where id=4; -update noar tt set v0='BVHUE64X6' where id=4; -update noar ti set v0='BVHUE64X6' where id=4; -update noar tt set b1='S8TZAY1QNUV8' where id=4; -update noar ti set b1='S8TZAY1QNUV8' where id=4; -update noar tt set v0='YN5PRCVKAX5V4316L2IB' where id=4; -update noar ti set v0='YN5PRCVKAX5V4316L2IB' where id=4; -update noar tt set b2='AFUO' where id=4; -update noar ti set b2='AFUO' where id=4; -update noar tt set v0='OPJDDYQQD1TNGIU7IVLX94E' where id=5; -update noar ti set v0='OPJDDYQQD1TNGIU7IVLX94E' where id=5; -update noar tt set b0='8O2QDIE193WD6M75RXMNO54FPD' where id=5; -update noar ti set b0='8O2QDIE193WD6M75RXMNO54FPD' where id=5; -update noar tt set v0='6FHUDYMHQ' where id=5; -update noar ti set v0='6FHUDYMHQ' where id=5; -update noar tt set b1='961WQOFE' where id=5; -update noar ti set b1='961WQOFE' where id=5; -update noar tt set v0='13BNPH6SG2' where id=5; -update noar ti set v0='13BNPH6SG2' where id=5; -update noar tt set b2='FT7GPE0L3' where id=5; -update noar ti set b2='FT7GPE0L3' where id=5; -update noar tt set v0='CNZOKRHRC9WWZZRCRHPQ1' where id=6; -update noar ti set v0='CNZOKRHRC9WWZZRCRHPQ1' where id=6; -update noar tt set b0='3LO2V4LLBZMRPMGL3QQSDDKM05' where id=6; -update noar ti set b0='3LO2V4LLBZMRPMGL3QQSDDKM05' where id=6; -update noar tt set v0='6APG6HGWLJTIIBDS9' where id=6; -update noar ti set v0='6APG6HGWLJTIIBDS9' where id=6; -update noar tt set b1='XIUSQTJ3KQRAM3BIDUU5STK6Z' where id=6; -update noar ti set b1='XIUSQTJ3KQRAM3BIDUU5STK6Z' where id=6; -update noar tt set v0='WIHRFWOM6RIQT02NNT1' where id=6; -update noar ti set v0='WIHRFWOM6RIQT02NNT1' where id=6; -update noar tt set b2='GLC41' where id=6; -update noar ti set b2='GLC41' where id=6; -update noar tt set v0='HXU2ON7XXF45V07QK1FTHPYZ06VNY24J' where id=7; -update noar ti set v0='HXU2ON7XXF45V07QK1FTHPYZ06VNY24J' where id=7; -update noar tt set b0='B3URBSGX1J' where id=7; -update noar ti set b0='B3URBSGX1J' where id=7; -update noar tt set v0='LL36B' where id=7; -update noar ti set v0='LL36B' where id=7; -update noar tt set b1='8XH7466YFSOORGNOAGIW' where id=7; -update noar ti set b1='8XH7466YFSOORGNOAGIW' where id=7; -update noar tt set v0='1ZSQIMUMTW81HPTQ5BGQQU4KL8OWBD' where id=7; -update noar ti set v0='1ZSQIMUMTW81HPTQ5BGQQU4KL8OWBD' where id=7; -update noar tt set b2='4JSJLNDWQHXVZZ' where id=7; -update noar ti set b2='4JSJLNDWQHXVZZ' where id=7; -update noar tt set v0='RK7PKKVKDH3SYN0GLKQ6VNS' where id=8; -update noar ti set v0='RK7PKKVKDH3SYN0GLKQ6VNS' where id=8; -update noar tt set b0='YL1E91R8B9SNTZZ7K8BDF6JME86CET2' where id=8; -update noar ti set b0='YL1E91R8B9SNTZZ7K8BDF6JME86CET2' where id=8; -update noar tt set v0='EDSER' where id=8; -update noar ti set v0='EDSER' where id=8; -update noar tt set b1='L47ZLG9SZ6LXO2I8VKPZ7G' where id=8; -update noar ti set b1='L47ZLG9SZ6LXO2I8VKPZ7G' where id=8; -update noar tt set v0='U' where id=8; -update noar ti set v0='U' where id=8; -update noar tt set b2='R7U7QIA4BC5ILV' where id=8; -update noar ti set b2='R7U7QIA4BC5ILV' where id=8; -update noar tt set v0='L34A926M4' where id=9; -update noar ti set v0='L34A926M4' where id=9; -update noar tt set b0='V3P35UFHF9B44UGPV' where id=9; -update noar ti set b0='V3P35UFHF9B44UGPV' where id=9; -update noar tt set v0='HK81AJ' where id=9; -update noar ti set v0='HK81AJ' where id=9; -update noar tt set b1='E68MZTQEMU3J6NQY0JD7RBQ7' where id=9; -update noar ti set b1='E68MZTQEMU3J6NQY0JD7RBQ7' where id=9; -update noar tt set v0='87UJ1M' where id=9; -update noar ti set v0='87UJ1M' where id=9; -update noar tt set b2='HEPA59RITMM9FYMS6O1' where id=9; -update noar ti set b2='HEPA59RITMM9FYMS6O1' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 tinyblob not null, - b1 mediumblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='KR6CD6J84QBMHHZMQPX56F4TH20' where id=1; -update noar ti set v0='KR6CD6J84QBMHHZMQPX56F4TH20' where id=1; -update noar tt set b0='YKLJEKDQMMTVB66Q1Y8RO' where id=1; -update noar ti set b0='YKLJEKDQMMTVB66Q1Y8RO' where id=1; -update noar tt set v0='I87' where id=1; -update noar ti set v0='I87' where id=1; -update noar tt set b1='FIH4E146YD9XAI8WTZ6EI7ZT8E6H' where id=1; -update noar ti set b1='FIH4E146YD9XAI8WTZ6EI7ZT8E6H' where id=1; -update noar tt set v0='7Z4Y2IVOA28OHY0NRCVK9WDV056' where id=1; -update noar ti set v0='7Z4Y2IVOA28OHY0NRCVK9WDV056' where id=1; -update noar tt set b2='9MR583L9POAYT06HVFZU8AMA' where id=1; -update noar ti set b2='9MR583L9POAYT06HVFZU8AMA' where id=1; -update noar tt set v0='ZUI9ETVQ5ML65N' where id=2; -update noar ti set v0='ZUI9ETVQ5ML65N' where id=2; -update noar tt set b0='G96KUMZ' where id=2; -update noar ti set b0='G96KUMZ' where id=2; -update noar tt set v0='VDOV3MDT3' where id=2; -update noar ti set v0='VDOV3MDT3' where id=2; -update noar tt set b1='IH06FHS8' where id=2; -update noar ti set b1='IH06FHS8' where id=2; -update noar tt set v0='PMLW0AO0IO6K8OIS4G353MK6C' where id=2; -update noar ti set v0='PMLW0AO0IO6K8OIS4G353MK6C' where id=2; -update noar tt set b2='DSILZ9VZD3YPV7UKRX3M' where id=2; -update noar ti set b2='DSILZ9VZD3YPV7UKRX3M' where id=2; -update noar tt set v0='TWLJHR0FL' where id=3; -update noar ti set v0='TWLJHR0FL' where id=3; -update noar tt set b0='7488CW' where id=3; -update noar ti set b0='7488CW' where id=3; -update noar tt set v0='U151TG' where id=3; -update noar ti set v0='U151TG' where id=3; -update noar tt set b1='DNCZUGXB9G1OI9WQNM6XEO' where id=3; -update noar ti set b1='DNCZUGXB9G1OI9WQNM6XEO' where id=3; -update noar tt set v0='EPOBTSF40D33J8474BYRVTI85V' where id=3; -update noar ti set v0='EPOBTSF40D33J8474BYRVTI85V' where id=3; -update noar tt set b2='XI' where id=3; -update noar ti set b2='XI' where id=3; -update noar tt set v0='R0W5P3E' where id=4; -update noar ti set v0='R0W5P3E' where id=4; -update noar tt set b0='9HINPQNXGA9XVJ5A3VJIP8JS' where id=4; -update noar ti set b0='9HINPQNXGA9XVJ5A3VJIP8JS' where id=4; -update noar tt set v0='LGXWKJWGM48NZ4D3IN470WGA8B0P5' where id=4; -update noar ti set v0='LGXWKJWGM48NZ4D3IN470WGA8B0P5' where id=4; -update noar tt set b1='TTFV7HNFFF1TZS2TNQQN47IGRE' where id=4; -update noar ti set b1='TTFV7HNFFF1TZS2TNQQN47IGRE' where id=4; -update noar tt set v0='VJ0SQ2LI65VG9V' where id=4; -update noar ti set v0='VJ0SQ2LI65VG9V' where id=4; -update noar tt set b2='OC8G060CPO0T7NV' where id=4; -update noar ti set b2='OC8G060CPO0T7NV' where id=4; -update noar tt set v0='A76VH8AT62PN7X6SO' where id=5; -update noar ti set v0='A76VH8AT62PN7X6SO' where id=5; -update noar tt set b0='HQI' where id=5; -update noar ti set b0='HQI' where id=5; -update noar tt set v0='PPEUE809UU' where id=5; -update noar ti set v0='PPEUE809UU' where id=5; -update noar tt set b1='MBG' where id=5; -update noar ti set b1='MBG' where id=5; -update noar tt set v0='YL0FNAO8K0OD8OX7SQHGPO' where id=5; -update noar ti set v0='YL0FNAO8K0OD8OX7SQHGPO' where id=5; -update noar tt set b2='IW203FVPO0ZC80BQC9' where id=5; -update noar ti set b2='IW203FVPO0ZC80BQC9' where id=5; -update noar tt set v0='9' where id=6; -update noar ti set v0='9' where id=6; -update noar tt set b0='RA173ND740XTMO6TVAF3A121PZEO1' where id=6; -update noar ti set b0='RA173ND740XTMO6TVAF3A121PZEO1' where id=6; -update noar tt set v0='9ZZUQYADGJVNH' where id=6; -update noar ti set v0='9ZZUQYADGJVNH' where id=6; -update noar tt set b1='41LB5CSJ1KKXUA0FHUZ0LFVP0UN1' where id=6; -update noar ti set b1='41LB5CSJ1KKXUA0FHUZ0LFVP0UN1' where id=6; -update noar tt set v0='1MHTHUQFUE7NDVBKGWTLS20P' where id=6; -update noar ti set v0='1MHTHUQFUE7NDVBKGWTLS20P' where id=6; -update noar tt set b2='FZNWI0T7D8HEGGXCDLW5V8' where id=6; -update noar ti set b2='FZNWI0T7D8HEGGXCDLW5V8' where id=6; -update noar tt set v0='PYG168I5HPMQZJ50WTW' where id=7; -update noar ti set v0='PYG168I5HPMQZJ50WTW' where id=7; -update noar tt set b0='AIP4G' where id=7; -update noar ti set b0='AIP4G' where id=7; -update noar tt set v0='RLL56UBNGW9V0H5B1JFTJ8T45' where id=7; -update noar ti set v0='RLL56UBNGW9V0H5B1JFTJ8T45' where id=7; -update noar tt set b1='8R04DYD8WXDL9J8GA9K46' where id=7; -update noar ti set b1='8R04DYD8WXDL9J8GA9K46' where id=7; -update noar tt set v0='1440DQZJA75KEPZ' where id=7; -update noar ti set v0='1440DQZJA75KEPZ' where id=7; -update noar tt set b2='1RRLN29GGT5510H1HGJQRN' where id=7; -update noar ti set b2='1RRLN29GGT5510H1HGJQRN' where id=7; -update noar tt set v0='A7FP' where id=8; -update noar ti set v0='A7FP' where id=8; -update noar tt set b0='ANJCN9' where id=8; -update noar ti set b0='ANJCN9' where id=8; -update noar tt set v0='MOTAOXADB7OLGUA' where id=8; -update noar ti set v0='MOTAOXADB7OLGUA' where id=8; -update noar tt set b1='VKZ6KTY4RY' where id=8; -update noar ti set b1='VKZ6KTY4RY' where id=8; -update noar tt set v0='3UZR27J18RDXFZYM9R9O8YDJ5ZQ' where id=8; -update noar ti set v0='3UZR27J18RDXFZYM9R9O8YDJ5ZQ' where id=8; -update noar tt set b2='4FG0QHESKSZWVQXPYLO94LDQ3EJH' where id=8; -update noar ti set b2='4FG0QHESKSZWVQXPYLO94LDQ3EJH' where id=8; -update noar tt set v0='9QTTIQVM2X5445E1301' where id=9; -update noar ti set v0='9QTTIQVM2X5445E1301' where id=9; -update noar tt set b0='0ZUTGBTKWPV6DNOU368JF9' where id=9; -update noar ti set b0='0ZUTGBTKWPV6DNOU368JF9' where id=9; -update noar tt set v0='EOKS4EH9CAB58NNTO6' where id=9; -update noar ti set v0='EOKS4EH9CAB58NNTO6' where id=9; -update noar tt set b1='QV9JKQS7TFIZEI' where id=9; -update noar ti set b1='QV9JKQS7TFIZEI' where id=9; -update noar tt set v0='523I0MUVJGEERQWURHOKW2XA17U2L' where id=9; -update noar ti set v0='523I0MUVJGEERQWURHOKW2XA17U2L' where id=9; -update noar tt set b2='DJPLTJ3B3ZI5KDSGN3J' where id=9; -update noar ti set b2='DJPLTJ3B3ZI5KDSGN3J' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 tinyblob null, - b1 mediumblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='QI1D524Q1F0N1ZCQRQQBJHCO' where id=1; -update noar ti set v0='QI1D524Q1F0N1ZCQRQQBJHCO' where id=1; -update noar tt set b0='PAFV69S' where id=1; -update noar ti set b0='PAFV69S' where id=1; -update noar tt set v0='409ATEAANPGR91AX0A0M' where id=1; -update noar ti set v0='409ATEAANPGR91AX0A0M' where id=1; -update noar tt set b1='LB21FBR33M95CARMU64NI' where id=1; -update noar ti set b1='LB21FBR33M95CARMU64NI' where id=1; -update noar tt set v0='Z6HOGCQD4CD' where id=1; -update noar ti set v0='Z6HOGCQD4CD' where id=1; -update noar tt set b2='VPQZG88' where id=1; -update noar ti set b2='VPQZG88' where id=1; -update noar tt set v0='R9P0OHVUEQS4L63EA0RE93N' where id=2; -update noar ti set v0='R9P0OHVUEQS4L63EA0RE93N' where id=2; -update noar tt set b0='F0' where id=2; -update noar ti set b0='F0' where id=2; -update noar tt set v0='P28R16ZVLNQG03ZLOUQWMW' where id=2; -update noar ti set v0='P28R16ZVLNQG03ZLOUQWMW' where id=2; -update noar tt set b1='QIT57VJ4' where id=2; -update noar ti set b1='QIT57VJ4' where id=2; -update noar tt set v0='VFK7784E8XA1Y78T4KZ9X9F1JC1DW9' where id=2; -update noar ti set v0='VFK7784E8XA1Y78T4KZ9X9F1JC1DW9' where id=2; -update noar tt set b2='Q54H9KI1LH' where id=2; -update noar ti set b2='Q54H9KI1LH' where id=2; -update noar tt set v0='XSG3KHPK3SDS462XWJSDDK' where id=3; -update noar ti set v0='XSG3KHPK3SDS462XWJSDDK' where id=3; -update noar tt set b0='PMFR2O1H9EW9OIP1RHT6LOPF4ZJSQ' where id=3; -update noar ti set b0='PMFR2O1H9EW9OIP1RHT6LOPF4ZJSQ' where id=3; -update noar tt set v0='5HL3KNE693HPYYQ1WAJH' where id=3; -update noar ti set v0='5HL3KNE693HPYYQ1WAJH' where id=3; -update noar tt set b1='CWA86VXD80VCBODCTRZ2KH507K' where id=3; -update noar ti set b1='CWA86VXD80VCBODCTRZ2KH507K' where id=3; -update noar tt set v0='4JXQ0USI6W4NDSZ8SALR0ARP' where id=3; -update noar ti set v0='4JXQ0USI6W4NDSZ8SALR0ARP' where id=3; -update noar tt set b2='OE10V' where id=3; -update noar ti set b2='OE10V' where id=3; -update noar tt set v0='1PDUHI59GTBI3JKOKFW0' where id=4; -update noar ti set v0='1PDUHI59GTBI3JKOKFW0' where id=4; -update noar tt set b0='JDQBUVHWHW56AMEIODVTZVI2B1F' where id=4; -update noar ti set b0='JDQBUVHWHW56AMEIODVTZVI2B1F' where id=4; -update noar tt set v0='E45XB8CQV9ICXLVTEGF' where id=4; -update noar ti set v0='E45XB8CQV9ICXLVTEGF' where id=4; -update noar tt set b1='GQYJ04AD9B' where id=4; -update noar ti set b1='GQYJ04AD9B' where id=4; -update noar tt set v0='C88UGD7EP3W2SY2W' where id=4; -update noar ti set v0='C88UGD7EP3W2SY2W' where id=4; -update noar tt set b2='C6H1EG1PS62NB1NP1LZH7' where id=4; -update noar ti set b2='C6H1EG1PS62NB1NP1LZH7' where id=4; -update noar tt set v0='EGBAY8M07WWQ8FELS7BSO2ZFU' where id=5; -update noar ti set v0='EGBAY8M07WWQ8FELS7BSO2ZFU' where id=5; -update noar tt set b0='ITK60WIK' where id=5; -update noar ti set b0='ITK60WIK' where id=5; -update noar tt set v0='MHCY2LN8RDAS159QSJNNO5XL7ROVA81' where id=5; -update noar ti set v0='MHCY2LN8RDAS159QSJNNO5XL7ROVA81' where id=5; -update noar tt set b1='M3ZE1' where id=5; -update noar ti set b1='M3ZE1' where id=5; -update noar tt set v0='3TQW87CF8R6NRTA3MGSWKL' where id=5; -update noar ti set v0='3TQW87CF8R6NRTA3MGSWKL' where id=5; -update noar tt set b2='XF5EV84RRH46WSU' where id=5; -update noar ti set b2='XF5EV84RRH46WSU' where id=5; -update noar tt set v0='GAQPM9PEZ9J9' where id=6; -update noar ti set v0='GAQPM9PEZ9J9' where id=6; -update noar tt set b0='JNFM9DOS07CX' where id=6; -update noar ti set b0='JNFM9DOS07CX' where id=6; -update noar tt set v0='EKTA2JA' where id=6; -update noar ti set v0='EKTA2JA' where id=6; -update noar tt set b1='9TI64C8W' where id=6; -update noar ti set b1='9TI64C8W' where id=6; -update noar tt set v0='QPQO6L45ERCQ' where id=6; -update noar ti set v0='QPQO6L45ERCQ' where id=6; -update noar tt set b2='YU6O322N84' where id=6; -update noar ti set b2='YU6O322N84' where id=6; -update noar tt set v0='9MOPKEC3YHUC7JCBDE3DNAWYIQ5JGRLJ' where id=7; -update noar ti set v0='9MOPKEC3YHUC7JCBDE3DNAWYIQ5JGRLJ' where id=7; -update noar tt set b0='K1VOH19RCN5M0H9' where id=7; -update noar ti set b0='K1VOH19RCN5M0H9' where id=7; -update noar tt set v0='Z1PEO653XQ' where id=7; -update noar ti set v0='Z1PEO653XQ' where id=7; -update noar tt set b1='E7FTONJM9D5YK4XSC7B232MAHZEQBI' where id=7; -update noar ti set b1='E7FTONJM9D5YK4XSC7B232MAHZEQBI' where id=7; -update noar tt set v0='1CHPH7IBAKB5MJD7CER4ZW' where id=7; -update noar ti set v0='1CHPH7IBAKB5MJD7CER4ZW' where id=7; -update noar tt set b2='H8I2AB424FIW1G0Y06QAVQ' where id=7; -update noar ti set b2='H8I2AB424FIW1G0Y06QAVQ' where id=7; -update noar tt set v0='P9C6M01CH7T3O00LP9FSBMHZM' where id=8; -update noar ti set v0='P9C6M01CH7T3O00LP9FSBMHZM' where id=8; -update noar tt set b0='P1K19RV7VCEZTO7Z93Q1VMT' where id=8; -update noar ti set b0='P1K19RV7VCEZTO7Z93Q1VMT' where id=8; -update noar tt set v0='SYEX0YYSQ2027AF8R662XUHY38' where id=8; -update noar ti set v0='SYEX0YYSQ2027AF8R662XUHY38' where id=8; -update noar tt set b1='Z46W8IVOU102' where id=8; -update noar ti set b1='Z46W8IVOU102' where id=8; -update noar tt set v0='3FC82NFQVXW92HK4TLP4FI8AWWRKJ5' where id=8; -update noar ti set v0='3FC82NFQVXW92HK4TLP4FI8AWWRKJ5' where id=8; -update noar tt set b2='Z1F4CV84KTF' where id=8; -update noar ti set b2='Z1F4CV84KTF' where id=8; -update noar tt set v0='9WJE2BGKD' where id=9; -update noar ti set v0='9WJE2BGKD' where id=9; -update noar tt set b0='XHZX1I8N23X7PYXIZMSGJVTSG9YBPP' where id=9; -update noar ti set b0='XHZX1I8N23X7PYXIZMSGJVTSG9YBPP' where id=9; -update noar tt set v0='3ZC3UYU38PXORS1U5GC997LTW6QU3' where id=9; -update noar ti set v0='3ZC3UYU38PXORS1U5GC997LTW6QU3' where id=9; -update noar tt set b1='4MRXLH' where id=9; -update noar ti set b1='4MRXLH' where id=9; -update noar tt set v0='HX1SEM5J857LF8MG4EDN' where id=9; -update noar ti set v0='HX1SEM5J857LF8MG4EDN' where id=9; -update noar tt set b2='TLHBOX3UVX879TGT3W' where id=9; -update noar ti set b2='TLHBOX3UVX879TGT3W' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 tinyblob null, - b1 mediumblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='UGNW0NVR9CGHXEE' where id=1; -update noar ti set v0='UGNW0NVR9CGHXEE' where id=1; -update noar tt set b0='JZP1DF02Q2G08DC4J' where id=1; -update noar ti set b0='JZP1DF02Q2G08DC4J' where id=1; -update noar tt set v0='OUK5P1NMIKTAYB0LUOD' where id=1; -update noar ti set v0='OUK5P1NMIKTAYB0LUOD' where id=1; -update noar tt set b1='3RC0S4F0T9GKAFI3DGEWMYR6E4' where id=1; -update noar ti set b1='3RC0S4F0T9GKAFI3DGEWMYR6E4' where id=1; -update noar tt set v0='RXAQ2ZJKPIEGLGDS6GB6N' where id=1; -update noar ti set v0='RXAQ2ZJKPIEGLGDS6GB6N' where id=1; -update noar tt set b2='6X3Q836J0HJAMIO32I9MQ59PF' where id=1; -update noar ti set b2='6X3Q836J0HJAMIO32I9MQ59PF' where id=1; -update noar tt set v0='J' where id=2; -update noar ti set v0='J' where id=2; -update noar tt set b0='4EE1BFRMWLI12I1M7Y8LIJ7GCLD0' where id=2; -update noar ti set b0='4EE1BFRMWLI12I1M7Y8LIJ7GCLD0' where id=2; -update noar tt set v0='DVCWYO' where id=2; -update noar ti set v0='DVCWYO' where id=2; -update noar tt set b1='AV615JHC8H0YVWUZ8LCT6YEQV' where id=2; -update noar ti set b1='AV615JHC8H0YVWUZ8LCT6YEQV' where id=2; -update noar tt set v0='SQ32WAZI0XC9UCZOW57AK' where id=2; -update noar ti set v0='SQ32WAZI0XC9UCZOW57AK' where id=2; -update noar tt set b2='H8QNRP06IZ98HU' where id=2; -update noar ti set b2='H8QNRP06IZ98HU' where id=2; -update noar tt set v0='GCSIQH4HQGOVW6LOUMIFI3DNLK8PQJ' where id=3; -update noar ti set v0='GCSIQH4HQGOVW6LOUMIFI3DNLK8PQJ' where id=3; -update noar tt set b0='SR5BE2' where id=3; -update noar ti set b0='SR5BE2' where id=3; -update noar tt set v0='FUK4CPT09' where id=3; -update noar ti set v0='FUK4CPT09' where id=3; -update noar tt set b1='FK93J39T' where id=3; -update noar ti set b1='FK93J39T' where id=3; -update noar tt set v0='Y8MPUQX06QU93ISM' where id=3; -update noar ti set v0='Y8MPUQX06QU93ISM' where id=3; -update noar tt set b2='AQOM794MF6' where id=3; -update noar ti set b2='AQOM794MF6' where id=3; -update noar tt set v0='YGNZ37H2EY' where id=4; -update noar ti set v0='YGNZ37H2EY' where id=4; -update noar tt set b0='ISTM731LD2T0VS9GTV1127IZ31D7' where id=4; -update noar ti set b0='ISTM731LD2T0VS9GTV1127IZ31D7' where id=4; -update noar tt set v0='EVMR7QIFIA5ET' where id=4; -update noar ti set v0='EVMR7QIFIA5ET' where id=4; -update noar tt set b1='OEE8YI2NTBI830RQ50EOTJ' where id=4; -update noar ti set b1='OEE8YI2NTBI830RQ50EOTJ' where id=4; -update noar tt set v0='CM340O76' where id=4; -update noar ti set v0='CM340O76' where id=4; -update noar tt set b2='MTVH671' where id=4; -update noar ti set b2='MTVH671' where id=4; -update noar tt set v0='NUXIT7YXBWNU7JSSEG' where id=5; -update noar ti set v0='NUXIT7YXBWNU7JSSEG' where id=5; -update noar tt set b0='5Q2Q6V7687QVIXLKZ' where id=5; -update noar ti set b0='5Q2Q6V7687QVIXLKZ' where id=5; -update noar tt set v0='DRLXXKEFR' where id=5; -update noar ti set v0='DRLXXKEFR' where id=5; -update noar tt set b1='NKU03MBYK' where id=5; -update noar ti set b1='NKU03MBYK' where id=5; -update noar tt set v0='JVR3WRCQDPZRNM' where id=5; -update noar ti set v0='JVR3WRCQDPZRNM' where id=5; -update noar tt set b2='2EEAQS3Z3CAKPH6X5' where id=5; -update noar ti set b2='2EEAQS3Z3CAKPH6X5' where id=5; -update noar tt set v0='5MPNKQWARIS25H67PT69WJGFYFS68393' where id=6; -update noar ti set v0='5MPNKQWARIS25H67PT69WJGFYFS68393' where id=6; -update noar tt set b0='L0WOAUA8WXYQ79E8L' where id=6; -update noar ti set b0='L0WOAUA8WXYQ79E8L' where id=6; -update noar tt set v0='90K71NJ4WWF0T2EAP5' where id=6; -update noar ti set v0='90K71NJ4WWF0T2EAP5' where id=6; -update noar tt set b1='XHAOECLN4YC7LRK8U8CHX0C349' where id=6; -update noar ti set b1='XHAOECLN4YC7LRK8U8CHX0C349' where id=6; -update noar tt set v0='8734P' where id=6; -update noar ti set v0='8734P' where id=6; -update noar tt set b2='C' where id=6; -update noar ti set b2='C' where id=6; -update noar tt set v0='R' where id=7; -update noar ti set v0='R' where id=7; -update noar tt set b0='L3X5DO95UYNEIE48SV2R5' where id=7; -update noar ti set b0='L3X5DO95UYNEIE48SV2R5' where id=7; -update noar tt set v0='9GMTQFPDXZ5RZY6ELJ2UD8BEHIU' where id=7; -update noar ti set v0='9GMTQFPDXZ5RZY6ELJ2UD8BEHIU' where id=7; -update noar tt set b1='48TEU3QD39KNR7223EPV' where id=7; -update noar ti set b1='48TEU3QD39KNR7223EPV' where id=7; -update noar tt set v0='2T92WIU6XOLA5VU' where id=7; -update noar ti set v0='2T92WIU6XOLA5VU' where id=7; -update noar tt set b2='WMA40QRLVM937BKUZVF444M8A81QKX' where id=7; -update noar ti set b2='WMA40QRLVM937BKUZVF444M8A81QKX' where id=7; -update noar tt set v0='BPPUE21RWWR0NXYWDA' where id=8; -update noar ti set v0='BPPUE21RWWR0NXYWDA' where id=8; -update noar tt set b0='ZG9QN48YJM13AYU5YYQVM7BM145HVYOT' where id=8; -update noar ti set b0='ZG9QN48YJM13AYU5YYQVM7BM145HVYOT' where id=8; -update noar tt set v0='W97MQZ' where id=8; -update noar ti set v0='W97MQZ' where id=8; -update noar tt set b1='Q2652ZRV6NHLCVEN0212YE' where id=8; -update noar ti set b1='Q2652ZRV6NHLCVEN0212YE' where id=8; -update noar tt set v0='5TRGJOZFXF64CHGHVTGR6WQ55PU6' where id=8; -update noar ti set v0='5TRGJOZFXF64CHGHVTGR6WQ55PU6' where id=8; -update noar tt set b2='2Z2MHTS9A8M7AYJV' where id=8; -update noar ti set b2='2Z2MHTS9A8M7AYJV' where id=8; -update noar tt set v0='1SRR' where id=9; -update noar ti set v0='1SRR' where id=9; -update noar tt set b0='K0RGO5EAPJ9QXFISR2RBVI6Q1P' where id=9; -update noar ti set b0='K0RGO5EAPJ9QXFISR2RBVI6Q1P' where id=9; -update noar tt set v0='PFVSYT0IF6ZB' where id=9; -update noar ti set v0='PFVSYT0IF6ZB' where id=9; -update noar tt set b1='CE6AP' where id=9; -update noar ti set b1='CE6AP' where id=9; -update noar tt set v0='WSLG7UVT8HD4TT9X0C1' where id=9; -update noar ti set v0='WSLG7UVT8HD4TT9X0C1' where id=9; -update noar tt set b2='P7F7NRQYGF1TFO8ZOGBRJV' where id=9; -update noar ti set b2='P7F7NRQYGF1TFO8ZOGBRJV' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 tinyblob not null, - b1 mediumblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='07J9' where id=1; -update noar ti set v0='07J9' where id=1; -update noar tt set b0='DUNKPINS' where id=1; -update noar ti set b0='DUNKPINS' where id=1; -update noar tt set v0='YD9BMR9BDMAZ4LVFCUJG9GVNTM' where id=1; -update noar ti set v0='YD9BMR9BDMAZ4LVFCUJG9GVNTM' where id=1; -update noar tt set b1='T4EWDSW5IX2STVK1TPIL717N5N3VP' where id=1; -update noar ti set b1='T4EWDSW5IX2STVK1TPIL717N5N3VP' where id=1; -update noar tt set v0='3I9WPSAUCBCP9Y' where id=1; -update noar ti set v0='3I9WPSAUCBCP9Y' where id=1; -update noar tt set b2='89KVC0QT2EFKMSO846PA8GLF6FWBOVHS' where id=1; -update noar ti set b2='89KVC0QT2EFKMSO846PA8GLF6FWBOVHS' where id=1; -update noar tt set v0='AUDY6GSLY' where id=2; -update noar ti set v0='AUDY6GSLY' where id=2; -update noar tt set b0='IS3TCTF4X1Y5' where id=2; -update noar ti set b0='IS3TCTF4X1Y5' where id=2; -update noar tt set v0='L7KOQ5B' where id=2; -update noar ti set v0='L7KOQ5B' where id=2; -update noar tt set b1='C4398W6L1EQTAH6' where id=2; -update noar ti set b1='C4398W6L1EQTAH6' where id=2; -update noar tt set v0='1YV3LGXWK9G4JLPSU1YQ9T3IU2EK3GI' where id=2; -update noar ti set v0='1YV3LGXWK9G4JLPSU1YQ9T3IU2EK3GI' where id=2; -update noar tt set b2='8E8HPFSUFTRCF0ZTEJ2BWJB0L3DMB4OK' where id=2; -update noar ti set b2='8E8HPFSUFTRCF0ZTEJ2BWJB0L3DMB4OK' where id=2; -update noar tt set v0='KGDBMO3SQWHJN5F6JU3U70K' where id=3; -update noar ti set v0='KGDBMO3SQWHJN5F6JU3U70K' where id=3; -update noar tt set b0='EK55ZT' where id=3; -update noar ti set b0='EK55ZT' where id=3; -update noar tt set v0='K' where id=3; -update noar ti set v0='K' where id=3; -update noar tt set b1='079DI85RQAQ5ID094U1W9' where id=3; -update noar ti set b1='079DI85RQAQ5ID094U1W9' where id=3; -update noar tt set v0='7UVJRKSQ26BTR1L8H8' where id=3; -update noar ti set v0='7UVJRKSQ26BTR1L8H8' where id=3; -update noar tt set b2='84F' where id=3; -update noar ti set b2='84F' where id=3; -update noar tt set v0='OPQTY9S0013' where id=4; -update noar ti set v0='OPQTY9S0013' where id=4; -update noar tt set b0='3E03NQ5OUYGN7E' where id=4; -update noar ti set b0='3E03NQ5OUYGN7E' where id=4; -update noar tt set v0='IBMJ' where id=4; -update noar ti set v0='IBMJ' where id=4; -update noar tt set b1='GQO72754ZJRHIO1D1WQ' where id=4; -update noar ti set b1='GQO72754ZJRHIO1D1WQ' where id=4; -update noar tt set v0='659P2XRROO0W0IETQNNHPSRB5WIG8MC' where id=4; -update noar ti set v0='659P2XRROO0W0IETQNNHPSRB5WIG8MC' where id=4; -update noar tt set b2='SX8N2G6EG3PJ' where id=4; -update noar ti set b2='SX8N2G6EG3PJ' where id=4; -update noar tt set v0='R5VN14NT4BRCZ3HT79JTHVO2W9H4X' where id=5; -update noar ti set v0='R5VN14NT4BRCZ3HT79JTHVO2W9H4X' where id=5; -update noar tt set b0='Z1KDZ4QEXRFZ1WYE0O81' where id=5; -update noar ti set b0='Z1KDZ4QEXRFZ1WYE0O81' where id=5; -update noar tt set v0='OQ5K08AX2NLXEF0Y7TZ8AWEFOW5UL' where id=5; -update noar ti set v0='OQ5K08AX2NLXEF0Y7TZ8AWEFOW5UL' where id=5; -update noar tt set b1='QY5' where id=5; -update noar ti set b1='QY5' where id=5; -update noar tt set v0='68ABPZVUNIOF' where id=5; -update noar ti set v0='68ABPZVUNIOF' where id=5; -update noar tt set b2='U5MSBBG' where id=5; -update noar ti set b2='U5MSBBG' where id=5; -update noar tt set v0='0M60K' where id=6; -update noar ti set v0='0M60K' where id=6; -update noar tt set b0='CQE8YSG0P8FIEPK' where id=6; -update noar ti set b0='CQE8YSG0P8FIEPK' where id=6; -update noar tt set v0='TCGONP' where id=6; -update noar ti set v0='TCGONP' where id=6; -update noar tt set b1='WTUDN93FH9WR5EIVCC' where id=6; -update noar ti set b1='WTUDN93FH9WR5EIVCC' where id=6; -update noar tt set v0='UDBYJ2NP0L13M67FROEDNJ' where id=6; -update noar ti set v0='UDBYJ2NP0L13M67FROEDNJ' where id=6; -update noar tt set b2='KB7857KMDAE2A4ZP4H872LASYZIKI' where id=6; -update noar ti set b2='KB7857KMDAE2A4ZP4H872LASYZIKI' where id=6; -update noar tt set v0='CJN0Q' where id=7; -update noar ti set v0='CJN0Q' where id=7; -update noar tt set b0='UEX4LLVH' where id=7; -update noar ti set b0='UEX4LLVH' where id=7; -update noar tt set v0='FBDZA4KGFLK9VDBA6YF1BCB' where id=7; -update noar ti set v0='FBDZA4KGFLK9VDBA6YF1BCB' where id=7; -update noar tt set b1='Z' where id=7; -update noar ti set b1='Z' where id=7; -update noar tt set v0='PTHB1U2FB238V5AY8YWNPUD3BZZRWT' where id=7; -update noar ti set v0='PTHB1U2FB238V5AY8YWNPUD3BZZRWT' where id=7; -update noar tt set b2='OWJTW5N6I0MUL7' where id=7; -update noar ti set b2='OWJTW5N6I0MUL7' where id=7; -update noar tt set v0='I5Y0GD5PFS4148N3IX8Y0M' where id=8; -update noar ti set v0='I5Y0GD5PFS4148N3IX8Y0M' where id=8; -update noar tt set b0='JMG6XCLCSOTI7X' where id=8; -update noar ti set b0='JMG6XCLCSOTI7X' where id=8; -update noar tt set v0='7V' where id=8; -update noar ti set v0='7V' where id=8; -update noar tt set b1='L' where id=8; -update noar ti set b1='L' where id=8; -update noar tt set v0='H4F5IV445QI46N30L1A77HX' where id=8; -update noar ti set v0='H4F5IV445QI46N30L1A77HX' where id=8; -update noar tt set b2='CNBLU0YN0TW3TVZA7' where id=8; -update noar ti set b2='CNBLU0YN0TW3TVZA7' where id=8; -update noar tt set v0='A7PUDKEI861Z9JY1YPN0PTTG24SMQV' where id=9; -update noar ti set v0='A7PUDKEI861Z9JY1YPN0PTTG24SMQV' where id=9; -update noar tt set b0='YIHPA9MJ752BQCWTCFS6Z' where id=9; -update noar ti set b0='YIHPA9MJ752BQCWTCFS6Z' where id=9; -update noar tt set v0='UCHJNTO63C2M5HDX0MID5NGZTO82L5X' where id=9; -update noar ti set v0='UCHJNTO63C2M5HDX0MID5NGZTO82L5X' where id=9; -update noar tt set b1='5BQ9J410YDMIQLH5JYAK9JTNMTZ2GPFO' where id=9; -update noar ti set b1='5BQ9J410YDMIQLH5JYAK9JTNMTZ2GPFO' where id=9; -update noar tt set v0='HLUUN5PSG2EBDAER' where id=9; -update noar ti set v0='HLUUN5PSG2EBDAER' where id=9; -update noar tt set b2='HUXWVIJAC91WLWGWZ6Y' where id=9; -update noar ti set b2='HUXWVIJAC91WLWGWZ6Y' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 tinyblob not null, - b1 mediumblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='Y1HELL2FKSCKFYWHK81CHJL7TTB3C4JI' where id=1; -update noar ti set v0='Y1HELL2FKSCKFYWHK81CHJL7TTB3C4JI' where id=1; -update noar tt set b0='B1J2G22QAZLVOVP03K' where id=1; -update noar ti set b0='B1J2G22QAZLVOVP03K' where id=1; -update noar tt set v0='32M7T6IAS8' where id=1; -update noar ti set v0='32M7T6IAS8' where id=1; -update noar tt set b1='F41H0X9C4JYJ3' where id=1; -update noar ti set b1='F41H0X9C4JYJ3' where id=1; -update noar tt set v0='9YL7' where id=1; -update noar ti set v0='9YL7' where id=1; -update noar tt set b2='3' where id=1; -update noar ti set b2='3' where id=1; -update noar tt set v0='JF7H5N41N' where id=2; -update noar ti set v0='JF7H5N41N' where id=2; -update noar tt set b0='GORM0ID' where id=2; -update noar ti set b0='GORM0ID' where id=2; -update noar tt set v0='PSYD' where id=2; -update noar ti set v0='PSYD' where id=2; -update noar tt set b1='VWYUNAFKQCS5VJQ1YVM4DGT34' where id=2; -update noar ti set b1='VWYUNAFKQCS5VJQ1YVM4DGT34' where id=2; -update noar tt set v0='FKX75B0' where id=2; -update noar ti set v0='FKX75B0' where id=2; -update noar tt set b2='S' where id=2; -update noar ti set b2='S' where id=2; -update noar tt set v0='GQ3C2VIOTO' where id=3; -update noar ti set v0='GQ3C2VIOTO' where id=3; -update noar tt set b0='U0080HKSK66S1WLDI4' where id=3; -update noar ti set b0='U0080HKSK66S1WLDI4' where id=3; -update noar tt set v0='RIOXR7U1154H6' where id=3; -update noar ti set v0='RIOXR7U1154H6' where id=3; -update noar tt set b1='92OUPM55WJFZ93FVNM599USZRVTI29FD' where id=3; -update noar ti set b1='92OUPM55WJFZ93FVNM599USZRVTI29FD' where id=3; -update noar tt set v0='INSI9L7YES4S6M72OH2SB3BK8L' where id=3; -update noar ti set v0='INSI9L7YES4S6M72OH2SB3BK8L' where id=3; -update noar tt set b2='D0YFA7B23SBA7EZOYVK' where id=3; -update noar ti set b2='D0YFA7B23SBA7EZOYVK' where id=3; -update noar tt set v0='UWFW1YT9TR' where id=4; -update noar ti set v0='UWFW1YT9TR' where id=4; -update noar tt set b0='LC0JKL1H189YWRGASK7' where id=4; -update noar ti set b0='LC0JKL1H189YWRGASK7' where id=4; -update noar tt set v0='RJ0LOLIEIEI0VPYIOCEKSOSL' where id=4; -update noar ti set v0='RJ0LOLIEIEI0VPYIOCEKSOSL' where id=4; -update noar tt set b1='QI1Z6HHW7YL6J1GVMFPC4HE2110' where id=4; -update noar ti set b1='QI1Z6HHW7YL6J1GVMFPC4HE2110' where id=4; -update noar tt set v0='OLB3X9' where id=4; -update noar ti set v0='OLB3X9' where id=4; -update noar tt set b2='FR77ASOFM8DHX4WKEWXZCEQU81' where id=4; -update noar ti set b2='FR77ASOFM8DHX4WKEWXZCEQU81' where id=4; -update noar tt set v0='75EQXYSTLF9L' where id=5; -update noar ti set v0='75EQXYSTLF9L' where id=5; -update noar tt set b0='QLA96AONO9FMTQ1REJ8T9FOASIIP' where id=5; -update noar ti set b0='QLA96AONO9FMTQ1REJ8T9FOASIIP' where id=5; -update noar tt set v0='52F5SOPZCEJHDO85B80ZD9' where id=5; -update noar ti set v0='52F5SOPZCEJHDO85B80ZD9' where id=5; -update noar tt set b1='DX3P56C8RTV' where id=5; -update noar ti set b1='DX3P56C8RTV' where id=5; -update noar tt set v0='5CIRDRFLI46' where id=5; -update noar ti set v0='5CIRDRFLI46' where id=5; -update noar tt set b2='TSFZN780' where id=5; -update noar ti set b2='TSFZN780' where id=5; -update noar tt set v0='LERXY7N33M94X' where id=6; -update noar ti set v0='LERXY7N33M94X' where id=6; -update noar tt set b0='7OTMGUWQGSDQJHIRNE5F4DU7DZHPXHHZ' where id=6; -update noar ti set b0='7OTMGUWQGSDQJHIRNE5F4DU7DZHPXHHZ' where id=6; -update noar tt set v0='DJDFOB26H7LXNTX' where id=6; -update noar ti set v0='DJDFOB26H7LXNTX' where id=6; -update noar tt set b1='M3JBUKUU' where id=6; -update noar ti set b1='M3JBUKUU' where id=6; -update noar tt set v0='E2ARTWETV6PF' where id=6; -update noar ti set v0='E2ARTWETV6PF' where id=6; -update noar tt set b2='DPPCLK1SUW0VUPQ63' where id=6; -update noar ti set b2='DPPCLK1SUW0VUPQ63' where id=6; -update noar tt set v0='0LQ6P493JPNCO7YX5PFPRN8LNPL' where id=7; -update noar ti set v0='0LQ6P493JPNCO7YX5PFPRN8LNPL' where id=7; -update noar tt set b0='1QF5OTOLTC80E' where id=7; -update noar ti set b0='1QF5OTOLTC80E' where id=7; -update noar tt set v0='YKY6' where id=7; -update noar ti set v0='YKY6' where id=7; -update noar tt set b1='QT6R3RUR6BF27B' where id=7; -update noar ti set b1='QT6R3RUR6BF27B' where id=7; -update noar tt set v0='CPS2F8IV6BGIMYZP3GMJVB4I' where id=7; -update noar ti set v0='CPS2F8IV6BGIMYZP3GMJVB4I' where id=7; -update noar tt set b2='RKTFHR1Z1NP0P7VU20Z' where id=7; -update noar ti set b2='RKTFHR1Z1NP0P7VU20Z' where id=7; -update noar tt set v0='W4FR22244IVXF86053WMHMN9A6Y5LBT' where id=8; -update noar ti set v0='W4FR22244IVXF86053WMHMN9A6Y5LBT' where id=8; -update noar tt set b0='Q6K7UJDG9RPA5C1J' where id=8; -update noar ti set b0='Q6K7UJDG9RPA5C1J' where id=8; -update noar tt set v0='5Z5' where id=8; -update noar ti set v0='5Z5' where id=8; -update noar tt set b1='9ZP2C5ZOBGIKIHNG5A1HUN' where id=8; -update noar ti set b1='9ZP2C5ZOBGIKIHNG5A1HUN' where id=8; -update noar tt set v0='95ES6ZYFJS9Z9L9AM95E4YUAZS8J8' where id=8; -update noar ti set v0='95ES6ZYFJS9Z9L9AM95E4YUAZS8J8' where id=8; -update noar tt set b2='5G85BF4ME' where id=8; -update noar ti set b2='5G85BF4ME' where id=8; -update noar tt set v0='PO6I5UU' where id=9; -update noar ti set v0='PO6I5UU' where id=9; -update noar tt set b0='G8UNHO346VDSQY' where id=9; -update noar ti set b0='G8UNHO346VDSQY' where id=9; -update noar tt set v0='RU7' where id=9; -update noar ti set v0='RU7' where id=9; -update noar tt set b1='HZZ9VVU6WZPDGJVFY4CODI8ZH' where id=9; -update noar ti set b1='HZZ9VVU6WZPDGJVFY4CODI8ZH' where id=9; -update noar tt set v0='2L7ZQABVFBPMEA6UZ' where id=9; -update noar ti set v0='2L7ZQABVFBPMEA6UZ' where id=9; -update noar tt set b2='PS0LKOIW4HGSJJ27DFDX7XV5EJ' where id=9; -update noar ti set b2='PS0LKOIW4HGSJJ27DFDX7XV5EJ' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 tinyblob null, - b1 longblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='O499U2CZ1W0U5UI2Z' where id=1; -update noar ti set v0='O499U2CZ1W0U5UI2Z' where id=1; -update noar tt set b0='HOGQ6ZM7PN9OFRYJ' where id=1; -update noar ti set b0='HOGQ6ZM7PN9OFRYJ' where id=1; -update noar tt set v0='CBNRM20N' where id=1; -update noar ti set v0='CBNRM20N' where id=1; -update noar tt set b1='B1EGGLEC19FD' where id=1; -update noar ti set b1='B1EGGLEC19FD' where id=1; -update noar tt set v0='QH144WL15HL2' where id=1; -update noar ti set v0='QH144WL15HL2' where id=1; -update noar tt set b2='QW' where id=1; -update noar ti set b2='QW' where id=1; -update noar tt set v0='NN4RBU45QV5T' where id=2; -update noar ti set v0='NN4RBU45QV5T' where id=2; -update noar tt set b0='4IRAIOI2DEDW028P2Y0P4I9PW' where id=2; -update noar ti set b0='4IRAIOI2DEDW028P2Y0P4I9PW' where id=2; -update noar tt set v0='UXDZ86EVPLUYKPYG1BLB0P171MWI73' where id=2; -update noar ti set v0='UXDZ86EVPLUYKPYG1BLB0P171MWI73' where id=2; -update noar tt set b1='1CV3KS5OY6PV984WGM1V6J4H65WAWRJ' where id=2; -update noar ti set b1='1CV3KS5OY6PV984WGM1V6J4H65WAWRJ' where id=2; -update noar tt set v0='1GLZUW4P2BME97A9' where id=2; -update noar ti set v0='1GLZUW4P2BME97A9' where id=2; -update noar tt set b2='BA' where id=2; -update noar ti set b2='BA' where id=2; -update noar tt set v0='ABF9F8LHJ2FXCBXA4K12WIJLZCU3ZJ' where id=3; -update noar ti set v0='ABF9F8LHJ2FXCBXA4K12WIJLZCU3ZJ' where id=3; -update noar tt set b0='DW7C9KSN5F4F' where id=3; -update noar ti set b0='DW7C9KSN5F4F' where id=3; -update noar tt set v0='ILZZLX6XAMWY8MXTF8NQ4' where id=3; -update noar ti set v0='ILZZLX6XAMWY8MXTF8NQ4' where id=3; -update noar tt set b1='4EK0FH63EC4224EIEBE' where id=3; -update noar ti set b1='4EK0FH63EC4224EIEBE' where id=3; -update noar tt set v0='N2B6ZXIN2XPGMFXJFEZT7KXZ6R' where id=3; -update noar ti set v0='N2B6ZXIN2XPGMFXJFEZT7KXZ6R' where id=3; -update noar tt set b2='8BZS8XFLDG5NM47F20VL' where id=3; -update noar ti set b2='8BZS8XFLDG5NM47F20VL' where id=3; -update noar tt set v0='CFRL1' where id=4; -update noar ti set v0='CFRL1' where id=4; -update noar tt set b0='D6IHVPTY3E4OEHCVCG2XZI5CTX7' where id=4; -update noar ti set b0='D6IHVPTY3E4OEHCVCG2XZI5CTX7' where id=4; -update noar tt set v0='8XQWCT32XM5GUY' where id=4; -update noar ti set v0='8XQWCT32XM5GUY' where id=4; -update noar tt set b1='XU3B0LMV6' where id=4; -update noar ti set b1='XU3B0LMV6' where id=4; -update noar tt set v0='HNS54CLWPG' where id=4; -update noar ti set v0='HNS54CLWPG' where id=4; -update noar tt set b2='OCN93J' where id=4; -update noar ti set b2='OCN93J' where id=4; -update noar tt set v0='3NC3111G0' where id=5; -update noar ti set v0='3NC3111G0' where id=5; -update noar tt set b0='E7P4G7HSADKZ33JP' where id=5; -update noar ti set b0='E7P4G7HSADKZ33JP' where id=5; -update noar tt set v0='OQJOKYD3ZMO4ULOBOI5U0QE' where id=5; -update noar ti set v0='OQJOKYD3ZMO4ULOBOI5U0QE' where id=5; -update noar tt set b1='FUTBSPFJW9' where id=5; -update noar ti set b1='FUTBSPFJW9' where id=5; -update noar tt set v0='D2B382WPFCJFWUNF6DYWCU1JNRA5ZU7S' where id=5; -update noar ti set v0='D2B382WPFCJFWUNF6DYWCU1JNRA5ZU7S' where id=5; -update noar tt set b2='UGKLD2ZMDAXL8J' where id=5; -update noar ti set b2='UGKLD2ZMDAXL8J' where id=5; -update noar tt set v0='NL0' where id=6; -update noar ti set v0='NL0' where id=6; -update noar tt set b0='AFRT5VNZI6M9HBYGLNXW8S7F2AH4' where id=6; -update noar ti set b0='AFRT5VNZI6M9HBYGLNXW8S7F2AH4' where id=6; -update noar tt set v0='V9BWD3VTY6BJ3AWD1PNR' where id=6; -update noar ti set v0='V9BWD3VTY6BJ3AWD1PNR' where id=6; -update noar tt set b1='6FNDCH8SF5XB429IA5X' where id=6; -update noar ti set b1='6FNDCH8SF5XB429IA5X' where id=6; -update noar tt set v0='IF2ZL2R5MP1K2C4PEQ4SRPFI4CVW' where id=6; -update noar ti set v0='IF2ZL2R5MP1K2C4PEQ4SRPFI4CVW' where id=6; -update noar tt set b2='Z1X' where id=6; -update noar ti set b2='Z1X' where id=6; -update noar tt set v0='JP3L46DYRU57IMQUH6F11V6LD8I5PQFA' where id=7; -update noar ti set v0='JP3L46DYRU57IMQUH6F11V6LD8I5PQFA' where id=7; -update noar tt set b0='W8FEU2QI41UU' where id=7; -update noar ti set b0='W8FEU2QI41UU' where id=7; -update noar tt set v0='DTN5493H62FR4QMPLM0SHNBAY' where id=7; -update noar ti set v0='DTN5493H62FR4QMPLM0SHNBAY' where id=7; -update noar tt set b1='L' where id=7; -update noar ti set b1='L' where id=7; -update noar tt set v0='28N78LGK5681XW2O0ZQ3413N' where id=7; -update noar ti set v0='28N78LGK5681XW2O0ZQ3413N' where id=7; -update noar tt set b2='LB' where id=7; -update noar ti set b2='LB' where id=7; -update noar tt set v0='K0PXWYPVVS6UKSZXDVAD0KRCES18' where id=8; -update noar ti set v0='K0PXWYPVVS6UKSZXDVAD0KRCES18' where id=8; -update noar tt set b0='BE41M2NILQBGIFZKUVWWAXW5V' where id=8; -update noar ti set b0='BE41M2NILQBGIFZKUVWWAXW5V' where id=8; -update noar tt set v0='EA764I8854CN12SM61ZYUOLIM' where id=8; -update noar ti set v0='EA764I8854CN12SM61ZYUOLIM' where id=8; -update noar tt set b1='62C44ERE9T9B6OKFOFMJJ' where id=8; -update noar ti set b1='62C44ERE9T9B6OKFOFMJJ' where id=8; -update noar tt set v0='Z' where id=8; -update noar ti set v0='Z' where id=8; -update noar tt set b2='F' where id=8; -update noar ti set b2='F' where id=8; -update noar tt set v0='D' where id=9; -update noar ti set v0='D' where id=9; -update noar tt set b0='WLJ3G7B27FAP7' where id=9; -update noar ti set b0='WLJ3G7B27FAP7' where id=9; -update noar tt set v0='J4VVG' where id=9; -update noar ti set v0='J4VVG' where id=9; -update noar tt set b1='RW953YD6XQ8ZEYIJOTXF03TB6KX1' where id=9; -update noar ti set b1='RW953YD6XQ8ZEYIJOTXF03TB6KX1' where id=9; -update noar tt set v0='UW3BP' where id=9; -update noar ti set v0='UW3BP' where id=9; -update noar tt set b2='M5KQT1FW5W7U7JP6UU526891R' where id=9; -update noar ti set b2='M5KQT1FW5W7U7JP6UU526891R' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 tinyblob null, - b1 longblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='XF' where id=1; -update noar ti set v0='XF' where id=1; -update noar tt set b0='3' where id=1; -update noar ti set b0='3' where id=1; -update noar tt set v0='A6QOWZN4S58T5I9O1SYU' where id=1; -update noar ti set v0='A6QOWZN4S58T5I9O1SYU' where id=1; -update noar tt set b1='976UZYZWOTVTRXJXN7HZKE8I85A0K' where id=1; -update noar ti set b1='976UZYZWOTVTRXJXN7HZKE8I85A0K' where id=1; -update noar tt set v0='KASQOJAZYLH7522ZGJR7C0S' where id=1; -update noar ti set v0='KASQOJAZYLH7522ZGJR7C0S' where id=1; -update noar tt set b2='3WZ397NXLG3N' where id=1; -update noar ti set b2='3WZ397NXLG3N' where id=1; -update noar tt set v0='G15ZR759C18GH7ZRUBRMPI6' where id=2; -update noar ti set v0='G15ZR759C18GH7ZRUBRMPI6' where id=2; -update noar tt set b0='L9HOSVU9UFY82J60ER71CEO' where id=2; -update noar ti set b0='L9HOSVU9UFY82J60ER71CEO' where id=2; -update noar tt set v0='QGBSN1SYLXVBZHXF5QSE29GN4AGN' where id=2; -update noar ti set v0='QGBSN1SYLXVBZHXF5QSE29GN4AGN' where id=2; -update noar tt set b1='34LMM06001ZZ1' where id=2; -update noar ti set b1='34LMM06001ZZ1' where id=2; -update noar tt set v0='JOWCDZRHUAJS' where id=2; -update noar ti set v0='JOWCDZRHUAJS' where id=2; -update noar tt set b2='L0YP9JOAI' where id=2; -update noar ti set b2='L0YP9JOAI' where id=2; -update noar tt set v0='WS9OFMFTEA8' where id=3; -update noar ti set v0='WS9OFMFTEA8' where id=3; -update noar tt set b0='FPKZO1OKSF' where id=3; -update noar ti set b0='FPKZO1OKSF' where id=3; -update noar tt set v0='X' where id=3; -update noar ti set v0='X' where id=3; -update noar tt set b1='KTE0LMG' where id=3; -update noar ti set b1='KTE0LMG' where id=3; -update noar tt set v0='NFT97P3N' where id=3; -update noar ti set v0='NFT97P3N' where id=3; -update noar tt set b2='M0BKYAH9LAOAVA8HAFQ8' where id=3; -update noar ti set b2='M0BKYAH9LAOAVA8HAFQ8' where id=3; -update noar tt set v0='VWP5TMV4JPTEC' where id=4; -update noar ti set v0='VWP5TMV4JPTEC' where id=4; -update noar tt set b0='C863YPMAR8FZB14TSR04ILM' where id=4; -update noar ti set b0='C863YPMAR8FZB14TSR04ILM' where id=4; -update noar tt set v0='IFO2Z1JZT256W2ID6M2MPM17SJHJMS' where id=4; -update noar ti set v0='IFO2Z1JZT256W2ID6M2MPM17SJHJMS' where id=4; -update noar tt set b1='NVJGJ4BFA3LCV8G904HXRFVR' where id=4; -update noar ti set b1='NVJGJ4BFA3LCV8G904HXRFVR' where id=4; -update noar tt set v0='0NKJIY3PU9MX631CEARFT7ZSYV7BD' where id=4; -update noar ti set v0='0NKJIY3PU9MX631CEARFT7ZSYV7BD' where id=4; -update noar tt set b2='IXFWSLZ8BPF7SE5PAUO6JQ4JT10KG7FN' where id=4; -update noar ti set b2='IXFWSLZ8BPF7SE5PAUO6JQ4JT10KG7FN' where id=4; -update noar tt set v0='007UEFQYUZTFIC170KBWMHGVZ52DD' where id=5; -update noar ti set v0='007UEFQYUZTFIC170KBWMHGVZ52DD' where id=5; -update noar tt set b0='45R6A9J2WR5WFIY59L27NZCUJR76SF' where id=5; -update noar ti set b0='45R6A9J2WR5WFIY59L27NZCUJR76SF' where id=5; -update noar tt set v0='KXGQKB7M7J9' where id=5; -update noar ti set v0='KXGQKB7M7J9' where id=5; -update noar tt set b1='TTH7CLMJ55BJT90X3NPK2H' where id=5; -update noar ti set b1='TTH7CLMJ55BJT90X3NPK2H' where id=5; -update noar tt set v0='Z0JG' where id=5; -update noar ti set v0='Z0JG' where id=5; -update noar tt set b2='8V12WQ' where id=5; -update noar ti set b2='8V12WQ' where id=5; -update noar tt set v0='T5RDQMTUS4I6GG8A' where id=6; -update noar ti set v0='T5RDQMTUS4I6GG8A' where id=6; -update noar tt set b0='RXCSZUFA' where id=6; -update noar ti set b0='RXCSZUFA' where id=6; -update noar tt set v0='A78GCCEC3DFH3PBYRRJ' where id=6; -update noar ti set v0='A78GCCEC3DFH3PBYRRJ' where id=6; -update noar tt set b1='1WYJKHJ' where id=6; -update noar ti set b1='1WYJKHJ' where id=6; -update noar tt set v0='T8H438' where id=6; -update noar ti set v0='T8H438' where id=6; -update noar tt set b2='0U1C086J0CVWO667TVGWF2NCWR' where id=6; -update noar ti set b2='0U1C086J0CVWO667TVGWF2NCWR' where id=6; -update noar tt set v0='ZV9DD2K' where id=7; -update noar ti set v0='ZV9DD2K' where id=7; -update noar tt set b0='GAZRV51LRM2W7XARPJI96Q2W56JO1S' where id=7; -update noar ti set b0='GAZRV51LRM2W7XARPJI96Q2W56JO1S' where id=7; -update noar tt set v0='5B23WF2AV83ASMM86569CEWSOPD1IO' where id=7; -update noar ti set v0='5B23WF2AV83ASMM86569CEWSOPD1IO' where id=7; -update noar tt set b1='C319BC2GP5VNWH4B7K' where id=7; -update noar ti set b1='C319BC2GP5VNWH4B7K' where id=7; -update noar tt set v0='6' where id=7; -update noar ti set v0='6' where id=7; -update noar tt set b2='Q3SZ2DHXOIVE75P7PYMBD7A1LSLY' where id=7; -update noar ti set b2='Q3SZ2DHXOIVE75P7PYMBD7A1LSLY' where id=7; -update noar tt set v0='AOUSMNYZ1O3NG' where id=8; -update noar ti set v0='AOUSMNYZ1O3NG' where id=8; -update noar tt set b0='T5S15UY76FRGODV8PWRTD' where id=8; -update noar ti set b0='T5S15UY76FRGODV8PWRTD' where id=8; -update noar tt set v0='OHTUWHZ5QGM1IJ1' where id=8; -update noar ti set v0='OHTUWHZ5QGM1IJ1' where id=8; -update noar tt set b1='D5BDQWNSHW48MEC7YYKP7TH9' where id=8; -update noar ti set b1='D5BDQWNSHW48MEC7YYKP7TH9' where id=8; -update noar tt set v0='7GLJRK22AX' where id=8; -update noar ti set v0='7GLJRK22AX' where id=8; -update noar tt set b2='QTP9SXDN9KMZ2XLSCFEYQBN3S40RXZE3' where id=8; -update noar ti set b2='QTP9SXDN9KMZ2XLSCFEYQBN3S40RXZE3' where id=8; -update noar tt set v0='K9GFV5MCVWOGNW02OSARQTXIXD5MJGOA' where id=9; -update noar ti set v0='K9GFV5MCVWOGNW02OSARQTXIXD5MJGOA' where id=9; -update noar tt set b0='HW' where id=9; -update noar ti set b0='HW' where id=9; -update noar tt set v0='SMJKXITBLWIDWXTKHVFO' where id=9; -update noar ti set v0='SMJKXITBLWIDWXTKHVFO' where id=9; -update noar tt set b1='1KKUBT' where id=9; -update noar ti set b1='1KKUBT' where id=9; -update noar tt set v0='YSKSZJ54FUI5M3ZUJMRMB95T2WEOC1X8' where id=9; -update noar ti set v0='YSKSZJ54FUI5M3ZUJMRMB95T2WEOC1X8' where id=9; -update noar tt set b2='2FRG1Z3KBKZAZONJW910UZRZ5S8Z' where id=9; -update noar ti set b2='2FRG1Z3KBKZAZONJW910UZRZ5S8Z' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 tinyblob not null, - b1 longblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='AGORYO3XICF546JO' where id=1; -update noar ti set v0='AGORYO3XICF546JO' where id=1; -update noar tt set b0='DT4TGFZ02FOEZQ1YZHKUU2PM' where id=1; -update noar ti set b0='DT4TGFZ02FOEZQ1YZHKUU2PM' where id=1; -update noar tt set v0='3N4N9GK1ODC5UR7U03LY7MRTBBR125' where id=1; -update noar ti set v0='3N4N9GK1ODC5UR7U03LY7MRTBBR125' where id=1; -update noar tt set b1='L2NQR' where id=1; -update noar ti set b1='L2NQR' where id=1; -update noar tt set v0='ZF' where id=1; -update noar ti set v0='ZF' where id=1; -update noar tt set b2='5OEALYIG2NUOU1L42IED6ODGLMWVU' where id=1; -update noar ti set b2='5OEALYIG2NUOU1L42IED6ODGLMWVU' where id=1; -update noar tt set v0='VA37BM8OEW' where id=2; -update noar ti set v0='VA37BM8OEW' where id=2; -update noar tt set b0='SU4ER' where id=2; -update noar ti set b0='SU4ER' where id=2; -update noar tt set v0='ZVZ' where id=2; -update noar ti set v0='ZVZ' where id=2; -update noar tt set b1='1N0WILVRGEDP0KWFLHCVJNM' where id=2; -update noar ti set b1='1N0WILVRGEDP0KWFLHCVJNM' where id=2; -update noar tt set v0='V58CNNCU' where id=2; -update noar ti set v0='V58CNNCU' where id=2; -update noar tt set b2='8QIODIN7JXTNFF5ZY11' where id=2; -update noar ti set b2='8QIODIN7JXTNFF5ZY11' where id=2; -update noar tt set v0='WHBVGQWJ9V9' where id=3; -update noar ti set v0='WHBVGQWJ9V9' where id=3; -update noar tt set b0='FRXY4PBPM' where id=3; -update noar ti set b0='FRXY4PBPM' where id=3; -update noar tt set v0='TG4VPGMDOPZ7U0YP3FQKXP' where id=3; -update noar ti set v0='TG4VPGMDOPZ7U0YP3FQKXP' where id=3; -update noar tt set b1='BKKIPWCNZCOM4SFG6I1685' where id=3; -update noar ti set b1='BKKIPWCNZCOM4SFG6I1685' where id=3; -update noar tt set v0='FB51XUOQM8JSVNURD' where id=3; -update noar ti set v0='FB51XUOQM8JSVNURD' where id=3; -update noar tt set b2='JF466JG8VJLUTFA7RYSX' where id=3; -update noar ti set b2='JF466JG8VJLUTFA7RYSX' where id=3; -update noar tt set v0='Y19X8K12I3DJN41CB0M10M' where id=4; -update noar ti set v0='Y19X8K12I3DJN41CB0M10M' where id=4; -update noar tt set b0='G5TKU140GTS2OLMGI5LN6ROLC' where id=4; -update noar ti set b0='G5TKU140GTS2OLMGI5LN6ROLC' where id=4; -update noar tt set v0='00X' where id=4; -update noar ti set v0='00X' where id=4; -update noar tt set b1='UPK0Y' where id=4; -update noar ti set b1='UPK0Y' where id=4; -update noar tt set v0='ARLX6XOGACL8OT0NO16S' where id=4; -update noar ti set v0='ARLX6XOGACL8OT0NO16S' where id=4; -update noar tt set b2='TZNHOLJPYJN2LFQ0' where id=4; -update noar ti set b2='TZNHOLJPYJN2LFQ0' where id=4; -update noar tt set v0='WCVZS5WOX2DKE5WMAHHVHQ9SJ2DC6' where id=5; -update noar ti set v0='WCVZS5WOX2DKE5WMAHHVHQ9SJ2DC6' where id=5; -update noar tt set b0='FDTGFFYFCVKE39XRU4GU2' where id=5; -update noar ti set b0='FDTGFFYFCVKE39XRU4GU2' where id=5; -update noar tt set v0='67JQTYB3669A9ILN2ENV0ABPI3X54AH' where id=5; -update noar ti set v0='67JQTYB3669A9ILN2ENV0ABPI3X54AH' where id=5; -update noar tt set b1='CXRZ7CDSQMXTS03' where id=5; -update noar ti set b1='CXRZ7CDSQMXTS03' where id=5; -update noar tt set v0='Y5ZNL0M1AXRYWDNFPHNO67K86IEJXE0' where id=5; -update noar ti set v0='Y5ZNL0M1AXRYWDNFPHNO67K86IEJXE0' where id=5; -update noar tt set b2='S3IJ6AU434W0NNR' where id=5; -update noar ti set b2='S3IJ6AU434W0NNR' where id=5; -update noar tt set v0='OO' where id=6; -update noar ti set v0='OO' where id=6; -update noar tt set b0='0U' where id=6; -update noar ti set b0='0U' where id=6; -update noar tt set v0='BPRFO7AX' where id=6; -update noar ti set v0='BPRFO7AX' where id=6; -update noar tt set b1='HA43QB11MJGMWHOYM0UXTTZL5CG4XND' where id=6; -update noar ti set b1='HA43QB11MJGMWHOYM0UXTTZL5CG4XND' where id=6; -update noar tt set v0='FKLAWT88071J5FIWK4YPDRN8ZFVGH' where id=6; -update noar ti set v0='FKLAWT88071J5FIWK4YPDRN8ZFVGH' where id=6; -update noar tt set b2='SFDCA0GYJQ2NEKYPD0FCF947ACIAJIQQ' where id=6; -update noar ti set b2='SFDCA0GYJQ2NEKYPD0FCF947ACIAJIQQ' where id=6; -update noar tt set v0='0XOIHMW2VDC6ZV7M' where id=7; -update noar ti set v0='0XOIHMW2VDC6ZV7M' where id=7; -update noar tt set b0='3Q3QHT8UQ' where id=7; -update noar ti set b0='3Q3QHT8UQ' where id=7; -update noar tt set v0='DVPZT' where id=7; -update noar ti set v0='DVPZT' where id=7; -update noar tt set b1='PZJBM894C0ITAPPR1AC1L9YG0FD0' where id=7; -update noar ti set b1='PZJBM894C0ITAPPR1AC1L9YG0FD0' where id=7; -update noar tt set v0='DPO7CDC6JA419135ITNXEZH' where id=7; -update noar ti set v0='DPO7CDC6JA419135ITNXEZH' where id=7; -update noar tt set b2='7JEZQR1JD0O9QP' where id=7; -update noar ti set b2='7JEZQR1JD0O9QP' where id=7; -update noar tt set v0='HW5P3SW7XGW5DPDCLWZE14M3U' where id=8; -update noar ti set v0='HW5P3SW7XGW5DPDCLWZE14M3U' where id=8; -update noar tt set b0='VN1KPJ27EEYGT' where id=8; -update noar ti set b0='VN1KPJ27EEYGT' where id=8; -update noar tt set v0='A5TNYVJ5CE29Q' where id=8; -update noar ti set v0='A5TNYVJ5CE29Q' where id=8; -update noar tt set b1='91DT3KTEDGKG' where id=8; -update noar ti set b1='91DT3KTEDGKG' where id=8; -update noar tt set v0='BWVY' where id=8; -update noar ti set v0='BWVY' where id=8; -update noar tt set b2='NXBDW2864XZ65K3GBTR' where id=8; -update noar ti set b2='NXBDW2864XZ65K3GBTR' where id=8; -update noar tt set v0='C4LJBWGZI' where id=9; -update noar ti set v0='C4LJBWGZI' where id=9; -update noar tt set b0='MMFX1' where id=9; -update noar ti set b0='MMFX1' where id=9; -update noar tt set v0='PQYGKMNLJ6A3PB434R0ZZ3' where id=9; -update noar ti set v0='PQYGKMNLJ6A3PB434R0ZZ3' where id=9; -update noar tt set b1='CXLTIUK5KACD4' where id=9; -update noar ti set b1='CXLTIUK5KACD4' where id=9; -update noar tt set v0='FBC2TMO17MRZ5DP90GCLZVBUX17XE' where id=9; -update noar ti set v0='FBC2TMO17MRZ5DP90GCLZVBUX17XE' where id=9; -update noar tt set b2='6Z56T4PFMITOGQ' where id=9; -update noar ti set b2='6Z56T4PFMITOGQ' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 tinyblob not null, - b1 longblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='1IN6JSX20VB' where id=1; -update noar ti set v0='1IN6JSX20VB' where id=1; -update noar tt set b0='L9E5CTQTIXE4E8L6Z6EI76PFZHBC' where id=1; -update noar ti set b0='L9E5CTQTIXE4E8L6Z6EI76PFZHBC' where id=1; -update noar tt set v0='VB5' where id=1; -update noar ti set v0='VB5' where id=1; -update noar tt set b1='Z2XH055S871J974MO61IMS' where id=1; -update noar ti set b1='Z2XH055S871J974MO61IMS' where id=1; -update noar tt set v0='AV' where id=1; -update noar ti set v0='AV' where id=1; -update noar tt set b2='6KDRDIMINIHO908M' where id=1; -update noar ti set b2='6KDRDIMINIHO908M' where id=1; -update noar tt set v0='IS64XN3WH8N5OF1J1R' where id=2; -update noar ti set v0='IS64XN3WH8N5OF1J1R' where id=2; -update noar tt set b0='NVU2VCFUQ1B9RHO0M0PISUOG3KTK' where id=2; -update noar ti set b0='NVU2VCFUQ1B9RHO0M0PISUOG3KTK' where id=2; -update noar tt set v0='NCXQ0OXOXHLQNVE9N14V' where id=2; -update noar ti set v0='NCXQ0OXOXHLQNVE9N14V' where id=2; -update noar tt set b1='Q1N7955HTTRMSE4CR' where id=2; -update noar ti set b1='Q1N7955HTTRMSE4CR' where id=2; -update noar tt set v0='M1PHHA' where id=2; -update noar ti set v0='M1PHHA' where id=2; -update noar tt set b2='PBIO8SVVJOYWBDTHS2OJ51' where id=2; -update noar ti set b2='PBIO8SVVJOYWBDTHS2OJ51' where id=2; -update noar tt set v0='R' where id=3; -update noar ti set v0='R' where id=3; -update noar tt set b0='GA' where id=3; -update noar ti set b0='GA' where id=3; -update noar tt set v0='GMG16V2X12GR7TZ5B5F1X3IDQQMS4' where id=3; -update noar ti set v0='GMG16V2X12GR7TZ5B5F1X3IDQQMS4' where id=3; -update noar tt set b1='6IJHJ' where id=3; -update noar ti set b1='6IJHJ' where id=3; -update noar tt set v0='LTE7A9QFCWXBKC20VIMFGAVS9' where id=3; -update noar ti set v0='LTE7A9QFCWXBKC20VIMFGAVS9' where id=3; -update noar tt set b2='LG512WWLSUT8J' where id=3; -update noar ti set b2='LG512WWLSUT8J' where id=3; -update noar tt set v0='4NDWU0GK2I7RRABNP6TXUT1ZHJZZP9' where id=4; -update noar ti set v0='4NDWU0GK2I7RRABNP6TXUT1ZHJZZP9' where id=4; -update noar tt set b0='1BW56UHYXEV63T7SNH3S7AY' where id=4; -update noar ti set b0='1BW56UHYXEV63T7SNH3S7AY' where id=4; -update noar tt set v0='44XHNZ4NKEM3' where id=4; -update noar ti set v0='44XHNZ4NKEM3' where id=4; -update noar tt set b1='HQQMPW2F05HKZ97MEO12DC23TYCG' where id=4; -update noar ti set b1='HQQMPW2F05HKZ97MEO12DC23TYCG' where id=4; -update noar tt set v0='DH67CX5I5R84XPZEPQK' where id=4; -update noar ti set v0='DH67CX5I5R84XPZEPQK' where id=4; -update noar tt set b2='HMY3CDVT3GU0EQC25P' where id=4; -update noar ti set b2='HMY3CDVT3GU0EQC25P' where id=4; -update noar tt set v0='8TVGVRFK8F1STKHB6JCHTAG22D8' where id=5; -update noar ti set v0='8TVGVRFK8F1STKHB6JCHTAG22D8' where id=5; -update noar tt set b0='3AVTASCWQN6DL8QJANECKXNRLQVMFTP' where id=5; -update noar ti set b0='3AVTASCWQN6DL8QJANECKXNRLQVMFTP' where id=5; -update noar tt set v0='1OZF43HR25LIBWHR4' where id=5; -update noar ti set v0='1OZF43HR25LIBWHR4' where id=5; -update noar tt set b1='YUG1X33' where id=5; -update noar ti set b1='YUG1X33' where id=5; -update noar tt set v0='ZDCGL0AEMSJ1H5RIODK8N99DWEE04J9' where id=5; -update noar ti set v0='ZDCGL0AEMSJ1H5RIODK8N99DWEE04J9' where id=5; -update noar tt set b2='BQIF4A94AKY5' where id=5; -update noar ti set b2='BQIF4A94AKY5' where id=5; -update noar tt set v0='Y4XUS33LRKQESG22BJINOYYCW3' where id=6; -update noar ti set v0='Y4XUS33LRKQESG22BJINOYYCW3' where id=6; -update noar tt set b0='PT0250A8HK' where id=6; -update noar ti set b0='PT0250A8HK' where id=6; -update noar tt set v0='KQK1OBS0BCNQA630' where id=6; -update noar ti set v0='KQK1OBS0BCNQA630' where id=6; -update noar tt set b1='76GBXY8UG9VXVDDX5EKK4M' where id=6; -update noar ti set b1='76GBXY8UG9VXVDDX5EKK4M' where id=6; -update noar tt set v0='UXKBIB1BWBEE2VTLNWP4TEX' where id=6; -update noar ti set v0='UXKBIB1BWBEE2VTLNWP4TEX' where id=6; -update noar tt set b2='CZ4M3CIIYMCPTOO06' where id=6; -update noar ti set b2='CZ4M3CIIYMCPTOO06' where id=6; -update noar tt set v0='QAFP51MW' where id=7; -update noar ti set v0='QAFP51MW' where id=7; -update noar tt set b0='828GG2ODI1U' where id=7; -update noar ti set b0='828GG2ODI1U' where id=7; -update noar tt set v0='M2W97A2DI27EZFEA5220TSWGE' where id=7; -update noar ti set v0='M2W97A2DI27EZFEA5220TSWGE' where id=7; -update noar tt set b1='2Q2IAWITM' where id=7; -update noar ti set b1='2Q2IAWITM' where id=7; -update noar tt set v0='K8YU1VEF28VK07LAZSQG5QQLYOU8YI0J' where id=7; -update noar ti set v0='K8YU1VEF28VK07LAZSQG5QQLYOU8YI0J' where id=7; -update noar tt set b2='QS3Q6T' where id=7; -update noar ti set b2='QS3Q6T' where id=7; -update noar tt set v0='65CDRWY8HCF49GDNROB' where id=8; -update noar ti set v0='65CDRWY8HCF49GDNROB' where id=8; -update noar tt set b0='UMYRM4ZVF1O57UTEWBVJ' where id=8; -update noar ti set b0='UMYRM4ZVF1O57UTEWBVJ' where id=8; -update noar tt set v0='SECC406XNGDCQYL' where id=8; -update noar ti set v0='SECC406XNGDCQYL' where id=8; -update noar tt set b1='D391ZS4F9M352RM7LH99MC' where id=8; -update noar ti set b1='D391ZS4F9M352RM7LH99MC' where id=8; -update noar tt set v0='IK46SHTC3T8JM3DJ3' where id=8; -update noar ti set v0='IK46SHTC3T8JM3DJ3' where id=8; -update noar tt set b2='FPRI30GGVK3HKA9AH6OYIKFHPRPQF' where id=8; -update noar ti set b2='FPRI30GGVK3HKA9AH6OYIKFHPRPQF' where id=8; -update noar tt set v0='FP2L49GV21JEOLY3R8' where id=9; -update noar ti set v0='FP2L49GV21JEOLY3R8' where id=9; -update noar tt set b0='1YU0GUNLKUJXXLKX' where id=9; -update noar ti set b0='1YU0GUNLKUJXXLKX' where id=9; -update noar tt set v0='4P4U47' where id=9; -update noar ti set v0='4P4U47' where id=9; -update noar tt set b1='YJNOD22J' where id=9; -update noar ti set b1='YJNOD22J' where id=9; -update noar tt set v0='K0W7B6J3Q82M' where id=9; -update noar ti set v0='K0W7B6J3Q82M' where id=9; -update noar tt set b2='S2V60' where id=9; -update noar ti set b2='S2V60' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 tinyblob null, - b1 longblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='1K3XH' where id=1; -update noar ti set v0='1K3XH' where id=1; -update noar tt set b0='Q5U7UL4OJZDEQ1UJ4KI' where id=1; -update noar ti set b0='Q5U7UL4OJZDEQ1UJ4KI' where id=1; -update noar tt set v0='GD9SVD3KL9QT6G9DDKFL' where id=1; -update noar ti set v0='GD9SVD3KL9QT6G9DDKFL' where id=1; -update noar tt set b1='AQNDP6H' where id=1; -update noar ti set b1='AQNDP6H' where id=1; -update noar tt set v0='T0MRA5CA30' where id=1; -update noar ti set v0='T0MRA5CA30' where id=1; -update noar tt set b2='NW' where id=1; -update noar ti set b2='NW' where id=1; -update noar tt set v0='EQ2KELGR7HJORF7' where id=2; -update noar ti set v0='EQ2KELGR7HJORF7' where id=2; -update noar tt set b0='O2M1YY' where id=2; -update noar ti set b0='O2M1YY' where id=2; -update noar tt set v0='S60MYWQR1GIB50DV4P6MH' where id=2; -update noar ti set v0='S60MYWQR1GIB50DV4P6MH' where id=2; -update noar tt set b1='CXY746' where id=2; -update noar ti set b1='CXY746' where id=2; -update noar tt set v0='INY09QPW8DOZ3OE6117SAR7P3F7BRZO' where id=2; -update noar ti set v0='INY09QPW8DOZ3OE6117SAR7P3F7BRZO' where id=2; -update noar tt set b2='1JILTTMNZ7HXC' where id=2; -update noar ti set b2='1JILTTMNZ7HXC' where id=2; -update noar tt set v0='UKY0' where id=3; -update noar ti set v0='UKY0' where id=3; -update noar tt set b0='XEZM3L55QWKP1GZGD60OYE2NL0ZRTS' where id=3; -update noar ti set b0='XEZM3L55QWKP1GZGD60OYE2NL0ZRTS' where id=3; -update noar tt set v0='5' where id=3; -update noar ti set v0='5' where id=3; -update noar tt set b1='OPW0WKQKP' where id=3; -update noar ti set b1='OPW0WKQKP' where id=3; -update noar tt set v0='J' where id=3; -update noar ti set v0='J' where id=3; -update noar tt set b2='RDYGAB6NJ3T' where id=3; -update noar ti set b2='RDYGAB6NJ3T' where id=3; -update noar tt set v0='NCRHZZPZA6ROJK8UPE5CR1MSCAHC66WH' where id=4; -update noar ti set v0='NCRHZZPZA6ROJK8UPE5CR1MSCAHC66WH' where id=4; -update noar tt set b0='EZEQ9NGJY' where id=4; -update noar ti set b0='EZEQ9NGJY' where id=4; -update noar tt set v0='CR87QQSP1V8F11S98FN2ZA0FK9BO34D' where id=4; -update noar ti set v0='CR87QQSP1V8F11S98FN2ZA0FK9BO34D' where id=4; -update noar tt set b1='CU8OAFJ0UR8WVPA3KRQ7VBQYCOT' where id=4; -update noar ti set b1='CU8OAFJ0UR8WVPA3KRQ7VBQYCOT' where id=4; -update noar tt set v0='C6SR' where id=4; -update noar ti set v0='C6SR' where id=4; -update noar tt set b2='O4KC2O0Z077GMO' where id=4; -update noar ti set b2='O4KC2O0Z077GMO' where id=4; -update noar tt set v0='WPFSK' where id=5; -update noar ti set v0='WPFSK' where id=5; -update noar tt set b0='AGKZJQAUEWKZN3T' where id=5; -update noar ti set b0='AGKZJQAUEWKZN3T' where id=5; -update noar tt set v0='8TOZML' where id=5; -update noar ti set v0='8TOZML' where id=5; -update noar tt set b1='GXK' where id=5; -update noar ti set b1='GXK' where id=5; -update noar tt set v0='1F2' where id=5; -update noar ti set v0='1F2' where id=5; -update noar tt set b2='WW5K3Y46PTQNZWM4L3LC4S9O' where id=5; -update noar ti set b2='WW5K3Y46PTQNZWM4L3LC4S9O' where id=5; -update noar tt set v0='4R00D4EW2TQELDS0VRM23VBIJ3BG' where id=6; -update noar ti set v0='4R00D4EW2TQELDS0VRM23VBIJ3BG' where id=6; -update noar tt set b0='UXC7ZCMRJV997TH2L' where id=6; -update noar ti set b0='UXC7ZCMRJV997TH2L' where id=6; -update noar tt set v0='A4ZJTONCH8KVRQ5I2OP1J0H0OEG3DHZ1' where id=6; -update noar ti set v0='A4ZJTONCH8KVRQ5I2OP1J0H0OEG3DHZ1' where id=6; -update noar tt set b1='A8TPPHWCFZO9M3OVKU2WSBW' where id=6; -update noar ti set b1='A8TPPHWCFZO9M3OVKU2WSBW' where id=6; -update noar tt set v0='EK' where id=6; -update noar ti set v0='EK' where id=6; -update noar tt set b2='A5C8R19EGHH1EY13X' where id=6; -update noar ti set b2='A5C8R19EGHH1EY13X' where id=6; -update noar tt set v0='84K5KZCH' where id=7; -update noar ti set v0='84K5KZCH' where id=7; -update noar tt set b0='ZRN6I9' where id=7; -update noar ti set b0='ZRN6I9' where id=7; -update noar tt set v0='62C9J9SRW1T5G9' where id=7; -update noar ti set v0='62C9J9SRW1T5G9' where id=7; -update noar tt set b1='C8JZHUY1CSPLFA67W' where id=7; -update noar ti set b1='C8JZHUY1CSPLFA67W' where id=7; -update noar tt set v0='NRV5DNF0P8WVIZGD2FU59' where id=7; -update noar ti set v0='NRV5DNF0P8WVIZGD2FU59' where id=7; -update noar tt set b2='IGQAM71M6XU18' where id=7; -update noar ti set b2='IGQAM71M6XU18' where id=7; -update noar tt set v0='BVW7GMN482797DMHX78' where id=8; -update noar ti set v0='BVW7GMN482797DMHX78' where id=8; -update noar tt set b0='WIYVLKRBP5GOOHQAMHHHRUII' where id=8; -update noar ti set b0='WIYVLKRBP5GOOHQAMHHHRUII' where id=8; -update noar tt set v0='8O8XNMRAAZ554P8WNYXMO' where id=8; -update noar ti set v0='8O8XNMRAAZ554P8WNYXMO' where id=8; -update noar tt set b1='642HII6FZYOKV' where id=8; -update noar ti set b1='642HII6FZYOKV' where id=8; -update noar tt set v0='2KVAEW3HIJZQX' where id=8; -update noar ti set v0='2KVAEW3HIJZQX' where id=8; -update noar tt set b2='JAT4IRM4' where id=8; -update noar ti set b2='JAT4IRM4' where id=8; -update noar tt set v0='VWJMDDHFZV4LLK88' where id=9; -update noar ti set v0='VWJMDDHFZV4LLK88' where id=9; -update noar tt set b0='289MZ3YXSMQ3YCQ7PN' where id=9; -update noar ti set b0='289MZ3YXSMQ3YCQ7PN' where id=9; -update noar tt set v0='INP8LKVJ38CMMVRVVKSZ4XWCAX31P' where id=9; -update noar ti set v0='INP8LKVJ38CMMVRVVKSZ4XWCAX31P' where id=9; -update noar tt set b1='99NJUURHWDZQ1JH' where id=9; -update noar ti set b1='99NJUURHWDZQ1JH' where id=9; -update noar tt set v0='YOE6EQOHL92NVVYUHJ15O' where id=9; -update noar ti set v0='YOE6EQOHL92NVVYUHJ15O' where id=9; -update noar tt set b2='CF9RUGIO' where id=9; -update noar ti set b2='CF9RUGIO' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 tinyblob null, - b1 longblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='SLN938UF43CAA3ZH69NA16FWNMTF' where id=1; -update noar ti set v0='SLN938UF43CAA3ZH69NA16FWNMTF' where id=1; -update noar tt set b0='89O4V2FOJHTDSYI5T1C3JPSMO8J0RG4' where id=1; -update noar ti set b0='89O4V2FOJHTDSYI5T1C3JPSMO8J0RG4' where id=1; -update noar tt set v0='F9BLE' where id=1; -update noar ti set v0='F9BLE' where id=1; -update noar tt set b1='B6OJ4H6J7SFX6Q4A' where id=1; -update noar ti set b1='B6OJ4H6J7SFX6Q4A' where id=1; -update noar tt set v0='C0M2LB' where id=1; -update noar ti set v0='C0M2LB' where id=1; -update noar tt set b2='0ZREMSTZ3GWTYEY1NMT9ALSVC2T5' where id=1; -update noar ti set b2='0ZREMSTZ3GWTYEY1NMT9ALSVC2T5' where id=1; -update noar tt set v0='HOO0V05EYENEV677X9LWO88' where id=2; -update noar ti set v0='HOO0V05EYENEV677X9LWO88' where id=2; -update noar tt set b0='LXB94SJFEN87YRQGXL3BIC' where id=2; -update noar ti set b0='LXB94SJFEN87YRQGXL3BIC' where id=2; -update noar tt set v0='I4YRZD8Y2SIF66SDBFPKLB1OH4EW' where id=2; -update noar ti set v0='I4YRZD8Y2SIF66SDBFPKLB1OH4EW' where id=2; -update noar tt set b1='NC9BWOVFHD3E' where id=2; -update noar ti set b1='NC9BWOVFHD3E' where id=2; -update noar tt set v0='9XFD6MZLSP3JZOQCDKB0C8YG9H' where id=2; -update noar ti set v0='9XFD6MZLSP3JZOQCDKB0C8YG9H' where id=2; -update noar tt set b2='TOMK' where id=2; -update noar ti set b2='TOMK' where id=2; -update noar tt set v0='R0BK3AC03U8R2FYG7TLJMWG5SMMUM' where id=3; -update noar ti set v0='R0BK3AC03U8R2FYG7TLJMWG5SMMUM' where id=3; -update noar tt set b0='L78JB90Q' where id=3; -update noar ti set b0='L78JB90Q' where id=3; -update noar tt set v0='72SKBQ1KFHQUZEYOLU0' where id=3; -update noar ti set v0='72SKBQ1KFHQUZEYOLU0' where id=3; -update noar tt set b1='1X95L93FRD2BOMW1SKS' where id=3; -update noar ti set b1='1X95L93FRD2BOMW1SKS' where id=3; -update noar tt set v0='1LQ7M5PPXZQQYN1P5SMU6N8UN4' where id=3; -update noar ti set v0='1LQ7M5PPXZQQYN1P5SMU6N8UN4' where id=3; -update noar tt set b2='4A6F5WYDIL3Q220V5HI98G006MLK4IT' where id=3; -update noar ti set b2='4A6F5WYDIL3Q220V5HI98G006MLK4IT' where id=3; -update noar tt set v0='LIB92L6Z1RI8Y' where id=4; -update noar ti set v0='LIB92L6Z1RI8Y' where id=4; -update noar tt set b0='WEZM97NCABEO5SQERN' where id=4; -update noar ti set b0='WEZM97NCABEO5SQERN' where id=4; -update noar tt set v0='VJAHFANOBTHQ5RGQCSM49DNE7NOFXQ7' where id=4; -update noar ti set v0='VJAHFANOBTHQ5RGQCSM49DNE7NOFXQ7' where id=4; -update noar tt set b1='L2' where id=4; -update noar ti set b1='L2' where id=4; -update noar tt set v0='MVZ0O8' where id=4; -update noar ti set v0='MVZ0O8' where id=4; -update noar tt set b2='CRR6TN3HD8H9EKC1' where id=4; -update noar ti set b2='CRR6TN3HD8H9EKC1' where id=4; -update noar tt set v0='KQJ8A6MN6LNI0U42OXS71WVB9B520FY' where id=5; -update noar ti set v0='KQJ8A6MN6LNI0U42OXS71WVB9B520FY' where id=5; -update noar tt set b0='IDA02ZVBTMEBLLIQDE' where id=5; -update noar ti set b0='IDA02ZVBTMEBLLIQDE' where id=5; -update noar tt set v0='SWXDDGE00EXOIIWW' where id=5; -update noar ti set v0='SWXDDGE00EXOIIWW' where id=5; -update noar tt set b1='9ERJ55NSCT314' where id=5; -update noar ti set b1='9ERJ55NSCT314' where id=5; -update noar tt set v0='3TJ2CZNWZRZ' where id=5; -update noar ti set v0='3TJ2CZNWZRZ' where id=5; -update noar tt set b2='YG17' where id=5; -update noar ti set b2='YG17' where id=5; -update noar tt set v0='4SC4CW' where id=6; -update noar ti set v0='4SC4CW' where id=6; -update noar tt set b0='4V65D577IAX81KHQVECWP' where id=6; -update noar ti set b0='4V65D577IAX81KHQVECWP' where id=6; -update noar tt set v0='7Q9764PH4T3H38WB' where id=6; -update noar ti set v0='7Q9764PH4T3H38WB' where id=6; -update noar tt set b1='MBLDT' where id=6; -update noar ti set b1='MBLDT' where id=6; -update noar tt set v0='UK1QCP4I60TX2NAI6L8HLNB50EBT' where id=6; -update noar ti set v0='UK1QCP4I60TX2NAI6L8HLNB50EBT' where id=6; -update noar tt set b2='GWZ39V3CDED0ITA' where id=6; -update noar ti set b2='GWZ39V3CDED0ITA' where id=6; -update noar tt set v0='45JYABDDR9QQK7T' where id=7; -update noar ti set v0='45JYABDDR9QQK7T' where id=7; -update noar tt set b0='DTB3RO1ZFXGIJB' where id=7; -update noar ti set b0='DTB3RO1ZFXGIJB' where id=7; -update noar tt set v0='LZPHTCDNRHPQ8EM5R3OH8QCR3' where id=7; -update noar ti set v0='LZPHTCDNRHPQ8EM5R3OH8QCR3' where id=7; -update noar tt set b1='XH2FAF5QL9BT66CZLKHW97F4K92LP' where id=7; -update noar ti set b1='XH2FAF5QL9BT66CZLKHW97F4K92LP' where id=7; -update noar tt set v0='RG6991DPUJN9ZG3SSWTAXXXLDZ3G1ET' where id=7; -update noar ti set v0='RG6991DPUJN9ZG3SSWTAXXXLDZ3G1ET' where id=7; -update noar tt set b2='JNQEPXX' where id=7; -update noar ti set b2='JNQEPXX' where id=7; -update noar tt set v0='L2HHZ16U76YLMUHI58R5CMMV828' where id=8; -update noar ti set v0='L2HHZ16U76YLMUHI58R5CMMV828' where id=8; -update noar tt set b0='M0KKGLB80XBHUPNX5HS2F8VNO4UE31' where id=8; -update noar ti set b0='M0KKGLB80XBHUPNX5HS2F8VNO4UE31' where id=8; -update noar tt set v0='BVCIG' where id=8; -update noar ti set v0='BVCIG' where id=8; -update noar tt set b1='R' where id=8; -update noar ti set b1='R' where id=8; -update noar tt set v0='BKY3QTZ3QT8Z83YNQ134D' where id=8; -update noar ti set v0='BKY3QTZ3QT8Z83YNQ134D' where id=8; -update noar tt set b2='0E6WF2PBP966OKFLQIC64L5' where id=8; -update noar ti set b2='0E6WF2PBP966OKFLQIC64L5' where id=8; -update noar tt set v0='LTGS1HS06SBG4RUPSL' where id=9; -update noar ti set v0='LTGS1HS06SBG4RUPSL' where id=9; -update noar tt set b0='600YNT1CG9I8II1Q484T7S20' where id=9; -update noar ti set b0='600YNT1CG9I8II1Q484T7S20' where id=9; -update noar tt set v0='FBJ36E57STTYLNMWY7MV7VOEN' where id=9; -update noar ti set v0='FBJ36E57STTYLNMWY7MV7VOEN' where id=9; -update noar tt set b1='8EKRQ6Q7ZVDO44F21D1' where id=9; -update noar ti set b1='8EKRQ6Q7ZVDO44F21D1' where id=9; -update noar tt set v0='U808FK96FC96ZU504UG2FTBRLY3X' where id=9; -update noar ti set v0='U808FK96FC96ZU504UG2FTBRLY3X' where id=9; -update noar tt set b2='K52LZKUW3JEC6NJJPGBL4S2O5TELU81' where id=9; -update noar ti set b2='K52LZKUW3JEC6NJJPGBL4S2O5TELU81' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 tinyblob not null, - b1 longblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='Z' where id=1; -update noar ti set v0='Z' where id=1; -update noar tt set b0='MWC0GOHOIZ2KSDX44PMNF' where id=1; -update noar ti set b0='MWC0GOHOIZ2KSDX44PMNF' where id=1; -update noar tt set v0='8V3JEWQ4P8KEZDX7K3S1MW8W4LXS' where id=1; -update noar ti set v0='8V3JEWQ4P8KEZDX7K3S1MW8W4LXS' where id=1; -update noar tt set b1='MTXKVRB8DQGQ5C9BO' where id=1; -update noar ti set b1='MTXKVRB8DQGQ5C9BO' where id=1; -update noar tt set v0='HSTZL' where id=1; -update noar ti set v0='HSTZL' where id=1; -update noar tt set b2='H' where id=1; -update noar ti set b2='H' where id=1; -update noar tt set v0='EZ4H0M4CW2S8ONRN7VVN6XJOUJ3Y6' where id=2; -update noar ti set v0='EZ4H0M4CW2S8ONRN7VVN6XJOUJ3Y6' where id=2; -update noar tt set b0='MHDZET29WB0ZCZG' where id=2; -update noar ti set b0='MHDZET29WB0ZCZG' where id=2; -update noar tt set v0='MR' where id=2; -update noar ti set v0='MR' where id=2; -update noar tt set b1='4L92MFYN5WB07LL0RV927K3RWYZV' where id=2; -update noar ti set b1='4L92MFYN5WB07LL0RV927K3RWYZV' where id=2; -update noar tt set v0='55GKF9GTDJUGGS9496' where id=2; -update noar ti set v0='55GKF9GTDJUGGS9496' where id=2; -update noar tt set b2='5TV8A' where id=2; -update noar ti set b2='5TV8A' where id=2; -update noar tt set v0='MIRICDCTY8J5E8' where id=3; -update noar ti set v0='MIRICDCTY8J5E8' where id=3; -update noar tt set b0='V6' where id=3; -update noar ti set b0='V6' where id=3; -update noar tt set v0='JWCA09Y6L6MV38EZVG9RP9UOMX' where id=3; -update noar ti set v0='JWCA09Y6L6MV38EZVG9RP9UOMX' where id=3; -update noar tt set b1='UP8QQ41AK4KLP9WH5B2E04LFRC5' where id=3; -update noar ti set b1='UP8QQ41AK4KLP9WH5B2E04LFRC5' where id=3; -update noar tt set v0='V68' where id=3; -update noar ti set v0='V68' where id=3; -update noar tt set b2='TDZDTU8YFECPDPVL52K5' where id=3; -update noar ti set b2='TDZDTU8YFECPDPVL52K5' where id=3; -update noar tt set v0='EG3U3V50H965OMD9QUNDBE1Y9KZXL9R' where id=4; -update noar ti set v0='EG3U3V50H965OMD9QUNDBE1Y9KZXL9R' where id=4; -update noar tt set b0='SIVPZXBFQOEL' where id=4; -update noar ti set b0='SIVPZXBFQOEL' where id=4; -update noar tt set v0='L88CJ2NJ85SU' where id=4; -update noar ti set v0='L88CJ2NJ85SU' where id=4; -update noar tt set b1='81V74GX0AT66SVTWGCCL' where id=4; -update noar ti set b1='81V74GX0AT66SVTWGCCL' where id=4; -update noar tt set v0='UPSVGRDDU9SRJZ01FRLATCALF1P2' where id=4; -update noar ti set v0='UPSVGRDDU9SRJZ01FRLATCALF1P2' where id=4; -update noar tt set b2='ORFOLCIW' where id=4; -update noar ti set b2='ORFOLCIW' where id=4; -update noar tt set v0='8X' where id=5; -update noar ti set v0='8X' where id=5; -update noar tt set b0='F1X7' where id=5; -update noar ti set b0='F1X7' where id=5; -update noar tt set v0='ALS6T3RQ3A5CG0ZI74I4C4J' where id=5; -update noar ti set v0='ALS6T3RQ3A5CG0ZI74I4C4J' where id=5; -update noar tt set b1='5A1U3PEWESFRAVHPBA' where id=5; -update noar ti set b1='5A1U3PEWESFRAVHPBA' where id=5; -update noar tt set v0='LGY1R7' where id=5; -update noar ti set v0='LGY1R7' where id=5; -update noar tt set b2='CSFWX30MJ' where id=5; -update noar ti set b2='CSFWX30MJ' where id=5; -update noar tt set v0='H2OWF5OLGG6XLG7R8UQRTF' where id=6; -update noar ti set v0='H2OWF5OLGG6XLG7R8UQRTF' where id=6; -update noar tt set b0='W839EDPSSNWA' where id=6; -update noar ti set b0='W839EDPSSNWA' where id=6; -update noar tt set v0='D80GYNUPX2GHWFLLE' where id=6; -update noar ti set v0='D80GYNUPX2GHWFLLE' where id=6; -update noar tt set b1='LY9THUCD8X6IS53HAGJE6B' where id=6; -update noar ti set b1='LY9THUCD8X6IS53HAGJE6B' where id=6; -update noar tt set v0='4YU' where id=6; -update noar ti set v0='4YU' where id=6; -update noar tt set b2='XSRFHTT' where id=6; -update noar ti set b2='XSRFHTT' where id=6; -update noar tt set v0='UX' where id=7; -update noar ti set v0='UX' where id=7; -update noar tt set b0='ACXLW8SH2MVIS7XSVQ' where id=7; -update noar ti set b0='ACXLW8SH2MVIS7XSVQ' where id=7; -update noar tt set v0='IRNCEZSXKV4WVR3CKP3654W2RCNJ5U' where id=7; -update noar ti set v0='IRNCEZSXKV4WVR3CKP3654W2RCNJ5U' where id=7; -update noar tt set b1='88SC6AJQG57A' where id=7; -update noar ti set b1='88SC6AJQG57A' where id=7; -update noar tt set v0='UY4QV4LL491RGY' where id=7; -update noar ti set v0='UY4QV4LL491RGY' where id=7; -update noar tt set b2='I17JTP4YDM56EFP3WJ1BELH053' where id=7; -update noar ti set b2='I17JTP4YDM56EFP3WJ1BELH053' where id=7; -update noar tt set v0='JQBBY5MLRO8HKVADD5LEX368V6NXO2F' where id=8; -update noar ti set v0='JQBBY5MLRO8HKVADD5LEX368V6NXO2F' where id=8; -update noar tt set b0='KZA5M8WAGWY' where id=8; -update noar ti set b0='KZA5M8WAGWY' where id=8; -update noar tt set v0='V6' where id=8; -update noar ti set v0='V6' where id=8; -update noar tt set b1='3PXA0SJ2PYYR9OVQNCZ51Q2XMI6AWXNU' where id=8; -update noar ti set b1='3PXA0SJ2PYYR9OVQNCZ51Q2XMI6AWXNU' where id=8; -update noar tt set v0='C0OQTZ7PPS1JGK5YSVU7OZ84AJ5X' where id=8; -update noar ti set v0='C0OQTZ7PPS1JGK5YSVU7OZ84AJ5X' where id=8; -update noar tt set b2='ZHX07RQ25QI7RO4PUS0V8M8T47X3XOO' where id=8; -update noar ti set b2='ZHX07RQ25QI7RO4PUS0V8M8T47X3XOO' where id=8; -update noar tt set v0='3ET1ZHMW09EJ' where id=9; -update noar ti set v0='3ET1ZHMW09EJ' where id=9; -update noar tt set b0='NKXSINV04QK95AVATWGARD' where id=9; -update noar ti set b0='NKXSINV04QK95AVATWGARD' where id=9; -update noar tt set v0='LXM35YTGNEKVHK65' where id=9; -update noar ti set v0='LXM35YTGNEKVHK65' where id=9; -update noar tt set b1='TQ9JDEX54TAHD2' where id=9; -update noar ti set b1='TQ9JDEX54TAHD2' where id=9; -update noar tt set v0='VDV' where id=9; -update noar ti set v0='VDV' where id=9; -update noar tt set b2='5' where id=9; -update noar ti set b2='5' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 tinyblob not null, - b1 longblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='Q8IZKFPYW8BP8Q9Y7II8PRW1OWMR' where id=1; -update noar ti set v0='Q8IZKFPYW8BP8Q9Y7II8PRW1OWMR' where id=1; -update noar tt set b0='97DW2HLBA4O52WW5WK55LW524SRIUCF' where id=1; -update noar ti set b0='97DW2HLBA4O52WW5WK55LW524SRIUCF' where id=1; -update noar tt set v0='AXARTAO2RYJ40' where id=1; -update noar ti set v0='AXARTAO2RYJ40' where id=1; -update noar tt set b1='C13RQ' where id=1; -update noar ti set b1='C13RQ' where id=1; -update noar tt set v0='YJTXBC5B635DO8VPCTAC' where id=1; -update noar ti set v0='YJTXBC5B635DO8VPCTAC' where id=1; -update noar tt set b2='W5QZGI4LZYDBY8N' where id=1; -update noar ti set b2='W5QZGI4LZYDBY8N' where id=1; -update noar tt set v0='X3' where id=2; -update noar ti set v0='X3' where id=2; -update noar tt set b0='829' where id=2; -update noar ti set b0='829' where id=2; -update noar tt set v0='RPS6P' where id=2; -update noar ti set v0='RPS6P' where id=2; -update noar tt set b1='8HY84DB' where id=2; -update noar ti set b1='8HY84DB' where id=2; -update noar tt set v0='J7VXIEA6J5SYCEHLK1Y1W5BIQNCW' where id=2; -update noar ti set v0='J7VXIEA6J5SYCEHLK1Y1W5BIQNCW' where id=2; -update noar tt set b2='0RX3S1RMN648ADDVP3C2' where id=2; -update noar ti set b2='0RX3S1RMN648ADDVP3C2' where id=2; -update noar tt set v0='SC000MTAOA4Q6WIFCK9R80UHKC77HJ' where id=3; -update noar ti set v0='SC000MTAOA4Q6WIFCK9R80UHKC77HJ' where id=3; -update noar tt set b0='5T4' where id=3; -update noar ti set b0='5T4' where id=3; -update noar tt set v0='P9SZCCJ73N54DOSPBOM' where id=3; -update noar ti set v0='P9SZCCJ73N54DOSPBOM' where id=3; -update noar tt set b1='K1AMYTXXLXKV8FBPCWWYXEN4OP' where id=3; -update noar ti set b1='K1AMYTXXLXKV8FBPCWWYXEN4OP' where id=3; -update noar tt set v0='TFTNEC8BTU12BVLOERWD0Q7R3RCY' where id=3; -update noar ti set v0='TFTNEC8BTU12BVLOERWD0Q7R3RCY' where id=3; -update noar tt set b2='ZVCI1F43D0' where id=3; -update noar ti set b2='ZVCI1F43D0' where id=3; -update noar tt set v0='INJX9LLZMYWDTISDYW3J7' where id=4; -update noar ti set v0='INJX9LLZMYWDTISDYW3J7' where id=4; -update noar tt set b0='JCV2DU400JNN3SF2IZS00CAX59SCM' where id=4; -update noar ti set b0='JCV2DU400JNN3SF2IZS00CAX59SCM' where id=4; -update noar tt set v0='IRO' where id=4; -update noar ti set v0='IRO' where id=4; -update noar tt set b1='RD' where id=4; -update noar ti set b1='RD' where id=4; -update noar tt set v0='FORC4GNQDHSLW89H0IU08KCO' where id=4; -update noar ti set v0='FORC4GNQDHSLW89H0IU08KCO' where id=4; -update noar tt set b2='5O0P5YAAUE7O8SOOB7DH' where id=4; -update noar ti set b2='5O0P5YAAUE7O8SOOB7DH' where id=4; -update noar tt set v0='KRNKVK767N6I9WDC3T' where id=5; -update noar ti set v0='KRNKVK767N6I9WDC3T' where id=5; -update noar tt set b0='GGARGL' where id=5; -update noar ti set b0='GGARGL' where id=5; -update noar tt set v0='SLAXT7PPBMGGM' where id=5; -update noar ti set v0='SLAXT7PPBMGGM' where id=5; -update noar tt set b1='0H21PROOMP' where id=5; -update noar ti set b1='0H21PROOMP' where id=5; -update noar tt set v0='71BHTI3ZOKO' where id=5; -update noar ti set v0='71BHTI3ZOKO' where id=5; -update noar tt set b2='QUW8ASXOBC6W0QLOQKZP' where id=5; -update noar ti set b2='QUW8ASXOBC6W0QLOQKZP' where id=5; -update noar tt set v0='STTEY' where id=6; -update noar ti set v0='STTEY' where id=6; -update noar tt set b0='YFTA6WN5EFU214PUXNNKYL9J1S' where id=6; -update noar ti set b0='YFTA6WN5EFU214PUXNNKYL9J1S' where id=6; -update noar tt set v0='CLFCX08EPBKVI1XLY6QOE0G5PDWZZT5O' where id=6; -update noar ti set v0='CLFCX08EPBKVI1XLY6QOE0G5PDWZZT5O' where id=6; -update noar tt set b1='A8R8Z2XSAMS48' where id=6; -update noar ti set b1='A8R8Z2XSAMS48' where id=6; -update noar tt set v0='5R984I49V63I80N8FUNAXIDLWJRGE7H' where id=6; -update noar ti set v0='5R984I49V63I80N8FUNAXIDLWJRGE7H' where id=6; -update noar tt set b2='U4RBM4FEJ4B2H1XKRNFBDBTDP6WDP' where id=6; -update noar ti set b2='U4RBM4FEJ4B2H1XKRNFBDBTDP6WDP' where id=6; -update noar tt set v0='0WIKF1SKKAEZ1PM395GVMBMOIKEWJAU3' where id=7; -update noar ti set v0='0WIKF1SKKAEZ1PM395GVMBMOIKEWJAU3' where id=7; -update noar tt set b0='UKP176O557YP6KBEMYIK9POX' where id=7; -update noar ti set b0='UKP176O557YP6KBEMYIK9POX' where id=7; -update noar tt set v0='ASAQVXKLI' where id=7; -update noar ti set v0='ASAQVXKLI' where id=7; -update noar tt set b1='C4WAEUP3M3P8LF4Z08QIUN2ED3YVKP' where id=7; -update noar ti set b1='C4WAEUP3M3P8LF4Z08QIUN2ED3YVKP' where id=7; -update noar tt set v0='ERBWVMV8PZKBNRU' where id=7; -update noar ti set v0='ERBWVMV8PZKBNRU' where id=7; -update noar tt set b2='ICYRTU273A6QYMF1ANM' where id=7; -update noar ti set b2='ICYRTU273A6QYMF1ANM' where id=7; -update noar tt set v0='H62G8Z2D41MNUW34Y0K4' where id=8; -update noar ti set v0='H62G8Z2D41MNUW34Y0K4' where id=8; -update noar tt set b0='RCCGMG7C660YW3YM' where id=8; -update noar ti set b0='RCCGMG7C660YW3YM' where id=8; -update noar tt set v0='NVGVE9OMW4' where id=8; -update noar ti set v0='NVGVE9OMW4' where id=8; -update noar tt set b1='WFEMB92JM0PGU11NWVP911JLL' where id=8; -update noar ti set b1='WFEMB92JM0PGU11NWVP911JLL' where id=8; -update noar tt set v0='EUH4PS' where id=8; -update noar ti set v0='EUH4PS' where id=8; -update noar tt set b2='L0KPVX9TNA8LNRFEPCDOE2' where id=8; -update noar ti set b2='L0KPVX9TNA8LNRFEPCDOE2' where id=8; -update noar tt set v0='ARUSH6QG7Q4F5CHMULLPGU4XYBYHFUUF' where id=9; -update noar ti set v0='ARUSH6QG7Q4F5CHMULLPGU4XYBYHFUUF' where id=9; -update noar tt set b0='CSUNA2WONWB1HI71AY9XIXQ' where id=9; -update noar ti set b0='CSUNA2WONWB1HI71AY9XIXQ' where id=9; -update noar tt set v0='HXIBODJW23HMDFPJXK4LV6N9H1P0VT5' where id=9; -update noar ti set v0='HXIBODJW23HMDFPJXK4LV6N9H1P0VT5' where id=9; -update noar tt set b1='ALFBWLRFVLG' where id=9; -update noar ti set b1='ALFBWLRFVLG' where id=9; -update noar tt set v0='NE38IOVOVJLOFBZVV09VZ' where id=9; -update noar ti set v0='NE38IOVOVJLOFBZVV09VZ' where id=9; -update noar tt set b2='7C4PRT4R1A8769FV5RS0' where id=9; -update noar ti set b2='7C4PRT4R1A8769FV5RS0' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 tinyblob null, - b1 longblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='Z4OWMSJVX9KRJJLO9' where id=1; -update noar ti set v0='Z4OWMSJVX9KRJJLO9' where id=1; -update noar tt set b0='OXZ9F50W0SN' where id=1; -update noar ti set b0='OXZ9F50W0SN' where id=1; -update noar tt set v0='B19NDVZGJ9MFH' where id=1; -update noar ti set v0='B19NDVZGJ9MFH' where id=1; -update noar tt set b1='A8UHWDIG' where id=1; -update noar ti set b1='A8UHWDIG' where id=1; -update noar tt set v0='4GMZUQ5XGOXH2SU' where id=1; -update noar ti set v0='4GMZUQ5XGOXH2SU' where id=1; -update noar tt set b2='4LN8PYCOB' where id=1; -update noar ti set b2='4LN8PYCOB' where id=1; -update noar tt set v0='0E3Z4OUAWMEVB88II4G3XIH' where id=2; -update noar ti set v0='0E3Z4OUAWMEVB88II4G3XIH' where id=2; -update noar tt set b0='U7KMZF23WVFEPDKA16VHEB9Z' where id=2; -update noar ti set b0='U7KMZF23WVFEPDKA16VHEB9Z' where id=2; -update noar tt set v0='2LH5OJ9O8ZM9O512DKJ0' where id=2; -update noar ti set v0='2LH5OJ9O8ZM9O512DKJ0' where id=2; -update noar tt set b1='HDIG0' where id=2; -update noar ti set b1='HDIG0' where id=2; -update noar tt set v0='SA8Q828YDWOXRGR' where id=2; -update noar ti set v0='SA8Q828YDWOXRGR' where id=2; -update noar tt set b2='U' where id=2; -update noar ti set b2='U' where id=2; -update noar tt set v0='2XV3IJQFPB6U6O00HU66HH' where id=3; -update noar ti set v0='2XV3IJQFPB6U6O00HU66HH' where id=3; -update noar tt set b0='LXV5SYE119AF3VJJV29' where id=3; -update noar ti set b0='LXV5SYE119AF3VJJV29' where id=3; -update noar tt set v0='Y1BSH7OL6JF0GK3DW0SCCCE3CVL' where id=3; -update noar ti set v0='Y1BSH7OL6JF0GK3DW0SCCCE3CVL' where id=3; -update noar tt set b1='PFW1HS5706UVI42' where id=3; -update noar ti set b1='PFW1HS5706UVI42' where id=3; -update noar tt set v0='RW5' where id=3; -update noar ti set v0='RW5' where id=3; -update noar tt set b2='XFVWGA4PZVGGTZDZZQBK8FNIF5VELKTY' where id=3; -update noar ti set b2='XFVWGA4PZVGGTZDZZQBK8FNIF5VELKTY' where id=3; -update noar tt set v0='UQF' where id=4; -update noar ti set v0='UQF' where id=4; -update noar tt set b0='B88LE1L5IUOB0IMB' where id=4; -update noar ti set b0='B88LE1L5IUOB0IMB' where id=4; -update noar tt set v0='PI7RHD03X9QXWBE3B3YCBH' where id=4; -update noar ti set v0='PI7RHD03X9QXWBE3B3YCBH' where id=4; -update noar tt set b1='LRALB8FRE8LH84YTS2UW61' where id=4; -update noar ti set b1='LRALB8FRE8LH84YTS2UW61' where id=4; -update noar tt set v0='J28U8MKQPMFJM51FUR4T71VX5DJ' where id=4; -update noar ti set v0='J28U8MKQPMFJM51FUR4T71VX5DJ' where id=4; -update noar tt set b2='TU7OQK63' where id=4; -update noar ti set b2='TU7OQK63' where id=4; -update noar tt set v0='GM' where id=5; -update noar ti set v0='GM' where id=5; -update noar tt set b0='YX10VFTH4C' where id=5; -update noar ti set b0='YX10VFTH4C' where id=5; -update noar tt set v0='870' where id=5; -update noar ti set v0='870' where id=5; -update noar tt set b1='T0P40G' where id=5; -update noar ti set b1='T0P40G' where id=5; -update noar tt set v0='A5PB4RCW1GD0YN1VSC3BSP8APEIK' where id=5; -update noar ti set v0='A5PB4RCW1GD0YN1VSC3BSP8APEIK' where id=5; -update noar tt set b2='1CT58EU6E6J2DSSQ2' where id=5; -update noar ti set b2='1CT58EU6E6J2DSSQ2' where id=5; -update noar tt set v0='S' where id=6; -update noar ti set v0='S' where id=6; -update noar tt set b0='WYOC32VVE80T6KL5L53GXVLUP48' where id=6; -update noar ti set b0='WYOC32VVE80T6KL5L53GXVLUP48' where id=6; -update noar tt set v0='LR7BOL' where id=6; -update noar ti set v0='LR7BOL' where id=6; -update noar tt set b1='GOUEP9F' where id=6; -update noar ti set b1='GOUEP9F' where id=6; -update noar tt set v0='120MD4F' where id=6; -update noar ti set v0='120MD4F' where id=6; -update noar tt set b2='MRULR4Z133' where id=6; -update noar ti set b2='MRULR4Z133' where id=6; -update noar tt set v0='MNPVYRN0W7S7M0K' where id=7; -update noar ti set v0='MNPVYRN0W7S7M0K' where id=7; -update noar tt set b0='978O6F8PYYAZ5HKNCKQ2YEHBNF6SX' where id=7; -update noar ti set b0='978O6F8PYYAZ5HKNCKQ2YEHBNF6SX' where id=7; -update noar tt set v0='8TEAZN78DE2445UB0FRSE8FPXHM' where id=7; -update noar ti set v0='8TEAZN78DE2445UB0FRSE8FPXHM' where id=7; -update noar tt set b1='6Y8ZKJU3CUA4APVY' where id=7; -update noar ti set b1='6Y8ZKJU3CUA4APVY' where id=7; -update noar tt set v0='78RH586WLY' where id=7; -update noar ti set v0='78RH586WLY' where id=7; -update noar tt set b2='Z0' where id=7; -update noar ti set b2='Z0' where id=7; -update noar tt set v0='7QA3MTJ7B' where id=8; -update noar ti set v0='7QA3MTJ7B' where id=8; -update noar tt set b0='C53LS0W4' where id=8; -update noar ti set b0='C53LS0W4' where id=8; -update noar tt set v0='Z' where id=8; -update noar ti set v0='Z' where id=8; -update noar tt set b1='5C5HZF9AMURYW8860MKXMXLJ1D4' where id=8; -update noar ti set b1='5C5HZF9AMURYW8860MKXMXLJ1D4' where id=8; -update noar tt set v0='2OK6C72SA49D2956Y28FXO6JW57Y5RM6' where id=8; -update noar ti set v0='2OK6C72SA49D2956Y28FXO6JW57Y5RM6' where id=8; -update noar tt set b2='L2' where id=8; -update noar ti set b2='L2' where id=8; -update noar tt set v0='OR0AX8CR32A47VCFYP35F569G7XPH' where id=9; -update noar ti set v0='OR0AX8CR32A47VCFYP35F569G7XPH' where id=9; -update noar tt set b0='DJ66RI8L' where id=9; -update noar ti set b0='DJ66RI8L' where id=9; -update noar tt set v0='WZNUXG82TH5JXKMK1T5GXQT93F6NEA6C' where id=9; -update noar ti set v0='WZNUXG82TH5JXKMK1T5GXQT93F6NEA6C' where id=9; -update noar tt set b1='V9HDF' where id=9; -update noar ti set b1='V9HDF' where id=9; -update noar tt set v0='C1OBESVQ7Z16P1RSVWE5HVPCCR' where id=9; -update noar ti set v0='C1OBESVQ7Z16P1RSVWE5HVPCCR' where id=9; -update noar tt set b2='9LY3OTQNKWO6ZO5V2R6B7TY' where id=9; -update noar ti set b2='9LY3OTQNKWO6ZO5V2R6B7TY' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 tinyblob null, - b1 longblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='PHR5V7JY1WU073QOJIB56S73IF' where id=1; -update noar ti set v0='PHR5V7JY1WU073QOJIB56S73IF' where id=1; -update noar tt set b0='YDPEE02N29K5MWCWGYB1BTPW' where id=1; -update noar ti set b0='YDPEE02N29K5MWCWGYB1BTPW' where id=1; -update noar tt set v0='N6B' where id=1; -update noar ti set v0='N6B' where id=1; -update noar tt set b1='ZT2GN1XWKX76P886YGOBEG' where id=1; -update noar ti set b1='ZT2GN1XWKX76P886YGOBEG' where id=1; -update noar tt set v0='5J9' where id=1; -update noar ti set v0='5J9' where id=1; -update noar tt set b2='WIW2SI8KC14TTO8RMIR4V92WX4' where id=1; -update noar ti set b2='WIW2SI8KC14TTO8RMIR4V92WX4' where id=1; -update noar tt set v0='PE0MBBHL7MLCEJRXN7R3UJ' where id=2; -update noar ti set v0='PE0MBBHL7MLCEJRXN7R3UJ' where id=2; -update noar tt set b0='R2DC21AAZ6N9ALWARJP1QTNGML1WD' where id=2; -update noar ti set b0='R2DC21AAZ6N9ALWARJP1QTNGML1WD' where id=2; -update noar tt set v0='3WYBJXG52KK58V2BP' where id=2; -update noar ti set v0='3WYBJXG52KK58V2BP' where id=2; -update noar tt set b1='JDG' where id=2; -update noar ti set b1='JDG' where id=2; -update noar tt set v0='I210H2HYGTGKCL' where id=2; -update noar ti set v0='I210H2HYGTGKCL' where id=2; -update noar tt set b2='R1V9KA520TI2M4B' where id=2; -update noar ti set b2='R1V9KA520TI2M4B' where id=2; -update noar tt set v0='7P935LES9682SG' where id=3; -update noar ti set v0='7P935LES9682SG' where id=3; -update noar tt set b0='IWKWJE4' where id=3; -update noar ti set b0='IWKWJE4' where id=3; -update noar tt set v0='VUYA3' where id=3; -update noar ti set v0='VUYA3' where id=3; -update noar tt set b1='VJFQM' where id=3; -update noar ti set b1='VJFQM' where id=3; -update noar tt set v0='96NBM9QT1' where id=3; -update noar ti set v0='96NBM9QT1' where id=3; -update noar tt set b2='SZU' where id=3; -update noar ti set b2='SZU' where id=3; -update noar tt set v0='T9B8YK9CJ7XBG7G6RR2CF4' where id=4; -update noar ti set v0='T9B8YK9CJ7XBG7G6RR2CF4' where id=4; -update noar tt set b0='4QCRVLMJ9IJS50BTP' where id=4; -update noar ti set b0='4QCRVLMJ9IJS50BTP' where id=4; -update noar tt set v0='D96S383WHP6U6PK' where id=4; -update noar ti set v0='D96S383WHP6U6PK' where id=4; -update noar tt set b1='I5QOIHOX2ZA3PE' where id=4; -update noar ti set b1='I5QOIHOX2ZA3PE' where id=4; -update noar tt set v0='SKZJEFY75XN10' where id=4; -update noar ti set v0='SKZJEFY75XN10' where id=4; -update noar tt set b2='U04EZLXCQMYW3V3H4DALLQQMY7Q1KP6' where id=4; -update noar ti set b2='U04EZLXCQMYW3V3H4DALLQQMY7Q1KP6' where id=4; -update noar tt set v0='RMYBX5NQ8IBF6OQ1T08SBL' where id=5; -update noar ti set v0='RMYBX5NQ8IBF6OQ1T08SBL' where id=5; -update noar tt set b0='AD3N27TIWLDLLTSTAR17UIY4UH' where id=5; -update noar ti set b0='AD3N27TIWLDLLTSTAR17UIY4UH' where id=5; -update noar tt set v0='G011RPM26RZ' where id=5; -update noar ti set v0='G011RPM26RZ' where id=5; -update noar tt set b1='BDPPIL44T9VM90MCVMO7O3C' where id=5; -update noar ti set b1='BDPPIL44T9VM90MCVMO7O3C' where id=5; -update noar tt set v0='4C18KYFF0ME' where id=5; -update noar ti set v0='4C18KYFF0ME' where id=5; -update noar tt set b2='H84V0J5G64HOZPJH8IV9ZW' where id=5; -update noar ti set b2='H84V0J5G64HOZPJH8IV9ZW' where id=5; -update noar tt set v0='7MN53ZUSX1UGTHGNM2Q9' where id=6; -update noar ti set v0='7MN53ZUSX1UGTHGNM2Q9' where id=6; -update noar tt set b0='FAO3BUBZPHDUP7YF53599JA64UW1' where id=6; -update noar ti set b0='FAO3BUBZPHDUP7YF53599JA64UW1' where id=6; -update noar tt set v0='RL11BMUJI3RK87KFSRV74' where id=6; -update noar ti set v0='RL11BMUJI3RK87KFSRV74' where id=6; -update noar tt set b1='5I7' where id=6; -update noar ti set b1='5I7' where id=6; -update noar tt set v0='CD3XKD3DHJBRJBACFV24Y53HS2Q76R' where id=6; -update noar ti set v0='CD3XKD3DHJBRJBACFV24Y53HS2Q76R' where id=6; -update noar tt set b2='SP' where id=6; -update noar ti set b2='SP' where id=6; -update noar tt set v0='4VBV1HBP6MK2MGEV' where id=7; -update noar ti set v0='4VBV1HBP6MK2MGEV' where id=7; -update noar tt set b0='PMRNL0S4DFX43CEQ70E92LBO15S63' where id=7; -update noar ti set b0='PMRNL0S4DFX43CEQ70E92LBO15S63' where id=7; -update noar tt set v0='ZZCY1HXTUP629SUD1IPS5Y' where id=7; -update noar ti set v0='ZZCY1HXTUP629SUD1IPS5Y' where id=7; -update noar tt set b1='XBA19L7AOK96ZQRJI8IUCZ5X0' where id=7; -update noar ti set b1='XBA19L7AOK96ZQRJI8IUCZ5X0' where id=7; -update noar tt set v0='P06VTFH86K' where id=7; -update noar ti set v0='P06VTFH86K' where id=7; -update noar tt set b2='AD5PMS2XVLGB' where id=7; -update noar ti set b2='AD5PMS2XVLGB' where id=7; -update noar tt set v0='0QC20FZPXBIKCODRBJONNR0NUXC2SDSY' where id=8; -update noar ti set v0='0QC20FZPXBIKCODRBJONNR0NUXC2SDSY' where id=8; -update noar tt set b0='PZXM5598GDZSPH2RK' where id=8; -update noar ti set b0='PZXM5598GDZSPH2RK' where id=8; -update noar tt set v0='F346V5J05UXC749ALV' where id=8; -update noar ti set v0='F346V5J05UXC749ALV' where id=8; -update noar tt set b1='MNGKLUHW' where id=8; -update noar ti set b1='MNGKLUHW' where id=8; -update noar tt set v0='VF5RQKP6U1JC665EMC' where id=8; -update noar ti set v0='VF5RQKP6U1JC665EMC' where id=8; -update noar tt set b2='KPKFVA52DZQYAM7' where id=8; -update noar ti set b2='KPKFVA52DZQYAM7' where id=8; -update noar tt set v0='9JAUDHG1' where id=9; -update noar ti set v0='9JAUDHG1' where id=9; -update noar tt set b0='TEIH533FXWNAYHS6103XOVRG' where id=9; -update noar ti set b0='TEIH533FXWNAYHS6103XOVRG' where id=9; -update noar tt set v0='3HCG7' where id=9; -update noar ti set v0='3HCG7' where id=9; -update noar tt set b1='R5G5B45OC71VNE0XL' where id=9; -update noar ti set b1='R5G5B45OC71VNE0XL' where id=9; -update noar tt set v0='SHM2S6J5B0TD7E' where id=9; -update noar ti set v0='SHM2S6J5B0TD7E' where id=9; -update noar tt set b2='W75YOSOZM14Q43PVVOA5IS' where id=9; -update noar ti set b2='W75YOSOZM14Q43PVVOA5IS' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 tinyblob not null, - b1 longblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='WLU26SY' where id=1; -update noar ti set v0='WLU26SY' where id=1; -update noar tt set b0='YZ4TDUAVDJZG8G1YXCGI3DEPA8ZRIO' where id=1; -update noar ti set b0='YZ4TDUAVDJZG8G1YXCGI3DEPA8ZRIO' where id=1; -update noar tt set v0='0BRD64W' where id=1; -update noar ti set v0='0BRD64W' where id=1; -update noar tt set b1='RRM593JN698L1X' where id=1; -update noar ti set b1='RRM593JN698L1X' where id=1; -update noar tt set v0='UM7XVGQ5Z' where id=1; -update noar ti set v0='UM7XVGQ5Z' where id=1; -update noar tt set b2='KZQPGD' where id=1; -update noar ti set b2='KZQPGD' where id=1; -update noar tt set v0='97B7EGPHGKKVT' where id=2; -update noar ti set v0='97B7EGPHGKKVT' where id=2; -update noar tt set b0='CDALQLH7KEZRR342VS0A92C68OH' where id=2; -update noar ti set b0='CDALQLH7KEZRR342VS0A92C68OH' where id=2; -update noar tt set v0='2ETM' where id=2; -update noar ti set v0='2ETM' where id=2; -update noar tt set b1='EFQ11YOD94UJ523TC' where id=2; -update noar ti set b1='EFQ11YOD94UJ523TC' where id=2; -update noar tt set v0='VX39CALAZQIETW0VZQ8A18M9JF3Q65' where id=2; -update noar ti set v0='VX39CALAZQIETW0VZQ8A18M9JF3Q65' where id=2; -update noar tt set b2='EVT' where id=2; -update noar ti set b2='EVT' where id=2; -update noar tt set v0='HS7KQ' where id=3; -update noar ti set v0='HS7KQ' where id=3; -update noar tt set b0='NJ71T813LJVA9D2UB' where id=3; -update noar ti set b0='NJ71T813LJVA9D2UB' where id=3; -update noar tt set v0='6WL8H78VZNK40LSBMTTIGDVXE47' where id=3; -update noar ti set v0='6WL8H78VZNK40LSBMTTIGDVXE47' where id=3; -update noar tt set b1='ISW' where id=3; -update noar ti set b1='ISW' where id=3; -update noar tt set v0='MVNBNIZW619OYAD' where id=3; -update noar ti set v0='MVNBNIZW619OYAD' where id=3; -update noar tt set b2='TJRDN7EIQ16P28RO09RPOXC1PRRI5' where id=3; -update noar ti set b2='TJRDN7EIQ16P28RO09RPOXC1PRRI5' where id=3; -update noar tt set v0='6RA35JCA0GLZKT36IKSMGZE2ZI7A' where id=4; -update noar ti set v0='6RA35JCA0GLZKT36IKSMGZE2ZI7A' where id=4; -update noar tt set b0='ISM0MO' where id=4; -update noar ti set b0='ISM0MO' where id=4; -update noar tt set v0='QHECUZHAGRLIPND8POGCCHL5G4BKLUU' where id=4; -update noar ti set v0='QHECUZHAGRLIPND8POGCCHL5G4BKLUU' where id=4; -update noar tt set b1='RC0VVC355Q9EVQSJP3IIV4' where id=4; -update noar ti set b1='RC0VVC355Q9EVQSJP3IIV4' where id=4; -update noar tt set v0='6EJAXY8U078JRBAQFUFLBU6CP' where id=4; -update noar ti set v0='6EJAXY8U078JRBAQFUFLBU6CP' where id=4; -update noar tt set b2='ZQU0NF5W3' where id=4; -update noar ti set b2='ZQU0NF5W3' where id=4; -update noar tt set v0='LYIB' where id=5; -update noar ti set v0='LYIB' where id=5; -update noar tt set b0='YTTKYT' where id=5; -update noar ti set b0='YTTKYT' where id=5; -update noar tt set v0='Y5J' where id=5; -update noar ti set v0='Y5J' where id=5; -update noar tt set b1='RN3PU8YSC8YFYM1SR4WCOV' where id=5; -update noar ti set b1='RN3PU8YSC8YFYM1SR4WCOV' where id=5; -update noar tt set v0='9CKJ' where id=5; -update noar ti set v0='9CKJ' where id=5; -update noar tt set b2='X88L7YCEJE2K388800Z7FTVC233S4D2' where id=5; -update noar ti set b2='X88L7YCEJE2K388800Z7FTVC233S4D2' where id=5; -update noar tt set v0='S9VXSIGQ0RETGCC1EG3XERMJ9' where id=6; -update noar ti set v0='S9VXSIGQ0RETGCC1EG3XERMJ9' where id=6; -update noar tt set b0='KY43ISWEA2G53V6UNCVAEU' where id=6; -update noar ti set b0='KY43ISWEA2G53V6UNCVAEU' where id=6; -update noar tt set v0='LX39MDR0EP9B7UXACN83CEMWJDFFCXL' where id=6; -update noar ti set v0='LX39MDR0EP9B7UXACN83CEMWJDFFCXL' where id=6; -update noar tt set b1='FJEK0INZ48GXEYOOMFM8UJI4E71329G' where id=6; -update noar ti set b1='FJEK0INZ48GXEYOOMFM8UJI4E71329G' where id=6; -update noar tt set v0='8KXEL4T9OHE20' where id=6; -update noar ti set v0='8KXEL4T9OHE20' where id=6; -update noar tt set b2='XI' where id=6; -update noar ti set b2='XI' where id=6; -update noar tt set v0='1YZRB46JK8MLB7P6L184L4Q63IQ7' where id=7; -update noar ti set v0='1YZRB46JK8MLB7P6L184L4Q63IQ7' where id=7; -update noar tt set b0='EI' where id=7; -update noar ti set b0='EI' where id=7; -update noar tt set v0='0UEQV48I3657S45RI1UP6PBWTJJ6IE' where id=7; -update noar ti set v0='0UEQV48I3657S45RI1UP6PBWTJJ6IE' where id=7; -update noar tt set b1='03J03' where id=7; -update noar ti set b1='03J03' where id=7; -update noar tt set v0='RX5HY5' where id=7; -update noar ti set v0='RX5HY5' where id=7; -update noar tt set b2='57XF2C0DRU6WDN' where id=7; -update noar ti set b2='57XF2C0DRU6WDN' where id=7; -update noar tt set v0='9LG602GNKZHEQ0YB9ZOX' where id=8; -update noar ti set v0='9LG602GNKZHEQ0YB9ZOX' where id=8; -update noar tt set b0='MPHI3ONGH861VF' where id=8; -update noar ti set b0='MPHI3ONGH861VF' where id=8; -update noar tt set v0='5MITBB25PO5OWYPU242HZ' where id=8; -update noar ti set v0='5MITBB25PO5OWYPU242HZ' where id=8; -update noar tt set b1='2XXTYD' where id=8; -update noar ti set b1='2XXTYD' where id=8; -update noar tt set v0='MHFEI2AT1R9KLW0T6MY5U9V3YUUTA5H' where id=8; -update noar ti set v0='MHFEI2AT1R9KLW0T6MY5U9V3YUUTA5H' where id=8; -update noar tt set b2='PAQ0CTDBBQF' where id=8; -update noar ti set b2='PAQ0CTDBBQF' where id=8; -update noar tt set v0='1TG665CKQ5XN58Q' where id=9; -update noar ti set v0='1TG665CKQ5XN58Q' where id=9; -update noar tt set b0='C4TR0D0P' where id=9; -update noar ti set b0='C4TR0D0P' where id=9; -update noar tt set v0='4CI2VEBY60XZEZ44TY16X02CH921X' where id=9; -update noar ti set v0='4CI2VEBY60XZEZ44TY16X02CH921X' where id=9; -update noar tt set b1='UH9VKXEP17E' where id=9; -update noar ti set b1='UH9VKXEP17E' where id=9; -update noar tt set v0='W4SJ5OKSKXRQMUL' where id=9; -update noar ti set v0='W4SJ5OKSKXRQMUL' where id=9; -update noar tt set b2='MNULS18' where id=9; -update noar ti set b2='MNULS18' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 tinyblob not null, - b1 longblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='2YFR7YFNVBMABVD94CZ' where id=1; -update noar ti set v0='2YFR7YFNVBMABVD94CZ' where id=1; -update noar tt set b0='D1C352ZX6A4NXMJ07K2' where id=1; -update noar ti set b0='D1C352ZX6A4NXMJ07K2' where id=1; -update noar tt set v0='EDNM56X8XKUISQI1GRR2B5BD6CGBXI' where id=1; -update noar ti set v0='EDNM56X8XKUISQI1GRR2B5BD6CGBXI' where id=1; -update noar tt set b1='UWW2IIMZ' where id=1; -update noar ti set b1='UWW2IIMZ' where id=1; -update noar tt set v0='73Z1ME44RLDFYFONGR43' where id=1; -update noar ti set v0='73Z1ME44RLDFYFONGR43' where id=1; -update noar tt set b2='GLTX7S07N4TO3KS4EOCMYCZVO09T9M4' where id=1; -update noar ti set b2='GLTX7S07N4TO3KS4EOCMYCZVO09T9M4' where id=1; -update noar tt set v0='NAHVPZBIZFE9YKW9ETMZTZWQ7C4' where id=2; -update noar ti set v0='NAHVPZBIZFE9YKW9ETMZTZWQ7C4' where id=2; -update noar tt set b0='IU0G6YHBK1J9YS' where id=2; -update noar ti set b0='IU0G6YHBK1J9YS' where id=2; -update noar tt set v0='RGSAN0IW2JZ5V44L5YDP' where id=2; -update noar ti set v0='RGSAN0IW2JZ5V44L5YDP' where id=2; -update noar tt set b1='4CB53D2WRZW' where id=2; -update noar ti set b1='4CB53D2WRZW' where id=2; -update noar tt set v0='ILKAVIJV9WAJEF2PL5KZNSY' where id=2; -update noar ti set v0='ILKAVIJV9WAJEF2PL5KZNSY' where id=2; -update noar tt set b2='U1DD6E096K9BZEWNH' where id=2; -update noar ti set b2='U1DD6E096K9BZEWNH' where id=2; -update noar tt set v0='U7LJ1KK5C13EZOMEXM89QT1P08EZ' where id=3; -update noar ti set v0='U7LJ1KK5C13EZOMEXM89QT1P08EZ' where id=3; -update noar tt set b0='VRHT' where id=3; -update noar ti set b0='VRHT' where id=3; -update noar tt set v0='TY1FS55IE' where id=3; -update noar ti set v0='TY1FS55IE' where id=3; -update noar tt set b1='FNTVRMKQSSQN3Z7QXT' where id=3; -update noar ti set b1='FNTVRMKQSSQN3Z7QXT' where id=3; -update noar tt set v0='5D7G5VB9G2FOZ3VHF' where id=3; -update noar ti set v0='5D7G5VB9G2FOZ3VHF' where id=3; -update noar tt set b2='2KHZG4FU2NSE9CWHO' where id=3; -update noar ti set b2='2KHZG4FU2NSE9CWHO' where id=3; -update noar tt set v0='TAXA8L0K08MNRW6V5' where id=4; -update noar ti set v0='TAXA8L0K08MNRW6V5' where id=4; -update noar tt set b0='U5KJM4G20UPOIRIKR0XZ' where id=4; -update noar ti set b0='U5KJM4G20UPOIRIKR0XZ' where id=4; -update noar tt set v0='FASAEZ1A8E838PIIH6YB9KUO' where id=4; -update noar ti set v0='FASAEZ1A8E838PIIH6YB9KUO' where id=4; -update noar tt set b1='Y4XAX79W20RPOTLPADOKBHGX3AZBD' where id=4; -update noar ti set b1='Y4XAX79W20RPOTLPADOKBHGX3AZBD' where id=4; -update noar tt set v0='BP4TM' where id=4; -update noar ti set v0='BP4TM' where id=4; -update noar tt set b2='L1E8EAJCDCEZJBKDE993OH59WL' where id=4; -update noar ti set b2='L1E8EAJCDCEZJBKDE993OH59WL' where id=4; -update noar tt set v0='FSP6AHI4JKVAEYLP7YWH9BGMD4CH' where id=5; -update noar ti set v0='FSP6AHI4JKVAEYLP7YWH9BGMD4CH' where id=5; -update noar tt set b0='EAUUIB1B06ENPYLTKGW9HP3676Y3RGL' where id=5; -update noar ti set b0='EAUUIB1B06ENPYLTKGW9HP3676Y3RGL' where id=5; -update noar tt set v0='SJ0N28ERRQEO7CEZ6J6CBTIY0XENL7L' where id=5; -update noar ti set v0='SJ0N28ERRQEO7CEZ6J6CBTIY0XENL7L' where id=5; -update noar tt set b1='W0XNGYC' where id=5; -update noar ti set b1='W0XNGYC' where id=5; -update noar tt set v0='U84RKJTWQB9R5NWHWTN2JI6' where id=5; -update noar ti set v0='U84RKJTWQB9R5NWHWTN2JI6' where id=5; -update noar tt set b2='7WI0' where id=5; -update noar ti set b2='7WI0' where id=5; -update noar tt set v0='2ZJVWZ' where id=6; -update noar ti set v0='2ZJVWZ' where id=6; -update noar tt set b0='S6SKLIDK76UNZVFS6ES8OZBGVMS7' where id=6; -update noar ti set b0='S6SKLIDK76UNZVFS6ES8OZBGVMS7' where id=6; -update noar tt set v0='IPJORAM60NQXJI' where id=6; -update noar ti set v0='IPJORAM60NQXJI' where id=6; -update noar tt set b1='2Y0WW1' where id=6; -update noar ti set b1='2Y0WW1' where id=6; -update noar tt set v0='AEZMWB4EQIGWO8G' where id=6; -update noar ti set v0='AEZMWB4EQIGWO8G' where id=6; -update noar tt set b2='AGDY6STMHIKIS23HOJEYRJEWWCK4' where id=6; -update noar ti set b2='AGDY6STMHIKIS23HOJEYRJEWWCK4' where id=6; -update noar tt set v0='9XVL670GR8AVWKSA3662F4LYO' where id=7; -update noar ti set v0='9XVL670GR8AVWKSA3662F4LYO' where id=7; -update noar tt set b0='T' where id=7; -update noar ti set b0='T' where id=7; -update noar tt set v0='D5YVQG5QRNHRQRTP' where id=7; -update noar ti set v0='D5YVQG5QRNHRQRTP' where id=7; -update noar tt set b1='5GULAJQEFO16E7V2JRU8756SRBNWV2P' where id=7; -update noar ti set b1='5GULAJQEFO16E7V2JRU8756SRBNWV2P' where id=7; -update noar tt set v0='CEGHCLZ3Z48YEVB' where id=7; -update noar ti set v0='CEGHCLZ3Z48YEVB' where id=7; -update noar tt set b2='HSQTJAQ0B7BD' where id=7; -update noar ti set b2='HSQTJAQ0B7BD' where id=7; -update noar tt set v0='D73LVLM7' where id=8; -update noar ti set v0='D73LVLM7' where id=8; -update noar tt set b0='OQGJZH8QN8ABAFAP0NQC13P4' where id=8; -update noar ti set b0='OQGJZH8QN8ABAFAP0NQC13P4' where id=8; -update noar tt set v0='0KTTY' where id=8; -update noar ti set v0='0KTTY' where id=8; -update noar tt set b1='980R9UERD1Q' where id=8; -update noar ti set b1='980R9UERD1Q' where id=8; -update noar tt set v0='NHBXX0WNEF207MRLM0O' where id=8; -update noar ti set v0='NHBXX0WNEF207MRLM0O' where id=8; -update noar tt set b2='G9UZG8FZKV6G6187JTKJDCGCEKOZR0WX' where id=8; -update noar ti set b2='G9UZG8FZKV6G6187JTKJDCGCEKOZR0WX' where id=8; -update noar tt set v0='IR4KTP4LZO' where id=9; -update noar ti set v0='IR4KTP4LZO' where id=9; -update noar tt set b0='9OFE64610RU69' where id=9; -update noar ti set b0='9OFE64610RU69' where id=9; -update noar tt set v0='3J5P8KQB0ROFPY' where id=9; -update noar ti set v0='3J5P8KQB0ROFPY' where id=9; -update noar tt set b1='P0I23GYR6UO6NNDUE4VG' where id=9; -update noar ti set b1='P0I23GYR6UO6NNDUE4VG' where id=9; -update noar tt set v0='LV23IQFNKKCLA3RR' where id=9; -update noar ti set v0='LV23IQFNKKCLA3RR' where id=9; -update noar tt set b2='HXJPTZ45LOYP44OK8DPQSE1B1R7' where id=9; -update noar ti set b2='HXJPTZ45LOYP44OK8DPQSE1B1R7' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 tinyblob null, - b1 longblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='WKB6QCXEDAX7BKAZ7FBYFMXJ54JIZ4' where id=1; -update noar ti set v0='WKB6QCXEDAX7BKAZ7FBYFMXJ54JIZ4' where id=1; -update noar tt set b0='DAARWNBBKGNY0JBR1CD6W' where id=1; -update noar ti set b0='DAARWNBBKGNY0JBR1CD6W' where id=1; -update noar tt set v0='4YGA2EABOXMSCKOA' where id=1; -update noar ti set v0='4YGA2EABOXMSCKOA' where id=1; -update noar tt set b1='NFFFZVKDVLR' where id=1; -update noar ti set b1='NFFFZVKDVLR' where id=1; -update noar tt set v0='9I6KRK9IAX12CG7I2M7QITVNNNBXIG' where id=1; -update noar ti set v0='9I6KRK9IAX12CG7I2M7QITVNNNBXIG' where id=1; -update noar tt set b2='ETBQGKPB0A9Q2YULI8BHZ' where id=1; -update noar ti set b2='ETBQGKPB0A9Q2YULI8BHZ' where id=1; -update noar tt set v0='7S5KZ52Z2NNIIXV5XZBS' where id=2; -update noar ti set v0='7S5KZ52Z2NNIIXV5XZBS' where id=2; -update noar tt set b0='GDFU' where id=2; -update noar ti set b0='GDFU' where id=2; -update noar tt set v0='IM5YJ456Q7A0OZRTTEK7' where id=2; -update noar ti set v0='IM5YJ456Q7A0OZRTTEK7' where id=2; -update noar tt set b1='4Q4M2ZU4ODH33NYFX1MGDY1O967OE' where id=2; -update noar ti set b1='4Q4M2ZU4ODH33NYFX1MGDY1O967OE' where id=2; -update noar tt set v0='5L' where id=2; -update noar ti set v0='5L' where id=2; -update noar tt set b2='Q8XV5WET3W2ARGFM' where id=2; -update noar ti set b2='Q8XV5WET3W2ARGFM' where id=2; -update noar tt set v0='RRE0FA0' where id=3; -update noar ti set v0='RRE0FA0' where id=3; -update noar tt set b0='77LG4G1XJ1GN58QXHZEK7WF657GLL' where id=3; -update noar ti set b0='77LG4G1XJ1GN58QXHZEK7WF657GLL' where id=3; -update noar tt set v0='JO' where id=3; -update noar ti set v0='JO' where id=3; -update noar tt set b1='O230MX7LSTX8F3MY4R3N1' where id=3; -update noar ti set b1='O230MX7LSTX8F3MY4R3N1' where id=3; -update noar tt set v0='J3JEPDQ028UY4MT9MM' where id=3; -update noar ti set v0='J3JEPDQ028UY4MT9MM' where id=3; -update noar tt set b2='LBKFFTPKEVT760XOGV2' where id=3; -update noar ti set b2='LBKFFTPKEVT760XOGV2' where id=3; -update noar tt set v0='FD5P55NA3IIYPAR9WNOKGN21K' where id=4; -update noar ti set v0='FD5P55NA3IIYPAR9WNOKGN21K' where id=4; -update noar tt set b0='FM1CGVMA25LKCJPW06TM3S11' where id=4; -update noar ti set b0='FM1CGVMA25LKCJPW06TM3S11' where id=4; -update noar tt set v0='N' where id=4; -update noar ti set v0='N' where id=4; -update noar tt set b1='8FGHZT4SDT' where id=4; -update noar ti set b1='8FGHZT4SDT' where id=4; -update noar tt set v0='JGM5NWCYN0OFWKR417AJHODI75D' where id=4; -update noar ti set v0='JGM5NWCYN0OFWKR417AJHODI75D' where id=4; -update noar tt set b2='T7CWNK' where id=4; -update noar ti set b2='T7CWNK' where id=4; -update noar tt set v0='57W4FXI' where id=5; -update noar ti set v0='57W4FXI' where id=5; -update noar tt set b0='0MVW2VNB2FJHNONA' where id=5; -update noar ti set b0='0MVW2VNB2FJHNONA' where id=5; -update noar tt set v0='AHZWOCT' where id=5; -update noar ti set v0='AHZWOCT' where id=5; -update noar tt set b1='1WPFSUBUWOSGNWMSTGTGZ5' where id=5; -update noar ti set b1='1WPFSUBUWOSGNWMSTGTGZ5' where id=5; -update noar tt set v0='V4C6EK' where id=5; -update noar ti set v0='V4C6EK' where id=5; -update noar tt set b2='WFLN792PV0T7SZH1D' where id=5; -update noar ti set b2='WFLN792PV0T7SZH1D' where id=5; -update noar tt set v0='KEE87BO2779WDXH4DFKJJJQ2Z95T' where id=6; -update noar ti set v0='KEE87BO2779WDXH4DFKJJJQ2Z95T' where id=6; -update noar tt set b0='X' where id=6; -update noar ti set b0='X' where id=6; -update noar tt set v0='U7PLXDX4B0EPOGEHSI' where id=6; -update noar ti set v0='U7PLXDX4B0EPOGEHSI' where id=6; -update noar tt set b1='51NY1VUXRQGPYO' where id=6; -update noar ti set b1='51NY1VUXRQGPYO' where id=6; -update noar tt set v0='3GPYI35AKG3018X8BYVL5' where id=6; -update noar ti set v0='3GPYI35AKG3018X8BYVL5' where id=6; -update noar tt set b2='PHVNHICZ1MY39XI0JQV0E' where id=6; -update noar ti set b2='PHVNHICZ1MY39XI0JQV0E' where id=6; -update noar tt set v0='BAPY2FCG8BJ3ZR3DMI1MB' where id=7; -update noar ti set v0='BAPY2FCG8BJ3ZR3DMI1MB' where id=7; -update noar tt set b0='IOJH0GMSX9H2HZT' where id=7; -update noar ti set b0='IOJH0GMSX9H2HZT' where id=7; -update noar tt set v0='LO1908ZMFVVWW1OX3ZJZGJ0TS2J2QH' where id=7; -update noar ti set v0='LO1908ZMFVVWW1OX3ZJZGJ0TS2J2QH' where id=7; -update noar tt set b1='S7XAKSSGSXNIMPWBN7ULY95ETF3U2' where id=7; -update noar ti set b1='S7XAKSSGSXNIMPWBN7ULY95ETF3U2' where id=7; -update noar tt set v0='URKDP2MZNHHA3BLJM' where id=7; -update noar ti set v0='URKDP2MZNHHA3BLJM' where id=7; -update noar tt set b2='OUPA298IPRTHVWA5WUK0IS' where id=7; -update noar ti set b2='OUPA298IPRTHVWA5WUK0IS' where id=7; -update noar tt set v0='I9N2HBC11AYL24SX5M1NOPFD3M' where id=8; -update noar ti set v0='I9N2HBC11AYL24SX5M1NOPFD3M' where id=8; -update noar tt set b0='UUCWYUY0NR1DM8ZJ2WQ5' where id=8; -update noar ti set b0='UUCWYUY0NR1DM8ZJ2WQ5' where id=8; -update noar tt set v0='N7XFLJ' where id=8; -update noar ti set v0='N7XFLJ' where id=8; -update noar tt set b1='3VQY8R26AZ' where id=8; -update noar ti set b1='3VQY8R26AZ' where id=8; -update noar tt set v0='L3GG39QTMJAK3GMA46ZDPU' where id=8; -update noar ti set v0='L3GG39QTMJAK3GMA46ZDPU' where id=8; -update noar tt set b2='NMMCGNOWUTG19E9L266G4YPLKMY5A' where id=8; -update noar ti set b2='NMMCGNOWUTG19E9L266G4YPLKMY5A' where id=8; -update noar tt set v0='C2FQ96XNGUYC84D7HA9' where id=9; -update noar ti set v0='C2FQ96XNGUYC84D7HA9' where id=9; -update noar tt set b0='6U2M544B1UHZ' where id=9; -update noar ti set b0='6U2M544B1UHZ' where id=9; -update noar tt set v0='8JWSNHHEVZJS9PWV8VOW2GYGKRJ' where id=9; -update noar ti set v0='8JWSNHHEVZJS9PWV8VOW2GYGKRJ' where id=9; -update noar tt set b1='KHT6ABJV82' where id=9; -update noar ti set b1='KHT6ABJV82' where id=9; -update noar tt set v0='IDSLWB500SW2' where id=9; -update noar ti set v0='IDSLWB500SW2' where id=9; -update noar tt set b2='V8N7Q3W2' where id=9; -update noar ti set b2='V8N7Q3W2' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 tinyblob null, - b1 longblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='ZZQW0' where id=1; -update noar ti set v0='ZZQW0' where id=1; -update noar tt set b0='7W4HXNM2XQK5AH7NK1NP4OTXY85O4' where id=1; -update noar ti set b0='7W4HXNM2XQK5AH7NK1NP4OTXY85O4' where id=1; -update noar tt set v0='B51PLR39FSU741IED7JECCK7I3AFW6X' where id=1; -update noar ti set v0='B51PLR39FSU741IED7JECCK7I3AFW6X' where id=1; -update noar tt set b1='RQXOPJA6BWUOFKRY9VAZ' where id=1; -update noar ti set b1='RQXOPJA6BWUOFKRY9VAZ' where id=1; -update noar tt set v0='47O53I7DQFNDKOE9C91FTL03TES83OY' where id=1; -update noar ti set v0='47O53I7DQFNDKOE9C91FTL03TES83OY' where id=1; -update noar tt set b2='61GNDMNKWG59R5' where id=1; -update noar ti set b2='61GNDMNKWG59R5' where id=1; -update noar tt set v0='XM' where id=2; -update noar ti set v0='XM' where id=2; -update noar tt set b0='8X1WG83G2J' where id=2; -update noar ti set b0='8X1WG83G2J' where id=2; -update noar tt set v0='QAT1XOC' where id=2; -update noar ti set v0='QAT1XOC' where id=2; -update noar tt set b1='E7RZJTH1OUESGS9C7RV' where id=2; -update noar ti set b1='E7RZJTH1OUESGS9C7RV' where id=2; -update noar tt set v0='M8U02EG0' where id=2; -update noar ti set v0='M8U02EG0' where id=2; -update noar tt set b2='34O31HYEZYA6OJ3S9MLMUX' where id=2; -update noar ti set b2='34O31HYEZYA6OJ3S9MLMUX' where id=2; -update noar tt set v0='NOOIGJ1O42AEW7W5' where id=3; -update noar ti set v0='NOOIGJ1O42AEW7W5' where id=3; -update noar tt set b0='CETXM13QUCLHFNKMLWBWFDR' where id=3; -update noar ti set b0='CETXM13QUCLHFNKMLWBWFDR' where id=3; -update noar tt set v0='33GYEI3CBGMM4U5K' where id=3; -update noar ti set v0='33GYEI3CBGMM4U5K' where id=3; -update noar tt set b1='1HCE9MO3N' where id=3; -update noar ti set b1='1HCE9MO3N' where id=3; -update noar tt set v0='V' where id=3; -update noar ti set v0='V' where id=3; -update noar tt set b2='R9YTXMJLWQYR4C3S' where id=3; -update noar ti set b2='R9YTXMJLWQYR4C3S' where id=3; -update noar tt set v0='E81P6G145R87UTORECCZD66' where id=4; -update noar ti set v0='E81P6G145R87UTORECCZD66' where id=4; -update noar tt set b0='UHJDD49RGA3O5' where id=4; -update noar ti set b0='UHJDD49RGA3O5' where id=4; -update noar tt set v0='MJNR' where id=4; -update noar ti set v0='MJNR' where id=4; -update noar tt set b1='U5ZGGNWWXDGNQ2L3KVBUS' where id=4; -update noar ti set b1='U5ZGGNWWXDGNQ2L3KVBUS' where id=4; -update noar tt set v0='9JBZ2V72NV487MCABXNJFAGO88AAOWKZ' where id=4; -update noar ti set v0='9JBZ2V72NV487MCABXNJFAGO88AAOWKZ' where id=4; -update noar tt set b2='988U81QQL4IQ0ADZC7R0X3G0P' where id=4; -update noar ti set b2='988U81QQL4IQ0ADZC7R0X3G0P' where id=4; -update noar tt set v0='P5NDB15L65' where id=5; -update noar ti set v0='P5NDB15L65' where id=5; -update noar tt set b0='6DE6IE9M5I8BMNWEEHD94LFLZTYNYB' where id=5; -update noar ti set b0='6DE6IE9M5I8BMNWEEHD94LFLZTYNYB' where id=5; -update noar tt set v0='JJ78W2LVS1PNB3E7QBQFZH9MF877GV' where id=5; -update noar ti set v0='JJ78W2LVS1PNB3E7QBQFZH9MF877GV' where id=5; -update noar tt set b1='YRJPD7M76CU1G41PTS7ACSW2R30MZK1' where id=5; -update noar ti set b1='YRJPD7M76CU1G41PTS7ACSW2R30MZK1' where id=5; -update noar tt set v0='NLFLSAHM3Z7ST1BUEDUJF9' where id=5; -update noar ti set v0='NLFLSAHM3Z7ST1BUEDUJF9' where id=5; -update noar tt set b2='1DCP49QBNMLDZ507ECDLB7' where id=5; -update noar ti set b2='1DCP49QBNMLDZ507ECDLB7' where id=5; -update noar tt set v0='5OZBK90SEOWDD1E8WMSFCXLM' where id=6; -update noar ti set v0='5OZBK90SEOWDD1E8WMSFCXLM' where id=6; -update noar tt set b0='NUW1486JETPZFX50QPY6MXMMX' where id=6; -update noar ti set b0='NUW1486JETPZFX50QPY6MXMMX' where id=6; -update noar tt set v0='WDW7UDYLT6' where id=6; -update noar ti set v0='WDW7UDYLT6' where id=6; -update noar tt set b1='16205VJ3A0H7AZHA2' where id=6; -update noar ti set b1='16205VJ3A0H7AZHA2' where id=6; -update noar tt set v0='8QDJ' where id=6; -update noar ti set v0='8QDJ' where id=6; -update noar tt set b2='81575WF9W996JIP69N8E7R9CK2GA5PZ' where id=6; -update noar ti set b2='81575WF9W996JIP69N8E7R9CK2GA5PZ' where id=6; -update noar tt set v0='6GX3TE227BR0JBHVOZL5B5XUE8C7HMX' where id=7; -update noar ti set v0='6GX3TE227BR0JBHVOZL5B5XUE8C7HMX' where id=7; -update noar tt set b0='PAZR4B5S0' where id=7; -update noar ti set b0='PAZR4B5S0' where id=7; -update noar tt set v0='WI7OK8UVVDDBOBP5AYOMTKMS' where id=7; -update noar ti set v0='WI7OK8UVVDDBOBP5AYOMTKMS' where id=7; -update noar tt set b1='4' where id=7; -update noar ti set b1='4' where id=7; -update noar tt set v0='799XGAZ' where id=7; -update noar ti set v0='799XGAZ' where id=7; -update noar tt set b2='FZNOA' where id=7; -update noar ti set b2='FZNOA' where id=7; -update noar tt set v0='3FYM7UQLA91GXXIPHLXNPC9DMCCCM' where id=8; -update noar ti set v0='3FYM7UQLA91GXXIPHLXNPC9DMCCCM' where id=8; -update noar tt set b0='VPA5DHCSJLSJXIQDRSNSZMUHAXDW0PV' where id=8; -update noar ti set b0='VPA5DHCSJLSJXIQDRSNSZMUHAXDW0PV' where id=8; -update noar tt set v0='388H8ZC0KXRDBSG0JM58S9BJ29CIC2' where id=8; -update noar ti set v0='388H8ZC0KXRDBSG0JM58S9BJ29CIC2' where id=8; -update noar tt set b1='TIS1BLSO4F5HR1EG6ILDA6' where id=8; -update noar ti set b1='TIS1BLSO4F5HR1EG6ILDA6' where id=8; -update noar tt set v0='WDCJXV7J' where id=8; -update noar ti set v0='WDCJXV7J' where id=8; -update noar tt set b2='1VMSSOHVNHSEC0UC' where id=8; -update noar ti set b2='1VMSSOHVNHSEC0UC' where id=8; -update noar tt set v0='HQW9COPGPDMPTEEYGCVDUGJZAEPP' where id=9; -update noar ti set v0='HQW9COPGPDMPTEEYGCVDUGJZAEPP' where id=9; -update noar tt set b0='OSV32IDKYFMCG9PUGAT' where id=9; -update noar ti set b0='OSV32IDKYFMCG9PUGAT' where id=9; -update noar tt set v0='RNTGZDG3C5RFPE3EJS5N' where id=9; -update noar ti set v0='RNTGZDG3C5RFPE3EJS5N' where id=9; -update noar tt set b1='KKB7D0T3X4K09AE274GUS4PGB7OG6' where id=9; -update noar ti set b1='KKB7D0T3X4K09AE274GUS4PGB7OG6' where id=9; -update noar tt set v0='EGJJMA4IGGHY75QJAT211' where id=9; -update noar ti set v0='EGJJMA4IGGHY75QJAT211' where id=9; -update noar tt set b2='X9MA2TTQ19F50H' where id=9; -update noar ti set b2='X9MA2TTQ19F50H' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 tinyblob not null, - b1 longblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='ZBU2S38J3Q' where id=1; -update noar ti set v0='ZBU2S38J3Q' where id=1; -update noar tt set b0='Q2APNIMUSV2BHWZBZN6D8CDV' where id=1; -update noar ti set b0='Q2APNIMUSV2BHWZBZN6D8CDV' where id=1; -update noar tt set v0='DFYL6ZEYN7KA7LUONEJDAYEI0ZZMDWO' where id=1; -update noar ti set v0='DFYL6ZEYN7KA7LUONEJDAYEI0ZZMDWO' where id=1; -update noar tt set b1='M4OMQCR4GF2P60O895UZB' where id=1; -update noar ti set b1='M4OMQCR4GF2P60O895UZB' where id=1; -update noar tt set v0='CDDEHV' where id=1; -update noar ti set v0='CDDEHV' where id=1; -update noar tt set b2='M' where id=1; -update noar ti set b2='M' where id=1; -update noar tt set v0='KJ1S' where id=2; -update noar ti set v0='KJ1S' where id=2; -update noar tt set b0='TCZYCUZHHXKZ9G4JQDE' where id=2; -update noar ti set b0='TCZYCUZHHXKZ9G4JQDE' where id=2; -update noar tt set v0='7A58D22DZGY88D841RTD37OTLTH2R' where id=2; -update noar ti set v0='7A58D22DZGY88D841RTD37OTLTH2R' where id=2; -update noar tt set b1='9JLXP35NVDZ8VVI3H4QHMW' where id=2; -update noar ti set b1='9JLXP35NVDZ8VVI3H4QHMW' where id=2; -update noar tt set v0='AWMYMUIE7R7P59MM7XLCZ6' where id=2; -update noar ti set v0='AWMYMUIE7R7P59MM7XLCZ6' where id=2; -update noar tt set b2='P0U3H2NB0' where id=2; -update noar ti set b2='P0U3H2NB0' where id=2; -update noar tt set v0='WCOGGI5M' where id=3; -update noar ti set v0='WCOGGI5M' where id=3; -update noar tt set b0='TJRGZCN2SK2MMZON' where id=3; -update noar ti set b0='TJRGZCN2SK2MMZON' where id=3; -update noar tt set v0='7Q9' where id=3; -update noar ti set v0='7Q9' where id=3; -update noar tt set b1='IUC1ZAA0ZA6GNXWBBLHSKSBCP0SZ' where id=3; -update noar ti set b1='IUC1ZAA0ZA6GNXWBBLHSKSBCP0SZ' where id=3; -update noar tt set v0='HY1WKSR1H41EK28ZT' where id=3; -update noar ti set v0='HY1WKSR1H41EK28ZT' where id=3; -update noar tt set b2='630P3T988T7BBXM316RYT204' where id=3; -update noar ti set b2='630P3T988T7BBXM316RYT204' where id=3; -update noar tt set v0='6YEHRUFDST3B494335LRIMI9B519GW' where id=4; -update noar ti set v0='6YEHRUFDST3B494335LRIMI9B519GW' where id=4; -update noar tt set b0='BFKSIKTHXNVWFK7BU7CNB' where id=4; -update noar ti set b0='BFKSIKTHXNVWFK7BU7CNB' where id=4; -update noar tt set v0='0UEFCV' where id=4; -update noar ti set v0='0UEFCV' where id=4; -update noar tt set b1='30QD8KKVKXK8RXV597RRSTDKWP' where id=4; -update noar ti set b1='30QD8KKVKXK8RXV597RRSTDKWP' where id=4; -update noar tt set v0='1B8XNQ68X3REHRKV88G' where id=4; -update noar ti set v0='1B8XNQ68X3REHRKV88G' where id=4; -update noar tt set b2='7FELDTKWBV0KDTUR9OVC386L84EOV' where id=4; -update noar ti set b2='7FELDTKWBV0KDTUR9OVC386L84EOV' where id=4; -update noar tt set v0='BTNXKAWFSF9OGPRA5O1W2V32' where id=5; -update noar ti set v0='BTNXKAWFSF9OGPRA5O1W2V32' where id=5; -update noar tt set b0='29DZCELJRA522PU4OBJN6LEAMX5' where id=5; -update noar ti set b0='29DZCELJRA522PU4OBJN6LEAMX5' where id=5; -update noar tt set v0='422P9V03QR5Z3EVXW3KS92UE4' where id=5; -update noar ti set v0='422P9V03QR5Z3EVXW3KS92UE4' where id=5; -update noar tt set b1='MWWS1' where id=5; -update noar ti set b1='MWWS1' where id=5; -update noar tt set v0='DH9ZSREW1GJE0D24N5ERMRN1HZ' where id=5; -update noar ti set v0='DH9ZSREW1GJE0D24N5ERMRN1HZ' where id=5; -update noar tt set b2='7Z5BKGMF8AN1DQVG14A2ZTHW493E3K3C' where id=5; -update noar ti set b2='7Z5BKGMF8AN1DQVG14A2ZTHW493E3K3C' where id=5; -update noar tt set v0='JLB' where id=6; -update noar ti set v0='JLB' where id=6; -update noar tt set b0='AK4LL4Q12KMBV8LZYJ72Y4N0K' where id=6; -update noar ti set b0='AK4LL4Q12KMBV8LZYJ72Y4N0K' where id=6; -update noar tt set v0='YTXSMOJRCPR9W07XF1YMBPNSA9NBPZ' where id=6; -update noar ti set v0='YTXSMOJRCPR9W07XF1YMBPNSA9NBPZ' where id=6; -update noar tt set b1='BSQAMBT0ADXTQ5JUG0D8OXMICJ7C' where id=6; -update noar ti set b1='BSQAMBT0ADXTQ5JUG0D8OXMICJ7C' where id=6; -update noar tt set v0='JKCE76V6TKL2QSVB5' where id=6; -update noar ti set v0='JKCE76V6TKL2QSVB5' where id=6; -update noar tt set b2='XT69OFIKI1K3UVKOFAC2D0FHQ2DK6D2F' where id=6; -update noar ti set b2='XT69OFIKI1K3UVKOFAC2D0FHQ2DK6D2F' where id=6; -update noar tt set v0='HMUV51G' where id=7; -update noar ti set v0='HMUV51G' where id=7; -update noar tt set b0='47L401XYM4' where id=7; -update noar ti set b0='47L401XYM4' where id=7; -update noar tt set v0='VA' where id=7; -update noar ti set v0='VA' where id=7; -update noar tt set b1='3BJCHX32M543VN4J47RT5SB67ZOH' where id=7; -update noar ti set b1='3BJCHX32M543VN4J47RT5SB67ZOH' where id=7; -update noar tt set v0='OLDPGST7KC751HT4WHPPP676KJRWM' where id=7; -update noar ti set v0='OLDPGST7KC751HT4WHPPP676KJRWM' where id=7; -update noar tt set b2='1V1P8CLQYR66I6VDS5W1Z' where id=7; -update noar ti set b2='1V1P8CLQYR66I6VDS5W1Z' where id=7; -update noar tt set v0='5SHE97RIA' where id=8; -update noar ti set v0='5SHE97RIA' where id=8; -update noar tt set b0='MBU3B80UNT8R8VX' where id=8; -update noar ti set b0='MBU3B80UNT8R8VX' where id=8; -update noar tt set v0='6OX7NAC7UZZ' where id=8; -update noar ti set v0='6OX7NAC7UZZ' where id=8; -update noar tt set b1='UTIXFV5NU1SBAL7ETJC5XCCLCQ0OYJ' where id=8; -update noar ti set b1='UTIXFV5NU1SBAL7ETJC5XCCLCQ0OYJ' where id=8; -update noar tt set v0='Y' where id=8; -update noar ti set v0='Y' where id=8; -update noar tt set b2='LQDZFYUJMFOZR1DIJPGP945ZX' where id=8; -update noar ti set b2='LQDZFYUJMFOZR1DIJPGP945ZX' where id=8; -update noar tt set v0='2C408TQ76RR813WZHA3QAU' where id=9; -update noar ti set v0='2C408TQ76RR813WZHA3QAU' where id=9; -update noar tt set b0='YZCMPXZSCQ8219T5UOIW7FRE' where id=9; -update noar ti set b0='YZCMPXZSCQ8219T5UOIW7FRE' where id=9; -update noar tt set v0='L5RUTZ4B7B58J0UTKX1CK933AIYQ0DAI' where id=9; -update noar ti set v0='L5RUTZ4B7B58J0UTKX1CK933AIYQ0DAI' where id=9; -update noar tt set b1='L' where id=9; -update noar ti set b1='L' where id=9; -update noar tt set v0='E6V1T1DC' where id=9; -update noar ti set v0='E6V1T1DC' where id=9; -update noar tt set b2='FWL0BWE9J4KN' where id=9; -update noar ti set b2='FWL0BWE9J4KN' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 tinyblob not null, - b1 longblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='I49JXK16Y1VC' where id=1; -update noar ti set v0='I49JXK16Y1VC' where id=1; -update noar tt set b0='K48M' where id=1; -update noar ti set b0='K48M' where id=1; -update noar tt set v0='57JXV2GGDZTCZE7NEMX2' where id=1; -update noar ti set v0='57JXV2GGDZTCZE7NEMX2' where id=1; -update noar tt set b1='6L20A510ET1Y' where id=1; -update noar ti set b1='6L20A510ET1Y' where id=1; -update noar tt set v0='JGPA8GW7T' where id=1; -update noar ti set v0='JGPA8GW7T' where id=1; -update noar tt set b2='7B3GTBR8XCF8VCX0V3ROV0S853VWVQ9N' where id=1; -update noar ti set b2='7B3GTBR8XCF8VCX0V3ROV0S853VWVQ9N' where id=1; -update noar tt set v0='P5R0MD29EBY5KC5IV9PX1C' where id=2; -update noar ti set v0='P5R0MD29EBY5KC5IV9PX1C' where id=2; -update noar tt set b0='7MR1X5VEKVWWOFB84PM8VYQ' where id=2; -update noar ti set b0='7MR1X5VEKVWWOFB84PM8VYQ' where id=2; -update noar tt set v0='7' where id=2; -update noar ti set v0='7' where id=2; -update noar tt set b1='OOKDU' where id=2; -update noar ti set b1='OOKDU' where id=2; -update noar tt set v0='GLKBB4F' where id=2; -update noar ti set v0='GLKBB4F' where id=2; -update noar tt set b2='2DR80FS5SJHQLPMQ866PTWW' where id=2; -update noar ti set b2='2DR80FS5SJHQLPMQ866PTWW' where id=2; -update noar tt set v0='37JGHREY5Q3CXAYWKY5V' where id=3; -update noar ti set v0='37JGHREY5Q3CXAYWKY5V' where id=3; -update noar tt set b0='T5YYF79I6TPQ4B8DMX4WD1WAO9U5G' where id=3; -update noar ti set b0='T5YYF79I6TPQ4B8DMX4WD1WAO9U5G' where id=3; -update noar tt set v0='LAA6CDJQ5HVHGA2TRZ' where id=3; -update noar ti set v0='LAA6CDJQ5HVHGA2TRZ' where id=3; -update noar tt set b1='9QUOEBUNMJ0A4IVL8KYZ' where id=3; -update noar ti set b1='9QUOEBUNMJ0A4IVL8KYZ' where id=3; -update noar tt set v0='5VYYBY2VF96V6' where id=3; -update noar ti set v0='5VYYBY2VF96V6' where id=3; -update noar tt set b2='2JVMSDI15FSGS4HPFO7R8HILXVE' where id=3; -update noar ti set b2='2JVMSDI15FSGS4HPFO7R8HILXVE' where id=3; -update noar tt set v0='JV8KJ0D3PLWHUS7TDGC9V' where id=4; -update noar ti set v0='JV8KJ0D3PLWHUS7TDGC9V' where id=4; -update noar tt set b0='DB0ZTNMP24JG4PF' where id=4; -update noar ti set b0='DB0ZTNMP24JG4PF' where id=4; -update noar tt set v0='SJ46XX5' where id=4; -update noar ti set v0='SJ46XX5' where id=4; -update noar tt set b1='WZ8U' where id=4; -update noar ti set b1='WZ8U' where id=4; -update noar tt set v0='STCYR0T188C0' where id=4; -update noar ti set v0='STCYR0T188C0' where id=4; -update noar tt set b2='6LXB2BJLKDD' where id=4; -update noar ti set b2='6LXB2BJLKDD' where id=4; -update noar tt set v0='51E1IX2FFCJ9H9YAVTN' where id=5; -update noar ti set v0='51E1IX2FFCJ9H9YAVTN' where id=5; -update noar tt set b0='B7P6UM' where id=5; -update noar ti set b0='B7P6UM' where id=5; -update noar tt set v0='4AZD5NOM1' where id=5; -update noar ti set v0='4AZD5NOM1' where id=5; -update noar tt set b1='UPRKWJ3VB84ZRC0CBVLKRF8SCWH' where id=5; -update noar ti set b1='UPRKWJ3VB84ZRC0CBVLKRF8SCWH' where id=5; -update noar tt set v0='NOCBN1A79A2II3B' where id=5; -update noar ti set v0='NOCBN1A79A2II3B' where id=5; -update noar tt set b2='ZS' where id=5; -update noar ti set b2='ZS' where id=5; -update noar tt set v0='CB7IHOBJ4ATUTLQUWN' where id=6; -update noar ti set v0='CB7IHOBJ4ATUTLQUWN' where id=6; -update noar tt set b0='W9IUBJ4NU8YH3QO' where id=6; -update noar ti set b0='W9IUBJ4NU8YH3QO' where id=6; -update noar tt set v0='V7BIZO3MS1U' where id=6; -update noar ti set v0='V7BIZO3MS1U' where id=6; -update noar tt set b1='G4RIHF1818QC6TEQT3AA4' where id=6; -update noar ti set b1='G4RIHF1818QC6TEQT3AA4' where id=6; -update noar tt set v0='E510KMDIJ08JXHXBMJJUMOXF7VS' where id=6; -update noar ti set v0='E510KMDIJ08JXHXBMJJUMOXF7VS' where id=6; -update noar tt set b2='OVJN' where id=6; -update noar ti set b2='OVJN' where id=6; -update noar tt set v0='R25SBGXEV309CW1RBE6890P63KTBU3' where id=7; -update noar ti set v0='R25SBGXEV309CW1RBE6890P63KTBU3' where id=7; -update noar tt set b0='5998KF3KPFL08' where id=7; -update noar ti set b0='5998KF3KPFL08' where id=7; -update noar tt set v0='QHOHI8JYPQI' where id=7; -update noar ti set v0='QHOHI8JYPQI' where id=7; -update noar tt set b1='BUBHPPJXWY2RZHV606VMG5' where id=7; -update noar ti set b1='BUBHPPJXWY2RZHV606VMG5' where id=7; -update noar tt set v0='0FU2249A' where id=7; -update noar ti set v0='0FU2249A' where id=7; -update noar tt set b2='53SK5F83MS5QNW0DM' where id=7; -update noar ti set b2='53SK5F83MS5QNW0DM' where id=7; -update noar tt set v0='9466KNN1G8EVUQ4368' where id=8; -update noar ti set v0='9466KNN1G8EVUQ4368' where id=8; -update noar tt set b0='HI5PC' where id=8; -update noar ti set b0='HI5PC' where id=8; -update noar tt set v0='MOWF74G2NNABGLI2NYMJ57OO2' where id=8; -update noar ti set v0='MOWF74G2NNABGLI2NYMJ57OO2' where id=8; -update noar tt set b1='46WV457IVX5SEAD9' where id=8; -update noar ti set b1='46WV457IVX5SEAD9' where id=8; -update noar tt set v0='DKW6MKAU5PBEWF043CC8' where id=8; -update noar ti set v0='DKW6MKAU5PBEWF043CC8' where id=8; -update noar tt set b2='RVQQHZG' where id=8; -update noar ti set b2='RVQQHZG' where id=8; -update noar tt set v0='1V1IUMS1WRTQRDUIEHF' where id=9; -update noar ti set v0='1V1IUMS1WRTQRDUIEHF' where id=9; -update noar tt set b0='94PL9F5UNSZBRZX3JI5ACF38' where id=9; -update noar ti set b0='94PL9F5UNSZBRZX3JI5ACF38' where id=9; -update noar tt set v0='0OV' where id=9; -update noar ti set v0='0OV' where id=9; -update noar tt set b1='E' where id=9; -update noar ti set b1='E' where id=9; -update noar tt set v0='BHAFL3' where id=9; -update noar ti set v0='BHAFL3' where id=9; -update noar tt set b2='S5VBF9H' where id=9; -update noar ti set b2='S5VBF9H' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 blob null, - b1 tinyblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='AIP5C6GK1EXDR4VX' where id=1; -update noar ti set v0='AIP5C6GK1EXDR4VX' where id=1; -update noar tt set b0='IVBDVXHA0FE3JDGN2GBH6TEBJ' where id=1; -update noar ti set b0='IVBDVXHA0FE3JDGN2GBH6TEBJ' where id=1; -update noar tt set v0='X3A4XMHNLU' where id=1; -update noar ti set v0='X3A4XMHNLU' where id=1; -update noar tt set b1='8394I5M7P' where id=1; -update noar ti set b1='8394I5M7P' where id=1; -update noar tt set v0='BXNJZCUO5CBF' where id=1; -update noar ti set v0='BXNJZCUO5CBF' where id=1; -update noar tt set b2='X6Y3GJ8' where id=1; -update noar ti set b2='X6Y3GJ8' where id=1; -update noar tt set v0='ROG6OVJ3YA6A1TCOUYW4ZA0R' where id=2; -update noar ti set v0='ROG6OVJ3YA6A1TCOUYW4ZA0R' where id=2; -update noar tt set b0='Z1QVQX0KZ22YD6XVBDX0B8CQWYMA0' where id=2; -update noar ti set b0='Z1QVQX0KZ22YD6XVBDX0B8CQWYMA0' where id=2; -update noar tt set v0='NRT4JCBDDX7QHBH9YR8MRA0757D7' where id=2; -update noar ti set v0='NRT4JCBDDX7QHBH9YR8MRA0757D7' where id=2; -update noar tt set b1='3Z7BEXVVKVPM88DP8JZMAS' where id=2; -update noar ti set b1='3Z7BEXVVKVPM88DP8JZMAS' where id=2; -update noar tt set v0='9VJIEYZC9MDJDDPHKDGO2XS' where id=2; -update noar ti set v0='9VJIEYZC9MDJDDPHKDGO2XS' where id=2; -update noar tt set b2='RLATNT3J5YR4XU8' where id=2; -update noar ti set b2='RLATNT3J5YR4XU8' where id=2; -update noar tt set v0='7Y42XF9DUYYE' where id=3; -update noar ti set v0='7Y42XF9DUYYE' where id=3; -update noar tt set b0='SLULLESINTOCHUT518R3MH18E3QI' where id=3; -update noar ti set b0='SLULLESINTOCHUT518R3MH18E3QI' where id=3; -update noar tt set v0='QCRZX' where id=3; -update noar ti set v0='QCRZX' where id=3; -update noar tt set b1='VZW65' where id=3; -update noar ti set b1='VZW65' where id=3; -update noar tt set v0='MWYZIBW7Q0UL6EXUIDF369' where id=3; -update noar ti set v0='MWYZIBW7Q0UL6EXUIDF369' where id=3; -update noar tt set b2='NVQOPFMD4TJI3V6KYGW21IHOT' where id=3; -update noar ti set b2='NVQOPFMD4TJI3V6KYGW21IHOT' where id=3; -update noar tt set v0='S4L6DON8MM836D8XH0SPMMCHH59K' where id=4; -update noar ti set v0='S4L6DON8MM836D8XH0SPMMCHH59K' where id=4; -update noar tt set b0='THSF98AEOX8AOB9C9H23' where id=4; -update noar ti set b0='THSF98AEOX8AOB9C9H23' where id=4; -update noar tt set v0='R3WT8E31WJ3QVV66E7' where id=4; -update noar ti set v0='R3WT8E31WJ3QVV66E7' where id=4; -update noar tt set b1='DPQVDHE' where id=4; -update noar ti set b1='DPQVDHE' where id=4; -update noar tt set v0='3OMDLXE28A6JLJ1TPROBW8KX5CL9VXO' where id=4; -update noar ti set v0='3OMDLXE28A6JLJ1TPROBW8KX5CL9VXO' where id=4; -update noar tt set b2='D967J0OU' where id=4; -update noar ti set b2='D967J0OU' where id=4; -update noar tt set v0='WLGCRVF8VZEIZYDX0RN9XYUCX5R5' where id=5; -update noar ti set v0='WLGCRVF8VZEIZYDX0RN9XYUCX5R5' where id=5; -update noar tt set b0='7RM6M6RW' where id=5; -update noar ti set b0='7RM6M6RW' where id=5; -update noar tt set v0='W4LIVDNV' where id=5; -update noar ti set v0='W4LIVDNV' where id=5; -update noar tt set b1='O65D4Z' where id=5; -update noar ti set b1='O65D4Z' where id=5; -update noar tt set v0='VNNEBEGAL1PJ238' where id=5; -update noar ti set v0='VNNEBEGAL1PJ238' where id=5; -update noar tt set b2='E4FMJDQC1JF' where id=5; -update noar ti set b2='E4FMJDQC1JF' where id=5; -update noar tt set v0='FCXDF1VBUM3I4GPI0ZEPAG7QI7' where id=6; -update noar ti set v0='FCXDF1VBUM3I4GPI0ZEPAG7QI7' where id=6; -update noar tt set b0='DSYQVFY0BOFU1C5FABY' where id=6; -update noar ti set b0='DSYQVFY0BOFU1C5FABY' where id=6; -update noar tt set v0='7VSCKT9O' where id=6; -update noar ti set v0='7VSCKT9O' where id=6; -update noar tt set b1='ENV60KRC2RFTSP3ON3SNB4QM3W' where id=6; -update noar ti set b1='ENV60KRC2RFTSP3ON3SNB4QM3W' where id=6; -update noar tt set v0='JE7' where id=6; -update noar ti set v0='JE7' where id=6; -update noar tt set b2='U588UPEKEY9YBJSIOPWD7WIHR49' where id=6; -update noar ti set b2='U588UPEKEY9YBJSIOPWD7WIHR49' where id=6; -update noar tt set v0='PQPWMOTLZOU' where id=7; -update noar ti set v0='PQPWMOTLZOU' where id=7; -update noar tt set b0='KMTRBVMCE9LG2ZHYO8B9' where id=7; -update noar ti set b0='KMTRBVMCE9LG2ZHYO8B9' where id=7; -update noar tt set v0='4PWYQ8H1TQ6' where id=7; -update noar ti set v0='4PWYQ8H1TQ6' where id=7; -update noar tt set b1='D' where id=7; -update noar ti set b1='D' where id=7; -update noar tt set v0='QW3GY6QRU92OJX6QOJBTLFZ8ES8EGIGI' where id=7; -update noar ti set v0='QW3GY6QRU92OJX6QOJBTLFZ8ES8EGIGI' where id=7; -update noar tt set b2='8WI1XJJK' where id=7; -update noar ti set b2='8WI1XJJK' where id=7; -update noar tt set v0='ISTV' where id=8; -update noar ti set v0='ISTV' where id=8; -update noar tt set b0='X50QVX0K3FY3B' where id=8; -update noar ti set b0='X50QVX0K3FY3B' where id=8; -update noar tt set v0='5GTPVAA2IOUR03TI2IDBXQQF' where id=8; -update noar ti set v0='5GTPVAA2IOUR03TI2IDBXQQF' where id=8; -update noar tt set b1='7' where id=8; -update noar ti set b1='7' where id=8; -update noar tt set v0='I3MM0MBUXVTQR2GTIKOYWY3' where id=8; -update noar ti set v0='I3MM0MBUXVTQR2GTIKOYWY3' where id=8; -update noar tt set b2='CY907' where id=8; -update noar ti set b2='CY907' where id=8; -update noar tt set v0='XEUK6ZYDRQOCYYLZKBBW' where id=9; -update noar ti set v0='XEUK6ZYDRQOCYYLZKBBW' where id=9; -update noar tt set b0='18PMD' where id=9; -update noar ti set b0='18PMD' where id=9; -update noar tt set v0='ZAQFD' where id=9; -update noar ti set v0='ZAQFD' where id=9; -update noar tt set b1='HRQ' where id=9; -update noar ti set b1='HRQ' where id=9; -update noar tt set v0='2' where id=9; -update noar ti set v0='2' where id=9; -update noar tt set b2='E87IXO4MNDE8INLC3NKSHY' where id=9; -update noar ti set b2='E87IXO4MNDE8INLC3NKSHY' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 blob null, - b1 tinyblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='M7MUQB5XL' where id=1; -update noar ti set v0='M7MUQB5XL' where id=1; -update noar tt set b0='8RRKI0MIJIVXSWVFLKJDGMOA3EC6F' where id=1; -update noar ti set b0='8RRKI0MIJIVXSWVFLKJDGMOA3EC6F' where id=1; -update noar tt set v0='PDY' where id=1; -update noar ti set v0='PDY' where id=1; -update noar tt set b1='AJVAF0R' where id=1; -update noar ti set b1='AJVAF0R' where id=1; -update noar tt set v0='75GT' where id=1; -update noar ti set v0='75GT' where id=1; -update noar tt set b2='KV6LEQSGJ1KQ4W7VSIU' where id=1; -update noar ti set b2='KV6LEQSGJ1KQ4W7VSIU' where id=1; -update noar tt set v0='U4S83AXPC20ZG1' where id=2; -update noar ti set v0='U4S83AXPC20ZG1' where id=2; -update noar tt set b0='PGZA4LT' where id=2; -update noar ti set b0='PGZA4LT' where id=2; -update noar tt set v0='N1' where id=2; -update noar ti set v0='N1' where id=2; -update noar tt set b1='WI' where id=2; -update noar ti set b1='WI' where id=2; -update noar tt set v0='7Y6DSN6Q6S03QD04SYG6' where id=2; -update noar ti set v0='7Y6DSN6Q6S03QD04SYG6' where id=2; -update noar tt set b2='4KY9BKG36' where id=2; -update noar ti set b2='4KY9BKG36' where id=2; -update noar tt set v0='DYBLV' where id=3; -update noar ti set v0='DYBLV' where id=3; -update noar tt set b0='MPEDLK4AHMCVN9ETRH' where id=3; -update noar ti set b0='MPEDLK4AHMCVN9ETRH' where id=3; -update noar tt set v0='16CGQW78FW8BFSQY9RM' where id=3; -update noar ti set v0='16CGQW78FW8BFSQY9RM' where id=3; -update noar tt set b1='ZTQDP7HFVV7UOX4FAS' where id=3; -update noar ti set b1='ZTQDP7HFVV7UOX4FAS' where id=3; -update noar tt set v0='17BU0L3J' where id=3; -update noar ti set v0='17BU0L3J' where id=3; -update noar tt set b2='V87MKUB5RCASG' where id=3; -update noar ti set b2='V87MKUB5RCASG' where id=3; -update noar tt set v0='WJ2UP' where id=4; -update noar ti set v0='WJ2UP' where id=4; -update noar tt set b0='94T81QNS55HXC1CWNJFU0' where id=4; -update noar ti set b0='94T81QNS55HXC1CWNJFU0' where id=4; -update noar tt set v0='PHLBUEH' where id=4; -update noar ti set v0='PHLBUEH' where id=4; -update noar tt set b1='9PLNQ7WD2AY1CLRV5FD' where id=4; -update noar ti set b1='9PLNQ7WD2AY1CLRV5FD' where id=4; -update noar tt set v0='F' where id=4; -update noar ti set v0='F' where id=4; -update noar tt set b2='5JOYSH3W8H8' where id=4; -update noar ti set b2='5JOYSH3W8H8' where id=4; -update noar tt set v0='S3J8QTBHCLPWG755' where id=5; -update noar ti set v0='S3J8QTBHCLPWG755' where id=5; -update noar tt set b0='9Q00S9AXC4NU7C7RSFJC1U2' where id=5; -update noar ti set b0='9Q00S9AXC4NU7C7RSFJC1U2' where id=5; -update noar tt set v0='4LQ7C40AF49YCRYMCWTZU1O7' where id=5; -update noar ti set v0='4LQ7C40AF49YCRYMCWTZU1O7' where id=5; -update noar tt set b1='34NTH1KQ80DKYWJ' where id=5; -update noar ti set b1='34NTH1KQ80DKYWJ' where id=5; -update noar tt set v0='O' where id=5; -update noar ti set v0='O' where id=5; -update noar tt set b2='ROY5D1P1NTM2KZ' where id=5; -update noar ti set b2='ROY5D1P1NTM2KZ' where id=5; -update noar tt set v0='W7I54ILS7B5SIKDK99' where id=6; -update noar ti set v0='W7I54ILS7B5SIKDK99' where id=6; -update noar tt set b0='4SKRCDT62GMMYSHOFM94S' where id=6; -update noar ti set b0='4SKRCDT62GMMYSHOFM94S' where id=6; -update noar tt set v0='0H75SK7FMLDCGRYPSQBEYXX' where id=6; -update noar ti set v0='0H75SK7FMLDCGRYPSQBEYXX' where id=6; -update noar tt set b1='PTIHXY' where id=6; -update noar ti set b1='PTIHXY' where id=6; -update noar tt set v0='W1WRJIAHLAAPMFDKS' where id=6; -update noar ti set v0='W1WRJIAHLAAPMFDKS' where id=6; -update noar tt set b2='0ZJLUKU44YF8NWP' where id=6; -update noar ti set b2='0ZJLUKU44YF8NWP' where id=6; -update noar tt set v0='7W1WHIRQAZLR3X' where id=7; -update noar ti set v0='7W1WHIRQAZLR3X' where id=7; -update noar tt set b0='95PEAGL06CXI8XQFSA' where id=7; -update noar ti set b0='95PEAGL06CXI8XQFSA' where id=7; -update noar tt set v0='IIP76CEI5FS5B4TKZIQBPR24' where id=7; -update noar ti set v0='IIP76CEI5FS5B4TKZIQBPR24' where id=7; -update noar tt set b1='7QFL2IS8EZW3' where id=7; -update noar ti set b1='7QFL2IS8EZW3' where id=7; -update noar tt set v0='XVSYYHGZCZ4D0RJ49ASRPIVATP88XW0' where id=7; -update noar ti set v0='XVSYYHGZCZ4D0RJ49ASRPIVATP88XW0' where id=7; -update noar tt set b2='MGRU2JL9QW8J0W0HP6P' where id=7; -update noar ti set b2='MGRU2JL9QW8J0W0HP6P' where id=7; -update noar tt set v0='XDK7HERTKA2TVCJBMXB0XJZD' where id=8; -update noar ti set v0='XDK7HERTKA2TVCJBMXB0XJZD' where id=8; -update noar tt set b0='3SB' where id=8; -update noar ti set b0='3SB' where id=8; -update noar tt set v0='DMQCNLC' where id=8; -update noar ti set v0='DMQCNLC' where id=8; -update noar tt set b1='3OABOBW651QRPCXJSDWV' where id=8; -update noar ti set b1='3OABOBW651QRPCXJSDWV' where id=8; -update noar tt set v0='7MWPINXQH6JQTPV' where id=8; -update noar ti set v0='7MWPINXQH6JQTPV' where id=8; -update noar tt set b2='DCB7TW' where id=8; -update noar ti set b2='DCB7TW' where id=8; -update noar tt set v0='OFHRRZ3T' where id=9; -update noar ti set v0='OFHRRZ3T' where id=9; -update noar tt set b0='8ZXQ8PZ30KHP4' where id=9; -update noar ti set b0='8ZXQ8PZ30KHP4' where id=9; -update noar tt set v0='0A3BSZKOPA565O2K2' where id=9; -update noar ti set v0='0A3BSZKOPA565O2K2' where id=9; -update noar tt set b1='4H3O5WCZL1PXNVO87O' where id=9; -update noar ti set b1='4H3O5WCZL1PXNVO87O' where id=9; -update noar tt set v0='RGIOSFSPJN8A75F' where id=9; -update noar ti set v0='RGIOSFSPJN8A75F' where id=9; -update noar tt set b2='75' where id=9; -update noar ti set b2='75' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 blob not null, - b1 tinyblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='OKXV' where id=1; -update noar ti set v0='OKXV' where id=1; -update noar tt set b0='FUKXRMT3J9L2CZZL' where id=1; -update noar ti set b0='FUKXRMT3J9L2CZZL' where id=1; -update noar tt set v0='BJBMDJPN' where id=1; -update noar ti set v0='BJBMDJPN' where id=1; -update noar tt set b1='1A90D0KQ' where id=1; -update noar ti set b1='1A90D0KQ' where id=1; -update noar tt set v0='M' where id=1; -update noar ti set v0='M' where id=1; -update noar tt set b2='7TGZGXI29CF0SY91' where id=1; -update noar ti set b2='7TGZGXI29CF0SY91' where id=1; -update noar tt set v0='RML45IQYQKDYALTRW70VFX06H9RP' where id=2; -update noar ti set v0='RML45IQYQKDYALTRW70VFX06H9RP' where id=2; -update noar tt set b0='E0RJIW9JCDM9YCLCWWG9' where id=2; -update noar ti set b0='E0RJIW9JCDM9YCLCWWG9' where id=2; -update noar tt set v0='5' where id=2; -update noar ti set v0='5' where id=2; -update noar tt set b1='7A2N7ZMIF6MCYH' where id=2; -update noar ti set b1='7A2N7ZMIF6MCYH' where id=2; -update noar tt set v0='OMR68JHA0KVKW5YGVWNDFYFPQG' where id=2; -update noar ti set v0='OMR68JHA0KVKW5YGVWNDFYFPQG' where id=2; -update noar tt set b2='FC7X1G472Q5JDSKMM4CQJP46LO5W' where id=2; -update noar ti set b2='FC7X1G472Q5JDSKMM4CQJP46LO5W' where id=2; -update noar tt set v0='X5LSB4N2IBWBWM9Y9GVHZM3OE4D0W8' where id=3; -update noar ti set v0='X5LSB4N2IBWBWM9Y9GVHZM3OE4D0W8' where id=3; -update noar tt set b0='AMSVFHFMV0OM4RGF19KOGSMRD2FOMX4O' where id=3; -update noar ti set b0='AMSVFHFMV0OM4RGF19KOGSMRD2FOMX4O' where id=3; -update noar tt set v0='11O38AOC2F671ZJHE7YQD1HW724' where id=3; -update noar ti set v0='11O38AOC2F671ZJHE7YQD1HW724' where id=3; -update noar tt set b1='FD9S7YVCEM6CZ' where id=3; -update noar ti set b1='FD9S7YVCEM6CZ' where id=3; -update noar tt set v0='TGOHYDG4RKY' where id=3; -update noar ti set v0='TGOHYDG4RKY' where id=3; -update noar tt set b2='EI6VW8IZMIE6STV' where id=3; -update noar ti set b2='EI6VW8IZMIE6STV' where id=3; -update noar tt set v0='W' where id=4; -update noar ti set v0='W' where id=4; -update noar tt set b0='USLMDEQQBJ72IJHSU6NN9MF27LTUR' where id=4; -update noar ti set b0='USLMDEQQBJ72IJHSU6NN9MF27LTUR' where id=4; -update noar tt set v0='ZM3DG7C8NXX66S8PP' where id=4; -update noar ti set v0='ZM3DG7C8NXX66S8PP' where id=4; -update noar tt set b1='NCGWGBWT87J30J5ZCD' where id=4; -update noar ti set b1='NCGWGBWT87J30J5ZCD' where id=4; -update noar tt set v0='IGKISGROXONEIFJVHNW91D' where id=4; -update noar ti set v0='IGKISGROXONEIFJVHNW91D' where id=4; -update noar tt set b2='DMX8RSD9XDXTPU4Q1TZFI' where id=4; -update noar ti set b2='DMX8RSD9XDXTPU4Q1TZFI' where id=4; -update noar tt set v0='RULR' where id=5; -update noar ti set v0='RULR' where id=5; -update noar tt set b0='H' where id=5; -update noar ti set b0='H' where id=5; -update noar tt set v0='AV9RJMPNX84FSS' where id=5; -update noar ti set v0='AV9RJMPNX84FSS' where id=5; -update noar tt set b1='GW7AGVJWY13AFZHPCO5' where id=5; -update noar ti set b1='GW7AGVJWY13AFZHPCO5' where id=5; -update noar tt set v0='SZY7MANJ7J02PK' where id=5; -update noar ti set v0='SZY7MANJ7J02PK' where id=5; -update noar tt set b2='77EF6UPM830MUH5KS3R6Y9BD0D' where id=5; -update noar ti set b2='77EF6UPM830MUH5KS3R6Y9BD0D' where id=5; -update noar tt set v0='3I0K7MU758X33' where id=6; -update noar ti set v0='3I0K7MU758X33' where id=6; -update noar tt set b0='7X3KAJAECBTT5ATDFT' where id=6; -update noar ti set b0='7X3KAJAECBTT5ATDFT' where id=6; -update noar tt set v0='WZZ0S18EE78UNPJXDVDJIL4CTNRPY3T' where id=6; -update noar ti set v0='WZZ0S18EE78UNPJXDVDJIL4CTNRPY3T' where id=6; -update noar tt set b1='N4OGX8' where id=6; -update noar ti set b1='N4OGX8' where id=6; -update noar tt set v0='YVUTVNAFZ9PA5M2YXDUG3FICT7JLND' where id=6; -update noar ti set v0='YVUTVNAFZ9PA5M2YXDUG3FICT7JLND' where id=6; -update noar tt set b2='I' where id=6; -update noar ti set b2='I' where id=6; -update noar tt set v0='571OT26XF38KSOH4' where id=7; -update noar ti set v0='571OT26XF38KSOH4' where id=7; -update noar tt set b0='EQ4290L2UV' where id=7; -update noar ti set b0='EQ4290L2UV' where id=7; -update noar tt set v0='PBF10' where id=7; -update noar ti set v0='PBF10' where id=7; -update noar tt set b1='JWT5A' where id=7; -update noar ti set b1='JWT5A' where id=7; -update noar tt set v0='QZN66125ZD0' where id=7; -update noar ti set v0='QZN66125ZD0' where id=7; -update noar tt set b2='8O8RWW2NIXVDJ1TV' where id=7; -update noar ti set b2='8O8RWW2NIXVDJ1TV' where id=7; -update noar tt set v0='8TZCM0VKHMFQXNHZA047T2' where id=8; -update noar ti set v0='8TZCM0VKHMFQXNHZA047T2' where id=8; -update noar tt set b0='MCH' where id=8; -update noar ti set b0='MCH' where id=8; -update noar tt set v0='8CHUGB4Q2Q33O6YD9JCB' where id=8; -update noar ti set v0='8CHUGB4Q2Q33O6YD9JCB' where id=8; -update noar tt set b1='FAFTHFI4DRDXY1NFGIGHIS6L02H42IY' where id=8; -update noar ti set b1='FAFTHFI4DRDXY1NFGIGHIS6L02H42IY' where id=8; -update noar tt set v0='H098LT1TD40' where id=8; -update noar ti set v0='H098LT1TD40' where id=8; -update noar tt set b2='CI0B' where id=8; -update noar ti set b2='CI0B' where id=8; -update noar tt set v0='N1559NH1EOJB' where id=9; -update noar ti set v0='N1559NH1EOJB' where id=9; -update noar tt set b0='8J1VLZB1K' where id=9; -update noar ti set b0='8J1VLZB1K' where id=9; -update noar tt set v0='7CGE6Q04TEPCJ7VW' where id=9; -update noar ti set v0='7CGE6Q04TEPCJ7VW' where id=9; -update noar tt set b1='OLOUA' where id=9; -update noar ti set b1='OLOUA' where id=9; -update noar tt set v0='2FTAIAF90EHM2EYGL13FL7J' where id=9; -update noar ti set v0='2FTAIAF90EHM2EYGL13FL7J' where id=9; -update noar tt set b2='GQ8EA' where id=9; -update noar ti set b2='GQ8EA' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 blob not null, - b1 tinyblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='ZO7U7D3DNLFTD2MFBGV5P68WK8NY' where id=1; -update noar ti set v0='ZO7U7D3DNLFTD2MFBGV5P68WK8NY' where id=1; -update noar tt set b0='ZZ169AMK3LRNVY4LLEOQKTM5WWTEM' where id=1; -update noar ti set b0='ZZ169AMK3LRNVY4LLEOQKTM5WWTEM' where id=1; -update noar tt set v0='IYUB' where id=1; -update noar ti set v0='IYUB' where id=1; -update noar tt set b1='ZJOQEHT1LA5K5WTDHQ' where id=1; -update noar ti set b1='ZJOQEHT1LA5K5WTDHQ' where id=1; -update noar tt set v0='VLP3VPHCM' where id=1; -update noar ti set v0='VLP3VPHCM' where id=1; -update noar tt set b2='PG36567LNULM3L6' where id=1; -update noar ti set b2='PG36567LNULM3L6' where id=1; -update noar tt set v0='V8HCGT3WT41FJMEH' where id=2; -update noar ti set v0='V8HCGT3WT41FJMEH' where id=2; -update noar tt set b0='5QISCELYU8KDCIHLLN409LY0Y2LFM' where id=2; -update noar ti set b0='5QISCELYU8KDCIHLLN409LY0Y2LFM' where id=2; -update noar tt set v0='HTWZTQ4CD551X00W9I44YSM9E' where id=2; -update noar ti set v0='HTWZTQ4CD551X00W9I44YSM9E' where id=2; -update noar tt set b1='0V9BUYQ40D3BDUL4XLDV7DXV5T0ABD' where id=2; -update noar ti set b1='0V9BUYQ40D3BDUL4XLDV7DXV5T0ABD' where id=2; -update noar tt set v0='YSCA6E0PU' where id=2; -update noar ti set v0='YSCA6E0PU' where id=2; -update noar tt set b2='US6NQ61QWUE' where id=2; -update noar ti set b2='US6NQ61QWUE' where id=2; -update noar tt set v0='YZSKOG' where id=3; -update noar ti set v0='YZSKOG' where id=3; -update noar tt set b0='DUJCBW9IPF' where id=3; -update noar ti set b0='DUJCBW9IPF' where id=3; -update noar tt set v0='STQ05NUV' where id=3; -update noar ti set v0='STQ05NUV' where id=3; -update noar tt set b1='ZG8R2I1J' where id=3; -update noar ti set b1='ZG8R2I1J' where id=3; -update noar tt set v0='UMI2VHBWV304D889A2E85S6YCT27' where id=3; -update noar ti set v0='UMI2VHBWV304D889A2E85S6YCT27' where id=3; -update noar tt set b2='W5QN2MP754SU2EI113QE0WXUYX' where id=3; -update noar ti set b2='W5QN2MP754SU2EI113QE0WXUYX' where id=3; -update noar tt set v0='16DL356E5HE0RHQLVVHA4JIP73H' where id=4; -update noar ti set v0='16DL356E5HE0RHQLVVHA4JIP73H' where id=4; -update noar tt set b0='P91NYVJ' where id=4; -update noar ti set b0='P91NYVJ' where id=4; -update noar tt set v0='ZL2G24XEZJDM1GUZVT5047SD9' where id=4; -update noar ti set v0='ZL2G24XEZJDM1GUZVT5047SD9' where id=4; -update noar tt set b1='F5DXRNVBJ1QI9' where id=4; -update noar ti set b1='F5DXRNVBJ1QI9' where id=4; -update noar tt set v0='E6DKDKT5GH' where id=4; -update noar ti set v0='E6DKDKT5GH' where id=4; -update noar tt set b2='J7A3VSMEUCAXBJV98O3FT6NLUW' where id=4; -update noar ti set b2='J7A3VSMEUCAXBJV98O3FT6NLUW' where id=4; -update noar tt set v0='WBLV' where id=5; -update noar ti set v0='WBLV' where id=5; -update noar tt set b0='I5L6TZIL4NICY' where id=5; -update noar ti set b0='I5L6TZIL4NICY' where id=5; -update noar tt set v0='10TM8VPCA26948BVGPNM7UY5PFXYH' where id=5; -update noar ti set v0='10TM8VPCA26948BVGPNM7UY5PFXYH' where id=5; -update noar tt set b1='DFBDCAN540J5SC' where id=5; -update noar ti set b1='DFBDCAN540J5SC' where id=5; -update noar tt set v0='SCORH6ALK3CPVIIQ' where id=5; -update noar ti set v0='SCORH6ALK3CPVIIQ' where id=5; -update noar tt set b2='9NQ' where id=5; -update noar ti set b2='9NQ' where id=5; -update noar tt set v0='L9FU1YJPDN24JL2PARHTAFX' where id=6; -update noar ti set v0='L9FU1YJPDN24JL2PARHTAFX' where id=6; -update noar tt set b0='LJ82BOTS1LRZ4ZLO23J0JHO6Y878V' where id=6; -update noar ti set b0='LJ82BOTS1LRZ4ZLO23J0JHO6Y878V' where id=6; -update noar tt set v0='KWJMR5QAE3441O7W293V9B9' where id=6; -update noar ti set v0='KWJMR5QAE3441O7W293V9B9' where id=6; -update noar tt set b1='W7KLN4YPSEP' where id=6; -update noar ti set b1='W7KLN4YPSEP' where id=6; -update noar tt set v0='H5USTX' where id=6; -update noar ti set v0='H5USTX' where id=6; -update noar tt set b2='5PA377A2OWQZIJHGPGC4' where id=6; -update noar ti set b2='5PA377A2OWQZIJHGPGC4' where id=6; -update noar tt set v0='CEL4LFVC6UIFGQSWWITGVN' where id=7; -update noar ti set v0='CEL4LFVC6UIFGQSWWITGVN' where id=7; -update noar tt set b0='OY9YJKK28R9UIU2OZBVH7N0ZZLTE4P6' where id=7; -update noar ti set b0='OY9YJKK28R9UIU2OZBVH7N0ZZLTE4P6' where id=7; -update noar tt set v0='HU053GU4X63YLETGZMX91HYS4M4HX' where id=7; -update noar ti set v0='HU053GU4X63YLETGZMX91HYS4M4HX' where id=7; -update noar tt set b1='C8EDJXRWGHCQ7' where id=7; -update noar ti set b1='C8EDJXRWGHCQ7' where id=7; -update noar tt set v0='B9OSOCDT4BO3CF' where id=7; -update noar ti set v0='B9OSOCDT4BO3CF' where id=7; -update noar tt set b2='792MGR8IKDB4M' where id=7; -update noar ti set b2='792MGR8IKDB4M' where id=7; -update noar tt set v0='0ZCT6UEIP7H5S75' where id=8; -update noar ti set v0='0ZCT6UEIP7H5S75' where id=8; -update noar tt set b0='W66J664SQTDF6G' where id=8; -update noar ti set b0='W66J664SQTDF6G' where id=8; -update noar tt set v0='WAH3824ZXNFEIWQ' where id=8; -update noar ti set v0='WAH3824ZXNFEIWQ' where id=8; -update noar tt set b1='RJHS70ITMWVG0S6N4TMPDODPL' where id=8; -update noar ti set b1='RJHS70ITMWVG0S6N4TMPDODPL' where id=8; -update noar tt set v0='1Z4' where id=8; -update noar ti set v0='1Z4' where id=8; -update noar tt set b2='Y' where id=8; -update noar ti set b2='Y' where id=8; -update noar tt set v0='AG2' where id=9; -update noar ti set v0='AG2' where id=9; -update noar tt set b0='L6NZPTLWR0TY8' where id=9; -update noar ti set b0='L6NZPTLWR0TY8' where id=9; -update noar tt set v0='HVKQFH8SJKCTJEYQ1R' where id=9; -update noar ti set v0='HVKQFH8SJKCTJEYQ1R' where id=9; -update noar tt set b1='VXF0WMDS64J65N' where id=9; -update noar ti set b1='VXF0WMDS64J65N' where id=9; -update noar tt set v0='YABL8SFYRJGGEHFS3CW' where id=9; -update noar ti set v0='YABL8SFYRJGGEHFS3CW' where id=9; -update noar tt set b2='63Y1IBC3XEKPXYQV4KH7' where id=9; -update noar ti set b2='63Y1IBC3XEKPXYQV4KH7' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 blob null, - b1 tinyblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='4V3' where id=1; -update noar ti set v0='4V3' where id=1; -update noar tt set b0='IPYCM' where id=1; -update noar ti set b0='IPYCM' where id=1; -update noar tt set v0='MJD71YVRMFSMTMBSQWF251ZJEKTFXB' where id=1; -update noar ti set v0='MJD71YVRMFSMTMBSQWF251ZJEKTFXB' where id=1; -update noar tt set b1='WZUN0' where id=1; -update noar ti set b1='WZUN0' where id=1; -update noar tt set v0='EATAB' where id=1; -update noar ti set v0='EATAB' where id=1; -update noar tt set b2='3A2XFVKANR0MJYXGT59FBC4KB' where id=1; -update noar ti set b2='3A2XFVKANR0MJYXGT59FBC4KB' where id=1; -update noar tt set v0='Q40MBD' where id=2; -update noar ti set v0='Q40MBD' where id=2; -update noar tt set b0='YQAZCMOUEVDDP6S0ZZI6RVCY' where id=2; -update noar ti set b0='YQAZCMOUEVDDP6S0ZZI6RVCY' where id=2; -update noar tt set v0='580L6YWAWE6TXDIQBHVAQ1HHSGAH8VC' where id=2; -update noar ti set v0='580L6YWAWE6TXDIQBHVAQ1HHSGAH8VC' where id=2; -update noar tt set b1='79F0HCZPAAK2XRCL' where id=2; -update noar ti set b1='79F0HCZPAAK2XRCL' where id=2; -update noar tt set v0='ACY8HN5C11JJ0GDNY' where id=2; -update noar ti set v0='ACY8HN5C11JJ0GDNY' where id=2; -update noar tt set b2='CMSUT' where id=2; -update noar ti set b2='CMSUT' where id=2; -update noar tt set v0='XEFIJ4K2QVKTHHIS7MF1A86JFZPFN7' where id=3; -update noar ti set v0='XEFIJ4K2QVKTHHIS7MF1A86JFZPFN7' where id=3; -update noar tt set b0='3IZGGWII' where id=3; -update noar ti set b0='3IZGGWII' where id=3; -update noar tt set v0='BBOOSJU4Y3J' where id=3; -update noar ti set v0='BBOOSJU4Y3J' where id=3; -update noar tt set b1='KFMQ92VC57EN8YV02MWYAZGQJ4TBVY' where id=3; -update noar ti set b1='KFMQ92VC57EN8YV02MWYAZGQJ4TBVY' where id=3; -update noar tt set v0='EKK0FFP1XFUMQ0UUIBVH2OTJTJRXE80I' where id=3; -update noar ti set v0='EKK0FFP1XFUMQ0UUIBVH2OTJTJRXE80I' where id=3; -update noar tt set b2='1P2NXYCR8I2AI039PC5A' where id=3; -update noar ti set b2='1P2NXYCR8I2AI039PC5A' where id=3; -update noar tt set v0='IO7R' where id=4; -update noar ti set v0='IO7R' where id=4; -update noar tt set b0='W6X' where id=4; -update noar ti set b0='W6X' where id=4; -update noar tt set v0='P9PJ71I2J3VPVBHVPKFCO8K9T01T73TU' where id=4; -update noar ti set v0='P9PJ71I2J3VPVBHVPKFCO8K9T01T73TU' where id=4; -update noar tt set b1='V2XRL80933' where id=4; -update noar ti set b1='V2XRL80933' where id=4; -update noar tt set v0='UJYED2HRLBX4VX99NN3CYTBVZ' where id=4; -update noar ti set v0='UJYED2HRLBX4VX99NN3CYTBVZ' where id=4; -update noar tt set b2='5OHLTABSL40' where id=4; -update noar ti set b2='5OHLTABSL40' where id=4; -update noar tt set v0='YUJGL68DCOF' where id=5; -update noar ti set v0='YUJGL68DCOF' where id=5; -update noar tt set b0='CSWMHVZEFWG18YWXYJ9S4QSQRT' where id=5; -update noar ti set b0='CSWMHVZEFWG18YWXYJ9S4QSQRT' where id=5; -update noar tt set v0='0DPY8BQBSCD5O' where id=5; -update noar ti set v0='0DPY8BQBSCD5O' where id=5; -update noar tt set b1='T65QKAUW4OLYFT8' where id=5; -update noar ti set b1='T65QKAUW4OLYFT8' where id=5; -update noar tt set v0='Q3QA4ATUD' where id=5; -update noar ti set v0='Q3QA4ATUD' where id=5; -update noar tt set b2='G1D8R7C4I2G73KW' where id=5; -update noar ti set b2='G1D8R7C4I2G73KW' where id=5; -update noar tt set v0='L0KR' where id=6; -update noar ti set v0='L0KR' where id=6; -update noar tt set b0='V07U6MPNIVMTR2YHOA580CEFYZ5ZBE' where id=6; -update noar ti set b0='V07U6MPNIVMTR2YHOA580CEFYZ5ZBE' where id=6; -update noar tt set v0='T' where id=6; -update noar ti set v0='T' where id=6; -update noar tt set b1='B' where id=6; -update noar ti set b1='B' where id=6; -update noar tt set v0='7OUJFDFIZ6WN4JOP6L1N3RE6B5X97' where id=6; -update noar ti set v0='7OUJFDFIZ6WN4JOP6L1N3RE6B5X97' where id=6; -update noar tt set b2='N4' where id=6; -update noar ti set b2='N4' where id=6; -update noar tt set v0='JCDE5C81LYQU6N71BD3D0PJDNV95VV' where id=7; -update noar ti set v0='JCDE5C81LYQU6N71BD3D0PJDNV95VV' where id=7; -update noar tt set b0='Z' where id=7; -update noar ti set b0='Z' where id=7; -update noar tt set v0='WCC0XI' where id=7; -update noar ti set v0='WCC0XI' where id=7; -update noar tt set b1='SLD6C' where id=7; -update noar ti set b1='SLD6C' where id=7; -update noar tt set v0='BXA4QJZWCW0259' where id=7; -update noar ti set v0='BXA4QJZWCW0259' where id=7; -update noar tt set b2='HXUFL' where id=7; -update noar ti set b2='HXUFL' where id=7; -update noar tt set v0='U96URWV2KJY7PXDOIHE' where id=8; -update noar ti set v0='U96URWV2KJY7PXDOIHE' where id=8; -update noar tt set b0='NU4BE16QA' where id=8; -update noar ti set b0='NU4BE16QA' where id=8; -update noar tt set v0='1LGOF20CN' where id=8; -update noar ti set v0='1LGOF20CN' where id=8; -update noar tt set b1='RMSAGLSKXX51TIN0SKNQ1XENXZ' where id=8; -update noar ti set b1='RMSAGLSKXX51TIN0SKNQ1XENXZ' where id=8; -update noar tt set v0='QLJL' where id=8; -update noar ti set v0='QLJL' where id=8; -update noar tt set b2='EWIW876964QKSZLTVRXDLRZY4NK6F' where id=8; -update noar ti set b2='EWIW876964QKSZLTVRXDLRZY4NK6F' where id=8; -update noar tt set v0='SV5PMFK697' where id=9; -update noar ti set v0='SV5PMFK697' where id=9; -update noar tt set b0='14QQG7QFB' where id=9; -update noar ti set b0='14QQG7QFB' where id=9; -update noar tt set v0='DDON01WFZ' where id=9; -update noar ti set v0='DDON01WFZ' where id=9; -update noar tt set b1='0MSE3ILJSMC' where id=9; -update noar ti set b1='0MSE3ILJSMC' where id=9; -update noar tt set v0='CKP' where id=9; -update noar ti set v0='CKP' where id=9; -update noar tt set b2='IJQCFGBGPQKI61STIUC2XGBT7' where id=9; -update noar ti set b2='IJQCFGBGPQKI61STIUC2XGBT7' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 blob null, - b1 tinyblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='9XDFQHRZ' where id=1; -update noar ti set v0='9XDFQHRZ' where id=1; -update noar tt set b0='AEY7FS3YGODFKFOKNDDJF' where id=1; -update noar ti set b0='AEY7FS3YGODFKFOKNDDJF' where id=1; -update noar tt set v0='RUULZNA5ORJSRYXLUOQWXO85VJTJK15N' where id=1; -update noar ti set v0='RUULZNA5ORJSRYXLUOQWXO85VJTJK15N' where id=1; -update noar tt set b1='VPW5EDB97XAMAT5R67ZAVFOW7' where id=1; -update noar ti set b1='VPW5EDB97XAMAT5R67ZAVFOW7' where id=1; -update noar tt set v0='2OC1UQX7' where id=1; -update noar ti set v0='2OC1UQX7' where id=1; -update noar tt set b2='2DKRI' where id=1; -update noar ti set b2='2DKRI' where id=1; -update noar tt set v0='U4WJJ1' where id=2; -update noar ti set v0='U4WJJ1' where id=2; -update noar tt set b0='WEI' where id=2; -update noar ti set b0='WEI' where id=2; -update noar tt set v0='DOC' where id=2; -update noar ti set v0='DOC' where id=2; -update noar tt set b1='3MH8T' where id=2; -update noar ti set b1='3MH8T' where id=2; -update noar tt set v0='2' where id=2; -update noar ti set v0='2' where id=2; -update noar tt set b2='BHADQ1Y9WC2E9RWLCAUB97W2GMS2' where id=2; -update noar ti set b2='BHADQ1Y9WC2E9RWLCAUB97W2GMS2' where id=2; -update noar tt set v0='88VAS8IKNLBXD43R43HOK6' where id=3; -update noar ti set v0='88VAS8IKNLBXD43R43HOK6' where id=3; -update noar tt set b0='83EUI8ZFTT3WQSLEP0VJ' where id=3; -update noar ti set b0='83EUI8ZFTT3WQSLEP0VJ' where id=3; -update noar tt set v0='LMK14CTG9D90JG62SPGHTC' where id=3; -update noar ti set v0='LMK14CTG9D90JG62SPGHTC' where id=3; -update noar tt set b1='SH2K3JUEZ90G2' where id=3; -update noar ti set b1='SH2K3JUEZ90G2' where id=3; -update noar tt set v0='FR6GBB6OD2CMQEPK' where id=3; -update noar ti set v0='FR6GBB6OD2CMQEPK' where id=3; -update noar tt set b2='MP' where id=3; -update noar ti set b2='MP' where id=3; -update noar tt set v0='1W408VSWFUH30W49KRMGA7JSYT7' where id=4; -update noar ti set v0='1W408VSWFUH30W49KRMGA7JSYT7' where id=4; -update noar tt set b0='6L' where id=4; -update noar ti set b0='6L' where id=4; -update noar tt set v0='1PER18ILUB7TD5E1SX' where id=4; -update noar ti set v0='1PER18ILUB7TD5E1SX' where id=4; -update noar tt set b1='926K6RMUXV1HIA4OYK9PTTVKJA06EGM' where id=4; -update noar ti set b1='926K6RMUXV1HIA4OYK9PTTVKJA06EGM' where id=4; -update noar tt set v0='ZALNBXJMGKO' where id=4; -update noar ti set v0='ZALNBXJMGKO' where id=4; -update noar tt set b2='GPURKAN1YXECTLB6LF0UJ9SR5D13ANJ' where id=4; -update noar ti set b2='GPURKAN1YXECTLB6LF0UJ9SR5D13ANJ' where id=4; -update noar tt set v0='IYR' where id=5; -update noar ti set v0='IYR' where id=5; -update noar tt set b0='7L1HYF' where id=5; -update noar ti set b0='7L1HYF' where id=5; -update noar tt set v0='5MRO0E9ZU40IDPRIZO4LC9H8C673' where id=5; -update noar ti set v0='5MRO0E9ZU40IDPRIZO4LC9H8C673' where id=5; -update noar tt set b1='7GOL1TOIYIVVAKOA1MK' where id=5; -update noar ti set b1='7GOL1TOIYIVVAKOA1MK' where id=5; -update noar tt set v0='ZB0Z4B3S5K8' where id=5; -update noar ti set v0='ZB0Z4B3S5K8' where id=5; -update noar tt set b2='GPNONS6AC5BW47UWMMO2BG1CTX' where id=5; -update noar ti set b2='GPNONS6AC5BW47UWMMO2BG1CTX' where id=5; -update noar tt set v0='I0S7IWJX' where id=6; -update noar ti set v0='I0S7IWJX' where id=6; -update noar tt set b0='U9NUFNMZUO' where id=6; -update noar ti set b0='U9NUFNMZUO' where id=6; -update noar tt set v0='YA4Q7DF9HAX' where id=6; -update noar ti set v0='YA4Q7DF9HAX' where id=6; -update noar tt set b1='24RZ77VCJUQDR421R9CFL2BK' where id=6; -update noar ti set b1='24RZ77VCJUQDR421R9CFL2BK' where id=6; -update noar tt set v0='OVMIQQSA466D9V2TXC6GSO756XS' where id=6; -update noar ti set v0='OVMIQQSA466D9V2TXC6GSO756XS' where id=6; -update noar tt set b2='YTRR7P0GK3Y2DV72RE0T9052ZAYZ0Z' where id=6; -update noar ti set b2='YTRR7P0GK3Y2DV72RE0T9052ZAYZ0Z' where id=6; -update noar tt set v0='E41L6VELCJNGSDJGDRNRFD6ZJ2K251LU' where id=7; -update noar ti set v0='E41L6VELCJNGSDJGDRNRFD6ZJ2K251LU' where id=7; -update noar tt set b0='GRVD2LD' where id=7; -update noar ti set b0='GRVD2LD' where id=7; -update noar tt set v0='MOA1LDYHYD1YJMAHWU6V1BY5XFWC' where id=7; -update noar ti set v0='MOA1LDYHYD1YJMAHWU6V1BY5XFWC' where id=7; -update noar tt set b1='G5KK8NSOTNEE' where id=7; -update noar ti set b1='G5KK8NSOTNEE' where id=7; -update noar tt set v0='DWT98IBJOLGJ5PV90VPS8KAFQ8ENX8' where id=7; -update noar ti set v0='DWT98IBJOLGJ5PV90VPS8KAFQ8ENX8' where id=7; -update noar tt set b2='RCK8V6TBBQOLF4HL18G56K8GN6WQF7' where id=7; -update noar ti set b2='RCK8V6TBBQOLF4HL18G56K8GN6WQF7' where id=7; -update noar tt set v0='7KAQKL' where id=8; -update noar ti set v0='7KAQKL' where id=8; -update noar tt set b0='1QK3WK4X7H9ESZLU664' where id=8; -update noar ti set b0='1QK3WK4X7H9ESZLU664' where id=8; -update noar tt set v0='0K8GNCDSCR6HOT6T' where id=8; -update noar ti set v0='0K8GNCDSCR6HOT6T' where id=8; -update noar tt set b1='5FO39K' where id=8; -update noar ti set b1='5FO39K' where id=8; -update noar tt set v0='AMYERIXKF7WF0B3K' where id=8; -update noar ti set v0='AMYERIXKF7WF0B3K' where id=8; -update noar tt set b2='W7Y6K' where id=8; -update noar ti set b2='W7Y6K' where id=8; -update noar tt set v0='05F33BCNFEJLE7C6' where id=9; -update noar ti set v0='05F33BCNFEJLE7C6' where id=9; -update noar tt set b0='BPYFI7GUO7NJ39H22DJAZA575' where id=9; -update noar ti set b0='BPYFI7GUO7NJ39H22DJAZA575' where id=9; -update noar tt set v0='C1HM7JT' where id=9; -update noar ti set v0='C1HM7JT' where id=9; -update noar tt set b1='86NV1CKWSU1H2' where id=9; -update noar ti set b1='86NV1CKWSU1H2' where id=9; -update noar tt set v0='8N8GD' where id=9; -update noar ti set v0='8N8GD' where id=9; -update noar tt set b2='PO' where id=9; -update noar ti set b2='PO' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 blob not null, - b1 tinyblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='ODV7UPZ7EQHSMLPPJISN7H33KN1DWL' where id=1; -update noar ti set v0='ODV7UPZ7EQHSMLPPJISN7H33KN1DWL' where id=1; -update noar tt set b0='NOMJ14GOTT' where id=1; -update noar ti set b0='NOMJ14GOTT' where id=1; -update noar tt set v0='A4WJYQDLIKP4KE3B2Y' where id=1; -update noar ti set v0='A4WJYQDLIKP4KE3B2Y' where id=1; -update noar tt set b1='3VPZR1RFYV5N3J2GPE' where id=1; -update noar ti set b1='3VPZR1RFYV5N3J2GPE' where id=1; -update noar tt set v0='A41YVCQYFG116I8L5' where id=1; -update noar ti set v0='A41YVCQYFG116I8L5' where id=1; -update noar tt set b2='VXPLF1PRL6ONXYUDMQGU4UZ6CJUX2E' where id=1; -update noar ti set b2='VXPLF1PRL6ONXYUDMQGU4UZ6CJUX2E' where id=1; -update noar tt set v0='F00WR8Y127NFVLB9LPDLSK6QS516O4' where id=2; -update noar ti set v0='F00WR8Y127NFVLB9LPDLSK6QS516O4' where id=2; -update noar tt set b0='GQ2Q' where id=2; -update noar ti set b0='GQ2Q' where id=2; -update noar tt set v0='8Q8UE61TB7C3MBLUAKQA6VDI' where id=2; -update noar ti set v0='8Q8UE61TB7C3MBLUAKQA6VDI' where id=2; -update noar tt set b1='R' where id=2; -update noar ti set b1='R' where id=2; -update noar tt set v0='F8LDN0I' where id=2; -update noar ti set v0='F8LDN0I' where id=2; -update noar tt set b2='PVJTI3VB6BC' where id=2; -update noar ti set b2='PVJTI3VB6BC' where id=2; -update noar tt set v0='ZNRYIVVL05C6KS228393WZ' where id=3; -update noar ti set v0='ZNRYIVVL05C6KS228393WZ' where id=3; -update noar tt set b0='DZL50VC9OUDR8QOP' where id=3; -update noar ti set b0='DZL50VC9OUDR8QOP' where id=3; -update noar tt set v0='VE' where id=3; -update noar ti set v0='VE' where id=3; -update noar tt set b1='SMJQGFR' where id=3; -update noar ti set b1='SMJQGFR' where id=3; -update noar tt set v0='AZ738MJ3ZEFMC4ZMBKDF38Y' where id=3; -update noar ti set v0='AZ738MJ3ZEFMC4ZMBKDF38Y' where id=3; -update noar tt set b2='4ZKQ61RGQ' where id=3; -update noar ti set b2='4ZKQ61RGQ' where id=3; -update noar tt set v0='IXIGZ9FZ' where id=4; -update noar ti set v0='IXIGZ9FZ' where id=4; -update noar tt set b0='QK244O0B0JZ0XAQY98' where id=4; -update noar ti set b0='QK244O0B0JZ0XAQY98' where id=4; -update noar tt set v0='XDVDW8RS54769WL993Q5' where id=4; -update noar ti set v0='XDVDW8RS54769WL993Q5' where id=4; -update noar tt set b1='PR1175' where id=4; -update noar ti set b1='PR1175' where id=4; -update noar tt set v0='29H7DBRF77936UVQUW' where id=4; -update noar ti set v0='29H7DBRF77936UVQUW' where id=4; -update noar tt set b2='BT2GAW54DFR9KYRCTN6517U6CIOW' where id=4; -update noar ti set b2='BT2GAW54DFR9KYRCTN6517U6CIOW' where id=4; -update noar tt set v0='ZE97K91' where id=5; -update noar ti set v0='ZE97K91' where id=5; -update noar tt set b0='6W9MIP3YW' where id=5; -update noar ti set b0='6W9MIP3YW' where id=5; -update noar tt set v0='SZTHASRIIJB6IWKTRKDHG29O3NEVP' where id=5; -update noar ti set v0='SZTHASRIIJB6IWKTRKDHG29O3NEVP' where id=5; -update noar tt set b1='IX0ET6JRLBQAE4U8MHDZVZNF0I8O' where id=5; -update noar ti set b1='IX0ET6JRLBQAE4U8MHDZVZNF0I8O' where id=5; -update noar tt set v0='W7KY2H9W7CK6K9P2BXXB9CYKY9' where id=5; -update noar ti set v0='W7KY2H9W7CK6K9P2BXXB9CYKY9' where id=5; -update noar tt set b2='84' where id=5; -update noar ti set b2='84' where id=5; -update noar tt set v0='RZRDIVG6ODN0SF8UOJX16K04B5X' where id=6; -update noar ti set v0='RZRDIVG6ODN0SF8UOJX16K04B5X' where id=6; -update noar tt set b0='SQFF04JOJ1IJXKG8VQSZB0TINX' where id=6; -update noar ti set b0='SQFF04JOJ1IJXKG8VQSZB0TINX' where id=6; -update noar tt set v0='T12NKR7DAXXQ' where id=6; -update noar ti set v0='T12NKR7DAXXQ' where id=6; -update noar tt set b1='UFLYIJVHAGE0JE5K4H6BZGC5LLYY' where id=6; -update noar ti set b1='UFLYIJVHAGE0JE5K4H6BZGC5LLYY' where id=6; -update noar tt set v0='FK2DCYYAYRR3KK' where id=6; -update noar ti set v0='FK2DCYYAYRR3KK' where id=6; -update noar tt set b2='7J' where id=6; -update noar ti set b2='7J' where id=6; -update noar tt set v0='KIR385LYTO2AK7L91' where id=7; -update noar ti set v0='KIR385LYTO2AK7L91' where id=7; -update noar tt set b0='4RXSJKU6XR8VZHJX10917N2FOFXS4YN' where id=7; -update noar ti set b0='4RXSJKU6XR8VZHJX10917N2FOFXS4YN' where id=7; -update noar tt set v0='PDCQIAUNNHVM7A8O1M0QAFW4IABLWX' where id=7; -update noar ti set v0='PDCQIAUNNHVM7A8O1M0QAFW4IABLWX' where id=7; -update noar tt set b1='FJVN7GTNZFMU46135YV35GH417G1T' where id=7; -update noar ti set b1='FJVN7GTNZFMU46135YV35GH417G1T' where id=7; -update noar tt set v0='S045UNV956NY4XKKLKJZBPGOBJ0J6CH' where id=7; -update noar ti set v0='S045UNV956NY4XKKLKJZBPGOBJ0J6CH' where id=7; -update noar tt set b2='9WMSZHX3WH2I35EG9O1' where id=7; -update noar ti set b2='9WMSZHX3WH2I35EG9O1' where id=7; -update noar tt set v0='1SFRKQD3NA1M48WH4FIXK5QY1BK' where id=8; -update noar ti set v0='1SFRKQD3NA1M48WH4FIXK5QY1BK' where id=8; -update noar tt set b0='LVYZFAB8I77YXFVO3O71WXNWCP0B' where id=8; -update noar ti set b0='LVYZFAB8I77YXFVO3O71WXNWCP0B' where id=8; -update noar tt set v0='XDS2HZ2MLTVU0EBGFB8AVYDX5FRCXK' where id=8; -update noar ti set v0='XDS2HZ2MLTVU0EBGFB8AVYDX5FRCXK' where id=8; -update noar tt set b1='4FS6QG3M8Q' where id=8; -update noar ti set b1='4FS6QG3M8Q' where id=8; -update noar tt set v0='RB5ZSM7NYGHDVSLGWRODNCD8' where id=8; -update noar ti set v0='RB5ZSM7NYGHDVSLGWRODNCD8' where id=8; -update noar tt set b2='O628V85DSK1' where id=8; -update noar ti set b2='O628V85DSK1' where id=8; -update noar tt set v0='7JP47VJLJRBTUI4S4SD8X4TN7GR5FDV' where id=9; -update noar ti set v0='7JP47VJLJRBTUI4S4SD8X4TN7GR5FDV' where id=9; -update noar tt set b0='7IDGS' where id=9; -update noar ti set b0='7IDGS' where id=9; -update noar tt set v0='TGJRIIRWWT4H0UYYH' where id=9; -update noar ti set v0='TGJRIIRWWT4H0UYYH' where id=9; -update noar tt set b1='CWFNXGFKIYSLTVM0AODZNRYH91F' where id=9; -update noar ti set b1='CWFNXGFKIYSLTVM0AODZNRYH91F' where id=9; -update noar tt set v0='D4IFZ9UQ08CA5' where id=9; -update noar ti set v0='D4IFZ9UQ08CA5' where id=9; -update noar tt set b2='ANVVLU062TAZOYGEN8ACB5C' where id=9; -update noar ti set b2='ANVVLU062TAZOYGEN8ACB5C' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 blob not null, - b1 tinyblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='4M8YLA24RDDDL' where id=1; -update noar ti set v0='4M8YLA24RDDDL' where id=1; -update noar tt set b0='D4TP2IW6' where id=1; -update noar ti set b0='D4TP2IW6' where id=1; -update noar tt set v0='USQLL20Y9WEOOQJP9TE29YON1QB5IIS' where id=1; -update noar ti set v0='USQLL20Y9WEOOQJP9TE29YON1QB5IIS' where id=1; -update noar tt set b1='9CJPKGQ3W' where id=1; -update noar ti set b1='9CJPKGQ3W' where id=1; -update noar tt set v0='X0UP' where id=1; -update noar ti set v0='X0UP' where id=1; -update noar tt set b2='OKWPTR2D' where id=1; -update noar ti set b2='OKWPTR2D' where id=1; -update noar tt set v0='AF4ZO89HLZUL2R69POVU' where id=2; -update noar ti set v0='AF4ZO89HLZUL2R69POVU' where id=2; -update noar tt set b0='OU9P29YYO0' where id=2; -update noar ti set b0='OU9P29YYO0' where id=2; -update noar tt set v0='WRV5NIK57C8HU' where id=2; -update noar ti set v0='WRV5NIK57C8HU' where id=2; -update noar tt set b1='3NDY8RJLSAADPNBQRDDBD4PM333R1B' where id=2; -update noar ti set b1='3NDY8RJLSAADPNBQRDDBD4PM333R1B' where id=2; -update noar tt set v0='LSG95QU89O8GKJ9DDM32S561JXNR3T4B' where id=2; -update noar ti set v0='LSG95QU89O8GKJ9DDM32S561JXNR3T4B' where id=2; -update noar tt set b2='4UJ0BCHI3FUXJVN2H7Z2I7YN' where id=2; -update noar ti set b2='4UJ0BCHI3FUXJVN2H7Z2I7YN' where id=2; -update noar tt set v0='WEBJ' where id=3; -update noar ti set v0='WEBJ' where id=3; -update noar tt set b0='AG62V7OP8YSOGHHTBRDD9NH90M' where id=3; -update noar ti set b0='AG62V7OP8YSOGHHTBRDD9NH90M' where id=3; -update noar tt set v0='I9OFH' where id=3; -update noar ti set v0='I9OFH' where id=3; -update noar tt set b1='70D7UOBABGBCPMYGAL53EBJXWLMT' where id=3; -update noar ti set b1='70D7UOBABGBCPMYGAL53EBJXWLMT' where id=3; -update noar tt set v0='MV0BE2G5T3ZH69PLRH99KH6G4J8' where id=3; -update noar ti set v0='MV0BE2G5T3ZH69PLRH99KH6G4J8' where id=3; -update noar tt set b2='2BHYFO5VOCEO986NH4E6W77ZL6' where id=3; -update noar ti set b2='2BHYFO5VOCEO986NH4E6W77ZL6' where id=3; -update noar tt set v0='EF6DN0FYBD59BGLGQR' where id=4; -update noar ti set v0='EF6DN0FYBD59BGLGQR' where id=4; -update noar tt set b0='DYUOA3M5' where id=4; -update noar ti set b0='DYUOA3M5' where id=4; -update noar tt set v0='VKZ0EFQ4IB2NMUY1PSE43U2Q' where id=4; -update noar ti set v0='VKZ0EFQ4IB2NMUY1PSE43U2Q' where id=4; -update noar tt set b1='9XYPYQZQ360YTCSMHAK1HHNCL20POR' where id=4; -update noar ti set b1='9XYPYQZQ360YTCSMHAK1HHNCL20POR' where id=4; -update noar tt set v0='F372VYQTVDPGYJ6YJEWN1BP7OIMUUI' where id=4; -update noar ti set v0='F372VYQTVDPGYJ6YJEWN1BP7OIMUUI' where id=4; -update noar tt set b2='7ZYPK9Q' where id=4; -update noar ti set b2='7ZYPK9Q' where id=4; -update noar tt set v0='69O5' where id=5; -update noar ti set v0='69O5' where id=5; -update noar tt set b0='KSNF96TJ6HMRC9' where id=5; -update noar ti set b0='KSNF96TJ6HMRC9' where id=5; -update noar tt set v0='P0Q54' where id=5; -update noar ti set v0='P0Q54' where id=5; -update noar tt set b1='Z6' where id=5; -update noar ti set b1='Z6' where id=5; -update noar tt set v0='EOS2HQE0FNIXLRPI' where id=5; -update noar ti set v0='EOS2HQE0FNIXLRPI' where id=5; -update noar tt set b2='OY946LJQ3MQ555ZHHJEGPSO2E7ZTP' where id=5; -update noar ti set b2='OY946LJQ3MQ555ZHHJEGPSO2E7ZTP' where id=5; -update noar tt set v0='3JOTKETQCGE27KEUDNJYXXCKSJVUIA' where id=6; -update noar ti set v0='3JOTKETQCGE27KEUDNJYXXCKSJVUIA' where id=6; -update noar tt set b0='YHQDCVI' where id=6; -update noar ti set b0='YHQDCVI' where id=6; -update noar tt set v0='O2P00KQLPWIS6XCHJN78EFEUPJX7G8ND' where id=6; -update noar ti set v0='O2P00KQLPWIS6XCHJN78EFEUPJX7G8ND' where id=6; -update noar tt set b1='KPECLAOA' where id=6; -update noar ti set b1='KPECLAOA' where id=6; -update noar tt set v0='VGSOA0ZC' where id=6; -update noar ti set v0='VGSOA0ZC' where id=6; -update noar tt set b2='RUPIDL7O5UGPY' where id=6; -update noar ti set b2='RUPIDL7O5UGPY' where id=6; -update noar tt set v0='339AJBNX5BLY4OJ9IAQWQY' where id=7; -update noar ti set v0='339AJBNX5BLY4OJ9IAQWQY' where id=7; -update noar tt set b0='OZZNDH9KJ9NONF322ONYO3R7' where id=7; -update noar ti set b0='OZZNDH9KJ9NONF322ONYO3R7' where id=7; -update noar tt set v0='96' where id=7; -update noar ti set v0='96' where id=7; -update noar tt set b1='5REZ7R8JAZGCKN86H3' where id=7; -update noar ti set b1='5REZ7R8JAZGCKN86H3' where id=7; -update noar tt set v0='Z3FX9XT7MR3JIMCS8' where id=7; -update noar ti set v0='Z3FX9XT7MR3JIMCS8' where id=7; -update noar tt set b2='UJSTK5XOL5ZBFOSLUZX5N' where id=7; -update noar ti set b2='UJSTK5XOL5ZBFOSLUZX5N' where id=7; -update noar tt set v0='CGCYXO2SQ75H8GGE97SIO' where id=8; -update noar ti set v0='CGCYXO2SQ75H8GGE97SIO' where id=8; -update noar tt set b0='TGFIKBRLL' where id=8; -update noar ti set b0='TGFIKBRLL' where id=8; -update noar tt set v0='HRFE9X742SWXI0L1KSK7XUIN' where id=8; -update noar ti set v0='HRFE9X742SWXI0L1KSK7XUIN' where id=8; -update noar tt set b1='9ECT3260X69' where id=8; -update noar ti set b1='9ECT3260X69' where id=8; -update noar tt set v0='EIHZ1DCJ5MRT' where id=8; -update noar ti set v0='EIHZ1DCJ5MRT' where id=8; -update noar tt set b2='S7FMCMBWO' where id=8; -update noar ti set b2='S7FMCMBWO' where id=8; -update noar tt set v0='2NPSJYS8LQ' where id=9; -update noar ti set v0='2NPSJYS8LQ' where id=9; -update noar tt set b0='AHUV6N' where id=9; -update noar ti set b0='AHUV6N' where id=9; -update noar tt set v0='NBSMH39QV6CFZSCTWNTOIC3MGHISMRSJ' where id=9; -update noar ti set v0='NBSMH39QV6CFZSCTWNTOIC3MGHISMRSJ' where id=9; -update noar tt set b1='7VQZ487C6NWN02T6DJ6YI4BF' where id=9; -update noar ti set b1='7VQZ487C6NWN02T6DJ6YI4BF' where id=9; -update noar tt set v0='SAOX07KTBIV040IBBWIID8' where id=9; -update noar ti set v0='SAOX07KTBIV040IBBWIID8' where id=9; -update noar tt set b2='0937' where id=9; -update noar ti set b2='0937' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 blob null, - b1 tinyblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='JQZKF4OF4I1HY5' where id=1; -update noar ti set v0='JQZKF4OF4I1HY5' where id=1; -update noar tt set b0='QO3A' where id=1; -update noar ti set b0='QO3A' where id=1; -update noar tt set v0='64Q02FVIQJXQ5V' where id=1; -update noar ti set v0='64Q02FVIQJXQ5V' where id=1; -update noar tt set b1='YISKHI6URNRY0C22XGVH997WJ9HJROT' where id=1; -update noar ti set b1='YISKHI6URNRY0C22XGVH997WJ9HJROT' where id=1; -update noar tt set v0='CKKZN' where id=1; -update noar ti set v0='CKKZN' where id=1; -update noar tt set b2='HS' where id=1; -update noar ti set b2='HS' where id=1; -update noar tt set v0='T62APNUZGXYDEDGZW' where id=2; -update noar ti set v0='T62APNUZGXYDEDGZW' where id=2; -update noar tt set b0='S0PZCLTW' where id=2; -update noar ti set b0='S0PZCLTW' where id=2; -update noar tt set v0='6BZDJEJBTOQB1BB8ATW6WTP2' where id=2; -update noar ti set v0='6BZDJEJBTOQB1BB8ATW6WTP2' where id=2; -update noar tt set b1='4KZSC0E8W5VVPG1EK3R9FO8' where id=2; -update noar ti set b1='4KZSC0E8W5VVPG1EK3R9FO8' where id=2; -update noar tt set v0='3APFGA41351E35UKW9GNYR8' where id=2; -update noar ti set v0='3APFGA41351E35UKW9GNYR8' where id=2; -update noar tt set b2='FUN2K93OFXEZWLSCQ46N' where id=2; -update noar ti set b2='FUN2K93OFXEZWLSCQ46N' where id=2; -update noar tt set v0='3RBPJYLTC9Z' where id=3; -update noar ti set v0='3RBPJYLTC9Z' where id=3; -update noar tt set b0='DOYCKN0TFXCL63SG2HTVD3V' where id=3; -update noar ti set b0='DOYCKN0TFXCL63SG2HTVD3V' where id=3; -update noar tt set v0='85KW55IBZ6J2DLA3N5P7' where id=3; -update noar ti set v0='85KW55IBZ6J2DLA3N5P7' where id=3; -update noar tt set b1='DBVAH1A0V21O' where id=3; -update noar ti set b1='DBVAH1A0V21O' where id=3; -update noar tt set v0='HPK4HGY6BR9O5AZMC5HIU' where id=3; -update noar ti set v0='HPK4HGY6BR9O5AZMC5HIU' where id=3; -update noar tt set b2='YIPB2XUE3E42CFP9S8QNMEB8P' where id=3; -update noar ti set b2='YIPB2XUE3E42CFP9S8QNMEB8P' where id=3; -update noar tt set v0='DTU60U3L8B3GS3TVQ1CEKNOPP6' where id=4; -update noar ti set v0='DTU60U3L8B3GS3TVQ1CEKNOPP6' where id=4; -update noar tt set b0='WQFEFIK' where id=4; -update noar ti set b0='WQFEFIK' where id=4; -update noar tt set v0='N' where id=4; -update noar ti set v0='N' where id=4; -update noar tt set b1='G1P' where id=4; -update noar ti set b1='G1P' where id=4; -update noar tt set v0='LVG069PMOYPFNUJJ' where id=4; -update noar ti set v0='LVG069PMOYPFNUJJ' where id=4; -update noar tt set b2='17N4KB5YXDCAFFPN6VR' where id=4; -update noar ti set b2='17N4KB5YXDCAFFPN6VR' where id=4; -update noar tt set v0='NAL2IETRW4AW' where id=5; -update noar ti set v0='NAL2IETRW4AW' where id=5; -update noar tt set b0='27CI4KSS9ARHQVVM5K7' where id=5; -update noar ti set b0='27CI4KSS9ARHQVVM5K7' where id=5; -update noar tt set v0='AQ' where id=5; -update noar ti set v0='AQ' where id=5; -update noar tt set b1='0WWOL64LIXTQAP' where id=5; -update noar ti set b1='0WWOL64LIXTQAP' where id=5; -update noar tt set v0='W9IN034RPM5EEE8616Y3HRMNCRQ' where id=5; -update noar ti set v0='W9IN034RPM5EEE8616Y3HRMNCRQ' where id=5; -update noar tt set b2='9KEK93ZX' where id=5; -update noar ti set b2='9KEK93ZX' where id=5; -update noar tt set v0='PT' where id=6; -update noar ti set v0='PT' where id=6; -update noar tt set b0='HSCGIIQLA7HDBXD8OD76BLBL71NR1V' where id=6; -update noar ti set b0='HSCGIIQLA7HDBXD8OD76BLBL71NR1V' where id=6; -update noar tt set v0='ORYP20BYRK5WZMCT0NLRXM17SQUV' where id=6; -update noar ti set v0='ORYP20BYRK5WZMCT0NLRXM17SQUV' where id=6; -update noar tt set b1='1RC8HR6W8PEX1ESIJKI59' where id=6; -update noar ti set b1='1RC8HR6W8PEX1ESIJKI59' where id=6; -update noar tt set v0='Q3BOBVB4JTSSW9SA' where id=6; -update noar ti set v0='Q3BOBVB4JTSSW9SA' where id=6; -update noar tt set b2='J' where id=6; -update noar ti set b2='J' where id=6; -update noar tt set v0='D1EFQ3' where id=7; -update noar ti set v0='D1EFQ3' where id=7; -update noar tt set b0='BQE81RMMANSTYPPJKMJY' where id=7; -update noar ti set b0='BQE81RMMANSTYPPJKMJY' where id=7; -update noar tt set v0='7D52MJWV22ALOWVGQ21AEQTGOV5' where id=7; -update noar ti set v0='7D52MJWV22ALOWVGQ21AEQTGOV5' where id=7; -update noar tt set b1='MIDSBIHN0PG0Z831SUT5SPAA' where id=7; -update noar ti set b1='MIDSBIHN0PG0Z831SUT5SPAA' where id=7; -update noar tt set v0='UNTWDR' where id=7; -update noar ti set v0='UNTWDR' where id=7; -update noar tt set b2='K' where id=7; -update noar ti set b2='K' where id=7; -update noar tt set v0='AGY8E' where id=8; -update noar ti set v0='AGY8E' where id=8; -update noar tt set b0='TZCZEWYVWF5' where id=8; -update noar ti set b0='TZCZEWYVWF5' where id=8; -update noar tt set v0='YGA1WRO' where id=8; -update noar ti set v0='YGA1WRO' where id=8; -update noar tt set b1='QEZUWVP5Z62YHFHZDK' where id=8; -update noar ti set b1='QEZUWVP5Z62YHFHZDK' where id=8; -update noar tt set v0='86RZ' where id=8; -update noar ti set v0='86RZ' where id=8; -update noar tt set b2='0RWFZ7TPE63V6EEGKUYDHNHKL9VC' where id=8; -update noar ti set b2='0RWFZ7TPE63V6EEGKUYDHNHKL9VC' where id=8; -update noar tt set v0='DJLR7ZN66VHP5SJ52T1SJHXT6FFA' where id=9; -update noar ti set v0='DJLR7ZN66VHP5SJ52T1SJHXT6FFA' where id=9; -update noar tt set b0='ZXE0OG6EKSIR6J7Q1J0O2L5L' where id=9; -update noar ti set b0='ZXE0OG6EKSIR6J7Q1J0O2L5L' where id=9; -update noar tt set v0='F2XC3WBW3HC3RJNH' where id=9; -update noar ti set v0='F2XC3WBW3HC3RJNH' where id=9; -update noar tt set b1='F0I7I9R5XRXEH7WLIV00HC' where id=9; -update noar ti set b1='F0I7I9R5XRXEH7WLIV00HC' where id=9; -update noar tt set v0='T2NMZ9CR6MSWJ1I4D8N0IX8' where id=9; -update noar ti set v0='T2NMZ9CR6MSWJ1I4D8N0IX8' where id=9; -update noar tt set b2='XPFUETP3' where id=9; -update noar ti set b2='XPFUETP3' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 blob null, - b1 tinyblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='AQKVGZ6XDYVP' where id=1; -update noar ti set v0='AQKVGZ6XDYVP' where id=1; -update noar tt set b0='RBDJUEY5' where id=1; -update noar ti set b0='RBDJUEY5' where id=1; -update noar tt set v0='CQT4S9WM3IQUH3V40V4BW51WM' where id=1; -update noar ti set v0='CQT4S9WM3IQUH3V40V4BW51WM' where id=1; -update noar tt set b1='UQD5Y83TYJAJKZBJHMR171ZLSM' where id=1; -update noar ti set b1='UQD5Y83TYJAJKZBJHMR171ZLSM' where id=1; -update noar tt set v0='52K1R59WZ76P2GNL' where id=1; -update noar ti set v0='52K1R59WZ76P2GNL' where id=1; -update noar tt set b2='28RU6X7TPTCVKG8UMNFF36P' where id=1; -update noar ti set b2='28RU6X7TPTCVKG8UMNFF36P' where id=1; -update noar tt set v0='36AINGN9ZBYYFONO3JMRVXK4' where id=2; -update noar ti set v0='36AINGN9ZBYYFONO3JMRVXK4' where id=2; -update noar tt set b0='YIYS3UU6H' where id=2; -update noar ti set b0='YIYS3UU6H' where id=2; -update noar tt set v0='M1SYAHOU0961UPPGEXP' where id=2; -update noar ti set v0='M1SYAHOU0961UPPGEXP' where id=2; -update noar tt set b1='TJ81E5JY0X7XZJCDIE' where id=2; -update noar ti set b1='TJ81E5JY0X7XZJCDIE' where id=2; -update noar tt set v0='LG0TMT' where id=2; -update noar ti set v0='LG0TMT' where id=2; -update noar tt set b2='07ITRA1Y' where id=2; -update noar ti set b2='07ITRA1Y' where id=2; -update noar tt set v0='68XHZKEH98X4TKD' where id=3; -update noar ti set v0='68XHZKEH98X4TKD' where id=3; -update noar tt set b0='Q1X1SSM4P' where id=3; -update noar ti set b0='Q1X1SSM4P' where id=3; -update noar tt set v0='BHUGLWAG9IM' where id=3; -update noar ti set v0='BHUGLWAG9IM' where id=3; -update noar tt set b1='OR1TW6KTV4R7LM' where id=3; -update noar ti set b1='OR1TW6KTV4R7LM' where id=3; -update noar tt set v0='0361U4' where id=3; -update noar ti set v0='0361U4' where id=3; -update noar tt set b2='IH732A3V2MGGAGU8KKA8W' where id=3; -update noar ti set b2='IH732A3V2MGGAGU8KKA8W' where id=3; -update noar tt set v0='11EH8WAD5X0C6D8L3I3S' where id=4; -update noar ti set v0='11EH8WAD5X0C6D8L3I3S' where id=4; -update noar tt set b0='QVW7DDBC5' where id=4; -update noar ti set b0='QVW7DDBC5' where id=4; -update noar tt set v0='J0VYFHP35ATPVPKTCTJA9T2MQ09SW2' where id=4; -update noar ti set v0='J0VYFHP35ATPVPKTCTJA9T2MQ09SW2' where id=4; -update noar tt set b1='NHRQEPGF65BAAFBM317QIHWZ5T' where id=4; -update noar ti set b1='NHRQEPGF65BAAFBM317QIHWZ5T' where id=4; -update noar tt set v0='G0WOKPSIH2WJM2KP74CNE4VG64DD7MKT' where id=4; -update noar ti set v0='G0WOKPSIH2WJM2KP74CNE4VG64DD7MKT' where id=4; -update noar tt set b2='2UREJR0VTFHVY1Y8BW' where id=4; -update noar ti set b2='2UREJR0VTFHVY1Y8BW' where id=4; -update noar tt set v0='PEIABRO5VVBGRX2L556BFPJCC' where id=5; -update noar ti set v0='PEIABRO5VVBGRX2L556BFPJCC' where id=5; -update noar tt set b0='S0N67UTCBDKPWZLX0' where id=5; -update noar ti set b0='S0N67UTCBDKPWZLX0' where id=5; -update noar tt set v0='6Y6RNTSBC74' where id=5; -update noar ti set v0='6Y6RNTSBC74' where id=5; -update noar tt set b1='2JOF0P' where id=5; -update noar ti set b1='2JOF0P' where id=5; -update noar tt set v0='O9VXISL7JSAS2SA4VVS37CTC' where id=5; -update noar ti set v0='O9VXISL7JSAS2SA4VVS37CTC' where id=5; -update noar tt set b2='IAXLA99RXUBLC266TWBAMA5WHDXAA2ZD' where id=5; -update noar ti set b2='IAXLA99RXUBLC266TWBAMA5WHDXAA2ZD' where id=5; -update noar tt set v0='306AFPW' where id=6; -update noar ti set v0='306AFPW' where id=6; -update noar tt set b0='N5CP6VWDJJ9Y2JEJUPASJECMTXU6AMF' where id=6; -update noar ti set b0='N5CP6VWDJJ9Y2JEJUPASJECMTXU6AMF' where id=6; -update noar tt set v0='K1LM42BJW3EZWKU6' where id=6; -update noar ti set v0='K1LM42BJW3EZWKU6' where id=6; -update noar tt set b1='A3T7DGBY857NX1S' where id=6; -update noar ti set b1='A3T7DGBY857NX1S' where id=6; -update noar tt set v0='2U14QTNCNU2' where id=6; -update noar ti set v0='2U14QTNCNU2' where id=6; -update noar tt set b2='Z5BKVUHN6EDLVIT7UT9TUJK3' where id=6; -update noar ti set b2='Z5BKVUHN6EDLVIT7UT9TUJK3' where id=6; -update noar tt set v0='Q39KXSZKKW6W7ZVV' where id=7; -update noar ti set v0='Q39KXSZKKW6W7ZVV' where id=7; -update noar tt set b0='DY7E0' where id=7; -update noar ti set b0='DY7E0' where id=7; -update noar tt set v0='BP02QLIKA3GSK9IBRM0O4YI1' where id=7; -update noar ti set v0='BP02QLIKA3GSK9IBRM0O4YI1' where id=7; -update noar tt set b1='JZWJW34TDPV4NDSPK59L6' where id=7; -update noar ti set b1='JZWJW34TDPV4NDSPK59L6' where id=7; -update noar tt set v0='AMSO269EUQLFWBS1H6' where id=7; -update noar ti set v0='AMSO269EUQLFWBS1H6' where id=7; -update noar tt set b2='PSOXACLVZFR1LKX4LE7WIUSHWCS6U6R8' where id=7; -update noar ti set b2='PSOXACLVZFR1LKX4LE7WIUSHWCS6U6R8' where id=7; -update noar tt set v0='NF1976' where id=8; -update noar ti set v0='NF1976' where id=8; -update noar tt set b0='L2ADQY8GAIKROUZW74NATT7HE3CW6YC' where id=8; -update noar ti set b0='L2ADQY8GAIKROUZW74NATT7HE3CW6YC' where id=8; -update noar tt set v0='25E7C4AMBKJ6Q' where id=8; -update noar ti set v0='25E7C4AMBKJ6Q' where id=8; -update noar tt set b1='DAX' where id=8; -update noar ti set b1='DAX' where id=8; -update noar tt set v0='2BF186R9DC15VUHUZ4IWAICEQT' where id=8; -update noar ti set v0='2BF186R9DC15VUHUZ4IWAICEQT' where id=8; -update noar tt set b2='IETXCKKXSE81ZDM04A4V5J13PH' where id=8; -update noar ti set b2='IETXCKKXSE81ZDM04A4V5J13PH' where id=8; -update noar tt set v0='LC3OYXYDW26M0QJ8RC2F2' where id=9; -update noar ti set v0='LC3OYXYDW26M0QJ8RC2F2' where id=9; -update noar tt set b0='MOA1WS3U3YSSLT05' where id=9; -update noar ti set b0='MOA1WS3U3YSSLT05' where id=9; -update noar tt set v0='DFO4RL9FOZ9BW6TYMP58GSJJW6' where id=9; -update noar ti set v0='DFO4RL9FOZ9BW6TYMP58GSJJW6' where id=9; -update noar tt set b1='Z5HQE' where id=9; -update noar ti set b1='Z5HQE' where id=9; -update noar tt set v0='AFB3ADFRP7H' where id=9; -update noar ti set v0='AFB3ADFRP7H' where id=9; -update noar tt set b2='YLQTW6457I0M05Y5A4NZG6KE' where id=9; -update noar ti set b2='YLQTW6457I0M05Y5A4NZG6KE' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 blob not null, - b1 tinyblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='1QFLEOZY95V7GPXG' where id=1; -update noar ti set v0='1QFLEOZY95V7GPXG' where id=1; -update noar tt set b0='5N8T3FBDVP3D54MDD8VDP' where id=1; -update noar ti set b0='5N8T3FBDVP3D54MDD8VDP' where id=1; -update noar tt set v0='ES2HN9AFEBGV' where id=1; -update noar ti set v0='ES2HN9AFEBGV' where id=1; -update noar tt set b1='65WISW1WR30DZZN2OX' where id=1; -update noar ti set b1='65WISW1WR30DZZN2OX' where id=1; -update noar tt set v0='XEQRFC411G4VTSM0' where id=1; -update noar ti set v0='XEQRFC411G4VTSM0' where id=1; -update noar tt set b2='HBCU' where id=1; -update noar ti set b2='HBCU' where id=1; -update noar tt set v0='GEBTNO62' where id=2; -update noar ti set v0='GEBTNO62' where id=2; -update noar tt set b0='VZE9RJMBAWUF81G' where id=2; -update noar ti set b0='VZE9RJMBAWUF81G' where id=2; -update noar tt set v0='H3F3473K1OJG3FJG18' where id=2; -update noar ti set v0='H3F3473K1OJG3FJG18' where id=2; -update noar tt set b1='SNERJMZOPU' where id=2; -update noar ti set b1='SNERJMZOPU' where id=2; -update noar tt set v0='R' where id=2; -update noar ti set v0='R' where id=2; -update noar tt set b2='U6' where id=2; -update noar ti set b2='U6' where id=2; -update noar tt set v0='XXQVK9YR491UB0WIM0A2' where id=3; -update noar ti set v0='XXQVK9YR491UB0WIM0A2' where id=3; -update noar tt set b0='XJYZLCRXTR02LGTY4G' where id=3; -update noar ti set b0='XJYZLCRXTR02LGTY4G' where id=3; -update noar tt set v0='V4NMM9TEVFDH5OQ5C8Q05B' where id=3; -update noar ti set v0='V4NMM9TEVFDH5OQ5C8Q05B' where id=3; -update noar tt set b1='YYSUSK7XQJ' where id=3; -update noar ti set b1='YYSUSK7XQJ' where id=3; -update noar tt set v0='L7ZD' where id=3; -update noar ti set v0='L7ZD' where id=3; -update noar tt set b2='NCDYVN0FZ95CJU2O25H9M433RZYYZ' where id=3; -update noar ti set b2='NCDYVN0FZ95CJU2O25H9M433RZYYZ' where id=3; -update noar tt set v0='O7N' where id=4; -update noar ti set v0='O7N' where id=4; -update noar tt set b0='V68GBFWGO496QSP6TRUVUKQNVC' where id=4; -update noar ti set b0='V68GBFWGO496QSP6TRUVUKQNVC' where id=4; -update noar tt set v0='C55665A2VZVF' where id=4; -update noar ti set v0='C55665A2VZVF' where id=4; -update noar tt set b1='SHNHOWL5ZEAWGT57WH5MC' where id=4; -update noar ti set b1='SHNHOWL5ZEAWGT57WH5MC' where id=4; -update noar tt set v0='ILANGQBVR0U' where id=4; -update noar ti set v0='ILANGQBVR0U' where id=4; -update noar tt set b2='IGIUA0GJ9' where id=4; -update noar ti set b2='IGIUA0GJ9' where id=4; -update noar tt set v0='PM9L27OCD0NDFID' where id=5; -update noar ti set v0='PM9L27OCD0NDFID' where id=5; -update noar tt set b0='W3PD8K8' where id=5; -update noar ti set b0='W3PD8K8' where id=5; -update noar tt set v0='5QKI33GKH9DZVQZ' where id=5; -update noar ti set v0='5QKI33GKH9DZVQZ' where id=5; -update noar tt set b1='AORLPK' where id=5; -update noar ti set b1='AORLPK' where id=5; -update noar tt set v0='8AHJM7ONR1IGKZYSV89NC3WDY86FD1XG' where id=5; -update noar ti set v0='8AHJM7ONR1IGKZYSV89NC3WDY86FD1XG' where id=5; -update noar tt set b2='VGJUULSPU0B2' where id=5; -update noar ti set b2='VGJUULSPU0B2' where id=5; -update noar tt set v0='SOGNKNK0JTPD' where id=6; -update noar ti set v0='SOGNKNK0JTPD' where id=6; -update noar tt set b0='O' where id=6; -update noar ti set b0='O' where id=6; -update noar tt set v0='VGR7K16GHINUZDF97K' where id=6; -update noar ti set v0='VGR7K16GHINUZDF97K' where id=6; -update noar tt set b1='T924XEYY82I00GBQ4PHMY9KT3U188' where id=6; -update noar ti set b1='T924XEYY82I00GBQ4PHMY9KT3U188' where id=6; -update noar tt set v0='R76CM1FLVLG' where id=6; -update noar ti set v0='R76CM1FLVLG' where id=6; -update noar tt set b2='9W2K46LUBPULEUD2JHZNDBP1A39X0W' where id=6; -update noar ti set b2='9W2K46LUBPULEUD2JHZNDBP1A39X0W' where id=6; -update noar tt set v0='7PAW' where id=7; -update noar ti set v0='7PAW' where id=7; -update noar tt set b0='RB7HX7LZ0DO7V2H5RMPI' where id=7; -update noar ti set b0='RB7HX7LZ0DO7V2H5RMPI' where id=7; -update noar tt set v0='N2QDKTNJD6B' where id=7; -update noar ti set v0='N2QDKTNJD6B' where id=7; -update noar tt set b1='JIQB3SIBSFD1FRJZM6MD9IP8WM' where id=7; -update noar ti set b1='JIQB3SIBSFD1FRJZM6MD9IP8WM' where id=7; -update noar tt set v0='7XYRR9DB0P8ROJOQEK40HF' where id=7; -update noar ti set v0='7XYRR9DB0P8ROJOQEK40HF' where id=7; -update noar tt set b2='6UYR1QXWADW9P0V' where id=7; -update noar ti set b2='6UYR1QXWADW9P0V' where id=7; -update noar tt set v0='HX8KNLP6SQTLK8YIAD' where id=8; -update noar ti set v0='HX8KNLP6SQTLK8YIAD' where id=8; -update noar tt set b0='5QF1XQY8EEFN5V4AS7OXBQJREBSL9157' where id=8; -update noar ti set b0='5QF1XQY8EEFN5V4AS7OXBQJREBSL9157' where id=8; -update noar tt set v0='5S3RPTKS8623Q9CCIDTOA3O9JXDQD' where id=8; -update noar ti set v0='5S3RPTKS8623Q9CCIDTOA3O9JXDQD' where id=8; -update noar tt set b1='TCVWWZXMSNRC6B9MPP' where id=8; -update noar ti set b1='TCVWWZXMSNRC6B9MPP' where id=8; -update noar tt set v0='TXXCDN4SCMU79E' where id=8; -update noar ti set v0='TXXCDN4SCMU79E' where id=8; -update noar tt set b2='990E4IXCJKWENKUSTQL1NMFLS0HU4ZMG' where id=8; -update noar ti set b2='990E4IXCJKWENKUSTQL1NMFLS0HU4ZMG' where id=8; -update noar tt set v0='QH3JA7DFIKS8FX3G' where id=9; -update noar ti set v0='QH3JA7DFIKS8FX3G' where id=9; -update noar tt set b0='3UBRY77M38VEDTJJD6CSQ5OIG95T6' where id=9; -update noar ti set b0='3UBRY77M38VEDTJJD6CSQ5OIG95T6' where id=9; -update noar tt set v0='ZHNJMTJJNOGV82IWLWDB19AW9H2OFT0B' where id=9; -update noar ti set v0='ZHNJMTJJNOGV82IWLWDB19AW9H2OFT0B' where id=9; -update noar tt set b1='GO0ONIGKPY267V3UN3IP6S9' where id=9; -update noar ti set b1='GO0ONIGKPY267V3UN3IP6S9' where id=9; -update noar tt set v0='3B5Q7PIB4T2' where id=9; -update noar ti set v0='3B5Q7PIB4T2' where id=9; -update noar tt set b2='ATKB1B' where id=9; -update noar ti set b2='ATKB1B' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 blob not null, - b1 tinyblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='OI7J12' where id=1; -update noar ti set v0='OI7J12' where id=1; -update noar tt set b0='L2H2X0Q65JS27' where id=1; -update noar ti set b0='L2H2X0Q65JS27' where id=1; -update noar tt set v0='KG' where id=1; -update noar ti set v0='KG' where id=1; -update noar tt set b1='CURZAL8QB5H1I7CVQCMXRW4O' where id=1; -update noar ti set b1='CURZAL8QB5H1I7CVQCMXRW4O' where id=1; -update noar tt set v0='Y8ZTRWBC4711' where id=1; -update noar ti set v0='Y8ZTRWBC4711' where id=1; -update noar tt set b2='MTZ1GXBKO8OT70JR7' where id=1; -update noar ti set b2='MTZ1GXBKO8OT70JR7' where id=1; -update noar tt set v0='9II7AO8CJZ0IK9EH' where id=2; -update noar ti set v0='9II7AO8CJZ0IK9EH' where id=2; -update noar tt set b0='SZUCK76WLQH5Y6VMV546G50KH0251H9B' where id=2; -update noar ti set b0='SZUCK76WLQH5Y6VMV546G50KH0251H9B' where id=2; -update noar tt set v0='1LPE3' where id=2; -update noar ti set v0='1LPE3' where id=2; -update noar tt set b1='SQCT' where id=2; -update noar ti set b1='SQCT' where id=2; -update noar tt set v0='LOHJ0T' where id=2; -update noar ti set v0='LOHJ0T' where id=2; -update noar tt set b2='6VNDAK651XOCRRXG8J8WHXY2' where id=2; -update noar ti set b2='6VNDAK651XOCRRXG8J8WHXY2' where id=2; -update noar tt set v0='O1A9LK789AAVXFTZ2OTM' where id=3; -update noar ti set v0='O1A9LK789AAVXFTZ2OTM' where id=3; -update noar tt set b0='ZAB81UFY4Y62I5L1V' where id=3; -update noar ti set b0='ZAB81UFY4Y62I5L1V' where id=3; -update noar tt set v0='Y4AMEX5NGPS7YYPM8AKV0P3TQJ3U1D' where id=3; -update noar ti set v0='Y4AMEX5NGPS7YYPM8AKV0P3TQJ3U1D' where id=3; -update noar tt set b1='5N4EHOOG7S7MPJI0100TAILLME6' where id=3; -update noar ti set b1='5N4EHOOG7S7MPJI0100TAILLME6' where id=3; -update noar tt set v0='O' where id=3; -update noar ti set v0='O' where id=3; -update noar tt set b2='NA4BCU1Z2' where id=3; -update noar ti set b2='NA4BCU1Z2' where id=3; -update noar tt set v0='AOTVEXN0CF7VRDIDW64TV0H' where id=4; -update noar ti set v0='AOTVEXN0CF7VRDIDW64TV0H' where id=4; -update noar tt set b0='ALA3NK7N8WC7GP2CBRI7CX1V3' where id=4; -update noar ti set b0='ALA3NK7N8WC7GP2CBRI7CX1V3' where id=4; -update noar tt set v0='AR5KO486K' where id=4; -update noar ti set v0='AR5KO486K' where id=4; -update noar tt set b1='RCR3YKANN' where id=4; -update noar ti set b1='RCR3YKANN' where id=4; -update noar tt set v0='TLGJC19GVS6SLFK1O' where id=4; -update noar ti set v0='TLGJC19GVS6SLFK1O' where id=4; -update noar tt set b2='X3J231' where id=4; -update noar ti set b2='X3J231' where id=4; -update noar tt set v0='QMM8LAQS' where id=5; -update noar ti set v0='QMM8LAQS' where id=5; -update noar tt set b0='J2E7NVBTONPU6V425LE' where id=5; -update noar ti set b0='J2E7NVBTONPU6V425LE' where id=5; -update noar tt set v0='3EZNJ2PFM27PC1P26I9VODKBABQ0E9YW' where id=5; -update noar ti set v0='3EZNJ2PFM27PC1P26I9VODKBABQ0E9YW' where id=5; -update noar tt set b1='W2HSFYASIJKDGOUBVXFQMFNZ' where id=5; -update noar ti set b1='W2HSFYASIJKDGOUBVXFQMFNZ' where id=5; -update noar tt set v0='ZQSOMD43GFMFGJJ' where id=5; -update noar ti set v0='ZQSOMD43GFMFGJJ' where id=5; -update noar tt set b2='I6SI6YPOEPLT3GHC9707EM0FGVY' where id=5; -update noar ti set b2='I6SI6YPOEPLT3GHC9707EM0FGVY' where id=5; -update noar tt set v0='8MRACZEDAMCELBDHMVHGOPDR6XNVQXRK' where id=6; -update noar ti set v0='8MRACZEDAMCELBDHMVHGOPDR6XNVQXRK' where id=6; -update noar tt set b0='4ZEO72K7O4V37WKJB3J0QZ' where id=6; -update noar ti set b0='4ZEO72K7O4V37WKJB3J0QZ' where id=6; -update noar tt set v0='2K2LPBHY5XRWRFB64VF3RC7NPU' where id=6; -update noar ti set v0='2K2LPBHY5XRWRFB64VF3RC7NPU' where id=6; -update noar tt set b1='B' where id=6; -update noar ti set b1='B' where id=6; -update noar tt set v0='2RUM' where id=6; -update noar ti set v0='2RUM' where id=6; -update noar tt set b2='8Y' where id=6; -update noar ti set b2='8Y' where id=6; -update noar tt set v0='2AHJ44M79LR' where id=7; -update noar ti set v0='2AHJ44M79LR' where id=7; -update noar tt set b0='B3QRQU6XO' where id=7; -update noar ti set b0='B3QRQU6XO' where id=7; -update noar tt set v0='ZQMAN6W9DQO' where id=7; -update noar ti set v0='ZQMAN6W9DQO' where id=7; -update noar tt set b1='V78MZZW3CQBX0BZY' where id=7; -update noar ti set b1='V78MZZW3CQBX0BZY' where id=7; -update noar tt set v0='LJFDJPSEHKCBR1UQMLJC' where id=7; -update noar ti set v0='LJFDJPSEHKCBR1UQMLJC' where id=7; -update noar tt set b2='Y4DKDBXP7CN1XAH4G' where id=7; -update noar ti set b2='Y4DKDBXP7CN1XAH4G' where id=7; -update noar tt set v0='IK7AZ5XBBROYQ8F4IOC129ZJ' where id=8; -update noar ti set v0='IK7AZ5XBBROYQ8F4IOC129ZJ' where id=8; -update noar tt set b0='XT' where id=8; -update noar ti set b0='XT' where id=8; -update noar tt set v0='CTTTOX4FXK9Y3034TS4E7IDHKC' where id=8; -update noar ti set v0='CTTTOX4FXK9Y3034TS4E7IDHKC' where id=8; -update noar tt set b1='5UIAANG50UDRGFN' where id=8; -update noar ti set b1='5UIAANG50UDRGFN' where id=8; -update noar tt set v0='G' where id=8; -update noar ti set v0='G' where id=8; -update noar tt set b2='B' where id=8; -update noar ti set b2='B' where id=8; -update noar tt set v0='8TG7Z7T1' where id=9; -update noar ti set v0='8TG7Z7T1' where id=9; -update noar tt set b0='RDNYBT9KF8LK3CQ3OSZ' where id=9; -update noar ti set b0='RDNYBT9KF8LK3CQ3OSZ' where id=9; -update noar tt set v0='SAURT414' where id=9; -update noar ti set v0='SAURT414' where id=9; -update noar tt set b1='1UCRL3PWIYG' where id=9; -update noar ti set b1='1UCRL3PWIYG' where id=9; -update noar tt set v0='WJ3DK1' where id=9; -update noar ti set v0='WJ3DK1' where id=9; -update noar tt set b2='NYAZJ5HH60OQ3DS05LEXNKHDA2KH' where id=9; -update noar ti set b2='NYAZJ5HH60OQ3DS05LEXNKHDA2KH' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 blob null, - b1 tinyblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='HL08ND7Q6DMT3OHAN0JXSEN' where id=1; -update noar ti set v0='HL08ND7Q6DMT3OHAN0JXSEN' where id=1; -update noar tt set b0='DP58QF' where id=1; -update noar ti set b0='DP58QF' where id=1; -update noar tt set v0='TOBFDTZ' where id=1; -update noar ti set v0='TOBFDTZ' where id=1; -update noar tt set b1='C0T1VR7XJY2I5TZPSAWH6QP5SY5C' where id=1; -update noar ti set b1='C0T1VR7XJY2I5TZPSAWH6QP5SY5C' where id=1; -update noar tt set v0='O6M533' where id=1; -update noar ti set v0='O6M533' where id=1; -update noar tt set b2='J1QCYXJOTCHW2TG6ER49E3I8' where id=1; -update noar ti set b2='J1QCYXJOTCHW2TG6ER49E3I8' where id=1; -update noar tt set v0='1MLG4QUYLS5' where id=2; -update noar ti set v0='1MLG4QUYLS5' where id=2; -update noar tt set b0='JIZF' where id=2; -update noar ti set b0='JIZF' where id=2; -update noar tt set v0='KKZH' where id=2; -update noar ti set v0='KKZH' where id=2; -update noar tt set b1='VTY' where id=2; -update noar ti set b1='VTY' where id=2; -update noar tt set v0='JCIDR0Q' where id=2; -update noar ti set v0='JCIDR0Q' where id=2; -update noar tt set b2='AY783DZSX' where id=2; -update noar ti set b2='AY783DZSX' where id=2; -update noar tt set v0='G77SF9DW3V' where id=3; -update noar ti set v0='G77SF9DW3V' where id=3; -update noar tt set b0='W7AKNMEO8ZQRM2HAUI' where id=3; -update noar ti set b0='W7AKNMEO8ZQRM2HAUI' where id=3; -update noar tt set v0='GP2RCDN95RFE6Q2FORET3BQBUT' where id=3; -update noar ti set v0='GP2RCDN95RFE6Q2FORET3BQBUT' where id=3; -update noar tt set b1='QQ' where id=3; -update noar ti set b1='QQ' where id=3; -update noar tt set v0='DUXLNXEO' where id=3; -update noar ti set v0='DUXLNXEO' where id=3; -update noar tt set b2='IOXMLUCCUWG9190X' where id=3; -update noar ti set b2='IOXMLUCCUWG9190X' where id=3; -update noar tt set v0='2M8TGMTYRAE35B' where id=4; -update noar ti set v0='2M8TGMTYRAE35B' where id=4; -update noar tt set b0='P367R1OG' where id=4; -update noar ti set b0='P367R1OG' where id=4; -update noar tt set v0='DLUXSXJ' where id=4; -update noar ti set v0='DLUXSXJ' where id=4; -update noar tt set b1='A6DTY8XI3DO6K68I8SPJQD8HNL03K1' where id=4; -update noar ti set b1='A6DTY8XI3DO6K68I8SPJQD8HNL03K1' where id=4; -update noar tt set v0='RG49W6MANVB1NFRV1AKRGV3YGPC83' where id=4; -update noar ti set v0='RG49W6MANVB1NFRV1AKRGV3YGPC83' where id=4; -update noar tt set b2='UX7K28G' where id=4; -update noar ti set b2='UX7K28G' where id=4; -update noar tt set v0='R' where id=5; -update noar ti set v0='R' where id=5; -update noar tt set b0='DG27ZCOVM9WQGA' where id=5; -update noar ti set b0='DG27ZCOVM9WQGA' where id=5; -update noar tt set v0='GEBFAD60Z40LU0OB' where id=5; -update noar ti set v0='GEBFAD60Z40LU0OB' where id=5; -update noar tt set b1='0VDD84SRRGSAKPR6ZD3IJUKSG4' where id=5; -update noar ti set b1='0VDD84SRRGSAKPR6ZD3IJUKSG4' where id=5; -update noar tt set v0='V0MW93JK1OBS0OHC1KL' where id=5; -update noar ti set v0='V0MW93JK1OBS0OHC1KL' where id=5; -update noar tt set b2='WGV3M79OBFRIF18PO3STY4AU3T' where id=5; -update noar ti set b2='WGV3M79OBFRIF18PO3STY4AU3T' where id=5; -update noar tt set v0='X3RM6OE32' where id=6; -update noar ti set v0='X3RM6OE32' where id=6; -update noar tt set b0='PTODADEPHDB9D54DN5' where id=6; -update noar ti set b0='PTODADEPHDB9D54DN5' where id=6; -update noar tt set v0='YTUW1SVWSWCLJ143I20FL07EI0B5N' where id=6; -update noar ti set v0='YTUW1SVWSWCLJ143I20FL07EI0B5N' where id=6; -update noar tt set b1='565W558WPQ6KE3RZ5IXDHDPO' where id=6; -update noar ti set b1='565W558WPQ6KE3RZ5IXDHDPO' where id=6; -update noar tt set v0='TYRUWQTWTTN3HXCL1G5XSKK5ZN0H' where id=6; -update noar ti set v0='TYRUWQTWTTN3HXCL1G5XSKK5ZN0H' where id=6; -update noar tt set b2='19K9FVKBRVDPD6ATLMT0' where id=6; -update noar ti set b2='19K9FVKBRVDPD6ATLMT0' where id=6; -update noar tt set v0='LBIF0X8L' where id=7; -update noar ti set v0='LBIF0X8L' where id=7; -update noar tt set b0='R1985DLV' where id=7; -update noar ti set b0='R1985DLV' where id=7; -update noar tt set v0='V' where id=7; -update noar ti set v0='V' where id=7; -update noar tt set b1='FCQB1KVURQYSAFUL62ZDAC9E' where id=7; -update noar ti set b1='FCQB1KVURQYSAFUL62ZDAC9E' where id=7; -update noar tt set v0='L' where id=7; -update noar ti set v0='L' where id=7; -update noar tt set b2='J9POC94SSMTFZEY15Z' where id=7; -update noar ti set b2='J9POC94SSMTFZEY15Z' where id=7; -update noar tt set v0='0' where id=8; -update noar ti set v0='0' where id=8; -update noar tt set b0='4UZ2QBF6D8U5ONNKYS' where id=8; -update noar ti set b0='4UZ2QBF6D8U5ONNKYS' where id=8; -update noar tt set v0='E6POTG7BV3AWLSIYQKE' where id=8; -update noar ti set v0='E6POTG7BV3AWLSIYQKE' where id=8; -update noar tt set b1='6E1CXYETZS2L7' where id=8; -update noar ti set b1='6E1CXYETZS2L7' where id=8; -update noar tt set v0='Z855OK' where id=8; -update noar ti set v0='Z855OK' where id=8; -update noar tt set b2='M5C40FOV3EWMCRAN6O5RCM8P6H8' where id=8; -update noar ti set b2='M5C40FOV3EWMCRAN6O5RCM8P6H8' where id=8; -update noar tt set v0='LG8FIZK5SBLSHGYRXPZBOL96MI' where id=9; -update noar ti set v0='LG8FIZK5SBLSHGYRXPZBOL96MI' where id=9; -update noar tt set b0='Z3OSHXRBIJKE5WE01HGXZV' where id=9; -update noar ti set b0='Z3OSHXRBIJKE5WE01HGXZV' where id=9; -update noar tt set v0='NF2FK5MYMCVES2EAXB5C4D40T' where id=9; -update noar ti set v0='NF2FK5MYMCVES2EAXB5C4D40T' where id=9; -update noar tt set b1='S3ZSV00T' where id=9; -update noar ti set b1='S3ZSV00T' where id=9; -update noar tt set v0='TWVUKPSZ3Y8HF42O' where id=9; -update noar ti set v0='TWVUKPSZ3Y8HF42O' where id=9; -update noar tt set b2='LH02L19SD27935X7SNF' where id=9; -update noar ti set b2='LH02L19SD27935X7SNF' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 blob null, - b1 tinyblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='037BSCOD6UAEM5LDNURR' where id=1; -update noar ti set v0='037BSCOD6UAEM5LDNURR' where id=1; -update noar tt set b0='4YW3JEUTBJ1D4VHHA7QT9' where id=1; -update noar ti set b0='4YW3JEUTBJ1D4VHHA7QT9' where id=1; -update noar tt set v0='15Z94IRR19WZMA2NHVX1AULREG5L9J8' where id=1; -update noar ti set v0='15Z94IRR19WZMA2NHVX1AULREG5L9J8' where id=1; -update noar tt set b1='W7Z1RXA3ZTUBXYHNA' where id=1; -update noar ti set b1='W7Z1RXA3ZTUBXYHNA' where id=1; -update noar tt set v0='GZ1WBPP8PO7834SJKRADPAUBUJZ' where id=1; -update noar ti set v0='GZ1WBPP8PO7834SJKRADPAUBUJZ' where id=1; -update noar tt set b2='X9USN1N' where id=1; -update noar ti set b2='X9USN1N' where id=1; -update noar tt set v0='DK3OYIWLRKOX5CKZVFQ2TGE8AD' where id=2; -update noar ti set v0='DK3OYIWLRKOX5CKZVFQ2TGE8AD' where id=2; -update noar tt set b0='R5QHA0UTZKDO99Y2ETN0SQT9Q3' where id=2; -update noar ti set b0='R5QHA0UTZKDO99Y2ETN0SQT9Q3' where id=2; -update noar tt set v0='9OL0HBZOGLM13CZRIRDOJOZ1KU9' where id=2; -update noar ti set v0='9OL0HBZOGLM13CZRIRDOJOZ1KU9' where id=2; -update noar tt set b1='8Y33' where id=2; -update noar ti set b1='8Y33' where id=2; -update noar tt set v0='NK45G6F9KE5BE9C855NZ8S' where id=2; -update noar ti set v0='NK45G6F9KE5BE9C855NZ8S' where id=2; -update noar tt set b2='2IGA' where id=2; -update noar ti set b2='2IGA' where id=2; -update noar tt set v0='B67ULN' where id=3; -update noar ti set v0='B67ULN' where id=3; -update noar tt set b0='AF20HMLSZZFY' where id=3; -update noar ti set b0='AF20HMLSZZFY' where id=3; -update noar tt set v0='EL2LYNNMTGW6Z93QJ9B4C' where id=3; -update noar ti set v0='EL2LYNNMTGW6Z93QJ9B4C' where id=3; -update noar tt set b1='303BQITLZ9XIYWUU4L' where id=3; -update noar ti set b1='303BQITLZ9XIYWUU4L' where id=3; -update noar tt set v0='P9' where id=3; -update noar ti set v0='P9' where id=3; -update noar tt set b2='MO77HNMLFU1Q4SLEOTNH' where id=3; -update noar ti set b2='MO77HNMLFU1Q4SLEOTNH' where id=3; -update noar tt set v0='QSUWI3N' where id=4; -update noar ti set v0='QSUWI3N' where id=4; -update noar tt set b0='NROB647Y21JP6ZG8PS2H0PRA2E5FJJ0' where id=4; -update noar ti set b0='NROB647Y21JP6ZG8PS2H0PRA2E5FJJ0' where id=4; -update noar tt set v0='8J' where id=4; -update noar ti set v0='8J' where id=4; -update noar tt set b1='JBZHI9II7Y6YJE3QGWDOMAWW' where id=4; -update noar ti set b1='JBZHI9II7Y6YJE3QGWDOMAWW' where id=4; -update noar tt set v0='SXFNP56G12R0VV' where id=4; -update noar ti set v0='SXFNP56G12R0VV' where id=4; -update noar tt set b2='0J0FS6GRE5QLSG2CP2D93NNEH6AH' where id=4; -update noar ti set b2='0J0FS6GRE5QLSG2CP2D93NNEH6AH' where id=4; -update noar tt set v0='9PXH' where id=5; -update noar ti set v0='9PXH' where id=5; -update noar tt set b0='QZMT5GN9E' where id=5; -update noar ti set b0='QZMT5GN9E' where id=5; -update noar tt set v0='46G0EW2JW00712HPI' where id=5; -update noar ti set v0='46G0EW2JW00712HPI' where id=5; -update noar tt set b1='2TGWA4XA1LPIHAZ2819IK' where id=5; -update noar ti set b1='2TGWA4XA1LPIHAZ2819IK' where id=5; -update noar tt set v0='M2YNH389JT9C6D' where id=5; -update noar ti set v0='M2YNH389JT9C6D' where id=5; -update noar tt set b2='W' where id=5; -update noar ti set b2='W' where id=5; -update noar tt set v0='A8VH18SOSSTZC1I22OU8JZ6PTLEI3M' where id=6; -update noar ti set v0='A8VH18SOSSTZC1I22OU8JZ6PTLEI3M' where id=6; -update noar tt set b0='LQD9' where id=6; -update noar ti set b0='LQD9' where id=6; -update noar tt set v0='AZLK9SC06349JCTZHOZK1O0RM1ATWSDF' where id=6; -update noar ti set v0='AZLK9SC06349JCTZHOZK1O0RM1ATWSDF' where id=6; -update noar tt set b1='IK' where id=6; -update noar ti set b1='IK' where id=6; -update noar tt set v0='M4O' where id=6; -update noar ti set v0='M4O' where id=6; -update noar tt set b2='ORVTI5FU5YL0CR10PYNB1O' where id=6; -update noar ti set b2='ORVTI5FU5YL0CR10PYNB1O' where id=6; -update noar tt set v0='D8KM4C' where id=7; -update noar ti set v0='D8KM4C' where id=7; -update noar tt set b0='Q0LHBY3KXH' where id=7; -update noar ti set b0='Q0LHBY3KXH' where id=7; -update noar tt set v0='6GNDTR367H6K3N6J4SF1IK8Y' where id=7; -update noar ti set v0='6GNDTR367H6K3N6J4SF1IK8Y' where id=7; -update noar tt set b1='VNN6O2OFAPDZNMXFPZOJ' where id=7; -update noar ti set b1='VNN6O2OFAPDZNMXFPZOJ' where id=7; -update noar tt set v0='M66Z6ZUWVD8Z' where id=7; -update noar ti set v0='M66Z6ZUWVD8Z' where id=7; -update noar tt set b2='R1MUU63KRJCD0WVQ' where id=7; -update noar ti set b2='R1MUU63KRJCD0WVQ' where id=7; -update noar tt set v0='VW' where id=8; -update noar ti set v0='VW' where id=8; -update noar tt set b0='23EXKZTUHGSI2XCZJ6QC5' where id=8; -update noar ti set b0='23EXKZTUHGSI2XCZJ6QC5' where id=8; -update noar tt set v0='VM0IYDTL' where id=8; -update noar ti set v0='VM0IYDTL' where id=8; -update noar tt set b1='GHCI5XAPG83KZEFQDWCA7' where id=8; -update noar ti set b1='GHCI5XAPG83KZEFQDWCA7' where id=8; -update noar tt set v0='6W98FHZJ9VG' where id=8; -update noar ti set v0='6W98FHZJ9VG' where id=8; -update noar tt set b2='JKADCJ7TR1DYO4B9P4I' where id=8; -update noar ti set b2='JKADCJ7TR1DYO4B9P4I' where id=8; -update noar tt set v0='DJHM5O81KQ8' where id=9; -update noar ti set v0='DJHM5O81KQ8' where id=9; -update noar tt set b0='4UEFMIAVF93HL7PWE9FRJEWS3YNZTG' where id=9; -update noar ti set b0='4UEFMIAVF93HL7PWE9FRJEWS3YNZTG' where id=9; -update noar tt set v0='WZQ82KSAFPZXW08560P0NEQK6HHE5GSP' where id=9; -update noar ti set v0='WZQ82KSAFPZXW08560P0NEQK6HHE5GSP' where id=9; -update noar tt set b1='ZUY6KSNP80OXP4L4HZDY' where id=9; -update noar ti set b1='ZUY6KSNP80OXP4L4HZDY' where id=9; -update noar tt set v0='PLNEBEM31RDO2VK9QLN0I7MDZ' where id=9; -update noar ti set v0='PLNEBEM31RDO2VK9QLN0I7MDZ' where id=9; -update noar tt set b2='Q9I731ITHUFZM2INAGWF7' where id=9; -update noar ti set b2='Q9I731ITHUFZM2INAGWF7' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 blob not null, - b1 tinyblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='C42GOAGO' where id=1; -update noar ti set v0='C42GOAGO' where id=1; -update noar tt set b0='HN4WLXTY' where id=1; -update noar ti set b0='HN4WLXTY' where id=1; -update noar tt set v0='RH90QRFRIR83WY2C' where id=1; -update noar ti set v0='RH90QRFRIR83WY2C' where id=1; -update noar tt set b1='3B3T5GL6QCLKMR12FV7QJJLO7F' where id=1; -update noar ti set b1='3B3T5GL6QCLKMR12FV7QJJLO7F' where id=1; -update noar tt set v0='R02MJE6VKFBHN' where id=1; -update noar ti set v0='R02MJE6VKFBHN' where id=1; -update noar tt set b2='EVPJ1NGLYQ8MSPRRW0KEE9LQ' where id=1; -update noar ti set b2='EVPJ1NGLYQ8MSPRRW0KEE9LQ' where id=1; -update noar tt set v0='U33E21IEBDSBE26' where id=2; -update noar ti set v0='U33E21IEBDSBE26' where id=2; -update noar tt set b0='T7FN00HFEF7QE6ZNL4MLO9HIXYZHXB' where id=2; -update noar ti set b0='T7FN00HFEF7QE6ZNL4MLO9HIXYZHXB' where id=2; -update noar tt set v0='VFRBHOKTJTZ3FVZUYQI49LEO0KRZKA' where id=2; -update noar ti set v0='VFRBHOKTJTZ3FVZUYQI49LEO0KRZKA' where id=2; -update noar tt set b1='FE5WO0GZ24DV50CQUYH6ER' where id=2; -update noar ti set b1='FE5WO0GZ24DV50CQUYH6ER' where id=2; -update noar tt set v0='1D8H0' where id=2; -update noar ti set v0='1D8H0' where id=2; -update noar tt set b2='2RJ4C' where id=2; -update noar ti set b2='2RJ4C' where id=2; -update noar tt set v0='H6ZSWP2SY6LY7' where id=3; -update noar ti set v0='H6ZSWP2SY6LY7' where id=3; -update noar tt set b0='4L0WJMP0J' where id=3; -update noar ti set b0='4L0WJMP0J' where id=3; -update noar tt set v0='0782FAFVBIYP' where id=3; -update noar ti set v0='0782FAFVBIYP' where id=3; -update noar tt set b1='A' where id=3; -update noar ti set b1='A' where id=3; -update noar tt set v0='4SJ3C724XCY2OO6ZAKL2' where id=3; -update noar ti set v0='4SJ3C724XCY2OO6ZAKL2' where id=3; -update noar tt set b2='AI25R77LVHKWCJ5IT90OHAEGB0HFP' where id=3; -update noar ti set b2='AI25R77LVHKWCJ5IT90OHAEGB0HFP' where id=3; -update noar tt set v0='IP2PHUURA9TG2BYRSIXHN69VCR4' where id=4; -update noar ti set v0='IP2PHUURA9TG2BYRSIXHN69VCR4' where id=4; -update noar tt set b0='7ZKWYQM855KDNU0' where id=4; -update noar ti set b0='7ZKWYQM855KDNU0' where id=4; -update noar tt set v0='8TFKU3MM1UCNXO15' where id=4; -update noar ti set v0='8TFKU3MM1UCNXO15' where id=4; -update noar tt set b1='XOL13FKECZXFKXDTJVSN91MRZT' where id=4; -update noar ti set b1='XOL13FKECZXFKXDTJVSN91MRZT' where id=4; -update noar tt set v0='E' where id=4; -update noar ti set v0='E' where id=4; -update noar tt set b2='VC5PVJIQ0QZBPB4M602' where id=4; -update noar ti set b2='VC5PVJIQ0QZBPB4M602' where id=4; -update noar tt set v0='7IBXIAIYOMS0NEBK5QZSEHHP39J' where id=5; -update noar ti set v0='7IBXIAIYOMS0NEBK5QZSEHHP39J' where id=5; -update noar tt set b0='SSLR2AGMFPWOGIW15HQE' where id=5; -update noar ti set b0='SSLR2AGMFPWOGIW15HQE' where id=5; -update noar tt set v0='PG98BQTP' where id=5; -update noar ti set v0='PG98BQTP' where id=5; -update noar tt set b1='VJG5N8LIIMQ73NVRRU' where id=5; -update noar ti set b1='VJG5N8LIIMQ73NVRRU' where id=5; -update noar tt set v0='SCWX0YJFYQ9RJGWC13IG' where id=5; -update noar ti set v0='SCWX0YJFYQ9RJGWC13IG' where id=5; -update noar tt set b2='0REQYL6GMWRWVDU9GE' where id=5; -update noar ti set b2='0REQYL6GMWRWVDU9GE' where id=5; -update noar tt set v0='0ZOBV9YX' where id=6; -update noar ti set v0='0ZOBV9YX' where id=6; -update noar tt set b0='0MZZ2XV18L' where id=6; -update noar ti set b0='0MZZ2XV18L' where id=6; -update noar tt set v0='TGCUTH6145YS7' where id=6; -update noar ti set v0='TGCUTH6145YS7' where id=6; -update noar tt set b1='0YN7LFXSSES7FEHT4PFVV97Y0QU' where id=6; -update noar ti set b1='0YN7LFXSSES7FEHT4PFVV97Y0QU' where id=6; -update noar tt set v0='LYT0TI8TMD98EL3OCBNBJ774E6CAY51' where id=6; -update noar ti set v0='LYT0TI8TMD98EL3OCBNBJ774E6CAY51' where id=6; -update noar tt set b2='5HV9RBXVH1BPMRVU6ASD8J05ILORL' where id=6; -update noar ti set b2='5HV9RBXVH1BPMRVU6ASD8J05ILORL' where id=6; -update noar tt set v0='W26' where id=7; -update noar ti set v0='W26' where id=7; -update noar tt set b0='WUAVE5EXZ' where id=7; -update noar ti set b0='WUAVE5EXZ' where id=7; -update noar tt set v0='R14ATCQNG2MM8NAW2NM5PDSCOY' where id=7; -update noar ti set v0='R14ATCQNG2MM8NAW2NM5PDSCOY' where id=7; -update noar tt set b1='F08J9BB5D2C7708NZ05I5139R9N' where id=7; -update noar ti set b1='F08J9BB5D2C7708NZ05I5139R9N' where id=7; -update noar tt set v0='48NJAGD6GQMUK6VF3T8VJ' where id=7; -update noar ti set v0='48NJAGD6GQMUK6VF3T8VJ' where id=7; -update noar tt set b2='8SLDH' where id=7; -update noar ti set b2='8SLDH' where id=7; -update noar tt set v0='90WO80HNX4KHRGVLJ3T9' where id=8; -update noar ti set v0='90WO80HNX4KHRGVLJ3T9' where id=8; -update noar tt set b0='30XHF9SZ17MVI35B95ZVJRSLI' where id=8; -update noar ti set b0='30XHF9SZ17MVI35B95ZVJRSLI' where id=8; -update noar tt set v0='ZXOJZJIBRCUSDKQDDVR' where id=8; -update noar ti set v0='ZXOJZJIBRCUSDKQDDVR' where id=8; -update noar tt set b1='IV3M432DY0OK8ICM8P6BSPK' where id=8; -update noar ti set b1='IV3M432DY0OK8ICM8P6BSPK' where id=8; -update noar tt set v0='UXPRYKZRYDP0WQHCTDPBX9DJTD' where id=8; -update noar ti set v0='UXPRYKZRYDP0WQHCTDPBX9DJTD' where id=8; -update noar tt set b2='UMOL55ZDX9P3SMMKIYSFJRGC57C8YCL' where id=8; -update noar ti set b2='UMOL55ZDX9P3SMMKIYSFJRGC57C8YCL' where id=8; -update noar tt set v0='8Y0WO' where id=9; -update noar ti set v0='8Y0WO' where id=9; -update noar tt set b0='JEGB8G10FA01Y1NR2' where id=9; -update noar ti set b0='JEGB8G10FA01Y1NR2' where id=9; -update noar tt set v0='YF6E1B64NLQCTXNBNNXE6LVRLK62GKH8' where id=9; -update noar ti set v0='YF6E1B64NLQCTXNBNNXE6LVRLK62GKH8' where id=9; -update noar tt set b1='6UXFHBXAJ66' where id=9; -update noar ti set b1='6UXFHBXAJ66' where id=9; -update noar tt set v0='1R17PH0MGTJO0Y0IQ4EZW' where id=9; -update noar ti set v0='1R17PH0MGTJO0Y0IQ4EZW' where id=9; -update noar tt set b2='61MNMCQS6KD' where id=9; -update noar ti set b2='61MNMCQS6KD' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 blob not null, - b1 tinyblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='9RS28RMI8FV3XJ8ABG' where id=1; -update noar ti set v0='9RS28RMI8FV3XJ8ABG' where id=1; -update noar tt set b0='BZX6RZKXAZHRXW4FGY4L' where id=1; -update noar ti set b0='BZX6RZKXAZHRXW4FGY4L' where id=1; -update noar tt set v0='Q1B7M163EEEXWA7QH51PWXMF55FXM' where id=1; -update noar ti set v0='Q1B7M163EEEXWA7QH51PWXMF55FXM' where id=1; -update noar tt set b1='9LHC55YZ9508WHEGXP4LZ6IHMYKG6KTY' where id=1; -update noar ti set b1='9LHC55YZ9508WHEGXP4LZ6IHMYKG6KTY' where id=1; -update noar tt set v0='ODGERP7Z4RL2I8QNJ9FT5OQK' where id=1; -update noar ti set v0='ODGERP7Z4RL2I8QNJ9FT5OQK' where id=1; -update noar tt set b2='OKG' where id=1; -update noar ti set b2='OKG' where id=1; -update noar tt set v0='SXNPWX7JCVHVDTDGNHP' where id=2; -update noar ti set v0='SXNPWX7JCVHVDTDGNHP' where id=2; -update noar tt set b0='1' where id=2; -update noar ti set b0='1' where id=2; -update noar tt set v0='9' where id=2; -update noar ti set v0='9' where id=2; -update noar tt set b1='PDI0PNQTRKI1T56O8FBQAPZU9B' where id=2; -update noar ti set b1='PDI0PNQTRKI1T56O8FBQAPZU9B' where id=2; -update noar tt set v0='G2KKSDJN70FFTWQ3IQIPD6G8HZYGX' where id=2; -update noar ti set v0='G2KKSDJN70FFTWQ3IQIPD6G8HZYGX' where id=2; -update noar tt set b2='3DYCLBKT780I4D7GTQ5EPS2ZO5G7' where id=2; -update noar ti set b2='3DYCLBKT780I4D7GTQ5EPS2ZO5G7' where id=2; -update noar tt set v0='SCZOV67Y12P3H05HLPXTQWU2V1XC' where id=3; -update noar ti set v0='SCZOV67Y12P3H05HLPXTQWU2V1XC' where id=3; -update noar tt set b0='VFSCFM6UDB20W3C4C3X3H' where id=3; -update noar ti set b0='VFSCFM6UDB20W3C4C3X3H' where id=3; -update noar tt set v0='ZKS8CC0X7569A0IZ4AAKVGTIH3W2' where id=3; -update noar ti set v0='ZKS8CC0X7569A0IZ4AAKVGTIH3W2' where id=3; -update noar tt set b1='R30VRG7J5C4' where id=3; -update noar ti set b1='R30VRG7J5C4' where id=3; -update noar tt set v0='XSKMNRK7CDE8L7TUMG4ZB4IJQ' where id=3; -update noar ti set v0='XSKMNRK7CDE8L7TUMG4ZB4IJQ' where id=3; -update noar tt set b2='CN1IU44OUU4' where id=3; -update noar ti set b2='CN1IU44OUU4' where id=3; -update noar tt set v0='RCXYR8IC6XO9FMKFSHAXGSO6GRU' where id=4; -update noar ti set v0='RCXYR8IC6XO9FMKFSHAXGSO6GRU' where id=4; -update noar tt set b0='QUPEP6FCRTGAB5J2S7STT6K5EP4LRF' where id=4; -update noar ti set b0='QUPEP6FCRTGAB5J2S7STT6K5EP4LRF' where id=4; -update noar tt set v0='JHT9YYT07VE105BB58HCT' where id=4; -update noar ti set v0='JHT9YYT07VE105BB58HCT' where id=4; -update noar tt set b1='8RIYAFXTRB6MPG4ASFCHSWO1E6' where id=4; -update noar ti set b1='8RIYAFXTRB6MPG4ASFCHSWO1E6' where id=4; -update noar tt set v0='YM4WEQ19IMB92L876C6I0M82EGICZ' where id=4; -update noar ti set v0='YM4WEQ19IMB92L876C6I0M82EGICZ' where id=4; -update noar tt set b2='YZ4FUSYJPAXNS0D5SQKHWDBOU8' where id=4; -update noar ti set b2='YZ4FUSYJPAXNS0D5SQKHWDBOU8' where id=4; -update noar tt set v0='3CMWWGZ814VCI1FNGENS14CG' where id=5; -update noar ti set v0='3CMWWGZ814VCI1FNGENS14CG' where id=5; -update noar tt set b0='OH' where id=5; -update noar ti set b0='OH' where id=5; -update noar tt set v0='92LZBFM4CX90FKE4' where id=5; -update noar ti set v0='92LZBFM4CX90FKE4' where id=5; -update noar tt set b1='KX6' where id=5; -update noar ti set b1='KX6' where id=5; -update noar tt set v0='FVE272YWOB4B9V5WQ4E' where id=5; -update noar ti set v0='FVE272YWOB4B9V5WQ4E' where id=5; -update noar tt set b2='0OE' where id=5; -update noar ti set b2='0OE' where id=5; -update noar tt set v0='78IGGTMKJ' where id=6; -update noar ti set v0='78IGGTMKJ' where id=6; -update noar tt set b0='K05EWZ5D8FH' where id=6; -update noar ti set b0='K05EWZ5D8FH' where id=6; -update noar tt set v0='06YMKXNIV2V267E4STPLV5' where id=6; -update noar ti set v0='06YMKXNIV2V267E4STPLV5' where id=6; -update noar tt set b1='J1P507ATNGWP173LGF6B9MDVB0U6B0VC' where id=6; -update noar ti set b1='J1P507ATNGWP173LGF6B9MDVB0U6B0VC' where id=6; -update noar tt set v0='UUMKNRYHYIA0QKROO9Y238S6I' where id=6; -update noar ti set v0='UUMKNRYHYIA0QKROO9Y238S6I' where id=6; -update noar tt set b2='98AQGQKPWEGMCZQ4LZ' where id=6; -update noar ti set b2='98AQGQKPWEGMCZQ4LZ' where id=6; -update noar tt set v0='BGKM5YOE222Z4IN0PZPKZHLBO3GT0V76' where id=7; -update noar ti set v0='BGKM5YOE222Z4IN0PZPKZHLBO3GT0V76' where id=7; -update noar tt set b0='SCP57762NEZA2W16RJV10IX7QG29ME' where id=7; -update noar ti set b0='SCP57762NEZA2W16RJV10IX7QG29ME' where id=7; -update noar tt set v0='VJKJ' where id=7; -update noar ti set v0='VJKJ' where id=7; -update noar tt set b1='0FHCBD20XLCPYL' where id=7; -update noar ti set b1='0FHCBD20XLCPYL' where id=7; -update noar tt set v0='NQCJIQ5C18AFPZCJM5Z' where id=7; -update noar ti set v0='NQCJIQ5C18AFPZCJM5Z' where id=7; -update noar tt set b2='0AGMRCKUS4JU7BPIM5BB83ERIRQLLT' where id=7; -update noar ti set b2='0AGMRCKUS4JU7BPIM5BB83ERIRQLLT' where id=7; -update noar tt set v0='WCCB23VS' where id=8; -update noar ti set v0='WCCB23VS' where id=8; -update noar tt set b0='8FEI66J3P5MM7LAVVZCTKHU' where id=8; -update noar ti set b0='8FEI66J3P5MM7LAVVZCTKHU' where id=8; -update noar tt set v0='LSJPD3FMY6QU4TIQW' where id=8; -update noar ti set v0='LSJPD3FMY6QU4TIQW' where id=8; -update noar tt set b1='E84TBAO4LBA15TKDSUXD8' where id=8; -update noar ti set b1='E84TBAO4LBA15TKDSUXD8' where id=8; -update noar tt set v0='SJQ2FOI81BZY8DF2Y4S' where id=8; -update noar ti set v0='SJQ2FOI81BZY8DF2Y4S' where id=8; -update noar tt set b2='Q4AWTOP19YC1RF2' where id=8; -update noar ti set b2='Q4AWTOP19YC1RF2' where id=8; -update noar tt set v0='F2CMRQXJ7L2OBOARXJJS6FJ7K' where id=9; -update noar ti set v0='F2CMRQXJ7L2OBOARXJJS6FJ7K' where id=9; -update noar tt set b0='UXQ72ZJ1OL3D83U1J1TX30UB' where id=9; -update noar ti set b0='UXQ72ZJ1OL3D83U1J1TX30UB' where id=9; -update noar tt set v0='7D4N1BVA5UMHJLC7Y5ELXUBONSBEV3CI' where id=9; -update noar ti set v0='7D4N1BVA5UMHJLC7Y5ELXUBONSBEV3CI' where id=9; -update noar tt set b1='K7A253B9V9B' where id=9; -update noar ti set b1='K7A253B9V9B' where id=9; -update noar tt set v0='SWHHS1X89YUT4P' where id=9; -update noar ti set v0='SWHHS1X89YUT4P' where id=9; -update noar tt set b2='5LDJHY07T' where id=9; -update noar ti set b2='5LDJHY07T' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 blob null, - b1 blob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='FTSNLX48FPC3Z59GRC00S3IWI8FOW8' where id=1; -update noar ti set v0='FTSNLX48FPC3Z59GRC00S3IWI8FOW8' where id=1; -update noar tt set b0='CBUDFPIL6G97OCZCTSFDPHLY' where id=1; -update noar ti set b0='CBUDFPIL6G97OCZCTSFDPHLY' where id=1; -update noar tt set v0='8VMHYNNDLEIF65WOEO2T' where id=1; -update noar ti set v0='8VMHYNNDLEIF65WOEO2T' where id=1; -update noar tt set b1='NIO9XQ' where id=1; -update noar ti set b1='NIO9XQ' where id=1; -update noar tt set v0='2WOFGZ7JB97UO1GPBYWEDWUYLE97A' where id=1; -update noar ti set v0='2WOFGZ7JB97UO1GPBYWEDWUYLE97A' where id=1; -update noar tt set b2='MX2CD2IYFNDUS5QL3SY1CQ5ZRWJ1BX' where id=1; -update noar ti set b2='MX2CD2IYFNDUS5QL3SY1CQ5ZRWJ1BX' where id=1; -update noar tt set v0='TWYXVR' where id=2; -update noar ti set v0='TWYXVR' where id=2; -update noar tt set b0='3DW7WN0SXKSZIMSVV' where id=2; -update noar ti set b0='3DW7WN0SXKSZIMSVV' where id=2; -update noar tt set v0='WOPYJ5ZTU7GBTV17' where id=2; -update noar ti set v0='WOPYJ5ZTU7GBTV17' where id=2; -update noar tt set b1='73L1459XU3O' where id=2; -update noar ti set b1='73L1459XU3O' where id=2; -update noar tt set v0='5A6EB' where id=2; -update noar ti set v0='5A6EB' where id=2; -update noar tt set b2='KNW8GW9MO644GJXEZVZ66NUO0D' where id=2; -update noar ti set b2='KNW8GW9MO644GJXEZVZ66NUO0D' where id=2; -update noar tt set v0='9X' where id=3; -update noar ti set v0='9X' where id=3; -update noar tt set b0='BR2YZKECOQ1DQ3U4JQSU0H40XGD89HT4' where id=3; -update noar ti set b0='BR2YZKECOQ1DQ3U4JQSU0H40XGD89HT4' where id=3; -update noar tt set v0='E317U' where id=3; -update noar ti set v0='E317U' where id=3; -update noar tt set b1='3SUXST' where id=3; -update noar ti set b1='3SUXST' where id=3; -update noar tt set v0='5JRFR7I9' where id=3; -update noar ti set v0='5JRFR7I9' where id=3; -update noar tt set b2='D8U6CDS' where id=3; -update noar ti set b2='D8U6CDS' where id=3; -update noar tt set v0='ZLTAFG8XKFQXLYXG4UXEFUGCP0L' where id=4; -update noar ti set v0='ZLTAFG8XKFQXLYXG4UXEFUGCP0L' where id=4; -update noar tt set b0='VX1YO3X13EDJX8USCGL9C8' where id=4; -update noar ti set b0='VX1YO3X13EDJX8USCGL9C8' where id=4; -update noar tt set v0='GWWGOFU9BJYVAK2JI9WKB1ODOJ0W5Y1' where id=4; -update noar ti set v0='GWWGOFU9BJYVAK2JI9WKB1ODOJ0W5Y1' where id=4; -update noar tt set b1='VKD6KSPB' where id=4; -update noar ti set b1='VKD6KSPB' where id=4; -update noar tt set v0='8YEQTSKBU2FWTO' where id=4; -update noar ti set v0='8YEQTSKBU2FWTO' where id=4; -update noar tt set b2='BGBHO7HM8U4F1OSBNASQDM2GIKLK3A0U' where id=4; -update noar ti set b2='BGBHO7HM8U4F1OSBNASQDM2GIKLK3A0U' where id=4; -update noar tt set v0='ALG' where id=5; -update noar ti set v0='ALG' where id=5; -update noar tt set b0='F4X' where id=5; -update noar ti set b0='F4X' where id=5; -update noar tt set v0='HGRTD2CA7KC' where id=5; -update noar ti set v0='HGRTD2CA7KC' where id=5; -update noar tt set b1='5M0ML18KQBLF35WRC' where id=5; -update noar ti set b1='5M0ML18KQBLF35WRC' where id=5; -update noar tt set v0='P5RMTMLEQEDBKCQKVP2C20' where id=5; -update noar ti set v0='P5RMTMLEQEDBKCQKVP2C20' where id=5; -update noar tt set b2='HE' where id=5; -update noar ti set b2='HE' where id=5; -update noar tt set v0='3H2WY7SZ65L' where id=6; -update noar ti set v0='3H2WY7SZ65L' where id=6; -update noar tt set b0='IT0M7CAWNCAKWVWOZSM6DYHH3P' where id=6; -update noar ti set b0='IT0M7CAWNCAKWVWOZSM6DYHH3P' where id=6; -update noar tt set v0='RB5HMOK29MILNHN2OSEYLUPPP4H' where id=6; -update noar ti set v0='RB5HMOK29MILNHN2OSEYLUPPP4H' where id=6; -update noar tt set b1='ZDXD5Y5U0LSXDM39KPJ62BSF0MI' where id=6; -update noar ti set b1='ZDXD5Y5U0LSXDM39KPJ62BSF0MI' where id=6; -update noar tt set v0='COT1BBYWGSTDATDQ4F1' where id=6; -update noar ti set v0='COT1BBYWGSTDATDQ4F1' where id=6; -update noar tt set b2='3IAST7R5MWTOR44ZGIF' where id=6; -update noar ti set b2='3IAST7R5MWTOR44ZGIF' where id=6; -update noar tt set v0='M' where id=7; -update noar ti set v0='M' where id=7; -update noar tt set b0='9D' where id=7; -update noar ti set b0='9D' where id=7; -update noar tt set v0='YL2DP77HVMK26RKN' where id=7; -update noar ti set v0='YL2DP77HVMK26RKN' where id=7; -update noar tt set b1='LG4KK022RYACFBWG3ZQH72Y7OG' where id=7; -update noar ti set b1='LG4KK022RYACFBWG3ZQH72Y7OG' where id=7; -update noar tt set v0='U6PVA70E7LPNVWS7FCZDWBDBLGEO' where id=7; -update noar ti set v0='U6PVA70E7LPNVWS7FCZDWBDBLGEO' where id=7; -update noar tt set b2='DXC34V' where id=7; -update noar ti set b2='DXC34V' where id=7; -update noar tt set v0='4NWU5HFSQBMVL0K54XJV4' where id=8; -update noar ti set v0='4NWU5HFSQBMVL0K54XJV4' where id=8; -update noar tt set b0='LXCZAUC2L4RM13NA70PW' where id=8; -update noar ti set b0='LXCZAUC2L4RM13NA70PW' where id=8; -update noar tt set v0='4PRBAPDWA' where id=8; -update noar ti set v0='4PRBAPDWA' where id=8; -update noar tt set b1='UMGIE5XK7MOTSYHEHHZTGJ1' where id=8; -update noar ti set b1='UMGIE5XK7MOTSYHEHHZTGJ1' where id=8; -update noar tt set v0='LFZX38DXDO0NIT' where id=8; -update noar ti set v0='LFZX38DXDO0NIT' where id=8; -update noar tt set b2='M3K4TLSYY5XJKOU6VAQSD55C' where id=8; -update noar ti set b2='M3K4TLSYY5XJKOU6VAQSD55C' where id=8; -update noar tt set v0='UXB1LCVR0U045R8Q1PXHUZKCZMPEJO' where id=9; -update noar ti set v0='UXB1LCVR0U045R8Q1PXHUZKCZMPEJO' where id=9; -update noar tt set b0='BY' where id=9; -update noar ti set b0='BY' where id=9; -update noar tt set v0='B1NMD9UAFP7JVAIEDD' where id=9; -update noar ti set v0='B1NMD9UAFP7JVAIEDD' where id=9; -update noar tt set b1='143KXIY2AV73KDRZP76CD57' where id=9; -update noar ti set b1='143KXIY2AV73KDRZP76CD57' where id=9; -update noar tt set v0='O6YTPMGO8C8T2ZJ6TL4WK3KV0HSFQ' where id=9; -update noar ti set v0='O6YTPMGO8C8T2ZJ6TL4WK3KV0HSFQ' where id=9; -update noar tt set b2='Q6YARMIVCGLZ44BFH9' where id=9; -update noar ti set b2='Q6YARMIVCGLZ44BFH9' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 blob null, - b1 blob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='9EP71TJU73HKT5T30J2ZS8G2YXNAF' where id=1; -update noar ti set v0='9EP71TJU73HKT5T30J2ZS8G2YXNAF' where id=1; -update noar tt set b0='OX4N3QZ' where id=1; -update noar ti set b0='OX4N3QZ' where id=1; -update noar tt set v0='GR5GL4A1P9HOJSSI72XFN7Y43Z' where id=1; -update noar ti set v0='GR5GL4A1P9HOJSSI72XFN7Y43Z' where id=1; -update noar tt set b1='61D7POE3DH44KZRLFBXHX1P55B317EPX' where id=1; -update noar ti set b1='61D7POE3DH44KZRLFBXHX1P55B317EPX' where id=1; -update noar tt set v0='KUOSAQTI4ABBG2G9XCAB0FVAAGQ' where id=1; -update noar ti set v0='KUOSAQTI4ABBG2G9XCAB0FVAAGQ' where id=1; -update noar tt set b2='ORBA85WI0PUKLF00D3Q' where id=1; -update noar ti set b2='ORBA85WI0PUKLF00D3Q' where id=1; -update noar tt set v0='2XJSKST1WXO1Y' where id=2; -update noar ti set v0='2XJSKST1WXO1Y' where id=2; -update noar tt set b0='1CCD5E' where id=2; -update noar ti set b0='1CCD5E' where id=2; -update noar tt set v0='GFRXM5Q' where id=2; -update noar ti set v0='GFRXM5Q' where id=2; -update noar tt set b1='NL6U52NRV8' where id=2; -update noar ti set b1='NL6U52NRV8' where id=2; -update noar tt set v0='Q43S6HH4MNGO2VHWO9YR' where id=2; -update noar ti set v0='Q43S6HH4MNGO2VHWO9YR' where id=2; -update noar tt set b2='7EQWXQFWAZBKN' where id=2; -update noar ti set b2='7EQWXQFWAZBKN' where id=2; -update noar tt set v0='79RFKXOTL' where id=3; -update noar ti set v0='79RFKXOTL' where id=3; -update noar tt set b0='WTIMW24TP7I' where id=3; -update noar ti set b0='WTIMW24TP7I' where id=3; -update noar tt set v0='ELXQDU7CJAATSGK060LTLYQ' where id=3; -update noar ti set v0='ELXQDU7CJAATSGK060LTLYQ' where id=3; -update noar tt set b1='8SPYN6TFKGZ7ZA9XJ' where id=3; -update noar ti set b1='8SPYN6TFKGZ7ZA9XJ' where id=3; -update noar tt set v0='47ZAOIW5T4A42WJA4KISBUA5PL' where id=3; -update noar ti set v0='47ZAOIW5T4A42WJA4KISBUA5PL' where id=3; -update noar tt set b2='5GK3R97EGZKGSZFVA2N' where id=3; -update noar ti set b2='5GK3R97EGZKGSZFVA2N' where id=3; -update noar tt set v0='3OFTVEMAJFPFD84' where id=4; -update noar ti set v0='3OFTVEMAJFPFD84' where id=4; -update noar tt set b0='LD8XBJNMTKYX05' where id=4; -update noar ti set b0='LD8XBJNMTKYX05' where id=4; -update noar tt set v0='9UEGUHFUI4XGU255JCPSJW1VHDMWA' where id=4; -update noar ti set v0='9UEGUHFUI4XGU255JCPSJW1VHDMWA' where id=4; -update noar tt set b1='72U93SWVMQI6Q8K5HKBVB3LSYZMJU9F' where id=4; -update noar ti set b1='72U93SWVMQI6Q8K5HKBVB3LSYZMJU9F' where id=4; -update noar tt set v0='KNM88YL' where id=4; -update noar ti set v0='KNM88YL' where id=4; -update noar tt set b2='OG5IMCGVAXVF0E338CVH3JFGLQ' where id=4; -update noar ti set b2='OG5IMCGVAXVF0E338CVH3JFGLQ' where id=4; -update noar tt set v0='BF3LIFMQS7TD5MQWI7AXQ' where id=5; -update noar ti set v0='BF3LIFMQS7TD5MQWI7AXQ' where id=5; -update noar tt set b0='KT475U6FTQ3XR' where id=5; -update noar ti set b0='KT475U6FTQ3XR' where id=5; -update noar tt set v0='LVAY6YGCJJ0' where id=5; -update noar ti set v0='LVAY6YGCJJ0' where id=5; -update noar tt set b1='3JB476R7U1DUP97R' where id=5; -update noar ti set b1='3JB476R7U1DUP97R' where id=5; -update noar tt set v0='R3CB1GDQKTC6YSE0OSRH12QGJ4HD' where id=5; -update noar ti set v0='R3CB1GDQKTC6YSE0OSRH12QGJ4HD' where id=5; -update noar tt set b2='P4YX' where id=5; -update noar ti set b2='P4YX' where id=5; -update noar tt set v0='51VF6SUAHRQXG4HNUYFL1' where id=6; -update noar ti set v0='51VF6SUAHRQXG4HNUYFL1' where id=6; -update noar tt set b0='MBCKD91X' where id=6; -update noar ti set b0='MBCKD91X' where id=6; -update noar tt set v0='03PEHCGE6UVUI4905IXSR' where id=6; -update noar ti set v0='03PEHCGE6UVUI4905IXSR' where id=6; -update noar tt set b1='R59' where id=6; -update noar ti set b1='R59' where id=6; -update noar tt set v0='EYRVSM7TRBGC' where id=6; -update noar ti set v0='EYRVSM7TRBGC' where id=6; -update noar tt set b2='21FMKLL3QGXMHM3FDG' where id=6; -update noar ti set b2='21FMKLL3QGXMHM3FDG' where id=6; -update noar tt set v0='7AL01Y16PL8XI66ZQH3GKND42QF357' where id=7; -update noar ti set v0='7AL01Y16PL8XI66ZQH3GKND42QF357' where id=7; -update noar tt set b0='4CN7Y4WFF5JHJFCTJHLQ' where id=7; -update noar ti set b0='4CN7Y4WFF5JHJFCTJHLQ' where id=7; -update noar tt set v0='H99GE2OPVIJKUCLD' where id=7; -update noar ti set v0='H99GE2OPVIJKUCLD' where id=7; -update noar tt set b1='1NRK0WK98' where id=7; -update noar ti set b1='1NRK0WK98' where id=7; -update noar tt set v0='UWZTGH2XOT45Q0IUYSCY1' where id=7; -update noar ti set v0='UWZTGH2XOT45Q0IUYSCY1' where id=7; -update noar tt set b2='G4GZ4PBOYK7FS9O181I8F1A' where id=7; -update noar ti set b2='G4GZ4PBOYK7FS9O181I8F1A' where id=7; -update noar tt set v0='89MMK4CRYCK' where id=8; -update noar ti set v0='89MMK4CRYCK' where id=8; -update noar tt set b0='PTN65PFD87EFYCBME7YY0DR7Y2C8F0' where id=8; -update noar ti set b0='PTN65PFD87EFYCBME7YY0DR7Y2C8F0' where id=8; -update noar tt set v0='TZSXY1' where id=8; -update noar ti set v0='TZSXY1' where id=8; -update noar tt set b1='3' where id=8; -update noar ti set b1='3' where id=8; -update noar tt set v0='BTA4UXKGGNH0P54DA5SW2629OTM3' where id=8; -update noar ti set v0='BTA4UXKGGNH0P54DA5SW2629OTM3' where id=8; -update noar tt set b2='MUB1EKPITPMWVOH1QQZ3SR4D' where id=8; -update noar ti set b2='MUB1EKPITPMWVOH1QQZ3SR4D' where id=8; -update noar tt set v0='XP1Y3BIE4L0E' where id=9; -update noar ti set v0='XP1Y3BIE4L0E' where id=9; -update noar tt set b0='UUAHHACS7KK1RVSNWGX0XOJW03N' where id=9; -update noar ti set b0='UUAHHACS7KK1RVSNWGX0XOJW03N' where id=9; -update noar tt set v0='K9H6PGY9HJ' where id=9; -update noar ti set v0='K9H6PGY9HJ' where id=9; -update noar tt set b1='KDHDJTCIV25LY6OW6D4KEXSC' where id=9; -update noar ti set b1='KDHDJTCIV25LY6OW6D4KEXSC' where id=9; -update noar tt set v0='4DXN4LW' where id=9; -update noar ti set v0='4DXN4LW' where id=9; -update noar tt set b2='09IPJ7O62MUZINSQW3X4' where id=9; -update noar ti set b2='09IPJ7O62MUZINSQW3X4' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 blob not null, - b1 blob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='YD' where id=1; -update noar ti set v0='YD' where id=1; -update noar tt set b0='JKKP2PL7WTT4A' where id=1; -update noar ti set b0='JKKP2PL7WTT4A' where id=1; -update noar tt set v0='NDSE90YJG2N2Y' where id=1; -update noar ti set v0='NDSE90YJG2N2Y' where id=1; -update noar tt set b1='EDSVO' where id=1; -update noar ti set b1='EDSVO' where id=1; -update noar tt set v0='LC3RVYFJGOXYE7K' where id=1; -update noar ti set v0='LC3RVYFJGOXYE7K' where id=1; -update noar tt set b2='TD2T' where id=1; -update noar ti set b2='TD2T' where id=1; -update noar tt set v0='NZ8' where id=2; -update noar ti set v0='NZ8' where id=2; -update noar tt set b0='OJ' where id=2; -update noar ti set b0='OJ' where id=2; -update noar tt set v0='KL8573' where id=2; -update noar ti set v0='KL8573' where id=2; -update noar tt set b1='1KF8ONUVJ9QGHESI4F3CH' where id=2; -update noar ti set b1='1KF8ONUVJ9QGHESI4F3CH' where id=2; -update noar tt set v0='LQLXIURUB45BFZUL4L103HQ29VCF2H' where id=2; -update noar ti set v0='LQLXIURUB45BFZUL4L103HQ29VCF2H' where id=2; -update noar tt set b2='0WSUSP6VZTDXP3' where id=2; -update noar ti set b2='0WSUSP6VZTDXP3' where id=2; -update noar tt set v0='6104383MNNBXXQ7G4D4BA5DJ2H' where id=3; -update noar ti set v0='6104383MNNBXXQ7G4D4BA5DJ2H' where id=3; -update noar tt set b0='R3SKHJ0K91VB8BVCDTOU' where id=3; -update noar ti set b0='R3SKHJ0K91VB8BVCDTOU' where id=3; -update noar tt set v0='ZMRU4860W2' where id=3; -update noar ti set v0='ZMRU4860W2' where id=3; -update noar tt set b1='9H0J8S9NNQTVAMWMBV1D' where id=3; -update noar ti set b1='9H0J8S9NNQTVAMWMBV1D' where id=3; -update noar tt set v0='8H' where id=3; -update noar ti set v0='8H' where id=3; -update noar tt set b2='B6BA0OQTNZFBS' where id=3; -update noar ti set b2='B6BA0OQTNZFBS' where id=3; -update noar tt set v0='WVW7D0CXPQKP0NSIECODW5FF16J' where id=4; -update noar ti set v0='WVW7D0CXPQKP0NSIECODW5FF16J' where id=4; -update noar tt set b0='BG9JZ5NLGWSCLR0MT0ORZ1W' where id=4; -update noar ti set b0='BG9JZ5NLGWSCLR0MT0ORZ1W' where id=4; -update noar tt set v0='8D2CUBQKV4' where id=4; -update noar ti set v0='8D2CUBQKV4' where id=4; -update noar tt set b1='KDWYWWWJF8KL' where id=4; -update noar ti set b1='KDWYWWWJF8KL' where id=4; -update noar tt set v0='NTJU5M' where id=4; -update noar ti set v0='NTJU5M' where id=4; -update noar tt set b2='8IKTEHCHCW' where id=4; -update noar ti set b2='8IKTEHCHCW' where id=4; -update noar tt set v0='KRMXQUNAHZE' where id=5; -update noar ti set v0='KRMXQUNAHZE' where id=5; -update noar tt set b0='SD9CD19UAT' where id=5; -update noar ti set b0='SD9CD19UAT' where id=5; -update noar tt set v0='5G77M' where id=5; -update noar ti set v0='5G77M' where id=5; -update noar tt set b1='2SUORZ4NKGK3B4R325XRSRNFTXWU' where id=5; -update noar ti set b1='2SUORZ4NKGK3B4R325XRSRNFTXWU' where id=5; -update noar tt set v0='YNO0RVZ6XRE3' where id=5; -update noar ti set v0='YNO0RVZ6XRE3' where id=5; -update noar tt set b2='X' where id=5; -update noar ti set b2='X' where id=5; -update noar tt set v0='1TYAGCJUWZ1K5IYLZP65SVKYQ' where id=6; -update noar ti set v0='1TYAGCJUWZ1K5IYLZP65SVKYQ' where id=6; -update noar tt set b0='I1BBXO0FDMCF2SQA4H8N00W73SY' where id=6; -update noar ti set b0='I1BBXO0FDMCF2SQA4H8N00W73SY' where id=6; -update noar tt set v0='8E6VZGXF31M' where id=6; -update noar ti set v0='8E6VZGXF31M' where id=6; -update noar tt set b1='AGQT35MHC54PRCUZNV4LS' where id=6; -update noar ti set b1='AGQT35MHC54PRCUZNV4LS' where id=6; -update noar tt set v0='UCHUW3EWIJ' where id=6; -update noar ti set v0='UCHUW3EWIJ' where id=6; -update noar tt set b2='VX5R1OM5FESHQVLQC9JFBRYMFP0ZH3XB' where id=6; -update noar ti set b2='VX5R1OM5FESHQVLQC9JFBRYMFP0ZH3XB' where id=6; -update noar tt set v0='2C0F' where id=7; -update noar ti set v0='2C0F' where id=7; -update noar tt set b0='TH5W7UZ7MTRT52YI1AF0534C1Z7AF' where id=7; -update noar ti set b0='TH5W7UZ7MTRT52YI1AF0534C1Z7AF' where id=7; -update noar tt set v0='VFAWG' where id=7; -update noar ti set v0='VFAWG' where id=7; -update noar tt set b1='P0RXNBWKZHA' where id=7; -update noar ti set b1='P0RXNBWKZHA' where id=7; -update noar tt set v0='2NATG' where id=7; -update noar ti set v0='2NATG' where id=7; -update noar tt set b2='GPCJ2ZBQO1VCB3R' where id=7; -update noar ti set b2='GPCJ2ZBQO1VCB3R' where id=7; -update noar tt set v0='6ZXMM5T' where id=8; -update noar ti set v0='6ZXMM5T' where id=8; -update noar tt set b0='BDK4CIHZ7OD9F7CTV' where id=8; -update noar ti set b0='BDK4CIHZ7OD9F7CTV' where id=8; -update noar tt set v0='9W' where id=8; -update noar ti set v0='9W' where id=8; -update noar tt set b1='PIJIKVA51RYQKB' where id=8; -update noar ti set b1='PIJIKVA51RYQKB' where id=8; -update noar tt set v0='SB9J9HMBEF10UKA' where id=8; -update noar ti set v0='SB9J9HMBEF10UKA' where id=8; -update noar tt set b2='VTRFSXTBYR73UBHUGE1DSPTBAI8HQJ' where id=8; -update noar ti set b2='VTRFSXTBYR73UBHUGE1DSPTBAI8HQJ' where id=8; -update noar tt set v0='SF3ZDLRX0KQX2IXFNRPTH' where id=9; -update noar ti set v0='SF3ZDLRX0KQX2IXFNRPTH' where id=9; -update noar tt set b0='BB0ONZFAF2' where id=9; -update noar ti set b0='BB0ONZFAF2' where id=9; -update noar tt set v0='X9ZIMD9MVPQW' where id=9; -update noar ti set v0='X9ZIMD9MVPQW' where id=9; -update noar tt set b1='B3H7OLTI' where id=9; -update noar ti set b1='B3H7OLTI' where id=9; -update noar tt set v0='WF0SLXFB397F' where id=9; -update noar ti set v0='WF0SLXFB397F' where id=9; -update noar tt set b2='J5TEJYU3M2I5K1V0CLLRN9B' where id=9; -update noar ti set b2='J5TEJYU3M2I5K1V0CLLRN9B' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 blob not null, - b1 blob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='7ZY2N10WJFL3W7O5QE4P7G89UUHHPY' where id=1; -update noar ti set v0='7ZY2N10WJFL3W7O5QE4P7G89UUHHPY' where id=1; -update noar tt set b0='DXU33E2O7DYWD7WWW7965P3V394UH7V' where id=1; -update noar ti set b0='DXU33E2O7DYWD7WWW7965P3V394UH7V' where id=1; -update noar tt set v0='F9IYKKFYVHOQDHB' where id=1; -update noar ti set v0='F9IYKKFYVHOQDHB' where id=1; -update noar tt set b1='FGT40NAVGIG8EEFXD' where id=1; -update noar ti set b1='FGT40NAVGIG8EEFXD' where id=1; -update noar tt set v0='4X9NAY2Q4' where id=1; -update noar ti set v0='4X9NAY2Q4' where id=1; -update noar tt set b2='7TOHMB7' where id=1; -update noar ti set b2='7TOHMB7' where id=1; -update noar tt set v0='RM2O6DRPX3FSKOL031DGXYELDHM' where id=2; -update noar ti set v0='RM2O6DRPX3FSKOL031DGXYELDHM' where id=2; -update noar tt set b0='JZ11GJZDIC8VM24SR6IUJZ0WZO11' where id=2; -update noar ti set b0='JZ11GJZDIC8VM24SR6IUJZ0WZO11' where id=2; -update noar tt set v0='3UDTOQ5Y374TFOPIJIRZNV' where id=2; -update noar ti set v0='3UDTOQ5Y374TFOPIJIRZNV' where id=2; -update noar tt set b1='NL2LU02OF0TNID16A04XWGRG' where id=2; -update noar ti set b1='NL2LU02OF0TNID16A04XWGRG' where id=2; -update noar tt set v0='D7DY7EH2CG553QHJHV5' where id=2; -update noar ti set v0='D7DY7EH2CG553QHJHV5' where id=2; -update noar tt set b2='0S9I52JNFOKSRDORSRI8JC6D1W865CX' where id=2; -update noar ti set b2='0S9I52JNFOKSRDORSRI8JC6D1W865CX' where id=2; -update noar tt set v0='P77FPAAA6F2075P35ZV08B4P' where id=3; -update noar ti set v0='P77FPAAA6F2075P35ZV08B4P' where id=3; -update noar tt set b0='XOX' where id=3; -update noar ti set b0='XOX' where id=3; -update noar tt set v0='EGAGEV7C43CD5Z5U7O' where id=3; -update noar ti set v0='EGAGEV7C43CD5Z5U7O' where id=3; -update noar tt set b1='ZMT' where id=3; -update noar ti set b1='ZMT' where id=3; -update noar tt set v0='YVL5LFTE6YABM256048GZBVMRJ5SK' where id=3; -update noar ti set v0='YVL5LFTE6YABM256048GZBVMRJ5SK' where id=3; -update noar tt set b2='83RFGIGF' where id=3; -update noar ti set b2='83RFGIGF' where id=3; -update noar tt set v0='HYOQUL7INO0GH15GRHWB9XGG5YN' where id=4; -update noar ti set v0='HYOQUL7INO0GH15GRHWB9XGG5YN' where id=4; -update noar tt set b0='DHWDSY9DYCBFJ8UECW2ONLCXJW47' where id=4; -update noar ti set b0='DHWDSY9DYCBFJ8UECW2ONLCXJW47' where id=4; -update noar tt set v0='SFW3LQ0LAFFY79UF4' where id=4; -update noar ti set v0='SFW3LQ0LAFFY79UF4' where id=4; -update noar tt set b1='Q' where id=4; -update noar ti set b1='Q' where id=4; -update noar tt set v0='4MO2IAB5HVTQ16F' where id=4; -update noar ti set v0='4MO2IAB5HVTQ16F' where id=4; -update noar tt set b2='IF4' where id=4; -update noar ti set b2='IF4' where id=4; -update noar tt set v0='W7' where id=5; -update noar ti set v0='W7' where id=5; -update noar tt set b0='Y349Y' where id=5; -update noar ti set b0='Y349Y' where id=5; -update noar tt set v0='W6C63B6WDOKKLN02ZPE384ZOWOGHJ5C' where id=5; -update noar ti set v0='W6C63B6WDOKKLN02ZPE384ZOWOGHJ5C' where id=5; -update noar tt set b1='21BWMO8C47OW8Y9M83FHKBC9COWL7R' where id=5; -update noar ti set b1='21BWMO8C47OW8Y9M83FHKBC9COWL7R' where id=5; -update noar tt set v0='5GL0F5Z9MAMRP0I1HJX' where id=5; -update noar ti set v0='5GL0F5Z9MAMRP0I1HJX' where id=5; -update noar tt set b2='AAR57DP24PV5JAXPVL4U0SAM5V' where id=5; -update noar ti set b2='AAR57DP24PV5JAXPVL4U0SAM5V' where id=5; -update noar tt set v0='WQCMIC4TVW' where id=6; -update noar ti set v0='WQCMIC4TVW' where id=6; -update noar tt set b0='G281WN097XXGNA4NHOMFTTRS13D5' where id=6; -update noar ti set b0='G281WN097XXGNA4NHOMFTTRS13D5' where id=6; -update noar tt set v0='JQPRV1S9K0X6IMIM7JFPIX47HXW' where id=6; -update noar ti set v0='JQPRV1S9K0X6IMIM7JFPIX47HXW' where id=6; -update noar tt set b1='DMMZ' where id=6; -update noar ti set b1='DMMZ' where id=6; -update noar tt set v0='35KVTIA4F1HKC' where id=6; -update noar ti set v0='35KVTIA4F1HKC' where id=6; -update noar tt set b2='F9N1' where id=6; -update noar ti set b2='F9N1' where id=6; -update noar tt set v0='PKVQ4' where id=7; -update noar ti set v0='PKVQ4' where id=7; -update noar tt set b0='01CBOANC05OQ4MRYO719IP687GRZ' where id=7; -update noar ti set b0='01CBOANC05OQ4MRYO719IP687GRZ' where id=7; -update noar tt set v0='PW0X2YDQSM8B6642EGIYY728ETZ6D1' where id=7; -update noar ti set v0='PW0X2YDQSM8B6642EGIYY728ETZ6D1' where id=7; -update noar tt set b1='44OF0D7' where id=7; -update noar ti set b1='44OF0D7' where id=7; -update noar tt set v0='CCV' where id=7; -update noar ti set v0='CCV' where id=7; -update noar tt set b2='JRWZX' where id=7; -update noar ti set b2='JRWZX' where id=7; -update noar tt set v0='ZQ9TFF53XW53AUJ2O1J7BZF3RDI92C' where id=8; -update noar ti set v0='ZQ9TFF53XW53AUJ2O1J7BZF3RDI92C' where id=8; -update noar tt set b0='OO0V1G' where id=8; -update noar ti set b0='OO0V1G' where id=8; -update noar tt set v0='V' where id=8; -update noar ti set v0='V' where id=8; -update noar tt set b1='6RZL7O0QSA' where id=8; -update noar ti set b1='6RZL7O0QSA' where id=8; -update noar tt set v0='IG7SF370IQO' where id=8; -update noar ti set v0='IG7SF370IQO' where id=8; -update noar tt set b2='F4VK' where id=8; -update noar ti set b2='F4VK' where id=8; -update noar tt set v0='AJOOR3YRNX8YB71LGMAAN6MJHV9ID' where id=9; -update noar ti set v0='AJOOR3YRNX8YB71LGMAAN6MJHV9ID' where id=9; -update noar tt set b0='8GAP83BNYJCH85P2' where id=9; -update noar ti set b0='8GAP83BNYJCH85P2' where id=9; -update noar tt set v0='T27BL1YT' where id=9; -update noar ti set v0='T27BL1YT' where id=9; -update noar tt set b1='P4LJ9MBV3AIOQ79' where id=9; -update noar ti set b1='P4LJ9MBV3AIOQ79' where id=9; -update noar tt set v0='8Y1HDDLXFBHR3EP6' where id=9; -update noar ti set v0='8Y1HDDLXFBHR3EP6' where id=9; -update noar tt set b2='PEMLQ7A2CEYAJLG9S' where id=9; -update noar ti set b2='PEMLQ7A2CEYAJLG9S' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 blob null, - b1 blob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='OHILF04F60NXEJRL6F' where id=1; -update noar ti set v0='OHILF04F60NXEJRL6F' where id=1; -update noar tt set b0='C8I3P4ITSKDS8ORHDT0W9G5' where id=1; -update noar ti set b0='C8I3P4ITSKDS8ORHDT0W9G5' where id=1; -update noar tt set v0='XL10OB0' where id=1; -update noar ti set v0='XL10OB0' where id=1; -update noar tt set b1='OGP68635LUQ1KYQ8VV31LO52ISV' where id=1; -update noar ti set b1='OGP68635LUQ1KYQ8VV31LO52ISV' where id=1; -update noar tt set v0='FRU' where id=1; -update noar ti set v0='FRU' where id=1; -update noar tt set b2='JY54DILVUGLQPNSD1VSY6G' where id=1; -update noar ti set b2='JY54DILVUGLQPNSD1VSY6G' where id=1; -update noar tt set v0='4HJ1KMDM9LNE5ZSABV6C' where id=2; -update noar ti set v0='4HJ1KMDM9LNE5ZSABV6C' where id=2; -update noar tt set b0='XVB0SARTERFOSG6NJT5XAGU49V0AV' where id=2; -update noar ti set b0='XVB0SARTERFOSG6NJT5XAGU49V0AV' where id=2; -update noar tt set v0='AGIZS88F8CRH33T9OVH2O0JDRA3Q6' where id=2; -update noar ti set v0='AGIZS88F8CRH33T9OVH2O0JDRA3Q6' where id=2; -update noar tt set b1='XFUZ' where id=2; -update noar ti set b1='XFUZ' where id=2; -update noar tt set v0='WRNNPI53MB1Q5BZVUCJM90IM4M1D' where id=2; -update noar ti set v0='WRNNPI53MB1Q5BZVUCJM90IM4M1D' where id=2; -update noar tt set b2='ZUNFTPAWM8JUPD820CTVY' where id=2; -update noar ti set b2='ZUNFTPAWM8JUPD820CTVY' where id=2; -update noar tt set v0='FS2BT489HS0S2RFWMF67GR00U9IH' where id=3; -update noar ti set v0='FS2BT489HS0S2RFWMF67GR00U9IH' where id=3; -update noar tt set b0='7Z2LUM8K46K8V3AEN74DGKGNWPAE40' where id=3; -update noar ti set b0='7Z2LUM8K46K8V3AEN74DGKGNWPAE40' where id=3; -update noar tt set v0='LSO1AKTYIJJO2IA7' where id=3; -update noar ti set v0='LSO1AKTYIJJO2IA7' where id=3; -update noar tt set b1='JB' where id=3; -update noar ti set b1='JB' where id=3; -update noar tt set v0='41L7PJA1LI73S8JF1KXUE' where id=3; -update noar ti set v0='41L7PJA1LI73S8JF1KXUE' where id=3; -update noar tt set b2='QKGXEY' where id=3; -update noar ti set b2='QKGXEY' where id=3; -update noar tt set v0='3FXQ6VWJ1CSU' where id=4; -update noar ti set v0='3FXQ6VWJ1CSU' where id=4; -update noar tt set b0='R1GZA9AD76DJUBM' where id=4; -update noar ti set b0='R1GZA9AD76DJUBM' where id=4; -update noar tt set v0='RO6PR48BBWTJT' where id=4; -update noar ti set v0='RO6PR48BBWTJT' where id=4; -update noar tt set b1='DD3NLHSN3A8MQ4VKZ3N' where id=4; -update noar ti set b1='DD3NLHSN3A8MQ4VKZ3N' where id=4; -update noar tt set v0='J5C9U04KYK400MO47SA6' where id=4; -update noar ti set v0='J5C9U04KYK400MO47SA6' where id=4; -update noar tt set b2='9' where id=4; -update noar ti set b2='9' where id=4; -update noar tt set v0='LV9YVQ7Q263C26I02318HP69Y3FP2QC' where id=5; -update noar ti set v0='LV9YVQ7Q263C26I02318HP69Y3FP2QC' where id=5; -update noar tt set b0='CCE' where id=5; -update noar ti set b0='CCE' where id=5; -update noar tt set v0='IXKG3KA3GSUXAIEA438P4WBN6ITHJ5' where id=5; -update noar ti set v0='IXKG3KA3GSUXAIEA438P4WBN6ITHJ5' where id=5; -update noar tt set b1='ITV76CAQZVFQFE4VCU1HCSE3DG' where id=5; -update noar ti set b1='ITV76CAQZVFQFE4VCU1HCSE3DG' where id=5; -update noar tt set v0='8KWVNJJTY4Z86' where id=5; -update noar ti set v0='8KWVNJJTY4Z86' where id=5; -update noar tt set b2='WSTT2TG6IPKP7VVNGT' where id=5; -update noar ti set b2='WSTT2TG6IPKP7VVNGT' where id=5; -update noar tt set v0='CM' where id=6; -update noar ti set v0='CM' where id=6; -update noar tt set b0='NXIK5VOBE' where id=6; -update noar ti set b0='NXIK5VOBE' where id=6; -update noar tt set v0='GVNB6' where id=6; -update noar ti set v0='GVNB6' where id=6; -update noar tt set b1='Q99' where id=6; -update noar ti set b1='Q99' where id=6; -update noar tt set v0='AK' where id=6; -update noar ti set v0='AK' where id=6; -update noar tt set b2='DVPR4YH8FCR6YFTBG1B4BDH8IP' where id=6; -update noar ti set b2='DVPR4YH8FCR6YFTBG1B4BDH8IP' where id=6; -update noar tt set v0='EHB6BL3GYLRDONWF' where id=7; -update noar ti set v0='EHB6BL3GYLRDONWF' where id=7; -update noar tt set b0='1VT0U80Y9MD6NQ0QX5JO' where id=7; -update noar ti set b0='1VT0U80Y9MD6NQ0QX5JO' where id=7; -update noar tt set v0='T' where id=7; -update noar ti set v0='T' where id=7; -update noar tt set b1='HYDQGXSWL8' where id=7; -update noar ti set b1='HYDQGXSWL8' where id=7; -update noar tt set v0='16Z1PJZCLZ87W2EAIWJOCL36ML1M' where id=7; -update noar ti set v0='16Z1PJZCLZ87W2EAIWJOCL36ML1M' where id=7; -update noar tt set b2='FB' where id=7; -update noar ti set b2='FB' where id=7; -update noar tt set v0='LVANGGM7YQQ4OKAV0E8MZ' where id=8; -update noar ti set v0='LVANGGM7YQQ4OKAV0E8MZ' where id=8; -update noar tt set b0='FNX2VFNQSRPHLU1CX' where id=8; -update noar ti set b0='FNX2VFNQSRPHLU1CX' where id=8; -update noar tt set v0='ADUVBROBXM' where id=8; -update noar ti set v0='ADUVBROBXM' where id=8; -update noar tt set b1='52AKHOTG3' where id=8; -update noar ti set b1='52AKHOTG3' where id=8; -update noar tt set v0='AUY577K9AA7ZZRG8I94' where id=8; -update noar ti set v0='AUY577K9AA7ZZRG8I94' where id=8; -update noar tt set b2='8C4K90555ZLV1KPGHQ6KJIGAGM9I8J1' where id=8; -update noar ti set b2='8C4K90555ZLV1KPGHQ6KJIGAGM9I8J1' where id=8; -update noar tt set v0='XF04BXXZFNG7L0OLQJ2DWFKPA' where id=9; -update noar ti set v0='XF04BXXZFNG7L0OLQJ2DWFKPA' where id=9; -update noar tt set b0='6VZJQ1WTMMPYW0PQBU673TMCHJ2QQY' where id=9; -update noar ti set b0='6VZJQ1WTMMPYW0PQBU673TMCHJ2QQY' where id=9; -update noar tt set v0='L1SONQIKQPKYGQLK8UIZK851HNT5Q' where id=9; -update noar ti set v0='L1SONQIKQPKYGQLK8UIZK851HNT5Q' where id=9; -update noar tt set b1='EJ0GL9FU3AGQX9TXFJKZ4FQRIKSBB2J' where id=9; -update noar ti set b1='EJ0GL9FU3AGQX9TXFJKZ4FQRIKSBB2J' where id=9; -update noar tt set v0='YLU1JHLC' where id=9; -update noar ti set v0='YLU1JHLC' where id=9; -update noar tt set b2='69YT' where id=9; -update noar ti set b2='69YT' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 blob null, - b1 blob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='VK78QUVI77ZN4BF6D1JOS8UN' where id=1; -update noar ti set v0='VK78QUVI77ZN4BF6D1JOS8UN' where id=1; -update noar tt set b0='YZEFHBAU7VW7QX1LMAVAMZ5AFOW7PPWC' where id=1; -update noar ti set b0='YZEFHBAU7VW7QX1LMAVAMZ5AFOW7PPWC' where id=1; -update noar tt set v0='HVC3ZWEZR45QMEONCRHKW3WR' where id=1; -update noar ti set v0='HVC3ZWEZR45QMEONCRHKW3WR' where id=1; -update noar tt set b1='VMM6XW1NFF863B2ZDJK5LH' where id=1; -update noar ti set b1='VMM6XW1NFF863B2ZDJK5LH' where id=1; -update noar tt set v0='ABECRXSVLXS3OK6A4VMOEPQ' where id=1; -update noar ti set v0='ABECRXSVLXS3OK6A4VMOEPQ' where id=1; -update noar tt set b2='805Y6RS1MLESLG4K8SQWB9' where id=1; -update noar ti set b2='805Y6RS1MLESLG4K8SQWB9' where id=1; -update noar tt set v0='148T7RW05854PEGF3' where id=2; -update noar ti set v0='148T7RW05854PEGF3' where id=2; -update noar tt set b0='3H' where id=2; -update noar ti set b0='3H' where id=2; -update noar tt set v0='9NIFKEGJQRZTUJTRVH7' where id=2; -update noar ti set v0='9NIFKEGJQRZTUJTRVH7' where id=2; -update noar tt set b1='MQR1C' where id=2; -update noar ti set b1='MQR1C' where id=2; -update noar tt set v0='XI0YT5ZMXLZKKAETDAS' where id=2; -update noar ti set v0='XI0YT5ZMXLZKKAETDAS' where id=2; -update noar tt set b2='0JC2RRT9AZYLTTAI' where id=2; -update noar ti set b2='0JC2RRT9AZYLTTAI' where id=2; -update noar tt set v0='T0G0NWX4IS3AF9495ZKDI1K' where id=3; -update noar ti set v0='T0G0NWX4IS3AF9495ZKDI1K' where id=3; -update noar tt set b0='47F60' where id=3; -update noar ti set b0='47F60' where id=3; -update noar tt set v0='371MW2SWY668OLPBBIG' where id=3; -update noar ti set v0='371MW2SWY668OLPBBIG' where id=3; -update noar tt set b1='2W' where id=3; -update noar ti set b1='2W' where id=3; -update noar tt set v0='IQ7' where id=3; -update noar ti set v0='IQ7' where id=3; -update noar tt set b2='5P04YDSA' where id=3; -update noar ti set b2='5P04YDSA' where id=3; -update noar tt set v0='3UW' where id=4; -update noar ti set v0='3UW' where id=4; -update noar tt set b0='SYILSORIIM7FAX8WKDUCV9VENY' where id=4; -update noar ti set b0='SYILSORIIM7FAX8WKDUCV9VENY' where id=4; -update noar tt set v0='AWA7UIJ9F33VV4P3WOKHISAE6' where id=4; -update noar ti set v0='AWA7UIJ9F33VV4P3WOKHISAE6' where id=4; -update noar tt set b1='CD8NI' where id=4; -update noar ti set b1='CD8NI' where id=4; -update noar tt set v0='R6ITDVE394UNGYZROOSHMXBG7LBDD6' where id=4; -update noar ti set v0='R6ITDVE394UNGYZROOSHMXBG7LBDD6' where id=4; -update noar tt set b2='RUG30GRB078XSRE4XQEMLC9AO4GY2R1' where id=4; -update noar ti set b2='RUG30GRB078XSRE4XQEMLC9AO4GY2R1' where id=4; -update noar tt set v0='HST854VB108C' where id=5; -update noar ti set v0='HST854VB108C' where id=5; -update noar tt set b0='D7' where id=5; -update noar ti set b0='D7' where id=5; -update noar tt set v0='KNCWJQT513GRUJIW8LDG9O0RB3DZ1M' where id=5; -update noar ti set v0='KNCWJQT513GRUJIW8LDG9O0RB3DZ1M' where id=5; -update noar tt set b1='EYZ8LC9ZBD4DNILTKGNZE93QNYPS' where id=5; -update noar ti set b1='EYZ8LC9ZBD4DNILTKGNZE93QNYPS' where id=5; -update noar tt set v0='2C2G5PLZU2E3TRY' where id=5; -update noar ti set v0='2C2G5PLZU2E3TRY' where id=5; -update noar tt set b2='16Z3Z4HIPKBBHXHPXNM7TNZUZX48' where id=5; -update noar ti set b2='16Z3Z4HIPKBBHXHPXNM7TNZUZX48' where id=5; -update noar tt set v0='0RHDKGUPVQ8XMC15GW5DAJDF' where id=6; -update noar ti set v0='0RHDKGUPVQ8XMC15GW5DAJDF' where id=6; -update noar tt set b0='GEO5636JY3SWSY1IRJWTNAMP' where id=6; -update noar ti set b0='GEO5636JY3SWSY1IRJWTNAMP' where id=6; -update noar tt set v0='NO1CS3PBA' where id=6; -update noar ti set v0='NO1CS3PBA' where id=6; -update noar tt set b1='RWPFII00Q2NO24PWXEFDW7M00' where id=6; -update noar ti set b1='RWPFII00Q2NO24PWXEFDW7M00' where id=6; -update noar tt set v0='2T8MTSX152AB8THITMTIFD7QQN404' where id=6; -update noar ti set v0='2T8MTSX152AB8THITMTIFD7QQN404' where id=6; -update noar tt set b2='P6IC' where id=6; -update noar ti set b2='P6IC' where id=6; -update noar tt set v0='D2HH5M8CH01W8IC89MT' where id=7; -update noar ti set v0='D2HH5M8CH01W8IC89MT' where id=7; -update noar tt set b0='YIQB0M4KWBZ6YXBY8EYT62EI707BCE' where id=7; -update noar ti set b0='YIQB0M4KWBZ6YXBY8EYT62EI707BCE' where id=7; -update noar tt set v0='6BSXBGQK' where id=7; -update noar ti set v0='6BSXBGQK' where id=7; -update noar tt set b1='YHQW6AU6K913C3GX3EMQCWBQ' where id=7; -update noar ti set b1='YHQW6AU6K913C3GX3EMQCWBQ' where id=7; -update noar tt set v0='BU5VTADN' where id=7; -update noar ti set v0='BU5VTADN' where id=7; -update noar tt set b2='2X6OBIB1EQW6G5OQ7B9ZBT6Y' where id=7; -update noar ti set b2='2X6OBIB1EQW6G5OQ7B9ZBT6Y' where id=7; -update noar tt set v0='H5MIFDOWE3G' where id=8; -update noar ti set v0='H5MIFDOWE3G' where id=8; -update noar tt set b0='JR9R55XL3MU9C14O' where id=8; -update noar ti set b0='JR9R55XL3MU9C14O' where id=8; -update noar tt set v0='757K0OIKSJQDRJ8HGMLX2K2SUYQ' where id=8; -update noar ti set v0='757K0OIKSJQDRJ8HGMLX2K2SUYQ' where id=8; -update noar tt set b1='WY3' where id=8; -update noar ti set b1='WY3' where id=8; -update noar tt set v0='3QVHTO3FQ5YLUA' where id=8; -update noar ti set v0='3QVHTO3FQ5YLUA' where id=8; -update noar tt set b2='3MKUV' where id=8; -update noar ti set b2='3MKUV' where id=8; -update noar tt set v0='PQZ7UCD72P2RRLLOTDR5QPIE0BJ5' where id=9; -update noar ti set v0='PQZ7UCD72P2RRLLOTDR5QPIE0BJ5' where id=9; -update noar tt set b0='1HCMZ4YZ7' where id=9; -update noar ti set b0='1HCMZ4YZ7' where id=9; -update noar tt set v0='KQW7T8CY9ZWP63N00F97' where id=9; -update noar ti set v0='KQW7T8CY9ZWP63N00F97' where id=9; -update noar tt set b1='LIXNRRJC3BLTMWCA0FJMH0BWBFG91YS' where id=9; -update noar ti set b1='LIXNRRJC3BLTMWCA0FJMH0BWBFG91YS' where id=9; -update noar tt set v0='QH156VY8U8ZL89719A6COFXJ2M' where id=9; -update noar ti set v0='QH156VY8U8ZL89719A6COFXJ2M' where id=9; -update noar tt set b2='UCCP3G084WAKSFS9' where id=9; -update noar ti set b2='UCCP3G084WAKSFS9' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 blob not null, - b1 blob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='B5XWHWKNJK1PTAAW3WE2LR2J6HFAJ1KB' where id=1; -update noar ti set v0='B5XWHWKNJK1PTAAW3WE2LR2J6HFAJ1KB' where id=1; -update noar tt set b0='AQK8983Q5PY5B0R7' where id=1; -update noar ti set b0='AQK8983Q5PY5B0R7' where id=1; -update noar tt set v0='IP8OWZPLPHZX08TXADD687XTUE' where id=1; -update noar ti set v0='IP8OWZPLPHZX08TXADD687XTUE' where id=1; -update noar tt set b1='4RLR' where id=1; -update noar ti set b1='4RLR' where id=1; -update noar tt set v0='TTAFDB4FN9JF5C8878TIBJ' where id=1; -update noar ti set v0='TTAFDB4FN9JF5C8878TIBJ' where id=1; -update noar tt set b2='UM91JULKWUQS86JS01ERWEM0HKKFTA2' where id=1; -update noar ti set b2='UM91JULKWUQS86JS01ERWEM0HKKFTA2' where id=1; -update noar tt set v0='V2UXBYWMPOWS06HIIRI3' where id=2; -update noar ti set v0='V2UXBYWMPOWS06HIIRI3' where id=2; -update noar tt set b0='HJHRQ8PV6JHB9DO0L5REVCGSR' where id=2; -update noar ti set b0='HJHRQ8PV6JHB9DO0L5REVCGSR' where id=2; -update noar tt set v0='6ZPN2DJDX5C9RUO' where id=2; -update noar ti set v0='6ZPN2DJDX5C9RUO' where id=2; -update noar tt set b1='B98DODIGBA' where id=2; -update noar ti set b1='B98DODIGBA' where id=2; -update noar tt set v0='KBMTV956BWQYH4IJXTIYJ0Q3O' where id=2; -update noar ti set v0='KBMTV956BWQYH4IJXTIYJ0Q3O' where id=2; -update noar tt set b2='7AN5TAY95NZ' where id=2; -update noar ti set b2='7AN5TAY95NZ' where id=2; -update noar tt set v0='BVLR72H4Z0FASJESJU2DOUKOB6GCMB' where id=3; -update noar ti set v0='BVLR72H4Z0FASJESJU2DOUKOB6GCMB' where id=3; -update noar tt set b0='R23GLO' where id=3; -update noar ti set b0='R23GLO' where id=3; -update noar tt set v0='SWIC1LY6CB222UBSVEA88CKWSHCI73J' where id=3; -update noar ti set v0='SWIC1LY6CB222UBSVEA88CKWSHCI73J' where id=3; -update noar tt set b1='68KKE7M9L7BX2MKZNK9V8CE5UC' where id=3; -update noar ti set b1='68KKE7M9L7BX2MKZNK9V8CE5UC' where id=3; -update noar tt set v0='KFRJRFKWZX9J67QNGE091IEQSQBTR6' where id=3; -update noar ti set v0='KFRJRFKWZX9J67QNGE091IEQSQBTR6' where id=3; -update noar tt set b2='B1LMRJAC7AB7UGP9G1VSYITAFFTF3P2' where id=3; -update noar ti set b2='B1LMRJAC7AB7UGP9G1VSYITAFFTF3P2' where id=3; -update noar tt set v0='MSG8KH2QHKM24IUKFNTQ8' where id=4; -update noar ti set v0='MSG8KH2QHKM24IUKFNTQ8' where id=4; -update noar tt set b0='I7' where id=4; -update noar ti set b0='I7' where id=4; -update noar tt set v0='PYXXJR6FTHTH' where id=4; -update noar ti set v0='PYXXJR6FTHTH' where id=4; -update noar tt set b1='X4P2X' where id=4; -update noar ti set b1='X4P2X' where id=4; -update noar tt set v0='M55060DV5VQIRPHUAWR0F5UKLKH' where id=4; -update noar ti set v0='M55060DV5VQIRPHUAWR0F5UKLKH' where id=4; -update noar tt set b2='56NSLOR' where id=4; -update noar ti set b2='56NSLOR' where id=4; -update noar tt set v0='QH36L2YOAWU06RR48JCSQYG' where id=5; -update noar ti set v0='QH36L2YOAWU06RR48JCSQYG' where id=5; -update noar tt set b0='2LCECGVHIAFWLKMIXTTT3BYU5' where id=5; -update noar ti set b0='2LCECGVHIAFWLKMIXTTT3BYU5' where id=5; -update noar tt set v0='GLKR0M2RG0IUN3IOH' where id=5; -update noar ti set v0='GLKR0M2RG0IUN3IOH' where id=5; -update noar tt set b1='ZCNWUWA14AQ' where id=5; -update noar ti set b1='ZCNWUWA14AQ' where id=5; -update noar tt set v0='ZWRT6V7UMML' where id=5; -update noar ti set v0='ZWRT6V7UMML' where id=5; -update noar tt set b2='DHXQZ16C5P2JJURQTU' where id=5; -update noar ti set b2='DHXQZ16C5P2JJURQTU' where id=5; -update noar tt set v0='RU30IHVPF8JHJGMLZKOU55R6WW20DW' where id=6; -update noar ti set v0='RU30IHVPF8JHJGMLZKOU55R6WW20DW' where id=6; -update noar tt set b0='K7GJAPHJY1ZCZMPZOBR5U' where id=6; -update noar ti set b0='K7GJAPHJY1ZCZMPZOBR5U' where id=6; -update noar tt set v0='IQ' where id=6; -update noar ti set v0='IQ' where id=6; -update noar tt set b1='ZT2H1ROSHU1ODB231F591' where id=6; -update noar ti set b1='ZT2H1ROSHU1ODB231F591' where id=6; -update noar tt set v0='8UTCDLMXU17E' where id=6; -update noar ti set v0='8UTCDLMXU17E' where id=6; -update noar tt set b2='3U5LUDCE6AQK366' where id=6; -update noar ti set b2='3U5LUDCE6AQK366' where id=6; -update noar tt set v0='WYF3G4OSDUYMDMLQ' where id=7; -update noar ti set v0='WYF3G4OSDUYMDMLQ' where id=7; -update noar tt set b0='890M8R8857IUJ70D0R1EO6359' where id=7; -update noar ti set b0='890M8R8857IUJ70D0R1EO6359' where id=7; -update noar tt set v0='GAKJP' where id=7; -update noar ti set v0='GAKJP' where id=7; -update noar tt set b1='XAF' where id=7; -update noar ti set b1='XAF' where id=7; -update noar tt set v0='CO83M' where id=7; -update noar ti set v0='CO83M' where id=7; -update noar tt set b2='371Y58KL7UAFIVULL2UW4R' where id=7; -update noar ti set b2='371Y58KL7UAFIVULL2UW4R' where id=7; -update noar tt set v0='WQBVS64ACCNCTC3D9SV53X8W0WD' where id=8; -update noar ti set v0='WQBVS64ACCNCTC3D9SV53X8W0WD' where id=8; -update noar tt set b0='RNW6XQ2XV1AS9DV0' where id=8; -update noar ti set b0='RNW6XQ2XV1AS9DV0' where id=8; -update noar tt set v0='LCNOX19GU690FN2NIQRA3QKMP9FUNVDZ' where id=8; -update noar ti set v0='LCNOX19GU690FN2NIQRA3QKMP9FUNVDZ' where id=8; -update noar tt set b1='EOMGAJHOPKPSVL99' where id=8; -update noar ti set b1='EOMGAJHOPKPSVL99' where id=8; -update noar tt set v0='VDJG5ZCF3S6PTJOV' where id=8; -update noar ti set v0='VDJG5ZCF3S6PTJOV' where id=8; -update noar tt set b2='Q0HJLIWI2BE553NIPGDXQOOJGJ' where id=8; -update noar ti set b2='Q0HJLIWI2BE553NIPGDXQOOJGJ' where id=8; -update noar tt set v0='UJO9DQD1TU15WJKC' where id=9; -update noar ti set v0='UJO9DQD1TU15WJKC' where id=9; -update noar tt set b0='PGTZGOTNUPLUUDVRJTDCES61UL1' where id=9; -update noar ti set b0='PGTZGOTNUPLUUDVRJTDCES61UL1' where id=9; -update noar tt set v0='4JA99KW3OHT06PG4IRSV' where id=9; -update noar ti set v0='4JA99KW3OHT06PG4IRSV' where id=9; -update noar tt set b1='HSHJIRXKIY2IF1G0KY9P' where id=9; -update noar ti set b1='HSHJIRXKIY2IF1G0KY9P' where id=9; -update noar tt set v0='8MCAYW972R5T' where id=9; -update noar ti set v0='8MCAYW972R5T' where id=9; -update noar tt set b2='2VCOWY8HEVHJSPX5MYW4L7HI' where id=9; -update noar ti set b2='2VCOWY8HEVHJSPX5MYW4L7HI' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 blob not null, - b1 blob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='ENG49' where id=1; -update noar ti set v0='ENG49' where id=1; -update noar tt set b0='CC500FPMVMNWMSGW424KY2TO4M9UM1I' where id=1; -update noar ti set b0='CC500FPMVMNWMSGW424KY2TO4M9UM1I' where id=1; -update noar tt set v0='N35ZIBQB' where id=1; -update noar ti set v0='N35ZIBQB' where id=1; -update noar tt set b1='KBMT6QF7K2S3MWCAVA3' where id=1; -update noar ti set b1='KBMT6QF7K2S3MWCAVA3' where id=1; -update noar tt set v0='9W839TN2URY' where id=1; -update noar ti set v0='9W839TN2URY' where id=1; -update noar tt set b2='P3S0AXGAUQ91SA3VW' where id=1; -update noar ti set b2='P3S0AXGAUQ91SA3VW' where id=1; -update noar tt set v0='Q8QLH334JIMV81KILO7AU06LOC4Z1O1O' where id=2; -update noar ti set v0='Q8QLH334JIMV81KILO7AU06LOC4Z1O1O' where id=2; -update noar tt set b0='5BY3E035HCQQ4L4' where id=2; -update noar ti set b0='5BY3E035HCQQ4L4' where id=2; -update noar tt set v0='M5FEIQEDND1P8UWOVN3P' where id=2; -update noar ti set v0='M5FEIQEDND1P8UWOVN3P' where id=2; -update noar tt set b1='R7EBVNKM3HNZ5L2AFQEON2UI7HD36K9E' where id=2; -update noar ti set b1='R7EBVNKM3HNZ5L2AFQEON2UI7HD36K9E' where id=2; -update noar tt set v0='DHHDQ3CQMQCK' where id=2; -update noar ti set v0='DHHDQ3CQMQCK' where id=2; -update noar tt set b2='CG4GXAPLZKCM24PCDQ1I8A1JLKVMJ6Q' where id=2; -update noar ti set b2='CG4GXAPLZKCM24PCDQ1I8A1JLKVMJ6Q' where id=2; -update noar tt set v0='D20TQ70E2LNLI3QF18LPVXFBDSSCU' where id=3; -update noar ti set v0='D20TQ70E2LNLI3QF18LPVXFBDSSCU' where id=3; -update noar tt set b0='S0F6W6' where id=3; -update noar ti set b0='S0F6W6' where id=3; -update noar tt set v0='8TXFK8J3YQE' where id=3; -update noar ti set v0='8TXFK8J3YQE' where id=3; -update noar tt set b1='L9AZE8OV907G' where id=3; -update noar ti set b1='L9AZE8OV907G' where id=3; -update noar tt set v0='6Z' where id=3; -update noar ti set v0='6Z' where id=3; -update noar tt set b2='HYR' where id=3; -update noar ti set b2='HYR' where id=3; -update noar tt set v0='1IUL5P' where id=4; -update noar ti set v0='1IUL5P' where id=4; -update noar tt set b0='LFU6C4D28N' where id=4; -update noar ti set b0='LFU6C4D28N' where id=4; -update noar tt set v0='ZGT0Q9C8MAV' where id=4; -update noar ti set v0='ZGT0Q9C8MAV' where id=4; -update noar tt set b1='3Q1CIJU2ET0QY2ET4F0M' where id=4; -update noar ti set b1='3Q1CIJU2ET0QY2ET4F0M' where id=4; -update noar tt set v0='L3TPCI2P' where id=4; -update noar ti set v0='L3TPCI2P' where id=4; -update noar tt set b2='BV' where id=4; -update noar ti set b2='BV' where id=4; -update noar tt set v0='OLX65KBZY06B4KDG5FZXOE' where id=5; -update noar ti set v0='OLX65KBZY06B4KDG5FZXOE' where id=5; -update noar tt set b0='5D' where id=5; -update noar ti set b0='5D' where id=5; -update noar tt set v0='DXUJXA204RFEN0IGC2ISZ' where id=5; -update noar ti set v0='DXUJXA204RFEN0IGC2ISZ' where id=5; -update noar tt set b1='T9B8J1J29GAH1GTF24ZRXT' where id=5; -update noar ti set b1='T9B8J1J29GAH1GTF24ZRXT' where id=5; -update noar tt set v0='3EE6K56HE' where id=5; -update noar ti set v0='3EE6K56HE' where id=5; -update noar tt set b2='XNXG479PGDSVM' where id=5; -update noar ti set b2='XNXG479PGDSVM' where id=5; -update noar tt set v0='TU519WQ6YW7X' where id=6; -update noar ti set v0='TU519WQ6YW7X' where id=6; -update noar tt set b0='D80AY6WP' where id=6; -update noar ti set b0='D80AY6WP' where id=6; -update noar tt set v0='OSLSZUUNTMAMBJTKL9P2P8FG1KME9BRZ' where id=6; -update noar ti set v0='OSLSZUUNTMAMBJTKL9P2P8FG1KME9BRZ' where id=6; -update noar tt set b1='YO2I2OY2A' where id=6; -update noar ti set b1='YO2I2OY2A' where id=6; -update noar tt set v0='R0A4ZAK0TNLTO6D1' where id=6; -update noar ti set v0='R0A4ZAK0TNLTO6D1' where id=6; -update noar tt set b2='ORM5UFLVZL' where id=6; -update noar ti set b2='ORM5UFLVZL' where id=6; -update noar tt set v0='TWNRHB4VTSV3TNI' where id=7; -update noar ti set v0='TWNRHB4VTSV3TNI' where id=7; -update noar tt set b0='WLBEJX29J9LH' where id=7; -update noar ti set b0='WLBEJX29J9LH' where id=7; -update noar tt set v0='4SEBSEP726' where id=7; -update noar ti set v0='4SEBSEP726' where id=7; -update noar tt set b1='WQJ4FZ3EN' where id=7; -update noar ti set b1='WQJ4FZ3EN' where id=7; -update noar tt set v0='I2UON3E46X9W1FV9OJ' where id=7; -update noar ti set v0='I2UON3E46X9W1FV9OJ' where id=7; -update noar tt set b2='6FSY81G28EGA82XS4LF52PPSSADGD5K' where id=7; -update noar ti set b2='6FSY81G28EGA82XS4LF52PPSSADGD5K' where id=7; -update noar tt set v0='GBBQ2D31H' where id=8; -update noar ti set v0='GBBQ2D31H' where id=8; -update noar tt set b0='1NQBHYLDY0JE' where id=8; -update noar ti set b0='1NQBHYLDY0JE' where id=8; -update noar tt set v0='ENOVCTT9B3' where id=8; -update noar ti set v0='ENOVCTT9B3' where id=8; -update noar tt set b1='SJH2ZOTLTP9D02' where id=8; -update noar ti set b1='SJH2ZOTLTP9D02' where id=8; -update noar tt set v0='MSCQXU7VJ38WSMX' where id=8; -update noar ti set v0='MSCQXU7VJ38WSMX' where id=8; -update noar tt set b2='FBT7QAYDD2U5S22C1QF9NS7' where id=8; -update noar ti set b2='FBT7QAYDD2U5S22C1QF9NS7' where id=8; -update noar tt set v0='Y0SJA2IOKECPIS5QW2PTYE5' where id=9; -update noar ti set v0='Y0SJA2IOKECPIS5QW2PTYE5' where id=9; -update noar tt set b0='6GLYG' where id=9; -update noar ti set b0='6GLYG' where id=9; -update noar tt set v0='LDP7KC70MWPL3R4686063RI' where id=9; -update noar ti set v0='LDP7KC70MWPL3R4686063RI' where id=9; -update noar tt set b1='S9MLH5GW19JH2HIHQ0YXIZV0Z6CT94E' where id=9; -update noar ti set b1='S9MLH5GW19JH2HIHQ0YXIZV0Z6CT94E' where id=9; -update noar tt set v0='GI52HNS13DFOWW8DKGSYZXD8W5JRDSHZ' where id=9; -update noar ti set v0='GI52HNS13DFOWW8DKGSYZXD8W5JRDSHZ' where id=9; -update noar tt set b2='P0HCZMA4VF' where id=9; -update noar ti set b2='P0HCZMA4VF' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 blob null, - b1 blob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='KZT4TITWSAVW' where id=1; -update noar ti set v0='KZT4TITWSAVW' where id=1; -update noar tt set b0='MS2OUXU7H' where id=1; -update noar ti set b0='MS2OUXU7H' where id=1; -update noar tt set v0='RY' where id=1; -update noar ti set v0='RY' where id=1; -update noar tt set b1='BSHEN5MCKW9CQP29YR167VE7OUDS2A8' where id=1; -update noar ti set b1='BSHEN5MCKW9CQP29YR167VE7OUDS2A8' where id=1; -update noar tt set v0='CGPE5W5TTQ1EC76HOL6MUMFSVEOH1ZY' where id=1; -update noar ti set v0='CGPE5W5TTQ1EC76HOL6MUMFSVEOH1ZY' where id=1; -update noar tt set b2='6PJPF2HUYQNROCDVBG885HGVZAA1' where id=1; -update noar ti set b2='6PJPF2HUYQNROCDVBG885HGVZAA1' where id=1; -update noar tt set v0='19A8GWJU54GNZ4UPXPEV15RAOXN9TB' where id=2; -update noar ti set v0='19A8GWJU54GNZ4UPXPEV15RAOXN9TB' where id=2; -update noar tt set b0='YIKOB' where id=2; -update noar ti set b0='YIKOB' where id=2; -update noar tt set v0='F7AZ48ZE2R07' where id=2; -update noar ti set v0='F7AZ48ZE2R07' where id=2; -update noar tt set b1='HVFXLESGBGUUCNI2O' where id=2; -update noar ti set b1='HVFXLESGBGUUCNI2O' where id=2; -update noar tt set v0='E' where id=2; -update noar ti set v0='E' where id=2; -update noar tt set b2='32NVYGC7UFWUF' where id=2; -update noar ti set b2='32NVYGC7UFWUF' where id=2; -update noar tt set v0='OAWFILZI2' where id=3; -update noar ti set v0='OAWFILZI2' where id=3; -update noar tt set b0='F5MGCCZC3QRC0G7O7DXNV5' where id=3; -update noar ti set b0='F5MGCCZC3QRC0G7O7DXNV5' where id=3; -update noar tt set v0='S4GGFIZV' where id=3; -update noar ti set v0='S4GGFIZV' where id=3; -update noar tt set b1='A05BY29833UWJI' where id=3; -update noar ti set b1='A05BY29833UWJI' where id=3; -update noar tt set v0='A2U5BBM5CO530IDG0L' where id=3; -update noar ti set v0='A2U5BBM5CO530IDG0L' where id=3; -update noar tt set b2='7YUCW7R' where id=3; -update noar ti set b2='7YUCW7R' where id=3; -update noar tt set v0='VUT491Y62VENDE771WY7NLRRNLHAVSR' where id=4; -update noar ti set v0='VUT491Y62VENDE771WY7NLRRNLHAVSR' where id=4; -update noar tt set b0='4DWXPSGTTRKGHF9BFBP' where id=4; -update noar ti set b0='4DWXPSGTTRKGHF9BFBP' where id=4; -update noar tt set v0='ASBOMH781KLEZG0' where id=4; -update noar ti set v0='ASBOMH781KLEZG0' where id=4; -update noar tt set b1='OGREEJZ8RQ09U5JUZ7' where id=4; -update noar ti set b1='OGREEJZ8RQ09U5JUZ7' where id=4; -update noar tt set v0='A7AGXSU' where id=4; -update noar ti set v0='A7AGXSU' where id=4; -update noar tt set b2='LCK4BHD71I43QITRTL8J2RPF7NW' where id=4; -update noar ti set b2='LCK4BHD71I43QITRTL8J2RPF7NW' where id=4; -update noar tt set v0='JAAU91Z614BWAJH62SJ71ACXIWV7963Z' where id=5; -update noar ti set v0='JAAU91Z614BWAJH62SJ71ACXIWV7963Z' where id=5; -update noar tt set b0='LWF1RT6HAO61NQLSX4Q' where id=5; -update noar ti set b0='LWF1RT6HAO61NQLSX4Q' where id=5; -update noar tt set v0='7U7YXPLPZTU0YWTF62GTY' where id=5; -update noar ti set v0='7U7YXPLPZTU0YWTF62GTY' where id=5; -update noar tt set b1='3COYWTUBNXWU7X7TWVK9VMAU1YFB' where id=5; -update noar ti set b1='3COYWTUBNXWU7X7TWVK9VMAU1YFB' where id=5; -update noar tt set v0='6QPMHGUWTKBKH4AN5NOID9F' where id=5; -update noar ti set v0='6QPMHGUWTKBKH4AN5NOID9F' where id=5; -update noar tt set b2='EC9BO0421XEECDWTKT0' where id=5; -update noar ti set b2='EC9BO0421XEECDWTKT0' where id=5; -update noar tt set v0='B16EWXV2LGK4VC7MR' where id=6; -update noar ti set v0='B16EWXV2LGK4VC7MR' where id=6; -update noar tt set b0='21YMLLW5I0751DD0QL8LF2TNZTF5' where id=6; -update noar ti set b0='21YMLLW5I0751DD0QL8LF2TNZTF5' where id=6; -update noar tt set v0='9Y80NY2KR11EOZQVYZEB' where id=6; -update noar ti set v0='9Y80NY2KR11EOZQVYZEB' where id=6; -update noar tt set b1='EDL7NLGZBGIODSCYAC3RLC5407FC' where id=6; -update noar ti set b1='EDL7NLGZBGIODSCYAC3RLC5407FC' where id=6; -update noar tt set v0='S' where id=6; -update noar ti set v0='S' where id=6; -update noar tt set b2='F0D2IUT8' where id=6; -update noar ti set b2='F0D2IUT8' where id=6; -update noar tt set v0='93LTA852LOLF0IESR722O61Y2VK' where id=7; -update noar ti set v0='93LTA852LOLF0IESR722O61Y2VK' where id=7; -update noar tt set b0='OVK9LD' where id=7; -update noar ti set b0='OVK9LD' where id=7; -update noar tt set v0='N4AFLHOQ4FHMG1NK6I9K8XD1816O9MJ0' where id=7; -update noar ti set v0='N4AFLHOQ4FHMG1NK6I9K8XD1816O9MJ0' where id=7; -update noar tt set b1='BPGSSJF0S7L3QETMS2QPI1QJSV8UCXSI' where id=7; -update noar ti set b1='BPGSSJF0S7L3QETMS2QPI1QJSV8UCXSI' where id=7; -update noar tt set v0='4GLFBFZ0GPO0GNAZ5K7UX' where id=7; -update noar ti set v0='4GLFBFZ0GPO0GNAZ5K7UX' where id=7; -update noar tt set b2='WVWQ2LLDE3VBP9P' where id=7; -update noar ti set b2='WVWQ2LLDE3VBP9P' where id=7; -update noar tt set v0='NQ6' where id=8; -update noar ti set v0='NQ6' where id=8; -update noar tt set b0='BOXGC4GCCCRQM6T0LDBPUJF75' where id=8; -update noar ti set b0='BOXGC4GCCCRQM6T0LDBPUJF75' where id=8; -update noar tt set v0='7QLX07FRSBDU38ORE' where id=8; -update noar ti set v0='7QLX07FRSBDU38ORE' where id=8; -update noar tt set b1='1ILLBG9' where id=8; -update noar ti set b1='1ILLBG9' where id=8; -update noar tt set v0='FDGID' where id=8; -update noar ti set v0='FDGID' where id=8; -update noar tt set b2='87ZTUHZWGN0CX0YNEOFHO8IXL' where id=8; -update noar ti set b2='87ZTUHZWGN0CX0YNEOFHO8IXL' where id=8; -update noar tt set v0='NKZR2PECZ' where id=9; -update noar ti set v0='NKZR2PECZ' where id=9; -update noar tt set b0='484DD78SBLNA35RJQBLVGQCVA1QL' where id=9; -update noar ti set b0='484DD78SBLNA35RJQBLVGQCVA1QL' where id=9; -update noar tt set v0='18X4UT9C0J' where id=9; -update noar ti set v0='18X4UT9C0J' where id=9; -update noar tt set b1='E3AYHM3R9W9OKRLVKDRVAGAXA8I' where id=9; -update noar ti set b1='E3AYHM3R9W9OKRLVKDRVAGAXA8I' where id=9; -update noar tt set v0='8N5JKPFXKDYCYKUCCOC' where id=9; -update noar ti set v0='8N5JKPFXKDYCYKUCCOC' where id=9; -update noar tt set b2='SCY40ATF' where id=9; -update noar ti set b2='SCY40ATF' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 blob null, - b1 blob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='4VBEPI09G8SPPCW5FXZHBLP' where id=1; -update noar ti set v0='4VBEPI09G8SPPCW5FXZHBLP' where id=1; -update noar tt set b0='381N4RLRMC0D' where id=1; -update noar ti set b0='381N4RLRMC0D' where id=1; -update noar tt set v0='DHJ7C' where id=1; -update noar ti set v0='DHJ7C' where id=1; -update noar tt set b1='LU07O32FRLKX9HOGTN3C2O' where id=1; -update noar ti set b1='LU07O32FRLKX9HOGTN3C2O' where id=1; -update noar tt set v0='I58R' where id=1; -update noar ti set v0='I58R' where id=1; -update noar tt set b2='H12L' where id=1; -update noar ti set b2='H12L' where id=1; -update noar tt set v0='S4E0LXUEP4TR7' where id=2; -update noar ti set v0='S4E0LXUEP4TR7' where id=2; -update noar tt set b0='LD' where id=2; -update noar ti set b0='LD' where id=2; -update noar tt set v0='13JTXWVY' where id=2; -update noar ti set v0='13JTXWVY' where id=2; -update noar tt set b1='264Z2OB6' where id=2; -update noar ti set b1='264Z2OB6' where id=2; -update noar tt set v0='7GSMC2W1SF05' where id=2; -update noar ti set v0='7GSMC2W1SF05' where id=2; -update noar tt set b2='P2KSDF6IVFF4VJAHV33OOHO8FUXWFV' where id=2; -update noar ti set b2='P2KSDF6IVFF4VJAHV33OOHO8FUXWFV' where id=2; -update noar tt set v0='MQQQQ' where id=3; -update noar ti set v0='MQQQQ' where id=3; -update noar tt set b0='VARZC6C3Y' where id=3; -update noar ti set b0='VARZC6C3Y' where id=3; -update noar tt set v0='94ZHFDNQC5W09VUX8' where id=3; -update noar ti set v0='94ZHFDNQC5W09VUX8' where id=3; -update noar tt set b1='SZFP38YO' where id=3; -update noar ti set b1='SZFP38YO' where id=3; -update noar tt set v0='B3MHLTZF4D4W5M3ZBI47RIL' where id=3; -update noar ti set v0='B3MHLTZF4D4W5M3ZBI47RIL' where id=3; -update noar tt set b2='94CW2MS7OBE27RATU2K' where id=3; -update noar ti set b2='94CW2MS7OBE27RATU2K' where id=3; -update noar tt set v0='3VGGAK2BTYF' where id=4; -update noar ti set v0='3VGGAK2BTYF' where id=4; -update noar tt set b0='TBWDT3KUPZ9EHA0Y3YK2BRL3B149F' where id=4; -update noar ti set b0='TBWDT3KUPZ9EHA0Y3YK2BRL3B149F' where id=4; -update noar tt set v0='JPUAMYXPU' where id=4; -update noar ti set v0='JPUAMYXPU' where id=4; -update noar tt set b1='M5186X143OMHX2Q98B' where id=4; -update noar ti set b1='M5186X143OMHX2Q98B' where id=4; -update noar tt set v0='ZFDZ7' where id=4; -update noar ti set v0='ZFDZ7' where id=4; -update noar tt set b2='NCCKPHFEGEPORMH4V' where id=4; -update noar ti set b2='NCCKPHFEGEPORMH4V' where id=4; -update noar tt set v0='GHQAPQOX6JEV40OEJRPUP' where id=5; -update noar ti set v0='GHQAPQOX6JEV40OEJRPUP' where id=5; -update noar tt set b0='SMGA31AX' where id=5; -update noar ti set b0='SMGA31AX' where id=5; -update noar tt set v0='3A15NHFIOVRW99JYUA7JQ9Y15XGX9LA' where id=5; -update noar ti set v0='3A15NHFIOVRW99JYUA7JQ9Y15XGX9LA' where id=5; -update noar tt set b1='BA' where id=5; -update noar ti set b1='BA' where id=5; -update noar tt set v0='HSCKK0YJLWM2E1ZFYWEK7AR75FKNXHB' where id=5; -update noar ti set v0='HSCKK0YJLWM2E1ZFYWEK7AR75FKNXHB' where id=5; -update noar tt set b2='4IE6YTZW3CTEGXJIEYQALLFLEM0B78Q' where id=5; -update noar ti set b2='4IE6YTZW3CTEGXJIEYQALLFLEM0B78Q' where id=5; -update noar tt set v0='CBCSJHTN2BBEAJ9V4QEIYTZ' where id=6; -update noar ti set v0='CBCSJHTN2BBEAJ9V4QEIYTZ' where id=6; -update noar tt set b0='RKUVTNPX4GR1GAX8BS2IT93U3' where id=6; -update noar ti set b0='RKUVTNPX4GR1GAX8BS2IT93U3' where id=6; -update noar tt set v0='UQXMATR53GSSZMHQKTE4M4N3626E6ZU' where id=6; -update noar ti set v0='UQXMATR53GSSZMHQKTE4M4N3626E6ZU' where id=6; -update noar tt set b1='ZW' where id=6; -update noar ti set b1='ZW' where id=6; -update noar tt set v0='6J9B03ZBROAKM4HQQQ959FGUNOM7V' where id=6; -update noar ti set v0='6J9B03ZBROAKM4HQQQ959FGUNOM7V' where id=6; -update noar tt set b2='07RU3USF09KPQZ7' where id=6; -update noar ti set b2='07RU3USF09KPQZ7' where id=6; -update noar tt set v0='RLL8IP6UB' where id=7; -update noar ti set v0='RLL8IP6UB' where id=7; -update noar tt set b0='P3DQGX3L' where id=7; -update noar ti set b0='P3DQGX3L' where id=7; -update noar tt set v0='95M3L' where id=7; -update noar ti set v0='95M3L' where id=7; -update noar tt set b1='VDCAY' where id=7; -update noar ti set b1='VDCAY' where id=7; -update noar tt set v0='7WR5VZBXN0SVY0DD7UXTPQYHKDC2W' where id=7; -update noar ti set v0='7WR5VZBXN0SVY0DD7UXTPQYHKDC2W' where id=7; -update noar tt set b2='X51HMOWCX' where id=7; -update noar ti set b2='X51HMOWCX' where id=7; -update noar tt set v0='VPTFJZK29D3MMNMD77E0UT0J' where id=8; -update noar ti set v0='VPTFJZK29D3MMNMD77E0UT0J' where id=8; -update noar tt set b0='HB' where id=8; -update noar ti set b0='HB' where id=8; -update noar tt set v0='N3HTNHHNY9BUUM5QQ3MTLMBJSDH' where id=8; -update noar ti set v0='N3HTNHHNY9BUUM5QQ3MTLMBJSDH' where id=8; -update noar tt set b1='MWHWBCVEFHQVYVQBBWF8XZCC3' where id=8; -update noar ti set b1='MWHWBCVEFHQVYVQBBWF8XZCC3' where id=8; -update noar tt set v0='TZO' where id=8; -update noar ti set v0='TZO' where id=8; -update noar tt set b2='6LK6355' where id=8; -update noar ti set b2='6LK6355' where id=8; -update noar tt set v0='D55XI3MV' where id=9; -update noar ti set v0='D55XI3MV' where id=9; -update noar tt set b0='3XNAX8XQ' where id=9; -update noar ti set b0='3XNAX8XQ' where id=9; -update noar tt set v0='623IIHDLWODSZUZ70NCJRD1SW6WD' where id=9; -update noar ti set v0='623IIHDLWODSZUZ70NCJRD1SW6WD' where id=9; -update noar tt set b1='C8MXNIQUVCCV2USUQDALLU7ED0YYMAW' where id=9; -update noar ti set b1='C8MXNIQUVCCV2USUQDALLU7ED0YYMAW' where id=9; -update noar tt set v0='8K8' where id=9; -update noar ti set v0='8K8' where id=9; -update noar tt set b2='HM48O4S280' where id=9; -update noar ti set b2='HM48O4S280' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 blob not null, - b1 blob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='B2JJ0IGT466DD342NIHJ400FPS8S' where id=1; -update noar ti set v0='B2JJ0IGT466DD342NIHJ400FPS8S' where id=1; -update noar tt set b0='FO755' where id=1; -update noar ti set b0='FO755' where id=1; -update noar tt set v0='89' where id=1; -update noar ti set v0='89' where id=1; -update noar tt set b1='7946EO9X7PL581IWEZ3QTRXSK6A11' where id=1; -update noar ti set b1='7946EO9X7PL581IWEZ3QTRXSK6A11' where id=1; -update noar tt set v0='COQN6PNGXOQXES6' where id=1; -update noar ti set v0='COQN6PNGXOQXES6' where id=1; -update noar tt set b2='XG9D3WDSSW5Z21EUEQEJ892RQ' where id=1; -update noar ti set b2='XG9D3WDSSW5Z21EUEQEJ892RQ' where id=1; -update noar tt set v0='V' where id=2; -update noar ti set v0='V' where id=2; -update noar tt set b0='NIN' where id=2; -update noar ti set b0='NIN' where id=2; -update noar tt set v0='Z5ZTHUP' where id=2; -update noar ti set v0='Z5ZTHUP' where id=2; -update noar tt set b1='SHSQU3S' where id=2; -update noar ti set b1='SHSQU3S' where id=2; -update noar tt set v0='ZSTBY' where id=2; -update noar ti set v0='ZSTBY' where id=2; -update noar tt set b2='DNAHKYH' where id=2; -update noar ti set b2='DNAHKYH' where id=2; -update noar tt set v0='1E' where id=3; -update noar ti set v0='1E' where id=3; -update noar tt set b0='9NWJEJLUQ3KAVOGLK' where id=3; -update noar ti set b0='9NWJEJLUQ3KAVOGLK' where id=3; -update noar tt set v0='NOQSB3S67WPMDZM6A036SMYSGU80B' where id=3; -update noar ti set v0='NOQSB3S67WPMDZM6A036SMYSGU80B' where id=3; -update noar tt set b1='8I7YP47E3CQBFANVYEKZOZLJP8' where id=3; -update noar ti set b1='8I7YP47E3CQBFANVYEKZOZLJP8' where id=3; -update noar tt set v0='LZ9ETUNO1IWKIAK0ZRDAB3O96A' where id=3; -update noar ti set v0='LZ9ETUNO1IWKIAK0ZRDAB3O96A' where id=3; -update noar tt set b2='64I3VO6HNCPPA0DE1PX5S' where id=3; -update noar ti set b2='64I3VO6HNCPPA0DE1PX5S' where id=3; -update noar tt set v0='PC' where id=4; -update noar ti set v0='PC' where id=4; -update noar tt set b0='JOCZYPPDR7NFLDAT5IG1' where id=4; -update noar ti set b0='JOCZYPPDR7NFLDAT5IG1' where id=4; -update noar tt set v0='URXU7X4PYID73D97NZ50T86CX4OPJ4' where id=4; -update noar ti set v0='URXU7X4PYID73D97NZ50T86CX4OPJ4' where id=4; -update noar tt set b1='0S7UQTKIGW' where id=4; -update noar ti set b1='0S7UQTKIGW' where id=4; -update noar tt set v0='O5F8E7YXH2D6063EZ20WUQCN2DW' where id=4; -update noar ti set v0='O5F8E7YXH2D6063EZ20WUQCN2DW' where id=4; -update noar tt set b2='K' where id=4; -update noar ti set b2='K' where id=4; -update noar tt set v0='7YHFQU3I4EH17J' where id=5; -update noar ti set v0='7YHFQU3I4EH17J' where id=5; -update noar tt set b0='JAALZOAOZI17GTLPFQTCWR' where id=5; -update noar ti set b0='JAALZOAOZI17GTLPFQTCWR' where id=5; -update noar tt set v0='4U8709VO9FIYKA7T9Z99PS59' where id=5; -update noar ti set v0='4U8709VO9FIYKA7T9Z99PS59' where id=5; -update noar tt set b1='UXW7' where id=5; -update noar ti set b1='UXW7' where id=5; -update noar tt set v0='YVFKHHOIEIMABGM4WZRX1O9' where id=5; -update noar ti set v0='YVFKHHOIEIMABGM4WZRX1O9' where id=5; -update noar tt set b2='3GCA4MWQN128COX' where id=5; -update noar ti set b2='3GCA4MWQN128COX' where id=5; -update noar tt set v0='ZYR9GELTCZP2NWRW5QOTLLS3ZF' where id=6; -update noar ti set v0='ZYR9GELTCZP2NWRW5QOTLLS3ZF' where id=6; -update noar tt set b0='BTMAHZR2EK3MAIUXOX8E7EG' where id=6; -update noar ti set b0='BTMAHZR2EK3MAIUXOX8E7EG' where id=6; -update noar tt set v0='UBVGUXSKIE68E1CG7WOKZRJ1QSBPA252' where id=6; -update noar ti set v0='UBVGUXSKIE68E1CG7WOKZRJ1QSBPA252' where id=6; -update noar tt set b1='KQ7OEZ03N8YPTLINJ7' where id=6; -update noar ti set b1='KQ7OEZ03N8YPTLINJ7' where id=6; -update noar tt set v0='0XMSEDDO7HX8GH1QM6117FJ6YK8VTM' where id=6; -update noar ti set v0='0XMSEDDO7HX8GH1QM6117FJ6YK8VTM' where id=6; -update noar tt set b2='RWAT2ATCZWTNLY9A91RK79C' where id=6; -update noar ti set b2='RWAT2ATCZWTNLY9A91RK79C' where id=6; -update noar tt set v0='4A5G3ZF7L9RXF' where id=7; -update noar ti set v0='4A5G3ZF7L9RXF' where id=7; -update noar tt set b0='FDVTNNXXLTQB3HKOPMA34SFHVRGC' where id=7; -update noar ti set b0='FDVTNNXXLTQB3HKOPMA34SFHVRGC' where id=7; -update noar tt set v0='O545BWFODY258MOQWZ26KP8Y4QPYY7B' where id=7; -update noar ti set v0='O545BWFODY258MOQWZ26KP8Y4QPYY7B' where id=7; -update noar tt set b1='60YVF7NMPB' where id=7; -update noar ti set b1='60YVF7NMPB' where id=7; -update noar tt set v0='OHTHMKDOEGGX9M7VLR64FK4M2DUB' where id=7; -update noar ti set v0='OHTHMKDOEGGX9M7VLR64FK4M2DUB' where id=7; -update noar tt set b2='NLDSV2MQM36K02HEYDSD' where id=7; -update noar ti set b2='NLDSV2MQM36K02HEYDSD' where id=7; -update noar tt set v0='NSVK00ZZHXTIDSF1' where id=8; -update noar ti set v0='NSVK00ZZHXTIDSF1' where id=8; -update noar tt set b0='OZ59JEWF82GC2DJ1' where id=8; -update noar ti set b0='OZ59JEWF82GC2DJ1' where id=8; -update noar tt set v0='6M8' where id=8; -update noar ti set v0='6M8' where id=8; -update noar tt set b1='TU5AVI81UW' where id=8; -update noar ti set b1='TU5AVI81UW' where id=8; -update noar tt set v0='5WHYY1VSTGCA62RV0' where id=8; -update noar ti set v0='5WHYY1VSTGCA62RV0' where id=8; -update noar tt set b2='9PJX6OWQDJLM' where id=8; -update noar ti set b2='9PJX6OWQDJLM' where id=8; -update noar tt set v0='VZ' where id=9; -update noar ti set v0='VZ' where id=9; -update noar tt set b0='P0' where id=9; -update noar ti set b0='P0' where id=9; -update noar tt set v0='L71F' where id=9; -update noar ti set v0='L71F' where id=9; -update noar tt set b1='7GTH98IMQ0U3ARQCD1XHK55RU' where id=9; -update noar ti set b1='7GTH98IMQ0U3ARQCD1XHK55RU' where id=9; -update noar tt set v0='VVQJPK9ZTNHS64JB3ILOAQP' where id=9; -update noar ti set v0='VVQJPK9ZTNHS64JB3ILOAQP' where id=9; -update noar tt set b2='EW05R5GNAKQQNJRGVUY38Y7' where id=9; -update noar ti set b2='EW05R5GNAKQQNJRGVUY38Y7' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 blob not null, - b1 blob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='SA3X4JGOB68SJY9L5HH' where id=1; -update noar ti set v0='SA3X4JGOB68SJY9L5HH' where id=1; -update noar tt set b0='MDBK6YRQI3R883' where id=1; -update noar ti set b0='MDBK6YRQI3R883' where id=1; -update noar tt set v0='QRY6Y5CO8TA' where id=1; -update noar ti set v0='QRY6Y5CO8TA' where id=1; -update noar tt set b1='QLAZUHHET2' where id=1; -update noar ti set b1='QLAZUHHET2' where id=1; -update noar tt set v0='SZ5M12GN5B6DGH3329T884PHFYEMUGH' where id=1; -update noar ti set v0='SZ5M12GN5B6DGH3329T884PHFYEMUGH' where id=1; -update noar tt set b2='HQMX8QA' where id=1; -update noar ti set b2='HQMX8QA' where id=1; -update noar tt set v0='MA7W92O6V4W3KB9JMJVU' where id=2; -update noar ti set v0='MA7W92O6V4W3KB9JMJVU' where id=2; -update noar tt set b0='6RWRVGTSP2SXMPRQMV608NV' where id=2; -update noar ti set b0='6RWRVGTSP2SXMPRQMV608NV' where id=2; -update noar tt set v0='7KHCP15BW5NCCG' where id=2; -update noar ti set v0='7KHCP15BW5NCCG' where id=2; -update noar tt set b1='2H77WGLS' where id=2; -update noar ti set b1='2H77WGLS' where id=2; -update noar tt set v0='6Z2Q2ZVR8G2T9HW0OA0' where id=2; -update noar ti set v0='6Z2Q2ZVR8G2T9HW0OA0' where id=2; -update noar tt set b2='9KM7P452BH00P4S6J' where id=2; -update noar ti set b2='9KM7P452BH00P4S6J' where id=2; -update noar tt set v0='OI' where id=3; -update noar ti set v0='OI' where id=3; -update noar tt set b0='HKHGIYJ9D8OMDHT' where id=3; -update noar ti set b0='HKHGIYJ9D8OMDHT' where id=3; -update noar tt set v0='KXENQHSIISGF2UVUAA1C' where id=3; -update noar ti set v0='KXENQHSIISGF2UVUAA1C' where id=3; -update noar tt set b1='RFEAWVGCKFFWT2FD5' where id=3; -update noar ti set b1='RFEAWVGCKFFWT2FD5' where id=3; -update noar tt set v0='WGOPQYEVF59CN4AC4FYUPH3N' where id=3; -update noar ti set v0='WGOPQYEVF59CN4AC4FYUPH3N' where id=3; -update noar tt set b2='IC9KI8QNHH4YE8DJOW8RFVH' where id=3; -update noar ti set b2='IC9KI8QNHH4YE8DJOW8RFVH' where id=3; -update noar tt set v0='L' where id=4; -update noar ti set v0='L' where id=4; -update noar tt set b0='SZGCK' where id=4; -update noar ti set b0='SZGCK' where id=4; -update noar tt set v0='U3UI6YWDMOF55ONPCYL' where id=4; -update noar ti set v0='U3UI6YWDMOF55ONPCYL' where id=4; -update noar tt set b1='H332P8KJISM69S3VHN3Y' where id=4; -update noar ti set b1='H332P8KJISM69S3VHN3Y' where id=4; -update noar tt set v0='TDEDM0BJUP0VDDQZIU009AZ2CNZDUB' where id=4; -update noar ti set v0='TDEDM0BJUP0VDDQZIU009AZ2CNZDUB' where id=4; -update noar tt set b2='AGF1441A4990UCXPN' where id=4; -update noar ti set b2='AGF1441A4990UCXPN' where id=4; -update noar tt set v0='GIRGT90YQ1VM9JJ3PGCZHKPSN' where id=5; -update noar ti set v0='GIRGT90YQ1VM9JJ3PGCZHKPSN' where id=5; -update noar tt set b0='CDDA4VW6N38CNX2V3MD' where id=5; -update noar ti set b0='CDDA4VW6N38CNX2V3MD' where id=5; -update noar tt set v0='FKGNWPUYDNM5YQPHWD74MCI' where id=5; -update noar ti set v0='FKGNWPUYDNM5YQPHWD74MCI' where id=5; -update noar tt set b1='5ZMOIGPW6JGFRYHEFZVNG9B77QTFZ' where id=5; -update noar ti set b1='5ZMOIGPW6JGFRYHEFZVNG9B77QTFZ' where id=5; -update noar tt set v0='PD0H55' where id=5; -update noar ti set v0='PD0H55' where id=5; -update noar tt set b2='OTW' where id=5; -update noar ti set b2='OTW' where id=5; -update noar tt set v0='OIKN0KUSI7XLZM7M' where id=6; -update noar ti set v0='OIKN0KUSI7XLZM7M' where id=6; -update noar tt set b0='LGG9X8' where id=6; -update noar ti set b0='LGG9X8' where id=6; -update noar tt set v0='JIF0M0ODF9FDON4SE0GRI4E' where id=6; -update noar ti set v0='JIF0M0ODF9FDON4SE0GRI4E' where id=6; -update noar tt set b1='7JW506T2RLP7ITWGWS4LC300C' where id=6; -update noar ti set b1='7JW506T2RLP7ITWGWS4LC300C' where id=6; -update noar tt set v0='8JYGGZ1OXWZWU' where id=6; -update noar ti set v0='8JYGGZ1OXWZWU' where id=6; -update noar tt set b2='XOUNAM288C3N7GTYIG494KGPZJ4O' where id=6; -update noar ti set b2='XOUNAM288C3N7GTYIG494KGPZJ4O' where id=6; -update noar tt set v0='ULCNOU1BOU6L900G15Q3W' where id=7; -update noar ti set v0='ULCNOU1BOU6L900G15Q3W' where id=7; -update noar tt set b0='WRSR0UPPI' where id=7; -update noar ti set b0='WRSR0UPPI' where id=7; -update noar tt set v0='HS6S2L897G2' where id=7; -update noar ti set v0='HS6S2L897G2' where id=7; -update noar tt set b1='469U152024V' where id=7; -update noar ti set b1='469U152024V' where id=7; -update noar tt set v0='I775LNVNL22PT' where id=7; -update noar ti set v0='I775LNVNL22PT' where id=7; -update noar tt set b2='RYNAD77YXGVFD6G' where id=7; -update noar ti set b2='RYNAD77YXGVFD6G' where id=7; -update noar tt set v0='ZVBNJMMKJY4OTM' where id=8; -update noar ti set v0='ZVBNJMMKJY4OTM' where id=8; -update noar tt set b0='4FR8UG043GI5J29TZFM5XI4QFRO0DG2' where id=8; -update noar ti set b0='4FR8UG043GI5J29TZFM5XI4QFRO0DG2' where id=8; -update noar tt set v0='LOV9' where id=8; -update noar ti set v0='LOV9' where id=8; -update noar tt set b1='9TXUMOBU' where id=8; -update noar ti set b1='9TXUMOBU' where id=8; -update noar tt set v0='U8A3Z6S9LPOG5ROV9RS2' where id=8; -update noar ti set v0='U8A3Z6S9LPOG5ROV9RS2' where id=8; -update noar tt set b2='RDT9OVGBGGT8YMKR9XKKD' where id=8; -update noar ti set b2='RDT9OVGBGGT8YMKR9XKKD' where id=8; -update noar tt set v0='T1E45YGYID0C' where id=9; -update noar ti set v0='T1E45YGYID0C' where id=9; -update noar tt set b0='51G51Z38LETUJVGQ4GTB884G5' where id=9; -update noar ti set b0='51G51Z38LETUJVGQ4GTB884G5' where id=9; -update noar tt set v0='N5PR7Y6CEOXCAHZ68XSRFPGR76' where id=9; -update noar ti set v0='N5PR7Y6CEOXCAHZ68XSRFPGR76' where id=9; -update noar tt set b1='59WZ35V8VSGNBMJPTXS0YMD0Z2XUME' where id=9; -update noar ti set b1='59WZ35V8VSGNBMJPTXS0YMD0Z2XUME' where id=9; -update noar tt set v0='OSCI2H1G2BECV97JMQIG2SE88LW89T4M' where id=9; -update noar ti set v0='OSCI2H1G2BECV97JMQIG2SE88LW89T4M' where id=9; -update noar tt set b2='J1' where id=9; -update noar ti set b2='J1' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 blob null, - b1 blob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='XZSOYQBUV8XCR7DD7S' where id=1; -update noar ti set v0='XZSOYQBUV8XCR7DD7S' where id=1; -update noar tt set b0='XM5A45SR6JKDGOQ7NWLYGXM4BT7WQ5' where id=1; -update noar ti set b0='XM5A45SR6JKDGOQ7NWLYGXM4BT7WQ5' where id=1; -update noar tt set v0='74AV89LKECW3' where id=1; -update noar ti set v0='74AV89LKECW3' where id=1; -update noar tt set b1='UEURZIUTR' where id=1; -update noar ti set b1='UEURZIUTR' where id=1; -update noar tt set v0='35JKMMRB7230OXVD5KDXBLYYSGNP5' where id=1; -update noar ti set v0='35JKMMRB7230OXVD5KDXBLYYSGNP5' where id=1; -update noar tt set b2='KY83QPADSIYWXPL0D5DBHUMH4L4O4' where id=1; -update noar ti set b2='KY83QPADSIYWXPL0D5DBHUMH4L4O4' where id=1; -update noar tt set v0='AEHZWNJ3L' where id=2; -update noar ti set v0='AEHZWNJ3L' where id=2; -update noar tt set b0='BIJ' where id=2; -update noar ti set b0='BIJ' where id=2; -update noar tt set v0='6' where id=2; -update noar ti set v0='6' where id=2; -update noar tt set b1='EQRCHAIQKLLTW3M07DOCFXK1O' where id=2; -update noar ti set b1='EQRCHAIQKLLTW3M07DOCFXK1O' where id=2; -update noar tt set v0='1K' where id=2; -update noar ti set v0='1K' where id=2; -update noar tt set b2='6S2GLXJSGK8' where id=2; -update noar ti set b2='6S2GLXJSGK8' where id=2; -update noar tt set v0='LYMQRDOJ229DZ55YCC9CCGVC' where id=3; -update noar ti set v0='LYMQRDOJ229DZ55YCC9CCGVC' where id=3; -update noar tt set b0='YVX5GXUVV8BGAZ8JSN8S6QD2L519' where id=3; -update noar ti set b0='YVX5GXUVV8BGAZ8JSN8S6QD2L519' where id=3; -update noar tt set v0='46R8WYY8LMLFFF' where id=3; -update noar ti set v0='46R8WYY8LMLFFF' where id=3; -update noar tt set b1='3Z6FBHA2LF8QK8N7XOLTBKZ6P' where id=3; -update noar ti set b1='3Z6FBHA2LF8QK8N7XOLTBKZ6P' where id=3; -update noar tt set v0='O9Q6MNEL7JH8Y3ND9SJYP2ASHXT7BVZ' where id=3; -update noar ti set v0='O9Q6MNEL7JH8Y3ND9SJYP2ASHXT7BVZ' where id=3; -update noar tt set b2='8XV0K6BP' where id=3; -update noar ti set b2='8XV0K6BP' where id=3; -update noar tt set v0='67' where id=4; -update noar ti set v0='67' where id=4; -update noar tt set b0='EZYTLWP8JKROGYM4TYP' where id=4; -update noar ti set b0='EZYTLWP8JKROGYM4TYP' where id=4; -update noar tt set v0='OWYZHKL4RS79SSXKNOTT7G6T4B029' where id=4; -update noar ti set v0='OWYZHKL4RS79SSXKNOTT7G6T4B029' where id=4; -update noar tt set b1='AXCJMJ9I9QAANRQ' where id=4; -update noar ti set b1='AXCJMJ9I9QAANRQ' where id=4; -update noar tt set v0='86ZYTIALIYTFWKL6KX' where id=4; -update noar ti set v0='86ZYTIALIYTFWKL6KX' where id=4; -update noar tt set b2='4' where id=4; -update noar ti set b2='4' where id=4; -update noar tt set v0='OLOJE8RCKL1OEJ' where id=5; -update noar ti set v0='OLOJE8RCKL1OEJ' where id=5; -update noar tt set b0='0ZTDBK1T3XMM' where id=5; -update noar ti set b0='0ZTDBK1T3XMM' where id=5; -update noar tt set v0='KHSIRMYH1FXRWTCWYYOR375U13N38QBL' where id=5; -update noar ti set v0='KHSIRMYH1FXRWTCWYYOR375U13N38QBL' where id=5; -update noar tt set b1='GNG2TMEPDG7847VW' where id=5; -update noar ti set b1='GNG2TMEPDG7847VW' where id=5; -update noar tt set v0='4Y79BZ6' where id=5; -update noar ti set v0='4Y79BZ6' where id=5; -update noar tt set b2='7RPOLXS4GFG8CEVYAD7LEE0FCDZHSNY' where id=5; -update noar ti set b2='7RPOLXS4GFG8CEVYAD7LEE0FCDZHSNY' where id=5; -update noar tt set v0='PMU7301VX' where id=6; -update noar ti set v0='PMU7301VX' where id=6; -update noar tt set b0='ZDNEEOJ9IUU49THGVGEJ8W' where id=6; -update noar ti set b0='ZDNEEOJ9IUU49THGVGEJ8W' where id=6; -update noar tt set v0='KZD' where id=6; -update noar ti set v0='KZD' where id=6; -update noar tt set b1='YWQI579QM13IYIJHQ1KOYHFK8RM9K' where id=6; -update noar ti set b1='YWQI579QM13IYIJHQ1KOYHFK8RM9K' where id=6; -update noar tt set v0='DE16UEYJBYCYQ0F' where id=6; -update noar ti set v0='DE16UEYJBYCYQ0F' where id=6; -update noar tt set b2='AYB1X13P5P397D' where id=6; -update noar ti set b2='AYB1X13P5P397D' where id=6; -update noar tt set v0='VP6I3BWBWZZ8FO0Z' where id=7; -update noar ti set v0='VP6I3BWBWZZ8FO0Z' where id=7; -update noar tt set b0='SWVIGSPVUE0WI82DDFQQ2F4YYAXCRE' where id=7; -update noar ti set b0='SWVIGSPVUE0WI82DDFQQ2F4YYAXCRE' where id=7; -update noar tt set v0='72231WR5LUPEOM7J9UWQKJ6' where id=7; -update noar ti set v0='72231WR5LUPEOM7J9UWQKJ6' where id=7; -update noar tt set b1='ZKLUL7PU16AT2FSY02VJ77UE1BLUTE3' where id=7; -update noar ti set b1='ZKLUL7PU16AT2FSY02VJ77UE1BLUTE3' where id=7; -update noar tt set v0='TQ68D6UR48TA' where id=7; -update noar ti set v0='TQ68D6UR48TA' where id=7; -update noar tt set b2='8K6VCI2ZHYEPGKBC84Q5LR1' where id=7; -update noar ti set b2='8K6VCI2ZHYEPGKBC84Q5LR1' where id=7; -update noar tt set v0='ERW2BHQPAV9UFD4ZNYRXHALG95H1YN' where id=8; -update noar ti set v0='ERW2BHQPAV9UFD4ZNYRXHALG95H1YN' where id=8; -update noar tt set b0='3JX94NKAISVA0W' where id=8; -update noar ti set b0='3JX94NKAISVA0W' where id=8; -update noar tt set v0='RJ4E0UWMPONKU0IHRLW79H7R0KPMZZOY' where id=8; -update noar ti set v0='RJ4E0UWMPONKU0IHRLW79H7R0KPMZZOY' where id=8; -update noar tt set b1='0QHFWBDNQZHKUIPJDHQOH8RV0IR6Y8VA' where id=8; -update noar ti set b1='0QHFWBDNQZHKUIPJDHQOH8RV0IR6Y8VA' where id=8; -update noar tt set v0='RSQNOGQGXU6J89TZEEJYRL4920A6ZJU1' where id=8; -update noar ti set v0='RSQNOGQGXU6J89TZEEJYRL4920A6ZJU1' where id=8; -update noar tt set b2='XCPLKDR5M7J0NYHBI6Z6' where id=8; -update noar ti set b2='XCPLKDR5M7J0NYHBI6Z6' where id=8; -update noar tt set v0='SKIHNALLGOL6K58E70G5SIA6HNEHW' where id=9; -update noar ti set v0='SKIHNALLGOL6K58E70G5SIA6HNEHW' where id=9; -update noar tt set b0='01CPNP6EORHNBG5VQA48KYXJXO2WJ' where id=9; -update noar ti set b0='01CPNP6EORHNBG5VQA48KYXJXO2WJ' where id=9; -update noar tt set v0='0XNX8NBSN' where id=9; -update noar ti set v0='0XNX8NBSN' where id=9; -update noar tt set b1='9HCNW4WI3GFHY0RHCA' where id=9; -update noar ti set b1='9HCNW4WI3GFHY0RHCA' where id=9; -update noar tt set v0='XBU93Q3RFISOBT3283Q9' where id=9; -update noar ti set v0='XBU93Q3RFISOBT3283Q9' where id=9; -update noar tt set b2='PGWTKEJI58S1X3GZL9QW' where id=9; -update noar ti set b2='PGWTKEJI58S1X3GZL9QW' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 blob null, - b1 blob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='5Z6RPD3X' where id=1; -update noar ti set v0='5Z6RPD3X' where id=1; -update noar tt set b0='UCT91WU' where id=1; -update noar ti set b0='UCT91WU' where id=1; -update noar tt set v0='77HADWM7P6HD2' where id=1; -update noar ti set v0='77HADWM7P6HD2' where id=1; -update noar tt set b1='TYYGFRN0NJWVOR1GXG59VGFST47PEL2J' where id=1; -update noar ti set b1='TYYGFRN0NJWVOR1GXG59VGFST47PEL2J' where id=1; -update noar tt set v0='N7HX0T9W61WDKUBJ7XXH2T8' where id=1; -update noar ti set v0='N7HX0T9W61WDKUBJ7XXH2T8' where id=1; -update noar tt set b2='C7P2IJCXUQ' where id=1; -update noar ti set b2='C7P2IJCXUQ' where id=1; -update noar tt set v0='1GUS2YRG' where id=2; -update noar ti set v0='1GUS2YRG' where id=2; -update noar tt set b0='T3JX3WRU3ZZ' where id=2; -update noar ti set b0='T3JX3WRU3ZZ' where id=2; -update noar tt set v0='1QHPG6' where id=2; -update noar ti set v0='1QHPG6' where id=2; -update noar tt set b1='QYET3NE' where id=2; -update noar ti set b1='QYET3NE' where id=2; -update noar tt set v0='FGB16UNM0EUVAVK0UANCROUTT4X' where id=2; -update noar ti set v0='FGB16UNM0EUVAVK0UANCROUTT4X' where id=2; -update noar tt set b2='L0N0DEAD' where id=2; -update noar ti set b2='L0N0DEAD' where id=2; -update noar tt set v0='RPJA1IVLHM3S0XFR9BOGFO' where id=3; -update noar ti set v0='RPJA1IVLHM3S0XFR9BOGFO' where id=3; -update noar tt set b0='W71K5VTHQAPL921M0ZF0CO23MCDMFXSU' where id=3; -update noar ti set b0='W71K5VTHQAPL921M0ZF0CO23MCDMFXSU' where id=3; -update noar tt set v0='EEOSSHLVQQ67BHT9H6BPMI7CLWXRTBYS' where id=3; -update noar ti set v0='EEOSSHLVQQ67BHT9H6BPMI7CLWXRTBYS' where id=3; -update noar tt set b1='8VYHSBMMEQM2Y' where id=3; -update noar ti set b1='8VYHSBMMEQM2Y' where id=3; -update noar tt set v0='33DIQ1PHA7JI38I4TTP6I1FUUNGQ' where id=3; -update noar ti set v0='33DIQ1PHA7JI38I4TTP6I1FUUNGQ' where id=3; -update noar tt set b2='AH1J86Q7HFPPTLFPVAR2TW8RJO' where id=3; -update noar ti set b2='AH1J86Q7HFPPTLFPVAR2TW8RJO' where id=3; -update noar tt set v0='V8DI4NXOZYJSKNY6ID6GWY00H5V851' where id=4; -update noar ti set v0='V8DI4NXOZYJSKNY6ID6GWY00H5V851' where id=4; -update noar tt set b0='BTM30K' where id=4; -update noar ti set b0='BTM30K' where id=4; -update noar tt set v0='6VL' where id=4; -update noar ti set v0='6VL' where id=4; -update noar tt set b1='DT4VOQ3Y' where id=4; -update noar ti set b1='DT4VOQ3Y' where id=4; -update noar tt set v0='HXNBMVA0' where id=4; -update noar ti set v0='HXNBMVA0' where id=4; -update noar tt set b2='488OR2H88P9WKDSJTJ3NN44XMD' where id=4; -update noar ti set b2='488OR2H88P9WKDSJTJ3NN44XMD' where id=4; -update noar tt set v0='49Y2C9C3FBN' where id=5; -update noar ti set v0='49Y2C9C3FBN' where id=5; -update noar tt set b0='2QLQPVAAIS3NXFEN2W9ELV4XW' where id=5; -update noar ti set b0='2QLQPVAAIS3NXFEN2W9ELV4XW' where id=5; -update noar tt set v0='XS54RZZBV0' where id=5; -update noar ti set v0='XS54RZZBV0' where id=5; -update noar tt set b1='S4A5X0EUT8ENTPUBKB5QP6LW8YOOFS' where id=5; -update noar ti set b1='S4A5X0EUT8ENTPUBKB5QP6LW8YOOFS' where id=5; -update noar tt set v0='ZNW2BYORH' where id=5; -update noar ti set v0='ZNW2BYORH' where id=5; -update noar tt set b2='6FW37Y57' where id=5; -update noar ti set b2='6FW37Y57' where id=5; -update noar tt set v0='9WNPHACK' where id=6; -update noar ti set v0='9WNPHACK' where id=6; -update noar tt set b0='ONDSRYWJL33TL6ZBI5UDCVXSRIJ7PYJ' where id=6; -update noar ti set b0='ONDSRYWJL33TL6ZBI5UDCVXSRIJ7PYJ' where id=6; -update noar tt set v0='4' where id=6; -update noar ti set v0='4' where id=6; -update noar tt set b1='QCHSP4DROBUU3JKEG1D59RZQFKDVM' where id=6; -update noar ti set b1='QCHSP4DROBUU3JKEG1D59RZQFKDVM' where id=6; -update noar tt set v0='P0HSXMTH763OZWWE3THANU4YMHSOC' where id=6; -update noar ti set v0='P0HSXMTH763OZWWE3THANU4YMHSOC' where id=6; -update noar tt set b2='MU9C' where id=6; -update noar ti set b2='MU9C' where id=6; -update noar tt set v0='2IDJ4YVYN71K2JCRIHFR' where id=7; -update noar ti set v0='2IDJ4YVYN71K2JCRIHFR' where id=7; -update noar tt set b0='085XPJMWG4EAVDICW3X2MV6' where id=7; -update noar ti set b0='085XPJMWG4EAVDICW3X2MV6' where id=7; -update noar tt set v0='I3G6' where id=7; -update noar ti set v0='I3G6' where id=7; -update noar tt set b1='03EV0G' where id=7; -update noar ti set b1='03EV0G' where id=7; -update noar tt set v0='ZRA' where id=7; -update noar ti set v0='ZRA' where id=7; -update noar tt set b2='1HO9ESSC7ZNQGMJS2WDUPQLXV' where id=7; -update noar ti set b2='1HO9ESSC7ZNQGMJS2WDUPQLXV' where id=7; -update noar tt set v0='BXCISN1XCRZPD47TEA7NG1Y1Q' where id=8; -update noar ti set v0='BXCISN1XCRZPD47TEA7NG1Y1Q' where id=8; -update noar tt set b0='KA0JJNF2GIK4N3RMMI' where id=8; -update noar ti set b0='KA0JJNF2GIK4N3RMMI' where id=8; -update noar tt set v0='5HJDWSFEXIA' where id=8; -update noar ti set v0='5HJDWSFEXIA' where id=8; -update noar tt set b1='Q2A1AF40HLUPBYF0DCJKNSC4' where id=8; -update noar ti set b1='Q2A1AF40HLUPBYF0DCJKNSC4' where id=8; -update noar tt set v0='UKT' where id=8; -update noar ti set v0='UKT' where id=8; -update noar tt set b2='O86UDDD7C7Z' where id=8; -update noar ti set b2='O86UDDD7C7Z' where id=8; -update noar tt set v0='L7TC' where id=9; -update noar ti set v0='L7TC' where id=9; -update noar tt set b0='3TD99CICLNR5YY2F7SE79REJSBJ6EQ' where id=9; -update noar ti set b0='3TD99CICLNR5YY2F7SE79REJSBJ6EQ' where id=9; -update noar tt set v0='RYM970UI38Z4PBQCDRLCLSXE14M0' where id=9; -update noar ti set v0='RYM970UI38Z4PBQCDRLCLSXE14M0' where id=9; -update noar tt set b1='65QVVVL6' where id=9; -update noar ti set b1='65QVVVL6' where id=9; -update noar tt set v0='MMVW0VMXH9C4EF8QZ' where id=9; -update noar ti set v0='MMVW0VMXH9C4EF8QZ' where id=9; -update noar tt set b2='OGXCDIENDG7HIS4V' where id=9; -update noar ti set b2='OGXCDIENDG7HIS4V' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 blob not null, - b1 blob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='MRFA4NQEG02TO3MG482KEWAX84CFXQ' where id=1; -update noar ti set v0='MRFA4NQEG02TO3MG482KEWAX84CFXQ' where id=1; -update noar tt set b0='60J3CU4GW0C2UXD6G1G' where id=1; -update noar ti set b0='60J3CU4GW0C2UXD6G1G' where id=1; -update noar tt set v0='HBWJGUX36S5CMNC3159B62M5PA' where id=1; -update noar ti set v0='HBWJGUX36S5CMNC3159B62M5PA' where id=1; -update noar tt set b1='38XV123' where id=1; -update noar ti set b1='38XV123' where id=1; -update noar tt set v0='28LP' where id=1; -update noar ti set v0='28LP' where id=1; -update noar tt set b2='V' where id=1; -update noar ti set b2='V' where id=1; -update noar tt set v0='H2CX0EI0BE5E0500NBVZ52AG0Z045Z' where id=2; -update noar ti set v0='H2CX0EI0BE5E0500NBVZ52AG0Z045Z' where id=2; -update noar tt set b0='TOYY8QRR' where id=2; -update noar ti set b0='TOYY8QRR' where id=2; -update noar tt set v0='BDEGJ8PZHAXUH0IT8J08546E' where id=2; -update noar ti set v0='BDEGJ8PZHAXUH0IT8J08546E' where id=2; -update noar tt set b1='E9425ENC3G8T' where id=2; -update noar ti set b1='E9425ENC3G8T' where id=2; -update noar tt set v0='40ILIJWUC5ZF0U4P8Z6HG1GI6530V' where id=2; -update noar ti set v0='40ILIJWUC5ZF0U4P8Z6HG1GI6530V' where id=2; -update noar tt set b2='79ID' where id=2; -update noar ti set b2='79ID' where id=2; -update noar tt set v0='FK7Q68DSV6VFFGN8ZJFDWGH6BVHVJBAR' where id=3; -update noar ti set v0='FK7Q68DSV6VFFGN8ZJFDWGH6BVHVJBAR' where id=3; -update noar tt set b0='ODKXSQM86X3EVDGD' where id=3; -update noar ti set b0='ODKXSQM86X3EVDGD' where id=3; -update noar tt set v0='3HF4O5KWQCC2U2GA8' where id=3; -update noar ti set v0='3HF4O5KWQCC2U2GA8' where id=3; -update noar tt set b1='9PLRZBE9O3A4KVLJ' where id=3; -update noar ti set b1='9PLRZBE9O3A4KVLJ' where id=3; -update noar tt set v0='RX2QCYKB6WC5YE3ALHKIK' where id=3; -update noar ti set v0='RX2QCYKB6WC5YE3ALHKIK' where id=3; -update noar tt set b2='DQGVF5NS79RI9CHT7SG6J8VS' where id=3; -update noar ti set b2='DQGVF5NS79RI9CHT7SG6J8VS' where id=3; -update noar tt set v0='3VYP5GBPXC2RQZ9YKB4UVY' where id=4; -update noar ti set v0='3VYP5GBPXC2RQZ9YKB4UVY' where id=4; -update noar tt set b0='6W' where id=4; -update noar ti set b0='6W' where id=4; -update noar tt set v0='EXTZWLBKOJASKTSCNYDWV' where id=4; -update noar ti set v0='EXTZWLBKOJASKTSCNYDWV' where id=4; -update noar tt set b1='0VG7XQ2W1' where id=4; -update noar ti set b1='0VG7XQ2W1' where id=4; -update noar tt set v0='TJQ0BYJHKAMQFVZ3YNG1N' where id=4; -update noar ti set v0='TJQ0BYJHKAMQFVZ3YNG1N' where id=4; -update noar tt set b2='RVOBLQ06SNSXEXQ3F2RVIBQ0LVP' where id=4; -update noar ti set b2='RVOBLQ06SNSXEXQ3F2RVIBQ0LVP' where id=4; -update noar tt set v0='Z0MGERB' where id=5; -update noar ti set v0='Z0MGERB' where id=5; -update noar tt set b0='QWX5X6C1J3' where id=5; -update noar ti set b0='QWX5X6C1J3' where id=5; -update noar tt set v0='ILJQY9I5MG53AFYU7I2N' where id=5; -update noar ti set v0='ILJQY9I5MG53AFYU7I2N' where id=5; -update noar tt set b1='KC6BN6TFX7PHU' where id=5; -update noar ti set b1='KC6BN6TFX7PHU' where id=5; -update noar tt set v0='HDWZDH5HEHNM' where id=5; -update noar ti set v0='HDWZDH5HEHNM' where id=5; -update noar tt set b2='63SERHO0YBUJB9PYSYRRTQ61J' where id=5; -update noar ti set b2='63SERHO0YBUJB9PYSYRRTQ61J' where id=5; -update noar tt set v0='87FGO0VZZB42' where id=6; -update noar ti set v0='87FGO0VZZB42' where id=6; -update noar tt set b0='IDLWK6863KXO1D5C5' where id=6; -update noar ti set b0='IDLWK6863KXO1D5C5' where id=6; -update noar tt set v0='0YU9NO' where id=6; -update noar ti set v0='0YU9NO' where id=6; -update noar tt set b1='NPTBKDIVWXRXYKBNT77LBKMLTTWH85RA' where id=6; -update noar ti set b1='NPTBKDIVWXRXYKBNT77LBKMLTTWH85RA' where id=6; -update noar tt set v0='E9QTHKC8EGOV4741EH375LQ43NWV' where id=6; -update noar ti set v0='E9QTHKC8EGOV4741EH375LQ43NWV' where id=6; -update noar tt set b2='JQ13AXVDH2GTN8UGD4' where id=6; -update noar ti set b2='JQ13AXVDH2GTN8UGD4' where id=6; -update noar tt set v0='VTTTDQ' where id=7; -update noar ti set v0='VTTTDQ' where id=7; -update noar tt set b0='UPS7JT5GTW' where id=7; -update noar ti set b0='UPS7JT5GTW' where id=7; -update noar tt set v0='RLKLLWKW5ZXUG3KSXGH' where id=7; -update noar ti set v0='RLKLLWKW5ZXUG3KSXGH' where id=7; -update noar tt set b1='JJC8BWFMC9FXWDDMXRL1URXCEO2' where id=7; -update noar ti set b1='JJC8BWFMC9FXWDDMXRL1URXCEO2' where id=7; -update noar tt set v0='KU6B7A7KTIZJU6LGKR25LHQTYS6M' where id=7; -update noar ti set v0='KU6B7A7KTIZJU6LGKR25LHQTYS6M' where id=7; -update noar tt set b2='LYBVMWSAQ0R630F' where id=7; -update noar ti set b2='LYBVMWSAQ0R630F' where id=7; -update noar tt set v0='YOTXIA2W2VYOY' where id=8; -update noar ti set v0='YOTXIA2W2VYOY' where id=8; -update noar tt set b0='9JIPEW8EDE1YYZZ' where id=8; -update noar ti set b0='9JIPEW8EDE1YYZZ' where id=8; -update noar tt set v0='Z9' where id=8; -update noar ti set v0='Z9' where id=8; -update noar tt set b1='DD8JD0X' where id=8; -update noar ti set b1='DD8JD0X' where id=8; -update noar tt set v0='55NQRT2SEOFG588R' where id=8; -update noar ti set v0='55NQRT2SEOFG588R' where id=8; -update noar tt set b2='VF3DCAM54AWFZNY90I740RM' where id=8; -update noar ti set b2='VF3DCAM54AWFZNY90I740RM' where id=8; -update noar tt set v0='6U0VND' where id=9; -update noar ti set v0='6U0VND' where id=9; -update noar tt set b0='CU9AC7VOWSXIM1TPPDOIZKQMDV47NYH' where id=9; -update noar ti set b0='CU9AC7VOWSXIM1TPPDOIZKQMDV47NYH' where id=9; -update noar tt set v0='DV5SZ3T6GG9D7O8' where id=9; -update noar ti set v0='DV5SZ3T6GG9D7O8' where id=9; -update noar tt set b1='JTK51YZ3MH7EPV38ZA3' where id=9; -update noar ti set b1='JTK51YZ3MH7EPV38ZA3' where id=9; -update noar tt set v0='P82AFYAR1SWYN3HVKU4KNPS5R' where id=9; -update noar ti set v0='P82AFYAR1SWYN3HVKU4KNPS5R' where id=9; -update noar tt set b2='9XJURTXR95AO6UC4SMN' where id=9; -update noar ti set b2='9XJURTXR95AO6UC4SMN' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 blob not null, - b1 blob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='E4EXF3DQ5EZRK780' where id=1; -update noar ti set v0='E4EXF3DQ5EZRK780' where id=1; -update noar tt set b0='1C9CPGVIUDGPO1LF1ENEDI' where id=1; -update noar ti set b0='1C9CPGVIUDGPO1LF1ENEDI' where id=1; -update noar tt set v0='002Q3NZEQJYRA6696QCXDGM6VF6P' where id=1; -update noar ti set v0='002Q3NZEQJYRA6696QCXDGM6VF6P' where id=1; -update noar tt set b1='V9KP' where id=1; -update noar ti set b1='V9KP' where id=1; -update noar tt set v0='F2A0L606CZEN4IHJ89JXFJW' where id=1; -update noar ti set v0='F2A0L606CZEN4IHJ89JXFJW' where id=1; -update noar tt set b2='75OJNCY' where id=1; -update noar ti set b2='75OJNCY' where id=1; -update noar tt set v0='4GSPODX06S79' where id=2; -update noar ti set v0='4GSPODX06S79' where id=2; -update noar tt set b0='LNIDCUASEW0XACQ7XK5ZMKGE' where id=2; -update noar ti set b0='LNIDCUASEW0XACQ7XK5ZMKGE' where id=2; -update noar tt set v0='O' where id=2; -update noar ti set v0='O' where id=2; -update noar tt set b1='PM' where id=2; -update noar ti set b1='PM' where id=2; -update noar tt set v0='CQJM6AIB' where id=2; -update noar ti set v0='CQJM6AIB' where id=2; -update noar tt set b2='OOK843ZBAQWQOWWKSE7M0C6GE' where id=2; -update noar ti set b2='OOK843ZBAQWQOWWKSE7M0C6GE' where id=2; -update noar tt set v0='C0DRBIBVEQQ' where id=3; -update noar ti set v0='C0DRBIBVEQQ' where id=3; -update noar tt set b0='7TLZ460RY6F3UQ854VDSZCW7UKA8VZC' where id=3; -update noar ti set b0='7TLZ460RY6F3UQ854VDSZCW7UKA8VZC' where id=3; -update noar tt set v0='KESKC9LQP' where id=3; -update noar ti set v0='KESKC9LQP' where id=3; -update noar tt set b1='GWE91K7T6IA3TU3KO34WUK' where id=3; -update noar ti set b1='GWE91K7T6IA3TU3KO34WUK' where id=3; -update noar tt set v0='Z' where id=3; -update noar ti set v0='Z' where id=3; -update noar tt set b2='YP4M0UJPD55M96EY85SCXASV5' where id=3; -update noar ti set b2='YP4M0UJPD55M96EY85SCXASV5' where id=3; -update noar tt set v0='WSHKMHTX45HT40N907ZU6D8' where id=4; -update noar ti set v0='WSHKMHTX45HT40N907ZU6D8' where id=4; -update noar tt set b0='IA8X2PE4V9QDDOCLSK' where id=4; -update noar ti set b0='IA8X2PE4V9QDDOCLSK' where id=4; -update noar tt set v0='EA2ZTC5F5IZL' where id=4; -update noar ti set v0='EA2ZTC5F5IZL' where id=4; -update noar tt set b1='45V9KS2XGKQEW127UZVB5KVNL0DFK6Y4' where id=4; -update noar ti set b1='45V9KS2XGKQEW127UZVB5KVNL0DFK6Y4' where id=4; -update noar tt set v0='1JN6FVFO77UU39NN01OMB' where id=4; -update noar ti set v0='1JN6FVFO77UU39NN01OMB' where id=4; -update noar tt set b2='1LIN9GX6SED2A6ZGQTJVAT5KL' where id=4; -update noar ti set b2='1LIN9GX6SED2A6ZGQTJVAT5KL' where id=4; -update noar tt set v0='06PN8G66U6S' where id=5; -update noar ti set v0='06PN8G66U6S' where id=5; -update noar tt set b0='DQMYC40O2SPY4OUWGPH7W' where id=5; -update noar ti set b0='DQMYC40O2SPY4OUWGPH7W' where id=5; -update noar tt set v0='1CATTVVN3TUR5B2JUXG9IP' where id=5; -update noar ti set v0='1CATTVVN3TUR5B2JUXG9IP' where id=5; -update noar tt set b1='MLFD5HUO' where id=5; -update noar ti set b1='MLFD5HUO' where id=5; -update noar tt set v0='X' where id=5; -update noar ti set v0='X' where id=5; -update noar tt set b2='X4XFUD2H8FP9XX6TN3Y55UO6MCD' where id=5; -update noar ti set b2='X4XFUD2H8FP9XX6TN3Y55UO6MCD' where id=5; -update noar tt set v0='3121FM8PL49' where id=6; -update noar ti set v0='3121FM8PL49' where id=6; -update noar tt set b0='4YKXWSOKD23' where id=6; -update noar ti set b0='4YKXWSOKD23' where id=6; -update noar tt set v0='SIT58PSG071K3R3F9' where id=6; -update noar ti set v0='SIT58PSG071K3R3F9' where id=6; -update noar tt set b1='0CLF64KDZI3F70SJMJAPXAE4' where id=6; -update noar ti set b1='0CLF64KDZI3F70SJMJAPXAE4' where id=6; -update noar tt set v0='JI' where id=6; -update noar ti set v0='JI' where id=6; -update noar tt set b2='4W8EDUIBLU2JGY1XB3IL' where id=6; -update noar ti set b2='4W8EDUIBLU2JGY1XB3IL' where id=6; -update noar tt set v0='FRM83WBO0FJIZU8ZY' where id=7; -update noar ti set v0='FRM83WBO0FJIZU8ZY' where id=7; -update noar tt set b0='R1E1Q6BYNPR76Y6QTUSF' where id=7; -update noar ti set b0='R1E1Q6BYNPR76Y6QTUSF' where id=7; -update noar tt set v0='NT34Y1IK' where id=7; -update noar ti set v0='NT34Y1IK' where id=7; -update noar tt set b1='6IDUJC0L9W8' where id=7; -update noar ti set b1='6IDUJC0L9W8' where id=7; -update noar tt set v0='6A9OV4AA8X2A3RAJ4M' where id=7; -update noar ti set v0='6A9OV4AA8X2A3RAJ4M' where id=7; -update noar tt set b2='LFZX87JR7U2JD8XBYWSA2' where id=7; -update noar ti set b2='LFZX87JR7U2JD8XBYWSA2' where id=7; -update noar tt set v0='39OQP' where id=8; -update noar ti set v0='39OQP' where id=8; -update noar tt set b0='HYOSCL6MQX' where id=8; -update noar ti set b0='HYOSCL6MQX' where id=8; -update noar tt set v0='JK6W9DTRVATP' where id=8; -update noar ti set v0='JK6W9DTRVATP' where id=8; -update noar tt set b1='U' where id=8; -update noar ti set b1='U' where id=8; -update noar tt set v0='6GGV' where id=8; -update noar ti set v0='6GGV' where id=8; -update noar tt set b2='KUHL' where id=8; -update noar ti set b2='KUHL' where id=8; -update noar tt set v0='EHUA546TZ959J9VT' where id=9; -update noar ti set v0='EHUA546TZ959J9VT' where id=9; -update noar tt set b0='C89CQKID907R936YRPZQ4KHSOS81' where id=9; -update noar ti set b0='C89CQKID907R936YRPZQ4KHSOS81' where id=9; -update noar tt set v0='0SXIMJUMZZW38IDV' where id=9; -update noar ti set v0='0SXIMJUMZZW38IDV' where id=9; -update noar tt set b1='8KOTJ8X6MSRVZV' where id=9; -update noar ti set b1='8KOTJ8X6MSRVZV' where id=9; -update noar tt set v0='7ZFRE2CGEQH5I2' where id=9; -update noar ti set v0='7ZFRE2CGEQH5I2' where id=9; -update noar tt set b2='P4FC4FWF2STJZ4ZGBWZS' where id=9; -update noar ti set b2='P4FC4FWF2STJZ4ZGBWZS' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 blob null, - b1 mediumblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='YHU8CYU5OFONA4UEP4E4KNP99F' where id=1; -update noar ti set v0='YHU8CYU5OFONA4UEP4E4KNP99F' where id=1; -update noar tt set b0='VGFYNO6LMPHIQI0HBTK0EIWT50F9MZ' where id=1; -update noar ti set b0='VGFYNO6LMPHIQI0HBTK0EIWT50F9MZ' where id=1; -update noar tt set v0='EXEMNGGMU62GRIBQ994QVIPH865LEG3' where id=1; -update noar ti set v0='EXEMNGGMU62GRIBQ994QVIPH865LEG3' where id=1; -update noar tt set b1='V5OQNLG5LK9MQBEKKV' where id=1; -update noar ti set b1='V5OQNLG5LK9MQBEKKV' where id=1; -update noar tt set v0='Q914BHJY7G5XWPP94IJT9DYOME8I6JPS' where id=1; -update noar ti set v0='Q914BHJY7G5XWPP94IJT9DYOME8I6JPS' where id=1; -update noar tt set b2='CDS' where id=1; -update noar ti set b2='CDS' where id=1; -update noar tt set v0='LONTOQ8OEUG' where id=2; -update noar ti set v0='LONTOQ8OEUG' where id=2; -update noar tt set b0='5YGQ8UZ7' where id=2; -update noar ti set b0='5YGQ8UZ7' where id=2; -update noar tt set v0='DXYQ02YV' where id=2; -update noar ti set v0='DXYQ02YV' where id=2; -update noar tt set b1='DL' where id=2; -update noar ti set b1='DL' where id=2; -update noar tt set v0='9LIPFVKDFF78NUU95FAY0S' where id=2; -update noar ti set v0='9LIPFVKDFF78NUU95FAY0S' where id=2; -update noar tt set b2='KYWHW6WC' where id=2; -update noar ti set b2='KYWHW6WC' where id=2; -update noar tt set v0='CLW9C' where id=3; -update noar ti set v0='CLW9C' where id=3; -update noar tt set b0='40BMCZXNX' where id=3; -update noar ti set b0='40BMCZXNX' where id=3; -update noar tt set v0='LUW9NWULY36DTK' where id=3; -update noar ti set v0='LUW9NWULY36DTK' where id=3; -update noar tt set b1='P28PVAY24X9798HBJENN' where id=3; -update noar ti set b1='P28PVAY24X9798HBJENN' where id=3; -update noar tt set v0='Z8OF7HXD4LHHE69MPVX1094O' where id=3; -update noar ti set v0='Z8OF7HXD4LHHE69MPVX1094O' where id=3; -update noar tt set b2='OLEE2RX5NS0YEAW50HYY0VKFKQ9B' where id=3; -update noar ti set b2='OLEE2RX5NS0YEAW50HYY0VKFKQ9B' where id=3; -update noar tt set v0='FAKJNV' where id=4; -update noar ti set v0='FAKJNV' where id=4; -update noar tt set b0='FZYOH7OHONINERAV7OVYU0' where id=4; -update noar ti set b0='FZYOH7OHONINERAV7OVYU0' where id=4; -update noar tt set v0='W7EY8OZDI886261DGTK10OJ04XI6' where id=4; -update noar ti set v0='W7EY8OZDI886261DGTK10OJ04XI6' where id=4; -update noar tt set b1='VGW' where id=4; -update noar ti set b1='VGW' where id=4; -update noar tt set v0='LRHKZOU735YTIHGHUJNZ1AD' where id=4; -update noar ti set v0='LRHKZOU735YTIHGHUJNZ1AD' where id=4; -update noar tt set b2='TOKSC7DEMGLW9TU0V6XCR' where id=4; -update noar ti set b2='TOKSC7DEMGLW9TU0V6XCR' where id=4; -update noar tt set v0='BZSQ9HL1SG3KFRHWP' where id=5; -update noar ti set v0='BZSQ9HL1SG3KFRHWP' where id=5; -update noar tt set b0='PAVSZY4' where id=5; -update noar ti set b0='PAVSZY4' where id=5; -update noar tt set v0='9RE' where id=5; -update noar ti set v0='9RE' where id=5; -update noar tt set b1='NCJWIQHW2GAYGVW9RAF5C6RC' where id=5; -update noar ti set b1='NCJWIQHW2GAYGVW9RAF5C6RC' where id=5; -update noar tt set v0='V4AZCZRGD' where id=5; -update noar ti set v0='V4AZCZRGD' where id=5; -update noar tt set b2='F5MO8T0O1THEGRWIJAD' where id=5; -update noar ti set b2='F5MO8T0O1THEGRWIJAD' where id=5; -update noar tt set v0='529' where id=6; -update noar ti set v0='529' where id=6; -update noar tt set b0='ZI3A21TG' where id=6; -update noar ti set b0='ZI3A21TG' where id=6; -update noar tt set v0='7LW67NCE736' where id=6; -update noar ti set v0='7LW67NCE736' where id=6; -update noar tt set b1='SOYRELC04KJ6VO7' where id=6; -update noar ti set b1='SOYRELC04KJ6VO7' where id=6; -update noar tt set v0='YCVNQOOGR05W1S3KDO' where id=6; -update noar ti set v0='YCVNQOOGR05W1S3KDO' where id=6; -update noar tt set b2='0J7U647CCWN7TXTZ6KUUUPZ925PBP' where id=6; -update noar ti set b2='0J7U647CCWN7TXTZ6KUUUPZ925PBP' where id=6; -update noar tt set v0='2V8MSSLQQOSCUWVNCKMD2IE0M' where id=7; -update noar ti set v0='2V8MSSLQQOSCUWVNCKMD2IE0M' where id=7; -update noar tt set b0='5TVUR2ZB4Y' where id=7; -update noar ti set b0='5TVUR2ZB4Y' where id=7; -update noar tt set v0='5DASH0' where id=7; -update noar ti set v0='5DASH0' where id=7; -update noar tt set b1='Y3D46R3CYV4TP4QLU' where id=7; -update noar ti set b1='Y3D46R3CYV4TP4QLU' where id=7; -update noar tt set v0='L0YRTL8EVG3RGFMCD4A' where id=7; -update noar ti set v0='L0YRTL8EVG3RGFMCD4A' where id=7; -update noar tt set b2='QCVHDFCYHVGBAG19EORT0HIPP0O77NJZ' where id=7; -update noar ti set b2='QCVHDFCYHVGBAG19EORT0HIPP0O77NJZ' where id=7; -update noar tt set v0='4HSSP' where id=8; -update noar ti set v0='4HSSP' where id=8; -update noar tt set b0='XUKDKTJ72I8YQDLEX4WFIXU06RK6Q' where id=8; -update noar ti set b0='XUKDKTJ72I8YQDLEX4WFIXU06RK6Q' where id=8; -update noar tt set v0='7SLV9Z1PN0TZL4X29WPLDJYURW' where id=8; -update noar ti set v0='7SLV9Z1PN0TZL4X29WPLDJYURW' where id=8; -update noar tt set b1='IDWOB1JL' where id=8; -update noar ti set b1='IDWOB1JL' where id=8; -update noar tt set v0='C7WB8SH4' where id=8; -update noar ti set v0='C7WB8SH4' where id=8; -update noar tt set b2='9Y' where id=8; -update noar ti set b2='9Y' where id=8; -update noar tt set v0='KHV9VAA2WB0YJT6CJU0G34SIAWYTE' where id=9; -update noar ti set v0='KHV9VAA2WB0YJT6CJU0G34SIAWYTE' where id=9; -update noar tt set b0='G9SKYUJCLMKU2OIG61Q' where id=9; -update noar ti set b0='G9SKYUJCLMKU2OIG61Q' where id=9; -update noar tt set v0='DWM7YOVLTTJ4DMKZ4NNTUISN' where id=9; -update noar ti set v0='DWM7YOVLTTJ4DMKZ4NNTUISN' where id=9; -update noar tt set b1='L12X9YZ6ZGK49GBK9LIUM3ODNGLKBQKK' where id=9; -update noar ti set b1='L12X9YZ6ZGK49GBK9LIUM3ODNGLKBQKK' where id=9; -update noar tt set v0='N8EAWSXZCMZF' where id=9; -update noar ti set v0='N8EAWSXZCMZF' where id=9; -update noar tt set b2='J6Z1NMUWPWV' where id=9; -update noar ti set b2='J6Z1NMUWPWV' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 blob null, - b1 mediumblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='8GUQR0FCMDI2RGD' where id=1; -update noar ti set v0='8GUQR0FCMDI2RGD' where id=1; -update noar tt set b0='DWJ' where id=1; -update noar ti set b0='DWJ' where id=1; -update noar tt set v0='8AU5Y3GFRRC8D3XCQ1' where id=1; -update noar ti set v0='8AU5Y3GFRRC8D3XCQ1' where id=1; -update noar tt set b1='68UZXR1K53PEKKLRN0Z0' where id=1; -update noar ti set b1='68UZXR1K53PEKKLRN0Z0' where id=1; -update noar tt set v0='3LOHEBRD85U9FVXXCHNBFB9' where id=1; -update noar ti set v0='3LOHEBRD85U9FVXXCHNBFB9' where id=1; -update noar tt set b2='V41' where id=1; -update noar ti set b2='V41' where id=1; -update noar tt set v0='SESYZM8NFW' where id=2; -update noar ti set v0='SESYZM8NFW' where id=2; -update noar tt set b0='8H1FO471WQ9XCT' where id=2; -update noar ti set b0='8H1FO471WQ9XCT' where id=2; -update noar tt set v0='HJY3X0CBPKG1SIXQW7J6' where id=2; -update noar ti set v0='HJY3X0CBPKG1SIXQW7J6' where id=2; -update noar tt set b1='OQ7E682BAOTGSJL0D7UXGLDT' where id=2; -update noar ti set b1='OQ7E682BAOTGSJL0D7UXGLDT' where id=2; -update noar tt set v0='ALI81HA5HJFJPQ9' where id=2; -update noar ti set v0='ALI81HA5HJFJPQ9' where id=2; -update noar tt set b2='88UM590LAJ0JMQYO5561IXXL9RY' where id=2; -update noar ti set b2='88UM590LAJ0JMQYO5561IXXL9RY' where id=2; -update noar tt set v0='I4' where id=3; -update noar ti set v0='I4' where id=3; -update noar tt set b0='ZHYB9SFIF3WMK35XBCILM' where id=3; -update noar ti set b0='ZHYB9SFIF3WMK35XBCILM' where id=3; -update noar tt set v0='OC' where id=3; -update noar ti set v0='OC' where id=3; -update noar tt set b1='9DOENC0JNBEXYYZYSB6ZGK' where id=3; -update noar ti set b1='9DOENC0JNBEXYYZYSB6ZGK' where id=3; -update noar tt set v0='J9FORFWH1RV6Z6B8IEW8Y' where id=3; -update noar ti set v0='J9FORFWH1RV6Z6B8IEW8Y' where id=3; -update noar tt set b2='6CXDR5K0' where id=3; -update noar ti set b2='6CXDR5K0' where id=3; -update noar tt set v0='FWN25C' where id=4; -update noar ti set v0='FWN25C' where id=4; -update noar tt set b0='HSXJ18OLZFYKXAFMTUL23XG8L7LGG' where id=4; -update noar ti set b0='HSXJ18OLZFYKXAFMTUL23XG8L7LGG' where id=4; -update noar tt set v0='RJ25O7CM54CCWYDF47YF79AK2V' where id=4; -update noar ti set v0='RJ25O7CM54CCWYDF47YF79AK2V' where id=4; -update noar tt set b1='LJ14H2H219TXFR54J3' where id=4; -update noar ti set b1='LJ14H2H219TXFR54J3' where id=4; -update noar tt set v0='48RKTO3H8SJW1L' where id=4; -update noar ti set v0='48RKTO3H8SJW1L' where id=4; -update noar tt set b2='1H2Q0KIIX16BW21GR' where id=4; -update noar ti set b2='1H2Q0KIIX16BW21GR' where id=4; -update noar tt set v0='GSX0DYF61NT9FKDMKV9EAR2P35' where id=5; -update noar ti set v0='GSX0DYF61NT9FKDMKV9EAR2P35' where id=5; -update noar tt set b0='YTQIY' where id=5; -update noar ti set b0='YTQIY' where id=5; -update noar tt set v0='2KQ2KY3NRXK3KFYNKHLF' where id=5; -update noar ti set v0='2KQ2KY3NRXK3KFYNKHLF' where id=5; -update noar tt set b1='4PUKW8G' where id=5; -update noar ti set b1='4PUKW8G' where id=5; -update noar tt set v0='36YDO7TSCKND29VOGDOW438SY0' where id=5; -update noar ti set v0='36YDO7TSCKND29VOGDOW438SY0' where id=5; -update noar tt set b2='I0JJEBZT4V95FJHW' where id=5; -update noar ti set b2='I0JJEBZT4V95FJHW' where id=5; -update noar tt set v0='OHXSQJRC6FZ6MRA3MWW5A65B0' where id=6; -update noar ti set v0='OHXSQJRC6FZ6MRA3MWW5A65B0' where id=6; -update noar tt set b0='15PL4CVY3IQOOX2T9M7WWX6CHK' where id=6; -update noar ti set b0='15PL4CVY3IQOOX2T9M7WWX6CHK' where id=6; -update noar tt set v0='4XGG656T0W5NGNEVQHFG' where id=6; -update noar ti set v0='4XGG656T0W5NGNEVQHFG' where id=6; -update noar tt set b1='8P12WV8G1YI7H4T270EL5OPUFF4N' where id=6; -update noar ti set b1='8P12WV8G1YI7H4T270EL5OPUFF4N' where id=6; -update noar tt set v0='VHPNY6WQAAM' where id=6; -update noar ti set v0='VHPNY6WQAAM' where id=6; -update noar tt set b2='C1GXCW7ZJO3YRBGZK43YLC4JRCHHN' where id=6; -update noar ti set b2='C1GXCW7ZJO3YRBGZK43YLC4JRCHHN' where id=6; -update noar tt set v0='KP07N9Z78GZZD3O0R9PCLZQE88E3' where id=7; -update noar ti set v0='KP07N9Z78GZZD3O0R9PCLZQE88E3' where id=7; -update noar tt set b0='E1534PDCYYKEY6HMK8ERQ5FH3DXTN7VC' where id=7; -update noar ti set b0='E1534PDCYYKEY6HMK8ERQ5FH3DXTN7VC' where id=7; -update noar tt set v0='XCON96ZERYB4Y89FGAKS8' where id=7; -update noar ti set v0='XCON96ZERYB4Y89FGAKS8' where id=7; -update noar tt set b1='959VVUQDCGZE36X5KODWM4KK4UKAM2PU' where id=7; -update noar ti set b1='959VVUQDCGZE36X5KODWM4KK4UKAM2PU' where id=7; -update noar tt set v0='TL2HKYMKM3G1PH2H' where id=7; -update noar ti set v0='TL2HKYMKM3G1PH2H' where id=7; -update noar tt set b2='TDUTHXS52LP61BC5IW7YB2V' where id=7; -update noar ti set b2='TDUTHXS52LP61BC5IW7YB2V' where id=7; -update noar tt set v0='C9D1R' where id=8; -update noar ti set v0='C9D1R' where id=8; -update noar tt set b0='ZC64X5FMTIN08K7HRQ90S1BBPWCH1' where id=8; -update noar ti set b0='ZC64X5FMTIN08K7HRQ90S1BBPWCH1' where id=8; -update noar tt set v0='C1' where id=8; -update noar ti set v0='C1' where id=8; -update noar tt set b1='20JRYK6EEXRMQG' where id=8; -update noar ti set b1='20JRYK6EEXRMQG' where id=8; -update noar tt set v0='1H' where id=8; -update noar ti set v0='1H' where id=8; -update noar tt set b2='5HEF65UEGQ8JY4YNG7' where id=8; -update noar ti set b2='5HEF65UEGQ8JY4YNG7' where id=8; -update noar tt set v0='B7LEOT1OTK2BXBS' where id=9; -update noar ti set v0='B7LEOT1OTK2BXBS' where id=9; -update noar tt set b0='JNIJ2N45E03U4ZR30OTAVS1' where id=9; -update noar ti set b0='JNIJ2N45E03U4ZR30OTAVS1' where id=9; -update noar tt set v0='DRU2IPXDFGL7YX50O' where id=9; -update noar ti set v0='DRU2IPXDFGL7YX50O' where id=9; -update noar tt set b1='NKTU6IXVVHFW15IES' where id=9; -update noar ti set b1='NKTU6IXVVHFW15IES' where id=9; -update noar tt set v0='49L35R8HI855WAK' where id=9; -update noar ti set v0='49L35R8HI855WAK' where id=9; -update noar tt set b2='WOVRVP459QYK7YH3NCTUKBWVS7BS0ORL' where id=9; -update noar ti set b2='WOVRVP459QYK7YH3NCTUKBWVS7BS0ORL' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 blob not null, - b1 mediumblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='LENCHJMQGGCJ303MFPAUJWZ5BJ5EW' where id=1; -update noar ti set v0='LENCHJMQGGCJ303MFPAUJWZ5BJ5EW' where id=1; -update noar tt set b0='F8CE2ZW3PJPUIPTU2E' where id=1; -update noar ti set b0='F8CE2ZW3PJPUIPTU2E' where id=1; -update noar tt set v0='QVO5DP5LH5S57TLRTQ5JEXXXYMWX8G' where id=1; -update noar ti set v0='QVO5DP5LH5S57TLRTQ5JEXXXYMWX8G' where id=1; -update noar tt set b1='BCMZJAYS7EEY9' where id=1; -update noar ti set b1='BCMZJAYS7EEY9' where id=1; -update noar tt set v0='8Z4P1C0HXXB9JHRMGQKDM' where id=1; -update noar ti set v0='8Z4P1C0HXXB9JHRMGQKDM' where id=1; -update noar tt set b2='OEY' where id=1; -update noar ti set b2='OEY' where id=1; -update noar tt set v0='ZOCWCU9OZVY45W4JT' where id=2; -update noar ti set v0='ZOCWCU9OZVY45W4JT' where id=2; -update noar tt set b0='OL9IV' where id=2; -update noar ti set b0='OL9IV' where id=2; -update noar tt set v0='XQJRV2PKCWR2Q1T6STZOP2P7VYJKHG' where id=2; -update noar ti set v0='XQJRV2PKCWR2Q1T6STZOP2P7VYJKHG' where id=2; -update noar tt set b1='2X0KL88GKI2ACT3JIC5H9YNV0' where id=2; -update noar ti set b1='2X0KL88GKI2ACT3JIC5H9YNV0' where id=2; -update noar tt set v0='JO1BQEGX1160ZXTFVW8S75' where id=2; -update noar ti set v0='JO1BQEGX1160ZXTFVW8S75' where id=2; -update noar tt set b2='4EN84QTXSYD6Z' where id=2; -update noar ti set b2='4EN84QTXSYD6Z' where id=2; -update noar tt set v0='8VWIPY3HJBD' where id=3; -update noar ti set v0='8VWIPY3HJBD' where id=3; -update noar tt set b0='JZTMAX12E' where id=3; -update noar ti set b0='JZTMAX12E' where id=3; -update noar tt set v0='2' where id=3; -update noar ti set v0='2' where id=3; -update noar tt set b1='HRZXJOLSTZLJPPL5316EO' where id=3; -update noar ti set b1='HRZXJOLSTZLJPPL5316EO' where id=3; -update noar tt set v0='EM86XP33CAOD6M1ENO7Y' where id=3; -update noar ti set v0='EM86XP33CAOD6M1ENO7Y' where id=3; -update noar tt set b2='OW620YFSMA69YHF' where id=3; -update noar ti set b2='OW620YFSMA69YHF' where id=3; -update noar tt set v0='1637J6' where id=4; -update noar ti set v0='1637J6' where id=4; -update noar tt set b0='MQ1R5OB9ZKUFKYTT20RJ6' where id=4; -update noar ti set b0='MQ1R5OB9ZKUFKYTT20RJ6' where id=4; -update noar tt set v0='UQMF31RVBD12BSFJRYMQIV4C' where id=4; -update noar ti set v0='UQMF31RVBD12BSFJRYMQIV4C' where id=4; -update noar tt set b1='B6XHCI5JPW5POLPWYL46A64M' where id=4; -update noar ti set b1='B6XHCI5JPW5POLPWYL46A64M' where id=4; -update noar tt set v0='2DJB86' where id=4; -update noar ti set v0='2DJB86' where id=4; -update noar tt set b2='6HNL2C' where id=4; -update noar ti set b2='6HNL2C' where id=4; -update noar tt set v0='0UI' where id=5; -update noar ti set v0='0UI' where id=5; -update noar tt set b0='B4' where id=5; -update noar ti set b0='B4' where id=5; -update noar tt set v0='8SDVFDD4LE53VREW5SKEL4Q' where id=5; -update noar ti set v0='8SDVFDD4LE53VREW5SKEL4Q' where id=5; -update noar tt set b1='103KHBOZLLOAXXX6S6M' where id=5; -update noar ti set b1='103KHBOZLLOAXXX6S6M' where id=5; -update noar tt set v0='2RKD4ISGZH22E50208WFO978URY' where id=5; -update noar ti set v0='2RKD4ISGZH22E50208WFO978URY' where id=5; -update noar tt set b2='GE4EIB1TDHL' where id=5; -update noar ti set b2='GE4EIB1TDHL' where id=5; -update noar tt set v0='VQLU' where id=6; -update noar ti set v0='VQLU' where id=6; -update noar tt set b0='9NSR79YXU78F4JPMWL' where id=6; -update noar ti set b0='9NSR79YXU78F4JPMWL' where id=6; -update noar tt set v0='3BJY0SUVRNY5POX' where id=6; -update noar ti set v0='3BJY0SUVRNY5POX' where id=6; -update noar tt set b1='3YFD9U4V5' where id=6; -update noar ti set b1='3YFD9U4V5' where id=6; -update noar tt set v0='SKET5AFRD8YLN3Q717DFLVNVML' where id=6; -update noar ti set v0='SKET5AFRD8YLN3Q717DFLVNVML' where id=6; -update noar tt set b2='0WLWS5E2YQWN' where id=6; -update noar ti set b2='0WLWS5E2YQWN' where id=6; -update noar tt set v0='IM07ZOBJQLSKD' where id=7; -update noar ti set v0='IM07ZOBJQLSKD' where id=7; -update noar tt set b0='N9HCNH6435OB5B' where id=7; -update noar ti set b0='N9HCNH6435OB5B' where id=7; -update noar tt set v0='Y4JH8PSVCG34S0DSX43ENKQ4Z' where id=7; -update noar ti set v0='Y4JH8PSVCG34S0DSX43ENKQ4Z' where id=7; -update noar tt set b1='R3YBDYYBLXOSJZV' where id=7; -update noar ti set b1='R3YBDYYBLXOSJZV' where id=7; -update noar tt set v0='SKSVUX8K27' where id=7; -update noar ti set v0='SKSVUX8K27' where id=7; -update noar tt set b2='1ZIAT4BP9KNQ7ZZLPO95' where id=7; -update noar ti set b2='1ZIAT4BP9KNQ7ZZLPO95' where id=7; -update noar tt set v0='UPVJHEGO8XSSKQ0HIT0TW7PHJM' where id=8; -update noar ti set v0='UPVJHEGO8XSSKQ0HIT0TW7PHJM' where id=8; -update noar tt set b0='8Q2J4SVUB' where id=8; -update noar ti set b0='8Q2J4SVUB' where id=8; -update noar tt set v0='4T5' where id=8; -update noar ti set v0='4T5' where id=8; -update noar tt set b1='LOJCOJMQQVTGQZHQ16AEYH53CZ3OQFTW' where id=8; -update noar ti set b1='LOJCOJMQQVTGQZHQ16AEYH53CZ3OQFTW' where id=8; -update noar tt set v0='46GCM7JYG3A5VMCTR' where id=8; -update noar ti set v0='46GCM7JYG3A5VMCTR' where id=8; -update noar tt set b2='7M3YITAX5NT20RYJKXJWJ18LU87' where id=8; -update noar ti set b2='7M3YITAX5NT20RYJKXJWJ18LU87' where id=8; -update noar tt set v0='VTNEF76C0Q086YPQO7X' where id=9; -update noar ti set v0='VTNEF76C0Q086YPQO7X' where id=9; -update noar tt set b0='JASX0YR' where id=9; -update noar ti set b0='JASX0YR' where id=9; -update noar tt set v0='TE61595SIGRAQV1SGXJ5SZF' where id=9; -update noar ti set v0='TE61595SIGRAQV1SGXJ5SZF' where id=9; -update noar tt set b1='80I8VQNZNEUEG5IV07HF6L1ELJCK' where id=9; -update noar ti set b1='80I8VQNZNEUEG5IV07HF6L1ELJCK' where id=9; -update noar tt set v0='QA99Q6AW' where id=9; -update noar ti set v0='QA99Q6AW' where id=9; -update noar tt set b2='HPRKSGR8K' where id=9; -update noar ti set b2='HPRKSGR8K' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 blob not null, - b1 mediumblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='7KE3LHTP5IY9' where id=1; -update noar ti set v0='7KE3LHTP5IY9' where id=1; -update noar tt set b0='21I8J2CB' where id=1; -update noar ti set b0='21I8J2CB' where id=1; -update noar tt set v0='APIXTPBM3718M8KQ72ZQZR4TX4' where id=1; -update noar ti set v0='APIXTPBM3718M8KQ72ZQZR4TX4' where id=1; -update noar tt set b1='XIKAH6SSWNAE7JXLOQ3JZV' where id=1; -update noar ti set b1='XIKAH6SSWNAE7JXLOQ3JZV' where id=1; -update noar tt set v0='V7QJGK07FNLEN2E1VL5A9YL' where id=1; -update noar ti set v0='V7QJGK07FNLEN2E1VL5A9YL' where id=1; -update noar tt set b2='GVVDX3X2ZLO6828Q' where id=1; -update noar ti set b2='GVVDX3X2ZLO6828Q' where id=1; -update noar tt set v0='1XZV8X0OUWP9OILZELIHLFKI6B551V' where id=2; -update noar ti set v0='1XZV8X0OUWP9OILZELIHLFKI6B551V' where id=2; -update noar tt set b0='04B9BCVC6UF' where id=2; -update noar ti set b0='04B9BCVC6UF' where id=2; -update noar tt set v0='XACGUK6JZ39S' where id=2; -update noar ti set v0='XACGUK6JZ39S' where id=2; -update noar tt set b1='5TDCAD12HYZ1KK4RZOL37QHHU4F' where id=2; -update noar ti set b1='5TDCAD12HYZ1KK4RZOL37QHHU4F' where id=2; -update noar tt set v0='817G1ZPRB1P9' where id=2; -update noar ti set v0='817G1ZPRB1P9' where id=2; -update noar tt set b2='7G7IQBSRB' where id=2; -update noar ti set b2='7G7IQBSRB' where id=2; -update noar tt set v0='RIKSRC' where id=3; -update noar ti set v0='RIKSRC' where id=3; -update noar tt set b0='ERYPUE9L9E03PG538PHCV5O4HT99I' where id=3; -update noar ti set b0='ERYPUE9L9E03PG538PHCV5O4HT99I' where id=3; -update noar tt set v0='NMOX7V4L' where id=3; -update noar ti set v0='NMOX7V4L' where id=3; -update noar tt set b1='SFI314YVRWT5EC8LFZOBM8Q36L93I' where id=3; -update noar ti set b1='SFI314YVRWT5EC8LFZOBM8Q36L93I' where id=3; -update noar tt set v0='2' where id=3; -update noar ti set v0='2' where id=3; -update noar tt set b2='UC78XHGAYM59XXY2G5GFTQSB46' where id=3; -update noar ti set b2='UC78XHGAYM59XXY2G5GFTQSB46' where id=3; -update noar tt set v0='0E5LWC0QCM' where id=4; -update noar ti set v0='0E5LWC0QCM' where id=4; -update noar tt set b0='P836SEON6ZCG0877253UU28VRT' where id=4; -update noar ti set b0='P836SEON6ZCG0877253UU28VRT' where id=4; -update noar tt set v0='ARP9ZZDBVM1JWICL' where id=4; -update noar ti set v0='ARP9ZZDBVM1JWICL' where id=4; -update noar tt set b1='SU9JTW21GLI' where id=4; -update noar ti set b1='SU9JTW21GLI' where id=4; -update noar tt set v0='BK4CRYAFI7YY1BKAWKR' where id=4; -update noar ti set v0='BK4CRYAFI7YY1BKAWKR' where id=4; -update noar tt set b2='Y9I49WR8XO6XH0OIG6VEOJVOOIBVRQE' where id=4; -update noar ti set b2='Y9I49WR8XO6XH0OIG6VEOJVOOIBVRQE' where id=4; -update noar tt set v0='5BUOI381SO8' where id=5; -update noar ti set v0='5BUOI381SO8' where id=5; -update noar tt set b0='31O58AJ2GTUFR' where id=5; -update noar ti set b0='31O58AJ2GTUFR' where id=5; -update noar tt set v0='IOI2X2W2IQ1G4LDKH7WL' where id=5; -update noar ti set v0='IOI2X2W2IQ1G4LDKH7WL' where id=5; -update noar tt set b1='9S34' where id=5; -update noar ti set b1='9S34' where id=5; -update noar tt set v0='W058N7ZIR8F72K0H9J' where id=5; -update noar ti set v0='W058N7ZIR8F72K0H9J' where id=5; -update noar tt set b2='WLLLPR99ZUFVFA6XU' where id=5; -update noar ti set b2='WLLLPR99ZUFVFA6XU' where id=5; -update noar tt set v0='DBN29FX4B9RMM9OW6EPSDEUMWPL71Y' where id=6; -update noar ti set v0='DBN29FX4B9RMM9OW6EPSDEUMWPL71Y' where id=6; -update noar tt set b0='B547NZRK7B47GNWAPCWRLFRIC7SSRW' where id=6; -update noar ti set b0='B547NZRK7B47GNWAPCWRLFRIC7SSRW' where id=6; -update noar tt set v0='8K4B0I7FVMXWLSYJVBPNA' where id=6; -update noar ti set v0='8K4B0I7FVMXWLSYJVBPNA' where id=6; -update noar tt set b1='2C8DYVNWBTJ5QY3YMOM2WINC' where id=6; -update noar ti set b1='2C8DYVNWBTJ5QY3YMOM2WINC' where id=6; -update noar tt set v0='7VH7LLE4VFMXRZWGGAT99QE534GI57' where id=6; -update noar ti set v0='7VH7LLE4VFMXRZWGGAT99QE534GI57' where id=6; -update noar tt set b2='FCVFYSR' where id=6; -update noar ti set b2='FCVFYSR' where id=6; -update noar tt set v0='I' where id=7; -update noar ti set v0='I' where id=7; -update noar tt set b0='JQ32WTDI8T22UAHTM0W' where id=7; -update noar ti set b0='JQ32WTDI8T22UAHTM0W' where id=7; -update noar tt set v0='NNT16P3VU25BLZHJ2LC67' where id=7; -update noar ti set v0='NNT16P3VU25BLZHJ2LC67' where id=7; -update noar tt set b1='95ZHCB616' where id=7; -update noar ti set b1='95ZHCB616' where id=7; -update noar tt set v0='QYPQTKA0PT52151U552C7RIL0X' where id=7; -update noar ti set v0='QYPQTKA0PT52151U552C7RIL0X' where id=7; -update noar tt set b2='NS78ZGRVCB10FE5YXZCYBBXOJ35G5LB' where id=7; -update noar ti set b2='NS78ZGRVCB10FE5YXZCYBBXOJ35G5LB' where id=7; -update noar tt set v0='DKQ4ROWI42' where id=8; -update noar ti set v0='DKQ4ROWI42' where id=8; -update noar tt set b0='16OZZDQI94RKL1I072N32A' where id=8; -update noar ti set b0='16OZZDQI94RKL1I072N32A' where id=8; -update noar tt set v0='R8NC3U2IGMULREWYQKS6F8N9K7' where id=8; -update noar ti set v0='R8NC3U2IGMULREWYQKS6F8N9K7' where id=8; -update noar tt set b1='LHI3MLYH2LWJBIBVXJC7X6JTURMOXUL' where id=8; -update noar ti set b1='LHI3MLYH2LWJBIBVXJC7X6JTURMOXUL' where id=8; -update noar tt set v0='PEBLZ83Y6MQJ3OA69SBGB2RTXDCTPAXF' where id=8; -update noar ti set v0='PEBLZ83Y6MQJ3OA69SBGB2RTXDCTPAXF' where id=8; -update noar tt set b2='9ZAJYA' where id=8; -update noar ti set b2='9ZAJYA' where id=8; -update noar tt set v0='CGJB4SNM2E5P1JUU2N3CUIE827' where id=9; -update noar ti set v0='CGJB4SNM2E5P1JUU2N3CUIE827' where id=9; -update noar tt set b0='SINX94DOZ3QX308YSXDPO4' where id=9; -update noar ti set b0='SINX94DOZ3QX308YSXDPO4' where id=9; -update noar tt set v0='LR4SUXDK2K6HL' where id=9; -update noar ti set v0='LR4SUXDK2K6HL' where id=9; -update noar tt set b1='9F6Z3M4FV1R79SWU2N4Z' where id=9; -update noar ti set b1='9F6Z3M4FV1R79SWU2N4Z' where id=9; -update noar tt set v0='DA' where id=9; -update noar ti set v0='DA' where id=9; -update noar tt set b2='W5W64F4V2TSZ5MON' where id=9; -update noar ti set b2='W5W64F4V2TSZ5MON' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 blob null, - b1 mediumblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='ITOG3R3GJXZ8F8X7A9706KE6PP6RI6' where id=1; -update noar ti set v0='ITOG3R3GJXZ8F8X7A9706KE6PP6RI6' where id=1; -update noar tt set b0='1UDVLBTE4BSQODU42ZKHBKXF0L6KFHGO' where id=1; -update noar ti set b0='1UDVLBTE4BSQODU42ZKHBKXF0L6KFHGO' where id=1; -update noar tt set v0='NL54S1X9CBX12MLSOG4P9B5' where id=1; -update noar ti set v0='NL54S1X9CBX12MLSOG4P9B5' where id=1; -update noar tt set b1='8U05N' where id=1; -update noar ti set b1='8U05N' where id=1; -update noar tt set v0='YB6F96FWM1MB6E8YJPRVG6' where id=1; -update noar ti set v0='YB6F96FWM1MB6E8YJPRVG6' where id=1; -update noar tt set b2='Z3WLIR' where id=1; -update noar ti set b2='Z3WLIR' where id=1; -update noar tt set v0='T94CJK2G2GHLXFLL' where id=2; -update noar ti set v0='T94CJK2G2GHLXFLL' where id=2; -update noar tt set b0='Q7KFYALKLHPJXO' where id=2; -update noar ti set b0='Q7KFYALKLHPJXO' where id=2; -update noar tt set v0='58INGAY6W' where id=2; -update noar ti set v0='58INGAY6W' where id=2; -update noar tt set b1='S' where id=2; -update noar ti set b1='S' where id=2; -update noar tt set v0='QRNDPMADAAAJKWHAL2CVQ9MS' where id=2; -update noar ti set v0='QRNDPMADAAAJKWHAL2CVQ9MS' where id=2; -update noar tt set b2='0N2TXCY81M41S' where id=2; -update noar ti set b2='0N2TXCY81M41S' where id=2; -update noar tt set v0='S8FL4WPHM86RI1R4K' where id=3; -update noar ti set v0='S8FL4WPHM86RI1R4K' where id=3; -update noar tt set b0='MG2FV' where id=3; -update noar ti set b0='MG2FV' where id=3; -update noar tt set v0='EJKUC8DHX4PI' where id=3; -update noar ti set v0='EJKUC8DHX4PI' where id=3; -update noar tt set b1='FEGUSYFOI5CTMZMVVYAWE' where id=3; -update noar ti set b1='FEGUSYFOI5CTMZMVVYAWE' where id=3; -update noar tt set v0='KCH8UXZI1R8XPS8509D3X5JQ' where id=3; -update noar ti set v0='KCH8UXZI1R8XPS8509D3X5JQ' where id=3; -update noar tt set b2='9672KLS2' where id=3; -update noar ti set b2='9672KLS2' where id=3; -update noar tt set v0='D2HB7TL852QVJR0' where id=4; -update noar ti set v0='D2HB7TL852QVJR0' where id=4; -update noar tt set b0='BDQ6MIROG1R1PKP8EMQIETZB' where id=4; -update noar ti set b0='BDQ6MIROG1R1PKP8EMQIETZB' where id=4; -update noar tt set v0='DJDM' where id=4; -update noar ti set v0='DJDM' where id=4; -update noar tt set b1='K' where id=4; -update noar ti set b1='K' where id=4; -update noar tt set v0='PQ0W0KDBR9AQ09F' where id=4; -update noar ti set v0='PQ0W0KDBR9AQ09F' where id=4; -update noar tt set b2='69XW7K4HJG0AWKEJ' where id=4; -update noar ti set b2='69XW7K4HJG0AWKEJ' where id=4; -update noar tt set v0='QR15ZOIDRJTJDL6V' where id=5; -update noar ti set v0='QR15ZOIDRJTJDL6V' where id=5; -update noar tt set b0='O45HSTJ8QWWBUMYDVZTNLV9T2EYMV' where id=5; -update noar ti set b0='O45HSTJ8QWWBUMYDVZTNLV9T2EYMV' where id=5; -update noar tt set v0='SNPC1FHWOH0KHXXVJ92' where id=5; -update noar ti set v0='SNPC1FHWOH0KHXXVJ92' where id=5; -update noar tt set b1='C213DZQCL9IOXOB4SH7XYVG' where id=5; -update noar ti set b1='C213DZQCL9IOXOB4SH7XYVG' where id=5; -update noar tt set v0='WO6WWH28S6LPS96Y22BY' where id=5; -update noar ti set v0='WO6WWH28S6LPS96Y22BY' where id=5; -update noar tt set b2='UVMBWD5WY0' where id=5; -update noar ti set b2='UVMBWD5WY0' where id=5; -update noar tt set v0='W1AHLWPMFAS' where id=6; -update noar ti set v0='W1AHLWPMFAS' where id=6; -update noar tt set b0='0IZTDWZMH1C1BU' where id=6; -update noar ti set b0='0IZTDWZMH1C1BU' where id=6; -update noar tt set v0='YSBSYJAF' where id=6; -update noar ti set v0='YSBSYJAF' where id=6; -update noar tt set b1='2' where id=6; -update noar ti set b1='2' where id=6; -update noar tt set v0='XASLZDRI' where id=6; -update noar ti set v0='XASLZDRI' where id=6; -update noar tt set b2='BG' where id=6; -update noar ti set b2='BG' where id=6; -update noar tt set v0='1KIX3X5DS' where id=7; -update noar ti set v0='1KIX3X5DS' where id=7; -update noar tt set b0='BOIH' where id=7; -update noar ti set b0='BOIH' where id=7; -update noar tt set v0='VK' where id=7; -update noar ti set v0='VK' where id=7; -update noar tt set b1='17U86DE' where id=7; -update noar ti set b1='17U86DE' where id=7; -update noar tt set v0='OYS54B7AMPCSDG19O' where id=7; -update noar ti set v0='OYS54B7AMPCSDG19O' where id=7; -update noar tt set b2='5I8HTVOCNAO6XAO8K1JLO84AKMWIB9W5' where id=7; -update noar ti set b2='5I8HTVOCNAO6XAO8K1JLO84AKMWIB9W5' where id=7; -update noar tt set v0='DIYL5GB5FG530' where id=8; -update noar ti set v0='DIYL5GB5FG530' where id=8; -update noar tt set b0='78BMSMAW3UWGE4OF3KS8C2Y740' where id=8; -update noar ti set b0='78BMSMAW3UWGE4OF3KS8C2Y740' where id=8; -update noar tt set v0='KEBWB7FHP2PSEHOO5LHIS' where id=8; -update noar ti set v0='KEBWB7FHP2PSEHOO5LHIS' where id=8; -update noar tt set b1='OCI7ZNYO4G0WT5XXFFWEJKCX' where id=8; -update noar ti set b1='OCI7ZNYO4G0WT5XXFFWEJKCX' where id=8; -update noar tt set v0='X' where id=8; -update noar ti set v0='X' where id=8; -update noar tt set b2='JTWRO3Y52IO' where id=8; -update noar ti set b2='JTWRO3Y52IO' where id=8; -update noar tt set v0='2GTHJS3I3FT610VCWU929' where id=9; -update noar ti set v0='2GTHJS3I3FT610VCWU929' where id=9; -update noar tt set b0='HIC9EZ' where id=9; -update noar ti set b0='HIC9EZ' where id=9; -update noar tt set v0='02M2R965' where id=9; -update noar ti set v0='02M2R965' where id=9; -update noar tt set b1='2OBNUP6QP5CRHZ13F60B05YER4M9' where id=9; -update noar ti set b1='2OBNUP6QP5CRHZ13F60B05YER4M9' where id=9; -update noar tt set v0='N1XNJEB1EPLORB8' where id=9; -update noar ti set v0='N1XNJEB1EPLORB8' where id=9; -update noar tt set b2='CODJ3KO7G94' where id=9; -update noar ti set b2='CODJ3KO7G94' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 blob null, - b1 mediumblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='59U' where id=1; -update noar ti set v0='59U' where id=1; -update noar tt set b0='OVOSKGHWA0W' where id=1; -update noar ti set b0='OVOSKGHWA0W' where id=1; -update noar tt set v0='6AW' where id=1; -update noar ti set v0='6AW' where id=1; -update noar tt set b1='CPSHR5QXFDQGR63' where id=1; -update noar ti set b1='CPSHR5QXFDQGR63' where id=1; -update noar tt set v0='Z' where id=1; -update noar ti set v0='Z' where id=1; -update noar tt set b2='Y6OPCJCGB9KYZ1XQR9AB323NE8R4Y' where id=1; -update noar ti set b2='Y6OPCJCGB9KYZ1XQR9AB323NE8R4Y' where id=1; -update noar tt set v0='9' where id=2; -update noar ti set v0='9' where id=2; -update noar tt set b0='T6LJ1P99EHE5QCYYF9WLOWC1O' where id=2; -update noar ti set b0='T6LJ1P99EHE5QCYYF9WLOWC1O' where id=2; -update noar tt set v0='PUN2GUFBEJFWKG58SZ0IBKUVVN42HD' where id=2; -update noar ti set v0='PUN2GUFBEJFWKG58SZ0IBKUVVN42HD' where id=2; -update noar tt set b1='VADBHP' where id=2; -update noar ti set b1='VADBHP' where id=2; -update noar tt set v0='LSXUG781WLGC7S2BQ99U3PEIRRGBA' where id=2; -update noar ti set v0='LSXUG781WLGC7S2BQ99U3PEIRRGBA' where id=2; -update noar tt set b2='BKOX26PEZW0VUBW4GZB' where id=2; -update noar ti set b2='BKOX26PEZW0VUBW4GZB' where id=2; -update noar tt set v0='RSQ1CT699EQ4QCV' where id=3; -update noar ti set v0='RSQ1CT699EQ4QCV' where id=3; -update noar tt set b0='8SGM6RHWQ0ZKUQL3145Q2QUI3' where id=3; -update noar ti set b0='8SGM6RHWQ0ZKUQL3145Q2QUI3' where id=3; -update noar tt set v0='A7BKUNKLZMN5RP0VN2V5HEHHB5TX6E28' where id=3; -update noar ti set v0='A7BKUNKLZMN5RP0VN2V5HEHHB5TX6E28' where id=3; -update noar tt set b1='4G61POD3IA3WY3HZDYXU01XFJTT4' where id=3; -update noar ti set b1='4G61POD3IA3WY3HZDYXU01XFJTT4' where id=3; -update noar tt set v0='HJMS65VUXQA617KERLP4Z' where id=3; -update noar ti set v0='HJMS65VUXQA617KERLP4Z' where id=3; -update noar tt set b2='PXDCNY811KVX3A8X' where id=3; -update noar ti set b2='PXDCNY811KVX3A8X' where id=3; -update noar tt set v0='ET9WOOJ72IJWE6G2L4OPOBNW3BL884S' where id=4; -update noar ti set v0='ET9WOOJ72IJWE6G2L4OPOBNW3BL884S' where id=4; -update noar tt set b0='E5U73MKDE0Z' where id=4; -update noar ti set b0='E5U73MKDE0Z' where id=4; -update noar tt set v0='6YXLPCT4LCFXRUHH' where id=4; -update noar ti set v0='6YXLPCT4LCFXRUHH' where id=4; -update noar tt set b1='Z1I9HJTI' where id=4; -update noar ti set b1='Z1I9HJTI' where id=4; -update noar tt set v0='OA2CVH35HBKFMYIE5YIIGV375V5' where id=4; -update noar ti set v0='OA2CVH35HBKFMYIE5YIIGV375V5' where id=4; -update noar tt set b2='QWWTS6AMLM8S8DJ38YNYHFAHHO' where id=4; -update noar ti set b2='QWWTS6AMLM8S8DJ38YNYHFAHHO' where id=4; -update noar tt set v0='M886E0A0IW' where id=5; -update noar ti set v0='M886E0A0IW' where id=5; -update noar tt set b0='D4NWLPMWF4TZSS9X' where id=5; -update noar ti set b0='D4NWLPMWF4TZSS9X' where id=5; -update noar tt set v0='NI3PFYM1' where id=5; -update noar ti set v0='NI3PFYM1' where id=5; -update noar tt set b1='Y1TL9GGE01FKO43' where id=5; -update noar ti set b1='Y1TL9GGE01FKO43' where id=5; -update noar tt set v0='N' where id=5; -update noar ti set v0='N' where id=5; -update noar tt set b2='XM9' where id=5; -update noar ti set b2='XM9' where id=5; -update noar tt set v0='ASACW0Z0UVVUH6CQJ2ZS3F9ORVG0Z' where id=6; -update noar ti set v0='ASACW0Z0UVVUH6CQJ2ZS3F9ORVG0Z' where id=6; -update noar tt set b0='23HG3VOO99BEW2S3C65S8WTRO7FV3AGT' where id=6; -update noar ti set b0='23HG3VOO99BEW2S3C65S8WTRO7FV3AGT' where id=6; -update noar tt set v0='P1NUMMGTINZQ1D4M5CO8GU' where id=6; -update noar ti set v0='P1NUMMGTINZQ1D4M5CO8GU' where id=6; -update noar tt set b1='C0ZE64AMXX222F8CMXB7FPC497G4L5' where id=6; -update noar ti set b1='C0ZE64AMXX222F8CMXB7FPC497G4L5' where id=6; -update noar tt set v0='T6EL2' where id=6; -update noar ti set v0='T6EL2' where id=6; -update noar tt set b2='9W8HCI1K71VQ4CJ9HCXZU8H1A' where id=6; -update noar ti set b2='9W8HCI1K71VQ4CJ9HCXZU8H1A' where id=6; -update noar tt set v0='W9LL4NP3MFHBO01MH2VYN5W5PR4P' where id=7; -update noar ti set v0='W9LL4NP3MFHBO01MH2VYN5W5PR4P' where id=7; -update noar tt set b0='OL2YROBHGOVWY' where id=7; -update noar ti set b0='OL2YROBHGOVWY' where id=7; -update noar tt set v0='GQMOZ4H09WV3MJ' where id=7; -update noar ti set v0='GQMOZ4H09WV3MJ' where id=7; -update noar tt set b1='U4PW0K0XRG8A9DOVKBR0T34RP1QWTHL' where id=7; -update noar ti set b1='U4PW0K0XRG8A9DOVKBR0T34RP1QWTHL' where id=7; -update noar tt set v0='LSYG2AW8' where id=7; -update noar ti set v0='LSYG2AW8' where id=7; -update noar tt set b2='J64ILDEI186574IIPWSN' where id=7; -update noar ti set b2='J64ILDEI186574IIPWSN' where id=7; -update noar tt set v0='UP995JT0UA760VU8CVU69YMQUA3RK85' where id=8; -update noar ti set v0='UP995JT0UA760VU8CVU69YMQUA3RK85' where id=8; -update noar tt set b0='00ZL4MB8LPEKI47IQCRY4PZ0J' where id=8; -update noar ti set b0='00ZL4MB8LPEKI47IQCRY4PZ0J' where id=8; -update noar tt set v0='90YRASU6UNNBG43FYHLKJJY' where id=8; -update noar ti set v0='90YRASU6UNNBG43FYHLKJJY' where id=8; -update noar tt set b1='55GLKAGYF1Y9UCS4' where id=8; -update noar ti set b1='55GLKAGYF1Y9UCS4' where id=8; -update noar tt set v0='K80' where id=8; -update noar ti set v0='K80' where id=8; -update noar tt set b2='C2BFRWRRAUVRW7RD' where id=8; -update noar ti set b2='C2BFRWRRAUVRW7RD' where id=8; -update noar tt set v0='5U3ZZ10VJ2D3GDU0DQP2Q7X5BHBE' where id=9; -update noar ti set v0='5U3ZZ10VJ2D3GDU0DQP2Q7X5BHBE' where id=9; -update noar tt set b0='LT2AZ2VG91XJLFJT2YJDUQ00I2CZ5W5' where id=9; -update noar ti set b0='LT2AZ2VG91XJLFJT2YJDUQ00I2CZ5W5' where id=9; -update noar tt set v0='4F62RVEULDMZH7D80L18AZ54BRL' where id=9; -update noar ti set v0='4F62RVEULDMZH7D80L18AZ54BRL' where id=9; -update noar tt set b1='9906C' where id=9; -update noar ti set b1='9906C' where id=9; -update noar tt set v0='AP1K8SG3P1315FSIE1SHQJ7' where id=9; -update noar ti set v0='AP1K8SG3P1315FSIE1SHQJ7' where id=9; -update noar tt set b2='LRTG' where id=9; -update noar ti set b2='LRTG' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 blob not null, - b1 mediumblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='MY536V' where id=1; -update noar ti set v0='MY536V' where id=1; -update noar tt set b0='XQAOXVVXMXTHF0QBYFLLQMQBN52DJMVJ' where id=1; -update noar ti set b0='XQAOXVVXMXTHF0QBYFLLQMQBN52DJMVJ' where id=1; -update noar tt set v0='QDD84ZQMV3YO4UH5UJ0LOQNL' where id=1; -update noar ti set v0='QDD84ZQMV3YO4UH5UJ0LOQNL' where id=1; -update noar tt set b1='CN7UKL2EOKGVZ3' where id=1; -update noar ti set b1='CN7UKL2EOKGVZ3' where id=1; -update noar tt set v0='NRMTOG6H4WZBHK' where id=1; -update noar ti set v0='NRMTOG6H4WZBHK' where id=1; -update noar tt set b2='K9518GHCZKVKVHZXY16KGROOO5D' where id=1; -update noar ti set b2='K9518GHCZKVKVHZXY16KGROOO5D' where id=1; -update noar tt set v0='TQ9I4CV2BO7' where id=2; -update noar ti set v0='TQ9I4CV2BO7' where id=2; -update noar tt set b0='SEX6EIVX4C9F0' where id=2; -update noar ti set b0='SEX6EIVX4C9F0' where id=2; -update noar tt set v0='5T06JQ' where id=2; -update noar ti set v0='5T06JQ' where id=2; -update noar tt set b1='Z11OZ' where id=2; -update noar ti set b1='Z11OZ' where id=2; -update noar tt set v0='IJ805IE7TSYAL' where id=2; -update noar ti set v0='IJ805IE7TSYAL' where id=2; -update noar tt set b2='1O6TFXDUBS7YS385N96DCFWQ' where id=2; -update noar ti set b2='1O6TFXDUBS7YS385N96DCFWQ' where id=2; -update noar tt set v0='UCQK3OU3AF5IIEPXBCZGLA62YFOJ' where id=3; -update noar ti set v0='UCQK3OU3AF5IIEPXBCZGLA62YFOJ' where id=3; -update noar tt set b0='H9BW62UMJXU3NO1DSPYBM8X68' where id=3; -update noar ti set b0='H9BW62UMJXU3NO1DSPYBM8X68' where id=3; -update noar tt set v0='QHPRE2OQGPDQSSQLHE8Z34SWKIH9G' where id=3; -update noar ti set v0='QHPRE2OQGPDQSSQLHE8Z34SWKIH9G' where id=3; -update noar tt set b1='LB0RO' where id=3; -update noar ti set b1='LB0RO' where id=3; -update noar tt set v0='TW44BF90VR0WCBE1J0JOXKH2W9E' where id=3; -update noar ti set v0='TW44BF90VR0WCBE1J0JOXKH2W9E' where id=3; -update noar tt set b2='WXGUET' where id=3; -update noar ti set b2='WXGUET' where id=3; -update noar tt set v0='XASQQH6' where id=4; -update noar ti set v0='XASQQH6' where id=4; -update noar tt set b0='Y' where id=4; -update noar ti set b0='Y' where id=4; -update noar tt set v0='KYTV4S9YGW7IH0YSE5MPHJF72' where id=4; -update noar ti set v0='KYTV4S9YGW7IH0YSE5MPHJF72' where id=4; -update noar tt set b1='DOKMBRIXB9MV3EH91C4HG' where id=4; -update noar ti set b1='DOKMBRIXB9MV3EH91C4HG' where id=4; -update noar tt set v0='SPYUWU2ZHQ07FEQMK' where id=4; -update noar ti set v0='SPYUWU2ZHQ07FEQMK' where id=4; -update noar tt set b2='IH5ISXX3VSMBCGYYTILYHOAAMBU' where id=4; -update noar ti set b2='IH5ISXX3VSMBCGYYTILYHOAAMBU' where id=4; -update noar tt set v0='J4' where id=5; -update noar ti set v0='J4' where id=5; -update noar tt set b0='EIX3' where id=5; -update noar ti set b0='EIX3' where id=5; -update noar tt set v0='J2' where id=5; -update noar ti set v0='J2' where id=5; -update noar tt set b1='FG0E1' where id=5; -update noar ti set b1='FG0E1' where id=5; -update noar tt set v0='XTNT961RTWDJ32T0X7' where id=5; -update noar ti set v0='XTNT961RTWDJ32T0X7' where id=5; -update noar tt set b2='VXCTXR7XMSY' where id=5; -update noar ti set b2='VXCTXR7XMSY' where id=5; -update noar tt set v0='HL9AB5FDWTZC0KG8Q54J8BNY0PI7K' where id=6; -update noar ti set v0='HL9AB5FDWTZC0KG8Q54J8BNY0PI7K' where id=6; -update noar tt set b0='0EPNIQOMICMFJBDCVURVLESQUWYEHK9O' where id=6; -update noar ti set b0='0EPNIQOMICMFJBDCVURVLESQUWYEHK9O' where id=6; -update noar tt set v0='HADYSO2P237N8NR821EOX7' where id=6; -update noar ti set v0='HADYSO2P237N8NR821EOX7' where id=6; -update noar tt set b1='AT3PUFU92JYRZSAF9RRX7H365K' where id=6; -update noar ti set b1='AT3PUFU92JYRZSAF9RRX7H365K' where id=6; -update noar tt set v0='3BHHRAI89K17ID4FQO4P2NMF7' where id=6; -update noar ti set v0='3BHHRAI89K17ID4FQO4P2NMF7' where id=6; -update noar tt set b2='SA9P560TS' where id=6; -update noar ti set b2='SA9P560TS' where id=6; -update noar tt set v0='YYDOY5LRUMJYTZW1DTVN0BXZ' where id=7; -update noar ti set v0='YYDOY5LRUMJYTZW1DTVN0BXZ' where id=7; -update noar tt set b0='HFFJ3U' where id=7; -update noar ti set b0='HFFJ3U' where id=7; -update noar tt set v0='BRC5QUDL6NJNKFOWJ4XW9ST5' where id=7; -update noar ti set v0='BRC5QUDL6NJNKFOWJ4XW9ST5' where id=7; -update noar tt set b1='BQXYLD31N617' where id=7; -update noar ti set b1='BQXYLD31N617' where id=7; -update noar tt set v0='V27M4X71O4PMPA46F8REVC553R' where id=7; -update noar ti set v0='V27M4X71O4PMPA46F8REVC553R' where id=7; -update noar tt set b2='2BK' where id=7; -update noar ti set b2='2BK' where id=7; -update noar tt set v0='IX' where id=8; -update noar ti set v0='IX' where id=8; -update noar tt set b0='HNHW' where id=8; -update noar ti set b0='HNHW' where id=8; -update noar tt set v0='9UN8DNWIYR5P7R0' where id=8; -update noar ti set v0='9UN8DNWIYR5P7R0' where id=8; -update noar tt set b1='LYL' where id=8; -update noar ti set b1='LYL' where id=8; -update noar tt set v0='RCVMRAS41NP63HZNGNS1TZOOUMRYG0' where id=8; -update noar ti set v0='RCVMRAS41NP63HZNGNS1TZOOUMRYG0' where id=8; -update noar tt set b2='IIEYS30P0VSFAIII7S8JWV8EIC7FW6' where id=8; -update noar ti set b2='IIEYS30P0VSFAIII7S8JWV8EIC7FW6' where id=8; -update noar tt set v0='NP3MYIX6KYGRVPG0TIH7YX4MXJI59' where id=9; -update noar ti set v0='NP3MYIX6KYGRVPG0TIH7YX4MXJI59' where id=9; -update noar tt set b0='W23EIGBK' where id=9; -update noar ti set b0='W23EIGBK' where id=9; -update noar tt set v0='9M' where id=9; -update noar ti set v0='9M' where id=9; -update noar tt set b1='LFLWK5KQ3NMAFHHO4YDEXSMAXLZJ4ADW' where id=9; -update noar ti set b1='LFLWK5KQ3NMAFHHO4YDEXSMAXLZJ4ADW' where id=9; -update noar tt set v0='OMD4L0EBGB25S86VEKD8A09HFNI6MD' where id=9; -update noar ti set v0='OMD4L0EBGB25S86VEKD8A09HFNI6MD' where id=9; -update noar tt set b2='2TSGHR55W5TB8WBF0HEQEGOHC0DBZO20' where id=9; -update noar ti set b2='2TSGHR55W5TB8WBF0HEQEGOHC0DBZO20' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 blob not null, - b1 mediumblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='IRV5CW5YBR' where id=1; -update noar ti set v0='IRV5CW5YBR' where id=1; -update noar tt set b0='XVSQJ' where id=1; -update noar ti set b0='XVSQJ' where id=1; -update noar tt set v0='Z1LYOC5JTUF3SPKEL' where id=1; -update noar ti set v0='Z1LYOC5JTUF3SPKEL' where id=1; -update noar tt set b1='EZVPDSJ979XMSMAO' where id=1; -update noar ti set b1='EZVPDSJ979XMSMAO' where id=1; -update noar tt set v0='BN1SJ' where id=1; -update noar ti set v0='BN1SJ' where id=1; -update noar tt set b2='KTC68LPMFS0' where id=1; -update noar ti set b2='KTC68LPMFS0' where id=1; -update noar tt set v0='71P3GWXEQKCD918IIV' where id=2; -update noar ti set v0='71P3GWXEQKCD918IIV' where id=2; -update noar tt set b0='LE9GFFDW0Z4H81352W5E9ISJB3KGKYTP' where id=2; -update noar ti set b0='LE9GFFDW0Z4H81352W5E9ISJB3KGKYTP' where id=2; -update noar tt set v0='Y8NU1CW6KLH6EY7' where id=2; -update noar ti set v0='Y8NU1CW6KLH6EY7' where id=2; -update noar tt set b1='932ZZW83D24GDQS13S' where id=2; -update noar ti set b1='932ZZW83D24GDQS13S' where id=2; -update noar tt set v0='VL675IMIE9LBRG9SJSJ1VSMG' where id=2; -update noar ti set v0='VL675IMIE9LBRG9SJSJ1VSMG' where id=2; -update noar tt set b2='34L9GGYG900581VF' where id=2; -update noar ti set b2='34L9GGYG900581VF' where id=2; -update noar tt set v0='J4946MQM1HZ7453N75BER0867IE4L' where id=3; -update noar ti set v0='J4946MQM1HZ7453N75BER0867IE4L' where id=3; -update noar tt set b0='O8UXHUVTNTD' where id=3; -update noar ti set b0='O8UXHUVTNTD' where id=3; -update noar tt set v0='DOH8' where id=3; -update noar ti set v0='DOH8' where id=3; -update noar tt set b1='KNKTAGHKP2RIN0X7WLE7KO9W' where id=3; -update noar ti set b1='KNKTAGHKP2RIN0X7WLE7KO9W' where id=3; -update noar tt set v0='FZM1JRRQ9B1FZLQBOI149AG' where id=3; -update noar ti set v0='FZM1JRRQ9B1FZLQBOI149AG' where id=3; -update noar tt set b2='4GMCG7OFL2FI9GB1BC1ONAM9' where id=3; -update noar ti set b2='4GMCG7OFL2FI9GB1BC1ONAM9' where id=3; -update noar tt set v0='PC2LW9SMOYE0' where id=4; -update noar ti set v0='PC2LW9SMOYE0' where id=4; -update noar tt set b0='DWID8FBCFAJRIVK6FOIQ2NAI4FI6RQE' where id=4; -update noar ti set b0='DWID8FBCFAJRIVK6FOIQ2NAI4FI6RQE' where id=4; -update noar tt set v0='4FG' where id=4; -update noar ti set v0='4FG' where id=4; -update noar tt set b1='DH3HL4ONMAJX' where id=4; -update noar ti set b1='DH3HL4ONMAJX' where id=4; -update noar tt set v0='WSDZ403' where id=4; -update noar ti set v0='WSDZ403' where id=4; -update noar tt set b2='T43AP9568KY3FQ8G0X36PF5RBIXM1Q' where id=4; -update noar ti set b2='T43AP9568KY3FQ8G0X36PF5RBIXM1Q' where id=4; -update noar tt set v0='P9QRJ5701B4D30VXF9W0WLG5P3OIIO02' where id=5; -update noar ti set v0='P9QRJ5701B4D30VXF9W0WLG5P3OIIO02' where id=5; -update noar tt set b0='OH5GQFHRM8Y7JPSAQQ' where id=5; -update noar ti set b0='OH5GQFHRM8Y7JPSAQQ' where id=5; -update noar tt set v0='F0ZSA5RB44XCL8KW368FKKQL0ZM2' where id=5; -update noar ti set v0='F0ZSA5RB44XCL8KW368FKKQL0ZM2' where id=5; -update noar tt set b1='1MYBRNTIDMYCWK8SELNPX7XJSN0K2T3' where id=5; -update noar ti set b1='1MYBRNTIDMYCWK8SELNPX7XJSN0K2T3' where id=5; -update noar tt set v0='KCLUN9ODJSDJULWYVLEA' where id=5; -update noar ti set v0='KCLUN9ODJSDJULWYVLEA' where id=5; -update noar tt set b2='FSMJM9AFL3QFXGP6YQHIHVMEZ6LI' where id=5; -update noar ti set b2='FSMJM9AFL3QFXGP6YQHIHVMEZ6LI' where id=5; -update noar tt set v0='QMJ3MHMYT9OY4CWYTB8I' where id=6; -update noar ti set v0='QMJ3MHMYT9OY4CWYTB8I' where id=6; -update noar tt set b0='CA1NN9R3EG2BQHPIA' where id=6; -update noar ti set b0='CA1NN9R3EG2BQHPIA' where id=6; -update noar tt set v0='M9CEK4R2IQ5CC6QCC2UP6CBZZK9OSEH' where id=6; -update noar ti set v0='M9CEK4R2IQ5CC6QCC2UP6CBZZK9OSEH' where id=6; -update noar tt set b1='LO61' where id=6; -update noar ti set b1='LO61' where id=6; -update noar tt set v0='VMGKHFCXMOCD0YGYG6RYNF' where id=6; -update noar ti set v0='VMGKHFCXMOCD0YGYG6RYNF' where id=6; -update noar tt set b2='9ZX80L1XM4CAYL0SJJI' where id=6; -update noar ti set b2='9ZX80L1XM4CAYL0SJJI' where id=6; -update noar tt set v0='B9LK2JKCVFZYA' where id=7; -update noar ti set v0='B9LK2JKCVFZYA' where id=7; -update noar tt set b0='ISO8IMFU5PYYHSYQ1LY6MQ6Y' where id=7; -update noar ti set b0='ISO8IMFU5PYYHSYQ1LY6MQ6Y' where id=7; -update noar tt set v0='DOIZXF7D' where id=7; -update noar ti set v0='DOIZXF7D' where id=7; -update noar tt set b1='ZG9X21TM07G9O1YYNAW' where id=7; -update noar ti set b1='ZG9X21TM07G9O1YYNAW' where id=7; -update noar tt set v0='KYR3INXS16NLC99XK7IODNBL' where id=7; -update noar ti set v0='KYR3INXS16NLC99XK7IODNBL' where id=7; -update noar tt set b2='TKOZMA0ZSK7IS1W7DFVZZ72' where id=7; -update noar ti set b2='TKOZMA0ZSK7IS1W7DFVZZ72' where id=7; -update noar tt set v0='NJX' where id=8; -update noar ti set v0='NJX' where id=8; -update noar tt set b0='472' where id=8; -update noar ti set b0='472' where id=8; -update noar tt set v0='401I8DPN0WPVS' where id=8; -update noar ti set v0='401I8DPN0WPVS' where id=8; -update noar tt set b1='1OEM4Z4Q7U4BRQJ56ZX38D6YVE' where id=8; -update noar ti set b1='1OEM4Z4Q7U4BRQJ56ZX38D6YVE' where id=8; -update noar tt set v0='6F6VM1ODPTHEQC861QN2APT3Z4JU0' where id=8; -update noar ti set v0='6F6VM1ODPTHEQC861QN2APT3Z4JU0' where id=8; -update noar tt set b2='BHK220T0ML55B0KVAAVVSTV7EXGYSOY' where id=8; -update noar ti set b2='BHK220T0ML55B0KVAAVVSTV7EXGYSOY' where id=8; -update noar tt set v0='Q97QHWA1Q' where id=9; -update noar ti set v0='Q97QHWA1Q' where id=9; -update noar tt set b0='8LM2W1' where id=9; -update noar ti set b0='8LM2W1' where id=9; -update noar tt set v0='WIZWGFDIWV' where id=9; -update noar ti set v0='WIZWGFDIWV' where id=9; -update noar tt set b1='4LIFZ7YDW17HONV5YLMNQR8T7HI' where id=9; -update noar ti set b1='4LIFZ7YDW17HONV5YLMNQR8T7HI' where id=9; -update noar tt set v0='WCNMCPSQKTHNEAY6UOMLNMJEA63LO' where id=9; -update noar ti set v0='WCNMCPSQKTHNEAY6UOMLNMJEA63LO' where id=9; -update noar tt set b2='9PCXMC44LON4AQTZMWKRXO931BLFTM' where id=9; -update noar ti set b2='9PCXMC44LON4AQTZMWKRXO931BLFTM' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 blob null, - b1 mediumblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='N5KJMZ1KDS4OJJX71QUYNWYU19HH' where id=1; -update noar ti set v0='N5KJMZ1KDS4OJJX71QUYNWYU19HH' where id=1; -update noar tt set b0='ERIADJNWSBR' where id=1; -update noar ti set b0='ERIADJNWSBR' where id=1; -update noar tt set v0='ORD4TEHMBZD6VWB9ZUPM83' where id=1; -update noar ti set v0='ORD4TEHMBZD6VWB9ZUPM83' where id=1; -update noar tt set b1='CR4QHT2FNSS23' where id=1; -update noar ti set b1='CR4QHT2FNSS23' where id=1; -update noar tt set v0='WP' where id=1; -update noar ti set v0='WP' where id=1; -update noar tt set b2='JCHFLPB1VBB27B' where id=1; -update noar ti set b2='JCHFLPB1VBB27B' where id=1; -update noar tt set v0='A3G' where id=2; -update noar ti set v0='A3G' where id=2; -update noar tt set b0='Z8NQFOH7D6K' where id=2; -update noar ti set b0='Z8NQFOH7D6K' where id=2; -update noar tt set v0='KS72XRPIRXJDEND59O463JY' where id=2; -update noar ti set v0='KS72XRPIRXJDEND59O463JY' where id=2; -update noar tt set b1='KHACXVRCJE5HRB6N5P9ZQ2JTTYHZ8Q9' where id=2; -update noar ti set b1='KHACXVRCJE5HRB6N5P9ZQ2JTTYHZ8Q9' where id=2; -update noar tt set v0='81FGKA05Y7D31P13H' where id=2; -update noar ti set v0='81FGKA05Y7D31P13H' where id=2; -update noar tt set b2='2PZKYZF4MSHAPDPBU3' where id=2; -update noar ti set b2='2PZKYZF4MSHAPDPBU3' where id=2; -update noar tt set v0='F6PA8' where id=3; -update noar ti set v0='F6PA8' where id=3; -update noar tt set b0='GH4J94IV' where id=3; -update noar ti set b0='GH4J94IV' where id=3; -update noar tt set v0='EDU3VNBQSG9CRMDM8S0A1WQYMYJCWII' where id=3; -update noar ti set v0='EDU3VNBQSG9CRMDM8S0A1WQYMYJCWII' where id=3; -update noar tt set b1='1I6S9B' where id=3; -update noar ti set b1='1I6S9B' where id=3; -update noar tt set v0='7Y6NRB96JB97' where id=3; -update noar ti set v0='7Y6NRB96JB97' where id=3; -update noar tt set b2='B33LA4YBDIJ7MOACCDW1Z' where id=3; -update noar ti set b2='B33LA4YBDIJ7MOACCDW1Z' where id=3; -update noar tt set v0='5SL2JK24Z' where id=4; -update noar ti set v0='5SL2JK24Z' where id=4; -update noar tt set b0='JSNCEDBH3P0FO3K4LF1PWG07HR33O' where id=4; -update noar ti set b0='JSNCEDBH3P0FO3K4LF1PWG07HR33O' where id=4; -update noar tt set v0='FTGZ620E59NGNVA1' where id=4; -update noar ti set v0='FTGZ620E59NGNVA1' where id=4; -update noar tt set b1='8E5JR8KU95HZC73IMJSP09HQZ' where id=4; -update noar ti set b1='8E5JR8KU95HZC73IMJSP09HQZ' where id=4; -update noar tt set v0='NAOODGFOOQ8IPIPSDEF2GPGN11U' where id=4; -update noar ti set v0='NAOODGFOOQ8IPIPSDEF2GPGN11U' where id=4; -update noar tt set b2='RY8' where id=4; -update noar ti set b2='RY8' where id=4; -update noar tt set v0='AZ1VPEZU3Z2T5JQIX4Q9DVGFBZEQI21N' where id=5; -update noar ti set v0='AZ1VPEZU3Z2T5JQIX4Q9DVGFBZEQI21N' where id=5; -update noar tt set b0='2BWV68W' where id=5; -update noar ti set b0='2BWV68W' where id=5; -update noar tt set v0='DBC76KL8TMHZV1GVPQ' where id=5; -update noar ti set v0='DBC76KL8TMHZV1GVPQ' where id=5; -update noar tt set b1='HGBHO0BDZ68C88XA03MPAQY9X' where id=5; -update noar ti set b1='HGBHO0BDZ68C88XA03MPAQY9X' where id=5; -update noar tt set v0='R8DBA8L' where id=5; -update noar ti set v0='R8DBA8L' where id=5; -update noar tt set b2='31A4I' where id=5; -update noar ti set b2='31A4I' where id=5; -update noar tt set v0='WA636V15B9GDCI1ITU2G7' where id=6; -update noar ti set v0='WA636V15B9GDCI1ITU2G7' where id=6; -update noar tt set b0='T0F9Y2OK7LSGSJSQWAR' where id=6; -update noar ti set b0='T0F9Y2OK7LSGSJSQWAR' where id=6; -update noar tt set v0='DL9C99TBK48600UA' where id=6; -update noar ti set v0='DL9C99TBK48600UA' where id=6; -update noar tt set b1='VSPXKBDP4LRLNWBX' where id=6; -update noar ti set b1='VSPXKBDP4LRLNWBX' where id=6; -update noar tt set v0='XC6BG2Z82OR1Q2C71CBVNXVIXTUVGDH' where id=6; -update noar ti set v0='XC6BG2Z82OR1Q2C71CBVNXVIXTUVGDH' where id=6; -update noar tt set b2='99PV51V6SRK8LPLFZ4S5V88RE2SC' where id=6; -update noar ti set b2='99PV51V6SRK8LPLFZ4S5V88RE2SC' where id=6; -update noar tt set v0='MJJH0NSVS8ZAN3MB3MG9S8P5KZOMQ' where id=7; -update noar ti set v0='MJJH0NSVS8ZAN3MB3MG9S8P5KZOMQ' where id=7; -update noar tt set b0='HO0CC' where id=7; -update noar ti set b0='HO0CC' where id=7; -update noar tt set v0='5611U' where id=7; -update noar ti set v0='5611U' where id=7; -update noar tt set b1='O' where id=7; -update noar ti set b1='O' where id=7; -update noar tt set v0='17YU2' where id=7; -update noar ti set v0='17YU2' where id=7; -update noar tt set b2='WA4' where id=7; -update noar ti set b2='WA4' where id=7; -update noar tt set v0='402ZOE20KD0GOYHOMNQ' where id=8; -update noar ti set v0='402ZOE20KD0GOYHOMNQ' where id=8; -update noar tt set b0='AKQTYVEO3O51208L74FY1GEMGK6QRA' where id=8; -update noar ti set b0='AKQTYVEO3O51208L74FY1GEMGK6QRA' where id=8; -update noar tt set v0='EHJAQJ' where id=8; -update noar ti set v0='EHJAQJ' where id=8; -update noar tt set b1='WSN7JX9S5SNAX05' where id=8; -update noar ti set b1='WSN7JX9S5SNAX05' where id=8; -update noar tt set v0='KD3C1TUP1481SXP1JNR' where id=8; -update noar ti set v0='KD3C1TUP1481SXP1JNR' where id=8; -update noar tt set b2='5TK1C32O1A' where id=8; -update noar ti set b2='5TK1C32O1A' where id=8; -update noar tt set v0='BQOUTX5LM5OU6JBBMNDFTGS7XY6ZHVEV' where id=9; -update noar ti set v0='BQOUTX5LM5OU6JBBMNDFTGS7XY6ZHVEV' where id=9; -update noar tt set b0='SH' where id=9; -update noar ti set b0='SH' where id=9; -update noar tt set v0='D2V98LQTQD0DWC4C' where id=9; -update noar ti set v0='D2V98LQTQD0DWC4C' where id=9; -update noar tt set b1='FSZ3HRXXNZQ6XY1U4LW7DGKM' where id=9; -update noar ti set b1='FSZ3HRXXNZQ6XY1U4LW7DGKM' where id=9; -update noar tt set v0='8NM652E0VAO4H6FV23IHDKTWY' where id=9; -update noar ti set v0='8NM652E0VAO4H6FV23IHDKTWY' where id=9; -update noar tt set b2='3OC5BFRUE0W1EG0U0N5BCNHG49102N63' where id=9; -update noar ti set b2='3OC5BFRUE0W1EG0U0N5BCNHG49102N63' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 blob null, - b1 mediumblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='SW2PV7VHXKWNJ23MNV5IX4YGGDY86Z' where id=1; -update noar ti set v0='SW2PV7VHXKWNJ23MNV5IX4YGGDY86Z' where id=1; -update noar tt set b0='F8H2' where id=1; -update noar ti set b0='F8H2' where id=1; -update noar tt set v0='17H7X' where id=1; -update noar ti set v0='17H7X' where id=1; -update noar tt set b1='EZOUM34' where id=1; -update noar ti set b1='EZOUM34' where id=1; -update noar tt set v0='AC10Y6VLZ6JN70CRMC1HY2ZHTGB491' where id=1; -update noar ti set v0='AC10Y6VLZ6JN70CRMC1HY2ZHTGB491' where id=1; -update noar tt set b2='NHAXZIMNOJ0U0SNF' where id=1; -update noar ti set b2='NHAXZIMNOJ0U0SNF' where id=1; -update noar tt set v0='B0KZHQGF6CYR03RY1' where id=2; -update noar ti set v0='B0KZHQGF6CYR03RY1' where id=2; -update noar tt set b0='BL797J4RQ9452NIS1LF' where id=2; -update noar ti set b0='BL797J4RQ9452NIS1LF' where id=2; -update noar tt set v0='YPBYOXK63Y9UG1ITKTRLIJL' where id=2; -update noar ti set v0='YPBYOXK63Y9UG1ITKTRLIJL' where id=2; -update noar tt set b1='4OWQBA84VV' where id=2; -update noar ti set b1='4OWQBA84VV' where id=2; -update noar tt set v0='M3QOBSZY9B9GOKJ' where id=2; -update noar ti set v0='M3QOBSZY9B9GOKJ' where id=2; -update noar tt set b2='LE9462VD99GUBWG03177F' where id=2; -update noar ti set b2='LE9462VD99GUBWG03177F' where id=2; -update noar tt set v0='WIJC872X7EQJY9B7502OKDI' where id=3; -update noar ti set v0='WIJC872X7EQJY9B7502OKDI' where id=3; -update noar tt set b0='6CHA0I7H36CQIQFBGEOR9M76' where id=3; -update noar ti set b0='6CHA0I7H36CQIQFBGEOR9M76' where id=3; -update noar tt set v0='RV94JD6BIAGURU9HE1KO5HY9' where id=3; -update noar ti set v0='RV94JD6BIAGURU9HE1KO5HY9' where id=3; -update noar tt set b1='E13OL5JNLHVRLYXT7V28ZZNHMSJ7' where id=3; -update noar ti set b1='E13OL5JNLHVRLYXT7V28ZZNHMSJ7' where id=3; -update noar tt set v0='DEDP674JVTGL' where id=3; -update noar ti set v0='DEDP674JVTGL' where id=3; -update noar tt set b2='OWXM3KD' where id=3; -update noar ti set b2='OWXM3KD' where id=3; -update noar tt set v0='IHH2ZNP2XT' where id=4; -update noar ti set v0='IHH2ZNP2XT' where id=4; -update noar tt set b0='BQMMFEFAS8AQ' where id=4; -update noar ti set b0='BQMMFEFAS8AQ' where id=4; -update noar tt set v0='0UB1YYL5SJALUI' where id=4; -update noar ti set v0='0UB1YYL5SJALUI' where id=4; -update noar tt set b1='ZNL7NF3V1BX10YGQ3ADPIDE2I4A3O' where id=4; -update noar ti set b1='ZNL7NF3V1BX10YGQ3ADPIDE2I4A3O' where id=4; -update noar tt set v0='WYRXJ25ESZOQ5CUDS1LX' where id=4; -update noar ti set v0='WYRXJ25ESZOQ5CUDS1LX' where id=4; -update noar tt set b2='5ID2J1FTROF2BBYHO9P0M34' where id=4; -update noar ti set b2='5ID2J1FTROF2BBYHO9P0M34' where id=4; -update noar tt set v0='B' where id=5; -update noar ti set v0='B' where id=5; -update noar tt set b0='7V08' where id=5; -update noar ti set b0='7V08' where id=5; -update noar tt set v0='IUU93QFVD2V3IFG' where id=5; -update noar ti set v0='IUU93QFVD2V3IFG' where id=5; -update noar tt set b1='PI4MJIM991QXVXGHXYXNQTTPXSUGUMH' where id=5; -update noar ti set b1='PI4MJIM991QXVXGHXYXNQTTPXSUGUMH' where id=5; -update noar tt set v0='QJUMN7YWH8MRUHNQ39K7U7G0G7ZS' where id=5; -update noar ti set v0='QJUMN7YWH8MRUHNQ39K7U7G0G7ZS' where id=5; -update noar tt set b2='5CBIQ1H9XNHU' where id=5; -update noar ti set b2='5CBIQ1H9XNHU' where id=5; -update noar tt set v0='8XSK4CG' where id=6; -update noar ti set v0='8XSK4CG' where id=6; -update noar tt set b0='QJRXEQPBIAJEFCEAIVFK63DZCIB6Q' where id=6; -update noar ti set b0='QJRXEQPBIAJEFCEAIVFK63DZCIB6Q' where id=6; -update noar tt set v0='4SI2HE185PFQ9F832CUSS064BVFIH9VN' where id=6; -update noar ti set v0='4SI2HE185PFQ9F832CUSS064BVFIH9VN' where id=6; -update noar tt set b1='RIG8HQV1OCET8XRFGOTX8K' where id=6; -update noar ti set b1='RIG8HQV1OCET8XRFGOTX8K' where id=6; -update noar tt set v0='PPZJ1SVAFD45VGRA6T1GTZN6WQ3' where id=6; -update noar ti set v0='PPZJ1SVAFD45VGRA6T1GTZN6WQ3' where id=6; -update noar tt set b2='VORIRPQL6YTQU3' where id=6; -update noar ti set b2='VORIRPQL6YTQU3' where id=6; -update noar tt set v0='4L' where id=7; -update noar ti set v0='4L' where id=7; -update noar tt set b0='1D' where id=7; -update noar ti set b0='1D' where id=7; -update noar tt set v0='X68J2K7YHY44O8KP' where id=7; -update noar ti set v0='X68J2K7YHY44O8KP' where id=7; -update noar tt set b1='B1TFG4RH04TMLGINF6MN7V21PCE' where id=7; -update noar ti set b1='B1TFG4RH04TMLGINF6MN7V21PCE' where id=7; -update noar tt set v0='DAK2H2CANSHHZF' where id=7; -update noar ti set v0='DAK2H2CANSHHZF' where id=7; -update noar tt set b2='MRRWI' where id=7; -update noar ti set b2='MRRWI' where id=7; -update noar tt set v0='47029PLPUXTMO3' where id=8; -update noar ti set v0='47029PLPUXTMO3' where id=8; -update noar tt set b0='PU8RWT88B49Y7JS2MJGN3ZP8IF8ZP' where id=8; -update noar ti set b0='PU8RWT88B49Y7JS2MJGN3ZP8IF8ZP' where id=8; -update noar tt set v0='YLUZAQ3K5187UVSJ2DRNGQHIG09' where id=8; -update noar ti set v0='YLUZAQ3K5187UVSJ2DRNGQHIG09' where id=8; -update noar tt set b1='213NHTTL3XU5CEALLCL9ASL6ZRD' where id=8; -update noar ti set b1='213NHTTL3XU5CEALLCL9ASL6ZRD' where id=8; -update noar tt set v0='1JUWQCLVPCFZ3NWIOL6HFEGDTHAFMJZY' where id=8; -update noar ti set v0='1JUWQCLVPCFZ3NWIOL6HFEGDTHAFMJZY' where id=8; -update noar tt set b2='WVQFOJ2M' where id=8; -update noar ti set b2='WVQFOJ2M' where id=8; -update noar tt set v0='QVB7ZL6KW39JAUAVVIEW' where id=9; -update noar ti set v0='QVB7ZL6KW39JAUAVVIEW' where id=9; -update noar tt set b0='NZC789TBRYH9UEARWEEW29JDB' where id=9; -update noar ti set b0='NZC789TBRYH9UEARWEEW29JDB' where id=9; -update noar tt set v0='V' where id=9; -update noar ti set v0='V' where id=9; -update noar tt set b1='VLNMWZEIS8N' where id=9; -update noar ti set b1='VLNMWZEIS8N' where id=9; -update noar tt set v0='UBRT' where id=9; -update noar ti set v0='UBRT' where id=9; -update noar tt set b2='2KS' where id=9; -update noar ti set b2='2KS' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 blob not null, - b1 mediumblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='6D' where id=1; -update noar ti set v0='6D' where id=1; -update noar tt set b0='CZJP6U7EQG1VS0M' where id=1; -update noar ti set b0='CZJP6U7EQG1VS0M' where id=1; -update noar tt set v0='TE0M8ZPFM5N1ECJ16V' where id=1; -update noar ti set v0='TE0M8ZPFM5N1ECJ16V' where id=1; -update noar tt set b1='IR3QPVQITLAQZKNP4EURIO9VDD' where id=1; -update noar ti set b1='IR3QPVQITLAQZKNP4EURIO9VDD' where id=1; -update noar tt set v0='XICTDK24N8LCJEKUSV0I9A31FZK' where id=1; -update noar ti set v0='XICTDK24N8LCJEKUSV0I9A31FZK' where id=1; -update noar tt set b2='87XEHIEXPU1ZRXXZ8A1SUON0J6FFE5Z' where id=1; -update noar ti set b2='87XEHIEXPU1ZRXXZ8A1SUON0J6FFE5Z' where id=1; -update noar tt set v0='TSKU5P3DH09' where id=2; -update noar ti set v0='TSKU5P3DH09' where id=2; -update noar tt set b0='8WAKINKY' where id=2; -update noar ti set b0='8WAKINKY' where id=2; -update noar tt set v0='GHAVEO37WC2DVU457H8' where id=2; -update noar ti set v0='GHAVEO37WC2DVU457H8' where id=2; -update noar tt set b1='KZIEEZK6O10DLXXM3VT34OZ740EF54ZS' where id=2; -update noar ti set b1='KZIEEZK6O10DLXXM3VT34OZ740EF54ZS' where id=2; -update noar tt set v0='0X5GW' where id=2; -update noar ti set v0='0X5GW' where id=2; -update noar tt set b2='T1FIJ98O85PRWJKKU81BTM' where id=2; -update noar ti set b2='T1FIJ98O85PRWJKKU81BTM' where id=2; -update noar tt set v0='PT8THOOEEYT' where id=3; -update noar ti set v0='PT8THOOEEYT' where id=3; -update noar tt set b0='0U985NFT6MZ7EQ8BGEIAD' where id=3; -update noar ti set b0='0U985NFT6MZ7EQ8BGEIAD' where id=3; -update noar tt set v0='MZ' where id=3; -update noar ti set v0='MZ' where id=3; -update noar tt set b1='FQI0VEJ' where id=3; -update noar ti set b1='FQI0VEJ' where id=3; -update noar tt set v0='AN4YWWXOUIH7SBVK5XCRRZFG055D611Z' where id=3; -update noar ti set v0='AN4YWWXOUIH7SBVK5XCRRZFG055D611Z' where id=3; -update noar tt set b2='5U' where id=3; -update noar ti set b2='5U' where id=3; -update noar tt set v0='8I' where id=4; -update noar ti set v0='8I' where id=4; -update noar tt set b0='KM8NE8283ULA6DSASU5P4RFX8H6L9V' where id=4; -update noar ti set b0='KM8NE8283ULA6DSASU5P4RFX8H6L9V' where id=4; -update noar tt set v0='ERIS9HADIZWSBCBTSQZOEXQFKI' where id=4; -update noar ti set v0='ERIS9HADIZWSBCBTSQZOEXQFKI' where id=4; -update noar tt set b1='2SZJWI94RJLNS' where id=4; -update noar ti set b1='2SZJWI94RJLNS' where id=4; -update noar tt set v0='USWCFOEDAHHR' where id=4; -update noar ti set v0='USWCFOEDAHHR' where id=4; -update noar tt set b2='PPF3GR12GMF6OJDPGI8E0PPYKZCQ' where id=4; -update noar ti set b2='PPF3GR12GMF6OJDPGI8E0PPYKZCQ' where id=4; -update noar tt set v0='ROCN1XQKX1MBYHZXDUJSSB87UDEY8CR' where id=5; -update noar ti set v0='ROCN1XQKX1MBYHZXDUJSSB87UDEY8CR' where id=5; -update noar tt set b0='NV0GFI' where id=5; -update noar ti set b0='NV0GFI' where id=5; -update noar tt set v0='N8T87BRHF3Q3SQCR0W' where id=5; -update noar ti set v0='N8T87BRHF3Q3SQCR0W' where id=5; -update noar tt set b1='XXJBEY5Z3UMGHOR7X45K8M' where id=5; -update noar ti set b1='XXJBEY5Z3UMGHOR7X45K8M' where id=5; -update noar tt set v0='P98TEYUOP3W60HGNW7V1EC8' where id=5; -update noar ti set v0='P98TEYUOP3W60HGNW7V1EC8' where id=5; -update noar tt set b2='3IYH0F0KMJJKZ621RJAAC6ZLSV' where id=5; -update noar ti set b2='3IYH0F0KMJJKZ621RJAAC6ZLSV' where id=5; -update noar tt set v0='GAAK6QY2S14UAR' where id=6; -update noar ti set v0='GAAK6QY2S14UAR' where id=6; -update noar tt set b0='RMH4M0WQ330UF' where id=6; -update noar ti set b0='RMH4M0WQ330UF' where id=6; -update noar tt set v0='3CA2NADO' where id=6; -update noar ti set v0='3CA2NADO' where id=6; -update noar tt set b1='6TDHSCS7K27JXY88C9P35JO' where id=6; -update noar ti set b1='6TDHSCS7K27JXY88C9P35JO' where id=6; -update noar tt set v0='JS9H6JEL4JUG9EO1YJ' where id=6; -update noar ti set v0='JS9H6JEL4JUG9EO1YJ' where id=6; -update noar tt set b2='7SPM' where id=6; -update noar ti set b2='7SPM' where id=6; -update noar tt set v0='15YPH9FN2MBHPI' where id=7; -update noar ti set v0='15YPH9FN2MBHPI' where id=7; -update noar tt set b0='FU32E5KY4H96Y96J45LMKL' where id=7; -update noar ti set b0='FU32E5KY4H96Y96J45LMKL' where id=7; -update noar tt set v0='UR4ZFQI36WJ' where id=7; -update noar ti set v0='UR4ZFQI36WJ' where id=7; -update noar tt set b1='MIWL503XT51Q1BZOS9JD45JGI2EEJQJ' where id=7; -update noar ti set b1='MIWL503XT51Q1BZOS9JD45JGI2EEJQJ' where id=7; -update noar tt set v0='H1VNR2' where id=7; -update noar ti set v0='H1VNR2' where id=7; -update noar tt set b2='EC' where id=7; -update noar ti set b2='EC' where id=7; -update noar tt set v0='ELEV9QVTWUGZAANIBJUVB6' where id=8; -update noar ti set v0='ELEV9QVTWUGZAANIBJUVB6' where id=8; -update noar tt set b0='1TYUDZGJTV1HFLIBSBNNJX5' where id=8; -update noar ti set b0='1TYUDZGJTV1HFLIBSBNNJX5' where id=8; -update noar tt set v0='PO1U6484WLGTWW' where id=8; -update noar ti set v0='PO1U6484WLGTWW' where id=8; -update noar tt set b1='MPEH9668VLH4Z70DYZ5ICFJUE7RJJM' where id=8; -update noar ti set b1='MPEH9668VLH4Z70DYZ5ICFJUE7RJJM' where id=8; -update noar tt set v0='Q2EBTHWBH9AVBYG27DNEV69' where id=8; -update noar ti set v0='Q2EBTHWBH9AVBYG27DNEV69' where id=8; -update noar tt set b2='BUE1Y8' where id=8; -update noar ti set b2='BUE1Y8' where id=8; -update noar tt set v0='8716G' where id=9; -update noar ti set v0='8716G' where id=9; -update noar tt set b0='7B25VLGCY765O8X8QK1GZ01WP' where id=9; -update noar ti set b0='7B25VLGCY765O8X8QK1GZ01WP' where id=9; -update noar tt set v0='J47OLD' where id=9; -update noar ti set v0='J47OLD' where id=9; -update noar tt set b1='CNC6F3YOZM0ZBJQXNYCN1SK6B' where id=9; -update noar ti set b1='CNC6F3YOZM0ZBJQXNYCN1SK6B' where id=9; -update noar tt set v0='OUPFB1GV82TGS0R' where id=9; -update noar ti set v0='OUPFB1GV82TGS0R' where id=9; -update noar tt set b2='5OV5SO869OHGPBH3EEU1STWA7223TWID' where id=9; -update noar ti set b2='5OV5SO869OHGPBH3EEU1STWA7223TWID' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 blob not null, - b1 mediumblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='BQIG0V48MQ' where id=1; -update noar ti set v0='BQIG0V48MQ' where id=1; -update noar tt set b0='U' where id=1; -update noar ti set b0='U' where id=1; -update noar tt set v0='KJ70PJMRUE9CG3QVAIWZCHCB94SNP' where id=1; -update noar ti set v0='KJ70PJMRUE9CG3QVAIWZCHCB94SNP' where id=1; -update noar tt set b1='7BVHTXKW0FGX5AH1QBZIRSB4H45CB8D' where id=1; -update noar ti set b1='7BVHTXKW0FGX5AH1QBZIRSB4H45CB8D' where id=1; -update noar tt set v0='UKZOK7WDUMP4CHYTGFA693ISOCQ5SJR' where id=1; -update noar ti set v0='UKZOK7WDUMP4CHYTGFA693ISOCQ5SJR' where id=1; -update noar tt set b2='LSVX4CP3AFZ1MJRPJ1M03345OBN7056S' where id=1; -update noar ti set b2='LSVX4CP3AFZ1MJRPJ1M03345OBN7056S' where id=1; -update noar tt set v0='IY22HYGFBU2J91G4RVA7L' where id=2; -update noar ti set v0='IY22HYGFBU2J91G4RVA7L' where id=2; -update noar tt set b0='96TX' where id=2; -update noar ti set b0='96TX' where id=2; -update noar tt set v0='6F26Y3SF30AORMCLT3P0QBW' where id=2; -update noar ti set v0='6F26Y3SF30AORMCLT3P0QBW' where id=2; -update noar tt set b1='37' where id=2; -update noar ti set b1='37' where id=2; -update noar tt set v0='GM1VUV4IE2Z8TSLDKPIC8O3LEE' where id=2; -update noar ti set v0='GM1VUV4IE2Z8TSLDKPIC8O3LEE' where id=2; -update noar tt set b2='7XTV' where id=2; -update noar ti set b2='7XTV' where id=2; -update noar tt set v0='2OJDOPU4W5U2QAAGQS' where id=3; -update noar ti set v0='2OJDOPU4W5U2QAAGQS' where id=3; -update noar tt set b0='STO31HDZ9' where id=3; -update noar ti set b0='STO31HDZ9' where id=3; -update noar tt set v0='BEV9C295UUTGU6JKSSXP0RTHFM' where id=3; -update noar ti set v0='BEV9C295UUTGU6JKSSXP0RTHFM' where id=3; -update noar tt set b1='3IS6GS' where id=3; -update noar ti set b1='3IS6GS' where id=3; -update noar tt set v0='KXMB3YLGU5Q08Q0K2GRKYX' where id=3; -update noar ti set v0='KXMB3YLGU5Q08Q0K2GRKYX' where id=3; -update noar tt set b2='26PKN10' where id=3; -update noar ti set b2='26PKN10' where id=3; -update noar tt set v0='D429CLUHMO8ZI4HY4NX0QM7BGV11' where id=4; -update noar ti set v0='D429CLUHMO8ZI4HY4NX0QM7BGV11' where id=4; -update noar tt set b0='QBDPZTZU3S3F' where id=4; -update noar ti set b0='QBDPZTZU3S3F' where id=4; -update noar tt set v0='J282VL9NUXXG4VA933TZQ' where id=4; -update noar ti set v0='J282VL9NUXXG4VA933TZQ' where id=4; -update noar tt set b1='MBFGCOZQJGZX2L7E2MEOOR6VZVNJW' where id=4; -update noar ti set b1='MBFGCOZQJGZX2L7E2MEOOR6VZVNJW' where id=4; -update noar tt set v0='ZWXY974S38FMBFV' where id=4; -update noar ti set v0='ZWXY974S38FMBFV' where id=4; -update noar tt set b2='XHU6OPXEQ080X266J04A0KH' where id=4; -update noar ti set b2='XHU6OPXEQ080X266J04A0KH' where id=4; -update noar tt set v0='1M6B87GOIVIPCSZ1F9' where id=5; -update noar ti set v0='1M6B87GOIVIPCSZ1F9' where id=5; -update noar tt set b0='4WLW2SH71KNBDY3QIX2EYPKGW' where id=5; -update noar ti set b0='4WLW2SH71KNBDY3QIX2EYPKGW' where id=5; -update noar tt set v0='R55W4ZB' where id=5; -update noar ti set v0='R55W4ZB' where id=5; -update noar tt set b1='E' where id=5; -update noar ti set b1='E' where id=5; -update noar tt set v0='O5UJTSY' where id=5; -update noar ti set v0='O5UJTSY' where id=5; -update noar tt set b2='ECGI50WCOC6QZ5GIRKRRD9DBZSJK' where id=5; -update noar ti set b2='ECGI50WCOC6QZ5GIRKRRD9DBZSJK' where id=5; -update noar tt set v0='X60PKVKDN7SUFYB' where id=6; -update noar ti set v0='X60PKVKDN7SUFYB' where id=6; -update noar tt set b0='V06T6G9KYONYW7S5YI2' where id=6; -update noar ti set b0='V06T6G9KYONYW7S5YI2' where id=6; -update noar tt set v0='EHTX6L1Q087I8QD13YTLC99F' where id=6; -update noar ti set v0='EHTX6L1Q087I8QD13YTLC99F' where id=6; -update noar tt set b1='G520YS1MHUT7O11WYC' where id=6; -update noar ti set b1='G520YS1MHUT7O11WYC' where id=6; -update noar tt set v0='MPOIMTQBBJGX0RX6RTO1Z0O' where id=6; -update noar ti set v0='MPOIMTQBBJGX0RX6RTO1Z0O' where id=6; -update noar tt set b2='38I' where id=6; -update noar ti set b2='38I' where id=6; -update noar tt set v0='01VEGNGP53I4DT3XWTFO4802RW' where id=7; -update noar ti set v0='01VEGNGP53I4DT3XWTFO4802RW' where id=7; -update noar tt set b0='L5C75GGHCZ9SWIJVTAXTI' where id=7; -update noar ti set b0='L5C75GGHCZ9SWIJVTAXTI' where id=7; -update noar tt set v0='H' where id=7; -update noar ti set v0='H' where id=7; -update noar tt set b1='JRXS4NN4KWTDW3010HQZA2JFS' where id=7; -update noar ti set b1='JRXS4NN4KWTDW3010HQZA2JFS' where id=7; -update noar tt set v0='XKGDKH6AO98944HFOBH' where id=7; -update noar ti set v0='XKGDKH6AO98944HFOBH' where id=7; -update noar tt set b2='NXG04X' where id=7; -update noar ti set b2='NXG04X' where id=7; -update noar tt set v0='8T6K0ZTSNZMZOQVT6QE' where id=8; -update noar ti set v0='8T6K0ZTSNZMZOQVT6QE' where id=8; -update noar tt set b0='EBCF1LXUI3BW7ZG9' where id=8; -update noar ti set b0='EBCF1LXUI3BW7ZG9' where id=8; -update noar tt set v0='4H93DK64' where id=8; -update noar ti set v0='4H93DK64' where id=8; -update noar tt set b1='TY5085JCOHSIURQRINI1' where id=8; -update noar ti set b1='TY5085JCOHSIURQRINI1' where id=8; -update noar tt set v0='EG4DI9M18EIDKLSI3ACB3Y6MW4YYUJ' where id=8; -update noar ti set v0='EG4DI9M18EIDKLSI3ACB3Y6MW4YYUJ' where id=8; -update noar tt set b2='DXKYOVX2P4PF' where id=8; -update noar ti set b2='DXKYOVX2P4PF' where id=8; -update noar tt set v0='5W0' where id=9; -update noar ti set v0='5W0' where id=9; -update noar tt set b0='V002D73J66' where id=9; -update noar ti set b0='V002D73J66' where id=9; -update noar tt set v0='VEX5KQOZYNC1NJ1YJHXEEG92W199ACHS' where id=9; -update noar ti set v0='VEX5KQOZYNC1NJ1YJHXEEG92W199ACHS' where id=9; -update noar tt set b1='QSIBF6VC44RR6J3THXL55QDN9ISGAHX0' where id=9; -update noar ti set b1='QSIBF6VC44RR6J3THXL55QDN9ISGAHX0' where id=9; -update noar tt set v0='AUMWUDDXSX7751FZ292NOZ7GK3C' where id=9; -update noar ti set v0='AUMWUDDXSX7751FZ292NOZ7GK3C' where id=9; -update noar tt set b2='K021K' where id=9; -update noar ti set b2='K021K' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 blob null, - b1 mediumblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='0WE13K3D0WQ79RMKLJB94AVWB1' where id=1; -update noar ti set v0='0WE13K3D0WQ79RMKLJB94AVWB1' where id=1; -update noar tt set b0='WTPMT9GNO2SX4L704AO8' where id=1; -update noar ti set b0='WTPMT9GNO2SX4L704AO8' where id=1; -update noar tt set v0='UPP6' where id=1; -update noar ti set v0='UPP6' where id=1; -update noar tt set b1='5SNSUW0D35GFQL4YVJMA5KMXE' where id=1; -update noar ti set b1='5SNSUW0D35GFQL4YVJMA5KMXE' where id=1; -update noar tt set v0='791AWJYXW0OLL9A6BUPDU' where id=1; -update noar ti set v0='791AWJYXW0OLL9A6BUPDU' where id=1; -update noar tt set b2='6N0TMADS' where id=1; -update noar ti set b2='6N0TMADS' where id=1; -update noar tt set v0='0UPUGWCOPUTSO' where id=2; -update noar ti set v0='0UPUGWCOPUTSO' where id=2; -update noar tt set b0='BHW81UO6TMVGGTLB0V8CB56VH' where id=2; -update noar ti set b0='BHW81UO6TMVGGTLB0V8CB56VH' where id=2; -update noar tt set v0='L1Q' where id=2; -update noar ti set v0='L1Q' where id=2; -update noar tt set b1='DKQK78FKYWKL3MNE4WLS' where id=2; -update noar ti set b1='DKQK78FKYWKL3MNE4WLS' where id=2; -update noar tt set v0='ZMZ3ZCRE6DU0LESKX7OFE76CMUS' where id=2; -update noar ti set v0='ZMZ3ZCRE6DU0LESKX7OFE76CMUS' where id=2; -update noar tt set b2='U5YYORW586TJJYAHMSZZ83' where id=2; -update noar ti set b2='U5YYORW586TJJYAHMSZZ83' where id=2; -update noar tt set v0='TK2MS' where id=3; -update noar ti set v0='TK2MS' where id=3; -update noar tt set b0='RT6ZI1IRXFAVG' where id=3; -update noar ti set b0='RT6ZI1IRXFAVG' where id=3; -update noar tt set v0='DNHVUO348NNKBURNBZJ2XTSOTFBG11Q' where id=3; -update noar ti set v0='DNHVUO348NNKBURNBZJ2XTSOTFBG11Q' where id=3; -update noar tt set b1='59OBESBU4ZLIUM9NUU4BXQP' where id=3; -update noar ti set b1='59OBESBU4ZLIUM9NUU4BXQP' where id=3; -update noar tt set v0='MJ5FY2R8BQ2V9WZNEZGE82LJ87JZPWC4' where id=3; -update noar ti set v0='MJ5FY2R8BQ2V9WZNEZGE82LJ87JZPWC4' where id=3; -update noar tt set b2='9CBAXDODBKZCTJLVI2K2' where id=3; -update noar ti set b2='9CBAXDODBKZCTJLVI2K2' where id=3; -update noar tt set v0='LJG7HWD8Z5SM0F8R4O79UPED' where id=4; -update noar ti set v0='LJG7HWD8Z5SM0F8R4O79UPED' where id=4; -update noar tt set b0='XQ3VBWD93A2IDW9' where id=4; -update noar ti set b0='XQ3VBWD93A2IDW9' where id=4; -update noar tt set v0='I5X' where id=4; -update noar ti set v0='I5X' where id=4; -update noar tt set b1='FGT79W7UXB5U35CWY' where id=4; -update noar ti set b1='FGT79W7UXB5U35CWY' where id=4; -update noar tt set v0='5JWPVJDMJI7LEDHPMI1RA5FA6G5EGHEB' where id=4; -update noar ti set v0='5JWPVJDMJI7LEDHPMI1RA5FA6G5EGHEB' where id=4; -update noar tt set b2='GL7SJT' where id=4; -update noar ti set b2='GL7SJT' where id=4; -update noar tt set v0='NDMJXT8BQVZ0GKBD0RJ4E8KZL' where id=5; -update noar ti set v0='NDMJXT8BQVZ0GKBD0RJ4E8KZL' where id=5; -update noar tt set b0='JJHB9BLEFUUJYBNEEZALJQ5R17' where id=5; -update noar ti set b0='JJHB9BLEFUUJYBNEEZALJQ5R17' where id=5; -update noar tt set v0='2BLNFM2N6MNU2T' where id=5; -update noar ti set v0='2BLNFM2N6MNU2T' where id=5; -update noar tt set b1='P6YDETIJZ015' where id=5; -update noar ti set b1='P6YDETIJZ015' where id=5; -update noar tt set v0='7OD1C0FVLAI2J87OBF1TY39H' where id=5; -update noar ti set v0='7OD1C0FVLAI2J87OBF1TY39H' where id=5; -update noar tt set b2='NYMBT1' where id=5; -update noar ti set b2='NYMBT1' where id=5; -update noar tt set v0='T0LQILREIUB0OA9T2U7A' where id=6; -update noar ti set v0='T0LQILREIUB0OA9T2U7A' where id=6; -update noar tt set b0='2' where id=6; -update noar ti set b0='2' where id=6; -update noar tt set v0='QQM4507UPABZ30K7OG' where id=6; -update noar ti set v0='QQM4507UPABZ30K7OG' where id=6; -update noar tt set b1='BQIESDUYAEN' where id=6; -update noar ti set b1='BQIESDUYAEN' where id=6; -update noar tt set v0='Q02BFLEZ23IXYNPX2' where id=6; -update noar ti set v0='Q02BFLEZ23IXYNPX2' where id=6; -update noar tt set b2='HFLGOSNLQ8CUD7ZC4B1RDJG' where id=6; -update noar ti set b2='HFLGOSNLQ8CUD7ZC4B1RDJG' where id=6; -update noar tt set v0='29' where id=7; -update noar ti set v0='29' where id=7; -update noar tt set b0='PM8VWHIOIAQUQHZDOE2E2O0QPCG46W' where id=7; -update noar ti set b0='PM8VWHIOIAQUQHZDOE2E2O0QPCG46W' where id=7; -update noar tt set v0='OW39W1EZXS' where id=7; -update noar ti set v0='OW39W1EZXS' where id=7; -update noar tt set b1='OJOHE7DCQG76ZL61IO4BT1S4G5' where id=7; -update noar ti set b1='OJOHE7DCQG76ZL61IO4BT1S4G5' where id=7; -update noar tt set v0='CO93IP1J4XOLTM2QPU49NGUJRFN1' where id=7; -update noar ti set v0='CO93IP1J4XOLTM2QPU49NGUJRFN1' where id=7; -update noar tt set b2='Y' where id=7; -update noar ti set b2='Y' where id=7; -update noar tt set v0='500ZCJ2RPANJ4OXGA2CU66O7XW9ELZEP' where id=8; -update noar ti set v0='500ZCJ2RPANJ4OXGA2CU66O7XW9ELZEP' where id=8; -update noar tt set b0='OANLK0Y' where id=8; -update noar ti set b0='OANLK0Y' where id=8; -update noar tt set v0='8Z9J6S' where id=8; -update noar ti set v0='8Z9J6S' where id=8; -update noar tt set b1='H1D159L47A0AZRJUHQECXX38DQ4R3' where id=8; -update noar ti set b1='H1D159L47A0AZRJUHQECXX38DQ4R3' where id=8; -update noar tt set v0='KR1UA5IF' where id=8; -update noar ti set v0='KR1UA5IF' where id=8; -update noar tt set b2='QRSQOZJMEA6ABGQUMYN' where id=8; -update noar ti set b2='QRSQOZJMEA6ABGQUMYN' where id=8; -update noar tt set v0='M8LT4DQSM093C5T' where id=9; -update noar ti set v0='M8LT4DQSM093C5T' where id=9; -update noar tt set b0='A05A27K1U2U' where id=9; -update noar ti set b0='A05A27K1U2U' where id=9; -update noar tt set v0='7OJULO' where id=9; -update noar ti set v0='7OJULO' where id=9; -update noar tt set b1='MG1Y3' where id=9; -update noar ti set b1='MG1Y3' where id=9; -update noar tt set v0='5JJMFU06GXV4OQL20O8E1J' where id=9; -update noar ti set v0='5JJMFU06GXV4OQL20O8E1J' where id=9; -update noar tt set b2='3XA5SYLOVMRZUS' where id=9; -update noar ti set b2='3XA5SYLOVMRZUS' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 blob null, - b1 mediumblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='97E1XUJ9XDI1W147HASZVGKQ91WCTU1R' where id=1; -update noar ti set v0='97E1XUJ9XDI1W147HASZVGKQ91WCTU1R' where id=1; -update noar tt set b0='KM' where id=1; -update noar ti set b0='KM' where id=1; -update noar tt set v0='0C' where id=1; -update noar ti set v0='0C' where id=1; -update noar tt set b1='IMR' where id=1; -update noar ti set b1='IMR' where id=1; -update noar tt set v0='GR' where id=1; -update noar ti set v0='GR' where id=1; -update noar tt set b2='CUGV1US' where id=1; -update noar ti set b2='CUGV1US' where id=1; -update noar tt set v0='Q8KGM96QGRPDN7QDCKYGKXR' where id=2; -update noar ti set v0='Q8KGM96QGRPDN7QDCKYGKXR' where id=2; -update noar tt set b0='MUZ5WXICBS2WBB1GPR48OEMVJSHN6NRJ' where id=2; -update noar ti set b0='MUZ5WXICBS2WBB1GPR48OEMVJSHN6NRJ' where id=2; -update noar tt set v0='E6FESUB7U988XRFL3XYC' where id=2; -update noar ti set v0='E6FESUB7U988XRFL3XYC' where id=2; -update noar tt set b1='OQMLS9NS5BYY' where id=2; -update noar ti set b1='OQMLS9NS5BYY' where id=2; -update noar tt set v0='MOIC92LMU2QS44ZUFSGC23EH7YAT' where id=2; -update noar ti set v0='MOIC92LMU2QS44ZUFSGC23EH7YAT' where id=2; -update noar tt set b2='R5G0CJO331FI' where id=2; -update noar ti set b2='R5G0CJO331FI' where id=2; -update noar tt set v0='LR8UZMQF5QYGVR6NA62T2' where id=3; -update noar ti set v0='LR8UZMQF5QYGVR6NA62T2' where id=3; -update noar tt set b0='EGCBWS7D1ET1PQL1J' where id=3; -update noar ti set b0='EGCBWS7D1ET1PQL1J' where id=3; -update noar tt set v0='CI2MG09ZO' where id=3; -update noar ti set v0='CI2MG09ZO' where id=3; -update noar tt set b1='LMAF' where id=3; -update noar ti set b1='LMAF' where id=3; -update noar tt set v0='MC0RXWCTJHYR0FDNSN7WBTMXQ4BZ7E' where id=3; -update noar ti set v0='MC0RXWCTJHYR0FDNSN7WBTMXQ4BZ7E' where id=3; -update noar tt set b2='GC8UP' where id=3; -update noar ti set b2='GC8UP' where id=3; -update noar tt set v0='JJ0I4Y48D1S' where id=4; -update noar ti set v0='JJ0I4Y48D1S' where id=4; -update noar tt set b0='X' where id=4; -update noar ti set b0='X' where id=4; -update noar tt set v0='FW' where id=4; -update noar ti set v0='FW' where id=4; -update noar tt set b1='NQYPVRA9ICAVR5CNXU9PUQWOK11' where id=4; -update noar ti set b1='NQYPVRA9ICAVR5CNXU9PUQWOK11' where id=4; -update noar tt set v0='TMYFTZC47R0SL1RLJKGH101QQ9CDILM' where id=4; -update noar ti set v0='TMYFTZC47R0SL1RLJKGH101QQ9CDILM' where id=4; -update noar tt set b2='REDHGMH0J94R05GBYRMV31PP' where id=4; -update noar ti set b2='REDHGMH0J94R05GBYRMV31PP' where id=4; -update noar tt set v0='LCC13I41I2XPNQ6' where id=5; -update noar ti set v0='LCC13I41I2XPNQ6' where id=5; -update noar tt set b0='NMDYFPN4KNCKGY' where id=5; -update noar ti set b0='NMDYFPN4KNCKGY' where id=5; -update noar tt set v0='R85LLOZ1YPPDZNXRGD4PZA19EH9VITR' where id=5; -update noar ti set v0='R85LLOZ1YPPDZNXRGD4PZA19EH9VITR' where id=5; -update noar tt set b1='8XZLATWQBYJN' where id=5; -update noar ti set b1='8XZLATWQBYJN' where id=5; -update noar tt set v0='731YTQFDAV7TG60HL2DTG' where id=5; -update noar ti set v0='731YTQFDAV7TG60HL2DTG' where id=5; -update noar tt set b2='1LR7EA' where id=5; -update noar ti set b2='1LR7EA' where id=5; -update noar tt set v0='WXS3LI82FMETYPW' where id=6; -update noar ti set v0='WXS3LI82FMETYPW' where id=6; -update noar tt set b0='92TQ0TVCY82PO6DZI1HOMDO' where id=6; -update noar ti set b0='92TQ0TVCY82PO6DZI1HOMDO' where id=6; -update noar tt set v0='8U8QE01IQ0' where id=6; -update noar ti set v0='8U8QE01IQ0' where id=6; -update noar tt set b1='4GTENHIUJP6U' where id=6; -update noar ti set b1='4GTENHIUJP6U' where id=6; -update noar tt set v0='DR07ASCBKRZ9U51O9G7' where id=6; -update noar ti set v0='DR07ASCBKRZ9U51O9G7' where id=6; -update noar tt set b2='DHAHWE4' where id=6; -update noar ti set b2='DHAHWE4' where id=6; -update noar tt set v0='Y5N0ERXN7FKT' where id=7; -update noar ti set v0='Y5N0ERXN7FKT' where id=7; -update noar tt set b0='PCXS9N2C1IVE1KS28WD' where id=7; -update noar ti set b0='PCXS9N2C1IVE1KS28WD' where id=7; -update noar tt set v0='71FR6QH1KQD581Y144X51PI8YWHSK' where id=7; -update noar ti set v0='71FR6QH1KQD581Y144X51PI8YWHSK' where id=7; -update noar tt set b1='J429Q3RB3FV' where id=7; -update noar ti set b1='J429Q3RB3FV' where id=7; -update noar tt set v0='271YT7XLN7IW2VBG0C1K9YAR19Z1C' where id=7; -update noar ti set v0='271YT7XLN7IW2VBG0C1K9YAR19Z1C' where id=7; -update noar tt set b2='M77C' where id=7; -update noar ti set b2='M77C' where id=7; -update noar tt set v0='SX1I46X0P3BQ3A1DNZ5URHN08' where id=8; -update noar ti set v0='SX1I46X0P3BQ3A1DNZ5URHN08' where id=8; -update noar tt set b0='LI66Y7W93T' where id=8; -update noar ti set b0='LI66Y7W93T' where id=8; -update noar tt set v0='5DC5GIO5PIWAWOX' where id=8; -update noar ti set v0='5DC5GIO5PIWAWOX' where id=8; -update noar tt set b1='W5DJV7YMJVTZKOEXHI7PRNDRB' where id=8; -update noar ti set b1='W5DJV7YMJVTZKOEXHI7PRNDRB' where id=8; -update noar tt set v0='RM3WVK573' where id=8; -update noar ti set v0='RM3WVK573' where id=8; -update noar tt set b2='1' where id=8; -update noar ti set b2='1' where id=8; -update noar tt set v0='4W2QI5PAA' where id=9; -update noar ti set v0='4W2QI5PAA' where id=9; -update noar tt set b0='BGAWIR' where id=9; -update noar ti set b0='BGAWIR' where id=9; -update noar tt set v0='L0BM2G10OYDC2YIS8CV192VBFWOX93P' where id=9; -update noar ti set v0='L0BM2G10OYDC2YIS8CV192VBFWOX93P' where id=9; -update noar tt set b1='8V3550SQJ6RXO96DUBW8XMMLVSG' where id=9; -update noar ti set b1='8V3550SQJ6RXO96DUBW8XMMLVSG' where id=9; -update noar tt set v0='VHD' where id=9; -update noar ti set v0='VHD' where id=9; -update noar tt set b2='QM0T3O' where id=9; -update noar ti set b2='QM0T3O' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 blob not null, - b1 mediumblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='HDMWJEJYITMNNYX1U' where id=1; -update noar ti set v0='HDMWJEJYITMNNYX1U' where id=1; -update noar tt set b0='0CS51LUJW7T19KR9E01PJH' where id=1; -update noar ti set b0='0CS51LUJW7T19KR9E01PJH' where id=1; -update noar tt set v0='A8KX4XZW1DJH751UEJ4HZ1SX' where id=1; -update noar ti set v0='A8KX4XZW1DJH751UEJ4HZ1SX' where id=1; -update noar tt set b1='34KYR48KNOCK4' where id=1; -update noar ti set b1='34KYR48KNOCK4' where id=1; -update noar tt set v0='I1WQ9IZL0OIBEXOB244CVAZE0BKMVO' where id=1; -update noar ti set v0='I1WQ9IZL0OIBEXOB244CVAZE0BKMVO' where id=1; -update noar tt set b2='Y7ATFNYO7' where id=1; -update noar ti set b2='Y7ATFNYO7' where id=1; -update noar tt set v0='J9RS8XGCJQ6' where id=2; -update noar ti set v0='J9RS8XGCJQ6' where id=2; -update noar tt set b0='HXVFI3ST5Z5P3YLH7GE2J3OGHTD0IW1' where id=2; -update noar ti set b0='HXVFI3ST5Z5P3YLH7GE2J3OGHTD0IW1' where id=2; -update noar tt set v0='JABWAPPSQ1V4K7FC68ZLO5JL' where id=2; -update noar ti set v0='JABWAPPSQ1V4K7FC68ZLO5JL' where id=2; -update noar tt set b1='M77MS2' where id=2; -update noar ti set b1='M77MS2' where id=2; -update noar tt set v0='F0QU' where id=2; -update noar ti set v0='F0QU' where id=2; -update noar tt set b2='P88ZN2NN3KLP3OSRR33QJQ9P0SB' where id=2; -update noar ti set b2='P88ZN2NN3KLP3OSRR33QJQ9P0SB' where id=2; -update noar tt set v0='3JLU366FB18V4ZTEK601WB' where id=3; -update noar ti set v0='3JLU366FB18V4ZTEK601WB' where id=3; -update noar tt set b0='5ESQRKIXY8H13ZGCB9Z' where id=3; -update noar ti set b0='5ESQRKIXY8H13ZGCB9Z' where id=3; -update noar tt set v0='A4NE543FUM' where id=3; -update noar ti set v0='A4NE543FUM' where id=3; -update noar tt set b1='Q9AXGAPOHCY' where id=3; -update noar ti set b1='Q9AXGAPOHCY' where id=3; -update noar tt set v0='H1BGXUBT1HR4GSVZDMU2LVVVWT5NKPLU' where id=3; -update noar ti set v0='H1BGXUBT1HR4GSVZDMU2LVVVWT5NKPLU' where id=3; -update noar tt set b2='O7SQ5ML' where id=3; -update noar ti set b2='O7SQ5ML' where id=3; -update noar tt set v0='3AF' where id=4; -update noar ti set v0='3AF' where id=4; -update noar tt set b0='24JPTNJHV4Q1FIPZB7Q' where id=4; -update noar ti set b0='24JPTNJHV4Q1FIPZB7Q' where id=4; -update noar tt set v0='CCNO07GXFY' where id=4; -update noar ti set v0='CCNO07GXFY' where id=4; -update noar tt set b1='7QPS4' where id=4; -update noar ti set b1='7QPS4' where id=4; -update noar tt set v0='MDE24SRIYDSB9ZPH82253JJV' where id=4; -update noar ti set v0='MDE24SRIYDSB9ZPH82253JJV' where id=4; -update noar tt set b2='VFRMUS9P5H27USAPL8BOTXYHBC' where id=4; -update noar ti set b2='VFRMUS9P5H27USAPL8BOTXYHBC' where id=4; -update noar tt set v0='3HGOMKYBF' where id=5; -update noar ti set v0='3HGOMKYBF' where id=5; -update noar tt set b0='K47L33M365G' where id=5; -update noar ti set b0='K47L33M365G' where id=5; -update noar tt set v0='1M9B6O16X' where id=5; -update noar ti set v0='1M9B6O16X' where id=5; -update noar tt set b1='YHGWSUZ7S4' where id=5; -update noar ti set b1='YHGWSUZ7S4' where id=5; -update noar tt set v0='1D20' where id=5; -update noar ti set v0='1D20' where id=5; -update noar tt set b2='3OTDQC8B22SHV9HO1SDOI6VFDZAE' where id=5; -update noar ti set b2='3OTDQC8B22SHV9HO1SDOI6VFDZAE' where id=5; -update noar tt set v0='8GT639GS7HP' where id=6; -update noar ti set v0='8GT639GS7HP' where id=6; -update noar tt set b0='KL1DV74H8' where id=6; -update noar ti set b0='KL1DV74H8' where id=6; -update noar tt set v0='9GSU3G915K9PI5O6VVZ83RMOFHD9U' where id=6; -update noar ti set v0='9GSU3G915K9PI5O6VVZ83RMOFHD9U' where id=6; -update noar tt set b1='9ML6HBFTGEETGA5J5KC7RXOK' where id=6; -update noar ti set b1='9ML6HBFTGEETGA5J5KC7RXOK' where id=6; -update noar tt set v0='L09UQWOTR5K9R526RESABLN' where id=6; -update noar ti set v0='L09UQWOTR5K9R526RESABLN' where id=6; -update noar tt set b2='G46BCWJHCQBUWL6X8NC607N' where id=6; -update noar ti set b2='G46BCWJHCQBUWL6X8NC607N' where id=6; -update noar tt set v0='N1' where id=7; -update noar ti set v0='N1' where id=7; -update noar tt set b0='VEP93ONIHZF02XFHZ' where id=7; -update noar ti set b0='VEP93ONIHZF02XFHZ' where id=7; -update noar tt set v0='RIC7B5NAEHXR' where id=7; -update noar ti set v0='RIC7B5NAEHXR' where id=7; -update noar tt set b1='74MCMDA5RH2QLUWSNJA1NN2H21XP' where id=7; -update noar ti set b1='74MCMDA5RH2QLUWSNJA1NN2H21XP' where id=7; -update noar tt set v0='M72KS5ODPA8MB' where id=7; -update noar ti set v0='M72KS5ODPA8MB' where id=7; -update noar tt set b2='5SGGCFJN7X1' where id=7; -update noar ti set b2='5SGGCFJN7X1' where id=7; -update noar tt set v0='DAZX3NSXB0OBPPQ' where id=8; -update noar ti set v0='DAZX3NSXB0OBPPQ' where id=8; -update noar tt set b0='U61RD7IEXFT7Y7Y6QTRJ' where id=8; -update noar ti set b0='U61RD7IEXFT7Y7Y6QTRJ' where id=8; -update noar tt set v0='FR445O9YLXSF2R0GASN041L7KCRNP' where id=8; -update noar ti set v0='FR445O9YLXSF2R0GASN041L7KCRNP' where id=8; -update noar tt set b1='V18NFTREY61U0D9D93SSDWIE' where id=8; -update noar ti set b1='V18NFTREY61U0D9D93SSDWIE' where id=8; -update noar tt set v0='7OV4IW9A6S7AY7LFNOK3SCNE18G' where id=8; -update noar ti set v0='7OV4IW9A6S7AY7LFNOK3SCNE18G' where id=8; -update noar tt set b2='U9G9JWXJ43QUD5I9' where id=8; -update noar ti set b2='U9G9JWXJ43QUD5I9' where id=8; -update noar tt set v0='6ZGELJ9UVDG9D3L87PWDO' where id=9; -update noar ti set v0='6ZGELJ9UVDG9D3L87PWDO' where id=9; -update noar tt set b0='K2HD65SB2KCR9BEWN1H' where id=9; -update noar ti set b0='K2HD65SB2KCR9BEWN1H' where id=9; -update noar tt set v0='OSC2HAI079QH0RJHEB' where id=9; -update noar ti set v0='OSC2HAI079QH0RJHEB' where id=9; -update noar tt set b1='JJEJM4' where id=9; -update noar ti set b1='JJEJM4' where id=9; -update noar tt set v0='0IA' where id=9; -update noar ti set v0='0IA' where id=9; -update noar tt set b2='ZSGMQ5V2SLVBWMI7C2OY0YV' where id=9; -update noar ti set b2='ZSGMQ5V2SLVBWMI7C2OY0YV' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 blob not null, - b1 mediumblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='H2EIRBSKSKXRKA9SQRHZSHO' where id=1; -update noar ti set v0='H2EIRBSKSKXRKA9SQRHZSHO' where id=1; -update noar tt set b0='H' where id=1; -update noar ti set b0='H' where id=1; -update noar tt set v0='CV0YRCOWJVNF7RC5Y58V' where id=1; -update noar ti set v0='CV0YRCOWJVNF7RC5Y58V' where id=1; -update noar tt set b1='4P7XXZZBYOGRSDGDM513I2' where id=1; -update noar ti set b1='4P7XXZZBYOGRSDGDM513I2' where id=1; -update noar tt set v0='QWIZJ' where id=1; -update noar ti set v0='QWIZJ' where id=1; -update noar tt set b2='S6H44KS9ZJ0BWR8LCNPNIUOW53' where id=1; -update noar ti set b2='S6H44KS9ZJ0BWR8LCNPNIUOW53' where id=1; -update noar tt set v0='IDKCNNQ22UU4EF0EC7AS' where id=2; -update noar ti set v0='IDKCNNQ22UU4EF0EC7AS' where id=2; -update noar tt set b0='EXW08T6PWVVKKZVOH' where id=2; -update noar ti set b0='EXW08T6PWVVKKZVOH' where id=2; -update noar tt set v0='CO0C27QLQ' where id=2; -update noar ti set v0='CO0C27QLQ' where id=2; -update noar tt set b1='B2VN22Y4JG5Q' where id=2; -update noar ti set b1='B2VN22Y4JG5Q' where id=2; -update noar tt set v0='9D29IU2CEZ4' where id=2; -update noar ti set v0='9D29IU2CEZ4' where id=2; -update noar tt set b2='F' where id=2; -update noar ti set b2='F' where id=2; -update noar tt set v0='FMT2OIVXT7J90ZY5MCM' where id=3; -update noar ti set v0='FMT2OIVXT7J90ZY5MCM' where id=3; -update noar tt set b0='L9A2UWTTWYNY6SPB1KXZYB9Z9R6HSI6' where id=3; -update noar ti set b0='L9A2UWTTWYNY6SPB1KXZYB9Z9R6HSI6' where id=3; -update noar tt set v0='FQ2N' where id=3; -update noar ti set v0='FQ2N' where id=3; -update noar tt set b1='WPQRVGG1HT8S0Z2Y02QWA217T3' where id=3; -update noar ti set b1='WPQRVGG1HT8S0Z2Y02QWA217T3' where id=3; -update noar tt set v0='AZSSCSR' where id=3; -update noar ti set v0='AZSSCSR' where id=3; -update noar tt set b2='QYHN' where id=3; -update noar ti set b2='QYHN' where id=3; -update noar tt set v0='T1SQFDTWO' where id=4; -update noar ti set v0='T1SQFDTWO' where id=4; -update noar tt set b0='PE5YVFTX9PU504DYZM67TRLKBIS0' where id=4; -update noar ti set b0='PE5YVFTX9PU504DYZM67TRLKBIS0' where id=4; -update noar tt set v0='RY09VV1M0' where id=4; -update noar ti set v0='RY09VV1M0' where id=4; -update noar tt set b1='Z1GXL7Y3SS1VUMB' where id=4; -update noar ti set b1='Z1GXL7Y3SS1VUMB' where id=4; -update noar tt set v0='RP3JS5W5HB8JW1DJA426635I0Y0VL' where id=4; -update noar ti set v0='RP3JS5W5HB8JW1DJA426635I0Y0VL' where id=4; -update noar tt set b2='JC9EYKF3PHEONPH4U' where id=4; -update noar ti set b2='JC9EYKF3PHEONPH4U' where id=4; -update noar tt set v0='L9BU76R32OKWI145AMTUMENCZPIPU' where id=5; -update noar ti set v0='L9BU76R32OKWI145AMTUMENCZPIPU' where id=5; -update noar tt set b0='BWBEEIHFSBDTMLGXWBJSIMZ' where id=5; -update noar ti set b0='BWBEEIHFSBDTMLGXWBJSIMZ' where id=5; -update noar tt set v0='XNIY1IQLB9U513LC7I4OFFGHK9PWS' where id=5; -update noar ti set v0='XNIY1IQLB9U513LC7I4OFFGHK9PWS' where id=5; -update noar tt set b1='SWH' where id=5; -update noar ti set b1='SWH' where id=5; -update noar tt set v0='QD' where id=5; -update noar ti set v0='QD' where id=5; -update noar tt set b2='DBZTO4VYF3' where id=5; -update noar ti set b2='DBZTO4VYF3' where id=5; -update noar tt set v0='UYNJCADJ2D03DRBAEFABUQ8CEWMFUJ' where id=6; -update noar ti set v0='UYNJCADJ2D03DRBAEFABUQ8CEWMFUJ' where id=6; -update noar tt set b0='1OH5KC7V2RCIM9QOYSIF' where id=6; -update noar ti set b0='1OH5KC7V2RCIM9QOYSIF' where id=6; -update noar tt set v0='E' where id=6; -update noar ti set v0='E' where id=6; -update noar tt set b1='9WJFHKSFXB9058XHVNFG06' where id=6; -update noar ti set b1='9WJFHKSFXB9058XHVNFG06' where id=6; -update noar tt set v0='7WG8NT0LTVDQIVSDNKX249RNOZ' where id=6; -update noar ti set v0='7WG8NT0LTVDQIVSDNKX249RNOZ' where id=6; -update noar tt set b2='MDIXJ8G66' where id=6; -update noar ti set b2='MDIXJ8G66' where id=6; -update noar tt set v0='TODOH8LKNYXSOFZULC2NZWJ40J2L8' where id=7; -update noar ti set v0='TODOH8LKNYXSOFZULC2NZWJ40J2L8' where id=7; -update noar tt set b0='T885HND' where id=7; -update noar ti set b0='T885HND' where id=7; -update noar tt set v0='ZP' where id=7; -update noar ti set v0='ZP' where id=7; -update noar tt set b1='82VL5YJC94RTOPB6DY7' where id=7; -update noar ti set b1='82VL5YJC94RTOPB6DY7' where id=7; -update noar tt set v0='ZU' where id=7; -update noar ti set v0='ZU' where id=7; -update noar tt set b2='0' where id=7; -update noar ti set b2='0' where id=7; -update noar tt set v0='PHO63' where id=8; -update noar ti set v0='PHO63' where id=8; -update noar tt set b0='8X6XYAOUAAT6ZV9AB2C8DVDCM8YX6N' where id=8; -update noar ti set b0='8X6XYAOUAAT6ZV9AB2C8DVDCM8YX6N' where id=8; -update noar tt set v0='AXU6EPJ56US0X1WA7N2Q1' where id=8; -update noar ti set v0='AXU6EPJ56US0X1WA7N2Q1' where id=8; -update noar tt set b1='Z0581T7D7PV' where id=8; -update noar ti set b1='Z0581T7D7PV' where id=8; -update noar tt set v0='X6TCA2VEVIIVK' where id=8; -update noar ti set v0='X6TCA2VEVIIVK' where id=8; -update noar tt set b2='DFAH72C18' where id=8; -update noar ti set b2='DFAH72C18' where id=8; -update noar tt set v0='Q2AITF9FSIFZZW1ZIY04AOYSV26' where id=9; -update noar ti set v0='Q2AITF9FSIFZZW1ZIY04AOYSV26' where id=9; -update noar tt set b0='KJFKEYMSX4H8YEKOWUXM' where id=9; -update noar ti set b0='KJFKEYMSX4H8YEKOWUXM' where id=9; -update noar tt set v0='M7QZV2W8' where id=9; -update noar ti set v0='M7QZV2W8' where id=9; -update noar tt set b1='GJJWLMCX7KHXZI' where id=9; -update noar ti set b1='GJJWLMCX7KHXZI' where id=9; -update noar tt set v0='VM0Y4KKC8D8MRTZVSALGRKUKNWQ' where id=9; -update noar ti set v0='VM0Y4KKC8D8MRTZVSALGRKUKNWQ' where id=9; -update noar tt set b2='2' where id=9; -update noar ti set b2='2' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 blob null, - b1 longblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='8PS5LIM97XCVWW4SN' where id=1; -update noar ti set v0='8PS5LIM97XCVWW4SN' where id=1; -update noar tt set b0='EAPSA49721L' where id=1; -update noar ti set b0='EAPSA49721L' where id=1; -update noar tt set v0='2VN2R0CX' where id=1; -update noar ti set v0='2VN2R0CX' where id=1; -update noar tt set b1='SJ' where id=1; -update noar ti set b1='SJ' where id=1; -update noar tt set v0='KYGQC6ZPX8LEI8' where id=1; -update noar ti set v0='KYGQC6ZPX8LEI8' where id=1; -update noar tt set b2='T915HILYU61P9OC74KEB' where id=1; -update noar ti set b2='T915HILYU61P9OC74KEB' where id=1; -update noar tt set v0='XNHQUSQL5VIE6KB5Y1QS' where id=2; -update noar ti set v0='XNHQUSQL5VIE6KB5Y1QS' where id=2; -update noar tt set b0='B7N3BW0W1LDKY3USEQ0U9EWGUKB' where id=2; -update noar ti set b0='B7N3BW0W1LDKY3USEQ0U9EWGUKB' where id=2; -update noar tt set v0='DAEA418JD95MM1VWO8KI0CS' where id=2; -update noar ti set v0='DAEA418JD95MM1VWO8KI0CS' where id=2; -update noar tt set b1='Q63OHX2EHXSRM17MQOT' where id=2; -update noar ti set b1='Q63OHX2EHXSRM17MQOT' where id=2; -update noar tt set v0='XK4A0R0PH1UMR76PWN8GLANQ0XTSYG' where id=2; -update noar ti set v0='XK4A0R0PH1UMR76PWN8GLANQ0XTSYG' where id=2; -update noar tt set b2='DOXYPOK8UEMGKK2LTZDWA3K9ZWSYOIO' where id=2; -update noar ti set b2='DOXYPOK8UEMGKK2LTZDWA3K9ZWSYOIO' where id=2; -update noar tt set v0='DF0ZFJ' where id=3; -update noar ti set v0='DF0ZFJ' where id=3; -update noar tt set b0='KX76YECE7L2ZYWWXSGO0X1W' where id=3; -update noar ti set b0='KX76YECE7L2ZYWWXSGO0X1W' where id=3; -update noar tt set v0='RZO9VQN8PP5QOBAIKIKJ2J' where id=3; -update noar ti set v0='RZO9VQN8PP5QOBAIKIKJ2J' where id=3; -update noar tt set b1='FYFVU7CMTVP5LFXJO' where id=3; -update noar ti set b1='FYFVU7CMTVP5LFXJO' where id=3; -update noar tt set v0='I6OK' where id=3; -update noar ti set v0='I6OK' where id=3; -update noar tt set b2='QHACU8HI0N5' where id=3; -update noar ti set b2='QHACU8HI0N5' where id=3; -update noar tt set v0='61BGS6Q1W340FGXCBU2V' where id=4; -update noar ti set v0='61BGS6Q1W340FGXCBU2V' where id=4; -update noar tt set b0='MXB91ANCYFM4LJ8MGPFBYP6DD9' where id=4; -update noar ti set b0='MXB91ANCYFM4LJ8MGPFBYP6DD9' where id=4; -update noar tt set v0='0AQK9ICMO7VWI4E' where id=4; -update noar ti set v0='0AQK9ICMO7VWI4E' where id=4; -update noar tt set b1='6L' where id=4; -update noar ti set b1='6L' where id=4; -update noar tt set v0='Q7R9YKWYDPNBRFALA89XXTJNB' where id=4; -update noar ti set v0='Q7R9YKWYDPNBRFALA89XXTJNB' where id=4; -update noar tt set b2='LYOZ8RS2BI567UM2LBUH7K' where id=4; -update noar ti set b2='LYOZ8RS2BI567UM2LBUH7K' where id=4; -update noar tt set v0='U' where id=5; -update noar ti set v0='U' where id=5; -update noar tt set b0='QLFO85GTIAK78WBOX5Y8VUUB4' where id=5; -update noar ti set b0='QLFO85GTIAK78WBOX5Y8VUUB4' where id=5; -update noar tt set v0='0FRNZL62' where id=5; -update noar ti set v0='0FRNZL62' where id=5; -update noar tt set b1='UIVZF5ANZ9ELJ6BMFMF' where id=5; -update noar ti set b1='UIVZF5ANZ9ELJ6BMFMF' where id=5; -update noar tt set v0='M1MD5PKP173' where id=5; -update noar ti set v0='M1MD5PKP173' where id=5; -update noar tt set b2='LMI5KJTU' where id=5; -update noar ti set b2='LMI5KJTU' where id=5; -update noar tt set v0='GD3RYUP6BJ9JAOSW4TO' where id=6; -update noar ti set v0='GD3RYUP6BJ9JAOSW4TO' where id=6; -update noar tt set b0='SR8' where id=6; -update noar ti set b0='SR8' where id=6; -update noar tt set v0='6CNB6VSRXDCJLB7EHC5OADJ4E' where id=6; -update noar ti set v0='6CNB6VSRXDCJLB7EHC5OADJ4E' where id=6; -update noar tt set b1='W9VW779LBHJLSHQK94UAMHWCGAEX3' where id=6; -update noar ti set b1='W9VW779LBHJLSHQK94UAMHWCGAEX3' where id=6; -update noar tt set v0='0B2ILT82R3' where id=6; -update noar ti set v0='0B2ILT82R3' where id=6; -update noar tt set b2='TGI97HZ' where id=6; -update noar ti set b2='TGI97HZ' where id=6; -update noar tt set v0='FAFZ3XL4M4' where id=7; -update noar ti set v0='FAFZ3XL4M4' where id=7; -update noar tt set b0='OCGZ' where id=7; -update noar ti set b0='OCGZ' where id=7; -update noar tt set v0='SDKVIWY6PZ40ZKH3EUR' where id=7; -update noar ti set v0='SDKVIWY6PZ40ZKH3EUR' where id=7; -update noar tt set b1='P261PRNROR6RNUPDMVBN8' where id=7; -update noar ti set b1='P261PRNROR6RNUPDMVBN8' where id=7; -update noar tt set v0='RBFUH' where id=7; -update noar ti set v0='RBFUH' where id=7; -update noar tt set b2='24B7V2NL' where id=7; -update noar ti set b2='24B7V2NL' where id=7; -update noar tt set v0='40Y15OF35FLX4Y90L58U2R2XYL5KQFJ' where id=8; -update noar ti set v0='40Y15OF35FLX4Y90L58U2R2XYL5KQFJ' where id=8; -update noar tt set b0='2TKRA8AMMPVBZLFA6' where id=8; -update noar ti set b0='2TKRA8AMMPVBZLFA6' where id=8; -update noar tt set v0='8EOGL83MPGHUL3LJ' where id=8; -update noar ti set v0='8EOGL83MPGHUL3LJ' where id=8; -update noar tt set b1='4KP252TBDA0XUH905GBOBEE' where id=8; -update noar ti set b1='4KP252TBDA0XUH905GBOBEE' where id=8; -update noar tt set v0='BMFHSF0DF' where id=8; -update noar ti set v0='BMFHSF0DF' where id=8; -update noar tt set b2='PBXCGKQG17PXSPP8414N' where id=8; -update noar ti set b2='PBXCGKQG17PXSPP8414N' where id=8; -update noar tt set v0='WCLX8KXI3TAW1TQ70PXP0' where id=9; -update noar ti set v0='WCLX8KXI3TAW1TQ70PXP0' where id=9; -update noar tt set b0='BFVHGBX3XSTZRMIPC52CGQO5SM2F' where id=9; -update noar ti set b0='BFVHGBX3XSTZRMIPC52CGQO5SM2F' where id=9; -update noar tt set v0='VI33D4FBYY29OPRHB0KX7FFE' where id=9; -update noar ti set v0='VI33D4FBYY29OPRHB0KX7FFE' where id=9; -update noar tt set b1='D2VJFNFHJ1VJ' where id=9; -update noar ti set b1='D2VJFNFHJ1VJ' where id=9; -update noar tt set v0='DAMO' where id=9; -update noar ti set v0='DAMO' where id=9; -update noar tt set b2='HZGDDJC9LOX03Z1T6FV' where id=9; -update noar ti set b2='HZGDDJC9LOX03Z1T6FV' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 blob null, - b1 longblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='EO35151XGXNWNVBQ' where id=1; -update noar ti set v0='EO35151XGXNWNVBQ' where id=1; -update noar tt set b0='HP24C0IDRAOPS41SMCDLP76ZHXEZ' where id=1; -update noar ti set b0='HP24C0IDRAOPS41SMCDLP76ZHXEZ' where id=1; -update noar tt set v0='59RZ38K1EN8X2TAZHF3R' where id=1; -update noar ti set v0='59RZ38K1EN8X2TAZHF3R' where id=1; -update noar tt set b1='6T2VPG1YK5' where id=1; -update noar ti set b1='6T2VPG1YK5' where id=1; -update noar tt set v0='ZBJIEF9BTW2Q9R1L6PVYBK067GND' where id=1; -update noar ti set v0='ZBJIEF9BTW2Q9R1L6PVYBK067GND' where id=1; -update noar tt set b2='JLIN0B15OLBA0LWA' where id=1; -update noar ti set b2='JLIN0B15OLBA0LWA' where id=1; -update noar tt set v0='PY2Q5I' where id=2; -update noar ti set v0='PY2Q5I' where id=2; -update noar tt set b0='NS' where id=2; -update noar ti set b0='NS' where id=2; -update noar tt set v0='W2DS' where id=2; -update noar ti set v0='W2DS' where id=2; -update noar tt set b1='0GN7SNIJ5H3539L4' where id=2; -update noar ti set b1='0GN7SNIJ5H3539L4' where id=2; -update noar tt set v0='XDE3ETOXZNK29RTXMM591W6CGSKKBZ' where id=2; -update noar ti set v0='XDE3ETOXZNK29RTXMM591W6CGSKKBZ' where id=2; -update noar tt set b2='SV72XPP4' where id=2; -update noar ti set b2='SV72XPP4' where id=2; -update noar tt set v0='JCSKFFSTO98U1S4CWW5WI2ETM' where id=3; -update noar ti set v0='JCSKFFSTO98U1S4CWW5WI2ETM' where id=3; -update noar tt set b0='MPVGTETTY7WSHDTI4DHGEGI' where id=3; -update noar ti set b0='MPVGTETTY7WSHDTI4DHGEGI' where id=3; -update noar tt set v0='TJPJ3H3IRXU0UY3ZDYRQZSD9S' where id=3; -update noar ti set v0='TJPJ3H3IRXU0UY3ZDYRQZSD9S' where id=3; -update noar tt set b1='VTU62' where id=3; -update noar ti set b1='VTU62' where id=3; -update noar tt set v0='AD' where id=3; -update noar ti set v0='AD' where id=3; -update noar tt set b2='F036JBM6EZCJ5W9EBNH2' where id=3; -update noar ti set b2='F036JBM6EZCJ5W9EBNH2' where id=3; -update noar tt set v0='ANCJZOJN4T1FHNRC87521K2I5' where id=4; -update noar ti set v0='ANCJZOJN4T1FHNRC87521K2I5' where id=4; -update noar tt set b0='99YAW8NHFSZIRBNUQZT6Q57AKMB9B7' where id=4; -update noar ti set b0='99YAW8NHFSZIRBNUQZT6Q57AKMB9B7' where id=4; -update noar tt set v0='SJ4PFBUSIVNC96K' where id=4; -update noar ti set v0='SJ4PFBUSIVNC96K' where id=4; -update noar tt set b1='3316AOE23OWPVBP5C' where id=4; -update noar ti set b1='3316AOE23OWPVBP5C' where id=4; -update noar tt set v0='AP5' where id=4; -update noar ti set v0='AP5' where id=4; -update noar tt set b2='GF5AR' where id=4; -update noar ti set b2='GF5AR' where id=4; -update noar tt set v0='7YLDFU952E9EOOL2H0B2KOGXPIX8YAE' where id=5; -update noar ti set v0='7YLDFU952E9EOOL2H0B2KOGXPIX8YAE' where id=5; -update noar tt set b0='G56336ZWCDEO0L81GQRLYGX' where id=5; -update noar ti set b0='G56336ZWCDEO0L81GQRLYGX' where id=5; -update noar tt set v0='HFUAIK2NWGGBDB' where id=5; -update noar ti set v0='HFUAIK2NWGGBDB' where id=5; -update noar tt set b1='SRFMFGZB7D5IN42V2LFA96U860MA' where id=5; -update noar ti set b1='SRFMFGZB7D5IN42V2LFA96U860MA' where id=5; -update noar tt set v0='C25M16UN5OW6NJ2' where id=5; -update noar ti set v0='C25M16UN5OW6NJ2' where id=5; -update noar tt set b2='35WMBZBN449HQHPFEN55ZV' where id=5; -update noar ti set b2='35WMBZBN449HQHPFEN55ZV' where id=5; -update noar tt set v0='DFN6' where id=6; -update noar ti set v0='DFN6' where id=6; -update noar tt set b0='MC8QTALEWA6O' where id=6; -update noar ti set b0='MC8QTALEWA6O' where id=6; -update noar tt set v0='H3R64PPQ3F5SHVRT6YSK7TS' where id=6; -update noar ti set v0='H3R64PPQ3F5SHVRT6YSK7TS' where id=6; -update noar tt set b1='6XRUP' where id=6; -update noar ti set b1='6XRUP' where id=6; -update noar tt set v0='IAS1906LURE5CP21CNWFL' where id=6; -update noar ti set v0='IAS1906LURE5CP21CNWFL' where id=6; -update noar tt set b2='M' where id=6; -update noar ti set b2='M' where id=6; -update noar tt set v0='LC1SGKPUUEWO24V8OBFHV0FGIXD' where id=7; -update noar ti set v0='LC1SGKPUUEWO24V8OBFHV0FGIXD' where id=7; -update noar tt set b0='8F66VWZAL' where id=7; -update noar ti set b0='8F66VWZAL' where id=7; -update noar tt set v0='D5BDQV1ZHCJ5T6F0QU2XM' where id=7; -update noar ti set v0='D5BDQV1ZHCJ5T6F0QU2XM' where id=7; -update noar tt set b1='OMVXBQCLI4' where id=7; -update noar ti set b1='OMVXBQCLI4' where id=7; -update noar tt set v0='ZRTTNABSPS4012QQSU118' where id=7; -update noar ti set v0='ZRTTNABSPS4012QQSU118' where id=7; -update noar tt set b2='5YG47300AA9XRQLEBQSY7RNE' where id=7; -update noar ti set b2='5YG47300AA9XRQLEBQSY7RNE' where id=7; -update noar tt set v0='X' where id=8; -update noar ti set v0='X' where id=8; -update noar tt set b0='DDX1JVXC3UME' where id=8; -update noar ti set b0='DDX1JVXC3UME' where id=8; -update noar tt set v0='6ICFLBOKN' where id=8; -update noar ti set v0='6ICFLBOKN' where id=8; -update noar tt set b1='GULF4ORP4WL19KNDOFD1OEZKAAIE2' where id=8; -update noar ti set b1='GULF4ORP4WL19KNDOFD1OEZKAAIE2' where id=8; -update noar tt set v0='Z7WSTX0RWQ3S03P17TZQ6DH5Q6PT5' where id=8; -update noar ti set v0='Z7WSTX0RWQ3S03P17TZQ6DH5Q6PT5' where id=8; -update noar tt set b2='O' where id=8; -update noar ti set b2='O' where id=8; -update noar tt set v0='U7QNS' where id=9; -update noar ti set v0='U7QNS' where id=9; -update noar tt set b0='H8P7RYPEFKJZ91SKF7KM0IYZJZY' where id=9; -update noar ti set b0='H8P7RYPEFKJZ91SKF7KM0IYZJZY' where id=9; -update noar tt set v0='P7N032KMP7DNVE8CTGWXBLGT3JSQ2Q' where id=9; -update noar ti set v0='P7N032KMP7DNVE8CTGWXBLGT3JSQ2Q' where id=9; -update noar tt set b1='GLQFG8ZVW0ZXM20JHLDQ7I' where id=9; -update noar ti set b1='GLQFG8ZVW0ZXM20JHLDQ7I' where id=9; -update noar tt set v0='90V15OL6OXEPHKHKHZZAFYW5BY5D8D' where id=9; -update noar ti set v0='90V15OL6OXEPHKHKHZZAFYW5BY5D8D' where id=9; -update noar tt set b2='FIHEU9H20H2VLWQ' where id=9; -update noar ti set b2='FIHEU9H20H2VLWQ' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 blob not null, - b1 longblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='GA7V0GLVX1GV9N26RMWKWI5EOAO3OA00' where id=1; -update noar ti set v0='GA7V0GLVX1GV9N26RMWKWI5EOAO3OA00' where id=1; -update noar tt set b0='5Q' where id=1; -update noar ti set b0='5Q' where id=1; -update noar tt set v0='16HFLSMCC9XYTXXOF' where id=1; -update noar ti set v0='16HFLSMCC9XYTXXOF' where id=1; -update noar tt set b1='VTTXU10D7BP' where id=1; -update noar ti set b1='VTTXU10D7BP' where id=1; -update noar tt set v0='QALVJYSPL9NT3NYDC' where id=1; -update noar ti set v0='QALVJYSPL9NT3NYDC' where id=1; -update noar tt set b2='C0QH2L' where id=1; -update noar ti set b2='C0QH2L' where id=1; -update noar tt set v0='I61UE3V1RIPKSXIVTKMS' where id=2; -update noar ti set v0='I61UE3V1RIPKSXIVTKMS' where id=2; -update noar tt set b0='391P428Y3V1J54' where id=2; -update noar ti set b0='391P428Y3V1J54' where id=2; -update noar tt set v0='5WAJJYDAV6PYFJR4KX2CDS9FT9AGD0HU' where id=2; -update noar ti set v0='5WAJJYDAV6PYFJR4KX2CDS9FT9AGD0HU' where id=2; -update noar tt set b1='BUATSX' where id=2; -update noar ti set b1='BUATSX' where id=2; -update noar tt set v0='GZGPA1PVX2Q50C6D2' where id=2; -update noar ti set v0='GZGPA1PVX2Q50C6D2' where id=2; -update noar tt set b2='TH4MFGV5HE' where id=2; -update noar ti set b2='TH4MFGV5HE' where id=2; -update noar tt set v0='GFX' where id=3; -update noar ti set v0='GFX' where id=3; -update noar tt set b0='3MGY24NBRN46WPKI' where id=3; -update noar ti set b0='3MGY24NBRN46WPKI' where id=3; -update noar tt set v0='FM6PPJUBE9FGEB' where id=3; -update noar ti set v0='FM6PPJUBE9FGEB' where id=3; -update noar tt set b1='T8HTP4A7M34N4MIWP6' where id=3; -update noar ti set b1='T8HTP4A7M34N4MIWP6' where id=3; -update noar tt set v0='53UZH8HAPKV1WX50E3B15' where id=3; -update noar ti set v0='53UZH8HAPKV1WX50E3B15' where id=3; -update noar tt set b2='Y1OG47300PATBI5P5YOMM' where id=3; -update noar ti set b2='Y1OG47300PATBI5P5YOMM' where id=3; -update noar tt set v0='976AQV38MW7NNVGY' where id=4; -update noar ti set v0='976AQV38MW7NNVGY' where id=4; -update noar tt set b0='TDISXZCDNW' where id=4; -update noar ti set b0='TDISXZCDNW' where id=4; -update noar tt set v0='USJJHE0TZM6C9EQ7PYOVF2WE' where id=4; -update noar ti set v0='USJJHE0TZM6C9EQ7PYOVF2WE' where id=4; -update noar tt set b1='OBFIP9IU5MARHUNQR' where id=4; -update noar ti set b1='OBFIP9IU5MARHUNQR' where id=4; -update noar tt set v0='3SDZJQ' where id=4; -update noar ti set v0='3SDZJQ' where id=4; -update noar tt set b2='11IVV' where id=4; -update noar ti set b2='11IVV' where id=4; -update noar tt set v0='LK9G2JFA0T' where id=5; -update noar ti set v0='LK9G2JFA0T' where id=5; -update noar tt set b0='QSGVCBUDBXTLI0RTV7E903JU' where id=5; -update noar ti set b0='QSGVCBUDBXTLI0RTV7E903JU' where id=5; -update noar tt set v0='Q0H' where id=5; -update noar ti set v0='Q0H' where id=5; -update noar tt set b1='MVD5U1JO509POLUF7GISSHSZI3VE11GA' where id=5; -update noar ti set b1='MVD5U1JO509POLUF7GISSHSZI3VE11GA' where id=5; -update noar tt set v0='B1QKH4XHUD1OCA3C3M6UHO5' where id=5; -update noar ti set v0='B1QKH4XHUD1OCA3C3M6UHO5' where id=5; -update noar tt set b2='IIC0X' where id=5; -update noar ti set b2='IIC0X' where id=5; -update noar tt set v0='92XC2H' where id=6; -update noar ti set v0='92XC2H' where id=6; -update noar tt set b0='02MVSPMKNPJFWP' where id=6; -update noar ti set b0='02MVSPMKNPJFWP' where id=6; -update noar tt set v0='H4UXF2SZSLG06ZKVPYG519KZGAQ3ZGT' where id=6; -update noar ti set v0='H4UXF2SZSLG06ZKVPYG519KZGAQ3ZGT' where id=6; -update noar tt set b1='TVEMKEGELF0XQWMZ69ZU4AS3EM' where id=6; -update noar ti set b1='TVEMKEGELF0XQWMZ69ZU4AS3EM' where id=6; -update noar tt set v0='I' where id=6; -update noar ti set v0='I' where id=6; -update noar tt set b2='8PY5YXWWQR0E8BT4850MOT' where id=6; -update noar ti set b2='8PY5YXWWQR0E8BT4850MOT' where id=6; -update noar tt set v0='JG' where id=7; -update noar ti set v0='JG' where id=7; -update noar tt set b0='9B5BVF2' where id=7; -update noar ti set b0='9B5BVF2' where id=7; -update noar tt set v0='EICUIUC1PZ9HBA1Z9CFKRZBP1PX6' where id=7; -update noar ti set v0='EICUIUC1PZ9HBA1Z9CFKRZBP1PX6' where id=7; -update noar tt set b1='SL5AEVL1GPDAMDCZ6O0MNZ512OXQF1' where id=7; -update noar ti set b1='SL5AEVL1GPDAMDCZ6O0MNZ512OXQF1' where id=7; -update noar tt set v0='NBB0Y501BC98UZBNV76GBEJQDGEQ447' where id=7; -update noar ti set v0='NBB0Y501BC98UZBNV76GBEJQDGEQ447' where id=7; -update noar tt set b2='2WQ19E38FZHQRQBIJSSWJIQV3LV1WW' where id=7; -update noar ti set b2='2WQ19E38FZHQRQBIJSSWJIQV3LV1WW' where id=7; -update noar tt set v0='MFPPEGLKB6EUQJPYWASJ' where id=8; -update noar ti set v0='MFPPEGLKB6EUQJPYWASJ' where id=8; -update noar tt set b0='RRLQ' where id=8; -update noar ti set b0='RRLQ' where id=8; -update noar tt set v0='U15QKE7E7CX6F9M1U2PRVE' where id=8; -update noar ti set v0='U15QKE7E7CX6F9M1U2PRVE' where id=8; -update noar tt set b1='HG' where id=8; -update noar ti set b1='HG' where id=8; -update noar tt set v0='D3D' where id=8; -update noar ti set v0='D3D' where id=8; -update noar tt set b2='6I71R60QRS1QEB53W5XCAQA3' where id=8; -update noar ti set b2='6I71R60QRS1QEB53W5XCAQA3' where id=8; -update noar tt set v0='BC2TROQ5J' where id=9; -update noar ti set v0='BC2TROQ5J' where id=9; -update noar tt set b0='DBKL0WVJHLHHZBU158HXCTC' where id=9; -update noar ti set b0='DBKL0WVJHLHHZBU158HXCTC' where id=9; -update noar tt set v0='Q86QF0H' where id=9; -update noar ti set v0='Q86QF0H' where id=9; -update noar tt set b1='DVKXRXENQFY6HUB9BC' where id=9; -update noar ti set b1='DVKXRXENQFY6HUB9BC' where id=9; -update noar tt set v0='Q5GAC9A0MFXD1ISX0A7R4GDOI8XFGZUA' where id=9; -update noar ti set v0='Q5GAC9A0MFXD1ISX0A7R4GDOI8XFGZUA' where id=9; -update noar tt set b2='O3UKR2' where id=9; -update noar ti set b2='O3UKR2' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 blob not null, - b1 longblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='GT78ZCXRR3SK9A9EPSY7PDVY8K' where id=1; -update noar ti set v0='GT78ZCXRR3SK9A9EPSY7PDVY8K' where id=1; -update noar tt set b0='A' where id=1; -update noar ti set b0='A' where id=1; -update noar tt set v0='WIW0DNI' where id=1; -update noar ti set v0='WIW0DNI' where id=1; -update noar tt set b1='69R2XAL6UYYNSGMJM7H9' where id=1; -update noar ti set b1='69R2XAL6UYYNSGMJM7H9' where id=1; -update noar tt set v0='GN4' where id=1; -update noar ti set v0='GN4' where id=1; -update noar tt set b2='7MQYPD2W9BDBIIWQD' where id=1; -update noar ti set b2='7MQYPD2W9BDBIIWQD' where id=1; -update noar tt set v0='F' where id=2; -update noar ti set v0='F' where id=2; -update noar tt set b0='R3915QKQK9VAVM9A92NHXKWTPX32RT' where id=2; -update noar ti set b0='R3915QKQK9VAVM9A92NHXKWTPX32RT' where id=2; -update noar tt set v0='MG53LSY6HH' where id=2; -update noar ti set v0='MG53LSY6HH' where id=2; -update noar tt set b1='JKTMH876L9YY5LS3O3' where id=2; -update noar ti set b1='JKTMH876L9YY5LS3O3' where id=2; -update noar tt set v0='LQRPM5CU3' where id=2; -update noar ti set v0='LQRPM5CU3' where id=2; -update noar tt set b2='E2JYMUF3WOWBQKKDSAWFXHT7DI5RBXP' where id=2; -update noar ti set b2='E2JYMUF3WOWBQKKDSAWFXHT7DI5RBXP' where id=2; -update noar tt set v0='AY2WR33JL7162Q254BPVNW4M81QUZW' where id=3; -update noar ti set v0='AY2WR33JL7162Q254BPVNW4M81QUZW' where id=3; -update noar tt set b0='YXGHCE2NBRXEDIBRHH5TGO4' where id=3; -update noar ti set b0='YXGHCE2NBRXEDIBRHH5TGO4' where id=3; -update noar tt set v0='K4PL40ZEC5' where id=3; -update noar ti set v0='K4PL40ZEC5' where id=3; -update noar tt set b1='B478WS19IJFHQBFWHGH9VCE' where id=3; -update noar ti set b1='B478WS19IJFHQBFWHGH9VCE' where id=3; -update noar tt set v0='XWDL' where id=3; -update noar ti set v0='XWDL' where id=3; -update noar tt set b2='3QRY2X' where id=3; -update noar ti set b2='3QRY2X' where id=3; -update noar tt set v0='XN7XEWKTET' where id=4; -update noar ti set v0='XN7XEWKTET' where id=4; -update noar tt set b0='N5IK4PK9OUMZ4E0N' where id=4; -update noar ti set b0='N5IK4PK9OUMZ4E0N' where id=4; -update noar tt set v0='F6MLS7F08G1Y7SFGLHZ' where id=4; -update noar ti set v0='F6MLS7F08G1Y7SFGLHZ' where id=4; -update noar tt set b1='OY0MSTB90LJ8XZ8HC0K' where id=4; -update noar ti set b1='OY0MSTB90LJ8XZ8HC0K' where id=4; -update noar tt set v0='9CPZ6KLPA62RVPDNSU3QSE28' where id=4; -update noar ti set v0='9CPZ6KLPA62RVPDNSU3QSE28' where id=4; -update noar tt set b2='09H' where id=4; -update noar ti set b2='09H' where id=4; -update noar tt set v0='0CASECR6AEU9H93GYO' where id=5; -update noar ti set v0='0CASECR6AEU9H93GYO' where id=5; -update noar tt set b0='BOMIRTM6WXSYR4N08K2C74JAZC45' where id=5; -update noar ti set b0='BOMIRTM6WXSYR4N08K2C74JAZC45' where id=5; -update noar tt set v0='UWR075JQW2KXULXYXXU9AVBVWWX7SD' where id=5; -update noar ti set v0='UWR075JQW2KXULXYXXU9AVBVWWX7SD' where id=5; -update noar tt set b1='3Q8M7VVQ63G1P6L067D' where id=5; -update noar ti set b1='3Q8M7VVQ63G1P6L067D' where id=5; -update noar tt set v0='J8OR5YIL1CQXKS99U' where id=5; -update noar ti set v0='J8OR5YIL1CQXKS99U' where id=5; -update noar tt set b2='3FGU0QIE65G9LU' where id=5; -update noar ti set b2='3FGU0QIE65G9LU' where id=5; -update noar tt set v0='18V36V8P5' where id=6; -update noar ti set v0='18V36V8P5' where id=6; -update noar tt set b0='0UAJED77GUAIQTE7ZM2L4ZHVJRIDP8' where id=6; -update noar ti set b0='0UAJED77GUAIQTE7ZM2L4ZHVJRIDP8' where id=6; -update noar tt set v0='FRZGUT0NEEJRZ2KMV4ULIZ' where id=6; -update noar ti set v0='FRZGUT0NEEJRZ2KMV4ULIZ' where id=6; -update noar tt set b1='22HT12J432ZQMWTATX7B3D1JKRC6DG' where id=6; -update noar ti set b1='22HT12J432ZQMWTATX7B3D1JKRC6DG' where id=6; -update noar tt set v0='WTKIR5E' where id=6; -update noar ti set v0='WTKIR5E' where id=6; -update noar tt set b2='6' where id=6; -update noar ti set b2='6' where id=6; -update noar tt set v0='L8DZP8UC2KYA9ZYJO89QJM6JR' where id=7; -update noar ti set v0='L8DZP8UC2KYA9ZYJO89QJM6JR' where id=7; -update noar tt set b0='MRFCSM0VL0XK9SKBWVF38FYGW2UQU' where id=7; -update noar ti set b0='MRFCSM0VL0XK9SKBWVF38FYGW2UQU' where id=7; -update noar tt set v0='6T8BM' where id=7; -update noar ti set v0='6T8BM' where id=7; -update noar tt set b1='OIC607YT9KM5BPX27XZNZ1YRLLPWU' where id=7; -update noar ti set b1='OIC607YT9KM5BPX27XZNZ1YRLLPWU' where id=7; -update noar tt set v0='LUFTRKXOPVCA' where id=7; -update noar ti set v0='LUFTRKXOPVCA' where id=7; -update noar tt set b2='T295EWPNS33SQ1ODAIU' where id=7; -update noar ti set b2='T295EWPNS33SQ1ODAIU' where id=7; -update noar tt set v0='1GEH0CM6583MELPXY0' where id=8; -update noar ti set v0='1GEH0CM6583MELPXY0' where id=8; -update noar tt set b0='7O2VVWLCTZQLC3Z4EPOX72FO' where id=8; -update noar ti set b0='7O2VVWLCTZQLC3Z4EPOX72FO' where id=8; -update noar tt set v0='ITNM5XP3K6FE9H' where id=8; -update noar ti set v0='ITNM5XP3K6FE9H' where id=8; -update noar tt set b1='IT2U6T2VC60CO5W77E' where id=8; -update noar ti set b1='IT2U6T2VC60CO5W77E' where id=8; -update noar tt set v0='R5L3VX0' where id=8; -update noar ti set v0='R5L3VX0' where id=8; -update noar tt set b2='EWZL5PV1NFIPT5GP2AERUC9HOU' where id=8; -update noar ti set b2='EWZL5PV1NFIPT5GP2AERUC9HOU' where id=8; -update noar tt set v0='S4AT689IDOAY4EF' where id=9; -update noar ti set v0='S4AT689IDOAY4EF' where id=9; -update noar tt set b0='E33ICTT04MQNA0H905DTP8' where id=9; -update noar ti set b0='E33ICTT04MQNA0H905DTP8' where id=9; -update noar tt set v0='PWANA7K2W3ST7FOBCH' where id=9; -update noar ti set v0='PWANA7K2W3ST7FOBCH' where id=9; -update noar tt set b1='HNCRVBHT8OP93KA5N' where id=9; -update noar ti set b1='HNCRVBHT8OP93KA5N' where id=9; -update noar tt set v0='HYR66Y8N1CXQS7NVB9PJET41Q1KB0HT3' where id=9; -update noar ti set v0='HYR66Y8N1CXQS7NVB9PJET41Q1KB0HT3' where id=9; -update noar tt set b2='51U0I' where id=9; -update noar ti set b2='51U0I' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 blob null, - b1 longblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='C36HZUEST1Q8EC2HG5G90QEHF0UEPM' where id=1; -update noar ti set v0='C36HZUEST1Q8EC2HG5G90QEHF0UEPM' where id=1; -update noar tt set b0='36J8JV9H7D5XAT9FT' where id=1; -update noar ti set b0='36J8JV9H7D5XAT9FT' where id=1; -update noar tt set v0='GEE8KPNXHKV4' where id=1; -update noar ti set v0='GEE8KPNXHKV4' where id=1; -update noar tt set b1='CI5FA2O3WT80G' where id=1; -update noar ti set b1='CI5FA2O3WT80G' where id=1; -update noar tt set v0='TO9' where id=1; -update noar ti set v0='TO9' where id=1; -update noar tt set b2='H61E9OWLF53K1LSZ81H6455ZVX5TX0' where id=1; -update noar ti set b2='H61E9OWLF53K1LSZ81H6455ZVX5TX0' where id=1; -update noar tt set v0='L5STQPKFZO3' where id=2; -update noar ti set v0='L5STQPKFZO3' where id=2; -update noar tt set b0='4MPAC26ADRUH' where id=2; -update noar ti set b0='4MPAC26ADRUH' where id=2; -update noar tt set v0='45GNQO833T2YBXQCY' where id=2; -update noar ti set v0='45GNQO833T2YBXQCY' where id=2; -update noar tt set b1='PVHSKPZFXQOPX4S6G0U70XWWC' where id=2; -update noar ti set b1='PVHSKPZFXQOPX4S6G0U70XWWC' where id=2; -update noar tt set v0='94D8D9Z2CCQ' where id=2; -update noar ti set v0='94D8D9Z2CCQ' where id=2; -update noar tt set b2='POU6TEUFEZQTRSCYJ' where id=2; -update noar ti set b2='POU6TEUFEZQTRSCYJ' where id=2; -update noar tt set v0='N2WYWRJXRF4RCYWIZCNZ' where id=3; -update noar ti set v0='N2WYWRJXRF4RCYWIZCNZ' where id=3; -update noar tt set b0='BX05GCHRSVNI6O57N9YLHRENNYT5' where id=3; -update noar ti set b0='BX05GCHRSVNI6O57N9YLHRENNYT5' where id=3; -update noar tt set v0='4AKF9ZHRX4UCAQ6JDW' where id=3; -update noar ti set v0='4AKF9ZHRX4UCAQ6JDW' where id=3; -update noar tt set b1='NDWYANAY0DVBOJYFGCIGJR1MTJ3OQV' where id=3; -update noar ti set b1='NDWYANAY0DVBOJYFGCIGJR1MTJ3OQV' where id=3; -update noar tt set v0='X6I' where id=3; -update noar ti set v0='X6I' where id=3; -update noar tt set b2='DBUDX1WO3' where id=3; -update noar ti set b2='DBUDX1WO3' where id=3; -update noar tt set v0='6SFF' where id=4; -update noar ti set v0='6SFF' where id=4; -update noar tt set b0='NEGS' where id=4; -update noar ti set b0='NEGS' where id=4; -update noar tt set v0='385AH0O2Y7FILZ' where id=4; -update noar ti set v0='385AH0O2Y7FILZ' where id=4; -update noar tt set b1='585' where id=4; -update noar ti set b1='585' where id=4; -update noar tt set v0='KI48I2P9C732XWNYCMBDD5JCN2E' where id=4; -update noar ti set v0='KI48I2P9C732XWNYCMBDD5JCN2E' where id=4; -update noar tt set b2='0Y86B1ER520HP1' where id=4; -update noar ti set b2='0Y86B1ER520HP1' where id=4; -update noar tt set v0='A95PPO36G56FH' where id=5; -update noar ti set v0='A95PPO36G56FH' where id=5; -update noar tt set b0='I55BFWUUMEPTCVFLLONIOWW1' where id=5; -update noar ti set b0='I55BFWUUMEPTCVFLLONIOWW1' where id=5; -update noar tt set v0='DRDVL57LT3XKW6VIWG1QDJF7' where id=5; -update noar ti set v0='DRDVL57LT3XKW6VIWG1QDJF7' where id=5; -update noar tt set b1='IF3UHWP5JMHIY' where id=5; -update noar ti set b1='IF3UHWP5JMHIY' where id=5; -update noar tt set v0='R4OA1UY3M' where id=5; -update noar ti set v0='R4OA1UY3M' where id=5; -update noar tt set b2='CPTRMBQY5N7YCM' where id=5; -update noar ti set b2='CPTRMBQY5N7YCM' where id=5; -update noar tt set v0='81Z' where id=6; -update noar ti set v0='81Z' where id=6; -update noar tt set b0='S5KJGLJIR9' where id=6; -update noar ti set b0='S5KJGLJIR9' where id=6; -update noar tt set v0='NHU' where id=6; -update noar ti set v0='NHU' where id=6; -update noar tt set b1='0EUZV632ERWLB1' where id=6; -update noar ti set b1='0EUZV632ERWLB1' where id=6; -update noar tt set v0='8QP4PM' where id=6; -update noar ti set v0='8QP4PM' where id=6; -update noar tt set b2='EIQGP4WULQLLUCFPCB' where id=6; -update noar ti set b2='EIQGP4WULQLLUCFPCB' where id=6; -update noar tt set v0='P9129VX9AV' where id=7; -update noar ti set v0='P9129VX9AV' where id=7; -update noar tt set b0='OGNDP01FAQVB0U5JIEVVYF4WD9V3' where id=7; -update noar ti set b0='OGNDP01FAQVB0U5JIEVVYF4WD9V3' where id=7; -update noar tt set v0='4NGNQ' where id=7; -update noar ti set v0='4NGNQ' where id=7; -update noar tt set b1='YHJUSH1TW5VTFR3ZJ72H8GIO4JNMR5Z' where id=7; -update noar ti set b1='YHJUSH1TW5VTFR3ZJ72H8GIO4JNMR5Z' where id=7; -update noar tt set v0='U' where id=7; -update noar ti set v0='U' where id=7; -update noar tt set b2='IQILSVHC4XDZ7WC3IYPQXHP2TWUQ' where id=7; -update noar ti set b2='IQILSVHC4XDZ7WC3IYPQXHP2TWUQ' where id=7; -update noar tt set v0='8LUENSHEX9S688SM78A' where id=8; -update noar ti set v0='8LUENSHEX9S688SM78A' where id=8; -update noar tt set b0='XLVG4OJ4ZFUF7ZHE3HPU1D5OER7XRHB' where id=8; -update noar ti set b0='XLVG4OJ4ZFUF7ZHE3HPU1D5OER7XRHB' where id=8; -update noar tt set v0='1LEQX' where id=8; -update noar ti set v0='1LEQX' where id=8; -update noar tt set b1='9JGWRVXLZV' where id=8; -update noar ti set b1='9JGWRVXLZV' where id=8; -update noar tt set v0='PW1HZUORRP39YX9P241NP7TJRCE0' where id=8; -update noar ti set v0='PW1HZUORRP39YX9P241NP7TJRCE0' where id=8; -update noar tt set b2='R88X9PPI' where id=8; -update noar ti set b2='R88X9PPI' where id=8; -update noar tt set v0='WKNZBTGV4UBC97X7U6PNHKBEZF' where id=9; -update noar ti set v0='WKNZBTGV4UBC97X7U6PNHKBEZF' where id=9; -update noar tt set b0='26S02F8E' where id=9; -update noar ti set b0='26S02F8E' where id=9; -update noar tt set v0='R4AV9PCU5A' where id=9; -update noar ti set v0='R4AV9PCU5A' where id=9; -update noar tt set b1='7L' where id=9; -update noar ti set b1='7L' where id=9; -update noar tt set v0='3NOUSJXWDRAAWI48CEDPULQ54Y6CZ' where id=9; -update noar ti set v0='3NOUSJXWDRAAWI48CEDPULQ54Y6CZ' where id=9; -update noar tt set b2='Y' where id=9; -update noar ti set b2='Y' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 blob null, - b1 longblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='FUPYHDGNF1A06G' where id=1; -update noar ti set v0='FUPYHDGNF1A06G' where id=1; -update noar tt set b0='F43ST7XYO' where id=1; -update noar ti set b0='F43ST7XYO' where id=1; -update noar tt set v0='HLWBWJU3' where id=1; -update noar ti set v0='HLWBWJU3' where id=1; -update noar tt set b1='9DY77CE8KVVVBNTJ4T2QDWU5XZWCQX6Z' where id=1; -update noar ti set b1='9DY77CE8KVVVBNTJ4T2QDWU5XZWCQX6Z' where id=1; -update noar tt set v0='I03CD1MEE1OQUYW56HE8C1R7BIT7FQFJ' where id=1; -update noar ti set v0='I03CD1MEE1OQUYW56HE8C1R7BIT7FQFJ' where id=1; -update noar tt set b2='9V9X35I5XURE' where id=1; -update noar ti set b2='9V9X35I5XURE' where id=1; -update noar tt set v0='9B8X4BB' where id=2; -update noar ti set v0='9B8X4BB' where id=2; -update noar tt set b0='97O' where id=2; -update noar ti set b0='97O' where id=2; -update noar tt set v0='WYFH' where id=2; -update noar ti set v0='WYFH' where id=2; -update noar tt set b1='H1WR5' where id=2; -update noar ti set b1='H1WR5' where id=2; -update noar tt set v0='MDRL1M5SJ8F' where id=2; -update noar ti set v0='MDRL1M5SJ8F' where id=2; -update noar tt set b2='0HZNM33WJQN0' where id=2; -update noar ti set b2='0HZNM33WJQN0' where id=2; -update noar tt set v0='8LT3EP7YEXMAE2I0I7M14D' where id=3; -update noar ti set v0='8LT3EP7YEXMAE2I0I7M14D' where id=3; -update noar tt set b0='7C4I5AKJMUWR9286XQ70SAS2M' where id=3; -update noar ti set b0='7C4I5AKJMUWR9286XQ70SAS2M' where id=3; -update noar tt set v0='MVEG6KJCG2RIC34ODHCMIGY' where id=3; -update noar ti set v0='MVEG6KJCG2RIC34ODHCMIGY' where id=3; -update noar tt set b1='PGOKP785' where id=3; -update noar ti set b1='PGOKP785' where id=3; -update noar tt set v0='CCTK7UWCEFUVB45O9NYOI' where id=3; -update noar ti set v0='CCTK7UWCEFUVB45O9NYOI' where id=3; -update noar tt set b2='T13VC' where id=3; -update noar ti set b2='T13VC' where id=3; -update noar tt set v0='VEI303DC6XMZ0HBYE4SKH' where id=4; -update noar ti set v0='VEI303DC6XMZ0HBYE4SKH' where id=4; -update noar tt set b0='914GUTMT1DOB1OLPE' where id=4; -update noar ti set b0='914GUTMT1DOB1OLPE' where id=4; -update noar tt set v0='7IUU' where id=4; -update noar ti set v0='7IUU' where id=4; -update noar tt set b1='2VN2UWTC4TRE' where id=4; -update noar ti set b1='2VN2UWTC4TRE' where id=4; -update noar tt set v0='O66JHIVO1AGBFCQ4EZQBG0B' where id=4; -update noar ti set v0='O66JHIVO1AGBFCQ4EZQBG0B' where id=4; -update noar tt set b2='C5P8' where id=4; -update noar ti set b2='C5P8' where id=4; -update noar tt set v0='QR05WA5PD' where id=5; -update noar ti set v0='QR05WA5PD' where id=5; -update noar tt set b0='84JTVN8ATF' where id=5; -update noar ti set b0='84JTVN8ATF' where id=5; -update noar tt set v0='JT94DMCHFIMFVLI2RFC5FPVCBXOCP' where id=5; -update noar ti set v0='JT94DMCHFIMFVLI2RFC5FPVCBXOCP' where id=5; -update noar tt set b1='DVYT7VF0VDS2G9' where id=5; -update noar ti set b1='DVYT7VF0VDS2G9' where id=5; -update noar tt set v0='7BX67U528R6ROEAHW0II9ZR9' where id=5; -update noar ti set v0='7BX67U528R6ROEAHW0II9ZR9' where id=5; -update noar tt set b2='G2DCYIM9E5A0XIER438YC' where id=5; -update noar ti set b2='G2DCYIM9E5A0XIER438YC' where id=5; -update noar tt set v0='3L64' where id=6; -update noar ti set v0='3L64' where id=6; -update noar tt set b0='DKDMRE' where id=6; -update noar ti set b0='DKDMRE' where id=6; -update noar tt set v0='LSV1G944Q' where id=6; -update noar ti set v0='LSV1G944Q' where id=6; -update noar tt set b1='OXY68XHZL5GFO3XQ1G182TX' where id=6; -update noar ti set b1='OXY68XHZL5GFO3XQ1G182TX' where id=6; -update noar tt set v0='XNEOTPHKBPLPZ7UFYE9M9E' where id=6; -update noar ti set v0='XNEOTPHKBPLPZ7UFYE9M9E' where id=6; -update noar tt set b2='V9M2EEEO1HG7M1KHP8EBLKHJT8' where id=6; -update noar ti set b2='V9M2EEEO1HG7M1KHP8EBLKHJT8' where id=6; -update noar tt set v0='11SAC4M26X2X9RZJ7K23OK' where id=7; -update noar ti set v0='11SAC4M26X2X9RZJ7K23OK' where id=7; -update noar tt set b0='IK5XR3J130Y3LKRKTG8L1X187NQJ' where id=7; -update noar ti set b0='IK5XR3J130Y3LKRKTG8L1X187NQJ' where id=7; -update noar tt set v0='3D9QRSJ' where id=7; -update noar ti set v0='3D9QRSJ' where id=7; -update noar tt set b1='NTSTZI07ZQI4BDILUXDIKWC7PCLTA' where id=7; -update noar ti set b1='NTSTZI07ZQI4BDILUXDIKWC7PCLTA' where id=7; -update noar tt set v0='H6D1XBTNP8SZDINQXUO4I' where id=7; -update noar ti set v0='H6D1XBTNP8SZDINQXUO4I' where id=7; -update noar tt set b2='8FT' where id=7; -update noar ti set b2='8FT' where id=7; -update noar tt set v0='CLQN8TD9WRT8GOVGA9OMWAN9LTM100' where id=8; -update noar ti set v0='CLQN8TD9WRT8GOVGA9OMWAN9LTM100' where id=8; -update noar tt set b0='4L7LCGMES48M' where id=8; -update noar ti set b0='4L7LCGMES48M' where id=8; -update noar tt set v0='VUJ87D0CMPOFNG' where id=8; -update noar ti set v0='VUJ87D0CMPOFNG' where id=8; -update noar tt set b1='SYB3DUANMPK4IXEJMOZO7MOT' where id=8; -update noar ti set b1='SYB3DUANMPK4IXEJMOZO7MOT' where id=8; -update noar tt set v0='LJ29Y07Q6DJAE30N' where id=8; -update noar ti set v0='LJ29Y07Q6DJAE30N' where id=8; -update noar tt set b2='5AWE6LXUB6FIR' where id=8; -update noar ti set b2='5AWE6LXUB6FIR' where id=8; -update noar tt set v0='473NI0VBUSDFZ23K1AJI' where id=9; -update noar ti set v0='473NI0VBUSDFZ23K1AJI' where id=9; -update noar tt set b0='P51Z' where id=9; -update noar ti set b0='P51Z' where id=9; -update noar tt set v0='FRAA6BL9WJNW41FVYV9QOD' where id=9; -update noar ti set v0='FRAA6BL9WJNW41FVYV9QOD' where id=9; -update noar tt set b1='6' where id=9; -update noar ti set b1='6' where id=9; -update noar tt set v0='1PBUUP4FQ7JM0X7UI74' where id=9; -update noar ti set v0='1PBUUP4FQ7JM0X7UI74' where id=9; -update noar tt set b2='QR0UZI72K5L29M5OLZ4SVRK' where id=9; -update noar ti set b2='QR0UZI72K5L29M5OLZ4SVRK' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 blob not null, - b1 longblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='AWFE8OQ1E1FO616TR7OA8ZTDT' where id=1; -update noar ti set v0='AWFE8OQ1E1FO616TR7OA8ZTDT' where id=1; -update noar tt set b0='7M102Z0M5R8EXZA4MI' where id=1; -update noar ti set b0='7M102Z0M5R8EXZA4MI' where id=1; -update noar tt set v0='BZG96LW0GOYAO' where id=1; -update noar ti set v0='BZG96LW0GOYAO' where id=1; -update noar tt set b1='T7Z89JTW0OEH13HF' where id=1; -update noar ti set b1='T7Z89JTW0OEH13HF' where id=1; -update noar tt set v0='91320WY5GSJA6N65DXCONIX163S7' where id=1; -update noar ti set v0='91320WY5GSJA6N65DXCONIX163S7' where id=1; -update noar tt set b2='IF0X0DEUDQOP2BIFVD' where id=1; -update noar ti set b2='IF0X0DEUDQOP2BIFVD' where id=1; -update noar tt set v0='Q0TQ9DG5BEENYOCHS03TUWRJG3A' where id=2; -update noar ti set v0='Q0TQ9DG5BEENYOCHS03TUWRJG3A' where id=2; -update noar tt set b0='YE4X5D3SMYWLRW2ZP5' where id=2; -update noar ti set b0='YE4X5D3SMYWLRW2ZP5' where id=2; -update noar tt set v0='SSLVY5' where id=2; -update noar ti set v0='SSLVY5' where id=2; -update noar tt set b1='7WZ18ILWYI5GC61L7VET3' where id=2; -update noar ti set b1='7WZ18ILWYI5GC61L7VET3' where id=2; -update noar tt set v0='J' where id=2; -update noar ti set v0='J' where id=2; -update noar tt set b2='05X1RO4GKWOYUP3K0SKDLA86Z1XX6BT' where id=2; -update noar ti set b2='05X1RO4GKWOYUP3K0SKDLA86Z1XX6BT' where id=2; -update noar tt set v0='M5MQVR' where id=3; -update noar ti set v0='M5MQVR' where id=3; -update noar tt set b0='TIR2UKCSOFMYUGO5472TD5RT' where id=3; -update noar ti set b0='TIR2UKCSOFMYUGO5472TD5RT' where id=3; -update noar tt set v0='FT2LNNOJWJFVG14IW' where id=3; -update noar ti set v0='FT2LNNOJWJFVG14IW' where id=3; -update noar tt set b1='9TOOWAH' where id=3; -update noar ti set b1='9TOOWAH' where id=3; -update noar tt set v0='XJ9K78' where id=3; -update noar ti set v0='XJ9K78' where id=3; -update noar tt set b2='ESBLTK' where id=3; -update noar ti set b2='ESBLTK' where id=3; -update noar tt set v0='7O29PDQQNPO0NFH4DPQXZVVE9F' where id=4; -update noar ti set v0='7O29PDQQNPO0NFH4DPQXZVVE9F' where id=4; -update noar tt set b0='0HBYFECN9ASG0NR4TQDID0ZCM9L' where id=4; -update noar ti set b0='0HBYFECN9ASG0NR4TQDID0ZCM9L' where id=4; -update noar tt set v0='VSPY1QPYTK3YQ9K6JB5H4DM73R' where id=4; -update noar ti set v0='VSPY1QPYTK3YQ9K6JB5H4DM73R' where id=4; -update noar tt set b1='WK7AB8INJZCO3DL' where id=4; -update noar ti set b1='WK7AB8INJZCO3DL' where id=4; -update noar tt set v0='HM8L2S28FSA2HDQS7MINDGT' where id=4; -update noar ti set v0='HM8L2S28FSA2HDQS7MINDGT' where id=4; -update noar tt set b2='ACW' where id=4; -update noar ti set b2='ACW' where id=4; -update noar tt set v0='OAOKG5L8IRQ8OZ18ZI2BRF' where id=5; -update noar ti set v0='OAOKG5L8IRQ8OZ18ZI2BRF' where id=5; -update noar tt set b0='K1' where id=5; -update noar ti set b0='K1' where id=5; -update noar tt set v0='L0Q6TG79RL' where id=5; -update noar ti set v0='L0Q6TG79RL' where id=5; -update noar tt set b1='WDCNMFM31AKKEDRPI3ZIQ16M' where id=5; -update noar ti set b1='WDCNMFM31AKKEDRPI3ZIQ16M' where id=5; -update noar tt set v0='GRB3S6LSLPCLQDNAMLM0DRK9IH' where id=5; -update noar ti set v0='GRB3S6LSLPCLQDNAMLM0DRK9IH' where id=5; -update noar tt set b2='7NNEEXBI0ERDRW23FWRNP2KQRBLEQ' where id=5; -update noar ti set b2='7NNEEXBI0ERDRW23FWRNP2KQRBLEQ' where id=5; -update noar tt set v0='PHZD7ULA1W51VT6PMI739XZS' where id=6; -update noar ti set v0='PHZD7ULA1W51VT6PMI739XZS' where id=6; -update noar tt set b0='3945SX04W11J04Y' where id=6; -update noar ti set b0='3945SX04W11J04Y' where id=6; -update noar tt set v0='WUZ70OI7ZTV0KWOEMI' where id=6; -update noar ti set v0='WUZ70OI7ZTV0KWOEMI' where id=6; -update noar tt set b1='T' where id=6; -update noar ti set b1='T' where id=6; -update noar tt set v0='EZMOHX14Y0FR' where id=6; -update noar ti set v0='EZMOHX14Y0FR' where id=6; -update noar tt set b2='C74Q08PFU7SBTAEG52OAAHCO' where id=6; -update noar ti set b2='C74Q08PFU7SBTAEG52OAAHCO' where id=6; -update noar tt set v0='P' where id=7; -update noar ti set v0='P' where id=7; -update noar tt set b0='R6GJD95LYE46' where id=7; -update noar ti set b0='R6GJD95LYE46' where id=7; -update noar tt set v0='WG1CHOSEPFH36RKB6RY51WS' where id=7; -update noar ti set v0='WG1CHOSEPFH36RKB6RY51WS' where id=7; -update noar tt set b1='7XTOK' where id=7; -update noar ti set b1='7XTOK' where id=7; -update noar tt set v0='06YRMX0QP6SG6QUJJ19NKZXHR6' where id=7; -update noar ti set v0='06YRMX0QP6SG6QUJJ19NKZXHR6' where id=7; -update noar tt set b2='Q2HM9KS8CBTGYVCL3C31X' where id=7; -update noar ti set b2='Q2HM9KS8CBTGYVCL3C31X' where id=7; -update noar tt set v0='327KGVFXPA0316FT1ZA8XIAIX0H' where id=8; -update noar ti set v0='327KGVFXPA0316FT1ZA8XIAIX0H' where id=8; -update noar tt set b0='X3X361PXNR44Q6G5WIN5IRAVFIS5I' where id=8; -update noar ti set b0='X3X361PXNR44Q6G5WIN5IRAVFIS5I' where id=8; -update noar tt set v0='98UZSF9BUM1ROH0OV2' where id=8; -update noar ti set v0='98UZSF9BUM1ROH0OV2' where id=8; -update noar tt set b1='ZNCHZH8NQL' where id=8; -update noar ti set b1='ZNCHZH8NQL' where id=8; -update noar tt set v0='48FBHIG0N5XHHEA' where id=8; -update noar ti set v0='48FBHIG0N5XHHEA' where id=8; -update noar tt set b2='HUQ0S0HOHKD61ZZEOVR1LNV14H' where id=8; -update noar ti set b2='HUQ0S0HOHKD61ZZEOVR1LNV14H' where id=8; -update noar tt set v0='WIHJDOI6ILQLS833AI2R' where id=9; -update noar ti set v0='WIHJDOI6ILQLS833AI2R' where id=9; -update noar tt set b0='0UNZKDPCS' where id=9; -update noar ti set b0='0UNZKDPCS' where id=9; -update noar tt set v0='FZTQKCGIQS7HZGS2WF' where id=9; -update noar ti set v0='FZTQKCGIQS7HZGS2WF' where id=9; -update noar tt set b1='4IGWIHGSWCD96XWQVST4VQF5' where id=9; -update noar ti set b1='4IGWIHGSWCD96XWQVST4VQF5' where id=9; -update noar tt set v0='M9J50DDC5GT8KBKXWT97728CEEJ' where id=9; -update noar ti set v0='M9J50DDC5GT8KBKXWT97728CEEJ' where id=9; -update noar tt set b2='EKL1PKSRVRH40RFY' where id=9; -update noar ti set b2='EKL1PKSRVRH40RFY' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 blob not null, - b1 longblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='ON34SW6GOI6YEEYHIT4T' where id=1; -update noar ti set v0='ON34SW6GOI6YEEYHIT4T' where id=1; -update noar tt set b0='3EEMUY3P90' where id=1; -update noar ti set b0='3EEMUY3P90' where id=1; -update noar tt set v0='TS' where id=1; -update noar ti set v0='TS' where id=1; -update noar tt set b1='RLHOOZDTBQ' where id=1; -update noar ti set b1='RLHOOZDTBQ' where id=1; -update noar tt set v0='NRWUFVX65P9X8MOWQ5GPFV' where id=1; -update noar ti set v0='NRWUFVX65P9X8MOWQ5GPFV' where id=1; -update noar tt set b2='Q4GQLMZ5BJIMDC' where id=1; -update noar ti set b2='Q4GQLMZ5BJIMDC' where id=1; -update noar tt set v0='K5NIM86I5JB1T2X8L6G8NS6OG6W' where id=2; -update noar ti set v0='K5NIM86I5JB1T2X8L6G8NS6OG6W' where id=2; -update noar tt set b0='FT36QBK4MBMEEM0SPLDRNJ' where id=2; -update noar ti set b0='FT36QBK4MBMEEM0SPLDRNJ' where id=2; -update noar tt set v0='7ZV6MWYKYGTW5BPOFL' where id=2; -update noar ti set v0='7ZV6MWYKYGTW5BPOFL' where id=2; -update noar tt set b1='X0RXBN4YT8MR8GKIGX2ZCCDG5DH' where id=2; -update noar ti set b1='X0RXBN4YT8MR8GKIGX2ZCCDG5DH' where id=2; -update noar tt set v0='G9AKVXO3' where id=2; -update noar ti set v0='G9AKVXO3' where id=2; -update noar tt set b2='OOBQ3OEFKS7E1H0SQYTJVPPJMEN4' where id=2; -update noar ti set b2='OOBQ3OEFKS7E1H0SQYTJVPPJMEN4' where id=2; -update noar tt set v0='4' where id=3; -update noar ti set v0='4' where id=3; -update noar tt set b0='X7IAILF08583IT1IY17V5ZFGIGHDWLX3' where id=3; -update noar ti set b0='X7IAILF08583IT1IY17V5ZFGIGHDWLX3' where id=3; -update noar tt set v0='NWXHVFO9Z' where id=3; -update noar ti set v0='NWXHVFO9Z' where id=3; -update noar tt set b1='XNIIUSPF3GWN2K1AFIEMS41' where id=3; -update noar ti set b1='XNIIUSPF3GWN2K1AFIEMS41' where id=3; -update noar tt set v0='LIGMTF924REBH0J' where id=3; -update noar ti set v0='LIGMTF924REBH0J' where id=3; -update noar tt set b2='RS10M9NA5F1J0GV' where id=3; -update noar ti set b2='RS10M9NA5F1J0GV' where id=3; -update noar tt set v0='LQ0MQIWDN98C408QFP' where id=4; -update noar ti set v0='LQ0MQIWDN98C408QFP' where id=4; -update noar tt set b0='RR9OW' where id=4; -update noar ti set b0='RR9OW' where id=4; -update noar tt set v0='BOYZEYFH2XSTMHCU71XKPZ6FD90QTV9X' where id=4; -update noar ti set v0='BOYZEYFH2XSTMHCU71XKPZ6FD90QTV9X' where id=4; -update noar tt set b1='W2QU4XKNZ511' where id=4; -update noar ti set b1='W2QU4XKNZ511' where id=4; -update noar tt set v0='1RWRMZD0KA5Y0BAU2WYJTP2ZWR' where id=4; -update noar ti set v0='1RWRMZD0KA5Y0BAU2WYJTP2ZWR' where id=4; -update noar tt set b2='7' where id=4; -update noar ti set b2='7' where id=4; -update noar tt set v0='EE' where id=5; -update noar ti set v0='EE' where id=5; -update noar tt set b0='5AL7CE92GT' where id=5; -update noar ti set b0='5AL7CE92GT' where id=5; -update noar tt set v0='BJIS15P17SGQP38FL1QPGZQODUGW4XZS' where id=5; -update noar ti set v0='BJIS15P17SGQP38FL1QPGZQODUGW4XZS' where id=5; -update noar tt set b1='Z1O6X4NWGQDI9I43JMSE4GN' where id=5; -update noar ti set b1='Z1O6X4NWGQDI9I43JMSE4GN' where id=5; -update noar tt set v0='FJTJIDC2ZPM9LXFGGQWRA' where id=5; -update noar ti set v0='FJTJIDC2ZPM9LXFGGQWRA' where id=5; -update noar tt set b2='T77QTT7V5LRZUAVHBVPD0ACV4F' where id=5; -update noar ti set b2='T77QTT7V5LRZUAVHBVPD0ACV4F' where id=5; -update noar tt set v0='GNT4L4J0V3' where id=6; -update noar ti set v0='GNT4L4J0V3' where id=6; -update noar tt set b0='FSGQ40SAQ2PW8G6BQJ3HOM302' where id=6; -update noar ti set b0='FSGQ40SAQ2PW8G6BQJ3HOM302' where id=6; -update noar tt set v0='YQ5' where id=6; -update noar ti set v0='YQ5' where id=6; -update noar tt set b1='XR80YMUF92' where id=6; -update noar ti set b1='XR80YMUF92' where id=6; -update noar tt set v0='PF309N31UIMVFI8EOHJOWQ6LO6NBMB5' where id=6; -update noar ti set v0='PF309N31UIMVFI8EOHJOWQ6LO6NBMB5' where id=6; -update noar tt set b2='VJC6LHQM9UZ3' where id=6; -update noar ti set b2='VJC6LHQM9UZ3' where id=6; -update noar tt set v0='YGQFQJG3Z7ZIBCL5EXT8' where id=7; -update noar ti set v0='YGQFQJG3Z7ZIBCL5EXT8' where id=7; -update noar tt set b0='FTGCCRU' where id=7; -update noar ti set b0='FTGCCRU' where id=7; -update noar tt set v0='WZAKE46509' where id=7; -update noar ti set v0='WZAKE46509' where id=7; -update noar tt set b1='CBUPWWIAHJVE67SCZ9G4TN7P' where id=7; -update noar ti set b1='CBUPWWIAHJVE67SCZ9G4TN7P' where id=7; -update noar tt set v0='RTJ03' where id=7; -update noar ti set v0='RTJ03' where id=7; -update noar tt set b2='VIB' where id=7; -update noar ti set b2='VIB' where id=7; -update noar tt set v0='NUCUQDLQF2TOBMSPFZ' where id=8; -update noar ti set v0='NUCUQDLQF2TOBMSPFZ' where id=8; -update noar tt set b0='5GHZ2PI8TS4L8WY4W' where id=8; -update noar ti set b0='5GHZ2PI8TS4L8WY4W' where id=8; -update noar tt set v0='JU40VR5TNNZKJCHMJ8' where id=8; -update noar ti set v0='JU40VR5TNNZKJCHMJ8' where id=8; -update noar tt set b1='QNG6B2' where id=8; -update noar ti set b1='QNG6B2' where id=8; -update noar tt set v0='CN4JHQQT26FW7AMLMDOCUJ83YB' where id=8; -update noar ti set v0='CN4JHQQT26FW7AMLMDOCUJ83YB' where id=8; -update noar tt set b2='IO6QT9W' where id=8; -update noar ti set b2='IO6QT9W' where id=8; -update noar tt set v0='GLT2IXMGUJKZF0ZO6Y0LIMPUR2RAR' where id=9; -update noar ti set v0='GLT2IXMGUJKZF0ZO6Y0LIMPUR2RAR' where id=9; -update noar tt set b0='GQOZIU419CI8AX' where id=9; -update noar ti set b0='GQOZIU419CI8AX' where id=9; -update noar tt set v0='G1847DTXD5K4TNE4DZKR7LW' where id=9; -update noar ti set v0='G1847DTXD5K4TNE4DZKR7LW' where id=9; -update noar tt set b1='N' where id=9; -update noar ti set b1='N' where id=9; -update noar tt set v0='CMHG24TNY0HE9JCV1K8QC2B3G' where id=9; -update noar ti set v0='CMHG24TNY0HE9JCV1K8QC2B3G' where id=9; -update noar tt set b2='YG759HGELB06KCMH0AGY' where id=9; -update noar ti set b2='YG759HGELB06KCMH0AGY' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 blob null, - b1 longblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='8Y3' where id=1; -update noar ti set v0='8Y3' where id=1; -update noar tt set b0='C7M20TP5NKK' where id=1; -update noar ti set b0='C7M20TP5NKK' where id=1; -update noar tt set v0='2ISG42PKQUYJ3' where id=1; -update noar ti set v0='2ISG42PKQUYJ3' where id=1; -update noar tt set b1='DJFRKU8X' where id=1; -update noar ti set b1='DJFRKU8X' where id=1; -update noar tt set v0='PEZLQW4KNI8KS99CT2C6AKZ1OK1' where id=1; -update noar ti set v0='PEZLQW4KNI8KS99CT2C6AKZ1OK1' where id=1; -update noar tt set b2='0FCRQVLB5DFDS3K6N26BCA1M1VMB403' where id=1; -update noar ti set b2='0FCRQVLB5DFDS3K6N26BCA1M1VMB403' where id=1; -update noar tt set v0='2U5V9ZSPD2MY3O25XXL2N6ZWB4Q6DWGE' where id=2; -update noar ti set v0='2U5V9ZSPD2MY3O25XXL2N6ZWB4Q6DWGE' where id=2; -update noar tt set b0='60O315' where id=2; -update noar ti set b0='60O315' where id=2; -update noar tt set v0='PFV4BEXLLRRNEEWTITGFSTS6' where id=2; -update noar ti set v0='PFV4BEXLLRRNEEWTITGFSTS6' where id=2; -update noar tt set b1='GFO8M01KOUXFD5A02OU3C4ZTGQZ8O' where id=2; -update noar ti set b1='GFO8M01KOUXFD5A02OU3C4ZTGQZ8O' where id=2; -update noar tt set v0='IZR1' where id=2; -update noar ti set v0='IZR1' where id=2; -update noar tt set b2='F6SCCPN2NFEKZP79N' where id=2; -update noar ti set b2='F6SCCPN2NFEKZP79N' where id=2; -update noar tt set v0='1IYS8D2OL30ZWU' where id=3; -update noar ti set v0='1IYS8D2OL30ZWU' where id=3; -update noar tt set b0='DMPWIBQCEAZ9RTHU' where id=3; -update noar ti set b0='DMPWIBQCEAZ9RTHU' where id=3; -update noar tt set v0='ONDJ7B94EN77IXSXEF23' where id=3; -update noar ti set v0='ONDJ7B94EN77IXSXEF23' where id=3; -update noar tt set b1='UR0WSHTBS4QZ' where id=3; -update noar ti set b1='UR0WSHTBS4QZ' where id=3; -update noar tt set v0='7TXALEXNOTPQFQG1YOTBCC' where id=3; -update noar ti set v0='7TXALEXNOTPQFQG1YOTBCC' where id=3; -update noar tt set b2='Y51ZCWRUE6UNVFLQE8QFGJBUTW7KEEW1' where id=3; -update noar ti set b2='Y51ZCWRUE6UNVFLQE8QFGJBUTW7KEEW1' where id=3; -update noar tt set v0='GQ4J9YUIOHP1XMALJDZG2' where id=4; -update noar ti set v0='GQ4J9YUIOHP1XMALJDZG2' where id=4; -update noar tt set b0='5D77OFM2RCP8K34C4877' where id=4; -update noar ti set b0='5D77OFM2RCP8K34C4877' where id=4; -update noar tt set v0='DPWBEJKK1' where id=4; -update noar ti set v0='DPWBEJKK1' where id=4; -update noar tt set b1='4PY93OUIDUL' where id=4; -update noar ti set b1='4PY93OUIDUL' where id=4; -update noar tt set v0='9B3QUDM74XNPELR4FOJ7YNUA8OAQQ' where id=4; -update noar ti set v0='9B3QUDM74XNPELR4FOJ7YNUA8OAQQ' where id=4; -update noar tt set b2='U2P' where id=4; -update noar ti set b2='U2P' where id=4; -update noar tt set v0='MVLAAO6ZZW0EP54ZHQW2QASI9HHFSSZK' where id=5; -update noar ti set v0='MVLAAO6ZZW0EP54ZHQW2QASI9HHFSSZK' where id=5; -update noar tt set b0='5DEZK0A28PXP9R45E4H' where id=5; -update noar ti set b0='5DEZK0A28PXP9R45E4H' where id=5; -update noar tt set v0='YL2LGG579J7' where id=5; -update noar ti set v0='YL2LGG579J7' where id=5; -update noar tt set b1='0N3U8H04ENSBB0J67AJU517IT81VU7W' where id=5; -update noar ti set b1='0N3U8H04ENSBB0J67AJU517IT81VU7W' where id=5; -update noar tt set v0='GGGSMOO69KWTJGNBRNNWLOG8PA' where id=5; -update noar ti set v0='GGGSMOO69KWTJGNBRNNWLOG8PA' where id=5; -update noar tt set b2='3BUA5Q' where id=5; -update noar ti set b2='3BUA5Q' where id=5; -update noar tt set v0='2AIXGG2USKTI8A' where id=6; -update noar ti set v0='2AIXGG2USKTI8A' where id=6; -update noar tt set b0='511JOA3UVHFJXLI2GYXZOXXL19' where id=6; -update noar ti set b0='511JOA3UVHFJXLI2GYXZOXXL19' where id=6; -update noar tt set v0='YJ8YG420YXZAPER' where id=6; -update noar ti set v0='YJ8YG420YXZAPER' where id=6; -update noar tt set b1='TV52WC6AA7HTQ7RWVVZBUMS0N0H4IU' where id=6; -update noar ti set b1='TV52WC6AA7HTQ7RWVVZBUMS0N0H4IU' where id=6; -update noar tt set v0='9NTD8DMB8PTECD5MXFOEUJ5L87' where id=6; -update noar ti set v0='9NTD8DMB8PTECD5MXFOEUJ5L87' where id=6; -update noar tt set b2='HQXNBEL9KYL2DPIHAVNLEKBAM1' where id=6; -update noar ti set b2='HQXNBEL9KYL2DPIHAVNLEKBAM1' where id=6; -update noar tt set v0='WY3LFGM0OTK3RXC8KO7TX3' where id=7; -update noar ti set v0='WY3LFGM0OTK3RXC8KO7TX3' where id=7; -update noar tt set b0='UYICPWZAKPO1DRVSEJRMFG88' where id=7; -update noar ti set b0='UYICPWZAKPO1DRVSEJRMFG88' where id=7; -update noar tt set v0='H4XGE' where id=7; -update noar ti set v0='H4XGE' where id=7; -update noar tt set b1='HKJEJF6' where id=7; -update noar ti set b1='HKJEJF6' where id=7; -update noar tt set v0='Q713SG03E' where id=7; -update noar ti set v0='Q713SG03E' where id=7; -update noar tt set b2='S4BAN' where id=7; -update noar ti set b2='S4BAN' where id=7; -update noar tt set v0='GC' where id=8; -update noar ti set v0='GC' where id=8; -update noar tt set b0='CR5YQDGXFHQ56V77W4LU1FZSR4GBRC2' where id=8; -update noar ti set b0='CR5YQDGXFHQ56V77W4LU1FZSR4GBRC2' where id=8; -update noar tt set v0='QVRCYS8SH1GYKWKLPQ6' where id=8; -update noar ti set v0='QVRCYS8SH1GYKWKLPQ6' where id=8; -update noar tt set b1='6CNGJHSOMOQSCZAN4' where id=8; -update noar ti set b1='6CNGJHSOMOQSCZAN4' where id=8; -update noar tt set v0='N' where id=8; -update noar ti set v0='N' where id=8; -update noar tt set b2='LF8JOERZ8TANILPUAN3I2O56F7YBBG4G' where id=8; -update noar ti set b2='LF8JOERZ8TANILPUAN3I2O56F7YBBG4G' where id=8; -update noar tt set v0='RZ5TQBROVDMBNWF2F6BE8MNG946' where id=9; -update noar ti set v0='RZ5TQBROVDMBNWF2F6BE8MNG946' where id=9; -update noar tt set b0='OOHO1L' where id=9; -update noar ti set b0='OOHO1L' where id=9; -update noar tt set v0='18VCHBJ7W4KJY6CQDY' where id=9; -update noar ti set v0='18VCHBJ7W4KJY6CQDY' where id=9; -update noar tt set b1='X5BCUCM9VEDYYIAY5FZTNJ5W' where id=9; -update noar ti set b1='X5BCUCM9VEDYYIAY5FZTNJ5W' where id=9; -update noar tt set v0='Y3887D8R2CGZYP7AO4G8TTO7' where id=9; -update noar ti set v0='Y3887D8R2CGZYP7AO4G8TTO7' where id=9; -update noar tt set b2='MEOZ2COU46VAAX4' where id=9; -update noar ti set b2='MEOZ2COU46VAAX4' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 blob null, - b1 longblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='RP7CWTP0UNYRTSVWJ' where id=1; -update noar ti set v0='RP7CWTP0UNYRTSVWJ' where id=1; -update noar tt set b0='H2' where id=1; -update noar ti set b0='H2' where id=1; -update noar tt set v0='0BYL4R8G9HND4VMWMNEOQYO9' where id=1; -update noar ti set v0='0BYL4R8G9HND4VMWMNEOQYO9' where id=1; -update noar tt set b1='74PLQCVRJCRFHKJ07980K4' where id=1; -update noar ti set b1='74PLQCVRJCRFHKJ07980K4' where id=1; -update noar tt set v0='MK7QYEG8UCHEHAMZ2JQKP' where id=1; -update noar ti set v0='MK7QYEG8UCHEHAMZ2JQKP' where id=1; -update noar tt set b2='VNS6MMZLULKB5SU9' where id=1; -update noar ti set b2='VNS6MMZLULKB5SU9' where id=1; -update noar tt set v0='96EA6JRIE0MHA74K2KZXMWBSBK' where id=2; -update noar ti set v0='96EA6JRIE0MHA74K2KZXMWBSBK' where id=2; -update noar tt set b0='3M1LFR91' where id=2; -update noar ti set b0='3M1LFR91' where id=2; -update noar tt set v0='06YHVUESSO3LYS396W6BT1N5' where id=2; -update noar ti set v0='06YHVUESSO3LYS396W6BT1N5' where id=2; -update noar tt set b1='I90L6' where id=2; -update noar ti set b1='I90L6' where id=2; -update noar tt set v0='QJLNAMAIIDUG' where id=2; -update noar ti set v0='QJLNAMAIIDUG' where id=2; -update noar tt set b2='A171AT8ZDPY2OBR4S9' where id=2; -update noar ti set b2='A171AT8ZDPY2OBR4S9' where id=2; -update noar tt set v0='IKZBS4K2' where id=3; -update noar ti set v0='IKZBS4K2' where id=3; -update noar tt set b0='20LSQ9JLF7U0XTML' where id=3; -update noar ti set b0='20LSQ9JLF7U0XTML' where id=3; -update noar tt set v0='EXFXU7IHYHLM1Q7DSIXH5RKJJICBH6' where id=3; -update noar ti set v0='EXFXU7IHYHLM1Q7DSIXH5RKJJICBH6' where id=3; -update noar tt set b1='TJ8ZKT1NVUS918LZTFZ' where id=3; -update noar ti set b1='TJ8ZKT1NVUS918LZTFZ' where id=3; -update noar tt set v0='E30DI811ATKH5LX37NGY9COGEK' where id=3; -update noar ti set v0='E30DI811ATKH5LX37NGY9COGEK' where id=3; -update noar tt set b2='GEN6IEOKW3R' where id=3; -update noar ti set b2='GEN6IEOKW3R' where id=3; -update noar tt set v0='VLBNSU6647' where id=4; -update noar ti set v0='VLBNSU6647' where id=4; -update noar tt set b0='F7BZVRUAUUJGS2ZIVILP7U' where id=4; -update noar ti set b0='F7BZVRUAUUJGS2ZIVILP7U' where id=4; -update noar tt set v0='6VGCON4QPOA483EDJVG1CS6L03L' where id=4; -update noar ti set v0='6VGCON4QPOA483EDJVG1CS6L03L' where id=4; -update noar tt set b1='6VOAVF' where id=4; -update noar ti set b1='6VOAVF' where id=4; -update noar tt set v0='DHGRTS4E1MLFO' where id=4; -update noar ti set v0='DHGRTS4E1MLFO' where id=4; -update noar tt set b2='VSNUPD' where id=4; -update noar ti set b2='VSNUPD' where id=4; -update noar tt set v0='X6RI4L2Z05NM5K0Y84K6W8R2' where id=5; -update noar ti set v0='X6RI4L2Z05NM5K0Y84K6W8R2' where id=5; -update noar tt set b0='Q3CPKIN7AWZC' where id=5; -update noar ti set b0='Q3CPKIN7AWZC' where id=5; -update noar tt set v0='MP8YMBMBNS' where id=5; -update noar ti set v0='MP8YMBMBNS' where id=5; -update noar tt set b1='A4OPRVH33' where id=5; -update noar ti set b1='A4OPRVH33' where id=5; -update noar tt set v0='ITJG7Y1DTTGHZ9HAXAOOFJVQ01HF4G' where id=5; -update noar ti set v0='ITJG7Y1DTTGHZ9HAXAOOFJVQ01HF4G' where id=5; -update noar tt set b2='5RGR4DZQ43CDXC' where id=5; -update noar ti set b2='5RGR4DZQ43CDXC' where id=5; -update noar tt set v0='D87Y5WN' where id=6; -update noar ti set v0='D87Y5WN' where id=6; -update noar tt set b0='G' where id=6; -update noar ti set b0='G' where id=6; -update noar tt set v0='YQ752CPTFT1WSLNV6' where id=6; -update noar ti set v0='YQ752CPTFT1WSLNV6' where id=6; -update noar tt set b1='RA3HNHL8I52HH9JK' where id=6; -update noar ti set b1='RA3HNHL8I52HH9JK' where id=6; -update noar tt set v0='NX90WCPXSPNQRAB0ATBXRA7UYV2DSE' where id=6; -update noar ti set v0='NX90WCPXSPNQRAB0ATBXRA7UYV2DSE' where id=6; -update noar tt set b2='BBUGZA' where id=6; -update noar ti set b2='BBUGZA' where id=6; -update noar tt set v0='EJBS46I' where id=7; -update noar ti set v0='EJBS46I' where id=7; -update noar tt set b0='ZKBUAPNC4GXPS2M23143M7SQID' where id=7; -update noar ti set b0='ZKBUAPNC4GXPS2M23143M7SQID' where id=7; -update noar tt set v0='53U' where id=7; -update noar ti set v0='53U' where id=7; -update noar tt set b1='30GQ4PWIB6DFFUDL4GSPNEJCLIELT' where id=7; -update noar ti set b1='30GQ4PWIB6DFFUDL4GSPNEJCLIELT' where id=7; -update noar tt set v0='MEN8ZFINIGCU5YBK' where id=7; -update noar ti set v0='MEN8ZFINIGCU5YBK' where id=7; -update noar tt set b2='8TZX5AAU' where id=7; -update noar ti set b2='8TZX5AAU' where id=7; -update noar tt set v0='QQIRMPX87NJUOM7D5YU60G' where id=8; -update noar ti set v0='QQIRMPX87NJUOM7D5YU60G' where id=8; -update noar tt set b0='OPP90DRY9PMJ' where id=8; -update noar ti set b0='OPP90DRY9PMJ' where id=8; -update noar tt set v0='S5SZXMSXGTGAQAN10B3WGRF' where id=8; -update noar ti set v0='S5SZXMSXGTGAQAN10B3WGRF' where id=8; -update noar tt set b1='YQHIORNSVLA9L3' where id=8; -update noar ti set b1='YQHIORNSVLA9L3' where id=8; -update noar tt set v0='LWH7YTTWDTZGOVMB9CV' where id=8; -update noar ti set v0='LWH7YTTWDTZGOVMB9CV' where id=8; -update noar tt set b2='IR85OPJI921MQBRY88DK' where id=8; -update noar ti set b2='IR85OPJI921MQBRY88DK' where id=8; -update noar tt set v0='2BHA6BWS0PIGZCO42TQM38RUD25QD' where id=9; -update noar ti set v0='2BHA6BWS0PIGZCO42TQM38RUD25QD' where id=9; -update noar tt set b0='I6KHR6I' where id=9; -update noar ti set b0='I6KHR6I' where id=9; -update noar tt set v0='10LFBX0LYRDXGF4BJFKZQJNH0H' where id=9; -update noar ti set v0='10LFBX0LYRDXGF4BJFKZQJNH0H' where id=9; -update noar tt set b1='BLLTY4V80DHCX3DKDTMO1W0C66' where id=9; -update noar ti set b1='BLLTY4V80DHCX3DKDTMO1W0C66' where id=9; -update noar tt set v0='Q7JDC3F3C406B5OT10ALKRW64' where id=9; -update noar ti set v0='Q7JDC3F3C406B5OT10ALKRW64' where id=9; -update noar tt set b2='FO9726N1GEAAEUJ8ZVT84A' where id=9; -update noar ti set b2='FO9726N1GEAAEUJ8ZVT84A' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 blob not null, - b1 longblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='YVHFGA42' where id=1; -update noar ti set v0='YVHFGA42' where id=1; -update noar tt set b0='HPI' where id=1; -update noar ti set b0='HPI' where id=1; -update noar tt set v0='9KCNJW1XEJNCTJ' where id=1; -update noar ti set v0='9KCNJW1XEJNCTJ' where id=1; -update noar tt set b1='5HM7OIWEYRIJSF5YMFLYDPCVC' where id=1; -update noar ti set b1='5HM7OIWEYRIJSF5YMFLYDPCVC' where id=1; -update noar tt set v0='FARLMBQ' where id=1; -update noar ti set v0='FARLMBQ' where id=1; -update noar tt set b2='B0U7' where id=1; -update noar ti set b2='B0U7' where id=1; -update noar tt set v0='8DQNPHJFW9NZ' where id=2; -update noar ti set v0='8DQNPHJFW9NZ' where id=2; -update noar tt set b0='32PJQ7I' where id=2; -update noar ti set b0='32PJQ7I' where id=2; -update noar tt set v0='F3Z80HY0GY5SP54HPQU' where id=2; -update noar ti set v0='F3Z80HY0GY5SP54HPQU' where id=2; -update noar tt set b1='GIVWCKC8KQ4PM0H09D7SDG4' where id=2; -update noar ti set b1='GIVWCKC8KQ4PM0H09D7SDG4' where id=2; -update noar tt set v0='C27ZNH7GEPTN3CO5OPT58TYN83' where id=2; -update noar ti set v0='C27ZNH7GEPTN3CO5OPT58TYN83' where id=2; -update noar tt set b2='0FAX88NDEI52FNB66D064YQW' where id=2; -update noar ti set b2='0FAX88NDEI52FNB66D064YQW' where id=2; -update noar tt set v0='7Z04R5C2FY11XMMR0HA340YMR' where id=3; -update noar ti set v0='7Z04R5C2FY11XMMR0HA340YMR' where id=3; -update noar tt set b0='SHFIZYCW92IFDXA9UH0FDLVUXB' where id=3; -update noar ti set b0='SHFIZYCW92IFDXA9UH0FDLVUXB' where id=3; -update noar tt set v0='FE6TR27YNM1UJXY5HPJ2EU01BD' where id=3; -update noar ti set v0='FE6TR27YNM1UJXY5HPJ2EU01BD' where id=3; -update noar tt set b1='XNLAQ0QDRM502A' where id=3; -update noar ti set b1='XNLAQ0QDRM502A' where id=3; -update noar tt set v0='P8HOG53Z2OAN70M1M' where id=3; -update noar ti set v0='P8HOG53Z2OAN70M1M' where id=3; -update noar tt set b2='M' where id=3; -update noar ti set b2='M' where id=3; -update noar tt set v0='M0B5P0BNTNWKXVZY1SFGAF5TC0W4WT' where id=4; -update noar ti set v0='M0B5P0BNTNWKXVZY1SFGAF5TC0W4WT' where id=4; -update noar tt set b0='Y3Q16O' where id=4; -update noar ti set b0='Y3Q16O' where id=4; -update noar tt set v0='9M24D39D' where id=4; -update noar ti set v0='9M24D39D' where id=4; -update noar tt set b1='AUBI2H1VOR96B6PA4UKU0GLG4D' where id=4; -update noar ti set b1='AUBI2H1VOR96B6PA4UKU0GLG4D' where id=4; -update noar tt set v0='LBXCA1WZQT66K7PH2M1BHZKDWA7KAHH' where id=4; -update noar ti set v0='LBXCA1WZQT66K7PH2M1BHZKDWA7KAHH' where id=4; -update noar tt set b2='0P76Y65Y80Z8DWTM887J1ZD67BITJIK5' where id=4; -update noar ti set b2='0P76Y65Y80Z8DWTM887J1ZD67BITJIK5' where id=4; -update noar tt set v0='MKOA85VC40EUBGFZ08N5B6Y47THV' where id=5; -update noar ti set v0='MKOA85VC40EUBGFZ08N5B6Y47THV' where id=5; -update noar tt set b0='NKSCZJW6YW7O1BQ5FD' where id=5; -update noar ti set b0='NKSCZJW6YW7O1BQ5FD' where id=5; -update noar tt set v0='KG5U7CLTSLBNPASK6J00' where id=5; -update noar ti set v0='KG5U7CLTSLBNPASK6J00' where id=5; -update noar tt set b1='N7WKLPO9F5M6G7NNBQ4PS92O0' where id=5; -update noar ti set b1='N7WKLPO9F5M6G7NNBQ4PS92O0' where id=5; -update noar tt set v0='3GF7X10QAZCAEOJYHR' where id=5; -update noar ti set v0='3GF7X10QAZCAEOJYHR' where id=5; -update noar tt set b2='5E9UZGJVSA961R' where id=5; -update noar ti set b2='5E9UZGJVSA961R' where id=5; -update noar tt set v0='INOMBPQ13' where id=6; -update noar ti set v0='INOMBPQ13' where id=6; -update noar tt set b0='RV0VI8DJOQTFY1VRUBW8GPIQRIM' where id=6; -update noar ti set b0='RV0VI8DJOQTFY1VRUBW8GPIQRIM' where id=6; -update noar tt set v0='SLZYIEH0GSQO9Y976SJM7OY8WCAMC9P' where id=6; -update noar ti set v0='SLZYIEH0GSQO9Y976SJM7OY8WCAMC9P' where id=6; -update noar tt set b1='GQX6P0XBP8' where id=6; -update noar ti set b1='GQX6P0XBP8' where id=6; -update noar tt set v0='V5LX63EOP5E6HS2' where id=6; -update noar ti set v0='V5LX63EOP5E6HS2' where id=6; -update noar tt set b2='6GWMAJ3669T307F' where id=6; -update noar ti set b2='6GWMAJ3669T307F' where id=6; -update noar tt set v0='E9TZWKCMRA044PE' where id=7; -update noar ti set v0='E9TZWKCMRA044PE' where id=7; -update noar tt set b0='CYFARUDS8CWCU9DORMII02N' where id=7; -update noar ti set b0='CYFARUDS8CWCU9DORMII02N' where id=7; -update noar tt set v0='X0CD7MR8FBLJFLQE135KUJ' where id=7; -update noar ti set v0='X0CD7MR8FBLJFLQE135KUJ' where id=7; -update noar tt set b1='874BRIOJU3INV0ZO6RB6SRN8CW' where id=7; -update noar ti set b1='874BRIOJU3INV0ZO6RB6SRN8CW' where id=7; -update noar tt set v0='FCNKRMJ' where id=7; -update noar ti set v0='FCNKRMJ' where id=7; -update noar tt set b2='VIYE91QZ7VLSV65FV' where id=7; -update noar ti set b2='VIYE91QZ7VLSV65FV' where id=7; -update noar tt set v0='LO9ZZY3E49X86LDO7DPJL2' where id=8; -update noar ti set v0='LO9ZZY3E49X86LDO7DPJL2' where id=8; -update noar tt set b0='KEGTD0' where id=8; -update noar ti set b0='KEGTD0' where id=8; -update noar tt set v0='XTDJQZCQUBQJKY0MV7FF2GA8A2' where id=8; -update noar ti set v0='XTDJQZCQUBQJKY0MV7FF2GA8A2' where id=8; -update noar tt set b1='CR6RYHAGWYQCIC6MJXWZTXC75FJA' where id=8; -update noar ti set b1='CR6RYHAGWYQCIC6MJXWZTXC75FJA' where id=8; -update noar tt set v0='59DD448RJKL' where id=8; -update noar ti set v0='59DD448RJKL' where id=8; -update noar tt set b2='TYWB' where id=8; -update noar ti set b2='TYWB' where id=8; -update noar tt set v0='YCZ0R65OSXPKXYY8N' where id=9; -update noar ti set v0='YCZ0R65OSXPKXYY8N' where id=9; -update noar tt set b0='HVQ3C5DNERP4C' where id=9; -update noar ti set b0='HVQ3C5DNERP4C' where id=9; -update noar tt set v0='U4E9M3DB6978B0T' where id=9; -update noar ti set v0='U4E9M3DB6978B0T' where id=9; -update noar tt set b1='VQ2UVBMRQHOHUJ795XYEPJ40J71DX' where id=9; -update noar ti set b1='VQ2UVBMRQHOHUJ795XYEPJ40J71DX' where id=9; -update noar tt set v0='YD46X1R2QUQNP8M6G1LJWNA1WRXP3Y5A' where id=9; -update noar ti set v0='YD46X1R2QUQNP8M6G1LJWNA1WRXP3Y5A' where id=9; -update noar tt set b2='N1IIZHXVX1K4G0' where id=9; -update noar ti set b2='N1IIZHXVX1K4G0' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 blob not null, - b1 longblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='NZXJ90XMYGTZB0RPJ0SP' where id=1; -update noar ti set v0='NZXJ90XMYGTZB0RPJ0SP' where id=1; -update noar tt set b0='899T3TVG2LTTORAWL0EGI' where id=1; -update noar ti set b0='899T3TVG2LTTORAWL0EGI' where id=1; -update noar tt set v0='5WFSQGFMY56Z1' where id=1; -update noar ti set v0='5WFSQGFMY56Z1' where id=1; -update noar tt set b1='ZL4YN6BLROC' where id=1; -update noar ti set b1='ZL4YN6BLROC' where id=1; -update noar tt set v0='PB824GVF4HHU3Y2UVN' where id=1; -update noar ti set v0='PB824GVF4HHU3Y2UVN' where id=1; -update noar tt set b2='19GG3J899DOC8WC99RNU0RK26' where id=1; -update noar ti set b2='19GG3J899DOC8WC99RNU0RK26' where id=1; -update noar tt set v0='UY7IA5MSI3' where id=2; -update noar ti set v0='UY7IA5MSI3' where id=2; -update noar tt set b0='DAYFUPLX' where id=2; -update noar ti set b0='DAYFUPLX' where id=2; -update noar tt set v0='ST' where id=2; -update noar ti set v0='ST' where id=2; -update noar tt set b1='AJEDD3ZC41' where id=2; -update noar ti set b1='AJEDD3ZC41' where id=2; -update noar tt set v0='4HO1RIGUZBMM' where id=2; -update noar ti set v0='4HO1RIGUZBMM' where id=2; -update noar tt set b2='7MH6L7XZKI6' where id=2; -update noar ti set b2='7MH6L7XZKI6' where id=2; -update noar tt set v0='FYJO84BHH5XUW564WW6590JZC374' where id=3; -update noar ti set v0='FYJO84BHH5XUW564WW6590JZC374' where id=3; -update noar tt set b0='F78S' where id=3; -update noar ti set b0='F78S' where id=3; -update noar tt set v0='04AHZK5P' where id=3; -update noar ti set v0='04AHZK5P' where id=3; -update noar tt set b1='4Q27EG2ZAA470C0Q7CZIQFDQ' where id=3; -update noar ti set b1='4Q27EG2ZAA470C0Q7CZIQFDQ' where id=3; -update noar tt set v0='SE798L3AERBT' where id=3; -update noar ti set v0='SE798L3AERBT' where id=3; -update noar tt set b2='69NY2N5FI7NZSXDHX7WAFO4T2FX3GDJ' where id=3; -update noar ti set b2='69NY2N5FI7NZSXDHX7WAFO4T2FX3GDJ' where id=3; -update noar tt set v0='D1CS' where id=4; -update noar ti set v0='D1CS' where id=4; -update noar tt set b0='YZTDGG649QB218Y' where id=4; -update noar ti set b0='YZTDGG649QB218Y' where id=4; -update noar tt set v0='YYKDWWOPOCWEG' where id=4; -update noar ti set v0='YYKDWWOPOCWEG' where id=4; -update noar tt set b1='BGBJIOYDJ2ERACX1K2M' where id=4; -update noar ti set b1='BGBJIOYDJ2ERACX1K2M' where id=4; -update noar tt set v0='JJDK5' where id=4; -update noar ti set v0='JJDK5' where id=4; -update noar tt set b2='QHOYQLYML19MXXSKS43J59J' where id=4; -update noar ti set b2='QHOYQLYML19MXXSKS43J59J' where id=4; -update noar tt set v0='VCK2G203AHNV7EX891M730A193LV' where id=5; -update noar ti set v0='VCK2G203AHNV7EX891M730A193LV' where id=5; -update noar tt set b0='T2S0' where id=5; -update noar ti set b0='T2S0' where id=5; -update noar tt set v0='8' where id=5; -update noar ti set v0='8' where id=5; -update noar tt set b1='ELNBDW3T2PMKSEAQU' where id=5; -update noar ti set b1='ELNBDW3T2PMKSEAQU' where id=5; -update noar tt set v0='LFQ' where id=5; -update noar ti set v0='LFQ' where id=5; -update noar tt set b2='SJUBUB3UBQWIQA31KPVI9H' where id=5; -update noar ti set b2='SJUBUB3UBQWIQA31KPVI9H' where id=5; -update noar tt set v0='ZP3ZSSQZFF0T7D0YKQXH304XCO' where id=6; -update noar ti set v0='ZP3ZSSQZFF0T7D0YKQXH304XCO' where id=6; -update noar tt set b0='L0I6318E4K78XR0SLC9O17' where id=6; -update noar ti set b0='L0I6318E4K78XR0SLC9O17' where id=6; -update noar tt set v0='92XSYU2J9AKJWFFIK8KCWDC2VDQLU9' where id=6; -update noar ti set v0='92XSYU2J9AKJWFFIK8KCWDC2VDQLU9' where id=6; -update noar tt set b1='S2EH5G24' where id=6; -update noar ti set b1='S2EH5G24' where id=6; -update noar tt set v0='I2AWY65O5PQH64U7NA8Q8VHV8BRB8IBN' where id=6; -update noar ti set v0='I2AWY65O5PQH64U7NA8Q8VHV8BRB8IBN' where id=6; -update noar tt set b2='FRF1CMSYYDWPVO050SGL' where id=6; -update noar ti set b2='FRF1CMSYYDWPVO050SGL' where id=6; -update noar tt set v0='0RJQEC8XWVE' where id=7; -update noar ti set v0='0RJQEC8XWVE' where id=7; -update noar tt set b0='BGYPMLS81YE0UD9O0MQS' where id=7; -update noar ti set b0='BGYPMLS81YE0UD9O0MQS' where id=7; -update noar tt set v0='CTTJCMWL5PRDAHRQJZB' where id=7; -update noar ti set v0='CTTJCMWL5PRDAHRQJZB' where id=7; -update noar tt set b1='AXO03UIKOVM54NNSMY' where id=7; -update noar ti set b1='AXO03UIKOVM54NNSMY' where id=7; -update noar tt set v0='S' where id=7; -update noar ti set v0='S' where id=7; -update noar tt set b2='0FH7H9L93D6M7QQOKU5MBRLL' where id=7; -update noar ti set b2='0FH7H9L93D6M7QQOKU5MBRLL' where id=7; -update noar tt set v0='PABN14PGJECJNR2NVYGBR1IW9FXLH' where id=8; -update noar ti set v0='PABN14PGJECJNR2NVYGBR1IW9FXLH' where id=8; -update noar tt set b0='66ZN5LOOHOQJLVEBVV2MT7ZOS16OD' where id=8; -update noar ti set b0='66ZN5LOOHOQJLVEBVV2MT7ZOS16OD' where id=8; -update noar tt set v0='NDYQOZG3I453DTRYOUJB' where id=8; -update noar ti set v0='NDYQOZG3I453DTRYOUJB' where id=8; -update noar tt set b1='13XJRQY1BLHQOQJ' where id=8; -update noar ti set b1='13XJRQY1BLHQOQJ' where id=8; -update noar tt set v0='YGN19TJZC6WB94WKQAFG52SXDY2AX8O9' where id=8; -update noar ti set v0='YGN19TJZC6WB94WKQAFG52SXDY2AX8O9' where id=8; -update noar tt set b2='DKRRR284ZNLL4H6892' where id=8; -update noar ti set b2='DKRRR284ZNLL4H6892' where id=8; -update noar tt set v0='OJPSA' where id=9; -update noar ti set v0='OJPSA' where id=9; -update noar tt set b0='7ORBM8TWGMI73CHH4ER4' where id=9; -update noar ti set b0='7ORBM8TWGMI73CHH4ER4' where id=9; -update noar tt set v0='4HN7HS70D8UEW5ZQ84YG4T9IY8NDQ' where id=9; -update noar ti set v0='4HN7HS70D8UEW5ZQ84YG4T9IY8NDQ' where id=9; -update noar tt set b1='ZFVVPTZJI' where id=9; -update noar ti set b1='ZFVVPTZJI' where id=9; -update noar tt set v0='CU8YLJVTI98PLG7R7QCGSPAH3' where id=9; -update noar ti set v0='CU8YLJVTI98PLG7R7QCGSPAH3' where id=9; -update noar tt set b2='O9ZCW1UZH396XV0HQ8JWR6OF4V0S9QFV' where id=9; -update noar ti set b2='O9ZCW1UZH396XV0HQ8JWR6OF4V0S9QFV' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 blob null, - b1 longblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='36KMNYF5NQKSZRZ8B3NT6BQ5WWLV93Y' where id=1; -update noar ti set v0='36KMNYF5NQKSZRZ8B3NT6BQ5WWLV93Y' where id=1; -update noar tt set b0='VWGRXG0U33O5W4IQKEG0ZULMK' where id=1; -update noar ti set b0='VWGRXG0U33O5W4IQKEG0ZULMK' where id=1; -update noar tt set v0='27MIGXJ3DB00VUCM7PQ0ZFXI84OVCDUJ' where id=1; -update noar ti set v0='27MIGXJ3DB00VUCM7PQ0ZFXI84OVCDUJ' where id=1; -update noar tt set b1='9GK4QDNY7' where id=1; -update noar ti set b1='9GK4QDNY7' where id=1; -update noar tt set v0='220TDAQR0S228' where id=1; -update noar ti set v0='220TDAQR0S228' where id=1; -update noar tt set b2='Q7WA0N66ESPQVU1YUMEK8AMG1538J' where id=1; -update noar ti set b2='Q7WA0N66ESPQVU1YUMEK8AMG1538J' where id=1; -update noar tt set v0='T8PKEN7YQ2DBHUV' where id=2; -update noar ti set v0='T8PKEN7YQ2DBHUV' where id=2; -update noar tt set b0='WL01LKNKI8' where id=2; -update noar ti set b0='WL01LKNKI8' where id=2; -update noar tt set v0='W7RC63VP494IICS1' where id=2; -update noar ti set v0='W7RC63VP494IICS1' where id=2; -update noar tt set b1='8QZDJ6AIXM2G0BHSOTQ0' where id=2; -update noar ti set b1='8QZDJ6AIXM2G0BHSOTQ0' where id=2; -update noar tt set v0='Q9X' where id=2; -update noar ti set v0='Q9X' where id=2; -update noar tt set b2='XWOOLZJTO6PNJWE4S' where id=2; -update noar ti set b2='XWOOLZJTO6PNJWE4S' where id=2; -update noar tt set v0='TGJQV42' where id=3; -update noar ti set v0='TGJQV42' where id=3; -update noar tt set b0='VU0VTJE' where id=3; -update noar ti set b0='VU0VTJE' where id=3; -update noar tt set v0='FTX5462YZHTVU1QR93APBM' where id=3; -update noar ti set v0='FTX5462YZHTVU1QR93APBM' where id=3; -update noar tt set b1='OYJ37WNO7OTI' where id=3; -update noar ti set b1='OYJ37WNO7OTI' where id=3; -update noar tt set v0='L82CWAAF' where id=3; -update noar ti set v0='L82CWAAF' where id=3; -update noar tt set b2='RNEZY454' where id=3; -update noar ti set b2='RNEZY454' where id=3; -update noar tt set v0='RLIQ5GKZCTI07UW9Q' where id=4; -update noar ti set v0='RLIQ5GKZCTI07UW9Q' where id=4; -update noar tt set b0='D5FJAZPUPS8TJ7WY8P1ZY1SUSRHCBW' where id=4; -update noar ti set b0='D5FJAZPUPS8TJ7WY8P1ZY1SUSRHCBW' where id=4; -update noar tt set v0='GS' where id=4; -update noar ti set v0='GS' where id=4; -update noar tt set b1='33JH8B09ERBN1LBNN8H281M5AE' where id=4; -update noar ti set b1='33JH8B09ERBN1LBNN8H281M5AE' where id=4; -update noar tt set v0='GI564DW56VC' where id=4; -update noar ti set v0='GI564DW56VC' where id=4; -update noar tt set b2='TX01EYJTTJX' where id=4; -update noar ti set b2='TX01EYJTTJX' where id=4; -update noar tt set v0='0F8VHUHJ6CUIHQLR9PZT' where id=5; -update noar ti set v0='0F8VHUHJ6CUIHQLR9PZT' where id=5; -update noar tt set b0='Z69YU9VI8ZHM' where id=5; -update noar ti set b0='Z69YU9VI8ZHM' where id=5; -update noar tt set v0='Y35VBO01MV4C10508UFR3OTFTMFWP7' where id=5; -update noar ti set v0='Y35VBO01MV4C10508UFR3OTFTMFWP7' where id=5; -update noar tt set b1='2P6WTYSX3PMUDI187GJJR4' where id=5; -update noar ti set b1='2P6WTYSX3PMUDI187GJJR4' where id=5; -update noar tt set v0='FOMM99M2AK9LMR2SOM557ZK9PR9UAMFV' where id=5; -update noar ti set v0='FOMM99M2AK9LMR2SOM557ZK9PR9UAMFV' where id=5; -update noar tt set b2='D' where id=5; -update noar ti set b2='D' where id=5; -update noar tt set v0='U4GVVIMBZVBJ4HW6B993N8KOYGT3' where id=6; -update noar ti set v0='U4GVVIMBZVBJ4HW6B993N8KOYGT3' where id=6; -update noar tt set b0='LUOLZXIZ30H' where id=6; -update noar ti set b0='LUOLZXIZ30H' where id=6; -update noar tt set v0='TZDUN3455DA96FRNMHSJTKW121' where id=6; -update noar ti set v0='TZDUN3455DA96FRNMHSJTKW121' where id=6; -update noar tt set b1='FU3BZXDWC6GL2D2M0R6EC' where id=6; -update noar ti set b1='FU3BZXDWC6GL2D2M0R6EC' where id=6; -update noar tt set v0='O' where id=6; -update noar ti set v0='O' where id=6; -update noar tt set b2='5Q79G9LOE5A6CJZLIFK9M4M2' where id=6; -update noar ti set b2='5Q79G9LOE5A6CJZLIFK9M4M2' where id=6; -update noar tt set v0='33DS53D2Q8Q4ZTA993KH3DBPG6F' where id=7; -update noar ti set v0='33DS53D2Q8Q4ZTA993KH3DBPG6F' where id=7; -update noar tt set b0='510IELL5TIQ' where id=7; -update noar ti set b0='510IELL5TIQ' where id=7; -update noar tt set v0='LA' where id=7; -update noar ti set v0='LA' where id=7; -update noar tt set b1='NAKPR7XF101' where id=7; -update noar ti set b1='NAKPR7XF101' where id=7; -update noar tt set v0='2I66AU2BE0I4Q2AAH7QUU' where id=7; -update noar ti set v0='2I66AU2BE0I4Q2AAH7QUU' where id=7; -update noar tt set b2='X2UW2JDND' where id=7; -update noar ti set b2='X2UW2JDND' where id=7; -update noar tt set v0='2' where id=8; -update noar ti set v0='2' where id=8; -update noar tt set b0='ZS3ZF156GO6ZAYVJ00Y790DIRY2Q' where id=8; -update noar ti set b0='ZS3ZF156GO6ZAYVJ00Y790DIRY2Q' where id=8; -update noar tt set v0='AK7UEQIXG2MEVJL30USL2AQI15HX' where id=8; -update noar ti set v0='AK7UEQIXG2MEVJL30USL2AQI15HX' where id=8; -update noar tt set b1='Z59OU7MLQBBYG7M2KH7T08QAF' where id=8; -update noar ti set b1='Z59OU7MLQBBYG7M2KH7T08QAF' where id=8; -update noar tt set v0='AHSHR' where id=8; -update noar ti set v0='AHSHR' where id=8; -update noar tt set b2='TA37' where id=8; -update noar ti set b2='TA37' where id=8; -update noar tt set v0='V' where id=9; -update noar ti set v0='V' where id=9; -update noar tt set b0='E5IK99NWBORU2GYA086QGPO95431GYI' where id=9; -update noar ti set b0='E5IK99NWBORU2GYA086QGPO95431GYI' where id=9; -update noar tt set v0='M9VWOEWL017NV1MUF4XD4M28J8ZGKFWB' where id=9; -update noar ti set v0='M9VWOEWL017NV1MUF4XD4M28J8ZGKFWB' where id=9; -update noar tt set b1='OE9AZQG51FA7N' where id=9; -update noar ti set b1='OE9AZQG51FA7N' where id=9; -update noar tt set v0='QBCNTLTYHXJ91NB' where id=9; -update noar ti set v0='QBCNTLTYHXJ91NB' where id=9; -update noar tt set b2='7GNGQJHI1VGP8KAT6NOG3JTS' where id=9; -update noar ti set b2='7GNGQJHI1VGP8KAT6NOG3JTS' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 blob null, - b1 longblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='F9SRLA1L6XW8G7I' where id=1; -update noar ti set v0='F9SRLA1L6XW8G7I' where id=1; -update noar tt set b0='1R0FIE9LHUS1E0TJ2J5V' where id=1; -update noar ti set b0='1R0FIE9LHUS1E0TJ2J5V' where id=1; -update noar tt set v0='GFGRMUYF8LFZ4MTH' where id=1; -update noar ti set v0='GFGRMUYF8LFZ4MTH' where id=1; -update noar tt set b1='ZAX573ZJ8BWE9CEHMV2G' where id=1; -update noar ti set b1='ZAX573ZJ8BWE9CEHMV2G' where id=1; -update noar tt set v0='N75WAONFYAW9VNVFZ32F0C969V7J' where id=1; -update noar ti set v0='N75WAONFYAW9VNVFZ32F0C969V7J' where id=1; -update noar tt set b2='VJRFNWXXRVT244W' where id=1; -update noar ti set b2='VJRFNWXXRVT244W' where id=1; -update noar tt set v0='NHHV' where id=2; -update noar ti set v0='NHHV' where id=2; -update noar tt set b0='QRXI3XWRJC178QDPJUCHACA4I' where id=2; -update noar ti set b0='QRXI3XWRJC178QDPJUCHACA4I' where id=2; -update noar tt set v0='4W1RJI4O' where id=2; -update noar ti set v0='4W1RJI4O' where id=2; -update noar tt set b1='6UNKUOUYQ8LOK8493O3XRAP4G' where id=2; -update noar ti set b1='6UNKUOUYQ8LOK8493O3XRAP4G' where id=2; -update noar tt set v0='L8T4NICFI7R0FFJ3E0JTE4HQS7MKAVNQ' where id=2; -update noar ti set v0='L8T4NICFI7R0FFJ3E0JTE4HQS7MKAVNQ' where id=2; -update noar tt set b2='YS0BD73CG' where id=2; -update noar ti set b2='YS0BD73CG' where id=2; -update noar tt set v0='BFA8GU' where id=3; -update noar ti set v0='BFA8GU' where id=3; -update noar tt set b0='3TGDMLX3MVSBD7N' where id=3; -update noar ti set b0='3TGDMLX3MVSBD7N' where id=3; -update noar tt set v0='DDINNLNT6' where id=3; -update noar ti set v0='DDINNLNT6' where id=3; -update noar tt set b1='HFFJNY1SGGMLS1LQE1YE544F5V' where id=3; -update noar ti set b1='HFFJNY1SGGMLS1LQE1YE544F5V' where id=3; -update noar tt set v0='ANCK0PGOZK' where id=3; -update noar ti set v0='ANCK0PGOZK' where id=3; -update noar tt set b2='R2ASFCSZKFXYJBDG2FZRLR5B' where id=3; -update noar ti set b2='R2ASFCSZKFXYJBDG2FZRLR5B' where id=3; -update noar tt set v0='KM3T2BH7R' where id=4; -update noar ti set v0='KM3T2BH7R' where id=4; -update noar tt set b0='9QR92IX522BZ7AIPZZXO1B5AI' where id=4; -update noar ti set b0='9QR92IX522BZ7AIPZZXO1B5AI' where id=4; -update noar tt set v0='7MQYNJ9RQXNHDZ68ETY' where id=4; -update noar ti set v0='7MQYNJ9RQXNHDZ68ETY' where id=4; -update noar tt set b1='0BMRIM' where id=4; -update noar ti set b1='0BMRIM' where id=4; -update noar tt set v0='2TN0H' where id=4; -update noar ti set v0='2TN0H' where id=4; -update noar tt set b2='23HGJ7Y1Z3FX' where id=4; -update noar ti set b2='23HGJ7Y1Z3FX' where id=4; -update noar tt set v0='LH2XL3XT5I47KPX2TVIIQPXZDC3K39GB' where id=5; -update noar ti set v0='LH2XL3XT5I47KPX2TVIIQPXZDC3K39GB' where id=5; -update noar tt set b0='AH5LZY459R' where id=5; -update noar ti set b0='AH5LZY459R' where id=5; -update noar tt set v0='275SHUBF9TBQHCS5Y2VUZLLO4ZO8WB' where id=5; -update noar ti set v0='275SHUBF9TBQHCS5Y2VUZLLO4ZO8WB' where id=5; -update noar tt set b1='1BAZ4G' where id=5; -update noar ti set b1='1BAZ4G' where id=5; -update noar tt set v0='D1T565BLUVDR4SOB8FHYHC4WR7MJ' where id=5; -update noar ti set v0='D1T565BLUVDR4SOB8FHYHC4WR7MJ' where id=5; -update noar tt set b2='LUKV' where id=5; -update noar ti set b2='LUKV' where id=5; -update noar tt set v0='SUQQLE' where id=6; -update noar ti set v0='SUQQLE' where id=6; -update noar tt set b0='8VWUK367J11K' where id=6; -update noar ti set b0='8VWUK367J11K' where id=6; -update noar tt set v0='KKZYFQ8HEXUX5L48RYGP278Y5D0J' where id=6; -update noar ti set v0='KKZYFQ8HEXUX5L48RYGP278Y5D0J' where id=6; -update noar tt set b1='CKP1A21X9AIW' where id=6; -update noar ti set b1='CKP1A21X9AIW' where id=6; -update noar tt set v0='K96G2ALJ44L06PBS5VA0KH9CSM2SB' where id=6; -update noar ti set v0='K96G2ALJ44L06PBS5VA0KH9CSM2SB' where id=6; -update noar tt set b2='0FMYLMDSORQLHY7JT187WLC3WJG' where id=6; -update noar ti set b2='0FMYLMDSORQLHY7JT187WLC3WJG' where id=6; -update noar tt set v0='JST20FUIF8GXL2VD5I0W9AS74ZTJ4Z' where id=7; -update noar ti set v0='JST20FUIF8GXL2VD5I0W9AS74ZTJ4Z' where id=7; -update noar tt set b0='IX4BGOC6G4E6VPV' where id=7; -update noar ti set b0='IX4BGOC6G4E6VPV' where id=7; -update noar tt set v0='J8L0PFWFN97' where id=7; -update noar ti set v0='J8L0PFWFN97' where id=7; -update noar tt set b1='KJNKRUW' where id=7; -update noar ti set b1='KJNKRUW' where id=7; -update noar tt set v0='TMN8DX' where id=7; -update noar ti set v0='TMN8DX' where id=7; -update noar tt set b2='QEFNIA4ERU' where id=7; -update noar ti set b2='QEFNIA4ERU' where id=7; -update noar tt set v0='MY55UD7WQD71PFOJQRD9LM2ILO6D13' where id=8; -update noar ti set v0='MY55UD7WQD71PFOJQRD9LM2ILO6D13' where id=8; -update noar tt set b0='9O168LWC0QCZ9NAOK' where id=8; -update noar ti set b0='9O168LWC0QCZ9NAOK' where id=8; -update noar tt set v0='175I7P3ZZVOXUQDPJ' where id=8; -update noar ti set v0='175I7P3ZZVOXUQDPJ' where id=8; -update noar tt set b1='N1NU66JIEZN50OA033HHMGQBBMQZ' where id=8; -update noar ti set b1='N1NU66JIEZN50OA033HHMGQBBMQZ' where id=8; -update noar tt set v0='O53YWI64GQXZ28PMG' where id=8; -update noar ti set v0='O53YWI64GQXZ28PMG' where id=8; -update noar tt set b2='6M39DYZQFD0NBDO4BT1TIFPU6MA3FZN' where id=8; -update noar ti set b2='6M39DYZQFD0NBDO4BT1TIFPU6MA3FZN' where id=8; -update noar tt set v0='QGS20CI8JOGZ2LN' where id=9; -update noar ti set v0='QGS20CI8JOGZ2LN' where id=9; -update noar tt set b0='KIB8R1IQL40HELLBSAY4' where id=9; -update noar ti set b0='KIB8R1IQL40HELLBSAY4' where id=9; -update noar tt set v0='R1YQ39NFTA5HJ3Q39TOO' where id=9; -update noar ti set v0='R1YQ39NFTA5HJ3Q39TOO' where id=9; -update noar tt set b1='MH9UJ5OOLBNZX23HNO0E3SB' where id=9; -update noar ti set b1='MH9UJ5OOLBNZX23HNO0E3SB' where id=9; -update noar tt set v0='LHF' where id=9; -update noar ti set v0='LHF' where id=9; -update noar tt set b2='DQQGUYRR7FK' where id=9; -update noar ti set b2='DQQGUYRR7FK' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 blob not null, - b1 longblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='8GPLQ2H6LCXQQLUCX6H2434S' where id=1; -update noar ti set v0='8GPLQ2H6LCXQQLUCX6H2434S' where id=1; -update noar tt set b0='OWH8WXM0V0G671FPP70N' where id=1; -update noar ti set b0='OWH8WXM0V0G671FPP70N' where id=1; -update noar tt set v0='WKLTCEGNAPP' where id=1; -update noar ti set v0='WKLTCEGNAPP' where id=1; -update noar tt set b1='4LELLB9RSCP01SH92F8B' where id=1; -update noar ti set b1='4LELLB9RSCP01SH92F8B' where id=1; -update noar tt set v0='804B4UA7K8' where id=1; -update noar ti set v0='804B4UA7K8' where id=1; -update noar tt set b2='G422L880BT609WEAFFBUPVZ7GHTA1EA' where id=1; -update noar ti set b2='G422L880BT609WEAFFBUPVZ7GHTA1EA' where id=1; -update noar tt set v0='EF7BZ2K2GIYMQ8EJJDHMDYF' where id=2; -update noar ti set v0='EF7BZ2K2GIYMQ8EJJDHMDYF' where id=2; -update noar tt set b0='019XDLGIAZNU1' where id=2; -update noar ti set b0='019XDLGIAZNU1' where id=2; -update noar tt set v0='D78JVO6AGD0XB2ZGTBE6Q' where id=2; -update noar ti set v0='D78JVO6AGD0XB2ZGTBE6Q' where id=2; -update noar tt set b1='QFKJ29' where id=2; -update noar ti set b1='QFKJ29' where id=2; -update noar tt set v0='KODEDFT5AVALRJE642GBAY53PK0RR9' where id=2; -update noar ti set v0='KODEDFT5AVALRJE642GBAY53PK0RR9' where id=2; -update noar tt set b2='15AP6UCOLW810J1PTG' where id=2; -update noar ti set b2='15AP6UCOLW810J1PTG' where id=2; -update noar tt set v0='XAL' where id=3; -update noar ti set v0='XAL' where id=3; -update noar tt set b0='7J26PRN8C83FX9NTDGA2MTYO' where id=3; -update noar ti set b0='7J26PRN8C83FX9NTDGA2MTYO' where id=3; -update noar tt set v0='9NEEYNNPVW8OYO2MXZ' where id=3; -update noar ti set v0='9NEEYNNPVW8OYO2MXZ' where id=3; -update noar tt set b1='RZYPB09VJK8S0I5DPFTESBDQ9I' where id=3; -update noar ti set b1='RZYPB09VJK8S0I5DPFTESBDQ9I' where id=3; -update noar tt set v0='LA96L307Q927TU' where id=3; -update noar ti set v0='LA96L307Q927TU' where id=3; -update noar tt set b2='ULVU8VA4GEJXXTCGNHPFZC59IOK' where id=3; -update noar ti set b2='ULVU8VA4GEJXXTCGNHPFZC59IOK' where id=3; -update noar tt set v0='L3JDAZ0UVBF4R6VBG2NAY8' where id=4; -update noar ti set v0='L3JDAZ0UVBF4R6VBG2NAY8' where id=4; -update noar tt set b0='RPFSCVC8PI1HJ2780I40ZXYCPDA4D' where id=4; -update noar ti set b0='RPFSCVC8PI1HJ2780I40ZXYCPDA4D' where id=4; -update noar tt set v0='PH6L9IJMI1BORWBE6JUKD814KIL7YGL' where id=4; -update noar ti set v0='PH6L9IJMI1BORWBE6JUKD814KIL7YGL' where id=4; -update noar tt set b1='Y9AZEIZKYP0H0VB' where id=4; -update noar ti set b1='Y9AZEIZKYP0H0VB' where id=4; -update noar tt set v0='D2JE4G1XVQRM16MB0XZNTN6' where id=4; -update noar ti set v0='D2JE4G1XVQRM16MB0XZNTN6' where id=4; -update noar tt set b2='S9NH5SHX' where id=4; -update noar ti set b2='S9NH5SHX' where id=4; -update noar tt set v0='V9F2ZSL37WLS0X0SK6G' where id=5; -update noar ti set v0='V9F2ZSL37WLS0X0SK6G' where id=5; -update noar tt set b0='DX2' where id=5; -update noar ti set b0='DX2' where id=5; -update noar tt set v0='JWO3EVP5FP4KQ4YSQ3G1' where id=5; -update noar ti set v0='JWO3EVP5FP4KQ4YSQ3G1' where id=5; -update noar tt set b1='SBK3GDH7956ACJVK3E4M9J3PSQ7XF4' where id=5; -update noar ti set b1='SBK3GDH7956ACJVK3E4M9J3PSQ7XF4' where id=5; -update noar tt set v0='PCSJTMOGEAB' where id=5; -update noar ti set v0='PCSJTMOGEAB' where id=5; -update noar tt set b2='07C940PPX' where id=5; -update noar ti set b2='07C940PPX' where id=5; -update noar tt set v0='8THA7J0M3BWE5' where id=6; -update noar ti set v0='8THA7J0M3BWE5' where id=6; -update noar tt set b0='WKKLD98GM7JZ2YOQQC6JXWISIYJDIT' where id=6; -update noar ti set b0='WKKLD98GM7JZ2YOQQC6JXWISIYJDIT' where id=6; -update noar tt set v0='L50POLU0VDY3IFU' where id=6; -update noar ti set v0='L50POLU0VDY3IFU' where id=6; -update noar tt set b1='1X3ZIUSKN6EMJA5UU3JWF21F7VT761S' where id=6; -update noar ti set b1='1X3ZIUSKN6EMJA5UU3JWF21F7VT761S' where id=6; -update noar tt set v0='PMS7' where id=6; -update noar ti set v0='PMS7' where id=6; -update noar tt set b2='PJJND65FI1RSKM' where id=6; -update noar ti set b2='PJJND65FI1RSKM' where id=6; -update noar tt set v0='WMRC9AMUZKFOU5NZEGJ6L6' where id=7; -update noar ti set v0='WMRC9AMUZKFOU5NZEGJ6L6' where id=7; -update noar tt set b0='PJC8' where id=7; -update noar ti set b0='PJC8' where id=7; -update noar tt set v0='TIF00BS3S3RQ37N427XB2' where id=7; -update noar ti set v0='TIF00BS3S3RQ37N427XB2' where id=7; -update noar tt set b1='78XD267G1' where id=7; -update noar ti set b1='78XD267G1' where id=7; -update noar tt set v0='1ZN70DJC6' where id=7; -update noar ti set v0='1ZN70DJC6' where id=7; -update noar tt set b2='DP851L3AKBXNIVAF' where id=7; -update noar ti set b2='DP851L3AKBXNIVAF' where id=7; -update noar tt set v0='MESI2ZCXKXYYQXCDZN2L1C0KRD' where id=8; -update noar ti set v0='MESI2ZCXKXYYQXCDZN2L1C0KRD' where id=8; -update noar tt set b0='D6N' where id=8; -update noar ti set b0='D6N' where id=8; -update noar tt set v0='88WP5W36R47SP0QAYZDN11' where id=8; -update noar ti set v0='88WP5W36R47SP0QAYZDN11' where id=8; -update noar tt set b1='ZYGGU58Q3X0N261OA98ALJ4' where id=8; -update noar ti set b1='ZYGGU58Q3X0N261OA98ALJ4' where id=8; -update noar tt set v0='L082YDCPXZXWI' where id=8; -update noar ti set v0='L082YDCPXZXWI' where id=8; -update noar tt set b2='EENU1' where id=8; -update noar ti set b2='EENU1' where id=8; -update noar tt set v0='S5G3N7S9LN' where id=9; -update noar ti set v0='S5G3N7S9LN' where id=9; -update noar tt set b0='X988JCHG8CCJQP87E0QQOCB' where id=9; -update noar ti set b0='X988JCHG8CCJQP87E0QQOCB' where id=9; -update noar tt set v0='B' where id=9; -update noar ti set v0='B' where id=9; -update noar tt set b1='0111U1F9LIVZPDB5QBM6' where id=9; -update noar ti set b1='0111U1F9LIVZPDB5QBM6' where id=9; -update noar tt set v0='4' where id=9; -update noar ti set v0='4' where id=9; -update noar tt set b2='JIUCXC4UYQC0G2TY99LSPE2Y' where id=9; -update noar ti set b2='JIUCXC4UYQC0G2TY99LSPE2Y' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 blob not null, - b1 longblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='WZSWH6Y00NEN6LW041Y2X' where id=1; -update noar ti set v0='WZSWH6Y00NEN6LW041Y2X' where id=1; -update noar tt set b0='6Z34AM8J5KEB9L6ZG9BTY421' where id=1; -update noar ti set b0='6Z34AM8J5KEB9L6ZG9BTY421' where id=1; -update noar tt set v0='CJYE3HDWFIT105T5G755UH4BJF5F' where id=1; -update noar ti set v0='CJYE3HDWFIT105T5G755UH4BJF5F' where id=1; -update noar tt set b1='OAJMFRLU76X9' where id=1; -update noar ti set b1='OAJMFRLU76X9' where id=1; -update noar tt set v0='1MNBR3R5PO' where id=1; -update noar ti set v0='1MNBR3R5PO' where id=1; -update noar tt set b2='UAJ0SK7Q2' where id=1; -update noar ti set b2='UAJ0SK7Q2' where id=1; -update noar tt set v0='BHYUFIWO' where id=2; -update noar ti set v0='BHYUFIWO' where id=2; -update noar tt set b0='WDARKHG2KHYJ8SNPGW4CP5MQ6U' where id=2; -update noar ti set b0='WDARKHG2KHYJ8SNPGW4CP5MQ6U' where id=2; -update noar tt set v0='OPGVKNTX6C09DTKID835RMKNMOC' where id=2; -update noar ti set v0='OPGVKNTX6C09DTKID835RMKNMOC' where id=2; -update noar tt set b1='O9QYKCBWEX9I7M9YFMT79L0ZK9DBQ9K' where id=2; -update noar ti set b1='O9QYKCBWEX9I7M9YFMT79L0ZK9DBQ9K' where id=2; -update noar tt set v0='KOMB6YDSB9NN25J0AACL0ZXPAMWUS' where id=2; -update noar ti set v0='KOMB6YDSB9NN25J0AACL0ZXPAMWUS' where id=2; -update noar tt set b2='K8O8Z21YGQ36EGFN3N9ZLMD37CNR' where id=2; -update noar ti set b2='K8O8Z21YGQ36EGFN3N9ZLMD37CNR' where id=2; -update noar tt set v0='4V' where id=3; -update noar ti set v0='4V' where id=3; -update noar tt set b0='QGTAV0H4GYZ5MYRK' where id=3; -update noar ti set b0='QGTAV0H4GYZ5MYRK' where id=3; -update noar tt set v0='NTIH0EZO4UEGW7X' where id=3; -update noar ti set v0='NTIH0EZO4UEGW7X' where id=3; -update noar tt set b1='6' where id=3; -update noar ti set b1='6' where id=3; -update noar tt set v0='56FU430NGWJRUJ98FOV3RJO' where id=3; -update noar ti set v0='56FU430NGWJRUJ98FOV3RJO' where id=3; -update noar tt set b2='CXQ2G9K' where id=3; -update noar ti set b2='CXQ2G9K' where id=3; -update noar tt set v0='VOUUQ' where id=4; -update noar ti set v0='VOUUQ' where id=4; -update noar tt set b0='WXY8ZT0BCLM6R6W' where id=4; -update noar ti set b0='WXY8ZT0BCLM6R6W' where id=4; -update noar tt set v0='U0OCHRKJ1HJHD' where id=4; -update noar ti set v0='U0OCHRKJ1HJHD' where id=4; -update noar tt set b1='B6PXT' where id=4; -update noar ti set b1='B6PXT' where id=4; -update noar tt set v0='52F3' where id=4; -update noar ti set v0='52F3' where id=4; -update noar tt set b2='YLR1YSS8E' where id=4; -update noar ti set b2='YLR1YSS8E' where id=4; -update noar tt set v0='7OOCKIMW0WV7GOZ115YQ' where id=5; -update noar ti set v0='7OOCKIMW0WV7GOZ115YQ' where id=5; -update noar tt set b0='7OU06252VWH6UEVZICURW' where id=5; -update noar ti set b0='7OU06252VWH6UEVZICURW' where id=5; -update noar tt set v0='T1EGP3NK0IDPR272KG5CO3GNRMTNLXHL' where id=5; -update noar ti set v0='T1EGP3NK0IDPR272KG5CO3GNRMTNLXHL' where id=5; -update noar tt set b1='H8W88NALHVHLLHPRIB3RY4VVME' where id=5; -update noar ti set b1='H8W88NALHVHLLHPRIB3RY4VVME' where id=5; -update noar tt set v0='F5GCOHL7KHQ4S' where id=5; -update noar ti set v0='F5GCOHL7KHQ4S' where id=5; -update noar tt set b2='RW7B6C6P' where id=5; -update noar ti set b2='RW7B6C6P' where id=5; -update noar tt set v0='2WQJM2GDHN9Q3UWBPEAIP78WB39O' where id=6; -update noar ti set v0='2WQJM2GDHN9Q3UWBPEAIP78WB39O' where id=6; -update noar tt set b0='87OJCS' where id=6; -update noar ti set b0='87OJCS' where id=6; -update noar tt set v0='472AN273NG5Q' where id=6; -update noar ti set v0='472AN273NG5Q' where id=6; -update noar tt set b1='HNT294IXJ8N4EJYHQKO9YYE255' where id=6; -update noar ti set b1='HNT294IXJ8N4EJYHQKO9YYE255' where id=6; -update noar tt set v0='H0QD5UIMN6UCPXOOXDTG8W4W3P9HBCM' where id=6; -update noar ti set v0='H0QD5UIMN6UCPXOOXDTG8W4W3P9HBCM' where id=6; -update noar tt set b2='F0R9PBV0LPL7N9' where id=6; -update noar ti set b2='F0R9PBV0LPL7N9' where id=6; -update noar tt set v0='XIVVI6VRIFLQ6IMMI2Z63T9XK23' where id=7; -update noar ti set v0='XIVVI6VRIFLQ6IMMI2Z63T9XK23' where id=7; -update noar tt set b0='WRFHS6Q8UI876' where id=7; -update noar ti set b0='WRFHS6Q8UI876' where id=7; -update noar tt set v0='888748F25DODKPN6GWTK2CV' where id=7; -update noar ti set v0='888748F25DODKPN6GWTK2CV' where id=7; -update noar tt set b1='VKGMSYXPVF6ZDHNB60W9N3H' where id=7; -update noar ti set b1='VKGMSYXPVF6ZDHNB60W9N3H' where id=7; -update noar tt set v0='GX74AFF1DT6RN05U6B09Z25EEBQLHVNE' where id=7; -update noar ti set v0='GX74AFF1DT6RN05U6B09Z25EEBQLHVNE' where id=7; -update noar tt set b2='KX3CHWY' where id=7; -update noar ti set b2='KX3CHWY' where id=7; -update noar tt set v0='W26GMIS4TJ8SZ0NTB0' where id=8; -update noar ti set v0='W26GMIS4TJ8SZ0NTB0' where id=8; -update noar tt set b0='PE4M1VGOJHB827SC4OVO6PHOIIS6P' where id=8; -update noar ti set b0='PE4M1VGOJHB827SC4OVO6PHOIIS6P' where id=8; -update noar tt set v0='J2M1J648DI7SEYI' where id=8; -update noar ti set v0='J2M1J648DI7SEYI' where id=8; -update noar tt set b1='OL0DGZV9FUUUMRMFR0IC3T' where id=8; -update noar ti set b1='OL0DGZV9FUUUMRMFR0IC3T' where id=8; -update noar tt set v0='ART112HVZFQJ4WHZQ8O4E58CRJ2HT3CR' where id=8; -update noar ti set v0='ART112HVZFQJ4WHZQ8O4E58CRJ2HT3CR' where id=8; -update noar tt set b2='PMGAH6PHG49M7E17D5VG' where id=8; -update noar ti set b2='PMGAH6PHG49M7E17D5VG' where id=8; -update noar tt set v0='KZCETM9WZ0BRXYLZE0DVJ' where id=9; -update noar ti set v0='KZCETM9WZ0BRXYLZE0DVJ' where id=9; -update noar tt set b0='FLCCW8KG3E52QZ9QEMY1RS9' where id=9; -update noar ti set b0='FLCCW8KG3E52QZ9QEMY1RS9' where id=9; -update noar tt set v0='4SGDM' where id=9; -update noar ti set v0='4SGDM' where id=9; -update noar tt set b1='FZ0EYPWU4MCQXIBM6EXH5' where id=9; -update noar ti set b1='FZ0EYPWU4MCQXIBM6EXH5' where id=9; -update noar tt set v0='JJC0E3MZZM550RW7' where id=9; -update noar ti set v0='JJC0E3MZZM550RW7' where id=9; -update noar tt set b2='YJIWRO3B4K1' where id=9; -update noar ti set b2='YJIWRO3B4K1' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 mediumblob null, - b1 tinyblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='87OKZU5TLETJ9T' where id=1; -update noar ti set v0='87OKZU5TLETJ9T' where id=1; -update noar tt set b0='JQ3N4CVUKEV191GYDB36' where id=1; -update noar ti set b0='JQ3N4CVUKEV191GYDB36' where id=1; -update noar tt set v0='6H2VA1BO0JDX6D191H' where id=1; -update noar ti set v0='6H2VA1BO0JDX6D191H' where id=1; -update noar tt set b1='Q2O7HQXK5T29DUJUMAXI2DK9Y' where id=1; -update noar ti set b1='Q2O7HQXK5T29DUJUMAXI2DK9Y' where id=1; -update noar tt set v0='P2H5DRX87YA0Z6RE7J45LNOAG4' where id=1; -update noar ti set v0='P2H5DRX87YA0Z6RE7J45LNOAG4' where id=1; -update noar tt set b2='ENZPNC6850Q' where id=1; -update noar ti set b2='ENZPNC6850Q' where id=1; -update noar tt set v0='BSURJH' where id=2; -update noar ti set v0='BSURJH' where id=2; -update noar tt set b0='1GPTGGJZ9DVDZ' where id=2; -update noar ti set b0='1GPTGGJZ9DVDZ' where id=2; -update noar tt set v0='X7590G2SM4C5I9ED6ZU21K' where id=2; -update noar ti set v0='X7590G2SM4C5I9ED6ZU21K' where id=2; -update noar tt set b1='VJ50XM9WA2UJ' where id=2; -update noar ti set b1='VJ50XM9WA2UJ' where id=2; -update noar tt set v0='1LC' where id=2; -update noar ti set v0='1LC' where id=2; -update noar tt set b2='7CWQ1OOI3JNDILNDZ0DS' where id=2; -update noar ti set b2='7CWQ1OOI3JNDILNDZ0DS' where id=2; -update noar tt set v0='JWHWY6A036' where id=3; -update noar ti set v0='JWHWY6A036' where id=3; -update noar tt set b0='V0KAVOMO1LF74M1GMHHWF49B8X698I' where id=3; -update noar ti set b0='V0KAVOMO1LF74M1GMHHWF49B8X698I' where id=3; -update noar tt set v0='L17TX1AB6SHJ7M8HFZSJAFLFT4BE94Q' where id=3; -update noar ti set v0='L17TX1AB6SHJ7M8HFZSJAFLFT4BE94Q' where id=3; -update noar tt set b1='BJIT5VAWNMBSXKLZR4L' where id=3; -update noar ti set b1='BJIT5VAWNMBSXKLZR4L' where id=3; -update noar tt set v0='CI2T0ELF18IQMKK3SSG3998CF08VHY' where id=3; -update noar ti set v0='CI2T0ELF18IQMKK3SSG3998CF08VHY' where id=3; -update noar tt set b2='CNGJ9SOUI919F1F9RVPMORH7KFQI' where id=3; -update noar ti set b2='CNGJ9SOUI919F1F9RVPMORH7KFQI' where id=3; -update noar tt set v0='ZCQVS5L34ZTA1O7' where id=4; -update noar ti set v0='ZCQVS5L34ZTA1O7' where id=4; -update noar tt set b0='DUJ5T13XWFYQPH' where id=4; -update noar ti set b0='DUJ5T13XWFYQPH' where id=4; -update noar tt set v0='P0TI13' where id=4; -update noar ti set v0='P0TI13' where id=4; -update noar tt set b1='EW8VT5JNIA28TOFGL7WF0M' where id=4; -update noar ti set b1='EW8VT5JNIA28TOFGL7WF0M' where id=4; -update noar tt set v0='GRDLZOYORX' where id=4; -update noar ti set v0='GRDLZOYORX' where id=4; -update noar tt set b2='H777G5JWFCWAD7CT' where id=4; -update noar ti set b2='H777G5JWFCWAD7CT' where id=4; -update noar tt set v0='AOZLW58C3TA5WIJC' where id=5; -update noar ti set v0='AOZLW58C3TA5WIJC' where id=5; -update noar tt set b0='H9K1BEKCFP81GKZU7IFLT01HUDMEM' where id=5; -update noar ti set b0='H9K1BEKCFP81GKZU7IFLT01HUDMEM' where id=5; -update noar tt set v0='LEJ2LA26IS7CIER8' where id=5; -update noar ti set v0='LEJ2LA26IS7CIER8' where id=5; -update noar tt set b1='KR2P94MCZWOOHA7PDJC5AVTEC7' where id=5; -update noar ti set b1='KR2P94MCZWOOHA7PDJC5AVTEC7' where id=5; -update noar tt set v0='HAY0ECTW0P4X4W8NEM6WQRBVEERES41' where id=5; -update noar ti set v0='HAY0ECTW0P4X4W8NEM6WQRBVEERES41' where id=5; -update noar tt set b2='AGKM4732V' where id=5; -update noar ti set b2='AGKM4732V' where id=5; -update noar tt set v0='U0O' where id=6; -update noar ti set v0='U0O' where id=6; -update noar tt set b0='WAL3O8CHEENU20HYW9D9J4H8J8' where id=6; -update noar ti set b0='WAL3O8CHEENU20HYW9D9J4H8J8' where id=6; -update noar tt set v0='OQQKKH6C5GYZSMLX55WCSE4819' where id=6; -update noar ti set v0='OQQKKH6C5GYZSMLX55WCSE4819' where id=6; -update noar tt set b1='SUOM5TXOSVKS' where id=6; -update noar ti set b1='SUOM5TXOSVKS' where id=6; -update noar tt set v0='BA1P531' where id=6; -update noar ti set v0='BA1P531' where id=6; -update noar tt set b2='I5KHIU' where id=6; -update noar ti set b2='I5KHIU' where id=6; -update noar tt set v0='H3H77I10D7KRFLLSO' where id=7; -update noar ti set v0='H3H77I10D7KRFLLSO' where id=7; -update noar tt set b0='VXZP4KOH103TP4Z51FMW3M5FMWR7' where id=7; -update noar ti set b0='VXZP4KOH103TP4Z51FMW3M5FMWR7' where id=7; -update noar tt set v0='D4RS0KLDZ' where id=7; -update noar ti set v0='D4RS0KLDZ' where id=7; -update noar tt set b1='7651JKONMR6YVQCI2DQ0OFW' where id=7; -update noar ti set b1='7651JKONMR6YVQCI2DQ0OFW' where id=7; -update noar tt set v0='6F43F5' where id=7; -update noar ti set v0='6F43F5' where id=7; -update noar tt set b2='5' where id=7; -update noar ti set b2='5' where id=7; -update noar tt set v0='DI1D4FLY1Z8' where id=8; -update noar ti set v0='DI1D4FLY1Z8' where id=8; -update noar tt set b0='FB1YJ7E9W798NQL4TW8F74KMMH7R' where id=8; -update noar ti set b0='FB1YJ7E9W798NQL4TW8F74KMMH7R' where id=8; -update noar tt set v0='QC28GGVYIPJM4ZYJHC0W7EJKH' where id=8; -update noar ti set v0='QC28GGVYIPJM4ZYJHC0W7EJKH' where id=8; -update noar tt set b1='N3E0PL' where id=8; -update noar ti set b1='N3E0PL' where id=8; -update noar tt set v0='MOQX7FSSX3QI8' where id=8; -update noar ti set v0='MOQX7FSSX3QI8' where id=8; -update noar tt set b2='5CDFC24QUIYV2FMNGIZJD2J3H' where id=8; -update noar ti set b2='5CDFC24QUIYV2FMNGIZJD2J3H' where id=8; -update noar tt set v0='WPSCP04B3GBJB' where id=9; -update noar ti set v0='WPSCP04B3GBJB' where id=9; -update noar tt set b0='Q1J' where id=9; -update noar ti set b0='Q1J' where id=9; -update noar tt set v0='3JFAM9DDGY90ICTOPP645I1AI1N' where id=9; -update noar ti set v0='3JFAM9DDGY90ICTOPP645I1AI1N' where id=9; -update noar tt set b1='OJTTYWDTQE079C790LB6ZF3NAIOLHF6O' where id=9; -update noar ti set b1='OJTTYWDTQE079C790LB6ZF3NAIOLHF6O' where id=9; -update noar tt set v0='HG0R66VTQS0QK8P49YQ' where id=9; -update noar ti set v0='HG0R66VTQS0QK8P49YQ' where id=9; -update noar tt set b2='39PANN16' where id=9; -update noar ti set b2='39PANN16' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 mediumblob null, - b1 tinyblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='1SC4OSLOMRIC' where id=1; -update noar ti set v0='1SC4OSLOMRIC' where id=1; -update noar tt set b0='W4IZAY3GJFUTN0PKPKA' where id=1; -update noar ti set b0='W4IZAY3GJFUTN0PKPKA' where id=1; -update noar tt set v0='3J82CFDHJNPM6' where id=1; -update noar ti set v0='3J82CFDHJNPM6' where id=1; -update noar tt set b1='05JNHG0MK6QV' where id=1; -update noar ti set b1='05JNHG0MK6QV' where id=1; -update noar tt set v0='Z1RIZD' where id=1; -update noar ti set v0='Z1RIZD' where id=1; -update noar tt set b2='AMFDBY6BREDVYGVO' where id=1; -update noar ti set b2='AMFDBY6BREDVYGVO' where id=1; -update noar tt set v0='WH' where id=2; -update noar ti set v0='WH' where id=2; -update noar tt set b0='RGCYH72AXAI5VYD6F9LDDU' where id=2; -update noar ti set b0='RGCYH72AXAI5VYD6F9LDDU' where id=2; -update noar tt set v0='HW7NN44BG' where id=2; -update noar ti set v0='HW7NN44BG' where id=2; -update noar tt set b1='ML' where id=2; -update noar ti set b1='ML' where id=2; -update noar tt set v0='KRBSJ8ULZ2FE68Q2GD06K' where id=2; -update noar ti set v0='KRBSJ8ULZ2FE68Q2GD06K' where id=2; -update noar tt set b2='T47' where id=2; -update noar ti set b2='T47' where id=2; -update noar tt set v0='O8PDWBEIIMC3RJK8JX6KSM536' where id=3; -update noar ti set v0='O8PDWBEIIMC3RJK8JX6KSM536' where id=3; -update noar tt set b0='6M0H1FUWM05MX01IF' where id=3; -update noar ti set b0='6M0H1FUWM05MX01IF' where id=3; -update noar tt set v0='86KYXXKKNNEPZB' where id=3; -update noar ti set v0='86KYXXKKNNEPZB' where id=3; -update noar tt set b1='OP5MZRMIEH' where id=3; -update noar ti set b1='OP5MZRMIEH' where id=3; -update noar tt set v0='ZH129JAQNONQF8D9AYTZZNZ6V9BLR' where id=3; -update noar ti set v0='ZH129JAQNONQF8D9AYTZZNZ6V9BLR' where id=3; -update noar tt set b2='X7NC09C2W38OZ' where id=3; -update noar ti set b2='X7NC09C2W38OZ' where id=3; -update noar tt set v0='0LIVJXNT9RXHPU909ETBT75G' where id=4; -update noar ti set v0='0LIVJXNT9RXHPU909ETBT75G' where id=4; -update noar tt set b0='PO89BPI4R0LFEQCGYJ1M8JSYN3N' where id=4; -update noar ti set b0='PO89BPI4R0LFEQCGYJ1M8JSYN3N' where id=4; -update noar tt set v0='L9LLZVTAYZTFKCI452TY' where id=4; -update noar ti set v0='L9LLZVTAYZTFKCI452TY' where id=4; -update noar tt set b1='35' where id=4; -update noar ti set b1='35' where id=4; -update noar tt set v0='Y4PUSRZXTGVSOXPCS7OHOP0R0JL51Z' where id=4; -update noar ti set v0='Y4PUSRZXTGVSOXPCS7OHOP0R0JL51Z' where id=4; -update noar tt set b2='94JHPDLD3STCMOROLB' where id=4; -update noar ti set b2='94JHPDLD3STCMOROLB' where id=4; -update noar tt set v0='CKT1' where id=5; -update noar ti set v0='CKT1' where id=5; -update noar tt set b0='11D9FTIXH7V' where id=5; -update noar ti set b0='11D9FTIXH7V' where id=5; -update noar tt set v0='VO8UZ54U0TSUUD763IMWC9UGT' where id=5; -update noar ti set v0='VO8UZ54U0TSUUD763IMWC9UGT' where id=5; -update noar tt set b1='7P86AOIY7MZJ9JX7' where id=5; -update noar ti set b1='7P86AOIY7MZJ9JX7' where id=5; -update noar tt set v0='0476SFW7S92U3QH8DX9' where id=5; -update noar ti set v0='0476SFW7S92U3QH8DX9' where id=5; -update noar tt set b2='D3BFGXLKSZ55TZ53' where id=5; -update noar ti set b2='D3BFGXLKSZ55TZ53' where id=5; -update noar tt set v0='C7BMNNG2BWPUKRTKHWKY8189D' where id=6; -update noar ti set v0='C7BMNNG2BWPUKRTKHWKY8189D' where id=6; -update noar tt set b0='FR2ZMC5' where id=6; -update noar ti set b0='FR2ZMC5' where id=6; -update noar tt set v0='0EGU' where id=6; -update noar ti set v0='0EGU' where id=6; -update noar tt set b1='5NRSN8T801KDK1CCBPWK32FUZCI' where id=6; -update noar ti set b1='5NRSN8T801KDK1CCBPWK32FUZCI' where id=6; -update noar tt set v0='HAZ8RJS9G1NYB96MYS2ND8' where id=6; -update noar ti set v0='HAZ8RJS9G1NYB96MYS2ND8' where id=6; -update noar tt set b2='67IRM5RI2EL34IK9IYNEDL7CJAYR88J' where id=6; -update noar ti set b2='67IRM5RI2EL34IK9IYNEDL7CJAYR88J' where id=6; -update noar tt set v0='ZQL10LCTJP1BJCQO53YX5RQF0' where id=7; -update noar ti set v0='ZQL10LCTJP1BJCQO53YX5RQF0' where id=7; -update noar tt set b0='RG5SM' where id=7; -update noar ti set b0='RG5SM' where id=7; -update noar tt set v0='IMOZA0B1Y' where id=7; -update noar ti set v0='IMOZA0B1Y' where id=7; -update noar tt set b1='1WNU0S5ETE9ABI3NWWPI1IP7V4AZYP9' where id=7; -update noar ti set b1='1WNU0S5ETE9ABI3NWWPI1IP7V4AZYP9' where id=7; -update noar tt set v0='DCPGQQEIYPHZ37X0F' where id=7; -update noar ti set v0='DCPGQQEIYPHZ37X0F' where id=7; -update noar tt set b2='6TQDJJZ' where id=7; -update noar ti set b2='6TQDJJZ' where id=7; -update noar tt set v0='IKHIFJ7SJ42' where id=8; -update noar ti set v0='IKHIFJ7SJ42' where id=8; -update noar tt set b0='LS9196MG8SXLJDVFXFBI' where id=8; -update noar ti set b0='LS9196MG8SXLJDVFXFBI' where id=8; -update noar tt set v0='6NDVGYGMQKKKSINXS' where id=8; -update noar ti set v0='6NDVGYGMQKKKSINXS' where id=8; -update noar tt set b1='LWGCQZTBWFCTTI2XMA' where id=8; -update noar ti set b1='LWGCQZTBWFCTTI2XMA' where id=8; -update noar tt set v0='GMMJATMW3LMD56CFV7YA4KJXL' where id=8; -update noar ti set v0='GMMJATMW3LMD56CFV7YA4KJXL' where id=8; -update noar tt set b2='PI40S3HHIIPC0UE5DENQ8H' where id=8; -update noar ti set b2='PI40S3HHIIPC0UE5DENQ8H' where id=8; -update noar tt set v0='B8G5H0RSC4NZGG1DP' where id=9; -update noar ti set v0='B8G5H0RSC4NZGG1DP' where id=9; -update noar tt set b0='KE2C6OU262H5J2EPY9VWW2K2V3D4' where id=9; -update noar ti set b0='KE2C6OU262H5J2EPY9VWW2K2V3D4' where id=9; -update noar tt set v0='3H4X' where id=9; -update noar ti set v0='3H4X' where id=9; -update noar tt set b1='RXTM' where id=9; -update noar ti set b1='RXTM' where id=9; -update noar tt set v0='TGMHBYX' where id=9; -update noar ti set v0='TGMHBYX' where id=9; -update noar tt set b2='WHHM9MCZ5CYDTOY' where id=9; -update noar ti set b2='WHHM9MCZ5CYDTOY' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 mediumblob not null, - b1 tinyblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='HUO79V9G6XHM5008O8JBDWJ6' where id=1; -update noar ti set v0='HUO79V9G6XHM5008O8JBDWJ6' where id=1; -update noar tt set b0='1N844DQVF5GB' where id=1; -update noar ti set b0='1N844DQVF5GB' where id=1; -update noar tt set v0='J877HK48ASEOQHGXKHQPJDDHM08YJ' where id=1; -update noar ti set v0='J877HK48ASEOQHGXKHQPJDDHM08YJ' where id=1; -update noar tt set b1='VPI5TB059X1IEFOQISDA09KEX7Q' where id=1; -update noar ti set b1='VPI5TB059X1IEFOQISDA09KEX7Q' where id=1; -update noar tt set v0='PWUG8S' where id=1; -update noar ti set v0='PWUG8S' where id=1; -update noar tt set b2='ER0E0OV515GXRPIRJN42' where id=1; -update noar ti set b2='ER0E0OV515GXRPIRJN42' where id=1; -update noar tt set v0='UR5KI248ZZTD84X' where id=2; -update noar ti set v0='UR5KI248ZZTD84X' where id=2; -update noar tt set b0='H1MYN52M96HWSCPAE3XWQCBVXX1PK70E' where id=2; -update noar ti set b0='H1MYN52M96HWSCPAE3XWQCBVXX1PK70E' where id=2; -update noar tt set v0='CSNXT5R5BI' where id=2; -update noar ti set v0='CSNXT5R5BI' where id=2; -update noar tt set b1='LJ1U4GXCRTOKI1DZ73MUKEF0DVAR' where id=2; -update noar ti set b1='LJ1U4GXCRTOKI1DZ73MUKEF0DVAR' where id=2; -update noar tt set v0='QBQ2FJKMPKTDTYDQ9BFUZBVOFGYTG4' where id=2; -update noar ti set v0='QBQ2FJKMPKTDTYDQ9BFUZBVOFGYTG4' where id=2; -update noar tt set b2='VE' where id=2; -update noar ti set b2='VE' where id=2; -update noar tt set v0='S1TUW7B4RAR3QRUOLRTR3XX273' where id=3; -update noar ti set v0='S1TUW7B4RAR3QRUOLRTR3XX273' where id=3; -update noar tt set b0='G9AHPIVCCKHMYY7IW' where id=3; -update noar ti set b0='G9AHPIVCCKHMYY7IW' where id=3; -update noar tt set v0='OHH092Y76OOVJ4R' where id=3; -update noar ti set v0='OHH092Y76OOVJ4R' where id=3; -update noar tt set b1='0' where id=3; -update noar ti set b1='0' where id=3; -update noar tt set v0='X87UNEMY6HHSLEQ8L' where id=3; -update noar ti set v0='X87UNEMY6HHSLEQ8L' where id=3; -update noar tt set b2='M9FYLGXQG1TC2IR8ID333J75RWV8' where id=3; -update noar ti set b2='M9FYLGXQG1TC2IR8ID333J75RWV8' where id=3; -update noar tt set v0='8XV4GNN8748FOINVN9' where id=4; -update noar ti set v0='8XV4GNN8748FOINVN9' where id=4; -update noar tt set b0='6WGZV0' where id=4; -update noar ti set b0='6WGZV0' where id=4; -update noar tt set v0='UFVBMBYZ6Y8ARWVED1PZ4L4A92GE4Q' where id=4; -update noar ti set v0='UFVBMBYZ6Y8ARWVED1PZ4L4A92GE4Q' where id=4; -update noar tt set b1='LT33PK4' where id=4; -update noar ti set b1='LT33PK4' where id=4; -update noar tt set v0='JVG17O' where id=4; -update noar ti set v0='JVG17O' where id=4; -update noar tt set b2='SHA4ZUW1PU5C82K57W85Z5FL15UPVG' where id=4; -update noar ti set b2='SHA4ZUW1PU5C82K57W85Z5FL15UPVG' where id=4; -update noar tt set v0='W21X0J71JT' where id=5; -update noar ti set v0='W21X0J71JT' where id=5; -update noar tt set b0='EHQ2K8SM' where id=5; -update noar ti set b0='EHQ2K8SM' where id=5; -update noar tt set v0='J5KTHW9IMWW8UWGIKT68I2049XW0P41T' where id=5; -update noar ti set v0='J5KTHW9IMWW8UWGIKT68I2049XW0P41T' where id=5; -update noar tt set b1='WPJPELW3D8VL3YY0UFE' where id=5; -update noar ti set b1='WPJPELW3D8VL3YY0UFE' where id=5; -update noar tt set v0='B6VQ14U40CG9ZRI94TM94' where id=5; -update noar ti set v0='B6VQ14U40CG9ZRI94TM94' where id=5; -update noar tt set b2='ZAGVLBV4N89JTI' where id=5; -update noar ti set b2='ZAGVLBV4N89JTI' where id=5; -update noar tt set v0='XY' where id=6; -update noar ti set v0='XY' where id=6; -update noar tt set b0='U' where id=6; -update noar ti set b0='U' where id=6; -update noar tt set v0='CMN03HKL3KEYK7WOH0RLVEBZX0CMTPPL' where id=6; -update noar ti set v0='CMN03HKL3KEYK7WOH0RLVEBZX0CMTPPL' where id=6; -update noar tt set b1='5I4HRRDQ6CO68KS8XDL47GO1YG' where id=6; -update noar ti set b1='5I4HRRDQ6CO68KS8XDL47GO1YG' where id=6; -update noar tt set v0='IVXNJYTDPC8K9KFGN2BYBS76R7OZ58PA' where id=6; -update noar ti set v0='IVXNJYTDPC8K9KFGN2BYBS76R7OZ58PA' where id=6; -update noar tt set b2='VSQHTRZ9QV6SM02BZ1HE' where id=6; -update noar ti set b2='VSQHTRZ9QV6SM02BZ1HE' where id=6; -update noar tt set v0='6URRVG' where id=7; -update noar ti set v0='6URRVG' where id=7; -update noar tt set b0='IBOX55CAOW3' where id=7; -update noar ti set b0='IBOX55CAOW3' where id=7; -update noar tt set v0='P02GH' where id=7; -update noar ti set v0='P02GH' where id=7; -update noar tt set b1='2ANUWZINQHN7FRGGLGNA' where id=7; -update noar ti set b1='2ANUWZINQHN7FRGGLGNA' where id=7; -update noar tt set v0='3MUKWM36X2UWDWN' where id=7; -update noar ti set v0='3MUKWM36X2UWDWN' where id=7; -update noar tt set b2='E7VF5JWD009BD4MTC6YUQBMMQHKH3YDQ' where id=7; -update noar ti set b2='E7VF5JWD009BD4MTC6YUQBMMQHKH3YDQ' where id=7; -update noar tt set v0='K9Z7XG10UT02FG4WSF8LJ06Z4OR1H8XV' where id=8; -update noar ti set v0='K9Z7XG10UT02FG4WSF8LJ06Z4OR1H8XV' where id=8; -update noar tt set b0='QME6SVVQ56J80OH2AY45T6F01KSV6X' where id=8; -update noar ti set b0='QME6SVVQ56J80OH2AY45T6F01KSV6X' where id=8; -update noar tt set v0='9IH2RI42ORV0ZNTMA6AJAEQZ98JHVPU' where id=8; -update noar ti set v0='9IH2RI42ORV0ZNTMA6AJAEQZ98JHVPU' where id=8; -update noar tt set b1='7GDL2UJLKHKJISW5' where id=8; -update noar ti set b1='7GDL2UJLKHKJISW5' where id=8; -update noar tt set v0='HAZA9MY1Y9HW1EIE' where id=8; -update noar ti set v0='HAZA9MY1Y9HW1EIE' where id=8; -update noar tt set b2='29TAXOAZVHD3OMKETO' where id=8; -update noar ti set b2='29TAXOAZVHD3OMKETO' where id=8; -update noar tt set v0='PAN' where id=9; -update noar ti set v0='PAN' where id=9; -update noar tt set b0='KJAPU6C4H3YW03PSPV91K' where id=9; -update noar ti set b0='KJAPU6C4H3YW03PSPV91K' where id=9; -update noar tt set v0='47K63WLB7UJUKJ93FA' where id=9; -update noar ti set v0='47K63WLB7UJUKJ93FA' where id=9; -update noar tt set b1='AF2X8BOMV4VERYWXA7JOIFZI3' where id=9; -update noar ti set b1='AF2X8BOMV4VERYWXA7JOIFZI3' where id=9; -update noar tt set v0='4H' where id=9; -update noar ti set v0='4H' where id=9; -update noar tt set b2='A2DLGH05Q3Y6XTL0O4271OBF' where id=9; -update noar ti set b2='A2DLGH05Q3Y6XTL0O4271OBF' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 mediumblob not null, - b1 tinyblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='ITZV7T' where id=1; -update noar ti set v0='ITZV7T' where id=1; -update noar tt set b0='ON850QZ46IRH51HQJFA6PGIIXPOC8RIM' where id=1; -update noar ti set b0='ON850QZ46IRH51HQJFA6PGIIXPOC8RIM' where id=1; -update noar tt set v0='4PLKPTNKUSL0M0AF7' where id=1; -update noar ti set v0='4PLKPTNKUSL0M0AF7' where id=1; -update noar tt set b1='XGX7OX65W6JUR42TWG0' where id=1; -update noar ti set b1='XGX7OX65W6JUR42TWG0' where id=1; -update noar tt set v0='8IYJJGBDE2TNF7KW' where id=1; -update noar ti set v0='8IYJJGBDE2TNF7KW' where id=1; -update noar tt set b2='5DYP4BWA' where id=1; -update noar ti set b2='5DYP4BWA' where id=1; -update noar tt set v0='EA007E1RYR0HIGH6PAII0MJOARG7' where id=2; -update noar ti set v0='EA007E1RYR0HIGH6PAII0MJOARG7' where id=2; -update noar tt set b0='ZW3V8FA6PX4LK13WRO' where id=2; -update noar ti set b0='ZW3V8FA6PX4LK13WRO' where id=2; -update noar tt set v0='1WQ2G861492YFWCOWPRL7I93Y7ZH7' where id=2; -update noar ti set v0='1WQ2G861492YFWCOWPRL7I93Y7ZH7' where id=2; -update noar tt set b1='FR6DA85JDALGBQ5DBBWUSPECEEL646H' where id=2; -update noar ti set b1='FR6DA85JDALGBQ5DBBWUSPECEEL646H' where id=2; -update noar tt set v0='GM51N1IVE2D8UEWC4W93E2T3R6' where id=2; -update noar ti set v0='GM51N1IVE2D8UEWC4W93E2T3R6' where id=2; -update noar tt set b2='LKALLE4WOJ4Z9XWGN0L9IO9K' where id=2; -update noar ti set b2='LKALLE4WOJ4Z9XWGN0L9IO9K' where id=2; -update noar tt set v0='XAOIA17PZYG7I7O2' where id=3; -update noar ti set v0='XAOIA17PZYG7I7O2' where id=3; -update noar tt set b0='HEOCWGUCQYFJVUT0' where id=3; -update noar ti set b0='HEOCWGUCQYFJVUT0' where id=3; -update noar tt set v0='7A85306HEHF' where id=3; -update noar ti set v0='7A85306HEHF' where id=3; -update noar tt set b1='IOOAC94MPF58H6NR3PRP78D2' where id=3; -update noar ti set b1='IOOAC94MPF58H6NR3PRP78D2' where id=3; -update noar tt set v0='BQHTKVG0J78DABNHLCHC65B4' where id=3; -update noar ti set v0='BQHTKVG0J78DABNHLCHC65B4' where id=3; -update noar tt set b2='8YCQR3' where id=3; -update noar ti set b2='8YCQR3' where id=3; -update noar tt set v0='D9BIK' where id=4; -update noar ti set v0='D9BIK' where id=4; -update noar tt set b0='S2KYY07XA4I8' where id=4; -update noar ti set b0='S2KYY07XA4I8' where id=4; -update noar tt set v0='4M5MTGJ6YKK3T04TV4AH' where id=4; -update noar ti set v0='4M5MTGJ6YKK3T04TV4AH' where id=4; -update noar tt set b1='PDF6XMXQ0TV5T0AX3M8SDD2VMOXCFE' where id=4; -update noar ti set b1='PDF6XMXQ0TV5T0AX3M8SDD2VMOXCFE' where id=4; -update noar tt set v0='NDA6YMNSL3DLRU1BHFY8D2RFJ0X36AGX' where id=4; -update noar ti set v0='NDA6YMNSL3DLRU1BHFY8D2RFJ0X36AGX' where id=4; -update noar tt set b2='LET' where id=4; -update noar ti set b2='LET' where id=4; -update noar tt set v0='JPLAI' where id=5; -update noar ti set v0='JPLAI' where id=5; -update noar tt set b0='6JNJZFU0V42VL5563Y3FR6UBG' where id=5; -update noar ti set b0='6JNJZFU0V42VL5563Y3FR6UBG' where id=5; -update noar tt set v0='376615FHEH784C91UCM0RTC07TM4AI' where id=5; -update noar ti set v0='376615FHEH784C91UCM0RTC07TM4AI' where id=5; -update noar tt set b1='KVX1UZZKLOCXMPB3OIB' where id=5; -update noar ti set b1='KVX1UZZKLOCXMPB3OIB' where id=5; -update noar tt set v0='4HNFR2QGG6DA5IL681IVGNX' where id=5; -update noar ti set v0='4HNFR2QGG6DA5IL681IVGNX' where id=5; -update noar tt set b2='KQI6JR24387IH' where id=5; -update noar ti set b2='KQI6JR24387IH' where id=5; -update noar tt set v0='JKTC94MRJX6R' where id=6; -update noar ti set v0='JKTC94MRJX6R' where id=6; -update noar tt set b0='JGBCTL3Z139UFNWFF56PNAV06YVM7OH' where id=6; -update noar ti set b0='JGBCTL3Z139UFNWFF56PNAV06YVM7OH' where id=6; -update noar tt set v0='GH' where id=6; -update noar ti set v0='GH' where id=6; -update noar tt set b1='QR5C62BWM0QZMWMXAY4IL' where id=6; -update noar ti set b1='QR5C62BWM0QZMWMXAY4IL' where id=6; -update noar tt set v0='IWXHVO8FMLTP5SU8' where id=6; -update noar ti set v0='IWXHVO8FMLTP5SU8' where id=6; -update noar tt set b2='V96ZQR5GSVZ5K9MKECJ133OO2OH6E9' where id=6; -update noar ti set b2='V96ZQR5GSVZ5K9MKECJ133OO2OH6E9' where id=6; -update noar tt set v0='KRB1B8AE7WP7NUTEGMG2EUWI01I5V' where id=7; -update noar ti set v0='KRB1B8AE7WP7NUTEGMG2EUWI01I5V' where id=7; -update noar tt set b0='J0CFBHE1F' where id=7; -update noar ti set b0='J0CFBHE1F' where id=7; -update noar tt set v0='YPN5Y' where id=7; -update noar ti set v0='YPN5Y' where id=7; -update noar tt set b1='FHW' where id=7; -update noar ti set b1='FHW' where id=7; -update noar tt set v0='84FR7714FR78NAFQRKPBQSKODZXNS' where id=7; -update noar ti set v0='84FR7714FR78NAFQRKPBQSKODZXNS' where id=7; -update noar tt set b2='VXA7V7YZXURWDT' where id=7; -update noar ti set b2='VXA7V7YZXURWDT' where id=7; -update noar tt set v0='2Y279KGG4Y3YC3KYQDFDYQUYGHHOP5O' where id=8; -update noar ti set v0='2Y279KGG4Y3YC3KYQDFDYQUYGHHOP5O' where id=8; -update noar tt set b0='KXUMI50M49RBI35RIC' where id=8; -update noar ti set b0='KXUMI50M49RBI35RIC' where id=8; -update noar tt set v0='OYVHVNZ05NW62X4HSMED0PJ7L' where id=8; -update noar ti set v0='OYVHVNZ05NW62X4HSMED0PJ7L' where id=8; -update noar tt set b1='3IYBZCIUMGOBJ0S4GG1ZQ5I9ZGLM9I' where id=8; -update noar ti set b1='3IYBZCIUMGOBJ0S4GG1ZQ5I9ZGLM9I' where id=8; -update noar tt set v0='UOYDRBK' where id=8; -update noar ti set v0='UOYDRBK' where id=8; -update noar tt set b2='7CHZJJDZOJ0GN978Z' where id=8; -update noar ti set b2='7CHZJJDZOJ0GN978Z' where id=8; -update noar tt set v0='6Y7S9ZBMMUKY0ZILT6BR' where id=9; -update noar ti set v0='6Y7S9ZBMMUKY0ZILT6BR' where id=9; -update noar tt set b0='I9X11SW1EODQG98RHHOEXT7IIXXBXOP' where id=9; -update noar ti set b0='I9X11SW1EODQG98RHHOEXT7IIXXBXOP' where id=9; -update noar tt set v0='VA9W3B5T' where id=9; -update noar ti set v0='VA9W3B5T' where id=9; -update noar tt set b1='F6EM4P9ZTZRB4OHTDUP8OKEM' where id=9; -update noar ti set b1='F6EM4P9ZTZRB4OHTDUP8OKEM' where id=9; -update noar tt set v0='B6FE9DDY2CX51O0PU78M14H2JE' where id=9; -update noar ti set v0='B6FE9DDY2CX51O0PU78M14H2JE' where id=9; -update noar tt set b2='R80JMKEGT9LJP1YET4' where id=9; -update noar ti set b2='R80JMKEGT9LJP1YET4' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 mediumblob null, - b1 tinyblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='F31RGXE0MLWRAO2FIZJ850K2PBBKK9' where id=1; -update noar ti set v0='F31RGXE0MLWRAO2FIZJ850K2PBBKK9' where id=1; -update noar tt set b0='AYB' where id=1; -update noar ti set b0='AYB' where id=1; -update noar tt set v0='UQRRD4R0SF7FTZ4K9W8JOGTWSOFO82' where id=1; -update noar ti set v0='UQRRD4R0SF7FTZ4K9W8JOGTWSOFO82' where id=1; -update noar tt set b1='66PBTAZWWP4UAZR1SMYP2ZZ4H0FYFD' where id=1; -update noar ti set b1='66PBTAZWWP4UAZR1SMYP2ZZ4H0FYFD' where id=1; -update noar tt set v0='GHLAT1APUGZGESDBK9WXF4NJQKS27' where id=1; -update noar ti set v0='GHLAT1APUGZGESDBK9WXF4NJQKS27' where id=1; -update noar tt set b2='XU2MJ8RT03C5SJ5XGC5' where id=1; -update noar ti set b2='XU2MJ8RT03C5SJ5XGC5' where id=1; -update noar tt set v0='HGWGS1TRENA1HWTHMYDHD05NY' where id=2; -update noar ti set v0='HGWGS1TRENA1HWTHMYDHD05NY' where id=2; -update noar tt set b0='1F6DMY0O53385QDOKPEMSO4W' where id=2; -update noar ti set b0='1F6DMY0O53385QDOKPEMSO4W' where id=2; -update noar tt set v0='9LZZ' where id=2; -update noar ti set v0='9LZZ' where id=2; -update noar tt set b1='6TPP760126T7' where id=2; -update noar ti set b1='6TPP760126T7' where id=2; -update noar tt set v0='NIGOG9MOPDJJTK0IPPJSV07TN' where id=2; -update noar ti set v0='NIGOG9MOPDJJTK0IPPJSV07TN' where id=2; -update noar tt set b2='YKYYTR3PBSW8OOXOTNLP27' where id=2; -update noar ti set b2='YKYYTR3PBSW8OOXOTNLP27' where id=2; -update noar tt set v0='UQ9SFQ03' where id=3; -update noar ti set v0='UQ9SFQ03' where id=3; -update noar tt set b0='Y' where id=3; -update noar ti set b0='Y' where id=3; -update noar tt set v0='B5GT' where id=3; -update noar ti set v0='B5GT' where id=3; -update noar tt set b1='6QFZAM' where id=3; -update noar ti set b1='6QFZAM' where id=3; -update noar tt set v0='0PONGRCRT0JCWJN7ER47OOL07LV9WCBA' where id=3; -update noar ti set v0='0PONGRCRT0JCWJN7ER47OOL07LV9WCBA' where id=3; -update noar tt set b2='LJFIPSOJSB40I7OZ4B3EUA8UCJ' where id=3; -update noar ti set b2='LJFIPSOJSB40I7OZ4B3EUA8UCJ' where id=3; -update noar tt set v0='6S57PV63EXYW' where id=4; -update noar ti set v0='6S57PV63EXYW' where id=4; -update noar tt set b0='15SNQWWN219H8JY' where id=4; -update noar ti set b0='15SNQWWN219H8JY' where id=4; -update noar tt set v0='JDQIOHTOYCE' where id=4; -update noar ti set v0='JDQIOHTOYCE' where id=4; -update noar tt set b1='Y' where id=4; -update noar ti set b1='Y' where id=4; -update noar tt set v0='MCKHXA73DR8N' where id=4; -update noar ti set v0='MCKHXA73DR8N' where id=4; -update noar tt set b2='EEJC' where id=4; -update noar ti set b2='EEJC' where id=4; -update noar tt set v0='26UI08CQN9JY97POUWKXW93ISQOQ' where id=5; -update noar ti set v0='26UI08CQN9JY97POUWKXW93ISQOQ' where id=5; -update noar tt set b0='FRCBLSNC' where id=5; -update noar ti set b0='FRCBLSNC' where id=5; -update noar tt set v0='A9ZPAT6' where id=5; -update noar ti set v0='A9ZPAT6' where id=5; -update noar tt set b1='XD9CGHREL' where id=5; -update noar ti set b1='XD9CGHREL' where id=5; -update noar tt set v0='UU0KFX068A4GWA88RA9214B747EY' where id=5; -update noar ti set v0='UU0KFX068A4GWA88RA9214B747EY' where id=5; -update noar tt set b2='J303Y0Y4BR8YXE' where id=5; -update noar ti set b2='J303Y0Y4BR8YXE' where id=5; -update noar tt set v0='GQ809Y4QBFP' where id=6; -update noar ti set v0='GQ809Y4QBFP' where id=6; -update noar tt set b0='VPHF8W7W7QVS' where id=6; -update noar ti set b0='VPHF8W7W7QVS' where id=6; -update noar tt set v0='00IDXVYQMVQX63L6CFB3IEYFPXEQ' where id=6; -update noar ti set v0='00IDXVYQMVQX63L6CFB3IEYFPXEQ' where id=6; -update noar tt set b1='37X4X3' where id=6; -update noar ti set b1='37X4X3' where id=6; -update noar tt set v0='XIRP8TC5L0TF52WLHJVTP5Y' where id=6; -update noar ti set v0='XIRP8TC5L0TF52WLHJVTP5Y' where id=6; -update noar tt set b2='5XXCIRA13RH5VT70PUT8Z4K2ZRS6M' where id=6; -update noar ti set b2='5XXCIRA13RH5VT70PUT8Z4K2ZRS6M' where id=6; -update noar tt set v0='745Z3D41KF8Z' where id=7; -update noar ti set v0='745Z3D41KF8Z' where id=7; -update noar tt set b0='TQTF5X03QYY' where id=7; -update noar ti set b0='TQTF5X03QYY' where id=7; -update noar tt set v0='K06L6R6' where id=7; -update noar ti set v0='K06L6R6' where id=7; -update noar tt set b1='OPC3' where id=7; -update noar ti set b1='OPC3' where id=7; -update noar tt set v0='R61JV3CPNDAL1MGY1' where id=7; -update noar ti set v0='R61JV3CPNDAL1MGY1' where id=7; -update noar tt set b2='L3GM6T2J' where id=7; -update noar ti set b2='L3GM6T2J' where id=7; -update noar tt set v0='CA6VYJIQOWPIBZ7UAS3N1J9Q' where id=8; -update noar ti set v0='CA6VYJIQOWPIBZ7UAS3N1J9Q' where id=8; -update noar tt set b0='D9CA' where id=8; -update noar ti set b0='D9CA' where id=8; -update noar tt set v0='IUAG7AUZ9TRO' where id=8; -update noar ti set v0='IUAG7AUZ9TRO' where id=8; -update noar tt set b1='WLFBZS74UBDLJFFF' where id=8; -update noar ti set b1='WLFBZS74UBDLJFFF' where id=8; -update noar tt set v0='5YLIFGQCFY6ER8YDGUARM85DU64O0D8' where id=8; -update noar ti set v0='5YLIFGQCFY6ER8YDGUARM85DU64O0D8' where id=8; -update noar tt set b2='KIUOUPS4J5E6FC5' where id=8; -update noar ti set b2='KIUOUPS4J5E6FC5' where id=8; -update noar tt set v0='7D8JAA7IWTQNQ2RR8I' where id=9; -update noar ti set v0='7D8JAA7IWTQNQ2RR8I' where id=9; -update noar tt set b0='R2M' where id=9; -update noar ti set b0='R2M' where id=9; -update noar tt set v0='QMO' where id=9; -update noar ti set v0='QMO' where id=9; -update noar tt set b1='QRG5IONJV3GI45PW' where id=9; -update noar ti set b1='QRG5IONJV3GI45PW' where id=9; -update noar tt set v0='6S907LXNKUSGHQPHFR8UHG' where id=9; -update noar ti set v0='6S907LXNKUSGHQPHFR8UHG' where id=9; -update noar tt set b2='T2EYYQR' where id=9; -update noar ti set b2='T2EYYQR' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 mediumblob null, - b1 tinyblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='SY0OPAECW338K1XNKXFE' where id=1; -update noar ti set v0='SY0OPAECW338K1XNKXFE' where id=1; -update noar tt set b0='L1QASV' where id=1; -update noar ti set b0='L1QASV' where id=1; -update noar tt set v0='YUV' where id=1; -update noar ti set v0='YUV' where id=1; -update noar tt set b1='8ANLEZ1RWE6IQ16VE7BI' where id=1; -update noar ti set b1='8ANLEZ1RWE6IQ16VE7BI' where id=1; -update noar tt set v0='DRVINSKIA0FAIO481IB' where id=1; -update noar ti set v0='DRVINSKIA0FAIO481IB' where id=1; -update noar tt set b2='LPR99FNTUJ8XXU931SPARSXX9QQ' where id=1; -update noar ti set b2='LPR99FNTUJ8XXU931SPARSXX9QQ' where id=1; -update noar tt set v0='X9AY2FBI6OSTRBE' where id=2; -update noar ti set v0='X9AY2FBI6OSTRBE' where id=2; -update noar tt set b0='WK33TOH9INBWUJ696EZM6U0V' where id=2; -update noar ti set b0='WK33TOH9INBWUJ696EZM6U0V' where id=2; -update noar tt set v0='J4WPEAZBLQQWUNJYB3N2J1YUOD61ZQ67' where id=2; -update noar ti set v0='J4WPEAZBLQQWUNJYB3N2J1YUOD61ZQ67' where id=2; -update noar tt set b1='4OJGGIDH8D3NB1M038997V' where id=2; -update noar ti set b1='4OJGGIDH8D3NB1M038997V' where id=2; -update noar tt set v0='8PT4K7LKFPUNENSV2UQ0AXCLF1' where id=2; -update noar ti set v0='8PT4K7LKFPUNENSV2UQ0AXCLF1' where id=2; -update noar tt set b2='N2NLV' where id=2; -update noar ti set b2='N2NLV' where id=2; -update noar tt set v0='5GUX8M7ZB2F' where id=3; -update noar ti set v0='5GUX8M7ZB2F' where id=3; -update noar tt set b0='ZTXXIH8H' where id=3; -update noar ti set b0='ZTXXIH8H' where id=3; -update noar tt set v0='FZ3ZJ258O0J' where id=3; -update noar ti set v0='FZ3ZJ258O0J' where id=3; -update noar tt set b1='JRK8TF9OFW71MWQPNNNRB4YD0UYVGY' where id=3; -update noar ti set b1='JRK8TF9OFW71MWQPNNNRB4YD0UYVGY' where id=3; -update noar tt set v0='RUQJLT89XRUD8KDYZLE15PS6G3' where id=3; -update noar ti set v0='RUQJLT89XRUD8KDYZLE15PS6G3' where id=3; -update noar tt set b2='7ASOO6UQTNUQK9' where id=3; -update noar ti set b2='7ASOO6UQTNUQK9' where id=3; -update noar tt set v0='EP48AAT33SMTSXOO6OAG4BPVFA' where id=4; -update noar ti set v0='EP48AAT33SMTSXOO6OAG4BPVFA' where id=4; -update noar tt set b0='6S9FC8150NDF6YTJVN20QRUXRIQ1' where id=4; -update noar ti set b0='6S9FC8150NDF6YTJVN20QRUXRIQ1' where id=4; -update noar tt set v0='QE87L6EHRF4O55MEEYYOMOPBN' where id=4; -update noar ti set v0='QE87L6EHRF4O55MEEYYOMOPBN' where id=4; -update noar tt set b1='1QO32MJMKK0EYTFG3K6TEWIFQUX' where id=4; -update noar ti set b1='1QO32MJMKK0EYTFG3K6TEWIFQUX' where id=4; -update noar tt set v0='LQWU7' where id=4; -update noar ti set v0='LQWU7' where id=4; -update noar tt set b2='5DLPN0Q9HOJSY7ZZMD6Y70CEZB8K7' where id=4; -update noar ti set b2='5DLPN0Q9HOJSY7ZZMD6Y70CEZB8K7' where id=4; -update noar tt set v0='F5J0W63FVTERMBVLC53Y' where id=5; -update noar ti set v0='F5J0W63FVTERMBVLC53Y' where id=5; -update noar tt set b0='9LZYMVO' where id=5; -update noar ti set b0='9LZYMVO' where id=5; -update noar tt set v0='O' where id=5; -update noar ti set v0='O' where id=5; -update noar tt set b1='B9DCAQVX5IPR6EVE67KNU' where id=5; -update noar ti set b1='B9DCAQVX5IPR6EVE67KNU' where id=5; -update noar tt set v0='V2DZXICDR4PSRG0D8DOJZ' where id=5; -update noar ti set v0='V2DZXICDR4PSRG0D8DOJZ' where id=5; -update noar tt set b2='FGCZ64X2T00' where id=5; -update noar ti set b2='FGCZ64X2T00' where id=5; -update noar tt set v0='OKKOZ2CHPHL9GQ' where id=6; -update noar ti set v0='OKKOZ2CHPHL9GQ' where id=6; -update noar tt set b0='6UVNF9Z8HSJ6GKXHMFYS' where id=6; -update noar ti set b0='6UVNF9Z8HSJ6GKXHMFYS' where id=6; -update noar tt set v0='WNZA3LDNI9C03KT8BQPMQ0PB' where id=6; -update noar ti set v0='WNZA3LDNI9C03KT8BQPMQ0PB' where id=6; -update noar tt set b1='LQHXETX' where id=6; -update noar ti set b1='LQHXETX' where id=6; -update noar tt set v0='PC1N' where id=6; -update noar ti set v0='PC1N' where id=6; -update noar tt set b2='1C757WM190NZV' where id=6; -update noar ti set b2='1C757WM190NZV' where id=6; -update noar tt set v0='6UHRX9DY' where id=7; -update noar ti set v0='6UHRX9DY' where id=7; -update noar tt set b0='5DCC8W12ZVMVVNVEVDZ44D1QQY1S253' where id=7; -update noar ti set b0='5DCC8W12ZVMVVNVEVDZ44D1QQY1S253' where id=7; -update noar tt set v0='V9UT22S9778O3JFERB' where id=7; -update noar ti set v0='V9UT22S9778O3JFERB' where id=7; -update noar tt set b1='184RX3MH1MJKBOLZ35OF68B' where id=7; -update noar ti set b1='184RX3MH1MJKBOLZ35OF68B' where id=7; -update noar tt set v0='VO9IMQNE1Z80ACMEV7KYB3O9' where id=7; -update noar ti set v0='VO9IMQNE1Z80ACMEV7KYB3O9' where id=7; -update noar tt set b2='WD8Q' where id=7; -update noar ti set b2='WD8Q' where id=7; -update noar tt set v0='WMILX6' where id=8; -update noar ti set v0='WMILX6' where id=8; -update noar tt set b0='16SB' where id=8; -update noar ti set b0='16SB' where id=8; -update noar tt set v0='2ONKX0D2L82NPE4FFDR2HI2QXLF6YNB' where id=8; -update noar ti set v0='2ONKX0D2L82NPE4FFDR2HI2QXLF6YNB' where id=8; -update noar tt set b1='RJKALFDDI6FPCGHS' where id=8; -update noar ti set b1='RJKALFDDI6FPCGHS' where id=8; -update noar tt set v0='IL97UQZV7BQ86' where id=8; -update noar ti set v0='IL97UQZV7BQ86' where id=8; -update noar tt set b2='A' where id=8; -update noar ti set b2='A' where id=8; -update noar tt set v0='Q7OLHBQS590OZONM' where id=9; -update noar ti set v0='Q7OLHBQS590OZONM' where id=9; -update noar tt set b0='OOHBCUU5TKSD' where id=9; -update noar ti set b0='OOHBCUU5TKSD' where id=9; -update noar tt set v0='22BQU9' where id=9; -update noar ti set v0='22BQU9' where id=9; -update noar tt set b1='7RG0' where id=9; -update noar ti set b1='7RG0' where id=9; -update noar tt set v0='1H8HFYKMPFAE2O3LFW095UQ2' where id=9; -update noar ti set v0='1H8HFYKMPFAE2O3LFW095UQ2' where id=9; -update noar tt set b2='9AHD0WO4HWHD0EZVRRNIYJ1Z' where id=9; -update noar ti set b2='9AHD0WO4HWHD0EZVRRNIYJ1Z' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 mediumblob not null, - b1 tinyblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='SIVJHAUK7P' where id=1; -update noar ti set v0='SIVJHAUK7P' where id=1; -update noar tt set b0='EV2X' where id=1; -update noar ti set b0='EV2X' where id=1; -update noar tt set v0='F21KLMSSA9MEC5Y4GHS17Z0I2NUG430' where id=1; -update noar ti set v0='F21KLMSSA9MEC5Y4GHS17Z0I2NUG430' where id=1; -update noar tt set b1='PYR9SM5M261MGJP' where id=1; -update noar ti set b1='PYR9SM5M261MGJP' where id=1; -update noar tt set v0='MU86PYFVX8SAVBZ' where id=1; -update noar ti set v0='MU86PYFVX8SAVBZ' where id=1; -update noar tt set b2='SQRRWZKR93O3N' where id=1; -update noar ti set b2='SQRRWZKR93O3N' where id=1; -update noar tt set v0='4PURI39PXJAWZQO586MXD2DR0C7EDF0' where id=2; -update noar ti set v0='4PURI39PXJAWZQO586MXD2DR0C7EDF0' where id=2; -update noar tt set b0='EWNV1M8DWR799Z4OICLDK96H' where id=2; -update noar ti set b0='EWNV1M8DWR799Z4OICLDK96H' where id=2; -update noar tt set v0='WC1UUNO5Y4' where id=2; -update noar ti set v0='WC1UUNO5Y4' where id=2; -update noar tt set b1='I51S8KYIXFJUOMN633HJ7N' where id=2; -update noar ti set b1='I51S8KYIXFJUOMN633HJ7N' where id=2; -update noar tt set v0='IZDFCQ2LCRQHYF0XQIDTSUAF2R' where id=2; -update noar ti set v0='IZDFCQ2LCRQHYF0XQIDTSUAF2R' where id=2; -update noar tt set b2='3PRI0FSUOQGSB8OR9242E' where id=2; -update noar ti set b2='3PRI0FSUOQGSB8OR9242E' where id=2; -update noar tt set v0='KUR546DX91YCD3A2VDUCSTW2IT' where id=3; -update noar ti set v0='KUR546DX91YCD3A2VDUCSTW2IT' where id=3; -update noar tt set b0='C8P3PPVR5EXZ' where id=3; -update noar ti set b0='C8P3PPVR5EXZ' where id=3; -update noar tt set v0='WFEIFJ3ONX3W8VUPGA' where id=3; -update noar ti set v0='WFEIFJ3ONX3W8VUPGA' where id=3; -update noar tt set b1='0G474G6GJV4' where id=3; -update noar ti set b1='0G474G6GJV4' where id=3; -update noar tt set v0='J4DNHZ1' where id=3; -update noar ti set v0='J4DNHZ1' where id=3; -update noar tt set b2='FIZUCBVDBH3AIQ0IV5QQMJVORL' where id=3; -update noar ti set b2='FIZUCBVDBH3AIQ0IV5QQMJVORL' where id=3; -update noar tt set v0='OU6IZFZ22Q8VVXYEO8E9MH2VS' where id=4; -update noar ti set v0='OU6IZFZ22Q8VVXYEO8E9MH2VS' where id=4; -update noar tt set b0='WGJJ3H3FUN0V9KG7788M283WEP' where id=4; -update noar ti set b0='WGJJ3H3FUN0V9KG7788M283WEP' where id=4; -update noar tt set v0='31DQIR06TS3YVPNODRS0SS806M1' where id=4; -update noar ti set v0='31DQIR06TS3YVPNODRS0SS806M1' where id=4; -update noar tt set b1='AAFPM2UDEWFQV414522M6NU' where id=4; -update noar ti set b1='AAFPM2UDEWFQV414522M6NU' where id=4; -update noar tt set v0='BHOOWY' where id=4; -update noar ti set v0='BHOOWY' where id=4; -update noar tt set b2='PYT' where id=4; -update noar ti set b2='PYT' where id=4; -update noar tt set v0='LMW4K1NGY0BMYO6X91J6IEF1M21I' where id=5; -update noar ti set v0='LMW4K1NGY0BMYO6X91J6IEF1M21I' where id=5; -update noar tt set b0='MSUFZBIC63FZIGHRC45TCRG' where id=5; -update noar ti set b0='MSUFZBIC63FZIGHRC45TCRG' where id=5; -update noar tt set v0='A5DQWZXTRBDR7CJSPU7Y2' where id=5; -update noar ti set v0='A5DQWZXTRBDR7CJSPU7Y2' where id=5; -update noar tt set b1='0WO' where id=5; -update noar ti set b1='0WO' where id=5; -update noar tt set v0='M24YXCB3X' where id=5; -update noar ti set v0='M24YXCB3X' where id=5; -update noar tt set b2='CHTSZY2SWDXR0YOPIAZ67VGSEIZTEZKR' where id=5; -update noar ti set b2='CHTSZY2SWDXR0YOPIAZ67VGSEIZTEZKR' where id=5; -update noar tt set v0='77EGNRM73Q6DZFXBJEC52D213Z' where id=6; -update noar ti set v0='77EGNRM73Q6DZFXBJEC52D213Z' where id=6; -update noar tt set b0='T5680CNGJY' where id=6; -update noar ti set b0='T5680CNGJY' where id=6; -update noar tt set v0='TWLXY1PLHZ52JOU' where id=6; -update noar ti set v0='TWLXY1PLHZ52JOU' where id=6; -update noar tt set b1='3Z7TMCO8F8CWS7I6V90C' where id=6; -update noar ti set b1='3Z7TMCO8F8CWS7I6V90C' where id=6; -update noar tt set v0='VHFKN3IQ' where id=6; -update noar ti set v0='VHFKN3IQ' where id=6; -update noar tt set b2='251I63TA628PO2ZOJKQSPQRL0GPB1RP' where id=6; -update noar ti set b2='251I63TA628PO2ZOJKQSPQRL0GPB1RP' where id=6; -update noar tt set v0='SRS2RZX58ZX1JSMU' where id=7; -update noar ti set v0='SRS2RZX58ZX1JSMU' where id=7; -update noar tt set b0='7KWUNO5PHGZNWAH15EH0Q80YUAVVSP' where id=7; -update noar ti set b0='7KWUNO5PHGZNWAH15EH0Q80YUAVVSP' where id=7; -update noar tt set v0='IO95UWAGBCCAD' where id=7; -update noar ti set v0='IO95UWAGBCCAD' where id=7; -update noar tt set b1='S5GOD79CX' where id=7; -update noar ti set b1='S5GOD79CX' where id=7; -update noar tt set v0='6W4HWAOAC23V7Z01OUDZEYVCDE5238O' where id=7; -update noar ti set v0='6W4HWAOAC23V7Z01OUDZEYVCDE5238O' where id=7; -update noar tt set b2='3JYP1BKFW1D71LEHXCLQFNBGO8' where id=7; -update noar ti set b2='3JYP1BKFW1D71LEHXCLQFNBGO8' where id=7; -update noar tt set v0='35OA6F64XFIRJPDA5YISMR' where id=8; -update noar ti set v0='35OA6F64XFIRJPDA5YISMR' where id=8; -update noar tt set b0='ANK' where id=8; -update noar ti set b0='ANK' where id=8; -update noar tt set v0='6JR3GM8AL73DN4W4DIL6GNS' where id=8; -update noar ti set v0='6JR3GM8AL73DN4W4DIL6GNS' where id=8; -update noar tt set b1='UG' where id=8; -update noar ti set b1='UG' where id=8; -update noar tt set v0='WTUK9EIZ8CS82V0857WII3OX07X4MG5T' where id=8; -update noar ti set v0='WTUK9EIZ8CS82V0857WII3OX07X4MG5T' where id=8; -update noar tt set b2='WIKG54ZG12I02' where id=8; -update noar ti set b2='WIKG54ZG12I02' where id=8; -update noar tt set v0='TOC5QBGYG' where id=9; -update noar ti set v0='TOC5QBGYG' where id=9; -update noar tt set b0='3G9613IVZ7VJ4YPJ8YQU6LJLPMS3B87' where id=9; -update noar ti set b0='3G9613IVZ7VJ4YPJ8YQU6LJLPMS3B87' where id=9; -update noar tt set v0='K7TCPDM03GS0ZJNAYSQEKW5' where id=9; -update noar ti set v0='K7TCPDM03GS0ZJNAYSQEKW5' where id=9; -update noar tt set b1='QIELXT6HBET73' where id=9; -update noar ti set b1='QIELXT6HBET73' where id=9; -update noar tt set v0='W8AK1C6K8HZ' where id=9; -update noar ti set v0='W8AK1C6K8HZ' where id=9; -update noar tt set b2='0A4MFE944U0I6V' where id=9; -update noar ti set b2='0A4MFE944U0I6V' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 mediumblob not null, - b1 tinyblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='LTHSBR8' where id=1; -update noar ti set v0='LTHSBR8' where id=1; -update noar tt set b0='T' where id=1; -update noar ti set b0='T' where id=1; -update noar tt set v0='4' where id=1; -update noar ti set v0='4' where id=1; -update noar tt set b1='Q2IDNVGZMHDLWXHA8Q7' where id=1; -update noar ti set b1='Q2IDNVGZMHDLWXHA8Q7' where id=1; -update noar tt set v0='QQN' where id=1; -update noar ti set v0='QQN' where id=1; -update noar tt set b2='XVMAK6L1B5GGJBWOMXIXGK' where id=1; -update noar ti set b2='XVMAK6L1B5GGJBWOMXIXGK' where id=1; -update noar tt set v0='ETPY1WJ6UYWW34W3YSRJ1PLK' where id=2; -update noar ti set v0='ETPY1WJ6UYWW34W3YSRJ1PLK' where id=2; -update noar tt set b0='BOEBAHREXS3DM5SLXR4M99FP9B' where id=2; -update noar ti set b0='BOEBAHREXS3DM5SLXR4M99FP9B' where id=2; -update noar tt set v0='ZME2X6HC' where id=2; -update noar ti set v0='ZME2X6HC' where id=2; -update noar tt set b1='JZPJ1OV5WON7SWVWB6HLBNR5' where id=2; -update noar ti set b1='JZPJ1OV5WON7SWVWB6HLBNR5' where id=2; -update noar tt set v0='QSOA' where id=2; -update noar ti set v0='QSOA' where id=2; -update noar tt set b2='G56LST5' where id=2; -update noar ti set b2='G56LST5' where id=2; -update noar tt set v0='RUWST3D1QMOLNS4ZOJSKOL91T9' where id=3; -update noar ti set v0='RUWST3D1QMOLNS4ZOJSKOL91T9' where id=3; -update noar tt set b0='45942MACD3LSGZ7RWC' where id=3; -update noar ti set b0='45942MACD3LSGZ7RWC' where id=3; -update noar tt set v0='5QMJX2C360JAAAEWCT8Y17' where id=3; -update noar ti set v0='5QMJX2C360JAAAEWCT8Y17' where id=3; -update noar tt set b1='SZHW1BGHFXSN0K7SZ83VAM21B' where id=3; -update noar ti set b1='SZHW1BGHFXSN0K7SZ83VAM21B' where id=3; -update noar tt set v0='J905FUTQ' where id=3; -update noar ti set v0='J905FUTQ' where id=3; -update noar tt set b2='W9YCRC7UDZJJNB1XZ3CU5J' where id=3; -update noar ti set b2='W9YCRC7UDZJJNB1XZ3CU5J' where id=3; -update noar tt set v0='IXGR24PS08CNJJD8K8D' where id=4; -update noar ti set v0='IXGR24PS08CNJJD8K8D' where id=4; -update noar tt set b0='DAJLYHP' where id=4; -update noar ti set b0='DAJLYHP' where id=4; -update noar tt set v0='EDMEWL3XAI8C5ZOI8SO9H9B5VJU' where id=4; -update noar ti set v0='EDMEWL3XAI8C5ZOI8SO9H9B5VJU' where id=4; -update noar tt set b1='PEZAD8JNDVOE0Z7IZMD51QLIJ8' where id=4; -update noar ti set b1='PEZAD8JNDVOE0Z7IZMD51QLIJ8' where id=4; -update noar tt set v0='OYTPFN5PQ03ISDPVZ652H4MZ2XEW3C' where id=4; -update noar ti set v0='OYTPFN5PQ03ISDPVZ652H4MZ2XEW3C' where id=4; -update noar tt set b2='O5F8JJ46Y6VJV8TPISGGBD' where id=4; -update noar ti set b2='O5F8JJ46Y6VJV8TPISGGBD' where id=4; -update noar tt set v0='YR48H4C377UKCR5BV2HPEG' where id=5; -update noar ti set v0='YR48H4C377UKCR5BV2HPEG' where id=5; -update noar tt set b0='80I5UVGAM4TVZY825D0Y70NWGQCIB' where id=5; -update noar ti set b0='80I5UVGAM4TVZY825D0Y70NWGQCIB' where id=5; -update noar tt set v0='JKQGPBOEKIVUBONHEPUTQS1' where id=5; -update noar ti set v0='JKQGPBOEKIVUBONHEPUTQS1' where id=5; -update noar tt set b1='J9QMX1YME34LU' where id=5; -update noar ti set b1='J9QMX1YME34LU' where id=5; -update noar tt set v0='4PQJPJ6XYEHYCLN' where id=5; -update noar ti set v0='4PQJPJ6XYEHYCLN' where id=5; -update noar tt set b2='RRLK08F7GAV4SPN1JOIXZY' where id=5; -update noar ti set b2='RRLK08F7GAV4SPN1JOIXZY' where id=5; -update noar tt set v0='YWM9UGC' where id=6; -update noar ti set v0='YWM9UGC' where id=6; -update noar tt set b0='7BLZ60JRV1XZ8WJL79ZH6DM' where id=6; -update noar ti set b0='7BLZ60JRV1XZ8WJL79ZH6DM' where id=6; -update noar tt set v0='K1' where id=6; -update noar ti set v0='K1' where id=6; -update noar tt set b1='UD0QN' where id=6; -update noar ti set b1='UD0QN' where id=6; -update noar tt set v0='H790' where id=6; -update noar ti set v0='H790' where id=6; -update noar tt set b2='02HTOXE8' where id=6; -update noar ti set b2='02HTOXE8' where id=6; -update noar tt set v0='XZBE09N6DDPS3O94KERZSB2Q' where id=7; -update noar ti set v0='XZBE09N6DDPS3O94KERZSB2Q' where id=7; -update noar tt set b0='V0HQI5IWHMZ' where id=7; -update noar ti set b0='V0HQI5IWHMZ' where id=7; -update noar tt set v0='Q2GREC4R7ACG58H' where id=7; -update noar ti set v0='Q2GREC4R7ACG58H' where id=7; -update noar tt set b1='HG0W6FB' where id=7; -update noar ti set b1='HG0W6FB' where id=7; -update noar tt set v0='UVM9NDSZXJ' where id=7; -update noar ti set v0='UVM9NDSZXJ' where id=7; -update noar tt set b2='KAAO386YRDS9ZF0DXW' where id=7; -update noar ti set b2='KAAO386YRDS9ZF0DXW' where id=7; -update noar tt set v0='ERPS' where id=8; -update noar ti set v0='ERPS' where id=8; -update noar tt set b0='B7M' where id=8; -update noar ti set b0='B7M' where id=8; -update noar tt set v0='1XQHWEZ7HCZ' where id=8; -update noar ti set v0='1XQHWEZ7HCZ' where id=8; -update noar tt set b1='7N0AC0ONOTQWVMZJ86' where id=8; -update noar ti set b1='7N0AC0ONOTQWVMZJ86' where id=8; -update noar tt set v0='GC' where id=8; -update noar ti set v0='GC' where id=8; -update noar tt set b2='2ILH6YR07S' where id=8; -update noar ti set b2='2ILH6YR07S' where id=8; -update noar tt set v0='LCRCXKT25DSSYFY80JJ' where id=9; -update noar ti set v0='LCRCXKT25DSSYFY80JJ' where id=9; -update noar tt set b0='3X' where id=9; -update noar ti set b0='3X' where id=9; -update noar tt set v0='DCI2GYN5Z712HZI2QP4MDRO' where id=9; -update noar ti set v0='DCI2GYN5Z712HZI2QP4MDRO' where id=9; -update noar tt set b1='E7LAWRMNPGJLGSBB3N2D5H0SL3AIMB' where id=9; -update noar ti set b1='E7LAWRMNPGJLGSBB3N2D5H0SL3AIMB' where id=9; -update noar tt set v0='2ROT25R3QCUD1S' where id=9; -update noar ti set v0='2ROT25R3QCUD1S' where id=9; -update noar tt set b2='IUNYUI9OAE3' where id=9; -update noar ti set b2='IUNYUI9OAE3' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 mediumblob null, - b1 tinyblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='O4GVM81UCTZNBS' where id=1; -update noar ti set v0='O4GVM81UCTZNBS' where id=1; -update noar tt set b0='9K' where id=1; -update noar ti set b0='9K' where id=1; -update noar tt set v0='P2JV' where id=1; -update noar ti set v0='P2JV' where id=1; -update noar tt set b1='XBAVC2D8RYRB9ROTHP8AGFAH2' where id=1; -update noar ti set b1='XBAVC2D8RYRB9ROTHP8AGFAH2' where id=1; -update noar tt set v0='R23G0NG9XG' where id=1; -update noar ti set v0='R23G0NG9XG' where id=1; -update noar tt set b2='JRB7KPMBFW98BW18T8' where id=1; -update noar ti set b2='JRB7KPMBFW98BW18T8' where id=1; -update noar tt set v0='5N5' where id=2; -update noar ti set v0='5N5' where id=2; -update noar tt set b0='XLIV0VDVLL1G5NRW4GEAER9Z' where id=2; -update noar ti set b0='XLIV0VDVLL1G5NRW4GEAER9Z' where id=2; -update noar tt set v0='O907FMR99IMCWOTN' where id=2; -update noar ti set v0='O907FMR99IMCWOTN' where id=2; -update noar tt set b1='4FPZ962VXP3JD8R7PN33' where id=2; -update noar ti set b1='4FPZ962VXP3JD8R7PN33' where id=2; -update noar tt set v0='682ZF4PXU9E' where id=2; -update noar ti set v0='682ZF4PXU9E' where id=2; -update noar tt set b2='TGHZMRDNJB1U4I681HWZ9PCJPP' where id=2; -update noar ti set b2='TGHZMRDNJB1U4I681HWZ9PCJPP' where id=2; -update noar tt set v0='JCC1JYTJXUT4FJBHNDZNM3H69OYNF' where id=3; -update noar ti set v0='JCC1JYTJXUT4FJBHNDZNM3H69OYNF' where id=3; -update noar tt set b0='A3PWQD0FD52HO3CS1' where id=3; -update noar ti set b0='A3PWQD0FD52HO3CS1' where id=3; -update noar tt set v0='KLIN79H57E8F5TBMK6TC' where id=3; -update noar ti set v0='KLIN79H57E8F5TBMK6TC' where id=3; -update noar tt set b1='46D02H8JXD3GNBMUX' where id=3; -update noar ti set b1='46D02H8JXD3GNBMUX' where id=3; -update noar tt set v0='13QF' where id=3; -update noar ti set v0='13QF' where id=3; -update noar tt set b2='RPCRYIH5PZZL54F8EYA4FQEN062' where id=3; -update noar ti set b2='RPCRYIH5PZZL54F8EYA4FQEN062' where id=3; -update noar tt set v0='T089OJE05FFC' where id=4; -update noar ti set v0='T089OJE05FFC' where id=4; -update noar tt set b0='I5A4TY2BT262V6IOOMEMO8B3IL1M6VA2' where id=4; -update noar ti set b0='I5A4TY2BT262V6IOOMEMO8B3IL1M6VA2' where id=4; -update noar tt set v0='DFLPZ' where id=4; -update noar ti set v0='DFLPZ' where id=4; -update noar tt set b1='MF3QMJRLYYZJY829Y' where id=4; -update noar ti set b1='MF3QMJRLYYZJY829Y' where id=4; -update noar tt set v0='7EXDTR' where id=4; -update noar ti set v0='7EXDTR' where id=4; -update noar tt set b2='U9099VOC' where id=4; -update noar ti set b2='U9099VOC' where id=4; -update noar tt set v0='X5D9ZZY5ED1' where id=5; -update noar ti set v0='X5D9ZZY5ED1' where id=5; -update noar tt set b0='QUSPOQAPIA01ZBLVB3R8' where id=5; -update noar ti set b0='QUSPOQAPIA01ZBLVB3R8' where id=5; -update noar tt set v0='4VFO7WDD7KMO103N3UEH8SNZ1L6MU' where id=5; -update noar ti set v0='4VFO7WDD7KMO103N3UEH8SNZ1L6MU' where id=5; -update noar tt set b1='X25A10QVYXYOASUJ' where id=5; -update noar ti set b1='X25A10QVYXYOASUJ' where id=5; -update noar tt set v0='7UR' where id=5; -update noar ti set v0='7UR' where id=5; -update noar tt set b2='O0VI' where id=5; -update noar ti set b2='O0VI' where id=5; -update noar tt set v0='IZHOZJITXW79RME1' where id=6; -update noar ti set v0='IZHOZJITXW79RME1' where id=6; -update noar tt set b0='5AGDB4' where id=6; -update noar ti set b0='5AGDB4' where id=6; -update noar tt set v0='JEPUJ4R1XY7UQ' where id=6; -update noar ti set v0='JEPUJ4R1XY7UQ' where id=6; -update noar tt set b1='8O9ZNLCUC1SCDI04PRS1PMFWF23S0RA' where id=6; -update noar ti set b1='8O9ZNLCUC1SCDI04PRS1PMFWF23S0RA' where id=6; -update noar tt set v0='HQKAE0IZSN' where id=6; -update noar ti set v0='HQKAE0IZSN' where id=6; -update noar tt set b2='H63P6PWO7JJFYI32J2V65HWC5' where id=6; -update noar ti set b2='H63P6PWO7JJFYI32J2V65HWC5' where id=6; -update noar tt set v0='SOSSWIQ8' where id=7; -update noar ti set v0='SOSSWIQ8' where id=7; -update noar tt set b0='014EKNDZTZN9I25H' where id=7; -update noar ti set b0='014EKNDZTZN9I25H' where id=7; -update noar tt set v0='P0D3PG1N1EP5CF56' where id=7; -update noar ti set v0='P0D3PG1N1EP5CF56' where id=7; -update noar tt set b1='6YQ8IXU4JNW' where id=7; -update noar ti set b1='6YQ8IXU4JNW' where id=7; -update noar tt set v0='U8KEWEFUJ' where id=7; -update noar ti set v0='U8KEWEFUJ' where id=7; -update noar tt set b2='FK1Y' where id=7; -update noar ti set b2='FK1Y' where id=7; -update noar tt set v0='HXA9OWTUP7GK' where id=8; -update noar ti set v0='HXA9OWTUP7GK' where id=8; -update noar tt set b0='RV9Y4ZEOW37P4JZ0BA75ZLZX0' where id=8; -update noar ti set b0='RV9Y4ZEOW37P4JZ0BA75ZLZX0' where id=8; -update noar tt set v0='2K' where id=8; -update noar ti set v0='2K' where id=8; -update noar tt set b1='XMYON35ZQZCH8D' where id=8; -update noar ti set b1='XMYON35ZQZCH8D' where id=8; -update noar tt set v0='35' where id=8; -update noar ti set v0='35' where id=8; -update noar tt set b2='5F489KFTJ2LG2' where id=8; -update noar ti set b2='5F489KFTJ2LG2' where id=8; -update noar tt set v0='G0G0VLM17EFBU' where id=9; -update noar ti set v0='G0G0VLM17EFBU' where id=9; -update noar tt set b0='KN6XI62R' where id=9; -update noar ti set b0='KN6XI62R' where id=9; -update noar tt set v0='EBXVDUMPWUP53ZRX' where id=9; -update noar ti set v0='EBXVDUMPWUP53ZRX' where id=9; -update noar tt set b1='J' where id=9; -update noar ti set b1='J' where id=9; -update noar tt set v0='X8ZX2S' where id=9; -update noar ti set v0='X8ZX2S' where id=9; -update noar tt set b2='ABNA85AE8H25AY4D83FJONELG1FBU3L7' where id=9; -update noar ti set b2='ABNA85AE8H25AY4D83FJONELG1FBU3L7' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 mediumblob null, - b1 tinyblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='BRNJ' where id=1; -update noar ti set v0='BRNJ' where id=1; -update noar tt set b0='R0ZEP9T' where id=1; -update noar ti set b0='R0ZEP9T' where id=1; -update noar tt set v0='ADQXWREPB637SILIJQ5N05NBGT' where id=1; -update noar ti set v0='ADQXWREPB637SILIJQ5N05NBGT' where id=1; -update noar tt set b1='2JWOBDTVSVAE6T8RN8QCPXIF1DYDES9' where id=1; -update noar ti set b1='2JWOBDTVSVAE6T8RN8QCPXIF1DYDES9' where id=1; -update noar tt set v0='YISO92KUL2QB35L5S57PI6DWM' where id=1; -update noar ti set v0='YISO92KUL2QB35L5S57PI6DWM' where id=1; -update noar tt set b2='HZ3OVMOBWG3WSAA32' where id=1; -update noar ti set b2='HZ3OVMOBWG3WSAA32' where id=1; -update noar tt set v0='0QY2NKDXBDTCQKS9UEMOQD7' where id=2; -update noar ti set v0='0QY2NKDXBDTCQKS9UEMOQD7' where id=2; -update noar tt set b0='ZEQA9Y8FDD694ZLKY2M8P9H3' where id=2; -update noar ti set b0='ZEQA9Y8FDD694ZLKY2M8P9H3' where id=2; -update noar tt set v0='ITOPJXOYH' where id=2; -update noar ti set v0='ITOPJXOYH' where id=2; -update noar tt set b1='HQGSGMLH0PGPB8' where id=2; -update noar ti set b1='HQGSGMLH0PGPB8' where id=2; -update noar tt set v0='44KJN' where id=2; -update noar ti set v0='44KJN' where id=2; -update noar tt set b2='Q23BYKABZ' where id=2; -update noar ti set b2='Q23BYKABZ' where id=2; -update noar tt set v0='3DLUCW0V529HOY0J' where id=3; -update noar ti set v0='3DLUCW0V529HOY0J' where id=3; -update noar tt set b0='M7OM2WQ' where id=3; -update noar ti set b0='M7OM2WQ' where id=3; -update noar tt set v0='F3C4D0Z0DC25L6XD3C' where id=3; -update noar ti set v0='F3C4D0Z0DC25L6XD3C' where id=3; -update noar tt set b1='WC41P1WQNRMHIFLDGZWY7OT3A783U' where id=3; -update noar ti set b1='WC41P1WQNRMHIFLDGZWY7OT3A783U' where id=3; -update noar tt set v0='N313TH' where id=3; -update noar ti set v0='N313TH' where id=3; -update noar tt set b2='8WGJ2P1P' where id=3; -update noar ti set b2='8WGJ2P1P' where id=3; -update noar tt set v0='PZ47VRUVV0W21MZVZ' where id=4; -update noar ti set v0='PZ47VRUVV0W21MZVZ' where id=4; -update noar tt set b0='U4Z2' where id=4; -update noar ti set b0='U4Z2' where id=4; -update noar tt set v0='6QVYTY3BBX1KJ7SLW9IU2HQ' where id=4; -update noar ti set v0='6QVYTY3BBX1KJ7SLW9IU2HQ' where id=4; -update noar tt set b1='KKO6A2QFSR1INUQ17' where id=4; -update noar ti set b1='KKO6A2QFSR1INUQ17' where id=4; -update noar tt set v0='TTN9F9KHFXV' where id=4; -update noar ti set v0='TTN9F9KHFXV' where id=4; -update noar tt set b2='NQVCQZYGXAO9NIMGHR0TK' where id=4; -update noar ti set b2='NQVCQZYGXAO9NIMGHR0TK' where id=4; -update noar tt set v0='LEGRO7N8Z69VB80L' where id=5; -update noar ti set v0='LEGRO7N8Z69VB80L' where id=5; -update noar tt set b0='8908XTYODQO0' where id=5; -update noar ti set b0='8908XTYODQO0' where id=5; -update noar tt set v0='SR' where id=5; -update noar ti set v0='SR' where id=5; -update noar tt set b1='QF5SXFVPA98' where id=5; -update noar ti set b1='QF5SXFVPA98' where id=5; -update noar tt set v0='5KNUMGRJ8683IZGDJS' where id=5; -update noar ti set v0='5KNUMGRJ8683IZGDJS' where id=5; -update noar tt set b2='F5CIDVNCIJ4WDXG' where id=5; -update noar ti set b2='F5CIDVNCIJ4WDXG' where id=5; -update noar tt set v0='XY9EYTT5WRX2QXTXDG09CDKMOYB' where id=6; -update noar ti set v0='XY9EYTT5WRX2QXTXDG09CDKMOYB' where id=6; -update noar tt set b0='985BSDRIFUAC70MH11TGFCN3P6' where id=6; -update noar ti set b0='985BSDRIFUAC70MH11TGFCN3P6' where id=6; -update noar tt set v0='AW7EIJ4HNW' where id=6; -update noar ti set v0='AW7EIJ4HNW' where id=6; -update noar tt set b1='X6BFNKFP2VS00SAYLMAJOO' where id=6; -update noar ti set b1='X6BFNKFP2VS00SAYLMAJOO' where id=6; -update noar tt set v0='DNO34BG10QBJO54977AI6M3KBA5VYHQ3' where id=6; -update noar ti set v0='DNO34BG10QBJO54977AI6M3KBA5VYHQ3' where id=6; -update noar tt set b2='SVZDG45A3505DQZ' where id=6; -update noar ti set b2='SVZDG45A3505DQZ' where id=6; -update noar tt set v0='UHJNP7T9KPC72M5HR' where id=7; -update noar ti set v0='UHJNP7T9KPC72M5HR' where id=7; -update noar tt set b0='0SOMHBCZV7T8STTP610F33CF5Z8' where id=7; -update noar ti set b0='0SOMHBCZV7T8STTP610F33CF5Z8' where id=7; -update noar tt set v0='GYWMS3LQIXTVLW8CH70' where id=7; -update noar ti set v0='GYWMS3LQIXTVLW8CH70' where id=7; -update noar tt set b1='PH2A949QDC5CB7YSQ041SBHLDV' where id=7; -update noar ti set b1='PH2A949QDC5CB7YSQ041SBHLDV' where id=7; -update noar tt set v0='DIXSDMFQSHD8' where id=7; -update noar ti set v0='DIXSDMFQSHD8' where id=7; -update noar tt set b2='HFIO8EBDF8BZZRPCZ75VC' where id=7; -update noar ti set b2='HFIO8EBDF8BZZRPCZ75VC' where id=7; -update noar tt set v0='8FQHKJ95U' where id=8; -update noar ti set v0='8FQHKJ95U' where id=8; -update noar tt set b0='BI8A545TJ9PU' where id=8; -update noar ti set b0='BI8A545TJ9PU' where id=8; -update noar tt set v0='WDTW2XQ7OW0UFA5CG' where id=8; -update noar ti set v0='WDTW2XQ7OW0UFA5CG' where id=8; -update noar tt set b1='MW843BW73P9EMAMJUD74TZKXJ9R3TW' where id=8; -update noar ti set b1='MW843BW73P9EMAMJUD74TZKXJ9R3TW' where id=8; -update noar tt set v0='QCP0VM2JKA0Z94CMUZXQ9XWBO1VXYY7' where id=8; -update noar ti set v0='QCP0VM2JKA0Z94CMUZXQ9XWBO1VXYY7' where id=8; -update noar tt set b2='ZGZ4LOJ6ULEM8HH8UBOS9EHYZLQ' where id=8; -update noar ti set b2='ZGZ4LOJ6ULEM8HH8UBOS9EHYZLQ' where id=8; -update noar tt set v0='K6' where id=9; -update noar ti set v0='K6' where id=9; -update noar tt set b0='LPZQ2' where id=9; -update noar ti set b0='LPZQ2' where id=9; -update noar tt set v0='WU8NI46FNT' where id=9; -update noar ti set v0='WU8NI46FNT' where id=9; -update noar tt set b1='ONSU5ENQH5AC3GREDTK1YASH' where id=9; -update noar ti set b1='ONSU5ENQH5AC3GREDTK1YASH' where id=9; -update noar tt set v0='UC8ALF0VFUA981K8D0JMA8FP8' where id=9; -update noar ti set v0='UC8ALF0VFUA981K8D0JMA8FP8' where id=9; -update noar tt set b2='CNBZG6GP3IG' where id=9; -update noar ti set b2='CNBZG6GP3IG' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 mediumblob not null, - b1 tinyblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='TH7UVMIEIKOWKWC6D0HS' where id=1; -update noar ti set v0='TH7UVMIEIKOWKWC6D0HS' where id=1; -update noar tt set b0='8C3Q698B5AZWC69VJ15OBMFDTC' where id=1; -update noar ti set b0='8C3Q698B5AZWC69VJ15OBMFDTC' where id=1; -update noar tt set v0='CS' where id=1; -update noar ti set v0='CS' where id=1; -update noar tt set b1='IM454LYD6X5S2U4XC165Q' where id=1; -update noar ti set b1='IM454LYD6X5S2U4XC165Q' where id=1; -update noar tt set v0='6' where id=1; -update noar ti set v0='6' where id=1; -update noar tt set b2='VYY9WRU623S4B094RHYYW' where id=1; -update noar ti set b2='VYY9WRU623S4B094RHYYW' where id=1; -update noar tt set v0='7D2AA' where id=2; -update noar ti set v0='7D2AA' where id=2; -update noar tt set b0='24UUWTHBBLKGX8OEMYIRTM8S0XGT' where id=2; -update noar ti set b0='24UUWTHBBLKGX8OEMYIRTM8S0XGT' where id=2; -update noar tt set v0='B59P527ZW8R9' where id=2; -update noar ti set v0='B59P527ZW8R9' where id=2; -update noar tt set b1='9UURG9ZUJSQEZ7Z5BSSZYL3OOFB' where id=2; -update noar ti set b1='9UURG9ZUJSQEZ7Z5BSSZYL3OOFB' where id=2; -update noar tt set v0='UDPTMLINC5EE' where id=2; -update noar ti set v0='UDPTMLINC5EE' where id=2; -update noar tt set b2='0WZM2RXM7CXM5NXQ8IG' where id=2; -update noar ti set b2='0WZM2RXM7CXM5NXQ8IG' where id=2; -update noar tt set v0='2' where id=3; -update noar ti set v0='2' where id=3; -update noar tt set b0='XVMVMSX9E' where id=3; -update noar ti set b0='XVMVMSX9E' where id=3; -update noar tt set v0='Q9JPLXDKTN' where id=3; -update noar ti set v0='Q9JPLXDKTN' where id=3; -update noar tt set b1='4CZVQ20XZ1GEP63L4Q8D94VTYAVQ' where id=3; -update noar ti set b1='4CZVQ20XZ1GEP63L4Q8D94VTYAVQ' where id=3; -update noar tt set v0='1SFSJS' where id=3; -update noar ti set v0='1SFSJS' where id=3; -update noar tt set b2='V' where id=3; -update noar ti set b2='V' where id=3; -update noar tt set v0='JN4BJM70W10T15C15EKMVUNGSH' where id=4; -update noar ti set v0='JN4BJM70W10T15C15EKMVUNGSH' where id=4; -update noar tt set b0='LYD6Q1' where id=4; -update noar ti set b0='LYD6Q1' where id=4; -update noar tt set v0='6WJPTLDWMLIX8344U25HMW3XZA' where id=4; -update noar ti set v0='6WJPTLDWMLIX8344U25HMW3XZA' where id=4; -update noar tt set b1='7' where id=4; -update noar ti set b1='7' where id=4; -update noar tt set v0='644EE3PPAXKGXJQ3M8B0XY' where id=4; -update noar ti set v0='644EE3PPAXKGXJQ3M8B0XY' where id=4; -update noar tt set b2='33HIWBVW7ZUN8AM4NVDIA7JCU6OV' where id=4; -update noar ti set b2='33HIWBVW7ZUN8AM4NVDIA7JCU6OV' where id=4; -update noar tt set v0='Y9ETXJCII3MC58' where id=5; -update noar ti set v0='Y9ETXJCII3MC58' where id=5; -update noar tt set b0='0N0HGVJLLBH37CD1VAA8VK5U5TC' where id=5; -update noar ti set b0='0N0HGVJLLBH37CD1VAA8VK5U5TC' where id=5; -update noar tt set v0='AFTZA16CIX1W' where id=5; -update noar ti set v0='AFTZA16CIX1W' where id=5; -update noar tt set b1='4' where id=5; -update noar ti set b1='4' where id=5; -update noar tt set v0='FY75YOMMXG9OLMDD1Z' where id=5; -update noar ti set v0='FY75YOMMXG9OLMDD1Z' where id=5; -update noar tt set b2='4IWO74GU7GZP9PIRRX9US4YW' where id=5; -update noar ti set b2='4IWO74GU7GZP9PIRRX9US4YW' where id=5; -update noar tt set v0='M9A' where id=6; -update noar ti set v0='M9A' where id=6; -update noar tt set b0='U' where id=6; -update noar ti set b0='U' where id=6; -update noar tt set v0='I3A0RXR95B2R5DLSSG5' where id=6; -update noar ti set v0='I3A0RXR95B2R5DLSSG5' where id=6; -update noar tt set b1='W5MTAI14B4O7LJVMP1H' where id=6; -update noar ti set b1='W5MTAI14B4O7LJVMP1H' where id=6; -update noar tt set v0='U' where id=6; -update noar ti set v0='U' where id=6; -update noar tt set b2='81Z1R' where id=6; -update noar ti set b2='81Z1R' where id=6; -update noar tt set v0='Z3HU22K7BN64IBJTE2' where id=7; -update noar ti set v0='Z3HU22K7BN64IBJTE2' where id=7; -update noar tt set b0='2QFGR9DI' where id=7; -update noar ti set b0='2QFGR9DI' where id=7; -update noar tt set v0='W64Y4HRF4XMQ2O' where id=7; -update noar ti set v0='W64Y4HRF4XMQ2O' where id=7; -update noar tt set b1='7NKKHVW9SNPP6OJZH1G' where id=7; -update noar ti set b1='7NKKHVW9SNPP6OJZH1G' where id=7; -update noar tt set v0='U6LF1' where id=7; -update noar ti set v0='U6LF1' where id=7; -update noar tt set b2='X22XVF5SE0NXWLLIII8S9UH79JUMT' where id=7; -update noar ti set b2='X22XVF5SE0NXWLLIII8S9UH79JUMT' where id=7; -update noar tt set v0='TMMVCKDIVAS4P' where id=8; -update noar ti set v0='TMMVCKDIVAS4P' where id=8; -update noar tt set b0='FGX8YR7MD9T68' where id=8; -update noar ti set b0='FGX8YR7MD9T68' where id=8; -update noar tt set v0='7C01B' where id=8; -update noar ti set v0='7C01B' where id=8; -update noar tt set b1='D423L38DIHGBLZWNY71P66VH5BMNOMG' where id=8; -update noar ti set b1='D423L38DIHGBLZWNY71P66VH5BMNOMG' where id=8; -update noar tt set v0='EJGNO9SXMFSG0FMB0VVB' where id=8; -update noar ti set v0='EJGNO9SXMFSG0FMB0VVB' where id=8; -update noar tt set b2='AA32BL9UJBHRJ3T' where id=8; -update noar ti set b2='AA32BL9UJBHRJ3T' where id=8; -update noar tt set v0='4UST1' where id=9; -update noar ti set v0='4UST1' where id=9; -update noar tt set b0='8U6X4AWR4QC7DVRGN5PXIY9E5' where id=9; -update noar ti set b0='8U6X4AWR4QC7DVRGN5PXIY9E5' where id=9; -update noar tt set v0='IK9INHJ4GI46WRT9F89CO56CLJ1' where id=9; -update noar ti set v0='IK9INHJ4GI46WRT9F89CO56CLJ1' where id=9; -update noar tt set b1='J7BM4P3M5UAOWETNSNKM9G6FQAIB' where id=9; -update noar ti set b1='J7BM4P3M5UAOWETNSNKM9G6FQAIB' where id=9; -update noar tt set v0='E8GIZWM0T' where id=9; -update noar ti set v0='E8GIZWM0T' where id=9; -update noar tt set b2='0342DNAD3R3VQ0FSG' where id=9; -update noar ti set b2='0342DNAD3R3VQ0FSG' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 mediumblob not null, - b1 tinyblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='6KVFIRTZ354LYTPXK2FM6F97F' where id=1; -update noar ti set v0='6KVFIRTZ354LYTPXK2FM6F97F' where id=1; -update noar tt set b0='4LMHLFRN56JGAYHAS0JBO2UZPX72NSA' where id=1; -update noar ti set b0='4LMHLFRN56JGAYHAS0JBO2UZPX72NSA' where id=1; -update noar tt set v0='XRZO7583' where id=1; -update noar ti set v0='XRZO7583' where id=1; -update noar tt set b1='TP97NN39JN5O54' where id=1; -update noar ti set b1='TP97NN39JN5O54' where id=1; -update noar tt set v0='M7NQMI3AKMZLAFMZYCRBUP' where id=1; -update noar ti set v0='M7NQMI3AKMZLAFMZYCRBUP' where id=1; -update noar tt set b2='2JT09K00UUG5Y2' where id=1; -update noar ti set b2='2JT09K00UUG5Y2' where id=1; -update noar tt set v0='QQDS1' where id=2; -update noar ti set v0='QQDS1' where id=2; -update noar tt set b0='14YAZ0UDWUR1PWNWF5AABRS' where id=2; -update noar ti set b0='14YAZ0UDWUR1PWNWF5AABRS' where id=2; -update noar tt set v0='2HPFLNOI' where id=2; -update noar ti set v0='2HPFLNOI' where id=2; -update noar tt set b1='VW' where id=2; -update noar ti set b1='VW' where id=2; -update noar tt set v0='D7EDMNGL5HOJ7QZGUSWKBZ1VQMVKDW' where id=2; -update noar ti set v0='D7EDMNGL5HOJ7QZGUSWKBZ1VQMVKDW' where id=2; -update noar tt set b2='TKQHZBAB7UII22N' where id=2; -update noar ti set b2='TKQHZBAB7UII22N' where id=2; -update noar tt set v0='GATB8QG4K12HS44HIJ54R8W' where id=3; -update noar ti set v0='GATB8QG4K12HS44HIJ54R8W' where id=3; -update noar tt set b0='N8R' where id=3; -update noar ti set b0='N8R' where id=3; -update noar tt set v0='OAZT' where id=3; -update noar ti set v0='OAZT' where id=3; -update noar tt set b1='1V1HVIW6735HX67NZTU' where id=3; -update noar ti set b1='1V1HVIW6735HX67NZTU' where id=3; -update noar tt set v0='A4Q3RW6RG7' where id=3; -update noar ti set v0='A4Q3RW6RG7' where id=3; -update noar tt set b2='X33R0KLS8Z9GG4P25FY7O279GN1Y' where id=3; -update noar ti set b2='X33R0KLS8Z9GG4P25FY7O279GN1Y' where id=3; -update noar tt set v0='CM5TSXRMW1B0ONLI9KYOUGC' where id=4; -update noar ti set v0='CM5TSXRMW1B0ONLI9KYOUGC' where id=4; -update noar tt set b0='GV7U3UZBN8OPMV3ZFQT7CH3RVVHQG' where id=4; -update noar ti set b0='GV7U3UZBN8OPMV3ZFQT7CH3RVVHQG' where id=4; -update noar tt set v0='LOIQWJJ9808COO0NY78QD9OISPK0BW' where id=4; -update noar ti set v0='LOIQWJJ9808COO0NY78QD9OISPK0BW' where id=4; -update noar tt set b1='SQR93' where id=4; -update noar ti set b1='SQR93' where id=4; -update noar tt set v0='QGCI76U34C9FB6' where id=4; -update noar ti set v0='QGCI76U34C9FB6' where id=4; -update noar tt set b2='6KUIT' where id=4; -update noar ti set b2='6KUIT' where id=4; -update noar tt set v0='3QT0K8O' where id=5; -update noar ti set v0='3QT0K8O' where id=5; -update noar tt set b0='SQDLGBEULRU2EFQ440' where id=5; -update noar ti set b0='SQDLGBEULRU2EFQ440' where id=5; -update noar tt set v0='DTD1RKDYV4KC1' where id=5; -update noar ti set v0='DTD1RKDYV4KC1' where id=5; -update noar tt set b1='X0GFUQGAL5WHK' where id=5; -update noar ti set b1='X0GFUQGAL5WHK' where id=5; -update noar tt set v0='B8H6KHRET1P5XKIQ3CCHCTIZTAUA2' where id=5; -update noar ti set v0='B8H6KHRET1P5XKIQ3CCHCTIZTAUA2' where id=5; -update noar tt set b2='VATYHMH8N7A2877NMEU2JFB891U' where id=5; -update noar ti set b2='VATYHMH8N7A2877NMEU2JFB891U' where id=5; -update noar tt set v0='67HUVP3PJU0N' where id=6; -update noar ti set v0='67HUVP3PJU0N' where id=6; -update noar tt set b0='HUPD22HZD' where id=6; -update noar ti set b0='HUPD22HZD' where id=6; -update noar tt set v0='J3P70REANLB2I348DELB20PO' where id=6; -update noar ti set v0='J3P70REANLB2I348DELB20PO' where id=6; -update noar tt set b1='3UFYMMM8RQP530AU08RZEF716TDSH4' where id=6; -update noar ti set b1='3UFYMMM8RQP530AU08RZEF716TDSH4' where id=6; -update noar tt set v0='LD' where id=6; -update noar ti set v0='LD' where id=6; -update noar tt set b2='KJ53P' where id=6; -update noar ti set b2='KJ53P' where id=6; -update noar tt set v0='I' where id=7; -update noar ti set v0='I' where id=7; -update noar tt set b0='RC4COSJJY' where id=7; -update noar ti set b0='RC4COSJJY' where id=7; -update noar tt set v0='QJ3YEZ4BYIVWBN3UCNT3QJ5BUZ3' where id=7; -update noar ti set v0='QJ3YEZ4BYIVWBN3UCNT3QJ5BUZ3' where id=7; -update noar tt set b1='II1L6B1V0MG2B24F4S0H0FDY' where id=7; -update noar ti set b1='II1L6B1V0MG2B24F4S0H0FDY' where id=7; -update noar tt set v0='9713QXUKOK3UME' where id=7; -update noar ti set v0='9713QXUKOK3UME' where id=7; -update noar tt set b2='CTN6M9KSTBDPI3B6QOSFJYQ' where id=7; -update noar ti set b2='CTN6M9KSTBDPI3B6QOSFJYQ' where id=7; -update noar tt set v0='SOU5QQ2PUUR9FV7QCZ' where id=8; -update noar ti set v0='SOU5QQ2PUUR9FV7QCZ' where id=8; -update noar tt set b0='Z6P5' where id=8; -update noar ti set b0='Z6P5' where id=8; -update noar tt set v0='LYFA21YOE9Y1Q484CH6WJK' where id=8; -update noar ti set v0='LYFA21YOE9Y1Q484CH6WJK' where id=8; -update noar tt set b1='ZQJBW970U8KO82' where id=8; -update noar ti set b1='ZQJBW970U8KO82' where id=8; -update noar tt set v0='Z9LKVD62S3B7ZIFL' where id=8; -update noar ti set v0='Z9LKVD62S3B7ZIFL' where id=8; -update noar tt set b2='GPGBBO8B1R2WG5MGSZGC2P28' where id=8; -update noar ti set b2='GPGBBO8B1R2WG5MGSZGC2P28' where id=8; -update noar tt set v0='0949Y6VFL63EZGIGDDZSXE4OUNRUTL0C' where id=9; -update noar ti set v0='0949Y6VFL63EZGIGDDZSXE4OUNRUTL0C' where id=9; -update noar tt set b0='NO' where id=9; -update noar ti set b0='NO' where id=9; -update noar tt set v0='3SXZAU2MA481SH8XBX7O569DFSFX' where id=9; -update noar ti set v0='3SXZAU2MA481SH8XBX7O569DFSFX' where id=9; -update noar tt set b1='Q333A2Q8' where id=9; -update noar ti set b1='Q333A2Q8' where id=9; -update noar tt set v0='NLLGJR235L' where id=9; -update noar ti set v0='NLLGJR235L' where id=9; -update noar tt set b2='4SM7WEFTVMSNRPHZJOBF3BFZ8EYVAO' where id=9; -update noar ti set b2='4SM7WEFTVMSNRPHZJOBF3BFZ8EYVAO' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 mediumblob null, - b1 tinyblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='GIAIMRY' where id=1; -update noar ti set v0='GIAIMRY' where id=1; -update noar tt set b0='MQ2R6P6CYS1GOBM0' where id=1; -update noar ti set b0='MQ2R6P6CYS1GOBM0' where id=1; -update noar tt set v0='J6TX9Z74YL3XLT1BVL4QOM2NIU' where id=1; -update noar ti set v0='J6TX9Z74YL3XLT1BVL4QOM2NIU' where id=1; -update noar tt set b1='V8S21JGOUIJD0J66VXD68FM0T3I' where id=1; -update noar ti set b1='V8S21JGOUIJD0J66VXD68FM0T3I' where id=1; -update noar tt set v0='7LPDBCFNA70OE97CT' where id=1; -update noar ti set v0='7LPDBCFNA70OE97CT' where id=1; -update noar tt set b2='ZR69U74BCO' where id=1; -update noar ti set b2='ZR69U74BCO' where id=1; -update noar tt set v0='UOKZD0DDO3E49RAFA8OR3HRKLO8PSRSV' where id=2; -update noar ti set v0='UOKZD0DDO3E49RAFA8OR3HRKLO8PSRSV' where id=2; -update noar tt set b0='F3XBXIPQ48QMUMW8S6JI8JIU5' where id=2; -update noar ti set b0='F3XBXIPQ48QMUMW8S6JI8JIU5' where id=2; -update noar tt set v0='0GEQQBJQ2MQEEBTEPK2' where id=2; -update noar ti set v0='0GEQQBJQ2MQEEBTEPK2' where id=2; -update noar tt set b1='M5JGSJWRAZIVHTZNPXIELWA' where id=2; -update noar ti set b1='M5JGSJWRAZIVHTZNPXIELWA' where id=2; -update noar tt set v0='VWVXBHKJL68XCP0W8BY' where id=2; -update noar ti set v0='VWVXBHKJL68XCP0W8BY' where id=2; -update noar tt set b2='RL4R431VDKQHBN1' where id=2; -update noar ti set b2='RL4R431VDKQHBN1' where id=2; -update noar tt set v0='USCYELR8BY07HI1R6' where id=3; -update noar ti set v0='USCYELR8BY07HI1R6' where id=3; -update noar tt set b0='QRFHDFW' where id=3; -update noar ti set b0='QRFHDFW' where id=3; -update noar tt set v0='I8FDSW3GO5MX76024G1TSNOGV3FXK' where id=3; -update noar ti set v0='I8FDSW3GO5MX76024G1TSNOGV3FXK' where id=3; -update noar tt set b1='U3NLW608YCBIJO6ZO7Y8HO' where id=3; -update noar ti set b1='U3NLW608YCBIJO6ZO7Y8HO' where id=3; -update noar tt set v0='VJQW8B0TRHU' where id=3; -update noar ti set v0='VJQW8B0TRHU' where id=3; -update noar tt set b2='19EL7ZQELWN' where id=3; -update noar ti set b2='19EL7ZQELWN' where id=3; -update noar tt set v0='KQ9WZM60583O3QP' where id=4; -update noar ti set v0='KQ9WZM60583O3QP' where id=4; -update noar tt set b0='XMJSL2ZPKOTM0996LF' where id=4; -update noar ti set b0='XMJSL2ZPKOTM0996LF' where id=4; -update noar tt set v0='4BPGHZWRCAYJBF8' where id=4; -update noar ti set v0='4BPGHZWRCAYJBF8' where id=4; -update noar tt set b1='L5E014TG7U5KZ7F7LC' where id=4; -update noar ti set b1='L5E014TG7U5KZ7F7LC' where id=4; -update noar tt set v0='PXKJIV0140NLLQDCR830INOHTB' where id=4; -update noar ti set v0='PXKJIV0140NLLQDCR830INOHTB' where id=4; -update noar tt set b2='RW4C' where id=4; -update noar ti set b2='RW4C' where id=4; -update noar tt set v0='3RWBK0BJY1PRLOJZZ' where id=5; -update noar ti set v0='3RWBK0BJY1PRLOJZZ' where id=5; -update noar tt set b0='A' where id=5; -update noar ti set b0='A' where id=5; -update noar tt set v0='SK8YEBOP1HU601TMMF5SMOQ9' where id=5; -update noar ti set v0='SK8YEBOP1HU601TMMF5SMOQ9' where id=5; -update noar tt set b1='INR0H0' where id=5; -update noar ti set b1='INR0H0' where id=5; -update noar tt set v0='JRB1J3N0' where id=5; -update noar ti set v0='JRB1J3N0' where id=5; -update noar tt set b2='NBVXYTYWGLIGGJHRA2C0' where id=5; -update noar ti set b2='NBVXYTYWGLIGGJHRA2C0' where id=5; -update noar tt set v0='RQLW' where id=6; -update noar ti set v0='RQLW' where id=6; -update noar tt set b0='SSLIJIZW3I8Z13LC2RM577' where id=6; -update noar ti set b0='SSLIJIZW3I8Z13LC2RM577' where id=6; -update noar tt set v0='2BO5N3W8WI4N6OME2MKD1NC' where id=6; -update noar ti set v0='2BO5N3W8WI4N6OME2MKD1NC' where id=6; -update noar tt set b1='IGAKA851VXVNQNPZH5DWRH65' where id=6; -update noar ti set b1='IGAKA851VXVNQNPZH5DWRH65' where id=6; -update noar tt set v0='NSMUJPVQC' where id=6; -update noar ti set v0='NSMUJPVQC' where id=6; -update noar tt set b2='ID5IN1AB2LDFAEUR2G' where id=6; -update noar ti set b2='ID5IN1AB2LDFAEUR2G' where id=6; -update noar tt set v0='RMO' where id=7; -update noar ti set v0='RMO' where id=7; -update noar tt set b0='5Y3J41T33RPMQ' where id=7; -update noar ti set b0='5Y3J41T33RPMQ' where id=7; -update noar tt set v0='1' where id=7; -update noar ti set v0='1' where id=7; -update noar tt set b1='7UNXD8539M1AQVAKJ2K5XNQ' where id=7; -update noar ti set b1='7UNXD8539M1AQVAKJ2K5XNQ' where id=7; -update noar tt set v0='02UNVRHFT9MLHAY6J8' where id=7; -update noar ti set v0='02UNVRHFT9MLHAY6J8' where id=7; -update noar tt set b2='3Z6EL36QQSE8CDT8' where id=7; -update noar ti set b2='3Z6EL36QQSE8CDT8' where id=7; -update noar tt set v0='SZCHT9NJLJN2A7N7XZYF1RL6' where id=8; -update noar ti set v0='SZCHT9NJLJN2A7N7XZYF1RL6' where id=8; -update noar tt set b0='43LZI9FW6X7VK33RMGFXX56V' where id=8; -update noar ti set b0='43LZI9FW6X7VK33RMGFXX56V' where id=8; -update noar tt set v0='3ZLCOU6F7W7O7S3C5HJPL51QM0H1M' where id=8; -update noar ti set v0='3ZLCOU6F7W7O7S3C5HJPL51QM0H1M' where id=8; -update noar tt set b1='I4YIYKNQBOK8T1OOGR5' where id=8; -update noar ti set b1='I4YIYKNQBOK8T1OOGR5' where id=8; -update noar tt set v0='KCEW67CD9YUS' where id=8; -update noar ti set v0='KCEW67CD9YUS' where id=8; -update noar tt set b2='Q75FX4L9CUPC8B' where id=8; -update noar ti set b2='Q75FX4L9CUPC8B' where id=8; -update noar tt set v0='PWEUDK6CSU7SMTFE8MHRDRI6' where id=9; -update noar ti set v0='PWEUDK6CSU7SMTFE8MHRDRI6' where id=9; -update noar tt set b0='CN46TH3KF31A81KW0Q2BNXGRE5' where id=9; -update noar ti set b0='CN46TH3KF31A81KW0Q2BNXGRE5' where id=9; -update noar tt set v0='6FSSBVOPALV64D' where id=9; -update noar ti set v0='6FSSBVOPALV64D' where id=9; -update noar tt set b1='2BHVYYA53WPZY8R' where id=9; -update noar ti set b1='2BHVYYA53WPZY8R' where id=9; -update noar tt set v0='KN2OPHKMAK3AKEEE1CV0E5B8L' where id=9; -update noar ti set v0='KN2OPHKMAK3AKEEE1CV0E5B8L' where id=9; -update noar tt set b2='I847C7HSS26WCT' where id=9; -update noar ti set b2='I847C7HSS26WCT' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 mediumblob null, - b1 tinyblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='QH6K36CVT4MOFWFPT7ASIGBMTQ' where id=1; -update noar ti set v0='QH6K36CVT4MOFWFPT7ASIGBMTQ' where id=1; -update noar tt set b0='KYWWIJPJPJFC740FUSHV13C' where id=1; -update noar ti set b0='KYWWIJPJPJFC740FUSHV13C' where id=1; -update noar tt set v0='BVIR3ZIFIK5LQPP5L8XE94CFQX' where id=1; -update noar ti set v0='BVIR3ZIFIK5LQPP5L8XE94CFQX' where id=1; -update noar tt set b1='BHDWN391SU' where id=1; -update noar ti set b1='BHDWN391SU' where id=1; -update noar tt set v0='YD1V8YJY9FJ0LAO0NGKBLQ67CVWCGW' where id=1; -update noar ti set v0='YD1V8YJY9FJ0LAO0NGKBLQ67CVWCGW' where id=1; -update noar tt set b2='L5QS406J4LPEKBWBD' where id=1; -update noar ti set b2='L5QS406J4LPEKBWBD' where id=1; -update noar tt set v0='1AC0DQ33PWSR' where id=2; -update noar ti set v0='1AC0DQ33PWSR' where id=2; -update noar tt set b0='43Q4CLY7QFSV6G4W84CBHJGX' where id=2; -update noar ti set b0='43Q4CLY7QFSV6G4W84CBHJGX' where id=2; -update noar tt set v0='YL5YNZST4U2HM02KAEL344B' where id=2; -update noar ti set v0='YL5YNZST4U2HM02KAEL344B' where id=2; -update noar tt set b1='J' where id=2; -update noar ti set b1='J' where id=2; -update noar tt set v0='NEWUL' where id=2; -update noar ti set v0='NEWUL' where id=2; -update noar tt set b2='2O' where id=2; -update noar ti set b2='2O' where id=2; -update noar tt set v0='I2OMK9JODMVRJFVXVZ0C82MOWZ8MYS1A' where id=3; -update noar ti set v0='I2OMK9JODMVRJFVXVZ0C82MOWZ8MYS1A' where id=3; -update noar tt set b0='OJRCJGW' where id=3; -update noar ti set b0='OJRCJGW' where id=3; -update noar tt set v0='JEE1YC2ZN0J71DUVEH' where id=3; -update noar ti set v0='JEE1YC2ZN0J71DUVEH' where id=3; -update noar tt set b1='3QYLUDZR3B18RDIH7B7YEBYJ4W8HJ' where id=3; -update noar ti set b1='3QYLUDZR3B18RDIH7B7YEBYJ4W8HJ' where id=3; -update noar tt set v0='S594BSI16QSX4W4G' where id=3; -update noar ti set v0='S594BSI16QSX4W4G' where id=3; -update noar tt set b2='QP6RCNTURLSL' where id=3; -update noar ti set b2='QP6RCNTURLSL' where id=3; -update noar tt set v0='T' where id=4; -update noar ti set v0='T' where id=4; -update noar tt set b0='5' where id=4; -update noar ti set b0='5' where id=4; -update noar tt set v0='OOJ0IIMQ914CNHNC6QG2BG423LEW49' where id=4; -update noar ti set v0='OOJ0IIMQ914CNHNC6QG2BG423LEW49' where id=4; -update noar tt set b1='DAKMMKFRPIENJI2' where id=4; -update noar ti set b1='DAKMMKFRPIENJI2' where id=4; -update noar tt set v0='V17OVNSOEHPEGA81' where id=4; -update noar ti set v0='V17OVNSOEHPEGA81' where id=4; -update noar tt set b2='P6Q0' where id=4; -update noar ti set b2='P6Q0' where id=4; -update noar tt set v0='JDWALEQEYOSUHM' where id=5; -update noar ti set v0='JDWALEQEYOSUHM' where id=5; -update noar tt set b0='8UX4O6B' where id=5; -update noar ti set b0='8UX4O6B' where id=5; -update noar tt set v0='D5IUH8VXUFCD2A3DRXL39' where id=5; -update noar ti set v0='D5IUH8VXUFCD2A3DRXL39' where id=5; -update noar tt set b1='E5GK5A4UOAFU21JAJFMIJ4' where id=5; -update noar ti set b1='E5GK5A4UOAFU21JAJFMIJ4' where id=5; -update noar tt set v0='37G6QITT8UWJAQSPO6W9QMJLHHF74KB3' where id=5; -update noar ti set v0='37G6QITT8UWJAQSPO6W9QMJLHHF74KB3' where id=5; -update noar tt set b2='WXOLDPZBH7O6WE1A54RUJ3QVYKT8E' where id=5; -update noar ti set b2='WXOLDPZBH7O6WE1A54RUJ3QVYKT8E' where id=5; -update noar tt set v0='C8VRMW3LVHOC5S4' where id=6; -update noar ti set v0='C8VRMW3LVHOC5S4' where id=6; -update noar tt set b0='0YV87CFU2XYDSHJV1BM0M160BKF4' where id=6; -update noar ti set b0='0YV87CFU2XYDSHJV1BM0M160BKF4' where id=6; -update noar tt set v0='KO6V0ME4R2PFB0J0W8I5V2X4RL5REZLU' where id=6; -update noar ti set v0='KO6V0ME4R2PFB0J0W8I5V2X4RL5REZLU' where id=6; -update noar tt set b1='XXJ4R8IY69HZFWEP8VT1NNY' where id=6; -update noar ti set b1='XXJ4R8IY69HZFWEP8VT1NNY' where id=6; -update noar tt set v0='TWOV' where id=6; -update noar ti set v0='TWOV' where id=6; -update noar tt set b2='0EMX3IAEC2NFEZP' where id=6; -update noar ti set b2='0EMX3IAEC2NFEZP' where id=6; -update noar tt set v0='C6OJ2A' where id=7; -update noar ti set v0='C6OJ2A' where id=7; -update noar tt set b0='CQSIZ3GYCN3QOEQUC0B558PUM4NRPAG9' where id=7; -update noar ti set b0='CQSIZ3GYCN3QOEQUC0B558PUM4NRPAG9' where id=7; -update noar tt set v0='O0TZ6YK6Y7Y5WL7DGB7BHGAJX0N' where id=7; -update noar ti set v0='O0TZ6YK6Y7Y5WL7DGB7BHGAJX0N' where id=7; -update noar tt set b1='KAKJT3PO15XEAX6H06XYSASU8GY' where id=7; -update noar ti set b1='KAKJT3PO15XEAX6H06XYSASU8GY' where id=7; -update noar tt set v0='BSEVL' where id=7; -update noar ti set v0='BSEVL' where id=7; -update noar tt set b2='8YZUJYMYW' where id=7; -update noar ti set b2='8YZUJYMYW' where id=7; -update noar tt set v0='BSTI1E' where id=8; -update noar ti set v0='BSTI1E' where id=8; -update noar tt set b0='KLN0LA8' where id=8; -update noar ti set b0='KLN0LA8' where id=8; -update noar tt set v0='4EKCYHA04LRFBWGN6Z' where id=8; -update noar ti set v0='4EKCYHA04LRFBWGN6Z' where id=8; -update noar tt set b1='EZZRX914WC5F7V26A6TESEUQD' where id=8; -update noar ti set b1='EZZRX914WC5F7V26A6TESEUQD' where id=8; -update noar tt set v0='3M9BPW5V46K6XHA' where id=8; -update noar ti set v0='3M9BPW5V46K6XHA' where id=8; -update noar tt set b2='TSKCIU5Y5N6KYRPKDRJQ19HBVYS3C' where id=8; -update noar ti set b2='TSKCIU5Y5N6KYRPKDRJQ19HBVYS3C' where id=8; -update noar tt set v0='0LXC71ITYRX7UFGLNUGRWWVHG19B' where id=9; -update noar ti set v0='0LXC71ITYRX7UFGLNUGRWWVHG19B' where id=9; -update noar tt set b0='INH4GNQWU19CZCONEVI2X3BMH4' where id=9; -update noar ti set b0='INH4GNQWU19CZCONEVI2X3BMH4' where id=9; -update noar tt set v0='YEMOKFWHBEO9K' where id=9; -update noar ti set v0='YEMOKFWHBEO9K' where id=9; -update noar tt set b1='2CWV7QJWYPW1VP7SWH3SI3I' where id=9; -update noar ti set b1='2CWV7QJWYPW1VP7SWH3SI3I' where id=9; -update noar tt set v0='R1MN2YW8QMAVWHW1' where id=9; -update noar ti set v0='R1MN2YW8QMAVWHW1' where id=9; -update noar tt set b2='9WUD29' where id=9; -update noar ti set b2='9WUD29' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 mediumblob not null, - b1 tinyblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='B5T8' where id=1; -update noar ti set v0='B5T8' where id=1; -update noar tt set b0='CO660TAJODWYREKTIL8MWIW5P2AE87' where id=1; -update noar ti set b0='CO660TAJODWYREKTIL8MWIW5P2AE87' where id=1; -update noar tt set v0='T804NWS769TX4' where id=1; -update noar ti set v0='T804NWS769TX4' where id=1; -update noar tt set b1='MRIT7' where id=1; -update noar ti set b1='MRIT7' where id=1; -update noar tt set v0='P965465JJWB3B0OGMUKJYERD6A9JJQWH' where id=1; -update noar ti set v0='P965465JJWB3B0OGMUKJYERD6A9JJQWH' where id=1; -update noar tt set b2='L3VSL' where id=1; -update noar ti set b2='L3VSL' where id=1; -update noar tt set v0='A0LGKO8Q8K64CBGE41CO3QP0' where id=2; -update noar ti set v0='A0LGKO8Q8K64CBGE41CO3QP0' where id=2; -update noar tt set b0='FOWFJ0K0T2PUQ1RXKBPZFXUK1R2' where id=2; -update noar ti set b0='FOWFJ0K0T2PUQ1RXKBPZFXUK1R2' where id=2; -update noar tt set v0='C9H904Q' where id=2; -update noar ti set v0='C9H904Q' where id=2; -update noar tt set b1='G5VF3NYLN7C1VWF80P348IWXXZD9' where id=2; -update noar ti set b1='G5VF3NYLN7C1VWF80P348IWXXZD9' where id=2; -update noar tt set v0='Q8W5VA3JQ7ITF899ATZUA6304' where id=2; -update noar ti set v0='Q8W5VA3JQ7ITF899ATZUA6304' where id=2; -update noar tt set b2='F' where id=2; -update noar ti set b2='F' where id=2; -update noar tt set v0='PD2ERK4ZXXWISLGO24E18P' where id=3; -update noar ti set v0='PD2ERK4ZXXWISLGO24E18P' where id=3; -update noar tt set b0='LA67KMQ5B65VQYOWE0B' where id=3; -update noar ti set b0='LA67KMQ5B65VQYOWE0B' where id=3; -update noar tt set v0='PWN6NKI9Z4T' where id=3; -update noar ti set v0='PWN6NKI9Z4T' where id=3; -update noar tt set b1='F7Y2IVQB3LHPM23A' where id=3; -update noar ti set b1='F7Y2IVQB3LHPM23A' where id=3; -update noar tt set v0='SVJ' where id=3; -update noar ti set v0='SVJ' where id=3; -update noar tt set b2='UF7DA6ZNGPMGEV3FKZ1BSIYF6EQH5BM' where id=3; -update noar ti set b2='UF7DA6ZNGPMGEV3FKZ1BSIYF6EQH5BM' where id=3; -update noar tt set v0='KIDNWJM4D9' where id=4; -update noar ti set v0='KIDNWJM4D9' where id=4; -update noar tt set b0='E747G3' where id=4; -update noar ti set b0='E747G3' where id=4; -update noar tt set v0='Z4H3CQ0FE1H11JIZAIBDLMFDCJP55G' where id=4; -update noar ti set v0='Z4H3CQ0FE1H11JIZAIBDLMFDCJP55G' where id=4; -update noar tt set b1='524HM3B33V0O69AHSIKA' where id=4; -update noar ti set b1='524HM3B33V0O69AHSIKA' where id=4; -update noar tt set v0='VOL4RLSSP0HVD60WPW894AD34RB9' where id=4; -update noar ti set v0='VOL4RLSSP0HVD60WPW894AD34RB9' where id=4; -update noar tt set b2='4' where id=4; -update noar ti set b2='4' where id=4; -update noar tt set v0='9TE1U5U9NFQMZFHSR1R' where id=5; -update noar ti set v0='9TE1U5U9NFQMZFHSR1R' where id=5; -update noar tt set b0='X7UTGX47OC2A2F' where id=5; -update noar ti set b0='X7UTGX47OC2A2F' where id=5; -update noar tt set v0='S4CAA2KY4ZJJF5KA23R9GNEKK0IOG' where id=5; -update noar ti set v0='S4CAA2KY4ZJJF5KA23R9GNEKK0IOG' where id=5; -update noar tt set b1='94VNW042WE6Q77VSK57PCZTODOHJH' where id=5; -update noar ti set b1='94VNW042WE6Q77VSK57PCZTODOHJH' where id=5; -update noar tt set v0='7QHFHI6RCUBYZV' where id=5; -update noar ti set v0='7QHFHI6RCUBYZV' where id=5; -update noar tt set b2='TMNH1U3HUJYYF3N09S7W24' where id=5; -update noar ti set b2='TMNH1U3HUJYYF3N09S7W24' where id=5; -update noar tt set v0='BTB2NO9491ICN5IP8WZJMSLU6XP' where id=6; -update noar ti set v0='BTB2NO9491ICN5IP8WZJMSLU6XP' where id=6; -update noar tt set b0='76IMRVZPAVNFZ8UMXV' where id=6; -update noar ti set b0='76IMRVZPAVNFZ8UMXV' where id=6; -update noar tt set v0='7SZV42' where id=6; -update noar ti set v0='7SZV42' where id=6; -update noar tt set b1='E7J6TRPPXVE7O0GNXKIJF' where id=6; -update noar ti set b1='E7J6TRPPXVE7O0GNXKIJF' where id=6; -update noar tt set v0='E2O7AJASI' where id=6; -update noar ti set v0='E2O7AJASI' where id=6; -update noar tt set b2='DJXDN1UEJADMCZHZ9ID94YKV63RXITE' where id=6; -update noar ti set b2='DJXDN1UEJADMCZHZ9ID94YKV63RXITE' where id=6; -update noar tt set v0='MLRH7GDXVXLN1OC' where id=7; -update noar ti set v0='MLRH7GDXVXLN1OC' where id=7; -update noar tt set b0='DUACNJ2UV7AF4SK1SIE9PV' where id=7; -update noar ti set b0='DUACNJ2UV7AF4SK1SIE9PV' where id=7; -update noar tt set v0='A4DXTA3SN6ZT2A8B0YR69YKW57DBM' where id=7; -update noar ti set v0='A4DXTA3SN6ZT2A8B0YR69YKW57DBM' where id=7; -update noar tt set b1='EOJR5YXUNWA1R' where id=7; -update noar ti set b1='EOJR5YXUNWA1R' where id=7; -update noar tt set v0='D0LQEI2S' where id=7; -update noar ti set v0='D0LQEI2S' where id=7; -update noar tt set b2='QVNAUUOJESJ9' where id=7; -update noar ti set b2='QVNAUUOJESJ9' where id=7; -update noar tt set v0='L9BL' where id=8; -update noar ti set v0='L9BL' where id=8; -update noar tt set b0='1IN4MACQGCPUZFK5JB' where id=8; -update noar ti set b0='1IN4MACQGCPUZFK5JB' where id=8; -update noar tt set v0='4KS0T9XZOZUR73ZL4DDI4MSZZ' where id=8; -update noar ti set v0='4KS0T9XZOZUR73ZL4DDI4MSZZ' where id=8; -update noar tt set b1='C9QX5Q83QEABX0KA1Z9U' where id=8; -update noar ti set b1='C9QX5Q83QEABX0KA1Z9U' where id=8; -update noar tt set v0='87674KIIE7PMNBVEKFZCCB0Q3' where id=8; -update noar ti set v0='87674KIIE7PMNBVEKFZCCB0Q3' where id=8; -update noar tt set b2='90CJOZW8OSS' where id=8; -update noar ti set b2='90CJOZW8OSS' where id=8; -update noar tt set v0='3RKWDA8MDQLJ4OJFXUEM7KK7EBPTM74F' where id=9; -update noar ti set v0='3RKWDA8MDQLJ4OJFXUEM7KK7EBPTM74F' where id=9; -update noar tt set b0='YKBU49YBLGBEFCE' where id=9; -update noar ti set b0='YKBU49YBLGBEFCE' where id=9; -update noar tt set v0='EWEX6U9JT' where id=9; -update noar ti set v0='EWEX6U9JT' where id=9; -update noar tt set b1='PEYDDLZ4BY3958T5N44F' where id=9; -update noar ti set b1='PEYDDLZ4BY3958T5N44F' where id=9; -update noar tt set v0='UMJGWE19' where id=9; -update noar ti set v0='UMJGWE19' where id=9; -update noar tt set b2='URP014FRP0VT' where id=9; -update noar ti set b2='URP014FRP0VT' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 mediumblob not null, - b1 tinyblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='6ICUD1RCNYUXD5G8QH2U' where id=1; -update noar ti set v0='6ICUD1RCNYUXD5G8QH2U' where id=1; -update noar tt set b0='T1' where id=1; -update noar ti set b0='T1' where id=1; -update noar tt set v0='TK6WHZBR7W2AX7GQ9Y6HVN0Z7' where id=1; -update noar ti set v0='TK6WHZBR7W2AX7GQ9Y6HVN0Z7' where id=1; -update noar tt set b1='6018X9W9Z9MCMN3H6' where id=1; -update noar ti set b1='6018X9W9Z9MCMN3H6' where id=1; -update noar tt set v0='O09X4V22OY3' where id=1; -update noar ti set v0='O09X4V22OY3' where id=1; -update noar tt set b2='WV92NADHCLKMYZV' where id=1; -update noar ti set b2='WV92NADHCLKMYZV' where id=1; -update noar tt set v0='I8YHO0RNDEN' where id=2; -update noar ti set v0='I8YHO0RNDEN' where id=2; -update noar tt set b0='L7WIUK5PF1F17IAEMZ6QYZ3VS' where id=2; -update noar ti set b0='L7WIUK5PF1F17IAEMZ6QYZ3VS' where id=2; -update noar tt set v0='IHSJ84PGBL5BTYL54TN2IX' where id=2; -update noar ti set v0='IHSJ84PGBL5BTYL54TN2IX' where id=2; -update noar tt set b1='36YOFM5O' where id=2; -update noar ti set b1='36YOFM5O' where id=2; -update noar tt set v0='HEQL7ODFJE3EO' where id=2; -update noar ti set v0='HEQL7ODFJE3EO' where id=2; -update noar tt set b2='7GPCM6K' where id=2; -update noar ti set b2='7GPCM6K' where id=2; -update noar tt set v0='UIPTAMOL3IC39LAV' where id=3; -update noar ti set v0='UIPTAMOL3IC39LAV' where id=3; -update noar tt set b0='66BOACX' where id=3; -update noar ti set b0='66BOACX' where id=3; -update noar tt set v0='4FS' where id=3; -update noar ti set v0='4FS' where id=3; -update noar tt set b1='GG' where id=3; -update noar ti set b1='GG' where id=3; -update noar tt set v0='2ZVCNCKHBSAOQL' where id=3; -update noar ti set v0='2ZVCNCKHBSAOQL' where id=3; -update noar tt set b2='RPGCLKP5CEC6L2N1TI7FQ0L1I' where id=3; -update noar ti set b2='RPGCLKP5CEC6L2N1TI7FQ0L1I' where id=3; -update noar tt set v0='SCKOIL5H5K8B90YVHJ0MZU00R6H' where id=4; -update noar ti set v0='SCKOIL5H5K8B90YVHJ0MZU00R6H' where id=4; -update noar tt set b0='LR6Z972L5FG' where id=4; -update noar ti set b0='LR6Z972L5FG' where id=4; -update noar tt set v0='BY4CVT' where id=4; -update noar ti set v0='BY4CVT' where id=4; -update noar tt set b1='SDC' where id=4; -update noar ti set b1='SDC' where id=4; -update noar tt set v0='Y352PRISAM7MWMUYZERKSGTIXHPA1OZ' where id=4; -update noar ti set v0='Y352PRISAM7MWMUYZERKSGTIXHPA1OZ' where id=4; -update noar tt set b2='H1B7J070BUNTWK8E' where id=4; -update noar ti set b2='H1B7J070BUNTWK8E' where id=4; -update noar tt set v0='4AQH50' where id=5; -update noar ti set v0='4AQH50' where id=5; -update noar tt set b0='84IVLFZQRRJ9SH1I9J' where id=5; -update noar ti set b0='84IVLFZQRRJ9SH1I9J' where id=5; -update noar tt set v0='837GEMP8JCRPN9D4V5C' where id=5; -update noar ti set v0='837GEMP8JCRPN9D4V5C' where id=5; -update noar tt set b1='O5FKFCJ18SWQA0CKWSEXJTI3OQ4' where id=5; -update noar ti set b1='O5FKFCJ18SWQA0CKWSEXJTI3OQ4' where id=5; -update noar tt set v0='T5P7O7ITWTZAO3LJWJV1BK0' where id=5; -update noar ti set v0='T5P7O7ITWTZAO3LJWJV1BK0' where id=5; -update noar tt set b2='HMTQXKEX' where id=5; -update noar ti set b2='HMTQXKEX' where id=5; -update noar tt set v0='RJXBPTV9XI31S7T1F45F0C7A41' where id=6; -update noar ti set v0='RJXBPTV9XI31S7T1F45F0C7A41' where id=6; -update noar tt set b0='H5VNEK4OM60IZPXQR2' where id=6; -update noar ti set b0='H5VNEK4OM60IZPXQR2' where id=6; -update noar tt set v0='P03NT7AEHRHX4WM6UI2C' where id=6; -update noar ti set v0='P03NT7AEHRHX4WM6UI2C' where id=6; -update noar tt set b1='2UL7' where id=6; -update noar ti set b1='2UL7' where id=6; -update noar tt set v0='KSSES9' where id=6; -update noar ti set v0='KSSES9' where id=6; -update noar tt set b2='0R1CE' where id=6; -update noar ti set b2='0R1CE' where id=6; -update noar tt set v0='004ASRUTRXET8B55A5L2EHS' where id=7; -update noar ti set v0='004ASRUTRXET8B55A5L2EHS' where id=7; -update noar tt set b0='KMCPFG23ITA' where id=7; -update noar ti set b0='KMCPFG23ITA' where id=7; -update noar tt set v0='02Q6RRXZ402OX2D6D9I2KRVDXA4C' where id=7; -update noar ti set v0='02Q6RRXZ402OX2D6D9I2KRVDXA4C' where id=7; -update noar tt set b1='PHMMX' where id=7; -update noar ti set b1='PHMMX' where id=7; -update noar tt set v0='I699IXJ56C1EWL3IR8EASD5' where id=7; -update noar ti set v0='I699IXJ56C1EWL3IR8EASD5' where id=7; -update noar tt set b2='G4ZDG2KLOJLWCTR' where id=7; -update noar ti set b2='G4ZDG2KLOJLWCTR' where id=7; -update noar tt set v0='U48AZW3XYEDI' where id=8; -update noar ti set v0='U48AZW3XYEDI' where id=8; -update noar tt set b0='ZAQBZNMNUVV3WFJML' where id=8; -update noar ti set b0='ZAQBZNMNUVV3WFJML' where id=8; -update noar tt set v0='8B' where id=8; -update noar ti set v0='8B' where id=8; -update noar tt set b1='SH9LRS6WMZWBYYOP' where id=8; -update noar ti set b1='SH9LRS6WMZWBYYOP' where id=8; -update noar tt set v0='RCSLSOK7UM7EV5YC' where id=8; -update noar ti set v0='RCSLSOK7UM7EV5YC' where id=8; -update noar tt set b2='9RFV4DRC2QWZ78ULQFPWX' where id=8; -update noar ti set b2='9RFV4DRC2QWZ78ULQFPWX' where id=8; -update noar tt set v0='3JP8TX9UYXC01HRKUJS4FWWFLP0' where id=9; -update noar ti set v0='3JP8TX9UYXC01HRKUJS4FWWFLP0' where id=9; -update noar tt set b0='2VVWHN4JC486SPQRGB7USS42W6XYC' where id=9; -update noar ti set b0='2VVWHN4JC486SPQRGB7USS42W6XYC' where id=9; -update noar tt set v0='3' where id=9; -update noar ti set v0='3' where id=9; -update noar tt set b1='44IXRD64PHO1BZ6MQJXIR9NNT6X9' where id=9; -update noar ti set b1='44IXRD64PHO1BZ6MQJXIR9NNT6X9' where id=9; -update noar tt set v0='7SQLH7E3EL1MAMTKS9RHQ' where id=9; -update noar ti set v0='7SQLH7E3EL1MAMTKS9RHQ' where id=9; -update noar tt set b2='6F5K8QQMN5ROZ8YJUB8M3UG' where id=9; -update noar ti set b2='6F5K8QQMN5ROZ8YJUB8M3UG' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 mediumblob null, - b1 blob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='R8QC2LK3FJ9TUON4F' where id=1; -update noar ti set v0='R8QC2LK3FJ9TUON4F' where id=1; -update noar tt set b0='XW095Q43CN08D6SWVNGMYTFWFZUY' where id=1; -update noar ti set b0='XW095Q43CN08D6SWVNGMYTFWFZUY' where id=1; -update noar tt set v0='P6IOMB9' where id=1; -update noar ti set v0='P6IOMB9' where id=1; -update noar tt set b1='ZRSNSV45CAK063WFF1EBPIVO2X' where id=1; -update noar ti set b1='ZRSNSV45CAK063WFF1EBPIVO2X' where id=1; -update noar tt set v0='X781BE65UV0H8ODU2890' where id=1; -update noar ti set v0='X781BE65UV0H8ODU2890' where id=1; -update noar tt set b2='9JA9HXZOF4VLLMIC2DMDBMYARQ6ZC45' where id=1; -update noar ti set b2='9JA9HXZOF4VLLMIC2DMDBMYARQ6ZC45' where id=1; -update noar tt set v0='8W0K6RVWR1' where id=2; -update noar ti set v0='8W0K6RVWR1' where id=2; -update noar tt set b0='Z5Q7SQY8TQ052H2ELWVQ' where id=2; -update noar ti set b0='Z5Q7SQY8TQ052H2ELWVQ' where id=2; -update noar tt set v0='CEHVCWEL0B' where id=2; -update noar ti set v0='CEHVCWEL0B' where id=2; -update noar tt set b1='VM6T54E7KMJ' where id=2; -update noar ti set b1='VM6T54E7KMJ' where id=2; -update noar tt set v0='VE22WDZ' where id=2; -update noar ti set v0='VE22WDZ' where id=2; -update noar tt set b2='A9RZQCNNJBKDMB995J1V' where id=2; -update noar ti set b2='A9RZQCNNJBKDMB995J1V' where id=2; -update noar tt set v0='GOYN6CB99Q2KSG' where id=3; -update noar ti set v0='GOYN6CB99Q2KSG' where id=3; -update noar tt set b0='Z3ZLMFUD3M0' where id=3; -update noar ti set b0='Z3ZLMFUD3M0' where id=3; -update noar tt set v0='2T2TKFUYFZSDXBRGRBX9' where id=3; -update noar ti set v0='2T2TKFUYFZSDXBRGRBX9' where id=3; -update noar tt set b1='8X1UYGUVV61YPTHI' where id=3; -update noar ti set b1='8X1UYGUVV61YPTHI' where id=3; -update noar tt set v0='UK9V1XOPRP' where id=3; -update noar ti set v0='UK9V1XOPRP' where id=3; -update noar tt set b2='IIK3I7K1EHBLJ04LO038GRFILXDWPC2I' where id=3; -update noar ti set b2='IIK3I7K1EHBLJ04LO038GRFILXDWPC2I' where id=3; -update noar tt set v0='V6Z5C0' where id=4; -update noar ti set v0='V6Z5C0' where id=4; -update noar tt set b0='OK' where id=4; -update noar ti set b0='OK' where id=4; -update noar tt set v0='SM4CK413M1DQ3I41Y5AQ8KV' where id=4; -update noar ti set v0='SM4CK413M1DQ3I41Y5AQ8KV' where id=4; -update noar tt set b1='KOCCH34SMIW' where id=4; -update noar ti set b1='KOCCH34SMIW' where id=4; -update noar tt set v0='T77UAO0HF4FG' where id=4; -update noar ti set v0='T77UAO0HF4FG' where id=4; -update noar tt set b2='E8L0JOV5ZRCF7IJ1CMB' where id=4; -update noar ti set b2='E8L0JOV5ZRCF7IJ1CMB' where id=4; -update noar tt set v0='TCDIADG65A2GNZ009XE49D' where id=5; -update noar ti set v0='TCDIADG65A2GNZ009XE49D' where id=5; -update noar tt set b0='8MXEFNSR2ZWXB0A4RUTURVKGT' where id=5; -update noar ti set b0='8MXEFNSR2ZWXB0A4RUTURVKGT' where id=5; -update noar tt set v0='R40STLD0E' where id=5; -update noar ti set v0='R40STLD0E' where id=5; -update noar tt set b1='ENSYOB814N3L5DS55' where id=5; -update noar ti set b1='ENSYOB814N3L5DS55' where id=5; -update noar tt set v0='DWL' where id=5; -update noar ti set v0='DWL' where id=5; -update noar tt set b2='O3IKTL' where id=5; -update noar ti set b2='O3IKTL' where id=5; -update noar tt set v0='I625QTG0ZNOSYY6' where id=6; -update noar ti set v0='I625QTG0ZNOSYY6' where id=6; -update noar tt set b0='KJSS' where id=6; -update noar ti set b0='KJSS' where id=6; -update noar tt set v0='MEG' where id=6; -update noar ti set v0='MEG' where id=6; -update noar tt set b1='YAVEXA' where id=6; -update noar ti set b1='YAVEXA' where id=6; -update noar tt set v0='K2HVIJE7XZ2SEQUK6CHR4WNQ521' where id=6; -update noar ti set v0='K2HVIJE7XZ2SEQUK6CHR4WNQ521' where id=6; -update noar tt set b2='3GY9BAIKRSKX7QIX27GQMZQFZIZIA2CV' where id=6; -update noar ti set b2='3GY9BAIKRSKX7QIX27GQMZQFZIZIA2CV' where id=6; -update noar tt set v0='H5KTNKJIU37H4NMK8MA3SB1ZX' where id=7; -update noar ti set v0='H5KTNKJIU37H4NMK8MA3SB1ZX' where id=7; -update noar tt set b0='4DLSCD5A' where id=7; -update noar ti set b0='4DLSCD5A' where id=7; -update noar tt set v0='027' where id=7; -update noar ti set v0='027' where id=7; -update noar tt set b1='R577GJ8DRRXOUOADUDGO' where id=7; -update noar ti set b1='R577GJ8DRRXOUOADUDGO' where id=7; -update noar tt set v0='VMX38I58JTEQ' where id=7; -update noar ti set v0='VMX38I58JTEQ' where id=7; -update noar tt set b2='D' where id=7; -update noar ti set b2='D' where id=7; -update noar tt set v0='0HUB528TLU' where id=8; -update noar ti set v0='0HUB528TLU' where id=8; -update noar tt set b0='SISMFBBG9IJ' where id=8; -update noar ti set b0='SISMFBBG9IJ' where id=8; -update noar tt set v0='SH' where id=8; -update noar ti set v0='SH' where id=8; -update noar tt set b1='5PKBSY13703MGH1RR21OGJ3PGA' where id=8; -update noar ti set b1='5PKBSY13703MGH1RR21OGJ3PGA' where id=8; -update noar tt set v0='06PXG73FRVAYONSA24X' where id=8; -update noar ti set v0='06PXG73FRVAYONSA24X' where id=8; -update noar tt set b2='7OYLAEPV3PU8FTBORQAL8CUF70MKPPG' where id=8; -update noar ti set b2='7OYLAEPV3PU8FTBORQAL8CUF70MKPPG' where id=8; -update noar tt set v0='1M5OC' where id=9; -update noar ti set v0='1M5OC' where id=9; -update noar tt set b0='P4B2KFW3D11ZUI5S08ER3NK' where id=9; -update noar ti set b0='P4B2KFW3D11ZUI5S08ER3NK' where id=9; -update noar tt set v0='B7GKKTX1EDIUQ7QSZ55GP7DXZ6LM4' where id=9; -update noar ti set v0='B7GKKTX1EDIUQ7QSZ55GP7DXZ6LM4' where id=9; -update noar tt set b1='MGLPJ' where id=9; -update noar ti set b1='MGLPJ' where id=9; -update noar tt set v0='0JEJ1C0S' where id=9; -update noar ti set v0='0JEJ1C0S' where id=9; -update noar tt set b2='P13R2' where id=9; -update noar ti set b2='P13R2' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 mediumblob null, - b1 blob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='67BTHJWFWE0HGKZEYMU' where id=1; -update noar ti set v0='67BTHJWFWE0HGKZEYMU' where id=1; -update noar tt set b0='GAP0E1KP8L90MYLFMC6N01LDEC7KOT1' where id=1; -update noar ti set b0='GAP0E1KP8L90MYLFMC6N01LDEC7KOT1' where id=1; -update noar tt set v0='KQ7JCZ6YGQUK' where id=1; -update noar ti set v0='KQ7JCZ6YGQUK' where id=1; -update noar tt set b1='ZE0OUQIZZXN' where id=1; -update noar ti set b1='ZE0OUQIZZXN' where id=1; -update noar tt set v0='ZQLCYPCRT22QNN5GYUEBZXBLOZK48' where id=1; -update noar ti set v0='ZQLCYPCRT22QNN5GYUEBZXBLOZK48' where id=1; -update noar tt set b2='PXC5H5I9K0HPV243NF20IN6JY8' where id=1; -update noar ti set b2='PXC5H5I9K0HPV243NF20IN6JY8' where id=1; -update noar tt set v0='QPA2ZM9B2' where id=2; -update noar ti set v0='QPA2ZM9B2' where id=2; -update noar tt set b0='VNEXOVNAKX526KFG84' where id=2; -update noar ti set b0='VNEXOVNAKX526KFG84' where id=2; -update noar tt set v0='CJ58BVSXDAX02ZGK645N1JDQ' where id=2; -update noar ti set v0='CJ58BVSXDAX02ZGK645N1JDQ' where id=2; -update noar tt set b1='MDHDCKAS59ABXUXMGWPT' where id=2; -update noar ti set b1='MDHDCKAS59ABXUXMGWPT' where id=2; -update noar tt set v0='ALU' where id=2; -update noar ti set v0='ALU' where id=2; -update noar tt set b2='RNJR9E97ZPOL6L6KMU' where id=2; -update noar ti set b2='RNJR9E97ZPOL6L6KMU' where id=2; -update noar tt set v0='I377CVOQZIN8TRT9B7ZRKW27B' where id=3; -update noar ti set v0='I377CVOQZIN8TRT9B7ZRKW27B' where id=3; -update noar tt set b0='AE0VVV7WZLPFC51675YUZ2' where id=3; -update noar ti set b0='AE0VVV7WZLPFC51675YUZ2' where id=3; -update noar tt set v0='CSDAJS86J1590XZP' where id=3; -update noar ti set v0='CSDAJS86J1590XZP' where id=3; -update noar tt set b1='XI815HQWI9RUXNNPSFT05XVM6GLO' where id=3; -update noar ti set b1='XI815HQWI9RUXNNPSFT05XVM6GLO' where id=3; -update noar tt set v0='DVZAGDMMTQEM8OU916DJJET570YUW0T' where id=3; -update noar ti set v0='DVZAGDMMTQEM8OU916DJJET570YUW0T' where id=3; -update noar tt set b2='HCR5OV3FSQC5FP8155RAP' where id=3; -update noar ti set b2='HCR5OV3FSQC5FP8155RAP' where id=3; -update noar tt set v0='QUHWAN4EYATR' where id=4; -update noar ti set v0='QUHWAN4EYATR' where id=4; -update noar tt set b0='34CM0GT6WJOUHH5F4P6MWY97J' where id=4; -update noar ti set b0='34CM0GT6WJOUHH5F4P6MWY97J' where id=4; -update noar tt set v0='XK4Q00TBJNKJUSGVLH' where id=4; -update noar ti set v0='XK4Q00TBJNKJUSGVLH' where id=4; -update noar tt set b1='3WCXG6AA5X1M6JO9YZ' where id=4; -update noar ti set b1='3WCXG6AA5X1M6JO9YZ' where id=4; -update noar tt set v0='DAZ3DJH0ABMB' where id=4; -update noar ti set v0='DAZ3DJH0ABMB' where id=4; -update noar tt set b2='C5VM9LBTMDJT6OQJ8K6QW3GSO4' where id=4; -update noar ti set b2='C5VM9LBTMDJT6OQJ8K6QW3GSO4' where id=4; -update noar tt set v0='1IL299' where id=5; -update noar ti set v0='1IL299' where id=5; -update noar tt set b0='KZOM0QTTBJ90ZB' where id=5; -update noar ti set b0='KZOM0QTTBJ90ZB' where id=5; -update noar tt set v0='EUNJNXOBVA31QN3408LUHOW8B2S6' where id=5; -update noar ti set v0='EUNJNXOBVA31QN3408LUHOW8B2S6' where id=5; -update noar tt set b1='8SXR8JKCFA39FFEO3L1OID8W4DVQP8BP' where id=5; -update noar ti set b1='8SXR8JKCFA39FFEO3L1OID8W4DVQP8BP' where id=5; -update noar tt set v0='IJ6GYZP35IIFATQWH' where id=5; -update noar ti set v0='IJ6GYZP35IIFATQWH' where id=5; -update noar tt set b2='S08HKTK84JDUNPEYBP926B6FL4LDXBED' where id=5; -update noar ti set b2='S08HKTK84JDUNPEYBP926B6FL4LDXBED' where id=5; -update noar tt set v0='NNV29Q20BZ' where id=6; -update noar ti set v0='NNV29Q20BZ' where id=6; -update noar tt set b0='DI79XD7HSQTEXTDWO3A4AKBL' where id=6; -update noar ti set b0='DI79XD7HSQTEXTDWO3A4AKBL' where id=6; -update noar tt set v0='Q' where id=6; -update noar ti set v0='Q' where id=6; -update noar tt set b1='L6YXGO74SG4D6C8N5VN9FP7' where id=6; -update noar ti set b1='L6YXGO74SG4D6C8N5VN9FP7' where id=6; -update noar tt set v0='75UJEYIXOVO1QW6R6FAJ1' where id=6; -update noar ti set v0='75UJEYIXOVO1QW6R6FAJ1' where id=6; -update noar tt set b2='0M' where id=6; -update noar ti set b2='0M' where id=6; -update noar tt set v0='T00L1NMMO3GHS2QP' where id=7; -update noar ti set v0='T00L1NMMO3GHS2QP' where id=7; -update noar tt set b0='MRG1SJXK14E6VXIQ0S' where id=7; -update noar ti set b0='MRG1SJXK14E6VXIQ0S' where id=7; -update noar tt set v0='G5JNUYA44UH' where id=7; -update noar ti set v0='G5JNUYA44UH' where id=7; -update noar tt set b1='JYZ' where id=7; -update noar ti set b1='JYZ' where id=7; -update noar tt set v0='AF4KTNJDOVNZMSB' where id=7; -update noar ti set v0='AF4KTNJDOVNZMSB' where id=7; -update noar tt set b2='AJXGITWFG4JWQIZBR5H' where id=7; -update noar ti set b2='AJXGITWFG4JWQIZBR5H' where id=7; -update noar tt set v0='O50HPL6' where id=8; -update noar ti set v0='O50HPL6' where id=8; -update noar tt set b0='GR8YO1YKJWEELAFIO48G' where id=8; -update noar ti set b0='GR8YO1YKJWEELAFIO48G' where id=8; -update noar tt set v0='3R1X2BQFZKA6P0LNM' where id=8; -update noar ti set v0='3R1X2BQFZKA6P0LNM' where id=8; -update noar tt set b1='KUOVK84V5W75M' where id=8; -update noar ti set b1='KUOVK84V5W75M' where id=8; -update noar tt set v0='HUSA2VJFUP32S5AM1GROM3UR' where id=8; -update noar ti set v0='HUSA2VJFUP32S5AM1GROM3UR' where id=8; -update noar tt set b2='NLMGMJGPGPPFLIG806PCCRG5W' where id=8; -update noar ti set b2='NLMGMJGPGPPFLIG806PCCRG5W' where id=8; -update noar tt set v0='991152K' where id=9; -update noar ti set v0='991152K' where id=9; -update noar tt set b0='3F1258VOJH4DXW' where id=9; -update noar ti set b0='3F1258VOJH4DXW' where id=9; -update noar tt set v0='0VXXFX3UF4H' where id=9; -update noar ti set v0='0VXXFX3UF4H' where id=9; -update noar tt set b1='EYV771VH5QVAO8J6Q' where id=9; -update noar ti set b1='EYV771VH5QVAO8J6Q' where id=9; -update noar tt set v0='6JL311MCJIW' where id=9; -update noar ti set v0='6JL311MCJIW' where id=9; -update noar tt set b2='NOBKY' where id=9; -update noar ti set b2='NOBKY' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 mediumblob not null, - b1 blob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='FQN6G7XJ37Y3YMRZO5A6CNLW60VDB5U' where id=1; -update noar ti set v0='FQN6G7XJ37Y3YMRZO5A6CNLW60VDB5U' where id=1; -update noar tt set b0='M52KWNIGXZ3MQDL6WLRXGUZ9XN9W5URQ' where id=1; -update noar ti set b0='M52KWNIGXZ3MQDL6WLRXGUZ9XN9W5URQ' where id=1; -update noar tt set v0='PR4AUXMX58G2IRMCCGGGA4OY2G' where id=1; -update noar ti set v0='PR4AUXMX58G2IRMCCGGGA4OY2G' where id=1; -update noar tt set b1='YLOEKANQP40LMJZK6HKC' where id=1; -update noar ti set b1='YLOEKANQP40LMJZK6HKC' where id=1; -update noar tt set v0='Y96RZF9X5F7GOH' where id=1; -update noar ti set v0='Y96RZF9X5F7GOH' where id=1; -update noar tt set b2='QMJLIHBXNF5T3FF5O5DS9ZY5A740C' where id=1; -update noar ti set b2='QMJLIHBXNF5T3FF5O5DS9ZY5A740C' where id=1; -update noar tt set v0='IRBK3A6SSL19AVVZK7882CN4GLHTUI' where id=2; -update noar ti set v0='IRBK3A6SSL19AVVZK7882CN4GLHTUI' where id=2; -update noar tt set b0='2650IYQGBQF3EB4407E50SP4DVD' where id=2; -update noar ti set b0='2650IYQGBQF3EB4407E50SP4DVD' where id=2; -update noar tt set v0='H2' where id=2; -update noar ti set v0='H2' where id=2; -update noar tt set b1='MLJC4538GVQOJC1QIZCFA6AD372A7L' where id=2; -update noar ti set b1='MLJC4538GVQOJC1QIZCFA6AD372A7L' where id=2; -update noar tt set v0='RTE19UD32WW93E3T2ZZ' where id=2; -update noar ti set v0='RTE19UD32WW93E3T2ZZ' where id=2; -update noar tt set b2='F' where id=2; -update noar ti set b2='F' where id=2; -update noar tt set v0='0BJYLKRJNX2TB2O47MJJ' where id=3; -update noar ti set v0='0BJYLKRJNX2TB2O47MJJ' where id=3; -update noar tt set b0='WTV1' where id=3; -update noar ti set b0='WTV1' where id=3; -update noar tt set v0='ZWUXOL6' where id=3; -update noar ti set v0='ZWUXOL6' where id=3; -update noar tt set b1='11SUJQO4YFTLMOOVF3LNULU86TT8' where id=3; -update noar ti set b1='11SUJQO4YFTLMOOVF3LNULU86TT8' where id=3; -update noar tt set v0='KXDQWZ16V42ZW32Q5QILJEYJ1SKBLND' where id=3; -update noar ti set v0='KXDQWZ16V42ZW32Q5QILJEYJ1SKBLND' where id=3; -update noar tt set b2='RD35802WDOU28WJ9JHNEAJOP9NS' where id=3; -update noar ti set b2='RD35802WDOU28WJ9JHNEAJOP9NS' where id=3; -update noar tt set v0='Y26QIP7X25UGQPBGVKCSRAM0QLE' where id=4; -update noar ti set v0='Y26QIP7X25UGQPBGVKCSRAM0QLE' where id=4; -update noar tt set b0='22QEXO3717O24F1VCJ889W83405' where id=4; -update noar ti set b0='22QEXO3717O24F1VCJ889W83405' where id=4; -update noar tt set v0='YT1' where id=4; -update noar ti set v0='YT1' where id=4; -update noar tt set b1='NLKP' where id=4; -update noar ti set b1='NLKP' where id=4; -update noar tt set v0='QJGMUBBM1L755499R' where id=4; -update noar ti set v0='QJGMUBBM1L755499R' where id=4; -update noar tt set b2='9LI09Y1GQWU0LZ6OSYU6Z31' where id=4; -update noar ti set b2='9LI09Y1GQWU0LZ6OSYU6Z31' where id=4; -update noar tt set v0='28NT8TAU8' where id=5; -update noar ti set v0='28NT8TAU8' where id=5; -update noar tt set b0='MHKU5RZP0EOMFXZR' where id=5; -update noar ti set b0='MHKU5RZP0EOMFXZR' where id=5; -update noar tt set v0='LBFX92TK76BVIN11V3SZ' where id=5; -update noar ti set v0='LBFX92TK76BVIN11V3SZ' where id=5; -update noar tt set b1='UJK' where id=5; -update noar ti set b1='UJK' where id=5; -update noar tt set v0='ASX6X96L6L5FQF0N1' where id=5; -update noar ti set v0='ASX6X96L6L5FQF0N1' where id=5; -update noar tt set b2='FXDF1YA' where id=5; -update noar ti set b2='FXDF1YA' where id=5; -update noar tt set v0='CSRDWM89AT5WXH9HI5XPTZ66DT8' where id=6; -update noar ti set v0='CSRDWM89AT5WXH9HI5XPTZ66DT8' where id=6; -update noar tt set b0='PKKO6' where id=6; -update noar ti set b0='PKKO6' where id=6; -update noar tt set v0='OXR74IFCKYZ' where id=6; -update noar ti set v0='OXR74IFCKYZ' where id=6; -update noar tt set b1='H4IS5L9ZQJIPMRGUP' where id=6; -update noar ti set b1='H4IS5L9ZQJIPMRGUP' where id=6; -update noar tt set v0='67RFAEBELGL1WQ7FVFO63A16384H9I' where id=6; -update noar ti set v0='67RFAEBELGL1WQ7FVFO63A16384H9I' where id=6; -update noar tt set b2='A4B6XL43IRA1751' where id=6; -update noar ti set b2='A4B6XL43IRA1751' where id=6; -update noar tt set v0='RIZP7PPK6OUP66EIUZS' where id=7; -update noar ti set v0='RIZP7PPK6OUP66EIUZS' where id=7; -update noar tt set b0='KP8M' where id=7; -update noar ti set b0='KP8M' where id=7; -update noar tt set v0='PH50J3BKXTSQ0W8USNS0IQW6' where id=7; -update noar ti set v0='PH50J3BKXTSQ0W8USNS0IQW6' where id=7; -update noar tt set b1='LS44E8TM6H94XBZP1MNHPDBTLJM' where id=7; -update noar ti set b1='LS44E8TM6H94XBZP1MNHPDBTLJM' where id=7; -update noar tt set v0='LJWN3SR3OC8' where id=7; -update noar ti set v0='LJWN3SR3OC8' where id=7; -update noar tt set b2='EQ4IMRHUQ1ANBUAI33JNIYM2J8P8R1' where id=7; -update noar ti set b2='EQ4IMRHUQ1ANBUAI33JNIYM2J8P8R1' where id=7; -update noar tt set v0='1D1IPKY643I7J050MOSRUC5M' where id=8; -update noar ti set v0='1D1IPKY643I7J050MOSRUC5M' where id=8; -update noar tt set b0='HX5G00MH71VBWAHGH4DK0SM' where id=8; -update noar ti set b0='HX5G00MH71VBWAHGH4DK0SM' where id=8; -update noar tt set v0='YHWLKLPWT1YMOS88A64' where id=8; -update noar ti set v0='YHWLKLPWT1YMOS88A64' where id=8; -update noar tt set b1='3P7ZN47QWV' where id=8; -update noar ti set b1='3P7ZN47QWV' where id=8; -update noar tt set v0='HET5NB5YKRUWLYPA4SBULLXE' where id=8; -update noar ti set v0='HET5NB5YKRUWLYPA4SBULLXE' where id=8; -update noar tt set b2='B2YRQAAOSYKOVPN906' where id=8; -update noar ti set b2='B2YRQAAOSYKOVPN906' where id=8; -update noar tt set v0='D7S7ER7RAEI4FCE9' where id=9; -update noar ti set v0='D7S7ER7RAEI4FCE9' where id=9; -update noar tt set b0='3A8CWYTL4PSVB' where id=9; -update noar ti set b0='3A8CWYTL4PSVB' where id=9; -update noar tt set v0='EAUGZ4AJUJG4P8E9X58EI96QZ0L5' where id=9; -update noar ti set v0='EAUGZ4AJUJG4P8E9X58EI96QZ0L5' where id=9; -update noar tt set b1='D8NRDPO7FAPIAFJJB6MIGS' where id=9; -update noar ti set b1='D8NRDPO7FAPIAFJJB6MIGS' where id=9; -update noar tt set v0='OINIE' where id=9; -update noar ti set v0='OINIE' where id=9; -update noar tt set b2='5NVE03D0PPWS0O' where id=9; -update noar ti set b2='5NVE03D0PPWS0O' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 mediumblob not null, - b1 blob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='BZV2Q' where id=1; -update noar ti set v0='BZV2Q' where id=1; -update noar tt set b0='70HPAHMYEBGQ7DAZWPDUIKX4D4DAQU0' where id=1; -update noar ti set b0='70HPAHMYEBGQ7DAZWPDUIKX4D4DAQU0' where id=1; -update noar tt set v0='NPJTHWRK3A5Q7YVYAR4V2RJBKCXSLPR' where id=1; -update noar ti set v0='NPJTHWRK3A5Q7YVYAR4V2RJBKCXSLPR' where id=1; -update noar tt set b1='OLCCW9884V' where id=1; -update noar ti set b1='OLCCW9884V' where id=1; -update noar tt set v0='Y4QFAS4R3Q0UA2QIS1' where id=1; -update noar ti set v0='Y4QFAS4R3Q0UA2QIS1' where id=1; -update noar tt set b2='39PWV6V9' where id=1; -update noar ti set b2='39PWV6V9' where id=1; -update noar tt set v0='XS8N49YFK56H2CPKC' where id=2; -update noar ti set v0='XS8N49YFK56H2CPKC' where id=2; -update noar tt set b0='8F26IUJ3304SI1MJHC9VZN5TI06KW' where id=2; -update noar ti set b0='8F26IUJ3304SI1MJHC9VZN5TI06KW' where id=2; -update noar tt set v0='L1YZIY1AZ8IV' where id=2; -update noar ti set v0='L1YZIY1AZ8IV' where id=2; -update noar tt set b1='9E25QUAW7ZKWVV' where id=2; -update noar ti set b1='9E25QUAW7ZKWVV' where id=2; -update noar tt set v0='XYDESP2FWID57U2KJ0F4E7B' where id=2; -update noar ti set v0='XYDESP2FWID57U2KJ0F4E7B' where id=2; -update noar tt set b2='MZOD78TXP5X9UAL8QGUPEARGVG' where id=2; -update noar ti set b2='MZOD78TXP5X9UAL8QGUPEARGVG' where id=2; -update noar tt set v0='RDO0O4NIIXFLZTF4H4J7PF' where id=3; -update noar ti set v0='RDO0O4NIIXFLZTF4H4J7PF' where id=3; -update noar tt set b0='XRAJSP2D27E59PQ69P' where id=3; -update noar ti set b0='XRAJSP2D27E59PQ69P' where id=3; -update noar tt set v0='RSLUEJ2HYFSXHV2LZDXR5A6' where id=3; -update noar ti set v0='RSLUEJ2HYFSXHV2LZDXR5A6' where id=3; -update noar tt set b1='UCWRU80ERD5VP9I59A5XWA7VF2PQR1DD' where id=3; -update noar ti set b1='UCWRU80ERD5VP9I59A5XWA7VF2PQR1DD' where id=3; -update noar tt set v0='6Q0EVNDWO7SRQ5MHKRZ97N5M55' where id=3; -update noar ti set v0='6Q0EVNDWO7SRQ5MHKRZ97N5M55' where id=3; -update noar tt set b2='UIDKH' where id=3; -update noar ti set b2='UIDKH' where id=3; -update noar tt set v0='771WVJSIQ7LV6070SQ3A0E2WUBOF' where id=4; -update noar ti set v0='771WVJSIQ7LV6070SQ3A0E2WUBOF' where id=4; -update noar tt set b0='QZBPQNJTWVFUW415A9D' where id=4; -update noar ti set b0='QZBPQNJTWVFUW415A9D' where id=4; -update noar tt set v0='XCPT4BZLB64K' where id=4; -update noar ti set v0='XCPT4BZLB64K' where id=4; -update noar tt set b1='19UR7J9MT' where id=4; -update noar ti set b1='19UR7J9MT' where id=4; -update noar tt set v0='VOIN4KBV4X5ELC' where id=4; -update noar ti set v0='VOIN4KBV4X5ELC' where id=4; -update noar tt set b2='B0E9BCE6CX24HQ8JI' where id=4; -update noar ti set b2='B0E9BCE6CX24HQ8JI' where id=4; -update noar tt set v0='CEBPVBLWAKS42NQE6FBIIIYH814' where id=5; -update noar ti set v0='CEBPVBLWAKS42NQE6FBIIIYH814' where id=5; -update noar tt set b0='VZKRPII9Q3EC7S82BU1W2LR' where id=5; -update noar ti set b0='VZKRPII9Q3EC7S82BU1W2LR' where id=5; -update noar tt set v0='YJU85T81LMUJMPVSX4A' where id=5; -update noar ti set v0='YJU85T81LMUJMPVSX4A' where id=5; -update noar tt set b1='OCYV' where id=5; -update noar ti set b1='OCYV' where id=5; -update noar tt set v0='QNTBSI5K9YLYH5845VEV2N7LECABL9Y' where id=5; -update noar ti set v0='QNTBSI5K9YLYH5845VEV2N7LECABL9Y' where id=5; -update noar tt set b2='P65VWA3W7INEXCCFCNKTO9' where id=5; -update noar ti set b2='P65VWA3W7INEXCCFCNKTO9' where id=5; -update noar tt set v0='SU1FIL' where id=6; -update noar ti set v0='SU1FIL' where id=6; -update noar tt set b0='YZHYRTNBVSX1YA85U665VZ6' where id=6; -update noar ti set b0='YZHYRTNBVSX1YA85U665VZ6' where id=6; -update noar tt set v0='YM3VQ6KPLKNUFLHI6324' where id=6; -update noar ti set v0='YM3VQ6KPLKNUFLHI6324' where id=6; -update noar tt set b1='NEOWM' where id=6; -update noar ti set b1='NEOWM' where id=6; -update noar tt set v0='QV8W07IHSM40YC05O8R78C' where id=6; -update noar ti set v0='QV8W07IHSM40YC05O8R78C' where id=6; -update noar tt set b2='X99HHGF84VDAH91LD2M71IU107ERG8L' where id=6; -update noar ti set b2='X99HHGF84VDAH91LD2M71IU107ERG8L' where id=6; -update noar tt set v0='FU30S66VQYDKNJREU6LSPIUKBENQ' where id=7; -update noar ti set v0='FU30S66VQYDKNJREU6LSPIUKBENQ' where id=7; -update noar tt set b0='O31TH' where id=7; -update noar ti set b0='O31TH' where id=7; -update noar tt set v0='A797AJILPK6XYSNDTWZ2YII4456SY' where id=7; -update noar ti set v0='A797AJILPK6XYSNDTWZ2YII4456SY' where id=7; -update noar tt set b1='YXOHM6ECVM' where id=7; -update noar ti set b1='YXOHM6ECVM' where id=7; -update noar tt set v0='7C95XJ2LRIV6' where id=7; -update noar ti set v0='7C95XJ2LRIV6' where id=7; -update noar tt set b2='PQ435VKTYGV7YPPGIXX2SK14X' where id=7; -update noar ti set b2='PQ435VKTYGV7YPPGIXX2SK14X' where id=7; -update noar tt set v0='XGB0Y5T01LJJWBH' where id=8; -update noar ti set v0='XGB0Y5T01LJJWBH' where id=8; -update noar tt set b0='XQT4OVI4' where id=8; -update noar ti set b0='XQT4OVI4' where id=8; -update noar tt set v0='RP0YWBXHY92QPDBD04VADJQPA' where id=8; -update noar ti set v0='RP0YWBXHY92QPDBD04VADJQPA' where id=8; -update noar tt set b1='A5O9RGDGZH2F6AHI7LLW' where id=8; -update noar ti set b1='A5O9RGDGZH2F6AHI7LLW' where id=8; -update noar tt set v0='R4ZG1' where id=8; -update noar ti set v0='R4ZG1' where id=8; -update noar tt set b2='OSA7VEHFHG5U' where id=8; -update noar ti set b2='OSA7VEHFHG5U' where id=8; -update noar tt set v0='N1QKLVG' where id=9; -update noar ti set v0='N1QKLVG' where id=9; -update noar tt set b0='7YPU4WI' where id=9; -update noar ti set b0='7YPU4WI' where id=9; -update noar tt set v0='L1PPQ' where id=9; -update noar ti set v0='L1PPQ' where id=9; -update noar tt set b1='RF7W812XL67EC1CNJ3X98DR5Q' where id=9; -update noar ti set b1='RF7W812XL67EC1CNJ3X98DR5Q' where id=9; -update noar tt set v0='PAZIHGWAOVO96' where id=9; -update noar ti set v0='PAZIHGWAOVO96' where id=9; -update noar tt set b2='RPAFE' where id=9; -update noar ti set b2='RPAFE' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 mediumblob null, - b1 blob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='6PHBSQ7Y4VCUYALN6KYBOV521QF' where id=1; -update noar ti set v0='6PHBSQ7Y4VCUYALN6KYBOV521QF' where id=1; -update noar tt set b0='U7NO' where id=1; -update noar ti set b0='U7NO' where id=1; -update noar tt set v0='ZRC49GNPMY0FUQLO120EHOZSDM5127IR' where id=1; -update noar ti set v0='ZRC49GNPMY0FUQLO120EHOZSDM5127IR' where id=1; -update noar tt set b1='2N86J09RSRSZGE2DI6QBMRM8SVBTHN' where id=1; -update noar ti set b1='2N86J09RSRSZGE2DI6QBMRM8SVBTHN' where id=1; -update noar tt set v0='56CU7CK8YRW6XAS' where id=1; -update noar ti set v0='56CU7CK8YRW6XAS' where id=1; -update noar tt set b2='140HE0B0CTFZODPX' where id=1; -update noar ti set b2='140HE0B0CTFZODPX' where id=1; -update noar tt set v0='XSIBHV2I4BEQWHFBV057H1PMYKJV' where id=2; -update noar ti set v0='XSIBHV2I4BEQWHFBV057H1PMYKJV' where id=2; -update noar tt set b0='EDP8OE6' where id=2; -update noar ti set b0='EDP8OE6' where id=2; -update noar tt set v0='UNW7SHM336OW4M03V1KM' where id=2; -update noar ti set v0='UNW7SHM336OW4M03V1KM' where id=2; -update noar tt set b1='PKZZCG1GVZZCXLDT5' where id=2; -update noar ti set b1='PKZZCG1GVZZCXLDT5' where id=2; -update noar tt set v0='6R21CV7VK0BZ8PATQ' where id=2; -update noar ti set v0='6R21CV7VK0BZ8PATQ' where id=2; -update noar tt set b2='WVRZ37OICTKFJ5PUPSU3' where id=2; -update noar ti set b2='WVRZ37OICTKFJ5PUPSU3' where id=2; -update noar tt set v0='Y2UWX6N8RN9KHGUYIYT' where id=3; -update noar ti set v0='Y2UWX6N8RN9KHGUYIYT' where id=3; -update noar tt set b0='CY7IEJAYPZWD908MQO' where id=3; -update noar ti set b0='CY7IEJAYPZWD908MQO' where id=3; -update noar tt set v0='SC04XJTKFABZB5CFL0LHXVV1N2I5U' where id=3; -update noar ti set v0='SC04XJTKFABZB5CFL0LHXVV1N2I5U' where id=3; -update noar tt set b1='I2ANSGNBNY4TCLOB3' where id=3; -update noar ti set b1='I2ANSGNBNY4TCLOB3' where id=3; -update noar tt set v0='TEFS2EAPKQKA2UTQPEC31' where id=3; -update noar ti set v0='TEFS2EAPKQKA2UTQPEC31' where id=3; -update noar tt set b2='0BTYJPL0EU0YM1DNCD' where id=3; -update noar ti set b2='0BTYJPL0EU0YM1DNCD' where id=3; -update noar tt set v0='AEHJEOJ9J06' where id=4; -update noar ti set v0='AEHJEOJ9J06' where id=4; -update noar tt set b0='UF0468UDNV6' where id=4; -update noar ti set b0='UF0468UDNV6' where id=4; -update noar tt set v0='1ZJ0F8NQ0QQL72VM5ML' where id=4; -update noar ti set v0='1ZJ0F8NQ0QQL72VM5ML' where id=4; -update noar tt set b1='539S5OWUAOJQKJL8ZV7H8E0KJ357' where id=4; -update noar ti set b1='539S5OWUAOJQKJL8ZV7H8E0KJ357' where id=4; -update noar tt set v0='HX86B' where id=4; -update noar ti set v0='HX86B' where id=4; -update noar tt set b2='6KLR0SSIW79DQQUD75WGHG10H5X' where id=4; -update noar ti set b2='6KLR0SSIW79DQQUD75WGHG10H5X' where id=4; -update noar tt set v0='JTMC9WMMI5TAZWD0KXQY' where id=5; -update noar ti set v0='JTMC9WMMI5TAZWD0KXQY' where id=5; -update noar tt set b0='UOXYRCHEQMAPMK' where id=5; -update noar ti set b0='UOXYRCHEQMAPMK' where id=5; -update noar tt set v0='QHQ1B524526G2PIJC0GFWIY' where id=5; -update noar ti set v0='QHQ1B524526G2PIJC0GFWIY' where id=5; -update noar tt set b1='3USO7LM7XHRMYG1B7J0' where id=5; -update noar ti set b1='3USO7LM7XHRMYG1B7J0' where id=5; -update noar tt set v0='OL3GGMER2A3GJVAXK' where id=5; -update noar ti set v0='OL3GGMER2A3GJVAXK' where id=5; -update noar tt set b2='DMSE7U0ACHESDK' where id=5; -update noar ti set b2='DMSE7U0ACHESDK' where id=5; -update noar tt set v0='SR0SQ523IBKW2JE' where id=6; -update noar ti set v0='SR0SQ523IBKW2JE' where id=6; -update noar tt set b0='4359SBJQOHRT9ZFWTG' where id=6; -update noar ti set b0='4359SBJQOHRT9ZFWTG' where id=6; -update noar tt set v0='B0KW0SJ08MW340IP9GHO7IDZDRLUW3G' where id=6; -update noar ti set v0='B0KW0SJ08MW340IP9GHO7IDZDRLUW3G' where id=6; -update noar tt set b1='R7A2OW21XWPAN' where id=6; -update noar ti set b1='R7A2OW21XWPAN' where id=6; -update noar tt set v0='9OSQPO81YR11PLLYE2FD82CIU' where id=6; -update noar ti set v0='9OSQPO81YR11PLLYE2FD82CIU' where id=6; -update noar tt set b2='AKH4F4D58KIFJSBLMHPATP94S62CX' where id=6; -update noar ti set b2='AKH4F4D58KIFJSBLMHPATP94S62CX' where id=6; -update noar tt set v0='R9KO2K6MHY8ZKTTJHO2VD' where id=7; -update noar ti set v0='R9KO2K6MHY8ZKTTJHO2VD' where id=7; -update noar tt set b0='RFMU4U7385YOGELC9YZ40HW55Z81' where id=7; -update noar ti set b0='RFMU4U7385YOGELC9YZ40HW55Z81' where id=7; -update noar tt set v0='X' where id=7; -update noar ti set v0='X' where id=7; -update noar tt set b1='ZVCZVCMTN18OAD' where id=7; -update noar ti set b1='ZVCZVCMTN18OAD' where id=7; -update noar tt set v0='AG6Z6N621BYD' where id=7; -update noar ti set v0='AG6Z6N621BYD' where id=7; -update noar tt set b2='S1R2JVZBXB4SDY2QN8XZ2PQ97EOHR' where id=7; -update noar ti set b2='S1R2JVZBXB4SDY2QN8XZ2PQ97EOHR' where id=7; -update noar tt set v0='HIK5Q3LVC640VF5YFMHYDT7B0' where id=8; -update noar ti set v0='HIK5Q3LVC640VF5YFMHYDT7B0' where id=8; -update noar tt set b0='BZR3VGEQ28WWRL8YQL4QEW9Y' where id=8; -update noar ti set b0='BZR3VGEQ28WWRL8YQL4QEW9Y' where id=8; -update noar tt set v0='Z' where id=8; -update noar ti set v0='Z' where id=8; -update noar tt set b1='RITL86P5LOCCTJRS97PX857VCERWJ1M' where id=8; -update noar ti set b1='RITL86P5LOCCTJRS97PX857VCERWJ1M' where id=8; -update noar tt set v0='CB353NB8P28' where id=8; -update noar ti set v0='CB353NB8P28' where id=8; -update noar tt set b2='KAWXRL0GFD6HO1' where id=8; -update noar ti set b2='KAWXRL0GFD6HO1' where id=8; -update noar tt set v0='W5S7LRXW8U7R88985CVOFWH0' where id=9; -update noar ti set v0='W5S7LRXW8U7R88985CVOFWH0' where id=9; -update noar tt set b0='7XC' where id=9; -update noar ti set b0='7XC' where id=9; -update noar tt set v0='IT' where id=9; -update noar ti set v0='IT' where id=9; -update noar tt set b1='MI6U3DTH' where id=9; -update noar ti set b1='MI6U3DTH' where id=9; -update noar tt set v0='KZH' where id=9; -update noar ti set v0='KZH' where id=9; -update noar tt set b2='R8B05M265W2UKRNGMGPAAZLMROPNPL6' where id=9; -update noar ti set b2='R8B05M265W2UKRNGMGPAAZLMROPNPL6' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 mediumblob null, - b1 blob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='Y4TZBZMBF9G455X' where id=1; -update noar ti set v0='Y4TZBZMBF9G455X' where id=1; -update noar tt set b0='ES984128VENB0O3QE46YSJKTFVPVSDK' where id=1; -update noar ti set b0='ES984128VENB0O3QE46YSJKTFVPVSDK' where id=1; -update noar tt set v0='1XX2SL5AA92HNCL369LI3UFJQZM1ZAU' where id=1; -update noar ti set v0='1XX2SL5AA92HNCL369LI3UFJQZM1ZAU' where id=1; -update noar tt set b1='YR8HB73TGRC' where id=1; -update noar ti set b1='YR8HB73TGRC' where id=1; -update noar tt set v0='HGN' where id=1; -update noar ti set v0='HGN' where id=1; -update noar tt set b2='B0QL4TDP2' where id=1; -update noar ti set b2='B0QL4TDP2' where id=1; -update noar tt set v0='RR2GA9SPHKWJOX9LQK6FW1T4GOAS3CA' where id=2; -update noar ti set v0='RR2GA9SPHKWJOX9LQK6FW1T4GOAS3CA' where id=2; -update noar tt set b0='NQSEROAA6FSF' where id=2; -update noar ti set b0='NQSEROAA6FSF' where id=2; -update noar tt set v0='B35I4BRVSG0KKND7JINAP3DPGG5BAM3' where id=2; -update noar ti set v0='B35I4BRVSG0KKND7JINAP3DPGG5BAM3' where id=2; -update noar tt set b1='6QSJEX0HFNW7FH104T4INL8C' where id=2; -update noar ti set b1='6QSJEX0HFNW7FH104T4INL8C' where id=2; -update noar tt set v0='8PCOHQINEVNHHH64ZJN6QUCM' where id=2; -update noar ti set v0='8PCOHQINEVNHHH64ZJN6QUCM' where id=2; -update noar tt set b2='GL' where id=2; -update noar ti set b2='GL' where id=2; -update noar tt set v0='8Y5A8V98BP7EW2TCPN5R0MXX5CEOM' where id=3; -update noar ti set v0='8Y5A8V98BP7EW2TCPN5R0MXX5CEOM' where id=3; -update noar tt set b0='T2F0EYNFVUJLJ6NQEIAIEJNOFA6' where id=3; -update noar ti set b0='T2F0EYNFVUJLJ6NQEIAIEJNOFA6' where id=3; -update noar tt set v0='IPFSEQAHHX4SDFLSWDAL' where id=3; -update noar ti set v0='IPFSEQAHHX4SDFLSWDAL' where id=3; -update noar tt set b1='V0EFFTRX5VOWYDB2067' where id=3; -update noar ti set b1='V0EFFTRX5VOWYDB2067' where id=3; -update noar tt set v0='PV41I8M1W' where id=3; -update noar ti set v0='PV41I8M1W' where id=3; -update noar tt set b2='JUA25967FMTBO7NJAOZL' where id=3; -update noar ti set b2='JUA25967FMTBO7NJAOZL' where id=3; -update noar tt set v0='CSU9SD2PYH363GU0DJDLFIZ5CFRVBG5E' where id=4; -update noar ti set v0='CSU9SD2PYH363GU0DJDLFIZ5CFRVBG5E' where id=4; -update noar tt set b0='EDK7W3NPMYPBZYMFF8LB9J3YEVNR' where id=4; -update noar ti set b0='EDK7W3NPMYPBZYMFF8LB9J3YEVNR' where id=4; -update noar tt set v0='N0LOA5RZQWY6PUDV5D1G1DHLI8' where id=4; -update noar ti set v0='N0LOA5RZQWY6PUDV5D1G1DHLI8' where id=4; -update noar tt set b1='2UNC3' where id=4; -update noar ti set b1='2UNC3' where id=4; -update noar tt set v0='U0SDKJVX9MWJ7C6G1DD30H5251NO8X' where id=4; -update noar ti set v0='U0SDKJVX9MWJ7C6G1DD30H5251NO8X' where id=4; -update noar tt set b2='34QWF0BX23CJD7O47ICQHKM21EMEK' where id=4; -update noar ti set b2='34QWF0BX23CJD7O47ICQHKM21EMEK' where id=4; -update noar tt set v0='4ZWP6TENOTG4KUO44H7VV2F8QE7P87J' where id=5; -update noar ti set v0='4ZWP6TENOTG4KUO44H7VV2F8QE7P87J' where id=5; -update noar tt set b0='DCEOZ8QWMACAJ8YEDYQOHR5' where id=5; -update noar ti set b0='DCEOZ8QWMACAJ8YEDYQOHR5' where id=5; -update noar tt set v0='20L2FONG4TR6R51A' where id=5; -update noar ti set v0='20L2FONG4TR6R51A' where id=5; -update noar tt set b1='GNYN' where id=5; -update noar ti set b1='GNYN' where id=5; -update noar tt set v0='1CE3NRRDXST3J' where id=5; -update noar ti set v0='1CE3NRRDXST3J' where id=5; -update noar tt set b2='ZL9Z473SC' where id=5; -update noar ti set b2='ZL9Z473SC' where id=5; -update noar tt set v0='CXG89W7K117LAW4PM4' where id=6; -update noar ti set v0='CXG89W7K117LAW4PM4' where id=6; -update noar tt set b0='4HYCL4K5I' where id=6; -update noar ti set b0='4HYCL4K5I' where id=6; -update noar tt set v0='4MUTIM4AVW6EM325PCKKPRBBE' where id=6; -update noar ti set v0='4MUTIM4AVW6EM325PCKKPRBBE' where id=6; -update noar tt set b1='CZMUB7LQDSO8NXPZHFFF0R3E3H5' where id=6; -update noar ti set b1='CZMUB7LQDSO8NXPZHFFF0R3E3H5' where id=6; -update noar tt set v0='22QA6ORL' where id=6; -update noar ti set v0='22QA6ORL' where id=6; -update noar tt set b2='HF3RCHN' where id=6; -update noar ti set b2='HF3RCHN' where id=6; -update noar tt set v0='AO2AK2AJKSJ5SRVZDV4MTAX0TLUY' where id=7; -update noar ti set v0='AO2AK2AJKSJ5SRVZDV4MTAX0TLUY' where id=7; -update noar tt set b0='TXNBPAKFEMVH8074UA3FS' where id=7; -update noar ti set b0='TXNBPAKFEMVH8074UA3FS' where id=7; -update noar tt set v0='36DD99P3KEX8WEFFVF' where id=7; -update noar ti set v0='36DD99P3KEX8WEFFVF' where id=7; -update noar tt set b1='W7ZI2WD' where id=7; -update noar ti set b1='W7ZI2WD' where id=7; -update noar tt set v0='W3EF5RGS' where id=7; -update noar ti set v0='W3EF5RGS' where id=7; -update noar tt set b2='IRPNKBRGTFQMAPB57MYKVD' where id=7; -update noar ti set b2='IRPNKBRGTFQMAPB57MYKVD' where id=7; -update noar tt set v0='NHU93TBBFQ7RJBC4A562GOLNSDZRGFM' where id=8; -update noar ti set v0='NHU93TBBFQ7RJBC4A562GOLNSDZRGFM' where id=8; -update noar tt set b0='MG5ILW6D4BEFDQGVF' where id=8; -update noar ti set b0='MG5ILW6D4BEFDQGVF' where id=8; -update noar tt set v0='C0QA' where id=8; -update noar ti set v0='C0QA' where id=8; -update noar tt set b1='7Q0JVX7VLC' where id=8; -update noar ti set b1='7Q0JVX7VLC' where id=8; -update noar tt set v0='2CIXW0ML6XY71' where id=8; -update noar ti set v0='2CIXW0ML6XY71' where id=8; -update noar tt set b2='3BYHJDKFSJDX1ZH52' where id=8; -update noar ti set b2='3BYHJDKFSJDX1ZH52' where id=8; -update noar tt set v0='XF7NHJ9X25DG9EW' where id=9; -update noar ti set v0='XF7NHJ9X25DG9EW' where id=9; -update noar tt set b0='BMDKZ71VYRXAZ853WHJEF131' where id=9; -update noar ti set b0='BMDKZ71VYRXAZ853WHJEF131' where id=9; -update noar tt set v0='HTOTNKI7' where id=9; -update noar ti set v0='HTOTNKI7' where id=9; -update noar tt set b1='2AAVR46M5AMJM7Z54TNJ' where id=9; -update noar ti set b1='2AAVR46M5AMJM7Z54TNJ' where id=9; -update noar tt set v0='FFNMAEX8F18QQUUQM8K09CSQI4' where id=9; -update noar ti set v0='FFNMAEX8F18QQUUQM8K09CSQI4' where id=9; -update noar tt set b2='SD05IDPKDIOFHK1AD7' where id=9; -update noar ti set b2='SD05IDPKDIOFHK1AD7' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 mediumblob not null, - b1 blob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='TDB0XNEKN6SEIE6J13SCC44P' where id=1; -update noar ti set v0='TDB0XNEKN6SEIE6J13SCC44P' where id=1; -update noar tt set b0='HF1Z1I6DH15D7SC4XZ7NSSBXKFT' where id=1; -update noar ti set b0='HF1Z1I6DH15D7SC4XZ7NSSBXKFT' where id=1; -update noar tt set v0='VL6D1ABM7O0DCTC3B9F6Y2' where id=1; -update noar ti set v0='VL6D1ABM7O0DCTC3B9F6Y2' where id=1; -update noar tt set b1='J6KQC03N9WS5T' where id=1; -update noar ti set b1='J6KQC03N9WS5T' where id=1; -update noar tt set v0='6QDTKE' where id=1; -update noar ti set v0='6QDTKE' where id=1; -update noar tt set b2='9BXKL13NWBW8X427QPWHEWXJS4' where id=1; -update noar ti set b2='9BXKL13NWBW8X427QPWHEWXJS4' where id=1; -update noar tt set v0='YU5UJPEXI1RK9Y30' where id=2; -update noar ti set v0='YU5UJPEXI1RK9Y30' where id=2; -update noar tt set b0='LHS80SHX18' where id=2; -update noar ti set b0='LHS80SHX18' where id=2; -update noar tt set v0='NS3V5N9GAT1NKNNP4KXFH5MPV9I' where id=2; -update noar ti set v0='NS3V5N9GAT1NKNNP4KXFH5MPV9I' where id=2; -update noar tt set b1='WXLEEXPX0W8PRVFSBFRZUB1' where id=2; -update noar ti set b1='WXLEEXPX0W8PRVFSBFRZUB1' where id=2; -update noar tt set v0='BBZG9VV93QW06CEUYKT0ERCSZC4HF' where id=2; -update noar ti set v0='BBZG9VV93QW06CEUYKT0ERCSZC4HF' where id=2; -update noar tt set b2='62DESWXL6R1JXMRC' where id=2; -update noar ti set b2='62DESWXL6R1JXMRC' where id=2; -update noar tt set v0='D3B93X' where id=3; -update noar ti set v0='D3B93X' where id=3; -update noar tt set b0='VMRUKMU0QM0EALZIKKEUEHZJ' where id=3; -update noar ti set b0='VMRUKMU0QM0EALZIKKEUEHZJ' where id=3; -update noar tt set v0='0A86ZGSPK94NZPA' where id=3; -update noar ti set v0='0A86ZGSPK94NZPA' where id=3; -update noar tt set b1='KRH6037' where id=3; -update noar ti set b1='KRH6037' where id=3; -update noar tt set v0='F529R0SW0' where id=3; -update noar ti set v0='F529R0SW0' where id=3; -update noar tt set b2='LE' where id=3; -update noar ti set b2='LE' where id=3; -update noar tt set v0='O51K98R1D53XEHVWLDI8T' where id=4; -update noar ti set v0='O51K98R1D53XEHVWLDI8T' where id=4; -update noar tt set b0='IZ4' where id=4; -update noar ti set b0='IZ4' where id=4; -update noar tt set v0='OP3' where id=4; -update noar ti set v0='OP3' where id=4; -update noar tt set b1='KOO39KB4M40ZTOK5W57E3K' where id=4; -update noar ti set b1='KOO39KB4M40ZTOK5W57E3K' where id=4; -update noar tt set v0='9HNNVU' where id=4; -update noar ti set v0='9HNNVU' where id=4; -update noar tt set b2='BL72X6R33KN7M0MDGUQG1844PEMUK' where id=4; -update noar ti set b2='BL72X6R33KN7M0MDGUQG1844PEMUK' where id=4; -update noar tt set v0='IB8JAVD6B11P1CKNKQ1Z7WE6COA7K' where id=5; -update noar ti set v0='IB8JAVD6B11P1CKNKQ1Z7WE6COA7K' where id=5; -update noar tt set b0='2H2I2B0QK' where id=5; -update noar ti set b0='2H2I2B0QK' where id=5; -update noar tt set v0='KZE88XM8DOPVXGH98H6XJF' where id=5; -update noar ti set v0='KZE88XM8DOPVXGH98H6XJF' where id=5; -update noar tt set b1='U0' where id=5; -update noar ti set b1='U0' where id=5; -update noar tt set v0='PXL4AOB2VX2LZAWOY' where id=5; -update noar ti set v0='PXL4AOB2VX2LZAWOY' where id=5; -update noar tt set b2='DMZPNS6RQ' where id=5; -update noar ti set b2='DMZPNS6RQ' where id=5; -update noar tt set v0='N4J5MQ' where id=6; -update noar ti set v0='N4J5MQ' where id=6; -update noar tt set b0='XTP4Q6DJ1H6NHH1DZ2X7E' where id=6; -update noar ti set b0='XTP4Q6DJ1H6NHH1DZ2X7E' where id=6; -update noar tt set v0='MFFCTTILOEY4II3F58VRQBC7WW6IPH6K' where id=6; -update noar ti set v0='MFFCTTILOEY4II3F58VRQBC7WW6IPH6K' where id=6; -update noar tt set b1='U9BN90SLUZJ' where id=6; -update noar ti set b1='U9BN90SLUZJ' where id=6; -update noar tt set v0='O7205UUWHX55MYYLOEAAEQ5DW' where id=6; -update noar ti set v0='O7205UUWHX55MYYLOEAAEQ5DW' where id=6; -update noar tt set b2='D6EBJ0N3KAQ1DFZRTSY3PH' where id=6; -update noar ti set b2='D6EBJ0N3KAQ1DFZRTSY3PH' where id=6; -update noar tt set v0='H1IEGU70Y8EKE0VQSAY' where id=7; -update noar ti set v0='H1IEGU70Y8EKE0VQSAY' where id=7; -update noar tt set b0='ACHG6DW7QLMIPUO3UOMJ7DYS9CDGPB70' where id=7; -update noar ti set b0='ACHG6DW7QLMIPUO3UOMJ7DYS9CDGPB70' where id=7; -update noar tt set v0='E5ZI' where id=7; -update noar ti set v0='E5ZI' where id=7; -update noar tt set b1='VG34IT6J6C33WOAFK' where id=7; -update noar ti set b1='VG34IT6J6C33WOAFK' where id=7; -update noar tt set v0='4H2' where id=7; -update noar ti set v0='4H2' where id=7; -update noar tt set b2='ZVWYMD' where id=7; -update noar ti set b2='ZVWYMD' where id=7; -update noar tt set v0='OF2T87N0H2TAJ7R87' where id=8; -update noar ti set v0='OF2T87N0H2TAJ7R87' where id=8; -update noar tt set b0='6F70BEJW0WBGZUJEFP3MOO' where id=8; -update noar ti set b0='6F70BEJW0WBGZUJEFP3MOO' where id=8; -update noar tt set v0='5SCFF5' where id=8; -update noar ti set v0='5SCFF5' where id=8; -update noar tt set b1='F9' where id=8; -update noar ti set b1='F9' where id=8; -update noar tt set v0='VCEYC' where id=8; -update noar ti set v0='VCEYC' where id=8; -update noar tt set b2='LYFXXSAX3KF4LCG2WG6' where id=8; -update noar ti set b2='LYFXXSAX3KF4LCG2WG6' where id=8; -update noar tt set v0='Q7HBDAKR3WKUFG8E7J' where id=9; -update noar ti set v0='Q7HBDAKR3WKUFG8E7J' where id=9; -update noar tt set b0='ZS4ZO6M2Y6O07842Y4' where id=9; -update noar ti set b0='ZS4ZO6M2Y6O07842Y4' where id=9; -update noar tt set v0='1YP259TLCFZ' where id=9; -update noar ti set v0='1YP259TLCFZ' where id=9; -update noar tt set b1='Z4I9Q13AZVG65UV8O8XJCIJQNU' where id=9; -update noar ti set b1='Z4I9Q13AZVG65UV8O8XJCIJQNU' where id=9; -update noar tt set v0='Y1CSBR491TD2P7O7PBVX5GZOYTWC6' where id=9; -update noar ti set v0='Y1CSBR491TD2P7O7PBVX5GZOYTWC6' where id=9; -update noar tt set b2='T86II1W97FJ' where id=9; -update noar ti set b2='T86II1W97FJ' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 mediumblob not null, - b1 blob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='IGKFL4WG3' where id=1; -update noar ti set v0='IGKFL4WG3' where id=1; -update noar tt set b0='DVPJCQFD' where id=1; -update noar ti set b0='DVPJCQFD' where id=1; -update noar tt set v0='QF338QJ1VB0D050POMBUHWAXF' where id=1; -update noar ti set v0='QF338QJ1VB0D050POMBUHWAXF' where id=1; -update noar tt set b1='QM8H7W5NXQJ44KV' where id=1; -update noar ti set b1='QM8H7W5NXQJ44KV' where id=1; -update noar tt set v0='XT8ZUPD38WDTQ' where id=1; -update noar ti set v0='XT8ZUPD38WDTQ' where id=1; -update noar tt set b2='BT7CH7FQ53' where id=1; -update noar ti set b2='BT7CH7FQ53' where id=1; -update noar tt set v0='LCF861RM1M8FJAE82PQ' where id=2; -update noar ti set v0='LCF861RM1M8FJAE82PQ' where id=2; -update noar tt set b0='P7PRND4OFZ8GA62MIK96FSB6PX4' where id=2; -update noar ti set b0='P7PRND4OFZ8GA62MIK96FSB6PX4' where id=2; -update noar tt set v0='41LF' where id=2; -update noar ti set v0='41LF' where id=2; -update noar tt set b1='WF1U' where id=2; -update noar ti set b1='WF1U' where id=2; -update noar tt set v0='M' where id=2; -update noar ti set v0='M' where id=2; -update noar tt set b2='GR0VTMZ270BTZ0UPJDHELM1QV7SJ6O' where id=2; -update noar ti set b2='GR0VTMZ270BTZ0UPJDHELM1QV7SJ6O' where id=2; -update noar tt set v0='70ROSZ254I4NTDZLZZRAL0F03F' where id=3; -update noar ti set v0='70ROSZ254I4NTDZLZZRAL0F03F' where id=3; -update noar tt set b0='CVDAN1DN9' where id=3; -update noar ti set b0='CVDAN1DN9' where id=3; -update noar tt set v0='B9' where id=3; -update noar ti set v0='B9' where id=3; -update noar tt set b1='9BNQ' where id=3; -update noar ti set b1='9BNQ' where id=3; -update noar tt set v0='ISDDR7MD2IV7QU' where id=3; -update noar ti set v0='ISDDR7MD2IV7QU' where id=3; -update noar tt set b2='IY37D93XDNFNW' where id=3; -update noar ti set b2='IY37D93XDNFNW' where id=3; -update noar tt set v0='MNAX' where id=4; -update noar ti set v0='MNAX' where id=4; -update noar tt set b0='OJA4P1VJYH7C2VCBDU4EPNF5UAYDXPJ' where id=4; -update noar ti set b0='OJA4P1VJYH7C2VCBDU4EPNF5UAYDXPJ' where id=4; -update noar tt set v0='MU8ZVRAQ1RZKEVPH6NRSAK8X0' where id=4; -update noar ti set v0='MU8ZVRAQ1RZKEVPH6NRSAK8X0' where id=4; -update noar tt set b1='QHXII8ZKIBZF9GA73NZ' where id=4; -update noar ti set b1='QHXII8ZKIBZF9GA73NZ' where id=4; -update noar tt set v0='1SR1KNF7DAWK2J60ZZDMKIE9N0VPGVI' where id=4; -update noar ti set v0='1SR1KNF7DAWK2J60ZZDMKIE9N0VPGVI' where id=4; -update noar tt set b2='NFEUT3ZV6WGU4ZGC3A05NJA29MVJM7J' where id=4; -update noar ti set b2='NFEUT3ZV6WGU4ZGC3A05NJA29MVJM7J' where id=4; -update noar tt set v0='0QVJ8144RLXMSE99' where id=5; -update noar ti set v0='0QVJ8144RLXMSE99' where id=5; -update noar tt set b0='LUH7C7XZOSD8ZHEE2A77XPU1R46ADGL9' where id=5; -update noar ti set b0='LUH7C7XZOSD8ZHEE2A77XPU1R46ADGL9' where id=5; -update noar tt set v0='NCVEQTQ128JHYQ7VCMNC6RG' where id=5; -update noar ti set v0='NCVEQTQ128JHYQ7VCMNC6RG' where id=5; -update noar tt set b1='E3AUDPD5GU4PJIW0XIY6TH4' where id=5; -update noar ti set b1='E3AUDPD5GU4PJIW0XIY6TH4' where id=5; -update noar tt set v0='ALAKKAPWJR9FYXE6VP85LOW' where id=5; -update noar ti set v0='ALAKKAPWJR9FYXE6VP85LOW' where id=5; -update noar tt set b2='MQN' where id=5; -update noar ti set b2='MQN' where id=5; -update noar tt set v0='IWVWJ9ZVXW2JOAYJFG8KYMWXUF' where id=6; -update noar ti set v0='IWVWJ9ZVXW2JOAYJFG8KYMWXUF' where id=6; -update noar tt set b0='P8IW5K5TSW8PMEKGP4ZWGFR671WUQJ' where id=6; -update noar ti set b0='P8IW5K5TSW8PMEKGP4ZWGFR671WUQJ' where id=6; -update noar tt set v0='0' where id=6; -update noar ti set v0='0' where id=6; -update noar tt set b1='DBTIGJ3OL' where id=6; -update noar ti set b1='DBTIGJ3OL' where id=6; -update noar tt set v0='K9TU8ICNYTNOQK678IRSWUHQZSTLT' where id=6; -update noar ti set v0='K9TU8ICNYTNOQK678IRSWUHQZSTLT' where id=6; -update noar tt set b2='G1SPT1' where id=6; -update noar ti set b2='G1SPT1' where id=6; -update noar tt set v0='B6H2FJ0H9SW' where id=7; -update noar ti set v0='B6H2FJ0H9SW' where id=7; -update noar tt set b0='SGO7ZYPAFTA5BRQ4TQH2QT1CF3' where id=7; -update noar ti set b0='SGO7ZYPAFTA5BRQ4TQH2QT1CF3' where id=7; -update noar tt set v0='6GJPV9ERN72T0LB1UBL5YSQXO76I' where id=7; -update noar ti set v0='6GJPV9ERN72T0LB1UBL5YSQXO76I' where id=7; -update noar tt set b1='CO3Y7S0NQNM' where id=7; -update noar ti set b1='CO3Y7S0NQNM' where id=7; -update noar tt set v0='JQ4JAI0DKXGZAF54ZN1WM3TV3MSI' where id=7; -update noar ti set v0='JQ4JAI0DKXGZAF54ZN1WM3TV3MSI' where id=7; -update noar tt set b2='KPZ03UC4Z6CIV07JR2P54AR0R95' where id=7; -update noar ti set b2='KPZ03UC4Z6CIV07JR2P54AR0R95' where id=7; -update noar tt set v0='BICODOUW059Y0PEO4Q4WS' where id=8; -update noar ti set v0='BICODOUW059Y0PEO4Q4WS' where id=8; -update noar tt set b0='J0SCKLLLTZY2MNZS3WUR' where id=8; -update noar ti set b0='J0SCKLLLTZY2MNZS3WUR' where id=8; -update noar tt set v0='27ANXJ26DAL9JL5D6F10867EYI85' where id=8; -update noar ti set v0='27ANXJ26DAL9JL5D6F10867EYI85' where id=8; -update noar tt set b1='WQVV09UCZ3' where id=8; -update noar ti set b1='WQVV09UCZ3' where id=8; -update noar tt set v0='KXI126UJEIBYGEK0UN2M9RA2ZE6' where id=8; -update noar ti set v0='KXI126UJEIBYGEK0UN2M9RA2ZE6' where id=8; -update noar tt set b2='02CWRB6EEJZAHRUWK0QAN5XBCGD5H' where id=8; -update noar ti set b2='02CWRB6EEJZAHRUWK0QAN5XBCGD5H' where id=8; -update noar tt set v0='RUB04G2OPFFPVZLLFB' where id=9; -update noar ti set v0='RUB04G2OPFFPVZLLFB' where id=9; -update noar tt set b0='WIEK856NKM586SBBOY7UKMWXQ8D74LWX' where id=9; -update noar ti set b0='WIEK856NKM586SBBOY7UKMWXQ8D74LWX' where id=9; -update noar tt set v0='HCZEHMFLF' where id=9; -update noar ti set v0='HCZEHMFLF' where id=9; -update noar tt set b1='WP039LEGOIQUESIV4OQU0ECTQH' where id=9; -update noar ti set b1='WP039LEGOIQUESIV4OQU0ECTQH' where id=9; -update noar tt set v0='RFKHKT' where id=9; -update noar ti set v0='RFKHKT' where id=9; -update noar tt set b2='QOXKBTVJPDJU7' where id=9; -update noar ti set b2='QOXKBTVJPDJU7' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 mediumblob null, - b1 blob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='90JH9JCXYSQHPI5XRY02G3S8834ZNRVH' where id=1; -update noar ti set v0='90JH9JCXYSQHPI5XRY02G3S8834ZNRVH' where id=1; -update noar tt set b0='NFS7IENZ933UAA2G7201TFFVKZ' where id=1; -update noar ti set b0='NFS7IENZ933UAA2G7201TFFVKZ' where id=1; -update noar tt set v0='V8BDNVM' where id=1; -update noar ti set v0='V8BDNVM' where id=1; -update noar tt set b1='S33OPPVOY' where id=1; -update noar ti set b1='S33OPPVOY' where id=1; -update noar tt set v0='G45V1J19G0KF3AT' where id=1; -update noar ti set v0='G45V1J19G0KF3AT' where id=1; -update noar tt set b2='D7OKFH4KWB' where id=1; -update noar ti set b2='D7OKFH4KWB' where id=1; -update noar tt set v0='ULE71DP70EUEV3' where id=2; -update noar ti set v0='ULE71DP70EUEV3' where id=2; -update noar tt set b0='KQNMZYVTGAJ' where id=2; -update noar ti set b0='KQNMZYVTGAJ' where id=2; -update noar tt set v0='PB53TL593ZQDB4MUJBHUAKVU39XE2P8' where id=2; -update noar ti set v0='PB53TL593ZQDB4MUJBHUAKVU39XE2P8' where id=2; -update noar tt set b1='AFPDV' where id=2; -update noar ti set b1='AFPDV' where id=2; -update noar tt set v0='8V3DIQB9I9AMHL2WOPC62ZPU' where id=2; -update noar ti set v0='8V3DIQB9I9AMHL2WOPC62ZPU' where id=2; -update noar tt set b2='035LJ8JWYVC4KTMUU' where id=2; -update noar ti set b2='035LJ8JWYVC4KTMUU' where id=2; -update noar tt set v0='TI4W' where id=3; -update noar ti set v0='TI4W' where id=3; -update noar tt set b0='HPHIYCBE3GHQF8FRJRQB4' where id=3; -update noar ti set b0='HPHIYCBE3GHQF8FRJRQB4' where id=3; -update noar tt set v0='5WZOJN4' where id=3; -update noar ti set v0='5WZOJN4' where id=3; -update noar tt set b1='XT2' where id=3; -update noar ti set b1='XT2' where id=3; -update noar tt set v0='260YNAXJ0HTEBQL' where id=3; -update noar ti set v0='260YNAXJ0HTEBQL' where id=3; -update noar tt set b2='KZFE7Z3VZNQBSSA3OPAU' where id=3; -update noar ti set b2='KZFE7Z3VZNQBSSA3OPAU' where id=3; -update noar tt set v0='WZ23GI' where id=4; -update noar ti set v0='WZ23GI' where id=4; -update noar tt set b0='SVTOQ0JEJJKZFHVOYN96NU98ZKK1' where id=4; -update noar ti set b0='SVTOQ0JEJJKZFHVOYN96NU98ZKK1' where id=4; -update noar tt set v0='Q9' where id=4; -update noar ti set v0='Q9' where id=4; -update noar tt set b1='4' where id=4; -update noar ti set b1='4' where id=4; -update noar tt set v0='TW206QEY0AHCEF3R6597V9GYUG62' where id=4; -update noar ti set v0='TW206QEY0AHCEF3R6597V9GYUG62' where id=4; -update noar tt set b2='2Z2XOO650CW6KL79V' where id=4; -update noar ti set b2='2Z2XOO650CW6KL79V' where id=4; -update noar tt set v0='4IRSK87QL41S61MX5IHDE0XRFLC' where id=5; -update noar ti set v0='4IRSK87QL41S61MX5IHDE0XRFLC' where id=5; -update noar tt set b0='IJO' where id=5; -update noar ti set b0='IJO' where id=5; -update noar tt set v0='A7A58GH43OTRJRL' where id=5; -update noar ti set v0='A7A58GH43OTRJRL' where id=5; -update noar tt set b1='K8VS8QQYJHBL5YRS' where id=5; -update noar ti set b1='K8VS8QQYJHBL5YRS' where id=5; -update noar tt set v0='41RFQRYTQLSWYWAU5' where id=5; -update noar ti set v0='41RFQRYTQLSWYWAU5' where id=5; -update noar tt set b2='9I307GJ2RR87G' where id=5; -update noar ti set b2='9I307GJ2RR87G' where id=5; -update noar tt set v0='IJXHXCX416P4L1YITQXJM' where id=6; -update noar ti set v0='IJXHXCX416P4L1YITQXJM' where id=6; -update noar tt set b0='OE3NV57EM9KUJC9BGYQ190DY3IE' where id=6; -update noar ti set b0='OE3NV57EM9KUJC9BGYQ190DY3IE' where id=6; -update noar tt set v0='3TS87BVZDP2KFBY9OSLGBXRE' where id=6; -update noar ti set v0='3TS87BVZDP2KFBY9OSLGBXRE' where id=6; -update noar tt set b1='FMS1EY3RZ5GT8FS' where id=6; -update noar ti set b1='FMS1EY3RZ5GT8FS' where id=6; -update noar tt set v0='MQXQV9X81EUG2WLCZEBWC9R3FKDL' where id=6; -update noar ti set v0='MQXQV9X81EUG2WLCZEBWC9R3FKDL' where id=6; -update noar tt set b2='X3IJJZP37MMKTL' where id=6; -update noar ti set b2='X3IJJZP37MMKTL' where id=6; -update noar tt set v0='X7' where id=7; -update noar ti set v0='X7' where id=7; -update noar tt set b0='CB7KZXWCEAZOGJQQUF' where id=7; -update noar ti set b0='CB7KZXWCEAZOGJQQUF' where id=7; -update noar tt set v0='ZN1EXMEX3I78YNO57WFO8J1' where id=7; -update noar ti set v0='ZN1EXMEX3I78YNO57WFO8J1' where id=7; -update noar tt set b1='PHZ5BT8KXLLCKARPTI61U6AN' where id=7; -update noar ti set b1='PHZ5BT8KXLLCKARPTI61U6AN' where id=7; -update noar tt set v0='49PDZV4AN1TF59OIY0U' where id=7; -update noar ti set v0='49PDZV4AN1TF59OIY0U' where id=7; -update noar tt set b2='NUWZ3EM87ZOQDZP02GA' where id=7; -update noar ti set b2='NUWZ3EM87ZOQDZP02GA' where id=7; -update noar tt set v0='0HQ8ZSP8TF8WXMLN2LAFP3URKT888TT5' where id=8; -update noar ti set v0='0HQ8ZSP8TF8WXMLN2LAFP3URKT888TT5' where id=8; -update noar tt set b0='ZQ4SWQW8GPQW3G4RTBM7WC' where id=8; -update noar ti set b0='ZQ4SWQW8GPQW3G4RTBM7WC' where id=8; -update noar tt set v0='EC9I07HL5JCIKBG107OKZHY3JC' where id=8; -update noar ti set v0='EC9I07HL5JCIKBG107OKZHY3JC' where id=8; -update noar tt set b1='N7IHW8R8758T' where id=8; -update noar ti set b1='N7IHW8R8758T' where id=8; -update noar tt set v0='XQU68C3V8BMY1' where id=8; -update noar ti set v0='XQU68C3V8BMY1' where id=8; -update noar tt set b2='X6SMDBM47TP4SUYWHFLZBSO' where id=8; -update noar ti set b2='X6SMDBM47TP4SUYWHFLZBSO' where id=8; -update noar tt set v0='S7HM16ES' where id=9; -update noar ti set v0='S7HM16ES' where id=9; -update noar tt set b0='EBI6UIYSAKYHSLFHNER6E' where id=9; -update noar ti set b0='EBI6UIYSAKYHSLFHNER6E' where id=9; -update noar tt set v0='1X3AYKJ0H291Z1B' where id=9; -update noar ti set v0='1X3AYKJ0H291Z1B' where id=9; -update noar tt set b1='YW91JJKQ3G27RLB93BO0AH' where id=9; -update noar ti set b1='YW91JJKQ3G27RLB93BO0AH' where id=9; -update noar tt set v0='TS22Q27WI2T' where id=9; -update noar ti set v0='TS22Q27WI2T' where id=9; -update noar tt set b2='7OBW6SE79MTOPZ8Z5XKB0' where id=9; -update noar ti set b2='7OBW6SE79MTOPZ8Z5XKB0' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 mediumblob null, - b1 blob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='G4' where id=1; -update noar ti set v0='G4' where id=1; -update noar tt set b0='XH6LPCWIBGE7U3AR' where id=1; -update noar ti set b0='XH6LPCWIBGE7U3AR' where id=1; -update noar tt set v0='MMKJLE2N6DP8' where id=1; -update noar ti set v0='MMKJLE2N6DP8' where id=1; -update noar tt set b1='AVXULQ6J9FP4MFR8IDCVEM7K8' where id=1; -update noar ti set b1='AVXULQ6J9FP4MFR8IDCVEM7K8' where id=1; -update noar tt set v0='VQJ' where id=1; -update noar ti set v0='VQJ' where id=1; -update noar tt set b2='LDWWWO36CLHH3L5H24QY2' where id=1; -update noar ti set b2='LDWWWO36CLHH3L5H24QY2' where id=1; -update noar tt set v0='03E1MHHYX6R49QGW6H7LYM6NUDKLE6' where id=2; -update noar ti set v0='03E1MHHYX6R49QGW6H7LYM6NUDKLE6' where id=2; -update noar tt set b0='3VN6K5WUEGSWEJY7245' where id=2; -update noar ti set b0='3VN6K5WUEGSWEJY7245' where id=2; -update noar tt set v0='9S7032YS8T4JCKJCUST9XJ5' where id=2; -update noar ti set v0='9S7032YS8T4JCKJCUST9XJ5' where id=2; -update noar tt set b1='6' where id=2; -update noar ti set b1='6' where id=2; -update noar tt set v0='0M7MZB' where id=2; -update noar ti set v0='0M7MZB' where id=2; -update noar tt set b2='28J2KK5LULHTNW' where id=2; -update noar ti set b2='28J2KK5LULHTNW' where id=2; -update noar tt set v0='GEAQPS0MZ3' where id=3; -update noar ti set v0='GEAQPS0MZ3' where id=3; -update noar tt set b0='IO6J' where id=3; -update noar ti set b0='IO6J' where id=3; -update noar tt set v0='4B1HER5' where id=3; -update noar ti set v0='4B1HER5' where id=3; -update noar tt set b1='RCGLKC3DBFLRT4XE5CTVEL3KKDR' where id=3; -update noar ti set b1='RCGLKC3DBFLRT4XE5CTVEL3KKDR' where id=3; -update noar tt set v0='RITASI9U8PUUZ380ERYUD5' where id=3; -update noar ti set v0='RITASI9U8PUUZ380ERYUD5' where id=3; -update noar tt set b2='8XEQG44B8U1K4U5RJ1' where id=3; -update noar ti set b2='8XEQG44B8U1K4U5RJ1' where id=3; -update noar tt set v0='MSS0S0VYE8NUX' where id=4; -update noar ti set v0='MSS0S0VYE8NUX' where id=4; -update noar tt set b0='L' where id=4; -update noar ti set b0='L' where id=4; -update noar tt set v0='1JS3WP30RW08VIPB' where id=4; -update noar ti set v0='1JS3WP30RW08VIPB' where id=4; -update noar tt set b1='VUC7XW6P' where id=4; -update noar ti set b1='VUC7XW6P' where id=4; -update noar tt set v0='J8GKS6C9NINBCJBSKNSP8UR4ODQ63S' where id=4; -update noar ti set v0='J8GKS6C9NINBCJBSKNSP8UR4ODQ63S' where id=4; -update noar tt set b2='MFDJ3WFZL6BIW4N' where id=4; -update noar ti set b2='MFDJ3WFZL6BIW4N' where id=4; -update noar tt set v0='HUPTWNX9D' where id=5; -update noar ti set v0='HUPTWNX9D' where id=5; -update noar tt set b0='0' where id=5; -update noar ti set b0='0' where id=5; -update noar tt set v0='9E1PA6K5TBTO3E' where id=5; -update noar ti set v0='9E1PA6K5TBTO3E' where id=5; -update noar tt set b1='TG5HB6BO0U8SBZUCC' where id=5; -update noar ti set b1='TG5HB6BO0U8SBZUCC' where id=5; -update noar tt set v0='Z0N1Z0TDQ551OX82R04B5CNP' where id=5; -update noar ti set v0='Z0N1Z0TDQ551OX82R04B5CNP' where id=5; -update noar tt set b2='YJW7SAQ' where id=5; -update noar ti set b2='YJW7SAQ' where id=5; -update noar tt set v0='5JN863S' where id=6; -update noar ti set v0='5JN863S' where id=6; -update noar tt set b0='G5419V4S4HPN8I45EOD01' where id=6; -update noar ti set b0='G5419V4S4HPN8I45EOD01' where id=6; -update noar tt set v0='A5JY24D06HBDSVT6CEJI95O4PY7V6' where id=6; -update noar ti set v0='A5JY24D06HBDSVT6CEJI95O4PY7V6' where id=6; -update noar tt set b1='BQH1023SCHEIP7VZ9CL' where id=6; -update noar ti set b1='BQH1023SCHEIP7VZ9CL' where id=6; -update noar tt set v0='4GMD35TKQS3GL5EXZD' where id=6; -update noar ti set v0='4GMD35TKQS3GL5EXZD' where id=6; -update noar tt set b2='U4' where id=6; -update noar ti set b2='U4' where id=6; -update noar tt set v0='YQY91HGT6CZXPZ6FS654PI222M5JN' where id=7; -update noar ti set v0='YQY91HGT6CZXPZ6FS654PI222M5JN' where id=7; -update noar tt set b0='OCS6' where id=7; -update noar ti set b0='OCS6' where id=7; -update noar tt set v0='O9OD4U5EBJ163500XCIGXLY16E0WZ5PG' where id=7; -update noar ti set v0='O9OD4U5EBJ163500XCIGXLY16E0WZ5PG' where id=7; -update noar tt set b1='M5TC854Z3OIMPUH7OY1BFMZZDA' where id=7; -update noar ti set b1='M5TC854Z3OIMPUH7OY1BFMZZDA' where id=7; -update noar tt set v0='XL814W' where id=7; -update noar ti set v0='XL814W' where id=7; -update noar tt set b2='VK0ET6BNDNTEAW2MHXH3EQNM0G' where id=7; -update noar ti set b2='VK0ET6BNDNTEAW2MHXH3EQNM0G' where id=7; -update noar tt set v0='P7F53' where id=8; -update noar ti set v0='P7F53' where id=8; -update noar tt set b0='5RYHDUJ06' where id=8; -update noar ti set b0='5RYHDUJ06' where id=8; -update noar tt set v0='5G4X0PNV1DF5YDXBI80FFIYJAB3T7' where id=8; -update noar ti set v0='5G4X0PNV1DF5YDXBI80FFIYJAB3T7' where id=8; -update noar tt set b1='2WF5UJ0FN150C' where id=8; -update noar ti set b1='2WF5UJ0FN150C' where id=8; -update noar tt set v0='6Q2HOPX09K3ZYJP18LZ5HW4W3HI6' where id=8; -update noar ti set v0='6Q2HOPX09K3ZYJP18LZ5HW4W3HI6' where id=8; -update noar tt set b2='86TITEDXSTRL1EJ7EK76X2Z9L72LI' where id=8; -update noar ti set b2='86TITEDXSTRL1EJ7EK76X2Z9L72LI' where id=8; -update noar tt set v0='4' where id=9; -update noar ti set v0='4' where id=9; -update noar tt set b0='LIZ6X7OOK1GBKH' where id=9; -update noar ti set b0='LIZ6X7OOK1GBKH' where id=9; -update noar tt set v0='9NHM1W' where id=9; -update noar ti set v0='9NHM1W' where id=9; -update noar tt set b1='EUSA3G4DCKIFBC79MHH' where id=9; -update noar ti set b1='EUSA3G4DCKIFBC79MHH' where id=9; -update noar tt set v0='6ZF0OC6RE7' where id=9; -update noar ti set v0='6ZF0OC6RE7' where id=9; -update noar tt set b2='W3CQ5DV9L5IYL5O46PRS7OOH' where id=9; -update noar ti set b2='W3CQ5DV9L5IYL5O46PRS7OOH' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 mediumblob not null, - b1 blob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='7B8FQ73YEJGZHENXAJ43UG3ZWS' where id=1; -update noar ti set v0='7B8FQ73YEJGZHENXAJ43UG3ZWS' where id=1; -update noar tt set b0='C1XZECMEXQQ85MWO702HDNF42II' where id=1; -update noar ti set b0='C1XZECMEXQQ85MWO702HDNF42II' where id=1; -update noar tt set v0='NJ1O4XLSF8AK' where id=1; -update noar ti set v0='NJ1O4XLSF8AK' where id=1; -update noar tt set b1='UB1I471NRUS' where id=1; -update noar ti set b1='UB1I471NRUS' where id=1; -update noar tt set v0='TY2ASUFN9JITJKX673UE' where id=1; -update noar ti set v0='TY2ASUFN9JITJKX673UE' where id=1; -update noar tt set b2='0H2RIMLRBQHRHZK03MYDGDZJTZ' where id=1; -update noar ti set b2='0H2RIMLRBQHRHZK03MYDGDZJTZ' where id=1; -update noar tt set v0='3FGT69LXG0L9XYPA09562K' where id=2; -update noar ti set v0='3FGT69LXG0L9XYPA09562K' where id=2; -update noar tt set b0='24NWM5SYSH99NY6NFQYSMSLDFL4P' where id=2; -update noar ti set b0='24NWM5SYSH99NY6NFQYSMSLDFL4P' where id=2; -update noar tt set v0='SRRX01W2BP76FAXDO' where id=2; -update noar ti set v0='SRRX01W2BP76FAXDO' where id=2; -update noar tt set b1='XRKFA1V97JLR3YLEK9BT37866T7O' where id=2; -update noar ti set b1='XRKFA1V97JLR3YLEK9BT37866T7O' where id=2; -update noar tt set v0='XHBWXK2YDGJL8K34GPC6B2D24Z4H5T91' where id=2; -update noar ti set v0='XHBWXK2YDGJL8K34GPC6B2D24Z4H5T91' where id=2; -update noar tt set b2='V3GBL9VLPU' where id=2; -update noar ti set b2='V3GBL9VLPU' where id=2; -update noar tt set v0='65VU4N4740WRVHVLDHA1I3' where id=3; -update noar ti set v0='65VU4N4740WRVHVLDHA1I3' where id=3; -update noar tt set b0='NIZU7BVBJUWX' where id=3; -update noar ti set b0='NIZU7BVBJUWX' where id=3; -update noar tt set v0='3T8QAATEOX7RYZKGAAVWKGFKB2' where id=3; -update noar ti set v0='3T8QAATEOX7RYZKGAAVWKGFKB2' where id=3; -update noar tt set b1='LKIFY' where id=3; -update noar ti set b1='LKIFY' where id=3; -update noar tt set v0='2VE' where id=3; -update noar ti set v0='2VE' where id=3; -update noar tt set b2='23PKF53QJK07BFDEF0TTV5' where id=3; -update noar ti set b2='23PKF53QJK07BFDEF0TTV5' where id=3; -update noar tt set v0='77' where id=4; -update noar ti set v0='77' where id=4; -update noar tt set b0='XIHVIHJ3L4LF1B6ES3' where id=4; -update noar ti set b0='XIHVIHJ3L4LF1B6ES3' where id=4; -update noar tt set v0='SKAUW22O1639PDHUM1FEZT2TKN44KN6O' where id=4; -update noar ti set v0='SKAUW22O1639PDHUM1FEZT2TKN44KN6O' where id=4; -update noar tt set b1='YI23NFUNCOEW3DGYJ51PPBOX27H' where id=4; -update noar ti set b1='YI23NFUNCOEW3DGYJ51PPBOX27H' where id=4; -update noar tt set v0='CEBPYVVT9DKIFF7YR3X2HVQ9' where id=4; -update noar ti set v0='CEBPYVVT9DKIFF7YR3X2HVQ9' where id=4; -update noar tt set b2='W33XOOJ' where id=4; -update noar ti set b2='W33XOOJ' where id=4; -update noar tt set v0='DYQO4K9X81VBRDEL' where id=5; -update noar ti set v0='DYQO4K9X81VBRDEL' where id=5; -update noar tt set b0='MD1CAIOSPXH1EX3YQGIJ9C' where id=5; -update noar ti set b0='MD1CAIOSPXH1EX3YQGIJ9C' where id=5; -update noar tt set v0='CEYMXL' where id=5; -update noar ti set v0='CEYMXL' where id=5; -update noar tt set b1='1TKM9O70B' where id=5; -update noar ti set b1='1TKM9O70B' where id=5; -update noar tt set v0='D15WZM1ZZAJYEB7E5OCJ' where id=5; -update noar ti set v0='D15WZM1ZZAJYEB7E5OCJ' where id=5; -update noar tt set b2='02' where id=5; -update noar ti set b2='02' where id=5; -update noar tt set v0='ZMGH3HEHNCWOB73J69KS' where id=6; -update noar ti set v0='ZMGH3HEHNCWOB73J69KS' where id=6; -update noar tt set b0='6ZRSRCKXIFVT33H9009L2FVLV' where id=6; -update noar ti set b0='6ZRSRCKXIFVT33H9009L2FVLV' where id=6; -update noar tt set v0='TVMU0MUTHDP71DB9LO' where id=6; -update noar ti set v0='TVMU0MUTHDP71DB9LO' where id=6; -update noar tt set b1='BBQXANP967V1SJL04RFQ32Z5NNG4M1T' where id=6; -update noar ti set b1='BBQXANP967V1SJL04RFQ32Z5NNG4M1T' where id=6; -update noar tt set v0='CNY3METERU7LAQ' where id=6; -update noar ti set v0='CNY3METERU7LAQ' where id=6; -update noar tt set b2='8L7J1EA9I4' where id=6; -update noar ti set b2='8L7J1EA9I4' where id=6; -update noar tt set v0='BZYO0JBFR3C92Z5KTYLZ' where id=7; -update noar ti set v0='BZYO0JBFR3C92Z5KTYLZ' where id=7; -update noar tt set b0='RYA22F622D1NE7JA8Y62A0EK8' where id=7; -update noar ti set b0='RYA22F622D1NE7JA8Y62A0EK8' where id=7; -update noar tt set v0='A3BZKLMK7DDTK4V510NOH1GBRYSE9JJ' where id=7; -update noar ti set v0='A3BZKLMK7DDTK4V510NOH1GBRYSE9JJ' where id=7; -update noar tt set b1='EMVLE7F3J9W3HZRXZQRBRX' where id=7; -update noar ti set b1='EMVLE7F3J9W3HZRXZQRBRX' where id=7; -update noar tt set v0='K' where id=7; -update noar ti set v0='K' where id=7; -update noar tt set b2='LXAVN' where id=7; -update noar ti set b2='LXAVN' where id=7; -update noar tt set v0='K' where id=8; -update noar ti set v0='K' where id=8; -update noar tt set b0='80YAXMS7Z6' where id=8; -update noar ti set b0='80YAXMS7Z6' where id=8; -update noar tt set v0='00HV5QHL7BGDF7KK6' where id=8; -update noar ti set v0='00HV5QHL7BGDF7KK6' where id=8; -update noar tt set b1='94O3H18FPQ2JVDSXQ1FPO8IN7TK' where id=8; -update noar ti set b1='94O3H18FPQ2JVDSXQ1FPO8IN7TK' where id=8; -update noar tt set v0='YRF744QRP1QD1M' where id=8; -update noar ti set v0='YRF744QRP1QD1M' where id=8; -update noar tt set b2='A71EQS4QAL7N' where id=8; -update noar ti set b2='A71EQS4QAL7N' where id=8; -update noar tt set v0='A7OP6WTJTPCW35089J' where id=9; -update noar ti set v0='A7OP6WTJTPCW35089J' where id=9; -update noar tt set b0='T7HJ691SN1T7' where id=9; -update noar ti set b0='T7HJ691SN1T7' where id=9; -update noar tt set v0='XUYEHWRRDKMB00MC4' where id=9; -update noar ti set v0='XUYEHWRRDKMB00MC4' where id=9; -update noar tt set b1='F4BA1MN632ESHVT7NVD4ZIA4' where id=9; -update noar ti set b1='F4BA1MN632ESHVT7NVD4ZIA4' where id=9; -update noar tt set v0='YR4OIB04J3A9E7U2U' where id=9; -update noar ti set v0='YR4OIB04J3A9E7U2U' where id=9; -update noar tt set b2='8' where id=9; -update noar ti set b2='8' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 mediumblob not null, - b1 blob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='7S14B59AS35GC' where id=1; -update noar ti set v0='7S14B59AS35GC' where id=1; -update noar tt set b0='KN8YTWFLVPSGN4JUXHGF9T8YE' where id=1; -update noar ti set b0='KN8YTWFLVPSGN4JUXHGF9T8YE' where id=1; -update noar tt set v0='Z3Z' where id=1; -update noar ti set v0='Z3Z' where id=1; -update noar tt set b1='24S6JMFII5HYNSI' where id=1; -update noar ti set b1='24S6JMFII5HYNSI' where id=1; -update noar tt set v0='WKS' where id=1; -update noar ti set v0='WKS' where id=1; -update noar tt set b2='1DHIDHUA8X1AEXYVAHM6X7Q' where id=1; -update noar ti set b2='1DHIDHUA8X1AEXYVAHM6X7Q' where id=1; -update noar tt set v0='OC9EXECYRG4FQ2V8R2J3WERD' where id=2; -update noar ti set v0='OC9EXECYRG4FQ2V8R2J3WERD' where id=2; -update noar tt set b0='EET6UW7Y3078K3H9J7' where id=2; -update noar ti set b0='EET6UW7Y3078K3H9J7' where id=2; -update noar tt set v0='FA8X2M9M' where id=2; -update noar ti set v0='FA8X2M9M' where id=2; -update noar tt set b1='G' where id=2; -update noar ti set b1='G' where id=2; -update noar tt set v0='7XR4CKJ6IFDD1UM25F7' where id=2; -update noar ti set v0='7XR4CKJ6IFDD1UM25F7' where id=2; -update noar tt set b2='MSL0FLBNQ6NE2PG839WDNLPK6O2ENW' where id=2; -update noar ti set b2='MSL0FLBNQ6NE2PG839WDNLPK6O2ENW' where id=2; -update noar tt set v0='WDJKZXXI4FE' where id=3; -update noar ti set v0='WDJKZXXI4FE' where id=3; -update noar tt set b0='OSXR6QWOSPHFF' where id=3; -update noar ti set b0='OSXR6QWOSPHFF' where id=3; -update noar tt set v0='USU3W' where id=3; -update noar ti set v0='USU3W' where id=3; -update noar tt set b1='VX' where id=3; -update noar ti set b1='VX' where id=3; -update noar tt set v0='ZCQG3VMYJ2CR4LSBUQW44' where id=3; -update noar ti set v0='ZCQG3VMYJ2CR4LSBUQW44' where id=3; -update noar tt set b2='FFVQG21R9JISEKPKADFIJZVZGEO5J3BW' where id=3; -update noar ti set b2='FFVQG21R9JISEKPKADFIJZVZGEO5J3BW' where id=3; -update noar tt set v0='3PGN5LMSE' where id=4; -update noar ti set v0='3PGN5LMSE' where id=4; -update noar tt set b0='F3JGST' where id=4; -update noar ti set b0='F3JGST' where id=4; -update noar tt set v0='6WFBZVU50BEDL5US0AHBR94E3TJ' where id=4; -update noar ti set v0='6WFBZVU50BEDL5US0AHBR94E3TJ' where id=4; -update noar tt set b1='4P9QMI8ND' where id=4; -update noar ti set b1='4P9QMI8ND' where id=4; -update noar tt set v0='QZ8VMGWFLML6MS0KXG6IR8VVIVI' where id=4; -update noar ti set v0='QZ8VMGWFLML6MS0KXG6IR8VVIVI' where id=4; -update noar tt set b2='B0AQGVNEIHKFC8GNLOTW' where id=4; -update noar ti set b2='B0AQGVNEIHKFC8GNLOTW' where id=4; -update noar tt set v0='ULWJ4O4GZPO74SQYVX5R2C' where id=5; -update noar ti set v0='ULWJ4O4GZPO74SQYVX5R2C' where id=5; -update noar tt set b0='B47P87GW7HGNCJ7Q6J1V4R3HAN0Z' where id=5; -update noar ti set b0='B47P87GW7HGNCJ7Q6J1V4R3HAN0Z' where id=5; -update noar tt set v0='SPIOZOFBJ751HYZK4GXY0WW' where id=5; -update noar ti set v0='SPIOZOFBJ751HYZK4GXY0WW' where id=5; -update noar tt set b1='7O0ZNTD787TSZ0S0KI3WMD4VBQ' where id=5; -update noar ti set b1='7O0ZNTD787TSZ0S0KI3WMD4VBQ' where id=5; -update noar tt set v0='3F' where id=5; -update noar ti set v0='3F' where id=5; -update noar tt set b2='MDU46LH5OILXALG4O89A' where id=5; -update noar ti set b2='MDU46LH5OILXALG4O89A' where id=5; -update noar tt set v0='GO87SKZD39NOF2VNSXW54ZRI8HFYLM' where id=6; -update noar ti set v0='GO87SKZD39NOF2VNSXW54ZRI8HFYLM' where id=6; -update noar tt set b0='1B299U729Y5GTU9XYQ6WKP' where id=6; -update noar ti set b0='1B299U729Y5GTU9XYQ6WKP' where id=6; -update noar tt set v0='3QL1SSQ3J8ILZ' where id=6; -update noar ti set v0='3QL1SSQ3J8ILZ' where id=6; -update noar tt set b1='YW5OI10T1UVD6N35JOGCB' where id=6; -update noar ti set b1='YW5OI10T1UVD6N35JOGCB' where id=6; -update noar tt set v0='M81OQ457829G5ODMAV7GP3XJWH' where id=6; -update noar ti set v0='M81OQ457829G5ODMAV7GP3XJWH' where id=6; -update noar tt set b2='207VU3YLGSE9KQ9GT7N14QYB0MWS' where id=6; -update noar ti set b2='207VU3YLGSE9KQ9GT7N14QYB0MWS' where id=6; -update noar tt set v0='3' where id=7; -update noar ti set v0='3' where id=7; -update noar tt set b0='IB' where id=7; -update noar ti set b0='IB' where id=7; -update noar tt set v0='DD58LRPU16LY' where id=7; -update noar ti set v0='DD58LRPU16LY' where id=7; -update noar tt set b1='6VHXF4Q2K7XYGSK' where id=7; -update noar ti set b1='6VHXF4Q2K7XYGSK' where id=7; -update noar tt set v0='IRF1JKPNFPIF0SX0BYB36M' where id=7; -update noar ti set v0='IRF1JKPNFPIF0SX0BYB36M' where id=7; -update noar tt set b2='TC875JYEI4I7ENIOCG' where id=7; -update noar ti set b2='TC875JYEI4I7ENIOCG' where id=7; -update noar tt set v0='V2A6AMVQ8H5EG' where id=8; -update noar ti set v0='V2A6AMVQ8H5EG' where id=8; -update noar tt set b0='D7P56RTHEZ96ERKIAGGNQN5KBFG3TN' where id=8; -update noar ti set b0='D7P56RTHEZ96ERKIAGGNQN5KBFG3TN' where id=8; -update noar tt set v0='XC0Y8RA39VRI418' where id=8; -update noar ti set v0='XC0Y8RA39VRI418' where id=8; -update noar tt set b1='TB2IRT9CGTZSKFLOBHZZXRO0K' where id=8; -update noar ti set b1='TB2IRT9CGTZSKFLOBHZZXRO0K' where id=8; -update noar tt set v0='IGFJQ148M4ORWD' where id=8; -update noar ti set v0='IGFJQ148M4ORWD' where id=8; -update noar tt set b2='EQUEHWHEOUSTB1J0NEZ35MK9Z8NSJUU6' where id=8; -update noar ti set b2='EQUEHWHEOUSTB1J0NEZ35MK9Z8NSJUU6' where id=8; -update noar tt set v0='H8L4A07GPSM3R2TTS5GIQMZ8' where id=9; -update noar ti set v0='H8L4A07GPSM3R2TTS5GIQMZ8' where id=9; -update noar tt set b0='B33HHKKYZ11VOCLB9XKBKZD' where id=9; -update noar ti set b0='B33HHKKYZ11VOCLB9XKBKZD' where id=9; -update noar tt set v0='W0XDM4A9WI9MGZFSMG' where id=9; -update noar ti set v0='W0XDM4A9WI9MGZFSMG' where id=9; -update noar tt set b1='OKMDTPM' where id=9; -update noar ti set b1='OKMDTPM' where id=9; -update noar tt set v0='2FYVQD4MBNK3X1N994' where id=9; -update noar ti set v0='2FYVQD4MBNK3X1N994' where id=9; -update noar tt set b2='6WS7B7Y6QIOZWUML6IG899IWARPWY' where id=9; -update noar ti set b2='6WS7B7Y6QIOZWUML6IG899IWARPWY' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 mediumblob null, - b1 blob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='8UR9KRLJLDKXKC' where id=1; -update noar ti set v0='8UR9KRLJLDKXKC' where id=1; -update noar tt set b0='IW2PDF5NKZA2S7DBB1Q' where id=1; -update noar ti set b0='IW2PDF5NKZA2S7DBB1Q' where id=1; -update noar tt set v0='80OU09IVF5YC9631JHKUOX4T0' where id=1; -update noar ti set v0='80OU09IVF5YC9631JHKUOX4T0' where id=1; -update noar tt set b1='1E6JDLVULNGIADOIRV2YS7E' where id=1; -update noar ti set b1='1E6JDLVULNGIADOIRV2YS7E' where id=1; -update noar tt set v0='478YRFWB761UFCQ8Q4RC6US3NV1ZG' where id=1; -update noar ti set v0='478YRFWB761UFCQ8Q4RC6US3NV1ZG' where id=1; -update noar tt set b2='L' where id=1; -update noar ti set b2='L' where id=1; -update noar tt set v0='VG7JMSSA40PC8QIRIDFZZE2FPEDHM7' where id=2; -update noar ti set v0='VG7JMSSA40PC8QIRIDFZZE2FPEDHM7' where id=2; -update noar tt set b0='JSWRJFOCTCBQ5KCD1H' where id=2; -update noar ti set b0='JSWRJFOCTCBQ5KCD1H' where id=2; -update noar tt set v0='FCGDWNEQH8JWZAHKBM' where id=2; -update noar ti set v0='FCGDWNEQH8JWZAHKBM' where id=2; -update noar tt set b1='Q48G07O10R8PXLI' where id=2; -update noar ti set b1='Q48G07O10R8PXLI' where id=2; -update noar tt set v0='9MK7ZXQA11TBMX0W73X118YE' where id=2; -update noar ti set v0='9MK7ZXQA11TBMX0W73X118YE' where id=2; -update noar tt set b2='C6941HH7MM7H0K6QFR5Y' where id=2; -update noar ti set b2='C6941HH7MM7H0K6QFR5Y' where id=2; -update noar tt set v0='GKNZ' where id=3; -update noar ti set v0='GKNZ' where id=3; -update noar tt set b0='EV5RZK5WMXJ7MC96C7L' where id=3; -update noar ti set b0='EV5RZK5WMXJ7MC96C7L' where id=3; -update noar tt set v0='6M7NBNE5IXGW981NCUH1THKFVJTXHO' where id=3; -update noar ti set v0='6M7NBNE5IXGW981NCUH1THKFVJTXHO' where id=3; -update noar tt set b1='2G3BXPL43AYT' where id=3; -update noar ti set b1='2G3BXPL43AYT' where id=3; -update noar tt set v0='1C361A31AHEV5SI6QZO47VXDTBKFD03' where id=3; -update noar ti set v0='1C361A31AHEV5SI6QZO47VXDTBKFD03' where id=3; -update noar tt set b2='3NCH' where id=3; -update noar ti set b2='3NCH' where id=3; -update noar tt set v0='497S15D5IBFH1JAOPY4KKFIUEK' where id=4; -update noar ti set v0='497S15D5IBFH1JAOPY4KKFIUEK' where id=4; -update noar tt set b0='FH' where id=4; -update noar ti set b0='FH' where id=4; -update noar tt set v0='WPZASKJ0GKT3R9YRCUM4WLYY2MG' where id=4; -update noar ti set v0='WPZASKJ0GKT3R9YRCUM4WLYY2MG' where id=4; -update noar tt set b1='F31K3A4HQP9AWPSH2Z28XAA7JYUR' where id=4; -update noar ti set b1='F31K3A4HQP9AWPSH2Z28XAA7JYUR' where id=4; -update noar tt set v0='48X3SY' where id=4; -update noar ti set v0='48X3SY' where id=4; -update noar tt set b2='D1W1JDMTTX3YPW96OODLDJK' where id=4; -update noar ti set b2='D1W1JDMTTX3YPW96OODLDJK' where id=4; -update noar tt set v0='CWVELQR6UGSHBWXL9X94R7W54ZIM8D' where id=5; -update noar ti set v0='CWVELQR6UGSHBWXL9X94R7W54ZIM8D' where id=5; -update noar tt set b0='N2NFABMYWYW2U8SHQ7LQ2JQSUFC' where id=5; -update noar ti set b0='N2NFABMYWYW2U8SHQ7LQ2JQSUFC' where id=5; -update noar tt set v0='B1L' where id=5; -update noar ti set v0='B1L' where id=5; -update noar tt set b1='1CS7NV5YO05SWF' where id=5; -update noar ti set b1='1CS7NV5YO05SWF' where id=5; -update noar tt set v0='ZPZIA8HUB8WAKF5LKB1V0KS' where id=5; -update noar ti set v0='ZPZIA8HUB8WAKF5LKB1V0KS' where id=5; -update noar tt set b2='1BM6MLZHYFJC9P7E58WC' where id=5; -update noar ti set b2='1BM6MLZHYFJC9P7E58WC' where id=5; -update noar tt set v0='TUO29W31B8XINLH' where id=6; -update noar ti set v0='TUO29W31B8XINLH' where id=6; -update noar tt set b0='GQ531HW8F82O6' where id=6; -update noar ti set b0='GQ531HW8F82O6' where id=6; -update noar tt set v0='IA' where id=6; -update noar ti set v0='IA' where id=6; -update noar tt set b1='B33DK98SAWJHKFL1YVGFWM' where id=6; -update noar ti set b1='B33DK98SAWJHKFL1YVGFWM' where id=6; -update noar tt set v0='TV4GKDE9H1OBU' where id=6; -update noar ti set v0='TV4GKDE9H1OBU' where id=6; -update noar tt set b2='6AOTB3AERUJC92K2LOKK' where id=6; -update noar ti set b2='6AOTB3AERUJC92K2LOKK' where id=6; -update noar tt set v0='MD6UNO940OBMWIF6NSE2A8V9EL' where id=7; -update noar ti set v0='MD6UNO940OBMWIF6NSE2A8V9EL' where id=7; -update noar tt set b0='QQL13XE45GBT1TQ2MWIAIB' where id=7; -update noar ti set b0='QQL13XE45GBT1TQ2MWIAIB' where id=7; -update noar tt set v0='EI' where id=7; -update noar ti set v0='EI' where id=7; -update noar tt set b1='RNM652MLJZT0' where id=7; -update noar ti set b1='RNM652MLJZT0' where id=7; -update noar tt set v0='FQYKNTX3A9GKZ5SPC19AXYUCPV' where id=7; -update noar ti set v0='FQYKNTX3A9GKZ5SPC19AXYUCPV' where id=7; -update noar tt set b2='JNNOHSDRG64OXE0OB' where id=7; -update noar ti set b2='JNNOHSDRG64OXE0OB' where id=7; -update noar tt set v0='2HZDFN8KN6PM61FR3A2' where id=8; -update noar ti set v0='2HZDFN8KN6PM61FR3A2' where id=8; -update noar tt set b0='2' where id=8; -update noar ti set b0='2' where id=8; -update noar tt set v0='P51974RMYC4L7HHQMQKDKM8JHHQGUP' where id=8; -update noar ti set v0='P51974RMYC4L7HHQMQKDKM8JHHQGUP' where id=8; -update noar tt set b1='M' where id=8; -update noar ti set b1='M' where id=8; -update noar tt set v0='HGOO5962UPC2X3V' where id=8; -update noar ti set v0='HGOO5962UPC2X3V' where id=8; -update noar tt set b2='A52KYQ50PN0' where id=8; -update noar ti set b2='A52KYQ50PN0' where id=8; -update noar tt set v0='J073' where id=9; -update noar ti set v0='J073' where id=9; -update noar tt set b0='N544CFIGEXJSF0TT6M67KERQ69FQNY1' where id=9; -update noar ti set b0='N544CFIGEXJSF0TT6M67KERQ69FQNY1' where id=9; -update noar tt set v0='OIZK769PG' where id=9; -update noar ti set v0='OIZK769PG' where id=9; -update noar tt set b1='KJM0MPAE2BY205YCVEENTT6TNFR1' where id=9; -update noar ti set b1='KJM0MPAE2BY205YCVEENTT6TNFR1' where id=9; -update noar tt set v0='2G6NVTY6AC0U0M9GRVB1NSZ62GC2NK' where id=9; -update noar ti set v0='2G6NVTY6AC0U0M9GRVB1NSZ62GC2NK' where id=9; -update noar tt set b2='79P1V68U0' where id=9; -update noar ti set b2='79P1V68U0' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 mediumblob null, - b1 blob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='ISR9WXX6PGU' where id=1; -update noar ti set v0='ISR9WXX6PGU' where id=1; -update noar tt set b0='8Z1N0UMH54VIAAKXUQOMQ3' where id=1; -update noar ti set b0='8Z1N0UMH54VIAAKXUQOMQ3' where id=1; -update noar tt set v0='9JYGYBM' where id=1; -update noar ti set v0='9JYGYBM' where id=1; -update noar tt set b1='OGVAZSKD2' where id=1; -update noar ti set b1='OGVAZSKD2' where id=1; -update noar tt set v0='WNJS0UUMDUA7GANHY6HM6OL6C5LZ' where id=1; -update noar ti set v0='WNJS0UUMDUA7GANHY6HM6OL6C5LZ' where id=1; -update noar tt set b2='S32' where id=1; -update noar ti set b2='S32' where id=1; -update noar tt set v0='I2J0STKJAZDOVQH4QZ27PR6T8' where id=2; -update noar ti set v0='I2J0STKJAZDOVQH4QZ27PR6T8' where id=2; -update noar tt set b0='NKVX1YV7F20DRRGY' where id=2; -update noar ti set b0='NKVX1YV7F20DRRGY' where id=2; -update noar tt set v0='92T1NMQ78Q5OAMG9' where id=2; -update noar ti set v0='92T1NMQ78Q5OAMG9' where id=2; -update noar tt set b1='U36L4WFXYIJQRPN7TJ71F1' where id=2; -update noar ti set b1='U36L4WFXYIJQRPN7TJ71F1' where id=2; -update noar tt set v0='VYOZ88ZMKKRABK0VBP0' where id=2; -update noar ti set v0='VYOZ88ZMKKRABK0VBP0' where id=2; -update noar tt set b2='HGJ1H6PW0J24CGMP1DHSZ24BYI49R' where id=2; -update noar ti set b2='HGJ1H6PW0J24CGMP1DHSZ24BYI49R' where id=2; -update noar tt set v0='SS7BOL6H7N0XCR4SFVA2Z94NVP40E' where id=3; -update noar ti set v0='SS7BOL6H7N0XCR4SFVA2Z94NVP40E' where id=3; -update noar tt set b0='4ZE1WNY0JQMNRASFYM4HL6' where id=3; -update noar ti set b0='4ZE1WNY0JQMNRASFYM4HL6' where id=3; -update noar tt set v0='J7QNHGSIAGQFK8MUAKU530FLS5Q47GL' where id=3; -update noar ti set v0='J7QNHGSIAGQFK8MUAKU530FLS5Q47GL' where id=3; -update noar tt set b1='PC6BA9R5LLFR3GUDH' where id=3; -update noar ti set b1='PC6BA9R5LLFR3GUDH' where id=3; -update noar tt set v0='P4926J2FC3PIZPATF9Q8WA8CKB' where id=3; -update noar ti set v0='P4926J2FC3PIZPATF9Q8WA8CKB' where id=3; -update noar tt set b2='S15' where id=3; -update noar ti set b2='S15' where id=3; -update noar tt set v0='L7YR' where id=4; -update noar ti set v0='L7YR' where id=4; -update noar tt set b0='SP35PUJV65' where id=4; -update noar ti set b0='SP35PUJV65' where id=4; -update noar tt set v0='9' where id=4; -update noar ti set v0='9' where id=4; -update noar tt set b1='VH9EZQ4JNE' where id=4; -update noar ti set b1='VH9EZQ4JNE' where id=4; -update noar tt set v0='YFJNI1D' where id=4; -update noar ti set v0='YFJNI1D' where id=4; -update noar tt set b2='L79RVMADYMG3ZB1FYIMM' where id=4; -update noar ti set b2='L79RVMADYMG3ZB1FYIMM' where id=4; -update noar tt set v0='H4QSO5PO546ZL6L' where id=5; -update noar ti set v0='H4QSO5PO546ZL6L' where id=5; -update noar tt set b0='DRWAD8MAYLAOXBTPCMPQZR87' where id=5; -update noar ti set b0='DRWAD8MAYLAOXBTPCMPQZR87' where id=5; -update noar tt set v0='XR0OCXAGQR' where id=5; -update noar ti set v0='XR0OCXAGQR' where id=5; -update noar tt set b1='SDQUEK7CI1DZ8AWS1TW' where id=5; -update noar ti set b1='SDQUEK7CI1DZ8AWS1TW' where id=5; -update noar tt set v0='PJ6D3SK79R8LRTU0' where id=5; -update noar ti set v0='PJ6D3SK79R8LRTU0' where id=5; -update noar tt set b2='RV2AEIERE7' where id=5; -update noar ti set b2='RV2AEIERE7' where id=5; -update noar tt set v0='Y1NB36ESX4AVRM2TW6N' where id=6; -update noar ti set v0='Y1NB36ESX4AVRM2TW6N' where id=6; -update noar tt set b0='FZBOACYRVYUE3P9AAY' where id=6; -update noar ti set b0='FZBOACYRVYUE3P9AAY' where id=6; -update noar tt set v0='IDCAQXXEEDIVD1RNS61G01GYYNNB' where id=6; -update noar ti set v0='IDCAQXXEEDIVD1RNS61G01GYYNNB' where id=6; -update noar tt set b1='4X3OUQ8NFKW45PMYD4' where id=6; -update noar ti set b1='4X3OUQ8NFKW45PMYD4' where id=6; -update noar tt set v0='RTU5J32' where id=6; -update noar ti set v0='RTU5J32' where id=6; -update noar tt set b2='0N' where id=6; -update noar ti set b2='0N' where id=6; -update noar tt set v0='ZZNVIX3IHKY3FOV1LV6AQ' where id=7; -update noar ti set v0='ZZNVIX3IHKY3FOV1LV6AQ' where id=7; -update noar tt set b0='HME4D4PV12W9NAE' where id=7; -update noar ti set b0='HME4D4PV12W9NAE' where id=7; -update noar tt set v0='I40IIF6SJP' where id=7; -update noar ti set v0='I40IIF6SJP' where id=7; -update noar tt set b1='5FDYKBU' where id=7; -update noar ti set b1='5FDYKBU' where id=7; -update noar tt set v0='HMFGH' where id=7; -update noar ti set v0='HMFGH' where id=7; -update noar tt set b2='M2KA7GDORAC' where id=7; -update noar ti set b2='M2KA7GDORAC' where id=7; -update noar tt set v0='43I' where id=8; -update noar ti set v0='43I' where id=8; -update noar tt set b0='LAIWPXQITAO5D4ZJ' where id=8; -update noar ti set b0='LAIWPXQITAO5D4ZJ' where id=8; -update noar tt set v0='RR6W70RXF9H75ILON9NOWNCUQ7H7D2JV' where id=8; -update noar ti set v0='RR6W70RXF9H75ILON9NOWNCUQ7H7D2JV' where id=8; -update noar tt set b1='1R0JD6888CXA2LXO6IQBF0YBODMGKE' where id=8; -update noar ti set b1='1R0JD6888CXA2LXO6IQBF0YBODMGKE' where id=8; -update noar tt set v0='OKI77PW8XCTR' where id=8; -update noar ti set v0='OKI77PW8XCTR' where id=8; -update noar tt set b2='PQJ0CM1LNWYCS27' where id=8; -update noar ti set b2='PQJ0CM1LNWYCS27' where id=8; -update noar tt set v0='JO7I' where id=9; -update noar ti set v0='JO7I' where id=9; -update noar tt set b0='YCQ8SU2E' where id=9; -update noar ti set b0='YCQ8SU2E' where id=9; -update noar tt set v0='PA' where id=9; -update noar ti set v0='PA' where id=9; -update noar tt set b1='NXH2QQTC9XAM' where id=9; -update noar ti set b1='NXH2QQTC9XAM' where id=9; -update noar tt set v0='SCCAESY87D4S3' where id=9; -update noar ti set v0='SCCAESY87D4S3' where id=9; -update noar tt set b2='G' where id=9; -update noar ti set b2='G' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 mediumblob not null, - b1 blob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='VD7WAWF5C6G' where id=1; -update noar ti set v0='VD7WAWF5C6G' where id=1; -update noar tt set b0='O95PK0VNM' where id=1; -update noar ti set b0='O95PK0VNM' where id=1; -update noar tt set v0='QDPE7AEOVBU6Z' where id=1; -update noar ti set v0='QDPE7AEOVBU6Z' where id=1; -update noar tt set b1='ZQ4FMANLXB5Y855V1AF' where id=1; -update noar ti set b1='ZQ4FMANLXB5Y855V1AF' where id=1; -update noar tt set v0='H3D9RLUKCKYF025WX9' where id=1; -update noar ti set v0='H3D9RLUKCKYF025WX9' where id=1; -update noar tt set b2='ARO6CR3VN014A5GOFL7LHPG' where id=1; -update noar ti set b2='ARO6CR3VN014A5GOFL7LHPG' where id=1; -update noar tt set v0='CJCYJPILO9MZRY50SJUG0U5X58HE7Z' where id=2; -update noar ti set v0='CJCYJPILO9MZRY50SJUG0U5X58HE7Z' where id=2; -update noar tt set b0='1EI48IYTSQJKWDO44NHHCWAZ' where id=2; -update noar ti set b0='1EI48IYTSQJKWDO44NHHCWAZ' where id=2; -update noar tt set v0='YFCS3I8' where id=2; -update noar ti set v0='YFCS3I8' where id=2; -update noar tt set b1='2R2834D4' where id=2; -update noar ti set b1='2R2834D4' where id=2; -update noar tt set v0='0XY6JB8S1OO29KEHS' where id=2; -update noar ti set v0='0XY6JB8S1OO29KEHS' where id=2; -update noar tt set b2='2IWV' where id=2; -update noar ti set b2='2IWV' where id=2; -update noar tt set v0='DR' where id=3; -update noar ti set v0='DR' where id=3; -update noar tt set b0='RJBOW44WMWY0WFW1TUD5IMARS80JF' where id=3; -update noar ti set b0='RJBOW44WMWY0WFW1TUD5IMARS80JF' where id=3; -update noar tt set v0='4CR5FYWLN9CMXRLJKA0' where id=3; -update noar ti set v0='4CR5FYWLN9CMXRLJKA0' where id=3; -update noar tt set b1='3U69SZ0S' where id=3; -update noar ti set b1='3U69SZ0S' where id=3; -update noar tt set v0='7M4Y6EK4SSO7N4AY5U3CR' where id=3; -update noar ti set v0='7M4Y6EK4SSO7N4AY5U3CR' where id=3; -update noar tt set b2='LNHK3' where id=3; -update noar ti set b2='LNHK3' where id=3; -update noar tt set v0='LSP3TLSF6Z37YH2ZF120' where id=4; -update noar ti set v0='LSP3TLSF6Z37YH2ZF120' where id=4; -update noar tt set b0='6FGS1V8NEKK9L39Z' where id=4; -update noar ti set b0='6FGS1V8NEKK9L39Z' where id=4; -update noar tt set v0='AG7MFQ5IN8R222D3LQDNHJY9O32' where id=4; -update noar ti set v0='AG7MFQ5IN8R222D3LQDNHJY9O32' where id=4; -update noar tt set b1='AL746MG0288QOKRB8RW2M7357WC6QYA9' where id=4; -update noar ti set b1='AL746MG0288QOKRB8RW2M7357WC6QYA9' where id=4; -update noar tt set v0='4DMC1NZUB' where id=4; -update noar ti set v0='4DMC1NZUB' where id=4; -update noar tt set b2='ZBDVCHEKYI6VLCHX7ZLGXH' where id=4; -update noar ti set b2='ZBDVCHEKYI6VLCHX7ZLGXH' where id=4; -update noar tt set v0='JEKN0W6GBF59W53' where id=5; -update noar ti set v0='JEKN0W6GBF59W53' where id=5; -update noar tt set b0='4RU0T9T14WSI7S841BV8694YA7' where id=5; -update noar ti set b0='4RU0T9T14WSI7S841BV8694YA7' where id=5; -update noar tt set v0='AQADRD6YU4RGFD4899I7M' where id=5; -update noar ti set v0='AQADRD6YU4RGFD4899I7M' where id=5; -update noar tt set b1='20MBDRFOACOWLIZ' where id=5; -update noar ti set b1='20MBDRFOACOWLIZ' where id=5; -update noar tt set v0='EDGI' where id=5; -update noar ti set v0='EDGI' where id=5; -update noar tt set b2='TA4YTJGKOQN6CIQA49X9FFUY8IXC' where id=5; -update noar ti set b2='TA4YTJGKOQN6CIQA49X9FFUY8IXC' where id=5; -update noar tt set v0='D7CFZ3PP9S8MURGG' where id=6; -update noar ti set v0='D7CFZ3PP9S8MURGG' where id=6; -update noar tt set b0='FY' where id=6; -update noar ti set b0='FY' where id=6; -update noar tt set v0='3X' where id=6; -update noar ti set v0='3X' where id=6; -update noar tt set b1='EX7K7L9Q4LNLT944LDWDWAGCD' where id=6; -update noar ti set b1='EX7K7L9Q4LNLT944LDWDWAGCD' where id=6; -update noar tt set v0='DLFF2' where id=6; -update noar ti set v0='DLFF2' where id=6; -update noar tt set b2='PKMDA5WKSBGGD4CUVVOSVM9JRAOW4BXY' where id=6; -update noar ti set b2='PKMDA5WKSBGGD4CUVVOSVM9JRAOW4BXY' where id=6; -update noar tt set v0='3YDOUK5PQEKI' where id=7; -update noar ti set v0='3YDOUK5PQEKI' where id=7; -update noar tt set b0='F81H5' where id=7; -update noar ti set b0='F81H5' where id=7; -update noar tt set v0='HQH2IT47QD504WDSK' where id=7; -update noar ti set v0='HQH2IT47QD504WDSK' where id=7; -update noar tt set b1='N21JBYFT2IXHNRTJP' where id=7; -update noar ti set b1='N21JBYFT2IXHNRTJP' where id=7; -update noar tt set v0='E45RH1HPDH' where id=7; -update noar ti set v0='E45RH1HPDH' where id=7; -update noar tt set b2='QC51ET4L8' where id=7; -update noar ti set b2='QC51ET4L8' where id=7; -update noar tt set v0='AE9697VORYRR' where id=8; -update noar ti set v0='AE9697VORYRR' where id=8; -update noar tt set b0='6W3B5EMV845MUC' where id=8; -update noar ti set b0='6W3B5EMV845MUC' where id=8; -update noar tt set v0='39LIRV' where id=8; -update noar ti set v0='39LIRV' where id=8; -update noar tt set b1='F2TGHWC9IUTHIL' where id=8; -update noar ti set b1='F2TGHWC9IUTHIL' where id=8; -update noar tt set v0='1OR38' where id=8; -update noar ti set v0='1OR38' where id=8; -update noar tt set b2='7926KICTICTAQ' where id=8; -update noar ti set b2='7926KICTICTAQ' where id=8; -update noar tt set v0='0TF27LTHCH' where id=9; -update noar ti set v0='0TF27LTHCH' where id=9; -update noar tt set b0='0YT1FR6DG1PN' where id=9; -update noar ti set b0='0YT1FR6DG1PN' where id=9; -update noar tt set v0='VFUBV8HGHYSZL' where id=9; -update noar ti set v0='VFUBV8HGHYSZL' where id=9; -update noar tt set b1='UJG27D3FH66WZ4GKUEOJ11Y428IFEA' where id=9; -update noar ti set b1='UJG27D3FH66WZ4GKUEOJ11Y428IFEA' where id=9; -update noar tt set v0='TXSHQ3DV30YXDF' where id=9; -update noar ti set v0='TXSHQ3DV30YXDF' where id=9; -update noar tt set b2='YORRUYO6JI5ZF4UG' where id=9; -update noar ti set b2='YORRUYO6JI5ZF4UG' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 mediumblob not null, - b1 blob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='19' where id=1; -update noar ti set v0='19' where id=1; -update noar tt set b0='C2QZ683CFXPUROG1HQHO' where id=1; -update noar ti set b0='C2QZ683CFXPUROG1HQHO' where id=1; -update noar tt set v0='KN' where id=1; -update noar ti set v0='KN' where id=1; -update noar tt set b1='8VGPX' where id=1; -update noar ti set b1='8VGPX' where id=1; -update noar tt set v0='43N1QXPY' where id=1; -update noar ti set v0='43N1QXPY' where id=1; -update noar tt set b2='3YIFUB1YGDBS0UA80A3RIC' where id=1; -update noar ti set b2='3YIFUB1YGDBS0UA80A3RIC' where id=1; -update noar tt set v0='R4GK5749SGL8EGKKR4WVB0IL2OBCIN' where id=2; -update noar ti set v0='R4GK5749SGL8EGKKR4WVB0IL2OBCIN' where id=2; -update noar tt set b0='S8LGZE3' where id=2; -update noar ti set b0='S8LGZE3' where id=2; -update noar tt set v0='2JS1K263R0N6HHBDG1Q7T8FHDLL8OG4H' where id=2; -update noar ti set v0='2JS1K263R0N6HHBDG1Q7T8FHDLL8OG4H' where id=2; -update noar tt set b1='59BU1KWHY510' where id=2; -update noar ti set b1='59BU1KWHY510' where id=2; -update noar tt set v0='QMMAY4Q8T5LGSJKYGQ48IY' where id=2; -update noar ti set v0='QMMAY4Q8T5LGSJKYGQ48IY' where id=2; -update noar tt set b2='IZU3RP3LEMKU0CI0ABR4XTI' where id=2; -update noar ti set b2='IZU3RP3LEMKU0CI0ABR4XTI' where id=2; -update noar tt set v0='5PAE9QOX5X7SZ3CA1M' where id=3; -update noar ti set v0='5PAE9QOX5X7SZ3CA1M' where id=3; -update noar tt set b0='YHNAYVGCR3F8Z3CY821SP05ZJHL25QRR' where id=3; -update noar ti set b0='YHNAYVGCR3F8Z3CY821SP05ZJHL25QRR' where id=3; -update noar tt set v0='PW45QZ84VAOEB5' where id=3; -update noar ti set v0='PW45QZ84VAOEB5' where id=3; -update noar tt set b1='E4RQJFBYQ3VFBKUDRCFZBP7FK0IB8SYD' where id=3; -update noar ti set b1='E4RQJFBYQ3VFBKUDRCFZBP7FK0IB8SYD' where id=3; -update noar tt set v0='87ZN2J1T' where id=3; -update noar ti set v0='87ZN2J1T' where id=3; -update noar tt set b2='SCOUDZA80CUGIJQW49XANU3' where id=3; -update noar ti set b2='SCOUDZA80CUGIJQW49XANU3' where id=3; -update noar tt set v0='FUQNGO75RVANVB3O' where id=4; -update noar ti set v0='FUQNGO75RVANVB3O' where id=4; -update noar tt set b0='T4QKEBFD0OS8BFA53K9X6EOPH7B82' where id=4; -update noar ti set b0='T4QKEBFD0OS8BFA53K9X6EOPH7B82' where id=4; -update noar tt set v0='JF6X1U2MR6C6LZ3EP569W0OC21YHA19M' where id=4; -update noar ti set v0='JF6X1U2MR6C6LZ3EP569W0OC21YHA19M' where id=4; -update noar tt set b1='1EJVK328XZ7EAIL4X' where id=4; -update noar ti set b1='1EJVK328XZ7EAIL4X' where id=4; -update noar tt set v0='N4818DGUKV1C3GJC897KQ' where id=4; -update noar ti set v0='N4818DGUKV1C3GJC897KQ' where id=4; -update noar tt set b2='LJR2YPSN' where id=4; -update noar ti set b2='LJR2YPSN' where id=4; -update noar tt set v0='CL0LEIE' where id=5; -update noar ti set v0='CL0LEIE' where id=5; -update noar tt set b0='9G34WG2V70UNP3YBKHA6I8' where id=5; -update noar ti set b0='9G34WG2V70UNP3YBKHA6I8' where id=5; -update noar tt set v0='OWJ20FBL9PX4ZFPEN60EN3MDS2NXCR1' where id=5; -update noar ti set v0='OWJ20FBL9PX4ZFPEN60EN3MDS2NXCR1' where id=5; -update noar tt set b1='MF7DUEU0' where id=5; -update noar ti set b1='MF7DUEU0' where id=5; -update noar tt set v0='VV1UTXQYHZ7R635465K9' where id=5; -update noar ti set v0='VV1UTXQYHZ7R635465K9' where id=5; -update noar tt set b2='O1D35TXQ5YNEAJ7M5ITY3' where id=5; -update noar ti set b2='O1D35TXQ5YNEAJ7M5ITY3' where id=5; -update noar tt set v0='X62KI1TYN' where id=6; -update noar ti set v0='X62KI1TYN' where id=6; -update noar tt set b0='Y1OWRRGO' where id=6; -update noar ti set b0='Y1OWRRGO' where id=6; -update noar tt set v0='W1JJ8LPN0' where id=6; -update noar ti set v0='W1JJ8LPN0' where id=6; -update noar tt set b1='7VHUJINYF0ZARR5E' where id=6; -update noar ti set b1='7VHUJINYF0ZARR5E' where id=6; -update noar tt set v0='J9GI8U4EKMSGF4L' where id=6; -update noar ti set v0='J9GI8U4EKMSGF4L' where id=6; -update noar tt set b2='VMH9TY2NQXWO1LBXP8SWFEG3868KG8CM' where id=6; -update noar ti set b2='VMH9TY2NQXWO1LBXP8SWFEG3868KG8CM' where id=6; -update noar tt set v0='CS5A452FYDFMFIAOGOS4G0VW7L' where id=7; -update noar ti set v0='CS5A452FYDFMFIAOGOS4G0VW7L' where id=7; -update noar tt set b0='QXR' where id=7; -update noar ti set b0='QXR' where id=7; -update noar tt set v0='6WM2FXV9DGRO3A' where id=7; -update noar ti set v0='6WM2FXV9DGRO3A' where id=7; -update noar tt set b1='HVPB41MWF' where id=7; -update noar ti set b1='HVPB41MWF' where id=7; -update noar tt set v0='243B0JW6WZRN26AZXR9098' where id=7; -update noar ti set v0='243B0JW6WZRN26AZXR9098' where id=7; -update noar tt set b2='7MKD' where id=7; -update noar ti set b2='7MKD' where id=7; -update noar tt set v0='P1TZ2G52FG34K547' where id=8; -update noar ti set v0='P1TZ2G52FG34K547' where id=8; -update noar tt set b0='DBG8' where id=8; -update noar ti set b0='DBG8' where id=8; -update noar tt set v0='Q0DFEXW' where id=8; -update noar ti set v0='Q0DFEXW' where id=8; -update noar tt set b1='C2HVBOF2A6MH0L' where id=8; -update noar ti set b1='C2HVBOF2A6MH0L' where id=8; -update noar tt set v0='3B0P9WFYCQ57NH6' where id=8; -update noar ti set v0='3B0P9WFYCQ57NH6' where id=8; -update noar tt set b2='IDQW9R06L368O7QJW' where id=8; -update noar ti set b2='IDQW9R06L368O7QJW' where id=8; -update noar tt set v0='YCPUVZ' where id=9; -update noar ti set v0='YCPUVZ' where id=9; -update noar tt set b0='VXGIJN' where id=9; -update noar ti set b0='VXGIJN' where id=9; -update noar tt set v0='OFOIIUFRFWDYUEFB' where id=9; -update noar ti set v0='OFOIIUFRFWDYUEFB' where id=9; -update noar tt set b1='DC' where id=9; -update noar ti set b1='DC' where id=9; -update noar tt set v0='DS4EPIKJY' where id=9; -update noar ti set v0='DS4EPIKJY' where id=9; -update noar tt set b2='77VW8EHRDHSV3T1U' where id=9; -update noar ti set b2='77VW8EHRDHSV3T1U' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 mediumblob null, - b1 mediumblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='ESKE40X' where id=1; -update noar ti set v0='ESKE40X' where id=1; -update noar tt set b0='LLL5KKO' where id=1; -update noar ti set b0='LLL5KKO' where id=1; -update noar tt set v0='5PWJCKBL8O4B4O' where id=1; -update noar ti set v0='5PWJCKBL8O4B4O' where id=1; -update noar tt set b1='19' where id=1; -update noar ti set b1='19' where id=1; -update noar tt set v0='IUSFETJGMVYF6FVZ03ALH3PLGL' where id=1; -update noar ti set v0='IUSFETJGMVYF6FVZ03ALH3PLGL' where id=1; -update noar tt set b2='XEU' where id=1; -update noar ti set b2='XEU' where id=1; -update noar tt set v0='RO0O0' where id=2; -update noar ti set v0='RO0O0' where id=2; -update noar tt set b0='9ES5HYCR01U' where id=2; -update noar ti set b0='9ES5HYCR01U' where id=2; -update noar tt set v0='NKK0OM1TUHIGX6V8WQV' where id=2; -update noar ti set v0='NKK0OM1TUHIGX6V8WQV' where id=2; -update noar tt set b1='TH295DA2' where id=2; -update noar ti set b1='TH295DA2' where id=2; -update noar tt set v0='ONQU5XO899' where id=2; -update noar ti set v0='ONQU5XO899' where id=2; -update noar tt set b2='AL6ND8KTPBV5DNX2VRH33PGXBYQ5' where id=2; -update noar ti set b2='AL6ND8KTPBV5DNX2VRH33PGXBYQ5' where id=2; -update noar tt set v0='ZP6IMUG9O8ETCYHF' where id=3; -update noar ti set v0='ZP6IMUG9O8ETCYHF' where id=3; -update noar tt set b0='KJF0NBSI1PWNPQJ7KXCBZ' where id=3; -update noar ti set b0='KJF0NBSI1PWNPQJ7KXCBZ' where id=3; -update noar tt set v0='9MWLLSUW9APVY28Z6RFFU90ZMUSJ07LA' where id=3; -update noar ti set v0='9MWLLSUW9APVY28Z6RFFU90ZMUSJ07LA' where id=3; -update noar tt set b1='9S66I8RUJVCFYJ5HF6' where id=3; -update noar ti set b1='9S66I8RUJVCFYJ5HF6' where id=3; -update noar tt set v0='J6C4S5CCT1E' where id=3; -update noar ti set v0='J6C4S5CCT1E' where id=3; -update noar tt set b2='MFE4' where id=3; -update noar ti set b2='MFE4' where id=3; -update noar tt set v0='5V443W5VTD30GM3FRHYFW9Y6J4W' where id=4; -update noar ti set v0='5V443W5VTD30GM3FRHYFW9Y6J4W' where id=4; -update noar tt set b0='NLZT' where id=4; -update noar ti set b0='NLZT' where id=4; -update noar tt set v0='7GB2EIF4B4JH' where id=4; -update noar ti set v0='7GB2EIF4B4JH' where id=4; -update noar tt set b1='PUMUSF2SWC42IOGXIAU2YUSHXCYOMNXA' where id=4; -update noar ti set b1='PUMUSF2SWC42IOGXIAU2YUSHXCYOMNXA' where id=4; -update noar tt set v0='UZNEZEI2NUG80TWC8BX8O9HKX2GV6' where id=4; -update noar ti set v0='UZNEZEI2NUG80TWC8BX8O9HKX2GV6' where id=4; -update noar tt set b2='Y3' where id=4; -update noar ti set b2='Y3' where id=4; -update noar tt set v0='A00815CH3Y910MNCCUUCQV0F' where id=5; -update noar ti set v0='A00815CH3Y910MNCCUUCQV0F' where id=5; -update noar tt set b0='RXLW11CYWPLA8427ONFI8P6VKAQLTH' where id=5; -update noar ti set b0='RXLW11CYWPLA8427ONFI8P6VKAQLTH' where id=5; -update noar tt set v0='HG8P5MPBS43XHN1CKX2I5ZJUJO6S5' where id=5; -update noar ti set v0='HG8P5MPBS43XHN1CKX2I5ZJUJO6S5' where id=5; -update noar tt set b1='SDGTLX7B30P9O9' where id=5; -update noar ti set b1='SDGTLX7B30P9O9' where id=5; -update noar tt set v0='56' where id=5; -update noar ti set v0='56' where id=5; -update noar tt set b2='3XNWJHNFOO8SO62ADV1FOWBI7' where id=5; -update noar ti set b2='3XNWJHNFOO8SO62ADV1FOWBI7' where id=5; -update noar tt set v0='AU6Q71SSJEUXWE4V3G0LE7VC1' where id=6; -update noar ti set v0='AU6Q71SSJEUXWE4V3G0LE7VC1' where id=6; -update noar tt set b0='8Q6ONZ6H0KH9ST43SI67D' where id=6; -update noar ti set b0='8Q6ONZ6H0KH9ST43SI67D' where id=6; -update noar tt set v0='AR0RLNHG1JO8C' where id=6; -update noar ti set v0='AR0RLNHG1JO8C' where id=6; -update noar tt set b1='PP1J57S6U4BF802Q5P' where id=6; -update noar ti set b1='PP1J57S6U4BF802Q5P' where id=6; -update noar tt set v0='8DIMOP94VVPA94O0RP9IMPBZBSAIU' where id=6; -update noar ti set v0='8DIMOP94VVPA94O0RP9IMPBZBSAIU' where id=6; -update noar tt set b2='XWDI1QSDHZPRDMKGEDUW' where id=6; -update noar ti set b2='XWDI1QSDHZPRDMKGEDUW' where id=6; -update noar tt set v0='EUK0USOF' where id=7; -update noar ti set v0='EUK0USOF' where id=7; -update noar tt set b0='9QR' where id=7; -update noar ti set b0='9QR' where id=7; -update noar tt set v0='ZG3FD2CP2' where id=7; -update noar ti set v0='ZG3FD2CP2' where id=7; -update noar tt set b1='YAB57LLKACRGZB4IVBMN' where id=7; -update noar ti set b1='YAB57LLKACRGZB4IVBMN' where id=7; -update noar tt set v0='K' where id=7; -update noar ti set v0='K' where id=7; -update noar tt set b2='OUL95Y0L3M6GYB0X9PQJP0H9W7UKV3N7' where id=7; -update noar ti set b2='OUL95Y0L3M6GYB0X9PQJP0H9W7UKV3N7' where id=7; -update noar tt set v0='OMQ80INY4OJ3SQSZ2CIMQQ3QPF' where id=8; -update noar ti set v0='OMQ80INY4OJ3SQSZ2CIMQQ3QPF' where id=8; -update noar tt set b0='ZVYO5D1MO07M7AOA3BD9ITTT8XEJ0L' where id=8; -update noar ti set b0='ZVYO5D1MO07M7AOA3BD9ITTT8XEJ0L' where id=8; -update noar tt set v0='I8KNYVW2GHYAV5A98TYPJQOFEZ' where id=8; -update noar ti set v0='I8KNYVW2GHYAV5A98TYPJQOFEZ' where id=8; -update noar tt set b1='FM5JJOVOFGA9U99F' where id=8; -update noar ti set b1='FM5JJOVOFGA9U99F' where id=8; -update noar tt set v0='33W4ZF6ASNEQLBCUHIUF4IZVOQ7' where id=8; -update noar ti set v0='33W4ZF6ASNEQLBCUHIUF4IZVOQ7' where id=8; -update noar tt set b2='RLHE' where id=8; -update noar ti set b2='RLHE' where id=8; -update noar tt set v0='4IS1CL3X8VV0P5FMYOX' where id=9; -update noar ti set v0='4IS1CL3X8VV0P5FMYOX' where id=9; -update noar tt set b0='WW5QRRMSILFKFFSFK7QU' where id=9; -update noar ti set b0='WW5QRRMSILFKFFSFK7QU' where id=9; -update noar tt set v0='DTXVN59DWGE29BA30UNZQPY' where id=9; -update noar ti set v0='DTXVN59DWGE29BA30UNZQPY' where id=9; -update noar tt set b1='PKZ' where id=9; -update noar ti set b1='PKZ' where id=9; -update noar tt set v0='IQKLV9W1770IRK41OODGO7' where id=9; -update noar ti set v0='IQKLV9W1770IRK41OODGO7' where id=9; -update noar tt set b2='1IOAPH' where id=9; -update noar ti set b2='1IOAPH' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 mediumblob null, - b1 mediumblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='R5OOV9SGLR1AWETR5BAV8NPO' where id=1; -update noar ti set v0='R5OOV9SGLR1AWETR5BAV8NPO' where id=1; -update noar tt set b0='LU7ECFMBSHRIZT8LAOHM8QY5N33ACAV3' where id=1; -update noar ti set b0='LU7ECFMBSHRIZT8LAOHM8QY5N33ACAV3' where id=1; -update noar tt set v0='QVCDH85UHQT5Z' where id=1; -update noar ti set v0='QVCDH85UHQT5Z' where id=1; -update noar tt set b1='HKAXEDOYT3230XGCX' where id=1; -update noar ti set b1='HKAXEDOYT3230XGCX' where id=1; -update noar tt set v0='NMUU9X1OPO6N8GK' where id=1; -update noar ti set v0='NMUU9X1OPO6N8GK' where id=1; -update noar tt set b2='SMUJFLJRTD1X2DLI' where id=1; -update noar ti set b2='SMUJFLJRTD1X2DLI' where id=1; -update noar tt set v0='LFKBOTAR7N8ER7SOPDU2PQKBTG' where id=2; -update noar ti set v0='LFKBOTAR7N8ER7SOPDU2PQKBTG' where id=2; -update noar tt set b0='3AWBQ8H1TGPXMRLHULZ4WM6M7UH' where id=2; -update noar ti set b0='3AWBQ8H1TGPXMRLHULZ4WM6M7UH' where id=2; -update noar tt set v0='22Z1XQGFVHN9TGWDYBI2QIRLYD' where id=2; -update noar ti set v0='22Z1XQGFVHN9TGWDYBI2QIRLYD' where id=2; -update noar tt set b1='AYUEUYMG61QXM8OFPV93VQ8X7K1R8SG9' where id=2; -update noar ti set b1='AYUEUYMG61QXM8OFPV93VQ8X7K1R8SG9' where id=2; -update noar tt set v0='RIJQ6NJ9ND92GK9706UWQXO6KR28Z' where id=2; -update noar ti set v0='RIJQ6NJ9ND92GK9706UWQXO6KR28Z' where id=2; -update noar tt set b2='AGYT2G3WKY57GNYLTUY5GEO' where id=2; -update noar ti set b2='AGYT2G3WKY57GNYLTUY5GEO' where id=2; -update noar tt set v0='4XO5SHLRX4SKLQE6QWP25' where id=3; -update noar ti set v0='4XO5SHLRX4SKLQE6QWP25' where id=3; -update noar tt set b0='MLHD5WMHHC5C00I773S6T' where id=3; -update noar ti set b0='MLHD5WMHHC5C00I773S6T' where id=3; -update noar tt set v0='V6NHRADFXUEYD4TZKJ007KCLAXNV' where id=3; -update noar ti set v0='V6NHRADFXUEYD4TZKJ007KCLAXNV' where id=3; -update noar tt set b1='RTK25YQ' where id=3; -update noar ti set b1='RTK25YQ' where id=3; -update noar tt set v0='F0E2YH8UPCTUVXAWIS0KQPH2TQ1TBHQG' where id=3; -update noar ti set v0='F0E2YH8UPCTUVXAWIS0KQPH2TQ1TBHQG' where id=3; -update noar tt set b2='CJHOIK0CMM1FIEF' where id=3; -update noar ti set b2='CJHOIK0CMM1FIEF' where id=3; -update noar tt set v0='0D39IMT' where id=4; -update noar ti set v0='0D39IMT' where id=4; -update noar tt set b0='7' where id=4; -update noar ti set b0='7' where id=4; -update noar tt set v0='GVQAIDZM17' where id=4; -update noar ti set v0='GVQAIDZM17' where id=4; -update noar tt set b1='9VZ' where id=4; -update noar ti set b1='9VZ' where id=4; -update noar tt set v0='KDISCFUM8SFYGSOXGOCLUGE5KUU5M' where id=4; -update noar ti set v0='KDISCFUM8SFYGSOXGOCLUGE5KUU5M' where id=4; -update noar tt set b2='2WPGSZ8H' where id=4; -update noar ti set b2='2WPGSZ8H' where id=4; -update noar tt set v0='YL7JUB36EY9WQDV4TEX' where id=5; -update noar ti set v0='YL7JUB36EY9WQDV4TEX' where id=5; -update noar tt set b0='SSQLFF9SG2SW64LORD' where id=5; -update noar ti set b0='SSQLFF9SG2SW64LORD' where id=5; -update noar tt set v0='MUTZ8G36YNJE5P1WFN' where id=5; -update noar ti set v0='MUTZ8G36YNJE5P1WFN' where id=5; -update noar tt set b1='Q26FJSQ1VV44S4KEAN5K7L55' where id=5; -update noar ti set b1='Q26FJSQ1VV44S4KEAN5K7L55' where id=5; -update noar tt set v0='NWBF' where id=5; -update noar ti set v0='NWBF' where id=5; -update noar tt set b2='UMVXDA4NCSHAHL' where id=5; -update noar ti set b2='UMVXDA4NCSHAHL' where id=5; -update noar tt set v0='XMMQQ5LMFJPJPHKLUQHYNK' where id=6; -update noar ti set v0='XMMQQ5LMFJPJPHKLUQHYNK' where id=6; -update noar tt set b0='X' where id=6; -update noar ti set b0='X' where id=6; -update noar tt set v0='X03YJP' where id=6; -update noar ti set v0='X03YJP' where id=6; -update noar tt set b1='6MQIRL7LC6' where id=6; -update noar ti set b1='6MQIRL7LC6' where id=6; -update noar tt set v0='PU3HBPFOQL7PEOF99A' where id=6; -update noar ti set v0='PU3HBPFOQL7PEOF99A' where id=6; -update noar tt set b2='KY1OZ5KY' where id=6; -update noar ti set b2='KY1OZ5KY' where id=6; -update noar tt set v0='0XGOCI' where id=7; -update noar ti set v0='0XGOCI' where id=7; -update noar tt set b0='XQY14CT806U0EURARMI9' where id=7; -update noar ti set b0='XQY14CT806U0EURARMI9' where id=7; -update noar tt set v0='O25HUZUAZ6DRAEVLD8NTKXNA' where id=7; -update noar ti set v0='O25HUZUAZ6DRAEVLD8NTKXNA' where id=7; -update noar tt set b1='6VXD2S' where id=7; -update noar ti set b1='6VXD2S' where id=7; -update noar tt set v0='OS4XBYT94QEI4' where id=7; -update noar ti set v0='OS4XBYT94QEI4' where id=7; -update noar tt set b2='Z5UPUBDKF346LK4ODQMCHRLO' where id=7; -update noar ti set b2='Z5UPUBDKF346LK4ODQMCHRLO' where id=7; -update noar tt set v0='WYFF' where id=8; -update noar ti set v0='WYFF' where id=8; -update noar tt set b0='ER3JCL' where id=8; -update noar ti set b0='ER3JCL' where id=8; -update noar tt set v0='QP9UF9ZYCW' where id=8; -update noar ti set v0='QP9UF9ZYCW' where id=8; -update noar tt set b1='35SHDMR0KJPLZB736KC8L6AIZKU47EQ' where id=8; -update noar ti set b1='35SHDMR0KJPLZB736KC8L6AIZKU47EQ' where id=8; -update noar tt set v0='MTP6S' where id=8; -update noar ti set v0='MTP6S' where id=8; -update noar tt set b2='QZH08N732PWIZ09VGVGUS2RPY0VM' where id=8; -update noar ti set b2='QZH08N732PWIZ09VGVGUS2RPY0VM' where id=8; -update noar tt set v0='TV4JLNGWK9' where id=9; -update noar ti set v0='TV4JLNGWK9' where id=9; -update noar tt set b0='8DIOV4U36NOT' where id=9; -update noar ti set b0='8DIOV4U36NOT' where id=9; -update noar tt set v0='CYZ0ISDFX4YLMN3I65GCBO6T1PEW7XAR' where id=9; -update noar ti set v0='CYZ0ISDFX4YLMN3I65GCBO6T1PEW7XAR' where id=9; -update noar tt set b1='6AJAF5LQSLR9IWWKZOX' where id=9; -update noar ti set b1='6AJAF5LQSLR9IWWKZOX' where id=9; -update noar tt set v0='T2KBMGGWH8X3UTW7DAD9HG3XXT' where id=9; -update noar ti set v0='T2KBMGGWH8X3UTW7DAD9HG3XXT' where id=9; -update noar tt set b2='QRPN03UJXMA4CYD6VBIYXD3VOND' where id=9; -update noar ti set b2='QRPN03UJXMA4CYD6VBIYXD3VOND' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 mediumblob not null, - b1 mediumblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='GDSS1UEFQ8ZLH293SNN0KARC' where id=1; -update noar ti set v0='GDSS1UEFQ8ZLH293SNN0KARC' where id=1; -update noar tt set b0='Y0' where id=1; -update noar ti set b0='Y0' where id=1; -update noar tt set v0='QX9IYANLE' where id=1; -update noar ti set v0='QX9IYANLE' where id=1; -update noar tt set b1='7F9MGHG3T5JOY2O092IWR2JT' where id=1; -update noar ti set b1='7F9MGHG3T5JOY2O092IWR2JT' where id=1; -update noar tt set v0='M2VO91HQKJRHKUEWTR86T5YVN5HDN' where id=1; -update noar ti set v0='M2VO91HQKJRHKUEWTR86T5YVN5HDN' where id=1; -update noar tt set b2='0X1HMJ44PFOW' where id=1; -update noar ti set b2='0X1HMJ44PFOW' where id=1; -update noar tt set v0='SOJREY9' where id=2; -update noar ti set v0='SOJREY9' where id=2; -update noar tt set b0='CQ8WIDML7ML4NZ38UN' where id=2; -update noar ti set b0='CQ8WIDML7ML4NZ38UN' where id=2; -update noar tt set v0='UX56CCRGQ442YJ83BKU5EDJS' where id=2; -update noar ti set v0='UX56CCRGQ442YJ83BKU5EDJS' where id=2; -update noar tt set b1='1N2IP9P0CA955SB61MU4N' where id=2; -update noar ti set b1='1N2IP9P0CA955SB61MU4N' where id=2; -update noar tt set v0='8KNVTMZX22RTR' where id=2; -update noar ti set v0='8KNVTMZX22RTR' where id=2; -update noar tt set b2='YC5H8S8A4NX31P81Z5PCOYE51FYOL9I3' where id=2; -update noar ti set b2='YC5H8S8A4NX31P81Z5PCOYE51FYOL9I3' where id=2; -update noar tt set v0='9OTFK7B6S5PQ7TJR887RZXPVZ' where id=3; -update noar ti set v0='9OTFK7B6S5PQ7TJR887RZXPVZ' where id=3; -update noar tt set b0='GOIEBK4Y9IN3ZM4XW2ROS' where id=3; -update noar ti set b0='GOIEBK4Y9IN3ZM4XW2ROS' where id=3; -update noar tt set v0='KU8' where id=3; -update noar ti set v0='KU8' where id=3; -update noar tt set b1='NZ3C2VS90BUHU48XB5PFT0' where id=3; -update noar ti set b1='NZ3C2VS90BUHU48XB5PFT0' where id=3; -update noar tt set v0='YE16YNZUDH0' where id=3; -update noar ti set v0='YE16YNZUDH0' where id=3; -update noar tt set b2='HLL18OFQ88I7YQ4BZ4PL6DI' where id=3; -update noar ti set b2='HLL18OFQ88I7YQ4BZ4PL6DI' where id=3; -update noar tt set v0='XNSSCA66VJEU0EH0ZDD' where id=4; -update noar ti set v0='XNSSCA66VJEU0EH0ZDD' where id=4; -update noar tt set b0='4W1FJ99CUUKD5YDNI0E4RQRDA1VQC' where id=4; -update noar ti set b0='4W1FJ99CUUKD5YDNI0E4RQRDA1VQC' where id=4; -update noar tt set v0='EOUD4EC36Z65H5WT0MSPV1X4HL9' where id=4; -update noar ti set v0='EOUD4EC36Z65H5WT0MSPV1X4HL9' where id=4; -update noar tt set b1='JKDW8KJF5USOTIQMBZGQPO2EB4' where id=4; -update noar ti set b1='JKDW8KJF5USOTIQMBZGQPO2EB4' where id=4; -update noar tt set v0='WMSC4ZDKQVXFONMD1J' where id=4; -update noar ti set v0='WMSC4ZDKQVXFONMD1J' where id=4; -update noar tt set b2='5FX9USFRQX7XTLTD4LIB' where id=4; -update noar ti set b2='5FX9USFRQX7XTLTD4LIB' where id=4; -update noar tt set v0='3S59D9H0TAKVYZSLD927V' where id=5; -update noar ti set v0='3S59D9H0TAKVYZSLD927V' where id=5; -update noar tt set b0='237XV' where id=5; -update noar ti set b0='237XV' where id=5; -update noar tt set v0='EJYBRW8' where id=5; -update noar ti set v0='EJYBRW8' where id=5; -update noar tt set b1='TNZOOMW' where id=5; -update noar ti set b1='TNZOOMW' where id=5; -update noar tt set v0='AYJYPLAPKMZCP7GG' where id=5; -update noar ti set v0='AYJYPLAPKMZCP7GG' where id=5; -update noar tt set b2='8Q48YQYNI9B3DAKO6BXWULR94Q0AN' where id=5; -update noar ti set b2='8Q48YQYNI9B3DAKO6BXWULR94Q0AN' where id=5; -update noar tt set v0='N2YAP9Q' where id=6; -update noar ti set v0='N2YAP9Q' where id=6; -update noar tt set b0='Q95' where id=6; -update noar ti set b0='Q95' where id=6; -update noar tt set v0='P31LOYKZBP69829DCM6C4' where id=6; -update noar ti set v0='P31LOYKZBP69829DCM6C4' where id=6; -update noar tt set b1='WBA40XN0HKVS' where id=6; -update noar ti set b1='WBA40XN0HKVS' where id=6; -update noar tt set v0='278E194SJC78BHPYY968SP' where id=6; -update noar ti set v0='278E194SJC78BHPYY968SP' where id=6; -update noar tt set b2='3047CLE3XNL89JN9HI4S' where id=6; -update noar ti set b2='3047CLE3XNL89JN9HI4S' where id=6; -update noar tt set v0='FWU5YS2GMEEUR8WN96L' where id=7; -update noar ti set v0='FWU5YS2GMEEUR8WN96L' where id=7; -update noar tt set b0='Y500RXT09RUE8YXD93LNEV0N4Y8OQ' where id=7; -update noar ti set b0='Y500RXT09RUE8YXD93LNEV0N4Y8OQ' where id=7; -update noar tt set v0='8T93W47KBBQLC35IGE' where id=7; -update noar ti set v0='8T93W47KBBQLC35IGE' where id=7; -update noar tt set b1='LGXYSMX0JKHPMBC4GQNWCP' where id=7; -update noar ti set b1='LGXYSMX0JKHPMBC4GQNWCP' where id=7; -update noar tt set v0='ZYOZN9B11ZTS5TGPBS6KDVSI166RFSXO' where id=7; -update noar ti set v0='ZYOZN9B11ZTS5TGPBS6KDVSI166RFSXO' where id=7; -update noar tt set b2='KQ' where id=7; -update noar ti set b2='KQ' where id=7; -update noar tt set v0='P' where id=8; -update noar ti set v0='P' where id=8; -update noar tt set b0='3H1' where id=8; -update noar ti set b0='3H1' where id=8; -update noar tt set v0='E0PCQYO6H89VCG2EVHB60JY3LB' where id=8; -update noar ti set v0='E0PCQYO6H89VCG2EVHB60JY3LB' where id=8; -update noar tt set b1='A2MUO51MBHR25C6V' where id=8; -update noar ti set b1='A2MUO51MBHR25C6V' where id=8; -update noar tt set v0='OYIJU3PUQ7E1D0QJKDZ1YIA8O29G690W' where id=8; -update noar ti set v0='OYIJU3PUQ7E1D0QJKDZ1YIA8O29G690W' where id=8; -update noar tt set b2='6' where id=8; -update noar ti set b2='6' where id=8; -update noar tt set v0='JHUT7E5KSL7S9T9F57UXG' where id=9; -update noar ti set v0='JHUT7E5KSL7S9T9F57UXG' where id=9; -update noar tt set b0='PMPAZVSIAZ8SJB3HLPVQXF' where id=9; -update noar ti set b0='PMPAZVSIAZ8SJB3HLPVQXF' where id=9; -update noar tt set v0='NZO9P' where id=9; -update noar ti set v0='NZO9P' where id=9; -update noar tt set b1='UGINMSFFT1OE84O2SFHZ1B66OOR1Y' where id=9; -update noar ti set b1='UGINMSFFT1OE84O2SFHZ1B66OOR1Y' where id=9; -update noar tt set v0='N6TAZF3GWWRS0YEZ' where id=9; -update noar ti set v0='N6TAZF3GWWRS0YEZ' where id=9; -update noar tt set b2='QKW2ZW3XKZ' where id=9; -update noar ti set b2='QKW2ZW3XKZ' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 mediumblob not null, - b1 mediumblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='8085H3WKGE3ZSZ80KVBZB82J' where id=1; -update noar ti set v0='8085H3WKGE3ZSZ80KVBZB82J' where id=1; -update noar tt set b0='4M9AQLQITJTM3D02HCSS' where id=1; -update noar ti set b0='4M9AQLQITJTM3D02HCSS' where id=1; -update noar tt set v0='9NZPL44HOVCBHMNK6FH3JX' where id=1; -update noar ti set v0='9NZPL44HOVCBHMNK6FH3JX' where id=1; -update noar tt set b1='CG15I442' where id=1; -update noar ti set b1='CG15I442' where id=1; -update noar tt set v0='RHKTSYDBV05L' where id=1; -update noar ti set v0='RHKTSYDBV05L' where id=1; -update noar tt set b2='HA4ARL2GWP9E' where id=1; -update noar ti set b2='HA4ARL2GWP9E' where id=1; -update noar tt set v0='U7470ME9RH3' where id=2; -update noar ti set v0='U7470ME9RH3' where id=2; -update noar tt set b0='7COSTURH6IZFAI6TLASAJBXUND' where id=2; -update noar ti set b0='7COSTURH6IZFAI6TLASAJBXUND' where id=2; -update noar tt set v0='X8D64HF61R6ANMTFSGMHANEP' where id=2; -update noar ti set v0='X8D64HF61R6ANMTFSGMHANEP' where id=2; -update noar tt set b1='PCKYFQK9QJKFKLODURDINF' where id=2; -update noar ti set b1='PCKYFQK9QJKFKLODURDINF' where id=2; -update noar tt set v0='S7UDILAPODSR98KN8' where id=2; -update noar ti set v0='S7UDILAPODSR98KN8' where id=2; -update noar tt set b2='67V6Q94R' where id=2; -update noar ti set b2='67V6Q94R' where id=2; -update noar tt set v0='X' where id=3; -update noar ti set v0='X' where id=3; -update noar tt set b0='JO3O33' where id=3; -update noar ti set b0='JO3O33' where id=3; -update noar tt set v0='WKLXFGEM630S0FR9REQSGQ' where id=3; -update noar ti set v0='WKLXFGEM630S0FR9REQSGQ' where id=3; -update noar tt set b1='ZJX3S8HRZN69U' where id=3; -update noar ti set b1='ZJX3S8HRZN69U' where id=3; -update noar tt set v0='JW1WRP9S3FSAAS9Q06LBN7' where id=3; -update noar ti set v0='JW1WRP9S3FSAAS9Q06LBN7' where id=3; -update noar tt set b2='414NXGALJ3KK43W62CFBJBQ6P47YR5M' where id=3; -update noar ti set b2='414NXGALJ3KK43W62CFBJBQ6P47YR5M' where id=3; -update noar tt set v0='QEUQ9L0EI0UZNA6KVE824MXRXBWK8ZUN' where id=4; -update noar ti set v0='QEUQ9L0EI0UZNA6KVE824MXRXBWK8ZUN' where id=4; -update noar tt set b0='5GRDYB3R5YEIIH4BX4CUGFVJOZV' where id=4; -update noar ti set b0='5GRDYB3R5YEIIH4BX4CUGFVJOZV' where id=4; -update noar tt set v0='BYITJTGH5E1ZLE' where id=4; -update noar ti set v0='BYITJTGH5E1ZLE' where id=4; -update noar tt set b1='VJFWXCXHSX3O335PTA9Q3R' where id=4; -update noar ti set b1='VJFWXCXHSX3O335PTA9Q3R' where id=4; -update noar tt set v0='Z0I6J1448LRWEOVSJVKRHEAOZ2APBKWB' where id=4; -update noar ti set v0='Z0I6J1448LRWEOVSJVKRHEAOZ2APBKWB' where id=4; -update noar tt set b2='ZLQ89NZF9D08XHSQJAFRCV' where id=4; -update noar ti set b2='ZLQ89NZF9D08XHSQJAFRCV' where id=4; -update noar tt set v0='PXJFN8GSR0T4MF6OZ' where id=5; -update noar ti set v0='PXJFN8GSR0T4MF6OZ' where id=5; -update noar tt set b0='NSFY594582' where id=5; -update noar ti set b0='NSFY594582' where id=5; -update noar tt set v0='E31UGGZR62GTVYJ9KX0' where id=5; -update noar ti set v0='E31UGGZR62GTVYJ9KX0' where id=5; -update noar tt set b1='17KC538KG3GOSXD4C77I' where id=5; -update noar ti set b1='17KC538KG3GOSXD4C77I' where id=5; -update noar tt set v0='3CNYFDLATOJV8VEEIZ0GRID0KTZLY' where id=5; -update noar ti set v0='3CNYFDLATOJV8VEEIZ0GRID0KTZLY' where id=5; -update noar tt set b2='1AEGEW3A4PH3TF5J46KDYYS9SKIXR' where id=5; -update noar ti set b2='1AEGEW3A4PH3TF5J46KDYYS9SKIXR' where id=5; -update noar tt set v0='YR1OG8C5GH75Z5JHINPU' where id=6; -update noar ti set v0='YR1OG8C5GH75Z5JHINPU' where id=6; -update noar tt set b0='OKL5TBL99MY0G6MQQ8ZHI74FRY' where id=6; -update noar ti set b0='OKL5TBL99MY0G6MQQ8ZHI74FRY' where id=6; -update noar tt set v0='CIHNSDTWYH9LHP56FJ2B0FZ8GH' where id=6; -update noar ti set v0='CIHNSDTWYH9LHP56FJ2B0FZ8GH' where id=6; -update noar tt set b1='GI7F' where id=6; -update noar ti set b1='GI7F' where id=6; -update noar tt set v0='S7YTJF2J629F0HAOTQALJ' where id=6; -update noar ti set v0='S7YTJF2J629F0HAOTQALJ' where id=6; -update noar tt set b2='6Y0XKM56FW3ITOZ' where id=6; -update noar ti set b2='6Y0XKM56FW3ITOZ' where id=6; -update noar tt set v0='DBHE91TH' where id=7; -update noar ti set v0='DBHE91TH' where id=7; -update noar tt set b0='HMZ2KQE63VUTX7C3ZKCRZYJY' where id=7; -update noar ti set b0='HMZ2KQE63VUTX7C3ZKCRZYJY' where id=7; -update noar tt set v0='CKWXOZSA306SB6G' where id=7; -update noar ti set v0='CKWXOZSA306SB6G' where id=7; -update noar tt set b1='OB7K9ATROTGJ0OWBAG49C' where id=7; -update noar ti set b1='OB7K9ATROTGJ0OWBAG49C' where id=7; -update noar tt set v0='IYHS4P0GPQ4K' where id=7; -update noar ti set v0='IYHS4P0GPQ4K' where id=7; -update noar tt set b2='M9YFL5LCUM1NG' where id=7; -update noar ti set b2='M9YFL5LCUM1NG' where id=7; -update noar tt set v0='9WA83KFOQY7OWOE5AZPWC' where id=8; -update noar ti set v0='9WA83KFOQY7OWOE5AZPWC' where id=8; -update noar tt set b0='ZQZZ3GTO37AP1PAR1P2LD53GXIFC' where id=8; -update noar ti set b0='ZQZZ3GTO37AP1PAR1P2LD53GXIFC' where id=8; -update noar tt set v0='1GG0BXR967MSXST5' where id=8; -update noar ti set v0='1GG0BXR967MSXST5' where id=8; -update noar tt set b1='FYIJNQCZJTBKCAHIYWT7WLT8MW7' where id=8; -update noar ti set b1='FYIJNQCZJTBKCAHIYWT7WLT8MW7' where id=8; -update noar tt set v0='L50YBS9L8IV3DHCXYMA7TWS879DCPQI1' where id=8; -update noar ti set v0='L50YBS9L8IV3DHCXYMA7TWS879DCPQI1' where id=8; -update noar tt set b2='61H5GFXDQO7JF8U' where id=8; -update noar ti set b2='61H5GFXDQO7JF8U' where id=8; -update noar tt set v0='WG2W60DMI' where id=9; -update noar ti set v0='WG2W60DMI' where id=9; -update noar tt set b0='6YSOK97V9VOJNMEWE9WU8CMN' where id=9; -update noar ti set b0='6YSOK97V9VOJNMEWE9WU8CMN' where id=9; -update noar tt set v0='4RC6UM4WJJHE8KHJU28Y46' where id=9; -update noar ti set v0='4RC6UM4WJJHE8KHJU28Y46' where id=9; -update noar tt set b1='XMM5D2BOQDHGYMRBM' where id=9; -update noar ti set b1='XMM5D2BOQDHGYMRBM' where id=9; -update noar tt set v0='RIHX6GY5EHUT91TK2B9TGDU' where id=9; -update noar ti set v0='RIHX6GY5EHUT91TK2B9TGDU' where id=9; -update noar tt set b2='M040NX2' where id=9; -update noar ti set b2='M040NX2' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 mediumblob null, - b1 mediumblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='OM9F6DGLJGWD3OWJ0' where id=1; -update noar ti set v0='OM9F6DGLJGWD3OWJ0' where id=1; -update noar tt set b0='WX2Q' where id=1; -update noar ti set b0='WX2Q' where id=1; -update noar tt set v0='KK3X' where id=1; -update noar ti set v0='KK3X' where id=1; -update noar tt set b1='165' where id=1; -update noar ti set b1='165' where id=1; -update noar tt set v0='X1WV45UVU5UDZ8545XS' where id=1; -update noar ti set v0='X1WV45UVU5UDZ8545XS' where id=1; -update noar tt set b2='R' where id=1; -update noar ti set b2='R' where id=1; -update noar tt set v0='6W0' where id=2; -update noar ti set v0='6W0' where id=2; -update noar tt set b0='2UL9TLTPUT6TPAPQ8ZQZMA3FQ' where id=2; -update noar ti set b0='2UL9TLTPUT6TPAPQ8ZQZMA3FQ' where id=2; -update noar tt set v0='I34TEVC82NCGG2F0ZHDI' where id=2; -update noar ti set v0='I34TEVC82NCGG2F0ZHDI' where id=2; -update noar tt set b1='URE9V' where id=2; -update noar ti set b1='URE9V' where id=2; -update noar tt set v0='V354JGXG1EHAY' where id=2; -update noar ti set v0='V354JGXG1EHAY' where id=2; -update noar tt set b2='69GQOP6MLGRP08HGSY9NBIEWUTM8' where id=2; -update noar ti set b2='69GQOP6MLGRP08HGSY9NBIEWUTM8' where id=2; -update noar tt set v0='ZR' where id=3; -update noar ti set v0='ZR' where id=3; -update noar tt set b0='XHD0WD7VIH93' where id=3; -update noar ti set b0='XHD0WD7VIH93' where id=3; -update noar tt set v0='N89UHDMRLLF6' where id=3; -update noar ti set v0='N89UHDMRLLF6' where id=3; -update noar tt set b1='NTUQEEGNZP9EBZ' where id=3; -update noar ti set b1='NTUQEEGNZP9EBZ' where id=3; -update noar tt set v0='TD04E4MMEJYR2U3Y2R' where id=3; -update noar ti set v0='TD04E4MMEJYR2U3Y2R' where id=3; -update noar tt set b2='LX9F0OG3CVT5GYBDK299DAK784SP' where id=3; -update noar ti set b2='LX9F0OG3CVT5GYBDK299DAK784SP' where id=3; -update noar tt set v0='MBP36W3IML' where id=4; -update noar ti set v0='MBP36W3IML' where id=4; -update noar tt set b0='QX7LXSPL0G0KVHN14ACCMCDY7BPQL' where id=4; -update noar ti set b0='QX7LXSPL0G0KVHN14ACCMCDY7BPQL' where id=4; -update noar tt set v0='MPPKJIHXGWF83NOYN' where id=4; -update noar ti set v0='MPPKJIHXGWF83NOYN' where id=4; -update noar tt set b1='DPXSFNFNZPER1KI4DJHR3' where id=4; -update noar ti set b1='DPXSFNFNZPER1KI4DJHR3' where id=4; -update noar tt set v0='URSS' where id=4; -update noar ti set v0='URSS' where id=4; -update noar tt set b2='MX4JZICCQ3K1RQN9' where id=4; -update noar ti set b2='MX4JZICCQ3K1RQN9' where id=4; -update noar tt set v0='KC3VGV0A2X757OC7L73MX2R1' where id=5; -update noar ti set v0='KC3VGV0A2X757OC7L73MX2R1' where id=5; -update noar tt set b0='ZXV5MSXG3RNJ2NR1RZRW6NGZBNOL3WN5' where id=5; -update noar ti set b0='ZXV5MSXG3RNJ2NR1RZRW6NGZBNOL3WN5' where id=5; -update noar tt set v0='34YNPL29DFCIZ2SKU02TS32NS8' where id=5; -update noar ti set v0='34YNPL29DFCIZ2SKU02TS32NS8' where id=5; -update noar tt set b1='9A3P6JWZX92Q6J3T90FHOA1ARI9D' where id=5; -update noar ti set b1='9A3P6JWZX92Q6J3T90FHOA1ARI9D' where id=5; -update noar tt set v0='NU7UZN37ZWLGPGESTQCKDA' where id=5; -update noar ti set v0='NU7UZN37ZWLGPGESTQCKDA' where id=5; -update noar tt set b2='WI6WPD2E' where id=5; -update noar ti set b2='WI6WPD2E' where id=5; -update noar tt set v0='178K6SRB8D0B4RBRHGFB87HF' where id=6; -update noar ti set v0='178K6SRB8D0B4RBRHGFB87HF' where id=6; -update noar tt set b0='NS5IPKY5T4VL' where id=6; -update noar ti set b0='NS5IPKY5T4VL' where id=6; -update noar tt set v0='VOH0MR9VJR6M0QEJQZIOL1RA7XD4RX' where id=6; -update noar ti set v0='VOH0MR9VJR6M0QEJQZIOL1RA7XD4RX' where id=6; -update noar tt set b1='YO4BDZ7CU2WV9AOCF49IIH8' where id=6; -update noar ti set b1='YO4BDZ7CU2WV9AOCF49IIH8' where id=6; -update noar tt set v0='XYQDCYR97CE2LG4J99XA' where id=6; -update noar ti set v0='XYQDCYR97CE2LG4J99XA' where id=6; -update noar tt set b2='IZX4L2ISKJVGV2FJ8W' where id=6; -update noar ti set b2='IZX4L2ISKJVGV2FJ8W' where id=6; -update noar tt set v0='KLKT9AUMZE4SDHD6O8X7FUJUAPX' where id=7; -update noar ti set v0='KLKT9AUMZE4SDHD6O8X7FUJUAPX' where id=7; -update noar tt set b0='ZNEIJHUAJ6GLJ' where id=7; -update noar ti set b0='ZNEIJHUAJ6GLJ' where id=7; -update noar tt set v0='23J1QZRV27FFHPH1BVV' where id=7; -update noar ti set v0='23J1QZRV27FFHPH1BVV' where id=7; -update noar tt set b1='RWHRD2YVW' where id=7; -update noar ti set b1='RWHRD2YVW' where id=7; -update noar tt set v0='IGZ' where id=7; -update noar ti set v0='IGZ' where id=7; -update noar tt set b2='XGRZ98XQ0V5P7HIFFRUO4J8' where id=7; -update noar ti set b2='XGRZ98XQ0V5P7HIFFRUO4J8' where id=7; -update noar tt set v0='MKKIQ4OJT' where id=8; -update noar ti set v0='MKKIQ4OJT' where id=8; -update noar tt set b0='JY' where id=8; -update noar ti set b0='JY' where id=8; -update noar tt set v0='MOGTDQ8ERF7JECXGSHUX3W92TYMKR' where id=8; -update noar ti set v0='MOGTDQ8ERF7JECXGSHUX3W92TYMKR' where id=8; -update noar tt set b1='D61JS2ST6F6FGEC29XOE2DRS27U5BSPP' where id=8; -update noar ti set b1='D61JS2ST6F6FGEC29XOE2DRS27U5BSPP' where id=8; -update noar tt set v0='G6LMY1LUTIFU2DFE89R' where id=8; -update noar ti set v0='G6LMY1LUTIFU2DFE89R' where id=8; -update noar tt set b2='3OJ3VH5BYH99Q8NWP9FTLZHV771CYX' where id=8; -update noar ti set b2='3OJ3VH5BYH99Q8NWP9FTLZHV771CYX' where id=8; -update noar tt set v0='0LD8B63HBY' where id=9; -update noar ti set v0='0LD8B63HBY' where id=9; -update noar tt set b0='GFWWZWRI5DF7I0RZZVSAN5WZVCJA' where id=9; -update noar ti set b0='GFWWZWRI5DF7I0RZZVSAN5WZVCJA' where id=9; -update noar tt set v0='JW8GKXES9ZRT3GI15V1Q' where id=9; -update noar ti set v0='JW8GKXES9ZRT3GI15V1Q' where id=9; -update noar tt set b1='ZN' where id=9; -update noar ti set b1='ZN' where id=9; -update noar tt set v0='TYPZJ6VDMQ' where id=9; -update noar ti set v0='TYPZJ6VDMQ' where id=9; -update noar tt set b2='365FB9MNA3ZTD' where id=9; -update noar ti set b2='365FB9MNA3ZTD' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 mediumblob null, - b1 mediumblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='5LT' where id=1; -update noar ti set v0='5LT' where id=1; -update noar tt set b0='LNXTCKX' where id=1; -update noar ti set b0='LNXTCKX' where id=1; -update noar tt set v0='UEWTU2JHM' where id=1; -update noar ti set v0='UEWTU2JHM' where id=1; -update noar tt set b1='FD0B2WDPSNR2M' where id=1; -update noar ti set b1='FD0B2WDPSNR2M' where id=1; -update noar tt set v0='7PT7CA8EIPOKESUND9CGTSED8R' where id=1; -update noar ti set v0='7PT7CA8EIPOKESUND9CGTSED8R' where id=1; -update noar tt set b2='0REM82L82' where id=1; -update noar ti set b2='0REM82L82' where id=1; -update noar tt set v0='441X29DK2003SSIY9MLK19M3KI07V' where id=2; -update noar ti set v0='441X29DK2003SSIY9MLK19M3KI07V' where id=2; -update noar tt set b0='VUJ4F8SUTHE78DYTDL68YENPLWG' where id=2; -update noar ti set b0='VUJ4F8SUTHE78DYTDL68YENPLWG' where id=2; -update noar tt set v0='9Q3MZI4P686SDKP9K' where id=2; -update noar ti set v0='9Q3MZI4P686SDKP9K' where id=2; -update noar tt set b1='5' where id=2; -update noar ti set b1='5' where id=2; -update noar tt set v0='BJXRK44RBZ0Y9R1BDG4' where id=2; -update noar ti set v0='BJXRK44RBZ0Y9R1BDG4' where id=2; -update noar tt set b2='MX60I' where id=2; -update noar ti set b2='MX60I' where id=2; -update noar tt set v0='ACCEQTDTGF32KA9CWALURYM' where id=3; -update noar ti set v0='ACCEQTDTGF32KA9CWALURYM' where id=3; -update noar tt set b0='KR8R2' where id=3; -update noar ti set b0='KR8R2' where id=3; -update noar tt set v0='O227LV5IC' where id=3; -update noar ti set v0='O227LV5IC' where id=3; -update noar tt set b1='SMMYEVVNUJZLWRRET4DV6G3V4M0YEWPJ' where id=3; -update noar ti set b1='SMMYEVVNUJZLWRRET4DV6G3V4M0YEWPJ' where id=3; -update noar tt set v0='E0YCM1RDTAXZKA52CJBYMWGV86C' where id=3; -update noar ti set v0='E0YCM1RDTAXZKA52CJBYMWGV86C' where id=3; -update noar tt set b2='YHXJBMUTMPGHD8R9YGE' where id=3; -update noar ti set b2='YHXJBMUTMPGHD8R9YGE' where id=3; -update noar tt set v0='RSMLA8XZJ64CF7J' where id=4; -update noar ti set v0='RSMLA8XZJ64CF7J' where id=4; -update noar tt set b0='95A49B5F' where id=4; -update noar ti set b0='95A49B5F' where id=4; -update noar tt set v0='CUJY5X9' where id=4; -update noar ti set v0='CUJY5X9' where id=4; -update noar tt set b1='4VZ4K3L' where id=4; -update noar ti set b1='4VZ4K3L' where id=4; -update noar tt set v0='DSRUC2' where id=4; -update noar ti set v0='DSRUC2' where id=4; -update noar tt set b2='5JSGWN6K1C8KX7DOLHY' where id=4; -update noar ti set b2='5JSGWN6K1C8KX7DOLHY' where id=4; -update noar tt set v0='X51KLB1OEF' where id=5; -update noar ti set v0='X51KLB1OEF' where id=5; -update noar tt set b0='AYMJUWOZK96GYL4KY337XQXRHAPYC' where id=5; -update noar ti set b0='AYMJUWOZK96GYL4KY337XQXRHAPYC' where id=5; -update noar tt set v0='152K5' where id=5; -update noar ti set v0='152K5' where id=5; -update noar tt set b1='6SEO8JMU8FD' where id=5; -update noar ti set b1='6SEO8JMU8FD' where id=5; -update noar tt set v0='J7XKWW5BI5K6' where id=5; -update noar ti set v0='J7XKWW5BI5K6' where id=5; -update noar tt set b2='VWY0KY7KQF7FYZS1LO3L6LZ4P9WNO8' where id=5; -update noar ti set b2='VWY0KY7KQF7FYZS1LO3L6LZ4P9WNO8' where id=5; -update noar tt set v0='4Q677GFVA' where id=6; -update noar ti set v0='4Q677GFVA' where id=6; -update noar tt set b0='X' where id=6; -update noar ti set b0='X' where id=6; -update noar tt set v0='9ZYSUK' where id=6; -update noar ti set v0='9ZYSUK' where id=6; -update noar tt set b1='JKSJKEF9QZQGEH' where id=6; -update noar ti set b1='JKSJKEF9QZQGEH' where id=6; -update noar tt set v0='ZJOUBF1695NIJDHIMAO384' where id=6; -update noar ti set v0='ZJOUBF1695NIJDHIMAO384' where id=6; -update noar tt set b2='ZW74LM9ZBUANXXE6584WQUU79QI9T' where id=6; -update noar ti set b2='ZW74LM9ZBUANXXE6584WQUU79QI9T' where id=6; -update noar tt set v0='XZR654NKSROEH0BPWM9YI9R' where id=7; -update noar ti set v0='XZR654NKSROEH0BPWM9YI9R' where id=7; -update noar tt set b0='MAGDKKGQH' where id=7; -update noar ti set b0='MAGDKKGQH' where id=7; -update noar tt set v0='0ILPRB4YW2F48EICCZXX47P9JJP' where id=7; -update noar ti set v0='0ILPRB4YW2F48EICCZXX47P9JJP' where id=7; -update noar tt set b1='FQC9RK9G12JXVWV' where id=7; -update noar ti set b1='FQC9RK9G12JXVWV' where id=7; -update noar tt set v0='UWOH3778BPPUF' where id=7; -update noar ti set v0='UWOH3778BPPUF' where id=7; -update noar tt set b2='2' where id=7; -update noar ti set b2='2' where id=7; -update noar tt set v0='OROP4X0XUUKUQEGMDO' where id=8; -update noar ti set v0='OROP4X0XUUKUQEGMDO' where id=8; -update noar tt set b0='9KHZFWINZY22TR7DFR' where id=8; -update noar ti set b0='9KHZFWINZY22TR7DFR' where id=8; -update noar tt set v0='VD5YC1BGL128OG3LX7DK7O6H5CUU' where id=8; -update noar ti set v0='VD5YC1BGL128OG3LX7DK7O6H5CUU' where id=8; -update noar tt set b1='8P5D3NB8NIUX4LVZVLV3J5UANFL4OE2' where id=8; -update noar ti set b1='8P5D3NB8NIUX4LVZVLV3J5UANFL4OE2' where id=8; -update noar tt set v0='W575DZ' where id=8; -update noar ti set v0='W575DZ' where id=8; -update noar tt set b2='6JI0SDRKAW8N04BTJDR7Q' where id=8; -update noar ti set b2='6JI0SDRKAW8N04BTJDR7Q' where id=8; -update noar tt set v0='1M7TXVB4FKNRNSJKY5G1QETEX44V' where id=9; -update noar ti set v0='1M7TXVB4FKNRNSJKY5G1QETEX44V' where id=9; -update noar tt set b0='0MSG9HJDENISRY77JWUELH0E0W8NFO8T' where id=9; -update noar ti set b0='0MSG9HJDENISRY77JWUELH0E0W8NFO8T' where id=9; -update noar tt set v0='3D74L3KEP1HWSTH54FZPHV' where id=9; -update noar ti set v0='3D74L3KEP1HWSTH54FZPHV' where id=9; -update noar tt set b1='YCSV912PEB6BE' where id=9; -update noar ti set b1='YCSV912PEB6BE' where id=9; -update noar tt set v0='27' where id=9; -update noar ti set v0='27' where id=9; -update noar tt set b2='3XG0MVJXZ63XGJJZBA8' where id=9; -update noar ti set b2='3XG0MVJXZ63XGJJZBA8' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 mediumblob not null, - b1 mediumblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='JGN4QTFHFK' where id=1; -update noar ti set v0='JGN4QTFHFK' where id=1; -update noar tt set b0='DNYP0EE1ES4JDL577TSS00Q' where id=1; -update noar ti set b0='DNYP0EE1ES4JDL577TSS00Q' where id=1; -update noar tt set v0='UPJSWGW4MM6LI0F8K961PASN' where id=1; -update noar ti set v0='UPJSWGW4MM6LI0F8K961PASN' where id=1; -update noar tt set b1='FPG3R88I37FLO5' where id=1; -update noar ti set b1='FPG3R88I37FLO5' where id=1; -update noar tt set v0='BV0BA9' where id=1; -update noar ti set v0='BV0BA9' where id=1; -update noar tt set b2='WMCJM4LEX7DX0W6KPEF08UON' where id=1; -update noar ti set b2='WMCJM4LEX7DX0W6KPEF08UON' where id=1; -update noar tt set v0='G7' where id=2; -update noar ti set v0='G7' where id=2; -update noar tt set b0='TFH' where id=2; -update noar ti set b0='TFH' where id=2; -update noar tt set v0='M7AQAS08TI4B82' where id=2; -update noar ti set v0='M7AQAS08TI4B82' where id=2; -update noar tt set b1='H5LK7PEHOB3Y24G' where id=2; -update noar ti set b1='H5LK7PEHOB3Y24G' where id=2; -update noar tt set v0='5X419VQ4KWPIBM' where id=2; -update noar ti set v0='5X419VQ4KWPIBM' where id=2; -update noar tt set b2='VPBBD' where id=2; -update noar ti set b2='VPBBD' where id=2; -update noar tt set v0='LJXZ91ZOXXTW1HPYB304EC' where id=3; -update noar ti set v0='LJXZ91ZOXXTW1HPYB304EC' where id=3; -update noar tt set b0='E76KK42IV0L2P8Y7O7VOZOO6' where id=3; -update noar ti set b0='E76KK42IV0L2P8Y7O7VOZOO6' where id=3; -update noar tt set v0='B0' where id=3; -update noar ti set v0='B0' where id=3; -update noar tt set b1='UOT5F79' where id=3; -update noar ti set b1='UOT5F79' where id=3; -update noar tt set v0='4270VR8' where id=3; -update noar ti set v0='4270VR8' where id=3; -update noar tt set b2='9I8918KAPITNFZLWIFJ266FOANA' where id=3; -update noar ti set b2='9I8918KAPITNFZLWIFJ266FOANA' where id=3; -update noar tt set v0='5OKW3JXHD6E7435MINJ7M' where id=4; -update noar ti set v0='5OKW3JXHD6E7435MINJ7M' where id=4; -update noar tt set b0='1YBYYBD4B7AY7JHH3U8JSNNB6I1WXG8R' where id=4; -update noar ti set b0='1YBYYBD4B7AY7JHH3U8JSNNB6I1WXG8R' where id=4; -update noar tt set v0='PKWJU4I8IWH6VVQX0K3EW80YNKOZH' where id=4; -update noar ti set v0='PKWJU4I8IWH6VVQX0K3EW80YNKOZH' where id=4; -update noar tt set b1='AJMIJEEV' where id=4; -update noar ti set b1='AJMIJEEV' where id=4; -update noar tt set v0='GCAK54V1BUTU5FI2U' where id=4; -update noar ti set v0='GCAK54V1BUTU5FI2U' where id=4; -update noar tt set b2='QU93GWILSD4O439A49LHE' where id=4; -update noar ti set b2='QU93GWILSD4O439A49LHE' where id=4; -update noar tt set v0='HYREQ9FG9UNRGMAIYX' where id=5; -update noar ti set v0='HYREQ9FG9UNRGMAIYX' where id=5; -update noar tt set b0='3GBT0' where id=5; -update noar ti set b0='3GBT0' where id=5; -update noar tt set v0='S18EQDS' where id=5; -update noar ti set v0='S18EQDS' where id=5; -update noar tt set b1='ACKI84AH8DHCDERB53Z335MBTLKK66F9' where id=5; -update noar ti set b1='ACKI84AH8DHCDERB53Z335MBTLKK66F9' where id=5; -update noar tt set v0='SLO3BUOT5U3IE9' where id=5; -update noar ti set v0='SLO3BUOT5U3IE9' where id=5; -update noar tt set b2='2D91TPELQGJ' where id=5; -update noar ti set b2='2D91TPELQGJ' where id=5; -update noar tt set v0='F6132GVKX24P' where id=6; -update noar ti set v0='F6132GVKX24P' where id=6; -update noar tt set b0='KOPC7I2KY5FP5H815EF9F2QCIEWF' where id=6; -update noar ti set b0='KOPC7I2KY5FP5H815EF9F2QCIEWF' where id=6; -update noar tt set v0='UDKKHE4CR8EVX2Q5LO17BP9LO77' where id=6; -update noar ti set v0='UDKKHE4CR8EVX2Q5LO17BP9LO77' where id=6; -update noar tt set b1='H7P21A' where id=6; -update noar ti set b1='H7P21A' where id=6; -update noar tt set v0='3YIK9FNE5ILY' where id=6; -update noar ti set v0='3YIK9FNE5ILY' where id=6; -update noar tt set b2='063JBL6QOSQ34B5MUKL' where id=6; -update noar ti set b2='063JBL6QOSQ34B5MUKL' where id=6; -update noar tt set v0='WX9WXYIGGR4DZZQMA1MGXIB' where id=7; -update noar ti set v0='WX9WXYIGGR4DZZQMA1MGXIB' where id=7; -update noar tt set b0='1CMHFS9WQILWH' where id=7; -update noar ti set b0='1CMHFS9WQILWH' where id=7; -update noar tt set v0='CZMKT8F' where id=7; -update noar ti set v0='CZMKT8F' where id=7; -update noar tt set b1='YE0YYRN5A5V58T0I' where id=7; -update noar ti set b1='YE0YYRN5A5V58T0I' where id=7; -update noar tt set v0='9D22H8K' where id=7; -update noar ti set v0='9D22H8K' where id=7; -update noar tt set b2='HMNAC11J4S9PLTL8KSKSQTY8' where id=7; -update noar ti set b2='HMNAC11J4S9PLTL8KSKSQTY8' where id=7; -update noar tt set v0='N8RNIJ8R75RVP8OO4G35501BCZH1E5PK' where id=8; -update noar ti set v0='N8RNIJ8R75RVP8OO4G35501BCZH1E5PK' where id=8; -update noar tt set b0='IBPTTO45M40M8W4A5T9QK4779' where id=8; -update noar ti set b0='IBPTTO45M40M8W4A5T9QK4779' where id=8; -update noar tt set v0='TEQKE1C2DJEOCRRT7W8PR' where id=8; -update noar ti set v0='TEQKE1C2DJEOCRRT7W8PR' where id=8; -update noar tt set b1='7D' where id=8; -update noar ti set b1='7D' where id=8; -update noar tt set v0='4FABU203DVBSM4CIVQYA5R8EFIL' where id=8; -update noar ti set v0='4FABU203DVBSM4CIVQYA5R8EFIL' where id=8; -update noar tt set b2='2DGHEUT4H0HCQ19DB' where id=8; -update noar ti set b2='2DGHEUT4H0HCQ19DB' where id=8; -update noar tt set v0='VMZTHZ8WZ4KHWA' where id=9; -update noar ti set v0='VMZTHZ8WZ4KHWA' where id=9; -update noar tt set b0='Q8G4ANO9FWPMBSYSP7EU8TH2G' where id=9; -update noar ti set b0='Q8G4ANO9FWPMBSYSP7EU8TH2G' where id=9; -update noar tt set v0='GA0HBEDG28ISRLMNH6B45Y8P' where id=9; -update noar ti set v0='GA0HBEDG28ISRLMNH6B45Y8P' where id=9; -update noar tt set b1='IHM9GX2SND8MNR7AAF4UE02' where id=9; -update noar ti set b1='IHM9GX2SND8MNR7AAF4UE02' where id=9; -update noar tt set v0='MBJDOXW3LS0RS730WJ175KYZWATGWZQ' where id=9; -update noar ti set v0='MBJDOXW3LS0RS730WJ175KYZWATGWZQ' where id=9; -update noar tt set b2='WB84KK3ES0T' where id=9; -update noar ti set b2='WB84KK3ES0T' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 mediumblob not null, - b1 mediumblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='QBY6LV' where id=1; -update noar ti set v0='QBY6LV' where id=1; -update noar tt set b0='OVKC107A0Y3ZCY12G43LYBUR' where id=1; -update noar ti set b0='OVKC107A0Y3ZCY12G43LYBUR' where id=1; -update noar tt set v0='K8LJYQ2PFKJDD' where id=1; -update noar ti set v0='K8LJYQ2PFKJDD' where id=1; -update noar tt set b1='GSYQNRKCBJJA' where id=1; -update noar ti set b1='GSYQNRKCBJJA' where id=1; -update noar tt set v0='E1U' where id=1; -update noar ti set v0='E1U' where id=1; -update noar tt set b2='MQQZGAUVAOEENS7AJ2' where id=1; -update noar ti set b2='MQQZGAUVAOEENS7AJ2' where id=1; -update noar tt set v0='S3WZ0YC9V011XSG4EEPPZ6H4MT4D' where id=2; -update noar ti set v0='S3WZ0YC9V011XSG4EEPPZ6H4MT4D' where id=2; -update noar tt set b0='DI83NAA0MNS3QRLM' where id=2; -update noar ti set b0='DI83NAA0MNS3QRLM' where id=2; -update noar tt set v0='JA6SRDWITUO9VV4TKXB7' where id=2; -update noar ti set v0='JA6SRDWITUO9VV4TKXB7' where id=2; -update noar tt set b1='13Z57OG4PEDBVPEFRHBRNPQ0V6' where id=2; -update noar ti set b1='13Z57OG4PEDBVPEFRHBRNPQ0V6' where id=2; -update noar tt set v0='NHJWJ601DZ' where id=2; -update noar ti set v0='NHJWJ601DZ' where id=2; -update noar tt set b2='QL3D8OO67BS' where id=2; -update noar ti set b2='QL3D8OO67BS' where id=2; -update noar tt set v0='FO13D2POSU4TKT366NP' where id=3; -update noar ti set v0='FO13D2POSU4TKT366NP' where id=3; -update noar tt set b0='F3P6CJK2U4KNYIXE' where id=3; -update noar ti set b0='F3P6CJK2U4KNYIXE' where id=3; -update noar tt set v0='EFFCKQKTEZ288' where id=3; -update noar ti set v0='EFFCKQKTEZ288' where id=3; -update noar tt set b1='8ETN5QNUEVH77IU8S0QCDQBTCD' where id=3; -update noar ti set b1='8ETN5QNUEVH77IU8S0QCDQBTCD' where id=3; -update noar tt set v0='W4CZLDZO3CQY0T4ACQH24FD' where id=3; -update noar ti set v0='W4CZLDZO3CQY0T4ACQH24FD' where id=3; -update noar tt set b2='68OQ9XSPWC' where id=3; -update noar ti set b2='68OQ9XSPWC' where id=3; -update noar tt set v0='C4CDQ5M2IABWBS42HAAS' where id=4; -update noar ti set v0='C4CDQ5M2IABWBS42HAAS' where id=4; -update noar tt set b0='5EJRVGKY0XB' where id=4; -update noar ti set b0='5EJRVGKY0XB' where id=4; -update noar tt set v0='F2WNH15FORSUB632R1FFBHY4B' where id=4; -update noar ti set v0='F2WNH15FORSUB632R1FFBHY4B' where id=4; -update noar tt set b1='NDCBEC2CY8G4VPOEQVMZFX8Y' where id=4; -update noar ti set b1='NDCBEC2CY8G4VPOEQVMZFX8Y' where id=4; -update noar tt set v0='BRVH6XJTK3DVSWMQG' where id=4; -update noar ti set v0='BRVH6XJTK3DVSWMQG' where id=4; -update noar tt set b2='8OMQPM95BTW6JLXXX4WSYCH82CJG34K' where id=4; -update noar ti set b2='8OMQPM95BTW6JLXXX4WSYCH82CJG34K' where id=4; -update noar tt set v0='B3EBNE7I32' where id=5; -update noar ti set v0='B3EBNE7I32' where id=5; -update noar tt set b0='P' where id=5; -update noar ti set b0='P' where id=5; -update noar tt set v0='AMZYJPSCET70XVUJMHCTXQBSXX' where id=5; -update noar ti set v0='AMZYJPSCET70XVUJMHCTXQBSXX' where id=5; -update noar tt set b1='RQJJQ' where id=5; -update noar ti set b1='RQJJQ' where id=5; -update noar tt set v0='SI' where id=5; -update noar ti set v0='SI' where id=5; -update noar tt set b2='1Q0W67XJ5R53' where id=5; -update noar ti set b2='1Q0W67XJ5R53' where id=5; -update noar tt set v0='W' where id=6; -update noar ti set v0='W' where id=6; -update noar tt set b0='ZQQZZS2650TVV58' where id=6; -update noar ti set b0='ZQQZZS2650TVV58' where id=6; -update noar tt set v0='FMX6N8SRJPGSUBJZS46S' where id=6; -update noar ti set v0='FMX6N8SRJPGSUBJZS46S' where id=6; -update noar tt set b1='T3VSKTNGPN0OLHGAV9K5Y1I5ERVQ' where id=6; -update noar ti set b1='T3VSKTNGPN0OLHGAV9K5Y1I5ERVQ' where id=6; -update noar tt set v0='ZR5A64D' where id=6; -update noar ti set v0='ZR5A64D' where id=6; -update noar tt set b2='0L98AT5YQK6KGF5' where id=6; -update noar ti set b2='0L98AT5YQK6KGF5' where id=6; -update noar tt set v0='F24NBRI1HGH6HU02SBHZLKL78KFV2W' where id=7; -update noar ti set v0='F24NBRI1HGH6HU02SBHZLKL78KFV2W' where id=7; -update noar tt set b0='3BCZN' where id=7; -update noar ti set b0='3BCZN' where id=7; -update noar tt set v0='NM07MR8SN9L69D0' where id=7; -update noar ti set v0='NM07MR8SN9L69D0' where id=7; -update noar tt set b1='2KFQF9IPL4WMX5Z' where id=7; -update noar ti set b1='2KFQF9IPL4WMX5Z' where id=7; -update noar tt set v0='2PCTBJ' where id=7; -update noar ti set v0='2PCTBJ' where id=7; -update noar tt set b2='QLHI32EKBMNNVQD' where id=7; -update noar ti set b2='QLHI32EKBMNNVQD' where id=7; -update noar tt set v0='S98ROI44IXUYDXQ' where id=8; -update noar ti set v0='S98ROI44IXUYDXQ' where id=8; -update noar tt set b0='NWISI' where id=8; -update noar ti set b0='NWISI' where id=8; -update noar tt set v0='8SG4UK11AXE016YB452' where id=8; -update noar ti set v0='8SG4UK11AXE016YB452' where id=8; -update noar tt set b1='9FGH3A2JVQ3GFF4CJ' where id=8; -update noar ti set b1='9FGH3A2JVQ3GFF4CJ' where id=8; -update noar tt set v0='8E54PD6V905HEA17WB' where id=8; -update noar ti set v0='8E54PD6V905HEA17WB' where id=8; -update noar tt set b2='ZMLRM3O0' where id=8; -update noar ti set b2='ZMLRM3O0' where id=8; -update noar tt set v0='9H2YM2J5E0BS0A8OJB8P24B2H3' where id=9; -update noar ti set v0='9H2YM2J5E0BS0A8OJB8P24B2H3' where id=9; -update noar tt set b0='F4H1' where id=9; -update noar ti set b0='F4H1' where id=9; -update noar tt set v0='U3URAFKJP8TL07NMU03N94JGNO' where id=9; -update noar ti set v0='U3URAFKJP8TL07NMU03N94JGNO' where id=9; -update noar tt set b1='WBKOZUBPFKC' where id=9; -update noar ti set b1='WBKOZUBPFKC' where id=9; -update noar tt set v0='950NBB1L1WJAYF' where id=9; -update noar ti set v0='950NBB1L1WJAYF' where id=9; -update noar tt set b2='3JZE6A0GL6K4055LXF8KEJUBALFGF6F1' where id=9; -update noar ti set b2='3JZE6A0GL6K4055LXF8KEJUBALFGF6F1' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 mediumblob null, - b1 mediumblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='9877QISJZWDG5TRCA0WOA7QDCQDY3N' where id=1; -update noar ti set v0='9877QISJZWDG5TRCA0WOA7QDCQDY3N' where id=1; -update noar tt set b0='UN1MQMGSL0USVSIKFO' where id=1; -update noar ti set b0='UN1MQMGSL0USVSIKFO' where id=1; -update noar tt set v0='O0N4X' where id=1; -update noar ti set v0='O0N4X' where id=1; -update noar tt set b1='31' where id=1; -update noar ti set b1='31' where id=1; -update noar tt set v0='X9TCNPDK1TY305U72VI6' where id=1; -update noar ti set v0='X9TCNPDK1TY305U72VI6' where id=1; -update noar tt set b2='06R' where id=1; -update noar ti set b2='06R' where id=1; -update noar tt set v0='L0N3UJP51CXLT3Z69XI6NAQ3EWP1GB' where id=2; -update noar ti set v0='L0N3UJP51CXLT3Z69XI6NAQ3EWP1GB' where id=2; -update noar tt set b0='LWH30LLDH2JV6TYUGF' where id=2; -update noar ti set b0='LWH30LLDH2JV6TYUGF' where id=2; -update noar tt set v0='2PI29TFFIO0' where id=2; -update noar ti set v0='2PI29TFFIO0' where id=2; -update noar tt set b1='K5YRI9TSHS67Z77F2A3S9U5U4RQW3C' where id=2; -update noar ti set b1='K5YRI9TSHS67Z77F2A3S9U5U4RQW3C' where id=2; -update noar tt set v0='9QIKKPAYU3XFX4C' where id=2; -update noar ti set v0='9QIKKPAYU3XFX4C' where id=2; -update noar tt set b2='8OCM2CRFW759M0' where id=2; -update noar ti set b2='8OCM2CRFW759M0' where id=2; -update noar tt set v0='ZOUS40IIDM9XTCG2Z7P9MCHS' where id=3; -update noar ti set v0='ZOUS40IIDM9XTCG2Z7P9MCHS' where id=3; -update noar tt set b0='7E3BD5O1' where id=3; -update noar ti set b0='7E3BD5O1' where id=3; -update noar tt set v0='QZ4KN75FEGVF9' where id=3; -update noar ti set v0='QZ4KN75FEGVF9' where id=3; -update noar tt set b1='QF1KX7WTP' where id=3; -update noar ti set b1='QF1KX7WTP' where id=3; -update noar tt set v0='HOPUNF7M30GQNI0Y7JXIU6AKYK3A4EG' where id=3; -update noar ti set v0='HOPUNF7M30GQNI0Y7JXIU6AKYK3A4EG' where id=3; -update noar tt set b2='WPHABIAUXA0U0' where id=3; -update noar ti set b2='WPHABIAUXA0U0' where id=3; -update noar tt set v0='4806XCACSQKO' where id=4; -update noar ti set v0='4806XCACSQKO' where id=4; -update noar tt set b0='JR71U4' where id=4; -update noar ti set b0='JR71U4' where id=4; -update noar tt set v0='6Q8RPDXCTCI75U8W6FV5TG1CE4ZRG' where id=4; -update noar ti set v0='6Q8RPDXCTCI75U8W6FV5TG1CE4ZRG' where id=4; -update noar tt set b1='N3FRK2FP' where id=4; -update noar ti set b1='N3FRK2FP' where id=4; -update noar tt set v0='QEBD6LKNO' where id=4; -update noar ti set v0='QEBD6LKNO' where id=4; -update noar tt set b2='6U63NHFD42RY20S1' where id=4; -update noar ti set b2='6U63NHFD42RY20S1' where id=4; -update noar tt set v0='3MO6O6SHTRK' where id=5; -update noar ti set v0='3MO6O6SHTRK' where id=5; -update noar tt set b0='IE3A9KPQJ7R4KNYF2WPAEEC97A' where id=5; -update noar ti set b0='IE3A9KPQJ7R4KNYF2WPAEEC97A' where id=5; -update noar tt set v0='LD26DWMCPJVL1K7' where id=5; -update noar ti set v0='LD26DWMCPJVL1K7' where id=5; -update noar tt set b1='L26WI76NIFVTSFMZ7GBBU40KKANO8Z6' where id=5; -update noar ti set b1='L26WI76NIFVTSFMZ7GBBU40KKANO8Z6' where id=5; -update noar tt set v0='KLH0JBWPYGSKYGZ8Q7NCG' where id=5; -update noar ti set v0='KLH0JBWPYGSKYGZ8Q7NCG' where id=5; -update noar tt set b2='IKQDOQT694KK' where id=5; -update noar ti set b2='IKQDOQT694KK' where id=5; -update noar tt set v0='KW7OUX2ZGXXIMXVNEP2MG15M13' where id=6; -update noar ti set v0='KW7OUX2ZGXXIMXVNEP2MG15M13' where id=6; -update noar tt set b0='KXRZKKZW7D' where id=6; -update noar ti set b0='KXRZKKZW7D' where id=6; -update noar tt set v0='5XINU22GELE81P0O8HFW2D' where id=6; -update noar ti set v0='5XINU22GELE81P0O8HFW2D' where id=6; -update noar tt set b1='MWM54FOMUB2WR' where id=6; -update noar ti set b1='MWM54FOMUB2WR' where id=6; -update noar tt set v0='1DD2B4KHSMHUW18CSMSPH12OMCH09L65' where id=6; -update noar ti set v0='1DD2B4KHSMHUW18CSMSPH12OMCH09L65' where id=6; -update noar tt set b2='4QRM7CD07XREJXMP2UWT7BK8NV3K' where id=6; -update noar ti set b2='4QRM7CD07XREJXMP2UWT7BK8NV3K' where id=6; -update noar tt set v0='46MBYC4OHHEGFY1K7928BN37LSBE' where id=7; -update noar ti set v0='46MBYC4OHHEGFY1K7928BN37LSBE' where id=7; -update noar tt set b0='5VHGNSJLOZ5IHO0WVQVNJ1WO5VUGHP8Y' where id=7; -update noar ti set b0='5VHGNSJLOZ5IHO0WVQVNJ1WO5VUGHP8Y' where id=7; -update noar tt set v0='7J' where id=7; -update noar ti set v0='7J' where id=7; -update noar tt set b1='FXXY2EWJE8JXKTH' where id=7; -update noar ti set b1='FXXY2EWJE8JXKTH' where id=7; -update noar tt set v0='1DXSFXQ' where id=7; -update noar ti set v0='1DXSFXQ' where id=7; -update noar tt set b2='8898HQDTJF' where id=7; -update noar ti set b2='8898HQDTJF' where id=7; -update noar tt set v0='9F82N2B9FI' where id=8; -update noar ti set v0='9F82N2B9FI' where id=8; -update noar tt set b0='D9P8FY' where id=8; -update noar ti set b0='D9P8FY' where id=8; -update noar tt set v0='0E6LKTH10EG' where id=8; -update noar ti set v0='0E6LKTH10EG' where id=8; -update noar tt set b1='PBB3AQ' where id=8; -update noar ti set b1='PBB3AQ' where id=8; -update noar tt set v0='L99E7LA' where id=8; -update noar ti set v0='L99E7LA' where id=8; -update noar tt set b2='ZW40C5QYC5' where id=8; -update noar ti set b2='ZW40C5QYC5' where id=8; -update noar tt set v0='VKA30BP6ECKRZPY0N3FP' where id=9; -update noar ti set v0='VKA30BP6ECKRZPY0N3FP' where id=9; -update noar tt set b0='O' where id=9; -update noar ti set b0='O' where id=9; -update noar tt set v0='14QD9JUSW4P8AYRHHH607B4V' where id=9; -update noar ti set v0='14QD9JUSW4P8AYRHHH607B4V' where id=9; -update noar tt set b1='8LY6P8ZBRNQM4VUGA9Y8K3PG9NKJR7ZB' where id=9; -update noar ti set b1='8LY6P8ZBRNQM4VUGA9Y8K3PG9NKJR7ZB' where id=9; -update noar tt set v0='PA6GLXJTEX' where id=9; -update noar ti set v0='PA6GLXJTEX' where id=9; -update noar tt set b2='KIEBI52U' where id=9; -update noar ti set b2='KIEBI52U' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 mediumblob null, - b1 mediumblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='H5HBU6R8BZYCIII1IFV4YLME' where id=1; -update noar ti set v0='H5HBU6R8BZYCIII1IFV4YLME' where id=1; -update noar tt set b0='N24KW0DCPYJQ2EQF0NHLE6FB7JJ' where id=1; -update noar ti set b0='N24KW0DCPYJQ2EQF0NHLE6FB7JJ' where id=1; -update noar tt set v0='14VXM7NSH8JELONFR89PG' where id=1; -update noar ti set v0='14VXM7NSH8JELONFR89PG' where id=1; -update noar tt set b1='BS5GV' where id=1; -update noar ti set b1='BS5GV' where id=1; -update noar tt set v0='RI5DGFRDWTME4' where id=1; -update noar ti set v0='RI5DGFRDWTME4' where id=1; -update noar tt set b2='QVO1VLYYV8QJ4KUSJDF' where id=1; -update noar ti set b2='QVO1VLYYV8QJ4KUSJDF' where id=1; -update noar tt set v0='DCJBP1W73KPH44P9A2F4' where id=2; -update noar ti set v0='DCJBP1W73KPH44P9A2F4' where id=2; -update noar tt set b0='R9SCSZYP2NW8W4MG5L4XPWV6LLUX9L' where id=2; -update noar ti set b0='R9SCSZYP2NW8W4MG5L4XPWV6LLUX9L' where id=2; -update noar tt set v0='B9KMSZ29WFF5IAY9K' where id=2; -update noar ti set v0='B9KMSZ29WFF5IAY9K' where id=2; -update noar tt set b1='G6EANYJD4AOC4R53' where id=2; -update noar ti set b1='G6EANYJD4AOC4R53' where id=2; -update noar tt set v0='QPFLNX' where id=2; -update noar ti set v0='QPFLNX' where id=2; -update noar tt set b2='N' where id=2; -update noar ti set b2='N' where id=2; -update noar tt set v0='KHET61D2' where id=3; -update noar ti set v0='KHET61D2' where id=3; -update noar tt set b0='HO5B1HZTHVILWBW1X9ZYWB63O' where id=3; -update noar ti set b0='HO5B1HZTHVILWBW1X9ZYWB63O' where id=3; -update noar tt set v0='PQDIOQK5LLXYD9GVBOM22P' where id=3; -update noar ti set v0='PQDIOQK5LLXYD9GVBOM22P' where id=3; -update noar tt set b1='EI1DPMO13ZMK5EE87' where id=3; -update noar ti set b1='EI1DPMO13ZMK5EE87' where id=3; -update noar tt set v0='7GDUXQNDOKFXNW9POZ8DDAYY83U7M3' where id=3; -update noar ti set v0='7GDUXQNDOKFXNW9POZ8DDAYY83U7M3' where id=3; -update noar tt set b2='0273OXVZ57ZESOFIFLBCTY4WPVM' where id=3; -update noar ti set b2='0273OXVZ57ZESOFIFLBCTY4WPVM' where id=3; -update noar tt set v0='G01U6X7A43G8Q' where id=4; -update noar ti set v0='G01U6X7A43G8Q' where id=4; -update noar tt set b0='2NIWV8FFS' where id=4; -update noar ti set b0='2NIWV8FFS' where id=4; -update noar tt set v0='9UK0J14GF0DC' where id=4; -update noar ti set v0='9UK0J14GF0DC' where id=4; -update noar tt set b1='B2C6Y4HNDL9QZKP2ZDU4BO5' where id=4; -update noar ti set b1='B2C6Y4HNDL9QZKP2ZDU4BO5' where id=4; -update noar tt set v0='3YLJH4XW0' where id=4; -update noar ti set v0='3YLJH4XW0' where id=4; -update noar tt set b2='AECACJFS' where id=4; -update noar ti set b2='AECACJFS' where id=4; -update noar tt set v0='311H3EHC' where id=5; -update noar ti set v0='311H3EHC' where id=5; -update noar tt set b0='YAHEPPLTBEXW0A4NGLNIOALW7' where id=5; -update noar ti set b0='YAHEPPLTBEXW0A4NGLNIOALW7' where id=5; -update noar tt set v0='0A8L603F5ZNLBXE528SF1KG8R93' where id=5; -update noar ti set v0='0A8L603F5ZNLBXE528SF1KG8R93' where id=5; -update noar tt set b1='4' where id=5; -update noar ti set b1='4' where id=5; -update noar tt set v0='WUBWN34O6QC9UJYYVEQ56BCS' where id=5; -update noar ti set v0='WUBWN34O6QC9UJYYVEQ56BCS' where id=5; -update noar tt set b2='DFVG6J' where id=5; -update noar ti set b2='DFVG6J' where id=5; -update noar tt set v0='WARQW9ICF8U8MQV4ZQBUENP2U3BEHL' where id=6; -update noar ti set v0='WARQW9ICF8U8MQV4ZQBUENP2U3BEHL' where id=6; -update noar tt set b0='NCEALEANHJ5S4YYUV' where id=6; -update noar ti set b0='NCEALEANHJ5S4YYUV' where id=6; -update noar tt set v0='G1NMBSNUER7DSXM0' where id=6; -update noar ti set v0='G1NMBSNUER7DSXM0' where id=6; -update noar tt set b1='HD4UGAIHZ3FS72PHGD5I9LH0S' where id=6; -update noar ti set b1='HD4UGAIHZ3FS72PHGD5I9LH0S' where id=6; -update noar tt set v0='QGNO39Z2T055QG39QV2NPSVI9MPY3J74' where id=6; -update noar ti set v0='QGNO39Z2T055QG39QV2NPSVI9MPY3J74' where id=6; -update noar tt set b2='AZ' where id=6; -update noar ti set b2='AZ' where id=6; -update noar tt set v0='MIR9' where id=7; -update noar ti set v0='MIR9' where id=7; -update noar tt set b0='RSKLUMYAC5LN4JWVT' where id=7; -update noar ti set b0='RSKLUMYAC5LN4JWVT' where id=7; -update noar tt set v0='NSAGD36PD97Q7OFAPSLGZ3Y5' where id=7; -update noar ti set v0='NSAGD36PD97Q7OFAPSLGZ3Y5' where id=7; -update noar tt set b1='G8YRCVXB3J11YVQOYRZDDHJ5Z12' where id=7; -update noar ti set b1='G8YRCVXB3J11YVQOYRZDDHJ5Z12' where id=7; -update noar tt set v0='JYUJ30HLYSNIO40BHKUUS9IMTYNKDD' where id=7; -update noar ti set v0='JYUJ30HLYSNIO40BHKUUS9IMTYNKDD' where id=7; -update noar tt set b2='AA5GR0WPXUI0ETO1HSEO3OZ' where id=7; -update noar ti set b2='AA5GR0WPXUI0ETO1HSEO3OZ' where id=7; -update noar tt set v0='MF5V32X6B9VVCDF' where id=8; -update noar ti set v0='MF5V32X6B9VVCDF' where id=8; -update noar tt set b0='WKAS4XO23A2VIXMW7UX56LGCJHH24T' where id=8; -update noar ti set b0='WKAS4XO23A2VIXMW7UX56LGCJHH24T' where id=8; -update noar tt set v0='40492I' where id=8; -update noar ti set v0='40492I' where id=8; -update noar tt set b1='K2XZKP6YUKJ599MBIULYS' where id=8; -update noar ti set b1='K2XZKP6YUKJ599MBIULYS' where id=8; -update noar tt set v0='AKIQYVM4DN6QAV7HPN905S1LCXZE7' where id=8; -update noar ti set v0='AKIQYVM4DN6QAV7HPN905S1LCXZE7' where id=8; -update noar tt set b2='9W4XY9Y8XCO6I5BWBQG' where id=8; -update noar ti set b2='9W4XY9Y8XCO6I5BWBQG' where id=8; -update noar tt set v0='8ODC8TJ8X32TFC6U6K' where id=9; -update noar ti set v0='8ODC8TJ8X32TFC6U6K' where id=9; -update noar tt set b0='B982RRGEVL02Y91VWCW7' where id=9; -update noar ti set b0='B982RRGEVL02Y91VWCW7' where id=9; -update noar tt set v0='CY' where id=9; -update noar ti set v0='CY' where id=9; -update noar tt set b1='WUS5' where id=9; -update noar ti set b1='WUS5' where id=9; -update noar tt set v0='DB6UV1N9FS9YCN3S' where id=9; -update noar ti set v0='DB6UV1N9FS9YCN3S' where id=9; -update noar tt set b2='2JR32MU3K1L2OY8KW7HU' where id=9; -update noar ti set b2='2JR32MU3K1L2OY8KW7HU' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 mediumblob not null, - b1 mediumblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='0BAHDVEMAF6TXCHRV8RZ' where id=1; -update noar ti set v0='0BAHDVEMAF6TXCHRV8RZ' where id=1; -update noar tt set b0='6W681RWYE9QLQA1SEJ4WFK' where id=1; -update noar ti set b0='6W681RWYE9QLQA1SEJ4WFK' where id=1; -update noar tt set v0='3P24TYJXMVSW1' where id=1; -update noar ti set v0='3P24TYJXMVSW1' where id=1; -update noar tt set b1='K4F6RIK9WB4LCL7XIFDP2XP8IG8XRCV2' where id=1; -update noar ti set b1='K4F6RIK9WB4LCL7XIFDP2XP8IG8XRCV2' where id=1; -update noar tt set v0='YWF7ZMWX1WUXMVUQXZSFQV70D59' where id=1; -update noar ti set v0='YWF7ZMWX1WUXMVUQXZSFQV70D59' where id=1; -update noar tt set b2='YQJN2J5I9IL' where id=1; -update noar ti set b2='YQJN2J5I9IL' where id=1; -update noar tt set v0='S' where id=2; -update noar ti set v0='S' where id=2; -update noar tt set b0='0VM3S2TQIMV9KGQRHO6042353V' where id=2; -update noar ti set b0='0VM3S2TQIMV9KGQRHO6042353V' where id=2; -update noar tt set v0='MH01K96WWUEY06YQA3AJVXDWPLH57' where id=2; -update noar ti set v0='MH01K96WWUEY06YQA3AJVXDWPLH57' where id=2; -update noar tt set b1='VYC8U14504KR3B7U94QMIG' where id=2; -update noar ti set b1='VYC8U14504KR3B7U94QMIG' where id=2; -update noar tt set v0='TTKPMGOB5J4C8ZDJZ5WJ' where id=2; -update noar ti set v0='TTKPMGOB5J4C8ZDJZ5WJ' where id=2; -update noar tt set b2='ZOH0X84S14SV8NUT513W9' where id=2; -update noar ti set b2='ZOH0X84S14SV8NUT513W9' where id=2; -update noar tt set v0='HXJD18J' where id=3; -update noar ti set v0='HXJD18J' where id=3; -update noar tt set b0='0BX' where id=3; -update noar ti set b0='0BX' where id=3; -update noar tt set v0='1' where id=3; -update noar ti set v0='1' where id=3; -update noar tt set b1='96NGGQAJN' where id=3; -update noar ti set b1='96NGGQAJN' where id=3; -update noar tt set v0='MC6CSVS6K1' where id=3; -update noar ti set v0='MC6CSVS6K1' where id=3; -update noar tt set b2='L0O4RE2TBDVJQ6W3N5S1O97E0P2B' where id=3; -update noar ti set b2='L0O4RE2TBDVJQ6W3N5S1O97E0P2B' where id=3; -update noar tt set v0='QF4JB1HEQD2QBB7V8G3E8O8I' where id=4; -update noar ti set v0='QF4JB1HEQD2QBB7V8G3E8O8I' where id=4; -update noar tt set b0='6I8CIW9S3IDV5NGH15SQK6WG7ZIMZGVU' where id=4; -update noar ti set b0='6I8CIW9S3IDV5NGH15SQK6WG7ZIMZGVU' where id=4; -update noar tt set v0='DCR9KRAGB88R2612GK5I7A0YZ8J4D0VD' where id=4; -update noar ti set v0='DCR9KRAGB88R2612GK5I7A0YZ8J4D0VD' where id=4; -update noar tt set b1='NI2C7ZOLRMSM6YGXBS8HPK1VS91PZ5N' where id=4; -update noar ti set b1='NI2C7ZOLRMSM6YGXBS8HPK1VS91PZ5N' where id=4; -update noar tt set v0='5XUO7VXPWMI' where id=4; -update noar ti set v0='5XUO7VXPWMI' where id=4; -update noar tt set b2='75SPATWCF81WH' where id=4; -update noar ti set b2='75SPATWCF81WH' where id=4; -update noar tt set v0='LO3ZCGWS2SG31I0OJDTQ1V0J7' where id=5; -update noar ti set v0='LO3ZCGWS2SG31I0OJDTQ1V0J7' where id=5; -update noar tt set b0='STKLF0T58SM0TNDE8LQ1SCESW3' where id=5; -update noar ti set b0='STKLF0T58SM0TNDE8LQ1SCESW3' where id=5; -update noar tt set v0='OWTAU1BMK3' where id=5; -update noar ti set v0='OWTAU1BMK3' where id=5; -update noar tt set b1='6ZBEU3POBSYDBCXXI' where id=5; -update noar ti set b1='6ZBEU3POBSYDBCXXI' where id=5; -update noar tt set v0='RZ8LS9TCURZQREHXPJC' where id=5; -update noar ti set v0='RZ8LS9TCURZQREHXPJC' where id=5; -update noar tt set b2='JRB2IC86L908' where id=5; -update noar ti set b2='JRB2IC86L908' where id=5; -update noar tt set v0='TX4Z95BP4ZFBM2P5KWOXWV3328QF' where id=6; -update noar ti set v0='TX4Z95BP4ZFBM2P5KWOXWV3328QF' where id=6; -update noar tt set b0='J7D0KN5E8QTPSXC6TG69YTQBKP0EAHN' where id=6; -update noar ti set b0='J7D0KN5E8QTPSXC6TG69YTQBKP0EAHN' where id=6; -update noar tt set v0='VT425GBDCBJHX0DF' where id=6; -update noar ti set v0='VT425GBDCBJHX0DF' where id=6; -update noar tt set b1='B1JP4IR0TVN5KUGN' where id=6; -update noar ti set b1='B1JP4IR0TVN5KUGN' where id=6; -update noar tt set v0='MRM55C4H2Q7ZH8UBLSONG' where id=6; -update noar ti set v0='MRM55C4H2Q7ZH8UBLSONG' where id=6; -update noar tt set b2='QL36ARLN7RQKK8L' where id=6; -update noar ti set b2='QL36ARLN7RQKK8L' where id=6; -update noar tt set v0='Q99C0OIYH65GU' where id=7; -update noar ti set v0='Q99C0OIYH65GU' where id=7; -update noar tt set b0='XDVX0DGI0CTY89ZM' where id=7; -update noar ti set b0='XDVX0DGI0CTY89ZM' where id=7; -update noar tt set v0='ACHAXOTSM8O8NI99' where id=7; -update noar ti set v0='ACHAXOTSM8O8NI99' where id=7; -update noar tt set b1='3JJMYB9CV3' where id=7; -update noar ti set b1='3JJMYB9CV3' where id=7; -update noar tt set v0='MGI4MN0JK78U6C672AM1UL4KV3G2D' where id=7; -update noar ti set v0='MGI4MN0JK78U6C672AM1UL4KV3G2D' where id=7; -update noar tt set b2='WA1UB0KFK' where id=7; -update noar ti set b2='WA1UB0KFK' where id=7; -update noar tt set v0='QJYN' where id=8; -update noar ti set v0='QJYN' where id=8; -update noar tt set b0='DIG7UHHJCFM2UO7OI4I386' where id=8; -update noar ti set b0='DIG7UHHJCFM2UO7OI4I386' where id=8; -update noar tt set v0='T03WQPBFRY625D8QVKQ0NJ0J' where id=8; -update noar ti set v0='T03WQPBFRY625D8QVKQ0NJ0J' where id=8; -update noar tt set b1='61D' where id=8; -update noar ti set b1='61D' where id=8; -update noar tt set v0='HE2FTABS59W' where id=8; -update noar ti set v0='HE2FTABS59W' where id=8; -update noar tt set b2='I95UH4GBSJIYOECBPWORJS8UENPO6LIE' where id=8; -update noar ti set b2='I95UH4GBSJIYOECBPWORJS8UENPO6LIE' where id=8; -update noar tt set v0='M42AB4VQ2ALSM9ACEITW5S' where id=9; -update noar ti set v0='M42AB4VQ2ALSM9ACEITW5S' where id=9; -update noar tt set b0='XNE8LXH4KCO' where id=9; -update noar ti set b0='XNE8LXH4KCO' where id=9; -update noar tt set v0='DW60C619CFATRZHWWYQ' where id=9; -update noar ti set v0='DW60C619CFATRZHWWYQ' where id=9; -update noar tt set b1='HPZYGB9ROV6YKMRFYMRL' where id=9; -update noar ti set b1='HPZYGB9ROV6YKMRFYMRL' where id=9; -update noar tt set v0='VCSXIF5FXB8JJ4K3A8' where id=9; -update noar ti set v0='VCSXIF5FXB8JJ4K3A8' where id=9; -update noar tt set b2='MWNN5' where id=9; -update noar ti set b2='MWNN5' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 mediumblob not null, - b1 mediumblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='H3TPN3DRU0XGIKN2FMSS5AWDSLXM' where id=1; -update noar ti set v0='H3TPN3DRU0XGIKN2FMSS5AWDSLXM' where id=1; -update noar tt set b0='XRX4H3LKY7PBHS8JDR4JM5D04I' where id=1; -update noar ti set b0='XRX4H3LKY7PBHS8JDR4JM5D04I' where id=1; -update noar tt set v0='E14IDYSDQPNLKU41DRZNPRMO2' where id=1; -update noar ti set v0='E14IDYSDQPNLKU41DRZNPRMO2' where id=1; -update noar tt set b1='HI2PJJPAS8' where id=1; -update noar ti set b1='HI2PJJPAS8' where id=1; -update noar tt set v0='HLQ9IBJE4ELQURD9B8L77PEAYY0670Q' where id=1; -update noar ti set v0='HLQ9IBJE4ELQURD9B8L77PEAYY0670Q' where id=1; -update noar tt set b2='PJ' where id=1; -update noar ti set b2='PJ' where id=1; -update noar tt set v0='FTDU0OC1GUNA7SDZHXJ7SPDEC7ZO20' where id=2; -update noar ti set v0='FTDU0OC1GUNA7SDZHXJ7SPDEC7ZO20' where id=2; -update noar tt set b0='ZRGVTEBI4KPJY8E06V' where id=2; -update noar ti set b0='ZRGVTEBI4KPJY8E06V' where id=2; -update noar tt set v0='VGU9UVGXAUOAOXCXZW' where id=2; -update noar ti set v0='VGU9UVGXAUOAOXCXZW' where id=2; -update noar tt set b1='65C9K7YS0ZCLWD' where id=2; -update noar ti set b1='65C9K7YS0ZCLWD' where id=2; -update noar tt set v0='LFWR2B61HLW3Q' where id=2; -update noar ti set v0='LFWR2B61HLW3Q' where id=2; -update noar tt set b2='JEA7LIHL8UDSL3' where id=2; -update noar ti set b2='JEA7LIHL8UDSL3' where id=2; -update noar tt set v0='JXELV8Z' where id=3; -update noar ti set v0='JXELV8Z' where id=3; -update noar tt set b0='98RUG' where id=3; -update noar ti set b0='98RUG' where id=3; -update noar tt set v0='ZZQVTZXL4IRGK' where id=3; -update noar ti set v0='ZZQVTZXL4IRGK' where id=3; -update noar tt set b1='LK0R7FFED8' where id=3; -update noar ti set b1='LK0R7FFED8' where id=3; -update noar tt set v0='HRA69F' where id=3; -update noar ti set v0='HRA69F' where id=3; -update noar tt set b2='ETNHVB7G17WDHSWG5SEOEGP8X5' where id=3; -update noar ti set b2='ETNHVB7G17WDHSWG5SEOEGP8X5' where id=3; -update noar tt set v0='SIY0Z6T64C411KAP626OXUDYOJD9IO' where id=4; -update noar ti set v0='SIY0Z6T64C411KAP626OXUDYOJD9IO' where id=4; -update noar tt set b0='YL6LRM' where id=4; -update noar ti set b0='YL6LRM' where id=4; -update noar tt set v0='BFPCF281ON415AEGCNGUWMNEE' where id=4; -update noar ti set v0='BFPCF281ON415AEGCNGUWMNEE' where id=4; -update noar tt set b1='5W7LZTC25UT1C1RGE' where id=4; -update noar ti set b1='5W7LZTC25UT1C1RGE' where id=4; -update noar tt set v0='1P6IZFJ8SB8YWFSKDHLJ1XLIPU1L' where id=4; -update noar ti set v0='1P6IZFJ8SB8YWFSKDHLJ1XLIPU1L' where id=4; -update noar tt set b2='ZT6' where id=4; -update noar ti set b2='ZT6' where id=4; -update noar tt set v0='61SFKGPZ7RI' where id=5; -update noar ti set v0='61SFKGPZ7RI' where id=5; -update noar tt set b0='C13THBYNTEWVXXX' where id=5; -update noar ti set b0='C13THBYNTEWVXXX' where id=5; -update noar tt set v0='NI9OREOUY0XPPP8S86G49Q' where id=5; -update noar ti set v0='NI9OREOUY0XPPP8S86G49Q' where id=5; -update noar tt set b1='Z7XN29W7Y' where id=5; -update noar ti set b1='Z7XN29W7Y' where id=5; -update noar tt set v0='8P3B048Y6X6EGUC6A6C1EN2R9SIARW' where id=5; -update noar ti set v0='8P3B048Y6X6EGUC6A6C1EN2R9SIARW' where id=5; -update noar tt set b2='62KSURH9XUQCN8E5FKTPVY3TUIC56VUW' where id=5; -update noar ti set b2='62KSURH9XUQCN8E5FKTPVY3TUIC56VUW' where id=5; -update noar tt set v0='5HVQIRGO' where id=6; -update noar ti set v0='5HVQIRGO' where id=6; -update noar tt set b0='AN2GWY2ANAVLC0MPS' where id=6; -update noar ti set b0='AN2GWY2ANAVLC0MPS' where id=6; -update noar tt set v0='FX1SAZS7FNLC5SLEU' where id=6; -update noar ti set v0='FX1SAZS7FNLC5SLEU' where id=6; -update noar tt set b1='ZUCS3JKAZ54F8TIBWRD2JFG43VGJ9' where id=6; -update noar ti set b1='ZUCS3JKAZ54F8TIBWRD2JFG43VGJ9' where id=6; -update noar tt set v0='GBNOLS59XYLDBFY8ZIT2ASYMD5MVEJOQ' where id=6; -update noar ti set v0='GBNOLS59XYLDBFY8ZIT2ASYMD5MVEJOQ' where id=6; -update noar tt set b2='K72OXPLKADZMIC5B1APJ8AA4SX' where id=6; -update noar ti set b2='K72OXPLKADZMIC5B1APJ8AA4SX' where id=6; -update noar tt set v0='KQBMDXVJJ0BM3S' where id=7; -update noar ti set v0='KQBMDXVJJ0BM3S' where id=7; -update noar tt set b0='CJLHH932LR1NWIT' where id=7; -update noar ti set b0='CJLHH932LR1NWIT' where id=7; -update noar tt set v0='R0VKSU' where id=7; -update noar ti set v0='R0VKSU' where id=7; -update noar tt set b1='E7WLWME8XHMA' where id=7; -update noar ti set b1='E7WLWME8XHMA' where id=7; -update noar tt set v0='SXK7F33NM5KD09' where id=7; -update noar ti set v0='SXK7F33NM5KD09' where id=7; -update noar tt set b2='K7UQ70V1P7NC7JO05F84' where id=7; -update noar ti set b2='K7UQ70V1P7NC7JO05F84' where id=7; -update noar tt set v0='B51VK1I' where id=8; -update noar ti set v0='B51VK1I' where id=8; -update noar tt set b0='PNO2' where id=8; -update noar ti set b0='PNO2' where id=8; -update noar tt set v0='XGGLAK4D7J89F' where id=8; -update noar ti set v0='XGGLAK4D7J89F' where id=8; -update noar tt set b1='ZTJ4' where id=8; -update noar ti set b1='ZTJ4' where id=8; -update noar tt set v0='8N7YU77T1DQVG6' where id=8; -update noar ti set v0='8N7YU77T1DQVG6' where id=8; -update noar tt set b2='JKJNOK108967KI694YJ3GMXN' where id=8; -update noar ti set b2='JKJNOK108967KI694YJ3GMXN' where id=8; -update noar tt set v0='5VSYNDN' where id=9; -update noar ti set v0='5VSYNDN' where id=9; -update noar tt set b0='97I9SQW6UACXU' where id=9; -update noar ti set b0='97I9SQW6UACXU' where id=9; -update noar tt set v0='6O7SAIM4O7WBH0CRK3VJ3RDIG' where id=9; -update noar ti set v0='6O7SAIM4O7WBH0CRK3VJ3RDIG' where id=9; -update noar tt set b1='GW5ZRV' where id=9; -update noar ti set b1='GW5ZRV' where id=9; -update noar tt set v0='49AEMDJRGYULPQ6H7Z98B2' where id=9; -update noar ti set v0='49AEMDJRGYULPQ6H7Z98B2' where id=9; -update noar tt set b2='S6AV9M95RBLBB6B1HTED9AT5CPLYT406' where id=9; -update noar ti set b2='S6AV9M95RBLBB6B1HTED9AT5CPLYT406' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 mediumblob null, - b1 mediumblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='G3JVL6F5LUIGOVJOV7XKIPINF8OTVVQ' where id=1; -update noar ti set v0='G3JVL6F5LUIGOVJOV7XKIPINF8OTVVQ' where id=1; -update noar tt set b0='5DHOY458T59FUCJF477T2EEBT8' where id=1; -update noar ti set b0='5DHOY458T59FUCJF477T2EEBT8' where id=1; -update noar tt set v0='F7J8497T' where id=1; -update noar ti set v0='F7J8497T' where id=1; -update noar tt set b1='6DCRKO' where id=1; -update noar ti set b1='6DCRKO' where id=1; -update noar tt set v0='2IT' where id=1; -update noar ti set v0='2IT' where id=1; -update noar tt set b2='ZMFJR3VBCSRKRNVWK20GDSORC4J' where id=1; -update noar ti set b2='ZMFJR3VBCSRKRNVWK20GDSORC4J' where id=1; -update noar tt set v0='K50NZH9' where id=2; -update noar ti set v0='K50NZH9' where id=2; -update noar tt set b0='5FHTDP' where id=2; -update noar ti set b0='5FHTDP' where id=2; -update noar tt set v0='DB73JMV8GO1JINNN1TJ0QIQC' where id=2; -update noar ti set v0='DB73JMV8GO1JINNN1TJ0QIQC' where id=2; -update noar tt set b1='3VDFPGI6KC2V7411W8R5GK1P8U31' where id=2; -update noar ti set b1='3VDFPGI6KC2V7411W8R5GK1P8U31' where id=2; -update noar tt set v0='S8Z8JGZ8BP8' where id=2; -update noar ti set v0='S8Z8JGZ8BP8' where id=2; -update noar tt set b2='3Q8ZNSY74C1' where id=2; -update noar ti set b2='3Q8ZNSY74C1' where id=2; -update noar tt set v0='3YX9721VVEJDUDA' where id=3; -update noar ti set v0='3YX9721VVEJDUDA' where id=3; -update noar tt set b0='JH8AS' where id=3; -update noar ti set b0='JH8AS' where id=3; -update noar tt set v0='29WHSNKACBSE2JKTQ9FCIVNPSFS6AQ5A' where id=3; -update noar ti set v0='29WHSNKACBSE2JKTQ9FCIVNPSFS6AQ5A' where id=3; -update noar tt set b1='SEKWFEUG96PK' where id=3; -update noar ti set b1='SEKWFEUG96PK' where id=3; -update noar tt set v0='GQS651EF8DJ41CDK2TZAITF' where id=3; -update noar ti set v0='GQS651EF8DJ41CDK2TZAITF' where id=3; -update noar tt set b2='CSEAJ4G5WAKF6JHIWKU' where id=3; -update noar ti set b2='CSEAJ4G5WAKF6JHIWKU' where id=3; -update noar tt set v0='T3JKP' where id=4; -update noar ti set v0='T3JKP' where id=4; -update noar tt set b0='NOHMKZ1WS' where id=4; -update noar ti set b0='NOHMKZ1WS' where id=4; -update noar tt set v0='FADTOTBMZ6' where id=4; -update noar ti set v0='FADTOTBMZ6' where id=4; -update noar tt set b1='X618XFZRZ' where id=4; -update noar ti set b1='X618XFZRZ' where id=4; -update noar tt set v0='7WCT37YR' where id=4; -update noar ti set v0='7WCT37YR' where id=4; -update noar tt set b2='DN8CZ3FLXM' where id=4; -update noar ti set b2='DN8CZ3FLXM' where id=4; -update noar tt set v0='MDC60H' where id=5; -update noar ti set v0='MDC60H' where id=5; -update noar tt set b0='HLBZP30B1F8HXDJ8VM1VV5JN2QM' where id=5; -update noar ti set b0='HLBZP30B1F8HXDJ8VM1VV5JN2QM' where id=5; -update noar tt set v0='4LHRO5LIG9GTI6XWHNM' where id=5; -update noar ti set v0='4LHRO5LIG9GTI6XWHNM' where id=5; -update noar tt set b1='A42N14FN6ZUFJPG25N7' where id=5; -update noar ti set b1='A42N14FN6ZUFJPG25N7' where id=5; -update noar tt set v0='FSTR36P4I756P5AOTMPKMBW77976OOY' where id=5; -update noar ti set v0='FSTR36P4I756P5AOTMPKMBW77976OOY' where id=5; -update noar tt set b2='B26H7JBWQ46WY66JOVMXDB2T4H0E' where id=5; -update noar ti set b2='B26H7JBWQ46WY66JOVMXDB2T4H0E' where id=5; -update noar tt set v0='5ER9SBYR474TI' where id=6; -update noar ti set v0='5ER9SBYR474TI' where id=6; -update noar tt set b0='ELHTM5FH345EH12P07IL0HM7XC8GSBM3' where id=6; -update noar ti set b0='ELHTM5FH345EH12P07IL0HM7XC8GSBM3' where id=6; -update noar tt set v0='6I5N96WQPOJUA26UKYGJYN' where id=6; -update noar ti set v0='6I5N96WQPOJUA26UKYGJYN' where id=6; -update noar tt set b1='B669WKZJ5' where id=6; -update noar ti set b1='B669WKZJ5' where id=6; -update noar tt set v0='PLHRL5ENXYTLELOPPWT' where id=6; -update noar ti set v0='PLHRL5ENXYTLELOPPWT' where id=6; -update noar tt set b2='NUPN5ITY9WVM5KHUSC1R' where id=6; -update noar ti set b2='NUPN5ITY9WVM5KHUSC1R' where id=6; -update noar tt set v0='3VEMKM7M58PWF6TYMXMGGSHC2A' where id=7; -update noar ti set v0='3VEMKM7M58PWF6TYMXMGGSHC2A' where id=7; -update noar tt set b0='OCDOMAN43X9TWS87LT5HAJZF' where id=7; -update noar ti set b0='OCDOMAN43X9TWS87LT5HAJZF' where id=7; -update noar tt set v0='L38LX68UP48MBJO0FN2JZHDEUY' where id=7; -update noar ti set v0='L38LX68UP48MBJO0FN2JZHDEUY' where id=7; -update noar tt set b1='XE845LW8Y' where id=7; -update noar ti set b1='XE845LW8Y' where id=7; -update noar tt set v0='YU4BP3ST769M9ZEP' where id=7; -update noar ti set v0='YU4BP3ST769M9ZEP' where id=7; -update noar tt set b2='GWQJ' where id=7; -update noar ti set b2='GWQJ' where id=7; -update noar tt set v0='LEAT3THR6XNFG' where id=8; -update noar ti set v0='LEAT3THR6XNFG' where id=8; -update noar tt set b0='KEHBDLF75SC4X3KLT' where id=8; -update noar ti set b0='KEHBDLF75SC4X3KLT' where id=8; -update noar tt set v0='G' where id=8; -update noar ti set v0='G' where id=8; -update noar tt set b1='3PTN937' where id=8; -update noar ti set b1='3PTN937' where id=8; -update noar tt set v0='EJYW79RK0GN653T7LD02B3RYRVBS00W' where id=8; -update noar ti set v0='EJYW79RK0GN653T7LD02B3RYRVBS00W' where id=8; -update noar tt set b2='EV79D96U3W' where id=8; -update noar ti set b2='EV79D96U3W' where id=8; -update noar tt set v0='31J2F45RFWPSMUELRIH1KG' where id=9; -update noar ti set v0='31J2F45RFWPSMUELRIH1KG' where id=9; -update noar tt set b0='K56NDM1AELA0TBO1Y' where id=9; -update noar ti set b0='K56NDM1AELA0TBO1Y' where id=9; -update noar tt set v0='P812SBQB6NX6N5H7238C2C' where id=9; -update noar ti set v0='P812SBQB6NX6N5H7238C2C' where id=9; -update noar tt set b1='ZNK04XXCLH7TT414M9TBSUZ7FFQEVXWO' where id=9; -update noar ti set b1='ZNK04XXCLH7TT414M9TBSUZ7FFQEVXWO' where id=9; -update noar tt set v0='M7JE77EBR4ZCJS86WFQM5DZ6XV67' where id=9; -update noar ti set v0='M7JE77EBR4ZCJS86WFQM5DZ6XV67' where id=9; -update noar tt set b2='SE5XDPPMCIFPJRA21NUUUCU45M1B' where id=9; -update noar ti set b2='SE5XDPPMCIFPJRA21NUUUCU45M1B' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 mediumblob null, - b1 mediumblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='CK8A595P72N6P0OL4S' where id=1; -update noar ti set v0='CK8A595P72N6P0OL4S' where id=1; -update noar tt set b0='J7O19GQZK52JRH9211' where id=1; -update noar ti set b0='J7O19GQZK52JRH9211' where id=1; -update noar tt set v0='QYPTT3WQBKIL8QF' where id=1; -update noar ti set v0='QYPTT3WQBKIL8QF' where id=1; -update noar tt set b1='HQ9CUW8ZQ96SZCC0E77W' where id=1; -update noar ti set b1='HQ9CUW8ZQ96SZCC0E77W' where id=1; -update noar tt set v0='OO8PDNF7H3GVKL5U0YQO8ETO7N32HP' where id=1; -update noar ti set v0='OO8PDNF7H3GVKL5U0YQO8ETO7N32HP' where id=1; -update noar tt set b2='8I6PRR2IY415NNT5M544QAP60CM7' where id=1; -update noar ti set b2='8I6PRR2IY415NNT5M544QAP60CM7' where id=1; -update noar tt set v0='5YVCJ5AZVA17EFOD0P0P7CZ939P4T' where id=2; -update noar ti set v0='5YVCJ5AZVA17EFOD0P0P7CZ939P4T' where id=2; -update noar tt set b0='H2VH' where id=2; -update noar ti set b0='H2VH' where id=2; -update noar tt set v0='QF017CHXF2CGB6VEDIU7K7NABF2GXX' where id=2; -update noar ti set v0='QF017CHXF2CGB6VEDIU7K7NABF2GXX' where id=2; -update noar tt set b1='L7Z8' where id=2; -update noar ti set b1='L7Z8' where id=2; -update noar tt set v0='Y02JEIX25Q43038ASD0AG4JCKMK62OBV' where id=2; -update noar ti set v0='Y02JEIX25Q43038ASD0AG4JCKMK62OBV' where id=2; -update noar tt set b2='EHON58K2C' where id=2; -update noar ti set b2='EHON58K2C' where id=2; -update noar tt set v0='3XHE45N1F3RXNCNEH2MP' where id=3; -update noar ti set v0='3XHE45N1F3RXNCNEH2MP' where id=3; -update noar tt set b0='4VW8YCBJH0AFCXD' where id=3; -update noar ti set b0='4VW8YCBJH0AFCXD' where id=3; -update noar tt set v0='0FGVW3' where id=3; -update noar ti set v0='0FGVW3' where id=3; -update noar tt set b1='L60ZXJ' where id=3; -update noar ti set b1='L60ZXJ' where id=3; -update noar tt set v0='ZR863418A2MYJRI5SWKECGR85X' where id=3; -update noar ti set v0='ZR863418A2MYJRI5SWKECGR85X' where id=3; -update noar tt set b2='QRXY106JJJXT7BC7' where id=3; -update noar ti set b2='QRXY106JJJXT7BC7' where id=3; -update noar tt set v0='KXTKUTFBHZ6JYXXOVJETN5' where id=4; -update noar ti set v0='KXTKUTFBHZ6JYXXOVJETN5' where id=4; -update noar tt set b0='C' where id=4; -update noar ti set b0='C' where id=4; -update noar tt set v0='PY' where id=4; -update noar ti set v0='PY' where id=4; -update noar tt set b1='43N2' where id=4; -update noar ti set b1='43N2' where id=4; -update noar tt set v0='QKL4P3Q8E00IC9BNL' where id=4; -update noar ti set v0='QKL4P3Q8E00IC9BNL' where id=4; -update noar tt set b2='ZKR2B48NE4' where id=4; -update noar ti set b2='ZKR2B48NE4' where id=4; -update noar tt set v0='7UTT0GWR' where id=5; -update noar ti set v0='7UTT0GWR' where id=5; -update noar tt set b0='GBPSWEUC07S8CEQK6F9F4C901NU' where id=5; -update noar ti set b0='GBPSWEUC07S8CEQK6F9F4C901NU' where id=5; -update noar tt set v0='89UD0Z2ZC9T1TZTGGWHENLYN1D85J' where id=5; -update noar ti set v0='89UD0Z2ZC9T1TZTGGWHENLYN1D85J' where id=5; -update noar tt set b1='5XU3NUX0CTN4DG09ZNH' where id=5; -update noar ti set b1='5XU3NUX0CTN4DG09ZNH' where id=5; -update noar tt set v0='LALQ' where id=5; -update noar ti set v0='LALQ' where id=5; -update noar tt set b2='SH' where id=5; -update noar ti set b2='SH' where id=5; -update noar tt set v0='R6JLQZGKWR81SZ' where id=6; -update noar ti set v0='R6JLQZGKWR81SZ' where id=6; -update noar tt set b0='237UZM1ZBF6FRKWIUBB8NJME' where id=6; -update noar ti set b0='237UZM1ZBF6FRKWIUBB8NJME' where id=6; -update noar tt set v0='26U' where id=6; -update noar ti set v0='26U' where id=6; -update noar tt set b1='I1AR4ITBCZM7156AZT3CWE60XJME' where id=6; -update noar ti set b1='I1AR4ITBCZM7156AZT3CWE60XJME' where id=6; -update noar tt set v0='SAO0AZ6GBN5QSQIFF1A7' where id=6; -update noar ti set v0='SAO0AZ6GBN5QSQIFF1A7' where id=6; -update noar tt set b2='X60FUXSPG9YLJN3DLI9C0E0' where id=6; -update noar ti set b2='X60FUXSPG9YLJN3DLI9C0E0' where id=6; -update noar tt set v0='9A36ANO' where id=7; -update noar ti set v0='9A36ANO' where id=7; -update noar tt set b0='1GMKUTQSGOOHV3R2YXKD9ITUNH5' where id=7; -update noar ti set b0='1GMKUTQSGOOHV3R2YXKD9ITUNH5' where id=7; -update noar tt set v0='FYLAAPTKRR6ZYTPBUCMQI' where id=7; -update noar ti set v0='FYLAAPTKRR6ZYTPBUCMQI' where id=7; -update noar tt set b1='Q1XEWKNBFERKC9' where id=7; -update noar ti set b1='Q1XEWKNBFERKC9' where id=7; -update noar tt set v0='NMOYYKNGCKC52TXEY2EO2WHLBPX9L9' where id=7; -update noar ti set v0='NMOYYKNGCKC52TXEY2EO2WHLBPX9L9' where id=7; -update noar tt set b2='9Z9CFXP2RLDIZX18MHIYODG0N0T7' where id=7; -update noar ti set b2='9Z9CFXP2RLDIZX18MHIYODG0N0T7' where id=7; -update noar tt set v0='VFXDZSP5SV' where id=8; -update noar ti set v0='VFXDZSP5SV' where id=8; -update noar tt set b0='DCFZLAGM7VK0G' where id=8; -update noar ti set b0='DCFZLAGM7VK0G' where id=8; -update noar tt set v0='NZPFG9XUIP7E47FJ0BZO0HCO8KDVZI3' where id=8; -update noar ti set v0='NZPFG9XUIP7E47FJ0BZO0HCO8KDVZI3' where id=8; -update noar tt set b1='HYIUARFCUAQK0LECUQXMI5GZ6ECUO7J' where id=8; -update noar ti set b1='HYIUARFCUAQK0LECUQXMI5GZ6ECUO7J' where id=8; -update noar tt set v0='CM' where id=8; -update noar ti set v0='CM' where id=8; -update noar tt set b2='O8RWVET0PPHFRWEQ3' where id=8; -update noar ti set b2='O8RWVET0PPHFRWEQ3' where id=8; -update noar tt set v0='UV4H4JDL39' where id=9; -update noar ti set v0='UV4H4JDL39' where id=9; -update noar tt set b0='ORYI7OW' where id=9; -update noar ti set b0='ORYI7OW' where id=9; -update noar tt set v0='Z2JRH4QP5Z4LYVM1U0C1' where id=9; -update noar ti set v0='Z2JRH4QP5Z4LYVM1U0C1' where id=9; -update noar tt set b1='51SMCI56FBSZTR1X2EIFCVWZHREK' where id=9; -update noar ti set b1='51SMCI56FBSZTR1X2EIFCVWZHREK' where id=9; -update noar tt set v0='UG2AUGUD6P92US' where id=9; -update noar ti set v0='UG2AUGUD6P92US' where id=9; -update noar tt set b2='KXW83HP0OM4TVPRR3OJKPX2VWZXBL' where id=9; -update noar ti set b2='KXW83HP0OM4TVPRR3OJKPX2VWZXBL' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 mediumblob not null, - b1 mediumblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='JKNAQNP4WZ9VV6OASGH5' where id=1; -update noar ti set v0='JKNAQNP4WZ9VV6OASGH5' where id=1; -update noar tt set b0='0Q811XJSVP' where id=1; -update noar ti set b0='0Q811XJSVP' where id=1; -update noar tt set v0='0TJ92Z9GHE5VEFS2IZOIMMR' where id=1; -update noar ti set v0='0TJ92Z9GHE5VEFS2IZOIMMR' where id=1; -update noar tt set b1='DX0EWRZ4W4YCMYXVZ5O7OZE46WAN9YUP' where id=1; -update noar ti set b1='DX0EWRZ4W4YCMYXVZ5O7OZE46WAN9YUP' where id=1; -update noar tt set v0='G7ASUHP0EJGKN5QLO78QR12B' where id=1; -update noar ti set v0='G7ASUHP0EJGKN5QLO78QR12B' where id=1; -update noar tt set b2='UNTAPML9' where id=1; -update noar ti set b2='UNTAPML9' where id=1; -update noar tt set v0='H1G1UZPE15HKKROLKXWIFYE' where id=2; -update noar ti set v0='H1G1UZPE15HKKROLKXWIFYE' where id=2; -update noar tt set b0='L9X48NG' where id=2; -update noar ti set b0='L9X48NG' where id=2; -update noar tt set v0='5UCSZZCCYQ' where id=2; -update noar ti set v0='5UCSZZCCYQ' where id=2; -update noar tt set b1='MB6A2GQSXVR59TCXRCX4' where id=2; -update noar ti set b1='MB6A2GQSXVR59TCXRCX4' where id=2; -update noar tt set v0='M5SAO36OAJM9IIQ37D' where id=2; -update noar ti set v0='M5SAO36OAJM9IIQ37D' where id=2; -update noar tt set b2='Q1HKK3' where id=2; -update noar ti set b2='Q1HKK3' where id=2; -update noar tt set v0='J6MA' where id=3; -update noar ti set v0='J6MA' where id=3; -update noar tt set b0='UZI0FZJX2A0OUUI0V' where id=3; -update noar ti set b0='UZI0FZJX2A0OUUI0V' where id=3; -update noar tt set v0='IAR8ESMFN3Y6UPCCCPHAKFFRYB' where id=3; -update noar ti set v0='IAR8ESMFN3Y6UPCCCPHAKFFRYB' where id=3; -update noar tt set b1='8FFELU8R14UWY8WJEA8EC27W3O15BS9C' where id=3; -update noar ti set b1='8FFELU8R14UWY8WJEA8EC27W3O15BS9C' where id=3; -update noar tt set v0='7ODYWRSK1BZDX1AL66Q3BONXGK5W' where id=3; -update noar ti set v0='7ODYWRSK1BZDX1AL66Q3BONXGK5W' where id=3; -update noar tt set b2='L9A4N5AWUYQV92BS70TV9LRUW71' where id=3; -update noar ti set b2='L9A4N5AWUYQV92BS70TV9LRUW71' where id=3; -update noar tt set v0='OLIBLMY4IN28GHAA2QN' where id=4; -update noar ti set v0='OLIBLMY4IN28GHAA2QN' where id=4; -update noar tt set b0='ROUA8LL7' where id=4; -update noar ti set b0='ROUA8LL7' where id=4; -update noar tt set v0='T033JU8NH1PVSVG9HOJV' where id=4; -update noar ti set v0='T033JU8NH1PVSVG9HOJV' where id=4; -update noar tt set b1='2C6T' where id=4; -update noar ti set b1='2C6T' where id=4; -update noar tt set v0='XXV7025GRIS8' where id=4; -update noar ti set v0='XXV7025GRIS8' where id=4; -update noar tt set b2='40VP9TDL' where id=4; -update noar ti set b2='40VP9TDL' where id=4; -update noar tt set v0='S' where id=5; -update noar ti set v0='S' where id=5; -update noar tt set b0='AA9PFDK3DJWQZP' where id=5; -update noar ti set b0='AA9PFDK3DJWQZP' where id=5; -update noar tt set v0='YK7CCBUDXR' where id=5; -update noar ti set v0='YK7CCBUDXR' where id=5; -update noar tt set b1='FAHYBOK7WST5OH1WGJG053LW9C9' where id=5; -update noar ti set b1='FAHYBOK7WST5OH1WGJG053LW9C9' where id=5; -update noar tt set v0='8SG1MPK9JNAZ90O3KTL' where id=5; -update noar ti set v0='8SG1MPK9JNAZ90O3KTL' where id=5; -update noar tt set b2='JTJ4S5' where id=5; -update noar ti set b2='JTJ4S5' where id=5; -update noar tt set v0='9YXCB' where id=6; -update noar ti set v0='9YXCB' where id=6; -update noar tt set b0='67MBNZG2H83' where id=6; -update noar ti set b0='67MBNZG2H83' where id=6; -update noar tt set v0='5MUB5WMI8O' where id=6; -update noar ti set v0='5MUB5WMI8O' where id=6; -update noar tt set b1='K8501YN77P2PQ' where id=6; -update noar ti set b1='K8501YN77P2PQ' where id=6; -update noar tt set v0='K6IUW4DXQEBY9BSKVO8R4D' where id=6; -update noar ti set v0='K6IUW4DXQEBY9BSKVO8R4D' where id=6; -update noar tt set b2='DBBHQMOIZ4DIWKSE0JRUACSQZOPPUW28' where id=6; -update noar ti set b2='DBBHQMOIZ4DIWKSE0JRUACSQZOPPUW28' where id=6; -update noar tt set v0='C7KLRM1NQYDVU9IJYR' where id=7; -update noar ti set v0='C7KLRM1NQYDVU9IJYR' where id=7; -update noar tt set b0='17B18IBW88F0FCN065LYHAZDS6DFHJ' where id=7; -update noar ti set b0='17B18IBW88F0FCN065LYHAZDS6DFHJ' where id=7; -update noar tt set v0='QPAGZE3ZJTG0D7ANB4FBDGMX' where id=7; -update noar ti set v0='QPAGZE3ZJTG0D7ANB4FBDGMX' where id=7; -update noar tt set b1='XSGF4C3YXBD927GJNUN' where id=7; -update noar ti set b1='XSGF4C3YXBD927GJNUN' where id=7; -update noar tt set v0='Q1JIN8ZT' where id=7; -update noar ti set v0='Q1JIN8ZT' where id=7; -update noar tt set b2='0V72PNGG73CY' where id=7; -update noar ti set b2='0V72PNGG73CY' where id=7; -update noar tt set v0='RHLAQ8SV' where id=8; -update noar ti set v0='RHLAQ8SV' where id=8; -update noar tt set b0='K5C5I2W8AMI9NF9NMWRO' where id=8; -update noar ti set b0='K5C5I2W8AMI9NF9NMWRO' where id=8; -update noar tt set v0='YID3V' where id=8; -update noar ti set v0='YID3V' where id=8; -update noar tt set b1='KWMZJ' where id=8; -update noar ti set b1='KWMZJ' where id=8; -update noar tt set v0='GP4X' where id=8; -update noar ti set v0='GP4X' where id=8; -update noar tt set b2='8PI6RRBDDVIZ342W35RVJBY2' where id=8; -update noar ti set b2='8PI6RRBDDVIZ342W35RVJBY2' where id=8; -update noar tt set v0='06I9GWIQM3NFUJEJ0A9VE0KIYMKA4' where id=9; -update noar ti set v0='06I9GWIQM3NFUJEJ0A9VE0KIYMKA4' where id=9; -update noar tt set b0='F2AUP44P7EOZ10177HOB9T4N' where id=9; -update noar ti set b0='F2AUP44P7EOZ10177HOB9T4N' where id=9; -update noar tt set v0='AXQPXAHFK' where id=9; -update noar ti set v0='AXQPXAHFK' where id=9; -update noar tt set b1='IJP5EZO9JW1KMEJ8PQF' where id=9; -update noar ti set b1='IJP5EZO9JW1KMEJ8PQF' where id=9; -update noar tt set v0='OXPWSD3WP4GXVJ' where id=9; -update noar ti set v0='OXPWSD3WP4GXVJ' where id=9; -update noar tt set b2='E2QYLAU9USSLI4YIGCW3QFYMGVG' where id=9; -update noar ti set b2='E2QYLAU9USSLI4YIGCW3QFYMGVG' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 mediumblob not null, - b1 mediumblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='WLBAV4077MELIJ5HWJH70J03' where id=1; -update noar ti set v0='WLBAV4077MELIJ5HWJH70J03' where id=1; -update noar tt set b0='KQS' where id=1; -update noar ti set b0='KQS' where id=1; -update noar tt set v0='YU03X2GVVITELQYT9J1IKYOL6W3VZ' where id=1; -update noar ti set v0='YU03X2GVVITELQYT9J1IKYOL6W3VZ' where id=1; -update noar tt set b1='59B1WBBTEGKNT263OZ4IL9R32A6YDZZ3' where id=1; -update noar ti set b1='59B1WBBTEGKNT263OZ4IL9R32A6YDZZ3' where id=1; -update noar tt set v0='TKG645' where id=1; -update noar ti set v0='TKG645' where id=1; -update noar tt set b2='KOBHB4D2GT28QYBD70T4SGVU' where id=1; -update noar ti set b2='KOBHB4D2GT28QYBD70T4SGVU' where id=1; -update noar tt set v0='A1P9KN' where id=2; -update noar ti set v0='A1P9KN' where id=2; -update noar tt set b0='A7FNK' where id=2; -update noar ti set b0='A7FNK' where id=2; -update noar tt set v0='HQ5FNSCF2772N544PY57GIOL2Q3RWVBY' where id=2; -update noar ti set v0='HQ5FNSCF2772N544PY57GIOL2Q3RWVBY' where id=2; -update noar tt set b1='3C9XJOW6BMZYSEJ0FOGYE2YCZ' where id=2; -update noar ti set b1='3C9XJOW6BMZYSEJ0FOGYE2YCZ' where id=2; -update noar tt set v0='UYWFBTP60GXKJL9OS52PHFM6SS' where id=2; -update noar ti set v0='UYWFBTP60GXKJL9OS52PHFM6SS' where id=2; -update noar tt set b2='PPEAK' where id=2; -update noar ti set b2='PPEAK' where id=2; -update noar tt set v0='INIDZFWSJSG95SVE' where id=3; -update noar ti set v0='INIDZFWSJSG95SVE' where id=3; -update noar tt set b0='EI893KPUOL6VWUA' where id=3; -update noar ti set b0='EI893KPUOL6VWUA' where id=3; -update noar tt set v0='K4P51E7' where id=3; -update noar ti set v0='K4P51E7' where id=3; -update noar tt set b1='0ZYXW7RES' where id=3; -update noar ti set b1='0ZYXW7RES' where id=3; -update noar tt set v0='VUPVR1JZYCR1LOMCKHAHZBRZMGS6L6O8' where id=3; -update noar ti set v0='VUPVR1JZYCR1LOMCKHAHZBRZMGS6L6O8' where id=3; -update noar tt set b2='Q6MR070B4AJD12' where id=3; -update noar ti set b2='Q6MR070B4AJD12' where id=3; -update noar tt set v0='WVDN5W' where id=4; -update noar ti set v0='WVDN5W' where id=4; -update noar tt set b0='8N4JGT2EVQVOGELBN1PNF5NGF55HNNZR' where id=4; -update noar ti set b0='8N4JGT2EVQVOGELBN1PNF5NGF55HNNZR' where id=4; -update noar tt set v0='OF3Q0Q64WV7JSJBJVEJ2104SD1HK' where id=4; -update noar ti set v0='OF3Q0Q64WV7JSJBJVEJ2104SD1HK' where id=4; -update noar tt set b1='K363TWC4' where id=4; -update noar ti set b1='K363TWC4' where id=4; -update noar tt set v0='PAA5JMZPSTM9XS3LI5KRXK2TCP3K6P2S' where id=4; -update noar ti set v0='PAA5JMZPSTM9XS3LI5KRXK2TCP3K6P2S' where id=4; -update noar tt set b2='6JBS4YIV992S69JTTS' where id=4; -update noar ti set b2='6JBS4YIV992S69JTTS' where id=4; -update noar tt set v0='PZJOGPY71EHNFVTQCX619HCAPX' where id=5; -update noar ti set v0='PZJOGPY71EHNFVTQCX619HCAPX' where id=5; -update noar tt set b0='G8C81ZI5DFATD51J77SRMK3C5OXYSH' where id=5; -update noar ti set b0='G8C81ZI5DFATD51J77SRMK3C5OXYSH' where id=5; -update noar tt set v0='TSFSPH15HO918AVUVGDYUOKIXF' where id=5; -update noar ti set v0='TSFSPH15HO918AVUVGDYUOKIXF' where id=5; -update noar tt set b1='3XFPNYCBTAJ' where id=5; -update noar ti set b1='3XFPNYCBTAJ' where id=5; -update noar tt set v0='AN7Q9HAQDQDGBES0HZY2T1SJ23CN1I' where id=5; -update noar ti set v0='AN7Q9HAQDQDGBES0HZY2T1SJ23CN1I' where id=5; -update noar tt set b2='CLFMGOM' where id=5; -update noar ti set b2='CLFMGOM' where id=5; -update noar tt set v0='OXH3FWIQMICPGNA' where id=6; -update noar ti set v0='OXH3FWIQMICPGNA' where id=6; -update noar tt set b0='X' where id=6; -update noar ti set b0='X' where id=6; -update noar tt set v0='X41JEBA' where id=6; -update noar ti set v0='X41JEBA' where id=6; -update noar tt set b1='3P7YN4Z' where id=6; -update noar ti set b1='3P7YN4Z' where id=6; -update noar tt set v0='JJMRWJ9RQTEU8J' where id=6; -update noar ti set v0='JJMRWJ9RQTEU8J' where id=6; -update noar tt set b2='JQFZI9YK1B2ZUNPV3IJ' where id=6; -update noar ti set b2='JQFZI9YK1B2ZUNPV3IJ' where id=6; -update noar tt set v0='N8DKRT7VE7' where id=7; -update noar ti set v0='N8DKRT7VE7' where id=7; -update noar tt set b0='WU8QRNQXXXXI0GQZEP47Z47E83FQS' where id=7; -update noar ti set b0='WU8QRNQXXXXI0GQZEP47Z47E83FQS' where id=7; -update noar tt set v0='JGCT4XA8OX9IOZ3AN42J' where id=7; -update noar ti set v0='JGCT4XA8OX9IOZ3AN42J' where id=7; -update noar tt set b1='LBGEXL1XCNWU3APRT6V1B9MFYJ9768VE' where id=7; -update noar ti set b1='LBGEXL1XCNWU3APRT6V1B9MFYJ9768VE' where id=7; -update noar tt set v0='6WKZ7' where id=7; -update noar ti set v0='6WKZ7' where id=7; -update noar tt set b2='AQM8T' where id=7; -update noar ti set b2='AQM8T' where id=7; -update noar tt set v0='YLY8' where id=8; -update noar ti set v0='YLY8' where id=8; -update noar tt set b0='SXC956LGDQHNHN1A7Q0A34H' where id=8; -update noar ti set b0='SXC956LGDQHNHN1A7Q0A34H' where id=8; -update noar tt set v0='MLJB' where id=8; -update noar ti set v0='MLJB' where id=8; -update noar tt set b1='CENHWRLIF1KFHBRJ32W1RC5ZMPSB36O' where id=8; -update noar ti set b1='CENHWRLIF1KFHBRJ32W1RC5ZMPSB36O' where id=8; -update noar tt set v0='PP380IR' where id=8; -update noar ti set v0='PP380IR' where id=8; -update noar tt set b2='K8FGDEH324GBTAVNB49RWW9' where id=8; -update noar ti set b2='K8FGDEH324GBTAVNB49RWW9' where id=8; -update noar tt set v0='OZTL03EGGAXV8L' where id=9; -update noar ti set v0='OZTL03EGGAXV8L' where id=9; -update noar tt set b0='3VOM4MAX' where id=9; -update noar ti set b0='3VOM4MAX' where id=9; -update noar tt set v0='DD' where id=9; -update noar ti set v0='DD' where id=9; -update noar tt set b1='C7QKTAFQ4T24MF2L1LCMLHCA8JB' where id=9; -update noar ti set b1='C7QKTAFQ4T24MF2L1LCMLHCA8JB' where id=9; -update noar tt set v0='GW0EHX3B3MIAL2UF5T' where id=9; -update noar ti set v0='GW0EHX3B3MIAL2UF5T' where id=9; -update noar tt set b2='7FBEQCLVSRS2538T' where id=9; -update noar ti set b2='7FBEQCLVSRS2538T' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 mediumblob null, - b1 longblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='95I' where id=1; -update noar ti set v0='95I' where id=1; -update noar tt set b0='NMQVTSSO' where id=1; -update noar ti set b0='NMQVTSSO' where id=1; -update noar tt set v0='3FP1N8EY1TDKSYKVDZCO' where id=1; -update noar ti set v0='3FP1N8EY1TDKSYKVDZCO' where id=1; -update noar tt set b1='FDD8Q' where id=1; -update noar ti set b1='FDD8Q' where id=1; -update noar tt set v0='IBJHK1RVAVDAT' where id=1; -update noar ti set v0='IBJHK1RVAVDAT' where id=1; -update noar tt set b2='333CXXQMTFLHY93MQK' where id=1; -update noar ti set b2='333CXXQMTFLHY93MQK' where id=1; -update noar tt set v0='WUO7MDQ22HW' where id=2; -update noar ti set v0='WUO7MDQ22HW' where id=2; -update noar tt set b0='HBCULRU6GUB4ZAAGBMC9U7CZ72220' where id=2; -update noar ti set b0='HBCULRU6GUB4ZAAGBMC9U7CZ72220' where id=2; -update noar tt set v0='042IMO56MS4T5W2Y8H' where id=2; -update noar ti set v0='042IMO56MS4T5W2Y8H' where id=2; -update noar tt set b1='XC6CM' where id=2; -update noar ti set b1='XC6CM' where id=2; -update noar tt set v0='S' where id=2; -update noar ti set v0='S' where id=2; -update noar tt set b2='G1UMFP7ISB334' where id=2; -update noar ti set b2='G1UMFP7ISB334' where id=2; -update noar tt set v0='PS2FCZVP6' where id=3; -update noar ti set v0='PS2FCZVP6' where id=3; -update noar tt set b0='0DKE' where id=3; -update noar ti set b0='0DKE' where id=3; -update noar tt set v0='V4JM820DI' where id=3; -update noar ti set v0='V4JM820DI' where id=3; -update noar tt set b1='GQYZL5D7U3XSPB' where id=3; -update noar ti set b1='GQYZL5D7U3XSPB' where id=3; -update noar tt set v0='DJH1YMHVFVWJF8Z00GYTWXKN7FJVHZUY' where id=3; -update noar ti set v0='DJH1YMHVFVWJF8Z00GYTWXKN7FJVHZUY' where id=3; -update noar tt set b2='SAGT8WGPRTV' where id=3; -update noar ti set b2='SAGT8WGPRTV' where id=3; -update noar tt set v0='FCJQIX0XMNZEYH4' where id=4; -update noar ti set v0='FCJQIX0XMNZEYH4' where id=4; -update noar tt set b0='O1JG3DN5U8R' where id=4; -update noar ti set b0='O1JG3DN5U8R' where id=4; -update noar tt set v0='F12DDFKE1L' where id=4; -update noar ti set v0='F12DDFKE1L' where id=4; -update noar tt set b1='F4Z9DUPSBX01A' where id=4; -update noar ti set b1='F4Z9DUPSBX01A' where id=4; -update noar tt set v0='AV862HFWU' where id=4; -update noar ti set v0='AV862HFWU' where id=4; -update noar tt set b2='9YQG7TXM0HZPWWJBBWCA36WZX37S7' where id=4; -update noar ti set b2='9YQG7TXM0HZPWWJBBWCA36WZX37S7' where id=4; -update noar tt set v0='T0FV73DQHJ8BOFM66VXJKFXE' where id=5; -update noar ti set v0='T0FV73DQHJ8BOFM66VXJKFXE' where id=5; -update noar tt set b0='NLYWQGLR92IGXQOWD9PPRY' where id=5; -update noar ti set b0='NLYWQGLR92IGXQOWD9PPRY' where id=5; -update noar tt set v0='51E75UY0C9TOYL' where id=5; -update noar ti set v0='51E75UY0C9TOYL' where id=5; -update noar tt set b1='ZQNJWNRCZJ1IZR41AYRZO7' where id=5; -update noar ti set b1='ZQNJWNRCZJ1IZR41AYRZO7' where id=5; -update noar tt set v0='6OHL5J7KKDJF14GTZCG0UDZXCPRVLJA' where id=5; -update noar ti set v0='6OHL5J7KKDJF14GTZCG0UDZXCPRVLJA' where id=5; -update noar tt set b2='EOT' where id=5; -update noar ti set b2='EOT' where id=5; -update noar tt set v0='K21UVNBJ5RL6CUEYG' where id=6; -update noar ti set v0='K21UVNBJ5RL6CUEYG' where id=6; -update noar tt set b0='X6H58EYZAUJ8I8I8RPX4VI8ZBYC5' where id=6; -update noar ti set b0='X6H58EYZAUJ8I8I8RPX4VI8ZBYC5' where id=6; -update noar tt set v0='1G409TIT12G0DDS0D' where id=6; -update noar ti set v0='1G409TIT12G0DDS0D' where id=6; -update noar tt set b1='SOUP3U' where id=6; -update noar ti set b1='SOUP3U' where id=6; -update noar tt set v0='S0LINMQJRR74ML2' where id=6; -update noar ti set v0='S0LINMQJRR74ML2' where id=6; -update noar tt set b2='1PAH' where id=6; -update noar ti set b2='1PAH' where id=6; -update noar tt set v0='T300F2METXIR' where id=7; -update noar ti set v0='T300F2METXIR' where id=7; -update noar tt set b0='M9WYOD7E1FZ' where id=7; -update noar ti set b0='M9WYOD7E1FZ' where id=7; -update noar tt set v0='DOB3Q78HLLYGM0S59' where id=7; -update noar ti set v0='DOB3Q78HLLYGM0S59' where id=7; -update noar tt set b1='SAB' where id=7; -update noar ti set b1='SAB' where id=7; -update noar tt set v0='ZO9CA9L87Z1FSSOEW09EC' where id=7; -update noar ti set v0='ZO9CA9L87Z1FSSOEW09EC' where id=7; -update noar tt set b2='0SNHAGSVF7CTXHY6PXTFN82SRY8S2' where id=7; -update noar ti set b2='0SNHAGSVF7CTXHY6PXTFN82SRY8S2' where id=7; -update noar tt set v0='Z' where id=8; -update noar ti set v0='Z' where id=8; -update noar tt set b0='H0N7E0ASYC9K7KSZHYNSNWTYYH9K' where id=8; -update noar ti set b0='H0N7E0ASYC9K7KSZHYNSNWTYYH9K' where id=8; -update noar tt set v0='IYJ' where id=8; -update noar ti set v0='IYJ' where id=8; -update noar tt set b1='FI61P170Y9S8' where id=8; -update noar ti set b1='FI61P170Y9S8' where id=8; -update noar tt set v0='BBLE7NYD4XIQU199MLI' where id=8; -update noar ti set v0='BBLE7NYD4XIQU199MLI' where id=8; -update noar tt set b2='HFII9CV' where id=8; -update noar ti set b2='HFII9CV' where id=8; -update noar tt set v0='9XJZUR4KNR' where id=9; -update noar ti set v0='9XJZUR4KNR' where id=9; -update noar tt set b0='8FE67ZCTBV4TKT35ZD80' where id=9; -update noar ti set b0='8FE67ZCTBV4TKT35ZD80' where id=9; -update noar tt set v0='N2JSSUL7D' where id=9; -update noar ti set v0='N2JSSUL7D' where id=9; -update noar tt set b1='BB9Z' where id=9; -update noar ti set b1='BB9Z' where id=9; -update noar tt set v0='FOHT2EL637L212F0P1BK' where id=9; -update noar ti set v0='FOHT2EL637L212F0P1BK' where id=9; -update noar tt set b2='53SCTONT71V8B3S6IV1AZR44E14' where id=9; -update noar ti set b2='53SCTONT71V8B3S6IV1AZR44E14' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 mediumblob null, - b1 longblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='VFG5L2CPECRJNGMJR97Q3ZHJS7MO' where id=1; -update noar ti set v0='VFG5L2CPECRJNGMJR97Q3ZHJS7MO' where id=1; -update noar tt set b0='1LMK8GHOJ19CJ' where id=1; -update noar ti set b0='1LMK8GHOJ19CJ' where id=1; -update noar tt set v0='4PJM764WBGQZTKNUQB2N7' where id=1; -update noar ti set v0='4PJM764WBGQZTKNUQB2N7' where id=1; -update noar tt set b1='S3GZYB' where id=1; -update noar ti set b1='S3GZYB' where id=1; -update noar tt set v0='6M8HQU0IOAQNMAFBYIWNCIL5EKIM64' where id=1; -update noar ti set v0='6M8HQU0IOAQNMAFBYIWNCIL5EKIM64' where id=1; -update noar tt set b2='V2KAXYMUULLPYNPL' where id=1; -update noar ti set b2='V2KAXYMUULLPYNPL' where id=1; -update noar tt set v0='SWOD4A2MKQ5PG8VPSTTHT' where id=2; -update noar ti set v0='SWOD4A2MKQ5PG8VPSTTHT' where id=2; -update noar tt set b0='Z7W18SQNC7JP2PNZG8JCT1' where id=2; -update noar ti set b0='Z7W18SQNC7JP2PNZG8JCT1' where id=2; -update noar tt set v0='N4PIZT5VW1' where id=2; -update noar ti set v0='N4PIZT5VW1' where id=2; -update noar tt set b1='BNXMY4UHG63' where id=2; -update noar ti set b1='BNXMY4UHG63' where id=2; -update noar tt set v0='3H7FDHO5W' where id=2; -update noar ti set v0='3H7FDHO5W' where id=2; -update noar tt set b2='DABZ7M' where id=2; -update noar ti set b2='DABZ7M' where id=2; -update noar tt set v0='GINT5LHEKMIRGC5BI2LIG889NY5HWK2R' where id=3; -update noar ti set v0='GINT5LHEKMIRGC5BI2LIG889NY5HWK2R' where id=3; -update noar tt set b0='HLWLY38VIK72LUFHUROLVQGDRIX' where id=3; -update noar ti set b0='HLWLY38VIK72LUFHUROLVQGDRIX' where id=3; -update noar tt set v0='UKO8WEN0BIXD70ZSP' where id=3; -update noar ti set v0='UKO8WEN0BIXD70ZSP' where id=3; -update noar tt set b1='9P5CPL3GSMW5Z4HV' where id=3; -update noar ti set b1='9P5CPL3GSMW5Z4HV' where id=3; -update noar tt set v0='OS1GLY' where id=3; -update noar ti set v0='OS1GLY' where id=3; -update noar tt set b2='E2SPQGFZQ08P' where id=3; -update noar ti set b2='E2SPQGFZQ08P' where id=3; -update noar tt set v0='0TU289OPBQ12JW3F' where id=4; -update noar ti set v0='0TU289OPBQ12JW3F' where id=4; -update noar tt set b0='PB58BXHFXGHZFIBXL4YEG7P' where id=4; -update noar ti set b0='PB58BXHFXGHZFIBXL4YEG7P' where id=4; -update noar tt set v0='OKIISE018' where id=4; -update noar ti set v0='OKIISE018' where id=4; -update noar tt set b1='W3T' where id=4; -update noar ti set b1='W3T' where id=4; -update noar tt set v0='LGY3Y9QP3OAHX0DSGCKFUA' where id=4; -update noar ti set v0='LGY3Y9QP3OAHX0DSGCKFUA' where id=4; -update noar tt set b2='F95S0PABDVYQYGZZZGCJ75SNEP6C4FX' where id=4; -update noar ti set b2='F95S0PABDVYQYGZZZGCJ75SNEP6C4FX' where id=4; -update noar tt set v0='JQ1V6J4SC99FXGLZQH299T17I977D3' where id=5; -update noar ti set v0='JQ1V6J4SC99FXGLZQH299T17I977D3' where id=5; -update noar tt set b0='FN0YPHLZTW3B8HJ8ENJSUF' where id=5; -update noar ti set b0='FN0YPHLZTW3B8HJ8ENJSUF' where id=5; -update noar tt set v0='YQX165XO7176N4YQ6ZOGPUEZVWPSI' where id=5; -update noar ti set v0='YQX165XO7176N4YQ6ZOGPUEZVWPSI' where id=5; -update noar tt set b1='HPP71S7Y0KRCS70WUJUSBBYE' where id=5; -update noar ti set b1='HPP71S7Y0KRCS70WUJUSBBYE' where id=5; -update noar tt set v0='CR50D0704GO02YB6O66E0OB0MDEXEUM1' where id=5; -update noar ti set v0='CR50D0704GO02YB6O66E0OB0MDEXEUM1' where id=5; -update noar tt set b2='LQKSZ7EEU1WE6HVXVUG' where id=5; -update noar ti set b2='LQKSZ7EEU1WE6HVXVUG' where id=5; -update noar tt set v0='ODHK37YEHW70ZVPCLJODEPQ' where id=6; -update noar ti set v0='ODHK37YEHW70ZVPCLJODEPQ' where id=6; -update noar tt set b0='MTXIKVAMAMUFC7N3TTKDL41' where id=6; -update noar ti set b0='MTXIKVAMAMUFC7N3TTKDL41' where id=6; -update noar tt set v0='W0F8M' where id=6; -update noar ti set v0='W0F8M' where id=6; -update noar tt set b1='SBJRP0V644AMU5KKYPB3SU48IIG' where id=6; -update noar ti set b1='SBJRP0V644AMU5KKYPB3SU48IIG' where id=6; -update noar tt set v0='L1WRXEAE38MZJ38I87X5K9' where id=6; -update noar ti set v0='L1WRXEAE38MZJ38I87X5K9' where id=6; -update noar tt set b2='57VFYAZEUU03IPUE1NPGBMQOOY5SDI' where id=6; -update noar ti set b2='57VFYAZEUU03IPUE1NPGBMQOOY5SDI' where id=6; -update noar tt set v0='85RD3' where id=7; -update noar ti set v0='85RD3' where id=7; -update noar tt set b0='707GBZT04KODU83AV8GG38G8S5' where id=7; -update noar ti set b0='707GBZT04KODU83AV8GG38G8S5' where id=7; -update noar tt set v0='KSLCIRJDQMXR7OI9OZZOGA5' where id=7; -update noar ti set v0='KSLCIRJDQMXR7OI9OZZOGA5' where id=7; -update noar tt set b1='P3QM225FN4F62DNP2QDDY2' where id=7; -update noar ti set b1='P3QM225FN4F62DNP2QDDY2' where id=7; -update noar tt set v0='P58V9XBMAED0XNXLHWKU' where id=7; -update noar ti set v0='P58V9XBMAED0XNXLHWKU' where id=7; -update noar tt set b2='NTMKBN7PGN9X6CGDMK0ZHLE' where id=7; -update noar ti set b2='NTMKBN7PGN9X6CGDMK0ZHLE' where id=7; -update noar tt set v0='LSCBRGMT' where id=8; -update noar ti set v0='LSCBRGMT' where id=8; -update noar tt set b0='J5GXHNA2MHELZKAJYUHK94SFU' where id=8; -update noar ti set b0='J5GXHNA2MHELZKAJYUHK94SFU' where id=8; -update noar tt set v0='UMHHXJYFSHDUM1NRTRKEE' where id=8; -update noar ti set v0='UMHHXJYFSHDUM1NRTRKEE' where id=8; -update noar tt set b1='V7' where id=8; -update noar ti set b1='V7' where id=8; -update noar tt set v0='7QPORD4BTT6VKQ6P1ST5H82BH4KI77' where id=8; -update noar ti set v0='7QPORD4BTT6VKQ6P1ST5H82BH4KI77' where id=8; -update noar tt set b2='GJFMU0UYJVBCGO9KWK1TQ7' where id=8; -update noar ti set b2='GJFMU0UYJVBCGO9KWK1TQ7' where id=8; -update noar tt set v0='W77IE2L763KEMKT4ONIVLMV0AJ' where id=9; -update noar ti set v0='W77IE2L763KEMKT4ONIVLMV0AJ' where id=9; -update noar tt set b0='DYG9DUC5NKEOOW4GM0BO3CLNX9L' where id=9; -update noar ti set b0='DYG9DUC5NKEOOW4GM0BO3CLNX9L' where id=9; -update noar tt set v0='8ANM0B3O6JNHZIAK33B02UN2TM2L' where id=9; -update noar ti set v0='8ANM0B3O6JNHZIAK33B02UN2TM2L' where id=9; -update noar tt set b1='U3VGOZSLQVQWNA4N8SO54Q6HF' where id=9; -update noar ti set b1='U3VGOZSLQVQWNA4N8SO54Q6HF' where id=9; -update noar tt set v0='GIY0CFJKLIWBN' where id=9; -update noar ti set v0='GIY0CFJKLIWBN' where id=9; -update noar tt set b2='72S2LM' where id=9; -update noar ti set b2='72S2LM' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 mediumblob not null, - b1 longblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='1XDJXG3KL04V2IGTCEULGKM' where id=1; -update noar ti set v0='1XDJXG3KL04V2IGTCEULGKM' where id=1; -update noar tt set b0='C' where id=1; -update noar ti set b0='C' where id=1; -update noar tt set v0='AQH6BPLIU114H6J4NACPDW4' where id=1; -update noar ti set v0='AQH6BPLIU114H6J4NACPDW4' where id=1; -update noar tt set b1='V1HGEC' where id=1; -update noar ti set b1='V1HGEC' where id=1; -update noar tt set v0='M6I35002MJ09CZZNQP' where id=1; -update noar ti set v0='M6I35002MJ09CZZNQP' where id=1; -update noar tt set b2='0ULKUFT8PMZ' where id=1; -update noar ti set b2='0ULKUFT8PMZ' where id=1; -update noar tt set v0='4LW518PD' where id=2; -update noar ti set v0='4LW518PD' where id=2; -update noar tt set b0='R0AZQ7BTVEGI' where id=2; -update noar ti set b0='R0AZQ7BTVEGI' where id=2; -update noar tt set v0='DGRSGDGYLAW10FZI7YWZR3AD' where id=2; -update noar ti set v0='DGRSGDGYLAW10FZI7YWZR3AD' where id=2; -update noar tt set b1='U1T2' where id=2; -update noar ti set b1='U1T2' where id=2; -update noar tt set v0='X73R7TESZAUJQZWQ4OOK40694H0' where id=2; -update noar ti set v0='X73R7TESZAUJQZWQ4OOK40694H0' where id=2; -update noar tt set b2='BP50AFNQRXQQ7' where id=2; -update noar ti set b2='BP50AFNQRXQQ7' where id=2; -update noar tt set v0='1P7TBXW3CU7J23' where id=3; -update noar ti set v0='1P7TBXW3CU7J23' where id=3; -update noar tt set b0='O5X03A28F4OIACSNEWX6JRJIKW' where id=3; -update noar ti set b0='O5X03A28F4OIACSNEWX6JRJIKW' where id=3; -update noar tt set v0='8PBU9RJUOTWQLURFPRQB6V' where id=3; -update noar ti set v0='8PBU9RJUOTWQLURFPRQB6V' where id=3; -update noar tt set b1='BM2' where id=3; -update noar ti set b1='BM2' where id=3; -update noar tt set v0='23OAB8A8D2TEPNEXT2IVF5XTK1IEPM' where id=3; -update noar ti set v0='23OAB8A8D2TEPNEXT2IVF5XTK1IEPM' where id=3; -update noar tt set b2='WTDEB66' where id=3; -update noar ti set b2='WTDEB66' where id=3; -update noar tt set v0='DPKYV3VWKVRPLX82DNMZZUZJ8HRZ4HY' where id=4; -update noar ti set v0='DPKYV3VWKVRPLX82DNMZZUZJ8HRZ4HY' where id=4; -update noar tt set b0='RD8L6H4FJH8OGW1NW' where id=4; -update noar ti set b0='RD8L6H4FJH8OGW1NW' where id=4; -update noar tt set v0='JKOGIJ6FUAP' where id=4; -update noar ti set v0='JKOGIJ6FUAP' where id=4; -update noar tt set b1='6FT7JWGAJSB5RH8XJMP' where id=4; -update noar ti set b1='6FT7JWGAJSB5RH8XJMP' where id=4; -update noar tt set v0='SONO7WAM1MC2PLFO0AWKMDYT8WIMI80Y' where id=4; -update noar ti set v0='SONO7WAM1MC2PLFO0AWKMDYT8WIMI80Y' where id=4; -update noar tt set b2='WH5FJJY1N' where id=4; -update noar ti set b2='WH5FJJY1N' where id=4; -update noar tt set v0='E' where id=5; -update noar ti set v0='E' where id=5; -update noar tt set b0='26VL706C5V0X' where id=5; -update noar ti set b0='26VL706C5V0X' where id=5; -update noar tt set v0='A4OYGZASQI8OZEW' where id=5; -update noar ti set v0='A4OYGZASQI8OZEW' where id=5; -update noar tt set b1='GNHVD4' where id=5; -update noar ti set b1='GNHVD4' where id=5; -update noar tt set v0='1' where id=5; -update noar ti set v0='1' where id=5; -update noar tt set b2='1HIIVKQD2MYVJ0LY7PHE4UO' where id=5; -update noar ti set b2='1HIIVKQD2MYVJ0LY7PHE4UO' where id=5; -update noar tt set v0='8ZX7K2R8FSQ79QAN3MCPAVMGHIB' where id=6; -update noar ti set v0='8ZX7K2R8FSQ79QAN3MCPAVMGHIB' where id=6; -update noar tt set b0='WIM' where id=6; -update noar ti set b0='WIM' where id=6; -update noar tt set v0='MPL5JPFE1KJ' where id=6; -update noar ti set v0='MPL5JPFE1KJ' where id=6; -update noar tt set b1='YI0F681Y1S7NHSAY80' where id=6; -update noar ti set b1='YI0F681Y1S7NHSAY80' where id=6; -update noar tt set v0='38881W4OFXFMKNDKH60WWSZI9' where id=6; -update noar ti set v0='38881W4OFXFMKNDKH60WWSZI9' where id=6; -update noar tt set b2='M5DKPR72UOAG00B2D4MCERUIWGODR' where id=6; -update noar ti set b2='M5DKPR72UOAG00B2D4MCERUIWGODR' where id=6; -update noar tt set v0='7CKQZELK' where id=7; -update noar ti set v0='7CKQZELK' where id=7; -update noar tt set b0='MRBTX7STQW' where id=7; -update noar ti set b0='MRBTX7STQW' where id=7; -update noar tt set v0='DBZ' where id=7; -update noar ti set v0='DBZ' where id=7; -update noar tt set b1='12D2BFU2NPZJNYXV9E1VKQQEKSP' where id=7; -update noar ti set b1='12D2BFU2NPZJNYXV9E1VKQQEKSP' where id=7; -update noar tt set v0='P5SUKF15N916SF2' where id=7; -update noar ti set v0='P5SUKF15N916SF2' where id=7; -update noar tt set b2='335Q78OGASW20RME3' where id=7; -update noar ti set b2='335Q78OGASW20RME3' where id=7; -update noar tt set v0='4SFHPVEVJFT5MPE2A8NCFJM4N2YZOTVY' where id=8; -update noar ti set v0='4SFHPVEVJFT5MPE2A8NCFJM4N2YZOTVY' where id=8; -update noar tt set b0='CR5FYIAKM' where id=8; -update noar ti set b0='CR5FYIAKM' where id=8; -update noar tt set v0='UA11CJTJGIUC2UKSQJA4' where id=8; -update noar ti set v0='UA11CJTJGIUC2UKSQJA4' where id=8; -update noar tt set b1='ULQEQYUYMOR72' where id=8; -update noar ti set b1='ULQEQYUYMOR72' where id=8; -update noar tt set v0='44QUU37ETM' where id=8; -update noar ti set v0='44QUU37ETM' where id=8; -update noar tt set b2='YJNNZ9VNF' where id=8; -update noar ti set b2='YJNNZ9VNF' where id=8; -update noar tt set v0='76QXK7WD21278XXVTR3DF2U4QW7RO8O' where id=9; -update noar ti set v0='76QXK7WD21278XXVTR3DF2U4QW7RO8O' where id=9; -update noar tt set b0='GMZDODSL2J53324IHEMOG7L' where id=9; -update noar ti set b0='GMZDODSL2J53324IHEMOG7L' where id=9; -update noar tt set v0='XXIKG55EII29JBW4U5QGLV1A3RKY4' where id=9; -update noar ti set v0='XXIKG55EII29JBW4U5QGLV1A3RKY4' where id=9; -update noar tt set b1='KXNCTBGFNU5' where id=9; -update noar ti set b1='KXNCTBGFNU5' where id=9; -update noar tt set v0='E59OE4GW5OIN42GROA5Y5L' where id=9; -update noar ti set v0='E59OE4GW5OIN42GROA5Y5L' where id=9; -update noar tt set b2='YGRTKYNBAZWBULWKRJ26276KT7JKO3VZ' where id=9; -update noar ti set b2='YGRTKYNBAZWBULWKRJ26276KT7JKO3VZ' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 mediumblob not null, - b1 longblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='OPOE' where id=1; -update noar ti set v0='OPOE' where id=1; -update noar tt set b0='37S7WTG5E0DQ9HG90LSD8' where id=1; -update noar ti set b0='37S7WTG5E0DQ9HG90LSD8' where id=1; -update noar tt set v0='0Q32G3JJH5GA00VZ8GG' where id=1; -update noar ti set v0='0Q32G3JJH5GA00VZ8GG' where id=1; -update noar tt set b1='4KHPZO84BVUC7' where id=1; -update noar ti set b1='4KHPZO84BVUC7' where id=1; -update noar tt set v0='Y' where id=1; -update noar ti set v0='Y' where id=1; -update noar tt set b2='WC90BJSWIZ8HWHA6LWSJUOMP3P1IND8I' where id=1; -update noar ti set b2='WC90BJSWIZ8HWHA6LWSJUOMP3P1IND8I' where id=1; -update noar tt set v0='N4N8XSNTQVC3E' where id=2; -update noar ti set v0='N4N8XSNTQVC3E' where id=2; -update noar tt set b0='PLIQCI6AAEJ8QQ23FSPV8DAKKN' where id=2; -update noar ti set b0='PLIQCI6AAEJ8QQ23FSPV8DAKKN' where id=2; -update noar tt set v0='B00JIYJAQYX1W581M4R6' where id=2; -update noar ti set v0='B00JIYJAQYX1W581M4R6' where id=2; -update noar tt set b1='E8K219PT0' where id=2; -update noar ti set b1='E8K219PT0' where id=2; -update noar tt set v0='SJQS406DWOC4KTH463OBZ59' where id=2; -update noar ti set v0='SJQS406DWOC4KTH463OBZ59' where id=2; -update noar tt set b2='EZFJ1KV91U7NNJRWC2UTM' where id=2; -update noar ti set b2='EZFJ1KV91U7NNJRWC2UTM' where id=2; -update noar tt set v0='FWT6VTP5Z87FDO8T' where id=3; -update noar ti set v0='FWT6VTP5Z87FDO8T' where id=3; -update noar tt set b0='H0T5J9UVM54HY' where id=3; -update noar ti set b0='H0T5J9UVM54HY' where id=3; -update noar tt set v0='YUOVJM8SDILW6OHM1E2393H' where id=3; -update noar ti set v0='YUOVJM8SDILW6OHM1E2393H' where id=3; -update noar tt set b1='FN8MR' where id=3; -update noar ti set b1='FN8MR' where id=3; -update noar tt set v0='E10VVYH0OY229H2UIHQ1APEFK1CFD' where id=3; -update noar ti set v0='E10VVYH0OY229H2UIHQ1APEFK1CFD' where id=3; -update noar tt set b2='9TSAFOKJZTH02LOKMEQ' where id=3; -update noar ti set b2='9TSAFOKJZTH02LOKMEQ' where id=3; -update noar tt set v0='S2C7ZVPVA1YBW29N5BUP0V8LNZBN' where id=4; -update noar ti set v0='S2C7ZVPVA1YBW29N5BUP0V8LNZBN' where id=4; -update noar tt set b0='0FAV0PY9DKOUTPL410' where id=4; -update noar ti set b0='0FAV0PY9DKOUTPL410' where id=4; -update noar tt set v0='1SOJM' where id=4; -update noar ti set v0='1SOJM' where id=4; -update noar tt set b1='QGY8E3KAYV06LBUY' where id=4; -update noar ti set b1='QGY8E3KAYV06LBUY' where id=4; -update noar tt set v0='9VL5U2MDRXA' where id=4; -update noar ti set v0='9VL5U2MDRXA' where id=4; -update noar tt set b2='T72CYO00J' where id=4; -update noar ti set b2='T72CYO00J' where id=4; -update noar tt set v0='LYPMJ0R7MGU1F9D1I3D8QY8M9LEEH856' where id=5; -update noar ti set v0='LYPMJ0R7MGU1F9D1I3D8QY8M9LEEH856' where id=5; -update noar tt set b0='19CPT36N2UBDK' where id=5; -update noar ti set b0='19CPT36N2UBDK' where id=5; -update noar tt set v0='D1P8GG5' where id=5; -update noar ti set v0='D1P8GG5' where id=5; -update noar tt set b1='JOXL1' where id=5; -update noar ti set b1='JOXL1' where id=5; -update noar tt set v0='ZDNG173' where id=5; -update noar ti set v0='ZDNG173' where id=5; -update noar tt set b2='UJBY26EDXTMW2DURS0PXFRT' where id=5; -update noar ti set b2='UJBY26EDXTMW2DURS0PXFRT' where id=5; -update noar tt set v0='F615DJMS2U63IBC1YKW63R6HF' where id=6; -update noar ti set v0='F615DJMS2U63IBC1YKW63R6HF' where id=6; -update noar tt set b0='BYFY2S7K2CBGIO' where id=6; -update noar ti set b0='BYFY2S7K2CBGIO' where id=6; -update noar tt set v0='9C0SUD5IJAO29B9' where id=6; -update noar ti set v0='9C0SUD5IJAO29B9' where id=6; -update noar tt set b1='S1S7IPOZLUO' where id=6; -update noar ti set b1='S1S7IPOZLUO' where id=6; -update noar tt set v0='PMRHZQ29' where id=6; -update noar ti set v0='PMRHZQ29' where id=6; -update noar tt set b2='3X1UVSQL12OEU' where id=6; -update noar ti set b2='3X1UVSQL12OEU' where id=6; -update noar tt set v0='8I2BBFPJKJOSV8ZHPD6F6' where id=7; -update noar ti set v0='8I2BBFPJKJOSV8ZHPD6F6' where id=7; -update noar tt set b0='11ZHKVY73' where id=7; -update noar ti set b0='11ZHKVY73' where id=7; -update noar tt set v0='4BIVO2URW5BCQ' where id=7; -update noar ti set v0='4BIVO2URW5BCQ' where id=7; -update noar tt set b1='R56L0HU90EJEC6HWTXQM4GBMYRD' where id=7; -update noar ti set b1='R56L0HU90EJEC6HWTXQM4GBMYRD' where id=7; -update noar tt set v0='WRA7NWDPROPIXF' where id=7; -update noar ti set v0='WRA7NWDPROPIXF' where id=7; -update noar tt set b2='JK7LH71YYXB6AIN9VEPWUOTHHPW1JW' where id=7; -update noar ti set b2='JK7LH71YYXB6AIN9VEPWUOTHHPW1JW' where id=7; -update noar tt set v0='M3P3ANQD5QJRLYT8H2CKVGD' where id=8; -update noar ti set v0='M3P3ANQD5QJRLYT8H2CKVGD' where id=8; -update noar tt set b0='OXVQRRK3UNHKU' where id=8; -update noar ti set b0='OXVQRRK3UNHKU' where id=8; -update noar tt set v0='DHZ8891D44U4BLUTZMQ2VBBU' where id=8; -update noar ti set v0='DHZ8891D44U4BLUTZMQ2VBBU' where id=8; -update noar tt set b1='4EHVPJQ0NXSGQSU4YV47JI39PI7A' where id=8; -update noar ti set b1='4EHVPJQ0NXSGQSU4YV47JI39PI7A' where id=8; -update noar tt set v0='1TNM7D4CUG6CAR4JUKOW1GN4Q5C1' where id=8; -update noar ti set v0='1TNM7D4CUG6CAR4JUKOW1GN4Q5C1' where id=8; -update noar tt set b2='AUP' where id=8; -update noar ti set b2='AUP' where id=8; -update noar tt set v0='EOYBG2AYA7YFOTJJP7M57' where id=9; -update noar ti set v0='EOYBG2AYA7YFOTJJP7M57' where id=9; -update noar tt set b0='Q8TYATVXTHGC7ANFJAK33WWB' where id=9; -update noar ti set b0='Q8TYATVXTHGC7ANFJAK33WWB' where id=9; -update noar tt set v0='89A5647ORACMW64Y2Z7PXIP6' where id=9; -update noar ti set v0='89A5647ORACMW64Y2Z7PXIP6' where id=9; -update noar tt set b1='75HGKA' where id=9; -update noar ti set b1='75HGKA' where id=9; -update noar tt set v0='NKW9GBGVB9QJ2L' where id=9; -update noar ti set v0='NKW9GBGVB9QJ2L' where id=9; -update noar tt set b2='3GYSR3ZEAO0B' where id=9; -update noar ti set b2='3GYSR3ZEAO0B' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 mediumblob null, - b1 longblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='868M7MOY8GSMM9XXDSGITFSFC6U' where id=1; -update noar ti set v0='868M7MOY8GSMM9XXDSGITFSFC6U' where id=1; -update noar tt set b0='9VXWUW' where id=1; -update noar ti set b0='9VXWUW' where id=1; -update noar tt set v0='HPOPQVBEUA8' where id=1; -update noar ti set v0='HPOPQVBEUA8' where id=1; -update noar tt set b1='U4KXTRR2XKV1' where id=1; -update noar ti set b1='U4KXTRR2XKV1' where id=1; -update noar tt set v0='IISFKUZI3WHYQPQB9C76' where id=1; -update noar ti set v0='IISFKUZI3WHYQPQB9C76' where id=1; -update noar tt set b2='C301SQZEDU8M8U842V0BWL' where id=1; -update noar ti set b2='C301SQZEDU8M8U842V0BWL' where id=1; -update noar tt set v0='CE5DN76GACHA8XXBIK5IUZXWRX7AQ' where id=2; -update noar ti set v0='CE5DN76GACHA8XXBIK5IUZXWRX7AQ' where id=2; -update noar tt set b0='21KM636A9' where id=2; -update noar ti set b0='21KM636A9' where id=2; -update noar tt set v0='6S' where id=2; -update noar ti set v0='6S' where id=2; -update noar tt set b1='TOFL505VRHEM4SSAG9' where id=2; -update noar ti set b1='TOFL505VRHEM4SSAG9' where id=2; -update noar tt set v0='6CT91' where id=2; -update noar ti set v0='6CT91' where id=2; -update noar tt set b2='L0UA' where id=2; -update noar ti set b2='L0UA' where id=2; -update noar tt set v0='5906TXUPHOMNY5XPC2P0RTTD' where id=3; -update noar ti set v0='5906TXUPHOMNY5XPC2P0RTTD' where id=3; -update noar tt set b0='4NREU9YGYIFPGAAWGAZKLC0' where id=3; -update noar ti set b0='4NREU9YGYIFPGAAWGAZKLC0' where id=3; -update noar tt set v0='TIRXY40XEXNUZCN66V1QA' where id=3; -update noar ti set v0='TIRXY40XEXNUZCN66V1QA' where id=3; -update noar tt set b1='U98TVT14B5IQHWAFMRK9X5SBNNI6' where id=3; -update noar ti set b1='U98TVT14B5IQHWAFMRK9X5SBNNI6' where id=3; -update noar tt set v0='37B84' where id=3; -update noar ti set v0='37B84' where id=3; -update noar tt set b2='IP0PO8UNRKNA0SN34EBPU24NDL8624D' where id=3; -update noar ti set b2='IP0PO8UNRKNA0SN34EBPU24NDL8624D' where id=3; -update noar tt set v0='Z8AXKYEUTROS8S734OQ1HOQ8PL' where id=4; -update noar ti set v0='Z8AXKYEUTROS8S734OQ1HOQ8PL' where id=4; -update noar tt set b0='HA4' where id=4; -update noar ti set b0='HA4' where id=4; -update noar tt set v0='LL0EUFOY0Q7LOJ7H8OC0' where id=4; -update noar ti set v0='LL0EUFOY0Q7LOJ7H8OC0' where id=4; -update noar tt set b1='S8ML' where id=4; -update noar ti set b1='S8ML' where id=4; -update noar tt set v0='RB22TEPR7F9JE1ZP59Q1DRBBSBW' where id=4; -update noar ti set v0='RB22TEPR7F9JE1ZP59Q1DRBBSBW' where id=4; -update noar tt set b2='NV3SJPY3CBAVIF2KXM30AWT21RK44CO' where id=4; -update noar ti set b2='NV3SJPY3CBAVIF2KXM30AWT21RK44CO' where id=4; -update noar tt set v0='Y7F7' where id=5; -update noar ti set v0='Y7F7' where id=5; -update noar tt set b0='V' where id=5; -update noar ti set b0='V' where id=5; -update noar tt set v0='C1YL6217XM4LOWNVC4ZJRXM2U4V' where id=5; -update noar ti set v0='C1YL6217XM4LOWNVC4ZJRXM2U4V' where id=5; -update noar tt set b1='K5N1B' where id=5; -update noar ti set b1='K5N1B' where id=5; -update noar tt set v0='ZGD9UTCRDPUY' where id=5; -update noar ti set v0='ZGD9UTCRDPUY' where id=5; -update noar tt set b2='SATRTYJUGH8J7OK6WYFBVCU4B' where id=5; -update noar ti set b2='SATRTYJUGH8J7OK6WYFBVCU4B' where id=5; -update noar tt set v0='AXW32QDT1LRKZ42STBT08HCV31S' where id=6; -update noar ti set v0='AXW32QDT1LRKZ42STBT08HCV31S' where id=6; -update noar tt set b0='BYWLJGBU6' where id=6; -update noar ti set b0='BYWLJGBU6' where id=6; -update noar tt set v0='96S1XXU6224WV5EYSPVY6QH9X17MKHX' where id=6; -update noar ti set v0='96S1XXU6224WV5EYSPVY6QH9X17MKHX' where id=6; -update noar tt set b1='Q33HUHJSWUDN9SR71BH2DNYJXSFP' where id=6; -update noar ti set b1='Q33HUHJSWUDN9SR71BH2DNYJXSFP' where id=6; -update noar tt set v0='K07D838SX16763OZ6AY' where id=6; -update noar ti set v0='K07D838SX16763OZ6AY' where id=6; -update noar tt set b2='0R' where id=6; -update noar ti set b2='0R' where id=6; -update noar tt set v0='KHOUT7WPSTFHFE4VZ' where id=7; -update noar ti set v0='KHOUT7WPSTFHFE4VZ' where id=7; -update noar tt set b0='X8KVKYKV31W8' where id=7; -update noar ti set b0='X8KVKYKV31W8' where id=7; -update noar tt set v0='EDJX88AU9RMI4U4DGUXMK' where id=7; -update noar ti set v0='EDJX88AU9RMI4U4DGUXMK' where id=7; -update noar tt set b1='XF7KPD9P82RY5WR8S8D098' where id=7; -update noar ti set b1='XF7KPD9P82RY5WR8S8D098' where id=7; -update noar tt set v0='E6' where id=7; -update noar ti set v0='E6' where id=7; -update noar tt set b2='GSBEM4UKWO8LXYS3FBXC' where id=7; -update noar ti set b2='GSBEM4UKWO8LXYS3FBXC' where id=7; -update noar tt set v0='GLOL7TEKUMYULQLRKV' where id=8; -update noar ti set v0='GLOL7TEKUMYULQLRKV' where id=8; -update noar tt set b0='1PB823LGOA2GBJRWYFQGN81IA7C0' where id=8; -update noar ti set b0='1PB823LGOA2GBJRWYFQGN81IA7C0' where id=8; -update noar tt set v0='4MM7LCMHALSJW4WYSGSBR1IVV3II8MO' where id=8; -update noar ti set v0='4MM7LCMHALSJW4WYSGSBR1IVV3II8MO' where id=8; -update noar tt set b1='GGM6NEOAD2YY0REFAV' where id=8; -update noar ti set b1='GGM6NEOAD2YY0REFAV' where id=8; -update noar tt set v0='0L448OJZM' where id=8; -update noar ti set v0='0L448OJZM' where id=8; -update noar tt set b2='HSX2K0XZ3GSGSRQYW3XVXV4BYCL44CE' where id=8; -update noar ti set b2='HSX2K0XZ3GSGSRQYW3XVXV4BYCL44CE' where id=8; -update noar tt set v0='T0R1J0F5M7QEC6ODYBJWRB' where id=9; -update noar ti set v0='T0R1J0F5M7QEC6ODYBJWRB' where id=9; -update noar tt set b0='U5L6U9' where id=9; -update noar ti set b0='U5L6U9' where id=9; -update noar tt set v0='U1K7ENH1X3N8P0KX96J5P' where id=9; -update noar ti set v0='U1K7ENH1X3N8P0KX96J5P' where id=9; -update noar tt set b1='OVJYCJA' where id=9; -update noar ti set b1='OVJYCJA' where id=9; -update noar tt set v0='M63IT55ZZBK5OC3C455TID' where id=9; -update noar ti set v0='M63IT55ZZBK5OC3C455TID' where id=9; -update noar tt set b2='DQ286QVQUDVCHXUCLPB' where id=9; -update noar ti set b2='DQ286QVQUDVCHXUCLPB' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 mediumblob null, - b1 longblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='CQ9W2BFQDWKBBRC9043O8O0D' where id=1; -update noar ti set v0='CQ9W2BFQDWKBBRC9043O8O0D' where id=1; -update noar tt set b0='BE4N6EVTSHELQ4V3J31CVMO56LU' where id=1; -update noar ti set b0='BE4N6EVTSHELQ4V3J31CVMO56LU' where id=1; -update noar tt set v0='C93DIPTTYOVHVQA0RPS6CTNX' where id=1; -update noar ti set v0='C93DIPTTYOVHVQA0RPS6CTNX' where id=1; -update noar tt set b1='FRYU9UAO' where id=1; -update noar ti set b1='FRYU9UAO' where id=1; -update noar tt set v0='0C7LTBI4NVK5XEDTEC6DFIMSX3B0TGV' where id=1; -update noar ti set v0='0C7LTBI4NVK5XEDTEC6DFIMSX3B0TGV' where id=1; -update noar tt set b2='862RE92FD7DT28UVZHGWN8WVH2B' where id=1; -update noar ti set b2='862RE92FD7DT28UVZHGWN8WVH2B' where id=1; -update noar tt set v0='0JPR9J9HOBFVMQIPLEW' where id=2; -update noar ti set v0='0JPR9J9HOBFVMQIPLEW' where id=2; -update noar tt set b0='DJQDSUZFG1PZ5Y8US01VZWBQ0GQMXO' where id=2; -update noar ti set b0='DJQDSUZFG1PZ5Y8US01VZWBQ0GQMXO' where id=2; -update noar tt set v0='A9C5Y3CEG57KT6DUV8BC64ZJ0G' where id=2; -update noar ti set v0='A9C5Y3CEG57KT6DUV8BC64ZJ0G' where id=2; -update noar tt set b1='AIYHQ6' where id=2; -update noar ti set b1='AIYHQ6' where id=2; -update noar tt set v0='SH5' where id=2; -update noar ti set v0='SH5' where id=2; -update noar tt set b2='VYXPBTN1KH9' where id=2; -update noar ti set b2='VYXPBTN1KH9' where id=2; -update noar tt set v0='RM0EMGE1M24NQGPD' where id=3; -update noar ti set v0='RM0EMGE1M24NQGPD' where id=3; -update noar tt set b0='94YRQSVSF3SL4AP36T2T16' where id=3; -update noar ti set b0='94YRQSVSF3SL4AP36T2T16' where id=3; -update noar tt set v0='QPZPOVCNBQ5604' where id=3; -update noar ti set v0='QPZPOVCNBQ5604' where id=3; -update noar tt set b1='BM5G5H' where id=3; -update noar ti set b1='BM5G5H' where id=3; -update noar tt set v0='VLDFR4KBEO9M' where id=3; -update noar ti set v0='VLDFR4KBEO9M' where id=3; -update noar tt set b2='CXRMA95TAT7O4HOXRPTVH5BXWW3NLZ4O' where id=3; -update noar ti set b2='CXRMA95TAT7O4HOXRPTVH5BXWW3NLZ4O' where id=3; -update noar tt set v0='VR' where id=4; -update noar ti set v0='VR' where id=4; -update noar tt set b0='AQG7M0ZLE95CKEX' where id=4; -update noar ti set b0='AQG7M0ZLE95CKEX' where id=4; -update noar tt set v0='Z7DEOAWVBPRDBFMFL' where id=4; -update noar ti set v0='Z7DEOAWVBPRDBFMFL' where id=4; -update noar tt set b1='PA57HMZMK99DIQQ2POFS6LKMKB68P' where id=4; -update noar ti set b1='PA57HMZMK99DIQQ2POFS6LKMKB68P' where id=4; -update noar tt set v0='ZXYKP6SQB54DXX371' where id=4; -update noar ti set v0='ZXYKP6SQB54DXX371' where id=4; -update noar tt set b2='8TE3APDZZZYZ' where id=4; -update noar ti set b2='8TE3APDZZZYZ' where id=4; -update noar tt set v0='4G2C' where id=5; -update noar ti set v0='4G2C' where id=5; -update noar tt set b0='0I2JY2X46CBPZJI' where id=5; -update noar ti set b0='0I2JY2X46CBPZJI' where id=5; -update noar tt set v0='OL9KD4UQGP5XT8MLQQP3YGQXBFFI' where id=5; -update noar ti set v0='OL9KD4UQGP5XT8MLQQP3YGQXBFFI' where id=5; -update noar tt set b1='B20VKDD2VDGU' where id=5; -update noar ti set b1='B20VKDD2VDGU' where id=5; -update noar tt set v0='IP4STFWNQMW836A74VQ' where id=5; -update noar ti set v0='IP4STFWNQMW836A74VQ' where id=5; -update noar tt set b2='04SAVL7342H9OAPP5JL8T7HLYRXK466O' where id=5; -update noar ti set b2='04SAVL7342H9OAPP5JL8T7HLYRXK466O' where id=5; -update noar tt set v0='PSPEL3T84M' where id=6; -update noar ti set v0='PSPEL3T84M' where id=6; -update noar tt set b0='103DCO' where id=6; -update noar ti set b0='103DCO' where id=6; -update noar tt set v0='FDDAJ607NWDWCDG98X9' where id=6; -update noar ti set v0='FDDAJ607NWDWCDG98X9' where id=6; -update noar tt set b1='MFXBLQDIZR4N39N10NCAN980R' where id=6; -update noar ti set b1='MFXBLQDIZR4N39N10NCAN980R' where id=6; -update noar tt set v0='FH815IXX57ORKB5W23LV' where id=6; -update noar ti set v0='FH815IXX57ORKB5W23LV' where id=6; -update noar tt set b2='AARYDA' where id=6; -update noar ti set b2='AARYDA' where id=6; -update noar tt set v0='EHISY2O856GDXUAEYHABUCGR0Y' where id=7; -update noar ti set v0='EHISY2O856GDXUAEYHABUCGR0Y' where id=7; -update noar tt set b0='27P' where id=7; -update noar ti set b0='27P' where id=7; -update noar tt set v0='795IAK4YYMY13CSCBP1267A' where id=7; -update noar ti set v0='795IAK4YYMY13CSCBP1267A' where id=7; -update noar tt set b1='DIUML2QK2DOG45CX1T' where id=7; -update noar ti set b1='DIUML2QK2DOG45CX1T' where id=7; -update noar tt set v0='IIZZG5BEUX2RS2MAS90RI8EOHCZB57H0' where id=7; -update noar ti set v0='IIZZG5BEUX2RS2MAS90RI8EOHCZB57H0' where id=7; -update noar tt set b2='Y3YFJFGCX5V' where id=7; -update noar ti set b2='Y3YFJFGCX5V' where id=7; -update noar tt set v0='KF' where id=8; -update noar ti set v0='KF' where id=8; -update noar tt set b0='KQ5M39W8F' where id=8; -update noar ti set b0='KQ5M39W8F' where id=8; -update noar tt set v0='V0N7KHYJWYB4BU4ODUWBST' where id=8; -update noar ti set v0='V0N7KHYJWYB4BU4ODUWBST' where id=8; -update noar tt set b1='HH6S58YOR45B1FKE' where id=8; -update noar ti set b1='HH6S58YOR45B1FKE' where id=8; -update noar tt set v0='DX32Z' where id=8; -update noar ti set v0='DX32Z' where id=8; -update noar tt set b2='Z1CW' where id=8; -update noar ti set b2='Z1CW' where id=8; -update noar tt set v0='NUI' where id=9; -update noar ti set v0='NUI' where id=9; -update noar tt set b0='7DVKSBYK2Y3X4SSA389RIX7UGAI7IHZ' where id=9; -update noar ti set b0='7DVKSBYK2Y3X4SSA389RIX7UGAI7IHZ' where id=9; -update noar tt set v0='5V69PYQVGU' where id=9; -update noar ti set v0='5V69PYQVGU' where id=9; -update noar tt set b1='WCCK9IHUAKCB5LRMADZQ4THZ' where id=9; -update noar ti set b1='WCCK9IHUAKCB5LRMADZQ4THZ' where id=9; -update noar tt set v0='2SLJIWZZA0ZGQ87XLSKF' where id=9; -update noar ti set v0='2SLJIWZZA0ZGQ87XLSKF' where id=9; -update noar tt set b2='S7XO' where id=9; -update noar ti set b2='S7XO' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 mediumblob not null, - b1 longblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='OKW0L2RLLUV4J0' where id=1; -update noar ti set v0='OKW0L2RLLUV4J0' where id=1; -update noar tt set b0='WZVWV1I6NEOXYZ2' where id=1; -update noar ti set b0='WZVWV1I6NEOXYZ2' where id=1; -update noar tt set v0='YIE6F371LZVJ71B5WC30X4MDCFIMOB' where id=1; -update noar ti set v0='YIE6F371LZVJ71B5WC30X4MDCFIMOB' where id=1; -update noar tt set b1='NJGZV33OVII3I532831ODDF' where id=1; -update noar ti set b1='NJGZV33OVII3I532831ODDF' where id=1; -update noar tt set v0='UV6ADP8R40FXLL43K' where id=1; -update noar ti set v0='UV6ADP8R40FXLL43K' where id=1; -update noar tt set b2='5K4KE58' where id=1; -update noar ti set b2='5K4KE58' where id=1; -update noar tt set v0='UX28LZOZYET61QCVM9DKSM8' where id=2; -update noar ti set v0='UX28LZOZYET61QCVM9DKSM8' where id=2; -update noar tt set b0='6O9LV98O9A5WR9I97T9CB0TMTOI' where id=2; -update noar ti set b0='6O9LV98O9A5WR9I97T9CB0TMTOI' where id=2; -update noar tt set v0='GZMJTX14ICF1UQ2' where id=2; -update noar ti set v0='GZMJTX14ICF1UQ2' where id=2; -update noar tt set b1='HGMGRRIIDL1' where id=2; -update noar ti set b1='HGMGRRIIDL1' where id=2; -update noar tt set v0='J257RWCEKH33CJRKMM' where id=2; -update noar ti set v0='J257RWCEKH33CJRKMM' where id=2; -update noar tt set b2='BS00J88MLS50FLCY7QM64BKYSB' where id=2; -update noar ti set b2='BS00J88MLS50FLCY7QM64BKYSB' where id=2; -update noar tt set v0='2FFOKRTAC22D2P8VD8SJC07IXE6' where id=3; -update noar ti set v0='2FFOKRTAC22D2P8VD8SJC07IXE6' where id=3; -update noar tt set b0='ERMLDOFAOF9859L1UA' where id=3; -update noar ti set b0='ERMLDOFAOF9859L1UA' where id=3; -update noar tt set v0='HZZ2XVZH95AASFVQDLBDCU0V5BF' where id=3; -update noar ti set v0='HZZ2XVZH95AASFVQDLBDCU0V5BF' where id=3; -update noar tt set b1='2UX2Z1HRALYTXMWDRTL' where id=3; -update noar ti set b1='2UX2Z1HRALYTXMWDRTL' where id=3; -update noar tt set v0='5TH4ZIMC4' where id=3; -update noar ti set v0='5TH4ZIMC4' where id=3; -update noar tt set b2='S0C' where id=3; -update noar ti set b2='S0C' where id=3; -update noar tt set v0='C' where id=4; -update noar ti set v0='C' where id=4; -update noar tt set b0='RFAJBFIVNZQPXPCVDW4KD8L11ZFJM8JT' where id=4; -update noar ti set b0='RFAJBFIVNZQPXPCVDW4KD8L11ZFJM8JT' where id=4; -update noar tt set v0='S35WKQBIPS6C285DS' where id=4; -update noar ti set v0='S35WKQBIPS6C285DS' where id=4; -update noar tt set b1='NPLJBL' where id=4; -update noar ti set b1='NPLJBL' where id=4; -update noar tt set v0='L72XTV1GL083J6V4JLXKNCQ' where id=4; -update noar ti set v0='L72XTV1GL083J6V4JLXKNCQ' where id=4; -update noar tt set b2='RQ6HURJO651EQBQJMER0X18ZKFZ' where id=4; -update noar ti set b2='RQ6HURJO651EQBQJMER0X18ZKFZ' where id=4; -update noar tt set v0='YJ89YJUS9V3YAHS8HR4GM8FV42S' where id=5; -update noar ti set v0='YJ89YJUS9V3YAHS8HR4GM8FV42S' where id=5; -update noar tt set b0='IM2PAQ' where id=5; -update noar ti set b0='IM2PAQ' where id=5; -update noar tt set v0='PQ5PY2V2VXZW0W19BKSYYN73RQ7O8' where id=5; -update noar ti set v0='PQ5PY2V2VXZW0W19BKSYYN73RQ7O8' where id=5; -update noar tt set b1='JF' where id=5; -update noar ti set b1='JF' where id=5; -update noar tt set v0='6WYR5' where id=5; -update noar ti set v0='6WYR5' where id=5; -update noar tt set b2='8TC34ZRWSY4EFCENV9AR31G9' where id=5; -update noar ti set b2='8TC34ZRWSY4EFCENV9AR31G9' where id=5; -update noar tt set v0='YYYN87E7IEA' where id=6; -update noar ti set v0='YYYN87E7IEA' where id=6; -update noar tt set b0='WM4ZRZZ36JHGCX' where id=6; -update noar ti set b0='WM4ZRZZ36JHGCX' where id=6; -update noar tt set v0='O693ZV71' where id=6; -update noar ti set v0='O693ZV71' where id=6; -update noar tt set b1='FYSY91LT' where id=6; -update noar ti set b1='FYSY91LT' where id=6; -update noar tt set v0='HZPKWU7SJR6TXBL' where id=6; -update noar ti set v0='HZPKWU7SJR6TXBL' where id=6; -update noar tt set b2='T83B2Y7GNAOTUNQX1L9VBHLVE6A' where id=6; -update noar ti set b2='T83B2Y7GNAOTUNQX1L9VBHLVE6A' where id=6; -update noar tt set v0='SKU5RRNBM797W3C' where id=7; -update noar ti set v0='SKU5RRNBM797W3C' where id=7; -update noar tt set b0='OC11PJ' where id=7; -update noar ti set b0='OC11PJ' where id=7; -update noar tt set v0='WFKMMADSY3UWBYQBW22GIC0N' where id=7; -update noar ti set v0='WFKMMADSY3UWBYQBW22GIC0N' where id=7; -update noar tt set b1='UTG9M3059BOI23A2B' where id=7; -update noar ti set b1='UTG9M3059BOI23A2B' where id=7; -update noar tt set v0='UH1392IBLDUDJ18SIBY2DA' where id=7; -update noar ti set v0='UH1392IBLDUDJ18SIBY2DA' where id=7; -update noar tt set b2='K2XFEOSQSU666DHJ9GNUPR7WL' where id=7; -update noar ti set b2='K2XFEOSQSU666DHJ9GNUPR7WL' where id=7; -update noar tt set v0='ACGGISOONHW' where id=8; -update noar ti set v0='ACGGISOONHW' where id=8; -update noar tt set b0='N' where id=8; -update noar ti set b0='N' where id=8; -update noar tt set v0='7Y8N' where id=8; -update noar ti set v0='7Y8N' where id=8; -update noar tt set b1='K4EE1EZOA8ZU54SO6WB' where id=8; -update noar ti set b1='K4EE1EZOA8ZU54SO6WB' where id=8; -update noar tt set v0='N90VUUQ5FVVMM' where id=8; -update noar ti set v0='N90VUUQ5FVVMM' where id=8; -update noar tt set b2='SUBATF9KXZBXSDUEGSU9YBD03G' where id=8; -update noar ti set b2='SUBATF9KXZBXSDUEGSU9YBD03G' where id=8; -update noar tt set v0='XZMVYA' where id=9; -update noar ti set v0='XZMVYA' where id=9; -update noar tt set b0='8YIUC3LXL5FBK90GCZTXVR0HXZ4G' where id=9; -update noar ti set b0='8YIUC3LXL5FBK90GCZTXVR0HXZ4G' where id=9; -update noar tt set v0='D4ZTC1YH7IFF2ASVK2X3OAXVN' where id=9; -update noar ti set v0='D4ZTC1YH7IFF2ASVK2X3OAXVN' where id=9; -update noar tt set b1='VQYK59X17' where id=9; -update noar ti set b1='VQYK59X17' where id=9; -update noar tt set v0='EOEBS8ACEQGF' where id=9; -update noar ti set v0='EOEBS8ACEQGF' where id=9; -update noar tt set b2='UJU8LP0HX4EK45FHU5Y47HIBRIR' where id=9; -update noar ti set b2='UJU8LP0HX4EK45FHU5Y47HIBRIR' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 mediumblob not null, - b1 longblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='1CLWSO1JIYEZ3JQ' where id=1; -update noar ti set v0='1CLWSO1JIYEZ3JQ' where id=1; -update noar tt set b0='UED7YCNFQ9J97URGLNZ8GY' where id=1; -update noar ti set b0='UED7YCNFQ9J97URGLNZ8GY' where id=1; -update noar tt set v0='L5CFN37PY6H2SFQIG' where id=1; -update noar ti set v0='L5CFN37PY6H2SFQIG' where id=1; -update noar tt set b1='O10G02' where id=1; -update noar ti set b1='O10G02' where id=1; -update noar tt set v0='Y2P1VSIB4Q3DX5XMG7K0OMT1OQX6' where id=1; -update noar ti set v0='Y2P1VSIB4Q3DX5XMG7K0OMT1OQX6' where id=1; -update noar tt set b2='T5R18M9RFX78E1H' where id=1; -update noar ti set b2='T5R18M9RFX78E1H' where id=1; -update noar tt set v0='20XPQRC9FY1CN77EI' where id=2; -update noar ti set v0='20XPQRC9FY1CN77EI' where id=2; -update noar tt set b0='D2V8MDORXXJYBALB2EE9X' where id=2; -update noar ti set b0='D2V8MDORXXJYBALB2EE9X' where id=2; -update noar tt set v0='RW' where id=2; -update noar ti set v0='RW' where id=2; -update noar tt set b1='4X' where id=2; -update noar ti set b1='4X' where id=2; -update noar tt set v0='U6AFHTURD5L1A9JW0R8KQ' where id=2; -update noar ti set v0='U6AFHTURD5L1A9JW0R8KQ' where id=2; -update noar tt set b2='J5FM3P4EPHKOJ5I8CFYHQZ8GXUGEKJH' where id=2; -update noar ti set b2='J5FM3P4EPHKOJ5I8CFYHQZ8GXUGEKJH' where id=2; -update noar tt set v0='SUXE4EX3YDEVHZSOJV2Y2666T' where id=3; -update noar ti set v0='SUXE4EX3YDEVHZSOJV2Y2666T' where id=3; -update noar tt set b0='IP3VS9V0DGEF4NTEPK' where id=3; -update noar ti set b0='IP3VS9V0DGEF4NTEPK' where id=3; -update noar tt set v0='0EOZI64QZSVS6HNBI1QJO8OLWEGG' where id=3; -update noar ti set v0='0EOZI64QZSVS6HNBI1QJO8OLWEGG' where id=3; -update noar tt set b1='T' where id=3; -update noar ti set b1='T' where id=3; -update noar tt set v0='OC62B5JF1UXIPA6YOH4K8TYG' where id=3; -update noar ti set v0='OC62B5JF1UXIPA6YOH4K8TYG' where id=3; -update noar tt set b2='TRY9OF7TXBHWT5X8ZSLB' where id=3; -update noar ti set b2='TRY9OF7TXBHWT5X8ZSLB' where id=3; -update noar tt set v0='GT01QAX4X77DJ3JYQLJT' where id=4; -update noar ti set v0='GT01QAX4X77DJ3JYQLJT' where id=4; -update noar tt set b0='E4FLVAWGSGUJQ83EWT0AG3KRU14' where id=4; -update noar ti set b0='E4FLVAWGSGUJQ83EWT0AG3KRU14' where id=4; -update noar tt set v0='JXOXHX83ZPBEYLK9BXY4W3' where id=4; -update noar ti set v0='JXOXHX83ZPBEYLK9BXY4W3' where id=4; -update noar tt set b1='I543WWJYP9LYHDJ0YG1GBBC5US' where id=4; -update noar ti set b1='I543WWJYP9LYHDJ0YG1GBBC5US' where id=4; -update noar tt set v0='YOVGSLMD' where id=4; -update noar ti set v0='YOVGSLMD' where id=4; -update noar tt set b2='MD0PO' where id=4; -update noar ti set b2='MD0PO' where id=4; -update noar tt set v0='YOGBQBY8Y7CCW2CP96V' where id=5; -update noar ti set v0='YOGBQBY8Y7CCW2CP96V' where id=5; -update noar tt set b0='SO10T7T9RFS7MBOJ7LHDO47MY6DT57' where id=5; -update noar ti set b0='SO10T7T9RFS7MBOJ7LHDO47MY6DT57' where id=5; -update noar tt set v0='4NSPPCQO2MUBO09IH3GT1C' where id=5; -update noar ti set v0='4NSPPCQO2MUBO09IH3GT1C' where id=5; -update noar tt set b1='7CPSCVY5HDY0781INS9OHR4PI9W6I3' where id=5; -update noar ti set b1='7CPSCVY5HDY0781INS9OHR4PI9W6I3' where id=5; -update noar tt set v0='EHQ5ME' where id=5; -update noar ti set v0='EHQ5ME' where id=5; -update noar tt set b2='HAADR3OINKE87BBMV' where id=5; -update noar ti set b2='HAADR3OINKE87BBMV' where id=5; -update noar tt set v0='7YP1M' where id=6; -update noar ti set v0='7YP1M' where id=6; -update noar tt set b0='I3N5L5HF' where id=6; -update noar ti set b0='I3N5L5HF' where id=6; -update noar tt set v0='ZSA' where id=6; -update noar ti set v0='ZSA' where id=6; -update noar tt set b1='HLKTPVJ0XHBTXURRBKSU1PTE7P3' where id=6; -update noar ti set b1='HLKTPVJ0XHBTXURRBKSU1PTE7P3' where id=6; -update noar tt set v0='4IL7E8QHZ' where id=6; -update noar ti set v0='4IL7E8QHZ' where id=6; -update noar tt set b2='ZQVYHM33W72AAZD2VBVO34RE03H1TY' where id=6; -update noar ti set b2='ZQVYHM33W72AAZD2VBVO34RE03H1TY' where id=6; -update noar tt set v0='WJQF' where id=7; -update noar ti set v0='WJQF' where id=7; -update noar tt set b0='TQHT6TLPJ7QTJLICK' where id=7; -update noar ti set b0='TQHT6TLPJ7QTJLICK' where id=7; -update noar tt set v0='D7Z8IED45D6ZZUBO1D6U3A7NNKI' where id=7; -update noar ti set v0='D7Z8IED45D6ZZUBO1D6U3A7NNKI' where id=7; -update noar tt set b1='TPO98N9TSGX6BG51XMCHD' where id=7; -update noar ti set b1='TPO98N9TSGX6BG51XMCHD' where id=7; -update noar tt set v0='R' where id=7; -update noar ti set v0='R' where id=7; -update noar tt set b2='LPC0FNP8EFCVHN5' where id=7; -update noar ti set b2='LPC0FNP8EFCVHN5' where id=7; -update noar tt set v0='6ZFTC9B52IRFLZOSC11' where id=8; -update noar ti set v0='6ZFTC9B52IRFLZOSC11' where id=8; -update noar tt set b0='EOR6NMOHKM9MU5KJY58XY70' where id=8; -update noar ti set b0='EOR6NMOHKM9MU5KJY58XY70' where id=8; -update noar tt set v0='YMH0G1EH89OUW7ZQDPX' where id=8; -update noar ti set v0='YMH0G1EH89OUW7ZQDPX' where id=8; -update noar tt set b1='8IY11L1A' where id=8; -update noar ti set b1='8IY11L1A' where id=8; -update noar tt set v0='KL' where id=8; -update noar ti set v0='KL' where id=8; -update noar tt set b2='AJORWIPC02P6WZXQO3' where id=8; -update noar ti set b2='AJORWIPC02P6WZXQO3' where id=8; -update noar tt set v0='N5OMB3JO5OFAHVKCFPUG65KPE6' where id=9; -update noar ti set v0='N5OMB3JO5OFAHVKCFPUG65KPE6' where id=9; -update noar tt set b0='LTCUO5WBXZTPVGCQ' where id=9; -update noar ti set b0='LTCUO5WBXZTPVGCQ' where id=9; -update noar tt set v0='DHZV01HANF1AQ3HHRTT6F72BI' where id=9; -update noar ti set v0='DHZV01HANF1AQ3HHRTT6F72BI' where id=9; -update noar tt set b1='LQIH6' where id=9; -update noar ti set b1='LQIH6' where id=9; -update noar tt set v0='09YV50MZ3L7E0YIM7RPRC0EMTLGLL' where id=9; -update noar ti set v0='09YV50MZ3L7E0YIM7RPRC0EMTLGLL' where id=9; -update noar tt set b2='7437N5EMEVCKHG3628162YTCEL76SM' where id=9; -update noar ti set b2='7437N5EMEVCKHG3628162YTCEL76SM' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 mediumblob null, - b1 longblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='6ICAQJG3BD2DG9RDYEB' where id=1; -update noar ti set v0='6ICAQJG3BD2DG9RDYEB' where id=1; -update noar tt set b0='KKRAGG8' where id=1; -update noar ti set b0='KKRAGG8' where id=1; -update noar tt set v0='QVQ65UTTGMJ' where id=1; -update noar ti set v0='QVQ65UTTGMJ' where id=1; -update noar tt set b1='2Q4PUE60PW7OC5EBDPCHD' where id=1; -update noar ti set b1='2Q4PUE60PW7OC5EBDPCHD' where id=1; -update noar tt set v0='0HHQQY4B74RZJL6JOOYBS1' where id=1; -update noar ti set v0='0HHQQY4B74RZJL6JOOYBS1' where id=1; -update noar tt set b2='IFTLM2OI0P' where id=1; -update noar ti set b2='IFTLM2OI0P' where id=1; -update noar tt set v0='N066VUM7SXC833ZY3YZA1YZD' where id=2; -update noar ti set v0='N066VUM7SXC833ZY3YZA1YZD' where id=2; -update noar tt set b0='L0T0IJD5HSI8VFC7' where id=2; -update noar ti set b0='L0T0IJD5HSI8VFC7' where id=2; -update noar tt set v0='T1F2AYXQENO2NS' where id=2; -update noar ti set v0='T1F2AYXQENO2NS' where id=2; -update noar tt set b1='GQBLNM6VL5FMJ4XODE37YG4EJEPS' where id=2; -update noar ti set b1='GQBLNM6VL5FMJ4XODE37YG4EJEPS' where id=2; -update noar tt set v0='GQZ6Q' where id=2; -update noar ti set v0='GQZ6Q' where id=2; -update noar tt set b2='WCYLQAMBGYBWAP4RE5O2AM0PNNJKBS' where id=2; -update noar ti set b2='WCYLQAMBGYBWAP4RE5O2AM0PNNJKBS' where id=2; -update noar tt set v0='7LU0JY4SPVX9SWESBU5T0OOJ' where id=3; -update noar ti set v0='7LU0JY4SPVX9SWESBU5T0OOJ' where id=3; -update noar tt set b0='Y4ASNUCLNXM6' where id=3; -update noar ti set b0='Y4ASNUCLNXM6' where id=3; -update noar tt set v0='3TY5MEEZMYIY8IRS' where id=3; -update noar ti set v0='3TY5MEEZMYIY8IRS' where id=3; -update noar tt set b1='1CEJNNX2IR7BV' where id=3; -update noar ti set b1='1CEJNNX2IR7BV' where id=3; -update noar tt set v0='34GERYM7URA7S5PF0Z3OQ122446V0' where id=3; -update noar ti set v0='34GERYM7URA7S5PF0Z3OQ122446V0' where id=3; -update noar tt set b2='6T22' where id=3; -update noar ti set b2='6T22' where id=3; -update noar tt set v0='0S2W9LCYJKTAGCQE4JMS3Q4' where id=4; -update noar ti set v0='0S2W9LCYJKTAGCQE4JMS3Q4' where id=4; -update noar tt set b0='4O8X7BZ3HSN2D97C58FMC41I5DL2Z73B' where id=4; -update noar ti set b0='4O8X7BZ3HSN2D97C58FMC41I5DL2Z73B' where id=4; -update noar tt set v0='WZLJBWT0DUJOHEIYKI19FIANLZEL' where id=4; -update noar ti set v0='WZLJBWT0DUJOHEIYKI19FIANLZEL' where id=4; -update noar tt set b1='BTQZ4VSKD5BB5VY8Y71SX' where id=4; -update noar ti set b1='BTQZ4VSKD5BB5VY8Y71SX' where id=4; -update noar tt set v0='006HJG6KAK5I0D1YEY5XLS1J9K2U7K' where id=4; -update noar ti set v0='006HJG6KAK5I0D1YEY5XLS1J9K2U7K' where id=4; -update noar tt set b2='H1H8JCHNR0U2X275YCXOAQ6AGCK39' where id=4; -update noar ti set b2='H1H8JCHNR0U2X275YCXOAQ6AGCK39' where id=4; -update noar tt set v0='GOP2IOEVXA13W6OAO0Y0O8AVI0P' where id=5; -update noar ti set v0='GOP2IOEVXA13W6OAO0Y0O8AVI0P' where id=5; -update noar tt set b0='LLB3DPHB' where id=5; -update noar ti set b0='LLB3DPHB' where id=5; -update noar tt set v0='FUEAOGMQQASZ0H62' where id=5; -update noar ti set v0='FUEAOGMQQASZ0H62' where id=5; -update noar tt set b1='47KCT0' where id=5; -update noar ti set b1='47KCT0' where id=5; -update noar tt set v0='F' where id=5; -update noar ti set v0='F' where id=5; -update noar tt set b2='USWXXMRSL4WM09S' where id=5; -update noar ti set b2='USWXXMRSL4WM09S' where id=5; -update noar tt set v0='XGA2' where id=6; -update noar ti set v0='XGA2' where id=6; -update noar tt set b0='CXLYUT6XP86UQD' where id=6; -update noar ti set b0='CXLYUT6XP86UQD' where id=6; -update noar tt set v0='EZPO76IXA5EWPR' where id=6; -update noar ti set v0='EZPO76IXA5EWPR' where id=6; -update noar tt set b1='HR1R6X5G28' where id=6; -update noar ti set b1='HR1R6X5G28' where id=6; -update noar tt set v0='85M2Q3Q7NJ0W' where id=6; -update noar ti set v0='85M2Q3Q7NJ0W' where id=6; -update noar tt set b2='UFT4JO6DZKMI8T95HP0TFA' where id=6; -update noar ti set b2='UFT4JO6DZKMI8T95HP0TFA' where id=6; -update noar tt set v0='8ZOP5XVK2NUE29TF7MCJ' where id=7; -update noar ti set v0='8ZOP5XVK2NUE29TF7MCJ' where id=7; -update noar tt set b0='FLF4XLQARQC418NXL' where id=7; -update noar ti set b0='FLF4XLQARQC418NXL' where id=7; -update noar tt set v0='XG0451Q9TG6SOO5V2' where id=7; -update noar ti set v0='XG0451Q9TG6SOO5V2' where id=7; -update noar tt set b1='Y3030NJP3SIFAXX3MNJUUPWCT' where id=7; -update noar ti set b1='Y3030NJP3SIFAXX3MNJUUPWCT' where id=7; -update noar tt set v0='HLWUPQ4KPPTRRFXGXYU6' where id=7; -update noar ti set v0='HLWUPQ4KPPTRRFXGXYU6' where id=7; -update noar tt set b2='TN12L3Z50P3WOTRJ39G8SQGFQ3F0RJWB' where id=7; -update noar ti set b2='TN12L3Z50P3WOTRJ39G8SQGFQ3F0RJWB' where id=7; -update noar tt set v0='7ZN5S' where id=8; -update noar ti set v0='7ZN5S' where id=8; -update noar tt set b0='AI02OF' where id=8; -update noar ti set b0='AI02OF' where id=8; -update noar tt set v0='IV2O71UNNLXEUFD2GS5VM82' where id=8; -update noar ti set v0='IV2O71UNNLXEUFD2GS5VM82' where id=8; -update noar tt set b1='OLPH4T4CR8B' where id=8; -update noar ti set b1='OLPH4T4CR8B' where id=8; -update noar tt set v0='8ZJO671AE0SR850F3H7X' where id=8; -update noar ti set v0='8ZJO671AE0SR850F3H7X' where id=8; -update noar tt set b2='IXV8Z79' where id=8; -update noar ti set b2='IXV8Z79' where id=8; -update noar tt set v0='TPISPCSM75XLQ5GE75X' where id=9; -update noar ti set v0='TPISPCSM75XLQ5GE75X' where id=9; -update noar tt set b0='4OGY4C4AL' where id=9; -update noar ti set b0='4OGY4C4AL' where id=9; -update noar tt set v0='JFBQJODX7F7RY0OCRTMXRLPG25O6815' where id=9; -update noar ti set v0='JFBQJODX7F7RY0OCRTMXRLPG25O6815' where id=9; -update noar tt set b1='GZSA0UZGV2PBFRRKV6116Y90Z3Q1W' where id=9; -update noar ti set b1='GZSA0UZGV2PBFRRKV6116Y90Z3Q1W' where id=9; -update noar tt set v0='AB7HT2DTGYSUYWRVUBMLN' where id=9; -update noar ti set v0='AB7HT2DTGYSUYWRVUBMLN' where id=9; -update noar tt set b2='TKD8M35DT' where id=9; -update noar ti set b2='TKD8M35DT' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 mediumblob null, - b1 longblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='HL6X65Q8MWKC01' where id=1; -update noar ti set v0='HL6X65Q8MWKC01' where id=1; -update noar tt set b0='QIF7Y4TCS9HAJNLIRM1H9U9EOZ4WN0H' where id=1; -update noar ti set b0='QIF7Y4TCS9HAJNLIRM1H9U9EOZ4WN0H' where id=1; -update noar tt set v0='UN1D2PEQKVKFVT' where id=1; -update noar ti set v0='UN1D2PEQKVKFVT' where id=1; -update noar tt set b1='F9FG66TVH1R6SD57' where id=1; -update noar ti set b1='F9FG66TVH1R6SD57' where id=1; -update noar tt set v0='N6HJHC86S2TUANP1GQNDOX95' where id=1; -update noar ti set v0='N6HJHC86S2TUANP1GQNDOX95' where id=1; -update noar tt set b2='2ZMVL7S1BCVS0K9KAMYGRSO' where id=1; -update noar ti set b2='2ZMVL7S1BCVS0K9KAMYGRSO' where id=1; -update noar tt set v0='93NJ997KQOK0O1N20ZDLHAWL2X60BZGD' where id=2; -update noar ti set v0='93NJ997KQOK0O1N20ZDLHAWL2X60BZGD' where id=2; -update noar tt set b0='P06B8NT660THG2C48M5T2YEK8NJBZ' where id=2; -update noar ti set b0='P06B8NT660THG2C48M5T2YEK8NJBZ' where id=2; -update noar tt set v0='VPK5TRC9CR6W6W9KONU23ZHCR' where id=2; -update noar ti set v0='VPK5TRC9CR6W6W9KONU23ZHCR' where id=2; -update noar tt set b1='PIFGCEU5D2WVWYTS' where id=2; -update noar ti set b1='PIFGCEU5D2WVWYTS' where id=2; -update noar tt set v0='AH090T1NN6QJA' where id=2; -update noar ti set v0='AH090T1NN6QJA' where id=2; -update noar tt set b2='KH8VKK08YLF9SZZE' where id=2; -update noar ti set b2='KH8VKK08YLF9SZZE' where id=2; -update noar tt set v0='NUFISPR718CXL36K01QR2E' where id=3; -update noar ti set v0='NUFISPR718CXL36K01QR2E' where id=3; -update noar tt set b0='CMOEN' where id=3; -update noar ti set b0='CMOEN' where id=3; -update noar tt set v0='QHT5O8PJZXQ2Y4P5W0W' where id=3; -update noar ti set v0='QHT5O8PJZXQ2Y4P5W0W' where id=3; -update noar tt set b1='XDNBYZG47OWS4RQ4JDSYIVMMFO' where id=3; -update noar ti set b1='XDNBYZG47OWS4RQ4JDSYIVMMFO' where id=3; -update noar tt set v0='6QA2R430FYJVX2Q0F2WOMLKU' where id=3; -update noar ti set v0='6QA2R430FYJVX2Q0F2WOMLKU' where id=3; -update noar tt set b2='E0BYPZPA410BKF80WVMMNJQ' where id=3; -update noar ti set b2='E0BYPZPA410BKF80WVMMNJQ' where id=3; -update noar tt set v0='HKEB8U1JPX10XPBX' where id=4; -update noar ti set v0='HKEB8U1JPX10XPBX' where id=4; -update noar tt set b0='0UX1GQBFWAJF9CF95V3D64OKFXPX8' where id=4; -update noar ti set b0='0UX1GQBFWAJF9CF95V3D64OKFXPX8' where id=4; -update noar tt set v0='EKRQUHR6OZRJB0U7E9' where id=4; -update noar ti set v0='EKRQUHR6OZRJB0U7E9' where id=4; -update noar tt set b1='FQPG4O8NED7ZWPFR8R58GQDEHOR4E' where id=4; -update noar ti set b1='FQPG4O8NED7ZWPFR8R58GQDEHOR4E' where id=4; -update noar tt set v0='IXRT3GZ7G66DID5U52BDYUJ1VY3H' where id=4; -update noar ti set v0='IXRT3GZ7G66DID5U52BDYUJ1VY3H' where id=4; -update noar tt set b2='80HWYLXFNG9607NOU3LB9MXA5' where id=4; -update noar ti set b2='80HWYLXFNG9607NOU3LB9MXA5' where id=4; -update noar tt set v0='6HFGFL1TJUX0' where id=5; -update noar ti set v0='6HFGFL1TJUX0' where id=5; -update noar tt set b0='B12D0JCF4K1YEQBA5WN82S8LG0C' where id=5; -update noar ti set b0='B12D0JCF4K1YEQBA5WN82S8LG0C' where id=5; -update noar tt set v0='JHYMC6XM1RND9QBW1YJX6ST6IAVZJW' where id=5; -update noar ti set v0='JHYMC6XM1RND9QBW1YJX6ST6IAVZJW' where id=5; -update noar tt set b1='VTQ1QU' where id=5; -update noar ti set b1='VTQ1QU' where id=5; -update noar tt set v0='635UBV8GAGK9HSU86GWO56IRM0U3Q' where id=5; -update noar ti set v0='635UBV8GAGK9HSU86GWO56IRM0U3Q' where id=5; -update noar tt set b2='0K' where id=5; -update noar ti set b2='0K' where id=5; -update noar tt set v0='FU3Y7X5ES8UAFGSTG49WUK9GELEI' where id=6; -update noar ti set v0='FU3Y7X5ES8UAFGSTG49WUK9GELEI' where id=6; -update noar tt set b0='W2XZ74MD769OWJZ8WRQ35AB8U16JL' where id=6; -update noar ti set b0='W2XZ74MD769OWJZ8WRQ35AB8U16JL' where id=6; -update noar tt set v0='X04MKKS1H6UTHC3SCDGK8UZCXGOU' where id=6; -update noar ti set v0='X04MKKS1H6UTHC3SCDGK8UZCXGOU' where id=6; -update noar tt set b1='5Z8NQLPF0BG75HG5X9O8W82CUC42XYM' where id=6; -update noar ti set b1='5Z8NQLPF0BG75HG5X9O8W82CUC42XYM' where id=6; -update noar tt set v0='K88PEOOTJRS2FKHCP3A87R' where id=6; -update noar ti set v0='K88PEOOTJRS2FKHCP3A87R' where id=6; -update noar tt set b2='YC9CFD' where id=6; -update noar ti set b2='YC9CFD' where id=6; -update noar tt set v0='GDXON6P' where id=7; -update noar ti set v0='GDXON6P' where id=7; -update noar tt set b0='GY6F89HPAZZ1BQ4IY5XU8GAYVL8UDT5' where id=7; -update noar ti set b0='GY6F89HPAZZ1BQ4IY5XU8GAYVL8UDT5' where id=7; -update noar tt set v0='KXUCUE9KFOF27M0B6YFLUN36DH5C6BRB' where id=7; -update noar ti set v0='KXUCUE9KFOF27M0B6YFLUN36DH5C6BRB' where id=7; -update noar tt set b1='8X8B3YNGA35OQ4389GHAWF7Q8' where id=7; -update noar ti set b1='8X8B3YNGA35OQ4389GHAWF7Q8' where id=7; -update noar tt set v0='C2WRU00MGLWUR8BDVY984G39BZH1ZR' where id=7; -update noar ti set v0='C2WRU00MGLWUR8BDVY984G39BZH1ZR' where id=7; -update noar tt set b2='PVZ4AKJ353UB64VE3OSDYPQ3KT8QV' where id=7; -update noar ti set b2='PVZ4AKJ353UB64VE3OSDYPQ3KT8QV' where id=7; -update noar tt set v0='SNR9FVT0Y4P5' where id=8; -update noar ti set v0='SNR9FVT0Y4P5' where id=8; -update noar tt set b0='2DYBASI0QWSF' where id=8; -update noar ti set b0='2DYBASI0QWSF' where id=8; -update noar tt set v0='TPBK10P51C' where id=8; -update noar ti set v0='TPBK10P51C' where id=8; -update noar tt set b1='LNDR52KIKO' where id=8; -update noar ti set b1='LNDR52KIKO' where id=8; -update noar tt set v0='62ZAK0A5AQRO6D1HU948H11IR9L0' where id=8; -update noar ti set v0='62ZAK0A5AQRO6D1HU948H11IR9L0' where id=8; -update noar tt set b2='FGIAKLOB7IW4O2FVAA5' where id=8; -update noar ti set b2='FGIAKLOB7IW4O2FVAA5' where id=8; -update noar tt set v0='B4' where id=9; -update noar ti set v0='B4' where id=9; -update noar tt set b0='QYPEPO8Q6EI' where id=9; -update noar ti set b0='QYPEPO8Q6EI' where id=9; -update noar tt set v0='8YGCDOB6RDZ51P7PJ' where id=9; -update noar ti set v0='8YGCDOB6RDZ51P7PJ' where id=9; -update noar tt set b1='NEBZTEUWFI' where id=9; -update noar ti set b1='NEBZTEUWFI' where id=9; -update noar tt set v0='2TUNBPN' where id=9; -update noar ti set v0='2TUNBPN' where id=9; -update noar tt set b2='8PV615PLHISK770CB4' where id=9; -update noar ti set b2='8PV615PLHISK770CB4' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 mediumblob not null, - b1 longblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='UP8EUHCYNQW2QQ' where id=1; -update noar ti set v0='UP8EUHCYNQW2QQ' where id=1; -update noar tt set b0='NS9DV' where id=1; -update noar ti set b0='NS9DV' where id=1; -update noar tt set v0='FT2W4T90Y2AOM3Q0Q6KSLXR2' where id=1; -update noar ti set v0='FT2W4T90Y2AOM3Q0Q6KSLXR2' where id=1; -update noar tt set b1='V1CK5H92V93W1KZLY6PWVNSAL14M2I' where id=1; -update noar ti set b1='V1CK5H92V93W1KZLY6PWVNSAL14M2I' where id=1; -update noar tt set v0='XFIZ2HYZSYJYAS0F' where id=1; -update noar ti set v0='XFIZ2HYZSYJYAS0F' where id=1; -update noar tt set b2='MXF72G1QK99R' where id=1; -update noar ti set b2='MXF72G1QK99R' where id=1; -update noar tt set v0='STEBGQH1RQ8C5N1IP9C03' where id=2; -update noar ti set v0='STEBGQH1RQ8C5N1IP9C03' where id=2; -update noar tt set b0='SW0PKDH16OSWHSXOGDI0' where id=2; -update noar ti set b0='SW0PKDH16OSWHSXOGDI0' where id=2; -update noar tt set v0='3F5VJZEDF68' where id=2; -update noar ti set v0='3F5VJZEDF68' where id=2; -update noar tt set b1='CU8OL2KG' where id=2; -update noar ti set b1='CU8OL2KG' where id=2; -update noar tt set v0='L3NWK3TOG7QK9F7ZII9PSECJA1T' where id=2; -update noar ti set v0='L3NWK3TOG7QK9F7ZII9PSECJA1T' where id=2; -update noar tt set b2='YIVKR1LF28FECBNQD0' where id=2; -update noar ti set b2='YIVKR1LF28FECBNQD0' where id=2; -update noar tt set v0='7V4ER' where id=3; -update noar ti set v0='7V4ER' where id=3; -update noar tt set b0='JIGR0F2BTT3Y2RG8320' where id=3; -update noar ti set b0='JIGR0F2BTT3Y2RG8320' where id=3; -update noar tt set v0='PABTE86OA32BMMM' where id=3; -update noar ti set v0='PABTE86OA32BMMM' where id=3; -update noar tt set b1='13S2MP40EV0H0CHAQYU64NBEE' where id=3; -update noar ti set b1='13S2MP40EV0H0CHAQYU64NBEE' where id=3; -update noar tt set v0='LV' where id=3; -update noar ti set v0='LV' where id=3; -update noar tt set b2='WQBU1L11HJYBABJNIWBR8I2BAZTAF' where id=3; -update noar ti set b2='WQBU1L11HJYBABJNIWBR8I2BAZTAF' where id=3; -update noar tt set v0='7I' where id=4; -update noar ti set v0='7I' where id=4; -update noar tt set b0='Z' where id=4; -update noar ti set b0='Z' where id=4; -update noar tt set v0='IDY9XZE5P08EON0MXW1W54' where id=4; -update noar ti set v0='IDY9XZE5P08EON0MXW1W54' where id=4; -update noar tt set b1='E36C050AKNVQE2JHULQEVD4I8' where id=4; -update noar ti set b1='E36C050AKNVQE2JHULQEVD4I8' where id=4; -update noar tt set v0='K1F8CGDB603UCUQ' where id=4; -update noar ti set v0='K1F8CGDB603UCUQ' where id=4; -update noar tt set b2='C9AZGNR42TJ7RAWZOJPV869T' where id=4; -update noar ti set b2='C9AZGNR42TJ7RAWZOJPV869T' where id=4; -update noar tt set v0='AWDXCF' where id=5; -update noar ti set v0='AWDXCF' where id=5; -update noar tt set b0='JPVJIQYQMSN7SE10GFL7QY3SXIN76GE1' where id=5; -update noar ti set b0='JPVJIQYQMSN7SE10GFL7QY3SXIN76GE1' where id=5; -update noar tt set v0='VK2EK4L9S' where id=5; -update noar ti set v0='VK2EK4L9S' where id=5; -update noar tt set b1='W7QUW4IG0UEZR5WC' where id=5; -update noar ti set b1='W7QUW4IG0UEZR5WC' where id=5; -update noar tt set v0='FSXTN4YVUW' where id=5; -update noar ti set v0='FSXTN4YVUW' where id=5; -update noar tt set b2='H' where id=5; -update noar ti set b2='H' where id=5; -update noar tt set v0='E6OSJ04WE7A9FNYDR1AIAY' where id=6; -update noar ti set v0='E6OSJ04WE7A9FNYDR1AIAY' where id=6; -update noar tt set b0='H2IO' where id=6; -update noar ti set b0='H2IO' where id=6; -update noar tt set v0='I3N7DAYDEQ5G6QWE8L33TY77588LFZ' where id=6; -update noar ti set v0='I3N7DAYDEQ5G6QWE8L33TY77588LFZ' where id=6; -update noar tt set b1='FLHZ1U0N0CKEKGARXUBB86IOTQV4SUY' where id=6; -update noar ti set b1='FLHZ1U0N0CKEKGARXUBB86IOTQV4SUY' where id=6; -update noar tt set v0='EKMSWA13UQYHCEUBZ33IQD9QN' where id=6; -update noar ti set v0='EKMSWA13UQYHCEUBZ33IQD9QN' where id=6; -update noar tt set b2='HH82LP' where id=6; -update noar ti set b2='HH82LP' where id=6; -update noar tt set v0='ZQOXCC8AO3Z1XG3MH4MWFJU9AQV195' where id=7; -update noar ti set v0='ZQOXCC8AO3Z1XG3MH4MWFJU9AQV195' where id=7; -update noar tt set b0='TMPEJVA589A7L9KPDDIO' where id=7; -update noar ti set b0='TMPEJVA589A7L9KPDDIO' where id=7; -update noar tt set v0='MWN053JH6WESLL43MQCO5Y79' where id=7; -update noar ti set v0='MWN053JH6WESLL43MQCO5Y79' where id=7; -update noar tt set b1='VO7FN' where id=7; -update noar ti set b1='VO7FN' where id=7; -update noar tt set v0='6XA7H8MZ2Y2IYU273770LTPEO' where id=7; -update noar ti set v0='6XA7H8MZ2Y2IYU273770LTPEO' where id=7; -update noar tt set b2='TDOAX0JYJ7SPYTZD703FFMIZRZ' where id=7; -update noar ti set b2='TDOAX0JYJ7SPYTZD703FFMIZRZ' where id=7; -update noar tt set v0='13BMKR3K3' where id=8; -update noar ti set v0='13BMKR3K3' where id=8; -update noar tt set b0='GUY2PPNARATT9FC7J7RG8BN8PQDZ2W' where id=8; -update noar ti set b0='GUY2PPNARATT9FC7J7RG8BN8PQDZ2W' where id=8; -update noar tt set v0='7KTKO3YH0Z73GZUWDCI' where id=8; -update noar ti set v0='7KTKO3YH0Z73GZUWDCI' where id=8; -update noar tt set b1='L2MB68QRGTK2YIB' where id=8; -update noar ti set b1='L2MB68QRGTK2YIB' where id=8; -update noar tt set v0='R' where id=8; -update noar ti set v0='R' where id=8; -update noar tt set b2='OLUWE5NMPGARAHC9W7UGJWKSW0' where id=8; -update noar ti set b2='OLUWE5NMPGARAHC9W7UGJWKSW0' where id=8; -update noar tt set v0='4J6R9SFFK2JLSR57XOZZC1M5D5LLNW37' where id=9; -update noar ti set v0='4J6R9SFFK2JLSR57XOZZC1M5D5LLNW37' where id=9; -update noar tt set b0='XU19W07I9ZIT2LBCX' where id=9; -update noar ti set b0='XU19W07I9ZIT2LBCX' where id=9; -update noar tt set v0='5UDERDQVLB' where id=9; -update noar ti set v0='5UDERDQVLB' where id=9; -update noar tt set b1='LHYA95WGSUFQTKO2Y4JUQ8B' where id=9; -update noar ti set b1='LHYA95WGSUFQTKO2Y4JUQ8B' where id=9; -update noar tt set v0='WUXLJKIMXT758FZQ9XAJLHHK8BHY' where id=9; -update noar ti set v0='WUXLJKIMXT758FZQ9XAJLHHK8BHY' where id=9; -update noar tt set b2='S3XY8TTBZOJDEQ65ZIRXTA7DXYX' where id=9; -update noar ti set b2='S3XY8TTBZOJDEQ65ZIRXTA7DXYX' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 mediumblob not null, - b1 longblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='2ILZ' where id=1; -update noar ti set v0='2ILZ' where id=1; -update noar tt set b0='EC2DB40PJPXYCM' where id=1; -update noar ti set b0='EC2DB40PJPXYCM' where id=1; -update noar tt set v0='Q56QK20ZVFFTYIRHT3HRO5LHXX2A' where id=1; -update noar ti set v0='Q56QK20ZVFFTYIRHT3HRO5LHXX2A' where id=1; -update noar tt set b1='35Y4YJ7Q6APBMA3Y6' where id=1; -update noar ti set b1='35Y4YJ7Q6APBMA3Y6' where id=1; -update noar tt set v0='EZ2RY65IWA2AX0DIT0W7UVO1U7FKGDJO' where id=1; -update noar ti set v0='EZ2RY65IWA2AX0DIT0W7UVO1U7FKGDJO' where id=1; -update noar tt set b2='7H' where id=1; -update noar ti set b2='7H' where id=1; -update noar tt set v0='0RAW4EE86K22E5HST5EE7G8' where id=2; -update noar ti set v0='0RAW4EE86K22E5HST5EE7G8' where id=2; -update noar tt set b0='UO49FZ0A16ZILH790RTWQQPK' where id=2; -update noar ti set b0='UO49FZ0A16ZILH790RTWQQPK' where id=2; -update noar tt set v0='JKU23TO8EYKZ' where id=2; -update noar ti set v0='JKU23TO8EYKZ' where id=2; -update noar tt set b1='2H1DMWZSW' where id=2; -update noar ti set b1='2H1DMWZSW' where id=2; -update noar tt set v0='RRMYN3PW74FL7GHYAFZXNEOT' where id=2; -update noar ti set v0='RRMYN3PW74FL7GHYAFZXNEOT' where id=2; -update noar tt set b2='W3NOD0QR75HDT8H3RU7K4T5J6A34O6D' where id=2; -update noar ti set b2='W3NOD0QR75HDT8H3RU7K4T5J6A34O6D' where id=2; -update noar tt set v0='3GJWTO5Z' where id=3; -update noar ti set v0='3GJWTO5Z' where id=3; -update noar tt set b0='CN8QL0OXPCMDXNDRNH' where id=3; -update noar ti set b0='CN8QL0OXPCMDXNDRNH' where id=3; -update noar tt set v0='I5897KCNWE' where id=3; -update noar ti set v0='I5897KCNWE' where id=3; -update noar tt set b1='L8TG6653YGZXH' where id=3; -update noar ti set b1='L8TG6653YGZXH' where id=3; -update noar tt set v0='DSSIQV5QU' where id=3; -update noar ti set v0='DSSIQV5QU' where id=3; -update noar tt set b2='WZG4ZDR140F652LJADP' where id=3; -update noar ti set b2='WZG4ZDR140F652LJADP' where id=3; -update noar tt set v0='DE1JB' where id=4; -update noar ti set v0='DE1JB' where id=4; -update noar tt set b0='TMFQH787LU6MCMUFKCXW3K3U9AX8HC' where id=4; -update noar ti set b0='TMFQH787LU6MCMUFKCXW3K3U9AX8HC' where id=4; -update noar tt set v0='W5BI4AVIQV' where id=4; -update noar ti set v0='W5BI4AVIQV' where id=4; -update noar tt set b1='5T1PGF2CAEU799SHQ' where id=4; -update noar ti set b1='5T1PGF2CAEU799SHQ' where id=4; -update noar tt set v0='E18INA41CSOVI6X0YES' where id=4; -update noar ti set v0='E18INA41CSOVI6X0YES' where id=4; -update noar tt set b2='S1SDYU28WMEB' where id=4; -update noar ti set b2='S1SDYU28WMEB' where id=4; -update noar tt set v0='5FMBX4JJH7BDXXTY' where id=5; -update noar ti set v0='5FMBX4JJH7BDXXTY' where id=5; -update noar tt set b0='U21SWD95UC5D6WK' where id=5; -update noar ti set b0='U21SWD95UC5D6WK' where id=5; -update noar tt set v0='KOA4YF0DIORPY9PH' where id=5; -update noar ti set v0='KOA4YF0DIORPY9PH' where id=5; -update noar tt set b1='G4ZDF1H8W8JKE947F55CDJJSIW' where id=5; -update noar ti set b1='G4ZDF1H8W8JKE947F55CDJJSIW' where id=5; -update noar tt set v0='IA7VJO92RM5PR' where id=5; -update noar ti set v0='IA7VJO92RM5PR' where id=5; -update noar tt set b2='51HGLPS16LBXFZZEJJNAVF6SGQA7ZLB' where id=5; -update noar ti set b2='51HGLPS16LBXFZZEJJNAVF6SGQA7ZLB' where id=5; -update noar tt set v0='OWGPFRKXO85CT3YUE8WC4WN87JOFJ6G1' where id=6; -update noar ti set v0='OWGPFRKXO85CT3YUE8WC4WN87JOFJ6G1' where id=6; -update noar tt set b0='EP6TG4WLY63QOLPXRP4V4OOU2' where id=6; -update noar ti set b0='EP6TG4WLY63QOLPXRP4V4OOU2' where id=6; -update noar tt set v0='E3PFBB4JE8JJ0XW' where id=6; -update noar ti set v0='E3PFBB4JE8JJ0XW' where id=6; -update noar tt set b1='SUBZ6CDLFTS2GM4A753VA' where id=6; -update noar ti set b1='SUBZ6CDLFTS2GM4A753VA' where id=6; -update noar tt set v0='G1XWSSEZGGS0SLY1BISMJ' where id=6; -update noar ti set v0='G1XWSSEZGGS0SLY1BISMJ' where id=6; -update noar tt set b2='UA1FLG0XFXP69QUM' where id=6; -update noar ti set b2='UA1FLG0XFXP69QUM' where id=6; -update noar tt set v0='CD6VOUA0SYMEZ' where id=7; -update noar ti set v0='CD6VOUA0SYMEZ' where id=7; -update noar tt set b0='MGJ2H5AF3MRLD94' where id=7; -update noar ti set b0='MGJ2H5AF3MRLD94' where id=7; -update noar tt set v0='MHUKEY22WIM1U3AM9VP9D4ZU9MAL0O' where id=7; -update noar ti set v0='MHUKEY22WIM1U3AM9VP9D4ZU9MAL0O' where id=7; -update noar tt set b1='Q' where id=7; -update noar ti set b1='Q' where id=7; -update noar tt set v0='RSRFRYHC3NQ23YY1T9Y54' where id=7; -update noar ti set v0='RSRFRYHC3NQ23YY1T9Y54' where id=7; -update noar tt set b2='29UIT2ODNFU0F3IJFJ1Z2K3CTKVYMEM1' where id=7; -update noar ti set b2='29UIT2ODNFU0F3IJFJ1Z2K3CTKVYMEM1' where id=7; -update noar tt set v0='SOR8KWP4L8R00Q7Z3H72AO2' where id=8; -update noar ti set v0='SOR8KWP4L8R00Q7Z3H72AO2' where id=8; -update noar tt set b0='LHAMU6Q0JNQ18EIEOL0MZ8E5' where id=8; -update noar ti set b0='LHAMU6Q0JNQ18EIEOL0MZ8E5' where id=8; -update noar tt set v0='J8Q36JWZULIGIMDEFL0CGJHCMA' where id=8; -update noar ti set v0='J8Q36JWZULIGIMDEFL0CGJHCMA' where id=8; -update noar tt set b1='MLO7AU04JXN8BW4094EVGA25YRQA' where id=8; -update noar ti set b1='MLO7AU04JXN8BW4094EVGA25YRQA' where id=8; -update noar tt set v0='NB' where id=8; -update noar ti set v0='NB' where id=8; -update noar tt set b2='1JLDKBEEYE3L' where id=8; -update noar ti set b2='1JLDKBEEYE3L' where id=8; -update noar tt set v0='TS89N' where id=9; -update noar ti set v0='TS89N' where id=9; -update noar tt set b0='P0VGLFCBH4FW92DZS6H6YZ35M' where id=9; -update noar ti set b0='P0VGLFCBH4FW92DZS6H6YZ35M' where id=9; -update noar tt set v0='H9WMGS' where id=9; -update noar ti set v0='H9WMGS' where id=9; -update noar tt set b1='4GWF7K' where id=9; -update noar ti set b1='4GWF7K' where id=9; -update noar tt set v0='YP8DUVFOGGBWO6P7G12I7TXXT' where id=9; -update noar ti set v0='YP8DUVFOGGBWO6P7G12I7TXXT' where id=9; -update noar tt set b2='YUDEX6B1NMV8GS0QEWDNC' where id=9; -update noar ti set b2='YUDEX6B1NMV8GS0QEWDNC' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 mediumblob null, - b1 longblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='AW2OD3GD' where id=1; -update noar ti set v0='AW2OD3GD' where id=1; -update noar tt set b0='LD362B0PY4GL3FP1N2K1ZQO' where id=1; -update noar ti set b0='LD362B0PY4GL3FP1N2K1ZQO' where id=1; -update noar tt set v0='NJUSK' where id=1; -update noar ti set v0='NJUSK' where id=1; -update noar tt set b1='F' where id=1; -update noar ti set b1='F' where id=1; -update noar tt set v0='BJJ9M6P7QKBIQVRWX4HZ2DOBN85CYUX' where id=1; -update noar ti set v0='BJJ9M6P7QKBIQVRWX4HZ2DOBN85CYUX' where id=1; -update noar tt set b2='TYHABQSNJ1K22M09URS41D' where id=1; -update noar ti set b2='TYHABQSNJ1K22M09URS41D' where id=1; -update noar tt set v0='QRK51RMVEC75W2VLPKO8BEAJ2F5Y' where id=2; -update noar ti set v0='QRK51RMVEC75W2VLPKO8BEAJ2F5Y' where id=2; -update noar tt set b0='JPET4IBA84O284OPWW7T' where id=2; -update noar ti set b0='JPET4IBA84O284OPWW7T' where id=2; -update noar tt set v0='XNEREF12QCG6OABO8JDTC39' where id=2; -update noar ti set v0='XNEREF12QCG6OABO8JDTC39' where id=2; -update noar tt set b1='XP1G1POT0LU1PH460E3YCX00KEL2ZYGH' where id=2; -update noar ti set b1='XP1G1POT0LU1PH460E3YCX00KEL2ZYGH' where id=2; -update noar tt set v0='2ECYTOWRO36RH5J2' where id=2; -update noar ti set v0='2ECYTOWRO36RH5J2' where id=2; -update noar tt set b2='28E5SE' where id=2; -update noar ti set b2='28E5SE' where id=2; -update noar tt set v0='14272XVETGR3VA1Z0V3A4PFJRU' where id=3; -update noar ti set v0='14272XVETGR3VA1Z0V3A4PFJRU' where id=3; -update noar tt set b0='31ZJQR5435MQL6KOUNUVGDFFK' where id=3; -update noar ti set b0='31ZJQR5435MQL6KOUNUVGDFFK' where id=3; -update noar tt set v0='WTF4054OEH982JDO00' where id=3; -update noar ti set v0='WTF4054OEH982JDO00' where id=3; -update noar tt set b1='ZSG682327IWQ64PEDQ19' where id=3; -update noar ti set b1='ZSG682327IWQ64PEDQ19' where id=3; -update noar tt set v0='ET2' where id=3; -update noar ti set v0='ET2' where id=3; -update noar tt set b2='BZ5OA' where id=3; -update noar ti set b2='BZ5OA' where id=3; -update noar tt set v0='BZK47' where id=4; -update noar ti set v0='BZK47' where id=4; -update noar tt set b0='VIS0F5Q2M7J' where id=4; -update noar ti set b0='VIS0F5Q2M7J' where id=4; -update noar tt set v0='6GN9JDJUGUJ1RMBA3JI' where id=4; -update noar ti set v0='6GN9JDJUGUJ1RMBA3JI' where id=4; -update noar tt set b1='7KCYUNPOAXVLDI7G8O6QKH' where id=4; -update noar ti set b1='7KCYUNPOAXVLDI7G8O6QKH' where id=4; -update noar tt set v0='N3' where id=4; -update noar ti set v0='N3' where id=4; -update noar tt set b2='FGJIZ58FVIY30WQSE5R5AW' where id=4; -update noar ti set b2='FGJIZ58FVIY30WQSE5R5AW' where id=4; -update noar tt set v0='RLE8P7' where id=5; -update noar ti set v0='RLE8P7' where id=5; -update noar tt set b0='2DCN2T9BYR0PC7QPQP56S' where id=5; -update noar ti set b0='2DCN2T9BYR0PC7QPQP56S' where id=5; -update noar tt set v0='KIMLSNBFAOASH5BEYNF0AN7XYV' where id=5; -update noar ti set v0='KIMLSNBFAOASH5BEYNF0AN7XYV' where id=5; -update noar tt set b1='LGR3R859K5XVPBNXI' where id=5; -update noar ti set b1='LGR3R859K5XVPBNXI' where id=5; -update noar tt set v0='DDK3QTDLKYSBUJ45O6BBWNNHI9J' where id=5; -update noar ti set v0='DDK3QTDLKYSBUJ45O6BBWNNHI9J' where id=5; -update noar tt set b2='0J313M5XGSZ5JGO3FWKGCR8' where id=5; -update noar ti set b2='0J313M5XGSZ5JGO3FWKGCR8' where id=5; -update noar tt set v0='QKHEY31TBVXX9GGTQ' where id=6; -update noar ti set v0='QKHEY31TBVXX9GGTQ' where id=6; -update noar tt set b0='GCA3TNF' where id=6; -update noar ti set b0='GCA3TNF' where id=6; -update noar tt set v0='6R75YFUCHPV6S0ZKO6WZKT5' where id=6; -update noar ti set v0='6R75YFUCHPV6S0ZKO6WZKT5' where id=6; -update noar tt set b1='H8P5MLQ2GMF3EI73W8BOXR0Z5QMMD7' where id=6; -update noar ti set b1='H8P5MLQ2GMF3EI73W8BOXR0Z5QMMD7' where id=6; -update noar tt set v0='5FPFN6VW5EIE9JGM' where id=6; -update noar ti set v0='5FPFN6VW5EIE9JGM' where id=6; -update noar tt set b2='WD2JX194' where id=6; -update noar ti set b2='WD2JX194' where id=6; -update noar tt set v0='IS1XT4LLD46FC5M80QNUE49BR' where id=7; -update noar ti set v0='IS1XT4LLD46FC5M80QNUE49BR' where id=7; -update noar tt set b0='CZI3' where id=7; -update noar ti set b0='CZI3' where id=7; -update noar tt set v0='3XQ0679P67887H8' where id=7; -update noar ti set v0='3XQ0679P67887H8' where id=7; -update noar tt set b1='QLV' where id=7; -update noar ti set b1='QLV' where id=7; -update noar tt set v0='6WMIUUJHCR1' where id=7; -update noar ti set v0='6WMIUUJHCR1' where id=7; -update noar tt set b2='IM9NUCDA' where id=7; -update noar ti set b2='IM9NUCDA' where id=7; -update noar tt set v0='OM9' where id=8; -update noar ti set v0='OM9' where id=8; -update noar tt set b0='4TAL4BXY0L1SNT00MA1E' where id=8; -update noar ti set b0='4TAL4BXY0L1SNT00MA1E' where id=8; -update noar tt set v0='Y09B0WO5XG66YFI9XV48JZ' where id=8; -update noar ti set v0='Y09B0WO5XG66YFI9XV48JZ' where id=8; -update noar tt set b1='6CVSMPHFRZUTYYPK1GVFYVRGASMF9' where id=8; -update noar ti set b1='6CVSMPHFRZUTYYPK1GVFYVRGASMF9' where id=8; -update noar tt set v0='YKHKWB8KAUQUB' where id=8; -update noar ti set v0='YKHKWB8KAUQUB' where id=8; -update noar tt set b2='CXSVD0YIDHDCCG5VYWK847F6' where id=8; -update noar ti set b2='CXSVD0YIDHDCCG5VYWK847F6' where id=8; -update noar tt set v0='STWZ8EFG' where id=9; -update noar ti set v0='STWZ8EFG' where id=9; -update noar tt set b0='L5FN0Q3HRTD2' where id=9; -update noar ti set b0='L5FN0Q3HRTD2' where id=9; -update noar tt set v0='BRXONH' where id=9; -update noar ti set v0='BRXONH' where id=9; -update noar tt set b1='ZXN9DJBZQLCZ20ZN7' where id=9; -update noar ti set b1='ZXN9DJBZQLCZ20ZN7' where id=9; -update noar tt set v0='VI2ACASVXBNGE8GPBK6OU2WXK' where id=9; -update noar ti set v0='VI2ACASVXBNGE8GPBK6OU2WXK' where id=9; -update noar tt set b2='LMPC2ETNA' where id=9; -update noar ti set b2='LMPC2ETNA' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 mediumblob null, - b1 longblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='GFVBAQREW06YKPH3ZKO5QGNSXJHJHYP' where id=1; -update noar ti set v0='GFVBAQREW06YKPH3ZKO5QGNSXJHJHYP' where id=1; -update noar tt set b0='IM68GEOZJYF4IWM2Q1AJX1JDS3' where id=1; -update noar ti set b0='IM68GEOZJYF4IWM2Q1AJX1JDS3' where id=1; -update noar tt set v0='797K4URFJYTU4AKXX4T8ZIMBTTREKMEN' where id=1; -update noar ti set v0='797K4URFJYTU4AKXX4T8ZIMBTTREKMEN' where id=1; -update noar tt set b1='TQKGOJ' where id=1; -update noar ti set b1='TQKGOJ' where id=1; -update noar tt set v0='F1YPQRFBIKU527B4C4OTMQ151RZDL4GX' where id=1; -update noar ti set v0='F1YPQRFBIKU527B4C4OTMQ151RZDL4GX' where id=1; -update noar tt set b2='LS6IXQ5IVE31Z52K2JEZU7' where id=1; -update noar ti set b2='LS6IXQ5IVE31Z52K2JEZU7' where id=1; -update noar tt set v0='J4UOLAMN6B8XYNHFQCM6L' where id=2; -update noar ti set v0='J4UOLAMN6B8XYNHFQCM6L' where id=2; -update noar tt set b0='L65GIWZORKTMQVP' where id=2; -update noar ti set b0='L65GIWZORKTMQVP' where id=2; -update noar tt set v0='Q4B93LVPSFJ0' where id=2; -update noar ti set v0='Q4B93LVPSFJ0' where id=2; -update noar tt set b1='BDTLPEH6HZG5T33HEPG' where id=2; -update noar ti set b1='BDTLPEH6HZG5T33HEPG' where id=2; -update noar tt set v0='MZXCDT6' where id=2; -update noar ti set v0='MZXCDT6' where id=2; -update noar tt set b2='NF9RRLPHRE27SPVIVYO1QYM1GQX2C' where id=2; -update noar ti set b2='NF9RRLPHRE27SPVIVYO1QYM1GQX2C' where id=2; -update noar tt set v0='J4BU1W7REMUKXRZL8HNQMQPX' where id=3; -update noar ti set v0='J4BU1W7REMUKXRZL8HNQMQPX' where id=3; -update noar tt set b0='XYOQF1BGUALE93SPMPA3V2M6FD3HVQJ' where id=3; -update noar ti set b0='XYOQF1BGUALE93SPMPA3V2M6FD3HVQJ' where id=3; -update noar tt set v0='KM2CEA871P1NO6H47' where id=3; -update noar ti set v0='KM2CEA871P1NO6H47' where id=3; -update noar tt set b1='94S7HOXCPBEUV5VYF25Z' where id=3; -update noar ti set b1='94S7HOXCPBEUV5VYF25Z' where id=3; -update noar tt set v0='K5B' where id=3; -update noar ti set v0='K5B' where id=3; -update noar tt set b2='03TL80UC7J75ZV8QW655MXCPHD18WQ' where id=3; -update noar ti set b2='03TL80UC7J75ZV8QW655MXCPHD18WQ' where id=3; -update noar tt set v0='8NPRY9QZ5AS8KELE8C' where id=4; -update noar ti set v0='8NPRY9QZ5AS8KELE8C' where id=4; -update noar tt set b0='45J3TDDBV7CNO387HGRGGJC2IS8' where id=4; -update noar ti set b0='45J3TDDBV7CNO387HGRGGJC2IS8' where id=4; -update noar tt set v0='1X9O' where id=4; -update noar ti set v0='1X9O' where id=4; -update noar tt set b1='748TTPZYZO7W4WTIJ' where id=4; -update noar ti set b1='748TTPZYZO7W4WTIJ' where id=4; -update noar tt set v0='EGVA4ZBNYAB2P5F2T' where id=4; -update noar ti set v0='EGVA4ZBNYAB2P5F2T' where id=4; -update noar tt set b2='CM5JF' where id=4; -update noar ti set b2='CM5JF' where id=4; -update noar tt set v0='NA4F40ROMV9RJ90X33RRR9GOMSB79G' where id=5; -update noar ti set v0='NA4F40ROMV9RJ90X33RRR9GOMSB79G' where id=5; -update noar tt set b0='R8XA2S55BRHOYJ5F63O' where id=5; -update noar ti set b0='R8XA2S55BRHOYJ5F63O' where id=5; -update noar tt set v0='BFSK1QVY8QS6P520515' where id=5; -update noar ti set v0='BFSK1QVY8QS6P520515' where id=5; -update noar tt set b1='V82EP3EY21TF0GYJEDJB6TK777V468L' where id=5; -update noar ti set b1='V82EP3EY21TF0GYJEDJB6TK777V468L' where id=5; -update noar tt set v0='ZSKLP21' where id=5; -update noar ti set v0='ZSKLP21' where id=5; -update noar tt set b2='6MRX5I3WNEKK' where id=5; -update noar ti set b2='6MRX5I3WNEKK' where id=5; -update noar tt set v0='EELYQHJUMOXFSOWIACVIX1M98DYLT4' where id=6; -update noar ti set v0='EELYQHJUMOXFSOWIACVIX1M98DYLT4' where id=6; -update noar tt set b0='Y9ZJPJ0QXQ31IN7BRHC7B65MFS' where id=6; -update noar ti set b0='Y9ZJPJ0QXQ31IN7BRHC7B65MFS' where id=6; -update noar tt set v0='82L' where id=6; -update noar ti set v0='82L' where id=6; -update noar tt set b1='6JYV5JRCFFPFK41WR6Q' where id=6; -update noar ti set b1='6JYV5JRCFFPFK41WR6Q' where id=6; -update noar tt set v0='L' where id=6; -update noar ti set v0='L' where id=6; -update noar tt set b2='D8QQ' where id=6; -update noar ti set b2='D8QQ' where id=6; -update noar tt set v0='80H89' where id=7; -update noar ti set v0='80H89' where id=7; -update noar tt set b0='TAFW7RE4REC3LNPX18C0QY' where id=7; -update noar ti set b0='TAFW7RE4REC3LNPX18C0QY' where id=7; -update noar tt set v0='KAGU' where id=7; -update noar ti set v0='KAGU' where id=7; -update noar tt set b1='LZNXX0959H5ED8QHDU6UXQT1WA' where id=7; -update noar ti set b1='LZNXX0959H5ED8QHDU6UXQT1WA' where id=7; -update noar tt set v0='WUU4MI2ET0RZQB' where id=7; -update noar ti set v0='WUU4MI2ET0RZQB' where id=7; -update noar tt set b2='AGK3XHZEBS5' where id=7; -update noar ti set b2='AGK3XHZEBS5' where id=7; -update noar tt set v0='ECA81L0Z58ANQVR63KHKES49ZL6EWW' where id=8; -update noar ti set v0='ECA81L0Z58ANQVR63KHKES49ZL6EWW' where id=8; -update noar tt set b0='JB495VPK' where id=8; -update noar ti set b0='JB495VPK' where id=8; -update noar tt set v0='MFO2' where id=8; -update noar ti set v0='MFO2' where id=8; -update noar tt set b1='MJREI2BSLULVL' where id=8; -update noar ti set b1='MJREI2BSLULVL' where id=8; -update noar tt set v0='Y0SS5UUUT53SJQFDZJI3659BR3K' where id=8; -update noar ti set v0='Y0SS5UUUT53SJQFDZJI3659BR3K' where id=8; -update noar tt set b2='RD' where id=8; -update noar ti set b2='RD' where id=8; -update noar tt set v0='T4DMD5CDZWUAY3Y36' where id=9; -update noar ti set v0='T4DMD5CDZWUAY3Y36' where id=9; -update noar tt set b0='48' where id=9; -update noar ti set b0='48' where id=9; -update noar tt set v0='K' where id=9; -update noar ti set v0='K' where id=9; -update noar tt set b1='9SEYLX2KGLOGJZNXX' where id=9; -update noar ti set b1='9SEYLX2KGLOGJZNXX' where id=9; -update noar tt set v0='VSCF' where id=9; -update noar ti set v0='VSCF' where id=9; -update noar tt set b2='VQBHMDLD0T2XHVBJD5' where id=9; -update noar ti set b2='VQBHMDLD0T2XHVBJD5' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 mediumblob not null, - b1 longblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='G' where id=1; -update noar ti set v0='G' where id=1; -update noar tt set b0='VAND2VIP5YLB0PPBZ961VVVF' where id=1; -update noar ti set b0='VAND2VIP5YLB0PPBZ961VVVF' where id=1; -update noar tt set v0='PXMUZSAL35EG5NDGO4' where id=1; -update noar ti set v0='PXMUZSAL35EG5NDGO4' where id=1; -update noar tt set b1='DFM4ER0JQ6NN05XRDBR22H' where id=1; -update noar ti set b1='DFM4ER0JQ6NN05XRDBR22H' where id=1; -update noar tt set v0='DXY' where id=1; -update noar ti set v0='DXY' where id=1; -update noar tt set b2='NS8EHGK3BXBM61FU0HXMG13KWA8936' where id=1; -update noar ti set b2='NS8EHGK3BXBM61FU0HXMG13KWA8936' where id=1; -update noar tt set v0='P72602TGNU' where id=2; -update noar ti set v0='P72602TGNU' where id=2; -update noar tt set b0='P5UHFRNRTJ2SCVWTU' where id=2; -update noar ti set b0='P5UHFRNRTJ2SCVWTU' where id=2; -update noar tt set v0='90EQCZY01DS063Y8RPGEFFPRKB' where id=2; -update noar ti set v0='90EQCZY01DS063Y8RPGEFFPRKB' where id=2; -update noar tt set b1='B9KN3OVZNDVQDR98KAHQGUOA6HRR' where id=2; -update noar ti set b1='B9KN3OVZNDVQDR98KAHQGUOA6HRR' where id=2; -update noar tt set v0='9NIGMQ30WMDMLKJWEKBNIOQ9R8GQH' where id=2; -update noar ti set v0='9NIGMQ30WMDMLKJWEKBNIOQ9R8GQH' where id=2; -update noar tt set b2='2RY63T41FRDOGB1MJ4MNWF7QW6O4VNMU' where id=2; -update noar ti set b2='2RY63T41FRDOGB1MJ4MNWF7QW6O4VNMU' where id=2; -update noar tt set v0='VOBZ9E5HN5PLDZ8WTSGRZ4F' where id=3; -update noar ti set v0='VOBZ9E5HN5PLDZ8WTSGRZ4F' where id=3; -update noar tt set b0='BMFSDJUT2OWQKFG894IAFGPFSY' where id=3; -update noar ti set b0='BMFSDJUT2OWQKFG894IAFGPFSY' where id=3; -update noar tt set v0='NZKF22IJSEM325QAECDAZRMDXFNBDM' where id=3; -update noar ti set v0='NZKF22IJSEM325QAECDAZRMDXFNBDM' where id=3; -update noar tt set b1='1HLTX77QNRUI2FJ3T6F9' where id=3; -update noar ti set b1='1HLTX77QNRUI2FJ3T6F9' where id=3; -update noar tt set v0='FGCMAVX0BW5UJHW73QTZJEPO4' where id=3; -update noar ti set v0='FGCMAVX0BW5UJHW73QTZJEPO4' where id=3; -update noar tt set b2='A6ANELT5R4SOTNQM8D12OJ4K7XTH6' where id=3; -update noar ti set b2='A6ANELT5R4SOTNQM8D12OJ4K7XTH6' where id=3; -update noar tt set v0='IV7U64WM8BJNU' where id=4; -update noar ti set v0='IV7U64WM8BJNU' where id=4; -update noar tt set b0='7NHBKRGA3J9HZGGA98J2KFY' where id=4; -update noar ti set b0='7NHBKRGA3J9HZGGA98J2KFY' where id=4; -update noar tt set v0='KQA778' where id=4; -update noar ti set v0='KQA778' where id=4; -update noar tt set b1='BKCZPSWKTIRJI6H5GH39I3ZFE79L' where id=4; -update noar ti set b1='BKCZPSWKTIRJI6H5GH39I3ZFE79L' where id=4; -update noar tt set v0='09P40844DPQ4AD7YHW5R5W0YA' where id=4; -update noar ti set v0='09P40844DPQ4AD7YHW5R5W0YA' where id=4; -update noar tt set b2='PFTMK7OJ' where id=4; -update noar ti set b2='PFTMK7OJ' where id=4; -update noar tt set v0='B7OCE' where id=5; -update noar ti set v0='B7OCE' where id=5; -update noar tt set b0='P4K6WO9ZGIYWXTALZ4K3WXQ4A8ZBZH' where id=5; -update noar ti set b0='P4K6WO9ZGIYWXTALZ4K3WXQ4A8ZBZH' where id=5; -update noar tt set v0='9J7TEROHHPY99BUCBVLC6LF4PHLRPCRT' where id=5; -update noar ti set v0='9J7TEROHHPY99BUCBVLC6LF4PHLRPCRT' where id=5; -update noar tt set b1='ZR36ZBK86UEEWJI7FSAA59TBE1' where id=5; -update noar ti set b1='ZR36ZBK86UEEWJI7FSAA59TBE1' where id=5; -update noar tt set v0='VCHB' where id=5; -update noar ti set v0='VCHB' where id=5; -update noar tt set b2='VOCE69FAPUN2XOAI96GU5' where id=5; -update noar ti set b2='VOCE69FAPUN2XOAI96GU5' where id=5; -update noar tt set v0='Z' where id=6; -update noar ti set v0='Z' where id=6; -update noar tt set b0='M3Y04D0V12UE20SV1Q9NUU5IPQIVZGBZ' where id=6; -update noar ti set b0='M3Y04D0V12UE20SV1Q9NUU5IPQIVZGBZ' where id=6; -update noar tt set v0='1IJW3F9O7MHN2LN3' where id=6; -update noar ti set v0='1IJW3F9O7MHN2LN3' where id=6; -update noar tt set b1='BEVM5ASK74UL5P8DLYE' where id=6; -update noar ti set b1='BEVM5ASK74UL5P8DLYE' where id=6; -update noar tt set v0='JPGKTZ6S1OZQ3R05G' where id=6; -update noar ti set v0='JPGKTZ6S1OZQ3R05G' where id=6; -update noar tt set b2='8JTQZ7V0OW4GHOMMAWB0QA2JQC383' where id=6; -update noar ti set b2='8JTQZ7V0OW4GHOMMAWB0QA2JQC383' where id=6; -update noar tt set v0='8Q4X8FTS4317' where id=7; -update noar ti set v0='8Q4X8FTS4317' where id=7; -update noar tt set b0='P0762NB0AZO6GTTBXCZ434FM8FG' where id=7; -update noar ti set b0='P0762NB0AZO6GTTBXCZ434FM8FG' where id=7; -update noar tt set v0='DV3' where id=7; -update noar ti set v0='DV3' where id=7; -update noar tt set b1='T0CE' where id=7; -update noar ti set b1='T0CE' where id=7; -update noar tt set v0='QLVY' where id=7; -update noar ti set v0='QLVY' where id=7; -update noar tt set b2='OMEKF' where id=7; -update noar ti set b2='OMEKF' where id=7; -update noar tt set v0='RXWO' where id=8; -update noar ti set v0='RXWO' where id=8; -update noar tt set b0='7Q7SY0D4W3C0TZDGTI5BEJD5' where id=8; -update noar ti set b0='7Q7SY0D4W3C0TZDGTI5BEJD5' where id=8; -update noar tt set v0='JM0D9VG8XLDTN3MSGE6LU' where id=8; -update noar ti set v0='JM0D9VG8XLDTN3MSGE6LU' where id=8; -update noar tt set b1='1XRWW45Q00BAT1FULKP0N' where id=8; -update noar ti set b1='1XRWW45Q00BAT1FULKP0N' where id=8; -update noar tt set v0='G1L5UPGBQWZ4QUR71H6YCH60TWW8OZHB' where id=8; -update noar ti set v0='G1L5UPGBQWZ4QUR71H6YCH60TWW8OZHB' where id=8; -update noar tt set b2='V9OJRMLCDW46D6T5R5LN4FPNURE7TF' where id=8; -update noar ti set b2='V9OJRMLCDW46D6T5R5LN4FPNURE7TF' where id=8; -update noar tt set v0='UEGT03NKE1Q302ZXJ2' where id=9; -update noar ti set v0='UEGT03NKE1Q302ZXJ2' where id=9; -update noar tt set b0='WHK6THY43PBQKOACBT' where id=9; -update noar ti set b0='WHK6THY43PBQKOACBT' where id=9; -update noar tt set v0='MJIHUP814XARHFL2OPZKS' where id=9; -update noar ti set v0='MJIHUP814XARHFL2OPZKS' where id=9; -update noar tt set b1='9ACLHM8MVAZC6CTRXV5GKXQ5DN1' where id=9; -update noar ti set b1='9ACLHM8MVAZC6CTRXV5GKXQ5DN1' where id=9; -update noar tt set v0='GQIQ0WY' where id=9; -update noar ti set v0='GQIQ0WY' where id=9; -update noar tt set b2='O7LJT0NABGE5' where id=9; -update noar ti set b2='O7LJT0NABGE5' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 mediumblob not null, - b1 longblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='790RTHC395T6VUA57FX1' where id=1; -update noar ti set v0='790RTHC395T6VUA57FX1' where id=1; -update noar tt set b0='HT628UM42HKNJOBM8YTODY' where id=1; -update noar ti set b0='HT628UM42HKNJOBM8YTODY' where id=1; -update noar tt set v0='52BJ4RVTILA05AUIWWOI707PPPGXM8E' where id=1; -update noar ti set v0='52BJ4RVTILA05AUIWWOI707PPPGXM8E' where id=1; -update noar tt set b1='ONW43OQTL1ODGYH6NBMX' where id=1; -update noar ti set b1='ONW43OQTL1ODGYH6NBMX' where id=1; -update noar tt set v0='LSME4LOU7T4NEFE373VQ55QS' where id=1; -update noar ti set v0='LSME4LOU7T4NEFE373VQ55QS' where id=1; -update noar tt set b2='PN5OM45LA1B8SWRBSHHY6SSI1WSV' where id=1; -update noar ti set b2='PN5OM45LA1B8SWRBSHHY6SSI1WSV' where id=1; -update noar tt set v0='WD' where id=2; -update noar ti set v0='WD' where id=2; -update noar tt set b0='AHX43TEQLHKL1Y7I94A9NAT3T' where id=2; -update noar ti set b0='AHX43TEQLHKL1Y7I94A9NAT3T' where id=2; -update noar tt set v0='L' where id=2; -update noar ti set v0='L' where id=2; -update noar tt set b1='5P7P0XQ7AQ3O' where id=2; -update noar ti set b1='5P7P0XQ7AQ3O' where id=2; -update noar tt set v0='RRA7C2OARDA9XFOEIV' where id=2; -update noar ti set v0='RRA7C2OARDA9XFOEIV' where id=2; -update noar tt set b2='8A4MJ72YHJZ0DHTTJEZ54T912B2P1Z' where id=2; -update noar ti set b2='8A4MJ72YHJZ0DHTTJEZ54T912B2P1Z' where id=2; -update noar tt set v0='01BRERG9FB6N' where id=3; -update noar ti set v0='01BRERG9FB6N' where id=3; -update noar tt set b0='N5' where id=3; -update noar ti set b0='N5' where id=3; -update noar tt set v0='5FV6ZVV9UPI2H4AT9DYDYX82UYJG28K' where id=3; -update noar ti set v0='5FV6ZVV9UPI2H4AT9DYDYX82UYJG28K' where id=3; -update noar tt set b1='KSSUDN39VU' where id=3; -update noar ti set b1='KSSUDN39VU' where id=3; -update noar tt set v0='YFM9TM02KM964YMTYJPPIATLBJWNZ' where id=3; -update noar ti set v0='YFM9TM02KM964YMTYJPPIATLBJWNZ' where id=3; -update noar tt set b2='VXAM0CPF8JY' where id=3; -update noar ti set b2='VXAM0CPF8JY' where id=3; -update noar tt set v0='M' where id=4; -update noar ti set v0='M' where id=4; -update noar tt set b0='E4TNNL7ZTSTDVBIHRCP' where id=4; -update noar ti set b0='E4TNNL7ZTSTDVBIHRCP' where id=4; -update noar tt set v0='4URQ7XB0CREBIDGMU2TPRN24L1YC' where id=4; -update noar ti set v0='4URQ7XB0CREBIDGMU2TPRN24L1YC' where id=4; -update noar tt set b1='XAY2VSX5YVF2M4OK28WNFYG5Z' where id=4; -update noar ti set b1='XAY2VSX5YVF2M4OK28WNFYG5Z' where id=4; -update noar tt set v0='VAURJFSFL63LKHASC0QBSEF7Z0Z8FRG5' where id=4; -update noar ti set v0='VAURJFSFL63LKHASC0QBSEF7Z0Z8FRG5' where id=4; -update noar tt set b2='5BH9HH30AFAZUCVG2ZV0HIQQ1HWN' where id=4; -update noar ti set b2='5BH9HH30AFAZUCVG2ZV0HIQQ1HWN' where id=4; -update noar tt set v0='MN58Y59CF8ZPOA3ZNB6YPSSNF' where id=5; -update noar ti set v0='MN58Y59CF8ZPOA3ZNB6YPSSNF' where id=5; -update noar tt set b0='FAWEUNRX98QGODB' where id=5; -update noar ti set b0='FAWEUNRX98QGODB' where id=5; -update noar tt set v0='G2BEWGS0S476SC02MLAWZSKM67F' where id=5; -update noar ti set v0='G2BEWGS0S476SC02MLAWZSKM67F' where id=5; -update noar tt set b1='JIMPQKSPSU6FDMHN' where id=5; -update noar ti set b1='JIMPQKSPSU6FDMHN' where id=5; -update noar tt set v0='90X8Z18QOII' where id=5; -update noar ti set v0='90X8Z18QOII' where id=5; -update noar tt set b2='E2TZZSWUGHHUB48M' where id=5; -update noar ti set b2='E2TZZSWUGHHUB48M' where id=5; -update noar tt set v0='1W8AR8VKNBWHJVYIPWUNQ6XSV' where id=6; -update noar ti set v0='1W8AR8VKNBWHJVYIPWUNQ6XSV' where id=6; -update noar tt set b0='40XRV7KKCK3YF' where id=6; -update noar ti set b0='40XRV7KKCK3YF' where id=6; -update noar tt set v0='MMLACYF12OLT7QJIGVLO7NN9T5DE' where id=6; -update noar ti set v0='MMLACYF12OLT7QJIGVLO7NN9T5DE' where id=6; -update noar tt set b1='2ATD8' where id=6; -update noar ti set b1='2ATD8' where id=6; -update noar tt set v0='ZQ29ELJKL8FMVFN25YDK7A7A' where id=6; -update noar ti set v0='ZQ29ELJKL8FMVFN25YDK7A7A' where id=6; -update noar tt set b2='7JPC' where id=6; -update noar ti set b2='7JPC' where id=6; -update noar tt set v0='TVZVG42OQXT7W1AAFVGVRA0PQ' where id=7; -update noar ti set v0='TVZVG42OQXT7W1AAFVGVRA0PQ' where id=7; -update noar tt set b0='VC7QWJKY2VA6T' where id=7; -update noar ti set b0='VC7QWJKY2VA6T' where id=7; -update noar tt set v0='ETZWG' where id=7; -update noar ti set v0='ETZWG' where id=7; -update noar tt set b1='YKR7SNOFV7LTHBBARW7QMTHQBOWLJAM4' where id=7; -update noar ti set b1='YKR7SNOFV7LTHBBARW7QMTHQBOWLJAM4' where id=7; -update noar tt set v0='30G4GSXJZ' where id=7; -update noar ti set v0='30G4GSXJZ' where id=7; -update noar tt set b2='ZHOVLIUX4GXYO4BB' where id=7; -update noar ti set b2='ZHOVLIUX4GXYO4BB' where id=7; -update noar tt set v0='KPW7CE5EZP93841EIWR9G' where id=8; -update noar ti set v0='KPW7CE5EZP93841EIWR9G' where id=8; -update noar tt set b0='LL0QMRWAA9PI3T2FPGCZIBFJ3' where id=8; -update noar ti set b0='LL0QMRWAA9PI3T2FPGCZIBFJ3' where id=8; -update noar tt set v0='J1H4HSGZGOW5YQ4AFFEFD3Y4Z3RG1' where id=8; -update noar ti set v0='J1H4HSGZGOW5YQ4AFFEFD3Y4Z3RG1' where id=8; -update noar tt set b1='3D6NSXOSNNFTUN17GPJDPTI39EEJ' where id=8; -update noar ti set b1='3D6NSXOSNNFTUN17GPJDPTI39EEJ' where id=8; -update noar tt set v0='9NO7XV' where id=8; -update noar ti set v0='9NO7XV' where id=8; -update noar tt set b2='UEMTSBBAAEL1T0RYNQJAD7KN5RAI1U' where id=8; -update noar ti set b2='UEMTSBBAAEL1T0RYNQJAD7KN5RAI1U' where id=8; -update noar tt set v0='XMAL5Y4J5I72Z' where id=9; -update noar ti set v0='XMAL5Y4J5I72Z' where id=9; -update noar tt set b0='5Y7LXA9QZPS01' where id=9; -update noar ti set b0='5Y7LXA9QZPS01' where id=9; -update noar tt set v0='4NGEHL5FCVD27B189OU3ELC' where id=9; -update noar ti set v0='4NGEHL5FCVD27B189OU3ELC' where id=9; -update noar tt set b1='UR3JIFC' where id=9; -update noar ti set b1='UR3JIFC' where id=9; -update noar tt set v0='1ICQGUUGU' where id=9; -update noar ti set v0='1ICQGUUGU' where id=9; -update noar tt set b2='53XKIDZT2CRFH38' where id=9; -update noar ti set b2='53XKIDZT2CRFH38' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 longblob null, - b1 tinyblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='NMSM29H6DK50HWHQISJ' where id=1; -update noar ti set v0='NMSM29H6DK50HWHQISJ' where id=1; -update noar tt set b0='9273AYFX0G9X3Z3CAWJXQ1OL6ARUXYLB' where id=1; -update noar ti set b0='9273AYFX0G9X3Z3CAWJXQ1OL6ARUXYLB' where id=1; -update noar tt set v0='UUU6F8RV7R9' where id=1; -update noar ti set v0='UUU6F8RV7R9' where id=1; -update noar tt set b1='DCM' where id=1; -update noar ti set b1='DCM' where id=1; -update noar tt set v0='JT' where id=1; -update noar ti set v0='JT' where id=1; -update noar tt set b2='PR8QLXBMQX106WM' where id=1; -update noar ti set b2='PR8QLXBMQX106WM' where id=1; -update noar tt set v0='BU0PMEXJ8G6QE5YWF0AAE' where id=2; -update noar ti set v0='BU0PMEXJ8G6QE5YWF0AAE' where id=2; -update noar tt set b0='TBW0SONU8T61JI8AK791KDTXQIN9230' where id=2; -update noar ti set b0='TBW0SONU8T61JI8AK791KDTXQIN9230' where id=2; -update noar tt set v0='DYORRDDP8G2NCYDUMV0IRB' where id=2; -update noar ti set v0='DYORRDDP8G2NCYDUMV0IRB' where id=2; -update noar tt set b1='O3CQMSMY' where id=2; -update noar ti set b1='O3CQMSMY' where id=2; -update noar tt set v0='21FILP' where id=2; -update noar ti set v0='21FILP' where id=2; -update noar tt set b2='R8HN' where id=2; -update noar ti set b2='R8HN' where id=2; -update noar tt set v0='B827Z2WU883Z7I' where id=3; -update noar ti set v0='B827Z2WU883Z7I' where id=3; -update noar tt set b0='UMSUPM8K60RN5ER0NKJIL0N06B' where id=3; -update noar ti set b0='UMSUPM8K60RN5ER0NKJIL0N06B' where id=3; -update noar tt set v0='XDADHODWEUY4G4Q0VL2SIBI7' where id=3; -update noar ti set v0='XDADHODWEUY4G4Q0VL2SIBI7' where id=3; -update noar tt set b1='15' where id=3; -update noar ti set b1='15' where id=3; -update noar tt set v0='TGCHUW4F' where id=3; -update noar ti set v0='TGCHUW4F' where id=3; -update noar tt set b2='RAX5FFKBU3KORZVHQBY' where id=3; -update noar ti set b2='RAX5FFKBU3KORZVHQBY' where id=3; -update noar tt set v0='UWNJM31LCHB4JCADLKRS6EFV' where id=4; -update noar ti set v0='UWNJM31LCHB4JCADLKRS6EFV' where id=4; -update noar tt set b0='2D51W3YI331FLFV' where id=4; -update noar ti set b0='2D51W3YI331FLFV' where id=4; -update noar tt set v0='RQ18XZVGTI8JWOH49H' where id=4; -update noar ti set v0='RQ18XZVGTI8JWOH49H' where id=4; -update noar tt set b1='BHGY2M500JY' where id=4; -update noar ti set b1='BHGY2M500JY' where id=4; -update noar tt set v0='EGPSP' where id=4; -update noar ti set v0='EGPSP' where id=4; -update noar tt set b2='20XCRZ14H6PS8C87MTLYV' where id=4; -update noar ti set b2='20XCRZ14H6PS8C87MTLYV' where id=4; -update noar tt set v0='3KYD4KKDFF6EDGNH2EOQSVN4X1A3' where id=5; -update noar ti set v0='3KYD4KKDFF6EDGNH2EOQSVN4X1A3' where id=5; -update noar tt set b0='3ZXORPJRSI0JYWL7' where id=5; -update noar ti set b0='3ZXORPJRSI0JYWL7' where id=5; -update noar tt set v0='5CBV7YFYESZ8092NS36' where id=5; -update noar ti set v0='5CBV7YFYESZ8092NS36' where id=5; -update noar tt set b1='KMQWEB8OND' where id=5; -update noar ti set b1='KMQWEB8OND' where id=5; -update noar tt set v0='DXFS86XHGCBOAWO28' where id=5; -update noar ti set v0='DXFS86XHGCBOAWO28' where id=5; -update noar tt set b2='3XIP7Z10' where id=5; -update noar ti set b2='3XIP7Z10' where id=5; -update noar tt set v0='F0' where id=6; -update noar ti set v0='F0' where id=6; -update noar tt set b0='6DUFB' where id=6; -update noar ti set b0='6DUFB' where id=6; -update noar tt set v0='83K3AJYJAIGQGJZQ9AEXLZ' where id=6; -update noar ti set v0='83K3AJYJAIGQGJZQ9AEXLZ' where id=6; -update noar tt set b1='ZZ' where id=6; -update noar ti set b1='ZZ' where id=6; -update noar tt set v0='UWHL5SFDGC3U8SY962W' where id=6; -update noar ti set v0='UWHL5SFDGC3U8SY962W' where id=6; -update noar tt set b2='LH46J49812YLMJOP6U4P8' where id=6; -update noar ti set b2='LH46J49812YLMJOP6U4P8' where id=6; -update noar tt set v0='ZPS8905B45PQ4XMJ9671' where id=7; -update noar ti set v0='ZPS8905B45PQ4XMJ9671' where id=7; -update noar tt set b0='F2BUSFY79M6FFF43N9C' where id=7; -update noar ti set b0='F2BUSFY79M6FFF43N9C' where id=7; -update noar tt set v0='KDG' where id=7; -update noar ti set v0='KDG' where id=7; -update noar tt set b1='2C950BVNFZH04Y' where id=7; -update noar ti set b1='2C950BVNFZH04Y' where id=7; -update noar tt set v0='EIV2G4FK' where id=7; -update noar ti set v0='EIV2G4FK' where id=7; -update noar tt set b2='O0TF19PKL7QACHFU9640C' where id=7; -update noar ti set b2='O0TF19PKL7QACHFU9640C' where id=7; -update noar tt set v0='E0SS7QM4J5JAL7KAQPRD0X6PLFF3TS6' where id=8; -update noar ti set v0='E0SS7QM4J5JAL7KAQPRD0X6PLFF3TS6' where id=8; -update noar tt set b0='E9K6EGGQNK0PI0B' where id=8; -update noar ti set b0='E9K6EGGQNK0PI0B' where id=8; -update noar tt set v0='IBZSN9Q7GNG7W1JMSGH4RBIAOVT76' where id=8; -update noar ti set v0='IBZSN9Q7GNG7W1JMSGH4RBIAOVT76' where id=8; -update noar tt set b1='Y1URGPYSED9WI0X7YZKAKK2' where id=8; -update noar ti set b1='Y1URGPYSED9WI0X7YZKAKK2' where id=8; -update noar tt set v0='L0RZESP8QO5YU4CT9DX5A3FTRBQMQ6IL' where id=8; -update noar ti set v0='L0RZESP8QO5YU4CT9DX5A3FTRBQMQ6IL' where id=8; -update noar tt set b2='W7YTTAHB8MZCMK57K7U9W1IWXTZV' where id=8; -update noar ti set b2='W7YTTAHB8MZCMK57K7U9W1IWXTZV' where id=8; -update noar tt set v0='NIDNR4DDEZJX8FX' where id=9; -update noar ti set v0='NIDNR4DDEZJX8FX' where id=9; -update noar tt set b0='K5M7UIX6X4AMVMYBA' where id=9; -update noar ti set b0='K5M7UIX6X4AMVMYBA' where id=9; -update noar tt set v0='JJ7KRBADHMYZZKG970SSYJVB4' where id=9; -update noar ti set v0='JJ7KRBADHMYZZKG970SSYJVB4' where id=9; -update noar tt set b1='WLCM4H0G8N6AEM38DXUE429FBY' where id=9; -update noar ti set b1='WLCM4H0G8N6AEM38DXUE429FBY' where id=9; -update noar tt set v0='PX0O3X2985S93SA5XT1Q86OAP4V' where id=9; -update noar ti set v0='PX0O3X2985S93SA5XT1Q86OAP4V' where id=9; -update noar tt set b2='JUIEMBZASHWHKHA' where id=9; -update noar ti set b2='JUIEMBZASHWHKHA' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 longblob null, - b1 tinyblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='X93JKKYLNZ1DJX0G662MC81P8' where id=1; -update noar ti set v0='X93JKKYLNZ1DJX0G662MC81P8' where id=1; -update noar tt set b0='70C8Q9' where id=1; -update noar ti set b0='70C8Q9' where id=1; -update noar tt set v0='2WEG3XPJI7H59VB9DOI3IERT' where id=1; -update noar ti set v0='2WEG3XPJI7H59VB9DOI3IERT' where id=1; -update noar tt set b1='ZK1R0YQN' where id=1; -update noar ti set b1='ZK1R0YQN' where id=1; -update noar tt set v0='138UKGR0RAEQ66C00RYE6HAK24YVCZA' where id=1; -update noar ti set v0='138UKGR0RAEQ66C00RYE6HAK24YVCZA' where id=1; -update noar tt set b2='1KDGDZAMW40942M384LW1NWC0OFPBYZR' where id=1; -update noar ti set b2='1KDGDZAMW40942M384LW1NWC0OFPBYZR' where id=1; -update noar tt set v0='0OZI' where id=2; -update noar ti set v0='0OZI' where id=2; -update noar tt set b0='U4SZ8HT04FMI9TDTNABW' where id=2; -update noar ti set b0='U4SZ8HT04FMI9TDTNABW' where id=2; -update noar tt set v0='7JPRGN4WG7QO2K92FI51PDOMOVK' where id=2; -update noar ti set v0='7JPRGN4WG7QO2K92FI51PDOMOVK' where id=2; -update noar tt set b1='VQO5EJHPNTSIHSQI6XCT2KHOIY0GM6XE' where id=2; -update noar ti set b1='VQO5EJHPNTSIHSQI6XCT2KHOIY0GM6XE' where id=2; -update noar tt set v0='5NE8DB' where id=2; -update noar ti set v0='5NE8DB' where id=2; -update noar tt set b2='9LCIF96V518YY9YJHOVTQZ6M' where id=2; -update noar ti set b2='9LCIF96V518YY9YJHOVTQZ6M' where id=2; -update noar tt set v0='T7XLD98FUQO4MR8N8S0DX4' where id=3; -update noar ti set v0='T7XLD98FUQO4MR8N8S0DX4' where id=3; -update noar tt set b0='KK1C12BDZZVDIDJ2G3' where id=3; -update noar ti set b0='KK1C12BDZZVDIDJ2G3' where id=3; -update noar tt set v0='WKT95IMCT2MEGNI5HU03V6RL8DZT' where id=3; -update noar ti set v0='WKT95IMCT2MEGNI5HU03V6RL8DZT' where id=3; -update noar tt set b1='BFE0VWLYNJVGC7UD10E1H0FYV3' where id=3; -update noar ti set b1='BFE0VWLYNJVGC7UD10E1H0FYV3' where id=3; -update noar tt set v0='H7F98OE9DKXDHDIGJ9M0RFANP65BBDGR' where id=3; -update noar ti set v0='H7F98OE9DKXDHDIGJ9M0RFANP65BBDGR' where id=3; -update noar tt set b2='O' where id=3; -update noar ti set b2='O' where id=3; -update noar tt set v0='1MTIRNG48V1T8XYURCNMV' where id=4; -update noar ti set v0='1MTIRNG48V1T8XYURCNMV' where id=4; -update noar tt set b0='IWS9L80PEDJLT11XCK00KIBM0J2DP' where id=4; -update noar ti set b0='IWS9L80PEDJLT11XCK00KIBM0J2DP' where id=4; -update noar tt set v0='C9P3BNL7' where id=4; -update noar ti set v0='C9P3BNL7' where id=4; -update noar tt set b1='6SSW4V' where id=4; -update noar ti set b1='6SSW4V' where id=4; -update noar tt set v0='XOHPQG1TR5B0LDG3EVSWUQPIBI' where id=4; -update noar ti set v0='XOHPQG1TR5B0LDG3EVSWUQPIBI' where id=4; -update noar tt set b2='W1HKDA0N02' where id=4; -update noar ti set b2='W1HKDA0N02' where id=4; -update noar tt set v0='9YE61SC45H4P2RVHD4QE4Z7F4X' where id=5; -update noar ti set v0='9YE61SC45H4P2RVHD4QE4Z7F4X' where id=5; -update noar tt set b0='LJGYR84YLV4YF1S8PUDRR38ZHBZB9O' where id=5; -update noar ti set b0='LJGYR84YLV4YF1S8PUDRR38ZHBZB9O' where id=5; -update noar tt set v0='AZF49VDJ22T4D5FWZ54FZ1H2MUW61US5' where id=5; -update noar ti set v0='AZF49VDJ22T4D5FWZ54FZ1H2MUW61US5' where id=5; -update noar tt set b1='25TCNQZGUOT1EO' where id=5; -update noar ti set b1='25TCNQZGUOT1EO' where id=5; -update noar tt set v0='K789U8YVKFK1ASMU6555XH2UTM2RSG8' where id=5; -update noar ti set v0='K789U8YVKFK1ASMU6555XH2UTM2RSG8' where id=5; -update noar tt set b2='56HBNVGEB5ELTVVBTVKCGHC' where id=5; -update noar ti set b2='56HBNVGEB5ELTVVBTVKCGHC' where id=5; -update noar tt set v0='QUMVG' where id=6; -update noar ti set v0='QUMVG' where id=6; -update noar tt set b0='PLWJR1I8HQ0S9H989S7ZV8VSA' where id=6; -update noar ti set b0='PLWJR1I8HQ0S9H989S7ZV8VSA' where id=6; -update noar tt set v0='E30JWNCI7' where id=6; -update noar ti set v0='E30JWNCI7' where id=6; -update noar tt set b1='V3R631N5HGSP' where id=6; -update noar ti set b1='V3R631N5HGSP' where id=6; -update noar tt set v0='G4UQTEBRLTS1YU6' where id=6; -update noar ti set v0='G4UQTEBRLTS1YU6' where id=6; -update noar tt set b2='Z1MVBHVOIN2V2BJBWOK3O6Z1I9' where id=6; -update noar ti set b2='Z1MVBHVOIN2V2BJBWOK3O6Z1I9' where id=6; -update noar tt set v0='WU7N3HDCILEXQ0G5DAGL1QN86W7Y' where id=7; -update noar ti set v0='WU7N3HDCILEXQ0G5DAGL1QN86W7Y' where id=7; -update noar tt set b0='1N1PCBWQF59IQR3I9KGBCV3B' where id=7; -update noar ti set b0='1N1PCBWQF59IQR3I9KGBCV3B' where id=7; -update noar tt set v0='Q' where id=7; -update noar ti set v0='Q' where id=7; -update noar tt set b1='181PN5GNN4HC8778WIM76JKLUS53HUS' where id=7; -update noar ti set b1='181PN5GNN4HC8778WIM76JKLUS53HUS' where id=7; -update noar tt set v0='T94NEFAUX4YM3AP29KOB8G' where id=7; -update noar ti set v0='T94NEFAUX4YM3AP29KOB8G' where id=7; -update noar tt set b2='4YG9NHJDFV7H76FEZSZ9E0BHCJT' where id=7; -update noar ti set b2='4YG9NHJDFV7H76FEZSZ9E0BHCJT' where id=7; -update noar tt set v0='MDQO' where id=8; -update noar ti set v0='MDQO' where id=8; -update noar tt set b0='PQHWPQ0P35JC34KVQ5N6VXYYM8J2' where id=8; -update noar ti set b0='PQHWPQ0P35JC34KVQ5N6VXYYM8J2' where id=8; -update noar tt set v0='LCKL0K9PBPGVCB8WU' where id=8; -update noar ti set v0='LCKL0K9PBPGVCB8WU' where id=8; -update noar tt set b1='0C47US0RL4' where id=8; -update noar ti set b1='0C47US0RL4' where id=8; -update noar tt set v0='M8UWSLBX7CD0LW4NW2RB' where id=8; -update noar ti set v0='M8UWSLBX7CD0LW4NW2RB' where id=8; -update noar tt set b2='5Z3H8QMP37GM' where id=8; -update noar ti set b2='5Z3H8QMP37GM' where id=8; -update noar tt set v0='GPWTR613HAU5Z2BRH51BRO' where id=9; -update noar ti set v0='GPWTR613HAU5Z2BRH51BRO' where id=9; -update noar tt set b0='LTGHC9O9IPBSBGT01P2F9' where id=9; -update noar ti set b0='LTGHC9O9IPBSBGT01P2F9' where id=9; -update noar tt set v0='YAWN' where id=9; -update noar ti set v0='YAWN' where id=9; -update noar tt set b1='B65HZ3NMYZYVMG9Z7XF' where id=9; -update noar ti set b1='B65HZ3NMYZYVMG9Z7XF' where id=9; -update noar tt set v0='G5VHN1U1PJJECTCRIQ3PNBV' where id=9; -update noar ti set v0='G5VHN1U1PJJECTCRIQ3PNBV' where id=9; -update noar tt set b2='0A134MBZTZVZRPV2R1Y085H' where id=9; -update noar ti set b2='0A134MBZTZVZRPV2R1Y085H' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 longblob not null, - b1 tinyblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='4JKHGYGKBS0G96RATZ38J' where id=1; -update noar ti set v0='4JKHGYGKBS0G96RATZ38J' where id=1; -update noar tt set b0='WX' where id=1; -update noar ti set b0='WX' where id=1; -update noar tt set v0='EVA9ZA0B073PP7WRNOSJVKHLO' where id=1; -update noar ti set v0='EVA9ZA0B073PP7WRNOSJVKHLO' where id=1; -update noar tt set b1='FV352N8SXI6Q9440H5M6' where id=1; -update noar ti set b1='FV352N8SXI6Q9440H5M6' where id=1; -update noar tt set v0='XQNZGSBUIWJUTR6ZNDV7XIBMFVVZQM5' where id=1; -update noar ti set v0='XQNZGSBUIWJUTR6ZNDV7XIBMFVVZQM5' where id=1; -update noar tt set b2='93NSXKNT76WP1AYJ' where id=1; -update noar ti set b2='93NSXKNT76WP1AYJ' where id=1; -update noar tt set v0='CGB2XFXIR' where id=2; -update noar ti set v0='CGB2XFXIR' where id=2; -update noar tt set b0='IHO327JYV794G0RQH7LA7URIBJWW' where id=2; -update noar ti set b0='IHO327JYV794G0RQH7LA7URIBJWW' where id=2; -update noar tt set v0='UMXMTB98EV60DRZ0JSB' where id=2; -update noar ti set v0='UMXMTB98EV60DRZ0JSB' where id=2; -update noar tt set b1='E9IFJ90331470' where id=2; -update noar ti set b1='E9IFJ90331470' where id=2; -update noar tt set v0='L7IWJAT086QZDQXPF6ECFVH5' where id=2; -update noar ti set v0='L7IWJAT086QZDQXPF6ECFVH5' where id=2; -update noar tt set b2='YQXL29Y5P5JA' where id=2; -update noar ti set b2='YQXL29Y5P5JA' where id=2; -update noar tt set v0='IF3' where id=3; -update noar ti set v0='IF3' where id=3; -update noar tt set b0='Z327MOBIH5UNGT9' where id=3; -update noar ti set b0='Z327MOBIH5UNGT9' where id=3; -update noar tt set v0='ZZEDB552VCCM7I6JM28' where id=3; -update noar ti set v0='ZZEDB552VCCM7I6JM28' where id=3; -update noar tt set b1='9' where id=3; -update noar ti set b1='9' where id=3; -update noar tt set v0='V4PT5595UDSE02CIC94GX4RZZO' where id=3; -update noar ti set v0='V4PT5595UDSE02CIC94GX4RZZO' where id=3; -update noar tt set b2='06NDBSIP6SZOTZ6LBEUP5415HVODSJF4' where id=3; -update noar ti set b2='06NDBSIP6SZOTZ6LBEUP5415HVODSJF4' where id=3; -update noar tt set v0='NPZ2GQHN' where id=4; -update noar ti set v0='NPZ2GQHN' where id=4; -update noar tt set b0='MYQKZXCZR26DP82VWJH0HO3N4GA' where id=4; -update noar ti set b0='MYQKZXCZR26DP82VWJH0HO3N4GA' where id=4; -update noar tt set v0='D5MGNN4Y' where id=4; -update noar ti set v0='D5MGNN4Y' where id=4; -update noar tt set b1='CJ3EQT8H5ZK92SYWQ3U27BS2CNV0I' where id=4; -update noar ti set b1='CJ3EQT8H5ZK92SYWQ3U27BS2CNV0I' where id=4; -update noar tt set v0='J016SR4A1DF2P8X8ZNDV' where id=4; -update noar ti set v0='J016SR4A1DF2P8X8ZNDV' where id=4; -update noar tt set b2='5IANI6G1NQKYF9I46T3' where id=4; -update noar ti set b2='5IANI6G1NQKYF9I46T3' where id=4; -update noar tt set v0='BCIWXNAWRS9M549UQTMSL7PIKXNZH' where id=5; -update noar ti set v0='BCIWXNAWRS9M549UQTMSL7PIKXNZH' where id=5; -update noar tt set b0='Z2ODG96SKB09KIFRJX' where id=5; -update noar ti set b0='Z2ODG96SKB09KIFRJX' where id=5; -update noar tt set v0='IS99EO6VJ66' where id=5; -update noar ti set v0='IS99EO6VJ66' where id=5; -update noar tt set b1='0JRF1RXMGBQMJY0QT6AUVIZ' where id=5; -update noar ti set b1='0JRF1RXMGBQMJY0QT6AUVIZ' where id=5; -update noar tt set v0='LM1FNI62ENHU7AZ865EGKT' where id=5; -update noar ti set v0='LM1FNI62ENHU7AZ865EGKT' where id=5; -update noar tt set b2='9ZT1' where id=5; -update noar ti set b2='9ZT1' where id=5; -update noar tt set v0='L7VFIOX704O6PM51UCBTGC5S8RIC' where id=6; -update noar ti set v0='L7VFIOX704O6PM51UCBTGC5S8RIC' where id=6; -update noar tt set b0='6G4OMQVW5X' where id=6; -update noar ti set b0='6G4OMQVW5X' where id=6; -update noar tt set v0='YZN34MDP466BG55X' where id=6; -update noar ti set v0='YZN34MDP466BG55X' where id=6; -update noar tt set b1='PM8K0Y155ONLXB2W2H9U53ZO' where id=6; -update noar ti set b1='PM8K0Y155ONLXB2W2H9U53ZO' where id=6; -update noar tt set v0='RQVJHLS739VTGG8590HXQ7KI40' where id=6; -update noar ti set v0='RQVJHLS739VTGG8590HXQ7KI40' where id=6; -update noar tt set b2='4' where id=6; -update noar ti set b2='4' where id=6; -update noar tt set v0='8O9' where id=7; -update noar ti set v0='8O9' where id=7; -update noar tt set b0='NFX58YYOUZQD66SJS37JC123LAV5R' where id=7; -update noar ti set b0='NFX58YYOUZQD66SJS37JC123LAV5R' where id=7; -update noar tt set v0='4TBUU' where id=7; -update noar ti set v0='4TBUU' where id=7; -update noar tt set b1='BLUDG' where id=7; -update noar ti set b1='BLUDG' where id=7; -update noar tt set v0='YA2UP7G1I2SS0IWBI1S8IN' where id=7; -update noar ti set v0='YA2UP7G1I2SS0IWBI1S8IN' where id=7; -update noar tt set b2='CJD3WB776' where id=7; -update noar ti set b2='CJD3WB776' where id=7; -update noar tt set v0='COUZVICO6LPT17D8ZSMMRYTXDMM7VFM' where id=8; -update noar ti set v0='COUZVICO6LPT17D8ZSMMRYTXDMM7VFM' where id=8; -update noar tt set b0='E' where id=8; -update noar ti set b0='E' where id=8; -update noar tt set v0='AT' where id=8; -update noar ti set v0='AT' where id=8; -update noar tt set b1='OW597CDINVP6O0' where id=8; -update noar ti set b1='OW597CDINVP6O0' where id=8; -update noar tt set v0='WRM7CFZOUWX4S00HTCOTT5OOAM' where id=8; -update noar ti set v0='WRM7CFZOUWX4S00HTCOTT5OOAM' where id=8; -update noar tt set b2='1WGQ8HBB4EDLR7J5BYQBZ' where id=8; -update noar ti set b2='1WGQ8HBB4EDLR7J5BYQBZ' where id=8; -update noar tt set v0='E7YO7' where id=9; -update noar ti set v0='E7YO7' where id=9; -update noar tt set b0='BAAQSW1W3QQYC' where id=9; -update noar ti set b0='BAAQSW1W3QQYC' where id=9; -update noar tt set v0='6IQDSGGOVZL2H3A5NMVNPECOQEHDNUR' where id=9; -update noar ti set v0='6IQDSGGOVZL2H3A5NMVNPECOQEHDNUR' where id=9; -update noar tt set b1='N3SIY0U25Q4IR4SYI74OJGS' where id=9; -update noar ti set b1='N3SIY0U25Q4IR4SYI74OJGS' where id=9; -update noar tt set v0='R2' where id=9; -update noar ti set v0='R2' where id=9; -update noar tt set b2='JBZC' where id=9; -update noar ti set b2='JBZC' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 longblob not null, - b1 tinyblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='6T57Z0MJ5HF28YRCCLEK4GC' where id=1; -update noar ti set v0='6T57Z0MJ5HF28YRCCLEK4GC' where id=1; -update noar tt set b0='2' where id=1; -update noar ti set b0='2' where id=1; -update noar tt set v0='SPZPC6T4ML6HA2W78HT' where id=1; -update noar ti set v0='SPZPC6T4ML6HA2W78HT' where id=1; -update noar tt set b1='8E5E0EH77USBWL' where id=1; -update noar ti set b1='8E5E0EH77USBWL' where id=1; -update noar tt set v0='JQEBFMBDE0YWEF83LRI97DS730TBH' where id=1; -update noar ti set v0='JQEBFMBDE0YWEF83LRI97DS730TBH' where id=1; -update noar tt set b2='WC' where id=1; -update noar ti set b2='WC' where id=1; -update noar tt set v0='VHYWOX66ZSZ2DCEFMTBNZSTON5EN0' where id=2; -update noar ti set v0='VHYWOX66ZSZ2DCEFMTBNZSTON5EN0' where id=2; -update noar tt set b0='R414V99Y3EWO1DF0Q6VBHCN0U8TBFH0' where id=2; -update noar ti set b0='R414V99Y3EWO1DF0Q6VBHCN0U8TBFH0' where id=2; -update noar tt set v0='UVNZL21Y67JQTEM6M' where id=2; -update noar ti set v0='UVNZL21Y67JQTEM6M' where id=2; -update noar tt set b1='8CP' where id=2; -update noar ti set b1='8CP' where id=2; -update noar tt set v0='OV1LLSZMEN2' where id=2; -update noar ti set v0='OV1LLSZMEN2' where id=2; -update noar tt set b2='Y' where id=2; -update noar ti set b2='Y' where id=2; -update noar tt set v0='MAD' where id=3; -update noar ti set v0='MAD' where id=3; -update noar tt set b0='4' where id=3; -update noar ti set b0='4' where id=3; -update noar tt set v0='NIG6QCNDBD' where id=3; -update noar ti set v0='NIG6QCNDBD' where id=3; -update noar tt set b1='NUS2MMOL' where id=3; -update noar ti set b1='NUS2MMOL' where id=3; -update noar tt set v0='FWI9485DIK9M7ULG' where id=3; -update noar ti set v0='FWI9485DIK9M7ULG' where id=3; -update noar tt set b2='PDNTVL3PG4QLZ0176TMLDS3M' where id=3; -update noar ti set b2='PDNTVL3PG4QLZ0176TMLDS3M' where id=3; -update noar tt set v0='GK3X5I89EI9IUHQB2L696TWY82UR0ZM' where id=4; -update noar ti set v0='GK3X5I89EI9IUHQB2L696TWY82UR0ZM' where id=4; -update noar tt set b0='94UEBT9MDZ34ILEQ9VDL4BI4YURIKY' where id=4; -update noar ti set b0='94UEBT9MDZ34ILEQ9VDL4BI4YURIKY' where id=4; -update noar tt set v0='9833Y62899920HA' where id=4; -update noar ti set v0='9833Y62899920HA' where id=4; -update noar tt set b1='7EUY4R3NGGIFVI2X4W1OIV4Y' where id=4; -update noar ti set b1='7EUY4R3NGGIFVI2X4W1OIV4Y' where id=4; -update noar tt set v0='BTH8YX7AOUOO0PQE4T1KNNWMKKSR' where id=4; -update noar ti set v0='BTH8YX7AOUOO0PQE4T1KNNWMKKSR' where id=4; -update noar tt set b2='7GQPWLKBNIRFAE1V9VXBIG39X0H24' where id=4; -update noar ti set b2='7GQPWLKBNIRFAE1V9VXBIG39X0H24' where id=4; -update noar tt set v0='F' where id=5; -update noar ti set v0='F' where id=5; -update noar tt set b0='B2' where id=5; -update noar ti set b0='B2' where id=5; -update noar tt set v0='H4KNIR7K2IDD1' where id=5; -update noar ti set v0='H4KNIR7K2IDD1' where id=5; -update noar tt set b1='QYMXMYPGIYX0I1P' where id=5; -update noar ti set b1='QYMXMYPGIYX0I1P' where id=5; -update noar tt set v0='8WF20H' where id=5; -update noar ti set v0='8WF20H' where id=5; -update noar tt set b2='OEN5' where id=5; -update noar ti set b2='OEN5' where id=5; -update noar tt set v0='1U9FCA33VEPAVFZ8' where id=6; -update noar ti set v0='1U9FCA33VEPAVFZ8' where id=6; -update noar tt set b0='PATN3LEKBVQGRY8RNN0GWQDR' where id=6; -update noar ti set b0='PATN3LEKBVQGRY8RNN0GWQDR' where id=6; -update noar tt set v0='MZOWMIURY0OG2CH' where id=6; -update noar ti set v0='MZOWMIURY0OG2CH' where id=6; -update noar tt set b1='NZ31WVLY8CHY8PSDY1' where id=6; -update noar ti set b1='NZ31WVLY8CHY8PSDY1' where id=6; -update noar tt set v0='WQ4YN3PQZSD3TKI5SPMASVY3D3TNP' where id=6; -update noar ti set v0='WQ4YN3PQZSD3TKI5SPMASVY3D3TNP' where id=6; -update noar tt set b2='4CIZ04MZA54QKHZ2' where id=6; -update noar ti set b2='4CIZ04MZA54QKHZ2' where id=6; -update noar tt set v0='TPTLQ1WBIY7G0U9TE190DRYH' where id=7; -update noar ti set v0='TPTLQ1WBIY7G0U9TE190DRYH' where id=7; -update noar tt set b0='RGALWIA38AQRPN' where id=7; -update noar ti set b0='RGALWIA38AQRPN' where id=7; -update noar tt set v0='1ADCW' where id=7; -update noar ti set v0='1ADCW' where id=7; -update noar tt set b1='6' where id=7; -update noar ti set b1='6' where id=7; -update noar tt set v0='XA4U5H3T76306ELD0IOICWK3NO5I5' where id=7; -update noar ti set v0='XA4U5H3T76306ELD0IOICWK3NO5I5' where id=7; -update noar tt set b2='1R735KSH2SM7IU0L4RHTHD9VDCT379FW' where id=7; -update noar ti set b2='1R735KSH2SM7IU0L4RHTHD9VDCT379FW' where id=7; -update noar tt set v0='HQZZ' where id=8; -update noar ti set v0='HQZZ' where id=8; -update noar tt set b0='ZMKGY' where id=8; -update noar ti set b0='ZMKGY' where id=8; -update noar tt set v0='VIS8RFT' where id=8; -update noar ti set v0='VIS8RFT' where id=8; -update noar tt set b1='40FPV46TH38OV846TI0VCBYBNHU' where id=8; -update noar ti set b1='40FPV46TH38OV846TI0VCBYBNHU' where id=8; -update noar tt set v0='B76' where id=8; -update noar ti set v0='B76' where id=8; -update noar tt set b2='B6U9UD8BVWK0PK4PQ9O' where id=8; -update noar ti set b2='B6U9UD8BVWK0PK4PQ9O' where id=8; -update noar tt set v0='23R1YXZGW0FNHLGXDV2YY' where id=9; -update noar ti set v0='23R1YXZGW0FNHLGXDV2YY' where id=9; -update noar tt set b0='CWY1IVH3WPNFILPSU9Z3770WH1' where id=9; -update noar ti set b0='CWY1IVH3WPNFILPSU9Z3770WH1' where id=9; -update noar tt set v0='9VE0PIRV3B' where id=9; -update noar ti set v0='9VE0PIRV3B' where id=9; -update noar tt set b1='KW1TVEE' where id=9; -update noar ti set b1='KW1TVEE' where id=9; -update noar tt set v0='9AY7ZHE2D6U15FBFET9' where id=9; -update noar ti set v0='9AY7ZHE2D6U15FBFET9' where id=9; -update noar tt set b2='AWHDVCOLTLGJ' where id=9; -update noar ti set b2='AWHDVCOLTLGJ' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 longblob null, - b1 tinyblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='05CWV2GHJXH51UP' where id=1; -update noar ti set v0='05CWV2GHJXH51UP' where id=1; -update noar tt set b0='EHCD' where id=1; -update noar ti set b0='EHCD' where id=1; -update noar tt set v0='W5AN0F0E9SJWKA2F6DTJ6JGS' where id=1; -update noar ti set v0='W5AN0F0E9SJWKA2F6DTJ6JGS' where id=1; -update noar tt set b1='ST7ZYLSTR102S71TCSY3XPQRCG6F8OJR' where id=1; -update noar ti set b1='ST7ZYLSTR102S71TCSY3XPQRCG6F8OJR' where id=1; -update noar tt set v0='A0ZJ' where id=1; -update noar ti set v0='A0ZJ' where id=1; -update noar tt set b2='NJU7BOAI8VM0W0CQM29C' where id=1; -update noar ti set b2='NJU7BOAI8VM0W0CQM29C' where id=1; -update noar tt set v0='0EBR5' where id=2; -update noar ti set v0='0EBR5' where id=2; -update noar tt set b0='5Z5N9WWMKF0ICX9T6PN6ZYAM30IZ' where id=2; -update noar ti set b0='5Z5N9WWMKF0ICX9T6PN6ZYAM30IZ' where id=2; -update noar tt set v0='6TC9G3DYUGS4RG4' where id=2; -update noar ti set v0='6TC9G3DYUGS4RG4' where id=2; -update noar tt set b1='VW3RDWEK1R7' where id=2; -update noar ti set b1='VW3RDWEK1R7' where id=2; -update noar tt set v0='HQYDID8' where id=2; -update noar ti set v0='HQYDID8' where id=2; -update noar tt set b2='MRTVEJ2HQQ' where id=2; -update noar ti set b2='MRTVEJ2HQQ' where id=2; -update noar tt set v0='ALKMVDQ0QYU2BZT' where id=3; -update noar ti set v0='ALKMVDQ0QYU2BZT' where id=3; -update noar tt set b0='E0T9VH0ADK8PX0KIHRZ8CVQRETH' where id=3; -update noar ti set b0='E0T9VH0ADK8PX0KIHRZ8CVQRETH' where id=3; -update noar tt set v0='AU9R17' where id=3; -update noar ti set v0='AU9R17' where id=3; -update noar tt set b1='114VNC2' where id=3; -update noar ti set b1='114VNC2' where id=3; -update noar tt set v0='NZZ' where id=3; -update noar ti set v0='NZZ' where id=3; -update noar tt set b2='OLCES341WKYAB02S5J20TKNOOJ7X9DQY' where id=3; -update noar ti set b2='OLCES341WKYAB02S5J20TKNOOJ7X9DQY' where id=3; -update noar tt set v0='2F8EJZ2UKXEZ' where id=4; -update noar ti set v0='2F8EJZ2UKXEZ' where id=4; -update noar tt set b0='SH09QABX99K63AGBWG1T90FIJQS1Z' where id=4; -update noar ti set b0='SH09QABX99K63AGBWG1T90FIJQS1Z' where id=4; -update noar tt set v0='5H4CMXP60IQJYI3N' where id=4; -update noar ti set v0='5H4CMXP60IQJYI3N' where id=4; -update noar tt set b1='GTE9V8WRNN651CECWGGY2' where id=4; -update noar ti set b1='GTE9V8WRNN651CECWGGY2' where id=4; -update noar tt set v0='75I3ZOKJSQ7E36A9ZLVJ' where id=4; -update noar ti set v0='75I3ZOKJSQ7E36A9ZLVJ' where id=4; -update noar tt set b2='WR7AB' where id=4; -update noar ti set b2='WR7AB' where id=4; -update noar tt set v0='UKS' where id=5; -update noar ti set v0='UKS' where id=5; -update noar tt set b0='F4HYLEFNDMFB41Z6GEP9JK3IF6Q0' where id=5; -update noar ti set b0='F4HYLEFNDMFB41Z6GEP9JK3IF6Q0' where id=5; -update noar tt set v0='SGFCDL7L85' where id=5; -update noar ti set v0='SGFCDL7L85' where id=5; -update noar tt set b1='9IOUZQSVQD846O52N' where id=5; -update noar ti set b1='9IOUZQSVQD846O52N' where id=5; -update noar tt set v0='WZVC9X' where id=5; -update noar ti set v0='WZVC9X' where id=5; -update noar tt set b2='GKMIS4V5KL' where id=5; -update noar ti set b2='GKMIS4V5KL' where id=5; -update noar tt set v0='YZLU5P6JW37HK84HS5PREIW67IN7' where id=6; -update noar ti set v0='YZLU5P6JW37HK84HS5PREIW67IN7' where id=6; -update noar tt set b0='ONPM8OR' where id=6; -update noar ti set b0='ONPM8OR' where id=6; -update noar tt set v0='6VNFHCUH0' where id=6; -update noar ti set v0='6VNFHCUH0' where id=6; -update noar tt set b1='IKZHW5S1DZP8JY6GK4U' where id=6; -update noar ti set b1='IKZHW5S1DZP8JY6GK4U' where id=6; -update noar tt set v0='378AB7WXHPW' where id=6; -update noar ti set v0='378AB7WXHPW' where id=6; -update noar tt set b2='A8HGRZRSQ4JITVGR3E4ZK1ES1' where id=6; -update noar ti set b2='A8HGRZRSQ4JITVGR3E4ZK1ES1' where id=6; -update noar tt set v0='FTAY6H5KIALKS6L' where id=7; -update noar ti set v0='FTAY6H5KIALKS6L' where id=7; -update noar tt set b0='GE4XOCVTI4ZAU35E67U1' where id=7; -update noar ti set b0='GE4XOCVTI4ZAU35E67U1' where id=7; -update noar tt set v0='KBVF76IFMI4IAGDC' where id=7; -update noar ti set v0='KBVF76IFMI4IAGDC' where id=7; -update noar tt set b1='9K7ZN87VSEC5PBR98125430EV' where id=7; -update noar ti set b1='9K7ZN87VSEC5PBR98125430EV' where id=7; -update noar tt set v0='SV7GRLJP0PWX4U3P40HF9HMETT0' where id=7; -update noar ti set v0='SV7GRLJP0PWX4U3P40HF9HMETT0' where id=7; -update noar tt set b2='R2FY6MUAYN43X9ITTPDFCPKG' where id=7; -update noar ti set b2='R2FY6MUAYN43X9ITTPDFCPKG' where id=7; -update noar tt set v0='G1ET1KC' where id=8; -update noar ti set v0='G1ET1KC' where id=8; -update noar tt set b0='47OHVP05PZ' where id=8; -update noar ti set b0='47OHVP05PZ' where id=8; -update noar tt set v0='WORGCZSQ3DV92ZWFWZ' where id=8; -update noar ti set v0='WORGCZSQ3DV92ZWFWZ' where id=8; -update noar tt set b1='KQ6MX9JODAO' where id=8; -update noar ti set b1='KQ6MX9JODAO' where id=8; -update noar tt set v0='OZMM8R5WVIQ8X4GAQ5V6XJ' where id=8; -update noar ti set v0='OZMM8R5WVIQ8X4GAQ5V6XJ' where id=8; -update noar tt set b2='ELI7FK0AT22XBYAARYD3EUZ3' where id=8; -update noar ti set b2='ELI7FK0AT22XBYAARYD3EUZ3' where id=8; -update noar tt set v0='S6XLX4IP' where id=9; -update noar ti set v0='S6XLX4IP' where id=9; -update noar tt set b0='56MM1D70V8C4Y0F2' where id=9; -update noar ti set b0='56MM1D70V8C4Y0F2' where id=9; -update noar tt set v0='EN59XNPMTT9JA' where id=9; -update noar ti set v0='EN59XNPMTT9JA' where id=9; -update noar tt set b1='HEIOWG4Y50N4PD8ZBDMIG8' where id=9; -update noar ti set b1='HEIOWG4Y50N4PD8ZBDMIG8' where id=9; -update noar tt set v0='59L6BZEI9IQ' where id=9; -update noar ti set v0='59L6BZEI9IQ' where id=9; -update noar tt set b2='Z43TH0999N3WJVZ8HCB2' where id=9; -update noar ti set b2='Z43TH0999N3WJVZ8HCB2' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 longblob null, - b1 tinyblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='KKSH' where id=1; -update noar ti set v0='KKSH' where id=1; -update noar tt set b0='20RENUKZACFQK2TZMGW5' where id=1; -update noar ti set b0='20RENUKZACFQK2TZMGW5' where id=1; -update noar tt set v0='G3NOK' where id=1; -update noar ti set v0='G3NOK' where id=1; -update noar tt set b1='MNT' where id=1; -update noar ti set b1='MNT' where id=1; -update noar tt set v0='MBR08KP' where id=1; -update noar ti set v0='MBR08KP' where id=1; -update noar tt set b2='V85YQ293ZGI2Z' where id=1; -update noar ti set b2='V85YQ293ZGI2Z' where id=1; -update noar tt set v0='U8U' where id=2; -update noar ti set v0='U8U' where id=2; -update noar tt set b0='MDMCX7G1V0FY3TTOLIWCPN8BRQMD' where id=2; -update noar ti set b0='MDMCX7G1V0FY3TTOLIWCPN8BRQMD' where id=2; -update noar tt set v0='PIW9S70EWBH' where id=2; -update noar ti set v0='PIW9S70EWBH' where id=2; -update noar tt set b1='3CJ9SAKJ4I7NDAEIGG3IAMLP0Z3M' where id=2; -update noar ti set b1='3CJ9SAKJ4I7NDAEIGG3IAMLP0Z3M' where id=2; -update noar tt set v0='N' where id=2; -update noar ti set v0='N' where id=2; -update noar tt set b2='AWGZRY1DZAKN797A9MZ' where id=2; -update noar ti set b2='AWGZRY1DZAKN797A9MZ' where id=2; -update noar tt set v0='S0HH' where id=3; -update noar ti set v0='S0HH' where id=3; -update noar tt set b0='8JVAE5N1PL' where id=3; -update noar ti set b0='8JVAE5N1PL' where id=3; -update noar tt set v0='QFBMMTYCMH' where id=3; -update noar ti set v0='QFBMMTYCMH' where id=3; -update noar tt set b1='K5BAGGN' where id=3; -update noar ti set b1='K5BAGGN' where id=3; -update noar tt set v0='WFNL6JXSRV' where id=3; -update noar ti set v0='WFNL6JXSRV' where id=3; -update noar tt set b2='W66T66ZYPTRA' where id=3; -update noar ti set b2='W66T66ZYPTRA' where id=3; -update noar tt set v0='N' where id=4; -update noar ti set v0='N' where id=4; -update noar tt set b0='YLL3JUP' where id=4; -update noar ti set b0='YLL3JUP' where id=4; -update noar tt set v0='CULAOUYY74VFCMWWNR3RP4F9NSOJBE3' where id=4; -update noar ti set v0='CULAOUYY74VFCMWWNR3RP4F9NSOJBE3' where id=4; -update noar tt set b1='JW4RPJY4K8GCZIZJ' where id=4; -update noar ti set b1='JW4RPJY4K8GCZIZJ' where id=4; -update noar tt set v0='GQUTME1NL8ZPNN95HAA808XA' where id=4; -update noar ti set v0='GQUTME1NL8ZPNN95HAA808XA' where id=4; -update noar tt set b2='BSDJ2' where id=4; -update noar ti set b2='BSDJ2' where id=4; -update noar tt set v0='EYOY6Y04IDVFMTNWVL2BYV0' where id=5; -update noar ti set v0='EYOY6Y04IDVFMTNWVL2BYV0' where id=5; -update noar tt set b0='VMD3Z948Q7HOU9QKNMHSO' where id=5; -update noar ti set b0='VMD3Z948Q7HOU9QKNMHSO' where id=5; -update noar tt set v0='LL1VFJPVE1E18D7P' where id=5; -update noar ti set v0='LL1VFJPVE1E18D7P' where id=5; -update noar tt set b1='KPOCZE' where id=5; -update noar ti set b1='KPOCZE' where id=5; -update noar tt set v0='KW057LMWSU7A6JKPEWBO7N6U' where id=5; -update noar ti set v0='KW057LMWSU7A6JKPEWBO7N6U' where id=5; -update noar tt set b2='09FCD3NXHS23TQYKIZ7SINSGT5EQ63' where id=5; -update noar ti set b2='09FCD3NXHS23TQYKIZ7SINSGT5EQ63' where id=5; -update noar tt set v0='LASCQOV7EIV19W8P7J' where id=6; -update noar ti set v0='LASCQOV7EIV19W8P7J' where id=6; -update noar tt set b0='CXRIEOFUSG7O' where id=6; -update noar ti set b0='CXRIEOFUSG7O' where id=6; -update noar tt set v0='B6L2CYW29VR6NZFK4U2JB01O' where id=6; -update noar ti set v0='B6L2CYW29VR6NZFK4U2JB01O' where id=6; -update noar tt set b1='P6QTM59F326L8FPY902I' where id=6; -update noar ti set b1='P6QTM59F326L8FPY902I' where id=6; -update noar tt set v0='24KB7QYB5X8ZDAP1RY1' where id=6; -update noar ti set v0='24KB7QYB5X8ZDAP1RY1' where id=6; -update noar tt set b2='S94QJUQSF8FUDXP31QX0VW' where id=6; -update noar ti set b2='S94QJUQSF8FUDXP31QX0VW' where id=6; -update noar tt set v0='1697HSPIOZSBQJRKG5AWP4K7TF1A6N' where id=7; -update noar ti set v0='1697HSPIOZSBQJRKG5AWP4K7TF1A6N' where id=7; -update noar tt set b0='N4Y6LL9Z11WFX5D4DOCJ' where id=7; -update noar ti set b0='N4Y6LL9Z11WFX5D4DOCJ' where id=7; -update noar tt set v0='N7JM' where id=7; -update noar ti set v0='N7JM' where id=7; -update noar tt set b1='OK4NDKW3724' where id=7; -update noar ti set b1='OK4NDKW3724' where id=7; -update noar tt set v0='RJZS4GL5DLN' where id=7; -update noar ti set v0='RJZS4GL5DLN' where id=7; -update noar tt set b2='ORQD68OU0R' where id=7; -update noar ti set b2='ORQD68OU0R' where id=7; -update noar tt set v0='R75BKW4AL0U2QD66JFDZCO76' where id=8; -update noar ti set v0='R75BKW4AL0U2QD66JFDZCO76' where id=8; -update noar tt set b0='38L' where id=8; -update noar ti set b0='38L' where id=8; -update noar tt set v0='EGNFNW' where id=8; -update noar ti set v0='EGNFNW' where id=8; -update noar tt set b1='49' where id=8; -update noar ti set b1='49' where id=8; -update noar tt set v0='8BFY74JEQSYWCU477CL497ZTN7NJ' where id=8; -update noar ti set v0='8BFY74JEQSYWCU477CL497ZTN7NJ' where id=8; -update noar tt set b2='I3QS' where id=8; -update noar ti set b2='I3QS' where id=8; -update noar tt set v0='ZC6ZHZ4EFIQ7NV5' where id=9; -update noar ti set v0='ZC6ZHZ4EFIQ7NV5' where id=9; -update noar tt set b0='6JAV9F0C' where id=9; -update noar ti set b0='6JAV9F0C' where id=9; -update noar tt set v0='XE7FH2N66T2X2UMSEAL9I7ZTFV' where id=9; -update noar ti set v0='XE7FH2N66T2X2UMSEAL9I7ZTFV' where id=9; -update noar tt set b1='JS6K' where id=9; -update noar ti set b1='JS6K' where id=9; -update noar tt set v0='E8YVB509UQULR' where id=9; -update noar ti set v0='E8YVB509UQULR' where id=9; -update noar tt set b2='HO4NQEWU52AX27Y92GYM6DHTW00' where id=9; -update noar ti set b2='HO4NQEWU52AX27Y92GYM6DHTW00' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 longblob not null, - b1 tinyblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='730S4BY2LFQ1ROQ6RZ' where id=1; -update noar ti set v0='730S4BY2LFQ1ROQ6RZ' where id=1; -update noar tt set b0='15284GTV59H2JZG847J3HHA9EBK' where id=1; -update noar ti set b0='15284GTV59H2JZG847J3HHA9EBK' where id=1; -update noar tt set v0='I9VJGQYZJBWCLC' where id=1; -update noar ti set v0='I9VJGQYZJBWCLC' where id=1; -update noar tt set b1='95CR1CHKS' where id=1; -update noar ti set b1='95CR1CHKS' where id=1; -update noar tt set v0='JRNCJUP3KMGW94RVQ3UBHSEGDOGV' where id=1; -update noar ti set v0='JRNCJUP3KMGW94RVQ3UBHSEGDOGV' where id=1; -update noar tt set b2='VKQCVL71BUU1' where id=1; -update noar ti set b2='VKQCVL71BUU1' where id=1; -update noar tt set v0='0ZRBDO' where id=2; -update noar ti set v0='0ZRBDO' where id=2; -update noar tt set b0='HAO9Z1KDQEPV4RP2RQUTQ' where id=2; -update noar ti set b0='HAO9Z1KDQEPV4RP2RQUTQ' where id=2; -update noar tt set v0='05JYULBJ49Q38BOVGP2TZ58A' where id=2; -update noar ti set v0='05JYULBJ49Q38BOVGP2TZ58A' where id=2; -update noar tt set b1='R0OQXQOQR' where id=2; -update noar ti set b1='R0OQXQOQR' where id=2; -update noar tt set v0='C3WP5AQV59YJ8GVSJYF' where id=2; -update noar ti set v0='C3WP5AQV59YJ8GVSJYF' where id=2; -update noar tt set b2='FO519T33SP' where id=2; -update noar ti set b2='FO519T33SP' where id=2; -update noar tt set v0='W5U7XIIF9HTF2PXPOTGHMT' where id=3; -update noar ti set v0='W5U7XIIF9HTF2PXPOTGHMT' where id=3; -update noar tt set b0='5LBTK3UEGFWJRGXGVPLT' where id=3; -update noar ti set b0='5LBTK3UEGFWJRGXGVPLT' where id=3; -update noar tt set v0='VXJ3QQ1QSB1698ITA5P4ORECHHIP3DZ' where id=3; -update noar ti set v0='VXJ3QQ1QSB1698ITA5P4ORECHHIP3DZ' where id=3; -update noar tt set b1='UOGVNYUYLM9ALF28MMXCWR2AG26O8VA0' where id=3; -update noar ti set b1='UOGVNYUYLM9ALF28MMXCWR2AG26O8VA0' where id=3; -update noar tt set v0='3DK2H85BRW8LM' where id=3; -update noar ti set v0='3DK2H85BRW8LM' where id=3; -update noar tt set b2='J3E8D6F5V9CURDJR2EW5DYH82RMZNS' where id=3; -update noar ti set b2='J3E8D6F5V9CURDJR2EW5DYH82RMZNS' where id=3; -update noar tt set v0='C2' where id=4; -update noar ti set v0='C2' where id=4; -update noar tt set b0='AAVC7N7RT0G9WHDYV' where id=4; -update noar ti set b0='AAVC7N7RT0G9WHDYV' where id=4; -update noar tt set v0='DOS4Z0EV0QDJ90XY95B11KZ3F0EZ' where id=4; -update noar ti set v0='DOS4Z0EV0QDJ90XY95B11KZ3F0EZ' where id=4; -update noar tt set b1='EWVU6RRB6BC0HU8OQSR67VXHNAL1T2C' where id=4; -update noar ti set b1='EWVU6RRB6BC0HU8OQSR67VXHNAL1T2C' where id=4; -update noar tt set v0='TQICCY1AZX4FOA72NG8L0402A4REK' where id=4; -update noar ti set v0='TQICCY1AZX4FOA72NG8L0402A4REK' where id=4; -update noar tt set b2='YEZNQFTW6BGO1ELWFZY0Z' where id=4; -update noar ti set b2='YEZNQFTW6BGO1ELWFZY0Z' where id=4; -update noar tt set v0='P5L4FKEV5L3S98URRX00UH38XA1P0' where id=5; -update noar ti set v0='P5L4FKEV5L3S98URRX00UH38XA1P0' where id=5; -update noar tt set b0='82W' where id=5; -update noar ti set b0='82W' where id=5; -update noar tt set v0='DSNSQC' where id=5; -update noar ti set v0='DSNSQC' where id=5; -update noar tt set b1='R7EOMNRT6C' where id=5; -update noar ti set b1='R7EOMNRT6C' where id=5; -update noar tt set v0='U6FQ0SA0TAJXE1W' where id=5; -update noar ti set v0='U6FQ0SA0TAJXE1W' where id=5; -update noar tt set b2='DGI6MBQ6OI1JOWJKJ7HW5RNBUWG4N' where id=5; -update noar ti set b2='DGI6MBQ6OI1JOWJKJ7HW5RNBUWG4N' where id=5; -update noar tt set v0='7N2I7E0G8OMF0D9YN22PZ714P1UM3' where id=6; -update noar ti set v0='7N2I7E0G8OMF0D9YN22PZ714P1UM3' where id=6; -update noar tt set b0='6Q8E019EXCBF0FY1E' where id=6; -update noar ti set b0='6Q8E019EXCBF0FY1E' where id=6; -update noar tt set v0='5' where id=6; -update noar ti set v0='5' where id=6; -update noar tt set b1='7R9Z76C2IUAJEZD0LI0Y3T4Q71BSKM' where id=6; -update noar ti set b1='7R9Z76C2IUAJEZD0LI0Y3T4Q71BSKM' where id=6; -update noar tt set v0='8FNO6PICJVNM8F4P' where id=6; -update noar ti set v0='8FNO6PICJVNM8F4P' where id=6; -update noar tt set b2='KGA3FLL' where id=6; -update noar ti set b2='KGA3FLL' where id=6; -update noar tt set v0='FOFOU5SSBEY74' where id=7; -update noar ti set v0='FOFOU5SSBEY74' where id=7; -update noar tt set b0='N5MI1T5J2P' where id=7; -update noar ti set b0='N5MI1T5J2P' where id=7; -update noar tt set v0='6G6B3T6B4607B6HCW' where id=7; -update noar ti set v0='6G6B3T6B4607B6HCW' where id=7; -update noar tt set b1='S4LOH43M5F6' where id=7; -update noar ti set b1='S4LOH43M5F6' where id=7; -update noar tt set v0='DHA034' where id=7; -update noar ti set v0='DHA034' where id=7; -update noar tt set b2='M7T44RG3L34D4T4FQDZ2MK0TH' where id=7; -update noar ti set b2='M7T44RG3L34D4T4FQDZ2MK0TH' where id=7; -update noar tt set v0='P2FZDIK7APOX3DK4Z' where id=8; -update noar ti set v0='P2FZDIK7APOX3DK4Z' where id=8; -update noar tt set b0='EGYD8ZXFKSC4T1XYLL706Z64ORT2WRS' where id=8; -update noar ti set b0='EGYD8ZXFKSC4T1XYLL706Z64ORT2WRS' where id=8; -update noar tt set v0='935X' where id=8; -update noar ti set v0='935X' where id=8; -update noar tt set b1='VLI4SLWTQX78L1AHA1W2UAD9SQ4A8' where id=8; -update noar ti set b1='VLI4SLWTQX78L1AHA1W2UAD9SQ4A8' where id=8; -update noar tt set v0='LVEE855CMT0VPDG9YWPFI629QPO8' where id=8; -update noar ti set v0='LVEE855CMT0VPDG9YWPFI629QPO8' where id=8; -update noar tt set b2='6NIGT1D0MP' where id=8; -update noar ti set b2='6NIGT1D0MP' where id=8; -update noar tt set v0='131K6JLGSPA17809FK7U4ZX' where id=9; -update noar ti set v0='131K6JLGSPA17809FK7U4ZX' where id=9; -update noar tt set b0='OZ6WVU765FF0GBBGLL0EP3SFFDJ3FI94' where id=9; -update noar ti set b0='OZ6WVU765FF0GBBGLL0EP3SFFDJ3FI94' where id=9; -update noar tt set v0='ZRZCEYVHE8SVX5PEM0U3FYRW7R3N3SE' where id=9; -update noar ti set v0='ZRZCEYVHE8SVX5PEM0U3FYRW7R3N3SE' where id=9; -update noar tt set b1='GRV8FZELWL4FOLG' where id=9; -update noar ti set b1='GRV8FZELWL4FOLG' where id=9; -update noar tt set v0='116I2QN' where id=9; -update noar ti set v0='116I2QN' where id=9; -update noar tt set b2='1R6P1BWARP405YJY1058C8HDKL' where id=9; -update noar ti set b2='1R6P1BWARP405YJY1058C8HDKL' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 longblob not null, - b1 tinyblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='6V0PFHSZ1I4U0GJYMJWWL79BLQD7' where id=1; -update noar ti set v0='6V0PFHSZ1I4U0GJYMJWWL79BLQD7' where id=1; -update noar tt set b0='GFRW4X7XUDD2U2T2PQMO3MYYN0I9F45' where id=1; -update noar ti set b0='GFRW4X7XUDD2U2T2PQMO3MYYN0I9F45' where id=1; -update noar tt set v0='5YMEEJRA0942V1UQPF' where id=1; -update noar ti set v0='5YMEEJRA0942V1UQPF' where id=1; -update noar tt set b1='6CJI4KZQFS36JRRKF8TWX' where id=1; -update noar ti set b1='6CJI4KZQFS36JRRKF8TWX' where id=1; -update noar tt set v0='PVPD4XT6IP9T0KH61MGZ9G1ZI91A' where id=1; -update noar ti set v0='PVPD4XT6IP9T0KH61MGZ9G1ZI91A' where id=1; -update noar tt set b2='MTA7K' where id=1; -update noar ti set b2='MTA7K' where id=1; -update noar tt set v0='DE1J9NYSXH' where id=2; -update noar ti set v0='DE1J9NYSXH' where id=2; -update noar tt set b0='ME' where id=2; -update noar ti set b0='ME' where id=2; -update noar tt set v0='LUMY' where id=2; -update noar ti set v0='LUMY' where id=2; -update noar tt set b1='4MX64BHNUYYBQ5' where id=2; -update noar ti set b1='4MX64BHNUYYBQ5' where id=2; -update noar tt set v0='MHOHJ48ZCG5SMT4E03L' where id=2; -update noar ti set v0='MHOHJ48ZCG5SMT4E03L' where id=2; -update noar tt set b2='HJR9BOT3CK3QODJ' where id=2; -update noar ti set b2='HJR9BOT3CK3QODJ' where id=2; -update noar tt set v0='TNW2K5G2VUZS4U2JETI4XUYSLBBOVJ0' where id=3; -update noar ti set v0='TNW2K5G2VUZS4U2JETI4XUYSLBBOVJ0' where id=3; -update noar tt set b0='B1IFC' where id=3; -update noar ti set b0='B1IFC' where id=3; -update noar tt set v0='DI' where id=3; -update noar ti set v0='DI' where id=3; -update noar tt set b1='24T8Q166CZ9ZMF78MMG1NUTQ9OP4' where id=3; -update noar ti set b1='24T8Q166CZ9ZMF78MMG1NUTQ9OP4' where id=3; -update noar tt set v0='T5PTXNR7XUJHSR7T0N8HUGHUQQKER' where id=3; -update noar ti set v0='T5PTXNR7XUJHSR7T0N8HUGHUQQKER' where id=3; -update noar tt set b2='9MJMHTWGM2UGCD9B56U4ZEWR6VH5Z2' where id=3; -update noar ti set b2='9MJMHTWGM2UGCD9B56U4ZEWR6VH5Z2' where id=3; -update noar tt set v0='YOWG86VZT' where id=4; -update noar ti set v0='YOWG86VZT' where id=4; -update noar tt set b0='AGDF41DN42BRHYU57UIWVYFAYN45AG' where id=4; -update noar ti set b0='AGDF41DN42BRHYU57UIWVYFAYN45AG' where id=4; -update noar tt set v0='HS' where id=4; -update noar ti set v0='HS' where id=4; -update noar tt set b1='1OP3PZDWS02S6ENKIZY4' where id=4; -update noar ti set b1='1OP3PZDWS02S6ENKIZY4' where id=4; -update noar tt set v0='QRLR6P0FP0CZ1BO462UAUPG8NQ6E' where id=4; -update noar ti set v0='QRLR6P0FP0CZ1BO462UAUPG8NQ6E' where id=4; -update noar tt set b2='AVTGL0CGTE9OKPJ30XTFHVXX5' where id=4; -update noar ti set b2='AVTGL0CGTE9OKPJ30XTFHVXX5' where id=4; -update noar tt set v0='NV6FS02' where id=5; -update noar ti set v0='NV6FS02' where id=5; -update noar tt set b0='AY4TZT7SF8NAMBRO0SBB18BAJ3LJNW' where id=5; -update noar ti set b0='AY4TZT7SF8NAMBRO0SBB18BAJ3LJNW' where id=5; -update noar tt set v0='81F4EHR05SMKI' where id=5; -update noar ti set v0='81F4EHR05SMKI' where id=5; -update noar tt set b1='EJJBZ8S05AZBVEQN8KPG3DZLB' where id=5; -update noar ti set b1='EJJBZ8S05AZBVEQN8KPG3DZLB' where id=5; -update noar tt set v0='95B4U0TCG9K856HGXA7RW' where id=5; -update noar ti set v0='95B4U0TCG9K856HGXA7RW' where id=5; -update noar tt set b2='XBB1YZ' where id=5; -update noar ti set b2='XBB1YZ' where id=5; -update noar tt set v0='U7NDZ3BMIDZDUOWVQJMN3JWA' where id=6; -update noar ti set v0='U7NDZ3BMIDZDUOWVQJMN3JWA' where id=6; -update noar tt set b0='Z37FCV' where id=6; -update noar ti set b0='Z37FCV' where id=6; -update noar tt set v0='H3OK99TGZQ5LZ4NELPTOIER1014' where id=6; -update noar ti set v0='H3OK99TGZQ5LZ4NELPTOIER1014' where id=6; -update noar tt set b1='MWMUBQI' where id=6; -update noar ti set b1='MWMUBQI' where id=6; -update noar tt set v0='1R1' where id=6; -update noar ti set v0='1R1' where id=6; -update noar tt set b2='W4AAOWN4VXVG' where id=6; -update noar ti set b2='W4AAOWN4VXVG' where id=6; -update noar tt set v0='G3PACK2JABA3KLRKLI6X79L1KT' where id=7; -update noar ti set v0='G3PACK2JABA3KLRKLI6X79L1KT' where id=7; -update noar tt set b0='CCGVTTTHW0OD' where id=7; -update noar ti set b0='CCGVTTTHW0OD' where id=7; -update noar tt set v0='VMFRW67BCJ2PL1' where id=7; -update noar ti set v0='VMFRW67BCJ2PL1' where id=7; -update noar tt set b1='JSKM0KOTVXK' where id=7; -update noar ti set b1='JSKM0KOTVXK' where id=7; -update noar tt set v0='HDMULHJ5EO8QGR8XE' where id=7; -update noar ti set v0='HDMULHJ5EO8QGR8XE' where id=7; -update noar tt set b2='QTMB871NBPMLAEV0X5DMPOIUGNTL' where id=7; -update noar ti set b2='QTMB871NBPMLAEV0X5DMPOIUGNTL' where id=7; -update noar tt set v0='39' where id=8; -update noar ti set v0='39' where id=8; -update noar tt set b0='IE5EQ279SF81NZN0F9YQB7SZTOXI' where id=8; -update noar ti set b0='IE5EQ279SF81NZN0F9YQB7SZTOXI' where id=8; -update noar tt set v0='YRQ1U3LKY' where id=8; -update noar ti set v0='YRQ1U3LKY' where id=8; -update noar tt set b1='H50O0EBD9HVWVYYSTB0YDN' where id=8; -update noar ti set b1='H50O0EBD9HVWVYYSTB0YDN' where id=8; -update noar tt set v0='XXJTR597GXMVODUXZUQSFVOT7K13UEJ' where id=8; -update noar ti set v0='XXJTR597GXMVODUXZUQSFVOT7K13UEJ' where id=8; -update noar tt set b2='BZU77E' where id=8; -update noar ti set b2='BZU77E' where id=8; -update noar tt set v0='7UCXHJ2BHYMRV438VMEBING0V2' where id=9; -update noar ti set v0='7UCXHJ2BHYMRV438VMEBING0V2' where id=9; -update noar tt set b0='WN' where id=9; -update noar ti set b0='WN' where id=9; -update noar tt set v0='ERJVY' where id=9; -update noar ti set v0='ERJVY' where id=9; -update noar tt set b1='FFOP90Y0MRU5S547XTE' where id=9; -update noar ti set b1='FFOP90Y0MRU5S547XTE' where id=9; -update noar tt set v0='JRQA3B4V81QELFKFV0GNPAB04XVRAK1E' where id=9; -update noar ti set v0='JRQA3B4V81QELFKFV0GNPAB04XVRAK1E' where id=9; -update noar tt set b2='17NMQWC0EVHMHGDHZLGACL99S' where id=9; -update noar ti set b2='17NMQWC0EVHMHGDHZLGACL99S' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 longblob null, - b1 tinyblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='2N4ROCGAQ9W6C' where id=1; -update noar ti set v0='2N4ROCGAQ9W6C' where id=1; -update noar tt set b0='DGXCWUN0RG6PDFYNATN16XG' where id=1; -update noar ti set b0='DGXCWUN0RG6PDFYNATN16XG' where id=1; -update noar tt set v0='D33MZSIVZJ1AK4ML' where id=1; -update noar ti set v0='D33MZSIVZJ1AK4ML' where id=1; -update noar tt set b1='N5LJR' where id=1; -update noar ti set b1='N5LJR' where id=1; -update noar tt set v0='QHJGF8RQQ2DQZK5XE01XRQORBEY' where id=1; -update noar ti set v0='QHJGF8RQQ2DQZK5XE01XRQORBEY' where id=1; -update noar tt set b2='P0MTJZV' where id=1; -update noar ti set b2='P0MTJZV' where id=1; -update noar tt set v0='PLPRA9V8J4PZWAVPGXH5OKTTQYQ8' where id=2; -update noar ti set v0='PLPRA9V8J4PZWAVPGXH5OKTTQYQ8' where id=2; -update noar tt set b0='A3K0JMOX5W6PHDNQ3BBUNKAY0' where id=2; -update noar ti set b0='A3K0JMOX5W6PHDNQ3BBUNKAY0' where id=2; -update noar tt set v0='Q0LFZDW5Q3NAL5EDM4PA9VGAFTCY' where id=2; -update noar ti set v0='Q0LFZDW5Q3NAL5EDM4PA9VGAFTCY' where id=2; -update noar tt set b1='YOPHXZ5HBHIL6NSAF' where id=2; -update noar ti set b1='YOPHXZ5HBHIL6NSAF' where id=2; -update noar tt set v0='W11FDNBKWTMH1VAE0IK8MAZJUND' where id=2; -update noar ti set v0='W11FDNBKWTMH1VAE0IK8MAZJUND' where id=2; -update noar tt set b2='MINAY2M9UTBNN3F0NTFEJW6823H6' where id=2; -update noar ti set b2='MINAY2M9UTBNN3F0NTFEJW6823H6' where id=2; -update noar tt set v0='0IXVZAA585JQ93YX' where id=3; -update noar ti set v0='0IXVZAA585JQ93YX' where id=3; -update noar tt set b0='RHIA88UBDAEY' where id=3; -update noar ti set b0='RHIA88UBDAEY' where id=3; -update noar tt set v0='FUHCOOVI' where id=3; -update noar ti set v0='FUHCOOVI' where id=3; -update noar tt set b1='2WKSOWXP3O82B7GD5LDRWLT' where id=3; -update noar ti set b1='2WKSOWXP3O82B7GD5LDRWLT' where id=3; -update noar tt set v0='6N0BN1DITVFU7L9FUTT7AMOZ' where id=3; -update noar ti set v0='6N0BN1DITVFU7L9FUTT7AMOZ' where id=3; -update noar tt set b2='XCAEAN067QGVUH2E5PK' where id=3; -update noar ti set b2='XCAEAN067QGVUH2E5PK' where id=3; -update noar tt set v0='UC2XEZBVY18AF06' where id=4; -update noar ti set v0='UC2XEZBVY18AF06' where id=4; -update noar tt set b0='LOQTAWUXG9UZ' where id=4; -update noar ti set b0='LOQTAWUXG9UZ' where id=4; -update noar tt set v0='KFT5NK' where id=4; -update noar ti set v0='KFT5NK' where id=4; -update noar tt set b1='5P60EU13ZYKKNUSS5FIE61' where id=4; -update noar ti set b1='5P60EU13ZYKKNUSS5FIE61' where id=4; -update noar tt set v0='BD869JZAWF8H6LZKQ10A3C7IQCC' where id=4; -update noar ti set v0='BD869JZAWF8H6LZKQ10A3C7IQCC' where id=4; -update noar tt set b2='647AWAJKC1166WN' where id=4; -update noar ti set b2='647AWAJKC1166WN' where id=4; -update noar tt set v0='TVE59UI4IEQC6AUGCHEA01MP4G0' where id=5; -update noar ti set v0='TVE59UI4IEQC6AUGCHEA01MP4G0' where id=5; -update noar tt set b0='KGS5J' where id=5; -update noar ti set b0='KGS5J' where id=5; -update noar tt set v0='G3YEWM' where id=5; -update noar ti set v0='G3YEWM' where id=5; -update noar tt set b1='W7J4ED6QBUDUW6B7YO4ZZ6MWZ8MEDWJU' where id=5; -update noar ti set b1='W7J4ED6QBUDUW6B7YO4ZZ6MWZ8MEDWJU' where id=5; -update noar tt set v0='KZAF8OOIMM28VYTFWASFB' where id=5; -update noar ti set v0='KZAF8OOIMM28VYTFWASFB' where id=5; -update noar tt set b2='TJ' where id=5; -update noar ti set b2='TJ' where id=5; -update noar tt set v0='YM2591GG' where id=6; -update noar ti set v0='YM2591GG' where id=6; -update noar tt set b0='ZXWI1IPN4CSFLBBO0BPE0HHC3K5' where id=6; -update noar ti set b0='ZXWI1IPN4CSFLBBO0BPE0HHC3K5' where id=6; -update noar tt set v0='XB9T5' where id=6; -update noar ti set v0='XB9T5' where id=6; -update noar tt set b1='WATA' where id=6; -update noar ti set b1='WATA' where id=6; -update noar tt set v0='I5YTE45DJR' where id=6; -update noar ti set v0='I5YTE45DJR' where id=6; -update noar tt set b2='U3EWV8' where id=6; -update noar ti set b2='U3EWV8' where id=6; -update noar tt set v0='UJ0OKLPUNNF9P' where id=7; -update noar ti set v0='UJ0OKLPUNNF9P' where id=7; -update noar tt set b0='LGE4PATGU7D' where id=7; -update noar ti set b0='LGE4PATGU7D' where id=7; -update noar tt set v0='OTKP1H5KOU1UXJ' where id=7; -update noar ti set v0='OTKP1H5KOU1UXJ' where id=7; -update noar tt set b1='2UED6I7BZPFHI' where id=7; -update noar ti set b1='2UED6I7BZPFHI' where id=7; -update noar tt set v0='3MG5GWM8TII6U9GI' where id=7; -update noar ti set v0='3MG5GWM8TII6U9GI' where id=7; -update noar tt set b2='R3H' where id=7; -update noar ti set b2='R3H' where id=7; -update noar tt set v0='S5XW9O5FYOR65UVQ6PN' where id=8; -update noar ti set v0='S5XW9O5FYOR65UVQ6PN' where id=8; -update noar tt set b0='QNJOT24A9J0WLGW6XXGE43KS' where id=8; -update noar ti set b0='QNJOT24A9J0WLGW6XXGE43KS' where id=8; -update noar tt set v0='X' where id=8; -update noar ti set v0='X' where id=8; -update noar tt set b1='5JK9LZ' where id=8; -update noar ti set b1='5JK9LZ' where id=8; -update noar tt set v0='IM5OPSJTM22S4ILNLWYLF5IVR1E' where id=8; -update noar ti set v0='IM5OPSJTM22S4ILNLWYLF5IVR1E' where id=8; -update noar tt set b2='7IFQOFLDTABWKHZGMC' where id=8; -update noar ti set b2='7IFQOFLDTABWKHZGMC' where id=8; -update noar tt set v0='Q' where id=9; -update noar ti set v0='Q' where id=9; -update noar tt set b0='55RSJQPQGNK4IIF4WJJE' where id=9; -update noar ti set b0='55RSJQPQGNK4IIF4WJJE' where id=9; -update noar tt set v0='760X865' where id=9; -update noar ti set v0='760X865' where id=9; -update noar tt set b1='BFZDNY31A0G5S5FTCNG' where id=9; -update noar ti set b1='BFZDNY31A0G5S5FTCNG' where id=9; -update noar tt set v0='8SRMHIO8545TQJXTMZ4BCY' where id=9; -update noar ti set v0='8SRMHIO8545TQJXTMZ4BCY' where id=9; -update noar tt set b2='1J6BVHGRWUISD9KGWQD7' where id=9; -update noar ti set b2='1J6BVHGRWUISD9KGWQD7' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 longblob null, - b1 tinyblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='RD70OX8ODB0NCBAZTVTZEU' where id=1; -update noar ti set v0='RD70OX8ODB0NCBAZTVTZEU' where id=1; -update noar tt set b0='Y92C53L8PL15NOI' where id=1; -update noar ti set b0='Y92C53L8PL15NOI' where id=1; -update noar tt set v0='2XBQ8S7GXIVIL6YGKYCXHK' where id=1; -update noar ti set v0='2XBQ8S7GXIVIL6YGKYCXHK' where id=1; -update noar tt set b1='U8ZBXL1659' where id=1; -update noar ti set b1='U8ZBXL1659' where id=1; -update noar tt set v0='AJG3MMIQRUELS5VDOWNIAPYSH1UDT2' where id=1; -update noar ti set v0='AJG3MMIQRUELS5VDOWNIAPYSH1UDT2' where id=1; -update noar tt set b2='1L7EWWTLXGMQE9J0EEUH' where id=1; -update noar ti set b2='1L7EWWTLXGMQE9J0EEUH' where id=1; -update noar tt set v0='D7SCVRVGBC6FAL1MP3X2M72' where id=2; -update noar ti set v0='D7SCVRVGBC6FAL1MP3X2M72' where id=2; -update noar tt set b0='3MWUX' where id=2; -update noar ti set b0='3MWUX' where id=2; -update noar tt set v0='1UPJVKWX5IGL40RLX' where id=2; -update noar ti set v0='1UPJVKWX5IGL40RLX' where id=2; -update noar tt set b1='PDVOFWH6ZJS86BZH4JV9HPS3PLFL' where id=2; -update noar ti set b1='PDVOFWH6ZJS86BZH4JV9HPS3PLFL' where id=2; -update noar tt set v0='FO6WZC' where id=2; -update noar ti set v0='FO6WZC' where id=2; -update noar tt set b2='TXTDVBB9Q3U6300X3IBYRWN6' where id=2; -update noar ti set b2='TXTDVBB9Q3U6300X3IBYRWN6' where id=2; -update noar tt set v0='O0Y23DMP' where id=3; -update noar ti set v0='O0Y23DMP' where id=3; -update noar tt set b0='7SCQ125WYJHTE2F1D5KLPNLMAGKCM2EQ' where id=3; -update noar ti set b0='7SCQ125WYJHTE2F1D5KLPNLMAGKCM2EQ' where id=3; -update noar tt set v0='ZX' where id=3; -update noar ti set v0='ZX' where id=3; -update noar tt set b1='SJPJ0QKG3NMAE95F74LFA' where id=3; -update noar ti set b1='SJPJ0QKG3NMAE95F74LFA' where id=3; -update noar tt set v0='QCFIRB' where id=3; -update noar ti set v0='QCFIRB' where id=3; -update noar tt set b2='61RNR7TKM0' where id=3; -update noar ti set b2='61RNR7TKM0' where id=3; -update noar tt set v0='MOM2875A' where id=4; -update noar ti set v0='MOM2875A' where id=4; -update noar tt set b0='PVX0W272C790UEEQYI17' where id=4; -update noar ti set b0='PVX0W272C790UEEQYI17' where id=4; -update noar tt set v0='AGRRK8MKRNX' where id=4; -update noar ti set v0='AGRRK8MKRNX' where id=4; -update noar tt set b1='LJBKN4DZF5V5PYPM6PP6GHFQM' where id=4; -update noar ti set b1='LJBKN4DZF5V5PYPM6PP6GHFQM' where id=4; -update noar tt set v0='QVMNIB4R85ORTKVQB10C4' where id=4; -update noar ti set v0='QVMNIB4R85ORTKVQB10C4' where id=4; -update noar tt set b2='VK6YDMZLD368ZB7WT92B538' where id=4; -update noar ti set b2='VK6YDMZLD368ZB7WT92B538' where id=4; -update noar tt set v0='PU4PSZO48T24' where id=5; -update noar ti set v0='PU4PSZO48T24' where id=5; -update noar tt set b0='5HS8HFYCEGQXQED40' where id=5; -update noar ti set b0='5HS8HFYCEGQXQED40' where id=5; -update noar tt set v0='4145GCWLCY8' where id=5; -update noar ti set v0='4145GCWLCY8' where id=5; -update noar tt set b1='XCMUA173L2QRYTTAIEWY43' where id=5; -update noar ti set b1='XCMUA173L2QRYTTAIEWY43' where id=5; -update noar tt set v0='50E4HCA1Z02SIH2MAY' where id=5; -update noar ti set v0='50E4HCA1Z02SIH2MAY' where id=5; -update noar tt set b2='FYBX4UIECOBA3RB493JAA3A1LKTN4FQ' where id=5; -update noar ti set b2='FYBX4UIECOBA3RB493JAA3A1LKTN4FQ' where id=5; -update noar tt set v0='RMG94ZT069YMYFP2Z9DYP' where id=6; -update noar ti set v0='RMG94ZT069YMYFP2Z9DYP' where id=6; -update noar tt set b0='IPVS8JYIRKXPIRFTEIMC' where id=6; -update noar ti set b0='IPVS8JYIRKXPIRFTEIMC' where id=6; -update noar tt set v0='NV6F7C3' where id=6; -update noar ti set v0='NV6F7C3' where id=6; -update noar tt set b1='BZGRAXDER2SCL' where id=6; -update noar ti set b1='BZGRAXDER2SCL' where id=6; -update noar tt set v0='S9MGBTTMWS6L0PF1' where id=6; -update noar ti set v0='S9MGBTTMWS6L0PF1' where id=6; -update noar tt set b2='OAK32A4GZ7XNE4CUWH780ZA16XQDSL' where id=6; -update noar ti set b2='OAK32A4GZ7XNE4CUWH780ZA16XQDSL' where id=6; -update noar tt set v0='8' where id=7; -update noar ti set v0='8' where id=7; -update noar tt set b0='31NFW36WWY8S0E9JV19IRYNWL' where id=7; -update noar ti set b0='31NFW36WWY8S0E9JV19IRYNWL' where id=7; -update noar tt set v0='4' where id=7; -update noar ti set v0='4' where id=7; -update noar tt set b1='H4IF9Z5U' where id=7; -update noar ti set b1='H4IF9Z5U' where id=7; -update noar tt set v0='5O9UGK290V8HLCT2I5GQ' where id=7; -update noar ti set v0='5O9UGK290V8HLCT2I5GQ' where id=7; -update noar tt set b2='QVQSQDOI6XMSDO6EEB1DW' where id=7; -update noar ti set b2='QVQSQDOI6XMSDO6EEB1DW' where id=7; -update noar tt set v0='Q2F16N34HO02TODSGB72LXFAG0S3' where id=8; -update noar ti set v0='Q2F16N34HO02TODSGB72LXFAG0S3' where id=8; -update noar tt set b0='TO9XSLES2I9DXSH3RMD4SO2IOWKF' where id=8; -update noar ti set b0='TO9XSLES2I9DXSH3RMD4SO2IOWKF' where id=8; -update noar tt set v0='64NRTXEHBENL' where id=8; -update noar ti set v0='64NRTXEHBENL' where id=8; -update noar tt set b1='HY1' where id=8; -update noar ti set b1='HY1' where id=8; -update noar tt set v0='K86FP9U3B8BA6FOF' where id=8; -update noar ti set v0='K86FP9U3B8BA6FOF' where id=8; -update noar tt set b2='GNTAL6M8YYJLDZ43YQ5' where id=8; -update noar ti set b2='GNTAL6M8YYJLDZ43YQ5' where id=8; -update noar tt set v0='ZFKK9JVU4I3MKLF1SA79CL7OLUW20' where id=9; -update noar ti set v0='ZFKK9JVU4I3MKLF1SA79CL7OLUW20' where id=9; -update noar tt set b0='83BIKBZ8BYR' where id=9; -update noar ti set b0='83BIKBZ8BYR' where id=9; -update noar tt set v0='JQWIY8YS3T' where id=9; -update noar ti set v0='JQWIY8YS3T' where id=9; -update noar tt set b1='0GBAYKNWFG' where id=9; -update noar ti set b1='0GBAYKNWFG' where id=9; -update noar tt set v0='SF7F653H' where id=9; -update noar ti set v0='SF7F653H' where id=9; -update noar tt set b2='M8WH' where id=9; -update noar ti set b2='M8WH' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 longblob not null, - b1 tinyblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='FZ7PUE6SXVTPO1F5D2WK8CQVAOFPP9' where id=1; -update noar ti set v0='FZ7PUE6SXVTPO1F5D2WK8CQVAOFPP9' where id=1; -update noar tt set b0='EJQE8R' where id=1; -update noar ti set b0='EJQE8R' where id=1; -update noar tt set v0='QMNR1BUUN1QJJTOJLSMH' where id=1; -update noar ti set v0='QMNR1BUUN1QJJTOJLSMH' where id=1; -update noar tt set b1='IFAL1R2LOWBT7ENH22PRWPLY1TX' where id=1; -update noar ti set b1='IFAL1R2LOWBT7ENH22PRWPLY1TX' where id=1; -update noar tt set v0='K0NU1WJY7MO7X8P08ZD' where id=1; -update noar ti set v0='K0NU1WJY7MO7X8P08ZD' where id=1; -update noar tt set b2='JLLMQ47SCEUHTR' where id=1; -update noar ti set b2='JLLMQ47SCEUHTR' where id=1; -update noar tt set v0='8S' where id=2; -update noar ti set v0='8S' where id=2; -update noar tt set b0='WQJ4' where id=2; -update noar ti set b0='WQJ4' where id=2; -update noar tt set v0='YKRG0479ZPEKL1V6J530LRLOIAUN4G' where id=2; -update noar ti set v0='YKRG0479ZPEKL1V6J530LRLOIAUN4G' where id=2; -update noar tt set b1='TLF3B4JMRHU84DZ2Q6TY6UVKOWXG' where id=2; -update noar ti set b1='TLF3B4JMRHU84DZ2Q6TY6UVKOWXG' where id=2; -update noar tt set v0='FBT3D28A4J5C04F3BNXZ8DO9' where id=2; -update noar ti set v0='FBT3D28A4J5C04F3BNXZ8DO9' where id=2; -update noar tt set b2='MJL35DYL' where id=2; -update noar ti set b2='MJL35DYL' where id=2; -update noar tt set v0='Z9' where id=3; -update noar ti set v0='Z9' where id=3; -update noar tt set b0='GJHRT1W47E6' where id=3; -update noar ti set b0='GJHRT1W47E6' where id=3; -update noar tt set v0='M17PWKLFVSU6AQMX3PS' where id=3; -update noar ti set v0='M17PWKLFVSU6AQMX3PS' where id=3; -update noar tt set b1='G61C3DNJIN' where id=3; -update noar ti set b1='G61C3DNJIN' where id=3; -update noar tt set v0='EILFUTALO4ZKXPVYNT7K4SETPU' where id=3; -update noar ti set v0='EILFUTALO4ZKXPVYNT7K4SETPU' where id=3; -update noar tt set b2='KJNRTM35FLMA8PBF' where id=3; -update noar ti set b2='KJNRTM35FLMA8PBF' where id=3; -update noar tt set v0='B1NAHK1XVQR0RWZ5H9Q1KOX4E5' where id=4; -update noar ti set v0='B1NAHK1XVQR0RWZ5H9Q1KOX4E5' where id=4; -update noar tt set b0='P9A3' where id=4; -update noar ti set b0='P9A3' where id=4; -update noar tt set v0='71G2YNAMD5UB0LJ4TWJPS' where id=4; -update noar ti set v0='71G2YNAMD5UB0LJ4TWJPS' where id=4; -update noar tt set b1='2UOMPTMCWZ' where id=4; -update noar ti set b1='2UOMPTMCWZ' where id=4; -update noar tt set v0='COGVAD7G2Q1X6GAY8MTWBQGEMQXK7' where id=4; -update noar ti set v0='COGVAD7G2Q1X6GAY8MTWBQGEMQXK7' where id=4; -update noar tt set b2='FKYGXFPCB05BE1FL6RJ5' where id=4; -update noar ti set b2='FKYGXFPCB05BE1FL6RJ5' where id=4; -update noar tt set v0='Z8L2KQ' where id=5; -update noar ti set v0='Z8L2KQ' where id=5; -update noar tt set b0='SPBPR58URQJYCXA0' where id=5; -update noar ti set b0='SPBPR58URQJYCXA0' where id=5; -update noar tt set v0='RDM6PM8UZSDP6I9M58IFNZ5EBI' where id=5; -update noar ti set v0='RDM6PM8UZSDP6I9M58IFNZ5EBI' where id=5; -update noar tt set b1='43PPO8K8J118' where id=5; -update noar ti set b1='43PPO8K8J118' where id=5; -update noar tt set v0='A7PR5A4AZPAXQ6O747YNKMKJYR5I' where id=5; -update noar ti set v0='A7PR5A4AZPAXQ6O747YNKMKJYR5I' where id=5; -update noar tt set b2='L5ELRSKPFKEG' where id=5; -update noar ti set b2='L5ELRSKPFKEG' where id=5; -update noar tt set v0='NZRH9I' where id=6; -update noar ti set v0='NZRH9I' where id=6; -update noar tt set b0='UP' where id=6; -update noar ti set b0='UP' where id=6; -update noar tt set v0='S8086K3ZXZJU8' where id=6; -update noar ti set v0='S8086K3ZXZJU8' where id=6; -update noar tt set b1='720NGQSRP' where id=6; -update noar ti set b1='720NGQSRP' where id=6; -update noar tt set v0='VBFXXN2A1IA586XHMQT586E' where id=6; -update noar ti set v0='VBFXXN2A1IA586XHMQT586E' where id=6; -update noar tt set b2='M2G1W8OO' where id=6; -update noar ti set b2='M2G1W8OO' where id=6; -update noar tt set v0='2Q63A4VFY5HYCVS0FVVV60KDB' where id=7; -update noar ti set v0='2Q63A4VFY5HYCVS0FVVV60KDB' where id=7; -update noar tt set b0='GOFNXH1YLGE36L8F6IP24R' where id=7; -update noar ti set b0='GOFNXH1YLGE36L8F6IP24R' where id=7; -update noar tt set v0='HH1V76ESR6I54UH' where id=7; -update noar ti set v0='HH1V76ESR6I54UH' where id=7; -update noar tt set b1='II' where id=7; -update noar ti set b1='II' where id=7; -update noar tt set v0='6N9CDW7RN4O94MR4N9YERGEIP45WX5XD' where id=7; -update noar ti set v0='6N9CDW7RN4O94MR4N9YERGEIP45WX5XD' where id=7; -update noar tt set b2='0SKY532ITRABK3FSQD1' where id=7; -update noar ti set b2='0SKY532ITRABK3FSQD1' where id=7; -update noar tt set v0='MCIGW' where id=8; -update noar ti set v0='MCIGW' where id=8; -update noar tt set b0='VOQJVNS' where id=8; -update noar ti set b0='VOQJVNS' where id=8; -update noar tt set v0='7VQV5KG6YFU5EM6FM3' where id=8; -update noar ti set v0='7VQV5KG6YFU5EM6FM3' where id=8; -update noar tt set b1='LT8WA5J7VKQZ11A1' where id=8; -update noar ti set b1='LT8WA5J7VKQZ11A1' where id=8; -update noar tt set v0='KGEMVKXFLY8BMNUUR45CU' where id=8; -update noar ti set v0='KGEMVKXFLY8BMNUUR45CU' where id=8; -update noar tt set b2='QB99UFZ69F6X8ZAHAX5UKEVXW' where id=8; -update noar ti set b2='QB99UFZ69F6X8ZAHAX5UKEVXW' where id=8; -update noar tt set v0='775A' where id=9; -update noar ti set v0='775A' where id=9; -update noar tt set b0='H9J064UBBH' where id=9; -update noar ti set b0='H9J064UBBH' where id=9; -update noar tt set v0='2SNEAFD6PO891I7HYJB0' where id=9; -update noar ti set v0='2SNEAFD6PO891I7HYJB0' where id=9; -update noar tt set b1='FXPVE61LHENX1' where id=9; -update noar ti set b1='FXPVE61LHENX1' where id=9; -update noar tt set v0='Y9EV63TDO62ARS1G5X09OH9OYJH' where id=9; -update noar ti set v0='Y9EV63TDO62ARS1G5X09OH9OYJH' where id=9; -update noar tt set b2='LNJEFPY' where id=9; -update noar ti set b2='LNJEFPY' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 longblob not null, - b1 tinyblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='0Q6GF787KRD3' where id=1; -update noar ti set v0='0Q6GF787KRD3' where id=1; -update noar tt set b0='QSK1HG57JS8B866PRTA' where id=1; -update noar ti set b0='QSK1HG57JS8B866PRTA' where id=1; -update noar tt set v0='8STLWRX' where id=1; -update noar ti set v0='8STLWRX' where id=1; -update noar tt set b1='SRULMDFEWMBGNJIYWX7E1IRMOR' where id=1; -update noar ti set b1='SRULMDFEWMBGNJIYWX7E1IRMOR' where id=1; -update noar tt set v0='8GJBMZL' where id=1; -update noar ti set v0='8GJBMZL' where id=1; -update noar tt set b2='AQFC7N6NDHR0FO' where id=1; -update noar ti set b2='AQFC7N6NDHR0FO' where id=1; -update noar tt set v0='5LFX03FH9513APAJ6CTSGMM8KUVD' where id=2; -update noar ti set v0='5LFX03FH9513APAJ6CTSGMM8KUVD' where id=2; -update noar tt set b0='60LSBHXM22AVJN3G9R6DS3SZBXFW9L' where id=2; -update noar ti set b0='60LSBHXM22AVJN3G9R6DS3SZBXFW9L' where id=2; -update noar tt set v0='5JFR050' where id=2; -update noar ti set v0='5JFR050' where id=2; -update noar tt set b1='01HWZ9YF' where id=2; -update noar ti set b1='01HWZ9YF' where id=2; -update noar tt set v0='52VYTJM5H4MVPRE301NS' where id=2; -update noar ti set v0='52VYTJM5H4MVPRE301NS' where id=2; -update noar tt set b2='3VPQ9EKXJFM97' where id=2; -update noar ti set b2='3VPQ9EKXJFM97' where id=2; -update noar tt set v0='KDB11X1496UVI1U' where id=3; -update noar ti set v0='KDB11X1496UVI1U' where id=3; -update noar tt set b0='XGMO9QNRO9ME8TWDJIHKDELMKYZ000UY' where id=3; -update noar ti set b0='XGMO9QNRO9ME8TWDJIHKDELMKYZ000UY' where id=3; -update noar tt set v0='SMLLU79BKTT8TMN2TZ2D74HN' where id=3; -update noar ti set v0='SMLLU79BKTT8TMN2TZ2D74HN' where id=3; -update noar tt set b1='TV' where id=3; -update noar ti set b1='TV' where id=3; -update noar tt set v0='H5KAZCNJQZKBYQ5M318JXL4XHC9K' where id=3; -update noar ti set v0='H5KAZCNJQZKBYQ5M318JXL4XHC9K' where id=3; -update noar tt set b2='RT4M5QLJ5LYT' where id=3; -update noar ti set b2='RT4M5QLJ5LYT' where id=3; -update noar tt set v0='VC8S6OMVW' where id=4; -update noar ti set v0='VC8S6OMVW' where id=4; -update noar tt set b0='9MEZF8V4PLZLW' where id=4; -update noar ti set b0='9MEZF8V4PLZLW' where id=4; -update noar tt set v0='PFB2SCNE22U9BNBGQRNJACHDVV2QI' where id=4; -update noar ti set v0='PFB2SCNE22U9BNBGQRNJACHDVV2QI' where id=4; -update noar tt set b1='MIJHPF5N59NR9EDW0' where id=4; -update noar ti set b1='MIJHPF5N59NR9EDW0' where id=4; -update noar tt set v0='WOWE2C3IODFJFMC9LWS' where id=4; -update noar ti set v0='WOWE2C3IODFJFMC9LWS' where id=4; -update noar tt set b2='H0D5P8Q8IC6GD0DOHZT5K4N0Q6F' where id=4; -update noar ti set b2='H0D5P8Q8IC6GD0DOHZT5K4N0Q6F' where id=4; -update noar tt set v0='2NDGE1Z3P5IXLJJWVZXYOEGA' where id=5; -update noar ti set v0='2NDGE1Z3P5IXLJJWVZXYOEGA' where id=5; -update noar tt set b0='FZNEIU84PJBN3C6YYI' where id=5; -update noar ti set b0='FZNEIU84PJBN3C6YYI' where id=5; -update noar tt set v0='BLP441B5SNKUTP535V2M4ICEPHRG7VTT' where id=5; -update noar ti set v0='BLP441B5SNKUTP535V2M4ICEPHRG7VTT' where id=5; -update noar tt set b1='95YKOE4Q2I8QTUHRRTEWYTX0RFJQ' where id=5; -update noar ti set b1='95YKOE4Q2I8QTUHRRTEWYTX0RFJQ' where id=5; -update noar tt set v0='7ZOVBYLA' where id=5; -update noar ti set v0='7ZOVBYLA' where id=5; -update noar tt set b2='5L1Y55XLRJ27M6V3' where id=5; -update noar ti set b2='5L1Y55XLRJ27M6V3' where id=5; -update noar tt set v0='W08S2MF5WBGL2EGYSKXMP' where id=6; -update noar ti set v0='W08S2MF5WBGL2EGYSKXMP' where id=6; -update noar tt set b0='OIQZP03O4WLDJNX4PIMQ7IX' where id=6; -update noar ti set b0='OIQZP03O4WLDJNX4PIMQ7IX' where id=6; -update noar tt set v0='TGT' where id=6; -update noar ti set v0='TGT' where id=6; -update noar tt set b1='A' where id=6; -update noar ti set b1='A' where id=6; -update noar tt set v0='764RESI3Q' where id=6; -update noar ti set v0='764RESI3Q' where id=6; -update noar tt set b2='6' where id=6; -update noar ti set b2='6' where id=6; -update noar tt set v0='7BAO314HNL61D' where id=7; -update noar ti set v0='7BAO314HNL61D' where id=7; -update noar tt set b0='L8QMLIURK' where id=7; -update noar ti set b0='L8QMLIURK' where id=7; -update noar tt set v0='91ZVZS14NYX' where id=7; -update noar ti set v0='91ZVZS14NYX' where id=7; -update noar tt set b1='EC99D' where id=7; -update noar ti set b1='EC99D' where id=7; -update noar tt set v0='7MWYVKTNC7' where id=7; -update noar ti set v0='7MWYVKTNC7' where id=7; -update noar tt set b2='D139L8F4BICXB2M34' where id=7; -update noar ti set b2='D139L8F4BICXB2M34' where id=7; -update noar tt set v0='U' where id=8; -update noar ti set v0='U' where id=8; -update noar tt set b0='XSY2VZ07AXYUO0NS77ESUHBR' where id=8; -update noar ti set b0='XSY2VZ07AXYUO0NS77ESUHBR' where id=8; -update noar tt set v0='GCR' where id=8; -update noar ti set v0='GCR' where id=8; -update noar tt set b1='7749S6RDRLQV' where id=8; -update noar ti set b1='7749S6RDRLQV' where id=8; -update noar tt set v0='25CYCOGKTM6DEU17' where id=8; -update noar ti set v0='25CYCOGKTM6DEU17' where id=8; -update noar tt set b2='AXJ5W' where id=8; -update noar ti set b2='AXJ5W' where id=8; -update noar tt set v0='4P3MNGQRKFGRP' where id=9; -update noar ti set v0='4P3MNGQRKFGRP' where id=9; -update noar tt set b0='ZOE411' where id=9; -update noar ti set b0='ZOE411' where id=9; -update noar tt set v0='2BWZ0FDLXYLJB' where id=9; -update noar ti set v0='2BWZ0FDLXYLJB' where id=9; -update noar tt set b1='QKOYU80ZTH4JESLZW5T44PKV' where id=9; -update noar ti set b1='QKOYU80ZTH4JESLZW5T44PKV' where id=9; -update noar tt set v0='XYHEEQG3ANCU' where id=9; -update noar ti set v0='XYHEEQG3ANCU' where id=9; -update noar tt set b2='Y' where id=9; -update noar ti set b2='Y' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 longblob null, - b1 tinyblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='AMKN518R' where id=1; -update noar ti set v0='AMKN518R' where id=1; -update noar tt set b0='0FXWYX' where id=1; -update noar ti set b0='0FXWYX' where id=1; -update noar tt set v0='DS7H4U6ZVWBNESD40PO' where id=1; -update noar ti set v0='DS7H4U6ZVWBNESD40PO' where id=1; -update noar tt set b1='0MRZJXM80RDB' where id=1; -update noar ti set b1='0MRZJXM80RDB' where id=1; -update noar tt set v0='YGG' where id=1; -update noar ti set v0='YGG' where id=1; -update noar tt set b2='8PDQZGLX0B16C6R4WD0' where id=1; -update noar ti set b2='8PDQZGLX0B16C6R4WD0' where id=1; -update noar tt set v0='AOW238NCU56ABN9AX8SYH24ICP1SGJA' where id=2; -update noar ti set v0='AOW238NCU56ABN9AX8SYH24ICP1SGJA' where id=2; -update noar tt set b0='P271B61YFCH04QI9' where id=2; -update noar ti set b0='P271B61YFCH04QI9' where id=2; -update noar tt set v0='R0AG194' where id=2; -update noar ti set v0='R0AG194' where id=2; -update noar tt set b1='DXM59' where id=2; -update noar ti set b1='DXM59' where id=2; -update noar tt set v0='1GAFD' where id=2; -update noar ti set v0='1GAFD' where id=2; -update noar tt set b2='V08C' where id=2; -update noar ti set b2='V08C' where id=2; -update noar tt set v0='UESSCADYUXHI603Z66AQKPB' where id=3; -update noar ti set v0='UESSCADYUXHI603Z66AQKPB' where id=3; -update noar tt set b0='0OO05YC8NW53LXJQ7K3SU5UH9' where id=3; -update noar ti set b0='0OO05YC8NW53LXJQ7K3SU5UH9' where id=3; -update noar tt set v0='ADE7SQ1MM7UTY1S3044JX' where id=3; -update noar ti set v0='ADE7SQ1MM7UTY1S3044JX' where id=3; -update noar tt set b1='6MZJOLDIY0YN8Q' where id=3; -update noar ti set b1='6MZJOLDIY0YN8Q' where id=3; -update noar tt set v0='WDCN6P3APTUDKJBE8UM9MMPSBZSVM3' where id=3; -update noar ti set v0='WDCN6P3APTUDKJBE8UM9MMPSBZSVM3' where id=3; -update noar tt set b2='XGPXTP5HYBY0GXYUPKSFWQOSCR' where id=3; -update noar ti set b2='XGPXTP5HYBY0GXYUPKSFWQOSCR' where id=3; -update noar tt set v0='IA1M3GZP' where id=4; -update noar ti set v0='IA1M3GZP' where id=4; -update noar tt set b0='XFW9XK8F7V3YWPE72NEXILJOR2X1W' where id=4; -update noar ti set b0='XFW9XK8F7V3YWPE72NEXILJOR2X1W' where id=4; -update noar tt set v0='RJ25GDFJ6FLETIGOLK' where id=4; -update noar ti set v0='RJ25GDFJ6FLETIGOLK' where id=4; -update noar tt set b1='B5CV97LRB29AM0MLYPYXC3S' where id=4; -update noar ti set b1='B5CV97LRB29AM0MLYPYXC3S' where id=4; -update noar tt set v0='3EO' where id=4; -update noar ti set v0='3EO' where id=4; -update noar tt set b2='2GRR0CMCH4DNQL663JRX5' where id=4; -update noar ti set b2='2GRR0CMCH4DNQL663JRX5' where id=4; -update noar tt set v0='F2HM9HI4TDCYSULTE' where id=5; -update noar ti set v0='F2HM9HI4TDCYSULTE' where id=5; -update noar tt set b0='1516QOFM8HYHA' where id=5; -update noar ti set b0='1516QOFM8HYHA' where id=5; -update noar tt set v0='1K3' where id=5; -update noar ti set v0='1K3' where id=5; -update noar tt set b1='H' where id=5; -update noar ti set b1='H' where id=5; -update noar tt set v0='53XP3Q38QT' where id=5; -update noar ti set v0='53XP3Q38QT' where id=5; -update noar tt set b2='A0Y8M7A7BH74LJT63Q8A' where id=5; -update noar ti set b2='A0Y8M7A7BH74LJT63Q8A' where id=5; -update noar tt set v0='NI5ZAZXKLQERKZLZ9RA190EUS' where id=6; -update noar ti set v0='NI5ZAZXKLQERKZLZ9RA190EUS' where id=6; -update noar tt set b0='N749' where id=6; -update noar ti set b0='N749' where id=6; -update noar tt set v0='BJIUELODFXRKSTUT5ZMX9AWFREPTN7' where id=6; -update noar ti set v0='BJIUELODFXRKSTUT5ZMX9AWFREPTN7' where id=6; -update noar tt set b1='CWKMETCRQY588KS' where id=6; -update noar ti set b1='CWKMETCRQY588KS' where id=6; -update noar tt set v0='1P7O51T11A81QLQ8BAQ2IYF' where id=6; -update noar ti set v0='1P7O51T11A81QLQ8BAQ2IYF' where id=6; -update noar tt set b2='5MAFSL7XGACIL46HYXUY' where id=6; -update noar ti set b2='5MAFSL7XGACIL46HYXUY' where id=6; -update noar tt set v0='AXQV94DIW' where id=7; -update noar ti set v0='AXQV94DIW' where id=7; -update noar tt set b0='NQS9SRKTXP9' where id=7; -update noar ti set b0='NQS9SRKTXP9' where id=7; -update noar tt set v0='PFBEWG2NMJ6MN61RD1GJ7ANVSZONP3N8' where id=7; -update noar ti set v0='PFBEWG2NMJ6MN61RD1GJ7ANVSZONP3N8' where id=7; -update noar tt set b1='JV57OKZV6KJU8L5KD3NRQV86' where id=7; -update noar ti set b1='JV57OKZV6KJU8L5KD3NRQV86' where id=7; -update noar tt set v0='FXCIF6H9S7OZ5MRVB' where id=7; -update noar ti set v0='FXCIF6H9S7OZ5MRVB' where id=7; -update noar tt set b2='BYTJIU1IW6SRY' where id=7; -update noar ti set b2='BYTJIU1IW6SRY' where id=7; -update noar tt set v0='ARDKPAQZB62ST2MYFV9DRFY7Y' where id=8; -update noar ti set v0='ARDKPAQZB62ST2MYFV9DRFY7Y' where id=8; -update noar tt set b0='GBBERWWWTH7YJCCSIC6' where id=8; -update noar ti set b0='GBBERWWWTH7YJCCSIC6' where id=8; -update noar tt set v0='IAYJ3L6OPXV1T16WFD04P88SMS6I' where id=8; -update noar ti set v0='IAYJ3L6OPXV1T16WFD04P88SMS6I' where id=8; -update noar tt set b1='G0FE61ARBFKMOVDL81P4WG4CW56' where id=8; -update noar ti set b1='G0FE61ARBFKMOVDL81P4WG4CW56' where id=8; -update noar tt set v0='KL9H6FWKTTNJ8DMCD2LJXFX9YN' where id=8; -update noar ti set v0='KL9H6FWKTTNJ8DMCD2LJXFX9YN' where id=8; -update noar tt set b2='ZGCH2QY2USXDSUULHJTWDLZEGFRZOWI' where id=8; -update noar ti set b2='ZGCH2QY2USXDSUULHJTWDLZEGFRZOWI' where id=8; -update noar tt set v0='RDB0SV' where id=9; -update noar ti set v0='RDB0SV' where id=9; -update noar tt set b0='CP4D3J8INCWF9RDZ9FHN2' where id=9; -update noar ti set b0='CP4D3J8INCWF9RDZ9FHN2' where id=9; -update noar tt set v0='WTTNO' where id=9; -update noar ti set v0='WTTNO' where id=9; -update noar tt set b1='EY5N7RCKWEP9TA8QOQY7' where id=9; -update noar ti set b1='EY5N7RCKWEP9TA8QOQY7' where id=9; -update noar tt set v0='UCSEZ4HAY27S4VPB8EPPMJLQYDR6EY9' where id=9; -update noar ti set v0='UCSEZ4HAY27S4VPB8EPPMJLQYDR6EY9' where id=9; -update noar tt set b2='3L53BEZVT2YKOYV1WOE9MQHCH06CQT' where id=9; -update noar ti set b2='3L53BEZVT2YKOYV1WOE9MQHCH06CQT' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 longblob null, - b1 tinyblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='SOWO51D' where id=1; -update noar ti set v0='SOWO51D' where id=1; -update noar tt set b0='CW42JX9F' where id=1; -update noar ti set b0='CW42JX9F' where id=1; -update noar tt set v0='9352UQCNYHHRRX22HL' where id=1; -update noar ti set v0='9352UQCNYHHRRX22HL' where id=1; -update noar tt set b1='L5UR0OGI3WQ2MGI9797A3W087NZ3UZ' where id=1; -update noar ti set b1='L5UR0OGI3WQ2MGI9797A3W087NZ3UZ' where id=1; -update noar tt set v0='KJ0I2YS7XM5L2NA' where id=1; -update noar ti set v0='KJ0I2YS7XM5L2NA' where id=1; -update noar tt set b2='K6OT2MVZJ60BM' where id=1; -update noar ti set b2='K6OT2MVZJ60BM' where id=1; -update noar tt set v0='1R' where id=2; -update noar ti set v0='1R' where id=2; -update noar tt set b0='YNLCQAN6VRAZ5582G4QHZKY' where id=2; -update noar ti set b0='YNLCQAN6VRAZ5582G4QHZKY' where id=2; -update noar tt set v0='CF' where id=2; -update noar ti set v0='CF' where id=2; -update noar tt set b1='LGA0GYM4B' where id=2; -update noar ti set b1='LGA0GYM4B' where id=2; -update noar tt set v0='ZETIV9WPQIXMXO' where id=2; -update noar ti set v0='ZETIV9WPQIXMXO' where id=2; -update noar tt set b2='084R77QBRAE8WR3628C9WWDPZG3OFF82' where id=2; -update noar ti set b2='084R77QBRAE8WR3628C9WWDPZG3OFF82' where id=2; -update noar tt set v0='HHJLNXF0DYJO' where id=3; -update noar ti set v0='HHJLNXF0DYJO' where id=3; -update noar tt set b0='TFGZ6T98E' where id=3; -update noar ti set b0='TFGZ6T98E' where id=3; -update noar tt set v0='Q7WE08LW97RNLVQ2HE2' where id=3; -update noar ti set v0='Q7WE08LW97RNLVQ2HE2' where id=3; -update noar tt set b1='PK27J26DJRNSE8Z5Y3D' where id=3; -update noar ti set b1='PK27J26DJRNSE8Z5Y3D' where id=3; -update noar tt set v0='KS3DE63Z9GCZTFH0Y6S6D6LUFS2Q16' where id=3; -update noar ti set v0='KS3DE63Z9GCZTFH0Y6S6D6LUFS2Q16' where id=3; -update noar tt set b2='Y7H0IDONT9IFRBSRU53PBB3OBEYZP' where id=3; -update noar ti set b2='Y7H0IDONT9IFRBSRU53PBB3OBEYZP' where id=3; -update noar tt set v0='8W2CJVT4WA54UI' where id=4; -update noar ti set v0='8W2CJVT4WA54UI' where id=4; -update noar tt set b0='KR9MOZJ77HSZY1DM6QDYQRMF' where id=4; -update noar ti set b0='KR9MOZJ77HSZY1DM6QDYQRMF' where id=4; -update noar tt set v0='V73' where id=4; -update noar ti set v0='V73' where id=4; -update noar tt set b1='ODYJBLEREP6' where id=4; -update noar ti set b1='ODYJBLEREP6' where id=4; -update noar tt set v0='NZQ4D2' where id=4; -update noar ti set v0='NZQ4D2' where id=4; -update noar tt set b2='PQAZ5' where id=4; -update noar ti set b2='PQAZ5' where id=4; -update noar tt set v0='0RDJOP1076MERNE' where id=5; -update noar ti set v0='0RDJOP1076MERNE' where id=5; -update noar tt set b0='1QDVZPW6WRZSI12' where id=5; -update noar ti set b0='1QDVZPW6WRZSI12' where id=5; -update noar tt set v0='RTYH5GEXL24NL6YUUMZZ0D' where id=5; -update noar ti set v0='RTYH5GEXL24NL6YUUMZZ0D' where id=5; -update noar tt set b1='8ZWA3JYXBJW5MTFW8E1' where id=5; -update noar ti set b1='8ZWA3JYXBJW5MTFW8E1' where id=5; -update noar tt set v0='AQCVQ1AENG3NLEL7R65GAD' where id=5; -update noar ti set v0='AQCVQ1AENG3NLEL7R65GAD' where id=5; -update noar tt set b2='12M9TR' where id=5; -update noar ti set b2='12M9TR' where id=5; -update noar tt set v0='OGWXVFYWBCCHAKOT0F7B600VSES4' where id=6; -update noar ti set v0='OGWXVFYWBCCHAKOT0F7B600VSES4' where id=6; -update noar tt set b0='PFR11' where id=6; -update noar ti set b0='PFR11' where id=6; -update noar tt set v0='NM' where id=6; -update noar ti set v0='NM' where id=6; -update noar tt set b1='YO' where id=6; -update noar ti set b1='YO' where id=6; -update noar tt set v0='08' where id=6; -update noar ti set v0='08' where id=6; -update noar tt set b2='ZAFFIM7JPH5XQ8QMWX' where id=6; -update noar ti set b2='ZAFFIM7JPH5XQ8QMWX' where id=6; -update noar tt set v0='TL3PSNXPZEXVJ9MJJ034' where id=7; -update noar ti set v0='TL3PSNXPZEXVJ9MJJ034' where id=7; -update noar tt set b0='D33GM' where id=7; -update noar ti set b0='D33GM' where id=7; -update noar tt set v0='SWGVJF9M' where id=7; -update noar ti set v0='SWGVJF9M' where id=7; -update noar tt set b1='VXRVHPBENQ50KG65JIHR' where id=7; -update noar ti set b1='VXRVHPBENQ50KG65JIHR' where id=7; -update noar tt set v0='ARKIXE' where id=7; -update noar ti set v0='ARKIXE' where id=7; -update noar tt set b2='QSGER' where id=7; -update noar ti set b2='QSGER' where id=7; -update noar tt set v0='ROIXMP10Q9Y3KN5AVX9GUG' where id=8; -update noar ti set v0='ROIXMP10Q9Y3KN5AVX9GUG' where id=8; -update noar tt set b0='RKGA9Y3U6QZ77YJ5KS00O' where id=8; -update noar ti set b0='RKGA9Y3U6QZ77YJ5KS00O' where id=8; -update noar tt set v0='F7D8ZEV0' where id=8; -update noar ti set v0='F7D8ZEV0' where id=8; -update noar tt set b1='JBKE385POLSW3QALFRCN' where id=8; -update noar ti set b1='JBKE385POLSW3QALFRCN' where id=8; -update noar tt set v0='ORW3Y9T11C8Q' where id=8; -update noar ti set v0='ORW3Y9T11C8Q' where id=8; -update noar tt set b2='LWNNCF8H' where id=8; -update noar ti set b2='LWNNCF8H' where id=8; -update noar tt set v0='FHU92WKHX4KUMNRKHK1K5MJNPCWVGFD' where id=9; -update noar ti set v0='FHU92WKHX4KUMNRKHK1K5MJNPCWVGFD' where id=9; -update noar tt set b0='X96QN56HQU83HKPWEKB' where id=9; -update noar ti set b0='X96QN56HQU83HKPWEKB' where id=9; -update noar tt set v0='ONNW9IYZZ2N6R' where id=9; -update noar ti set v0='ONNW9IYZZ2N6R' where id=9; -update noar tt set b1='KH3TJ' where id=9; -update noar ti set b1='KH3TJ' where id=9; -update noar tt set v0='CTE13H2593J839' where id=9; -update noar ti set v0='CTE13H2593J839' where id=9; -update noar tt set b2='RD7AZ' where id=9; -update noar ti set b2='RD7AZ' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 longblob not null, - b1 tinyblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='JYD0' where id=1; -update noar ti set v0='JYD0' where id=1; -update noar tt set b0='F7IB' where id=1; -update noar ti set b0='F7IB' where id=1; -update noar tt set v0='J5' where id=1; -update noar ti set v0='J5' where id=1; -update noar tt set b1='XDODL' where id=1; -update noar ti set b1='XDODL' where id=1; -update noar tt set v0='SKJ1150CIQOO1DWL81E' where id=1; -update noar ti set v0='SKJ1150CIQOO1DWL81E' where id=1; -update noar tt set b2='LX2KWJKX1MWC9ZEPM49DCKY' where id=1; -update noar ti set b2='LX2KWJKX1MWC9ZEPM49DCKY' where id=1; -update noar tt set v0='GVXF2MFZ5H0GTKIJ6D70K1R3PZFR' where id=2; -update noar ti set v0='GVXF2MFZ5H0GTKIJ6D70K1R3PZFR' where id=2; -update noar tt set b0='09DA' where id=2; -update noar ti set b0='09DA' where id=2; -update noar tt set v0='CRJN1TBRKT5T5GOEMVG' where id=2; -update noar ti set v0='CRJN1TBRKT5T5GOEMVG' where id=2; -update noar tt set b1='F0JMXZ7S90' where id=2; -update noar ti set b1='F0JMXZ7S90' where id=2; -update noar tt set v0='LP6A6' where id=2; -update noar ti set v0='LP6A6' where id=2; -update noar tt set b2='UIQD0KP1CHQLUDI3' where id=2; -update noar ti set b2='UIQD0KP1CHQLUDI3' where id=2; -update noar tt set v0='22LYYRZJHDF5NL2UDXUNRB8T5' where id=3; -update noar ti set v0='22LYYRZJHDF5NL2UDXUNRB8T5' where id=3; -update noar tt set b0='JL4E4EX51Y1H9GIH8VZ5ZLYIM8S2EGM9' where id=3; -update noar ti set b0='JL4E4EX51Y1H9GIH8VZ5ZLYIM8S2EGM9' where id=3; -update noar tt set v0='V9EHCQKJZP7BBEWPCYGUMY0' where id=3; -update noar ti set v0='V9EHCQKJZP7BBEWPCYGUMY0' where id=3; -update noar tt set b1='EWV05LVNEISX2' where id=3; -update noar ti set b1='EWV05LVNEISX2' where id=3; -update noar tt set v0='8MDS8' where id=3; -update noar ti set v0='8MDS8' where id=3; -update noar tt set b2='UTDKHY1MRV5GM9LZJ8E8XWK6TV6ZJADW' where id=3; -update noar ti set b2='UTDKHY1MRV5GM9LZJ8E8XWK6TV6ZJADW' where id=3; -update noar tt set v0='VQV6NYXA69FRRCN9ZF' where id=4; -update noar ti set v0='VQV6NYXA69FRRCN9ZF' where id=4; -update noar tt set b0='LGGD3WK09KYHRF40S06JS9XS' where id=4; -update noar ti set b0='LGGD3WK09KYHRF40S06JS9XS' where id=4; -update noar tt set v0='H0L5VK4HARVUKH6LD69QCK4' where id=4; -update noar ti set v0='H0L5VK4HARVUKH6LD69QCK4' where id=4; -update noar tt set b1='96DVSAFX6U5DZYW89SH3R7ALK' where id=4; -update noar ti set b1='96DVSAFX6U5DZYW89SH3R7ALK' where id=4; -update noar tt set v0='3VUSH3BLQ36VWLSED6EHH85R' where id=4; -update noar ti set v0='3VUSH3BLQ36VWLSED6EHH85R' where id=4; -update noar tt set b2='BKGOPGAJZKADFH5KGY6LBPF' where id=4; -update noar ti set b2='BKGOPGAJZKADFH5KGY6LBPF' where id=4; -update noar tt set v0='8ZLDZ8PWMTE1A9XK94RQ7TS' where id=5; -update noar ti set v0='8ZLDZ8PWMTE1A9XK94RQ7TS' where id=5; -update noar tt set b0='YOMCYS3K88OSZ6V2' where id=5; -update noar ti set b0='YOMCYS3K88OSZ6V2' where id=5; -update noar tt set v0='4WGEQV1EISR' where id=5; -update noar ti set v0='4WGEQV1EISR' where id=5; -update noar tt set b1='9LED93E1RDOJ9' where id=5; -update noar ti set b1='9LED93E1RDOJ9' where id=5; -update noar tt set v0='1UGDMIJREX58WFGDWFJYH8IYV308L' where id=5; -update noar ti set v0='1UGDMIJREX58WFGDWFJYH8IYV308L' where id=5; -update noar tt set b2='9M0EZCD' where id=5; -update noar ti set b2='9M0EZCD' where id=5; -update noar tt set v0='5' where id=6; -update noar ti set v0='5' where id=6; -update noar tt set b0='OKT9FZDP9K0CVL0A4V9E' where id=6; -update noar ti set b0='OKT9FZDP9K0CVL0A4V9E' where id=6; -update noar tt set v0='5UEGPRI7PWJC2F1KPFLB' where id=6; -update noar ti set v0='5UEGPRI7PWJC2F1KPFLB' where id=6; -update noar tt set b1='180KB' where id=6; -update noar ti set b1='180KB' where id=6; -update noar tt set v0='GCNA' where id=6; -update noar ti set v0='GCNA' where id=6; -update noar tt set b2='IK83PAN49HVMR' where id=6; -update noar ti set b2='IK83PAN49HVMR' where id=6; -update noar tt set v0='TCMPVZMV122EWAOB4ZVT5TBB' where id=7; -update noar ti set v0='TCMPVZMV122EWAOB4ZVT5TBB' where id=7; -update noar tt set b0='YS7RLIHD6SLTJ' where id=7; -update noar ti set b0='YS7RLIHD6SLTJ' where id=7; -update noar tt set v0='WANRFGN5' where id=7; -update noar ti set v0='WANRFGN5' where id=7; -update noar tt set b1='YTKXXC1XV8QFQLIAYON5LIXE2VWZDZ' where id=7; -update noar ti set b1='YTKXXC1XV8QFQLIAYON5LIXE2VWZDZ' where id=7; -update noar tt set v0='UTW2A2' where id=7; -update noar ti set v0='UTW2A2' where id=7; -update noar tt set b2='C0V' where id=7; -update noar ti set b2='C0V' where id=7; -update noar tt set v0='O0SOVFM9E7YD' where id=8; -update noar ti set v0='O0SOVFM9E7YD' where id=8; -update noar tt set b0='HJRRZ5IGYO1AA6MIDA7LFQQY' where id=8; -update noar ti set b0='HJRRZ5IGYO1AA6MIDA7LFQQY' where id=8; -update noar tt set v0='SZBZALZOODO9ME1ZTUUI26P' where id=8; -update noar ti set v0='SZBZALZOODO9ME1ZTUUI26P' where id=8; -update noar tt set b1='4HSU2L8IQV5H20Y' where id=8; -update noar ti set b1='4HSU2L8IQV5H20Y' where id=8; -update noar tt set v0='L0DPUJENALYJIG2D87N0' where id=8; -update noar ti set v0='L0DPUJENALYJIG2D87N0' where id=8; -update noar tt set b2='74SM' where id=8; -update noar ti set b2='74SM' where id=8; -update noar tt set v0='ASF47OFFZ7Y0DUSXG08T' where id=9; -update noar ti set v0='ASF47OFFZ7Y0DUSXG08T' where id=9; -update noar tt set b0='ZUM' where id=9; -update noar ti set b0='ZUM' where id=9; -update noar tt set v0='U2Q0' where id=9; -update noar ti set v0='U2Q0' where id=9; -update noar tt set b1='8IA2SRMDYD' where id=9; -update noar ti set b1='8IA2SRMDYD' where id=9; -update noar tt set v0='NN69CTRFMB9QYOQ' where id=9; -update noar ti set v0='NN69CTRFMB9QYOQ' where id=9; -update noar tt set b2='ZWMPABBX5CZZJXDOS12GKS' where id=9; -update noar ti set b2='ZWMPABBX5CZZJXDOS12GKS' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 longblob not null, - b1 tinyblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='M99S8I2IRCQH5CD46VLA427' where id=1; -update noar ti set v0='M99S8I2IRCQH5CD46VLA427' where id=1; -update noar tt set b0='4E02MII1T7NLO' where id=1; -update noar ti set b0='4E02MII1T7NLO' where id=1; -update noar tt set v0='3J573ZT' where id=1; -update noar ti set v0='3J573ZT' where id=1; -update noar tt set b1='QRF9UIKJ5DLZ2YQCKXP1I' where id=1; -update noar ti set b1='QRF9UIKJ5DLZ2YQCKXP1I' where id=1; -update noar tt set v0='19SDTJ5F9B9QX266FTKW' where id=1; -update noar ti set v0='19SDTJ5F9B9QX266FTKW' where id=1; -update noar tt set b2='SSHDFQ7UTSKK6PV9WSSZ42PLV' where id=1; -update noar ti set b2='SSHDFQ7UTSKK6PV9WSSZ42PLV' where id=1; -update noar tt set v0='PC' where id=2; -update noar ti set v0='PC' where id=2; -update noar tt set b0='8' where id=2; -update noar ti set b0='8' where id=2; -update noar tt set v0='6E4ZRH4NFG188CWEN2' where id=2; -update noar ti set v0='6E4ZRH4NFG188CWEN2' where id=2; -update noar tt set b1='XBUMIMTVN86' where id=2; -update noar ti set b1='XBUMIMTVN86' where id=2; -update noar tt set v0='NHWR4UJ04FKKNC' where id=2; -update noar ti set v0='NHWR4UJ04FKKNC' where id=2; -update noar tt set b2='0XKDA8UWY9K' where id=2; -update noar ti set b2='0XKDA8UWY9K' where id=2; -update noar tt set v0='ZJ5DUZWT175X7OJUWL3ENVU' where id=3; -update noar ti set v0='ZJ5DUZWT175X7OJUWL3ENVU' where id=3; -update noar tt set b0='QUE2HOAPC5OL250AN39QO4HT' where id=3; -update noar ti set b0='QUE2HOAPC5OL250AN39QO4HT' where id=3; -update noar tt set v0='TII50M0DWAHABRACZ' where id=3; -update noar ti set v0='TII50M0DWAHABRACZ' where id=3; -update noar tt set b1='9RPJ3TE7G' where id=3; -update noar ti set b1='9RPJ3TE7G' where id=3; -update noar tt set v0='K' where id=3; -update noar ti set v0='K' where id=3; -update noar tt set b2='PY72N2Y98VISCGZ3Q8ADOURI6CE' where id=3; -update noar ti set b2='PY72N2Y98VISCGZ3Q8ADOURI6CE' where id=3; -update noar tt set v0='B0D033EEHKFT1XHNT' where id=4; -update noar ti set v0='B0D033EEHKFT1XHNT' where id=4; -update noar tt set b0='X' where id=4; -update noar ti set b0='X' where id=4; -update noar tt set v0='P1049NF91FRET2FUMFI' where id=4; -update noar ti set v0='P1049NF91FRET2FUMFI' where id=4; -update noar tt set b1='QALRV6BAVNH36RX171OIEK3F58' where id=4; -update noar ti set b1='QALRV6BAVNH36RX171OIEK3F58' where id=4; -update noar tt set v0='P3UJI0DVU596CVXB672JJXNF1Q4S7' where id=4; -update noar ti set v0='P3UJI0DVU596CVXB672JJXNF1Q4S7' where id=4; -update noar tt set b2='BVH124539SW3IWLJYF58E5QWRWVUQC' where id=4; -update noar ti set b2='BVH124539SW3IWLJYF58E5QWRWVUQC' where id=4; -update noar tt set v0='PG4FFS7E1VI8DC0' where id=5; -update noar ti set v0='PG4FFS7E1VI8DC0' where id=5; -update noar tt set b0='FVFGBLHRA2AEPZ80FBIMYK8' where id=5; -update noar ti set b0='FVFGBLHRA2AEPZ80FBIMYK8' where id=5; -update noar tt set v0='U75IP181HOE0ZN8YWHG8V39WG09O65' where id=5; -update noar ti set v0='U75IP181HOE0ZN8YWHG8V39WG09O65' where id=5; -update noar tt set b1='JYTQFQM3S911GD2N80' where id=5; -update noar ti set b1='JYTQFQM3S911GD2N80' where id=5; -update noar tt set v0='MF6276OYVE3R2934LBEB9QKM5CKO' where id=5; -update noar ti set v0='MF6276OYVE3R2934LBEB9QKM5CKO' where id=5; -update noar tt set b2='TCB20NFDJ8QHO' where id=5; -update noar ti set b2='TCB20NFDJ8QHO' where id=5; -update noar tt set v0='08G6WYWFI0L8S3OXI68GG693DE' where id=6; -update noar ti set v0='08G6WYWFI0L8S3OXI68GG693DE' where id=6; -update noar tt set b0='VXO' where id=6; -update noar ti set b0='VXO' where id=6; -update noar tt set v0='4L8V81BY30LDLGCOCWNJITDCXB' where id=6; -update noar ti set v0='4L8V81BY30LDLGCOCWNJITDCXB' where id=6; -update noar tt set b1='DKXOXHBHWPD' where id=6; -update noar ti set b1='DKXOXHBHWPD' where id=6; -update noar tt set v0='IBESIH8QFN7PA68NJYP1Q3MQQVY16OI0' where id=6; -update noar ti set v0='IBESIH8QFN7PA68NJYP1Q3MQQVY16OI0' where id=6; -update noar tt set b2='GF9O9W' where id=6; -update noar ti set b2='GF9O9W' where id=6; -update noar tt set v0='DUPB' where id=7; -update noar ti set v0='DUPB' where id=7; -update noar tt set b0='0342H1DT' where id=7; -update noar ti set b0='0342H1DT' where id=7; -update noar tt set v0='CCFHHSTSW7R5JFH9OJZGY6' where id=7; -update noar ti set v0='CCFHHSTSW7R5JFH9OJZGY6' where id=7; -update noar tt set b1='IPIH7' where id=7; -update noar ti set b1='IPIH7' where id=7; -update noar tt set v0='CTLXLPUUCKCJ0H7QOLEH7E8' where id=7; -update noar ti set v0='CTLXLPUUCKCJ0H7QOLEH7E8' where id=7; -update noar tt set b2='AUATGUTLUG2UUG5' where id=7; -update noar ti set b2='AUATGUTLUG2UUG5' where id=7; -update noar tt set v0='LQ3KPTKAQL4GMMU0E28XYH' where id=8; -update noar ti set v0='LQ3KPTKAQL4GMMU0E28XYH' where id=8; -update noar tt set b0='O2V' where id=8; -update noar ti set b0='O2V' where id=8; -update noar tt set v0='ZZDDAR0BFVUBKX8JVND1AWZMT' where id=8; -update noar ti set v0='ZZDDAR0BFVUBKX8JVND1AWZMT' where id=8; -update noar tt set b1='YTA1C6K' where id=8; -update noar ti set b1='YTA1C6K' where id=8; -update noar tt set v0='ATJMIRC6E9DPYSBMOYLPG' where id=8; -update noar ti set v0='ATJMIRC6E9DPYSBMOYLPG' where id=8; -update noar tt set b2='OAMZA90FIE4LGI3VO8MF41V' where id=8; -update noar ti set b2='OAMZA90FIE4LGI3VO8MF41V' where id=8; -update noar tt set v0='X4NIW' where id=9; -update noar ti set v0='X4NIW' where id=9; -update noar tt set b0='9N9UOM7OD2Y' where id=9; -update noar ti set b0='9N9UOM7OD2Y' where id=9; -update noar tt set v0='5FTKNURQNRN1L9C5' where id=9; -update noar ti set v0='5FTKNURQNRN1L9C5' where id=9; -update noar tt set b1='PYWNLU2O' where id=9; -update noar ti set b1='PYWNLU2O' where id=9; -update noar tt set v0='CUSL3R0T4ZX13HWHVQZ77FGZ2L' where id=9; -update noar ti set v0='CUSL3R0T4ZX13HWHVQZ77FGZ2L' where id=9; -update noar tt set b2='M00LOB' where id=9; -update noar ti set b2='M00LOB' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 longblob null, - b1 blob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='HP56HAOK' where id=1; -update noar ti set v0='HP56HAOK' where id=1; -update noar tt set b0='G7OLRDEPR5' where id=1; -update noar ti set b0='G7OLRDEPR5' where id=1; -update noar tt set v0='TTIJTJ08I1K5B1GQY8LFP' where id=1; -update noar ti set v0='TTIJTJ08I1K5B1GQY8LFP' where id=1; -update noar tt set b1='6' where id=1; -update noar ti set b1='6' where id=1; -update noar tt set v0='MHGB7T49EQF3M' where id=1; -update noar ti set v0='MHGB7T49EQF3M' where id=1; -update noar tt set b2='6O1ZHDJRLNQM63MO54ODB2WYFBOGPYF9' where id=1; -update noar ti set b2='6O1ZHDJRLNQM63MO54ODB2WYFBOGPYF9' where id=1; -update noar tt set v0='P90QC5LM26OF21JSV6A2136YZ9' where id=2; -update noar ti set v0='P90QC5LM26OF21JSV6A2136YZ9' where id=2; -update noar tt set b0='QECR' where id=2; -update noar ti set b0='QECR' where id=2; -update noar tt set v0='989AOHSSCCMSVGG65' where id=2; -update noar ti set v0='989AOHSSCCMSVGG65' where id=2; -update noar tt set b1='ZQCDRG9FDEWN79E' where id=2; -update noar ti set b1='ZQCDRG9FDEWN79E' where id=2; -update noar tt set v0='WK32FBBR9827K' where id=2; -update noar ti set v0='WK32FBBR9827K' where id=2; -update noar tt set b2='ZT3U0RYHX1H' where id=2; -update noar ti set b2='ZT3U0RYHX1H' where id=2; -update noar tt set v0='G2' where id=3; -update noar ti set v0='G2' where id=3; -update noar tt set b0='0U921ZG' where id=3; -update noar ti set b0='0U921ZG' where id=3; -update noar tt set v0='SJHW7YC8VP1LT4C60XB44OHBYGI6C9' where id=3; -update noar ti set v0='SJHW7YC8VP1LT4C60XB44OHBYGI6C9' where id=3; -update noar tt set b1='GT7CZO' where id=3; -update noar ti set b1='GT7CZO' where id=3; -update noar tt set v0='EMDIIWNNKLPJ8G6HYJIBHP4GO46LP2' where id=3; -update noar ti set v0='EMDIIWNNKLPJ8G6HYJIBHP4GO46LP2' where id=3; -update noar tt set b2='C1MUT9JRB' where id=3; -update noar ti set b2='C1MUT9JRB' where id=3; -update noar tt set v0='84PG8AQZXQ8VK4641GAAXQY1DY' where id=4; -update noar ti set v0='84PG8AQZXQ8VK4641GAAXQY1DY' where id=4; -update noar tt set b0='LJX3BN' where id=4; -update noar ti set b0='LJX3BN' where id=4; -update noar tt set v0='A6XG9' where id=4; -update noar ti set v0='A6XG9' where id=4; -update noar tt set b1='FNTLKKP9MLO81YB11D7EL' where id=4; -update noar ti set b1='FNTLKKP9MLO81YB11D7EL' where id=4; -update noar tt set v0='VX2X33TZ0SWL6LFCL' where id=4; -update noar ti set v0='VX2X33TZ0SWL6LFCL' where id=4; -update noar tt set b2='8DV7LQHXA1M18BGMYOW3R2ZP936AMGS' where id=4; -update noar ti set b2='8DV7LQHXA1M18BGMYOW3R2ZP936AMGS' where id=4; -update noar tt set v0='EB4LMO7AFXFH82QSPA4M' where id=5; -update noar ti set v0='EB4LMO7AFXFH82QSPA4M' where id=5; -update noar tt set b0='UY7V4U2QSC8' where id=5; -update noar ti set b0='UY7V4U2QSC8' where id=5; -update noar tt set v0='JQXOX' where id=5; -update noar ti set v0='JQXOX' where id=5; -update noar tt set b1='5JF27Q2T3T' where id=5; -update noar ti set b1='5JF27Q2T3T' where id=5; -update noar tt set v0='IWGULX' where id=5; -update noar ti set v0='IWGULX' where id=5; -update noar tt set b2='KWCI258S5SZJ7' where id=5; -update noar ti set b2='KWCI258S5SZJ7' where id=5; -update noar tt set v0='YX524FJRZ5LHPU2K1CIQ2FYRR1' where id=6; -update noar ti set v0='YX524FJRZ5LHPU2K1CIQ2FYRR1' where id=6; -update noar tt set b0='6MGQD51' where id=6; -update noar ti set b0='6MGQD51' where id=6; -update noar tt set v0='WDOFFPB' where id=6; -update noar ti set v0='WDOFFPB' where id=6; -update noar tt set b1='ZIYIS33' where id=6; -update noar ti set b1='ZIYIS33' where id=6; -update noar tt set v0='60T0M9TIH0L8C' where id=6; -update noar ti set v0='60T0M9TIH0L8C' where id=6; -update noar tt set b2='AS' where id=6; -update noar ti set b2='AS' where id=6; -update noar tt set v0='JJJM5519IARJY8SND' where id=7; -update noar ti set v0='JJJM5519IARJY8SND' where id=7; -update noar tt set b0='CXG4UTEQD' where id=7; -update noar ti set b0='CXG4UTEQD' where id=7; -update noar tt set v0='J65328RGS0P3O7R02CK6KOQIKZE6D2' where id=7; -update noar ti set v0='J65328RGS0P3O7R02CK6KOQIKZE6D2' where id=7; -update noar tt set b1='DDWYLSBRDEPKWS6JN3H0DCU6TF' where id=7; -update noar ti set b1='DDWYLSBRDEPKWS6JN3H0DCU6TF' where id=7; -update noar tt set v0='YCXHCJT03CLG' where id=7; -update noar ti set v0='YCXHCJT03CLG' where id=7; -update noar tt set b2='UBRWTX0BST0SVF5B3U0WFJ7IDP3CK' where id=7; -update noar ti set b2='UBRWTX0BST0SVF5B3U0WFJ7IDP3CK' where id=7; -update noar tt set v0='OBVOKHC1M7W19J71P3AWL08QA2WY9' where id=8; -update noar ti set v0='OBVOKHC1M7W19J71P3AWL08QA2WY9' where id=8; -update noar tt set b0='4P6LR2YQO97ZUAU25' where id=8; -update noar ti set b0='4P6LR2YQO97ZUAU25' where id=8; -update noar tt set v0='18QYEU7TO2877V7PV7JBZ5YG3O5' where id=8; -update noar ti set v0='18QYEU7TO2877V7PV7JBZ5YG3O5' where id=8; -update noar tt set b1='2ROPMEXK' where id=8; -update noar ti set b1='2ROPMEXK' where id=8; -update noar tt set v0='1' where id=8; -update noar ti set v0='1' where id=8; -update noar tt set b2='1D8WS6RRJUIA8KE22Z0ELO05' where id=8; -update noar ti set b2='1D8WS6RRJUIA8KE22Z0ELO05' where id=8; -update noar tt set v0='KJWIWZ5GU48DQIJK1TWMV2KQGX6SW5' where id=9; -update noar ti set v0='KJWIWZ5GU48DQIJK1TWMV2KQGX6SW5' where id=9; -update noar tt set b0='RJZLE1ODIN6II' where id=9; -update noar ti set b0='RJZLE1ODIN6II' where id=9; -update noar tt set v0='GLT6O4EPVIEX8B4K7R0Z0VGV' where id=9; -update noar ti set v0='GLT6O4EPVIEX8B4K7R0Z0VGV' where id=9; -update noar tt set b1='94DA1ZZN' where id=9; -update noar ti set b1='94DA1ZZN' where id=9; -update noar tt set v0='LMGR9K8KAWEUX' where id=9; -update noar ti set v0='LMGR9K8KAWEUX' where id=9; -update noar tt set b2='NFTKHJX5MTRXV6F2CRT' where id=9; -update noar ti set b2='NFTKHJX5MTRXV6F2CRT' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 longblob null, - b1 blob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='J8HDDAT0LN9KYLOHBC1XRT9V9' where id=1; -update noar ti set v0='J8HDDAT0LN9KYLOHBC1XRT9V9' where id=1; -update noar tt set b0='W1QOJD8JCM9FECU8CQ655' where id=1; -update noar ti set b0='W1QOJD8JCM9FECU8CQ655' where id=1; -update noar tt set v0='L94C1LQE4B451UGJQE5EL5O97MCGR1X6' where id=1; -update noar ti set v0='L94C1LQE4B451UGJQE5EL5O97MCGR1X6' where id=1; -update noar tt set b1='S7H928OA4SD1J98GAB09ODZNVWP21MG3' where id=1; -update noar ti set b1='S7H928OA4SD1J98GAB09ODZNVWP21MG3' where id=1; -update noar tt set v0='DXKWWKDD8YJWUBB4HELE6' where id=1; -update noar ti set v0='DXKWWKDD8YJWUBB4HELE6' where id=1; -update noar tt set b2='H5B1LU9OXOCAO7TXN59GW4AZIU6H' where id=1; -update noar ti set b2='H5B1LU9OXOCAO7TXN59GW4AZIU6H' where id=1; -update noar tt set v0='D5PCCNL' where id=2; -update noar ti set v0='D5PCCNL' where id=2; -update noar tt set b0='WYIM5V289NC31' where id=2; -update noar ti set b0='WYIM5V289NC31' where id=2; -update noar tt set v0='LMSRY6C7PHO31F3OEQONH5KRHW18E' where id=2; -update noar ti set v0='LMSRY6C7PHO31F3OEQONH5KRHW18E' where id=2; -update noar tt set b1='P' where id=2; -update noar ti set b1='P' where id=2; -update noar tt set v0='VTZIN736HITAKZ3' where id=2; -update noar ti set v0='VTZIN736HITAKZ3' where id=2; -update noar tt set b2='BAYX7EZ' where id=2; -update noar ti set b2='BAYX7EZ' where id=2; -update noar tt set v0='9SSDMCAR' where id=3; -update noar ti set v0='9SSDMCAR' where id=3; -update noar tt set b0='7PPU991R8HZGOIX16UG9UMDW9TS9A' where id=3; -update noar ti set b0='7PPU991R8HZGOIX16UG9UMDW9TS9A' where id=3; -update noar tt set v0='QLJRG4AVBDXLFZW2QEJBEWRH1ESE89TV' where id=3; -update noar ti set v0='QLJRG4AVBDXLFZW2QEJBEWRH1ESE89TV' where id=3; -update noar tt set b1='H56B8I5MDLJLH0A15GPDB6F9P3KSJG' where id=3; -update noar ti set b1='H56B8I5MDLJLH0A15GPDB6F9P3KSJG' where id=3; -update noar tt set v0='KNX5OBC' where id=3; -update noar ti set v0='KNX5OBC' where id=3; -update noar tt set b2='9ZQN04AZKMH1VC3JQ' where id=3; -update noar ti set b2='9ZQN04AZKMH1VC3JQ' where id=3; -update noar tt set v0='ZYWZ1P4H' where id=4; -update noar ti set v0='ZYWZ1P4H' where id=4; -update noar tt set b0='42O0JE2XYTYVXN1XQCDZ9R7X' where id=4; -update noar ti set b0='42O0JE2XYTYVXN1XQCDZ9R7X' where id=4; -update noar tt set v0='V14XH3' where id=4; -update noar ti set v0='V14XH3' where id=4; -update noar tt set b1='CXSHF8XXSMQZR962FIKXW809ORTQQO' where id=4; -update noar ti set b1='CXSHF8XXSMQZR962FIKXW809ORTQQO' where id=4; -update noar tt set v0='O2CFTKK667I3M' where id=4; -update noar ti set v0='O2CFTKK667I3M' where id=4; -update noar tt set b2='KJCIZJ7MJP' where id=4; -update noar ti set b2='KJCIZJ7MJP' where id=4; -update noar tt set v0='NYBN7APWVT05L41SI20MM' where id=5; -update noar ti set v0='NYBN7APWVT05L41SI20MM' where id=5; -update noar tt set b0='2FGDIQYVYXOT10UKJOC9D3OCX7FPD8V' where id=5; -update noar ti set b0='2FGDIQYVYXOT10UKJOC9D3OCX7FPD8V' where id=5; -update noar tt set v0='DKP6E5FHHNZFBGA' where id=5; -update noar ti set v0='DKP6E5FHHNZFBGA' where id=5; -update noar tt set b1='VWNGRSAIZ16XJ2GJG2WIY3' where id=5; -update noar ti set b1='VWNGRSAIZ16XJ2GJG2WIY3' where id=5; -update noar tt set v0='HSPLRP64P0V914KX' where id=5; -update noar ti set v0='HSPLRP64P0V914KX' where id=5; -update noar tt set b2='LLM0UUTY6VZUNX' where id=5; -update noar ti set b2='LLM0UUTY6VZUNX' where id=5; -update noar tt set v0='BA6' where id=6; -update noar ti set v0='BA6' where id=6; -update noar tt set b0='OCIB31YBKYQPTC4SA' where id=6; -update noar ti set b0='OCIB31YBKYQPTC4SA' where id=6; -update noar tt set v0='XDPTKWIPLXHKHGOVHE' where id=6; -update noar ti set v0='XDPTKWIPLXHKHGOVHE' where id=6; -update noar tt set b1='WMRL7IPV738' where id=6; -update noar ti set b1='WMRL7IPV738' where id=6; -update noar tt set v0='CWOLZ063TQVSZU5' where id=6; -update noar ti set v0='CWOLZ063TQVSZU5' where id=6; -update noar tt set b2='6C3P7MLWKBMXBNO9Q5Z' where id=6; -update noar ti set b2='6C3P7MLWKBMXBNO9Q5Z' where id=6; -update noar tt set v0='0XGG4CIDTCAKX7KXKZ' where id=7; -update noar ti set v0='0XGG4CIDTCAKX7KXKZ' where id=7; -update noar tt set b0='6JEA2CL7YNEA51TDPLYM9A' where id=7; -update noar ti set b0='6JEA2CL7YNEA51TDPLYM9A' where id=7; -update noar tt set v0='C1B2Q7SBPDK79TFHKYT0C7796RZ8MT' where id=7; -update noar ti set v0='C1B2Q7SBPDK79TFHKYT0C7796RZ8MT' where id=7; -update noar tt set b1='WSTSRGR83WL37RVEKHYPSEF1T' where id=7; -update noar ti set b1='WSTSRGR83WL37RVEKHYPSEF1T' where id=7; -update noar tt set v0='JBRZ9RN8XTKWF' where id=7; -update noar ti set v0='JBRZ9RN8XTKWF' where id=7; -update noar tt set b2='B772S' where id=7; -update noar ti set b2='B772S' where id=7; -update noar tt set v0='EU2VFN23NFBFZK' where id=8; -update noar ti set v0='EU2VFN23NFBFZK' where id=8; -update noar tt set b0='XW0TN' where id=8; -update noar ti set b0='XW0TN' where id=8; -update noar tt set v0='PBHCYP2GSPS7WXZM' where id=8; -update noar ti set v0='PBHCYP2GSPS7WXZM' where id=8; -update noar tt set b1='YLIGT52NNNOOPPAYAECPR9ZQUF' where id=8; -update noar ti set b1='YLIGT52NNNOOPPAYAECPR9ZQUF' where id=8; -update noar tt set v0='1PIW2OPDTXCUSOPGML1' where id=8; -update noar ti set v0='1PIW2OPDTXCUSOPGML1' where id=8; -update noar tt set b2='BSV6Z1' where id=8; -update noar ti set b2='BSV6Z1' where id=8; -update noar tt set v0='CR9CDU75OBQUEA54YLTFMTEZI3I5QGH' where id=9; -update noar ti set v0='CR9CDU75OBQUEA54YLTFMTEZI3I5QGH' where id=9; -update noar tt set b0='UWXHKPP8HC5' where id=9; -update noar ti set b0='UWXHKPP8HC5' where id=9; -update noar tt set v0='WD4ODPZU7172RKH46LH355HF8FWSFN4' where id=9; -update noar ti set v0='WD4ODPZU7172RKH46LH355HF8FWSFN4' where id=9; -update noar tt set b1='A4DV' where id=9; -update noar ti set b1='A4DV' where id=9; -update noar tt set v0='FCKWPCYCVPUPL2ELJ3HU8HX78H8CZH' where id=9; -update noar ti set v0='FCKWPCYCVPUPL2ELJ3HU8HX78H8CZH' where id=9; -update noar tt set b2='1BNRD0KZESJ' where id=9; -update noar ti set b2='1BNRD0KZESJ' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 longblob not null, - b1 blob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='FDMBXMBZHLZ' where id=1; -update noar ti set v0='FDMBXMBZHLZ' where id=1; -update noar tt set b0='IN5' where id=1; -update noar ti set b0='IN5' where id=1; -update noar tt set v0='97RMBKCJ0E0TY7NDLPKCOTE' where id=1; -update noar ti set v0='97RMBKCJ0E0TY7NDLPKCOTE' where id=1; -update noar tt set b1='JC4ICJ1' where id=1; -update noar ti set b1='JC4ICJ1' where id=1; -update noar tt set v0='7LEW2A0GP7LRLR3YXZ7OZ' where id=1; -update noar ti set v0='7LEW2A0GP7LRLR3YXZ7OZ' where id=1; -update noar tt set b2='VV2PJISPDZPI9B1JTU8SYRHTLL3774H' where id=1; -update noar ti set b2='VV2PJISPDZPI9B1JTU8SYRHTLL3774H' where id=1; -update noar tt set v0='9JRHNMIZJYSJ60MNB1HU33KCZAT6' where id=2; -update noar ti set v0='9JRHNMIZJYSJ60MNB1HU33KCZAT6' where id=2; -update noar tt set b0='BDN' where id=2; -update noar ti set b0='BDN' where id=2; -update noar tt set v0='HFKTTJ2P56' where id=2; -update noar ti set v0='HFKTTJ2P56' where id=2; -update noar tt set b1='FQEKIJIAI21LFMVP4VTY9' where id=2; -update noar ti set b1='FQEKIJIAI21LFMVP4VTY9' where id=2; -update noar tt set v0='MTZNEEF9MS7S7' where id=2; -update noar ti set v0='MTZNEEF9MS7S7' where id=2; -update noar tt set b2='OVB2HNAM72VCVORWF' where id=2; -update noar ti set b2='OVB2HNAM72VCVORWF' where id=2; -update noar tt set v0='6YC3' where id=3; -update noar ti set v0='6YC3' where id=3; -update noar tt set b0='Y05G95FY4SE7W3QI6EAMKM6G2' where id=3; -update noar ti set b0='Y05G95FY4SE7W3QI6EAMKM6G2' where id=3; -update noar tt set v0='QIMI8819MFN6FS28I21749AQ5RMQ' where id=3; -update noar ti set v0='QIMI8819MFN6FS28I21749AQ5RMQ' where id=3; -update noar tt set b1='GWKEYWSRSR7Y121Y601DNZQA' where id=3; -update noar ti set b1='GWKEYWSRSR7Y121Y601DNZQA' where id=3; -update noar tt set v0='IVME1J7E4DUFGS8TG' where id=3; -update noar ti set v0='IVME1J7E4DUFGS8TG' where id=3; -update noar tt set b2='KDEIC' where id=3; -update noar ti set b2='KDEIC' where id=3; -update noar tt set v0='H71T' where id=4; -update noar ti set v0='H71T' where id=4; -update noar tt set b0='ULEC8DPS4XVME6L6AX32DY6U7IMJE2F' where id=4; -update noar ti set b0='ULEC8DPS4XVME6L6AX32DY6U7IMJE2F' where id=4; -update noar tt set v0='Y' where id=4; -update noar ti set v0='Y' where id=4; -update noar tt set b1='IBCR8AOPQTK4MFD6OESZ' where id=4; -update noar ti set b1='IBCR8AOPQTK4MFD6OESZ' where id=4; -update noar tt set v0='DTTSM' where id=4; -update noar ti set v0='DTTSM' where id=4; -update noar tt set b2='8JT634KDTKI1ISORGQAXIUS6F8P' where id=4; -update noar ti set b2='8JT634KDTKI1ISORGQAXIUS6F8P' where id=4; -update noar tt set v0='KC1' where id=5; -update noar ti set v0='KC1' where id=5; -update noar tt set b0='IA17F78LYRM838BIY' where id=5; -update noar ti set b0='IA17F78LYRM838BIY' where id=5; -update noar tt set v0='XEY9VFYIBQPCF880Y8DF28VAFMYS51R4' where id=5; -update noar ti set v0='XEY9VFYIBQPCF880Y8DF28VAFMYS51R4' where id=5; -update noar tt set b1='GAR51MMI6D80' where id=5; -update noar ti set b1='GAR51MMI6D80' where id=5; -update noar tt set v0='VVA' where id=5; -update noar ti set v0='VVA' where id=5; -update noar tt set b2='VX86DN8I6DGJWJ2Z4U6F3DMSS6H' where id=5; -update noar ti set b2='VX86DN8I6DGJWJ2Z4U6F3DMSS6H' where id=5; -update noar tt set v0='OF4V1Z3SZPSZ7NICXZE0' where id=6; -update noar ti set v0='OF4V1Z3SZPSZ7NICXZE0' where id=6; -update noar tt set b0='JC681GMG4LY9P2HMW7YJ9Z6Q9QRQF' where id=6; -update noar ti set b0='JC681GMG4LY9P2HMW7YJ9Z6Q9QRQF' where id=6; -update noar tt set v0='3SD1J1IYLFCDD71Z0NMAFXPOSI9YVBQ' where id=6; -update noar ti set v0='3SD1J1IYLFCDD71Z0NMAFXPOSI9YVBQ' where id=6; -update noar tt set b1='ZRNI6TP' where id=6; -update noar ti set b1='ZRNI6TP' where id=6; -update noar tt set v0='Z6R2ZQ014G7I34ZYI2L2W' where id=6; -update noar ti set v0='Z6R2ZQ014G7I34ZYI2L2W' where id=6; -update noar tt set b2='FU69KU5JEDVUP7YP9ECJ4' where id=6; -update noar ti set b2='FU69KU5JEDVUP7YP9ECJ4' where id=6; -update noar tt set v0='OHB6M2CYXQKA7RZ1O' where id=7; -update noar ti set v0='OHB6M2CYXQKA7RZ1O' where id=7; -update noar tt set b0='ZUTA7SWI861CQUECRE38D9A5OI1A' where id=7; -update noar ti set b0='ZUTA7SWI861CQUECRE38D9A5OI1A' where id=7; -update noar tt set v0='2O7SXIVCGXWWRQ12AJJ2P3A' where id=7; -update noar ti set v0='2O7SXIVCGXWWRQ12AJJ2P3A' where id=7; -update noar tt set b1='P261AQYE1NUS5138KQUU072ICEC6RDV' where id=7; -update noar ti set b1='P261AQYE1NUS5138KQUU072ICEC6RDV' where id=7; -update noar tt set v0='W7IY0NVWY784N52IZZ3G0CDFHZQNSWRQ' where id=7; -update noar ti set v0='W7IY0NVWY784N52IZZ3G0CDFHZQNSWRQ' where id=7; -update noar tt set b2='4D8ZX' where id=7; -update noar ti set b2='4D8ZX' where id=7; -update noar tt set v0='LSMG00U26MN2K38' where id=8; -update noar ti set v0='LSMG00U26MN2K38' where id=8; -update noar tt set b0='I0PCB4F1DXL10JI5R28ZIW9I5' where id=8; -update noar ti set b0='I0PCB4F1DXL10JI5R28ZIW9I5' where id=8; -update noar tt set v0='G8FY41LT922HZUT9YJMOFAA' where id=8; -update noar ti set v0='G8FY41LT922HZUT9YJMOFAA' where id=8; -update noar tt set b1='TG27BX3YPYVHVFHJGIIZ' where id=8; -update noar ti set b1='TG27BX3YPYVHVFHJGIIZ' where id=8; -update noar tt set v0='JEVXA' where id=8; -update noar ti set v0='JEVXA' where id=8; -update noar tt set b2='Z9E9YW6GF54ZP' where id=8; -update noar ti set b2='Z9E9YW6GF54ZP' where id=8; -update noar tt set v0='U7IMZ8AZ52GSJMM0IODKASSXNBRUFT' where id=9; -update noar ti set v0='U7IMZ8AZ52GSJMM0IODKASSXNBRUFT' where id=9; -update noar tt set b0='RZPCQSX9B446BLSDNHPH8220IQ4G' where id=9; -update noar ti set b0='RZPCQSX9B446BLSDNHPH8220IQ4G' where id=9; -update noar tt set v0='3A3NVWMQRGGHVL4' where id=9; -update noar ti set v0='3A3NVWMQRGGHVL4' where id=9; -update noar tt set b1='6RDM' where id=9; -update noar ti set b1='6RDM' where id=9; -update noar tt set v0='VW6DCIYMR3R8FV5BEQGF42PRDT' where id=9; -update noar ti set v0='VW6DCIYMR3R8FV5BEQGF42PRDT' where id=9; -update noar tt set b2='2ZTZ4' where id=9; -update noar ti set b2='2ZTZ4' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 longblob not null, - b1 blob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='NK' where id=1; -update noar ti set v0='NK' where id=1; -update noar tt set b0='5YBYPF5S5RU91AWR1R' where id=1; -update noar ti set b0='5YBYPF5S5RU91AWR1R' where id=1; -update noar tt set v0='0UIOY4JXKXHN020SY' where id=1; -update noar ti set v0='0UIOY4JXKXHN020SY' where id=1; -update noar tt set b1='JF4RHRR1W2YX3VZF5QZI1' where id=1; -update noar ti set b1='JF4RHRR1W2YX3VZF5QZI1' where id=1; -update noar tt set v0='ZJOF716TFIJNGO6F7BGP7L' where id=1; -update noar ti set v0='ZJOF716TFIJNGO6F7BGP7L' where id=1; -update noar tt set b2='U9IV' where id=1; -update noar ti set b2='U9IV' where id=1; -update noar tt set v0='WWRKNUY2TJ1GNC35VRZZ0WQ' where id=2; -update noar ti set v0='WWRKNUY2TJ1GNC35VRZZ0WQ' where id=2; -update noar tt set b0='1' where id=2; -update noar ti set b0='1' where id=2; -update noar tt set v0='ZW4615PKVK9' where id=2; -update noar ti set v0='ZW4615PKVK9' where id=2; -update noar tt set b1='WFG47HAX' where id=2; -update noar ti set b1='WFG47HAX' where id=2; -update noar tt set v0='FCYRXWWLLVS858VHO4IFLVO' where id=2; -update noar ti set v0='FCYRXWWLLVS858VHO4IFLVO' where id=2; -update noar tt set b2='QT73T90ZH' where id=2; -update noar ti set b2='QT73T90ZH' where id=2; -update noar tt set v0='WJXPCK19YF8H5BV' where id=3; -update noar ti set v0='WJXPCK19YF8H5BV' where id=3; -update noar tt set b0='PZZ5QG6P69GY9Y56Z5DQB5FC' where id=3; -update noar ti set b0='PZZ5QG6P69GY9Y56Z5DQB5FC' where id=3; -update noar tt set v0='F8KO' where id=3; -update noar ti set v0='F8KO' where id=3; -update noar tt set b1='ZJJPNE' where id=3; -update noar ti set b1='ZJJPNE' where id=3; -update noar tt set v0='M9H3' where id=3; -update noar ti set v0='M9H3' where id=3; -update noar tt set b2='O27R54EKB09GM' where id=3; -update noar ti set b2='O27R54EKB09GM' where id=3; -update noar tt set v0='XV4U9V6PMOO9' where id=4; -update noar ti set v0='XV4U9V6PMOO9' where id=4; -update noar tt set b0='H8XMELGU14DAMBOX3G4' where id=4; -update noar ti set b0='H8XMELGU14DAMBOX3G4' where id=4; -update noar tt set v0='I' where id=4; -update noar ti set v0='I' where id=4; -update noar tt set b1='LOS9JN6AELVWO89FTHMHDQL9QFVZSIA' where id=4; -update noar ti set b1='LOS9JN6AELVWO89FTHMHDQL9QFVZSIA' where id=4; -update noar tt set v0='Q1GYJGEH59S8X9PY8KDB7T' where id=4; -update noar ti set v0='Q1GYJGEH59S8X9PY8KDB7T' where id=4; -update noar tt set b2='55SXRGAVKNZMIAUS75EJQWE9W' where id=4; -update noar ti set b2='55SXRGAVKNZMIAUS75EJQWE9W' where id=4; -update noar tt set v0='NC9G3JGSOW3KL6AU' where id=5; -update noar ti set v0='NC9G3JGSOW3KL6AU' where id=5; -update noar tt set b0='HL7QSN59WQU37AI58S86' where id=5; -update noar ti set b0='HL7QSN59WQU37AI58S86' where id=5; -update noar tt set v0='6NJ' where id=5; -update noar ti set v0='6NJ' where id=5; -update noar tt set b1='E6ZAAGPE3Y0J098YV637ZX962I' where id=5; -update noar ti set b1='E6ZAAGPE3Y0J098YV637ZX962I' where id=5; -update noar tt set v0='ERRPK' where id=5; -update noar ti set v0='ERRPK' where id=5; -update noar tt set b2='69ZWHWL3PS6EQ4UZSB2BV' where id=5; -update noar ti set b2='69ZWHWL3PS6EQ4UZSB2BV' where id=5; -update noar tt set v0='5LQSB8OJ5KBEI9' where id=6; -update noar ti set v0='5LQSB8OJ5KBEI9' where id=6; -update noar tt set b0='KLBOV3YWPGV0AGROTP' where id=6; -update noar ti set b0='KLBOV3YWPGV0AGROTP' where id=6; -update noar tt set v0='7GCDMWD1RGSVDQKV74WLQ36PCOO339T' where id=6; -update noar ti set v0='7GCDMWD1RGSVDQKV74WLQ36PCOO339T' where id=6; -update noar tt set b1='SA7DBBEM03HV3OQF5XWZHKH' where id=6; -update noar ti set b1='SA7DBBEM03HV3OQF5XWZHKH' where id=6; -update noar tt set v0='N8F0O3II8007D1LAE8PPZY4RVXAM0B' where id=6; -update noar ti set v0='N8F0O3II8007D1LAE8PPZY4RVXAM0B' where id=6; -update noar tt set b2='G8TQ7LN4M7V6W9O' where id=6; -update noar ti set b2='G8TQ7LN4M7V6W9O' where id=6; -update noar tt set v0='G5KCL2WEH8T39S0SU5TRTUXQJQQT' where id=7; -update noar ti set v0='G5KCL2WEH8T39S0SU5TRTUXQJQQT' where id=7; -update noar tt set b0='96' where id=7; -update noar ti set b0='96' where id=7; -update noar tt set v0='ZRZJKUDBDF1ZJFRTF2' where id=7; -update noar ti set v0='ZRZJKUDBDF1ZJFRTF2' where id=7; -update noar tt set b1='2LX2DBGEMYYBT' where id=7; -update noar ti set b1='2LX2DBGEMYYBT' where id=7; -update noar tt set v0='QIY4' where id=7; -update noar ti set v0='QIY4' where id=7; -update noar tt set b2='VZ3HD5S57BR1X2CQ9SS2B' where id=7; -update noar ti set b2='VZ3HD5S57BR1X2CQ9SS2B' where id=7; -update noar tt set v0='AY9AXOSF5X2BXE0TXD4F057QT' where id=8; -update noar ti set v0='AY9AXOSF5X2BXE0TXD4F057QT' where id=8; -update noar tt set b0='TR9V7' where id=8; -update noar ti set b0='TR9V7' where id=8; -update noar tt set v0='FAMWRAC2NK5T2EFFLEHYR' where id=8; -update noar ti set v0='FAMWRAC2NK5T2EFFLEHYR' where id=8; -update noar tt set b1='X63PFWT8U4A3VEC04TL66JGAD4GGUDEC' where id=8; -update noar ti set b1='X63PFWT8U4A3VEC04TL66JGAD4GGUDEC' where id=8; -update noar tt set v0='D2W60R' where id=8; -update noar ti set v0='D2W60R' where id=8; -update noar tt set b2='XYX2WR768S0JNN8F3MRH8GO' where id=8; -update noar ti set b2='XYX2WR768S0JNN8F3MRH8GO' where id=8; -update noar tt set v0='V4ISLGA9Z6UP779' where id=9; -update noar ti set v0='V4ISLGA9Z6UP779' where id=9; -update noar tt set b0='M0QVZDDRXZ3T48NTT' where id=9; -update noar ti set b0='M0QVZDDRXZ3T48NTT' where id=9; -update noar tt set v0='YAPOI114LUC0TZ7FKFELBKX6' where id=9; -update noar ti set v0='YAPOI114LUC0TZ7FKFELBKX6' where id=9; -update noar tt set b1='7UA10WXQ0OWFNTX36' where id=9; -update noar ti set b1='7UA10WXQ0OWFNTX36' where id=9; -update noar tt set v0='H24BPAPLR1MW97BRDLZP812' where id=9; -update noar ti set v0='H24BPAPLR1MW97BRDLZP812' where id=9; -update noar tt set b2='0TG1KCTYG8' where id=9; -update noar ti set b2='0TG1KCTYG8' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 longblob null, - b1 blob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='XIMAZBOU80YUH2OQZHQI' where id=1; -update noar ti set v0='XIMAZBOU80YUH2OQZHQI' where id=1; -update noar tt set b0='9H9O410P4G4NA55' where id=1; -update noar ti set b0='9H9O410P4G4NA55' where id=1; -update noar tt set v0='7KAPI2OQG4FRSFSAOB' where id=1; -update noar ti set v0='7KAPI2OQG4FRSFSAOB' where id=1; -update noar tt set b1='HQUY8LR' where id=1; -update noar ti set b1='HQUY8LR' where id=1; -update noar tt set v0='4KC7Q6H15PRGL' where id=1; -update noar ti set v0='4KC7Q6H15PRGL' where id=1; -update noar tt set b2='ZYUXJLYG3LJQXD5QZ3DMEE' where id=1; -update noar ti set b2='ZYUXJLYG3LJQXD5QZ3DMEE' where id=1; -update noar tt set v0='MHWGZ0G3OV4IFHR4PO4F30FNAF' where id=2; -update noar ti set v0='MHWGZ0G3OV4IFHR4PO4F30FNAF' where id=2; -update noar tt set b0='8SI7VOKA' where id=2; -update noar ti set b0='8SI7VOKA' where id=2; -update noar tt set v0='CP8ALTG70GLXRQH1GDGCSCTY9QIN7ML' where id=2; -update noar ti set v0='CP8ALTG70GLXRQH1GDGCSCTY9QIN7ML' where id=2; -update noar tt set b1='6FG5C69J6AB6UE06GU' where id=2; -update noar ti set b1='6FG5C69J6AB6UE06GU' where id=2; -update noar tt set v0='6CQ25HT6JRHB4DA79BAG98IE9KDGPQWY' where id=2; -update noar ti set v0='6CQ25HT6JRHB4DA79BAG98IE9KDGPQWY' where id=2; -update noar tt set b2='YR54MZ7K9' where id=2; -update noar ti set b2='YR54MZ7K9' where id=2; -update noar tt set v0='EDSAD' where id=3; -update noar ti set v0='EDSAD' where id=3; -update noar tt set b0='1HPUTZ73TSO69K' where id=3; -update noar ti set b0='1HPUTZ73TSO69K' where id=3; -update noar tt set v0='QH' where id=3; -update noar ti set v0='QH' where id=3; -update noar tt set b1='HH' where id=3; -update noar ti set b1='HH' where id=3; -update noar tt set v0='WQ2GT9QWSRBPD' where id=3; -update noar ti set v0='WQ2GT9QWSRBPD' where id=3; -update noar tt set b2='BCZU1HB3A0GGW4' where id=3; -update noar ti set b2='BCZU1HB3A0GGW4' where id=3; -update noar tt set v0='MKBZTNJ5VMRWBDRVH8YV2JYB4YDGM4YD' where id=4; -update noar ti set v0='MKBZTNJ5VMRWBDRVH8YV2JYB4YDGM4YD' where id=4; -update noar tt set b0='DWDDVYJR89GF86EF5N1PSETNJDJNN21' where id=4; -update noar ti set b0='DWDDVYJR89GF86EF5N1PSETNJDJNN21' where id=4; -update noar tt set v0='DX5SEFWHLXTOX' where id=4; -update noar ti set v0='DX5SEFWHLXTOX' where id=4; -update noar tt set b1='6AS351N' where id=4; -update noar ti set b1='6AS351N' where id=4; -update noar tt set v0='2WQTUH4QIHG' where id=4; -update noar ti set v0='2WQTUH4QIHG' where id=4; -update noar tt set b2='IUXJNABYS' where id=4; -update noar ti set b2='IUXJNABYS' where id=4; -update noar tt set v0='5X19E59HMI457DP8WOX' where id=5; -update noar ti set v0='5X19E59HMI457DP8WOX' where id=5; -update noar tt set b0='IO' where id=5; -update noar ti set b0='IO' where id=5; -update noar tt set v0='EHF' where id=5; -update noar ti set v0='EHF' where id=5; -update noar tt set b1='IY2IOQURIW0FH2GFEPROFUQJ9T' where id=5; -update noar ti set b1='IY2IOQURIW0FH2GFEPROFUQJ9T' where id=5; -update noar tt set v0='G7ZE2BM21DTN3NJZUZI6YPY' where id=5; -update noar ti set v0='G7ZE2BM21DTN3NJZUZI6YPY' where id=5; -update noar tt set b2='V5TQKW64OIDC2P4' where id=5; -update noar ti set b2='V5TQKW64OIDC2P4' where id=5; -update noar tt set v0='CYIMYZUXG1VVN175LYOS5M3OE0IRJ' where id=6; -update noar ti set v0='CYIMYZUXG1VVN175LYOS5M3OE0IRJ' where id=6; -update noar tt set b0='X95W9JOO8BQDLNZM8SJ3XZTEA' where id=6; -update noar ti set b0='X95W9JOO8BQDLNZM8SJ3XZTEA' where id=6; -update noar tt set v0='08IVW52KJOA5L5XIHM76EW8' where id=6; -update noar ti set v0='08IVW52KJOA5L5XIHM76EW8' where id=6; -update noar tt set b1='DV2Y4ZTEF2KRF9U' where id=6; -update noar ti set b1='DV2Y4ZTEF2KRF9U' where id=6; -update noar tt set v0='PB0E3D062GLQN3ZVWPES729ZL' where id=6; -update noar ti set v0='PB0E3D062GLQN3ZVWPES729ZL' where id=6; -update noar tt set b2='P' where id=6; -update noar ti set b2='P' where id=6; -update noar tt set v0='LZJJZ6A1XDLZV6PMVFG11' where id=7; -update noar ti set v0='LZJJZ6A1XDLZV6PMVFG11' where id=7; -update noar tt set b0='SGVTT8HDR' where id=7; -update noar ti set b0='SGVTT8HDR' where id=7; -update noar tt set v0='J2HF74' where id=7; -update noar ti set v0='J2HF74' where id=7; -update noar tt set b1='P96QZZRO3OCK1D9ZP7B851' where id=7; -update noar ti set b1='P96QZZRO3OCK1D9ZP7B851' where id=7; -update noar tt set v0='RODE3UEF1RFZ9G6YLUV' where id=7; -update noar ti set v0='RODE3UEF1RFZ9G6YLUV' where id=7; -update noar tt set b2='DM0HICD3VL4F21XOUPW' where id=7; -update noar ti set b2='DM0HICD3VL4F21XOUPW' where id=7; -update noar tt set v0='AF' where id=8; -update noar ti set v0='AF' where id=8; -update noar tt set b0='W8FAMBTTVYKVIAYBDO1VEWR' where id=8; -update noar ti set b0='W8FAMBTTVYKVIAYBDO1VEWR' where id=8; -update noar tt set v0='OKML0GZO' where id=8; -update noar ti set v0='OKML0GZO' where id=8; -update noar tt set b1='24PJ60ILWQYYS1EG3TWDLHU' where id=8; -update noar ti set b1='24PJ60ILWQYYS1EG3TWDLHU' where id=8; -update noar tt set v0='JGKL5KU20NMIGSFKKROIJZIJ48KF5NTJ' where id=8; -update noar ti set v0='JGKL5KU20NMIGSFKKROIJZIJ48KF5NTJ' where id=8; -update noar tt set b2='7U4BC' where id=8; -update noar ti set b2='7U4BC' where id=8; -update noar tt set v0='N0G06HDVMA9HP1QPKH0XZ3KP4L' where id=9; -update noar ti set v0='N0G06HDVMA9HP1QPKH0XZ3KP4L' where id=9; -update noar tt set b0='LWFWA74BDCU' where id=9; -update noar ti set b0='LWFWA74BDCU' where id=9; -update noar tt set v0='0JL25MS' where id=9; -update noar ti set v0='0JL25MS' where id=9; -update noar tt set b1='TCJB63E' where id=9; -update noar ti set b1='TCJB63E' where id=9; -update noar tt set v0='GBSUW1X0FV0750OADI9SEBB4ENVTGG' where id=9; -update noar ti set v0='GBSUW1X0FV0750OADI9SEBB4ENVTGG' where id=9; -update noar tt set b2='KY2FK8H3SMZQBQM06FIHOEK6D8Y8' where id=9; -update noar ti set b2='KY2FK8H3SMZQBQM06FIHOEK6D8Y8' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 longblob null, - b1 blob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='IUWBC9Y6QMDXDVYR' where id=1; -update noar ti set v0='IUWBC9Y6QMDXDVYR' where id=1; -update noar tt set b0='3L4O1W6L' where id=1; -update noar ti set b0='3L4O1W6L' where id=1; -update noar tt set v0='L35O' where id=1; -update noar ti set v0='L35O' where id=1; -update noar tt set b1='SGA' where id=1; -update noar ti set b1='SGA' where id=1; -update noar tt set v0='6PJEW3' where id=1; -update noar ti set v0='6PJEW3' where id=1; -update noar tt set b2='ZKJ3' where id=1; -update noar ti set b2='ZKJ3' where id=1; -update noar tt set v0='NEK' where id=2; -update noar ti set v0='NEK' where id=2; -update noar tt set b0='TEYF3TK8AOTDJQ5OE90F57E3H' where id=2; -update noar ti set b0='TEYF3TK8AOTDJQ5OE90F57E3H' where id=2; -update noar tt set v0='8QGW2AB4WQVGWT46YR2YU9R' where id=2; -update noar ti set v0='8QGW2AB4WQVGWT46YR2YU9R' where id=2; -update noar tt set b1='V95RPGER5UOLZWYZTIXQSBS' where id=2; -update noar ti set b1='V95RPGER5UOLZWYZTIXQSBS' where id=2; -update noar tt set v0='T1JE7M' where id=2; -update noar ti set v0='T1JE7M' where id=2; -update noar tt set b2='5TWLNAMCU9H4O9BS40G0L1OB6FB' where id=2; -update noar ti set b2='5TWLNAMCU9H4O9BS40G0L1OB6FB' where id=2; -update noar tt set v0='4JWGCZZW4RNO15YF9CB' where id=3; -update noar ti set v0='4JWGCZZW4RNO15YF9CB' where id=3; -update noar tt set b0='ZY4NSRK9OOZ' where id=3; -update noar ti set b0='ZY4NSRK9OOZ' where id=3; -update noar tt set v0='KZXGF4CQ5TZG7F7NJKO' where id=3; -update noar ti set v0='KZXGF4CQ5TZG7F7NJKO' where id=3; -update noar tt set b1='RSP' where id=3; -update noar ti set b1='RSP' where id=3; -update noar tt set v0='T1ONZ' where id=3; -update noar ti set v0='T1ONZ' where id=3; -update noar tt set b2='28UPM1PV25C1HHNFGP1' where id=3; -update noar ti set b2='28UPM1PV25C1HHNFGP1' where id=3; -update noar tt set v0='R4YKZQORXOYQTS05PWQ' where id=4; -update noar ti set v0='R4YKZQORXOYQTS05PWQ' where id=4; -update noar tt set b0='1R0U' where id=4; -update noar ti set b0='1R0U' where id=4; -update noar tt set v0='YL9FX1GM6XJHJE' where id=4; -update noar ti set v0='YL9FX1GM6XJHJE' where id=4; -update noar tt set b1='FFBSOMJDGFKBV' where id=4; -update noar ti set b1='FFBSOMJDGFKBV' where id=4; -update noar tt set v0='I1H3SFETRWC' where id=4; -update noar ti set v0='I1H3SFETRWC' where id=4; -update noar tt set b2='3YOVBYBZLFTZT5EXVANJ9DN' where id=4; -update noar ti set b2='3YOVBYBZLFTZT5EXVANJ9DN' where id=4; -update noar tt set v0='V' where id=5; -update noar ti set v0='V' where id=5; -update noar tt set b0='ZGWR5KP2LXFIR01TXD5ZPY5' where id=5; -update noar ti set b0='ZGWR5KP2LXFIR01TXD5ZPY5' where id=5; -update noar tt set v0='6SWK1W9S3BK5CZF8DSPNCAM' where id=5; -update noar ti set v0='6SWK1W9S3BK5CZF8DSPNCAM' where id=5; -update noar tt set b1='IXAVX3LYSEV79VRV6MI8FLP' where id=5; -update noar ti set b1='IXAVX3LYSEV79VRV6MI8FLP' where id=5; -update noar tt set v0='21VSAEYY0W' where id=5; -update noar ti set v0='21VSAEYY0W' where id=5; -update noar tt set b2='B6RIHC5GGN0HP1QSLNLH2EJKZR' where id=5; -update noar ti set b2='B6RIHC5GGN0HP1QSLNLH2EJKZR' where id=5; -update noar tt set v0='ISBEVIZ2SMEOSTE67TJ' where id=6; -update noar ti set v0='ISBEVIZ2SMEOSTE67TJ' where id=6; -update noar tt set b0='LXGS6Z82XVIWFJE3JNQD7' where id=6; -update noar ti set b0='LXGS6Z82XVIWFJE3JNQD7' where id=6; -update noar tt set v0='15T30XA0EHLM9Z1BJIVX34NQHCU' where id=6; -update noar ti set v0='15T30XA0EHLM9Z1BJIVX34NQHCU' where id=6; -update noar tt set b1='LNXJQKDJ3X6337S2' where id=6; -update noar ti set b1='LNXJQKDJ3X6337S2' where id=6; -update noar tt set v0='XUHU88Y4J29GADBMDRE' where id=6; -update noar ti set v0='XUHU88Y4J29GADBMDRE' where id=6; -update noar tt set b2='PR7U8X' where id=6; -update noar ti set b2='PR7U8X' where id=6; -update noar tt set v0='B6TBGDHSYG0CCTR' where id=7; -update noar ti set v0='B6TBGDHSYG0CCTR' where id=7; -update noar tt set b0='OHCBQU0FPZNLISDBAXV9VLR6U8P' where id=7; -update noar ti set b0='OHCBQU0FPZNLISDBAXV9VLR6U8P' where id=7; -update noar tt set v0='YU5' where id=7; -update noar ti set v0='YU5' where id=7; -update noar tt set b1='BGMBXSJQMPEFIP6E77KS9N3A37JMJI3' where id=7; -update noar ti set b1='BGMBXSJQMPEFIP6E77KS9N3A37JMJI3' where id=7; -update noar tt set v0='UUMNZ9ZJ23GRRC3PBDXRK5YHEZV' where id=7; -update noar ti set v0='UUMNZ9ZJ23GRRC3PBDXRK5YHEZV' where id=7; -update noar tt set b2='H3X9Q73J53CFAAO45M4A0URJMEPI' where id=7; -update noar ti set b2='H3X9Q73J53CFAAO45M4A0URJMEPI' where id=7; -update noar tt set v0='1' where id=8; -update noar ti set v0='1' where id=8; -update noar tt set b0='V62TI7A1RY3X2GPVGHG9WVHQ5NKUPJ' where id=8; -update noar ti set b0='V62TI7A1RY3X2GPVGHG9WVHQ5NKUPJ' where id=8; -update noar tt set v0='46K37GU404HS0B0U8BLJ445JYNGTW5OF' where id=8; -update noar ti set v0='46K37GU404HS0B0U8BLJ445JYNGTW5OF' where id=8; -update noar tt set b1='A8LJKWUQNRXUQ4J40859X4KH85IT' where id=8; -update noar ti set b1='A8LJKWUQNRXUQ4J40859X4KH85IT' where id=8; -update noar tt set v0='P3CEKKJKZBMQ3OSEE1I' where id=8; -update noar ti set v0='P3CEKKJKZBMQ3OSEE1I' where id=8; -update noar tt set b2='HNCO4R7' where id=8; -update noar ti set b2='HNCO4R7' where id=8; -update noar tt set v0='6SXV0S61XDZJYSZ8NN4RY7D2O76BYY' where id=9; -update noar ti set v0='6SXV0S61XDZJYSZ8NN4RY7D2O76BYY' where id=9; -update noar tt set b0='4D7JHY' where id=9; -update noar ti set b0='4D7JHY' where id=9; -update noar tt set v0='0VOHP79' where id=9; -update noar ti set v0='0VOHP79' where id=9; -update noar tt set b1='1JBM735T9ORWVC5A6BIZWR2Y' where id=9; -update noar ti set b1='1JBM735T9ORWVC5A6BIZWR2Y' where id=9; -update noar tt set v0='GM8IKQPIWI2J8MDTDJVE' where id=9; -update noar ti set v0='GM8IKQPIWI2J8MDTDJVE' where id=9; -update noar tt set b2='ZPM6S7XTS3' where id=9; -update noar ti set b2='ZPM6S7XTS3' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 longblob not null, - b1 blob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='1AF01X3WS227' where id=1; -update noar ti set v0='1AF01X3WS227' where id=1; -update noar tt set b0='1R49AHBWT09IF5HLF5R6KAV' where id=1; -update noar ti set b0='1R49AHBWT09IF5HLF5R6KAV' where id=1; -update noar tt set v0='P0HDP2' where id=1; -update noar ti set v0='P0HDP2' where id=1; -update noar tt set b1='V4ZOBTMDUQSJUIMTX6OGRVV73PK0COX' where id=1; -update noar ti set b1='V4ZOBTMDUQSJUIMTX6OGRVV73PK0COX' where id=1; -update noar tt set v0='BCG9Y1I8X8VGOCNQMH5HH' where id=1; -update noar ti set v0='BCG9Y1I8X8VGOCNQMH5HH' where id=1; -update noar tt set b2='BAL8' where id=1; -update noar ti set b2='BAL8' where id=1; -update noar tt set v0='W6KIP' where id=2; -update noar ti set v0='W6KIP' where id=2; -update noar tt set b0='A1LN2XZW6' where id=2; -update noar ti set b0='A1LN2XZW6' where id=2; -update noar tt set v0='T8OWOMFO8ER645CKXBR4N5J4' where id=2; -update noar ti set v0='T8OWOMFO8ER645CKXBR4N5J4' where id=2; -update noar tt set b1='M65A8F75ZLFATNCGIEJ9BKS' where id=2; -update noar ti set b1='M65A8F75ZLFATNCGIEJ9BKS' where id=2; -update noar tt set v0='2WKZN7' where id=2; -update noar ti set v0='2WKZN7' where id=2; -update noar tt set b2='X2F' where id=2; -update noar ti set b2='X2F' where id=2; -update noar tt set v0='9P13EK0CEVA6SHZQHKV3DN7' where id=3; -update noar ti set v0='9P13EK0CEVA6SHZQHKV3DN7' where id=3; -update noar tt set b0='9W6E78T54GKTFAALZXPH79ONCOYJ' where id=3; -update noar ti set b0='9W6E78T54GKTFAALZXPH79ONCOYJ' where id=3; -update noar tt set v0='LSL8W0AC' where id=3; -update noar ti set v0='LSL8W0AC' where id=3; -update noar tt set b1='XSNNK80QZV5MNFZ2E6623QS' where id=3; -update noar ti set b1='XSNNK80QZV5MNFZ2E6623QS' where id=3; -update noar tt set v0='NHGCAVU9RIWUMN3YC7LQVG' where id=3; -update noar ti set v0='NHGCAVU9RIWUMN3YC7LQVG' where id=3; -update noar tt set b2='L' where id=3; -update noar ti set b2='L' where id=3; -update noar tt set v0='INJGNJQEBMWEIPWVJU0CE8R9B5HXQ' where id=4; -update noar ti set v0='INJGNJQEBMWEIPWVJU0CE8R9B5HXQ' where id=4; -update noar tt set b0='8GI41B8OW7V' where id=4; -update noar ti set b0='8GI41B8OW7V' where id=4; -update noar tt set v0='HHE80S' where id=4; -update noar ti set v0='HHE80S' where id=4; -update noar tt set b1='S' where id=4; -update noar ti set b1='S' where id=4; -update noar tt set v0='IXT6ZVZDZMK0T85YJN45MEG057' where id=4; -update noar ti set v0='IXT6ZVZDZMK0T85YJN45MEG057' where id=4; -update noar tt set b2='R1K2O4FKFMPRJXD6PZCW' where id=4; -update noar ti set b2='R1K2O4FKFMPRJXD6PZCW' where id=4; -update noar tt set v0='8F37QD6Y' where id=5; -update noar ti set v0='8F37QD6Y' where id=5; -update noar tt set b0='XERSA78' where id=5; -update noar ti set b0='XERSA78' where id=5; -update noar tt set v0='J2I1EOVVPK6F7R08H3RVMJ' where id=5; -update noar ti set v0='J2I1EOVVPK6F7R08H3RVMJ' where id=5; -update noar tt set b1='0TJCITGVWSB' where id=5; -update noar ti set b1='0TJCITGVWSB' where id=5; -update noar tt set v0='74FN6VF072SQ2WCCWSLG3PD' where id=5; -update noar ti set v0='74FN6VF072SQ2WCCWSLG3PD' where id=5; -update noar tt set b2='0IKG' where id=5; -update noar ti set b2='0IKG' where id=5; -update noar tt set v0='VA09DG6FN2X61PWLR684YT120V' where id=6; -update noar ti set v0='VA09DG6FN2X61PWLR684YT120V' where id=6; -update noar tt set b0='O10HRJ7R0HXSHN2J7V5' where id=6; -update noar ti set b0='O10HRJ7R0HXSHN2J7V5' where id=6; -update noar tt set v0='4ZRP8BKUT3Q1QEBG' where id=6; -update noar ti set v0='4ZRP8BKUT3Q1QEBG' where id=6; -update noar tt set b1='NLJHW2' where id=6; -update noar ti set b1='NLJHW2' where id=6; -update noar tt set v0='YOCXOS72XX4HO8K7G39UKCE9O' where id=6; -update noar ti set v0='YOCXOS72XX4HO8K7G39UKCE9O' where id=6; -update noar tt set b2='GBV9V4LQSJZ09UMHMEKGLSRJN' where id=6; -update noar ti set b2='GBV9V4LQSJZ09UMHMEKGLSRJN' where id=6; -update noar tt set v0='EVIU5FYHPGJH8WLTPNVFFE1PV' where id=7; -update noar ti set v0='EVIU5FYHPGJH8WLTPNVFFE1PV' where id=7; -update noar tt set b0='LTK177PKH35YPZ9A91' where id=7; -update noar ti set b0='LTK177PKH35YPZ9A91' where id=7; -update noar tt set v0='JMBFPP8Z554VG2VSYENDG' where id=7; -update noar ti set v0='JMBFPP8Z554VG2VSYENDG' where id=7; -update noar tt set b1='HR7JF0B25' where id=7; -update noar ti set b1='HR7JF0B25' where id=7; -update noar tt set v0='DPWFLMRYQHCSD6HDA1IG1UT6SVHU75' where id=7; -update noar ti set v0='DPWFLMRYQHCSD6HDA1IG1UT6SVHU75' where id=7; -update noar tt set b2='VHQ8IUZPUCPHA' where id=7; -update noar ti set b2='VHQ8IUZPUCPHA' where id=7; -update noar tt set v0='6O29JV8UO5HKA6VDNZ1V6Z36X' where id=8; -update noar ti set v0='6O29JV8UO5HKA6VDNZ1V6Z36X' where id=8; -update noar tt set b0='H5LETTK4PYX' where id=8; -update noar ti set b0='H5LETTK4PYX' where id=8; -update noar tt set v0='VYTJ3790LQU8NQYR' where id=8; -update noar ti set v0='VYTJ3790LQU8NQYR' where id=8; -update noar tt set b1='MVSR5HHA4C5AXWQS5GENVVV1B62BWN' where id=8; -update noar ti set b1='MVSR5HHA4C5AXWQS5GENVVV1B62BWN' where id=8; -update noar tt set v0='NKPACDJB' where id=8; -update noar ti set v0='NKPACDJB' where id=8; -update noar tt set b2='YILN1WQ' where id=8; -update noar ti set b2='YILN1WQ' where id=8; -update noar tt set v0='8IJ2AEJQSU1GYNXR9OYSS68X0J1NF' where id=9; -update noar ti set v0='8IJ2AEJQSU1GYNXR9OYSS68X0J1NF' where id=9; -update noar tt set b0='C0YEYJD9CW3CG1UX1EKO470' where id=9; -update noar ti set b0='C0YEYJD9CW3CG1UX1EKO470' where id=9; -update noar tt set v0='7B6SBJ87W5' where id=9; -update noar ti set v0='7B6SBJ87W5' where id=9; -update noar tt set b1='B8FKWM' where id=9; -update noar ti set b1='B8FKWM' where id=9; -update noar tt set v0='V2H3LBB1JLD10C1XPA6T4DHS40NA' where id=9; -update noar ti set v0='V2H3LBB1JLD10C1XPA6T4DHS40NA' where id=9; -update noar tt set b2='G8KDCJRBHAP0AY' where id=9; -update noar ti set b2='G8KDCJRBHAP0AY' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 longblob not null, - b1 blob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='9HIHW2P64KCSIM0' where id=1; -update noar ti set v0='9HIHW2P64KCSIM0' where id=1; -update noar tt set b0='ZGOYY60STTLGSKT9QSZLQ016' where id=1; -update noar ti set b0='ZGOYY60STTLGSKT9QSZLQ016' where id=1; -update noar tt set v0='HSQZ4J2VKO4U' where id=1; -update noar ti set v0='HSQZ4J2VKO4U' where id=1; -update noar tt set b1='O9I191I9DGIXABA' where id=1; -update noar ti set b1='O9I191I9DGIXABA' where id=1; -update noar tt set v0='YTA5XSHN31AE8KDC' where id=1; -update noar ti set v0='YTA5XSHN31AE8KDC' where id=1; -update noar tt set b2='F' where id=1; -update noar ti set b2='F' where id=1; -update noar tt set v0='A3WT1XH4' where id=2; -update noar ti set v0='A3WT1XH4' where id=2; -update noar tt set b0='TOPUAFDME79J8UHW8L9' where id=2; -update noar ti set b0='TOPUAFDME79J8UHW8L9' where id=2; -update noar tt set v0='GEY' where id=2; -update noar ti set v0='GEY' where id=2; -update noar tt set b1='EHK29M241DFY8ZGHCJ4' where id=2; -update noar ti set b1='EHK29M241DFY8ZGHCJ4' where id=2; -update noar tt set v0='91MC94IR9C1JWCQ' where id=2; -update noar ti set v0='91MC94IR9C1JWCQ' where id=2; -update noar tt set b2='99Z186GL74WPV9FFZGF1' where id=2; -update noar ti set b2='99Z186GL74WPV9FFZGF1' where id=2; -update noar tt set v0='I02RJX4AV9XPDDPEGL3Q24' where id=3; -update noar ti set v0='I02RJX4AV9XPDDPEGL3Q24' where id=3; -update noar tt set b0='064766' where id=3; -update noar ti set b0='064766' where id=3; -update noar tt set v0='KO4M0BU57' where id=3; -update noar ti set v0='KO4M0BU57' where id=3; -update noar tt set b1='D7MHSNW' where id=3; -update noar ti set b1='D7MHSNW' where id=3; -update noar tt set v0='5FXAKS9OEW' where id=3; -update noar ti set v0='5FXAKS9OEW' where id=3; -update noar tt set b2='9RXKSRFLL6DK' where id=3; -update noar ti set b2='9RXKSRFLL6DK' where id=3; -update noar tt set v0='5IJ1250RDGKZ8OR' where id=4; -update noar ti set v0='5IJ1250RDGKZ8OR' where id=4; -update noar tt set b0='X6' where id=4; -update noar ti set b0='X6' where id=4; -update noar tt set v0='ABQ28OV1794IZIE8GRIE74SBJP5' where id=4; -update noar ti set v0='ABQ28OV1794IZIE8GRIE74SBJP5' where id=4; -update noar tt set b1='D6FHCAV3A7QJ' where id=4; -update noar ti set b1='D6FHCAV3A7QJ' where id=4; -update noar tt set v0='RVYUOMOXHG3G' where id=4; -update noar ti set v0='RVYUOMOXHG3G' where id=4; -update noar tt set b2='MFJ0N3SHFY' where id=4; -update noar ti set b2='MFJ0N3SHFY' where id=4; -update noar tt set v0='5E9XK8AZJR2QHDW2M217K9UDW4YIMZ93' where id=5; -update noar ti set v0='5E9XK8AZJR2QHDW2M217K9UDW4YIMZ93' where id=5; -update noar tt set b0='3MM1N38' where id=5; -update noar ti set b0='3MM1N38' where id=5; -update noar tt set v0='YIG77DRP1NT7MA70YZNZ' where id=5; -update noar ti set v0='YIG77DRP1NT7MA70YZNZ' where id=5; -update noar tt set b1='HM5VT0VIFMX5' where id=5; -update noar ti set b1='HM5VT0VIFMX5' where id=5; -update noar tt set v0='E44S3M2D7' where id=5; -update noar ti set v0='E44S3M2D7' where id=5; -update noar tt set b2='9KGB9YS547AVWSIW07JVLMT' where id=5; -update noar ti set b2='9KGB9YS547AVWSIW07JVLMT' where id=5; -update noar tt set v0='TFLIRGQORV6S6HMK' where id=6; -update noar ti set v0='TFLIRGQORV6S6HMK' where id=6; -update noar tt set b0='JH0' where id=6; -update noar ti set b0='JH0' where id=6; -update noar tt set v0='SF3TUCQR1JTGU0LXWE1R0DNRHOGTPP8' where id=6; -update noar ti set v0='SF3TUCQR1JTGU0LXWE1R0DNRHOGTPP8' where id=6; -update noar tt set b1='WLUXRR3FE969X574' where id=6; -update noar ti set b1='WLUXRR3FE969X574' where id=6; -update noar tt set v0='AO2' where id=6; -update noar ti set v0='AO2' where id=6; -update noar tt set b2='FK' where id=6; -update noar ti set b2='FK' where id=6; -update noar tt set v0='1O0X7DOSU3CWQXWP5Y74OK7E9MQX' where id=7; -update noar ti set v0='1O0X7DOSU3CWQXWP5Y74OK7E9MQX' where id=7; -update noar tt set b0='RGV6MBE' where id=7; -update noar ti set b0='RGV6MBE' where id=7; -update noar tt set v0='51ZZZA9JI87KLBVKVLQVOQZV9LL8XX62' where id=7; -update noar ti set v0='51ZZZA9JI87KLBVKVLQVOQZV9LL8XX62' where id=7; -update noar tt set b1='LME1J16K3DC0VTDCXM44TW' where id=7; -update noar ti set b1='LME1J16K3DC0VTDCXM44TW' where id=7; -update noar tt set v0='6J4B6ZITB5N6A8YJCJQ1XJPMRSHLI' where id=7; -update noar ti set v0='6J4B6ZITB5N6A8YJCJQ1XJPMRSHLI' where id=7; -update noar tt set b2='GYSIE47ALW8' where id=7; -update noar ti set b2='GYSIE47ALW8' where id=7; -update noar tt set v0='KE' where id=8; -update noar ti set v0='KE' where id=8; -update noar tt set b0='BB8XO8EUNS6GX675FX9GVI' where id=8; -update noar ti set b0='BB8XO8EUNS6GX675FX9GVI' where id=8; -update noar tt set v0='7VZ05FTTP6HMT5BLGOP7LYNXUN4' where id=8; -update noar ti set v0='7VZ05FTTP6HMT5BLGOP7LYNXUN4' where id=8; -update noar tt set b1='K' where id=8; -update noar ti set b1='K' where id=8; -update noar tt set v0='TSFBMY5HR2YHSDT6E559F08J' where id=8; -update noar ti set v0='TSFBMY5HR2YHSDT6E559F08J' where id=8; -update noar tt set b2='HGIQ8168E62PTPD5BFMAIEW' where id=8; -update noar ti set b2='HGIQ8168E62PTPD5BFMAIEW' where id=8; -update noar tt set v0='42XP' where id=9; -update noar ti set v0='42XP' where id=9; -update noar tt set b0='NO4TPSLA6LT' where id=9; -update noar ti set b0='NO4TPSLA6LT' where id=9; -update noar tt set v0='OVJ9MSPPOOA84LA8NUG' where id=9; -update noar ti set v0='OVJ9MSPPOOA84LA8NUG' where id=9; -update noar tt set b1='TE4U' where id=9; -update noar ti set b1='TE4U' where id=9; -update noar tt set v0='PUUGG3UFRZGZ29HMYYY0S7KCQP8LBQ' where id=9; -update noar ti set v0='PUUGG3UFRZGZ29HMYYY0S7KCQP8LBQ' where id=9; -update noar tt set b2='4B5SPQICKSHW93TKJKE8IBB8MJB2YI2S' where id=9; -update noar ti set b2='4B5SPQICKSHW93TKJKE8IBB8MJB2YI2S' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 longblob null, - b1 blob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='GF17L1U1SX3LZMBL72' where id=1; -update noar ti set v0='GF17L1U1SX3LZMBL72' where id=1; -update noar tt set b0='BIXPE4LKQ735CMRFJ8CKEHY0CA8JQ' where id=1; -update noar ti set b0='BIXPE4LKQ735CMRFJ8CKEHY0CA8JQ' where id=1; -update noar tt set v0='VWW0Q' where id=1; -update noar ti set v0='VWW0Q' where id=1; -update noar tt set b1='QHEY4IW47M65KY9' where id=1; -update noar ti set b1='QHEY4IW47M65KY9' where id=1; -update noar tt set v0='2DYGP7345S1BKLKSZRGR9CLCA1DOZE' where id=1; -update noar ti set v0='2DYGP7345S1BKLKSZRGR9CLCA1DOZE' where id=1; -update noar tt set b2='WH5G4TLGEOBCK3X6BZ3CHTFJEZUSHHW' where id=1; -update noar ti set b2='WH5G4TLGEOBCK3X6BZ3CHTFJEZUSHHW' where id=1; -update noar tt set v0='RRGD' where id=2; -update noar ti set v0='RRGD' where id=2; -update noar tt set b0='IM' where id=2; -update noar ti set b0='IM' where id=2; -update noar tt set v0='Y6S1111MTK1NDOZ33RV3OEA1A9' where id=2; -update noar ti set v0='Y6S1111MTK1NDOZ33RV3OEA1A9' where id=2; -update noar tt set b1='T' where id=2; -update noar ti set b1='T' where id=2; -update noar tt set v0='5E3YSZ5D7ZKM2Y8HBTWN20P1F235' where id=2; -update noar ti set v0='5E3YSZ5D7ZKM2Y8HBTWN20P1F235' where id=2; -update noar tt set b2='EAH1Z1NKJFFOSGL4RYQRNARL' where id=2; -update noar ti set b2='EAH1Z1NKJFFOSGL4RYQRNARL' where id=2; -update noar tt set v0='21OE8CJNWI5' where id=3; -update noar ti set v0='21OE8CJNWI5' where id=3; -update noar tt set b0='PDOMXFN73FCT' where id=3; -update noar ti set b0='PDOMXFN73FCT' where id=3; -update noar tt set v0='NZ5TXD3AQDQ' where id=3; -update noar ti set v0='NZ5TXD3AQDQ' where id=3; -update noar tt set b1='ZO0PYX3IF3Q4FP23Z7LGKWNOJNZ3UP8' where id=3; -update noar ti set b1='ZO0PYX3IF3Q4FP23Z7LGKWNOJNZ3UP8' where id=3; -update noar tt set v0='ORJIBHYU9Y238PAKK7C' where id=3; -update noar ti set v0='ORJIBHYU9Y238PAKK7C' where id=3; -update noar tt set b2='H5RD5YWAS8' where id=3; -update noar ti set b2='H5RD5YWAS8' where id=3; -update noar tt set v0='Q19GASNYG9JIAP46IJRBAL1XCW7' where id=4; -update noar ti set v0='Q19GASNYG9JIAP46IJRBAL1XCW7' where id=4; -update noar tt set b0='TWBIUI2Q5BO3LD3RIQC' where id=4; -update noar ti set b0='TWBIUI2Q5BO3LD3RIQC' where id=4; -update noar tt set v0='1SFP' where id=4; -update noar ti set v0='1SFP' where id=4; -update noar tt set b1='X86J3UPKVPZ0PE4W' where id=4; -update noar ti set b1='X86J3UPKVPZ0PE4W' where id=4; -update noar tt set v0='WA890F8YZF968HN' where id=4; -update noar ti set v0='WA890F8YZF968HN' where id=4; -update noar tt set b2='EWS07I9' where id=4; -update noar ti set b2='EWS07I9' where id=4; -update noar tt set v0='169TT2I3RUI7GDBSQT8F48CBI' where id=5; -update noar ti set v0='169TT2I3RUI7GDBSQT8F48CBI' where id=5; -update noar tt set b0='MHWTYHVC8E88QYOY6Z' where id=5; -update noar ti set b0='MHWTYHVC8E88QYOY6Z' where id=5; -update noar tt set v0='V8X1VR71VBZL4U5OGQR6WFHHURAAUF' where id=5; -update noar ti set v0='V8X1VR71VBZL4U5OGQR6WFHHURAAUF' where id=5; -update noar tt set b1='6I3T' where id=5; -update noar ti set b1='6I3T' where id=5; -update noar tt set v0='XN' where id=5; -update noar ti set v0='XN' where id=5; -update noar tt set b2='PZ3NZBKIR0PCSWZWC3VLXU3PTO5AUP' where id=5; -update noar ti set b2='PZ3NZBKIR0PCSWZWC3VLXU3PTO5AUP' where id=5; -update noar tt set v0='DJ2OR7DROVN' where id=6; -update noar ti set v0='DJ2OR7DROVN' where id=6; -update noar tt set b0='I6430XDDKVG627T2CUIX' where id=6; -update noar ti set b0='I6430XDDKVG627T2CUIX' where id=6; -update noar tt set v0='KAAEGP' where id=6; -update noar ti set v0='KAAEGP' where id=6; -update noar tt set b1='5H' where id=6; -update noar ti set b1='5H' where id=6; -update noar tt set v0='VQ14VVOP7U' where id=6; -update noar ti set v0='VQ14VVOP7U' where id=6; -update noar tt set b2='68BW9OMT2WFVC8U0PE77IQCLTSEK5D' where id=6; -update noar ti set b2='68BW9OMT2WFVC8U0PE77IQCLTSEK5D' where id=6; -update noar tt set v0='QMDIF8Z144FMY1J4OUBYBJOEY0ZOY0' where id=7; -update noar ti set v0='QMDIF8Z144FMY1J4OUBYBJOEY0ZOY0' where id=7; -update noar tt set b0='HVW5I3S' where id=7; -update noar ti set b0='HVW5I3S' where id=7; -update noar tt set v0='K9DYRGMR' where id=7; -update noar ti set v0='K9DYRGMR' where id=7; -update noar tt set b1='KP8UAE2WQKDR46SVQ4AVB9O9LXWZSVTB' where id=7; -update noar ti set b1='KP8UAE2WQKDR46SVQ4AVB9O9LXWZSVTB' where id=7; -update noar tt set v0='X' where id=7; -update noar ti set v0='X' where id=7; -update noar tt set b2='OBI72B7V81ADVKN26LVJKWJ6' where id=7; -update noar ti set b2='OBI72B7V81ADVKN26LVJKWJ6' where id=7; -update noar tt set v0='ZDXIBY' where id=8; -update noar ti set v0='ZDXIBY' where id=8; -update noar tt set b0='0LV853A7FHMSQ' where id=8; -update noar ti set b0='0LV853A7FHMSQ' where id=8; -update noar tt set v0='SXSMCIVD9' where id=8; -update noar ti set v0='SXSMCIVD9' where id=8; -update noar tt set b1='6AFPUJCZE7HNH' where id=8; -update noar ti set b1='6AFPUJCZE7HNH' where id=8; -update noar tt set v0='AQIQNPEVRW3BN40DBBSSL9S4PWY9U5N0' where id=8; -update noar ti set v0='AQIQNPEVRW3BN40DBBSSL9S4PWY9U5N0' where id=8; -update noar tt set b2='P06N9D7KMGE9R2CKLFQ8K08H7' where id=8; -update noar ti set b2='P06N9D7KMGE9R2CKLFQ8K08H7' where id=8; -update noar tt set v0='VW23U5K782KC5Y4O9GK552P55C' where id=9; -update noar ti set v0='VW23U5K782KC5Y4O9GK552P55C' where id=9; -update noar tt set b0='ZF' where id=9; -update noar ti set b0='ZF' where id=9; -update noar tt set v0='0KYY7' where id=9; -update noar ti set v0='0KYY7' where id=9; -update noar tt set b1='Q6NKN8TYPGE3FB5265N' where id=9; -update noar ti set b1='Q6NKN8TYPGE3FB5265N' where id=9; -update noar tt set v0='9XR' where id=9; -update noar ti set v0='9XR' where id=9; -update noar tt set b2='Q4RE36AW59CYH' where id=9; -update noar ti set b2='Q4RE36AW59CYH' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 longblob null, - b1 blob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='3S0WWESDHKR4K2WT6QJDUD' where id=1; -update noar ti set v0='3S0WWESDHKR4K2WT6QJDUD' where id=1; -update noar tt set b0='98S345IMCAKXRS78TW57CGSQMV' where id=1; -update noar ti set b0='98S345IMCAKXRS78TW57CGSQMV' where id=1; -update noar tt set v0='LP2B7MV4T39WOGIDDT' where id=1; -update noar ti set v0='LP2B7MV4T39WOGIDDT' where id=1; -update noar tt set b1='T6JI' where id=1; -update noar ti set b1='T6JI' where id=1; -update noar tt set v0='2SQEKQZBACK1C0JCAP12IDTDAGS' where id=1; -update noar ti set v0='2SQEKQZBACK1C0JCAP12IDTDAGS' where id=1; -update noar tt set b2='HBH2TP3YS3X' where id=1; -update noar ti set b2='HBH2TP3YS3X' where id=1; -update noar tt set v0='EFB580L901RLHWFBZFMAD6LDD' where id=2; -update noar ti set v0='EFB580L901RLHWFBZFMAD6LDD' where id=2; -update noar tt set b0='0R' where id=2; -update noar ti set b0='0R' where id=2; -update noar tt set v0='TSLL5J9ABLE5VJ5QWU9DT' where id=2; -update noar ti set v0='TSLL5J9ABLE5VJ5QWU9DT' where id=2; -update noar tt set b1='KSZC3MI418X1X0P4LJRE' where id=2; -update noar ti set b1='KSZC3MI418X1X0P4LJRE' where id=2; -update noar tt set v0='T' where id=2; -update noar ti set v0='T' where id=2; -update noar tt set b2='Q14Z7EY36NPU498XWNSPZZ0RHLJUK' where id=2; -update noar ti set b2='Q14Z7EY36NPU498XWNSPZZ0RHLJUK' where id=2; -update noar tt set v0='2EYU368F9AIF0NHDJIH' where id=3; -update noar ti set v0='2EYU368F9AIF0NHDJIH' where id=3; -update noar tt set b0='R62QJWMOQZGTJ832UVCG25' where id=3; -update noar ti set b0='R62QJWMOQZGTJ832UVCG25' where id=3; -update noar tt set v0='4CQ06TQ' where id=3; -update noar ti set v0='4CQ06TQ' where id=3; -update noar tt set b1='X0H0S121RZCUZOWMM00W' where id=3; -update noar ti set b1='X0H0S121RZCUZOWMM00W' where id=3; -update noar tt set v0='07JPZUIHCF' where id=3; -update noar ti set v0='07JPZUIHCF' where id=3; -update noar tt set b2='O5K2VGGLZ' where id=3; -update noar ti set b2='O5K2VGGLZ' where id=3; -update noar tt set v0='A1PELQZP43WBDFWKYKZCO' where id=4; -update noar ti set v0='A1PELQZP43WBDFWKYKZCO' where id=4; -update noar tt set b0='TT3Q6E3CMRB49183WEDUCX1GUY1JB' where id=4; -update noar ti set b0='TT3Q6E3CMRB49183WEDUCX1GUY1JB' where id=4; -update noar tt set v0='BVZUTKEGUNII55' where id=4; -update noar ti set v0='BVZUTKEGUNII55' where id=4; -update noar tt set b1='QFO7XNDIN3W17DQBKWFELY4SYUTK' where id=4; -update noar ti set b1='QFO7XNDIN3W17DQBKWFELY4SYUTK' where id=4; -update noar tt set v0='GKZGU5XQE70G953153KW' where id=4; -update noar ti set v0='GKZGU5XQE70G953153KW' where id=4; -update noar tt set b2='0UT6VL9YRZ1BQGN2ZDDEND52KCJFIS' where id=4; -update noar ti set b2='0UT6VL9YRZ1BQGN2ZDDEND52KCJFIS' where id=4; -update noar tt set v0='IZ' where id=5; -update noar ti set v0='IZ' where id=5; -update noar tt set b0='PO' where id=5; -update noar ti set b0='PO' where id=5; -update noar tt set v0='IVLTDAOOVSAQ43COLDYYX3DS' where id=5; -update noar ti set v0='IVLTDAOOVSAQ43COLDYYX3DS' where id=5; -update noar tt set b1='LTM2Y7Q' where id=5; -update noar ti set b1='LTM2Y7Q' where id=5; -update noar tt set v0='6ILNNFYIFNPWETFXWWIGBP47X' where id=5; -update noar ti set v0='6ILNNFYIFNPWETFXWWIGBP47X' where id=5; -update noar tt set b2='ZJ9SEVPPPUFS4I' where id=5; -update noar ti set b2='ZJ9SEVPPPUFS4I' where id=5; -update noar tt set v0='3SQ8V1UBKQ78IT1NY6LYU1YUJ376OZWR' where id=6; -update noar ti set v0='3SQ8V1UBKQ78IT1NY6LYU1YUJ376OZWR' where id=6; -update noar tt set b0='BSE6T' where id=6; -update noar ti set b0='BSE6T' where id=6; -update noar tt set v0='SHSX1C95PJQHLU1CZOGSN6UCZLJBJHP' where id=6; -update noar ti set v0='SHSX1C95PJQHLU1CZOGSN6UCZLJBJHP' where id=6; -update noar tt set b1='Y4SSYZOGTV9XROMOTB5' where id=6; -update noar ti set b1='Y4SSYZOGTV9XROMOTB5' where id=6; -update noar tt set v0='F' where id=6; -update noar ti set v0='F' where id=6; -update noar tt set b2='4Z0V' where id=6; -update noar ti set b2='4Z0V' where id=6; -update noar tt set v0='EA8' where id=7; -update noar ti set v0='EA8' where id=7; -update noar tt set b0='02E687JK0K7LGDGAZ8VCQD' where id=7; -update noar ti set b0='02E687JK0K7LGDGAZ8VCQD' where id=7; -update noar tt set v0='2JVD7' where id=7; -update noar ti set v0='2JVD7' where id=7; -update noar tt set b1='829O6NNRJKWVJC3D07MHEWBYSE' where id=7; -update noar ti set b1='829O6NNRJKWVJC3D07MHEWBYSE' where id=7; -update noar tt set v0='CEKZE1U5RFIGD9AI0YW3' where id=7; -update noar ti set v0='CEKZE1U5RFIGD9AI0YW3' where id=7; -update noar tt set b2='EEFYBQ0' where id=7; -update noar ti set b2='EEFYBQ0' where id=7; -update noar tt set v0='6XHZQE03N4ZUCM0VE' where id=8; -update noar ti set v0='6XHZQE03N4ZUCM0VE' where id=8; -update noar tt set b0='YJ95' where id=8; -update noar ti set b0='YJ95' where id=8; -update noar tt set v0='4UEX038RMDJP6MPCHW7' where id=8; -update noar ti set v0='4UEX038RMDJP6MPCHW7' where id=8; -update noar tt set b1='QQ70KCQSVCC1QQUJZ9F6' where id=8; -update noar ti set b1='QQ70KCQSVCC1QQUJZ9F6' where id=8; -update noar tt set v0='NMB2NNIWLG3LVTX' where id=8; -update noar ti set v0='NMB2NNIWLG3LVTX' where id=8; -update noar tt set b2='5IPYW3GJOMUOCT8TPAMYPD' where id=8; -update noar ti set b2='5IPYW3GJOMUOCT8TPAMYPD' where id=8; -update noar tt set v0='56W3KQQQJG19X3MK1FU7693' where id=9; -update noar ti set v0='56W3KQQQJG19X3MK1FU7693' where id=9; -update noar tt set b0='EDJ8VGTE7K6UN0MB7V' where id=9; -update noar ti set b0='EDJ8VGTE7K6UN0MB7V' where id=9; -update noar tt set v0='JIAJQUSNHMO5SFJ9M' where id=9; -update noar ti set v0='JIAJQUSNHMO5SFJ9M' where id=9; -update noar tt set b1='MLV4JJE8VHT6QEAE2BTRD5Z' where id=9; -update noar ti set b1='MLV4JJE8VHT6QEAE2BTRD5Z' where id=9; -update noar tt set v0='IWCFX9FX' where id=9; -update noar ti set v0='IWCFX9FX' where id=9; -update noar tt set b2='OSD77LC4JJWD6RN' where id=9; -update noar ti set b2='OSD77LC4JJWD6RN' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 longblob not null, - b1 blob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='JGKB0Y2UJ' where id=1; -update noar ti set v0='JGKB0Y2UJ' where id=1; -update noar tt set b0='1EJZ4F' where id=1; -update noar ti set b0='1EJZ4F' where id=1; -update noar tt set v0='IPXSVZDVJK' where id=1; -update noar ti set v0='IPXSVZDVJK' where id=1; -update noar tt set b1='X7MGG5VY0C7JM' where id=1; -update noar ti set b1='X7MGG5VY0C7JM' where id=1; -update noar tt set v0='2J4RLDNK09RXS7Q92XUB0CXYUL' where id=1; -update noar ti set v0='2J4RLDNK09RXS7Q92XUB0CXYUL' where id=1; -update noar tt set b2='H0GCJD97' where id=1; -update noar ti set b2='H0GCJD97' where id=1; -update noar tt set v0='DSKHARQ1TPSGP5P2K' where id=2; -update noar ti set v0='DSKHARQ1TPSGP5P2K' where id=2; -update noar tt set b0='UST5EVB0TVB2OU0A8A' where id=2; -update noar ti set b0='UST5EVB0TVB2OU0A8A' where id=2; -update noar tt set v0='H455KF89AVZT' where id=2; -update noar ti set v0='H455KF89AVZT' where id=2; -update noar tt set b1='NBG' where id=2; -update noar ti set b1='NBG' where id=2; -update noar tt set v0='ILZ7WNV9UYBK6VYZDMEM' where id=2; -update noar ti set v0='ILZ7WNV9UYBK6VYZDMEM' where id=2; -update noar tt set b2='YDRIJRSB85QDIN0YMW6ADZ7QQI' where id=2; -update noar ti set b2='YDRIJRSB85QDIN0YMW6ADZ7QQI' where id=2; -update noar tt set v0='SSRBQH' where id=3; -update noar ti set v0='SSRBQH' where id=3; -update noar tt set b0='ZKC6DGD1BV3QC3XJWNJ6F0QFC80' where id=3; -update noar ti set b0='ZKC6DGD1BV3QC3XJWNJ6F0QFC80' where id=3; -update noar tt set v0='TR3E4EOX' where id=3; -update noar ti set v0='TR3E4EOX' where id=3; -update noar tt set b1='UZGN19LO2S50ANQXKJDZODO9' where id=3; -update noar ti set b1='UZGN19LO2S50ANQXKJDZODO9' where id=3; -update noar tt set v0='O3KC3BOJAHY' where id=3; -update noar ti set v0='O3KC3BOJAHY' where id=3; -update noar tt set b2='UEGN7YSGXA6RS842PNGBN9GS502CX' where id=3; -update noar ti set b2='UEGN7YSGXA6RS842PNGBN9GS502CX' where id=3; -update noar tt set v0='H5TPELD' where id=4; -update noar ti set v0='H5TPELD' where id=4; -update noar tt set b0='6B627B1YBSD1M' where id=4; -update noar ti set b0='6B627B1YBSD1M' where id=4; -update noar tt set v0='CXARHVNQD9IYEW9H' where id=4; -update noar ti set v0='CXARHVNQD9IYEW9H' where id=4; -update noar tt set b1='QPP3CFQRY6SI' where id=4; -update noar ti set b1='QPP3CFQRY6SI' where id=4; -update noar tt set v0='82VFOC1N2GK0NFQTTN4WK6' where id=4; -update noar ti set v0='82VFOC1N2GK0NFQTTN4WK6' where id=4; -update noar tt set b2='5VNK' where id=4; -update noar ti set b2='5VNK' where id=4; -update noar tt set v0='WP2CLGWII5KY2NE' where id=5; -update noar ti set v0='WP2CLGWII5KY2NE' where id=5; -update noar tt set b0='3IYOS7L3YJ8323Z1JX3WHCTM0F' where id=5; -update noar ti set b0='3IYOS7L3YJ8323Z1JX3WHCTM0F' where id=5; -update noar tt set v0='C3P4Y6ZT78RPWA72' where id=5; -update noar ti set v0='C3P4Y6ZT78RPWA72' where id=5; -update noar tt set b1='DOI00DZHRR3UX3A63K3Z7GM' where id=5; -update noar ti set b1='DOI00DZHRR3UX3A63K3Z7GM' where id=5; -update noar tt set v0='0C5H4TTNKZHOGJOWR' where id=5; -update noar ti set v0='0C5H4TTNKZHOGJOWR' where id=5; -update noar tt set b2='2HA5DGYHB17G5' where id=5; -update noar ti set b2='2HA5DGYHB17G5' where id=5; -update noar tt set v0='9BWN6Y3' where id=6; -update noar ti set v0='9BWN6Y3' where id=6; -update noar tt set b0='LN9B7A43' where id=6; -update noar ti set b0='LN9B7A43' where id=6; -update noar tt set v0='L7VM8FK1Y7VBEOMO' where id=6; -update noar ti set v0='L7VM8FK1Y7VBEOMO' where id=6; -update noar tt set b1='YUMOW' where id=6; -update noar ti set b1='YUMOW' where id=6; -update noar tt set v0='Z7GK8H7ARENPWJHH83QYRFFB97E6K' where id=6; -update noar ti set v0='Z7GK8H7ARENPWJHH83QYRFFB97E6K' where id=6; -update noar tt set b2='UALSJ' where id=6; -update noar ti set b2='UALSJ' where id=6; -update noar tt set v0='5PJY8KHE4LWLS53YDP' where id=7; -update noar ti set v0='5PJY8KHE4LWLS53YDP' where id=7; -update noar tt set b0='2L50XCEL922NS5AWAJUTLD7NYGUQ' where id=7; -update noar ti set b0='2L50XCEL922NS5AWAJUTLD7NYGUQ' where id=7; -update noar tt set v0='RK0B6DG5E1PN5Q5F3T' where id=7; -update noar ti set v0='RK0B6DG5E1PN5Q5F3T' where id=7; -update noar tt set b1='9XDHHGVUSLEZP' where id=7; -update noar ti set b1='9XDHHGVUSLEZP' where id=7; -update noar tt set v0='NLMCMP5WIC0EQE0GP9AWH45' where id=7; -update noar ti set v0='NLMCMP5WIC0EQE0GP9AWH45' where id=7; -update noar tt set b2='Z0XYU9PX00H1GBUDWE13X' where id=7; -update noar ti set b2='Z0XYU9PX00H1GBUDWE13X' where id=7; -update noar tt set v0='PGMNTSSJW2S8JKRFEKER0V2906JL14L' where id=8; -update noar ti set v0='PGMNTSSJW2S8JKRFEKER0V2906JL14L' where id=8; -update noar tt set b0='6A1Z4H33S' where id=8; -update noar ti set b0='6A1Z4H33S' where id=8; -update noar tt set v0='RJ9CY' where id=8; -update noar ti set v0='RJ9CY' where id=8; -update noar tt set b1='TOZX3PRA38J802U0A3WCEV' where id=8; -update noar ti set b1='TOZX3PRA38J802U0A3WCEV' where id=8; -update noar tt set v0='4UOKAYJ77U7GZJ5FW2HBT0014UB' where id=8; -update noar ti set v0='4UOKAYJ77U7GZJ5FW2HBT0014UB' where id=8; -update noar tt set b2='3YDUVXCHZ3EL9ZRMORV208XUS55' where id=8; -update noar ti set b2='3YDUVXCHZ3EL9ZRMORV208XUS55' where id=8; -update noar tt set v0='ZIF3GSX5DZ2NRQO49G' where id=9; -update noar ti set v0='ZIF3GSX5DZ2NRQO49G' where id=9; -update noar tt set b0='Q32P6M959NECCWAU2CSE' where id=9; -update noar ti set b0='Q32P6M959NECCWAU2CSE' where id=9; -update noar tt set v0='9B8TGX78IC10HEPR1Y24WQOQEL8' where id=9; -update noar ti set v0='9B8TGX78IC10HEPR1Y24WQOQEL8' where id=9; -update noar tt set b1='5F117LFBRUG231EQ' where id=9; -update noar ti set b1='5F117LFBRUG231EQ' where id=9; -update noar tt set v0='4' where id=9; -update noar ti set v0='4' where id=9; -update noar tt set b2='25IKV' where id=9; -update noar ti set b2='25IKV' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 longblob not null, - b1 blob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='FTO2NVMQRDWT7WKZU6LWJDWKKLKTI' where id=1; -update noar ti set v0='FTO2NVMQRDWT7WKZU6LWJDWKKLKTI' where id=1; -update noar tt set b0='RMLALBMZZ1' where id=1; -update noar ti set b0='RMLALBMZZ1' where id=1; -update noar tt set v0='QZ3W00BE07FX82AO58YDQ2C' where id=1; -update noar ti set v0='QZ3W00BE07FX82AO58YDQ2C' where id=1; -update noar tt set b1='D2M4A1KF6RMU4XO9FEM8PXQ21OC5' where id=1; -update noar ti set b1='D2M4A1KF6RMU4XO9FEM8PXQ21OC5' where id=1; -update noar tt set v0='7' where id=1; -update noar ti set v0='7' where id=1; -update noar tt set b2='ZYP4DTZK9UBXKWYKKTA' where id=1; -update noar ti set b2='ZYP4DTZK9UBXKWYKKTA' where id=1; -update noar tt set v0='97OOXX3HDOG23LX1FM0VO' where id=2; -update noar ti set v0='97OOXX3HDOG23LX1FM0VO' where id=2; -update noar tt set b0='R5QX46G5M' where id=2; -update noar ti set b0='R5QX46G5M' where id=2; -update noar tt set v0='VMG79OX2A4HTCO8INP3SDHCR9ZGAL' where id=2; -update noar ti set v0='VMG79OX2A4HTCO8INP3SDHCR9ZGAL' where id=2; -update noar tt set b1='R' where id=2; -update noar ti set b1='R' where id=2; -update noar tt set v0='7DUXG95GKWEPVQMTM' where id=2; -update noar ti set v0='7DUXG95GKWEPVQMTM' where id=2; -update noar tt set b2='XGXKA3OHOTFA2PMHD3Q1HO4KCGNE' where id=2; -update noar ti set b2='XGXKA3OHOTFA2PMHD3Q1HO4KCGNE' where id=2; -update noar tt set v0='7PZ4Z15KA4PQKMWYQ1JHHPNRM1P9' where id=3; -update noar ti set v0='7PZ4Z15KA4PQKMWYQ1JHHPNRM1P9' where id=3; -update noar tt set b0='CYVMM5QZQT4QXOXAHYCZL' where id=3; -update noar ti set b0='CYVMM5QZQT4QXOXAHYCZL' where id=3; -update noar tt set v0='IXXL1Z8AG1H58W1EO03S2SWSRNPJ96' where id=3; -update noar ti set v0='IXXL1Z8AG1H58W1EO03S2SWSRNPJ96' where id=3; -update noar tt set b1='IAZ21JZUZ30GXWFLTKNNX' where id=3; -update noar ti set b1='IAZ21JZUZ30GXWFLTKNNX' where id=3; -update noar tt set v0='FMI' where id=3; -update noar ti set v0='FMI' where id=3; -update noar tt set b2='R4CUILU2BYAKFYMDLV' where id=3; -update noar ti set b2='R4CUILU2BYAKFYMDLV' where id=3; -update noar tt set v0='P1S0APBNU' where id=4; -update noar ti set v0='P1S0APBNU' where id=4; -update noar tt set b0='LGCSDOY6909' where id=4; -update noar ti set b0='LGCSDOY6909' where id=4; -update noar tt set v0='XQQUM2C5UQTA0SFB' where id=4; -update noar ti set v0='XQQUM2C5UQTA0SFB' where id=4; -update noar tt set b1='ZK4XUNF9WQNO' where id=4; -update noar ti set b1='ZK4XUNF9WQNO' where id=4; -update noar tt set v0='FE3E91PYNGTFCDV523H9QECK2UV5R9C' where id=4; -update noar ti set v0='FE3E91PYNGTFCDV523H9QECK2UV5R9C' where id=4; -update noar tt set b2='YR2J0YXK0Q' where id=4; -update noar ti set b2='YR2J0YXK0Q' where id=4; -update noar tt set v0='GIM78IORLAV2CVJ3YKKJPZD6I85' where id=5; -update noar ti set v0='GIM78IORLAV2CVJ3YKKJPZD6I85' where id=5; -update noar tt set b0='2SYOY1GLX3S6QXT1G87ZP' where id=5; -update noar ti set b0='2SYOY1GLX3S6QXT1G87ZP' where id=5; -update noar tt set v0='8BBW5JB0XDFQOSBT7655LOVU' where id=5; -update noar ti set v0='8BBW5JB0XDFQOSBT7655LOVU' where id=5; -update noar tt set b1='OKU84Q1QXHOSHYA' where id=5; -update noar ti set b1='OKU84Q1QXHOSHYA' where id=5; -update noar tt set v0='WUZKBYF0MJF9LY0Z7MW9B1SDTGG' where id=5; -update noar ti set v0='WUZKBYF0MJF9LY0Z7MW9B1SDTGG' where id=5; -update noar tt set b2='972R8P3BIB5G9UYJUQGBFO' where id=5; -update noar ti set b2='972R8P3BIB5G9UYJUQGBFO' where id=5; -update noar tt set v0='8V8V6PC9PAXGYF0Y2' where id=6; -update noar ti set v0='8V8V6PC9PAXGYF0Y2' where id=6; -update noar tt set b0='YENZ2TPH4Q3KSPA' where id=6; -update noar ti set b0='YENZ2TPH4Q3KSPA' where id=6; -update noar tt set v0='UWE' where id=6; -update noar ti set v0='UWE' where id=6; -update noar tt set b1='3EM30LIF4DWVC6PORYPB5EJL7XQ2V0M3' where id=6; -update noar ti set b1='3EM30LIF4DWVC6PORYPB5EJL7XQ2V0M3' where id=6; -update noar tt set v0='2SGNX5XBWKIBTTVH' where id=6; -update noar ti set v0='2SGNX5XBWKIBTTVH' where id=6; -update noar tt set b2='MX9WN14U2CVRTMGV0WHYSU1E' where id=6; -update noar ti set b2='MX9WN14U2CVRTMGV0WHYSU1E' where id=6; -update noar tt set v0='2VCUJMG3RMFRVH1KT22AC8HTD5W5NZ' where id=7; -update noar ti set v0='2VCUJMG3RMFRVH1KT22AC8HTD5W5NZ' where id=7; -update noar tt set b0='JS' where id=7; -update noar ti set b0='JS' where id=7; -update noar tt set v0='B2P267OQ1MAS3WU3U' where id=7; -update noar ti set v0='B2P267OQ1MAS3WU3U' where id=7; -update noar tt set b1='NOTIEHG55AEFI2WMV6JC76EZ' where id=7; -update noar ti set b1='NOTIEHG55AEFI2WMV6JC76EZ' where id=7; -update noar tt set v0='1LPSBB0' where id=7; -update noar ti set v0='1LPSBB0' where id=7; -update noar tt set b2='6TNNQHEHZYRPDWOZANBDHQDFJ3WDK7' where id=7; -update noar ti set b2='6TNNQHEHZYRPDWOZANBDHQDFJ3WDK7' where id=7; -update noar tt set v0='KG0JWNVUQ722399VHTV7YOA' where id=8; -update noar ti set v0='KG0JWNVUQ722399VHTV7YOA' where id=8; -update noar tt set b0='3Q76OP' where id=8; -update noar ti set b0='3Q76OP' where id=8; -update noar tt set v0='RBKDSTAI6' where id=8; -update noar ti set v0='RBKDSTAI6' where id=8; -update noar tt set b1='35PG77PKUUYWNG9GP7JMJD3' where id=8; -update noar ti set b1='35PG77PKUUYWNG9GP7JMJD3' where id=8; -update noar tt set v0='23EYCUMEU0AVHTLVS' where id=8; -update noar ti set v0='23EYCUMEU0AVHTLVS' where id=8; -update noar tt set b2='CW5F' where id=8; -update noar ti set b2='CW5F' where id=8; -update noar tt set v0='IZHLGIXARP' where id=9; -update noar ti set v0='IZHLGIXARP' where id=9; -update noar tt set b0='D6M81TBG0EJYQAECGJJ66FI6OUZMCY0' where id=9; -update noar ti set b0='D6M81TBG0EJYQAECGJJ66FI6OUZMCY0' where id=9; -update noar tt set v0='B1OLWPNGSEKHVF0O29' where id=9; -update noar ti set v0='B1OLWPNGSEKHVF0O29' where id=9; -update noar tt set b1='QQAMNZCS56W1XEY' where id=9; -update noar ti set b1='QQAMNZCS56W1XEY' where id=9; -update noar tt set v0='GSQP8AZFADL1CR0FMFOLB' where id=9; -update noar ti set v0='GSQP8AZFADL1CR0FMFOLB' where id=9; -update noar tt set b2='3LQYU9W5Z61LITFHR' where id=9; -update noar ti set b2='3LQYU9W5Z61LITFHR' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 longblob null, - b1 blob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='YONYM18' where id=1; -update noar ti set v0='YONYM18' where id=1; -update noar tt set b0='AI0QWE8N05I' where id=1; -update noar ti set b0='AI0QWE8N05I' where id=1; -update noar tt set v0='QLUZKSOOS56V' where id=1; -update noar ti set v0='QLUZKSOOS56V' where id=1; -update noar tt set b1='2U8JCISQB714A7YD11WK' where id=1; -update noar ti set b1='2U8JCISQB714A7YD11WK' where id=1; -update noar tt set v0='CATCGHN' where id=1; -update noar ti set v0='CATCGHN' where id=1; -update noar tt set b2='5KYO69AU9BOFGTUNPGUBALY' where id=1; -update noar ti set b2='5KYO69AU9BOFGTUNPGUBALY' where id=1; -update noar tt set v0='R' where id=2; -update noar ti set v0='R' where id=2; -update noar tt set b0='TGJYF6U40KSAC8UETFEX8H' where id=2; -update noar ti set b0='TGJYF6U40KSAC8UETFEX8H' where id=2; -update noar tt set v0='K7ZY5X8OWZAX' where id=2; -update noar ti set v0='K7ZY5X8OWZAX' where id=2; -update noar tt set b1='4GFVEME5YM4IV1ABHX8O2XS6056Z84' where id=2; -update noar ti set b1='4GFVEME5YM4IV1ABHX8O2XS6056Z84' where id=2; -update noar tt set v0='15XOYTMCQ' where id=2; -update noar ti set v0='15XOYTMCQ' where id=2; -update noar tt set b2='NSLY879L8AIZF2WX' where id=2; -update noar ti set b2='NSLY879L8AIZF2WX' where id=2; -update noar tt set v0='DNVTNZID4' where id=3; -update noar ti set v0='DNVTNZID4' where id=3; -update noar tt set b0='C1ZSLVL0MXY36RA' where id=3; -update noar ti set b0='C1ZSLVL0MXY36RA' where id=3; -update noar tt set v0='1PMFMNMY' where id=3; -update noar ti set v0='1PMFMNMY' where id=3; -update noar tt set b1='SM07010J6QPHP' where id=3; -update noar ti set b1='SM07010J6QPHP' where id=3; -update noar tt set v0='RIVP8IA08FPWSAN1WS' where id=3; -update noar ti set v0='RIVP8IA08FPWSAN1WS' where id=3; -update noar tt set b2='Q9UBZZ6KKNO45' where id=3; -update noar ti set b2='Q9UBZZ6KKNO45' where id=3; -update noar tt set v0='XTRFC869O8BNJKAPA03OK372JB' where id=4; -update noar ti set v0='XTRFC869O8BNJKAPA03OK372JB' where id=4; -update noar tt set b0='A6P23P5KVI1K3PEULJ' where id=4; -update noar ti set b0='A6P23P5KVI1K3PEULJ' where id=4; -update noar tt set v0='D6B28WGE' where id=4; -update noar ti set v0='D6B28WGE' where id=4; -update noar tt set b1='CU42ITSWPX' where id=4; -update noar ti set b1='CU42ITSWPX' where id=4; -update noar tt set v0='27WF9TOUI4FG52WGIXIG' where id=4; -update noar ti set v0='27WF9TOUI4FG52WGIXIG' where id=4; -update noar tt set b2='DUNRJYBKHPJWWX1K4IFMQJ9PM266Y' where id=4; -update noar ti set b2='DUNRJYBKHPJWWX1K4IFMQJ9PM266Y' where id=4; -update noar tt set v0='TDWHWPT1J4JYOI8' where id=5; -update noar ti set v0='TDWHWPT1J4JYOI8' where id=5; -update noar tt set b0='XD9H09BGNV9WTWKV6N4J67HL5' where id=5; -update noar ti set b0='XD9H09BGNV9WTWKV6N4J67HL5' where id=5; -update noar tt set v0='IKP2SJ' where id=5; -update noar ti set v0='IKP2SJ' where id=5; -update noar tt set b1='P52QQ02DYEZ57' where id=5; -update noar ti set b1='P52QQ02DYEZ57' where id=5; -update noar tt set v0='HNKJ1IEV4Y3NHHX2WG' where id=5; -update noar ti set v0='HNKJ1IEV4Y3NHHX2WG' where id=5; -update noar tt set b2='WI4IZFGLWN5QFG3' where id=5; -update noar ti set b2='WI4IZFGLWN5QFG3' where id=5; -update noar tt set v0='M5XVPJ04XXIOJ4S1' where id=6; -update noar ti set v0='M5XVPJ04XXIOJ4S1' where id=6; -update noar tt set b0='3VF5DDS8KPOZR5A85SM49JM1EZRTK8P' where id=6; -update noar ti set b0='3VF5DDS8KPOZR5A85SM49JM1EZRTK8P' where id=6; -update noar tt set v0='5D7JM' where id=6; -update noar ti set v0='5D7JM' where id=6; -update noar tt set b1='AQBXXPX7C110IDEXHH5' where id=6; -update noar ti set b1='AQBXXPX7C110IDEXHH5' where id=6; -update noar tt set v0='39ZLEVXA8HX37FBLIUU' where id=6; -update noar ti set v0='39ZLEVXA8HX37FBLIUU' where id=6; -update noar tt set b2='7KVP4NELFMNOZBUKRRNV3828GVT3' where id=6; -update noar ti set b2='7KVP4NELFMNOZBUKRRNV3828GVT3' where id=6; -update noar tt set v0='Z09T7DRWMGHAICKJJPPN0DIG2GA' where id=7; -update noar ti set v0='Z09T7DRWMGHAICKJJPPN0DIG2GA' where id=7; -update noar tt set b0='S9THXU9UZR14393V3J' where id=7; -update noar ti set b0='S9THXU9UZR14393V3J' where id=7; -update noar tt set v0='7' where id=7; -update noar ti set v0='7' where id=7; -update noar tt set b1='N7A9QKAKI565RW0ECJ85SJKGTN' where id=7; -update noar ti set b1='N7A9QKAKI565RW0ECJ85SJKGTN' where id=7; -update noar tt set v0='CHOSPO4IRCRDVM0LRECY' where id=7; -update noar ti set v0='CHOSPO4IRCRDVM0LRECY' where id=7; -update noar tt set b2='53KJJP4JM6KXQC2RJ1A6' where id=7; -update noar ti set b2='53KJJP4JM6KXQC2RJ1A6' where id=7; -update noar tt set v0='MP7YRS37FMJ1' where id=8; -update noar ti set v0='MP7YRS37FMJ1' where id=8; -update noar tt set b0='K' where id=8; -update noar ti set b0='K' where id=8; -update noar tt set v0='L8WFI1YNJ' where id=8; -update noar ti set v0='L8WFI1YNJ' where id=8; -update noar tt set b1='ZZXY2SD2EZTMZXM8ZPKCW04' where id=8; -update noar ti set b1='ZZXY2SD2EZTMZXM8ZPKCW04' where id=8; -update noar tt set v0='2GBIZMPN86LRDVA3SSHBKZ6B' where id=8; -update noar ti set v0='2GBIZMPN86LRDVA3SSHBKZ6B' where id=8; -update noar tt set b2='PHWAPRHKJHVJFU61VC' where id=8; -update noar ti set b2='PHWAPRHKJHVJFU61VC' where id=8; -update noar tt set v0='J1LR6T4RDXR58D6WJC5UBW4ZXBGN' where id=9; -update noar ti set v0='J1LR6T4RDXR58D6WJC5UBW4ZXBGN' where id=9; -update noar tt set b0='23QDE7DNP9MJX9NER4MAOJX5U5NFQH7B' where id=9; -update noar ti set b0='23QDE7DNP9MJX9NER4MAOJX5U5NFQH7B' where id=9; -update noar tt set v0='HZJAZDYSHQ24O5GARXIFE795ZUTZ6HBC' where id=9; -update noar ti set v0='HZJAZDYSHQ24O5GARXIFE795ZUTZ6HBC' where id=9; -update noar tt set b1='P4FBPYO8ASE6XD6JVZ' where id=9; -update noar ti set b1='P4FBPYO8ASE6XD6JVZ' where id=9; -update noar tt set v0='DPG9BR0RF3768OV1GZVZ8440WH' where id=9; -update noar ti set v0='DPG9BR0RF3768OV1GZVZ8440WH' where id=9; -update noar tt set b2='5NDSYFRC9V1UZV' where id=9; -update noar ti set b2='5NDSYFRC9V1UZV' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 longblob null, - b1 blob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='Z14GAEOUESAUR3K28KN' where id=1; -update noar ti set v0='Z14GAEOUESAUR3K28KN' where id=1; -update noar tt set b0='B9MAEXFNN2Z' where id=1; -update noar ti set b0='B9MAEXFNN2Z' where id=1; -update noar tt set v0='XI8FG328ASUUDNEL395WH9E' where id=1; -update noar ti set v0='XI8FG328ASUUDNEL395WH9E' where id=1; -update noar tt set b1='KB78MOSXXMHBZURL' where id=1; -update noar ti set b1='KB78MOSXXMHBZURL' where id=1; -update noar tt set v0='MFNTOWT1SNC4X366MZ8OIQ4SM' where id=1; -update noar ti set v0='MFNTOWT1SNC4X366MZ8OIQ4SM' where id=1; -update noar tt set b2='RZ0R8BR90MLLN4BKBB' where id=1; -update noar ti set b2='RZ0R8BR90MLLN4BKBB' where id=1; -update noar tt set v0='N9O01' where id=2; -update noar ti set v0='N9O01' where id=2; -update noar tt set b0='3OPTL2H3HQ8A1URVG07' where id=2; -update noar ti set b0='3OPTL2H3HQ8A1URVG07' where id=2; -update noar tt set v0='EKTHJUE76PWUJSDUZ7DT9Y' where id=2; -update noar ti set v0='EKTHJUE76PWUJSDUZ7DT9Y' where id=2; -update noar tt set b1='01R2TC8H6EGQJ67N5DWG9KQARBYBF4V' where id=2; -update noar ti set b1='01R2TC8H6EGQJ67N5DWG9KQARBYBF4V' where id=2; -update noar tt set v0='Y2MABJNHO4LN0X3GW7RU7VDS' where id=2; -update noar ti set v0='Y2MABJNHO4LN0X3GW7RU7VDS' where id=2; -update noar tt set b2='OF4OHJHNE65TDWC375VO3I' where id=2; -update noar ti set b2='OF4OHJHNE65TDWC375VO3I' where id=2; -update noar tt set v0='Z' where id=3; -update noar ti set v0='Z' where id=3; -update noar tt set b0='FEDDVZHGKKNOT3FUPS' where id=3; -update noar ti set b0='FEDDVZHGKKNOT3FUPS' where id=3; -update noar tt set v0='5CZ7J1B5URMY93CP6M9MO5IDRI4X' where id=3; -update noar ti set v0='5CZ7J1B5URMY93CP6M9MO5IDRI4X' where id=3; -update noar tt set b1='NAMG0TOBWBW2IP38J' where id=3; -update noar ti set b1='NAMG0TOBWBW2IP38J' where id=3; -update noar tt set v0='6OW03S1HJ8VH7L' where id=3; -update noar ti set v0='6OW03S1HJ8VH7L' where id=3; -update noar tt set b2='NT3T2G7HDX828PJUKV2OOSNX0' where id=3; -update noar ti set b2='NT3T2G7HDX828PJUKV2OOSNX0' where id=3; -update noar tt set v0='DAEAH8C0AIKJM4N01LQEUAN87B' where id=4; -update noar ti set v0='DAEAH8C0AIKJM4N01LQEUAN87B' where id=4; -update noar tt set b0='VIF4OQ71GD1C0K3' where id=4; -update noar ti set b0='VIF4OQ71GD1C0K3' where id=4; -update noar tt set v0='1E6NOEWBLQJ0ZXGST' where id=4; -update noar ti set v0='1E6NOEWBLQJ0ZXGST' where id=4; -update noar tt set b1='M1GZUS4KW9CM2P' where id=4; -update noar ti set b1='M1GZUS4KW9CM2P' where id=4; -update noar tt set v0='M4LEX8O8295OL54QJL' where id=4; -update noar ti set v0='M4LEX8O8295OL54QJL' where id=4; -update noar tt set b2='K5GYGGL6YP8J' where id=4; -update noar ti set b2='K5GYGGL6YP8J' where id=4; -update noar tt set v0='5YRVUOR5MF3D9' where id=5; -update noar ti set v0='5YRVUOR5MF3D9' where id=5; -update noar tt set b0='IOL4O' where id=5; -update noar ti set b0='IOL4O' where id=5; -update noar tt set v0='90I99KWXQSJYCGMMO6H7R1CO61NH' where id=5; -update noar ti set v0='90I99KWXQSJYCGMMO6H7R1CO61NH' where id=5; -update noar tt set b1='87YP56QR318G' where id=5; -update noar ti set b1='87YP56QR318G' where id=5; -update noar tt set v0='R0OS4P' where id=5; -update noar ti set v0='R0OS4P' where id=5; -update noar tt set b2='E5KQ15WIC' where id=5; -update noar ti set b2='E5KQ15WIC' where id=5; -update noar tt set v0='Q25B08G3RWCJYDN8' where id=6; -update noar ti set v0='Q25B08G3RWCJYDN8' where id=6; -update noar tt set b0='WFLJOQGPOBQIDJLO60' where id=6; -update noar ti set b0='WFLJOQGPOBQIDJLO60' where id=6; -update noar tt set v0='34ZIYEHGL7BOQXDJMMZALEMZ' where id=6; -update noar ti set v0='34ZIYEHGL7BOQXDJMMZALEMZ' where id=6; -update noar tt set b1='WF39BNL4OELFYLL3S4ATK84MMTG' where id=6; -update noar ti set b1='WF39BNL4OELFYLL3S4ATK84MMTG' where id=6; -update noar tt set v0='PX83216T247D' where id=6; -update noar ti set v0='PX83216T247D' where id=6; -update noar tt set b2='K41D7JT9UK' where id=6; -update noar ti set b2='K41D7JT9UK' where id=6; -update noar tt set v0='6YUD7' where id=7; -update noar ti set v0='6YUD7' where id=7; -update noar tt set b0='9S' where id=7; -update noar ti set b0='9S' where id=7; -update noar tt set v0='5P1N4WXLFAG3WFKFT6FI7BIRTZBPB' where id=7; -update noar ti set v0='5P1N4WXLFAG3WFKFT6FI7BIRTZBPB' where id=7; -update noar tt set b1='8YB7RBOIK' where id=7; -update noar ti set b1='8YB7RBOIK' where id=7; -update noar tt set v0='LMPETMV' where id=7; -update noar ti set v0='LMPETMV' where id=7; -update noar tt set b2='NSS8A54OG88BAJ3MRGHOZW79GC7H' where id=7; -update noar ti set b2='NSS8A54OG88BAJ3MRGHOZW79GC7H' where id=7; -update noar tt set v0='BG8CO4W2E8041' where id=8; -update noar ti set v0='BG8CO4W2E8041' where id=8; -update noar tt set b0='A2KA9KUHAD' where id=8; -update noar ti set b0='A2KA9KUHAD' where id=8; -update noar tt set v0='6KBJS2BW0LTY9K' where id=8; -update noar ti set v0='6KBJS2BW0LTY9K' where id=8; -update noar tt set b1='D7WTF3ZHJWT9OFLODDRE5F5DZ7U52' where id=8; -update noar ti set b1='D7WTF3ZHJWT9OFLODDRE5F5DZ7U52' where id=8; -update noar tt set v0='D648BBX55FIWVDFRPVEUW6WTCZ' where id=8; -update noar ti set v0='D648BBX55FIWVDFRPVEUW6WTCZ' where id=8; -update noar tt set b2='QI092KXNURF0D8SD512' where id=8; -update noar ti set b2='QI092KXNURF0D8SD512' where id=8; -update noar tt set v0='YJBVM9ZR5X7G9GI8Z5A29XZ' where id=9; -update noar ti set v0='YJBVM9ZR5X7G9GI8Z5A29XZ' where id=9; -update noar tt set b0='QBRE3KQURVJBPQYETCQK7T9A' where id=9; -update noar ti set b0='QBRE3KQURVJBPQYETCQK7T9A' where id=9; -update noar tt set v0='2RQONV2' where id=9; -update noar ti set v0='2RQONV2' where id=9; -update noar tt set b1='KXEU5ZHHMYUQRPX5YN2JKLDX1U4SF' where id=9; -update noar ti set b1='KXEU5ZHHMYUQRPX5YN2JKLDX1U4SF' where id=9; -update noar tt set v0='R8GJ54FYQYS7C' where id=9; -update noar ti set v0='R8GJ54FYQYS7C' where id=9; -update noar tt set b2='4KYCJBBB230K6PHESSQ4' where id=9; -update noar ti set b2='4KYCJBBB230K6PHESSQ4' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 longblob not null, - b1 blob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='DDSVFV8H0GENIFR6EWVXJR3QRB5' where id=1; -update noar ti set v0='DDSVFV8H0GENIFR6EWVXJR3QRB5' where id=1; -update noar tt set b0='7QM43QQ8UZ3' where id=1; -update noar ti set b0='7QM43QQ8UZ3' where id=1; -update noar tt set v0='JPROF4J4G2RKZ' where id=1; -update noar ti set v0='JPROF4J4G2RKZ' where id=1; -update noar tt set b1='ASRD9DD6H' where id=1; -update noar ti set b1='ASRD9DD6H' where id=1; -update noar tt set v0='RAN29HIW' where id=1; -update noar ti set v0='RAN29HIW' where id=1; -update noar tt set b2='YIYZR4KYFCOPK8Y' where id=1; -update noar ti set b2='YIYZR4KYFCOPK8Y' where id=1; -update noar tt set v0='OMSBMGFKOFGVW6' where id=2; -update noar ti set v0='OMSBMGFKOFGVW6' where id=2; -update noar tt set b0='G7FGHHFS9SDXYSMX4UFLGEHII29SX1' where id=2; -update noar ti set b0='G7FGHHFS9SDXYSMX4UFLGEHII29SX1' where id=2; -update noar tt set v0='S9DRXQFLS4S0UHMI96JB82796' where id=2; -update noar ti set v0='S9DRXQFLS4S0UHMI96JB82796' where id=2; -update noar tt set b1='Q6UT929U1JSJYTO' where id=2; -update noar ti set b1='Q6UT929U1JSJYTO' where id=2; -update noar tt set v0='CR4MB70H3ZTETYJDAW05QYWTJVG0' where id=2; -update noar ti set v0='CR4MB70H3ZTETYJDAW05QYWTJVG0' where id=2; -update noar tt set b2='VCS1BQJB8MUU7IXPQG' where id=2; -update noar ti set b2='VCS1BQJB8MUU7IXPQG' where id=2; -update noar tt set v0='7NFAKJE4350LHIG' where id=3; -update noar ti set v0='7NFAKJE4350LHIG' where id=3; -update noar tt set b0='6XFRW4R7JEHRN38QGW78V2DRNSJCM' where id=3; -update noar ti set b0='6XFRW4R7JEHRN38QGW78V2DRNSJCM' where id=3; -update noar tt set v0='RSIG88YV99' where id=3; -update noar ti set v0='RSIG88YV99' where id=3; -update noar tt set b1='W7YII0CZD0NY5LON80PI' where id=3; -update noar ti set b1='W7YII0CZD0NY5LON80PI' where id=3; -update noar tt set v0='UBJ09SVBII8' where id=3; -update noar ti set v0='UBJ09SVBII8' where id=3; -update noar tt set b2='GT3AI' where id=3; -update noar ti set b2='GT3AI' where id=3; -update noar tt set v0='0RV110SPRAZV5LV' where id=4; -update noar ti set v0='0RV110SPRAZV5LV' where id=4; -update noar tt set b0='7J9L3SW1QE8KMA0HWYL7W4QRAVNMI' where id=4; -update noar ti set b0='7J9L3SW1QE8KMA0HWYL7W4QRAVNMI' where id=4; -update noar tt set v0='W9Y98RZYGULDM7854BZT2IQUQ9TVN1' where id=4; -update noar ti set v0='W9Y98RZYGULDM7854BZT2IQUQ9TVN1' where id=4; -update noar tt set b1='7KE1X3HZ8YUS59BCJ8TZODH81AS' where id=4; -update noar ti set b1='7KE1X3HZ8YUS59BCJ8TZODH81AS' where id=4; -update noar tt set v0='5GKSOZ00HPHEDOD3SSLNI' where id=4; -update noar ti set v0='5GKSOZ00HPHEDOD3SSLNI' where id=4; -update noar tt set b2='L6Z8U64ORXR' where id=4; -update noar ti set b2='L6Z8U64ORXR' where id=4; -update noar tt set v0='A' where id=5; -update noar ti set v0='A' where id=5; -update noar tt set b0='MHYML2TCAXUKDD9P60888LM' where id=5; -update noar ti set b0='MHYML2TCAXUKDD9P60888LM' where id=5; -update noar tt set v0='EQ2NCZP' where id=5; -update noar ti set v0='EQ2NCZP' where id=5; -update noar tt set b1='COVK8CP5D7XYHERKBW7DNVU' where id=5; -update noar ti set b1='COVK8CP5D7XYHERKBW7DNVU' where id=5; -update noar tt set v0='YXF4D5QCXUF1ETKT' where id=5; -update noar ti set v0='YXF4D5QCXUF1ETKT' where id=5; -update noar tt set b2='6B0B05GWIUR' where id=5; -update noar ti set b2='6B0B05GWIUR' where id=5; -update noar tt set v0='O0LQI9OTX6TD19UQBL6IXM0D' where id=6; -update noar ti set v0='O0LQI9OTX6TD19UQBL6IXM0D' where id=6; -update noar tt set b0='WK9YH3YK0CCTI5JVNVX5Y1TO' where id=6; -update noar ti set b0='WK9YH3YK0CCTI5JVNVX5Y1TO' where id=6; -update noar tt set v0='SVHLNKOUVOQF7HOE6MRNFO86LND' where id=6; -update noar ti set v0='SVHLNKOUVOQF7HOE6MRNFO86LND' where id=6; -update noar tt set b1='VDFRUC5JSF6881ALDXJ' where id=6; -update noar ti set b1='VDFRUC5JSF6881ALDXJ' where id=6; -update noar tt set v0='OW6DCW7YIL6B265' where id=6; -update noar ti set v0='OW6DCW7YIL6B265' where id=6; -update noar tt set b2='PMG2VH0BY' where id=6; -update noar ti set b2='PMG2VH0BY' where id=6; -update noar tt set v0='NEIBCF43BE2YX6' where id=7; -update noar ti set v0='NEIBCF43BE2YX6' where id=7; -update noar tt set b0='CI' where id=7; -update noar ti set b0='CI' where id=7; -update noar tt set v0='92306LUVG4A22A2DLBMSSWKAP4' where id=7; -update noar ti set v0='92306LUVG4A22A2DLBMSSWKAP4' where id=7; -update noar tt set b1='QN1NNOTXV4CGU6MROHX6P8QBUKR31' where id=7; -update noar ti set b1='QN1NNOTXV4CGU6MROHX6P8QBUKR31' where id=7; -update noar tt set v0='54ZQYHSYM1' where id=7; -update noar ti set v0='54ZQYHSYM1' where id=7; -update noar tt set b2='TO' where id=7; -update noar ti set b2='TO' where id=7; -update noar tt set v0='WWY8ZWJDKBSTSMWKCKMP01MD9' where id=8; -update noar ti set v0='WWY8ZWJDKBSTSMWKCKMP01MD9' where id=8; -update noar tt set b0='A3AI0YAS36ED6YQY4X09DB8QEBF' where id=8; -update noar ti set b0='A3AI0YAS36ED6YQY4X09DB8QEBF' where id=8; -update noar tt set v0='PG17VN1CO6' where id=8; -update noar ti set v0='PG17VN1CO6' where id=8; -update noar tt set b1='RE' where id=8; -update noar ti set b1='RE' where id=8; -update noar tt set v0='54W' where id=8; -update noar ti set v0='54W' where id=8; -update noar tt set b2='RG6G8LKYUO9HNPLTA8GF4LEA2' where id=8; -update noar ti set b2='RG6G8LKYUO9HNPLTA8GF4LEA2' where id=8; -update noar tt set v0='B5V87HLW52NL8HM4K0JJOTZWZ' where id=9; -update noar ti set v0='B5V87HLW52NL8HM4K0JJOTZWZ' where id=9; -update noar tt set b0='I7EFVYGT0GHHPFOPKHQ7SJD0J046F0HP' where id=9; -update noar ti set b0='I7EFVYGT0GHHPFOPKHQ7SJD0J046F0HP' where id=9; -update noar tt set v0='1J34' where id=9; -update noar ti set v0='1J34' where id=9; -update noar tt set b1='C9HSHQ0UC4NPZ2NFRMFL6UHI' where id=9; -update noar ti set b1='C9HSHQ0UC4NPZ2NFRMFL6UHI' where id=9; -update noar tt set v0='E5N4DDJFCAOVK3R20FNQOFY1RXPCCF' where id=9; -update noar ti set v0='E5N4DDJFCAOVK3R20FNQOFY1RXPCCF' where id=9; -update noar tt set b2='NPZLW5YTKBN6MJQZXK6YYAO' where id=9; -update noar ti set b2='NPZLW5YTKBN6MJQZXK6YYAO' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 longblob not null, - b1 blob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='7RRJK4TZV3H6FJ3UQBRSHD' where id=1; -update noar ti set v0='7RRJK4TZV3H6FJ3UQBRSHD' where id=1; -update noar tt set b0='F5Z6D1ZFQLI51RFAUEOEQX9D6I48VF' where id=1; -update noar ti set b0='F5Z6D1ZFQLI51RFAUEOEQX9D6I48VF' where id=1; -update noar tt set v0='M' where id=1; -update noar ti set v0='M' where id=1; -update noar tt set b1='MQSFGLWER9K18JDS6IDPJW7' where id=1; -update noar ti set b1='MQSFGLWER9K18JDS6IDPJW7' where id=1; -update noar tt set v0='Y5LWOJ1TLVW06ARBP85Q3AHVLLV' where id=1; -update noar ti set v0='Y5LWOJ1TLVW06ARBP85Q3AHVLLV' where id=1; -update noar tt set b2='7J5W' where id=1; -update noar ti set b2='7J5W' where id=1; -update noar tt set v0='76I5PJYIS5' where id=2; -update noar ti set v0='76I5PJYIS5' where id=2; -update noar tt set b0='OX8Y39TCDCU98IT5J6ZZAPM' where id=2; -update noar ti set b0='OX8Y39TCDCU98IT5J6ZZAPM' where id=2; -update noar tt set v0='OI0E84MVEFLOTTRP' where id=2; -update noar ti set v0='OI0E84MVEFLOTTRP' where id=2; -update noar tt set b1='RRQOS' where id=2; -update noar ti set b1='RRQOS' where id=2; -update noar tt set v0='FFV38CZ3GHK9LFKCGODIZN9V' where id=2; -update noar ti set v0='FFV38CZ3GHK9LFKCGODIZN9V' where id=2; -update noar tt set b2='VC6GX3ECGLBQPHPV8FRA' where id=2; -update noar ti set b2='VC6GX3ECGLBQPHPV8FRA' where id=2; -update noar tt set v0='QPOQWY9WV7OV9Q5ABLRIQ73AB' where id=3; -update noar ti set v0='QPOQWY9WV7OV9Q5ABLRIQ73AB' where id=3; -update noar tt set b0='PX2WBY728KK03DB1KW3J' where id=3; -update noar ti set b0='PX2WBY728KK03DB1KW3J' where id=3; -update noar tt set v0='EYTBUGV60NDETLEKT8TMZLCA3PUF6KQZ' where id=3; -update noar ti set v0='EYTBUGV60NDETLEKT8TMZLCA3PUF6KQZ' where id=3; -update noar tt set b1='CMT1IFG44R' where id=3; -update noar ti set b1='CMT1IFG44R' where id=3; -update noar tt set v0='3Z8T9EW8ZT0VIU97S33QNPNLTWC' where id=3; -update noar ti set v0='3Z8T9EW8ZT0VIU97S33QNPNLTWC' where id=3; -update noar tt set b2='8DR8PJX3XFS2UEF' where id=3; -update noar ti set b2='8DR8PJX3XFS2UEF' where id=3; -update noar tt set v0='TFS1Y929M' where id=4; -update noar ti set v0='TFS1Y929M' where id=4; -update noar tt set b0='ASR0UTSTP8S99CAY' where id=4; -update noar ti set b0='ASR0UTSTP8S99CAY' where id=4; -update noar tt set v0='3QDD47CDXYMOME87DZYE' where id=4; -update noar ti set v0='3QDD47CDXYMOME87DZYE' where id=4; -update noar tt set b1='0HKBU09GXP6NW' where id=4; -update noar ti set b1='0HKBU09GXP6NW' where id=4; -update noar tt set v0='8D4' where id=4; -update noar ti set v0='8D4' where id=4; -update noar tt set b2='UXKSQ02' where id=4; -update noar ti set b2='UXKSQ02' where id=4; -update noar tt set v0='1A5L0F9Y5JFQYY3NIFCW3H8UC0KSMZK' where id=5; -update noar ti set v0='1A5L0F9Y5JFQYY3NIFCW3H8UC0KSMZK' where id=5; -update noar tt set b0='7ECFT9UE70Y1NDDY' where id=5; -update noar ti set b0='7ECFT9UE70Y1NDDY' where id=5; -update noar tt set v0='68JBZCC3R2I9YAE5TE2YF9' where id=5; -update noar ti set v0='68JBZCC3R2I9YAE5TE2YF9' where id=5; -update noar tt set b1='PCQPR05FTJBLPA31CR61G' where id=5; -update noar ti set b1='PCQPR05FTJBLPA31CR61G' where id=5; -update noar tt set v0='MH1TCBDS' where id=5; -update noar ti set v0='MH1TCBDS' where id=5; -update noar tt set b2='VUUIPZNRC13P0KY6EOG' where id=5; -update noar ti set b2='VUUIPZNRC13P0KY6EOG' where id=5; -update noar tt set v0='NEVMDPL4YWR4EB79YB25M6F' where id=6; -update noar ti set v0='NEVMDPL4YWR4EB79YB25M6F' where id=6; -update noar tt set b0='C1FZ3T7EC9UV0FY' where id=6; -update noar ti set b0='C1FZ3T7EC9UV0FY' where id=6; -update noar tt set v0='CICVJ9V1E9DURZJUQMP5MWTPWKEH5NT' where id=6; -update noar ti set v0='CICVJ9V1E9DURZJUQMP5MWTPWKEH5NT' where id=6; -update noar tt set b1='TF1G43K8T' where id=6; -update noar ti set b1='TF1G43K8T' where id=6; -update noar tt set v0='D9EQ0NF2VKKG6I9GPSNAOQM' where id=6; -update noar ti set v0='D9EQ0NF2VKKG6I9GPSNAOQM' where id=6; -update noar tt set b2='IRKI97C7ABF' where id=6; -update noar ti set b2='IRKI97C7ABF' where id=6; -update noar tt set v0='1X7FJQ4SHPO50QLDVYN0PMCQ' where id=7; -update noar ti set v0='1X7FJQ4SHPO50QLDVYN0PMCQ' where id=7; -update noar tt set b0='ME1RMXO9C6CKH1LWSQKS3RMEPJCCAO' where id=7; -update noar ti set b0='ME1RMXO9C6CKH1LWSQKS3RMEPJCCAO' where id=7; -update noar tt set v0='V' where id=7; -update noar ti set v0='V' where id=7; -update noar tt set b1='MY37S2NDPR' where id=7; -update noar ti set b1='MY37S2NDPR' where id=7; -update noar tt set v0='IG10I6M' where id=7; -update noar ti set v0='IG10I6M' where id=7; -update noar tt set b2='Y0BV7AUD891EIT48Z5Z7HMSHBM3FBLZD' where id=7; -update noar ti set b2='Y0BV7AUD891EIT48Z5Z7HMSHBM3FBLZD' where id=7; -update noar tt set v0='9OZ' where id=8; -update noar ti set v0='9OZ' where id=8; -update noar tt set b0='QJD5K8Q9HRHRF' where id=8; -update noar ti set b0='QJD5K8Q9HRHRF' where id=8; -update noar tt set v0='FO5UYDQA02GDM2PLVOWGZU' where id=8; -update noar ti set v0='FO5UYDQA02GDM2PLVOWGZU' where id=8; -update noar tt set b1='3K0' where id=8; -update noar ti set b1='3K0' where id=8; -update noar tt set v0='HMD874KV9J9EW6DTZXOWLYKCCIY570B' where id=8; -update noar ti set v0='HMD874KV9J9EW6DTZXOWLYKCCIY570B' where id=8; -update noar tt set b2='CBN1TMGTBEQ6GLDJL9QKON0L37JD6MV' where id=8; -update noar ti set b2='CBN1TMGTBEQ6GLDJL9QKON0L37JD6MV' where id=8; -update noar tt set v0='AAN2QC0JJZ26N310BPEAM1' where id=9; -update noar ti set v0='AAN2QC0JJZ26N310BPEAM1' where id=9; -update noar tt set b0='ABZHC09ZR2CZV3SRBMABYE5L' where id=9; -update noar ti set b0='ABZHC09ZR2CZV3SRBMABYE5L' where id=9; -update noar tt set v0='SP5I6G2BKJGRU' where id=9; -update noar ti set v0='SP5I6G2BKJGRU' where id=9; -update noar tt set b1='LNQNAWKLVS' where id=9; -update noar ti set b1='LNQNAWKLVS' where id=9; -update noar tt set v0='WGDF8SCS648ASOGN0K1L' where id=9; -update noar ti set v0='WGDF8SCS648ASOGN0K1L' where id=9; -update noar tt set b2='8O067WLVCGVKY8CPNM110C2N349N' where id=9; -update noar ti set b2='8O067WLVCGVKY8CPNM110C2N349N' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 longblob null, - b1 mediumblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='LXB51EVH933IPZ7O' where id=1; -update noar ti set v0='LXB51EVH933IPZ7O' where id=1; -update noar tt set b0='VVWWZ51BFZOEI8S4DTC09XISHW5002' where id=1; -update noar ti set b0='VVWWZ51BFZOEI8S4DTC09XISHW5002' where id=1; -update noar tt set v0='TSILO3GTPADNUYJNZZSTX' where id=1; -update noar ti set v0='TSILO3GTPADNUYJNZZSTX' where id=1; -update noar tt set b1='0Y5THGJXR8MY09' where id=1; -update noar ti set b1='0Y5THGJXR8MY09' where id=1; -update noar tt set v0='ONMKON6E680NVD2I9' where id=1; -update noar ti set v0='ONMKON6E680NVD2I9' where id=1; -update noar tt set b2='NU942F03I' where id=1; -update noar ti set b2='NU942F03I' where id=1; -update noar tt set v0='6HTK85Z1TEI6597H7AC' where id=2; -update noar ti set v0='6HTK85Z1TEI6597H7AC' where id=2; -update noar tt set b0='G7VNB96Z2LDV491' where id=2; -update noar ti set b0='G7VNB96Z2LDV491' where id=2; -update noar tt set v0='F8' where id=2; -update noar ti set v0='F8' where id=2; -update noar tt set b1='WQ5N8SG05PPBAC26YTO3NCE' where id=2; -update noar ti set b1='WQ5N8SG05PPBAC26YTO3NCE' where id=2; -update noar tt set v0='UU01XWY4Y' where id=2; -update noar ti set v0='UU01XWY4Y' where id=2; -update noar tt set b2='AF8A10BTGDI' where id=2; -update noar ti set b2='AF8A10BTGDI' where id=2; -update noar tt set v0='H37MOIAF9' where id=3; -update noar ti set v0='H37MOIAF9' where id=3; -update noar tt set b0='XNJ61TTRPDRZTS3X1WKPIDZB3VB81' where id=3; -update noar ti set b0='XNJ61TTRPDRZTS3X1WKPIDZB3VB81' where id=3; -update noar tt set v0='PEZ088L04Q' where id=3; -update noar ti set v0='PEZ088L04Q' where id=3; -update noar tt set b1='9UJWCTDHDWX7ELWEU0ZXM1AWEAQBD' where id=3; -update noar ti set b1='9UJWCTDHDWX7ELWEU0ZXM1AWEAQBD' where id=3; -update noar tt set v0='3HSJXW7BS0Y9T8B14TQSN69G' where id=3; -update noar ti set v0='3HSJXW7BS0Y9T8B14TQSN69G' where id=3; -update noar tt set b2='G1' where id=3; -update noar ti set b2='G1' where id=3; -update noar tt set v0='QGT280XEDYKPFF9' where id=4; -update noar ti set v0='QGT280XEDYKPFF9' where id=4; -update noar tt set b0='81OS93RR73ATUZB069CLJGA' where id=4; -update noar ti set b0='81OS93RR73ATUZB069CLJGA' where id=4; -update noar tt set v0='8US1FKCAF7BPLPTX3WN4' where id=4; -update noar ti set v0='8US1FKCAF7BPLPTX3WN4' where id=4; -update noar tt set b1='GEOLMX04V8YZ6MZFRIFPBP1DU9C2Y4A' where id=4; -update noar ti set b1='GEOLMX04V8YZ6MZFRIFPBP1DU9C2Y4A' where id=4; -update noar tt set v0='XPNWZEVNKFN6' where id=4; -update noar ti set v0='XPNWZEVNKFN6' where id=4; -update noar tt set b2='OADRS66BV7TBH2CR5IOKMTXK8V2ITN' where id=4; -update noar ti set b2='OADRS66BV7TBH2CR5IOKMTXK8V2ITN' where id=4; -update noar tt set v0='D0SU1SWXO10VHV' where id=5; -update noar ti set v0='D0SU1SWXO10VHV' where id=5; -update noar tt set b0='LQ4DRJ67' where id=5; -update noar ti set b0='LQ4DRJ67' where id=5; -update noar tt set v0='KCXV' where id=5; -update noar ti set v0='KCXV' where id=5; -update noar tt set b1='PCVGLFROKVYGKTUDS6MS' where id=5; -update noar ti set b1='PCVGLFROKVYGKTUDS6MS' where id=5; -update noar tt set v0='X63T5ZEDC7' where id=5; -update noar ti set v0='X63T5ZEDC7' where id=5; -update noar tt set b2='XJ8D7TZY54VUCEIO9GFMA48DO45Q' where id=5; -update noar ti set b2='XJ8D7TZY54VUCEIO9GFMA48DO45Q' where id=5; -update noar tt set v0='FJD4EYFIG47M190MW9GY' where id=6; -update noar ti set v0='FJD4EYFIG47M190MW9GY' where id=6; -update noar tt set b0='HP8M8EPA1N8A' where id=6; -update noar ti set b0='HP8M8EPA1N8A' where id=6; -update noar tt set v0='7DXMHU91JL72A4GAEB1T3PB8739H' where id=6; -update noar ti set v0='7DXMHU91JL72A4GAEB1T3PB8739H' where id=6; -update noar tt set b1='R' where id=6; -update noar ti set b1='R' where id=6; -update noar tt set v0='IZ9ENZKO66P7J5SHXYO0SY0BB7X' where id=6; -update noar ti set v0='IZ9ENZKO66P7J5SHXYO0SY0BB7X' where id=6; -update noar tt set b2='CARDU0M2JXD4U3B32KD1Q25FT2M507HW' where id=6; -update noar ti set b2='CARDU0M2JXD4U3B32KD1Q25FT2M507HW' where id=6; -update noar tt set v0='K8M0ME4QQWLE7J' where id=7; -update noar ti set v0='K8M0ME4QQWLE7J' where id=7; -update noar tt set b0='OXP87CUOH2DIH' where id=7; -update noar ti set b0='OXP87CUOH2DIH' where id=7; -update noar tt set v0='TCXXMB08G0213LLV0AH6AD7MG10GX' where id=7; -update noar ti set v0='TCXXMB08G0213LLV0AH6AD7MG10GX' where id=7; -update noar tt set b1='NSFBPDKH' where id=7; -update noar ti set b1='NSFBPDKH' where id=7; -update noar tt set v0='TDHS2IZLRCGE0' where id=7; -update noar ti set v0='TDHS2IZLRCGE0' where id=7; -update noar tt set b2='CX1QBHUUKZTZZ3EMEBZ91X7AJITF' where id=7; -update noar ti set b2='CX1QBHUUKZTZZ3EMEBZ91X7AJITF' where id=7; -update noar tt set v0='SKY' where id=8; -update noar ti set v0='SKY' where id=8; -update noar tt set b0='WQZ5CD0AR1GW58NPRN420B72EDUT19Y' where id=8; -update noar ti set b0='WQZ5CD0AR1GW58NPRN420B72EDUT19Y' where id=8; -update noar tt set v0='63LVMQB8EPY1C88MFO' where id=8; -update noar ti set v0='63LVMQB8EPY1C88MFO' where id=8; -update noar tt set b1='7JOEOOP7BIYH' where id=8; -update noar ti set b1='7JOEOOP7BIYH' where id=8; -update noar tt set v0='PYXAGS2ZLZVGM9XWHWX9HR' where id=8; -update noar ti set v0='PYXAGS2ZLZVGM9XWHWX9HR' where id=8; -update noar tt set b2='2' where id=8; -update noar ti set b2='2' where id=8; -update noar tt set v0='N5Y07Y8' where id=9; -update noar ti set v0='N5Y07Y8' where id=9; -update noar tt set b0='UZ898T' where id=9; -update noar ti set b0='UZ898T' where id=9; -update noar tt set v0='TGJGUPGGOO60LZN' where id=9; -update noar ti set v0='TGJGUPGGOO60LZN' where id=9; -update noar tt set b1='RHSJT6U9LQ4QCXDHQ7YL19EUNQV' where id=9; -update noar ti set b1='RHSJT6U9LQ4QCXDHQ7YL19EUNQV' where id=9; -update noar tt set v0='YGLESPKD68ILW' where id=9; -update noar ti set v0='YGLESPKD68ILW' where id=9; -update noar tt set b2='0RP733O6O5KTZJ81YWA3FARG' where id=9; -update noar ti set b2='0RP733O6O5KTZJ81YWA3FARG' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 longblob null, - b1 mediumblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='G1H9ZMYHDU' where id=1; -update noar ti set v0='G1H9ZMYHDU' where id=1; -update noar tt set b0='PABQ4WHRQB90WDGQGPRO1' where id=1; -update noar ti set b0='PABQ4WHRQB90WDGQGPRO1' where id=1; -update noar tt set v0='D96UZ0QVUJA2PBZE31P' where id=1; -update noar ti set v0='D96UZ0QVUJA2PBZE31P' where id=1; -update noar tt set b1='H0KDGY' where id=1; -update noar ti set b1='H0KDGY' where id=1; -update noar tt set v0='DH9MJ3' where id=1; -update noar ti set v0='DH9MJ3' where id=1; -update noar tt set b2='O5EC4WLTRIKHV2T8KSL' where id=1; -update noar ti set b2='O5EC4WLTRIKHV2T8KSL' where id=1; -update noar tt set v0='4PV3LIOE4T3ZSYEBAXEJW930O' where id=2; -update noar ti set v0='4PV3LIOE4T3ZSYEBAXEJW930O' where id=2; -update noar tt set b0='8PI03J1PMTLTXV' where id=2; -update noar ti set b0='8PI03J1PMTLTXV' where id=2; -update noar tt set v0='HFZDGNQZMHH303' where id=2; -update noar ti set v0='HFZDGNQZMHH303' where id=2; -update noar tt set b1='81I9O4QYU1QU' where id=2; -update noar ti set b1='81I9O4QYU1QU' where id=2; -update noar tt set v0='ATXQTWYN0ON6AS3ODR6' where id=2; -update noar ti set v0='ATXQTWYN0ON6AS3ODR6' where id=2; -update noar tt set b2='C' where id=2; -update noar ti set b2='C' where id=2; -update noar tt set v0='OTJ1162L63TWT3KEDDURS09V8HGSN6X' where id=3; -update noar ti set v0='OTJ1162L63TWT3KEDDURS09V8HGSN6X' where id=3; -update noar tt set b0='D7GNPDSSGG1LI' where id=3; -update noar ti set b0='D7GNPDSSGG1LI' where id=3; -update noar tt set v0='4RP86GH31TP8S2E2QL7CYQC6CKVPSNQV' where id=3; -update noar ti set v0='4RP86GH31TP8S2E2QL7CYQC6CKVPSNQV' where id=3; -update noar tt set b1='TYYHOVA35LB80IB59P3MM7' where id=3; -update noar ti set b1='TYYHOVA35LB80IB59P3MM7' where id=3; -update noar tt set v0='N19ALO7' where id=3; -update noar ti set v0='N19ALO7' where id=3; -update noar tt set b2='6EAXNJL9YDRK1RBMDDYJMVJYDEWXBPJ' where id=3; -update noar ti set b2='6EAXNJL9YDRK1RBMDDYJMVJYDEWXBPJ' where id=3; -update noar tt set v0='QSESKOBV35MWO581P6HKH881KP' where id=4; -update noar ti set v0='QSESKOBV35MWO581P6HKH881KP' where id=4; -update noar tt set b0='2W' where id=4; -update noar ti set b0='2W' where id=4; -update noar tt set v0='M2MD3A3XZUT50Q3KJ0ONYM' where id=4; -update noar ti set v0='M2MD3A3XZUT50Q3KJ0ONYM' where id=4; -update noar tt set b1='OC26D68' where id=4; -update noar ti set b1='OC26D68' where id=4; -update noar tt set v0='29VCK73FFCXRMH4Q8GUH1XCKFRVDRTK4' where id=4; -update noar ti set v0='29VCK73FFCXRMH4Q8GUH1XCKFRVDRTK4' where id=4; -update noar tt set b2='JR8G8S6XLMOEHF72DDMQPRKZ92' where id=4; -update noar ti set b2='JR8G8S6XLMOEHF72DDMQPRKZ92' where id=4; -update noar tt set v0='PN' where id=5; -update noar ti set v0='PN' where id=5; -update noar tt set b0='XWEFDCIILCY5' where id=5; -update noar ti set b0='XWEFDCIILCY5' where id=5; -update noar tt set v0='6JA6EKKGEOYJXAE0LONRI2TQJG' where id=5; -update noar ti set v0='6JA6EKKGEOYJXAE0LONRI2TQJG' where id=5; -update noar tt set b1='7SFHYH2T1QK6XGRJ6WW4MI88WRY6G5' where id=5; -update noar ti set b1='7SFHYH2T1QK6XGRJ6WW4MI88WRY6G5' where id=5; -update noar tt set v0='8O399Z0LCJOUDDJROX4SA' where id=5; -update noar ti set v0='8O399Z0LCJOUDDJROX4SA' where id=5; -update noar tt set b2='GFM3' where id=5; -update noar ti set b2='GFM3' where id=5; -update noar tt set v0='VNKH' where id=6; -update noar ti set v0='VNKH' where id=6; -update noar tt set b0='YGYMF3PLA2M3' where id=6; -update noar ti set b0='YGYMF3PLA2M3' where id=6; -update noar tt set v0='4PL5829VMSYNXJZKXLPFSS05YYA2U' where id=6; -update noar ti set v0='4PL5829VMSYNXJZKXLPFSS05YYA2U' where id=6; -update noar tt set b1='YJJ46L89X6M9' where id=6; -update noar ti set b1='YJJ46L89X6M9' where id=6; -update noar tt set v0='WHEZKK2FMOBNNS3X0Q' where id=6; -update noar ti set v0='WHEZKK2FMOBNNS3X0Q' where id=6; -update noar tt set b2='YVXATQDES26FWAK94BRIG' where id=6; -update noar ti set b2='YVXATQDES26FWAK94BRIG' where id=6; -update noar tt set v0='PADT6071U6NP' where id=7; -update noar ti set v0='PADT6071U6NP' where id=7; -update noar tt set b0='S53LPR8NS6V3CIM' where id=7; -update noar ti set b0='S53LPR8NS6V3CIM' where id=7; -update noar tt set v0='E4H7Z5EH5PL4' where id=7; -update noar ti set v0='E4H7Z5EH5PL4' where id=7; -update noar tt set b1='16D7520MJ6' where id=7; -update noar ti set b1='16D7520MJ6' where id=7; -update noar tt set v0='QBVH4MDZU' where id=7; -update noar ti set v0='QBVH4MDZU' where id=7; -update noar tt set b2='S2IX6SWEM69GF9LZ5U9H65EH' where id=7; -update noar ti set b2='S2IX6SWEM69GF9LZ5U9H65EH' where id=7; -update noar tt set v0='T078TFXU0Z' where id=8; -update noar ti set v0='T078TFXU0Z' where id=8; -update noar tt set b0='YFR' where id=8; -update noar ti set b0='YFR' where id=8; -update noar tt set v0='9N3NS4T16OVFT95ZJ80EHU2LQRS7PMEF' where id=8; -update noar ti set v0='9N3NS4T16OVFT95ZJ80EHU2LQRS7PMEF' where id=8; -update noar tt set b1='ZP8ULZRBFF2Z9O9X' where id=8; -update noar ti set b1='ZP8ULZRBFF2Z9O9X' where id=8; -update noar tt set v0='HLYQYQYFV224OY8' where id=8; -update noar ti set v0='HLYQYQYFV224OY8' where id=8; -update noar tt set b2='U462OA4KR4IRMY4CT7BJR9EOK' where id=8; -update noar ti set b2='U462OA4KR4IRMY4CT7BJR9EOK' where id=8; -update noar tt set v0='KJ5LIUOVSG9' where id=9; -update noar ti set v0='KJ5LIUOVSG9' where id=9; -update noar tt set b0='SUJJPR2' where id=9; -update noar ti set b0='SUJJPR2' where id=9; -update noar tt set v0='ICUDHA3SCRBQJQTYG' where id=9; -update noar ti set v0='ICUDHA3SCRBQJQTYG' where id=9; -update noar tt set b1='8I6T9F5J55H5HQ5ZHL2NCG547C' where id=9; -update noar ti set b1='8I6T9F5J55H5HQ5ZHL2NCG547C' where id=9; -update noar tt set v0='OKXC505ZDUC1VWS9' where id=9; -update noar ti set v0='OKXC505ZDUC1VWS9' where id=9; -update noar tt set b2='CPMK94U96ONWWFN7C' where id=9; -update noar ti set b2='CPMK94U96ONWWFN7C' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 longblob not null, - b1 mediumblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='6K2SJJW66IDTR' where id=1; -update noar ti set v0='6K2SJJW66IDTR' where id=1; -update noar tt set b0='5X2E4JI6FICQBNGU' where id=1; -update noar ti set b0='5X2E4JI6FICQBNGU' where id=1; -update noar tt set v0='U4RYDCKS00KW2OOK2HGEI5DKT' where id=1; -update noar ti set v0='U4RYDCKS00KW2OOK2HGEI5DKT' where id=1; -update noar tt set b1='3N5' where id=1; -update noar ti set b1='3N5' where id=1; -update noar tt set v0='8WQ' where id=1; -update noar ti set v0='8WQ' where id=1; -update noar tt set b2='E' where id=1; -update noar ti set b2='E' where id=1; -update noar tt set v0='IPKF' where id=2; -update noar ti set v0='IPKF' where id=2; -update noar tt set b0='RBSYU1EISEBS2531J2T8' where id=2; -update noar ti set b0='RBSYU1EISEBS2531J2T8' where id=2; -update noar tt set v0='4G97KWNHQV5TPKFQR8Y1YO7USW0DGSE' where id=2; -update noar ti set v0='4G97KWNHQV5TPKFQR8Y1YO7USW0DGSE' where id=2; -update noar tt set b1='ZI4180UK' where id=2; -update noar ti set b1='ZI4180UK' where id=2; -update noar tt set v0='1EMBWCUZMBOGYE3O3VEPA' where id=2; -update noar ti set v0='1EMBWCUZMBOGYE3O3VEPA' where id=2; -update noar tt set b2='8ZJW6BD7JOMEMUWH9CT8HQFID0PNAODZ' where id=2; -update noar ti set b2='8ZJW6BD7JOMEMUWH9CT8HQFID0PNAODZ' where id=2; -update noar tt set v0='BB84RG75BZJYD5HESV95VF9MORW1FK1' where id=3; -update noar ti set v0='BB84RG75BZJYD5HESV95VF9MORW1FK1' where id=3; -update noar tt set b0='ROKAP1N' where id=3; -update noar ti set b0='ROKAP1N' where id=3; -update noar tt set v0='ZR95U5OAG' where id=3; -update noar ti set v0='ZR95U5OAG' where id=3; -update noar tt set b1='KVQOTYY8BIR40GWJNDEX2LIM5C2T3O' where id=3; -update noar ti set b1='KVQOTYY8BIR40GWJNDEX2LIM5C2T3O' where id=3; -update noar tt set v0='4B243U3SQAU05HZ86' where id=3; -update noar ti set v0='4B243U3SQAU05HZ86' where id=3; -update noar tt set b2='ETFU1Q8RCGYGU65GGOTR' where id=3; -update noar ti set b2='ETFU1Q8RCGYGU65GGOTR' where id=3; -update noar tt set v0='ZNXU9CI8DGBIU5NQ' where id=4; -update noar ti set v0='ZNXU9CI8DGBIU5NQ' where id=4; -update noar tt set b0='FIQH1CCS4YBYVA6C8XU4N' where id=4; -update noar ti set b0='FIQH1CCS4YBYVA6C8XU4N' where id=4; -update noar tt set v0='UQMMFNCR21YX0SBZ2WTY64B1T0W8GLIJ' where id=4; -update noar ti set v0='UQMMFNCR21YX0SBZ2WTY64B1T0W8GLIJ' where id=4; -update noar tt set b1='1VR0W62SSPIQRV' where id=4; -update noar ti set b1='1VR0W62SSPIQRV' where id=4; -update noar tt set v0='KSEU60F3N0SOCE57QGO9GP6' where id=4; -update noar ti set v0='KSEU60F3N0SOCE57QGO9GP6' where id=4; -update noar tt set b2='RKRNM' where id=4; -update noar ti set b2='RKRNM' where id=4; -update noar tt set v0='US5EO8Y3KGQ' where id=5; -update noar ti set v0='US5EO8Y3KGQ' where id=5; -update noar tt set b0='LAVSR1GAT' where id=5; -update noar ti set b0='LAVSR1GAT' where id=5; -update noar tt set v0='VV3ZHJKFQ9IWQAZH' where id=5; -update noar ti set v0='VV3ZHJKFQ9IWQAZH' where id=5; -update noar tt set b1='31FCDPNMIAS5UXNLM' where id=5; -update noar ti set b1='31FCDPNMIAS5UXNLM' where id=5; -update noar tt set v0='6VZHU2MHIM2Y4RJC33BP1KA7MZ2DBL' where id=5; -update noar ti set v0='6VZHU2MHIM2Y4RJC33BP1KA7MZ2DBL' where id=5; -update noar tt set b2='7KBE2F' where id=5; -update noar ti set b2='7KBE2F' where id=5; -update noar tt set v0='QA34XR7VUJ8LH1OVXF70R6HF4V' where id=6; -update noar ti set v0='QA34XR7VUJ8LH1OVXF70R6HF4V' where id=6; -update noar tt set b0='PAFY' where id=6; -update noar ti set b0='PAFY' where id=6; -update noar tt set v0='9J' where id=6; -update noar ti set v0='9J' where id=6; -update noar tt set b1='0Y1XAJTYUMCRKLHNPB8Q2SZ06AJ88E' where id=6; -update noar ti set b1='0Y1XAJTYUMCRKLHNPB8Q2SZ06AJ88E' where id=6; -update noar tt set v0='I3SWKJZ' where id=6; -update noar ti set v0='I3SWKJZ' where id=6; -update noar tt set b2='T1MGQH8O28UNLWBF8YTVL1IWKPBGG3' where id=6; -update noar ti set b2='T1MGQH8O28UNLWBF8YTVL1IWKPBGG3' where id=6; -update noar tt set v0='VGN6A' where id=7; -update noar ti set v0='VGN6A' where id=7; -update noar tt set b0='57PCONKI' where id=7; -update noar ti set b0='57PCONKI' where id=7; -update noar tt set v0='X' where id=7; -update noar ti set v0='X' where id=7; -update noar tt set b1='HIL5LCX54AAWSHCL' where id=7; -update noar ti set b1='HIL5LCX54AAWSHCL' where id=7; -update noar tt set v0='8XPG8OF9KTYXXD174DKQ' where id=7; -update noar ti set v0='8XPG8OF9KTYXXD174DKQ' where id=7; -update noar tt set b2='T87J9Y7L7BKG' where id=7; -update noar ti set b2='T87J9Y7L7BKG' where id=7; -update noar tt set v0='PR' where id=8; -update noar ti set v0='PR' where id=8; -update noar tt set b0='C8A7QMQ0EUWAK' where id=8; -update noar ti set b0='C8A7QMQ0EUWAK' where id=8; -update noar tt set v0='RBKPU1JRANU7BZ0' where id=8; -update noar ti set v0='RBKPU1JRANU7BZ0' where id=8; -update noar tt set b1='XZT4DOI3WSU3EH' where id=8; -update noar ti set b1='XZT4DOI3WSU3EH' where id=8; -update noar tt set v0='UN1BDAFIIKY' where id=8; -update noar ti set v0='UN1BDAFIIKY' where id=8; -update noar tt set b2='6ZCDIOYBFTPNXE9FSFBH5XS82IS' where id=8; -update noar ti set b2='6ZCDIOYBFTPNXE9FSFBH5XS82IS' where id=8; -update noar tt set v0='0J50NLVHB97V0B47YH0Q9RZFJ428MNR3' where id=9; -update noar ti set v0='0J50NLVHB97V0B47YH0Q9RZFJ428MNR3' where id=9; -update noar tt set b0='LRK5A56Q1ZDDFV4MA' where id=9; -update noar ti set b0='LRK5A56Q1ZDDFV4MA' where id=9; -update noar tt set v0='BR8TXBWKS5CU1P5J9B07XKLA' where id=9; -update noar ti set v0='BR8TXBWKS5CU1P5J9B07XKLA' where id=9; -update noar tt set b1='9L3E9BSA59AP05EHZTX8G' where id=9; -update noar ti set b1='9L3E9BSA59AP05EHZTX8G' where id=9; -update noar tt set v0='TZEINUV7KPKMF6CXKH401PZ8F' where id=9; -update noar ti set v0='TZEINUV7KPKMF6CXKH401PZ8F' where id=9; -update noar tt set b2='QWYGS2ASPLEN07OS8N' where id=9; -update noar ti set b2='QWYGS2ASPLEN07OS8N' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 longblob not null, - b1 mediumblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='9TS0MDH3P' where id=1; -update noar ti set v0='9TS0MDH3P' where id=1; -update noar tt set b0='0CMLOH3TTQ2Q1' where id=1; -update noar ti set b0='0CMLOH3TTQ2Q1' where id=1; -update noar tt set v0='T8S756' where id=1; -update noar ti set v0='T8S756' where id=1; -update noar tt set b1='355ARES50AS85AUBYYVP0WL22' where id=1; -update noar ti set b1='355ARES50AS85AUBYYVP0WL22' where id=1; -update noar tt set v0='NYYZ7GE0NMLN4ZEOGZA8L1MJNNJ1S1YJ' where id=1; -update noar ti set v0='NYYZ7GE0NMLN4ZEOGZA8L1MJNNJ1S1YJ' where id=1; -update noar tt set b2='3PN2LXLQMBPKXZXPC48432XO5O' where id=1; -update noar ti set b2='3PN2LXLQMBPKXZXPC48432XO5O' where id=1; -update noar tt set v0='LS6XDT' where id=2; -update noar ti set v0='LS6XDT' where id=2; -update noar tt set b0='RW' where id=2; -update noar ti set b0='RW' where id=2; -update noar tt set v0='QY' where id=2; -update noar ti set v0='QY' where id=2; -update noar tt set b1='4BRIS' where id=2; -update noar ti set b1='4BRIS' where id=2; -update noar tt set v0='N8INEEY5RS' where id=2; -update noar ti set v0='N8INEEY5RS' where id=2; -update noar tt set b2='Y1WV8YLS' where id=2; -update noar ti set b2='Y1WV8YLS' where id=2; -update noar tt set v0='5KQJN0PTESKD59S8IT0TXZZR3R' where id=3; -update noar ti set v0='5KQJN0PTESKD59S8IT0TXZZR3R' where id=3; -update noar tt set b0='7LY8M6FAAUCZW8ZB' where id=3; -update noar ti set b0='7LY8M6FAAUCZW8ZB' where id=3; -update noar tt set v0='2CVN4J9V' where id=3; -update noar ti set v0='2CVN4J9V' where id=3; -update noar tt set b1='OP9GIEYSIB5YY8AK' where id=3; -update noar ti set b1='OP9GIEYSIB5YY8AK' where id=3; -update noar tt set v0='THS1HQ9XQXU3RVDCFQ8L1J' where id=3; -update noar ti set v0='THS1HQ9XQXU3RVDCFQ8L1J' where id=3; -update noar tt set b2='MOB8C53CXLUNG9QBNUNU4HYFOUFYFEOH' where id=3; -update noar ti set b2='MOB8C53CXLUNG9QBNUNU4HYFOUFYFEOH' where id=3; -update noar tt set v0='0V8L9WE7P3Q417Z5' where id=4; -update noar ti set v0='0V8L9WE7P3Q417Z5' where id=4; -update noar tt set b0='RL4YLL6FLGJ6S2J1' where id=4; -update noar ti set b0='RL4YLL6FLGJ6S2J1' where id=4; -update noar tt set v0='QFSKH2H1TS3BCNISDGH0' where id=4; -update noar ti set v0='QFSKH2H1TS3BCNISDGH0' where id=4; -update noar tt set b1='35QLAE3KA7PKEL7O9CGKK0PULE679C' where id=4; -update noar ti set b1='35QLAE3KA7PKEL7O9CGKK0PULE679C' where id=4; -update noar tt set v0='EQII2R355RSR' where id=4; -update noar ti set v0='EQII2R355RSR' where id=4; -update noar tt set b2='P6MDBFRNHDLWGI9OHO' where id=4; -update noar ti set b2='P6MDBFRNHDLWGI9OHO' where id=4; -update noar tt set v0='F3CL46CEH030ET6KW296UDFJ89XSLR' where id=5; -update noar ti set v0='F3CL46CEH030ET6KW296UDFJ89XSLR' where id=5; -update noar tt set b0='MQCEAXFPYQBQFPKC7QCD887X1UA4J' where id=5; -update noar ti set b0='MQCEAXFPYQBQFPKC7QCD887X1UA4J' where id=5; -update noar tt set v0='ZXRE5TYFAG4Z1VJIEZCY' where id=5; -update noar ti set v0='ZXRE5TYFAG4Z1VJIEZCY' where id=5; -update noar tt set b1='E2' where id=5; -update noar ti set b1='E2' where id=5; -update noar tt set v0='UL7EQXI7' where id=5; -update noar ti set v0='UL7EQXI7' where id=5; -update noar tt set b2='I8BC1Z' where id=5; -update noar ti set b2='I8BC1Z' where id=5; -update noar tt set v0='CQS6JNTZUDTERIHXWWTJHB40' where id=6; -update noar ti set v0='CQS6JNTZUDTERIHXWWTJHB40' where id=6; -update noar tt set b0='NQM2QIW' where id=6; -update noar ti set b0='NQM2QIW' where id=6; -update noar tt set v0='OCVQ828X97WN8' where id=6; -update noar ti set v0='OCVQ828X97WN8' where id=6; -update noar tt set b1='EEFEBSCQHC2' where id=6; -update noar ti set b1='EEFEBSCQHC2' where id=6; -update noar tt set v0='WG5YJ3IH3CYIKW17T0GVT' where id=6; -update noar ti set v0='WG5YJ3IH3CYIKW17T0GVT' where id=6; -update noar tt set b2='J8FTISLJ6OY43HSJM8' where id=6; -update noar ti set b2='J8FTISLJ6OY43HSJM8' where id=6; -update noar tt set v0='D63NS3K8GG' where id=7; -update noar ti set v0='D63NS3K8GG' where id=7; -update noar tt set b0='HQV4N0' where id=7; -update noar ti set b0='HQV4N0' where id=7; -update noar tt set v0='NLBFM6UXLAV8C04Q59' where id=7; -update noar ti set v0='NLBFM6UXLAV8C04Q59' where id=7; -update noar tt set b1='NB650R7J' where id=7; -update noar ti set b1='NB650R7J' where id=7; -update noar tt set v0='6UPSO6NOSR2ZW3VN44JQKAIX4Z' where id=7; -update noar ti set v0='6UPSO6NOSR2ZW3VN44JQKAIX4Z' where id=7; -update noar tt set b2='ORNLBCUZFR4VCYB96' where id=7; -update noar ti set b2='ORNLBCUZFR4VCYB96' where id=7; -update noar tt set v0='3RO482PQGYIBMWQ' where id=8; -update noar ti set v0='3RO482PQGYIBMWQ' where id=8; -update noar tt set b0='ZQ' where id=8; -update noar ti set b0='ZQ' where id=8; -update noar tt set v0='NS76MOHY' where id=8; -update noar ti set v0='NS76MOHY' where id=8; -update noar tt set b1='3DJSVFJM4CDFO42OBNML0DD' where id=8; -update noar ti set b1='3DJSVFJM4CDFO42OBNML0DD' where id=8; -update noar tt set v0='F8RF8BD' where id=8; -update noar ti set v0='F8RF8BD' where id=8; -update noar tt set b2='KAUSE91' where id=8; -update noar ti set b2='KAUSE91' where id=8; -update noar tt set v0='JN' where id=9; -update noar ti set v0='JN' where id=9; -update noar tt set b0='Z6KWLR' where id=9; -update noar ti set b0='Z6KWLR' where id=9; -update noar tt set v0='AWGO2VKOGWP79UOC2DH25EUQBL5Q' where id=9; -update noar ti set v0='AWGO2VKOGWP79UOC2DH25EUQBL5Q' where id=9; -update noar tt set b1='K9BO70L4M4BO4CDN4IO9' where id=9; -update noar ti set b1='K9BO70L4M4BO4CDN4IO9' where id=9; -update noar tt set v0='EO34' where id=9; -update noar ti set v0='EO34' where id=9; -update noar tt set b2='5TZWF3U9AEYMQIRS10' where id=9; -update noar ti set b2='5TZWF3U9AEYMQIRS10' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 longblob null, - b1 mediumblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='NY2V9AYD28KL3MQ7BOU' where id=1; -update noar ti set v0='NY2V9AYD28KL3MQ7BOU' where id=1; -update noar tt set b0='GNAGKPJA6YRNGN4KN' where id=1; -update noar ti set b0='GNAGKPJA6YRNGN4KN' where id=1; -update noar tt set v0='986J0K48ZSZ5DEODKG30W72P' where id=1; -update noar ti set v0='986J0K48ZSZ5DEODKG30W72P' where id=1; -update noar tt set b1='EXI9D2AO0' where id=1; -update noar ti set b1='EXI9D2AO0' where id=1; -update noar tt set v0='PQC8YMO' where id=1; -update noar ti set v0='PQC8YMO' where id=1; -update noar tt set b2='9M1V87WDQ9JL8ZVQVOUVLBMT' where id=1; -update noar ti set b2='9M1V87WDQ9JL8ZVQVOUVLBMT' where id=1; -update noar tt set v0='U7DWK1JFZKOHO0' where id=2; -update noar ti set v0='U7DWK1JFZKOHO0' where id=2; -update noar tt set b0='SD6OSYJQ0UP3H95V9B0YWLH' where id=2; -update noar ti set b0='SD6OSYJQ0UP3H95V9B0YWLH' where id=2; -update noar tt set v0='NBJ304PT4KLMQCAYKWHYZKT9Z7' where id=2; -update noar ti set v0='NBJ304PT4KLMQCAYKWHYZKT9Z7' where id=2; -update noar tt set b1='8RXU115RILP4396UHKAGGS760' where id=2; -update noar ti set b1='8RXU115RILP4396UHKAGGS760' where id=2; -update noar tt set v0='A2SBP34613FAAA0QOI' where id=2; -update noar ti set v0='A2SBP34613FAAA0QOI' where id=2; -update noar tt set b2='MKVCN5DY9CE72K8NX14YW4' where id=2; -update noar ti set b2='MKVCN5DY9CE72K8NX14YW4' where id=2; -update noar tt set v0='T3F2H345ESDXDFRMEAC2ZT3B' where id=3; -update noar ti set v0='T3F2H345ESDXDFRMEAC2ZT3B' where id=3; -update noar tt set b0='GFAG1TKHE34M1' where id=3; -update noar ti set b0='GFAG1TKHE34M1' where id=3; -update noar tt set v0='L68WIMVP65' where id=3; -update noar ti set v0='L68WIMVP65' where id=3; -update noar tt set b1='HA8D9TUD2IV4Z16OB5CP5TUEZHVD5' where id=3; -update noar ti set b1='HA8D9TUD2IV4Z16OB5CP5TUEZHVD5' where id=3; -update noar tt set v0='AN9KA1YD3IF2CN2MMBW' where id=3; -update noar ti set v0='AN9KA1YD3IF2CN2MMBW' where id=3; -update noar tt set b2='JGEIOEXK2KR0GPPDLP0BRIUCKUHQRUQT' where id=3; -update noar ti set b2='JGEIOEXK2KR0GPPDLP0BRIUCKUHQRUQT' where id=3; -update noar tt set v0='8OR' where id=4; -update noar ti set v0='8OR' where id=4; -update noar tt set b0='A0I15NYCO' where id=4; -update noar ti set b0='A0I15NYCO' where id=4; -update noar tt set v0='6MJYG6QADFXS0SBQIGEB' where id=4; -update noar ti set v0='6MJYG6QADFXS0SBQIGEB' where id=4; -update noar tt set b1='8LDJM326VPILF9PO0NX9' where id=4; -update noar ti set b1='8LDJM326VPILF9PO0NX9' where id=4; -update noar tt set v0='9' where id=4; -update noar ti set v0='9' where id=4; -update noar tt set b2='MV7FMC1PWIE20TN30MSYH1Q98P7RJ' where id=4; -update noar ti set b2='MV7FMC1PWIE20TN30MSYH1Q98P7RJ' where id=4; -update noar tt set v0='K66A0FG20A2PR1KKYI7NEMRBODDMC' where id=5; -update noar ti set v0='K66A0FG20A2PR1KKYI7NEMRBODDMC' where id=5; -update noar tt set b0='2AWUIS5FJMD3E5LI33MN8E9CQHNEOVE' where id=5; -update noar ti set b0='2AWUIS5FJMD3E5LI33MN8E9CQHNEOVE' where id=5; -update noar tt set v0='Z7B9VR3B82H8KYIMDBWMNQ6RA8ZU65K' where id=5; -update noar ti set v0='Z7B9VR3B82H8KYIMDBWMNQ6RA8ZU65K' where id=5; -update noar tt set b1='N568K29XYH9ZF3XYDOGM0BS6201WB' where id=5; -update noar ti set b1='N568K29XYH9ZF3XYDOGM0BS6201WB' where id=5; -update noar tt set v0='V6LZL2BUJ' where id=5; -update noar ti set v0='V6LZL2BUJ' where id=5; -update noar tt set b2='SNMJ2R8FDL4BCIKQ5' where id=5; -update noar ti set b2='SNMJ2R8FDL4BCIKQ5' where id=5; -update noar tt set v0='61ZLFTCDMJPM0VIY1G0I5A' where id=6; -update noar ti set v0='61ZLFTCDMJPM0VIY1G0I5A' where id=6; -update noar tt set b0='L3MKS4JOQ0JNJZMNCZ4ZCPC1BW9' where id=6; -update noar ti set b0='L3MKS4JOQ0JNJZMNCZ4ZCPC1BW9' where id=6; -update noar tt set v0='7G2JYXUXWF4' where id=6; -update noar ti set v0='7G2JYXUXWF4' where id=6; -update noar tt set b1='E0E6CCGWJD7FC' where id=6; -update noar ti set b1='E0E6CCGWJD7FC' where id=6; -update noar tt set v0='XGUN6QNIEYNCTOT' where id=6; -update noar ti set v0='XGUN6QNIEYNCTOT' where id=6; -update noar tt set b2='QEU906YOVQ' where id=6; -update noar ti set b2='QEU906YOVQ' where id=6; -update noar tt set v0='UM' where id=7; -update noar ti set v0='UM' where id=7; -update noar tt set b0='OPG20V4XVH7VFHVS' where id=7; -update noar ti set b0='OPG20V4XVH7VFHVS' where id=7; -update noar tt set v0='JGLTG9Z5ND3GIH2ERFK3P4WNYSRC5' where id=7; -update noar ti set v0='JGLTG9Z5ND3GIH2ERFK3P4WNYSRC5' where id=7; -update noar tt set b1='BI4YIZ8TMQ' where id=7; -update noar ti set b1='BI4YIZ8TMQ' where id=7; -update noar tt set v0='CDF' where id=7; -update noar ti set v0='CDF' where id=7; -update noar tt set b2='K1846T0O2Z6PQQP05GKWDC1WZ6' where id=7; -update noar ti set b2='K1846T0O2Z6PQQP05GKWDC1WZ6' where id=7; -update noar tt set v0='WMZE9KY3X87UFEGX3I' where id=8; -update noar ti set v0='WMZE9KY3X87UFEGX3I' where id=8; -update noar tt set b0='TCIAC2BZWIVPQ9Q4ULH168QEHN8' where id=8; -update noar ti set b0='TCIAC2BZWIVPQ9Q4ULH168QEHN8' where id=8; -update noar tt set v0='MFSAHNC01KBVQQ75BC' where id=8; -update noar ti set v0='MFSAHNC01KBVQQ75BC' where id=8; -update noar tt set b1='K05O0BLUTOKTZF6ZJ3F' where id=8; -update noar ti set b1='K05O0BLUTOKTZF6ZJ3F' where id=8; -update noar tt set v0='M' where id=8; -update noar ti set v0='M' where id=8; -update noar tt set b2='EL5' where id=8; -update noar ti set b2='EL5' where id=8; -update noar tt set v0='CBXCGZYCLO0XEPNGVUVA' where id=9; -update noar ti set v0='CBXCGZYCLO0XEPNGVUVA' where id=9; -update noar tt set b0='0NFY2CYIFR' where id=9; -update noar ti set b0='0NFY2CYIFR' where id=9; -update noar tt set v0='EQGYRHPK836AOF' where id=9; -update noar ti set v0='EQGYRHPK836AOF' where id=9; -update noar tt set b1='QUFUPB09US52' where id=9; -update noar ti set b1='QUFUPB09US52' where id=9; -update noar tt set v0='TMT5B' where id=9; -update noar ti set v0='TMT5B' where id=9; -update noar tt set b2='S503WU5RTVN9B27' where id=9; -update noar ti set b2='S503WU5RTVN9B27' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 longblob null, - b1 mediumblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='PU0243VWIF4B6XH53LHDDZMVRVYE4PJY' where id=1; -update noar ti set v0='PU0243VWIF4B6XH53LHDDZMVRVYE4PJY' where id=1; -update noar tt set b0='TD2Q53X2RUAGDI6A0CK2A9C2OF4VUK' where id=1; -update noar ti set b0='TD2Q53X2RUAGDI6A0CK2A9C2OF4VUK' where id=1; -update noar tt set v0='PG5VSTFS34O31D42A1WE2S' where id=1; -update noar ti set v0='PG5VSTFS34O31D42A1WE2S' where id=1; -update noar tt set b1='58EDT7WQ337DKZ6T016YWOJUHH' where id=1; -update noar ti set b1='58EDT7WQ337DKZ6T016YWOJUHH' where id=1; -update noar tt set v0='IODP3IKTLSW514079080WBTEZ' where id=1; -update noar ti set v0='IODP3IKTLSW514079080WBTEZ' where id=1; -update noar tt set b2='RH6OKNO2JOY2CXNNI5CLQFDZIGNL0Q' where id=1; -update noar ti set b2='RH6OKNO2JOY2CXNNI5CLQFDZIGNL0Q' where id=1; -update noar tt set v0='WXDP6T761RGM68FRZ31UEA11EOA2' where id=2; -update noar ti set v0='WXDP6T761RGM68FRZ31UEA11EOA2' where id=2; -update noar tt set b0='XWJZ67VKOOFBH27HP' where id=2; -update noar ti set b0='XWJZ67VKOOFBH27HP' where id=2; -update noar tt set v0='G1NWW83LA4QOTBL7VQ' where id=2; -update noar ti set v0='G1NWW83LA4QOTBL7VQ' where id=2; -update noar tt set b1='3TR833VN' where id=2; -update noar ti set b1='3TR833VN' where id=2; -update noar tt set v0='XLL1JHVPRABD' where id=2; -update noar ti set v0='XLL1JHVPRABD' where id=2; -update noar tt set b2='KR02VZPISZOX3' where id=2; -update noar ti set b2='KR02VZPISZOX3' where id=2; -update noar tt set v0='CSTJRDS3EDJLGZD' where id=3; -update noar ti set v0='CSTJRDS3EDJLGZD' where id=3; -update noar tt set b0='7U3YADF' where id=3; -update noar ti set b0='7U3YADF' where id=3; -update noar tt set v0='PA33FIMK' where id=3; -update noar ti set v0='PA33FIMK' where id=3; -update noar tt set b1='QLXWHDQL2J4PYPUMK50IZUMZF' where id=3; -update noar ti set b1='QLXWHDQL2J4PYPUMK50IZUMZF' where id=3; -update noar tt set v0='7OSIMBKV3' where id=3; -update noar ti set v0='7OSIMBKV3' where id=3; -update noar tt set b2='9P63D50WO' where id=3; -update noar ti set b2='9P63D50WO' where id=3; -update noar tt set v0='B' where id=4; -update noar ti set v0='B' where id=4; -update noar tt set b0='ZI60CR3YU' where id=4; -update noar ti set b0='ZI60CR3YU' where id=4; -update noar tt set v0='K7BM16E7EEC2SCT488OABNVMF' where id=4; -update noar ti set v0='K7BM16E7EEC2SCT488OABNVMF' where id=4; -update noar tt set b1='DFO4TZ3JI9B4' where id=4; -update noar ti set b1='DFO4TZ3JI9B4' where id=4; -update noar tt set v0='K77XRSWQTJTA12S73I47A739' where id=4; -update noar ti set v0='K77XRSWQTJTA12S73I47A739' where id=4; -update noar tt set b2='EO50VRN' where id=4; -update noar ti set b2='EO50VRN' where id=4; -update noar tt set v0='R38CI5QP6IHTL3RJAV' where id=5; -update noar ti set v0='R38CI5QP6IHTL3RJAV' where id=5; -update noar tt set b0='9JKZMR476BMU5LNH69HDOHV4E' where id=5; -update noar ti set b0='9JKZMR476BMU5LNH69HDOHV4E' where id=5; -update noar tt set v0='WTLOMCY9' where id=5; -update noar ti set v0='WTLOMCY9' where id=5; -update noar tt set b1='7P1' where id=5; -update noar ti set b1='7P1' where id=5; -update noar tt set v0='8JG0' where id=5; -update noar ti set v0='8JG0' where id=5; -update noar tt set b2='DYFL4CUNB' where id=5; -update noar ti set b2='DYFL4CUNB' where id=5; -update noar tt set v0='68WUG89' where id=6; -update noar ti set v0='68WUG89' where id=6; -update noar tt set b0='IJ0U3G585DNTV6KRA8Z7UMQ' where id=6; -update noar ti set b0='IJ0U3G585DNTV6KRA8Z7UMQ' where id=6; -update noar tt set v0='QSCJRC9Y8WVVMU4GSXL' where id=6; -update noar ti set v0='QSCJRC9Y8WVVMU4GSXL' where id=6; -update noar tt set b1='SSUH7EJ86PQC7R1PR' where id=6; -update noar ti set b1='SSUH7EJ86PQC7R1PR' where id=6; -update noar tt set v0='08BVPHGCTOYDJANC08U5U50XT' where id=6; -update noar ti set v0='08BVPHGCTOYDJANC08U5U50XT' where id=6; -update noar tt set b2='H7' where id=6; -update noar ti set b2='H7' where id=6; -update noar tt set v0='G6S8M1820V1XO74S5SQ' where id=7; -update noar ti set v0='G6S8M1820V1XO74S5SQ' where id=7; -update noar tt set b0='3H' where id=7; -update noar ti set b0='3H' where id=7; -update noar tt set v0='H0O9HZHX8XD73DRNW' where id=7; -update noar ti set v0='H0O9HZHX8XD73DRNW' where id=7; -update noar tt set b1='KO712MFU5OXPY6XLRAH4E3E9C' where id=7; -update noar ti set b1='KO712MFU5OXPY6XLRAH4E3E9C' where id=7; -update noar tt set v0='4ME5IJ60RGW8' where id=7; -update noar ti set v0='4ME5IJ60RGW8' where id=7; -update noar tt set b2='6' where id=7; -update noar ti set b2='6' where id=7; -update noar tt set v0='4G1XESX3UU7TX5QUUVDP' where id=8; -update noar ti set v0='4G1XESX3UU7TX5QUUVDP' where id=8; -update noar tt set b0='FQ6Y7AJB5B1KNI3O4WZ' where id=8; -update noar ti set b0='FQ6Y7AJB5B1KNI3O4WZ' where id=8; -update noar tt set v0='L8ADRM5UTXW' where id=8; -update noar ti set v0='L8ADRM5UTXW' where id=8; -update noar tt set b1='I58SCELVBM8ENNR1' where id=8; -update noar ti set b1='I58SCELVBM8ENNR1' where id=8; -update noar tt set v0='P6X02730A51CITJL2B5T1OU4PQFD855R' where id=8; -update noar ti set v0='P6X02730A51CITJL2B5T1OU4PQFD855R' where id=8; -update noar tt set b2='8OA6S0O5XV' where id=8; -update noar ti set b2='8OA6S0O5XV' where id=8; -update noar tt set v0='C' where id=9; -update noar ti set v0='C' where id=9; -update noar tt set b0='DYVA472M3CZIOATJ8' where id=9; -update noar ti set b0='DYVA472M3CZIOATJ8' where id=9; -update noar tt set v0='8L' where id=9; -update noar ti set v0='8L' where id=9; -update noar tt set b1='6E0KPQOR' where id=9; -update noar ti set b1='6E0KPQOR' where id=9; -update noar tt set v0='3Z45SH4X8B6FT07K' where id=9; -update noar ti set v0='3Z45SH4X8B6FT07K' where id=9; -update noar tt set b2='G0RAQNSEACS' where id=9; -update noar ti set b2='G0RAQNSEACS' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 longblob not null, - b1 mediumblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='13YRU' where id=1; -update noar ti set v0='13YRU' where id=1; -update noar tt set b0='RY2V8YLWEL60PTHJO5GLKBM73AC' where id=1; -update noar ti set b0='RY2V8YLWEL60PTHJO5GLKBM73AC' where id=1; -update noar tt set v0='28CPM4LYE3QYH9JD05HSKWHHAQ9GJ' where id=1; -update noar ti set v0='28CPM4LYE3QYH9JD05HSKWHHAQ9GJ' where id=1; -update noar tt set b1='WFRDECHOEGAUXW71VURN6Q2A8' where id=1; -update noar ti set b1='WFRDECHOEGAUXW71VURN6Q2A8' where id=1; -update noar tt set v0='10S5F9RFU22M60T77Y4Y19RY0CQ7J' where id=1; -update noar ti set v0='10S5F9RFU22M60T77Y4Y19RY0CQ7J' where id=1; -update noar tt set b2='5UHXO' where id=1; -update noar ti set b2='5UHXO' where id=1; -update noar tt set v0='BGLOM0' where id=2; -update noar ti set v0='BGLOM0' where id=2; -update noar tt set b0='57BSMBFFYRTYYHHD7TXG3JVFARFQ' where id=2; -update noar ti set b0='57BSMBFFYRTYYHHD7TXG3JVFARFQ' where id=2; -update noar tt set v0='M6HLEVD9J67KV21PCLEDQXH4N' where id=2; -update noar ti set v0='M6HLEVD9J67KV21PCLEDQXH4N' where id=2; -update noar tt set b1='E1BNI02Z5I6W89Q' where id=2; -update noar ti set b1='E1BNI02Z5I6W89Q' where id=2; -update noar tt set v0='S9U342SAFFBVSV8HBFPGEA57N34X9U' where id=2; -update noar ti set v0='S9U342SAFFBVSV8HBFPGEA57N34X9U' where id=2; -update noar tt set b2='UVL37GGK9WY5P7R053VU503ZUQF61P' where id=2; -update noar ti set b2='UVL37GGK9WY5P7R053VU503ZUQF61P' where id=2; -update noar tt set v0='2ZZOKPMCJYMQG8Q9A2' where id=3; -update noar ti set v0='2ZZOKPMCJYMQG8Q9A2' where id=3; -update noar tt set b0='5X2O0NGRP8O14YCWJ2WPYEXTNGB' where id=3; -update noar ti set b0='5X2O0NGRP8O14YCWJ2WPYEXTNGB' where id=3; -update noar tt set v0='VIS1PZ83SJRLOE30HUJO7K9EPWOOZ' where id=3; -update noar ti set v0='VIS1PZ83SJRLOE30HUJO7K9EPWOOZ' where id=3; -update noar tt set b1='JNI' where id=3; -update noar ti set b1='JNI' where id=3; -update noar tt set v0='I86WBGJ7UO' where id=3; -update noar ti set v0='I86WBGJ7UO' where id=3; -update noar tt set b2='KV9EQ3AO0NCDGY2HKI1' where id=3; -update noar ti set b2='KV9EQ3AO0NCDGY2HKI1' where id=3; -update noar tt set v0='0FR13GFXWT6A' where id=4; -update noar ti set v0='0FR13GFXWT6A' where id=4; -update noar tt set b0='T5PXLME89GEJIQGSFLWH7' where id=4; -update noar ti set b0='T5PXLME89GEJIQGSFLWH7' where id=4; -update noar tt set v0='AXJIMRV4AACRMERBZHWNZYS7' where id=4; -update noar ti set v0='AXJIMRV4AACRMERBZHWNZYS7' where id=4; -update noar tt set b1='X' where id=4; -update noar ti set b1='X' where id=4; -update noar tt set v0='UC4IH59N2KOQWIUZT66DV3818' where id=4; -update noar ti set v0='UC4IH59N2KOQWIUZT66DV3818' where id=4; -update noar tt set b2='NLU8A8UKTK9F648EWNQHQ' where id=4; -update noar ti set b2='NLU8A8UKTK9F648EWNQHQ' where id=4; -update noar tt set v0='WUQRPE' where id=5; -update noar ti set v0='WUQRPE' where id=5; -update noar tt set b0='SSZXOCKA3EIF4FGFIIGC7W' where id=5; -update noar ti set b0='SSZXOCKA3EIF4FGFIIGC7W' where id=5; -update noar tt set v0='RFQ4NIIXYXPQGS6HX0LS6QYKEOT0C' where id=5; -update noar ti set v0='RFQ4NIIXYXPQGS6HX0LS6QYKEOT0C' where id=5; -update noar tt set b1='G0' where id=5; -update noar ti set b1='G0' where id=5; -update noar tt set v0='HSYK' where id=5; -update noar ti set v0='HSYK' where id=5; -update noar tt set b2='1TIS2BSHSFS2' where id=5; -update noar ti set b2='1TIS2BSHSFS2' where id=5; -update noar tt set v0='VJVHOZ0ZJVRYFNWRIOAZZAE1Y4DNU2GL' where id=6; -update noar ti set v0='VJVHOZ0ZJVRYFNWRIOAZZAE1Y4DNU2GL' where id=6; -update noar tt set b0='RX4CW00Z07R60QD04GZ3AA9HPG80P' where id=6; -update noar ti set b0='RX4CW00Z07R60QD04GZ3AA9HPG80P' where id=6; -update noar tt set v0='CKKEMN9HN0PHYCW93TUK680LU836WUQI' where id=6; -update noar ti set v0='CKKEMN9HN0PHYCW93TUK680LU836WUQI' where id=6; -update noar tt set b1='M6J3MW1RN9EDUGEQDBLOXGCK7PUZC39C' where id=6; -update noar ti set b1='M6J3MW1RN9EDUGEQDBLOXGCK7PUZC39C' where id=6; -update noar tt set v0='7HBUD1IX0SYW7P6' where id=6; -update noar ti set v0='7HBUD1IX0SYW7P6' where id=6; -update noar tt set b2='L7SN1I8' where id=6; -update noar ti set b2='L7SN1I8' where id=6; -update noar tt set v0='K827W6QROVQE0ZCAHLLWTWE7' where id=7; -update noar ti set v0='K827W6QROVQE0ZCAHLLWTWE7' where id=7; -update noar tt set b0='ZIRT3HUAYYOGAPBLAYQO03H' where id=7; -update noar ti set b0='ZIRT3HUAYYOGAPBLAYQO03H' where id=7; -update noar tt set v0='VCF0AYOOJ26NMZ4GA7PM' where id=7; -update noar ti set v0='VCF0AYOOJ26NMZ4GA7PM' where id=7; -update noar tt set b1='MRBRCR1PWAC9HR2B2G2' where id=7; -update noar ti set b1='MRBRCR1PWAC9HR2B2G2' where id=7; -update noar tt set v0='XPBWZF2VK' where id=7; -update noar ti set v0='XPBWZF2VK' where id=7; -update noar tt set b2='X82Q2U83BJRBNXW6NT3L' where id=7; -update noar ti set b2='X82Q2U83BJRBNXW6NT3L' where id=7; -update noar tt set v0='53XNMDTGTWELZPEJ9GDNVC0I' where id=8; -update noar ti set v0='53XNMDTGTWELZPEJ9GDNVC0I' where id=8; -update noar tt set b0='53KEDWGVCNC6RJPKK' where id=8; -update noar ti set b0='53KEDWGVCNC6RJPKK' where id=8; -update noar tt set v0='JRTYKPMVJTZZE' where id=8; -update noar ti set v0='JRTYKPMVJTZZE' where id=8; -update noar tt set b1='X1NGRWUSX6' where id=8; -update noar ti set b1='X1NGRWUSX6' where id=8; -update noar tt set v0='RKBR7FOTNDVSO3' where id=8; -update noar ti set v0='RKBR7FOTNDVSO3' where id=8; -update noar tt set b2='GR' where id=8; -update noar ti set b2='GR' where id=8; -update noar tt set v0='WYO' where id=9; -update noar ti set v0='WYO' where id=9; -update noar tt set b0='U08SNEV3U3SUDPE05LITOMR77' where id=9; -update noar ti set b0='U08SNEV3U3SUDPE05LITOMR77' where id=9; -update noar tt set v0='6L3L6FWLZCT' where id=9; -update noar ti set v0='6L3L6FWLZCT' where id=9; -update noar tt set b1='6BC54JOSGZVB' where id=9; -update noar ti set b1='6BC54JOSGZVB' where id=9; -update noar tt set v0='KP6HATGVF' where id=9; -update noar ti set v0='KP6HATGVF' where id=9; -update noar tt set b2='30R0W256SGTR1IGGLT5A0TJUZX' where id=9; -update noar ti set b2='30R0W256SGTR1IGGLT5A0TJUZX' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 longblob not null, - b1 mediumblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='M91AP06W697DLGNYDQ' where id=1; -update noar ti set v0='M91AP06W697DLGNYDQ' where id=1; -update noar tt set b0='WFDAHZMNCU43Q' where id=1; -update noar ti set b0='WFDAHZMNCU43Q' where id=1; -update noar tt set v0='VP34CV5WT66' where id=1; -update noar ti set v0='VP34CV5WT66' where id=1; -update noar tt set b1='MH46QOYX43FGR1G48H1MQOD' where id=1; -update noar ti set b1='MH46QOYX43FGR1G48H1MQOD' where id=1; -update noar tt set v0='423TAD7T91Y1E94VGC26CVV4W24SM1PT' where id=1; -update noar ti set v0='423TAD7T91Y1E94VGC26CVV4W24SM1PT' where id=1; -update noar tt set b2='N3Q043CNTKV20LNH6X5T' where id=1; -update noar ti set b2='N3Q043CNTKV20LNH6X5T' where id=1; -update noar tt set v0='ZBWF131G0KDB' where id=2; -update noar ti set v0='ZBWF131G0KDB' where id=2; -update noar tt set b0='X84' where id=2; -update noar ti set b0='X84' where id=2; -update noar tt set v0='8ZR4AOD' where id=2; -update noar ti set v0='8ZR4AOD' where id=2; -update noar tt set b1='VGRTFJ48FI0HX8XFKD2CRWS' where id=2; -update noar ti set b1='VGRTFJ48FI0HX8XFKD2CRWS' where id=2; -update noar tt set v0='63JYKWV46HV08HJIV5M1' where id=2; -update noar ti set v0='63JYKWV46HV08HJIV5M1' where id=2; -update noar tt set b2='YUJDIQBKG5QLYE6ZA6AEF6PCDH76K9' where id=2; -update noar ti set b2='YUJDIQBKG5QLYE6ZA6AEF6PCDH76K9' where id=2; -update noar tt set v0='4GJSF' where id=3; -update noar ti set v0='4GJSF' where id=3; -update noar tt set b0='TKTO4JCXSZEKM28WLLA03U9YNEX11LPU' where id=3; -update noar ti set b0='TKTO4JCXSZEKM28WLLA03U9YNEX11LPU' where id=3; -update noar tt set v0='X179U' where id=3; -update noar ti set v0='X179U' where id=3; -update noar tt set b1='YE8QLET' where id=3; -update noar ti set b1='YE8QLET' where id=3; -update noar tt set v0='QXX2EDQ72UR41OFT4RKL' where id=3; -update noar ti set v0='QXX2EDQ72UR41OFT4RKL' where id=3; -update noar tt set b2='9IN4TGJI0M3C28T6K090Z3GJ22M7' where id=3; -update noar ti set b2='9IN4TGJI0M3C28T6K090Z3GJ22M7' where id=3; -update noar tt set v0='R1LR0BU781VQH9YNDR9TC' where id=4; -update noar ti set v0='R1LR0BU781VQH9YNDR9TC' where id=4; -update noar tt set b0='CF20MW0PJEDADAAWX3OVDKLW4OM1EXA8' where id=4; -update noar ti set b0='CF20MW0PJEDADAAWX3OVDKLW4OM1EXA8' where id=4; -update noar tt set v0='Q1QSWRVN' where id=4; -update noar ti set v0='Q1QSWRVN' where id=4; -update noar tt set b1='4ZQPNIXREP3W0ROQ8TMJD8S' where id=4; -update noar ti set b1='4ZQPNIXREP3W0ROQ8TMJD8S' where id=4; -update noar tt set v0='FLHMN92346E' where id=4; -update noar ti set v0='FLHMN92346E' where id=4; -update noar tt set b2='2' where id=4; -update noar ti set b2='2' where id=4; -update noar tt set v0='4BHTTJHCCTV0Q9SH' where id=5; -update noar ti set v0='4BHTTJHCCTV0Q9SH' where id=5; -update noar tt set b0='L2XSM3SNNFZYJ8TWTQH90SEKWJ4WEV' where id=5; -update noar ti set b0='L2XSM3SNNFZYJ8TWTQH90SEKWJ4WEV' where id=5; -update noar tt set v0='4' where id=5; -update noar ti set v0='4' where id=5; -update noar tt set b1='3BIP35NZ091ZGJFHKEZR6AFE' where id=5; -update noar ti set b1='3BIP35NZ091ZGJFHKEZR6AFE' where id=5; -update noar tt set v0='Z0JOVB8YQXYUZCG3' where id=5; -update noar ti set v0='Z0JOVB8YQXYUZCG3' where id=5; -update noar tt set b2='R' where id=5; -update noar ti set b2='R' where id=5; -update noar tt set v0='LRPLON0QPLAXN72LVEIPYV' where id=6; -update noar ti set v0='LRPLON0QPLAXN72LVEIPYV' where id=6; -update noar tt set b0='DHYIKBWWKME2L0SO1HIRT27E0RSEE' where id=6; -update noar ti set b0='DHYIKBWWKME2L0SO1HIRT27E0RSEE' where id=6; -update noar tt set v0='ZBK11UTXJL83E7J0YCWT9B' where id=6; -update noar ti set v0='ZBK11UTXJL83E7J0YCWT9B' where id=6; -update noar tt set b1='BM48FL2S0160X21SQU0M7V0GN8R' where id=6; -update noar ti set b1='BM48FL2S0160X21SQU0M7V0GN8R' where id=6; -update noar tt set v0='R1JQ8EH3P' where id=6; -update noar ti set v0='R1JQ8EH3P' where id=6; -update noar tt set b2='SIIZOUOLMW4' where id=6; -update noar ti set b2='SIIZOUOLMW4' where id=6; -update noar tt set v0='2WOLIFVUIXE10YIKPS8ASZ1URZ5TN1VH' where id=7; -update noar ti set v0='2WOLIFVUIXE10YIKPS8ASZ1URZ5TN1VH' where id=7; -update noar tt set b0='3HH5ZYF' where id=7; -update noar ti set b0='3HH5ZYF' where id=7; -update noar tt set v0='Z9HKX7Q93ZBUWGGG9OJ7' where id=7; -update noar ti set v0='Z9HKX7Q93ZBUWGGG9OJ7' where id=7; -update noar tt set b1='AA1L4NVNZ7PIK431FYKKEIN9PDX' where id=7; -update noar ti set b1='AA1L4NVNZ7PIK431FYKKEIN9PDX' where id=7; -update noar tt set v0='Z31UX09LP8YAORHPKBW5Z14NSZBKXYZ' where id=7; -update noar ti set v0='Z31UX09LP8YAORHPKBW5Z14NSZBKXYZ' where id=7; -update noar tt set b2='6J73A7' where id=7; -update noar ti set b2='6J73A7' where id=7; -update noar tt set v0='XCRDMJGUDH' where id=8; -update noar ti set v0='XCRDMJGUDH' where id=8; -update noar tt set b0='MYU59R5' where id=8; -update noar ti set b0='MYU59R5' where id=8; -update noar tt set v0='2RZ4BZT43FNDPANPPIB4IOE' where id=8; -update noar ti set v0='2RZ4BZT43FNDPANPPIB4IOE' where id=8; -update noar tt set b1='S3XOCZ' where id=8; -update noar ti set b1='S3XOCZ' where id=8; -update noar tt set v0='R6SZLL8Y79M43F6C8WO0VH0DN' where id=8; -update noar ti set v0='R6SZLL8Y79M43F6C8WO0VH0DN' where id=8; -update noar tt set b2='KXFZN4SHRSY2MXZNBPU13RHD' where id=8; -update noar ti set b2='KXFZN4SHRSY2MXZNBPU13RHD' where id=8; -update noar tt set v0='XWRZBI03EZ2ZN3HT' where id=9; -update noar ti set v0='XWRZBI03EZ2ZN3HT' where id=9; -update noar tt set b0='DE360E3PXUJ6' where id=9; -update noar ti set b0='DE360E3PXUJ6' where id=9; -update noar tt set v0='YZE60BFK' where id=9; -update noar ti set v0='YZE60BFK' where id=9; -update noar tt set b1='D5S2S4I9LEN' where id=9; -update noar ti set b1='D5S2S4I9LEN' where id=9; -update noar tt set v0='30C1' where id=9; -update noar ti set v0='30C1' where id=9; -update noar tt set b2='B749A33E4X57LCY7I45' where id=9; -update noar ti set b2='B749A33E4X57LCY7I45' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 longblob null, - b1 mediumblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='00FB6PZZRH8VF6MKRIPFZQ6PRP6J' where id=1; -update noar ti set v0='00FB6PZZRH8VF6MKRIPFZQ6PRP6J' where id=1; -update noar tt set b0='8R2TBRF3YEE7LGFGR3CICN6A' where id=1; -update noar ti set b0='8R2TBRF3YEE7LGFGR3CICN6A' where id=1; -update noar tt set v0='AAFIWC9KRCEIMPJE6DXCL01' where id=1; -update noar ti set v0='AAFIWC9KRCEIMPJE6DXCL01' where id=1; -update noar tt set b1='BC7I85KLFN0H6MZHP1GDVELNVR' where id=1; -update noar ti set b1='BC7I85KLFN0H6MZHP1GDVELNVR' where id=1; -update noar tt set v0='IXUGHC' where id=1; -update noar ti set v0='IXUGHC' where id=1; -update noar tt set b2='G5AQZZ395G51RNMY7Y5E8D3U' where id=1; -update noar ti set b2='G5AQZZ395G51RNMY7Y5E8D3U' where id=1; -update noar tt set v0='09IH2LSETI1RUWLPR70NJ6HQ' where id=2; -update noar ti set v0='09IH2LSETI1RUWLPR70NJ6HQ' where id=2; -update noar tt set b0='TM9LRQCSIN5N6Q4KUZRB1' where id=2; -update noar ti set b0='TM9LRQCSIN5N6Q4KUZRB1' where id=2; -update noar tt set v0='FT' where id=2; -update noar ti set v0='FT' where id=2; -update noar tt set b1='EJFPN8' where id=2; -update noar ti set b1='EJFPN8' where id=2; -update noar tt set v0='2A0' where id=2; -update noar ti set v0='2A0' where id=2; -update noar tt set b2='GJL709' where id=2; -update noar ti set b2='GJL709' where id=2; -update noar tt set v0='OLX2PSVBXWS0C71JOZJB' where id=3; -update noar ti set v0='OLX2PSVBXWS0C71JOZJB' where id=3; -update noar tt set b0='EMV3BIN2SP' where id=3; -update noar ti set b0='EMV3BIN2SP' where id=3; -update noar tt set v0='UIRC5JL' where id=3; -update noar ti set v0='UIRC5JL' where id=3; -update noar tt set b1='195I3WA6NYCYW1YASG0ZJ700TNONWEUP' where id=3; -update noar ti set b1='195I3WA6NYCYW1YASG0ZJ700TNONWEUP' where id=3; -update noar tt set v0='P9WF2VRNU6TNSF8O6V8H25PITG3CY' where id=3; -update noar ti set v0='P9WF2VRNU6TNSF8O6V8H25PITG3CY' where id=3; -update noar tt set b2='IM1XYJCMAP920EO2LGFQBFCWY3G' where id=3; -update noar ti set b2='IM1XYJCMAP920EO2LGFQBFCWY3G' where id=3; -update noar tt set v0='SBKUH35FAH48UB0YP4EW' where id=4; -update noar ti set v0='SBKUH35FAH48UB0YP4EW' where id=4; -update noar tt set b0='FTC1BVAZQTPWTQ0' where id=4; -update noar ti set b0='FTC1BVAZQTPWTQ0' where id=4; -update noar tt set v0='S3ZX5KB77454KVR06GAYDTS' where id=4; -update noar ti set v0='S3ZX5KB77454KVR06GAYDTS' where id=4; -update noar tt set b1='XL9L5PG9H541R76HFPR' where id=4; -update noar ti set b1='XL9L5PG9H541R76HFPR' where id=4; -update noar tt set v0='LR7MFNWGUI4YVT' where id=4; -update noar ti set v0='LR7MFNWGUI4YVT' where id=4; -update noar tt set b2='96FVYVM9OKZM0' where id=4; -update noar ti set b2='96FVYVM9OKZM0' where id=4; -update noar tt set v0='YL5XWTGFQ4HG95KNG7' where id=5; -update noar ti set v0='YL5XWTGFQ4HG95KNG7' where id=5; -update noar tt set b0='F7RU567MOYILMM0J83GNTC' where id=5; -update noar ti set b0='F7RU567MOYILMM0J83GNTC' where id=5; -update noar tt set v0='M6FX' where id=5; -update noar ti set v0='M6FX' where id=5; -update noar tt set b1='XB0YJTA' where id=5; -update noar ti set b1='XB0YJTA' where id=5; -update noar tt set v0='MN1H1FFV6HQD0LH38831KFSL3VLM' where id=5; -update noar ti set v0='MN1H1FFV6HQD0LH38831KFSL3VLM' where id=5; -update noar tt set b2='CQQ0XD27ASX0OTQ05DO2HGMWHJN2JB' where id=5; -update noar ti set b2='CQQ0XD27ASX0OTQ05DO2HGMWHJN2JB' where id=5; -update noar tt set v0='WJB85SDF7HGXOW4' where id=6; -update noar ti set v0='WJB85SDF7HGXOW4' where id=6; -update noar tt set b0='OWLGVRB2MZVP1U148CP' where id=6; -update noar ti set b0='OWLGVRB2MZVP1U148CP' where id=6; -update noar tt set v0='QZ78KXHAUUGSPXV' where id=6; -update noar ti set v0='QZ78KXHAUUGSPXV' where id=6; -update noar tt set b1='UC0KTMXW5RJF105646Q' where id=6; -update noar ti set b1='UC0KTMXW5RJF105646Q' where id=6; -update noar tt set v0='HGPUOYEL17YEHOJ5PWLKBLKO' where id=6; -update noar ti set v0='HGPUOYEL17YEHOJ5PWLKBLKO' where id=6; -update noar tt set b2='ZZ8QIL06NJW' where id=6; -update noar ti set b2='ZZ8QIL06NJW' where id=6; -update noar tt set v0='HHE4BLRWYL8MW312' where id=7; -update noar ti set v0='HHE4BLRWYL8MW312' where id=7; -update noar tt set b0='6BPQ7F6Y4T03S8U' where id=7; -update noar ti set b0='6BPQ7F6Y4T03S8U' where id=7; -update noar tt set v0='3B' where id=7; -update noar ti set v0='3B' where id=7; -update noar tt set b1='332B9K18TRAW7G2T' where id=7; -update noar ti set b1='332B9K18TRAW7G2T' where id=7; -update noar tt set v0='6S' where id=7; -update noar ti set v0='6S' where id=7; -update noar tt set b2='PGWRUCBGDWJBPQZNC828N4OQN' where id=7; -update noar ti set b2='PGWRUCBGDWJBPQZNC828N4OQN' where id=7; -update noar tt set v0='104IA' where id=8; -update noar ti set v0='104IA' where id=8; -update noar tt set b0='RZCE88WILA8XAQQ6B50WM' where id=8; -update noar ti set b0='RZCE88WILA8XAQQ6B50WM' where id=8; -update noar tt set v0='X8LI' where id=8; -update noar ti set v0='X8LI' where id=8; -update noar tt set b1='8NST28S5DJRV75TRI09M1MU2HDHNI4G' where id=8; -update noar ti set b1='8NST28S5DJRV75TRI09M1MU2HDHNI4G' where id=8; -update noar tt set v0='3' where id=8; -update noar ti set v0='3' where id=8; -update noar tt set b2='OLK72EDBVAK07WA5' where id=8; -update noar ti set b2='OLK72EDBVAK07WA5' where id=8; -update noar tt set v0='GAQ1DY7XOX8O' where id=9; -update noar ti set v0='GAQ1DY7XOX8O' where id=9; -update noar tt set b0='XH75R7N5W1QDBYB5LO9FCRJLF04R' where id=9; -update noar ti set b0='XH75R7N5W1QDBYB5LO9FCRJLF04R' where id=9; -update noar tt set v0='KSL0EQIBOIM5' where id=9; -update noar ti set v0='KSL0EQIBOIM5' where id=9; -update noar tt set b1='8JHI51DRO8DU165WZV61SJ8E5ANSJG' where id=9; -update noar ti set b1='8JHI51DRO8DU165WZV61SJ8E5ANSJG' where id=9; -update noar tt set v0='1WRL7K7T' where id=9; -update noar ti set v0='1WRL7K7T' where id=9; -update noar tt set b2='ZAQ1A4658AI' where id=9; -update noar ti set b2='ZAQ1A4658AI' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 longblob null, - b1 mediumblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='H7PWUSSI7CLDO' where id=1; -update noar ti set v0='H7PWUSSI7CLDO' where id=1; -update noar tt set b0='QHV9BDB8NJ8H8VL7Q8770ZPHRPDT6' where id=1; -update noar ti set b0='QHV9BDB8NJ8H8VL7Q8770ZPHRPDT6' where id=1; -update noar tt set v0='JD8R9J8GB08J3HIQPZ0C' where id=1; -update noar ti set v0='JD8R9J8GB08J3HIQPZ0C' where id=1; -update noar tt set b1='S9FGA3606KWD03IRGMPT86YR5OK3VV' where id=1; -update noar ti set b1='S9FGA3606KWD03IRGMPT86YR5OK3VV' where id=1; -update noar tt set v0='0Z8SM37F8Z9G2ZF774BMPHHV0C31RD' where id=1; -update noar ti set v0='0Z8SM37F8Z9G2ZF774BMPHHV0C31RD' where id=1; -update noar tt set b2='KTW941MFT4HCM' where id=1; -update noar ti set b2='KTW941MFT4HCM' where id=1; -update noar tt set v0='KWTBDNBNO9PL7M7NY9P' where id=2; -update noar ti set v0='KWTBDNBNO9PL7M7NY9P' where id=2; -update noar tt set b0='BZT64' where id=2; -update noar ti set b0='BZT64' where id=2; -update noar tt set v0='F30VO50IIHERLQHBEZRFMIA3AKH4MRHU' where id=2; -update noar ti set v0='F30VO50IIHERLQHBEZRFMIA3AKH4MRHU' where id=2; -update noar tt set b1='P7G10ZMN6928HUKBP0T' where id=2; -update noar ti set b1='P7G10ZMN6928HUKBP0T' where id=2; -update noar tt set v0='2I3ZAJIFLHA67IE' where id=2; -update noar ti set v0='2I3ZAJIFLHA67IE' where id=2; -update noar tt set b2='4L6PX54NP1VIJ27KYYSXUPYF91LQHC' where id=2; -update noar ti set b2='4L6PX54NP1VIJ27KYYSXUPYF91LQHC' where id=2; -update noar tt set v0='SL9WN43MI9N' where id=3; -update noar ti set v0='SL9WN43MI9N' where id=3; -update noar tt set b0='OZDH5W7BZRIKXVGLERSD' where id=3; -update noar ti set b0='OZDH5W7BZRIKXVGLERSD' where id=3; -update noar tt set v0='8IABTKDP3O35GY5S7MNV' where id=3; -update noar ti set v0='8IABTKDP3O35GY5S7MNV' where id=3; -update noar tt set b1='T8W' where id=3; -update noar ti set b1='T8W' where id=3; -update noar tt set v0='WBV6LIQRKUO1HWZOG0QOI0Z' where id=3; -update noar ti set v0='WBV6LIQRKUO1HWZOG0QOI0Z' where id=3; -update noar tt set b2='YYWKKQTU20ZS15MO6Q63L0D' where id=3; -update noar ti set b2='YYWKKQTU20ZS15MO6Q63L0D' where id=3; -update noar tt set v0='PRDLCXAU4J6UHU90EO1HVWM1NMITR' where id=4; -update noar ti set v0='PRDLCXAU4J6UHU90EO1HVWM1NMITR' where id=4; -update noar tt set b0='7W' where id=4; -update noar ti set b0='7W' where id=4; -update noar tt set v0='AJ17PND6CVNTYB28TAJTHHG1PE' where id=4; -update noar ti set v0='AJ17PND6CVNTYB28TAJTHHG1PE' where id=4; -update noar tt set b1='KXZSFUE5AL099UI0TZXXUO10J' where id=4; -update noar ti set b1='KXZSFUE5AL099UI0TZXXUO10J' where id=4; -update noar tt set v0='X' where id=4; -update noar ti set v0='X' where id=4; -update noar tt set b2='Q3Y9QBJGCE6FAL' where id=4; -update noar ti set b2='Q3Y9QBJGCE6FAL' where id=4; -update noar tt set v0='09H70FKTTM4D34X3TGNQID2' where id=5; -update noar ti set v0='09H70FKTTM4D34X3TGNQID2' where id=5; -update noar tt set b0='TX6A4KP2P7JELQNBMXGN04PDNP' where id=5; -update noar ti set b0='TX6A4KP2P7JELQNBMXGN04PDNP' where id=5; -update noar tt set v0='ZLT57ZRR50CTPLPWEF3DZK' where id=5; -update noar ti set v0='ZLT57ZRR50CTPLPWEF3DZK' where id=5; -update noar tt set b1='NZ09BRYPUX' where id=5; -update noar ti set b1='NZ09BRYPUX' where id=5; -update noar tt set v0='V1EHU2C7QDT2N3L4CHDKA' where id=5; -update noar ti set v0='V1EHU2C7QDT2N3L4CHDKA' where id=5; -update noar tt set b2='638DN7UG5FZ608O7SXHCNC29GJA5PPPC' where id=5; -update noar ti set b2='638DN7UG5FZ608O7SXHCNC29GJA5PPPC' where id=5; -update noar tt set v0='PUTUB8X4BT1T09YL6YQKWENNTB3PX4' where id=6; -update noar ti set v0='PUTUB8X4BT1T09YL6YQKWENNTB3PX4' where id=6; -update noar tt set b0='D58FU7Z9Q' where id=6; -update noar ti set b0='D58FU7Z9Q' where id=6; -update noar tt set v0='ZE03V1UICLY9' where id=6; -update noar ti set v0='ZE03V1UICLY9' where id=6; -update noar tt set b1='G5QERH5OM769V' where id=6; -update noar ti set b1='G5QERH5OM769V' where id=6; -update noar tt set v0='F2N5KW2' where id=6; -update noar ti set v0='F2N5KW2' where id=6; -update noar tt set b2='0XP4E3' where id=6; -update noar ti set b2='0XP4E3' where id=6; -update noar tt set v0='FDEBKIWKZ92BH7939WG4JG8D' where id=7; -update noar ti set v0='FDEBKIWKZ92BH7939WG4JG8D' where id=7; -update noar tt set b0='PNJ4QYU' where id=7; -update noar ti set b0='PNJ4QYU' where id=7; -update noar tt set v0='58B485L2JEFXJASSJ79L4P691EPUO' where id=7; -update noar ti set v0='58B485L2JEFXJASSJ79L4P691EPUO' where id=7; -update noar tt set b1='IWBJ43FLI5L284AC88M8FW' where id=7; -update noar ti set b1='IWBJ43FLI5L284AC88M8FW' where id=7; -update noar tt set v0='D6NG6SSKBMFXWP9XPFMX' where id=7; -update noar ti set v0='D6NG6SSKBMFXWP9XPFMX' where id=7; -update noar tt set b2='92PBWEYRMTIXS25K' where id=7; -update noar ti set b2='92PBWEYRMTIXS25K' where id=7; -update noar tt set v0='RFX3QIFOD7A4H8PYIPZ5AM' where id=8; -update noar ti set v0='RFX3QIFOD7A4H8PYIPZ5AM' where id=8; -update noar tt set b0='HYL1WXSL7VBJ8C' where id=8; -update noar ti set b0='HYL1WXSL7VBJ8C' where id=8; -update noar tt set v0='5HBD3J0DYNU0HQC7OTC6E5GD6OS6' where id=8; -update noar ti set v0='5HBD3J0DYNU0HQC7OTC6E5GD6OS6' where id=8; -update noar tt set b1='I93RGDK2S2IBYSJX683M8XI4TM6F' where id=8; -update noar ti set b1='I93RGDK2S2IBYSJX683M8XI4TM6F' where id=8; -update noar tt set v0='86MYBJHMKEIVUYAUHTX5UJC3F' where id=8; -update noar ti set v0='86MYBJHMKEIVUYAUHTX5UJC3F' where id=8; -update noar tt set b2='ACBVT2NWF5QL' where id=8; -update noar ti set b2='ACBVT2NWF5QL' where id=8; -update noar tt set v0='GVXBOH50YB9CZQZSHPBB41LJL7XFPRSZ' where id=9; -update noar ti set v0='GVXBOH50YB9CZQZSHPBB41LJL7XFPRSZ' where id=9; -update noar tt set b0='82YAEK23VOIVH2B' where id=9; -update noar ti set b0='82YAEK23VOIVH2B' where id=9; -update noar tt set v0='AYZ1' where id=9; -update noar ti set v0='AYZ1' where id=9; -update noar tt set b1='J6TWWGAU7Y3SB1ZC1UPAHBU' where id=9; -update noar ti set b1='J6TWWGAU7Y3SB1ZC1UPAHBU' where id=9; -update noar tt set v0='2G1KBSPXPEDJTI9L' where id=9; -update noar ti set v0='2G1KBSPXPEDJTI9L' where id=9; -update noar tt set b2='D25OPT0JBWKE6MZGX' where id=9; -update noar ti set b2='D25OPT0JBWKE6MZGX' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 longblob not null, - b1 mediumblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='19WRBYZHOSNVJZTEW4BX5' where id=1; -update noar ti set v0='19WRBYZHOSNVJZTEW4BX5' where id=1; -update noar tt set b0='5NLLUTTYGXEJG' where id=1; -update noar ti set b0='5NLLUTTYGXEJG' where id=1; -update noar tt set v0='UAZKSN883G60G' where id=1; -update noar ti set v0='UAZKSN883G60G' where id=1; -update noar tt set b1='8ZUGO0XKJZFEUJ2ISHVYO' where id=1; -update noar ti set b1='8ZUGO0XKJZFEUJ2ISHVYO' where id=1; -update noar tt set v0='V6AVPVY2' where id=1; -update noar ti set v0='V6AVPVY2' where id=1; -update noar tt set b2='M83SQO5F7FTUIOF5VA7QXFHFHXP0582G' where id=1; -update noar ti set b2='M83SQO5F7FTUIOF5VA7QXFHFHXP0582G' where id=1; -update noar tt set v0='A55' where id=2; -update noar ti set v0='A55' where id=2; -update noar tt set b0='8BIXZ4SLL8Y3BJ' where id=2; -update noar ti set b0='8BIXZ4SLL8Y3BJ' where id=2; -update noar tt set v0='9E5T5ZHNFPXYJA0WMZQ' where id=2; -update noar ti set v0='9E5T5ZHNFPXYJA0WMZQ' where id=2; -update noar tt set b1='JSUL91' where id=2; -update noar ti set b1='JSUL91' where id=2; -update noar tt set v0='LWLQWLO7TJ91' where id=2; -update noar ti set v0='LWLQWLO7TJ91' where id=2; -update noar tt set b2='3BV4PS98UHJN7A4TI3TW7V92593' where id=2; -update noar ti set b2='3BV4PS98UHJN7A4TI3TW7V92593' where id=2; -update noar tt set v0='Y2HLYCMU5KPDMKR2RQW1KKKL9QKRUBE' where id=3; -update noar ti set v0='Y2HLYCMU5KPDMKR2RQW1KKKL9QKRUBE' where id=3; -update noar tt set b0='U3AWTAA7CY5X3RWK2NJNRVASNTZDC3' where id=3; -update noar ti set b0='U3AWTAA7CY5X3RWK2NJNRVASNTZDC3' where id=3; -update noar tt set v0='159GG0L3U8K8WOVX5KS8' where id=3; -update noar ti set v0='159GG0L3U8K8WOVX5KS8' where id=3; -update noar tt set b1='5JJN0WB5W' where id=3; -update noar ti set b1='5JJN0WB5W' where id=3; -update noar tt set v0='TG4XTMQWTF113PMOQXARUP6CNN898D' where id=3; -update noar ti set v0='TG4XTMQWTF113PMOQXARUP6CNN898D' where id=3; -update noar tt set b2='RDIKUPFLJMXEIO6V3LANGO' where id=3; -update noar ti set b2='RDIKUPFLJMXEIO6V3LANGO' where id=3; -update noar tt set v0='GAQCGTP18GHBEAZ9JHNDB2H12EMBA' where id=4; -update noar ti set v0='GAQCGTP18GHBEAZ9JHNDB2H12EMBA' where id=4; -update noar tt set b0='SJ8DBKD97A0NPJ9UFCZQ5XSPDQOHA' where id=4; -update noar ti set b0='SJ8DBKD97A0NPJ9UFCZQ5XSPDQOHA' where id=4; -update noar tt set v0='HNJ4DMWVAREEK8RM1R8RBQ2UC0USLEL' where id=4; -update noar ti set v0='HNJ4DMWVAREEK8RM1R8RBQ2UC0USLEL' where id=4; -update noar tt set b1='VRD5TZ263YVJE741QUHVQH15V0M9F' where id=4; -update noar ti set b1='VRD5TZ263YVJE741QUHVQH15V0M9F' where id=4; -update noar tt set v0='J3QGZUIH4FNEETIOXN' where id=4; -update noar ti set v0='J3QGZUIH4FNEETIOXN' where id=4; -update noar tt set b2='YA9A8ZG0I2EMDRQPZJJ5G9UQUQI' where id=4; -update noar ti set b2='YA9A8ZG0I2EMDRQPZJJ5G9UQUQI' where id=4; -update noar tt set v0='FJS7OTAA05IFMCA8W4TFQSOPCK51JL' where id=5; -update noar ti set v0='FJS7OTAA05IFMCA8W4TFQSOPCK51JL' where id=5; -update noar tt set b0='E1JVFVFNKMLM31ES2TQ8P' where id=5; -update noar ti set b0='E1JVFVFNKMLM31ES2TQ8P' where id=5; -update noar tt set v0='VE028ZUFMNF2E' where id=5; -update noar ti set v0='VE028ZUFMNF2E' where id=5; -update noar tt set b1='Y' where id=5; -update noar ti set b1='Y' where id=5; -update noar tt set v0='LN2IYOLXWKDU864JUK8UB5' where id=5; -update noar ti set v0='LN2IYOLXWKDU864JUK8UB5' where id=5; -update noar tt set b2='VIM983X3O4P2HHKEPCSJ7T0D4EUT' where id=5; -update noar ti set b2='VIM983X3O4P2HHKEPCSJ7T0D4EUT' where id=5; -update noar tt set v0='G0WVNZ' where id=6; -update noar ti set v0='G0WVNZ' where id=6; -update noar tt set b0='X3YSYRK7GA' where id=6; -update noar ti set b0='X3YSYRK7GA' where id=6; -update noar tt set v0='CWH0XWJOUIA9813EIVCJ22N' where id=6; -update noar ti set v0='CWH0XWJOUIA9813EIVCJ22N' where id=6; -update noar tt set b1='BHQ41RGENUD' where id=6; -update noar ti set b1='BHQ41RGENUD' where id=6; -update noar tt set v0='F1UM7L39EOAO6N847IK7QBNA84QCQ' where id=6; -update noar ti set v0='F1UM7L39EOAO6N847IK7QBNA84QCQ' where id=6; -update noar tt set b2='RORZW0DXLOYT5K18H6C7D9Z1WBK0G' where id=6; -update noar ti set b2='RORZW0DXLOYT5K18H6C7D9Z1WBK0G' where id=6; -update noar tt set v0='8H587RNNMIR2FIE7NH01MP7Y2Q1' where id=7; -update noar ti set v0='8H587RNNMIR2FIE7NH01MP7Y2Q1' where id=7; -update noar tt set b0='RFMGAYF089WSL9EA7FLILK85J81UV' where id=7; -update noar ti set b0='RFMGAYF089WSL9EA7FLILK85J81UV' where id=7; -update noar tt set v0='VJSY6JER0HHFP4MUM9LNBAY' where id=7; -update noar ti set v0='VJSY6JER0HHFP4MUM9LNBAY' where id=7; -update noar tt set b1='H63NZISDDG' where id=7; -update noar ti set b1='H63NZISDDG' where id=7; -update noar tt set v0='STR0C39QZ1GU9K5YZLBRL3QTV5PQX3' where id=7; -update noar ti set v0='STR0C39QZ1GU9K5YZLBRL3QTV5PQX3' where id=7; -update noar tt set b2='X8GU0O3JSG0Z3ZNPZ8LPM9KG8ZUUO' where id=7; -update noar ti set b2='X8GU0O3JSG0Z3ZNPZ8LPM9KG8ZUUO' where id=7; -update noar tt set v0='C5UX96BGJAGGFCBV2LLGD6GPW1' where id=8; -update noar ti set v0='C5UX96BGJAGGFCBV2LLGD6GPW1' where id=8; -update noar tt set b0='6PCSJXA2BV0IX6C4Q83167RZAG3U8' where id=8; -update noar ti set b0='6PCSJXA2BV0IX6C4Q83167RZAG3U8' where id=8; -update noar tt set v0='ZAC159HQCC26J3ZEL3LXQ6GF8F' where id=8; -update noar ti set v0='ZAC159HQCC26J3ZEL3LXQ6GF8F' where id=8; -update noar tt set b1='Q2B8HJL07A8ZI3HF0S15S' where id=8; -update noar ti set b1='Q2B8HJL07A8ZI3HF0S15S' where id=8; -update noar tt set v0='C3RAXUVXJHKZAV458GYVJ' where id=8; -update noar ti set v0='C3RAXUVXJHKZAV458GYVJ' where id=8; -update noar tt set b2='FB99J0JUK' where id=8; -update noar ti set b2='FB99J0JUK' where id=8; -update noar tt set v0='RLFAPPNF' where id=9; -update noar ti set v0='RLFAPPNF' where id=9; -update noar tt set b0='NEW3N1VI5LB08NYG38889DBXBC2NS' where id=9; -update noar ti set b0='NEW3N1VI5LB08NYG38889DBXBC2NS' where id=9; -update noar tt set v0='DELZ1' where id=9; -update noar ti set v0='DELZ1' where id=9; -update noar tt set b1='S' where id=9; -update noar ti set b1='S' where id=9; -update noar tt set v0='JU2' where id=9; -update noar ti set v0='JU2' where id=9; -update noar tt set b2='F139IV56DMN20MZG9DR2D' where id=9; -update noar ti set b2='F139IV56DMN20MZG9DR2D' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 longblob not null, - b1 mediumblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='SV0I' where id=1; -update noar ti set v0='SV0I' where id=1; -update noar tt set b0='KYMCXW37ZZYG9G1WF5ATXZKKKP' where id=1; -update noar ti set b0='KYMCXW37ZZYG9G1WF5ATXZKKKP' where id=1; -update noar tt set v0='MDKL6V' where id=1; -update noar ti set v0='MDKL6V' where id=1; -update noar tt set b1='MD4I9' where id=1; -update noar ti set b1='MD4I9' where id=1; -update noar tt set v0='YRMD9J0S33QTI9IIU0TI' where id=1; -update noar ti set v0='YRMD9J0S33QTI9IIU0TI' where id=1; -update noar tt set b2='K6' where id=1; -update noar ti set b2='K6' where id=1; -update noar tt set v0='6YXAOZDH0MGSQQK7ITJB' where id=2; -update noar ti set v0='6YXAOZDH0MGSQQK7ITJB' where id=2; -update noar tt set b0='KX4604VMO2H8XLHK9991OA' where id=2; -update noar ti set b0='KX4604VMO2H8XLHK9991OA' where id=2; -update noar tt set v0='RWDD74PFGPZU929A69' where id=2; -update noar ti set v0='RWDD74PFGPZU929A69' where id=2; -update noar tt set b1='VEZYHQKCXB79AUNRTN9YHY5P4' where id=2; -update noar ti set b1='VEZYHQKCXB79AUNRTN9YHY5P4' where id=2; -update noar tt set v0='VCCHNOCTD0KD9LNGWARX61ZP37MFEP' where id=2; -update noar ti set v0='VCCHNOCTD0KD9LNGWARX61ZP37MFEP' where id=2; -update noar tt set b2='VC6I970OBZDVQ8FNMS8Q210WSQ' where id=2; -update noar ti set b2='VC6I970OBZDVQ8FNMS8Q210WSQ' where id=2; -update noar tt set v0='NWD' where id=3; -update noar ti set v0='NWD' where id=3; -update noar tt set b0='0VHIDTC5JFAJB9BLX5QRWM7' where id=3; -update noar ti set b0='0VHIDTC5JFAJB9BLX5QRWM7' where id=3; -update noar tt set v0='HITJS54ZP1IHZ68T5AWZV9YPGS6' where id=3; -update noar ti set v0='HITJS54ZP1IHZ68T5AWZV9YPGS6' where id=3; -update noar tt set b1='N9QHQ14Y7' where id=3; -update noar ti set b1='N9QHQ14Y7' where id=3; -update noar tt set v0='E3ZCYHVHJUMRH557COJ9AW66WZL' where id=3; -update noar ti set v0='E3ZCYHVHJUMRH557COJ9AW66WZL' where id=3; -update noar tt set b2='44OU4CUBY8Z8GW7ZEFYYJ' where id=3; -update noar ti set b2='44OU4CUBY8Z8GW7ZEFYYJ' where id=3; -update noar tt set v0='UIA27FV2PWKWD1' where id=4; -update noar ti set v0='UIA27FV2PWKWD1' where id=4; -update noar tt set b0='8QE' where id=4; -update noar ti set b0='8QE' where id=4; -update noar tt set v0='Q' where id=4; -update noar ti set v0='Q' where id=4; -update noar tt set b1='Q2KMULE3' where id=4; -update noar ti set b1='Q2KMULE3' where id=4; -update noar tt set v0='YQ8OSCP9LM9W77YT6LBNZHC' where id=4; -update noar ti set v0='YQ8OSCP9LM9W77YT6LBNZHC' where id=4; -update noar tt set b2='99GLQ19ZZYHHU1WK6GFG' where id=4; -update noar ti set b2='99GLQ19ZZYHHU1WK6GFG' where id=4; -update noar tt set v0='B8IBBYQR3X4V' where id=5; -update noar ti set v0='B8IBBYQR3X4V' where id=5; -update noar tt set b0='F05Z4R0R7CZOBS5' where id=5; -update noar ti set b0='F05Z4R0R7CZOBS5' where id=5; -update noar tt set v0='JMGENIVG' where id=5; -update noar ti set v0='JMGENIVG' where id=5; -update noar tt set b1='FPQFEBR0SNDPFZ10N43BRN' where id=5; -update noar ti set b1='FPQFEBR0SNDPFZ10N43BRN' where id=5; -update noar tt set v0='DWQEAT8R1GU1UP043WW' where id=5; -update noar ti set v0='DWQEAT8R1GU1UP043WW' where id=5; -update noar tt set b2='3249945GFY9EOZR9ZLYQQD65V24' where id=5; -update noar ti set b2='3249945GFY9EOZR9ZLYQQD65V24' where id=5; -update noar tt set v0='48JZTBIWYK5Z' where id=6; -update noar ti set v0='48JZTBIWYK5Z' where id=6; -update noar tt set b0='3H8SVB1P17GET7EPIYG2MQ9ZNJ77Y02O' where id=6; -update noar ti set b0='3H8SVB1P17GET7EPIYG2MQ9ZNJ77Y02O' where id=6; -update noar tt set v0='23K8V7LX0AEOA74U9RQC3RS3GOOD1' where id=6; -update noar ti set v0='23K8V7LX0AEOA74U9RQC3RS3GOOD1' where id=6; -update noar tt set b1='GXADYKHDGDFCQ0N' where id=6; -update noar ti set b1='GXADYKHDGDFCQ0N' where id=6; -update noar tt set v0='DUKD05KLP0VDYFX0MB0JJ3TSG' where id=6; -update noar ti set v0='DUKD05KLP0VDYFX0MB0JJ3TSG' where id=6; -update noar tt set b2='DRP4RVCCMQT577SVE402NZ' where id=6; -update noar ti set b2='DRP4RVCCMQT577SVE402NZ' where id=6; -update noar tt set v0='58RFM0SYRWFARK' where id=7; -update noar ti set v0='58RFM0SYRWFARK' where id=7; -update noar tt set b0='88UZW72BTIRS1' where id=7; -update noar ti set b0='88UZW72BTIRS1' where id=7; -update noar tt set v0='NEQWA2TA40O3' where id=7; -update noar ti set v0='NEQWA2TA40O3' where id=7; -update noar tt set b1='G90ASRGC4BST' where id=7; -update noar ti set b1='G90ASRGC4BST' where id=7; -update noar tt set v0='VOMQ7G7XTVRY' where id=7; -update noar ti set v0='VOMQ7G7XTVRY' where id=7; -update noar tt set b2='96DLBNYMGQMBS' where id=7; -update noar ti set b2='96DLBNYMGQMBS' where id=7; -update noar tt set v0='S' where id=8; -update noar ti set v0='S' where id=8; -update noar tt set b0='J4HL4ATOGX4FJ7MSPDWQLP6Z2D' where id=8; -update noar ti set b0='J4HL4ATOGX4FJ7MSPDWQLP6Z2D' where id=8; -update noar tt set v0='8ZDMVNZSE38MRNPOB' where id=8; -update noar ti set v0='8ZDMVNZSE38MRNPOB' where id=8; -update noar tt set b1='J8VNWGHLWZ4Y6C' where id=8; -update noar ti set b1='J8VNWGHLWZ4Y6C' where id=8; -update noar tt set v0='6KAC16J06245FUPO3I' where id=8; -update noar ti set v0='6KAC16J06245FUPO3I' where id=8; -update noar tt set b2='SGD6M' where id=8; -update noar ti set b2='SGD6M' where id=8; -update noar tt set v0='MYF02N' where id=9; -update noar ti set v0='MYF02N' where id=9; -update noar tt set b0='EMFT87852EDNAY6GCIRU1H5JKKB4' where id=9; -update noar ti set b0='EMFT87852EDNAY6GCIRU1H5JKKB4' where id=9; -update noar tt set v0='LU6IZ9Y4KZ6XYKGEF9YY9' where id=9; -update noar ti set v0='LU6IZ9Y4KZ6XYKGEF9YY9' where id=9; -update noar tt set b1='JY5UGRX' where id=9; -update noar ti set b1='JY5UGRX' where id=9; -update noar tt set v0='3T5PRLJ3MVUN1MU61' where id=9; -update noar ti set v0='3T5PRLJ3MVUN1MU61' where id=9; -update noar tt set b2='295XFAMRT' where id=9; -update noar ti set b2='295XFAMRT' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 longblob null, - b1 mediumblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='53GM4O1DEVA23I501' where id=1; -update noar ti set v0='53GM4O1DEVA23I501' where id=1; -update noar tt set b0='TZHNQO02UW2ZI0NDG' where id=1; -update noar ti set b0='TZHNQO02UW2ZI0NDG' where id=1; -update noar tt set v0='BIWM4X0EL13' where id=1; -update noar ti set v0='BIWM4X0EL13' where id=1; -update noar tt set b1='D1Z0Y6X6VS7EEOCE35HM2H7ZBN5O81OF' where id=1; -update noar ti set b1='D1Z0Y6X6VS7EEOCE35HM2H7ZBN5O81OF' where id=1; -update noar tt set v0='0I9TZG9JE6A9LJTUZZMGY9BIAQM' where id=1; -update noar ti set v0='0I9TZG9JE6A9LJTUZZMGY9BIAQM' where id=1; -update noar tt set b2='DTBGWI45DT0JH5VM18' where id=1; -update noar ti set b2='DTBGWI45DT0JH5VM18' where id=1; -update noar tt set v0='R63SJ9WSTG9QXD5JOEO9A' where id=2; -update noar ti set v0='R63SJ9WSTG9QXD5JOEO9A' where id=2; -update noar tt set b0='C8EBOM3KUSK4UPNGKUC07Q67' where id=2; -update noar ti set b0='C8EBOM3KUSK4UPNGKUC07Q67' where id=2; -update noar tt set v0='MKSC' where id=2; -update noar ti set v0='MKSC' where id=2; -update noar tt set b1='RU92ZFBZ8NA2ZYVQ' where id=2; -update noar ti set b1='RU92ZFBZ8NA2ZYVQ' where id=2; -update noar tt set v0='YHZDKHH5L32PMPVH314BVFC' where id=2; -update noar ti set v0='YHZDKHH5L32PMPVH314BVFC' where id=2; -update noar tt set b2='RBXKHMSY' where id=2; -update noar ti set b2='RBXKHMSY' where id=2; -update noar tt set v0='VABOMGJ0ZOA0EP1SB3XC5NRE' where id=3; -update noar ti set v0='VABOMGJ0ZOA0EP1SB3XC5NRE' where id=3; -update noar tt set b0='G2RXB62681' where id=3; -update noar ti set b0='G2RXB62681' where id=3; -update noar tt set v0='10BU6RUQIPRD4DMKOR46MGBIUN8173' where id=3; -update noar ti set v0='10BU6RUQIPRD4DMKOR46MGBIUN8173' where id=3; -update noar tt set b1='8C7H0E' where id=3; -update noar ti set b1='8C7H0E' where id=3; -update noar tt set v0='TH9LIPWC' where id=3; -update noar ti set v0='TH9LIPWC' where id=3; -update noar tt set b2='VGTX4UL3Q34AY9SZK53MMOF' where id=3; -update noar ti set b2='VGTX4UL3Q34AY9SZK53MMOF' where id=3; -update noar tt set v0='YSM04' where id=4; -update noar ti set v0='YSM04' where id=4; -update noar tt set b0='C5' where id=4; -update noar ti set b0='C5' where id=4; -update noar tt set v0='982IFQ8DXI0MMHXTHGDY' where id=4; -update noar ti set v0='982IFQ8DXI0MMHXTHGDY' where id=4; -update noar tt set b1='I8F93LP9BYT6' where id=4; -update noar ti set b1='I8F93LP9BYT6' where id=4; -update noar tt set v0='SN' where id=4; -update noar ti set v0='SN' where id=4; -update noar tt set b2='EES7IGO1FD72CPSMQ2BGP4' where id=4; -update noar ti set b2='EES7IGO1FD72CPSMQ2BGP4' where id=4; -update noar tt set v0='SIRX7721I' where id=5; -update noar ti set v0='SIRX7721I' where id=5; -update noar tt set b0='V5G0EKJ4AD4BXM2N6VQYJ7' where id=5; -update noar ti set b0='V5G0EKJ4AD4BXM2N6VQYJ7' where id=5; -update noar tt set v0='DVT4X6PV7C8PLYXMMZOTY' where id=5; -update noar ti set v0='DVT4X6PV7C8PLYXMMZOTY' where id=5; -update noar tt set b1='SQUGGBCBBSEEYPOZFKARB397K6LRG' where id=5; -update noar ti set b1='SQUGGBCBBSEEYPOZFKARB397K6LRG' where id=5; -update noar tt set v0='DJS0J6GOUY6JB6UPFUK35AT77U4KZ' where id=5; -update noar ti set v0='DJS0J6GOUY6JB6UPFUK35AT77U4KZ' where id=5; -update noar tt set b2='7T8KSWKU49SF0U52S5P05' where id=5; -update noar ti set b2='7T8KSWKU49SF0U52S5P05' where id=5; -update noar tt set v0='8T2UQUX11AKE2U5AQLEY' where id=6; -update noar ti set v0='8T2UQUX11AKE2U5AQLEY' where id=6; -update noar tt set b0='VMNBOUGFTAXLJ3LCO7Q6CO' where id=6; -update noar ti set b0='VMNBOUGFTAXLJ3LCO7Q6CO' where id=6; -update noar tt set v0='9JDVBN2SMHEZS2L069SRBOUD' where id=6; -update noar ti set v0='9JDVBN2SMHEZS2L069SRBOUD' where id=6; -update noar tt set b1='Z3JOHLX39C0RE' where id=6; -update noar ti set b1='Z3JOHLX39C0RE' where id=6; -update noar tt set v0='GCQZLR4JZ871S' where id=6; -update noar ti set v0='GCQZLR4JZ871S' where id=6; -update noar tt set b2='DT3W' where id=6; -update noar ti set b2='DT3W' where id=6; -update noar tt set v0='FFWRTK6ZH0R8628EPGG9MA' where id=7; -update noar ti set v0='FFWRTK6ZH0R8628EPGG9MA' where id=7; -update noar tt set b0='L3O' where id=7; -update noar ti set b0='L3O' where id=7; -update noar tt set v0='LKN7YQETMUGY' where id=7; -update noar ti set v0='LKN7YQETMUGY' where id=7; -update noar tt set b1='POZS4Z75WVQT4DPLQTPAAFIOI1PYN' where id=7; -update noar ti set b1='POZS4Z75WVQT4DPLQTPAAFIOI1PYN' where id=7; -update noar tt set v0='IQ4HHO7A' where id=7; -update noar ti set v0='IQ4HHO7A' where id=7; -update noar tt set b2='P2UA49ZAEK0' where id=7; -update noar ti set b2='P2UA49ZAEK0' where id=7; -update noar tt set v0='EL06087A6ZHWXO73FIFK2M4ZFZVQ9B' where id=8; -update noar ti set v0='EL06087A6ZHWXO73FIFK2M4ZFZVQ9B' where id=8; -update noar tt set b0='OBG8R' where id=8; -update noar ti set b0='OBG8R' where id=8; -update noar tt set v0='NEZ0B6GW20GINB' where id=8; -update noar ti set v0='NEZ0B6GW20GINB' where id=8; -update noar tt set b1='460I5CCIEHK' where id=8; -update noar ti set b1='460I5CCIEHK' where id=8; -update noar tt set v0='RZ' where id=8; -update noar ti set v0='RZ' where id=8; -update noar tt set b2='2CSP' where id=8; -update noar ti set b2='2CSP' where id=8; -update noar tt set v0='SOTUGJT6OK0JDFU0L' where id=9; -update noar ti set v0='SOTUGJT6OK0JDFU0L' where id=9; -update noar tt set b0='NFFOG4527YDL7PH345Z1FCF' where id=9; -update noar ti set b0='NFFOG4527YDL7PH345Z1FCF' where id=9; -update noar tt set v0='DLNRAMVOZMF7H6Q8VO5WITXRLSCFKAT' where id=9; -update noar ti set v0='DLNRAMVOZMF7H6Q8VO5WITXRLSCFKAT' where id=9; -update noar tt set b1='OOD8' where id=9; -update noar ti set b1='OOD8' where id=9; -update noar tt set v0='KLOIJPKGCKZEM' where id=9; -update noar ti set v0='KLOIJPKGCKZEM' where id=9; -update noar tt set b2='GB9BOCGXG70' where id=9; -update noar ti set b2='GB9BOCGXG70' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 longblob null, - b1 mediumblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='L4RISOX3VAO1PZB' where id=1; -update noar ti set v0='L4RISOX3VAO1PZB' where id=1; -update noar tt set b0='NDO6MKQJVC5K7' where id=1; -update noar ti set b0='NDO6MKQJVC5K7' where id=1; -update noar tt set v0='G' where id=1; -update noar ti set v0='G' where id=1; -update noar tt set b1='G77HCANFT4MZP033AMIGXIN7Z3UPDEHR' where id=1; -update noar ti set b1='G77HCANFT4MZP033AMIGXIN7Z3UPDEHR' where id=1; -update noar tt set v0='J' where id=1; -update noar ti set v0='J' where id=1; -update noar tt set b2='C9YBTLKJSX1KECNYGT' where id=1; -update noar ti set b2='C9YBTLKJSX1KECNYGT' where id=1; -update noar tt set v0='YUJ' where id=2; -update noar ti set v0='YUJ' where id=2; -update noar tt set b0='Y57T0S2AVVHU5LXPH1ATVYEM56UED4U' where id=2; -update noar ti set b0='Y57T0S2AVVHU5LXPH1ATVYEM56UED4U' where id=2; -update noar tt set v0='BM' where id=2; -update noar ti set v0='BM' where id=2; -update noar tt set b1='H1GGH7V709TWJ' where id=2; -update noar ti set b1='H1GGH7V709TWJ' where id=2; -update noar tt set v0='HZGCQ6L3L8V3YJJ4WHRD2BPLJ' where id=2; -update noar ti set v0='HZGCQ6L3L8V3YJJ4WHRD2BPLJ' where id=2; -update noar tt set b2='Q9CEF81OEU' where id=2; -update noar ti set b2='Q9CEF81OEU' where id=2; -update noar tt set v0='2FVB' where id=3; -update noar ti set v0='2FVB' where id=3; -update noar tt set b0='LBI8DQ6PO3WL5HPA43' where id=3; -update noar ti set b0='LBI8DQ6PO3WL5HPA43' where id=3; -update noar tt set v0='TQ89DWT51' where id=3; -update noar ti set v0='TQ89DWT51' where id=3; -update noar tt set b1='UPTOMLQ4Y' where id=3; -update noar ti set b1='UPTOMLQ4Y' where id=3; -update noar tt set v0='EYBXFY9D9SL4CX31PW2A3K8V' where id=3; -update noar ti set v0='EYBXFY9D9SL4CX31PW2A3K8V' where id=3; -update noar tt set b2='ZQKCUAZBZ' where id=3; -update noar ti set b2='ZQKCUAZBZ' where id=3; -update noar tt set v0='HXRKKFK36YSNQSXZIKCD3X0YWFI5JOI' where id=4; -update noar ti set v0='HXRKKFK36YSNQSXZIKCD3X0YWFI5JOI' where id=4; -update noar tt set b0='B814' where id=4; -update noar ti set b0='B814' where id=4; -update noar tt set v0='H1LFUKRH3W82E92YUVTFUE4' where id=4; -update noar ti set v0='H1LFUKRH3W82E92YUVTFUE4' where id=4; -update noar tt set b1='Y57' where id=4; -update noar ti set b1='Y57' where id=4; -update noar tt set v0='ODXL1WRAR1GWSUZW1WITRU02HI' where id=4; -update noar ti set v0='ODXL1WRAR1GWSUZW1WITRU02HI' where id=4; -update noar tt set b2='SO' where id=4; -update noar ti set b2='SO' where id=4; -update noar tt set v0='DCSHUYWOBZSEO2S7P66IBHE1OD' where id=5; -update noar ti set v0='DCSHUYWOBZSEO2S7P66IBHE1OD' where id=5; -update noar tt set b0='5ZC2A' where id=5; -update noar ti set b0='5ZC2A' where id=5; -update noar tt set v0='0PMNIF34E59R9IXHAWK36H' where id=5; -update noar ti set v0='0PMNIF34E59R9IXHAWK36H' where id=5; -update noar tt set b1='WL3S2DPE' where id=5; -update noar ti set b1='WL3S2DPE' where id=5; -update noar tt set v0='L8RLGVU2P36DB' where id=5; -update noar ti set v0='L8RLGVU2P36DB' where id=5; -update noar tt set b2='4C147CE2O8KNI5MJS3LAZQ' where id=5; -update noar ti set b2='4C147CE2O8KNI5MJS3LAZQ' where id=5; -update noar tt set v0='62SHHUOC0ZAXM' where id=6; -update noar ti set v0='62SHHUOC0ZAXM' where id=6; -update noar tt set b0='XJWYW' where id=6; -update noar ti set b0='XJWYW' where id=6; -update noar tt set v0='8DUOQ90ETELRNHQE' where id=6; -update noar ti set v0='8DUOQ90ETELRNHQE' where id=6; -update noar tt set b1='43E1DS2RG2KKYAYPHMBA' where id=6; -update noar ti set b1='43E1DS2RG2KKYAYPHMBA' where id=6; -update noar tt set v0='436UBFXCZX4OIU' where id=6; -update noar ti set v0='436UBFXCZX4OIU' where id=6; -update noar tt set b2='MP6Y' where id=6; -update noar ti set b2='MP6Y' where id=6; -update noar tt set v0='CZE5EHSLWEZ9RQ' where id=7; -update noar ti set v0='CZE5EHSLWEZ9RQ' where id=7; -update noar tt set b0='APGF951C76TFJBXLRZAOQ71W7Q' where id=7; -update noar ti set b0='APGF951C76TFJBXLRZAOQ71W7Q' where id=7; -update noar tt set v0='WGLT01U8U4AI1X9Y' where id=7; -update noar ti set v0='WGLT01U8U4AI1X9Y' where id=7; -update noar tt set b1='82H3YR9DPUU9KA3KRD5QH5MOUXP553M' where id=7; -update noar ti set b1='82H3YR9DPUU9KA3KRD5QH5MOUXP553M' where id=7; -update noar tt set v0='7PEY8MRS5X7TRM' where id=7; -update noar ti set v0='7PEY8MRS5X7TRM' where id=7; -update noar tt set b2='SVT88RR48B50BSQI0ZK' where id=7; -update noar ti set b2='SVT88RR48B50BSQI0ZK' where id=7; -update noar tt set v0='3H0QUW' where id=8; -update noar ti set v0='3H0QUW' where id=8; -update noar tt set b0='EA5NX7TGDM100VBQUNMDBO27NYLMJ' where id=8; -update noar ti set b0='EA5NX7TGDM100VBQUNMDBO27NYLMJ' where id=8; -update noar tt set v0='XKK9U3Y4W58Y1YXABY' where id=8; -update noar ti set v0='XKK9U3Y4W58Y1YXABY' where id=8; -update noar tt set b1='MMIU4NQ5LV0HPBOB4H3MHAFEL4Q' where id=8; -update noar ti set b1='MMIU4NQ5LV0HPBOB4H3MHAFEL4Q' where id=8; -update noar tt set v0='QZBNALCNAQVYNKO3MSAUQ39RH' where id=8; -update noar ti set v0='QZBNALCNAQVYNKO3MSAUQ39RH' where id=8; -update noar tt set b2='NJ5' where id=8; -update noar ti set b2='NJ5' where id=8; -update noar tt set v0='ZL8IDMBL7TWY' where id=9; -update noar ti set v0='ZL8IDMBL7TWY' where id=9; -update noar tt set b0='9XJARF' where id=9; -update noar ti set b0='9XJARF' where id=9; -update noar tt set v0='GI4T4IFWO4S38BY6YUMU2S6B3NIKG' where id=9; -update noar ti set v0='GI4T4IFWO4S38BY6YUMU2S6B3NIKG' where id=9; -update noar tt set b1='A1OJXJQK5G6AX2IN' where id=9; -update noar ti set b1='A1OJXJQK5G6AX2IN' where id=9; -update noar tt set v0='AEL51' where id=9; -update noar ti set v0='AEL51' where id=9; -update noar tt set b2='POBL1ER37YN7Y5U' where id=9; -update noar ti set b2='POBL1ER37YN7Y5U' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 longblob not null, - b1 mediumblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='H9QPY5H2' where id=1; -update noar ti set v0='H9QPY5H2' where id=1; -update noar tt set b0='V63RG8ONNGC7H22GPLNXM4KQUJJ45' where id=1; -update noar ti set b0='V63RG8ONNGC7H22GPLNXM4KQUJJ45' where id=1; -update noar tt set v0='GX' where id=1; -update noar ti set v0='GX' where id=1; -update noar tt set b1='TXG6DGPI8QCPP5E9P495MZZ31WTV5' where id=1; -update noar ti set b1='TXG6DGPI8QCPP5E9P495MZZ31WTV5' where id=1; -update noar tt set v0='AS6VIZXRHXGF5CU5IKO' where id=1; -update noar ti set v0='AS6VIZXRHXGF5CU5IKO' where id=1; -update noar tt set b2='88OECCKK5R3FR32XCG3KWNN0X8DZ7N' where id=1; -update noar ti set b2='88OECCKK5R3FR32XCG3KWNN0X8DZ7N' where id=1; -update noar tt set v0='C2HT0V701JR2O' where id=2; -update noar ti set v0='C2HT0V701JR2O' where id=2; -update noar tt set b0='IJNXOZHVN5USQ28AEO5SQD4Z' where id=2; -update noar ti set b0='IJNXOZHVN5USQ28AEO5SQD4Z' where id=2; -update noar tt set v0='5VJ0KK4PZT083UML4GXEU0BN1' where id=2; -update noar ti set v0='5VJ0KK4PZT083UML4GXEU0BN1' where id=2; -update noar tt set b1='HEMXBGZPJ1J56Z8SK0' where id=2; -update noar ti set b1='HEMXBGZPJ1J56Z8SK0' where id=2; -update noar tt set v0='JIKHKE3WKU4PA04QZOMBPFU' where id=2; -update noar ti set v0='JIKHKE3WKU4PA04QZOMBPFU' where id=2; -update noar tt set b2='8N' where id=2; -update noar ti set b2='8N' where id=2; -update noar tt set v0='CLSINGPZ8C6Y13D36S18S7R' where id=3; -update noar ti set v0='CLSINGPZ8C6Y13D36S18S7R' where id=3; -update noar tt set b0='OODQISFS89FWFTZL5ZSS2RHC8AY' where id=3; -update noar ti set b0='OODQISFS89FWFTZL5ZSS2RHC8AY' where id=3; -update noar tt set v0='V7' where id=3; -update noar ti set v0='V7' where id=3; -update noar tt set b1='KX' where id=3; -update noar ti set b1='KX' where id=3; -update noar tt set v0='ZPR4WFWTT9OY4SYI' where id=3; -update noar ti set v0='ZPR4WFWTT9OY4SYI' where id=3; -update noar tt set b2='4RHWI7EDSPOGMFSMKB6ZEIWDI6XUOFA0' where id=3; -update noar ti set b2='4RHWI7EDSPOGMFSMKB6ZEIWDI6XUOFA0' where id=3; -update noar tt set v0='UUGTGBHO5VKKDS4FPK02MUTFJAA' where id=4; -update noar ti set v0='UUGTGBHO5VKKDS4FPK02MUTFJAA' where id=4; -update noar tt set b0='LHHLWH33C53WE1DSHON' where id=4; -update noar ti set b0='LHHLWH33C53WE1DSHON' where id=4; -update noar tt set v0='OUNKLEXQFOD4OX9413JHJPU7' where id=4; -update noar ti set v0='OUNKLEXQFOD4OX9413JHJPU7' where id=4; -update noar tt set b1='UNAGA5GKZLJE0ZSB710IPCP8RXQ0T' where id=4; -update noar ti set b1='UNAGA5GKZLJE0ZSB710IPCP8RXQ0T' where id=4; -update noar tt set v0='6WU' where id=4; -update noar ti set v0='6WU' where id=4; -update noar tt set b2='DNQ36ZIFDVGLCOWN1NIV' where id=4; -update noar ti set b2='DNQ36ZIFDVGLCOWN1NIV' where id=4; -update noar tt set v0='SFSLP03QKQ0K17DFGB' where id=5; -update noar ti set v0='SFSLP03QKQ0K17DFGB' where id=5; -update noar tt set b0='D323QGG8FK6FN1FZ4S3' where id=5; -update noar ti set b0='D323QGG8FK6FN1FZ4S3' where id=5; -update noar tt set v0='5DH6DVD0JFOS44OHZ8' where id=5; -update noar ti set v0='5DH6DVD0JFOS44OHZ8' where id=5; -update noar tt set b1='7K4OV2' where id=5; -update noar ti set b1='7K4OV2' where id=5; -update noar tt set v0='9BQICLCFA5T6QLZZBSXVG5PGEFBRI6L4' where id=5; -update noar ti set v0='9BQICLCFA5T6QLZZBSXVG5PGEFBRI6L4' where id=5; -update noar tt set b2='38J1RX' where id=5; -update noar ti set b2='38J1RX' where id=5; -update noar tt set v0='PSLRRW8DLIQY' where id=6; -update noar ti set v0='PSLRRW8DLIQY' where id=6; -update noar tt set b0='RCB' where id=6; -update noar ti set b0='RCB' where id=6; -update noar tt set v0='2G1WPRUQ93HVJ' where id=6; -update noar ti set v0='2G1WPRUQ93HVJ' where id=6; -update noar tt set b1='HXCVG' where id=6; -update noar ti set b1='HXCVG' where id=6; -update noar tt set v0='7LWJPRZG1K5B79' where id=6; -update noar ti set v0='7LWJPRZG1K5B79' where id=6; -update noar tt set b2='VD7HW7BWEBA49N47OBJOID4I' where id=6; -update noar ti set b2='VD7HW7BWEBA49N47OBJOID4I' where id=6; -update noar tt set v0='Q7CJZNPSTQUYRC116QWMR2XM6HFKGT' where id=7; -update noar ti set v0='Q7CJZNPSTQUYRC116QWMR2XM6HFKGT' where id=7; -update noar tt set b0='J4B86VXKO9FJVP4LFUSN0' where id=7; -update noar ti set b0='J4B86VXKO9FJVP4LFUSN0' where id=7; -update noar tt set v0='06WSVXH72U' where id=7; -update noar ti set v0='06WSVXH72U' where id=7; -update noar tt set b1='IRO92GHSS2672XRO' where id=7; -update noar ti set b1='IRO92GHSS2672XRO' where id=7; -update noar tt set v0='LRF2G2P8B4AF3JS7D4PZM5B92QA3' where id=7; -update noar ti set v0='LRF2G2P8B4AF3JS7D4PZM5B92QA3' where id=7; -update noar tt set b2='IDJQMHPKEHUORU1XH' where id=7; -update noar ti set b2='IDJQMHPKEHUORU1XH' where id=7; -update noar tt set v0='4CERH4D25I6S1URL3JDXPGX1D18BVDH' where id=8; -update noar ti set v0='4CERH4D25I6S1URL3JDXPGX1D18BVDH' where id=8; -update noar tt set b0='XR30NGMZUMRDS2IXNWY4R' where id=8; -update noar ti set b0='XR30NGMZUMRDS2IXNWY4R' where id=8; -update noar tt set v0='OQC20GU1X5PK' where id=8; -update noar ti set v0='OQC20GU1X5PK' where id=8; -update noar tt set b1='45735S0LT5TME6HYIX6F' where id=8; -update noar ti set b1='45735S0LT5TME6HYIX6F' where id=8; -update noar tt set v0='EIZI4MUW4MJSTN' where id=8; -update noar ti set v0='EIZI4MUW4MJSTN' where id=8; -update noar tt set b2='94Y0H979D2L' where id=8; -update noar ti set b2='94Y0H979D2L' where id=8; -update noar tt set v0='SYNCBWWWWQNF' where id=9; -update noar ti set v0='SYNCBWWWWQNF' where id=9; -update noar tt set b0='6QKFTGROT5RM0B8PD23HEW' where id=9; -update noar ti set b0='6QKFTGROT5RM0B8PD23HEW' where id=9; -update noar tt set v0='OZOHAABVMAIA6KS' where id=9; -update noar ti set v0='OZOHAABVMAIA6KS' where id=9; -update noar tt set b1='FIDV' where id=9; -update noar ti set b1='FIDV' where id=9; -update noar tt set v0='PDXS146I' where id=9; -update noar ti set v0='PDXS146I' where id=9; -update noar tt set b2='O3ICGR' where id=9; -update noar ti set b2='O3ICGR' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 longblob not null, - b1 mediumblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='7OUVWO14BXTC2FFE05VV9NT7Z8OGGP' where id=1; -update noar ti set v0='7OUVWO14BXTC2FFE05VV9NT7Z8OGGP' where id=1; -update noar tt set b0='98DN3F7IA8V' where id=1; -update noar ti set b0='98DN3F7IA8V' where id=1; -update noar tt set v0='9W0H4F5SB78AO86U9KQE9' where id=1; -update noar ti set v0='9W0H4F5SB78AO86U9KQE9' where id=1; -update noar tt set b1='7HP8ET9CUISH3C8ZWC2WEUA7MMT0' where id=1; -update noar ti set b1='7HP8ET9CUISH3C8ZWC2WEUA7MMT0' where id=1; -update noar tt set v0='1WJ71HC77768G81' where id=1; -update noar ti set v0='1WJ71HC77768G81' where id=1; -update noar tt set b2='REN32GGSU8R7DM' where id=1; -update noar ti set b2='REN32GGSU8R7DM' where id=1; -update noar tt set v0='A75CFQOLP' where id=2; -update noar ti set v0='A75CFQOLP' where id=2; -update noar tt set b0='22OVT6BS' where id=2; -update noar ti set b0='22OVT6BS' where id=2; -update noar tt set v0='4UFN3RKW9V8HD9XSR9B3B8N' where id=2; -update noar ti set v0='4UFN3RKW9V8HD9XSR9B3B8N' where id=2; -update noar tt set b1='X4PFCPCQS23ODW37' where id=2; -update noar ti set b1='X4PFCPCQS23ODW37' where id=2; -update noar tt set v0='SBWQR2MOXVSUWYP0J' where id=2; -update noar ti set v0='SBWQR2MOXVSUWYP0J' where id=2; -update noar tt set b2='DH9N82RSVXZGWC7W4QENQ7E4FC855L' where id=2; -update noar ti set b2='DH9N82RSVXZGWC7W4QENQ7E4FC855L' where id=2; -update noar tt set v0='V83OL775PG2MZJR31J4DKOUUIEVZNF6B' where id=3; -update noar ti set v0='V83OL775PG2MZJR31J4DKOUUIEVZNF6B' where id=3; -update noar tt set b0='L4T64W1L5VH9D702' where id=3; -update noar ti set b0='L4T64W1L5VH9D702' where id=3; -update noar tt set v0='RRPULLIIC0BVS0O86H6F8ZYKPFV' where id=3; -update noar ti set v0='RRPULLIIC0BVS0O86H6F8ZYKPFV' where id=3; -update noar tt set b1='MHYSND5NPSN5DZT42' where id=3; -update noar ti set b1='MHYSND5NPSN5DZT42' where id=3; -update noar tt set v0='YKO0QGYV4SWYPHHWC5PKNC' where id=3; -update noar ti set v0='YKO0QGYV4SWYPHHWC5PKNC' where id=3; -update noar tt set b2='6WXSDXOTF4UXKRXZG' where id=3; -update noar ti set b2='6WXSDXOTF4UXKRXZG' where id=3; -update noar tt set v0='LOS63PP8QO9IN378CN' where id=4; -update noar ti set v0='LOS63PP8QO9IN378CN' where id=4; -update noar tt set b0='I' where id=4; -update noar ti set b0='I' where id=4; -update noar tt set v0='OO00J' where id=4; -update noar ti set v0='OO00J' where id=4; -update noar tt set b1='A9QUJK6979S' where id=4; -update noar ti set b1='A9QUJK6979S' where id=4; -update noar tt set v0='WHGA8SK4DHEV0EGB0GTL574JGT9' where id=4; -update noar ti set v0='WHGA8SK4DHEV0EGB0GTL574JGT9' where id=4; -update noar tt set b2='U' where id=4; -update noar ti set b2='U' where id=4; -update noar tt set v0='NHBH4K3' where id=5; -update noar ti set v0='NHBH4K3' where id=5; -update noar tt set b0='JVT3FJDFV2L9X3DN' where id=5; -update noar ti set b0='JVT3FJDFV2L9X3DN' where id=5; -update noar tt set v0='9N0BCC2' where id=5; -update noar ti set v0='9N0BCC2' where id=5; -update noar tt set b1='S9KB5Y06UQCWCRVY2CH' where id=5; -update noar ti set b1='S9KB5Y06UQCWCRVY2CH' where id=5; -update noar tt set v0='7Q3EENH3' where id=5; -update noar ti set v0='7Q3EENH3' where id=5; -update noar tt set b2='Y5LJUO0PBZPW4SA0DLD6IBR' where id=5; -update noar ti set b2='Y5LJUO0PBZPW4SA0DLD6IBR' where id=5; -update noar tt set v0='IU' where id=6; -update noar ti set v0='IU' where id=6; -update noar tt set b0='RR0OLRL25ZZ7' where id=6; -update noar ti set b0='RR0OLRL25ZZ7' where id=6; -update noar tt set v0='IETYL45BUYZZXTN2UBLAP9LIGV11XF8G' where id=6; -update noar ti set v0='IETYL45BUYZZXTN2UBLAP9LIGV11XF8G' where id=6; -update noar tt set b1='M' where id=6; -update noar ti set b1='M' where id=6; -update noar tt set v0='0HGZ' where id=6; -update noar ti set v0='0HGZ' where id=6; -update noar tt set b2='YH339TZ' where id=6; -update noar ti set b2='YH339TZ' where id=6; -update noar tt set v0='5IUUJC4S2OZ' where id=7; -update noar ti set v0='5IUUJC4S2OZ' where id=7; -update noar tt set b0='036C3AXTNVVCB8JTD' where id=7; -update noar ti set b0='036C3AXTNVVCB8JTD' where id=7; -update noar tt set v0='V0DGP8HU3R253WW5ZINO9YAFPENSEP' where id=7; -update noar ti set v0='V0DGP8HU3R253WW5ZINO9YAFPENSEP' where id=7; -update noar tt set b1='L56KD9JRAP' where id=7; -update noar ti set b1='L56KD9JRAP' where id=7; -update noar tt set v0='4XMI7IWACR2CMX585GPUQ2Q67EXM2F' where id=7; -update noar ti set v0='4XMI7IWACR2CMX585GPUQ2Q67EXM2F' where id=7; -update noar tt set b2='S3I7OU419YWCYK15J2R2LMH6L' where id=7; -update noar ti set b2='S3I7OU419YWCYK15J2R2LMH6L' where id=7; -update noar tt set v0='C0TRSA9R3' where id=8; -update noar ti set v0='C0TRSA9R3' where id=8; -update noar tt set b0='3888YQI9FRO' where id=8; -update noar ti set b0='3888YQI9FRO' where id=8; -update noar tt set v0='YOT24JL9P2Y68NR41U66GH' where id=8; -update noar ti set v0='YOT24JL9P2Y68NR41U66GH' where id=8; -update noar tt set b1='EKPV81UGDHBMK0ST1OIKYIK' where id=8; -update noar ti set b1='EKPV81UGDHBMK0ST1OIKYIK' where id=8; -update noar tt set v0='KBC' where id=8; -update noar ti set v0='KBC' where id=8; -update noar tt set b2='H9PNFSSCOB2VSJRDNN' where id=8; -update noar ti set b2='H9PNFSSCOB2VSJRDNN' where id=8; -update noar tt set v0='D14D2YHTPYINSH3LWVER8EQHHLDQ9G2G' where id=9; -update noar ti set v0='D14D2YHTPYINSH3LWVER8EQHHLDQ9G2G' where id=9; -update noar tt set b0='QKDPQEWMDFJZWDDXYW1GFFZ' where id=9; -update noar ti set b0='QKDPQEWMDFJZWDDXYW1GFFZ' where id=9; -update noar tt set v0='LPFSM8ITGUS29850' where id=9; -update noar ti set v0='LPFSM8ITGUS29850' where id=9; -update noar tt set b1='1JANQAZQ2XHESQBMIRINRT' where id=9; -update noar ti set b1='1JANQAZQ2XHESQBMIRINRT' where id=9; -update noar tt set v0='FT5SD3OUHVJGTC2CZL' where id=9; -update noar ti set v0='FT5SD3OUHVJGTC2CZL' where id=9; -update noar tt set b2='DMIWDIZVCAQYKQD8IKZ5PUZR8' where id=9; -update noar ti set b2='DMIWDIZVCAQYKQD8IKZ5PUZR8' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 longblob null, - b1 longblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='M94PP53E' where id=1; -update noar ti set v0='M94PP53E' where id=1; -update noar tt set b0='U' where id=1; -update noar ti set b0='U' where id=1; -update noar tt set v0='NBDQP21L' where id=1; -update noar ti set v0='NBDQP21L' where id=1; -update noar tt set b1='V4VSKNTAOK8KFGS58UQIG3L1BS21R' where id=1; -update noar ti set b1='V4VSKNTAOK8KFGS58UQIG3L1BS21R' where id=1; -update noar tt set v0='O5IP5GUJ5PYMPQO942N' where id=1; -update noar ti set v0='O5IP5GUJ5PYMPQO942N' where id=1; -update noar tt set b2='FJU5NP' where id=1; -update noar ti set b2='FJU5NP' where id=1; -update noar tt set v0='JDU582XDCSNKJIKDEHPQZ6XYG42W' where id=2; -update noar ti set v0='JDU582XDCSNKJIKDEHPQZ6XYG42W' where id=2; -update noar tt set b0='J' where id=2; -update noar ti set b0='J' where id=2; -update noar tt set v0='WUURWEFW93G7B271BX40FY0PMJ7K93' where id=2; -update noar ti set v0='WUURWEFW93G7B271BX40FY0PMJ7K93' where id=2; -update noar tt set b1='6R73AY4Q2ETGHR0' where id=2; -update noar ti set b1='6R73AY4Q2ETGHR0' where id=2; -update noar tt set v0='CU7' where id=2; -update noar ti set v0='CU7' where id=2; -update noar tt set b2='RN4Y19IBZGRQX89S8DLLV6T0EA81BXSB' where id=2; -update noar ti set b2='RN4Y19IBZGRQX89S8DLLV6T0EA81BXSB' where id=2; -update noar tt set v0='JRBUO6S6PDHRZVJ8' where id=3; -update noar ti set v0='JRBUO6S6PDHRZVJ8' where id=3; -update noar tt set b0='YD4I1422ET6A6ABUKL' where id=3; -update noar ti set b0='YD4I1422ET6A6ABUKL' where id=3; -update noar tt set v0='YNIWR64NUS197I' where id=3; -update noar ti set v0='YNIWR64NUS197I' where id=3; -update noar tt set b1='7JRCB2CGUYA5' where id=3; -update noar ti set b1='7JRCB2CGUYA5' where id=3; -update noar tt set v0='T7FI5X9L2WR' where id=3; -update noar ti set v0='T7FI5X9L2WR' where id=3; -update noar tt set b2='UZZ1UDCR148' where id=3; -update noar ti set b2='UZZ1UDCR148' where id=3; -update noar tt set v0='5TZCMG37LETTU' where id=4; -update noar ti set v0='5TZCMG37LETTU' where id=4; -update noar tt set b0='X085TJMND2P8EV1OTDYDFMBQX85' where id=4; -update noar ti set b0='X085TJMND2P8EV1OTDYDFMBQX85' where id=4; -update noar tt set v0='ZYVN78RL8T' where id=4; -update noar ti set v0='ZYVN78RL8T' where id=4; -update noar tt set b1='AQEZW' where id=4; -update noar ti set b1='AQEZW' where id=4; -update noar tt set v0='6R6QEAMCY0TZYP' where id=4; -update noar ti set v0='6R6QEAMCY0TZYP' where id=4; -update noar tt set b2='1WNQQVMJW92CIFW9' where id=4; -update noar ti set b2='1WNQQVMJW92CIFW9' where id=4; -update noar tt set v0='3XJKQ6IXJ4B8D43CPAR4V32MJ' where id=5; -update noar ti set v0='3XJKQ6IXJ4B8D43CPAR4V32MJ' where id=5; -update noar tt set b0='4E7Y5MA8IP' where id=5; -update noar ti set b0='4E7Y5MA8IP' where id=5; -update noar tt set v0='Y69J4HPB7ZXRLML7DDRPT5YCSNPSGKT' where id=5; -update noar ti set v0='Y69J4HPB7ZXRLML7DDRPT5YCSNPSGKT' where id=5; -update noar tt set b1='ZYKXO25V5GK' where id=5; -update noar ti set b1='ZYKXO25V5GK' where id=5; -update noar tt set v0='MB0JAEO4I34IK' where id=5; -update noar ti set v0='MB0JAEO4I34IK' where id=5; -update noar tt set b2='E0WZ8WP' where id=5; -update noar ti set b2='E0WZ8WP' where id=5; -update noar tt set v0='CIMNXD8SZS8KJG04' where id=6; -update noar ti set v0='CIMNXD8SZS8KJG04' where id=6; -update noar tt set b0='UP' where id=6; -update noar ti set b0='UP' where id=6; -update noar tt set v0='TP6' where id=6; -update noar ti set v0='TP6' where id=6; -update noar tt set b1='76OUEUQGJU14C2Y' where id=6; -update noar ti set b1='76OUEUQGJU14C2Y' where id=6; -update noar tt set v0='RSUY34S6LA0L8Z06PSOWMVK1V' where id=6; -update noar ti set v0='RSUY34S6LA0L8Z06PSOWMVK1V' where id=6; -update noar tt set b2='9VRVR2ZZZ' where id=6; -update noar ti set b2='9VRVR2ZZZ' where id=6; -update noar tt set v0='W2H271NI83M4J6BOLE4M2' where id=7; -update noar ti set v0='W2H271NI83M4J6BOLE4M2' where id=7; -update noar tt set b0='XHV5YP2PZ6NRYTIL1' where id=7; -update noar ti set b0='XHV5YP2PZ6NRYTIL1' where id=7; -update noar tt set v0='GC2U99OY' where id=7; -update noar ti set v0='GC2U99OY' where id=7; -update noar tt set b1='ILEMB' where id=7; -update noar ti set b1='ILEMB' where id=7; -update noar tt set v0='UB9GGW8ZRJA9V6LJ5OWS' where id=7; -update noar ti set v0='UB9GGW8ZRJA9V6LJ5OWS' where id=7; -update noar tt set b2='ZHNWPOG4FKJ26JP7F' where id=7; -update noar ti set b2='ZHNWPOG4FKJ26JP7F' where id=7; -update noar tt set v0='PO6CTZ7KW19' where id=8; -update noar ti set v0='PO6CTZ7KW19' where id=8; -update noar tt set b0='QI520YIHI98TQ1N5LBI68D' where id=8; -update noar ti set b0='QI520YIHI98TQ1N5LBI68D' where id=8; -update noar tt set v0='STMKJYF16DQICHEQO4GRII1' where id=8; -update noar ti set v0='STMKJYF16DQICHEQO4GRII1' where id=8; -update noar tt set b1='7PSH4KJKJVAL2CER7MPTZH2QKNF79' where id=8; -update noar ti set b1='7PSH4KJKJVAL2CER7MPTZH2QKNF79' where id=8; -update noar tt set v0='PGR9CDQDZ3' where id=8; -update noar ti set v0='PGR9CDQDZ3' where id=8; -update noar tt set b2='ORRLMZKZA2' where id=8; -update noar ti set b2='ORRLMZKZA2' where id=8; -update noar tt set v0='EK0R7848949LAYLFWEUQGE' where id=9; -update noar ti set v0='EK0R7848949LAYLFWEUQGE' where id=9; -update noar tt set b0='SSVIJFXQH9DZLS6' where id=9; -update noar ti set b0='SSVIJFXQH9DZLS6' where id=9; -update noar tt set v0='NVNNO4Y1BSC1LU6VY1VMK' where id=9; -update noar ti set v0='NVNNO4Y1BSC1LU6VY1VMK' where id=9; -update noar tt set b1='JRS2S3ELCUET9B4FR' where id=9; -update noar ti set b1='JRS2S3ELCUET9B4FR' where id=9; -update noar tt set v0='KAQ7AS72K7QSRXAYCH' where id=9; -update noar ti set v0='KAQ7AS72K7QSRXAYCH' where id=9; -update noar tt set b2='KJ1T1EY0NKK70TXY7ZRAHT' where id=9; -update noar ti set b2='KJ1T1EY0NKK70TXY7ZRAHT' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 longblob null, - b1 longblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='1L3JD2VY' where id=1; -update noar ti set v0='1L3JD2VY' where id=1; -update noar tt set b0='J63FHEY3TYE' where id=1; -update noar ti set b0='J63FHEY3TYE' where id=1; -update noar tt set v0='J0T1S6EVVKUK2V2SQLI' where id=1; -update noar ti set v0='J0T1S6EVVKUK2V2SQLI' where id=1; -update noar tt set b1='M8EKN39WP0YCKOC07' where id=1; -update noar ti set b1='M8EKN39WP0YCKOC07' where id=1; -update noar tt set v0='00JGZEK9K1SXFJYDHI11' where id=1; -update noar ti set v0='00JGZEK9K1SXFJYDHI11' where id=1; -update noar tt set b2='V0EW5HLMRDU5NF5H5OGLJ94F9HVKJKOC' where id=1; -update noar ti set b2='V0EW5HLMRDU5NF5H5OGLJ94F9HVKJKOC' where id=1; -update noar tt set v0='UTZKBP67QK3J1S41LROR5URPRK9' where id=2; -update noar ti set v0='UTZKBP67QK3J1S41LROR5URPRK9' where id=2; -update noar tt set b0='55ZITT0L6ICEHU' where id=2; -update noar ti set b0='55ZITT0L6ICEHU' where id=2; -update noar tt set v0='7GZF5HQWS218K' where id=2; -update noar ti set v0='7GZF5HQWS218K' where id=2; -update noar tt set b1='TKB' where id=2; -update noar ti set b1='TKB' where id=2; -update noar tt set v0='6SYV0P0SVHDJAVCQRYCZOZ66A0C' where id=2; -update noar ti set v0='6SYV0P0SVHDJAVCQRYCZOZ66A0C' where id=2; -update noar tt set b2='IJ0CX' where id=2; -update noar ti set b2='IJ0CX' where id=2; -update noar tt set v0='MW8GN1C4JCI1SYN7OVRBCX' where id=3; -update noar ti set v0='MW8GN1C4JCI1SYN7OVRBCX' where id=3; -update noar tt set b0='GWJSG5MH9Z02VXJTPHPI' where id=3; -update noar ti set b0='GWJSG5MH9Z02VXJTPHPI' where id=3; -update noar tt set v0='2JQV1F5NYWAVL0CK0TIV8PTUAWN' where id=3; -update noar ti set v0='2JQV1F5NYWAVL0CK0TIV8PTUAWN' where id=3; -update noar tt set b1='MPL5521' where id=3; -update noar ti set b1='MPL5521' where id=3; -update noar tt set v0='J7XJU1UU57M8H5EMY3I7N25USHR' where id=3; -update noar ti set v0='J7XJU1UU57M8H5EMY3I7N25USHR' where id=3; -update noar tt set b2='K7673RNUK0TT9S51Y7K5F959PU' where id=3; -update noar ti set b2='K7673RNUK0TT9S51Y7K5F959PU' where id=3; -update noar tt set v0='7LDNXY9VCK40B474NHE3KAQ11S88E0J' where id=4; -update noar ti set v0='7LDNXY9VCK40B474NHE3KAQ11S88E0J' where id=4; -update noar tt set b0='ZP' where id=4; -update noar ti set b0='ZP' where id=4; -update noar tt set v0='4NY64EYY90YH3SP8O' where id=4; -update noar ti set v0='4NY64EYY90YH3SP8O' where id=4; -update noar tt set b1='KZW4P4WIJTC9J5C062URWJ7JJV' where id=4; -update noar ti set b1='KZW4P4WIJTC9J5C062URWJ7JJV' where id=4; -update noar tt set v0='PPAO' where id=4; -update noar ti set v0='PPAO' where id=4; -update noar tt set b2='BYLQW' where id=4; -update noar ti set b2='BYLQW' where id=4; -update noar tt set v0='RF5GJQCAQUY2XDHC6ODWTDYHGEP93T8R' where id=5; -update noar ti set v0='RF5GJQCAQUY2XDHC6ODWTDYHGEP93T8R' where id=5; -update noar tt set b0='OECWMXC0RC32EE' where id=5; -update noar ti set b0='OECWMXC0RC32EE' where id=5; -update noar tt set v0='8E28C6AR3PXWRI89EH6DDXSF2HY' where id=5; -update noar ti set v0='8E28C6AR3PXWRI89EH6DDXSF2HY' where id=5; -update noar tt set b1='WVUNMT6S4LNXQGEEHD' where id=5; -update noar ti set b1='WVUNMT6S4LNXQGEEHD' where id=5; -update noar tt set v0='WEI8DSRUK6OV8SL2K34L0' where id=5; -update noar ti set v0='WEI8DSRUK6OV8SL2K34L0' where id=5; -update noar tt set b2='SWOC2LRCK9363EEG7DUE4GJSTA' where id=5; -update noar ti set b2='SWOC2LRCK9363EEG7DUE4GJSTA' where id=5; -update noar tt set v0='0MHIDNU8MNQT4DO' where id=6; -update noar ti set v0='0MHIDNU8MNQT4DO' where id=6; -update noar tt set b0='GDV0DO6DLW9ANJWAPNRZ3RYLTR3' where id=6; -update noar ti set b0='GDV0DO6DLW9ANJWAPNRZ3RYLTR3' where id=6; -update noar tt set v0='9G75CWCZS3AD2M8PHI9' where id=6; -update noar ti set v0='9G75CWCZS3AD2M8PHI9' where id=6; -update noar tt set b1='AKDMGXHXNSTN180R80N60' where id=6; -update noar ti set b1='AKDMGXHXNSTN180R80N60' where id=6; -update noar tt set v0='N' where id=6; -update noar ti set v0='N' where id=6; -update noar tt set b2='MUX5CQ7MF6OZW01925CXY7YL03Q' where id=6; -update noar ti set b2='MUX5CQ7MF6OZW01925CXY7YL03Q' where id=6; -update noar tt set v0='AKBO' where id=7; -update noar ti set v0='AKBO' where id=7; -update noar tt set b0='FWZY4IR5QNHRZOI36' where id=7; -update noar ti set b0='FWZY4IR5QNHRZOI36' where id=7; -update noar tt set v0='JRC5GCAF8ITLLL' where id=7; -update noar ti set v0='JRC5GCAF8ITLLL' where id=7; -update noar tt set b1='R2VGE0UTR4S4CR3JDLWUIN' where id=7; -update noar ti set b1='R2VGE0UTR4S4CR3JDLWUIN' where id=7; -update noar tt set v0='7362WX3GF1XRADAX9UBKE' where id=7; -update noar ti set v0='7362WX3GF1XRADAX9UBKE' where id=7; -update noar tt set b2='N1A59W2OJPK8E9N2TRMOXYBAQV06I' where id=7; -update noar ti set b2='N1A59W2OJPK8E9N2TRMOXYBAQV06I' where id=7; -update noar tt set v0='RTEVCC' where id=8; -update noar ti set v0='RTEVCC' where id=8; -update noar tt set b0='ZP7LPXPN5HIV' where id=8; -update noar ti set b0='ZP7LPXPN5HIV' where id=8; -update noar tt set v0='7VGJSXTJDJ9C77HU495GVXAG07CA' where id=8; -update noar ti set v0='7VGJSXTJDJ9C77HU495GVXAG07CA' where id=8; -update noar tt set b1='OXMFEK15KOEE0POD' where id=8; -update noar ti set b1='OXMFEK15KOEE0POD' where id=8; -update noar tt set v0='IJ6Z29ON72W4R7QOSZF5J' where id=8; -update noar ti set v0='IJ6Z29ON72W4R7QOSZF5J' where id=8; -update noar tt set b2='3K2QANRH' where id=8; -update noar ti set b2='3K2QANRH' where id=8; -update noar tt set v0='KRQW683FFJKC11SS6VJKB4V4SG804' where id=9; -update noar ti set v0='KRQW683FFJKC11SS6VJKB4V4SG804' where id=9; -update noar tt set b0='ZN96KNGEM' where id=9; -update noar ti set b0='ZN96KNGEM' where id=9; -update noar tt set v0='PT9UPGQ3N06KG4L4' where id=9; -update noar ti set v0='PT9UPGQ3N06KG4L4' where id=9; -update noar tt set b1='RDHE25CMLNDNBJOQ' where id=9; -update noar ti set b1='RDHE25CMLNDNBJOQ' where id=9; -update noar tt set v0='ZG1UAZ1DT' where id=9; -update noar ti set v0='ZG1UAZ1DT' where id=9; -update noar tt set b2='6HMGD7FA2CB0NHTQKBQ28JQC4IB94VJ' where id=9; -update noar ti set b2='6HMGD7FA2CB0NHTQKBQ28JQC4IB94VJ' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 longblob not null, - b1 longblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='WPZR' where id=1; -update noar ti set v0='WPZR' where id=1; -update noar tt set b0='G3DM695' where id=1; -update noar ti set b0='G3DM695' where id=1; -update noar tt set v0='H5PXMFUUOQE4S21WLM2I' where id=1; -update noar ti set v0='H5PXMFUUOQE4S21WLM2I' where id=1; -update noar tt set b1='1JDSP964HWWAF' where id=1; -update noar ti set b1='1JDSP964HWWAF' where id=1; -update noar tt set v0='LZP6G776LMNVSGWDHOTLZ4WKC' where id=1; -update noar ti set v0='LZP6G776LMNVSGWDHOTLZ4WKC' where id=1; -update noar tt set b2='H8BFU' where id=1; -update noar ti set b2='H8BFU' where id=1; -update noar tt set v0='LDMXM02I8VLSKY7PWB0EY5NMHP2' where id=2; -update noar ti set v0='LDMXM02I8VLSKY7PWB0EY5NMHP2' where id=2; -update noar tt set b0='51CFRVIT97EBJNIUGXFD9EE0N1ZA' where id=2; -update noar ti set b0='51CFRVIT97EBJNIUGXFD9EE0N1ZA' where id=2; -update noar tt set v0='F7SD3T00DU7' where id=2; -update noar ti set v0='F7SD3T00DU7' where id=2; -update noar tt set b1='H1BS9' where id=2; -update noar ti set b1='H1BS9' where id=2; -update noar tt set v0='PZRYO8EAAJ6YKD' where id=2; -update noar ti set v0='PZRYO8EAAJ6YKD' where id=2; -update noar tt set b2='KQDT9CN6YQF' where id=2; -update noar ti set b2='KQDT9CN6YQF' where id=2; -update noar tt set v0='WO5JXLL73UKVAJN44X0SDNG2S' where id=3; -update noar ti set v0='WO5JXLL73UKVAJN44X0SDNG2S' where id=3; -update noar tt set b0='3HZH745XMUVTNB4VG' where id=3; -update noar ti set b0='3HZH745XMUVTNB4VG' where id=3; -update noar tt set v0='OX2UGT3Y12J' where id=3; -update noar ti set v0='OX2UGT3Y12J' where id=3; -update noar tt set b1='MHSQ4K85IBC' where id=3; -update noar ti set b1='MHSQ4K85IBC' where id=3; -update noar tt set v0='LFQSS8FY9XHPD2VX1RAVWRUSNQ' where id=3; -update noar ti set v0='LFQSS8FY9XHPD2VX1RAVWRUSNQ' where id=3; -update noar tt set b2='OKTNN3YLFN6WE3NGKJKVAW' where id=3; -update noar ti set b2='OKTNN3YLFN6WE3NGKJKVAW' where id=3; -update noar tt set v0='1TW884EQ6JW' where id=4; -update noar ti set v0='1TW884EQ6JW' where id=4; -update noar tt set b0='O9N9S5EY3J8X5MHLY6K5K' where id=4; -update noar ti set b0='O9N9S5EY3J8X5MHLY6K5K' where id=4; -update noar tt set v0='VK6' where id=4; -update noar ti set v0='VK6' where id=4; -update noar tt set b1='B4E71A90GJCH43R84COC' where id=4; -update noar ti set b1='B4E71A90GJCH43R84COC' where id=4; -update noar tt set v0='ZOPPIAAGIOFJ96KPTWM3CW8R' where id=4; -update noar ti set v0='ZOPPIAAGIOFJ96KPTWM3CW8R' where id=4; -update noar tt set b2='9VZX251NDLJPALUTVJB8UU344O6R' where id=4; -update noar ti set b2='9VZX251NDLJPALUTVJB8UU344O6R' where id=4; -update noar tt set v0='FTJ94X' where id=5; -update noar ti set v0='FTJ94X' where id=5; -update noar tt set b0='VG' where id=5; -update noar ti set b0='VG' where id=5; -update noar tt set v0='8V0Z9I1MAVPY7RXM6QWZ' where id=5; -update noar ti set v0='8V0Z9I1MAVPY7RXM6QWZ' where id=5; -update noar tt set b1='MX1Y0FJCJH22AQV' where id=5; -update noar ti set b1='MX1Y0FJCJH22AQV' where id=5; -update noar tt set v0='67IQDE6' where id=5; -update noar ti set v0='67IQDE6' where id=5; -update noar tt set b2='AMEF2FCZ7Q4XUM8D14HCGFDJVWWB' where id=5; -update noar ti set b2='AMEF2FCZ7Q4XUM8D14HCGFDJVWWB' where id=5; -update noar tt set v0='FZ3RV3865BUCJS43DM2' where id=6; -update noar ti set v0='FZ3RV3865BUCJS43DM2' where id=6; -update noar tt set b0='IMBZQL7D01P2TBFN2DD' where id=6; -update noar ti set b0='IMBZQL7D01P2TBFN2DD' where id=6; -update noar tt set v0='QE' where id=6; -update noar ti set v0='QE' where id=6; -update noar tt set b1='J9GRXSSLTE2GU9U4UIZRW1TFKT826TK' where id=6; -update noar ti set b1='J9GRXSSLTE2GU9U4UIZRW1TFKT826TK' where id=6; -update noar tt set v0='3TKLQ3EZQQTLNHGTZJ' where id=6; -update noar ti set v0='3TKLQ3EZQQTLNHGTZJ' where id=6; -update noar tt set b2='TL3D6O75MDQSR59' where id=6; -update noar ti set b2='TL3D6O75MDQSR59' where id=6; -update noar tt set v0='PXCPFNLIFFDM4OVEJFC7B' where id=7; -update noar ti set v0='PXCPFNLIFFDM4OVEJFC7B' where id=7; -update noar tt set b0='3EOP59WHOD83HAFQDA5NALRI6' where id=7; -update noar ti set b0='3EOP59WHOD83HAFQDA5NALRI6' where id=7; -update noar tt set v0='Y75A549BRD4BTP39' where id=7; -update noar ti set v0='Y75A549BRD4BTP39' where id=7; -update noar tt set b1='TX0QXULZRQWO3BSHZMZHL1ZY35JSCO5' where id=7; -update noar ti set b1='TX0QXULZRQWO3BSHZMZHL1ZY35JSCO5' where id=7; -update noar tt set v0='FI995XA46' where id=7; -update noar ti set v0='FI995XA46' where id=7; -update noar tt set b2='86Y83L1OSHKBG91UTZUZNM3H' where id=7; -update noar ti set b2='86Y83L1OSHKBG91UTZUZNM3H' where id=7; -update noar tt set v0='RINVCVCE21B1EP4PLJFZ' where id=8; -update noar ti set v0='RINVCVCE21B1EP4PLJFZ' where id=8; -update noar tt set b0='V3X309FY2K71HXZU0JT' where id=8; -update noar ti set b0='V3X309FY2K71HXZU0JT' where id=8; -update noar tt set v0='EL6QU3YPDWWIOK4D5PLX6' where id=8; -update noar ti set v0='EL6QU3YPDWWIOK4D5PLX6' where id=8; -update noar tt set b1='B6FJ6RGM0H' where id=8; -update noar ti set b1='B6FJ6RGM0H' where id=8; -update noar tt set v0='2H' where id=8; -update noar ti set v0='2H' where id=8; -update noar tt set b2='ESM' where id=8; -update noar ti set b2='ESM' where id=8; -update noar tt set v0='U4RT6NWD0K9MI6YMRRMDV' where id=9; -update noar ti set v0='U4RT6NWD0K9MI6YMRRMDV' where id=9; -update noar tt set b0='IV2V8LCWM' where id=9; -update noar ti set b0='IV2V8LCWM' where id=9; -update noar tt set v0='6W1G7KT5ZHQ9A' where id=9; -update noar ti set v0='6W1G7KT5ZHQ9A' where id=9; -update noar tt set b1='XRBMM2NCWF5OA64APS4FEA5XF74ZF' where id=9; -update noar ti set b1='XRBMM2NCWF5OA64APS4FEA5XF74ZF' where id=9; -update noar tt set v0='IR' where id=9; -update noar ti set v0='IR' where id=9; -update noar tt set b2='FJRKDT7EKKEYUX2S066P53KLIZJH3TP0' where id=9; -update noar ti set b2='FJRKDT7EKKEYUX2S066P53KLIZJH3TP0' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 longblob not null, - b1 longblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='XGV6B2CN4FUGTLE28OTMFT9NENVBG' where id=1; -update noar ti set v0='XGV6B2CN4FUGTLE28OTMFT9NENVBG' where id=1; -update noar tt set b0='CUYLL78GT4EUHOK' where id=1; -update noar ti set b0='CUYLL78GT4EUHOK' where id=1; -update noar tt set v0='7WWDNDW00GVQW4YWVDT4PWY' where id=1; -update noar ti set v0='7WWDNDW00GVQW4YWVDT4PWY' where id=1; -update noar tt set b1='KWXY61AY1PB' where id=1; -update noar ti set b1='KWXY61AY1PB' where id=1; -update noar tt set v0='V2ZNN5TCST0858HJ68F1' where id=1; -update noar ti set v0='V2ZNN5TCST0858HJ68F1' where id=1; -update noar tt set b2='W45XMBPGLQKJABEP3VK' where id=1; -update noar ti set b2='W45XMBPGLQKJABEP3VK' where id=1; -update noar tt set v0='AF84VXYKP64W33NABCA9AGT4I' where id=2; -update noar ti set v0='AF84VXYKP64W33NABCA9AGT4I' where id=2; -update noar tt set b0='2ILGUHBGV6GQRUJYXXJB' where id=2; -update noar ti set b0='2ILGUHBGV6GQRUJYXXJB' where id=2; -update noar tt set v0='TQNDHYL8BZ3X0IVISYEAXSYL65SZUVX' where id=2; -update noar ti set v0='TQNDHYL8BZ3X0IVISYEAXSYL65SZUVX' where id=2; -update noar tt set b1='D4111SCDP1O5Y7KCNO37' where id=2; -update noar ti set b1='D4111SCDP1O5Y7KCNO37' where id=2; -update noar tt set v0='H8KIAM2KH' where id=2; -update noar ti set v0='H8KIAM2KH' where id=2; -update noar tt set b2='F366PA7' where id=2; -update noar ti set b2='F366PA7' where id=2; -update noar tt set v0='1826MAL2EM0UM0ZXQ3HV' where id=3; -update noar ti set v0='1826MAL2EM0UM0ZXQ3HV' where id=3; -update noar tt set b0='NV3UEGUPA2QD44FL7E5V0XS' where id=3; -update noar ti set b0='NV3UEGUPA2QD44FL7E5V0XS' where id=3; -update noar tt set v0='UPBJI5CH7E0SL50CDCVBLA7J4UPDE' where id=3; -update noar ti set v0='UPBJI5CH7E0SL50CDCVBLA7J4UPDE' where id=3; -update noar tt set b1='ECBYDUZS5I4Z2QNSMKQMR' where id=3; -update noar ti set b1='ECBYDUZS5I4Z2QNSMKQMR' where id=3; -update noar tt set v0='S2YY1MK9HWBUSRRFFN0PROPKO' where id=3; -update noar ti set v0='S2YY1MK9HWBUSRRFFN0PROPKO' where id=3; -update noar tt set b2='ARHSUP5AFRS7E06424N68LBUXYE3X' where id=3; -update noar ti set b2='ARHSUP5AFRS7E06424N68LBUXYE3X' where id=3; -update noar tt set v0='0U03E03PYC4Y2Q52SW6HYF6O6MK9Z8' where id=4; -update noar ti set v0='0U03E03PYC4Y2Q52SW6HYF6O6MK9Z8' where id=4; -update noar tt set b0='ZASFFIH2NEIG28MFXNPURC' where id=4; -update noar ti set b0='ZASFFIH2NEIG28MFXNPURC' where id=4; -update noar tt set v0='0LQNM46E5TWNAZ946SKE305L' where id=4; -update noar ti set v0='0LQNM46E5TWNAZ946SKE305L' where id=4; -update noar tt set b1='C4W0TA9MTPN22VARP53K8Q4WMN' where id=4; -update noar ti set b1='C4W0TA9MTPN22VARP53K8Q4WMN' where id=4; -update noar tt set v0='P1THW093M8SZ6Q6AH7W7PTFEM4JXG' where id=4; -update noar ti set v0='P1THW093M8SZ6Q6AH7W7PTFEM4JXG' where id=4; -update noar tt set b2='EDE445I' where id=4; -update noar ti set b2='EDE445I' where id=4; -update noar tt set v0='7X5LDS8INWJCMVD54AAQB5CS6OI6M' where id=5; -update noar ti set v0='7X5LDS8INWJCMVD54AAQB5CS6OI6M' where id=5; -update noar tt set b0='SMQOVG3YALP' where id=5; -update noar ti set b0='SMQOVG3YALP' where id=5; -update noar tt set v0='6C2EF7MBO6PGPOVZGA9X8LD' where id=5; -update noar ti set v0='6C2EF7MBO6PGPOVZGA9X8LD' where id=5; -update noar tt set b1='GCQ9GPTPK5KT3T8QKI9T6EVPXD9L' where id=5; -update noar ti set b1='GCQ9GPTPK5KT3T8QKI9T6EVPXD9L' where id=5; -update noar tt set v0='2WUSO4MKBBI9ZLQFYS69KC' where id=5; -update noar ti set v0='2WUSO4MKBBI9ZLQFYS69KC' where id=5; -update noar tt set b2='DAN8F10RV' where id=5; -update noar ti set b2='DAN8F10RV' where id=5; -update noar tt set v0='95PE3215C79KFRO5SF' where id=6; -update noar ti set v0='95PE3215C79KFRO5SF' where id=6; -update noar tt set b0='1HR72A5LM' where id=6; -update noar ti set b0='1HR72A5LM' where id=6; -update noar tt set v0='KC7OLKK9I0NIMRXU1B6B' where id=6; -update noar ti set v0='KC7OLKK9I0NIMRXU1B6B' where id=6; -update noar tt set b1='CPAGNKQURE83HTIO7VFFLJXAJQJCJ' where id=6; -update noar ti set b1='CPAGNKQURE83HTIO7VFFLJXAJQJCJ' where id=6; -update noar tt set v0='TN86' where id=6; -update noar ti set v0='TN86' where id=6; -update noar tt set b2='06KF2T8ZZJKFYCPOLYBQYCOY' where id=6; -update noar ti set b2='06KF2T8ZZJKFYCPOLYBQYCOY' where id=6; -update noar tt set v0='6T1G201LY3QO440HTS' where id=7; -update noar ti set v0='6T1G201LY3QO440HTS' where id=7; -update noar tt set b0='CJTEMQMAX58V4' where id=7; -update noar ti set b0='CJTEMQMAX58V4' where id=7; -update noar tt set v0='XIC0CCVY' where id=7; -update noar ti set v0='XIC0CCVY' where id=7; -update noar tt set b1='CVMDDB05QF' where id=7; -update noar ti set b1='CVMDDB05QF' where id=7; -update noar tt set v0='3F17S62' where id=7; -update noar ti set v0='3F17S62' where id=7; -update noar tt set b2='6WO0L' where id=7; -update noar ti set b2='6WO0L' where id=7; -update noar tt set v0='KASOE1EU6ERK2V222O8AT4ZA85W1L' where id=8; -update noar ti set v0='KASOE1EU6ERK2V222O8AT4ZA85W1L' where id=8; -update noar tt set b0='0VVOB2NQ9V' where id=8; -update noar ti set b0='0VVOB2NQ9V' where id=8; -update noar tt set v0='K0DE5AHZ9' where id=8; -update noar ti set v0='K0DE5AHZ9' where id=8; -update noar tt set b1='5TW3W4G5TR0JAG' where id=8; -update noar ti set b1='5TW3W4G5TR0JAG' where id=8; -update noar tt set v0='7YTXOBB424' where id=8; -update noar ti set v0='7YTXOBB424' where id=8; -update noar tt set b2='42DNEUB7I38KRFQZQV0LTRP7VHE5R6D' where id=8; -update noar ti set b2='42DNEUB7I38KRFQZQV0LTRP7VHE5R6D' where id=8; -update noar tt set v0='Z7NFVKW' where id=9; -update noar ti set v0='Z7NFVKW' where id=9; -update noar tt set b0='3YF76E6LFX' where id=9; -update noar ti set b0='3YF76E6LFX' where id=9; -update noar tt set v0='0FLT6Z1' where id=9; -update noar ti set v0='0FLT6Z1' where id=9; -update noar tt set b1='DDL' where id=9; -update noar ti set b1='DDL' where id=9; -update noar tt set v0='UNA71MW4A' where id=9; -update noar ti set v0='UNA71MW4A' where id=9; -update noar tt set b2='R67I38VQDJ0TWU3IYIQYS1Y2FALF' where id=9; -update noar ti set b2='R67I38VQDJ0TWU3IYIQYS1Y2FALF' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 longblob null, - b1 longblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='RNS4I3W1J3GW' where id=1; -update noar ti set v0='RNS4I3W1J3GW' where id=1; -update noar tt set b0='K' where id=1; -update noar ti set b0='K' where id=1; -update noar tt set v0='PNZSM19UHHVRJDMTVEYAGOMRFG4K' where id=1; -update noar ti set v0='PNZSM19UHHVRJDMTVEYAGOMRFG4K' where id=1; -update noar tt set b1='H' where id=1; -update noar ti set b1='H' where id=1; -update noar tt set v0='XPRN99HQV25HEM' where id=1; -update noar ti set v0='XPRN99HQV25HEM' where id=1; -update noar tt set b2='PD2L19MOTZIRQTQUU86Q6L' where id=1; -update noar ti set b2='PD2L19MOTZIRQTQUU86Q6L' where id=1; -update noar tt set v0='MOFU0RL3M8LBA42WQ6D' where id=2; -update noar ti set v0='MOFU0RL3M8LBA42WQ6D' where id=2; -update noar tt set b0='2KRY3ZIIM5WE0K' where id=2; -update noar ti set b0='2KRY3ZIIM5WE0K' where id=2; -update noar tt set v0='D8FOJTEFDDZKK30CVF5QA' where id=2; -update noar ti set v0='D8FOJTEFDDZKK30CVF5QA' where id=2; -update noar tt set b1='ZK3A2VJ509K0O6RRZCPAXYCP' where id=2; -update noar ti set b1='ZK3A2VJ509K0O6RRZCPAXYCP' where id=2; -update noar tt set v0='P43W25Q' where id=2; -update noar ti set v0='P43W25Q' where id=2; -update noar tt set b2='I8ISXTLW742JLU5IBIHGJJPNDB47G822' where id=2; -update noar ti set b2='I8ISXTLW742JLU5IBIHGJJPNDB47G822' where id=2; -update noar tt set v0='8061F2SI' where id=3; -update noar ti set v0='8061F2SI' where id=3; -update noar tt set b0='8N82V' where id=3; -update noar ti set b0='8N82V' where id=3; -update noar tt set v0='R' where id=3; -update noar ti set v0='R' where id=3; -update noar tt set b1='I2GWXPVWH8G6FLMH63QFXV3FW' where id=3; -update noar ti set b1='I2GWXPVWH8G6FLMH63QFXV3FW' where id=3; -update noar tt set v0='DHP' where id=3; -update noar ti set v0='DHP' where id=3; -update noar tt set b2='RKBU38WQAKMVT7SF3' where id=3; -update noar ti set b2='RKBU38WQAKMVT7SF3' where id=3; -update noar tt set v0='Q6V003VR5OSTD01XG12SJ5B2GNDQ' where id=4; -update noar ti set v0='Q6V003VR5OSTD01XG12SJ5B2GNDQ' where id=4; -update noar tt set b0='82SPMMEBINXV0UH3X3S8G8HE5A1VU7' where id=4; -update noar ti set b0='82SPMMEBINXV0UH3X3S8G8HE5A1VU7' where id=4; -update noar tt set v0='7OU1ISCFBSV3UUKASEPAYUO7OZ' where id=4; -update noar ti set v0='7OU1ISCFBSV3UUKASEPAYUO7OZ' where id=4; -update noar tt set b1='BLHDXIKWF616UAW9QF' where id=4; -update noar ti set b1='BLHDXIKWF616UAW9QF' where id=4; -update noar tt set v0='KJZJ88PZFWNXS0YM7X' where id=4; -update noar ti set v0='KJZJ88PZFWNXS0YM7X' where id=4; -update noar tt set b2='QYPRUTZXNHSU35CZK8HNBG4T22WIFJ' where id=4; -update noar ti set b2='QYPRUTZXNHSU35CZK8HNBG4T22WIFJ' where id=4; -update noar tt set v0='KP' where id=5; -update noar ti set v0='KP' where id=5; -update noar tt set b0='308MJM3KH7BNC32TK61EU0JM7TCDV' where id=5; -update noar ti set b0='308MJM3KH7BNC32TK61EU0JM7TCDV' where id=5; -update noar tt set v0='TH8OHLHYRDTJ' where id=5; -update noar ti set v0='TH8OHLHYRDTJ' where id=5; -update noar tt set b1='M1CI6FPW9Q10N81' where id=5; -update noar ti set b1='M1CI6FPW9Q10N81' where id=5; -update noar tt set v0='JHN4LMRYY3HEJ9HHGSOWZCQKCUN0BJA' where id=5; -update noar ti set v0='JHN4LMRYY3HEJ9HHGSOWZCQKCUN0BJA' where id=5; -update noar tt set b2='UYPQ1W' where id=5; -update noar ti set b2='UYPQ1W' where id=5; -update noar tt set v0='U8SRIU0ZMD83JLGR3X4XD8J4M6JICJ' where id=6; -update noar ti set v0='U8SRIU0ZMD83JLGR3X4XD8J4M6JICJ' where id=6; -update noar tt set b0='2EWPEUWI3QE8R' where id=6; -update noar ti set b0='2EWPEUWI3QE8R' where id=6; -update noar tt set v0='3YECOUP56R171E' where id=6; -update noar ti set v0='3YECOUP56R171E' where id=6; -update noar tt set b1='CR0KSW58SREUV8JCN0RN2' where id=6; -update noar ti set b1='CR0KSW58SREUV8JCN0RN2' where id=6; -update noar tt set v0='BDNP7' where id=6; -update noar ti set v0='BDNP7' where id=6; -update noar tt set b2='IIOW82DK9XM' where id=6; -update noar ti set b2='IIOW82DK9XM' where id=6; -update noar tt set v0='N70R04QVDHH296HDZ06BX' where id=7; -update noar ti set v0='N70R04QVDHH296HDZ06BX' where id=7; -update noar tt set b0='LNTYHYFLWMBXN0G5TVJYQ' where id=7; -update noar ti set b0='LNTYHYFLWMBXN0G5TVJYQ' where id=7; -update noar tt set v0='0N3XXT9G' where id=7; -update noar ti set v0='0N3XXT9G' where id=7; -update noar tt set b1='MYQAF0ONB58LUOECPNR3XSCNJP' where id=7; -update noar ti set b1='MYQAF0ONB58LUOECPNR3XSCNJP' where id=7; -update noar tt set v0='P' where id=7; -update noar ti set v0='P' where id=7; -update noar tt set b2='7R' where id=7; -update noar ti set b2='7R' where id=7; -update noar tt set v0='B10NRY3BTS' where id=8; -update noar ti set v0='B10NRY3BTS' where id=8; -update noar tt set b0='0N5Q7WK9HC5JQNAHZZKT0P64TCQ20' where id=8; -update noar ti set b0='0N5Q7WK9HC5JQNAHZZKT0P64TCQ20' where id=8; -update noar tt set v0='EBAJ' where id=8; -update noar ti set v0='EBAJ' where id=8; -update noar tt set b1='NA4MH' where id=8; -update noar ti set b1='NA4MH' where id=8; -update noar tt set v0='LKV7LSLDUOLF' where id=8; -update noar ti set v0='LKV7LSLDUOLF' where id=8; -update noar tt set b2='KZKAETOA2IOQNHBF3YLO7MCB6MA7KCUN' where id=8; -update noar ti set b2='KZKAETOA2IOQNHBF3YLO7MCB6MA7KCUN' where id=8; -update noar tt set v0='PLO9ZRD' where id=9; -update noar ti set v0='PLO9ZRD' where id=9; -update noar tt set b0='FPYO1H2C' where id=9; -update noar ti set b0='FPYO1H2C' where id=9; -update noar tt set v0='14GSNG9Q' where id=9; -update noar ti set v0='14GSNG9Q' where id=9; -update noar tt set b1='4' where id=9; -update noar ti set b1='4' where id=9; -update noar tt set v0='E3SCJRMQ6G6F6TX6ICW5P' where id=9; -update noar ti set v0='E3SCJRMQ6G6F6TX6ICW5P' where id=9; -update noar tt set b2='68SUYGFTJ5KPL0I9TKYIH7621NDA8P3E' where id=9; -update noar ti set b2='68SUYGFTJ5KPL0I9TKYIH7621NDA8P3E' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 longblob null, - b1 longblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='CS9Q254KLP' where id=1; -update noar ti set v0='CS9Q254KLP' where id=1; -update noar tt set b0='7WPRXV76R9V1B38LVOBV' where id=1; -update noar ti set b0='7WPRXV76R9V1B38LVOBV' where id=1; -update noar tt set v0='DAIF8SA8J' where id=1; -update noar ti set v0='DAIF8SA8J' where id=1; -update noar tt set b1='DGP5W5CGAM4T8Q7ZDHP9RFMLFM6OHV3' where id=1; -update noar ti set b1='DGP5W5CGAM4T8Q7ZDHP9RFMLFM6OHV3' where id=1; -update noar tt set v0='Y' where id=1; -update noar ti set v0='Y' where id=1; -update noar tt set b2='X1S9MDJXP4WU0CN1TZOM' where id=1; -update noar ti set b2='X1S9MDJXP4WU0CN1TZOM' where id=1; -update noar tt set v0='5HTBOH64WLYI8VTZ2KPY' where id=2; -update noar ti set v0='5HTBOH64WLYI8VTZ2KPY' where id=2; -update noar tt set b0='Q6QHONHJS5ZDDXNDRG2CSMV' where id=2; -update noar ti set b0='Q6QHONHJS5ZDDXNDRG2CSMV' where id=2; -update noar tt set v0='EACY23ORG92C9JSWFMW' where id=2; -update noar ti set v0='EACY23ORG92C9JSWFMW' where id=2; -update noar tt set b1='7' where id=2; -update noar ti set b1='7' where id=2; -update noar tt set v0='R' where id=2; -update noar ti set v0='R' where id=2; -update noar tt set b2='4O4DSK2AE1GPCXUCOUCHW31JI' where id=2; -update noar ti set b2='4O4DSK2AE1GPCXUCOUCHW31JI' where id=2; -update noar tt set v0='25YZM4NXC7CYXBGF07TN' where id=3; -update noar ti set v0='25YZM4NXC7CYXBGF07TN' where id=3; -update noar tt set b0='L6DF4QQ9475Q' where id=3; -update noar ti set b0='L6DF4QQ9475Q' where id=3; -update noar tt set v0='2WB66PK33NENKA1XTOHN2ZLXQKBZT2ZO' where id=3; -update noar ti set v0='2WB66PK33NENKA1XTOHN2ZLXQKBZT2ZO' where id=3; -update noar tt set b1='YRC4C8L4' where id=3; -update noar ti set b1='YRC4C8L4' where id=3; -update noar tt set v0='98KKGSKSIH6HJEK5DB2ZR8SU' where id=3; -update noar ti set v0='98KKGSKSIH6HJEK5DB2ZR8SU' where id=3; -update noar tt set b2='Q1P17AXJS9JAI7P42125FM37O9GU9PTI' where id=3; -update noar ti set b2='Q1P17AXJS9JAI7P42125FM37O9GU9PTI' where id=3; -update noar tt set v0='9EDQ4' where id=4; -update noar ti set v0='9EDQ4' where id=4; -update noar tt set b0='0IN6FZ50PF' where id=4; -update noar ti set b0='0IN6FZ50PF' where id=4; -update noar tt set v0='5UFO' where id=4; -update noar ti set v0='5UFO' where id=4; -update noar tt set b1='FO0JY9MS2US3J' where id=4; -update noar ti set b1='FO0JY9MS2US3J' where id=4; -update noar tt set v0='RC02ULX' where id=4; -update noar ti set v0='RC02ULX' where id=4; -update noar tt set b2='6E6BRKCK0WC81R' where id=4; -update noar ti set b2='6E6BRKCK0WC81R' where id=4; -update noar tt set v0='D6MOP6W9K3SDUI6' where id=5; -update noar ti set v0='D6MOP6W9K3SDUI6' where id=5; -update noar tt set b0='KZFAOQM' where id=5; -update noar ti set b0='KZFAOQM' where id=5; -update noar tt set v0='6SZRRG3IGEK7NUMS' where id=5; -update noar ti set v0='6SZRRG3IGEK7NUMS' where id=5; -update noar tt set b1='EICPN4INYQEZQWITTMGOMBA8R' where id=5; -update noar ti set b1='EICPN4INYQEZQWITTMGOMBA8R' where id=5; -update noar tt set v0='REG15BWE8ZELOHE5W3KBQY73AYPFJVQ' where id=5; -update noar ti set v0='REG15BWE8ZELOHE5W3KBQY73AYPFJVQ' where id=5; -update noar tt set b2='7PD67UF3V' where id=5; -update noar ti set b2='7PD67UF3V' where id=5; -update noar tt set v0='A' where id=6; -update noar ti set v0='A' where id=6; -update noar tt set b0='58UBNRGEJDS' where id=6; -update noar ti set b0='58UBNRGEJDS' where id=6; -update noar tt set v0='MFMGN6M1H' where id=6; -update noar ti set v0='MFMGN6M1H' where id=6; -update noar tt set b1='XLZ5IZECMEN' where id=6; -update noar ti set b1='XLZ5IZECMEN' where id=6; -update noar tt set v0='XS077DOGPLG9' where id=6; -update noar ti set v0='XS077DOGPLG9' where id=6; -update noar tt set b2='TM1IXJZICPYFEKI3ENPOX' where id=6; -update noar ti set b2='TM1IXJZICPYFEKI3ENPOX' where id=6; -update noar tt set v0='9MSMK' where id=7; -update noar ti set v0='9MSMK' where id=7; -update noar tt set b0='GPTNW5L08I6TLTZAY43DO9S40JDLNNP4' where id=7; -update noar ti set b0='GPTNW5L08I6TLTZAY43DO9S40JDLNNP4' where id=7; -update noar tt set v0='4N' where id=7; -update noar ti set v0='4N' where id=7; -update noar tt set b1='PEUHCVD' where id=7; -update noar ti set b1='PEUHCVD' where id=7; -update noar tt set v0='ZVXNPB2L' where id=7; -update noar ti set v0='ZVXNPB2L' where id=7; -update noar tt set b2='HQ5' where id=7; -update noar ti set b2='HQ5' where id=7; -update noar tt set v0='9JAXSTZW8WQL8QGDQJHN2I7' where id=8; -update noar ti set v0='9JAXSTZW8WQL8QGDQJHN2I7' where id=8; -update noar tt set b0='1TBGG6' where id=8; -update noar ti set b0='1TBGG6' where id=8; -update noar tt set v0='2X4PTHT17ACMOF1V9W1T3DR1N9C' where id=8; -update noar ti set v0='2X4PTHT17ACMOF1V9W1T3DR1N9C' where id=8; -update noar tt set b1='VJJSHVFA0HJW6' where id=8; -update noar ti set b1='VJJSHVFA0HJW6' where id=8; -update noar tt set v0='S43ZCA00D4TA' where id=8; -update noar ti set v0='S43ZCA00D4TA' where id=8; -update noar tt set b2='U87Y1ZI79LS81FDZO5M' where id=8; -update noar ti set b2='U87Y1ZI79LS81FDZO5M' where id=8; -update noar tt set v0='H0WWS2402O29YYP66' where id=9; -update noar ti set v0='H0WWS2402O29YYP66' where id=9; -update noar tt set b0='KC11SOA9J2GDP626DDVR8C52V9' where id=9; -update noar ti set b0='KC11SOA9J2GDP626DDVR8C52V9' where id=9; -update noar tt set v0='E6U3TQ958J5' where id=9; -update noar ti set v0='E6U3TQ958J5' where id=9; -update noar tt set b1='5K09D88' where id=9; -update noar ti set b1='5K09D88' where id=9; -update noar tt set v0='HU79FN8GSBNS' where id=9; -update noar ti set v0='HU79FN8GSBNS' where id=9; -update noar tt set b2='F6RY9' where id=9; -update noar ti set b2='F6RY9' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 longblob not null, - b1 longblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='A6ANV7NSH933E5' where id=1; -update noar ti set v0='A6ANV7NSH933E5' where id=1; -update noar tt set b0='BPKSZP2HZQ6SZW8GMBX4L2B8I3HZ' where id=1; -update noar ti set b0='BPKSZP2HZQ6SZW8GMBX4L2B8I3HZ' where id=1; -update noar tt set v0='OQ7W198AGXBD3IO1DWG62NLYA76XCS4Y' where id=1; -update noar ti set v0='OQ7W198AGXBD3IO1DWG62NLYA76XCS4Y' where id=1; -update noar tt set b1='E7ELAFZXZBQV1XK' where id=1; -update noar ti set b1='E7ELAFZXZBQV1XK' where id=1; -update noar tt set v0='VCV6TJH506G5ZLQ0BW' where id=1; -update noar ti set v0='VCV6TJH506G5ZLQ0BW' where id=1; -update noar tt set b2='7YFAIVW57L7FYSN7GGP5WD74LKRK' where id=1; -update noar ti set b2='7YFAIVW57L7FYSN7GGP5WD74LKRK' where id=1; -update noar tt set v0='98D9SDV4O2SNNII4' where id=2; -update noar ti set v0='98D9SDV4O2SNNII4' where id=2; -update noar tt set b0='DH77Y0GI0JR95NQ' where id=2; -update noar ti set b0='DH77Y0GI0JR95NQ' where id=2; -update noar tt set v0='6FDAGC91F5TISAS7ZZH' where id=2; -update noar ti set v0='6FDAGC91F5TISAS7ZZH' where id=2; -update noar tt set b1='99BNM8V0AOIDQXD8I8OP3QWZTZ' where id=2; -update noar ti set b1='99BNM8V0AOIDQXD8I8OP3QWZTZ' where id=2; -update noar tt set v0='TG0FS6HZMLEBNT2' where id=2; -update noar ti set v0='TG0FS6HZMLEBNT2' where id=2; -update noar tt set b2='BDI4RIXP9GBD4ALELRFRFB3FZYO72AP9' where id=2; -update noar ti set b2='BDI4RIXP9GBD4ALELRFRFB3FZYO72AP9' where id=2; -update noar tt set v0='P392DGUO462HTZOALHL5IF' where id=3; -update noar ti set v0='P392DGUO462HTZOALHL5IF' where id=3; -update noar tt set b0='NKKNCTN5LB2EYS8A6XFBCKIL60TBX3D8' where id=3; -update noar ti set b0='NKKNCTN5LB2EYS8A6XFBCKIL60TBX3D8' where id=3; -update noar tt set v0='FE4S1G028HVD3XAKKH8737Z' where id=3; -update noar ti set v0='FE4S1G028HVD3XAKKH8737Z' where id=3; -update noar tt set b1='3F90' where id=3; -update noar ti set b1='3F90' where id=3; -update noar tt set v0='RNYG6I5DORKGNB9WCMJ' where id=3; -update noar ti set v0='RNYG6I5DORKGNB9WCMJ' where id=3; -update noar tt set b2='FMY7CL5EPQVXP6B9BG2XU618ANN3CAW' where id=3; -update noar ti set b2='FMY7CL5EPQVXP6B9BG2XU618ANN3CAW' where id=3; -update noar tt set v0='WVENPQGA8H9FMF36X0J' where id=4; -update noar ti set v0='WVENPQGA8H9FMF36X0J' where id=4; -update noar tt set b0='HQ0OP' where id=4; -update noar ti set b0='HQ0OP' where id=4; -update noar tt set v0='4LU3AEZE81FUX8Z6MY' where id=4; -update noar ti set v0='4LU3AEZE81FUX8Z6MY' where id=4; -update noar tt set b1='VJ05LIWF8OZQO9JGHW65GGQ8KE29' where id=4; -update noar ti set b1='VJ05LIWF8OZQO9JGHW65GGQ8KE29' where id=4; -update noar tt set v0='PP85AV3O2OEVS156RS93TW22AX' where id=4; -update noar ti set v0='PP85AV3O2OEVS156RS93TW22AX' where id=4; -update noar tt set b2='C1TH' where id=4; -update noar ti set b2='C1TH' where id=4; -update noar tt set v0='800VZ2QP4912P0R' where id=5; -update noar ti set v0='800VZ2QP4912P0R' where id=5; -update noar tt set b0='7NUMQPOL9' where id=5; -update noar ti set b0='7NUMQPOL9' where id=5; -update noar tt set v0='VHDCUTUOG3FMHGZQMG9' where id=5; -update noar ti set v0='VHDCUTUOG3FMHGZQMG9' where id=5; -update noar tt set b1='QWTG38457QTQQLIJ2' where id=5; -update noar ti set b1='QWTG38457QTQQLIJ2' where id=5; -update noar tt set v0='095SQL0' where id=5; -update noar ti set v0='095SQL0' where id=5; -update noar tt set b2='Y' where id=5; -update noar ti set b2='Y' where id=5; -update noar tt set v0='K178IINGDC68SDV7LHE8FVP2XN' where id=6; -update noar ti set v0='K178IINGDC68SDV7LHE8FVP2XN' where id=6; -update noar tt set b0='GZR2QLEZQYQZTY0ZU93EH8N' where id=6; -update noar ti set b0='GZR2QLEZQYQZTY0ZU93EH8N' where id=6; -update noar tt set v0='8DJW8E5PTKT0EGKIW5Q3' where id=6; -update noar ti set v0='8DJW8E5PTKT0EGKIW5Q3' where id=6; -update noar tt set b1='4O2VZFLEGDKNKOC7ETD' where id=6; -update noar ti set b1='4O2VZFLEGDKNKOC7ETD' where id=6; -update noar tt set v0='0K' where id=6; -update noar ti set v0='0K' where id=6; -update noar tt set b2='CJUHF' where id=6; -update noar ti set b2='CJUHF' where id=6; -update noar tt set v0='6K0IDWZF28JFV7NU8J56XU9' where id=7; -update noar ti set v0='6K0IDWZF28JFV7NU8J56XU9' where id=7; -update noar tt set b0='NEVP9MAVQYNGQKNTLEJZB' where id=7; -update noar ti set b0='NEVP9MAVQYNGQKNTLEJZB' where id=7; -update noar tt set v0='P193ISM679CWQAN3YZ1CX' where id=7; -update noar ti set v0='P193ISM679CWQAN3YZ1CX' where id=7; -update noar tt set b1='GR2DGQZ0KVH' where id=7; -update noar ti set b1='GR2DGQZ0KVH' where id=7; -update noar tt set v0='FL0X17THORT5D' where id=7; -update noar ti set v0='FL0X17THORT5D' where id=7; -update noar tt set b2='Q7GWF572WM6L9WVDSF' where id=7; -update noar ti set b2='Q7GWF572WM6L9WVDSF' where id=7; -update noar tt set v0='KPC6UMRJB56' where id=8; -update noar ti set v0='KPC6UMRJB56' where id=8; -update noar tt set b0='TVUWIP75WL4V' where id=8; -update noar ti set b0='TVUWIP75WL4V' where id=8; -update noar tt set v0='OP8I1WB' where id=8; -update noar ti set v0='OP8I1WB' where id=8; -update noar tt set b1='CWBA8RK1EQ99U1V9W5F' where id=8; -update noar ti set b1='CWBA8RK1EQ99U1V9W5F' where id=8; -update noar tt set v0='RFQYJVYOH' where id=8; -update noar ti set v0='RFQYJVYOH' where id=8; -update noar tt set b2='W' where id=8; -update noar ti set b2='W' where id=8; -update noar tt set v0='DW0WCVWTKE3XHPRQ4J3OEMCMS5' where id=9; -update noar ti set v0='DW0WCVWTKE3XHPRQ4J3OEMCMS5' where id=9; -update noar tt set b0='0KHBKIEK7W1JSUM' where id=9; -update noar ti set b0='0KHBKIEK7W1JSUM' where id=9; -update noar tt set v0='ITRMQ974LJ2NE28B02' where id=9; -update noar ti set v0='ITRMQ974LJ2NE28B02' where id=9; -update noar tt set b1='HWUWMDV0' where id=9; -update noar ti set b1='HWUWMDV0' where id=9; -update noar tt set v0='TDWHIGSGUGSYNVSZYX9NTII9FJ4WWDB' where id=9; -update noar ti set v0='TDWHIGSGUGSYNVSZYX9NTII9FJ4WWDB' where id=9; -update noar tt set b2='UTOHP5DRDYBN6Q6899ENS9GOJK0F2E' where id=9; -update noar ti set b2='UTOHP5DRDYBN6Q6899ENS9GOJK0F2E' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 longblob not null, - b1 longblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='Q40VL7193ODVFE34T0' where id=1; -update noar ti set v0='Q40VL7193ODVFE34T0' where id=1; -update noar tt set b0='V5RV4TSPQX69PELX7KFQ' where id=1; -update noar ti set b0='V5RV4TSPQX69PELX7KFQ' where id=1; -update noar tt set v0='N27OG3J6PDRCD9XHEGOV' where id=1; -update noar ti set v0='N27OG3J6PDRCD9XHEGOV' where id=1; -update noar tt set b1='DPOAV8BV68G65GP17BLB' where id=1; -update noar ti set b1='DPOAV8BV68G65GP17BLB' where id=1; -update noar tt set v0='6VGDZEP5' where id=1; -update noar ti set v0='6VGDZEP5' where id=1; -update noar tt set b2='NOAV4L703NB5SX2PHZCYKHB6T7R' where id=1; -update noar ti set b2='NOAV4L703NB5SX2PHZCYKHB6T7R' where id=1; -update noar tt set v0='5' where id=2; -update noar ti set v0='5' where id=2; -update noar tt set b0='JA5M692FAUPH8YD' where id=2; -update noar ti set b0='JA5M692FAUPH8YD' where id=2; -update noar tt set v0='1ZKDTEB5AQIE1KH2U2XKGNY4X' where id=2; -update noar ti set v0='1ZKDTEB5AQIE1KH2U2XKGNY4X' where id=2; -update noar tt set b1='QBHKWUOHKNWAI7MLPGNE' where id=2; -update noar ti set b1='QBHKWUOHKNWAI7MLPGNE' where id=2; -update noar tt set v0='7TUMK6RPH3PUX00RGQCQMXDADENN9' where id=2; -update noar ti set v0='7TUMK6RPH3PUX00RGQCQMXDADENN9' where id=2; -update noar tt set b2='WA6KO98E3ZVIC7J3ITSDIFRMK' where id=2; -update noar ti set b2='WA6KO98E3ZVIC7J3ITSDIFRMK' where id=2; -update noar tt set v0='5OWI6XJWKNJON16O9ZGTQPC7RRPA' where id=3; -update noar ti set v0='5OWI6XJWKNJON16O9ZGTQPC7RRPA' where id=3; -update noar tt set b0='SR' where id=3; -update noar ti set b0='SR' where id=3; -update noar tt set v0='F1K' where id=3; -update noar ti set v0='F1K' where id=3; -update noar tt set b1='AQ2QJ7XCGIRWMVWXX4CDGLDN4EONK916' where id=3; -update noar ti set b1='AQ2QJ7XCGIRWMVWXX4CDGLDN4EONK916' where id=3; -update noar tt set v0='SOQ0K4503O03ESH' where id=3; -update noar ti set v0='SOQ0K4503O03ESH' where id=3; -update noar tt set b2='4BVCVILSWJYAL5930IHFA5' where id=3; -update noar ti set b2='4BVCVILSWJYAL5930IHFA5' where id=3; -update noar tt set v0='N4SDF' where id=4; -update noar ti set v0='N4SDF' where id=4; -update noar tt set b0='MTA9KCYYXOYLI2FTG4' where id=4; -update noar ti set b0='MTA9KCYYXOYLI2FTG4' where id=4; -update noar tt set v0='V' where id=4; -update noar ti set v0='V' where id=4; -update noar tt set b1='Q6VI4V0S3KDWU288TWPPNUE3TXSTP' where id=4; -update noar ti set b1='Q6VI4V0S3KDWU288TWPPNUE3TXSTP' where id=4; -update noar tt set v0='QZYJJSL6HI042NII36SYYJ7AMKT' where id=4; -update noar ti set v0='QZYJJSL6HI042NII36SYYJ7AMKT' where id=4; -update noar tt set b2='8AQEABPWUV78W5YT2V102MM4' where id=4; -update noar ti set b2='8AQEABPWUV78W5YT2V102MM4' where id=4; -update noar tt set v0='GRHFPPL3IQ4GVYLDNICBCN' where id=5; -update noar ti set v0='GRHFPPL3IQ4GVYLDNICBCN' where id=5; -update noar tt set b0='H5Z5OGF7XANTER6ZOEVXYIPUGFS2O8B' where id=5; -update noar ti set b0='H5Z5OGF7XANTER6ZOEVXYIPUGFS2O8B' where id=5; -update noar tt set v0='LYQ5HW5740I8N1VXQLZGK0A5QIT6M9KN' where id=5; -update noar ti set v0='LYQ5HW5740I8N1VXQLZGK0A5QIT6M9KN' where id=5; -update noar tt set b1='4D3XK3OKDDJ6TT708JSAYVKMIYVSQBB' where id=5; -update noar ti set b1='4D3XK3OKDDJ6TT708JSAYVKMIYVSQBB' where id=5; -update noar tt set v0='C423N11' where id=5; -update noar ti set v0='C423N11' where id=5; -update noar tt set b2='18SAG6I70M0VNUXILFU3DB' where id=5; -update noar ti set b2='18SAG6I70M0VNUXILFU3DB' where id=5; -update noar tt set v0='BY3UG98SS5RW9C26HFU' where id=6; -update noar ti set v0='BY3UG98SS5RW9C26HFU' where id=6; -update noar tt set b0='SE5' where id=6; -update noar ti set b0='SE5' where id=6; -update noar tt set v0='1ERKY7HPB6K0OTUC8HM' where id=6; -update noar ti set v0='1ERKY7HPB6K0OTUC8HM' where id=6; -update noar tt set b1='4E77VC4CBINAZUZNE5BM27222MO' where id=6; -update noar ti set b1='4E77VC4CBINAZUZNE5BM27222MO' where id=6; -update noar tt set v0='DFT0U5FT' where id=6; -update noar ti set v0='DFT0U5FT' where id=6; -update noar tt set b2='QC7JGSHVI7V0C5WSNGK53WHUMOVGKT3' where id=6; -update noar ti set b2='QC7JGSHVI7V0C5WSNGK53WHUMOVGKT3' where id=6; -update noar tt set v0='2Y' where id=7; -update noar ti set v0='2Y' where id=7; -update noar tt set b0='EM32N4XLC5D2MQ02' where id=7; -update noar ti set b0='EM32N4XLC5D2MQ02' where id=7; -update noar tt set v0='QKT599MG06SJB1B5PD' where id=7; -update noar ti set v0='QKT599MG06SJB1B5PD' where id=7; -update noar tt set b1='WQ37RIMMI2HUS3EJC7L5V6ZN' where id=7; -update noar ti set b1='WQ37RIMMI2HUS3EJC7L5V6ZN' where id=7; -update noar tt set v0='2CAMWPI8S0RBBE8ZJDGQT6VS0W8A1C' where id=7; -update noar ti set v0='2CAMWPI8S0RBBE8ZJDGQT6VS0W8A1C' where id=7; -update noar tt set b2='AWAH' where id=7; -update noar ti set b2='AWAH' where id=7; -update noar tt set v0='BV6XAGWTXN5ITRI40AZ371G4KE' where id=8; -update noar ti set v0='BV6XAGWTXN5ITRI40AZ371G4KE' where id=8; -update noar tt set b0='I5ZXYVERHZ' where id=8; -update noar ti set b0='I5ZXYVERHZ' where id=8; -update noar tt set v0='S2VEAZ855XWA' where id=8; -update noar ti set v0='S2VEAZ855XWA' where id=8; -update noar tt set b1='8X7EWHZ0' where id=8; -update noar ti set b1='8X7EWHZ0' where id=8; -update noar tt set v0='4JPJ2CSDDEKUUEB1USG7YFIW7' where id=8; -update noar ti set v0='4JPJ2CSDDEKUUEB1USG7YFIW7' where id=8; -update noar tt set b2='DII' where id=8; -update noar ti set b2='DII' where id=8; -update noar tt set v0='5A75G60KPYCWOOIPVYX53PYYBI' where id=9; -update noar ti set v0='5A75G60KPYCWOOIPVYX53PYYBI' where id=9; -update noar tt set b0='Z3U12JGTDJOGDUVR0T4WO7BL8K8TTOP' where id=9; -update noar ti set b0='Z3U12JGTDJOGDUVR0T4WO7BL8K8TTOP' where id=9; -update noar tt set v0='EBF0CHA3W1A8Z2QTSQZUPZM5WV' where id=9; -update noar ti set v0='EBF0CHA3W1A8Z2QTSQZUPZM5WV' where id=9; -update noar tt set b1='NPF3SKH' where id=9; -update noar ti set b1='NPF3SKH' where id=9; -update noar tt set v0='DJ51X5O799KN1EDNT4' where id=9; -update noar ti set v0='DJ51X5O799KN1EDNT4' where id=9; -update noar tt set b2='H83LWYFZOFYE93FTIE' where id=9; -update noar ti set b2='H83LWYFZOFYE93FTIE' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 longblob null, - b1 longblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='L216J66DXUFDB6' where id=1; -update noar ti set v0='L216J66DXUFDB6' where id=1; -update noar tt set b0='3JNUGSHGGWC31BA5K1EU9I77T4L' where id=1; -update noar ti set b0='3JNUGSHGGWC31BA5K1EU9I77T4L' where id=1; -update noar tt set v0='PPQ9FYR21W6FFX3KU1X4JPPU' where id=1; -update noar ti set v0='PPQ9FYR21W6FFX3KU1X4JPPU' where id=1; -update noar tt set b1='RE4L8HV2585YPI892R' where id=1; -update noar ti set b1='RE4L8HV2585YPI892R' where id=1; -update noar tt set v0='3Z2DRB5P6HHXLRVONQVQ31KU35UMP' where id=1; -update noar ti set v0='3Z2DRB5P6HHXLRVONQVQ31KU35UMP' where id=1; -update noar tt set b2='OXHDY9R2L7IQ5KR5RWF33CGAR29Y' where id=1; -update noar ti set b2='OXHDY9R2L7IQ5KR5RWF33CGAR29Y' where id=1; -update noar tt set v0='RM9ZO9IFY4E' where id=2; -update noar ti set v0='RM9ZO9IFY4E' where id=2; -update noar tt set b0='JTPNEJ' where id=2; -update noar ti set b0='JTPNEJ' where id=2; -update noar tt set v0='I2N3XAFX5W8CVQ' where id=2; -update noar ti set v0='I2N3XAFX5W8CVQ' where id=2; -update noar tt set b1='Z2EBTZN3I9VYPWJO03' where id=2; -update noar ti set b1='Z2EBTZN3I9VYPWJO03' where id=2; -update noar tt set v0='5T7RB44ZHU4I89UF' where id=2; -update noar ti set v0='5T7RB44ZHU4I89UF' where id=2; -update noar tt set b2='D82GI1XWTUV4VI' where id=2; -update noar ti set b2='D82GI1XWTUV4VI' where id=2; -update noar tt set v0='WV27QB711I60AJO' where id=3; -update noar ti set v0='WV27QB711I60AJO' where id=3; -update noar tt set b0='7CZY1W6K' where id=3; -update noar ti set b0='7CZY1W6K' where id=3; -update noar tt set v0='82AMGMC' where id=3; -update noar ti set v0='82AMGMC' where id=3; -update noar tt set b1='JUT92YANW4G4QUPJ6' where id=3; -update noar ti set b1='JUT92YANW4G4QUPJ6' where id=3; -update noar tt set v0='55UNJDOWWEIL7VV' where id=3; -update noar ti set v0='55UNJDOWWEIL7VV' where id=3; -update noar tt set b2='0UW9' where id=3; -update noar ti set b2='0UW9' where id=3; -update noar tt set v0='BB75FMHPUEPO' where id=4; -update noar ti set v0='BB75FMHPUEPO' where id=4; -update noar tt set b0='K3BQ360V2A526TWDYD' where id=4; -update noar ti set b0='K3BQ360V2A526TWDYD' where id=4; -update noar tt set v0='6J8N' where id=4; -update noar ti set v0='6J8N' where id=4; -update noar tt set b1='AMU5' where id=4; -update noar ti set b1='AMU5' where id=4; -update noar tt set v0='B27R' where id=4; -update noar ti set v0='B27R' where id=4; -update noar tt set b2='O' where id=4; -update noar ti set b2='O' where id=4; -update noar tt set v0='31' where id=5; -update noar ti set v0='31' where id=5; -update noar tt set b0='KDDL7JOZVMSPAUA7BOR' where id=5; -update noar ti set b0='KDDL7JOZVMSPAUA7BOR' where id=5; -update noar tt set v0='HV' where id=5; -update noar ti set v0='HV' where id=5; -update noar tt set b1='TSG40YRD03OJ63PPU4OF6ZGW87RB' where id=5; -update noar ti set b1='TSG40YRD03OJ63PPU4OF6ZGW87RB' where id=5; -update noar tt set v0='UV' where id=5; -update noar ti set v0='UV' where id=5; -update noar tt set b2='49O' where id=5; -update noar ti set b2='49O' where id=5; -update noar tt set v0='G0UGH40M3BR89' where id=6; -update noar ti set v0='G0UGH40M3BR89' where id=6; -update noar tt set b0='8XRKCLUP' where id=6; -update noar ti set b0='8XRKCLUP' where id=6; -update noar tt set v0='4G08NKNGG56U8C0SNGBK' where id=6; -update noar ti set v0='4G08NKNGG56U8C0SNGBK' where id=6; -update noar tt set b1='U5Q1FGOWIUFTTB1' where id=6; -update noar ti set b1='U5Q1FGOWIUFTTB1' where id=6; -update noar tt set v0='5DXSCQPO2C0DTMTC' where id=6; -update noar ti set v0='5DXSCQPO2C0DTMTC' where id=6; -update noar tt set b2='UW2I29J5X6Y9T2KGY' where id=6; -update noar ti set b2='UW2I29J5X6Y9T2KGY' where id=6; -update noar tt set v0='B5MQYIXBK' where id=7; -update noar ti set v0='B5MQYIXBK' where id=7; -update noar tt set b0='PDD50CBPYGLVREJYRQZKYBOLV2HLX5' where id=7; -update noar ti set b0='PDD50CBPYGLVREJYRQZKYBOLV2HLX5' where id=7; -update noar tt set v0='FZMC' where id=7; -update noar ti set v0='FZMC' where id=7; -update noar tt set b1='H' where id=7; -update noar ti set b1='H' where id=7; -update noar tt set v0='1105F5OL' where id=7; -update noar ti set v0='1105F5OL' where id=7; -update noar tt set b2='8WTAS92G8A1JIOBV8LC9HL' where id=7; -update noar ti set b2='8WTAS92G8A1JIOBV8LC9HL' where id=7; -update noar tt set v0='IKTS1RCAWVE6WAN6AG548' where id=8; -update noar ti set v0='IKTS1RCAWVE6WAN6AG548' where id=8; -update noar tt set b0='F7V79OAO' where id=8; -update noar ti set b0='F7V79OAO' where id=8; -update noar tt set v0='N' where id=8; -update noar ti set v0='N' where id=8; -update noar tt set b1='7AL' where id=8; -update noar ti set b1='7AL' where id=8; -update noar tt set v0='5N' where id=8; -update noar ti set v0='5N' where id=8; -update noar tt set b2='SYMCSRP0MIP' where id=8; -update noar ti set b2='SYMCSRP0MIP' where id=8; -update noar tt set v0='0HOU7X8TI958RM4PEDD9FULXK' where id=9; -update noar ti set v0='0HOU7X8TI958RM4PEDD9FULXK' where id=9; -update noar tt set b0='Q2R324PIM' where id=9; -update noar ti set b0='Q2R324PIM' where id=9; -update noar tt set v0='6VZASL7MA5ZCHVAWDV18' where id=9; -update noar ti set v0='6VZASL7MA5ZCHVAWDV18' where id=9; -update noar tt set b1='1FNS0848JEGELV3YS9IC8E3BR' where id=9; -update noar ti set b1='1FNS0848JEGELV3YS9IC8E3BR' where id=9; -update noar tt set v0='BMJWRDRBCBQF9KT6PCERSX' where id=9; -update noar ti set v0='BMJWRDRBCBQF9KT6PCERSX' where id=9; -update noar tt set b2='KFUEK5STYM94I' where id=9; -update noar ti set b2='KFUEK5STYM94I' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 longblob null, - b1 longblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='2ZJAGF2H06JVV4Y2ZJNQD0GF' where id=1; -update noar ti set v0='2ZJAGF2H06JVV4Y2ZJNQD0GF' where id=1; -update noar tt set b0='7' where id=1; -update noar ti set b0='7' where id=1; -update noar tt set v0='C1MVXJGRTB43I150HUW6D7UFXKB' where id=1; -update noar ti set v0='C1MVXJGRTB43I150HUW6D7UFXKB' where id=1; -update noar tt set b1='E6' where id=1; -update noar ti set b1='E6' where id=1; -update noar tt set v0='XT4IDAUGS53L338TX89' where id=1; -update noar ti set v0='XT4IDAUGS53L338TX89' where id=1; -update noar tt set b2='IUDCY3UHT7Y9W' where id=1; -update noar ti set b2='IUDCY3UHT7Y9W' where id=1; -update noar tt set v0='L88M2' where id=2; -update noar ti set v0='L88M2' where id=2; -update noar tt set b0='BCAWJ80C3Q9BLJUVZTMFD99OZW4C4' where id=2; -update noar ti set b0='BCAWJ80C3Q9BLJUVZTMFD99OZW4C4' where id=2; -update noar tt set v0='MPS' where id=2; -update noar ti set v0='MPS' where id=2; -update noar tt set b1='7N60NEE3MAHIMHIUMWN5WG' where id=2; -update noar ti set b1='7N60NEE3MAHIMHIUMWN5WG' where id=2; -update noar tt set v0='GIZ9GB' where id=2; -update noar ti set v0='GIZ9GB' where id=2; -update noar tt set b2='RVZ' where id=2; -update noar ti set b2='RVZ' where id=2; -update noar tt set v0='L60O11U' where id=3; -update noar ti set v0='L60O11U' where id=3; -update noar tt set b0='KZP4M65M628QHB0RYW' where id=3; -update noar ti set b0='KZP4M65M628QHB0RYW' where id=3; -update noar tt set v0='CUXBJ92HROQOV971UZWU5SVGCG' where id=3; -update noar ti set v0='CUXBJ92HROQOV971UZWU5SVGCG' where id=3; -update noar tt set b1='10VMTK4HEZJAFAEIDBP6U39ZC' where id=3; -update noar ti set b1='10VMTK4HEZJAFAEIDBP6U39ZC' where id=3; -update noar tt set v0='9CNV5JGB3AI85KXEFMFBNURYTS' where id=3; -update noar ti set v0='9CNV5JGB3AI85KXEFMFBNURYTS' where id=3; -update noar tt set b2='684VPUULD43UWPO' where id=3; -update noar ti set b2='684VPUULD43UWPO' where id=3; -update noar tt set v0='UDN8MYPX7XB5XPNDN2PSQV26OJEAEYM' where id=4; -update noar ti set v0='UDN8MYPX7XB5XPNDN2PSQV26OJEAEYM' where id=4; -update noar tt set b0='9WOPXKBQ' where id=4; -update noar ti set b0='9WOPXKBQ' where id=4; -update noar tt set v0='JEN39H2SEXEXNXUG42NMABL1A' where id=4; -update noar ti set v0='JEN39H2SEXEXNXUG42NMABL1A' where id=4; -update noar tt set b1='2UZ1W' where id=4; -update noar ti set b1='2UZ1W' where id=4; -update noar tt set v0='G9ZPRRG5E1TY7F' where id=4; -update noar ti set v0='G9ZPRRG5E1TY7F' where id=4; -update noar tt set b2='FDAH3UGHO' where id=4; -update noar ti set b2='FDAH3UGHO' where id=4; -update noar tt set v0='WOB4FBKF78WUVG9NTW8XFSDWH' where id=5; -update noar ti set v0='WOB4FBKF78WUVG9NTW8XFSDWH' where id=5; -update noar tt set b0='W' where id=5; -update noar ti set b0='W' where id=5; -update noar tt set v0='P6GWJUW3XAL7UZBXVOIS3993' where id=5; -update noar ti set v0='P6GWJUW3XAL7UZBXVOIS3993' where id=5; -update noar tt set b1='KR2NGIJF1MTZ8' where id=5; -update noar ti set b1='KR2NGIJF1MTZ8' where id=5; -update noar tt set v0='WIRUG' where id=5; -update noar ti set v0='WIRUG' where id=5; -update noar tt set b2='HS8W2DE589RPAE250WW' where id=5; -update noar ti set b2='HS8W2DE589RPAE250WW' where id=5; -update noar tt set v0='E39EDBEO9S' where id=6; -update noar ti set v0='E39EDBEO9S' where id=6; -update noar tt set b0='22Z5GXHKLC53NZND1NKM9H0L78K8' where id=6; -update noar ti set b0='22Z5GXHKLC53NZND1NKM9H0L78K8' where id=6; -update noar tt set v0='0IUUGFJO1OVUWJL990DW3HDBX09' where id=6; -update noar ti set v0='0IUUGFJO1OVUWJL990DW3HDBX09' where id=6; -update noar tt set b1='3B2087MV2AY99M7XB1C' where id=6; -update noar ti set b1='3B2087MV2AY99M7XB1C' where id=6; -update noar tt set v0='AB0UC53R' where id=6; -update noar ti set v0='AB0UC53R' where id=6; -update noar tt set b2='QRWUE5CM4F2U' where id=6; -update noar ti set b2='QRWUE5CM4F2U' where id=6; -update noar tt set v0='7YBB0BVQ24OZMZUO7QUD6Z8F3A0KG' where id=7; -update noar ti set v0='7YBB0BVQ24OZMZUO7QUD6Z8F3A0KG' where id=7; -update noar tt set b0='87Y2MYJSYXJ4IF8UGOFFZKMS' where id=7; -update noar ti set b0='87Y2MYJSYXJ4IF8UGOFFZKMS' where id=7; -update noar tt set v0='73LSTH0BXZW36OA6LVJMPKUIWE' where id=7; -update noar ti set v0='73LSTH0BXZW36OA6LVJMPKUIWE' where id=7; -update noar tt set b1='65TPUR989EH09W3O' where id=7; -update noar ti set b1='65TPUR989EH09W3O' where id=7; -update noar tt set v0='G7I6LERBGXSS6BJLP921Q' where id=7; -update noar ti set v0='G7I6LERBGXSS6BJLP921Q' where id=7; -update noar tt set b2='J18GXSZP2GVXBP4ZKLHCYETYWUKN8F6' where id=7; -update noar ti set b2='J18GXSZP2GVXBP4ZKLHCYETYWUKN8F6' where id=7; -update noar tt set v0='9X43MHCEDI8DRYO8H15EZ0GZ6QC2Z2' where id=8; -update noar ti set v0='9X43MHCEDI8DRYO8H15EZ0GZ6QC2Z2' where id=8; -update noar tt set b0='AO' where id=8; -update noar ti set b0='AO' where id=8; -update noar tt set v0='ZJQ5M56YT65VCYZ2JE9YQ4H' where id=8; -update noar ti set v0='ZJQ5M56YT65VCYZ2JE9YQ4H' where id=8; -update noar tt set b1='6RNRART7CFE50XV0RW93NXQ5VBN4V2VO' where id=8; -update noar ti set b1='6RNRART7CFE50XV0RW93NXQ5VBN4V2VO' where id=8; -update noar tt set v0='FTG4DVK1A54X3XZYPEAHV0' where id=8; -update noar ti set v0='FTG4DVK1A54X3XZYPEAHV0' where id=8; -update noar tt set b2='RAWRYFCQQ6HHOXHGP9GKMT2Q' where id=8; -update noar ti set b2='RAWRYFCQQ6HHOXHGP9GKMT2Q' where id=8; -update noar tt set v0='FP7' where id=9; -update noar ti set v0='FP7' where id=9; -update noar tt set b0='ZZB6DKBO' where id=9; -update noar ti set b0='ZZB6DKBO' where id=9; -update noar tt set v0='XWKRYVS' where id=9; -update noar ti set v0='XWKRYVS' where id=9; -update noar tt set b1='IG5805TARFTSG7RNXW0DT5' where id=9; -update noar ti set b1='IG5805TARFTSG7RNXW0DT5' where id=9; -update noar tt set v0='30I4C1L2MDYQOTKLJMG2T3JW' where id=9; -update noar ti set v0='30I4C1L2MDYQOTKLJMG2T3JW' where id=9; -update noar tt set b2='6ZZ3WQVOMUNKSW3QKQ6HV4ELR' where id=9; -update noar ti set b2='6ZZ3WQVOMUNKSW3QKQ6HV4ELR' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 longblob not null, - b1 longblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='NWHSJHAYMED9LHNQZM5P' where id=1; -update noar ti set v0='NWHSJHAYMED9LHNQZM5P' where id=1; -update noar tt set b0='KN2SZIYVYZYJBWGSMD' where id=1; -update noar ti set b0='KN2SZIYVYZYJBWGSMD' where id=1; -update noar tt set v0='X05D' where id=1; -update noar ti set v0='X05D' where id=1; -update noar tt set b1='T4H9PY559DJA88U2CYKJIJL0S4H27YTE' where id=1; -update noar ti set b1='T4H9PY559DJA88U2CYKJIJL0S4H27YTE' where id=1; -update noar tt set v0='KQK7ZE4SN5OH1A9K31YNBOM60EE3' where id=1; -update noar ti set v0='KQK7ZE4SN5OH1A9K31YNBOM60EE3' where id=1; -update noar tt set b2='C791GBP' where id=1; -update noar ti set b2='C791GBP' where id=1; -update noar tt set v0='3' where id=2; -update noar ti set v0='3' where id=2; -update noar tt set b0='09EU3XY68D172BL7MYJ0NO9' where id=2; -update noar ti set b0='09EU3XY68D172BL7MYJ0NO9' where id=2; -update noar tt set v0='N87PW08T2CZAMKKNKX0K5UKI4VQQ' where id=2; -update noar ti set v0='N87PW08T2CZAMKKNKX0K5UKI4VQQ' where id=2; -update noar tt set b1='LUDSRYIBTIKXVKNTP' where id=2; -update noar ti set b1='LUDSRYIBTIKXVKNTP' where id=2; -update noar tt set v0='A2CGYVFWZJKJP601A5G3S' where id=2; -update noar ti set v0='A2CGYVFWZJKJP601A5G3S' where id=2; -update noar tt set b2='3' where id=2; -update noar ti set b2='3' where id=2; -update noar tt set v0='SK7DCQTR6AOV' where id=3; -update noar ti set v0='SK7DCQTR6AOV' where id=3; -update noar tt set b0='TX044FKN6TVMY7Q8Q9C24' where id=3; -update noar ti set b0='TX044FKN6TVMY7Q8Q9C24' where id=3; -update noar tt set v0='3K7Q27B2CX8UC7SXW' where id=3; -update noar ti set v0='3K7Q27B2CX8UC7SXW' where id=3; -update noar tt set b1='LEXADGPDYKORJA' where id=3; -update noar ti set b1='LEXADGPDYKORJA' where id=3; -update noar tt set v0='L9SQ7WJW7MH4LS6CVM6LF8H7UVDQA4KN' where id=3; -update noar ti set v0='L9SQ7WJW7MH4LS6CVM6LF8H7UVDQA4KN' where id=3; -update noar tt set b2='F613SNE0I' where id=3; -update noar ti set b2='F613SNE0I' where id=3; -update noar tt set v0='4PYXQ382NKFQ0IK4P302NZ0' where id=4; -update noar ti set v0='4PYXQ382NKFQ0IK4P302NZ0' where id=4; -update noar tt set b0='B66OJJ44SST1SYVD38P' where id=4; -update noar ti set b0='B66OJJ44SST1SYVD38P' where id=4; -update noar tt set v0='6OXVVQAPA6' where id=4; -update noar ti set v0='6OXVVQAPA6' where id=4; -update noar tt set b1='L4T43M8L3' where id=4; -update noar ti set b1='L4T43M8L3' where id=4; -update noar tt set v0='UBZIT7HDIA783R8O2' where id=4; -update noar ti set v0='UBZIT7HDIA783R8O2' where id=4; -update noar tt set b2='NEQN3Z5MWI4ZPX8NL' where id=4; -update noar ti set b2='NEQN3Z5MWI4ZPX8NL' where id=4; -update noar tt set v0='HZ2SH0JQ11CMBGBGRPLJH01ZQNKGO2PT' where id=5; -update noar ti set v0='HZ2SH0JQ11CMBGBGRPLJH01ZQNKGO2PT' where id=5; -update noar tt set b0='548PXEBUH5Y25MHBGI' where id=5; -update noar ti set b0='548PXEBUH5Y25MHBGI' where id=5; -update noar tt set v0='RO' where id=5; -update noar ti set v0='RO' where id=5; -update noar tt set b1='2YNKHL05H' where id=5; -update noar ti set b1='2YNKHL05H' where id=5; -update noar tt set v0='BR' where id=5; -update noar ti set v0='BR' where id=5; -update noar tt set b2='VOX0H24KGGL9MZ' where id=5; -update noar ti set b2='VOX0H24KGGL9MZ' where id=5; -update noar tt set v0='F0NLNKPVIYFEZE5M0KALUA8TR8BIOR99' where id=6; -update noar ti set v0='F0NLNKPVIYFEZE5M0KALUA8TR8BIOR99' where id=6; -update noar tt set b0='W8I0B94RUSAH2' where id=6; -update noar ti set b0='W8I0B94RUSAH2' where id=6; -update noar tt set v0='6CFG33' where id=6; -update noar ti set v0='6CFG33' where id=6; -update noar tt set b1='2ZZY6U' where id=6; -update noar ti set b1='2ZZY6U' where id=6; -update noar tt set v0='HK08953CN6BQ4JXBK6661PCX' where id=6; -update noar ti set v0='HK08953CN6BQ4JXBK6661PCX' where id=6; -update noar tt set b2='6A3FMJIP78G6HIT7S' where id=6; -update noar ti set b2='6A3FMJIP78G6HIT7S' where id=6; -update noar tt set v0='9DU2GIVO84MYR7ZMZM9ZECGI0004C' where id=7; -update noar ti set v0='9DU2GIVO84MYR7ZMZM9ZECGI0004C' where id=7; -update noar tt set b0='HN3X0NCPFNCK' where id=7; -update noar ti set b0='HN3X0NCPFNCK' where id=7; -update noar tt set v0='P3HQFY31' where id=7; -update noar ti set v0='P3HQFY31' where id=7; -update noar tt set b1='YG4ZQAVR' where id=7; -update noar ti set b1='YG4ZQAVR' where id=7; -update noar tt set v0='C3QIWL4M8B' where id=7; -update noar ti set v0='C3QIWL4M8B' where id=7; -update noar tt set b2='AC11DOLF2RBNEH7B8' where id=7; -update noar ti set b2='AC11DOLF2RBNEH7B8' where id=7; -update noar tt set v0='9OTLAZ1E4' where id=8; -update noar ti set v0='9OTLAZ1E4' where id=8; -update noar tt set b0='SEEP3OE5L7H51BSWX1CAY6D86IMNZH6' where id=8; -update noar ti set b0='SEEP3OE5L7H51BSWX1CAY6D86IMNZH6' where id=8; -update noar tt set v0='FOWT349K24V8D2XVSBJK' where id=8; -update noar ti set v0='FOWT349K24V8D2XVSBJK' where id=8; -update noar tt set b1='KDCLCSSC3Q9OIY' where id=8; -update noar ti set b1='KDCLCSSC3Q9OIY' where id=8; -update noar tt set v0='RWIXT4BUO7XWPRNS7' where id=8; -update noar ti set v0='RWIXT4BUO7XWPRNS7' where id=8; -update noar tt set b2='CDTY7JAHNH16X39V7KKWSYHO3T3' where id=8; -update noar ti set b2='CDTY7JAHNH16X39V7KKWSYHO3T3' where id=8; -update noar tt set v0='J5PW316XFOGK89MAWP4EIN' where id=9; -update noar ti set v0='J5PW316XFOGK89MAWP4EIN' where id=9; -update noar tt set b0='6TEX1PX15LWBXX63' where id=9; -update noar ti set b0='6TEX1PX15LWBXX63' where id=9; -update noar tt set v0='GCD8ELC2BQ10MDG73RC0J' where id=9; -update noar ti set v0='GCD8ELC2BQ10MDG73RC0J' where id=9; -update noar tt set b1='Y4' where id=9; -update noar ti set b1='Y4' where id=9; -update noar tt set v0='ZQBUVKJ9M5Y4B57SO274HY6GTYTSD85' where id=9; -update noar ti set v0='ZQBUVKJ9M5Y4B57SO274HY6GTYTSD85' where id=9; -update noar tt set b2='G8XH9' where id=9; -update noar ti set b2='G8XH9' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 longblob not null, - b1 longblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='N5' where id=1; -update noar ti set v0='N5' where id=1; -update noar tt set b0='UACQC7JU4' where id=1; -update noar ti set b0='UACQC7JU4' where id=1; -update noar tt set v0='VTWW08W3FSXPGF67' where id=1; -update noar ti set v0='VTWW08W3FSXPGF67' where id=1; -update noar tt set b1='4Y5M334SHKRNP8UCFNXZA5WXV2BP0TXO' where id=1; -update noar ti set b1='4Y5M334SHKRNP8UCFNXZA5WXV2BP0TXO' where id=1; -update noar tt set v0='VAQI85KWNE' where id=1; -update noar ti set v0='VAQI85KWNE' where id=1; -update noar tt set b2='5W9KAEJF7HUDI' where id=1; -update noar ti set b2='5W9KAEJF7HUDI' where id=1; -update noar tt set v0='QMONG2VN16NTEGIK47THTB1UPB6O2DV' where id=2; -update noar ti set v0='QMONG2VN16NTEGIK47THTB1UPB6O2DV' where id=2; -update noar tt set b0='818O3SR' where id=2; -update noar ti set b0='818O3SR' where id=2; -update noar tt set v0='HSWIABRQ5ZANTAAMSF46K95' where id=2; -update noar ti set v0='HSWIABRQ5ZANTAAMSF46K95' where id=2; -update noar tt set b1='51ORZ5Q1N88HQG6QDUVEPQUHU6' where id=2; -update noar ti set b1='51ORZ5Q1N88HQG6QDUVEPQUHU6' where id=2; -update noar tt set v0='KSCB2C' where id=2; -update noar ti set v0='KSCB2C' where id=2; -update noar tt set b2='W6JXJ' where id=2; -update noar ti set b2='W6JXJ' where id=2; -update noar tt set v0='2A00RJM681W' where id=3; -update noar ti set v0='2A00RJM681W' where id=3; -update noar tt set b0='F1FTH2B' where id=3; -update noar ti set b0='F1FTH2B' where id=3; -update noar tt set v0='V92V83KO0EKHDIWMGBBT0GVHUHSUYIT' where id=3; -update noar ti set v0='V92V83KO0EKHDIWMGBBT0GVHUHSUYIT' where id=3; -update noar tt set b1='D07MLGVC9KFM0RDYHA47IOCVYT2HC' where id=3; -update noar ti set b1='D07MLGVC9KFM0RDYHA47IOCVYT2HC' where id=3; -update noar tt set v0='88MY32OLBEWMMJ' where id=3; -update noar ti set v0='88MY32OLBEWMMJ' where id=3; -update noar tt set b2='T6W69XOCEUGTT96R7E027DIG9F99ZEZO' where id=3; -update noar ti set b2='T6W69XOCEUGTT96R7E027DIG9F99ZEZO' where id=3; -update noar tt set v0='PP5K' where id=4; -update noar ti set v0='PP5K' where id=4; -update noar tt set b0='JSIPCVIE9QHW0GFAGKOU7P0EOTI4' where id=4; -update noar ti set b0='JSIPCVIE9QHW0GFAGKOU7P0EOTI4' where id=4; -update noar tt set v0='HEJOOGM7Q59' where id=4; -update noar ti set v0='HEJOOGM7Q59' where id=4; -update noar tt set b1='SZYPUTDYAG0' where id=4; -update noar ti set b1='SZYPUTDYAG0' where id=4; -update noar tt set v0='OMHECUO0EOE85KKCXMRM48OV7YNWIZRC' where id=4; -update noar ti set v0='OMHECUO0EOE85KKCXMRM48OV7YNWIZRC' where id=4; -update noar tt set b2='W' where id=4; -update noar ti set b2='W' where id=4; -update noar tt set v0='IN09HARX2UCX' where id=5; -update noar ti set v0='IN09HARX2UCX' where id=5; -update noar tt set b0='UK3NY' where id=5; -update noar ti set b0='UK3NY' where id=5; -update noar tt set v0='5L76ER4RDH4LMWHUX9UG7F9FQEIL8VH7' where id=5; -update noar ti set v0='5L76ER4RDH4LMWHUX9UG7F9FQEIL8VH7' where id=5; -update noar tt set b1='VSCKGHWELK9B' where id=5; -update noar ti set b1='VSCKGHWELK9B' where id=5; -update noar tt set v0='O7G6KMB0HTH3ZIRPJN174TOHFTBU7C' where id=5; -update noar ti set v0='O7G6KMB0HTH3ZIRPJN174TOHFTBU7C' where id=5; -update noar tt set b2='8WK9K7QHO0V27OVD0JXBF9U8QFTF' where id=5; -update noar ti set b2='8WK9K7QHO0V27OVD0JXBF9U8QFTF' where id=5; -update noar tt set v0='E3JXX1DOQDJPP' where id=6; -update noar ti set v0='E3JXX1DOQDJPP' where id=6; -update noar tt set b0='TWK' where id=6; -update noar ti set b0='TWK' where id=6; -update noar tt set v0='BQDVLKNRA561W3EIXM' where id=6; -update noar ti set v0='BQDVLKNRA561W3EIXM' where id=6; -update noar tt set b1='5SNUNB0O20LA4WF' where id=6; -update noar ti set b1='5SNUNB0O20LA4WF' where id=6; -update noar tt set v0='37M8XS1TDWOB' where id=6; -update noar ti set v0='37M8XS1TDWOB' where id=6; -update noar tt set b2='LOI6J8' where id=6; -update noar ti set b2='LOI6J8' where id=6; -update noar tt set v0='1J0Y7IJI65BN57OYBP7YBV2CRZN7P' where id=7; -update noar ti set v0='1J0Y7IJI65BN57OYBP7YBV2CRZN7P' where id=7; -update noar tt set b0='0J' where id=7; -update noar ti set b0='0J' where id=7; -update noar tt set v0='15CWG' where id=7; -update noar ti set v0='15CWG' where id=7; -update noar tt set b1='RZFMNIP5WFQ8YGGWFXEWERKDLJ378Q' where id=7; -update noar ti set b1='RZFMNIP5WFQ8YGGWFXEWERKDLJ378Q' where id=7; -update noar tt set v0='BXI2E2KVHU' where id=7; -update noar ti set v0='BXI2E2KVHU' where id=7; -update noar tt set b2='O4DUFHMCA01GEEXQME8ZCW16W421Z4' where id=7; -update noar ti set b2='O4DUFHMCA01GEEXQME8ZCW16W421Z4' where id=7; -update noar tt set v0='BWAI9MJSI7WAJ2YW5QO9397' where id=8; -update noar ti set v0='BWAI9MJSI7WAJ2YW5QO9397' where id=8; -update noar tt set b0='C46PVNIB879PVL5R5F' where id=8; -update noar ti set b0='C46PVNIB879PVL5R5F' where id=8; -update noar tt set v0='QAMIV53TCM3KAVSE' where id=8; -update noar ti set v0='QAMIV53TCM3KAVSE' where id=8; -update noar tt set b1='I1VDETXQGK2XHPG' where id=8; -update noar ti set b1='I1VDETXQGK2XHPG' where id=8; -update noar tt set v0='4CI8WKXD5BK5GI5IH5' where id=8; -update noar ti set v0='4CI8WKXD5BK5GI5IH5' where id=8; -update noar tt set b2='5' where id=8; -update noar ti set b2='5' where id=8; -update noar tt set v0='Z3IUV7VVDH' where id=9; -update noar ti set v0='Z3IUV7VVDH' where id=9; -update noar tt set b0='OI1HI6WQTHBRBA6927K4Y1NBLZ2VP' where id=9; -update noar ti set b0='OI1HI6WQTHBRBA6927K4Y1NBLZ2VP' where id=9; -update noar tt set v0='VXBAMU5ZW2O76ZC1UKPSG5VYEYV3P' where id=9; -update noar ti set v0='VXBAMU5ZW2O76ZC1UKPSG5VYEYV3P' where id=9; -update noar tt set b1='9JCMIUTJ3HAUNB71QJ4J0DY55CEU8H' where id=9; -update noar ti set b1='9JCMIUTJ3HAUNB71QJ4J0DY55CEU8H' where id=9; -update noar tt set v0='RGRU01F9JDGFSN8WKTC4' where id=9; -update noar ti set v0='RGRU01F9JDGFSN8WKTC4' where id=9; -update noar tt set b2='7HY0TERWCQR4QESCHT2Z' where id=9; -update noar ti set b2='7HY0TERWCQR4QESCHT2Z' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - b0 longblob null, - b1 longblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='MX92BBA4SWVEMS06OJ' where id=1; -update noar ti set v0='MX92BBA4SWVEMS06OJ' where id=1; -update noar tt set b0='0RLF6RTR6WJESAEBLQPL8VEKKA7W6' where id=1; -update noar ti set b0='0RLF6RTR6WJESAEBLQPL8VEKKA7W6' where id=1; -update noar tt set v0='DVIQ' where id=1; -update noar ti set v0='DVIQ' where id=1; -update noar tt set b1='9EIU2WQMV9264VQH8Q8XIKZS5G' where id=1; -update noar ti set b1='9EIU2WQMV9264VQH8Q8XIKZS5G' where id=1; -update noar tt set v0='XF8VP0DLO1D01LQG' where id=1; -update noar ti set v0='XF8VP0DLO1D01LQG' where id=1; -update noar tt set b2='NKSHQML7FD9G6YGRZDC340AZE9X' where id=1; -update noar ti set b2='NKSHQML7FD9G6YGRZDC340AZE9X' where id=1; -update noar tt set v0='4AZHEXI9YIXWIRX1EDG8H' where id=2; -update noar ti set v0='4AZHEXI9YIXWIRX1EDG8H' where id=2; -update noar tt set b0='UB7CL95OH' where id=2; -update noar ti set b0='UB7CL95OH' where id=2; -update noar tt set v0='IUTX9H' where id=2; -update noar ti set v0='IUTX9H' where id=2; -update noar tt set b1='H70055R7WQ0UQT8MB9JHAPWLCRCV9' where id=2; -update noar ti set b1='H70055R7WQ0UQT8MB9JHAPWLCRCV9' where id=2; -update noar tt set v0='O49BHR7C5VVNIK4J38P7TF' where id=2; -update noar ti set v0='O49BHR7C5VVNIK4J38P7TF' where id=2; -update noar tt set b2='4IBXZJKZYO6G57A1H1H98' where id=2; -update noar ti set b2='4IBXZJKZYO6G57A1H1H98' where id=2; -update noar tt set v0='HXLLCRHBF6CE2' where id=3; -update noar ti set v0='HXLLCRHBF6CE2' where id=3; -update noar tt set b0='PHOBSYXSBO65X' where id=3; -update noar ti set b0='PHOBSYXSBO65X' where id=3; -update noar tt set v0='S29W7O' where id=3; -update noar ti set v0='S29W7O' where id=3; -update noar tt set b1='42RH1STPLQXLQ8W55IALDLWGI' where id=3; -update noar ti set b1='42RH1STPLQXLQ8W55IALDLWGI' where id=3; -update noar tt set v0='K72W05QTUOI87NJ4W07V2' where id=3; -update noar ti set v0='K72W05QTUOI87NJ4W07V2' where id=3; -update noar tt set b2='AYZ4Q58K4' where id=3; -update noar ti set b2='AYZ4Q58K4' where id=3; -update noar tt set v0='O5334BVU25QPGD3CNBGRB6' where id=4; -update noar ti set v0='O5334BVU25QPGD3CNBGRB6' where id=4; -update noar tt set b0='XNOCJZX9W9KD12398MH3JBBS2HEHT' where id=4; -update noar ti set b0='XNOCJZX9W9KD12398MH3JBBS2HEHT' where id=4; -update noar tt set v0='RAOGVEHESP' where id=4; -update noar ti set v0='RAOGVEHESP' where id=4; -update noar tt set b1='7BPBFE' where id=4; -update noar ti set b1='7BPBFE' where id=4; -update noar tt set v0='ST34364EB61ITQUIVWQ1' where id=4; -update noar ti set v0='ST34364EB61ITQUIVWQ1' where id=4; -update noar tt set b2='1WBII279D476PEH3QXBIK2AIT1YA8JEV' where id=4; -update noar ti set b2='1WBII279D476PEH3QXBIK2AIT1YA8JEV' where id=4; -update noar tt set v0='C6B' where id=5; -update noar ti set v0='C6B' where id=5; -update noar tt set b0='K3ZVOFIRDNLUH' where id=5; -update noar ti set b0='K3ZVOFIRDNLUH' where id=5; -update noar tt set v0='SVVWHXHDFQK' where id=5; -update noar ti set v0='SVVWHXHDFQK' where id=5; -update noar tt set b1='TZMAYB88690X' where id=5; -update noar ti set b1='TZMAYB88690X' where id=5; -update noar tt set v0='RKE34C0GINFZH0JELRN' where id=5; -update noar ti set v0='RKE34C0GINFZH0JELRN' where id=5; -update noar tt set b2='USWVYBNPQDUUINZRO2M0JR47O9FV0R' where id=5; -update noar ti set b2='USWVYBNPQDUUINZRO2M0JR47O9FV0R' where id=5; -update noar tt set v0='3ZDK3LB80V3' where id=6; -update noar ti set v0='3ZDK3LB80V3' where id=6; -update noar tt set b0='PBE5K96QI9R8S253AGP859LDPX' where id=6; -update noar ti set b0='PBE5K96QI9R8S253AGP859LDPX' where id=6; -update noar tt set v0='LVNY6LW8KJV6TI8K0' where id=6; -update noar ti set v0='LVNY6LW8KJV6TI8K0' where id=6; -update noar tt set b1='K2SUD0' where id=6; -update noar ti set b1='K2SUD0' where id=6; -update noar tt set v0='9PUG7' where id=6; -update noar ti set v0='9PUG7' where id=6; -update noar tt set b2='DNXGZ4L9VW0NZL8FNSLV7' where id=6; -update noar ti set b2='DNXGZ4L9VW0NZL8FNSLV7' where id=6; -update noar tt set v0='3AX58WOQR5O2EC' where id=7; -update noar ti set v0='3AX58WOQR5O2EC' where id=7; -update noar tt set b0='Q25H' where id=7; -update noar ti set b0='Q25H' where id=7; -update noar tt set v0='5SBTRDOJT3GEZO4VKSL92' where id=7; -update noar ti set v0='5SBTRDOJT3GEZO4VKSL92' where id=7; -update noar tt set b1='PAXCQIZNBUF30E1MN3D72IYAWZR' where id=7; -update noar ti set b1='PAXCQIZNBUF30E1MN3D72IYAWZR' where id=7; -update noar tt set v0='Z3G' where id=7; -update noar ti set v0='Z3G' where id=7; -update noar tt set b2='W9ZS14BS1JL90650K' where id=7; -update noar ti set b2='W9ZS14BS1JL90650K' where id=7; -update noar tt set v0='SMZMKDLPP' where id=8; -update noar ti set v0='SMZMKDLPP' where id=8; -update noar tt set b0='Y2UMT' where id=8; -update noar ti set b0='Y2UMT' where id=8; -update noar tt set v0='QKD49TOY9CPEE3BKTH3GO8HJP' where id=8; -update noar ti set v0='QKD49TOY9CPEE3BKTH3GO8HJP' where id=8; -update noar tt set b1='0Z02Y32' where id=8; -update noar ti set b1='0Z02Y32' where id=8; -update noar tt set v0='NXN6K' where id=8; -update noar ti set v0='NXN6K' where id=8; -update noar tt set b2='BS5LLYNWC' where id=8; -update noar ti set b2='BS5LLYNWC' where id=8; -update noar tt set v0='SGZZ6KFK3FTOXPEM0G15HTIE1QDI531' where id=9; -update noar ti set v0='SGZZ6KFK3FTOXPEM0G15HTIE1QDI531' where id=9; -update noar tt set b0='OB1FSM9CNOULC17SBF67QR98DY' where id=9; -update noar ti set b0='OB1FSM9CNOULC17SBF67QR98DY' where id=9; -update noar tt set v0='31F9WRL9RQ61DG3D7SYLL0P5M' where id=9; -update noar ti set v0='31F9WRL9RQ61DG3D7SYLL0P5M' where id=9; -update noar tt set b1='1Q' where id=9; -update noar ti set b1='1Q' where id=9; -update noar tt set v0='6I7381BY' where id=9; -update noar ti set v0='6I7381BY' where id=9; -update noar tt set b2='GEMR8SGTHQWEM94WAY' where id=9; -update noar ti set b2='GEMR8SGTHQWEM94WAY' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - b0 longblob null, - b1 longblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='F' where id=1; -update noar ti set v0='F' where id=1; -update noar tt set b0='STPBM' where id=1; -update noar ti set b0='STPBM' where id=1; -update noar tt set v0='WKUAFH2VN70A19A6XCGJDGW6E0B' where id=1; -update noar ti set v0='WKUAFH2VN70A19A6XCGJDGW6E0B' where id=1; -update noar tt set b1='I6IZ6NYUUMSJGJHMASU8WTRS2' where id=1; -update noar ti set b1='I6IZ6NYUUMSJGJHMASU8WTRS2' where id=1; -update noar tt set v0='D4' where id=1; -update noar ti set v0='D4' where id=1; -update noar tt set b2='KKSMN4LJ5Y7' where id=1; -update noar ti set b2='KKSMN4LJ5Y7' where id=1; -update noar tt set v0='I' where id=2; -update noar ti set v0='I' where id=2; -update noar tt set b0='151OFEVGJYQSZV' where id=2; -update noar ti set b0='151OFEVGJYQSZV' where id=2; -update noar tt set v0='GZKNCEWMC65M2FASI1SBUUJ3U8RU' where id=2; -update noar ti set v0='GZKNCEWMC65M2FASI1SBUUJ3U8RU' where id=2; -update noar tt set b1='0UBKOW2N8OKFJ84RBZCXSJEP037JU2' where id=2; -update noar ti set b1='0UBKOW2N8OKFJ84RBZCXSJEP037JU2' where id=2; -update noar tt set v0='Y5JSPAOPBT69B3OQKQGYOW9FQ' where id=2; -update noar ti set v0='Y5JSPAOPBT69B3OQKQGYOW9FQ' where id=2; -update noar tt set b2='FIZ' where id=2; -update noar ti set b2='FIZ' where id=2; -update noar tt set v0='3QU8' where id=3; -update noar ti set v0='3QU8' where id=3; -update noar tt set b0='R0E4HHC7QRPPC8HRL72LB09' where id=3; -update noar ti set b0='R0E4HHC7QRPPC8HRL72LB09' where id=3; -update noar tt set v0='4H' where id=3; -update noar ti set v0='4H' where id=3; -update noar tt set b1='9WWK01AA3Z4ZJ6PIPCMF7VN2YVKX9A6' where id=3; -update noar ti set b1='9WWK01AA3Z4ZJ6PIPCMF7VN2YVKX9A6' where id=3; -update noar tt set v0='M974YVNIZ1NARF5' where id=3; -update noar ti set v0='M974YVNIZ1NARF5' where id=3; -update noar tt set b2='TSGNSFRDYWC3HNIC753D67' where id=3; -update noar ti set b2='TSGNSFRDYWC3HNIC753D67' where id=3; -update noar tt set v0='MWFJUCTEVMHN36' where id=4; -update noar ti set v0='MWFJUCTEVMHN36' where id=4; -update noar tt set b0='56W9O1S1VSC' where id=4; -update noar ti set b0='56W9O1S1VSC' where id=4; -update noar tt set v0='FJKHA776QLMIR0JO2NAH0HWY' where id=4; -update noar ti set v0='FJKHA776QLMIR0JO2NAH0HWY' where id=4; -update noar tt set b1='J14BK0A3SZSWB' where id=4; -update noar ti set b1='J14BK0A3SZSWB' where id=4; -update noar tt set v0='1LBPB50A0NB2XUR6KWICOIIR2AJJLEE' where id=4; -update noar ti set v0='1LBPB50A0NB2XUR6KWICOIIR2AJJLEE' where id=4; -update noar tt set b2='RH6IC3JVTAQ' where id=4; -update noar ti set b2='RH6IC3JVTAQ' where id=4; -update noar tt set v0='DE31UPJUERRX4LFNB' where id=5; -update noar ti set v0='DE31UPJUERRX4LFNB' where id=5; -update noar tt set b0='411XK6UK7VY0U52R' where id=5; -update noar ti set b0='411XK6UK7VY0U52R' where id=5; -update noar tt set v0='73JGLEH067EY4DO' where id=5; -update noar ti set v0='73JGLEH067EY4DO' where id=5; -update noar tt set b1='4F3RTNEUT8LCRBS87IGM1T4QKHZ0UTD' where id=5; -update noar ti set b1='4F3RTNEUT8LCRBS87IGM1T4QKHZ0UTD' where id=5; -update noar tt set v0='KZCD3' where id=5; -update noar ti set v0='KZCD3' where id=5; -update noar tt set b2='ZV980JBFL7EMUZAJ6PVWSWE' where id=5; -update noar ti set b2='ZV980JBFL7EMUZAJ6PVWSWE' where id=5; -update noar tt set v0='DRDS9ZRMLQ4CDNGA5D09VQ' where id=6; -update noar ti set v0='DRDS9ZRMLQ4CDNGA5D09VQ' where id=6; -update noar tt set b0='T1PW5KLZE5N139R32MYD1TUASSI5' where id=6; -update noar ti set b0='T1PW5KLZE5N139R32MYD1TUASSI5' where id=6; -update noar tt set v0='QRWJHN' where id=6; -update noar ti set v0='QRWJHN' where id=6; -update noar tt set b1='BW683SLS2S6Z' where id=6; -update noar ti set b1='BW683SLS2S6Z' where id=6; -update noar tt set v0='WCXLHZBF8MKMWGATZ21' where id=6; -update noar ti set v0='WCXLHZBF8MKMWGATZ21' where id=6; -update noar tt set b2='RN4EG9A5MYLVX9YN13974R6KZ4J' where id=6; -update noar ti set b2='RN4EG9A5MYLVX9YN13974R6KZ4J' where id=6; -update noar tt set v0='K59ND6QPLAKDI418271' where id=7; -update noar ti set v0='K59ND6QPLAKDI418271' where id=7; -update noar tt set b0='UZ51TYKC23KH5YXD80' where id=7; -update noar ti set b0='UZ51TYKC23KH5YXD80' where id=7; -update noar tt set v0='T0AU7VSJLNVDS3BWJGYQ5NEUCHILJI1P' where id=7; -update noar ti set v0='T0AU7VSJLNVDS3BWJGYQ5NEUCHILJI1P' where id=7; -update noar tt set b1='N9GT3P7L3TS0' where id=7; -update noar ti set b1='N9GT3P7L3TS0' where id=7; -update noar tt set v0='1VWA3ND4TOW14JSWMHGA224AC7E1' where id=7; -update noar ti set v0='1VWA3ND4TOW14JSWMHGA224AC7E1' where id=7; -update noar tt set b2='FWLJ' where id=7; -update noar ti set b2='FWLJ' where id=7; -update noar tt set v0='1ECCPUL88LHV' where id=8; -update noar ti set v0='1ECCPUL88LHV' where id=8; -update noar tt set b0='Z8P05XW7NC' where id=8; -update noar ti set b0='Z8P05XW7NC' where id=8; -update noar tt set v0='YIHBO4PX0052N3ZZEJS8S95R1' where id=8; -update noar ti set v0='YIHBO4PX0052N3ZZEJS8S95R1' where id=8; -update noar tt set b1='S22VABMYDBGJJARTGCWVZGE' where id=8; -update noar ti set b1='S22VABMYDBGJJARTGCWVZGE' where id=8; -update noar tt set v0='04629RAXTQHBBB1JKKJAJ6M52U' where id=8; -update noar ti set v0='04629RAXTQHBBB1JKKJAJ6M52U' where id=8; -update noar tt set b2='907GRRVU33HRB5NFM4UVWCT9CWR9B4' where id=8; -update noar ti set b2='907GRRVU33HRB5NFM4UVWCT9CWR9B4' where id=8; -update noar tt set v0='MHIPLD3' where id=9; -update noar ti set v0='MHIPLD3' where id=9; -update noar tt set b0='O50M3AOG3O' where id=9; -update noar ti set b0='O50M3AOG3O' where id=9; -update noar tt set v0='TLRY7B9YFU' where id=9; -update noar ti set v0='TLRY7B9YFU' where id=9; -update noar tt set b1='N03VLWD4UT' where id=9; -update noar ti set b1='N03VLWD4UT' where id=9; -update noar tt set v0='CDLZYEK3J76E69KKG6CX3W7PM6MY' where id=9; -update noar ti set v0='CDLZYEK3J76E69KKG6CX3W7PM6MY' where id=9; -update noar tt set b2='3DGWJD3MF' where id=9; -update noar ti set b2='3DGWJD3MF' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - b0 longblob not null, - b1 longblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='QXCYXIY9HEXZU0X0QW3ZF9V' where id=1; -update noar ti set v0='QXCYXIY9HEXZU0X0QW3ZF9V' where id=1; -update noar tt set b0='GMGK1CXTZ3V4GYUC2M9B91SK91BXLAX' where id=1; -update noar ti set b0='GMGK1CXTZ3V4GYUC2M9B91SK91BXLAX' where id=1; -update noar tt set v0='WAL' where id=1; -update noar ti set v0='WAL' where id=1; -update noar tt set b1='WVRXP5ON76J0FA2ODUFBMOGT6TU2MVBA' where id=1; -update noar ti set b1='WVRXP5ON76J0FA2ODUFBMOGT6TU2MVBA' where id=1; -update noar tt set v0='OUC85N24CR51NG4FNI1VQIEO76QQ1' where id=1; -update noar ti set v0='OUC85N24CR51NG4FNI1VQIEO76QQ1' where id=1; -update noar tt set b2='71RBGJJWLWAMUCYAB7VLG9S' where id=1; -update noar ti set b2='71RBGJJWLWAMUCYAB7VLG9S' where id=1; -update noar tt set v0='4RYEJGWGQHTIYCFBOK' where id=2; -update noar ti set v0='4RYEJGWGQHTIYCFBOK' where id=2; -update noar tt set b0='1HQV9KK28B2T1N24DH' where id=2; -update noar ti set b0='1HQV9KK28B2T1N24DH' where id=2; -update noar tt set v0='NIC3YMFDOHN' where id=2; -update noar ti set v0='NIC3YMFDOHN' where id=2; -update noar tt set b1='NSNUD3W7SODCJ9CSNG9ETAVJLIGPATU' where id=2; -update noar ti set b1='NSNUD3W7SODCJ9CSNG9ETAVJLIGPATU' where id=2; -update noar tt set v0='NRJCC8YIH81MI0G0JC7JTP3EMI' where id=2; -update noar ti set v0='NRJCC8YIH81MI0G0JC7JTP3EMI' where id=2; -update noar tt set b2='FN9' where id=2; -update noar ti set b2='FN9' where id=2; -update noar tt set v0='7ASEMW7' where id=3; -update noar ti set v0='7ASEMW7' where id=3; -update noar tt set b0='DN9RET9G7U99TOZ2RK43DN1G2LAPF' where id=3; -update noar ti set b0='DN9RET9G7U99TOZ2RK43DN1G2LAPF' where id=3; -update noar tt set v0='TAKI6KBV7' where id=3; -update noar ti set v0='TAKI6KBV7' where id=3; -update noar tt set b1='LT4JUNN3QAAV0L' where id=3; -update noar ti set b1='LT4JUNN3QAAV0L' where id=3; -update noar tt set v0='MZ36VLY1FYJ' where id=3; -update noar ti set v0='MZ36VLY1FYJ' where id=3; -update noar tt set b2='IMTACLKITMDX7Z' where id=3; -update noar ti set b2='IMTACLKITMDX7Z' where id=3; -update noar tt set v0='CYU' where id=4; -update noar ti set v0='CYU' where id=4; -update noar tt set b0='MNJ1OH9WNFA' where id=4; -update noar ti set b0='MNJ1OH9WNFA' where id=4; -update noar tt set v0='YIANQRDGU' where id=4; -update noar ti set v0='YIANQRDGU' where id=4; -update noar tt set b1='GBKAC8X6' where id=4; -update noar ti set b1='GBKAC8X6' where id=4; -update noar tt set v0='1D8EQJ5O0HB2CTYKHIE8OVY9NUV' where id=4; -update noar ti set v0='1D8EQJ5O0HB2CTYKHIE8OVY9NUV' where id=4; -update noar tt set b2='P8795LZLOR2YQQ4A3R19A4UO' where id=4; -update noar ti set b2='P8795LZLOR2YQQ4A3R19A4UO' where id=4; -update noar tt set v0='S6AYAN3YW7ZVLRPKK2N' where id=5; -update noar ti set v0='S6AYAN3YW7ZVLRPKK2N' where id=5; -update noar tt set b0='V8NNC1J57FXEJ' where id=5; -update noar ti set b0='V8NNC1J57FXEJ' where id=5; -update noar tt set v0='5YMAYSLLDSJGAN' where id=5; -update noar ti set v0='5YMAYSLLDSJGAN' where id=5; -update noar tt set b1='YQQZRJANDXENUR8KDZ1PUGBRONI71WS' where id=5; -update noar ti set b1='YQQZRJANDXENUR8KDZ1PUGBRONI71WS' where id=5; -update noar tt set v0='9ZHPLXAG6YUMIZL78OQWLZ035' where id=5; -update noar ti set v0='9ZHPLXAG6YUMIZL78OQWLZ035' where id=5; -update noar tt set b2='3' where id=5; -update noar ti set b2='3' where id=5; -update noar tt set v0='9CRW0R8PX92Z8EAW' where id=6; -update noar ti set v0='9CRW0R8PX92Z8EAW' where id=6; -update noar tt set b0='TICEQQ2TGM7L30' where id=6; -update noar ti set b0='TICEQQ2TGM7L30' where id=6; -update noar tt set v0='NA5GS1VIGH3CS37GOKHAVDLF8L387Q' where id=6; -update noar ti set v0='NA5GS1VIGH3CS37GOKHAVDLF8L387Q' where id=6; -update noar tt set b1='BX9DBOL' where id=6; -update noar ti set b1='BX9DBOL' where id=6; -update noar tt set v0='GY0Z8U89TVQ6PUKWY' where id=6; -update noar ti set v0='GY0Z8U89TVQ6PUKWY' where id=6; -update noar tt set b2='GTTXDBDPDGTPIMMS74EFR9DC2' where id=6; -update noar ti set b2='GTTXDBDPDGTPIMMS74EFR9DC2' where id=6; -update noar tt set v0='OHVPKG299C5RH1NM5G8UE' where id=7; -update noar ti set v0='OHVPKG299C5RH1NM5G8UE' where id=7; -update noar tt set b0='FXQAZ8UXV4KGEAMIBRATIGEZ0VXVGEFA' where id=7; -update noar ti set b0='FXQAZ8UXV4KGEAMIBRATIGEZ0VXVGEFA' where id=7; -update noar tt set v0='2L2WBE3H1RBX5FI9IW1NRM3' where id=7; -update noar ti set v0='2L2WBE3H1RBX5FI9IW1NRM3' where id=7; -update noar tt set b1='JOX4OPR4C59SQLMDBS3I' where id=7; -update noar ti set b1='JOX4OPR4C59SQLMDBS3I' where id=7; -update noar tt set v0='8XWQ831085PJYNHZYOU3V' where id=7; -update noar ti set v0='8XWQ831085PJYNHZYOU3V' where id=7; -update noar tt set b2='XNNNALCPSYOESMQQ829NAVV0AN75Y6' where id=7; -update noar ti set b2='XNNNALCPSYOESMQQ829NAVV0AN75Y6' where id=7; -update noar tt set v0='E1BPSL2J9I6VE3XYLKSLLPUVQRPV7BX' where id=8; -update noar ti set v0='E1BPSL2J9I6VE3XYLKSLLPUVQRPV7BX' where id=8; -update noar tt set b0='ABRW3EZ4S1F3SH0OON4VKW529G' where id=8; -update noar ti set b0='ABRW3EZ4S1F3SH0OON4VKW529G' where id=8; -update noar tt set v0='ULQ8SZWPC5MTBV' where id=8; -update noar ti set v0='ULQ8SZWPC5MTBV' where id=8; -update noar tt set b1='SJ2WCOUMB5NQ8PM7X27F446VME4I' where id=8; -update noar ti set b1='SJ2WCOUMB5NQ8PM7X27F446VME4I' where id=8; -update noar tt set v0='2C39Q1T7CI59ZO33T' where id=8; -update noar ti set v0='2C39Q1T7CI59ZO33T' where id=8; -update noar tt set b2='0LODV5VP465' where id=8; -update noar ti set b2='0LODV5VP465' where id=8; -update noar tt set v0='G5COILN' where id=9; -update noar ti set v0='G5COILN' where id=9; -update noar tt set b0='5DGTGB8HEMBC' where id=9; -update noar ti set b0='5DGTGB8HEMBC' where id=9; -update noar tt set v0='1QDBMVO12D8PKNQ3CLAG12ULZ7S4KWJ' where id=9; -update noar ti set v0='1QDBMVO12D8PKNQ3CLAG12ULZ7S4KWJ' where id=9; -update noar tt set b1='PC2FFX8IQRBN' where id=9; -update noar ti set b1='PC2FFX8IQRBN' where id=9; -update noar tt set v0='RLUGBNPPVCIIXAP' where id=9; -update noar ti set v0='RLUGBNPPVCIIXAP' where id=9; -update noar tt set b2='1EF6LTSRFBK2ROBBL' where id=9; -update noar ti set b2='1EF6LTSRFBK2ROBBL' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - b0 longblob not null, - b1 longblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,0,'','','',''); -insert into tt values (2,0,'','','',''); -insert into tt values (3,0,'','','',''); -insert into tt values (4,0,'','','',''); -insert into tt values (5,0,'','','',''); -insert into tt values (6,0,'','','',''); -insert into tt values (7,0,'','','',''); -insert into tt values (8,0,'','','',''); -insert into tt values (9,0,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='LEEYUTRS34P' where id=1; -update noar ti set v0='LEEYUTRS34P' where id=1; -update noar tt set b0='M99ECXEP4X9N2CIUQXK31QQB4YMJOY' where id=1; -update noar ti set b0='M99ECXEP4X9N2CIUQXK31QQB4YMJOY' where id=1; -update noar tt set v0='UWUDZUWPEQEPJ22XLK' where id=1; -update noar ti set v0='UWUDZUWPEQEPJ22XLK' where id=1; -update noar tt set b1='LASOLRZDKEI8' where id=1; -update noar ti set b1='LASOLRZDKEI8' where id=1; -update noar tt set v0='T' where id=1; -update noar ti set v0='T' where id=1; -update noar tt set b2='Z8KZLNDQ4JIF0L7P78WA' where id=1; -update noar ti set b2='Z8KZLNDQ4JIF0L7P78WA' where id=1; -update noar tt set v0='2GP6DEJ' where id=2; -update noar ti set v0='2GP6DEJ' where id=2; -update noar tt set b0='H0X864HBR3V1RIEJ9ZBXQAIXC' where id=2; -update noar ti set b0='H0X864HBR3V1RIEJ9ZBXQAIXC' where id=2; -update noar tt set v0='UXN0' where id=2; -update noar ti set v0='UXN0' where id=2; -update noar tt set b1='SRZZVJEVO72JAWSSKOK2K4N2BI5QNIUV' where id=2; -update noar ti set b1='SRZZVJEVO72JAWSSKOK2K4N2BI5QNIUV' where id=2; -update noar tt set v0='WMNT8KVHXSWOXRQP3ICE1BPV8AU8W' where id=2; -update noar ti set v0='WMNT8KVHXSWOXRQP3ICE1BPV8AU8W' where id=2; -update noar tt set b2='3IDATCFXH1N' where id=2; -update noar ti set b2='3IDATCFXH1N' where id=2; -update noar tt set v0='2BLL8H' where id=3; -update noar ti set v0='2BLL8H' where id=3; -update noar tt set b0='8I0MR9O73A3ZU' where id=3; -update noar ti set b0='8I0MR9O73A3ZU' where id=3; -update noar tt set v0='F15MBIWGGJTKWMCL' where id=3; -update noar ti set v0='F15MBIWGGJTKWMCL' where id=3; -update noar tt set b1='10UEU09O9PS' where id=3; -update noar ti set b1='10UEU09O9PS' where id=3; -update noar tt set v0='Y69SGR0281ITJKO1DL' where id=3; -update noar ti set v0='Y69SGR0281ITJKO1DL' where id=3; -update noar tt set b2='P8KRKC81XD0GLF0MB75M66PAUWG6M' where id=3; -update noar ti set b2='P8KRKC81XD0GLF0MB75M66PAUWG6M' where id=3; -update noar tt set v0='V05FVC27AK67P8UF' where id=4; -update noar ti set v0='V05FVC27AK67P8UF' where id=4; -update noar tt set b0='96GOVZJ57YF4P' where id=4; -update noar ti set b0='96GOVZJ57YF4P' where id=4; -update noar tt set v0='PCAOE2SHBW179MA06KJ0JMOAKZE37' where id=4; -update noar ti set v0='PCAOE2SHBW179MA06KJ0JMOAKZE37' where id=4; -update noar tt set b1='QZUMP45P813MCN8XJXJU0MH1QVSGKR' where id=4; -update noar ti set b1='QZUMP45P813MCN8XJXJU0MH1QVSGKR' where id=4; -update noar tt set v0='KSBAC3PHT79Y3S4ONZL' where id=4; -update noar ti set v0='KSBAC3PHT79Y3S4ONZL' where id=4; -update noar tt set b2='RQQ75RL8WSBT80S6LF3HI911P9LS' where id=4; -update noar ti set b2='RQQ75RL8WSBT80S6LF3HI911P9LS' where id=4; -update noar tt set v0='S2JS1Z1W6HHE1R6' where id=5; -update noar ti set v0='S2JS1Z1W6HHE1R6' where id=5; -update noar tt set b0='R63EDI' where id=5; -update noar ti set b0='R63EDI' where id=5; -update noar tt set v0='DRYQ9SZR34TREIFDK6HQ' where id=5; -update noar ti set v0='DRYQ9SZR34TREIFDK6HQ' where id=5; -update noar tt set b1='WITFE0XFLPD7DQ05FRQMTGZTWZ4NYV' where id=5; -update noar ti set b1='WITFE0XFLPD7DQ05FRQMTGZTWZ4NYV' where id=5; -update noar tt set v0='I' where id=5; -update noar ti set v0='I' where id=5; -update noar tt set b2='9918LQ72RYXMO' where id=5; -update noar ti set b2='9918LQ72RYXMO' where id=5; -update noar tt set v0='HJVH8W1MPJY255UPCLAQRNN0M' where id=6; -update noar ti set v0='HJVH8W1MPJY255UPCLAQRNN0M' where id=6; -update noar tt set b0='XBO' where id=6; -update noar ti set b0='XBO' where id=6; -update noar tt set v0='WBSGL7V81QVEIFA7ZEDY6PQBBOG0V' where id=6; -update noar ti set v0='WBSGL7V81QVEIFA7ZEDY6PQBBOG0V' where id=6; -update noar tt set b1='EJAZIX23T' where id=6; -update noar ti set b1='EJAZIX23T' where id=6; -update noar tt set v0='RKS6' where id=6; -update noar ti set v0='RKS6' where id=6; -update noar tt set b2='QJB84V43MSQEEQD2' where id=6; -update noar ti set b2='QJB84V43MSQEEQD2' where id=6; -update noar tt set v0='J5CIGFE6PG3HHF4IR99RP0BQWDRFVN' where id=7; -update noar ti set v0='J5CIGFE6PG3HHF4IR99RP0BQWDRFVN' where id=7; -update noar tt set b0='025DD53DH735IIL0KAUXUU' where id=7; -update noar ti set b0='025DD53DH735IIL0KAUXUU' where id=7; -update noar tt set v0='KT8MERXTHITVZTE5YBC4PODA' where id=7; -update noar ti set v0='KT8MERXTHITVZTE5YBC4PODA' where id=7; -update noar tt set b1='BB' where id=7; -update noar ti set b1='BB' where id=7; -update noar tt set v0='9UJQL' where id=7; -update noar ti set v0='9UJQL' where id=7; -update noar tt set b2='E' where id=7; -update noar ti set b2='E' where id=7; -update noar tt set v0='MA2Q7MR' where id=8; -update noar ti set v0='MA2Q7MR' where id=8; -update noar tt set b0='P3' where id=8; -update noar ti set b0='P3' where id=8; -update noar tt set v0='VR1D8WP5LP7P30IHZ' where id=8; -update noar ti set v0='VR1D8WP5LP7P30IHZ' where id=8; -update noar tt set b1='LTR0HBW1FZZCCXOMR6J' where id=8; -update noar ti set b1='LTR0HBW1FZZCCXOMR6J' where id=8; -update noar tt set v0='SKPAMR51C' where id=8; -update noar ti set v0='SKPAMR51C' where id=8; -update noar tt set b2='U7PX143M1' where id=8; -update noar ti set b2='U7PX143M1' where id=8; -update noar tt set v0='7ET84JN35G0Q9QKLQ5DQSCTPY' where id=9; -update noar ti set v0='7ET84JN35G0Q9QKLQ5DQSCTPY' where id=9; -update noar tt set b0='54NUGHTSUN6B48CWGO' where id=9; -update noar ti set b0='54NUGHTSUN6B48CWGO' where id=9; -update noar tt set v0='R1WINZC46' where id=9; -update noar ti set v0='R1WINZC46' where id=9; -update noar tt set b1='ODRI06CHM5QTDPFM900R6J7JWJ8W' where id=9; -update noar ti set b1='ODRI06CHM5QTDPFM900R6J7JWJ8W' where id=9; -update noar tt set v0='HWOZH897A0BVVRO1CH2OQFR' where id=9; -update noar ti set v0='HWOZH897A0BVVRO1CH2OQFR' where id=9; -update noar tt set b2='L' where id=9; -update noar ti set b2='L' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; diff --git a/mysql-test/suite/tokudb/t/fast_update_blobs_with_varchar.py b/mysql-test/suite/tokudb/t/fast_update_blobs_with_varchar.py deleted file mode 100644 index 6eea11afd7bd..000000000000 --- a/mysql-test/suite/tokudb/t/fast_update_blobs_with_varchar.py +++ /dev/null @@ -1,62 +0,0 @@ -#!/usr/bin/env python - -import sys -import random -import string - -def main(): - print "# generated by tokudb_fast_update_blobs_with_varchar.py" - print "source include/have_tokudb.inc;" - print "source include/have_innodb.inc;" - print "set default_storage_engine='tokudb';" - print "disable_warnings;" - print "drop table if exists t;" - print "enable_warnings;" - - nrows = 10 - - blob_types = [ 'tinyblob', 'blob', 'mediumblob', 'longblob' ] - for a in blob_types: - for b in blob_types: - for c in blob_types: - for n in [ 'null', 'not null' ]: - for v in [ 'varchar(32)', 'varchar(256)' ]: - test_blobs([ a, b, c ] , v, n, nrows) - return 0 - -def test_blobs(cols, v, n, nrows): - print "create table tt (id bigint unsigned primary key," - print " v0 %s %s," % (v, n) - for i in range(len(cols)): - if i < len(cols)-1: - print " b%d %s %s," % (i, cols[i], n) - else: - print " b%d %s %s" % (i, cols[i], n) - print ") engine=tokudb;" - - for id in range(1,nrows): - if n == 'null': - print "insert into tt (id) values (%d);" % (id) - else: - print "insert into tt values (%d,'','','','');" % (id) - - print "create table ti like tt;" - print "alter table ti engine=innodb;" - print "insert into ti select * from tt;" - - for id in range(1,nrows): - for i in range(3): - long_str = ''.join(random.choice(string.ascii_uppercase + string.digits) for x in range(random.randint(1,32))) - print "update noar tt set v%d='%s' where id=%d;" % (0, long_str, id) - print "update noar ti set v%d='%s' where id=%d;" % (0, long_str, id) - - long_str = ''.join(random.choice(string.ascii_uppercase + string.digits) for x in range(random.randint(1,32))) - print "update noar tt set b%d='%s' where id=%d;" % (i, long_str, id) - print "update noar ti set b%d='%s' where id=%d;" % (i, long_str, id) - - print "let $diff_tables = test.tt, test.ti;" - print "source include/diff_tables.inc;" - - print "drop table tt, ti;" - -sys.exit(main()) diff --git a/mysql-test/suite/tokudb/t/fast_update_blobs_with_varchar.test b/mysql-test/suite/tokudb/t/fast_update_blobs_with_varchar.test index 0821c0c7a79c..15875c472975 100644 --- a/mysql-test/suite/tokudb/t/fast_update_blobs_with_varchar.test +++ b/mysql-test/suite/tokudb/t/fast_update_blobs_with_varchar.test @@ -1,33031 +1,84 @@ -# generated by tokudb_fast_update_blobs_with_varchar.py -source include/have_tokudb.inc; -source include/have_innodb.inc; -set default_storage_engine='tokudb'; -disable_warnings; -drop table if exists t; -enable_warnings; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 tinyblob null, - b1 tinyblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='OORH' where id=1; -update noar ti set v0='OORH' where id=1; -update noar tt set b0='2KX2' where id=1; -update noar ti set b0='2KX2' where id=1; -update noar tt set v0='QJ541BDOS' where id=1; -update noar ti set v0='QJ541BDOS' where id=1; -update noar tt set b1='BSTHXT0AXOL4NYJD04Q5' where id=1; -update noar ti set b1='BSTHXT0AXOL4NYJD04Q5' where id=1; -update noar tt set v0='F8QUEDSYQ8DZ' where id=1; -update noar ti set v0='F8QUEDSYQ8DZ' where id=1; -update noar tt set b2='3S9CVBPMFLX74Q16XHYC3ZWEV' where id=1; -update noar ti set b2='3S9CVBPMFLX74Q16XHYC3ZWEV' where id=1; -update noar tt set v0='03CCYAYAFDEDMH8K0' where id=2; -update noar ti set v0='03CCYAYAFDEDMH8K0' where id=2; -update noar tt set b0='6MA' where id=2; -update noar ti set b0='6MA' where id=2; -update noar tt set v0='5YXS8WIZG40O9ZKBR65OUT' where id=2; -update noar ti set v0='5YXS8WIZG40O9ZKBR65OUT' where id=2; -update noar tt set b1='KU' where id=2; -update noar ti set b1='KU' where id=2; -update noar tt set v0='WC173JZCT89RZX29' where id=2; -update noar ti set v0='WC173JZCT89RZX29' where id=2; -update noar tt set b2='EM5Y0U95XHX1PO6J5FJ' where id=2; -update noar ti set b2='EM5Y0U95XHX1PO6J5FJ' where id=2; -update noar tt set v0='AA' where id=3; -update noar ti set v0='AA' where id=3; -update noar tt set b0='5B8BYWIMT' where id=3; -update noar ti set b0='5B8BYWIMT' where id=3; -update noar tt set v0='2MS56CLNQ911' where id=3; -update noar ti set v0='2MS56CLNQ911' where id=3; -update noar tt set b1='5KJ1' where id=3; -update noar ti set b1='5KJ1' where id=3; -update noar tt set v0='LMHY0D23Y5BZJKJMO1FPJRFU8CF2' where id=3; -update noar ti set v0='LMHY0D23Y5BZJKJMO1FPJRFU8CF2' where id=3; -update noar tt set b2='204EX0GAWYOAWK7BWVQF' where id=3; -update noar ti set b2='204EX0GAWYOAWK7BWVQF' where id=3; -update noar tt set v0='WNELP' where id=4; -update noar ti set v0='WNELP' where id=4; -update noar tt set b0='LDZD' where id=4; -update noar ti set b0='LDZD' where id=4; -update noar tt set v0='COPYTGCQ3QJC2' where id=4; -update noar ti set v0='COPYTGCQ3QJC2' where id=4; -update noar tt set b1='6YCDENC77R12FSE80VRMQUX' where id=4; -update noar ti set b1='6YCDENC77R12FSE80VRMQUX' where id=4; -update noar tt set v0='DUD' where id=4; -update noar ti set v0='DUD' where id=4; -update noar tt set b2='56CV28UU6QQE1VAK5V' where id=4; -update noar ti set b2='56CV28UU6QQE1VAK5V' where id=4; -update noar tt set v0='5U0QNH8D7R8C' where id=5; -update noar ti set v0='5U0QNH8D7R8C' where id=5; -update noar tt set b0='NQSA' where id=5; -update noar ti set b0='NQSA' where id=5; -update noar tt set v0='XNOQCGHYMCG41MOY9TLSMY6WM100' where id=5; -update noar ti set v0='XNOQCGHYMCG41MOY9TLSMY6WM100' where id=5; -update noar tt set b1='K40KK' where id=5; -update noar ti set b1='K40KK' where id=5; -update noar tt set v0='I51G38X' where id=5; -update noar ti set v0='I51G38X' where id=5; -update noar tt set b2='NMMDK5HT4TQCZ223HJMH' where id=5; -update noar ti set b2='NMMDK5HT4TQCZ223HJMH' where id=5; -update noar tt set v0='YJCHF6KH4H3V0X1US786K5GAH1D1F52' where id=6; -update noar ti set v0='YJCHF6KH4H3V0X1US786K5GAH1D1F52' where id=6; -update noar tt set b0='5N2ULTBPEJO0VTVEDQ30WN68BRX' where id=6; -update noar ti set b0='5N2ULTBPEJO0VTVEDQ30WN68BRX' where id=6; -update noar tt set v0='28TK0FK' where id=6; -update noar ti set v0='28TK0FK' where id=6; -update noar tt set b1='10D4UXSXS0B887F' where id=6; -update noar ti set b1='10D4UXSXS0B887F' where id=6; -update noar tt set v0='56' where id=6; -update noar ti set v0='56' where id=6; -update noar tt set b2='26ZD5DIYVIXLRUH00C65PEC5CT0' where id=6; -update noar ti set b2='26ZD5DIYVIXLRUH00C65PEC5CT0' where id=6; -update noar tt set v0='Y' where id=7; -update noar ti set v0='Y' where id=7; -update noar tt set b0='5GXO' where id=7; -update noar ti set b0='5GXO' where id=7; -update noar tt set v0='VYXHF6O2M9DGW' where id=7; -update noar ti set v0='VYXHF6O2M9DGW' where id=7; -update noar tt set b1='FRZSVRQ7S6T7I5COC5AGJNTU' where id=7; -update noar ti set b1='FRZSVRQ7S6T7I5COC5AGJNTU' where id=7; -update noar tt set v0='UZGDBY7Z678RSL0' where id=7; -update noar ti set v0='UZGDBY7Z678RSL0' where id=7; -update noar tt set b2='1WXPQ46G8OI9JCDDHH' where id=7; -update noar ti set b2='1WXPQ46G8OI9JCDDHH' where id=7; -update noar tt set v0='5L8G' where id=8; -update noar ti set v0='5L8G' where id=8; -update noar tt set b0='BFNWF9KEC2H49UHCFMGV8N17F' where id=8; -update noar ti set b0='BFNWF9KEC2H49UHCFMGV8N17F' where id=8; -update noar tt set v0='1GWHOS2XH171' where id=8; -update noar ti set v0='1GWHOS2XH171' where id=8; -update noar tt set b1='02LXB8DY' where id=8; -update noar ti set b1='02LXB8DY' where id=8; -update noar tt set v0='UOYGGAFZ6R6' where id=8; -update noar ti set v0='UOYGGAFZ6R6' where id=8; -update noar tt set b2='8HE71MWTPS1G4JG9SMQPW5GO' where id=8; -update noar ti set b2='8HE71MWTPS1G4JG9SMQPW5GO' where id=8; -update noar tt set v0='7UCQFA39COG98QHE5H1IA52CM14OGGWO' where id=9; -update noar ti set v0='7UCQFA39COG98QHE5H1IA52CM14OGGWO' where id=9; -update noar tt set b0='TQ3QQBZB4ORD6X2LT9CHNHMLXZ74X8RF' where id=9; -update noar ti set b0='TQ3QQBZB4ORD6X2LT9CHNHMLXZ74X8RF' where id=9; -update noar tt set v0='9I12QSHR245FJ4VJEBXT0EXV58YK' where id=9; -update noar ti set v0='9I12QSHR245FJ4VJEBXT0EXV58YK' where id=9; -update noar tt set b1='6OWZ8BSATIWDL414' where id=9; -update noar ti set b1='6OWZ8BSATIWDL414' where id=9; -update noar tt set v0='NAXC' where id=9; -update noar ti set v0='NAXC' where id=9; -update noar tt set b2='GPS5U' where id=9; -update noar ti set b2='GPS5U' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 tinyblob null, - b1 tinyblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='GUA99YRIEYZU77WX3' where id=1; -update noar ti set v0='GUA99YRIEYZU77WX3' where id=1; -update noar tt set b0='E5Z8VH6HTFIAY13A' where id=1; -update noar ti set b0='E5Z8VH6HTFIAY13A' where id=1; -update noar tt set v0='OQ9KH23SWRX0TJX9GLDWRSQ34SI' where id=1; -update noar ti set v0='OQ9KH23SWRX0TJX9GLDWRSQ34SI' where id=1; -update noar tt set b1='FI1AL700DW9QCM8N4SC1BAN3IV' where id=1; -update noar ti set b1='FI1AL700DW9QCM8N4SC1BAN3IV' where id=1; -update noar tt set v0='KHA1NS5XOLNS7U5IDIYN' where id=1; -update noar ti set v0='KHA1NS5XOLNS7U5IDIYN' where id=1; -update noar tt set b2='CQ9O8NN2I7QRR4P1' where id=1; -update noar ti set b2='CQ9O8NN2I7QRR4P1' where id=1; -update noar tt set v0='E0EQ22N3R4IO598UBGE6BPKC8P8RA' where id=2; -update noar ti set v0='E0EQ22N3R4IO598UBGE6BPKC8P8RA' where id=2; -update noar tt set b0='Z6XMK8B1U' where id=2; -update noar ti set b0='Z6XMK8B1U' where id=2; -update noar tt set v0='D3NQLTNMAVRSZMTZK43ASVXVP' where id=2; -update noar ti set v0='D3NQLTNMAVRSZMTZK43ASVXVP' where id=2; -update noar tt set b1='BM2KNC' where id=2; -update noar ti set b1='BM2KNC' where id=2; -update noar tt set v0='CM0UZPQBB3V268YAQU' where id=2; -update noar ti set v0='CM0UZPQBB3V268YAQU' where id=2; -update noar tt set b2='O4L0L27RH52X' where id=2; -update noar ti set b2='O4L0L27RH52X' where id=2; -update noar tt set v0='S5GDFSYE' where id=3; -update noar ti set v0='S5GDFSYE' where id=3; -update noar tt set b0='I3M3S6CAV84NAZ5' where id=3; -update noar ti set b0='I3M3S6CAV84NAZ5' where id=3; -update noar tt set v0='61240QJW72' where id=3; -update noar ti set v0='61240QJW72' where id=3; -update noar tt set b1='Z2BJ9' where id=3; -update noar ti set b1='Z2BJ9' where id=3; -update noar tt set v0='DH1QO' where id=3; -update noar ti set v0='DH1QO' where id=3; -update noar tt set b2='VCDOV18NW' where id=3; -update noar ti set b2='VCDOV18NW' where id=3; -update noar tt set v0='ICZ07JGBI54A21OWP' where id=4; -update noar ti set v0='ICZ07JGBI54A21OWP' where id=4; -update noar tt set b0='22C9JSV2LTPPHOL' where id=4; -update noar ti set b0='22C9JSV2LTPPHOL' where id=4; -update noar tt set v0='J0HN6ATJ' where id=4; -update noar ti set v0='J0HN6ATJ' where id=4; -update noar tt set b1='V4OV7F' where id=4; -update noar ti set b1='V4OV7F' where id=4; -update noar tt set v0='YEFQZKTI8UPIEEPHQKMJKH' where id=4; -update noar ti set v0='YEFQZKTI8UPIEEPHQKMJKH' where id=4; -update noar tt set b2='Z5N6PXGUU15LZ' where id=4; -update noar ti set b2='Z5N6PXGUU15LZ' where id=4; -update noar tt set v0='Y8SZCFNUK4W33LYH735Y8YOGYTQMU' where id=5; -update noar ti set v0='Y8SZCFNUK4W33LYH735Y8YOGYTQMU' where id=5; -update noar tt set b0='BUIVHMNWP73OS6' where id=5; -update noar ti set b0='BUIVHMNWP73OS6' where id=5; -update noar tt set v0='Q7ZZN2EG00YC' where id=5; -update noar ti set v0='Q7ZZN2EG00YC' where id=5; -update noar tt set b1='JE7X8PXFPKYCQ7JJ10K4EZO4SZ4D0J4Q' where id=5; -update noar ti set b1='JE7X8PXFPKYCQ7JJ10K4EZO4SZ4D0J4Q' where id=5; -update noar tt set v0='CP440F' where id=5; -update noar ti set v0='CP440F' where id=5; -update noar tt set b2='MN5GKAV2U8LQ92SNVNPML1B' where id=5; -update noar ti set b2='MN5GKAV2U8LQ92SNVNPML1B' where id=5; -update noar tt set v0='8P4D2473PB' where id=6; -update noar ti set v0='8P4D2473PB' where id=6; -update noar tt set b0='WS8Y' where id=6; -update noar ti set b0='WS8Y' where id=6; -update noar tt set v0='91KF3F45E1XKXDQS4OSMIWEA8IPAN20' where id=6; -update noar ti set v0='91KF3F45E1XKXDQS4OSMIWEA8IPAN20' where id=6; -update noar tt set b1='8' where id=6; -update noar ti set b1='8' where id=6; -update noar tt set v0='26F120T2108GADPHE' where id=6; -update noar ti set v0='26F120T2108GADPHE' where id=6; -update noar tt set b2='JJ' where id=6; -update noar ti set b2='JJ' where id=6; -update noar tt set v0='T' where id=7; -update noar ti set v0='T' where id=7; -update noar tt set b0='5ZTBEX6EBFB' where id=7; -update noar ti set b0='5ZTBEX6EBFB' where id=7; -update noar tt set v0='BUGCY48W5G0050' where id=7; -update noar ti set v0='BUGCY48W5G0050' where id=7; -update noar tt set b1='GGH1E198NDN9WO7TS8CHCGK2O2SJO9Q6' where id=7; -update noar ti set b1='GGH1E198NDN9WO7TS8CHCGK2O2SJO9Q6' where id=7; -update noar tt set v0='YSQAVTQ07AKVLVE' where id=7; -update noar ti set v0='YSQAVTQ07AKVLVE' where id=7; -update noar tt set b2='72Q2J0RGF2RW4YZYNG2RS22N5NSC62' where id=7; -update noar ti set b2='72Q2J0RGF2RW4YZYNG2RS22N5NSC62' where id=7; -update noar tt set v0='72T978DXAG0IB2OXWNMDMB' where id=8; -update noar ti set v0='72T978DXAG0IB2OXWNMDMB' where id=8; -update noar tt set b0='97RM4F4P02YBFNP7IHO2R4Q1Y14' where id=8; -update noar ti set b0='97RM4F4P02YBFNP7IHO2R4Q1Y14' where id=8; -update noar tt set v0='KH5K09RLK3ETRF9VQCG' where id=8; -update noar ti set v0='KH5K09RLK3ETRF9VQCG' where id=8; -update noar tt set b1='TALGG97WNSAMLLWEG8JAL066DJJB' where id=8; -update noar ti set b1='TALGG97WNSAMLLWEG8JAL066DJJB' where id=8; -update noar tt set v0='3FCLFHI2LVSPURWXIY50YEI9XJMYS' where id=8; -update noar ti set v0='3FCLFHI2LVSPURWXIY50YEI9XJMYS' where id=8; -update noar tt set b2='Y46UAO' where id=8; -update noar ti set b2='Y46UAO' where id=8; -update noar tt set v0='5R' where id=9; -update noar ti set v0='5R' where id=9; -update noar tt set b0='U58' where id=9; -update noar ti set b0='U58' where id=9; -update noar tt set v0='BZI' where id=9; -update noar ti set v0='BZI' where id=9; -update noar tt set b1='ICV44HCMSZBPH74Z0M5KJY0FM' where id=9; -update noar ti set b1='ICV44HCMSZBPH74Z0M5KJY0FM' where id=9; -update noar tt set v0='N17OPAA5V1RM5ZOY5774' where id=9; -update noar ti set v0='N17OPAA5V1RM5ZOY5774' where id=9; -update noar tt set b2='S153ADXJF9QJ918EK43VB15MJ' where id=9; -update noar ti set b2='S153ADXJF9QJ918EK43VB15MJ' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 tinyblob not null, - b1 tinyblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='O' where id=1; -update noar ti set v0='O' where id=1; -update noar tt set b0='7WFINTFU68KC2MI' where id=1; -update noar ti set b0='7WFINTFU68KC2MI' where id=1; -update noar tt set v0='8Y6G1RMEG6MAUAQNBJVL6B7E54ML472H' where id=1; -update noar ti set v0='8Y6G1RMEG6MAUAQNBJVL6B7E54ML472H' where id=1; -update noar tt set b1='XZ67YVD8I7XNHX' where id=1; -update noar ti set b1='XZ67YVD8I7XNHX' where id=1; -update noar tt set v0='PQHHP59FOSOOAOWZDMDR67XP9P' where id=1; -update noar ti set v0='PQHHP59FOSOOAOWZDMDR67XP9P' where id=1; -update noar tt set b2='4CU4BUBGWOLPI9ZN6SX310F8TFEHK2L' where id=1; -update noar ti set b2='4CU4BUBGWOLPI9ZN6SX310F8TFEHK2L' where id=1; -update noar tt set v0='7G6OGU8JP2H61YHFMEHOV' where id=2; -update noar ti set v0='7G6OGU8JP2H61YHFMEHOV' where id=2; -update noar tt set b0='CP3A1L3H045J21O81H93TG' where id=2; -update noar ti set b0='CP3A1L3H045J21O81H93TG' where id=2; -update noar tt set v0='M88M5W0U4NTYSOP7Y0H' where id=2; -update noar ti set v0='M88M5W0U4NTYSOP7Y0H' where id=2; -update noar tt set b1='F0ZMQ90OIT0EV06WNBGDMTJK44N61THT' where id=2; -update noar ti set b1='F0ZMQ90OIT0EV06WNBGDMTJK44N61THT' where id=2; -update noar tt set v0='X75D7JD7ORSLI3XDQG1O' where id=2; -update noar ti set v0='X75D7JD7ORSLI3XDQG1O' where id=2; -update noar tt set b2='BGH26K278X3TQ22RLGBO38' where id=2; -update noar ti set b2='BGH26K278X3TQ22RLGBO38' where id=2; -update noar tt set v0='5MUNWJ0ECS9ESFZ3MMNHV' where id=3; -update noar ti set v0='5MUNWJ0ECS9ESFZ3MMNHV' where id=3; -update noar tt set b0='TL5TPPAK2JH352HTP7DFXM8J' where id=3; -update noar ti set b0='TL5TPPAK2JH352HTP7DFXM8J' where id=3; -update noar tt set v0='6A3M46OO64CLJ' where id=3; -update noar ti set v0='6A3M46OO64CLJ' where id=3; -update noar tt set b1='OZKDC7IPLVS1ID5LRXU0QBF1F' where id=3; -update noar ti set b1='OZKDC7IPLVS1ID5LRXU0QBF1F' where id=3; -update noar tt set v0='P034MPJ1F0C32' where id=3; -update noar ti set v0='P034MPJ1F0C32' where id=3; -update noar tt set b2='THQJWHVYZIAZN3T2NLQMA4N4PBHP' where id=3; -update noar ti set b2='THQJWHVYZIAZN3T2NLQMA4N4PBHP' where id=3; -update noar tt set v0='OR5' where id=4; -update noar ti set v0='OR5' where id=4; -update noar tt set b0='6MAD20YSIPY4G6EUTYDJJM6' where id=4; -update noar ti set b0='6MAD20YSIPY4G6EUTYDJJM6' where id=4; -update noar tt set v0='CK6IN48FCJB3OLAK46' where id=4; -update noar ti set v0='CK6IN48FCJB3OLAK46' where id=4; -update noar tt set b1='P6OCTFHT00CGUVSJG' where id=4; -update noar ti set b1='P6OCTFHT00CGUVSJG' where id=4; -update noar tt set v0='319PSGWXCTIYMSW6J2VC5U4HHHBE' where id=4; -update noar ti set v0='319PSGWXCTIYMSW6J2VC5U4HHHBE' where id=4; -update noar tt set b2='20LIQVKLWHQ' where id=4; -update noar ti set b2='20LIQVKLWHQ' where id=4; -update noar tt set v0='T3M9334' where id=5; -update noar ti set v0='T3M9334' where id=5; -update noar tt set b0='RWL2Q8I21' where id=5; -update noar ti set b0='RWL2Q8I21' where id=5; -update noar tt set v0='ZOURSSIAMP9P2' where id=5; -update noar ti set v0='ZOURSSIAMP9P2' where id=5; -update noar tt set b1='1QKM7QT6GUJUJ7' where id=5; -update noar ti set b1='1QKM7QT6GUJUJ7' where id=5; -update noar tt set v0='3KC4WWAE' where id=5; -update noar ti set v0='3KC4WWAE' where id=5; -update noar tt set b2='V83H2F1I010Y9S8QJ5XQKAAHTT' where id=5; -update noar ti set b2='V83H2F1I010Y9S8QJ5XQKAAHTT' where id=5; -update noar tt set v0='2CAH2H' where id=6; -update noar ti set v0='2CAH2H' where id=6; -update noar tt set b0='5KN6P62F8T6KI2QZ0J2G' where id=6; -update noar ti set b0='5KN6P62F8T6KI2QZ0J2G' where id=6; -update noar tt set v0='ZN1' where id=6; -update noar ti set v0='ZN1' where id=6; -update noar tt set b1='TD56FIWOOV9T33QLWNH6CL' where id=6; -update noar ti set b1='TD56FIWOOV9T33QLWNH6CL' where id=6; -update noar tt set v0='NQCYZW0Y2IJMDJ' where id=6; -update noar ti set v0='NQCYZW0Y2IJMDJ' where id=6; -update noar tt set b2='8YZP0L26KWP2KWSVX0I52HOWI21L' where id=6; -update noar ti set b2='8YZP0L26KWP2KWSVX0I52HOWI21L' where id=6; -update noar tt set v0='E5XDB8QDVBSLV3U228M9UGR' where id=7; -update noar ti set v0='E5XDB8QDVBSLV3U228M9UGR' where id=7; -update noar tt set b0='XQIABVXMDJZXAPF0FL2' where id=7; -update noar ti set b0='XQIABVXMDJZXAPF0FL2' where id=7; -update noar tt set v0='J8C31VBSKBX0Z46ZS9' where id=7; -update noar ti set v0='J8C31VBSKBX0Z46ZS9' where id=7; -update noar tt set b1='74PSP6PWHHL2O5EKZ18BSLA2DT6NTJ' where id=7; -update noar ti set b1='74PSP6PWHHL2O5EKZ18BSLA2DT6NTJ' where id=7; -update noar tt set v0='XP9LGI4YYTSN16GCDU2I' where id=7; -update noar ti set v0='XP9LGI4YYTSN16GCDU2I' where id=7; -update noar tt set b2='Q0UFFR16PFW40G2XZER' where id=7; -update noar ti set b2='Q0UFFR16PFW40G2XZER' where id=7; -update noar tt set v0='HTGPFECKCM8ZX3W6AQ02E9W2MGJYT' where id=8; -update noar ti set v0='HTGPFECKCM8ZX3W6AQ02E9W2MGJYT' where id=8; -update noar tt set b0='NOGT7Q2A0E5B9NP3TO' where id=8; -update noar ti set b0='NOGT7Q2A0E5B9NP3TO' where id=8; -update noar tt set v0='4MEA5S' where id=8; -update noar ti set v0='4MEA5S' where id=8; -update noar tt set b1='I' where id=8; -update noar ti set b1='I' where id=8; -update noar tt set v0='HJ44ZUF9VIT0VBLUZM6YX' where id=8; -update noar ti set v0='HJ44ZUF9VIT0VBLUZM6YX' where id=8; -update noar tt set b2='NOWQ33NMX08A3BF39' where id=8; -update noar ti set b2='NOWQ33NMX08A3BF39' where id=8; -update noar tt set v0='SB4VBLPCFKNVIBACVHUNVNTJTWBCVGNG' where id=9; -update noar ti set v0='SB4VBLPCFKNVIBACVHUNVNTJTWBCVGNG' where id=9; -update noar tt set b0='BAVK0O8UVSP5LMZKGU3AROG8' where id=9; -update noar ti set b0='BAVK0O8UVSP5LMZKGU3AROG8' where id=9; -update noar tt set v0='WLH8N0Y2BL1BUBGRTZOACXI5F' where id=9; -update noar ti set v0='WLH8N0Y2BL1BUBGRTZOACXI5F' where id=9; -update noar tt set b1='MITR2S8Z9B99U3U6' where id=9; -update noar ti set b1='MITR2S8Z9B99U3U6' where id=9; -update noar tt set v0='J7OUHRAGA7Q64L9I21VX9U6IERGR' where id=9; -update noar ti set v0='J7OUHRAGA7Q64L9I21VX9U6IERGR' where id=9; -update noar tt set b2='H41K62MYEH7YAJ' where id=9; -update noar ti set b2='H41K62MYEH7YAJ' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 tinyblob not null, - b1 tinyblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='IZN4AE26FMKIAPVY1GBS' where id=1; -update noar ti set v0='IZN4AE26FMKIAPVY1GBS' where id=1; -update noar tt set b0='KQBOIDHT31' where id=1; -update noar ti set b0='KQBOIDHT31' where id=1; -update noar tt set v0='I' where id=1; -update noar ti set v0='I' where id=1; -update noar tt set b1='IJ2HJ4ZQO2OM4TNM3NGK3VCNCPIJ55Z' where id=1; -update noar ti set b1='IJ2HJ4ZQO2OM4TNM3NGK3VCNCPIJ55Z' where id=1; -update noar tt set v0='LUCH9O846MXFZP6P0S1BHGWP' where id=1; -update noar ti set v0='LUCH9O846MXFZP6P0S1BHGWP' where id=1; -update noar tt set b2='YQ9SWF40' where id=1; -update noar ti set b2='YQ9SWF40' where id=1; -update noar tt set v0='22Y' where id=2; -update noar ti set v0='22Y' where id=2; -update noar tt set b0='4PP3R' where id=2; -update noar ti set b0='4PP3R' where id=2; -update noar tt set v0='VKG379CB24BM3Q0HC97TTGL' where id=2; -update noar ti set v0='VKG379CB24BM3Q0HC97TTGL' where id=2; -update noar tt set b1='XWUXQYTY6L0X9FJAJT2MENFGEFK' where id=2; -update noar ti set b1='XWUXQYTY6L0X9FJAJT2MENFGEFK' where id=2; -update noar tt set v0='UA27HBFM2R8KIJ3G8YG' where id=2; -update noar ti set v0='UA27HBFM2R8KIJ3G8YG' where id=2; -update noar tt set b2='AMB061GZYIH1HODBN1AFSU80Q0UPOJV0' where id=2; -update noar ti set b2='AMB061GZYIH1HODBN1AFSU80Q0UPOJV0' where id=2; -update noar tt set v0='A1UCNEXNHL7GAZBWX9MLA' where id=3; -update noar ti set v0='A1UCNEXNHL7GAZBWX9MLA' where id=3; -update noar tt set b0='5IV1SQ2SHJ15TB6KT0' where id=3; -update noar ti set b0='5IV1SQ2SHJ15TB6KT0' where id=3; -update noar tt set v0='1M8FQQ360XV40' where id=3; -update noar ti set v0='1M8FQQ360XV40' where id=3; -update noar tt set b1='2' where id=3; -update noar ti set b1='2' where id=3; -update noar tt set v0='K7SID54GZ9LCSYD5WZHL0' where id=3; -update noar ti set v0='K7SID54GZ9LCSYD5WZHL0' where id=3; -update noar tt set b2='Z1PFTP91MKG7PFQVXGCCPMK8YZ2T' where id=3; -update noar ti set b2='Z1PFTP91MKG7PFQVXGCCPMK8YZ2T' where id=3; -update noar tt set v0='190QA423L6' where id=4; -update noar ti set v0='190QA423L6' where id=4; -update noar tt set b0='0N4L1A6DBECPSCGROA08ALPWW' where id=4; -update noar ti set b0='0N4L1A6DBECPSCGROA08ALPWW' where id=4; -update noar tt set v0='RV8YXGAFFEW' where id=4; -update noar ti set v0='RV8YXGAFFEW' where id=4; -update noar tt set b1='B' where id=4; -update noar ti set b1='B' where id=4; -update noar tt set v0='JWHU540G27P1NE5GK44' where id=4; -update noar ti set v0='JWHU540G27P1NE5GK44' where id=4; -update noar tt set b2='95LW7P' where id=4; -update noar ti set b2='95LW7P' where id=4; -update noar tt set v0='X6W3Y' where id=5; -update noar ti set v0='X6W3Y' where id=5; -update noar tt set b0='KA3PNL7ZZWYI0KST' where id=5; -update noar ti set b0='KA3PNL7ZZWYI0KST' where id=5; -update noar tt set v0='NW752UMNSAT85AG' where id=5; -update noar ti set v0='NW752UMNSAT85AG' where id=5; -update noar tt set b1='6Y6I3I20EWCRC659SW1D8BJHJ7I' where id=5; -update noar ti set b1='6Y6I3I20EWCRC659SW1D8BJHJ7I' where id=5; -update noar tt set v0='WK80P9WHFP8WCXEVJL4VXMMB' where id=5; -update noar ti set v0='WK80P9WHFP8WCXEVJL4VXMMB' where id=5; -update noar tt set b2='FD91QTIIO36J67JV0UUZZPO4V' where id=5; -update noar ti set b2='FD91QTIIO36J67JV0UUZZPO4V' where id=5; -update noar tt set v0='35B8ISOR6POBVG1YENORJ' where id=6; -update noar ti set v0='35B8ISOR6POBVG1YENORJ' where id=6; -update noar tt set b0='M3AV00MT33WE8CMKQU3CH58H02TAN' where id=6; -update noar ti set b0='M3AV00MT33WE8CMKQU3CH58H02TAN' where id=6; -update noar tt set v0='7590AYRMGET4QQ8ACT' where id=6; -update noar ti set v0='7590AYRMGET4QQ8ACT' where id=6; -update noar tt set b1='EEJT7SFNX7M58C3MJ0MT3UHPVHNHZ' where id=6; -update noar ti set b1='EEJT7SFNX7M58C3MJ0MT3UHPVHNHZ' where id=6; -update noar tt set v0='MUFTF428' where id=6; -update noar ti set v0='MUFTF428' where id=6; -update noar tt set b2='U4AQMT3YXHE9Y4AJ' where id=6; -update noar ti set b2='U4AQMT3YXHE9Y4AJ' where id=6; -update noar tt set v0='W' where id=7; -update noar ti set v0='W' where id=7; -update noar tt set b0='K1FE85KDJ5TCJEW2J39AIY' where id=7; -update noar ti set b0='K1FE85KDJ5TCJEW2J39AIY' where id=7; -update noar tt set v0='H0VFZCKKDVRD' where id=7; -update noar ti set v0='H0VFZCKKDVRD' where id=7; -update noar tt set b1='NR927SNJSVLUSEDEOXP6Y42SO6316' where id=7; -update noar ti set b1='NR927SNJSVLUSEDEOXP6Y42SO6316' where id=7; -update noar tt set v0='4HT5CYXGHTO8R682IB7BW8' where id=7; -update noar ti set v0='4HT5CYXGHTO8R682IB7BW8' where id=7; -update noar tt set b2='A4J1U09SB44' where id=7; -update noar ti set b2='A4J1U09SB44' where id=7; -update noar tt set v0='OVP4QJY83KNWG48C4GLQJ' where id=8; -update noar ti set v0='OVP4QJY83KNWG48C4GLQJ' where id=8; -update noar tt set b0='1TUBS' where id=8; -update noar ti set b0='1TUBS' where id=8; -update noar tt set v0='N6LNMNGSDD8G148JQAI2KVO' where id=8; -update noar ti set v0='N6LNMNGSDD8G148JQAI2KVO' where id=8; -update noar tt set b1='98AZS' where id=8; -update noar ti set b1='98AZS' where id=8; -update noar tt set v0='L' where id=8; -update noar ti set v0='L' where id=8; -update noar tt set b2='QZL5PAOLMIJPVLJ6WK75GG0RR2L7K7G' where id=8; -update noar ti set b2='QZL5PAOLMIJPVLJ6WK75GG0RR2L7K7G' where id=8; -update noar tt set v0='TAHWUXACQRHYJY24' where id=9; -update noar ti set v0='TAHWUXACQRHYJY24' where id=9; -update noar tt set b0='LWGVFJMN17C6' where id=9; -update noar ti set b0='LWGVFJMN17C6' where id=9; -update noar tt set v0='F' where id=9; -update noar ti set v0='F' where id=9; -update noar tt set b1='LP59ERAGE2PQNSVMW1QEZAOJ38ZPMDSA' where id=9; -update noar ti set b1='LP59ERAGE2PQNSVMW1QEZAOJ38ZPMDSA' where id=9; -update noar tt set v0='Q40BUM86DC118LJR' where id=9; -update noar ti set v0='Q40BUM86DC118LJR' where id=9; -update noar tt set b2='LUVZODTSZVB6E42SAOJ5ZV9NBSC00S33' where id=9; -update noar ti set b2='LUVZODTSZVB6E42SAOJ5ZV9NBSC00S33' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 tinyblob null, - b1 tinyblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='04ZQCUB6BKE12K' where id=1; -update noar ti set v0='04ZQCUB6BKE12K' where id=1; -update noar tt set b0='HKPCNPZ2S6Z4KYXKA98ZQHH' where id=1; -update noar ti set b0='HKPCNPZ2S6Z4KYXKA98ZQHH' where id=1; -update noar tt set v0='39NL47XA6NTRW' where id=1; -update noar ti set v0='39NL47XA6NTRW' where id=1; -update noar tt set b1='KDZVPTK934BSLJ6FIVNRCKCZ1QZKQI5B' where id=1; -update noar ti set b1='KDZVPTK934BSLJ6FIVNRCKCZ1QZKQI5B' where id=1; -update noar tt set v0='P' where id=1; -update noar ti set v0='P' where id=1; -update noar tt set b2='MH1IJI242DG8ML6GNTCMS1LDRE' where id=1; -update noar ti set b2='MH1IJI242DG8ML6GNTCMS1LDRE' where id=1; -update noar tt set v0='GUCUV3K' where id=2; -update noar ti set v0='GUCUV3K' where id=2; -update noar tt set b0='I0OB2NXIDVOMUFUEWG778RYAV' where id=2; -update noar ti set b0='I0OB2NXIDVOMUFUEWG778RYAV' where id=2; -update noar tt set v0='PE00LJ6ZMZOZGMK31X' where id=2; -update noar ti set v0='PE00LJ6ZMZOZGMK31X' where id=2; -update noar tt set b1='2H8XU7WKA' where id=2; -update noar ti set b1='2H8XU7WKA' where id=2; -update noar tt set v0='4GR2VSOJLWNJW4FL1NHACDKSSX21Z' where id=2; -update noar ti set v0='4GR2VSOJLWNJW4FL1NHACDKSSX21Z' where id=2; -update noar tt set b2='TOXIW3KYIG7DU72EVPQKDOE' where id=2; -update noar ti set b2='TOXIW3KYIG7DU72EVPQKDOE' where id=2; -update noar tt set v0='CP' where id=3; -update noar ti set v0='CP' where id=3; -update noar tt set b0='8YLC8Y7UUPT6U' where id=3; -update noar ti set b0='8YLC8Y7UUPT6U' where id=3; -update noar tt set v0='RUYO' where id=3; -update noar ti set v0='RUYO' where id=3; -update noar tt set b1='AD0MQ9CN5N9HSFIUE66ZBFZY' where id=3; -update noar ti set b1='AD0MQ9CN5N9HSFIUE66ZBFZY' where id=3; -update noar tt set v0='OQSNGFVVXD82ZGP7M8E30EX7JQ' where id=3; -update noar ti set v0='OQSNGFVVXD82ZGP7M8E30EX7JQ' where id=3; -update noar tt set b2='SJ2S157JO18KTYBITPUB' where id=3; -update noar ti set b2='SJ2S157JO18KTYBITPUB' where id=3; -update noar tt set v0='6BSLT8FMWFU55M9CDLE16' where id=4; -update noar ti set v0='6BSLT8FMWFU55M9CDLE16' where id=4; -update noar tt set b0='A6' where id=4; -update noar ti set b0='A6' where id=4; -update noar tt set v0='LX2T4D2HTX6XHUITHB7ZI9OZ' where id=4; -update noar ti set v0='LX2T4D2HTX6XHUITHB7ZI9OZ' where id=4; -update noar tt set b1='LET5Y65TUD3CZHRQ6WEHGRZWMJX9HS' where id=4; -update noar ti set b1='LET5Y65TUD3CZHRQ6WEHGRZWMJX9HS' where id=4; -update noar tt set v0='Z1MTYBNZLJOR50MH84FXT2IMW8S' where id=4; -update noar ti set v0='Z1MTYBNZLJOR50MH84FXT2IMW8S' where id=4; -update noar tt set b2='X1LF7KW4S1DUBYSHED21GWV2V' where id=4; -update noar ti set b2='X1LF7KW4S1DUBYSHED21GWV2V' where id=4; -update noar tt set v0='YYOW1K' where id=5; -update noar ti set v0='YYOW1K' where id=5; -update noar tt set b0='MUM1E0NFLAGCX1IGOGMZ0G2M9' where id=5; -update noar ti set b0='MUM1E0NFLAGCX1IGOGMZ0G2M9' where id=5; -update noar tt set v0='SLRQDJP6NV15BOC1R' where id=5; -update noar ti set v0='SLRQDJP6NV15BOC1R' where id=5; -update noar tt set b1='GG9523OCJK3W7GPTUVVYR71C' where id=5; -update noar ti set b1='GG9523OCJK3W7GPTUVVYR71C' where id=5; -update noar tt set v0='GMY3INN6W8UPADCLXFCSKQFLCHJ85' where id=5; -update noar ti set v0='GMY3INN6W8UPADCLXFCSKQFLCHJ85' where id=5; -update noar tt set b2='4' where id=5; -update noar ti set b2='4' where id=5; -update noar tt set v0='RHPYNI5C95YRMZKI3UGFZLOT6K5L' where id=6; -update noar ti set v0='RHPYNI5C95YRMZKI3UGFZLOT6K5L' where id=6; -update noar tt set b0='R3MU2F0PW007PN' where id=6; -update noar ti set b0='R3MU2F0PW007PN' where id=6; -update noar tt set v0='0B3O4POU0MFYT8' where id=6; -update noar ti set v0='0B3O4POU0MFYT8' where id=6; -update noar tt set b1='MYDNT1DWITK1I' where id=6; -update noar ti set b1='MYDNT1DWITK1I' where id=6; -update noar tt set v0='0IET0IV730CDS3YP' where id=6; -update noar ti set v0='0IET0IV730CDS3YP' where id=6; -update noar tt set b2='ZNMGR3WP78U43W' where id=6; -update noar ti set b2='ZNMGR3WP78U43W' where id=6; -update noar tt set v0='9K4M9YJ21B3H9L28I' where id=7; -update noar ti set v0='9K4M9YJ21B3H9L28I' where id=7; -update noar tt set b0='ZOCGMA' where id=7; -update noar ti set b0='ZOCGMA' where id=7; -update noar tt set v0='2O8NB6AY5BGN3UPOCFENP' where id=7; -update noar ti set v0='2O8NB6AY5BGN3UPOCFENP' where id=7; -update noar tt set b1='GEEL7K9S50M' where id=7; -update noar ti set b1='GEEL7K9S50M' where id=7; -update noar tt set v0='1NZU1V' where id=7; -update noar ti set v0='1NZU1V' where id=7; -update noar tt set b2='9TOWH0PNZT50G9VOWYEKT4FQOJ' where id=7; -update noar ti set b2='9TOWH0PNZT50G9VOWYEKT4FQOJ' where id=7; -update noar tt set v0='Y8YR18HBNGB626H14D07N81XP' where id=8; -update noar ti set v0='Y8YR18HBNGB626H14D07N81XP' where id=8; -update noar tt set b0='DKUSHBR0W69D1X5A7RZ2FTMQ2WTSXM1' where id=8; -update noar ti set b0='DKUSHBR0W69D1X5A7RZ2FTMQ2WTSXM1' where id=8; -update noar tt set v0='OE9Z8D277PAO' where id=8; -update noar ti set v0='OE9Z8D277PAO' where id=8; -update noar tt set b1='MVL6SN6NA12KDDBENEYF1CTGW3A7' where id=8; -update noar ti set b1='MVL6SN6NA12KDDBENEYF1CTGW3A7' where id=8; -update noar tt set v0='L6AP' where id=8; -update noar ti set v0='L6AP' where id=8; -update noar tt set b2='3HEXQO0MCRG95KHSNHL5' where id=8; -update noar ti set b2='3HEXQO0MCRG95KHSNHL5' where id=8; -update noar tt set v0='5O27VIEO3RFE86KYI9PE23A' where id=9; -update noar ti set v0='5O27VIEO3RFE86KYI9PE23A' where id=9; -update noar tt set b0='KEJN583WTJHZ2UFJNX83YE9E9BG9FA9' where id=9; -update noar ti set b0='KEJN583WTJHZ2UFJNX83YE9E9BG9FA9' where id=9; -update noar tt set v0='MSKU6Y4W5VRH2XYI7T2SY' where id=9; -update noar ti set v0='MSKU6Y4W5VRH2XYI7T2SY' where id=9; -update noar tt set b1='DHE1H05R' where id=9; -update noar ti set b1='DHE1H05R' where id=9; -update noar tt set v0='ZI4VG1QJ' where id=9; -update noar ti set v0='ZI4VG1QJ' where id=9; -update noar tt set b2='BDWVOKE8AQSN' where id=9; -update noar ti set b2='BDWVOKE8AQSN' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 tinyblob null, - b1 tinyblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='S38V6P1S0BNAN' where id=1; -update noar ti set v0='S38V6P1S0BNAN' where id=1; -update noar tt set b0='SNX1PRRGATZDTBZQROZG936XCO35' where id=1; -update noar ti set b0='SNX1PRRGATZDTBZQROZG936XCO35' where id=1; -update noar tt set v0='OE4TZHS4ZS83W4W0H' where id=1; -update noar ti set v0='OE4TZHS4ZS83W4W0H' where id=1; -update noar tt set b1='W0K32SKSG7B96L9H' where id=1; -update noar ti set b1='W0K32SKSG7B96L9H' where id=1; -update noar tt set v0='LBOXALUNT3OWTZLKU5R9' where id=1; -update noar ti set v0='LBOXALUNT3OWTZLKU5R9' where id=1; -update noar tt set b2='0PJW46H' where id=1; -update noar ti set b2='0PJW46H' where id=1; -update noar tt set v0='LX0LP5ZNAK38' where id=2; -update noar ti set v0='LX0LP5ZNAK38' where id=2; -update noar tt set b0='2NSV3B2M9UIH8AJTXXXRDQ' where id=2; -update noar ti set b0='2NSV3B2M9UIH8AJTXXXRDQ' where id=2; -update noar tt set v0='7BVYSTXQ9U7X9Q0ULO89BCZR2S' where id=2; -update noar ti set v0='7BVYSTXQ9U7X9Q0ULO89BCZR2S' where id=2; -update noar tt set b1='U9B4KUSO5HXKLYJKWEMWGGLDA4PV0B' where id=2; -update noar ti set b1='U9B4KUSO5HXKLYJKWEMWGGLDA4PV0B' where id=2; -update noar tt set v0='TH7PT4B3CQIKZX' where id=2; -update noar ti set v0='TH7PT4B3CQIKZX' where id=2; -update noar tt set b2='SXMI1EWOHWD3JVD' where id=2; -update noar ti set b2='SXMI1EWOHWD3JVD' where id=2; -update noar tt set v0='Y0Z' where id=3; -update noar ti set v0='Y0Z' where id=3; -update noar tt set b0='K6XFB5LF110BPTEW' where id=3; -update noar ti set b0='K6XFB5LF110BPTEW' where id=3; -update noar tt set v0='SCQQFA4SM76PN' where id=3; -update noar ti set v0='SCQQFA4SM76PN' where id=3; -update noar tt set b1='Q3ENOXHHLVWONA1W8GUE32E1BWIW613M' where id=3; -update noar ti set b1='Q3ENOXHHLVWONA1W8GUE32E1BWIW613M' where id=3; -update noar tt set v0='WD0JXHA7UTFKIHHBYR40O' where id=3; -update noar ti set v0='WD0JXHA7UTFKIHHBYR40O' where id=3; -update noar tt set b2='P8WQ0SVQ68JDMOUTVQT0V8RSPX' where id=3; -update noar ti set b2='P8WQ0SVQ68JDMOUTVQT0V8RSPX' where id=3; -update noar tt set v0='5P' where id=4; -update noar ti set v0='5P' where id=4; -update noar tt set b0='1SQE34Q' where id=4; -update noar ti set b0='1SQE34Q' where id=4; -update noar tt set v0='6Y402D' where id=4; -update noar ti set v0='6Y402D' where id=4; -update noar tt set b1='LLH' where id=4; -update noar ti set b1='LLH' where id=4; -update noar tt set v0='XRUZRILLPYHCO6WANEGVC7Q' where id=4; -update noar ti set v0='XRUZRILLPYHCO6WANEGVC7Q' where id=4; -update noar tt set b2='KHOJG3ZCT0RIKVCCP78R5OYVJ' where id=4; -update noar ti set b2='KHOJG3ZCT0RIKVCCP78R5OYVJ' where id=4; -update noar tt set v0='Y' where id=5; -update noar ti set v0='Y' where id=5; -update noar tt set b0='BJG6AHGRBQX' where id=5; -update noar ti set b0='BJG6AHGRBQX' where id=5; -update noar tt set v0='MPQZ0QZB62X7Y' where id=5; -update noar ti set v0='MPQZ0QZB62X7Y' where id=5; -update noar tt set b1='WA17DYB4XZ1G8SJ9VILXJ5WBNT3FA14O' where id=5; -update noar ti set b1='WA17DYB4XZ1G8SJ9VILXJ5WBNT3FA14O' where id=5; -update noar tt set v0='RWWTFR3ZK35PYOGCJR0H49I' where id=5; -update noar ti set v0='RWWTFR3ZK35PYOGCJR0H49I' where id=5; -update noar tt set b2='TP' where id=5; -update noar ti set b2='TP' where id=5; -update noar tt set v0='0I94Y0RXY' where id=6; -update noar ti set v0='0I94Y0RXY' where id=6; -update noar tt set b0='LTKIVTQGWUU6TJ50L3' where id=6; -update noar ti set b0='LTKIVTQGWUU6TJ50L3' where id=6; -update noar tt set v0='77' where id=6; -update noar ti set v0='77' where id=6; -update noar tt set b1='57B9' where id=6; -update noar ti set b1='57B9' where id=6; -update noar tt set v0='JPVK' where id=6; -update noar ti set v0='JPVK' where id=6; -update noar tt set b2='7S8UC521SKWPB1YN' where id=6; -update noar ti set b2='7S8UC521SKWPB1YN' where id=6; -update noar tt set v0='S7V1DK2PSEEWLVRJ' where id=7; -update noar ti set v0='S7V1DK2PSEEWLVRJ' where id=7; -update noar tt set b0='M' where id=7; -update noar ti set b0='M' where id=7; -update noar tt set v0='X5SYUQ7G6F33YZT64XINLP2R991U' where id=7; -update noar ti set v0='X5SYUQ7G6F33YZT64XINLP2R991U' where id=7; -update noar tt set b1='WC0JTDYM0WUVRAP6D19PNRKN' where id=7; -update noar ti set b1='WC0JTDYM0WUVRAP6D19PNRKN' where id=7; -update noar tt set v0='DQ5R' where id=7; -update noar ti set v0='DQ5R' where id=7; -update noar tt set b2='L5WL1UCS7D63PK' where id=7; -update noar ti set b2='L5WL1UCS7D63PK' where id=7; -update noar tt set v0='FIV2QZXCI6' where id=8; -update noar ti set v0='FIV2QZXCI6' where id=8; -update noar tt set b0='Z' where id=8; -update noar ti set b0='Z' where id=8; -update noar tt set v0='KYAT0VLE4QGAX' where id=8; -update noar ti set v0='KYAT0VLE4QGAX' where id=8; -update noar tt set b1='XWAQN2Q963SD5LF1MH4MIEBCC28I9' where id=8; -update noar ti set b1='XWAQN2Q963SD5LF1MH4MIEBCC28I9' where id=8; -update noar tt set v0='UP8M2' where id=8; -update noar ti set v0='UP8M2' where id=8; -update noar tt set b2='K' where id=8; -update noar ti set b2='K' where id=8; -update noar tt set v0='4AKDGFH0WMDHUTTSAZHHRXTKHT' where id=9; -update noar ti set v0='4AKDGFH0WMDHUTTSAZHHRXTKHT' where id=9; -update noar tt set b0='EMJO39' where id=9; -update noar ti set b0='EMJO39' where id=9; -update noar tt set v0='R6ZXAJ6IVD761GY15GI4I2SC0256Q' where id=9; -update noar ti set v0='R6ZXAJ6IVD761GY15GI4I2SC0256Q' where id=9; -update noar tt set b1='8V' where id=9; -update noar ti set b1='8V' where id=9; -update noar tt set v0='MRIN8ORER7BV8U' where id=9; -update noar ti set v0='MRIN8ORER7BV8U' where id=9; -update noar tt set b2='AC06BV0K9NCB' where id=9; -update noar ti set b2='AC06BV0K9NCB' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 tinyblob not null, - b1 tinyblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='PQA0U8AOMTTN0SU9USUXC385PTAKN3PZ' where id=1; -update noar ti set v0='PQA0U8AOMTTN0SU9USUXC385PTAKN3PZ' where id=1; -update noar tt set b0='LCMBPP' where id=1; -update noar ti set b0='LCMBPP' where id=1; -update noar tt set v0='AH8ZSE' where id=1; -update noar ti set v0='AH8ZSE' where id=1; -update noar tt set b1='9XYULWMAH90JMDUG1VVG2ACJ35Q7A6O' where id=1; -update noar ti set b1='9XYULWMAH90JMDUG1VVG2ACJ35Q7A6O' where id=1; -update noar tt set v0='T6ZQZAIBIGQ' where id=1; -update noar ti set v0='T6ZQZAIBIGQ' where id=1; -update noar tt set b2='26G6B' where id=1; -update noar ti set b2='26G6B' where id=1; -update noar tt set v0='KWVG4RGVCVQUG447HI15B3' where id=2; -update noar ti set v0='KWVG4RGVCVQUG447HI15B3' where id=2; -update noar tt set b0='9S06MYQVTOO8KXX3IN2DRM0ZM0MTLX8C' where id=2; -update noar ti set b0='9S06MYQVTOO8KXX3IN2DRM0ZM0MTLX8C' where id=2; -update noar tt set v0='NYKQVR682WY73LJ46X534' where id=2; -update noar ti set v0='NYKQVR682WY73LJ46X534' where id=2; -update noar tt set b1='JNR7' where id=2; -update noar ti set b1='JNR7' where id=2; -update noar tt set v0='LZGHD' where id=2; -update noar ti set v0='LZGHD' where id=2; -update noar tt set b2='F8I901PSU4HD7CMU9IGK6SVZWB27D' where id=2; -update noar ti set b2='F8I901PSU4HD7CMU9IGK6SVZWB27D' where id=2; -update noar tt set v0='VA7SDXB4FKE9H69ICCNV51JCO9TQJ0VD' where id=3; -update noar ti set v0='VA7SDXB4FKE9H69ICCNV51JCO9TQJ0VD' where id=3; -update noar tt set b0='LBDU1PQOW1FJS1SMMJ34KM0TDXGIY' where id=3; -update noar ti set b0='LBDU1PQOW1FJS1SMMJ34KM0TDXGIY' where id=3; -update noar tt set v0='HGB6LP6SZ87D1CHB5CG2' where id=3; -update noar ti set v0='HGB6LP6SZ87D1CHB5CG2' where id=3; -update noar tt set b1='4OR' where id=3; -update noar ti set b1='4OR' where id=3; -update noar tt set v0='YHEPADHHPLEG7FAB6HLGCR45C7L' where id=3; -update noar ti set v0='YHEPADHHPLEG7FAB6HLGCR45C7L' where id=3; -update noar tt set b2='ZM4YUEG9LQXXFWB41' where id=3; -update noar ti set b2='ZM4YUEG9LQXXFWB41' where id=3; -update noar tt set v0='DI2G8CM3688G76J0CFBM6JA5O9LM6X' where id=4; -update noar ti set v0='DI2G8CM3688G76J0CFBM6JA5O9LM6X' where id=4; -update noar tt set b0='43ENW7LUTWV0R' where id=4; -update noar ti set b0='43ENW7LUTWV0R' where id=4; -update noar tt set v0='N' where id=4; -update noar ti set v0='N' where id=4; -update noar tt set b1='UMBBU6MVYCK42I7ACK' where id=4; -update noar ti set b1='UMBBU6MVYCK42I7ACK' where id=4; -update noar tt set v0='4DFQD' where id=4; -update noar ti set v0='4DFQD' where id=4; -update noar tt set b2='T8GL5FTXYIIR487B9A' where id=4; -update noar ti set b2='T8GL5FTXYIIR487B9A' where id=4; -update noar tt set v0='VC3A0WRGPZ' where id=5; -update noar ti set v0='VC3A0WRGPZ' where id=5; -update noar tt set b0='QG1WQTBLSQ5OX0117EPL' where id=5; -update noar ti set b0='QG1WQTBLSQ5OX0117EPL' where id=5; -update noar tt set v0='LMJ3B63T0RKW1PY6PKA3V3JBP' where id=5; -update noar ti set v0='LMJ3B63T0RKW1PY6PKA3V3JBP' where id=5; -update noar tt set b1='E5Y' where id=5; -update noar ti set b1='E5Y' where id=5; -update noar tt set v0='41I5732CA8FNMWFR9S9' where id=5; -update noar ti set v0='41I5732CA8FNMWFR9S9' where id=5; -update noar tt set b2='RYAIU39QF00IHDN38OGC' where id=5; -update noar ti set b2='RYAIU39QF00IHDN38OGC' where id=5; -update noar tt set v0='I8RJB9RDL8JPYMY8S81N1N' where id=6; -update noar ti set v0='I8RJB9RDL8JPYMY8S81N1N' where id=6; -update noar tt set b0='O80GCRGKEU' where id=6; -update noar ti set b0='O80GCRGKEU' where id=6; -update noar tt set v0='R6XD8JUP4B1H3PRP' where id=6; -update noar ti set v0='R6XD8JUP4B1H3PRP' where id=6; -update noar tt set b1='U2P30RM7JDIXGTG2IA8H33IGEQKA99' where id=6; -update noar ti set b1='U2P30RM7JDIXGTG2IA8H33IGEQKA99' where id=6; -update noar tt set v0='63DKVNZHNN0' where id=6; -update noar ti set v0='63DKVNZHNN0' where id=6; -update noar tt set b2='FSTAA6AUZLYLT3F9' where id=6; -update noar ti set b2='FSTAA6AUZLYLT3F9' where id=6; -update noar tt set v0='X7E9TW3BK' where id=7; -update noar ti set v0='X7E9TW3BK' where id=7; -update noar tt set b0='NQLIZ13XOI7NLODXN' where id=7; -update noar ti set b0='NQLIZ13XOI7NLODXN' where id=7; -update noar tt set v0='9VGQ3IK7222SRVTW7Q6C60O60BGTX' where id=7; -update noar ti set v0='9VGQ3IK7222SRVTW7Q6C60O60BGTX' where id=7; -update noar tt set b1='OV3TRV2LWC16R2Q' where id=7; -update noar ti set b1='OV3TRV2LWC16R2Q' where id=7; -update noar tt set v0='MWKKZJ3GL5KLCTZWV6GX' where id=7; -update noar ti set v0='MWKKZJ3GL5KLCTZWV6GX' where id=7; -update noar tt set b2='T46QEM927MDPU16R' where id=7; -update noar ti set b2='T46QEM927MDPU16R' where id=7; -update noar tt set v0='0RSGX' where id=8; -update noar ti set v0='0RSGX' where id=8; -update noar tt set b0='HT37NEDB1WXQ3855' where id=8; -update noar ti set b0='HT37NEDB1WXQ3855' where id=8; -update noar tt set v0='AHNZ1LK3OX7T7AJCJ4HNNI' where id=8; -update noar ti set v0='AHNZ1LK3OX7T7AJCJ4HNNI' where id=8; -update noar tt set b1='XBNBB2QG5' where id=8; -update noar ti set b1='XBNBB2QG5' where id=8; -update noar tt set v0='95C5HUKGZBLFI5ON4BS42GSH8' where id=8; -update noar ti set v0='95C5HUKGZBLFI5ON4BS42GSH8' where id=8; -update noar tt set b2='V6Q7T5NKSMM2TPD4LM9IJ22QFJRESPY0' where id=8; -update noar ti set b2='V6Q7T5NKSMM2TPD4LM9IJ22QFJRESPY0' where id=8; -update noar tt set v0='JFN0P8CFP8J4SVPUA7EUIC' where id=9; -update noar ti set v0='JFN0P8CFP8J4SVPUA7EUIC' where id=9; -update noar tt set b0='95HOEIDJUK0POO7C0CLNBW9FXXK' where id=9; -update noar ti set b0='95HOEIDJUK0POO7C0CLNBW9FXXK' where id=9; -update noar tt set v0='70IPM' where id=9; -update noar ti set v0='70IPM' where id=9; -update noar tt set b1='8Q' where id=9; -update noar ti set b1='8Q' where id=9; -update noar tt set v0='UYS1XSNQ' where id=9; -update noar ti set v0='UYS1XSNQ' where id=9; -update noar tt set b2='JWKAH0' where id=9; -update noar ti set b2='JWKAH0' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 tinyblob not null, - b1 tinyblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='VY8' where id=1; -update noar ti set v0='VY8' where id=1; -update noar tt set b0='X2P0YGHY4R437' where id=1; -update noar ti set b0='X2P0YGHY4R437' where id=1; -update noar tt set v0='4DP0EL8WK0RDZYZ4ICS3V' where id=1; -update noar ti set v0='4DP0EL8WK0RDZYZ4ICS3V' where id=1; -update noar tt set b1='E' where id=1; -update noar ti set b1='E' where id=1; -update noar tt set v0='9NEV08TH95QF' where id=1; -update noar ti set v0='9NEV08TH95QF' where id=1; -update noar tt set b2='0P6FW9QRC66S3WI78VH4L' where id=1; -update noar ti set b2='0P6FW9QRC66S3WI78VH4L' where id=1; -update noar tt set v0='VKCLFL5J8QJ6L931Y4E8' where id=2; -update noar ti set v0='VKCLFL5J8QJ6L931Y4E8' where id=2; -update noar tt set b0='M4YM3DU5X363CCO' where id=2; -update noar ti set b0='M4YM3DU5X363CCO' where id=2; -update noar tt set v0='B208818XS6PVAN8D2DP0NHK73K829Z' where id=2; -update noar ti set v0='B208818XS6PVAN8D2DP0NHK73K829Z' where id=2; -update noar tt set b1='QEE9916C0K2P2LVNIFYW32MTDO5MCL' where id=2; -update noar ti set b1='QEE9916C0K2P2LVNIFYW32MTDO5MCL' where id=2; -update noar tt set v0='5T81QTWD0VP5HN2W7JX5GK' where id=2; -update noar ti set v0='5T81QTWD0VP5HN2W7JX5GK' where id=2; -update noar tt set b2='EMIQD8DJ3PZ67YSJ' where id=2; -update noar ti set b2='EMIQD8DJ3PZ67YSJ' where id=2; -update noar tt set v0='GM0J5TMT5B7OTMDL7UVD' where id=3; -update noar ti set v0='GM0J5TMT5B7OTMDL7UVD' where id=3; -update noar tt set b0='TRGLG5' where id=3; -update noar ti set b0='TRGLG5' where id=3; -update noar tt set v0='6P' where id=3; -update noar ti set v0='6P' where id=3; -update noar tt set b1='8JI5TNDWBE9' where id=3; -update noar ti set b1='8JI5TNDWBE9' where id=3; -update noar tt set v0='2PO3AP0TZKHUJ2' where id=3; -update noar ti set v0='2PO3AP0TZKHUJ2' where id=3; -update noar tt set b2='W5736CY1SH9QY2785CN7IGON1RB' where id=3; -update noar ti set b2='W5736CY1SH9QY2785CN7IGON1RB' where id=3; -update noar tt set v0='K2DHG0' where id=4; -update noar ti set v0='K2DHG0' where id=4; -update noar tt set b0='GSLZ8M9YMTHGXQGY59TCL7' where id=4; -update noar ti set b0='GSLZ8M9YMTHGXQGY59TCL7' where id=4; -update noar tt set v0='ZHAH3O9B1JN1D526JE6PC3XJ6W4HN8KL' where id=4; -update noar ti set v0='ZHAH3O9B1JN1D526JE6PC3XJ6W4HN8KL' where id=4; -update noar tt set b1='M2UMTZD4N68LKNZ' where id=4; -update noar ti set b1='M2UMTZD4N68LKNZ' where id=4; -update noar tt set v0='KQFOM64' where id=4; -update noar ti set v0='KQFOM64' where id=4; -update noar tt set b2='FC2SY3' where id=4; -update noar ti set b2='FC2SY3' where id=4; -update noar tt set v0='ABRFPIUA0PI5OMV8BQ' where id=5; -update noar ti set v0='ABRFPIUA0PI5OMV8BQ' where id=5; -update noar tt set b0='47ESUSFE93S92AEKPL3' where id=5; -update noar ti set b0='47ESUSFE93S92AEKPL3' where id=5; -update noar tt set v0='W6QW2KQVVWEPOHNZ77RMRB27LB9' where id=5; -update noar ti set v0='W6QW2KQVVWEPOHNZ77RMRB27LB9' where id=5; -update noar tt set b1='AUIZY8VJI24KCGKOSNFN3DQBYSQ' where id=5; -update noar ti set b1='AUIZY8VJI24KCGKOSNFN3DQBYSQ' where id=5; -update noar tt set v0='UKWWN8F72MVX2DWKDLBEY3HBSZI9MK' where id=5; -update noar ti set v0='UKWWN8F72MVX2DWKDLBEY3HBSZI9MK' where id=5; -update noar tt set b2='WN4KJXBY2UEV6V6R1LSG4HN' where id=5; -update noar ti set b2='WN4KJXBY2UEV6V6R1LSG4HN' where id=5; -update noar tt set v0='NK4319E7VFJX0PLDPEC7T0PDRX5ECR9R' where id=6; -update noar ti set v0='NK4319E7VFJX0PLDPEC7T0PDRX5ECR9R' where id=6; -update noar tt set b0='QKSISHTBPRBWV712T0UFVN3UOTUJ6L1' where id=6; -update noar ti set b0='QKSISHTBPRBWV712T0UFVN3UOTUJ6L1' where id=6; -update noar tt set v0='UF378DK06HJJP6B8D5LTR9Q68FV' where id=6; -update noar ti set v0='UF378DK06HJJP6B8D5LTR9Q68FV' where id=6; -update noar tt set b1='DRZFMIHB1DJ53BNAG98F' where id=6; -update noar ti set b1='DRZFMIHB1DJ53BNAG98F' where id=6; -update noar tt set v0='R1UZ4QO41WMYL37QSSG9JP0O8O01' where id=6; -update noar ti set v0='R1UZ4QO41WMYL37QSSG9JP0O8O01' where id=6; -update noar tt set b2='GBH55CHC9VJNM5EBW2H1DH9AP1V' where id=6; -update noar ti set b2='GBH55CHC9VJNM5EBW2H1DH9AP1V' where id=6; -update noar tt set v0='EW050M4VTKQDO1' where id=7; -update noar ti set v0='EW050M4VTKQDO1' where id=7; -update noar tt set b0='F8AWRYREIYO8W9OQU' where id=7; -update noar ti set b0='F8AWRYREIYO8W9OQU' where id=7; -update noar tt set v0='T6KSNPYHF9' where id=7; -update noar ti set v0='T6KSNPYHF9' where id=7; -update noar tt set b1='X5XT8NOQBFC7U28QCA' where id=7; -update noar ti set b1='X5XT8NOQBFC7U28QCA' where id=7; -update noar tt set v0='GIDSBSEGU' where id=7; -update noar ti set v0='GIDSBSEGU' where id=7; -update noar tt set b2='7U' where id=7; -update noar ti set b2='7U' where id=7; -update noar tt set v0='1EKP5Y1W5CIW1' where id=8; -update noar ti set v0='1EKP5Y1W5CIW1' where id=8; -update noar tt set b0='EXZ92X5VWX8P6WLLE64BMHM71YPI' where id=8; -update noar ti set b0='EXZ92X5VWX8P6WLLE64BMHM71YPI' where id=8; -update noar tt set v0='XWBX7HF9MSKR6GKWNZ' where id=8; -update noar ti set v0='XWBX7HF9MSKR6GKWNZ' where id=8; -update noar tt set b1='3CXWM0LG' where id=8; -update noar ti set b1='3CXWM0LG' where id=8; -update noar tt set v0='X4CBCX6B' where id=8; -update noar ti set v0='X4CBCX6B' where id=8; -update noar tt set b2='B80QYQFOODWF9MDYBZXP5H7P6OL0OIYL' where id=8; -update noar ti set b2='B80QYQFOODWF9MDYBZXP5H7P6OL0OIYL' where id=8; -update noar tt set v0='DU3XMYOBFH6URS0ZE7P2D2UQ9Q0' where id=9; -update noar ti set v0='DU3XMYOBFH6URS0ZE7P2D2UQ9Q0' where id=9; -update noar tt set b0='H9TWUAX675GZCY3RMK6M2L' where id=9; -update noar ti set b0='H9TWUAX675GZCY3RMK6M2L' where id=9; -update noar tt set v0='0AZ3' where id=9; -update noar ti set v0='0AZ3' where id=9; -update noar tt set b1='1FKK4UEX8LM046B' where id=9; -update noar ti set b1='1FKK4UEX8LM046B' where id=9; -update noar tt set v0='XUL0HW' where id=9; -update noar ti set v0='XUL0HW' where id=9; -update noar tt set b2='62ERQT2YSTVSYXGK5SCDCKKIJ' where id=9; -update noar ti set b2='62ERQT2YSTVSYXGK5SCDCKKIJ' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 tinyblob null, - b1 tinyblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='QLNH00EHACD53HBGH48S1WXQT4I3' where id=1; -update noar ti set v0='QLNH00EHACD53HBGH48S1WXQT4I3' where id=1; -update noar tt set b0='K04JDSV1O1J1SBOYPJ43E7BNNLPGPG2P' where id=1; -update noar ti set b0='K04JDSV1O1J1SBOYPJ43E7BNNLPGPG2P' where id=1; -update noar tt set v0='Q44LT7ABYHY4LGRWUMRM' where id=1; -update noar ti set v0='Q44LT7ABYHY4LGRWUMRM' where id=1; -update noar tt set b1='20KLS720GMVW8L0' where id=1; -update noar ti set b1='20KLS720GMVW8L0' where id=1; -update noar tt set v0='8IGESBH9Z56YGGXON' where id=1; -update noar ti set v0='8IGESBH9Z56YGGXON' where id=1; -update noar tt set b2='OD68NJ4JBCC1I2JN57' where id=1; -update noar ti set b2='OD68NJ4JBCC1I2JN57' where id=1; -update noar tt set v0='UE2NFRIXZ5EJT' where id=2; -update noar ti set v0='UE2NFRIXZ5EJT' where id=2; -update noar tt set b0='4NPR1ZAD7UF' where id=2; -update noar ti set b0='4NPR1ZAD7UF' where id=2; -update noar tt set v0='QBQHJLECGHY2A2VXI' where id=2; -update noar ti set v0='QBQHJLECGHY2A2VXI' where id=2; -update noar tt set b1='UZOF7OUH6FW5LY4IPVI7ZJR9WYHAX8L' where id=2; -update noar ti set b1='UZOF7OUH6FW5LY4IPVI7ZJR9WYHAX8L' where id=2; -update noar tt set v0='9L141WWUD0C2ZV7JMSUGY7S' where id=2; -update noar ti set v0='9L141WWUD0C2ZV7JMSUGY7S' where id=2; -update noar tt set b2='FBQPDF940H02PEMIAI' where id=2; -update noar ti set b2='FBQPDF940H02PEMIAI' where id=2; -update noar tt set v0='1SEV89PAKLVPZLVJUHCJL4RE' where id=3; -update noar ti set v0='1SEV89PAKLVPZLVJUHCJL4RE' where id=3; -update noar tt set b0='H5VTPAY3NLIRQH3G4DK7UJL8IN' where id=3; -update noar ti set b0='H5VTPAY3NLIRQH3G4DK7UJL8IN' where id=3; -update noar tt set v0='4M67PM4KZ25XMZ' where id=3; -update noar ti set v0='4M67PM4KZ25XMZ' where id=3; -update noar tt set b1='7T5JPEM9IL28AIL' where id=3; -update noar ti set b1='7T5JPEM9IL28AIL' where id=3; -update noar tt set v0='G0RCT5YHZGGSQK2MIE3JNC' where id=3; -update noar ti set v0='G0RCT5YHZGGSQK2MIE3JNC' where id=3; -update noar tt set b2='C9JU' where id=3; -update noar ti set b2='C9JU' where id=3; -update noar tt set v0='ZRAG8IP8S3MEDVSMMSBQQCF6OQ8VJAH9' where id=4; -update noar ti set v0='ZRAG8IP8S3MEDVSMMSBQQCF6OQ8VJAH9' where id=4; -update noar tt set b0='PP2CVNVO7GNCKHHKYKUEPW' where id=4; -update noar ti set b0='PP2CVNVO7GNCKHHKYKUEPW' where id=4; -update noar tt set v0='PSFHC1AUFYBEZ7I64V3766RWJ' where id=4; -update noar ti set v0='PSFHC1AUFYBEZ7I64V3766RWJ' where id=4; -update noar tt set b1='AUVBG3YEULUUGVZLMS7JJZ' where id=4; -update noar ti set b1='AUVBG3YEULUUGVZLMS7JJZ' where id=4; -update noar tt set v0='0PAQSL4ST8SBIHYNY0YHCW6H' where id=4; -update noar ti set v0='0PAQSL4ST8SBIHYNY0YHCW6H' where id=4; -update noar tt set b2='AK8PSI77WH1' where id=4; -update noar ti set b2='AK8PSI77WH1' where id=4; -update noar tt set v0='IWEOB12HV1N9ZW6653YDJV' where id=5; -update noar ti set v0='IWEOB12HV1N9ZW6653YDJV' where id=5; -update noar tt set b0='CK0DBGO52T0L0WXZGTEX440VIFFK' where id=5; -update noar ti set b0='CK0DBGO52T0L0WXZGTEX440VIFFK' where id=5; -update noar tt set v0='7Y0SH837Y9LE4O3P41' where id=5; -update noar ti set v0='7Y0SH837Y9LE4O3P41' where id=5; -update noar tt set b1='JHVHRTV3' where id=5; -update noar ti set b1='JHVHRTV3' where id=5; -update noar tt set v0='N76JP' where id=5; -update noar ti set v0='N76JP' where id=5; -update noar tt set b2='NM' where id=5; -update noar ti set b2='NM' where id=5; -update noar tt set v0='RC0INFBHY8E' where id=6; -update noar ti set v0='RC0INFBHY8E' where id=6; -update noar tt set b0='YYIN55CU7F21J5IPDW9V3NU' where id=6; -update noar ti set b0='YYIN55CU7F21J5IPDW9V3NU' where id=6; -update noar tt set v0='SBFY48ZNF5H5DH' where id=6; -update noar ti set v0='SBFY48ZNF5H5DH' where id=6; -update noar tt set b1='L21LI3R625D2YJGAFP' where id=6; -update noar ti set b1='L21LI3R625D2YJGAFP' where id=6; -update noar tt set v0='LMUD0LNEI1MU3M1' where id=6; -update noar ti set v0='LMUD0LNEI1MU3M1' where id=6; -update noar tt set b2='SN23OYXBUAD3GV' where id=6; -update noar ti set b2='SN23OYXBUAD3GV' where id=6; -update noar tt set v0='3JOBCL2CC5NTUGQWZ45MXVD' where id=7; -update noar ti set v0='3JOBCL2CC5NTUGQWZ45MXVD' where id=7; -update noar tt set b0='K134GIICU4LB7XP4V94BCJCVLEF4ZQDY' where id=7; -update noar ti set b0='K134GIICU4LB7XP4V94BCJCVLEF4ZQDY' where id=7; -update noar tt set v0='7U5AE7T8BQ8JDZSGAYO5V' where id=7; -update noar ti set v0='7U5AE7T8BQ8JDZSGAYO5V' where id=7; -update noar tt set b1='DNH2DYGAHWXHDTEJ7D2' where id=7; -update noar ti set b1='DNH2DYGAHWXHDTEJ7D2' where id=7; -update noar tt set v0='S1ALXBHH6UCIBT6OUVUC9Z91AS' where id=7; -update noar ti set v0='S1ALXBHH6UCIBT6OUVUC9Z91AS' where id=7; -update noar tt set b2='Z9GUG6A8O' where id=7; -update noar ti set b2='Z9GUG6A8O' where id=7; -update noar tt set v0='3FA5MX4LGENPB3EWFVFG8G3UFY' where id=8; -update noar ti set v0='3FA5MX4LGENPB3EWFVFG8G3UFY' where id=8; -update noar tt set b0='AL92PTHOTGVKKMFF8QF' where id=8; -update noar ti set b0='AL92PTHOTGVKKMFF8QF' where id=8; -update noar tt set v0='E4IC' where id=8; -update noar ti set v0='E4IC' where id=8; -update noar tt set b1='I4MWW2IRV4OTC9YCS28NQWV07XGE2MY' where id=8; -update noar ti set b1='I4MWW2IRV4OTC9YCS28NQWV07XGE2MY' where id=8; -update noar tt set v0='0RWACQZLJPQLRI3G0K19VLZ' where id=8; -update noar ti set v0='0RWACQZLJPQLRI3G0K19VLZ' where id=8; -update noar tt set b2='W8OA' where id=8; -update noar ti set b2='W8OA' where id=8; -update noar tt set v0='ETZIGE' where id=9; -update noar ti set v0='ETZIGE' where id=9; -update noar tt set b0='4SH3UBYZ6NEYPVKJ0PKCM' where id=9; -update noar ti set b0='4SH3UBYZ6NEYPVKJ0PKCM' where id=9; -update noar tt set v0='AILZHIRDBKOV' where id=9; -update noar ti set v0='AILZHIRDBKOV' where id=9; -update noar tt set b1='D4KDH28I6P4EIVVBB0P15EE24DG6X' where id=9; -update noar ti set b1='D4KDH28I6P4EIVVBB0P15EE24DG6X' where id=9; -update noar tt set v0='S9AXZ6GKNJWCT6GU9T2YFJKAFTF1O3' where id=9; -update noar ti set v0='S9AXZ6GKNJWCT6GU9T2YFJKAFTF1O3' where id=9; -update noar tt set b2='QFJ1MXK4W39DVD77U53IPIFDT1P' where id=9; -update noar ti set b2='QFJ1MXK4W39DVD77U53IPIFDT1P' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 tinyblob null, - b1 tinyblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='QU22E82U77' where id=1; -update noar ti set v0='QU22E82U77' where id=1; -update noar tt set b0='ST3F5ZE5C8KCF1EV' where id=1; -update noar ti set b0='ST3F5ZE5C8KCF1EV' where id=1; -update noar tt set v0='1884Z8G7M5WO78B3B2XHGNRB5VGDV' where id=1; -update noar ti set v0='1884Z8G7M5WO78B3B2XHGNRB5VGDV' where id=1; -update noar tt set b1='YZC' where id=1; -update noar ti set b1='YZC' where id=1; -update noar tt set v0='GX9S71R6LZUZ5UW1FK38BT1L' where id=1; -update noar ti set v0='GX9S71R6LZUZ5UW1FK38BT1L' where id=1; -update noar tt set b2='8IM6W09ATIJVY79O7LCEPV9FCQ67' where id=1; -update noar ti set b2='8IM6W09ATIJVY79O7LCEPV9FCQ67' where id=1; -update noar tt set v0='W3U5T4H3ORGRI6RS44XX2KIM' where id=2; -update noar ti set v0='W3U5T4H3ORGRI6RS44XX2KIM' where id=2; -update noar tt set b0='U8R3TPXZBWZNVOLBRO8TCWR5TE' where id=2; -update noar ti set b0='U8R3TPXZBWZNVOLBRO8TCWR5TE' where id=2; -update noar tt set v0='L9AO05MW638GWS7SX5ID221' where id=2; -update noar ti set v0='L9AO05MW638GWS7SX5ID221' where id=2; -update noar tt set b1='SD99B5' where id=2; -update noar ti set b1='SD99B5' where id=2; -update noar tt set v0='UPMFXV2NDXRPATQ7978Z8LPJOYE3' where id=2; -update noar ti set v0='UPMFXV2NDXRPATQ7978Z8LPJOYE3' where id=2; -update noar tt set b2='HU8TE' where id=2; -update noar ti set b2='HU8TE' where id=2; -update noar tt set v0='ULT0MMPPM7OK9O4624QTS' where id=3; -update noar ti set v0='ULT0MMPPM7OK9O4624QTS' where id=3; -update noar tt set b0='OZMILYDFOMCXPYB' where id=3; -update noar ti set b0='OZMILYDFOMCXPYB' where id=3; -update noar tt set v0='AIATAVCG6GZRMBUEG7GXT2BOFK4USQ1' where id=3; -update noar ti set v0='AIATAVCG6GZRMBUEG7GXT2BOFK4USQ1' where id=3; -update noar tt set b1='02I6F3BHNUC9' where id=3; -update noar ti set b1='02I6F3BHNUC9' where id=3; -update noar tt set v0='D25NC7B' where id=3; -update noar ti set v0='D25NC7B' where id=3; -update noar tt set b2='30LOQD1MD0TOX3D51L6ZBJ' where id=3; -update noar ti set b2='30LOQD1MD0TOX3D51L6ZBJ' where id=3; -update noar tt set v0='RNS0LJROE' where id=4; -update noar ti set v0='RNS0LJROE' where id=4; -update noar tt set b0='I8EZDWMSQZ4Z30ESTE1M' where id=4; -update noar ti set b0='I8EZDWMSQZ4Z30ESTE1M' where id=4; -update noar tt set v0='N8A10WJ1LO0EGJCTOIXAG0OF8QF' where id=4; -update noar ti set v0='N8A10WJ1LO0EGJCTOIXAG0OF8QF' where id=4; -update noar tt set b1='8K' where id=4; -update noar ti set b1='8K' where id=4; -update noar tt set v0='ZSZQ1MHUQNGOISN7T7' where id=4; -update noar ti set v0='ZSZQ1MHUQNGOISN7T7' where id=4; -update noar tt set b2='DN7UYJP8O5N8F8GW9MST7Z' where id=4; -update noar ti set b2='DN7UYJP8O5N8F8GW9MST7Z' where id=4; -update noar tt set v0='23R1AUUMHFSN2R8R44XOSMBLI' where id=5; -update noar ti set v0='23R1AUUMHFSN2R8R44XOSMBLI' where id=5; -update noar tt set b0='VD94PIRUU' where id=5; -update noar ti set b0='VD94PIRUU' where id=5; -update noar tt set v0='166ZU4F0WEXD3HJAJTE2RXXJSOAKI' where id=5; -update noar ti set v0='166ZU4F0WEXD3HJAJTE2RXXJSOAKI' where id=5; -update noar tt set b1='YCW3NVRO' where id=5; -update noar ti set b1='YCW3NVRO' where id=5; -update noar tt set v0='TO54LKA9R42ES8HY2ICDO07' where id=5; -update noar ti set v0='TO54LKA9R42ES8HY2ICDO07' where id=5; -update noar tt set b2='91OLCN23499UQB40L5' where id=5; -update noar ti set b2='91OLCN23499UQB40L5' where id=5; -update noar tt set v0='ZG6QNIWGCANQO630A6AXKLG' where id=6; -update noar ti set v0='ZG6QNIWGCANQO630A6AXKLG' where id=6; -update noar tt set b0='WL4FRF2VDXLC8GC4V6BZ8NC' where id=6; -update noar ti set b0='WL4FRF2VDXLC8GC4V6BZ8NC' where id=6; -update noar tt set v0='TX3MFADKV55E6YH7Z9' where id=6; -update noar ti set v0='TX3MFADKV55E6YH7Z9' where id=6; -update noar tt set b1='LZBR' where id=6; -update noar ti set b1='LZBR' where id=6; -update noar tt set v0='EJ0SJO87NA1' where id=6; -update noar ti set v0='EJ0SJO87NA1' where id=6; -update noar tt set b2='18C4CTA6DT1U2ZVTO' where id=6; -update noar ti set b2='18C4CTA6DT1U2ZVTO' where id=6; -update noar tt set v0='L2LVFZPT0E01F5Y9D' where id=7; -update noar ti set v0='L2LVFZPT0E01F5Y9D' where id=7; -update noar tt set b0='16ZYKJTF' where id=7; -update noar ti set b0='16ZYKJTF' where id=7; -update noar tt set v0='XOWMD8EC3WC' where id=7; -update noar ti set v0='XOWMD8EC3WC' where id=7; -update noar tt set b1='WZHECOX9J8VQ1GXH0S2EO518GR' where id=7; -update noar ti set b1='WZHECOX9J8VQ1GXH0S2EO518GR' where id=7; -update noar tt set v0='QTU2SSON9T8FC' where id=7; -update noar ti set v0='QTU2SSON9T8FC' where id=7; -update noar tt set b2='R0J247T7UOTUU8P' where id=7; -update noar ti set b2='R0J247T7UOTUU8P' where id=7; -update noar tt set v0='DM5R1K7PX7R270HOJR1L00SJHYPLAB3Y' where id=8; -update noar ti set v0='DM5R1K7PX7R270HOJR1L00SJHYPLAB3Y' where id=8; -update noar tt set b0='HTR7Y9MQSFPNXJF5ZQSJ0' where id=8; -update noar ti set b0='HTR7Y9MQSFPNXJF5ZQSJ0' where id=8; -update noar tt set v0='JQBMFJCE37N' where id=8; -update noar ti set v0='JQBMFJCE37N' where id=8; -update noar tt set b1='1U' where id=8; -update noar ti set b1='1U' where id=8; -update noar tt set v0='51SE5CIRX4NUPHLJI9' where id=8; -update noar ti set v0='51SE5CIRX4NUPHLJI9' where id=8; -update noar tt set b2='7Y2MPAN' where id=8; -update noar ti set b2='7Y2MPAN' where id=8; -update noar tt set v0='97DBNRTK0MMBMJM5QIBPG' where id=9; -update noar ti set v0='97DBNRTK0MMBMJM5QIBPG' where id=9; -update noar tt set b0='KEJ3KBMFC9Q387YIG40S' where id=9; -update noar ti set b0='KEJ3KBMFC9Q387YIG40S' where id=9; -update noar tt set v0='KHPAIQAEF4' where id=9; -update noar ti set v0='KHPAIQAEF4' where id=9; -update noar tt set b1='NPH61C' where id=9; -update noar ti set b1='NPH61C' where id=9; -update noar tt set v0='M3EK88D5Z70HXPC' where id=9; -update noar ti set v0='M3EK88D5Z70HXPC' where id=9; -update noar tt set b2='NUACWYEZB35HZBQ4' where id=9; -update noar ti set b2='NUACWYEZB35HZBQ4' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 tinyblob not null, - b1 tinyblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='518' where id=1; -update noar ti set v0='518' where id=1; -update noar tt set b0='RQQ9962CCUS46HP' where id=1; -update noar ti set b0='RQQ9962CCUS46HP' where id=1; -update noar tt set v0='X6Q9KPZMBIDCTRABAVMD63JSIJV74RV3' where id=1; -update noar ti set v0='X6Q9KPZMBIDCTRABAVMD63JSIJV74RV3' where id=1; -update noar tt set b1='M648B4FLGLXBFP46D72' where id=1; -update noar ti set b1='M648B4FLGLXBFP46D72' where id=1; -update noar tt set v0='I08J13M8D' where id=1; -update noar ti set v0='I08J13M8D' where id=1; -update noar tt set b2='LDB' where id=1; -update noar ti set b2='LDB' where id=1; -update noar tt set v0='BJHUP61957IHKUUWNF3QDN3EB8K9W' where id=2; -update noar ti set v0='BJHUP61957IHKUUWNF3QDN3EB8K9W' where id=2; -update noar tt set b0='56Y' where id=2; -update noar ti set b0='56Y' where id=2; -update noar tt set v0='581YJ6O5N9MF2APEVE8VL' where id=2; -update noar ti set v0='581YJ6O5N9MF2APEVE8VL' where id=2; -update noar tt set b1='7EY309BU9X4Y5UOU74NI8CN0VJ3GZOZY' where id=2; -update noar ti set b1='7EY309BU9X4Y5UOU74NI8CN0VJ3GZOZY' where id=2; -update noar tt set v0='80A07PE' where id=2; -update noar ti set v0='80A07PE' where id=2; -update noar tt set b2='TWFE29UXN00DE13JHSGB' where id=2; -update noar ti set b2='TWFE29UXN00DE13JHSGB' where id=2; -update noar tt set v0='4' where id=3; -update noar ti set v0='4' where id=3; -update noar tt set b0='NLGJPXPBIUPNYYCOXGZN7141XCBJBKQS' where id=3; -update noar ti set b0='NLGJPXPBIUPNYYCOXGZN7141XCBJBKQS' where id=3; -update noar tt set v0='SW281Y4MB4LLBO0BFJ7SYHC2HMT' where id=3; -update noar ti set v0='SW281Y4MB4LLBO0BFJ7SYHC2HMT' where id=3; -update noar tt set b1='BWH3VF268PP9' where id=3; -update noar ti set b1='BWH3VF268PP9' where id=3; -update noar tt set v0='WQTKM50JKV0AD4LJVALOI' where id=3; -update noar ti set v0='WQTKM50JKV0AD4LJVALOI' where id=3; -update noar tt set b2='VLZCD9DJIXQUQB8IHU' where id=3; -update noar ti set b2='VLZCD9DJIXQUQB8IHU' where id=3; -update noar tt set v0='ZRF2L32JJF2MVFF26GEZ5E6RMCH26KRY' where id=4; -update noar ti set v0='ZRF2L32JJF2MVFF26GEZ5E6RMCH26KRY' where id=4; -update noar tt set b0='T1V15H7QOGXNTN08G4QUYK' where id=4; -update noar ti set b0='T1V15H7QOGXNTN08G4QUYK' where id=4; -update noar tt set v0='3' where id=4; -update noar ti set v0='3' where id=4; -update noar tt set b1='OM' where id=4; -update noar ti set b1='OM' where id=4; -update noar tt set v0='G1GAOWQ5LFA7ECZU0M9JOFLB2CPD' where id=4; -update noar ti set v0='G1GAOWQ5LFA7ECZU0M9JOFLB2CPD' where id=4; -update noar tt set b2='1WA1R' where id=4; -update noar ti set b2='1WA1R' where id=4; -update noar tt set v0='XN8X2MWVMMN' where id=5; -update noar ti set v0='XN8X2MWVMMN' where id=5; -update noar tt set b0='S6' where id=5; -update noar ti set b0='S6' where id=5; -update noar tt set v0='N8BGHSTLQIERFZ3ZN6' where id=5; -update noar ti set v0='N8BGHSTLQIERFZ3ZN6' where id=5; -update noar tt set b1='QQZBHL2X' where id=5; -update noar ti set b1='QQZBHL2X' where id=5; -update noar tt set v0='E4PE1DWIG' where id=5; -update noar ti set v0='E4PE1DWIG' where id=5; -update noar tt set b2='D0TRPD5U6R8LGPI99HJLO' where id=5; -update noar ti set b2='D0TRPD5U6R8LGPI99HJLO' where id=5; -update noar tt set v0='PJO8GX48CGMWHDIYNCIVADLZ3' where id=6; -update noar ti set v0='PJO8GX48CGMWHDIYNCIVADLZ3' where id=6; -update noar tt set b0='DUORPEZ' where id=6; -update noar ti set b0='DUORPEZ' where id=6; -update noar tt set v0='1MF' where id=6; -update noar ti set v0='1MF' where id=6; -update noar tt set b1='PCMBLJ9IP3U' where id=6; -update noar ti set b1='PCMBLJ9IP3U' where id=6; -update noar tt set v0='UHS2GSZRDOD1' where id=6; -update noar ti set v0='UHS2GSZRDOD1' where id=6; -update noar tt set b2='KMT54' where id=6; -update noar ti set b2='KMT54' where id=6; -update noar tt set v0='KSP2MC0KU0E8XEWN8C3BKDTY' where id=7; -update noar ti set v0='KSP2MC0KU0E8XEWN8C3BKDTY' where id=7; -update noar tt set b0='0JODYLCAKROICLOGQU35QS2VLAZD' where id=7; -update noar ti set b0='0JODYLCAKROICLOGQU35QS2VLAZD' where id=7; -update noar tt set v0='AX6PQEXI' where id=7; -update noar ti set v0='AX6PQEXI' where id=7; -update noar tt set b1='ZACOTHOFOXWPNGEZH8GCLL99V4QWQQ' where id=7; -update noar ti set b1='ZACOTHOFOXWPNGEZH8GCLL99V4QWQQ' where id=7; -update noar tt set v0='MV6202' where id=7; -update noar ti set v0='MV6202' where id=7; -update noar tt set b2='6MX7QGQ9ZBR5FAAOIPW' where id=7; -update noar ti set b2='6MX7QGQ9ZBR5FAAOIPW' where id=7; -update noar tt set v0='MS5LUG5UJMW6645IVFRNO5D7' where id=8; -update noar ti set v0='MS5LUG5UJMW6645IVFRNO5D7' where id=8; -update noar tt set b0='DUE20VL4BKCM1DOA' where id=8; -update noar ti set b0='DUE20VL4BKCM1DOA' where id=8; -update noar tt set v0='CFC7LKM2ENK2O9PHEX68S1' where id=8; -update noar ti set v0='CFC7LKM2ENK2O9PHEX68S1' where id=8; -update noar tt set b1='76R8B' where id=8; -update noar ti set b1='76R8B' where id=8; -update noar tt set v0='9' where id=8; -update noar ti set v0='9' where id=8; -update noar tt set b2='ROLL4' where id=8; -update noar ti set b2='ROLL4' where id=8; -update noar tt set v0='PEHLZI62WAT69PSI5WXAC4HV6SL9' where id=9; -update noar ti set v0='PEHLZI62WAT69PSI5WXAC4HV6SL9' where id=9; -update noar tt set b0='LLI97IS2BN12SRQ4P39AMY8AP5HZZ' where id=9; -update noar ti set b0='LLI97IS2BN12SRQ4P39AMY8AP5HZZ' where id=9; -update noar tt set v0='KMNY4J2' where id=9; -update noar ti set v0='KMNY4J2' where id=9; -update noar tt set b1='U' where id=9; -update noar ti set b1='U' where id=9; -update noar tt set v0='XJJFD395S96WW' where id=9; -update noar ti set v0='XJJFD395S96WW' where id=9; -update noar tt set b2='3JB2PRX38M8' where id=9; -update noar ti set b2='3JB2PRX38M8' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 tinyblob not null, - b1 tinyblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='PTNQA1IMDZO703XIRJEWM32KI2' where id=1; -update noar ti set v0='PTNQA1IMDZO703XIRJEWM32KI2' where id=1; -update noar tt set b0='CO' where id=1; -update noar ti set b0='CO' where id=1; -update noar tt set v0='CK5OZJ4EG13COOH2VLOP93C' where id=1; -update noar ti set v0='CK5OZJ4EG13COOH2VLOP93C' where id=1; -update noar tt set b1='2D6YAWC2N680EZ2X1HSSI' where id=1; -update noar ti set b1='2D6YAWC2N680EZ2X1HSSI' where id=1; -update noar tt set v0='PGXGLDH6' where id=1; -update noar ti set v0='PGXGLDH6' where id=1; -update noar tt set b2='N7ENXC3CL405VH4ZJAX7GQQ2T' where id=1; -update noar ti set b2='N7ENXC3CL405VH4ZJAX7GQQ2T' where id=1; -update noar tt set v0='EN' where id=2; -update noar ti set v0='EN' where id=2; -update noar tt set b0='40C2D1BHDNZ7YSW9XHM0A' where id=2; -update noar ti set b0='40C2D1BHDNZ7YSW9XHM0A' where id=2; -update noar tt set v0='0C04FJ4QVJSYV7KAQ5BOT59' where id=2; -update noar ti set v0='0C04FJ4QVJSYV7KAQ5BOT59' where id=2; -update noar tt set b1='V8YBAHJVN5PR3899Y5A2Z' where id=2; -update noar ti set b1='V8YBAHJVN5PR3899Y5A2Z' where id=2; -update noar tt set v0='CSGD5O0U' where id=2; -update noar ti set v0='CSGD5O0U' where id=2; -update noar tt set b2='624HB4TEY84KA8FRPY9TK9F52UCUQTQ' where id=2; -update noar ti set b2='624HB4TEY84KA8FRPY9TK9F52UCUQTQ' where id=2; -update noar tt set v0='OJTS9GGB7QSVWY4O94Q4AS' where id=3; -update noar ti set v0='OJTS9GGB7QSVWY4O94Q4AS' where id=3; -update noar tt set b0='5W6AOCZGNT6OXLLL981MS14NOT0VBL' where id=3; -update noar ti set b0='5W6AOCZGNT6OXLLL981MS14NOT0VBL' where id=3; -update noar tt set v0='AEUEDXZZH7YSJ' where id=3; -update noar ti set v0='AEUEDXZZH7YSJ' where id=3; -update noar tt set b1='1MU324K3F8PBIT81N2LBHOA985G6' where id=3; -update noar ti set b1='1MU324K3F8PBIT81N2LBHOA985G6' where id=3; -update noar tt set v0='5AYUCHPGG7FM8H5R22F6YU2SD0AWPK17' where id=3; -update noar ti set v0='5AYUCHPGG7FM8H5R22F6YU2SD0AWPK17' where id=3; -update noar tt set b2='0XN2OWNY' where id=3; -update noar ti set b2='0XN2OWNY' where id=3; -update noar tt set v0='U9FVQ6AWH488LMGO76KJ0CXVGKI4' where id=4; -update noar ti set v0='U9FVQ6AWH488LMGO76KJ0CXVGKI4' where id=4; -update noar tt set b0='G6XIF7E0A1H994KFAN3W8XYE' where id=4; -update noar ti set b0='G6XIF7E0A1H994KFAN3W8XYE' where id=4; -update noar tt set v0='GAJGMKN1L0N3KLBRJJ97E2DHHSCH2' where id=4; -update noar ti set v0='GAJGMKN1L0N3KLBRJJ97E2DHHSCH2' where id=4; -update noar tt set b1='DMDB2AHS9QWRRR45PRKTP766WYMN3KCF' where id=4; -update noar ti set b1='DMDB2AHS9QWRRR45PRKTP766WYMN3KCF' where id=4; -update noar tt set v0='YPR' where id=4; -update noar ti set v0='YPR' where id=4; -update noar tt set b2='RGIGJ4QK2MQYOC' where id=4; -update noar ti set b2='RGIGJ4QK2MQYOC' where id=4; -update noar tt set v0='06ZTWJ731' where id=5; -update noar ti set v0='06ZTWJ731' where id=5; -update noar tt set b0='US8XNVFU31F3IYC41Q6TVWYFGQ' where id=5; -update noar ti set b0='US8XNVFU31F3IYC41Q6TVWYFGQ' where id=5; -update noar tt set v0='2XSXJIVI1HQ76G1M5INKUCSI2XC7JY1' where id=5; -update noar ti set v0='2XSXJIVI1HQ76G1M5INKUCSI2XC7JY1' where id=5; -update noar tt set b1='X3ZU1V4S' where id=5; -update noar ti set b1='X3ZU1V4S' where id=5; -update noar tt set v0='DO' where id=5; -update noar ti set v0='DO' where id=5; -update noar tt set b2='BIF337KCVTFZOUT0HUOBCC' where id=5; -update noar ti set b2='BIF337KCVTFZOUT0HUOBCC' where id=5; -update noar tt set v0='52UPGW2LTPNUDA1RO' where id=6; -update noar ti set v0='52UPGW2LTPNUDA1RO' where id=6; -update noar tt set b0='8YTXBN7' where id=6; -update noar ti set b0='8YTXBN7' where id=6; -update noar tt set v0='Q4BKXWB' where id=6; -update noar ti set v0='Q4BKXWB' where id=6; -update noar tt set b1='WHA0' where id=6; -update noar ti set b1='WHA0' where id=6; -update noar tt set v0='U' where id=6; -update noar ti set v0='U' where id=6; -update noar tt set b2='PJ' where id=6; -update noar ti set b2='PJ' where id=6; -update noar tt set v0='T3JI7SO0XUHSNUVE30ZDQ1SIQU62' where id=7; -update noar ti set v0='T3JI7SO0XUHSNUVE30ZDQ1SIQU62' where id=7; -update noar tt set b0='UJX21AMMV02QV3JN6J6V' where id=7; -update noar ti set b0='UJX21AMMV02QV3JN6J6V' where id=7; -update noar tt set v0='6DHG' where id=7; -update noar ti set v0='6DHG' where id=7; -update noar tt set b1='4K36Y6HSW93DCV2GUOC' where id=7; -update noar ti set b1='4K36Y6HSW93DCV2GUOC' where id=7; -update noar tt set v0='G' where id=7; -update noar ti set v0='G' where id=7; -update noar tt set b2='CQCO2J5IJCUYLALOVW4YT6IEHD' where id=7; -update noar ti set b2='CQCO2J5IJCUYLALOVW4YT6IEHD' where id=7; -update noar tt set v0='CCSGEXYJS9J6' where id=8; -update noar ti set v0='CCSGEXYJS9J6' where id=8; -update noar tt set b0='EU6TW4FZZ8418L2' where id=8; -update noar ti set b0='EU6TW4FZZ8418L2' where id=8; -update noar tt set v0='2H' where id=8; -update noar ti set v0='2H' where id=8; -update noar tt set b1='MJ2QK8HYA2K5J9JD1T601ALIONVE' where id=8; -update noar ti set b1='MJ2QK8HYA2K5J9JD1T601ALIONVE' where id=8; -update noar tt set v0='NLCMGE3927F0GKK5CVT' where id=8; -update noar ti set v0='NLCMGE3927F0GKK5CVT' where id=8; -update noar tt set b2='QDR6RWQ3A4CWFPF66VHOCT' where id=8; -update noar ti set b2='QDR6RWQ3A4CWFPF66VHOCT' where id=8; -update noar tt set v0='ZCP70WPC' where id=9; -update noar ti set v0='ZCP70WPC' where id=9; -update noar tt set b0='VVS47EPKEIC5I2E2X' where id=9; -update noar ti set b0='VVS47EPKEIC5I2E2X' where id=9; -update noar tt set v0='N6H0XFLLP2Y3TK4QP7KQ3FF8NH' where id=9; -update noar ti set v0='N6H0XFLLP2Y3TK4QP7KQ3FF8NH' where id=9; -update noar tt set b1='4' where id=9; -update noar ti set b1='4' where id=9; -update noar tt set v0='GBC7XMED380WX1FKUSXM0A5OC' where id=9; -update noar ti set v0='GBC7XMED380WX1FKUSXM0A5OC' where id=9; -update noar tt set b2='P22STMN6ZZIYW9YJYLLHK3QS' where id=9; -update noar ti set b2='P22STMN6ZZIYW9YJYLLHK3QS' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 tinyblob null, - b1 tinyblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='PA5HDSL85G26HPH9Z4H7CD9H7IO47' where id=1; -update noar ti set v0='PA5HDSL85G26HPH9Z4H7CD9H7IO47' where id=1; -update noar tt set b0='4E' where id=1; -update noar ti set b0='4E' where id=1; -update noar tt set v0='0C7FT2WFCN6ZU5I6JJOUNC2KJS' where id=1; -update noar ti set v0='0C7FT2WFCN6ZU5I6JJOUNC2KJS' where id=1; -update noar tt set b1='3MKECHHBBV2XE4KC7' where id=1; -update noar ti set b1='3MKECHHBBV2XE4KC7' where id=1; -update noar tt set v0='JSWP5EI7HWUTVDSIOORYKUM1SKR3VE' where id=1; -update noar ti set v0='JSWP5EI7HWUTVDSIOORYKUM1SKR3VE' where id=1; -update noar tt set b2='ZXDH2SQC' where id=1; -update noar ti set b2='ZXDH2SQC' where id=1; -update noar tt set v0='LIR55AI811KBFOT' where id=2; -update noar ti set v0='LIR55AI811KBFOT' where id=2; -update noar tt set b0='V6N3ULOBKQ4OE7RTE9FV5QX2ME' where id=2; -update noar ti set b0='V6N3ULOBKQ4OE7RTE9FV5QX2ME' where id=2; -update noar tt set v0='VY9VF3MVWZHL' where id=2; -update noar ti set v0='VY9VF3MVWZHL' where id=2; -update noar tt set b1='URPT2INKAZC' where id=2; -update noar ti set b1='URPT2INKAZC' where id=2; -update noar tt set v0='4E5F0A7UOIAFQCP7QOXNISWT93P3' where id=2; -update noar ti set v0='4E5F0A7UOIAFQCP7QOXNISWT93P3' where id=2; -update noar tt set b2='KP3CWJRRKM' where id=2; -update noar ti set b2='KP3CWJRRKM' where id=2; -update noar tt set v0='OEEZNDJRSYVWUR044UXUW70JKP7O' where id=3; -update noar ti set v0='OEEZNDJRSYVWUR044UXUW70JKP7O' where id=3; -update noar tt set b0='YXOP3' where id=3; -update noar ti set b0='YXOP3' where id=3; -update noar tt set v0='VYUVROLL2N' where id=3; -update noar ti set v0='VYUVROLL2N' where id=3; -update noar tt set b1='SMCFO14L1JD' where id=3; -update noar ti set b1='SMCFO14L1JD' where id=3; -update noar tt set v0='8TTRLRR8I' where id=3; -update noar ti set v0='8TTRLRR8I' where id=3; -update noar tt set b2='D' where id=3; -update noar ti set b2='D' where id=3; -update noar tt set v0='JY94NO57XOO7NVQ6I0DL8RBXI6EL' where id=4; -update noar ti set v0='JY94NO57XOO7NVQ6I0DL8RBXI6EL' where id=4; -update noar tt set b0='0E7RYLJYFGTT' where id=4; -update noar ti set b0='0E7RYLJYFGTT' where id=4; -update noar tt set v0='83NPVOMAKLM6SQ8ZMFU084DTO8' where id=4; -update noar ti set v0='83NPVOMAKLM6SQ8ZMFU084DTO8' where id=4; -update noar tt set b1='SYXXHBSWKRC5LR7H5AOHFJR9C' where id=4; -update noar ti set b1='SYXXHBSWKRC5LR7H5AOHFJR9C' where id=4; -update noar tt set v0='U5A6416LF4RA1E25EOU17TJ' where id=4; -update noar ti set v0='U5A6416LF4RA1E25EOU17TJ' where id=4; -update noar tt set b2='OGIJS9R640ZGW28N9YBQVYRDUZDPU7F' where id=4; -update noar ti set b2='OGIJS9R640ZGW28N9YBQVYRDUZDPU7F' where id=4; -update noar tt set v0='VSD9834MIY7LV' where id=5; -update noar ti set v0='VSD9834MIY7LV' where id=5; -update noar tt set b0='NLDZJGLZUMIY3' where id=5; -update noar ti set b0='NLDZJGLZUMIY3' where id=5; -update noar tt set v0='DY' where id=5; -update noar ti set v0='DY' where id=5; -update noar tt set b1='2ZLUZ8ZBC9H7PZ8KFIZ' where id=5; -update noar ti set b1='2ZLUZ8ZBC9H7PZ8KFIZ' where id=5; -update noar tt set v0='X808' where id=5; -update noar ti set v0='X808' where id=5; -update noar tt set b2='VXBFZNP6JRVZJ4N0' where id=5; -update noar ti set b2='VXBFZNP6JRVZJ4N0' where id=5; -update noar tt set v0='JGTZ186QPSSOU1GMQNV5MZ8UTRA6RC' where id=6; -update noar ti set v0='JGTZ186QPSSOU1GMQNV5MZ8UTRA6RC' where id=6; -update noar tt set b0='DC' where id=6; -update noar ti set b0='DC' where id=6; -update noar tt set v0='8NWQW3MZGGD7TBDY0HF9PE70LW1TM8T9' where id=6; -update noar ti set v0='8NWQW3MZGGD7TBDY0HF9PE70LW1TM8T9' where id=6; -update noar tt set b1='M' where id=6; -update noar ti set b1='M' where id=6; -update noar tt set v0='H2Y69AOEK' where id=6; -update noar ti set v0='H2Y69AOEK' where id=6; -update noar tt set b2='D1E8BHRQU55S2Y70VM3YGGXXOGU5FJL' where id=6; -update noar ti set b2='D1E8BHRQU55S2Y70VM3YGGXXOGU5FJL' where id=6; -update noar tt set v0='EHLT2111EWVF29Y74N1C' where id=7; -update noar ti set v0='EHLT2111EWVF29Y74N1C' where id=7; -update noar tt set b0='JTDPW0UKFVJ2VWCKWRA9PXQ' where id=7; -update noar ti set b0='JTDPW0UKFVJ2VWCKWRA9PXQ' where id=7; -update noar tt set v0='ZMFMGOBEK8QCDH97LL0PLQ86BU3FG06S' where id=7; -update noar ti set v0='ZMFMGOBEK8QCDH97LL0PLQ86BU3FG06S' where id=7; -update noar tt set b1='6SW7' where id=7; -update noar ti set b1='6SW7' where id=7; -update noar tt set v0='6' where id=7; -update noar ti set v0='6' where id=7; -update noar tt set b2='K1DJQQML2WMCQLO8IGO0' where id=7; -update noar ti set b2='K1DJQQML2WMCQLO8IGO0' where id=7; -update noar tt set v0='CO0FTRTBQUSTKNUCI2284SZTMCNCIN0K' where id=8; -update noar ti set v0='CO0FTRTBQUSTKNUCI2284SZTMCNCIN0K' where id=8; -update noar tt set b0='Z5NJ081B4V8F7G8OL' where id=8; -update noar ti set b0='Z5NJ081B4V8F7G8OL' where id=8; -update noar tt set v0='LSFGEHGIP39Z' where id=8; -update noar ti set v0='LSFGEHGIP39Z' where id=8; -update noar tt set b1='1UYVW0IJBF9WWXKOO97HCTG5WFHBA' where id=8; -update noar ti set b1='1UYVW0IJBF9WWXKOO97HCTG5WFHBA' where id=8; -update noar tt set v0='PIOKCE6G' where id=8; -update noar ti set v0='PIOKCE6G' where id=8; -update noar tt set b2='E224G' where id=8; -update noar ti set b2='E224G' where id=8; -update noar tt set v0='KSG' where id=9; -update noar ti set v0='KSG' where id=9; -update noar tt set b0='5RZOA8UX408MUZIJ71XTY4H2H' where id=9; -update noar ti set b0='5RZOA8UX408MUZIJ71XTY4H2H' where id=9; -update noar tt set v0='623TF4UB5102W89M1LKD9IWAUV7' where id=9; -update noar ti set v0='623TF4UB5102W89M1LKD9IWAUV7' where id=9; -update noar tt set b1='287AV582B2LBT0ZK167WS38' where id=9; -update noar ti set b1='287AV582B2LBT0ZK167WS38' where id=9; -update noar tt set v0='N5VNTD1L2JPP1CNR5Z43WH2TRVB2' where id=9; -update noar ti set v0='N5VNTD1L2JPP1CNR5Z43WH2TRVB2' where id=9; -update noar tt set b2='37KMQ8A030C7U62D9JZA576990' where id=9; -update noar ti set b2='37KMQ8A030C7U62D9JZA576990' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 tinyblob null, - b1 tinyblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='JQ5H9' where id=1; -update noar ti set v0='JQ5H9' where id=1; -update noar tt set b0='VJPD0YVFG' where id=1; -update noar ti set b0='VJPD0YVFG' where id=1; -update noar tt set v0='TG21O8USE' where id=1; -update noar ti set v0='TG21O8USE' where id=1; -update noar tt set b1='6G8NCFVDGKUKASL088V3' where id=1; -update noar ti set b1='6G8NCFVDGKUKASL088V3' where id=1; -update noar tt set v0='ECY522B2EVTEFA3YWTMQ7IJT1WAN0YZX' where id=1; -update noar ti set v0='ECY522B2EVTEFA3YWTMQ7IJT1WAN0YZX' where id=1; -update noar tt set b2='RGUOOSC9F0U5KG' where id=1; -update noar ti set b2='RGUOOSC9F0U5KG' where id=1; -update noar tt set v0='AGM80' where id=2; -update noar ti set v0='AGM80' where id=2; -update noar tt set b0='3Z2F4H7KGT8COPM' where id=2; -update noar ti set b0='3Z2F4H7KGT8COPM' where id=2; -update noar tt set v0='4SJZW' where id=2; -update noar ti set v0='4SJZW' where id=2; -update noar tt set b1='K18GZ3H8T185BSIJ6F8' where id=2; -update noar ti set b1='K18GZ3H8T185BSIJ6F8' where id=2; -update noar tt set v0='GSAV7U0MXXY3JK2UW6' where id=2; -update noar ti set v0='GSAV7U0MXXY3JK2UW6' where id=2; -update noar tt set b2='2FL4SWZ15Y4VZLD8J0M9X41FS87ZYO' where id=2; -update noar ti set b2='2FL4SWZ15Y4VZLD8J0M9X41FS87ZYO' where id=2; -update noar tt set v0='K1DGS28E' where id=3; -update noar ti set v0='K1DGS28E' where id=3; -update noar tt set b0='X01UMRXH0ZKUP1W11DW' where id=3; -update noar ti set b0='X01UMRXH0ZKUP1W11DW' where id=3; -update noar tt set v0='7R8MH6TTJA03' where id=3; -update noar ti set v0='7R8MH6TTJA03' where id=3; -update noar tt set b1='XOB7YLIV8WJWKX1W' where id=3; -update noar ti set b1='XOB7YLIV8WJWKX1W' where id=3; -update noar tt set v0='HHJY' where id=3; -update noar ti set v0='HHJY' where id=3; -update noar tt set b2='YQQ4S2ZPJAGT8SQT45Z6AHAKFBD' where id=3; -update noar ti set b2='YQQ4S2ZPJAGT8SQT45Z6AHAKFBD' where id=3; -update noar tt set v0='VR3ZLY04Q0Z' where id=4; -update noar ti set v0='VR3ZLY04Q0Z' where id=4; -update noar tt set b0='NFFIOVEB1M7ESNIMYUNYI0AY7R' where id=4; -update noar ti set b0='NFFIOVEB1M7ESNIMYUNYI0AY7R' where id=4; -update noar tt set v0='G73TFDLWFTTP4UU43KOTJT17L2ZHQBO1' where id=4; -update noar ti set v0='G73TFDLWFTTP4UU43KOTJT17L2ZHQBO1' where id=4; -update noar tt set b1='66N5GUY2DRKB7KQ8HKPU5T1JWW4VJMI' where id=4; -update noar ti set b1='66N5GUY2DRKB7KQ8HKPU5T1JWW4VJMI' where id=4; -update noar tt set v0='H1PPXV3OG64MVUT1Z' where id=4; -update noar ti set v0='H1PPXV3OG64MVUT1Z' where id=4; -update noar tt set b2='VVT5D8VX' where id=4; -update noar ti set b2='VVT5D8VX' where id=4; -update noar tt set v0='VLHKW4GFZ2921QC' where id=5; -update noar ti set v0='VLHKW4GFZ2921QC' where id=5; -update noar tt set b0='CA1EO25J5QPFLG6OV00W1UIMK9Y0K74T' where id=5; -update noar ti set b0='CA1EO25J5QPFLG6OV00W1UIMK9Y0K74T' where id=5; -update noar tt set v0='KE8N4FOZX1BEP4IZSLYM7QPHB' where id=5; -update noar ti set v0='KE8N4FOZX1BEP4IZSLYM7QPHB' where id=5; -update noar tt set b1='5KW8W8MRG21D9' where id=5; -update noar ti set b1='5KW8W8MRG21D9' where id=5; -update noar tt set v0='5L9IMI8P' where id=5; -update noar ti set v0='5L9IMI8P' where id=5; -update noar tt set b2='NTQP9YOD4ILXV4M0JX62ZRTTPEXSV' where id=5; -update noar ti set b2='NTQP9YOD4ILXV4M0JX62ZRTTPEXSV' where id=5; -update noar tt set v0='N3IHQ1LFI3IKAKJ5JONX' where id=6; -update noar ti set v0='N3IHQ1LFI3IKAKJ5JONX' where id=6; -update noar tt set b0='4QEAQ0YSIDXO0G0N9X' where id=6; -update noar ti set b0='4QEAQ0YSIDXO0G0N9X' where id=6; -update noar tt set v0='UNKSY9EZAVCY9P' where id=6; -update noar ti set v0='UNKSY9EZAVCY9P' where id=6; -update noar tt set b1='IRBV92X76W9HTGV708EN' where id=6; -update noar ti set b1='IRBV92X76W9HTGV708EN' where id=6; -update noar tt set v0='1C' where id=6; -update noar ti set v0='1C' where id=6; -update noar tt set b2='JMZC6IVL6' where id=6; -update noar ti set b2='JMZC6IVL6' where id=6; -update noar tt set v0='NS5YX6DAGKEA3NCKF5IY33WK' where id=7; -update noar ti set v0='NS5YX6DAGKEA3NCKF5IY33WK' where id=7; -update noar tt set b0='8IHLZWAIV39R0VH34F' where id=7; -update noar ti set b0='8IHLZWAIV39R0VH34F' where id=7; -update noar tt set v0='3SMM9GOIVSZIWHL' where id=7; -update noar ti set v0='3SMM9GOIVSZIWHL' where id=7; -update noar tt set b1='2R10ZK23VDA2' where id=7; -update noar ti set b1='2R10ZK23VDA2' where id=7; -update noar tt set v0='SEU60PG9PS6J75J' where id=7; -update noar ti set v0='SEU60PG9PS6J75J' where id=7; -update noar tt set b2='8Z0CPGVRZXVGNE55BM4RHV4' where id=7; -update noar ti set b2='8Z0CPGVRZXVGNE55BM4RHV4' where id=7; -update noar tt set v0='BZY8XN1ZSJ0RGBZMZAP6M2' where id=8; -update noar ti set v0='BZY8XN1ZSJ0RGBZMZAP6M2' where id=8; -update noar tt set b0='Q' where id=8; -update noar ti set b0='Q' where id=8; -update noar tt set v0='8SEL11YFSI6U' where id=8; -update noar ti set v0='8SEL11YFSI6U' where id=8; -update noar tt set b1='3ZI267XHVDWH0' where id=8; -update noar ti set b1='3ZI267XHVDWH0' where id=8; -update noar tt set v0='OVC6B8M7UVBAG0O6E' where id=8; -update noar ti set v0='OVC6B8M7UVBAG0O6E' where id=8; -update noar tt set b2='TPNBIOVDC' where id=8; -update noar ti set b2='TPNBIOVDC' where id=8; -update noar tt set v0='KDT6Z5NDC888GFUH42FMM56A' where id=9; -update noar ti set v0='KDT6Z5NDC888GFUH42FMM56A' where id=9; -update noar tt set b0='A' where id=9; -update noar ti set b0='A' where id=9; -update noar tt set v0='BT80PH367VLYE447H0SZXE' where id=9; -update noar ti set v0='BT80PH367VLYE447H0SZXE' where id=9; -update noar tt set b1='XIVOTV6QWRN16VZGN39PWXCOY19PYL2' where id=9; -update noar ti set b1='XIVOTV6QWRN16VZGN39PWXCOY19PYL2' where id=9; -update noar tt set v0='S07ZFDJ8M' where id=9; -update noar ti set v0='S07ZFDJ8M' where id=9; -update noar tt set b2='00K8RL' where id=9; -update noar ti set b2='00K8RL' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 tinyblob not null, - b1 tinyblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='MFE0U1AU34A7Q6LXIYXVZ9F' where id=1; -update noar ti set v0='MFE0U1AU34A7Q6LXIYXVZ9F' where id=1; -update noar tt set b0='I9B' where id=1; -update noar ti set b0='I9B' where id=1; -update noar tt set v0='XJ608V0L9RT41XBMPHMHQ2' where id=1; -update noar ti set v0='XJ608V0L9RT41XBMPHMHQ2' where id=1; -update noar tt set b1='4XFWY95F8' where id=1; -update noar ti set b1='4XFWY95F8' where id=1; -update noar tt set v0='QNXPNBW3KX88ML' where id=1; -update noar ti set v0='QNXPNBW3KX88ML' where id=1; -update noar tt set b2='BQJJX0V071AC8K' where id=1; -update noar ti set b2='BQJJX0V071AC8K' where id=1; -update noar tt set v0='LKRKMACP7HLZKBJIMXZD5' where id=2; -update noar ti set v0='LKRKMACP7HLZKBJIMXZD5' where id=2; -update noar tt set b0='U85GFW' where id=2; -update noar ti set b0='U85GFW' where id=2; -update noar tt set v0='E2OU1YDJ257IYFW41G' where id=2; -update noar ti set v0='E2OU1YDJ257IYFW41G' where id=2; -update noar tt set b1='IFUNURYM892' where id=2; -update noar ti set b1='IFUNURYM892' where id=2; -update noar tt set v0='H2SWLM2YA147BQO4F010Q9V' where id=2; -update noar ti set v0='H2SWLM2YA147BQO4F010Q9V' where id=2; -update noar tt set b2='WIQMLLAS3SAWN2TSE1YN' where id=2; -update noar ti set b2='WIQMLLAS3SAWN2TSE1YN' where id=2; -update noar tt set v0='1IJS0H7O4FXRK5OPS33DCHW' where id=3; -update noar ti set v0='1IJS0H7O4FXRK5OPS33DCHW' where id=3; -update noar tt set b0='MJLTP7CCK' where id=3; -update noar ti set b0='MJLTP7CCK' where id=3; -update noar tt set v0='HT0WZ8VBZCFO3JB7OF9XIDJOUFZHUA4' where id=3; -update noar ti set v0='HT0WZ8VBZCFO3JB7OF9XIDJOUFZHUA4' where id=3; -update noar tt set b1='L' where id=3; -update noar ti set b1='L' where id=3; -update noar tt set v0='RB9TQ5E4MOVUXXH3TS5R19MFGYCI7' where id=3; -update noar ti set v0='RB9TQ5E4MOVUXXH3TS5R19MFGYCI7' where id=3; -update noar tt set b2='H602GSGVE11Z3K2S9YJ' where id=3; -update noar ti set b2='H602GSGVE11Z3K2S9YJ' where id=3; -update noar tt set v0='4A2TBMV0DYNQF1SI1LED7Q5' where id=4; -update noar ti set v0='4A2TBMV0DYNQF1SI1LED7Q5' where id=4; -update noar tt set b0='BWOZFPIM7I2WLML23K0XEW85HX39JDW0' where id=4; -update noar ti set b0='BWOZFPIM7I2WLML23K0XEW85HX39JDW0' where id=4; -update noar tt set v0='THZB1B767B1WXPX2SMJGR' where id=4; -update noar ti set v0='THZB1B767B1WXPX2SMJGR' where id=4; -update noar tt set b1='6EFXT6GV9A4EN5RBPTW' where id=4; -update noar ti set b1='6EFXT6GV9A4EN5RBPTW' where id=4; -update noar tt set v0='OH4QKME4A3I1ZWVU' where id=4; -update noar ti set v0='OH4QKME4A3I1ZWVU' where id=4; -update noar tt set b2='6POBQ0XQ4V99HOGF3EX' where id=4; -update noar ti set b2='6POBQ0XQ4V99HOGF3EX' where id=4; -update noar tt set v0='TQLZX22AZ0N5QLI2L4DF70DY6' where id=5; -update noar ti set v0='TQLZX22AZ0N5QLI2L4DF70DY6' where id=5; -update noar tt set b0='H579V6W2NLZ0US' where id=5; -update noar ti set b0='H579V6W2NLZ0US' where id=5; -update noar tt set v0='9H8T6C41BPRR6CEZ' where id=5; -update noar ti set v0='9H8T6C41BPRR6CEZ' where id=5; -update noar tt set b1='XHDDL4RBY' where id=5; -update noar ti set b1='XHDDL4RBY' where id=5; -update noar tt set v0='A9FPDC' where id=5; -update noar ti set v0='A9FPDC' where id=5; -update noar tt set b2='8I6XV1E4I8VYCAVGY3MAEIHOCTZR2' where id=5; -update noar ti set b2='8I6XV1E4I8VYCAVGY3MAEIHOCTZR2' where id=5; -update noar tt set v0='GMP6R0GSZVRZ7XIUH9JW' where id=6; -update noar ti set v0='GMP6R0GSZVRZ7XIUH9JW' where id=6; -update noar tt set b0='DJ6VDI94SZYD1PTRV1Q' where id=6; -update noar ti set b0='DJ6VDI94SZYD1PTRV1Q' where id=6; -update noar tt set v0='6UVE7U7KB3N88QIVHGW5K' where id=6; -update noar ti set v0='6UVE7U7KB3N88QIVHGW5K' where id=6; -update noar tt set b1='DH09NPRRI80X0JET058' where id=6; -update noar ti set b1='DH09NPRRI80X0JET058' where id=6; -update noar tt set v0='J8YL9WHZ' where id=6; -update noar ti set v0='J8YL9WHZ' where id=6; -update noar tt set b2='H086K8' where id=6; -update noar ti set b2='H086K8' where id=6; -update noar tt set v0='W' where id=7; -update noar ti set v0='W' where id=7; -update noar tt set b0='7FEYN21U26Y3N15XPZ8K' where id=7; -update noar ti set b0='7FEYN21U26Y3N15XPZ8K' where id=7; -update noar tt set v0='QRBZ9R4Y4C5ZBF0ZTAPD5VM' where id=7; -update noar ti set v0='QRBZ9R4Y4C5ZBF0ZTAPD5VM' where id=7; -update noar tt set b1='FHV' where id=7; -update noar ti set b1='FHV' where id=7; -update noar tt set v0='8YAR9NYYSH' where id=7; -update noar ti set v0='8YAR9NYYSH' where id=7; -update noar tt set b2='THYEBHUCV' where id=7; -update noar ti set b2='THYEBHUCV' where id=7; -update noar tt set v0='HAWMV4IUFD7CB0IPOSNTU7GDEJWB' where id=8; -update noar ti set v0='HAWMV4IUFD7CB0IPOSNTU7GDEJWB' where id=8; -update noar tt set b0='LDUCB3CG' where id=8; -update noar ti set b0='LDUCB3CG' where id=8; -update noar tt set v0='WJ5' where id=8; -update noar ti set v0='WJ5' where id=8; -update noar tt set b1='0EXXW5UNP5R4KES' where id=8; -update noar ti set b1='0EXXW5UNP5R4KES' where id=8; -update noar tt set v0='IGRNA25M0LDRWF3NBI9EMCEGQY2XV3' where id=8; -update noar ti set v0='IGRNA25M0LDRWF3NBI9EMCEGQY2XV3' where id=8; -update noar tt set b2='UWRL32W' where id=8; -update noar ti set b2='UWRL32W' where id=8; -update noar tt set v0='N8KOKS149ELTEKUB5XD' where id=9; -update noar ti set v0='N8KOKS149ELTEKUB5XD' where id=9; -update noar tt set b0='VE8GYS3SDA9Q79XGUV3W4VD8L9D2TES' where id=9; -update noar ti set b0='VE8GYS3SDA9Q79XGUV3W4VD8L9D2TES' where id=9; -update noar tt set v0='AGU7V0' where id=9; -update noar ti set v0='AGU7V0' where id=9; -update noar tt set b1='2H' where id=9; -update noar ti set b1='2H' where id=9; -update noar tt set v0='LMPMXXNXV8BV0M8WNG7PGEYMB6' where id=9; -update noar ti set v0='LMPMXXNXV8BV0M8WNG7PGEYMB6' where id=9; -update noar tt set b2='0SJDSWLS6WQES66ZRB36N' where id=9; -update noar ti set b2='0SJDSWLS6WQES66ZRB36N' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 tinyblob not null, - b1 tinyblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='F692FKM6I697RNL5RTVXA9U5KKTZ' where id=1; -update noar ti set v0='F692FKM6I697RNL5RTVXA9U5KKTZ' where id=1; -update noar tt set b0='U2V366L' where id=1; -update noar ti set b0='U2V366L' where id=1; -update noar tt set v0='RO8IQ9G6RNZIXXJMNC3MU9TBQQ' where id=1; -update noar ti set v0='RO8IQ9G6RNZIXXJMNC3MU9TBQQ' where id=1; -update noar tt set b1='UVLBQAUHI5457J1XYBBOJ5O6A' where id=1; -update noar ti set b1='UVLBQAUHI5457J1XYBBOJ5O6A' where id=1; -update noar tt set v0='JYJZL0HQ' where id=1; -update noar ti set v0='JYJZL0HQ' where id=1; -update noar tt set b2='ZV5E2Q' where id=1; -update noar ti set b2='ZV5E2Q' where id=1; -update noar tt set v0='6XYY2F3F2H3696EHSKI6LYLKI0U8' where id=2; -update noar ti set v0='6XYY2F3F2H3696EHSKI6LYLKI0U8' where id=2; -update noar tt set b0='2I9MPRXJ0PVE' where id=2; -update noar ti set b0='2I9MPRXJ0PVE' where id=2; -update noar tt set v0='DG7Q8GBEZNAAPD6G2U9E' where id=2; -update noar ti set v0='DG7Q8GBEZNAAPD6G2U9E' where id=2; -update noar tt set b1='VHK5FCLNCPVZ50TSJCYQXMSR' where id=2; -update noar ti set b1='VHK5FCLNCPVZ50TSJCYQXMSR' where id=2; -update noar tt set v0='Q04FYRPM11B7OB' where id=2; -update noar ti set v0='Q04FYRPM11B7OB' where id=2; -update noar tt set b2='L8D2DFDO7RG0I5NYKUJ0' where id=2; -update noar ti set b2='L8D2DFDO7RG0I5NYKUJ0' where id=2; -update noar tt set v0='4OGN013L2P3QNNKF6D8WAADM' where id=3; -update noar ti set v0='4OGN013L2P3QNNKF6D8WAADM' where id=3; -update noar tt set b0='G8NWUK5VM77D' where id=3; -update noar ti set b0='G8NWUK5VM77D' where id=3; -update noar tt set v0='IUF4K1' where id=3; -update noar ti set v0='IUF4K1' where id=3; -update noar tt set b1='Y8NL0QKZKR20FZUMURW82' where id=3; -update noar ti set b1='Y8NL0QKZKR20FZUMURW82' where id=3; -update noar tt set v0='3SILD5JTGORBCZO' where id=3; -update noar ti set v0='3SILD5JTGORBCZO' where id=3; -update noar tt set b2='6QTZW6II8H' where id=3; -update noar ti set b2='6QTZW6II8H' where id=3; -update noar tt set v0='V0ZVQNK' where id=4; -update noar ti set v0='V0ZVQNK' where id=4; -update noar tt set b0='IE2MQ8BA' where id=4; -update noar ti set b0='IE2MQ8BA' where id=4; -update noar tt set v0='9NFVPUUU8Y0226V' where id=4; -update noar ti set v0='9NFVPUUU8Y0226V' where id=4; -update noar tt set b1='TK' where id=4; -update noar ti set b1='TK' where id=4; -update noar tt set v0='13TASNX' where id=4; -update noar ti set v0='13TASNX' where id=4; -update noar tt set b2='53MIYZKCI2DJ28IYJ1HMKS0HR' where id=4; -update noar ti set b2='53MIYZKCI2DJ28IYJ1HMKS0HR' where id=4; -update noar tt set v0='U2R9IHN2UZ' where id=5; -update noar ti set v0='U2R9IHN2UZ' where id=5; -update noar tt set b0='5OQJY293U7ZYJAA2GMC4O8' where id=5; -update noar ti set b0='5OQJY293U7ZYJAA2GMC4O8' where id=5; -update noar tt set v0='PHZ5IGF43L8GWNZB0KE3E5YWZH2W' where id=5; -update noar ti set v0='PHZ5IGF43L8GWNZB0KE3E5YWZH2W' where id=5; -update noar tt set b1='RW38937LA8NQUPWTJDOR2GDP' where id=5; -update noar ti set b1='RW38937LA8NQUPWTJDOR2GDP' where id=5; -update noar tt set v0='S6VVM3KTX6ZXHUHXCVZFZPP' where id=5; -update noar ti set v0='S6VVM3KTX6ZXHUHXCVZFZPP' where id=5; -update noar tt set b2='UHS87PO53UMIW7CNWDKQ' where id=5; -update noar ti set b2='UHS87PO53UMIW7CNWDKQ' where id=5; -update noar tt set v0='WOKE' where id=6; -update noar ti set v0='WOKE' where id=6; -update noar tt set b0='YT5M' where id=6; -update noar ti set b0='YT5M' where id=6; -update noar tt set v0='5SSWY' where id=6; -update noar ti set v0='5SSWY' where id=6; -update noar tt set b1='Y5ILXOA8VE1J1YRIM13PD44S3Z1' where id=6; -update noar ti set b1='Y5ILXOA8VE1J1YRIM13PD44S3Z1' where id=6; -update noar tt set v0='PSLYZIJQJSH70J' where id=6; -update noar ti set v0='PSLYZIJQJSH70J' where id=6; -update noar tt set b2='CA0W9TOM6F48FL' where id=6; -update noar ti set b2='CA0W9TOM6F48FL' where id=6; -update noar tt set v0='2PLYSS9D7S3O0' where id=7; -update noar ti set v0='2PLYSS9D7S3O0' where id=7; -update noar tt set b0='MXCJGQA1BX2XLUI3A29FAV3XPO6Q' where id=7; -update noar ti set b0='MXCJGQA1BX2XLUI3A29FAV3XPO6Q' where id=7; -update noar tt set v0='TFPY09838AXP63Y6KPF9C0XB' where id=7; -update noar ti set v0='TFPY09838AXP63Y6KPF9C0XB' where id=7; -update noar tt set b1='TEU83WTUK9F8Q8LR6GDY' where id=7; -update noar ti set b1='TEU83WTUK9F8Q8LR6GDY' where id=7; -update noar tt set v0='10U' where id=7; -update noar ti set v0='10U' where id=7; -update noar tt set b2='AGNPLF' where id=7; -update noar ti set b2='AGNPLF' where id=7; -update noar tt set v0='02CK2WZCWR7R1L8DS95SZXJ7UID' where id=8; -update noar ti set v0='02CK2WZCWR7R1L8DS95SZXJ7UID' where id=8; -update noar tt set b0='Z3IB04' where id=8; -update noar ti set b0='Z3IB04' where id=8; -update noar tt set v0='9DNP7OU59Q0MUCM0LBY0' where id=8; -update noar ti set v0='9DNP7OU59Q0MUCM0LBY0' where id=8; -update noar tt set b1='QCDCAPLGC2Q6ILNUV80DO4' where id=8; -update noar ti set b1='QCDCAPLGC2Q6ILNUV80DO4' where id=8; -update noar tt set v0='3W1HR34U3KCNCR62ZWDONW52E01W5' where id=8; -update noar ti set v0='3W1HR34U3KCNCR62ZWDONW52E01W5' where id=8; -update noar tt set b2='THLPEVK' where id=8; -update noar ti set b2='THLPEVK' where id=8; -update noar tt set v0='5EYGBI1G87PYKW6' where id=9; -update noar ti set v0='5EYGBI1G87PYKW6' where id=9; -update noar tt set b0='ZN5KD5WYAV' where id=9; -update noar ti set b0='ZN5KD5WYAV' where id=9; -update noar tt set v0='ZXXZ' where id=9; -update noar ti set v0='ZXXZ' where id=9; -update noar tt set b1='DMBUCSC' where id=9; -update noar ti set b1='DMBUCSC' where id=9; -update noar tt set v0='VNH55Q7758O81ROLL' where id=9; -update noar ti set v0='VNH55Q7758O81ROLL' where id=9; -update noar tt set b2='47V1E44NMHHR8NGW3U1U' where id=9; -update noar ti set b2='47V1E44NMHHR8NGW3U1U' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 tinyblob null, - b1 blob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='8Y8TFU62EGVSJXPX1889WWZZP1R24SR' where id=1; -update noar ti set v0='8Y8TFU62EGVSJXPX1889WWZZP1R24SR' where id=1; -update noar tt set b0='JLBNRI5' where id=1; -update noar ti set b0='JLBNRI5' where id=1; -update noar tt set v0='657Z9C2VSIS8S0BOUS4GN' where id=1; -update noar ti set v0='657Z9C2VSIS8S0BOUS4GN' where id=1; -update noar tt set b1='17G04YWZ5X83GR3D5ANNYDVXWFRM0J' where id=1; -update noar ti set b1='17G04YWZ5X83GR3D5ANNYDVXWFRM0J' where id=1; -update noar tt set v0='NEFEBI8YKDD2FSYEBTYPMKB5QZ4JT0OA' where id=1; -update noar ti set v0='NEFEBI8YKDD2FSYEBTYPMKB5QZ4JT0OA' where id=1; -update noar tt set b2='Y698MNX25' where id=1; -update noar ti set b2='Y698MNX25' where id=1; -update noar tt set v0='B919JNLCE3Y5TKJH24QC' where id=2; -update noar ti set v0='B919JNLCE3Y5TKJH24QC' where id=2; -update noar tt set b0='WJTMA4LU6R' where id=2; -update noar ti set b0='WJTMA4LU6R' where id=2; -update noar tt set v0='S5Q0H' where id=2; -update noar ti set v0='S5Q0H' where id=2; -update noar tt set b1='RMSMCBZ0HUGNQZQDKLUZ' where id=2; -update noar ti set b1='RMSMCBZ0HUGNQZQDKLUZ' where id=2; -update noar tt set v0='S18' where id=2; -update noar ti set v0='S18' where id=2; -update noar tt set b2='25EU28RZNCXWJ0GLZ27I' where id=2; -update noar ti set b2='25EU28RZNCXWJ0GLZ27I' where id=2; -update noar tt set v0='LRTIUXQWHTJAFIIX7VS' where id=3; -update noar ti set v0='LRTIUXQWHTJAFIIX7VS' where id=3; -update noar tt set b0='Z85WMPL67BVWPXIOQJ7LNJ' where id=3; -update noar ti set b0='Z85WMPL67BVWPXIOQJ7LNJ' where id=3; -update noar tt set v0='6GH65KMSXC9NBH30PCPCD6OFXMG' where id=3; -update noar ti set v0='6GH65KMSXC9NBH30PCPCD6OFXMG' where id=3; -update noar tt set b1='L8RL5IDLMIFY0Q3' where id=3; -update noar ti set b1='L8RL5IDLMIFY0Q3' where id=3; -update noar tt set v0='XY4DVW5XZJ8' where id=3; -update noar ti set v0='XY4DVW5XZJ8' where id=3; -update noar tt set b2='G4L' where id=3; -update noar ti set b2='G4L' where id=3; -update noar tt set v0='AGHDYX17QI3C4FQT8FD' where id=4; -update noar ti set v0='AGHDYX17QI3C4FQT8FD' where id=4; -update noar tt set b0='J305V' where id=4; -update noar ti set b0='J305V' where id=4; -update noar tt set v0='7EG02IGDF2F7PXAAMH5BZCZUR148' where id=4; -update noar ti set v0='7EG02IGDF2F7PXAAMH5BZCZUR148' where id=4; -update noar tt set b1='VAWGMUSVGOY7M549DA' where id=4; -update noar ti set b1='VAWGMUSVGOY7M549DA' where id=4; -update noar tt set v0='4N4L4XHWF3FQAWP0' where id=4; -update noar ti set v0='4N4L4XHWF3FQAWP0' where id=4; -update noar tt set b2='7XP26CHV9UQBDFS0ANMDOEE2VBU835' where id=4; -update noar ti set b2='7XP26CHV9UQBDFS0ANMDOEE2VBU835' where id=4; -update noar tt set v0='B9S8DVX3MZ60M6OS6PPELG8ALIZ' where id=5; -update noar ti set v0='B9S8DVX3MZ60M6OS6PPELG8ALIZ' where id=5; -update noar tt set b0='ZXZOHO389V70KSY' where id=5; -update noar ti set b0='ZXZOHO389V70KSY' where id=5; -update noar tt set v0='RKRL3YI88D' where id=5; -update noar ti set v0='RKRL3YI88D' where id=5; -update noar tt set b1='5KWEKK7XAXS4HCPTJS64FF' where id=5; -update noar ti set b1='5KWEKK7XAXS4HCPTJS64FF' where id=5; -update noar tt set v0='QCWXNGK1782X2RJ5O' where id=5; -update noar ti set v0='QCWXNGK1782X2RJ5O' where id=5; -update noar tt set b2='ONSN' where id=5; -update noar ti set b2='ONSN' where id=5; -update noar tt set v0='HGZ0OHSCTREB2RQE9XN8UR1748SS' where id=6; -update noar ti set v0='HGZ0OHSCTREB2RQE9XN8UR1748SS' where id=6; -update noar tt set b0='KN6' where id=6; -update noar ti set b0='KN6' where id=6; -update noar tt set v0='JJVI8J9IYCXEN4TT' where id=6; -update noar ti set v0='JJVI8J9IYCXEN4TT' where id=6; -update noar tt set b1='XXPHNOYQ5ZP1IQ73A9JKAQ' where id=6; -update noar ti set b1='XXPHNOYQ5ZP1IQ73A9JKAQ' where id=6; -update noar tt set v0='M5A5T5ALDQZ2S' where id=6; -update noar ti set v0='M5A5T5ALDQZ2S' where id=6; -update noar tt set b2='QN7EKYHJ62P66EOFYG1TGHDTKLO1KI5' where id=6; -update noar ti set b2='QN7EKYHJ62P66EOFYG1TGHDTKLO1KI5' where id=6; -update noar tt set v0='711A' where id=7; -update noar ti set v0='711A' where id=7; -update noar tt set b0='0BABH32UO' where id=7; -update noar ti set b0='0BABH32UO' where id=7; -update noar tt set v0='AFF8575R' where id=7; -update noar ti set v0='AFF8575R' where id=7; -update noar tt set b1='06N1VVVIPIZJX2ZXPDDMLVHMRJNB4DVI' where id=7; -update noar ti set b1='06N1VVVIPIZJX2ZXPDDMLVHMRJNB4DVI' where id=7; -update noar tt set v0='BB8' where id=7; -update noar ti set v0='BB8' where id=7; -update noar tt set b2='EN8' where id=7; -update noar ti set b2='EN8' where id=7; -update noar tt set v0='XFAJ3WG6A1RT02Y58S56' where id=8; -update noar ti set v0='XFAJ3WG6A1RT02Y58S56' where id=8; -update noar tt set b0='U2FAHR0OBYTH2TZUUUBR' where id=8; -update noar ti set b0='U2FAHR0OBYTH2TZUUUBR' where id=8; -update noar tt set v0='WP0ZIO09JI5S7KU' where id=8; -update noar ti set v0='WP0ZIO09JI5S7KU' where id=8; -update noar tt set b1='DGTOWH01GRNAQMQJ7E' where id=8; -update noar ti set b1='DGTOWH01GRNAQMQJ7E' where id=8; -update noar tt set v0='ULE1PTHWC4B48WISPLR5ZSFD35CDF2X3' where id=8; -update noar ti set v0='ULE1PTHWC4B48WISPLR5ZSFD35CDF2X3' where id=8; -update noar tt set b2='R2U0F5ADFZVHDIWKIYZE821KS' where id=8; -update noar ti set b2='R2U0F5ADFZVHDIWKIYZE821KS' where id=8; -update noar tt set v0='G5VHVX2PZIT2Z8GTPJIJ50B7T5W6LX' where id=9; -update noar ti set v0='G5VHVX2PZIT2Z8GTPJIJ50B7T5W6LX' where id=9; -update noar tt set b0='1WWYUFG' where id=9; -update noar ti set b0='1WWYUFG' where id=9; -update noar tt set v0='THW92PY4337G9B6J57Y07GPVJ0MMOJR5' where id=9; -update noar ti set v0='THW92PY4337G9B6J57Y07GPVJ0MMOJR5' where id=9; -update noar tt set b1='EEOP' where id=9; -update noar ti set b1='EEOP' where id=9; -update noar tt set v0='EXVRZNXS6308' where id=9; -update noar ti set v0='EXVRZNXS6308' where id=9; -update noar tt set b2='KVNVS6TASTDKU0' where id=9; -update noar ti set b2='KVNVS6TASTDKU0' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 tinyblob null, - b1 blob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='5BY2WL' where id=1; -update noar ti set v0='5BY2WL' where id=1; -update noar tt set b0='2LG9OQA' where id=1; -update noar ti set b0='2LG9OQA' where id=1; -update noar tt set v0='8A545MSMWTN02VPVU06CGR4AU9XPMS8G' where id=1; -update noar ti set v0='8A545MSMWTN02VPVU06CGR4AU9XPMS8G' where id=1; -update noar tt set b1='10IQ1YK40X5OYJLVLU10U8UBLAUGUC' where id=1; -update noar ti set b1='10IQ1YK40X5OYJLVLU10U8UBLAUGUC' where id=1; -update noar tt set v0='I9N4' where id=1; -update noar ti set v0='I9N4' where id=1; -update noar tt set b2='9S04H0WXMJGX' where id=1; -update noar ti set b2='9S04H0WXMJGX' where id=1; -update noar tt set v0='C17BARNR0UP55LYOC15Y0LXTWN10J1' where id=2; -update noar ti set v0='C17BARNR0UP55LYOC15Y0LXTWN10J1' where id=2; -update noar tt set b0='HKA2BQ' where id=2; -update noar ti set b0='HKA2BQ' where id=2; -update noar tt set v0='RC9C' where id=2; -update noar ti set v0='RC9C' where id=2; -update noar tt set b1='NNMCXD4IOIDTTA50OYXON' where id=2; -update noar ti set b1='NNMCXD4IOIDTTA50OYXON' where id=2; -update noar tt set v0='KNNYL' where id=2; -update noar ti set v0='KNNYL' where id=2; -update noar tt set b2='LO4QC69RGJP009Y1H9LFEP' where id=2; -update noar ti set b2='LO4QC69RGJP009Y1H9LFEP' where id=2; -update noar tt set v0='MPM75NHQ4IPXT3C8' where id=3; -update noar ti set v0='MPM75NHQ4IPXT3C8' where id=3; -update noar tt set b0='7V03CXP84YGBJ7' where id=3; -update noar ti set b0='7V03CXP84YGBJ7' where id=3; -update noar tt set v0='XDALAKE4F' where id=3; -update noar ti set v0='XDALAKE4F' where id=3; -update noar tt set b1='I93I7' where id=3; -update noar ti set b1='I93I7' where id=3; -update noar tt set v0='3B2TN6DMA4U83TXDFXLS3H1F1G0XUF2' where id=3; -update noar ti set v0='3B2TN6DMA4U83TXDFXLS3H1F1G0XUF2' where id=3; -update noar tt set b2='6QHW9NIPVXL388SD19DH1QT' where id=3; -update noar ti set b2='6QHW9NIPVXL388SD19DH1QT' where id=3; -update noar tt set v0='2UR6MB' where id=4; -update noar ti set v0='2UR6MB' where id=4; -update noar tt set b0='VKT2JWY64A1GH4BRG4VSQJ15J8TT7' where id=4; -update noar ti set b0='VKT2JWY64A1GH4BRG4VSQJ15J8TT7' where id=4; -update noar tt set v0='JHLJN7VR7FNS1JPBMKQO7L' where id=4; -update noar ti set v0='JHLJN7VR7FNS1JPBMKQO7L' where id=4; -update noar tt set b1='ME64QB92EH6DXLKKM7V3OT7ZE23' where id=4; -update noar ti set b1='ME64QB92EH6DXLKKM7V3OT7ZE23' where id=4; -update noar tt set v0='UYN69R6P1S6C6C1VJLEOA' where id=4; -update noar ti set v0='UYN69R6P1S6C6C1VJLEOA' where id=4; -update noar tt set b2='OQRMWCBP47J6FDIMS' where id=4; -update noar ti set b2='OQRMWCBP47J6FDIMS' where id=4; -update noar tt set v0='VHYHXA844B9QO9VWB5C4C64QOXJKPB' where id=5; -update noar ti set v0='VHYHXA844B9QO9VWB5C4C64QOXJKPB' where id=5; -update noar tt set b0='1LPCBNI4G1QCYQU50LHCVXT7TB38' where id=5; -update noar ti set b0='1LPCBNI4G1QCYQU50LHCVXT7TB38' where id=5; -update noar tt set v0='JUG' where id=5; -update noar ti set v0='JUG' where id=5; -update noar tt set b1='Q7V93AJC11' where id=5; -update noar ti set b1='Q7V93AJC11' where id=5; -update noar tt set v0='7D4AP' where id=5; -update noar ti set v0='7D4AP' where id=5; -update noar tt set b2='2SVBGC' where id=5; -update noar ti set b2='2SVBGC' where id=5; -update noar tt set v0='MLVZ' where id=6; -update noar ti set v0='MLVZ' where id=6; -update noar tt set b0='RGKY0TF70FT' where id=6; -update noar ti set b0='RGKY0TF70FT' where id=6; -update noar tt set v0='PL4M' where id=6; -update noar ti set v0='PL4M' where id=6; -update noar tt set b1='RO74V47G9JS2L5' where id=6; -update noar ti set b1='RO74V47G9JS2L5' where id=6; -update noar tt set v0='QYV0H0RJBU2IOOMFK6U8Y0CCFGC00M' where id=6; -update noar ti set v0='QYV0H0RJBU2IOOMFK6U8Y0CCFGC00M' where id=6; -update noar tt set b2='OY5AGV9P44VVI2ET6O8R' where id=6; -update noar ti set b2='OY5AGV9P44VVI2ET6O8R' where id=6; -update noar tt set v0='DQM3MJ1KI8XHMPSLFIOTBXNEY3' where id=7; -update noar ti set v0='DQM3MJ1KI8XHMPSLFIOTBXNEY3' where id=7; -update noar tt set b0='SFEVSIJPQR0ZQ5TDFHA13' where id=7; -update noar ti set b0='SFEVSIJPQR0ZQ5TDFHA13' where id=7; -update noar tt set v0='J' where id=7; -update noar ti set v0='J' where id=7; -update noar tt set b1='I2CUQVOAZV3' where id=7; -update noar ti set b1='I2CUQVOAZV3' where id=7; -update noar tt set v0='K8JQMG4K4I5WQ5TLTZUVKXS2EPMNP7F' where id=7; -update noar ti set v0='K8JQMG4K4I5WQ5TLTZUVKXS2EPMNP7F' where id=7; -update noar tt set b2='34VTBWMG2M' where id=7; -update noar ti set b2='34VTBWMG2M' where id=7; -update noar tt set v0='MS9RX3TVZRRI7SU1B463' where id=8; -update noar ti set v0='MS9RX3TVZRRI7SU1B463' where id=8; -update noar tt set b0='T2S1GA0O' where id=8; -update noar ti set b0='T2S1GA0O' where id=8; -update noar tt set v0='FMOT960EOBTB97J5XNKX5X5WFSF8Q3T' where id=8; -update noar ti set v0='FMOT960EOBTB97J5XNKX5X5WFSF8Q3T' where id=8; -update noar tt set b1='KN' where id=8; -update noar ti set b1='KN' where id=8; -update noar tt set v0='BHKL7AH4LB0GU5H' where id=8; -update noar ti set v0='BHKL7AH4LB0GU5H' where id=8; -update noar tt set b2='E1J9X4DJPFPM' where id=8; -update noar ti set b2='E1J9X4DJPFPM' where id=8; -update noar tt set v0='L' where id=9; -update noar ti set v0='L' where id=9; -update noar tt set b0='2MSHYUC013XQ0KRK' where id=9; -update noar ti set b0='2MSHYUC013XQ0KRK' where id=9; -update noar tt set v0='4PMIPCAB' where id=9; -update noar ti set v0='4PMIPCAB' where id=9; -update noar tt set b1='69Q8DYTVEK4DHLJWNIP3V1IDXBQO' where id=9; -update noar ti set b1='69Q8DYTVEK4DHLJWNIP3V1IDXBQO' where id=9; -update noar tt set v0='V8YM4VCQ5IZ0XN' where id=9; -update noar ti set v0='V8YM4VCQ5IZ0XN' where id=9; -update noar tt set b2='VMAPH031CNMBLCOEFQY8CO0J53' where id=9; -update noar ti set b2='VMAPH031CNMBLCOEFQY8CO0J53' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 tinyblob not null, - b1 blob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='NUXTEA371UUI1Y' where id=1; -update noar ti set v0='NUXTEA371UUI1Y' where id=1; -update noar tt set b0='16Z77OSIX' where id=1; -update noar ti set b0='16Z77OSIX' where id=1; -update noar tt set v0='3G6JRE3MPHPSEAA3' where id=1; -update noar ti set v0='3G6JRE3MPHPSEAA3' where id=1; -update noar tt set b1='C' where id=1; -update noar ti set b1='C' where id=1; -update noar tt set v0='FSIY84G0PLSNGVE73' where id=1; -update noar ti set v0='FSIY84G0PLSNGVE73' where id=1; -update noar tt set b2='KXJNKTSQ5' where id=1; -update noar ti set b2='KXJNKTSQ5' where id=1; -update noar tt set v0='HZY4KKANDK01GX' where id=2; -update noar ti set v0='HZY4KKANDK01GX' where id=2; -update noar tt set b0='W5VET6VE4G63TLA77GGWD30L0F6' where id=2; -update noar ti set b0='W5VET6VE4G63TLA77GGWD30L0F6' where id=2; -update noar tt set v0='AHMGJFBUGZQP1UC88ZI2S16U7TN1' where id=2; -update noar ti set v0='AHMGJFBUGZQP1UC88ZI2S16U7TN1' where id=2; -update noar tt set b1='YGBBURCJNMLCSGJIC666' where id=2; -update noar ti set b1='YGBBURCJNMLCSGJIC666' where id=2; -update noar tt set v0='WJBID4' where id=2; -update noar ti set v0='WJBID4' where id=2; -update noar tt set b2='OW' where id=2; -update noar ti set b2='OW' where id=2; -update noar tt set v0='8RG8G14QR6PESEG6QRODF7FGU' where id=3; -update noar ti set v0='8RG8G14QR6PESEG6QRODF7FGU' where id=3; -update noar tt set b0='MMZAKYRWQ' where id=3; -update noar ti set b0='MMZAKYRWQ' where id=3; -update noar tt set v0='5KEN4' where id=3; -update noar ti set v0='5KEN4' where id=3; -update noar tt set b1='23VAQ9R7BYX3P107O86LG' where id=3; -update noar ti set b1='23VAQ9R7BYX3P107O86LG' where id=3; -update noar tt set v0='GJOZQ4ZKS1DP' where id=3; -update noar ti set v0='GJOZQ4ZKS1DP' where id=3; -update noar tt set b2='BE96528P2KJA4HMQELHRBT67B' where id=3; -update noar ti set b2='BE96528P2KJA4HMQELHRBT67B' where id=3; -update noar tt set v0='86X7J' where id=4; -update noar ti set v0='86X7J' where id=4; -update noar tt set b0='YLZ23YHWBIE9TRZVHX' where id=4; -update noar ti set b0='YLZ23YHWBIE9TRZVHX' where id=4; -update noar tt set v0='RWL2RXTXEP4G8UJZ26M96A0GQVSX' where id=4; -update noar ti set v0='RWL2RXTXEP4G8UJZ26M96A0GQVSX' where id=4; -update noar tt set b1='D7RT34SZP32Q9NDDWX1N28F6' where id=4; -update noar ti set b1='D7RT34SZP32Q9NDDWX1N28F6' where id=4; -update noar tt set v0='RBOOWYJV0UO6IEF66K2PHJMR8JU' where id=4; -update noar ti set v0='RBOOWYJV0UO6IEF66K2PHJMR8JU' where id=4; -update noar tt set b2='85FZDU3L632EIH9C' where id=4; -update noar ti set b2='85FZDU3L632EIH9C' where id=4; -update noar tt set v0='T9EOANQZ2W5T93NHYKQJFC73I' where id=5; -update noar ti set v0='T9EOANQZ2W5T93NHYKQJFC73I' where id=5; -update noar tt set b0='1FW1O8R5WEDYEBD5P' where id=5; -update noar ti set b0='1FW1O8R5WEDYEBD5P' where id=5; -update noar tt set v0='FSE0XKCJ5WL5T5V9Z' where id=5; -update noar ti set v0='FSE0XKCJ5WL5T5V9Z' where id=5; -update noar tt set b1='EJ43VYZK798F0OVC3AEKUR58' where id=5; -update noar ti set b1='EJ43VYZK798F0OVC3AEKUR58' where id=5; -update noar tt set v0='B7F2RBS4KDC14S3K4YDT9EOHFC5S2C7' where id=5; -update noar ti set v0='B7F2RBS4KDC14S3K4YDT9EOHFC5S2C7' where id=5; -update noar tt set b2='3A4CUB9C3K1BPYOQSC6BQYM' where id=5; -update noar ti set b2='3A4CUB9C3K1BPYOQSC6BQYM' where id=5; -update noar tt set v0='XEYSOH0L53E0ZII4IHCBD49V30LA' where id=6; -update noar ti set v0='XEYSOH0L53E0ZII4IHCBD49V30LA' where id=6; -update noar tt set b0='0LFIO0E64XWEM4MDNT' where id=6; -update noar ti set b0='0LFIO0E64XWEM4MDNT' where id=6; -update noar tt set v0='SISI8E30RFEIPYYB4GOWMNYJ8Y7R32TN' where id=6; -update noar ti set v0='SISI8E30RFEIPYYB4GOWMNYJ8Y7R32TN' where id=6; -update noar tt set b1='7V' where id=6; -update noar ti set b1='7V' where id=6; -update noar tt set v0='2H' where id=6; -update noar ti set v0='2H' where id=6; -update noar tt set b2='H7C4YNHPDQXFW70HLATM' where id=6; -update noar ti set b2='H7C4YNHPDQXFW70HLATM' where id=6; -update noar tt set v0='10Q5O525U9TTL' where id=7; -update noar ti set v0='10Q5O525U9TTL' where id=7; -update noar tt set b0='41VHZGG491TA0K79J7JTM6' where id=7; -update noar ti set b0='41VHZGG491TA0K79J7JTM6' where id=7; -update noar tt set v0='Z17IUD0INSHF47J40KB8J8T9GI' where id=7; -update noar ti set v0='Z17IUD0INSHF47J40KB8J8T9GI' where id=7; -update noar tt set b1='2' where id=7; -update noar ti set b1='2' where id=7; -update noar tt set v0='0BS325FYR2' where id=7; -update noar ti set v0='0BS325FYR2' where id=7; -update noar tt set b2='NUFVIE5W873HNMQJJM' where id=7; -update noar ti set b2='NUFVIE5W873HNMQJJM' where id=7; -update noar tt set v0='AHBC' where id=8; -update noar ti set v0='AHBC' where id=8; -update noar tt set b0='HE5M00J' where id=8; -update noar ti set b0='HE5M00J' where id=8; -update noar tt set v0='HGIR661F6T' where id=8; -update noar ti set v0='HGIR661F6T' where id=8; -update noar tt set b1='0EN1AWPW3F' where id=8; -update noar ti set b1='0EN1AWPW3F' where id=8; -update noar tt set v0='ETKRBQBSS8VLY' where id=8; -update noar ti set v0='ETKRBQBSS8VLY' where id=8; -update noar tt set b2='BCY2NTOER4' where id=8; -update noar ti set b2='BCY2NTOER4' where id=8; -update noar tt set v0='L' where id=9; -update noar ti set v0='L' where id=9; -update noar tt set b0='5QGFUOYRCMVRNJ4FZU0FS4WL' where id=9; -update noar ti set b0='5QGFUOYRCMVRNJ4FZU0FS4WL' where id=9; -update noar tt set v0='9BTNPDXOT02K9CIOEB0YP' where id=9; -update noar ti set v0='9BTNPDXOT02K9CIOEB0YP' where id=9; -update noar tt set b1='TDZXB7BL' where id=9; -update noar ti set b1='TDZXB7BL' where id=9; -update noar tt set v0='KM3IGNRGMYJQ4BXWSX' where id=9; -update noar ti set v0='KM3IGNRGMYJQ4BXWSX' where id=9; -update noar tt set b2='X5' where id=9; -update noar ti set b2='X5' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 tinyblob not null, - b1 blob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='5TGH918FE' where id=1; -update noar ti set v0='5TGH918FE' where id=1; -update noar tt set b0='DYIIPEVFFMH8D' where id=1; -update noar ti set b0='DYIIPEVFFMH8D' where id=1; -update noar tt set v0='2KQEM9RUGP361U499NHZ97YAO82' where id=1; -update noar ti set v0='2KQEM9RUGP361U499NHZ97YAO82' where id=1; -update noar tt set b1='Y8FMSVM4G5F1' where id=1; -update noar ti set b1='Y8FMSVM4G5F1' where id=1; -update noar tt set v0='3UWXF3K5QB18G6S7Q' where id=1; -update noar ti set v0='3UWXF3K5QB18G6S7Q' where id=1; -update noar tt set b2='M6IOS8B0BAY68N378IJMKX97' where id=1; -update noar ti set b2='M6IOS8B0BAY68N378IJMKX97' where id=1; -update noar tt set v0='ZQ95I7HTDYANBB9CXHFF' where id=2; -update noar ti set v0='ZQ95I7HTDYANBB9CXHFF' where id=2; -update noar tt set b0='FVMGZSRKUOHV12ZVLJNGLNH9' where id=2; -update noar ti set b0='FVMGZSRKUOHV12ZVLJNGLNH9' where id=2; -update noar tt set v0='POVX7' where id=2; -update noar ti set v0='POVX7' where id=2; -update noar tt set b1='TKXC8GB3PE3R8ZA04FX02REK576T3' where id=2; -update noar ti set b1='TKXC8GB3PE3R8ZA04FX02REK576T3' where id=2; -update noar tt set v0='2HZYBF6ZXMQEJ3JE862ZF8N' where id=2; -update noar ti set v0='2HZYBF6ZXMQEJ3JE862ZF8N' where id=2; -update noar tt set b2='FNTMLAGSSJ5ZURXB7HC' where id=2; -update noar ti set b2='FNTMLAGSSJ5ZURXB7HC' where id=2; -update noar tt set v0='3A5TTVIP25IMXQ89TLDS5856E' where id=3; -update noar ti set v0='3A5TTVIP25IMXQ89TLDS5856E' where id=3; -update noar tt set b0='V7FDONMP2IK3JH7BUE2' where id=3; -update noar ti set b0='V7FDONMP2IK3JH7BUE2' where id=3; -update noar tt set v0='4OXKBWQV' where id=3; -update noar ti set v0='4OXKBWQV' where id=3; -update noar tt set b1='OIM47J4XC2' where id=3; -update noar ti set b1='OIM47J4XC2' where id=3; -update noar tt set v0='S83N9' where id=3; -update noar ti set v0='S83N9' where id=3; -update noar tt set b2='AD1GLPXFE' where id=3; -update noar ti set b2='AD1GLPXFE' where id=3; -update noar tt set v0='BYJC7F6ZO9K' where id=4; -update noar ti set v0='BYJC7F6ZO9K' where id=4; -update noar tt set b0='7FV8LMS' where id=4; -update noar ti set b0='7FV8LMS' where id=4; -update noar tt set v0='4ISJJJN30Z' where id=4; -update noar ti set v0='4ISJJJN30Z' where id=4; -update noar tt set b1='2M4XBSVF3GC9CE3' where id=4; -update noar ti set b1='2M4XBSVF3GC9CE3' where id=4; -update noar tt set v0='9VRXVQ' where id=4; -update noar ti set v0='9VRXVQ' where id=4; -update noar tt set b2='4ZM' where id=4; -update noar ti set b2='4ZM' where id=4; -update noar tt set v0='9KSNH' where id=5; -update noar ti set v0='9KSNH' where id=5; -update noar tt set b0='86CAAUHFFSWB' where id=5; -update noar ti set b0='86CAAUHFFSWB' where id=5; -update noar tt set v0='RQVYJ8' where id=5; -update noar ti set v0='RQVYJ8' where id=5; -update noar tt set b1='XZUVE1YYQD' where id=5; -update noar ti set b1='XZUVE1YYQD' where id=5; -update noar tt set v0='X8M1YTDQ' where id=5; -update noar ti set v0='X8M1YTDQ' where id=5; -update noar tt set b2='XYV8QJVY0XVP96OCSHVUY746BXAPN11X' where id=5; -update noar ti set b2='XYV8QJVY0XVP96OCSHVUY746BXAPN11X' where id=5; -update noar tt set v0='AZA822J5YQP0D2B1ICS0P0VD' where id=6; -update noar ti set v0='AZA822J5YQP0D2B1ICS0P0VD' where id=6; -update noar tt set b0='020FSPUSEDFFVZRCEKPMD9WIMXRB' where id=6; -update noar ti set b0='020FSPUSEDFFVZRCEKPMD9WIMXRB' where id=6; -update noar tt set v0='29OXZEY7OA67E16A75KQWDYOCQQ' where id=6; -update noar ti set v0='29OXZEY7OA67E16A75KQWDYOCQQ' where id=6; -update noar tt set b1='4TGU0HYQPEQ5CTJIEHK4RE47NW' where id=6; -update noar ti set b1='4TGU0HYQPEQ5CTJIEHK4RE47NW' where id=6; -update noar tt set v0='8DVXG7OBC9L47KV3B95WMDTL' where id=6; -update noar ti set v0='8DVXG7OBC9L47KV3B95WMDTL' where id=6; -update noar tt set b2='9LJNIZ3CP' where id=6; -update noar ti set b2='9LJNIZ3CP' where id=6; -update noar tt set v0='8N3WUNAJ75E7' where id=7; -update noar ti set v0='8N3WUNAJ75E7' where id=7; -update noar tt set b0='0AGM7NDNWHNB7I' where id=7; -update noar ti set b0='0AGM7NDNWHNB7I' where id=7; -update noar tt set v0='YW0J7WVF0Q3VS3NDB22EM7' where id=7; -update noar ti set v0='YW0J7WVF0Q3VS3NDB22EM7' where id=7; -update noar tt set b1='KMRHUSYPMJEQEMKODLQ8CX4JUTDOR' where id=7; -update noar ti set b1='KMRHUSYPMJEQEMKODLQ8CX4JUTDOR' where id=7; -update noar tt set v0='T1WB9G09BQ91LO2KU39249JHH8C8R2MA' where id=7; -update noar ti set v0='T1WB9G09BQ91LO2KU39249JHH8C8R2MA' where id=7; -update noar tt set b2='NBNHZHOTEX' where id=7; -update noar ti set b2='NBNHZHOTEX' where id=7; -update noar tt set v0='5HUMGT6' where id=8; -update noar ti set v0='5HUMGT6' where id=8; -update noar tt set b0='EY8B4R7UH3RQP2IW4BQE4K590DEGK' where id=8; -update noar ti set b0='EY8B4R7UH3RQP2IW4BQE4K590DEGK' where id=8; -update noar tt set v0='1PS25C28ZSSZTJPSEWX38' where id=8; -update noar ti set v0='1PS25C28ZSSZTJPSEWX38' where id=8; -update noar tt set b1='LWWE2QKT34' where id=8; -update noar ti set b1='LWWE2QKT34' where id=8; -update noar tt set v0='FGPM7' where id=8; -update noar ti set v0='FGPM7' where id=8; -update noar tt set b2='5C6SQ3EIW8XQ62A' where id=8; -update noar ti set b2='5C6SQ3EIW8XQ62A' where id=8; -update noar tt set v0='G9I651J3AVMD9PR' where id=9; -update noar ti set v0='G9I651J3AVMD9PR' where id=9; -update noar tt set b0='UGQ6X69UB03C' where id=9; -update noar ti set b0='UGQ6X69UB03C' where id=9; -update noar tt set v0='16VPMT57FBS8P0YY7CMJF' where id=9; -update noar ti set v0='16VPMT57FBS8P0YY7CMJF' where id=9; -update noar tt set b1='KE0DUX1VW' where id=9; -update noar ti set b1='KE0DUX1VW' where id=9; -update noar tt set v0='KG4SJ3YTPRPK6Z16KJL1HJ0VAS04' where id=9; -update noar ti set v0='KG4SJ3YTPRPK6Z16KJL1HJ0VAS04' where id=9; -update noar tt set b2='BMXO3' where id=9; -update noar ti set b2='BMXO3' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 tinyblob null, - b1 blob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='R2XGIXPZIHONX15Q8PJKQ5AB' where id=1; -update noar ti set v0='R2XGIXPZIHONX15Q8PJKQ5AB' where id=1; -update noar tt set b0='F0TQXVIXKJSWTGBM5C' where id=1; -update noar ti set b0='F0TQXVIXKJSWTGBM5C' where id=1; -update noar tt set v0='1H9C8BNKSC' where id=1; -update noar ti set v0='1H9C8BNKSC' where id=1; -update noar tt set b1='TCOKC9Y9P3K2KH4N281PGZZTGV' where id=1; -update noar ti set b1='TCOKC9Y9P3K2KH4N281PGZZTGV' where id=1; -update noar tt set v0='1ZF10NQBEY0U65G4J5L' where id=1; -update noar ti set v0='1ZF10NQBEY0U65G4J5L' where id=1; -update noar tt set b2='7WNH2OS2XPM' where id=1; -update noar ti set b2='7WNH2OS2XPM' where id=1; -update noar tt set v0='D3XMXM7' where id=2; -update noar ti set v0='D3XMXM7' where id=2; -update noar tt set b0='WTNB7Q5' where id=2; -update noar ti set b0='WTNB7Q5' where id=2; -update noar tt set v0='ABO5' where id=2; -update noar ti set v0='ABO5' where id=2; -update noar tt set b1='ZL3968VKQ8JBVKH8QDL8V0FOKVSELOJ5' where id=2; -update noar ti set b1='ZL3968VKQ8JBVKH8QDL8V0FOKVSELOJ5' where id=2; -update noar tt set v0='Z23CM0EBPMLR63WIKUEPTWZ' where id=2; -update noar ti set v0='Z23CM0EBPMLR63WIKUEPTWZ' where id=2; -update noar tt set b2='9XXLMOEPD38WOB63EXANEPML' where id=2; -update noar ti set b2='9XXLMOEPD38WOB63EXANEPML' where id=2; -update noar tt set v0='STH5L7D545HIDZ1R6XZ3NZMBNTHVY' where id=3; -update noar ti set v0='STH5L7D545HIDZ1R6XZ3NZMBNTHVY' where id=3; -update noar tt set b0='TYPUVLV97A2N9' where id=3; -update noar ti set b0='TYPUVLV97A2N9' where id=3; -update noar tt set v0='MHNKFVL009I' where id=3; -update noar ti set v0='MHNKFVL009I' where id=3; -update noar tt set b1='BD7NHBPCBPSMC6BW13' where id=3; -update noar ti set b1='BD7NHBPCBPSMC6BW13' where id=3; -update noar tt set v0='6FR3LX46IVEAK9Q5WKPMHCP0P5S7DN0' where id=3; -update noar ti set v0='6FR3LX46IVEAK9Q5WKPMHCP0P5S7DN0' where id=3; -update noar tt set b2='L0EKEC1' where id=3; -update noar ti set b2='L0EKEC1' where id=3; -update noar tt set v0='483MNNYHGG2XP2DBUNHWOX' where id=4; -update noar ti set v0='483MNNYHGG2XP2DBUNHWOX' where id=4; -update noar tt set b0='XX3V9UE05MFXAGE2PGYJG5DFSLEN' where id=4; -update noar ti set b0='XX3V9UE05MFXAGE2PGYJG5DFSLEN' where id=4; -update noar tt set v0='2SCLTP8I9R7NWHU0YEMUMWIT82K' where id=4; -update noar ti set v0='2SCLTP8I9R7NWHU0YEMUMWIT82K' where id=4; -update noar tt set b1='CQEW7T5A0TG5' where id=4; -update noar ti set b1='CQEW7T5A0TG5' where id=4; -update noar tt set v0='IH2BVFNGS77B1WVZUMNTE3L' where id=4; -update noar ti set v0='IH2BVFNGS77B1WVZUMNTE3L' where id=4; -update noar tt set b2='IGS2E16017LGTLUWQIH' where id=4; -update noar ti set b2='IGS2E16017LGTLUWQIH' where id=4; -update noar tt set v0='F3L7NXAHX' where id=5; -update noar ti set v0='F3L7NXAHX' where id=5; -update noar tt set b0='FO7VS07OYO1P' where id=5; -update noar ti set b0='FO7VS07OYO1P' where id=5; -update noar tt set v0='8Y1KGDOHP3' where id=5; -update noar ti set v0='8Y1KGDOHP3' where id=5; -update noar tt set b1='CPILFN' where id=5; -update noar ti set b1='CPILFN' where id=5; -update noar tt set v0='OYL9TR5VMR8' where id=5; -update noar ti set v0='OYL9TR5VMR8' where id=5; -update noar tt set b2='RDQYG9FLZTPW1' where id=5; -update noar ti set b2='RDQYG9FLZTPW1' where id=5; -update noar tt set v0='UB8Y8YBTYBGYZR7Y' where id=6; -update noar ti set v0='UB8Y8YBTYBGYZR7Y' where id=6; -update noar tt set b0='WXUL1PZN98MLRU' where id=6; -update noar ti set b0='WXUL1PZN98MLRU' where id=6; -update noar tt set v0='NUNHMV' where id=6; -update noar ti set v0='NUNHMV' where id=6; -update noar tt set b1='3DWJ25W' where id=6; -update noar ti set b1='3DWJ25W' where id=6; -update noar tt set v0='OOUYX4G3TE3OZ3K0E5PV5URFLCQ' where id=6; -update noar ti set v0='OOUYX4G3TE3OZ3K0E5PV5URFLCQ' where id=6; -update noar tt set b2='IPEJFX6ZL6KRLXPO51K0KJIZ502' where id=6; -update noar ti set b2='IPEJFX6ZL6KRLXPO51K0KJIZ502' where id=6; -update noar tt set v0='CNV' where id=7; -update noar ti set v0='CNV' where id=7; -update noar tt set b0='M0VSGIL' where id=7; -update noar ti set b0='M0VSGIL' where id=7; -update noar tt set v0='R92B3TNW3' where id=7; -update noar ti set v0='R92B3TNW3' where id=7; -update noar tt set b1='0OT4REN' where id=7; -update noar ti set b1='0OT4REN' where id=7; -update noar tt set v0='CQBG4KTR9YISQLQ0ZNUNV0CFTRTFZXL' where id=7; -update noar ti set v0='CQBG4KTR9YISQLQ0ZNUNV0CFTRTFZXL' where id=7; -update noar tt set b2='ZL95VY321YGZA40T10I2N1TCDLCKL02' where id=7; -update noar ti set b2='ZL95VY321YGZA40T10I2N1TCDLCKL02' where id=7; -update noar tt set v0='WNAH6J4ZQBV' where id=8; -update noar ti set v0='WNAH6J4ZQBV' where id=8; -update noar tt set b0='CMKK254WZ1Y' where id=8; -update noar ti set b0='CMKK254WZ1Y' where id=8; -update noar tt set v0='7ZVR0GI4NXFM' where id=8; -update noar ti set v0='7ZVR0GI4NXFM' where id=8; -update noar tt set b1='TJ3BJ' where id=8; -update noar ti set b1='TJ3BJ' where id=8; -update noar tt set v0='S7YOGPZCMR' where id=8; -update noar ti set v0='S7YOGPZCMR' where id=8; -update noar tt set b2='YJYVTDC7L' where id=8; -update noar ti set b2='YJYVTDC7L' where id=8; -update noar tt set v0='L87Q3SGF3' where id=9; -update noar ti set v0='L87Q3SGF3' where id=9; -update noar tt set b0='7J2R72I7OJ9KFX6MMG43XP0PKLDU8' where id=9; -update noar ti set b0='7J2R72I7OJ9KFX6MMG43XP0PKLDU8' where id=9; -update noar tt set v0='7UZSISTY3N6SVXUW2YMACI1OBS17' where id=9; -update noar ti set v0='7UZSISTY3N6SVXUW2YMACI1OBS17' where id=9; -update noar tt set b1='QUQEFBU0MLAR8O4SVRK7BN40RUYBC' where id=9; -update noar ti set b1='QUQEFBU0MLAR8O4SVRK7BN40RUYBC' where id=9; -update noar tt set v0='MF4TJ3FZLA4LF7L8KT3BI0' where id=9; -update noar ti set v0='MF4TJ3FZLA4LF7L8KT3BI0' where id=9; -update noar tt set b2='2QY18PV' where id=9; -update noar ti set b2='2QY18PV' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 tinyblob null, - b1 blob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='RDN1LDPADLY2W' where id=1; -update noar ti set v0='RDN1LDPADLY2W' where id=1; -update noar tt set b0='TN' where id=1; -update noar ti set b0='TN' where id=1; -update noar tt set v0='94JQFG63HHL79LOTLS5MSN' where id=1; -update noar ti set v0='94JQFG63HHL79LOTLS5MSN' where id=1; -update noar tt set b1='B' where id=1; -update noar ti set b1='B' where id=1; -update noar tt set v0='XFFOMZ0VK6' where id=1; -update noar ti set v0='XFFOMZ0VK6' where id=1; -update noar tt set b2='9H685MH3J3WCAMS1JDUWCT' where id=1; -update noar ti set b2='9H685MH3J3WCAMS1JDUWCT' where id=1; -update noar tt set v0='UBFNF46GSMK2' where id=2; -update noar ti set v0='UBFNF46GSMK2' where id=2; -update noar tt set b0='4A4HDRSW3YV9HHPSW2ROTRS52XT' where id=2; -update noar ti set b0='4A4HDRSW3YV9HHPSW2ROTRS52XT' where id=2; -update noar tt set v0='P486AR0LXI51NMOPWQX' where id=2; -update noar ti set v0='P486AR0LXI51NMOPWQX' where id=2; -update noar tt set b1='QZROKQ6WKTJUJOD51RDBIKT98AQ' where id=2; -update noar ti set b1='QZROKQ6WKTJUJOD51RDBIKT98AQ' where id=2; -update noar tt set v0='JCCD' where id=2; -update noar ti set v0='JCCD' where id=2; -update noar tt set b2='YYTM4Z' where id=2; -update noar ti set b2='YYTM4Z' where id=2; -update noar tt set v0='GRMFU6ZODW6D92DQ' where id=3; -update noar ti set v0='GRMFU6ZODW6D92DQ' where id=3; -update noar tt set b0='5EIR9U2MP6B5VYRET0ERFF1VTQC6G' where id=3; -update noar ti set b0='5EIR9U2MP6B5VYRET0ERFF1VTQC6G' where id=3; -update noar tt set v0='U323Y8P41QIJNEB' where id=3; -update noar ti set v0='U323Y8P41QIJNEB' where id=3; -update noar tt set b1='ZR3COMRCTO1AFD411EWU5050ZFFV0' where id=3; -update noar ti set b1='ZR3COMRCTO1AFD411EWU5050ZFFV0' where id=3; -update noar tt set v0='RCK65BO7UK2STYYTEM1DFG8PQ' where id=3; -update noar ti set v0='RCK65BO7UK2STYYTEM1DFG8PQ' where id=3; -update noar tt set b2='OE5Q3IJ5SHSI5LJY09KRRZX2ZM9975' where id=3; -update noar ti set b2='OE5Q3IJ5SHSI5LJY09KRRZX2ZM9975' where id=3; -update noar tt set v0='QXS7A7MDO2X' where id=4; -update noar ti set v0='QXS7A7MDO2X' where id=4; -update noar tt set b0='OSHMCG8IE47QMARYCUOVWGT8RBF' where id=4; -update noar ti set b0='OSHMCG8IE47QMARYCUOVWGT8RBF' where id=4; -update noar tt set v0='KYXCP05FECRY2UQW' where id=4; -update noar ti set v0='KYXCP05FECRY2UQW' where id=4; -update noar tt set b1='T3030EJLR0WJ77H0TXVDJVSWO91R0' where id=4; -update noar ti set b1='T3030EJLR0WJ77H0TXVDJVSWO91R0' where id=4; -update noar tt set v0='T2RJGS8GKFFES7KZNO' where id=4; -update noar ti set v0='T2RJGS8GKFFES7KZNO' where id=4; -update noar tt set b2='P1GZFDM' where id=4; -update noar ti set b2='P1GZFDM' where id=4; -update noar tt set v0='TA4K63DFCOWS45TQCS3WXQ0RHHC' where id=5; -update noar ti set v0='TA4K63DFCOWS45TQCS3WXQ0RHHC' where id=5; -update noar tt set b0='TTA2H9Y5045BF90D8M0NCNDB4S' where id=5; -update noar ti set b0='TTA2H9Y5045BF90D8M0NCNDB4S' where id=5; -update noar tt set v0='CVB1UI27YM0W2VO8BH6AOI' where id=5; -update noar ti set v0='CVB1UI27YM0W2VO8BH6AOI' where id=5; -update noar tt set b1='9ZSAE4E7RW955E62RJVD6E0HPZL3' where id=5; -update noar ti set b1='9ZSAE4E7RW955E62RJVD6E0HPZL3' where id=5; -update noar tt set v0='G3IXYHV3QJF2S5M3NAO2DFRAO0Y0IDWS' where id=5; -update noar ti set v0='G3IXYHV3QJF2S5M3NAO2DFRAO0Y0IDWS' where id=5; -update noar tt set b2='UUPKWLRM758VX55ECP' where id=5; -update noar ti set b2='UUPKWLRM758VX55ECP' where id=5; -update noar tt set v0='J52OAHYW3XA' where id=6; -update noar ti set v0='J52OAHYW3XA' where id=6; -update noar tt set b0='V5L4RCKT5L8UG8OMNNSL0XD55ZIHXLL' where id=6; -update noar ti set b0='V5L4RCKT5L8UG8OMNNSL0XD55ZIHXLL' where id=6; -update noar tt set v0='MGHXMAGPGHBJRMD62IFVL8SD' where id=6; -update noar ti set v0='MGHXMAGPGHBJRMD62IFVL8SD' where id=6; -update noar tt set b1='8NNHVX5A8' where id=6; -update noar ti set b1='8NNHVX5A8' where id=6; -update noar tt set v0='W4TO2I' where id=6; -update noar ti set v0='W4TO2I' where id=6; -update noar tt set b2='LG8XZRO0CCCYF7GVLBK81' where id=6; -update noar ti set b2='LG8XZRO0CCCYF7GVLBK81' where id=6; -update noar tt set v0='D2R5VD6P' where id=7; -update noar ti set v0='D2R5VD6P' where id=7; -update noar tt set b0='GXN1XNP38EWS1T0' where id=7; -update noar ti set b0='GXN1XNP38EWS1T0' where id=7; -update noar tt set v0='OW1YWOP7E2ATOU07TKJJ5BX2E9P55W' where id=7; -update noar ti set v0='OW1YWOP7E2ATOU07TKJJ5BX2E9P55W' where id=7; -update noar tt set b1='EZUTM6BMDS15LXBANEBEG' where id=7; -update noar ti set b1='EZUTM6BMDS15LXBANEBEG' where id=7; -update noar tt set v0='1OD0FGWZM0398YO7261QN8HYK4IVBFY' where id=7; -update noar ti set v0='1OD0FGWZM0398YO7261QN8HYK4IVBFY' where id=7; -update noar tt set b2='9LB1QPXSBRBJBJSIUC4H' where id=7; -update noar ti set b2='9LB1QPXSBRBJBJSIUC4H' where id=7; -update noar tt set v0='YUSN0UNMQ' where id=8; -update noar ti set v0='YUSN0UNMQ' where id=8; -update noar tt set b0='C636LCYT3C7EW9JY1FERJWAZEJXQR3' where id=8; -update noar ti set b0='C636LCYT3C7EW9JY1FERJWAZEJXQR3' where id=8; -update noar tt set v0='QK8FQP857BPQQAP' where id=8; -update noar ti set v0='QK8FQP857BPQQAP' where id=8; -update noar tt set b1='X2R3KPK3RTOT1MQ4G0' where id=8; -update noar ti set b1='X2R3KPK3RTOT1MQ4G0' where id=8; -update noar tt set v0='V' where id=8; -update noar ti set v0='V' where id=8; -update noar tt set b2='9M0WH6C' where id=8; -update noar ti set b2='9M0WH6C' where id=8; -update noar tt set v0='JHY53VRPGYJQRISY4JFSG6UMUUL' where id=9; -update noar ti set v0='JHY53VRPGYJQRISY4JFSG6UMUUL' where id=9; -update noar tt set b0='1R9G1GA2REZXA' where id=9; -update noar ti set b0='1R9G1GA2REZXA' where id=9; -update noar tt set v0='X4E8R20G5L5KV' where id=9; -update noar ti set v0='X4E8R20G5L5KV' where id=9; -update noar tt set b1='EZMHK5ZWEJQUBCD6TY0TUZKJJQKVHYH' where id=9; -update noar ti set b1='EZMHK5ZWEJQUBCD6TY0TUZKJJQKVHYH' where id=9; -update noar tt set v0='A' where id=9; -update noar ti set v0='A' where id=9; -update noar tt set b2='DLR4SONDNKNBV' where id=9; -update noar ti set b2='DLR4SONDNKNBV' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 tinyblob not null, - b1 blob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='ZZ8D76B8VLFFBMTF8W7RURN7J06NKQL' where id=1; -update noar ti set v0='ZZ8D76B8VLFFBMTF8W7RURN7J06NKQL' where id=1; -update noar tt set b0='6J0OJOB0K2RK9UCXTP' where id=1; -update noar ti set b0='6J0OJOB0K2RK9UCXTP' where id=1; -update noar tt set v0='Y198CUIDA92LXYR4' where id=1; -update noar ti set v0='Y198CUIDA92LXYR4' where id=1; -update noar tt set b1='RPI1K02DQA4QVWMWVTQMP3ZT3K6VW7O' where id=1; -update noar ti set b1='RPI1K02DQA4QVWMWVTQMP3ZT3K6VW7O' where id=1; -update noar tt set v0='4E' where id=1; -update noar ti set v0='4E' where id=1; -update noar tt set b2='BC5DQ2YNCXWTH9P70W2E4PA0WR2LR' where id=1; -update noar ti set b2='BC5DQ2YNCXWTH9P70W2E4PA0WR2LR' where id=1; -update noar tt set v0='H5AODKXM' where id=2; -update noar ti set v0='H5AODKXM' where id=2; -update noar tt set b0='9237HY6G145L' where id=2; -update noar ti set b0='9237HY6G145L' where id=2; -update noar tt set v0='BNIIJO5AR29BY9L3CPGLP2' where id=2; -update noar ti set v0='BNIIJO5AR29BY9L3CPGLP2' where id=2; -update noar tt set b1='Z7K0SRRD06BA' where id=2; -update noar ti set b1='Z7K0SRRD06BA' where id=2; -update noar tt set v0='47858' where id=2; -update noar ti set v0='47858' where id=2; -update noar tt set b2='CBGVTSW8EPR7JOEZF4GOGL' where id=2; -update noar ti set b2='CBGVTSW8EPR7JOEZF4GOGL' where id=2; -update noar tt set v0='FWYWUGEEMCDQT1FQAJF2I0CTJ' where id=3; -update noar ti set v0='FWYWUGEEMCDQT1FQAJF2I0CTJ' where id=3; -update noar tt set b0='RHKKFGGD4BL' where id=3; -update noar ti set b0='RHKKFGGD4BL' where id=3; -update noar tt set v0='JGP3B3NXXYEDURZQMXA4OOK' where id=3; -update noar ti set v0='JGP3B3NXXYEDURZQMXA4OOK' where id=3; -update noar tt set b1='ZQ9MCC2X6DUAT' where id=3; -update noar ti set b1='ZQ9MCC2X6DUAT' where id=3; -update noar tt set v0='AGKOH223XDS2WO' where id=3; -update noar ti set v0='AGKOH223XDS2WO' where id=3; -update noar tt set b2='PRHBD2TULPRGZ4VPEM941UDMQOQYOMY4' where id=3; -update noar ti set b2='PRHBD2TULPRGZ4VPEM941UDMQOQYOMY4' where id=3; -update noar tt set v0='HXGZ688SML7MB51N7PU1QS1CKIVGHU70' where id=4; -update noar ti set v0='HXGZ688SML7MB51N7PU1QS1CKIVGHU70' where id=4; -update noar tt set b0='XOI6VW96LHDK9YMY5UKLY4729' where id=4; -update noar ti set b0='XOI6VW96LHDK9YMY5UKLY4729' where id=4; -update noar tt set v0='XU78695F80KHTO7TEJ8B' where id=4; -update noar ti set v0='XU78695F80KHTO7TEJ8B' where id=4; -update noar tt set b1='VAXTK0LR69LIFBR1' where id=4; -update noar ti set b1='VAXTK0LR69LIFBR1' where id=4; -update noar tt set v0='Q' where id=4; -update noar ti set v0='Q' where id=4; -update noar tt set b2='E7YS30R0KZSWM37CQD0JLPASF6SUMO' where id=4; -update noar ti set b2='E7YS30R0KZSWM37CQD0JLPASF6SUMO' where id=4; -update noar tt set v0='NKTZ' where id=5; -update noar ti set v0='NKTZ' where id=5; -update noar tt set b0='GGUV67DID6TCD4EYR58KG4Q8I7J' where id=5; -update noar ti set b0='GGUV67DID6TCD4EYR58KG4Q8I7J' where id=5; -update noar tt set v0='P7W86CHFJ6HHM6WPB42J5C1E' where id=5; -update noar ti set v0='P7W86CHFJ6HHM6WPB42J5C1E' where id=5; -update noar tt set b1='J0P8DUG3Q06X5JXJ' where id=5; -update noar ti set b1='J0P8DUG3Q06X5JXJ' where id=5; -update noar tt set v0='5T0G486U3P2MGAGMR7WROWJSJ18T1OU4' where id=5; -update noar ti set v0='5T0G486U3P2MGAGMR7WROWJSJ18T1OU4' where id=5; -update noar tt set b2='KWCM' where id=5; -update noar ti set b2='KWCM' where id=5; -update noar tt set v0='S2L6RJGZG837U' where id=6; -update noar ti set v0='S2L6RJGZG837U' where id=6; -update noar tt set b0='9D9FMUS3UOVNAJUYEGKJBOVRLNRDC05D' where id=6; -update noar ti set b0='9D9FMUS3UOVNAJUYEGKJBOVRLNRDC05D' where id=6; -update noar tt set v0='6ZZHECEI52F313T2' where id=6; -update noar ti set v0='6ZZHECEI52F313T2' where id=6; -update noar tt set b1='5GMOCX7SUU' where id=6; -update noar ti set b1='5GMOCX7SUU' where id=6; -update noar tt set v0='FJ8DGZGCPBX4Q01RD2BDA' where id=6; -update noar ti set v0='FJ8DGZGCPBX4Q01RD2BDA' where id=6; -update noar tt set b2='LK96K0V9QNJS1JNSW' where id=6; -update noar ti set b2='LK96K0V9QNJS1JNSW' where id=6; -update noar tt set v0='CQ1WIPZISC188YMKA' where id=7; -update noar ti set v0='CQ1WIPZISC188YMKA' where id=7; -update noar tt set b0='AKBTBDCEVWW7' where id=7; -update noar ti set b0='AKBTBDCEVWW7' where id=7; -update noar tt set v0='511VERZBD22JZ6ETJJ0UXCZB2249TZ9' where id=7; -update noar ti set v0='511VERZBD22JZ6ETJJ0UXCZB2249TZ9' where id=7; -update noar tt set b1='DJJ2HODYS' where id=7; -update noar ti set b1='DJJ2HODYS' where id=7; -update noar tt set v0='JJUVP90KR9FD6' where id=7; -update noar ti set v0='JJUVP90KR9FD6' where id=7; -update noar tt set b2='LBMOOPR8332YZ8SGUQ884YS3P6MVD' where id=7; -update noar ti set b2='LBMOOPR8332YZ8SGUQ884YS3P6MVD' where id=7; -update noar tt set v0='ESN6E0' where id=8; -update noar ti set v0='ESN6E0' where id=8; -update noar tt set b0='BGG8Z' where id=8; -update noar ti set b0='BGG8Z' where id=8; -update noar tt set v0='R3XFXIO7J3VR' where id=8; -update noar ti set v0='R3XFXIO7J3VR' where id=8; -update noar tt set b1='P7IRB' where id=8; -update noar ti set b1='P7IRB' where id=8; -update noar tt set v0='F0R33BXEC87EVTYIZF' where id=8; -update noar ti set v0='F0R33BXEC87EVTYIZF' where id=8; -update noar tt set b2='OEXVB93OKIAX6HCC7K9XH3M9LJL' where id=8; -update noar ti set b2='OEXVB93OKIAX6HCC7K9XH3M9LJL' where id=8; -update noar tt set v0='INLH6' where id=9; -update noar ti set v0='INLH6' where id=9; -update noar tt set b0='TY' where id=9; -update noar ti set b0='TY' where id=9; -update noar tt set v0='G79ENEPDWJTIT57CKVLI' where id=9; -update noar ti set v0='G79ENEPDWJTIT57CKVLI' where id=9; -update noar tt set b1='1OAP4I2VXAVDD2J2SSXE1MKIRPD50AOO' where id=9; -update noar ti set b1='1OAP4I2VXAVDD2J2SSXE1MKIRPD50AOO' where id=9; -update noar tt set v0='TSEM89X' where id=9; -update noar ti set v0='TSEM89X' where id=9; -update noar tt set b2='NUAP4MRQOP0Z46Y0' where id=9; -update noar ti set b2='NUAP4MRQOP0Z46Y0' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 tinyblob not null, - b1 blob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='2CZ5RH5VV24WM3MWX9E68DSVG10W7Q0' where id=1; -update noar ti set v0='2CZ5RH5VV24WM3MWX9E68DSVG10W7Q0' where id=1; -update noar tt set b0='X1FV2B' where id=1; -update noar ti set b0='X1FV2B' where id=1; -update noar tt set v0='4OL6' where id=1; -update noar ti set v0='4OL6' where id=1; -update noar tt set b1='N9HG8GGYQ7GE0HT29YN0CGFNAXY9' where id=1; -update noar ti set b1='N9HG8GGYQ7GE0HT29YN0CGFNAXY9' where id=1; -update noar tt set v0='K2QX8ZDC5YWU' where id=1; -update noar ti set v0='K2QX8ZDC5YWU' where id=1; -update noar tt set b2='1Y6CGI5ZU6QNVWT' where id=1; -update noar ti set b2='1Y6CGI5ZU6QNVWT' where id=1; -update noar tt set v0='L8NG9D7IOKGBF8WVL0FNCAL9IJOZTNC' where id=2; -update noar ti set v0='L8NG9D7IOKGBF8WVL0FNCAL9IJOZTNC' where id=2; -update noar tt set b0='66Y' where id=2; -update noar ti set b0='66Y' where id=2; -update noar tt set v0='DS2VN4WL0M35A3UUZIBL0X3' where id=2; -update noar ti set v0='DS2VN4WL0M35A3UUZIBL0X3' where id=2; -update noar tt set b1='ZA6VGOH3ANO1849RVMT' where id=2; -update noar ti set b1='ZA6VGOH3ANO1849RVMT' where id=2; -update noar tt set v0='YOTY' where id=2; -update noar ti set v0='YOTY' where id=2; -update noar tt set b2='264E7IB' where id=2; -update noar ti set b2='264E7IB' where id=2; -update noar tt set v0='P' where id=3; -update noar ti set v0='P' where id=3; -update noar tt set b0='BZ' where id=3; -update noar ti set b0='BZ' where id=3; -update noar tt set v0='HEW' where id=3; -update noar ti set v0='HEW' where id=3; -update noar tt set b1='GFM4WVNW8IB68MLE' where id=3; -update noar ti set b1='GFM4WVNW8IB68MLE' where id=3; -update noar tt set v0='5IVJ52WKG7RZ1KTOQYVJTZFBJ3AQVO' where id=3; -update noar ti set v0='5IVJ52WKG7RZ1KTOQYVJTZFBJ3AQVO' where id=3; -update noar tt set b2='0H6QSY6AAC35E' where id=3; -update noar ti set b2='0H6QSY6AAC35E' where id=3; -update noar tt set v0='LRN90EE76VR6A8VUX5JHYRE0' where id=4; -update noar ti set v0='LRN90EE76VR6A8VUX5JHYRE0' where id=4; -update noar tt set b0='K85C7K2DYMTTU5K5JMA' where id=4; -update noar ti set b0='K85C7K2DYMTTU5K5JMA' where id=4; -update noar tt set v0='QP7TCXMYEGH7NIUKNYA8IDIS8ZV0' where id=4; -update noar ti set v0='QP7TCXMYEGH7NIUKNYA8IDIS8ZV0' where id=4; -update noar tt set b1='ECP5SYHQHFMO5' where id=4; -update noar ti set b1='ECP5SYHQHFMO5' where id=4; -update noar tt set v0='BGJCFHKAIY2OU7SWV' where id=4; -update noar ti set v0='BGJCFHKAIY2OU7SWV' where id=4; -update noar tt set b2='W40RECBSDLYEQ499' where id=4; -update noar ti set b2='W40RECBSDLYEQ499' where id=4; -update noar tt set v0='WYC3FTPGBASMDRJCSWQGSA4ETQ' where id=5; -update noar ti set v0='WYC3FTPGBASMDRJCSWQGSA4ETQ' where id=5; -update noar tt set b0='EKWRHT2' where id=5; -update noar ti set b0='EKWRHT2' where id=5; -update noar tt set v0='VH6JW0HNVEZJTLHPEISH6' where id=5; -update noar ti set v0='VH6JW0HNVEZJTLHPEISH6' where id=5; -update noar tt set b1='0C78Y1KXW2DQHUFGKI50CH5GFA2152U' where id=5; -update noar ti set b1='0C78Y1KXW2DQHUFGKI50CH5GFA2152U' where id=5; -update noar tt set v0='N88UGE0' where id=5; -update noar ti set v0='N88UGE0' where id=5; -update noar tt set b2='JAYD1RTVX6ENRE2HKEGEMK9MJ3LT' where id=5; -update noar ti set b2='JAYD1RTVX6ENRE2HKEGEMK9MJ3LT' where id=5; -update noar tt set v0='1DKTMGV8ZIJFY70' where id=6; -update noar ti set v0='1DKTMGV8ZIJFY70' where id=6; -update noar tt set b0='BC07R3' where id=6; -update noar ti set b0='BC07R3' where id=6; -update noar tt set v0='NS09OAMX96XDSJTCXJO29PN4JO0' where id=6; -update noar ti set v0='NS09OAMX96XDSJTCXJO29PN4JO0' where id=6; -update noar tt set b1='WCP5SITMIL29E69EWSAEI3B' where id=6; -update noar ti set b1='WCP5SITMIL29E69EWSAEI3B' where id=6; -update noar tt set v0='IHK7WN8KFMK756IKZLKEP0' where id=6; -update noar ti set v0='IHK7WN8KFMK756IKZLKEP0' where id=6; -update noar tt set b2='WQWBIX31' where id=6; -update noar ti set b2='WQWBIX31' where id=6; -update noar tt set v0='CEDR9V9LA531JSHH6XP0PVD' where id=7; -update noar ti set v0='CEDR9V9LA531JSHH6XP0PVD' where id=7; -update noar tt set b0='CRRISU2K9' where id=7; -update noar ti set b0='CRRISU2K9' where id=7; -update noar tt set v0='4' where id=7; -update noar ti set v0='4' where id=7; -update noar tt set b1='OX' where id=7; -update noar ti set b1='OX' where id=7; -update noar tt set v0='WOS8D9XMOAYXXQKLKZS8U35XUF7X' where id=7; -update noar ti set v0='WOS8D9XMOAYXXQKLKZS8U35XUF7X' where id=7; -update noar tt set b2='PMC2GMSSNRCAK8CS846DC2' where id=7; -update noar ti set b2='PMC2GMSSNRCAK8CS846DC2' where id=7; -update noar tt set v0='41GT' where id=8; -update noar ti set v0='41GT' where id=8; -update noar tt set b0='LA6EA7OJLYS2TEZGJLKVXM' where id=8; -update noar ti set b0='LA6EA7OJLYS2TEZGJLKVXM' where id=8; -update noar tt set v0='T11M0VBTGOTC7' where id=8; -update noar ti set v0='T11M0VBTGOTC7' where id=8; -update noar tt set b1='65YZD8QBVH8NYKLCJ0CSX452B1RANUY7' where id=8; -update noar ti set b1='65YZD8QBVH8NYKLCJ0CSX452B1RANUY7' where id=8; -update noar tt set v0='2FZDE35RKUV3R7BDMHAE' where id=8; -update noar ti set v0='2FZDE35RKUV3R7BDMHAE' where id=8; -update noar tt set b2='F1C9OR2HWIZ1LZVS57B' where id=8; -update noar ti set b2='F1C9OR2HWIZ1LZVS57B' where id=8; -update noar tt set v0='SDMYKH4BPLWPWMWLO8RKXRZYI' where id=9; -update noar ti set v0='SDMYKH4BPLWPWMWLO8RKXRZYI' where id=9; -update noar tt set b0='24PNSZGAS8SXGXTP' where id=9; -update noar ti set b0='24PNSZGAS8SXGXTP' where id=9; -update noar tt set v0='IJIYFZX0QA49' where id=9; -update noar ti set v0='IJIYFZX0QA49' where id=9; -update noar tt set b1='LE12M0LRSYF4I8NN4OZ0EPJBPXVJJF' where id=9; -update noar ti set b1='LE12M0LRSYF4I8NN4OZ0EPJBPXVJJF' where id=9; -update noar tt set v0='LMKGF2YF' where id=9; -update noar ti set v0='LMKGF2YF' where id=9; -update noar tt set b2='DB63DA0HYCQCEAQ7C2BQO29' where id=9; -update noar ti set b2='DB63DA0HYCQCEAQ7C2BQO29' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 tinyblob null, - b1 blob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='EVAQN12PBZJE1JVM04C05IIL6GFWS' where id=1; -update noar ti set v0='EVAQN12PBZJE1JVM04C05IIL6GFWS' where id=1; -update noar tt set b0='3IZ5JC5VC32MCUHKMFU6KF46IANYZ' where id=1; -update noar ti set b0='3IZ5JC5VC32MCUHKMFU6KF46IANYZ' where id=1; -update noar tt set v0='EA01' where id=1; -update noar ti set v0='EA01' where id=1; -update noar tt set b1='5LGXTRUYYSQGN8BI1EPQ' where id=1; -update noar ti set b1='5LGXTRUYYSQGN8BI1EPQ' where id=1; -update noar tt set v0='BMWJ2ICLHBUBXQMDFUJHTDZLMSRP' where id=1; -update noar ti set v0='BMWJ2ICLHBUBXQMDFUJHTDZLMSRP' where id=1; -update noar tt set b2='J2JQI8RJ8IOTAZHTND6Y29G2SGJJSXF9' where id=1; -update noar ti set b2='J2JQI8RJ8IOTAZHTND6Y29G2SGJJSXF9' where id=1; -update noar tt set v0='SRAYZ5RBY4SFKH4AMSXRS25J1VMG' where id=2; -update noar ti set v0='SRAYZ5RBY4SFKH4AMSXRS25J1VMG' where id=2; -update noar tt set b0='D94NCPFQQQCPIE1TE2G' where id=2; -update noar ti set b0='D94NCPFQQQCPIE1TE2G' where id=2; -update noar tt set v0='D' where id=2; -update noar ti set v0='D' where id=2; -update noar tt set b1='M6FOQ5IMOH' where id=2; -update noar ti set b1='M6FOQ5IMOH' where id=2; -update noar tt set v0='CV' where id=2; -update noar ti set v0='CV' where id=2; -update noar tt set b2='5GSOB0UCF4XG' where id=2; -update noar ti set b2='5GSOB0UCF4XG' where id=2; -update noar tt set v0='TNRA2XXPBI' where id=3; -update noar ti set v0='TNRA2XXPBI' where id=3; -update noar tt set b0='1LS63JCEJBTLL4KGCQ8N3ZYS2WLN' where id=3; -update noar ti set b0='1LS63JCEJBTLL4KGCQ8N3ZYS2WLN' where id=3; -update noar tt set v0='HVEI2' where id=3; -update noar ti set v0='HVEI2' where id=3; -update noar tt set b1='G20MDR85O0ACKEZT' where id=3; -update noar ti set b1='G20MDR85O0ACKEZT' where id=3; -update noar tt set v0='P7328SD5HM794AMY' where id=3; -update noar ti set v0='P7328SD5HM794AMY' where id=3; -update noar tt set b2='2ROQFG68JQYLCBVCTK9OFP8G' where id=3; -update noar ti set b2='2ROQFG68JQYLCBVCTK9OFP8G' where id=3; -update noar tt set v0='WN3AIRV5ITL' where id=4; -update noar ti set v0='WN3AIRV5ITL' where id=4; -update noar tt set b0='CSC7HBU' where id=4; -update noar ti set b0='CSC7HBU' where id=4; -update noar tt set v0='8L7F7BLUDIP0UXAE2FAMHCVG0BVTFAU8' where id=4; -update noar ti set v0='8L7F7BLUDIP0UXAE2FAMHCVG0BVTFAU8' where id=4; -update noar tt set b1='TS2K1JLQKU7RS7ULFV' where id=4; -update noar ti set b1='TS2K1JLQKU7RS7ULFV' where id=4; -update noar tt set v0='RYUB49CTP9' where id=4; -update noar ti set v0='RYUB49CTP9' where id=4; -update noar tt set b2='7RWPY9O20MYJJXKAYO4XYT0E' where id=4; -update noar ti set b2='7RWPY9O20MYJJXKAYO4XYT0E' where id=4; -update noar tt set v0='C2W4L6F7OLPHEOYBRX89TANBTQD' where id=5; -update noar ti set v0='C2W4L6F7OLPHEOYBRX89TANBTQD' where id=5; -update noar tt set b0='0G6I1NQIOBE' where id=5; -update noar ti set b0='0G6I1NQIOBE' where id=5; -update noar tt set v0='9BMGYUAOBGSSACLSXXXP' where id=5; -update noar ti set v0='9BMGYUAOBGSSACLSXXXP' where id=5; -update noar tt set b1='5AKX5' where id=5; -update noar ti set b1='5AKX5' where id=5; -update noar tt set v0='BMA7HYV' where id=5; -update noar ti set v0='BMA7HYV' where id=5; -update noar tt set b2='TUGY5II9QVVW77L6QZ799NP5TMH' where id=5; -update noar ti set b2='TUGY5II9QVVW77L6QZ799NP5TMH' where id=5; -update noar tt set v0='J2OSPZWSTVY' where id=6; -update noar ti set v0='J2OSPZWSTVY' where id=6; -update noar tt set b0='XW2XUK1JSAI' where id=6; -update noar ti set b0='XW2XUK1JSAI' where id=6; -update noar tt set v0='13B5S7628U3H660R' where id=6; -update noar ti set v0='13B5S7628U3H660R' where id=6; -update noar tt set b1='CL9YZ5499ZWEB6V95LEYCZ8XV' where id=6; -update noar ti set b1='CL9YZ5499ZWEB6V95LEYCZ8XV' where id=6; -update noar tt set v0='8HP01RHF77L7PCMFSS2QFZW3K' where id=6; -update noar ti set v0='8HP01RHF77L7PCMFSS2QFZW3K' where id=6; -update noar tt set b2='L55PAF7DAYW3L' where id=6; -update noar ti set b2='L55PAF7DAYW3L' where id=6; -update noar tt set v0='QRRBU' where id=7; -update noar ti set v0='QRRBU' where id=7; -update noar tt set b0='W71' where id=7; -update noar ti set b0='W71' where id=7; -update noar tt set v0='9V7UOY' where id=7; -update noar ti set v0='9V7UOY' where id=7; -update noar tt set b1='W3882CQ3X3UJN150MQD1M' where id=7; -update noar ti set b1='W3882CQ3X3UJN150MQD1M' where id=7; -update noar tt set v0='UYXHJY2TNCSWXPGGDF8RBGVQ4LM' where id=7; -update noar ti set v0='UYXHJY2TNCSWXPGGDF8RBGVQ4LM' where id=7; -update noar tt set b2='BE9TGMD1B6E9B' where id=7; -update noar ti set b2='BE9TGMD1B6E9B' where id=7; -update noar tt set v0='WONPYSTO5' where id=8; -update noar ti set v0='WONPYSTO5' where id=8; -update noar tt set b0='SD24QLJK4BR1SM3GT2JKLQGLQ65' where id=8; -update noar ti set b0='SD24QLJK4BR1SM3GT2JKLQGLQ65' where id=8; -update noar tt set v0='Z' where id=8; -update noar ti set v0='Z' where id=8; -update noar tt set b1='UW888Q6J' where id=8; -update noar ti set b1='UW888Q6J' where id=8; -update noar tt set v0='0VP7N7N' where id=8; -update noar ti set v0='0VP7N7N' where id=8; -update noar tt set b2='VQ' where id=8; -update noar ti set b2='VQ' where id=8; -update noar tt set v0='M9' where id=9; -update noar ti set v0='M9' where id=9; -update noar tt set b0='JTBH6ZYBQ0K14DUB8ATRH' where id=9; -update noar ti set b0='JTBH6ZYBQ0K14DUB8ATRH' where id=9; -update noar tt set v0='DKWX95RZVA7NMBCAM2SRLLWBA2V' where id=9; -update noar ti set v0='DKWX95RZVA7NMBCAM2SRLLWBA2V' where id=9; -update noar tt set b1='4VT00IPDUKI3' where id=9; -update noar ti set b1='4VT00IPDUKI3' where id=9; -update noar tt set v0='JUDG2P0Q8H15J4FGVYW1KFVEG' where id=9; -update noar ti set v0='JUDG2P0Q8H15J4FGVYW1KFVEG' where id=9; -update noar tt set b2='354467' where id=9; -update noar ti set b2='354467' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 tinyblob null, - b1 blob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='BYET' where id=1; -update noar ti set v0='BYET' where id=1; -update noar tt set b0='PXRAQCV856SNE' where id=1; -update noar ti set b0='PXRAQCV856SNE' where id=1; -update noar tt set v0='JWK5RCYMK800H40OUF6G92KG2OJ1LG' where id=1; -update noar ti set v0='JWK5RCYMK800H40OUF6G92KG2OJ1LG' where id=1; -update noar tt set b1='JX8LZI7E9KZN' where id=1; -update noar ti set b1='JX8LZI7E9KZN' where id=1; -update noar tt set v0='P9QJFO5' where id=1; -update noar ti set v0='P9QJFO5' where id=1; -update noar tt set b2='8SKV8S9Z8N0HDDNYQNB3GUF' where id=1; -update noar ti set b2='8SKV8S9Z8N0HDDNYQNB3GUF' where id=1; -update noar tt set v0='KYVSRLP6037JRMDAGQBJMI2' where id=2; -update noar ti set v0='KYVSRLP6037JRMDAGQBJMI2' where id=2; -update noar tt set b0='WATMSCTME30ZTLNGN42JJI2' where id=2; -update noar ti set b0='WATMSCTME30ZTLNGN42JJI2' where id=2; -update noar tt set v0='X18BL7PGFQ1TZHYETTDHB5UVWC8' where id=2; -update noar ti set v0='X18BL7PGFQ1TZHYETTDHB5UVWC8' where id=2; -update noar tt set b1='W2OALQJKHGAFCNW7GVE' where id=2; -update noar ti set b1='W2OALQJKHGAFCNW7GVE' where id=2; -update noar tt set v0='BP4AY2LL6X559KUL9T1OC2VA3XP' where id=2; -update noar ti set v0='BP4AY2LL6X559KUL9T1OC2VA3XP' where id=2; -update noar tt set b2='ZW8EMX88VZJD6EYPH8I92NKEHMNT5OR' where id=2; -update noar ti set b2='ZW8EMX88VZJD6EYPH8I92NKEHMNT5OR' where id=2; -update noar tt set v0='VD' where id=3; -update noar ti set v0='VD' where id=3; -update noar tt set b0='7E4YU3CTFDDGVPGPK68QFEKX2SQ' where id=3; -update noar ti set b0='7E4YU3CTFDDGVPGPK68QFEKX2SQ' where id=3; -update noar tt set v0='3BJ6ISBOADND' where id=3; -update noar ti set v0='3BJ6ISBOADND' where id=3; -update noar tt set b1='TCTWC8UNPER1D7XY5LE8' where id=3; -update noar ti set b1='TCTWC8UNPER1D7XY5LE8' where id=3; -update noar tt set v0='VOE8' where id=3; -update noar ti set v0='VOE8' where id=3; -update noar tt set b2='0ETQ7NULKA' where id=3; -update noar ti set b2='0ETQ7NULKA' where id=3; -update noar tt set v0='4DFNX3BM4QTWEQ8BBDQD495R' where id=4; -update noar ti set v0='4DFNX3BM4QTWEQ8BBDQD495R' where id=4; -update noar tt set b0='C06NB4XODKEO8FIO' where id=4; -update noar ti set b0='C06NB4XODKEO8FIO' where id=4; -update noar tt set v0='4G7OK0XBAPQ798YD1KUQBWSOH' where id=4; -update noar ti set v0='4G7OK0XBAPQ798YD1KUQBWSOH' where id=4; -update noar tt set b1='XI6Z6NM14' where id=4; -update noar ti set b1='XI6Z6NM14' where id=4; -update noar tt set v0='JRKS4P2F7SF47YBB8YC7UWW' where id=4; -update noar ti set v0='JRKS4P2F7SF47YBB8YC7UWW' where id=4; -update noar tt set b2='A1' where id=4; -update noar ti set b2='A1' where id=4; -update noar tt set v0='008MOSMOPNFFI2H3ALVNMGUZ19S8856' where id=5; -update noar ti set v0='008MOSMOPNFFI2H3ALVNMGUZ19S8856' where id=5; -update noar tt set b0='X3IL8YPVXGEGCG4' where id=5; -update noar ti set b0='X3IL8YPVXGEGCG4' where id=5; -update noar tt set v0='5787N40J27E18N7DG7XHVZS' where id=5; -update noar ti set v0='5787N40J27E18N7DG7XHVZS' where id=5; -update noar tt set b1='08ZI' where id=5; -update noar ti set b1='08ZI' where id=5; -update noar tt set v0='BH' where id=5; -update noar ti set v0='BH' where id=5; -update noar tt set b2='7JEQU8UJ40' where id=5; -update noar ti set b2='7JEQU8UJ40' where id=5; -update noar tt set v0='KU1PYWE' where id=6; -update noar ti set v0='KU1PYWE' where id=6; -update noar tt set b0='ZG5I9AM26O' where id=6; -update noar ti set b0='ZG5I9AM26O' where id=6; -update noar tt set v0='QEJ9B5N3YC9QOQ1QPP7ZN' where id=6; -update noar ti set v0='QEJ9B5N3YC9QOQ1QPP7ZN' where id=6; -update noar tt set b1='JZIFRF3Y68RVXOTM2D' where id=6; -update noar ti set b1='JZIFRF3Y68RVXOTM2D' where id=6; -update noar tt set v0='ZXYREEOS1XWLZYDNJLBV188XY' where id=6; -update noar ti set v0='ZXYREEOS1XWLZYDNJLBV188XY' where id=6; -update noar tt set b2='9KW9K0LT61WV3B' where id=6; -update noar ti set b2='9KW9K0LT61WV3B' where id=6; -update noar tt set v0='8YCO64' where id=7; -update noar ti set v0='8YCO64' where id=7; -update noar tt set b0='05OPWMBY7YRHSE974DLKOLIRUKBBOJD1' where id=7; -update noar ti set b0='05OPWMBY7YRHSE974DLKOLIRUKBBOJD1' where id=7; -update noar tt set v0='MB7EICCYEG8W4ZZS8FEHP1U648I7IFQ' where id=7; -update noar ti set v0='MB7EICCYEG8W4ZZS8FEHP1U648I7IFQ' where id=7; -update noar tt set b1='8J59C0' where id=7; -update noar ti set b1='8J59C0' where id=7; -update noar tt set v0='LOCIM2W8CZ377UFF96B9TGSE6F' where id=7; -update noar ti set v0='LOCIM2W8CZ377UFF96B9TGSE6F' where id=7; -update noar tt set b2='TWO4ZOC79BRSFV25Q6RDVT6AN' where id=7; -update noar ti set b2='TWO4ZOC79BRSFV25Q6RDVT6AN' where id=7; -update noar tt set v0='HWF9IDDAZZWOH8MPLP1GM2C8CFU8' where id=8; -update noar ti set v0='HWF9IDDAZZWOH8MPLP1GM2C8CFU8' where id=8; -update noar tt set b0='6GMPQM6ZD' where id=8; -update noar ti set b0='6GMPQM6ZD' where id=8; -update noar tt set v0='DQGA0GCK0U2UW8QYVLVUSH' where id=8; -update noar ti set v0='DQGA0GCK0U2UW8QYVLVUSH' where id=8; -update noar tt set b1='E5WX3ZW1QHVMYEQDR5W9QX4W' where id=8; -update noar ti set b1='E5WX3ZW1QHVMYEQDR5W9QX4W' where id=8; -update noar tt set v0='EB' where id=8; -update noar ti set v0='EB' where id=8; -update noar tt set b2='OROMIZLVZASGGAJ6GR82VAMX' where id=8; -update noar ti set b2='OROMIZLVZASGGAJ6GR82VAMX' where id=8; -update noar tt set v0='EXX2' where id=9; -update noar ti set v0='EXX2' where id=9; -update noar tt set b0='MXZ2HC1L70FFC' where id=9; -update noar ti set b0='MXZ2HC1L70FFC' where id=9; -update noar tt set v0='P8U87WH594NVIJ58KIWL1' where id=9; -update noar ti set v0='P8U87WH594NVIJ58KIWL1' where id=9; -update noar tt set b1='0' where id=9; -update noar ti set b1='0' where id=9; -update noar tt set v0='QGL' where id=9; -update noar ti set v0='QGL' where id=9; -update noar tt set b2='CZ3BR6MT1X' where id=9; -update noar ti set b2='CZ3BR6MT1X' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 tinyblob not null, - b1 blob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='D0KN24MEJQZC2PR9A' where id=1; -update noar ti set v0='D0KN24MEJQZC2PR9A' where id=1; -update noar tt set b0='2N8Z' where id=1; -update noar ti set b0='2N8Z' where id=1; -update noar tt set v0='65N82EVEWW' where id=1; -update noar ti set v0='65N82EVEWW' where id=1; -update noar tt set b1='UL6KAL1GU8' where id=1; -update noar ti set b1='UL6KAL1GU8' where id=1; -update noar tt set v0='WUUIRYVFVWE6D' where id=1; -update noar ti set v0='WUUIRYVFVWE6D' where id=1; -update noar tt set b2='8WN7R34J9G1HLL2' where id=1; -update noar ti set b2='8WN7R34J9G1HLL2' where id=1; -update noar tt set v0='T1CYE2210XO7YWSIJ9JEP4' where id=2; -update noar ti set v0='T1CYE2210XO7YWSIJ9JEP4' where id=2; -update noar tt set b0='8' where id=2; -update noar ti set b0='8' where id=2; -update noar tt set v0='K9JUEPN8' where id=2; -update noar ti set v0='K9JUEPN8' where id=2; -update noar tt set b1='E4252OX77L0FF8N2E' where id=2; -update noar ti set b1='E4252OX77L0FF8N2E' where id=2; -update noar tt set v0='EH8FKIVDGQVREOYO04NKJDZ3PCFA5' where id=2; -update noar ti set v0='EH8FKIVDGQVREOYO04NKJDZ3PCFA5' where id=2; -update noar tt set b2='052LG5XWEY5B0Z06VP3PI195EO' where id=2; -update noar ti set b2='052LG5XWEY5B0Z06VP3PI195EO' where id=2; -update noar tt set v0='WE0IU25LJBCS7PZEZHUI65FRH6' where id=3; -update noar ti set v0='WE0IU25LJBCS7PZEZHUI65FRH6' where id=3; -update noar tt set b0='T9AU1XYOYU0D2163KYQ' where id=3; -update noar ti set b0='T9AU1XYOYU0D2163KYQ' where id=3; -update noar tt set v0='B5INDB' where id=3; -update noar ti set v0='B5INDB' where id=3; -update noar tt set b1='Z9EQ4WDLPY72R5Y4MGD1MW7K7KL' where id=3; -update noar ti set b1='Z9EQ4WDLPY72R5Y4MGD1MW7K7KL' where id=3; -update noar tt set v0='H7G9PRO1RBR7VMGFQRNH3LR2X9QXE' where id=3; -update noar ti set v0='H7G9PRO1RBR7VMGFQRNH3LR2X9QXE' where id=3; -update noar tt set b2='W3TULW7JR84ZDVLJQW2904TH7PPTIR' where id=3; -update noar ti set b2='W3TULW7JR84ZDVLJQW2904TH7PPTIR' where id=3; -update noar tt set v0='XGWEVHMQN8' where id=4; -update noar ti set v0='XGWEVHMQN8' where id=4; -update noar tt set b0='UOU' where id=4; -update noar ti set b0='UOU' where id=4; -update noar tt set v0='2VH3AL9XARP' where id=4; -update noar ti set v0='2VH3AL9XARP' where id=4; -update noar tt set b1='3I1BDJOX8X1QRM0NSIW' where id=4; -update noar ti set b1='3I1BDJOX8X1QRM0NSIW' where id=4; -update noar tt set v0='W' where id=4; -update noar ti set v0='W' where id=4; -update noar tt set b2='TN90VCQT9KJ0RMH8AF3RF' where id=4; -update noar ti set b2='TN90VCQT9KJ0RMH8AF3RF' where id=4; -update noar tt set v0='AJU3R6P6KUNMX2VB8WZKNYJVZ3IA' where id=5; -update noar ti set v0='AJU3R6P6KUNMX2VB8WZKNYJVZ3IA' where id=5; -update noar tt set b0='7Z' where id=5; -update noar ti set b0='7Z' where id=5; -update noar tt set v0='P8DP9RLR3ECYFA6AL86' where id=5; -update noar ti set v0='P8DP9RLR3ECYFA6AL86' where id=5; -update noar tt set b1='OKZ3' where id=5; -update noar ti set b1='OKZ3' where id=5; -update noar tt set v0='5EZ' where id=5; -update noar ti set v0='5EZ' where id=5; -update noar tt set b2='CTP5K69VS8HE' where id=5; -update noar ti set b2='CTP5K69VS8HE' where id=5; -update noar tt set v0='9QH969YHJYTT3FFDO5' where id=6; -update noar ti set v0='9QH969YHJYTT3FFDO5' where id=6; -update noar tt set b0='OEFSO5LYQVKT2WGKW70L8U' where id=6; -update noar ti set b0='OEFSO5LYQVKT2WGKW70L8U' where id=6; -update noar tt set v0='MO46M12Q27QNQZWA2EXKXPG4FJR' where id=6; -update noar ti set v0='MO46M12Q27QNQZWA2EXKXPG4FJR' where id=6; -update noar tt set b1='0' where id=6; -update noar ti set b1='0' where id=6; -update noar tt set v0='4GQ8Y6DFHJADTOBN9F2WJO0' where id=6; -update noar ti set v0='4GQ8Y6DFHJADTOBN9F2WJO0' where id=6; -update noar tt set b2='Z4EOV1MHPLU' where id=6; -update noar ti set b2='Z4EOV1MHPLU' where id=6; -update noar tt set v0='R5IT2AVSYH4M48MUFV' where id=7; -update noar ti set v0='R5IT2AVSYH4M48MUFV' where id=7; -update noar tt set b0='SB0FAOGB0ORU9' where id=7; -update noar ti set b0='SB0FAOGB0ORU9' where id=7; -update noar tt set v0='0QCC57BCZISAQ' where id=7; -update noar ti set v0='0QCC57BCZISAQ' where id=7; -update noar tt set b1='D92T0HMD4981FXDMOJUN50' where id=7; -update noar ti set b1='D92T0HMD4981FXDMOJUN50' where id=7; -update noar tt set v0='0CJUJ5CDQFOHSW094UU9CA09A' where id=7; -update noar ti set v0='0CJUJ5CDQFOHSW094UU9CA09A' where id=7; -update noar tt set b2='KK8OROB8YCC370CS' where id=7; -update noar ti set b2='KK8OROB8YCC370CS' where id=7; -update noar tt set v0='JEG' where id=8; -update noar ti set v0='JEG' where id=8; -update noar tt set b0='U7E9P6FHLM5EFQ5IUWLZX5M1E5N507B4' where id=8; -update noar ti set b0='U7E9P6FHLM5EFQ5IUWLZX5M1E5N507B4' where id=8; -update noar tt set v0='FO8C' where id=8; -update noar ti set v0='FO8C' where id=8; -update noar tt set b1='ZWQ4' where id=8; -update noar ti set b1='ZWQ4' where id=8; -update noar tt set v0='9XROV2SW3HUS6X6NEEVF4H9LHX0' where id=8; -update noar ti set v0='9XROV2SW3HUS6X6NEEVF4H9LHX0' where id=8; -update noar tt set b2='N5UGM6G7117XM88NGWTLDV18MWWB' where id=8; -update noar ti set b2='N5UGM6G7117XM88NGWTLDV18MWWB' where id=8; -update noar tt set v0='6XE2YRV3YO6E3RWOU83RRILL0AV8QSH' where id=9; -update noar ti set v0='6XE2YRV3YO6E3RWOU83RRILL0AV8QSH' where id=9; -update noar tt set b0='KPKNO6PQPI1ORO0Z856LG4L' where id=9; -update noar ti set b0='KPKNO6PQPI1ORO0Z856LG4L' where id=9; -update noar tt set v0='1CCIFCNOV5A2XZ' where id=9; -update noar ti set v0='1CCIFCNOV5A2XZ' where id=9; -update noar tt set b1='6L8ZD2IO8B3K83OY' where id=9; -update noar ti set b1='6L8ZD2IO8B3K83OY' where id=9; -update noar tt set v0='K4U' where id=9; -update noar ti set v0='K4U' where id=9; -update noar tt set b2='F7G3BZYU0Q97K' where id=9; -update noar ti set b2='F7G3BZYU0Q97K' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 tinyblob not null, - b1 blob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='Q1' where id=1; -update noar ti set v0='Q1' where id=1; -update noar tt set b0='9VQUXZD4VZ523ZWP5' where id=1; -update noar ti set b0='9VQUXZD4VZ523ZWP5' where id=1; -update noar tt set v0='E48Q' where id=1; -update noar ti set v0='E48Q' where id=1; -update noar tt set b1='U597Z8G1L418ZLQ2P' where id=1; -update noar ti set b1='U597Z8G1L418ZLQ2P' where id=1; -update noar tt set v0='V13D5F06LANSMKAAT1D0CAOFIKH6HL' where id=1; -update noar ti set v0='V13D5F06LANSMKAAT1D0CAOFIKH6HL' where id=1; -update noar tt set b2='QHPACUBFHZZ' where id=1; -update noar ti set b2='QHPACUBFHZZ' where id=1; -update noar tt set v0='2N6O0O7SBSHSM03SD1U' where id=2; -update noar ti set v0='2N6O0O7SBSHSM03SD1U' where id=2; -update noar tt set b0='NBIQ1I6NGSSC4HIN2BDKYYNLUR' where id=2; -update noar ti set b0='NBIQ1I6NGSSC4HIN2BDKYYNLUR' where id=2; -update noar tt set v0='5' where id=2; -update noar ti set v0='5' where id=2; -update noar tt set b1='M1YN6ADRB5EQHW' where id=2; -update noar ti set b1='M1YN6ADRB5EQHW' where id=2; -update noar tt set v0='VYM4FOSZ7XIBMRLYOP' where id=2; -update noar ti set v0='VYM4FOSZ7XIBMRLYOP' where id=2; -update noar tt set b2='RP0BUGIV' where id=2; -update noar ti set b2='RP0BUGIV' where id=2; -update noar tt set v0='B9IQQIAFG087NQ7Y35LJOCY2BBI569L' where id=3; -update noar ti set v0='B9IQQIAFG087NQ7Y35LJOCY2BBI569L' where id=3; -update noar tt set b0='79TBCF95C07GPJ7WZC7RQAYJL' where id=3; -update noar ti set b0='79TBCF95C07GPJ7WZC7RQAYJL' where id=3; -update noar tt set v0='BYGREAH' where id=3; -update noar ti set v0='BYGREAH' where id=3; -update noar tt set b1='E' where id=3; -update noar ti set b1='E' where id=3; -update noar tt set v0='BYHW7P6' where id=3; -update noar ti set v0='BYHW7P6' where id=3; -update noar tt set b2='ZTET0I75AN' where id=3; -update noar ti set b2='ZTET0I75AN' where id=3; -update noar tt set v0='FGPAJFQIJCIYD4SP1' where id=4; -update noar ti set v0='FGPAJFQIJCIYD4SP1' where id=4; -update noar tt set b0='5KCMB' where id=4; -update noar ti set b0='5KCMB' where id=4; -update noar tt set v0='ETFUPDJZX0EFFJ6TAMNQ725' where id=4; -update noar ti set v0='ETFUPDJZX0EFFJ6TAMNQ725' where id=4; -update noar tt set b1='7' where id=4; -update noar ti set b1='7' where id=4; -update noar tt set v0='X0PSMOQLVB3V77D3N' where id=4; -update noar ti set v0='X0PSMOQLVB3V77D3N' where id=4; -update noar tt set b2='3A7GSBROGZTF0DERBRDUIKLEO0HGYA' where id=4; -update noar ti set b2='3A7GSBROGZTF0DERBRDUIKLEO0HGYA' where id=4; -update noar tt set v0='TX9KW6PNGJNVBN' where id=5; -update noar ti set v0='TX9KW6PNGJNVBN' where id=5; -update noar tt set b0='RN602RZG7ZO2JFLBXC8YDR55A' where id=5; -update noar ti set b0='RN602RZG7ZO2JFLBXC8YDR55A' where id=5; -update noar tt set v0='NDVJVJL' where id=5; -update noar ti set v0='NDVJVJL' where id=5; -update noar tt set b1='YBDZ0O3NVOJ1H4NCV072X9PH5N8' where id=5; -update noar ti set b1='YBDZ0O3NVOJ1H4NCV072X9PH5N8' where id=5; -update noar tt set v0='DWD4UR0ZH916C9E7L1BHSNI' where id=5; -update noar ti set v0='DWD4UR0ZH916C9E7L1BHSNI' where id=5; -update noar tt set b2='HZFJ51046UEJ6KDR2W2ZES5K54DNGEG' where id=5; -update noar ti set b2='HZFJ51046UEJ6KDR2W2ZES5K54DNGEG' where id=5; -update noar tt set v0='GXKK' where id=6; -update noar ti set v0='GXKK' where id=6; -update noar tt set b0='8HO' where id=6; -update noar ti set b0='8HO' where id=6; -update noar tt set v0='ZND9KNTDDSQPVE7083Z' where id=6; -update noar ti set v0='ZND9KNTDDSQPVE7083Z' where id=6; -update noar tt set b1='L9T93T8955I8W652DFDH3K' where id=6; -update noar ti set b1='L9T93T8955I8W652DFDH3K' where id=6; -update noar tt set v0='R890OUQEBACJMNLAZ' where id=6; -update noar ti set v0='R890OUQEBACJMNLAZ' where id=6; -update noar tt set b2='J18RS1FYPRWCLFBML8RLM20G' where id=6; -update noar ti set b2='J18RS1FYPRWCLFBML8RLM20G' where id=6; -update noar tt set v0='Q9C0NP8G' where id=7; -update noar ti set v0='Q9C0NP8G' where id=7; -update noar tt set b0='O1KDM982G' where id=7; -update noar ti set b0='O1KDM982G' where id=7; -update noar tt set v0='WMN569SYKVWDE30CA5A1BBS5FNYE' where id=7; -update noar ti set v0='WMN569SYKVWDE30CA5A1BBS5FNYE' where id=7; -update noar tt set b1='W6CZQFW3I9MLC' where id=7; -update noar ti set b1='W6CZQFW3I9MLC' where id=7; -update noar tt set v0='3ZI2NA5DHWS7XC8422ULEGEM6R718J' where id=7; -update noar ti set v0='3ZI2NA5DHWS7XC8422ULEGEM6R718J' where id=7; -update noar tt set b2='RXC7Y3WUE9S9VIUFW92IE' where id=7; -update noar ti set b2='RXC7Y3WUE9S9VIUFW92IE' where id=7; -update noar tt set v0='TRV6JBLN' where id=8; -update noar ti set v0='TRV6JBLN' where id=8; -update noar tt set b0='C18E0M961RH5KJT' where id=8; -update noar ti set b0='C18E0M961RH5KJT' where id=8; -update noar tt set v0='RUC64AA6BLU5DDZ3BASMKW4XCE0Q7' where id=8; -update noar ti set v0='RUC64AA6BLU5DDZ3BASMKW4XCE0Q7' where id=8; -update noar tt set b1='X5OTXW1ZU5UMSBLRFHSNEOM7XOSK' where id=8; -update noar ti set b1='X5OTXW1ZU5UMSBLRFHSNEOM7XOSK' where id=8; -update noar tt set v0='HSUPT30OB36TW3HZ2JOIEOD0YXNE2' where id=8; -update noar ti set v0='HSUPT30OB36TW3HZ2JOIEOD0YXNE2' where id=8; -update noar tt set b2='SDFVZVBSRZLQ4VXPKZZ3' where id=8; -update noar ti set b2='SDFVZVBSRZLQ4VXPKZZ3' where id=8; -update noar tt set v0='TU4VS9BNWJ22EWHQGD6SJ54CTUM7JG' where id=9; -update noar ti set v0='TU4VS9BNWJ22EWHQGD6SJ54CTUM7JG' where id=9; -update noar tt set b0='3R4' where id=9; -update noar ti set b0='3R4' where id=9; -update noar tt set v0='Z2W4IOS' where id=9; -update noar ti set v0='Z2W4IOS' where id=9; -update noar tt set b1='X5JTLZY' where id=9; -update noar ti set b1='X5JTLZY' where id=9; -update noar tt set v0='GJNLF89WINZPO' where id=9; -update noar ti set v0='GJNLF89WINZPO' where id=9; -update noar tt set b2='SSLPPOH4GQQ' where id=9; -update noar ti set b2='SSLPPOH4GQQ' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 tinyblob null, - b1 blob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='HUUBW07QPI19Z7GY' where id=1; -update noar ti set v0='HUUBW07QPI19Z7GY' where id=1; -update noar tt set b0='DWB0N0KRCDTIZ5BIYT' where id=1; -update noar ti set b0='DWB0N0KRCDTIZ5BIYT' where id=1; -update noar tt set v0='KNPWL2XSER0' where id=1; -update noar ti set v0='KNPWL2XSER0' where id=1; -update noar tt set b1='Q' where id=1; -update noar ti set b1='Q' where id=1; -update noar tt set v0='PEDK0PMW3VTPVFFD1JD5' where id=1; -update noar ti set v0='PEDK0PMW3VTPVFFD1JD5' where id=1; -update noar tt set b2='JERA7GGLASUJAMA5A8CV4XVZO04ACEL' where id=1; -update noar ti set b2='JERA7GGLASUJAMA5A8CV4XVZO04ACEL' where id=1; -update noar tt set v0='MY96RKIJT9JVXA3BV2IQXYOCAREB' where id=2; -update noar ti set v0='MY96RKIJT9JVXA3BV2IQXYOCAREB' where id=2; -update noar tt set b0='DVL5QAWLBJPJT4' where id=2; -update noar ti set b0='DVL5QAWLBJPJT4' where id=2; -update noar tt set v0='3' where id=2; -update noar ti set v0='3' where id=2; -update noar tt set b1='ZQAY3QAIXVVC' where id=2; -update noar ti set b1='ZQAY3QAIXVVC' where id=2; -update noar tt set v0='GKUYV9' where id=2; -update noar ti set v0='GKUYV9' where id=2; -update noar tt set b2='3X4QZGBUOGJMAU9KBSC9C' where id=2; -update noar ti set b2='3X4QZGBUOGJMAU9KBSC9C' where id=2; -update noar tt set v0='UUAAQ16QIMA0P8UFBCT' where id=3; -update noar ti set v0='UUAAQ16QIMA0P8UFBCT' where id=3; -update noar tt set b0='NE5F80ACBVSUS5XFXRQY0U' where id=3; -update noar ti set b0='NE5F80ACBVSUS5XFXRQY0U' where id=3; -update noar tt set v0='NLI8SQ3U5' where id=3; -update noar ti set v0='NLI8SQ3U5' where id=3; -update noar tt set b1='A' where id=3; -update noar ti set b1='A' where id=3; -update noar tt set v0='O4CSQ07GJP6SO5RCJ0MN94TUMV04QMY' where id=3; -update noar ti set v0='O4CSQ07GJP6SO5RCJ0MN94TUMV04QMY' where id=3; -update noar tt set b2='A5S51YNYAH2' where id=3; -update noar ti set b2='A5S51YNYAH2' where id=3; -update noar tt set v0='YHZWWBJTMI45NC493TMCY6OVXRE0F' where id=4; -update noar ti set v0='YHZWWBJTMI45NC493TMCY6OVXRE0F' where id=4; -update noar tt set b0='D5ZBMT53IPDHFPUH6V3OSAZSSKZ0O17' where id=4; -update noar ti set b0='D5ZBMT53IPDHFPUH6V3OSAZSSKZ0O17' where id=4; -update noar tt set v0='EYDTO0IAL8H0W' where id=4; -update noar ti set v0='EYDTO0IAL8H0W' where id=4; -update noar tt set b1='R2HM4JKFJJERCO' where id=4; -update noar ti set b1='R2HM4JKFJJERCO' where id=4; -update noar tt set v0='50TVQZ09536WYTEOWL0BTVS764' where id=4; -update noar ti set v0='50TVQZ09536WYTEOWL0BTVS764' where id=4; -update noar tt set b2='WOC222J9M' where id=4; -update noar ti set b2='WOC222J9M' where id=4; -update noar tt set v0='KH1KA' where id=5; -update noar ti set v0='KH1KA' where id=5; -update noar tt set b0='WIQFJYZFG67FENHZQ6S8FMLTU36' where id=5; -update noar ti set b0='WIQFJYZFG67FENHZQ6S8FMLTU36' where id=5; -update noar tt set v0='36MOL10Q7NQSNDLCFLWU' where id=5; -update noar ti set v0='36MOL10Q7NQSNDLCFLWU' where id=5; -update noar tt set b1='R2XT' where id=5; -update noar ti set b1='R2XT' where id=5; -update noar tt set v0='YY991MRRCKDH' where id=5; -update noar ti set v0='YY991MRRCKDH' where id=5; -update noar tt set b2='U9C5QAS6O881SVEVEJTIXVEJ' where id=5; -update noar ti set b2='U9C5QAS6O881SVEVEJTIXVEJ' where id=5; -update noar tt set v0='92BZBW68T' where id=6; -update noar ti set v0='92BZBW68T' where id=6; -update noar tt set b0='OVX8ZKV' where id=6; -update noar ti set b0='OVX8ZKV' where id=6; -update noar tt set v0='RIJIO3ONQFITCVVRESKM1ASBPJX' where id=6; -update noar ti set v0='RIJIO3ONQFITCVVRESKM1ASBPJX' where id=6; -update noar tt set b1='EW8DENP53OAZOXECCG28YJ08APPEG6N' where id=6; -update noar ti set b1='EW8DENP53OAZOXECCG28YJ08APPEG6N' where id=6; -update noar tt set v0='IO9AUF6W' where id=6; -update noar ti set v0='IO9AUF6W' where id=6; -update noar tt set b2='JNBQTLWHEZQ' where id=6; -update noar ti set b2='JNBQTLWHEZQ' where id=6; -update noar tt set v0='63QUY1OUU4S0QPFCJSILTQDR76KF2M6B' where id=7; -update noar ti set v0='63QUY1OUU4S0QPFCJSILTQDR76KF2M6B' where id=7; -update noar tt set b0='F3R7ZJHQFN6KL0LTE' where id=7; -update noar ti set b0='F3R7ZJHQFN6KL0LTE' where id=7; -update noar tt set v0='MEYPOP8052KKJFPTVBOIL75ZAXD' where id=7; -update noar ti set v0='MEYPOP8052KKJFPTVBOIL75ZAXD' where id=7; -update noar tt set b1='GPC9N0AI66TOW72GJO29G4YV' where id=7; -update noar ti set b1='GPC9N0AI66TOW72GJO29G4YV' where id=7; -update noar tt set v0='AKYN29I0441KRBSNWH919C' where id=7; -update noar ti set v0='AKYN29I0441KRBSNWH919C' where id=7; -update noar tt set b2='1L' where id=7; -update noar ti set b2='1L' where id=7; -update noar tt set v0='7EPXFBQK' where id=8; -update noar ti set v0='7EPXFBQK' where id=8; -update noar tt set b0='ZV0A3YMAMRLPZCM9BLG2D4Q' where id=8; -update noar ti set b0='ZV0A3YMAMRLPZCM9BLG2D4Q' where id=8; -update noar tt set v0='IAL666LNCG35LYQ0QQK6O5' where id=8; -update noar ti set v0='IAL666LNCG35LYQ0QQK6O5' where id=8; -update noar tt set b1='EW11N63S2OBD7SFD9VNJLL9' where id=8; -update noar ti set b1='EW11N63S2OBD7SFD9VNJLL9' where id=8; -update noar tt set v0='E6QTX01IY2M21N7H' where id=8; -update noar ti set v0='E6QTX01IY2M21N7H' where id=8; -update noar tt set b2='OH56KOFBNTLC26K' where id=8; -update noar ti set b2='OH56KOFBNTLC26K' where id=8; -update noar tt set v0='EGEGWWJJV21CK83K5NXBQGR0CG1' where id=9; -update noar ti set v0='EGEGWWJJV21CK83K5NXBQGR0CG1' where id=9; -update noar tt set b0='O7H1SNTNK0ESVK9APLB2Z9PM3NR9E09' where id=9; -update noar ti set b0='O7H1SNTNK0ESVK9APLB2Z9PM3NR9E09' where id=9; -update noar tt set v0='Q1DHSP4I2' where id=9; -update noar ti set v0='Q1DHSP4I2' where id=9; -update noar tt set b1='IF5DY803ZWPK28V55ZDX1X3' where id=9; -update noar ti set b1='IF5DY803ZWPK28V55ZDX1X3' where id=9; -update noar tt set v0='DQCA7C1SFL0BU23DPX1RCBFE7WAYF' where id=9; -update noar ti set v0='DQCA7C1SFL0BU23DPX1RCBFE7WAYF' where id=9; -update noar tt set b2='OKYK9I5SPMXPVYJIC3CS5' where id=9; -update noar ti set b2='OKYK9I5SPMXPVYJIC3CS5' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 tinyblob null, - b1 blob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='7X9ZCU5EB1K9UTS8WJ51QCSTPGZ2X' where id=1; -update noar ti set v0='7X9ZCU5EB1K9UTS8WJ51QCSTPGZ2X' where id=1; -update noar tt set b0='YB8NTN82M' where id=1; -update noar ti set b0='YB8NTN82M' where id=1; -update noar tt set v0='LRL32Z5N10JBOF6' where id=1; -update noar ti set v0='LRL32Z5N10JBOF6' where id=1; -update noar tt set b1='SVXTVA7OG59RTB' where id=1; -update noar ti set b1='SVXTVA7OG59RTB' where id=1; -update noar tt set v0='5RQF5QA6JGO' where id=1; -update noar ti set v0='5RQF5QA6JGO' where id=1; -update noar tt set b2='LEOR80S' where id=1; -update noar ti set b2='LEOR80S' where id=1; -update noar tt set v0='YSZTG' where id=2; -update noar ti set v0='YSZTG' where id=2; -update noar tt set b0='UW01H8XU8E41VQJNKIQPY43R37E' where id=2; -update noar ti set b0='UW01H8XU8E41VQJNKIQPY43R37E' where id=2; -update noar tt set v0='4U7JBMZB54FMAZV' where id=2; -update noar ti set v0='4U7JBMZB54FMAZV' where id=2; -update noar tt set b1='7UJ4PJDGKF6WFCXGAJZA81SWT' where id=2; -update noar ti set b1='7UJ4PJDGKF6WFCXGAJZA81SWT' where id=2; -update noar tt set v0='XMT1U' where id=2; -update noar ti set v0='XMT1U' where id=2; -update noar tt set b2='2' where id=2; -update noar ti set b2='2' where id=2; -update noar tt set v0='1GXOXA9B3NSGQHU7NBE' where id=3; -update noar ti set v0='1GXOXA9B3NSGQHU7NBE' where id=3; -update noar tt set b0='Q' where id=3; -update noar ti set b0='Q' where id=3; -update noar tt set v0='SY02UKUCTT5A' where id=3; -update noar ti set v0='SY02UKUCTT5A' where id=3; -update noar tt set b1='OQA4' where id=3; -update noar ti set b1='OQA4' where id=3; -update noar tt set v0='DTPZ3DT8PWK8GMWZV' where id=3; -update noar ti set v0='DTPZ3DT8PWK8GMWZV' where id=3; -update noar tt set b2='BYTZ' where id=3; -update noar ti set b2='BYTZ' where id=3; -update noar tt set v0='15603KRF033QUHOY' where id=4; -update noar ti set v0='15603KRF033QUHOY' where id=4; -update noar tt set b0='S7KDI30VIRK9UTK' where id=4; -update noar ti set b0='S7KDI30VIRK9UTK' where id=4; -update noar tt set v0='K0FER' where id=4; -update noar ti set v0='K0FER' where id=4; -update noar tt set b1='42Z7ZIUCK1QXN7' where id=4; -update noar ti set b1='42Z7ZIUCK1QXN7' where id=4; -update noar tt set v0='YKLGSFX7QZ49D9EMOV1EQ' where id=4; -update noar ti set v0='YKLGSFX7QZ49D9EMOV1EQ' where id=4; -update noar tt set b2='MJTDHCSXUDJGL6QJFH9HDED1D' where id=4; -update noar ti set b2='MJTDHCSXUDJGL6QJFH9HDED1D' where id=4; -update noar tt set v0='Q95TBK8Z5Q45ERZQBAE2SYUC3' where id=5; -update noar ti set v0='Q95TBK8Z5Q45ERZQBAE2SYUC3' where id=5; -update noar tt set b0='O8DH7N2SXU1W4CVIHVYRZGW0TN6V1SDQ' where id=5; -update noar ti set b0='O8DH7N2SXU1W4CVIHVYRZGW0TN6V1SDQ' where id=5; -update noar tt set v0='BGVZXQEI40OKTLREY2DA9M' where id=5; -update noar ti set v0='BGVZXQEI40OKTLREY2DA9M' where id=5; -update noar tt set b1='09H5O6IDB32T31OYK5W29M' where id=5; -update noar ti set b1='09H5O6IDB32T31OYK5W29M' where id=5; -update noar tt set v0='MD4BVS633PCUN2W4I8QII' where id=5; -update noar ti set v0='MD4BVS633PCUN2W4I8QII' where id=5; -update noar tt set b2='BFJKMP6SMV3E' where id=5; -update noar ti set b2='BFJKMP6SMV3E' where id=5; -update noar tt set v0='3C96007Y7766C0665X4E5TSC9I33WROS' where id=6; -update noar ti set v0='3C96007Y7766C0665X4E5TSC9I33WROS' where id=6; -update noar tt set b0='8GX6Q05B7HT' where id=6; -update noar ti set b0='8GX6Q05B7HT' where id=6; -update noar tt set v0='TF8YT7Z7TP7SWJ' where id=6; -update noar ti set v0='TF8YT7Z7TP7SWJ' where id=6; -update noar tt set b1='SD3NF1OXAW0B072C54G3LYED8L' where id=6; -update noar ti set b1='SD3NF1OXAW0B072C54G3LYED8L' where id=6; -update noar tt set v0='DXDZ439TUJKULG59CRB0Y9UZ0IH' where id=6; -update noar ti set v0='DXDZ439TUJKULG59CRB0Y9UZ0IH' where id=6; -update noar tt set b2='DJUY1FZ8T8OA5QFCYP81UKNZ98' where id=6; -update noar ti set b2='DJUY1FZ8T8OA5QFCYP81UKNZ98' where id=6; -update noar tt set v0='I6PH4WVRW9LMMJGJOX8G' where id=7; -update noar ti set v0='I6PH4WVRW9LMMJGJOX8G' where id=7; -update noar tt set b0='O3FXX' where id=7; -update noar ti set b0='O3FXX' where id=7; -update noar tt set v0='BL05AVSKRGE0WIOYD6PE8F24SW' where id=7; -update noar ti set v0='BL05AVSKRGE0WIOYD6PE8F24SW' where id=7; -update noar tt set b1='RVCM' where id=7; -update noar ti set b1='RVCM' where id=7; -update noar tt set v0='YPV9DMLVN60CYJKS4MBMQHW' where id=7; -update noar ti set v0='YPV9DMLVN60CYJKS4MBMQHW' where id=7; -update noar tt set b2='BIQ0IXWC485HTEQLR' where id=7; -update noar ti set b2='BIQ0IXWC485HTEQLR' where id=7; -update noar tt set v0='FCTFC0KKZJ3GEKKSY8F82TQ6' where id=8; -update noar ti set v0='FCTFC0KKZJ3GEKKSY8F82TQ6' where id=8; -update noar tt set b0='40LTMGJRJ' where id=8; -update noar ti set b0='40LTMGJRJ' where id=8; -update noar tt set v0='YAQH37GOJUP91JVO0YKMW0ET' where id=8; -update noar ti set v0='YAQH37GOJUP91JVO0YKMW0ET' where id=8; -update noar tt set b1='IHCRM52VXHCDPDFJ4NBICFAYOOX7' where id=8; -update noar ti set b1='IHCRM52VXHCDPDFJ4NBICFAYOOX7' where id=8; -update noar tt set v0='2J4V4ZSAQYNC70B' where id=8; -update noar ti set v0='2J4V4ZSAQYNC70B' where id=8; -update noar tt set b2='DZZ0' where id=8; -update noar ti set b2='DZZ0' where id=8; -update noar tt set v0='6Y3EE5LFZOJGN88SKQ7P08NRZQTZ1BM' where id=9; -update noar ti set v0='6Y3EE5LFZOJGN88SKQ7P08NRZQTZ1BM' where id=9; -update noar tt set b0='RSZVBVQCPOFXOP20BZDU7' where id=9; -update noar ti set b0='RSZVBVQCPOFXOP20BZDU7' where id=9; -update noar tt set v0='P6QM8EN0RKBV' where id=9; -update noar ti set v0='P6QM8EN0RKBV' where id=9; -update noar tt set b1='6GQNANW4XY' where id=9; -update noar ti set b1='6GQNANW4XY' where id=9; -update noar tt set v0='W6XP1RQSQQYFT0CTGP5K8636FW' where id=9; -update noar ti set v0='W6XP1RQSQQYFT0CTGP5K8636FW' where id=9; -update noar tt set b2='FHKJWR6H7L9T90F' where id=9; -update noar ti set b2='FHKJWR6H7L9T90F' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 tinyblob not null, - b1 blob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='EXR4KANRV4NMMQQBLEJHZO2JY' where id=1; -update noar ti set v0='EXR4KANRV4NMMQQBLEJHZO2JY' where id=1; -update noar tt set b0='JENF6SB63H4AYG0' where id=1; -update noar ti set b0='JENF6SB63H4AYG0' where id=1; -update noar tt set v0='5GOEYG587Y6R29AOQ0FDIN1EB6GHI2' where id=1; -update noar ti set v0='5GOEYG587Y6R29AOQ0FDIN1EB6GHI2' where id=1; -update noar tt set b1='NHEDBLGN0PET6ZSL24QB1X8OVMBZFM' where id=1; -update noar ti set b1='NHEDBLGN0PET6ZSL24QB1X8OVMBZFM' where id=1; -update noar tt set v0='MPNAJSBUJKKF74VDUEEUW4YG' where id=1; -update noar ti set v0='MPNAJSBUJKKF74VDUEEUW4YG' where id=1; -update noar tt set b2='51DHPJHOSO37F9J87DRQBOT042ZN' where id=1; -update noar ti set b2='51DHPJHOSO37F9J87DRQBOT042ZN' where id=1; -update noar tt set v0='Y25R' where id=2; -update noar ti set v0='Y25R' where id=2; -update noar tt set b0='H4VK6D' where id=2; -update noar ti set b0='H4VK6D' where id=2; -update noar tt set v0='AWEAEXIEIBCI' where id=2; -update noar ti set v0='AWEAEXIEIBCI' where id=2; -update noar tt set b1='ZWPPE01VM' where id=2; -update noar ti set b1='ZWPPE01VM' where id=2; -update noar tt set v0='NB58' where id=2; -update noar ti set v0='NB58' where id=2; -update noar tt set b2='674AUDAVG38P0RDH22K9LU7DS' where id=2; -update noar ti set b2='674AUDAVG38P0RDH22K9LU7DS' where id=2; -update noar tt set v0='ZSR72DAZ' where id=3; -update noar ti set v0='ZSR72DAZ' where id=3; -update noar tt set b0='XB02MJ4ICXBRV3VV' where id=3; -update noar ti set b0='XB02MJ4ICXBRV3VV' where id=3; -update noar tt set v0='FUECLF2I8' where id=3; -update noar ti set v0='FUECLF2I8' where id=3; -update noar tt set b1='J' where id=3; -update noar ti set b1='J' where id=3; -update noar tt set v0='H6YTR6XT4KTYNJII' where id=3; -update noar ti set v0='H6YTR6XT4KTYNJII' where id=3; -update noar tt set b2='76GPQ2RSIC6QAS74K1Z491W6' where id=3; -update noar ti set b2='76GPQ2RSIC6QAS74K1Z491W6' where id=3; -update noar tt set v0='01JE4D8TM216PN4LKRC6OJ2R4RQ6PWC' where id=4; -update noar ti set v0='01JE4D8TM216PN4LKRC6OJ2R4RQ6PWC' where id=4; -update noar tt set b0='FZ6ROIOL' where id=4; -update noar ti set b0='FZ6ROIOL' where id=4; -update noar tt set v0='SDEGGDYRK7507WI2YMX0H' where id=4; -update noar ti set v0='SDEGGDYRK7507WI2YMX0H' where id=4; -update noar tt set b1='V712HMILEG2H' where id=4; -update noar ti set b1='V712HMILEG2H' where id=4; -update noar tt set v0='XAHGN' where id=4; -update noar ti set v0='XAHGN' where id=4; -update noar tt set b2='RD4MIT78' where id=4; -update noar ti set b2='RD4MIT78' where id=4; -update noar tt set v0='61D9790SJYM01MY' where id=5; -update noar ti set v0='61D9790SJYM01MY' where id=5; -update noar tt set b0='64WWSHKCKQZOF6BXS1Q' where id=5; -update noar ti set b0='64WWSHKCKQZOF6BXS1Q' where id=5; -update noar tt set v0='ZPKXSNHNL3G36FYF3LRLZ7' where id=5; -update noar ti set v0='ZPKXSNHNL3G36FYF3LRLZ7' where id=5; -update noar tt set b1='XODEY' where id=5; -update noar ti set b1='XODEY' where id=5; -update noar tt set v0='Z6Q5JV9RJ' where id=5; -update noar ti set v0='Z6Q5JV9RJ' where id=5; -update noar tt set b2='3F2Y' where id=5; -update noar ti set b2='3F2Y' where id=5; -update noar tt set v0='GKP57TE04U' where id=6; -update noar ti set v0='GKP57TE04U' where id=6; -update noar tt set b0='BN42QNST97TY1IEL67IBQSMR9K8J' where id=6; -update noar ti set b0='BN42QNST97TY1IEL67IBQSMR9K8J' where id=6; -update noar tt set v0='UYJ7H577BH85MWIKC' where id=6; -update noar ti set v0='UYJ7H577BH85MWIKC' where id=6; -update noar tt set b1='NG051CTO4TBVZKI4IMHVDX90DGWQ4NAM' where id=6; -update noar ti set b1='NG051CTO4TBVZKI4IMHVDX90DGWQ4NAM' where id=6; -update noar tt set v0='VTT4CEHEGQWXUJ' where id=6; -update noar ti set v0='VTT4CEHEGQWXUJ' where id=6; -update noar tt set b2='CKK2F' where id=6; -update noar ti set b2='CKK2F' where id=6; -update noar tt set v0='Q' where id=7; -update noar ti set v0='Q' where id=7; -update noar tt set b0='VBDD3FGRLSOJ4XGUZ088R3C' where id=7; -update noar ti set b0='VBDD3FGRLSOJ4XGUZ088R3C' where id=7; -update noar tt set v0='YNVNV1I56VEM2D31E6X2H2' where id=7; -update noar ti set v0='YNVNV1I56VEM2D31E6X2H2' where id=7; -update noar tt set b1='PD8IBJQVWZ098IJD' where id=7; -update noar ti set b1='PD8IBJQVWZ098IJD' where id=7; -update noar tt set v0='A2FYME7YXM5ZSZZANJ1TW3LI27RZ' where id=7; -update noar ti set v0='A2FYME7YXM5ZSZZANJ1TW3LI27RZ' where id=7; -update noar tt set b2='YAQUYE7NZJO0ISVQYZF4ST7LJVOAOD2' where id=7; -update noar ti set b2='YAQUYE7NZJO0ISVQYZF4ST7LJVOAOD2' where id=7; -update noar tt set v0='RHPNSAHA00OBP9O410X1J9MOCMEFEB' where id=8; -update noar ti set v0='RHPNSAHA00OBP9O410X1J9MOCMEFEB' where id=8; -update noar tt set b0='5GNSKEP4QOYWGWB1E9E0X4G6I8ATPQ' where id=8; -update noar ti set b0='5GNSKEP4QOYWGWB1E9E0X4G6I8ATPQ' where id=8; -update noar tt set v0='G12FLSA31' where id=8; -update noar ti set v0='G12FLSA31' where id=8; -update noar tt set b1='VL70WN5HM02I05MUX9BZ33I6AI5QIA' where id=8; -update noar ti set b1='VL70WN5HM02I05MUX9BZ33I6AI5QIA' where id=8; -update noar tt set v0='C8J5WQW' where id=8; -update noar ti set v0='C8J5WQW' where id=8; -update noar tt set b2='ZL58PNX8M4EYFH7MVZJL3GYS73W3' where id=8; -update noar ti set b2='ZL58PNX8M4EYFH7MVZJL3GYS73W3' where id=8; -update noar tt set v0='9BF8O69YBTF7LBL9A' where id=9; -update noar ti set v0='9BF8O69YBTF7LBL9A' where id=9; -update noar tt set b0='L381608G9R6IDQCKP' where id=9; -update noar ti set b0='L381608G9R6IDQCKP' where id=9; -update noar tt set v0='CHIRGZUA' where id=9; -update noar ti set v0='CHIRGZUA' where id=9; -update noar tt set b1='YK5IQS' where id=9; -update noar ti set b1='YK5IQS' where id=9; -update noar tt set v0='VAGEWP3DF1QNWH' where id=9; -update noar ti set v0='VAGEWP3DF1QNWH' where id=9; -update noar tt set b2='EEXAQOWD89IMT47' where id=9; -update noar ti set b2='EEXAQOWD89IMT47' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 tinyblob not null, - b1 blob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='0BB' where id=1; -update noar ti set v0='0BB' where id=1; -update noar tt set b0='RAHWAQAPLY' where id=1; -update noar ti set b0='RAHWAQAPLY' where id=1; -update noar tt set v0='Y5Z11UQVE90O73DMDKMDQZ9932OF' where id=1; -update noar ti set v0='Y5Z11UQVE90O73DMDKMDQZ9932OF' where id=1; -update noar tt set b1='QUPOF3KAJQB18OAARBVLNV52VX0R' where id=1; -update noar ti set b1='QUPOF3KAJQB18OAARBVLNV52VX0R' where id=1; -update noar tt set v0='PLF4U2B0ISP' where id=1; -update noar ti set v0='PLF4U2B0ISP' where id=1; -update noar tt set b2='FAYV' where id=1; -update noar ti set b2='FAYV' where id=1; -update noar tt set v0='G8WT62HP' where id=2; -update noar ti set v0='G8WT62HP' where id=2; -update noar tt set b0='7PZG3BXRNKKAIITYMSEBE0' where id=2; -update noar ti set b0='7PZG3BXRNKKAIITYMSEBE0' where id=2; -update noar tt set v0='91QS87M6T0WNUR0E2K2PHM' where id=2; -update noar ti set v0='91QS87M6T0WNUR0E2K2PHM' where id=2; -update noar tt set b1='GP1FH3JDOTH6HREGRS20KXB0L8' where id=2; -update noar ti set b1='GP1FH3JDOTH6HREGRS20KXB0L8' where id=2; -update noar tt set v0='B28RHH69' where id=2; -update noar ti set v0='B28RHH69' where id=2; -update noar tt set b2='7CO8IXI' where id=2; -update noar ti set b2='7CO8IXI' where id=2; -update noar tt set v0='XWZY' where id=3; -update noar ti set v0='XWZY' where id=3; -update noar tt set b0='N1CPEDG83RGBU517ZLCZ2HKRR4SRPE7' where id=3; -update noar ti set b0='N1CPEDG83RGBU517ZLCZ2HKRR4SRPE7' where id=3; -update noar tt set v0='BU4K6E' where id=3; -update noar ti set v0='BU4K6E' where id=3; -update noar tt set b1='PE7DE5GB4SV60A2QN8JOWK9' where id=3; -update noar ti set b1='PE7DE5GB4SV60A2QN8JOWK9' where id=3; -update noar tt set v0='WOSLQIOTD9O5ZSAI174CLI0' where id=3; -update noar ti set v0='WOSLQIOTD9O5ZSAI174CLI0' where id=3; -update noar tt set b2='QUZM4G15GGJBRWV8R' where id=3; -update noar ti set b2='QUZM4G15GGJBRWV8R' where id=3; -update noar tt set v0='3UC521OAT0HPH4GN3ATKW' where id=4; -update noar ti set v0='3UC521OAT0HPH4GN3ATKW' where id=4; -update noar tt set b0='PT8GXTAETOFR7PLG1VGVGHHHEAST7TBL' where id=4; -update noar ti set b0='PT8GXTAETOFR7PLG1VGVGHHHEAST7TBL' where id=4; -update noar tt set v0='8ZWM2GJOHDWHCKBH3' where id=4; -update noar ti set v0='8ZWM2GJOHDWHCKBH3' where id=4; -update noar tt set b1='DC8J' where id=4; -update noar ti set b1='DC8J' where id=4; -update noar tt set v0='Y1H2ODQEN8FGI' where id=4; -update noar ti set v0='Y1H2ODQEN8FGI' where id=4; -update noar tt set b2='O7UF5AZB0N55YEL' where id=4; -update noar ti set b2='O7UF5AZB0N55YEL' where id=4; -update noar tt set v0='893J' where id=5; -update noar ti set v0='893J' where id=5; -update noar tt set b0='NWEB79GK3UI7V4EKQ7DOASKEPN8' where id=5; -update noar ti set b0='NWEB79GK3UI7V4EKQ7DOASKEPN8' where id=5; -update noar tt set v0='AICZWHML3DUWP2JSVJVIRSO2EIRYZ' where id=5; -update noar ti set v0='AICZWHML3DUWP2JSVJVIRSO2EIRYZ' where id=5; -update noar tt set b1='YYTOOYAM6R7GU4CK7OQ3' where id=5; -update noar ti set b1='YYTOOYAM6R7GU4CK7OQ3' where id=5; -update noar tt set v0='H2F3P3ZS0LRVBQJI23IMZQ87YIDJJM2U' where id=5; -update noar ti set v0='H2F3P3ZS0LRVBQJI23IMZQ87YIDJJM2U' where id=5; -update noar tt set b2='46UWSUOQSFJ64PCHG27' where id=5; -update noar ti set b2='46UWSUOQSFJ64PCHG27' where id=5; -update noar tt set v0='KBWZG5UTAYCOO6526' where id=6; -update noar ti set v0='KBWZG5UTAYCOO6526' where id=6; -update noar tt set b0='24JYI5EN047PAI822KWS6NMP2SVA98' where id=6; -update noar ti set b0='24JYI5EN047PAI822KWS6NMP2SVA98' where id=6; -update noar tt set v0='WRXYCV4QUP1SOI295' where id=6; -update noar ti set v0='WRXYCV4QUP1SOI295' where id=6; -update noar tt set b1='4E3U0TRQ1J4ZLOQDQAA0JVHUB' where id=6; -update noar ti set b1='4E3U0TRQ1J4ZLOQDQAA0JVHUB' where id=6; -update noar tt set v0='JWPPIHS35A0J5U2' where id=6; -update noar ti set v0='JWPPIHS35A0J5U2' where id=6; -update noar tt set b2='R' where id=6; -update noar ti set b2='R' where id=6; -update noar tt set v0='RO' where id=7; -update noar ti set v0='RO' where id=7; -update noar tt set b0='3LK3RIXCXOOZ' where id=7; -update noar ti set b0='3LK3RIXCXOOZ' where id=7; -update noar tt set v0='13RE7097I9ANKTNL7HL2GX7TPI' where id=7; -update noar ti set v0='13RE7097I9ANKTNL7HL2GX7TPI' where id=7; -update noar tt set b1='A14PM37J551W618' where id=7; -update noar ti set b1='A14PM37J551W618' where id=7; -update noar tt set v0='W7MC795WIUO7A5UF49QRTTZPOM3C' where id=7; -update noar ti set v0='W7MC795WIUO7A5UF49QRTTZPOM3C' where id=7; -update noar tt set b2='CPBOPLQK8XC' where id=7; -update noar ti set b2='CPBOPLQK8XC' where id=7; -update noar tt set v0='S051FCY2VSI1MHILLJNU5EJ38TR' where id=8; -update noar ti set v0='S051FCY2VSI1MHILLJNU5EJ38TR' where id=8; -update noar tt set b0='MSW' where id=8; -update noar ti set b0='MSW' where id=8; -update noar tt set v0='WDZ5D7EP4NLWKUOKY5SN1DZXXB8E4' where id=8; -update noar ti set v0='WDZ5D7EP4NLWKUOKY5SN1DZXXB8E4' where id=8; -update noar tt set b1='IA' where id=8; -update noar ti set b1='IA' where id=8; -update noar tt set v0='ACBYUD17E6Q5E' where id=8; -update noar ti set v0='ACBYUD17E6Q5E' where id=8; -update noar tt set b2='4M31GTY9G4OZR1YCATFNB' where id=8; -update noar ti set b2='4M31GTY9G4OZR1YCATFNB' where id=8; -update noar tt set v0='BMT3CR6T' where id=9; -update noar ti set v0='BMT3CR6T' where id=9; -update noar tt set b0='HKBPON1MWH' where id=9; -update noar ti set b0='HKBPON1MWH' where id=9; -update noar tt set v0='NWU3' where id=9; -update noar ti set v0='NWU3' where id=9; -update noar tt set b1='EX0LFK3' where id=9; -update noar ti set b1='EX0LFK3' where id=9; -update noar tt set v0='YTHC79D5I4WVO9FH' where id=9; -update noar ti set v0='YTHC79D5I4WVO9FH' where id=9; -update noar tt set b2='U00GJFWOZ2SAYZT4N2' where id=9; -update noar ti set b2='U00GJFWOZ2SAYZT4N2' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 tinyblob null, - b1 mediumblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='HM' where id=1; -update noar ti set v0='HM' where id=1; -update noar tt set b0='8BTHL' where id=1; -update noar ti set b0='8BTHL' where id=1; -update noar tt set v0='8MKDG23NFZLJWTF' where id=1; -update noar ti set v0='8MKDG23NFZLJWTF' where id=1; -update noar tt set b1='KIMS0DA175NQ05ORSYNQ3QRW23G4' where id=1; -update noar ti set b1='KIMS0DA175NQ05ORSYNQ3QRW23G4' where id=1; -update noar tt set v0='ZBTEB4ULU8EOZZPPG9' where id=1; -update noar ti set v0='ZBTEB4ULU8EOZZPPG9' where id=1; -update noar tt set b2='V3RNJPQ' where id=1; -update noar ti set b2='V3RNJPQ' where id=1; -update noar tt set v0='2U3QNSF5ZW5VHE0EP08G8NR2IVS3' where id=2; -update noar ti set v0='2U3QNSF5ZW5VHE0EP08G8NR2IVS3' where id=2; -update noar tt set b0='5CF5WFDWFEFMIHX6KMR3PQR1LZQ' where id=2; -update noar ti set b0='5CF5WFDWFEFMIHX6KMR3PQR1LZQ' where id=2; -update noar tt set v0='NG19R' where id=2; -update noar ti set v0='NG19R' where id=2; -update noar tt set b1='QYE4IM2KIEKLG6KZAZKPF46' where id=2; -update noar ti set b1='QYE4IM2KIEKLG6KZAZKPF46' where id=2; -update noar tt set v0='55114R43T0ERGU93MFTRC9' where id=2; -update noar ti set v0='55114R43T0ERGU93MFTRC9' where id=2; -update noar tt set b2='1LGJ' where id=2; -update noar ti set b2='1LGJ' where id=2; -update noar tt set v0='1RZMQ8X' where id=3; -update noar ti set v0='1RZMQ8X' where id=3; -update noar tt set b0='LCM3QDM77M56YCHKH' where id=3; -update noar ti set b0='LCM3QDM77M56YCHKH' where id=3; -update noar tt set v0='DSYQ2ECLVV5P' where id=3; -update noar ti set v0='DSYQ2ECLVV5P' where id=3; -update noar tt set b1='DNZZAGL1HEUPOUGCDHZ0I7PJQUKX' where id=3; -update noar ti set b1='DNZZAGL1HEUPOUGCDHZ0I7PJQUKX' where id=3; -update noar tt set v0='NEUT73' where id=3; -update noar ti set v0='NEUT73' where id=3; -update noar tt set b2='45TSMC6UZN9FH2NLRES8QJM' where id=3; -update noar ti set b2='45TSMC6UZN9FH2NLRES8QJM' where id=3; -update noar tt set v0='6TTHF46W58QLZVVHODB' where id=4; -update noar ti set v0='6TTHF46W58QLZVVHODB' where id=4; -update noar tt set b0='KWH1KZX0XP5' where id=4; -update noar ti set b0='KWH1KZX0XP5' where id=4; -update noar tt set v0='0PC98G0EA3NA9P5WGPXP' where id=4; -update noar ti set v0='0PC98G0EA3NA9P5WGPXP' where id=4; -update noar tt set b1='BIJULJHMJNM74D0J6IZ0XD33' where id=4; -update noar ti set b1='BIJULJHMJNM74D0J6IZ0XD33' where id=4; -update noar tt set v0='UL9YLYH777C1IS23VK11D2UL7' where id=4; -update noar ti set v0='UL9YLYH777C1IS23VK11D2UL7' where id=4; -update noar tt set b2='6' where id=4; -update noar ti set b2='6' where id=4; -update noar tt set v0='Q26V9LP3493G' where id=5; -update noar ti set v0='Q26V9LP3493G' where id=5; -update noar tt set b0='GQ73ASURRUXH6KE3S3QDT' where id=5; -update noar ti set b0='GQ73ASURRUXH6KE3S3QDT' where id=5; -update noar tt set v0='GV7EOXB4YN6' where id=5; -update noar ti set v0='GV7EOXB4YN6' where id=5; -update noar tt set b1='FCAC31GCZROZ8P4YKU53KO02EGSOBS' where id=5; -update noar ti set b1='FCAC31GCZROZ8P4YKU53KO02EGSOBS' where id=5; -update noar tt set v0='93' where id=5; -update noar ti set v0='93' where id=5; -update noar tt set b2='D2IKRWKYI6UO0TTD0Q4I14KGMY' where id=5; -update noar ti set b2='D2IKRWKYI6UO0TTD0Q4I14KGMY' where id=5; -update noar tt set v0='TX7X08IQOJ3ZS3VZ' where id=6; -update noar ti set v0='TX7X08IQOJ3ZS3VZ' where id=6; -update noar tt set b0='MC9K' where id=6; -update noar ti set b0='MC9K' where id=6; -update noar tt set v0='ZG' where id=6; -update noar ti set v0='ZG' where id=6; -update noar tt set b1='2OFU' where id=6; -update noar ti set b1='2OFU' where id=6; -update noar tt set v0='07ZKU6QIAYFMUEWIR3' where id=6; -update noar ti set v0='07ZKU6QIAYFMUEWIR3' where id=6; -update noar tt set b2='RRPRZDG0LHEF5B5W7IPDCJB' where id=6; -update noar ti set b2='RRPRZDG0LHEF5B5W7IPDCJB' where id=6; -update noar tt set v0='6BN58TNZF9KZXT42QTNVKTJKLZF1J' where id=7; -update noar ti set v0='6BN58TNZF9KZXT42QTNVKTJKLZF1J' where id=7; -update noar tt set b0='5O2YQEK9AI2620ER86CY44CZNTNZM432' where id=7; -update noar ti set b0='5O2YQEK9AI2620ER86CY44CZNTNZM432' where id=7; -update noar tt set v0='ZZO2E' where id=7; -update noar ti set v0='ZZO2E' where id=7; -update noar tt set b1='JYOKZLILZV2CVJG5ETY0W8GQZM4A' where id=7; -update noar ti set b1='JYOKZLILZV2CVJG5ETY0W8GQZM4A' where id=7; -update noar tt set v0='1FE5KOFQH' where id=7; -update noar ti set v0='1FE5KOFQH' where id=7; -update noar tt set b2='KIAFNJQOWN4' where id=7; -update noar ti set b2='KIAFNJQOWN4' where id=7; -update noar tt set v0='KLEB57PH6' where id=8; -update noar ti set v0='KLEB57PH6' where id=8; -update noar tt set b0='UK1624XW6PA19BJRGEXG0EEYOKTBU' where id=8; -update noar ti set b0='UK1624XW6PA19BJRGEXG0EEYOKTBU' where id=8; -update noar tt set v0='OUBBH5KT8IUEACEI19XSKBRZYSCXTBB' where id=8; -update noar ti set v0='OUBBH5KT8IUEACEI19XSKBRZYSCXTBB' where id=8; -update noar tt set b1='Q0QSXIQRRJ9D' where id=8; -update noar ti set b1='Q0QSXIQRRJ9D' where id=8; -update noar tt set v0='HUY5N13QZKGIEXYIFPZQWB8D' where id=8; -update noar ti set v0='HUY5N13QZKGIEXYIFPZQWB8D' where id=8; -update noar tt set b2='Z862C6BE33SV6SK923PFT9EPE6V' where id=8; -update noar ti set b2='Z862C6BE33SV6SK923PFT9EPE6V' where id=8; -update noar tt set v0='SKPQKSXDULQHF6ZAKR6X99PF9FRWQ' where id=9; -update noar ti set v0='SKPQKSXDULQHF6ZAKR6X99PF9FRWQ' where id=9; -update noar tt set b0='9TUB5PX90' where id=9; -update noar ti set b0='9TUB5PX90' where id=9; -update noar tt set v0='XG2KJ2V9QU1Q1ET0T67H06' where id=9; -update noar ti set v0='XG2KJ2V9QU1Q1ET0T67H06' where id=9; -update noar tt set b1='Q865T' where id=9; -update noar ti set b1='Q865T' where id=9; -update noar tt set v0='XYWSGSEDR' where id=9; -update noar ti set v0='XYWSGSEDR' where id=9; -update noar tt set b2='08C5LC3LSYJ44LJRYVF95W' where id=9; -update noar ti set b2='08C5LC3LSYJ44LJRYVF95W' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 tinyblob null, - b1 mediumblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='Z6MC9LT99X1' where id=1; -update noar ti set v0='Z6MC9LT99X1' where id=1; -update noar tt set b0='XH300J6J983' where id=1; -update noar ti set b0='XH300J6J983' where id=1; -update noar tt set v0='88SON644E4G96H7MEEI8NCP06GMD' where id=1; -update noar ti set v0='88SON644E4G96H7MEEI8NCP06GMD' where id=1; -update noar tt set b1='5G3XFS2ECEYA56A7I82L8E9WUQOOF' where id=1; -update noar ti set b1='5G3XFS2ECEYA56A7I82L8E9WUQOOF' where id=1; -update noar tt set v0='8' where id=1; -update noar ti set v0='8' where id=1; -update noar tt set b2='5Z7PQTNT269JKJFY' where id=1; -update noar ti set b2='5Z7PQTNT269JKJFY' where id=1; -update noar tt set v0='PX1BAY' where id=2; -update noar ti set v0='PX1BAY' where id=2; -update noar tt set b0='08KOGS1P' where id=2; -update noar ti set b0='08KOGS1P' where id=2; -update noar tt set v0='QB3R1ZXJNNW69U7TR90FSHR' where id=2; -update noar ti set v0='QB3R1ZXJNNW69U7TR90FSHR' where id=2; -update noar tt set b1='LCQ8H6PHSUHY1V0RD6Y81NP0' where id=2; -update noar ti set b1='LCQ8H6PHSUHY1V0RD6Y81NP0' where id=2; -update noar tt set v0='EBYVS' where id=2; -update noar ti set v0='EBYVS' where id=2; -update noar tt set b2='4' where id=2; -update noar ti set b2='4' where id=2; -update noar tt set v0='XN8LK4RS3KTBU3Y07PZFLAKY744TI' where id=3; -update noar ti set v0='XN8LK4RS3KTBU3Y07PZFLAKY744TI' where id=3; -update noar tt set b0='XRCE' where id=3; -update noar ti set b0='XRCE' where id=3; -update noar tt set v0='9WQ3B9IAH8AD86' where id=3; -update noar ti set v0='9WQ3B9IAH8AD86' where id=3; -update noar tt set b1='RRAQC9JPMHK49UWVUITTPQ1O342XBBT' where id=3; -update noar ti set b1='RRAQC9JPMHK49UWVUITTPQ1O342XBBT' where id=3; -update noar tt set v0='C85XJ0NOL3WR' where id=3; -update noar ti set v0='C85XJ0NOL3WR' where id=3; -update noar tt set b2='7QQL' where id=3; -update noar ti set b2='7QQL' where id=3; -update noar tt set v0='QTLY6SIZF' where id=4; -update noar ti set v0='QTLY6SIZF' where id=4; -update noar tt set b0='D0TOKZ1M16Z7' where id=4; -update noar ti set b0='D0TOKZ1M16Z7' where id=4; -update noar tt set v0='1L5XMGZZ47' where id=4; -update noar ti set v0='1L5XMGZZ47' where id=4; -update noar tt set b1='JDBMWJ0585Q77MK3YPK' where id=4; -update noar ti set b1='JDBMWJ0585Q77MK3YPK' where id=4; -update noar tt set v0='O6' where id=4; -update noar ti set v0='O6' where id=4; -update noar tt set b2='JKE56' where id=4; -update noar ti set b2='JKE56' where id=4; -update noar tt set v0='N9Y' where id=5; -update noar ti set v0='N9Y' where id=5; -update noar tt set b0='RDO23FKPMW15RZ81UYW58Z2EA08VMF1' where id=5; -update noar ti set b0='RDO23FKPMW15RZ81UYW58Z2EA08VMF1' where id=5; -update noar tt set v0='CZMC02JSH2BT' where id=5; -update noar ti set v0='CZMC02JSH2BT' where id=5; -update noar tt set b1='QRX8SF' where id=5; -update noar ti set b1='QRX8SF' where id=5; -update noar tt set v0='05' where id=5; -update noar ti set v0='05' where id=5; -update noar tt set b2='QQ13I1WU5NZUCD4ETTYRTBD02HBXJCL' where id=5; -update noar ti set b2='QQ13I1WU5NZUCD4ETTYRTBD02HBXJCL' where id=5; -update noar tt set v0='YZ17Q07M0GS2KFK0AW84OWMQ14QF70' where id=6; -update noar ti set v0='YZ17Q07M0GS2KFK0AW84OWMQ14QF70' where id=6; -update noar tt set b0='2MWU5XMKQL' where id=6; -update noar ti set b0='2MWU5XMKQL' where id=6; -update noar tt set v0='85JRDBCM0LJQL6JCWZ2' where id=6; -update noar ti set v0='85JRDBCM0LJQL6JCWZ2' where id=6; -update noar tt set b1='QQVP7' where id=6; -update noar ti set b1='QQVP7' where id=6; -update noar tt set v0='EDXRUA6IT09DJ39' where id=6; -update noar ti set v0='EDXRUA6IT09DJ39' where id=6; -update noar tt set b2='CGC1UB1ATAH4VPP4C8FZCGNL0I' where id=6; -update noar ti set b2='CGC1UB1ATAH4VPP4C8FZCGNL0I' where id=6; -update noar tt set v0='GRN82' where id=7; -update noar ti set v0='GRN82' where id=7; -update noar tt set b0='2JHJJXG7F1WY5JVNPD0UT' where id=7; -update noar ti set b0='2JHJJXG7F1WY5JVNPD0UT' where id=7; -update noar tt set v0='Q38P61LQISWWP8LV7' where id=7; -update noar ti set v0='Q38P61LQISWWP8LV7' where id=7; -update noar tt set b1='94INXVGRQH' where id=7; -update noar ti set b1='94INXVGRQH' where id=7; -update noar tt set v0='D8R2GJU0FJAJN4MK4V20RVWK4C9' where id=7; -update noar ti set v0='D8R2GJU0FJAJN4MK4V20RVWK4C9' where id=7; -update noar tt set b2='0VLKQ2' where id=7; -update noar ti set b2='0VLKQ2' where id=7; -update noar tt set v0='G7WKORB811774EKUZNLCC8' where id=8; -update noar ti set v0='G7WKORB811774EKUZNLCC8' where id=8; -update noar tt set b0='E37LJNWMFVSKSW5JOQK4PHY2P' where id=8; -update noar ti set b0='E37LJNWMFVSKSW5JOQK4PHY2P' where id=8; -update noar tt set v0='JHDQ3' where id=8; -update noar ti set v0='JHDQ3' where id=8; -update noar tt set b1='XEXH725N652DIPRV8S2E6' where id=8; -update noar ti set b1='XEXH725N652DIPRV8S2E6' where id=8; -update noar tt set v0='17SSPHKD6' where id=8; -update noar ti set v0='17SSPHKD6' where id=8; -update noar tt set b2='EJ4RS6PTXPELYS3PFPDLWGKC1KYKZ5PM' where id=8; -update noar ti set b2='EJ4RS6PTXPELYS3PFPDLWGKC1KYKZ5PM' where id=8; -update noar tt set v0='R' where id=9; -update noar ti set v0='R' where id=9; -update noar tt set b0='961GDPZS7WIZKYITDUK4HYE6D' where id=9; -update noar ti set b0='961GDPZS7WIZKYITDUK4HYE6D' where id=9; -update noar tt set v0='2R7QAR7R1FCONMD6YUMYIN2OUSQMIFR' where id=9; -update noar ti set v0='2R7QAR7R1FCONMD6YUMYIN2OUSQMIFR' where id=9; -update noar tt set b1='9' where id=9; -update noar ti set b1='9' where id=9; -update noar tt set v0='I' where id=9; -update noar ti set v0='I' where id=9; -update noar tt set b2='N' where id=9; -update noar ti set b2='N' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 tinyblob not null, - b1 mediumblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='KTZX79UNGPJHNIIQ9NBU285A3W4KQ7Y' where id=1; -update noar ti set v0='KTZX79UNGPJHNIIQ9NBU285A3W4KQ7Y' where id=1; -update noar tt set b0='L8OV1JXWHLBR7H9576' where id=1; -update noar ti set b0='L8OV1JXWHLBR7H9576' where id=1; -update noar tt set v0='BMTDO6CDG' where id=1; -update noar ti set v0='BMTDO6CDG' where id=1; -update noar tt set b1='G8G9M2ZM4C3WFQD9FHNK66' where id=1; -update noar ti set b1='G8G9M2ZM4C3WFQD9FHNK66' where id=1; -update noar tt set v0='6WJ02TMOVO32R95I' where id=1; -update noar ti set v0='6WJ02TMOVO32R95I' where id=1; -update noar tt set b2='CA4T8CJO3ZMM' where id=1; -update noar ti set b2='CA4T8CJO3ZMM' where id=1; -update noar tt set v0='5DT354L8FC3BFSXKG9169LHKG0YD1I' where id=2; -update noar ti set v0='5DT354L8FC3BFSXKG9169LHKG0YD1I' where id=2; -update noar tt set b0='ZECK6DC4' where id=2; -update noar ti set b0='ZECK6DC4' where id=2; -update noar tt set v0='7GFA42TD4OCU11UO9CGY' where id=2; -update noar ti set v0='7GFA42TD4OCU11UO9CGY' where id=2; -update noar tt set b1='ZM5ZPICCCSBMA3KWU13BI2W9' where id=2; -update noar ti set b1='ZM5ZPICCCSBMA3KWU13BI2W9' where id=2; -update noar tt set v0='UKTDWU3SXB93EO6V6' where id=2; -update noar ti set v0='UKTDWU3SXB93EO6V6' where id=2; -update noar tt set b2='4YHT022F' where id=2; -update noar ti set b2='4YHT022F' where id=2; -update noar tt set v0='F6O793' where id=3; -update noar ti set v0='F6O793' where id=3; -update noar tt set b0='VMG89W04EG' where id=3; -update noar ti set b0='VMG89W04EG' where id=3; -update noar tt set v0='QD3F837L3TVXN1O15DWFOZLGKG9G9SQ3' where id=3; -update noar ti set v0='QD3F837L3TVXN1O15DWFOZLGKG9G9SQ3' where id=3; -update noar tt set b1='QC5XH78HKAO9MPCI' where id=3; -update noar ti set b1='QC5XH78HKAO9MPCI' where id=3; -update noar tt set v0='14QP752GNIIWKY5HS7' where id=3; -update noar ti set v0='14QP752GNIIWKY5HS7' where id=3; -update noar tt set b2='6PK5D4D04TY496F31KB6ZM52BHLY' where id=3; -update noar ti set b2='6PK5D4D04TY496F31KB6ZM52BHLY' where id=3; -update noar tt set v0='E006OJFKG25VG0GJEUO8ZX0SNKFW2M7' where id=4; -update noar ti set v0='E006OJFKG25VG0GJEUO8ZX0SNKFW2M7' where id=4; -update noar tt set b0='A5SAGD2S' where id=4; -update noar ti set b0='A5SAGD2S' where id=4; -update noar tt set v0='ZBPEL52CCNM' where id=4; -update noar ti set v0='ZBPEL52CCNM' where id=4; -update noar tt set b1='4SS9JG9UR325X58OKOHECO8' where id=4; -update noar ti set b1='4SS9JG9UR325X58OKOHECO8' where id=4; -update noar tt set v0='Z5AK5' where id=4; -update noar ti set v0='Z5AK5' where id=4; -update noar tt set b2='CJIDWOHK0Y2GO6CECSZ' where id=4; -update noar ti set b2='CJIDWOHK0Y2GO6CECSZ' where id=4; -update noar tt set v0='1A1H5UE' where id=5; -update noar ti set v0='1A1H5UE' where id=5; -update noar tt set b0='O2UVU2GMCO21CYAM' where id=5; -update noar ti set b0='O2UVU2GMCO21CYAM' where id=5; -update noar tt set v0='666X7Y5VUHBD3AD5U3ZWPVX2H' where id=5; -update noar ti set v0='666X7Y5VUHBD3AD5U3ZWPVX2H' where id=5; -update noar tt set b1='IIM1NKDPK3GSEV7TBO7WTZYK4C9' where id=5; -update noar ti set b1='IIM1NKDPK3GSEV7TBO7WTZYK4C9' where id=5; -update noar tt set v0='NJF06983RRB2PY5GV6O7' where id=5; -update noar ti set v0='NJF06983RRB2PY5GV6O7' where id=5; -update noar tt set b2='6QJF6NRS2YOGCX7Y5IAK31SVKBDTDG' where id=5; -update noar ti set b2='6QJF6NRS2YOGCX7Y5IAK31SVKBDTDG' where id=5; -update noar tt set v0='374FT1FSJBDV' where id=6; -update noar ti set v0='374FT1FSJBDV' where id=6; -update noar tt set b0='AAAHG7SKBXTQQTY2A9DK0WZ4' where id=6; -update noar ti set b0='AAAHG7SKBXTQQTY2A9DK0WZ4' where id=6; -update noar tt set v0='GO5633ADRLSIS1AWT7MMGK' where id=6; -update noar ti set v0='GO5633ADRLSIS1AWT7MMGK' where id=6; -update noar tt set b1='K23CKVW0N0SRYF5ZW066VMXT' where id=6; -update noar ti set b1='K23CKVW0N0SRYF5ZW066VMXT' where id=6; -update noar tt set v0='V1VWDPMOZUILZE1' where id=6; -update noar ti set v0='V1VWDPMOZUILZE1' where id=6; -update noar tt set b2='8JVZFI0KTX' where id=6; -update noar ti set b2='8JVZFI0KTX' where id=6; -update noar tt set v0='IJPPPGATDQ6UKMSZ6Z0EEW7' where id=7; -update noar ti set v0='IJPPPGATDQ6UKMSZ6Z0EEW7' where id=7; -update noar tt set b0='7F5UAY90CRRV7' where id=7; -update noar ti set b0='7F5UAY90CRRV7' where id=7; -update noar tt set v0='LMYWP8RSKQMBR' where id=7; -update noar ti set v0='LMYWP8RSKQMBR' where id=7; -update noar tt set b1='81YYVJGEGLU26XBSSJ49F1G28L0HA' where id=7; -update noar ti set b1='81YYVJGEGLU26XBSSJ49F1G28L0HA' where id=7; -update noar tt set v0='C' where id=7; -update noar ti set v0='C' where id=7; -update noar tt set b2='01DEHIO31S5B9OW1H2T940Z6TWPC9GG' where id=7; -update noar ti set b2='01DEHIO31S5B9OW1H2T940Z6TWPC9GG' where id=7; -update noar tt set v0='UCLCK3VH2INBS75R1F1E8D6DRCT' where id=8; -update noar ti set v0='UCLCK3VH2INBS75R1F1E8D6DRCT' where id=8; -update noar tt set b0='C150BK9GYYUZO870ALT' where id=8; -update noar ti set b0='C150BK9GYYUZO870ALT' where id=8; -update noar tt set v0='JRAA20' where id=8; -update noar ti set v0='JRAA20' where id=8; -update noar tt set b1='FER8Z8XSFGMX' where id=8; -update noar ti set b1='FER8Z8XSFGMX' where id=8; -update noar tt set v0='S40MUZ2NBKUN97CE5B3UU0MCX4W9R22' where id=8; -update noar ti set v0='S40MUZ2NBKUN97CE5B3UU0MCX4W9R22' where id=8; -update noar tt set b2='8' where id=8; -update noar ti set b2='8' where id=8; -update noar tt set v0='24JFCJ1PFNS8QB5PMTH88ACJV0W' where id=9; -update noar ti set v0='24JFCJ1PFNS8QB5PMTH88ACJV0W' where id=9; -update noar tt set b0='8DKBV5L70PQMGFNPJ2RFDZT' where id=9; -update noar ti set b0='8DKBV5L70PQMGFNPJ2RFDZT' where id=9; -update noar tt set v0='AHTWSYB5QRTCR2RZSCF5M' where id=9; -update noar ti set v0='AHTWSYB5QRTCR2RZSCF5M' where id=9; -update noar tt set b1='KCKWGGMMQG578CJCZC3TFXGKM09246Y7' where id=9; -update noar ti set b1='KCKWGGMMQG578CJCZC3TFXGKM09246Y7' where id=9; -update noar tt set v0='UWBS48E3KSC22R' where id=9; -update noar ti set v0='UWBS48E3KSC22R' where id=9; -update noar tt set b2='2H5FQ97DBTT304Q6SS' where id=9; -update noar ti set b2='2H5FQ97DBTT304Q6SS' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 tinyblob not null, - b1 mediumblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='IK3O4OZPGR67G8R8' where id=1; -update noar ti set v0='IK3O4OZPGR67G8R8' where id=1; -update noar tt set b0='ZI7HHGFTCEPLVP' where id=1; -update noar ti set b0='ZI7HHGFTCEPLVP' where id=1; -update noar tt set v0='HLBEUE4BXWEHNF53' where id=1; -update noar ti set v0='HLBEUE4BXWEHNF53' where id=1; -update noar tt set b1='UKJ5BRPH03SU' where id=1; -update noar ti set b1='UKJ5BRPH03SU' where id=1; -update noar tt set v0='B2' where id=1; -update noar ti set v0='B2' where id=1; -update noar tt set b2='9BMFN46L962BOZ7RBPMJGJ7R1TEN1' where id=1; -update noar ti set b2='9BMFN46L962BOZ7RBPMJGJ7R1TEN1' where id=1; -update noar tt set v0='4RDXRJKV576C9LY' where id=2; -update noar ti set v0='4RDXRJKV576C9LY' where id=2; -update noar tt set b0='L8IIOXUHR8N3AVSF0ESD97W' where id=2; -update noar ti set b0='L8IIOXUHR8N3AVSF0ESD97W' where id=2; -update noar tt set v0='L45U12VZZ5L4HONYU' where id=2; -update noar ti set v0='L45U12VZZ5L4HONYU' where id=2; -update noar tt set b1='BXLHX1U5AYX2ZU6KHV' where id=2; -update noar ti set b1='BXLHX1U5AYX2ZU6KHV' where id=2; -update noar tt set v0='1U8ZW9O8Q' where id=2; -update noar ti set v0='1U8ZW9O8Q' where id=2; -update noar tt set b2='UR03VNA1FPJZ6' where id=2; -update noar ti set b2='UR03VNA1FPJZ6' where id=2; -update noar tt set v0='KMJDBR2X0S0U0CF3YKCBNN4BLZDI3' where id=3; -update noar ti set v0='KMJDBR2X0S0U0CF3YKCBNN4BLZDI3' where id=3; -update noar tt set b0='TMSD6CWNR1XIJAO4I82W' where id=3; -update noar ti set b0='TMSD6CWNR1XIJAO4I82W' where id=3; -update noar tt set v0='9YMNI9' where id=3; -update noar ti set v0='9YMNI9' where id=3; -update noar tt set b1='2YCWMLAREXU' where id=3; -update noar ti set b1='2YCWMLAREXU' where id=3; -update noar tt set v0='WCVBE3X4J90UW6RHYORRW6Z' where id=3; -update noar ti set v0='WCVBE3X4J90UW6RHYORRW6Z' where id=3; -update noar tt set b2='ZBM1R2V' where id=3; -update noar ti set b2='ZBM1R2V' where id=3; -update noar tt set v0='5J9AR8JULEFFSQS6KW4SL18X64VF900' where id=4; -update noar ti set v0='5J9AR8JULEFFSQS6KW4SL18X64VF900' where id=4; -update noar tt set b0='P26MAU7NKSX4YTH09U2HUHT20H' where id=4; -update noar ti set b0='P26MAU7NKSX4YTH09U2HUHT20H' where id=4; -update noar tt set v0='HN7S0NKLSVTM' where id=4; -update noar ti set v0='HN7S0NKLSVTM' where id=4; -update noar tt set b1='VPQFB' where id=4; -update noar ti set b1='VPQFB' where id=4; -update noar tt set v0='42' where id=4; -update noar ti set v0='42' where id=4; -update noar tt set b2='94PHMFAZ9SV9KFKNYLWSE3AV0D0NXYZ8' where id=4; -update noar ti set b2='94PHMFAZ9SV9KFKNYLWSE3AV0D0NXYZ8' where id=4; -update noar tt set v0='ST4ZELCMLUY' where id=5; -update noar ti set v0='ST4ZELCMLUY' where id=5; -update noar tt set b0='SHWROHBW2HXJU0NG' where id=5; -update noar ti set b0='SHWROHBW2HXJU0NG' where id=5; -update noar tt set v0='83MLF9TJCUD3XYGD90ICFM7' where id=5; -update noar ti set v0='83MLF9TJCUD3XYGD90ICFM7' where id=5; -update noar tt set b1='SUH7MUQAOWG' where id=5; -update noar ti set b1='SUH7MUQAOWG' where id=5; -update noar tt set v0='X40Y2D' where id=5; -update noar ti set v0='X40Y2D' where id=5; -update noar tt set b2='1TCIELI8ZDSFHHCUBDO' where id=5; -update noar ti set b2='1TCIELI8ZDSFHHCUBDO' where id=5; -update noar tt set v0='WFZV5VX92KQ' where id=6; -update noar ti set v0='WFZV5VX92KQ' where id=6; -update noar tt set b0='D5J0SIX2EPIXF' where id=6; -update noar ti set b0='D5J0SIX2EPIXF' where id=6; -update noar tt set v0='EL7T93UUF2DHFZPG503ES0' where id=6; -update noar ti set v0='EL7T93UUF2DHFZPG503ES0' where id=6; -update noar tt set b1='KNAYRD3KPHE1QM1Y713DNGWJP' where id=6; -update noar ti set b1='KNAYRD3KPHE1QM1Y713DNGWJP' where id=6; -update noar tt set v0='VF8GDPT' where id=6; -update noar ti set v0='VF8GDPT' where id=6; -update noar tt set b2='N1EZMSO84UL115J' where id=6; -update noar ti set b2='N1EZMSO84UL115J' where id=6; -update noar tt set v0='N3BTZSWNROL0B75LZDBIQKRKS' where id=7; -update noar ti set v0='N3BTZSWNROL0B75LZDBIQKRKS' where id=7; -update noar tt set b0='7LV5BR' where id=7; -update noar ti set b0='7LV5BR' where id=7; -update noar tt set v0='OM850' where id=7; -update noar ti set v0='OM850' where id=7; -update noar tt set b1='IAGDUCY7FD522GOADVUWB8XGERIII' where id=7; -update noar ti set b1='IAGDUCY7FD522GOADVUWB8XGERIII' where id=7; -update noar tt set v0='MT8U4FFH9DPNN2CH39SZCR9' where id=7; -update noar ti set v0='MT8U4FFH9DPNN2CH39SZCR9' where id=7; -update noar tt set b2='BJPQHQ9N3Y' where id=7; -update noar ti set b2='BJPQHQ9N3Y' where id=7; -update noar tt set v0='SWPISUK0VT11H6GWQM1' where id=8; -update noar ti set v0='SWPISUK0VT11H6GWQM1' where id=8; -update noar tt set b0='3JUL' where id=8; -update noar ti set b0='3JUL' where id=8; -update noar tt set v0='15HA6QF1V3YWR' where id=8; -update noar ti set v0='15HA6QF1V3YWR' where id=8; -update noar tt set b1='H9G80FRHBNBW13DTXR3FZDF5S' where id=8; -update noar ti set b1='H9G80FRHBNBW13DTXR3FZDF5S' where id=8; -update noar tt set v0='RVPMIYTXHJLK084' where id=8; -update noar ti set v0='RVPMIYTXHJLK084' where id=8; -update noar tt set b2='41DS9W79WWPE0D01RSROTEAUHTDU' where id=8; -update noar ti set b2='41DS9W79WWPE0D01RSROTEAUHTDU' where id=8; -update noar tt set v0='MM' where id=9; -update noar ti set v0='MM' where id=9; -update noar tt set b0='YDNFR6V30PZUFKH33EE62ZO72XHYN0NQ' where id=9; -update noar ti set b0='YDNFR6V30PZUFKH33EE62ZO72XHYN0NQ' where id=9; -update noar tt set v0='VN' where id=9; -update noar ti set v0='VN' where id=9; -update noar tt set b1='O483YC2BYFHGL8SH' where id=9; -update noar ti set b1='O483YC2BYFHGL8SH' where id=9; -update noar tt set v0='IB0ILQ9GKHTWYHV8' where id=9; -update noar ti set v0='IB0ILQ9GKHTWYHV8' where id=9; -update noar tt set b2='M9NK' where id=9; -update noar ti set b2='M9NK' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 tinyblob null, - b1 mediumblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='3RNNJJH0A4TYPJJEEJBTIPBOCYDL1' where id=1; -update noar ti set v0='3RNNJJH0A4TYPJJEEJBTIPBOCYDL1' where id=1; -update noar tt set b0='UTMUQYOTEIH8EYTQ1PXGD036KRH7EO' where id=1; -update noar ti set b0='UTMUQYOTEIH8EYTQ1PXGD036KRH7EO' where id=1; -update noar tt set v0='7JN10Z7WSF62' where id=1; -update noar ti set v0='7JN10Z7WSF62' where id=1; -update noar tt set b1='FRPG4OYYL86GK2EQUROVDI76MY' where id=1; -update noar ti set b1='FRPG4OYYL86GK2EQUROVDI76MY' where id=1; -update noar tt set v0='QPF50RIQ' where id=1; -update noar ti set v0='QPF50RIQ' where id=1; -update noar tt set b2='ZUKCLHP1F41NKI8LSDH' where id=1; -update noar ti set b2='ZUKCLHP1F41NKI8LSDH' where id=1; -update noar tt set v0='BRSRC3O907XK' where id=2; -update noar ti set v0='BRSRC3O907XK' where id=2; -update noar tt set b0='JVPKLNR3RVE' where id=2; -update noar ti set b0='JVPKLNR3RVE' where id=2; -update noar tt set v0='SQ3HH4PM' where id=2; -update noar ti set v0='SQ3HH4PM' where id=2; -update noar tt set b1='UUQ4Q' where id=2; -update noar ti set b1='UUQ4Q' where id=2; -update noar tt set v0='BTYXN9ED4AYK27XSTE0E98Y5' where id=2; -update noar ti set v0='BTYXN9ED4AYK27XSTE0E98Y5' where id=2; -update noar tt set b2='R74K11LKR6C' where id=2; -update noar ti set b2='R74K11LKR6C' where id=2; -update noar tt set v0='H53OPQ' where id=3; -update noar ti set v0='H53OPQ' where id=3; -update noar tt set b0='7' where id=3; -update noar ti set b0='7' where id=3; -update noar tt set v0='H77B3NILXJ7DM186' where id=3; -update noar ti set v0='H77B3NILXJ7DM186' where id=3; -update noar tt set b1='Z4PZ8Q72VSV16TJQIE09HW8' where id=3; -update noar ti set b1='Z4PZ8Q72VSV16TJQIE09HW8' where id=3; -update noar tt set v0='9E6V4FNCJ9KZJWBCBX1OJ1OZ' where id=3; -update noar ti set v0='9E6V4FNCJ9KZJWBCBX1OJ1OZ' where id=3; -update noar tt set b2='LUC3I230BND' where id=3; -update noar ti set b2='LUC3I230BND' where id=3; -update noar tt set v0='KT6BJHN0PMU3CV3PI64DAEX7M8PF' where id=4; -update noar ti set v0='KT6BJHN0PMU3CV3PI64DAEX7M8PF' where id=4; -update noar tt set b0='WSVOMU6D' where id=4; -update noar ti set b0='WSVOMU6D' where id=4; -update noar tt set v0='LPQKTTPJTVN990ZVERF6L1Z' where id=4; -update noar ti set v0='LPQKTTPJTVN990ZVERF6L1Z' where id=4; -update noar tt set b1='D8IH0SHPILGH1JSW' where id=4; -update noar ti set b1='D8IH0SHPILGH1JSW' where id=4; -update noar tt set v0='QFL1YESZ90QF6ORD4' where id=4; -update noar ti set v0='QFL1YESZ90QF6ORD4' where id=4; -update noar tt set b2='WEHJRGIFGBMZTX62D07MR5D' where id=4; -update noar ti set b2='WEHJRGIFGBMZTX62D07MR5D' where id=4; -update noar tt set v0='2KEGQWUIQT7CW804ZBORKQKP' where id=5; -update noar ti set v0='2KEGQWUIQT7CW804ZBORKQKP' where id=5; -update noar tt set b0='A5C8N7SNN8RR9M7JSGD' where id=5; -update noar ti set b0='A5C8N7SNN8RR9M7JSGD' where id=5; -update noar tt set v0='M8MUYPIY9' where id=5; -update noar ti set v0='M8MUYPIY9' where id=5; -update noar tt set b1='3BRY9ZOT3A' where id=5; -update noar ti set b1='3BRY9ZOT3A' where id=5; -update noar tt set v0='V827ION0JVZM' where id=5; -update noar ti set v0='V827ION0JVZM' where id=5; -update noar tt set b2='MUOVV2ZFNC4BW' where id=5; -update noar ti set b2='MUOVV2ZFNC4BW' where id=5; -update noar tt set v0='C' where id=6; -update noar ti set v0='C' where id=6; -update noar tt set b0='SOCRBYCOSLN1Q7G5OSCI83' where id=6; -update noar ti set b0='SOCRBYCOSLN1Q7G5OSCI83' where id=6; -update noar tt set v0='8' where id=6; -update noar ti set v0='8' where id=6; -update noar tt set b1='YZZOPHCQONPSMICM3' where id=6; -update noar ti set b1='YZZOPHCQONPSMICM3' where id=6; -update noar tt set v0='XSOZG2X0TEXV21FKWQVBH4B0CI2VVHP' where id=6; -update noar ti set v0='XSOZG2X0TEXV21FKWQVBH4B0CI2VVHP' where id=6; -update noar tt set b2='OY4UV4QDZXIT1TFMI' where id=6; -update noar ti set b2='OY4UV4QDZXIT1TFMI' where id=6; -update noar tt set v0='JSBHCBFRZXVS4E2' where id=7; -update noar ti set v0='JSBHCBFRZXVS4E2' where id=7; -update noar tt set b0='6QBJYEGIGB2RHENT3P' where id=7; -update noar ti set b0='6QBJYEGIGB2RHENT3P' where id=7; -update noar tt set v0='JU9ST' where id=7; -update noar ti set v0='JU9ST' where id=7; -update noar tt set b1='E288M5B8FMDVSGW2D0F4K3T8943PHX' where id=7; -update noar ti set b1='E288M5B8FMDVSGW2D0F4K3T8943PHX' where id=7; -update noar tt set v0='BY66U62V3YD0OV7TV6JGS1XOBWAG' where id=7; -update noar ti set v0='BY66U62V3YD0OV7TV6JGS1XOBWAG' where id=7; -update noar tt set b2='4A4GDK5WQA5IIAA2TJSU8WY1WKZ9W' where id=7; -update noar ti set b2='4A4GDK5WQA5IIAA2TJSU8WY1WKZ9W' where id=7; -update noar tt set v0='G4FLSSDT2OGHX753XWUHLF' where id=8; -update noar ti set v0='G4FLSSDT2OGHX753XWUHLF' where id=8; -update noar tt set b0='34RF' where id=8; -update noar ti set b0='34RF' where id=8; -update noar tt set v0='JJOVK4N4D7398C2' where id=8; -update noar ti set v0='JJOVK4N4D7398C2' where id=8; -update noar tt set b1='34QBK3BBNG9TK4ZD6R55HOKLQ' where id=8; -update noar ti set b1='34QBK3BBNG9TK4ZD6R55HOKLQ' where id=8; -update noar tt set v0='WQSAY37EF5JPGGWCQ' where id=8; -update noar ti set v0='WQSAY37EF5JPGGWCQ' where id=8; -update noar tt set b2='DUWHJEOKZ9ATZH' where id=8; -update noar ti set b2='DUWHJEOKZ9ATZH' where id=8; -update noar tt set v0='L1GL0ZLNZDQ21F8G7IEFLIZ' where id=9; -update noar ti set v0='L1GL0ZLNZDQ21F8G7IEFLIZ' where id=9; -update noar tt set b0='V' where id=9; -update noar ti set b0='V' where id=9; -update noar tt set v0='RND' where id=9; -update noar ti set v0='RND' where id=9; -update noar tt set b1='1VKTMVQGX75U6KH' where id=9; -update noar ti set b1='1VKTMVQGX75U6KH' where id=9; -update noar tt set v0='UFFBJNEZZ0VM5144NP8AJ4FGXZF5ML' where id=9; -update noar ti set v0='UFFBJNEZZ0VM5144NP8AJ4FGXZF5ML' where id=9; -update noar tt set b2='FY1Z6N8' where id=9; -update noar ti set b2='FY1Z6N8' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 tinyblob null, - b1 mediumblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='2R585KTYR61A' where id=1; -update noar ti set v0='2R585KTYR61A' where id=1; -update noar tt set b0='G3MLFCWOZ5ACJTX38EGWA' where id=1; -update noar ti set b0='G3MLFCWOZ5ACJTX38EGWA' where id=1; -update noar tt set v0='XLJ' where id=1; -update noar ti set v0='XLJ' where id=1; -update noar tt set b1='ZBIN95M5VQLQXR9H5J0AGGM2HG19Y87' where id=1; -update noar ti set b1='ZBIN95M5VQLQXR9H5J0AGGM2HG19Y87' where id=1; -update noar tt set v0='B3XNYDQ14OK51MSWC46JV7UWJ8U23' where id=1; -update noar ti set v0='B3XNYDQ14OK51MSWC46JV7UWJ8U23' where id=1; -update noar tt set b2='OF8KUUMTYQQZM10N605SMHQARIQ0GKD' where id=1; -update noar ti set b2='OF8KUUMTYQQZM10N605SMHQARIQ0GKD' where id=1; -update noar tt set v0='1TA8N0IZ' where id=2; -update noar ti set v0='1TA8N0IZ' where id=2; -update noar tt set b0='6A8IA0RDJ744236Z' where id=2; -update noar ti set b0='6A8IA0RDJ744236Z' where id=2; -update noar tt set v0='UZEEU0W6U77HLF' where id=2; -update noar ti set v0='UZEEU0W6U77HLF' where id=2; -update noar tt set b1='OHDCWMQ3' where id=2; -update noar ti set b1='OHDCWMQ3' where id=2; -update noar tt set v0='HUM5MR61PTDIWEZBZRJQ' where id=2; -update noar ti set v0='HUM5MR61PTDIWEZBZRJQ' where id=2; -update noar tt set b2='VCB' where id=2; -update noar ti set b2='VCB' where id=2; -update noar tt set v0='W' where id=3; -update noar ti set v0='W' where id=3; -update noar tt set b0='HFVVK3QLUXM3XVEJYA2JQPP4M' where id=3; -update noar ti set b0='HFVVK3QLUXM3XVEJYA2JQPP4M' where id=3; -update noar tt set v0='5JL7GT9GZHSTC66QUJOD9QDLGU' where id=3; -update noar ti set v0='5JL7GT9GZHSTC66QUJOD9QDLGU' where id=3; -update noar tt set b1='T0UR3OTVRB4V5QZK8UK' where id=3; -update noar ti set b1='T0UR3OTVRB4V5QZK8UK' where id=3; -update noar tt set v0='VGOSM5QHPAF' where id=3; -update noar ti set v0='VGOSM5QHPAF' where id=3; -update noar tt set b2='BW50ZHD20J98UTQAN0DGLZ5KLRW' where id=3; -update noar ti set b2='BW50ZHD20J98UTQAN0DGLZ5KLRW' where id=3; -update noar tt set v0='QMPYN2VOWMG3VJ7XB9SHRWKCMGLTJNMW' where id=4; -update noar ti set v0='QMPYN2VOWMG3VJ7XB9SHRWKCMGLTJNMW' where id=4; -update noar tt set b0='UOJ21YG46EVH5LQN' where id=4; -update noar ti set b0='UOJ21YG46EVH5LQN' where id=4; -update noar tt set v0='1SK3WZ' where id=4; -update noar ti set v0='1SK3WZ' where id=4; -update noar tt set b1='XVKV5V' where id=4; -update noar ti set b1='XVKV5V' where id=4; -update noar tt set v0='RHKR97DLPQJTNU6' where id=4; -update noar ti set v0='RHKR97DLPQJTNU6' where id=4; -update noar tt set b2='C92JZCTLTW1' where id=4; -update noar ti set b2='C92JZCTLTW1' where id=4; -update noar tt set v0='7A5A1GQ5RGCFPQIOID7JMLMZD4O7O' where id=5; -update noar ti set v0='7A5A1GQ5RGCFPQIOID7JMLMZD4O7O' where id=5; -update noar tt set b0='NULO36F6' where id=5; -update noar ti set b0='NULO36F6' where id=5; -update noar tt set v0='ZUPXVSXZWCDY294B0LX1SSCHHE' where id=5; -update noar ti set v0='ZUPXVSXZWCDY294B0LX1SSCHHE' where id=5; -update noar tt set b1='RE71VUMX1ZX1ACUYTM' where id=5; -update noar ti set b1='RE71VUMX1ZX1ACUYTM' where id=5; -update noar tt set v0='ZL6EUU4EXPKL' where id=5; -update noar ti set v0='ZL6EUU4EXPKL' where id=5; -update noar tt set b2='C8Y8W4V3BP4ZSH2' where id=5; -update noar ti set b2='C8Y8W4V3BP4ZSH2' where id=5; -update noar tt set v0='UH7U' where id=6; -update noar ti set v0='UH7U' where id=6; -update noar tt set b0='I92RZFVX1220IYMATRSOAGWH' where id=6; -update noar ti set b0='I92RZFVX1220IYMATRSOAGWH' where id=6; -update noar tt set v0='BNZSHCN3JNZQMB4NR' where id=6; -update noar ti set v0='BNZSHCN3JNZQMB4NR' where id=6; -update noar tt set b1='ERLZ1QHAHUYGHXEH55CNLP2ZNYIP' where id=6; -update noar ti set b1='ERLZ1QHAHUYGHXEH55CNLP2ZNYIP' where id=6; -update noar tt set v0='UD2UDBO3WMMHN195Y4WXMU1D6' where id=6; -update noar ti set v0='UD2UDBO3WMMHN195Y4WXMU1D6' where id=6; -update noar tt set b2='2Z3O3QSJREXG7GSAGAMBS07PWU' where id=6; -update noar ti set b2='2Z3O3QSJREXG7GSAGAMBS07PWU' where id=6; -update noar tt set v0='HIL0W541UEILJ7HZ3HRL5J9KF5W7N34R' where id=7; -update noar ti set v0='HIL0W541UEILJ7HZ3HRL5J9KF5W7N34R' where id=7; -update noar tt set b0='KYWFAN2BTIBFXSH7A6OJDO' where id=7; -update noar ti set b0='KYWFAN2BTIBFXSH7A6OJDO' where id=7; -update noar tt set v0='Z49I8QYOU0NRP3KON' where id=7; -update noar ti set v0='Z49I8QYOU0NRP3KON' where id=7; -update noar tt set b1='MT0USM' where id=7; -update noar ti set b1='MT0USM' where id=7; -update noar tt set v0='4UD83QCJMBMXSHIXG' where id=7; -update noar ti set v0='4UD83QCJMBMXSHIXG' where id=7; -update noar tt set b2='YMKNAWULH2NP29WYAC9WQW76R1' where id=7; -update noar ti set b2='YMKNAWULH2NP29WYAC9WQW76R1' where id=7; -update noar tt set v0='6LM8JVZRTIL0XRF6T3W31H' where id=8; -update noar ti set v0='6LM8JVZRTIL0XRF6T3W31H' where id=8; -update noar tt set b0='OGBCZDEGLCGHOOK27AM3' where id=8; -update noar ti set b0='OGBCZDEGLCGHOOK27AM3' where id=8; -update noar tt set v0='F7GXBSH3CXFESWID3IY2ZN9ZEM3' where id=8; -update noar ti set v0='F7GXBSH3CXFESWID3IY2ZN9ZEM3' where id=8; -update noar tt set b1='1P79ZHCITKST8VJ6R7LATB47ROMPA' where id=8; -update noar ti set b1='1P79ZHCITKST8VJ6R7LATB47ROMPA' where id=8; -update noar tt set v0='VWGDZ2R0MIR4D' where id=8; -update noar ti set v0='VWGDZ2R0MIR4D' where id=8; -update noar tt set b2='O5JR5GMFPN7W9AO' where id=8; -update noar ti set b2='O5JR5GMFPN7W9AO' where id=8; -update noar tt set v0='DAUFCU9NQJNM2MCJLM41FCLB83Y5MIAE' where id=9; -update noar ti set v0='DAUFCU9NQJNM2MCJLM41FCLB83Y5MIAE' where id=9; -update noar tt set b0='NSB8GDXEXD8M8U8UMBG2S0' where id=9; -update noar ti set b0='NSB8GDXEXD8M8U8UMBG2S0' where id=9; -update noar tt set v0='LT5IFUAQJF6C6RYLK6' where id=9; -update noar ti set v0='LT5IFUAQJF6C6RYLK6' where id=9; -update noar tt set b1='ICJM4B3V8' where id=9; -update noar ti set b1='ICJM4B3V8' where id=9; -update noar tt set v0='H7ERG6AT2UC1I' where id=9; -update noar ti set v0='H7ERG6AT2UC1I' where id=9; -update noar tt set b2='5FWALHL5TLWV4ON6BO75ARMR6QE93' where id=9; -update noar ti set b2='5FWALHL5TLWV4ON6BO75ARMR6QE93' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 tinyblob not null, - b1 mediumblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='O1A1O2PXT' where id=1; -update noar ti set v0='O1A1O2PXT' where id=1; -update noar tt set b0='MF5AL' where id=1; -update noar ti set b0='MF5AL' where id=1; -update noar tt set v0='JRCIBZTS7F' where id=1; -update noar ti set v0='JRCIBZTS7F' where id=1; -update noar tt set b1='GPCY83CCQW8GC2HC' where id=1; -update noar ti set b1='GPCY83CCQW8GC2HC' where id=1; -update noar tt set v0='ZF0MJ7FVXBU9JSZ2TS4GZE6QMA2' where id=1; -update noar ti set v0='ZF0MJ7FVXBU9JSZ2TS4GZE6QMA2' where id=1; -update noar tt set b2='DBCFLRUYAVWK2FNUW95' where id=1; -update noar ti set b2='DBCFLRUYAVWK2FNUW95' where id=1; -update noar tt set v0='G1OHG' where id=2; -update noar ti set v0='G1OHG' where id=2; -update noar tt set b0='GS3KIAS90OZN82AC9RYD' where id=2; -update noar ti set b0='GS3KIAS90OZN82AC9RYD' where id=2; -update noar tt set v0='EN9' where id=2; -update noar ti set v0='EN9' where id=2; -update noar tt set b1='QP' where id=2; -update noar ti set b1='QP' where id=2; -update noar tt set v0='8NOBJ4I0QAAOGL97EPW' where id=2; -update noar ti set v0='8NOBJ4I0QAAOGL97EPW' where id=2; -update noar tt set b2='ABHCW6SDN6EV2SC7SEIY447G' where id=2; -update noar ti set b2='ABHCW6SDN6EV2SC7SEIY447G' where id=2; -update noar tt set v0='SVAEG7W0XR7TYLRCL' where id=3; -update noar ti set v0='SVAEG7W0XR7TYLRCL' where id=3; -update noar tt set b0='417GW9T6LGLY5KEJGR0QKV6C5NBID' where id=3; -update noar ti set b0='417GW9T6LGLY5KEJGR0QKV6C5NBID' where id=3; -update noar tt set v0='TN63GLN7CQK9K95RON57N83Y0NRIU' where id=3; -update noar ti set v0='TN63GLN7CQK9K95RON57N83Y0NRIU' where id=3; -update noar tt set b1='3B0UBCD2DHX4755L1SUG1TARG4CDNB' where id=3; -update noar ti set b1='3B0UBCD2DHX4755L1SUG1TARG4CDNB' where id=3; -update noar tt set v0='R9OAXCEKMALAKNDBL62LOXBVYMUE' where id=3; -update noar ti set v0='R9OAXCEKMALAKNDBL62LOXBVYMUE' where id=3; -update noar tt set b2='5JG092OA' where id=3; -update noar ti set b2='5JG092OA' where id=3; -update noar tt set v0='A' where id=4; -update noar ti set v0='A' where id=4; -update noar tt set b0='RQO9P512' where id=4; -update noar ti set b0='RQO9P512' where id=4; -update noar tt set v0='SVK15TYQ45PC' where id=4; -update noar ti set v0='SVK15TYQ45PC' where id=4; -update noar tt set b1='FMO8O4TSZ74N' where id=4; -update noar ti set b1='FMO8O4TSZ74N' where id=4; -update noar tt set v0='4YM4V' where id=4; -update noar ti set v0='4YM4V' where id=4; -update noar tt set b2='BC9FI2ZXQEFQZ5' where id=4; -update noar ti set b2='BC9FI2ZXQEFQZ5' where id=4; -update noar tt set v0='2BAH6JT1FW0TR2E7A' where id=5; -update noar ti set v0='2BAH6JT1FW0TR2E7A' where id=5; -update noar tt set b0='YRSTE5XBE' where id=5; -update noar ti set b0='YRSTE5XBE' where id=5; -update noar tt set v0='PM476HEE7SQ9R58EXAY7PI66EH0I' where id=5; -update noar ti set v0='PM476HEE7SQ9R58EXAY7PI66EH0I' where id=5; -update noar tt set b1='SX30XXLYHOST228UMDTEK1ZVK5U4J5DK' where id=5; -update noar ti set b1='SX30XXLYHOST228UMDTEK1ZVK5U4J5DK' where id=5; -update noar tt set v0='DQ0UUL' where id=5; -update noar ti set v0='DQ0UUL' where id=5; -update noar tt set b2='TCYGWW4OQMLVKWJBMCU85M7' where id=5; -update noar ti set b2='TCYGWW4OQMLVKWJBMCU85M7' where id=5; -update noar tt set v0='LHP0S8GD7CZS3MTSXPHDR86A' where id=6; -update noar ti set v0='LHP0S8GD7CZS3MTSXPHDR86A' where id=6; -update noar tt set b0='4AS65EE6OXZAXFQON6O580HBUYL' where id=6; -update noar ti set b0='4AS65EE6OXZAXFQON6O580HBUYL' where id=6; -update noar tt set v0='287LTAG2HN80ZLFR53CR5MCKW' where id=6; -update noar ti set v0='287LTAG2HN80ZLFR53CR5MCKW' where id=6; -update noar tt set b1='D1AJ6XYQ64947YV1548PIY2XVS87' where id=6; -update noar ti set b1='D1AJ6XYQ64947YV1548PIY2XVS87' where id=6; -update noar tt set v0='9WF8' where id=6; -update noar ti set v0='9WF8' where id=6; -update noar tt set b2='HE4CRUBPCCYKEPY2FI' where id=6; -update noar ti set b2='HE4CRUBPCCYKEPY2FI' where id=6; -update noar tt set v0='6DSRCP8J' where id=7; -update noar ti set v0='6DSRCP8J' where id=7; -update noar tt set b0='V8FVFQ' where id=7; -update noar ti set b0='V8FVFQ' where id=7; -update noar tt set v0='T64NCGR2ACG3UEM0M3RY9V4O1' where id=7; -update noar ti set v0='T64NCGR2ACG3UEM0M3RY9V4O1' where id=7; -update noar tt set b1='FCJAO17TBNJQI2' where id=7; -update noar ti set b1='FCJAO17TBNJQI2' where id=7; -update noar tt set v0='M2VRN127QI2KTAICIQ8PUVF' where id=7; -update noar ti set v0='M2VRN127QI2KTAICIQ8PUVF' where id=7; -update noar tt set b2='FUZCTE' where id=7; -update noar ti set b2='FUZCTE' where id=7; -update noar tt set v0='YJXZ2OO0DCXLND3VR971L' where id=8; -update noar ti set v0='YJXZ2OO0DCXLND3VR971L' where id=8; -update noar tt set b0='761VT8D8ZVOVVB' where id=8; -update noar ti set b0='761VT8D8ZVOVVB' where id=8; -update noar tt set v0='VQPHXF3IHY8XWCUEJSQA' where id=8; -update noar ti set v0='VQPHXF3IHY8XWCUEJSQA' where id=8; -update noar tt set b1='KWLB9XQC4G24' where id=8; -update noar ti set b1='KWLB9XQC4G24' where id=8; -update noar tt set v0='7UPTJXBAG3JQETIKMQJJH0XTGMDEF4' where id=8; -update noar ti set v0='7UPTJXBAG3JQETIKMQJJH0XTGMDEF4' where id=8; -update noar tt set b2='DTUN91TE' where id=8; -update noar ti set b2='DTUN91TE' where id=8; -update noar tt set v0='94O78OO94CRWGLM' where id=9; -update noar ti set v0='94O78OO94CRWGLM' where id=9; -update noar tt set b0='4IQ13N8SZ4QM8NADQJ5D6YKC9' where id=9; -update noar ti set b0='4IQ13N8SZ4QM8NADQJ5D6YKC9' where id=9; -update noar tt set v0='WIRTRYJ8B0NMPB8WTD55I4MV1R5' where id=9; -update noar ti set v0='WIRTRYJ8B0NMPB8WTD55I4MV1R5' where id=9; -update noar tt set b1='RGJ3HE9DOBT8Q5BWY' where id=9; -update noar ti set b1='RGJ3HE9DOBT8Q5BWY' where id=9; -update noar tt set v0='ZYZPCMMKJMB6E4OROUN4N2G5JXRR' where id=9; -update noar ti set v0='ZYZPCMMKJMB6E4OROUN4N2G5JXRR' where id=9; -update noar tt set b2='KNVYXA5JJWAPY6NWL' where id=9; -update noar ti set b2='KNVYXA5JJWAPY6NWL' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 tinyblob not null, - b1 mediumblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='4A7PLTN2R61TP8V957L1LZIWS2MQT6DD' where id=1; -update noar ti set v0='4A7PLTN2R61TP8V957L1LZIWS2MQT6DD' where id=1; -update noar tt set b0='SZ4S290JRQ1EB405NVJVYA' where id=1; -update noar ti set b0='SZ4S290JRQ1EB405NVJVYA' where id=1; -update noar tt set v0='VF8B69OS' where id=1; -update noar ti set v0='VF8B69OS' where id=1; -update noar tt set b1='SF8VXDGM61U4' where id=1; -update noar ti set b1='SF8VXDGM61U4' where id=1; -update noar tt set v0='8EYMQGIWIBZTSJ3V3CPPR98PX2MBE' where id=1; -update noar ti set v0='8EYMQGIWIBZTSJ3V3CPPR98PX2MBE' where id=1; -update noar tt set b2='IG6Q9JLGGJNPQLNBOS8P6HSM1C' where id=1; -update noar ti set b2='IG6Q9JLGGJNPQLNBOS8P6HSM1C' where id=1; -update noar tt set v0='RE2D6YSYU4DMKVDISKZJXEBG5' where id=2; -update noar ti set v0='RE2D6YSYU4DMKVDISKZJXEBG5' where id=2; -update noar tt set b0='7CJDZ05XVE' where id=2; -update noar ti set b0='7CJDZ05XVE' where id=2; -update noar tt set v0='H4YF052OA84JF' where id=2; -update noar ti set v0='H4YF052OA84JF' where id=2; -update noar tt set b1='HUO20RGN9QCGE5T2DW' where id=2; -update noar ti set b1='HUO20RGN9QCGE5T2DW' where id=2; -update noar tt set v0='PHQIDGUSJXAHFFLEV94CQREXV8CO0' where id=2; -update noar ti set v0='PHQIDGUSJXAHFFLEV94CQREXV8CO0' where id=2; -update noar tt set b2='9G0B9' where id=2; -update noar ti set b2='9G0B9' where id=2; -update noar tt set v0='6Y9J5LS9CCZMBKC' where id=3; -update noar ti set v0='6Y9J5LS9CCZMBKC' where id=3; -update noar tt set b0='K7039U41DBKCV71YCQDMEG' where id=3; -update noar ti set b0='K7039U41DBKCV71YCQDMEG' where id=3; -update noar tt set v0='J84DQPHWNHZ6K6AJTIJ69GUGREDMGR2C' where id=3; -update noar ti set v0='J84DQPHWNHZ6K6AJTIJ69GUGREDMGR2C' where id=3; -update noar tt set b1='URZJPKG64L' where id=3; -update noar ti set b1='URZJPKG64L' where id=3; -update noar tt set v0='YC2IFXQWUOGL2AP' where id=3; -update noar ti set v0='YC2IFXQWUOGL2AP' where id=3; -update noar tt set b2='41USV259' where id=3; -update noar ti set b2='41USV259' where id=3; -update noar tt set v0='X67ZRN1O1K7IBLGC2CUGJOZKZMN6C4' where id=4; -update noar ti set v0='X67ZRN1O1K7IBLGC2CUGJOZKZMN6C4' where id=4; -update noar tt set b0='FFVFBEZV7EZ' where id=4; -update noar ti set b0='FFVFBEZV7EZ' where id=4; -update noar tt set v0='FH81L79' where id=4; -update noar ti set v0='FH81L79' where id=4; -update noar tt set b1='YPKOTFOYYVHVJFYQNP32M' where id=4; -update noar ti set b1='YPKOTFOYYVHVJFYQNP32M' where id=4; -update noar tt set v0='6DJQM7LBVKL68YCT5UH6' where id=4; -update noar ti set v0='6DJQM7LBVKL68YCT5UH6' where id=4; -update noar tt set b2='A37BVEJZZOI1XC02N' where id=4; -update noar ti set b2='A37BVEJZZOI1XC02N' where id=4; -update noar tt set v0='1UVVDYLLRM' where id=5; -update noar ti set v0='1UVVDYLLRM' where id=5; -update noar tt set b0='729ZG1WVN1BELZG53QC' where id=5; -update noar ti set b0='729ZG1WVN1BELZG53QC' where id=5; -update noar tt set v0='IUG6E7PMDZGR0IHE5F3MII0B98' where id=5; -update noar ti set v0='IUG6E7PMDZGR0IHE5F3MII0B98' where id=5; -update noar tt set b1='HDM3IT6V3GZCV83' where id=5; -update noar ti set b1='HDM3IT6V3GZCV83' where id=5; -update noar tt set v0='G8ST0' where id=5; -update noar ti set v0='G8ST0' where id=5; -update noar tt set b2='46P6N' where id=5; -update noar ti set b2='46P6N' where id=5; -update noar tt set v0='52WADJ56O3J' where id=6; -update noar ti set v0='52WADJ56O3J' where id=6; -update noar tt set b0='60OIJY9K5C93B1015CNNT8UP' where id=6; -update noar ti set b0='60OIJY9K5C93B1015CNNT8UP' where id=6; -update noar tt set v0='9XG59G3RK6FY7PZ9LKT212CA1B3JIS' where id=6; -update noar ti set v0='9XG59G3RK6FY7PZ9LKT212CA1B3JIS' where id=6; -update noar tt set b1='VKRFVE4G9MI6PTYS7UAN' where id=6; -update noar ti set b1='VKRFVE4G9MI6PTYS7UAN' where id=6; -update noar tt set v0='3KOQ9H3F149L53R5A4RC84QJ6IW' where id=6; -update noar ti set v0='3KOQ9H3F149L53R5A4RC84QJ6IW' where id=6; -update noar tt set b2='KXQPECWYUWQPI4Y7RJXE47' where id=6; -update noar ti set b2='KXQPECWYUWQPI4Y7RJXE47' where id=6; -update noar tt set v0='M9GNVQH4V4DO6O3A98X0ODPHZPU65GC1' where id=7; -update noar ti set v0='M9GNVQH4V4DO6O3A98X0ODPHZPU65GC1' where id=7; -update noar tt set b0='G45C2MLHMMJS7U9SJR90' where id=7; -update noar ti set b0='G45C2MLHMMJS7U9SJR90' where id=7; -update noar tt set v0='SKHVJID72ULRNWLU48ZQ5LPJBOLPH' where id=7; -update noar ti set v0='SKHVJID72ULRNWLU48ZQ5LPJBOLPH' where id=7; -update noar tt set b1='KYJWCFK6P35VWWKXOK75M3OO' where id=7; -update noar ti set b1='KYJWCFK6P35VWWKXOK75M3OO' where id=7; -update noar tt set v0='Y2RWXQXR5B8GECVM7AUAN7YJB0FS958' where id=7; -update noar ti set v0='Y2RWXQXR5B8GECVM7AUAN7YJB0FS958' where id=7; -update noar tt set b2='AXPFVRQWCM2BZH7BNNY9BDELBEDIRVI' where id=7; -update noar ti set b2='AXPFVRQWCM2BZH7BNNY9BDELBEDIRVI' where id=7; -update noar tt set v0='BXB3IZ7HCTC4339LV3QN' where id=8; -update noar ti set v0='BXB3IZ7HCTC4339LV3QN' where id=8; -update noar tt set b0='PCQI97EI7OB6HD74' where id=8; -update noar ti set b0='PCQI97EI7OB6HD74' where id=8; -update noar tt set v0='66M4K2NART1' where id=8; -update noar ti set v0='66M4K2NART1' where id=8; -update noar tt set b1='LYUPXV67WQYRAKZZYBLIVXGGQ5GAL' where id=8; -update noar ti set b1='LYUPXV67WQYRAKZZYBLIVXGGQ5GAL' where id=8; -update noar tt set v0='MPYKI51OS2LWRGTH' where id=8; -update noar ti set v0='MPYKI51OS2LWRGTH' where id=8; -update noar tt set b2='7UEMPQWI4F' where id=8; -update noar ti set b2='7UEMPQWI4F' where id=8; -update noar tt set v0='4B1RBT1L8O29ZTT' where id=9; -update noar ti set v0='4B1RBT1L8O29ZTT' where id=9; -update noar tt set b0='MDEVA2CEOULTM0AYCXO8MG' where id=9; -update noar ti set b0='MDEVA2CEOULTM0AYCXO8MG' where id=9; -update noar tt set v0='6V24D0' where id=9; -update noar ti set v0='6V24D0' where id=9; -update noar tt set b1='O9SXTJY4SPQI3MVWMAMKX8ISIU9X' where id=9; -update noar ti set b1='O9SXTJY4SPQI3MVWMAMKX8ISIU9X' where id=9; -update noar tt set v0='4EF318TZIG71AL5LWEQQGD' where id=9; -update noar ti set v0='4EF318TZIG71AL5LWEQQGD' where id=9; -update noar tt set b2='BKHJRR4OIKXX8EABIM' where id=9; -update noar ti set b2='BKHJRR4OIKXX8EABIM' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 tinyblob null, - b1 mediumblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='HPZBU3P9GUSTWDKHX7F92M084' where id=1; -update noar ti set v0='HPZBU3P9GUSTWDKHX7F92M084' where id=1; -update noar tt set b0='MJUZ9K47OFMXW6N82QI2E0WJF' where id=1; -update noar ti set b0='MJUZ9K47OFMXW6N82QI2E0WJF' where id=1; -update noar tt set v0='9NBPN152DN55WS3FPQU' where id=1; -update noar ti set v0='9NBPN152DN55WS3FPQU' where id=1; -update noar tt set b1='8WFNIVJETT5K' where id=1; -update noar ti set b1='8WFNIVJETT5K' where id=1; -update noar tt set v0='WJBCQ0X7DQUA0F33617GD7' where id=1; -update noar ti set v0='WJBCQ0X7DQUA0F33617GD7' where id=1; -update noar tt set b2='KMY0AZASEM5I6RH06' where id=1; -update noar ti set b2='KMY0AZASEM5I6RH06' where id=1; -update noar tt set v0='29UXP1U' where id=2; -update noar ti set v0='29UXP1U' where id=2; -update noar tt set b0='AKLIRCX714DI9NCVD5H' where id=2; -update noar ti set b0='AKLIRCX714DI9NCVD5H' where id=2; -update noar tt set v0='9ZJUKEGQET7RVJYZRMC' where id=2; -update noar ti set v0='9ZJUKEGQET7RVJYZRMC' where id=2; -update noar tt set b1='EHGD7KMYJFO0' where id=2; -update noar ti set b1='EHGD7KMYJFO0' where id=2; -update noar tt set v0='SKLKYHD' where id=2; -update noar ti set v0='SKLKYHD' where id=2; -update noar tt set b2='3TQUZQ88PYOGUQ68' where id=2; -update noar ti set b2='3TQUZQ88PYOGUQ68' where id=2; -update noar tt set v0='P6O365U335KD0R5J9IHVS42T3BN' where id=3; -update noar ti set v0='P6O365U335KD0R5J9IHVS42T3BN' where id=3; -update noar tt set b0='PYLKH' where id=3; -update noar ti set b0='PYLKH' where id=3; -update noar tt set v0='FH5CISSDVBGEQ' where id=3; -update noar ti set v0='FH5CISSDVBGEQ' where id=3; -update noar tt set b1='CDOISD8PWDKVXJIGRIDGSKSU32' where id=3; -update noar ti set b1='CDOISD8PWDKVXJIGRIDGSKSU32' where id=3; -update noar tt set v0='9LLIKQQNZKQ5JEI' where id=3; -update noar ti set v0='9LLIKQQNZKQ5JEI' where id=3; -update noar tt set b2='D3ACYO' where id=3; -update noar ti set b2='D3ACYO' where id=3; -update noar tt set v0='3D877U3CPL4EVSPY4I4SKQCXSF' where id=4; -update noar ti set v0='3D877U3CPL4EVSPY4I4SKQCXSF' where id=4; -update noar tt set b0='DAKW5ZUFH45MI3' where id=4; -update noar ti set b0='DAKW5ZUFH45MI3' where id=4; -update noar tt set v0='0YWJPDCE1IDZ17E74K7' where id=4; -update noar ti set v0='0YWJPDCE1IDZ17E74K7' where id=4; -update noar tt set b1='SX7NDB5VYW1NYPYLFESSK' where id=4; -update noar ti set b1='SX7NDB5VYW1NYPYLFESSK' where id=4; -update noar tt set v0='XYO4YLZ3L7TILORLV1UT6EPP5' where id=4; -update noar ti set v0='XYO4YLZ3L7TILORLV1UT6EPP5' where id=4; -update noar tt set b2='7K8Q9M8ALB8LF8KCFIP' where id=4; -update noar ti set b2='7K8Q9M8ALB8LF8KCFIP' where id=4; -update noar tt set v0='VZLL' where id=5; -update noar ti set v0='VZLL' where id=5; -update noar tt set b0='N3Y24AO03' where id=5; -update noar ti set b0='N3Y24AO03' where id=5; -update noar tt set v0='IN2DO3R' where id=5; -update noar ti set v0='IN2DO3R' where id=5; -update noar tt set b1='1Y6ZISDA3DXUMFW9FCK94P5Q' where id=5; -update noar ti set b1='1Y6ZISDA3DXUMFW9FCK94P5Q' where id=5; -update noar tt set v0='9XTRGKBD9VH51CMUTLAWT' where id=5; -update noar ti set v0='9XTRGKBD9VH51CMUTLAWT' where id=5; -update noar tt set b2='CN8A4KH3X84XQ7N81N97FJ4TUD6T' where id=5; -update noar ti set b2='CN8A4KH3X84XQ7N81N97FJ4TUD6T' where id=5; -update noar tt set v0='CM' where id=6; -update noar ti set v0='CM' where id=6; -update noar tt set b0='927MMNI5HRT7YT6T54TRKH' where id=6; -update noar ti set b0='927MMNI5HRT7YT6T54TRKH' where id=6; -update noar tt set v0='11KA5OOYJ8OG' where id=6; -update noar ti set v0='11KA5OOYJ8OG' where id=6; -update noar tt set b1='KMNE7TYKTDT6TNPIENCN3Y5DEDSN' where id=6; -update noar ti set b1='KMNE7TYKTDT6TNPIENCN3Y5DEDSN' where id=6; -update noar tt set v0='3' where id=6; -update noar ti set v0='3' where id=6; -update noar tt set b2='IL648UAUQYO5I9UR4AICCC34X4K3XRSX' where id=6; -update noar ti set b2='IL648UAUQYO5I9UR4AICCC34X4K3XRSX' where id=6; -update noar tt set v0='TBHSQMWHN6VRYQG3YL3CIP69BVD' where id=7; -update noar ti set v0='TBHSQMWHN6VRYQG3YL3CIP69BVD' where id=7; -update noar tt set b0='9X1RIFI8J29VL2UY' where id=7; -update noar ti set b0='9X1RIFI8J29VL2UY' where id=7; -update noar tt set v0='WJOAC6LJKVNXJRWTJT' where id=7; -update noar ti set v0='WJOAC6LJKVNXJRWTJT' where id=7; -update noar tt set b1='KZHBWY6CLM8A8F1M' where id=7; -update noar ti set b1='KZHBWY6CLM8A8F1M' where id=7; -update noar tt set v0='R2UNRD' where id=7; -update noar ti set v0='R2UNRD' where id=7; -update noar tt set b2='1WVM0S09' where id=7; -update noar ti set b2='1WVM0S09' where id=7; -update noar tt set v0='O5U3WT' where id=8; -update noar ti set v0='O5U3WT' where id=8; -update noar tt set b0='Q7GG47GLX68L4A' where id=8; -update noar ti set b0='Q7GG47GLX68L4A' where id=8; -update noar tt set v0='94TVMCXQHIOCTZ8DSN2PP' where id=8; -update noar ti set v0='94TVMCXQHIOCTZ8DSN2PP' where id=8; -update noar tt set b1='JHASN1Z07C73KASSKYKY0' where id=8; -update noar ti set b1='JHASN1Z07C73KASSKYKY0' where id=8; -update noar tt set v0='8KY0FOOQ' where id=8; -update noar ti set v0='8KY0FOOQ' where id=8; -update noar tt set b2='ZW83NFKIL6' where id=8; -update noar ti set b2='ZW83NFKIL6' where id=8; -update noar tt set v0='DULXBV72WCSC9C4K9Q' where id=9; -update noar ti set v0='DULXBV72WCSC9C4K9Q' where id=9; -update noar tt set b0='TEL51M5L55URCC' where id=9; -update noar ti set b0='TEL51M5L55URCC' where id=9; -update noar tt set v0='DPKLQUD6DSSOBJU' where id=9; -update noar ti set v0='DPKLQUD6DSSOBJU' where id=9; -update noar tt set b1='AOD34HPC' where id=9; -update noar ti set b1='AOD34HPC' where id=9; -update noar tt set v0='69RPMNC' where id=9; -update noar ti set v0='69RPMNC' where id=9; -update noar tt set b2='0GTW45XGK0K4ST27YMUSCCH2YIO' where id=9; -update noar ti set b2='0GTW45XGK0K4ST27YMUSCCH2YIO' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 tinyblob null, - b1 mediumblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='POFON5WKPSN7WGYUPYY2VKX' where id=1; -update noar ti set v0='POFON5WKPSN7WGYUPYY2VKX' where id=1; -update noar tt set b0='18ZQLFZWU9S7S39' where id=1; -update noar ti set b0='18ZQLFZWU9S7S39' where id=1; -update noar tt set v0='PGAJAEJGW2TMS5PBRQ9F78V9' where id=1; -update noar ti set v0='PGAJAEJGW2TMS5PBRQ9F78V9' where id=1; -update noar tt set b1='0EPQMQH1FSHT5U' where id=1; -update noar ti set b1='0EPQMQH1FSHT5U' where id=1; -update noar tt set v0='AKKCK1HRPC' where id=1; -update noar ti set v0='AKKCK1HRPC' where id=1; -update noar tt set b2='LB1R4UFSQ65GXPKK4AKE' where id=1; -update noar ti set b2='LB1R4UFSQ65GXPKK4AKE' where id=1; -update noar tt set v0='00UZP7BC' where id=2; -update noar ti set v0='00UZP7BC' where id=2; -update noar tt set b0='8U' where id=2; -update noar ti set b0='8U' where id=2; -update noar tt set v0='6EHFY3FFJOD9D0O9LTCL' where id=2; -update noar ti set v0='6EHFY3FFJOD9D0O9LTCL' where id=2; -update noar tt set b1='OIW8NBMJK8DF7X1FLX5' where id=2; -update noar ti set b1='OIW8NBMJK8DF7X1FLX5' where id=2; -update noar tt set v0='DVV' where id=2; -update noar ti set v0='DVV' where id=2; -update noar tt set b2='IFV' where id=2; -update noar ti set b2='IFV' where id=2; -update noar tt set v0='7WT0V6SW18TVOUT9' where id=3; -update noar ti set v0='7WT0V6SW18TVOUT9' where id=3; -update noar tt set b0='VNP7RKEXKU34' where id=3; -update noar ti set b0='VNP7RKEXKU34' where id=3; -update noar tt set v0='ESL34CBK8' where id=3; -update noar ti set v0='ESL34CBK8' where id=3; -update noar tt set b1='1GDEJIENQ' where id=3; -update noar ti set b1='1GDEJIENQ' where id=3; -update noar tt set v0='X3T8HW29JJSD1XS' where id=3; -update noar ti set v0='X3T8HW29JJSD1XS' where id=3; -update noar tt set b2='BNFVDTA0L43MR6RGDBB4O' where id=3; -update noar ti set b2='BNFVDTA0L43MR6RGDBB4O' where id=3; -update noar tt set v0='49PR' where id=4; -update noar ti set v0='49PR' where id=4; -update noar tt set b0='R' where id=4; -update noar ti set b0='R' where id=4; -update noar tt set v0='TET5OZETWQLGKG8CT562RNSHXM' where id=4; -update noar ti set v0='TET5OZETWQLGKG8CT562RNSHXM' where id=4; -update noar tt set b1='STLBPEQHR9X1D7EZ1FC' where id=4; -update noar ti set b1='STLBPEQHR9X1D7EZ1FC' where id=4; -update noar tt set v0='NIYP0MQB8ZP8IST06NC6YQOXI3DU' where id=4; -update noar ti set v0='NIYP0MQB8ZP8IST06NC6YQOXI3DU' where id=4; -update noar tt set b2='4G6BHU4PY7I2YPFXNWRRY0VH2' where id=4; -update noar ti set b2='4G6BHU4PY7I2YPFXNWRRY0VH2' where id=4; -update noar tt set v0='DH2UDAP542BQXWZU87' where id=5; -update noar ti set v0='DH2UDAP542BQXWZU87' where id=5; -update noar tt set b0='RUHEB80EMAQ3TZX602BEUK' where id=5; -update noar ti set b0='RUHEB80EMAQ3TZX602BEUK' where id=5; -update noar tt set v0='I7CEPMGBML' where id=5; -update noar ti set v0='I7CEPMGBML' where id=5; -update noar tt set b1='DHVLWEQA2NH3' where id=5; -update noar ti set b1='DHVLWEQA2NH3' where id=5; -update noar tt set v0='0KV355DFPAGHQRJ7OY71O5' where id=5; -update noar ti set v0='0KV355DFPAGHQRJ7OY71O5' where id=5; -update noar tt set b2='NJKQE9FDEMMTFH2VLVED6NIQHYR0IQ' where id=5; -update noar ti set b2='NJKQE9FDEMMTFH2VLVED6NIQHYR0IQ' where id=5; -update noar tt set v0='I99NF9NW46SH4C7VD8GYLB9XS1O70W4K' where id=6; -update noar ti set v0='I99NF9NW46SH4C7VD8GYLB9XS1O70W4K' where id=6; -update noar tt set b0='HE62JKORDAOG4B7G063HAF9SJ' where id=6; -update noar ti set b0='HE62JKORDAOG4B7G063HAF9SJ' where id=6; -update noar tt set v0='4079ILLBGYXAEJIZULS64L7H' where id=6; -update noar ti set v0='4079ILLBGYXAEJIZULS64L7H' where id=6; -update noar tt set b1='76AR' where id=6; -update noar ti set b1='76AR' where id=6; -update noar tt set v0='9VHOFPKYNQGR8NTGMFHA5TJ6' where id=6; -update noar ti set v0='9VHOFPKYNQGR8NTGMFHA5TJ6' where id=6; -update noar tt set b2='CS' where id=6; -update noar ti set b2='CS' where id=6; -update noar tt set v0='NJNJO0Y7U1XJ2' where id=7; -update noar ti set v0='NJNJO0Y7U1XJ2' where id=7; -update noar tt set b0='UJBXQTC7SHQC48993FJLIY7G' where id=7; -update noar ti set b0='UJBXQTC7SHQC48993FJLIY7G' where id=7; -update noar tt set v0='5G73BQC4D' where id=7; -update noar ti set v0='5G73BQC4D' where id=7; -update noar tt set b1='S5QEJ47SMMSUFH5X5AE9O' where id=7; -update noar ti set b1='S5QEJ47SMMSUFH5X5AE9O' where id=7; -update noar tt set v0='UVQ0SUXN8S1' where id=7; -update noar ti set v0='UVQ0SUXN8S1' where id=7; -update noar tt set b2='3UOIZ2UMMF7ZK4PQ' where id=7; -update noar ti set b2='3UOIZ2UMMF7ZK4PQ' where id=7; -update noar tt set v0='619E3D7LU' where id=8; -update noar ti set v0='619E3D7LU' where id=8; -update noar tt set b0='WLCZ816UX5BFH0B' where id=8; -update noar ti set b0='WLCZ816UX5BFH0B' where id=8; -update noar tt set v0='O4WA0N7GDOGGOWTR80CFGK6' where id=8; -update noar ti set v0='O4WA0N7GDOGGOWTR80CFGK6' where id=8; -update noar tt set b1='X32865E' where id=8; -update noar ti set b1='X32865E' where id=8; -update noar tt set v0='UNQJB3NFHIJJOL254EIUSP9WUSLTSQ' where id=8; -update noar ti set v0='UNQJB3NFHIJJOL254EIUSP9WUSLTSQ' where id=8; -update noar tt set b2='PQAR64CDPEP2IX7BG22Y0MHRROH' where id=8; -update noar ti set b2='PQAR64CDPEP2IX7BG22Y0MHRROH' where id=8; -update noar tt set v0='XSWJL' where id=9; -update noar ti set v0='XSWJL' where id=9; -update noar tt set b0='PD118O5H6684DAA7NWFDF' where id=9; -update noar ti set b0='PD118O5H6684DAA7NWFDF' where id=9; -update noar tt set v0='VO7K' where id=9; -update noar ti set v0='VO7K' where id=9; -update noar tt set b1='PT2JJDY24NIAV8TG' where id=9; -update noar ti set b1='PT2JJDY24NIAV8TG' where id=9; -update noar tt set v0='K169602Q28' where id=9; -update noar ti set v0='K169602Q28' where id=9; -update noar tt set b2='PHL5HBJ' where id=9; -update noar ti set b2='PHL5HBJ' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 tinyblob not null, - b1 mediumblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='N8DGZFT4CXJ35' where id=1; -update noar ti set v0='N8DGZFT4CXJ35' where id=1; -update noar tt set b0='AHVZJIAE' where id=1; -update noar ti set b0='AHVZJIAE' where id=1; -update noar tt set v0='U1YR5GK9' where id=1; -update noar ti set v0='U1YR5GK9' where id=1; -update noar tt set b1='F1SW7DRJZB6O9ZUYPMJH' where id=1; -update noar ti set b1='F1SW7DRJZB6O9ZUYPMJH' where id=1; -update noar tt set v0='CO0IFCFEPWBNITJGJUCQ74UI' where id=1; -update noar ti set v0='CO0IFCFEPWBNITJGJUCQ74UI' where id=1; -update noar tt set b2='VVXGZP' where id=1; -update noar ti set b2='VVXGZP' where id=1; -update noar tt set v0='83679JNR6FV341ET9ZNCAIQU02D6BMQ' where id=2; -update noar ti set v0='83679JNR6FV341ET9ZNCAIQU02D6BMQ' where id=2; -update noar tt set b0='8R' where id=2; -update noar ti set b0='8R' where id=2; -update noar tt set v0='V4CORXB2OYL0W7TZZPCTM4A9VSU' where id=2; -update noar ti set v0='V4CORXB2OYL0W7TZZPCTM4A9VSU' where id=2; -update noar tt set b1='7XXB0E0TO80JW' where id=2; -update noar ti set b1='7XXB0E0TO80JW' where id=2; -update noar tt set v0='3QF' where id=2; -update noar ti set v0='3QF' where id=2; -update noar tt set b2='UJJQ6U34UDEHHMT9ML' where id=2; -update noar ti set b2='UJJQ6U34UDEHHMT9ML' where id=2; -update noar tt set v0='O8E' where id=3; -update noar ti set v0='O8E' where id=3; -update noar tt set b0='0TIB5X2QT' where id=3; -update noar ti set b0='0TIB5X2QT' where id=3; -update noar tt set v0='MR5R0YBUPNMB9YU7YV18JLLYU6WOLO' where id=3; -update noar ti set v0='MR5R0YBUPNMB9YU7YV18JLLYU6WOLO' where id=3; -update noar tt set b1='KWAGR1' where id=3; -update noar ti set b1='KWAGR1' where id=3; -update noar tt set v0='ZYBUMPA6LAELS9RIAV' where id=3; -update noar ti set v0='ZYBUMPA6LAELS9RIAV' where id=3; -update noar tt set b2='A526JIW26' where id=3; -update noar ti set b2='A526JIW26' where id=3; -update noar tt set v0='L86BTKOVBT7P' where id=4; -update noar ti set v0='L86BTKOVBT7P' where id=4; -update noar tt set b0='FW' where id=4; -update noar ti set b0='FW' where id=4; -update noar tt set v0='QNREEE5VLGXUU' where id=4; -update noar ti set v0='QNREEE5VLGXUU' where id=4; -update noar tt set b1='02UDHFXAILMZL1MYJBKZVPXV' where id=4; -update noar ti set b1='02UDHFXAILMZL1MYJBKZVPXV' where id=4; -update noar tt set v0='4A0SIK7MG' where id=4; -update noar ti set v0='4A0SIK7MG' where id=4; -update noar tt set b2='MQQ210DVRYER2KZ0K7N' where id=4; -update noar ti set b2='MQQ210DVRYER2KZ0K7N' where id=4; -update noar tt set v0='FPDWGDBGUZDJ8G8VNVZQSW5CECI85V7' where id=5; -update noar ti set v0='FPDWGDBGUZDJ8G8VNVZQSW5CECI85V7' where id=5; -update noar tt set b0='JSUTYO8OLBVF2D396V4SDK3C7' where id=5; -update noar ti set b0='JSUTYO8OLBVF2D396V4SDK3C7' where id=5; -update noar tt set v0='A7GQ0CNZPOJFABQ2NVCVJB' where id=5; -update noar ti set v0='A7GQ0CNZPOJFABQ2NVCVJB' where id=5; -update noar tt set b1='IN' where id=5; -update noar ti set b1='IN' where id=5; -update noar tt set v0='MCYKQUT3Q5I8' where id=5; -update noar ti set v0='MCYKQUT3Q5I8' where id=5; -update noar tt set b2='B' where id=5; -update noar ti set b2='B' where id=5; -update noar tt set v0='NCLMBO5YMDBMF' where id=6; -update noar ti set v0='NCLMBO5YMDBMF' where id=6; -update noar tt set b0='JDVOKML69' where id=6; -update noar ti set b0='JDVOKML69' where id=6; -update noar tt set v0='CC6HSSMJ0VQQLSCLME5184MQ' where id=6; -update noar ti set v0='CC6HSSMJ0VQQLSCLME5184MQ' where id=6; -update noar tt set b1='07FAJQHY3HTR0CE8X1UJS0FM8W7B' where id=6; -update noar ti set b1='07FAJQHY3HTR0CE8X1UJS0FM8W7B' where id=6; -update noar tt set v0='G5WGBUMSBKJT5UTHCXO9FCS' where id=6; -update noar ti set v0='G5WGBUMSBKJT5UTHCXO9FCS' where id=6; -update noar tt set b2='2IX' where id=6; -update noar ti set b2='2IX' where id=6; -update noar tt set v0='5YVHB5EDS4JJ668M4BGMEX49TKC7' where id=7; -update noar ti set v0='5YVHB5EDS4JJ668M4BGMEX49TKC7' where id=7; -update noar tt set b0='9TE70UGGE8' where id=7; -update noar ti set b0='9TE70UGGE8' where id=7; -update noar tt set v0='G3UE4MPCXE44V' where id=7; -update noar ti set v0='G3UE4MPCXE44V' where id=7; -update noar tt set b1='R6YLVCBHC1G0S6GZWKK6FIG5' where id=7; -update noar ti set b1='R6YLVCBHC1G0S6GZWKK6FIG5' where id=7; -update noar tt set v0='CPZW3IU51718KPGW03' where id=7; -update noar ti set v0='CPZW3IU51718KPGW03' where id=7; -update noar tt set b2='ZTKU' where id=7; -update noar ti set b2='ZTKU' where id=7; -update noar tt set v0='41GIBG3SIVSP3AGBCQ4IAJX' where id=8; -update noar ti set v0='41GIBG3SIVSP3AGBCQ4IAJX' where id=8; -update noar tt set b0='IIT9XHT8XQ23ICG2VDE2UVQ' where id=8; -update noar ti set b0='IIT9XHT8XQ23ICG2VDE2UVQ' where id=8; -update noar tt set v0='6JFT16AA31JN' where id=8; -update noar ti set v0='6JFT16AA31JN' where id=8; -update noar tt set b1='G5AV1ZWE' where id=8; -update noar ti set b1='G5AV1ZWE' where id=8; -update noar tt set v0='V0' where id=8; -update noar ti set v0='V0' where id=8; -update noar tt set b2='7704D2HMQUJLU1EEIDVA1TNGCL0BK1' where id=8; -update noar ti set b2='7704D2HMQUJLU1EEIDVA1TNGCL0BK1' where id=8; -update noar tt set v0='UHZWXWJTXE7AS3053G' where id=9; -update noar ti set v0='UHZWXWJTXE7AS3053G' where id=9; -update noar tt set b0='S9M372YCI' where id=9; -update noar ti set b0='S9M372YCI' where id=9; -update noar tt set v0='VU5' where id=9; -update noar ti set v0='VU5' where id=9; -update noar tt set b1='8' where id=9; -update noar ti set b1='8' where id=9; -update noar tt set v0='8ZU4H3G' where id=9; -update noar ti set v0='8ZU4H3G' where id=9; -update noar tt set b2='VFSU3R4R60' where id=9; -update noar ti set b2='VFSU3R4R60' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 tinyblob not null, - b1 mediumblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='NI5E47EG49GOYPVVXO86S1RX65' where id=1; -update noar ti set v0='NI5E47EG49GOYPVVXO86S1RX65' where id=1; -update noar tt set b0='EE63OMQO7W' where id=1; -update noar ti set b0='EE63OMQO7W' where id=1; -update noar tt set v0='ROK' where id=1; -update noar ti set v0='ROK' where id=1; -update noar tt set b1='ITL4BBLNQLDPFN7JI8WQWLD6' where id=1; -update noar ti set b1='ITL4BBLNQLDPFN7JI8WQWLD6' where id=1; -update noar tt set v0='4' where id=1; -update noar ti set v0='4' where id=1; -update noar tt set b2='MI95VJ8R2OQ468Z' where id=1; -update noar ti set b2='MI95VJ8R2OQ468Z' where id=1; -update noar tt set v0='FDNEEYTF9G' where id=2; -update noar ti set v0='FDNEEYTF9G' where id=2; -update noar tt set b0='BRND3H6UWCSK0WO89T9YDD1LMRPDK6Z' where id=2; -update noar ti set b0='BRND3H6UWCSK0WO89T9YDD1LMRPDK6Z' where id=2; -update noar tt set v0='AQBMGF0DZ' where id=2; -update noar ti set v0='AQBMGF0DZ' where id=2; -update noar tt set b1='T2KSOD2FPL188JR5' where id=2; -update noar ti set b1='T2KSOD2FPL188JR5' where id=2; -update noar tt set v0='8KG5' where id=2; -update noar ti set v0='8KG5' where id=2; -update noar tt set b2='G277UED4A5CYR1DYU2WTKQUFV7' where id=2; -update noar ti set b2='G277UED4A5CYR1DYU2WTKQUFV7' where id=2; -update noar tt set v0='XI7EXI9RQCFES7C' where id=3; -update noar ti set v0='XI7EXI9RQCFES7C' where id=3; -update noar tt set b0='GKA9LYUBWWV' where id=3; -update noar ti set b0='GKA9LYUBWWV' where id=3; -update noar tt set v0='RVOB' where id=3; -update noar ti set v0='RVOB' where id=3; -update noar tt set b1='P3N757K' where id=3; -update noar ti set b1='P3N757K' where id=3; -update noar tt set v0='KVAO2DC14R58I' where id=3; -update noar ti set v0='KVAO2DC14R58I' where id=3; -update noar tt set b2='5EAF1YYTW8VV5HUH4E0Z' where id=3; -update noar ti set b2='5EAF1YYTW8VV5HUH4E0Z' where id=3; -update noar tt set v0='G16DMOAQ9VMGI' where id=4; -update noar ti set v0='G16DMOAQ9VMGI' where id=4; -update noar tt set b0='A0SM0CS4U6PON8BNYWZ2XDIQ82' where id=4; -update noar ti set b0='A0SM0CS4U6PON8BNYWZ2XDIQ82' where id=4; -update noar tt set v0='ELOPWADO6ZQY5OEE' where id=4; -update noar ti set v0='ELOPWADO6ZQY5OEE' where id=4; -update noar tt set b1='J' where id=4; -update noar ti set b1='J' where id=4; -update noar tt set v0='SO83QH20SLH0J3W8Q8WNQWEZCM9' where id=4; -update noar ti set v0='SO83QH20SLH0J3W8Q8WNQWEZCM9' where id=4; -update noar tt set b2='TZJXOO2UIZXSV7' where id=4; -update noar ti set b2='TZJXOO2UIZXSV7' where id=4; -update noar tt set v0='4ZE8' where id=5; -update noar ti set v0='4ZE8' where id=5; -update noar tt set b0='FC37ITXEWHTIMW6QC4P2VBDLOWFYQ' where id=5; -update noar ti set b0='FC37ITXEWHTIMW6QC4P2VBDLOWFYQ' where id=5; -update noar tt set v0='4H' where id=5; -update noar ti set v0='4H' where id=5; -update noar tt set b1='DM2B1O6F0DN6UZZ31XSU664' where id=5; -update noar ti set b1='DM2B1O6F0DN6UZZ31XSU664' where id=5; -update noar tt set v0='AQHKPABV7JEH04H5AI2' where id=5; -update noar ti set v0='AQHKPABV7JEH04H5AI2' where id=5; -update noar tt set b2='0BA' where id=5; -update noar ti set b2='0BA' where id=5; -update noar tt set v0='WOXNQ8MD1KV72VMEGYAM5RFW' where id=6; -update noar ti set v0='WOXNQ8MD1KV72VMEGYAM5RFW' where id=6; -update noar tt set b0='NARDX08UT6PANWB58AZFWI' where id=6; -update noar ti set b0='NARDX08UT6PANWB58AZFWI' where id=6; -update noar tt set v0='WPWVVGP4H' where id=6; -update noar ti set v0='WPWVVGP4H' where id=6; -update noar tt set b1='DFKF7G3XBUWFV39FPBAZ8ZTETLI9I3R' where id=6; -update noar ti set b1='DFKF7G3XBUWFV39FPBAZ8ZTETLI9I3R' where id=6; -update noar tt set v0='8F2AE8IWARWJZJDRWNDPSBUB1DF' where id=6; -update noar ti set v0='8F2AE8IWARWJZJDRWNDPSBUB1DF' where id=6; -update noar tt set b2='NY7963I6R7H47W' where id=6; -update noar ti set b2='NY7963I6R7H47W' where id=6; -update noar tt set v0='4JAG5XQWK79WRKN99GGI06NXK4' where id=7; -update noar ti set v0='4JAG5XQWK79WRKN99GGI06NXK4' where id=7; -update noar tt set b0='X56DEW3WPJNL2BT' where id=7; -update noar ti set b0='X56DEW3WPJNL2BT' where id=7; -update noar tt set v0='Z6CEO7C0A9ZTH02CL' where id=7; -update noar ti set v0='Z6CEO7C0A9ZTH02CL' where id=7; -update noar tt set b1='VX3KUWR198TQVELELT21I1O6RBVLUPCW' where id=7; -update noar ti set b1='VX3KUWR198TQVELELT21I1O6RBVLUPCW' where id=7; -update noar tt set v0='QX9821GPAWNPR5KNL02BWPMQFR7AAA9' where id=7; -update noar ti set v0='QX9821GPAWNPR5KNL02BWPMQFR7AAA9' where id=7; -update noar tt set b2='UIQ24R' where id=7; -update noar ti set b2='UIQ24R' where id=7; -update noar tt set v0='DMQ' where id=8; -update noar ti set v0='DMQ' where id=8; -update noar tt set b0='BGQYQJBJDSUHK6NWP8Z' where id=8; -update noar ti set b0='BGQYQJBJDSUHK6NWP8Z' where id=8; -update noar tt set v0='2FCSOLSR1M0XUB9P' where id=8; -update noar ti set v0='2FCSOLSR1M0XUB9P' where id=8; -update noar tt set b1='IORAIXCONSQ5OFW6V60CHCAHD6' where id=8; -update noar ti set b1='IORAIXCONSQ5OFW6V60CHCAHD6' where id=8; -update noar tt set v0='N2UUXZNLPPG10DETSJ987AWJXRITSAQM' where id=8; -update noar ti set v0='N2UUXZNLPPG10DETSJ987AWJXRITSAQM' where id=8; -update noar tt set b2='7' where id=8; -update noar ti set b2='7' where id=8; -update noar tt set v0='1S4W1' where id=9; -update noar ti set v0='1S4W1' where id=9; -update noar tt set b0='YR04WUTRCHXFEDB2UWL' where id=9; -update noar ti set b0='YR04WUTRCHXFEDB2UWL' where id=9; -update noar tt set v0='3TZWCD7RVD9087VUX' where id=9; -update noar ti set v0='3TZWCD7RVD9087VUX' where id=9; -update noar tt set b1='V28XHDSM61IQNR' where id=9; -update noar ti set b1='V28XHDSM61IQNR' where id=9; -update noar tt set v0='EAHDEZMDVHNAP' where id=9; -update noar ti set v0='EAHDEZMDVHNAP' where id=9; -update noar tt set b2='LLI8OEAZ0MAK49E9FV0N63R8QLMJ0S39' where id=9; -update noar ti set b2='LLI8OEAZ0MAK49E9FV0N63R8QLMJ0S39' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 tinyblob null, - b1 mediumblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='8EBHMYEII' where id=1; -update noar ti set v0='8EBHMYEII' where id=1; -update noar tt set b0='O2YYU4XROKHE' where id=1; -update noar ti set b0='O2YYU4XROKHE' where id=1; -update noar tt set v0='2VKR79BD8S4O0H4M0D9XDOX1YFUNLQ' where id=1; -update noar ti set v0='2VKR79BD8S4O0H4M0D9XDOX1YFUNLQ' where id=1; -update noar tt set b1='1HWQET9' where id=1; -update noar ti set b1='1HWQET9' where id=1; -update noar tt set v0='EA9D9ELSVDCHPZ4ZMX' where id=1; -update noar ti set v0='EA9D9ELSVDCHPZ4ZMX' where id=1; -update noar tt set b2='D' where id=1; -update noar ti set b2='D' where id=1; -update noar tt set v0='HU49AN75KJY18FVVDHKTR19IGX3' where id=2; -update noar ti set v0='HU49AN75KJY18FVVDHKTR19IGX3' where id=2; -update noar tt set b0='HHZPD7TNBU09KHNB1KB7A' where id=2; -update noar ti set b0='HHZPD7TNBU09KHNB1KB7A' where id=2; -update noar tt set v0='UGOV' where id=2; -update noar ti set v0='UGOV' where id=2; -update noar tt set b1='MG7' where id=2; -update noar ti set b1='MG7' where id=2; -update noar tt set v0='0YK1DLBGJYA7F400R010FXER9A9RIT9J' where id=2; -update noar ti set v0='0YK1DLBGJYA7F400R010FXER9A9RIT9J' where id=2; -update noar tt set b2='HOYP1B22VNYU584' where id=2; -update noar ti set b2='HOYP1B22VNYU584' where id=2; -update noar tt set v0='OBRGJ8FG35RHM5DAFG8EA1UO88W' where id=3; -update noar ti set v0='OBRGJ8FG35RHM5DAFG8EA1UO88W' where id=3; -update noar tt set b0='DSK342P7JAG80NUGYEE5IVT' where id=3; -update noar ti set b0='DSK342P7JAG80NUGYEE5IVT' where id=3; -update noar tt set v0='N0M9L42C' where id=3; -update noar ti set v0='N0M9L42C' where id=3; -update noar tt set b1='T4OKXH4QO2Y9DHY7PCD96PE4LIEEXK' where id=3; -update noar ti set b1='T4OKXH4QO2Y9DHY7PCD96PE4LIEEXK' where id=3; -update noar tt set v0='FTWYRXN62DDL7JVXGKHOKHFCTR6I0D' where id=3; -update noar ti set v0='FTWYRXN62DDL7JVXGKHOKHFCTR6I0D' where id=3; -update noar tt set b2='UMY2WBLRW' where id=3; -update noar ti set b2='UMY2WBLRW' where id=3; -update noar tt set v0='K3AO2ALPR8C0V' where id=4; -update noar ti set v0='K3AO2ALPR8C0V' where id=4; -update noar tt set b0='G5F' where id=4; -update noar ti set b0='G5F' where id=4; -update noar tt set v0='C3RAGNUG8SQ5' where id=4; -update noar ti set v0='C3RAGNUG8SQ5' where id=4; -update noar tt set b1='T' where id=4; -update noar ti set b1='T' where id=4; -update noar tt set v0='W7T2EMHSIG5HXZVZ8F' where id=4; -update noar ti set v0='W7T2EMHSIG5HXZVZ8F' where id=4; -update noar tt set b2='68KCAUGGKG' where id=4; -update noar ti set b2='68KCAUGGKG' where id=4; -update noar tt set v0='ZXEDM' where id=5; -update noar ti set v0='ZXEDM' where id=5; -update noar tt set b0='6VPTKWVZA6Y6M3G' where id=5; -update noar ti set b0='6VPTKWVZA6Y6M3G' where id=5; -update noar tt set v0='Y4DF' where id=5; -update noar ti set v0='Y4DF' where id=5; -update noar tt set b1='RBI4VSSXAVKUX4' where id=5; -update noar ti set b1='RBI4VSSXAVKUX4' where id=5; -update noar tt set v0='MUU1LK18X3FSPZ5CGV6' where id=5; -update noar ti set v0='MUU1LK18X3FSPZ5CGV6' where id=5; -update noar tt set b2='J8NH4AP2EFGIYNOY4RH08UBUAPK2C5PK' where id=5; -update noar ti set b2='J8NH4AP2EFGIYNOY4RH08UBUAPK2C5PK' where id=5; -update noar tt set v0='BIOCA3CG1JJK' where id=6; -update noar ti set v0='BIOCA3CG1JJK' where id=6; -update noar tt set b0='W33BRU3D' where id=6; -update noar ti set b0='W33BRU3D' where id=6; -update noar tt set v0='WVC8HIFT3HQYOKNIUNFV' where id=6; -update noar ti set v0='WVC8HIFT3HQYOKNIUNFV' where id=6; -update noar tt set b1='RMGS6CBB11PG8LYAR7Z4OGYAUWMOQH8' where id=6; -update noar ti set b1='RMGS6CBB11PG8LYAR7Z4OGYAUWMOQH8' where id=6; -update noar tt set v0='WDIVE' where id=6; -update noar ti set v0='WDIVE' where id=6; -update noar tt set b2='XGIG9W31' where id=6; -update noar ti set b2='XGIG9W31' where id=6; -update noar tt set v0='M1H4OE2W4' where id=7; -update noar ti set v0='M1H4OE2W4' where id=7; -update noar tt set b0='1WWIMTB83TJJJOPXMYZHMPY9C' where id=7; -update noar ti set b0='1WWIMTB83TJJJOPXMYZHMPY9C' where id=7; -update noar tt set v0='W' where id=7; -update noar ti set v0='W' where id=7; -update noar tt set b1='W7U60EQR4YPVG3UDFBGSFHSG55' where id=7; -update noar ti set b1='W7U60EQR4YPVG3UDFBGSFHSG55' where id=7; -update noar tt set v0='VX6Q8WFWNFBEHV8PLXH3' where id=7; -update noar ti set v0='VX6Q8WFWNFBEHV8PLXH3' where id=7; -update noar tt set b2='M5012IJ' where id=7; -update noar ti set b2='M5012IJ' where id=7; -update noar tt set v0='R61ZUAT0' where id=8; -update noar ti set v0='R61ZUAT0' where id=8; -update noar tt set b0='HAY' where id=8; -update noar ti set b0='HAY' where id=8; -update noar tt set v0='IVN2GNPG0GKIDZEQP15A1ST' where id=8; -update noar ti set v0='IVN2GNPG0GKIDZEQP15A1ST' where id=8; -update noar tt set b1='Y1F2S1Z740K8PBFC3' where id=8; -update noar ti set b1='Y1F2S1Z740K8PBFC3' where id=8; -update noar tt set v0='CW6IHS2N86E70K2B7LZR8G' where id=8; -update noar ti set v0='CW6IHS2N86E70K2B7LZR8G' where id=8; -update noar tt set b2='E0IM0HQA1HMCZWME7PATRIXDZ' where id=8; -update noar ti set b2='E0IM0HQA1HMCZWME7PATRIXDZ' where id=8; -update noar tt set v0='P03QKBG69N0VT' where id=9; -update noar ti set v0='P03QKBG69N0VT' where id=9; -update noar tt set b0='KI' where id=9; -update noar ti set b0='KI' where id=9; -update noar tt set v0='QBZCZZAO8Q0RON29' where id=9; -update noar ti set v0='QBZCZZAO8Q0RON29' where id=9; -update noar tt set b1='MKBTB24VERC9D2HS2PBTEEY' where id=9; -update noar ti set b1='MKBTB24VERC9D2HS2PBTEEY' where id=9; -update noar tt set v0='Y' where id=9; -update noar ti set v0='Y' where id=9; -update noar tt set b2='C5RFEHWOQ69VFFJALJ5M' where id=9; -update noar ti set b2='C5RFEHWOQ69VFFJALJ5M' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 tinyblob null, - b1 mediumblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='AY' where id=1; -update noar ti set v0='AY' where id=1; -update noar tt set b0='J30' where id=1; -update noar ti set b0='J30' where id=1; -update noar tt set v0='T6VBCSQCXR56O35N41EECZ0' where id=1; -update noar ti set v0='T6VBCSQCXR56O35N41EECZ0' where id=1; -update noar tt set b1='AV5T0YXYBHFUZG9E42Z' where id=1; -update noar ti set b1='AV5T0YXYBHFUZG9E42Z' where id=1; -update noar tt set v0='SIMF9NG9JZLHX3PFNTWQN' where id=1; -update noar ti set v0='SIMF9NG9JZLHX3PFNTWQN' where id=1; -update noar tt set b2='1JN5C55ACD60W4C0DDQF68SE4X8B7E' where id=1; -update noar ti set b2='1JN5C55ACD60W4C0DDQF68SE4X8B7E' where id=1; -update noar tt set v0='IQQ5POGSDAGB' where id=2; -update noar ti set v0='IQQ5POGSDAGB' where id=2; -update noar tt set b0='OZO87E9YAGG673FFZGUTZ5JOIFL' where id=2; -update noar ti set b0='OZO87E9YAGG673FFZGUTZ5JOIFL' where id=2; -update noar tt set v0='EY82XVC7T88H5F' where id=2; -update noar ti set v0='EY82XVC7T88H5F' where id=2; -update noar tt set b1='8BHLKWM09ZGF9GCHY5CJTPZN41D3YH' where id=2; -update noar ti set b1='8BHLKWM09ZGF9GCHY5CJTPZN41D3YH' where id=2; -update noar tt set v0='51R4J2ZRZ6K8VXSBBM8G5' where id=2; -update noar ti set v0='51R4J2ZRZ6K8VXSBBM8G5' where id=2; -update noar tt set b2='GH' where id=2; -update noar ti set b2='GH' where id=2; -update noar tt set v0='V5MVVIVA1Z8L1KFIVV2' where id=3; -update noar ti set v0='V5MVVIVA1Z8L1KFIVV2' where id=3; -update noar tt set b0='H1VOTZZGM6XTRQX' where id=3; -update noar ti set b0='H1VOTZZGM6XTRQX' where id=3; -update noar tt set v0='ZZ7JW' where id=3; -update noar ti set v0='ZZ7JW' where id=3; -update noar tt set b1='5D' where id=3; -update noar ti set b1='5D' where id=3; -update noar tt set v0='GA0K7ZHUYAEXLB4YEGC49264L70TU' where id=3; -update noar ti set v0='GA0K7ZHUYAEXLB4YEGC49264L70TU' where id=3; -update noar tt set b2='BVRV5LRCP6V5JDSN4KINW' where id=3; -update noar ti set b2='BVRV5LRCP6V5JDSN4KINW' where id=3; -update noar tt set v0='KAE544RS6OY8F6CDAP9FR2' where id=4; -update noar ti set v0='KAE544RS6OY8F6CDAP9FR2' where id=4; -update noar tt set b0='J' where id=4; -update noar ti set b0='J' where id=4; -update noar tt set v0='8' where id=4; -update noar ti set v0='8' where id=4; -update noar tt set b1='TWDH6I2KOINUTA93N9' where id=4; -update noar ti set b1='TWDH6I2KOINUTA93N9' where id=4; -update noar tt set v0='H2T2BX' where id=4; -update noar ti set v0='H2T2BX' where id=4; -update noar tt set b2='RBHKPWBOLIO5UCBPB88GHVAQZQQQQK' where id=4; -update noar ti set b2='RBHKPWBOLIO5UCBPB88GHVAQZQQQQK' where id=4; -update noar tt set v0='ZL8WFWM7UDG8OXO6C9' where id=5; -update noar ti set v0='ZL8WFWM7UDG8OXO6C9' where id=5; -update noar tt set b0='FELX8C49B6V5UEU4C1FCGO' where id=5; -update noar ti set b0='FELX8C49B6V5UEU4C1FCGO' where id=5; -update noar tt set v0='U9BZ0AO43JNC67EP5OD03' where id=5; -update noar ti set v0='U9BZ0AO43JNC67EP5OD03' where id=5; -update noar tt set b1='ROFYI4BXQD' where id=5; -update noar ti set b1='ROFYI4BXQD' where id=5; -update noar tt set v0='UMC7PYJ3T8YV' where id=5; -update noar ti set v0='UMC7PYJ3T8YV' where id=5; -update noar tt set b2='PKV63DY0ODA56ZDE8V48YODMJR2' where id=5; -update noar ti set b2='PKV63DY0ODA56ZDE8V48YODMJR2' where id=5; -update noar tt set v0='09YJ133FWZG' where id=6; -update noar ti set v0='09YJ133FWZG' where id=6; -update noar tt set b0='OTDLQ4KWM77S0QF78ZBTM2W2EC0N5M' where id=6; -update noar ti set b0='OTDLQ4KWM77S0QF78ZBTM2W2EC0N5M' where id=6; -update noar tt set v0='Z8T4JSWEDDL159' where id=6; -update noar ti set v0='Z8T4JSWEDDL159' where id=6; -update noar tt set b1='F32TMK228URWQ5LBEIY57T01R' where id=6; -update noar ti set b1='F32TMK228URWQ5LBEIY57T01R' where id=6; -update noar tt set v0='3I5VSG49SET7D5FFC8EPIQKU2JG0P' where id=6; -update noar ti set v0='3I5VSG49SET7D5FFC8EPIQKU2JG0P' where id=6; -update noar tt set b2='H4WI' where id=6; -update noar ti set b2='H4WI' where id=6; -update noar tt set v0='R89CK8XF2DB50O47R0X' where id=7; -update noar ti set v0='R89CK8XF2DB50O47R0X' where id=7; -update noar tt set b0='P2JV7J8PP60103ZM7J50' where id=7; -update noar ti set b0='P2JV7J8PP60103ZM7J50' where id=7; -update noar tt set v0='5WS4WMN' where id=7; -update noar ti set v0='5WS4WMN' where id=7; -update noar tt set b1='QILOIZN9T0FWSPEWKQV' where id=7; -update noar ti set b1='QILOIZN9T0FWSPEWKQV' where id=7; -update noar tt set v0='9ZSS3TVEQ5L46MFAW' where id=7; -update noar ti set v0='9ZSS3TVEQ5L46MFAW' where id=7; -update noar tt set b2='2MWW7NI' where id=7; -update noar ti set b2='2MWW7NI' where id=7; -update noar tt set v0='7M5UK5' where id=8; -update noar ti set v0='7M5UK5' where id=8; -update noar tt set b0='L' where id=8; -update noar ti set b0='L' where id=8; -update noar tt set v0='M7247XEJX74G88Y8H0Q5' where id=8; -update noar ti set v0='M7247XEJX74G88Y8H0Q5' where id=8; -update noar tt set b1='4DSZ' where id=8; -update noar ti set b1='4DSZ' where id=8; -update noar tt set v0='A20Y' where id=8; -update noar ti set v0='A20Y' where id=8; -update noar tt set b2='8SCPPHFIX4UK4GKU7' where id=8; -update noar ti set b2='8SCPPHFIX4UK4GKU7' where id=8; -update noar tt set v0='89SQIW99INS4U78U2AMXUEEFZ' where id=9; -update noar ti set v0='89SQIW99INS4U78U2AMXUEEFZ' where id=9; -update noar tt set b0='DGQNX04SE68OA8YVL13ROFGW' where id=9; -update noar ti set b0='DGQNX04SE68OA8YVL13ROFGW' where id=9; -update noar tt set v0='LCQB' where id=9; -update noar ti set v0='LCQB' where id=9; -update noar tt set b1='RA5J948V80RU1JLDVJXQKVGF1TN' where id=9; -update noar ti set b1='RA5J948V80RU1JLDVJXQKVGF1TN' where id=9; -update noar tt set v0='Q' where id=9; -update noar ti set v0='Q' where id=9; -update noar tt set b2='IEYCDLXA98RP0PQXPJBWVP' where id=9; -update noar ti set b2='IEYCDLXA98RP0PQXPJBWVP' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 tinyblob not null, - b1 mediumblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='0SJCA511KEYYM' where id=1; -update noar ti set v0='0SJCA511KEYYM' where id=1; -update noar tt set b0='W7' where id=1; -update noar ti set b0='W7' where id=1; -update noar tt set v0='VRVME2GSIPXPCYDX1NACGKZT' where id=1; -update noar ti set v0='VRVME2GSIPXPCYDX1NACGKZT' where id=1; -update noar tt set b1='H3E1EQUDJF7M413S2' where id=1; -update noar ti set b1='H3E1EQUDJF7M413S2' where id=1; -update noar tt set v0='JJZS6U91T5FY83UVPOKNWAH' where id=1; -update noar ti set v0='JJZS6U91T5FY83UVPOKNWAH' where id=1; -update noar tt set b2='2Y20R4SGWOS7CTGJ4BWA' where id=1; -update noar ti set b2='2Y20R4SGWOS7CTGJ4BWA' where id=1; -update noar tt set v0='V1HRZDQDJ7Y1P3YDLTE3QPEK92' where id=2; -update noar ti set v0='V1HRZDQDJ7Y1P3YDLTE3QPEK92' where id=2; -update noar tt set b0='BFX7BQW9Y' where id=2; -update noar ti set b0='BFX7BQW9Y' where id=2; -update noar tt set v0='4KX7K5PO' where id=2; -update noar ti set v0='4KX7K5PO' where id=2; -update noar tt set b1='KTWW8A9GFYKXJUP0X9NPDSP5SB7O' where id=2; -update noar ti set b1='KTWW8A9GFYKXJUP0X9NPDSP5SB7O' where id=2; -update noar tt set v0='QYHZD5X53RE0QP8GM' where id=2; -update noar ti set v0='QYHZD5X53RE0QP8GM' where id=2; -update noar tt set b2='IQE1UB2COCEJFFKDDGUZ7' where id=2; -update noar ti set b2='IQE1UB2COCEJFFKDDGUZ7' where id=2; -update noar tt set v0='9AJ3Q8EQFWFWBVOT' where id=3; -update noar ti set v0='9AJ3Q8EQFWFWBVOT' where id=3; -update noar tt set b0='QBDE8JTC2DDX' where id=3; -update noar ti set b0='QBDE8JTC2DDX' where id=3; -update noar tt set v0='96I9H1' where id=3; -update noar ti set v0='96I9H1' where id=3; -update noar tt set b1='HWD9ABGEEQ7UE' where id=3; -update noar ti set b1='HWD9ABGEEQ7UE' where id=3; -update noar tt set v0='JJ6K0MLWS00DDWVG2X' where id=3; -update noar ti set v0='JJ6K0MLWS00DDWVG2X' where id=3; -update noar tt set b2='I8GFU0VFFCMCD1DFJ084XBI8EKTYDJ' where id=3; -update noar ti set b2='I8GFU0VFFCMCD1DFJ084XBI8EKTYDJ' where id=3; -update noar tt set v0='K9QTGG2ISNB5I86D7F0UH' where id=4; -update noar ti set v0='K9QTGG2ISNB5I86D7F0UH' where id=4; -update noar tt set b0='BNSBHTMZRUL' where id=4; -update noar ti set b0='BNSBHTMZRUL' where id=4; -update noar tt set v0='S38FMX' where id=4; -update noar ti set v0='S38FMX' where id=4; -update noar tt set b1='XT8' where id=4; -update noar ti set b1='XT8' where id=4; -update noar tt set v0='F46238UGJVOIVC7CAJ1RAJ6' where id=4; -update noar ti set v0='F46238UGJVOIVC7CAJ1RAJ6' where id=4; -update noar tt set b2='TPIBIYLLZZG8BFI' where id=4; -update noar ti set b2='TPIBIYLLZZG8BFI' where id=4; -update noar tt set v0='FUFPMZL1LK' where id=5; -update noar ti set v0='FUFPMZL1LK' where id=5; -update noar tt set b0='QM8OA2DZ5C' where id=5; -update noar ti set b0='QM8OA2DZ5C' where id=5; -update noar tt set v0='PHS6SOBQTC13N' where id=5; -update noar ti set v0='PHS6SOBQTC13N' where id=5; -update noar tt set b1='C721' where id=5; -update noar ti set b1='C721' where id=5; -update noar tt set v0='IXEN3G' where id=5; -update noar ti set v0='IXEN3G' where id=5; -update noar tt set b2='BI' where id=5; -update noar ti set b2='BI' where id=5; -update noar tt set v0='7PC0' where id=6; -update noar ti set v0='7PC0' where id=6; -update noar tt set b0='W9Q4IW24Y' where id=6; -update noar ti set b0='W9Q4IW24Y' where id=6; -update noar tt set v0='FI1IX6IEMST95OA51GX2FHDOI' where id=6; -update noar ti set v0='FI1IX6IEMST95OA51GX2FHDOI' where id=6; -update noar tt set b1='SREC' where id=6; -update noar ti set b1='SREC' where id=6; -update noar tt set v0='RUT9A46P' where id=6; -update noar ti set v0='RUT9A46P' where id=6; -update noar tt set b2='CP460MW8K20MNDMJJV' where id=6; -update noar ti set b2='CP460MW8K20MNDMJJV' where id=6; -update noar tt set v0='0OIXNLJPF1XE3W' where id=7; -update noar ti set v0='0OIXNLJPF1XE3W' where id=7; -update noar tt set b0='5FXKKR6' where id=7; -update noar ti set b0='5FXKKR6' where id=7; -update noar tt set v0='5ZA8' where id=7; -update noar ti set v0='5ZA8' where id=7; -update noar tt set b1='MEMEMJHPB9VM7N8T16QXR55RLPP6I' where id=7; -update noar ti set b1='MEMEMJHPB9VM7N8T16QXR55RLPP6I' where id=7; -update noar tt set v0='VNKZV582' where id=7; -update noar ti set v0='VNKZV582' where id=7; -update noar tt set b2='D40FG' where id=7; -update noar ti set b2='D40FG' where id=7; -update noar tt set v0='N' where id=8; -update noar ti set v0='N' where id=8; -update noar tt set b0='CKITJ80' where id=8; -update noar ti set b0='CKITJ80' where id=8; -update noar tt set v0='TAG8KP1I70T' where id=8; -update noar ti set v0='TAG8KP1I70T' where id=8; -update noar tt set b1='MUFDAR3MKF7G2' where id=8; -update noar ti set b1='MUFDAR3MKF7G2' where id=8; -update noar tt set v0='DV6OYSYMTSL4J0MZA4BLMR4SS' where id=8; -update noar ti set v0='DV6OYSYMTSL4J0MZA4BLMR4SS' where id=8; -update noar tt set b2='JD9VBD90ISALS28FAZR' where id=8; -update noar ti set b2='JD9VBD90ISALS28FAZR' where id=8; -update noar tt set v0='N9FWVOTP' where id=9; -update noar ti set v0='N9FWVOTP' where id=9; -update noar tt set b0='4CT9STPMHN9SOLOJ8KP8X0EF' where id=9; -update noar ti set b0='4CT9STPMHN9SOLOJ8KP8X0EF' where id=9; -update noar tt set v0='K1KQ1NZL' where id=9; -update noar ti set v0='K1KQ1NZL' where id=9; -update noar tt set b1='JUJ08UIPL' where id=9; -update noar ti set b1='JUJ08UIPL' where id=9; -update noar tt set v0='KXNON0H8NK4ER1X' where id=9; -update noar ti set v0='KXNON0H8NK4ER1X' where id=9; -update noar tt set b2='7DY89UDOPJ9NGZIPHWLEPBR928K' where id=9; -update noar ti set b2='7DY89UDOPJ9NGZIPHWLEPBR928K' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 tinyblob not null, - b1 mediumblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='SVS1CJH9MHOF' where id=1; -update noar ti set v0='SVS1CJH9MHOF' where id=1; -update noar tt set b0='P6VY4DA' where id=1; -update noar ti set b0='P6VY4DA' where id=1; -update noar tt set v0='YXA4PZVFI2SAPLXO2QQK' where id=1; -update noar ti set v0='YXA4PZVFI2SAPLXO2QQK' where id=1; -update noar tt set b1='YSWGMJAJQYQYH52NEFPYL6IOLB47' where id=1; -update noar ti set b1='YSWGMJAJQYQYH52NEFPYL6IOLB47' where id=1; -update noar tt set v0='U34RKJQPULMTCLIQ9O0AHDDJCBU' where id=1; -update noar ti set v0='U34RKJQPULMTCLIQ9O0AHDDJCBU' where id=1; -update noar tt set b2='32GZ9KL715RAV5L156X07TKP27V51' where id=1; -update noar ti set b2='32GZ9KL715RAV5L156X07TKP27V51' where id=1; -update noar tt set v0='HFXPSFWSTAQBLGF' where id=2; -update noar ti set v0='HFXPSFWSTAQBLGF' where id=2; -update noar tt set b0='16799X2JGMRSJKV9JT0E56V4' where id=2; -update noar ti set b0='16799X2JGMRSJKV9JT0E56V4' where id=2; -update noar tt set v0='Q8Y38VBDRAH' where id=2; -update noar ti set v0='Q8Y38VBDRAH' where id=2; -update noar tt set b1='JADHN4OKI9LI' where id=2; -update noar ti set b1='JADHN4OKI9LI' where id=2; -update noar tt set v0='28TF2' where id=2; -update noar ti set v0='28TF2' where id=2; -update noar tt set b2='I7CRDB3S3V' where id=2; -update noar ti set b2='I7CRDB3S3V' where id=2; -update noar tt set v0='C7JR292X2L1WZV94QN' where id=3; -update noar ti set v0='C7JR292X2L1WZV94QN' where id=3; -update noar tt set b0='YF5YOYC5' where id=3; -update noar ti set b0='YF5YOYC5' where id=3; -update noar tt set v0='3' where id=3; -update noar ti set v0='3' where id=3; -update noar tt set b1='JEVTUJ40FDZ0SJ7EXAU8G' where id=3; -update noar ti set b1='JEVTUJ40FDZ0SJ7EXAU8G' where id=3; -update noar tt set v0='FLHB2KV6J4G121' where id=3; -update noar ti set v0='FLHB2KV6J4G121' where id=3; -update noar tt set b2='JT3EX2VT' where id=3; -update noar ti set b2='JT3EX2VT' where id=3; -update noar tt set v0='EE243AO5A96' where id=4; -update noar ti set v0='EE243AO5A96' where id=4; -update noar tt set b0='5HWHG' where id=4; -update noar ti set b0='5HWHG' where id=4; -update noar tt set v0='F4' where id=4; -update noar ti set v0='F4' where id=4; -update noar tt set b1='W55UA' where id=4; -update noar ti set b1='W55UA' where id=4; -update noar tt set v0='VT5GWXF3N3BWL6RJGTL1EM' where id=4; -update noar ti set v0='VT5GWXF3N3BWL6RJGTL1EM' where id=4; -update noar tt set b2='K1WURXKC32P6M942G' where id=4; -update noar ti set b2='K1WURXKC32P6M942G' where id=4; -update noar tt set v0='MVJDMZCEEXMN3NDMDI8PD' where id=5; -update noar ti set v0='MVJDMZCEEXMN3NDMDI8PD' where id=5; -update noar tt set b0='EZEFSR60' where id=5; -update noar ti set b0='EZEFSR60' where id=5; -update noar tt set v0='WUOHULEMUZ6VZEB7V13RTEEZ4O' where id=5; -update noar ti set v0='WUOHULEMUZ6VZEB7V13RTEEZ4O' where id=5; -update noar tt set b1='4MDKTF12OW' where id=5; -update noar ti set b1='4MDKTF12OW' where id=5; -update noar tt set v0='2QBROSWYOZN1UVBY83' where id=5; -update noar ti set v0='2QBROSWYOZN1UVBY83' where id=5; -update noar tt set b2='C5XEL5SD8UGGKK15V2LVL' where id=5; -update noar ti set b2='C5XEL5SD8UGGKK15V2LVL' where id=5; -update noar tt set v0='UMYDN4A9YJIWBTAACWYWPB98K7Y' where id=6; -update noar ti set v0='UMYDN4A9YJIWBTAACWYWPB98K7Y' where id=6; -update noar tt set b0='A7DYUHZ2M6FUEVZPGSORYFHLGWVE6R8' where id=6; -update noar ti set b0='A7DYUHZ2M6FUEVZPGSORYFHLGWVE6R8' where id=6; -update noar tt set v0='1WZB259RAVK7RB4OXP2FMLF8PFN' where id=6; -update noar ti set v0='1WZB259RAVK7RB4OXP2FMLF8PFN' where id=6; -update noar tt set b1='NQ' where id=6; -update noar ti set b1='NQ' where id=6; -update noar tt set v0='5M8SF1VA' where id=6; -update noar ti set v0='5M8SF1VA' where id=6; -update noar tt set b2='WHA1UQ691XYY03Z6BSSYM' where id=6; -update noar ti set b2='WHA1UQ691XYY03Z6BSSYM' where id=6; -update noar tt set v0='QW3RFE7OMBWT' where id=7; -update noar ti set v0='QW3RFE7OMBWT' where id=7; -update noar tt set b0='ZUXQIXF8ET16V9INAGS9RU7NT7VL0YB5' where id=7; -update noar ti set b0='ZUXQIXF8ET16V9INAGS9RU7NT7VL0YB5' where id=7; -update noar tt set v0='NC34Q6U1KKX666K8XF' where id=7; -update noar ti set v0='NC34Q6U1KKX666K8XF' where id=7; -update noar tt set b1='14J4V1B186PIFT7IOGS05OS' where id=7; -update noar ti set b1='14J4V1B186PIFT7IOGS05OS' where id=7; -update noar tt set v0='Q' where id=7; -update noar ti set v0='Q' where id=7; -update noar tt set b2='BMYOOMTZGF9W' where id=7; -update noar ti set b2='BMYOOMTZGF9W' where id=7; -update noar tt set v0='I26IL1UK' where id=8; -update noar ti set v0='I26IL1UK' where id=8; -update noar tt set b0='FJ6EHR' where id=8; -update noar ti set b0='FJ6EHR' where id=8; -update noar tt set v0='98S8AP88WJKA5BW7CA' where id=8; -update noar ti set v0='98S8AP88WJKA5BW7CA' where id=8; -update noar tt set b1='4ELCB1SGHORBKGVTPBV0' where id=8; -update noar ti set b1='4ELCB1SGHORBKGVTPBV0' where id=8; -update noar tt set v0='WCD3ZIUW' where id=8; -update noar ti set v0='WCD3ZIUW' where id=8; -update noar tt set b2='AHG5G' where id=8; -update noar ti set b2='AHG5G' where id=8; -update noar tt set v0='RQ955GUNMT' where id=9; -update noar ti set v0='RQ955GUNMT' where id=9; -update noar tt set b0='BWQGDY2J' where id=9; -update noar ti set b0='BWQGDY2J' where id=9; -update noar tt set v0='E2HHWLPCNR1I0PLZRMAT77' where id=9; -update noar ti set v0='E2HHWLPCNR1I0PLZRMAT77' where id=9; -update noar tt set b1='KPFBY4BJOM121XBCCCC' where id=9; -update noar ti set b1='KPFBY4BJOM121XBCCCC' where id=9; -update noar tt set v0='FEDMAGOB4PM' where id=9; -update noar ti set v0='FEDMAGOB4PM' where id=9; -update noar tt set b2='MBBATGZXRRU2P59YLV857SCUWXWWS8T4' where id=9; -update noar ti set b2='MBBATGZXRRU2P59YLV857SCUWXWWS8T4' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 tinyblob null, - b1 longblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='7NSIRRE7PDO090UO532COPA' where id=1; -update noar ti set v0='7NSIRRE7PDO090UO532COPA' where id=1; -update noar tt set b0='SX1AT' where id=1; -update noar ti set b0='SX1AT' where id=1; -update noar tt set v0='N03ON7YRP8S' where id=1; -update noar ti set v0='N03ON7YRP8S' where id=1; -update noar tt set b1='89HJLL11ASIIQCQURM' where id=1; -update noar ti set b1='89HJLL11ASIIQCQURM' where id=1; -update noar tt set v0='A4AR7' where id=1; -update noar ti set v0='A4AR7' where id=1; -update noar tt set b2='4STMA40VXNVHX21JKMY0U7CRGFV' where id=1; -update noar ti set b2='4STMA40VXNVHX21JKMY0U7CRGFV' where id=1; -update noar tt set v0='CNJPQ8M5OOF43FVR565L9Q' where id=2; -update noar ti set v0='CNJPQ8M5OOF43FVR565L9Q' where id=2; -update noar tt set b0='P4N9VL314ZEE0KPBL6GMRVFOBWYS1Q4' where id=2; -update noar ti set b0='P4N9VL314ZEE0KPBL6GMRVFOBWYS1Q4' where id=2; -update noar tt set v0='FSFE' where id=2; -update noar ti set v0='FSFE' where id=2; -update noar tt set b1='B2TJ8GHM7NWEDNHL9KUUL3MX' where id=2; -update noar ti set b1='B2TJ8GHM7NWEDNHL9KUUL3MX' where id=2; -update noar tt set v0='UUQ5Z5E0CUX6IYJ8LK1NS' where id=2; -update noar ti set v0='UUQ5Z5E0CUX6IYJ8LK1NS' where id=2; -update noar tt set b2='QDH8NG2' where id=2; -update noar ti set b2='QDH8NG2' where id=2; -update noar tt set v0='DLVBH3MJV22GPNKA3K37GDENTRPIYXR4' where id=3; -update noar ti set v0='DLVBH3MJV22GPNKA3K37GDENTRPIYXR4' where id=3; -update noar tt set b0='3C2VSEMVT8XRBJ9XXS7FCDH' where id=3; -update noar ti set b0='3C2VSEMVT8XRBJ9XXS7FCDH' where id=3; -update noar tt set v0='N4LSDCST46CMPHS6QKMYNYUAB4P' where id=3; -update noar ti set v0='N4LSDCST46CMPHS6QKMYNYUAB4P' where id=3; -update noar tt set b1='ZINN5OCLXVKHNPTIQC32MEQRVF' where id=3; -update noar ti set b1='ZINN5OCLXVKHNPTIQC32MEQRVF' where id=3; -update noar tt set v0='5A' where id=3; -update noar ti set v0='5A' where id=3; -update noar tt set b2='MBQZQAJP7GE1BEINRJAX66P5RXLORBJ' where id=3; -update noar ti set b2='MBQZQAJP7GE1BEINRJAX66P5RXLORBJ' where id=3; -update noar tt set v0='5IP4Z' where id=4; -update noar ti set v0='5IP4Z' where id=4; -update noar tt set b0='F0PJ76HZYMDYELDP' where id=4; -update noar ti set b0='F0PJ76HZYMDYELDP' where id=4; -update noar tt set v0='ND3OBZ0QX22Q8T1C3JCUJ7Q970EZB' where id=4; -update noar ti set v0='ND3OBZ0QX22Q8T1C3JCUJ7Q970EZB' where id=4; -update noar tt set b1='K4AAQ02SKB1JEGCGIQHQQ59ONPLO' where id=4; -update noar ti set b1='K4AAQ02SKB1JEGCGIQHQQ59ONPLO' where id=4; -update noar tt set v0='OA4L81CUX' where id=4; -update noar ti set v0='OA4L81CUX' where id=4; -update noar tt set b2='9MH33JRVK3ZAJBAHV820B4EPI' where id=4; -update noar ti set b2='9MH33JRVK3ZAJBAHV820B4EPI' where id=4; -update noar tt set v0='NUCA6QW41U1' where id=5; -update noar ti set v0='NUCA6QW41U1' where id=5; -update noar tt set b0='W7' where id=5; -update noar ti set b0='W7' where id=5; -update noar tt set v0='7CPMRUITWASXS3PY1GRS2GJCL' where id=5; -update noar ti set v0='7CPMRUITWASXS3PY1GRS2GJCL' where id=5; -update noar tt set b1='EYP8B4K5TO5MRYM9W9PNOYSH9BVQC0K' where id=5; -update noar ti set b1='EYP8B4K5TO5MRYM9W9PNOYSH9BVQC0K' where id=5; -update noar tt set v0='9H' where id=5; -update noar ti set v0='9H' where id=5; -update noar tt set b2='VS0M366QSZP3OIJBV7VNVH04' where id=5; -update noar ti set b2='VS0M366QSZP3OIJBV7VNVH04' where id=5; -update noar tt set v0='MP' where id=6; -update noar ti set v0='MP' where id=6; -update noar tt set b0='FWNPZUJD8QQXS8LU7IVDY1SFESSS04C' where id=6; -update noar ti set b0='FWNPZUJD8QQXS8LU7IVDY1SFESSS04C' where id=6; -update noar tt set v0='NIN' where id=6; -update noar ti set v0='NIN' where id=6; -update noar tt set b1='G1VN' where id=6; -update noar ti set b1='G1VN' where id=6; -update noar tt set v0='5X4A8X9G' where id=6; -update noar ti set v0='5X4A8X9G' where id=6; -update noar tt set b2='L4TF1XNRU' where id=6; -update noar ti set b2='L4TF1XNRU' where id=6; -update noar tt set v0='CGW4S3OU4X2HWSIAI' where id=7; -update noar ti set v0='CGW4S3OU4X2HWSIAI' where id=7; -update noar tt set b0='O8DNPYHHPKAXU6UEHLVQ' where id=7; -update noar ti set b0='O8DNPYHHPKAXU6UEHLVQ' where id=7; -update noar tt set v0='RAE20RBAM4QA5NA0IR3G7EJR' where id=7; -update noar ti set v0='RAE20RBAM4QA5NA0IR3G7EJR' where id=7; -update noar tt set b1='7J25YMESJRBJIUEPPMIJFYY5EWH3QOZ' where id=7; -update noar ti set b1='7J25YMESJRBJIUEPPMIJFYY5EWH3QOZ' where id=7; -update noar tt set v0='VXXDJWEH6L0Q37VZH4' where id=7; -update noar ti set v0='VXXDJWEH6L0Q37VZH4' where id=7; -update noar tt set b2='IEAF28JH6ZODZE1RH1ADTRS6P84Q9' where id=7; -update noar ti set b2='IEAF28JH6ZODZE1RH1ADTRS6P84Q9' where id=7; -update noar tt set v0='9FM9F4HES3IDD1' where id=8; -update noar ti set v0='9FM9F4HES3IDD1' where id=8; -update noar tt set b0='1GSA50TRBY1A' where id=8; -update noar ti set b0='1GSA50TRBY1A' where id=8; -update noar tt set v0='GPKEQ6JDN3EJ' where id=8; -update noar ti set v0='GPKEQ6JDN3EJ' where id=8; -update noar tt set b1='HMCACD3NLDLBM' where id=8; -update noar ti set b1='HMCACD3NLDLBM' where id=8; -update noar tt set v0='Z603RQ186GKQSMCEEGWCS91F' where id=8; -update noar ti set v0='Z603RQ186GKQSMCEEGWCS91F' where id=8; -update noar tt set b2='N7LL9Q1GGC44BJ0U' where id=8; -update noar ti set b2='N7LL9Q1GGC44BJ0U' where id=8; -update noar tt set v0='KRQ2CIRE' where id=9; -update noar ti set v0='KRQ2CIRE' where id=9; -update noar tt set b0='0HT9ZF' where id=9; -update noar ti set b0='0HT9ZF' where id=9; -update noar tt set v0='IDM27YTA1K3D9HOGAZ' where id=9; -update noar ti set v0='IDM27YTA1K3D9HOGAZ' where id=9; -update noar tt set b1='NG5LFG7C0IR0J' where id=9; -update noar ti set b1='NG5LFG7C0IR0J' where id=9; -update noar tt set v0='83UF3JY7X03WD4KBHVN4JJA7HU4' where id=9; -update noar ti set v0='83UF3JY7X03WD4KBHVN4JJA7HU4' where id=9; -update noar tt set b2='A7VR9468YV1K7NQ83D4QW' where id=9; -update noar ti set b2='A7VR9468YV1K7NQ83D4QW' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 tinyblob null, - b1 longblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='F2G0ANRRZDXN3D4FFNC' where id=1; -update noar ti set v0='F2G0ANRRZDXN3D4FFNC' where id=1; -update noar tt set b0='RUZV3AR7JIM1O52' where id=1; -update noar ti set b0='RUZV3AR7JIM1O52' where id=1; -update noar tt set v0='59UDFGL51M92PCG8O6804M7B0Z8QQ0' where id=1; -update noar ti set v0='59UDFGL51M92PCG8O6804M7B0Z8QQ0' where id=1; -update noar tt set b1='LUMO2HT0IAWOA59X6X6' where id=1; -update noar ti set b1='LUMO2HT0IAWOA59X6X6' where id=1; -update noar tt set v0='QXKFTUV6ZV4D6BQ' where id=1; -update noar ti set v0='QXKFTUV6ZV4D6BQ' where id=1; -update noar tt set b2='SE8WE0ZRY65IKZ895HX41WXKA' where id=1; -update noar ti set b2='SE8WE0ZRY65IKZ895HX41WXKA' where id=1; -update noar tt set v0='XQ7F80R840L815GP6MFV07OD0U9K1VY' where id=2; -update noar ti set v0='XQ7F80R840L815GP6MFV07OD0U9K1VY' where id=2; -update noar tt set b0='0EVJPQXQTW7Z' where id=2; -update noar ti set b0='0EVJPQXQTW7Z' where id=2; -update noar tt set v0='SH' where id=2; -update noar ti set v0='SH' where id=2; -update noar tt set b1='9E6QCLPTOE7BM' where id=2; -update noar ti set b1='9E6QCLPTOE7BM' where id=2; -update noar tt set v0='V7E1KX6HZKTERI90R9H' where id=2; -update noar ti set v0='V7E1KX6HZKTERI90R9H' where id=2; -update noar tt set b2='4343FP2BN3JCXP8BJOBSFM08RD7W6JH' where id=2; -update noar ti set b2='4343FP2BN3JCXP8BJOBSFM08RD7W6JH' where id=2; -update noar tt set v0='3YT' where id=3; -update noar ti set v0='3YT' where id=3; -update noar tt set b0='J0R9J071UFTZRFQBIV' where id=3; -update noar ti set b0='J0R9J071UFTZRFQBIV' where id=3; -update noar tt set v0='DY7R66U21GBF7H' where id=3; -update noar ti set v0='DY7R66U21GBF7H' where id=3; -update noar tt set b1='21ZAX0DMZ8EYSO8C372P80ULM' where id=3; -update noar ti set b1='21ZAX0DMZ8EYSO8C372P80ULM' where id=3; -update noar tt set v0='JLYNG0GO4GDX' where id=3; -update noar ti set v0='JLYNG0GO4GDX' where id=3; -update noar tt set b2='XSEEWBUBJIT889CWKKT3V' where id=3; -update noar ti set b2='XSEEWBUBJIT889CWKKT3V' where id=3; -update noar tt set v0='MIC2UB2IYTMJIIDM5YR' where id=4; -update noar ti set v0='MIC2UB2IYTMJIIDM5YR' where id=4; -update noar tt set b0='6MO92TRDPABU' where id=4; -update noar ti set b0='6MO92TRDPABU' where id=4; -update noar tt set v0='LUDE4FOMKEMAIAPU25V38WG' where id=4; -update noar ti set v0='LUDE4FOMKEMAIAPU25V38WG' where id=4; -update noar tt set b1='B539UQP1' where id=4; -update noar ti set b1='B539UQP1' where id=4; -update noar tt set v0='W80LXAGKMIIKDMLCA86V374D' where id=4; -update noar ti set v0='W80LXAGKMIIKDMLCA86V374D' where id=4; -update noar tt set b2='U1SC08Z' where id=4; -update noar ti set b2='U1SC08Z' where id=4; -update noar tt set v0='3GUHJWCANWBT7DRLUL0O' where id=5; -update noar ti set v0='3GUHJWCANWBT7DRLUL0O' where id=5; -update noar tt set b0='31FMH4K8' where id=5; -update noar ti set b0='31FMH4K8' where id=5; -update noar tt set v0='EEBKZDI4Z5ZD5EVY4WSG9' where id=5; -update noar ti set v0='EEBKZDI4Z5ZD5EVY4WSG9' where id=5; -update noar tt set b1='WLRJTIWA4U8IWTAIT5DBCAF' where id=5; -update noar ti set b1='WLRJTIWA4U8IWTAIT5DBCAF' where id=5; -update noar tt set v0='U2D1EB4WWYI6XBAFVLXTXF3VD8X0' where id=5; -update noar ti set v0='U2D1EB4WWYI6XBAFVLXTXF3VD8X0' where id=5; -update noar tt set b2='ETUW9U7OIZV04B9X5QR47' where id=5; -update noar ti set b2='ETUW9U7OIZV04B9X5QR47' where id=5; -update noar tt set v0='V9OVZF75BGPQF' where id=6; -update noar ti set v0='V9OVZF75BGPQF' where id=6; -update noar tt set b0='O4USARXBMSLAUMT3Z2' where id=6; -update noar ti set b0='O4USARXBMSLAUMT3Z2' where id=6; -update noar tt set v0='S' where id=6; -update noar ti set v0='S' where id=6; -update noar tt set b1='X1N47' where id=6; -update noar ti set b1='X1N47' where id=6; -update noar tt set v0='ZN3YFSON7Z3TY6SZXH09' where id=6; -update noar ti set v0='ZN3YFSON7Z3TY6SZXH09' where id=6; -update noar tt set b2='X0ILJWFPQ' where id=6; -update noar ti set b2='X0ILJWFPQ' where id=6; -update noar tt set v0='1QLFW9CL7BMT97T6LDW' where id=7; -update noar ti set v0='1QLFW9CL7BMT97T6LDW' where id=7; -update noar tt set b0='W5BW075XNE51' where id=7; -update noar ti set b0='W5BW075XNE51' where id=7; -update noar tt set v0='U79QMV33OU' where id=7; -update noar ti set v0='U79QMV33OU' where id=7; -update noar tt set b1='VQYEN3C9V4WKH158NI9B9XXO' where id=7; -update noar ti set b1='VQYEN3C9V4WKH158NI9B9XXO' where id=7; -update noar tt set v0='QOGJE1JD52Q' where id=7; -update noar ti set v0='QOGJE1JD52Q' where id=7; -update noar tt set b2='AOG6H' where id=7; -update noar ti set b2='AOG6H' where id=7; -update noar tt set v0='EXKDQW53D' where id=8; -update noar ti set v0='EXKDQW53D' where id=8; -update noar tt set b0='8DO6JVYMT6WHBPHEWU' where id=8; -update noar ti set b0='8DO6JVYMT6WHBPHEWU' where id=8; -update noar tt set v0='4MPSGJFPHGLMLJA4O' where id=8; -update noar ti set v0='4MPSGJFPHGLMLJA4O' where id=8; -update noar tt set b1='BF8S1V9QSSY' where id=8; -update noar ti set b1='BF8S1V9QSSY' where id=8; -update noar tt set v0='TK0RXP9B9UX6U2HH5Z' where id=8; -update noar ti set v0='TK0RXP9B9UX6U2HH5Z' where id=8; -update noar tt set b2='H7VMWTB517LSTLC81CQ' where id=8; -update noar ti set b2='H7VMWTB517LSTLC81CQ' where id=8; -update noar tt set v0='DMU3ZIU56SRXS6FPFPK' where id=9; -update noar ti set v0='DMU3ZIU56SRXS6FPFPK' where id=9; -update noar tt set b0='UX7KVYM0N0M95O9PEZEGVUBW' where id=9; -update noar ti set b0='UX7KVYM0N0M95O9PEZEGVUBW' where id=9; -update noar tt set v0='8MW67DCKDMWV7O9LWOZ9XT' where id=9; -update noar ti set v0='8MW67DCKDMWV7O9LWOZ9XT' where id=9; -update noar tt set b1='XPRPASTTAAY42U64R24J47B' where id=9; -update noar ti set b1='XPRPASTTAAY42U64R24J47B' where id=9; -update noar tt set v0='CP6YERJLIPJXMW55SGO31TTO' where id=9; -update noar ti set v0='CP6YERJLIPJXMW55SGO31TTO' where id=9; -update noar tt set b2='U' where id=9; -update noar ti set b2='U' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 tinyblob not null, - b1 longblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='GA4XSR9G0Z278E' where id=1; -update noar ti set v0='GA4XSR9G0Z278E' where id=1; -update noar tt set b0='TEMR3FDD' where id=1; -update noar ti set b0='TEMR3FDD' where id=1; -update noar tt set v0='SXZ7LDMEV1V2B3IZ0H37QK1XVKEKLG' where id=1; -update noar ti set v0='SXZ7LDMEV1V2B3IZ0H37QK1XVKEKLG' where id=1; -update noar tt set b1='D06Y0' where id=1; -update noar ti set b1='D06Y0' where id=1; -update noar tt set v0='S' where id=1; -update noar ti set v0='S' where id=1; -update noar tt set b2='20J9T1RKH7RJQVCM16OAVBF' where id=1; -update noar ti set b2='20J9T1RKH7RJQVCM16OAVBF' where id=1; -update noar tt set v0='LTC36CHJHB7KHR1ZDCW0SHY' where id=2; -update noar ti set v0='LTC36CHJHB7KHR1ZDCW0SHY' where id=2; -update noar tt set b0='A14Z7NYHDE14' where id=2; -update noar ti set b0='A14Z7NYHDE14' where id=2; -update noar tt set v0='JL2VIF22GD2CI7A8UN60AVDNE' where id=2; -update noar ti set v0='JL2VIF22GD2CI7A8UN60AVDNE' where id=2; -update noar tt set b1='HO9MK5ALLTQC' where id=2; -update noar ti set b1='HO9MK5ALLTQC' where id=2; -update noar tt set v0='UN68P4J1BF90QK1NUM20LWJFDN4SO' where id=2; -update noar ti set v0='UN68P4J1BF90QK1NUM20LWJFDN4SO' where id=2; -update noar tt set b2='ZGXMKN85YUB05XWMS76C5IY5X' where id=2; -update noar ti set b2='ZGXMKN85YUB05XWMS76C5IY5X' where id=2; -update noar tt set v0='VYX70NNZ' where id=3; -update noar ti set v0='VYX70NNZ' where id=3; -update noar tt set b0='8N4BD6CL49ZP1WM235HXJ49PFN1E' where id=3; -update noar ti set b0='8N4BD6CL49ZP1WM235HXJ49PFN1E' where id=3; -update noar tt set v0='SVHRUJ54CPM9V3VUZ5E2' where id=3; -update noar ti set v0='SVHRUJ54CPM9V3VUZ5E2' where id=3; -update noar tt set b1='E1FLSM' where id=3; -update noar ti set b1='E1FLSM' where id=3; -update noar tt set v0='VGQ1VZCNBLB2N88GZ0OYOO4I9I' where id=3; -update noar ti set v0='VGQ1VZCNBLB2N88GZ0OYOO4I9I' where id=3; -update noar tt set b2='33MZ9BRILUC46PAPTRAJY5UTC2D' where id=3; -update noar ti set b2='33MZ9BRILUC46PAPTRAJY5UTC2D' where id=3; -update noar tt set v0='D5M58L256U4RE2ZJAQUO3LXHY01PQH1G' where id=4; -update noar ti set v0='D5M58L256U4RE2ZJAQUO3LXHY01PQH1G' where id=4; -update noar tt set b0='OACS3LL439BRLI8QIBOC0RAKO' where id=4; -update noar ti set b0='OACS3LL439BRLI8QIBOC0RAKO' where id=4; -update noar tt set v0='XQ0UVE0YG4178G1CODVZFZG6Z' where id=4; -update noar ti set v0='XQ0UVE0YG4178G1CODVZFZG6Z' where id=4; -update noar tt set b1='XBH3M' where id=4; -update noar ti set b1='XBH3M' where id=4; -update noar tt set v0='F0LCQLBN08IM8PTNGP9HLWM28T' where id=4; -update noar ti set v0='F0LCQLBN08IM8PTNGP9HLWM28T' where id=4; -update noar tt set b2='9E0QDDOZ70BV7J4GPWUMTPCXWY' where id=4; -update noar ti set b2='9E0QDDOZ70BV7J4GPWUMTPCXWY' where id=4; -update noar tt set v0='19728D9MCS4' where id=5; -update noar ti set v0='19728D9MCS4' where id=5; -update noar tt set b0='5EHQWZ96F06AO9F2HO9Z6SYYCFC' where id=5; -update noar ti set b0='5EHQWZ96F06AO9F2HO9Z6SYYCFC' where id=5; -update noar tt set v0='RMWZ03T59S5ROOWWL4SO' where id=5; -update noar ti set v0='RMWZ03T59S5ROOWWL4SO' where id=5; -update noar tt set b1='3Z8GHUM0Y69R5UD5E4PWUH8HSD' where id=5; -update noar ti set b1='3Z8GHUM0Y69R5UD5E4PWUH8HSD' where id=5; -update noar tt set v0='E7UYXZ2B1SBHJ5YI5QT1KOK8DF' where id=5; -update noar ti set v0='E7UYXZ2B1SBHJ5YI5QT1KOK8DF' where id=5; -update noar tt set b2='0CDF8CJ76JCIX' where id=5; -update noar ti set b2='0CDF8CJ76JCIX' where id=5; -update noar tt set v0='S047S' where id=6; -update noar ti set v0='S047S' where id=6; -update noar tt set b0='2UAAT5D6ZDM46WZG78ULDC' where id=6; -update noar ti set b0='2UAAT5D6ZDM46WZG78ULDC' where id=6; -update noar tt set v0='DEB4J06NZKCOT8UV' where id=6; -update noar ti set v0='DEB4J06NZKCOT8UV' where id=6; -update noar tt set b1='SZEZR' where id=6; -update noar ti set b1='SZEZR' where id=6; -update noar tt set v0='A0CL8JG7AUL35' where id=6; -update noar ti set v0='A0CL8JG7AUL35' where id=6; -update noar tt set b2='J1' where id=6; -update noar ti set b2='J1' where id=6; -update noar tt set v0='9TA9ASJL9' where id=7; -update noar ti set v0='9TA9ASJL9' where id=7; -update noar tt set b0='03JPTBPKLNB1G54Y3UKFPKSX989Y' where id=7; -update noar ti set b0='03JPTBPKLNB1G54Y3UKFPKSX989Y' where id=7; -update noar tt set v0='MN9SKRX9DBQ2X8SY6B3HGMIFF' where id=7; -update noar ti set v0='MN9SKRX9DBQ2X8SY6B3HGMIFF' where id=7; -update noar tt set b1='9HB6957204TVPI1PJZIBAFHVMTXHG8' where id=7; -update noar ti set b1='9HB6957204TVPI1PJZIBAFHVMTXHG8' where id=7; -update noar tt set v0='TAD6DCQDGFSCOQMND7KFTHQEOO0T3' where id=7; -update noar ti set v0='TAD6DCQDGFSCOQMND7KFTHQEOO0T3' where id=7; -update noar tt set b2='VSD39SUUD' where id=7; -update noar ti set b2='VSD39SUUD' where id=7; -update noar tt set v0='N7DJLUZCRODL6MPDJF5N1U2MF3PPD5D' where id=8; -update noar ti set v0='N7DJLUZCRODL6MPDJF5N1U2MF3PPD5D' where id=8; -update noar tt set b0='GN3AEOJEFP12IT2Q5D786' where id=8; -update noar ti set b0='GN3AEOJEFP12IT2Q5D786' where id=8; -update noar tt set v0='BY0TR3KHUS' where id=8; -update noar ti set v0='BY0TR3KHUS' where id=8; -update noar tt set b1='PTP14D3R2FFALR7' where id=8; -update noar ti set b1='PTP14D3R2FFALR7' where id=8; -update noar tt set v0='L08T52YFXB3KCDBLNJ3PTQ99R1PI' where id=8; -update noar ti set v0='L08T52YFXB3KCDBLNJ3PTQ99R1PI' where id=8; -update noar tt set b2='5ADFE3ZKBHV7' where id=8; -update noar ti set b2='5ADFE3ZKBHV7' where id=8; -update noar tt set v0='DCEEB3ZJBY' where id=9; -update noar ti set v0='DCEEB3ZJBY' where id=9; -update noar tt set b0='N7IUX' where id=9; -update noar ti set b0='N7IUX' where id=9; -update noar tt set v0='VCHGPT' where id=9; -update noar ti set v0='VCHGPT' where id=9; -update noar tt set b1='I45GLXSBV3BX77OWMLZPM2K4GQIE' where id=9; -update noar ti set b1='I45GLXSBV3BX77OWMLZPM2K4GQIE' where id=9; -update noar tt set v0='UKEUMOA2CZBCJQQ1E3XV4R' where id=9; -update noar ti set v0='UKEUMOA2CZBCJQQ1E3XV4R' where id=9; -update noar tt set b2='A74Z0BJGH' where id=9; -update noar ti set b2='A74Z0BJGH' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 tinyblob not null, - b1 longblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='RHX6ZSEPWDD180CGDNX2ANY4L6MVRZ2' where id=1; -update noar ti set v0='RHX6ZSEPWDD180CGDNX2ANY4L6MVRZ2' where id=1; -update noar tt set b0='SI7' where id=1; -update noar ti set b0='SI7' where id=1; -update noar tt set v0='Z95A' where id=1; -update noar ti set v0='Z95A' where id=1; -update noar tt set b1='XMMOVC3LW7MB1GHC7FML31A640CG' where id=1; -update noar ti set b1='XMMOVC3LW7MB1GHC7FML31A640CG' where id=1; -update noar tt set v0='F02EU' where id=1; -update noar ti set v0='F02EU' where id=1; -update noar tt set b2='JKWK22SXMSVES6SL311FRL62PRSHWK' where id=1; -update noar ti set b2='JKWK22SXMSVES6SL311FRL62PRSHWK' where id=1; -update noar tt set v0='A0QIZ6RB9BER48PW9XFIN' where id=2; -update noar ti set v0='A0QIZ6RB9BER48PW9XFIN' where id=2; -update noar tt set b0='ZP5UWW' where id=2; -update noar ti set b0='ZP5UWW' where id=2; -update noar tt set v0='7AW12LPSV3PBNK1BWQ8EXJT86' where id=2; -update noar ti set v0='7AW12LPSV3PBNK1BWQ8EXJT86' where id=2; -update noar tt set b1='V2LS' where id=2; -update noar ti set b1='V2LS' where id=2; -update noar tt set v0='1HPC7O56RS' where id=2; -update noar ti set v0='1HPC7O56RS' where id=2; -update noar tt set b2='2PI' where id=2; -update noar ti set b2='2PI' where id=2; -update noar tt set v0='05OYNJDEW43LOKF35I8QQKT1' where id=3; -update noar ti set v0='05OYNJDEW43LOKF35I8QQKT1' where id=3; -update noar tt set b0='AD' where id=3; -update noar ti set b0='AD' where id=3; -update noar tt set v0='HAQ2W' where id=3; -update noar ti set v0='HAQ2W' where id=3; -update noar tt set b1='0L5BOQQDOPLA6RFIQCUF1R9G86BQVH64' where id=3; -update noar ti set b1='0L5BOQQDOPLA6RFIQCUF1R9G86BQVH64' where id=3; -update noar tt set v0='W7YAHULSVIZN' where id=3; -update noar ti set v0='W7YAHULSVIZN' where id=3; -update noar tt set b2='MELO6E1P5A0PRF9E8VIV7DQ9' where id=3; -update noar ti set b2='MELO6E1P5A0PRF9E8VIV7DQ9' where id=3; -update noar tt set v0='8' where id=4; -update noar ti set v0='8' where id=4; -update noar tt set b0='Z35O2JHUSNVD4M9OLS7IKLZ31XIKSZK8' where id=4; -update noar ti set b0='Z35O2JHUSNVD4M9OLS7IKLZ31XIKSZK8' where id=4; -update noar tt set v0='X6PSJ48A1HL' where id=4; -update noar ti set v0='X6PSJ48A1HL' where id=4; -update noar tt set b1='EZNSOAW8EVHWU1MIE' where id=4; -update noar ti set b1='EZNSOAW8EVHWU1MIE' where id=4; -update noar tt set v0='F7S5LV11CKC0U3IM' where id=4; -update noar ti set v0='F7S5LV11CKC0U3IM' where id=4; -update noar tt set b2='3Y8D922DCGB3PH37VOH030VJ56P5IT' where id=4; -update noar ti set b2='3Y8D922DCGB3PH37VOH030VJ56P5IT' where id=4; -update noar tt set v0='ZE1ZSJWS3GCH' where id=5; -update noar ti set v0='ZE1ZSJWS3GCH' where id=5; -update noar tt set b0='PCZDZTQDK430MZCCM3ED4' where id=5; -update noar ti set b0='PCZDZTQDK430MZCCM3ED4' where id=5; -update noar tt set v0='HN2Z9DSE02K9MU2HY42JS0DN' where id=5; -update noar ti set v0='HN2Z9DSE02K9MU2HY42JS0DN' where id=5; -update noar tt set b1='LN30P564TPXKP' where id=5; -update noar ti set b1='LN30P564TPXKP' where id=5; -update noar tt set v0='QS6PSAF6OG0L583UJ' where id=5; -update noar ti set v0='QS6PSAF6OG0L583UJ' where id=5; -update noar tt set b2='MX' where id=5; -update noar ti set b2='MX' where id=5; -update noar tt set v0='72J8TF5LRK6XC8AKD438HXCI4L' where id=6; -update noar ti set v0='72J8TF5LRK6XC8AKD438HXCI4L' where id=6; -update noar tt set b0='Z8TXQHOD' where id=6; -update noar ti set b0='Z8TXQHOD' where id=6; -update noar tt set v0='FAUAR4GWV1M1HHIXYVQ1' where id=6; -update noar ti set v0='FAUAR4GWV1M1HHIXYVQ1' where id=6; -update noar tt set b1='FUX4LNKYFX1' where id=6; -update noar ti set b1='FUX4LNKYFX1' where id=6; -update noar tt set v0='JSZMC2BR1W5EQ3P' where id=6; -update noar ti set v0='JSZMC2BR1W5EQ3P' where id=6; -update noar tt set b2='8LT9TI' where id=6; -update noar ti set b2='8LT9TI' where id=6; -update noar tt set v0='NUERFXT5L7YF9A' where id=7; -update noar ti set v0='NUERFXT5L7YF9A' where id=7; -update noar tt set b0='RHIM46ID550YIE940WF819NFVU6' where id=7; -update noar ti set b0='RHIM46ID550YIE940WF819NFVU6' where id=7; -update noar tt set v0='5QIFBBQ8NXLZPVQRJAIAN7TZ2' where id=7; -update noar ti set v0='5QIFBBQ8NXLZPVQRJAIAN7TZ2' where id=7; -update noar tt set b1='YO9LBZV13IGKDV' where id=7; -update noar ti set b1='YO9LBZV13IGKDV' where id=7; -update noar tt set v0='ZCKKDV' where id=7; -update noar ti set v0='ZCKKDV' where id=7; -update noar tt set b2='PWFQBE96O4SM24UFVMUL70WGQR' where id=7; -update noar ti set b2='PWFQBE96O4SM24UFVMUL70WGQR' where id=7; -update noar tt set v0='PPW0557YUDC1V3JEI' where id=8; -update noar ti set v0='PPW0557YUDC1V3JEI' where id=8; -update noar tt set b0='1GBHWSS8HEAMGQE' where id=8; -update noar ti set b0='1GBHWSS8HEAMGQE' where id=8; -update noar tt set v0='L' where id=8; -update noar ti set v0='L' where id=8; -update noar tt set b1='KNJ64RW2F3D3F5C2VR8453SYJ' where id=8; -update noar ti set b1='KNJ64RW2F3D3F5C2VR8453SYJ' where id=8; -update noar tt set v0='FMUI1JLJ2UOP5JTF7Z' where id=8; -update noar ti set v0='FMUI1JLJ2UOP5JTF7Z' where id=8; -update noar tt set b2='OJMB9J9ASHW408KK7X5KJ7NT5L9KKUW' where id=8; -update noar ti set b2='OJMB9J9ASHW408KK7X5KJ7NT5L9KKUW' where id=8; -update noar tt set v0='5ZAQVJGR0FF9L2KJK' where id=9; -update noar ti set v0='5ZAQVJGR0FF9L2KJK' where id=9; -update noar tt set b0='J1EZ6F00EDN8JHDQ' where id=9; -update noar ti set b0='J1EZ6F00EDN8JHDQ' where id=9; -update noar tt set v0='JHHUV1NTE0GRIULJ1OCTW3R7OWE' where id=9; -update noar ti set v0='JHHUV1NTE0GRIULJ1OCTW3R7OWE' where id=9; -update noar tt set b1='Z' where id=9; -update noar ti set b1='Z' where id=9; -update noar tt set v0='MH6LDXE5053QJY5CP3' where id=9; -update noar ti set v0='MH6LDXE5053QJY5CP3' where id=9; -update noar tt set b2='024K7PZ8XQBVSKCH' where id=9; -update noar ti set b2='024K7PZ8XQBVSKCH' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 tinyblob null, - b1 longblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='3TALMJEYUL3XVZWSI7H4LOG5B8NB9' where id=1; -update noar ti set v0='3TALMJEYUL3XVZWSI7H4LOG5B8NB9' where id=1; -update noar tt set b0='ZD5' where id=1; -update noar ti set b0='ZD5' where id=1; -update noar tt set v0='FC4DBP6K33E5XYCUY5B5IVTYVJ' where id=1; -update noar ti set v0='FC4DBP6K33E5XYCUY5B5IVTYVJ' where id=1; -update noar tt set b1='ZJ0Q56' where id=1; -update noar ti set b1='ZJ0Q56' where id=1; -update noar tt set v0='1PDOQ4MJJPZF2DA5LKYDX' where id=1; -update noar ti set v0='1PDOQ4MJJPZF2DA5LKYDX' where id=1; -update noar tt set b2='6M' where id=1; -update noar ti set b2='6M' where id=1; -update noar tt set v0='NJMF27L482YFB4' where id=2; -update noar ti set v0='NJMF27L482YFB4' where id=2; -update noar tt set b0='Q8X6R56GI5HTNHSOY22485RKT' where id=2; -update noar ti set b0='Q8X6R56GI5HTNHSOY22485RKT' where id=2; -update noar tt set v0='WX2UGT' where id=2; -update noar ti set v0='WX2UGT' where id=2; -update noar tt set b1='MBXN' where id=2; -update noar ti set b1='MBXN' where id=2; -update noar tt set v0='JER6ANLDH74K352P' where id=2; -update noar ti set v0='JER6ANLDH74K352P' where id=2; -update noar tt set b2='89SH17DPU15DWFA8A8M90SFDLS4WC' where id=2; -update noar ti set b2='89SH17DPU15DWFA8A8M90SFDLS4WC' where id=2; -update noar tt set v0='CJOK8J430TWBC' where id=3; -update noar ti set v0='CJOK8J430TWBC' where id=3; -update noar tt set b0='BGJZL25W5BPD3BXNEYKQ7ZJK8KE' where id=3; -update noar ti set b0='BGJZL25W5BPD3BXNEYKQ7ZJK8KE' where id=3; -update noar tt set v0='1LI25' where id=3; -update noar ti set v0='1LI25' where id=3; -update noar tt set b1='PK2SEUOKCJNTQJGL' where id=3; -update noar ti set b1='PK2SEUOKCJNTQJGL' where id=3; -update noar tt set v0='TTRMTRTC' where id=3; -update noar ti set v0='TTRMTRTC' where id=3; -update noar tt set b2='ON6G2O3V07RW777B8VBP' where id=3; -update noar ti set b2='ON6G2O3V07RW777B8VBP' where id=3; -update noar tt set v0='PVYFTZ7M3UZWX44QV8HSXO8AC5EHBK5' where id=4; -update noar ti set v0='PVYFTZ7M3UZWX44QV8HSXO8AC5EHBK5' where id=4; -update noar tt set b0='AICM6Q7EVUXJPPPQGZS' where id=4; -update noar ti set b0='AICM6Q7EVUXJPPPQGZS' where id=4; -update noar tt set v0='S59B8H97M9YHLF3BR0ATIM7RQJSJ2LL' where id=4; -update noar ti set v0='S59B8H97M9YHLF3BR0ATIM7RQJSJ2LL' where id=4; -update noar tt set b1='IJAYTD8WDYPV1B' where id=4; -update noar ti set b1='IJAYTD8WDYPV1B' where id=4; -update noar tt set v0='IX2IS2P9DA9WK872' where id=4; -update noar ti set v0='IX2IS2P9DA9WK872' where id=4; -update noar tt set b2='C' where id=4; -update noar ti set b2='C' where id=4; -update noar tt set v0='CJOCR90MH9JQ8D' where id=5; -update noar ti set v0='CJOCR90MH9JQ8D' where id=5; -update noar tt set b0='M0XN1R6D' where id=5; -update noar ti set b0='M0XN1R6D' where id=5; -update noar tt set v0='A7W3X0Y0QKHU' where id=5; -update noar ti set v0='A7W3X0Y0QKHU' where id=5; -update noar tt set b1='AWTGHB5SWCU4LD' where id=5; -update noar ti set b1='AWTGHB5SWCU4LD' where id=5; -update noar tt set v0='HF3JFPAZEGZ1D' where id=5; -update noar ti set v0='HF3JFPAZEGZ1D' where id=5; -update noar tt set b2='ESW87EBUDE' where id=5; -update noar ti set b2='ESW87EBUDE' where id=5; -update noar tt set v0='M9' where id=6; -update noar ti set v0='M9' where id=6; -update noar tt set b0='01BL1PGPWRO' where id=6; -update noar ti set b0='01BL1PGPWRO' where id=6; -update noar tt set v0='J96OL2QIUN2TW69N4VUOZR' where id=6; -update noar ti set v0='J96OL2QIUN2TW69N4VUOZR' where id=6; -update noar tt set b1='J6NBMDM4L3IR3W3TF1KSAW9WGRX4' where id=6; -update noar ti set b1='J6NBMDM4L3IR3W3TF1KSAW9WGRX4' where id=6; -update noar tt set v0='WEDXHHK9NGV6F2MK4N8O' where id=6; -update noar ti set v0='WEDXHHK9NGV6F2MK4N8O' where id=6; -update noar tt set b2='UI9VZ97888W9U9I1ATYP9ILSYQB' where id=6; -update noar ti set b2='UI9VZ97888W9U9I1ATYP9ILSYQB' where id=6; -update noar tt set v0='UVBH0R7QFXO8Q9DA7AVGW' where id=7; -update noar ti set v0='UVBH0R7QFXO8Q9DA7AVGW' where id=7; -update noar tt set b0='C7G734CC8APAQU19W' where id=7; -update noar ti set b0='C7G734CC8APAQU19W' where id=7; -update noar tt set v0='EG' where id=7; -update noar ti set v0='EG' where id=7; -update noar tt set b1='H344WC1PKOUFI' where id=7; -update noar ti set b1='H344WC1PKOUFI' where id=7; -update noar tt set v0='01Q0UMR8SZ65S3FZCZ6PQL' where id=7; -update noar ti set v0='01Q0UMR8SZ65S3FZCZ6PQL' where id=7; -update noar tt set b2='8A' where id=7; -update noar ti set b2='8A' where id=7; -update noar tt set v0='GSS1TMSTG2UK7D2SJ7MRTBX0VSJ1IT' where id=8; -update noar ti set v0='GSS1TMSTG2UK7D2SJ7MRTBX0VSJ1IT' where id=8; -update noar tt set b0='N0AWR0KUY6C6FZJN00J08YH9UELJBGPY' where id=8; -update noar ti set b0='N0AWR0KUY6C6FZJN00J08YH9UELJBGPY' where id=8; -update noar tt set v0='26A7IIPNZ6030EH336IOI09DIRV' where id=8; -update noar ti set v0='26A7IIPNZ6030EH336IOI09DIRV' where id=8; -update noar tt set b1='AU' where id=8; -update noar ti set b1='AU' where id=8; -update noar tt set v0='YBTE4ZO' where id=8; -update noar ti set v0='YBTE4ZO' where id=8; -update noar tt set b2='H' where id=8; -update noar ti set b2='H' where id=8; -update noar tt set v0='9C5BLT0VXJ79UL' where id=9; -update noar ti set v0='9C5BLT0VXJ79UL' where id=9; -update noar tt set b0='QDRBV6WR9LGS' where id=9; -update noar ti set b0='QDRBV6WR9LGS' where id=9; -update noar tt set v0='R47BDLVJW298YO98WWLFZE6R8P' where id=9; -update noar ti set v0='R47BDLVJW298YO98WWLFZE6R8P' where id=9; -update noar tt set b1='8OBMNVTOYCIVM' where id=9; -update noar ti set b1='8OBMNVTOYCIVM' where id=9; -update noar tt set v0='G8PRUEWJJQ4S4VMVL146KK21F' where id=9; -update noar ti set v0='G8PRUEWJJQ4S4VMVL146KK21F' where id=9; -update noar tt set b2='AP8A8R75IK6X5' where id=9; -update noar ti set b2='AP8A8R75IK6X5' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 tinyblob null, - b1 longblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='ZBR1RZH5RUAB9ZF0E65R' where id=1; -update noar ti set v0='ZBR1RZH5RUAB9ZF0E65R' where id=1; -update noar tt set b0='C2X2' where id=1; -update noar ti set b0='C2X2' where id=1; -update noar tt set v0='A9Y1CUFPYLMJN1K6TGVT3N0SFR3' where id=1; -update noar ti set v0='A9Y1CUFPYLMJN1K6TGVT3N0SFR3' where id=1; -update noar tt set b1='31CY2Y3K6S6CJK' where id=1; -update noar ti set b1='31CY2Y3K6S6CJK' where id=1; -update noar tt set v0='F96F4D0HIC7BE52' where id=1; -update noar ti set v0='F96F4D0HIC7BE52' where id=1; -update noar tt set b2='39OLOE6J36V8AK47L6M2' where id=1; -update noar ti set b2='39OLOE6J36V8AK47L6M2' where id=1; -update noar tt set v0='PBF2LOHM5GG1ZW3X6R8OVHTHDX' where id=2; -update noar ti set v0='PBF2LOHM5GG1ZW3X6R8OVHTHDX' where id=2; -update noar tt set b0='B56' where id=2; -update noar ti set b0='B56' where id=2; -update noar tt set v0='6BH0DT56RVDK0GI2ZJVQDE9T' where id=2; -update noar ti set v0='6BH0DT56RVDK0GI2ZJVQDE9T' where id=2; -update noar tt set b1='F' where id=2; -update noar ti set b1='F' where id=2; -update noar tt set v0='K2JYX5OEGDKV' where id=2; -update noar ti set v0='K2JYX5OEGDKV' where id=2; -update noar tt set b2='Q8JZYWVE' where id=2; -update noar ti set b2='Q8JZYWVE' where id=2; -update noar tt set v0='1C' where id=3; -update noar ti set v0='1C' where id=3; -update noar tt set b0='WPG4H5A79SU0D7DJPEGTU6F7I1FF' where id=3; -update noar ti set b0='WPG4H5A79SU0D7DJPEGTU6F7I1FF' where id=3; -update noar tt set v0='W3BX3H' where id=3; -update noar ti set v0='W3BX3H' where id=3; -update noar tt set b1='34AHS5BO06X7CALPGKG10GB' where id=3; -update noar ti set b1='34AHS5BO06X7CALPGKG10GB' where id=3; -update noar tt set v0='VDR59ZYYFIE3DI9X1U36U5I' where id=3; -update noar ti set v0='VDR59ZYYFIE3DI9X1U36U5I' where id=3; -update noar tt set b2='YCT5173NUTGAEU8WW' where id=3; -update noar ti set b2='YCT5173NUTGAEU8WW' where id=3; -update noar tt set v0='PCT' where id=4; -update noar ti set v0='PCT' where id=4; -update noar tt set b0='RLXM8NM70GJPV' where id=4; -update noar ti set b0='RLXM8NM70GJPV' where id=4; -update noar tt set v0='XC3MVDL' where id=4; -update noar ti set v0='XC3MVDL' where id=4; -update noar tt set b1='NR4' where id=4; -update noar ti set b1='NR4' where id=4; -update noar tt set v0='CF17CTN2KQAONCRP' where id=4; -update noar ti set v0='CF17CTN2KQAONCRP' where id=4; -update noar tt set b2='8BV78G085HMHP5MAEEPA209V1AKXMTI0' where id=4; -update noar ti set b2='8BV78G085HMHP5MAEEPA209V1AKXMTI0' where id=4; -update noar tt set v0='OCSB15Z04JBUEKYEEO7REHTKDOAGP8' where id=5; -update noar ti set v0='OCSB15Z04JBUEKYEEO7REHTKDOAGP8' where id=5; -update noar tt set b0='JPXH5JVYA8O' where id=5; -update noar ti set b0='JPXH5JVYA8O' where id=5; -update noar tt set v0='UBI71D4EER47V7VXJL666V3' where id=5; -update noar ti set v0='UBI71D4EER47V7VXJL666V3' where id=5; -update noar tt set b1='FL1EB8J3ZUZ2AXNYV4U4N' where id=5; -update noar ti set b1='FL1EB8J3ZUZ2AXNYV4U4N' where id=5; -update noar tt set v0='4IBMWD' where id=5; -update noar ti set v0='4IBMWD' where id=5; -update noar tt set b2='IVREG6VT55HW64B7ZJ54CW41I' where id=5; -update noar ti set b2='IVREG6VT55HW64B7ZJ54CW41I' where id=5; -update noar tt set v0='NGACLMQGQ' where id=6; -update noar ti set v0='NGACLMQGQ' where id=6; -update noar tt set b0='HSQ4' where id=6; -update noar ti set b0='HSQ4' where id=6; -update noar tt set v0='5TG8QKKFQZKDJ8' where id=6; -update noar ti set v0='5TG8QKKFQZKDJ8' where id=6; -update noar tt set b1='IYTGSKCO4LIASOV' where id=6; -update noar ti set b1='IYTGSKCO4LIASOV' where id=6; -update noar tt set v0='QB14ZKHM' where id=6; -update noar ti set v0='QB14ZKHM' where id=6; -update noar tt set b2='WJMZ492D75GTRN' where id=6; -update noar ti set b2='WJMZ492D75GTRN' where id=6; -update noar tt set v0='JHOXU6BXOTS' where id=7; -update noar ti set v0='JHOXU6BXOTS' where id=7; -update noar tt set b0='6Y6JSJ85LJ7' where id=7; -update noar ti set b0='6Y6JSJ85LJ7' where id=7; -update noar tt set v0='CI3JTO' where id=7; -update noar ti set v0='CI3JTO' where id=7; -update noar tt set b1='A00CSY95X2Y' where id=7; -update noar ti set b1='A00CSY95X2Y' where id=7; -update noar tt set v0='U6T4' where id=7; -update noar ti set v0='U6T4' where id=7; -update noar tt set b2='L06WPBJJK3L04PYKIVVJ71MZ1XHK4' where id=7; -update noar ti set b2='L06WPBJJK3L04PYKIVVJ71MZ1XHK4' where id=7; -update noar tt set v0='F' where id=8; -update noar ti set v0='F' where id=8; -update noar tt set b0='QNG8KVK97AHEQL3L3WCDKBUA57' where id=8; -update noar ti set b0='QNG8KVK97AHEQL3L3WCDKBUA57' where id=8; -update noar tt set v0='F5I7DC8T96JXREQAY7LD0YY8NI5' where id=8; -update noar ti set v0='F5I7DC8T96JXREQAY7LD0YY8NI5' where id=8; -update noar tt set b1='42' where id=8; -update noar ti set b1='42' where id=8; -update noar tt set v0='SIJKM2IZC24XCSK' where id=8; -update noar ti set v0='SIJKM2IZC24XCSK' where id=8; -update noar tt set b2='WGYIO39KYRMHZGMD3CJGLEO' where id=8; -update noar ti set b2='WGYIO39KYRMHZGMD3CJGLEO' where id=8; -update noar tt set v0='6M6DPA' where id=9; -update noar ti set v0='6M6DPA' where id=9; -update noar tt set b0='ANMLOMQZL47J897PJM0QLF' where id=9; -update noar ti set b0='ANMLOMQZL47J897PJM0QLF' where id=9; -update noar tt set v0='93' where id=9; -update noar ti set v0='93' where id=9; -update noar tt set b1='PF2FBQTEAK4D845ZL851RKUSOKK5044X' where id=9; -update noar ti set b1='PF2FBQTEAK4D845ZL851RKUSOKK5044X' where id=9; -update noar tt set v0='VWACSI' where id=9; -update noar ti set v0='VWACSI' where id=9; -update noar tt set b2='1T99QYQZE8JZWF3XYKYDDQF' where id=9; -update noar ti set b2='1T99QYQZE8JZWF3XYKYDDQF' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 tinyblob not null, - b1 longblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='1LMZOTE3XY9U0S' where id=1; -update noar ti set v0='1LMZOTE3XY9U0S' where id=1; -update noar tt set b0='CUPMYGJ' where id=1; -update noar ti set b0='CUPMYGJ' where id=1; -update noar tt set v0='FN9FX81B3UFX2SXR' where id=1; -update noar ti set v0='FN9FX81B3UFX2SXR' where id=1; -update noar tt set b1='KRNP1GQ2JAESAYMXMM7BZ7TOO6A1S' where id=1; -update noar ti set b1='KRNP1GQ2JAESAYMXMM7BZ7TOO6A1S' where id=1; -update noar tt set v0='KGXCKH7NCX6JM8SY52' where id=1; -update noar ti set v0='KGXCKH7NCX6JM8SY52' where id=1; -update noar tt set b2='I' where id=1; -update noar ti set b2='I' where id=1; -update noar tt set v0='PCY9DN7O0DJY94Z3ZJBIBKKDMXA43R3W' where id=2; -update noar ti set v0='PCY9DN7O0DJY94Z3ZJBIBKKDMXA43R3W' where id=2; -update noar tt set b0='B8M46N' where id=2; -update noar ti set b0='B8M46N' where id=2; -update noar tt set v0='IEECMOP0VF8OJRMYRJE' where id=2; -update noar ti set v0='IEECMOP0VF8OJRMYRJE' where id=2; -update noar tt set b1='2IVOQS9' where id=2; -update noar ti set b1='2IVOQS9' where id=2; -update noar tt set v0='T6U6G727MWLCYX7' where id=2; -update noar ti set v0='T6U6G727MWLCYX7' where id=2; -update noar tt set b2='R8RTHQRQHLDEV0SCFCZKD2TV64PX' where id=2; -update noar ti set b2='R8RTHQRQHLDEV0SCFCZKD2TV64PX' where id=2; -update noar tt set v0='726HW8CG3BF39PJN98BEHYXF3' where id=3; -update noar ti set v0='726HW8CG3BF39PJN98BEHYXF3' where id=3; -update noar tt set b0='1LA6L30GVWN7T212HXZVMTGKSRY' where id=3; -update noar ti set b0='1LA6L30GVWN7T212HXZVMTGKSRY' where id=3; -update noar tt set v0='7V3J45UAWACHDD2' where id=3; -update noar ti set v0='7V3J45UAWACHDD2' where id=3; -update noar tt set b1='V5Q9T7XY5M1BKDK' where id=3; -update noar ti set b1='V5Q9T7XY5M1BKDK' where id=3; -update noar tt set v0='D' where id=3; -update noar ti set v0='D' where id=3; -update noar tt set b2='AXDZ1QSJVUI' where id=3; -update noar ti set b2='AXDZ1QSJVUI' where id=3; -update noar tt set v0='V' where id=4; -update noar ti set v0='V' where id=4; -update noar tt set b0='W2DNZAH0O' where id=4; -update noar ti set b0='W2DNZAH0O' where id=4; -update noar tt set v0='ANWLI9YP8Z9L' where id=4; -update noar ti set v0='ANWLI9YP8Z9L' where id=4; -update noar tt set b1='ACYL' where id=4; -update noar ti set b1='ACYL' where id=4; -update noar tt set v0='7W' where id=4; -update noar ti set v0='7W' where id=4; -update noar tt set b2='UK30' where id=4; -update noar ti set b2='UK30' where id=4; -update noar tt set v0='S4K3NEZLQY5IVB0M' where id=5; -update noar ti set v0='S4K3NEZLQY5IVB0M' where id=5; -update noar tt set b0='GOE3J8G2HLU7NO1NC7YTF0ZJB1TJ2V8Y' where id=5; -update noar ti set b0='GOE3J8G2HLU7NO1NC7YTF0ZJB1TJ2V8Y' where id=5; -update noar tt set v0='KUVK8YAEOAGXM20XI' where id=5; -update noar ti set v0='KUVK8YAEOAGXM20XI' where id=5; -update noar tt set b1='NHOU6FTFZJ' where id=5; -update noar ti set b1='NHOU6FTFZJ' where id=5; -update noar tt set v0='CC3TD' where id=5; -update noar ti set v0='CC3TD' where id=5; -update noar tt set b2='R' where id=5; -update noar ti set b2='R' where id=5; -update noar tt set v0='X2DG' where id=6; -update noar ti set v0='X2DG' where id=6; -update noar tt set b0='1XOJRLV68F9SRS5GK0LLAGQC6ZWMDJ2X' where id=6; -update noar ti set b0='1XOJRLV68F9SRS5GK0LLAGQC6ZWMDJ2X' where id=6; -update noar tt set v0='7Z4ZCTYWEK' where id=6; -update noar ti set v0='7Z4ZCTYWEK' where id=6; -update noar tt set b1='ZWG6AIH2SJGSBZELCWXKBXP1SVFKE5' where id=6; -update noar ti set b1='ZWG6AIH2SJGSBZELCWXKBXP1SVFKE5' where id=6; -update noar tt set v0='6AKN4445HHPP' where id=6; -update noar ti set v0='6AKN4445HHPP' where id=6; -update noar tt set b2='CLF95AWIND8GV2KD2FYQF' where id=6; -update noar ti set b2='CLF95AWIND8GV2KD2FYQF' where id=6; -update noar tt set v0='6QSH5C3E50YL0VWP2RXECRE5' where id=7; -update noar ti set v0='6QSH5C3E50YL0VWP2RXECRE5' where id=7; -update noar tt set b0='CWK3PH9G1MZX81VW464JNOU35XWN64MA' where id=7; -update noar ti set b0='CWK3PH9G1MZX81VW464JNOU35XWN64MA' where id=7; -update noar tt set v0='8LUAG8979YKCQ5IDM48NP6SRYYY' where id=7; -update noar ti set v0='8LUAG8979YKCQ5IDM48NP6SRYYY' where id=7; -update noar tt set b1='INB6O5' where id=7; -update noar ti set b1='INB6O5' where id=7; -update noar tt set v0='P7R0PJSA9SG9MHOBQ76J' where id=7; -update noar ti set v0='P7R0PJSA9SG9MHOBQ76J' where id=7; -update noar tt set b2='Z7LGX63MY' where id=7; -update noar ti set b2='Z7LGX63MY' where id=7; -update noar tt set v0='OMLHP4FWS24W0BWIIVI' where id=8; -update noar ti set v0='OMLHP4FWS24W0BWIIVI' where id=8; -update noar tt set b0='948CFC3U' where id=8; -update noar ti set b0='948CFC3U' where id=8; -update noar tt set v0='UEEIQREKSD0MN569VQLBPLGJ' where id=8; -update noar ti set v0='UEEIQREKSD0MN569VQLBPLGJ' where id=8; -update noar tt set b1='6G13H' where id=8; -update noar ti set b1='6G13H' where id=8; -update noar tt set v0='L4HS7I1UCM55GZ7UUP1V7Z98YFWOT8K' where id=8; -update noar ti set v0='L4HS7I1UCM55GZ7UUP1V7Z98YFWOT8K' where id=8; -update noar tt set b2='UNO4F99E' where id=8; -update noar ti set b2='UNO4F99E' where id=8; -update noar tt set v0='OF9XI5OG3QZST5PLJ1' where id=9; -update noar ti set v0='OF9XI5OG3QZST5PLJ1' where id=9; -update noar tt set b0='YVETNAS0YLVN4L' where id=9; -update noar ti set b0='YVETNAS0YLVN4L' where id=9; -update noar tt set v0='PQ51L48FARVZ60JZ8SCUJLTYSXD' where id=9; -update noar ti set v0='PQ51L48FARVZ60JZ8SCUJLTYSXD' where id=9; -update noar tt set b1='C2X17SJLT7HU' where id=9; -update noar ti set b1='C2X17SJLT7HU' where id=9; -update noar tt set v0='B84SU27LLRS29VMYCTDV24Z5ZHS' where id=9; -update noar ti set v0='B84SU27LLRS29VMYCTDV24Z5ZHS' where id=9; -update noar tt set b2='WQ82OA3HKPQ' where id=9; -update noar ti set b2='WQ82OA3HKPQ' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 tinyblob not null, - b1 longblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='D' where id=1; -update noar ti set v0='D' where id=1; -update noar tt set b0='ZS8LHKTKFCCQM5XQO40MWK' where id=1; -update noar ti set b0='ZS8LHKTKFCCQM5XQO40MWK' where id=1; -update noar tt set v0='AW6Z46H0P198' where id=1; -update noar ti set v0='AW6Z46H0P198' where id=1; -update noar tt set b1='ETFCJ7AA5HOCYE52I' where id=1; -update noar ti set b1='ETFCJ7AA5HOCYE52I' where id=1; -update noar tt set v0='40HVG1VL1CFW7WUPBTHZMD' where id=1; -update noar ti set v0='40HVG1VL1CFW7WUPBTHZMD' where id=1; -update noar tt set b2='JBB9Z8GP3' where id=1; -update noar ti set b2='JBB9Z8GP3' where id=1; -update noar tt set v0='9TAE66146A35ROEPHKFBVR63HCUOJZ' where id=2; -update noar ti set v0='9TAE66146A35ROEPHKFBVR63HCUOJZ' where id=2; -update noar tt set b0='4AY3AHHIKACY7L8QDBMLSXMWZFAYOTQ' where id=2; -update noar ti set b0='4AY3AHHIKACY7L8QDBMLSXMWZFAYOTQ' where id=2; -update noar tt set v0='JVUG6509WQXQCRAT0FKBP9S' where id=2; -update noar ti set v0='JVUG6509WQXQCRAT0FKBP9S' where id=2; -update noar tt set b1='B6761NAON656YVHC6O' where id=2; -update noar ti set b1='B6761NAON656YVHC6O' where id=2; -update noar tt set v0='OAV7PK4WJHBZ6R26OI3' where id=2; -update noar ti set v0='OAV7PK4WJHBZ6R26OI3' where id=2; -update noar tt set b2='RPPNI307U6F1KJVB35WVKHZ6MTWS' where id=2; -update noar ti set b2='RPPNI307U6F1KJVB35WVKHZ6MTWS' where id=2; -update noar tt set v0='HCQ219NF' where id=3; -update noar ti set v0='HCQ219NF' where id=3; -update noar tt set b0='UBRUADST4RK2LJ13DOM' where id=3; -update noar ti set b0='UBRUADST4RK2LJ13DOM' where id=3; -update noar tt set v0='OXNAXWTO265GWA8BJUIJ' where id=3; -update noar ti set v0='OXNAXWTO265GWA8BJUIJ' where id=3; -update noar tt set b1='P4U' where id=3; -update noar ti set b1='P4U' where id=3; -update noar tt set v0='6QF79F5WZ8AHZ' where id=3; -update noar ti set v0='6QF79F5WZ8AHZ' where id=3; -update noar tt set b2='45OEDP7LV4L87YQ4GRYTU7KOLJ7' where id=3; -update noar ti set b2='45OEDP7LV4L87YQ4GRYTU7KOLJ7' where id=3; -update noar tt set v0='VYM' where id=4; -update noar ti set v0='VYM' where id=4; -update noar tt set b0='6O4NMK2XVH3DC4UC9RQ1W39JCBG' where id=4; -update noar ti set b0='6O4NMK2XVH3DC4UC9RQ1W39JCBG' where id=4; -update noar tt set v0='DCS57LEP3UIEMOVFC' where id=4; -update noar ti set v0='DCS57LEP3UIEMOVFC' where id=4; -update noar tt set b1='OGYTT997DPGUZQT1OY6XL' where id=4; -update noar ti set b1='OGYTT997DPGUZQT1OY6XL' where id=4; -update noar tt set v0='M' where id=4; -update noar ti set v0='M' where id=4; -update noar tt set b2='GF5RWQ0KSTH44RR' where id=4; -update noar ti set b2='GF5RWQ0KSTH44RR' where id=4; -update noar tt set v0='LE8URYJKP7NC56' where id=5; -update noar ti set v0='LE8URYJKP7NC56' where id=5; -update noar tt set b0='YI7NRJRK8V' where id=5; -update noar ti set b0='YI7NRJRK8V' where id=5; -update noar tt set v0='XW11Z6E77V1R7RIJWML' where id=5; -update noar ti set v0='XW11Z6E77V1R7RIJWML' where id=5; -update noar tt set b1='6ZTLENBCF' where id=5; -update noar ti set b1='6ZTLENBCF' where id=5; -update noar tt set v0='A3ZLJ4J' where id=5; -update noar ti set v0='A3ZLJ4J' where id=5; -update noar tt set b2='MHT1AVIJIWRG29PHYJWZDOCJJT9LSRTB' where id=5; -update noar ti set b2='MHT1AVIJIWRG29PHYJWZDOCJJT9LSRTB' where id=5; -update noar tt set v0='MZXPRNYAM' where id=6; -update noar ti set v0='MZXPRNYAM' where id=6; -update noar tt set b0='ZWCT7WGR7GH0N52XLPMIBK' where id=6; -update noar ti set b0='ZWCT7WGR7GH0N52XLPMIBK' where id=6; -update noar tt set v0='Z5RJCOBMLRPMZMWS9VWZNS4IOGQIBIOO' where id=6; -update noar ti set v0='Z5RJCOBMLRPMZMWS9VWZNS4IOGQIBIOO' where id=6; -update noar tt set b1='3WCKTPH0JO843P6D66HF53S4OQMR9DL' where id=6; -update noar ti set b1='3WCKTPH0JO843P6D66HF53S4OQMR9DL' where id=6; -update noar tt set v0='8K7A6Z' where id=6; -update noar ti set v0='8K7A6Z' where id=6; -update noar tt set b2='3VBWYMMEELJPLM48T6U6XIQSUDX6B89Y' where id=6; -update noar ti set b2='3VBWYMMEELJPLM48T6U6XIQSUDX6B89Y' where id=6; -update noar tt set v0='TR66X8K1JPP3' where id=7; -update noar ti set v0='TR66X8K1JPP3' where id=7; -update noar tt set b0='4YNY0MOMC1TLN0U739PAPHZHUDMUTUF' where id=7; -update noar ti set b0='4YNY0MOMC1TLN0U739PAPHZHUDMUTUF' where id=7; -update noar tt set v0='D2JKCJ9I81354O1KH68Y5F10H4QQ' where id=7; -update noar ti set v0='D2JKCJ9I81354O1KH68Y5F10H4QQ' where id=7; -update noar tt set b1='Y52QH6BQ1QQVUG5E9MXX56TW' where id=7; -update noar ti set b1='Y52QH6BQ1QQVUG5E9MXX56TW' where id=7; -update noar tt set v0='5HDGHD8MFR72KK6G028' where id=7; -update noar ti set v0='5HDGHD8MFR72KK6G028' where id=7; -update noar tt set b2='5ZM649Z9S8' where id=7; -update noar ti set b2='5ZM649Z9S8' where id=7; -update noar tt set v0='M4K0GMFGLBAZ5OOS6J' where id=8; -update noar ti set v0='M4K0GMFGLBAZ5OOS6J' where id=8; -update noar tt set b0='CCCVZ30NLQ4U73HGR5G4THRH9BYI11Q' where id=8; -update noar ti set b0='CCCVZ30NLQ4U73HGR5G4THRH9BYI11Q' where id=8; -update noar tt set v0='2M8I2AXOX2FQBBL2HF89198VOHH3' where id=8; -update noar ti set v0='2M8I2AXOX2FQBBL2HF89198VOHH3' where id=8; -update noar tt set b1='IQJX8QANJ1H9' where id=8; -update noar ti set b1='IQJX8QANJ1H9' where id=8; -update noar tt set v0='C9GJO4' where id=8; -update noar ti set v0='C9GJO4' where id=8; -update noar tt set b2='4AX5OPKC49' where id=8; -update noar ti set b2='4AX5OPKC49' where id=8; -update noar tt set v0='99BDP3OBII5T3OZVU' where id=9; -update noar ti set v0='99BDP3OBII5T3OZVU' where id=9; -update noar tt set b0='I343XTTU82SJ51SR7OH5V2B4F0L7K' where id=9; -update noar ti set b0='I343XTTU82SJ51SR7OH5V2B4F0L7K' where id=9; -update noar tt set v0='44' where id=9; -update noar ti set v0='44' where id=9; -update noar tt set b1='2Q28RRNEL4B3L59LTJ4RAPVZ96J9FKT' where id=9; -update noar ti set b1='2Q28RRNEL4B3L59LTJ4RAPVZ96J9FKT' where id=9; -update noar tt set v0='9CFD0COXGJ9EP0DSMK9O2K920ZD4MBI5' where id=9; -update noar ti set v0='9CFD0COXGJ9EP0DSMK9O2K920ZD4MBI5' where id=9; -update noar tt set b2='XNGO2U59AQ' where id=9; -update noar ti set b2='XNGO2U59AQ' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 tinyblob null, - b1 longblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='KL3YO1N1ZIG' where id=1; -update noar ti set v0='KL3YO1N1ZIG' where id=1; -update noar tt set b0='2JLUN' where id=1; -update noar ti set b0='2JLUN' where id=1; -update noar tt set v0='HXBOFRAE439QONDSK40CALVQKMC4' where id=1; -update noar ti set v0='HXBOFRAE439QONDSK40CALVQKMC4' where id=1; -update noar tt set b1='5TZM1DT8O913N7SH9LPH4GJVIB34XGR' where id=1; -update noar ti set b1='5TZM1DT8O913N7SH9LPH4GJVIB34XGR' where id=1; -update noar tt set v0='6PV' where id=1; -update noar ti set v0='6PV' where id=1; -update noar tt set b2='SHIH' where id=1; -update noar ti set b2='SHIH' where id=1; -update noar tt set v0='UX0AKB9HO385YILPHB' where id=2; -update noar ti set v0='UX0AKB9HO385YILPHB' where id=2; -update noar tt set b0='L35E5O4P' where id=2; -update noar ti set b0='L35E5O4P' where id=2; -update noar tt set v0='O3SCDNVFMKI4NKU' where id=2; -update noar ti set v0='O3SCDNVFMKI4NKU' where id=2; -update noar tt set b1='N5LYHUSN47UZ47GNHA2DNCA2GA' where id=2; -update noar ti set b1='N5LYHUSN47UZ47GNHA2DNCA2GA' where id=2; -update noar tt set v0='8S87K1YL3EUVTLJU8A22W7KSO7H76630' where id=2; -update noar ti set v0='8S87K1YL3EUVTLJU8A22W7KSO7H76630' where id=2; -update noar tt set b2='DUNPH7ZD6880UZHNY0U' where id=2; -update noar ti set b2='DUNPH7ZD6880UZHNY0U' where id=2; -update noar tt set v0='OFM9R3WYFCHBFZT92BIQHGL' where id=3; -update noar ti set v0='OFM9R3WYFCHBFZT92BIQHGL' where id=3; -update noar tt set b0='F1QP3ZVLYAXJRW50ZEB6QOS67' where id=3; -update noar ti set b0='F1QP3ZVLYAXJRW50ZEB6QOS67' where id=3; -update noar tt set v0='M286S' where id=3; -update noar ti set v0='M286S' where id=3; -update noar tt set b1='BHT55J' where id=3; -update noar ti set b1='BHT55J' where id=3; -update noar tt set v0='Y2NAB5C' where id=3; -update noar ti set v0='Y2NAB5C' where id=3; -update noar tt set b2='ZJR5557' where id=3; -update noar ti set b2='ZJR5557' where id=3; -update noar tt set v0='E2OYNB' where id=4; -update noar ti set v0='E2OYNB' where id=4; -update noar tt set b0='G4220ULH36UNWDY1MDEMK8L' where id=4; -update noar ti set b0='G4220ULH36UNWDY1MDEMK8L' where id=4; -update noar tt set v0='AQQAR5ISYQXBQOKJU8IHQW5S9T12EN6' where id=4; -update noar ti set v0='AQQAR5ISYQXBQOKJU8IHQW5S9T12EN6' where id=4; -update noar tt set b1='Y25FSLX3314E6SY3R' where id=4; -update noar ti set b1='Y25FSLX3314E6SY3R' where id=4; -update noar tt set v0='RCZBK40UR4UR71FOUKA8VJB1V9ALG5T' where id=4; -update noar ti set v0='RCZBK40UR4UR71FOUKA8VJB1V9ALG5T' where id=4; -update noar tt set b2='76R1V995O8G5CCH44WTAJPP1PMB7WB9N' where id=4; -update noar ti set b2='76R1V995O8G5CCH44WTAJPP1PMB7WB9N' where id=4; -update noar tt set v0='FYWB2K5XJV2BMES7F6PIBK4XFCSYYK' where id=5; -update noar ti set v0='FYWB2K5XJV2BMES7F6PIBK4XFCSYYK' where id=5; -update noar tt set b0='S7' where id=5; -update noar ti set b0='S7' where id=5; -update noar tt set v0='1SPC2LGO3IEPTN4X1YI' where id=5; -update noar ti set v0='1SPC2LGO3IEPTN4X1YI' where id=5; -update noar tt set b1='TV6NUIUR5' where id=5; -update noar ti set b1='TV6NUIUR5' where id=5; -update noar tt set v0='RR' where id=5; -update noar ti set v0='RR' where id=5; -update noar tt set b2='URW76TQ5NRCFOTVFE37ZUMAJ' where id=5; -update noar ti set b2='URW76TQ5NRCFOTVFE37ZUMAJ' where id=5; -update noar tt set v0='ULKBH' where id=6; -update noar ti set v0='ULKBH' where id=6; -update noar tt set b0='QYPSDLGTDN1792AW4KI' where id=6; -update noar ti set b0='QYPSDLGTDN1792AW4KI' where id=6; -update noar tt set v0='EPUTN0MBMOSE5L0W7' where id=6; -update noar ti set v0='EPUTN0MBMOSE5L0W7' where id=6; -update noar tt set b1='IRRATW6X3FRSKQ3AP4DAA' where id=6; -update noar ti set b1='IRRATW6X3FRSKQ3AP4DAA' where id=6; -update noar tt set v0='G' where id=6; -update noar ti set v0='G' where id=6; -update noar tt set b2='4V3FFDJV' where id=6; -update noar ti set b2='4V3FFDJV' where id=6; -update noar tt set v0='7ADENU14Q0BUHENTS5SY3ES5' where id=7; -update noar ti set v0='7ADENU14Q0BUHENTS5SY3ES5' where id=7; -update noar tt set b0='T64ZDLSWWVG0N7R8E26VGMQDU6KJWR' where id=7; -update noar ti set b0='T64ZDLSWWVG0N7R8E26VGMQDU6KJWR' where id=7; -update noar tt set v0='2W8B7GMPA5WCO30C3RGNRAWKVK1WMXM' where id=7; -update noar ti set v0='2W8B7GMPA5WCO30C3RGNRAWKVK1WMXM' where id=7; -update noar tt set b1='T80Y46G3VSTA7GPPYR8G3' where id=7; -update noar ti set b1='T80Y46G3VSTA7GPPYR8G3' where id=7; -update noar tt set v0='KJR2Q7EM0DDBOWHXGOEE' where id=7; -update noar ti set v0='KJR2Q7EM0DDBOWHXGOEE' where id=7; -update noar tt set b2='7VZ6S0RTW8HUUEZ7ZPHC6XKS' where id=7; -update noar ti set b2='7VZ6S0RTW8HUUEZ7ZPHC6XKS' where id=7; -update noar tt set v0='EQWPI8XDYUX79AD' where id=8; -update noar ti set v0='EQWPI8XDYUX79AD' where id=8; -update noar tt set b0='I06RMXEW9' where id=8; -update noar ti set b0='I06RMXEW9' where id=8; -update noar tt set v0='4RESBJ43DAG' where id=8; -update noar ti set v0='4RESBJ43DAG' where id=8; -update noar tt set b1='BYR3RVM' where id=8; -update noar ti set b1='BYR3RVM' where id=8; -update noar tt set v0='4TESOB32JUGEY4PDABC4B5KX9G1Z6LXL' where id=8; -update noar ti set v0='4TESOB32JUGEY4PDABC4B5KX9G1Z6LXL' where id=8; -update noar tt set b2='8RENY9HT9K3C9BIL2WKZGQUL7AS0GMXD' where id=8; -update noar ti set b2='8RENY9HT9K3C9BIL2WKZGQUL7AS0GMXD' where id=8; -update noar tt set v0='HS4UMZG' where id=9; -update noar ti set v0='HS4UMZG' where id=9; -update noar tt set b0='B8PXXD3NGA6AHJR9UY8187D8DAZL' where id=9; -update noar ti set b0='B8PXXD3NGA6AHJR9UY8187D8DAZL' where id=9; -update noar tt set v0='S3QWNGYYJWS8PBM5P7' where id=9; -update noar ti set v0='S3QWNGYYJWS8PBM5P7' where id=9; -update noar tt set b1='4CPY' where id=9; -update noar ti set b1='4CPY' where id=9; -update noar tt set v0='ES0I93G8AJOV' where id=9; -update noar ti set v0='ES0I93G8AJOV' where id=9; -update noar tt set b2='I9BSPXBO7WRR25B' where id=9; -update noar ti set b2='I9BSPXBO7WRR25B' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 tinyblob null, - b1 longblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='WT' where id=1; -update noar ti set v0='WT' where id=1; -update noar tt set b0='JP' where id=1; -update noar ti set b0='JP' where id=1; -update noar tt set v0='TZ8073I46IRKQX847' where id=1; -update noar ti set v0='TZ8073I46IRKQX847' where id=1; -update noar tt set b1='IX7KGDN' where id=1; -update noar ti set b1='IX7KGDN' where id=1; -update noar tt set v0='6JNY3U67EGMV6J6QKCZOQMG0C4G7E80J' where id=1; -update noar ti set v0='6JNY3U67EGMV6J6QKCZOQMG0C4G7E80J' where id=1; -update noar tt set b2='I7U94RRN' where id=1; -update noar ti set b2='I7U94RRN' where id=1; -update noar tt set v0='TJI4XHZ79NZBDBKBFYCL1QRJ01' where id=2; -update noar ti set v0='TJI4XHZ79NZBDBKBFYCL1QRJ01' where id=2; -update noar tt set b0='LV' where id=2; -update noar ti set b0='LV' where id=2; -update noar tt set v0='9F57SC1ULXMC' where id=2; -update noar ti set v0='9F57SC1ULXMC' where id=2; -update noar tt set b1='WQZKJSAY9C70OG3NPFRD6W19K6Q4N3F' where id=2; -update noar ti set b1='WQZKJSAY9C70OG3NPFRD6W19K6Q4N3F' where id=2; -update noar tt set v0='3BL8YCDUYP0K7ZSHKRH5ME5BY9H3LLX' where id=2; -update noar ti set v0='3BL8YCDUYP0K7ZSHKRH5ME5BY9H3LLX' where id=2; -update noar tt set b2='ED3H7PCGJJKBZ2ASYA1HDWRZ' where id=2; -update noar ti set b2='ED3H7PCGJJKBZ2ASYA1HDWRZ' where id=2; -update noar tt set v0='N6SR8G0VJW2RVR7Y2JVN' where id=3; -update noar ti set v0='N6SR8G0VJW2RVR7Y2JVN' where id=3; -update noar tt set b0='B' where id=3; -update noar ti set b0='B' where id=3; -update noar tt set v0='JJE2S04VWOVOE' where id=3; -update noar ti set v0='JJE2S04VWOVOE' where id=3; -update noar tt set b1='5SY9B2P0T' where id=3; -update noar ti set b1='5SY9B2P0T' where id=3; -update noar tt set v0='O2JS9DT385D04WC' where id=3; -update noar ti set v0='O2JS9DT385D04WC' where id=3; -update noar tt set b2='7S390ARWXAAFCGZK' where id=3; -update noar ti set b2='7S390ARWXAAFCGZK' where id=3; -update noar tt set v0='KC6CHYMIDLNRMTH4RPPMVJI4PMRSBAX' where id=4; -update noar ti set v0='KC6CHYMIDLNRMTH4RPPMVJI4PMRSBAX' where id=4; -update noar tt set b0='OXSXD9AWR9FDB2UBAIZ' where id=4; -update noar ti set b0='OXSXD9AWR9FDB2UBAIZ' where id=4; -update noar tt set v0='6VYZ6' where id=4; -update noar ti set v0='6VYZ6' where id=4; -update noar tt set b1='IYECCXG7TC' where id=4; -update noar ti set b1='IYECCXG7TC' where id=4; -update noar tt set v0='AN6' where id=4; -update noar ti set v0='AN6' where id=4; -update noar tt set b2='4JQN5DRS' where id=4; -update noar ti set b2='4JQN5DRS' where id=4; -update noar tt set v0='UWSA' where id=5; -update noar ti set v0='UWSA' where id=5; -update noar tt set b0='9KILI0UVNRRPAREKHDYVD6' where id=5; -update noar ti set b0='9KILI0UVNRRPAREKHDYVD6' where id=5; -update noar tt set v0='PYNXUMVK3A5Z' where id=5; -update noar ti set v0='PYNXUMVK3A5Z' where id=5; -update noar tt set b1='YMEUG8UAUIIPTI0JI16JVTL2V' where id=5; -update noar ti set b1='YMEUG8UAUIIPTI0JI16JVTL2V' where id=5; -update noar tt set v0='5Y' where id=5; -update noar ti set v0='5Y' where id=5; -update noar tt set b2='F4JD5RT9NNO7OBKS0M' where id=5; -update noar ti set b2='F4JD5RT9NNO7OBKS0M' where id=5; -update noar tt set v0='GC5ZK3DMH8E' where id=6; -update noar ti set v0='GC5ZK3DMH8E' where id=6; -update noar tt set b0='AKY' where id=6; -update noar ti set b0='AKY' where id=6; -update noar tt set v0='0MNL29FU9DZ1' where id=6; -update noar ti set v0='0MNL29FU9DZ1' where id=6; -update noar tt set b1='VK961N' where id=6; -update noar ti set b1='VK961N' where id=6; -update noar tt set v0='TYOH7NUCM6' where id=6; -update noar ti set v0='TYOH7NUCM6' where id=6; -update noar tt set b2='6ZNCDT3NT22B' where id=6; -update noar ti set b2='6ZNCDT3NT22B' where id=6; -update noar tt set v0='C0K73UQ9UCL231S' where id=7; -update noar ti set v0='C0K73UQ9UCL231S' where id=7; -update noar tt set b0='F2JA58CXW0K5B4QLRYUGLHM4' where id=7; -update noar ti set b0='F2JA58CXW0K5B4QLRYUGLHM4' where id=7; -update noar tt set v0='DP8R6E3C0G8DFZKJNO93YNOWT5JA' where id=7; -update noar ti set v0='DP8R6E3C0G8DFZKJNO93YNOWT5JA' where id=7; -update noar tt set b1='D1BVSN2Q' where id=7; -update noar ti set b1='D1BVSN2Q' where id=7; -update noar tt set v0='LP8AZNV5Y891ZPA3Y33N4J9' where id=7; -update noar ti set v0='LP8AZNV5Y891ZPA3Y33N4J9' where id=7; -update noar tt set b2='HT6SD531B3R9KPMEL1UJ0O5IMQU6W2VJ' where id=7; -update noar ti set b2='HT6SD531B3R9KPMEL1UJ0O5IMQU6W2VJ' where id=7; -update noar tt set v0='FGLNOA2PJGKVKU' where id=8; -update noar ti set v0='FGLNOA2PJGKVKU' where id=8; -update noar tt set b0='MCP48L29E4S768QWKGQ0FN' where id=8; -update noar ti set b0='MCP48L29E4S768QWKGQ0FN' where id=8; -update noar tt set v0='HVS' where id=8; -update noar ti set v0='HVS' where id=8; -update noar tt set b1='Z' where id=8; -update noar ti set b1='Z' where id=8; -update noar tt set v0='P4QO024KWVI2' where id=8; -update noar ti set v0='P4QO024KWVI2' where id=8; -update noar tt set b2='3O06FEX8W0' where id=8; -update noar ti set b2='3O06FEX8W0' where id=8; -update noar tt set v0='94TS3PDXY4EZUIHSPDXEO' where id=9; -update noar ti set v0='94TS3PDXY4EZUIHSPDXEO' where id=9; -update noar tt set b0='XATF81ZQENQME7YGJ39HOEKP' where id=9; -update noar ti set b0='XATF81ZQENQME7YGJ39HOEKP' where id=9; -update noar tt set v0='DZYNBUMYRDB92' where id=9; -update noar ti set v0='DZYNBUMYRDB92' where id=9; -update noar tt set b1='56F3NYVB1KO3S1S8J' where id=9; -update noar ti set b1='56F3NYVB1KO3S1S8J' where id=9; -update noar tt set v0='N' where id=9; -update noar ti set v0='N' where id=9; -update noar tt set b2='NH0EC2J043WJ' where id=9; -update noar ti set b2='NH0EC2J043WJ' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 tinyblob not null, - b1 longblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='OB959OG3ZZWNGLIDZMIDT8LSPS' where id=1; -update noar ti set v0='OB959OG3ZZWNGLIDZMIDT8LSPS' where id=1; -update noar tt set b0='SCMPC3RFIN' where id=1; -update noar ti set b0='SCMPC3RFIN' where id=1; -update noar tt set v0='BUZHWG' where id=1; -update noar ti set v0='BUZHWG' where id=1; -update noar tt set b1='NUHFXWKN6BVDA' where id=1; -update noar ti set b1='NUHFXWKN6BVDA' where id=1; -update noar tt set v0='RFFKPUHD' where id=1; -update noar ti set v0='RFFKPUHD' where id=1; -update noar tt set b2='49CHTO1' where id=1; -update noar ti set b2='49CHTO1' where id=1; -update noar tt set v0='8BYDZ74NH73ZQNBMF69JISAM2O' where id=2; -update noar ti set v0='8BYDZ74NH73ZQNBMF69JISAM2O' where id=2; -update noar tt set b0='AC9MZ8CSKAMGL2J99PWL' where id=2; -update noar ti set b0='AC9MZ8CSKAMGL2J99PWL' where id=2; -update noar tt set v0='ML0Q3UG029LU9L40ZTL' where id=2; -update noar ti set v0='ML0Q3UG029LU9L40ZTL' where id=2; -update noar tt set b1='HH7XWU2Q0HXGQIJ81DAKTMWGFRFOW' where id=2; -update noar ti set b1='HH7XWU2Q0HXGQIJ81DAKTMWGFRFOW' where id=2; -update noar tt set v0='4D907D8BIDRQMQX16M7Q02R5HCIBJQ' where id=2; -update noar ti set v0='4D907D8BIDRQMQX16M7Q02R5HCIBJQ' where id=2; -update noar tt set b2='UJH' where id=2; -update noar ti set b2='UJH' where id=2; -update noar tt set v0='SD4WXO0I1' where id=3; -update noar ti set v0='SD4WXO0I1' where id=3; -update noar tt set b0='MS9UM3ZEU70P' where id=3; -update noar ti set b0='MS9UM3ZEU70P' where id=3; -update noar tt set v0='NE8X6T1MN7AZH8A' where id=3; -update noar ti set v0='NE8X6T1MN7AZH8A' where id=3; -update noar tt set b1='3SFX6FHCI27NR0NNA3B35BNWVBJ' where id=3; -update noar ti set b1='3SFX6FHCI27NR0NNA3B35BNWVBJ' where id=3; -update noar tt set v0='MB9KVPLXIVAYLZGJU' where id=3; -update noar ti set v0='MB9KVPLXIVAYLZGJU' where id=3; -update noar tt set b2='KT3TZCUA1TNYAGMP7ZPH4' where id=3; -update noar ti set b2='KT3TZCUA1TNYAGMP7ZPH4' where id=3; -update noar tt set v0='1JIFOZT5DY6FJ81JH5F3EAYE5O38VF' where id=4; -update noar ti set v0='1JIFOZT5DY6FJ81JH5F3EAYE5O38VF' where id=4; -update noar tt set b0='SIV3XFSJUI' where id=4; -update noar ti set b0='SIV3XFSJUI' where id=4; -update noar tt set v0='F8R8M33TQG' where id=4; -update noar ti set v0='F8R8M33TQG' where id=4; -update noar tt set b1='332DBT81K6ZS3EZL7NNXNNAM0BE2QQEB' where id=4; -update noar ti set b1='332DBT81K6ZS3EZL7NNXNNAM0BE2QQEB' where id=4; -update noar tt set v0='8JLY' where id=4; -update noar ti set v0='8JLY' where id=4; -update noar tt set b2='H6B38DN6HR2RT' where id=4; -update noar ti set b2='H6B38DN6HR2RT' where id=4; -update noar tt set v0='GCDUN8D' where id=5; -update noar ti set v0='GCDUN8D' where id=5; -update noar tt set b0='6G051URWJ2AC24CAYAT4DHB3IKCCWVBI' where id=5; -update noar ti set b0='6G051URWJ2AC24CAYAT4DHB3IKCCWVBI' where id=5; -update noar tt set v0='A2SFKWK2WN716JNNK7787RAM736I' where id=5; -update noar ti set v0='A2SFKWK2WN716JNNK7787RAM736I' where id=5; -update noar tt set b1='CHR4L2NE7MFWP6CVELB1K7J' where id=5; -update noar ti set b1='CHR4L2NE7MFWP6CVELB1K7J' where id=5; -update noar tt set v0='LHUD7F27RPNVCE2F' where id=5; -update noar ti set v0='LHUD7F27RPNVCE2F' where id=5; -update noar tt set b2='G6RFP' where id=5; -update noar ti set b2='G6RFP' where id=5; -update noar tt set v0='BVHKJDC8K7LPWKMA1L6' where id=6; -update noar ti set v0='BVHKJDC8K7LPWKMA1L6' where id=6; -update noar tt set b0='05WD2S517QH3DXN3RXM72GXQ' where id=6; -update noar ti set b0='05WD2S517QH3DXN3RXM72GXQ' where id=6; -update noar tt set v0='Q9TG4R' where id=6; -update noar ti set v0='Q9TG4R' where id=6; -update noar tt set b1='YNFW56I7A6FFPU6V3UV60' where id=6; -update noar ti set b1='YNFW56I7A6FFPU6V3UV60' where id=6; -update noar tt set v0='N6RSC7VBP8UW3KKKZPWQZBMMMDFWC' where id=6; -update noar ti set v0='N6RSC7VBP8UW3KKKZPWQZBMMMDFWC' where id=6; -update noar tt set b2='VSBKTIKOQW6ED6L74TQ' where id=6; -update noar ti set b2='VSBKTIKOQW6ED6L74TQ' where id=6; -update noar tt set v0='GX836WVXXX' where id=7; -update noar ti set v0='GX836WVXXX' where id=7; -update noar tt set b0='XSCO2IYDICMK8' where id=7; -update noar ti set b0='XSCO2IYDICMK8' where id=7; -update noar tt set v0='IRMXCRSWE7NOBF71YUNYCUPP1BDCP' where id=7; -update noar ti set v0='IRMXCRSWE7NOBF71YUNYCUPP1BDCP' where id=7; -update noar tt set b1='6RRAGG1D5R2' where id=7; -update noar ti set b1='6RRAGG1D5R2' where id=7; -update noar tt set v0='5QE0RH2PSYKK9UNS4F6AG6R6U' where id=7; -update noar ti set v0='5QE0RH2PSYKK9UNS4F6AG6R6U' where id=7; -update noar tt set b2='A5M' where id=7; -update noar ti set b2='A5M' where id=7; -update noar tt set v0='N9HQLQHG7G' where id=8; -update noar ti set v0='N9HQLQHG7G' where id=8; -update noar tt set b0='SMVX6JV' where id=8; -update noar ti set b0='SMVX6JV' where id=8; -update noar tt set v0='BNIS5YY8C19UUXVZV2ZIEJH32' where id=8; -update noar ti set v0='BNIS5YY8C19UUXVZV2ZIEJH32' where id=8; -update noar tt set b1='7EBFDZPQRX7MIM1DG6NLAYSXFO36' where id=8; -update noar ti set b1='7EBFDZPQRX7MIM1DG6NLAYSXFO36' where id=8; -update noar tt set v0='E0LP4PINUA' where id=8; -update noar ti set v0='E0LP4PINUA' where id=8; -update noar tt set b2='5D3DQB' where id=8; -update noar ti set b2='5D3DQB' where id=8; -update noar tt set v0='DD093HFS0RKJ9WGXXT2N5DAO6VI0' where id=9; -update noar ti set v0='DD093HFS0RKJ9WGXXT2N5DAO6VI0' where id=9; -update noar tt set b0='C4JKAQ952V' where id=9; -update noar ti set b0='C4JKAQ952V' where id=9; -update noar tt set v0='FLNGUF6XVIA3RVUEAW' where id=9; -update noar ti set v0='FLNGUF6XVIA3RVUEAW' where id=9; -update noar tt set b1='CTUF690DI0L4G0MJSNC2K2FZ' where id=9; -update noar ti set b1='CTUF690DI0L4G0MJSNC2K2FZ' where id=9; -update noar tt set v0='ZE99QS32375OIGH7IJ1Y5G80ICKNM9' where id=9; -update noar ti set v0='ZE99QS32375OIGH7IJ1Y5G80ICKNM9' where id=9; -update noar tt set b2='HH9JTXQJ1KT' where id=9; -update noar ti set b2='HH9JTXQJ1KT' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 tinyblob not null, - b1 longblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='0SHED8Q2' where id=1; -update noar ti set v0='0SHED8Q2' where id=1; -update noar tt set b0='ME5JRX3ZQ4B8E0DNCU2P6ZQ8ZKJSQ' where id=1; -update noar ti set b0='ME5JRX3ZQ4B8E0DNCU2P6ZQ8ZKJSQ' where id=1; -update noar tt set v0='2S08FHJADCFP4FC2DXFX' where id=1; -update noar ti set v0='2S08FHJADCFP4FC2DXFX' where id=1; -update noar tt set b1='OWKAKK8HV' where id=1; -update noar ti set b1='OWKAKK8HV' where id=1; -update noar tt set v0='NOESX35JAXWXJXOVIK7UTRES5VB1E' where id=1; -update noar ti set v0='NOESX35JAXWXJXOVIK7UTRES5VB1E' where id=1; -update noar tt set b2='S9HU1MV362YOIP1WSL8' where id=1; -update noar ti set b2='S9HU1MV362YOIP1WSL8' where id=1; -update noar tt set v0='4MRXHJRT5PWPG31K4RWODWVC0A' where id=2; -update noar ti set v0='4MRXHJRT5PWPG31K4RWODWVC0A' where id=2; -update noar tt set b0='PISI5H545T6R1BLBLR0GZ07TWX44G3' where id=2; -update noar ti set b0='PISI5H545T6R1BLBLR0GZ07TWX44G3' where id=2; -update noar tt set v0='A9LN2KOQ04B8PJW7Z4DZY0RGT95339R' where id=2; -update noar ti set v0='A9LN2KOQ04B8PJW7Z4DZY0RGT95339R' where id=2; -update noar tt set b1='QQG2X9BS5U7B2UHP' where id=2; -update noar ti set b1='QQG2X9BS5U7B2UHP' where id=2; -update noar tt set v0='JTK8Y8HRE2VKL5XJT' where id=2; -update noar ti set v0='JTK8Y8HRE2VKL5XJT' where id=2; -update noar tt set b2='FTXOS5MA4N950PQCE3WDXS' where id=2; -update noar ti set b2='FTXOS5MA4N950PQCE3WDXS' where id=2; -update noar tt set v0='9' where id=3; -update noar ti set v0='9' where id=3; -update noar tt set b0='WORUCOXK1JPOGO8H4HTGSJT' where id=3; -update noar ti set b0='WORUCOXK1JPOGO8H4HTGSJT' where id=3; -update noar tt set v0='HCT' where id=3; -update noar ti set v0='HCT' where id=3; -update noar tt set b1='8KT6054LUM4UQKUW6Z5J11H' where id=3; -update noar ti set b1='8KT6054LUM4UQKUW6Z5J11H' where id=3; -update noar tt set v0='H68Y58P7TMC4KG13YQZQ4YEU9Z90MQ5' where id=3; -update noar ti set v0='H68Y58P7TMC4KG13YQZQ4YEU9Z90MQ5' where id=3; -update noar tt set b2='WYP9INETKE4U66UNNWZIDWVZD731LWYB' where id=3; -update noar ti set b2='WYP9INETKE4U66UNNWZIDWVZD731LWYB' where id=3; -update noar tt set v0='T8OITEFYNXB918W3Y9LMNPOHYJSSE' where id=4; -update noar ti set v0='T8OITEFYNXB918W3Y9LMNPOHYJSSE' where id=4; -update noar tt set b0='MPVQLAC' where id=4; -update noar ti set b0='MPVQLAC' where id=4; -update noar tt set v0='KF7Q0TOHR6G' where id=4; -update noar ti set v0='KF7Q0TOHR6G' where id=4; -update noar tt set b1='KAU1TDA1' where id=4; -update noar ti set b1='KAU1TDA1' where id=4; -update noar tt set v0='EUA3' where id=4; -update noar ti set v0='EUA3' where id=4; -update noar tt set b2='XO8J8Q8EWE' where id=4; -update noar ti set b2='XO8J8Q8EWE' where id=4; -update noar tt set v0='T13RKCI3E5HSSQXTFKSSV4S' where id=5; -update noar ti set v0='T13RKCI3E5HSSQXTFKSSV4S' where id=5; -update noar tt set b0='L5TOIR4' where id=5; -update noar ti set b0='L5TOIR4' where id=5; -update noar tt set v0='0V58BZCZ15P40UM4DW' where id=5; -update noar ti set v0='0V58BZCZ15P40UM4DW' where id=5; -update noar tt set b1='OFEVXHM' where id=5; -update noar ti set b1='OFEVXHM' where id=5; -update noar tt set v0='8PFDBMH1R7WD' where id=5; -update noar ti set v0='8PFDBMH1R7WD' where id=5; -update noar tt set b2='3MAE1ESH817' where id=5; -update noar ti set b2='3MAE1ESH817' where id=5; -update noar tt set v0='TEIIUST2W8TZ' where id=6; -update noar ti set v0='TEIIUST2W8TZ' where id=6; -update noar tt set b0='Z5H6JJWHMKOCCH13DIW1MZJLZY4R' where id=6; -update noar ti set b0='Z5H6JJWHMKOCCH13DIW1MZJLZY4R' where id=6; -update noar tt set v0='5W8WR1S3CS4DQ4C7VC' where id=6; -update noar ti set v0='5W8WR1S3CS4DQ4C7VC' where id=6; -update noar tt set b1='VM0B7L738YSHJ4FT489IP1CTBC3C' where id=6; -update noar ti set b1='VM0B7L738YSHJ4FT489IP1CTBC3C' where id=6; -update noar tt set v0='RNLIR1PGJ' where id=6; -update noar ti set v0='RNLIR1PGJ' where id=6; -update noar tt set b2='988MEBR8CITAAJW' where id=6; -update noar ti set b2='988MEBR8CITAAJW' where id=6; -update noar tt set v0='U9' where id=7; -update noar ti set v0='U9' where id=7; -update noar tt set b0='5V4HQ4YJDL8XJWDRND6Y9' where id=7; -update noar ti set b0='5V4HQ4YJDL8XJWDRND6Y9' where id=7; -update noar tt set v0='8RV3QRZQHMFRXBKKXRK' where id=7; -update noar ti set v0='8RV3QRZQHMFRXBKKXRK' where id=7; -update noar tt set b1='BFQ0AAX' where id=7; -update noar ti set b1='BFQ0AAX' where id=7; -update noar tt set v0='S' where id=7; -update noar ti set v0='S' where id=7; -update noar tt set b2='0DIX9RF0PW0BQKNFD' where id=7; -update noar ti set b2='0DIX9RF0PW0BQKNFD' where id=7; -update noar tt set v0='QYET2CDYAB4Y0O29CQJ1CNHJ178' where id=8; -update noar ti set v0='QYET2CDYAB4Y0O29CQJ1CNHJ178' where id=8; -update noar tt set b0='0JQHEA56NXMG' where id=8; -update noar ti set b0='0JQHEA56NXMG' where id=8; -update noar tt set v0='L7PGKHNKASTLAH' where id=8; -update noar ti set v0='L7PGKHNKASTLAH' where id=8; -update noar tt set b1='WNTERESXJVBXEUCABOKKJ6EW787776X' where id=8; -update noar ti set b1='WNTERESXJVBXEUCABOKKJ6EW787776X' where id=8; -update noar tt set v0='Y99P6DD2L1ODN297V8TT52KN7' where id=8; -update noar ti set v0='Y99P6DD2L1ODN297V8TT52KN7' where id=8; -update noar tt set b2='R9X1' where id=8; -update noar ti set b2='R9X1' where id=8; -update noar tt set v0='KL3' where id=9; -update noar ti set v0='KL3' where id=9; -update noar tt set b0='U1RXJHOUIYOUCMHRXTMLANFK' where id=9; -update noar ti set b0='U1RXJHOUIYOUCMHRXTMLANFK' where id=9; -update noar tt set v0='F1B' where id=9; -update noar ti set v0='F1B' where id=9; -update noar tt set b1='Q8' where id=9; -update noar ti set b1='Q8' where id=9; -update noar tt set v0='W4W957ZQFQGC78TTFITFXKGMOINDQOW' where id=9; -update noar ti set v0='W4W957ZQFQGC78TTFITFXKGMOINDQOW' where id=9; -update noar tt set b2='83XQR3O437RY5' where id=9; -update noar ti set b2='83XQR3O437RY5' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 tinyblob null, - b1 longblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='DJ1MXSKXM' where id=1; -update noar ti set v0='DJ1MXSKXM' where id=1; -update noar tt set b0='MWMI6H2BHD7AMELVJVLWFFEP' where id=1; -update noar ti set b0='MWMI6H2BHD7AMELVJVLWFFEP' where id=1; -update noar tt set v0='6DXB5JOQMHPPDLKCWDWLS5PUHOX8' where id=1; -update noar ti set v0='6DXB5JOQMHPPDLKCWDWLS5PUHOX8' where id=1; -update noar tt set b1='RQU8MD2WPZWZ0UC' where id=1; -update noar ti set b1='RQU8MD2WPZWZ0UC' where id=1; -update noar tt set v0='1EXESFMDG5BT' where id=1; -update noar ti set v0='1EXESFMDG5BT' where id=1; -update noar tt set b2='FJT8LDHBPMOR1KNSBW4UZCTJQX' where id=1; -update noar ti set b2='FJT8LDHBPMOR1KNSBW4UZCTJQX' where id=1; -update noar tt set v0='5Q0N3JQVUVOADI' where id=2; -update noar ti set v0='5Q0N3JQVUVOADI' where id=2; -update noar tt set b0='HU0VDM61BFSEGCMJEMPZHNEJV' where id=2; -update noar ti set b0='HU0VDM61BFSEGCMJEMPZHNEJV' where id=2; -update noar tt set v0='HZZB2G5XVBXDL65O' where id=2; -update noar ti set v0='HZZB2G5XVBXDL65O' where id=2; -update noar tt set b1='L9T7HXAT3EHODS8' where id=2; -update noar ti set b1='L9T7HXAT3EHODS8' where id=2; -update noar tt set v0='DU9DXS' where id=2; -update noar ti set v0='DU9DXS' where id=2; -update noar tt set b2='2CXIEKMTJ0XSC' where id=2; -update noar ti set b2='2CXIEKMTJ0XSC' where id=2; -update noar tt set v0='QNFLUSZYW3WUC52BRJK2BGTF49AH2D' where id=3; -update noar ti set v0='QNFLUSZYW3WUC52BRJK2BGTF49AH2D' where id=3; -update noar tt set b0='IWEJS2CBWDD1P6HC1P3' where id=3; -update noar ti set b0='IWEJS2CBWDD1P6HC1P3' where id=3; -update noar tt set v0='NJNDZYGN94MOM31' where id=3; -update noar ti set v0='NJNDZYGN94MOM31' where id=3; -update noar tt set b1='FOS' where id=3; -update noar ti set b1='FOS' where id=3; -update noar tt set v0='S81S' where id=3; -update noar ti set v0='S81S' where id=3; -update noar tt set b2='WHMALLI5LS002FRGO1A0V8V1VDFIHMVN' where id=3; -update noar ti set b2='WHMALLI5LS002FRGO1A0V8V1VDFIHMVN' where id=3; -update noar tt set v0='V29R3ADUYKU50DY9K1BLBMMP6I6KX3KH' where id=4; -update noar ti set v0='V29R3ADUYKU50DY9K1BLBMMP6I6KX3KH' where id=4; -update noar tt set b0='2SFJ7' where id=4; -update noar ti set b0='2SFJ7' where id=4; -update noar tt set v0='RBMCGI9VC1' where id=4; -update noar ti set v0='RBMCGI9VC1' where id=4; -update noar tt set b1='FRKDUYOP2Y0IS0AFDRMDS' where id=4; -update noar ti set b1='FRKDUYOP2Y0IS0AFDRMDS' where id=4; -update noar tt set v0='9L41QS' where id=4; -update noar ti set v0='9L41QS' where id=4; -update noar tt set b2='G7YT1FLLJHZ2GQ3HWMSG3QRE51DU' where id=4; -update noar ti set b2='G7YT1FLLJHZ2GQ3HWMSG3QRE51DU' where id=4; -update noar tt set v0='S2EKIR5I4MQV682' where id=5; -update noar ti set v0='S2EKIR5I4MQV682' where id=5; -update noar tt set b0='H2ZX7RT' where id=5; -update noar ti set b0='H2ZX7RT' where id=5; -update noar tt set v0='EZT' where id=5; -update noar ti set v0='EZT' where id=5; -update noar tt set b1='B17GX0FPOPJY3W5HFROX' where id=5; -update noar ti set b1='B17GX0FPOPJY3W5HFROX' where id=5; -update noar tt set v0='7P961' where id=5; -update noar ti set v0='7P961' where id=5; -update noar tt set b2='CTE' where id=5; -update noar ti set b2='CTE' where id=5; -update noar tt set v0='B1G2BA3VU8DDM7ONVMW4UIO92' where id=6; -update noar ti set v0='B1G2BA3VU8DDM7ONVMW4UIO92' where id=6; -update noar tt set b0='E5C73PV2A52YTKNOA3PUIG0A2WYG' where id=6; -update noar ti set b0='E5C73PV2A52YTKNOA3PUIG0A2WYG' where id=6; -update noar tt set v0='HTXJBLWNZP0DQMJEU7VTGAYUSL0V6O' where id=6; -update noar ti set v0='HTXJBLWNZP0DQMJEU7VTGAYUSL0V6O' where id=6; -update noar tt set b1='T7K7L6FSMJ4NFIR2VRJIE47KLC6JQ' where id=6; -update noar ti set b1='T7K7L6FSMJ4NFIR2VRJIE47KLC6JQ' where id=6; -update noar tt set v0='X' where id=6; -update noar ti set v0='X' where id=6; -update noar tt set b2='ENHUSCOXDL4T4GBD37' where id=6; -update noar ti set b2='ENHUSCOXDL4T4GBD37' where id=6; -update noar tt set v0='PBXRJ8C76OJ' where id=7; -update noar ti set v0='PBXRJ8C76OJ' where id=7; -update noar tt set b0='JBY8M983' where id=7; -update noar ti set b0='JBY8M983' where id=7; -update noar tt set v0='3H3LZPGFW3QALWN' where id=7; -update noar ti set v0='3H3LZPGFW3QALWN' where id=7; -update noar tt set b1='RLNZR7MXBHOH3QRIBT' where id=7; -update noar ti set b1='RLNZR7MXBHOH3QRIBT' where id=7; -update noar tt set v0='9Z9FVN7RDZORONKPN2Z6CT' where id=7; -update noar ti set v0='9Z9FVN7RDZORONKPN2Z6CT' where id=7; -update noar tt set b2='MDSUXECM9IPO7PI60L4WVZ81FF7FY' where id=7; -update noar ti set b2='MDSUXECM9IPO7PI60L4WVZ81FF7FY' where id=7; -update noar tt set v0='573' where id=8; -update noar ti set v0='573' where id=8; -update noar tt set b0='H2GPG4MINPW5OX6J619E' where id=8; -update noar ti set b0='H2GPG4MINPW5OX6J619E' where id=8; -update noar tt set v0='T77M' where id=8; -update noar ti set v0='T77M' where id=8; -update noar tt set b1='NXO53P69GD29GH8JGCQKECXE5HI' where id=8; -update noar ti set b1='NXO53P69GD29GH8JGCQKECXE5HI' where id=8; -update noar tt set v0='E6QN6A2QCK' where id=8; -update noar ti set v0='E6QN6A2QCK' where id=8; -update noar tt set b2='GSW0VPZZ3SDLLIY7YD' where id=8; -update noar ti set b2='GSW0VPZZ3SDLLIY7YD' where id=8; -update noar tt set v0='LC78UX24JTGK9OSYD6V1US7FXT' where id=9; -update noar ti set v0='LC78UX24JTGK9OSYD6V1US7FXT' where id=9; -update noar tt set b0='H7NVRK1V43J5SU449H61VCHD3CTABV0' where id=9; -update noar ti set b0='H7NVRK1V43J5SU449H61VCHD3CTABV0' where id=9; -update noar tt set v0='NDV' where id=9; -update noar ti set v0='NDV' where id=9; -update noar tt set b1='FSGZSRKKNTUOXX5GK3L768L5WQOV3Z' where id=9; -update noar ti set b1='FSGZSRKKNTUOXX5GK3L768L5WQOV3Z' where id=9; -update noar tt set v0='ES5ZL7LJH9' where id=9; -update noar ti set v0='ES5ZL7LJH9' where id=9; -update noar tt set b2='6B5ZRB0LTQB9IXYHQ3P' where id=9; -update noar ti set b2='6B5ZRB0LTQB9IXYHQ3P' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 tinyblob null, - b1 longblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='R9XJ' where id=1; -update noar ti set v0='R9XJ' where id=1; -update noar tt set b0='KMRXCZOCM9CCTFQPOYN4NZ5YMZMWM' where id=1; -update noar ti set b0='KMRXCZOCM9CCTFQPOYN4NZ5YMZMWM' where id=1; -update noar tt set v0='KTH6250' where id=1; -update noar ti set v0='KTH6250' where id=1; -update noar tt set b1='H4X6OT3NHPBEMN61N93' where id=1; -update noar ti set b1='H4X6OT3NHPBEMN61N93' where id=1; -update noar tt set v0='7RJAX' where id=1; -update noar ti set v0='7RJAX' where id=1; -update noar tt set b2='T5F3WWAUQ5EENRJLTK0RBPJPC' where id=1; -update noar ti set b2='T5F3WWAUQ5EENRJLTK0RBPJPC' where id=1; -update noar tt set v0='582VBSGHKIYLXAWCGQ' where id=2; -update noar ti set v0='582VBSGHKIYLXAWCGQ' where id=2; -update noar tt set b0='DCOUYG' where id=2; -update noar ti set b0='DCOUYG' where id=2; -update noar tt set v0='KZLPM7N3EQ6IGCOBXRHVYNG2R3F' where id=2; -update noar ti set v0='KZLPM7N3EQ6IGCOBXRHVYNG2R3F' where id=2; -update noar tt set b1='CO4DJ0GL' where id=2; -update noar ti set b1='CO4DJ0GL' where id=2; -update noar tt set v0='WQMQHIB' where id=2; -update noar ti set v0='WQMQHIB' where id=2; -update noar tt set b2='JP4LB602M3VFDAES2SXWQFB1AWP94' where id=2; -update noar ti set b2='JP4LB602M3VFDAES2SXWQFB1AWP94' where id=2; -update noar tt set v0='NTIWNJ2BESJMS0EWO52Z' where id=3; -update noar ti set v0='NTIWNJ2BESJMS0EWO52Z' where id=3; -update noar tt set b0='WTVHFKBQ55OQKT' where id=3; -update noar ti set b0='WTVHFKBQ55OQKT' where id=3; -update noar tt set v0='YOODDDKQMKYSB6O0H6FUE9' where id=3; -update noar ti set v0='YOODDDKQMKYSB6O0H6FUE9' where id=3; -update noar tt set b1='DQM7LK92XMAPWEITZ7P' where id=3; -update noar ti set b1='DQM7LK92XMAPWEITZ7P' where id=3; -update noar tt set v0='DUHUEZNQ8KPKEU2S6X8AA5XL' where id=3; -update noar ti set v0='DUHUEZNQ8KPKEU2S6X8AA5XL' where id=3; -update noar tt set b2='O0A093X6CD3B' where id=3; -update noar ti set b2='O0A093X6CD3B' where id=3; -update noar tt set v0='6Y412YH5' where id=4; -update noar ti set v0='6Y412YH5' where id=4; -update noar tt set b0='OI5R' where id=4; -update noar ti set b0='OI5R' where id=4; -update noar tt set v0='D4KOUWKIFRN5G1UYF4DJ6EQ' where id=4; -update noar ti set v0='D4KOUWKIFRN5G1UYF4DJ6EQ' where id=4; -update noar tt set b1='KV3M8Z' where id=4; -update noar ti set b1='KV3M8Z' where id=4; -update noar tt set v0='MLMDVQTO8' where id=4; -update noar ti set v0='MLMDVQTO8' where id=4; -update noar tt set b2='JOUR2WZYYEYLPZZP9N29SUXSSOL' where id=4; -update noar ti set b2='JOUR2WZYYEYLPZZP9N29SUXSSOL' where id=4; -update noar tt set v0='LQH97ZQD7R27MMN00GC61U3MJF8' where id=5; -update noar ti set v0='LQH97ZQD7R27MMN00GC61U3MJF8' where id=5; -update noar tt set b0='NA' where id=5; -update noar ti set b0='NA' where id=5; -update noar tt set v0='9ONAZCZEA059HWXA1AOEPGBMGV5LWJV' where id=5; -update noar ti set v0='9ONAZCZEA059HWXA1AOEPGBMGV5LWJV' where id=5; -update noar tt set b1='H90T2S7XJ582TWIVRT' where id=5; -update noar ti set b1='H90T2S7XJ582TWIVRT' where id=5; -update noar tt set v0='VJOCXH0DLSJQFZ40LXG72MYOLH2DJ' where id=5; -update noar ti set v0='VJOCXH0DLSJQFZ40LXG72MYOLH2DJ' where id=5; -update noar tt set b2='M376NNX37GMSEK37ZFTZFSA4OOD0IXM7' where id=5; -update noar ti set b2='M376NNX37GMSEK37ZFTZFSA4OOD0IXM7' where id=5; -update noar tt set v0='GE9KK0DHSLDSWJ7HE5AXLE' where id=6; -update noar ti set v0='GE9KK0DHSLDSWJ7HE5AXLE' where id=6; -update noar tt set b0='NIA8K4T3D3SE4VI' where id=6; -update noar ti set b0='NIA8K4T3D3SE4VI' where id=6; -update noar tt set v0='3QND0CO15NPYM99' where id=6; -update noar ti set v0='3QND0CO15NPYM99' where id=6; -update noar tt set b1='IP' where id=6; -update noar ti set b1='IP' where id=6; -update noar tt set v0='QML67BO3LURAFJYLVFU2W4LHSUOU' where id=6; -update noar ti set v0='QML67BO3LURAFJYLVFU2W4LHSUOU' where id=6; -update noar tt set b2='55MAN5UDFZS80WQ0KS6WEJVVPT' where id=6; -update noar ti set b2='55MAN5UDFZS80WQ0KS6WEJVVPT' where id=6; -update noar tt set v0='0Y' where id=7; -update noar ti set v0='0Y' where id=7; -update noar tt set b0='EOQP5FNQO42LR1OXT2TF7OIT33X' where id=7; -update noar ti set b0='EOQP5FNQO42LR1OXT2TF7OIT33X' where id=7; -update noar tt set v0='FGKLRHEABY' where id=7; -update noar ti set v0='FGKLRHEABY' where id=7; -update noar tt set b1='ZP2IHOJ1' where id=7; -update noar ti set b1='ZP2IHOJ1' where id=7; -update noar tt set v0='NHW' where id=7; -update noar ti set v0='NHW' where id=7; -update noar tt set b2='PV13G6' where id=7; -update noar ti set b2='PV13G6' where id=7; -update noar tt set v0='34I0M2RDRP9DPKIJBZQQ8W1SYKEKEYW' where id=8; -update noar ti set v0='34I0M2RDRP9DPKIJBZQQ8W1SYKEKEYW' where id=8; -update noar tt set b0='2S2YNRSHG' where id=8; -update noar ti set b0='2S2YNRSHG' where id=8; -update noar tt set v0='TDED4Y6FQ3G' where id=8; -update noar ti set v0='TDED4Y6FQ3G' where id=8; -update noar tt set b1='CVU3BI1R1EJMDHQHGHHDDRUXM6IBN52V' where id=8; -update noar ti set b1='CVU3BI1R1EJMDHQHGHHDDRUXM6IBN52V' where id=8; -update noar tt set v0='M2I11JZJVBYA1A' where id=8; -update noar ti set v0='M2I11JZJVBYA1A' where id=8; -update noar tt set b2='BVX' where id=8; -update noar ti set b2='BVX' where id=8; -update noar tt set v0='29E75JA4DD4OIWDLM89WY5G3A89MU' where id=9; -update noar ti set v0='29E75JA4DD4OIWDLM89WY5G3A89MU' where id=9; -update noar tt set b0='CJTBX718EQ3KF0HBR349BME5FNVH3W' where id=9; -update noar ti set b0='CJTBX718EQ3KF0HBR349BME5FNVH3W' where id=9; -update noar tt set v0='J3FRX8ALOI3NXDJBQFZQOIBND0O' where id=9; -update noar ti set v0='J3FRX8ALOI3NXDJBQFZQOIBND0O' where id=9; -update noar tt set b1='5UR' where id=9; -update noar ti set b1='5UR' where id=9; -update noar tt set v0='JG' where id=9; -update noar ti set v0='JG' where id=9; -update noar tt set b2='W0HBGNHRNQ2Y1KGZ9' where id=9; -update noar ti set b2='W0HBGNHRNQ2Y1KGZ9' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 tinyblob not null, - b1 longblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='AIF91B8I' where id=1; -update noar ti set v0='AIF91B8I' where id=1; -update noar tt set b0='P2UWJAJ0UED' where id=1; -update noar ti set b0='P2UWJAJ0UED' where id=1; -update noar tt set v0='J6QQ9R' where id=1; -update noar ti set v0='J6QQ9R' where id=1; -update noar tt set b1='YBED' where id=1; -update noar ti set b1='YBED' where id=1; -update noar tt set v0='UEWRT5VCKRF1HM0EBG0JMSQTBG8A0ZI' where id=1; -update noar ti set v0='UEWRT5VCKRF1HM0EBG0JMSQTBG8A0ZI' where id=1; -update noar tt set b2='O5OV2' where id=1; -update noar ti set b2='O5OV2' where id=1; -update noar tt set v0='O1' where id=2; -update noar ti set v0='O1' where id=2; -update noar tt set b0='9U2S7WHR' where id=2; -update noar ti set b0='9U2S7WHR' where id=2; -update noar tt set v0='1FTCQ8GJA4RPYMS4OD4' where id=2; -update noar ti set v0='1FTCQ8GJA4RPYMS4OD4' where id=2; -update noar tt set b1='KJPEE7FZFBOP' where id=2; -update noar ti set b1='KJPEE7FZFBOP' where id=2; -update noar tt set v0='LDG5XLKUOWKVFPJNVMD4LTH' where id=2; -update noar ti set v0='LDG5XLKUOWKVFPJNVMD4LTH' where id=2; -update noar tt set b2='HGVBH7BM7JLHA26OPT1T' where id=2; -update noar ti set b2='HGVBH7BM7JLHA26OPT1T' where id=2; -update noar tt set v0='C22A6R7' where id=3; -update noar ti set v0='C22A6R7' where id=3; -update noar tt set b0='NUR511QMVKB5S06P94O' where id=3; -update noar ti set b0='NUR511QMVKB5S06P94O' where id=3; -update noar tt set v0='JHF01LEAU68T5E8ROL' where id=3; -update noar ti set v0='JHF01LEAU68T5E8ROL' where id=3; -update noar tt set b1='885KWQCUQAVBTJU' where id=3; -update noar ti set b1='885KWQCUQAVBTJU' where id=3; -update noar tt set v0='25YFTYUNIX16VC16' where id=3; -update noar ti set v0='25YFTYUNIX16VC16' where id=3; -update noar tt set b2='FKP' where id=3; -update noar ti set b2='FKP' where id=3; -update noar tt set v0='W5WF3UWG0QH8XE' where id=4; -update noar ti set v0='W5WF3UWG0QH8XE' where id=4; -update noar tt set b0='9ZXNEUHITKC5GV' where id=4; -update noar ti set b0='9ZXNEUHITKC5GV' where id=4; -update noar tt set v0='4U3STH13QWX4KJBH2H4ESLWD16R' where id=4; -update noar ti set v0='4U3STH13QWX4KJBH2H4ESLWD16R' where id=4; -update noar tt set b1='FL3X8OR7FL72ETW68X1WYBXP' where id=4; -update noar ti set b1='FL3X8OR7FL72ETW68X1WYBXP' where id=4; -update noar tt set v0='7YFAM8NB9W2AU7N2ZPKJML860W6' where id=4; -update noar ti set v0='7YFAM8NB9W2AU7N2ZPKJML860W6' where id=4; -update noar tt set b2='WYA3P4NWIZ3OCBD' where id=4; -update noar ti set b2='WYA3P4NWIZ3OCBD' where id=4; -update noar tt set v0='4K76' where id=5; -update noar ti set v0='4K76' where id=5; -update noar tt set b0='SPTB4PQKL4725I' where id=5; -update noar ti set b0='SPTB4PQKL4725I' where id=5; -update noar tt set v0='0D7BH1R5PTEVZEJFKKHG8NQ5WEIG0' where id=5; -update noar ti set v0='0D7BH1R5PTEVZEJFKKHG8NQ5WEIG0' where id=5; -update noar tt set b1='BYL' where id=5; -update noar ti set b1='BYL' where id=5; -update noar tt set v0='1FH05SBTE4GCF8' where id=5; -update noar ti set v0='1FH05SBTE4GCF8' where id=5; -update noar tt set b2='17TQK2XOQJ' where id=5; -update noar ti set b2='17TQK2XOQJ' where id=5; -update noar tt set v0='B0SU9OUYUBL74M2KW3' where id=6; -update noar ti set v0='B0SU9OUYUBL74M2KW3' where id=6; -update noar tt set b0='E90XVMXNKUMC6A7RZ0USPOUQC3KQ8G9K' where id=6; -update noar ti set b0='E90XVMXNKUMC6A7RZ0USPOUQC3KQ8G9K' where id=6; -update noar tt set v0='IJKJCI' where id=6; -update noar ti set v0='IJKJCI' where id=6; -update noar tt set b1='C' where id=6; -update noar ti set b1='C' where id=6; -update noar tt set v0='0E9OBY3RZ3LOZ30S8WSK2HGT' where id=6; -update noar ti set v0='0E9OBY3RZ3LOZ30S8WSK2HGT' where id=6; -update noar tt set b2='5H78U5R' where id=6; -update noar ti set b2='5H78U5R' where id=6; -update noar tt set v0='3YHAD0184TOSB' where id=7; -update noar ti set v0='3YHAD0184TOSB' where id=7; -update noar tt set b0='2T9QEPPNKQYGRML8VG0E6RB82FVX4XTR' where id=7; -update noar ti set b0='2T9QEPPNKQYGRML8VG0E6RB82FVX4XTR' where id=7; -update noar tt set v0='HXV8' where id=7; -update noar ti set v0='HXV8' where id=7; -update noar tt set b1='35TE6T343DPM3QKONCDW' where id=7; -update noar ti set b1='35TE6T343DPM3QKONCDW' where id=7; -update noar tt set v0='AX9QMIZZXIK3TC5E208I' where id=7; -update noar ti set v0='AX9QMIZZXIK3TC5E208I' where id=7; -update noar tt set b2='9TBNOLSB59ACW48L8S' where id=7; -update noar ti set b2='9TBNOLSB59ACW48L8S' where id=7; -update noar tt set v0='CTMXL39WHZ' where id=8; -update noar ti set v0='CTMXL39WHZ' where id=8; -update noar tt set b0='IW9AR7R473ZH6QTD2' where id=8; -update noar ti set b0='IW9AR7R473ZH6QTD2' where id=8; -update noar tt set v0='KY3JNL3GNN0G3T0' where id=8; -update noar ti set v0='KY3JNL3GNN0G3T0' where id=8; -update noar tt set b1='NE0N0NHLYX8ZLZ6YOF6U4' where id=8; -update noar ti set b1='NE0N0NHLYX8ZLZ6YOF6U4' where id=8; -update noar tt set v0='JPBW87M0Q0OVH8C51' where id=8; -update noar ti set v0='JPBW87M0Q0OVH8C51' where id=8; -update noar tt set b2='N857' where id=8; -update noar ti set b2='N857' where id=8; -update noar tt set v0='MGIK8JFIS' where id=9; -update noar ti set v0='MGIK8JFIS' where id=9; -update noar tt set b0='P4CEW8QJQCIHO45L7RXZDXRM' where id=9; -update noar ti set b0='P4CEW8QJQCIHO45L7RXZDXRM' where id=9; -update noar tt set v0='AHBTVPEJ' where id=9; -update noar ti set v0='AHBTVPEJ' where id=9; -update noar tt set b1='DI9SMHZZ02SZ' where id=9; -update noar ti set b1='DI9SMHZZ02SZ' where id=9; -update noar tt set v0='JB67SJHVA6LH' where id=9; -update noar ti set v0='JB67SJHVA6LH' where id=9; -update noar tt set b2='V47N8B3LMR25SSQCVTG3Y9RIH9J' where id=9; -update noar ti set b2='V47N8B3LMR25SSQCVTG3Y9RIH9J' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 tinyblob not null, - b1 longblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='8MO6YNMF4G45RQTC3I' where id=1; -update noar ti set v0='8MO6YNMF4G45RQTC3I' where id=1; -update noar tt set b0='FI' where id=1; -update noar ti set b0='FI' where id=1; -update noar tt set v0='T81M35RVQ1S6AMW1IW' where id=1; -update noar ti set v0='T81M35RVQ1S6AMW1IW' where id=1; -update noar tt set b1='Z2H2H' where id=1; -update noar ti set b1='Z2H2H' where id=1; -update noar tt set v0='JK7Y5OACOH4P88F3' where id=1; -update noar ti set v0='JK7Y5OACOH4P88F3' where id=1; -update noar tt set b2='QVNMR' where id=1; -update noar ti set b2='QVNMR' where id=1; -update noar tt set v0='MAG6J0MKJG' where id=2; -update noar ti set v0='MAG6J0MKJG' where id=2; -update noar tt set b0='QSMS5EFAQD2BBM' where id=2; -update noar ti set b0='QSMS5EFAQD2BBM' where id=2; -update noar tt set v0='Q6Y3B7CDEBESRJRWOKAQX' where id=2; -update noar ti set v0='Q6Y3B7CDEBESRJRWOKAQX' where id=2; -update noar tt set b1='ABMFG5858RP' where id=2; -update noar ti set b1='ABMFG5858RP' where id=2; -update noar tt set v0='JHISSD4RO3YUJS9SZS8ZQZFNO' where id=2; -update noar ti set v0='JHISSD4RO3YUJS9SZS8ZQZFNO' where id=2; -update noar tt set b2='OTH01L' where id=2; -update noar ti set b2='OTH01L' where id=2; -update noar tt set v0='RIQFIC6CJ7OIAU56' where id=3; -update noar ti set v0='RIQFIC6CJ7OIAU56' where id=3; -update noar tt set b0='IRFILLHGK0UQUTHH1BQBNQH9WDFM0' where id=3; -update noar ti set b0='IRFILLHGK0UQUTHH1BQBNQH9WDFM0' where id=3; -update noar tt set v0='37PTZ47CJHT' where id=3; -update noar ti set v0='37PTZ47CJHT' where id=3; -update noar tt set b1='YTS4WCLS68SW3IVZRD588CEIUD' where id=3; -update noar ti set b1='YTS4WCLS68SW3IVZRD588CEIUD' where id=3; -update noar tt set v0='0CAQ3PDNPQI7S3U6ZYVJ76PK23B1UERZ' where id=3; -update noar ti set v0='0CAQ3PDNPQI7S3U6ZYVJ76PK23B1UERZ' where id=3; -update noar tt set b2='64B6J0D112DX0RC7M7' where id=3; -update noar ti set b2='64B6J0D112DX0RC7M7' where id=3; -update noar tt set v0='EOJHMGQD' where id=4; -update noar ti set v0='EOJHMGQD' where id=4; -update noar tt set b0='HP4OXIIEYBHMQW6C3JP' where id=4; -update noar ti set b0='HP4OXIIEYBHMQW6C3JP' where id=4; -update noar tt set v0='G513IT5' where id=4; -update noar ti set v0='G513IT5' where id=4; -update noar tt set b1='GNYDJF5RHXED4A9' where id=4; -update noar ti set b1='GNYDJF5RHXED4A9' where id=4; -update noar tt set v0='M8TQCFMZO' where id=4; -update noar ti set v0='M8TQCFMZO' where id=4; -update noar tt set b2='41A8EPTG' where id=4; -update noar ti set b2='41A8EPTG' where id=4; -update noar tt set v0='J6YEZ2JWQRKARZ' where id=5; -update noar ti set v0='J6YEZ2JWQRKARZ' where id=5; -update noar tt set b0='C25XBXISTIKLN42MIJ21IKZB' where id=5; -update noar ti set b0='C25XBXISTIKLN42MIJ21IKZB' where id=5; -update noar tt set v0='HETVUGVXQVI6L7LCDUR8PPW' where id=5; -update noar ti set v0='HETVUGVXQVI6L7LCDUR8PPW' where id=5; -update noar tt set b1='7X312CKU58' where id=5; -update noar ti set b1='7X312CKU58' where id=5; -update noar tt set v0='ZCMAZBL3BWYQDHS407' where id=5; -update noar ti set v0='ZCMAZBL3BWYQDHS407' where id=5; -update noar tt set b2='F3U' where id=5; -update noar ti set b2='F3U' where id=5; -update noar tt set v0='3JKGKCE9LSRR07VBM3AVB6MVH' where id=6; -update noar ti set v0='3JKGKCE9LSRR07VBM3AVB6MVH' where id=6; -update noar tt set b0='DIIM6B7E3WM97D4Z6GUKTEIB5DPQP' where id=6; -update noar ti set b0='DIIM6B7E3WM97D4Z6GUKTEIB5DPQP' where id=6; -update noar tt set v0='8XZPOHU1NNSKLY8VWSZ6STZQWH82S1' where id=6; -update noar ti set v0='8XZPOHU1NNSKLY8VWSZ6STZQWH82S1' where id=6; -update noar tt set b1='8HNU2OK9ZK7N0' where id=6; -update noar ti set b1='8HNU2OK9ZK7N0' where id=6; -update noar tt set v0='L' where id=6; -update noar ti set v0='L' where id=6; -update noar tt set b2='2JYO0DACMLSG65Q4LX4K88XZ' where id=6; -update noar ti set b2='2JYO0DACMLSG65Q4LX4K88XZ' where id=6; -update noar tt set v0='T0LUWPAJ397GQS6UH2DP' where id=7; -update noar ti set v0='T0LUWPAJ397GQS6UH2DP' where id=7; -update noar tt set b0='TRBO6IQ696KOUWNT7DEEZQV9MU6' where id=7; -update noar ti set b0='TRBO6IQ696KOUWNT7DEEZQV9MU6' where id=7; -update noar tt set v0='VYO6FN9XA' where id=7; -update noar ti set v0='VYO6FN9XA' where id=7; -update noar tt set b1='8AGPAKACVH6XY39IFEE13M8CCLVJEG67' where id=7; -update noar ti set b1='8AGPAKACVH6XY39IFEE13M8CCLVJEG67' where id=7; -update noar tt set v0='2BT' where id=7; -update noar ti set v0='2BT' where id=7; -update noar tt set b2='P78ZDR3UWGSLUMC' where id=7; -update noar ti set b2='P78ZDR3UWGSLUMC' where id=7; -update noar tt set v0='0HBKGK0MYI5YS7TZJP5HN5M8J' where id=8; -update noar ti set v0='0HBKGK0MYI5YS7TZJP5HN5M8J' where id=8; -update noar tt set b0='UQE' where id=8; -update noar ti set b0='UQE' where id=8; -update noar tt set v0='0V16JMLMZKIVGTECUB9AKXRFI45CHG' where id=8; -update noar ti set v0='0V16JMLMZKIVGTECUB9AKXRFI45CHG' where id=8; -update noar tt set b1='MZ1WGZWEE7D1OMVCG5QXY7' where id=8; -update noar ti set b1='MZ1WGZWEE7D1OMVCG5QXY7' where id=8; -update noar tt set v0='HL631EGBYYUZTIOFY1IYMHLXI0M7J5E' where id=8; -update noar ti set v0='HL631EGBYYUZTIOFY1IYMHLXI0M7J5E' where id=8; -update noar tt set b2='34' where id=8; -update noar ti set b2='34' where id=8; -update noar tt set v0='99KKEAX5DK52J6KT85OAN43N5D3E' where id=9; -update noar ti set v0='99KKEAX5DK52J6KT85OAN43N5D3E' where id=9; -update noar tt set b0='Y7FW3MVANGFM741' where id=9; -update noar ti set b0='Y7FW3MVANGFM741' where id=9; -update noar tt set v0='SJ6AE8DTMNQH7PJ97UZ0CEMATX' where id=9; -update noar ti set v0='SJ6AE8DTMNQH7PJ97UZ0CEMATX' where id=9; -update noar tt set b1='OJSZ27FL3SUM4WF2CBS4ZG377INPVFF' where id=9; -update noar ti set b1='OJSZ27FL3SUM4WF2CBS4ZG377INPVFF' where id=9; -update noar tt set v0='2YN5' where id=9; -update noar ti set v0='2YN5' where id=9; -update noar tt set b2='LZBLWUS4PUX20NG26XLUEUJ32BK4W' where id=9; -update noar ti set b2='LZBLWUS4PUX20NG26XLUEUJ32BK4W' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 blob null, - b1 tinyblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='VB9VCSDEOZGB' where id=1; -update noar ti set v0='VB9VCSDEOZGB' where id=1; -update noar tt set b0='HL4UG894D7NH55JN' where id=1; -update noar ti set b0='HL4UG894D7NH55JN' where id=1; -update noar tt set v0='F9FX43JX3U8XOZ5THGMX0J' where id=1; -update noar ti set v0='F9FX43JX3U8XOZ5THGMX0J' where id=1; -update noar tt set b1='4LVOBI4A4' where id=1; -update noar ti set b1='4LVOBI4A4' where id=1; -update noar tt set v0='XI2P3B7014HJASP6Z49VSNQSHDTZ4' where id=1; -update noar ti set v0='XI2P3B7014HJASP6Z49VSNQSHDTZ4' where id=1; -update noar tt set b2='G38ET' where id=1; -update noar ti set b2='G38ET' where id=1; -update noar tt set v0='5G42ONQ4T3GPAP0ZNFK24X76E0BV6VK' where id=2; -update noar ti set v0='5G42ONQ4T3GPAP0ZNFK24X76E0BV6VK' where id=2; -update noar tt set b0='3THMOQ8R6GIAKDJV' where id=2; -update noar ti set b0='3THMOQ8R6GIAKDJV' where id=2; -update noar tt set v0='XQIN0TIQTETOM3UNN6DJ9O4MBP' where id=2; -update noar ti set v0='XQIN0TIQTETOM3UNN6DJ9O4MBP' where id=2; -update noar tt set b1='WYSVDM7DD225L2MU3HSOHR94V6CXYJM' where id=2; -update noar ti set b1='WYSVDM7DD225L2MU3HSOHR94V6CXYJM' where id=2; -update noar tt set v0='LYE1U2C8I4C0O8MPP5038CG3' where id=2; -update noar ti set v0='LYE1U2C8I4C0O8MPP5038CG3' where id=2; -update noar tt set b2='E06O5FLZYKJ' where id=2; -update noar ti set b2='E06O5FLZYKJ' where id=2; -update noar tt set v0='M3YZZ7OFQ0D8V20KSGH' where id=3; -update noar ti set v0='M3YZZ7OFQ0D8V20KSGH' where id=3; -update noar tt set b0='MF48EAYMLRJZN' where id=3; -update noar ti set b0='MF48EAYMLRJZN' where id=3; -update noar tt set v0='H9ZMA950T1G3VET3F' where id=3; -update noar ti set v0='H9ZMA950T1G3VET3F' where id=3; -update noar tt set b1='3E7290K9K' where id=3; -update noar ti set b1='3E7290K9K' where id=3; -update noar tt set v0='YYQIRJUKY1SOVFBY20LNM6542Q' where id=3; -update noar ti set v0='YYQIRJUKY1SOVFBY20LNM6542Q' where id=3; -update noar tt set b2='MXDII1D1GBA' where id=3; -update noar ti set b2='MXDII1D1GBA' where id=3; -update noar tt set v0='8CJ576M0H8QMH' where id=4; -update noar ti set v0='8CJ576M0H8QMH' where id=4; -update noar tt set b0='5IVE3LO3JK0VQ0G89XOIULKC' where id=4; -update noar ti set b0='5IVE3LO3JK0VQ0G89XOIULKC' where id=4; -update noar tt set v0='X1OIUBPNS953C032RGF3SLC0QU0' where id=4; -update noar ti set v0='X1OIUBPNS953C032RGF3SLC0QU0' where id=4; -update noar tt set b1='MP5UM38MPXK2STK' where id=4; -update noar ti set b1='MP5UM38MPXK2STK' where id=4; -update noar tt set v0='MLKHT3MJ2S6BAYDW7MWIL0N' where id=4; -update noar ti set v0='MLKHT3MJ2S6BAYDW7MWIL0N' where id=4; -update noar tt set b2='7IALJFG3XHVNL425L9' where id=4; -update noar ti set b2='7IALJFG3XHVNL425L9' where id=4; -update noar tt set v0='OSB0DLZCQT40J73MKK2UMHERMVZLBY' where id=5; -update noar ti set v0='OSB0DLZCQT40J73MKK2UMHERMVZLBY' where id=5; -update noar tt set b0='NUZ4W' where id=5; -update noar ti set b0='NUZ4W' where id=5; -update noar tt set v0='OZL5HGH' where id=5; -update noar ti set v0='OZL5HGH' where id=5; -update noar tt set b1='921PJH0CYQK2SZVC2GOKX3E2VFSCI' where id=5; -update noar ti set b1='921PJH0CYQK2SZVC2GOKX3E2VFSCI' where id=5; -update noar tt set v0='9E8VH1BSSJFRPCX' where id=5; -update noar ti set v0='9E8VH1BSSJFRPCX' where id=5; -update noar tt set b2='RHXFGC8CU3Q74AGSZV6D6M81TQOE' where id=5; -update noar ti set b2='RHXFGC8CU3Q74AGSZV6D6M81TQOE' where id=5; -update noar tt set v0='CFCTGV0XCINNS3' where id=6; -update noar ti set v0='CFCTGV0XCINNS3' where id=6; -update noar tt set b0='UYWAFGW51ZT6DOV4DGPZY7YEXL3' where id=6; -update noar ti set b0='UYWAFGW51ZT6DOV4DGPZY7YEXL3' where id=6; -update noar tt set v0='31RUMYEKQP8DP6' where id=6; -update noar ti set v0='31RUMYEKQP8DP6' where id=6; -update noar tt set b1='6LQ6ADET6QOFM77P5VY4G7RG5AOTM' where id=6; -update noar ti set b1='6LQ6ADET6QOFM77P5VY4G7RG5AOTM' where id=6; -update noar tt set v0='L' where id=6; -update noar ti set v0='L' where id=6; -update noar tt set b2='MLNOHEW46RD992HUWPJ4M05DTVGPBCF' where id=6; -update noar ti set b2='MLNOHEW46RD992HUWPJ4M05DTVGPBCF' where id=6; -update noar tt set v0='89' where id=7; -update noar ti set v0='89' where id=7; -update noar tt set b0='6PNIO8U5Z5D8HX8MRPY' where id=7; -update noar ti set b0='6PNIO8U5Z5D8HX8MRPY' where id=7; -update noar tt set v0='BEEKBP75ZV' where id=7; -update noar ti set v0='BEEKBP75ZV' where id=7; -update noar tt set b1='KX4KW7ITSMEUI' where id=7; -update noar ti set b1='KX4KW7ITSMEUI' where id=7; -update noar tt set v0='WPKG8AH0E1BC3' where id=7; -update noar ti set v0='WPKG8AH0E1BC3' where id=7; -update noar tt set b2='0ASK8I' where id=7; -update noar ti set b2='0ASK8I' where id=7; -update noar tt set v0='KP5WBAZDYXPWK0ZYIQ8NGW' where id=8; -update noar ti set v0='KP5WBAZDYXPWK0ZYIQ8NGW' where id=8; -update noar tt set b0='JK4YSH' where id=8; -update noar ti set b0='JK4YSH' where id=8; -update noar tt set v0='EP6TMUOZF2G3VHEN1AK73WGCC0O' where id=8; -update noar ti set v0='EP6TMUOZF2G3VHEN1AK73WGCC0O' where id=8; -update noar tt set b1='0CNHFOIMCSAH6N5WC76O' where id=8; -update noar ti set b1='0CNHFOIMCSAH6N5WC76O' where id=8; -update noar tt set v0='COGP2V' where id=8; -update noar ti set v0='COGP2V' where id=8; -update noar tt set b2='1LHL8D0R2' where id=8; -update noar ti set b2='1LHL8D0R2' where id=8; -update noar tt set v0='MG0QN6O9GXKC9U4' where id=9; -update noar ti set v0='MG0QN6O9GXKC9U4' where id=9; -update noar tt set b0='5HMOVA4IOM8KYC93FVVAK' where id=9; -update noar ti set b0='5HMOVA4IOM8KYC93FVVAK' where id=9; -update noar tt set v0='IGIDY4S17H2E713NX8BLYJIKU' where id=9; -update noar ti set v0='IGIDY4S17H2E713NX8BLYJIKU' where id=9; -update noar tt set b1='WGQGMS74E5LTWFH0UK9IQB' where id=9; -update noar ti set b1='WGQGMS74E5LTWFH0UK9IQB' where id=9; -update noar tt set v0='9NPY0F2CE90FDCXQ2' where id=9; -update noar ti set v0='9NPY0F2CE90FDCXQ2' where id=9; -update noar tt set b2='WQ6HZE55JF1U94SLTM1WFG977C9U5' where id=9; -update noar ti set b2='WQ6HZE55JF1U94SLTM1WFG977C9U5' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 blob null, - b1 tinyblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='N7E6COS3EUNQLBY81ZAELA2EPHU' where id=1; -update noar ti set v0='N7E6COS3EUNQLBY81ZAELA2EPHU' where id=1; -update noar tt set b0='76IFCKLZMRFZPE1D18STTXU4PSXZ' where id=1; -update noar ti set b0='76IFCKLZMRFZPE1D18STTXU4PSXZ' where id=1; -update noar tt set v0='RJ79HCDNZ33RI542OQLT' where id=1; -update noar ti set v0='RJ79HCDNZ33RI542OQLT' where id=1; -update noar tt set b1='F7CB6G8WD' where id=1; -update noar ti set b1='F7CB6G8WD' where id=1; -update noar tt set v0='X' where id=1; -update noar ti set v0='X' where id=1; -update noar tt set b2='QI54OISB1OFCREUZJD' where id=1; -update noar ti set b2='QI54OISB1OFCREUZJD' where id=1; -update noar tt set v0='K0FGJY8S074MY' where id=2; -update noar ti set v0='K0FGJY8S074MY' where id=2; -update noar tt set b0='OVFHK' where id=2; -update noar ti set b0='OVFHK' where id=2; -update noar tt set v0='71UW3HFXHM3TYKT767GY7I2EMYSZTBLM' where id=2; -update noar ti set v0='71UW3HFXHM3TYKT767GY7I2EMYSZTBLM' where id=2; -update noar tt set b1='BHTNWKY' where id=2; -update noar ti set b1='BHTNWKY' where id=2; -update noar tt set v0='P6WCXP836TZUHPHWV' where id=2; -update noar ti set v0='P6WCXP836TZUHPHWV' where id=2; -update noar tt set b2='T7GX7I5H67A4GSNWA9R1FQEQWWYC9E' where id=2; -update noar ti set b2='T7GX7I5H67A4GSNWA9R1FQEQWWYC9E' where id=2; -update noar tt set v0='NSTMC02Y5ZV49FTOYM95VEZLAN' where id=3; -update noar ti set v0='NSTMC02Y5ZV49FTOYM95VEZLAN' where id=3; -update noar tt set b0='YMXTW' where id=3; -update noar ti set b0='YMXTW' where id=3; -update noar tt set v0='PYKA2J2T2ZSH7R18TG41P20489P' where id=3; -update noar ti set v0='PYKA2J2T2ZSH7R18TG41P20489P' where id=3; -update noar tt set b1='OP33O737EABX5EL2RWC81EHUDKKSCH08' where id=3; -update noar ti set b1='OP33O737EABX5EL2RWC81EHUDKKSCH08' where id=3; -update noar tt set v0='FEM' where id=3; -update noar ti set v0='FEM' where id=3; -update noar tt set b2='GUJLWW6Y1K2M9U8KD1' where id=3; -update noar ti set b2='GUJLWW6Y1K2M9U8KD1' where id=3; -update noar tt set v0='DQVDBYSPFPPFGSA2V9IZ45KT8P4646N' where id=4; -update noar ti set v0='DQVDBYSPFPPFGSA2V9IZ45KT8P4646N' where id=4; -update noar tt set b0='G1KGJBSO45DSLLRCW10MWPFL3LU' where id=4; -update noar ti set b0='G1KGJBSO45DSLLRCW10MWPFL3LU' where id=4; -update noar tt set v0='2HQFO2AMOW90SBSA75T2H4' where id=4; -update noar ti set v0='2HQFO2AMOW90SBSA75T2H4' where id=4; -update noar tt set b1='HOPQ5J' where id=4; -update noar ti set b1='HOPQ5J' where id=4; -update noar tt set v0='AUQML2Y' where id=4; -update noar ti set v0='AUQML2Y' where id=4; -update noar tt set b2='I' where id=4; -update noar ti set b2='I' where id=4; -update noar tt set v0='MXNQX2W' where id=5; -update noar ti set v0='MXNQX2W' where id=5; -update noar tt set b0='7BFBOVSRJC2H2IESLQUQF' where id=5; -update noar ti set b0='7BFBOVSRJC2H2IESLQUQF' where id=5; -update noar tt set v0='ZG72C7J3LDFLVBDL7AT79EIKRO9RLAN' where id=5; -update noar ti set v0='ZG72C7J3LDFLVBDL7AT79EIKRO9RLAN' where id=5; -update noar tt set b1='NHJ1G4V12GX044STM3NR' where id=5; -update noar ti set b1='NHJ1G4V12GX044STM3NR' where id=5; -update noar tt set v0='QJ' where id=5; -update noar ti set v0='QJ' where id=5; -update noar tt set b2='524GMGU8O84A9C0DVHV4KR2HW' where id=5; -update noar ti set b2='524GMGU8O84A9C0DVHV4KR2HW' where id=5; -update noar tt set v0='LP5D1W' where id=6; -update noar ti set v0='LP5D1W' where id=6; -update noar tt set b0='F9A3UQNPJOPUB4X2SF03' where id=6; -update noar ti set b0='F9A3UQNPJOPUB4X2SF03' where id=6; -update noar tt set v0='1QF66XQX5451SQN8DTSIEIHL8YRY' where id=6; -update noar ti set v0='1QF66XQX5451SQN8DTSIEIHL8YRY' where id=6; -update noar tt set b1='MO' where id=6; -update noar ti set b1='MO' where id=6; -update noar tt set v0='LVOCQCCATPTB' where id=6; -update noar ti set v0='LVOCQCCATPTB' where id=6; -update noar tt set b2='FN284L6E4YQ' where id=6; -update noar ti set b2='FN284L6E4YQ' where id=6; -update noar tt set v0='LKXQ264A3WXZT4TT81NXG5LYJ8VJVX' where id=7; -update noar ti set v0='LKXQ264A3WXZT4TT81NXG5LYJ8VJVX' where id=7; -update noar tt set b0='8GZX15BGW' where id=7; -update noar ti set b0='8GZX15BGW' where id=7; -update noar tt set v0='WX8J2M4HLDWIKZGB9GL1VFWPAGVBE1X' where id=7; -update noar ti set v0='WX8J2M4HLDWIKZGB9GL1VFWPAGVBE1X' where id=7; -update noar tt set b1='M9QQHIDLMPET89CXFMUZ9IO00A' where id=7; -update noar ti set b1='M9QQHIDLMPET89CXFMUZ9IO00A' where id=7; -update noar tt set v0='JZB9KBPXHQOXRB2PS6' where id=7; -update noar ti set v0='JZB9KBPXHQOXRB2PS6' where id=7; -update noar tt set b2='DCTT48' where id=7; -update noar ti set b2='DCTT48' where id=7; -update noar tt set v0='RN8BID43CASG' where id=8; -update noar ti set v0='RN8BID43CASG' where id=8; -update noar tt set b0='J4SK8LAYHUNZS8W703G7LEQEZ518HE' where id=8; -update noar ti set b0='J4SK8LAYHUNZS8W703G7LEQEZ518HE' where id=8; -update noar tt set v0='GAAJ2AG05OH2I3VY2O' where id=8; -update noar ti set v0='GAAJ2AG05OH2I3VY2O' where id=8; -update noar tt set b1='N3G39MG5QWRI5YDZE8AOPDZV' where id=8; -update noar ti set b1='N3G39MG5QWRI5YDZE8AOPDZV' where id=8; -update noar tt set v0='F8' where id=8; -update noar ti set v0='F8' where id=8; -update noar tt set b2='GT8TR3N' where id=8; -update noar ti set b2='GT8TR3N' where id=8; -update noar tt set v0='7KOLAMB5JIR8MZ08QKG1BOMKLJ' where id=9; -update noar ti set v0='7KOLAMB5JIR8MZ08QKG1BOMKLJ' where id=9; -update noar tt set b0='D0L0PLE7' where id=9; -update noar ti set b0='D0L0PLE7' where id=9; -update noar tt set v0='0WNJ6NRCX6JRJ1K0A8G' where id=9; -update noar ti set v0='0WNJ6NRCX6JRJ1K0A8G' where id=9; -update noar tt set b1='AY6JFAPQHA' where id=9; -update noar ti set b1='AY6JFAPQHA' where id=9; -update noar tt set v0='C9JJ1DHB8L7RGOGRVPI' where id=9; -update noar ti set v0='C9JJ1DHB8L7RGOGRVPI' where id=9; -update noar tt set b2='TZ55BT0S1DEX' where id=9; -update noar ti set b2='TZ55BT0S1DEX' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 blob not null, - b1 tinyblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='SL185N' where id=1; -update noar ti set v0='SL185N' where id=1; -update noar tt set b0='JZAXQB45ZMBLD6ET8DBRS' where id=1; -update noar ti set b0='JZAXQB45ZMBLD6ET8DBRS' where id=1; -update noar tt set v0='Q2VXXWV6SZPZ90WRD4GI4PKE8EXXTB' where id=1; -update noar ti set v0='Q2VXXWV6SZPZ90WRD4GI4PKE8EXXTB' where id=1; -update noar tt set b1='7GG0CPT' where id=1; -update noar ti set b1='7GG0CPT' where id=1; -update noar tt set v0='5IQFVMNTQAVJTBSRNBV' where id=1; -update noar ti set v0='5IQFVMNTQAVJTBSRNBV' where id=1; -update noar tt set b2='SAY0VWC3AL' where id=1; -update noar ti set b2='SAY0VWC3AL' where id=1; -update noar tt set v0='7WVDLQT8EQPXGAQ0I1HNLT2P' where id=2; -update noar ti set v0='7WVDLQT8EQPXGAQ0I1HNLT2P' where id=2; -update noar tt set b0='00XKM63N1RRRMC' where id=2; -update noar ti set b0='00XKM63N1RRRMC' where id=2; -update noar tt set v0='MPYS06VCS5' where id=2; -update noar ti set v0='MPYS06VCS5' where id=2; -update noar tt set b1='PE1F6H1N694FZH8AZQWGRXG28HLF7R' where id=2; -update noar ti set b1='PE1F6H1N694FZH8AZQWGRXG28HLF7R' where id=2; -update noar tt set v0='Y1XOVQ' where id=2; -update noar ti set v0='Y1XOVQ' where id=2; -update noar tt set b2='ZPJ0GEHUKVSK5FFPUJK03' where id=2; -update noar ti set b2='ZPJ0GEHUKVSK5FFPUJK03' where id=2; -update noar tt set v0='0US' where id=3; -update noar ti set v0='0US' where id=3; -update noar tt set b0='ZRTQMXSF' where id=3; -update noar ti set b0='ZRTQMXSF' where id=3; -update noar tt set v0='J5H51AX' where id=3; -update noar ti set v0='J5H51AX' where id=3; -update noar tt set b1='0N8K2W2IP97NQHIQF' where id=3; -update noar ti set b1='0N8K2W2IP97NQHIQF' where id=3; -update noar tt set v0='8IZID2V8VF26J' where id=3; -update noar ti set v0='8IZID2V8VF26J' where id=3; -update noar tt set b2='PUTT4OYA6CCVHCTME77GYMAFQOY' where id=3; -update noar ti set b2='PUTT4OYA6CCVHCTME77GYMAFQOY' where id=3; -update noar tt set v0='HSLBG' where id=4; -update noar ti set v0='HSLBG' where id=4; -update noar tt set b0='TSTQ6AUVZD6FW03SUO29I3RM61ZJR' where id=4; -update noar ti set b0='TSTQ6AUVZD6FW03SUO29I3RM61ZJR' where id=4; -update noar tt set v0='JXHR8XFSSPNQPD' where id=4; -update noar ti set v0='JXHR8XFSSPNQPD' where id=4; -update noar tt set b1='DBG7QPTMRNNA4' where id=4; -update noar ti set b1='DBG7QPTMRNNA4' where id=4; -update noar tt set v0='E5' where id=4; -update noar ti set v0='E5' where id=4; -update noar tt set b2='ES6L9UP9K9LYVBANIIMCMP3GVWTHU9' where id=4; -update noar ti set b2='ES6L9UP9K9LYVBANIIMCMP3GVWTHU9' where id=4; -update noar tt set v0='ML4Z1G1JWP0DHEMPEPT' where id=5; -update noar ti set v0='ML4Z1G1JWP0DHEMPEPT' where id=5; -update noar tt set b0='23KLGFMPONT3Y7MT2KL9IA' where id=5; -update noar ti set b0='23KLGFMPONT3Y7MT2KL9IA' where id=5; -update noar tt set v0='R6B0QGILF1MS' where id=5; -update noar ti set v0='R6B0QGILF1MS' where id=5; -update noar tt set b1='AP2N5J' where id=5; -update noar ti set b1='AP2N5J' where id=5; -update noar tt set v0='7PXK20QHITD' where id=5; -update noar ti set v0='7PXK20QHITD' where id=5; -update noar tt set b2='HW4GX0YF5J676RDMLVORGVF5U8MWY3C' where id=5; -update noar ti set b2='HW4GX0YF5J676RDMLVORGVF5U8MWY3C' where id=5; -update noar tt set v0='VFAZLK2ER2PCRAV7' where id=6; -update noar ti set v0='VFAZLK2ER2PCRAV7' where id=6; -update noar tt set b0='2KNPWAHB57NU43EKPPGS6GINQ9TN0W' where id=6; -update noar ti set b0='2KNPWAHB57NU43EKPPGS6GINQ9TN0W' where id=6; -update noar tt set v0='11M7JAMV' where id=6; -update noar ti set v0='11M7JAMV' where id=6; -update noar tt set b1='K7GSY8VJTD78QUSC7S1KF2' where id=6; -update noar ti set b1='K7GSY8VJTD78QUSC7S1KF2' where id=6; -update noar tt set v0='MJKJO5HBC15' where id=6; -update noar ti set v0='MJKJO5HBC15' where id=6; -update noar tt set b2='OA' where id=6; -update noar ti set b2='OA' where id=6; -update noar tt set v0='O' where id=7; -update noar ti set v0='O' where id=7; -update noar tt set b0='CIDTBH61S3EDO6IVTWK3' where id=7; -update noar ti set b0='CIDTBH61S3EDO6IVTWK3' where id=7; -update noar tt set v0='MM15F2JGPB2' where id=7; -update noar ti set v0='MM15F2JGPB2' where id=7; -update noar tt set b1='6BFA1U6HFOJ2Q9GTG' where id=7; -update noar ti set b1='6BFA1U6HFOJ2Q9GTG' where id=7; -update noar tt set v0='H6Q5P1980JKG' where id=7; -update noar ti set v0='H6Q5P1980JKG' where id=7; -update noar tt set b2='GXOA1SV9UHWIL' where id=7; -update noar ti set b2='GXOA1SV9UHWIL' where id=7; -update noar tt set v0='ACLU5D8JDSHMFW' where id=8; -update noar ti set v0='ACLU5D8JDSHMFW' where id=8; -update noar tt set b0='ET58YPLALZQSTI8Y0AM' where id=8; -update noar ti set b0='ET58YPLALZQSTI8Y0AM' where id=8; -update noar tt set v0='8XTZ0PHE4' where id=8; -update noar ti set v0='8XTZ0PHE4' where id=8; -update noar tt set b1='AL8NG0FEDRYEXIH' where id=8; -update noar ti set b1='AL8NG0FEDRYEXIH' where id=8; -update noar tt set v0='TBB1X5L' where id=8; -update noar ti set v0='TBB1X5L' where id=8; -update noar tt set b2='CFIPBV36L9FJS4F59SDLKJDQH' where id=8; -update noar ti set b2='CFIPBV36L9FJS4F59SDLKJDQH' where id=8; -update noar tt set v0='0HJROZ9MYJ6IEHNTYG4DMNP6' where id=9; -update noar ti set v0='0HJROZ9MYJ6IEHNTYG4DMNP6' where id=9; -update noar tt set b0='7YG7P1D79F0KPA3AL2VAXS1LX4ZYYEB' where id=9; -update noar ti set b0='7YG7P1D79F0KPA3AL2VAXS1LX4ZYYEB' where id=9; -update noar tt set v0='28M5EF' where id=9; -update noar ti set v0='28M5EF' where id=9; -update noar tt set b1='TO1' where id=9; -update noar ti set b1='TO1' where id=9; -update noar tt set v0='DF' where id=9; -update noar ti set v0='DF' where id=9; -update noar tt set b2='D9OL' where id=9; -update noar ti set b2='D9OL' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 blob not null, - b1 tinyblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='5DOA15OSOD9DQZTW4PDGEC1I1HR7W5VU' where id=1; -update noar ti set v0='5DOA15OSOD9DQZTW4PDGEC1I1HR7W5VU' where id=1; -update noar tt set b0='NKY8V0K0W0' where id=1; -update noar ti set b0='NKY8V0K0W0' where id=1; -update noar tt set v0='R4S' where id=1; -update noar ti set v0='R4S' where id=1; -update noar tt set b1='LUFY4NXZ42V1Y2I52' where id=1; -update noar ti set b1='LUFY4NXZ42V1Y2I52' where id=1; -update noar tt set v0='Z809N9FCJRKJQBD' where id=1; -update noar ti set v0='Z809N9FCJRKJQBD' where id=1; -update noar tt set b2='SP2' where id=1; -update noar ti set b2='SP2' where id=1; -update noar tt set v0='DP0BPODNZKVITQ1KGN3M1GVLNEC' where id=2; -update noar ti set v0='DP0BPODNZKVITQ1KGN3M1GVLNEC' where id=2; -update noar tt set b0='E6M3UQV5MK1' where id=2; -update noar ti set b0='E6M3UQV5MK1' where id=2; -update noar tt set v0='0C858G02VNW22CR' where id=2; -update noar ti set v0='0C858G02VNW22CR' where id=2; -update noar tt set b1='RDO86' where id=2; -update noar ti set b1='RDO86' where id=2; -update noar tt set v0='NSIKLEHC' where id=2; -update noar ti set v0='NSIKLEHC' where id=2; -update noar tt set b2='MDK' where id=2; -update noar ti set b2='MDK' where id=2; -update noar tt set v0='CWZEJQ1Q' where id=3; -update noar ti set v0='CWZEJQ1Q' where id=3; -update noar tt set b0='198SH3U1JPRQCA70VEXDTXT' where id=3; -update noar ti set b0='198SH3U1JPRQCA70VEXDTXT' where id=3; -update noar tt set v0='M2A6LO06CE' where id=3; -update noar ti set v0='M2A6LO06CE' where id=3; -update noar tt set b1='ZSDAPLY4XF2JU93' where id=3; -update noar ti set b1='ZSDAPLY4XF2JU93' where id=3; -update noar tt set v0='71GGR7TRM286D7SBGEQ2MW7R4JIW7H' where id=3; -update noar ti set v0='71GGR7TRM286D7SBGEQ2MW7R4JIW7H' where id=3; -update noar tt set b2='LE' where id=3; -update noar ti set b2='LE' where id=3; -update noar tt set v0='1EA72GMDB3RQCLEUAH7XPSDFX' where id=4; -update noar ti set v0='1EA72GMDB3RQCLEUAH7XPSDFX' where id=4; -update noar tt set b0='A' where id=4; -update noar ti set b0='A' where id=4; -update noar tt set v0='SQAASN3ND4PW0VLYY55UWM' where id=4; -update noar ti set v0='SQAASN3ND4PW0VLYY55UWM' where id=4; -update noar tt set b1='2M3YLV873KLL8FGFZLPWU' where id=4; -update noar ti set b1='2M3YLV873KLL8FGFZLPWU' where id=4; -update noar tt set v0='VV9MGGFJEJBIRAHWMX' where id=4; -update noar ti set v0='VV9MGGFJEJBIRAHWMX' where id=4; -update noar tt set b2='UXEXO3WN7L7KQZH6HSDF' where id=4; -update noar ti set b2='UXEXO3WN7L7KQZH6HSDF' where id=4; -update noar tt set v0='O1YWKH3QTI1AXWBQYOBCUMZYYBVCUU' where id=5; -update noar ti set v0='O1YWKH3QTI1AXWBQYOBCUMZYYBVCUU' where id=5; -update noar tt set b0='H942QEAPA' where id=5; -update noar ti set b0='H942QEAPA' where id=5; -update noar tt set v0='4K9GQYZLEP5' where id=5; -update noar ti set v0='4K9GQYZLEP5' where id=5; -update noar tt set b1='AL01TKC1WDZVNG4M' where id=5; -update noar ti set b1='AL01TKC1WDZVNG4M' where id=5; -update noar tt set v0='J5JN8VGJT' where id=5; -update noar ti set v0='J5JN8VGJT' where id=5; -update noar tt set b2='MUI7C7B7E' where id=5; -update noar ti set b2='MUI7C7B7E' where id=5; -update noar tt set v0='MAG36AROYV7O0ECOLLSZVX8A' where id=6; -update noar ti set v0='MAG36AROYV7O0ECOLLSZVX8A' where id=6; -update noar tt set b0='LV6C3T1R8BRI6RQ53OQA53KL' where id=6; -update noar ti set b0='LV6C3T1R8BRI6RQ53OQA53KL' where id=6; -update noar tt set v0='3ZVVPY03L' where id=6; -update noar ti set v0='3ZVVPY03L' where id=6; -update noar tt set b1='3U21I9JX1' where id=6; -update noar ti set b1='3U21I9JX1' where id=6; -update noar tt set v0='EBGQ1TQH0IKSQ' where id=6; -update noar ti set v0='EBGQ1TQH0IKSQ' where id=6; -update noar tt set b2='H9VFRPMY6SVK1' where id=6; -update noar ti set b2='H9VFRPMY6SVK1' where id=6; -update noar tt set v0='VCILMOZWJFTK2HR0COSI22D' where id=7; -update noar ti set v0='VCILMOZWJFTK2HR0COSI22D' where id=7; -update noar tt set b0='9NICEITIMXDWW' where id=7; -update noar ti set b0='9NICEITIMXDWW' where id=7; -update noar tt set v0='SKSPWIW0YURQ' where id=7; -update noar ti set v0='SKSPWIW0YURQ' where id=7; -update noar tt set b1='KSFAQ02GBN0PVQMTG0ZKQ' where id=7; -update noar ti set b1='KSFAQ02GBN0PVQMTG0ZKQ' where id=7; -update noar tt set v0='0D94643Z' where id=7; -update noar ti set v0='0D94643Z' where id=7; -update noar tt set b2='W5DBZ39VVXMELAN4E6QCXQO692X4AK' where id=7; -update noar ti set b2='W5DBZ39VVXMELAN4E6QCXQO692X4AK' where id=7; -update noar tt set v0='K0FDLAHL7OL2IVVNOF1' where id=8; -update noar ti set v0='K0FDLAHL7OL2IVVNOF1' where id=8; -update noar tt set b0='YCHZSCV1VX' where id=8; -update noar ti set b0='YCHZSCV1VX' where id=8; -update noar tt set v0='0YSZ8KT43EGNNGWDAA27U7Y1WSLSB0N' where id=8; -update noar ti set v0='0YSZ8KT43EGNNGWDAA27U7Y1WSLSB0N' where id=8; -update noar tt set b1='F2QE54GTWGXO1Z' where id=8; -update noar ti set b1='F2QE54GTWGXO1Z' where id=8; -update noar tt set v0='GXIHVOAQV' where id=8; -update noar ti set v0='GXIHVOAQV' where id=8; -update noar tt set b2='KEVRRCVM3QV7OBYF8B9WM8' where id=8; -update noar ti set b2='KEVRRCVM3QV7OBYF8B9WM8' where id=8; -update noar tt set v0='ENBWI3GPZBADJK63SI78GPDP' where id=9; -update noar ti set v0='ENBWI3GPZBADJK63SI78GPDP' where id=9; -update noar tt set b0='0NUCN6IX2ZOZRN9O' where id=9; -update noar ti set b0='0NUCN6IX2ZOZRN9O' where id=9; -update noar tt set v0='WPXVA' where id=9; -update noar ti set v0='WPXVA' where id=9; -update noar tt set b1='KQ7HULNUSLXKL01YIQ73OGDH68A' where id=9; -update noar ti set b1='KQ7HULNUSLXKL01YIQ73OGDH68A' where id=9; -update noar tt set v0='TYRBMZ474ICZJX8' where id=9; -update noar ti set v0='TYRBMZ474ICZJX8' where id=9; -update noar tt set b2='7AS7GK6MJG9VYHMP3KIHINVY' where id=9; -update noar ti set b2='7AS7GK6MJG9VYHMP3KIHINVY' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 blob null, - b1 tinyblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='8OFXQ6L5NC67OWGC6Z8FFOVRPQCT245' where id=1; -update noar ti set v0='8OFXQ6L5NC67OWGC6Z8FFOVRPQCT245' where id=1; -update noar tt set b0='S328ECLT3RRUYQCA0V2C' where id=1; -update noar ti set b0='S328ECLT3RRUYQCA0V2C' where id=1; -update noar tt set v0='WVYCVSCUMN1Z2953YMDTVSC2DBOBECT' where id=1; -update noar ti set v0='WVYCVSCUMN1Z2953YMDTVSC2DBOBECT' where id=1; -update noar tt set b1='TLCRQO8XHS1NAP9FDWPUIM' where id=1; -update noar ti set b1='TLCRQO8XHS1NAP9FDWPUIM' where id=1; -update noar tt set v0='T1' where id=1; -update noar ti set v0='T1' where id=1; -update noar tt set b2='GR7B7K3SORSI4VB6D2IWR8ZFVH7' where id=1; -update noar ti set b2='GR7B7K3SORSI4VB6D2IWR8ZFVH7' where id=1; -update noar tt set v0='4HFC330OC1IAP94BY8N44FZZSH' where id=2; -update noar ti set v0='4HFC330OC1IAP94BY8N44FZZSH' where id=2; -update noar tt set b0='Y09D0PZPSFOCS6CFMZLQ6N' where id=2; -update noar ti set b0='Y09D0PZPSFOCS6CFMZLQ6N' where id=2; -update noar tt set v0='80B8949XG' where id=2; -update noar ti set v0='80B8949XG' where id=2; -update noar tt set b1='XWE' where id=2; -update noar ti set b1='XWE' where id=2; -update noar tt set v0='NGXWD1TIDXE1CSRN00RUDMTBE6G5' where id=2; -update noar ti set v0='NGXWD1TIDXE1CSRN00RUDMTBE6G5' where id=2; -update noar tt set b2='QI1QDB1I' where id=2; -update noar ti set b2='QI1QDB1I' where id=2; -update noar tt set v0='QSK' where id=3; -update noar ti set v0='QSK' where id=3; -update noar tt set b0='H2HZJX2OQRP7L10IUB3L3UBTV8T5AQ' where id=3; -update noar ti set b0='H2HZJX2OQRP7L10IUB3L3UBTV8T5AQ' where id=3; -update noar tt set v0='KAR9FGEBD' where id=3; -update noar ti set v0='KAR9FGEBD' where id=3; -update noar tt set b1='HWU9BZEZTNDPH4QJDQKW7QXDQ3PQ' where id=3; -update noar ti set b1='HWU9BZEZTNDPH4QJDQKW7QXDQ3PQ' where id=3; -update noar tt set v0='H4EYLTNXDQ4ZSWH5ZG31KVH4Z18V' where id=3; -update noar ti set v0='H4EYLTNXDQ4ZSWH5ZG31KVH4Z18V' where id=3; -update noar tt set b2='0CYU2G1JL' where id=3; -update noar ti set b2='0CYU2G1JL' where id=3; -update noar tt set v0='HUZYVET6ZO9KNU' where id=4; -update noar ti set v0='HUZYVET6ZO9KNU' where id=4; -update noar tt set b0='J9ZDF8HZZU9KSH78VQDSMEFRPZ6OCT' where id=4; -update noar ti set b0='J9ZDF8HZZU9KSH78VQDSMEFRPZ6OCT' where id=4; -update noar tt set v0='5KC' where id=4; -update noar ti set v0='5KC' where id=4; -update noar tt set b1='4V190RO84MCKMR3ZZVTOV59VGSFLL7' where id=4; -update noar ti set b1='4V190RO84MCKMR3ZZVTOV59VGSFLL7' where id=4; -update noar tt set v0='1FRGAH492177BPCIXWVKR99' where id=4; -update noar ti set v0='1FRGAH492177BPCIXWVKR99' where id=4; -update noar tt set b2='BL2JW3GI0AD7JNBTCLBBA02APEZY' where id=4; -update noar ti set b2='BL2JW3GI0AD7JNBTCLBBA02APEZY' where id=4; -update noar tt set v0='WQU38IVP1984WA557O3LR' where id=5; -update noar ti set v0='WQU38IVP1984WA557O3LR' where id=5; -update noar tt set b0='1G6KPWXWQZYTD4W21HHQOV8389EGJJKS' where id=5; -update noar ti set b0='1G6KPWXWQZYTD4W21HHQOV8389EGJJKS' where id=5; -update noar tt set v0='FXK8' where id=5; -update noar ti set v0='FXK8' where id=5; -update noar tt set b1='OAO8GUS48RX8HO5Q98RRK12PO25' where id=5; -update noar ti set b1='OAO8GUS48RX8HO5Q98RRK12PO25' where id=5; -update noar tt set v0='FMBTPP' where id=5; -update noar ti set v0='FMBTPP' where id=5; -update noar tt set b2='HQU56AWCMMQ3L' where id=5; -update noar ti set b2='HQU56AWCMMQ3L' where id=5; -update noar tt set v0='50VD4T562NTPR1G' where id=6; -update noar ti set v0='50VD4T562NTPR1G' where id=6; -update noar tt set b0='FX4VA' where id=6; -update noar ti set b0='FX4VA' where id=6; -update noar tt set v0='4UPOCOH7B0MV9H3JH5' where id=6; -update noar ti set v0='4UPOCOH7B0MV9H3JH5' where id=6; -update noar tt set b1='4MO3VI5LCR0JQT' where id=6; -update noar ti set b1='4MO3VI5LCR0JQT' where id=6; -update noar tt set v0='FN5' where id=6; -update noar ti set v0='FN5' where id=6; -update noar tt set b2='E6754' where id=6; -update noar ti set b2='E6754' where id=6; -update noar tt set v0='W5DS44UQUW4BK2TMUVHRMY2OS03PN8' where id=7; -update noar ti set v0='W5DS44UQUW4BK2TMUVHRMY2OS03PN8' where id=7; -update noar tt set b0='CK6TVL' where id=7; -update noar ti set b0='CK6TVL' where id=7; -update noar tt set v0='2NSX4SFM7XTP2Z3X4XIG20VI4HJZX' where id=7; -update noar ti set v0='2NSX4SFM7XTP2Z3X4XIG20VI4HJZX' where id=7; -update noar tt set b1='D6VNG23LZPDFNMN5PSFPJ' where id=7; -update noar ti set b1='D6VNG23LZPDFNMN5PSFPJ' where id=7; -update noar tt set v0='SK08F4' where id=7; -update noar ti set v0='SK08F4' where id=7; -update noar tt set b2='YUMII2Y603QNJZEHZ2' where id=7; -update noar ti set b2='YUMII2Y603QNJZEHZ2' where id=7; -update noar tt set v0='GQS1' where id=8; -update noar ti set v0='GQS1' where id=8; -update noar tt set b0='HX' where id=8; -update noar ti set b0='HX' where id=8; -update noar tt set v0='7L3M4D8I4RI' where id=8; -update noar ti set v0='7L3M4D8I4RI' where id=8; -update noar tt set b1='YRSA' where id=8; -update noar ti set b1='YRSA' where id=8; -update noar tt set v0='EPT2GJ9HLW3FK43GPVQLV1KA9SY29' where id=8; -update noar ti set v0='EPT2GJ9HLW3FK43GPVQLV1KA9SY29' where id=8; -update noar tt set b2='U1E5' where id=8; -update noar ti set b2='U1E5' where id=8; -update noar tt set v0='3JT6YE' where id=9; -update noar ti set v0='3JT6YE' where id=9; -update noar tt set b0='48CS9AA1LPXG' where id=9; -update noar ti set b0='48CS9AA1LPXG' where id=9; -update noar tt set v0='M5' where id=9; -update noar ti set v0='M5' where id=9; -update noar tt set b1='XRI2HS37K3TXCIX9G3QXU5BIQ2' where id=9; -update noar ti set b1='XRI2HS37K3TXCIX9G3QXU5BIQ2' where id=9; -update noar tt set v0='4LC07BPK' where id=9; -update noar ti set v0='4LC07BPK' where id=9; -update noar tt set b2='8CR0' where id=9; -update noar ti set b2='8CR0' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 blob null, - b1 tinyblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='VUQPQDYXZXNTCA3JV0UB3QV69' where id=1; -update noar ti set v0='VUQPQDYXZXNTCA3JV0UB3QV69' where id=1; -update noar tt set b0='APBXLU54RTNOKCA759E8UPZ6VOV1ZL' where id=1; -update noar ti set b0='APBXLU54RTNOKCA759E8UPZ6VOV1ZL' where id=1; -update noar tt set v0='DEQ7ZBUHHIC6T4LY8QPNXAS' where id=1; -update noar ti set v0='DEQ7ZBUHHIC6T4LY8QPNXAS' where id=1; -update noar tt set b1='KL88WWG2MIY515LJFDI8TW2EE0' where id=1; -update noar ti set b1='KL88WWG2MIY515LJFDI8TW2EE0' where id=1; -update noar tt set v0='DPBJF4F987I' where id=1; -update noar ti set v0='DPBJF4F987I' where id=1; -update noar tt set b2='D5ISQ06XRY186VUNHAI0RQ' where id=1; -update noar ti set b2='D5ISQ06XRY186VUNHAI0RQ' where id=1; -update noar tt set v0='75850D7P52SMA799HZ' where id=2; -update noar ti set v0='75850D7P52SMA799HZ' where id=2; -update noar tt set b0='Q992DR0ONYEANG0H1W7T' where id=2; -update noar ti set b0='Q992DR0ONYEANG0H1W7T' where id=2; -update noar tt set v0='0NHDR5HW1KL9AT4' where id=2; -update noar ti set v0='0NHDR5HW1KL9AT4' where id=2; -update noar tt set b1='JN05H798V6OG8I3HHZ18JPCAKDDGBE' where id=2; -update noar ti set b1='JN05H798V6OG8I3HHZ18JPCAKDDGBE' where id=2; -update noar tt set v0='F9Y0' where id=2; -update noar ti set v0='F9Y0' where id=2; -update noar tt set b2='O7JEBE777C03YUGF34KAQ4DRPYZPOLI4' where id=2; -update noar ti set b2='O7JEBE777C03YUGF34KAQ4DRPYZPOLI4' where id=2; -update noar tt set v0='RKGS2C08E6KXF' where id=3; -update noar ti set v0='RKGS2C08E6KXF' where id=3; -update noar tt set b0='G6JJ6B0SI8HKRF' where id=3; -update noar ti set b0='G6JJ6B0SI8HKRF' where id=3; -update noar tt set v0='AHGMKZ1LLNN4PPT74G24' where id=3; -update noar ti set v0='AHGMKZ1LLNN4PPT74G24' where id=3; -update noar tt set b1='ATT9ZP2LZO9KGWPP60LDYBDKZ3A' where id=3; -update noar ti set b1='ATT9ZP2LZO9KGWPP60LDYBDKZ3A' where id=3; -update noar tt set v0='7KYOE' where id=3; -update noar ti set v0='7KYOE' where id=3; -update noar tt set b2='WGRVJ3BA3YITX2R4' where id=3; -update noar ti set b2='WGRVJ3BA3YITX2R4' where id=3; -update noar tt set v0='64T1F5D' where id=4; -update noar ti set v0='64T1F5D' where id=4; -update noar tt set b0='XQGN4LO22R0ESCR0Q20GV6JRRAQG' where id=4; -update noar ti set b0='XQGN4LO22R0ESCR0Q20GV6JRRAQG' where id=4; -update noar tt set v0='351ETRMEMKM' where id=4; -update noar ti set v0='351ETRMEMKM' where id=4; -update noar tt set b1='NOHATEZUVX2' where id=4; -update noar ti set b1='NOHATEZUVX2' where id=4; -update noar tt set v0='YUTNSR98UNZGOAS6LYQBP6VTYA' where id=4; -update noar ti set v0='YUTNSR98UNZGOAS6LYQBP6VTYA' where id=4; -update noar tt set b2='PB7A0O461PKE09FBUX7VLKV5S' where id=4; -update noar ti set b2='PB7A0O461PKE09FBUX7VLKV5S' where id=4; -update noar tt set v0='DQ8JHMJA1Q92UP2RGKK' where id=5; -update noar ti set v0='DQ8JHMJA1Q92UP2RGKK' where id=5; -update noar tt set b0='4M' where id=5; -update noar ti set b0='4M' where id=5; -update noar tt set v0='8Z8Z3DHLV12ZSX3NZ53V4QR1' where id=5; -update noar ti set v0='8Z8Z3DHLV12ZSX3NZ53V4QR1' where id=5; -update noar tt set b1='LH1T9F0TYH1981IBHULVYGV6R' where id=5; -update noar ti set b1='LH1T9F0TYH1981IBHULVYGV6R' where id=5; -update noar tt set v0='0ZMXLNHTH6O5IFQQ2IT2TI6D68JE98N' where id=5; -update noar ti set v0='0ZMXLNHTH6O5IFQQ2IT2TI6D68JE98N' where id=5; -update noar tt set b2='6N9E9VM' where id=5; -update noar ti set b2='6N9E9VM' where id=5; -update noar tt set v0='RGQDJQDQQNSPD54T' where id=6; -update noar ti set v0='RGQDJQDQQNSPD54T' where id=6; -update noar tt set b0='B7H8NSGKTRQFO8TTARPWBZBSZO8FX' where id=6; -update noar ti set b0='B7H8NSGKTRQFO8TTARPWBZBSZO8FX' where id=6; -update noar tt set v0='CVQCEWUR8Q' where id=6; -update noar ti set v0='CVQCEWUR8Q' where id=6; -update noar tt set b1='FBGCMN10QO8UTQ57B' where id=6; -update noar ti set b1='FBGCMN10QO8UTQ57B' where id=6; -update noar tt set v0='0NHRRNP8871XWIUFN6O8' where id=6; -update noar ti set v0='0NHRRNP8871XWIUFN6O8' where id=6; -update noar tt set b2='873A1S6GZTF7DM1AMWL4IO1' where id=6; -update noar ti set b2='873A1S6GZTF7DM1AMWL4IO1' where id=6; -update noar tt set v0='G' where id=7; -update noar ti set v0='G' where id=7; -update noar tt set b0='N1O1VD7TSEO7FBFU0A8BMR' where id=7; -update noar ti set b0='N1O1VD7TSEO7FBFU0A8BMR' where id=7; -update noar tt set v0='K26RTCEEW232CNC1LCF' where id=7; -update noar ti set v0='K26RTCEEW232CNC1LCF' where id=7; -update noar tt set b1='OJ958LZXQBJE' where id=7; -update noar ti set b1='OJ958LZXQBJE' where id=7; -update noar tt set v0='VQENBRAW14TRVTWDRKTCJPDFHF9WR' where id=7; -update noar ti set v0='VQENBRAW14TRVTWDRKTCJPDFHF9WR' where id=7; -update noar tt set b2='XDXFWAMMW1N0EDXUE0BRSZ4A9H' where id=7; -update noar ti set b2='XDXFWAMMW1N0EDXUE0BRSZ4A9H' where id=7; -update noar tt set v0='OHDXG9X1939XN8N58FTY' where id=8; -update noar ti set v0='OHDXG9X1939XN8N58FTY' where id=8; -update noar tt set b0='HERZ4IDVYX1AUISAYM1RY9H' where id=8; -update noar ti set b0='HERZ4IDVYX1AUISAYM1RY9H' where id=8; -update noar tt set v0='GPTY' where id=8; -update noar ti set v0='GPTY' where id=8; -update noar tt set b1='UWKAEB9VVHHPZL19IEJLH8NLB2N' where id=8; -update noar ti set b1='UWKAEB9VVHHPZL19IEJLH8NLB2N' where id=8; -update noar tt set v0='MN43PPLPU4L1DW0XDD57PCZGCD5' where id=8; -update noar ti set v0='MN43PPLPU4L1DW0XDD57PCZGCD5' where id=8; -update noar tt set b2='71CF20NDNO6' where id=8; -update noar ti set b2='71CF20NDNO6' where id=8; -update noar tt set v0='AAREJYJ9MHK2SZHPOJVU441RTJSVS' where id=9; -update noar ti set v0='AAREJYJ9MHK2SZHPOJVU441RTJSVS' where id=9; -update noar tt set b0='7F02' where id=9; -update noar ti set b0='7F02' where id=9; -update noar tt set v0='R793TUXUT3LYE6K4IT2' where id=9; -update noar ti set v0='R793TUXUT3LYE6K4IT2' where id=9; -update noar tt set b1='Q6SHP1' where id=9; -update noar ti set b1='Q6SHP1' where id=9; -update noar tt set v0='83GNXN' where id=9; -update noar ti set v0='83GNXN' where id=9; -update noar tt set b2='PTP1DRZJNC8WDHHV' where id=9; -update noar ti set b2='PTP1DRZJNC8WDHHV' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 blob not null, - b1 tinyblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='XU3QDNUUUED' where id=1; -update noar ti set v0='XU3QDNUUUED' where id=1; -update noar tt set b0='R73YA41CB6Q3NWOD8VO6S41J0HOADE' where id=1; -update noar ti set b0='R73YA41CB6Q3NWOD8VO6S41J0HOADE' where id=1; -update noar tt set v0='6EGUYIRRDCY' where id=1; -update noar ti set v0='6EGUYIRRDCY' where id=1; -update noar tt set b1='W4KU6SKBEYCGS9B79QJA0NCMFC3J0R' where id=1; -update noar ti set b1='W4KU6SKBEYCGS9B79QJA0NCMFC3J0R' where id=1; -update noar tt set v0='5350D8R3HRWZVKXMPJASPZ0K2EMD' where id=1; -update noar ti set v0='5350D8R3HRWZVKXMPJASPZ0K2EMD' where id=1; -update noar tt set b2='QUJCA01C2SQPDX' where id=1; -update noar ti set b2='QUJCA01C2SQPDX' where id=1; -update noar tt set v0='A82OPJ5V' where id=2; -update noar ti set v0='A82OPJ5V' where id=2; -update noar tt set b0='XIC2HT6THN' where id=2; -update noar ti set b0='XIC2HT6THN' where id=2; -update noar tt set v0='7O4EN4FU5RZ8YWT1ME7S5945RVIRN6' where id=2; -update noar ti set v0='7O4EN4FU5RZ8YWT1ME7S5945RVIRN6' where id=2; -update noar tt set b1='EVFJ1I80W2JDCBJBSBU90AUDNYOMO8' where id=2; -update noar ti set b1='EVFJ1I80W2JDCBJBSBU90AUDNYOMO8' where id=2; -update noar tt set v0='YST3X32WY2' where id=2; -update noar ti set v0='YST3X32WY2' where id=2; -update noar tt set b2='21ZSBY2DSKWOBE769' where id=2; -update noar ti set b2='21ZSBY2DSKWOBE769' where id=2; -update noar tt set v0='Z01M18FDI9H7PSPC4J02SEU2' where id=3; -update noar ti set v0='Z01M18FDI9H7PSPC4J02SEU2' where id=3; -update noar tt set b0='AJ' where id=3; -update noar ti set b0='AJ' where id=3; -update noar tt set v0='P1BTN3GPCLHVJQTGF01FBMA7' where id=3; -update noar ti set v0='P1BTN3GPCLHVJQTGF01FBMA7' where id=3; -update noar tt set b1='WC' where id=3; -update noar ti set b1='WC' where id=3; -update noar tt set v0='KZSJK1SP32NJS92AQ6XDYUI98X' where id=3; -update noar ti set v0='KZSJK1SP32NJS92AQ6XDYUI98X' where id=3; -update noar tt set b2='MSCU2' where id=3; -update noar ti set b2='MSCU2' where id=3; -update noar tt set v0='53W36QISMKU30PH47X0WOS91ZQ4' where id=4; -update noar ti set v0='53W36QISMKU30PH47X0WOS91ZQ4' where id=4; -update noar tt set b0='ICK01X4ZUCAWWND0Q9' where id=4; -update noar ti set b0='ICK01X4ZUCAWWND0Q9' where id=4; -update noar tt set v0='BBB7CY7USQ2LPT' where id=4; -update noar ti set v0='BBB7CY7USQ2LPT' where id=4; -update noar tt set b1='ZF08YH17VUV2' where id=4; -update noar ti set b1='ZF08YH17VUV2' where id=4; -update noar tt set v0='XKR42V' where id=4; -update noar ti set v0='XKR42V' where id=4; -update noar tt set b2='L9IH6' where id=4; -update noar ti set b2='L9IH6' where id=4; -update noar tt set v0='JW2YNWMTYIZATD4NT3SNWA' where id=5; -update noar ti set v0='JW2YNWMTYIZATD4NT3SNWA' where id=5; -update noar tt set b0='7LSOLBM4WI0430159H9JNNUY6UEK835' where id=5; -update noar ti set b0='7LSOLBM4WI0430159H9JNNUY6UEK835' where id=5; -update noar tt set v0='EEAQ9T7XGQGVOY5BJA51' where id=5; -update noar ti set v0='EEAQ9T7XGQGVOY5BJA51' where id=5; -update noar tt set b1='NFIU62OLJ8' where id=5; -update noar ti set b1='NFIU62OLJ8' where id=5; -update noar tt set v0='PW7ICJ9WMEFTB' where id=5; -update noar ti set v0='PW7ICJ9WMEFTB' where id=5; -update noar tt set b2='SG' where id=5; -update noar ti set b2='SG' where id=5; -update noar tt set v0='0PIHZIB3NA2' where id=6; -update noar ti set v0='0PIHZIB3NA2' where id=6; -update noar tt set b0='K2UAETCYF1ZRIUPZWVQ32PNJI' where id=6; -update noar ti set b0='K2UAETCYF1ZRIUPZWVQ32PNJI' where id=6; -update noar tt set v0='BZN443Y8DYHEXBAF2CSRMQWA7NKSXP5I' where id=6; -update noar ti set v0='BZN443Y8DYHEXBAF2CSRMQWA7NKSXP5I' where id=6; -update noar tt set b1='P29U6MKFISL0V85A' where id=6; -update noar ti set b1='P29U6MKFISL0V85A' where id=6; -update noar tt set v0='SSN71F3DAI43QO9K0KWI7ATM4J6' where id=6; -update noar ti set v0='SSN71F3DAI43QO9K0KWI7ATM4J6' where id=6; -update noar tt set b2='ZPTXO' where id=6; -update noar ti set b2='ZPTXO' where id=6; -update noar tt set v0='O6EU2NH9XCIQ20QL3Q0Y202MGFT4YP' where id=7; -update noar ti set v0='O6EU2NH9XCIQ20QL3Q0Y202MGFT4YP' where id=7; -update noar tt set b0='QA366PO6IU82995G00G8D2FX2' where id=7; -update noar ti set b0='QA366PO6IU82995G00G8D2FX2' where id=7; -update noar tt set v0='JMWC9IKLD2AXMNG46HWMJRRK8Y65' where id=7; -update noar ti set v0='JMWC9IKLD2AXMNG46HWMJRRK8Y65' where id=7; -update noar tt set b1='T587BFDUBC6733FBGOG14V' where id=7; -update noar ti set b1='T587BFDUBC6733FBGOG14V' where id=7; -update noar tt set v0='QYK' where id=7; -update noar ti set v0='QYK' where id=7; -update noar tt set b2='U2XOEI4UXQWVPBKMUP82QNZWJLWTN' where id=7; -update noar ti set b2='U2XOEI4UXQWVPBKMUP82QNZWJLWTN' where id=7; -update noar tt set v0='OAUT3IRL' where id=8; -update noar ti set v0='OAUT3IRL' where id=8; -update noar tt set b0='IGDJMCOAV6P1D6JPRLGIHZQ5HIN' where id=8; -update noar ti set b0='IGDJMCOAV6P1D6JPRLGIHZQ5HIN' where id=8; -update noar tt set v0='GERZLX365' where id=8; -update noar ti set v0='GERZLX365' where id=8; -update noar tt set b1='91J5U2MFCRY5A20RSK9' where id=8; -update noar ti set b1='91J5U2MFCRY5A20RSK9' where id=8; -update noar tt set v0='FD6O2TEKP3FB' where id=8; -update noar ti set v0='FD6O2TEKP3FB' where id=8; -update noar tt set b2='UHQK78WYR0FNFGN16IG05DGHMIJ7IQ' where id=8; -update noar ti set b2='UHQK78WYR0FNFGN16IG05DGHMIJ7IQ' where id=8; -update noar tt set v0='U5EXFWMFLW6YQU8SJZ' where id=9; -update noar ti set v0='U5EXFWMFLW6YQU8SJZ' where id=9; -update noar tt set b0='7X8L3B58A7DFNOLF2BTTCCMGHYLFXA' where id=9; -update noar ti set b0='7X8L3B58A7DFNOLF2BTTCCMGHYLFXA' where id=9; -update noar tt set v0='OIH4JC' where id=9; -update noar ti set v0='OIH4JC' where id=9; -update noar tt set b1='X5TK2Z5Q3WPV7B' where id=9; -update noar ti set b1='X5TK2Z5Q3WPV7B' where id=9; -update noar tt set v0='O32I0SKW7G8HJ89FSM9W' where id=9; -update noar ti set v0='O32I0SKW7G8HJ89FSM9W' where id=9; -update noar tt set b2='Q' where id=9; -update noar ti set b2='Q' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 blob not null, - b1 tinyblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='A' where id=1; -update noar ti set v0='A' where id=1; -update noar tt set b0='V' where id=1; -update noar ti set b0='V' where id=1; -update noar tt set v0='NDHFNZVNZER0' where id=1; -update noar ti set v0='NDHFNZVNZER0' where id=1; -update noar tt set b1='XOF1T71SN19LPLUUMR8T0V' where id=1; -update noar ti set b1='XOF1T71SN19LPLUUMR8T0V' where id=1; -update noar tt set v0='XGDTM4ULG' where id=1; -update noar ti set v0='XGDTM4ULG' where id=1; -update noar tt set b2='BVPJMZ79OE0VLR0POPJF2COL' where id=1; -update noar ti set b2='BVPJMZ79OE0VLR0POPJF2COL' where id=1; -update noar tt set v0='TDQCD51C6LS50PCSS19' where id=2; -update noar ti set v0='TDQCD51C6LS50PCSS19' where id=2; -update noar tt set b0='2JLOMEVP50CSX5P' where id=2; -update noar ti set b0='2JLOMEVP50CSX5P' where id=2; -update noar tt set v0='W92IZ6W4ZX03GU7HB' where id=2; -update noar ti set v0='W92IZ6W4ZX03GU7HB' where id=2; -update noar tt set b1='NZOFN0P3ANMC9CCNGXYDAMGZIRQ6E' where id=2; -update noar ti set b1='NZOFN0P3ANMC9CCNGXYDAMGZIRQ6E' where id=2; -update noar tt set v0='QK71N118' where id=2; -update noar ti set v0='QK71N118' where id=2; -update noar tt set b2='9218G' where id=2; -update noar ti set b2='9218G' where id=2; -update noar tt set v0='2X' where id=3; -update noar ti set v0='2X' where id=3; -update noar tt set b0='EFN3UHPG090PAMQD5' where id=3; -update noar ti set b0='EFN3UHPG090PAMQD5' where id=3; -update noar tt set v0='U8G0BWY9N83YVKBSHPFRETDNZH9W' where id=3; -update noar ti set v0='U8G0BWY9N83YVKBSHPFRETDNZH9W' where id=3; -update noar tt set b1='U2XEAPDE54CJZCLJL' where id=3; -update noar ti set b1='U2XEAPDE54CJZCLJL' where id=3; -update noar tt set v0='NC4SXFI7MI83I2LTAZ5XZ32VG545V' where id=3; -update noar ti set v0='NC4SXFI7MI83I2LTAZ5XZ32VG545V' where id=3; -update noar tt set b2='JK' where id=3; -update noar ti set b2='JK' where id=3; -update noar tt set v0='RSWUAHUL6' where id=4; -update noar ti set v0='RSWUAHUL6' where id=4; -update noar tt set b0='GRQKU46EDTIGMF' where id=4; -update noar ti set b0='GRQKU46EDTIGMF' where id=4; -update noar tt set v0='BT' where id=4; -update noar ti set v0='BT' where id=4; -update noar tt set b1='X71JQGKDDFX3489U9T7B' where id=4; -update noar ti set b1='X71JQGKDDFX3489U9T7B' where id=4; -update noar tt set v0='57E93K20CL0OC9F1LQI986I' where id=4; -update noar ti set v0='57E93K20CL0OC9F1LQI986I' where id=4; -update noar tt set b2='QF2YZSKIT5YQYRPZ7AAEQGT5T5K2' where id=4; -update noar ti set b2='QF2YZSKIT5YQYRPZ7AAEQGT5T5K2' where id=4; -update noar tt set v0='932WM7HPL6Y2W0DEFD1B' where id=5; -update noar ti set v0='932WM7HPL6Y2W0DEFD1B' where id=5; -update noar tt set b0='3OO66UPVGB3GCD0' where id=5; -update noar ti set b0='3OO66UPVGB3GCD0' where id=5; -update noar tt set v0='82GEP0KY' where id=5; -update noar ti set v0='82GEP0KY' where id=5; -update noar tt set b1='XCZ91DUJ1SATYGR' where id=5; -update noar ti set b1='XCZ91DUJ1SATYGR' where id=5; -update noar tt set v0='J2CZMCT9SRK00YTGWB5P80X' where id=5; -update noar ti set v0='J2CZMCT9SRK00YTGWB5P80X' where id=5; -update noar tt set b2='F8' where id=5; -update noar ti set b2='F8' where id=5; -update noar tt set v0='79TZSK6QXT5QR9F9HN5FRJF1KK8FZY' where id=6; -update noar ti set v0='79TZSK6QXT5QR9F9HN5FRJF1KK8FZY' where id=6; -update noar tt set b0='HMLMF01XNW' where id=6; -update noar ti set b0='HMLMF01XNW' where id=6; -update noar tt set v0='1MKBV34P1BZHNYC20IAISEAZISU' where id=6; -update noar ti set v0='1MKBV34P1BZHNYC20IAISEAZISU' where id=6; -update noar tt set b1='V6Y1597M85UVADSRV' where id=6; -update noar ti set b1='V6Y1597M85UVADSRV' where id=6; -update noar tt set v0='01VB5IWSED' where id=6; -update noar ti set v0='01VB5IWSED' where id=6; -update noar tt set b2='N2WIMKTUKTN96Y' where id=6; -update noar ti set b2='N2WIMKTUKTN96Y' where id=6; -update noar tt set v0='XSFVFOXMR0VTGRXDFSB86CA9HXJTIY7G' where id=7; -update noar ti set v0='XSFVFOXMR0VTGRXDFSB86CA9HXJTIY7G' where id=7; -update noar tt set b0='TLT3' where id=7; -update noar ti set b0='TLT3' where id=7; -update noar tt set v0='96XRMMICUZOBMTW' where id=7; -update noar ti set v0='96XRMMICUZOBMTW' where id=7; -update noar tt set b1='LATU82IPCM65NU120CYY4EJTE2NEGF7L' where id=7; -update noar ti set b1='LATU82IPCM65NU120CYY4EJTE2NEGF7L' where id=7; -update noar tt set v0='HK' where id=7; -update noar ti set v0='HK' where id=7; -update noar tt set b2='F3VYTPKOVD' where id=7; -update noar ti set b2='F3VYTPKOVD' where id=7; -update noar tt set v0='KJBME3Y' where id=8; -update noar ti set v0='KJBME3Y' where id=8; -update noar tt set b0='9X3KW0PCRE545LOCATN70FKIZF' where id=8; -update noar ti set b0='9X3KW0PCRE545LOCATN70FKIZF' where id=8; -update noar tt set v0='2JS7M6NW4A' where id=8; -update noar ti set v0='2JS7M6NW4A' where id=8; -update noar tt set b1='ZEO1PV008CN91AIDPTYJHIY18X961L0' where id=8; -update noar ti set b1='ZEO1PV008CN91AIDPTYJHIY18X961L0' where id=8; -update noar tt set v0='B' where id=8; -update noar ti set v0='B' where id=8; -update noar tt set b2='8HQEAXOZ1A80P0G7A9SP5MQAUZT2KXI' where id=8; -update noar ti set b2='8HQEAXOZ1A80P0G7A9SP5MQAUZT2KXI' where id=8; -update noar tt set v0='TB71OWDBCDPM8021R' where id=9; -update noar ti set v0='TB71OWDBCDPM8021R' where id=9; -update noar tt set b0='9W71QX99B' where id=9; -update noar ti set b0='9W71QX99B' where id=9; -update noar tt set v0='NORAZPZ6K8L5RBX4L0ZELX8' where id=9; -update noar ti set v0='NORAZPZ6K8L5RBX4L0ZELX8' where id=9; -update noar tt set b1='V8ULB' where id=9; -update noar ti set b1='V8ULB' where id=9; -update noar tt set v0='YH' where id=9; -update noar ti set v0='YH' where id=9; -update noar tt set b2='33XO87DZ48YNP1FGU0B9N06' where id=9; -update noar ti set b2='33XO87DZ48YNP1FGU0B9N06' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 blob null, - b1 tinyblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='LIO' where id=1; -update noar ti set v0='LIO' where id=1; -update noar tt set b0='Y3G6XG4' where id=1; -update noar ti set b0='Y3G6XG4' where id=1; -update noar tt set v0='F1TTLJHRNTKD11T0X' where id=1; -update noar ti set v0='F1TTLJHRNTKD11T0X' where id=1; -update noar tt set b1='BQUA0FE5BZH9ID18986P' where id=1; -update noar ti set b1='BQUA0FE5BZH9ID18986P' where id=1; -update noar tt set v0='UNNX6JFFSSHUMN' where id=1; -update noar ti set v0='UNNX6JFFSSHUMN' where id=1; -update noar tt set b2='P' where id=1; -update noar ti set b2='P' where id=1; -update noar tt set v0='DDU4IIUFEABM7KXK2O7THELM' where id=2; -update noar ti set v0='DDU4IIUFEABM7KXK2O7THELM' where id=2; -update noar tt set b0='RTSYOKZYRMV' where id=2; -update noar ti set b0='RTSYOKZYRMV' where id=2; -update noar tt set v0='05I0' where id=2; -update noar ti set v0='05I0' where id=2; -update noar tt set b1='N9J0WU24H943KVVVX' where id=2; -update noar ti set b1='N9J0WU24H943KVVVX' where id=2; -update noar tt set v0='DJU70IQUL6D3K' where id=2; -update noar ti set v0='DJU70IQUL6D3K' where id=2; -update noar tt set b2='BHRWFKXZXV6I7F2BIVQ2M0JW1NX' where id=2; -update noar ti set b2='BHRWFKXZXV6I7F2BIVQ2M0JW1NX' where id=2; -update noar tt set v0='7FUQOVDRP8Q2N5RWI3J9M' where id=3; -update noar ti set v0='7FUQOVDRP8Q2N5RWI3J9M' where id=3; -update noar tt set b0='J8E157H7I00UPVKWCDDXC9O6F96P8D' where id=3; -update noar ti set b0='J8E157H7I00UPVKWCDDXC9O6F96P8D' where id=3; -update noar tt set v0='OMFW2X6OPA63M2MDH0' where id=3; -update noar ti set v0='OMFW2X6OPA63M2MDH0' where id=3; -update noar tt set b1='DYCORSVKDBSIODO' where id=3; -update noar ti set b1='DYCORSVKDBSIODO' where id=3; -update noar tt set v0='00I4XWBVVX3XQ93UAIZ9DXR6YB' where id=3; -update noar ti set v0='00I4XWBVVX3XQ93UAIZ9DXR6YB' where id=3; -update noar tt set b2='YLKWWFI0LSXIRPY' where id=3; -update noar ti set b2='YLKWWFI0LSXIRPY' where id=3; -update noar tt set v0='S4AD6GZOPINU' where id=4; -update noar ti set v0='S4AD6GZOPINU' where id=4; -update noar tt set b0='HKWF6Q5' where id=4; -update noar ti set b0='HKWF6Q5' where id=4; -update noar tt set v0='MN4MZABRRR' where id=4; -update noar ti set v0='MN4MZABRRR' where id=4; -update noar tt set b1='JBG3CX7QIJPG8E4WKOP' where id=4; -update noar ti set b1='JBG3CX7QIJPG8E4WKOP' where id=4; -update noar tt set v0='XV0D7BVKE5PN60PI' where id=4; -update noar ti set v0='XV0D7BVKE5PN60PI' where id=4; -update noar tt set b2='LU' where id=4; -update noar ti set b2='LU' where id=4; -update noar tt set v0='QTRCD6W428RS51AGQDDGK' where id=5; -update noar ti set v0='QTRCD6W428RS51AGQDDGK' where id=5; -update noar tt set b0='9RGU7ICDRQ2BPIGU8' where id=5; -update noar ti set b0='9RGU7ICDRQ2BPIGU8' where id=5; -update noar tt set v0='5CDTGIYK' where id=5; -update noar ti set v0='5CDTGIYK' where id=5; -update noar tt set b1='5DVYO1HEEX3B54I295752L7SG1QO' where id=5; -update noar ti set b1='5DVYO1HEEX3B54I295752L7SG1QO' where id=5; -update noar tt set v0='D4' where id=5; -update noar ti set v0='D4' where id=5; -update noar tt set b2='15D3YAD6XZ' where id=5; -update noar ti set b2='15D3YAD6XZ' where id=5; -update noar tt set v0='1AM2CE6P2QXNZH4KYJM' where id=6; -update noar ti set v0='1AM2CE6P2QXNZH4KYJM' where id=6; -update noar tt set b0='ECB6UMTQGFI97J2OXIE1TVLVYH' where id=6; -update noar ti set b0='ECB6UMTQGFI97J2OXIE1TVLVYH' where id=6; -update noar tt set v0='N7LF7GMG3VBGB0ECODQZGHQU3J3MF9G' where id=6; -update noar ti set v0='N7LF7GMG3VBGB0ECODQZGHQU3J3MF9G' where id=6; -update noar tt set b1='MR74EBF' where id=6; -update noar ti set b1='MR74EBF' where id=6; -update noar tt set v0='IFAJQOVRP3UB0MN65BFZTKI00I1CQ' where id=6; -update noar ti set v0='IFAJQOVRP3UB0MN65BFZTKI00I1CQ' where id=6; -update noar tt set b2='4I5O1UF4P' where id=6; -update noar ti set b2='4I5O1UF4P' where id=6; -update noar tt set v0='JH2BE3I4EJ8038XQKYYUHXKRRZ6' where id=7; -update noar ti set v0='JH2BE3I4EJ8038XQKYYUHXKRRZ6' where id=7; -update noar tt set b0='WVRKN6KQI81P' where id=7; -update noar ti set b0='WVRKN6KQI81P' where id=7; -update noar tt set v0='9YCQ5SM8UGLDKJT109L' where id=7; -update noar ti set v0='9YCQ5SM8UGLDKJT109L' where id=7; -update noar tt set b1='6JU7I4A0CL' where id=7; -update noar ti set b1='6JU7I4A0CL' where id=7; -update noar tt set v0='JKGCOF73Z91ZW7TKRAE' where id=7; -update noar ti set v0='JKGCOF73Z91ZW7TKRAE' where id=7; -update noar tt set b2='U38TDJVLX2VBFCDH80DW' where id=7; -update noar ti set b2='U38TDJVLX2VBFCDH80DW' where id=7; -update noar tt set v0='65KD4FMW1IZUAPJ5O4Y1HUZRQC' where id=8; -update noar ti set v0='65KD4FMW1IZUAPJ5O4Y1HUZRQC' where id=8; -update noar tt set b0='C8V604PVVWW98W50X7R' where id=8; -update noar ti set b0='C8V604PVVWW98W50X7R' where id=8; -update noar tt set v0='Q8A1HTG' where id=8; -update noar ti set v0='Q8A1HTG' where id=8; -update noar tt set b1='8J0PJKK2' where id=8; -update noar ti set b1='8J0PJKK2' where id=8; -update noar tt set v0='83TXLAE0BLSTDEMYA7NI' where id=8; -update noar ti set v0='83TXLAE0BLSTDEMYA7NI' where id=8; -update noar tt set b2='3YOQ' where id=8; -update noar ti set b2='3YOQ' where id=8; -update noar tt set v0='3UBHD4NN1UOAXGBLEID' where id=9; -update noar ti set v0='3UBHD4NN1UOAXGBLEID' where id=9; -update noar tt set b0='34E5ENE2UY9TG0L4BL18O5' where id=9; -update noar ti set b0='34E5ENE2UY9TG0L4BL18O5' where id=9; -update noar tt set v0='PY80H4WWA' where id=9; -update noar ti set v0='PY80H4WWA' where id=9; -update noar tt set b1='WNEKC3QIXU2AR8HAD4KDQYSTU' where id=9; -update noar ti set b1='WNEKC3QIXU2AR8HAD4KDQYSTU' where id=9; -update noar tt set v0='7YBMM6TTD0PU087URN' where id=9; -update noar ti set v0='7YBMM6TTD0PU087URN' where id=9; -update noar tt set b2='W932B20IVW48' where id=9; -update noar ti set b2='W932B20IVW48' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 blob null, - b1 tinyblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='66P36' where id=1; -update noar ti set v0='66P36' where id=1; -update noar tt set b0='MCD37D1R1KER146C' where id=1; -update noar ti set b0='MCD37D1R1KER146C' where id=1; -update noar tt set v0='I1ISD5FF2SRZD6DU8TE72' where id=1; -update noar ti set v0='I1ISD5FF2SRZD6DU8TE72' where id=1; -update noar tt set b1='FOKH5RXCGIDV5' where id=1; -update noar ti set b1='FOKH5RXCGIDV5' where id=1; -update noar tt set v0='JR2Z4Z1YY5NK7G83OCS2BAL37LAJ5TY' where id=1; -update noar ti set v0='JR2Z4Z1YY5NK7G83OCS2BAL37LAJ5TY' where id=1; -update noar tt set b2='8L971501K5EMR3N9N2' where id=1; -update noar ti set b2='8L971501K5EMR3N9N2' where id=1; -update noar tt set v0='DISLIWXU9O2NU5UKD8NF0OIKTNOCN3YF' where id=2; -update noar ti set v0='DISLIWXU9O2NU5UKD8NF0OIKTNOCN3YF' where id=2; -update noar tt set b0='GH' where id=2; -update noar ti set b0='GH' where id=2; -update noar tt set v0='I573FM2MUXCQDSQ6QVCRO1OW2B6BKOT' where id=2; -update noar ti set v0='I573FM2MUXCQDSQ6QVCRO1OW2B6BKOT' where id=2; -update noar tt set b1='883WS4IM7LG1ORUSVV4ATO4CQY71AS' where id=2; -update noar ti set b1='883WS4IM7LG1ORUSVV4ATO4CQY71AS' where id=2; -update noar tt set v0='9BLVXWR70TQ77GBR3357PPS' where id=2; -update noar ti set v0='9BLVXWR70TQ77GBR3357PPS' where id=2; -update noar tt set b2='KAK2QFV8AC9JMZ' where id=2; -update noar ti set b2='KAK2QFV8AC9JMZ' where id=2; -update noar tt set v0='0JAJ10RDO3E' where id=3; -update noar ti set v0='0JAJ10RDO3E' where id=3; -update noar tt set b0='9E6SCXIE51YLGRTB6885W' where id=3; -update noar ti set b0='9E6SCXIE51YLGRTB6885W' where id=3; -update noar tt set v0='XD7' where id=3; -update noar ti set v0='XD7' where id=3; -update noar tt set b1='S1Y2CUR7KXKEC60B' where id=3; -update noar ti set b1='S1Y2CUR7KXKEC60B' where id=3; -update noar tt set v0='KVH56ZNR' where id=3; -update noar ti set v0='KVH56ZNR' where id=3; -update noar tt set b2='L71GF9OKU' where id=3; -update noar ti set b2='L71GF9OKU' where id=3; -update noar tt set v0='8CHNTTOU24ZSWWVCY1A4ADB6ST4QBRX' where id=4; -update noar ti set v0='8CHNTTOU24ZSWWVCY1A4ADB6ST4QBRX' where id=4; -update noar tt set b0='HXAM9OKSZ690M7NTC162' where id=4; -update noar ti set b0='HXAM9OKSZ690M7NTC162' where id=4; -update noar tt set v0='NEJHHDD' where id=4; -update noar ti set v0='NEJHHDD' where id=4; -update noar tt set b1='A568QPAT4XAYNCHP5W7' where id=4; -update noar ti set b1='A568QPAT4XAYNCHP5W7' where id=4; -update noar tt set v0='1FV1' where id=4; -update noar ti set v0='1FV1' where id=4; -update noar tt set b2='L8B6XD4ZBI8YW47WN' where id=4; -update noar ti set b2='L8B6XD4ZBI8YW47WN' where id=4; -update noar tt set v0='KNWS76FFVLNES5QW0FXGCRGZ7G4' where id=5; -update noar ti set v0='KNWS76FFVLNES5QW0FXGCRGZ7G4' where id=5; -update noar tt set b0='YODXM2TJPBSKRA42DJ0N03' where id=5; -update noar ti set b0='YODXM2TJPBSKRA42DJ0N03' where id=5; -update noar tt set v0='SMNSDK41XML66DA4ZVP2R' where id=5; -update noar ti set v0='SMNSDK41XML66DA4ZVP2R' where id=5; -update noar tt set b1='3O8MPVDHCE9RQ7LND2BLJQ2' where id=5; -update noar ti set b1='3O8MPVDHCE9RQ7LND2BLJQ2' where id=5; -update noar tt set v0='JPNFEYTXVCK8SEKUNOBDRQLYZNOZW5PJ' where id=5; -update noar ti set v0='JPNFEYTXVCK8SEKUNOBDRQLYZNOZW5PJ' where id=5; -update noar tt set b2='7TPAJV1I56NEUEEMUCY' where id=5; -update noar ti set b2='7TPAJV1I56NEUEEMUCY' where id=5; -update noar tt set v0='XIM' where id=6; -update noar ti set v0='XIM' where id=6; -update noar tt set b0='6PQ3OFLL3NQE3F1Y' where id=6; -update noar ti set b0='6PQ3OFLL3NQE3F1Y' where id=6; -update noar tt set v0='10ZGXC9H13O30CX' where id=6; -update noar ti set v0='10ZGXC9H13O30CX' where id=6; -update noar tt set b1='76GNA8DZML' where id=6; -update noar ti set b1='76GNA8DZML' where id=6; -update noar tt set v0='O8THJC8LA2ZLU3FSFXU0T8FRBMQ75C1' where id=6; -update noar ti set v0='O8THJC8LA2ZLU3FSFXU0T8FRBMQ75C1' where id=6; -update noar tt set b2='MNWHHPLF0V3W4' where id=6; -update noar ti set b2='MNWHHPLF0V3W4' where id=6; -update noar tt set v0='2NHJWSU' where id=7; -update noar ti set v0='2NHJWSU' where id=7; -update noar tt set b0='CMLY7L9B01Y1PLEA07BBCFVQ0' where id=7; -update noar ti set b0='CMLY7L9B01Y1PLEA07BBCFVQ0' where id=7; -update noar tt set v0='0MWVFT8GACPKZ2ULEACPM' where id=7; -update noar ti set v0='0MWVFT8GACPKZ2ULEACPM' where id=7; -update noar tt set b1='X72JXX5TYVRB4VQUO28S7Z3RUK3T' where id=7; -update noar ti set b1='X72JXX5TYVRB4VQUO28S7Z3RUK3T' where id=7; -update noar tt set v0='MMB7WITNIC' where id=7; -update noar ti set v0='MMB7WITNIC' where id=7; -update noar tt set b2='ELP5PQ38R336W' where id=7; -update noar ti set b2='ELP5PQ38R336W' where id=7; -update noar tt set v0='4IJA' where id=8; -update noar ti set v0='4IJA' where id=8; -update noar tt set b0='A34SH83OUHG3PTEZPCLIHGV0I4F9MXU' where id=8; -update noar ti set b0='A34SH83OUHG3PTEZPCLIHGV0I4F9MXU' where id=8; -update noar tt set v0='9Q2IWCJFJ5PGMQ5DOA9NEJWZBX4' where id=8; -update noar ti set v0='9Q2IWCJFJ5PGMQ5DOA9NEJWZBX4' where id=8; -update noar tt set b1='GLZFTYYCMUI' where id=8; -update noar ti set b1='GLZFTYYCMUI' where id=8; -update noar tt set v0='VHW' where id=8; -update noar ti set v0='VHW' where id=8; -update noar tt set b2='205J91153H2NOGTNW' where id=8; -update noar ti set b2='205J91153H2NOGTNW' where id=8; -update noar tt set v0='XCN' where id=9; -update noar ti set v0='XCN' where id=9; -update noar tt set b0='N36OMXEDRSW' where id=9; -update noar ti set b0='N36OMXEDRSW' where id=9; -update noar tt set v0='P8MQYP05GOWEDGV8AP09ROAHWX' where id=9; -update noar ti set v0='P8MQYP05GOWEDGV8AP09ROAHWX' where id=9; -update noar tt set b1='ODBZE0PZXQF' where id=9; -update noar ti set b1='ODBZE0PZXQF' where id=9; -update noar tt set v0='ZB2EHYQ7ISRFNGJZUUYBNRN1SS7CT0L' where id=9; -update noar ti set v0='ZB2EHYQ7ISRFNGJZUUYBNRN1SS7CT0L' where id=9; -update noar tt set b2='H559PD' where id=9; -update noar ti set b2='H559PD' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 blob not null, - b1 tinyblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='WR7DJFSN5UGF203' where id=1; -update noar ti set v0='WR7DJFSN5UGF203' where id=1; -update noar tt set b0='EV' where id=1; -update noar ti set b0='EV' where id=1; -update noar tt set v0='1VUUO1B6L357Z' where id=1; -update noar ti set v0='1VUUO1B6L357Z' where id=1; -update noar tt set b1='22G3VQTOGKVMEE753PIYJ7DY' where id=1; -update noar ti set b1='22G3VQTOGKVMEE753PIYJ7DY' where id=1; -update noar tt set v0='QCDDPRM3' where id=1; -update noar ti set v0='QCDDPRM3' where id=1; -update noar tt set b2='RK57SA2IS9ROA7EYOO4' where id=1; -update noar ti set b2='RK57SA2IS9ROA7EYOO4' where id=1; -update noar tt set v0='H3AEEE8CSC' where id=2; -update noar ti set v0='H3AEEE8CSC' where id=2; -update noar tt set b0='XLVMMDCHOJLG0QSONPSNJ' where id=2; -update noar ti set b0='XLVMMDCHOJLG0QSONPSNJ' where id=2; -update noar tt set v0='34MKP6XSBWURK3NRNFDW' where id=2; -update noar ti set v0='34MKP6XSBWURK3NRNFDW' where id=2; -update noar tt set b1='S0UFBA' where id=2; -update noar ti set b1='S0UFBA' where id=2; -update noar tt set v0='0PAUX919QJILAZ43L92TTE8CP436J3' where id=2; -update noar ti set v0='0PAUX919QJILAZ43L92TTE8CP436J3' where id=2; -update noar tt set b2='T7UBGMD4ITIEQKH8GL0' where id=2; -update noar ti set b2='T7UBGMD4ITIEQKH8GL0' where id=2; -update noar tt set v0='ONRJ4D5ZGSD' where id=3; -update noar ti set v0='ONRJ4D5ZGSD' where id=3; -update noar tt set b0='0ZIOOUCWDYWM' where id=3; -update noar ti set b0='0ZIOOUCWDYWM' where id=3; -update noar tt set v0='EHHKBBXXA4' where id=3; -update noar ti set v0='EHHKBBXXA4' where id=3; -update noar tt set b1='8' where id=3; -update noar ti set b1='8' where id=3; -update noar tt set v0='CO0509YW75U84YV4RIBP4L' where id=3; -update noar ti set v0='CO0509YW75U84YV4RIBP4L' where id=3; -update noar tt set b2='97' where id=3; -update noar ti set b2='97' where id=3; -update noar tt set v0='WYYMGD0YQH21QCRBWBI' where id=4; -update noar ti set v0='WYYMGD0YQH21QCRBWBI' where id=4; -update noar tt set b0='PQ3EH514' where id=4; -update noar ti set b0='PQ3EH514' where id=4; -update noar tt set v0='W' where id=4; -update noar ti set v0='W' where id=4; -update noar tt set b1='BJMRH8FHAL7B88BY' where id=4; -update noar ti set b1='BJMRH8FHAL7B88BY' where id=4; -update noar tt set v0='A3CGOLVBT0H0272NOKV7HW10N4HM' where id=4; -update noar ti set v0='A3CGOLVBT0H0272NOKV7HW10N4HM' where id=4; -update noar tt set b2='30R4CZ07A' where id=4; -update noar ti set b2='30R4CZ07A' where id=4; -update noar tt set v0='VCD3LXJNFBQICHQ651MMFRCJDMLSRYWP' where id=5; -update noar ti set v0='VCD3LXJNFBQICHQ651MMFRCJDMLSRYWP' where id=5; -update noar tt set b0='WUBK8N7CE9Y84LJU84GMYAA8YLRGQR' where id=5; -update noar ti set b0='WUBK8N7CE9Y84LJU84GMYAA8YLRGQR' where id=5; -update noar tt set v0='GAICEJEF1R5LATFGRMI1XWRJECCX8VT' where id=5; -update noar ti set v0='GAICEJEF1R5LATFGRMI1XWRJECCX8VT' where id=5; -update noar tt set b1='L2FAACS2R' where id=5; -update noar ti set b1='L2FAACS2R' where id=5; -update noar tt set v0='5S81UC' where id=5; -update noar ti set v0='5S81UC' where id=5; -update noar tt set b2='6ORJKA8QGG628JLM6WZ81FAD18RSD' where id=5; -update noar ti set b2='6ORJKA8QGG628JLM6WZ81FAD18RSD' where id=5; -update noar tt set v0='9UR7X6DBXII6M' where id=6; -update noar ti set v0='9UR7X6DBXII6M' where id=6; -update noar tt set b0='T47UURFHFDDERX9' where id=6; -update noar ti set b0='T47UURFHFDDERX9' where id=6; -update noar tt set v0='XRMBRITRHUPS1YCICHRE3BC' where id=6; -update noar ti set v0='XRMBRITRHUPS1YCICHRE3BC' where id=6; -update noar tt set b1='DXU1KCSMQH9MZ4X0GIH450NC25FYQ0A' where id=6; -update noar ti set b1='DXU1KCSMQH9MZ4X0GIH450NC25FYQ0A' where id=6; -update noar tt set v0='20B0YH1KL3' where id=6; -update noar ti set v0='20B0YH1KL3' where id=6; -update noar tt set b2='96Z4CVKLB839H7JG6OB29DMD04' where id=6; -update noar ti set b2='96Z4CVKLB839H7JG6OB29DMD04' where id=6; -update noar tt set v0='T' where id=7; -update noar ti set v0='T' where id=7; -update noar tt set b0='6T8DDEHYU' where id=7; -update noar ti set b0='6T8DDEHYU' where id=7; -update noar tt set v0='WZRBYQB' where id=7; -update noar ti set v0='WZRBYQB' where id=7; -update noar tt set b1='C121LRUJAW7' where id=7; -update noar ti set b1='C121LRUJAW7' where id=7; -update noar tt set v0='QSNGTU6KKSJOMJOLSLX5KN' where id=7; -update noar ti set v0='QSNGTU6KKSJOMJOLSLX5KN' where id=7; -update noar tt set b2='RNCBIAQCUBBVYHO1QZL' where id=7; -update noar ti set b2='RNCBIAQCUBBVYHO1QZL' where id=7; -update noar tt set v0='48DFTNYZ51EC5A0R8' where id=8; -update noar ti set v0='48DFTNYZ51EC5A0R8' where id=8; -update noar tt set b0='LTZXKAJS9UTIEX9BYWTLRX' where id=8; -update noar ti set b0='LTZXKAJS9UTIEX9BYWTLRX' where id=8; -update noar tt set v0='C3H6FBJTXH4NLPZXUC7G5QY' where id=8; -update noar ti set v0='C3H6FBJTXH4NLPZXUC7G5QY' where id=8; -update noar tt set b1='MB8O4XMG2XTZ0DP95NWOYE830J3D' where id=8; -update noar ti set b1='MB8O4XMG2XTZ0DP95NWOYE830J3D' where id=8; -update noar tt set v0='BBT67HO8JSHCQ45172V03ZDF876M840I' where id=8; -update noar ti set v0='BBT67HO8JSHCQ45172V03ZDF876M840I' where id=8; -update noar tt set b2='5JW4J6E89GQMJG1PVC714' where id=8; -update noar ti set b2='5JW4J6E89GQMJG1PVC714' where id=8; -update noar tt set v0='XA98R9ABPQEII01YDER24X230ZFOJ' where id=9; -update noar ti set v0='XA98R9ABPQEII01YDER24X230ZFOJ' where id=9; -update noar tt set b0='YW34M3XCXH1' where id=9; -update noar ti set b0='YW34M3XCXH1' where id=9; -update noar tt set v0='97K' where id=9; -update noar ti set v0='97K' where id=9; -update noar tt set b1='7TQBWK7AGI9GW19YJA8' where id=9; -update noar ti set b1='7TQBWK7AGI9GW19YJA8' where id=9; -update noar tt set v0='QVGTS6U49IC' where id=9; -update noar ti set v0='QVGTS6U49IC' where id=9; -update noar tt set b2='I2YICWKYUF6F4OYSC' where id=9; -update noar ti set b2='I2YICWKYUF6F4OYSC' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 blob not null, - b1 tinyblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='4BMPA0839HMTXAG9ME9' where id=1; -update noar ti set v0='4BMPA0839HMTXAG9ME9' where id=1; -update noar tt set b0='75NQQ2PEXW9GKWIFYX0RYSHU' where id=1; -update noar ti set b0='75NQQ2PEXW9GKWIFYX0RYSHU' where id=1; -update noar tt set v0='OAQU' where id=1; -update noar ti set v0='OAQU' where id=1; -update noar tt set b1='LL3RXSPP' where id=1; -update noar ti set b1='LL3RXSPP' where id=1; -update noar tt set v0='RY88YGHYMHYF09VQ5UL' where id=1; -update noar ti set v0='RY88YGHYMHYF09VQ5UL' where id=1; -update noar tt set b2='VK6LJ2Q4TJEDO5MYVQPS7OHPE4O9B' where id=1; -update noar ti set b2='VK6LJ2Q4TJEDO5MYVQPS7OHPE4O9B' where id=1; -update noar tt set v0='E8NIALN0VFSJ2BWQQOM' where id=2; -update noar ti set v0='E8NIALN0VFSJ2BWQQOM' where id=2; -update noar tt set b0='SXBENCGGQDZ7UOD' where id=2; -update noar ti set b0='SXBENCGGQDZ7UOD' where id=2; -update noar tt set v0='FJ4SZOOQR3ITVRGE389GON66U2P2' where id=2; -update noar ti set v0='FJ4SZOOQR3ITVRGE389GON66U2P2' where id=2; -update noar tt set b1='6W7JQI' where id=2; -update noar ti set b1='6W7JQI' where id=2; -update noar tt set v0='SBMKBU62US8JD' where id=2; -update noar ti set v0='SBMKBU62US8JD' where id=2; -update noar tt set b2='M1CJRQAM5A57BLVOQBAJLASOU8WN9QC2' where id=2; -update noar ti set b2='M1CJRQAM5A57BLVOQBAJLASOU8WN9QC2' where id=2; -update noar tt set v0='S8OIEBK88Z4KXZPXG091' where id=3; -update noar ti set v0='S8OIEBK88Z4KXZPXG091' where id=3; -update noar tt set b0='P3WVCX809TM860ITFOO' where id=3; -update noar ti set b0='P3WVCX809TM860ITFOO' where id=3; -update noar tt set v0='R4FT1HKOKH4AOL' where id=3; -update noar ti set v0='R4FT1HKOKH4AOL' where id=3; -update noar tt set b1='2QQAMDVB5ZPJNM5W4LPA6C2H77' where id=3; -update noar ti set b1='2QQAMDVB5ZPJNM5W4LPA6C2H77' where id=3; -update noar tt set v0='P25ZB0' where id=3; -update noar ti set v0='P25ZB0' where id=3; -update noar tt set b2='VJJ9W' where id=3; -update noar ti set b2='VJJ9W' where id=3; -update noar tt set v0='G8IW52HR13JY24B1G9DAWXZ1B' where id=4; -update noar ti set v0='G8IW52HR13JY24B1G9DAWXZ1B' where id=4; -update noar tt set b0='530BIS28' where id=4; -update noar ti set b0='530BIS28' where id=4; -update noar tt set v0='D829NKDKO4YSXT3A3XKPGIVBGQLJL' where id=4; -update noar ti set v0='D829NKDKO4YSXT3A3XKPGIVBGQLJL' where id=4; -update noar tt set b1='E8QMTNPL6OHOS2MXOCTBBYJ9N5L' where id=4; -update noar ti set b1='E8QMTNPL6OHOS2MXOCTBBYJ9N5L' where id=4; -update noar tt set v0='XDXQ50' where id=4; -update noar ti set v0='XDXQ50' where id=4; -update noar tt set b2='Y2LYY15VF1NS42J' where id=4; -update noar ti set b2='Y2LYY15VF1NS42J' where id=4; -update noar tt set v0='WFZ28TP9VSEIZ1UFG3QY7UL' where id=5; -update noar ti set v0='WFZ28TP9VSEIZ1UFG3QY7UL' where id=5; -update noar tt set b0='M8OBJKCFYUOP5BVJFH39OW96Z' where id=5; -update noar ti set b0='M8OBJKCFYUOP5BVJFH39OW96Z' where id=5; -update noar tt set v0='GGDKHWXD8W3Z5C5VW' where id=5; -update noar ti set v0='GGDKHWXD8W3Z5C5VW' where id=5; -update noar tt set b1='2H13PFK' where id=5; -update noar ti set b1='2H13PFK' where id=5; -update noar tt set v0='YMPW39D' where id=5; -update noar ti set v0='YMPW39D' where id=5; -update noar tt set b2='UUDE38BOTQN' where id=5; -update noar ti set b2='UUDE38BOTQN' where id=5; -update noar tt set v0='W30U893BRMN52AZWGJPH1LW' where id=6; -update noar ti set v0='W30U893BRMN52AZWGJPH1LW' where id=6; -update noar tt set b0='LF7EIP5KUI93SHMNLBAKR52XAFFJ7XO' where id=6; -update noar ti set b0='LF7EIP5KUI93SHMNLBAKR52XAFFJ7XO' where id=6; -update noar tt set v0='VH1A6JAWGD' where id=6; -update noar ti set v0='VH1A6JAWGD' where id=6; -update noar tt set b1='WN8CNRAP6' where id=6; -update noar ti set b1='WN8CNRAP6' where id=6; -update noar tt set v0='JRTNA7C5ZLQ' where id=6; -update noar ti set v0='JRTNA7C5ZLQ' where id=6; -update noar tt set b2='VL' where id=6; -update noar ti set b2='VL' where id=6; -update noar tt set v0='9BL8' where id=7; -update noar ti set v0='9BL8' where id=7; -update noar tt set b0='5NRVOC45C5GO4F0' where id=7; -update noar ti set b0='5NRVOC45C5GO4F0' where id=7; -update noar tt set v0='XO5VLH981YJ55EK' where id=7; -update noar ti set v0='XO5VLH981YJ55EK' where id=7; -update noar tt set b1='YABWQ96' where id=7; -update noar ti set b1='YABWQ96' where id=7; -update noar tt set v0='NYYG9WXZ6UWXY6P4' where id=7; -update noar ti set v0='NYYG9WXZ6UWXY6P4' where id=7; -update noar tt set b2='7ETM320DY3GHU4YZD5676HLAPF0MBL5' where id=7; -update noar ti set b2='7ETM320DY3GHU4YZD5676HLAPF0MBL5' where id=7; -update noar tt set v0='8MONZCNZQ3RPNYU7' where id=8; -update noar ti set v0='8MONZCNZQ3RPNYU7' where id=8; -update noar tt set b0='D6ZXJEV1IM5PS3O' where id=8; -update noar ti set b0='D6ZXJEV1IM5PS3O' where id=8; -update noar tt set v0='D9TUDNF91JCUTIFJHNLB54R0YDT3J6B' where id=8; -update noar ti set v0='D9TUDNF91JCUTIFJHNLB54R0YDT3J6B' where id=8; -update noar tt set b1='EWIKJU8LTL7KVESF49REB' where id=8; -update noar ti set b1='EWIKJU8LTL7KVESF49REB' where id=8; -update noar tt set v0='MZWB8EYN8Q01HCRQ7ALO3NO' where id=8; -update noar ti set v0='MZWB8EYN8Q01HCRQ7ALO3NO' where id=8; -update noar tt set b2='GUC58YXKP9QJVXHB' where id=8; -update noar ti set b2='GUC58YXKP9QJVXHB' where id=8; -update noar tt set v0='UX' where id=9; -update noar ti set v0='UX' where id=9; -update noar tt set b0='4PG35UP1L7DJDH' where id=9; -update noar ti set b0='4PG35UP1L7DJDH' where id=9; -update noar tt set v0='L43E8G38E4ZHEIV2ZM3998WKZ8RNQW3W' where id=9; -update noar ti set v0='L43E8G38E4ZHEIV2ZM3998WKZ8RNQW3W' where id=9; -update noar tt set b1='XMA24D23EOYOKDELMKFULZ8JOC9' where id=9; -update noar ti set b1='XMA24D23EOYOKDELMKFULZ8JOC9' where id=9; -update noar tt set v0='Z75XPJ8B1CD7J' where id=9; -update noar ti set v0='Z75XPJ8B1CD7J' where id=9; -update noar tt set b2='0GI5E7EMXH5Y08N69H' where id=9; -update noar ti set b2='0GI5E7EMXH5Y08N69H' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 blob null, - b1 tinyblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='1' where id=1; -update noar ti set v0='1' where id=1; -update noar tt set b0='PE9UBWBA1U146G1B95ZZ' where id=1; -update noar ti set b0='PE9UBWBA1U146G1B95ZZ' where id=1; -update noar tt set v0='FCAMWNQXB0KCFIU9NAA56O37MIFKGI' where id=1; -update noar ti set v0='FCAMWNQXB0KCFIU9NAA56O37MIFKGI' where id=1; -update noar tt set b1='BQI2G6ND4YKE8FNDXB8B' where id=1; -update noar ti set b1='BQI2G6ND4YKE8FNDXB8B' where id=1; -update noar tt set v0='9MT' where id=1; -update noar ti set v0='9MT' where id=1; -update noar tt set b2='P1I13X3PQXQINJR3EBGP0AY7M8U92SU' where id=1; -update noar ti set b2='P1I13X3PQXQINJR3EBGP0AY7M8U92SU' where id=1; -update noar tt set v0='YMGK9UVXIC615FT' where id=2; -update noar ti set v0='YMGK9UVXIC615FT' where id=2; -update noar tt set b0='6V0SZA3II' where id=2; -update noar ti set b0='6V0SZA3II' where id=2; -update noar tt set v0='ZTNIWLDRSH783L8USGALRSM1Z94' where id=2; -update noar ti set v0='ZTNIWLDRSH783L8USGALRSM1Z94' where id=2; -update noar tt set b1='KUHYYS0YN7XEERBVY81J9G4TAYL4' where id=2; -update noar ti set b1='KUHYYS0YN7XEERBVY81J9G4TAYL4' where id=2; -update noar tt set v0='12E53SYUAA85K71QWJP09I3T6X' where id=2; -update noar ti set v0='12E53SYUAA85K71QWJP09I3T6X' where id=2; -update noar tt set b2='B5TXCIUP7IZVUVYCQOL3RQ' where id=2; -update noar ti set b2='B5TXCIUP7IZVUVYCQOL3RQ' where id=2; -update noar tt set v0='U3D7L5IBMVFP48JJXCBSGX4RIYYF' where id=3; -update noar ti set v0='U3D7L5IBMVFP48JJXCBSGX4RIYYF' where id=3; -update noar tt set b0='LLELKM' where id=3; -update noar ti set b0='LLELKM' where id=3; -update noar tt set v0='HL2EY0ZSRE3BPROSWFJ1B' where id=3; -update noar ti set v0='HL2EY0ZSRE3BPROSWFJ1B' where id=3; -update noar tt set b1='3A03S' where id=3; -update noar ti set b1='3A03S' where id=3; -update noar tt set v0='F12YJ2T224ZMWQC3541' where id=3; -update noar ti set v0='F12YJ2T224ZMWQC3541' where id=3; -update noar tt set b2='8QZPHW6MP6PLTRGUR2DOQK0Z3MU6W' where id=3; -update noar ti set b2='8QZPHW6MP6PLTRGUR2DOQK0Z3MU6W' where id=3; -update noar tt set v0='1VJASU73FJ5U6G58MHZHZNKR51YUQ3U9' where id=4; -update noar ti set v0='1VJASU73FJ5U6G58MHZHZNKR51YUQ3U9' where id=4; -update noar tt set b0='7NDVRZV085MIGN7' where id=4; -update noar ti set b0='7NDVRZV085MIGN7' where id=4; -update noar tt set v0='KUQQBIE2Z' where id=4; -update noar ti set v0='KUQQBIE2Z' where id=4; -update noar tt set b1='UEUNG9HB8UHH32I7A2JYN8N62860KGD' where id=4; -update noar ti set b1='UEUNG9HB8UHH32I7A2JYN8N62860KGD' where id=4; -update noar tt set v0='KA6L8DY' where id=4; -update noar ti set v0='KA6L8DY' where id=4; -update noar tt set b2='NCRSQMVR7238GV2IA7' where id=4; -update noar ti set b2='NCRSQMVR7238GV2IA7' where id=4; -update noar tt set v0='F89GGUNPJNWNFNQVFAM67CR' where id=5; -update noar ti set v0='F89GGUNPJNWNFNQVFAM67CR' where id=5; -update noar tt set b0='QGA8973KAGGH4O3' where id=5; -update noar ti set b0='QGA8973KAGGH4O3' where id=5; -update noar tt set v0='4JEOPUBM9QWN6DQWC4Q9X' where id=5; -update noar ti set v0='4JEOPUBM9QWN6DQWC4Q9X' where id=5; -update noar tt set b1='JHIREB0JMNZLW2D57TMVUAU' where id=5; -update noar ti set b1='JHIREB0JMNZLW2D57TMVUAU' where id=5; -update noar tt set v0='10BA4XW8SO73FYT632Q4M0G9KBE' where id=5; -update noar ti set v0='10BA4XW8SO73FYT632Q4M0G9KBE' where id=5; -update noar tt set b2='O1IG3FJV3JJ8AYUGH' where id=5; -update noar ti set b2='O1IG3FJV3JJ8AYUGH' where id=5; -update noar tt set v0='GH7GG9FD9CM2CJJRQZ10' where id=6; -update noar ti set v0='GH7GG9FD9CM2CJJRQZ10' where id=6; -update noar tt set b0='PYWN3UT9DUJ6QBWURSYU0' where id=6; -update noar ti set b0='PYWN3UT9DUJ6QBWURSYU0' where id=6; -update noar tt set v0='O9FPLB8KZEC2WGHB6K' where id=6; -update noar ti set v0='O9FPLB8KZEC2WGHB6K' where id=6; -update noar tt set b1='JCFFI0XLF8Y3XA34KDND8BDJ' where id=6; -update noar ti set b1='JCFFI0XLF8Y3XA34KDND8BDJ' where id=6; -update noar tt set v0='IH2HTYW' where id=6; -update noar ti set v0='IH2HTYW' where id=6; -update noar tt set b2='V4B0A6A' where id=6; -update noar ti set b2='V4B0A6A' where id=6; -update noar tt set v0='ZSCPEU9KWM8CTU3CLYA1W1T56NA' where id=7; -update noar ti set v0='ZSCPEU9KWM8CTU3CLYA1W1T56NA' where id=7; -update noar tt set b0='IGAIC8A6' where id=7; -update noar ti set b0='IGAIC8A6' where id=7; -update noar tt set v0='6D' where id=7; -update noar ti set v0='6D' where id=7; -update noar tt set b1='3RZI9KS0YHPA2YYVLF8B9G' where id=7; -update noar ti set b1='3RZI9KS0YHPA2YYVLF8B9G' where id=7; -update noar tt set v0='A' where id=7; -update noar ti set v0='A' where id=7; -update noar tt set b2='L4QM3R0UKZ6D1OB89UN3O9CQGGR03' where id=7; -update noar ti set b2='L4QM3R0UKZ6D1OB89UN3O9CQGGR03' where id=7; -update noar tt set v0='PDXF7M463KC4GVHSUI4XVSQXM' where id=8; -update noar ti set v0='PDXF7M463KC4GVHSUI4XVSQXM' where id=8; -update noar tt set b0='QF253N6' where id=8; -update noar ti set b0='QF253N6' where id=8; -update noar tt set v0='70WOQL1718CK4O4740WCUQIMHR9' where id=8; -update noar ti set v0='70WOQL1718CK4O4740WCUQIMHR9' where id=8; -update noar tt set b1='11UDK4CPW55UVKC' where id=8; -update noar ti set b1='11UDK4CPW55UVKC' where id=8; -update noar tt set v0='72L5UIOSTSJ94LUK' where id=8; -update noar ti set v0='72L5UIOSTSJ94LUK' where id=8; -update noar tt set b2='Z8UFY0GARQL' where id=8; -update noar ti set b2='Z8UFY0GARQL' where id=8; -update noar tt set v0='82WHSVEFLMMSWCG6OVKUJY21H' where id=9; -update noar ti set v0='82WHSVEFLMMSWCG6OVKUJY21H' where id=9; -update noar tt set b0='F0L7KJGF' where id=9; -update noar ti set b0='F0L7KJGF' where id=9; -update noar tt set v0='ZL0BDNUWONKQ9XMF3' where id=9; -update noar ti set v0='ZL0BDNUWONKQ9XMF3' where id=9; -update noar tt set b1='50ETN5YT368Q1' where id=9; -update noar ti set b1='50ETN5YT368Q1' where id=9; -update noar tt set v0='I76OZ4YXU95NWVJCQ3QUVNL' where id=9; -update noar ti set v0='I76OZ4YXU95NWVJCQ3QUVNL' where id=9; -update noar tt set b2='TDP7B5V6PE8F7OGZQB5WEAK7YWJZEIFD' where id=9; -update noar ti set b2='TDP7B5V6PE8F7OGZQB5WEAK7YWJZEIFD' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 blob null, - b1 tinyblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='RMF01TT' where id=1; -update noar ti set v0='RMF01TT' where id=1; -update noar tt set b0='Z8OQ6FGL7ZGJQBDO' where id=1; -update noar ti set b0='Z8OQ6FGL7ZGJQBDO' where id=1; -update noar tt set v0='JFDXUR06PRFAS' where id=1; -update noar ti set v0='JFDXUR06PRFAS' where id=1; -update noar tt set b1='L7R41L9TKY2XHHMS4Q85XZUAYAQ2' where id=1; -update noar ti set b1='L7R41L9TKY2XHHMS4Q85XZUAYAQ2' where id=1; -update noar tt set v0='40PL9VPTN' where id=1; -update noar ti set v0='40PL9VPTN' where id=1; -update noar tt set b2='C4ASYIWSIUY856' where id=1; -update noar ti set b2='C4ASYIWSIUY856' where id=1; -update noar tt set v0='2L85OXI7695JJZB2K0RSP5CS894T' where id=2; -update noar ti set v0='2L85OXI7695JJZB2K0RSP5CS894T' where id=2; -update noar tt set b0='W' where id=2; -update noar ti set b0='W' where id=2; -update noar tt set v0='P2XCINSP' where id=2; -update noar ti set v0='P2XCINSP' where id=2; -update noar tt set b1='ACBKGTGY809111HHC' where id=2; -update noar ti set b1='ACBKGTGY809111HHC' where id=2; -update noar tt set v0='ZA500HGL15KG9CQLXV6' where id=2; -update noar ti set v0='ZA500HGL15KG9CQLXV6' where id=2; -update noar tt set b2='1LV2CXKF5ZU4SBJM5FU9B6LHRKT' where id=2; -update noar ti set b2='1LV2CXKF5ZU4SBJM5FU9B6LHRKT' where id=2; -update noar tt set v0='RL' where id=3; -update noar ti set v0='RL' where id=3; -update noar tt set b0='Q3NI0GQN82' where id=3; -update noar ti set b0='Q3NI0GQN82' where id=3; -update noar tt set v0='BEB' where id=3; -update noar ti set v0='BEB' where id=3; -update noar tt set b1='PYIABPV26HWQDLERYO1X1AVWIBTLNJO' where id=3; -update noar ti set b1='PYIABPV26HWQDLERYO1X1AVWIBTLNJO' where id=3; -update noar tt set v0='D9HM6WXLPOZJCEPC5DT1' where id=3; -update noar ti set v0='D9HM6WXLPOZJCEPC5DT1' where id=3; -update noar tt set b2='WKGITDSV2X9WMZY' where id=3; -update noar ti set b2='WKGITDSV2X9WMZY' where id=3; -update noar tt set v0='ABTN091KBQHGB9DYXXAFVVO8XN0VM3H' where id=4; -update noar ti set v0='ABTN091KBQHGB9DYXXAFVVO8XN0VM3H' where id=4; -update noar tt set b0='8' where id=4; -update noar ti set b0='8' where id=4; -update noar tt set v0='KPOF8KL2BJOQVXFMLWCZ0JTCYGWM1' where id=4; -update noar ti set v0='KPOF8KL2BJOQVXFMLWCZ0JTCYGWM1' where id=4; -update noar tt set b1='UIZNBX49OEJH6OXJTDBY2WKGLI' where id=4; -update noar ti set b1='UIZNBX49OEJH6OXJTDBY2WKGLI' where id=4; -update noar tt set v0='VMMXZ256M0KKDW5FS9A71TNO' where id=4; -update noar ti set v0='VMMXZ256M0KKDW5FS9A71TNO' where id=4; -update noar tt set b2='GBL63964UDOJJDMVFUD' where id=4; -update noar ti set b2='GBL63964UDOJJDMVFUD' where id=4; -update noar tt set v0='TZXPACWC4PJ9VPYME6XXFWG8YV0CJCQE' where id=5; -update noar ti set v0='TZXPACWC4PJ9VPYME6XXFWG8YV0CJCQE' where id=5; -update noar tt set b0='QDUYVZK' where id=5; -update noar ti set b0='QDUYVZK' where id=5; -update noar tt set v0='TD7CE0H7H2' where id=5; -update noar ti set v0='TD7CE0H7H2' where id=5; -update noar tt set b1='C3797NMIJRC25FBJTLV8VJZ' where id=5; -update noar ti set b1='C3797NMIJRC25FBJTLV8VJZ' where id=5; -update noar tt set v0='886UI54V' where id=5; -update noar ti set v0='886UI54V' where id=5; -update noar tt set b2='S14OOJECI0MXNAQL0PYFE' where id=5; -update noar ti set b2='S14OOJECI0MXNAQL0PYFE' where id=5; -update noar tt set v0='P4UHO7PLH6OM5' where id=6; -update noar ti set v0='P4UHO7PLH6OM5' where id=6; -update noar tt set b0='YXDKTHI21I0A56IRZOWS6NR5FCR1ZGX' where id=6; -update noar ti set b0='YXDKTHI21I0A56IRZOWS6NR5FCR1ZGX' where id=6; -update noar tt set v0='SWUF5XPW9H3UVK' where id=6; -update noar ti set v0='SWUF5XPW9H3UVK' where id=6; -update noar tt set b1='5WGW3WQPV' where id=6; -update noar ti set b1='5WGW3WQPV' where id=6; -update noar tt set v0='4KPY0RUXA8XPWXWL' where id=6; -update noar ti set v0='4KPY0RUXA8XPWXWL' where id=6; -update noar tt set b2='HZBA7KYQZIJ1OXCXSDPD9Y21KY1ZX' where id=6; -update noar ti set b2='HZBA7KYQZIJ1OXCXSDPD9Y21KY1ZX' where id=6; -update noar tt set v0='1LSGWIUM6ABPQRKLCW5ABG3VRCH' where id=7; -update noar ti set v0='1LSGWIUM6ABPQRKLCW5ABG3VRCH' where id=7; -update noar tt set b0='5NZ0' where id=7; -update noar ti set b0='5NZ0' where id=7; -update noar tt set v0='C5KRRT3T5ST1ZLAQQ' where id=7; -update noar ti set v0='C5KRRT3T5ST1ZLAQQ' where id=7; -update noar tt set b1='I4LHHQIRS2I5ABEVTSS317PNGX' where id=7; -update noar ti set b1='I4LHHQIRS2I5ABEVTSS317PNGX' where id=7; -update noar tt set v0='391NN8Z2KJ2VQB92LMCQ' where id=7; -update noar ti set v0='391NN8Z2KJ2VQB92LMCQ' where id=7; -update noar tt set b2='ONSMZSMKJBTAKQCRV' where id=7; -update noar ti set b2='ONSMZSMKJBTAKQCRV' where id=7; -update noar tt set v0='S0YZ99B' where id=8; -update noar ti set v0='S0YZ99B' where id=8; -update noar tt set b0='ES5BN1BBO4RPW9T' where id=8; -update noar ti set b0='ES5BN1BBO4RPW9T' where id=8; -update noar tt set v0='NYVZV5F' where id=8; -update noar ti set v0='NYVZV5F' where id=8; -update noar tt set b1='XCOC4UC33F6U9ARCQJXZZNMVAD2Z' where id=8; -update noar ti set b1='XCOC4UC33F6U9ARCQJXZZNMVAD2Z' where id=8; -update noar tt set v0='DMHLY4HFO6HHWOW9CQQ' where id=8; -update noar ti set v0='DMHLY4HFO6HHWOW9CQQ' where id=8; -update noar tt set b2='2D' where id=8; -update noar ti set b2='2D' where id=8; -update noar tt set v0='P' where id=9; -update noar ti set v0='P' where id=9; -update noar tt set b0='7IVQ3RPGQWMU7K3GIC2WYSRCC' where id=9; -update noar ti set b0='7IVQ3RPGQWMU7K3GIC2WYSRCC' where id=9; -update noar tt set v0='0L587SDBCAUXX' where id=9; -update noar ti set v0='0L587SDBCAUXX' where id=9; -update noar tt set b1='1E' where id=9; -update noar ti set b1='1E' where id=9; -update noar tt set v0='8TZDYF7Z67ADKV390CF444VOWX' where id=9; -update noar ti set v0='8TZDYF7Z67ADKV390CF444VOWX' where id=9; -update noar tt set b2='JJYXPEYNNWD9WV5I5I8' where id=9; -update noar ti set b2='JJYXPEYNNWD9WV5I5I8' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 blob not null, - b1 tinyblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='U3QXFT7' where id=1; -update noar ti set v0='U3QXFT7' where id=1; -update noar tt set b0='RT1M41Q144JC9YH65' where id=1; -update noar ti set b0='RT1M41Q144JC9YH65' where id=1; -update noar tt set v0='D9H' where id=1; -update noar ti set v0='D9H' where id=1; -update noar tt set b1='98XU74MA2TRJBKOTQO28' where id=1; -update noar ti set b1='98XU74MA2TRJBKOTQO28' where id=1; -update noar tt set v0='DC' where id=1; -update noar ti set v0='DC' where id=1; -update noar tt set b2='FCXDOFTJFUX0DDKX0HC6XF8IFQEBE' where id=1; -update noar ti set b2='FCXDOFTJFUX0DDKX0HC6XF8IFQEBE' where id=1; -update noar tt set v0='OW9JQ5UW6WLFFH8SJC' where id=2; -update noar ti set v0='OW9JQ5UW6WLFFH8SJC' where id=2; -update noar tt set b0='XGL56XP7Q8RV1HYC0Q' where id=2; -update noar ti set b0='XGL56XP7Q8RV1HYC0Q' where id=2; -update noar tt set v0='5R09PJ2A385FM4XL5HT6' where id=2; -update noar ti set v0='5R09PJ2A385FM4XL5HT6' where id=2; -update noar tt set b1='MOC0IW9COPITPFEJXUP5RDOAPM1YIF24' where id=2; -update noar ti set b1='MOC0IW9COPITPFEJXUP5RDOAPM1YIF24' where id=2; -update noar tt set v0='FKGELF025CP41NXGCT7F7RB7AIMPL' where id=2; -update noar ti set v0='FKGELF025CP41NXGCT7F7RB7AIMPL' where id=2; -update noar tt set b2='LBN1S3LDCJ8LZI7ZZN1S8ZQBZYI8' where id=2; -update noar ti set b2='LBN1S3LDCJ8LZI7ZZN1S8ZQBZYI8' where id=2; -update noar tt set v0='H5381XQR4GPX5S864HK0UM6' where id=3; -update noar ti set v0='H5381XQR4GPX5S864HK0UM6' where id=3; -update noar tt set b0='6YPZ' where id=3; -update noar ti set b0='6YPZ' where id=3; -update noar tt set v0='X2KQ7PLIX4JOUX0V875NSK' where id=3; -update noar ti set v0='X2KQ7PLIX4JOUX0V875NSK' where id=3; -update noar tt set b1='MV4G9KSH5' where id=3; -update noar ti set b1='MV4G9KSH5' where id=3; -update noar tt set v0='LN767BM1F73HVV8O68IC9OLJT7QMZ2O' where id=3; -update noar ti set v0='LN767BM1F73HVV8O68IC9OLJT7QMZ2O' where id=3; -update noar tt set b2='N1WW103NIE8MPPKVR' where id=3; -update noar ti set b2='N1WW103NIE8MPPKVR' where id=3; -update noar tt set v0='2NW4OBUV4TBU1TOJDF1PW12AOG3' where id=4; -update noar ti set v0='2NW4OBUV4TBU1TOJDF1PW12AOG3' where id=4; -update noar tt set b0='GA4LV' where id=4; -update noar ti set b0='GA4LV' where id=4; -update noar tt set v0='YAEM48ZNAT4N02NH0Y8TCVLL2BEM' where id=4; -update noar ti set v0='YAEM48ZNAT4N02NH0Y8TCVLL2BEM' where id=4; -update noar tt set b1='ZNJA2BSW8FAG22' where id=4; -update noar ti set b1='ZNJA2BSW8FAG22' where id=4; -update noar tt set v0='E9BX06TVP5X5Q13AIA0DH' where id=4; -update noar ti set v0='E9BX06TVP5X5Q13AIA0DH' where id=4; -update noar tt set b2='WT1TLCXBYIHWI1GD' where id=4; -update noar ti set b2='WT1TLCXBYIHWI1GD' where id=4; -update noar tt set v0='FR4N3PFY2YUL' where id=5; -update noar ti set v0='FR4N3PFY2YUL' where id=5; -update noar tt set b0='OQIYKLJS9WHKAJERG7LS9BKF1YFX0Y5B' where id=5; -update noar ti set b0='OQIYKLJS9WHKAJERG7LS9BKF1YFX0Y5B' where id=5; -update noar tt set v0='GTY5O6RDFYODPLFWKTCOOJ6' where id=5; -update noar ti set v0='GTY5O6RDFYODPLFWKTCOOJ6' where id=5; -update noar tt set b1='3LORD46P63UKU9I' where id=5; -update noar ti set b1='3LORD46P63UKU9I' where id=5; -update noar tt set v0='HYSX4' where id=5; -update noar ti set v0='HYSX4' where id=5; -update noar tt set b2='S0DNS3JOSD3SAP2J' where id=5; -update noar ti set b2='S0DNS3JOSD3SAP2J' where id=5; -update noar tt set v0='9TWBD5YT3307AU4GEHSK3AYBLF' where id=6; -update noar ti set v0='9TWBD5YT3307AU4GEHSK3AYBLF' where id=6; -update noar tt set b0='RU1NL87CQUUJ' where id=6; -update noar ti set b0='RU1NL87CQUUJ' where id=6; -update noar tt set v0='N2W' where id=6; -update noar ti set v0='N2W' where id=6; -update noar tt set b1='ENZYX098BBUN6' where id=6; -update noar ti set b1='ENZYX098BBUN6' where id=6; -update noar tt set v0='G3PACXKI6RSJ4CEZZJ7GHZ73' where id=6; -update noar ti set v0='G3PACXKI6RSJ4CEZZJ7GHZ73' where id=6; -update noar tt set b2='16MIXU5ERSCJI6L4J' where id=6; -update noar ti set b2='16MIXU5ERSCJI6L4J' where id=6; -update noar tt set v0='0VROV7N303VI' where id=7; -update noar ti set v0='0VROV7N303VI' where id=7; -update noar tt set b0='9EAXF7IU64QQZMHZN8KT' where id=7; -update noar ti set b0='9EAXF7IU64QQZMHZN8KT' where id=7; -update noar tt set v0='O7HPFIXEQE3G5MWNQ20VQH16DDSXY2D' where id=7; -update noar ti set v0='O7HPFIXEQE3G5MWNQ20VQH16DDSXY2D' where id=7; -update noar tt set b1='QZ9OGK5QMZN' where id=7; -update noar ti set b1='QZ9OGK5QMZN' where id=7; -update noar tt set v0='FD4ZE6A2QRGZVX0VAVG47ERIS' where id=7; -update noar ti set v0='FD4ZE6A2QRGZVX0VAVG47ERIS' where id=7; -update noar tt set b2='146S6HUJH2JY82DOIV9ZUYQ08YQF' where id=7; -update noar ti set b2='146S6HUJH2JY82DOIV9ZUYQ08YQF' where id=7; -update noar tt set v0='JWBL3AA88DUH9O4MWKKXIVX1Y' where id=8; -update noar ti set v0='JWBL3AA88DUH9O4MWKKXIVX1Y' where id=8; -update noar tt set b0='QMEYKB2ZFJ7CR9C' where id=8; -update noar ti set b0='QMEYKB2ZFJ7CR9C' where id=8; -update noar tt set v0='3YZE6RKQYCLILJTSUNLRWJ' where id=8; -update noar ti set v0='3YZE6RKQYCLILJTSUNLRWJ' where id=8; -update noar tt set b1='MZ88MTYLM91POPWKBL4YR42' where id=8; -update noar ti set b1='MZ88MTYLM91POPWKBL4YR42' where id=8; -update noar tt set v0='E9Z5IV3Q5QGXGSCDHHPPT29PXEVWS10N' where id=8; -update noar ti set v0='E9Z5IV3Q5QGXGSCDHHPPT29PXEVWS10N' where id=8; -update noar tt set b2='8RXXW09' where id=8; -update noar ti set b2='8RXXW09' where id=8; -update noar tt set v0='8G4JFPTVC2' where id=9; -update noar ti set v0='8G4JFPTVC2' where id=9; -update noar tt set b0='V2X8IYO53' where id=9; -update noar ti set b0='V2X8IYO53' where id=9; -update noar tt set v0='C5OOAMFMWAAGIDXN7LCJRMGJGI6LJMK' where id=9; -update noar ti set v0='C5OOAMFMWAAGIDXN7LCJRMGJGI6LJMK' where id=9; -update noar tt set b1='JLY137NGHJ0NWZ4BW2QHIEACBQ57RYGP' where id=9; -update noar ti set b1='JLY137NGHJ0NWZ4BW2QHIEACBQ57RYGP' where id=9; -update noar tt set v0='73DPP8QP733RQD8Q315V8Q3KB1J7CZZ' where id=9; -update noar ti set v0='73DPP8QP733RQD8Q315V8Q3KB1J7CZZ' where id=9; -update noar tt set b2='8962W028V' where id=9; -update noar ti set b2='8962W028V' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 blob not null, - b1 tinyblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='TH15PY73DK' where id=1; -update noar ti set v0='TH15PY73DK' where id=1; -update noar tt set b0='MJ01G5634CJ80KDCFCZ189OEMI4T' where id=1; -update noar ti set b0='MJ01G5634CJ80KDCFCZ189OEMI4T' where id=1; -update noar tt set v0='41Q4BTSQXMESELQOKQGC' where id=1; -update noar ti set v0='41Q4BTSQXMESELQOKQGC' where id=1; -update noar tt set b1='Q76MJEQVKBLOMVCX' where id=1; -update noar ti set b1='Q76MJEQVKBLOMVCX' where id=1; -update noar tt set v0='8CKCF5M5DFJGLN3L9M7SQTS8JZDETEN' where id=1; -update noar ti set v0='8CKCF5M5DFJGLN3L9M7SQTS8JZDETEN' where id=1; -update noar tt set b2='88KK5C7LAZVQL9PBHNOYUF' where id=1; -update noar ti set b2='88KK5C7LAZVQL9PBHNOYUF' where id=1; -update noar tt set v0='RNBMZ9HUPE5K0J0' where id=2; -update noar ti set v0='RNBMZ9HUPE5K0J0' where id=2; -update noar tt set b0='2TIDWLLT1523PJ2D9' where id=2; -update noar ti set b0='2TIDWLLT1523PJ2D9' where id=2; -update noar tt set v0='5QCWUK' where id=2; -update noar ti set v0='5QCWUK' where id=2; -update noar tt set b1='RNN4JR6F47WMUZF5U0' where id=2; -update noar ti set b1='RNN4JR6F47WMUZF5U0' where id=2; -update noar tt set v0='5CIA5BBKHVSZ109' where id=2; -update noar ti set v0='5CIA5BBKHVSZ109' where id=2; -update noar tt set b2='N8LGZV9J6XWEVRWWI455' where id=2; -update noar ti set b2='N8LGZV9J6XWEVRWWI455' where id=2; -update noar tt set v0='CDP21XWGVXVGP3NZ' where id=3; -update noar ti set v0='CDP21XWGVXVGP3NZ' where id=3; -update noar tt set b0='V1STZ854CZA3JHMWS9TC69QBP81BBKL' where id=3; -update noar ti set b0='V1STZ854CZA3JHMWS9TC69QBP81BBKL' where id=3; -update noar tt set v0='BKQZF7ACENRTRCP8Q2H746KRMNL62N' where id=3; -update noar ti set v0='BKQZF7ACENRTRCP8Q2H746KRMNL62N' where id=3; -update noar tt set b1='56P7UPE82CRZB0LY1D' where id=3; -update noar ti set b1='56P7UPE82CRZB0LY1D' where id=3; -update noar tt set v0='SL1WSUNCM3VGQBG928TB59WD9JTQ' where id=3; -update noar ti set v0='SL1WSUNCM3VGQBG928TB59WD9JTQ' where id=3; -update noar tt set b2='WW90XSJYM9IGG9XRTVYQPC' where id=3; -update noar ti set b2='WW90XSJYM9IGG9XRTVYQPC' where id=3; -update noar tt set v0='TM2TL6XYRJBR20LLTMHOSWWC' where id=4; -update noar ti set v0='TM2TL6XYRJBR20LLTMHOSWWC' where id=4; -update noar tt set b0='ES8IFTH0Z0M5EVHZYSWBAVM2IX0CC11' where id=4; -update noar ti set b0='ES8IFTH0Z0M5EVHZYSWBAVM2IX0CC11' where id=4; -update noar tt set v0='EDY85L1BTLM4JHIXXW5' where id=4; -update noar ti set v0='EDY85L1BTLM4JHIXXW5' where id=4; -update noar tt set b1='P06TGX6TCI5VOFUI08VMOREE8WAW3O' where id=4; -update noar ti set b1='P06TGX6TCI5VOFUI08VMOREE8WAW3O' where id=4; -update noar tt set v0='LHI0FOX1JKDHHQVO154HUN8IZHYY1B98' where id=4; -update noar ti set v0='LHI0FOX1JKDHHQVO154HUN8IZHYY1B98' where id=4; -update noar tt set b2='WZJ768O72CD5BDJPW' where id=4; -update noar ti set b2='WZJ768O72CD5BDJPW' where id=4; -update noar tt set v0='UV3MTZUBJ' where id=5; -update noar ti set v0='UV3MTZUBJ' where id=5; -update noar tt set b0='NVZGPUM7K' where id=5; -update noar ti set b0='NVZGPUM7K' where id=5; -update noar tt set v0='EBGKJO901EQM4QDXKZV8' where id=5; -update noar ti set v0='EBGKJO901EQM4QDXKZV8' where id=5; -update noar tt set b1='DZSSW4YCTUE1QJ4US78GSS6X16' where id=5; -update noar ti set b1='DZSSW4YCTUE1QJ4US78GSS6X16' where id=5; -update noar tt set v0='DIK2ICHW' where id=5; -update noar ti set v0='DIK2ICHW' where id=5; -update noar tt set b2='0GN7ZIMMG2' where id=5; -update noar ti set b2='0GN7ZIMMG2' where id=5; -update noar tt set v0='NE0UBZOOVWP7' where id=6; -update noar ti set v0='NE0UBZOOVWP7' where id=6; -update noar tt set b0='SOBQZS6XZ' where id=6; -update noar ti set b0='SOBQZS6XZ' where id=6; -update noar tt set v0='X8' where id=6; -update noar ti set v0='X8' where id=6; -update noar tt set b1='7LJ6OFVK0TQ' where id=6; -update noar ti set b1='7LJ6OFVK0TQ' where id=6; -update noar tt set v0='4IYGUK5' where id=6; -update noar ti set v0='4IYGUK5' where id=6; -update noar tt set b2='VYU8PWLYX98DR4AV4ELCFVRGM7S2' where id=6; -update noar ti set b2='VYU8PWLYX98DR4AV4ELCFVRGM7S2' where id=6; -update noar tt set v0='NF4' where id=7; -update noar ti set v0='NF4' where id=7; -update noar tt set b0='A34NGBXM72SU3TY8SVW1NEVR' where id=7; -update noar ti set b0='A34NGBXM72SU3TY8SVW1NEVR' where id=7; -update noar tt set v0='DJ3ZNIR1Z1WKB0FVQ9RSX3FCQMDHJA' where id=7; -update noar ti set v0='DJ3ZNIR1Z1WKB0FVQ9RSX3FCQMDHJA' where id=7; -update noar tt set b1='0T97W2RMOYJ0F6VW5PRPA1' where id=7; -update noar ti set b1='0T97W2RMOYJ0F6VW5PRPA1' where id=7; -update noar tt set v0='4' where id=7; -update noar ti set v0='4' where id=7; -update noar tt set b2='87L795D2' where id=7; -update noar ti set b2='87L795D2' where id=7; -update noar tt set v0='KVR2H3NSQWJ935897LRBKTYI990' where id=8; -update noar ti set v0='KVR2H3NSQWJ935897LRBKTYI990' where id=8; -update noar tt set b0='L1DCVB' where id=8; -update noar ti set b0='L1DCVB' where id=8; -update noar tt set v0='P1MXBSQD8GC4J7NH5D55OC5' where id=8; -update noar ti set v0='P1MXBSQD8GC4J7NH5D55OC5' where id=8; -update noar tt set b1='MAIHZLIDKDXSTDFP325UXLG' where id=8; -update noar ti set b1='MAIHZLIDKDXSTDFP325UXLG' where id=8; -update noar tt set v0='LK3MG079VW3U2' where id=8; -update noar ti set v0='LK3MG079VW3U2' where id=8; -update noar tt set b2='LNWBMBLQ' where id=8; -update noar ti set b2='LNWBMBLQ' where id=8; -update noar tt set v0='CAPH35G2ZBLK' where id=9; -update noar ti set v0='CAPH35G2ZBLK' where id=9; -update noar tt set b0='49DERRZ6GBRBXN' where id=9; -update noar ti set b0='49DERRZ6GBRBXN' where id=9; -update noar tt set v0='MDGQV7TRBNX3LRECJ34TY' where id=9; -update noar ti set v0='MDGQV7TRBNX3LRECJ34TY' where id=9; -update noar tt set b1='7GZF8WCEAK69HZ3SJWNZD074K' where id=9; -update noar ti set b1='7GZF8WCEAK69HZ3SJWNZD074K' where id=9; -update noar tt set v0='GQTOL8I' where id=9; -update noar ti set v0='GQTOL8I' where id=9; -update noar tt set b2='DNYTUCY49TPRZRYOCRWRW69UH80JGP' where id=9; -update noar ti set b2='DNYTUCY49TPRZRYOCRWRW69UH80JGP' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 blob null, - b1 blob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='SA80PG' where id=1; -update noar ti set v0='SA80PG' where id=1; -update noar tt set b0='USS5FE6P4XGPLTBN0EOEOFQB' where id=1; -update noar ti set b0='USS5FE6P4XGPLTBN0EOEOFQB' where id=1; -update noar tt set v0='M7JUWNJODTE4D22I1ZYP64WV' where id=1; -update noar ti set v0='M7JUWNJODTE4D22I1ZYP64WV' where id=1; -update noar tt set b1='9ND3E0DUHRJAOAVOVTFLMMBXHT1A0UQH' where id=1; -update noar ti set b1='9ND3E0DUHRJAOAVOVTFLMMBXHT1A0UQH' where id=1; -update noar tt set v0='T9ZXXD6XZE' where id=1; -update noar ti set v0='T9ZXXD6XZE' where id=1; -update noar tt set b2='DGMPOJ' where id=1; -update noar ti set b2='DGMPOJ' where id=1; -update noar tt set v0='FDM7H7G' where id=2; -update noar ti set v0='FDM7H7G' where id=2; -update noar tt set b0='YUMMS05KO9BRE1CZ4R' where id=2; -update noar ti set b0='YUMMS05KO9BRE1CZ4R' where id=2; -update noar tt set v0='63KFBR6' where id=2; -update noar ti set v0='63KFBR6' where id=2; -update noar tt set b1='N4VW4O8U3D' where id=2; -update noar ti set b1='N4VW4O8U3D' where id=2; -update noar tt set v0='UYB56R8SRKCA8O5O' where id=2; -update noar ti set v0='UYB56R8SRKCA8O5O' where id=2; -update noar tt set b2='3HCEENYOE9HZ0SEP1' where id=2; -update noar ti set b2='3HCEENYOE9HZ0SEP1' where id=2; -update noar tt set v0='GK7YW07HGHV' where id=3; -update noar ti set v0='GK7YW07HGHV' where id=3; -update noar tt set b0='4HHV537SNEGOS3' where id=3; -update noar ti set b0='4HHV537SNEGOS3' where id=3; -update noar tt set v0='UR4U43GFPKQF28AV' where id=3; -update noar ti set v0='UR4U43GFPKQF28AV' where id=3; -update noar tt set b1='BV2WBK2M5EQJ89VGDNC9C' where id=3; -update noar ti set b1='BV2WBK2M5EQJ89VGDNC9C' where id=3; -update noar tt set v0='ZKZ8RO' where id=3; -update noar ti set v0='ZKZ8RO' where id=3; -update noar tt set b2='4SVQWVJ9' where id=3; -update noar ti set b2='4SVQWVJ9' where id=3; -update noar tt set v0='2QKXMN4IFF8Z1GXHNACI81KE1663FQ' where id=4; -update noar ti set v0='2QKXMN4IFF8Z1GXHNACI81KE1663FQ' where id=4; -update noar tt set b0='R3IFSPI0M' where id=4; -update noar ti set b0='R3IFSPI0M' where id=4; -update noar tt set v0='OJMAJMR2A0NHTYEI5W5C8D49' where id=4; -update noar ti set v0='OJMAJMR2A0NHTYEI5W5C8D49' where id=4; -update noar tt set b1='K4W0WDR1JRNRFVWCAQ6XT4WJ4C6XF' where id=4; -update noar ti set b1='K4W0WDR1JRNRFVWCAQ6XT4WJ4C6XF' where id=4; -update noar tt set v0='8768' where id=4; -update noar ti set v0='8768' where id=4; -update noar tt set b2='DVSHBK' where id=4; -update noar ti set b2='DVSHBK' where id=4; -update noar tt set v0='FPT1OM5PPLPB6MWCHQQH3R5Q4Q7VA' where id=5; -update noar ti set v0='FPT1OM5PPLPB6MWCHQQH3R5Q4Q7VA' where id=5; -update noar tt set b0='0NTBNZO0E5DZXHPL4UGL80VL525S2ZFV' where id=5; -update noar ti set b0='0NTBNZO0E5DZXHPL4UGL80VL525S2ZFV' where id=5; -update noar tt set v0='J8XLH1TN4GKWHPLD' where id=5; -update noar ti set v0='J8XLH1TN4GKWHPLD' where id=5; -update noar tt set b1='BIGO8S80J8R4QEQ5C1LZ' where id=5; -update noar ti set b1='BIGO8S80J8R4QEQ5C1LZ' where id=5; -update noar tt set v0='ST' where id=5; -update noar ti set v0='ST' where id=5; -update noar tt set b2='H8F10L06U' where id=5; -update noar ti set b2='H8F10L06U' where id=5; -update noar tt set v0='3VQ1LSWAMUVP' where id=6; -update noar ti set v0='3VQ1LSWAMUVP' where id=6; -update noar tt set b0='0N5RBUGCUXQHGV6DT2HY4P' where id=6; -update noar ti set b0='0N5RBUGCUXQHGV6DT2HY4P' where id=6; -update noar tt set v0='LW' where id=6; -update noar ti set v0='LW' where id=6; -update noar tt set b1='XC7T528FA5G' where id=6; -update noar ti set b1='XC7T528FA5G' where id=6; -update noar tt set v0='HDAVQ5PBEOK6CD108VYAP6SINEVV' where id=6; -update noar ti set v0='HDAVQ5PBEOK6CD108VYAP6SINEVV' where id=6; -update noar tt set b2='M3YKWCQQQWZ4CURX0ONL4TE7' where id=6; -update noar ti set b2='M3YKWCQQQWZ4CURX0ONL4TE7' where id=6; -update noar tt set v0='0IGCIK17N0F9FNQ76IO1H87VN5WKNKKB' where id=7; -update noar ti set v0='0IGCIK17N0F9FNQ76IO1H87VN5WKNKKB' where id=7; -update noar tt set b0='16F1BCE' where id=7; -update noar ti set b0='16F1BCE' where id=7; -update noar tt set v0='F7HYCT5X3V155PQ6KFEAG' where id=7; -update noar ti set v0='F7HYCT5X3V155PQ6KFEAG' where id=7; -update noar tt set b1='BCDI10FVTNMK' where id=7; -update noar ti set b1='BCDI10FVTNMK' where id=7; -update noar tt set v0='MD206ZJRKOC57CS7ISK7' where id=7; -update noar ti set v0='MD206ZJRKOC57CS7ISK7' where id=7; -update noar tt set b2='PNN11WCL2N8NQ36' where id=7; -update noar ti set b2='PNN11WCL2N8NQ36' where id=7; -update noar tt set v0='S' where id=8; -update noar ti set v0='S' where id=8; -update noar tt set b0='AT5I7DO9R1' where id=8; -update noar ti set b0='AT5I7DO9R1' where id=8; -update noar tt set v0='UBTG0KLEG678OMWELQX64M' where id=8; -update noar ti set v0='UBTG0KLEG678OMWELQX64M' where id=8; -update noar tt set b1='YCVZMH' where id=8; -update noar ti set b1='YCVZMH' where id=8; -update noar tt set v0='DIPPRLUPQRAI68V' where id=8; -update noar ti set v0='DIPPRLUPQRAI68V' where id=8; -update noar tt set b2='4TIPR78COMZCS5DOE7HJ5' where id=8; -update noar ti set b2='4TIPR78COMZCS5DOE7HJ5' where id=8; -update noar tt set v0='PN6LWWGIHYE893KE3DTN5AAVKCB81' where id=9; -update noar ti set v0='PN6LWWGIHYE893KE3DTN5AAVKCB81' where id=9; -update noar tt set b0='LUUIEVD0ZWLE8' where id=9; -update noar ti set b0='LUUIEVD0ZWLE8' where id=9; -update noar tt set v0='62Z' where id=9; -update noar ti set v0='62Z' where id=9; -update noar tt set b1='JEEBWUBR1248QKC12IE2' where id=9; -update noar ti set b1='JEEBWUBR1248QKC12IE2' where id=9; -update noar tt set v0='2SWZ' where id=9; -update noar ti set v0='2SWZ' where id=9; -update noar tt set b2='1MPY7LPQWAD6VC0' where id=9; -update noar ti set b2='1MPY7LPQWAD6VC0' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 blob null, - b1 blob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='6GJQVFSDL0KDOQ2C8BQ1PMK' where id=1; -update noar ti set v0='6GJQVFSDL0KDOQ2C8BQ1PMK' where id=1; -update noar tt set b0='ESST' where id=1; -update noar ti set b0='ESST' where id=1; -update noar tt set v0='49RXKRGWR' where id=1; -update noar ti set v0='49RXKRGWR' where id=1; -update noar tt set b1='UZNQ' where id=1; -update noar ti set b1='UZNQ' where id=1; -update noar tt set v0='0CX9WFJS90B0LXCNJ0YNU9STLFMZ6JD' where id=1; -update noar ti set v0='0CX9WFJS90B0LXCNJ0YNU9STLFMZ6JD' where id=1; -update noar tt set b2='DJ04THBCA5H6S65QTXIBUH' where id=1; -update noar ti set b2='DJ04THBCA5H6S65QTXIBUH' where id=1; -update noar tt set v0='HIXMG172FLNTZNLXY86XDTPPX33V479J' where id=2; -update noar ti set v0='HIXMG172FLNTZNLXY86XDTPPX33V479J' where id=2; -update noar tt set b0='WPUEM8U2WS99V394FEXX8IM9Q' where id=2; -update noar ti set b0='WPUEM8U2WS99V394FEXX8IM9Q' where id=2; -update noar tt set v0='H2C7KQ6PVFUFM1' where id=2; -update noar ti set v0='H2C7KQ6PVFUFM1' where id=2; -update noar tt set b1='G1JQPO8HAT0DN5UZNY4552LRIC47' where id=2; -update noar ti set b1='G1JQPO8HAT0DN5UZNY4552LRIC47' where id=2; -update noar tt set v0='TR5RC5W2EHZQ8K' where id=2; -update noar ti set v0='TR5RC5W2EHZQ8K' where id=2; -update noar tt set b2='UF1DM123QFUKM0OJ3S1MI0QV41RG' where id=2; -update noar ti set b2='UF1DM123QFUKM0OJ3S1MI0QV41RG' where id=2; -update noar tt set v0='OGCTEWDFCQD0NIAOL6U8' where id=3; -update noar ti set v0='OGCTEWDFCQD0NIAOL6U8' where id=3; -update noar tt set b0='D2EMA' where id=3; -update noar ti set b0='D2EMA' where id=3; -update noar tt set v0='IK2XQAHHCEVO20F5MP' where id=3; -update noar ti set v0='IK2XQAHHCEVO20F5MP' where id=3; -update noar tt set b1='X04490O' where id=3; -update noar ti set b1='X04490O' where id=3; -update noar tt set v0='OGQD9D' where id=3; -update noar ti set v0='OGQD9D' where id=3; -update noar tt set b2='N40NZHVEN8GYN21X2SSMVNC' where id=3; -update noar ti set b2='N40NZHVEN8GYN21X2SSMVNC' where id=3; -update noar tt set v0='5H1X21G16' where id=4; -update noar ti set v0='5H1X21G16' where id=4; -update noar tt set b0='JLS7' where id=4; -update noar ti set b0='JLS7' where id=4; -update noar tt set v0='J' where id=4; -update noar ti set v0='J' where id=4; -update noar tt set b1='6OI4ZIC42RAVBM8M71547ANB' where id=4; -update noar ti set b1='6OI4ZIC42RAVBM8M71547ANB' where id=4; -update noar tt set v0='EM1X6O0EFXVQX' where id=4; -update noar ti set v0='EM1X6O0EFXVQX' where id=4; -update noar tt set b2='09T6GKDW8K37ASUX2MSYTL0I4RN' where id=4; -update noar ti set b2='09T6GKDW8K37ASUX2MSYTL0I4RN' where id=4; -update noar tt set v0='KT1VDKRKID2GIYFPZIBNIR' where id=5; -update noar ti set v0='KT1VDKRKID2GIYFPZIBNIR' where id=5; -update noar tt set b0='SRO76FHS821' where id=5; -update noar ti set b0='SRO76FHS821' where id=5; -update noar tt set v0='LZBN4' where id=5; -update noar ti set v0='LZBN4' where id=5; -update noar tt set b1='CH4V1NSX5MFNL5EKE3' where id=5; -update noar ti set b1='CH4V1NSX5MFNL5EKE3' where id=5; -update noar tt set v0='AHRNJU17953C9QOMAT8M4G' where id=5; -update noar ti set v0='AHRNJU17953C9QOMAT8M4G' where id=5; -update noar tt set b2='1VEF06B8MB0ZPUHL3ZTVO' where id=5; -update noar ti set b2='1VEF06B8MB0ZPUHL3ZTVO' where id=5; -update noar tt set v0='X1CN2P4TZRFU3S59CPVB37O0VSFU2' where id=6; -update noar ti set v0='X1CN2P4TZRFU3S59CPVB37O0VSFU2' where id=6; -update noar tt set b0='MR' where id=6; -update noar ti set b0='MR' where id=6; -update noar tt set v0='JYWJ9E6W7X0LW79HZEN5QBBUSXC' where id=6; -update noar ti set v0='JYWJ9E6W7X0LW79HZEN5QBBUSXC' where id=6; -update noar tt set b1='XQ61ZO1AA1' where id=6; -update noar ti set b1='XQ61ZO1AA1' where id=6; -update noar tt set v0='CY1EDINWIJM6' where id=6; -update noar ti set v0='CY1EDINWIJM6' where id=6; -update noar tt set b2='3HO4T8ZLAXRSS16JF0M5VVK' where id=6; -update noar ti set b2='3HO4T8ZLAXRSS16JF0M5VVK' where id=6; -update noar tt set v0='HFI7E' where id=7; -update noar ti set v0='HFI7E' where id=7; -update noar tt set b0='E03D44VII94OE' where id=7; -update noar ti set b0='E03D44VII94OE' where id=7; -update noar tt set v0='NYTIDO7WO28479GZSMDW57NK4KE' where id=7; -update noar ti set v0='NYTIDO7WO28479GZSMDW57NK4KE' where id=7; -update noar tt set b1='IOD9URKZHINI8ZSSJEOX40GJ' where id=7; -update noar ti set b1='IOD9URKZHINI8ZSSJEOX40GJ' where id=7; -update noar tt set v0='S3Q0QEVQTNMZ' where id=7; -update noar ti set v0='S3Q0QEVQTNMZ' where id=7; -update noar tt set b2='ZK0LEYQPAXVRWGKUAI6SBBALX' where id=7; -update noar ti set b2='ZK0LEYQPAXVRWGKUAI6SBBALX' where id=7; -update noar tt set v0='QL1QUU44' where id=8; -update noar ti set v0='QL1QUU44' where id=8; -update noar tt set b0='NCGAILC2C6ABFG7Q5QATOO5KC16UMQ17' where id=8; -update noar ti set b0='NCGAILC2C6ABFG7Q5QATOO5KC16UMQ17' where id=8; -update noar tt set v0='5LFBKA' where id=8; -update noar ti set v0='5LFBKA' where id=8; -update noar tt set b1='O365AOJKCSIP1IEZB' where id=8; -update noar ti set b1='O365AOJKCSIP1IEZB' where id=8; -update noar tt set v0='VMTEZC0UMZTVVPJ31MQ6R' where id=8; -update noar ti set v0='VMTEZC0UMZTVVPJ31MQ6R' where id=8; -update noar tt set b2='2' where id=8; -update noar ti set b2='2' where id=8; -update noar tt set v0='CHC3WS3NQ8E3' where id=9; -update noar ti set v0='CHC3WS3NQ8E3' where id=9; -update noar tt set b0='7AJCETSRWGD6INIGZ0ETKQ' where id=9; -update noar ti set b0='7AJCETSRWGD6INIGZ0ETKQ' where id=9; -update noar tt set v0='QW1L77S5' where id=9; -update noar ti set v0='QW1L77S5' where id=9; -update noar tt set b1='2ACU3T' where id=9; -update noar ti set b1='2ACU3T' where id=9; -update noar tt set v0='RGT9TSQ50O5MA7FZ9HBPFE0GT6N' where id=9; -update noar ti set v0='RGT9TSQ50O5MA7FZ9HBPFE0GT6N' where id=9; -update noar tt set b2='DXD97YPLYBJ' where id=9; -update noar ti set b2='DXD97YPLYBJ' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 blob not null, - b1 blob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='YGQ0JB2U5WQP3AOI78TAV1L54F' where id=1; -update noar ti set v0='YGQ0JB2U5WQP3AOI78TAV1L54F' where id=1; -update noar tt set b0='K9Z646ATX1QJR6WKRVREPNSX' where id=1; -update noar ti set b0='K9Z646ATX1QJR6WKRVREPNSX' where id=1; -update noar tt set v0='F15NQZ' where id=1; -update noar ti set v0='F15NQZ' where id=1; -update noar tt set b1='ZH7957RP7K43J' where id=1; -update noar ti set b1='ZH7957RP7K43J' where id=1; -update noar tt set v0='3LR25MEL4' where id=1; -update noar ti set v0='3LR25MEL4' where id=1; -update noar tt set b2='9XN23HFBHAIVKQXQYV7ASFV' where id=1; -update noar ti set b2='9XN23HFBHAIVKQXQYV7ASFV' where id=1; -update noar tt set v0='YIEZTCQT09MP7597Q5JILSFYDDQ8KX' where id=2; -update noar ti set v0='YIEZTCQT09MP7597Q5JILSFYDDQ8KX' where id=2; -update noar tt set b0='RWP06VGLOSO961230YW3XTMTO6AO' where id=2; -update noar ti set b0='RWP06VGLOSO961230YW3XTMTO6AO' where id=2; -update noar tt set v0='FLHB82P5OG6T6LQ' where id=2; -update noar ti set v0='FLHB82P5OG6T6LQ' where id=2; -update noar tt set b1='0H5LMX5FF8VNCM6ACJPIKB' where id=2; -update noar ti set b1='0H5LMX5FF8VNCM6ACJPIKB' where id=2; -update noar tt set v0='CXQA3H1Z3G' where id=2; -update noar ti set v0='CXQA3H1Z3G' where id=2; -update noar tt set b2='A1KB1JFTR6O12F' where id=2; -update noar ti set b2='A1KB1JFTR6O12F' where id=2; -update noar tt set v0='E' where id=3; -update noar ti set v0='E' where id=3; -update noar tt set b0='CF' where id=3; -update noar ti set b0='CF' where id=3; -update noar tt set v0='KWS7WHHSQO584TOY2P7B9WRK9585ALZW' where id=3; -update noar ti set v0='KWS7WHHSQO584TOY2P7B9WRK9585ALZW' where id=3; -update noar tt set b1='ZLVRSZ9XGTP6ZNE3UF22VWW2' where id=3; -update noar ti set b1='ZLVRSZ9XGTP6ZNE3UF22VWW2' where id=3; -update noar tt set v0='5GL5' where id=3; -update noar ti set v0='5GL5' where id=3; -update noar tt set b2='E1JGP9CR98X4G' where id=3; -update noar ti set b2='E1JGP9CR98X4G' where id=3; -update noar tt set v0='LMEU0' where id=4; -update noar ti set v0='LMEU0' where id=4; -update noar tt set b0='QTYV3THLM0ERNESBDQC' where id=4; -update noar ti set b0='QTYV3THLM0ERNESBDQC' where id=4; -update noar tt set v0='4LDB03DGA090H40EF889SPK4EA' where id=4; -update noar ti set v0='4LDB03DGA090H40EF889SPK4EA' where id=4; -update noar tt set b1='9T7KL3YP2I6H0ITFE0QBPX' where id=4; -update noar ti set b1='9T7KL3YP2I6H0ITFE0QBPX' where id=4; -update noar tt set v0='XQAMQP15NHRP' where id=4; -update noar ti set v0='XQAMQP15NHRP' where id=4; -update noar tt set b2='IJZKGPFH1AA8SX2W4S1LLRRU6N' where id=4; -update noar ti set b2='IJZKGPFH1AA8SX2W4S1LLRRU6N' where id=4; -update noar tt set v0='VHLJMC20' where id=5; -update noar ti set v0='VHLJMC20' where id=5; -update noar tt set b0='VRLKYSSI' where id=5; -update noar ti set b0='VRLKYSSI' where id=5; -update noar tt set v0='3ZAF4NUA9ACL1T524EJDKZXUJJE7SE' where id=5; -update noar ti set v0='3ZAF4NUA9ACL1T524EJDKZXUJJE7SE' where id=5; -update noar tt set b1='7GXQ6SS0TSCSTY4E7IYFPX1' where id=5; -update noar ti set b1='7GXQ6SS0TSCSTY4E7IYFPX1' where id=5; -update noar tt set v0='KKOXIJXRR' where id=5; -update noar ti set v0='KKOXIJXRR' where id=5; -update noar tt set b2='T1EAV5PTEGWFZ' where id=5; -update noar ti set b2='T1EAV5PTEGWFZ' where id=5; -update noar tt set v0='F93EJF' where id=6; -update noar ti set v0='F93EJF' where id=6; -update noar tt set b0='7BENK' where id=6; -update noar ti set b0='7BENK' where id=6; -update noar tt set v0='NB6O0J' where id=6; -update noar ti set v0='NB6O0J' where id=6; -update noar tt set b1='S12' where id=6; -update noar ti set b1='S12' where id=6; -update noar tt set v0='LIGUYF8WNQGO7AQ3OCTWZ16CVNDJACCJ' where id=6; -update noar ti set v0='LIGUYF8WNQGO7AQ3OCTWZ16CVNDJACCJ' where id=6; -update noar tt set b2='4MUPNZTJRJNR' where id=6; -update noar ti set b2='4MUPNZTJRJNR' where id=6; -update noar tt set v0='T' where id=7; -update noar ti set v0='T' where id=7; -update noar tt set b0='L5PB8ON8PV3HW6WU967LO' where id=7; -update noar ti set b0='L5PB8ON8PV3HW6WU967LO' where id=7; -update noar tt set v0='R8AABML7ODOJOYVNI' where id=7; -update noar ti set v0='R8AABML7ODOJOYVNI' where id=7; -update noar tt set b1='IQR4KF3CQK' where id=7; -update noar ti set b1='IQR4KF3CQK' where id=7; -update noar tt set v0='8JTV0AA7PEXBY48CG' where id=7; -update noar ti set v0='8JTV0AA7PEXBY48CG' where id=7; -update noar tt set b2='HB49T79' where id=7; -update noar ti set b2='HB49T79' where id=7; -update noar tt set v0='LY5P5T7YJU0SJL13D390H8CHZ601' where id=8; -update noar ti set v0='LY5P5T7YJU0SJL13D390H8CHZ601' where id=8; -update noar tt set b0='AIS2KY6M' where id=8; -update noar ti set b0='AIS2KY6M' where id=8; -update noar tt set v0='WX8PPQ2EH5WMJY3KG08Z5F6X' where id=8; -update noar ti set v0='WX8PPQ2EH5WMJY3KG08Z5F6X' where id=8; -update noar tt set b1='TGAX97F6VW9' where id=8; -update noar ti set b1='TGAX97F6VW9' where id=8; -update noar tt set v0='WT3FTBFX3S7R833T7LZDMOA' where id=8; -update noar ti set v0='WT3FTBFX3S7R833T7LZDMOA' where id=8; -update noar tt set b2='P6MR6U788NSSRLOGQNT8UA3' where id=8; -update noar ti set b2='P6MR6U788NSSRLOGQNT8UA3' where id=8; -update noar tt set v0='P7JBAQDXAS66S7GB1UE9LUJR' where id=9; -update noar ti set v0='P7JBAQDXAS66S7GB1UE9LUJR' where id=9; -update noar tt set b0='DNVC44B0NZSYIU8XFCLF3X8ZYRI' where id=9; -update noar ti set b0='DNVC44B0NZSYIU8XFCLF3X8ZYRI' where id=9; -update noar tt set v0='E03P' where id=9; -update noar ti set v0='E03P' where id=9; -update noar tt set b1='R7SUMSY3KCAMODTJT54' where id=9; -update noar ti set b1='R7SUMSY3KCAMODTJT54' where id=9; -update noar tt set v0='LITW0FBL69AGSICB' where id=9; -update noar ti set v0='LITW0FBL69AGSICB' where id=9; -update noar tt set b2='QZF1CCV15' where id=9; -update noar ti set b2='QZF1CCV15' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 blob not null, - b1 blob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='WEICMI03B3L98HEG2L' where id=1; -update noar ti set v0='WEICMI03B3L98HEG2L' where id=1; -update noar tt set b0='6DUO87IOTWL987PVGN' where id=1; -update noar ti set b0='6DUO87IOTWL987PVGN' where id=1; -update noar tt set v0='O' where id=1; -update noar ti set v0='O' where id=1; -update noar tt set b1='AFFTHSXH4G44A10XW3ORQC9GSZW2U' where id=1; -update noar ti set b1='AFFTHSXH4G44A10XW3ORQC9GSZW2U' where id=1; -update noar tt set v0='LJBP5E' where id=1; -update noar ti set v0='LJBP5E' where id=1; -update noar tt set b2='LFQPB3FG75R0A89U79BQVZ31L6' where id=1; -update noar ti set b2='LFQPB3FG75R0A89U79BQVZ31L6' where id=1; -update noar tt set v0='H262AYQFXYGGPYW9BNA3TQG' where id=2; -update noar ti set v0='H262AYQFXYGGPYW9BNA3TQG' where id=2; -update noar tt set b0='AKU2N7SPSW5NEIGX2NDQIU8VGHEKMQ' where id=2; -update noar ti set b0='AKU2N7SPSW5NEIGX2NDQIU8VGHEKMQ' where id=2; -update noar tt set v0='N2BU8AR00M9E9N20W4G' where id=2; -update noar ti set v0='N2BU8AR00M9E9N20W4G' where id=2; -update noar tt set b1='B2GZW25XHG4Q32CCDLXF1' where id=2; -update noar ti set b1='B2GZW25XHG4Q32CCDLXF1' where id=2; -update noar tt set v0='2MM6KGL6EPGPXAL1M6' where id=2; -update noar ti set v0='2MM6KGL6EPGPXAL1M6' where id=2; -update noar tt set b2='AIGM3DHPG' where id=2; -update noar ti set b2='AIGM3DHPG' where id=2; -update noar tt set v0='J5AYDH8CYWIZK4' where id=3; -update noar ti set v0='J5AYDH8CYWIZK4' where id=3; -update noar tt set b0='PESZFGHN2OD2243NJ' where id=3; -update noar ti set b0='PESZFGHN2OD2243NJ' where id=3; -update noar tt set v0='DWTK5RGZB5P01THT' where id=3; -update noar ti set v0='DWTK5RGZB5P01THT' where id=3; -update noar tt set b1='UYW2775ZWE' where id=3; -update noar ti set b1='UYW2775ZWE' where id=3; -update noar tt set v0='3LAORLB9SSFKE2M7SQT99P' where id=3; -update noar ti set v0='3LAORLB9SSFKE2M7SQT99P' where id=3; -update noar tt set b2='AK3POI66ZGAX5R0ZFIOZF3B4NKW' where id=3; -update noar ti set b2='AK3POI66ZGAX5R0ZFIOZF3B4NKW' where id=3; -update noar tt set v0='CGQLK3UOOB30HNV3DRWI' where id=4; -update noar ti set v0='CGQLK3UOOB30HNV3DRWI' where id=4; -update noar tt set b0='K1' where id=4; -update noar ti set b0='K1' where id=4; -update noar tt set v0='PJX9HD71S6JTT8F8B77' where id=4; -update noar ti set v0='PJX9HD71S6JTT8F8B77' where id=4; -update noar tt set b1='A3HEWLX' where id=4; -update noar ti set b1='A3HEWLX' where id=4; -update noar tt set v0='YV1KF967659I5VVU8J1SU5MI5' where id=4; -update noar ti set v0='YV1KF967659I5VVU8J1SU5MI5' where id=4; -update noar tt set b2='WXW0B8ABCTL2SOFHOKQ' where id=4; -update noar ti set b2='WXW0B8ABCTL2SOFHOKQ' where id=4; -update noar tt set v0='L2WWV5SC' where id=5; -update noar ti set v0='L2WWV5SC' where id=5; -update noar tt set b0='M4FV' where id=5; -update noar ti set b0='M4FV' where id=5; -update noar tt set v0='9XH7VB9' where id=5; -update noar ti set v0='9XH7VB9' where id=5; -update noar tt set b1='VEVE' where id=5; -update noar ti set b1='VEVE' where id=5; -update noar tt set v0='REIA2RJDX3XP6BTQNG3P6XX5' where id=5; -update noar ti set v0='REIA2RJDX3XP6BTQNG3P6XX5' where id=5; -update noar tt set b2='RK22WIFGCQG9FYJ' where id=5; -update noar ti set b2='RK22WIFGCQG9FYJ' where id=5; -update noar tt set v0='6K' where id=6; -update noar ti set v0='6K' where id=6; -update noar tt set b0='KB6CI88G3IV8B4EP' where id=6; -update noar ti set b0='KB6CI88G3IV8B4EP' where id=6; -update noar tt set v0='0RDYG9FPW05KCZPT7JU' where id=6; -update noar ti set v0='0RDYG9FPW05KCZPT7JU' where id=6; -update noar tt set b1='ZSPAC2N1H3QOIEOVG' where id=6; -update noar ti set b1='ZSPAC2N1H3QOIEOVG' where id=6; -update noar tt set v0='D4BENW98MZEFV' where id=6; -update noar ti set v0='D4BENW98MZEFV' where id=6; -update noar tt set b2='ABKJ21KKF1WK191I' where id=6; -update noar ti set b2='ABKJ21KKF1WK191I' where id=6; -update noar tt set v0='EN3' where id=7; -update noar ti set v0='EN3' where id=7; -update noar tt set b0='FXVSZJXYKB' where id=7; -update noar ti set b0='FXVSZJXYKB' where id=7; -update noar tt set v0='CF918YZ2W0' where id=7; -update noar ti set v0='CF918YZ2W0' where id=7; -update noar tt set b1='94ZRG18SR29B44V69LZU2X77PE8T' where id=7; -update noar ti set b1='94ZRG18SR29B44V69LZU2X77PE8T' where id=7; -update noar tt set v0='7LA68AXM8QMVTMHNKN9G' where id=7; -update noar ti set v0='7LA68AXM8QMVTMHNKN9G' where id=7; -update noar tt set b2='2GHN46O2G0' where id=7; -update noar ti set b2='2GHN46O2G0' where id=7; -update noar tt set v0='KPHU03G4BDOUEWSSZJ7N08K' where id=8; -update noar ti set v0='KPHU03G4BDOUEWSSZJ7N08K' where id=8; -update noar tt set b0='VPDN7E4SXBP5' where id=8; -update noar ti set b0='VPDN7E4SXBP5' where id=8; -update noar tt set v0='6JWITICLBUK1PU0SEU2XOD8538' where id=8; -update noar ti set v0='6JWITICLBUK1PU0SEU2XOD8538' where id=8; -update noar tt set b1='RMMAL69OVAZJUC1QDZ0V82VWC6WNFNE' where id=8; -update noar ti set b1='RMMAL69OVAZJUC1QDZ0V82VWC6WNFNE' where id=8; -update noar tt set v0='Q197C245' where id=8; -update noar ti set v0='Q197C245' where id=8; -update noar tt set b2='K1C2F06PJKN687FQ0LO9W38GQQ' where id=8; -update noar ti set b2='K1C2F06PJKN687FQ0LO9W38GQQ' where id=8; -update noar tt set v0='MW3M6R6SB4U0ZADS02L7E0PNLW5N' where id=9; -update noar ti set v0='MW3M6R6SB4U0ZADS02L7E0PNLW5N' where id=9; -update noar tt set b0='G2V3QF13J88JYTL76MZOC' where id=9; -update noar ti set b0='G2V3QF13J88JYTL76MZOC' where id=9; -update noar tt set v0='FFK755MQG83UXHPPQLZU3F' where id=9; -update noar ti set v0='FFK755MQG83UXHPPQLZU3F' where id=9; -update noar tt set b1='SEPB2RFI9XZZN' where id=9; -update noar ti set b1='SEPB2RFI9XZZN' where id=9; -update noar tt set v0='ISRWP16H8N7O6T9T' where id=9; -update noar ti set v0='ISRWP16H8N7O6T9T' where id=9; -update noar tt set b2='YB4K6JSOUDVCTKXTA9Y23R9GDGHH' where id=9; -update noar ti set b2='YB4K6JSOUDVCTKXTA9Y23R9GDGHH' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 blob null, - b1 blob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='20WYF4OVZC3W7ICNW7CMKR571' where id=1; -update noar ti set v0='20WYF4OVZC3W7ICNW7CMKR571' where id=1; -update noar tt set b0='9H2D4OJIYMHTFJAOCI4PS75IZDE0B' where id=1; -update noar ti set b0='9H2D4OJIYMHTFJAOCI4PS75IZDE0B' where id=1; -update noar tt set v0='OH9U48T51CRSUE4ROORVXK5VPTD4' where id=1; -update noar ti set v0='OH9U48T51CRSUE4ROORVXK5VPTD4' where id=1; -update noar tt set b1='QOC3OBIOE3C2RB4LDOSO93RA267UNADV' where id=1; -update noar ti set b1='QOC3OBIOE3C2RB4LDOSO93RA267UNADV' where id=1; -update noar tt set v0='SNOK4' where id=1; -update noar ti set v0='SNOK4' where id=1; -update noar tt set b2='9HQLKNJA8J2D4R61ZQLFBEPDMZUC2H' where id=1; -update noar ti set b2='9HQLKNJA8J2D4R61ZQLFBEPDMZUC2H' where id=1; -update noar tt set v0='4797V' where id=2; -update noar ti set v0='4797V' where id=2; -update noar tt set b0='FRZ1PL9ZEAPB6H7OCGTG657MYW' where id=2; -update noar ti set b0='FRZ1PL9ZEAPB6H7OCGTG657MYW' where id=2; -update noar tt set v0='K052U605V76IRE9YFNKUUQ2HA7P' where id=2; -update noar ti set v0='K052U605V76IRE9YFNKUUQ2HA7P' where id=2; -update noar tt set b1='RZ8WM6EC0ESPB6EL' where id=2; -update noar ti set b1='RZ8WM6EC0ESPB6EL' where id=2; -update noar tt set v0='WUD2BQVLW8TJB6RNRTM59S6QM' where id=2; -update noar ti set v0='WUD2BQVLW8TJB6RNRTM59S6QM' where id=2; -update noar tt set b2='NBXF9I' where id=2; -update noar ti set b2='NBXF9I' where id=2; -update noar tt set v0='M' where id=3; -update noar ti set v0='M' where id=3; -update noar tt set b0='4FC3TGX' where id=3; -update noar ti set b0='4FC3TGX' where id=3; -update noar tt set v0='RNDPDUJ9KY97L2K5QFSI' where id=3; -update noar ti set v0='RNDPDUJ9KY97L2K5QFSI' where id=3; -update noar tt set b1='LQPQIAKV4HSUE4KDZEF8WPAWBYIRAW4B' where id=3; -update noar ti set b1='LQPQIAKV4HSUE4KDZEF8WPAWBYIRAW4B' where id=3; -update noar tt set v0='DRF5NSSJKMHQX8N935J35IF6' where id=3; -update noar ti set v0='DRF5NSSJKMHQX8N935J35IF6' where id=3; -update noar tt set b2='08S89K' where id=3; -update noar ti set b2='08S89K' where id=3; -update noar tt set v0='N2QWTZQIEQ85T0GXCI89G5A530SQ4' where id=4; -update noar ti set v0='N2QWTZQIEQ85T0GXCI89G5A530SQ4' where id=4; -update noar tt set b0='8H1P97YTNKX2BE3V51MN' where id=4; -update noar ti set b0='8H1P97YTNKX2BE3V51MN' where id=4; -update noar tt set v0='Y5Z8A8B3KV1HL8SFA0GLESUM3AI' where id=4; -update noar ti set v0='Y5Z8A8B3KV1HL8SFA0GLESUM3AI' where id=4; -update noar tt set b1='RJ6P24YM8W9G149KTLIT6G9' where id=4; -update noar ti set b1='RJ6P24YM8W9G149KTLIT6G9' where id=4; -update noar tt set v0='Z7MV61DL' where id=4; -update noar ti set v0='Z7MV61DL' where id=4; -update noar tt set b2='MPOP' where id=4; -update noar ti set b2='MPOP' where id=4; -update noar tt set v0='UX4' where id=5; -update noar ti set v0='UX4' where id=5; -update noar tt set b0='HFS772M4M0W4BQL09N115' where id=5; -update noar ti set b0='HFS772M4M0W4BQL09N115' where id=5; -update noar tt set v0='83A2RFH69OWK4YP0T5OA' where id=5; -update noar ti set v0='83A2RFH69OWK4YP0T5OA' where id=5; -update noar tt set b1='P80W' where id=5; -update noar ti set b1='P80W' where id=5; -update noar tt set v0='5H8DBQ8EOU2U' where id=5; -update noar ti set v0='5H8DBQ8EOU2U' where id=5; -update noar tt set b2='YGCZF3VH1WG8' where id=5; -update noar ti set b2='YGCZF3VH1WG8' where id=5; -update noar tt set v0='LC4BVHX8Q25KZ5NUS39E' where id=6; -update noar ti set v0='LC4BVHX8Q25KZ5NUS39E' where id=6; -update noar tt set b0='HMVYQ6VCP95S5G90P01OLIJV' where id=6; -update noar ti set b0='HMVYQ6VCP95S5G90P01OLIJV' where id=6; -update noar tt set v0='R08VF3HA6705NIVD0PHW4S9P' where id=6; -update noar ti set v0='R08VF3HA6705NIVD0PHW4S9P' where id=6; -update noar tt set b1='42PJF0EFA' where id=6; -update noar ti set b1='42PJF0EFA' where id=6; -update noar tt set v0='NY4TGA' where id=6; -update noar ti set v0='NY4TGA' where id=6; -update noar tt set b2='9XNJ5DTCYUHV' where id=6; -update noar ti set b2='9XNJ5DTCYUHV' where id=6; -update noar tt set v0='W2DP003ZW806N3FHLR2K3PQGMM' where id=7; -update noar ti set v0='W2DP003ZW806N3FHLR2K3PQGMM' where id=7; -update noar tt set b0='WUQIBA2I1HGQZEP8AH6H8730Q7UOVW' where id=7; -update noar ti set b0='WUQIBA2I1HGQZEP8AH6H8730Q7UOVW' where id=7; -update noar tt set v0='QU231SYC3FQ' where id=7; -update noar ti set v0='QU231SYC3FQ' where id=7; -update noar tt set b1='5H3FK65AFOKCBL6ZBRTD' where id=7; -update noar ti set b1='5H3FK65AFOKCBL6ZBRTD' where id=7; -update noar tt set v0='U6EO4BTB1CR7IVE71GHAMG' where id=7; -update noar ti set v0='U6EO4BTB1CR7IVE71GHAMG' where id=7; -update noar tt set b2='WI8IT5RG1SHICDNTMZBMTQ29TC9' where id=7; -update noar ti set b2='WI8IT5RG1SHICDNTMZBMTQ29TC9' where id=7; -update noar tt set v0='589UC2IMSBCK' where id=8; -update noar ti set v0='589UC2IMSBCK' where id=8; -update noar tt set b0='O' where id=8; -update noar ti set b0='O' where id=8; -update noar tt set v0='0JNRUU4EVDK7ITO7IJ40UIIJ3JL69KXE' where id=8; -update noar ti set v0='0JNRUU4EVDK7ITO7IJ40UIIJ3JL69KXE' where id=8; -update noar tt set b1='M1HKEE4SEI7N58YR' where id=8; -update noar ti set b1='M1HKEE4SEI7N58YR' where id=8; -update noar tt set v0='FMVRV63WRLKYAQS1C8' where id=8; -update noar ti set v0='FMVRV63WRLKYAQS1C8' where id=8; -update noar tt set b2='8EMABSBI51DRJPM3FIVPG8' where id=8; -update noar ti set b2='8EMABSBI51DRJPM3FIVPG8' where id=8; -update noar tt set v0='XJQ5WO' where id=9; -update noar ti set v0='XJQ5WO' where id=9; -update noar tt set b0='L38YOPYFS1VGX42I3O7X6E1LY05DSZHM' where id=9; -update noar ti set b0='L38YOPYFS1VGX42I3O7X6E1LY05DSZHM' where id=9; -update noar tt set v0='OHSO' where id=9; -update noar ti set v0='OHSO' where id=9; -update noar tt set b1='G2DXHGYBKQDITAYZLLL8YTBC58' where id=9; -update noar ti set b1='G2DXHGYBKQDITAYZLLL8YTBC58' where id=9; -update noar tt set v0='ENWO39QDNPX1HYVK6MQ1ZWJB9OLOO6B' where id=9; -update noar ti set v0='ENWO39QDNPX1HYVK6MQ1ZWJB9OLOO6B' where id=9; -update noar tt set b2='XE0LZXXQQ6VUTA4CSISAOU' where id=9; -update noar ti set b2='XE0LZXXQQ6VUTA4CSISAOU' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 blob null, - b1 blob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='ND2PP77ECRKP' where id=1; -update noar ti set v0='ND2PP77ECRKP' where id=1; -update noar tt set b0='AWJGUS5J0RGJ3ABSQ2Q6' where id=1; -update noar ti set b0='AWJGUS5J0RGJ3ABSQ2Q6' where id=1; -update noar tt set v0='M04KC3DFO1PS5N2HFLHHE2DMVPQG' where id=1; -update noar ti set v0='M04KC3DFO1PS5N2HFLHHE2DMVPQG' where id=1; -update noar tt set b1='AITE7EW5422TEV' where id=1; -update noar ti set b1='AITE7EW5422TEV' where id=1; -update noar tt set v0='7KEOTRPA1IEU4FQ9ZTWX6L' where id=1; -update noar ti set v0='7KEOTRPA1IEU4FQ9ZTWX6L' where id=1; -update noar tt set b2='6ORWC6J418DSO6LRBSETEQTF8IPP' where id=1; -update noar ti set b2='6ORWC6J418DSO6LRBSETEQTF8IPP' where id=1; -update noar tt set v0='LDWX6DP5K6YU1TIJYJCGO2EW8K68' where id=2; -update noar ti set v0='LDWX6DP5K6YU1TIJYJCGO2EW8K68' where id=2; -update noar tt set b0='LXFP662OXMYLWX0C2WU9MEG9JXZW4Y' where id=2; -update noar ti set b0='LXFP662OXMYLWX0C2WU9MEG9JXZW4Y' where id=2; -update noar tt set v0='INXDX91X0OTNC7RNG' where id=2; -update noar ti set v0='INXDX91X0OTNC7RNG' where id=2; -update noar tt set b1='5NSNHDB4WERK81J4H' where id=2; -update noar ti set b1='5NSNHDB4WERK81J4H' where id=2; -update noar tt set v0='5R' where id=2; -update noar ti set v0='5R' where id=2; -update noar tt set b2='HW357HOGSMGCFD' where id=2; -update noar ti set b2='HW357HOGSMGCFD' where id=2; -update noar tt set v0='7HZTV' where id=3; -update noar ti set v0='7HZTV' where id=3; -update noar tt set b0='0D8Y5A10XZS5' where id=3; -update noar ti set b0='0D8Y5A10XZS5' where id=3; -update noar tt set v0='7FGKHAYR3VD' where id=3; -update noar ti set v0='7FGKHAYR3VD' where id=3; -update noar tt set b1='SP4P636SC5C5LUB88SEJBL6CGXL2SP' where id=3; -update noar ti set b1='SP4P636SC5C5LUB88SEJBL6CGXL2SP' where id=3; -update noar tt set v0='DDMN6XJ9SU1UWC2G7' where id=3; -update noar ti set v0='DDMN6XJ9SU1UWC2G7' where id=3; -update noar tt set b2='SRUU86A5' where id=3; -update noar ti set b2='SRUU86A5' where id=3; -update noar tt set v0='DF8ALNS0QGSWXU41MSQU5WVL5T0ID3' where id=4; -update noar ti set v0='DF8ALNS0QGSWXU41MSQU5WVL5T0ID3' where id=4; -update noar tt set b0='G' where id=4; -update noar ti set b0='G' where id=4; -update noar tt set v0='PPZD45M9LEUMTA165V5HTQVMBAR8PG16' where id=4; -update noar ti set v0='PPZD45M9LEUMTA165V5HTQVMBAR8PG16' where id=4; -update noar tt set b1='WR80AKGVKC7J925U1N0KTKHTFU' where id=4; -update noar ti set b1='WR80AKGVKC7J925U1N0KTKHTFU' where id=4; -update noar tt set v0='7MR0OY5K7' where id=4; -update noar ti set v0='7MR0OY5K7' where id=4; -update noar tt set b2='PJWOOMHF6BP0' where id=4; -update noar ti set b2='PJWOOMHF6BP0' where id=4; -update noar tt set v0='8ROI54VXJ' where id=5; -update noar ti set v0='8ROI54VXJ' where id=5; -update noar tt set b0='0C8UDPQA5VL6LSZGZNLFL8N6YEMCC' where id=5; -update noar ti set b0='0C8UDPQA5VL6LSZGZNLFL8N6YEMCC' where id=5; -update noar tt set v0='Y725NS0VBPBY' where id=5; -update noar ti set v0='Y725NS0VBPBY' where id=5; -update noar tt set b1='LD5IUFX5L737GGJAZ' where id=5; -update noar ti set b1='LD5IUFX5L737GGJAZ' where id=5; -update noar tt set v0='EQ6QX4ZH4T24HB4SFTG22FS' where id=5; -update noar ti set v0='EQ6QX4ZH4T24HB4SFTG22FS' where id=5; -update noar tt set b2='AJZA7' where id=5; -update noar ti set b2='AJZA7' where id=5; -update noar tt set v0='EFBN461325WFCE2PN6PNRRZPW1VCP' where id=6; -update noar ti set v0='EFBN461325WFCE2PN6PNRRZPW1VCP' where id=6; -update noar tt set b0='S5RI29RT8DN3QSP7WNNIIKBN2YMBQ4K' where id=6; -update noar ti set b0='S5RI29RT8DN3QSP7WNNIIKBN2YMBQ4K' where id=6; -update noar tt set v0='R1673BU9DVZLTM7SQR8W4OP39CD' where id=6; -update noar ti set v0='R1673BU9DVZLTM7SQR8W4OP39CD' where id=6; -update noar tt set b1='P5IPF01TNVJDQQB4ML7W' where id=6; -update noar ti set b1='P5IPF01TNVJDQQB4ML7W' where id=6; -update noar tt set v0='R19TN5' where id=6; -update noar ti set v0='R19TN5' where id=6; -update noar tt set b2='SD' where id=6; -update noar ti set b2='SD' where id=6; -update noar tt set v0='9YGI8PSBUCN0S05Y' where id=7; -update noar ti set v0='9YGI8PSBUCN0S05Y' where id=7; -update noar tt set b0='7' where id=7; -update noar ti set b0='7' where id=7; -update noar tt set v0='AUD2YEM25JORQFIZ98TSWJI' where id=7; -update noar ti set v0='AUD2YEM25JORQFIZ98TSWJI' where id=7; -update noar tt set b1='6FQ' where id=7; -update noar ti set b1='6FQ' where id=7; -update noar tt set v0='4YZ3R6D9P26L199FHJ' where id=7; -update noar ti set v0='4YZ3R6D9P26L199FHJ' where id=7; -update noar tt set b2='SKEEMR1W5HXDVT' where id=7; -update noar ti set b2='SKEEMR1W5HXDVT' where id=7; -update noar tt set v0='UFGAKOCKO1YUMQISY3IM9CZ2FS5UMF' where id=8; -update noar ti set v0='UFGAKOCKO1YUMQISY3IM9CZ2FS5UMF' where id=8; -update noar tt set b0='SF2EAXMCDJLGK27R' where id=8; -update noar ti set b0='SF2EAXMCDJLGK27R' where id=8; -update noar tt set v0='G48Y' where id=8; -update noar ti set v0='G48Y' where id=8; -update noar tt set b1='79615FMJ4CX2LUC6CLKO8I' where id=8; -update noar ti set b1='79615FMJ4CX2LUC6CLKO8I' where id=8; -update noar tt set v0='7WEESB35FNXUWSQPZ366AC03KB9SU' where id=8; -update noar ti set v0='7WEESB35FNXUWSQPZ366AC03KB9SU' where id=8; -update noar tt set b2='QN9Y9BW58HI5FMNQQZ7N9QPLTSS' where id=8; -update noar ti set b2='QN9Y9BW58HI5FMNQQZ7N9QPLTSS' where id=8; -update noar tt set v0='CHYCYP1BCMAM4E6PBCB2R9KQ' where id=9; -update noar ti set v0='CHYCYP1BCMAM4E6PBCB2R9KQ' where id=9; -update noar tt set b0='FEPD1UGN0Y' where id=9; -update noar ti set b0='FEPD1UGN0Y' where id=9; -update noar tt set v0='0BAHVCLWR3NR' where id=9; -update noar ti set v0='0BAHVCLWR3NR' where id=9; -update noar tt set b1='8EZNK8WJMAW' where id=9; -update noar ti set b1='8EZNK8WJMAW' where id=9; -update noar tt set v0='FUB3OLP3CV68U6FA4NX' where id=9; -update noar ti set v0='FUB3OLP3CV68U6FA4NX' where id=9; -update noar tt set b2='0AEBIN4G49NDO' where id=9; -update noar ti set b2='0AEBIN4G49NDO' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 blob not null, - b1 blob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='Y602IAFU4ZDN78RFKC910' where id=1; -update noar ti set v0='Y602IAFU4ZDN78RFKC910' where id=1; -update noar tt set b0='1WEZPKHBDRDBPGSPUPR' where id=1; -update noar ti set b0='1WEZPKHBDRDBPGSPUPR' where id=1; -update noar tt set v0='26VMS6SDST8YQZTVKXMMHQ7Z6HV' where id=1; -update noar ti set v0='26VMS6SDST8YQZTVKXMMHQ7Z6HV' where id=1; -update noar tt set b1='AGF46JL01951ANG' where id=1; -update noar ti set b1='AGF46JL01951ANG' where id=1; -update noar tt set v0='VV9ITRDQ43CPY81D47P' where id=1; -update noar ti set v0='VV9ITRDQ43CPY81D47P' where id=1; -update noar tt set b2='XXH54NGZK49' where id=1; -update noar ti set b2='XXH54NGZK49' where id=1; -update noar tt set v0='ZMD7XTC' where id=2; -update noar ti set v0='ZMD7XTC' where id=2; -update noar tt set b0='0F61L1IXU' where id=2; -update noar ti set b0='0F61L1IXU' where id=2; -update noar tt set v0='FUACLUGQSAQ0461TRQ9' where id=2; -update noar ti set v0='FUACLUGQSAQ0461TRQ9' where id=2; -update noar tt set b1='PQV2O' where id=2; -update noar ti set b1='PQV2O' where id=2; -update noar tt set v0='H9PBXDDZG' where id=2; -update noar ti set v0='H9PBXDDZG' where id=2; -update noar tt set b2='DGJQSVSGACPE1JEH5SS8GBS6ZO0O7' where id=2; -update noar ti set b2='DGJQSVSGACPE1JEH5SS8GBS6ZO0O7' where id=2; -update noar tt set v0='OM' where id=3; -update noar ti set v0='OM' where id=3; -update noar tt set b0='0' where id=3; -update noar ti set b0='0' where id=3; -update noar tt set v0='VTKANW1WR4P9' where id=3; -update noar ti set v0='VTKANW1WR4P9' where id=3; -update noar tt set b1='KW2J2MJWNBSBLNQ' where id=3; -update noar ti set b1='KW2J2MJWNBSBLNQ' where id=3; -update noar tt set v0='W8CJCJDJNBAUWHFS' where id=3; -update noar ti set v0='W8CJCJDJNBAUWHFS' where id=3; -update noar tt set b2='HWDEO4NV0OQ46E0LT2LJULKBM' where id=3; -update noar ti set b2='HWDEO4NV0OQ46E0LT2LJULKBM' where id=3; -update noar tt set v0='B7OCMXRZTOV2QOBTLDSEULY23' where id=4; -update noar ti set v0='B7OCMXRZTOV2QOBTLDSEULY23' where id=4; -update noar tt set b0='ZC5LORFU6EZZH' where id=4; -update noar ti set b0='ZC5LORFU6EZZH' where id=4; -update noar tt set v0='Q5RGPI7S6OBRR3TLPYF' where id=4; -update noar ti set v0='Q5RGPI7S6OBRR3TLPYF' where id=4; -update noar tt set b1='DR1CIWPF' where id=4; -update noar ti set b1='DR1CIWPF' where id=4; -update noar tt set v0='2SK1C87QMNM5' where id=4; -update noar ti set v0='2SK1C87QMNM5' where id=4; -update noar tt set b2='4UX85IYKL4B5V9ASAY8KJ2WRS5' where id=4; -update noar ti set b2='4UX85IYKL4B5V9ASAY8KJ2WRS5' where id=4; -update noar tt set v0='OBE2ER96KB6GW1YBRKW33PWH894JU' where id=5; -update noar ti set v0='OBE2ER96KB6GW1YBRKW33PWH894JU' where id=5; -update noar tt set b0='QMMXYETWO70KSQ88ZYIQT6IKTMNG3MW' where id=5; -update noar ti set b0='QMMXYETWO70KSQ88ZYIQT6IKTMNG3MW' where id=5; -update noar tt set v0='MSNMKQHF3TED9HLBN42YW628JNBCI4' where id=5; -update noar ti set v0='MSNMKQHF3TED9HLBN42YW628JNBCI4' where id=5; -update noar tt set b1='U3C3ZOM8OOM3VE0G855G' where id=5; -update noar ti set b1='U3C3ZOM8OOM3VE0G855G' where id=5; -update noar tt set v0='EZWMH1SXQU2M0K15HD0VQQMA' where id=5; -update noar ti set v0='EZWMH1SXQU2M0K15HD0VQQMA' where id=5; -update noar tt set b2='HNLDRQ6XQANK' where id=5; -update noar ti set b2='HNLDRQ6XQANK' where id=5; -update noar tt set v0='YERRW4C40' where id=6; -update noar ti set v0='YERRW4C40' where id=6; -update noar tt set b0='JD' where id=6; -update noar ti set b0='JD' where id=6; -update noar tt set v0='2MKYHYMVEGZSEWCMGRX6SQ332' where id=6; -update noar ti set v0='2MKYHYMVEGZSEWCMGRX6SQ332' where id=6; -update noar tt set b1='4DMB6ETH6JRGK' where id=6; -update noar ti set b1='4DMB6ETH6JRGK' where id=6; -update noar tt set v0='U19I' where id=6; -update noar ti set v0='U19I' where id=6; -update noar tt set b2='DMK2D8UL0E8HG166743YVX65' where id=6; -update noar ti set b2='DMK2D8UL0E8HG166743YVX65' where id=6; -update noar tt set v0='EPZXTZLOFL7MJYZHASYJ50D7FQY0D8' where id=7; -update noar ti set v0='EPZXTZLOFL7MJYZHASYJ50D7FQY0D8' where id=7; -update noar tt set b0='1CVRAPLY6DEO1CGHDLI47TL27' where id=7; -update noar ti set b0='1CVRAPLY6DEO1CGHDLI47TL27' where id=7; -update noar tt set v0='LONEE2W' where id=7; -update noar ti set v0='LONEE2W' where id=7; -update noar tt set b1='BDB8IMMBELQQQ3U53CQJ0PQZ1' where id=7; -update noar ti set b1='BDB8IMMBELQQQ3U53CQJ0PQZ1' where id=7; -update noar tt set v0='4Y3VQ9IUUJTLB8K8IXY2W' where id=7; -update noar ti set v0='4Y3VQ9IUUJTLB8K8IXY2W' where id=7; -update noar tt set b2='MO02Y7TMQZTN0E5HJQYMQ77IKM9TRYJA' where id=7; -update noar ti set b2='MO02Y7TMQZTN0E5HJQYMQ77IKM9TRYJA' where id=7; -update noar tt set v0='HLFPC18TE' where id=8; -update noar ti set v0='HLFPC18TE' where id=8; -update noar tt set b0='7B4MBS' where id=8; -update noar ti set b0='7B4MBS' where id=8; -update noar tt set v0='6GEOBRTASR9T3XNICD3E4M3XMFK' where id=8; -update noar ti set v0='6GEOBRTASR9T3XNICD3E4M3XMFK' where id=8; -update noar tt set b1='MM55K8J' where id=8; -update noar ti set b1='MM55K8J' where id=8; -update noar tt set v0='2CJ2VPETM3A64GUYYHGY9Z' where id=8; -update noar ti set v0='2CJ2VPETM3A64GUYYHGY9Z' where id=8; -update noar tt set b2='5YCQKAAXI8RLSAZSFDK612VDCVYXLB' where id=8; -update noar ti set b2='5YCQKAAXI8RLSAZSFDK612VDCVYXLB' where id=8; -update noar tt set v0='LOPMIAGSDUKTNSUJRPFFE3ZKTD2WUA' where id=9; -update noar ti set v0='LOPMIAGSDUKTNSUJRPFFE3ZKTD2WUA' where id=9; -update noar tt set b0='ZU6G05GKVVNCIW9BM87K6B6CVJ6' where id=9; -update noar ti set b0='ZU6G05GKVVNCIW9BM87K6B6CVJ6' where id=9; -update noar tt set v0='K' where id=9; -update noar ti set v0='K' where id=9; -update noar tt set b1='NUZV4K9AOKB' where id=9; -update noar ti set b1='NUZV4K9AOKB' where id=9; -update noar tt set v0='47TOGYQK' where id=9; -update noar ti set v0='47TOGYQK' where id=9; -update noar tt set b2='LMYQM002USXZKSLI466Y68XBFOR' where id=9; -update noar ti set b2='LMYQM002USXZKSLI466Y68XBFOR' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 blob not null, - b1 blob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='Q2A0INT9CK6QMP6LL3PHNN' where id=1; -update noar ti set v0='Q2A0INT9CK6QMP6LL3PHNN' where id=1; -update noar tt set b0='1NI8FRDSA4V32GG2V0C7877BXOVTPM' where id=1; -update noar ti set b0='1NI8FRDSA4V32GG2V0C7877BXOVTPM' where id=1; -update noar tt set v0='EJ43F8SBKH2OTTPFA' where id=1; -update noar ti set v0='EJ43F8SBKH2OTTPFA' where id=1; -update noar tt set b1='2U3EPQ0WU4PE' where id=1; -update noar ti set b1='2U3EPQ0WU4PE' where id=1; -update noar tt set v0='W1QJBHTGNZLMEAMT2ERYME7XHK1WGG' where id=1; -update noar ti set v0='W1QJBHTGNZLMEAMT2ERYME7XHK1WGG' where id=1; -update noar tt set b2='4GSFWL0H53KY7UMW3EEW66DU1NUS1IKN' where id=1; -update noar ti set b2='4GSFWL0H53KY7UMW3EEW66DU1NUS1IKN' where id=1; -update noar tt set v0='I61GXFOICHK' where id=2; -update noar ti set v0='I61GXFOICHK' where id=2; -update noar tt set b0='6EVWABNCX9XUBJM' where id=2; -update noar ti set b0='6EVWABNCX9XUBJM' where id=2; -update noar tt set v0='2' where id=2; -update noar ti set v0='2' where id=2; -update noar tt set b1='CYJLCXJKKG5JVVTSZC4QJSDON84C' where id=2; -update noar ti set b1='CYJLCXJKKG5JVVTSZC4QJSDON84C' where id=2; -update noar tt set v0='F22' where id=2; -update noar ti set v0='F22' where id=2; -update noar tt set b2='EY4HQ7U1BAY9WQY20' where id=2; -update noar ti set b2='EY4HQ7U1BAY9WQY20' where id=2; -update noar tt set v0='I16BD' where id=3; -update noar ti set v0='I16BD' where id=3; -update noar tt set b0='0UQQKQZ' where id=3; -update noar ti set b0='0UQQKQZ' where id=3; -update noar tt set v0='S0H6I5RQL5AJ6T2E4NT91FPI9' where id=3; -update noar ti set v0='S0H6I5RQL5AJ6T2E4NT91FPI9' where id=3; -update noar tt set b1='X6B51Q130TNRC4LY01HE2VWDMENDNI' where id=3; -update noar ti set b1='X6B51Q130TNRC4LY01HE2VWDMENDNI' where id=3; -update noar tt set v0='JBV' where id=3; -update noar ti set v0='JBV' where id=3; -update noar tt set b2='RIWJ584MDZIL1' where id=3; -update noar ti set b2='RIWJ584MDZIL1' where id=3; -update noar tt set v0='OQTNO5HNDNCQNP39CT' where id=4; -update noar ti set v0='OQTNO5HNDNCQNP39CT' where id=4; -update noar tt set b0='KGMVIO4P9GJ82BRK4QUQXOIVOY' where id=4; -update noar ti set b0='KGMVIO4P9GJ82BRK4QUQXOIVOY' where id=4; -update noar tt set v0='7UWRKN5K' where id=4; -update noar ti set v0='7UWRKN5K' where id=4; -update noar tt set b1='JM1YB057FASEW0YR4UHZSM7264Z' where id=4; -update noar ti set b1='JM1YB057FASEW0YR4UHZSM7264Z' where id=4; -update noar tt set v0='8PTEJZB0IE3DT22O1K9028KBK5Q' where id=4; -update noar ti set v0='8PTEJZB0IE3DT22O1K9028KBK5Q' where id=4; -update noar tt set b2='2WZWSX' where id=4; -update noar ti set b2='2WZWSX' where id=4; -update noar tt set v0='IZDSDTXZCM8V' where id=5; -update noar ti set v0='IZDSDTXZCM8V' where id=5; -update noar tt set b0='1AKEL9386KAYTTNSYU' where id=5; -update noar ti set b0='1AKEL9386KAYTTNSYU' where id=5; -update noar tt set v0='IJWB20DJ039' where id=5; -update noar ti set v0='IJWB20DJ039' where id=5; -update noar tt set b1='Z' where id=5; -update noar ti set b1='Z' where id=5; -update noar tt set v0='4Y8FW1K4GVEO1' where id=5; -update noar ti set v0='4Y8FW1K4GVEO1' where id=5; -update noar tt set b2='93B0P70Q' where id=5; -update noar ti set b2='93B0P70Q' where id=5; -update noar tt set v0='E3V84H3201OJNO0JQCM5' where id=6; -update noar ti set v0='E3V84H3201OJNO0JQCM5' where id=6; -update noar tt set b0='E2XVNNCF7IA' where id=6; -update noar ti set b0='E2XVNNCF7IA' where id=6; -update noar tt set v0='59FGXR' where id=6; -update noar ti set v0='59FGXR' where id=6; -update noar tt set b1='ETE0DQJ' where id=6; -update noar ti set b1='ETE0DQJ' where id=6; -update noar tt set v0='L3JWB' where id=6; -update noar ti set v0='L3JWB' where id=6; -update noar tt set b2='EVMIFKHC1H' where id=6; -update noar ti set b2='EVMIFKHC1H' where id=6; -update noar tt set v0='X7' where id=7; -update noar ti set v0='X7' where id=7; -update noar tt set b0='9HFBPJ90UBLTSABZITKY8BGRMCBL' where id=7; -update noar ti set b0='9HFBPJ90UBLTSABZITKY8BGRMCBL' where id=7; -update noar tt set v0='J9WBVXIMREWNCPYJMSNDYL63OMCQW0' where id=7; -update noar ti set v0='J9WBVXIMREWNCPYJMSNDYL63OMCQW0' where id=7; -update noar tt set b1='5' where id=7; -update noar ti set b1='5' where id=7; -update noar tt set v0='KU6WSI30JE' where id=7; -update noar ti set v0='KU6WSI30JE' where id=7; -update noar tt set b2='ILHPQMHOYDKDZRGYK4IDV' where id=7; -update noar ti set b2='ILHPQMHOYDKDZRGYK4IDV' where id=7; -update noar tt set v0='Q08C6463' where id=8; -update noar ti set v0='Q08C6463' where id=8; -update noar tt set b0='NOF4OK9Q8HX2IH3WBLVLGB6A' where id=8; -update noar ti set b0='NOF4OK9Q8HX2IH3WBLVLGB6A' where id=8; -update noar tt set v0='SJHQUR7O8G72O8V6T91NXH4MJLXA' where id=8; -update noar ti set v0='SJHQUR7O8G72O8V6T91NXH4MJLXA' where id=8; -update noar tt set b1='81JPFC7X9DFK8D7FEXGVFW' where id=8; -update noar ti set b1='81JPFC7X9DFK8D7FEXGVFW' where id=8; -update noar tt set v0='0JGGF2SVE5RL6FPIH7DJ1' where id=8; -update noar ti set v0='0JGGF2SVE5RL6FPIH7DJ1' where id=8; -update noar tt set b2='W' where id=8; -update noar ti set b2='W' where id=8; -update noar tt set v0='RQ081M3YBM9IDU9H' where id=9; -update noar ti set v0='RQ081M3YBM9IDU9H' where id=9; -update noar tt set b0='JAMCD09Q' where id=9; -update noar ti set b0='JAMCD09Q' where id=9; -update noar tt set v0='4NS' where id=9; -update noar ti set v0='4NS' where id=9; -update noar tt set b1='11GEJG373BICU3RXQPUDUG' where id=9; -update noar ti set b1='11GEJG373BICU3RXQPUDUG' where id=9; -update noar tt set v0='VYBXTUFEGH7Y' where id=9; -update noar ti set v0='VYBXTUFEGH7Y' where id=9; -update noar tt set b2='V67B861W3N3BHOJYW' where id=9; -update noar ti set b2='V67B861W3N3BHOJYW' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 blob null, - b1 blob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='WX6SD8UP23MQR660NG1PL3S00NAR' where id=1; -update noar ti set v0='WX6SD8UP23MQR660NG1PL3S00NAR' where id=1; -update noar tt set b0='F01HTDCB24YBYSPZIL3LGZ7SHF5' where id=1; -update noar ti set b0='F01HTDCB24YBYSPZIL3LGZ7SHF5' where id=1; -update noar tt set v0='X9Q8DLCWAEFJRQ' where id=1; -update noar ti set v0='X9Q8DLCWAEFJRQ' where id=1; -update noar tt set b1='PZUEYU5H13PF6J' where id=1; -update noar ti set b1='PZUEYU5H13PF6J' where id=1; -update noar tt set v0='4VV8662GPWW08UDR7U41S1ABQMUT1R' where id=1; -update noar ti set v0='4VV8662GPWW08UDR7U41S1ABQMUT1R' where id=1; -update noar tt set b2='WVDLY6NZMVB3AE0ZXH6W62KNOV4P4VB' where id=1; -update noar ti set b2='WVDLY6NZMVB3AE0ZXH6W62KNOV4P4VB' where id=1; -update noar tt set v0='0T' where id=2; -update noar ti set v0='0T' where id=2; -update noar tt set b0='4TNF54Y22LS8R75Y96YHA7MJ' where id=2; -update noar ti set b0='4TNF54Y22LS8R75Y96YHA7MJ' where id=2; -update noar tt set v0='Z6E17BS9FTBZCH9MP3723' where id=2; -update noar ti set v0='Z6E17BS9FTBZCH9MP3723' where id=2; -update noar tt set b1='11B' where id=2; -update noar ti set b1='11B' where id=2; -update noar tt set v0='8P9YDXMORM56L61687XFUPYKUWEI' where id=2; -update noar ti set v0='8P9YDXMORM56L61687XFUPYKUWEI' where id=2; -update noar tt set b2='1X840FPNMWGA93P60D7XTK1A71Q' where id=2; -update noar ti set b2='1X840FPNMWGA93P60D7XTK1A71Q' where id=2; -update noar tt set v0='OK2YHX4KLVQKCLAKBRA5COYPLOT3HOLY' where id=3; -update noar ti set v0='OK2YHX4KLVQKCLAKBRA5COYPLOT3HOLY' where id=3; -update noar tt set b0='GQO48VO6F73M6FPM1EI3CSSK25O7O9YT' where id=3; -update noar ti set b0='GQO48VO6F73M6FPM1EI3CSSK25O7O9YT' where id=3; -update noar tt set v0='8JKDSJFR1G9ZTTAA0710XE36' where id=3; -update noar ti set v0='8JKDSJFR1G9ZTTAA0710XE36' where id=3; -update noar tt set b1='NI2XQQ35PKVZ3C' where id=3; -update noar ti set b1='NI2XQQ35PKVZ3C' where id=3; -update noar tt set v0='LZAEV3A481CXHC7U6CFR' where id=3; -update noar ti set v0='LZAEV3A481CXHC7U6CFR' where id=3; -update noar tt set b2='5IXOBZB0XAS4F' where id=3; -update noar ti set b2='5IXOBZB0XAS4F' where id=3; -update noar tt set v0='HV3HE5SYGJO22CP3RH3R' where id=4; -update noar ti set v0='HV3HE5SYGJO22CP3RH3R' where id=4; -update noar tt set b0='YLN474FQ3HI' where id=4; -update noar ti set b0='YLN474FQ3HI' where id=4; -update noar tt set v0='SLU' where id=4; -update noar ti set v0='SLU' where id=4; -update noar tt set b1='PZJCTIF' where id=4; -update noar ti set b1='PZJCTIF' where id=4; -update noar tt set v0='WECNUP' where id=4; -update noar ti set v0='WECNUP' where id=4; -update noar tt set b2='YCBVO41ZQ' where id=4; -update noar ti set b2='YCBVO41ZQ' where id=4; -update noar tt set v0='UA6WJOM8NFAVLHRONT8OL' where id=5; -update noar ti set v0='UA6WJOM8NFAVLHRONT8OL' where id=5; -update noar tt set b0='BPN2I' where id=5; -update noar ti set b0='BPN2I' where id=5; -update noar tt set v0='8BL3HSDLV7TQ5O7B' where id=5; -update noar ti set v0='8BL3HSDLV7TQ5O7B' where id=5; -update noar tt set b1='PSIVO3K4HOX2S3Z62GZ' where id=5; -update noar ti set b1='PSIVO3K4HOX2S3Z62GZ' where id=5; -update noar tt set v0='FOF1VZYMXR' where id=5; -update noar ti set v0='FOF1VZYMXR' where id=5; -update noar tt set b2='LH2U2G71QM1UNODRNAA8D7' where id=5; -update noar ti set b2='LH2U2G71QM1UNODRNAA8D7' where id=5; -update noar tt set v0='G7KAMMOX8P8RJB3E0MBW' where id=6; -update noar ti set v0='G7KAMMOX8P8RJB3E0MBW' where id=6; -update noar tt set b0='DN4DIJG31DJ82AVBVWAWSO8H3TZ' where id=6; -update noar ti set b0='DN4DIJG31DJ82AVBVWAWSO8H3TZ' where id=6; -update noar tt set v0='AJQW5QNPOMBRE2XKAB35J' where id=6; -update noar ti set v0='AJQW5QNPOMBRE2XKAB35J' where id=6; -update noar tt set b1='RXYLS6W045BIX6CQ7YSDL' where id=6; -update noar ti set b1='RXYLS6W045BIX6CQ7YSDL' where id=6; -update noar tt set v0='UH72ZR9L6G5MEYVZB17C' where id=6; -update noar ti set v0='UH72ZR9L6G5MEYVZB17C' where id=6; -update noar tt set b2='V24H3PGTOHGW3QIP3DAD2R' where id=6; -update noar ti set b2='V24H3PGTOHGW3QIP3DAD2R' where id=6; -update noar tt set v0='95XHVZLKIRUJVALD' where id=7; -update noar ti set v0='95XHVZLKIRUJVALD' where id=7; -update noar tt set b0='SAHGTTP39SJHWTKRY66NVPGVIVL' where id=7; -update noar ti set b0='SAHGTTP39SJHWTKRY66NVPGVIVL' where id=7; -update noar tt set v0='JDVWC5O9' where id=7; -update noar ti set v0='JDVWC5O9' where id=7; -update noar tt set b1='R6D0T3R95H' where id=7; -update noar ti set b1='R6D0T3R95H' where id=7; -update noar tt set v0='7FNX5PNCWP11IR34A4FIZN4' where id=7; -update noar ti set v0='7FNX5PNCWP11IR34A4FIZN4' where id=7; -update noar tt set b2='0H4SDD9GVDM1A8KINANNDJFXTWZVP2S' where id=7; -update noar ti set b2='0H4SDD9GVDM1A8KINANNDJFXTWZVP2S' where id=7; -update noar tt set v0='JZSDW6' where id=8; -update noar ti set v0='JZSDW6' where id=8; -update noar tt set b0='69P4HQ10A1L7KZ6' where id=8; -update noar ti set b0='69P4HQ10A1L7KZ6' where id=8; -update noar tt set v0='6PTPU63BIQDRQYFOG9NZ81KRA' where id=8; -update noar ti set v0='6PTPU63BIQDRQYFOG9NZ81KRA' where id=8; -update noar tt set b1='QGEPCHS4Q2C380X938MROX1' where id=8; -update noar ti set b1='QGEPCHS4Q2C380X938MROX1' where id=8; -update noar tt set v0='VPXFS846SYABYWSNUTAIU7872EKLRWG' where id=8; -update noar ti set v0='VPXFS846SYABYWSNUTAIU7872EKLRWG' where id=8; -update noar tt set b2='FE5HZWN77G1RNGOLS9KACZULD8V' where id=8; -update noar ti set b2='FE5HZWN77G1RNGOLS9KACZULD8V' where id=8; -update noar tt set v0='3JSEO668C9R4NL0YUYS' where id=9; -update noar ti set v0='3JSEO668C9R4NL0YUYS' where id=9; -update noar tt set b0='5T' where id=9; -update noar ti set b0='5T' where id=9; -update noar tt set v0='W7FF5G8XQ' where id=9; -update noar ti set v0='W7FF5G8XQ' where id=9; -update noar tt set b1='JAFFL0YDCFXKZQY7O5OGN5' where id=9; -update noar ti set b1='JAFFL0YDCFXKZQY7O5OGN5' where id=9; -update noar tt set v0='09J9S' where id=9; -update noar ti set v0='09J9S' where id=9; -update noar tt set b2='28OGOEV8PZIK' where id=9; -update noar ti set b2='28OGOEV8PZIK' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 blob null, - b1 blob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='LHX2ZB6NK' where id=1; -update noar ti set v0='LHX2ZB6NK' where id=1; -update noar tt set b0='YK0EGYAGVT3QJ78PBDQ1' where id=1; -update noar ti set b0='YK0EGYAGVT3QJ78PBDQ1' where id=1; -update noar tt set v0='9U07HY9' where id=1; -update noar ti set v0='9U07HY9' where id=1; -update noar tt set b1='0J1NSUW24TO1DYZ' where id=1; -update noar ti set b1='0J1NSUW24TO1DYZ' where id=1; -update noar tt set v0='J2BWY2IE1PNESGCKSY1KZ116MI' where id=1; -update noar ti set v0='J2BWY2IE1PNESGCKSY1KZ116MI' where id=1; -update noar tt set b2='UQGZZISD' where id=1; -update noar ti set b2='UQGZZISD' where id=1; -update noar tt set v0='5PL9KC02RJMF7CB7X5Z2WS70' where id=2; -update noar ti set v0='5PL9KC02RJMF7CB7X5Z2WS70' where id=2; -update noar tt set b0='R7SV17FN6HV625O04H46HSV86M320NJY' where id=2; -update noar ti set b0='R7SV17FN6HV625O04H46HSV86M320NJY' where id=2; -update noar tt set v0='50YN' where id=2; -update noar ti set v0='50YN' where id=2; -update noar tt set b1='G70FI' where id=2; -update noar ti set b1='G70FI' where id=2; -update noar tt set v0='0H8WK7R4F1XK79A' where id=2; -update noar ti set v0='0H8WK7R4F1XK79A' where id=2; -update noar tt set b2='D5UYUPE6MM0VFMDX6K16MRS5OS1K' where id=2; -update noar ti set b2='D5UYUPE6MM0VFMDX6K16MRS5OS1K' where id=2; -update noar tt set v0='T20CD2LIB344I2JLLXCSKFZXGB6V' where id=3; -update noar ti set v0='T20CD2LIB344I2JLLXCSKFZXGB6V' where id=3; -update noar tt set b0='3UA' where id=3; -update noar ti set b0='3UA' where id=3; -update noar tt set v0='FKTSPE0A26VMUS' where id=3; -update noar ti set v0='FKTSPE0A26VMUS' where id=3; -update noar tt set b1='RBSLGY4YKY7B7RPWT8BFYYG4' where id=3; -update noar ti set b1='RBSLGY4YKY7B7RPWT8BFYYG4' where id=3; -update noar tt set v0='7BCMMQHK9QSDRO46EOSJFFCQBR' where id=3; -update noar ti set v0='7BCMMQHK9QSDRO46EOSJFFCQBR' where id=3; -update noar tt set b2='QG9YJE1HE9M7OJT0U8C70' where id=3; -update noar ti set b2='QG9YJE1HE9M7OJT0U8C70' where id=3; -update noar tt set v0='TFPDYPL' where id=4; -update noar ti set v0='TFPDYPL' where id=4; -update noar tt set b0='KPEC50J3BINWVJW8F3EN56' where id=4; -update noar ti set b0='KPEC50J3BINWVJW8F3EN56' where id=4; -update noar tt set v0='DJEH5WA29E' where id=4; -update noar ti set v0='DJEH5WA29E' where id=4; -update noar tt set b1='ZQ4CCT3HY' where id=4; -update noar ti set b1='ZQ4CCT3HY' where id=4; -update noar tt set v0='O8UK846M5' where id=4; -update noar ti set v0='O8UK846M5' where id=4; -update noar tt set b2='GRN8WHPRX3ZLTY8UAOB9LYX' where id=4; -update noar ti set b2='GRN8WHPRX3ZLTY8UAOB9LYX' where id=4; -update noar tt set v0='K6GYIE0KQKDKZ7UQX44XFYSJ1DHKBK' where id=5; -update noar ti set v0='K6GYIE0KQKDKZ7UQX44XFYSJ1DHKBK' where id=5; -update noar tt set b0='3ME77J7V' where id=5; -update noar ti set b0='3ME77J7V' where id=5; -update noar tt set v0='F' where id=5; -update noar ti set v0='F' where id=5; -update noar tt set b1='7F3V0Q5HMKDRXIDBJY9Z10SISRBCF' where id=5; -update noar ti set b1='7F3V0Q5HMKDRXIDBJY9Z10SISRBCF' where id=5; -update noar tt set v0='8VE641QJOZ937XFBAJ0KQ8GCII' where id=5; -update noar ti set v0='8VE641QJOZ937XFBAJ0KQ8GCII' where id=5; -update noar tt set b2='WB5TNZ8890' where id=5; -update noar ti set b2='WB5TNZ8890' where id=5; -update noar tt set v0='9JFGGOD9DSQ4RHPIKN12YJG31RX0DZWU' where id=6; -update noar ti set v0='9JFGGOD9DSQ4RHPIKN12YJG31RX0DZWU' where id=6; -update noar tt set b0='I9I' where id=6; -update noar ti set b0='I9I' where id=6; -update noar tt set v0='4' where id=6; -update noar ti set v0='4' where id=6; -update noar tt set b1='8OXP694JRS911ISOM' where id=6; -update noar ti set b1='8OXP694JRS911ISOM' where id=6; -update noar tt set v0='HBZS6K32FVMLQ4LQV1S' where id=6; -update noar ti set v0='HBZS6K32FVMLQ4LQV1S' where id=6; -update noar tt set b2='U9IGC00YG2O3PMB60UTTBF42QRYN' where id=6; -update noar ti set b2='U9IGC00YG2O3PMB60UTTBF42QRYN' where id=6; -update noar tt set v0='V27J877IR1KGSOKR95Z7CSFUW' where id=7; -update noar ti set v0='V27J877IR1KGSOKR95Z7CSFUW' where id=7; -update noar tt set b0='S4M02VYK43ISK1' where id=7; -update noar ti set b0='S4M02VYK43ISK1' where id=7; -update noar tt set v0='G111D74G7WDBKWWIQJPLIEM8TM' where id=7; -update noar ti set v0='G111D74G7WDBKWWIQJPLIEM8TM' where id=7; -update noar tt set b1='7R0BSXH3OU4XYMSFN' where id=7; -update noar ti set b1='7R0BSXH3OU4XYMSFN' where id=7; -update noar tt set v0='X9DNBQQ8M83FXBR5V1KZZJ0DVUIRYS' where id=7; -update noar ti set v0='X9DNBQQ8M83FXBR5V1KZZJ0DVUIRYS' where id=7; -update noar tt set b2='LMPUFNIID83ZHSTGX5ZICA4QQDTFUC' where id=7; -update noar ti set b2='LMPUFNIID83ZHSTGX5ZICA4QQDTFUC' where id=7; -update noar tt set v0='66PSAB4Z9UUPE' where id=8; -update noar ti set v0='66PSAB4Z9UUPE' where id=8; -update noar tt set b0='CGW23CYKLIVHEA2PT11R2AXWROO02YJ' where id=8; -update noar ti set b0='CGW23CYKLIVHEA2PT11R2AXWROO02YJ' where id=8; -update noar tt set v0='2EZ6YXXILZNU78H20DYQWQ7CGY' where id=8; -update noar ti set v0='2EZ6YXXILZNU78H20DYQWQ7CGY' where id=8; -update noar tt set b1='B6IJGX8ZVEQZP0RZLBPHP9QWQL0PKG' where id=8; -update noar ti set b1='B6IJGX8ZVEQZP0RZLBPHP9QWQL0PKG' where id=8; -update noar tt set v0='YRAM0HHAK2' where id=8; -update noar ti set v0='YRAM0HHAK2' where id=8; -update noar tt set b2='812X' where id=8; -update noar ti set b2='812X' where id=8; -update noar tt set v0='X2Y3XMHSABEMBGY6HIHXQNG8BEO6B' where id=9; -update noar ti set v0='X2Y3XMHSABEMBGY6HIHXQNG8BEO6B' where id=9; -update noar tt set b0='WJZKMM6WGBN6C18LN3' where id=9; -update noar ti set b0='WJZKMM6WGBN6C18LN3' where id=9; -update noar tt set v0='5VAWD2CL8ICMYZ042' where id=9; -update noar ti set v0='5VAWD2CL8ICMYZ042' where id=9; -update noar tt set b1='3O1N8KH99ZPUCOUYU' where id=9; -update noar ti set b1='3O1N8KH99ZPUCOUYU' where id=9; -update noar tt set v0='KY10SAI31P70Z3N1MAJMANV4N2' where id=9; -update noar ti set v0='KY10SAI31P70Z3N1MAJMANV4N2' where id=9; -update noar tt set b2='MWZXZTH2FSW1M2V0HQCBA9' where id=9; -update noar ti set b2='MWZXZTH2FSW1M2V0HQCBA9' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 blob not null, - b1 blob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='AZ3P63WPTNLL7X1NNJ6DV22I3VO944T1' where id=1; -update noar ti set v0='AZ3P63WPTNLL7X1NNJ6DV22I3VO944T1' where id=1; -update noar tt set b0='PO1XLCTDRY7Y9TLBHPA' where id=1; -update noar ti set b0='PO1XLCTDRY7Y9TLBHPA' where id=1; -update noar tt set v0='9EX878EK42G0S2' where id=1; -update noar ti set v0='9EX878EK42G0S2' where id=1; -update noar tt set b1='7U8XXAH8N8UT1UN7APLC703I8TFR2PCI' where id=1; -update noar ti set b1='7U8XXAH8N8UT1UN7APLC703I8TFR2PCI' where id=1; -update noar tt set v0='2A1P42HOH' where id=1; -update noar ti set v0='2A1P42HOH' where id=1; -update noar tt set b2='1ICRJXNNIIF8WO' where id=1; -update noar ti set b2='1ICRJXNNIIF8WO' where id=1; -update noar tt set v0='DERUJ7LLL5N9Q' where id=2; -update noar ti set v0='DERUJ7LLL5N9Q' where id=2; -update noar tt set b0='DQBPTL85J9MVFCV1YOH0U50' where id=2; -update noar ti set b0='DQBPTL85J9MVFCV1YOH0U50' where id=2; -update noar tt set v0='5HHCOO' where id=2; -update noar ti set v0='5HHCOO' where id=2; -update noar tt set b1='YKSRP8W60O9SINZ5B' where id=2; -update noar ti set b1='YKSRP8W60O9SINZ5B' where id=2; -update noar tt set v0='7' where id=2; -update noar ti set v0='7' where id=2; -update noar tt set b2='BVD7PQO8LSLXG' where id=2; -update noar ti set b2='BVD7PQO8LSLXG' where id=2; -update noar tt set v0='9WTOV65' where id=3; -update noar ti set v0='9WTOV65' where id=3; -update noar tt set b0='C1JI' where id=3; -update noar ti set b0='C1JI' where id=3; -update noar tt set v0='7X2P' where id=3; -update noar ti set v0='7X2P' where id=3; -update noar tt set b1='O5ISJ0UOTRD0V' where id=3; -update noar ti set b1='O5ISJ0UOTRD0V' where id=3; -update noar tt set v0='531HV67H0YIMIRZYN5' where id=3; -update noar ti set v0='531HV67H0YIMIRZYN5' where id=3; -update noar tt set b2='H8PWRDEIHS8MYWZKBUD3NH' where id=3; -update noar ti set b2='H8PWRDEIHS8MYWZKBUD3NH' where id=3; -update noar tt set v0='51FF6T23TR1NZVA7' where id=4; -update noar ti set v0='51FF6T23TR1NZVA7' where id=4; -update noar tt set b0='Y05VAK1CNJXHTL8EUZVVAVAZ' where id=4; -update noar ti set b0='Y05VAK1CNJXHTL8EUZVVAVAZ' where id=4; -update noar tt set v0='5V' where id=4; -update noar ti set v0='5V' where id=4; -update noar tt set b1='RDVU68Z6WB1YQWO59X4MVAMP4XPVHQ' where id=4; -update noar ti set b1='RDVU68Z6WB1YQWO59X4MVAMP4XPVHQ' where id=4; -update noar tt set v0='WFUL9R1UJ23M' where id=4; -update noar ti set v0='WFUL9R1UJ23M' where id=4; -update noar tt set b2='UM8J7FI35Z8Z8ZEP6MMEBTX1P4' where id=4; -update noar ti set b2='UM8J7FI35Z8Z8ZEP6MMEBTX1P4' where id=4; -update noar tt set v0='CK0TST4Z36BWT8' where id=5; -update noar ti set v0='CK0TST4Z36BWT8' where id=5; -update noar tt set b0='PF6D6FE9L1PVHL8X0KW17NJ' where id=5; -update noar ti set b0='PF6D6FE9L1PVHL8X0KW17NJ' where id=5; -update noar tt set v0='1DLCHRZ51YNTV74JQ1ZGHW6N' where id=5; -update noar ti set v0='1DLCHRZ51YNTV74JQ1ZGHW6N' where id=5; -update noar tt set b1='OR36QQU00VH1Y0ZOOWAQJ7S0IT8A2VH' where id=5; -update noar ti set b1='OR36QQU00VH1Y0ZOOWAQJ7S0IT8A2VH' where id=5; -update noar tt set v0='69RVKDO' where id=5; -update noar ti set v0='69RVKDO' where id=5; -update noar tt set b2='8XYM39IIRZAKHUG' where id=5; -update noar ti set b2='8XYM39IIRZAKHUG' where id=5; -update noar tt set v0='BVRXK5QXQ0EU9TR' where id=6; -update noar ti set v0='BVRXK5QXQ0EU9TR' where id=6; -update noar tt set b0='J5' where id=6; -update noar ti set b0='J5' where id=6; -update noar tt set v0='YLPJQQ8FZRKHQYQPWT3EU' where id=6; -update noar ti set v0='YLPJQQ8FZRKHQYQPWT3EU' where id=6; -update noar tt set b1='BPJWEXDNXEKUBDY7UFXF' where id=6; -update noar ti set b1='BPJWEXDNXEKUBDY7UFXF' where id=6; -update noar tt set v0='8BP9DNXDF37LP0BL3M8WJV5' where id=6; -update noar ti set v0='8BP9DNXDF37LP0BL3M8WJV5' where id=6; -update noar tt set b2='3CWOZ9C82GDMMIPW' where id=6; -update noar ti set b2='3CWOZ9C82GDMMIPW' where id=6; -update noar tt set v0='I9CV4IWYN9DIG23LIE' where id=7; -update noar ti set v0='I9CV4IWYN9DIG23LIE' where id=7; -update noar tt set b0='O' where id=7; -update noar ti set b0='O' where id=7; -update noar tt set v0='RO' where id=7; -update noar ti set v0='RO' where id=7; -update noar tt set b1='79W8Q835QV0LH6JTCLZ35PC3' where id=7; -update noar ti set b1='79W8Q835QV0LH6JTCLZ35PC3' where id=7; -update noar tt set v0='R33ZHBXIFOURPCGC' where id=7; -update noar ti set v0='R33ZHBXIFOURPCGC' where id=7; -update noar tt set b2='NDN1' where id=7; -update noar ti set b2='NDN1' where id=7; -update noar tt set v0='VC' where id=8; -update noar ti set v0='VC' where id=8; -update noar tt set b0='PMV3OUNE2KK9AK8' where id=8; -update noar ti set b0='PMV3OUNE2KK9AK8' where id=8; -update noar tt set v0='LXP9TPQ3TA0' where id=8; -update noar ti set v0='LXP9TPQ3TA0' where id=8; -update noar tt set b1='4VWDY9X6TTK6VBFP7YO71ZH' where id=8; -update noar ti set b1='4VWDY9X6TTK6VBFP7YO71ZH' where id=8; -update noar tt set v0='6FAHEBFDSBO4GOO0GNJ2P1GDBV1XA' where id=8; -update noar ti set v0='6FAHEBFDSBO4GOO0GNJ2P1GDBV1XA' where id=8; -update noar tt set b2='710X5MULFOIEIJ4QC6KLSRMVBSIPWN' where id=8; -update noar ti set b2='710X5MULFOIEIJ4QC6KLSRMVBSIPWN' where id=8; -update noar tt set v0='6TQJUYVPYI' where id=9; -update noar ti set v0='6TQJUYVPYI' where id=9; -update noar tt set b0='25TEDPJVYDZOHRBFN9LSMW4MV6EJ' where id=9; -update noar ti set b0='25TEDPJVYDZOHRBFN9LSMW4MV6EJ' where id=9; -update noar tt set v0='Y' where id=9; -update noar ti set v0='Y' where id=9; -update noar tt set b1='WO840FIQW0Z8NXIOGV3JCN2' where id=9; -update noar ti set b1='WO840FIQW0Z8NXIOGV3JCN2' where id=9; -update noar tt set v0='5376WRVQ3HNS2B9HAH' where id=9; -update noar ti set v0='5376WRVQ3HNS2B9HAH' where id=9; -update noar tt set b2='XUAYWQ6R525' where id=9; -update noar ti set b2='XUAYWQ6R525' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 blob not null, - b1 blob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='0YVLXIS380VWLYZ3T' where id=1; -update noar ti set v0='0YVLXIS380VWLYZ3T' where id=1; -update noar tt set b0='Z' where id=1; -update noar ti set b0='Z' where id=1; -update noar tt set v0='5GX044EA36AP1EZU' where id=1; -update noar ti set v0='5GX044EA36AP1EZU' where id=1; -update noar tt set b1='L391466IPPDH72DYJAFPPF49T3YZ3' where id=1; -update noar ti set b1='L391466IPPDH72DYJAFPPF49T3YZ3' where id=1; -update noar tt set v0='YKWPHWKG5' where id=1; -update noar ti set v0='YKWPHWKG5' where id=1; -update noar tt set b2='5KT9JT4VB1DXU27BBVN9EGNPDJ3UL4' where id=1; -update noar ti set b2='5KT9JT4VB1DXU27BBVN9EGNPDJ3UL4' where id=1; -update noar tt set v0='R88NYQ5M63YZ0DK35M' where id=2; -update noar ti set v0='R88NYQ5M63YZ0DK35M' where id=2; -update noar tt set b0='KV0XPQS8E9LGFF1T5Q0U' where id=2; -update noar ti set b0='KV0XPQS8E9LGFF1T5Q0U' where id=2; -update noar tt set v0='PXXRJOQA1OISFZA7W254BVD16' where id=2; -update noar ti set v0='PXXRJOQA1OISFZA7W254BVD16' where id=2; -update noar tt set b1='72USMKIQIQEYL2X50OJZBLQL' where id=2; -update noar ti set b1='72USMKIQIQEYL2X50OJZBLQL' where id=2; -update noar tt set v0='AJR5DLB8AWOO209T' where id=2; -update noar ti set v0='AJR5DLB8AWOO209T' where id=2; -update noar tt set b2='A6HHP' where id=2; -update noar ti set b2='A6HHP' where id=2; -update noar tt set v0='K9DCFOA90R90K59' where id=3; -update noar ti set v0='K9DCFOA90R90K59' where id=3; -update noar tt set b0='8EK66P8JVUD90XPX88EC4NJPSM93H' where id=3; -update noar ti set b0='8EK66P8JVUD90XPX88EC4NJPSM93H' where id=3; -update noar tt set v0='P3IRFC0Z' where id=3; -update noar ti set v0='P3IRFC0Z' where id=3; -update noar tt set b1='Z9YAVRQIW9KT' where id=3; -update noar ti set b1='Z9YAVRQIW9KT' where id=3; -update noar tt set v0='P7MVISGR64LL' where id=3; -update noar ti set v0='P7MVISGR64LL' where id=3; -update noar tt set b2='DVJYV4C' where id=3; -update noar ti set b2='DVJYV4C' where id=3; -update noar tt set v0='VG0AOVVTC56CIU659DDG01DU8' where id=4; -update noar ti set v0='VG0AOVVTC56CIU659DDG01DU8' where id=4; -update noar tt set b0='DCDOLP1884XG7JUVAI1OIMU97KYPGKTU' where id=4; -update noar ti set b0='DCDOLP1884XG7JUVAI1OIMU97KYPGKTU' where id=4; -update noar tt set v0='LKAO30TFXYD2AU' where id=4; -update noar ti set v0='LKAO30TFXYD2AU' where id=4; -update noar tt set b1='PJ7YED5XOR31UBSUOFQ7X0VN977DP' where id=4; -update noar ti set b1='PJ7YED5XOR31UBSUOFQ7X0VN977DP' where id=4; -update noar tt set v0='HG0BVR' where id=4; -update noar ti set v0='HG0BVR' where id=4; -update noar tt set b2='1VR7KMWPMCBBJQMQZS' where id=4; -update noar ti set b2='1VR7KMWPMCBBJQMQZS' where id=4; -update noar tt set v0='8AFIOP9ZMAF94QE5' where id=5; -update noar ti set v0='8AFIOP9ZMAF94QE5' where id=5; -update noar tt set b0='FKHBY19LJYSH9ZQIZT01AK916AO426QE' where id=5; -update noar ti set b0='FKHBY19LJYSH9ZQIZT01AK916AO426QE' where id=5; -update noar tt set v0='MXOCJC8NUWEY' where id=5; -update noar ti set v0='MXOCJC8NUWEY' where id=5; -update noar tt set b1='EJGJ5BND76L8JU37' where id=5; -update noar ti set b1='EJGJ5BND76L8JU37' where id=5; -update noar tt set v0='AY3MJG4KFTII3KXHY68XKG43NB5YF' where id=5; -update noar ti set v0='AY3MJG4KFTII3KXHY68XKG43NB5YF' where id=5; -update noar tt set b2='52KCUMMX2YVZ2NE' where id=5; -update noar ti set b2='52KCUMMX2YVZ2NE' where id=5; -update noar tt set v0='5X0' where id=6; -update noar ti set v0='5X0' where id=6; -update noar tt set b0='K' where id=6; -update noar ti set b0='K' where id=6; -update noar tt set v0='2Q86CNGW1DKTBP3T6GQULKUPAF' where id=6; -update noar ti set v0='2Q86CNGW1DKTBP3T6GQULKUPAF' where id=6; -update noar tt set b1='HAY' where id=6; -update noar ti set b1='HAY' where id=6; -update noar tt set v0='CQKFFKVR31TMN7WMVZL' where id=6; -update noar ti set v0='CQKFFKVR31TMN7WMVZL' where id=6; -update noar tt set b2='JZTQMS2' where id=6; -update noar ti set b2='JZTQMS2' where id=6; -update noar tt set v0='P9AM8MJIHX2DC6PXDQ' where id=7; -update noar ti set v0='P9AM8MJIHX2DC6PXDQ' where id=7; -update noar tt set b0='VDZK2CT6F08RCBW8G' where id=7; -update noar ti set b0='VDZK2CT6F08RCBW8G' where id=7; -update noar tt set v0='P6V0CVPR' where id=7; -update noar ti set v0='P6V0CVPR' where id=7; -update noar tt set b1='YQD762IVWTTZMJYIIQ19963' where id=7; -update noar ti set b1='YQD762IVWTTZMJYIIQ19963' where id=7; -update noar tt set v0='AP' where id=7; -update noar ti set v0='AP' where id=7; -update noar tt set b2='OV91JL626479BQB40GYOOYX' where id=7; -update noar ti set b2='OV91JL626479BQB40GYOOYX' where id=7; -update noar tt set v0='3L1Z3P76WZ3JSTTRFGK6Z' where id=8; -update noar ti set v0='3L1Z3P76WZ3JSTTRFGK6Z' where id=8; -update noar tt set b0='X3BTIIWS1MRWA1NZHS' where id=8; -update noar ti set b0='X3BTIIWS1MRWA1NZHS' where id=8; -update noar tt set v0='9NBFK5DWNB2V0W37L5LCRQH' where id=8; -update noar ti set v0='9NBFK5DWNB2V0W37L5LCRQH' where id=8; -update noar tt set b1='89T8PW6QPWU8M' where id=8; -update noar ti set b1='89T8PW6QPWU8M' where id=8; -update noar tt set v0='0ZZ7ZDDX5JEEADT0HZPZ270NPD1' where id=8; -update noar ti set v0='0ZZ7ZDDX5JEEADT0HZPZ270NPD1' where id=8; -update noar tt set b2='D3LGKX9V70TD509EBF5DM1P13FEJ' where id=8; -update noar ti set b2='D3LGKX9V70TD509EBF5DM1P13FEJ' where id=8; -update noar tt set v0='5O2EIBBM' where id=9; -update noar ti set v0='5O2EIBBM' where id=9; -update noar tt set b0='B994FK071KTRW' where id=9; -update noar ti set b0='B994FK071KTRW' where id=9; -update noar tt set v0='YIWC9RVL6KEBIBL' where id=9; -update noar ti set v0='YIWC9RVL6KEBIBL' where id=9; -update noar tt set b1='W' where id=9; -update noar ti set b1='W' where id=9; -update noar tt set v0='R5PT' where id=9; -update noar ti set v0='R5PT' where id=9; -update noar tt set b2='R52' where id=9; -update noar ti set b2='R52' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 blob null, - b1 blob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='DHSEFFDVR85WJBP7DSRB8Q2KX9K' where id=1; -update noar ti set v0='DHSEFFDVR85WJBP7DSRB8Q2KX9K' where id=1; -update noar tt set b0='Y8KALR7YQ7IS' where id=1; -update noar ti set b0='Y8KALR7YQ7IS' where id=1; -update noar tt set v0='PSH1ZD9A2K4O3ZQKNX7ZBNZC0' where id=1; -update noar ti set v0='PSH1ZD9A2K4O3ZQKNX7ZBNZC0' where id=1; -update noar tt set b1='VKXS5S' where id=1; -update noar ti set b1='VKXS5S' where id=1; -update noar tt set v0='SQ' where id=1; -update noar ti set v0='SQ' where id=1; -update noar tt set b2='SB3Y' where id=1; -update noar ti set b2='SB3Y' where id=1; -update noar tt set v0='2EAJ9B8RMZG9BBG850OQDGLP3E' where id=2; -update noar ti set v0='2EAJ9B8RMZG9BBG850OQDGLP3E' where id=2; -update noar tt set b0='3ZOTR78N9AB97ZZ3B6N9EIOX25DSHJD' where id=2; -update noar ti set b0='3ZOTR78N9AB97ZZ3B6N9EIOX25DSHJD' where id=2; -update noar tt set v0='N55EX6288ADTC' where id=2; -update noar ti set v0='N55EX6288ADTC' where id=2; -update noar tt set b1='XEH6BK5O9C00BWUQF4' where id=2; -update noar ti set b1='XEH6BK5O9C00BWUQF4' where id=2; -update noar tt set v0='QIZEKG5ML1EMXUDTGCBQ8L' where id=2; -update noar ti set v0='QIZEKG5ML1EMXUDTGCBQ8L' where id=2; -update noar tt set b2='47K9ZIQEYU5ZKIR' where id=2; -update noar ti set b2='47K9ZIQEYU5ZKIR' where id=2; -update noar tt set v0='OPZ2QZK5AGAZ7SO9QLTGX0YWYD7' where id=3; -update noar ti set v0='OPZ2QZK5AGAZ7SO9QLTGX0YWYD7' where id=3; -update noar tt set b0='X8SODI4' where id=3; -update noar ti set b0='X8SODI4' where id=3; -update noar tt set v0='IH' where id=3; -update noar ti set v0='IH' where id=3; -update noar tt set b1='A84SWZ' where id=3; -update noar ti set b1='A84SWZ' where id=3; -update noar tt set v0='5MSYZ4U9ROC7Q38R5NBSSASCOUAWGZ' where id=3; -update noar ti set v0='5MSYZ4U9ROC7Q38R5NBSSASCOUAWGZ' where id=3; -update noar tt set b2='W67X0PC' where id=3; -update noar ti set b2='W67X0PC' where id=3; -update noar tt set v0='7AKVP' where id=4; -update noar ti set v0='7AKVP' where id=4; -update noar tt set b0='HZ2QD1I0W2O' where id=4; -update noar ti set b0='HZ2QD1I0W2O' where id=4; -update noar tt set v0='Q3EHWNVO8J3PDZP8QM3DAWOPU' where id=4; -update noar ti set v0='Q3EHWNVO8J3PDZP8QM3DAWOPU' where id=4; -update noar tt set b1='6WL6EM8UOKTYCKXRO9R4B0CG4W65A8I' where id=4; -update noar ti set b1='6WL6EM8UOKTYCKXRO9R4B0CG4W65A8I' where id=4; -update noar tt set v0='NA5ZC4H2JNDSXOM1AO2V9UPC' where id=4; -update noar ti set v0='NA5ZC4H2JNDSXOM1AO2V9UPC' where id=4; -update noar tt set b2='X0DDD' where id=4; -update noar ti set b2='X0DDD' where id=4; -update noar tt set v0='EVZ4AC' where id=5; -update noar ti set v0='EVZ4AC' where id=5; -update noar tt set b0='QN36IYT17QH5XMO3VXWNWK18' where id=5; -update noar ti set b0='QN36IYT17QH5XMO3VXWNWK18' where id=5; -update noar tt set v0='N39R3U6I7QAHR0QEJO697P' where id=5; -update noar ti set v0='N39R3U6I7QAHR0QEJO697P' where id=5; -update noar tt set b1='JYCB30FB3MLTSX3GTVJN6GINTD3M4S' where id=5; -update noar ti set b1='JYCB30FB3MLTSX3GTVJN6GINTD3M4S' where id=5; -update noar tt set v0='S579UFD1V2APOYNMKWRIW42OWYVDZSIT' where id=5; -update noar ti set v0='S579UFD1V2APOYNMKWRIW42OWYVDZSIT' where id=5; -update noar tt set b2='C1BNPBM' where id=5; -update noar ti set b2='C1BNPBM' where id=5; -update noar tt set v0='GPA' where id=6; -update noar ti set v0='GPA' where id=6; -update noar tt set b0='MZKBTND6UZN7ITHCZFVB4JLR2JP' where id=6; -update noar ti set b0='MZKBTND6UZN7ITHCZFVB4JLR2JP' where id=6; -update noar tt set v0='2751UQC7IYJSACH6GYZ33BOOJOYJG46A' where id=6; -update noar ti set v0='2751UQC7IYJSACH6GYZ33BOOJOYJG46A' where id=6; -update noar tt set b1='HSW6NPWYVGKNLURML860Z' where id=6; -update noar ti set b1='HSW6NPWYVGKNLURML860Z' where id=6; -update noar tt set v0='91OW6FNV' where id=6; -update noar ti set v0='91OW6FNV' where id=6; -update noar tt set b2='1JJO06ZD8D36AL6E13DUFCSPAH2A4V' where id=6; -update noar ti set b2='1JJO06ZD8D36AL6E13DUFCSPAH2A4V' where id=6; -update noar tt set v0='LHSPLQILJ7RFZ' where id=7; -update noar ti set v0='LHSPLQILJ7RFZ' where id=7; -update noar tt set b0='9BY5J41KU37CB09' where id=7; -update noar ti set b0='9BY5J41KU37CB09' where id=7; -update noar tt set v0='VGW5TLVO9AZL1LKCIWS6JNT5IY0JHI' where id=7; -update noar ti set v0='VGW5TLVO9AZL1LKCIWS6JNT5IY0JHI' where id=7; -update noar tt set b1='L8VST77SA70YPOPOGHQF2F0QC' where id=7; -update noar ti set b1='L8VST77SA70YPOPOGHQF2F0QC' where id=7; -update noar tt set v0='A4PDPB2AQEPS8NF6VBZZMH6O' where id=7; -update noar ti set v0='A4PDPB2AQEPS8NF6VBZZMH6O' where id=7; -update noar tt set b2='4N38USQQVQWW6FJB038GPE9R' where id=7; -update noar ti set b2='4N38USQQVQWW6FJB038GPE9R' where id=7; -update noar tt set v0='NCZBTSFGIA4CILGO' where id=8; -update noar ti set v0='NCZBTSFGIA4CILGO' where id=8; -update noar tt set b0='6ECHZ9JQLMBP0Q07Z6TGTP1G9Q79' where id=8; -update noar ti set b0='6ECHZ9JQLMBP0Q07Z6TGTP1G9Q79' where id=8; -update noar tt set v0='XKPRZVNHAPCE73J2GLXQZ7WH219H' where id=8; -update noar ti set v0='XKPRZVNHAPCE73J2GLXQZ7WH219H' where id=8; -update noar tt set b1='2QPRM9AZ5ZEPQ7QQA' where id=8; -update noar ti set b1='2QPRM9AZ5ZEPQ7QQA' where id=8; -update noar tt set v0='SGEO0WZIE53I2KAW68OHDYL' where id=8; -update noar ti set v0='SGEO0WZIE53I2KAW68OHDYL' where id=8; -update noar tt set b2='Y' where id=8; -update noar ti set b2='Y' where id=8; -update noar tt set v0='IFCABDOXG8NQMJQ0A503K' where id=9; -update noar ti set v0='IFCABDOXG8NQMJQ0A503K' where id=9; -update noar tt set b0='ASOD2014280C95II5KHU8PHJYUU77J3' where id=9; -update noar ti set b0='ASOD2014280C95II5KHU8PHJYUU77J3' where id=9; -update noar tt set v0='NV0' where id=9; -update noar ti set v0='NV0' where id=9; -update noar tt set b1='EVQQG' where id=9; -update noar ti set b1='EVQQG' where id=9; -update noar tt set v0='NGWDUBAYT8BR98GYWTRS0AT5Y004ZNA' where id=9; -update noar ti set v0='NGWDUBAYT8BR98GYWTRS0AT5Y004ZNA' where id=9; -update noar tt set b2='TVER2ZAQRH45' where id=9; -update noar ti set b2='TVER2ZAQRH45' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 blob null, - b1 blob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='L2ZPKEQKNXWN2YYU49MGO35CPABMDJK' where id=1; -update noar ti set v0='L2ZPKEQKNXWN2YYU49MGO35CPABMDJK' where id=1; -update noar tt set b0='9SJ6M' where id=1; -update noar ti set b0='9SJ6M' where id=1; -update noar tt set v0='GC' where id=1; -update noar ti set v0='GC' where id=1; -update noar tt set b1='090AVDSF1YXO' where id=1; -update noar ti set b1='090AVDSF1YXO' where id=1; -update noar tt set v0='ZY9HND214J94ADANQ7WPVCTLELPU9N' where id=1; -update noar ti set v0='ZY9HND214J94ADANQ7WPVCTLELPU9N' where id=1; -update noar tt set b2='KARZJ0N57U1K4YWBSERGXFUFU9OO' where id=1; -update noar ti set b2='KARZJ0N57U1K4YWBSERGXFUFU9OO' where id=1; -update noar tt set v0='8Q0D6Q866FAOY1LEJMCFEH584PY7L' where id=2; -update noar ti set v0='8Q0D6Q866FAOY1LEJMCFEH584PY7L' where id=2; -update noar tt set b0='OF4350YI5CP49D40Q7APJTVO4QJT' where id=2; -update noar ti set b0='OF4350YI5CP49D40Q7APJTVO4QJT' where id=2; -update noar tt set v0='CUGBMN4XM43L' where id=2; -update noar ti set v0='CUGBMN4XM43L' where id=2; -update noar tt set b1='RLLJXFN1XAYJ69VX8ATRWOUQ5SMC' where id=2; -update noar ti set b1='RLLJXFN1XAYJ69VX8ATRWOUQ5SMC' where id=2; -update noar tt set v0='PGPROYIZFLKE9811J0J1J0BVLGVTTI2' where id=2; -update noar ti set v0='PGPROYIZFLKE9811J0J1J0BVLGVTTI2' where id=2; -update noar tt set b2='RLDWAFS8BDVYBC8MH3G3JBXBB6A' where id=2; -update noar ti set b2='RLDWAFS8BDVYBC8MH3G3JBXBB6A' where id=2; -update noar tt set v0='DIX3L3TSFV925' where id=3; -update noar ti set v0='DIX3L3TSFV925' where id=3; -update noar tt set b0='0ZF6GGVPU' where id=3; -update noar ti set b0='0ZF6GGVPU' where id=3; -update noar tt set v0='3ZNO90IM46DTX' where id=3; -update noar ti set v0='3ZNO90IM46DTX' where id=3; -update noar tt set b1='QA' where id=3; -update noar ti set b1='QA' where id=3; -update noar tt set v0='FMWICQ3XX70DQ6P7BMX4292' where id=3; -update noar ti set v0='FMWICQ3XX70DQ6P7BMX4292' where id=3; -update noar tt set b2='KDHPE430N34S' where id=3; -update noar ti set b2='KDHPE430N34S' where id=3; -update noar tt set v0='R' where id=4; -update noar ti set v0='R' where id=4; -update noar tt set b0='3E6BB41RH22' where id=4; -update noar ti set b0='3E6BB41RH22' where id=4; -update noar tt set v0='6HSMF2ZYUYT7' where id=4; -update noar ti set v0='6HSMF2ZYUYT7' where id=4; -update noar tt set b1='VNUXLSWLMXFSOO9NUWR8PYZQD8I31ID' where id=4; -update noar ti set b1='VNUXLSWLMXFSOO9NUWR8PYZQD8I31ID' where id=4; -update noar tt set v0='AGEEPPRHFMIWN4B5ZZL2' where id=4; -update noar ti set v0='AGEEPPRHFMIWN4B5ZZL2' where id=4; -update noar tt set b2='9E31S6R' where id=4; -update noar ti set b2='9E31S6R' where id=4; -update noar tt set v0='K9NSDLS2COGGZ' where id=5; -update noar ti set v0='K9NSDLS2COGGZ' where id=5; -update noar tt set b0='RM3E04A92DBAO' where id=5; -update noar ti set b0='RM3E04A92DBAO' where id=5; -update noar tt set v0='6176Y9C71JPWN0KX9DE312XVB9' where id=5; -update noar ti set v0='6176Y9C71JPWN0KX9DE312XVB9' where id=5; -update noar tt set b1='LI2CEA50ALSLIPEPR64KST5C' where id=5; -update noar ti set b1='LI2CEA50ALSLIPEPR64KST5C' where id=5; -update noar tt set v0='C1S' where id=5; -update noar ti set v0='C1S' where id=5; -update noar tt set b2='CXY5V1CAD' where id=5; -update noar ti set b2='CXY5V1CAD' where id=5; -update noar tt set v0='ULF80LFO1YGYY0MTG3X5GCRF6MFT' where id=6; -update noar ti set v0='ULF80LFO1YGYY0MTG3X5GCRF6MFT' where id=6; -update noar tt set b0='X2V' where id=6; -update noar ti set b0='X2V' where id=6; -update noar tt set v0='02L92JX' where id=6; -update noar ti set v0='02L92JX' where id=6; -update noar tt set b1='6P028OR1C6VDFI8IHI1FTJXUADSH' where id=6; -update noar ti set b1='6P028OR1C6VDFI8IHI1FTJXUADSH' where id=6; -update noar tt set v0='2AKADNLLS3RV2' where id=6; -update noar ti set v0='2AKADNLLS3RV2' where id=6; -update noar tt set b2='WEL7Y1OFVVIVCTBYUU9ZK4WM' where id=6; -update noar ti set b2='WEL7Y1OFVVIVCTBYUU9ZK4WM' where id=6; -update noar tt set v0='W7BJFKDA63SGDAYH4X3U8L8CZ' where id=7; -update noar ti set v0='W7BJFKDA63SGDAYH4X3U8L8CZ' where id=7; -update noar tt set b0='FKIEVDENRSI9Q' where id=7; -update noar ti set b0='FKIEVDENRSI9Q' where id=7; -update noar tt set v0='2ZQ' where id=7; -update noar ti set v0='2ZQ' where id=7; -update noar tt set b1='2J078YEGG264HAC258XGVW5Q' where id=7; -update noar ti set b1='2J078YEGG264HAC258XGVW5Q' where id=7; -update noar tt set v0='MJ0HJWGLWIQX3T8VJ5UQWXFDB' where id=7; -update noar ti set v0='MJ0HJWGLWIQX3T8VJ5UQWXFDB' where id=7; -update noar tt set b2='MREZSUJ9TLYQMOV9CAVB1PMXPL' where id=7; -update noar ti set b2='MREZSUJ9TLYQMOV9CAVB1PMXPL' where id=7; -update noar tt set v0='BVZU7L' where id=8; -update noar ti set v0='BVZU7L' where id=8; -update noar tt set b0='MAADW2QEH0947XESB66WA86S' where id=8; -update noar ti set b0='MAADW2QEH0947XESB66WA86S' where id=8; -update noar tt set v0='4201B0DPODXITSFMM7JM' where id=8; -update noar ti set v0='4201B0DPODXITSFMM7JM' where id=8; -update noar tt set b1='2EGMSB4FFMCP4SEG3Q52OAJ' where id=8; -update noar ti set b1='2EGMSB4FFMCP4SEG3Q52OAJ' where id=8; -update noar tt set v0='ZP0FLZ0BOKO2UJYM10KZ2UAGEAA' where id=8; -update noar ti set v0='ZP0FLZ0BOKO2UJYM10KZ2UAGEAA' where id=8; -update noar tt set b2='C' where id=8; -update noar ti set b2='C' where id=8; -update noar tt set v0='XE97FCQRRW' where id=9; -update noar ti set v0='XE97FCQRRW' where id=9; -update noar tt set b0='5CFPJ50NIUK1FTW' where id=9; -update noar ti set b0='5CFPJ50NIUK1FTW' where id=9; -update noar tt set v0='P2S6GQLZWYPGZZPXHOKO4SW1DQJ5MQ' where id=9; -update noar ti set v0='P2S6GQLZWYPGZZPXHOKO4SW1DQJ5MQ' where id=9; -update noar tt set b1='P27ISRBKTI4IEYPR3ECA2CXGCT' where id=9; -update noar ti set b1='P27ISRBKTI4IEYPR3ECA2CXGCT' where id=9; -update noar tt set v0='946' where id=9; -update noar ti set v0='946' where id=9; -update noar tt set b2='R6D7AV01Z2X26Y5IH0IR1I4M40' where id=9; -update noar ti set b2='R6D7AV01Z2X26Y5IH0IR1I4M40' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 blob not null, - b1 blob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='F90EPQQQZ69622JU5K' where id=1; -update noar ti set v0='F90EPQQQZ69622JU5K' where id=1; -update noar tt set b0='ALYESR1' where id=1; -update noar ti set b0='ALYESR1' where id=1; -update noar tt set v0='4OOS0Q' where id=1; -update noar ti set v0='4OOS0Q' where id=1; -update noar tt set b1='188K91WKCXVDXIXZH' where id=1; -update noar ti set b1='188K91WKCXVDXIXZH' where id=1; -update noar tt set v0='R3V' where id=1; -update noar ti set v0='R3V' where id=1; -update noar tt set b2='7IU' where id=1; -update noar ti set b2='7IU' where id=1; -update noar tt set v0='10Z1B8CEAM6A69CXYT5BL2PW990ZC4G' where id=2; -update noar ti set v0='10Z1B8CEAM6A69CXYT5BL2PW990ZC4G' where id=2; -update noar tt set b0='1V5TVQGPZASY657S6' where id=2; -update noar ti set b0='1V5TVQGPZASY657S6' where id=2; -update noar tt set v0='ZSHAT9M' where id=2; -update noar ti set v0='ZSHAT9M' where id=2; -update noar tt set b1='EAE6SVCWIOJT8C8U43X2DT6V' where id=2; -update noar ti set b1='EAE6SVCWIOJT8C8U43X2DT6V' where id=2; -update noar tt set v0='YPR6RR0CA' where id=2; -update noar ti set v0='YPR6RR0CA' where id=2; -update noar tt set b2='WWKE17RDEHPNUDPGV8R6J' where id=2; -update noar ti set b2='WWKE17RDEHPNUDPGV8R6J' where id=2; -update noar tt set v0='VQ8672N6Q2E6K5P0Z38KDPO3K' where id=3; -update noar ti set v0='VQ8672N6Q2E6K5P0Z38KDPO3K' where id=3; -update noar tt set b0='UZN8NJ' where id=3; -update noar ti set b0='UZN8NJ' where id=3; -update noar tt set v0='AD7GISADA0HDWNMY09CC517YT0KYV' where id=3; -update noar ti set v0='AD7GISADA0HDWNMY09CC517YT0KYV' where id=3; -update noar tt set b1='I6MVIOGHRIJGK' where id=3; -update noar ti set b1='I6MVIOGHRIJGK' where id=3; -update noar tt set v0='T4QZHBCWUMLGGJ42VK3' where id=3; -update noar ti set v0='T4QZHBCWUMLGGJ42VK3' where id=3; -update noar tt set b2='RYCVEA2MWSD3V' where id=3; -update noar ti set b2='RYCVEA2MWSD3V' where id=3; -update noar tt set v0='CGV7BB3KDF9XN3AEHCHF18UEDZAP' where id=4; -update noar ti set v0='CGV7BB3KDF9XN3AEHCHF18UEDZAP' where id=4; -update noar tt set b0='ZP69NTPUU6XO' where id=4; -update noar ti set b0='ZP69NTPUU6XO' where id=4; -update noar tt set v0='R36VIVOPJI9DJVL15SN' where id=4; -update noar ti set v0='R36VIVOPJI9DJVL15SN' where id=4; -update noar tt set b1='W28XU1ETMUIZ0A8292PN6OIZKKC5EZL6' where id=4; -update noar ti set b1='W28XU1ETMUIZ0A8292PN6OIZKKC5EZL6' where id=4; -update noar tt set v0='J8' where id=4; -update noar ti set v0='J8' where id=4; -update noar tt set b2='PLZZWYV8525FIVKX0KZ9048DP' where id=4; -update noar ti set b2='PLZZWYV8525FIVKX0KZ9048DP' where id=4; -update noar tt set v0='VBBWU4PL9BRV5A8PA990K6V3HGITB5' where id=5; -update noar ti set v0='VBBWU4PL9BRV5A8PA990K6V3HGITB5' where id=5; -update noar tt set b0='2MQSNZSILV4NPB1Z' where id=5; -update noar ti set b0='2MQSNZSILV4NPB1Z' where id=5; -update noar tt set v0='S89RMBJJYKDLEO8OWA' where id=5; -update noar ti set v0='S89RMBJJYKDLEO8OWA' where id=5; -update noar tt set b1='C5031XJOHTYMFAJXITS3VHNXLA' where id=5; -update noar ti set b1='C5031XJOHTYMFAJXITS3VHNXLA' where id=5; -update noar tt set v0='6VVIYV8FE27V96TRLKMNQHXIPRNWF7' where id=5; -update noar ti set v0='6VVIYV8FE27V96TRLKMNQHXIPRNWF7' where id=5; -update noar tt set b2='VSCDKI4MSMCUMZSCL6WBRPWCTMK337' where id=5; -update noar ti set b2='VSCDKI4MSMCUMZSCL6WBRPWCTMK337' where id=5; -update noar tt set v0='54V' where id=6; -update noar ti set v0='54V' where id=6; -update noar tt set b0='82QBXJKUKKR' where id=6; -update noar ti set b0='82QBXJKUKKR' where id=6; -update noar tt set v0='T84S8S2REYUQK' where id=6; -update noar ti set v0='T84S8S2REYUQK' where id=6; -update noar tt set b1='YCJAMV8M8' where id=6; -update noar ti set b1='YCJAMV8M8' where id=6; -update noar tt set v0='AQM9L3GW44L16QUMUZ8DF0HB' where id=6; -update noar ti set v0='AQM9L3GW44L16QUMUZ8DF0HB' where id=6; -update noar tt set b2='B96PEPUPI3MR1M7SMC1VPHSSTF4' where id=6; -update noar ti set b2='B96PEPUPI3MR1M7SMC1VPHSSTF4' where id=6; -update noar tt set v0='3TUO8C' where id=7; -update noar ti set v0='3TUO8C' where id=7; -update noar tt set b0='NZSR' where id=7; -update noar ti set b0='NZSR' where id=7; -update noar tt set v0='P7RJLZFVFDSJ7TJ01HN6WDI' where id=7; -update noar ti set v0='P7RJLZFVFDSJ7TJ01HN6WDI' where id=7; -update noar tt set b1='KYQGSX5XXV2IAOXMNM5CA4S' where id=7; -update noar ti set b1='KYQGSX5XXV2IAOXMNM5CA4S' where id=7; -update noar tt set v0='TS7E29UW' where id=7; -update noar ti set v0='TS7E29UW' where id=7; -update noar tt set b2='ZJVN43FK4GY9BMH' where id=7; -update noar ti set b2='ZJVN43FK4GY9BMH' where id=7; -update noar tt set v0='QDNOCG9I9MQFJ3AUKL5E7QV6Z' where id=8; -update noar ti set v0='QDNOCG9I9MQFJ3AUKL5E7QV6Z' where id=8; -update noar tt set b0='QQD38ZSIIKI54E5D6FYQ1M2MK' where id=8; -update noar ti set b0='QQD38ZSIIKI54E5D6FYQ1M2MK' where id=8; -update noar tt set v0='ERXI0FS4DT' where id=8; -update noar ti set v0='ERXI0FS4DT' where id=8; -update noar tt set b1='YIZZMA7A1GMT78S3DTOAFW' where id=8; -update noar ti set b1='YIZZMA7A1GMT78S3DTOAFW' where id=8; -update noar tt set v0='TU8BX9WGFPGD8DLSU1ZPUP2C9' where id=8; -update noar ti set v0='TU8BX9WGFPGD8DLSU1ZPUP2C9' where id=8; -update noar tt set b2='76ZM51PQ0WQQO0' where id=8; -update noar ti set b2='76ZM51PQ0WQQO0' where id=8; -update noar tt set v0='UHVZNM72K1PYH3KPOOU4BDQOG68F' where id=9; -update noar ti set v0='UHVZNM72K1PYH3KPOOU4BDQOG68F' where id=9; -update noar tt set b0='Q6HVTBCDE4OW3JUIXFZ4LHGR' where id=9; -update noar ti set b0='Q6HVTBCDE4OW3JUIXFZ4LHGR' where id=9; -update noar tt set v0='N344L1Z2ZLE60WG4KEINUYV' where id=9; -update noar ti set v0='N344L1Z2ZLE60WG4KEINUYV' where id=9; -update noar tt set b1='0' where id=9; -update noar ti set b1='0' where id=9; -update noar tt set v0='PKNF5CZGEO3GB6UW0MTH2ATDJF1J' where id=9; -update noar ti set v0='PKNF5CZGEO3GB6UW0MTH2ATDJF1J' where id=9; -update noar tt set b2='US98NPJZDKNEH2BS95J9T4ZNOH2O5O3' where id=9; -update noar ti set b2='US98NPJZDKNEH2BS95J9T4ZNOH2O5O3' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 blob not null, - b1 blob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='PIK848930V5K7JTC0GJVJ3O4AMC' where id=1; -update noar ti set v0='PIK848930V5K7JTC0GJVJ3O4AMC' where id=1; -update noar tt set b0='DKZ6ZNLD4' where id=1; -update noar ti set b0='DKZ6ZNLD4' where id=1; -update noar tt set v0='NXSQT' where id=1; -update noar ti set v0='NXSQT' where id=1; -update noar tt set b1='2ORHQ83GDJNQ' where id=1; -update noar ti set b1='2ORHQ83GDJNQ' where id=1; -update noar tt set v0='CGLKOQ7GRQQLVI102R' where id=1; -update noar ti set v0='CGLKOQ7GRQQLVI102R' where id=1; -update noar tt set b2='L7VA' where id=1; -update noar ti set b2='L7VA' where id=1; -update noar tt set v0='L664J9DEOPHH93N8GMPXCKZH6H' where id=2; -update noar ti set v0='L664J9DEOPHH93N8GMPXCKZH6H' where id=2; -update noar tt set b0='V3X8JKCJ3UPIFJC3UOZUO443PADM0' where id=2; -update noar ti set b0='V3X8JKCJ3UPIFJC3UOZUO443PADM0' where id=2; -update noar tt set v0='SWGC0IKH8RUCLA5R32JTT5' where id=2; -update noar ti set v0='SWGC0IKH8RUCLA5R32JTT5' where id=2; -update noar tt set b1='5I175TSKW' where id=2; -update noar ti set b1='5I175TSKW' where id=2; -update noar tt set v0='65E2SPUIMZES192Z2YC' where id=2; -update noar ti set v0='65E2SPUIMZES192Z2YC' where id=2; -update noar tt set b2='TMQU7' where id=2; -update noar ti set b2='TMQU7' where id=2; -update noar tt set v0='K' where id=3; -update noar ti set v0='K' where id=3; -update noar tt set b0='IJOXWKF' where id=3; -update noar ti set b0='IJOXWKF' where id=3; -update noar tt set v0='1A9DQ' where id=3; -update noar ti set v0='1A9DQ' where id=3; -update noar tt set b1='8KNR1HXJUQQOAEU156TY' where id=3; -update noar ti set b1='8KNR1HXJUQQOAEU156TY' where id=3; -update noar tt set v0='P7WF4I04306KUMO2N' where id=3; -update noar ti set v0='P7WF4I04306KUMO2N' where id=3; -update noar tt set b2='PFMWGFO' where id=3; -update noar ti set b2='PFMWGFO' where id=3; -update noar tt set v0='IGS4JU' where id=4; -update noar ti set v0='IGS4JU' where id=4; -update noar tt set b0='8FY6ADN8TQNM' where id=4; -update noar ti set b0='8FY6ADN8TQNM' where id=4; -update noar tt set v0='1PICAVU8PDEL2MNY50N' where id=4; -update noar ti set v0='1PICAVU8PDEL2MNY50N' where id=4; -update noar tt set b1='WYV844CXF477KNUZ9REITKH1IJE' where id=4; -update noar ti set b1='WYV844CXF477KNUZ9REITKH1IJE' where id=4; -update noar tt set v0='VBLEEPOO2W56K94S4C600' where id=4; -update noar ti set v0='VBLEEPOO2W56K94S4C600' where id=4; -update noar tt set b2='F5NX90U' where id=4; -update noar ti set b2='F5NX90U' where id=4; -update noar tt set v0='XDP5IN8CETC6RW2' where id=5; -update noar ti set v0='XDP5IN8CETC6RW2' where id=5; -update noar tt set b0='NNB9K32YJ478Q2KOW7UOI2EQY3' where id=5; -update noar ti set b0='NNB9K32YJ478Q2KOW7UOI2EQY3' where id=5; -update noar tt set v0='W952HWFPD6KLAUSU1BL0X7M75' where id=5; -update noar ti set v0='W952HWFPD6KLAUSU1BL0X7M75' where id=5; -update noar tt set b1='8CVGF8YQ4PYIS8ZLM8DAXZPP4' where id=5; -update noar ti set b1='8CVGF8YQ4PYIS8ZLM8DAXZPP4' where id=5; -update noar tt set v0='5ICJ' where id=5; -update noar ti set v0='5ICJ' where id=5; -update noar tt set b2='MNUT8R1DVJ1KDL9K1' where id=5; -update noar ti set b2='MNUT8R1DVJ1KDL9K1' where id=5; -update noar tt set v0='9CO0E7RU1U0KVQ8S92FWCFY4JDQ55' where id=6; -update noar ti set v0='9CO0E7RU1U0KVQ8S92FWCFY4JDQ55' where id=6; -update noar tt set b0='KVPBH' where id=6; -update noar ti set b0='KVPBH' where id=6; -update noar tt set v0='TX' where id=6; -update noar ti set v0='TX' where id=6; -update noar tt set b1='NALHFFULK' where id=6; -update noar ti set b1='NALHFFULK' where id=6; -update noar tt set v0='RXWND4E243CHD2584ZCQ7' where id=6; -update noar ti set v0='RXWND4E243CHD2584ZCQ7' where id=6; -update noar tt set b2='F4TO6METCLEVAL2VBPZJ8TOAWD' where id=6; -update noar ti set b2='F4TO6METCLEVAL2VBPZJ8TOAWD' where id=6; -update noar tt set v0='AN7CQKR80HTNYYHRN5E9MV' where id=7; -update noar ti set v0='AN7CQKR80HTNYYHRN5E9MV' where id=7; -update noar tt set b0='JZTOSN4131P5ABLZ' where id=7; -update noar ti set b0='JZTOSN4131P5ABLZ' where id=7; -update noar tt set v0='GPOOAJKUI64C' where id=7; -update noar ti set v0='GPOOAJKUI64C' where id=7; -update noar tt set b1='42MFK7ZM7' where id=7; -update noar ti set b1='42MFK7ZM7' where id=7; -update noar tt set v0='RUOHSPKTCP1ZWPC72JEUC7AEGS' where id=7; -update noar ti set v0='RUOHSPKTCP1ZWPC72JEUC7AEGS' where id=7; -update noar tt set b2='BUU2CLFLHMTQL' where id=7; -update noar ti set b2='BUU2CLFLHMTQL' where id=7; -update noar tt set v0='2X6EJP92K892R8XTYJP67TOB8' where id=8; -update noar ti set v0='2X6EJP92K892R8XTYJP67TOB8' where id=8; -update noar tt set b0='TBSM2JLP3T7ULLWS75BUPK' where id=8; -update noar ti set b0='TBSM2JLP3T7ULLWS75BUPK' where id=8; -update noar tt set v0='HKJO6VSPOX3' where id=8; -update noar ti set v0='HKJO6VSPOX3' where id=8; -update noar tt set b1='VEYEYI6Z24671KDA0KV4KWDC4C52N' where id=8; -update noar ti set b1='VEYEYI6Z24671KDA0KV4KWDC4C52N' where id=8; -update noar tt set v0='UW9VSXQY5BYSYMOMWXJJKVCW' where id=8; -update noar ti set v0='UW9VSXQY5BYSYMOMWXJJKVCW' where id=8; -update noar tt set b2='5VKVCN1NU12T' where id=8; -update noar ti set b2='5VKVCN1NU12T' where id=8; -update noar tt set v0='IR4THFPYL8NL4WY8' where id=9; -update noar ti set v0='IR4THFPYL8NL4WY8' where id=9; -update noar tt set b0='JIPCBM9NYFTJ4NJ6HIWZR' where id=9; -update noar ti set b0='JIPCBM9NYFTJ4NJ6HIWZR' where id=9; -update noar tt set v0='1JVC7DEKL9EEY56RPOL23PH' where id=9; -update noar ti set v0='1JVC7DEKL9EEY56RPOL23PH' where id=9; -update noar tt set b1='KCWZ3OA6YZZ' where id=9; -update noar ti set b1='KCWZ3OA6YZZ' where id=9; -update noar tt set v0='JYITTD5TBMUEWTG6BJR2UA6PL6FR1' where id=9; -update noar ti set v0='JYITTD5TBMUEWTG6BJR2UA6PL6FR1' where id=9; -update noar tt set b2='8DNARRGW8XT9YTSJUQBJDOAJ9X5G5N5' where id=9; -update noar ti set b2='8DNARRGW8XT9YTSJUQBJDOAJ9X5G5N5' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 blob null, - b1 mediumblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='VASH4CFHPXPECA2G20IB66E' where id=1; -update noar ti set v0='VASH4CFHPXPECA2G20IB66E' where id=1; -update noar tt set b0='8220R2SWHAQBF' where id=1; -update noar ti set b0='8220R2SWHAQBF' where id=1; -update noar tt set v0='JFMOWJ8NJAGXB5VPFQ4QEJA6KHUH' where id=1; -update noar ti set v0='JFMOWJ8NJAGXB5VPFQ4QEJA6KHUH' where id=1; -update noar tt set b1='8LWY6AR8G7SM23OW7G4AQO' where id=1; -update noar ti set b1='8LWY6AR8G7SM23OW7G4AQO' where id=1; -update noar tt set v0='VJQZKV5O63RQ2E5KGPVC' where id=1; -update noar ti set v0='VJQZKV5O63RQ2E5KGPVC' where id=1; -update noar tt set b2='LC6' where id=1; -update noar ti set b2='LC6' where id=1; -update noar tt set v0='3O0SALEHAY7D32IPGAPP2CKJCD' where id=2; -update noar ti set v0='3O0SALEHAY7D32IPGAPP2CKJCD' where id=2; -update noar tt set b0='CVBL40Z2IAQHZ9' where id=2; -update noar ti set b0='CVBL40Z2IAQHZ9' where id=2; -update noar tt set v0='ZQJ4T0J3EQ6EH01S059HQ3QPWRSKFTKM' where id=2; -update noar ti set v0='ZQJ4T0J3EQ6EH01S059HQ3QPWRSKFTKM' where id=2; -update noar tt set b1='36U2OH3X2ZCLSAEQJEM3UO' where id=2; -update noar ti set b1='36U2OH3X2ZCLSAEQJEM3UO' where id=2; -update noar tt set v0='QELXOIF044KO6DB' where id=2; -update noar ti set v0='QELXOIF044KO6DB' where id=2; -update noar tt set b2='LR' where id=2; -update noar ti set b2='LR' where id=2; -update noar tt set v0='DFLUV' where id=3; -update noar ti set v0='DFLUV' where id=3; -update noar tt set b0='11R' where id=3; -update noar ti set b0='11R' where id=3; -update noar tt set v0='ZEKBCRHFB59701D04P8RF5A9G0U' where id=3; -update noar ti set v0='ZEKBCRHFB59701D04P8RF5A9G0U' where id=3; -update noar tt set b1='9XG1RX32GSAFXIOBNPWRYRCVRME' where id=3; -update noar ti set b1='9XG1RX32GSAFXIOBNPWRYRCVRME' where id=3; -update noar tt set v0='N9AEUSNSNQB25QGPQC49SRV' where id=3; -update noar ti set v0='N9AEUSNSNQB25QGPQC49SRV' where id=3; -update noar tt set b2='XI6M' where id=3; -update noar ti set b2='XI6M' where id=3; -update noar tt set v0='XB82QW78JJJG' where id=4; -update noar ti set v0='XB82QW78JJJG' where id=4; -update noar tt set b0='QH8AJ9R8E7LXD2E6Y9MHFTJSB9DJD8Y' where id=4; -update noar ti set b0='QH8AJ9R8E7LXD2E6Y9MHFTJSB9DJD8Y' where id=4; -update noar tt set v0='9CQN0CQG26DK' where id=4; -update noar ti set v0='9CQN0CQG26DK' where id=4; -update noar tt set b1='FGRJ9V3WT0VG9A' where id=4; -update noar ti set b1='FGRJ9V3WT0VG9A' where id=4; -update noar tt set v0='OH2TDKG6' where id=4; -update noar ti set v0='OH2TDKG6' where id=4; -update noar tt set b2='70OHIX9R16' where id=4; -update noar ti set b2='70OHIX9R16' where id=4; -update noar tt set v0='G7JPAZY3B23KMDEY7U8R' where id=5; -update noar ti set v0='G7JPAZY3B23KMDEY7U8R' where id=5; -update noar tt set b0='K2FKHCLSGYEPKU1LG4G5JRTA9MCGC5HR' where id=5; -update noar ti set b0='K2FKHCLSGYEPKU1LG4G5JRTA9MCGC5HR' where id=5; -update noar tt set v0='57YIL2J9W510T7FHY70AB0F2WTD3' where id=5; -update noar ti set v0='57YIL2J9W510T7FHY70AB0F2WTD3' where id=5; -update noar tt set b1='O' where id=5; -update noar ti set b1='O' where id=5; -update noar tt set v0='BE' where id=5; -update noar ti set v0='BE' where id=5; -update noar tt set b2='P9IGX0UVUJMF42389S8' where id=5; -update noar ti set b2='P9IGX0UVUJMF42389S8' where id=5; -update noar tt set v0='4AGJH9HHNAFT8F6YC4PSQHASE7' where id=6; -update noar ti set v0='4AGJH9HHNAFT8F6YC4PSQHASE7' where id=6; -update noar tt set b0='Y0DZX2E3LV4U0QW6V' where id=6; -update noar ti set b0='Y0DZX2E3LV4U0QW6V' where id=6; -update noar tt set v0='H6PV3VFUD0514PY' where id=6; -update noar ti set v0='H6PV3VFUD0514PY' where id=6; -update noar tt set b1='NAHBN4CN58CM4NS9W9TX' where id=6; -update noar ti set b1='NAHBN4CN58CM4NS9W9TX' where id=6; -update noar tt set v0='S6066LV8EMUGGOE5SL2XQ' where id=6; -update noar ti set v0='S6066LV8EMUGGOE5SL2XQ' where id=6; -update noar tt set b2='PZ2W' where id=6; -update noar ti set b2='PZ2W' where id=6; -update noar tt set v0='2RFIXZT6B1S0DO4U' where id=7; -update noar ti set v0='2RFIXZT6B1S0DO4U' where id=7; -update noar tt set b0='32ET70UQ85YX5EA2' where id=7; -update noar ti set b0='32ET70UQ85YX5EA2' where id=7; -update noar tt set v0='K0JQU6VFAYE2ZHT2WFCLLO53F6K' where id=7; -update noar ti set v0='K0JQU6VFAYE2ZHT2WFCLLO53F6K' where id=7; -update noar tt set b1='I5' where id=7; -update noar ti set b1='I5' where id=7; -update noar tt set v0='YK00JL1KCSZ0BOS1XU' where id=7; -update noar ti set v0='YK00JL1KCSZ0BOS1XU' where id=7; -update noar tt set b2='N4JJS1II' where id=7; -update noar ti set b2='N4JJS1II' where id=7; -update noar tt set v0='LSH2ZQ6AZPOIKWPSFAQM63A0' where id=8; -update noar ti set v0='LSH2ZQ6AZPOIKWPSFAQM63A0' where id=8; -update noar tt set b0='PCE19F85UZRBDSZQ77XPOWIY5N87OJ4J' where id=8; -update noar ti set b0='PCE19F85UZRBDSZQ77XPOWIY5N87OJ4J' where id=8; -update noar tt set v0='IS' where id=8; -update noar ti set v0='IS' where id=8; -update noar tt set b1='BG32D18NHVGVLWA9' where id=8; -update noar ti set b1='BG32D18NHVGVLWA9' where id=8; -update noar tt set v0='UOZ' where id=8; -update noar ti set v0='UOZ' where id=8; -update noar tt set b2='KJ29EHTRB9DPTHNAKGKE8CMT4XKEXSO' where id=8; -update noar ti set b2='KJ29EHTRB9DPTHNAKGKE8CMT4XKEXSO' where id=8; -update noar tt set v0='N0GP3' where id=9; -update noar ti set v0='N0GP3' where id=9; -update noar tt set b0='14W38Z82UWJLU' where id=9; -update noar ti set b0='14W38Z82UWJLU' where id=9; -update noar tt set v0='QW1GS4PGNPZ063LF0' where id=9; -update noar ti set v0='QW1GS4PGNPZ063LF0' where id=9; -update noar tt set b1='A' where id=9; -update noar ti set b1='A' where id=9; -update noar tt set v0='4IZHBRVS36RJ8EZ4N5M4ME1EB9A' where id=9; -update noar ti set v0='4IZHBRVS36RJ8EZ4N5M4ME1EB9A' where id=9; -update noar tt set b2='03JTWKN4QIFBCZDY9D' where id=9; -update noar ti set b2='03JTWKN4QIFBCZDY9D' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 blob null, - b1 mediumblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='S5XYTFIBIRL682CLNPN4VV' where id=1; -update noar ti set v0='S5XYTFIBIRL682CLNPN4VV' where id=1; -update noar tt set b0='GHLR29Z9D' where id=1; -update noar ti set b0='GHLR29Z9D' where id=1; -update noar tt set v0='B6TSLV2HDAT228QL8' where id=1; -update noar ti set v0='B6TSLV2HDAT228QL8' where id=1; -update noar tt set b1='HSL' where id=1; -update noar ti set b1='HSL' where id=1; -update noar tt set v0='OR57BP5ICHGJU8FK' where id=1; -update noar ti set v0='OR57BP5ICHGJU8FK' where id=1; -update noar tt set b2='UMI1FKXU6GVPQ1W5Q4CIP0DOV22' where id=1; -update noar ti set b2='UMI1FKXU6GVPQ1W5Q4CIP0DOV22' where id=1; -update noar tt set v0='ZPX3GM3827' where id=2; -update noar ti set v0='ZPX3GM3827' where id=2; -update noar tt set b0='1' where id=2; -update noar ti set b0='1' where id=2; -update noar tt set v0='5RU36NXKUX4' where id=2; -update noar ti set v0='5RU36NXKUX4' where id=2; -update noar tt set b1='K6UQUM4ERPKMXQ7HFXIFDDL5O99JO' where id=2; -update noar ti set b1='K6UQUM4ERPKMXQ7HFXIFDDL5O99JO' where id=2; -update noar tt set v0='TMJ7Y9S94HEKO5LL7HLG53JZWP' where id=2; -update noar ti set v0='TMJ7Y9S94HEKO5LL7HLG53JZWP' where id=2; -update noar tt set b2='1JCI1R8VZ2785HGWAP2FIHLQM73UOOQJ' where id=2; -update noar ti set b2='1JCI1R8VZ2785HGWAP2FIHLQM73UOOQJ' where id=2; -update noar tt set v0='YUT' where id=3; -update noar ti set v0='YUT' where id=3; -update noar tt set b0='CMSUE' where id=3; -update noar ti set b0='CMSUE' where id=3; -update noar tt set v0='RTM' where id=3; -update noar ti set v0='RTM' where id=3; -update noar tt set b1='MP' where id=3; -update noar ti set b1='MP' where id=3; -update noar tt set v0='2GM2B0AIJ0Q5FERKDI6GEP1YTR4K5R' where id=3; -update noar ti set v0='2GM2B0AIJ0Q5FERKDI6GEP1YTR4K5R' where id=3; -update noar tt set b2='HAVEEIAYLPKWAZLCR264QZO79' where id=3; -update noar ti set b2='HAVEEIAYLPKWAZLCR264QZO79' where id=3; -update noar tt set v0='0J7U341QLIDZ30GKVO47V8PI49E7B8I' where id=4; -update noar ti set v0='0J7U341QLIDZ30GKVO47V8PI49E7B8I' where id=4; -update noar tt set b0='TRXI4SQ4HO29AM' where id=4; -update noar ti set b0='TRXI4SQ4HO29AM' where id=4; -update noar tt set v0='93140JN' where id=4; -update noar ti set v0='93140JN' where id=4; -update noar tt set b1='V25RFLTKPDUD' where id=4; -update noar ti set b1='V25RFLTKPDUD' where id=4; -update noar tt set v0='DH5B3IYTYZQLNW3PXBQA0FE' where id=4; -update noar ti set v0='DH5B3IYTYZQLNW3PXBQA0FE' where id=4; -update noar tt set b2='J7FV' where id=4; -update noar ti set b2='J7FV' where id=4; -update noar tt set v0='8XYTUZWE6HIF74QE7AYOHWCAGF' where id=5; -update noar ti set v0='8XYTUZWE6HIF74QE7AYOHWCAGF' where id=5; -update noar tt set b0='591ERV2E03QA5TPS7L7R60TJH' where id=5; -update noar ti set b0='591ERV2E03QA5TPS7L7R60TJH' where id=5; -update noar tt set v0='O2I8I690I2JENJIANLA1H90DMK' where id=5; -update noar ti set v0='O2I8I690I2JENJIANLA1H90DMK' where id=5; -update noar tt set b1='3HLWRN7J84QJU6' where id=5; -update noar ti set b1='3HLWRN7J84QJU6' where id=5; -update noar tt set v0='X3Q9DOEP6T5UECW' where id=5; -update noar ti set v0='X3Q9DOEP6T5UECW' where id=5; -update noar tt set b2='AUXBGX63JR8J9' where id=5; -update noar ti set b2='AUXBGX63JR8J9' where id=5; -update noar tt set v0='HBB00KXSZ7XYOHQJFDY7VN5S3' where id=6; -update noar ti set v0='HBB00KXSZ7XYOHQJFDY7VN5S3' where id=6; -update noar tt set b0='UZGCCJZT' where id=6; -update noar ti set b0='UZGCCJZT' where id=6; -update noar tt set v0='3G2LOTNOZCGERF0UVZL1CP7' where id=6; -update noar ti set v0='3G2LOTNOZCGERF0UVZL1CP7' where id=6; -update noar tt set b1='XZFNXV8JI7' where id=6; -update noar ti set b1='XZFNXV8JI7' where id=6; -update noar tt set v0='J0' where id=6; -update noar ti set v0='J0' where id=6; -update noar tt set b2='TYJ' where id=6; -update noar ti set b2='TYJ' where id=6; -update noar tt set v0='PTS3' where id=7; -update noar ti set v0='PTS3' where id=7; -update noar tt set b0='4UYA7948LW684ND' where id=7; -update noar ti set b0='4UYA7948LW684ND' where id=7; -update noar tt set v0='C406K1WBS4CE2' where id=7; -update noar ti set v0='C406K1WBS4CE2' where id=7; -update noar tt set b1='SIY5JAEYXQ8SCBNFQBX0EBN7ZTK07' where id=7; -update noar ti set b1='SIY5JAEYXQ8SCBNFQBX0EBN7ZTK07' where id=7; -update noar tt set v0='AVT7' where id=7; -update noar ti set v0='AVT7' where id=7; -update noar tt set b2='E4GS6LCPPX29SW22UZZNSMT' where id=7; -update noar ti set b2='E4GS6LCPPX29SW22UZZNSMT' where id=7; -update noar tt set v0='WQCTS2K' where id=8; -update noar ti set v0='WQCTS2K' where id=8; -update noar tt set b0='Y82WBEIYBD' where id=8; -update noar ti set b0='Y82WBEIYBD' where id=8; -update noar tt set v0='JQM' where id=8; -update noar ti set v0='JQM' where id=8; -update noar tt set b1='BCHUH4PK4C7U4X9JBWTMKT6TX' where id=8; -update noar ti set b1='BCHUH4PK4C7U4X9JBWTMKT6TX' where id=8; -update noar tt set v0='SKMQI2JEG3A2UIOSQCW259BWAYV' where id=8; -update noar ti set v0='SKMQI2JEG3A2UIOSQCW259BWAYV' where id=8; -update noar tt set b2='Q1X4WY148VU2NMEHKEQBK6ZPY6' where id=8; -update noar ti set b2='Q1X4WY148VU2NMEHKEQBK6ZPY6' where id=8; -update noar tt set v0='RYE' where id=9; -update noar ti set v0='RYE' where id=9; -update noar tt set b0='M656YPEDHKI1FEZYM5PD22481YQSPDNM' where id=9; -update noar ti set b0='M656YPEDHKI1FEZYM5PD22481YQSPDNM' where id=9; -update noar tt set v0='TKNLFV9Z6QRXCY0IV5NNPSHXLAWBCTVQ' where id=9; -update noar ti set v0='TKNLFV9Z6QRXCY0IV5NNPSHXLAWBCTVQ' where id=9; -update noar tt set b1='XNNLVS4BBBUXYGLN53M0' where id=9; -update noar ti set b1='XNNLVS4BBBUXYGLN53M0' where id=9; -update noar tt set v0='DDV4QXQ8Y661YU6YUIZYTZKAKCVWMP0' where id=9; -update noar ti set v0='DDV4QXQ8Y661YU6YUIZYTZKAKCVWMP0' where id=9; -update noar tt set b2='QPWJ3HPR03BDMIV9B4' where id=9; -update noar ti set b2='QPWJ3HPR03BDMIV9B4' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 blob not null, - b1 mediumblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='V5J9BZKDV73VULOTIMBCRY7WESI5' where id=1; -update noar ti set v0='V5J9BZKDV73VULOTIMBCRY7WESI5' where id=1; -update noar tt set b0='97' where id=1; -update noar ti set b0='97' where id=1; -update noar tt set v0='TBB25V4H1NHYYMH83WT7K8GFMN' where id=1; -update noar ti set v0='TBB25V4H1NHYYMH83WT7K8GFMN' where id=1; -update noar tt set b1='MNSEU4QMVLPW' where id=1; -update noar ti set b1='MNSEU4QMVLPW' where id=1; -update noar tt set v0='GF6L9YYC93K4WIB' where id=1; -update noar ti set v0='GF6L9YYC93K4WIB' where id=1; -update noar tt set b2='P487KQKNU8295BQZG7P10DKMT' where id=1; -update noar ti set b2='P487KQKNU8295BQZG7P10DKMT' where id=1; -update noar tt set v0='57ZX2UFGXOH3E76WRA4SXVQ7XJFPZV1' where id=2; -update noar ti set v0='57ZX2UFGXOH3E76WRA4SXVQ7XJFPZV1' where id=2; -update noar tt set b0='KVORMV0MAQLB56QLTUPPN0U1IC' where id=2; -update noar ti set b0='KVORMV0MAQLB56QLTUPPN0U1IC' where id=2; -update noar tt set v0='GTTYH7R6EXRK' where id=2; -update noar ti set v0='GTTYH7R6EXRK' where id=2; -update noar tt set b1='DADK3BK8C423W' where id=2; -update noar ti set b1='DADK3BK8C423W' where id=2; -update noar tt set v0='ECA' where id=2; -update noar ti set v0='ECA' where id=2; -update noar tt set b2='W0A36DNEBJ7JZIENX47' where id=2; -update noar ti set b2='W0A36DNEBJ7JZIENX47' where id=2; -update noar tt set v0='97N990O6FS7GMC2' where id=3; -update noar ti set v0='97N990O6FS7GMC2' where id=3; -update noar tt set b0='XYE3Q' where id=3; -update noar ti set b0='XYE3Q' where id=3; -update noar tt set v0='6692' where id=3; -update noar ti set v0='6692' where id=3; -update noar tt set b1='XZFR9W3NH' where id=3; -update noar ti set b1='XZFR9W3NH' where id=3; -update noar tt set v0='2A0E' where id=3; -update noar ti set v0='2A0E' where id=3; -update noar tt set b2='KH6CNOT0D561XJ5Z913PKHOEBEKBO' where id=3; -update noar ti set b2='KH6CNOT0D561XJ5Z913PKHOEBEKBO' where id=3; -update noar tt set v0='W7ETQO' where id=4; -update noar ti set v0='W7ETQO' where id=4; -update noar tt set b0='2U2NYCND795FXC1' where id=4; -update noar ti set b0='2U2NYCND795FXC1' where id=4; -update noar tt set v0='56QE0Z9A08H7TH3F0MA9XV' where id=4; -update noar ti set v0='56QE0Z9A08H7TH3F0MA9XV' where id=4; -update noar tt set b1='DZNXE5A9NFTJRAY1XWHC' where id=4; -update noar ti set b1='DZNXE5A9NFTJRAY1XWHC' where id=4; -update noar tt set v0='TN5CE56JT28BDBN0BH65UP9S2E132IDC' where id=4; -update noar ti set v0='TN5CE56JT28BDBN0BH65UP9S2E132IDC' where id=4; -update noar tt set b2='CF2ZQFNS' where id=4; -update noar ti set b2='CF2ZQFNS' where id=4; -update noar tt set v0='BSEYQPDI6K' where id=5; -update noar ti set v0='BSEYQPDI6K' where id=5; -update noar tt set b0='O42XW16A2OOR49I1' where id=5; -update noar ti set b0='O42XW16A2OOR49I1' where id=5; -update noar tt set v0='FCMVWLR89X4XRYN55P2P' where id=5; -update noar ti set v0='FCMVWLR89X4XRYN55P2P' where id=5; -update noar tt set b1='CYJWKRAR10WKKNH1' where id=5; -update noar ti set b1='CYJWKRAR10WKKNH1' where id=5; -update noar tt set v0='96848K86' where id=5; -update noar ti set v0='96848K86' where id=5; -update noar tt set b2='18XFMNE92YQTVVY62K' where id=5; -update noar ti set b2='18XFMNE92YQTVVY62K' where id=5; -update noar tt set v0='6X28FJ0AR91T6GI4' where id=6; -update noar ti set v0='6X28FJ0AR91T6GI4' where id=6; -update noar tt set b0='ZA55JV' where id=6; -update noar ti set b0='ZA55JV' where id=6; -update noar tt set v0='WR12Q8PX9O' where id=6; -update noar ti set v0='WR12Q8PX9O' where id=6; -update noar tt set b1='KH444CFXOK2' where id=6; -update noar ti set b1='KH444CFXOK2' where id=6; -update noar tt set v0='XA807K3DY7E2KPMTIIC6SEQQQ737' where id=6; -update noar ti set v0='XA807K3DY7E2KPMTIIC6SEQQQ737' where id=6; -update noar tt set b2='TE2' where id=6; -update noar ti set b2='TE2' where id=6; -update noar tt set v0='58' where id=7; -update noar ti set v0='58' where id=7; -update noar tt set b0='7Y0LL1VS4LRW1671QGU' where id=7; -update noar ti set b0='7Y0LL1VS4LRW1671QGU' where id=7; -update noar tt set v0='CN0DUMB4ZH0FYRCBCUFAU288QMF' where id=7; -update noar ti set v0='CN0DUMB4ZH0FYRCBCUFAU288QMF' where id=7; -update noar tt set b1='TZCM2KR104Z3L4NYOI' where id=7; -update noar ti set b1='TZCM2KR104Z3L4NYOI' where id=7; -update noar tt set v0='5BK2KBK4' where id=7; -update noar ti set v0='5BK2KBK4' where id=7; -update noar tt set b2='R6BO38TUGY1XJPXZ' where id=7; -update noar ti set b2='R6BO38TUGY1XJPXZ' where id=7; -update noar tt set v0='GKFHJCP9WJ4TM7RD7OGK60ZH' where id=8; -update noar ti set v0='GKFHJCP9WJ4TM7RD7OGK60ZH' where id=8; -update noar tt set b0='R4' where id=8; -update noar ti set b0='R4' where id=8; -update noar tt set v0='UD6TH59NTL66XNAKL' where id=8; -update noar ti set v0='UD6TH59NTL66XNAKL' where id=8; -update noar tt set b1='6HF247PXA2880ODXVCPP' where id=8; -update noar ti set b1='6HF247PXA2880ODXVCPP' where id=8; -update noar tt set v0='K0POXNHX' where id=8; -update noar ti set v0='K0POXNHX' where id=8; -update noar tt set b2='QI4N0HYUIFXHMWWRZEBJU' where id=8; -update noar ti set b2='QI4N0HYUIFXHMWWRZEBJU' where id=8; -update noar tt set v0='EE1FYWU' where id=9; -update noar ti set v0='EE1FYWU' where id=9; -update noar tt set b0='LU9' where id=9; -update noar ti set b0='LU9' where id=9; -update noar tt set v0='61SDLBOH2Z0URC5DUDGD' where id=9; -update noar ti set v0='61SDLBOH2Z0URC5DUDGD' where id=9; -update noar tt set b1='CHK319K0' where id=9; -update noar ti set b1='CHK319K0' where id=9; -update noar tt set v0='LL4Z1GL2PVH1RQKEJWFPRZ072EZFP2Q' where id=9; -update noar ti set v0='LL4Z1GL2PVH1RQKEJWFPRZ072EZFP2Q' where id=9; -update noar tt set b2='I2OEFB8LPV8' where id=9; -update noar ti set b2='I2OEFB8LPV8' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 blob not null, - b1 mediumblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='UH1QOV' where id=1; -update noar ti set v0='UH1QOV' where id=1; -update noar tt set b0='OCO0' where id=1; -update noar ti set b0='OCO0' where id=1; -update noar tt set v0='CUA8VV6DON' where id=1; -update noar ti set v0='CUA8VV6DON' where id=1; -update noar tt set b1='GYG3GND4JATRQGYIO6GY1' where id=1; -update noar ti set b1='GYG3GND4JATRQGYIO6GY1' where id=1; -update noar tt set v0='5DFKBSOVPS3JS5LTTDT3' where id=1; -update noar ti set v0='5DFKBSOVPS3JS5LTTDT3' where id=1; -update noar tt set b2='8ULDHFEMAZ3HL1R4RZTZX5Q0YS' where id=1; -update noar ti set b2='8ULDHFEMAZ3HL1R4RZTZX5Q0YS' where id=1; -update noar tt set v0='V7ZKV9X' where id=2; -update noar ti set v0='V7ZKV9X' where id=2; -update noar tt set b0='CI6VWYQDBYZ4PWEMGBQXU' where id=2; -update noar ti set b0='CI6VWYQDBYZ4PWEMGBQXU' where id=2; -update noar tt set v0='PC' where id=2; -update noar ti set v0='PC' where id=2; -update noar tt set b1='DQRBT5OFC' where id=2; -update noar ti set b1='DQRBT5OFC' where id=2; -update noar tt set v0='N9TL8BEYKCGYZZMP1QZFW' where id=2; -update noar ti set v0='N9TL8BEYKCGYZZMP1QZFW' where id=2; -update noar tt set b2='EQHBBW2C7SEP8VAT' where id=2; -update noar ti set b2='EQHBBW2C7SEP8VAT' where id=2; -update noar tt set v0='V7BRD9R3Z' where id=3; -update noar ti set v0='V7BRD9R3Z' where id=3; -update noar tt set b0='1W0' where id=3; -update noar ti set b0='1W0' where id=3; -update noar tt set v0='N1G10DIA1BL' where id=3; -update noar ti set v0='N1G10DIA1BL' where id=3; -update noar tt set b1='C7J3M31O4I3JIR5AMEXGUX0BVPIB76OQ' where id=3; -update noar ti set b1='C7J3M31O4I3JIR5AMEXGUX0BVPIB76OQ' where id=3; -update noar tt set v0='GA5E4KI4TAN5LLSYC5XRJZNMBM' where id=3; -update noar ti set v0='GA5E4KI4TAN5LLSYC5XRJZNMBM' where id=3; -update noar tt set b2='8WZ1U2EXOWRP3ARVSQGDKINE' where id=3; -update noar ti set b2='8WZ1U2EXOWRP3ARVSQGDKINE' where id=3; -update noar tt set v0='S5LZC' where id=4; -update noar ti set v0='S5LZC' where id=4; -update noar tt set b0='KVKT64MZ1VHP2QK4EXTH80' where id=4; -update noar ti set b0='KVKT64MZ1VHP2QK4EXTH80' where id=4; -update noar tt set v0='F46PG' where id=4; -update noar ti set v0='F46PG' where id=4; -update noar tt set b1='XNZJBLT95NPJCSM' where id=4; -update noar ti set b1='XNZJBLT95NPJCSM' where id=4; -update noar tt set v0='6309VV9O0QGWUH45L8JNSD0AXN0' where id=4; -update noar ti set v0='6309VV9O0QGWUH45L8JNSD0AXN0' where id=4; -update noar tt set b2='G3V0SZ0ZM3TKEJNQKV0NL' where id=4; -update noar ti set b2='G3V0SZ0ZM3TKEJNQKV0NL' where id=4; -update noar tt set v0='G3C8P8X' where id=5; -update noar ti set v0='G3C8P8X' where id=5; -update noar tt set b0='PERKCFJB83EQVS4MA58V3LUDW80ZJP' where id=5; -update noar ti set b0='PERKCFJB83EQVS4MA58V3LUDW80ZJP' where id=5; -update noar tt set v0='X5FS9R8D' where id=5; -update noar ti set v0='X5FS9R8D' where id=5; -update noar tt set b1='Q4B71CBDI9ULSZW' where id=5; -update noar ti set b1='Q4B71CBDI9ULSZW' where id=5; -update noar tt set v0='AI83WYK748CLVQJQK58ISPGE39ESRAQW' where id=5; -update noar ti set v0='AI83WYK748CLVQJQK58ISPGE39ESRAQW' where id=5; -update noar tt set b2='OZL17X4V0Z' where id=5; -update noar ti set b2='OZL17X4V0Z' where id=5; -update noar tt set v0='B5OIZN7DY8827F5JW53E94QV' where id=6; -update noar ti set v0='B5OIZN7DY8827F5JW53E94QV' where id=6; -update noar tt set b0='M1' where id=6; -update noar ti set b0='M1' where id=6; -update noar tt set v0='AAOXJC979PR4MGNF' where id=6; -update noar ti set v0='AAOXJC979PR4MGNF' where id=6; -update noar tt set b1='4L8G220187' where id=6; -update noar ti set b1='4L8G220187' where id=6; -update noar tt set v0='WXPFLYC9Z7GEBFJLHDIY9YU' where id=6; -update noar ti set v0='WXPFLYC9Z7GEBFJLHDIY9YU' where id=6; -update noar tt set b2='7C1DVTR0DVQ1M6SSQA8XMCQVZXSVB3' where id=6; -update noar ti set b2='7C1DVTR0DVQ1M6SSQA8XMCQVZXSVB3' where id=6; -update noar tt set v0='7WTIOJ80Q6S0E24GUPGJFQ5FMMT7TUQ4' where id=7; -update noar ti set v0='7WTIOJ80Q6S0E24GUPGJFQ5FMMT7TUQ4' where id=7; -update noar tt set b0='92Z5WVFEQUFP604FKQLLPPXTNH' where id=7; -update noar ti set b0='92Z5WVFEQUFP604FKQLLPPXTNH' where id=7; -update noar tt set v0='QC6EOS4G68ZAKJ0H' where id=7; -update noar ti set v0='QC6EOS4G68ZAKJ0H' where id=7; -update noar tt set b1='VR42Q3HFR3IWNIQUCT9ZC1T' where id=7; -update noar ti set b1='VR42Q3HFR3IWNIQUCT9ZC1T' where id=7; -update noar tt set v0='E0QKA7HKS2SS9IVQUH5FJGS8XZIIN3' where id=7; -update noar ti set v0='E0QKA7HKS2SS9IVQUH5FJGS8XZIIN3' where id=7; -update noar tt set b2='X8SUBOUD0KFSRS69JP6REWXGMQ' where id=7; -update noar ti set b2='X8SUBOUD0KFSRS69JP6REWXGMQ' where id=7; -update noar tt set v0='PLWDFTFCFN31K' where id=8; -update noar ti set v0='PLWDFTFCFN31K' where id=8; -update noar tt set b0='MS9T7T77CUC1LAFV7ELP5C7221K7NAK' where id=8; -update noar ti set b0='MS9T7T77CUC1LAFV7ELP5C7221K7NAK' where id=8; -update noar tt set v0='VLG4IFJ9UW1JOB2' where id=8; -update noar ti set v0='VLG4IFJ9UW1JOB2' where id=8; -update noar tt set b1='U0E9XMHIK02A7XYRH7R4O2N' where id=8; -update noar ti set b1='U0E9XMHIK02A7XYRH7R4O2N' where id=8; -update noar tt set v0='5KV0' where id=8; -update noar ti set v0='5KV0' where id=8; -update noar tt set b2='7BJLOT' where id=8; -update noar ti set b2='7BJLOT' where id=8; -update noar tt set v0='8G2NAHJ3QZZSKBRA' where id=9; -update noar ti set v0='8G2NAHJ3QZZSKBRA' where id=9; -update noar tt set b0='EF35Y' where id=9; -update noar ti set b0='EF35Y' where id=9; -update noar tt set v0='ACLX6WJEGEVCB9ZZ2YQJPVGDEZ' where id=9; -update noar ti set v0='ACLX6WJEGEVCB9ZZ2YQJPVGDEZ' where id=9; -update noar tt set b1='A2F6MX9TMWCHJB219C4KIGM6PQ' where id=9; -update noar ti set b1='A2F6MX9TMWCHJB219C4KIGM6PQ' where id=9; -update noar tt set v0='8SL62CO2IBOLYQYVL1LM8AEMFUN9' where id=9; -update noar ti set v0='8SL62CO2IBOLYQYVL1LM8AEMFUN9' where id=9; -update noar tt set b2='N1W3ZHRP478ERLRI3HXUD5TTX7' where id=9; -update noar ti set b2='N1W3ZHRP478ERLRI3HXUD5TTX7' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 blob null, - b1 mediumblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='888MNXBYIY385I8I3H1WRY9L7UMP' where id=1; -update noar ti set v0='888MNXBYIY385I8I3H1WRY9L7UMP' where id=1; -update noar tt set b0='29' where id=1; -update noar ti set b0='29' where id=1; -update noar tt set v0='QGXK1EM2MW' where id=1; -update noar ti set v0='QGXK1EM2MW' where id=1; -update noar tt set b1='5I1LIG' where id=1; -update noar ti set b1='5I1LIG' where id=1; -update noar tt set v0='2NJEG6KHZ30BTFUFCHDD7EYMLTO3YT' where id=1; -update noar ti set v0='2NJEG6KHZ30BTFUFCHDD7EYMLTO3YT' where id=1; -update noar tt set b2='X1' where id=1; -update noar ti set b2='X1' where id=1; -update noar tt set v0='ZOAFGR5' where id=2; -update noar ti set v0='ZOAFGR5' where id=2; -update noar tt set b0='KX1DDSM7P' where id=2; -update noar ti set b0='KX1DDSM7P' where id=2; -update noar tt set v0='N78MXSRPMGK8O7RS' where id=2; -update noar ti set v0='N78MXSRPMGK8O7RS' where id=2; -update noar tt set b1='DUQ5MHFTN82' where id=2; -update noar ti set b1='DUQ5MHFTN82' where id=2; -update noar tt set v0='MWIN5A4DB9JVNPS92QMRXWP0GCU49M' where id=2; -update noar ti set v0='MWIN5A4DB9JVNPS92QMRXWP0GCU49M' where id=2; -update noar tt set b2='HT4NHOFZN1C1EJ' where id=2; -update noar ti set b2='HT4NHOFZN1C1EJ' where id=2; -update noar tt set v0='RBLT0OH868AMI82AE6Q19Y' where id=3; -update noar ti set v0='RBLT0OH868AMI82AE6Q19Y' where id=3; -update noar tt set b0='IC' where id=3; -update noar ti set b0='IC' where id=3; -update noar tt set v0='ZI41G' where id=3; -update noar ti set v0='ZI41G' where id=3; -update noar tt set b1='AIA4SRGCGMH3PNZA' where id=3; -update noar ti set b1='AIA4SRGCGMH3PNZA' where id=3; -update noar tt set v0='ET8DSTKS7SHX22QSFLBOH6NA' where id=3; -update noar ti set v0='ET8DSTKS7SHX22QSFLBOH6NA' where id=3; -update noar tt set b2='B1FM8QT6U2E2QH6VG' where id=3; -update noar ti set b2='B1FM8QT6U2E2QH6VG' where id=3; -update noar tt set v0='ZKFFH' where id=4; -update noar ti set v0='ZKFFH' where id=4; -update noar tt set b0='JMYXBD' where id=4; -update noar ti set b0='JMYXBD' where id=4; -update noar tt set v0='3E06094U1' where id=4; -update noar ti set v0='3E06094U1' where id=4; -update noar tt set b1='CU9FVZ36JY1UPOV' where id=4; -update noar ti set b1='CU9FVZ36JY1UPOV' where id=4; -update noar tt set v0='1YHNG52GDYCJGL9' where id=4; -update noar ti set v0='1YHNG52GDYCJGL9' where id=4; -update noar tt set b2='GN0CFKGX0PBGP4' where id=4; -update noar ti set b2='GN0CFKGX0PBGP4' where id=4; -update noar tt set v0='6T0NHGG8O7NT3BHWB' where id=5; -update noar ti set v0='6T0NHGG8O7NT3BHWB' where id=5; -update noar tt set b0='CGV8C4OFPMBOIDIBYBBG2NJW68WTTP1' where id=5; -update noar ti set b0='CGV8C4OFPMBOIDIBYBBG2NJW68WTTP1' where id=5; -update noar tt set v0='UHRVOWIA0RH2GXOGVHZIX' where id=5; -update noar ti set v0='UHRVOWIA0RH2GXOGVHZIX' where id=5; -update noar tt set b1='4O' where id=5; -update noar ti set b1='4O' where id=5; -update noar tt set v0='F8AST' where id=5; -update noar ti set v0='F8AST' where id=5; -update noar tt set b2='JO3SRJAJ94P95BESG' where id=5; -update noar ti set b2='JO3SRJAJ94P95BESG' where id=5; -update noar tt set v0='BA1PB5JL8U3S8' where id=6; -update noar ti set v0='BA1PB5JL8U3S8' where id=6; -update noar tt set b0='ROAP3E6ULD' where id=6; -update noar ti set b0='ROAP3E6ULD' where id=6; -update noar tt set v0='HZU' where id=6; -update noar ti set v0='HZU' where id=6; -update noar tt set b1='QW3REK12XXS8ZGSJKT4OYXNGR8LQG' where id=6; -update noar ti set b1='QW3REK12XXS8ZGSJKT4OYXNGR8LQG' where id=6; -update noar tt set v0='BJ2R8' where id=6; -update noar ti set v0='BJ2R8' where id=6; -update noar tt set b2='LHNI69FR' where id=6; -update noar ti set b2='LHNI69FR' where id=6; -update noar tt set v0='H' where id=7; -update noar ti set v0='H' where id=7; -update noar tt set b0='EW5WT5AO7L5U3' where id=7; -update noar ti set b0='EW5WT5AO7L5U3' where id=7; -update noar tt set v0='JHBYWFDND0VVNVINS15I' where id=7; -update noar ti set v0='JHBYWFDND0VVNVINS15I' where id=7; -update noar tt set b1='0MNTNBIRLJGK0IV4Q47GU' where id=7; -update noar ti set b1='0MNTNBIRLJGK0IV4Q47GU' where id=7; -update noar tt set v0='4J55NBIK65URUHVPZ0J3BKAK3R6TF52' where id=7; -update noar ti set v0='4J55NBIK65URUHVPZ0J3BKAK3R6TF52' where id=7; -update noar tt set b2='Z' where id=7; -update noar ti set b2='Z' where id=7; -update noar tt set v0='WD2WPT109JTIRDSZSVPNOEO7S' where id=8; -update noar ti set v0='WD2WPT109JTIRDSZSVPNOEO7S' where id=8; -update noar tt set b0='HMSG6R5C6VUJXWI8JYZAIM4CM0' where id=8; -update noar ti set b0='HMSG6R5C6VUJXWI8JYZAIM4CM0' where id=8; -update noar tt set v0='B41ED0UJ2HKS5EX07IMF' where id=8; -update noar ti set v0='B41ED0UJ2HKS5EX07IMF' where id=8; -update noar tt set b1='GJEA2TGEZDIRI3D' where id=8; -update noar ti set b1='GJEA2TGEZDIRI3D' where id=8; -update noar tt set v0='1E17XO1ZM2825X5A' where id=8; -update noar ti set v0='1E17XO1ZM2825X5A' where id=8; -update noar tt set b2='CTK2VQRLGYP6C3RXSPZWUI1FPIE30R2A' where id=8; -update noar ti set b2='CTK2VQRLGYP6C3RXSPZWUI1FPIE30R2A' where id=8; -update noar tt set v0='V1CXC8BHU8TMDVG63DXTSXCEQ' where id=9; -update noar ti set v0='V1CXC8BHU8TMDVG63DXTSXCEQ' where id=9; -update noar tt set b0='VQ8NJMERAUN507Q7KZ8G3OVU8F5' where id=9; -update noar ti set b0='VQ8NJMERAUN507Q7KZ8G3OVU8F5' where id=9; -update noar tt set v0='NF3Q5OYSSNIW9GVVMR0VI' where id=9; -update noar ti set v0='NF3Q5OYSSNIW9GVVMR0VI' where id=9; -update noar tt set b1='JRAJ' where id=9; -update noar ti set b1='JRAJ' where id=9; -update noar tt set v0='FAWJ7W7QOAG95EMF' where id=9; -update noar ti set v0='FAWJ7W7QOAG95EMF' where id=9; -update noar tt set b2='OG6MYKZ9ITKZL4PFMN9' where id=9; -update noar ti set b2='OG6MYKZ9ITKZL4PFMN9' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 blob null, - b1 mediumblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='0GSWUJSJV9R4QUUANH1ENF0QWEVQD' where id=1; -update noar ti set v0='0GSWUJSJV9R4QUUANH1ENF0QWEVQD' where id=1; -update noar tt set b0='1PK59L2YBM1' where id=1; -update noar ti set b0='1PK59L2YBM1' where id=1; -update noar tt set v0='UVT81TMYQ7' where id=1; -update noar ti set v0='UVT81TMYQ7' where id=1; -update noar tt set b1='A5K75JUUIUPR58' where id=1; -update noar ti set b1='A5K75JUUIUPR58' where id=1; -update noar tt set v0='XB32XI7GSQR' where id=1; -update noar ti set v0='XB32XI7GSQR' where id=1; -update noar tt set b2='13ZT7AW0IZSQNSL' where id=1; -update noar ti set b2='13ZT7AW0IZSQNSL' where id=1; -update noar tt set v0='25YG' where id=2; -update noar ti set v0='25YG' where id=2; -update noar tt set b0='C2GSBBLKK' where id=2; -update noar ti set b0='C2GSBBLKK' where id=2; -update noar tt set v0='BI4RNAOHYLN66FX6N' where id=2; -update noar ti set v0='BI4RNAOHYLN66FX6N' where id=2; -update noar tt set b1='1J3B' where id=2; -update noar ti set b1='1J3B' where id=2; -update noar tt set v0='KJ1ED6C27BI68' where id=2; -update noar ti set v0='KJ1ED6C27BI68' where id=2; -update noar tt set b2='PEKOMQXZ190MRABZJ2Z3LDEHLRIZ8W' where id=2; -update noar ti set b2='PEKOMQXZ190MRABZJ2Z3LDEHLRIZ8W' where id=2; -update noar tt set v0='K' where id=3; -update noar ti set v0='K' where id=3; -update noar tt set b0='FLGV5IFDBSOMAF3G' where id=3; -update noar ti set b0='FLGV5IFDBSOMAF3G' where id=3; -update noar tt set v0='RG18L68M2CLLBZ' where id=3; -update noar ti set v0='RG18L68M2CLLBZ' where id=3; -update noar tt set b1='EGUO8WV7J2JZLINWG53WXIHSQ' where id=3; -update noar ti set b1='EGUO8WV7J2JZLINWG53WXIHSQ' where id=3; -update noar tt set v0='BY90ICPPG8IX' where id=3; -update noar ti set v0='BY90ICPPG8IX' where id=3; -update noar tt set b2='2ZLXDOF' where id=3; -update noar ti set b2='2ZLXDOF' where id=3; -update noar tt set v0='NMQTFR2' where id=4; -update noar ti set v0='NMQTFR2' where id=4; -update noar tt set b0='5M1KUJILOHQVSQTXN' where id=4; -update noar ti set b0='5M1KUJILOHQVSQTXN' where id=4; -update noar tt set v0='ENHI3BUPFC1I241GOWHDI' where id=4; -update noar ti set v0='ENHI3BUPFC1I241GOWHDI' where id=4; -update noar tt set b1='3QNXCDLT' where id=4; -update noar ti set b1='3QNXCDLT' where id=4; -update noar tt set v0='DH5HTJH9ECJYMI' where id=4; -update noar ti set v0='DH5HTJH9ECJYMI' where id=4; -update noar tt set b2='77R64E3OSALE5T8XHL' where id=4; -update noar ti set b2='77R64E3OSALE5T8XHL' where id=4; -update noar tt set v0='YGDRNKO0KA184BEFM1SF277Z7ZAFWJ2' where id=5; -update noar ti set v0='YGDRNKO0KA184BEFM1SF277Z7ZAFWJ2' where id=5; -update noar tt set b0='427HGY' where id=5; -update noar ti set b0='427HGY' where id=5; -update noar tt set v0='IUX0P' where id=5; -update noar ti set v0='IUX0P' where id=5; -update noar tt set b1='ACM4SDATWHSPZM' where id=5; -update noar ti set b1='ACM4SDATWHSPZM' where id=5; -update noar tt set v0='LJ9G6UNAO9LHBAZCKAHZP1Z2E2' where id=5; -update noar ti set v0='LJ9G6UNAO9LHBAZCKAHZP1Z2E2' where id=5; -update noar tt set b2='P3NJ61QZ4FM431ZTMQ7Q0' where id=5; -update noar ti set b2='P3NJ61QZ4FM431ZTMQ7Q0' where id=5; -update noar tt set v0='LR' where id=6; -update noar ti set v0='LR' where id=6; -update noar tt set b0='CLD33KYSDI1IPRINB9XD5YC' where id=6; -update noar ti set b0='CLD33KYSDI1IPRINB9XD5YC' where id=6; -update noar tt set v0='OYD90VT6' where id=6; -update noar ti set v0='OYD90VT6' where id=6; -update noar tt set b1='V9893TNTKBPRFYMP5X' where id=6; -update noar ti set b1='V9893TNTKBPRFYMP5X' where id=6; -update noar tt set v0='949ZXB8LED0ZMCG9292M7HYHQ' where id=6; -update noar ti set v0='949ZXB8LED0ZMCG9292M7HYHQ' where id=6; -update noar tt set b2='4F8BPJZ34TMW4V19GE' where id=6; -update noar ti set b2='4F8BPJZ34TMW4V19GE' where id=6; -update noar tt set v0='VGFV3JF8JWTLH52QU6' where id=7; -update noar ti set v0='VGFV3JF8JWTLH52QU6' where id=7; -update noar tt set b0='ZV' where id=7; -update noar ti set b0='ZV' where id=7; -update noar tt set v0='7AP06IB7AZSN86RQX4K70EU1FV' where id=7; -update noar ti set v0='7AP06IB7AZSN86RQX4K70EU1FV' where id=7; -update noar tt set b1='3LYEEEBBNBTE754AYGWR' where id=7; -update noar ti set b1='3LYEEEBBNBTE754AYGWR' where id=7; -update noar tt set v0='6PQ4V7GQZPMEXJ9DG4LXPZHETQ2B' where id=7; -update noar ti set v0='6PQ4V7GQZPMEXJ9DG4LXPZHETQ2B' where id=7; -update noar tt set b2='9LSGRUNDDD1' where id=7; -update noar ti set b2='9LSGRUNDDD1' where id=7; -update noar tt set v0='73HOIR3XX6QUQZ6Y8C8LZ232B5MZ0OP' where id=8; -update noar ti set v0='73HOIR3XX6QUQZ6Y8C8LZ232B5MZ0OP' where id=8; -update noar tt set b0='40ZK7OLV972SCCJAUXY' where id=8; -update noar ti set b0='40ZK7OLV972SCCJAUXY' where id=8; -update noar tt set v0='2JOEMDBX0VZFFWZMQVC7' where id=8; -update noar ti set v0='2JOEMDBX0VZFFWZMQVC7' where id=8; -update noar tt set b1='KM5ORFB55VH0TYAVHYMDF80UXSS2242' where id=8; -update noar ti set b1='KM5ORFB55VH0TYAVHYMDF80UXSS2242' where id=8; -update noar tt set v0='VYQJCGG55U0E' where id=8; -update noar ti set v0='VYQJCGG55U0E' where id=8; -update noar tt set b2='MYC' where id=8; -update noar ti set b2='MYC' where id=8; -update noar tt set v0='SLTN2YHMYHPHR0U0Z8KXEC7LJWZIS' where id=9; -update noar ti set v0='SLTN2YHMYHPHR0U0Z8KXEC7LJWZIS' where id=9; -update noar tt set b0='Z7OFRREHFROZ9H3HS' where id=9; -update noar ti set b0='Z7OFRREHFROZ9H3HS' where id=9; -update noar tt set v0='TF3KO' where id=9; -update noar ti set v0='TF3KO' where id=9; -update noar tt set b1='YJ2SR8DHMYQ6AHW' where id=9; -update noar ti set b1='YJ2SR8DHMYQ6AHW' where id=9; -update noar tt set v0='P68PQ3MXMQ3QE3GE02OXE8CJ9' where id=9; -update noar ti set v0='P68PQ3MXMQ3QE3GE02OXE8CJ9' where id=9; -update noar tt set b2='3U' where id=9; -update noar ti set b2='3U' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 blob not null, - b1 mediumblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='ATQH74JNA3KVF5PR6E' where id=1; -update noar ti set v0='ATQH74JNA3KVF5PR6E' where id=1; -update noar tt set b0='LVB9CT4TVSC9R1ITCB31H2U3O1U1' where id=1; -update noar ti set b0='LVB9CT4TVSC9R1ITCB31H2U3O1U1' where id=1; -update noar tt set v0='UCG371VBODM48GIFB6ZF1MGBZQ' where id=1; -update noar ti set v0='UCG371VBODM48GIFB6ZF1MGBZQ' where id=1; -update noar tt set b1='5HJ5DXTC529' where id=1; -update noar ti set b1='5HJ5DXTC529' where id=1; -update noar tt set v0='PYU3DS7H4' where id=1; -update noar ti set v0='PYU3DS7H4' where id=1; -update noar tt set b2='3H1L7YUI8AP1' where id=1; -update noar ti set b2='3H1L7YUI8AP1' where id=1; -update noar tt set v0='XBG57EQXIPFY3QOJKPRU' where id=2; -update noar ti set v0='XBG57EQXIPFY3QOJKPRU' where id=2; -update noar tt set b0='345UV875NMBVV7QS30C7VWP1' where id=2; -update noar ti set b0='345UV875NMBVV7QS30C7VWP1' where id=2; -update noar tt set v0='C3Q2V4NAWY65CKSU55GOUZSJSWISZ3D' where id=2; -update noar ti set v0='C3Q2V4NAWY65CKSU55GOUZSJSWISZ3D' where id=2; -update noar tt set b1='7Y5KY18WQQ45HXCTV8' where id=2; -update noar ti set b1='7Y5KY18WQQ45HXCTV8' where id=2; -update noar tt set v0='ZEQKLT2OJG14E1U4F9OI' where id=2; -update noar ti set v0='ZEQKLT2OJG14E1U4F9OI' where id=2; -update noar tt set b2='F56H6FMCHIQV5K65BIJZZG8JOKWH' where id=2; -update noar ti set b2='F56H6FMCHIQV5K65BIJZZG8JOKWH' where id=2; -update noar tt set v0='VVUJ' where id=3; -update noar ti set v0='VVUJ' where id=3; -update noar tt set b0='ONRM1' where id=3; -update noar ti set b0='ONRM1' where id=3; -update noar tt set v0='YYJD889CP6PEN' where id=3; -update noar ti set v0='YYJD889CP6PEN' where id=3; -update noar tt set b1='UB6DFKMWWPN4PV36BVLEV34NPU' where id=3; -update noar ti set b1='UB6DFKMWWPN4PV36BVLEV34NPU' where id=3; -update noar tt set v0='XXQENMA8N2QQPT' where id=3; -update noar ti set v0='XXQENMA8N2QQPT' where id=3; -update noar tt set b2='P9WDCHELW0W4U79LJ67' where id=3; -update noar ti set b2='P9WDCHELW0W4U79LJ67' where id=3; -update noar tt set v0='4VV38ASWIT8NR6NFDEG8BIEL' where id=4; -update noar ti set v0='4VV38ASWIT8NR6NFDEG8BIEL' where id=4; -update noar tt set b0='ITNNYGWA3PCF7QN4N2UOFAIFZ0J' where id=4; -update noar ti set b0='ITNNYGWA3PCF7QN4N2UOFAIFZ0J' where id=4; -update noar tt set v0='T9C2TBZG9JWWSE5NCX38PB7Z05N' where id=4; -update noar ti set v0='T9C2TBZG9JWWSE5NCX38PB7Z05N' where id=4; -update noar tt set b1='V2VJY0R' where id=4; -update noar ti set b1='V2VJY0R' where id=4; -update noar tt set v0='KONK06MZFLSFQSYRHE3PQMT7ZK0' where id=4; -update noar ti set v0='KONK06MZFLSFQSYRHE3PQMT7ZK0' where id=4; -update noar tt set b2='S0' where id=4; -update noar ti set b2='S0' where id=4; -update noar tt set v0='YQ1V51GCNVN1ENKZFR5BZJTJ' where id=5; -update noar ti set v0='YQ1V51GCNVN1ENKZFR5BZJTJ' where id=5; -update noar tt set b0='8YJF1VW6CMG9X5II5ZXE' where id=5; -update noar ti set b0='8YJF1VW6CMG9X5II5ZXE' where id=5; -update noar tt set v0='DU44GXFC4ISNQ8ZD1VLBL' where id=5; -update noar ti set v0='DU44GXFC4ISNQ8ZD1VLBL' where id=5; -update noar tt set b1='HYULM9NK6ENB0F9F0YU0WBK' where id=5; -update noar ti set b1='HYULM9NK6ENB0F9F0YU0WBK' where id=5; -update noar tt set v0='AE71G810G3MJX129B0OFPW' where id=5; -update noar ti set v0='AE71G810G3MJX129B0OFPW' where id=5; -update noar tt set b2='ROSD4H4JYC44W9HNQ48KH5Z' where id=5; -update noar ti set b2='ROSD4H4JYC44W9HNQ48KH5Z' where id=5; -update noar tt set v0='TE3R94O' where id=6; -update noar ti set v0='TE3R94O' where id=6; -update noar tt set b0='898JBDNKZVMZK44BG71NT3NW81T51J0' where id=6; -update noar ti set b0='898JBDNKZVMZK44BG71NT3NW81T51J0' where id=6; -update noar tt set v0='3T6NEFSM0WBNBRFT0UQQM1' where id=6; -update noar ti set v0='3T6NEFSM0WBNBRFT0UQQM1' where id=6; -update noar tt set b1='NTJUIIUWVJ79XYOKMAGL8YJS' where id=6; -update noar ti set b1='NTJUIIUWVJ79XYOKMAGL8YJS' where id=6; -update noar tt set v0='1K' where id=6; -update noar ti set v0='1K' where id=6; -update noar tt set b2='1MT83JS2QCJBVQOROMRKHXJR' where id=6; -update noar ti set b2='1MT83JS2QCJBVQOROMRKHXJR' where id=6; -update noar tt set v0='0NI0MU70SMQ' where id=7; -update noar ti set v0='0NI0MU70SMQ' where id=7; -update noar tt set b0='WP8XV7B6XWDRCZ7O1B5I' where id=7; -update noar ti set b0='WP8XV7B6XWDRCZ7O1B5I' where id=7; -update noar tt set v0='XX62GT0ENXKVM2P93PCZEN42GJC7HYW' where id=7; -update noar ti set v0='XX62GT0ENXKVM2P93PCZEN42GJC7HYW' where id=7; -update noar tt set b1='IIE4JLEFCBN2HPX0' where id=7; -update noar ti set b1='IIE4JLEFCBN2HPX0' where id=7; -update noar tt set v0='0OWWRVVQAXFOXOV1J' where id=7; -update noar ti set v0='0OWWRVVQAXFOXOV1J' where id=7; -update noar tt set b2='52LRBFM3O7M' where id=7; -update noar ti set b2='52LRBFM3O7M' where id=7; -update noar tt set v0='SI5K90GJOAR8T4Q8IG12GQ96' where id=8; -update noar ti set v0='SI5K90GJOAR8T4Q8IG12GQ96' where id=8; -update noar tt set b0='HKASYPBP7R6TPO31C7JUT6QD9ZQWIQE' where id=8; -update noar ti set b0='HKASYPBP7R6TPO31C7JUT6QD9ZQWIQE' where id=8; -update noar tt set v0='IS56SUHZ7GACCZBN8IKD1JUEFT32I6C' where id=8; -update noar ti set v0='IS56SUHZ7GACCZBN8IKD1JUEFT32I6C' where id=8; -update noar tt set b1='1SZITB53OOW17NYVOR2Z130Q8QF' where id=8; -update noar ti set b1='1SZITB53OOW17NYVOR2Z130Q8QF' where id=8; -update noar tt set v0='9T6UD3SS4V4RHJK24USUBFBQD' where id=8; -update noar ti set v0='9T6UD3SS4V4RHJK24USUBFBQD' where id=8; -update noar tt set b2='E9X' where id=8; -update noar ti set b2='E9X' where id=8; -update noar tt set v0='TH' where id=9; -update noar ti set v0='TH' where id=9; -update noar tt set b0='BXLIPQ0IZL44F9' where id=9; -update noar ti set b0='BXLIPQ0IZL44F9' where id=9; -update noar tt set v0='WNTE0CAO4MZM5MIBUPFAHG873SO' where id=9; -update noar ti set v0='WNTE0CAO4MZM5MIBUPFAHG873SO' where id=9; -update noar tt set b1='EKDQMBFWHCORYY1SVP3ZLUOPXCFB' where id=9; -update noar ti set b1='EKDQMBFWHCORYY1SVP3ZLUOPXCFB' where id=9; -update noar tt set v0='2Y5YTEZWJ9CZEV1SWGBAL4UYS6JNMCNG' where id=9; -update noar ti set v0='2Y5YTEZWJ9CZEV1SWGBAL4UYS6JNMCNG' where id=9; -update noar tt set b2='G0IGPL' where id=9; -update noar ti set b2='G0IGPL' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 blob not null, - b1 mediumblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='K4K0VB2PMY483' where id=1; -update noar ti set v0='K4K0VB2PMY483' where id=1; -update noar tt set b0='8EN61LAMNYMYVAAY8GNRETLSZU4BAX' where id=1; -update noar ti set b0='8EN61LAMNYMYVAAY8GNRETLSZU4BAX' where id=1; -update noar tt set v0='ZGZ5MYOFOLX52S4E5' where id=1; -update noar ti set v0='ZGZ5MYOFOLX52S4E5' where id=1; -update noar tt set b1='YPDWYN05B0XOOIP5OVR4V1Z' where id=1; -update noar ti set b1='YPDWYN05B0XOOIP5OVR4V1Z' where id=1; -update noar tt set v0='0AC42CBEPTI5QMFQZ2G8255FB1A' where id=1; -update noar ti set v0='0AC42CBEPTI5QMFQZ2G8255FB1A' where id=1; -update noar tt set b2='C688ZHZSFN904Z0DHING4U3' where id=1; -update noar ti set b2='C688ZHZSFN904Z0DHING4U3' where id=1; -update noar tt set v0='YWY' where id=2; -update noar ti set v0='YWY' where id=2; -update noar tt set b0='C0NGA8SUSURIBGN80CKAU4' where id=2; -update noar ti set b0='C0NGA8SUSURIBGN80CKAU4' where id=2; -update noar tt set v0='ZGZ0HDOW5E2IIEB1HO38MX8KQM8C' where id=2; -update noar ti set v0='ZGZ0HDOW5E2IIEB1HO38MX8KQM8C' where id=2; -update noar tt set b1='FTOA6RY4GURZBRC0KLG411E8QH2' where id=2; -update noar ti set b1='FTOA6RY4GURZBRC0KLG411E8QH2' where id=2; -update noar tt set v0='GASWIJCZ2A2B8Y8I1A' where id=2; -update noar ti set v0='GASWIJCZ2A2B8Y8I1A' where id=2; -update noar tt set b2='D' where id=2; -update noar ti set b2='D' where id=2; -update noar tt set v0='OP6RSKX795B3O368UOZ0EUL' where id=3; -update noar ti set v0='OP6RSKX795B3O368UOZ0EUL' where id=3; -update noar tt set b0='ORE5EFAVV2Q5V3' where id=3; -update noar ti set b0='ORE5EFAVV2Q5V3' where id=3; -update noar tt set v0='8VXVFTCA8P' where id=3; -update noar ti set v0='8VXVFTCA8P' where id=3; -update noar tt set b1='6FKJ' where id=3; -update noar ti set b1='6FKJ' where id=3; -update noar tt set v0='T1AP91UZZWN' where id=3; -update noar ti set v0='T1AP91UZZWN' where id=3; -update noar tt set b2='ASF71I3R9VGYIKLODO' where id=3; -update noar ti set b2='ASF71I3R9VGYIKLODO' where id=3; -update noar tt set v0='Q' where id=4; -update noar ti set v0='Q' where id=4; -update noar tt set b0='HQ1' where id=4; -update noar ti set b0='HQ1' where id=4; -update noar tt set v0='KO4TCQDILA3UUMT3NV6R77' where id=4; -update noar ti set v0='KO4TCQDILA3UUMT3NV6R77' where id=4; -update noar tt set b1='02HHJIA4HZLQEG7APPUXOX245CPS' where id=4; -update noar ti set b1='02HHJIA4HZLQEG7APPUXOX245CPS' where id=4; -update noar tt set v0='LI0934Y17KESMS71K4PSQBGQNQ8RH40S' where id=4; -update noar ti set v0='LI0934Y17KESMS71K4PSQBGQNQ8RH40S' where id=4; -update noar tt set b2='74' where id=4; -update noar ti set b2='74' where id=4; -update noar tt set v0='81FVNDAQHCUUNQ2HG15S17KJBI' where id=5; -update noar ti set v0='81FVNDAQHCUUNQ2HG15S17KJBI' where id=5; -update noar tt set b0='O1BTP' where id=5; -update noar ti set b0='O1BTP' where id=5; -update noar tt set v0='WBMC34EENE9TP83' where id=5; -update noar ti set v0='WBMC34EENE9TP83' where id=5; -update noar tt set b1='EFYMTD' where id=5; -update noar ti set b1='EFYMTD' where id=5; -update noar tt set v0='0NZ9B' where id=5; -update noar ti set v0='0NZ9B' where id=5; -update noar tt set b2='XJL5GIVALX6KDRW' where id=5; -update noar ti set b2='XJL5GIVALX6KDRW' where id=5; -update noar tt set v0='4GX5VQ9' where id=6; -update noar ti set v0='4GX5VQ9' where id=6; -update noar tt set b0='ECY71J1J3HVMYG8WLAE070YBXKUM6FIS' where id=6; -update noar ti set b0='ECY71J1J3HVMYG8WLAE070YBXKUM6FIS' where id=6; -update noar tt set v0='L9TGTGV8J20K5EPRU6KVV0R' where id=6; -update noar ti set v0='L9TGTGV8J20K5EPRU6KVV0R' where id=6; -update noar tt set b1='5QUD9BM0XMM7DAPOOZAPU1JF' where id=6; -update noar ti set b1='5QUD9BM0XMM7DAPOOZAPU1JF' where id=6; -update noar tt set v0='8KZZEVEWBSDTDA56C15CWNVOTMKQDV2' where id=6; -update noar ti set v0='8KZZEVEWBSDTDA56C15CWNVOTMKQDV2' where id=6; -update noar tt set b2='4CC5S9IYCXFF3ASFEQWF89O4' where id=6; -update noar ti set b2='4CC5S9IYCXFF3ASFEQWF89O4' where id=6; -update noar tt set v0='31FF7MR0PLYB6PYY67PMYPYQM2' where id=7; -update noar ti set v0='31FF7MR0PLYB6PYY67PMYPYQM2' where id=7; -update noar tt set b0='94WMM1DO6N3CX6GIPN' where id=7; -update noar ti set b0='94WMM1DO6N3CX6GIPN' where id=7; -update noar tt set v0='005XU1TZDLCDQ5829A8Z0' where id=7; -update noar ti set v0='005XU1TZDLCDQ5829A8Z0' where id=7; -update noar tt set b1='NKLQQJAJ8XZTBK7RLCROM4U' where id=7; -update noar ti set b1='NKLQQJAJ8XZTBK7RLCROM4U' where id=7; -update noar tt set v0='X2CPFMGQUCXVLU' where id=7; -update noar ti set v0='X2CPFMGQUCXVLU' where id=7; -update noar tt set b2='DZCI0U39V6ULZIIAL3BXYWEU4' where id=7; -update noar ti set b2='DZCI0U39V6ULZIIAL3BXYWEU4' where id=7; -update noar tt set v0='5C0G66M6AA66A55Y5ONHKCPF' where id=8; -update noar ti set v0='5C0G66M6AA66A55Y5ONHKCPF' where id=8; -update noar tt set b0='AF3I7FBLFV4K48AAOW45CY89SLO16JB' where id=8; -update noar ti set b0='AF3I7FBLFV4K48AAOW45CY89SLO16JB' where id=8; -update noar tt set v0='VLQR' where id=8; -update noar ti set v0='VLQR' where id=8; -update noar tt set b1='DWCJBMJMV' where id=8; -update noar ti set b1='DWCJBMJMV' where id=8; -update noar tt set v0='3XCAM3ZY55OU0' where id=8; -update noar ti set v0='3XCAM3ZY55OU0' where id=8; -update noar tt set b2='39J9JMRB6XVDQRUVM7HBOMZ1K0W' where id=8; -update noar ti set b2='39J9JMRB6XVDQRUVM7HBOMZ1K0W' where id=8; -update noar tt set v0='8' where id=9; -update noar ti set v0='8' where id=9; -update noar tt set b0='YT0SSUTLYOX4OIYY49EWYSR60G' where id=9; -update noar ti set b0='YT0SSUTLYOX4OIYY49EWYSR60G' where id=9; -update noar tt set v0='2ANB7SH1PNC' where id=9; -update noar ti set v0='2ANB7SH1PNC' where id=9; -update noar tt set b1='G4T' where id=9; -update noar ti set b1='G4T' where id=9; -update noar tt set v0='XJAPFXTIVLPL5A39EBR9F' where id=9; -update noar ti set v0='XJAPFXTIVLPL5A39EBR9F' where id=9; -update noar tt set b2='4D' where id=9; -update noar ti set b2='4D' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 blob null, - b1 mediumblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='V4U42S' where id=1; -update noar ti set v0='V4U42S' where id=1; -update noar tt set b0='H4J' where id=1; -update noar ti set b0='H4J' where id=1; -update noar tt set v0='0Q6RJI9JQJ1AB1' where id=1; -update noar ti set v0='0Q6RJI9JQJ1AB1' where id=1; -update noar tt set b1='E4GT3366FYYATPPM3KT0YS14R' where id=1; -update noar ti set b1='E4GT3366FYYATPPM3KT0YS14R' where id=1; -update noar tt set v0='6XCTAXZZZB6MI330BJOJTSKIW8LTLNNN' where id=1; -update noar ti set v0='6XCTAXZZZB6MI330BJOJTSKIW8LTLNNN' where id=1; -update noar tt set b2='5HJN6MZFI3N5UEIE8AHOUG54C80D' where id=1; -update noar ti set b2='5HJN6MZFI3N5UEIE8AHOUG54C80D' where id=1; -update noar tt set v0='0H7MTVT7T7UO5AU64KIXF' where id=2; -update noar ti set v0='0H7MTVT7T7UO5AU64KIXF' where id=2; -update noar tt set b0='KCS6JOGT8PDKOJ16O5UFYXFBHU1D' where id=2; -update noar ti set b0='KCS6JOGT8PDKOJ16O5UFYXFBHU1D' where id=2; -update noar tt set v0='F1YXJBHYUUEZSPKXEFZ8L1' where id=2; -update noar ti set v0='F1YXJBHYUUEZSPKXEFZ8L1' where id=2; -update noar tt set b1='072E3QCHF2HBR2N2D29RKT' where id=2; -update noar ti set b1='072E3QCHF2HBR2N2D29RKT' where id=2; -update noar tt set v0='3MPNJ552DSHLPO296DLS0GI' where id=2; -update noar ti set v0='3MPNJ552DSHLPO296DLS0GI' where id=2; -update noar tt set b2='KMFTY3B0RVL06C9VBXO' where id=2; -update noar ti set b2='KMFTY3B0RVL06C9VBXO' where id=2; -update noar tt set v0='I60E4' where id=3; -update noar ti set v0='I60E4' where id=3; -update noar tt set b0='Q4U8B8Y5QMOIR61C7Q2CRS8DGCIBO0A2' where id=3; -update noar ti set b0='Q4U8B8Y5QMOIR61C7Q2CRS8DGCIBO0A2' where id=3; -update noar tt set v0='GS93J6YLBRSR9MCPN33BC' where id=3; -update noar ti set v0='GS93J6YLBRSR9MCPN33BC' where id=3; -update noar tt set b1='EQ2YDY4XWPBA6JUXY04C4N8GCB' where id=3; -update noar ti set b1='EQ2YDY4XWPBA6JUXY04C4N8GCB' where id=3; -update noar tt set v0='5K8XG' where id=3; -update noar ti set v0='5K8XG' where id=3; -update noar tt set b2='5N24QX5QD3' where id=3; -update noar ti set b2='5N24QX5QD3' where id=3; -update noar tt set v0='7YEVQH5M79Q06P' where id=4; -update noar ti set v0='7YEVQH5M79Q06P' where id=4; -update noar tt set b0='OKR252ZEIIK4W031X' where id=4; -update noar ti set b0='OKR252ZEIIK4W031X' where id=4; -update noar tt set v0='RCTUNEGEM9HHSW' where id=4; -update noar ti set v0='RCTUNEGEM9HHSW' where id=4; -update noar tt set b1='32PCUK2826GG' where id=4; -update noar ti set b1='32PCUK2826GG' where id=4; -update noar tt set v0='9ME65ODSRFPDE73Z3' where id=4; -update noar ti set v0='9ME65ODSRFPDE73Z3' where id=4; -update noar tt set b2='VW63MKBAY4I3K9X' where id=4; -update noar ti set b2='VW63MKBAY4I3K9X' where id=4; -update noar tt set v0='UDA' where id=5; -update noar ti set v0='UDA' where id=5; -update noar tt set b0='EJ6D5VW3ZO20F6HUWK4DD84NC6Y' where id=5; -update noar ti set b0='EJ6D5VW3ZO20F6HUWK4DD84NC6Y' where id=5; -update noar tt set v0='F8D1OBTM65ZTRSN1QWEMGHH' where id=5; -update noar ti set v0='F8D1OBTM65ZTRSN1QWEMGHH' where id=5; -update noar tt set b1='YJSXEU25P95G' where id=5; -update noar ti set b1='YJSXEU25P95G' where id=5; -update noar tt set v0='YZ9SJI5FFLW1' where id=5; -update noar ti set v0='YZ9SJI5FFLW1' where id=5; -update noar tt set b2='6VCXQT97L0AYRIYLSUDEEPB' where id=5; -update noar ti set b2='6VCXQT97L0AYRIYLSUDEEPB' where id=5; -update noar tt set v0='B3KZ0EZTUGFZUD9TZ8NDCTCXJOUQA7VW' where id=6; -update noar ti set v0='B3KZ0EZTUGFZUD9TZ8NDCTCXJOUQA7VW' where id=6; -update noar tt set b0='YZH1V4U6SK52EBIGL6' where id=6; -update noar ti set b0='YZH1V4U6SK52EBIGL6' where id=6; -update noar tt set v0='YULBVM1' where id=6; -update noar ti set v0='YULBVM1' where id=6; -update noar tt set b1='GIQX8GUBCMBX7DE6PL0' where id=6; -update noar ti set b1='GIQX8GUBCMBX7DE6PL0' where id=6; -update noar tt set v0='VBQZ07ZY4YFT7' where id=6; -update noar ti set v0='VBQZ07ZY4YFT7' where id=6; -update noar tt set b2='AYS0I804EKVOUCAJET01GEYFBN3YH1HJ' where id=6; -update noar ti set b2='AYS0I804EKVOUCAJET01GEYFBN3YH1HJ' where id=6; -update noar tt set v0='YP91PTVZ8IQ5YWS7CNFKNO' where id=7; -update noar ti set v0='YP91PTVZ8IQ5YWS7CNFKNO' where id=7; -update noar tt set b0='GLOILK015BVL72VZUGFOOA' where id=7; -update noar ti set b0='GLOILK015BVL72VZUGFOOA' where id=7; -update noar tt set v0='RASARM4A9BKFQFGBGCMPJTG' where id=7; -update noar ti set v0='RASARM4A9BKFQFGBGCMPJTG' where id=7; -update noar tt set b1='K' where id=7; -update noar ti set b1='K' where id=7; -update noar tt set v0='H9RPID4JZBX655PFIFJMNJNJI' where id=7; -update noar ti set v0='H9RPID4JZBX655PFIFJMNJNJI' where id=7; -update noar tt set b2='9P5LV7PQ22C' where id=7; -update noar ti set b2='9P5LV7PQ22C' where id=7; -update noar tt set v0='0XTU6QYKXN9JI4RADPS' where id=8; -update noar ti set v0='0XTU6QYKXN9JI4RADPS' where id=8; -update noar tt set b0='HR1N216X32E8DZU4T8BD' where id=8; -update noar ti set b0='HR1N216X32E8DZU4T8BD' where id=8; -update noar tt set v0='3U6L6KDBFI6EZL' where id=8; -update noar ti set v0='3U6L6KDBFI6EZL' where id=8; -update noar tt set b1='9AB3UOB3QPAG' where id=8; -update noar ti set b1='9AB3UOB3QPAG' where id=8; -update noar tt set v0='5BEPSZDGWEY2UUS3GPSXUCZUJJ1EDY' where id=8; -update noar ti set v0='5BEPSZDGWEY2UUS3GPSXUCZUJJ1EDY' where id=8; -update noar tt set b2='O4J4PTYRGZUSNG9QW5SA6KHDTXUQ' where id=8; -update noar ti set b2='O4J4PTYRGZUSNG9QW5SA6KHDTXUQ' where id=8; -update noar tt set v0='69T242S86LZCDCJG4P' where id=9; -update noar ti set v0='69T242S86LZCDCJG4P' where id=9; -update noar tt set b0='CZB568J5' where id=9; -update noar ti set b0='CZB568J5' where id=9; -update noar tt set v0='WTQKSNNL7SFBK9UK' where id=9; -update noar ti set v0='WTQKSNNL7SFBK9UK' where id=9; -update noar tt set b1='6IR75N' where id=9; -update noar ti set b1='6IR75N' where id=9; -update noar tt set v0='15LQ68J3MS1LUWU6WYGS68TFZAVXZ9' where id=9; -update noar ti set v0='15LQ68J3MS1LUWU6WYGS68TFZAVXZ9' where id=9; -update noar tt set b2='SUK1SPW7SXO198S0GM3XMF' where id=9; -update noar ti set b2='SUK1SPW7SXO198S0GM3XMF' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 blob null, - b1 mediumblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='L23JVO0UHDHBSR5JYDB7W' where id=1; -update noar ti set v0='L23JVO0UHDHBSR5JYDB7W' where id=1; -update noar tt set b0='MKPTI3J043PRY2BP' where id=1; -update noar ti set b0='MKPTI3J043PRY2BP' where id=1; -update noar tt set v0='DZUSDSK1063WV' where id=1; -update noar ti set v0='DZUSDSK1063WV' where id=1; -update noar tt set b1='8F5YPE1J71PB3F6WOI3QP8X4U2Z' where id=1; -update noar ti set b1='8F5YPE1J71PB3F6WOI3QP8X4U2Z' where id=1; -update noar tt set v0='G6W739LBYFWYVQ' where id=1; -update noar ti set v0='G6W739LBYFWYVQ' where id=1; -update noar tt set b2='CEB2AIP' where id=1; -update noar ti set b2='CEB2AIP' where id=1; -update noar tt set v0='UXQMN46WT92ISPAEMOW' where id=2; -update noar ti set v0='UXQMN46WT92ISPAEMOW' where id=2; -update noar tt set b0='NKB9PC3HGIBZHSEA53RECEZOO2ZTC' where id=2; -update noar ti set b0='NKB9PC3HGIBZHSEA53RECEZOO2ZTC' where id=2; -update noar tt set v0='X22' where id=2; -update noar ti set v0='X22' where id=2; -update noar tt set b1='R259RG2V8G968RMOGYN2' where id=2; -update noar ti set b1='R259RG2V8G968RMOGYN2' where id=2; -update noar tt set v0='G1QMTV' where id=2; -update noar ti set v0='G1QMTV' where id=2; -update noar tt set b2='RWJKOG6ZR3TI2T0WLAQACCNZFHD6A8' where id=2; -update noar ti set b2='RWJKOG6ZR3TI2T0WLAQACCNZFHD6A8' where id=2; -update noar tt set v0='76HXO72TSYEEI9' where id=3; -update noar ti set v0='76HXO72TSYEEI9' where id=3; -update noar tt set b0='TXABT5AVF1MBWA7U' where id=3; -update noar ti set b0='TXABT5AVF1MBWA7U' where id=3; -update noar tt set v0='9KC9D0592I0SQRK49P5JJ23J0Z' where id=3; -update noar ti set v0='9KC9D0592I0SQRK49P5JJ23J0Z' where id=3; -update noar tt set b1='RR7XHD7MMJN3ZSEDS2R9PSSK' where id=3; -update noar ti set b1='RR7XHD7MMJN3ZSEDS2R9PSSK' where id=3; -update noar tt set v0='CDXOBTBHJ' where id=3; -update noar ti set v0='CDXOBTBHJ' where id=3; -update noar tt set b2='3QFH6LK51HFAQCK0DR4I22NM26C' where id=3; -update noar ti set b2='3QFH6LK51HFAQCK0DR4I22NM26C' where id=3; -update noar tt set v0='NXFEIUECQT13JE78SSQN2HWZHGGE' where id=4; -update noar ti set v0='NXFEIUECQT13JE78SSQN2HWZHGGE' where id=4; -update noar tt set b0='KY9B62SBKFMZ9HF5AH' where id=4; -update noar ti set b0='KY9B62SBKFMZ9HF5AH' where id=4; -update noar tt set v0='6Z73Z89' where id=4; -update noar ti set v0='6Z73Z89' where id=4; -update noar tt set b1='U1TRVLQCBI1X7' where id=4; -update noar ti set b1='U1TRVLQCBI1X7' where id=4; -update noar tt set v0='P7F86F1TIWW' where id=4; -update noar ti set v0='P7F86F1TIWW' where id=4; -update noar tt set b2='00FLJI' where id=4; -update noar ti set b2='00FLJI' where id=4; -update noar tt set v0='MWRTHB3RLJ' where id=5; -update noar ti set v0='MWRTHB3RLJ' where id=5; -update noar tt set b0='2O7GJDXGRVQE90H1AK4OJ4KA9' where id=5; -update noar ti set b0='2O7GJDXGRVQE90H1AK4OJ4KA9' where id=5; -update noar tt set v0='NMUWM2FKI0RSXCOZS' where id=5; -update noar ti set v0='NMUWM2FKI0RSXCOZS' where id=5; -update noar tt set b1='2X89' where id=5; -update noar ti set b1='2X89' where id=5; -update noar tt set v0='XAWYR86T0G9DOMSF3VVXL' where id=5; -update noar ti set v0='XAWYR86T0G9DOMSF3VVXL' where id=5; -update noar tt set b2='H6ZY6HCSQ7NESTD247C' where id=5; -update noar ti set b2='H6ZY6HCSQ7NESTD247C' where id=5; -update noar tt set v0='EFHKQRVHCB6LXJ1ZBOS' where id=6; -update noar ti set v0='EFHKQRVHCB6LXJ1ZBOS' where id=6; -update noar tt set b0='XF' where id=6; -update noar ti set b0='XF' where id=6; -update noar tt set v0='88' where id=6; -update noar ti set v0='88' where id=6; -update noar tt set b1='BZER014Y791XS3OX3Y8GYNBTI3WC' where id=6; -update noar ti set b1='BZER014Y791XS3OX3Y8GYNBTI3WC' where id=6; -update noar tt set v0='WIHDAVU' where id=6; -update noar ti set v0='WIHDAVU' where id=6; -update noar tt set b2='NYJG0QPZCCIRBIDDL' where id=6; -update noar ti set b2='NYJG0QPZCCIRBIDDL' where id=6; -update noar tt set v0='KASW3I0EVTBEV8BR9GX4VD724ODZY' where id=7; -update noar ti set v0='KASW3I0EVTBEV8BR9GX4VD724ODZY' where id=7; -update noar tt set b0='GCXH6X5JE6U0TDEX5PX18D' where id=7; -update noar ti set b0='GCXH6X5JE6U0TDEX5PX18D' where id=7; -update noar tt set v0='R0IF0T0XHQHE7' where id=7; -update noar ti set v0='R0IF0T0XHQHE7' where id=7; -update noar tt set b1='64H32X' where id=7; -update noar ti set b1='64H32X' where id=7; -update noar tt set v0='Q72AO9876' where id=7; -update noar ti set v0='Q72AO9876' where id=7; -update noar tt set b2='2' where id=7; -update noar ti set b2='2' where id=7; -update noar tt set v0='06K8SZ46D' where id=8; -update noar ti set v0='06K8SZ46D' where id=8; -update noar tt set b0='EM1WWEREDTE4AJARNKC' where id=8; -update noar ti set b0='EM1WWEREDTE4AJARNKC' where id=8; -update noar tt set v0='DCUP2AWKDWUP630HCQHA' where id=8; -update noar ti set v0='DCUP2AWKDWUP630HCQHA' where id=8; -update noar tt set b1='W8OJTVT9Q09QMB6M70EY9MZ25H' where id=8; -update noar ti set b1='W8OJTVT9Q09QMB6M70EY9MZ25H' where id=8; -update noar tt set v0='HZN48T' where id=8; -update noar ti set v0='HZN48T' where id=8; -update noar tt set b2='KB19D9UTK' where id=8; -update noar ti set b2='KB19D9UTK' where id=8; -update noar tt set v0='W' where id=9; -update noar ti set v0='W' where id=9; -update noar tt set b0='2TSQQQHHLS6GKQ0KZMV1HA77RJJKXY' where id=9; -update noar ti set b0='2TSQQQHHLS6GKQ0KZMV1HA77RJJKXY' where id=9; -update noar tt set v0='8IS5ZCQOXGYLHI9C81KGTI55UZ3ISEWT' where id=9; -update noar ti set v0='8IS5ZCQOXGYLHI9C81KGTI55UZ3ISEWT' where id=9; -update noar tt set b1='N' where id=9; -update noar ti set b1='N' where id=9; -update noar tt set v0='RNDUXEOH16N7SK2R6P0SXK814GJCM' where id=9; -update noar ti set v0='RNDUXEOH16N7SK2R6P0SXK814GJCM' where id=9; -update noar tt set b2='YXWJ30BF6XUE84P3U' where id=9; -update noar ti set b2='YXWJ30BF6XUE84P3U' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 blob not null, - b1 mediumblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='ZER3B2TB' where id=1; -update noar ti set v0='ZER3B2TB' where id=1; -update noar tt set b0='OM3NIZCJASAZIK0T7VQV53D9WZM9TU' where id=1; -update noar ti set b0='OM3NIZCJASAZIK0T7VQV53D9WZM9TU' where id=1; -update noar tt set v0='BJJT72' where id=1; -update noar ti set v0='BJJT72' where id=1; -update noar tt set b1='2YQ41M89C0PMEL241QNVZCIPP6S7SWR' where id=1; -update noar ti set b1='2YQ41M89C0PMEL241QNVZCIPP6S7SWR' where id=1; -update noar tt set v0='GZHONEIXEE' where id=1; -update noar ti set v0='GZHONEIXEE' where id=1; -update noar tt set b2='B' where id=1; -update noar ti set b2='B' where id=1; -update noar tt set v0='Y1F1JSFXMMBYY8KUPEZHMXMP866' where id=2; -update noar ti set v0='Y1F1JSFXMMBYY8KUPEZHMXMP866' where id=2; -update noar tt set b0='6CAMSKV' where id=2; -update noar ti set b0='6CAMSKV' where id=2; -update noar tt set v0='9G9TWJ3T8UYGQ4CZNXJC3NG11' where id=2; -update noar ti set v0='9G9TWJ3T8UYGQ4CZNXJC3NG11' where id=2; -update noar tt set b1='RM7KCXC8FKHU7YY6HUP1DELLR74' where id=2; -update noar ti set b1='RM7KCXC8FKHU7YY6HUP1DELLR74' where id=2; -update noar tt set v0='YFTQOOJUC7LJ5H' where id=2; -update noar ti set v0='YFTQOOJUC7LJ5H' where id=2; -update noar tt set b2='5L0BWCR4PL25' where id=2; -update noar ti set b2='5L0BWCR4PL25' where id=2; -update noar tt set v0='12ZH4BYR7IA51KI0H3QPZ61J' where id=3; -update noar ti set v0='12ZH4BYR7IA51KI0H3QPZ61J' where id=3; -update noar tt set b0='NF0N3M91UHYHVTCJ4X58RDAPD0QT13' where id=3; -update noar ti set b0='NF0N3M91UHYHVTCJ4X58RDAPD0QT13' where id=3; -update noar tt set v0='3PX5CPKSDHLKDX5DB' where id=3; -update noar ti set v0='3PX5CPKSDHLKDX5DB' where id=3; -update noar tt set b1='V2IVULHBCZEISR9ASTF81AIV' where id=3; -update noar ti set b1='V2IVULHBCZEISR9ASTF81AIV' where id=3; -update noar tt set v0='J1D98GFRQ' where id=3; -update noar ti set v0='J1D98GFRQ' where id=3; -update noar tt set b2='O79MR8LFTGWRHYCI7FP3' where id=3; -update noar ti set b2='O79MR8LFTGWRHYCI7FP3' where id=3; -update noar tt set v0='AOJLLR4RIKNLY166PIN1XBMFR' where id=4; -update noar ti set v0='AOJLLR4RIKNLY166PIN1XBMFR' where id=4; -update noar tt set b0='0QLH' where id=4; -update noar ti set b0='0QLH' where id=4; -update noar tt set v0='ZEMNBKSMEL825FSHG9U' where id=4; -update noar ti set v0='ZEMNBKSMEL825FSHG9U' where id=4; -update noar tt set b1='30R7LQ861ZU535IKTNQ' where id=4; -update noar ti set b1='30R7LQ861ZU535IKTNQ' where id=4; -update noar tt set v0='VSS177UTQCQ3EXFFIV35KWPP' where id=4; -update noar ti set v0='VSS177UTQCQ3EXFFIV35KWPP' where id=4; -update noar tt set b2='RJ3B1O2B9JLKLIX3VEO' where id=4; -update noar ti set b2='RJ3B1O2B9JLKLIX3VEO' where id=4; -update noar tt set v0='VJ2GJ9UHEOKUCHCQO2ZR' where id=5; -update noar ti set v0='VJ2GJ9UHEOKUCHCQO2ZR' where id=5; -update noar tt set b0='Z8J38QRMD6U4Q8R4WRUWNZAA78DP8' where id=5; -update noar ti set b0='Z8J38QRMD6U4Q8R4WRUWNZAA78DP8' where id=5; -update noar tt set v0='H86ESHCEPJ' where id=5; -update noar ti set v0='H86ESHCEPJ' where id=5; -update noar tt set b1='7PBBSVC0KSXACSEKKWAABY28O3' where id=5; -update noar ti set b1='7PBBSVC0KSXACSEKKWAABY28O3' where id=5; -update noar tt set v0='8IR3IHD5LAR36X7UE0R' where id=5; -update noar ti set v0='8IR3IHD5LAR36X7UE0R' where id=5; -update noar tt set b2='I2V7XPDJVWEA' where id=5; -update noar ti set b2='I2V7XPDJVWEA' where id=5; -update noar tt set v0='D' where id=6; -update noar ti set v0='D' where id=6; -update noar tt set b0='NIQ2XFMXO22' where id=6; -update noar ti set b0='NIQ2XFMXO22' where id=6; -update noar tt set v0='LA1VGDAVEDESQ7B5' where id=6; -update noar ti set v0='LA1VGDAVEDESQ7B5' where id=6; -update noar tt set b1='0ESWKMPYO2S8NAA' where id=6; -update noar ti set b1='0ESWKMPYO2S8NAA' where id=6; -update noar tt set v0='UJFWZCBDXW4G99' where id=6; -update noar ti set v0='UJFWZCBDXW4G99' where id=6; -update noar tt set b2='6O5X47SSSH3ZEZ6RLLT70Y86ARHF998' where id=6; -update noar ti set b2='6O5X47SSSH3ZEZ6RLLT70Y86ARHF998' where id=6; -update noar tt set v0='R' where id=7; -update noar ti set v0='R' where id=7; -update noar tt set b0='8IBIP4YPWZJO90JULIBMFX8SW' where id=7; -update noar ti set b0='8IBIP4YPWZJO90JULIBMFX8SW' where id=7; -update noar tt set v0='9US3WWSD54WU5BPYBXT8I8N5F8' where id=7; -update noar ti set v0='9US3WWSD54WU5BPYBXT8I8N5F8' where id=7; -update noar tt set b1='E2DJZ7YNJJMLE96' where id=7; -update noar ti set b1='E2DJZ7YNJJMLE96' where id=7; -update noar tt set v0='9UFXX5IWV68YADBT99YR8X2JES78' where id=7; -update noar ti set v0='9UFXX5IWV68YADBT99YR8X2JES78' where id=7; -update noar tt set b2='38E6IQJ6' where id=7; -update noar ti set b2='38E6IQJ6' where id=7; -update noar tt set v0='4P8Q713F5' where id=8; -update noar ti set v0='4P8Q713F5' where id=8; -update noar tt set b0='L3G5OSJ07WU8TXJYSV939G8' where id=8; -update noar ti set b0='L3G5OSJ07WU8TXJYSV939G8' where id=8; -update noar tt set v0='4Z28GWV0WI9DK' where id=8; -update noar ti set v0='4Z28GWV0WI9DK' where id=8; -update noar tt set b1='YNGBR14' where id=8; -update noar ti set b1='YNGBR14' where id=8; -update noar tt set v0='KNJ1OR1I06RCB5EU5HW3NRNFXE5BBMQ' where id=8; -update noar ti set v0='KNJ1OR1I06RCB5EU5HW3NRNFXE5BBMQ' where id=8; -update noar tt set b2='0U4B4NEA8KZTNWC8MI' where id=8; -update noar ti set b2='0U4B4NEA8KZTNWC8MI' where id=8; -update noar tt set v0='CSGHKZSBAHBDO3I4D653ST18QX' where id=9; -update noar ti set v0='CSGHKZSBAHBDO3I4D653ST18QX' where id=9; -update noar tt set b0='UZ' where id=9; -update noar ti set b0='UZ' where id=9; -update noar tt set v0='21T1PSG8YVT3RR383YNM0' where id=9; -update noar ti set v0='21T1PSG8YVT3RR383YNM0' where id=9; -update noar tt set b1='QYV96LKUZ' where id=9; -update noar ti set b1='QYV96LKUZ' where id=9; -update noar tt set v0='BWURG0KM06RKWPZ53H2EXC9PYA8ND4U5' where id=9; -update noar ti set v0='BWURG0KM06RKWPZ53H2EXC9PYA8ND4U5' where id=9; -update noar tt set b2='WGDVLBDEZ56O45GNFND' where id=9; -update noar ti set b2='WGDVLBDEZ56O45GNFND' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 blob not null, - b1 mediumblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='CCK0JJHK7TK0BSFL2S1HM2' where id=1; -update noar ti set v0='CCK0JJHK7TK0BSFL2S1HM2' where id=1; -update noar tt set b0='VL18TR2DNYDC25ZG' where id=1; -update noar ti set b0='VL18TR2DNYDC25ZG' where id=1; -update noar tt set v0='B8AKFZDJ4HKCMSFNEC8WUHI8S0ZH3L6T' where id=1; -update noar ti set v0='B8AKFZDJ4HKCMSFNEC8WUHI8S0ZH3L6T' where id=1; -update noar tt set b1='4FYM92FEMWKSBPP1LW' where id=1; -update noar ti set b1='4FYM92FEMWKSBPP1LW' where id=1; -update noar tt set v0='JC' where id=1; -update noar ti set v0='JC' where id=1; -update noar tt set b2='2H' where id=1; -update noar ti set b2='2H' where id=1; -update noar tt set v0='UU1BRNR99FG59BXQQLUJ8KYFIOLJ38G' where id=2; -update noar ti set v0='UU1BRNR99FG59BXQQLUJ8KYFIOLJ38G' where id=2; -update noar tt set b0='KGSP7ES2YO3UH2LQR' where id=2; -update noar ti set b0='KGSP7ES2YO3UH2LQR' where id=2; -update noar tt set v0='USG' where id=2; -update noar ti set v0='USG' where id=2; -update noar tt set b1='2964GQ' where id=2; -update noar ti set b1='2964GQ' where id=2; -update noar tt set v0='37B' where id=2; -update noar ti set v0='37B' where id=2; -update noar tt set b2='DE4Y61ZGKWVQCN1DJXY2UGGW4BC1' where id=2; -update noar ti set b2='DE4Y61ZGKWVQCN1DJXY2UGGW4BC1' where id=2; -update noar tt set v0='YQM7CNRCYIS82JLNP9ABP9MMW6QSB' where id=3; -update noar ti set v0='YQM7CNRCYIS82JLNP9ABP9MMW6QSB' where id=3; -update noar tt set b0='KMIXKI5GZAB8V5TCFRE5' where id=3; -update noar ti set b0='KMIXKI5GZAB8V5TCFRE5' where id=3; -update noar tt set v0='PO9RSR13T' where id=3; -update noar ti set v0='PO9RSR13T' where id=3; -update noar tt set b1='GUGA8H5PAXBQQ7MYER0D' where id=3; -update noar ti set b1='GUGA8H5PAXBQQ7MYER0D' where id=3; -update noar tt set v0='VF3QKSSOV78CX7MA0A2N' where id=3; -update noar ti set v0='VF3QKSSOV78CX7MA0A2N' where id=3; -update noar tt set b2='IK6Y' where id=3; -update noar ti set b2='IK6Y' where id=3; -update noar tt set v0='QPY891R3QSBMEG3A01AMUMG' where id=4; -update noar ti set v0='QPY891R3QSBMEG3A01AMUMG' where id=4; -update noar tt set b0='MGGM9' where id=4; -update noar ti set b0='MGGM9' where id=4; -update noar tt set v0='IERH' where id=4; -update noar ti set v0='IERH' where id=4; -update noar tt set b1='3OBWCFUP7GIRV9' where id=4; -update noar ti set b1='3OBWCFUP7GIRV9' where id=4; -update noar tt set v0='IXV' where id=4; -update noar ti set v0='IXV' where id=4; -update noar tt set b2='APXIHLJ580D7J5B71' where id=4; -update noar ti set b2='APXIHLJ580D7J5B71' where id=4; -update noar tt set v0='U2IL4JG33NT24NE8LY' where id=5; -update noar ti set v0='U2IL4JG33NT24NE8LY' where id=5; -update noar tt set b0='DLI4DXN' where id=5; -update noar ti set b0='DLI4DXN' where id=5; -update noar tt set v0='8ORFOQ73YOIH3' where id=5; -update noar ti set v0='8ORFOQ73YOIH3' where id=5; -update noar tt set b1='KL6EE66XTKR59ZSPS6W714IK' where id=5; -update noar ti set b1='KL6EE66XTKR59ZSPS6W714IK' where id=5; -update noar tt set v0='JQZ5X92O2MSUW7ZGFF2JJIOHMYZRMN1' where id=5; -update noar ti set v0='JQZ5X92O2MSUW7ZGFF2JJIOHMYZRMN1' where id=5; -update noar tt set b2='VCMIP73NF3HJM5QQDAECK' where id=5; -update noar ti set b2='VCMIP73NF3HJM5QQDAECK' where id=5; -update noar tt set v0='XF2B' where id=6; -update noar ti set v0='XF2B' where id=6; -update noar tt set b0='1RJZTW7LCZA0KRG0FE4VLKX2' where id=6; -update noar ti set b0='1RJZTW7LCZA0KRG0FE4VLKX2' where id=6; -update noar tt set v0='GSK501DWXYLPS13LU' where id=6; -update noar ti set v0='GSK501DWXYLPS13LU' where id=6; -update noar tt set b1='GNCK3I7MPEGODCWB62SSIFATXI' where id=6; -update noar ti set b1='GNCK3I7MPEGODCWB62SSIFATXI' where id=6; -update noar tt set v0='K60R5UCOK2E' where id=6; -update noar ti set v0='K60R5UCOK2E' where id=6; -update noar tt set b2='XU5GVMZCYA5GS18' where id=6; -update noar ti set b2='XU5GVMZCYA5GS18' where id=6; -update noar tt set v0='FJXCHJU2XCJF0XLM8N1G8VA44EW421QO' where id=7; -update noar ti set v0='FJXCHJU2XCJF0XLM8N1G8VA44EW421QO' where id=7; -update noar tt set b0='CN73PX7SFGUVX' where id=7; -update noar ti set b0='CN73PX7SFGUVX' where id=7; -update noar tt set v0='UK9QL' where id=7; -update noar ti set v0='UK9QL' where id=7; -update noar tt set b1='Y3H98RLLVX5FTUXP2HY252J92B2WDL' where id=7; -update noar ti set b1='Y3H98RLLVX5FTUXP2HY252J92B2WDL' where id=7; -update noar tt set v0='34HPE' where id=7; -update noar ti set v0='34HPE' where id=7; -update noar tt set b2='JUPPB4RDTY2OZ2XMXOR' where id=7; -update noar ti set b2='JUPPB4RDTY2OZ2XMXOR' where id=7; -update noar tt set v0='TMJV7PIHDU4O09GLRR5DZ2J' where id=8; -update noar ti set v0='TMJV7PIHDU4O09GLRR5DZ2J' where id=8; -update noar tt set b0='TNZK2E0KUKJBZ' where id=8; -update noar ti set b0='TNZK2E0KUKJBZ' where id=8; -update noar tt set v0='C' where id=8; -update noar ti set v0='C' where id=8; -update noar tt set b1='74O2NJ39WIUJ9BHT08GJNE' where id=8; -update noar ti set b1='74O2NJ39WIUJ9BHT08GJNE' where id=8; -update noar tt set v0='KB7QSJSUPRGALK' where id=8; -update noar ti set v0='KB7QSJSUPRGALK' where id=8; -update noar tt set b2='UP4DW' where id=8; -update noar ti set b2='UP4DW' where id=8; -update noar tt set v0='D2XC722DSEZHLEAG5V' where id=9; -update noar ti set v0='D2XC722DSEZHLEAG5V' where id=9; -update noar tt set b0='C8FCTDCLFUJOVIL' where id=9; -update noar ti set b0='C8FCTDCLFUJOVIL' where id=9; -update noar tt set v0='ASX1JM3TRVHLI5' where id=9; -update noar ti set v0='ASX1JM3TRVHLI5' where id=9; -update noar tt set b1='LJCX8EEK2RZALC3PTVJFM' where id=9; -update noar ti set b1='LJCX8EEK2RZALC3PTVJFM' where id=9; -update noar tt set v0='Y7BB0428G8RCGVT6QSYDAIYGM' where id=9; -update noar ti set v0='Y7BB0428G8RCGVT6QSYDAIYGM' where id=9; -update noar tt set b2='FC0OHEY' where id=9; -update noar ti set b2='FC0OHEY' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 blob null, - b1 mediumblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='68WFG9DJ0F5SPGNLS9Y3VBGQW' where id=1; -update noar ti set v0='68WFG9DJ0F5SPGNLS9Y3VBGQW' where id=1; -update noar tt set b0='GJJQDWXFVVW9W1C1V3IGUY0H73C0Z' where id=1; -update noar ti set b0='GJJQDWXFVVW9W1C1V3IGUY0H73C0Z' where id=1; -update noar tt set v0='HZLH' where id=1; -update noar ti set v0='HZLH' where id=1; -update noar tt set b1='TAMNEBRZIYWZMMAXXC' where id=1; -update noar ti set b1='TAMNEBRZIYWZMMAXXC' where id=1; -update noar tt set v0='1GN9L6YQDOW5B2D7QNP2KWHJZAN7UM5X' where id=1; -update noar ti set v0='1GN9L6YQDOW5B2D7QNP2KWHJZAN7UM5X' where id=1; -update noar tt set b2='MCBWMPAKB0LF58N70EG2X7C8JE76W4DY' where id=1; -update noar ti set b2='MCBWMPAKB0LF58N70EG2X7C8JE76W4DY' where id=1; -update noar tt set v0='HSFTWCOI3WKZPYIW1ZAEZT2EXG6KQ6UM' where id=2; -update noar ti set v0='HSFTWCOI3WKZPYIW1ZAEZT2EXG6KQ6UM' where id=2; -update noar tt set b0='36PUJW3R3SRCZANOLG42OKQG0WW' where id=2; -update noar ti set b0='36PUJW3R3SRCZANOLG42OKQG0WW' where id=2; -update noar tt set v0='EHT6WQDXJ0KCVWENEJD4I9EEKREG' where id=2; -update noar ti set v0='EHT6WQDXJ0KCVWENEJD4I9EEKREG' where id=2; -update noar tt set b1='FI0P8USQIS1HAR' where id=2; -update noar ti set b1='FI0P8USQIS1HAR' where id=2; -update noar tt set v0='NABZ2R0EE4KRD4HB0KNQW' where id=2; -update noar ti set v0='NABZ2R0EE4KRD4HB0KNQW' where id=2; -update noar tt set b2='MHJO9XHLPB9P441LYDSSBXBS26O0' where id=2; -update noar ti set b2='MHJO9XHLPB9P441LYDSSBXBS26O0' where id=2; -update noar tt set v0='EYM93FJNGMY4GH71C6X4D7LG7O' where id=3; -update noar ti set v0='EYM93FJNGMY4GH71C6X4D7LG7O' where id=3; -update noar tt set b0='4WE5X4268' where id=3; -update noar ti set b0='4WE5X4268' where id=3; -update noar tt set v0='RZ8AQRCT57EFYIVQK3' where id=3; -update noar ti set v0='RZ8AQRCT57EFYIVQK3' where id=3; -update noar tt set b1='6Z3G17UE1T6DWAKCPOT' where id=3; -update noar ti set b1='6Z3G17UE1T6DWAKCPOT' where id=3; -update noar tt set v0='TNW6Z5BJMUULNM3E5HDZW98DYXXLAHE' where id=3; -update noar ti set v0='TNW6Z5BJMUULNM3E5HDZW98DYXXLAHE' where id=3; -update noar tt set b2='V736194IVASEFXV9QE71NTETX8HMPK' where id=3; -update noar ti set b2='V736194IVASEFXV9QE71NTETX8HMPK' where id=3; -update noar tt set v0='Q' where id=4; -update noar ti set v0='Q' where id=4; -update noar tt set b0='790AQ3FR1XAKQ7J96O' where id=4; -update noar ti set b0='790AQ3FR1XAKQ7J96O' where id=4; -update noar tt set v0='RNC0NJXG' where id=4; -update noar ti set v0='RNC0NJXG' where id=4; -update noar tt set b1='BS8MUZSWDI02YLPNBXKZ' where id=4; -update noar ti set b1='BS8MUZSWDI02YLPNBXKZ' where id=4; -update noar tt set v0='HLIM16A3WWMFST257RS7E1R8ZOAL' where id=4; -update noar ti set v0='HLIM16A3WWMFST257RS7E1R8ZOAL' where id=4; -update noar tt set b2='716E9B94DMOQRWBDXLLTE81' where id=4; -update noar ti set b2='716E9B94DMOQRWBDXLLTE81' where id=4; -update noar tt set v0='LTPTMWH7' where id=5; -update noar ti set v0='LTPTMWH7' where id=5; -update noar tt set b0='6DLTZPWJXHA57OL7O' where id=5; -update noar ti set b0='6DLTZPWJXHA57OL7O' where id=5; -update noar tt set v0='JC4HUNG4OL5XTXRKBKL59PBO' where id=5; -update noar ti set v0='JC4HUNG4OL5XTXRKBKL59PBO' where id=5; -update noar tt set b1='OWET5SAJY93XXWY6Q' where id=5; -update noar ti set b1='OWET5SAJY93XXWY6Q' where id=5; -update noar tt set v0='LUCQN1UX8AODTLE7X8HGPITBI12NQ' where id=5; -update noar ti set v0='LUCQN1UX8AODTLE7X8HGPITBI12NQ' where id=5; -update noar tt set b2='LIC9K2G7' where id=5; -update noar ti set b2='LIC9K2G7' where id=5; -update noar tt set v0='9X4I118ATM6XW2CP3' where id=6; -update noar ti set v0='9X4I118ATM6XW2CP3' where id=6; -update noar tt set b0='UWE8MRPUXVGIOLBYZPP2N9' where id=6; -update noar ti set b0='UWE8MRPUXVGIOLBYZPP2N9' where id=6; -update noar tt set v0='V' where id=6; -update noar ti set v0='V' where id=6; -update noar tt set b1='JKQE0YCBT0139G' where id=6; -update noar ti set b1='JKQE0YCBT0139G' where id=6; -update noar tt set v0='YK81UBKGIJ6LSIB7J4' where id=6; -update noar ti set v0='YK81UBKGIJ6LSIB7J4' where id=6; -update noar tt set b2='DRJONJWOM2EVZ90YO3C3CWPPK8ZZ' where id=6; -update noar ti set b2='DRJONJWOM2EVZ90YO3C3CWPPK8ZZ' where id=6; -update noar tt set v0='KGVBOBAQ74UFG26PG4F7CMYGIFQX6Z' where id=7; -update noar ti set v0='KGVBOBAQ74UFG26PG4F7CMYGIFQX6Z' where id=7; -update noar tt set b0='ROZ88VBKH1PQTULLA4TTH1FEXW' where id=7; -update noar ti set b0='ROZ88VBKH1PQTULLA4TTH1FEXW' where id=7; -update noar tt set v0='TMIBLKFKNNQ5ID7HYNK0KNZKQ8' where id=7; -update noar ti set v0='TMIBLKFKNNQ5ID7HYNK0KNZKQ8' where id=7; -update noar tt set b1='LU9GMFQ5XC026GHOMM40A4VS31N' where id=7; -update noar ti set b1='LU9GMFQ5XC026GHOMM40A4VS31N' where id=7; -update noar tt set v0='MJNSE4RU0' where id=7; -update noar ti set v0='MJNSE4RU0' where id=7; -update noar tt set b2='L7YVQU7FC099COPF2HVRH9' where id=7; -update noar ti set b2='L7YVQU7FC099COPF2HVRH9' where id=7; -update noar tt set v0='JNR0EEWR3VQ9LN7GJX9TJTQVN' where id=8; -update noar ti set v0='JNR0EEWR3VQ9LN7GJX9TJTQVN' where id=8; -update noar tt set b0='QK2HW51U16IAQXEMQDLEM' where id=8; -update noar ti set b0='QK2HW51U16IAQXEMQDLEM' where id=8; -update noar tt set v0='6YHWAIS3P7' where id=8; -update noar ti set v0='6YHWAIS3P7' where id=8; -update noar tt set b1='DVTRZJ41A6SL4CYI43J' where id=8; -update noar ti set b1='DVTRZJ41A6SL4CYI43J' where id=8; -update noar tt set v0='PYGO8HY' where id=8; -update noar ti set v0='PYGO8HY' where id=8; -update noar tt set b2='6' where id=8; -update noar ti set b2='6' where id=8; -update noar tt set v0='YVF7G0RPZK8GH0W4L5U' where id=9; -update noar ti set v0='YVF7G0RPZK8GH0W4L5U' where id=9; -update noar tt set b0='ZVW0D' where id=9; -update noar ti set b0='ZVW0D' where id=9; -update noar tt set v0='WRBRJR0PUWNQXLWK' where id=9; -update noar ti set v0='WRBRJR0PUWNQXLWK' where id=9; -update noar tt set b1='MF36U4O' where id=9; -update noar ti set b1='MF36U4O' where id=9; -update noar tt set v0='76LSI1ZY1YW3DGEU87GNOUZL' where id=9; -update noar ti set v0='76LSI1ZY1YW3DGEU87GNOUZL' where id=9; -update noar tt set b2='BKIWO5A0M1X96BQLKZS' where id=9; -update noar ti set b2='BKIWO5A0M1X96BQLKZS' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 blob null, - b1 mediumblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='MO3D30LM8B0Q8OBR' where id=1; -update noar ti set v0='MO3D30LM8B0Q8OBR' where id=1; -update noar tt set b0='37UJPMVM20AZA1MCKSN9A8N5OY' where id=1; -update noar ti set b0='37UJPMVM20AZA1MCKSN9A8N5OY' where id=1; -update noar tt set v0='DA85PD9SU6HV2R' where id=1; -update noar ti set v0='DA85PD9SU6HV2R' where id=1; -update noar tt set b1='4' where id=1; -update noar ti set b1='4' where id=1; -update noar tt set v0='U0XSXPLOVC0MIUTXDNR8B' where id=1; -update noar ti set v0='U0XSXPLOVC0MIUTXDNR8B' where id=1; -update noar tt set b2='9N5BJO7SU3JBSEHNM9DKWI8796Z' where id=1; -update noar ti set b2='9N5BJO7SU3JBSEHNM9DKWI8796Z' where id=1; -update noar tt set v0='2RVYVSG054HQH7DCBCGAV' where id=2; -update noar ti set v0='2RVYVSG054HQH7DCBCGAV' where id=2; -update noar tt set b0='Z' where id=2; -update noar ti set b0='Z' where id=2; -update noar tt set v0='0IV3OCI9CC059E68MGHJ' where id=2; -update noar ti set v0='0IV3OCI9CC059E68MGHJ' where id=2; -update noar tt set b1='BCNDHCCPJDXD27KA8L' where id=2; -update noar ti set b1='BCNDHCCPJDXD27KA8L' where id=2; -update noar tt set v0='XO' where id=2; -update noar ti set v0='XO' where id=2; -update noar tt set b2='MHQ43XP8IY2Q0TFZVUS' where id=2; -update noar ti set b2='MHQ43XP8IY2Q0TFZVUS' where id=2; -update noar tt set v0='O1RIQFCMTEDOERWIS8L5BV52RN7OF75' where id=3; -update noar ti set v0='O1RIQFCMTEDOERWIS8L5BV52RN7OF75' where id=3; -update noar tt set b0='6CXKYU6MGWCYNT' where id=3; -update noar ti set b0='6CXKYU6MGWCYNT' where id=3; -update noar tt set v0='OPRAL68V3W3F' where id=3; -update noar ti set v0='OPRAL68V3W3F' where id=3; -update noar tt set b1='6CR23K' where id=3; -update noar ti set b1='6CR23K' where id=3; -update noar tt set v0='PEU' where id=3; -update noar ti set v0='PEU' where id=3; -update noar tt set b2='O6Y0GD' where id=3; -update noar ti set b2='O6Y0GD' where id=3; -update noar tt set v0='NBCJ4ENSSJVK7284DDBH' where id=4; -update noar ti set v0='NBCJ4ENSSJVK7284DDBH' where id=4; -update noar tt set b0='MNXVJ8G8A040JG4' where id=4; -update noar ti set b0='MNXVJ8G8A040JG4' where id=4; -update noar tt set v0='HWUP083X6QYO78Z85BEU0AJI3I2SS5QG' where id=4; -update noar ti set v0='HWUP083X6QYO78Z85BEU0AJI3I2SS5QG' where id=4; -update noar tt set b1='F18NE22E2NWXRCSC' where id=4; -update noar ti set b1='F18NE22E2NWXRCSC' where id=4; -update noar tt set v0='XMMFLCB38E' where id=4; -update noar ti set v0='XMMFLCB38E' where id=4; -update noar tt set b2='4S6L18AMFFHZVQXN' where id=4; -update noar ti set b2='4S6L18AMFFHZVQXN' where id=4; -update noar tt set v0='1HT699BJXLWF7PHV81P' where id=5; -update noar ti set v0='1HT699BJXLWF7PHV81P' where id=5; -update noar tt set b0='C7' where id=5; -update noar ti set b0='C7' where id=5; -update noar tt set v0='LKT0J02L5' where id=5; -update noar ti set v0='LKT0J02L5' where id=5; -update noar tt set b1='SSXRD4QSOL1MBF7RMZB6POOCJHR1B' where id=5; -update noar ti set b1='SSXRD4QSOL1MBF7RMZB6POOCJHR1B' where id=5; -update noar tt set v0='P0YFEV2JSP94FQULY2NNVGR7E1AT8PM' where id=5; -update noar ti set v0='P0YFEV2JSP94FQULY2NNVGR7E1AT8PM' where id=5; -update noar tt set b2='3S4GS23F93JGACHMR8QZKC1P5' where id=5; -update noar ti set b2='3S4GS23F93JGACHMR8QZKC1P5' where id=5; -update noar tt set v0='G3B9IOQ7I6HI3K' where id=6; -update noar ti set v0='G3B9IOQ7I6HI3K' where id=6; -update noar tt set b0='F734M595W6TN6VZ559JMJF7T' where id=6; -update noar ti set b0='F734M595W6TN6VZ559JMJF7T' where id=6; -update noar tt set v0='T2GNQ' where id=6; -update noar ti set v0='T2GNQ' where id=6; -update noar tt set b1='2PY84OQAHQ0BUQYELHO66XS8IZ4' where id=6; -update noar ti set b1='2PY84OQAHQ0BUQYELHO66XS8IZ4' where id=6; -update noar tt set v0='BQB7OXKA1INZPV323KLTVGZKU5D' where id=6; -update noar ti set v0='BQB7OXKA1INZPV323KLTVGZKU5D' where id=6; -update noar tt set b2='CZ' where id=6; -update noar ti set b2='CZ' where id=6; -update noar tt set v0='5BR2' where id=7; -update noar ti set v0='5BR2' where id=7; -update noar tt set b0='MRDP8' where id=7; -update noar ti set b0='MRDP8' where id=7; -update noar tt set v0='E2CMAUAAJKWJ87MFQYJRG' where id=7; -update noar ti set v0='E2CMAUAAJKWJ87MFQYJRG' where id=7; -update noar tt set b1='K93B0836WE1ONXPH1XJH3ZB9BN0VC' where id=7; -update noar ti set b1='K93B0836WE1ONXPH1XJH3ZB9BN0VC' where id=7; -update noar tt set v0='0KDY' where id=7; -update noar ti set v0='0KDY' where id=7; -update noar tt set b2='40UTQWSB9S3Y93Q' where id=7; -update noar ti set b2='40UTQWSB9S3Y93Q' where id=7; -update noar tt set v0='YJMBZ4WFEX' where id=8; -update noar ti set v0='YJMBZ4WFEX' where id=8; -update noar tt set b0='JAVOYR63YPS9Z765PEAW54TIKXOD8WGU' where id=8; -update noar ti set b0='JAVOYR63YPS9Z765PEAW54TIKXOD8WGU' where id=8; -update noar tt set v0='D78D' where id=8; -update noar ti set v0='D78D' where id=8; -update noar tt set b1='KG5' where id=8; -update noar ti set b1='KG5' where id=8; -update noar tt set v0='N7SSPSGX3UMDUC5IASOARJTJV0GUGQ' where id=8; -update noar ti set v0='N7SSPSGX3UMDUC5IASOARJTJV0GUGQ' where id=8; -update noar tt set b2='94W3RGPR9J7UC4' where id=8; -update noar ti set b2='94W3RGPR9J7UC4' where id=8; -update noar tt set v0='ZSAQ9T6KNRSVK9V2I3M9PWH9Z' where id=9; -update noar ti set v0='ZSAQ9T6KNRSVK9V2I3M9PWH9Z' where id=9; -update noar tt set b0='93M7' where id=9; -update noar ti set b0='93M7' where id=9; -update noar tt set v0='M5JERVPVEPT6PBJ86YW5NZTP' where id=9; -update noar ti set v0='M5JERVPVEPT6PBJ86YW5NZTP' where id=9; -update noar tt set b1='BTH8H9PTV2REDR2H' where id=9; -update noar ti set b1='BTH8H9PTV2REDR2H' where id=9; -update noar tt set v0='0C2Q7HB4C5E5' where id=9; -update noar ti set v0='0C2Q7HB4C5E5' where id=9; -update noar tt set b2='ZGFQQZ98M623FHPTBEYPTJZHW' where id=9; -update noar ti set b2='ZGFQQZ98M623FHPTBEYPTJZHW' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 blob not null, - b1 mediumblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='ITD57JUS8PZW804021UG414R' where id=1; -update noar ti set v0='ITD57JUS8PZW804021UG414R' where id=1; -update noar tt set b0='WUY2LGBUTQP7251GT' where id=1; -update noar ti set b0='WUY2LGBUTQP7251GT' where id=1; -update noar tt set v0='QMPF8MITENB3ZDK' where id=1; -update noar ti set v0='QMPF8MITENB3ZDK' where id=1; -update noar tt set b1='CZ2V4' where id=1; -update noar ti set b1='CZ2V4' where id=1; -update noar tt set v0='PJVFPR6P2' where id=1; -update noar ti set v0='PJVFPR6P2' where id=1; -update noar tt set b2='CKV1XVN7LQQM5' where id=1; -update noar ti set b2='CKV1XVN7LQQM5' where id=1; -update noar tt set v0='2' where id=2; -update noar ti set v0='2' where id=2; -update noar tt set b0='U4X6YP4MVATBDL5VUNYH4PR8Q8OZNM' where id=2; -update noar ti set b0='U4X6YP4MVATBDL5VUNYH4PR8Q8OZNM' where id=2; -update noar tt set v0='YY7B4R8P9PH5ZE0OK6BUN3ZHZQ2XL' where id=2; -update noar ti set v0='YY7B4R8P9PH5ZE0OK6BUN3ZHZQ2XL' where id=2; -update noar tt set b1='4QXSFZ15ED1G2J63UAGHD29X61R' where id=2; -update noar ti set b1='4QXSFZ15ED1G2J63UAGHD29X61R' where id=2; -update noar tt set v0='5ZYFDLUVUV13' where id=2; -update noar ti set v0='5ZYFDLUVUV13' where id=2; -update noar tt set b2='WAJ30H8WVKORHVFK3' where id=2; -update noar ti set b2='WAJ30H8WVKORHVFK3' where id=2; -update noar tt set v0='O' where id=3; -update noar ti set v0='O' where id=3; -update noar tt set b0='Q2SI' where id=3; -update noar ti set b0='Q2SI' where id=3; -update noar tt set v0='V5GVSEJACVA0YDUL3UH4YU5IER1AUH' where id=3; -update noar ti set v0='V5GVSEJACVA0YDUL3UH4YU5IER1AUH' where id=3; -update noar tt set b1='HLKB8RCE5X9QT7E57I5' where id=3; -update noar ti set b1='HLKB8RCE5X9QT7E57I5' where id=3; -update noar tt set v0='4T89MBSQX4Y1XAXIR5K' where id=3; -update noar ti set v0='4T89MBSQX4Y1XAXIR5K' where id=3; -update noar tt set b2='G0UODU6X2' where id=3; -update noar ti set b2='G0UODU6X2' where id=3; -update noar tt set v0='V1E892GQM7C' where id=4; -update noar ti set v0='V1E892GQM7C' where id=4; -update noar tt set b0='9JXWQ23T12LV19QR4FSR05NJUG7Z1' where id=4; -update noar ti set b0='9JXWQ23T12LV19QR4FSR05NJUG7Z1' where id=4; -update noar tt set v0='ON20R8CQRHNQZ77FB8EFU7' where id=4; -update noar ti set v0='ON20R8CQRHNQZ77FB8EFU7' where id=4; -update noar tt set b1='WKCILNMWE' where id=4; -update noar ti set b1='WKCILNMWE' where id=4; -update noar tt set v0='CAG79E0VZSTYT8FV4L57QBZW254VQC' where id=4; -update noar ti set v0='CAG79E0VZSTYT8FV4L57QBZW254VQC' where id=4; -update noar tt set b2='ZZES' where id=4; -update noar ti set b2='ZZES' where id=4; -update noar tt set v0='5177KRLJE8A88Y' where id=5; -update noar ti set v0='5177KRLJE8A88Y' where id=5; -update noar tt set b0='IBQOC6IEUZOG9XSE0O' where id=5; -update noar ti set b0='IBQOC6IEUZOG9XSE0O' where id=5; -update noar tt set v0='HSQFU67S8' where id=5; -update noar ti set v0='HSQFU67S8' where id=5; -update noar tt set b1='I2A1Q407V035WOO5QMROCG4WX36' where id=5; -update noar ti set b1='I2A1Q407V035WOO5QMROCG4WX36' where id=5; -update noar tt set v0='Z6NG1V' where id=5; -update noar ti set v0='Z6NG1V' where id=5; -update noar tt set b2='IY' where id=5; -update noar ti set b2='IY' where id=5; -update noar tt set v0='PLBB4761ZE7LKWWB9OJB0PE8LL2' where id=6; -update noar ti set v0='PLBB4761ZE7LKWWB9OJB0PE8LL2' where id=6; -update noar tt set b0='U5SF53IXVDSGP8DHZEQJS3TXDK6P6WT' where id=6; -update noar ti set b0='U5SF53IXVDSGP8DHZEQJS3TXDK6P6WT' where id=6; -update noar tt set v0='NW0S3C80CMUUZM' where id=6; -update noar ti set v0='NW0S3C80CMUUZM' where id=6; -update noar tt set b1='DLUV6C4WIM975V0MLRPO48AS823' where id=6; -update noar ti set b1='DLUV6C4WIM975V0MLRPO48AS823' where id=6; -update noar tt set v0='1QBC8O' where id=6; -update noar ti set v0='1QBC8O' where id=6; -update noar tt set b2='0FZ' where id=6; -update noar ti set b2='0FZ' where id=6; -update noar tt set v0='9LE15NXZI10678H8L6THV7KNR7D8' where id=7; -update noar ti set v0='9LE15NXZI10678H8L6THV7KNR7D8' where id=7; -update noar tt set b0='O85BM8AS9SCT30PN692IKLM5TXWC5' where id=7; -update noar ti set b0='O85BM8AS9SCT30PN692IKLM5TXWC5' where id=7; -update noar tt set v0='PJCU1IE1TVVOUUT6EGK915ESWBZ8T72C' where id=7; -update noar ti set v0='PJCU1IE1TVVOUUT6EGK915ESWBZ8T72C' where id=7; -update noar tt set b1='WDYAF2QLMI8N4PRE2Y9Z5ID' where id=7; -update noar ti set b1='WDYAF2QLMI8N4PRE2Y9Z5ID' where id=7; -update noar tt set v0='EQOHMW92S' where id=7; -update noar ti set v0='EQOHMW92S' where id=7; -update noar tt set b2='9' where id=7; -update noar ti set b2='9' where id=7; -update noar tt set v0='62OH6UO4VUEW' where id=8; -update noar ti set v0='62OH6UO4VUEW' where id=8; -update noar tt set b0='L35XMXLPG7ZHIJYHT' where id=8; -update noar ti set b0='L35XMXLPG7ZHIJYHT' where id=8; -update noar tt set v0='TYIUK6QWJDUGL2Z8SPV9' where id=8; -update noar ti set v0='TYIUK6QWJDUGL2Z8SPV9' where id=8; -update noar tt set b1='LTA3GALWTJY' where id=8; -update noar ti set b1='LTA3GALWTJY' where id=8; -update noar tt set v0='9X1U8QM2IBGPXWDZT8' where id=8; -update noar ti set v0='9X1U8QM2IBGPXWDZT8' where id=8; -update noar tt set b2='93JXB6XEK28V84C6AYG' where id=8; -update noar ti set b2='93JXB6XEK28V84C6AYG' where id=8; -update noar tt set v0='PL4OJKK0LRZB6T' where id=9; -update noar ti set v0='PL4OJKK0LRZB6T' where id=9; -update noar tt set b0='T3' where id=9; -update noar ti set b0='T3' where id=9; -update noar tt set v0='SLAD3CQNTN' where id=9; -update noar ti set v0='SLAD3CQNTN' where id=9; -update noar tt set b1='U1A6UKP2DBFBEJ' where id=9; -update noar ti set b1='U1A6UKP2DBFBEJ' where id=9; -update noar tt set v0='M' where id=9; -update noar ti set v0='M' where id=9; -update noar tt set b2='VMPGNADCAKOAFDZV0JG3' where id=9; -update noar ti set b2='VMPGNADCAKOAFDZV0JG3' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 blob not null, - b1 mediumblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='D4STS4Y22S6OSYQC41785C2QVEKPYZ1' where id=1; -update noar ti set v0='D4STS4Y22S6OSYQC41785C2QVEKPYZ1' where id=1; -update noar tt set b0='4SY57CZZ919S8' where id=1; -update noar ti set b0='4SY57CZZ919S8' where id=1; -update noar tt set v0='FYGV7TTNG89MA3' where id=1; -update noar ti set v0='FYGV7TTNG89MA3' where id=1; -update noar tt set b1='99Q6LWKXGAUEIVKIQD' where id=1; -update noar ti set b1='99Q6LWKXGAUEIVKIQD' where id=1; -update noar tt set v0='GFQBZVQAA8' where id=1; -update noar ti set v0='GFQBZVQAA8' where id=1; -update noar tt set b2='71MKMYGPUXXVRQ5EBSZAK9UW74N11S' where id=1; -update noar ti set b2='71MKMYGPUXXVRQ5EBSZAK9UW74N11S' where id=1; -update noar tt set v0='EN3M9MLFKSB4GBD73CFODHSWTF0389V' where id=2; -update noar ti set v0='EN3M9MLFKSB4GBD73CFODHSWTF0389V' where id=2; -update noar tt set b0='L8BLUP7QNSHKQI1453VA7LFC' where id=2; -update noar ti set b0='L8BLUP7QNSHKQI1453VA7LFC' where id=2; -update noar tt set v0='1R588Z32TGHHVCAP5FS7' where id=2; -update noar ti set v0='1R588Z32TGHHVCAP5FS7' where id=2; -update noar tt set b1='SYOP93XOTWW78135' where id=2; -update noar ti set b1='SYOP93XOTWW78135' where id=2; -update noar tt set v0='O3UVEPGTAD904ZO9B1ZWMSU7TMS' where id=2; -update noar ti set v0='O3UVEPGTAD904ZO9B1ZWMSU7TMS' where id=2; -update noar tt set b2='R8ER' where id=2; -update noar ti set b2='R8ER' where id=2; -update noar tt set v0='N7SWDTOCBSEE37ZMC4AZJUXIY46J' where id=3; -update noar ti set v0='N7SWDTOCBSEE37ZMC4AZJUXIY46J' where id=3; -update noar tt set b0='XAPAUQN26W4FPKARN4GGI8' where id=3; -update noar ti set b0='XAPAUQN26W4FPKARN4GGI8' where id=3; -update noar tt set v0='1DHU0TR' where id=3; -update noar ti set v0='1DHU0TR' where id=3; -update noar tt set b1='Y4K' where id=3; -update noar ti set b1='Y4K' where id=3; -update noar tt set v0='5GU5RMJ96AL9CE8C4P4RQGFJ6SW5D' where id=3; -update noar ti set v0='5GU5RMJ96AL9CE8C4P4RQGFJ6SW5D' where id=3; -update noar tt set b2='QMLMDLLRLH03PLA2OS5ESUJ' where id=3; -update noar ti set b2='QMLMDLLRLH03PLA2OS5ESUJ' where id=3; -update noar tt set v0='W590ZYAPRPVYBMM2LW' where id=4; -update noar ti set v0='W590ZYAPRPVYBMM2LW' where id=4; -update noar tt set b0='R54VXUSTNPYPE2HZRR3HDMF' where id=4; -update noar ti set b0='R54VXUSTNPYPE2HZRR3HDMF' where id=4; -update noar tt set v0='0W4D' where id=4; -update noar ti set v0='0W4D' where id=4; -update noar tt set b1='DAAVXWG4NNKB7NTJCQUR79U8' where id=4; -update noar ti set b1='DAAVXWG4NNKB7NTJCQUR79U8' where id=4; -update noar tt set v0='4RG1K3RZ8RFEXD4DLVPH5T' where id=4; -update noar ti set v0='4RG1K3RZ8RFEXD4DLVPH5T' where id=4; -update noar tt set b2='6' where id=4; -update noar ti set b2='6' where id=4; -update noar tt set v0='40X12J923KO56NXU0T0' where id=5; -update noar ti set v0='40X12J923KO56NXU0T0' where id=5; -update noar tt set b0='DCODQP23MTI8YXLHBAI2T9RHM0Q' where id=5; -update noar ti set b0='DCODQP23MTI8YXLHBAI2T9RHM0Q' where id=5; -update noar tt set v0='FPE7A' where id=5; -update noar ti set v0='FPE7A' where id=5; -update noar tt set b1='XBE4X' where id=5; -update noar ti set b1='XBE4X' where id=5; -update noar tt set v0='KY65MW6D5XG53FSSUP' where id=5; -update noar ti set v0='KY65MW6D5XG53FSSUP' where id=5; -update noar tt set b2='MXESE8WMUTTJFL' where id=5; -update noar ti set b2='MXESE8WMUTTJFL' where id=5; -update noar tt set v0='S0VDZKMDF8N9FY5W978PB1UE170KQ7' where id=6; -update noar ti set v0='S0VDZKMDF8N9FY5W978PB1UE170KQ7' where id=6; -update noar tt set b0='7ORGOKVV2NT04TEZOGK0' where id=6; -update noar ti set b0='7ORGOKVV2NT04TEZOGK0' where id=6; -update noar tt set v0='5AKK7SVKK3L0KEX2DIUB86DRVZZ' where id=6; -update noar ti set v0='5AKK7SVKK3L0KEX2DIUB86DRVZZ' where id=6; -update noar tt set b1='5HC5QBGE904QY3BBAQ7VPSJ6IJ02' where id=6; -update noar ti set b1='5HC5QBGE904QY3BBAQ7VPSJ6IJ02' where id=6; -update noar tt set v0='R' where id=6; -update noar ti set v0='R' where id=6; -update noar tt set b2='YS6VKGTB7' where id=6; -update noar ti set b2='YS6VKGTB7' where id=6; -update noar tt set v0='T70NA4UCDVU4DDSRO4HQHYHF25D7V7T' where id=7; -update noar ti set v0='T70NA4UCDVU4DDSRO4HQHYHF25D7V7T' where id=7; -update noar tt set b0='1UDPXO93HC9' where id=7; -update noar ti set b0='1UDPXO93HC9' where id=7; -update noar tt set v0='JYTX1E7V7LYKT19FGSAM9GJ002D0U6R' where id=7; -update noar ti set v0='JYTX1E7V7LYKT19FGSAM9GJ002D0U6R' where id=7; -update noar tt set b1='G1RM1UN07Z0N1PQHSZAJX' where id=7; -update noar ti set b1='G1RM1UN07Z0N1PQHSZAJX' where id=7; -update noar tt set v0='7QWYFDXB021BDE8BSLNE' where id=7; -update noar ti set v0='7QWYFDXB021BDE8BSLNE' where id=7; -update noar tt set b2='KU3T9K2I2YZ58' where id=7; -update noar ti set b2='KU3T9K2I2YZ58' where id=7; -update noar tt set v0='VG62AB9BGU50JRB6A5R3C464' where id=8; -update noar ti set v0='VG62AB9BGU50JRB6A5R3C464' where id=8; -update noar tt set b0='RCO0EA59FPU30VC2' where id=8; -update noar ti set b0='RCO0EA59FPU30VC2' where id=8; -update noar tt set v0='X8SUP8E2WZJO3' where id=8; -update noar ti set v0='X8SUP8E2WZJO3' where id=8; -update noar tt set b1='P1W2OJAT662F5255HI7UAZVMWUNQ' where id=8; -update noar ti set b1='P1W2OJAT662F5255HI7UAZVMWUNQ' where id=8; -update noar tt set v0='KCSS48BU9' where id=8; -update noar ti set v0='KCSS48BU9' where id=8; -update noar tt set b2='ZT' where id=8; -update noar ti set b2='ZT' where id=8; -update noar tt set v0='TCPKI958Q6QI6U6' where id=9; -update noar ti set v0='TCPKI958Q6QI6U6' where id=9; -update noar tt set b0='IZZQZTSHCYDH9Y5ESAG' where id=9; -update noar ti set b0='IZZQZTSHCYDH9Y5ESAG' where id=9; -update noar tt set v0='OF51YVXAL11ZZ9SEZKQ' where id=9; -update noar ti set v0='OF51YVXAL11ZZ9SEZKQ' where id=9; -update noar tt set b1='O0YBO6NQA6VJTYK3X0BJY' where id=9; -update noar ti set b1='O0YBO6NQA6VJTYK3X0BJY' where id=9; -update noar tt set v0='G9M5NYCUZVL7S1KPGTO9J' where id=9; -update noar ti set v0='G9M5NYCUZVL7S1KPGTO9J' where id=9; -update noar tt set b2='YOI0MS8I0XG8XXPSL' where id=9; -update noar ti set b2='YOI0MS8I0XG8XXPSL' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 blob null, - b1 longblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='W3D1' where id=1; -update noar ti set v0='W3D1' where id=1; -update noar tt set b0='NW4UR2' where id=1; -update noar ti set b0='NW4UR2' where id=1; -update noar tt set v0='7BDA9R8SXP9EVSY3I3HUQUCSYH0W9J2' where id=1; -update noar ti set v0='7BDA9R8SXP9EVSY3I3HUQUCSYH0W9J2' where id=1; -update noar tt set b1='P80BRBLSVBXL8ZS1O' where id=1; -update noar ti set b1='P80BRBLSVBXL8ZS1O' where id=1; -update noar tt set v0='WB6GQSIN0E6IBPKM9JXO38' where id=1; -update noar ti set v0='WB6GQSIN0E6IBPKM9JXO38' where id=1; -update noar tt set b2='N18KZ895FSVRKJGVRNGOL5' where id=1; -update noar ti set b2='N18KZ895FSVRKJGVRNGOL5' where id=1; -update noar tt set v0='Y1APWUU4HMWTRJYZ5HE2Q6' where id=2; -update noar ti set v0='Y1APWUU4HMWTRJYZ5HE2Q6' where id=2; -update noar tt set b0='V' where id=2; -update noar ti set b0='V' where id=2; -update noar tt set v0='5UJRNA7DFS' where id=2; -update noar ti set v0='5UJRNA7DFS' where id=2; -update noar tt set b1='EM27SOMM28VMLWYU' where id=2; -update noar ti set b1='EM27SOMM28VMLWYU' where id=2; -update noar tt set v0='7KSN1PHCSD' where id=2; -update noar ti set v0='7KSN1PHCSD' where id=2; -update noar tt set b2='4TN6UMXDT1QX2' where id=2; -update noar ti set b2='4TN6UMXDT1QX2' where id=2; -update noar tt set v0='097X4G7M6RVHVMYW4K45YTYIVY' where id=3; -update noar ti set v0='097X4G7M6RVHVMYW4K45YTYIVY' where id=3; -update noar tt set b0='0KUFS61FOX3XMDQX649S2' where id=3; -update noar ti set b0='0KUFS61FOX3XMDQX649S2' where id=3; -update noar tt set v0='JMKIKZCCVS5' where id=3; -update noar ti set v0='JMKIKZCCVS5' where id=3; -update noar tt set b1='6EZS0XBVBQN16C6C0PVUC6D' where id=3; -update noar ti set b1='6EZS0XBVBQN16C6C0PVUC6D' where id=3; -update noar tt set v0='1VYA7XMQDAUEUBD5D1ECNWD' where id=3; -update noar ti set v0='1VYA7XMQDAUEUBD5D1ECNWD' where id=3; -update noar tt set b2='LI0AA6RKLGC8OBBPDLI8QQ99Q0M' where id=3; -update noar ti set b2='LI0AA6RKLGC8OBBPDLI8QQ99Q0M' where id=3; -update noar tt set v0='IA6Q3N9CINOCAVEF2YFH33EFQGN' where id=4; -update noar ti set v0='IA6Q3N9CINOCAVEF2YFH33EFQGN' where id=4; -update noar tt set b0='SJ503SX5X1JQ0L' where id=4; -update noar ti set b0='SJ503SX5X1JQ0L' where id=4; -update noar tt set v0='1JOWFC8D0JO534XYOW1I1UL' where id=4; -update noar ti set v0='1JOWFC8D0JO534XYOW1I1UL' where id=4; -update noar tt set b1='5L40LVPW1KB313G8PJLR' where id=4; -update noar ti set b1='5L40LVPW1KB313G8PJLR' where id=4; -update noar tt set v0='GEJ1' where id=4; -update noar ti set v0='GEJ1' where id=4; -update noar tt set b2='IBNNZ62T3RF' where id=4; -update noar ti set b2='IBNNZ62T3RF' where id=4; -update noar tt set v0='SSRSP14L4MNKCGNIKKPCVH' where id=5; -update noar ti set v0='SSRSP14L4MNKCGNIKKPCVH' where id=5; -update noar tt set b0='0W699XI0368CDW5NCRIR' where id=5; -update noar ti set b0='0W699XI0368CDW5NCRIR' where id=5; -update noar tt set v0='DX9QNU3B5CLFX' where id=5; -update noar ti set v0='DX9QNU3B5CLFX' where id=5; -update noar tt set b1='CLS6I' where id=5; -update noar ti set b1='CLS6I' where id=5; -update noar tt set v0='Z6YAS7L0RCB2' where id=5; -update noar ti set v0='Z6YAS7L0RCB2' where id=5; -update noar tt set b2='9IL' where id=5; -update noar ti set b2='9IL' where id=5; -update noar tt set v0='LLOY0XHJFYB35' where id=6; -update noar ti set v0='LLOY0XHJFYB35' where id=6; -update noar tt set b0='6FUHFYTH8ZG8UIBP5L' where id=6; -update noar ti set b0='6FUHFYTH8ZG8UIBP5L' where id=6; -update noar tt set v0='EY9VVC7KVAW' where id=6; -update noar ti set v0='EY9VVC7KVAW' where id=6; -update noar tt set b1='7YWRQ0CFYB' where id=6; -update noar ti set b1='7YWRQ0CFYB' where id=6; -update noar tt set v0='XG4FGAX6HCLSS87YSKIW' where id=6; -update noar ti set v0='XG4FGAX6HCLSS87YSKIW' where id=6; -update noar tt set b2='N5VRJHXH37Q6E941O8CNTA' where id=6; -update noar ti set b2='N5VRJHXH37Q6E941O8CNTA' where id=6; -update noar tt set v0='M0RXIQ4FRB' where id=7; -update noar ti set v0='M0RXIQ4FRB' where id=7; -update noar tt set b0='MOYBU9678MWW8MXKIAVSM27' where id=7; -update noar ti set b0='MOYBU9678MWW8MXKIAVSM27' where id=7; -update noar tt set v0='R1MCR' where id=7; -update noar ti set v0='R1MCR' where id=7; -update noar tt set b1='JERUHLL069YF1RDPYZ91K0' where id=7; -update noar ti set b1='JERUHLL069YF1RDPYZ91K0' where id=7; -update noar tt set v0='6MAG1KCJ9B2UCBDJWHDGSVQK9X' where id=7; -update noar ti set v0='6MAG1KCJ9B2UCBDJWHDGSVQK9X' where id=7; -update noar tt set b2='B1QH7OVT76QXWLYKP34LHA2TZ84Q5' where id=7; -update noar ti set b2='B1QH7OVT76QXWLYKP34LHA2TZ84Q5' where id=7; -update noar tt set v0='SMELCFPT2798867DMXG' where id=8; -update noar ti set v0='SMELCFPT2798867DMXG' where id=8; -update noar tt set b0='E43X8I2HALLCB7BYPZXE08K1XJA' where id=8; -update noar ti set b0='E43X8I2HALLCB7BYPZXE08K1XJA' where id=8; -update noar tt set v0='3AN4R4IV3NQ8NWD7RS3KD5GDLRZQ72V' where id=8; -update noar ti set v0='3AN4R4IV3NQ8NWD7RS3KD5GDLRZQ72V' where id=8; -update noar tt set b1='ROWAUYQHDW8T6XJQ3' where id=8; -update noar ti set b1='ROWAUYQHDW8T6XJQ3' where id=8; -update noar tt set v0='WIRKB86IJC8' where id=8; -update noar ti set v0='WIRKB86IJC8' where id=8; -update noar tt set b2='Z35FP' where id=8; -update noar ti set b2='Z35FP' where id=8; -update noar tt set v0='D15WVM2' where id=9; -update noar ti set v0='D15WVM2' where id=9; -update noar tt set b0='ECZ3DIL1J8T65A3JW78T5TTC9VQY2R' where id=9; -update noar ti set b0='ECZ3DIL1J8T65A3JW78T5TTC9VQY2R' where id=9; -update noar tt set v0='189ZNQIKHXX6BALO6' where id=9; -update noar ti set v0='189ZNQIKHXX6BALO6' where id=9; -update noar tt set b1='WCHR8091EGNW8BTBD3NK0V' where id=9; -update noar ti set b1='WCHR8091EGNW8BTBD3NK0V' where id=9; -update noar tt set v0='W' where id=9; -update noar ti set v0='W' where id=9; -update noar tt set b2='VAZ5YWRGXYHEFPUU0' where id=9; -update noar ti set b2='VAZ5YWRGXYHEFPUU0' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 blob null, - b1 longblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='YH64NY9U' where id=1; -update noar ti set v0='YH64NY9U' where id=1; -update noar tt set b0='RR38BT' where id=1; -update noar ti set b0='RR38BT' where id=1; -update noar tt set v0='NKX6CPE163GGGVJRJSEDHS4YM0258' where id=1; -update noar ti set v0='NKX6CPE163GGGVJRJSEDHS4YM0258' where id=1; -update noar tt set b1='EU' where id=1; -update noar ti set b1='EU' where id=1; -update noar tt set v0='HLC3HNO2IKJ1UV8W' where id=1; -update noar ti set v0='HLC3HNO2IKJ1UV8W' where id=1; -update noar tt set b2='0HM1VTUJ12P4J4CTNKA6SY2' where id=1; -update noar ti set b2='0HM1VTUJ12P4J4CTNKA6SY2' where id=1; -update noar tt set v0='18ETIZ3E6F93FU84W51VHGYM6NS' where id=2; -update noar ti set v0='18ETIZ3E6F93FU84W51VHGYM6NS' where id=2; -update noar tt set b0='BILQMTVKEQ9CRPKHWMGMUEWVGLQ' where id=2; -update noar ti set b0='BILQMTVKEQ9CRPKHWMGMUEWVGLQ' where id=2; -update noar tt set v0='88A4ODH' where id=2; -update noar ti set v0='88A4ODH' where id=2; -update noar tt set b1='94MTRTJJVTC' where id=2; -update noar ti set b1='94MTRTJJVTC' where id=2; -update noar tt set v0='JFDTQMBHNLEJ42ZOGGPZ5R3HRGK3Y' where id=2; -update noar ti set v0='JFDTQMBHNLEJ42ZOGGPZ5R3HRGK3Y' where id=2; -update noar tt set b2='DURD5KT0W8H5M49VWDF2UCHZVX33LOQD' where id=2; -update noar ti set b2='DURD5KT0W8H5M49VWDF2UCHZVX33LOQD' where id=2; -update noar tt set v0='9' where id=3; -update noar ti set v0='9' where id=3; -update noar tt set b0='KBLNGYHVHAU2YLFQAN980Y' where id=3; -update noar ti set b0='KBLNGYHVHAU2YLFQAN980Y' where id=3; -update noar tt set v0='W7W6LJPCCB' where id=3; -update noar ti set v0='W7W6LJPCCB' where id=3; -update noar tt set b1='K45M1DUF0JY5R6OD' where id=3; -update noar ti set b1='K45M1DUF0JY5R6OD' where id=3; -update noar tt set v0='R5O9TPZFVTSE0YCRLG3ZND' where id=3; -update noar ti set v0='R5O9TPZFVTSE0YCRLG3ZND' where id=3; -update noar tt set b2='C' where id=3; -update noar ti set b2='C' where id=3; -update noar tt set v0='SNON9BJKO0FVNWZPL48T' where id=4; -update noar ti set v0='SNON9BJKO0FVNWZPL48T' where id=4; -update noar tt set b0='XCVG7WYCBJONSOWW4XUNFTYUW50VFBZ' where id=4; -update noar ti set b0='XCVG7WYCBJONSOWW4XUNFTYUW50VFBZ' where id=4; -update noar tt set v0='HBBQW53XQ1RR' where id=4; -update noar ti set v0='HBBQW53XQ1RR' where id=4; -update noar tt set b1='DQB8E49P1W6H9QIK' where id=4; -update noar ti set b1='DQB8E49P1W6H9QIK' where id=4; -update noar tt set v0='9Y6H2HO7YYT5QF2X8F5WR04BBSD01E' where id=4; -update noar ti set v0='9Y6H2HO7YYT5QF2X8F5WR04BBSD01E' where id=4; -update noar tt set b2='7KY5FMYCP15NQUQBP0XIOCU6SV7HK7' where id=4; -update noar ti set b2='7KY5FMYCP15NQUQBP0XIOCU6SV7HK7' where id=4; -update noar tt set v0='BBTODGJ' where id=5; -update noar ti set v0='BBTODGJ' where id=5; -update noar tt set b0='VMDK086MGTLYAOMCE' where id=5; -update noar ti set b0='VMDK086MGTLYAOMCE' where id=5; -update noar tt set v0='L7GYHHMF4R9FZ9KFIRIDZM' where id=5; -update noar ti set v0='L7GYHHMF4R9FZ9KFIRIDZM' where id=5; -update noar tt set b1='2P88KOIGR7MY' where id=5; -update noar ti set b1='2P88KOIGR7MY' where id=5; -update noar tt set v0='5O20RQK1PINZB6J' where id=5; -update noar ti set v0='5O20RQK1PINZB6J' where id=5; -update noar tt set b2='U2R9M0LSUE7DNB5MC75CS1JUJLLHAW' where id=5; -update noar ti set b2='U2R9M0LSUE7DNB5MC75CS1JUJLLHAW' where id=5; -update noar tt set v0='L58AJTUVD60C96X' where id=6; -update noar ti set v0='L58AJTUVD60C96X' where id=6; -update noar tt set b0='H10Q841WMLAFAKZ4SGETZWS131PNR' where id=6; -update noar ti set b0='H10Q841WMLAFAKZ4SGETZWS131PNR' where id=6; -update noar tt set v0='AZ5M' where id=6; -update noar ti set v0='AZ5M' where id=6; -update noar tt set b1='ENY89A15IMOFBYYSJ' where id=6; -update noar ti set b1='ENY89A15IMOFBYYSJ' where id=6; -update noar tt set v0='Z06N0WPDNNVOPI4UFOAD5D46C1TZFEJ0' where id=6; -update noar ti set v0='Z06N0WPDNNVOPI4UFOAD5D46C1TZFEJ0' where id=6; -update noar tt set b2='GT1JSITR' where id=6; -update noar ti set b2='GT1JSITR' where id=6; -update noar tt set v0='U2YUCZLNDR2YAMZSNNMUINV6S' where id=7; -update noar ti set v0='U2YUCZLNDR2YAMZSNNMUINV6S' where id=7; -update noar tt set b0='U06GT692Z346ACL' where id=7; -update noar ti set b0='U06GT692Z346ACL' where id=7; -update noar tt set v0='P42SNGTI79NF2XS2VJ196RW' where id=7; -update noar ti set v0='P42SNGTI79NF2XS2VJ196RW' where id=7; -update noar tt set b1='2K80FM' where id=7; -update noar ti set b1='2K80FM' where id=7; -update noar tt set v0='QH2JLVUJMZ6J4CTRE3SLZ2FFXZS9' where id=7; -update noar ti set v0='QH2JLVUJMZ6J4CTRE3SLZ2FFXZS9' where id=7; -update noar tt set b2='C1NSCK7HGCFX24JEXYY415ALP2IY614' where id=7; -update noar ti set b2='C1NSCK7HGCFX24JEXYY415ALP2IY614' where id=7; -update noar tt set v0='ZPV5U0HHTWT7CZJ2I92MJW6WMW35NOD' where id=8; -update noar ti set v0='ZPV5U0HHTWT7CZJ2I92MJW6WMW35NOD' where id=8; -update noar tt set b0='QWCJ' where id=8; -update noar ti set b0='QWCJ' where id=8; -update noar tt set v0='LNP5V07PTG7VIB2HOW' where id=8; -update noar ti set v0='LNP5V07PTG7VIB2HOW' where id=8; -update noar tt set b1='ZRBVWSI60R' where id=8; -update noar ti set b1='ZRBVWSI60R' where id=8; -update noar tt set v0='QMX2A4KSPQI7' where id=8; -update noar ti set v0='QMX2A4KSPQI7' where id=8; -update noar tt set b2='TQU36XQQUZHUG4JCIN9URC5KHMTQFBU' where id=8; -update noar ti set b2='TQU36XQQUZHUG4JCIN9URC5KHMTQFBU' where id=8; -update noar tt set v0='F6UHBY' where id=9; -update noar ti set v0='F6UHBY' where id=9; -update noar tt set b0='SB7' where id=9; -update noar ti set b0='SB7' where id=9; -update noar tt set v0='9' where id=9; -update noar ti set v0='9' where id=9; -update noar tt set b1='UD6QKFLGWZNM' where id=9; -update noar ti set b1='UD6QKFLGWZNM' where id=9; -update noar tt set v0='8FUULV1WBLAHJLMEXQXX3EO1L' where id=9; -update noar ti set v0='8FUULV1WBLAHJLMEXQXX3EO1L' where id=9; -update noar tt set b2='1THJ07X0RGYY6AUA2OG' where id=9; -update noar ti set b2='1THJ07X0RGYY6AUA2OG' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 blob not null, - b1 longblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='986XRLWGCM1D1BL5ARMAH610IJYX' where id=1; -update noar ti set v0='986XRLWGCM1D1BL5ARMAH610IJYX' where id=1; -update noar tt set b0='94YFTUE5N2' where id=1; -update noar ti set b0='94YFTUE5N2' where id=1; -update noar tt set v0='EY0W1H85X8ATC5GCXT' where id=1; -update noar ti set v0='EY0W1H85X8ATC5GCXT' where id=1; -update noar tt set b1='581CZZJVJ8FWX0K9KP4UHRUU' where id=1; -update noar ti set b1='581CZZJVJ8FWX0K9KP4UHRUU' where id=1; -update noar tt set v0='V69X0H76WYYW7J66AZSRJ5H4AJSDP' where id=1; -update noar ti set v0='V69X0H76WYYW7J66AZSRJ5H4AJSDP' where id=1; -update noar tt set b2='Z2F0L81QOCQWX3VXQEYQ7P97OBXCKUYN' where id=1; -update noar ti set b2='Z2F0L81QOCQWX3VXQEYQ7P97OBXCKUYN' where id=1; -update noar tt set v0='7FKHVA' where id=2; -update noar ti set v0='7FKHVA' where id=2; -update noar tt set b0='5GLF78' where id=2; -update noar ti set b0='5GLF78' where id=2; -update noar tt set v0='9TC676IJKGLAT' where id=2; -update noar ti set v0='9TC676IJKGLAT' where id=2; -update noar tt set b1='R1RZVZ8TFI0I83ELZ' where id=2; -update noar ti set b1='R1RZVZ8TFI0I83ELZ' where id=2; -update noar tt set v0='F88OJO4O4ZBWB4KD0L58ERS' where id=2; -update noar ti set v0='F88OJO4O4ZBWB4KD0L58ERS' where id=2; -update noar tt set b2='E41IAT6E6LF4' where id=2; -update noar ti set b2='E41IAT6E6LF4' where id=2; -update noar tt set v0='OPNXA' where id=3; -update noar ti set v0='OPNXA' where id=3; -update noar tt set b0='Z3SY941D3RL50F4U1S0PF8A6O7DZM' where id=3; -update noar ti set b0='Z3SY941D3RL50F4U1S0PF8A6O7DZM' where id=3; -update noar tt set v0='CJB9UP7T5GGN8' where id=3; -update noar ti set v0='CJB9UP7T5GGN8' where id=3; -update noar tt set b1='NM65Q5B' where id=3; -update noar ti set b1='NM65Q5B' where id=3; -update noar tt set v0='KCZJIBBRCB4PH67N6YOEBHQCK6Z045' where id=3; -update noar ti set v0='KCZJIBBRCB4PH67N6YOEBHQCK6Z045' where id=3; -update noar tt set b2='5KN7AH7L5V8UXMXNWPI5ML842E23E6N' where id=3; -update noar ti set b2='5KN7AH7L5V8UXMXNWPI5ML842E23E6N' where id=3; -update noar tt set v0='N7IO' where id=4; -update noar ti set v0='N7IO' where id=4; -update noar tt set b0='48VSL095DE50O9D17C9SZ' where id=4; -update noar ti set b0='48VSL095DE50O9D17C9SZ' where id=4; -update noar tt set v0='5IQZ11C15I5CNSU3R4TJ4V0N' where id=4; -update noar ti set v0='5IQZ11C15I5CNSU3R4TJ4V0N' where id=4; -update noar tt set b1='18V7R4BW21EQYS32A' where id=4; -update noar ti set b1='18V7R4BW21EQYS32A' where id=4; -update noar tt set v0='UZAT3GVSL39' where id=4; -update noar ti set v0='UZAT3GVSL39' where id=4; -update noar tt set b2='6L' where id=4; -update noar ti set b2='6L' where id=4; -update noar tt set v0='LLNGSB0QYM93HY4AT8UVLM1MWRNQGQZI' where id=5; -update noar ti set v0='LLNGSB0QYM93HY4AT8UVLM1MWRNQGQZI' where id=5; -update noar tt set b0='GLSNRVFRSRQXYVLKE1T8' where id=5; -update noar ti set b0='GLSNRVFRSRQXYVLKE1T8' where id=5; -update noar tt set v0='GRJNION06' where id=5; -update noar ti set v0='GRJNION06' where id=5; -update noar tt set b1='KE5ALKTNQ9A0CXGSLEYU81FHZ3JOPW' where id=5; -update noar ti set b1='KE5ALKTNQ9A0CXGSLEYU81FHZ3JOPW' where id=5; -update noar tt set v0='Q01OTS0PVFH9HIHQSJZQZ8' where id=5; -update noar ti set v0='Q01OTS0PVFH9HIHQSJZQZ8' where id=5; -update noar tt set b2='F26QVU1341F48MK9LYKLBFG8PSJLI' where id=5; -update noar ti set b2='F26QVU1341F48MK9LYKLBFG8PSJLI' where id=5; -update noar tt set v0='Y06YWYB3CXL' where id=6; -update noar ti set v0='Y06YWYB3CXL' where id=6; -update noar tt set b0='FSECC0IH4D29CR2TOOTPAA0AZ' where id=6; -update noar ti set b0='FSECC0IH4D29CR2TOOTPAA0AZ' where id=6; -update noar tt set v0='HTFHH265A1Q8T2XNQIVOCG9EWR' where id=6; -update noar ti set v0='HTFHH265A1Q8T2XNQIVOCG9EWR' where id=6; -update noar tt set b1='KPBI0Z' where id=6; -update noar ti set b1='KPBI0Z' where id=6; -update noar tt set v0='ST3' where id=6; -update noar ti set v0='ST3' where id=6; -update noar tt set b2='A43CB6HD82ECZFGW2BTY' where id=6; -update noar ti set b2='A43CB6HD82ECZFGW2BTY' where id=6; -update noar tt set v0='U747P33BX7' where id=7; -update noar ti set v0='U747P33BX7' where id=7; -update noar tt set b0='0DCO0MD03LPHGEZC' where id=7; -update noar ti set b0='0DCO0MD03LPHGEZC' where id=7; -update noar tt set v0='80IP1S6N5Q' where id=7; -update noar ti set v0='80IP1S6N5Q' where id=7; -update noar tt set b1='AASZOHBMBV3AV7QDC91CNR6JA6MAM' where id=7; -update noar ti set b1='AASZOHBMBV3AV7QDC91CNR6JA6MAM' where id=7; -update noar tt set v0='A2Q9E84ZH8TJPI9Y8RXD' where id=7; -update noar ti set v0='A2Q9E84ZH8TJPI9Y8RXD' where id=7; -update noar tt set b2='7W' where id=7; -update noar ti set b2='7W' where id=7; -update noar tt set v0='JW70XNS3WACV1DEN1YV' where id=8; -update noar ti set v0='JW70XNS3WACV1DEN1YV' where id=8; -update noar tt set b0='HRQU5OFHAR3DBTUF8P7X93QIPXCJ' where id=8; -update noar ti set b0='HRQU5OFHAR3DBTUF8P7X93QIPXCJ' where id=8; -update noar tt set v0='GOYJO1A2NUHTNS4MBK5FYNR' where id=8; -update noar ti set v0='GOYJO1A2NUHTNS4MBK5FYNR' where id=8; -update noar tt set b1='SJPT61WVH' where id=8; -update noar ti set b1='SJPT61WVH' where id=8; -update noar tt set v0='A6V8' where id=8; -update noar ti set v0='A6V8' where id=8; -update noar tt set b2='DM' where id=8; -update noar ti set b2='DM' where id=8; -update noar tt set v0='LLWPL' where id=9; -update noar ti set v0='LLWPL' where id=9; -update noar tt set b0='V' where id=9; -update noar ti set b0='V' where id=9; -update noar tt set v0='BRBICN7ST9C9UW3' where id=9; -update noar ti set v0='BRBICN7ST9C9UW3' where id=9; -update noar tt set b1='8XB198WG6THPO9' where id=9; -update noar ti set b1='8XB198WG6THPO9' where id=9; -update noar tt set v0='TV5FLWI261SAN9D4TBMFPQX' where id=9; -update noar ti set v0='TV5FLWI261SAN9D4TBMFPQX' where id=9; -update noar tt set b2='CIXKO76YX68RI2SZ73RF33' where id=9; -update noar ti set b2='CIXKO76YX68RI2SZ73RF33' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 blob not null, - b1 longblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='NF14KYZASFOQDEPBI3GP' where id=1; -update noar ti set v0='NF14KYZASFOQDEPBI3GP' where id=1; -update noar tt set b0='PMRRK6N3SOOJ9CJ9HDXJ5H1LDTLKJ0' where id=1; -update noar ti set b0='PMRRK6N3SOOJ9CJ9HDXJ5H1LDTLKJ0' where id=1; -update noar tt set v0='MPZIB5XF7RSN' where id=1; -update noar ti set v0='MPZIB5XF7RSN' where id=1; -update noar tt set b1='ORX2M3L1' where id=1; -update noar ti set b1='ORX2M3L1' where id=1; -update noar tt set v0='MLYP43DDF2SFHAWUC7XF73ZNVHWFDV' where id=1; -update noar ti set v0='MLYP43DDF2SFHAWUC7XF73ZNVHWFDV' where id=1; -update noar tt set b2='1SQOK28T7K4ALP440E8' where id=1; -update noar ti set b2='1SQOK28T7K4ALP440E8' where id=1; -update noar tt set v0='5E6WJRQT070BJ' where id=2; -update noar ti set v0='5E6WJRQT070BJ' where id=2; -update noar tt set b0='UMT6119EMTCMJ543017BNUC' where id=2; -update noar ti set b0='UMT6119EMTCMJ543017BNUC' where id=2; -update noar tt set v0='VSR1' where id=2; -update noar ti set v0='VSR1' where id=2; -update noar tt set b1='EWCBRHITKUFVAFYY1XQBF7PL50' where id=2; -update noar ti set b1='EWCBRHITKUFVAFYY1XQBF7PL50' where id=2; -update noar tt set v0='KWZC7B0V54ZG8LMZ7CG3WRMKKI6HLIY' where id=2; -update noar ti set v0='KWZC7B0V54ZG8LMZ7CG3WRMKKI6HLIY' where id=2; -update noar tt set b2='H6TM4KZ7KC2JF7ZRII66' where id=2; -update noar ti set b2='H6TM4KZ7KC2JF7ZRII66' where id=2; -update noar tt set v0='RGFKPI867BCFYV7GBXMULV60' where id=3; -update noar ti set v0='RGFKPI867BCFYV7GBXMULV60' where id=3; -update noar tt set b0='OZLV4KMXVIAVIRFK1AEM6' where id=3; -update noar ti set b0='OZLV4KMXVIAVIRFK1AEM6' where id=3; -update noar tt set v0='Q5' where id=3; -update noar ti set v0='Q5' where id=3; -update noar tt set b1='2KQR' where id=3; -update noar ti set b1='2KQR' where id=3; -update noar tt set v0='FB' where id=3; -update noar ti set v0='FB' where id=3; -update noar tt set b2='LEJ1Q9D8GBNJQCP3KZJMEELON9' where id=3; -update noar ti set b2='LEJ1Q9D8GBNJQCP3KZJMEELON9' where id=3; -update noar tt set v0='40' where id=4; -update noar ti set v0='40' where id=4; -update noar tt set b0='OTE' where id=4; -update noar ti set b0='OTE' where id=4; -update noar tt set v0='W6168IS' where id=4; -update noar ti set v0='W6168IS' where id=4; -update noar tt set b1='SRNZQ6' where id=4; -update noar ti set b1='SRNZQ6' where id=4; -update noar tt set v0='U29DYKN3G3ORH117R' where id=4; -update noar ti set v0='U29DYKN3G3ORH117R' where id=4; -update noar tt set b2='68AO3EQUGKQNI5NZF' where id=4; -update noar ti set b2='68AO3EQUGKQNI5NZF' where id=4; -update noar tt set v0='PAY2M9QY779U8PJ77VUBR6L4ZDX' where id=5; -update noar ti set v0='PAY2M9QY779U8PJ77VUBR6L4ZDX' where id=5; -update noar tt set b0='4MXBY5PMSU27EVP3AYAU5C' where id=5; -update noar ti set b0='4MXBY5PMSU27EVP3AYAU5C' where id=5; -update noar tt set v0='2B3F569G60IPIGZZ' where id=5; -update noar ti set v0='2B3F569G60IPIGZZ' where id=5; -update noar tt set b1='R808AHMGY278OQT87DTV97U3PNR' where id=5; -update noar ti set b1='R808AHMGY278OQT87DTV97U3PNR' where id=5; -update noar tt set v0='NXX19CEDDR5NWD6P2YN1H6G' where id=5; -update noar ti set v0='NXX19CEDDR5NWD6P2YN1H6G' where id=5; -update noar tt set b2='FISCIQ4V1TTHQ9V' where id=5; -update noar ti set b2='FISCIQ4V1TTHQ9V' where id=5; -update noar tt set v0='77U0QMWNPVQRNMKO954D' where id=6; -update noar ti set v0='77U0QMWNPVQRNMKO954D' where id=6; -update noar tt set b0='QVGAE64L' where id=6; -update noar ti set b0='QVGAE64L' where id=6; -update noar tt set v0='RORCU7BQMYBXPKFRFAF4SD0AIYQ2A9' where id=6; -update noar ti set v0='RORCU7BQMYBXPKFRFAF4SD0AIYQ2A9' where id=6; -update noar tt set b1='5DUZ2KLQ4G0D9AXJ226' where id=6; -update noar ti set b1='5DUZ2KLQ4G0D9AXJ226' where id=6; -update noar tt set v0='N5A' where id=6; -update noar ti set v0='N5A' where id=6; -update noar tt set b2='1CQ' where id=6; -update noar ti set b2='1CQ' where id=6; -update noar tt set v0='TG0YYIIUKEE1JF' where id=7; -update noar ti set v0='TG0YYIIUKEE1JF' where id=7; -update noar tt set b0='I7HZ3ITRFK6QBREAJQEAE4URCUH6' where id=7; -update noar ti set b0='I7HZ3ITRFK6QBREAJQEAE4URCUH6' where id=7; -update noar tt set v0='OS8' where id=7; -update noar ti set v0='OS8' where id=7; -update noar tt set b1='BQHYVB9PMVKKTQK0EHPVZ8A9B6P1' where id=7; -update noar ti set b1='BQHYVB9PMVKKTQK0EHPVZ8A9B6P1' where id=7; -update noar tt set v0='2QG46UC03CEZM26ONK' where id=7; -update noar ti set v0='2QG46UC03CEZM26ONK' where id=7; -update noar tt set b2='VH2NE0IC' where id=7; -update noar ti set b2='VH2NE0IC' where id=7; -update noar tt set v0='MRK95MXZRLGE9' where id=8; -update noar ti set v0='MRK95MXZRLGE9' where id=8; -update noar tt set b0='DDAP8765B9K' where id=8; -update noar ti set b0='DDAP8765B9K' where id=8; -update noar tt set v0='UORH' where id=8; -update noar ti set v0='UORH' where id=8; -update noar tt set b1='TZJZE' where id=8; -update noar ti set b1='TZJZE' where id=8; -update noar tt set v0='TM9BOE12FKT1HUVW1WCANYC6R' where id=8; -update noar ti set v0='TM9BOE12FKT1HUVW1WCANYC6R' where id=8; -update noar tt set b2='LOCVON4BRFRYHBZSGRQMVYK' where id=8; -update noar ti set b2='LOCVON4BRFRYHBZSGRQMVYK' where id=8; -update noar tt set v0='IS52FC2R8A5SRF9P3MCAP9ZZ4R15KZ6' where id=9; -update noar ti set v0='IS52FC2R8A5SRF9P3MCAP9ZZ4R15KZ6' where id=9; -update noar tt set b0='C49RXQZNGV41K1P8' where id=9; -update noar ti set b0='C49RXQZNGV41K1P8' where id=9; -update noar tt set v0='H9M83V1' where id=9; -update noar ti set v0='H9M83V1' where id=9; -update noar tt set b1='F8VYBZBZOYVRJDOV6' where id=9; -update noar ti set b1='F8VYBZBZOYVRJDOV6' where id=9; -update noar tt set v0='MNHP' where id=9; -update noar ti set v0='MNHP' where id=9; -update noar tt set b2='FZ950SFLY7LPVIF' where id=9; -update noar ti set b2='FZ950SFLY7LPVIF' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 blob null, - b1 longblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='UZ1CVBHQCR0DQ2CBR3Y3CL2RK95' where id=1; -update noar ti set v0='UZ1CVBHQCR0DQ2CBR3Y3CL2RK95' where id=1; -update noar tt set b0='UDWGQTED08Y9A7KDY3HIC' where id=1; -update noar ti set b0='UDWGQTED08Y9A7KDY3HIC' where id=1; -update noar tt set v0='DZR' where id=1; -update noar ti set v0='DZR' where id=1; -update noar tt set b1='80V3D' where id=1; -update noar ti set b1='80V3D' where id=1; -update noar tt set v0='YHZMGFJDP5Y2HJFKEMF3UARQVO2U' where id=1; -update noar ti set v0='YHZMGFJDP5Y2HJFKEMF3UARQVO2U' where id=1; -update noar tt set b2='4MXTW6U' where id=1; -update noar ti set b2='4MXTW6U' where id=1; -update noar tt set v0='C87DYG6XW3VF2GJJPEII8K1GH9IDMWW' where id=2; -update noar ti set v0='C87DYG6XW3VF2GJJPEII8K1GH9IDMWW' where id=2; -update noar tt set b0='HUIX9W8X75FOFTZ8W' where id=2; -update noar ti set b0='HUIX9W8X75FOFTZ8W' where id=2; -update noar tt set v0='VPRKVU4ME26BLRNHDYAVFKBUGXRTEH' where id=2; -update noar ti set v0='VPRKVU4ME26BLRNHDYAVFKBUGXRTEH' where id=2; -update noar tt set b1='OP0GPDHVEM3PIKBLG' where id=2; -update noar ti set b1='OP0GPDHVEM3PIKBLG' where id=2; -update noar tt set v0='ON' where id=2; -update noar ti set v0='ON' where id=2; -update noar tt set b2='FO4YRBQ4F9ZLT' where id=2; -update noar ti set b2='FO4YRBQ4F9ZLT' where id=2; -update noar tt set v0='88PC1PAAN40Z3500OEKYV' where id=3; -update noar ti set v0='88PC1PAAN40Z3500OEKYV' where id=3; -update noar tt set b0='RA50' where id=3; -update noar ti set b0='RA50' where id=3; -update noar tt set v0='FJ' where id=3; -update noar ti set v0='FJ' where id=3; -update noar tt set b1='XV2FU8MVWX1V427CB2C1PIA5NXJKLU5' where id=3; -update noar ti set b1='XV2FU8MVWX1V427CB2C1PIA5NXJKLU5' where id=3; -update noar tt set v0='TG' where id=3; -update noar ti set v0='TG' where id=3; -update noar tt set b2='3ID2846HXPE2PFYCGOY' where id=3; -update noar ti set b2='3ID2846HXPE2PFYCGOY' where id=3; -update noar tt set v0='QDJ2BB8PB4SAGJW4ZIXSIN1XNI3F6H' where id=4; -update noar ti set v0='QDJ2BB8PB4SAGJW4ZIXSIN1XNI3F6H' where id=4; -update noar tt set b0='H3JD5OH2NLRIJR' where id=4; -update noar ti set b0='H3JD5OH2NLRIJR' where id=4; -update noar tt set v0='CMO93ZLCMJOGMJWSHWO4E6IBXRQYHS' where id=4; -update noar ti set v0='CMO93ZLCMJOGMJWSHWO4E6IBXRQYHS' where id=4; -update noar tt set b1='FXSU3K6UJDGS' where id=4; -update noar ti set b1='FXSU3K6UJDGS' where id=4; -update noar tt set v0='P20IVA4UJIVUO3A2VEV963L1O' where id=4; -update noar ti set v0='P20IVA4UJIVUO3A2VEV963L1O' where id=4; -update noar tt set b2='1AEP2D7TTQ8IM0HNEI7CJ5X' where id=4; -update noar ti set b2='1AEP2D7TTQ8IM0HNEI7CJ5X' where id=4; -update noar tt set v0='OODOYH1J6JJJ' where id=5; -update noar ti set v0='OODOYH1J6JJJ' where id=5; -update noar tt set b0='34ECPVJHSZ1' where id=5; -update noar ti set b0='34ECPVJHSZ1' where id=5; -update noar tt set v0='PFPETC7II' where id=5; -update noar ti set v0='PFPETC7II' where id=5; -update noar tt set b1='A' where id=5; -update noar ti set b1='A' where id=5; -update noar tt set v0='IF9' where id=5; -update noar ti set v0='IF9' where id=5; -update noar tt set b2='W17NGDA8U54OW67WMQ7' where id=5; -update noar ti set b2='W17NGDA8U54OW67WMQ7' where id=5; -update noar tt set v0='VXMMNZ18K8AVPZUJJS2R9' where id=6; -update noar ti set v0='VXMMNZ18K8AVPZUJJS2R9' where id=6; -update noar tt set b0='3VRLHATW4C7YKWX' where id=6; -update noar ti set b0='3VRLHATW4C7YKWX' where id=6; -update noar tt set v0='00ZED43JYABT7TQ9KHJ2OQ9H46' where id=6; -update noar ti set v0='00ZED43JYABT7TQ9KHJ2OQ9H46' where id=6; -update noar tt set b1='PWZK77CBRLQ' where id=6; -update noar ti set b1='PWZK77CBRLQ' where id=6; -update noar tt set v0='NI2BLSHKSL88CMHTVZ7Y0V7QU0FCLO' where id=6; -update noar ti set v0='NI2BLSHKSL88CMHTVZ7Y0V7QU0FCLO' where id=6; -update noar tt set b2='7TKILZ03PXUFGBL22V7XV4UVSECK' where id=6; -update noar ti set b2='7TKILZ03PXUFGBL22V7XV4UVSECK' where id=6; -update noar tt set v0='EC8BXXSPAE4FVMFP6FMZL5EQ693' where id=7; -update noar ti set v0='EC8BXXSPAE4FVMFP6FMZL5EQ693' where id=7; -update noar tt set b0='NUD22EOW7' where id=7; -update noar ti set b0='NUD22EOW7' where id=7; -update noar tt set v0='NR8V4ZWO8UGWM9BP2C6NP4BW85HT06' where id=7; -update noar ti set v0='NR8V4ZWO8UGWM9BP2C6NP4BW85HT06' where id=7; -update noar tt set b1='YJW7Z28E1UM56D1E4J16GOI89' where id=7; -update noar ti set b1='YJW7Z28E1UM56D1E4J16GOI89' where id=7; -update noar tt set v0='4IYVS2QFA63ORI7EOJRA8JKZ' where id=7; -update noar ti set v0='4IYVS2QFA63ORI7EOJRA8JKZ' where id=7; -update noar tt set b2='4VJO' where id=7; -update noar ti set b2='4VJO' where id=7; -update noar tt set v0='B9ISV' where id=8; -update noar ti set v0='B9ISV' where id=8; -update noar tt set b0='WUP152F0E8SVXPNZVXALJ1GG6L' where id=8; -update noar ti set b0='WUP152F0E8SVXPNZVXALJ1GG6L' where id=8; -update noar tt set v0='4YO2AP' where id=8; -update noar ti set v0='4YO2AP' where id=8; -update noar tt set b1='9CHK2M1KX7ZITS' where id=8; -update noar ti set b1='9CHK2M1KX7ZITS' where id=8; -update noar tt set v0='QXTPBHB5VRO7IPNSI3R6QZZPV' where id=8; -update noar ti set v0='QXTPBHB5VRO7IPNSI3R6QZZPV' where id=8; -update noar tt set b2='PR0B7VTPNTFD' where id=8; -update noar ti set b2='PR0B7VTPNTFD' where id=8; -update noar tt set v0='16QSW0UOQX5FOOEW93ACEK' where id=9; -update noar ti set v0='16QSW0UOQX5FOOEW93ACEK' where id=9; -update noar tt set b0='Q26VLWZF5I8GFKK1X7Q7JOF0CX' where id=9; -update noar ti set b0='Q26VLWZF5I8GFKK1X7Q7JOF0CX' where id=9; -update noar tt set v0='QV15ZUHFXN' where id=9; -update noar ti set v0='QV15ZUHFXN' where id=9; -update noar tt set b1='9F0RKNDWAWM2USCYDBSX6R7S0E2GYE' where id=9; -update noar ti set b1='9F0RKNDWAWM2USCYDBSX6R7S0E2GYE' where id=9; -update noar tt set v0='T7IDSPSL4V6B3GP95KTV' where id=9; -update noar ti set v0='T7IDSPSL4V6B3GP95KTV' where id=9; -update noar tt set b2='73XOD2SOBDKRO' where id=9; -update noar ti set b2='73XOD2SOBDKRO' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 blob null, - b1 longblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='7B5M' where id=1; -update noar ti set v0='7B5M' where id=1; -update noar tt set b0='O3VMLM1IOLKRXHB6YR' where id=1; -update noar ti set b0='O3VMLM1IOLKRXHB6YR' where id=1; -update noar tt set v0='7' where id=1; -update noar ti set v0='7' where id=1; -update noar tt set b1='H5YOI42039L' where id=1; -update noar ti set b1='H5YOI42039L' where id=1; -update noar tt set v0='Q0KCY3V5PZKXLE3ABP2XYGBMB3G2' where id=1; -update noar ti set v0='Q0KCY3V5PZKXLE3ABP2XYGBMB3G2' where id=1; -update noar tt set b2='LII19QR4QVIXCRM6Y68QNW' where id=1; -update noar ti set b2='LII19QR4QVIXCRM6Y68QNW' where id=1; -update noar tt set v0='IB4VQQ5IHZ1PZG0TF5' where id=2; -update noar ti set v0='IB4VQQ5IHZ1PZG0TF5' where id=2; -update noar tt set b0='T48X5PGD66V9FFYFND40' where id=2; -update noar ti set b0='T48X5PGD66V9FFYFND40' where id=2; -update noar tt set v0='LY5JEFNJ' where id=2; -update noar ti set v0='LY5JEFNJ' where id=2; -update noar tt set b1='WRH7HD4W' where id=2; -update noar ti set b1='WRH7HD4W' where id=2; -update noar tt set v0='9E5DFALSVPOLCX0TFP0NNP4H1D' where id=2; -update noar ti set v0='9E5DFALSVPOLCX0TFP0NNP4H1D' where id=2; -update noar tt set b2='EPC1R3NW84GHX' where id=2; -update noar ti set b2='EPC1R3NW84GHX' where id=2; -update noar tt set v0='K6F' where id=3; -update noar ti set v0='K6F' where id=3; -update noar tt set b0='2RF1AIYPTHYOF' where id=3; -update noar ti set b0='2RF1AIYPTHYOF' where id=3; -update noar tt set v0='Q9XBSFD4V6UUB0SXYOT6UD92BV55SAT' where id=3; -update noar ti set v0='Q9XBSFD4V6UUB0SXYOT6UD92BV55SAT' where id=3; -update noar tt set b1='SLQGDAOHNBAU1ZBBO1V6B3OS5' where id=3; -update noar ti set b1='SLQGDAOHNBAU1ZBBO1V6B3OS5' where id=3; -update noar tt set v0='8UKOKCAOY14S3G' where id=3; -update noar ti set v0='8UKOKCAOY14S3G' where id=3; -update noar tt set b2='1T' where id=3; -update noar ti set b2='1T' where id=3; -update noar tt set v0='M4HZBQBYVJO4C50LOL589FQHDQC8' where id=4; -update noar ti set v0='M4HZBQBYVJO4C50LOL589FQHDQC8' where id=4; -update noar tt set b0='VRVK48N0ANA7UFKT3HCII' where id=4; -update noar ti set b0='VRVK48N0ANA7UFKT3HCII' where id=4; -update noar tt set v0='95M1KDITRLP7A' where id=4; -update noar ti set v0='95M1KDITRLP7A' where id=4; -update noar tt set b1='G48AFM62I1' where id=4; -update noar ti set b1='G48AFM62I1' where id=4; -update noar tt set v0='U6HX9XAIMD' where id=4; -update noar ti set v0='U6HX9XAIMD' where id=4; -update noar tt set b2='O7PIPJG8XDTO3YVE4EPCAX6W' where id=4; -update noar ti set b2='O7PIPJG8XDTO3YVE4EPCAX6W' where id=4; -update noar tt set v0='48ID6' where id=5; -update noar ti set v0='48ID6' where id=5; -update noar tt set b0='COR' where id=5; -update noar ti set b0='COR' where id=5; -update noar tt set v0='8HU6F72OMO05' where id=5; -update noar ti set v0='8HU6F72OMO05' where id=5; -update noar tt set b1='FLGUJQK9ASFC' where id=5; -update noar ti set b1='FLGUJQK9ASFC' where id=5; -update noar tt set v0='40P86CUT189CP7TE' where id=5; -update noar ti set v0='40P86CUT189CP7TE' where id=5; -update noar tt set b2='LGFNZAIR8LJIS7LC37DMIHKZ80' where id=5; -update noar ti set b2='LGFNZAIR8LJIS7LC37DMIHKZ80' where id=5; -update noar tt set v0='V7C7NTC4W0BC' where id=6; -update noar ti set v0='V7C7NTC4W0BC' where id=6; -update noar tt set b0='OYKSVO9NEWFJ26W8U8QLFX5C46372' where id=6; -update noar ti set b0='OYKSVO9NEWFJ26W8U8QLFX5C46372' where id=6; -update noar tt set v0='COPWZREUYZQ' where id=6; -update noar ti set v0='COPWZREUYZQ' where id=6; -update noar tt set b1='1HW44' where id=6; -update noar ti set b1='1HW44' where id=6; -update noar tt set v0='ZFC' where id=6; -update noar ti set v0='ZFC' where id=6; -update noar tt set b2='W4FM32AKO5TCZNCZF9AUIEK0K2GR93Z6' where id=6; -update noar ti set b2='W4FM32AKO5TCZNCZF9AUIEK0K2GR93Z6' where id=6; -update noar tt set v0='O6P' where id=7; -update noar ti set v0='O6P' where id=7; -update noar tt set b0='2P87YJFWGBFNO' where id=7; -update noar ti set b0='2P87YJFWGBFNO' where id=7; -update noar tt set v0='5TCOQ6' where id=7; -update noar ti set v0='5TCOQ6' where id=7; -update noar tt set b1='EQGN6KQ7LB32244S9IRH2B' where id=7; -update noar ti set b1='EQGN6KQ7LB32244S9IRH2B' where id=7; -update noar tt set v0='8F9D3HNKKNTF1A01KLF' where id=7; -update noar ti set v0='8F9D3HNKKNTF1A01KLF' where id=7; -update noar tt set b2='H2UVXZG2BIDUCO0SPR2GC3X02F' where id=7; -update noar ti set b2='H2UVXZG2BIDUCO0SPR2GC3X02F' where id=7; -update noar tt set v0='B9MGWQ07VMW' where id=8; -update noar ti set v0='B9MGWQ07VMW' where id=8; -update noar tt set b0='GTAW7WT4MUB3X2GM88P1ONXK' where id=8; -update noar ti set b0='GTAW7WT4MUB3X2GM88P1ONXK' where id=8; -update noar tt set v0='GSZM' where id=8; -update noar ti set v0='GSZM' where id=8; -update noar tt set b1='5AMUAGW913HUXKV' where id=8; -update noar ti set b1='5AMUAGW913HUXKV' where id=8; -update noar tt set v0='GDNWZHPWE1QAK' where id=8; -update noar ti set v0='GDNWZHPWE1QAK' where id=8; -update noar tt set b2='R494CL4' where id=8; -update noar ti set b2='R494CL4' where id=8; -update noar tt set v0='A6CELHPA' where id=9; -update noar ti set v0='A6CELHPA' where id=9; -update noar tt set b0='55Y2X' where id=9; -update noar ti set b0='55Y2X' where id=9; -update noar tt set v0='NMJCIE8BLY0FPQPZ' where id=9; -update noar ti set v0='NMJCIE8BLY0FPQPZ' where id=9; -update noar tt set b1='9SVDGNAE' where id=9; -update noar ti set b1='9SVDGNAE' where id=9; -update noar tt set v0='K0F7PCPNNEP1J52TM7Z9DG55VIWU' where id=9; -update noar ti set v0='K0F7PCPNNEP1J52TM7Z9DG55VIWU' where id=9; -update noar tt set b2='85Y' where id=9; -update noar ti set b2='85Y' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 blob not null, - b1 longblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='86YH72RKNJYSA6ML9YGT5Q0U06O' where id=1; -update noar ti set v0='86YH72RKNJYSA6ML9YGT5Q0U06O' where id=1; -update noar tt set b0='AH91L768A5KKMNMJ4CK67DWN' where id=1; -update noar ti set b0='AH91L768A5KKMNMJ4CK67DWN' where id=1; -update noar tt set v0='D66UE788RIII2W0542AI1UY48IR94P' where id=1; -update noar ti set v0='D66UE788RIII2W0542AI1UY48IR94P' where id=1; -update noar tt set b1='XQGICMLKNHPQ' where id=1; -update noar ti set b1='XQGICMLKNHPQ' where id=1; -update noar tt set v0='LXUWX3KBD5CDR64WJ6TDYUVFZ4CY7D15' where id=1; -update noar ti set v0='LXUWX3KBD5CDR64WJ6TDYUVFZ4CY7D15' where id=1; -update noar tt set b2='WCYRC0XPTXEM3FEASSD7BHM7L' where id=1; -update noar ti set b2='WCYRC0XPTXEM3FEASSD7BHM7L' where id=1; -update noar tt set v0='270E7AP7YX9W1SH6C8V60WS2Q1' where id=2; -update noar ti set v0='270E7AP7YX9W1SH6C8V60WS2Q1' where id=2; -update noar tt set b0='WM11FNV6OTLZVGCHO5R0D9L' where id=2; -update noar ti set b0='WM11FNV6OTLZVGCHO5R0D9L' where id=2; -update noar tt set v0='C21MCP7ARXRTLA8S' where id=2; -update noar ti set v0='C21MCP7ARXRTLA8S' where id=2; -update noar tt set b1='E3O0' where id=2; -update noar ti set b1='E3O0' where id=2; -update noar tt set v0='76XWRWI04VKDH2TOGZ9' where id=2; -update noar ti set v0='76XWRWI04VKDH2TOGZ9' where id=2; -update noar tt set b2='DFZ3GCUWRSHNLQD3' where id=2; -update noar ti set b2='DFZ3GCUWRSHNLQD3' where id=2; -update noar tt set v0='M9XZL1XRHKE1AZ913A' where id=3; -update noar ti set v0='M9XZL1XRHKE1AZ913A' where id=3; -update noar tt set b0='19GJPEUNNO' where id=3; -update noar ti set b0='19GJPEUNNO' where id=3; -update noar tt set v0='RIVRRSEKSTRQZU7VGK3265KBNETD' where id=3; -update noar ti set v0='RIVRRSEKSTRQZU7VGK3265KBNETD' where id=3; -update noar tt set b1='11F6FOODKFNNMMBE8BOZFUM6F' where id=3; -update noar ti set b1='11F6FOODKFNNMMBE8BOZFUM6F' where id=3; -update noar tt set v0='VRBMZ6APJJ4U2HY' where id=3; -update noar ti set v0='VRBMZ6APJJ4U2HY' where id=3; -update noar tt set b2='7' where id=3; -update noar ti set b2='7' where id=3; -update noar tt set v0='N2PAFJ2MZ7RHO81YW9804SPAB3XX' where id=4; -update noar ti set v0='N2PAFJ2MZ7RHO81YW9804SPAB3XX' where id=4; -update noar tt set b0='PDY8SKSEN1XEC2K96' where id=4; -update noar ti set b0='PDY8SKSEN1XEC2K96' where id=4; -update noar tt set v0='P3TKDD4HRXQ4VC0EWJC5' where id=4; -update noar ti set v0='P3TKDD4HRXQ4VC0EWJC5' where id=4; -update noar tt set b1='QGO9O' where id=4; -update noar ti set b1='QGO9O' where id=4; -update noar tt set v0='ETX98A2ZCD' where id=4; -update noar ti set v0='ETX98A2ZCD' where id=4; -update noar tt set b2='JE3VVV20VHTQ' where id=4; -update noar ti set b2='JE3VVV20VHTQ' where id=4; -update noar tt set v0='6L9' where id=5; -update noar ti set v0='6L9' where id=5; -update noar tt set b0='1B9HKLBZ7AW4' where id=5; -update noar ti set b0='1B9HKLBZ7AW4' where id=5; -update noar tt set v0='XVGYLFLR22NQ98LRALD5PXPZ8' where id=5; -update noar ti set v0='XVGYLFLR22NQ98LRALD5PXPZ8' where id=5; -update noar tt set b1='4L47QY' where id=5; -update noar ti set b1='4L47QY' where id=5; -update noar tt set v0='BOMR8S' where id=5; -update noar ti set v0='BOMR8S' where id=5; -update noar tt set b2='F0IZUPH5JMTB7M4H44WT' where id=5; -update noar ti set b2='F0IZUPH5JMTB7M4H44WT' where id=5; -update noar tt set v0='3XV4BLXT1ASGXFS0IR14' where id=6; -update noar ti set v0='3XV4BLXT1ASGXFS0IR14' where id=6; -update noar tt set b0='NQKNL94JUMLJ' where id=6; -update noar ti set b0='NQKNL94JUMLJ' where id=6; -update noar tt set v0='BRQ4F0HF5E83DX9Y80PO0V2CY' where id=6; -update noar ti set v0='BRQ4F0HF5E83DX9Y80PO0V2CY' where id=6; -update noar tt set b1='GMFXSRRA1TKLLP' where id=6; -update noar ti set b1='GMFXSRRA1TKLLP' where id=6; -update noar tt set v0='CP2BGCGWZKMYY88RIOOY' where id=6; -update noar ti set v0='CP2BGCGWZKMYY88RIOOY' where id=6; -update noar tt set b2='X31H0BB0' where id=6; -update noar ti set b2='X31H0BB0' where id=6; -update noar tt set v0='YXZB6G9AFBQNAOSSFYQIZRYTK' where id=7; -update noar ti set v0='YXZB6G9AFBQNAOSSFYQIZRYTK' where id=7; -update noar tt set b0='3PL2CPH0T27UNUC986KT0F5B' where id=7; -update noar ti set b0='3PL2CPH0T27UNUC986KT0F5B' where id=7; -update noar tt set v0='EJ550841' where id=7; -update noar ti set v0='EJ550841' where id=7; -update noar tt set b1='AV4TF5M3NQYKV0I31L7V0' where id=7; -update noar ti set b1='AV4TF5M3NQYKV0I31L7V0' where id=7; -update noar tt set v0='W2APVHF6CJZEVW0N7ZW9ARZTDO1ES' where id=7; -update noar ti set v0='W2APVHF6CJZEVW0N7ZW9ARZTDO1ES' where id=7; -update noar tt set b2='PMGD7UWY' where id=7; -update noar ti set b2='PMGD7UWY' where id=7; -update noar tt set v0='FV4EGB1BQQHU8X5SIOPEMKURI' where id=8; -update noar ti set v0='FV4EGB1BQQHU8X5SIOPEMKURI' where id=8; -update noar tt set b0='LZ1QP2OQJ3U4BLDI09' where id=8; -update noar ti set b0='LZ1QP2OQJ3U4BLDI09' where id=8; -update noar tt set v0='73HMUGCDZHYS4OBY3ZC7DEK2R7ZM' where id=8; -update noar ti set v0='73HMUGCDZHYS4OBY3ZC7DEK2R7ZM' where id=8; -update noar tt set b1='8NVXJ1TORGCO' where id=8; -update noar ti set b1='8NVXJ1TORGCO' where id=8; -update noar tt set v0='WXKFM7H' where id=8; -update noar ti set v0='WXKFM7H' where id=8; -update noar tt set b2='2GBZE5Q7V5O4LP66M5AN' where id=8; -update noar ti set b2='2GBZE5Q7V5O4LP66M5AN' where id=8; -update noar tt set v0='Y2242KN9THL2KV0ALATKBAWBKKB' where id=9; -update noar ti set v0='Y2242KN9THL2KV0ALATKBAWBKKB' where id=9; -update noar tt set b0='G8QEN2EJ5LWKHXF36JQ9PC9G' where id=9; -update noar ti set b0='G8QEN2EJ5LWKHXF36JQ9PC9G' where id=9; -update noar tt set v0='5UFCMRM0IJ2OTDXFVEDJ5HNH6NTU' where id=9; -update noar ti set v0='5UFCMRM0IJ2OTDXFVEDJ5HNH6NTU' where id=9; -update noar tt set b1='LFN9H1HDL4JA9OI2PHBSM2M0DRX' where id=9; -update noar ti set b1='LFN9H1HDL4JA9OI2PHBSM2M0DRX' where id=9; -update noar tt set v0='T7FKCFNSJ3GLTXM5' where id=9; -update noar ti set v0='T7FKCFNSJ3GLTXM5' where id=9; -update noar tt set b2='6IE9YDK6IH15L1' where id=9; -update noar ti set b2='6IE9YDK6IH15L1' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 blob not null, - b1 longblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='KZSXHZ71NWO' where id=1; -update noar ti set v0='KZSXHZ71NWO' where id=1; -update noar tt set b0='O4Q3CNNWCHYKFK7' where id=1; -update noar ti set b0='O4Q3CNNWCHYKFK7' where id=1; -update noar tt set v0='XFJ14XGHYGXTDELKGS' where id=1; -update noar ti set v0='XFJ14XGHYGXTDELKGS' where id=1; -update noar tt set b1='1WID9SLJIPBX8JWY7QNC2D5' where id=1; -update noar ti set b1='1WID9SLJIPBX8JWY7QNC2D5' where id=1; -update noar tt set v0='G7IANSTI86HBBDTK29C' where id=1; -update noar ti set v0='G7IANSTI86HBBDTK29C' where id=1; -update noar tt set b2='5EU63CHMBDC2OGA9GLJNA78UKJB9U6VS' where id=1; -update noar ti set b2='5EU63CHMBDC2OGA9GLJNA78UKJB9U6VS' where id=1; -update noar tt set v0='WP4VXHSTQCVO6D2KQ' where id=2; -update noar ti set v0='WP4VXHSTQCVO6D2KQ' where id=2; -update noar tt set b0='KOK4P4NXT78PDP' where id=2; -update noar ti set b0='KOK4P4NXT78PDP' where id=2; -update noar tt set v0='9H77ENRPFIWWM' where id=2; -update noar ti set v0='9H77ENRPFIWWM' where id=2; -update noar tt set b1='I1109OT3OUN' where id=2; -update noar ti set b1='I1109OT3OUN' where id=2; -update noar tt set v0='HBE3X7PJCDMV' where id=2; -update noar ti set v0='HBE3X7PJCDMV' where id=2; -update noar tt set b2='WO4UMOUUBZAKMLE3EC' where id=2; -update noar ti set b2='WO4UMOUUBZAKMLE3EC' where id=2; -update noar tt set v0='60L6XL1VCJ7GG84FJDU3K0X86F' where id=3; -update noar ti set v0='60L6XL1VCJ7GG84FJDU3K0X86F' where id=3; -update noar tt set b0='5OBVORTZSQOS3D' where id=3; -update noar ti set b0='5OBVORTZSQOS3D' where id=3; -update noar tt set v0='2W' where id=3; -update noar ti set v0='2W' where id=3; -update noar tt set b1='NHWIZ8JH00NNJSLE74BYN34GAOU2VY' where id=3; -update noar ti set b1='NHWIZ8JH00NNJSLE74BYN34GAOU2VY' where id=3; -update noar tt set v0='737M61PEL6RD9ZWPQNI8V563T59OL1' where id=3; -update noar ti set v0='737M61PEL6RD9ZWPQNI8V563T59OL1' where id=3; -update noar tt set b2='SSB5DKUXWFXYP28ENXEY9Y1XCB' where id=3; -update noar ti set b2='SSB5DKUXWFXYP28ENXEY9Y1XCB' where id=3; -update noar tt set v0='U' where id=4; -update noar ti set v0='U' where id=4; -update noar tt set b0='2P46UM' where id=4; -update noar ti set b0='2P46UM' where id=4; -update noar tt set v0='ISAD2KT39J84IBV40KIUFXG7SIXWDDSO' where id=4; -update noar ti set v0='ISAD2KT39J84IBV40KIUFXG7SIXWDDSO' where id=4; -update noar tt set b1='4EQ3ZK9QO5T7Z4GD9I7' where id=4; -update noar ti set b1='4EQ3ZK9QO5T7Z4GD9I7' where id=4; -update noar tt set v0='9EKLBE01TYW9D7O36TYA' where id=4; -update noar ti set v0='9EKLBE01TYW9D7O36TYA' where id=4; -update noar tt set b2='M3B38YGM4IZ4VOLNG8UTPJ6PEGZ' where id=4; -update noar ti set b2='M3B38YGM4IZ4VOLNG8UTPJ6PEGZ' where id=4; -update noar tt set v0='9SAO240F7KVUS' where id=5; -update noar ti set v0='9SAO240F7KVUS' where id=5; -update noar tt set b0='GQS81M5Y37V8RHN92U39EFAWECOZ' where id=5; -update noar ti set b0='GQS81M5Y37V8RHN92U39EFAWECOZ' where id=5; -update noar tt set v0='K5OQ2UTDPAYCU9O11OEPOP0D96K0DPC' where id=5; -update noar ti set v0='K5OQ2UTDPAYCU9O11OEPOP0D96K0DPC' where id=5; -update noar tt set b1='YQ' where id=5; -update noar ti set b1='YQ' where id=5; -update noar tt set v0='H21IGF1VYH42GSB2Y' where id=5; -update noar ti set v0='H21IGF1VYH42GSB2Y' where id=5; -update noar tt set b2='FR0D2X8463N' where id=5; -update noar ti set b2='FR0D2X8463N' where id=5; -update noar tt set v0='0VD69QUB1FCA1E8MVIY9G4QMIP7' where id=6; -update noar ti set v0='0VD69QUB1FCA1E8MVIY9G4QMIP7' where id=6; -update noar tt set b0='FZT5HEJPJ3RUXVCUA5QE' where id=6; -update noar ti set b0='FZT5HEJPJ3RUXVCUA5QE' where id=6; -update noar tt set v0='KOZ4A0K5LHD5TSRE' where id=6; -update noar ti set v0='KOZ4A0K5LHD5TSRE' where id=6; -update noar tt set b1='6QRH1ULSTN3M3SI99' where id=6; -update noar ti set b1='6QRH1ULSTN3M3SI99' where id=6; -update noar tt set v0='UBQQDQV1YII74F3CYCGOH913SE' where id=6; -update noar ti set v0='UBQQDQV1YII74F3CYCGOH913SE' where id=6; -update noar tt set b2='XX5NITXUHRLQNF' where id=6; -update noar ti set b2='XX5NITXUHRLQNF' where id=6; -update noar tt set v0='V6MG34TI9SZ6526OZGGM7SFKLKH' where id=7; -update noar ti set v0='V6MG34TI9SZ6526OZGGM7SFKLKH' where id=7; -update noar tt set b0='7VNIN2F26FCS67L85DCBRY1QK89K' where id=7; -update noar ti set b0='7VNIN2F26FCS67L85DCBRY1QK89K' where id=7; -update noar tt set v0='JICMLWLDU44NLYHS82S8WE47TI' where id=7; -update noar ti set v0='JICMLWLDU44NLYHS82S8WE47TI' where id=7; -update noar tt set b1='30ZFKKDIAGF' where id=7; -update noar ti set b1='30ZFKKDIAGF' where id=7; -update noar tt set v0='C95F7H251FS' where id=7; -update noar ti set v0='C95F7H251FS' where id=7; -update noar tt set b2='ARSJRXM0WJBE4U9E7YJTGD' where id=7; -update noar ti set b2='ARSJRXM0WJBE4U9E7YJTGD' where id=7; -update noar tt set v0='0GCMNRT9' where id=8; -update noar ti set v0='0GCMNRT9' where id=8; -update noar tt set b0='UR9HJ72DEAZ' where id=8; -update noar ti set b0='UR9HJ72DEAZ' where id=8; -update noar tt set v0='9F81SUFATO80' where id=8; -update noar ti set v0='9F81SUFATO80' where id=8; -update noar tt set b1='0HY01VHG' where id=8; -update noar ti set b1='0HY01VHG' where id=8; -update noar tt set v0='EKM' where id=8; -update noar ti set v0='EKM' where id=8; -update noar tt set b2='ZY' where id=8; -update noar ti set b2='ZY' where id=8; -update noar tt set v0='E5V8XS74LUB3VU' where id=9; -update noar ti set v0='E5V8XS74LUB3VU' where id=9; -update noar tt set b0='HQVPDBMP62J7B1Y4SFUGSS' where id=9; -update noar ti set b0='HQVPDBMP62J7B1Y4SFUGSS' where id=9; -update noar tt set v0='W8F7S4275SEI843RSSGINC5C2XTU5AP4' where id=9; -update noar ti set v0='W8F7S4275SEI843RSSGINC5C2XTU5AP4' where id=9; -update noar tt set b1='7JQOUNL3TRVQS1' where id=9; -update noar ti set b1='7JQOUNL3TRVQS1' where id=9; -update noar tt set v0='QFSFALZLQO83RKM' where id=9; -update noar ti set v0='QFSFALZLQO83RKM' where id=9; -update noar tt set b2='TU1365Z1PBHUI4K70DH0Y0' where id=9; -update noar ti set b2='TU1365Z1PBHUI4K70DH0Y0' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 blob null, - b1 longblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='KJ6MKP049PDG' where id=1; -update noar ti set v0='KJ6MKP049PDG' where id=1; -update noar tt set b0='69E1' where id=1; -update noar ti set b0='69E1' where id=1; -update noar tt set v0='DV6D9' where id=1; -update noar ti set v0='DV6D9' where id=1; -update noar tt set b1='A7R18OFT4719POYYKW' where id=1; -update noar ti set b1='A7R18OFT4719POYYKW' where id=1; -update noar tt set v0='YMEJKYXVKIRY1A' where id=1; -update noar ti set v0='YMEJKYXVKIRY1A' where id=1; -update noar tt set b2='K7FMF' where id=1; -update noar ti set b2='K7FMF' where id=1; -update noar tt set v0='JPXGG54S' where id=2; -update noar ti set v0='JPXGG54S' where id=2; -update noar tt set b0='WCAKXTLZ7624V' where id=2; -update noar ti set b0='WCAKXTLZ7624V' where id=2; -update noar tt set v0='SXQMLSI2N05N460U8NU84U80VVBK' where id=2; -update noar ti set v0='SXQMLSI2N05N460U8NU84U80VVBK' where id=2; -update noar tt set b1='MI7CCMVG2V4IBQZEPEAAKY' where id=2; -update noar ti set b1='MI7CCMVG2V4IBQZEPEAAKY' where id=2; -update noar tt set v0='S7YRJFHRZ63FTZ0UZ783NGWJ0Q0Q0' where id=2; -update noar ti set v0='S7YRJFHRZ63FTZ0UZ783NGWJ0Q0Q0' where id=2; -update noar tt set b2='UZRX94PCNHOR' where id=2; -update noar ti set b2='UZRX94PCNHOR' where id=2; -update noar tt set v0='O3K8E2KKBO22MJRM4' where id=3; -update noar ti set v0='O3K8E2KKBO22MJRM4' where id=3; -update noar tt set b0='TD3' where id=3; -update noar ti set b0='TD3' where id=3; -update noar tt set v0='N5GZATTF8VZBWVJ' where id=3; -update noar ti set v0='N5GZATTF8VZBWVJ' where id=3; -update noar tt set b1='LN2GBCLZEUN' where id=3; -update noar ti set b1='LN2GBCLZEUN' where id=3; -update noar tt set v0='3ZGAWSEZANCV4ZJ8ZAOU4428KAC2P' where id=3; -update noar ti set v0='3ZGAWSEZANCV4ZJ8ZAOU4428KAC2P' where id=3; -update noar tt set b2='LUR7M75DNR5ER4DNVBTAO8TDCAMHHT' where id=3; -update noar ti set b2='LUR7M75DNR5ER4DNVBTAO8TDCAMHHT' where id=3; -update noar tt set v0='V3WN4JUFIS4YMZT' where id=4; -update noar ti set v0='V3WN4JUFIS4YMZT' where id=4; -update noar tt set b0='Y37CSDSCBCMPM0RU5Y0MZUFRIQAN5V7P' where id=4; -update noar ti set b0='Y37CSDSCBCMPM0RU5Y0MZUFRIQAN5V7P' where id=4; -update noar tt set v0='JBIX2PLJAED9KBHWUUV9P3XP' where id=4; -update noar ti set v0='JBIX2PLJAED9KBHWUUV9P3XP' where id=4; -update noar tt set b1='P5GI' where id=4; -update noar ti set b1='P5GI' where id=4; -update noar tt set v0='WTKW7E45N2I0IMRBRNYQ9CK' where id=4; -update noar ti set v0='WTKW7E45N2I0IMRBRNYQ9CK' where id=4; -update noar tt set b2='CFBBHF' where id=4; -update noar ti set b2='CFBBHF' where id=4; -update noar tt set v0='GBN9OHZHHTLSAD4LMVVX5Y' where id=5; -update noar ti set v0='GBN9OHZHHTLSAD4LMVVX5Y' where id=5; -update noar tt set b0='K' where id=5; -update noar ti set b0='K' where id=5; -update noar tt set v0='47MBG75Q6GPW' where id=5; -update noar ti set v0='47MBG75Q6GPW' where id=5; -update noar tt set b1='PLNZFEXBT1' where id=5; -update noar ti set b1='PLNZFEXBT1' where id=5; -update noar tt set v0='6VW2EPWR8I' where id=5; -update noar ti set v0='6VW2EPWR8I' where id=5; -update noar tt set b2='9AGKTT6LR5QZ5X904PBGC85JMPU' where id=5; -update noar ti set b2='9AGKTT6LR5QZ5X904PBGC85JMPU' where id=5; -update noar tt set v0='YOJH0FLKQD9R' where id=6; -update noar ti set v0='YOJH0FLKQD9R' where id=6; -update noar tt set b0='O194CF9VIOHO3Q0I77ZE3J7FP' where id=6; -update noar ti set b0='O194CF9VIOHO3Q0I77ZE3J7FP' where id=6; -update noar tt set v0='4IFEK' where id=6; -update noar ti set v0='4IFEK' where id=6; -update noar tt set b1='OS2PDRO36I4ILQ' where id=6; -update noar ti set b1='OS2PDRO36I4ILQ' where id=6; -update noar tt set v0='HPB0H' where id=6; -update noar ti set v0='HPB0H' where id=6; -update noar tt set b2='PNITSXSGGIN' where id=6; -update noar ti set b2='PNITSXSGGIN' where id=6; -update noar tt set v0='J6WDDAP8UQBMPRPPB6AZRYJFM2' where id=7; -update noar ti set v0='J6WDDAP8UQBMPRPPB6AZRYJFM2' where id=7; -update noar tt set b0='2O25QBVE05XVIWGLE2QTR2536RWDA7OZ' where id=7; -update noar ti set b0='2O25QBVE05XVIWGLE2QTR2536RWDA7OZ' where id=7; -update noar tt set v0='0PZ0UK' where id=7; -update noar ti set v0='0PZ0UK' where id=7; -update noar tt set b1='6FK9XGEIP42YHUT2UF5QAE1F387U' where id=7; -update noar ti set b1='6FK9XGEIP42YHUT2UF5QAE1F387U' where id=7; -update noar tt set v0='EJCASXYO2JUCUAKROAG068LW04910HSQ' where id=7; -update noar ti set v0='EJCASXYO2JUCUAKROAG068LW04910HSQ' where id=7; -update noar tt set b2='NH096JE59N1PA1K8INC8D0370B6I' where id=7; -update noar ti set b2='NH096JE59N1PA1K8INC8D0370B6I' where id=7; -update noar tt set v0='K3EKNTGDBRA2OQ4OQRRVMHLW3UC7V2C' where id=8; -update noar ti set v0='K3EKNTGDBRA2OQ4OQRRVMHLW3UC7V2C' where id=8; -update noar tt set b0='ESL93' where id=8; -update noar ti set b0='ESL93' where id=8; -update noar tt set v0='ZKNB1221LBQ7X05NJPMY44VCHASW' where id=8; -update noar ti set v0='ZKNB1221LBQ7X05NJPMY44VCHASW' where id=8; -update noar tt set b1='G' where id=8; -update noar ti set b1='G' where id=8; -update noar tt set v0='H0D1UL1806J9QRNDVNB84XXP2600IQ' where id=8; -update noar ti set v0='H0D1UL1806J9QRNDVNB84XXP2600IQ' where id=8; -update noar tt set b2='8MUF' where id=8; -update noar ti set b2='8MUF' where id=8; -update noar tt set v0='W19KL15S2QHVW280KXP0' where id=9; -update noar ti set v0='W19KL15S2QHVW280KXP0' where id=9; -update noar tt set b0='0ET2YLFPVAMTVLAQ4EWT8QLQWT7DHEF' where id=9; -update noar ti set b0='0ET2YLFPVAMTVLAQ4EWT8QLQWT7DHEF' where id=9; -update noar tt set v0='KFLNKTMFCJAUPEHWDRZT' where id=9; -update noar ti set v0='KFLNKTMFCJAUPEHWDRZT' where id=9; -update noar tt set b1='8A9K' where id=9; -update noar ti set b1='8A9K' where id=9; -update noar tt set v0='89YIIRVZ241T2KIMYFV422AS5JW3' where id=9; -update noar ti set v0='89YIIRVZ241T2KIMYFV422AS5JW3' where id=9; -update noar tt set b2='I2W9N7WP7FEH' where id=9; -update noar ti set b2='I2W9N7WP7FEH' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 blob null, - b1 longblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='ITO' where id=1; -update noar ti set v0='ITO' where id=1; -update noar tt set b0='9BP' where id=1; -update noar ti set b0='9BP' where id=1; -update noar tt set v0='MB4R269GI0573NGI4QADOC6F9TDN3' where id=1; -update noar ti set v0='MB4R269GI0573NGI4QADOC6F9TDN3' where id=1; -update noar tt set b1='8BI9TK0' where id=1; -update noar ti set b1='8BI9TK0' where id=1; -update noar tt set v0='SW1R1ZJ23K6RP3OUV4CTHT' where id=1; -update noar ti set v0='SW1R1ZJ23K6RP3OUV4CTHT' where id=1; -update noar tt set b2='TTKLVH6ABGT8' where id=1; -update noar ti set b2='TTKLVH6ABGT8' where id=1; -update noar tt set v0='RUW83BI5QOF9EQ2H7F0G' where id=2; -update noar ti set v0='RUW83BI5QOF9EQ2H7F0G' where id=2; -update noar tt set b0='LG5EBGS6DPOXBWH7MK0Z2ZN4' where id=2; -update noar ti set b0='LG5EBGS6DPOXBWH7MK0Z2ZN4' where id=2; -update noar tt set v0='EN9ZXMYC' where id=2; -update noar ti set v0='EN9ZXMYC' where id=2; -update noar tt set b1='8488T5G82EB59QH6' where id=2; -update noar ti set b1='8488T5G82EB59QH6' where id=2; -update noar tt set v0='BSZ0895XG' where id=2; -update noar ti set v0='BSZ0895XG' where id=2; -update noar tt set b2='HAEQ7TZ2GL0C' where id=2; -update noar ti set b2='HAEQ7TZ2GL0C' where id=2; -update noar tt set v0='VD20G96JY68XKVM3KX49ET3NK6' where id=3; -update noar ti set v0='VD20G96JY68XKVM3KX49ET3NK6' where id=3; -update noar tt set b0='SWF4F624MVDSM8H0OA' where id=3; -update noar ti set b0='SWF4F624MVDSM8H0OA' where id=3; -update noar tt set v0='YROHDKQYDFGP0JH5FWPGKE02W' where id=3; -update noar ti set v0='YROHDKQYDFGP0JH5FWPGKE02W' where id=3; -update noar tt set b1='8ZXJ34RTK995TK' where id=3; -update noar ti set b1='8ZXJ34RTK995TK' where id=3; -update noar tt set v0='ZS4EH099NBP53P3SNZYZZG8V1IOIH' where id=3; -update noar ti set v0='ZS4EH099NBP53P3SNZYZZG8V1IOIH' where id=3; -update noar tt set b2='R7CYSNEVJ3D' where id=3; -update noar ti set b2='R7CYSNEVJ3D' where id=3; -update noar tt set v0='JK7IGN97' where id=4; -update noar ti set v0='JK7IGN97' where id=4; -update noar tt set b0='YZFDMVIBS7FU3MQ11MJ7S' where id=4; -update noar ti set b0='YZFDMVIBS7FU3MQ11MJ7S' where id=4; -update noar tt set v0='F063BPTT4UF2JO' where id=4; -update noar ti set v0='F063BPTT4UF2JO' where id=4; -update noar tt set b1='U9A35HW6MO5VIG79M01LELB' where id=4; -update noar ti set b1='U9A35HW6MO5VIG79M01LELB' where id=4; -update noar tt set v0='D28GTGR7HCKIBJW1ILZM' where id=4; -update noar ti set v0='D28GTGR7HCKIBJW1ILZM' where id=4; -update noar tt set b2='CQWH0W' where id=4; -update noar ti set b2='CQWH0W' where id=4; -update noar tt set v0='8KNCJML44FP6K13VYHKFPXLOQWCNYAY' where id=5; -update noar ti set v0='8KNCJML44FP6K13VYHKFPXLOQWCNYAY' where id=5; -update noar tt set b0='8VN1QDSICJTI8ZV82Z' where id=5; -update noar ti set b0='8VN1QDSICJTI8ZV82Z' where id=5; -update noar tt set v0='6F4NC9M7OA0KH41KFTZ' where id=5; -update noar ti set v0='6F4NC9M7OA0KH41KFTZ' where id=5; -update noar tt set b1='B931DFW' where id=5; -update noar ti set b1='B931DFW' where id=5; -update noar tt set v0='U' where id=5; -update noar ti set v0='U' where id=5; -update noar tt set b2='U34BAYBBB7RQ135QT9BXOWI' where id=5; -update noar ti set b2='U34BAYBBB7RQ135QT9BXOWI' where id=5; -update noar tt set v0='FJ0VFJ041Y6FZ3F6EKCG4497' where id=6; -update noar ti set v0='FJ0VFJ041Y6FZ3F6EKCG4497' where id=6; -update noar tt set b0='2YRAK04HQ4BXW84R1ZXEII5SD05BS0' where id=6; -update noar ti set b0='2YRAK04HQ4BXW84R1ZXEII5SD05BS0' where id=6; -update noar tt set v0='D1VWA61L2NCMUSQ9595LYU20M4H7' where id=6; -update noar ti set v0='D1VWA61L2NCMUSQ9595LYU20M4H7' where id=6; -update noar tt set b1='5LRBSCLHRSIEZZ12ZDG09ZTK6S3V9F' where id=6; -update noar ti set b1='5LRBSCLHRSIEZZ12ZDG09ZTK6S3V9F' where id=6; -update noar tt set v0='845QXJ0IC6COX' where id=6; -update noar ti set v0='845QXJ0IC6COX' where id=6; -update noar tt set b2='4JWH5WI4J73LH3IAIBND1S' where id=6; -update noar ti set b2='4JWH5WI4J73LH3IAIBND1S' where id=6; -update noar tt set v0='YWC3JJ3SDLISFJBR9U2IRC32FI2D' where id=7; -update noar ti set v0='YWC3JJ3SDLISFJBR9U2IRC32FI2D' where id=7; -update noar tt set b0='7DEVU7RA4P5CHEMGP5JX1B7UHP89P39' where id=7; -update noar ti set b0='7DEVU7RA4P5CHEMGP5JX1B7UHP89P39' where id=7; -update noar tt set v0='V4SRVJAOCJ69' where id=7; -update noar ti set v0='V4SRVJAOCJ69' where id=7; -update noar tt set b1='I77SO2B8M7I51' where id=7; -update noar ti set b1='I77SO2B8M7I51' where id=7; -update noar tt set v0='WKQ4F33J16DZSV3HQFTS' where id=7; -update noar ti set v0='WKQ4F33J16DZSV3HQFTS' where id=7; -update noar tt set b2='HP22Y62C9LZSQDBWP8SJRZ6LY' where id=7; -update noar ti set b2='HP22Y62C9LZSQDBWP8SJRZ6LY' where id=7; -update noar tt set v0='MUZGIV8K81FZFE3YPLL155HW3M' where id=8; -update noar ti set v0='MUZGIV8K81FZFE3YPLL155HW3M' where id=8; -update noar tt set b0='VVQA' where id=8; -update noar ti set b0='VVQA' where id=8; -update noar tt set v0='W0QBLTI0H1MR' where id=8; -update noar ti set v0='W0QBLTI0H1MR' where id=8; -update noar tt set b1='4DY3M9KOQO60C2AEIMWP4RCBPVIIX14B' where id=8; -update noar ti set b1='4DY3M9KOQO60C2AEIMWP4RCBPVIIX14B' where id=8; -update noar tt set v0='F7DPBVSLGTU1YL009S' where id=8; -update noar ti set v0='F7DPBVSLGTU1YL009S' where id=8; -update noar tt set b2='9JVFALJV78AGGJNW07UMS' where id=8; -update noar ti set b2='9JVFALJV78AGGJNW07UMS' where id=8; -update noar tt set v0='FUS026C7I5S3UKFK1CATTD2R7P' where id=9; -update noar ti set v0='FUS026C7I5S3UKFK1CATTD2R7P' where id=9; -update noar tt set b0='NPZS3' where id=9; -update noar ti set b0='NPZS3' where id=9; -update noar tt set v0='R9FCY75S47KUMB8M1GW3RUMJ' where id=9; -update noar ti set v0='R9FCY75S47KUMB8M1GW3RUMJ' where id=9; -update noar tt set b1='NW96JBMM62X5LAB25EG17MRUXTULC' where id=9; -update noar ti set b1='NW96JBMM62X5LAB25EG17MRUXTULC' where id=9; -update noar tt set v0='LKSTEKPKMYGATFBJT2IK7CCQW' where id=9; -update noar ti set v0='LKSTEKPKMYGATFBJT2IK7CCQW' where id=9; -update noar tt set b2='QTB' where id=9; -update noar ti set b2='QTB' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 blob not null, - b1 longblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='U' where id=1; -update noar ti set v0='U' where id=1; -update noar tt set b0='MF3BLQ' where id=1; -update noar ti set b0='MF3BLQ' where id=1; -update noar tt set v0='JWT2OX' where id=1; -update noar ti set v0='JWT2OX' where id=1; -update noar tt set b1='P5K5QTRYV1237KMOAL7E1W1' where id=1; -update noar ti set b1='P5K5QTRYV1237KMOAL7E1W1' where id=1; -update noar tt set v0='2' where id=1; -update noar ti set v0='2' where id=1; -update noar tt set b2='X7P5EQWGF2QRWJ' where id=1; -update noar ti set b2='X7P5EQWGF2QRWJ' where id=1; -update noar tt set v0='3J3R13MW2L8KRX93UYO3' where id=2; -update noar ti set v0='3J3R13MW2L8KRX93UYO3' where id=2; -update noar tt set b0='EVVVE6QL6F6PYN0NR5U1KF' where id=2; -update noar ti set b0='EVVVE6QL6F6PYN0NR5U1KF' where id=2; -update noar tt set v0='BIR8QY7YS9RG38846YKR7' where id=2; -update noar ti set v0='BIR8QY7YS9RG38846YKR7' where id=2; -update noar tt set b1='G6PV5ZVNKLPJ2T7IN5XCM' where id=2; -update noar ti set b1='G6PV5ZVNKLPJ2T7IN5XCM' where id=2; -update noar tt set v0='G3N7JHA25VY4DQEIY4G' where id=2; -update noar ti set v0='G3N7JHA25VY4DQEIY4G' where id=2; -update noar tt set b2='3ODMSDN0EFH5T080' where id=2; -update noar ti set b2='3ODMSDN0EFH5T080' where id=2; -update noar tt set v0='8ADM6SBIDBQD5LY2YFI8PU43GG2B' where id=3; -update noar ti set v0='8ADM6SBIDBQD5LY2YFI8PU43GG2B' where id=3; -update noar tt set b0='W' where id=3; -update noar ti set b0='W' where id=3; -update noar tt set v0='S5G90H3E1V2AT24XL2IMCK08AQC48W' where id=3; -update noar ti set v0='S5G90H3E1V2AT24XL2IMCK08AQC48W' where id=3; -update noar tt set b1='JLED5SW6YJZL97' where id=3; -update noar ti set b1='JLED5SW6YJZL97' where id=3; -update noar tt set v0='WL7E77ZWPWMKKM9L4G' where id=3; -update noar ti set v0='WL7E77ZWPWMKKM9L4G' where id=3; -update noar tt set b2='RIL3LWRO7U851QCHZHFUMASGOUOGQ' where id=3; -update noar ti set b2='RIL3LWRO7U851QCHZHFUMASGOUOGQ' where id=3; -update noar tt set v0='9EQY3QU1' where id=4; -update noar ti set v0='9EQY3QU1' where id=4; -update noar tt set b0='H9OSPWTQKIA1PDC96' where id=4; -update noar ti set b0='H9OSPWTQKIA1PDC96' where id=4; -update noar tt set v0='U8KU66FHTYBNFOF3' where id=4; -update noar ti set v0='U8KU66FHTYBNFOF3' where id=4; -update noar tt set b1='Y52LWJP' where id=4; -update noar ti set b1='Y52LWJP' where id=4; -update noar tt set v0='CN' where id=4; -update noar ti set v0='CN' where id=4; -update noar tt set b2='JFYBRI1UTWBEM344C6TY4172' where id=4; -update noar ti set b2='JFYBRI1UTWBEM344C6TY4172' where id=4; -update noar tt set v0='GPNOZCYQ5Q0' where id=5; -update noar ti set v0='GPNOZCYQ5Q0' where id=5; -update noar tt set b0='P2EKX' where id=5; -update noar ti set b0='P2EKX' where id=5; -update noar tt set v0='4L90NIQ7D364VV21JXSEPHOE' where id=5; -update noar ti set v0='4L90NIQ7D364VV21JXSEPHOE' where id=5; -update noar tt set b1='XZDFIGCCN0CO6ABW6BY8J5DUS7F4B' where id=5; -update noar ti set b1='XZDFIGCCN0CO6ABW6BY8J5DUS7F4B' where id=5; -update noar tt set v0='K62ZQCPLYBRSQ7QOG71H' where id=5; -update noar ti set v0='K62ZQCPLYBRSQ7QOG71H' where id=5; -update noar tt set b2='AWI' where id=5; -update noar ti set b2='AWI' where id=5; -update noar tt set v0='8457IMW1E4BP0H4WC52SECB1BATN61' where id=6; -update noar ti set v0='8457IMW1E4BP0H4WC52SECB1BATN61' where id=6; -update noar tt set b0='PI5YYKCQE3HBP70BJIXNE8ZZDTP6F' where id=6; -update noar ti set b0='PI5YYKCQE3HBP70BJIXNE8ZZDTP6F' where id=6; -update noar tt set v0='BXMLD0HEBZC3T' where id=6; -update noar ti set v0='BXMLD0HEBZC3T' where id=6; -update noar tt set b1='PSL98PMQ2W1RW2KCHW43GDFG7ST' where id=6; -update noar ti set b1='PSL98PMQ2W1RW2KCHW43GDFG7ST' where id=6; -update noar tt set v0='LC83UXCADG6MLMLXM9SKH5P' where id=6; -update noar ti set v0='LC83UXCADG6MLMLXM9SKH5P' where id=6; -update noar tt set b2='BHXS0HL90GQG22Y9HND16MAN9PO7ZZE2' where id=6; -update noar ti set b2='BHXS0HL90GQG22Y9HND16MAN9PO7ZZE2' where id=6; -update noar tt set v0='P3OKH912FY11UDU12' where id=7; -update noar ti set v0='P3OKH912FY11UDU12' where id=7; -update noar tt set b0='OCETZULD1T6U158J2W8JFN' where id=7; -update noar ti set b0='OCETZULD1T6U158J2W8JFN' where id=7; -update noar tt set v0='E5NI0FUGU' where id=7; -update noar ti set v0='E5NI0FUGU' where id=7; -update noar tt set b1='LVE8KFLUX3PZZ7PD6LOQFFACP61X1QL1' where id=7; -update noar ti set b1='LVE8KFLUX3PZZ7PD6LOQFFACP61X1QL1' where id=7; -update noar tt set v0='I0D5Z7I0F7206QTT7AEGMODTJQ' where id=7; -update noar ti set v0='I0D5Z7I0F7206QTT7AEGMODTJQ' where id=7; -update noar tt set b2='0MD' where id=7; -update noar ti set b2='0MD' where id=7; -update noar tt set v0='ZN' where id=8; -update noar ti set v0='ZN' where id=8; -update noar tt set b0='RD0D9ITUK1' where id=8; -update noar ti set b0='RD0D9ITUK1' where id=8; -update noar tt set v0='EX5C2HATSE86' where id=8; -update noar ti set v0='EX5C2HATSE86' where id=8; -update noar tt set b1='C80UATLXF' where id=8; -update noar ti set b1='C80UATLXF' where id=8; -update noar tt set v0='5' where id=8; -update noar ti set v0='5' where id=8; -update noar tt set b2='A0SRJ89IN43O6OGGL0BDJWY7TM4' where id=8; -update noar ti set b2='A0SRJ89IN43O6OGGL0BDJWY7TM4' where id=8; -update noar tt set v0='KZ8H5583AL' where id=9; -update noar ti set v0='KZ8H5583AL' where id=9; -update noar tt set b0='FU7WY7JUN' where id=9; -update noar ti set b0='FU7WY7JUN' where id=9; -update noar tt set v0='IZXZOPQK9MWBTF5' where id=9; -update noar ti set v0='IZXZOPQK9MWBTF5' where id=9; -update noar tt set b1='DR7HY0KTDLO' where id=9; -update noar ti set b1='DR7HY0KTDLO' where id=9; -update noar tt set v0='0I9VUGMMTV' where id=9; -update noar ti set v0='0I9VUGMMTV' where id=9; -update noar tt set b2='MIEU' where id=9; -update noar ti set b2='MIEU' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 blob not null, - b1 longblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='OGF8S4CV8UIBRJK' where id=1; -update noar ti set v0='OGF8S4CV8UIBRJK' where id=1; -update noar tt set b0='T75D7OOZ' where id=1; -update noar ti set b0='T75D7OOZ' where id=1; -update noar tt set v0='0' where id=1; -update noar ti set v0='0' where id=1; -update noar tt set b1='54MVG5ZSZ47TNF1VKZP6PFJY' where id=1; -update noar ti set b1='54MVG5ZSZ47TNF1VKZP6PFJY' where id=1; -update noar tt set v0='LKGMQHR701SPB' where id=1; -update noar ti set v0='LKGMQHR701SPB' where id=1; -update noar tt set b2='UOMNKV4466VEG' where id=1; -update noar ti set b2='UOMNKV4466VEG' where id=1; -update noar tt set v0='4D7XOLA' where id=2; -update noar ti set v0='4D7XOLA' where id=2; -update noar tt set b0='4H3JTB8R7ZXTI9XRH9KIC77I' where id=2; -update noar ti set b0='4H3JTB8R7ZXTI9XRH9KIC77I' where id=2; -update noar tt set v0='QQP9ELND7B1R7FH64GBV6K34' where id=2; -update noar ti set v0='QQP9ELND7B1R7FH64GBV6K34' where id=2; -update noar tt set b1='SU6YJ9QL1R' where id=2; -update noar ti set b1='SU6YJ9QL1R' where id=2; -update noar tt set v0='20LT58RSVJPTNZ9L2QNLT38057' where id=2; -update noar ti set v0='20LT58RSVJPTNZ9L2QNLT38057' where id=2; -update noar tt set b2='KCDW11AHUJU99' where id=2; -update noar ti set b2='KCDW11AHUJU99' where id=2; -update noar tt set v0='B76FR2JXLI90MXGMA6UE0VL4U1Y621MA' where id=3; -update noar ti set v0='B76FR2JXLI90MXGMA6UE0VL4U1Y621MA' where id=3; -update noar tt set b0='7YV1RQ849H' where id=3; -update noar ti set b0='7YV1RQ849H' where id=3; -update noar tt set v0='UI49S' where id=3; -update noar ti set v0='UI49S' where id=3; -update noar tt set b1='YC5QVA2F6T5' where id=3; -update noar ti set b1='YC5QVA2F6T5' where id=3; -update noar tt set v0='NC8C7AX2H4ZAYGBX3JUWUSV3L' where id=3; -update noar ti set v0='NC8C7AX2H4ZAYGBX3JUWUSV3L' where id=3; -update noar tt set b2='J5YO511MXMXB4SRVPW' where id=3; -update noar ti set b2='J5YO511MXMXB4SRVPW' where id=3; -update noar tt set v0='4ZCHSIJ2' where id=4; -update noar ti set v0='4ZCHSIJ2' where id=4; -update noar tt set b0='MD8OP1AW8ZZ3HO1UHB' where id=4; -update noar ti set b0='MD8OP1AW8ZZ3HO1UHB' where id=4; -update noar tt set v0='BKY9CV22I4UCFXJRITOV' where id=4; -update noar ti set v0='BKY9CV22I4UCFXJRITOV' where id=4; -update noar tt set b1='L' where id=4; -update noar ti set b1='L' where id=4; -update noar tt set v0='HBSTXGNYOQY3EVXM63' where id=4; -update noar ti set v0='HBSTXGNYOQY3EVXM63' where id=4; -update noar tt set b2='YUBMWEXZAPSUGY6X12' where id=4; -update noar ti set b2='YUBMWEXZAPSUGY6X12' where id=4; -update noar tt set v0='ZB0D47VRUH5VCAD76HD48TB2AMHI76' where id=5; -update noar ti set v0='ZB0D47VRUH5VCAD76HD48TB2AMHI76' where id=5; -update noar tt set b0='HAPDHQP179B1G5D4H1CYQ' where id=5; -update noar ti set b0='HAPDHQP179B1G5D4H1CYQ' where id=5; -update noar tt set v0='JB8D1I22C178MZ0G0UIM958N3K0G1P1O' where id=5; -update noar ti set v0='JB8D1I22C178MZ0G0UIM958N3K0G1P1O' where id=5; -update noar tt set b1='T' where id=5; -update noar ti set b1='T' where id=5; -update noar tt set v0='6EKFPRM8M9BFVRAW2UG850' where id=5; -update noar ti set v0='6EKFPRM8M9BFVRAW2UG850' where id=5; -update noar tt set b2='XO0RKEEC2194N48B88UV0SHF' where id=5; -update noar ti set b2='XO0RKEEC2194N48B88UV0SHF' where id=5; -update noar tt set v0='TZADOULMPNJ3JHANPBZFH140SXPGE' where id=6; -update noar ti set v0='TZADOULMPNJ3JHANPBZFH140SXPGE' where id=6; -update noar tt set b0='GWA04JMONGKEFW6VAQPXM8CR2XAJ5' where id=6; -update noar ti set b0='GWA04JMONGKEFW6VAQPXM8CR2XAJ5' where id=6; -update noar tt set v0='V777PS2EAODUP2EF7DCUJTS1HJ0IE' where id=6; -update noar ti set v0='V777PS2EAODUP2EF7DCUJTS1HJ0IE' where id=6; -update noar tt set b1='ZD5OA2VP' where id=6; -update noar ti set b1='ZD5OA2VP' where id=6; -update noar tt set v0='7J3IUXJUV9MFO62ZB6B3SNEPJ' where id=6; -update noar ti set v0='7J3IUXJUV9MFO62ZB6B3SNEPJ' where id=6; -update noar tt set b2='1LOSMXMR6BA9LQOJ1CM92DQO' where id=6; -update noar ti set b2='1LOSMXMR6BA9LQOJ1CM92DQO' where id=6; -update noar tt set v0='BUFAD8RDVAR0FO59LTE9DCUSP0WX5' where id=7; -update noar ti set v0='BUFAD8RDVAR0FO59LTE9DCUSP0WX5' where id=7; -update noar tt set b0='ISJCA21RVKMIK7' where id=7; -update noar ti set b0='ISJCA21RVKMIK7' where id=7; -update noar tt set v0='LKX7T6EOL47TSXMLU' where id=7; -update noar ti set v0='LKX7T6EOL47TSXMLU' where id=7; -update noar tt set b1='CNWSS0YLD72AHOXZT3O5LQNU' where id=7; -update noar ti set b1='CNWSS0YLD72AHOXZT3O5LQNU' where id=7; -update noar tt set v0='O5AP3YS' where id=7; -update noar ti set v0='O5AP3YS' where id=7; -update noar tt set b2='6RIZ71MVLAMRKLIF2RB6H' where id=7; -update noar ti set b2='6RIZ71MVLAMRKLIF2RB6H' where id=7; -update noar tt set v0='CFUNXTGHZDYB0G7PCFLEFTXS5N4R8O8V' where id=8; -update noar ti set v0='CFUNXTGHZDYB0G7PCFLEFTXS5N4R8O8V' where id=8; -update noar tt set b0='6HCL' where id=8; -update noar ti set b0='6HCL' where id=8; -update noar tt set v0='NUMG46G4WTUBB3P9HCUHP8GNL8XXG' where id=8; -update noar ti set v0='NUMG46G4WTUBB3P9HCUHP8GNL8XXG' where id=8; -update noar tt set b1='ZPM9N1IV4WTNOS282QCRSF' where id=8; -update noar ti set b1='ZPM9N1IV4WTNOS282QCRSF' where id=8; -update noar tt set v0='5BLXWZSJOT2AKBETM8EW1FS' where id=8; -update noar ti set v0='5BLXWZSJOT2AKBETM8EW1FS' where id=8; -update noar tt set b2='RMHV8S61' where id=8; -update noar ti set b2='RMHV8S61' where id=8; -update noar tt set v0='JH8XGGF60CPEFHLXSCN1MTWK2TMONWN6' where id=9; -update noar ti set v0='JH8XGGF60CPEFHLXSCN1MTWK2TMONWN6' where id=9; -update noar tt set b0='5BXCHY1RZN2NB5ITHP63ZCKRWUZ77K' where id=9; -update noar ti set b0='5BXCHY1RZN2NB5ITHP63ZCKRWUZ77K' where id=9; -update noar tt set v0='0YY1UJT64QAY6CCR1XP5L' where id=9; -update noar ti set v0='0YY1UJT64QAY6CCR1XP5L' where id=9; -update noar tt set b1='K60G2FL9BID4XERZD9' where id=9; -update noar ti set b1='K60G2FL9BID4XERZD9' where id=9; -update noar tt set v0='P2YZQZ5PK4' where id=9; -update noar ti set v0='P2YZQZ5PK4' where id=9; -update noar tt set b2='2R5M9BAC' where id=9; -update noar ti set b2='2R5M9BAC' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 blob null, - b1 longblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='E9X1ZQFL2' where id=1; -update noar ti set v0='E9X1ZQFL2' where id=1; -update noar tt set b0='K13V8XFTH67JPBHZHA1JZ4S70' where id=1; -update noar ti set b0='K13V8XFTH67JPBHZHA1JZ4S70' where id=1; -update noar tt set v0='BC2TSN3ZLQGRNQ89' where id=1; -update noar ti set v0='BC2TSN3ZLQGRNQ89' where id=1; -update noar tt set b1='MV1WVXUZ4' where id=1; -update noar ti set b1='MV1WVXUZ4' where id=1; -update noar tt set v0='8S7SPB0UZ6E7O8J97P1' where id=1; -update noar ti set v0='8S7SPB0UZ6E7O8J97P1' where id=1; -update noar tt set b2='U2B4FY7YHF9B8Z9LETFI3VWPNKI' where id=1; -update noar ti set b2='U2B4FY7YHF9B8Z9LETFI3VWPNKI' where id=1; -update noar tt set v0='8RFOEHPEAE3HKABL49Z' where id=2; -update noar ti set v0='8RFOEHPEAE3HKABL49Z' where id=2; -update noar tt set b0='OZC6BF4U6' where id=2; -update noar ti set b0='OZC6BF4U6' where id=2; -update noar tt set v0='X3' where id=2; -update noar ti set v0='X3' where id=2; -update noar tt set b1='RQ3' where id=2; -update noar ti set b1='RQ3' where id=2; -update noar tt set v0='KAEM91UTZXD' where id=2; -update noar ti set v0='KAEM91UTZXD' where id=2; -update noar tt set b2='I3KX1PRUPRHPC0K8L4YMS4P' where id=2; -update noar ti set b2='I3KX1PRUPRHPC0K8L4YMS4P' where id=2; -update noar tt set v0='XEB7BGPTDDG1QSXC' where id=3; -update noar ti set v0='XEB7BGPTDDG1QSXC' where id=3; -update noar tt set b0='M1D' where id=3; -update noar ti set b0='M1D' where id=3; -update noar tt set v0='SRY2GIS7X8Y' where id=3; -update noar ti set v0='SRY2GIS7X8Y' where id=3; -update noar tt set b1='FLVIO6Q9WGWIV3RSZEXIXMZM8JB3IX' where id=3; -update noar ti set b1='FLVIO6Q9WGWIV3RSZEXIXMZM8JB3IX' where id=3; -update noar tt set v0='7C2PA3SU6W' where id=3; -update noar ti set v0='7C2PA3SU6W' where id=3; -update noar tt set b2='49A3HWOHHXIR2ZWGNAR8B' where id=3; -update noar ti set b2='49A3HWOHHXIR2ZWGNAR8B' where id=3; -update noar tt set v0='8Y0E7HVQD9Y5GBAZ9MC96EQMEUD3EI0P' where id=4; -update noar ti set v0='8Y0E7HVQD9Y5GBAZ9MC96EQMEUD3EI0P' where id=4; -update noar tt set b0='JUDRBMNXN' where id=4; -update noar ti set b0='JUDRBMNXN' where id=4; -update noar tt set v0='91JERZ0R3D6XTIZ7ALYF225X4' where id=4; -update noar ti set v0='91JERZ0R3D6XTIZ7ALYF225X4' where id=4; -update noar tt set b1='T1FOP' where id=4; -update noar ti set b1='T1FOP' where id=4; -update noar tt set v0='ZAU14NLPWR6NZ3JB58UO61Y' where id=4; -update noar ti set v0='ZAU14NLPWR6NZ3JB58UO61Y' where id=4; -update noar tt set b2='YRMD384H78IH85G7ARJOYGB69F5I4' where id=4; -update noar ti set b2='YRMD384H78IH85G7ARJOYGB69F5I4' where id=4; -update noar tt set v0='LAKZ9TGOI88Q81AYJMN3LBJMX0EBG' where id=5; -update noar ti set v0='LAKZ9TGOI88Q81AYJMN3LBJMX0EBG' where id=5; -update noar tt set b0='2WLZ0RW1JUJ' where id=5; -update noar ti set b0='2WLZ0RW1JUJ' where id=5; -update noar tt set v0='AT4FECL92TKPAG6V' where id=5; -update noar ti set v0='AT4FECL92TKPAG6V' where id=5; -update noar tt set b1='Z' where id=5; -update noar ti set b1='Z' where id=5; -update noar tt set v0='T7W76QACTXQ' where id=5; -update noar ti set v0='T7W76QACTXQ' where id=5; -update noar tt set b2='RY46816SDX7FWQO5L4VG' where id=5; -update noar ti set b2='RY46816SDX7FWQO5L4VG' where id=5; -update noar tt set v0='9XSQZ1SDT8EU1G91' where id=6; -update noar ti set v0='9XSQZ1SDT8EU1G91' where id=6; -update noar tt set b0='0QY' where id=6; -update noar ti set b0='0QY' where id=6; -update noar tt set v0='J17FR0PTJ3GKCHFGGSGDJ' where id=6; -update noar ti set v0='J17FR0PTJ3GKCHFGGSGDJ' where id=6; -update noar tt set b1='J4XJJAV6I0ARM4A7FTWKD6LM1RVZRU' where id=6; -update noar ti set b1='J4XJJAV6I0ARM4A7FTWKD6LM1RVZRU' where id=6; -update noar tt set v0='FDWQ8MAM2V3RSHVBK2S7' where id=6; -update noar ti set v0='FDWQ8MAM2V3RSHVBK2S7' where id=6; -update noar tt set b2='VEYC7DH9CERWMKEE6PQLUC8SH6GZE' where id=6; -update noar ti set b2='VEYC7DH9CERWMKEE6PQLUC8SH6GZE' where id=6; -update noar tt set v0='CB431YJL5LGPYE1MWMLKCE3PR27QF8CI' where id=7; -update noar ti set v0='CB431YJL5LGPYE1MWMLKCE3PR27QF8CI' where id=7; -update noar tt set b0='OKDSCH277STM4' where id=7; -update noar ti set b0='OKDSCH277STM4' where id=7; -update noar tt set v0='ZE6AEHLU9EFAZSD' where id=7; -update noar ti set v0='ZE6AEHLU9EFAZSD' where id=7; -update noar tt set b1='D8AOOGBV' where id=7; -update noar ti set b1='D8AOOGBV' where id=7; -update noar tt set v0='ZMJP' where id=7; -update noar ti set v0='ZMJP' where id=7; -update noar tt set b2='C8QY8GALNS8Q7ZL1' where id=7; -update noar ti set b2='C8QY8GALNS8Q7ZL1' where id=7; -update noar tt set v0='ZXEQE9' where id=8; -update noar ti set v0='ZXEQE9' where id=8; -update noar tt set b0='T5OEYUDWJ6D5RVWEIOPY' where id=8; -update noar ti set b0='T5OEYUDWJ6D5RVWEIOPY' where id=8; -update noar tt set v0='BKOYQQBWMXEUV' where id=8; -update noar ti set v0='BKOYQQBWMXEUV' where id=8; -update noar tt set b1='H2' where id=8; -update noar ti set b1='H2' where id=8; -update noar tt set v0='AXHD6459QSE6GS25N' where id=8; -update noar ti set v0='AXHD6459QSE6GS25N' where id=8; -update noar tt set b2='IF21AE5KO8UK' where id=8; -update noar ti set b2='IF21AE5KO8UK' where id=8; -update noar tt set v0='DLF9A7AEMET1SDX9RSCF0ZTDYMU1' where id=9; -update noar ti set v0='DLF9A7AEMET1SDX9RSCF0ZTDYMU1' where id=9; -update noar tt set b0='W' where id=9; -update noar ti set b0='W' where id=9; -update noar tt set v0='JL' where id=9; -update noar ti set v0='JL' where id=9; -update noar tt set b1='1XEQ1KLE6O3QPFV' where id=9; -update noar ti set b1='1XEQ1KLE6O3QPFV' where id=9; -update noar tt set v0='ETWY5VUTTJKFXVVO4' where id=9; -update noar ti set v0='ETWY5VUTTJKFXVVO4' where id=9; -update noar tt set b2='KSSX637' where id=9; -update noar ti set b2='KSSX637' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 blob null, - b1 longblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='EGDA2KDOIQ' where id=1; -update noar ti set v0='EGDA2KDOIQ' where id=1; -update noar tt set b0='V2KCA84AYWGABRL9JGASZ3SW3VIF1' where id=1; -update noar ti set b0='V2KCA84AYWGABRL9JGASZ3SW3VIF1' where id=1; -update noar tt set v0='KX9PPE8F377DTF7O1MT40SVSP7' where id=1; -update noar ti set v0='KX9PPE8F377DTF7O1MT40SVSP7' where id=1; -update noar tt set b1='DCHU2GD0WY7W6427J02Z8B130' where id=1; -update noar ti set b1='DCHU2GD0WY7W6427J02Z8B130' where id=1; -update noar tt set v0='0NRM5JSTS5' where id=1; -update noar ti set v0='0NRM5JSTS5' where id=1; -update noar tt set b2='VA66JSY9BYP43' where id=1; -update noar ti set b2='VA66JSY9BYP43' where id=1; -update noar tt set v0='8NMJ2YMT5QCJX19W6KUSRC1JN1GB6Y1' where id=2; -update noar ti set v0='8NMJ2YMT5QCJX19W6KUSRC1JN1GB6Y1' where id=2; -update noar tt set b0='YMF8DP1G8LVCSWO9JCPV1HOL2YT2M' where id=2; -update noar ti set b0='YMF8DP1G8LVCSWO9JCPV1HOL2YT2M' where id=2; -update noar tt set v0='KOPR6' where id=2; -update noar ti set v0='KOPR6' where id=2; -update noar tt set b1='L0TQQV0JLYK3TLBQF' where id=2; -update noar ti set b1='L0TQQV0JLYK3TLBQF' where id=2; -update noar tt set v0='SBP4498QNZMVROFWL5' where id=2; -update noar ti set v0='SBP4498QNZMVROFWL5' where id=2; -update noar tt set b2='BFVLJGODNP68PZMKX4CLLV4RFI7' where id=2; -update noar ti set b2='BFVLJGODNP68PZMKX4CLLV4RFI7' where id=2; -update noar tt set v0='DOEWDWUR4I0NXLPX04FXL4R0O' where id=3; -update noar ti set v0='DOEWDWUR4I0NXLPX04FXL4R0O' where id=3; -update noar tt set b0='V8ZPN052WMFAKKLRULY3HQOFSIGI' where id=3; -update noar ti set b0='V8ZPN052WMFAKKLRULY3HQOFSIGI' where id=3; -update noar tt set v0='YHTOOUL' where id=3; -update noar ti set v0='YHTOOUL' where id=3; -update noar tt set b1='YLPT9R5H1R5696LA8SQRFM03BY6U6IM' where id=3; -update noar ti set b1='YLPT9R5H1R5696LA8SQRFM03BY6U6IM' where id=3; -update noar tt set v0='4VNUT3D4XRA96' where id=3; -update noar ti set v0='4VNUT3D4XRA96' where id=3; -update noar tt set b2='QEA40Z7SHSHEIYRV' where id=3; -update noar ti set b2='QEA40Z7SHSHEIYRV' where id=3; -update noar tt set v0='CL2ZHJ818MBN' where id=4; -update noar ti set v0='CL2ZHJ818MBN' where id=4; -update noar tt set b0='O' where id=4; -update noar ti set b0='O' where id=4; -update noar tt set v0='3RMZTE70ZWHU' where id=4; -update noar ti set v0='3RMZTE70ZWHU' where id=4; -update noar tt set b1='03FEYLTVYQ4KDX1E5MYUMTOJD0OVO02I' where id=4; -update noar ti set b1='03FEYLTVYQ4KDX1E5MYUMTOJD0OVO02I' where id=4; -update noar tt set v0='EOJFSQ6LW1VK1BEDMLVN3YX8GF6G21GE' where id=4; -update noar ti set v0='EOJFSQ6LW1VK1BEDMLVN3YX8GF6G21GE' where id=4; -update noar tt set b2='KQ9S30UUFLUFQP4R' where id=4; -update noar ti set b2='KQ9S30UUFLUFQP4R' where id=4; -update noar tt set v0='8TI0D' where id=5; -update noar ti set v0='8TI0D' where id=5; -update noar tt set b0='IFK' where id=5; -update noar ti set b0='IFK' where id=5; -update noar tt set v0='E4IPU5EXR1JRYHPUDIMA76UX9GZOV' where id=5; -update noar ti set v0='E4IPU5EXR1JRYHPUDIMA76UX9GZOV' where id=5; -update noar tt set b1='DQVRYY4VYEKRVHNLIWV9MNFJI2L7' where id=5; -update noar ti set b1='DQVRYY4VYEKRVHNLIWV9MNFJI2L7' where id=5; -update noar tt set v0='R3BI37AB7RI52V' where id=5; -update noar ti set v0='R3BI37AB7RI52V' where id=5; -update noar tt set b2='MRGO5UKDJZ2OPSY7YU7KO' where id=5; -update noar ti set b2='MRGO5UKDJZ2OPSY7YU7KO' where id=5; -update noar tt set v0='0J' where id=6; -update noar ti set v0='0J' where id=6; -update noar tt set b0='YINVG' where id=6; -update noar ti set b0='YINVG' where id=6; -update noar tt set v0='QCBSRBO4X9' where id=6; -update noar ti set v0='QCBSRBO4X9' where id=6; -update noar tt set b1='PZSYLPCIHUGURUBCAC4OTS' where id=6; -update noar ti set b1='PZSYLPCIHUGURUBCAC4OTS' where id=6; -update noar tt set v0='OTLMLV51TIZJLTICSAGXIY2' where id=6; -update noar ti set v0='OTLMLV51TIZJLTICSAGXIY2' where id=6; -update noar tt set b2='TZWI30K3CXK5HLYBG' where id=6; -update noar ti set b2='TZWI30K3CXK5HLYBG' where id=6; -update noar tt set v0='CQVGQ4F6DFZ5FQS4BVPUPOO9Q' where id=7; -update noar ti set v0='CQVGQ4F6DFZ5FQS4BVPUPOO9Q' where id=7; -update noar tt set b0='5' where id=7; -update noar ti set b0='5' where id=7; -update noar tt set v0='YFSH71DW4Q5MEWNQVFE2S7P4MU' where id=7; -update noar ti set v0='YFSH71DW4Q5MEWNQVFE2S7P4MU' where id=7; -update noar tt set b1='RID5EBZCYZH7AJVF' where id=7; -update noar ti set b1='RID5EBZCYZH7AJVF' where id=7; -update noar tt set v0='F43' where id=7; -update noar ti set v0='F43' where id=7; -update noar tt set b2='F1TM0VMO' where id=7; -update noar ti set b2='F1TM0VMO' where id=7; -update noar tt set v0='T69KIQ5X9KKJBGDN6NZU4G' where id=8; -update noar ti set v0='T69KIQ5X9KKJBGDN6NZU4G' where id=8; -update noar tt set b0='K86QIKP4SQXL3AK5YTZB74NSD2BKOM9L' where id=8; -update noar ti set b0='K86QIKP4SQXL3AK5YTZB74NSD2BKOM9L' where id=8; -update noar tt set v0='OWLEKG41A2B' where id=8; -update noar ti set v0='OWLEKG41A2B' where id=8; -update noar tt set b1='SHRNZMSUOBIGNVQE2KHB0LUZPS8MGG3' where id=8; -update noar ti set b1='SHRNZMSUOBIGNVQE2KHB0LUZPS8MGG3' where id=8; -update noar tt set v0='5CFHV3OCRL3WAMBPY6JQY6YZKGJ7SR' where id=8; -update noar ti set v0='5CFHV3OCRL3WAMBPY6JQY6YZKGJ7SR' where id=8; -update noar tt set b2='8UB40GWKDGG9GA0SJ08M91' where id=8; -update noar ti set b2='8UB40GWKDGG9GA0SJ08M91' where id=8; -update noar tt set v0='MWPJ2Y1X5JEKXWDQBD3S2O2CERX' where id=9; -update noar ti set v0='MWPJ2Y1X5JEKXWDQBD3S2O2CERX' where id=9; -update noar tt set b0='DPMSNBAWMODY8N0GNGMKMKJ' where id=9; -update noar ti set b0='DPMSNBAWMODY8N0GNGMKMKJ' where id=9; -update noar tt set v0='PTT5DA2T0AQX61FUOTUZRC' where id=9; -update noar ti set v0='PTT5DA2T0AQX61FUOTUZRC' where id=9; -update noar tt set b1='PYT1EZGI5' where id=9; -update noar ti set b1='PYT1EZGI5' where id=9; -update noar tt set v0='QF6NCX49Z3TCAFARJG6HTR25VEOAWB' where id=9; -update noar ti set v0='QF6NCX49Z3TCAFARJG6HTR25VEOAWB' where id=9; -update noar tt set b2='XE5L6NUD9ILXL' where id=9; -update noar ti set b2='XE5L6NUD9ILXL' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 blob not null, - b1 longblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='VWO3A712ZVZBUDH08CF' where id=1; -update noar ti set v0='VWO3A712ZVZBUDH08CF' where id=1; -update noar tt set b0='ZIATHD6HSU3TKLIUK75K8VD6ZO2QWIO' where id=1; -update noar ti set b0='ZIATHD6HSU3TKLIUK75K8VD6ZO2QWIO' where id=1; -update noar tt set v0='KP5UUHUKL69QWLSXBXQ' where id=1; -update noar ti set v0='KP5UUHUKL69QWLSXBXQ' where id=1; -update noar tt set b1='CZL44K6Y8F78X9' where id=1; -update noar ti set b1='CZL44K6Y8F78X9' where id=1; -update noar tt set v0='HDZUXV3R8UYONE4RFJRUMFTZ' where id=1; -update noar ti set v0='HDZUXV3R8UYONE4RFJRUMFTZ' where id=1; -update noar tt set b2='CLC7U' where id=1; -update noar ti set b2='CLC7U' where id=1; -update noar tt set v0='FC' where id=2; -update noar ti set v0='FC' where id=2; -update noar tt set b0='5DHVWRZY4VL12E92V132RO2PE' where id=2; -update noar ti set b0='5DHVWRZY4VL12E92V132RO2PE' where id=2; -update noar tt set v0='14' where id=2; -update noar ti set v0='14' where id=2; -update noar tt set b1='LILAHSEV' where id=2; -update noar ti set b1='LILAHSEV' where id=2; -update noar tt set v0='5H0D' where id=2; -update noar ti set v0='5H0D' where id=2; -update noar tt set b2='T4G4R6YC2037R' where id=2; -update noar ti set b2='T4G4R6YC2037R' where id=2; -update noar tt set v0='Z71HR4ETZM8FKKH7KTKD0V3NRI' where id=3; -update noar ti set v0='Z71HR4ETZM8FKKH7KTKD0V3NRI' where id=3; -update noar tt set b0='G25ZNGIDWQBZR4AY2DVDG3I' where id=3; -update noar ti set b0='G25ZNGIDWQBZR4AY2DVDG3I' where id=3; -update noar tt set v0='YPKR2MTJJJ18G56' where id=3; -update noar ti set v0='YPKR2MTJJJ18G56' where id=3; -update noar tt set b1='0CPGGZA57RCQESQKN0A5WF' where id=3; -update noar ti set b1='0CPGGZA57RCQESQKN0A5WF' where id=3; -update noar tt set v0='UFX3UDFBDDB8Q2TMTX6TIUGJ4KOSIJMS' where id=3; -update noar ti set v0='UFX3UDFBDDB8Q2TMTX6TIUGJ4KOSIJMS' where id=3; -update noar tt set b2='GCQ922U90MSND5JYGRYXB9LO' where id=3; -update noar ti set b2='GCQ922U90MSND5JYGRYXB9LO' where id=3; -update noar tt set v0='ZJ' where id=4; -update noar ti set v0='ZJ' where id=4; -update noar tt set b0='M941P3L1H' where id=4; -update noar ti set b0='M941P3L1H' where id=4; -update noar tt set v0='3XIQSMAP12VZEHK04TN2MGRGOX0L12' where id=4; -update noar ti set v0='3XIQSMAP12VZEHK04TN2MGRGOX0L12' where id=4; -update noar tt set b1='7EKKE2MKYBMGYZB' where id=4; -update noar ti set b1='7EKKE2MKYBMGYZB' where id=4; -update noar tt set v0='VCUMP6EC29MLWWAY7C5IC' where id=4; -update noar ti set v0='VCUMP6EC29MLWWAY7C5IC' where id=4; -update noar tt set b2='UNY49XCPVB7MHEUEP9N' where id=4; -update noar ti set b2='UNY49XCPVB7MHEUEP9N' where id=4; -update noar tt set v0='CP0T9CXVZ8YBSKC70JDWUOX7I8BZV' where id=5; -update noar ti set v0='CP0T9CXVZ8YBSKC70JDWUOX7I8BZV' where id=5; -update noar tt set b0='F6MQI' where id=5; -update noar ti set b0='F6MQI' where id=5; -update noar tt set v0='LS3TOVNHO7YJCQ8UCKKXH2DO60G6KHY' where id=5; -update noar ti set v0='LS3TOVNHO7YJCQ8UCKKXH2DO60G6KHY' where id=5; -update noar tt set b1='F8QFN99W5AUGQKF4NOPQLQHH0' where id=5; -update noar ti set b1='F8QFN99W5AUGQKF4NOPQLQHH0' where id=5; -update noar tt set v0='9' where id=5; -update noar ti set v0='9' where id=5; -update noar tt set b2='JOS43IZ' where id=5; -update noar ti set b2='JOS43IZ' where id=5; -update noar tt set v0='ZYK7HW' where id=6; -update noar ti set v0='ZYK7HW' where id=6; -update noar tt set b0='7TO4Q7UYVT9JCJQM98OXVUCUJ3DRGJS' where id=6; -update noar ti set b0='7TO4Q7UYVT9JCJQM98OXVUCUJ3DRGJS' where id=6; -update noar tt set v0='DJFP76V21' where id=6; -update noar ti set v0='DJFP76V21' where id=6; -update noar tt set b1='0D65C9XPN1UEYLT5P1VAYDYA50Z4DM' where id=6; -update noar ti set b1='0D65C9XPN1UEYLT5P1VAYDYA50Z4DM' where id=6; -update noar tt set v0='JXBTOQCXPF2FSKMVQAGW' where id=6; -update noar ti set v0='JXBTOQCXPF2FSKMVQAGW' where id=6; -update noar tt set b2='MJVY8F7Z9K' where id=6; -update noar ti set b2='MJVY8F7Z9K' where id=6; -update noar tt set v0='V1DYXM4A0R1RWV7KI4ZWHTLQ' where id=7; -update noar ti set v0='V1DYXM4A0R1RWV7KI4ZWHTLQ' where id=7; -update noar tt set b0='RKD' where id=7; -update noar ti set b0='RKD' where id=7; -update noar tt set v0='HFVCMUV8WK69OB' where id=7; -update noar ti set v0='HFVCMUV8WK69OB' where id=7; -update noar tt set b1='2Z7MMK4W42T6SF8KYMJHZAAM52DVPA' where id=7; -update noar ti set b1='2Z7MMK4W42T6SF8KYMJHZAAM52DVPA' where id=7; -update noar tt set v0='5ZT71ABYR2S2B8MFZMLSY7ECS83Q3SSI' where id=7; -update noar ti set v0='5ZT71ABYR2S2B8MFZMLSY7ECS83Q3SSI' where id=7; -update noar tt set b2='PB9ZWRPZQFJJ' where id=7; -update noar ti set b2='PB9ZWRPZQFJJ' where id=7; -update noar tt set v0='WJY1Q4AX5JOI4KZZFC92WFJ' where id=8; -update noar ti set v0='WJY1Q4AX5JOI4KZZFC92WFJ' where id=8; -update noar tt set b0='QP6FVY1W2B6OMK0CMB9RC76M66BKO7' where id=8; -update noar ti set b0='QP6FVY1W2B6OMK0CMB9RC76M66BKO7' where id=8; -update noar tt set v0='TAZQ958I1WQTXYVW' where id=8; -update noar ti set v0='TAZQ958I1WQTXYVW' where id=8; -update noar tt set b1='8TXO2S49383RAXPFC0MYG' where id=8; -update noar ti set b1='8TXO2S49383RAXPFC0MYG' where id=8; -update noar tt set v0='A9FC5GF4N9KYENFXNPNJBO7SGAP1RUE' where id=8; -update noar ti set v0='A9FC5GF4N9KYENFXNPNJBO7SGAP1RUE' where id=8; -update noar tt set b2='O42' where id=8; -update noar ti set b2='O42' where id=8; -update noar tt set v0='YP9SI2' where id=9; -update noar ti set v0='YP9SI2' where id=9; -update noar tt set b0='DJXRKXCTUW83AHPOBVUEF' where id=9; -update noar ti set b0='DJXRKXCTUW83AHPOBVUEF' where id=9; -update noar tt set v0='0HVNY2PVXWUENCOLF5RE0SVO2XZ7RSVU' where id=9; -update noar ti set v0='0HVNY2PVXWUENCOLF5RE0SVO2XZ7RSVU' where id=9; -update noar tt set b1='XW264A8VRDLQH52TY0I3YA96KHDUIKR' where id=9; -update noar ti set b1='XW264A8VRDLQH52TY0I3YA96KHDUIKR' where id=9; -update noar tt set v0='QS7E25L9FVQJCKN17M3QX' where id=9; -update noar ti set v0='QS7E25L9FVQJCKN17M3QX' where id=9; -update noar tt set b2='1RGRLE46EK2E1I95QL3T9GY02JWQDK' where id=9; -update noar ti set b2='1RGRLE46EK2E1I95QL3T9GY02JWQDK' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 blob not null, - b1 longblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='3E5YX5Z5773UPSE2' where id=1; -update noar ti set v0='3E5YX5Z5773UPSE2' where id=1; -update noar tt set b0='KDCK' where id=1; -update noar ti set b0='KDCK' where id=1; -update noar tt set v0='SD6FJW' where id=1; -update noar ti set v0='SD6FJW' where id=1; -update noar tt set b1='F1ATBZF2P7E' where id=1; -update noar ti set b1='F1ATBZF2P7E' where id=1; -update noar tt set v0='Q5NLU1KY0MQBT78MGBLDX0FZZMTST' where id=1; -update noar ti set v0='Q5NLU1KY0MQBT78MGBLDX0FZZMTST' where id=1; -update noar tt set b2='19KGDFSPVFF7DZRDMDIWE035GQNDYQ' where id=1; -update noar ti set b2='19KGDFSPVFF7DZRDMDIWE035GQNDYQ' where id=1; -update noar tt set v0='VDQX8XDJEH' where id=2; -update noar ti set v0='VDQX8XDJEH' where id=2; -update noar tt set b0='T1WQXDT80RCFVTA3TKOB3' where id=2; -update noar ti set b0='T1WQXDT80RCFVTA3TKOB3' where id=2; -update noar tt set v0='JUO2' where id=2; -update noar ti set v0='JUO2' where id=2; -update noar tt set b1='KEAA53ZM' where id=2; -update noar ti set b1='KEAA53ZM' where id=2; -update noar tt set v0='HT132K73J99A7Q8V1M8C' where id=2; -update noar ti set v0='HT132K73J99A7Q8V1M8C' where id=2; -update noar tt set b2='Z1U9DF3RUL' where id=2; -update noar ti set b2='Z1U9DF3RUL' where id=2; -update noar tt set v0='AZD58D4PA4OR4' where id=3; -update noar ti set v0='AZD58D4PA4OR4' where id=3; -update noar tt set b0='V0MOA67KZF5' where id=3; -update noar ti set b0='V0MOA67KZF5' where id=3; -update noar tt set v0='VKL2WW1TGML6U3N' where id=3; -update noar ti set v0='VKL2WW1TGML6U3N' where id=3; -update noar tt set b1='ZTEFUWY8F4HUKG6FRBAX8' where id=3; -update noar ti set b1='ZTEFUWY8F4HUKG6FRBAX8' where id=3; -update noar tt set v0='PYDIIRM2YJ0H36GH7J8RGOOKCSXGK' where id=3; -update noar ti set v0='PYDIIRM2YJ0H36GH7J8RGOOKCSXGK' where id=3; -update noar tt set b2='5Z3RKX9OFQFDSHSRO8' where id=3; -update noar ti set b2='5Z3RKX9OFQFDSHSRO8' where id=3; -update noar tt set v0='PCMJD' where id=4; -update noar ti set v0='PCMJD' where id=4; -update noar tt set b0='NYBZ' where id=4; -update noar ti set b0='NYBZ' where id=4; -update noar tt set v0='HEMA2IXZH7U' where id=4; -update noar ti set v0='HEMA2IXZH7U' where id=4; -update noar tt set b1='ZWNGNO65U70CLAIMSQZTH' where id=4; -update noar ti set b1='ZWNGNO65U70CLAIMSQZTH' where id=4; -update noar tt set v0='LTBTK34ZMP8EC8NGJN2U8S7MOF' where id=4; -update noar ti set v0='LTBTK34ZMP8EC8NGJN2U8S7MOF' where id=4; -update noar tt set b2='Z60LZ30G2RAQ35QC4XSUFH8A' where id=4; -update noar ti set b2='Z60LZ30G2RAQ35QC4XSUFH8A' where id=4; -update noar tt set v0='6NNN2UR5TOY2Y13X9LPR' where id=5; -update noar ti set v0='6NNN2UR5TOY2Y13X9LPR' where id=5; -update noar tt set b0='34UZRLX' where id=5; -update noar ti set b0='34UZRLX' where id=5; -update noar tt set v0='Y81CMO1FJ8YHP' where id=5; -update noar ti set v0='Y81CMO1FJ8YHP' where id=5; -update noar tt set b1='DG95LTJ2R5OLRMKW51V1OAY4QF2EDKE' where id=5; -update noar ti set b1='DG95LTJ2R5OLRMKW51V1OAY4QF2EDKE' where id=5; -update noar tt set v0='WE' where id=5; -update noar ti set v0='WE' where id=5; -update noar tt set b2='IKY1LND0' where id=5; -update noar ti set b2='IKY1LND0' where id=5; -update noar tt set v0='BTBM37AYQ5HJZ0P1' where id=6; -update noar ti set v0='BTBM37AYQ5HJZ0P1' where id=6; -update noar tt set b0='RZ7IXYJ8LQ5PJ5FPZK3DKA2' where id=6; -update noar ti set b0='RZ7IXYJ8LQ5PJ5FPZK3DKA2' where id=6; -update noar tt set v0='2DE80SDS4TST8' where id=6; -update noar ti set v0='2DE80SDS4TST8' where id=6; -update noar tt set b1='GF' where id=6; -update noar ti set b1='GF' where id=6; -update noar tt set v0='2M69PA5W7V' where id=6; -update noar ti set v0='2M69PA5W7V' where id=6; -update noar tt set b2='SWJOGR2AKBSA' where id=6; -update noar ti set b2='SWJOGR2AKBSA' where id=6; -update noar tt set v0='5ASHPRGS1G88TB2LTMYR' where id=7; -update noar ti set v0='5ASHPRGS1G88TB2LTMYR' where id=7; -update noar tt set b0='O' where id=7; -update noar ti set b0='O' where id=7; -update noar tt set v0='93WKA537DAWGUP4I3A1C9IVMLJJOXT' where id=7; -update noar ti set v0='93WKA537DAWGUP4I3A1C9IVMLJJOXT' where id=7; -update noar tt set b1='HR4H1KFC6R59JS8R0905EH' where id=7; -update noar ti set b1='HR4H1KFC6R59JS8R0905EH' where id=7; -update noar tt set v0='IPPWN2G38QGFWYD9U1O2ZQDS0DG8E' where id=7; -update noar ti set v0='IPPWN2G38QGFWYD9U1O2ZQDS0DG8E' where id=7; -update noar tt set b2='WG2A3' where id=7; -update noar ti set b2='WG2A3' where id=7; -update noar tt set v0='MC2Z6ZTPMYQNX5HV' where id=8; -update noar ti set v0='MC2Z6ZTPMYQNX5HV' where id=8; -update noar tt set b0='ZAXGR' where id=8; -update noar ti set b0='ZAXGR' where id=8; -update noar tt set v0='X4KXXXSDZZWD' where id=8; -update noar ti set v0='X4KXXXSDZZWD' where id=8; -update noar tt set b1='NLH77745U3KLMUG6FN7KNDAUKSN3Y' where id=8; -update noar ti set b1='NLH77745U3KLMUG6FN7KNDAUKSN3Y' where id=8; -update noar tt set v0='87G679F9P' where id=8; -update noar ti set v0='87G679F9P' where id=8; -update noar tt set b2='P2A' where id=8; -update noar ti set b2='P2A' where id=8; -update noar tt set v0='GTQI549SI' where id=9; -update noar ti set v0='GTQI549SI' where id=9; -update noar tt set b0='SMYM4HK1WUSCFXXUW0YKKYD8SBDDIT6P' where id=9; -update noar ti set b0='SMYM4HK1WUSCFXXUW0YKKYD8SBDDIT6P' where id=9; -update noar tt set v0='V2E1VUGQ7OQ1RWCNKE8A' where id=9; -update noar ti set v0='V2E1VUGQ7OQ1RWCNKE8A' where id=9; -update noar tt set b1='F83DXDEXBSQXI272ZT2J6D1GWJW' where id=9; -update noar ti set b1='F83DXDEXBSQXI272ZT2J6D1GWJW' where id=9; -update noar tt set v0='KMGBS8LL' where id=9; -update noar ti set v0='KMGBS8LL' where id=9; -update noar tt set b2='3XOBIJIR8Q4JUCCC4WKKS' where id=9; -update noar ti set b2='3XOBIJIR8Q4JUCCC4WKKS' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 mediumblob null, - b1 tinyblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='M3HMHEMY1I' where id=1; -update noar ti set v0='M3HMHEMY1I' where id=1; -update noar tt set b0='4OKEO80D4JQV18' where id=1; -update noar ti set b0='4OKEO80D4JQV18' where id=1; -update noar tt set v0='UY' where id=1; -update noar ti set v0='UY' where id=1; -update noar tt set b1='V1GEEKHM' where id=1; -update noar ti set b1='V1GEEKHM' where id=1; -update noar tt set v0='WYNIBVMHCZZ' where id=1; -update noar ti set v0='WYNIBVMHCZZ' where id=1; -update noar tt set b2='8FI09VBHFPZAIFSZO4A' where id=1; -update noar ti set b2='8FI09VBHFPZAIFSZO4A' where id=1; -update noar tt set v0='2UP2XT816OGCKGBLFTZJ5A93TQ3VVWE' where id=2; -update noar ti set v0='2UP2XT816OGCKGBLFTZJ5A93TQ3VVWE' where id=2; -update noar tt set b0='SRPWQ7PGD6ZJ757GQEM5' where id=2; -update noar ti set b0='SRPWQ7PGD6ZJ757GQEM5' where id=2; -update noar tt set v0='WNIT7ZDSPO4M48T43LX' where id=2; -update noar ti set v0='WNIT7ZDSPO4M48T43LX' where id=2; -update noar tt set b1='LQCXLQDY7SUDG0MLB8DVDSL14YY3DBWB' where id=2; -update noar ti set b1='LQCXLQDY7SUDG0MLB8DVDSL14YY3DBWB' where id=2; -update noar tt set v0='L2BDMY0P0FFPBQYPS8' where id=2; -update noar ti set v0='L2BDMY0P0FFPBQYPS8' where id=2; -update noar tt set b2='BDZ7S1DVCHEDVN8TNPU5A' where id=2; -update noar ti set b2='BDZ7S1DVCHEDVN8TNPU5A' where id=2; -update noar tt set v0='32Q2U77VPEPJXRKK9TUFV66SCLBIRSO' where id=3; -update noar ti set v0='32Q2U77VPEPJXRKK9TUFV66SCLBIRSO' where id=3; -update noar tt set b0='0C4OJ3SR37Z6JW23QVGECT9AMZGODF3K' where id=3; -update noar ti set b0='0C4OJ3SR37Z6JW23QVGECT9AMZGODF3K' where id=3; -update noar tt set v0='F354VCIO6IFKAZ' where id=3; -update noar ti set v0='F354VCIO6IFKAZ' where id=3; -update noar tt set b1='8ENNVRR' where id=3; -update noar ti set b1='8ENNVRR' where id=3; -update noar tt set v0='1NU7MK0OXPIXA44DFYZPS6MF' where id=3; -update noar ti set v0='1NU7MK0OXPIXA44DFYZPS6MF' where id=3; -update noar tt set b2='0V81MMPL92410' where id=3; -update noar ti set b2='0V81MMPL92410' where id=3; -update noar tt set v0='R0J' where id=4; -update noar ti set v0='R0J' where id=4; -update noar tt set b0='Z8Z41S9P4502PX7E' where id=4; -update noar ti set b0='Z8Z41S9P4502PX7E' where id=4; -update noar tt set v0='C9C9I4SMMHNL50QTB0M73QRZ' where id=4; -update noar ti set v0='C9C9I4SMMHNL50QTB0M73QRZ' where id=4; -update noar tt set b1='0FP2V71YFMH0' where id=4; -update noar ti set b1='0FP2V71YFMH0' where id=4; -update noar tt set v0='CYB6CIV' where id=4; -update noar ti set v0='CYB6CIV' where id=4; -update noar tt set b2='T2JSX33MB' where id=4; -update noar ti set b2='T2JSX33MB' where id=4; -update noar tt set v0='I' where id=5; -update noar ti set v0='I' where id=5; -update noar tt set b0='PDMQ2RC55R182H7UO6PQ8TS03948O5J0' where id=5; -update noar ti set b0='PDMQ2RC55R182H7UO6PQ8TS03948O5J0' where id=5; -update noar tt set v0='970RHROEK5KJF' where id=5; -update noar ti set v0='970RHROEK5KJF' where id=5; -update noar tt set b1='9BMJ57Y47X2586P89C4AJZ8BADB7X9' where id=5; -update noar ti set b1='9BMJ57Y47X2586P89C4AJZ8BADB7X9' where id=5; -update noar tt set v0='0N5' where id=5; -update noar ti set v0='0N5' where id=5; -update noar tt set b2='U1SQIBM1HDNO5OP3HV7EZ1X' where id=5; -update noar ti set b2='U1SQIBM1HDNO5OP3HV7EZ1X' where id=5; -update noar tt set v0='5EGLM1FM0P8AJOZBK64E64GM67VLAA3P' where id=6; -update noar ti set v0='5EGLM1FM0P8AJOZBK64E64GM67VLAA3P' where id=6; -update noar tt set b0='MQ9GSG9WZL72DGFQL8NHNQZY60GQRJ4H' where id=6; -update noar ti set b0='MQ9GSG9WZL72DGFQL8NHNQZY60GQRJ4H' where id=6; -update noar tt set v0='TM2WS0TBFNTU' where id=6; -update noar ti set v0='TM2WS0TBFNTU' where id=6; -update noar tt set b1='WI0EX1IVIFFMWI' where id=6; -update noar ti set b1='WI0EX1IVIFFMWI' where id=6; -update noar tt set v0='ER4ZL2PXZH8WUUQI' where id=6; -update noar ti set v0='ER4ZL2PXZH8WUUQI' where id=6; -update noar tt set b2='CVA6QJ4YPL198U83P2J1MB7CVG' where id=6; -update noar ti set b2='CVA6QJ4YPL198U83P2J1MB7CVG' where id=6; -update noar tt set v0='6V8O2WN16AQUU' where id=7; -update noar ti set v0='6V8O2WN16AQUU' where id=7; -update noar tt set b0='MACEL4FL9JT7O84X' where id=7; -update noar ti set b0='MACEL4FL9JT7O84X' where id=7; -update noar tt set v0='5TJFLBBGYAPSDOCL92QDXZAGZ9' where id=7; -update noar ti set v0='5TJFLBBGYAPSDOCL92QDXZAGZ9' where id=7; -update noar tt set b1='XTZHPZC2O88U' where id=7; -update noar ti set b1='XTZHPZC2O88U' where id=7; -update noar tt set v0='3PIPL8GQSZR2391A0049JF' where id=7; -update noar ti set v0='3PIPL8GQSZR2391A0049JF' where id=7; -update noar tt set b2='BMBYZL7TZAND2T' where id=7; -update noar ti set b2='BMBYZL7TZAND2T' where id=7; -update noar tt set v0='KXXDMTFMHZIOXKEJNX8YAB8CBJQNSQ3F' where id=8; -update noar ti set v0='KXXDMTFMHZIOXKEJNX8YAB8CBJQNSQ3F' where id=8; -update noar tt set b0='4OEF2LTQFCFCC0G4V8BEI9R78XUZ41' where id=8; -update noar ti set b0='4OEF2LTQFCFCC0G4V8BEI9R78XUZ41' where id=8; -update noar tt set v0='VEVDIQ4HZACMU4HAE9' where id=8; -update noar ti set v0='VEVDIQ4HZACMU4HAE9' where id=8; -update noar tt set b1='PW38656' where id=8; -update noar ti set b1='PW38656' where id=8; -update noar tt set v0='KYI9F' where id=8; -update noar ti set v0='KYI9F' where id=8; -update noar tt set b2='008UXBXNF' where id=8; -update noar ti set b2='008UXBXNF' where id=8; -update noar tt set v0='NL7K2R' where id=9; -update noar ti set v0='NL7K2R' where id=9; -update noar tt set b0='KJK8UOJM60NE9VG7AZR9N3YHUGUJNPE' where id=9; -update noar ti set b0='KJK8UOJM60NE9VG7AZR9N3YHUGUJNPE' where id=9; -update noar tt set v0='49AGM3MFSWZ' where id=9; -update noar ti set v0='49AGM3MFSWZ' where id=9; -update noar tt set b1='WXU6YVQ986L' where id=9; -update noar ti set b1='WXU6YVQ986L' where id=9; -update noar tt set v0='0OP0GYN85D2GFW705BEM1LY5F8Y3616M' where id=9; -update noar ti set v0='0OP0GYN85D2GFW705BEM1LY5F8Y3616M' where id=9; -update noar tt set b2='LV8NJ1DJPOT3BWZ9II2VWVT57ZZH' where id=9; -update noar ti set b2='LV8NJ1DJPOT3BWZ9II2VWVT57ZZH' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 mediumblob null, - b1 tinyblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='NBLHVNIGW6N4UTIJQ' where id=1; -update noar ti set v0='NBLHVNIGW6N4UTIJQ' where id=1; -update noar tt set b0='450UIBJ6WIFU2QEZ6MC4B12DZE2FG4DA' where id=1; -update noar ti set b0='450UIBJ6WIFU2QEZ6MC4B12DZE2FG4DA' where id=1; -update noar tt set v0='QCABKO1JS4TCO6X1ZK3M23' where id=1; -update noar ti set v0='QCABKO1JS4TCO6X1ZK3M23' where id=1; -update noar tt set b1='INE8V66HLQ5U8QOYHGSY90KFV' where id=1; -update noar ti set b1='INE8V66HLQ5U8QOYHGSY90KFV' where id=1; -update noar tt set v0='N7' where id=1; -update noar ti set v0='N7' where id=1; -update noar tt set b2='5LTMITIDLTLTI8P83K' where id=1; -update noar ti set b2='5LTMITIDLTLTI8P83K' where id=1; -update noar tt set v0='8XXQ50ATQPK985Y3XISXQ' where id=2; -update noar ti set v0='8XXQ50ATQPK985Y3XISXQ' where id=2; -update noar tt set b0='W0BZFZQNJFD0CGGY4HPRG5XQMWW' where id=2; -update noar ti set b0='W0BZFZQNJFD0CGGY4HPRG5XQMWW' where id=2; -update noar tt set v0='8TOPBS934O4UOVHCXK1NZDELDC' where id=2; -update noar ti set v0='8TOPBS934O4UOVHCXK1NZDELDC' where id=2; -update noar tt set b1='C6GKG8LYBVEXU4' where id=2; -update noar ti set b1='C6GKG8LYBVEXU4' where id=2; -update noar tt set v0='AQDNY' where id=2; -update noar ti set v0='AQDNY' where id=2; -update noar tt set b2='Q4QS1EQ9UFZNGCGBP5K277Q' where id=2; -update noar ti set b2='Q4QS1EQ9UFZNGCGBP5K277Q' where id=2; -update noar tt set v0='6942JGLD92507Z97DZWARCRI61IFQZ2' where id=3; -update noar ti set v0='6942JGLD92507Z97DZWARCRI61IFQZ2' where id=3; -update noar tt set b0='2T6IT7V4DV5T7Z3R5BUQ90VL' where id=3; -update noar ti set b0='2T6IT7V4DV5T7Z3R5BUQ90VL' where id=3; -update noar tt set v0='7NO' where id=3; -update noar ti set v0='7NO' where id=3; -update noar tt set b1='VNVNQQ7TEA8LLG28WYF7J' where id=3; -update noar ti set b1='VNVNQQ7TEA8LLG28WYF7J' where id=3; -update noar tt set v0='H7JWZSL3HZL6TX826Y' where id=3; -update noar ti set v0='H7JWZSL3HZL6TX826Y' where id=3; -update noar tt set b2='TD7G6S1GTVE9TNAH1JY90ZPZE1' where id=3; -update noar ti set b2='TD7G6S1GTVE9TNAH1JY90ZPZE1' where id=3; -update noar tt set v0='7LWAIUZVMFP8RWUJFMKNIKE' where id=4; -update noar ti set v0='7LWAIUZVMFP8RWUJFMKNIKE' where id=4; -update noar tt set b0='73' where id=4; -update noar ti set b0='73' where id=4; -update noar tt set v0='9X0H' where id=4; -update noar ti set v0='9X0H' where id=4; -update noar tt set b1='F7JVZK' where id=4; -update noar ti set b1='F7JVZK' where id=4; -update noar tt set v0='HKG' where id=4; -update noar ti set v0='HKG' where id=4; -update noar tt set b2='1M6JGTNMZIHJAXAB1PQY1WRCDJ9B' where id=4; -update noar ti set b2='1M6JGTNMZIHJAXAB1PQY1WRCDJ9B' where id=4; -update noar tt set v0='W951DR4G' where id=5; -update noar ti set v0='W951DR4G' where id=5; -update noar tt set b0='I44TCJ' where id=5; -update noar ti set b0='I44TCJ' where id=5; -update noar tt set v0='EOVZZLQD' where id=5; -update noar ti set v0='EOVZZLQD' where id=5; -update noar tt set b1='3DI4TFPU6V4G1DXVFWTWLZ6' where id=5; -update noar ti set b1='3DI4TFPU6V4G1DXVFWTWLZ6' where id=5; -update noar tt set v0='GDRI2HPD6W9WRVVMZSB2R09NPYY26EPA' where id=5; -update noar ti set v0='GDRI2HPD6W9WRVVMZSB2R09NPYY26EPA' where id=5; -update noar tt set b2='9DIA049U95XTK3R45PC1OY8Q3PA' where id=5; -update noar ti set b2='9DIA049U95XTK3R45PC1OY8Q3PA' where id=5; -update noar tt set v0='AOB1' where id=6; -update noar ti set v0='AOB1' where id=6; -update noar tt set b0='JDQIHQU5GUB9E1R24DX' where id=6; -update noar ti set b0='JDQIHQU5GUB9E1R24DX' where id=6; -update noar tt set v0='HZZLE76Q4ZI143K' where id=6; -update noar ti set v0='HZZLE76Q4ZI143K' where id=6; -update noar tt set b1='3PSUWS0M4CK8T' where id=6; -update noar ti set b1='3PSUWS0M4CK8T' where id=6; -update noar tt set v0='DN87K9PUPZVQPZH9TBE591' where id=6; -update noar ti set v0='DN87K9PUPZVQPZH9TBE591' where id=6; -update noar tt set b2='G' where id=6; -update noar ti set b2='G' where id=6; -update noar tt set v0='U4977UVH0OHU1GUZ62BOEW2JCCY2' where id=7; -update noar ti set v0='U4977UVH0OHU1GUZ62BOEW2JCCY2' where id=7; -update noar tt set b0='KLWEG7W2MYVWILUSWL8MS98' where id=7; -update noar ti set b0='KLWEG7W2MYVWILUSWL8MS98' where id=7; -update noar tt set v0='WX00E8V4M3O' where id=7; -update noar ti set v0='WX00E8V4M3O' where id=7; -update noar tt set b1='U2R4F' where id=7; -update noar ti set b1='U2R4F' where id=7; -update noar tt set v0='YRU4' where id=7; -update noar ti set v0='YRU4' where id=7; -update noar tt set b2='JRRJE957BKKJ7Y3PKVSR7UJ3CH3' where id=7; -update noar ti set b2='JRRJE957BKKJ7Y3PKVSR7UJ3CH3' where id=7; -update noar tt set v0='SGVES5PU2B03T0ZX9NA44Z4' where id=8; -update noar ti set v0='SGVES5PU2B03T0ZX9NA44Z4' where id=8; -update noar tt set b0='MY46YEN04YHA1RU3LLDCUKC6Y80NIJ71' where id=8; -update noar ti set b0='MY46YEN04YHA1RU3LLDCUKC6Y80NIJ71' where id=8; -update noar tt set v0='77GGW17L' where id=8; -update noar ti set v0='77GGW17L' where id=8; -update noar tt set b1='UA' where id=8; -update noar ti set b1='UA' where id=8; -update noar tt set v0='DHVARYXL18D2Q3CATMLCAJDQVTNMW6Z' where id=8; -update noar ti set v0='DHVARYXL18D2Q3CATMLCAJDQVTNMW6Z' where id=8; -update noar tt set b2='YUP21X5NKNA9SFQF29NTX9' where id=8; -update noar ti set b2='YUP21X5NKNA9SFQF29NTX9' where id=8; -update noar tt set v0='TAXEB23WQFJC1TQDU06AHA9J' where id=9; -update noar ti set v0='TAXEB23WQFJC1TQDU06AHA9J' where id=9; -update noar tt set b0='YL' where id=9; -update noar ti set b0='YL' where id=9; -update noar tt set v0='6S' where id=9; -update noar ti set v0='6S' where id=9; -update noar tt set b1='32Q1BUX5NBCSW7XS30V' where id=9; -update noar ti set b1='32Q1BUX5NBCSW7XS30V' where id=9; -update noar tt set v0='JYGGHPVLI9682HQQ0VVA831H03F8O' where id=9; -update noar ti set v0='JYGGHPVLI9682HQQ0VVA831H03F8O' where id=9; -update noar tt set b2='RARWFDHMRV947XD' where id=9; -update noar ti set b2='RARWFDHMRV947XD' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 mediumblob not null, - b1 tinyblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='ZK9XLA2IEZ1WJIHM57VUXR' where id=1; -update noar ti set v0='ZK9XLA2IEZ1WJIHM57VUXR' where id=1; -update noar tt set b0='W3SSTL2559S0Y7UIK' where id=1; -update noar ti set b0='W3SSTL2559S0Y7UIK' where id=1; -update noar tt set v0='6YZ' where id=1; -update noar ti set v0='6YZ' where id=1; -update noar tt set b1='GTB9CE4QM' where id=1; -update noar ti set b1='GTB9CE4QM' where id=1; -update noar tt set v0='PW59UHVDG69ZERC1' where id=1; -update noar ti set v0='PW59UHVDG69ZERC1' where id=1; -update noar tt set b2='QNA3FIZJ3BLHIVZPVLBCFREGD' where id=1; -update noar ti set b2='QNA3FIZJ3BLHIVZPVLBCFREGD' where id=1; -update noar tt set v0='DACACE21ZZQM0BNA00F2M8ALM8L1' where id=2; -update noar ti set v0='DACACE21ZZQM0BNA00F2M8ALM8L1' where id=2; -update noar tt set b0='BQYSACORFXSLTON' where id=2; -update noar ti set b0='BQYSACORFXSLTON' where id=2; -update noar tt set v0='8UDD148VIGOM98I9X61LNS1TS3UCXEZ' where id=2; -update noar ti set v0='8UDD148VIGOM98I9X61LNS1TS3UCXEZ' where id=2; -update noar tt set b1='4UPQB8Y862NLMM2299O' where id=2; -update noar ti set b1='4UPQB8Y862NLMM2299O' where id=2; -update noar tt set v0='WR' where id=2; -update noar ti set v0='WR' where id=2; -update noar tt set b2='AKWMDQO0A9QQ5H4' where id=2; -update noar ti set b2='AKWMDQO0A9QQ5H4' where id=2; -update noar tt set v0='GZS4PDI' where id=3; -update noar ti set v0='GZS4PDI' where id=3; -update noar tt set b0='DHCH6W9284Z3RNLP4' where id=3; -update noar ti set b0='DHCH6W9284Z3RNLP4' where id=3; -update noar tt set v0='F4APV0Y2PX7XO6JJS2HK' where id=3; -update noar ti set v0='F4APV0Y2PX7XO6JJS2HK' where id=3; -update noar tt set b1='EL3UA5IDIWH' where id=3; -update noar ti set b1='EL3UA5IDIWH' where id=3; -update noar tt set v0='MWSLQBF8FXB60B3CO' where id=3; -update noar ti set v0='MWSLQBF8FXB60B3CO' where id=3; -update noar tt set b2='LJJ8GPQ8TCG4DAAI538IBJRVPUMDUNB' where id=3; -update noar ti set b2='LJJ8GPQ8TCG4DAAI538IBJRVPUMDUNB' where id=3; -update noar tt set v0='CHT0GEUF5DO7' where id=4; -update noar ti set v0='CHT0GEUF5DO7' where id=4; -update noar tt set b0='RYVM6' where id=4; -update noar ti set b0='RYVM6' where id=4; -update noar tt set v0='P9PBLR5X77X9U0ILLH0EWNDQE1K' where id=4; -update noar ti set v0='P9PBLR5X77X9U0ILLH0EWNDQE1K' where id=4; -update noar tt set b1='Y37S5R5IKY3J2B998AAHWVAWAHFOY2G' where id=4; -update noar ti set b1='Y37S5R5IKY3J2B998AAHWVAWAHFOY2G' where id=4; -update noar tt set v0='QV6Q41CLJJ8TC555HTCSEDAZ5IAO' where id=4; -update noar ti set v0='QV6Q41CLJJ8TC555HTCSEDAZ5IAO' where id=4; -update noar tt set b2='2QJG1J06JJ6QZCHZDRE8' where id=4; -update noar ti set b2='2QJG1J06JJ6QZCHZDRE8' where id=4; -update noar tt set v0='8X2P713' where id=5; -update noar ti set v0='8X2P713' where id=5; -update noar tt set b0='DG3SFS3XY' where id=5; -update noar ti set b0='DG3SFS3XY' where id=5; -update noar tt set v0='UZPIC8NP6AXXGFYB50YN03FMXTU1W14' where id=5; -update noar ti set v0='UZPIC8NP6AXXGFYB50YN03FMXTU1W14' where id=5; -update noar tt set b1='G75FPLWTELLXK1N0JT7GW' where id=5; -update noar ti set b1='G75FPLWTELLXK1N0JT7GW' where id=5; -update noar tt set v0='XSTDMCNA8UL8EUAA54N3Y' where id=5; -update noar ti set v0='XSTDMCNA8UL8EUAA54N3Y' where id=5; -update noar tt set b2='LSRZCLJBFY05RHE2I3' where id=5; -update noar ti set b2='LSRZCLJBFY05RHE2I3' where id=5; -update noar tt set v0='PCNTTLPH3CWYK8IIDUI293' where id=6; -update noar ti set v0='PCNTTLPH3CWYK8IIDUI293' where id=6; -update noar tt set b0='7TMR80EL4TM8ULVN4DYECOR68ENW2D9X' where id=6; -update noar ti set b0='7TMR80EL4TM8ULVN4DYECOR68ENW2D9X' where id=6; -update noar tt set v0='S5T6I4YG' where id=6; -update noar ti set v0='S5T6I4YG' where id=6; -update noar tt set b1='V2OQ6O8SDMIRG9J8U43PSCAP8PEULU' where id=6; -update noar ti set b1='V2OQ6O8SDMIRG9J8U43PSCAP8PEULU' where id=6; -update noar tt set v0='FND2O' where id=6; -update noar ti set v0='FND2O' where id=6; -update noar tt set b2='92PWAT76' where id=6; -update noar ti set b2='92PWAT76' where id=6; -update noar tt set v0='46WSX4BLGMALAL91WTHPI' where id=7; -update noar ti set v0='46WSX4BLGMALAL91WTHPI' where id=7; -update noar tt set b0='KZA6NQCL5WFXUQYEJ5GZ7OXKXN3JECNN' where id=7; -update noar ti set b0='KZA6NQCL5WFXUQYEJ5GZ7OXKXN3JECNN' where id=7; -update noar tt set v0='LAN4K46VCXTOVSF4' where id=7; -update noar ti set v0='LAN4K46VCXTOVSF4' where id=7; -update noar tt set b1='1B19DLSYQTTS52KG1AWVLYO8HKQO' where id=7; -update noar ti set b1='1B19DLSYQTTS52KG1AWVLYO8HKQO' where id=7; -update noar tt set v0='PG8MLBWDMBIUOY2C2YZVT0' where id=7; -update noar ti set v0='PG8MLBWDMBIUOY2C2YZVT0' where id=7; -update noar tt set b2='NADC8KKBGPVCF4LL1CE7GA3EK57E9YXW' where id=7; -update noar ti set b2='NADC8KKBGPVCF4LL1CE7GA3EK57E9YXW' where id=7; -update noar tt set v0='FUW6WIX' where id=8; -update noar ti set v0='FUW6WIX' where id=8; -update noar tt set b0='H8VRSCX1WVZYF' where id=8; -update noar ti set b0='H8VRSCX1WVZYF' where id=8; -update noar tt set v0='UNAL2NHBXNCR35S1YFB20I4' where id=8; -update noar ti set v0='UNAL2NHBXNCR35S1YFB20I4' where id=8; -update noar tt set b1='I6HP7WPT4MA79TY4GB9OSPGI5BRT' where id=8; -update noar ti set b1='I6HP7WPT4MA79TY4GB9OSPGI5BRT' where id=8; -update noar tt set v0='A7PAMWP9XUOM0YKNQYQJHPIG1' where id=8; -update noar ti set v0='A7PAMWP9XUOM0YKNQYQJHPIG1' where id=8; -update noar tt set b2='Q39' where id=8; -update noar ti set b2='Q39' where id=8; -update noar tt set v0='46MAB4BS5LJX' where id=9; -update noar ti set v0='46MAB4BS5LJX' where id=9; -update noar tt set b0='1MA85EZZ6BKKLVA1E' where id=9; -update noar ti set b0='1MA85EZZ6BKKLVA1E' where id=9; -update noar tt set v0='R7L37HWO3RQSSLIE75B' where id=9; -update noar ti set v0='R7L37HWO3RQSSLIE75B' where id=9; -update noar tt set b1='E6EKMS4MBVHBHS' where id=9; -update noar ti set b1='E6EKMS4MBVHBHS' where id=9; -update noar tt set v0='ALX9L42TRUA' where id=9; -update noar ti set v0='ALX9L42TRUA' where id=9; -update noar tt set b2='MNW5PAT1A64ODMAPE6WIAYHZUYS5Y5Y5' where id=9; -update noar ti set b2='MNW5PAT1A64ODMAPE6WIAYHZUYS5Y5Y5' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 mediumblob not null, - b1 tinyblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='KLGE0BG7GWKR4P' where id=1; -update noar ti set v0='KLGE0BG7GWKR4P' where id=1; -update noar tt set b0='BLJ1O9EZEZ2GZADV0Z72OHNG0' where id=1; -update noar ti set b0='BLJ1O9EZEZ2GZADV0Z72OHNG0' where id=1; -update noar tt set v0='Q1SJNXU7G153XSRY8' where id=1; -update noar ti set v0='Q1SJNXU7G153XSRY8' where id=1; -update noar tt set b1='8' where id=1; -update noar ti set b1='8' where id=1; -update noar tt set v0='FR' where id=1; -update noar ti set v0='FR' where id=1; -update noar tt set b2='RIYPQ5VFY' where id=1; -update noar ti set b2='RIYPQ5VFY' where id=1; -update noar tt set v0='237G' where id=2; -update noar ti set v0='237G' where id=2; -update noar tt set b0='XMDY7LW' where id=2; -update noar ti set b0='XMDY7LW' where id=2; -update noar tt set v0='KNPAXKN9XG5MVX8' where id=2; -update noar ti set v0='KNPAXKN9XG5MVX8' where id=2; -update noar tt set b1='Y7JNKK97HQVNVVUURW' where id=2; -update noar ti set b1='Y7JNKK97HQVNVVUURW' where id=2; -update noar tt set v0='M0SCYZSSUKLQTPN' where id=2; -update noar ti set v0='M0SCYZSSUKLQTPN' where id=2; -update noar tt set b2='5VGR7' where id=2; -update noar ti set b2='5VGR7' where id=2; -update noar tt set v0='EESXJO4F6CQS5W0WUY8GO6UVVNCPO' where id=3; -update noar ti set v0='EESXJO4F6CQS5W0WUY8GO6UVVNCPO' where id=3; -update noar tt set b0='BQQW7Y' where id=3; -update noar ti set b0='BQQW7Y' where id=3; -update noar tt set v0='332B5E41D0TL27WPC32YKOUIK9VXXBK' where id=3; -update noar ti set v0='332B5E41D0TL27WPC32YKOUIK9VXXBK' where id=3; -update noar tt set b1='YEPVCUALXL2' where id=3; -update noar ti set b1='YEPVCUALXL2' where id=3; -update noar tt set v0='IKCWWIE0QO' where id=3; -update noar ti set v0='IKCWWIE0QO' where id=3; -update noar tt set b2='F31IGIYI' where id=3; -update noar ti set b2='F31IGIYI' where id=3; -update noar tt set v0='JIZ5FPVLA3X36TNV4MXWDEWFDW6I7S' where id=4; -update noar ti set v0='JIZ5FPVLA3X36TNV4MXWDEWFDW6I7S' where id=4; -update noar tt set b0='EWOCGB26DM8YF7MXCT3' where id=4; -update noar ti set b0='EWOCGB26DM8YF7MXCT3' where id=4; -update noar tt set v0='Y24O6Z57HEYAMRUR6WAZY2P' where id=4; -update noar ti set v0='Y24O6Z57HEYAMRUR6WAZY2P' where id=4; -update noar tt set b1='Y0THT5KAZ8UHEOOV1E8' where id=4; -update noar ti set b1='Y0THT5KAZ8UHEOOV1E8' where id=4; -update noar tt set v0='1HBUNVLNAQIGYMDYGG9T41K867R5653' where id=4; -update noar ti set v0='1HBUNVLNAQIGYMDYGG9T41K867R5653' where id=4; -update noar tt set b2='KIQHHS0KOJQ3SQKALUG' where id=4; -update noar ti set b2='KIQHHS0KOJQ3SQKALUG' where id=4; -update noar tt set v0='HXHNY8C9BOTK0H6FWNUQIQCSHXX70WI' where id=5; -update noar ti set v0='HXHNY8C9BOTK0H6FWNUQIQCSHXX70WI' where id=5; -update noar tt set b0='5Q' where id=5; -update noar ti set b0='5Q' where id=5; -update noar tt set v0='K1CJT8GQD1UHA63F0N' where id=5; -update noar ti set v0='K1CJT8GQD1UHA63F0N' where id=5; -update noar tt set b1='WR95HCF6HLDZHG9UURXOL2VBPOJ4K5WL' where id=5; -update noar ti set b1='WR95HCF6HLDZHG9UURXOL2VBPOJ4K5WL' where id=5; -update noar tt set v0='W52UW6TBQAWHAPBSWZNRN' where id=5; -update noar ti set v0='W52UW6TBQAWHAPBSWZNRN' where id=5; -update noar tt set b2='LZT4AZN8PS63EIIOSLES0I5' where id=5; -update noar ti set b2='LZT4AZN8PS63EIIOSLES0I5' where id=5; -update noar tt set v0='HEQVS' where id=6; -update noar ti set v0='HEQVS' where id=6; -update noar tt set b0='H3ZETYUG5Y0N' where id=6; -update noar ti set b0='H3ZETYUG5Y0N' where id=6; -update noar tt set v0='3ZT5A07KT7NERJGHY' where id=6; -update noar ti set v0='3ZT5A07KT7NERJGHY' where id=6; -update noar tt set b1='F3OZQNNAH69UF8Q5AK4C3YSKBU' where id=6; -update noar ti set b1='F3OZQNNAH69UF8Q5AK4C3YSKBU' where id=6; -update noar tt set v0='SWOWN1JZHL38W1P7P5S07CMB4SHI2' where id=6; -update noar ti set v0='SWOWN1JZHL38W1P7P5S07CMB4SHI2' where id=6; -update noar tt set b2='JAVGZR72FC' where id=6; -update noar ti set b2='JAVGZR72FC' where id=6; -update noar tt set v0='SER7TJTYZRIATEQTSIHF9H9806' where id=7; -update noar ti set v0='SER7TJTYZRIATEQTSIHF9H9806' where id=7; -update noar tt set b0='PQXT8I1N64G' where id=7; -update noar ti set b0='PQXT8I1N64G' where id=7; -update noar tt set v0='S6T2RI2L4XNLKENHPZFHBMPIN' where id=7; -update noar ti set v0='S6T2RI2L4XNLKENHPZFHBMPIN' where id=7; -update noar tt set b1='EFS' where id=7; -update noar ti set b1='EFS' where id=7; -update noar tt set v0='0RZ666C7PDJXUYO6CTD3J0R' where id=7; -update noar ti set v0='0RZ666C7PDJXUYO6CTD3J0R' where id=7; -update noar tt set b2='L9SBW' where id=7; -update noar ti set b2='L9SBW' where id=7; -update noar tt set v0='7VNXQADY57ECUG2ED2C3U' where id=8; -update noar ti set v0='7VNXQADY57ECUG2ED2C3U' where id=8; -update noar tt set b0='DW7WRRQI' where id=8; -update noar ti set b0='DW7WRRQI' where id=8; -update noar tt set v0='0A9ELQNQS2R0GTV9V2HB' where id=8; -update noar ti set v0='0A9ELQNQS2R0GTV9V2HB' where id=8; -update noar tt set b1='MMJF62JE8PAN4Q2UZ' where id=8; -update noar ti set b1='MMJF62JE8PAN4Q2UZ' where id=8; -update noar tt set v0='JIY7E' where id=8; -update noar ti set v0='JIY7E' where id=8; -update noar tt set b2='YQJ7WDQU' where id=8; -update noar ti set b2='YQJ7WDQU' where id=8; -update noar tt set v0='VWC4731W82R4OZKKI8JQPZP03W' where id=9; -update noar ti set v0='VWC4731W82R4OZKKI8JQPZP03W' where id=9; -update noar tt set b0='KW08QEZJ4ZGHDA486J' where id=9; -update noar ti set b0='KW08QEZJ4ZGHDA486J' where id=9; -update noar tt set v0='ST0TH03' where id=9; -update noar ti set v0='ST0TH03' where id=9; -update noar tt set b1='K5EF' where id=9; -update noar ti set b1='K5EF' where id=9; -update noar tt set v0='4TPV0RNCWLXV75U5FK7MJ3X86C74' where id=9; -update noar ti set v0='4TPV0RNCWLXV75U5FK7MJ3X86C74' where id=9; -update noar tt set b2='H4G7' where id=9; -update noar ti set b2='H4G7' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 mediumblob null, - b1 tinyblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='J9REEBMPRETAQ5CONMO4J8N' where id=1; -update noar ti set v0='J9REEBMPRETAQ5CONMO4J8N' where id=1; -update noar tt set b0='93UVSGIVGT42ADLDT3NK' where id=1; -update noar ti set b0='93UVSGIVGT42ADLDT3NK' where id=1; -update noar tt set v0='WL4TDVC84YCAY7QYOBPV9V0Z25PB1U05' where id=1; -update noar ti set v0='WL4TDVC84YCAY7QYOBPV9V0Z25PB1U05' where id=1; -update noar tt set b1='YEM4' where id=1; -update noar ti set b1='YEM4' where id=1; -update noar tt set v0='ATIKHSJSXX3720ISOVEMIW4M' where id=1; -update noar ti set v0='ATIKHSJSXX3720ISOVEMIW4M' where id=1; -update noar tt set b2='0TPJWGS1ZPIYLTKK5RSPJABLTAS5W' where id=1; -update noar ti set b2='0TPJWGS1ZPIYLTKK5RSPJABLTAS5W' where id=1; -update noar tt set v0='KCFH382CADV7BCUP5' where id=2; -update noar ti set v0='KCFH382CADV7BCUP5' where id=2; -update noar tt set b0='4V1K' where id=2; -update noar ti set b0='4V1K' where id=2; -update noar tt set v0='XYQY38CB73U23WNHBOQWVDXWKBLU' where id=2; -update noar ti set v0='XYQY38CB73U23WNHBOQWVDXWKBLU' where id=2; -update noar tt set b1='S6SCH0N9QR165WKECE86TY318R' where id=2; -update noar ti set b1='S6SCH0N9QR165WKECE86TY318R' where id=2; -update noar tt set v0='F6' where id=2; -update noar ti set v0='F6' where id=2; -update noar tt set b2='Q72KHSLF2AZ32KUQCL6VETN5QWQ4OPHX' where id=2; -update noar ti set b2='Q72KHSLF2AZ32KUQCL6VETN5QWQ4OPHX' where id=2; -update noar tt set v0='U05SSGF3Q' where id=3; -update noar ti set v0='U05SSGF3Q' where id=3; -update noar tt set b0='2YLSV16THLRB8RRM0XTEW5GN' where id=3; -update noar ti set b0='2YLSV16THLRB8RRM0XTEW5GN' where id=3; -update noar tt set v0='0I53F7N2KQ6RK5EWE0G' where id=3; -update noar ti set v0='0I53F7N2KQ6RK5EWE0G' where id=3; -update noar tt set b1='LG8M' where id=3; -update noar ti set b1='LG8M' where id=3; -update noar tt set v0='6Y' where id=3; -update noar ti set v0='6Y' where id=3; -update noar tt set b2='OB1ZN9DZ2' where id=3; -update noar ti set b2='OB1ZN9DZ2' where id=3; -update noar tt set v0='8YXZ9NUR8YO53CTBN4LPAB56D3E5KU1' where id=4; -update noar ti set v0='8YXZ9NUR8YO53CTBN4LPAB56D3E5KU1' where id=4; -update noar tt set b0='F653BK' where id=4; -update noar ti set b0='F653BK' where id=4; -update noar tt set v0='I7S2U0PKETL2X0H3LP9AY9CESZRD9T' where id=4; -update noar ti set v0='I7S2U0PKETL2X0H3LP9AY9CESZRD9T' where id=4; -update noar tt set b1='CJDV9DO5FNDLRZBYXEYGT7FDFW2622KP' where id=4; -update noar ti set b1='CJDV9DO5FNDLRZBYXEYGT7FDFW2622KP' where id=4; -update noar tt set v0='HWFV21CM0EKOEI6MGHBZBAMV' where id=4; -update noar ti set v0='HWFV21CM0EKOEI6MGHBZBAMV' where id=4; -update noar tt set b2='VO35OQ2UKT8YZ5NDZQ5A' where id=4; -update noar ti set b2='VO35OQ2UKT8YZ5NDZQ5A' where id=4; -update noar tt set v0='6RG8BSDUBAAXTUT' where id=5; -update noar ti set v0='6RG8BSDUBAAXTUT' where id=5; -update noar tt set b0='JFZ86SIA1BRLAB2KE7G827WHS' where id=5; -update noar ti set b0='JFZ86SIA1BRLAB2KE7G827WHS' where id=5; -update noar tt set v0='6RYV2XZ6HV' where id=5; -update noar ti set v0='6RYV2XZ6HV' where id=5; -update noar tt set b1='C3LE5CEWZBLW443BA5Q' where id=5; -update noar ti set b1='C3LE5CEWZBLW443BA5Q' where id=5; -update noar tt set v0='QAL99WWP5Z2XCPIJR5S48H' where id=5; -update noar ti set v0='QAL99WWP5Z2XCPIJR5S48H' where id=5; -update noar tt set b2='X5ZZVU1FRZ4PWLA5VW5BZC' where id=5; -update noar ti set b2='X5ZZVU1FRZ4PWLA5VW5BZC' where id=5; -update noar tt set v0='DR0O8WZW6AFNK' where id=6; -update noar ti set v0='DR0O8WZW6AFNK' where id=6; -update noar tt set b0='4XR4VNNFZU' where id=6; -update noar ti set b0='4XR4VNNFZU' where id=6; -update noar tt set v0='0GPD46WHNONL02OXLIW1GYBMW5DEI' where id=6; -update noar ti set v0='0GPD46WHNONL02OXLIW1GYBMW5DEI' where id=6; -update noar tt set b1='ARVDJUKONFYSWXXJLG25VZZAKGR7TR' where id=6; -update noar ti set b1='ARVDJUKONFYSWXXJLG25VZZAKGR7TR' where id=6; -update noar tt set v0='D' where id=6; -update noar ti set v0='D' where id=6; -update noar tt set b2='OOY63370OI4J' where id=6; -update noar ti set b2='OOY63370OI4J' where id=6; -update noar tt set v0='MJQLUEB9L315BHQLAKXUQDEDHSLU7' where id=7; -update noar ti set v0='MJQLUEB9L315BHQLAKXUQDEDHSLU7' where id=7; -update noar tt set b0='C9FUDV7C6CCJ13CI' where id=7; -update noar ti set b0='C9FUDV7C6CCJ13CI' where id=7; -update noar tt set v0='3U1JDTD3HA' where id=7; -update noar ti set v0='3U1JDTD3HA' where id=7; -update noar tt set b1='K9BY0GLPVJ6WEZ1OY84UEB4ET' where id=7; -update noar ti set b1='K9BY0GLPVJ6WEZ1OY84UEB4ET' where id=7; -update noar tt set v0='1ZGE4IRWW1MAN' where id=7; -update noar ti set v0='1ZGE4IRWW1MAN' where id=7; -update noar tt set b2='KDWZHUVAAVUKVY14URSBPNWZQXC' where id=7; -update noar ti set b2='KDWZHUVAAVUKVY14URSBPNWZQXC' where id=7; -update noar tt set v0='CYE53QBP5MEWX0UYB8D2M' where id=8; -update noar ti set v0='CYE53QBP5MEWX0UYB8D2M' where id=8; -update noar tt set b0='MO0GUW56J4MNKJ4R611M0RU' where id=8; -update noar ti set b0='MO0GUW56J4MNKJ4R611M0RU' where id=8; -update noar tt set v0='PH1PZGX8UYUX5614F2HYBRNXROMV' where id=8; -update noar ti set v0='PH1PZGX8UYUX5614F2HYBRNXROMV' where id=8; -update noar tt set b1='C57TXEZCYA6V' where id=8; -update noar ti set b1='C57TXEZCYA6V' where id=8; -update noar tt set v0='ZE' where id=8; -update noar ti set v0='ZE' where id=8; -update noar tt set b2='G2B67SGW4' where id=8; -update noar ti set b2='G2B67SGW4' where id=8; -update noar tt set v0='JYY09FG2DJWI0FXS5V' where id=9; -update noar ti set v0='JYY09FG2DJWI0FXS5V' where id=9; -update noar tt set b0='BW71ETJ0WTIEEW0' where id=9; -update noar ti set b0='BW71ETJ0WTIEEW0' where id=9; -update noar tt set v0='MDS1PX2A' where id=9; -update noar ti set v0='MDS1PX2A' where id=9; -update noar tt set b1='R96ODXV' where id=9; -update noar ti set b1='R96ODXV' where id=9; -update noar tt set v0='FIX2TS4ME60JF863SQBM' where id=9; -update noar ti set v0='FIX2TS4ME60JF863SQBM' where id=9; -update noar tt set b2='05N115LPDHX2MX7FM9K9CNG' where id=9; -update noar ti set b2='05N115LPDHX2MX7FM9K9CNG' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 mediumblob null, - b1 tinyblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='C8AVVU3YZ3QQZEQG7Q5BLY2IPKPG' where id=1; -update noar ti set v0='C8AVVU3YZ3QQZEQG7Q5BLY2IPKPG' where id=1; -update noar tt set b0='2LRGW9RUEYNKU2OQOZYZOHLSL7YNCQXA' where id=1; -update noar ti set b0='2LRGW9RUEYNKU2OQOZYZOHLSL7YNCQXA' where id=1; -update noar tt set v0='M' where id=1; -update noar ti set v0='M' where id=1; -update noar tt set b1='LD407W9AAO2CCSV' where id=1; -update noar ti set b1='LD407W9AAO2CCSV' where id=1; -update noar tt set v0='P' where id=1; -update noar ti set v0='P' where id=1; -update noar tt set b2='336YN54X0HJMTEG' where id=1; -update noar ti set b2='336YN54X0HJMTEG' where id=1; -update noar tt set v0='A34N0MTKXF6HO6DCO7DZXG' where id=2; -update noar ti set v0='A34N0MTKXF6HO6DCO7DZXG' where id=2; -update noar tt set b0='I14HKE9VOC9SYS7K6PS8GONN46B' where id=2; -update noar ti set b0='I14HKE9VOC9SYS7K6PS8GONN46B' where id=2; -update noar tt set v0='SD5XJNJGOEOUOB0U2UQ0' where id=2; -update noar ti set v0='SD5XJNJGOEOUOB0U2UQ0' where id=2; -update noar tt set b1='L1WQBU4' where id=2; -update noar ti set b1='L1WQBU4' where id=2; -update noar tt set v0='JHZMA' where id=2; -update noar ti set v0='JHZMA' where id=2; -update noar tt set b2='IPZ1PVKZM2B8A66Q21XUY8HFQL8NEARS' where id=2; -update noar ti set b2='IPZ1PVKZM2B8A66Q21XUY8HFQL8NEARS' where id=2; -update noar tt set v0='8VMXFJ614TAO2KR1' where id=3; -update noar ti set v0='8VMXFJ614TAO2KR1' where id=3; -update noar tt set b0='3G2E6W7D0DY4GEE' where id=3; -update noar ti set b0='3G2E6W7D0DY4GEE' where id=3; -update noar tt set v0='QO42CBU3WA098CACF' where id=3; -update noar ti set v0='QO42CBU3WA098CACF' where id=3; -update noar tt set b1='J462SNFA2OQC96VK830NDN7IPREC0GY' where id=3; -update noar ti set b1='J462SNFA2OQC96VK830NDN7IPREC0GY' where id=3; -update noar tt set v0='IXR3ORU5ZE' where id=3; -update noar ti set v0='IXR3ORU5ZE' where id=3; -update noar tt set b2='HE' where id=3; -update noar ti set b2='HE' where id=3; -update noar tt set v0='A1GCOSBOTOAK87J8C6E5L44' where id=4; -update noar ti set v0='A1GCOSBOTOAK87J8C6E5L44' where id=4; -update noar tt set b0='C9GJYOYXBJM8K3O446MXGHLC' where id=4; -update noar ti set b0='C9GJYOYXBJM8K3O446MXGHLC' where id=4; -update noar tt set v0='NKTFZ5CIDGOAQG' where id=4; -update noar ti set v0='NKTFZ5CIDGOAQG' where id=4; -update noar tt set b1='4I7QEP' where id=4; -update noar ti set b1='4I7QEP' where id=4; -update noar tt set v0='JXW0ZGKPU2880XKI' where id=4; -update noar ti set v0='JXW0ZGKPU2880XKI' where id=4; -update noar tt set b2='4JIYJI' where id=4; -update noar ti set b2='4JIYJI' where id=4; -update noar tt set v0='2827S8JC1AQQD0K4D9RGTR914' where id=5; -update noar ti set v0='2827S8JC1AQQD0K4D9RGTR914' where id=5; -update noar tt set b0='7MZBUNA' where id=5; -update noar ti set b0='7MZBUNA' where id=5; -update noar tt set v0='KWZFDFH4WMCAWJPD7' where id=5; -update noar ti set v0='KWZFDFH4WMCAWJPD7' where id=5; -update noar tt set b1='MTWJCGQM4P2BU' where id=5; -update noar ti set b1='MTWJCGQM4P2BU' where id=5; -update noar tt set v0='MV98QWGBLXPYUQ' where id=5; -update noar ti set v0='MV98QWGBLXPYUQ' where id=5; -update noar tt set b2='UDMCF0CC0OGWHNRT95QYTAQKBGB' where id=5; -update noar ti set b2='UDMCF0CC0OGWHNRT95QYTAQKBGB' where id=5; -update noar tt set v0='LBHBCQC07BFAMTYSEEXU5J' where id=6; -update noar ti set v0='LBHBCQC07BFAMTYSEEXU5J' where id=6; -update noar tt set b0='2XKH9L' where id=6; -update noar ti set b0='2XKH9L' where id=6; -update noar tt set v0='TF' where id=6; -update noar ti set v0='TF' where id=6; -update noar tt set b1='O9YD3BF' where id=6; -update noar ti set b1='O9YD3BF' where id=6; -update noar tt set v0='HKIZIRFOQC' where id=6; -update noar ti set v0='HKIZIRFOQC' where id=6; -update noar tt set b2='0I0BRNHZ02J6JPJCIZQ2RQ9' where id=6; -update noar ti set b2='0I0BRNHZ02J6JPJCIZQ2RQ9' where id=6; -update noar tt set v0='9AL1RRIHNI8Z4OZP85ZAJWLN4F46FKA' where id=7; -update noar ti set v0='9AL1RRIHNI8Z4OZP85ZAJWLN4F46FKA' where id=7; -update noar tt set b0='6IO5DIEN55YFFLHMMJB64O4G' where id=7; -update noar ti set b0='6IO5DIEN55YFFLHMMJB64O4G' where id=7; -update noar tt set v0='U68VEVJS35X4HPUIQ1XN' where id=7; -update noar ti set v0='U68VEVJS35X4HPUIQ1XN' where id=7; -update noar tt set b1='QB70Q4KTKST9IE2' where id=7; -update noar ti set b1='QB70Q4KTKST9IE2' where id=7; -update noar tt set v0='EZH541YPJZRRZ6DUDVUU5L' where id=7; -update noar ti set v0='EZH541YPJZRRZ6DUDVUU5L' where id=7; -update noar tt set b2='1BFYY05IWUR0FY4YWRH5G' where id=7; -update noar ti set b2='1BFYY05IWUR0FY4YWRH5G' where id=7; -update noar tt set v0='HE2RTXDKYLB' where id=8; -update noar ti set v0='HE2RTXDKYLB' where id=8; -update noar tt set b0='H8QTFZBS6ETYUODHQPSHKH8NX' where id=8; -update noar ti set b0='H8QTFZBS6ETYUODHQPSHKH8NX' where id=8; -update noar tt set v0='KC8QDE5N8DLDMPOQHO2' where id=8; -update noar ti set v0='KC8QDE5N8DLDMPOQHO2' where id=8; -update noar tt set b1='CU0Y2UUFC3DHBWJAV8S1AB0' where id=8; -update noar ti set b1='CU0Y2UUFC3DHBWJAV8S1AB0' where id=8; -update noar tt set v0='2LXG6CREDZKIQD' where id=8; -update noar ti set v0='2LXG6CREDZKIQD' where id=8; -update noar tt set b2='X' where id=8; -update noar ti set b2='X' where id=8; -update noar tt set v0='6' where id=9; -update noar ti set v0='6' where id=9; -update noar tt set b0='1M4EB0VTBQ1FYQQR8J5' where id=9; -update noar ti set b0='1M4EB0VTBQ1FYQQR8J5' where id=9; -update noar tt set v0='60PTRWJG5X7XCUOX' where id=9; -update noar ti set v0='60PTRWJG5X7XCUOX' where id=9; -update noar tt set b1='JQ9KAN418N7N7LXN88N84EVH' where id=9; -update noar ti set b1='JQ9KAN418N7N7LXN88N84EVH' where id=9; -update noar tt set v0='X77FOJINSWXEPW' where id=9; -update noar ti set v0='X77FOJINSWXEPW' where id=9; -update noar tt set b2='I4Z0LC' where id=9; -update noar ti set b2='I4Z0LC' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 mediumblob not null, - b1 tinyblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='17XW' where id=1; -update noar ti set v0='17XW' where id=1; -update noar tt set b0='OGZ' where id=1; -update noar ti set b0='OGZ' where id=1; -update noar tt set v0='XSVDXTHMV4KKHHCUKUE' where id=1; -update noar ti set v0='XSVDXTHMV4KKHHCUKUE' where id=1; -update noar tt set b1='9ZYEQP6UZWWO8MAEJ3TRO0AWPBC5MN' where id=1; -update noar ti set b1='9ZYEQP6UZWWO8MAEJ3TRO0AWPBC5MN' where id=1; -update noar tt set v0='K09COWECDCM6G1KK5L' where id=1; -update noar ti set v0='K09COWECDCM6G1KK5L' where id=1; -update noar tt set b2='22U50ZPB' where id=1; -update noar ti set b2='22U50ZPB' where id=1; -update noar tt set v0='BF6VSD4W6R258AGZS6HTH' where id=2; -update noar ti set v0='BF6VSD4W6R258AGZS6HTH' where id=2; -update noar tt set b0='IDE5YAXZOU40I' where id=2; -update noar ti set b0='IDE5YAXZOU40I' where id=2; -update noar tt set v0='TT0G1WAW0323S6LR6P9U8E2OSXD37Q' where id=2; -update noar ti set v0='TT0G1WAW0323S6LR6P9U8E2OSXD37Q' where id=2; -update noar tt set b1='C43MAKTB0IHL36UVF8X3IJ8X3D' where id=2; -update noar ti set b1='C43MAKTB0IHL36UVF8X3IJ8X3D' where id=2; -update noar tt set v0='EYTUME7QTT7Q10WYISERBBDR' where id=2; -update noar ti set v0='EYTUME7QTT7Q10WYISERBBDR' where id=2; -update noar tt set b2='SOBU4VG6R791UNM' where id=2; -update noar ti set b2='SOBU4VG6R791UNM' where id=2; -update noar tt set v0='P2VL4MEOOQQKHSFQJ8' where id=3; -update noar ti set v0='P2VL4MEOOQQKHSFQJ8' where id=3; -update noar tt set b0='S' where id=3; -update noar ti set b0='S' where id=3; -update noar tt set v0='PXSW5H35H0M6JUHLQ8EYMSZ6' where id=3; -update noar ti set v0='PXSW5H35H0M6JUHLQ8EYMSZ6' where id=3; -update noar tt set b1='Y1X' where id=3; -update noar ti set b1='Y1X' where id=3; -update noar tt set v0='E5IORNATZ9A9ZZW' where id=3; -update noar ti set v0='E5IORNATZ9A9ZZW' where id=3; -update noar tt set b2='8G9TV6GNBG2MT' where id=3; -update noar ti set b2='8G9TV6GNBG2MT' where id=3; -update noar tt set v0='IX0TTYZ42IN4UXLFV4DAEIOPMUFD' where id=4; -update noar ti set v0='IX0TTYZ42IN4UXLFV4DAEIOPMUFD' where id=4; -update noar tt set b0='P5572WN57VHX0CGN73PKIHSOWZGFJ7' where id=4; -update noar ti set b0='P5572WN57VHX0CGN73PKIHSOWZGFJ7' where id=4; -update noar tt set v0='4WU63F4PTPFJPZ4S7W7FRPVK7VK' where id=4; -update noar ti set v0='4WU63F4PTPFJPZ4S7W7FRPVK7VK' where id=4; -update noar tt set b1='GCFDECVIP0FZX8QTKD5H71' where id=4; -update noar ti set b1='GCFDECVIP0FZX8QTKD5H71' where id=4; -update noar tt set v0='AT126111KT' where id=4; -update noar ti set v0='AT126111KT' where id=4; -update noar tt set b2='C2ZSEGBWSYDE' where id=4; -update noar ti set b2='C2ZSEGBWSYDE' where id=4; -update noar tt set v0='0EA7QDPMS9EZP5EBV' where id=5; -update noar ti set v0='0EA7QDPMS9EZP5EBV' where id=5; -update noar tt set b0='O1U9K7MJPG5IKCGG6EJBQ0YCPM' where id=5; -update noar ti set b0='O1U9K7MJPG5IKCGG6EJBQ0YCPM' where id=5; -update noar tt set v0='71SGU26Z78S4A4X' where id=5; -update noar ti set v0='71SGU26Z78S4A4X' where id=5; -update noar tt set b1='1O3M9RQES' where id=5; -update noar ti set b1='1O3M9RQES' where id=5; -update noar tt set v0='4S26QD4BGJXH' where id=5; -update noar ti set v0='4S26QD4BGJXH' where id=5; -update noar tt set b2='CZQ9DJLU85E' where id=5; -update noar ti set b2='CZQ9DJLU85E' where id=5; -update noar tt set v0='TTME' where id=6; -update noar ti set v0='TTME' where id=6; -update noar tt set b0='S1PH4AODP9W' where id=6; -update noar ti set b0='S1PH4AODP9W' where id=6; -update noar tt set v0='UQ88N1SYLB5FLESZQY84' where id=6; -update noar ti set v0='UQ88N1SYLB5FLESZQY84' where id=6; -update noar tt set b1='6G34Z94VFXGBTSP' where id=6; -update noar ti set b1='6G34Z94VFXGBTSP' where id=6; -update noar tt set v0='PIA2TD38I4IFQ640DC54G8S5BJSZKL' where id=6; -update noar ti set v0='PIA2TD38I4IFQ640DC54G8S5BJSZKL' where id=6; -update noar tt set b2='907SEJ91BSE6J98LHCK8X' where id=6; -update noar ti set b2='907SEJ91BSE6J98LHCK8X' where id=6; -update noar tt set v0='6EBNR3DIYZA4Q9IBYCSOYTGBR' where id=7; -update noar ti set v0='6EBNR3DIYZA4Q9IBYCSOYTGBR' where id=7; -update noar tt set b0='LU0ULWC9BC9DLGWYZLY4LQFVUN4OOB' where id=7; -update noar ti set b0='LU0ULWC9BC9DLGWYZLY4LQFVUN4OOB' where id=7; -update noar tt set v0='7CUOXQOYDQSP' where id=7; -update noar ti set v0='7CUOXQOYDQSP' where id=7; -update noar tt set b1='L7WX5QTBE2EX2ULGOQ3WWWZDCQVD' where id=7; -update noar ti set b1='L7WX5QTBE2EX2ULGOQ3WWWZDCQVD' where id=7; -update noar tt set v0='YJ9DUUN' where id=7; -update noar ti set v0='YJ9DUUN' where id=7; -update noar tt set b2='VC3RBPJJST7SO14P61OL7U' where id=7; -update noar ti set b2='VC3RBPJJST7SO14P61OL7U' where id=7; -update noar tt set v0='LDNU1ZFW68FOSN64D32XLPRQ2OVUNPT3' where id=8; -update noar ti set v0='LDNU1ZFW68FOSN64D32XLPRQ2OVUNPT3' where id=8; -update noar tt set b0='469' where id=8; -update noar ti set b0='469' where id=8; -update noar tt set v0='C6B7RDY7ARAVYU6G1QBKYROF65YWEX' where id=8; -update noar ti set v0='C6B7RDY7ARAVYU6G1QBKYROF65YWEX' where id=8; -update noar tt set b1='H3TM3RBV8R7XEQYUH6A0OKKGX' where id=8; -update noar ti set b1='H3TM3RBV8R7XEQYUH6A0OKKGX' where id=8; -update noar tt set v0='QT2TOT5BWUK3O' where id=8; -update noar ti set v0='QT2TOT5BWUK3O' where id=8; -update noar tt set b2='442' where id=8; -update noar ti set b2='442' where id=8; -update noar tt set v0='BY8YQHNJ' where id=9; -update noar ti set v0='BY8YQHNJ' where id=9; -update noar tt set b0='ULAYW3ZNW3RSK7L8VI4JA0L0Y4Y2R3U' where id=9; -update noar ti set b0='ULAYW3ZNW3RSK7L8VI4JA0L0Y4Y2R3U' where id=9; -update noar tt set v0='WT7V3VQKGD1LDL83QH0' where id=9; -update noar ti set v0='WT7V3VQKGD1LDL83QH0' where id=9; -update noar tt set b1='IVNA2V4GI6YE2X6DG150YH25FP' where id=9; -update noar ti set b1='IVNA2V4GI6YE2X6DG150YH25FP' where id=9; -update noar tt set v0='PCBB88Q5' where id=9; -update noar ti set v0='PCBB88Q5' where id=9; -update noar tt set b2='0LTSCEZUVG03T2TKLJ7' where id=9; -update noar ti set b2='0LTSCEZUVG03T2TKLJ7' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 mediumblob not null, - b1 tinyblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='9F2UUEOR5EC0YD' where id=1; -update noar ti set v0='9F2UUEOR5EC0YD' where id=1; -update noar tt set b0='MH1FXFZZCZ4HDGMIAHPKJU9019TBWIY' where id=1; -update noar ti set b0='MH1FXFZZCZ4HDGMIAHPKJU9019TBWIY' where id=1; -update noar tt set v0='ZQT0V2616NTEI3HJZ9E9I6PBSWYUY' where id=1; -update noar ti set v0='ZQT0V2616NTEI3HJZ9E9I6PBSWYUY' where id=1; -update noar tt set b1='JXZ6GE0E8UNUATT2XKSJIYWODDT' where id=1; -update noar ti set b1='JXZ6GE0E8UNUATT2XKSJIYWODDT' where id=1; -update noar tt set v0='O1H6LD4EOEJ22SRRG6J2Z7N4GVW5F' where id=1; -update noar ti set v0='O1H6LD4EOEJ22SRRG6J2Z7N4GVW5F' where id=1; -update noar tt set b2='ZEDD87VDST9JWQ' where id=1; -update noar ti set b2='ZEDD87VDST9JWQ' where id=1; -update noar tt set v0='5CHAU3S25AQY8SN6EY' where id=2; -update noar ti set v0='5CHAU3S25AQY8SN6EY' where id=2; -update noar tt set b0='4GD' where id=2; -update noar ti set b0='4GD' where id=2; -update noar tt set v0='ID' where id=2; -update noar ti set v0='ID' where id=2; -update noar tt set b1='ABX51353GW74' where id=2; -update noar ti set b1='ABX51353GW74' where id=2; -update noar tt set v0='4OL46YHHX53CLRX6CRHOO1KP' where id=2; -update noar ti set v0='4OL46YHHX53CLRX6CRHOO1KP' where id=2; -update noar tt set b2='K6TE7H' where id=2; -update noar ti set b2='K6TE7H' where id=2; -update noar tt set v0='6P81VTSAAOD8CQHNGKZOE9T4LLFBM' where id=3; -update noar ti set v0='6P81VTSAAOD8CQHNGKZOE9T4LLFBM' where id=3; -update noar tt set b0='AKY82LUNMQLV8EZA7HQ0JQL5ZE0' where id=3; -update noar ti set b0='AKY82LUNMQLV8EZA7HQ0JQL5ZE0' where id=3; -update noar tt set v0='C52MMWSJJVDF5LFFTX4X' where id=3; -update noar ti set v0='C52MMWSJJVDF5LFFTX4X' where id=3; -update noar tt set b1='6NLAW6DZBAH1EZKX4KGIZBB8EJQHSGI' where id=3; -update noar ti set b1='6NLAW6DZBAH1EZKX4KGIZBB8EJQHSGI' where id=3; -update noar tt set v0='MDPRSO17N2M6F73' where id=3; -update noar ti set v0='MDPRSO17N2M6F73' where id=3; -update noar tt set b2='JGTCWBMCTTJZKFUUB9BSFY56' where id=3; -update noar ti set b2='JGTCWBMCTTJZKFUUB9BSFY56' where id=3; -update noar tt set v0='AC1F2LW6NACBU7J5PGQAJS9M' where id=4; -update noar ti set v0='AC1F2LW6NACBU7J5PGQAJS9M' where id=4; -update noar tt set b0='REEOS' where id=4; -update noar ti set b0='REEOS' where id=4; -update noar tt set v0='LL3H6A9N7CO1O1WJMR8SLFKGP1' where id=4; -update noar ti set v0='LL3H6A9N7CO1O1WJMR8SLFKGP1' where id=4; -update noar tt set b1='7' where id=4; -update noar ti set b1='7' where id=4; -update noar tt set v0='ASL84DR76KZU7M' where id=4; -update noar ti set v0='ASL84DR76KZU7M' where id=4; -update noar tt set b2='LEIX3YR91SYHP51DWFJGC9EZA0BA0PNA' where id=4; -update noar ti set b2='LEIX3YR91SYHP51DWFJGC9EZA0BA0PNA' where id=4; -update noar tt set v0='02HZ1E10ZE1' where id=5; -update noar ti set v0='02HZ1E10ZE1' where id=5; -update noar tt set b0='YJZE7ADA5BL2PCI4YO4OIH4Y0NRC1' where id=5; -update noar ti set b0='YJZE7ADA5BL2PCI4YO4OIH4Y0NRC1' where id=5; -update noar tt set v0='S8TYW9Q0J0FGJ' where id=5; -update noar ti set v0='S8TYW9Q0J0FGJ' where id=5; -update noar tt set b1='5IGK07FMJ8DWVMS6LEGT6Z0JUF588FQ' where id=5; -update noar ti set b1='5IGK07FMJ8DWVMS6LEGT6Z0JUF588FQ' where id=5; -update noar tt set v0='KR12ZOKEQJG65EBE9PV5PF' where id=5; -update noar ti set v0='KR12ZOKEQJG65EBE9PV5PF' where id=5; -update noar tt set b2='95O3DT' where id=5; -update noar ti set b2='95O3DT' where id=5; -update noar tt set v0='5BDWTVAASDLHR3LGSXS' where id=6; -update noar ti set v0='5BDWTVAASDLHR3LGSXS' where id=6; -update noar tt set b0='OUUPVAO5RXQMVR8E4US50P' where id=6; -update noar ti set b0='OUUPVAO5RXQMVR8E4US50P' where id=6; -update noar tt set v0='Y7BZZU4SK' where id=6; -update noar ti set v0='Y7BZZU4SK' where id=6; -update noar tt set b1='KBHOK4HSQA3PZTZK5VVXJOJ87X9YUVX' where id=6; -update noar ti set b1='KBHOK4HSQA3PZTZK5VVXJOJ87X9YUVX' where id=6; -update noar tt set v0='5KXY9TM50HIYD' where id=6; -update noar ti set v0='5KXY9TM50HIYD' where id=6; -update noar tt set b2='FFIYZA0A1FDQ9YJR471JUDWDEJGL9R' where id=6; -update noar ti set b2='FFIYZA0A1FDQ9YJR471JUDWDEJGL9R' where id=6; -update noar tt set v0='G09YGJ2MHVSNH9S44B5GAN' where id=7; -update noar ti set v0='G09YGJ2MHVSNH9S44B5GAN' where id=7; -update noar tt set b0='C' where id=7; -update noar ti set b0='C' where id=7; -update noar tt set v0='NO9M9ITFS42A' where id=7; -update noar ti set v0='NO9M9ITFS42A' where id=7; -update noar tt set b1='SUM8A946P6RJCE7DYQ' where id=7; -update noar ti set b1='SUM8A946P6RJCE7DYQ' where id=7; -update noar tt set v0='YC1ZA79C2IJKL' where id=7; -update noar ti set v0='YC1ZA79C2IJKL' where id=7; -update noar tt set b2='3BLZFQ6A' where id=7; -update noar ti set b2='3BLZFQ6A' where id=7; -update noar tt set v0='3IIXY1GTYISDJ276Y3' where id=8; -update noar ti set v0='3IIXY1GTYISDJ276Y3' where id=8; -update noar tt set b0='DUY5P4LN7DFX7M7U9HO' where id=8; -update noar ti set b0='DUY5P4LN7DFX7M7U9HO' where id=8; -update noar tt set v0='U36ECOKVIBROSDID9' where id=8; -update noar ti set v0='U36ECOKVIBROSDID9' where id=8; -update noar tt set b1='S2HT6JC8QN1PZFV9QKSXCUDA6O0XNK36' where id=8; -update noar ti set b1='S2HT6JC8QN1PZFV9QKSXCUDA6O0XNK36' where id=8; -update noar tt set v0='GV6CE' where id=8; -update noar ti set v0='GV6CE' where id=8; -update noar tt set b2='J7VFYOPJEE3SK' where id=8; -update noar ti set b2='J7VFYOPJEE3SK' where id=8; -update noar tt set v0='Q5UO' where id=9; -update noar ti set v0='Q5UO' where id=9; -update noar tt set b0='PFHFVJ0TM' where id=9; -update noar ti set b0='PFHFVJ0TM' where id=9; -update noar tt set v0='WVIDAGJ9IP' where id=9; -update noar ti set v0='WVIDAGJ9IP' where id=9; -update noar tt set b1='XS25A2C42I5NNMENIKUM0XX7IY' where id=9; -update noar ti set b1='XS25A2C42I5NNMENIKUM0XX7IY' where id=9; -update noar tt set v0='STL20D7YMU' where id=9; -update noar ti set v0='STL20D7YMU' where id=9; -update noar tt set b2='WIOXFUQVC85X30M' where id=9; -update noar ti set b2='WIOXFUQVC85X30M' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 mediumblob null, - b1 tinyblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='W157IUEO7WCM7LQVFUSHUQDU467' where id=1; -update noar ti set v0='W157IUEO7WCM7LQVFUSHUQDU467' where id=1; -update noar tt set b0='TSZWEEQWZ0B5GPUPS07RWEK5RG4UABD' where id=1; -update noar ti set b0='TSZWEEQWZ0B5GPUPS07RWEK5RG4UABD' where id=1; -update noar tt set v0='EGS51EG5SJIBCWN' where id=1; -update noar ti set v0='EGS51EG5SJIBCWN' where id=1; -update noar tt set b1='RT6CKA' where id=1; -update noar ti set b1='RT6CKA' where id=1; -update noar tt set v0='MKDBQ' where id=1; -update noar ti set v0='MKDBQ' where id=1; -update noar tt set b2='5J9BAFUHHFKACUMVWRV65NFOR74X' where id=1; -update noar ti set b2='5J9BAFUHHFKACUMVWRV65NFOR74X' where id=1; -update noar tt set v0='56XURDVW9' where id=2; -update noar ti set v0='56XURDVW9' where id=2; -update noar tt set b0='Z488EKIIKBV6QTW7KD' where id=2; -update noar ti set b0='Z488EKIIKBV6QTW7KD' where id=2; -update noar tt set v0='1098026SFEESCBGSLKJJKB093P' where id=2; -update noar ti set v0='1098026SFEESCBGSLKJJKB093P' where id=2; -update noar tt set b1='IDAHK2DRDGAJJKYO48' where id=2; -update noar ti set b1='IDAHK2DRDGAJJKYO48' where id=2; -update noar tt set v0='YABVGL24Z' where id=2; -update noar ti set v0='YABVGL24Z' where id=2; -update noar tt set b2='58PTBM67QPHIADXCP0O8TFRXSE' where id=2; -update noar ti set b2='58PTBM67QPHIADXCP0O8TFRXSE' where id=2; -update noar tt set v0='C4WK617Q6G3J6FLDRFNJ7OX2HMTGBYHU' where id=3; -update noar ti set v0='C4WK617Q6G3J6FLDRFNJ7OX2HMTGBYHU' where id=3; -update noar tt set b0='MBX1RN' where id=3; -update noar ti set b0='MBX1RN' where id=3; -update noar tt set v0='X2RPORBB1282PAKY4356TAC7' where id=3; -update noar ti set v0='X2RPORBB1282PAKY4356TAC7' where id=3; -update noar tt set b1='7XDBAAEIIW' where id=3; -update noar ti set b1='7XDBAAEIIW' where id=3; -update noar tt set v0='HVU0X2SDFW' where id=3; -update noar ti set v0='HVU0X2SDFW' where id=3; -update noar tt set b2='FU7IV5QTRRGDJIL21DINITLLP' where id=3; -update noar ti set b2='FU7IV5QTRRGDJIL21DINITLLP' where id=3; -update noar tt set v0='HRDG8HBV1ED3EO3VHTEVZ' where id=4; -update noar ti set v0='HRDG8HBV1ED3EO3VHTEVZ' where id=4; -update noar tt set b0='B' where id=4; -update noar ti set b0='B' where id=4; -update noar tt set v0='MP' where id=4; -update noar ti set v0='MP' where id=4; -update noar tt set b1='E7GEVUBQ1M' where id=4; -update noar ti set b1='E7GEVUBQ1M' where id=4; -update noar tt set v0='A1EGBNZ49BU9G3K2' where id=4; -update noar ti set v0='A1EGBNZ49BU9G3K2' where id=4; -update noar tt set b2='VNCTYBJV0G' where id=4; -update noar ti set b2='VNCTYBJV0G' where id=4; -update noar tt set v0='AH1WZFGX768YE8' where id=5; -update noar ti set v0='AH1WZFGX768YE8' where id=5; -update noar tt set b0='PI16IMFKEH2RJ9RXF8GUFH6SCU' where id=5; -update noar ti set b0='PI16IMFKEH2RJ9RXF8GUFH6SCU' where id=5; -update noar tt set v0='SLO7VCDGYETCWA20' where id=5; -update noar ti set v0='SLO7VCDGYETCWA20' where id=5; -update noar tt set b1='HIZJYKU9ZDET40EJB7H1G91H' where id=5; -update noar ti set b1='HIZJYKU9ZDET40EJB7H1G91H' where id=5; -update noar tt set v0='ZQYY51Y3OXUWI0752B9' where id=5; -update noar ti set v0='ZQYY51Y3OXUWI0752B9' where id=5; -update noar tt set b2='C' where id=5; -update noar ti set b2='C' where id=5; -update noar tt set v0='0NQW2B' where id=6; -update noar ti set v0='0NQW2B' where id=6; -update noar tt set b0='33MD91RAEZ' where id=6; -update noar ti set b0='33MD91RAEZ' where id=6; -update noar tt set v0='NP1OA916LHWGLLWSREF' where id=6; -update noar ti set v0='NP1OA916LHWGLLWSREF' where id=6; -update noar tt set b1='2LI6GZ14IMUJ7JFUN' where id=6; -update noar ti set b1='2LI6GZ14IMUJ7JFUN' where id=6; -update noar tt set v0='42896820IB7RI' where id=6; -update noar ti set v0='42896820IB7RI' where id=6; -update noar tt set b2='6E7CRPO8TGJERL57Y9AL4' where id=6; -update noar ti set b2='6E7CRPO8TGJERL57Y9AL4' where id=6; -update noar tt set v0='Y2DN9ITV' where id=7; -update noar ti set v0='Y2DN9ITV' where id=7; -update noar tt set b0='ZLGPSJGGRW77QKI9Z22VLYIIK8HMB' where id=7; -update noar ti set b0='ZLGPSJGGRW77QKI9Z22VLYIIK8HMB' where id=7; -update noar tt set v0='VTQISZV0EVNJTPQBLKE66OSDGGOTJA' where id=7; -update noar ti set v0='VTQISZV0EVNJTPQBLKE66OSDGGOTJA' where id=7; -update noar tt set b1='6L5XIGHXWANSEF2OWLL' where id=7; -update noar ti set b1='6L5XIGHXWANSEF2OWLL' where id=7; -update noar tt set v0='J5MI' where id=7; -update noar ti set v0='J5MI' where id=7; -update noar tt set b2='EG4PZZH25K' where id=7; -update noar ti set b2='EG4PZZH25K' where id=7; -update noar tt set v0='CX' where id=8; -update noar ti set v0='CX' where id=8; -update noar tt set b0='XMTQ0GG76YQMRNJJZFFI5D22V0HQG' where id=8; -update noar ti set b0='XMTQ0GG76YQMRNJJZFFI5D22V0HQG' where id=8; -update noar tt set v0='CEPOU4IEL6KZE2ZYHY7WR' where id=8; -update noar ti set v0='CEPOU4IEL6KZE2ZYHY7WR' where id=8; -update noar tt set b1='WH9E' where id=8; -update noar ti set b1='WH9E' where id=8; -update noar tt set v0='UBA36IC1BJZ360DDYVMAUS' where id=8; -update noar ti set v0='UBA36IC1BJZ360DDYVMAUS' where id=8; -update noar tt set b2='6UY7UBFUUSG75B76Z2BBUL51H1IL2UE' where id=8; -update noar ti set b2='6UY7UBFUUSG75B76Z2BBUL51H1IL2UE' where id=8; -update noar tt set v0='NHRP7TL8OSUL' where id=9; -update noar ti set v0='NHRP7TL8OSUL' where id=9; -update noar tt set b0='237OM' where id=9; -update noar ti set b0='237OM' where id=9; -update noar tt set v0='9FR1HH' where id=9; -update noar ti set v0='9FR1HH' where id=9; -update noar tt set b1='HKMHMNX5QDL0MJP333VXOAG9VP' where id=9; -update noar ti set b1='HKMHMNX5QDL0MJP333VXOAG9VP' where id=9; -update noar tt set v0='5U5' where id=9; -update noar ti set v0='5U5' where id=9; -update noar tt set b2='NI95R4YHI0FCK76B9QCQB7HXX9HJHV' where id=9; -update noar ti set b2='NI95R4YHI0FCK76B9QCQB7HXX9HJHV' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 mediumblob null, - b1 tinyblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='1BO1DNNP1E' where id=1; -update noar ti set v0='1BO1DNNP1E' where id=1; -update noar tt set b0='JKQ9TB1420A2A2XD6MOYTYQHDL' where id=1; -update noar ti set b0='JKQ9TB1420A2A2XD6MOYTYQHDL' where id=1; -update noar tt set v0='ZJ0PNKBMJBVIQD' where id=1; -update noar ti set v0='ZJ0PNKBMJBVIQD' where id=1; -update noar tt set b1='T' where id=1; -update noar ti set b1='T' where id=1; -update noar tt set v0='7L6Q6YLVIL6M0WUJAYOP' where id=1; -update noar ti set v0='7L6Q6YLVIL6M0WUJAYOP' where id=1; -update noar tt set b2='E613RECVZ471P4M3D0BU52' where id=1; -update noar ti set b2='E613RECVZ471P4M3D0BU52' where id=1; -update noar tt set v0='TCJZTUVLMGBAUK2EYQ8GQSH5MVJ' where id=2; -update noar ti set v0='TCJZTUVLMGBAUK2EYQ8GQSH5MVJ' where id=2; -update noar tt set b0='VWA9CZ2U07R9U' where id=2; -update noar ti set b0='VWA9CZ2U07R9U' where id=2; -update noar tt set v0='IZ485Z5O4W87TXUDKIQDM' where id=2; -update noar ti set v0='IZ485Z5O4W87TXUDKIQDM' where id=2; -update noar tt set b1='97H9MR' where id=2; -update noar ti set b1='97H9MR' where id=2; -update noar tt set v0='ZTQ4WAZA796DE7FW2RE8' where id=2; -update noar ti set v0='ZTQ4WAZA796DE7FW2RE8' where id=2; -update noar tt set b2='L7NA3RQ0NYUM887B3P3F0ERUIMQN' where id=2; -update noar ti set b2='L7NA3RQ0NYUM887B3P3F0ERUIMQN' where id=2; -update noar tt set v0='YLY4LQWGZ9R2U' where id=3; -update noar ti set v0='YLY4LQWGZ9R2U' where id=3; -update noar tt set b0='5A3F511Q' where id=3; -update noar ti set b0='5A3F511Q' where id=3; -update noar tt set v0='XNZWD29955QU5Z5VRXN6UN83' where id=3; -update noar ti set v0='XNZWD29955QU5Z5VRXN6UN83' where id=3; -update noar tt set b1='P6IORZWT6WY5J724D2O4G43PFMP10' where id=3; -update noar ti set b1='P6IORZWT6WY5J724D2O4G43PFMP10' where id=3; -update noar tt set v0='5RQXK' where id=3; -update noar ti set v0='5RQXK' where id=3; -update noar tt set b2='PMJ0Y2DUHE4' where id=3; -update noar ti set b2='PMJ0Y2DUHE4' where id=3; -update noar tt set v0='QHV78B9I8D3WOE' where id=4; -update noar ti set v0='QHV78B9I8D3WOE' where id=4; -update noar tt set b0='W4T3L8UKPE' where id=4; -update noar ti set b0='W4T3L8UKPE' where id=4; -update noar tt set v0='JYILDD' where id=4; -update noar ti set v0='JYILDD' where id=4; -update noar tt set b1='PM69E66IDALFHEGIXDINKD4SYR6M' where id=4; -update noar ti set b1='PM69E66IDALFHEGIXDINKD4SYR6M' where id=4; -update noar tt set v0='AY9V72MI82953VDAX1QZ8' where id=4; -update noar ti set v0='AY9V72MI82953VDAX1QZ8' where id=4; -update noar tt set b2='CSMCP8PJP556FRVFN6F3R3' where id=4; -update noar ti set b2='CSMCP8PJP556FRVFN6F3R3' where id=4; -update noar tt set v0='8ZCCTAUZI' where id=5; -update noar ti set v0='8ZCCTAUZI' where id=5; -update noar tt set b0='2O74R7TCE6HF5' where id=5; -update noar ti set b0='2O74R7TCE6HF5' where id=5; -update noar tt set v0='S' where id=5; -update noar ti set v0='S' where id=5; -update noar tt set b1='5WGXUS' where id=5; -update noar ti set b1='5WGXUS' where id=5; -update noar tt set v0='648JW68HGYL151YWKVQ7HR0BBCU' where id=5; -update noar ti set v0='648JW68HGYL151YWKVQ7HR0BBCU' where id=5; -update noar tt set b2='OGBX' where id=5; -update noar ti set b2='OGBX' where id=5; -update noar tt set v0='LNIACFCW0RJBBG01U' where id=6; -update noar ti set v0='LNIACFCW0RJBBG01U' where id=6; -update noar tt set b0='NYTCEPMJWJ' where id=6; -update noar ti set b0='NYTCEPMJWJ' where id=6; -update noar tt set v0='PA' where id=6; -update noar ti set v0='PA' where id=6; -update noar tt set b1='FZU9' where id=6; -update noar ti set b1='FZU9' where id=6; -update noar tt set v0='US7B749ROL8' where id=6; -update noar ti set v0='US7B749ROL8' where id=6; -update noar tt set b2='QFQ6PQO539RXNZ81H68LI2NU6RQ' where id=6; -update noar ti set b2='QFQ6PQO539RXNZ81H68LI2NU6RQ' where id=6; -update noar tt set v0='94ZUPABBW5C6TQH6VCQHZ031' where id=7; -update noar ti set v0='94ZUPABBW5C6TQH6VCQHZ031' where id=7; -update noar tt set b0='WCLYSOL83NAQ8FQ5' where id=7; -update noar ti set b0='WCLYSOL83NAQ8FQ5' where id=7; -update noar tt set v0='JGGHO' where id=7; -update noar ti set v0='JGGHO' where id=7; -update noar tt set b1='0QRRTAG1I2WK4HP4RKHS36BF8NCB' where id=7; -update noar ti set b1='0QRRTAG1I2WK4HP4RKHS36BF8NCB' where id=7; -update noar tt set v0='XR5S0ZUO2C1XI8QFHEKDQRAMJZ1' where id=7; -update noar ti set v0='XR5S0ZUO2C1XI8QFHEKDQRAMJZ1' where id=7; -update noar tt set b2='1E3BX30VGMBIAPF0LRJQ4NS5B58N8' where id=7; -update noar ti set b2='1E3BX30VGMBIAPF0LRJQ4NS5B58N8' where id=7; -update noar tt set v0='5WSYKYP9ERPVJ6FA3MIPLV' where id=8; -update noar ti set v0='5WSYKYP9ERPVJ6FA3MIPLV' where id=8; -update noar tt set b0='LCWFYGE0STUI' where id=8; -update noar ti set b0='LCWFYGE0STUI' where id=8; -update noar tt set v0='GO226N1Q295DKRVD' where id=8; -update noar ti set v0='GO226N1Q295DKRVD' where id=8; -update noar tt set b1='ETLTFA1FN2RMPE8N4ZWJ2751WU4NGP0V' where id=8; -update noar ti set b1='ETLTFA1FN2RMPE8N4ZWJ2751WU4NGP0V' where id=8; -update noar tt set v0='FOJ78559PBBV7VDDII0Q4UZQGL9TS' where id=8; -update noar ti set v0='FOJ78559PBBV7VDDII0Q4UZQGL9TS' where id=8; -update noar tt set b2='7BIQ7R2R0WNHRMTE9UO' where id=8; -update noar ti set b2='7BIQ7R2R0WNHRMTE9UO' where id=8; -update noar tt set v0='78UA7UZ8UTXCZARVYT4' where id=9; -update noar ti set v0='78UA7UZ8UTXCZARVYT4' where id=9; -update noar tt set b0='NNGL7UG0G8UJOMI8QTJP82PP' where id=9; -update noar ti set b0='NNGL7UG0G8UJOMI8QTJP82PP' where id=9; -update noar tt set v0='1SMS8S8GF0FO6ZJIQJSODBI80XJ' where id=9; -update noar ti set v0='1SMS8S8GF0FO6ZJIQJSODBI80XJ' where id=9; -update noar tt set b1='UW9FXM0' where id=9; -update noar ti set b1='UW9FXM0' where id=9; -update noar tt set v0='MJ5Z108TVNJR5X9S' where id=9; -update noar ti set v0='MJ5Z108TVNJR5X9S' where id=9; -update noar tt set b2='XVCIOCNQN5XFH818OM0TL3NL8' where id=9; -update noar ti set b2='XVCIOCNQN5XFH818OM0TL3NL8' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 mediumblob not null, - b1 tinyblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='PTGKA67MQ' where id=1; -update noar ti set v0='PTGKA67MQ' where id=1; -update noar tt set b0='0D0RNA0ETEE696AOKL0UFT4S' where id=1; -update noar ti set b0='0D0RNA0ETEE696AOKL0UFT4S' where id=1; -update noar tt set v0='4T3QICKQ' where id=1; -update noar ti set v0='4T3QICKQ' where id=1; -update noar tt set b1='Q8F82F5SJZXFSUTD9L094YYHHCB' where id=1; -update noar ti set b1='Q8F82F5SJZXFSUTD9L094YYHHCB' where id=1; -update noar tt set v0='1HI00E6U2ORLOY7BARCPIIU' where id=1; -update noar ti set v0='1HI00E6U2ORLOY7BARCPIIU' where id=1; -update noar tt set b2='98BQCNT0GBA3OJXVF' where id=1; -update noar ti set b2='98BQCNT0GBA3OJXVF' where id=1; -update noar tt set v0='TUIEG35EHKJ3AXBE0RUT76WZHZRGXRJ' where id=2; -update noar ti set v0='TUIEG35EHKJ3AXBE0RUT76WZHZRGXRJ' where id=2; -update noar tt set b0='WQMJB' where id=2; -update noar ti set b0='WQMJB' where id=2; -update noar tt set v0='N1JU16FYP58ZBN7QXWVP' where id=2; -update noar ti set v0='N1JU16FYP58ZBN7QXWVP' where id=2; -update noar tt set b1='X9YXP9DSUPMN17D' where id=2; -update noar ti set b1='X9YXP9DSUPMN17D' where id=2; -update noar tt set v0='YJ0W1MRM3WC1FB8B4OSUNFD3HKRQ3D' where id=2; -update noar ti set v0='YJ0W1MRM3WC1FB8B4OSUNFD3HKRQ3D' where id=2; -update noar tt set b2='B6AO2L2W116OWBX9BEC9WLXUAX2' where id=2; -update noar ti set b2='B6AO2L2W116OWBX9BEC9WLXUAX2' where id=2; -update noar tt set v0='1R9SFJW8Z9NU83' where id=3; -update noar ti set v0='1R9SFJW8Z9NU83' where id=3; -update noar tt set b0='P28' where id=3; -update noar ti set b0='P28' where id=3; -update noar tt set v0='KQYOF1CEVWXBS2IENU85THA' where id=3; -update noar ti set v0='KQYOF1CEVWXBS2IENU85THA' where id=3; -update noar tt set b1='FVDTPJXJGZZQRQM0RV3W12G9M' where id=3; -update noar ti set b1='FVDTPJXJGZZQRQM0RV3W12G9M' where id=3; -update noar tt set v0='IOQ53JN52I5S3SCKAHCFMEL0F' where id=3; -update noar ti set v0='IOQ53JN52I5S3SCKAHCFMEL0F' where id=3; -update noar tt set b2='D' where id=3; -update noar ti set b2='D' where id=3; -update noar tt set v0='CHN3KRD3WP1YTW4PR3ZZQKFTM' where id=4; -update noar ti set v0='CHN3KRD3WP1YTW4PR3ZZQKFTM' where id=4; -update noar tt set b0='4T65Z9' where id=4; -update noar ti set b0='4T65Z9' where id=4; -update noar tt set v0='KRP0O32NIN2NVLFRJ3ZI' where id=4; -update noar ti set v0='KRP0O32NIN2NVLFRJ3ZI' where id=4; -update noar tt set b1='T5FRQXT0IT61OIPJRXTOC6S49' where id=4; -update noar ti set b1='T5FRQXT0IT61OIPJRXTOC6S49' where id=4; -update noar tt set v0='OCZSSF95DXRVTP783BPH6AQL' where id=4; -update noar ti set v0='OCZSSF95DXRVTP783BPH6AQL' where id=4; -update noar tt set b2='95RSMZ53729RYJ4AB1E8KPUBK' where id=4; -update noar ti set b2='95RSMZ53729RYJ4AB1E8KPUBK' where id=4; -update noar tt set v0='IAYFC7Q5RQ9L6G24FD4UCNYP' where id=5; -update noar ti set v0='IAYFC7Q5RQ9L6G24FD4UCNYP' where id=5; -update noar tt set b0='OA3FYFCJLC0D6T' where id=5; -update noar ti set b0='OA3FYFCJLC0D6T' where id=5; -update noar tt set v0='71247J8C' where id=5; -update noar ti set v0='71247J8C' where id=5; -update noar tt set b1='3TU6XTNG1' where id=5; -update noar ti set b1='3TU6XTNG1' where id=5; -update noar tt set v0='FG' where id=5; -update noar ti set v0='FG' where id=5; -update noar tt set b2='E84' where id=5; -update noar ti set b2='E84' where id=5; -update noar tt set v0='6WHJ8LB6CKJRXP2Y8RFE5XGV' where id=6; -update noar ti set v0='6WHJ8LB6CKJRXP2Y8RFE5XGV' where id=6; -update noar tt set b0='XXNGTMANVO' where id=6; -update noar ti set b0='XXNGTMANVO' where id=6; -update noar tt set v0='Y7DLDIS7VZR' where id=6; -update noar ti set v0='Y7DLDIS7VZR' where id=6; -update noar tt set b1='X4M7ZAXEF65KO5ZKX' where id=6; -update noar ti set b1='X4M7ZAXEF65KO5ZKX' where id=6; -update noar tt set v0='45JOTHEYLO0CAR60JVZYQ8PBJ' where id=6; -update noar ti set v0='45JOTHEYLO0CAR60JVZYQ8PBJ' where id=6; -update noar tt set b2='G043OIEM83ID' where id=6; -update noar ti set b2='G043OIEM83ID' where id=6; -update noar tt set v0='IHVB7ER2' where id=7; -update noar ti set v0='IHVB7ER2' where id=7; -update noar tt set b0='LOIUO4E01ZRXK1O' where id=7; -update noar ti set b0='LOIUO4E01ZRXK1O' where id=7; -update noar tt set v0='37M4S6GN98OG' where id=7; -update noar ti set v0='37M4S6GN98OG' where id=7; -update noar tt set b1='R3E6XJ2TC8DOYXE' where id=7; -update noar ti set b1='R3E6XJ2TC8DOYXE' where id=7; -update noar tt set v0='JLVUT524TZUE' where id=7; -update noar ti set v0='JLVUT524TZUE' where id=7; -update noar tt set b2='NK95KSOVU4Z' where id=7; -update noar ti set b2='NK95KSOVU4Z' where id=7; -update noar tt set v0='UOW1PHY00J7KXBHJF68' where id=8; -update noar ti set v0='UOW1PHY00J7KXBHJF68' where id=8; -update noar tt set b0='Q90RSEZBOJWO4098IALDLFQJ' where id=8; -update noar ti set b0='Q90RSEZBOJWO4098IALDLFQJ' where id=8; -update noar tt set v0='2XW1YFPN' where id=8; -update noar ti set v0='2XW1YFPN' where id=8; -update noar tt set b1='QZA' where id=8; -update noar ti set b1='QZA' where id=8; -update noar tt set v0='JCHE7A2F2NI8XXF9APFWPGSNQ2' where id=8; -update noar ti set v0='JCHE7A2F2NI8XXF9APFWPGSNQ2' where id=8; -update noar tt set b2='P2YSYWS9H8F5UA3GGPDN' where id=8; -update noar ti set b2='P2YSYWS9H8F5UA3GGPDN' where id=8; -update noar tt set v0='PI0IKNTCB5DJ48D2S4BN6ON2' where id=9; -update noar ti set v0='PI0IKNTCB5DJ48D2S4BN6ON2' where id=9; -update noar tt set b0='4Y23GZ7RMUQM7J362X' where id=9; -update noar ti set b0='4Y23GZ7RMUQM7J362X' where id=9; -update noar tt set v0='SSKFB1YB40PKXXYF3JCD4XDT0Z' where id=9; -update noar ti set v0='SSKFB1YB40PKXXYF3JCD4XDT0Z' where id=9; -update noar tt set b1='R7PATZX8GY2PRJSB45S5A' where id=9; -update noar ti set b1='R7PATZX8GY2PRJSB45S5A' where id=9; -update noar tt set v0='V3IURG' where id=9; -update noar ti set v0='V3IURG' where id=9; -update noar tt set b2='CUEZ63J1YT7MUNZF9T22YOKE' where id=9; -update noar ti set b2='CUEZ63J1YT7MUNZF9T22YOKE' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 mediumblob not null, - b1 tinyblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='CVQT6QBFJPXKKS3C2' where id=1; -update noar ti set v0='CVQT6QBFJPXKKS3C2' where id=1; -update noar tt set b0='KD9WJVZJFWVUCIEKKGG23JZD80K1S2' where id=1; -update noar ti set b0='KD9WJVZJFWVUCIEKKGG23JZD80K1S2' where id=1; -update noar tt set v0='KRSRZ5GS4BHVQZ' where id=1; -update noar ti set v0='KRSRZ5GS4BHVQZ' where id=1; -update noar tt set b1='JXTCPQ3R' where id=1; -update noar ti set b1='JXTCPQ3R' where id=1; -update noar tt set v0='22LCQF7ELOJZJGU' where id=1; -update noar ti set v0='22LCQF7ELOJZJGU' where id=1; -update noar tt set b2='ECPSQY4G9NBC5DWVQV495S' where id=1; -update noar ti set b2='ECPSQY4G9NBC5DWVQV495S' where id=1; -update noar tt set v0='JSIBYTVS01I6BKDRSX0NL8' where id=2; -update noar ti set v0='JSIBYTVS01I6BKDRSX0NL8' where id=2; -update noar tt set b0='2NUYN7O7YA47YNL' where id=2; -update noar ti set b0='2NUYN7O7YA47YNL' where id=2; -update noar tt set v0='FK6Q0YPV9K3FUJSP23H6GGPDRFVB5RG1' where id=2; -update noar ti set v0='FK6Q0YPV9K3FUJSP23H6GGPDRFVB5RG1' where id=2; -update noar tt set b1='890G17EVQQVQSEWC9IU3RWVLA2R3PC89' where id=2; -update noar ti set b1='890G17EVQQVQSEWC9IU3RWVLA2R3PC89' where id=2; -update noar tt set v0='KZQ74QHN9AW96FR2H4OXX01UHL7' where id=2; -update noar ti set v0='KZQ74QHN9AW96FR2H4OXX01UHL7' where id=2; -update noar tt set b2='ZJMC88A5VZLE7' where id=2; -update noar ti set b2='ZJMC88A5VZLE7' where id=2; -update noar tt set v0='B88FQW7KGY9NVZ1' where id=3; -update noar ti set v0='B88FQW7KGY9NVZ1' where id=3; -update noar tt set b0='MT9QU7VDPWY9T1668OF1V5KGH9UTE2G0' where id=3; -update noar ti set b0='MT9QU7VDPWY9T1668OF1V5KGH9UTE2G0' where id=3; -update noar tt set v0='K1KK0IO5CNAFAIY7K2JBTDDFAPC' where id=3; -update noar ti set v0='K1KK0IO5CNAFAIY7K2JBTDDFAPC' where id=3; -update noar tt set b1='H6IYS6UVG' where id=3; -update noar ti set b1='H6IYS6UVG' where id=3; -update noar tt set v0='GAK7BP56UOLPNY28GX9IAY9I' where id=3; -update noar ti set v0='GAK7BP56UOLPNY28GX9IAY9I' where id=3; -update noar tt set b2='UWN' where id=3; -update noar ti set b2='UWN' where id=3; -update noar tt set v0='HANVSS2K3CZY0CENQ' where id=4; -update noar ti set v0='HANVSS2K3CZY0CENQ' where id=4; -update noar tt set b0='DWOJ4708T351YK7Y5X4134ETRXO' where id=4; -update noar ti set b0='DWOJ4708T351YK7Y5X4134ETRXO' where id=4; -update noar tt set v0='OZYDIQO055EY' where id=4; -update noar ti set v0='OZYDIQO055EY' where id=4; -update noar tt set b1='Z4Q9Z' where id=4; -update noar ti set b1='Z4Q9Z' where id=4; -update noar tt set v0='J9D19VZIBLMUV1V79V' where id=4; -update noar ti set v0='J9D19VZIBLMUV1V79V' where id=4; -update noar tt set b2='NXD2YRXQIYIE9TM6K' where id=4; -update noar ti set b2='NXD2YRXQIYIE9TM6K' where id=4; -update noar tt set v0='OKCBOO51D4JM3TX9I1X' where id=5; -update noar ti set v0='OKCBOO51D4JM3TX9I1X' where id=5; -update noar tt set b0='V' where id=5; -update noar ti set b0='V' where id=5; -update noar tt set v0='FAKX0KXCLTS5LNVCX8I' where id=5; -update noar ti set v0='FAKX0KXCLTS5LNVCX8I' where id=5; -update noar tt set b1='GHNS1P5T84UN6R' where id=5; -update noar ti set b1='GHNS1P5T84UN6R' where id=5; -update noar tt set v0='SN1TIQLLGHO6SIELT3F6CR8EOZRBDF' where id=5; -update noar ti set v0='SN1TIQLLGHO6SIELT3F6CR8EOZRBDF' where id=5; -update noar tt set b2='GLW177V2OMO2OUHHIWBKQW53' where id=5; -update noar ti set b2='GLW177V2OMO2OUHHIWBKQW53' where id=5; -update noar tt set v0='Q6HHGU' where id=6; -update noar ti set v0='Q6HHGU' where id=6; -update noar tt set b0='9H1O0DW8GMGW8U617SFX' where id=6; -update noar ti set b0='9H1O0DW8GMGW8U617SFX' where id=6; -update noar tt set v0='BE6SKIRYEZLEPIK54G94R3S438QM' where id=6; -update noar ti set v0='BE6SKIRYEZLEPIK54G94R3S438QM' where id=6; -update noar tt set b1='OWPKMLGFUY9SYHPE8HE' where id=6; -update noar ti set b1='OWPKMLGFUY9SYHPE8HE' where id=6; -update noar tt set v0='ZCE35A1JS9MNT' where id=6; -update noar ti set v0='ZCE35A1JS9MNT' where id=6; -update noar tt set b2='NCG2PXQBB6OM7MSREXWZOG80EELLU' where id=6; -update noar ti set b2='NCG2PXQBB6OM7MSREXWZOG80EELLU' where id=6; -update noar tt set v0='M5EJ32ASHRY66CH4CST' where id=7; -update noar ti set v0='M5EJ32ASHRY66CH4CST' where id=7; -update noar tt set b0='D56MR' where id=7; -update noar ti set b0='D56MR' where id=7; -update noar tt set v0='LOR4V8EUFIQLQ41KKOTGV8X6' where id=7; -update noar ti set v0='LOR4V8EUFIQLQ41KKOTGV8X6' where id=7; -update noar tt set b1='86JX62U76TZ1' where id=7; -update noar ti set b1='86JX62U76TZ1' where id=7; -update noar tt set v0='7787RQK215BYT3BPJ44V' where id=7; -update noar ti set v0='7787RQK215BYT3BPJ44V' where id=7; -update noar tt set b2='HW2XDS4G129N7OL40VIAY4Q' where id=7; -update noar ti set b2='HW2XDS4G129N7OL40VIAY4Q' where id=7; -update noar tt set v0='8A5D8G51UFF61AZ1P6ZAG52' where id=8; -update noar ti set v0='8A5D8G51UFF61AZ1P6ZAG52' where id=8; -update noar tt set b0='DNUQ4B11G4UHWIIRF' where id=8; -update noar ti set b0='DNUQ4B11G4UHWIIRF' where id=8; -update noar tt set v0='T7S0T7EJKZKM3QXXKEJ2A2B8J6C7IP' where id=8; -update noar ti set v0='T7S0T7EJKZKM3QXXKEJ2A2B8J6C7IP' where id=8; -update noar tt set b1='I0WCTO2SO5INLDQWBZCUFO9NZ9BN1' where id=8; -update noar ti set b1='I0WCTO2SO5INLDQWBZCUFO9NZ9BN1' where id=8; -update noar tt set v0='FTJL6767C8R4ZZ7YB8B10QUUK' where id=8; -update noar ti set v0='FTJL6767C8R4ZZ7YB8B10QUUK' where id=8; -update noar tt set b2='VL36TG8RJOGEUH67R' where id=8; -update noar ti set b2='VL36TG8RJOGEUH67R' where id=8; -update noar tt set v0='4IXKPPYG9BVTEZRFVOGLCBZ' where id=9; -update noar ti set v0='4IXKPPYG9BVTEZRFVOGLCBZ' where id=9; -update noar tt set b0='AGJY7T1U5KT0FXTBL4FEQK75P3S6' where id=9; -update noar ti set b0='AGJY7T1U5KT0FXTBL4FEQK75P3S6' where id=9; -update noar tt set v0='2LWI00ARFL' where id=9; -update noar ti set v0='2LWI00ARFL' where id=9; -update noar tt set b1='QOPM5O11WXRTTF6WVZPTV8O851RHO4Q' where id=9; -update noar ti set b1='QOPM5O11WXRTTF6WVZPTV8O851RHO4Q' where id=9; -update noar tt set v0='RL0P' where id=9; -update noar ti set v0='RL0P' where id=9; -update noar tt set b2='CPP63Q2IOXWDD4' where id=9; -update noar ti set b2='CPP63Q2IOXWDD4' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 mediumblob null, - b1 tinyblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='21OJJYNQB6DXC3DU9' where id=1; -update noar ti set v0='21OJJYNQB6DXC3DU9' where id=1; -update noar tt set b0='61GHSABART' where id=1; -update noar ti set b0='61GHSABART' where id=1; -update noar tt set v0='964OS' where id=1; -update noar ti set v0='964OS' where id=1; -update noar tt set b1='ZRQ1104R0LCUXR1N' where id=1; -update noar ti set b1='ZRQ1104R0LCUXR1N' where id=1; -update noar tt set v0='GD0I3Z3EL' where id=1; -update noar ti set v0='GD0I3Z3EL' where id=1; -update noar tt set b2='NEX4Y4S' where id=1; -update noar ti set b2='NEX4Y4S' where id=1; -update noar tt set v0='J7G5COJ9O4MZL03C8F3LTNQ9J4M0BG' where id=2; -update noar ti set v0='J7G5COJ9O4MZL03C8F3LTNQ9J4M0BG' where id=2; -update noar tt set b0='KCT7H4I42XOUNF0' where id=2; -update noar ti set b0='KCT7H4I42XOUNF0' where id=2; -update noar tt set v0='VE26XO4P6GIXQGD8X6KOW3Q8WSV1CR' where id=2; -update noar ti set v0='VE26XO4P6GIXQGD8X6KOW3Q8WSV1CR' where id=2; -update noar tt set b1='QQL6EUAYQ9G3ROZPOBT7HOW9FZXUTRI0' where id=2; -update noar ti set b1='QQL6EUAYQ9G3ROZPOBT7HOW9FZXUTRI0' where id=2; -update noar tt set v0='N0GAUEJ60X' where id=2; -update noar ti set v0='N0GAUEJ60X' where id=2; -update noar tt set b2='Q3QP1HZ27QKYGBH6QTE8US9Z' where id=2; -update noar ti set b2='Q3QP1HZ27QKYGBH6QTE8US9Z' where id=2; -update noar tt set v0='TSMVX05CRK8793J' where id=3; -update noar ti set v0='TSMVX05CRK8793J' where id=3; -update noar tt set b0='5517O941L6K11RFH' where id=3; -update noar ti set b0='5517O941L6K11RFH' where id=3; -update noar tt set v0='7UGN' where id=3; -update noar ti set v0='7UGN' where id=3; -update noar tt set b1='H8EY1Y0LTUD88KL710KDZOTR6Z9BW' where id=3; -update noar ti set b1='H8EY1Y0LTUD88KL710KDZOTR6Z9BW' where id=3; -update noar tt set v0='FZ7WPJZ1' where id=3; -update noar ti set v0='FZ7WPJZ1' where id=3; -update noar tt set b2='S3265J2X2V' where id=3; -update noar ti set b2='S3265J2X2V' where id=3; -update noar tt set v0='OH96WT3IS1JHNLYASXCVKSS0UP35' where id=4; -update noar ti set v0='OH96WT3IS1JHNLYASXCVKSS0UP35' where id=4; -update noar tt set b0='29JN14HZZRKFYZK6O4DC8DWPBVZ86D' where id=4; -update noar ti set b0='29JN14HZZRKFYZK6O4DC8DWPBVZ86D' where id=4; -update noar tt set v0='RF2' where id=4; -update noar ti set v0='RF2' where id=4; -update noar tt set b1='YWSDXLGHWDBR5WS8V' where id=4; -update noar ti set b1='YWSDXLGHWDBR5WS8V' where id=4; -update noar tt set v0='6' where id=4; -update noar ti set v0='6' where id=4; -update noar tt set b2='ZKW39A368' where id=4; -update noar ti set b2='ZKW39A368' where id=4; -update noar tt set v0='5VIC7O1ULHW8CM' where id=5; -update noar ti set v0='5VIC7O1ULHW8CM' where id=5; -update noar tt set b0='3LVZF5EBOCDFTW8' where id=5; -update noar ti set b0='3LVZF5EBOCDFTW8' where id=5; -update noar tt set v0='E2DXLBA17' where id=5; -update noar ti set v0='E2DXLBA17' where id=5; -update noar tt set b1='ZH' where id=5; -update noar ti set b1='ZH' where id=5; -update noar tt set v0='NLXA3S' where id=5; -update noar ti set v0='NLXA3S' where id=5; -update noar tt set b2='4LGHNT4Q85I4O7ULVFQQLRUNGZ5' where id=5; -update noar ti set b2='4LGHNT4Q85I4O7ULVFQQLRUNGZ5' where id=5; -update noar tt set v0='U43I4FYRABBHNY9U' where id=6; -update noar ti set v0='U43I4FYRABBHNY9U' where id=6; -update noar tt set b0='FZ' where id=6; -update noar ti set b0='FZ' where id=6; -update noar tt set v0='2TUNSXX5YJHX8F6SABLT' where id=6; -update noar ti set v0='2TUNSXX5YJHX8F6SABLT' where id=6; -update noar tt set b1='48ZP479' where id=6; -update noar ti set b1='48ZP479' where id=6; -update noar tt set v0='EEL7VO4WJHNI' where id=6; -update noar ti set v0='EEL7VO4WJHNI' where id=6; -update noar tt set b2='AM7K5GT1L0NTY1ZNQ0' where id=6; -update noar ti set b2='AM7K5GT1L0NTY1ZNQ0' where id=6; -update noar tt set v0='FVW85RANM6T35BDIO' where id=7; -update noar ti set v0='FVW85RANM6T35BDIO' where id=7; -update noar tt set b0='RJBNVO6QKVKU7P' where id=7; -update noar ti set b0='RJBNVO6QKVKU7P' where id=7; -update noar tt set v0='2UP94M17BJ485Y' where id=7; -update noar ti set v0='2UP94M17BJ485Y' where id=7; -update noar tt set b1='QMUSTOPA2' where id=7; -update noar ti set b1='QMUSTOPA2' where id=7; -update noar tt set v0='V' where id=7; -update noar ti set v0='V' where id=7; -update noar tt set b2='ZNKIGBSS' where id=7; -update noar ti set b2='ZNKIGBSS' where id=7; -update noar tt set v0='HGS9I3I62ELHRQXIW' where id=8; -update noar ti set v0='HGS9I3I62ELHRQXIW' where id=8; -update noar tt set b0='8E6GOZWVA50USLU' where id=8; -update noar ti set b0='8E6GOZWVA50USLU' where id=8; -update noar tt set v0='TQLEVN4' where id=8; -update noar ti set v0='TQLEVN4' where id=8; -update noar tt set b1='EBF9KXB0P4WW6O5JN9MKA' where id=8; -update noar ti set b1='EBF9KXB0P4WW6O5JN9MKA' where id=8; -update noar tt set v0='FXBLG2MD' where id=8; -update noar ti set v0='FXBLG2MD' where id=8; -update noar tt set b2='3S' where id=8; -update noar ti set b2='3S' where id=8; -update noar tt set v0='IJ8PGQ90RT0G64Q7' where id=9; -update noar ti set v0='IJ8PGQ90RT0G64Q7' where id=9; -update noar tt set b0='GLZ5FTW8V2DGJDNZ91IAUT' where id=9; -update noar ti set b0='GLZ5FTW8V2DGJDNZ91IAUT' where id=9; -update noar tt set v0='KBIC3ZWUKB6024XJ2Q9JJ7QX953L' where id=9; -update noar ti set v0='KBIC3ZWUKB6024XJ2Q9JJ7QX953L' where id=9; -update noar tt set b1='A' where id=9; -update noar ti set b1='A' where id=9; -update noar tt set v0='P0R1L09S6AH5I52OHLPO9KCQ' where id=9; -update noar ti set v0='P0R1L09S6AH5I52OHLPO9KCQ' where id=9; -update noar tt set b2='R0F' where id=9; -update noar ti set b2='R0F' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 mediumblob null, - b1 tinyblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='HL1RD2FWCWOD4TPKVWY3' where id=1; -update noar ti set v0='HL1RD2FWCWOD4TPKVWY3' where id=1; -update noar tt set b0='GUKWFY7CPO67USXO7PL' where id=1; -update noar ti set b0='GUKWFY7CPO67USXO7PL' where id=1; -update noar tt set v0='VB8LBUVC' where id=1; -update noar ti set v0='VB8LBUVC' where id=1; -update noar tt set b1='4DX4NT96ZZD' where id=1; -update noar ti set b1='4DX4NT96ZZD' where id=1; -update noar tt set v0='X2724PXIMMDDIFPRNG2' where id=1; -update noar ti set v0='X2724PXIMMDDIFPRNG2' where id=1; -update noar tt set b2='V8A2PMQ4YJKNDI' where id=1; -update noar ti set b2='V8A2PMQ4YJKNDI' where id=1; -update noar tt set v0='7HFLNHBQ' where id=2; -update noar ti set v0='7HFLNHBQ' where id=2; -update noar tt set b0='C1OH562IFS14PO9VJ' where id=2; -update noar ti set b0='C1OH562IFS14PO9VJ' where id=2; -update noar tt set v0='1K' where id=2; -update noar ti set v0='1K' where id=2; -update noar tt set b1='Q4HPM4N2IUAZTT' where id=2; -update noar ti set b1='Q4HPM4N2IUAZTT' where id=2; -update noar tt set v0='QBVCL' where id=2; -update noar ti set v0='QBVCL' where id=2; -update noar tt set b2='AFJ7YI0D3RZEF1NH5USXXE2Z' where id=2; -update noar ti set b2='AFJ7YI0D3RZEF1NH5USXXE2Z' where id=2; -update noar tt set v0='6TJQDY0VOX9ZFTNNBV58P35VN' where id=3; -update noar ti set v0='6TJQDY0VOX9ZFTNNBV58P35VN' where id=3; -update noar tt set b0='JP5W9QVIITSZGKMHP' where id=3; -update noar ti set b0='JP5W9QVIITSZGKMHP' where id=3; -update noar tt set v0='BB7D18JDANP' where id=3; -update noar ti set v0='BB7D18JDANP' where id=3; -update noar tt set b1='VOYP4GZ250RG6Y' where id=3; -update noar ti set b1='VOYP4GZ250RG6Y' where id=3; -update noar tt set v0='D' where id=3; -update noar ti set v0='D' where id=3; -update noar tt set b2='XZKWF6T3L34' where id=3; -update noar ti set b2='XZKWF6T3L34' where id=3; -update noar tt set v0='FL9YY5Y' where id=4; -update noar ti set v0='FL9YY5Y' where id=4; -update noar tt set b0='2ZAYPJ7S8ETB1WMZFCDBPMT' where id=4; -update noar ti set b0='2ZAYPJ7S8ETB1WMZFCDBPMT' where id=4; -update noar tt set v0='2XYMN595X4221C60V2JUREDT' where id=4; -update noar ti set v0='2XYMN595X4221C60V2JUREDT' where id=4; -update noar tt set b1='FWWUMNSB5Y6I61ETVSE' where id=4; -update noar ti set b1='FWWUMNSB5Y6I61ETVSE' where id=4; -update noar tt set v0='CTXJTU7HOW2LCF45410QDFTR2' where id=4; -update noar ti set v0='CTXJTU7HOW2LCF45410QDFTR2' where id=4; -update noar tt set b2='6BCKTKY34QPMOZ' where id=4; -update noar ti set b2='6BCKTKY34QPMOZ' where id=4; -update noar tt set v0='3SZ3Y9HOS6PV5KXCOUPFKB' where id=5; -update noar ti set v0='3SZ3Y9HOS6PV5KXCOUPFKB' where id=5; -update noar tt set b0='1LL' where id=5; -update noar ti set b0='1LL' where id=5; -update noar tt set v0='06T19ZH7UK1590GPD4Q' where id=5; -update noar ti set v0='06T19ZH7UK1590GPD4Q' where id=5; -update noar tt set b1='BI8' where id=5; -update noar ti set b1='BI8' where id=5; -update noar tt set v0='QVGXLF' where id=5; -update noar ti set v0='QVGXLF' where id=5; -update noar tt set b2='E1TEACSKGPHJX3MEXRAOOC8LRN' where id=5; -update noar ti set b2='E1TEACSKGPHJX3MEXRAOOC8LRN' where id=5; -update noar tt set v0='VQWUVKPU1NFIHRJV5JE7HLLUI6YW3TC2' where id=6; -update noar ti set v0='VQWUVKPU1NFIHRJV5JE7HLLUI6YW3TC2' where id=6; -update noar tt set b0='UTJO18N5VD7RSM2DV6BU66MZ' where id=6; -update noar ti set b0='UTJO18N5VD7RSM2DV6BU66MZ' where id=6; -update noar tt set v0='JNU' where id=6; -update noar ti set v0='JNU' where id=6; -update noar tt set b1='7TMRYOTWM5' where id=6; -update noar ti set b1='7TMRYOTWM5' where id=6; -update noar tt set v0='V5B3UO1DNOGJF0IJWLYJ0' where id=6; -update noar ti set v0='V5B3UO1DNOGJF0IJWLYJ0' where id=6; -update noar tt set b2='BV' where id=6; -update noar ti set b2='BV' where id=6; -update noar tt set v0='RD19WOMFOHP1NS6B4RDRAJ' where id=7; -update noar ti set v0='RD19WOMFOHP1NS6B4RDRAJ' where id=7; -update noar tt set b0='G0UK0XTO9V4QJWM25FM2' where id=7; -update noar ti set b0='G0UK0XTO9V4QJWM25FM2' where id=7; -update noar tt set v0='NNRAG27BONARLR9B' where id=7; -update noar ti set v0='NNRAG27BONARLR9B' where id=7; -update noar tt set b1='42NGZEDM' where id=7; -update noar ti set b1='42NGZEDM' where id=7; -update noar tt set v0='Y29RHMH22A7Q8CNEDR5WA1Z32DTQ' where id=7; -update noar ti set v0='Y29RHMH22A7Q8CNEDR5WA1Z32DTQ' where id=7; -update noar tt set b2='94RUT3UYSN8UZV390BR6ZJ0QDLVPORGL' where id=7; -update noar ti set b2='94RUT3UYSN8UZV390BR6ZJ0QDLVPORGL' where id=7; -update noar tt set v0='5U1JR31LDT5E418MHIE0RO81EK93T' where id=8; -update noar ti set v0='5U1JR31LDT5E418MHIE0RO81EK93T' where id=8; -update noar tt set b0='069PFK2GC' where id=8; -update noar ti set b0='069PFK2GC' where id=8; -update noar tt set v0='ZXI19RYQ2ERCRAEM02' where id=8; -update noar ti set v0='ZXI19RYQ2ERCRAEM02' where id=8; -update noar tt set b1='JJQHY2KHYJU5XRJ95NTX4SYFFGAP' where id=8; -update noar ti set b1='JJQHY2KHYJU5XRJ95NTX4SYFFGAP' where id=8; -update noar tt set v0='XBQS2DWSR0036PSS7CDBMOMU859' where id=8; -update noar ti set v0='XBQS2DWSR0036PSS7CDBMOMU859' where id=8; -update noar tt set b2='V4T4GEVUZ4Q21Q0S5CZSLDO' where id=8; -update noar ti set b2='V4T4GEVUZ4Q21Q0S5CZSLDO' where id=8; -update noar tt set v0='4DCD6O32EFXIHM548S' where id=9; -update noar ti set v0='4DCD6O32EFXIHM548S' where id=9; -update noar tt set b0='1XPL50ZSNGCBIIMOE' where id=9; -update noar ti set b0='1XPL50ZSNGCBIIMOE' where id=9; -update noar tt set v0='JTHEBALS7W51UD' where id=9; -update noar ti set v0='JTHEBALS7W51UD' where id=9; -update noar tt set b1='7Z75FTH7MPSEEBU8BGCGVAC' where id=9; -update noar ti set b1='7Z75FTH7MPSEEBU8BGCGVAC' where id=9; -update noar tt set v0='506P0VY7JEZTBFFJ7ZQ7OC1ZKY3AIG' where id=9; -update noar ti set v0='506P0VY7JEZTBFFJ7ZQ7OC1ZKY3AIG' where id=9; -update noar tt set b2='4O' where id=9; -update noar ti set b2='4O' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 mediumblob not null, - b1 tinyblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='CSWHY390L8CWLFRKRMSRIE1G' where id=1; -update noar ti set v0='CSWHY390L8CWLFRKRMSRIE1G' where id=1; -update noar tt set b0='XS4YW8N0' where id=1; -update noar ti set b0='XS4YW8N0' where id=1; -update noar tt set v0='OOZLH556CM1CMKL8VRGH89Q' where id=1; -update noar ti set v0='OOZLH556CM1CMKL8VRGH89Q' where id=1; -update noar tt set b1='UOY7XP9Q3I' where id=1; -update noar ti set b1='UOY7XP9Q3I' where id=1; -update noar tt set v0='BB1OQYVROCIIZ6020URF0AV6CYT' where id=1; -update noar ti set v0='BB1OQYVROCIIZ6020URF0AV6CYT' where id=1; -update noar tt set b2='1NJT7HN7O6WKFSVEYEAJYYJEV1S6D0X' where id=1; -update noar ti set b2='1NJT7HN7O6WKFSVEYEAJYYJEV1S6D0X' where id=1; -update noar tt set v0='WJ8MP1V761L92RBLWX5QJSS' where id=2; -update noar ti set v0='WJ8MP1V761L92RBLWX5QJSS' where id=2; -update noar tt set b0='YS' where id=2; -update noar ti set b0='YS' where id=2; -update noar tt set v0='2MQ' where id=2; -update noar ti set v0='2MQ' where id=2; -update noar tt set b1='6H' where id=2; -update noar ti set b1='6H' where id=2; -update noar tt set v0='8TXQAJG1TJOD8OWU84QQXMB' where id=2; -update noar ti set v0='8TXQAJG1TJOD8OWU84QQXMB' where id=2; -update noar tt set b2='SU4Q525Q8SF1LULLX1FJ8D0J4UOZJ' where id=2; -update noar ti set b2='SU4Q525Q8SF1LULLX1FJ8D0J4UOZJ' where id=2; -update noar tt set v0='ZSZJCRHSDTASOKP' where id=3; -update noar ti set v0='ZSZJCRHSDTASOKP' where id=3; -update noar tt set b0='PFEGVSPDPNL0RB64PWHLBP5W3' where id=3; -update noar ti set b0='PFEGVSPDPNL0RB64PWHLBP5W3' where id=3; -update noar tt set v0='DJAYWIET5A2' where id=3; -update noar ti set v0='DJAYWIET5A2' where id=3; -update noar tt set b1='XWSG1JZ82J4JVD0' where id=3; -update noar ti set b1='XWSG1JZ82J4JVD0' where id=3; -update noar tt set v0='W9GL4WA4I12BVYFHNV19CA0CZA' where id=3; -update noar ti set v0='W9GL4WA4I12BVYFHNV19CA0CZA' where id=3; -update noar tt set b2='E9O5CCAAZJXOVN4XJAVV' where id=3; -update noar ti set b2='E9O5CCAAZJXOVN4XJAVV' where id=3; -update noar tt set v0='T0FCMLHKT' where id=4; -update noar ti set v0='T0FCMLHKT' where id=4; -update noar tt set b0='5A' where id=4; -update noar ti set b0='5A' where id=4; -update noar tt set v0='G05M' where id=4; -update noar ti set v0='G05M' where id=4; -update noar tt set b1='BH4TOSLM0LA8B2WVF1C0WJGGUJ8DN' where id=4; -update noar ti set b1='BH4TOSLM0LA8B2WVF1C0WJGGUJ8DN' where id=4; -update noar tt set v0='1878E2FQ' where id=4; -update noar ti set v0='1878E2FQ' where id=4; -update noar tt set b2='KI' where id=4; -update noar ti set b2='KI' where id=4; -update noar tt set v0='H39LGTIKPR93ZSUR50YC0RTZE' where id=5; -update noar ti set v0='H39LGTIKPR93ZSUR50YC0RTZE' where id=5; -update noar tt set b0='IL0XN03E38173DN20XVVJFNYST' where id=5; -update noar ti set b0='IL0XN03E38173DN20XVVJFNYST' where id=5; -update noar tt set v0='WCOQXVSP6' where id=5; -update noar ti set v0='WCOQXVSP6' where id=5; -update noar tt set b1='FWTQY8I13RAC88OE' where id=5; -update noar ti set b1='FWTQY8I13RAC88OE' where id=5; -update noar tt set v0='DT5JQ7JD7DR309L7MAF4U7KQ4R1G' where id=5; -update noar ti set v0='DT5JQ7JD7DR309L7MAF4U7KQ4R1G' where id=5; -update noar tt set b2='38QYWYEEHY9J8TD8OJNYPIXMP8K2' where id=5; -update noar ti set b2='38QYWYEEHY9J8TD8OJNYPIXMP8K2' where id=5; -update noar tt set v0='V5SZ071DCH2SBX0JWCAAU0G' where id=6; -update noar ti set v0='V5SZ071DCH2SBX0JWCAAU0G' where id=6; -update noar tt set b0='3RP2KUVAJU' where id=6; -update noar ti set b0='3RP2KUVAJU' where id=6; -update noar tt set v0='TF5ULM69909MG1F4XWE' where id=6; -update noar ti set v0='TF5ULM69909MG1F4XWE' where id=6; -update noar tt set b1='TOC1UUVPJ5ZMQMN7XZQG0POSHXIAW90T' where id=6; -update noar ti set b1='TOC1UUVPJ5ZMQMN7XZQG0POSHXIAW90T' where id=6; -update noar tt set v0='P' where id=6; -update noar ti set v0='P' where id=6; -update noar tt set b2='Z9C25Z' where id=6; -update noar ti set b2='Z9C25Z' where id=6; -update noar tt set v0='CD275S' where id=7; -update noar ti set v0='CD275S' where id=7; -update noar tt set b0='QY1BSI0UIHP9XNDBM7RKR1PM' where id=7; -update noar ti set b0='QY1BSI0UIHP9XNDBM7RKR1PM' where id=7; -update noar tt set v0='J2S9I1CSEFIVF8K' where id=7; -update noar ti set v0='J2S9I1CSEFIVF8K' where id=7; -update noar tt set b1='6OGLSTEL3E7IQ10QIW' where id=7; -update noar ti set b1='6OGLSTEL3E7IQ10QIW' where id=7; -update noar tt set v0='HWMBEYSC91FWM14NAXYRSDQB' where id=7; -update noar ti set v0='HWMBEYSC91FWM14NAXYRSDQB' where id=7; -update noar tt set b2='12A8WOF6J8RSY7H111BFD229TE7SGYC' where id=7; -update noar ti set b2='12A8WOF6J8RSY7H111BFD229TE7SGYC' where id=7; -update noar tt set v0='9Z4IZW04452H1' where id=8; -update noar ti set v0='9Z4IZW04452H1' where id=8; -update noar tt set b0='RTXOE8C6PJ4IV5NIF2NMF5B2Y' where id=8; -update noar ti set b0='RTXOE8C6PJ4IV5NIF2NMF5B2Y' where id=8; -update noar tt set v0='T86CCN' where id=8; -update noar ti set v0='T86CCN' where id=8; -update noar tt set b1='7OJFX9JQ8ZG1B6VW3G8LFBOEGKNLB' where id=8; -update noar ti set b1='7OJFX9JQ8ZG1B6VW3G8LFBOEGKNLB' where id=8; -update noar tt set v0='5' where id=8; -update noar ti set v0='5' where id=8; -update noar tt set b2='7O5RD2JDBFS8BDKN8TJ14' where id=8; -update noar ti set b2='7O5RD2JDBFS8BDKN8TJ14' where id=8; -update noar tt set v0='B52CAJI96TQK5B975' where id=9; -update noar ti set v0='B52CAJI96TQK5B975' where id=9; -update noar tt set b0='KMPC5DOVZIS0Y' where id=9; -update noar ti set b0='KMPC5DOVZIS0Y' where id=9; -update noar tt set v0='4W4GKTWP3E' where id=9; -update noar ti set v0='4W4GKTWP3E' where id=9; -update noar tt set b1='UBVHJA' where id=9; -update noar ti set b1='UBVHJA' where id=9; -update noar tt set v0='5HCU1KJB2F9A147GBIZSUML45MKS3LVV' where id=9; -update noar ti set v0='5HCU1KJB2F9A147GBIZSUML45MKS3LVV' where id=9; -update noar tt set b2='YD47DNMEJREBVGOXPIYG' where id=9; -update noar ti set b2='YD47DNMEJREBVGOXPIYG' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 mediumblob not null, - b1 tinyblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='3YGSCOZWC4194UN5VLNJNO0PTZ' where id=1; -update noar ti set v0='3YGSCOZWC4194UN5VLNJNO0PTZ' where id=1; -update noar tt set b0='RLLVE0MLL4' where id=1; -update noar ti set b0='RLLVE0MLL4' where id=1; -update noar tt set v0='WM6WT7538RRAD9JENUCZS69V6B' where id=1; -update noar ti set v0='WM6WT7538RRAD9JENUCZS69V6B' where id=1; -update noar tt set b1='QLSPSUAHG0ITB1M0JF00FKF' where id=1; -update noar ti set b1='QLSPSUAHG0ITB1M0JF00FKF' where id=1; -update noar tt set v0='4J8RD4ZUXU28PBIFTYTJ876013' where id=1; -update noar ti set v0='4J8RD4ZUXU28PBIFTYTJ876013' where id=1; -update noar tt set b2='Y7DMSACCPS' where id=1; -update noar ti set b2='Y7DMSACCPS' where id=1; -update noar tt set v0='EMTHMD92N6FXIDBT82Q78Y' where id=2; -update noar ti set v0='EMTHMD92N6FXIDBT82Q78Y' where id=2; -update noar tt set b0='4BF' where id=2; -update noar ti set b0='4BF' where id=2; -update noar tt set v0='IETIONXKU877UO4YJX64ORT9SMM6B01' where id=2; -update noar ti set v0='IETIONXKU877UO4YJX64ORT9SMM6B01' where id=2; -update noar tt set b1='Q9RCTU5OS00KYALGTX1MGY3JK' where id=2; -update noar ti set b1='Q9RCTU5OS00KYALGTX1MGY3JK' where id=2; -update noar tt set v0='46X' where id=2; -update noar ti set v0='46X' where id=2; -update noar tt set b2='6P76O29FUK' where id=2; -update noar ti set b2='6P76O29FUK' where id=2; -update noar tt set v0='KNK5LP785Z9EJFL2PYE9PGXWN' where id=3; -update noar ti set v0='KNK5LP785Z9EJFL2PYE9PGXWN' where id=3; -update noar tt set b0='CX9DX2G5ZW1AF83XWU3POKQXJLC7' where id=3; -update noar ti set b0='CX9DX2G5ZW1AF83XWU3POKQXJLC7' where id=3; -update noar tt set v0='PKO68AA992J9LZW' where id=3; -update noar ti set v0='PKO68AA992J9LZW' where id=3; -update noar tt set b1='R1OXBZRHZHUUJ8HBVSPJ' where id=3; -update noar ti set b1='R1OXBZRHZHUUJ8HBVSPJ' where id=3; -update noar tt set v0='ZFLCFTSQ2KMFXBYDRXAVBFM' where id=3; -update noar ti set v0='ZFLCFTSQ2KMFXBYDRXAVBFM' where id=3; -update noar tt set b2='B4' where id=3; -update noar ti set b2='B4' where id=3; -update noar tt set v0='C5DL21QOX' where id=4; -update noar ti set v0='C5DL21QOX' where id=4; -update noar tt set b0='L7V2LYRMO54PWBYRUMEYLW66K09PEQ' where id=4; -update noar ti set b0='L7V2LYRMO54PWBYRUMEYLW66K09PEQ' where id=4; -update noar tt set v0='AHNHK5E' where id=4; -update noar ti set v0='AHNHK5E' where id=4; -update noar tt set b1='QLL2GEQ98LHF11FMET6Q4R4YCGA' where id=4; -update noar ti set b1='QLL2GEQ98LHF11FMET6Q4R4YCGA' where id=4; -update noar tt set v0='F45F9' where id=4; -update noar ti set v0='F45F9' where id=4; -update noar tt set b2='KY2K70FKYGBEQP1H7K7LHKNV42DU74N' where id=4; -update noar ti set b2='KY2K70FKYGBEQP1H7K7LHKNV42DU74N' where id=4; -update noar tt set v0='K1MGDJ09245C3' where id=5; -update noar ti set v0='K1MGDJ09245C3' where id=5; -update noar tt set b0='RT27SVYKHM7K8QIL8EWMDHSZV' where id=5; -update noar ti set b0='RT27SVYKHM7K8QIL8EWMDHSZV' where id=5; -update noar tt set v0='A0FTUZG2RS8V66' where id=5; -update noar ti set v0='A0FTUZG2RS8V66' where id=5; -update noar tt set b1='AOUKDUT2L87LJNC40XY' where id=5; -update noar ti set b1='AOUKDUT2L87LJNC40XY' where id=5; -update noar tt set v0='4LLGLE23FSVI6PM0YW9CL7AIO2' where id=5; -update noar ti set v0='4LLGLE23FSVI6PM0YW9CL7AIO2' where id=5; -update noar tt set b2='2ID80FL1J' where id=5; -update noar ti set b2='2ID80FL1J' where id=5; -update noar tt set v0='5XCXWCPUJ5RFQ5CQ36BQGIPWLWS' where id=6; -update noar ti set v0='5XCXWCPUJ5RFQ5CQ36BQGIPWLWS' where id=6; -update noar tt set b0='IKVATZQ3DT6DGO7P3Y' where id=6; -update noar ti set b0='IKVATZQ3DT6DGO7P3Y' where id=6; -update noar tt set v0='CKAU5ELPA7E0' where id=6; -update noar ti set v0='CKAU5ELPA7E0' where id=6; -update noar tt set b1='MYJJ6SDQ0ARW03RK3J8ZXGVGF3TEKV' where id=6; -update noar ti set b1='MYJJ6SDQ0ARW03RK3J8ZXGVGF3TEKV' where id=6; -update noar tt set v0='UW2GAW98TW4PVN09SKS7I0LYX6Z' where id=6; -update noar ti set v0='UW2GAW98TW4PVN09SKS7I0LYX6Z' where id=6; -update noar tt set b2='4Z0LFG5M12C74TFQODACECPSXTA' where id=6; -update noar ti set b2='4Z0LFG5M12C74TFQODACECPSXTA' where id=6; -update noar tt set v0='A54L0IZUO00M3S6IKOVR' where id=7; -update noar ti set v0='A54L0IZUO00M3S6IKOVR' where id=7; -update noar tt set b0='77LE8LAX8E80VBZ' where id=7; -update noar ti set b0='77LE8LAX8E80VBZ' where id=7; -update noar tt set v0='ESD10HZONAA' where id=7; -update noar ti set v0='ESD10HZONAA' where id=7; -update noar tt set b1='457RXVL6' where id=7; -update noar ti set b1='457RXVL6' where id=7; -update noar tt set v0='K3GB1CMRX' where id=7; -update noar ti set v0='K3GB1CMRX' where id=7; -update noar tt set b2='G0PO81R' where id=7; -update noar ti set b2='G0PO81R' where id=7; -update noar tt set v0='K21V4YJBT3ZFXEZJ0SXS' where id=8; -update noar ti set v0='K21V4YJBT3ZFXEZJ0SXS' where id=8; -update noar tt set b0='G8GR4K' where id=8; -update noar ti set b0='G8GR4K' where id=8; -update noar tt set v0='EBCN' where id=8; -update noar ti set v0='EBCN' where id=8; -update noar tt set b1='XDDJST0I9CWK904C3IWIMMJ5FPVLK' where id=8; -update noar ti set b1='XDDJST0I9CWK904C3IWIMMJ5FPVLK' where id=8; -update noar tt set v0='1FT' where id=8; -update noar ti set v0='1FT' where id=8; -update noar tt set b2='MR' where id=8; -update noar ti set b2='MR' where id=8; -update noar tt set v0='P' where id=9; -update noar ti set v0='P' where id=9; -update noar tt set b0='XAQHI1JW82OAH6PDMD749H8' where id=9; -update noar ti set b0='XAQHI1JW82OAH6PDMD749H8' where id=9; -update noar tt set v0='UBJBHR0XXVYZ1JIP8SL96255U7' where id=9; -update noar ti set v0='UBJBHR0XXVYZ1JIP8SL96255U7' where id=9; -update noar tt set b1='6VVB2HJPGGPQDLXUF0GGZS8P' where id=9; -update noar ti set b1='6VVB2HJPGGPQDLXUF0GGZS8P' where id=9; -update noar tt set v0='OTB90UD93G6MFYD4J17ZPHXGVG1' where id=9; -update noar ti set v0='OTB90UD93G6MFYD4J17ZPHXGVG1' where id=9; -update noar tt set b2='ABLHPE8D6321TJA2K7X78G3YV' where id=9; -update noar ti set b2='ABLHPE8D6321TJA2K7X78G3YV' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 mediumblob null, - b1 blob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='Q' where id=1; -update noar ti set v0='Q' where id=1; -update noar tt set b0='QF6QYXNCNRA' where id=1; -update noar ti set b0='QF6QYXNCNRA' where id=1; -update noar tt set v0='GPHGIOU' where id=1; -update noar ti set v0='GPHGIOU' where id=1; -update noar tt set b1='EWT1PVYCPN0O73MOXJFW3NTD' where id=1; -update noar ti set b1='EWT1PVYCPN0O73MOXJFW3NTD' where id=1; -update noar tt set v0='BYFU44IZ7Y' where id=1; -update noar ti set v0='BYFU44IZ7Y' where id=1; -update noar tt set b2='AVTD6LLI' where id=1; -update noar ti set b2='AVTD6LLI' where id=1; -update noar tt set v0='ECUPN3WQRSN1MRRYIESR51VVKUMT' where id=2; -update noar ti set v0='ECUPN3WQRSN1MRRYIESR51VVKUMT' where id=2; -update noar tt set b0='8NRUDSOK3N' where id=2; -update noar ti set b0='8NRUDSOK3N' where id=2; -update noar tt set v0='7N5ROF' where id=2; -update noar ti set v0='7N5ROF' where id=2; -update noar tt set b1='IJSJZBU6SBCI' where id=2; -update noar ti set b1='IJSJZBU6SBCI' where id=2; -update noar tt set v0='XGSRV' where id=2; -update noar ti set v0='XGSRV' where id=2; -update noar tt set b2='TX7WNEUYS0PP8U6HZKWQZR400YUHRJYK' where id=2; -update noar ti set b2='TX7WNEUYS0PP8U6HZKWQZR400YUHRJYK' where id=2; -update noar tt set v0='SW' where id=3; -update noar ti set v0='SW' where id=3; -update noar tt set b0='D0ERQQE7UWE3EQ' where id=3; -update noar ti set b0='D0ERQQE7UWE3EQ' where id=3; -update noar tt set v0='BTK1SCTP609T0N6LZX7PMB6CZ6XACJL' where id=3; -update noar ti set v0='BTK1SCTP609T0N6LZX7PMB6CZ6XACJL' where id=3; -update noar tt set b1='U55Z4C2V' where id=3; -update noar ti set b1='U55Z4C2V' where id=3; -update noar tt set v0='7OLHVM8M8LQGCX34X287S' where id=3; -update noar ti set v0='7OLHVM8M8LQGCX34X287S' where id=3; -update noar tt set b2='2KHEWFRZR343CN54GO89OV8VIDHDPW' where id=3; -update noar ti set b2='2KHEWFRZR343CN54GO89OV8VIDHDPW' where id=3; -update noar tt set v0='MCTD80HA6YBEZBP5KW0FU4' where id=4; -update noar ti set v0='MCTD80HA6YBEZBP5KW0FU4' where id=4; -update noar tt set b0='8PXX4HM' where id=4; -update noar ti set b0='8PXX4HM' where id=4; -update noar tt set v0='7EDT6RR3J8' where id=4; -update noar ti set v0='7EDT6RR3J8' where id=4; -update noar tt set b1='ABYHAUSDNK' where id=4; -update noar ti set b1='ABYHAUSDNK' where id=4; -update noar tt set v0='YFV8I8' where id=4; -update noar ti set v0='YFV8I8' where id=4; -update noar tt set b2='N6NDGXA3URTL355' where id=4; -update noar ti set b2='N6NDGXA3URTL355' where id=4; -update noar tt set v0='ZF' where id=5; -update noar ti set v0='ZF' where id=5; -update noar tt set b0='3WS6WJCL24' where id=5; -update noar ti set b0='3WS6WJCL24' where id=5; -update noar tt set v0='92T7NPCBODHJT750R9C7KBZZQY79' where id=5; -update noar ti set v0='92T7NPCBODHJT750R9C7KBZZQY79' where id=5; -update noar tt set b1='VW2ALM9G6N1M9SHJV6AYJ1SEFVHL3' where id=5; -update noar ti set b1='VW2ALM9G6N1M9SHJV6AYJ1SEFVHL3' where id=5; -update noar tt set v0='V97FM86HPSNVTC6U7FFA3LWPHTC61LS4' where id=5; -update noar ti set v0='V97FM86HPSNVTC6U7FFA3LWPHTC61LS4' where id=5; -update noar tt set b2='JDDZMKV89XRKFJID0L4F41' where id=5; -update noar ti set b2='JDDZMKV89XRKFJID0L4F41' where id=5; -update noar tt set v0='OEE8T' where id=6; -update noar ti set v0='OEE8T' where id=6; -update noar tt set b0='EX7' where id=6; -update noar ti set b0='EX7' where id=6; -update noar tt set v0='7GMGBMBI' where id=6; -update noar ti set v0='7GMGBMBI' where id=6; -update noar tt set b1='8UAD34JETQCE' where id=6; -update noar ti set b1='8UAD34JETQCE' where id=6; -update noar tt set v0='CGZ7AQYM5GACY5O9OM6H5JS' where id=6; -update noar ti set v0='CGZ7AQYM5GACY5O9OM6H5JS' where id=6; -update noar tt set b2='HCJU096DGIYZYB3Z9KEJ0O64YC' where id=6; -update noar ti set b2='HCJU096DGIYZYB3Z9KEJ0O64YC' where id=6; -update noar tt set v0='RP' where id=7; -update noar ti set v0='RP' where id=7; -update noar tt set b0='GKGHPBWZE' where id=7; -update noar ti set b0='GKGHPBWZE' where id=7; -update noar tt set v0='9FMWXHDJ00YF5923W' where id=7; -update noar ti set v0='9FMWXHDJ00YF5923W' where id=7; -update noar tt set b1='QD4' where id=7; -update noar ti set b1='QD4' where id=7; -update noar tt set v0='DIPTXOWFRRNBELFY' where id=7; -update noar ti set v0='DIPTXOWFRRNBELFY' where id=7; -update noar tt set b2='BPRWG3CLLIU' where id=7; -update noar ti set b2='BPRWG3CLLIU' where id=7; -update noar tt set v0='UYQ' where id=8; -update noar ti set v0='UYQ' where id=8; -update noar tt set b0='M4GQ5CDULHQFMAQ0' where id=8; -update noar ti set b0='M4GQ5CDULHQFMAQ0' where id=8; -update noar tt set v0='NMOZTXTI4TKY' where id=8; -update noar ti set v0='NMOZTXTI4TKY' where id=8; -update noar tt set b1='7' where id=8; -update noar ti set b1='7' where id=8; -update noar tt set v0='MBB' where id=8; -update noar ti set v0='MBB' where id=8; -update noar tt set b2='ZNZP4Y23FNFN5V8M704IYBA9Q0DHTMZK' where id=8; -update noar ti set b2='ZNZP4Y23FNFN5V8M704IYBA9Q0DHTMZK' where id=8; -update noar tt set v0='0DFXPNYAHJ0M5G2GRZVEMBEQ3' where id=9; -update noar ti set v0='0DFXPNYAHJ0M5G2GRZVEMBEQ3' where id=9; -update noar tt set b0='T1E9V1D4HTYFOSWCTDYSEA541EU4D' where id=9; -update noar ti set b0='T1E9V1D4HTYFOSWCTDYSEA541EU4D' where id=9; -update noar tt set v0='EMUT16' where id=9; -update noar ti set v0='EMUT16' where id=9; -update noar tt set b1='GQNKZ8M' where id=9; -update noar ti set b1='GQNKZ8M' where id=9; -update noar tt set v0='O40BP' where id=9; -update noar ti set v0='O40BP' where id=9; -update noar tt set b2='SINGGHTR9MS5J' where id=9; -update noar ti set b2='SINGGHTR9MS5J' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 mediumblob null, - b1 blob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='C6I524804P4S2BCUPBGK24QJZJVEID' where id=1; -update noar ti set v0='C6I524804P4S2BCUPBGK24QJZJVEID' where id=1; -update noar tt set b0='GODPXG0KVZUBUML74GOAQQJAT' where id=1; -update noar ti set b0='GODPXG0KVZUBUML74GOAQQJAT' where id=1; -update noar tt set v0='IL36WANFZC' where id=1; -update noar ti set v0='IL36WANFZC' where id=1; -update noar tt set b1='718SKGB08T8F2JNH' where id=1; -update noar ti set b1='718SKGB08T8F2JNH' where id=1; -update noar tt set v0='6QQS20G7XG' where id=1; -update noar ti set v0='6QQS20G7XG' where id=1; -update noar tt set b2='936DSFV' where id=1; -update noar ti set b2='936DSFV' where id=1; -update noar tt set v0='HCP6V4IGG1S9N1153' where id=2; -update noar ti set v0='HCP6V4IGG1S9N1153' where id=2; -update noar tt set b0='76XSNU7QUCWWXH5YJY5ID328' where id=2; -update noar ti set b0='76XSNU7QUCWWXH5YJY5ID328' where id=2; -update noar tt set v0='3BZZT5KBVVD0T6GFT5ZDXP1MB' where id=2; -update noar ti set v0='3BZZT5KBVVD0T6GFT5ZDXP1MB' where id=2; -update noar tt set b1='GO6S03BI7B' where id=2; -update noar ti set b1='GO6S03BI7B' where id=2; -update noar tt set v0='3Y1L5KZFWL8' where id=2; -update noar ti set v0='3Y1L5KZFWL8' where id=2; -update noar tt set b2='0SAVNFXS' where id=2; -update noar ti set b2='0SAVNFXS' where id=2; -update noar tt set v0='ORJ7IA0SITJDG' where id=3; -update noar ti set v0='ORJ7IA0SITJDG' where id=3; -update noar tt set b0='I8VTVVG0SJ9NJ' where id=3; -update noar ti set b0='I8VTVVG0SJ9NJ' where id=3; -update noar tt set v0='W1DXHCGPUQ4WAP15WE2NTT' where id=3; -update noar ti set v0='W1DXHCGPUQ4WAP15WE2NTT' where id=3; -update noar tt set b1='KIQ25ORK9XF1HXLR8NYL38V0PXM1' where id=3; -update noar ti set b1='KIQ25ORK9XF1HXLR8NYL38V0PXM1' where id=3; -update noar tt set v0='8V2692RPN' where id=3; -update noar ti set v0='8V2692RPN' where id=3; -update noar tt set b2='MRUK27B216ND2VY7LU' where id=3; -update noar ti set b2='MRUK27B216ND2VY7LU' where id=3; -update noar tt set v0='9JDGBG1FQM2ZC' where id=4; -update noar ti set v0='9JDGBG1FQM2ZC' where id=4; -update noar tt set b0='JF91RAHW8EYTVMFFVVOZN5C8OXY' where id=4; -update noar ti set b0='JF91RAHW8EYTVMFFVVOZN5C8OXY' where id=4; -update noar tt set v0='7VT1Q0S7K9IXB67DI4V38G' where id=4; -update noar ti set v0='7VT1Q0S7K9IXB67DI4V38G' where id=4; -update noar tt set b1='VULZMFMGV790' where id=4; -update noar ti set b1='VULZMFMGV790' where id=4; -update noar tt set v0='B0JJ6UUV8FZZO9' where id=4; -update noar ti set v0='B0JJ6UUV8FZZO9' where id=4; -update noar tt set b2='ZSRXYK66R0TPVJV9A' where id=4; -update noar ti set b2='ZSRXYK66R0TPVJV9A' where id=4; -update noar tt set v0='0MD30BSTL64ZZ3IZ7WPRUUU8H8LKLVS' where id=5; -update noar ti set v0='0MD30BSTL64ZZ3IZ7WPRUUU8H8LKLVS' where id=5; -update noar tt set b0='C32JNFWQZ' where id=5; -update noar ti set b0='C32JNFWQZ' where id=5; -update noar tt set v0='5W8S' where id=5; -update noar ti set v0='5W8S' where id=5; -update noar tt set b1='ZJTKDSFHNYGPRQNO2LJ3' where id=5; -update noar ti set b1='ZJTKDSFHNYGPRQNO2LJ3' where id=5; -update noar tt set v0='5D8LBSCUJB9PL9VC9X95WWONY12' where id=5; -update noar ti set v0='5D8LBSCUJB9PL9VC9X95WWONY12' where id=5; -update noar tt set b2='7P2G' where id=5; -update noar ti set b2='7P2G' where id=5; -update noar tt set v0='0CBM31M1W' where id=6; -update noar ti set v0='0CBM31M1W' where id=6; -update noar tt set b0='RT629VIM3YR5H0FPCGLYBO' where id=6; -update noar ti set b0='RT629VIM3YR5H0FPCGLYBO' where id=6; -update noar tt set v0='1VFUOEF2GR4D9H1UYT82M1' where id=6; -update noar ti set v0='1VFUOEF2GR4D9H1UYT82M1' where id=6; -update noar tt set b1='9J73GRC1' where id=6; -update noar ti set b1='9J73GRC1' where id=6; -update noar tt set v0='HQ0M0PFDVJYZC' where id=6; -update noar ti set v0='HQ0M0PFDVJYZC' where id=6; -update noar tt set b2='QPOOQJII' where id=6; -update noar ti set b2='QPOOQJII' where id=6; -update noar tt set v0='K' where id=7; -update noar ti set v0='K' where id=7; -update noar tt set b0='OP' where id=7; -update noar ti set b0='OP' where id=7; -update noar tt set v0='AVZ8V38TC3XNIMJ4P5DXYT5T' where id=7; -update noar ti set v0='AVZ8V38TC3XNIMJ4P5DXYT5T' where id=7; -update noar tt set b1='DSIY7JZH8Y7EA2QDDDKJP6N' where id=7; -update noar ti set b1='DSIY7JZH8Y7EA2QDDDKJP6N' where id=7; -update noar tt set v0='9' where id=7; -update noar ti set v0='9' where id=7; -update noar tt set b2='ND7XNU83TBT57CG1B5WPRY2WR' where id=7; -update noar ti set b2='ND7XNU83TBT57CG1B5WPRY2WR' where id=7; -update noar tt set v0='A0XEKZJWIEXVFJB' where id=8; -update noar ti set v0='A0XEKZJWIEXVFJB' where id=8; -update noar tt set b0='N6F8ZMJYQV528UXBA2AI7N' where id=8; -update noar ti set b0='N6F8ZMJYQV528UXBA2AI7N' where id=8; -update noar tt set v0='OTT' where id=8; -update noar ti set v0='OTT' where id=8; -update noar tt set b1='6T1193XK5VDPV1JGCJHPRLV' where id=8; -update noar ti set b1='6T1193XK5VDPV1JGCJHPRLV' where id=8; -update noar tt set v0='MFT7XV8NHPFDU2KPXTH6JO0791WC' where id=8; -update noar ti set v0='MFT7XV8NHPFDU2KPXTH6JO0791WC' where id=8; -update noar tt set b2='XU8A8IT1PW458V3FTWJV' where id=8; -update noar ti set b2='XU8A8IT1PW458V3FTWJV' where id=8; -update noar tt set v0='VMZ7RG692N4' where id=9; -update noar ti set v0='VMZ7RG692N4' where id=9; -update noar tt set b0='Z2HZYGM4J2BBTP0G' where id=9; -update noar ti set b0='Z2HZYGM4J2BBTP0G' where id=9; -update noar tt set v0='09TJH6J7MWI4GTYBLL629K1M' where id=9; -update noar ti set v0='09TJH6J7MWI4GTYBLL629K1M' where id=9; -update noar tt set b1='2QZ6VCT01CICI4' where id=9; -update noar ti set b1='2QZ6VCT01CICI4' where id=9; -update noar tt set v0='CTRZIFP' where id=9; -update noar ti set v0='CTRZIFP' where id=9; -update noar tt set b2='6S4N60D4I92PEIVXTGZ2QB' where id=9; -update noar ti set b2='6S4N60D4I92PEIVXTGZ2QB' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 mediumblob not null, - b1 blob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='NE5EMU54MBBMGRYZ7STDLKSTWC' where id=1; -update noar ti set v0='NE5EMU54MBBMGRYZ7STDLKSTWC' where id=1; -update noar tt set b0='P8FC1ARO2HP6Q26Y' where id=1; -update noar ti set b0='P8FC1ARO2HP6Q26Y' where id=1; -update noar tt set v0='FU9SWKGIK8ZCY7NY9SAPH' where id=1; -update noar ti set v0='FU9SWKGIK8ZCY7NY9SAPH' where id=1; -update noar tt set b1='LOU4OKP1BL' where id=1; -update noar ti set b1='LOU4OKP1BL' where id=1; -update noar tt set v0='8VFW77O' where id=1; -update noar ti set v0='8VFW77O' where id=1; -update noar tt set b2='SWHTVHNT0YWRXH8EW' where id=1; -update noar ti set b2='SWHTVHNT0YWRXH8EW' where id=1; -update noar tt set v0='IX4UMYR2' where id=2; -update noar ti set v0='IX4UMYR2' where id=2; -update noar tt set b0='TV' where id=2; -update noar ti set b0='TV' where id=2; -update noar tt set v0='SHP1MZLNLQ9Z6ET01Z4VXPHB7' where id=2; -update noar ti set v0='SHP1MZLNLQ9Z6ET01Z4VXPHB7' where id=2; -update noar tt set b1='MC' where id=2; -update noar ti set b1='MC' where id=2; -update noar tt set v0='AUO97HV5ZV3SNY9WX13RWY' where id=2; -update noar ti set v0='AUO97HV5ZV3SNY9WX13RWY' where id=2; -update noar tt set b2='D0VNKR9TZ39UZF8252QOH' where id=2; -update noar ti set b2='D0VNKR9TZ39UZF8252QOH' where id=2; -update noar tt set v0='QSECL3T36HGUFOCC4ZYOW' where id=3; -update noar ti set v0='QSECL3T36HGUFOCC4ZYOW' where id=3; -update noar tt set b0='H' where id=3; -update noar ti set b0='H' where id=3; -update noar tt set v0='PB403RABLD37I0W2QP' where id=3; -update noar ti set v0='PB403RABLD37I0W2QP' where id=3; -update noar tt set b1='UX' where id=3; -update noar ti set b1='UX' where id=3; -update noar tt set v0='A5' where id=3; -update noar ti set v0='A5' where id=3; -update noar tt set b2='HRM9QXKVPCGYVT303FK66' where id=3; -update noar ti set b2='HRM9QXKVPCGYVT303FK66' where id=3; -update noar tt set v0='W' where id=4; -update noar ti set v0='W' where id=4; -update noar tt set b0='BSKVQXP54HLRTCR9' where id=4; -update noar ti set b0='BSKVQXP54HLRTCR9' where id=4; -update noar tt set v0='DX7JYDJCWG5SZ931U9RCM' where id=4; -update noar ti set v0='DX7JYDJCWG5SZ931U9RCM' where id=4; -update noar tt set b1='HI4A9255HXASTZSC2YGAZ5JY4' where id=4; -update noar ti set b1='HI4A9255HXASTZSC2YGAZ5JY4' where id=4; -update noar tt set v0='9DTSKYN1AMJZOQKVHUWFAR0JT' where id=4; -update noar ti set v0='9DTSKYN1AMJZOQKVHUWFAR0JT' where id=4; -update noar tt set b2='R7BNJ3EMZY9ZGMVH' where id=4; -update noar ti set b2='R7BNJ3EMZY9ZGMVH' where id=4; -update noar tt set v0='SFIHR' where id=5; -update noar ti set v0='SFIHR' where id=5; -update noar tt set b0='14ED1DCK4CRD4SV5NJBZQXM70MR5H' where id=5; -update noar ti set b0='14ED1DCK4CRD4SV5NJBZQXM70MR5H' where id=5; -update noar tt set v0='SSRIA' where id=5; -update noar ti set v0='SSRIA' where id=5; -update noar tt set b1='BSUB1WOW' where id=5; -update noar ti set b1='BSUB1WOW' where id=5; -update noar tt set v0='QLUNYKC' where id=5; -update noar ti set v0='QLUNYKC' where id=5; -update noar tt set b2='PDSOWNO6P4CDGKB3TGK1RHW' where id=5; -update noar ti set b2='PDSOWNO6P4CDGKB3TGK1RHW' where id=5; -update noar tt set v0='ZWA0TM82UMEPDINGVBBQ6HPP' where id=6; -update noar ti set v0='ZWA0TM82UMEPDINGVBBQ6HPP' where id=6; -update noar tt set b0='CEN56OIJO40HJBAJPD2DAK67MOGAUN' where id=6; -update noar ti set b0='CEN56OIJO40HJBAJPD2DAK67MOGAUN' where id=6; -update noar tt set v0='1' where id=6; -update noar ti set v0='1' where id=6; -update noar tt set b1='QLFY2XHV9HGHPJ' where id=6; -update noar ti set b1='QLFY2XHV9HGHPJ' where id=6; -update noar tt set v0='KX5NV' where id=6; -update noar ti set v0='KX5NV' where id=6; -update noar tt set b2='U1IAW9W' where id=6; -update noar ti set b2='U1IAW9W' where id=6; -update noar tt set v0='10JDK' where id=7; -update noar ti set v0='10JDK' where id=7; -update noar tt set b0='C10W76E7R' where id=7; -update noar ti set b0='C10W76E7R' where id=7; -update noar tt set v0='E' where id=7; -update noar ti set v0='E' where id=7; -update noar tt set b1='PYW304GJF0KFL4J8WS' where id=7; -update noar ti set b1='PYW304GJF0KFL4J8WS' where id=7; -update noar tt set v0='E29EOK6RLDPGNIWTUWC8P' where id=7; -update noar ti set v0='E29EOK6RLDPGNIWTUWC8P' where id=7; -update noar tt set b2='ZJ28NDE9YO8T5MZNUE43AY5CBQIYW' where id=7; -update noar ti set b2='ZJ28NDE9YO8T5MZNUE43AY5CBQIYW' where id=7; -update noar tt set v0='KI2D7K0W6C3NW6NI6RACYL84Q' where id=8; -update noar ti set v0='KI2D7K0W6C3NW6NI6RACYL84Q' where id=8; -update noar tt set b0='2FI' where id=8; -update noar ti set b0='2FI' where id=8; -update noar tt set v0='VG64DCDIN21X77EH4N7ELVD' where id=8; -update noar ti set v0='VG64DCDIN21X77EH4N7ELVD' where id=8; -update noar tt set b1='71HR9E8HHQUA0O1VVLR1' where id=8; -update noar ti set b1='71HR9E8HHQUA0O1VVLR1' where id=8; -update noar tt set v0='F2YS0AMVIO0P54' where id=8; -update noar ti set v0='F2YS0AMVIO0P54' where id=8; -update noar tt set b2='XTJK17K9DS7O2WI66AT1SEK' where id=8; -update noar ti set b2='XTJK17K9DS7O2WI66AT1SEK' where id=8; -update noar tt set v0='L0QON805KNY573W0LKDXH1DPUM86G4E' where id=9; -update noar ti set v0='L0QON805KNY573W0LKDXH1DPUM86G4E' where id=9; -update noar tt set b0='3S1WCM' where id=9; -update noar ti set b0='3S1WCM' where id=9; -update noar tt set v0='2MR5M8CVXKXG97TD2FRWCCMM19KL' where id=9; -update noar ti set v0='2MR5M8CVXKXG97TD2FRWCCMM19KL' where id=9; -update noar tt set b1='L' where id=9; -update noar ti set b1='L' where id=9; -update noar tt set v0='950Z8NSDX3ETQVF23G' where id=9; -update noar ti set v0='950Z8NSDX3ETQVF23G' where id=9; -update noar tt set b2='2FLI4IJKLQ86T43F8VWYA9CMB0TX' where id=9; -update noar ti set b2='2FLI4IJKLQ86T43F8VWYA9CMB0TX' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 mediumblob not null, - b1 blob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='V4THDEBWR4QM3J' where id=1; -update noar ti set v0='V4THDEBWR4QM3J' where id=1; -update noar tt set b0='EKCTXW5S4ZCLAWTEF' where id=1; -update noar ti set b0='EKCTXW5S4ZCLAWTEF' where id=1; -update noar tt set v0='CZIH6J' where id=1; -update noar ti set v0='CZIH6J' where id=1; -update noar tt set b1='Y8EIS3O7H' where id=1; -update noar ti set b1='Y8EIS3O7H' where id=1; -update noar tt set v0='Q4NV0F7WIXLZXTIW0R6ZV223U7' where id=1; -update noar ti set v0='Q4NV0F7WIXLZXTIW0R6ZV223U7' where id=1; -update noar tt set b2='HUPX6W6WP1R2BWTYA0RPO1HCQ52FG' where id=1; -update noar ti set b2='HUPX6W6WP1R2BWTYA0RPO1HCQ52FG' where id=1; -update noar tt set v0='DWP2W7KAIJJ79XC2IQ1QX1B' where id=2; -update noar ti set v0='DWP2W7KAIJJ79XC2IQ1QX1B' where id=2; -update noar tt set b0='76SM4BQURN4SH' where id=2; -update noar ti set b0='76SM4BQURN4SH' where id=2; -update noar tt set v0='ND2NWNT' where id=2; -update noar ti set v0='ND2NWNT' where id=2; -update noar tt set b1='O7XW033WZ2TF0M' where id=2; -update noar ti set b1='O7XW033WZ2TF0M' where id=2; -update noar tt set v0='01KXQRFL75M24G4G' where id=2; -update noar ti set v0='01KXQRFL75M24G4G' where id=2; -update noar tt set b2='KK' where id=2; -update noar ti set b2='KK' where id=2; -update noar tt set v0='L4PWHJNVAMOPEN' where id=3; -update noar ti set v0='L4PWHJNVAMOPEN' where id=3; -update noar tt set b0='BVSLVLV0ZYWBB7WZNCD6H' where id=3; -update noar ti set b0='BVSLVLV0ZYWBB7WZNCD6H' where id=3; -update noar tt set v0='DFK0AJYRV6U29FOVPE034PO' where id=3; -update noar ti set v0='DFK0AJYRV6U29FOVPE034PO' where id=3; -update noar tt set b1='MYX' where id=3; -update noar ti set b1='MYX' where id=3; -update noar tt set v0='17M' where id=3; -update noar ti set v0='17M' where id=3; -update noar tt set b2='VBPTK1MKYPKEZTECP3PVMC87QYZKG1G' where id=3; -update noar ti set b2='VBPTK1MKYPKEZTECP3PVMC87QYZKG1G' where id=3; -update noar tt set v0='QTUAPDYYBDK7GAD6XT6OOHQ4BAUF5TV' where id=4; -update noar ti set v0='QTUAPDYYBDK7GAD6XT6OOHQ4BAUF5TV' where id=4; -update noar tt set b0='BWOWBBQWFP3W3HWBSTMSK1ZJ0W' where id=4; -update noar ti set b0='BWOWBBQWFP3W3HWBSTMSK1ZJ0W' where id=4; -update noar tt set v0='4JGD5VISZ3CEM36' where id=4; -update noar ti set v0='4JGD5VISZ3CEM36' where id=4; -update noar tt set b1='FYQ4XFFR761' where id=4; -update noar ti set b1='FYQ4XFFR761' where id=4; -update noar tt set v0='BRFJ1Z2OKJUIDBMHVA6M5' where id=4; -update noar ti set v0='BRFJ1Z2OKJUIDBMHVA6M5' where id=4; -update noar tt set b2='HY0D7' where id=4; -update noar ti set b2='HY0D7' where id=4; -update noar tt set v0='PRCOAKN5NJRJWKNE8QUZ1VCG' where id=5; -update noar ti set v0='PRCOAKN5NJRJWKNE8QUZ1VCG' where id=5; -update noar tt set b0='EMH1N90RK40R3982HVEFWI9GT7MCHUW' where id=5; -update noar ti set b0='EMH1N90RK40R3982HVEFWI9GT7MCHUW' where id=5; -update noar tt set v0='K5DA1UZM4VQ5' where id=5; -update noar ti set v0='K5DA1UZM4VQ5' where id=5; -update noar tt set b1='G43TF4GQYISB66734WDE' where id=5; -update noar ti set b1='G43TF4GQYISB66734WDE' where id=5; -update noar tt set v0='KRZ3LXH4' where id=5; -update noar ti set v0='KRZ3LXH4' where id=5; -update noar tt set b2='RW1P0U660I7YW5C38DP0T' where id=5; -update noar ti set b2='RW1P0U660I7YW5C38DP0T' where id=5; -update noar tt set v0='FB1S' where id=6; -update noar ti set v0='FB1S' where id=6; -update noar tt set b0='QM07H2G4Y4Y35' where id=6; -update noar ti set b0='QM07H2G4Y4Y35' where id=6; -update noar tt set v0='EK0IKX5GQWLWSM95QK5AAYADG36FGHLV' where id=6; -update noar ti set v0='EK0IKX5GQWLWSM95QK5AAYADG36FGHLV' where id=6; -update noar tt set b1='A' where id=6; -update noar ti set b1='A' where id=6; -update noar tt set v0='RG50T3F6GBMAX1X' where id=6; -update noar ti set v0='RG50T3F6GBMAX1X' where id=6; -update noar tt set b2='AQPUTMVZ96IA' where id=6; -update noar ti set b2='AQPUTMVZ96IA' where id=6; -update noar tt set v0='8HEMBQXQVV2KN6P7S' where id=7; -update noar ti set v0='8HEMBQXQVV2KN6P7S' where id=7; -update noar tt set b0='AFQ6' where id=7; -update noar ti set b0='AFQ6' where id=7; -update noar tt set v0='BUF3AVQU1DYUW0QN34GH0' where id=7; -update noar ti set v0='BUF3AVQU1DYUW0QN34GH0' where id=7; -update noar tt set b1='JCM9MT1NQRFLLKO343Y' where id=7; -update noar ti set b1='JCM9MT1NQRFLLKO343Y' where id=7; -update noar tt set v0='RERYI' where id=7; -update noar ti set v0='RERYI' where id=7; -update noar tt set b2='DMGEQL89MFJJBVJ4L8EDSTUC16JERVRU' where id=7; -update noar ti set b2='DMGEQL89MFJJBVJ4L8EDSTUC16JERVRU' where id=7; -update noar tt set v0='575YE4HY7U3I' where id=8; -update noar ti set v0='575YE4HY7U3I' where id=8; -update noar tt set b0='PVGQ6S' where id=8; -update noar ti set b0='PVGQ6S' where id=8; -update noar tt set v0='DZPL4JIAVKYUADTP5CWKG0MEZT0P427' where id=8; -update noar ti set v0='DZPL4JIAVKYUADTP5CWKG0MEZT0P427' where id=8; -update noar tt set b1='NDCC5H97399M' where id=8; -update noar ti set b1='NDCC5H97399M' where id=8; -update noar tt set v0='FSSGHDCVOU2HHDB3QYX88' where id=8; -update noar ti set v0='FSSGHDCVOU2HHDB3QYX88' where id=8; -update noar tt set b2='P206ON3SV2SC30KTVFO4EKKOIH5WJGDS' where id=8; -update noar ti set b2='P206ON3SV2SC30KTVFO4EKKOIH5WJGDS' where id=8; -update noar tt set v0='AMLAJN' where id=9; -update noar ti set v0='AMLAJN' where id=9; -update noar tt set b0='RWB' where id=9; -update noar ti set b0='RWB' where id=9; -update noar tt set v0='LJ0NOMFSQCSCS' where id=9; -update noar ti set v0='LJ0NOMFSQCSCS' where id=9; -update noar tt set b1='L1D' where id=9; -update noar ti set b1='L1D' where id=9; -update noar tt set v0='HMBDH40LHFIZJNOQCWR310O5' where id=9; -update noar ti set v0='HMBDH40LHFIZJNOQCWR310O5' where id=9; -update noar tt set b2='904U6CHXLE3GJD5WXSHBIAZNV' where id=9; -update noar ti set b2='904U6CHXLE3GJD5WXSHBIAZNV' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 mediumblob null, - b1 blob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='84KMRKXTIC1YC2' where id=1; -update noar ti set v0='84KMRKXTIC1YC2' where id=1; -update noar tt set b0='MVBCD4VR7ENQ0M1OAEVYBVQEA' where id=1; -update noar ti set b0='MVBCD4VR7ENQ0M1OAEVYBVQEA' where id=1; -update noar tt set v0='L5C7Z4OWN4P395FUQ3HI' where id=1; -update noar ti set v0='L5C7Z4OWN4P395FUQ3HI' where id=1; -update noar tt set b1='WM1VXZ87JBB1' where id=1; -update noar ti set b1='WM1VXZ87JBB1' where id=1; -update noar tt set v0='JGUZ13EBM1DXYCHS' where id=1; -update noar ti set v0='JGUZ13EBM1DXYCHS' where id=1; -update noar tt set b2='3E2IHJIWQUKGNGKAZZW0MNI' where id=1; -update noar ti set b2='3E2IHJIWQUKGNGKAZZW0MNI' where id=1; -update noar tt set v0='JDOW' where id=2; -update noar ti set v0='JDOW' where id=2; -update noar tt set b0='1U192K4DAUI' where id=2; -update noar ti set b0='1U192K4DAUI' where id=2; -update noar tt set v0='4OERL68FY12XRI6WE' where id=2; -update noar ti set v0='4OERL68FY12XRI6WE' where id=2; -update noar tt set b1='Q580ZY9PQQW599DT26N4W' where id=2; -update noar ti set b1='Q580ZY9PQQW599DT26N4W' where id=2; -update noar tt set v0='1EFOXRD49Y45LLTGE8LA7W9YHFKCIQA' where id=2; -update noar ti set v0='1EFOXRD49Y45LLTGE8LA7W9YHFKCIQA' where id=2; -update noar tt set b2='WYQLFEBWR7' where id=2; -update noar ti set b2='WYQLFEBWR7' where id=2; -update noar tt set v0='850HEBXJGVF4A9LB0G6' where id=3; -update noar ti set v0='850HEBXJGVF4A9LB0G6' where id=3; -update noar tt set b0='WMZWXQZ0UM8FUQ3SMKB7F' where id=3; -update noar ti set b0='WMZWXQZ0UM8FUQ3SMKB7F' where id=3; -update noar tt set v0='WIJE7CVXLA2B8HLISM8J26B0I9PW' where id=3; -update noar ti set v0='WIJE7CVXLA2B8HLISM8J26B0I9PW' where id=3; -update noar tt set b1='3PWXBYQP57B533B6WSPWR70DMW' where id=3; -update noar ti set b1='3PWXBYQP57B533B6WSPWR70DMW' where id=3; -update noar tt set v0='BUH0PSQPL' where id=3; -update noar ti set v0='BUH0PSQPL' where id=3; -update noar tt set b2='WETZ7Q181K3ENUORLJOVC' where id=3; -update noar ti set b2='WETZ7Q181K3ENUORLJOVC' where id=3; -update noar tt set v0='O4PKRC37CF431E514TPL4NPCMQZOMKCP' where id=4; -update noar ti set v0='O4PKRC37CF431E514TPL4NPCMQZOMKCP' where id=4; -update noar tt set b0='5VYIHZ43X6HNR' where id=4; -update noar ti set b0='5VYIHZ43X6HNR' where id=4; -update noar tt set v0='B2DO6072DREXUAD6AVEMFUUL' where id=4; -update noar ti set v0='B2DO6072DREXUAD6AVEMFUUL' where id=4; -update noar tt set b1='2L4DZOX6FQPV' where id=4; -update noar ti set b1='2L4DZOX6FQPV' where id=4; -update noar tt set v0='CP6JBLEG2X9U6D' where id=4; -update noar ti set v0='CP6JBLEG2X9U6D' where id=4; -update noar tt set b2='MPPAQF17XWJELS28DWW' where id=4; -update noar ti set b2='MPPAQF17XWJELS28DWW' where id=4; -update noar tt set v0='EEM1UR9ZSKXDG62IGZKW9' where id=5; -update noar ti set v0='EEM1UR9ZSKXDG62IGZKW9' where id=5; -update noar tt set b0='NW4UJJ1WLQA6K26H' where id=5; -update noar ti set b0='NW4UJJ1WLQA6K26H' where id=5; -update noar tt set v0='MB' where id=5; -update noar ti set v0='MB' where id=5; -update noar tt set b1='IY1FXA53BAQUCDFGIP9JT8FW2OWUH' where id=5; -update noar ti set b1='IY1FXA53BAQUCDFGIP9JT8FW2OWUH' where id=5; -update noar tt set v0='Z64' where id=5; -update noar ti set v0='Z64' where id=5; -update noar tt set b2='SBSTUFUWC5EMBCJPJSKAK54MM6O2QX' where id=5; -update noar ti set b2='SBSTUFUWC5EMBCJPJSKAK54MM6O2QX' where id=5; -update noar tt set v0='AVRRXO5CQYXHPDCW0' where id=6; -update noar ti set v0='AVRRXO5CQYXHPDCW0' where id=6; -update noar tt set b0='O' where id=6; -update noar ti set b0='O' where id=6; -update noar tt set v0='N8S1XG4BS504J68ZQKFO' where id=6; -update noar ti set v0='N8S1XG4BS504J68ZQKFO' where id=6; -update noar tt set b1='F2R4518ZYEQI3G26M743SB9H89AYA2IA' where id=6; -update noar ti set b1='F2R4518ZYEQI3G26M743SB9H89AYA2IA' where id=6; -update noar tt set v0='9SA' where id=6; -update noar ti set v0='9SA' where id=6; -update noar tt set b2='CLB5J' where id=6; -update noar ti set b2='CLB5J' where id=6; -update noar tt set v0='P0SQ1OJPERM40RMCEQ9QPIBSVU5ZU' where id=7; -update noar ti set v0='P0SQ1OJPERM40RMCEQ9QPIBSVU5ZU' where id=7; -update noar tt set b0='TY223YMGNY' where id=7; -update noar ti set b0='TY223YMGNY' where id=7; -update noar tt set v0='G0FE40C5F3QEA7K441RQAX7RT' where id=7; -update noar ti set v0='G0FE40C5F3QEA7K441RQAX7RT' where id=7; -update noar tt set b1='CWZ' where id=7; -update noar ti set b1='CWZ' where id=7; -update noar tt set v0='7V44477KO' where id=7; -update noar ti set v0='7V44477KO' where id=7; -update noar tt set b2='7DRUW7HAKJILRTAOJGS7QS2W1IH2JX' where id=7; -update noar ti set b2='7DRUW7HAKJILRTAOJGS7QS2W1IH2JX' where id=7; -update noar tt set v0='K3NXH4' where id=8; -update noar ti set v0='K3NXH4' where id=8; -update noar tt set b0='CT5UF3ZFBG1K' where id=8; -update noar ti set b0='CT5UF3ZFBG1K' where id=8; -update noar tt set v0='IUGLVO7UHOZKVDH6A' where id=8; -update noar ti set v0='IUGLVO7UHOZKVDH6A' where id=8; -update noar tt set b1='V8YEO7AG8UHO' where id=8; -update noar ti set b1='V8YEO7AG8UHO' where id=8; -update noar tt set v0='AI756EXP89J9WFCW57' where id=8; -update noar ti set v0='AI756EXP89J9WFCW57' where id=8; -update noar tt set b2='2M7S680ETYZKU5CX' where id=8; -update noar ti set b2='2M7S680ETYZKU5CX' where id=8; -update noar tt set v0='KPTGNP2655HOUDCV' where id=9; -update noar ti set v0='KPTGNP2655HOUDCV' where id=9; -update noar tt set b0='4T9VTU0F82G671S7' where id=9; -update noar ti set b0='4T9VTU0F82G671S7' where id=9; -update noar tt set v0='XJNFVR6VMAL7O58RQ3BEU2V3W' where id=9; -update noar ti set v0='XJNFVR6VMAL7O58RQ3BEU2V3W' where id=9; -update noar tt set b1='ZJ812PLQ7HY6GRLBNC8RPWJUV' where id=9; -update noar ti set b1='ZJ812PLQ7HY6GRLBNC8RPWJUV' where id=9; -update noar tt set v0='7YN4ONAP7' where id=9; -update noar ti set v0='7YN4ONAP7' where id=9; -update noar tt set b2='4R0E4GIQT9O' where id=9; -update noar ti set b2='4R0E4GIQT9O' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 mediumblob null, - b1 blob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='PGPR9X9YJUTCFF' where id=1; -update noar ti set v0='PGPR9X9YJUTCFF' where id=1; -update noar tt set b0='GJ72EVTAPCAUDR8907G9LLJH' where id=1; -update noar ti set b0='GJ72EVTAPCAUDR8907G9LLJH' where id=1; -update noar tt set v0='BKCH' where id=1; -update noar ti set v0='BKCH' where id=1; -update noar tt set b1='EYNSYJQ3P985PSD' where id=1; -update noar ti set b1='EYNSYJQ3P985PSD' where id=1; -update noar tt set v0='NIWYIVKATSKTW99I2JEX0IKG' where id=1; -update noar ti set v0='NIWYIVKATSKTW99I2JEX0IKG' where id=1; -update noar tt set b2='9M761U25' where id=1; -update noar ti set b2='9M761U25' where id=1; -update noar tt set v0='F7PMRFSYNJL2P84C4EJ' where id=2; -update noar ti set v0='F7PMRFSYNJL2P84C4EJ' where id=2; -update noar tt set b0='SZQ6A06PT131BWJ8JV8L5BDLG8' where id=2; -update noar ti set b0='SZQ6A06PT131BWJ8JV8L5BDLG8' where id=2; -update noar tt set v0='3CX9TFLV9BZ2RXL8N' where id=2; -update noar ti set v0='3CX9TFLV9BZ2RXL8N' where id=2; -update noar tt set b1='KEUMZBWUBN65AJ' where id=2; -update noar ti set b1='KEUMZBWUBN65AJ' where id=2; -update noar tt set v0='M7L4' where id=2; -update noar ti set v0='M7L4' where id=2; -update noar tt set b2='5QDJ0L13ZGNHUR2YID9131BG' where id=2; -update noar ti set b2='5QDJ0L13ZGNHUR2YID9131BG' where id=2; -update noar tt set v0='5' where id=3; -update noar ti set v0='5' where id=3; -update noar tt set b0='5PO5HAL5' where id=3; -update noar ti set b0='5PO5HAL5' where id=3; -update noar tt set v0='0' where id=3; -update noar ti set v0='0' where id=3; -update noar tt set b1='YX4NQFQD3V423DD1HE8X62' where id=3; -update noar ti set b1='YX4NQFQD3V423DD1HE8X62' where id=3; -update noar tt set v0='2YRGKJNVNI' where id=3; -update noar ti set v0='2YRGKJNVNI' where id=3; -update noar tt set b2='SB8I77XDMKLUE52PMR5X' where id=3; -update noar ti set b2='SB8I77XDMKLUE52PMR5X' where id=3; -update noar tt set v0='HQDIN9CRJZ' where id=4; -update noar ti set v0='HQDIN9CRJZ' where id=4; -update noar tt set b0='5TT0NEGCLMIW' where id=4; -update noar ti set b0='5TT0NEGCLMIW' where id=4; -update noar tt set v0='MRQS93GDRK' where id=4; -update noar ti set v0='MRQS93GDRK' where id=4; -update noar tt set b1='IB0SPJJN' where id=4; -update noar ti set b1='IB0SPJJN' where id=4; -update noar tt set v0='BTG' where id=4; -update noar ti set v0='BTG' where id=4; -update noar tt set b2='5UXQITX5DMCJMN9SV0LJY' where id=4; -update noar ti set b2='5UXQITX5DMCJMN9SV0LJY' where id=4; -update noar tt set v0='4' where id=5; -update noar ti set v0='4' where id=5; -update noar tt set b0='THXVJ63P' where id=5; -update noar ti set b0='THXVJ63P' where id=5; -update noar tt set v0='TVX59QX25AU1J355FN' where id=5; -update noar ti set v0='TVX59QX25AU1J355FN' where id=5; -update noar tt set b1='S43RXDC7QDLMIMR2J87YNYEFXB4D' where id=5; -update noar ti set b1='S43RXDC7QDLMIMR2J87YNYEFXB4D' where id=5; -update noar tt set v0='HL1MDNVIYQ45B8KN' where id=5; -update noar ti set v0='HL1MDNVIYQ45B8KN' where id=5; -update noar tt set b2='G9QZTTOOI2US6' where id=5; -update noar ti set b2='G9QZTTOOI2US6' where id=5; -update noar tt set v0='8BN191' where id=6; -update noar ti set v0='8BN191' where id=6; -update noar tt set b0='79E6XKBZH' where id=6; -update noar ti set b0='79E6XKBZH' where id=6; -update noar tt set v0='VC4JKA3SAOU0N7OFNEO5HI2LRP' where id=6; -update noar ti set v0='VC4JKA3SAOU0N7OFNEO5HI2LRP' where id=6; -update noar tt set b1='85G2WABE44HMT06QFBHFZSRNKZUT' where id=6; -update noar ti set b1='85G2WABE44HMT06QFBHFZSRNKZUT' where id=6; -update noar tt set v0='HRTKC' where id=6; -update noar ti set v0='HRTKC' where id=6; -update noar tt set b2='YP02J3' where id=6; -update noar ti set b2='YP02J3' where id=6; -update noar tt set v0='32QY8MJF9DEW9N6GTJIZTK' where id=7; -update noar ti set v0='32QY8MJF9DEW9N6GTJIZTK' where id=7; -update noar tt set b0='RF8O62' where id=7; -update noar ti set b0='RF8O62' where id=7; -update noar tt set v0='WZUPL6918F4' where id=7; -update noar ti set v0='WZUPL6918F4' where id=7; -update noar tt set b1='C2AELA42F' where id=7; -update noar ti set b1='C2AELA42F' where id=7; -update noar tt set v0='DAA47S2LTGV3G0HFBHGDR0PIL' where id=7; -update noar ti set v0='DAA47S2LTGV3G0HFBHGDR0PIL' where id=7; -update noar tt set b2='BT14UFVXFOKIATLCYDWMENP2' where id=7; -update noar ti set b2='BT14UFVXFOKIATLCYDWMENP2' where id=7; -update noar tt set v0='NV5ERN2H9JOQZ43G9AMAL4W' where id=8; -update noar ti set v0='NV5ERN2H9JOQZ43G9AMAL4W' where id=8; -update noar tt set b0='87Z0NO' where id=8; -update noar ti set b0='87Z0NO' where id=8; -update noar tt set v0='48UKQ18CU89HY1PJB' where id=8; -update noar ti set v0='48UKQ18CU89HY1PJB' where id=8; -update noar tt set b1='LCR9OTZHBTCTI5HGJPP0' where id=8; -update noar ti set b1='LCR9OTZHBTCTI5HGJPP0' where id=8; -update noar tt set v0='1Z3L0TMEF5Y1NIX52NIK5V7ZQ7R' where id=8; -update noar ti set v0='1Z3L0TMEF5Y1NIX52NIK5V7ZQ7R' where id=8; -update noar tt set b2='ODXXXF5YUTF2SA3JPXLY' where id=8; -update noar ti set b2='ODXXXF5YUTF2SA3JPXLY' where id=8; -update noar tt set v0='TE' where id=9; -update noar ti set v0='TE' where id=9; -update noar tt set b0='CS0RDZQD' where id=9; -update noar ti set b0='CS0RDZQD' where id=9; -update noar tt set v0='QBCSZ4GUHP5B6BMW9LOP2VAH7M' where id=9; -update noar ti set v0='QBCSZ4GUHP5B6BMW9LOP2VAH7M' where id=9; -update noar tt set b1='5HH2LTH3L2VYH8Q' where id=9; -update noar ti set b1='5HH2LTH3L2VYH8Q' where id=9; -update noar tt set v0='2LGZ6YXANFZMLO' where id=9; -update noar ti set v0='2LGZ6YXANFZMLO' where id=9; -update noar tt set b2='SPH3IZWCYQX2NEKRCQ76EP5JH' where id=9; -update noar ti set b2='SPH3IZWCYQX2NEKRCQ76EP5JH' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 mediumblob not null, - b1 blob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='K9DCBE7U6CHU1L4LXB8NUTATAZ' where id=1; -update noar ti set v0='K9DCBE7U6CHU1L4LXB8NUTATAZ' where id=1; -update noar tt set b0='QP9TCZ5AYIW' where id=1; -update noar ti set b0='QP9TCZ5AYIW' where id=1; -update noar tt set v0='FODV' where id=1; -update noar ti set v0='FODV' where id=1; -update noar tt set b1='ZNU2SC8U8HYHGYUT' where id=1; -update noar ti set b1='ZNU2SC8U8HYHGYUT' where id=1; -update noar tt set v0='FJJDGHK35OJQQWM7PG' where id=1; -update noar ti set v0='FJJDGHK35OJQQWM7PG' where id=1; -update noar tt set b2='GAMAODV6ZL4' where id=1; -update noar ti set b2='GAMAODV6ZL4' where id=1; -update noar tt set v0='QY72N53U4MPHGHQZGJJFZ9NKMJIF' where id=2; -update noar ti set v0='QY72N53U4MPHGHQZGJJFZ9NKMJIF' where id=2; -update noar tt set b0='FW987LIWOQV3BW' where id=2; -update noar ti set b0='FW987LIWOQV3BW' where id=2; -update noar tt set v0='IPWIKJ9F6E9YPQ25EJQDW4K6JF' where id=2; -update noar ti set v0='IPWIKJ9F6E9YPQ25EJQDW4K6JF' where id=2; -update noar tt set b1='PKP' where id=2; -update noar ti set b1='PKP' where id=2; -update noar tt set v0='XY7DREX55RRR8FW5PMFEPXJC' where id=2; -update noar ti set v0='XY7DREX55RRR8FW5PMFEPXJC' where id=2; -update noar tt set b2='CJZ280B9QO83W9ZRIT0KK9REB2' where id=2; -update noar ti set b2='CJZ280B9QO83W9ZRIT0KK9REB2' where id=2; -update noar tt set v0='U6MBM' where id=3; -update noar ti set v0='U6MBM' where id=3; -update noar tt set b0='Z620N2WNPPZGYCTGV5K' where id=3; -update noar ti set b0='Z620N2WNPPZGYCTGV5K' where id=3; -update noar tt set v0='2JLTFVM1' where id=3; -update noar ti set v0='2JLTFVM1' where id=3; -update noar tt set b1='3JVU' where id=3; -update noar ti set b1='3JVU' where id=3; -update noar tt set v0='QN2J5YEZW2X5SXJQT4RIHF2WMBKWM' where id=3; -update noar ti set v0='QN2J5YEZW2X5SXJQT4RIHF2WMBKWM' where id=3; -update noar tt set b2='3FL0NJY6L6UHVZ0VJI59GP6VVB7JREP' where id=3; -update noar ti set b2='3FL0NJY6L6UHVZ0VJI59GP6VVB7JREP' where id=3; -update noar tt set v0='I6JYY' where id=4; -update noar ti set v0='I6JYY' where id=4; -update noar tt set b0='FTHB4MFRE0QKE' where id=4; -update noar ti set b0='FTHB4MFRE0QKE' where id=4; -update noar tt set v0='KM7C34NN23' where id=4; -update noar ti set v0='KM7C34NN23' where id=4; -update noar tt set b1='HC5ALQ183SOX' where id=4; -update noar ti set b1='HC5ALQ183SOX' where id=4; -update noar tt set v0='T' where id=4; -update noar ti set v0='T' where id=4; -update noar tt set b2='8LJV9IBHD6H7RR' where id=4; -update noar ti set b2='8LJV9IBHD6H7RR' where id=4; -update noar tt set v0='D76DZE05MOEXJI3QVJSLSH79AT5H' where id=5; -update noar ti set v0='D76DZE05MOEXJI3QVJSLSH79AT5H' where id=5; -update noar tt set b0='AV3YVQMM3MI2J' where id=5; -update noar ti set b0='AV3YVQMM3MI2J' where id=5; -update noar tt set v0='YS2EYARD1VPNYVMQJ3O2HJFXKF9X7G' where id=5; -update noar ti set v0='YS2EYARD1VPNYVMQJ3O2HJFXKF9X7G' where id=5; -update noar tt set b1='RRYPE7V3P' where id=5; -update noar ti set b1='RRYPE7V3P' where id=5; -update noar tt set v0='WU13VPVSMKE0J2O8X' where id=5; -update noar ti set v0='WU13VPVSMKE0J2O8X' where id=5; -update noar tt set b2='K' where id=5; -update noar ti set b2='K' where id=5; -update noar tt set v0='859YF' where id=6; -update noar ti set v0='859YF' where id=6; -update noar tt set b0='7A9FOFGVVMS1JWO4KE3' where id=6; -update noar ti set b0='7A9FOFGVVMS1JWO4KE3' where id=6; -update noar tt set v0='HU770U0MW46XKK1' where id=6; -update noar ti set v0='HU770U0MW46XKK1' where id=6; -update noar tt set b1='H7Z6YSIVS945I0' where id=6; -update noar ti set b1='H7Z6YSIVS945I0' where id=6; -update noar tt set v0='FTTHL0XVXENZB40ISH0' where id=6; -update noar ti set v0='FTTHL0XVXENZB40ISH0' where id=6; -update noar tt set b2='V7ZTXUAXQLJP8XRNOUB8ZLVGY' where id=6; -update noar ti set b2='V7ZTXUAXQLJP8XRNOUB8ZLVGY' where id=6; -update noar tt set v0='GK7J8K6SA122DV8V04GKXDYHXU5DWQB' where id=7; -update noar ti set v0='GK7J8K6SA122DV8V04GKXDYHXU5DWQB' where id=7; -update noar tt set b0='AWOYNE4HYW9B4ULK3ILS' where id=7; -update noar ti set b0='AWOYNE4HYW9B4ULK3ILS' where id=7; -update noar tt set v0='MMUI' where id=7; -update noar ti set v0='MMUI' where id=7; -update noar tt set b1='HS2XHNESK' where id=7; -update noar ti set b1='HS2XHNESK' where id=7; -update noar tt set v0='J66G1P8LK1' where id=7; -update noar ti set v0='J66G1P8LK1' where id=7; -update noar tt set b2='1PWQ6QD5RUKRE966I60AUN3YYZUPDVY9' where id=7; -update noar ti set b2='1PWQ6QD5RUKRE966I60AUN3YYZUPDVY9' where id=7; -update noar tt set v0='AYT8728RQM2EU91LHLMHCVT0PZ3QNBJW' where id=8; -update noar ti set v0='AYT8728RQM2EU91LHLMHCVT0PZ3QNBJW' where id=8; -update noar tt set b0='JNXK473GZQHOFVN5DB9OKP' where id=8; -update noar ti set b0='JNXK473GZQHOFVN5DB9OKP' where id=8; -update noar tt set v0='MK9FHGRO0JJC51GTDJIJKDQ1WT8I' where id=8; -update noar ti set v0='MK9FHGRO0JJC51GTDJIJKDQ1WT8I' where id=8; -update noar tt set b1='TY6UHCGWXAV' where id=8; -update noar ti set b1='TY6UHCGWXAV' where id=8; -update noar tt set v0='FUNJO59UL05U' where id=8; -update noar ti set v0='FUNJO59UL05U' where id=8; -update noar tt set b2='W9ZB1XT3LL84M7ER39TZIDC8RZM' where id=8; -update noar ti set b2='W9ZB1XT3LL84M7ER39TZIDC8RZM' where id=8; -update noar tt set v0='HUJS0R4' where id=9; -update noar ti set v0='HUJS0R4' where id=9; -update noar tt set b0='GZIX7EHKMVR4EKKT9YP6X9RSRNG8NNS' where id=9; -update noar ti set b0='GZIX7EHKMVR4EKKT9YP6X9RSRNG8NNS' where id=9; -update noar tt set v0='SI2R8ML45IR' where id=9; -update noar ti set v0='SI2R8ML45IR' where id=9; -update noar tt set b1='CXPTEU9S6C6700B' where id=9; -update noar ti set b1='CXPTEU9S6C6700B' where id=9; -update noar tt set v0='T4T' where id=9; -update noar ti set v0='T4T' where id=9; -update noar tt set b2='PA4HCMSD3IOIGYM9E74EGE015WZBY' where id=9; -update noar ti set b2='PA4HCMSD3IOIGYM9E74EGE015WZBY' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 mediumblob not null, - b1 blob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='9PQEZ4VJSOX0' where id=1; -update noar ti set v0='9PQEZ4VJSOX0' where id=1; -update noar tt set b0='O8E' where id=1; -update noar ti set b0='O8E' where id=1; -update noar tt set v0='86KVIYA03KMOQ2EHC33P1140F' where id=1; -update noar ti set v0='86KVIYA03KMOQ2EHC33P1140F' where id=1; -update noar tt set b1='98FVN3OO1E1S' where id=1; -update noar ti set b1='98FVN3OO1E1S' where id=1; -update noar tt set v0='YZWIW6OM9QVWB42L76' where id=1; -update noar ti set v0='YZWIW6OM9QVWB42L76' where id=1; -update noar tt set b2='MGGJM5U4SUJAOTJ5P34HOMA9Z2' where id=1; -update noar ti set b2='MGGJM5U4SUJAOTJ5P34HOMA9Z2' where id=1; -update noar tt set v0='BSN60NF' where id=2; -update noar ti set v0='BSN60NF' where id=2; -update noar tt set b0='FMYGOJLUS3Q0NELVY' where id=2; -update noar ti set b0='FMYGOJLUS3Q0NELVY' where id=2; -update noar tt set v0='457X7ZN2NU63AHHQHFE73TCGBESE' where id=2; -update noar ti set v0='457X7ZN2NU63AHHQHFE73TCGBESE' where id=2; -update noar tt set b1='3Z0' where id=2; -update noar ti set b1='3Z0' where id=2; -update noar tt set v0='23TB3E5CZYI3WAJ3XHO' where id=2; -update noar ti set v0='23TB3E5CZYI3WAJ3XHO' where id=2; -update noar tt set b2='RYU1ST9P5ODKY5321V0KVLN6XO2NNU' where id=2; -update noar ti set b2='RYU1ST9P5ODKY5321V0KVLN6XO2NNU' where id=2; -update noar tt set v0='388MBT4SFV4O49' where id=3; -update noar ti set v0='388MBT4SFV4O49' where id=3; -update noar tt set b0='WUWOBKZ78C6GAHYPUTEXT437WU6L' where id=3; -update noar ti set b0='WUWOBKZ78C6GAHYPUTEXT437WU6L' where id=3; -update noar tt set v0='MKMCCGY4V8BC1F0UBHWMG' where id=3; -update noar ti set v0='MKMCCGY4V8BC1F0UBHWMG' where id=3; -update noar tt set b1='XFDL6DDDCKXECE9JZJKER8OZSH' where id=3; -update noar ti set b1='XFDL6DDDCKXECE9JZJKER8OZSH' where id=3; -update noar tt set v0='FECMTITEA9S82Z3' where id=3; -update noar ti set v0='FECMTITEA9S82Z3' where id=3; -update noar tt set b2='E5149OSO3AUSQE3C71E2' where id=3; -update noar ti set b2='E5149OSO3AUSQE3C71E2' where id=3; -update noar tt set v0='DVFAFK062JB3P' where id=4; -update noar ti set v0='DVFAFK062JB3P' where id=4; -update noar tt set b0='LFQM77I' where id=4; -update noar ti set b0='LFQM77I' where id=4; -update noar tt set v0='CNZR2ALYZ7LF3PBSULJO' where id=4; -update noar ti set v0='CNZR2ALYZ7LF3PBSULJO' where id=4; -update noar tt set b1='F65923044KY943EQBXO0WC5SNHS4FA' where id=4; -update noar ti set b1='F65923044KY943EQBXO0WC5SNHS4FA' where id=4; -update noar tt set v0='0W' where id=4; -update noar ti set v0='0W' where id=4; -update noar tt set b2='ZYB32YAV13' where id=4; -update noar ti set b2='ZYB32YAV13' where id=4; -update noar tt set v0='MO37JFHJAWAPURNOU' where id=5; -update noar ti set v0='MO37JFHJAWAPURNOU' where id=5; -update noar tt set b0='HGGQNFVI50K4388U7Q8PWKEGII2GL1F' where id=5; -update noar ti set b0='HGGQNFVI50K4388U7Q8PWKEGII2GL1F' where id=5; -update noar tt set v0='5V7VC96F0' where id=5; -update noar ti set v0='5V7VC96F0' where id=5; -update noar tt set b1='8C82TJZJNWBXCRLFEUL2FP0Z7GGYPP' where id=5; -update noar ti set b1='8C82TJZJNWBXCRLFEUL2FP0Z7GGYPP' where id=5; -update noar tt set v0='5XYYC50ADP7GJVVS' where id=5; -update noar ti set v0='5XYYC50ADP7GJVVS' where id=5; -update noar tt set b2='81W3O7' where id=5; -update noar ti set b2='81W3O7' where id=5; -update noar tt set v0='7OPKD47JGBWDL0KRFQJOD0XERPCFB' where id=6; -update noar ti set v0='7OPKD47JGBWDL0KRFQJOD0XERPCFB' where id=6; -update noar tt set b0='JULOTLY6RVNPM' where id=6; -update noar ti set b0='JULOTLY6RVNPM' where id=6; -update noar tt set v0='OOZI87MGYZ1DHU3601' where id=6; -update noar ti set v0='OOZI87MGYZ1DHU3601' where id=6; -update noar tt set b1='42' where id=6; -update noar ti set b1='42' where id=6; -update noar tt set v0='86O6' where id=6; -update noar ti set v0='86O6' where id=6; -update noar tt set b2='BF5' where id=6; -update noar ti set b2='BF5' where id=6; -update noar tt set v0='AC4BZELC6FQ' where id=7; -update noar ti set v0='AC4BZELC6FQ' where id=7; -update noar tt set b0='KAW6SDQ' where id=7; -update noar ti set b0='KAW6SDQ' where id=7; -update noar tt set v0='M4OZFK5XCUGJDZHSQLO' where id=7; -update noar ti set v0='M4OZFK5XCUGJDZHSQLO' where id=7; -update noar tt set b1='PTICZPMKF2UPMVY' where id=7; -update noar ti set b1='PTICZPMKF2UPMVY' where id=7; -update noar tt set v0='HFYW51AA412EYYM7OJ3YUEBYT' where id=7; -update noar ti set v0='HFYW51AA412EYYM7OJ3YUEBYT' where id=7; -update noar tt set b2='WU3LBW7' where id=7; -update noar ti set b2='WU3LBW7' where id=7; -update noar tt set v0='PV889WHHUOQXREI' where id=8; -update noar ti set v0='PV889WHHUOQXREI' where id=8; -update noar tt set b0='AVQRSQU41GS50J2UTBPK3UUK3E' where id=8; -update noar ti set b0='AVQRSQU41GS50J2UTBPK3UUK3E' where id=8; -update noar tt set v0='BQIINCEDNA460022I2X8NP' where id=8; -update noar ti set v0='BQIINCEDNA460022I2X8NP' where id=8; -update noar tt set b1='9365Y28JR6E7DFCZW9' where id=8; -update noar ti set b1='9365Y28JR6E7DFCZW9' where id=8; -update noar tt set v0='0YG8YZ1HM9BC2CNQ5YUZNIHVMD1QT6N' where id=8; -update noar ti set v0='0YG8YZ1HM9BC2CNQ5YUZNIHVMD1QT6N' where id=8; -update noar tt set b2='GCS0O23L54X72R4R2M3ZRX4I' where id=8; -update noar ti set b2='GCS0O23L54X72R4R2M3ZRX4I' where id=8; -update noar tt set v0='Y' where id=9; -update noar ti set v0='Y' where id=9; -update noar tt set b0='4NWWMJGC891H4DSOQAC49Z8VY4' where id=9; -update noar ti set b0='4NWWMJGC891H4DSOQAC49Z8VY4' where id=9; -update noar tt set v0='LVGX0UGSSRJX' where id=9; -update noar ti set v0='LVGX0UGSSRJX' where id=9; -update noar tt set b1='2TRFSXFHWZSPEIBYW8U3PITEL' where id=9; -update noar ti set b1='2TRFSXFHWZSPEIBYW8U3PITEL' where id=9; -update noar tt set v0='G38E6TUQX9VPN0GRDUZ2F6RUQ1N4PK' where id=9; -update noar ti set v0='G38E6TUQX9VPN0GRDUZ2F6RUQ1N4PK' where id=9; -update noar tt set b2='NSX4ZQQEJTGYPEP' where id=9; -update noar ti set b2='NSX4ZQQEJTGYPEP' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 mediumblob null, - b1 blob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='NG8MXG' where id=1; -update noar ti set v0='NG8MXG' where id=1; -update noar tt set b0='C8TRHI1CEUJMCLWJ5' where id=1; -update noar ti set b0='C8TRHI1CEUJMCLWJ5' where id=1; -update noar tt set v0='HZ82XNE8XORPS0S5CNEM6HH86M9' where id=1; -update noar ti set v0='HZ82XNE8XORPS0S5CNEM6HH86M9' where id=1; -update noar tt set b1='X8KKMGTEKSK42EN970W2GL' where id=1; -update noar ti set b1='X8KKMGTEKSK42EN970W2GL' where id=1; -update noar tt set v0='BP1D1MRV0UJGB523DH5' where id=1; -update noar ti set v0='BP1D1MRV0UJGB523DH5' where id=1; -update noar tt set b2='OERA4H0VQGFOAA4TX9FI' where id=1; -update noar ti set b2='OERA4H0VQGFOAA4TX9FI' where id=1; -update noar tt set v0='Z9GVZANQ0LAXZYQTX' where id=2; -update noar ti set v0='Z9GVZANQ0LAXZYQTX' where id=2; -update noar tt set b0='BC7DNEVBXCOALJKSDH' where id=2; -update noar ti set b0='BC7DNEVBXCOALJKSDH' where id=2; -update noar tt set v0='ENY4IW1J0S8SQ3X2VP469IYL' where id=2; -update noar ti set v0='ENY4IW1J0S8SQ3X2VP469IYL' where id=2; -update noar tt set b1='XK3SDYK3PIJKJG' where id=2; -update noar ti set b1='XK3SDYK3PIJKJG' where id=2; -update noar tt set v0='V3NUO1MOV21MVTJ4VVDR' where id=2; -update noar ti set v0='V3NUO1MOV21MVTJ4VVDR' where id=2; -update noar tt set b2='ENHFTC78Q2ATFJSM8RJKGWMD8ATDZ' where id=2; -update noar ti set b2='ENHFTC78Q2ATFJSM8RJKGWMD8ATDZ' where id=2; -update noar tt set v0='QL2XJNG3MZMUEXZP7H' where id=3; -update noar ti set v0='QL2XJNG3MZMUEXZP7H' where id=3; -update noar tt set b0='IH52NP349L0OXB4ITZP4Q0NB83M' where id=3; -update noar ti set b0='IH52NP349L0OXB4ITZP4Q0NB83M' where id=3; -update noar tt set v0='93Z1PRL4K2DSX8G6C10M2UCV6L' where id=3; -update noar ti set v0='93Z1PRL4K2DSX8G6C10M2UCV6L' where id=3; -update noar tt set b1='TPLLSXAV87BAZFOO' where id=3; -update noar ti set b1='TPLLSXAV87BAZFOO' where id=3; -update noar tt set v0='60F9D49S7MPPSYKDWWQBL3' where id=3; -update noar ti set v0='60F9D49S7MPPSYKDWWQBL3' where id=3; -update noar tt set b2='TTCF3N1MBFGER6I2' where id=3; -update noar ti set b2='TTCF3N1MBFGER6I2' where id=3; -update noar tt set v0='H9O' where id=4; -update noar ti set v0='H9O' where id=4; -update noar tt set b0='SSJ0VOAU' where id=4; -update noar ti set b0='SSJ0VOAU' where id=4; -update noar tt set v0='1AKZTYIW7O3866AGV6HQ5WI5RRCV' where id=4; -update noar ti set v0='1AKZTYIW7O3866AGV6HQ5WI5RRCV' where id=4; -update noar tt set b1='QO5WX6NX9FYTZ' where id=4; -update noar ti set b1='QO5WX6NX9FYTZ' where id=4; -update noar tt set v0='FBUZ7KKB51LL6QL2E9ENFZ23O8BS' where id=4; -update noar ti set v0='FBUZ7KKB51LL6QL2E9ENFZ23O8BS' where id=4; -update noar tt set b2='EEJEILTHUOL2WI' where id=4; -update noar ti set b2='EEJEILTHUOL2WI' where id=4; -update noar tt set v0='VNPFB' where id=5; -update noar ti set v0='VNPFB' where id=5; -update noar tt set b0='URNVXJRKA8KAEPP2X0K9R' where id=5; -update noar ti set b0='URNVXJRKA8KAEPP2X0K9R' where id=5; -update noar tt set v0='OF' where id=5; -update noar ti set v0='OF' where id=5; -update noar tt set b1='P34MVO' where id=5; -update noar ti set b1='P34MVO' where id=5; -update noar tt set v0='IHR14N5QIU5UNXE2YNS' where id=5; -update noar ti set v0='IHR14N5QIU5UNXE2YNS' where id=5; -update noar tt set b2='1I8QG7N2O1YAV0L0NOUYCO2' where id=5; -update noar ti set b2='1I8QG7N2O1YAV0L0NOUYCO2' where id=5; -update noar tt set v0='V88HEHV8UP3LL31VTL0M' where id=6; -update noar ti set v0='V88HEHV8UP3LL31VTL0M' where id=6; -update noar tt set b0='D4ZVY0Y6K9G3QF6PMEQC639NBV7XRFY' where id=6; -update noar ti set b0='D4ZVY0Y6K9G3QF6PMEQC639NBV7XRFY' where id=6; -update noar tt set v0='4HSE7EFM8DINVD93YATM' where id=6; -update noar ti set v0='4HSE7EFM8DINVD93YATM' where id=6; -update noar tt set b1='NL3W8' where id=6; -update noar ti set b1='NL3W8' where id=6; -update noar tt set v0='4HZGP' where id=6; -update noar ti set v0='4HZGP' where id=6; -update noar tt set b2='JGY2EM0SMCMG59TNFXR' where id=6; -update noar ti set b2='JGY2EM0SMCMG59TNFXR' where id=6; -update noar tt set v0='9JX73DBU0ER2GCEI4CXYPH' where id=7; -update noar ti set v0='9JX73DBU0ER2GCEI4CXYPH' where id=7; -update noar tt set b0='UCSAA9BH1FF2ICDLUZKL6VLNHNV' where id=7; -update noar ti set b0='UCSAA9BH1FF2ICDLUZKL6VLNHNV' where id=7; -update noar tt set v0='6N7KLLM8SLHFA16K7PO' where id=7; -update noar ti set v0='6N7KLLM8SLHFA16K7PO' where id=7; -update noar tt set b1='D7IQYIS90JED52PBBCRFKA9OLU' where id=7; -update noar ti set b1='D7IQYIS90JED52PBBCRFKA9OLU' where id=7; -update noar tt set v0='B' where id=7; -update noar ti set v0='B' where id=7; -update noar tt set b2='ORKN7JGQCPJVOEZKF2K7G9OYOTXGKZ45' where id=7; -update noar ti set b2='ORKN7JGQCPJVOEZKF2K7G9OYOTXGKZ45' where id=7; -update noar tt set v0='0W0G8LAB0HP4TMK0FDX6' where id=8; -update noar ti set v0='0W0G8LAB0HP4TMK0FDX6' where id=8; -update noar tt set b0='6IECLLZNFQYUWZWFL8' where id=8; -update noar ti set b0='6IECLLZNFQYUWZWFL8' where id=8; -update noar tt set v0='Q3A69N4' where id=8; -update noar ti set v0='Q3A69N4' where id=8; -update noar tt set b1='P9X2F68TYAHJT56514AH1QEO7L' where id=8; -update noar ti set b1='P9X2F68TYAHJT56514AH1QEO7L' where id=8; -update noar tt set v0='VY4H38W9' where id=8; -update noar ti set v0='VY4H38W9' where id=8; -update noar tt set b2='CKM' where id=8; -update noar ti set b2='CKM' where id=8; -update noar tt set v0='34Z' where id=9; -update noar ti set v0='34Z' where id=9; -update noar tt set b0='6ECOUUG3IBP3HSFGAV2YZQ1Q' where id=9; -update noar ti set b0='6ECOUUG3IBP3HSFGAV2YZQ1Q' where id=9; -update noar tt set v0='L' where id=9; -update noar ti set v0='L' where id=9; -update noar tt set b1='WYZ' where id=9; -update noar ti set b1='WYZ' where id=9; -update noar tt set v0='ZMG22NTVH' where id=9; -update noar ti set v0='ZMG22NTVH' where id=9; -update noar tt set b2='7TP0HP1' where id=9; -update noar ti set b2='7TP0HP1' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 mediumblob null, - b1 blob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='F1PBQUEBCE2SOIF8MTAL3OA' where id=1; -update noar ti set v0='F1PBQUEBCE2SOIF8MTAL3OA' where id=1; -update noar tt set b0='Q2A8RUAZW' where id=1; -update noar ti set b0='Q2A8RUAZW' where id=1; -update noar tt set v0='Y2EYT6F95DDTLSXC4VUGKDA' where id=1; -update noar ti set v0='Y2EYT6F95DDTLSXC4VUGKDA' where id=1; -update noar tt set b1='Z149291IXGO' where id=1; -update noar ti set b1='Z149291IXGO' where id=1; -update noar tt set v0='5U46MWCXK045R3WATPSI' where id=1; -update noar ti set v0='5U46MWCXK045R3WATPSI' where id=1; -update noar tt set b2='HZHJCZ1W0ENNTK8T3THTFH8GLX' where id=1; -update noar ti set b2='HZHJCZ1W0ENNTK8T3THTFH8GLX' where id=1; -update noar tt set v0='1TE3Z3Y2ES' where id=2; -update noar ti set v0='1TE3Z3Y2ES' where id=2; -update noar tt set b0='GYVBCAERQLNK56GAJXGIQT' where id=2; -update noar ti set b0='GYVBCAERQLNK56GAJXGIQT' where id=2; -update noar tt set v0='O9TEV0FLVUJGE' where id=2; -update noar ti set v0='O9TEV0FLVUJGE' where id=2; -update noar tt set b1='5R' where id=2; -update noar ti set b1='5R' where id=2; -update noar tt set v0='JD4Z6104U6OCND5EZ1ZR3BKKV3M' where id=2; -update noar ti set v0='JD4Z6104U6OCND5EZ1ZR3BKKV3M' where id=2; -update noar tt set b2='M5SB21MY4A06HO4PJK' where id=2; -update noar ti set b2='M5SB21MY4A06HO4PJK' where id=2; -update noar tt set v0='KQP6XOKXV2G05HCJ9V3ZXJD464G04OI' where id=3; -update noar ti set v0='KQP6XOKXV2G05HCJ9V3ZXJD464G04OI' where id=3; -update noar tt set b0='S35MPSS5YHRSPS842U69HTVLUY6IN0' where id=3; -update noar ti set b0='S35MPSS5YHRSPS842U69HTVLUY6IN0' where id=3; -update noar tt set v0='9A' where id=3; -update noar ti set v0='9A' where id=3; -update noar tt set b1='F5BS' where id=3; -update noar ti set b1='F5BS' where id=3; -update noar tt set v0='W15UAASOM2143M77EIN51P0EOBABFQW1' where id=3; -update noar ti set v0='W15UAASOM2143M77EIN51P0EOBABFQW1' where id=3; -update noar tt set b2='5DW7' where id=3; -update noar ti set b2='5DW7' where id=3; -update noar tt set v0='18X1DYBNW1OKN796VN7290Z4SKWE' where id=4; -update noar ti set v0='18X1DYBNW1OKN796VN7290Z4SKWE' where id=4; -update noar tt set b0='ILM6P1V' where id=4; -update noar ti set b0='ILM6P1V' where id=4; -update noar tt set v0='R755QIYZLK1CN09G572' where id=4; -update noar ti set v0='R755QIYZLK1CN09G572' where id=4; -update noar tt set b1='6F' where id=4; -update noar ti set b1='6F' where id=4; -update noar tt set v0='E' where id=4; -update noar ti set v0='E' where id=4; -update noar tt set b2='DCVUWKGBDQJFSSGBP' where id=4; -update noar ti set b2='DCVUWKGBDQJFSSGBP' where id=4; -update noar tt set v0='PC5H51' where id=5; -update noar ti set v0='PC5H51' where id=5; -update noar tt set b0='Q' where id=5; -update noar ti set b0='Q' where id=5; -update noar tt set v0='ETN' where id=5; -update noar ti set v0='ETN' where id=5; -update noar tt set b1='5MD4SQIPDPV4QOTPWTAHNN62EE5JEJAO' where id=5; -update noar ti set b1='5MD4SQIPDPV4QOTPWTAHNN62EE5JEJAO' where id=5; -update noar tt set v0='AH4L4' where id=5; -update noar ti set v0='AH4L4' where id=5; -update noar tt set b2='X1PTYLFKYL0' where id=5; -update noar ti set b2='X1PTYLFKYL0' where id=5; -update noar tt set v0='URRG7BE0USKJS0KS80V35TJM' where id=6; -update noar ti set v0='URRG7BE0USKJS0KS80V35TJM' where id=6; -update noar tt set b0='59QP2LEWOK4UJLU7879KDVWZYB' where id=6; -update noar ti set b0='59QP2LEWOK4UJLU7879KDVWZYB' where id=6; -update noar tt set v0='W3VN' where id=6; -update noar ti set v0='W3VN' where id=6; -update noar tt set b1='AI8A09Y' where id=6; -update noar ti set b1='AI8A09Y' where id=6; -update noar tt set v0='7FK2BF' where id=6; -update noar ti set v0='7FK2BF' where id=6; -update noar tt set b2='XBMXD8W8KVFR5EYOQFWXE' where id=6; -update noar ti set b2='XBMXD8W8KVFR5EYOQFWXE' where id=6; -update noar tt set v0='16H861Z8OYSQ4HAKPHPC5RPPCHAU' where id=7; -update noar ti set v0='16H861Z8OYSQ4HAKPHPC5RPPCHAU' where id=7; -update noar tt set b0='7CSMB993KJB8' where id=7; -update noar ti set b0='7CSMB993KJB8' where id=7; -update noar tt set v0='86W2ROZ7MOWO6YUWS82E' where id=7; -update noar ti set v0='86W2ROZ7MOWO6YUWS82E' where id=7; -update noar tt set b1='H5LZP06DZGB9J7O' where id=7; -update noar ti set b1='H5LZP06DZGB9J7O' where id=7; -update noar tt set v0='EFV72O9IN7X8A79B95UD2C77LIFCH' where id=7; -update noar ti set v0='EFV72O9IN7X8A79B95UD2C77LIFCH' where id=7; -update noar tt set b2='N21TAZPP1G' where id=7; -update noar ti set b2='N21TAZPP1G' where id=7; -update noar tt set v0='OC1Q2H7T0TRB97OVM6' where id=8; -update noar ti set v0='OC1Q2H7T0TRB97OVM6' where id=8; -update noar tt set b0='W8DOSD6X5CR' where id=8; -update noar ti set b0='W8DOSD6X5CR' where id=8; -update noar tt set v0='XXEW1VDAXP0A6WELG5RZO5ITIJD6' where id=8; -update noar ti set v0='XXEW1VDAXP0A6WELG5RZO5ITIJD6' where id=8; -update noar tt set b1='WG3PC00JI6AO69I3ABWOW4C80JHIPL6X' where id=8; -update noar ti set b1='WG3PC00JI6AO69I3ABWOW4C80JHIPL6X' where id=8; -update noar tt set v0='WIEJE8ULP7KB8JVIYQ6BBWDJ5LNJHW' where id=8; -update noar ti set v0='WIEJE8ULP7KB8JVIYQ6BBWDJ5LNJHW' where id=8; -update noar tt set b2='RPFVCK3MGEQ' where id=8; -update noar ti set b2='RPFVCK3MGEQ' where id=8; -update noar tt set v0='T05KTFLZIK8Q2RX67XFB3' where id=9; -update noar ti set v0='T05KTFLZIK8Q2RX67XFB3' where id=9; -update noar tt set b0='VDKLOT3SFEJKU9LJ3BKPIC6U1JK8YUIB' where id=9; -update noar ti set b0='VDKLOT3SFEJKU9LJ3BKPIC6U1JK8YUIB' where id=9; -update noar tt set v0='V9BV08UTPQ2BF4BB49AMAP23B' where id=9; -update noar ti set v0='V9BV08UTPQ2BF4BB49AMAP23B' where id=9; -update noar tt set b1='PA24CEW9VI5V60A6JS9EP' where id=9; -update noar ti set b1='PA24CEW9VI5V60A6JS9EP' where id=9; -update noar tt set v0='U9A4Q8K84X2S2TIRGBPHM0AQXQOK2EK3' where id=9; -update noar ti set v0='U9A4Q8K84X2S2TIRGBPHM0AQXQOK2EK3' where id=9; -update noar tt set b2='O7Q7KOEW26B918A34F' where id=9; -update noar ti set b2='O7Q7KOEW26B918A34F' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 mediumblob not null, - b1 blob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='2ZP4G' where id=1; -update noar ti set v0='2ZP4G' where id=1; -update noar tt set b0='01LEI6LGA79NN3J' where id=1; -update noar ti set b0='01LEI6LGA79NN3J' where id=1; -update noar tt set v0='N4V' where id=1; -update noar ti set v0='N4V' where id=1; -update noar tt set b1='4X2I4E' where id=1; -update noar ti set b1='4X2I4E' where id=1; -update noar tt set v0='QDIXK' where id=1; -update noar ti set v0='QDIXK' where id=1; -update noar tt set b2='HDJUDDIWR' where id=1; -update noar ti set b2='HDJUDDIWR' where id=1; -update noar tt set v0='OEF' where id=2; -update noar ti set v0='OEF' where id=2; -update noar tt set b0='JQI5PPZEQY4PIUOLJZS3M' where id=2; -update noar ti set b0='JQI5PPZEQY4PIUOLJZS3M' where id=2; -update noar tt set v0='PCN' where id=2; -update noar ti set v0='PCN' where id=2; -update noar tt set b1='450700GHCWQ' where id=2; -update noar ti set b1='450700GHCWQ' where id=2; -update noar tt set v0='44TJVJLBEWOXUED1CQGDGFNHZ' where id=2; -update noar ti set v0='44TJVJLBEWOXUED1CQGDGFNHZ' where id=2; -update noar tt set b2='2HOR702CXVMDI0' where id=2; -update noar ti set b2='2HOR702CXVMDI0' where id=2; -update noar tt set v0='XT9JKQUF1JK36H8LEOL31648J2L0CK' where id=3; -update noar ti set v0='XT9JKQUF1JK36H8LEOL31648J2L0CK' where id=3; -update noar tt set b0='C08AJVG8ZC' where id=3; -update noar ti set b0='C08AJVG8ZC' where id=3; -update noar tt set v0='C28U2XGQAAYG44' where id=3; -update noar ti set v0='C28U2XGQAAYG44' where id=3; -update noar tt set b1='K4YPM7C' where id=3; -update noar ti set b1='K4YPM7C' where id=3; -update noar tt set v0='RWZTH8H1D8CRIPQOVSTJ9X3K' where id=3; -update noar ti set v0='RWZTH8H1D8CRIPQOVSTJ9X3K' where id=3; -update noar tt set b2='9B8FBRLA7A28R2' where id=3; -update noar ti set b2='9B8FBRLA7A28R2' where id=3; -update noar tt set v0='OAL' where id=4; -update noar ti set v0='OAL' where id=4; -update noar tt set b0='QELOWD2WX22J1SKCMECI78QUDH' where id=4; -update noar ti set b0='QELOWD2WX22J1SKCMECI78QUDH' where id=4; -update noar tt set v0='SZT0J' where id=4; -update noar ti set v0='SZT0J' where id=4; -update noar tt set b1='J' where id=4; -update noar ti set b1='J' where id=4; -update noar tt set v0='4D' where id=4; -update noar ti set v0='4D' where id=4; -update noar tt set b2='T2BBZBIFJAKOSUV8U' where id=4; -update noar ti set b2='T2BBZBIFJAKOSUV8U' where id=4; -update noar tt set v0='NF0ROOLY' where id=5; -update noar ti set v0='NF0ROOLY' where id=5; -update noar tt set b0='6K3O61HYF498PKS9F60PWM7' where id=5; -update noar ti set b0='6K3O61HYF498PKS9F60PWM7' where id=5; -update noar tt set v0='2BGVY1DTPU4GV6A41Y2DME372DWE' where id=5; -update noar ti set v0='2BGVY1DTPU4GV6A41Y2DME372DWE' where id=5; -update noar tt set b1='ERNZAAZU2AV4DV4DYBZOZOL5H' where id=5; -update noar ti set b1='ERNZAAZU2AV4DV4DYBZOZOL5H' where id=5; -update noar tt set v0='VWT3TWDOW0F7MINAF5QR80DBK' where id=5; -update noar ti set v0='VWT3TWDOW0F7MINAF5QR80DBK' where id=5; -update noar tt set b2='G13E5OPP2V4' where id=5; -update noar ti set b2='G13E5OPP2V4' where id=5; -update noar tt set v0='GWBNI7E8QVL' where id=6; -update noar ti set v0='GWBNI7E8QVL' where id=6; -update noar tt set b0='GCAE' where id=6; -update noar ti set b0='GCAE' where id=6; -update noar tt set v0='42Z5B17W' where id=6; -update noar ti set v0='42Z5B17W' where id=6; -update noar tt set b1='D0DN9' where id=6; -update noar ti set b1='D0DN9' where id=6; -update noar tt set v0='97IAVIVA01ZVGU' where id=6; -update noar ti set v0='97IAVIVA01ZVGU' where id=6; -update noar tt set b2='GRJO5HU7HSA9PB' where id=6; -update noar ti set b2='GRJO5HU7HSA9PB' where id=6; -update noar tt set v0='OH' where id=7; -update noar ti set v0='OH' where id=7; -update noar tt set b0='6BY82J9L2HZCWY0FY0W' where id=7; -update noar ti set b0='6BY82J9L2HZCWY0FY0W' where id=7; -update noar tt set v0='5JH5BYC4MMM3RHC8R9X0A' where id=7; -update noar ti set v0='5JH5BYC4MMM3RHC8R9X0A' where id=7; -update noar tt set b1='UQ7KK3FAJ7LSSPWA75SWCAZJCTRX' where id=7; -update noar ti set b1='UQ7KK3FAJ7LSSPWA75SWCAZJCTRX' where id=7; -update noar tt set v0='64LV25LIJWBDCT3Y0JLQG04MV' where id=7; -update noar ti set v0='64LV25LIJWBDCT3Y0JLQG04MV' where id=7; -update noar tt set b2='EQ960JVNXC2K' where id=7; -update noar ti set b2='EQ960JVNXC2K' where id=7; -update noar tt set v0='QP' where id=8; -update noar ti set v0='QP' where id=8; -update noar tt set b0='50H5F34V0JX2AHRNCX0O5K79' where id=8; -update noar ti set b0='50H5F34V0JX2AHRNCX0O5K79' where id=8; -update noar tt set v0='G8YSYAKL6JV' where id=8; -update noar ti set v0='G8YSYAKL6JV' where id=8; -update noar tt set b1='2M3EV01GIG2BDBBZNWD3E1RYS6T' where id=8; -update noar ti set b1='2M3EV01GIG2BDBBZNWD3E1RYS6T' where id=8; -update noar tt set v0='5DHUHZE3' where id=8; -update noar ti set v0='5DHUHZE3' where id=8; -update noar tt set b2='CXK5HHVF2LVUIFVHA5' where id=8; -update noar ti set b2='CXK5HHVF2LVUIFVHA5' where id=8; -update noar tt set v0='E3BMKSHIKWSGNHCWP' where id=9; -update noar ti set v0='E3BMKSHIKWSGNHCWP' where id=9; -update noar tt set b0='0UQFIJSPHTHVMT3AMCTJ4XWE56' where id=9; -update noar ti set b0='0UQFIJSPHTHVMT3AMCTJ4XWE56' where id=9; -update noar tt set v0='C60S' where id=9; -update noar ti set v0='C60S' where id=9; -update noar tt set b1='C' where id=9; -update noar ti set b1='C' where id=9; -update noar tt set v0='7PNMBG6D39OPYB00OJPOBI1' where id=9; -update noar ti set v0='7PNMBG6D39OPYB00OJPOBI1' where id=9; -update noar tt set b2='3ONR5C7MAO1X5X9N6RKEIEB87RWPPQBT' where id=9; -update noar ti set b2='3ONR5C7MAO1X5X9N6RKEIEB87RWPPQBT' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 mediumblob not null, - b1 blob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='A4AA3FXYV4DTPJKHYAKUOJW3ZK' where id=1; -update noar ti set v0='A4AA3FXYV4DTPJKHYAKUOJW3ZK' where id=1; -update noar tt set b0='R8IEW' where id=1; -update noar ti set b0='R8IEW' where id=1; -update noar tt set v0='OR0M4TX' where id=1; -update noar ti set v0='OR0M4TX' where id=1; -update noar tt set b1='QJTLO20R' where id=1; -update noar ti set b1='QJTLO20R' where id=1; -update noar tt set v0='NGDQHAI7148MQ22026DJ41EK9FN2Y' where id=1; -update noar ti set v0='NGDQHAI7148MQ22026DJ41EK9FN2Y' where id=1; -update noar tt set b2='S65QS2IL3MMOY08HRFHON2DPBPZDL' where id=1; -update noar ti set b2='S65QS2IL3MMOY08HRFHON2DPBPZDL' where id=1; -update noar tt set v0='FF3XO7' where id=2; -update noar ti set v0='FF3XO7' where id=2; -update noar tt set b0='CGTC' where id=2; -update noar ti set b0='CGTC' where id=2; -update noar tt set v0='DT6WS7GJTLADMRGUQ7V8EZDRWB' where id=2; -update noar ti set v0='DT6WS7GJTLADMRGUQ7V8EZDRWB' where id=2; -update noar tt set b1='UQ55G3FP095A77' where id=2; -update noar ti set b1='UQ55G3FP095A77' where id=2; -update noar tt set v0='QR3HB1SPVQWL80876SMPMESCKY0YI5' where id=2; -update noar ti set v0='QR3HB1SPVQWL80876SMPMESCKY0YI5' where id=2; -update noar tt set b2='WIYEY4CVM4ND' where id=2; -update noar ti set b2='WIYEY4CVM4ND' where id=2; -update noar tt set v0='87F' where id=3; -update noar ti set v0='87F' where id=3; -update noar tt set b0='V73VPVY' where id=3; -update noar ti set b0='V73VPVY' where id=3; -update noar tt set v0='21XNY8' where id=3; -update noar ti set v0='21XNY8' where id=3; -update noar tt set b1='REH5S' where id=3; -update noar ti set b1='REH5S' where id=3; -update noar tt set v0='GOOB18DFUSH8U17V6G0' where id=3; -update noar ti set v0='GOOB18DFUSH8U17V6G0' where id=3; -update noar tt set b2='GA4NUOMAEMEARS3BJ923K' where id=3; -update noar ti set b2='GA4NUOMAEMEARS3BJ923K' where id=3; -update noar tt set v0='6S137V9YMPXJ3Q0I6WC5K' where id=4; -update noar ti set v0='6S137V9YMPXJ3Q0I6WC5K' where id=4; -update noar tt set b0='8IQA1OY3AV9RLCJHKW' where id=4; -update noar ti set b0='8IQA1OY3AV9RLCJHKW' where id=4; -update noar tt set v0='M2ND1' where id=4; -update noar ti set v0='M2ND1' where id=4; -update noar tt set b1='UXZV2GF5FYPEOPKOBPNN4F75HOFL' where id=4; -update noar ti set b1='UXZV2GF5FYPEOPKOBPNN4F75HOFL' where id=4; -update noar tt set v0='HCBTC1UI7VEE6OO' where id=4; -update noar ti set v0='HCBTC1UI7VEE6OO' where id=4; -update noar tt set b2='EUVNBYY9' where id=4; -update noar ti set b2='EUVNBYY9' where id=4; -update noar tt set v0='O78QJ7K7HAR0FZR6K' where id=5; -update noar ti set v0='O78QJ7K7HAR0FZR6K' where id=5; -update noar tt set b0='10OKAVKT2JDOUVUCTRERCY2VR' where id=5; -update noar ti set b0='10OKAVKT2JDOUVUCTRERCY2VR' where id=5; -update noar tt set v0='FAWT4QEK7II0Z6JF' where id=5; -update noar ti set v0='FAWT4QEK7II0Z6JF' where id=5; -update noar tt set b1='3Z3U30DUZ7KZTAZWAHGY' where id=5; -update noar ti set b1='3Z3U30DUZ7KZTAZWAHGY' where id=5; -update noar tt set v0='S4MQ8C3EW9A5R' where id=5; -update noar ti set v0='S4MQ8C3EW9A5R' where id=5; -update noar tt set b2='26Z' where id=5; -update noar ti set b2='26Z' where id=5; -update noar tt set v0='8GB2DBT8V' where id=6; -update noar ti set v0='8GB2DBT8V' where id=6; -update noar tt set b0='OFAUM4J3OQS1NYTNFEZJE2LTRP5BRS' where id=6; -update noar ti set b0='OFAUM4J3OQS1NYTNFEZJE2LTRP5BRS' where id=6; -update noar tt set v0='5YXZVC5A9EWVZ9HGGNP9DX0NJD' where id=6; -update noar ti set v0='5YXZVC5A9EWVZ9HGGNP9DX0NJD' where id=6; -update noar tt set b1='R99BWONGOT0' where id=6; -update noar ti set b1='R99BWONGOT0' where id=6; -update noar tt set v0='LL0VX2VA74DZIE' where id=6; -update noar ti set v0='LL0VX2VA74DZIE' where id=6; -update noar tt set b2='ULDWVM1N7QQZ2B6UM5OUN8NVJDAS003' where id=6; -update noar ti set b2='ULDWVM1N7QQZ2B6UM5OUN8NVJDAS003' where id=6; -update noar tt set v0='WWF9QN8Z6S05PUAE972300L26' where id=7; -update noar ti set v0='WWF9QN8Z6S05PUAE972300L26' where id=7; -update noar tt set b0='BMS3TM3HIKLE0JPJYCPDXZQ9U4O1GPYE' where id=7; -update noar ti set b0='BMS3TM3HIKLE0JPJYCPDXZQ9U4O1GPYE' where id=7; -update noar tt set v0='CWEGE0JEGGJKE5EDY2GGTM' where id=7; -update noar ti set v0='CWEGE0JEGGJKE5EDY2GGTM' where id=7; -update noar tt set b1='QR4GBJ5GQYR88N7E4L9K1ZP' where id=7; -update noar ti set b1='QR4GBJ5GQYR88N7E4L9K1ZP' where id=7; -update noar tt set v0='H3PMCSEU9MPSH' where id=7; -update noar ti set v0='H3PMCSEU9MPSH' where id=7; -update noar tt set b2='RRFISX4EEFU3JBUDRB1KRIVR04FW34' where id=7; -update noar ti set b2='RRFISX4EEFU3JBUDRB1KRIVR04FW34' where id=7; -update noar tt set v0='GPY' where id=8; -update noar ti set v0='GPY' where id=8; -update noar tt set b0='28ISLOSD81EN6YD3ACSXDF' where id=8; -update noar ti set b0='28ISLOSD81EN6YD3ACSXDF' where id=8; -update noar tt set v0='QQT6CN6OD1UWQ' where id=8; -update noar ti set v0='QQT6CN6OD1UWQ' where id=8; -update noar tt set b1='2HVGRSDZDGITT05MQ4IPIOER' where id=8; -update noar ti set b1='2HVGRSDZDGITT05MQ4IPIOER' where id=8; -update noar tt set v0='1SIVJG4CFLL1407AAALM0PZEXB7A65E' where id=8; -update noar ti set v0='1SIVJG4CFLL1407AAALM0PZEXB7A65E' where id=8; -update noar tt set b2='2MTZ4PJR' where id=8; -update noar ti set b2='2MTZ4PJR' where id=8; -update noar tt set v0='667GOGOD0WCETW1TWMT' where id=9; -update noar ti set v0='667GOGOD0WCETW1TWMT' where id=9; -update noar tt set b0='O8J29YPW92CJF2' where id=9; -update noar ti set b0='O8J29YPW92CJF2' where id=9; -update noar tt set v0='PCAMFQ6JRUKDMQ68ICC4KLF' where id=9; -update noar ti set v0='PCAMFQ6JRUKDMQ68ICC4KLF' where id=9; -update noar tt set b1='UGVTRDPGYBFIJTNF2S2INWO0' where id=9; -update noar ti set b1='UGVTRDPGYBFIJTNF2S2INWO0' where id=9; -update noar tt set v0='V4X1JPMZHKF2EMF' where id=9; -update noar ti set v0='V4X1JPMZHKF2EMF' where id=9; -update noar tt set b2='KDZWNS' where id=9; -update noar ti set b2='KDZWNS' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 mediumblob null, - b1 blob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='8MQ2YCFR' where id=1; -update noar ti set v0='8MQ2YCFR' where id=1; -update noar tt set b0='PFA1F6QG4LY21FC8K2' where id=1; -update noar ti set b0='PFA1F6QG4LY21FC8K2' where id=1; -update noar tt set v0='F3SLC6TRE8IUOR2FCVKE4FAX' where id=1; -update noar ti set v0='F3SLC6TRE8IUOR2FCVKE4FAX' where id=1; -update noar tt set b1='BHASSA7NM0XCN21MIEQL5SLCONQS' where id=1; -update noar ti set b1='BHASSA7NM0XCN21MIEQL5SLCONQS' where id=1; -update noar tt set v0='2GRSWH' where id=1; -update noar ti set v0='2GRSWH' where id=1; -update noar tt set b2='4CZ4F15ZHEYG821PQ' where id=1; -update noar ti set b2='4CZ4F15ZHEYG821PQ' where id=1; -update noar tt set v0='9Y4LOWTMNOUCV3IX' where id=2; -update noar ti set v0='9Y4LOWTMNOUCV3IX' where id=2; -update noar tt set b0='8HIDXNK9S4P0EI70I7XGFBA2VWCF' where id=2; -update noar ti set b0='8HIDXNK9S4P0EI70I7XGFBA2VWCF' where id=2; -update noar tt set v0='P0KQ2W3EJZEGAC3' where id=2; -update noar ti set v0='P0KQ2W3EJZEGAC3' where id=2; -update noar tt set b1='21MKQLUHZUGUM2G1VL6JTJGS6X' where id=2; -update noar ti set b1='21MKQLUHZUGUM2G1VL6JTJGS6X' where id=2; -update noar tt set v0='R751A3HRK' where id=2; -update noar ti set v0='R751A3HRK' where id=2; -update noar tt set b2='F33JMZA4E2CSSLW' where id=2; -update noar ti set b2='F33JMZA4E2CSSLW' where id=2; -update noar tt set v0='YVD3GCINTKF070B6FRL6179O4TP' where id=3; -update noar ti set v0='YVD3GCINTKF070B6FRL6179O4TP' where id=3; -update noar tt set b0='TPIKHORNGPZDZY21WP8MVWRPTJTL1H5P' where id=3; -update noar ti set b0='TPIKHORNGPZDZY21WP8MVWRPTJTL1H5P' where id=3; -update noar tt set v0='F6I3WEVWK8AXJW9Q6UC8' where id=3; -update noar ti set v0='F6I3WEVWK8AXJW9Q6UC8' where id=3; -update noar tt set b1='PQOD' where id=3; -update noar ti set b1='PQOD' where id=3; -update noar tt set v0='EA7VW5SB3CNWQ' where id=3; -update noar ti set v0='EA7VW5SB3CNWQ' where id=3; -update noar tt set b2='VVY56UFFFIL' where id=3; -update noar ti set b2='VVY56UFFFIL' where id=3; -update noar tt set v0='ZPGZBU401P2AD' where id=4; -update noar ti set v0='ZPGZBU401P2AD' where id=4; -update noar tt set b0='39HK9KC76BC82HS89Y4CY1H00' where id=4; -update noar ti set b0='39HK9KC76BC82HS89Y4CY1H00' where id=4; -update noar tt set v0='0PMR3ZHSP14HU2VKT9CK676ZP' where id=4; -update noar ti set v0='0PMR3ZHSP14HU2VKT9CK676ZP' where id=4; -update noar tt set b1='4WEWY619KNDBWI16V59YJLU' where id=4; -update noar ti set b1='4WEWY619KNDBWI16V59YJLU' where id=4; -update noar tt set v0='RRYCBO' where id=4; -update noar ti set v0='RRYCBO' where id=4; -update noar tt set b2='VZQS1YIGKJWVWGOKKPXI' where id=4; -update noar ti set b2='VZQS1YIGKJWVWGOKKPXI' where id=4; -update noar tt set v0='UUEADOXZ5QVMST' where id=5; -update noar ti set v0='UUEADOXZ5QVMST' where id=5; -update noar tt set b0='CYTF' where id=5; -update noar ti set b0='CYTF' where id=5; -update noar tt set v0='7GR08064UUKL5P6' where id=5; -update noar ti set v0='7GR08064UUKL5P6' where id=5; -update noar tt set b1='AOCAZYOH4MDQGT4SQA' where id=5; -update noar ti set b1='AOCAZYOH4MDQGT4SQA' where id=5; -update noar tt set v0='HXH6KF7XL9Y5FR1KMU3DAGXSX8PY' where id=5; -update noar ti set v0='HXH6KF7XL9Y5FR1KMU3DAGXSX8PY' where id=5; -update noar tt set b2='DNTOSGXA' where id=5; -update noar ti set b2='DNTOSGXA' where id=5; -update noar tt set v0='D3WALG84SDKPU3WMS5V27' where id=6; -update noar ti set v0='D3WALG84SDKPU3WMS5V27' where id=6; -update noar tt set b0='GZMNXGYTBMLQUQZKM4SEDI6R' where id=6; -update noar ti set b0='GZMNXGYTBMLQUQZKM4SEDI6R' where id=6; -update noar tt set v0='8R7AZY6DYH7MT0E' where id=6; -update noar ti set v0='8R7AZY6DYH7MT0E' where id=6; -update noar tt set b1='0YXI' where id=6; -update noar ti set b1='0YXI' where id=6; -update noar tt set v0='A1BSGA' where id=6; -update noar ti set v0='A1BSGA' where id=6; -update noar tt set b2='V0WEKR22REQAN3UKDGZ4RY2QY' where id=6; -update noar ti set b2='V0WEKR22REQAN3UKDGZ4RY2QY' where id=6; -update noar tt set v0='768FII33UN54Q68P100PT4LBPUYTLBS3' where id=7; -update noar ti set v0='768FII33UN54Q68P100PT4LBPUYTLBS3' where id=7; -update noar tt set b0='0VKHPU2A4C1MH6WIWR4O5FNDRPC2N' where id=7; -update noar ti set b0='0VKHPU2A4C1MH6WIWR4O5FNDRPC2N' where id=7; -update noar tt set v0='ZOMFQ7WUNK124IFFFCAJ1JY3Y07' where id=7; -update noar ti set v0='ZOMFQ7WUNK124IFFFCAJ1JY3Y07' where id=7; -update noar tt set b1='JUQPOXD6' where id=7; -update noar ti set b1='JUQPOXD6' where id=7; -update noar tt set v0='QM4I0FKR76JR8N14PKECY' where id=7; -update noar ti set v0='QM4I0FKR76JR8N14PKECY' where id=7; -update noar tt set b2='HBNIMG00FV3J0SKV1HTOP' where id=7; -update noar ti set b2='HBNIMG00FV3J0SKV1HTOP' where id=7; -update noar tt set v0='K8Z8FUVYPBFT2' where id=8; -update noar ti set v0='K8Z8FUVYPBFT2' where id=8; -update noar tt set b0='T40VI2Z32AHGT' where id=8; -update noar ti set b0='T40VI2Z32AHGT' where id=8; -update noar tt set v0='1BA2D926WT1ZVF164HK7L5UNDJQ7W2XM' where id=8; -update noar ti set v0='1BA2D926WT1ZVF164HK7L5UNDJQ7W2XM' where id=8; -update noar tt set b1='E2MT8HYQJZEXEFH' where id=8; -update noar ti set b1='E2MT8HYQJZEXEFH' where id=8; -update noar tt set v0='EPCDJD9J9VD7UOJ1YIFE5JKR7' where id=8; -update noar ti set v0='EPCDJD9J9VD7UOJ1YIFE5JKR7' where id=8; -update noar tt set b2='FQWKFD83775Q9O3TYP42QA' where id=8; -update noar ti set b2='FQWKFD83775Q9O3TYP42QA' where id=8; -update noar tt set v0='3K207KSNHM4' where id=9; -update noar ti set v0='3K207KSNHM4' where id=9; -update noar tt set b0='LE6GI1B' where id=9; -update noar ti set b0='LE6GI1B' where id=9; -update noar tt set v0='2WCQTY2N7YJM4C7GPGP2NTQN' where id=9; -update noar ti set v0='2WCQTY2N7YJM4C7GPGP2NTQN' where id=9; -update noar tt set b1='6XIVK5RVY1IY66GQEJZXISGVNOM381' where id=9; -update noar ti set b1='6XIVK5RVY1IY66GQEJZXISGVNOM381' where id=9; -update noar tt set v0='Z0SVHJCDXRU71XM7R' where id=9; -update noar ti set v0='Z0SVHJCDXRU71XM7R' where id=9; -update noar tt set b2='F2XXINS0OIMAVLT9W' where id=9; -update noar ti set b2='F2XXINS0OIMAVLT9W' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 mediumblob null, - b1 blob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='ZXAHA9KCIDO7MYN6JF0' where id=1; -update noar ti set v0='ZXAHA9KCIDO7MYN6JF0' where id=1; -update noar tt set b0='HZXGWHMW4T7PBHPS' where id=1; -update noar ti set b0='HZXGWHMW4T7PBHPS' where id=1; -update noar tt set v0='GI' where id=1; -update noar ti set v0='GI' where id=1; -update noar tt set b1='DSVNHETNPM9LOBBO07' where id=1; -update noar ti set b1='DSVNHETNPM9LOBBO07' where id=1; -update noar tt set v0='469GMG3PALC2TXC2RVVICWOYF' where id=1; -update noar ti set v0='469GMG3PALC2TXC2RVVICWOYF' where id=1; -update noar tt set b2='638HJQ2K13SM5TFTS3' where id=1; -update noar ti set b2='638HJQ2K13SM5TFTS3' where id=1; -update noar tt set v0='31LMF83CF9KRQC0LP2VHITBSU9U' where id=2; -update noar ti set v0='31LMF83CF9KRQC0LP2VHITBSU9U' where id=2; -update noar tt set b0='G87LXRXL' where id=2; -update noar ti set b0='G87LXRXL' where id=2; -update noar tt set v0='ZIUGLK2VB390NZ' where id=2; -update noar ti set v0='ZIUGLK2VB390NZ' where id=2; -update noar tt set b1='2Z8YQM' where id=2; -update noar ti set b1='2Z8YQM' where id=2; -update noar tt set v0='WD418INXDHJA' where id=2; -update noar ti set v0='WD418INXDHJA' where id=2; -update noar tt set b2='6OXKD5KV38KEBF0NZ1K' where id=2; -update noar ti set b2='6OXKD5KV38KEBF0NZ1K' where id=2; -update noar tt set v0='CYMIUCERBXVP4CJ' where id=3; -update noar ti set v0='CYMIUCERBXVP4CJ' where id=3; -update noar tt set b0='6147G0H77U' where id=3; -update noar ti set b0='6147G0H77U' where id=3; -update noar tt set v0='F06IDV8O2LBYHT5IR6HDMHIQZ6V7' where id=3; -update noar ti set v0='F06IDV8O2LBYHT5IR6HDMHIQZ6V7' where id=3; -update noar tt set b1='DUGSUM4M8U' where id=3; -update noar ti set b1='DUGSUM4M8U' where id=3; -update noar tt set v0='ROVO1UK' where id=3; -update noar ti set v0='ROVO1UK' where id=3; -update noar tt set b2='24CYUW51G0' where id=3; -update noar ti set b2='24CYUW51G0' where id=3; -update noar tt set v0='HCJU' where id=4; -update noar ti set v0='HCJU' where id=4; -update noar tt set b0='PQJBTRWYFKQPXIW0B8YFS1' where id=4; -update noar ti set b0='PQJBTRWYFKQPXIW0B8YFS1' where id=4; -update noar tt set v0='ZMAYPO6ER' where id=4; -update noar ti set v0='ZMAYPO6ER' where id=4; -update noar tt set b1='GXAWFK7GQNYAMDTGH97391ZUC6' where id=4; -update noar ti set b1='GXAWFK7GQNYAMDTGH97391ZUC6' where id=4; -update noar tt set v0='4GYMUYNFHJLUCIPYK5' where id=4; -update noar ti set v0='4GYMUYNFHJLUCIPYK5' where id=4; -update noar tt set b2='W6A1XHZA9DEQZIP442' where id=4; -update noar ti set b2='W6A1XHZA9DEQZIP442' where id=4; -update noar tt set v0='JL5DIB1ZG68IL' where id=5; -update noar ti set v0='JL5DIB1ZG68IL' where id=5; -update noar tt set b0='VURREKC3D03KRDADXTC715RXPNVM3' where id=5; -update noar ti set b0='VURREKC3D03KRDADXTC715RXPNVM3' where id=5; -update noar tt set v0='XP07RSPJ299IIU1Y6E8' where id=5; -update noar ti set v0='XP07RSPJ299IIU1Y6E8' where id=5; -update noar tt set b1='L9O3F8JS15FX6XG2WNKTX1SY1H6U' where id=5; -update noar ti set b1='L9O3F8JS15FX6XG2WNKTX1SY1H6U' where id=5; -update noar tt set v0='MM6B' where id=5; -update noar ti set v0='MM6B' where id=5; -update noar tt set b2='HVM6HVBVI0HX' where id=5; -update noar ti set b2='HVM6HVBVI0HX' where id=5; -update noar tt set v0='OS2PNDORQ8I86YN1KM4OC' where id=6; -update noar ti set v0='OS2PNDORQ8I86YN1KM4OC' where id=6; -update noar tt set b0='AV8VY2WLQU10M6NDTM59GRU8EHCLQR' where id=6; -update noar ti set b0='AV8VY2WLQU10M6NDTM59GRU8EHCLQR' where id=6; -update noar tt set v0='4JJNP148OUHMJ3EGIOHOA' where id=6; -update noar ti set v0='4JJNP148OUHMJ3EGIOHOA' where id=6; -update noar tt set b1='C' where id=6; -update noar ti set b1='C' where id=6; -update noar tt set v0='JSJTKGT3U9ZLMTH5AKR4U5SHMQ' where id=6; -update noar ti set v0='JSJTKGT3U9ZLMTH5AKR4U5SHMQ' where id=6; -update noar tt set b2='15A4BMDBV1X64' where id=6; -update noar ti set b2='15A4BMDBV1X64' where id=6; -update noar tt set v0='OVT5FZH3YI1FBYQVCXK1OR' where id=7; -update noar ti set v0='OVT5FZH3YI1FBYQVCXK1OR' where id=7; -update noar tt set b0='YRY5WJD9HEAC2Q0XL' where id=7; -update noar ti set b0='YRY5WJD9HEAC2Q0XL' where id=7; -update noar tt set v0='P5V009NA8OG6MYEZP8VKM2R8K15' where id=7; -update noar ti set v0='P5V009NA8OG6MYEZP8VKM2R8K15' where id=7; -update noar tt set b1='Z7PR7B2AE6' where id=7; -update noar ti set b1='Z7PR7B2AE6' where id=7; -update noar tt set v0='28SMM2OFCE83W9PZN' where id=7; -update noar ti set v0='28SMM2OFCE83W9PZN' where id=7; -update noar tt set b2='RMVZ2FZ5JB' where id=7; -update noar ti set b2='RMVZ2FZ5JB' where id=7; -update noar tt set v0='FP' where id=8; -update noar ti set v0='FP' where id=8; -update noar tt set b0='Q4NWQ' where id=8; -update noar ti set b0='Q4NWQ' where id=8; -update noar tt set v0='PC59FLLRHOH1XY9GL3F' where id=8; -update noar ti set v0='PC59FLLRHOH1XY9GL3F' where id=8; -update noar tt set b1='CB3E25TWUFO5LQBGR350ZK50VLCV' where id=8; -update noar ti set b1='CB3E25TWUFO5LQBGR350ZK50VLCV' where id=8; -update noar tt set v0='87W71S3TD2IB9NL0LIXJ5D2LWOA' where id=8; -update noar ti set v0='87W71S3TD2IB9NL0LIXJ5D2LWOA' where id=8; -update noar tt set b2='XW7M' where id=8; -update noar ti set b2='XW7M' where id=8; -update noar tt set v0='5RG9BBYLBV' where id=9; -update noar ti set v0='5RG9BBYLBV' where id=9; -update noar tt set b0='YH0MD718RL' where id=9; -update noar ti set b0='YH0MD718RL' where id=9; -update noar tt set v0='355O3IB' where id=9; -update noar ti set v0='355O3IB' where id=9; -update noar tt set b1='DMKSG9UV9E0BVPC74Y3W6' where id=9; -update noar ti set b1='DMKSG9UV9E0BVPC74Y3W6' where id=9; -update noar tt set v0='8IYOIY86E' where id=9; -update noar ti set v0='8IYOIY86E' where id=9; -update noar tt set b2='JWBWUD2UOVL665XG9O2' where id=9; -update noar ti set b2='JWBWUD2UOVL665XG9O2' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 mediumblob not null, - b1 blob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='53NJXRWODZ00H0P' where id=1; -update noar ti set v0='53NJXRWODZ00H0P' where id=1; -update noar tt set b0='Q' where id=1; -update noar ti set b0='Q' where id=1; -update noar tt set v0='LFXBBYJM' where id=1; -update noar ti set v0='LFXBBYJM' where id=1; -update noar tt set b1='FQDNKXWV87BCK792UTT2GVTMOOAX7' where id=1; -update noar ti set b1='FQDNKXWV87BCK792UTT2GVTMOOAX7' where id=1; -update noar tt set v0='SYL32JY5KP3J6G2Y' where id=1; -update noar ti set v0='SYL32JY5KP3J6G2Y' where id=1; -update noar tt set b2='U4YF' where id=1; -update noar ti set b2='U4YF' where id=1; -update noar tt set v0='VI0D2S5341KY2Q36JHTR' where id=2; -update noar ti set v0='VI0D2S5341KY2Q36JHTR' where id=2; -update noar tt set b0='4IOP2NA7T03LPQXEPCMIKZB1IRED0' where id=2; -update noar ti set b0='4IOP2NA7T03LPQXEPCMIKZB1IRED0' where id=2; -update noar tt set v0='NZWKB2VXFNU3AVA5QZSZQ3N' where id=2; -update noar ti set v0='NZWKB2VXFNU3AVA5QZSZQ3N' where id=2; -update noar tt set b1='A2L' where id=2; -update noar ti set b1='A2L' where id=2; -update noar tt set v0='SKYND9HJ6NK9YZ0T1' where id=2; -update noar ti set v0='SKYND9HJ6NK9YZ0T1' where id=2; -update noar tt set b2='WU1AXK74NQZLIU20RCTM3P8BKV' where id=2; -update noar ti set b2='WU1AXK74NQZLIU20RCTM3P8BKV' where id=2; -update noar tt set v0='DKN88' where id=3; -update noar ti set v0='DKN88' where id=3; -update noar tt set b0='ZC525KRA6SE7G3US5MUQLGE86G87D' where id=3; -update noar ti set b0='ZC525KRA6SE7G3US5MUQLGE86G87D' where id=3; -update noar tt set v0='CZWWUFQGS93NNS4' where id=3; -update noar ti set v0='CZWWUFQGS93NNS4' where id=3; -update noar tt set b1='35K55I1M7DTG4VEOR2B9PNS24OILM' where id=3; -update noar ti set b1='35K55I1M7DTG4VEOR2B9PNS24OILM' where id=3; -update noar tt set v0='EDDIP9IYAFXMUXWNY' where id=3; -update noar ti set v0='EDDIP9IYAFXMUXWNY' where id=3; -update noar tt set b2='513UJZQEGYUJN' where id=3; -update noar ti set b2='513UJZQEGYUJN' where id=3; -update noar tt set v0='2EM25ILRC41Q' where id=4; -update noar ti set v0='2EM25ILRC41Q' where id=4; -update noar tt set b0='YB8862QIDIQLX' where id=4; -update noar ti set b0='YB8862QIDIQLX' where id=4; -update noar tt set v0='A64ZQAV6H1XFFHI7WKN5PDR71X79' where id=4; -update noar ti set v0='A64ZQAV6H1XFFHI7WKN5PDR71X79' where id=4; -update noar tt set b1='E602RTBF4YLY' where id=4; -update noar ti set b1='E602RTBF4YLY' where id=4; -update noar tt set v0='GK55ETJQT954' where id=4; -update noar ti set v0='GK55ETJQT954' where id=4; -update noar tt set b2='K' where id=4; -update noar ti set b2='K' where id=4; -update noar tt set v0='IFR65JDTP9AUL7XP57X01' where id=5; -update noar ti set v0='IFR65JDTP9AUL7XP57X01' where id=5; -update noar tt set b0='XRPGQ5IPQIPJDR3FF5' where id=5; -update noar ti set b0='XRPGQ5IPQIPJDR3FF5' where id=5; -update noar tt set v0='90ABFY4EH0BMNQX079B' where id=5; -update noar ti set v0='90ABFY4EH0BMNQX079B' where id=5; -update noar tt set b1='IPBPSCH359J72HHM8R' where id=5; -update noar ti set b1='IPBPSCH359J72HHM8R' where id=5; -update noar tt set v0='WDOIIDSM8UDFSTXQMO' where id=5; -update noar ti set v0='WDOIIDSM8UDFSTXQMO' where id=5; -update noar tt set b2='C1SYUE0DSMSS72MPJMRE' where id=5; -update noar ti set b2='C1SYUE0DSMSS72MPJMRE' where id=5; -update noar tt set v0='D71MRM1Q7WS4DAW6EBI1KK8JT7AYMW' where id=6; -update noar ti set v0='D71MRM1Q7WS4DAW6EBI1KK8JT7AYMW' where id=6; -update noar tt set b0='QGDBNCWW054I5X0A' where id=6; -update noar ti set b0='QGDBNCWW054I5X0A' where id=6; -update noar tt set v0='2KNG' where id=6; -update noar ti set v0='2KNG' where id=6; -update noar tt set b1='M6PWKQAOIK4GQVFM' where id=6; -update noar ti set b1='M6PWKQAOIK4GQVFM' where id=6; -update noar tt set v0='V0FEYSZTJ3QSGST7M9WX57ERK' where id=6; -update noar ti set v0='V0FEYSZTJ3QSGST7M9WX57ERK' where id=6; -update noar tt set b2='QVQLMJ7T0RW2O1D7UCO6C6CO9' where id=6; -update noar ti set b2='QVQLMJ7T0RW2O1D7UCO6C6CO9' where id=6; -update noar tt set v0='S9UBSPA2LOX' where id=7; -update noar ti set v0='S9UBSPA2LOX' where id=7; -update noar tt set b0='SED4OQN4PKDSPWBIU1QY53K7P' where id=7; -update noar ti set b0='SED4OQN4PKDSPWBIU1QY53K7P' where id=7; -update noar tt set v0='F' where id=7; -update noar ti set v0='F' where id=7; -update noar tt set b1='JJ1EYCB81DGM1DTFE' where id=7; -update noar ti set b1='JJ1EYCB81DGM1DTFE' where id=7; -update noar tt set v0='SEKYO08VM4KQEZINA8QMQGFY6EE3M' where id=7; -update noar ti set v0='SEKYO08VM4KQEZINA8QMQGFY6EE3M' where id=7; -update noar tt set b2='OYHQPDC7UL5DZSWK3C6228TPQIFB4' where id=7; -update noar ti set b2='OYHQPDC7UL5DZSWK3C6228TPQIFB4' where id=7; -update noar tt set v0='QKQW9I6L7C' where id=8; -update noar ti set v0='QKQW9I6L7C' where id=8; -update noar tt set b0='EPFNTG7M3AR29CT' where id=8; -update noar ti set b0='EPFNTG7M3AR29CT' where id=8; -update noar tt set v0='AXUCJGLQI20UKEWGS98Y7SJWX' where id=8; -update noar ti set v0='AXUCJGLQI20UKEWGS98Y7SJWX' where id=8; -update noar tt set b1='IN12HEJL5VRZV8HMS2E3JR475Y2' where id=8; -update noar ti set b1='IN12HEJL5VRZV8HMS2E3JR475Y2' where id=8; -update noar tt set v0='XFJMZSZMQJF' where id=8; -update noar ti set v0='XFJMZSZMQJF' where id=8; -update noar tt set b2='TN439ONA2C577G9RLWS5FKWII1JA5' where id=8; -update noar ti set b2='TN439ONA2C577G9RLWS5FKWII1JA5' where id=8; -update noar tt set v0='W5UYO' where id=9; -update noar ti set v0='W5UYO' where id=9; -update noar tt set b0='1VXO4SO1VJBFUYPQJ0Z' where id=9; -update noar ti set b0='1VXO4SO1VJBFUYPQJ0Z' where id=9; -update noar tt set v0='F8EYU5O7VUBNPA3ZSE40LMPUG5M46' where id=9; -update noar ti set v0='F8EYU5O7VUBNPA3ZSE40LMPUG5M46' where id=9; -update noar tt set b1='VSCC1APBTFJHNXAD96UVQOQM8G58YUW' where id=9; -update noar ti set b1='VSCC1APBTFJHNXAD96UVQOQM8G58YUW' where id=9; -update noar tt set v0='OLPM6C' where id=9; -update noar ti set v0='OLPM6C' where id=9; -update noar tt set b2='61ERRVAM' where id=9; -update noar ti set b2='61ERRVAM' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 mediumblob not null, - b1 blob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='NSHLIY1U423Y2HQSJDRE6PZI7B1' where id=1; -update noar ti set v0='NSHLIY1U423Y2HQSJDRE6PZI7B1' where id=1; -update noar tt set b0='VABL6HL9UUB5' where id=1; -update noar ti set b0='VABL6HL9UUB5' where id=1; -update noar tt set v0='0QSQTRBA6WIK5RX8TTESB1' where id=1; -update noar ti set v0='0QSQTRBA6WIK5RX8TTESB1' where id=1; -update noar tt set b1='LALW8OY22L' where id=1; -update noar ti set b1='LALW8OY22L' where id=1; -update noar tt set v0='ZI0BXLLJL3' where id=1; -update noar ti set v0='ZI0BXLLJL3' where id=1; -update noar tt set b2='S9HHJYL3OPWFBC0HRPEL0G7RFB8' where id=1; -update noar ti set b2='S9HHJYL3OPWFBC0HRPEL0G7RFB8' where id=1; -update noar tt set v0='YOJJRWZHJYRMZ' where id=2; -update noar ti set v0='YOJJRWZHJYRMZ' where id=2; -update noar tt set b0='GX8QW9X' where id=2; -update noar ti set b0='GX8QW9X' where id=2; -update noar tt set v0='ZTZ9YYL061BQFTMS0ZAJJT' where id=2; -update noar ti set v0='ZTZ9YYL061BQFTMS0ZAJJT' where id=2; -update noar tt set b1='MLJNCCSF7V9XDYDT69X7SIYSO' where id=2; -update noar ti set b1='MLJNCCSF7V9XDYDT69X7SIYSO' where id=2; -update noar tt set v0='7BDEXA74YEBZVAQP70' where id=2; -update noar ti set v0='7BDEXA74YEBZVAQP70' where id=2; -update noar tt set b2='YOZ1ZFC7O' where id=2; -update noar ti set b2='YOZ1ZFC7O' where id=2; -update noar tt set v0='LK4B9LW' where id=3; -update noar ti set v0='LK4B9LW' where id=3; -update noar tt set b0='GJNADVGYW17TZ8PRKPGC2Y2VXTYU5SFO' where id=3; -update noar ti set b0='GJNADVGYW17TZ8PRKPGC2Y2VXTYU5SFO' where id=3; -update noar tt set v0='C09MSQYBKFTTT14' where id=3; -update noar ti set v0='C09MSQYBKFTTT14' where id=3; -update noar tt set b1='C5P6PHI3DS1RN9Z6GKBVFIVRRLXAPN10' where id=3; -update noar ti set b1='C5P6PHI3DS1RN9Z6GKBVFIVRRLXAPN10' where id=3; -update noar tt set v0='NQFX9CKKWL2BLIN7' where id=3; -update noar ti set v0='NQFX9CKKWL2BLIN7' where id=3; -update noar tt set b2='ZITORHH66JSN1HLMKZFSRIZZ' where id=3; -update noar ti set b2='ZITORHH66JSN1HLMKZFSRIZZ' where id=3; -update noar tt set v0='DOUN60SVXDJ9ALD6B95NOTKUSE7VJTAO' where id=4; -update noar ti set v0='DOUN60SVXDJ9ALD6B95NOTKUSE7VJTAO' where id=4; -update noar tt set b0='B1Y2JFRQ38GDAFOTT592KQKC3MVT' where id=4; -update noar ti set b0='B1Y2JFRQ38GDAFOTT592KQKC3MVT' where id=4; -update noar tt set v0='DIBG0XDOUXE9KA2OLXVWWYZNCTRX1' where id=4; -update noar ti set v0='DIBG0XDOUXE9KA2OLXVWWYZNCTRX1' where id=4; -update noar tt set b1='RAKX3HNE42MT0LEU5VN84KK7' where id=4; -update noar ti set b1='RAKX3HNE42MT0LEU5VN84KK7' where id=4; -update noar tt set v0='J8F1SQAE8YIKZ8GAKMKYMRQWFLE' where id=4; -update noar ti set v0='J8F1SQAE8YIKZ8GAKMKYMRQWFLE' where id=4; -update noar tt set b2='3FSV8Z4ZEAG8FWWSD' where id=4; -update noar ti set b2='3FSV8Z4ZEAG8FWWSD' where id=4; -update noar tt set v0='PS5G9KCN9Z7D6MZGY' where id=5; -update noar ti set v0='PS5G9KCN9Z7D6MZGY' where id=5; -update noar tt set b0='25VFXPCQKWZE6I1JK' where id=5; -update noar ti set b0='25VFXPCQKWZE6I1JK' where id=5; -update noar tt set v0='WWTKFAP11TY47JAD' where id=5; -update noar ti set v0='WWTKFAP11TY47JAD' where id=5; -update noar tt set b1='NSC9NG5E4U87' where id=5; -update noar ti set b1='NSC9NG5E4U87' where id=5; -update noar tt set v0='Q6EA8DQR04ZHO6JUMK9R5CSO' where id=5; -update noar ti set v0='Q6EA8DQR04ZHO6JUMK9R5CSO' where id=5; -update noar tt set b2='OBRWATVWS4X7EEZLW0ZUS5YMF' where id=5; -update noar ti set b2='OBRWATVWS4X7EEZLW0ZUS5YMF' where id=5; -update noar tt set v0='Y' where id=6; -update noar ti set v0='Y' where id=6; -update noar tt set b0='GTM9MDR94T39' where id=6; -update noar ti set b0='GTM9MDR94T39' where id=6; -update noar tt set v0='MSFRV01L9P' where id=6; -update noar ti set v0='MSFRV01L9P' where id=6; -update noar tt set b1='ED2IAIAQ3M8QNB7E3CP' where id=6; -update noar ti set b1='ED2IAIAQ3M8QNB7E3CP' where id=6; -update noar tt set v0='X9TU3OOOGO7GSXKPMJ5O' where id=6; -update noar ti set v0='X9TU3OOOGO7GSXKPMJ5O' where id=6; -update noar tt set b2='M4LLW5HUSMA60L1O218Z7KWXT3F8L' where id=6; -update noar ti set b2='M4LLW5HUSMA60L1O218Z7KWXT3F8L' where id=6; -update noar tt set v0='RJB' where id=7; -update noar ti set v0='RJB' where id=7; -update noar tt set b0='153SQWKJCOZKQANGE' where id=7; -update noar ti set b0='153SQWKJCOZKQANGE' where id=7; -update noar tt set v0='2FQFTXN9CR82P1' where id=7; -update noar ti set v0='2FQFTXN9CR82P1' where id=7; -update noar tt set b1='MFY' where id=7; -update noar ti set b1='MFY' where id=7; -update noar tt set v0='SKWK78N0JRVQFQSNK1MOWAEBR' where id=7; -update noar ti set v0='SKWK78N0JRVQFQSNK1MOWAEBR' where id=7; -update noar tt set b2='2P1IBF7T27LVEVMZHRFSYUM11' where id=7; -update noar ti set b2='2P1IBF7T27LVEVMZHRFSYUM11' where id=7; -update noar tt set v0='4QX' where id=8; -update noar ti set v0='4QX' where id=8; -update noar tt set b0='NGHBI3GWHK86Z2U4GAMDI3YHE' where id=8; -update noar ti set b0='NGHBI3GWHK86Z2U4GAMDI3YHE' where id=8; -update noar tt set v0='4441XKWYCAOD4YOEOR831WIYMH9MTT' where id=8; -update noar ti set v0='4441XKWYCAOD4YOEOR831WIYMH9MTT' where id=8; -update noar tt set b1='A2ORVUD' where id=8; -update noar ti set b1='A2ORVUD' where id=8; -update noar tt set v0='E092CX2NKC256BPH1RNHJAGOW391BMY1' where id=8; -update noar ti set v0='E092CX2NKC256BPH1RNHJAGOW391BMY1' where id=8; -update noar tt set b2='K3BJR3PDKTNH52PPJJIUD9JLRXNMY2K9' where id=8; -update noar ti set b2='K3BJR3PDKTNH52PPJJIUD9JLRXNMY2K9' where id=8; -update noar tt set v0='VW7MM6XU4ZF0LSL6531WTJ5A' where id=9; -update noar ti set v0='VW7MM6XU4ZF0LSL6531WTJ5A' where id=9; -update noar tt set b0='Q30O1UHU' where id=9; -update noar ti set b0='Q30O1UHU' where id=9; -update noar tt set v0='DD9MBAFXKXMORAPO03FEEBFIS0OLPSJ' where id=9; -update noar ti set v0='DD9MBAFXKXMORAPO03FEEBFIS0OLPSJ' where id=9; -update noar tt set b1='UDNI50X1714QESXPJAEG6KFWN3T' where id=9; -update noar ti set b1='UDNI50X1714QESXPJAEG6KFWN3T' where id=9; -update noar tt set v0='0' where id=9; -update noar ti set v0='0' where id=9; -update noar tt set b2='O6H29BGGYZ1M5KLR2DR35' where id=9; -update noar ti set b2='O6H29BGGYZ1M5KLR2DR35' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 mediumblob null, - b1 mediumblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='02WIPE8AS' where id=1; -update noar ti set v0='02WIPE8AS' where id=1; -update noar tt set b0='Q' where id=1; -update noar ti set b0='Q' where id=1; -update noar tt set v0='U6A4NPVVNTG81KRLEV0BBFNNVTFUBO' where id=1; -update noar ti set v0='U6A4NPVVNTG81KRLEV0BBFNNVTFUBO' where id=1; -update noar tt set b1='WDB8' where id=1; -update noar ti set b1='WDB8' where id=1; -update noar tt set v0='5LBGKCZX9UJRDB' where id=1; -update noar ti set v0='5LBGKCZX9UJRDB' where id=1; -update noar tt set b2='NN6A1IZSA6MNPR35CFL8UPQ' where id=1; -update noar ti set b2='NN6A1IZSA6MNPR35CFL8UPQ' where id=1; -update noar tt set v0='K8G55IME4GZ4' where id=2; -update noar ti set v0='K8G55IME4GZ4' where id=2; -update noar tt set b0='GAIYM36GR0TWRALL61E' where id=2; -update noar ti set b0='GAIYM36GR0TWRALL61E' where id=2; -update noar tt set v0='NCY1UXKF2ZWP9PGFS3PBMPOP90' where id=2; -update noar ti set v0='NCY1UXKF2ZWP9PGFS3PBMPOP90' where id=2; -update noar tt set b1='2TG' where id=2; -update noar ti set b1='2TG' where id=2; -update noar tt set v0='2AFJFY8285A' where id=2; -update noar ti set v0='2AFJFY8285A' where id=2; -update noar tt set b2='W49R8E96BAX' where id=2; -update noar ti set b2='W49R8E96BAX' where id=2; -update noar tt set v0='VQU48DKJGWZSG27HH51' where id=3; -update noar ti set v0='VQU48DKJGWZSG27HH51' where id=3; -update noar tt set b0='WVJIRIOSB1MC1' where id=3; -update noar ti set b0='WVJIRIOSB1MC1' where id=3; -update noar tt set v0='46YG' where id=3; -update noar ti set v0='46YG' where id=3; -update noar tt set b1='W80I94C6C1570ALIW2R0AXSRMCGEAOC' where id=3; -update noar ti set b1='W80I94C6C1570ALIW2R0AXSRMCGEAOC' where id=3; -update noar tt set v0='58TSIDW74PPMGI5K9FTV8' where id=3; -update noar ti set v0='58TSIDW74PPMGI5K9FTV8' where id=3; -update noar tt set b2='8T45DBQ3HF4OLW6ULR9GXTB' where id=3; -update noar ti set b2='8T45DBQ3HF4OLW6ULR9GXTB' where id=3; -update noar tt set v0='XXCQ9' where id=4; -update noar ti set v0='XXCQ9' where id=4; -update noar tt set b0='FJG3W74BGRD962QMEY' where id=4; -update noar ti set b0='FJG3W74BGRD962QMEY' where id=4; -update noar tt set v0='6SO83PIRN05YQ9GP6Z7I' where id=4; -update noar ti set v0='6SO83PIRN05YQ9GP6Z7I' where id=4; -update noar tt set b1='UCXDQ4CURUTIA3I11' where id=4; -update noar ti set b1='UCXDQ4CURUTIA3I11' where id=4; -update noar tt set v0='08NZ521CJI7AOU1129JIE8T2A' where id=4; -update noar ti set v0='08NZ521CJI7AOU1129JIE8T2A' where id=4; -update noar tt set b2='GVVOERSLMYRKZXAULJPY' where id=4; -update noar ti set b2='GVVOERSLMYRKZXAULJPY' where id=4; -update noar tt set v0='LU40357O1R7K9R47J12MLTGW' where id=5; -update noar ti set v0='LU40357O1R7K9R47J12MLTGW' where id=5; -update noar tt set b0='3YNMDV' where id=5; -update noar ti set b0='3YNMDV' where id=5; -update noar tt set v0='WOJ9HOG8M6K0' where id=5; -update noar ti set v0='WOJ9HOG8M6K0' where id=5; -update noar tt set b1='79VJWEYV0FIIQ3DC13ACNRX' where id=5; -update noar ti set b1='79VJWEYV0FIIQ3DC13ACNRX' where id=5; -update noar tt set v0='XONPQPN7JE0CHPE9J' where id=5; -update noar ti set v0='XONPQPN7JE0CHPE9J' where id=5; -update noar tt set b2='CSDKN30HKF0C3QL6LBOR' where id=5; -update noar ti set b2='CSDKN30HKF0C3QL6LBOR' where id=5; -update noar tt set v0='69OA8LI92713GE4KP0E0' where id=6; -update noar ti set v0='69OA8LI92713GE4KP0E0' where id=6; -update noar tt set b0='7QEMQ4CH3IITCJWB7QX0IYRK1AY' where id=6; -update noar ti set b0='7QEMQ4CH3IITCJWB7QX0IYRK1AY' where id=6; -update noar tt set v0='GV1Z7LE3F8OUAOZA1H0UN' where id=6; -update noar ti set v0='GV1Z7LE3F8OUAOZA1H0UN' where id=6; -update noar tt set b1='J7PY49GXXTCRO17GJ7N9X5M91' where id=6; -update noar ti set b1='J7PY49GXXTCRO17GJ7N9X5M91' where id=6; -update noar tt set v0='VUVDAUEP6EO8251NTG' where id=6; -update noar ti set v0='VUVDAUEP6EO8251NTG' where id=6; -update noar tt set b2='NBQ2PI7R2AWFHGSZ' where id=6; -update noar ti set b2='NBQ2PI7R2AWFHGSZ' where id=6; -update noar tt set v0='WFYEB3Y8' where id=7; -update noar ti set v0='WFYEB3Y8' where id=7; -update noar tt set b0='VCB' where id=7; -update noar ti set b0='VCB' where id=7; -update noar tt set v0='UPNTU26I12D9R66ZIIXJOHQKB9SL4JH' where id=7; -update noar ti set v0='UPNTU26I12D9R66ZIIXJOHQKB9SL4JH' where id=7; -update noar tt set b1='878YJCZ3ULDFFMEZ2KGUL' where id=7; -update noar ti set b1='878YJCZ3ULDFFMEZ2KGUL' where id=7; -update noar tt set v0='09VUJW2G' where id=7; -update noar ti set v0='09VUJW2G' where id=7; -update noar tt set b2='MR9N8Z830NEMC6UPYLHQFJV' where id=7; -update noar ti set b2='MR9N8Z830NEMC6UPYLHQFJV' where id=7; -update noar tt set v0='YODS7Z6BS' where id=8; -update noar ti set v0='YODS7Z6BS' where id=8; -update noar tt set b0='L1PW5ZU' where id=8; -update noar ti set b0='L1PW5ZU' where id=8; -update noar tt set v0='MRWX4U' where id=8; -update noar ti set v0='MRWX4U' where id=8; -update noar tt set b1='PDDX89RIJL8LOLW7C3KXZ19' where id=8; -update noar ti set b1='PDDX89RIJL8LOLW7C3KXZ19' where id=8; -update noar tt set v0='LEUL3VHWJNBW5L5PG' where id=8; -update noar ti set v0='LEUL3VHWJNBW5L5PG' where id=8; -update noar tt set b2='GPOZMI0B3MB8KNGW293GG59ZO0' where id=8; -update noar ti set b2='GPOZMI0B3MB8KNGW293GG59ZO0' where id=8; -update noar tt set v0='6F6FAICK47' where id=9; -update noar ti set v0='6F6FAICK47' where id=9; -update noar tt set b0='BER1' where id=9; -update noar ti set b0='BER1' where id=9; -update noar tt set v0='GFJTRNY0ZP9XJ' where id=9; -update noar ti set v0='GFJTRNY0ZP9XJ' where id=9; -update noar tt set b1='68H6GUGSBV824J6IHHEV' where id=9; -update noar ti set b1='68H6GUGSBV824J6IHHEV' where id=9; -update noar tt set v0='8HWA5FP01CKG725UD6ZQ' where id=9; -update noar ti set v0='8HWA5FP01CKG725UD6ZQ' where id=9; -update noar tt set b2='71RT' where id=9; -update noar ti set b2='71RT' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 mediumblob null, - b1 mediumblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='YUDNVRAONWSHFR' where id=1; -update noar ti set v0='YUDNVRAONWSHFR' where id=1; -update noar tt set b0='O' where id=1; -update noar ti set b0='O' where id=1; -update noar tt set v0='9CXVFBIAO3YSGYSO3W1LQV0PTM49IX6P' where id=1; -update noar ti set v0='9CXVFBIAO3YSGYSO3W1LQV0PTM49IX6P' where id=1; -update noar tt set b1='JHZX300HA1OBOUM72HG8ASQP8BEW9W' where id=1; -update noar ti set b1='JHZX300HA1OBOUM72HG8ASQP8BEW9W' where id=1; -update noar tt set v0='2A3GY' where id=1; -update noar ti set v0='2A3GY' where id=1; -update noar tt set b2='ZJPEUDXJC351YY6' where id=1; -update noar ti set b2='ZJPEUDXJC351YY6' where id=1; -update noar tt set v0='OBBRACP4Z7VDWO3TS' where id=2; -update noar ti set v0='OBBRACP4Z7VDWO3TS' where id=2; -update noar tt set b0='VC0M3PQLFYC3' where id=2; -update noar ti set b0='VC0M3PQLFYC3' where id=2; -update noar tt set v0='MB639G5' where id=2; -update noar ti set v0='MB639G5' where id=2; -update noar tt set b1='MS1OFAOGAUET3' where id=2; -update noar ti set b1='MS1OFAOGAUET3' where id=2; -update noar tt set v0='23END4W0YLIHP8H36ZUDB9UB7GCHPEOO' where id=2; -update noar ti set v0='23END4W0YLIHP8H36ZUDB9UB7GCHPEOO' where id=2; -update noar tt set b2='ZOUDZQTLVMOAECTAA79Z2L9WH02C' where id=2; -update noar ti set b2='ZOUDZQTLVMOAECTAA79Z2L9WH02C' where id=2; -update noar tt set v0='FCGQBJ4KXVSMWD' where id=3; -update noar ti set v0='FCGQBJ4KXVSMWD' where id=3; -update noar tt set b0='J1LP3V6AXUMKDKS8AMAW20SQ' where id=3; -update noar ti set b0='J1LP3V6AXUMKDKS8AMAW20SQ' where id=3; -update noar tt set v0='L7ODF5P2' where id=3; -update noar ti set v0='L7ODF5P2' where id=3; -update noar tt set b1='SOEJ9FO5M4NI9' where id=3; -update noar ti set b1='SOEJ9FO5M4NI9' where id=3; -update noar tt set v0='1601THUIO' where id=3; -update noar ti set v0='1601THUIO' where id=3; -update noar tt set b2='KHDX60P5' where id=3; -update noar ti set b2='KHDX60P5' where id=3; -update noar tt set v0='MJOKUBL1EJX3SO7' where id=4; -update noar ti set v0='MJOKUBL1EJX3SO7' where id=4; -update noar tt set b0='6KW7BFMJC9BNU1BP2FE0MKM64CK5' where id=4; -update noar ti set b0='6KW7BFMJC9BNU1BP2FE0MKM64CK5' where id=4; -update noar tt set v0='3JDS23' where id=4; -update noar ti set v0='3JDS23' where id=4; -update noar tt set b1='8ZNI6NJ0' where id=4; -update noar ti set b1='8ZNI6NJ0' where id=4; -update noar tt set v0='0KF2SRKTMT1DO4G17' where id=4; -update noar ti set v0='0KF2SRKTMT1DO4G17' where id=4; -update noar tt set b2='PYN1C1T2CXZ759' where id=4; -update noar ti set b2='PYN1C1T2CXZ759' where id=4; -update noar tt set v0='RNW17GMR08EN4X1REN7YBPOPW3' where id=5; -update noar ti set v0='RNW17GMR08EN4X1REN7YBPOPW3' where id=5; -update noar tt set b0='NRHC1QLAMZV3UGNUIUPR7PIG837QLP' where id=5; -update noar ti set b0='NRHC1QLAMZV3UGNUIUPR7PIG837QLP' where id=5; -update noar tt set v0='G6LBL6UFZE' where id=5; -update noar ti set v0='G6LBL6UFZE' where id=5; -update noar tt set b1='813B0G' where id=5; -update noar ti set b1='813B0G' where id=5; -update noar tt set v0='3K8F7DW5AOXT0O4MKAUKKVKZ9T' where id=5; -update noar ti set v0='3K8F7DW5AOXT0O4MKAUKKVKZ9T' where id=5; -update noar tt set b2='81' where id=5; -update noar ti set b2='81' where id=5; -update noar tt set v0='USVOJFIS3ABD' where id=6; -update noar ti set v0='USVOJFIS3ABD' where id=6; -update noar tt set b0='22DK7EG96R2EQF01ZM6IB98' where id=6; -update noar ti set b0='22DK7EG96R2EQF01ZM6IB98' where id=6; -update noar tt set v0='UROH5QS678HX3BRTEYWSE6' where id=6; -update noar ti set v0='UROH5QS678HX3BRTEYWSE6' where id=6; -update noar tt set b1='IIP3COV6HMZZ9GF26JU4UDMOI' where id=6; -update noar ti set b1='IIP3COV6HMZZ9GF26JU4UDMOI' where id=6; -update noar tt set v0='J66LWVNTEIC750RO8AZAXP89Q3JWVIE' where id=6; -update noar ti set v0='J66LWVNTEIC750RO8AZAXP89Q3JWVIE' where id=6; -update noar tt set b2='GGRBQRQUFV07G' where id=6; -update noar ti set b2='GGRBQRQUFV07G' where id=6; -update noar tt set v0='ZXGEJ2OE4ROBE' where id=7; -update noar ti set v0='ZXGEJ2OE4ROBE' where id=7; -update noar tt set b0='ZNWD2HTGCLW393WWSN' where id=7; -update noar ti set b0='ZNWD2HTGCLW393WWSN' where id=7; -update noar tt set v0='ADX3OW' where id=7; -update noar ti set v0='ADX3OW' where id=7; -update noar tt set b1='9UZ0OWKZY1HRZ9DUU0V30MY5R7YFP' where id=7; -update noar ti set b1='9UZ0OWKZY1HRZ9DUU0V30MY5R7YFP' where id=7; -update noar tt set v0='SD8' where id=7; -update noar ti set v0='SD8' where id=7; -update noar tt set b2='WPXYYL947OYQ9ECXEU76UVV' where id=7; -update noar ti set b2='WPXYYL947OYQ9ECXEU76UVV' where id=7; -update noar tt set v0='41AA1926WNX7PS9T668BYXB4RTWAOY' where id=8; -update noar ti set v0='41AA1926WNX7PS9T668BYXB4RTWAOY' where id=8; -update noar tt set b0='QYTHGM9XT7VN2XJFLTR' where id=8; -update noar ti set b0='QYTHGM9XT7VN2XJFLTR' where id=8; -update noar tt set v0='3TVE9EQSR3L1FD0N46I' where id=8; -update noar ti set v0='3TVE9EQSR3L1FD0N46I' where id=8; -update noar tt set b1='FZJFUQJP0RSRBLAA1WQ55CTL2A6A' where id=8; -update noar ti set b1='FZJFUQJP0RSRBLAA1WQ55CTL2A6A' where id=8; -update noar tt set v0='H9A1N6ONMP' where id=8; -update noar ti set v0='H9A1N6ONMP' where id=8; -update noar tt set b2='IQORF2ZI4KVSYKU8GS4BZ5J3JNWMIJHD' where id=8; -update noar ti set b2='IQORF2ZI4KVSYKU8GS4BZ5J3JNWMIJHD' where id=8; -update noar tt set v0='NC47DFISGAGN3F09' where id=9; -update noar ti set v0='NC47DFISGAGN3F09' where id=9; -update noar tt set b0='Y0TKV' where id=9; -update noar ti set b0='Y0TKV' where id=9; -update noar tt set v0='NUK4BLOS' where id=9; -update noar ti set v0='NUK4BLOS' where id=9; -update noar tt set b1='3O44Q' where id=9; -update noar ti set b1='3O44Q' where id=9; -update noar tt set v0='RB99V3VE9AE5VDA84JYCVHTJCT' where id=9; -update noar ti set v0='RB99V3VE9AE5VDA84JYCVHTJCT' where id=9; -update noar tt set b2='4Q8EYB5L3OY3D8KE14MN' where id=9; -update noar ti set b2='4Q8EYB5L3OY3D8KE14MN' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 mediumblob not null, - b1 mediumblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='N' where id=1; -update noar ti set v0='N' where id=1; -update noar tt set b0='YDMB752UI8RHOEANYSMUB0F1AFMCI' where id=1; -update noar ti set b0='YDMB752UI8RHOEANYSMUB0F1AFMCI' where id=1; -update noar tt set v0='JKU8VXN7D' where id=1; -update noar ti set v0='JKU8VXN7D' where id=1; -update noar tt set b1='YDFNDR9TG6GC0HA' where id=1; -update noar ti set b1='YDFNDR9TG6GC0HA' where id=1; -update noar tt set v0='5DSPGEIHHVKWT9Z' where id=1; -update noar ti set v0='5DSPGEIHHVKWT9Z' where id=1; -update noar tt set b2='NCT5R56' where id=1; -update noar ti set b2='NCT5R56' where id=1; -update noar tt set v0='DP4SOY7HBT88OHAZU6SGHJ1D0' where id=2; -update noar ti set v0='DP4SOY7HBT88OHAZU6SGHJ1D0' where id=2; -update noar tt set b0='H0VSX1ZTU16D2D81CNNVVKJ' where id=2; -update noar ti set b0='H0VSX1ZTU16D2D81CNNVVKJ' where id=2; -update noar tt set v0='P' where id=2; -update noar ti set v0='P' where id=2; -update noar tt set b1='5URUZW0' where id=2; -update noar ti set b1='5URUZW0' where id=2; -update noar tt set v0='6OYJPP6HKE4O2U6LO62KHS6HO' where id=2; -update noar ti set v0='6OYJPP6HKE4O2U6LO62KHS6HO' where id=2; -update noar tt set b2='5WHQAX33V0XJU' where id=2; -update noar ti set b2='5WHQAX33V0XJU' where id=2; -update noar tt set v0='78FSJUXZLFOOZH3U7UXO' where id=3; -update noar ti set v0='78FSJUXZLFOOZH3U7UXO' where id=3; -update noar tt set b0='3YSXHIU' where id=3; -update noar ti set b0='3YSXHIU' where id=3; -update noar tt set v0='9SK22IKZDCRXO5SHXL3A5SYP' where id=3; -update noar ti set v0='9SK22IKZDCRXO5SHXL3A5SYP' where id=3; -update noar tt set b1='3WZFQUYWW' where id=3; -update noar ti set b1='3WZFQUYWW' where id=3; -update noar tt set v0='UPMUMHMUXJAVWFM5M72HM' where id=3; -update noar ti set v0='UPMUMHMUXJAVWFM5M72HM' where id=3; -update noar tt set b2='7QS6KNMN0DZUM39Q8FLBZ2K9POZBPU3X' where id=3; -update noar ti set b2='7QS6KNMN0DZUM39Q8FLBZ2K9POZBPU3X' where id=3; -update noar tt set v0='3GYYCXAFWDCZ6ISS5BMA25MJFAQTZ1GZ' where id=4; -update noar ti set v0='3GYYCXAFWDCZ6ISS5BMA25MJFAQTZ1GZ' where id=4; -update noar tt set b0='V3UX3HL8Y' where id=4; -update noar ti set b0='V3UX3HL8Y' where id=4; -update noar tt set v0='F9XY00HELK7I5ZM44BG6B850BF2' where id=4; -update noar ti set v0='F9XY00HELK7I5ZM44BG6B850BF2' where id=4; -update noar tt set b1='MKZ533PZXGNTTJVHDNAISKQOMMV' where id=4; -update noar ti set b1='MKZ533PZXGNTTJVHDNAISKQOMMV' where id=4; -update noar tt set v0='4PC5M167NADGXQZDDV' where id=4; -update noar ti set v0='4PC5M167NADGXQZDDV' where id=4; -update noar tt set b2='9SD5GKYRBW1' where id=4; -update noar ti set b2='9SD5GKYRBW1' where id=4; -update noar tt set v0='TN47W0I8Y54JRLHJAOZH2FUCRH39R2H3' where id=5; -update noar ti set v0='TN47W0I8Y54JRLHJAOZH2FUCRH39R2H3' where id=5; -update noar tt set b0='3W5' where id=5; -update noar ti set b0='3W5' where id=5; -update noar tt set v0='WSJ0X77XS63H4M7259ZD1T' where id=5; -update noar ti set v0='WSJ0X77XS63H4M7259ZD1T' where id=5; -update noar tt set b1='G8VAWEV0B' where id=5; -update noar ti set b1='G8VAWEV0B' where id=5; -update noar tt set v0='CGCOB332F6F3PS9QNTKR5213J4DOCM' where id=5; -update noar ti set v0='CGCOB332F6F3PS9QNTKR5213J4DOCM' where id=5; -update noar tt set b2='LEB90RZ' where id=5; -update noar ti set b2='LEB90RZ' where id=5; -update noar tt set v0='NHSVG' where id=6; -update noar ti set v0='NHSVG' where id=6; -update noar tt set b0='FG' where id=6; -update noar ti set b0='FG' where id=6; -update noar tt set v0='P8O67MEN8U' where id=6; -update noar ti set v0='P8O67MEN8U' where id=6; -update noar tt set b1='2OB6DSDRD8YQ6P7WXWZPEW3IHUXZE' where id=6; -update noar ti set b1='2OB6DSDRD8YQ6P7WXWZPEW3IHUXZE' where id=6; -update noar tt set v0='HQFW09RXAHQ5WBYZIX88C1IAJ' where id=6; -update noar ti set v0='HQFW09RXAHQ5WBYZIX88C1IAJ' where id=6; -update noar tt set b2='0KM1E06RPBBYZ6WEKE' where id=6; -update noar ti set b2='0KM1E06RPBBYZ6WEKE' where id=6; -update noar tt set v0='DK4R00FQKZVH' where id=7; -update noar ti set v0='DK4R00FQKZVH' where id=7; -update noar tt set b0='NCRHUVJIKGDSABVR6PZH1XKXAR7DF' where id=7; -update noar ti set b0='NCRHUVJIKGDSABVR6PZH1XKXAR7DF' where id=7; -update noar tt set v0='JXVE9GUJ6GK6IZ7KC3N2C0K' where id=7; -update noar ti set v0='JXVE9GUJ6GK6IZ7KC3N2C0K' where id=7; -update noar tt set b1='XEXVMKWGSTYDSQOVULK1X7Y' where id=7; -update noar ti set b1='XEXVMKWGSTYDSQOVULK1X7Y' where id=7; -update noar tt set v0='T6T5WBRY6' where id=7; -update noar ti set v0='T6T5WBRY6' where id=7; -update noar tt set b2='QDODTULSK1RN0WDX1EL9NHKCA' where id=7; -update noar ti set b2='QDODTULSK1RN0WDX1EL9NHKCA' where id=7; -update noar tt set v0='2NZJNPN5Q81DZIQXNKUYGBIVL2O0M8JZ' where id=8; -update noar ti set v0='2NZJNPN5Q81DZIQXNKUYGBIVL2O0M8JZ' where id=8; -update noar tt set b0='DSIMV4K676JCPA4YQE' where id=8; -update noar ti set b0='DSIMV4K676JCPA4YQE' where id=8; -update noar tt set v0='UM9H01M831' where id=8; -update noar ti set v0='UM9H01M831' where id=8; -update noar tt set b1='AYPNH6KXSU68LKWCSE79EXFI' where id=8; -update noar ti set b1='AYPNH6KXSU68LKWCSE79EXFI' where id=8; -update noar tt set v0='KAWEV173PLQ3CUYRAR3YFVV' where id=8; -update noar ti set v0='KAWEV173PLQ3CUYRAR3YFVV' where id=8; -update noar tt set b2='NBAT91HZYRDZRSXBDP' where id=8; -update noar ti set b2='NBAT91HZYRDZRSXBDP' where id=8; -update noar tt set v0='GK4OP0FSQJKJ0DT' where id=9; -update noar ti set v0='GK4OP0FSQJKJ0DT' where id=9; -update noar tt set b0='AZTOVLOW2YFNUYF2R9LO80KKUL0B7I8' where id=9; -update noar ti set b0='AZTOVLOW2YFNUYF2R9LO80KKUL0B7I8' where id=9; -update noar tt set v0='CY3728MNXNSG351HF2JPH23KP7' where id=9; -update noar ti set v0='CY3728MNXNSG351HF2JPH23KP7' where id=9; -update noar tt set b1='CO7TSC1080CUM6IUVY0QRE76GLGSP7' where id=9; -update noar ti set b1='CO7TSC1080CUM6IUVY0QRE76GLGSP7' where id=9; -update noar tt set v0='CWGLRYMYXSU' where id=9; -update noar ti set v0='CWGLRYMYXSU' where id=9; -update noar tt set b2='FP3VFIDZY' where id=9; -update noar ti set b2='FP3VFIDZY' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 mediumblob not null, - b1 mediumblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='LLFBG8VBB2I' where id=1; -update noar ti set v0='LLFBG8VBB2I' where id=1; -update noar tt set b0='E64YVGC5NQJ8TTIRU9VMC56I7U1CJUS' where id=1; -update noar ti set b0='E64YVGC5NQJ8TTIRU9VMC56I7U1CJUS' where id=1; -update noar tt set v0='439NQPBBYPJ38' where id=1; -update noar ti set v0='439NQPBBYPJ38' where id=1; -update noar tt set b1='T9NQK7250QMBJ6G3TZED5C' where id=1; -update noar ti set b1='T9NQK7250QMBJ6G3TZED5C' where id=1; -update noar tt set v0='S' where id=1; -update noar ti set v0='S' where id=1; -update noar tt set b2='7STB' where id=1; -update noar ti set b2='7STB' where id=1; -update noar tt set v0='COH8TVC777MHK1' where id=2; -update noar ti set v0='COH8TVC777MHK1' where id=2; -update noar tt set b0='B6JDVH3' where id=2; -update noar ti set b0='B6JDVH3' where id=2; -update noar tt set v0='OY8AUBIZHYUY3YBS7GRLB9' where id=2; -update noar ti set v0='OY8AUBIZHYUY3YBS7GRLB9' where id=2; -update noar tt set b1='Y0TO' where id=2; -update noar ti set b1='Y0TO' where id=2; -update noar tt set v0='OU9OWWS416ZIXI1660R' where id=2; -update noar ti set v0='OU9OWWS416ZIXI1660R' where id=2; -update noar tt set b2='AFUDORACFV46H3V4DBRJ' where id=2; -update noar ti set b2='AFUDORACFV46H3V4DBRJ' where id=2; -update noar tt set v0='CS58ZYR5OSJ04TD3WWHM7R55I3' where id=3; -update noar ti set v0='CS58ZYR5OSJ04TD3WWHM7R55I3' where id=3; -update noar tt set b0='PTNN5ABS4OQPRWR4NWKAIXRDIO5FK1' where id=3; -update noar ti set b0='PTNN5ABS4OQPRWR4NWKAIXRDIO5FK1' where id=3; -update noar tt set v0='REKHPM6IRDE2V2PWE8Z4XF8' where id=3; -update noar ti set v0='REKHPM6IRDE2V2PWE8Z4XF8' where id=3; -update noar tt set b1='YY4UFQGSWKKM8TVYJB9' where id=3; -update noar ti set b1='YY4UFQGSWKKM8TVYJB9' where id=3; -update noar tt set v0='3RHB1MQW2793637Z' where id=3; -update noar ti set v0='3RHB1MQW2793637Z' where id=3; -update noar tt set b2='1IXZVWXRJ2LL8NYBJMXAWIAH6EE' where id=3; -update noar ti set b2='1IXZVWXRJ2LL8NYBJMXAWIAH6EE' where id=3; -update noar tt set v0='VACJ89JOLRN3HI0P8ERA' where id=4; -update noar ti set v0='VACJ89JOLRN3HI0P8ERA' where id=4; -update noar tt set b0='2JKZJFW1EB6G2AR8QK' where id=4; -update noar ti set b0='2JKZJFW1EB6G2AR8QK' where id=4; -update noar tt set v0='QDIAQ6T52RMFGX71YZ37S9C08ELYF' where id=4; -update noar ti set v0='QDIAQ6T52RMFGX71YZ37S9C08ELYF' where id=4; -update noar tt set b1='02GKU71LWW7Q4908ONBA1' where id=4; -update noar ti set b1='02GKU71LWW7Q4908ONBA1' where id=4; -update noar tt set v0='YH10LSS0G4H8X9QZVG7T66O48TJMTUM' where id=4; -update noar ti set v0='YH10LSS0G4H8X9QZVG7T66O48TJMTUM' where id=4; -update noar tt set b2='D7YLH4JPV6OQD9O3NNLK' where id=4; -update noar ti set b2='D7YLH4JPV6OQD9O3NNLK' where id=4; -update noar tt set v0='JYSN770Q8IPMRBSBSR46WG53UJPI5S0' where id=5; -update noar ti set v0='JYSN770Q8IPMRBSBSR46WG53UJPI5S0' where id=5; -update noar tt set b0='KSW1NAQR2DBNK5WWGI8M36QAU8' where id=5; -update noar ti set b0='KSW1NAQR2DBNK5WWGI8M36QAU8' where id=5; -update noar tt set v0='6BXHZ4V' where id=5; -update noar ti set v0='6BXHZ4V' where id=5; -update noar tt set b1='D' where id=5; -update noar ti set b1='D' where id=5; -update noar tt set v0='SK9SG' where id=5; -update noar ti set v0='SK9SG' where id=5; -update noar tt set b2='5RF6IY0R' where id=5; -update noar ti set b2='5RF6IY0R' where id=5; -update noar tt set v0='DX' where id=6; -update noar ti set v0='DX' where id=6; -update noar tt set b0='YW5AHY98EZSKKLXWUDW4EF34KMBV' where id=6; -update noar ti set b0='YW5AHY98EZSKKLXWUDW4EF34KMBV' where id=6; -update noar tt set v0='WYD9EK' where id=6; -update noar ti set v0='WYD9EK' where id=6; -update noar tt set b1='USL82FEUNMEEE4TTCIZVW' where id=6; -update noar ti set b1='USL82FEUNMEEE4TTCIZVW' where id=6; -update noar tt set v0='ZY635G47X855R7OB4DSPUOFMW3Z44O' where id=6; -update noar ti set v0='ZY635G47X855R7OB4DSPUOFMW3Z44O' where id=6; -update noar tt set b2='3TK8' where id=6; -update noar ti set b2='3TK8' where id=6; -update noar tt set v0='DXYPX1TQVAAQYY26SDIFBXP1788ME17A' where id=7; -update noar ti set v0='DXYPX1TQVAAQYY26SDIFBXP1788ME17A' where id=7; -update noar tt set b0='71FKVG7HE8M8DU80GARHZWNIU' where id=7; -update noar ti set b0='71FKVG7HE8M8DU80GARHZWNIU' where id=7; -update noar tt set v0='DUO' where id=7; -update noar ti set v0='DUO' where id=7; -update noar tt set b1='AQVMGL2C7Z42DZMCZ3LLNX3B' where id=7; -update noar ti set b1='AQVMGL2C7Z42DZMCZ3LLNX3B' where id=7; -update noar tt set v0='SP61Y' where id=7; -update noar ti set v0='SP61Y' where id=7; -update noar tt set b2='GNB1WPKT5XJVR' where id=7; -update noar ti set b2='GNB1WPKT5XJVR' where id=7; -update noar tt set v0='BSCD' where id=8; -update noar ti set v0='BSCD' where id=8; -update noar tt set b0='9RWIRQOSZH8BZJQX3SGXZ' where id=8; -update noar ti set b0='9RWIRQOSZH8BZJQX3SGXZ' where id=8; -update noar tt set v0='GNSYJ62FETS' where id=8; -update noar ti set v0='GNSYJ62FETS' where id=8; -update noar tt set b1='R5UHHK50CBGFJ8R49HOD2NBERWKEG05' where id=8; -update noar ti set b1='R5UHHK50CBGFJ8R49HOD2NBERWKEG05' where id=8; -update noar tt set v0='NFR5JIP7ISSN2PICY476KQ' where id=8; -update noar ti set v0='NFR5JIP7ISSN2PICY476KQ' where id=8; -update noar tt set b2='F96I73FDASH9K9O9QVJ7' where id=8; -update noar ti set b2='F96I73FDASH9K9O9QVJ7' where id=8; -update noar tt set v0='KH6IM5DP4CRU' where id=9; -update noar ti set v0='KH6IM5DP4CRU' where id=9; -update noar tt set b0='MG' where id=9; -update noar ti set b0='MG' where id=9; -update noar tt set v0='HQVOE57D9QLW' where id=9; -update noar ti set v0='HQVOE57D9QLW' where id=9; -update noar tt set b1='UWZEKF5SRFWTKV' where id=9; -update noar ti set b1='UWZEKF5SRFWTKV' where id=9; -update noar tt set v0='NCTTH4LR' where id=9; -update noar ti set v0='NCTTH4LR' where id=9; -update noar tt set b2='YE8TWCW29FVX87LG' where id=9; -update noar ti set b2='YE8TWCW29FVX87LG' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 mediumblob null, - b1 mediumblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='04PIU0CKKINXJLH41' where id=1; -update noar ti set v0='04PIU0CKKINXJLH41' where id=1; -update noar tt set b0='M6QWWV' where id=1; -update noar ti set b0='M6QWWV' where id=1; -update noar tt set v0='2Y0O8PQ91CAI7PH6D6' where id=1; -update noar ti set v0='2Y0O8PQ91CAI7PH6D6' where id=1; -update noar tt set b1='W0XHJDPTUFG287T1VZZJXVJZX' where id=1; -update noar ti set b1='W0XHJDPTUFG287T1VZZJXVJZX' where id=1; -update noar tt set v0='NTJAOCZNVTFDBKA4IA96ZW9G' where id=1; -update noar ti set v0='NTJAOCZNVTFDBKA4IA96ZW9G' where id=1; -update noar tt set b2='BED5PXB80GBH1B8G2JQBBT' where id=1; -update noar ti set b2='BED5PXB80GBH1B8G2JQBBT' where id=1; -update noar tt set v0='HVYJ1ZX' where id=2; -update noar ti set v0='HVYJ1ZX' where id=2; -update noar tt set b0='ARUE' where id=2; -update noar ti set b0='ARUE' where id=2; -update noar tt set v0='NSQXA7PCT2SG56UN' where id=2; -update noar ti set v0='NSQXA7PCT2SG56UN' where id=2; -update noar tt set b1='53' where id=2; -update noar ti set b1='53' where id=2; -update noar tt set v0='L8I3O6B8HJH4OUIWBIH11GCI4CFQI059' where id=2; -update noar ti set v0='L8I3O6B8HJH4OUIWBIH11GCI4CFQI059' where id=2; -update noar tt set b2='ICGL7UW03KN5PT7NK23ODH6D5ZI03' where id=2; -update noar ti set b2='ICGL7UW03KN5PT7NK23ODH6D5ZI03' where id=2; -update noar tt set v0='YVCLXLU032ERAZUWXHQ' where id=3; -update noar ti set v0='YVCLXLU032ERAZUWXHQ' where id=3; -update noar tt set b0='9GHVX4JS9C67JU' where id=3; -update noar ti set b0='9GHVX4JS9C67JU' where id=3; -update noar tt set v0='CNE' where id=3; -update noar ti set v0='CNE' where id=3; -update noar tt set b1='QEVA42Z6LOTKJ172UWPDXV89QZYMM' where id=3; -update noar ti set b1='QEVA42Z6LOTKJ172UWPDXV89QZYMM' where id=3; -update noar tt set v0='1PHPPWFUDLE' where id=3; -update noar ti set v0='1PHPPWFUDLE' where id=3; -update noar tt set b2='RQ0A3' where id=3; -update noar ti set b2='RQ0A3' where id=3; -update noar tt set v0='MT89D74JVGWCNRGISW4TPQ8' where id=4; -update noar ti set v0='MT89D74JVGWCNRGISW4TPQ8' where id=4; -update noar tt set b0='TBDA8MZ912QDM0GLPQRPXMJCB32HC' where id=4; -update noar ti set b0='TBDA8MZ912QDM0GLPQRPXMJCB32HC' where id=4; -update noar tt set v0='8PIKO4UFEV9W3' where id=4; -update noar ti set v0='8PIKO4UFEV9W3' where id=4; -update noar tt set b1='G884SW0' where id=4; -update noar ti set b1='G884SW0' where id=4; -update noar tt set v0='PD7UEA1E9DN5FI4WSR' where id=4; -update noar ti set v0='PD7UEA1E9DN5FI4WSR' where id=4; -update noar tt set b2='A' where id=4; -update noar ti set b2='A' where id=4; -update noar tt set v0='3SUCBJK5PMUUI' where id=5; -update noar ti set v0='3SUCBJK5PMUUI' where id=5; -update noar tt set b0='IHKV7D4VTTBTLHEUI78I' where id=5; -update noar ti set b0='IHKV7D4VTTBTLHEUI78I' where id=5; -update noar tt set v0='C4BEACU9PGM3AR3KJFSS5' where id=5; -update noar ti set v0='C4BEACU9PGM3AR3KJFSS5' where id=5; -update noar tt set b1='042HA' where id=5; -update noar ti set b1='042HA' where id=5; -update noar tt set v0='HXOT' where id=5; -update noar ti set v0='HXOT' where id=5; -update noar tt set b2='IHJ3T95D7RQLRICLO6OHFYP' where id=5; -update noar ti set b2='IHJ3T95D7RQLRICLO6OHFYP' where id=5; -update noar tt set v0='UFLT8KV6A' where id=6; -update noar ti set v0='UFLT8KV6A' where id=6; -update noar tt set b0='9ISM9KQYQTLN16FWGLN1TAMZJE' where id=6; -update noar ti set b0='9ISM9KQYQTLN16FWGLN1TAMZJE' where id=6; -update noar tt set v0='QURU19YE9WJMXHCWYZFSGITY8X7VGUA' where id=6; -update noar ti set v0='QURU19YE9WJMXHCWYZFSGITY8X7VGUA' where id=6; -update noar tt set b1='5J0WVQBB12CADUEKJW28PPCEI6VZ' where id=6; -update noar ti set b1='5J0WVQBB12CADUEKJW28PPCEI6VZ' where id=6; -update noar tt set v0='GB1YCN3ZN8CEA7159O790F8QSA1DCYT' where id=6; -update noar ti set v0='GB1YCN3ZN8CEA7159O790F8QSA1DCYT' where id=6; -update noar tt set b2='RGMU7R6242MBNK4H7TI44A5LG4' where id=6; -update noar ti set b2='RGMU7R6242MBNK4H7TI44A5LG4' where id=6; -update noar tt set v0='33X4U91FHQL6I6TY0GKWVK3WFK' where id=7; -update noar ti set v0='33X4U91FHQL6I6TY0GKWVK3WFK' where id=7; -update noar tt set b0='NUBOG6EO0FQ2RSVH79V' where id=7; -update noar ti set b0='NUBOG6EO0FQ2RSVH79V' where id=7; -update noar tt set v0='E8KKF2DEKO11' where id=7; -update noar ti set v0='E8KKF2DEKO11' where id=7; -update noar tt set b1='1BCMTILG12L7DR9RY3Y6' where id=7; -update noar ti set b1='1BCMTILG12L7DR9RY3Y6' where id=7; -update noar tt set v0='FAZS7OZEDWLVACH2MN67XONMI' where id=7; -update noar ti set v0='FAZS7OZEDWLVACH2MN67XONMI' where id=7; -update noar tt set b2='XW7TWY9JDOAN' where id=7; -update noar ti set b2='XW7TWY9JDOAN' where id=7; -update noar tt set v0='1CAR5BV5' where id=8; -update noar ti set v0='1CAR5BV5' where id=8; -update noar tt set b0='4HQC2SZIU4E5YHTR15EHGH8W' where id=8; -update noar ti set b0='4HQC2SZIU4E5YHTR15EHGH8W' where id=8; -update noar tt set v0='MAKQ12A0KHZWUWM' where id=8; -update noar ti set v0='MAKQ12A0KHZWUWM' where id=8; -update noar tt set b1='AWEEFJGHNS0' where id=8; -update noar ti set b1='AWEEFJGHNS0' where id=8; -update noar tt set v0='RC4SCVOU908CI9O' where id=8; -update noar ti set v0='RC4SCVOU908CI9O' where id=8; -update noar tt set b2='DTJAHRJIY860W' where id=8; -update noar ti set b2='DTJAHRJIY860W' where id=8; -update noar tt set v0='GDVAL' where id=9; -update noar ti set v0='GDVAL' where id=9; -update noar tt set b0='63MDZN0E1QGLFPQY3WA21ZJXBD4O' where id=9; -update noar ti set b0='63MDZN0E1QGLFPQY3WA21ZJXBD4O' where id=9; -update noar tt set v0='BRB2T2EU23UAIOH2EST6POR8OTNNN' where id=9; -update noar ti set v0='BRB2T2EU23UAIOH2EST6POR8OTNNN' where id=9; -update noar tt set b1='Z9ZZDLYENX6S3GD006R1XF267GY' where id=9; -update noar ti set b1='Z9ZZDLYENX6S3GD006R1XF267GY' where id=9; -update noar tt set v0='YUKYQZ1QHNLGX3FEN7MMXH3W1BWQB6KC' where id=9; -update noar ti set v0='YUKYQZ1QHNLGX3FEN7MMXH3W1BWQB6KC' where id=9; -update noar tt set b2='OAGL44IW81102HG0GB8HY3737AK51BZ' where id=9; -update noar ti set b2='OAGL44IW81102HG0GB8HY3737AK51BZ' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 mediumblob null, - b1 mediumblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='17A5T7Z0WFVX58XEVKHLN2CKLDNJ991' where id=1; -update noar ti set v0='17A5T7Z0WFVX58XEVKHLN2CKLDNJ991' where id=1; -update noar tt set b0='RW8F3WW26' where id=1; -update noar ti set b0='RW8F3WW26' where id=1; -update noar tt set v0='OD37H8N0U92V7S0S8CTDXL0MC' where id=1; -update noar ti set v0='OD37H8N0U92V7S0S8CTDXL0MC' where id=1; -update noar tt set b1='2WJ4IJ0B7A33INI0B5N0JUE8' where id=1; -update noar ti set b1='2WJ4IJ0B7A33INI0B5N0JUE8' where id=1; -update noar tt set v0='AGUVP0RIS' where id=1; -update noar ti set v0='AGUVP0RIS' where id=1; -update noar tt set b2='K63DRD1AZ2VUCFGEC' where id=1; -update noar ti set b2='K63DRD1AZ2VUCFGEC' where id=1; -update noar tt set v0='QDOH273EW2DPFL' where id=2; -update noar ti set v0='QDOH273EW2DPFL' where id=2; -update noar tt set b0='7GEG9LNWUOAVUA0X530S4AIVY' where id=2; -update noar ti set b0='7GEG9LNWUOAVUA0X530S4AIVY' where id=2; -update noar tt set v0='QVEMZ4ETY8E2LTTRA7V4PS4LLPBW' where id=2; -update noar ti set v0='QVEMZ4ETY8E2LTTRA7V4PS4LLPBW' where id=2; -update noar tt set b1='DEIAYQWFCE3VYT0JGC' where id=2; -update noar ti set b1='DEIAYQWFCE3VYT0JGC' where id=2; -update noar tt set v0='5PLIAAL9GV' where id=2; -update noar ti set v0='5PLIAAL9GV' where id=2; -update noar tt set b2='IC6KEXV0HZ9POF0A2Z69SLVWMKUKT4' where id=2; -update noar ti set b2='IC6KEXV0HZ9POF0A2Z69SLVWMKUKT4' where id=2; -update noar tt set v0='C2' where id=3; -update noar ti set v0='C2' where id=3; -update noar tt set b0='OFL2RLO5X6XJTUZ9C' where id=3; -update noar ti set b0='OFL2RLO5X6XJTUZ9C' where id=3; -update noar tt set v0='7TQCJY6CLMRJLW4Q6XYGDK9X0Q' where id=3; -update noar ti set v0='7TQCJY6CLMRJLW4Q6XYGDK9X0Q' where id=3; -update noar tt set b1='C0P5UA2NZF' where id=3; -update noar ti set b1='C0P5UA2NZF' where id=3; -update noar tt set v0='O7' where id=3; -update noar ti set v0='O7' where id=3; -update noar tt set b2='ZDA80T5NXP5DL' where id=3; -update noar ti set b2='ZDA80T5NXP5DL' where id=3; -update noar tt set v0='ISOJ0ZDAD0N' where id=4; -update noar ti set v0='ISOJ0ZDAD0N' where id=4; -update noar tt set b0='TEBY' where id=4; -update noar ti set b0='TEBY' where id=4; -update noar tt set v0='YFD4Q6MMORW8OIO' where id=4; -update noar ti set v0='YFD4Q6MMORW8OIO' where id=4; -update noar tt set b1='6J4X1L16Z9URL8Q' where id=4; -update noar ti set b1='6J4X1L16Z9URL8Q' where id=4; -update noar tt set v0='M0QLMM2KZ0E3GFYIIUBGLT08ULH5ST' where id=4; -update noar ti set v0='M0QLMM2KZ0E3GFYIIUBGLT08ULH5ST' where id=4; -update noar tt set b2='F9O1Y' where id=4; -update noar ti set b2='F9O1Y' where id=4; -update noar tt set v0='V2SKH99JJIOMS2AA8HGL363S3TUFPAZV' where id=5; -update noar ti set v0='V2SKH99JJIOMS2AA8HGL363S3TUFPAZV' where id=5; -update noar tt set b0='7LH3XHI6ZY8VIP2MCH82NLAM' where id=5; -update noar ti set b0='7LH3XHI6ZY8VIP2MCH82NLAM' where id=5; -update noar tt set v0='FLCM73' where id=5; -update noar ti set v0='FLCM73' where id=5; -update noar tt set b1='NWP0ZJUR' where id=5; -update noar ti set b1='NWP0ZJUR' where id=5; -update noar tt set v0='SRZQ' where id=5; -update noar ti set v0='SRZQ' where id=5; -update noar tt set b2='5SNWARRJQIVRO94W5XD0UJLXIKNSI' where id=5; -update noar ti set b2='5SNWARRJQIVRO94W5XD0UJLXIKNSI' where id=5; -update noar tt set v0='4' where id=6; -update noar ti set v0='4' where id=6; -update noar tt set b0='X1ZU9ICQTLCYV7M6A44HGWT7QDF' where id=6; -update noar ti set b0='X1ZU9ICQTLCYV7M6A44HGWT7QDF' where id=6; -update noar tt set v0='YPG9SAAVQCZC1H9' where id=6; -update noar ti set v0='YPG9SAAVQCZC1H9' where id=6; -update noar tt set b1='P74J5MEVF823AHSIU26VZ4PM0MNLF' where id=6; -update noar ti set b1='P74J5MEVF823AHSIU26VZ4PM0MNLF' where id=6; -update noar tt set v0='VIHBZCIBK' where id=6; -update noar ti set v0='VIHBZCIBK' where id=6; -update noar tt set b2='4V52L0RO3CP1FWN4GQTCBTM39' where id=6; -update noar ti set b2='4V52L0RO3CP1FWN4GQTCBTM39' where id=6; -update noar tt set v0='NKVU0JBVPG970BQF4T2' where id=7; -update noar ti set v0='NKVU0JBVPG970BQF4T2' where id=7; -update noar tt set b0='9E6RXCGCTIEB17TPA0K8T' where id=7; -update noar ti set b0='9E6RXCGCTIEB17TPA0K8T' where id=7; -update noar tt set v0='RPF8' where id=7; -update noar ti set v0='RPF8' where id=7; -update noar tt set b1='W8' where id=7; -update noar ti set b1='W8' where id=7; -update noar tt set v0='9GKGU' where id=7; -update noar ti set v0='9GKGU' where id=7; -update noar tt set b2='0RH8DCPBKR' where id=7; -update noar ti set b2='0RH8DCPBKR' where id=7; -update noar tt set v0='G5ES2EE' where id=8; -update noar ti set v0='G5ES2EE' where id=8; -update noar tt set b0='38K' where id=8; -update noar ti set b0='38K' where id=8; -update noar tt set v0='X8CI62NX4LXCC' where id=8; -update noar ti set v0='X8CI62NX4LXCC' where id=8; -update noar tt set b1='YD7E005F8L1967YIAKDZQT3M' where id=8; -update noar ti set b1='YD7E005F8L1967YIAKDZQT3M' where id=8; -update noar tt set v0='WWP52' where id=8; -update noar ti set v0='WWP52' where id=8; -update noar tt set b2='PN' where id=8; -update noar ti set b2='PN' where id=8; -update noar tt set v0='X1ER8HIJ7N9JQJ4RFHUWK6HFSVE6L' where id=9; -update noar ti set v0='X1ER8HIJ7N9JQJ4RFHUWK6HFSVE6L' where id=9; -update noar tt set b0='U15GP5VF4Q6MMNWW2V6OOTDNF3VD8' where id=9; -update noar ti set b0='U15GP5VF4Q6MMNWW2V6OOTDNF3VD8' where id=9; -update noar tt set v0='50OK' where id=9; -update noar ti set v0='50OK' where id=9; -update noar tt set b1='HT521Q6PPTD1VLA0BD8UXSK' where id=9; -update noar ti set b1='HT521Q6PPTD1VLA0BD8UXSK' where id=9; -update noar tt set v0='1EL3E4VT71JIARQ5IUZ5N' where id=9; -update noar ti set v0='1EL3E4VT71JIARQ5IUZ5N' where id=9; -update noar tt set b2='7QEBODAYSILCF9Z7UY2W9597' where id=9; -update noar ti set b2='7QEBODAYSILCF9Z7UY2W9597' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 mediumblob not null, - b1 mediumblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='I8C5Q9X07R' where id=1; -update noar ti set v0='I8C5Q9X07R' where id=1; -update noar tt set b0='3WLOOV9QMRVO1' where id=1; -update noar ti set b0='3WLOOV9QMRVO1' where id=1; -update noar tt set v0='PS7TBY1KIQLYL5D0MGQG' where id=1; -update noar ti set v0='PS7TBY1KIQLYL5D0MGQG' where id=1; -update noar tt set b1='UO61B6VPRK7LRSOZBUJV4B6G0ZES1RO' where id=1; -update noar ti set b1='UO61B6VPRK7LRSOZBUJV4B6G0ZES1RO' where id=1; -update noar tt set v0='ALOMZYO1J' where id=1; -update noar ti set v0='ALOMZYO1J' where id=1; -update noar tt set b2='3LYGVNI53FYT6FI93TOW0' where id=1; -update noar ti set b2='3LYGVNI53FYT6FI93TOW0' where id=1; -update noar tt set v0='RPT90BSEX2S' where id=2; -update noar ti set v0='RPT90BSEX2S' where id=2; -update noar tt set b0='W5JWH4MCP4TQL5HPUJEKQIYG4599C' where id=2; -update noar ti set b0='W5JWH4MCP4TQL5HPUJEKQIYG4599C' where id=2; -update noar tt set v0='4QHZG' where id=2; -update noar ti set v0='4QHZG' where id=2; -update noar tt set b1='3J28T2UY0CHWJUWD15R6Q4TWMNG2TS' where id=2; -update noar ti set b1='3J28T2UY0CHWJUWD15R6Q4TWMNG2TS' where id=2; -update noar tt set v0='MM9PAK2RV6JMH3FKUEH2RHGM' where id=2; -update noar ti set v0='MM9PAK2RV6JMH3FKUEH2RHGM' where id=2; -update noar tt set b2='QCP697HDPJF732' where id=2; -update noar ti set b2='QCP697HDPJF732' where id=2; -update noar tt set v0='XRIM2465' where id=3; -update noar ti set v0='XRIM2465' where id=3; -update noar tt set b0='CVCCQDG4QMF0MFXBO854C4LTJLM1L3OM' where id=3; -update noar ti set b0='CVCCQDG4QMF0MFXBO854C4LTJLM1L3OM' where id=3; -update noar tt set v0='GS40Z5Z0IDJRJEK90' where id=3; -update noar ti set v0='GS40Z5Z0IDJRJEK90' where id=3; -update noar tt set b1='PYAPTT7' where id=3; -update noar ti set b1='PYAPTT7' where id=3; -update noar tt set v0='8RCU1PJR8Q8CX2K5TN36FWLW' where id=3; -update noar ti set v0='8RCU1PJR8Q8CX2K5TN36FWLW' where id=3; -update noar tt set b2='2H8E9NLEL' where id=3; -update noar ti set b2='2H8E9NLEL' where id=3; -update noar tt set v0='QENNTFGI1WOVMXF' where id=4; -update noar ti set v0='QENNTFGI1WOVMXF' where id=4; -update noar tt set b0='1O81ZC97BBH52ICI5HUKSS2V2ELD40MR' where id=4; -update noar ti set b0='1O81ZC97BBH52ICI5HUKSS2V2ELD40MR' where id=4; -update noar tt set v0='JD1L53AOTZ30FISIYPSLE0' where id=4; -update noar ti set v0='JD1L53AOTZ30FISIYPSLE0' where id=4; -update noar tt set b1='1L' where id=4; -update noar ti set b1='1L' where id=4; -update noar tt set v0='B8FS583VHNZ5' where id=4; -update noar ti set v0='B8FS583VHNZ5' where id=4; -update noar tt set b2='RZMBJX3' where id=4; -update noar ti set b2='RZMBJX3' where id=4; -update noar tt set v0='Y7VCTRKWIJT3315LN3F' where id=5; -update noar ti set v0='Y7VCTRKWIJT3315LN3F' where id=5; -update noar tt set b0='H5QOHKC' where id=5; -update noar ti set b0='H5QOHKC' where id=5; -update noar tt set v0='73KA5B3O' where id=5; -update noar ti set v0='73KA5B3O' where id=5; -update noar tt set b1='W9WD8452BZXR9NIQ1EJQQW14OK50AUS' where id=5; -update noar ti set b1='W9WD8452BZXR9NIQ1EJQQW14OK50AUS' where id=5; -update noar tt set v0='SHAQWOLRFH4RM7' where id=5; -update noar ti set v0='SHAQWOLRFH4RM7' where id=5; -update noar tt set b2='XH5Y4N0OR3C4QI51PS1R7H6QC4N' where id=5; -update noar ti set b2='XH5Y4N0OR3C4QI51PS1R7H6QC4N' where id=5; -update noar tt set v0='ZOO4BDTW3AH9I' where id=6; -update noar ti set v0='ZOO4BDTW3AH9I' where id=6; -update noar tt set b0='AAMHEGJQ0ZYVUVAOZ9TNACDRE8WVW' where id=6; -update noar ti set b0='AAMHEGJQ0ZYVUVAOZ9TNACDRE8WVW' where id=6; -update noar tt set v0='R52T84V24YCJJW2WLRV2O5MOJI' where id=6; -update noar ti set v0='R52T84V24YCJJW2WLRV2O5MOJI' where id=6; -update noar tt set b1='LH935YUZ8PII2H7H2LH90FSI4BB' where id=6; -update noar ti set b1='LH935YUZ8PII2H7H2LH90FSI4BB' where id=6; -update noar tt set v0='C4AT' where id=6; -update noar ti set v0='C4AT' where id=6; -update noar tt set b2='P406SCU8XOATXCN8O' where id=6; -update noar ti set b2='P406SCU8XOATXCN8O' where id=6; -update noar tt set v0='5F5B1S0CP5GE' where id=7; -update noar ti set v0='5F5B1S0CP5GE' where id=7; -update noar tt set b0='9QIWS5JX4WFZVJNVH93NTZZ5' where id=7; -update noar ti set b0='9QIWS5JX4WFZVJNVH93NTZZ5' where id=7; -update noar tt set v0='NV' where id=7; -update noar ti set v0='NV' where id=7; -update noar tt set b1='U9M0YTYLZ9NEUWZ47YQ6I' where id=7; -update noar ti set b1='U9M0YTYLZ9NEUWZ47YQ6I' where id=7; -update noar tt set v0='8CC54CZQQRGPJFTYJ21QC' where id=7; -update noar ti set v0='8CC54CZQQRGPJFTYJ21QC' where id=7; -update noar tt set b2='BYQ2CWL86510' where id=7; -update noar ti set b2='BYQ2CWL86510' where id=7; -update noar tt set v0='OTL25OSNLWOZ26V2N' where id=8; -update noar ti set v0='OTL25OSNLWOZ26V2N' where id=8; -update noar tt set b0='P6' where id=8; -update noar ti set b0='P6' where id=8; -update noar tt set v0='JLQYI8EMZVNTRTRKW54' where id=8; -update noar ti set v0='JLQYI8EMZVNTRTRKW54' where id=8; -update noar tt set b1='C9X00BVX7MS6O3WAJS92' where id=8; -update noar ti set b1='C9X00BVX7MS6O3WAJS92' where id=8; -update noar tt set v0='BSPJHY26S' where id=8; -update noar ti set v0='BSPJHY26S' where id=8; -update noar tt set b2='PN5BZJYC' where id=8; -update noar ti set b2='PN5BZJYC' where id=8; -update noar tt set v0='4NOHVZ7UAZ4N' where id=9; -update noar ti set v0='4NOHVZ7UAZ4N' where id=9; -update noar tt set b0='IYDJFZXSF39' where id=9; -update noar ti set b0='IYDJFZXSF39' where id=9; -update noar tt set v0='U3' where id=9; -update noar ti set v0='U3' where id=9; -update noar tt set b1='BG' where id=9; -update noar ti set b1='BG' where id=9; -update noar tt set v0='3D16YEHZOQB7GJ8' where id=9; -update noar ti set v0='3D16YEHZOQB7GJ8' where id=9; -update noar tt set b2='ZH' where id=9; -update noar ti set b2='ZH' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 mediumblob not null, - b1 mediumblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='4RPAVR0FMHYMREJVAON4L' where id=1; -update noar ti set v0='4RPAVR0FMHYMREJVAON4L' where id=1; -update noar tt set b0='CA6BMZ8E840WMSGYYFE1DL' where id=1; -update noar ti set b0='CA6BMZ8E840WMSGYYFE1DL' where id=1; -update noar tt set v0='ZCJL1A' where id=1; -update noar ti set v0='ZCJL1A' where id=1; -update noar tt set b1='2DTOYOWARVXXYA3F32AHZWIFY69HM0K7' where id=1; -update noar ti set b1='2DTOYOWARVXXYA3F32AHZWIFY69HM0K7' where id=1; -update noar tt set v0='X0EYAAO99OEPK86VOQLQ' where id=1; -update noar ti set v0='X0EYAAO99OEPK86VOQLQ' where id=1; -update noar tt set b2='VTUFUV2H9GZZX8K2QC' where id=1; -update noar ti set b2='VTUFUV2H9GZZX8K2QC' where id=1; -update noar tt set v0='HLUVOQHA1U6T5U' where id=2; -update noar ti set v0='HLUVOQHA1U6T5U' where id=2; -update noar tt set b0='H16I610GH8PCWFR2SS' where id=2; -update noar ti set b0='H16I610GH8PCWFR2SS' where id=2; -update noar tt set v0='WIW02T3K3IQ6LUBFE19SYZ' where id=2; -update noar ti set v0='WIW02T3K3IQ6LUBFE19SYZ' where id=2; -update noar tt set b1='JZFZ8EHE2IB' where id=2; -update noar ti set b1='JZFZ8EHE2IB' where id=2; -update noar tt set v0='P45GOG51AQYX1NQ00L6Z' where id=2; -update noar ti set v0='P45GOG51AQYX1NQ00L6Z' where id=2; -update noar tt set b2='K15TS36JEE4U' where id=2; -update noar ti set b2='K15TS36JEE4U' where id=2; -update noar tt set v0='AGLV63JNR3L' where id=3; -update noar ti set v0='AGLV63JNR3L' where id=3; -update noar tt set b0='LIRFP5M34XV5TRKO8' where id=3; -update noar ti set b0='LIRFP5M34XV5TRKO8' where id=3; -update noar tt set v0='TKEZAKO805' where id=3; -update noar ti set v0='TKEZAKO805' where id=3; -update noar tt set b1='ZWZ3IOGQR8WKWU4N8CB8' where id=3; -update noar ti set b1='ZWZ3IOGQR8WKWU4N8CB8' where id=3; -update noar tt set v0='I' where id=3; -update noar ti set v0='I' where id=3; -update noar tt set b2='332F9WR7P12O8IFZGFCCSIG' where id=3; -update noar ti set b2='332F9WR7P12O8IFZGFCCSIG' where id=3; -update noar tt set v0='Z' where id=4; -update noar ti set v0='Z' where id=4; -update noar tt set b0='98T3KPG0G7J104QYZMOKZ32SG' where id=4; -update noar ti set b0='98T3KPG0G7J104QYZMOKZ32SG' where id=4; -update noar tt set v0='GM0UHIBYN6K01' where id=4; -update noar ti set v0='GM0UHIBYN6K01' where id=4; -update noar tt set b1='RIS' where id=4; -update noar ti set b1='RIS' where id=4; -update noar tt set v0='S1J3WN9KCZMSMPW5ZXJYU0' where id=4; -update noar ti set v0='S1J3WN9KCZMSMPW5ZXJYU0' where id=4; -update noar tt set b2='Z5TGVAJKCZ9YVI4MJMWHJJC6OSSCEYD' where id=4; -update noar ti set b2='Z5TGVAJKCZ9YVI4MJMWHJJC6OSSCEYD' where id=4; -update noar tt set v0='G' where id=5; -update noar ti set v0='G' where id=5; -update noar tt set b0='676HVKVA' where id=5; -update noar ti set b0='676HVKVA' where id=5; -update noar tt set v0='7U5VAOLKMZZ1746FHYTW3HMN49VH' where id=5; -update noar ti set v0='7U5VAOLKMZZ1746FHYTW3HMN49VH' where id=5; -update noar tt set b1='VSB4WD7QNZUYJAS' where id=5; -update noar ti set b1='VSB4WD7QNZUYJAS' where id=5; -update noar tt set v0='LZ8MOUWL' where id=5; -update noar ti set v0='LZ8MOUWL' where id=5; -update noar tt set b2='HLDOW0QZXNEDUNVK7FFO8W86' where id=5; -update noar ti set b2='HLDOW0QZXNEDUNVK7FFO8W86' where id=5; -update noar tt set v0='7IB26U9JDY' where id=6; -update noar ti set v0='7IB26U9JDY' where id=6; -update noar tt set b0='WCQV6FR88X29W37VO8GV56INCQM1' where id=6; -update noar ti set b0='WCQV6FR88X29W37VO8GV56INCQM1' where id=6; -update noar tt set v0='4AGNHTU' where id=6; -update noar ti set v0='4AGNHTU' where id=6; -update noar tt set b1='ZUH25CF0F2QHV3AX90QUMY3GMWRE1Y' where id=6; -update noar ti set b1='ZUH25CF0F2QHV3AX90QUMY3GMWRE1Y' where id=6; -update noar tt set v0='0QQGT2JM' where id=6; -update noar ti set v0='0QQGT2JM' where id=6; -update noar tt set b2='A5F3GWAS7K' where id=6; -update noar ti set b2='A5F3GWAS7K' where id=6; -update noar tt set v0='AAZZMTPO3Z2C987DD4XU5APZO6' where id=7; -update noar ti set v0='AAZZMTPO3Z2C987DD4XU5APZO6' where id=7; -update noar tt set b0='67W2Y3J2QBLZN7M0SGCQAUKTB9K5ERV' where id=7; -update noar ti set b0='67W2Y3J2QBLZN7M0SGCQAUKTB9K5ERV' where id=7; -update noar tt set v0='6BCMV8IBJSDV26562XEKW' where id=7; -update noar ti set v0='6BCMV8IBJSDV26562XEKW' where id=7; -update noar tt set b1='CQL6S08YU02R2V1I0K8WHR07' where id=7; -update noar ti set b1='CQL6S08YU02R2V1I0K8WHR07' where id=7; -update noar tt set v0='O9XY485TJ12VW5RZ54P0LA' where id=7; -update noar ti set v0='O9XY485TJ12VW5RZ54P0LA' where id=7; -update noar tt set b2='7PVMHNZZ0YFGIXGERGLNTGYGSZC1CAXM' where id=7; -update noar ti set b2='7PVMHNZZ0YFGIXGERGLNTGYGSZC1CAXM' where id=7; -update noar tt set v0='GLMK6ZVA9FX4J0D15OEAIFUJJUTG5V' where id=8; -update noar ti set v0='GLMK6ZVA9FX4J0D15OEAIFUJJUTG5V' where id=8; -update noar tt set b0='BEUI81HXKS' where id=8; -update noar ti set b0='BEUI81HXKS' where id=8; -update noar tt set v0='J6HMUJM0VIS1RZ4S096QUP85J' where id=8; -update noar ti set v0='J6HMUJM0VIS1RZ4S096QUP85J' where id=8; -update noar tt set b1='P' where id=8; -update noar ti set b1='P' where id=8; -update noar tt set v0='DPNH' where id=8; -update noar ti set v0='DPNH' where id=8; -update noar tt set b2='SI7TE1Z9RT2UHYFHGL05Q' where id=8; -update noar ti set b2='SI7TE1Z9RT2UHYFHGL05Q' where id=8; -update noar tt set v0='G3H9' where id=9; -update noar ti set v0='G3H9' where id=9; -update noar tt set b0='NDY1UHTP' where id=9; -update noar ti set b0='NDY1UHTP' where id=9; -update noar tt set v0='O50DUVWCA07' where id=9; -update noar ti set v0='O50DUVWCA07' where id=9; -update noar tt set b1='26A7JP4BNC0FNFPTUGTP0QQP9J904Q6I' where id=9; -update noar ti set b1='26A7JP4BNC0FNFPTUGTP0QQP9J904Q6I' where id=9; -update noar tt set v0='5QIF9DZU8HUQLX5P2MZM0' where id=9; -update noar ti set v0='5QIF9DZU8HUQLX5P2MZM0' where id=9; -update noar tt set b2='F1M0W35E5QTBQW' where id=9; -update noar ti set b2='F1M0W35E5QTBQW' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 mediumblob null, - b1 mediumblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='90UKDML184EOEE49SHC9EW748F873NOV' where id=1; -update noar ti set v0='90UKDML184EOEE49SHC9EW748F873NOV' where id=1; -update noar tt set b0='4JB1XZR6GGHO53ZR281F' where id=1; -update noar ti set b0='4JB1XZR6GGHO53ZR281F' where id=1; -update noar tt set v0='JWRNW' where id=1; -update noar ti set v0='JWRNW' where id=1; -update noar tt set b1='HWRYPANQ52XSUH7BE5MHU33VFAIANPR' where id=1; -update noar ti set b1='HWRYPANQ52XSUH7BE5MHU33VFAIANPR' where id=1; -update noar tt set v0='N29EM7SG' where id=1; -update noar ti set v0='N29EM7SG' where id=1; -update noar tt set b2='R4GPI9Q4SJYE3SAVZPQHM4CH8KP' where id=1; -update noar ti set b2='R4GPI9Q4SJYE3SAVZPQHM4CH8KP' where id=1; -update noar tt set v0='SWK1Z76KDXSPH85NFFKYZG3JF7W' where id=2; -update noar ti set v0='SWK1Z76KDXSPH85NFFKYZG3JF7W' where id=2; -update noar tt set b0='0XDBSJQ37C1B1' where id=2; -update noar ti set b0='0XDBSJQ37C1B1' where id=2; -update noar tt set v0='VB3JYG02RJ8E6IDSKDQ3RMGSJ' where id=2; -update noar ti set v0='VB3JYG02RJ8E6IDSKDQ3RMGSJ' where id=2; -update noar tt set b1='D2AJJ28OJAYTNHO6TV4Q9J1VC96EJVM3' where id=2; -update noar ti set b1='D2AJJ28OJAYTNHO6TV4Q9J1VC96EJVM3' where id=2; -update noar tt set v0='MX1S97WB11QS6GCW0KY353CSO84LMI' where id=2; -update noar ti set v0='MX1S97WB11QS6GCW0KY353CSO84LMI' where id=2; -update noar tt set b2='8Q53SEJ02L' where id=2; -update noar ti set b2='8Q53SEJ02L' where id=2; -update noar tt set v0='8ET40P6O8VS62ZDKGGB0BCF42A5M1' where id=3; -update noar ti set v0='8ET40P6O8VS62ZDKGGB0BCF42A5M1' where id=3; -update noar tt set b0='GSIU' where id=3; -update noar ti set b0='GSIU' where id=3; -update noar tt set v0='Y1' where id=3; -update noar ti set v0='Y1' where id=3; -update noar tt set b1='T68PIO' where id=3; -update noar ti set b1='T68PIO' where id=3; -update noar tt set v0='K6NEEP5R4ATOBJJ9IH990' where id=3; -update noar ti set v0='K6NEEP5R4ATOBJJ9IH990' where id=3; -update noar tt set b2='K5W7IM6LWGZZ3M0' where id=3; -update noar ti set b2='K5W7IM6LWGZZ3M0' where id=3; -update noar tt set v0='P49ZS' where id=4; -update noar ti set v0='P49ZS' where id=4; -update noar tt set b0='KDP' where id=4; -update noar ti set b0='KDP' where id=4; -update noar tt set v0='I6JSNI6VKA106P2DLH3U06FLTIC' where id=4; -update noar ti set v0='I6JSNI6VKA106P2DLH3U06FLTIC' where id=4; -update noar tt set b1='5E8QJL8K5P7UT4' where id=4; -update noar ti set b1='5E8QJL8K5P7UT4' where id=4; -update noar tt set v0='FNH8200Q2VSF4SLJXHACPRYCE59D' where id=4; -update noar ti set v0='FNH8200Q2VSF4SLJXHACPRYCE59D' where id=4; -update noar tt set b2='1' where id=4; -update noar ti set b2='1' where id=4; -update noar tt set v0='L9IM6QM82EJY0QM8DF1HN9L' where id=5; -update noar ti set v0='L9IM6QM82EJY0QM8DF1HN9L' where id=5; -update noar tt set b0='YSOKXCCVIFPNE503BJ' where id=5; -update noar ti set b0='YSOKXCCVIFPNE503BJ' where id=5; -update noar tt set v0='77RQMOAWWQ0WCCKOCIDF3RWR1UB' where id=5; -update noar ti set v0='77RQMOAWWQ0WCCKOCIDF3RWR1UB' where id=5; -update noar tt set b1='OYEDEKH3FKZFIRXGPD9C3M1AIOJS' where id=5; -update noar ti set b1='OYEDEKH3FKZFIRXGPD9C3M1AIOJS' where id=5; -update noar tt set v0='XHAE0O9UVJ6RGJ84XB6GP7SU4F6' where id=5; -update noar ti set v0='XHAE0O9UVJ6RGJ84XB6GP7SU4F6' where id=5; -update noar tt set b2='0A78JP672GGOL1EPEZ2FL3' where id=5; -update noar ti set b2='0A78JP672GGOL1EPEZ2FL3' where id=5; -update noar tt set v0='KD' where id=6; -update noar ti set v0='KD' where id=6; -update noar tt set b0='1QQWGJWNDGDP56Y8KP1Q16BVF7OMYE7J' where id=6; -update noar ti set b0='1QQWGJWNDGDP56Y8KP1Q16BVF7OMYE7J' where id=6; -update noar tt set v0='IWRP' where id=6; -update noar ti set v0='IWRP' where id=6; -update noar tt set b1='OFF94CSWJROSA21895' where id=6; -update noar ti set b1='OFF94CSWJROSA21895' where id=6; -update noar tt set v0='VSS3UFBK9WK1FJHECF7BY' where id=6; -update noar ti set v0='VSS3UFBK9WK1FJHECF7BY' where id=6; -update noar tt set b2='K09ZEN03ZESE0SNQUDT8M78N5HPI2D' where id=6; -update noar ti set b2='K09ZEN03ZESE0SNQUDT8M78N5HPI2D' where id=6; -update noar tt set v0='383CEKGJLRUZ5LNDRPXFI0OHDFUIC' where id=7; -update noar ti set v0='383CEKGJLRUZ5LNDRPXFI0OHDFUIC' where id=7; -update noar tt set b0='2WBF9WB999SJ6QLA9YLC90BNWY2J' where id=7; -update noar ti set b0='2WBF9WB999SJ6QLA9YLC90BNWY2J' where id=7; -update noar tt set v0='MNE5FOBSGFRYEDHVDH' where id=7; -update noar ti set v0='MNE5FOBSGFRYEDHVDH' where id=7; -update noar tt set b1='NWRSX' where id=7; -update noar ti set b1='NWRSX' where id=7; -update noar tt set v0='PEEX1XTC97SKEC5TPVEF8NDD8XYHOQK' where id=7; -update noar ti set v0='PEEX1XTC97SKEC5TPVEF8NDD8XYHOQK' where id=7; -update noar tt set b2='QQPRH7ZR32V' where id=7; -update noar ti set b2='QQPRH7ZR32V' where id=7; -update noar tt set v0='4I9UBAA9QYT' where id=8; -update noar ti set v0='4I9UBAA9QYT' where id=8; -update noar tt set b0='5W7' where id=8; -update noar ti set b0='5W7' where id=8; -update noar tt set v0='B9OY5AQA4Q' where id=8; -update noar ti set v0='B9OY5AQA4Q' where id=8; -update noar tt set b1='LJAAXNXP115K7KM1VP' where id=8; -update noar ti set b1='LJAAXNXP115K7KM1VP' where id=8; -update noar tt set v0='DV4RPJBFVTIDKBC7OBF' where id=8; -update noar ti set v0='DV4RPJBFVTIDKBC7OBF' where id=8; -update noar tt set b2='31VBHA0WYNFMM0ND1U3HA' where id=8; -update noar ti set b2='31VBHA0WYNFMM0ND1U3HA' where id=8; -update noar tt set v0='Q4WQ7401MZ24PGXAC3OHA5M95U24K5' where id=9; -update noar ti set v0='Q4WQ7401MZ24PGXAC3OHA5M95U24K5' where id=9; -update noar tt set b0='CCYD2J6VRZ8IJZ8LVQMUF0740B6' where id=9; -update noar ti set b0='CCYD2J6VRZ8IJZ8LVQMUF0740B6' where id=9; -update noar tt set v0='UC9C4E0GIFIGUYP' where id=9; -update noar ti set v0='UC9C4E0GIFIGUYP' where id=9; -update noar tt set b1='A3' where id=9; -update noar ti set b1='A3' where id=9; -update noar tt set v0='10P3FW1DBL1FZNSA8YDZ2AP6D3O' where id=9; -update noar ti set v0='10P3FW1DBL1FZNSA8YDZ2AP6D3O' where id=9; -update noar tt set b2='D1W4JN1FXC42K1VHTKH0E9189' where id=9; -update noar ti set b2='D1W4JN1FXC42K1VHTKH0E9189' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 mediumblob null, - b1 mediumblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='924DMLHUZX5E1Y19A7U7N00' where id=1; -update noar ti set v0='924DMLHUZX5E1Y19A7U7N00' where id=1; -update noar tt set b0='JP8DZFA' where id=1; -update noar ti set b0='JP8DZFA' where id=1; -update noar tt set v0='3FP51JAYA91UO2ZDE5O10FDOHYV34OL6' where id=1; -update noar ti set v0='3FP51JAYA91UO2ZDE5O10FDOHYV34OL6' where id=1; -update noar tt set b1='9VLRHCPDWO0C4K' where id=1; -update noar ti set b1='9VLRHCPDWO0C4K' where id=1; -update noar tt set v0='3MSN1U5RD7EP1DUM8C5SN1' where id=1; -update noar ti set v0='3MSN1U5RD7EP1DUM8C5SN1' where id=1; -update noar tt set b2='E9ZJ11IDFLF58P0EXXN1HLOL' where id=1; -update noar ti set b2='E9ZJ11IDFLF58P0EXXN1HLOL' where id=1; -update noar tt set v0='GBN11VA7O1ALPWFGF52YW' where id=2; -update noar ti set v0='GBN11VA7O1ALPWFGF52YW' where id=2; -update noar tt set b0='F1WQIPUA04D3SKKS21AG1X7Y' where id=2; -update noar ti set b0='F1WQIPUA04D3SKKS21AG1X7Y' where id=2; -update noar tt set v0='JLAQ0KAECQ44HIXDL' where id=2; -update noar ti set v0='JLAQ0KAECQ44HIXDL' where id=2; -update noar tt set b1='MOCI6K7R99AWNUUY41PR' where id=2; -update noar ti set b1='MOCI6K7R99AWNUUY41PR' where id=2; -update noar tt set v0='VAAT8W7W' where id=2; -update noar ti set v0='VAAT8W7W' where id=2; -update noar tt set b2='4JSEXQ6S' where id=2; -update noar ti set b2='4JSEXQ6S' where id=2; -update noar tt set v0='ZHBHDC' where id=3; -update noar ti set v0='ZHBHDC' where id=3; -update noar tt set b0='5TGZ8GVN8CL16U3X8' where id=3; -update noar ti set b0='5TGZ8GVN8CL16U3X8' where id=3; -update noar tt set v0='TU23OZIPA8UGBI' where id=3; -update noar ti set v0='TU23OZIPA8UGBI' where id=3; -update noar tt set b1='346JR8GAKLXM33M2K2JTXV8G4ATS' where id=3; -update noar ti set b1='346JR8GAKLXM33M2K2JTXV8G4ATS' where id=3; -update noar tt set v0='4C73OMK8H1DCENPECENX9A' where id=3; -update noar ti set v0='4C73OMK8H1DCENPECENX9A' where id=3; -update noar tt set b2='INLDUPR0LZDEP0RZTGQGN' where id=3; -update noar ti set b2='INLDUPR0LZDEP0RZTGQGN' where id=3; -update noar tt set v0='YT7A' where id=4; -update noar ti set v0='YT7A' where id=4; -update noar tt set b0='0FDN1G9PMPQZ3AR' where id=4; -update noar ti set b0='0FDN1G9PMPQZ3AR' where id=4; -update noar tt set v0='Y4NSKJ0ECCB1811XFX6V395Z6JOU7E' where id=4; -update noar ti set v0='Y4NSKJ0ECCB1811XFX6V395Z6JOU7E' where id=4; -update noar tt set b1='TS1KIWDC11NU' where id=4; -update noar ti set b1='TS1KIWDC11NU' where id=4; -update noar tt set v0='MSOK978ZD6RHCAA54PZK' where id=4; -update noar ti set v0='MSOK978ZD6RHCAA54PZK' where id=4; -update noar tt set b2='6ODSCOI97HKWV6XBS' where id=4; -update noar ti set b2='6ODSCOI97HKWV6XBS' where id=4; -update noar tt set v0='WOHVUAJC0J' where id=5; -update noar ti set v0='WOHVUAJC0J' where id=5; -update noar tt set b0='M8FU0I4A' where id=5; -update noar ti set b0='M8FU0I4A' where id=5; -update noar tt set v0='WTRCHAKQH0Q7' where id=5; -update noar ti set v0='WTRCHAKQH0Q7' where id=5; -update noar tt set b1='AJ2AOKL3WOO0O2MFUBQAKRRPFK0ZC' where id=5; -update noar ti set b1='AJ2AOKL3WOO0O2MFUBQAKRRPFK0ZC' where id=5; -update noar tt set v0='4B2HHDWGINKTA1DZ7SV' where id=5; -update noar ti set v0='4B2HHDWGINKTA1DZ7SV' where id=5; -update noar tt set b2='B6U2C5HAUQRG86JD' where id=5; -update noar ti set b2='B6U2C5HAUQRG86JD' where id=5; -update noar tt set v0='TSO5YX' where id=6; -update noar ti set v0='TSO5YX' where id=6; -update noar tt set b0='6Z' where id=6; -update noar ti set b0='6Z' where id=6; -update noar tt set v0='LJTSFVDF32CM9OQTRASPTZJ' where id=6; -update noar ti set v0='LJTSFVDF32CM9OQTRASPTZJ' where id=6; -update noar tt set b1='WOMS5DM' where id=6; -update noar ti set b1='WOMS5DM' where id=6; -update noar tt set v0='WC6TYFYM4' where id=6; -update noar ti set v0='WC6TYFYM4' where id=6; -update noar tt set b2='TVVGTIBZR' where id=6; -update noar ti set b2='TVVGTIBZR' where id=6; -update noar tt set v0='WGCS9V7O6OFGL2SAUTY7I' where id=7; -update noar ti set v0='WGCS9V7O6OFGL2SAUTY7I' where id=7; -update noar tt set b0='2' where id=7; -update noar ti set b0='2' where id=7; -update noar tt set v0='SA0N50XSZOX' where id=7; -update noar ti set v0='SA0N50XSZOX' where id=7; -update noar tt set b1='1361TR9CM8MLP9KE2UTD7EMT' where id=7; -update noar ti set b1='1361TR9CM8MLP9KE2UTD7EMT' where id=7; -update noar tt set v0='IN5N' where id=7; -update noar ti set v0='IN5N' where id=7; -update noar tt set b2='C65GYPRJZ7S4V8D53UF5ZJ' where id=7; -update noar ti set b2='C65GYPRJZ7S4V8D53UF5ZJ' where id=7; -update noar tt set v0='HBMGILPW70USWKO' where id=8; -update noar ti set v0='HBMGILPW70USWKO' where id=8; -update noar tt set b0='208RB6CBMXVB53KPANMN4EE' where id=8; -update noar ti set b0='208RB6CBMXVB53KPANMN4EE' where id=8; -update noar tt set v0='PM591F8MB5DCB9IBGFF0ONPZ7XEY0QW9' where id=8; -update noar ti set v0='PM591F8MB5DCB9IBGFF0ONPZ7XEY0QW9' where id=8; -update noar tt set b1='VOL66R8SNXATYYT6UZKS3RS' where id=8; -update noar ti set b1='VOL66R8SNXATYYT6UZKS3RS' where id=8; -update noar tt set v0='N6ZN051UYD077Y387' where id=8; -update noar ti set v0='N6ZN051UYD077Y387' where id=8; -update noar tt set b2='JPR6S6LDP719XB' where id=8; -update noar ti set b2='JPR6S6LDP719XB' where id=8; -update noar tt set v0='BWTN29E6C5CQGXS5LH7HFGRPXHLCRU' where id=9; -update noar ti set v0='BWTN29E6C5CQGXS5LH7HFGRPXHLCRU' where id=9; -update noar tt set b0='7G7ZVU4S9B3KWOZAONRU' where id=9; -update noar ti set b0='7G7ZVU4S9B3KWOZAONRU' where id=9; -update noar tt set v0='VO' where id=9; -update noar ti set v0='VO' where id=9; -update noar tt set b1='WIL0ZP5I27' where id=9; -update noar ti set b1='WIL0ZP5I27' where id=9; -update noar tt set v0='EZ4LVF8VSTKFNYNN8' where id=9; -update noar ti set v0='EZ4LVF8VSTKFNYNN8' where id=9; -update noar tt set b2='RKVSQY' where id=9; -update noar ti set b2='RKVSQY' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 mediumblob not null, - b1 mediumblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='RX' where id=1; -update noar ti set v0='RX' where id=1; -update noar tt set b0='2WCIMKBCKFK7PGH' where id=1; -update noar ti set b0='2WCIMKBCKFK7PGH' where id=1; -update noar tt set v0='706PK' where id=1; -update noar ti set v0='706PK' where id=1; -update noar tt set b1='6E' where id=1; -update noar ti set b1='6E' where id=1; -update noar tt set v0='1ORZ2X5I49' where id=1; -update noar ti set v0='1ORZ2X5I49' where id=1; -update noar tt set b2='T6VKX' where id=1; -update noar ti set b2='T6VKX' where id=1; -update noar tt set v0='03' where id=2; -update noar ti set v0='03' where id=2; -update noar tt set b0='I8E6KN6YTPV9XDN7VML4EXHTS4FROVW' where id=2; -update noar ti set b0='I8E6KN6YTPV9XDN7VML4EXHTS4FROVW' where id=2; -update noar tt set v0='UQ3SS' where id=2; -update noar ti set v0='UQ3SS' where id=2; -update noar tt set b1='5HNIC6VAZ3UUF4LUSHJ6GN1ERO9CBW2W' where id=2; -update noar ti set b1='5HNIC6VAZ3UUF4LUSHJ6GN1ERO9CBW2W' where id=2; -update noar tt set v0='78M7YTPAQAYTB64XCV00ZF' where id=2; -update noar ti set v0='78M7YTPAQAYTB64XCV00ZF' where id=2; -update noar tt set b2='16G' where id=2; -update noar ti set b2='16G' where id=2; -update noar tt set v0='0JIQT30HOJRN0TR8D7YWPA5WOR' where id=3; -update noar ti set v0='0JIQT30HOJRN0TR8D7YWPA5WOR' where id=3; -update noar tt set b0='WEL6DTZCHTYUL7KZHABDO' where id=3; -update noar ti set b0='WEL6DTZCHTYUL7KZHABDO' where id=3; -update noar tt set v0='MIKXSUXLEMVJ43RVGFB' where id=3; -update noar ti set v0='MIKXSUXLEMVJ43RVGFB' where id=3; -update noar tt set b1='0IHM2JLXMH2ZB' where id=3; -update noar ti set b1='0IHM2JLXMH2ZB' where id=3; -update noar tt set v0='UVOG2TS516' where id=3; -update noar ti set v0='UVOG2TS516' where id=3; -update noar tt set b2='IQSM8OM' where id=3; -update noar ti set b2='IQSM8OM' where id=3; -update noar tt set v0='YUSNVJJMY5BWXLZE86' where id=4; -update noar ti set v0='YUSNVJJMY5BWXLZE86' where id=4; -update noar tt set b0='X2' where id=4; -update noar ti set b0='X2' where id=4; -update noar tt set v0='7HB0QKR67NM' where id=4; -update noar ti set v0='7HB0QKR67NM' where id=4; -update noar tt set b1='XG' where id=4; -update noar ti set b1='XG' where id=4; -update noar tt set v0='Y0JQPUGEOPQI0EK7XNT1G3' where id=4; -update noar ti set v0='Y0JQPUGEOPQI0EK7XNT1G3' where id=4; -update noar tt set b2='HO749TUPMSMB7VLMDFER4' where id=4; -update noar ti set b2='HO749TUPMSMB7VLMDFER4' where id=4; -update noar tt set v0='7UUD0C' where id=5; -update noar ti set v0='7UUD0C' where id=5; -update noar tt set b0='JVY3ARWMV' where id=5; -update noar ti set b0='JVY3ARWMV' where id=5; -update noar tt set v0='7L' where id=5; -update noar ti set v0='7L' where id=5; -update noar tt set b1='QA29N6YZ8FH17Z2PNCBK6HR6' where id=5; -update noar ti set b1='QA29N6YZ8FH17Z2PNCBK6HR6' where id=5; -update noar tt set v0='DB46BRMV41GEHUHHBWF2DE0' where id=5; -update noar ti set v0='DB46BRMV41GEHUHHBWF2DE0' where id=5; -update noar tt set b2='JEUV1' where id=5; -update noar ti set b2='JEUV1' where id=5; -update noar tt set v0='R65BOTHCZ' where id=6; -update noar ti set v0='R65BOTHCZ' where id=6; -update noar tt set b0='CBJ' where id=6; -update noar ti set b0='CBJ' where id=6; -update noar tt set v0='77DZEK4T' where id=6; -update noar ti set v0='77DZEK4T' where id=6; -update noar tt set b1='LSRJKJGL36P9S57649G320Z' where id=6; -update noar ti set b1='LSRJKJGL36P9S57649G320Z' where id=6; -update noar tt set v0='9BMF4BKIOD7XVDUNI35PG2' where id=6; -update noar ti set v0='9BMF4BKIOD7XVDUNI35PG2' where id=6; -update noar tt set b2='JZBV6WWM2FVYN4E19J' where id=6; -update noar ti set b2='JZBV6WWM2FVYN4E19J' where id=6; -update noar tt set v0='F43ZUIDPHZ4AVK3' where id=7; -update noar ti set v0='F43ZUIDPHZ4AVK3' where id=7; -update noar tt set b0='N4FA8K89K3KJ4XISQ8V' where id=7; -update noar ti set b0='N4FA8K89K3KJ4XISQ8V' where id=7; -update noar tt set v0='Q1343X9C6MLSTV' where id=7; -update noar ti set v0='Q1343X9C6MLSTV' where id=7; -update noar tt set b1='UYRSGXXC' where id=7; -update noar ti set b1='UYRSGXXC' where id=7; -update noar tt set v0='5EI5LREEYV0QINGGU' where id=7; -update noar ti set v0='5EI5LREEYV0QINGGU' where id=7; -update noar tt set b2='2XHXN8BJ6LRT9IACSXQXGV70WLQXYQ' where id=7; -update noar ti set b2='2XHXN8BJ6LRT9IACSXQXGV70WLQXYQ' where id=7; -update noar tt set v0='FH1YCOSPJZF6R3RHK6Z5AI3' where id=8; -update noar ti set v0='FH1YCOSPJZF6R3RHK6Z5AI3' where id=8; -update noar tt set b0='2MCJUZ5V291MY' where id=8; -update noar ti set b0='2MCJUZ5V291MY' where id=8; -update noar tt set v0='9M3GJC0B' where id=8; -update noar ti set v0='9M3GJC0B' where id=8; -update noar tt set b1='BYHHYHHUNAEQUJM6W' where id=8; -update noar ti set b1='BYHHYHHUNAEQUJM6W' where id=8; -update noar tt set v0='B5N' where id=8; -update noar ti set v0='B5N' where id=8; -update noar tt set b2='RKU2PO8ZTD3O0ZO3LRDZ5TVZ26QA7G' where id=8; -update noar ti set b2='RKU2PO8ZTD3O0ZO3LRDZ5TVZ26QA7G' where id=8; -update noar tt set v0='OGBGY3ZREMY193Q9F' where id=9; -update noar ti set v0='OGBGY3ZREMY193Q9F' where id=9; -update noar tt set b0='CH0XSWBC2P' where id=9; -update noar ti set b0='CH0XSWBC2P' where id=9; -update noar tt set v0='KK3FY02GXPPSJE15SFKWL4UR' where id=9; -update noar ti set v0='KK3FY02GXPPSJE15SFKWL4UR' where id=9; -update noar tt set b1='AXCLAER11W651LFG' where id=9; -update noar ti set b1='AXCLAER11W651LFG' where id=9; -update noar tt set v0='JE3BLVVQNPLHWMM' where id=9; -update noar ti set v0='JE3BLVVQNPLHWMM' where id=9; -update noar tt set b2='ITIF' where id=9; -update noar ti set b2='ITIF' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 mediumblob not null, - b1 mediumblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='7' where id=1; -update noar ti set v0='7' where id=1; -update noar tt set b0='XB69E018X678RTWFNPBOH8W6Z' where id=1; -update noar ti set b0='XB69E018X678RTWFNPBOH8W6Z' where id=1; -update noar tt set v0='KKEDB67B7JJ1NIJCXCYV5EVQEVE' where id=1; -update noar ti set v0='KKEDB67B7JJ1NIJCXCYV5EVQEVE' where id=1; -update noar tt set b1='VLDXMXBKYLHWY' where id=1; -update noar ti set b1='VLDXMXBKYLHWY' where id=1; -update noar tt set v0='H7H7P0LLQ6BK5SXAS2FRSEIR77T1RLZ' where id=1; -update noar ti set v0='H7H7P0LLQ6BK5SXAS2FRSEIR77T1RLZ' where id=1; -update noar tt set b2='RXYF95Q' where id=1; -update noar ti set b2='RXYF95Q' where id=1; -update noar tt set v0='05' where id=2; -update noar ti set v0='05' where id=2; -update noar tt set b0='ZB1DFZM' where id=2; -update noar ti set b0='ZB1DFZM' where id=2; -update noar tt set v0='HKG3PDFVE5' where id=2; -update noar ti set v0='HKG3PDFVE5' where id=2; -update noar tt set b1='A7SMDWGJM7BXX99' where id=2; -update noar ti set b1='A7SMDWGJM7BXX99' where id=2; -update noar tt set v0='09KYTXMNP3B9JT' where id=2; -update noar ti set v0='09KYTXMNP3B9JT' where id=2; -update noar tt set b2='6I36X22EZW0A9B' where id=2; -update noar ti set b2='6I36X22EZW0A9B' where id=2; -update noar tt set v0='LS6AL05UQLTVSIHGW9U69GCB3A' where id=3; -update noar ti set v0='LS6AL05UQLTVSIHGW9U69GCB3A' where id=3; -update noar tt set b0='SUPSJAV22BA9ZSBDS8Q5KTZ0QR' where id=3; -update noar ti set b0='SUPSJAV22BA9ZSBDS8Q5KTZ0QR' where id=3; -update noar tt set v0='PSDFUNRWD3DE7T973DE' where id=3; -update noar ti set v0='PSDFUNRWD3DE7T973DE' where id=3; -update noar tt set b1='W7FL5IIMK1Z' where id=3; -update noar ti set b1='W7FL5IIMK1Z' where id=3; -update noar tt set v0='7HVRYZKHWX9S0L54UGF5AMS8DTMB' where id=3; -update noar ti set v0='7HVRYZKHWX9S0L54UGF5AMS8DTMB' where id=3; -update noar tt set b2='76WUV4E03OP8IC7XANZDRT1' where id=3; -update noar ti set b2='76WUV4E03OP8IC7XANZDRT1' where id=3; -update noar tt set v0='SSNGY' where id=4; -update noar ti set v0='SSNGY' where id=4; -update noar tt set b0='8O8GHEQCYIFTG02G17DPCNHYJ5ZYTWL' where id=4; -update noar ti set b0='8O8GHEQCYIFTG02G17DPCNHYJ5ZYTWL' where id=4; -update noar tt set v0='IVRBC79VODTM5ESR5' where id=4; -update noar ti set v0='IVRBC79VODTM5ESR5' where id=4; -update noar tt set b1='A5' where id=4; -update noar ti set b1='A5' where id=4; -update noar tt set v0='NZLWCKXZPYQBLG2315A9TCWPEK17' where id=4; -update noar ti set v0='NZLWCKXZPYQBLG2315A9TCWPEK17' where id=4; -update noar tt set b2='HGWVIJPSN0GFXZ' where id=4; -update noar ti set b2='HGWVIJPSN0GFXZ' where id=4; -update noar tt set v0='N27FQ1OHGWUYQSO2P36VHTG1N' where id=5; -update noar ti set v0='N27FQ1OHGWUYQSO2P36VHTG1N' where id=5; -update noar tt set b0='6EX94' where id=5; -update noar ti set b0='6EX94' where id=5; -update noar tt set v0='5QA780MPCBH12AG76Q6DCL' where id=5; -update noar ti set v0='5QA780MPCBH12AG76Q6DCL' where id=5; -update noar tt set b1='2XRCU69NFWZF7XDFNR' where id=5; -update noar ti set b1='2XRCU69NFWZF7XDFNR' where id=5; -update noar tt set v0='LRVEXWM4468MWAS8' where id=5; -update noar ti set v0='LRVEXWM4468MWAS8' where id=5; -update noar tt set b2='55M1LI6OOO0ZSD6OG0AYH4' where id=5; -update noar ti set b2='55M1LI6OOO0ZSD6OG0AYH4' where id=5; -update noar tt set v0='K9' where id=6; -update noar ti set v0='K9' where id=6; -update noar tt set b0='TS1VF5B9QKAP31QTG' where id=6; -update noar ti set b0='TS1VF5B9QKAP31QTG' where id=6; -update noar tt set v0='6FP81YSFF0BBMZGX8J0TDBJNIHS60XG' where id=6; -update noar ti set v0='6FP81YSFF0BBMZGX8J0TDBJNIHS60XG' where id=6; -update noar tt set b1='CMQ5JZKPNE8G1UZU30JQZWEW' where id=6; -update noar ti set b1='CMQ5JZKPNE8G1UZU30JQZWEW' where id=6; -update noar tt set v0='CYCBT' where id=6; -update noar ti set v0='CYCBT' where id=6; -update noar tt set b2='7NSLPYVX1TQNRH0WX4ACGSXATH7GKFAS' where id=6; -update noar ti set b2='7NSLPYVX1TQNRH0WX4ACGSXATH7GKFAS' where id=6; -update noar tt set v0='CBZF6X7INO4ZHUM2G1' where id=7; -update noar ti set v0='CBZF6X7INO4ZHUM2G1' where id=7; -update noar tt set b0='ZUE226DQC65JWJD9FIHRW40DAP2R' where id=7; -update noar ti set b0='ZUE226DQC65JWJD9FIHRW40DAP2R' where id=7; -update noar tt set v0='W18N5FE2S4OHWQ7X' where id=7; -update noar ti set v0='W18N5FE2S4OHWQ7X' where id=7; -update noar tt set b1='J45XTK0VD03QD23KTB9CFUX8QTOH' where id=7; -update noar ti set b1='J45XTK0VD03QD23KTB9CFUX8QTOH' where id=7; -update noar tt set v0='0CU' where id=7; -update noar ti set v0='0CU' where id=7; -update noar tt set b2='57OPJB9725UTU7H' where id=7; -update noar ti set b2='57OPJB9725UTU7H' where id=7; -update noar tt set v0='I9H685OG5WIGKTI3733' where id=8; -update noar ti set v0='I9H685OG5WIGKTI3733' where id=8; -update noar tt set b0='N0QLZ27FYU' where id=8; -update noar ti set b0='N0QLZ27FYU' where id=8; -update noar tt set v0='WIJRXFY' where id=8; -update noar ti set v0='WIJRXFY' where id=8; -update noar tt set b1='HLX2BV5FZ5IM047NC' where id=8; -update noar ti set b1='HLX2BV5FZ5IM047NC' where id=8; -update noar tt set v0='5' where id=8; -update noar ti set v0='5' where id=8; -update noar tt set b2='7RTVAR3LTZ2JOHFFQVK1Z' where id=8; -update noar ti set b2='7RTVAR3LTZ2JOHFFQVK1Z' where id=8; -update noar tt set v0='4XZ3ISOBVA9IEZI9ND' where id=9; -update noar ti set v0='4XZ3ISOBVA9IEZI9ND' where id=9; -update noar tt set b0='RZHK868VDX9XSQUN0X5IYKCHJR208PH' where id=9; -update noar ti set b0='RZHK868VDX9XSQUN0X5IYKCHJR208PH' where id=9; -update noar tt set v0='OF' where id=9; -update noar ti set v0='OF' where id=9; -update noar tt set b1='ZQEIMTX7MNTG' where id=9; -update noar ti set b1='ZQEIMTX7MNTG' where id=9; -update noar tt set v0='OL1ST5QPQ743W2EJMI4YR' where id=9; -update noar ti set v0='OL1ST5QPQ743W2EJMI4YR' where id=9; -update noar tt set b2='86J6JEVBKRD2VOC2REPQ4DAJ5' where id=9; -update noar ti set b2='86J6JEVBKRD2VOC2REPQ4DAJ5' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 mediumblob null, - b1 mediumblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='VG' where id=1; -update noar ti set v0='VG' where id=1; -update noar tt set b0='FJN3XA968HN9GHXM2APSKL' where id=1; -update noar ti set b0='FJN3XA968HN9GHXM2APSKL' where id=1; -update noar tt set v0='YDIZSA59WFXQC1OOSIWBSOEK3F1H1W' where id=1; -update noar ti set v0='YDIZSA59WFXQC1OOSIWBSOEK3F1H1W' where id=1; -update noar tt set b1='H1G3' where id=1; -update noar ti set b1='H1G3' where id=1; -update noar tt set v0='NBD14WRQR0XZP2SG7WNG5Q0Q209YTAHY' where id=1; -update noar ti set v0='NBD14WRQR0XZP2SG7WNG5Q0Q209YTAHY' where id=1; -update noar tt set b2='QJOFOW1SGBID86VK7296EWSZGG9J7X' where id=1; -update noar ti set b2='QJOFOW1SGBID86VK7296EWSZGG9J7X' where id=1; -update noar tt set v0='YCV4YB8X8MIYIYDSAPD' where id=2; -update noar ti set v0='YCV4YB8X8MIYIYDSAPD' where id=2; -update noar tt set b0='YE8DN4ZG5OO01GEMYI5CLXSTV' where id=2; -update noar ti set b0='YE8DN4ZG5OO01GEMYI5CLXSTV' where id=2; -update noar tt set v0='F5WDA5H09RI' where id=2; -update noar ti set v0='F5WDA5H09RI' where id=2; -update noar tt set b1='DVLYDGB9UAVRDQ160SF6' where id=2; -update noar ti set b1='DVLYDGB9UAVRDQ160SF6' where id=2; -update noar tt set v0='PZ1LPO8WDF04JS2' where id=2; -update noar ti set v0='PZ1LPO8WDF04JS2' where id=2; -update noar tt set b2='L9HGD8ZI4WKVC7T2' where id=2; -update noar ti set b2='L9HGD8ZI4WKVC7T2' where id=2; -update noar tt set v0='Y6E0C0SOYHI' where id=3; -update noar ti set v0='Y6E0C0SOYHI' where id=3; -update noar tt set b0='PNCSIUC' where id=3; -update noar ti set b0='PNCSIUC' where id=3; -update noar tt set v0='5QKUG4AENZJWRD' where id=3; -update noar ti set v0='5QKUG4AENZJWRD' where id=3; -update noar tt set b1='OSHU5P5' where id=3; -update noar ti set b1='OSHU5P5' where id=3; -update noar tt set v0='962Q7' where id=3; -update noar ti set v0='962Q7' where id=3; -update noar tt set b2='L1IT8QRRQT0BWQSQIHUH9Z8KM4U' where id=3; -update noar ti set b2='L1IT8QRRQT0BWQSQIHUH9Z8KM4U' where id=3; -update noar tt set v0='XK5GGNXZPPZ6KKPPRRM2YDNICKWZ3ZJ' where id=4; -update noar ti set v0='XK5GGNXZPPZ6KKPPRRM2YDNICKWZ3ZJ' where id=4; -update noar tt set b0='GURSCLP' where id=4; -update noar ti set b0='GURSCLP' where id=4; -update noar tt set v0='V2FN6E1TUKV9341PNOEEI' where id=4; -update noar ti set v0='V2FN6E1TUKV9341PNOEEI' where id=4; -update noar tt set b1='H5KLD5TAR3248MKYBEQ8OXNSBOPE' where id=4; -update noar ti set b1='H5KLD5TAR3248MKYBEQ8OXNSBOPE' where id=4; -update noar tt set v0='GL5QUK8KUS427DRNM0UIMSCF63M' where id=4; -update noar ti set v0='GL5QUK8KUS427DRNM0UIMSCF63M' where id=4; -update noar tt set b2='WVV2D762GU1TKFJD' where id=4; -update noar ti set b2='WVV2D762GU1TKFJD' where id=4; -update noar tt set v0='KN45QZJC4V72WP0XIC5PO8XFH6F' where id=5; -update noar ti set v0='KN45QZJC4V72WP0XIC5PO8XFH6F' where id=5; -update noar tt set b0='B327PUI3MYCEI8XP96' where id=5; -update noar ti set b0='B327PUI3MYCEI8XP96' where id=5; -update noar tt set v0='DA7DXNGKX7' where id=5; -update noar ti set v0='DA7DXNGKX7' where id=5; -update noar tt set b1='KB1G9K7XE09SF6LGY5I47' where id=5; -update noar ti set b1='KB1G9K7XE09SF6LGY5I47' where id=5; -update noar tt set v0='E570M6JXEA4JBZJFPHFT' where id=5; -update noar ti set v0='E570M6JXEA4JBZJFPHFT' where id=5; -update noar tt set b2='W3L' where id=5; -update noar ti set b2='W3L' where id=5; -update noar tt set v0='DSR1XNMKT0AZ' where id=6; -update noar ti set v0='DSR1XNMKT0AZ' where id=6; -update noar tt set b0='18X' where id=6; -update noar ti set b0='18X' where id=6; -update noar tt set v0='6RGPJ2DOCSP5AJWZR2FLHIZVGNW7' where id=6; -update noar ti set v0='6RGPJ2DOCSP5AJWZR2FLHIZVGNW7' where id=6; -update noar tt set b1='M6YYVTWBYDTQBG7CI0B5L9V7025WVLC' where id=6; -update noar ti set b1='M6YYVTWBYDTQBG7CI0B5L9V7025WVLC' where id=6; -update noar tt set v0='6W0Y' where id=6; -update noar ti set v0='6W0Y' where id=6; -update noar tt set b2='KIMUPFZ' where id=6; -update noar ti set b2='KIMUPFZ' where id=6; -update noar tt set v0='AH' where id=7; -update noar ti set v0='AH' where id=7; -update noar tt set b0='LC1C52G7BB7MO7PT44KJGZIKTU5K4LC' where id=7; -update noar ti set b0='LC1C52G7BB7MO7PT44KJGZIKTU5K4LC' where id=7; -update noar tt set v0='48NXU97IQYAGCJYQ3B' where id=7; -update noar ti set v0='48NXU97IQYAGCJYQ3B' where id=7; -update noar tt set b1='6U9M2184W42V515NLBDAOSKTWKK6XM' where id=7; -update noar ti set b1='6U9M2184W42V515NLBDAOSKTWKK6XM' where id=7; -update noar tt set v0='5ZR6VB9CEAWA4ZSD4J' where id=7; -update noar ti set v0='5ZR6VB9CEAWA4ZSD4J' where id=7; -update noar tt set b2='90MNRLNR4UU1F5RXKP6VWLIKB' where id=7; -update noar ti set b2='90MNRLNR4UU1F5RXKP6VWLIKB' where id=7; -update noar tt set v0='ARRFXWW4LY05R2U5P5' where id=8; -update noar ti set v0='ARRFXWW4LY05R2U5P5' where id=8; -update noar tt set b0='OEVDKE117AD88ZTXFAZ' where id=8; -update noar ti set b0='OEVDKE117AD88ZTXFAZ' where id=8; -update noar tt set v0='S0NR1IPLMU5Z07H0R21BRAU4I982IQB8' where id=8; -update noar ti set v0='S0NR1IPLMU5Z07H0R21BRAU4I982IQB8' where id=8; -update noar tt set b1='NOI76XV' where id=8; -update noar ti set b1='NOI76XV' where id=8; -update noar tt set v0='WXUDSLXIHL42WFJXTBZ0DD1Y' where id=8; -update noar ti set v0='WXUDSLXIHL42WFJXTBZ0DD1Y' where id=8; -update noar tt set b2='7PYL9NZFGE9OYKORR' where id=8; -update noar ti set b2='7PYL9NZFGE9OYKORR' where id=8; -update noar tt set v0='I7' where id=9; -update noar ti set v0='I7' where id=9; -update noar tt set b0='PF' where id=9; -update noar ti set b0='PF' where id=9; -update noar tt set v0='HYMII189T4C575LFE1M7BF8YNDI8' where id=9; -update noar ti set v0='HYMII189T4C575LFE1M7BF8YNDI8' where id=9; -update noar tt set b1='XUXJH2NAYAUW4N57Q60Y8ZNSUXFHLM6' where id=9; -update noar ti set b1='XUXJH2NAYAUW4N57Q60Y8ZNSUXFHLM6' where id=9; -update noar tt set v0='2T2RWCL0Y4' where id=9; -update noar ti set v0='2T2RWCL0Y4' where id=9; -update noar tt set b2='1OGXMOK8SAJ87DUVY2AUHSQ' where id=9; -update noar ti set b2='1OGXMOK8SAJ87DUVY2AUHSQ' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 mediumblob null, - b1 mediumblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='IW6Y0QH0HNFJKJM3' where id=1; -update noar ti set v0='IW6Y0QH0HNFJKJM3' where id=1; -update noar tt set b0='73OJM' where id=1; -update noar ti set b0='73OJM' where id=1; -update noar tt set v0='SJI5ZFVKS' where id=1; -update noar ti set v0='SJI5ZFVKS' where id=1; -update noar tt set b1='P6OAIR0BIQZB0JWRFE1DYZVX6S' where id=1; -update noar ti set b1='P6OAIR0BIQZB0JWRFE1DYZVX6S' where id=1; -update noar tt set v0='B9GXKK4BPJYDYWV2XWYU8XAKA25L' where id=1; -update noar ti set v0='B9GXKK4BPJYDYWV2XWYU8XAKA25L' where id=1; -update noar tt set b2='V7UN' where id=1; -update noar ti set b2='V7UN' where id=1; -update noar tt set v0='D6CQ2AYNS0P3E9335X1KCIQT5W' where id=2; -update noar ti set v0='D6CQ2AYNS0P3E9335X1KCIQT5W' where id=2; -update noar tt set b0='FUHPUJ8IP10UF1MZPDY9ELRZ3' where id=2; -update noar ti set b0='FUHPUJ8IP10UF1MZPDY9ELRZ3' where id=2; -update noar tt set v0='8WM21ZZLR1Y7Q' where id=2; -update noar ti set v0='8WM21ZZLR1Y7Q' where id=2; -update noar tt set b1='K5TAXYWANDG4M68P87O2RJMV04XH70' where id=2; -update noar ti set b1='K5TAXYWANDG4M68P87O2RJMV04XH70' where id=2; -update noar tt set v0='7OA0XU52P9HRE8PYRFKC6YW3CJDRP' where id=2; -update noar ti set v0='7OA0XU52P9HRE8PYRFKC6YW3CJDRP' where id=2; -update noar tt set b2='QI01UKL4J6EU0W7TL3B5Z6NFGQJT6V0' where id=2; -update noar ti set b2='QI01UKL4J6EU0W7TL3B5Z6NFGQJT6V0' where id=2; -update noar tt set v0='LK1XQODE31ALGYF3WBABAW6' where id=3; -update noar ti set v0='LK1XQODE31ALGYF3WBABAW6' where id=3; -update noar tt set b0='312HEGO0J4GC00YOCF' where id=3; -update noar ti set b0='312HEGO0J4GC00YOCF' where id=3; -update noar tt set v0='7PC' where id=3; -update noar ti set v0='7PC' where id=3; -update noar tt set b1='KF57DS0HMKIFTONTVMP0LUYVNOLF' where id=3; -update noar ti set b1='KF57DS0HMKIFTONTVMP0LUYVNOLF' where id=3; -update noar tt set v0='AKV6P2UY' where id=3; -update noar ti set v0='AKV6P2UY' where id=3; -update noar tt set b2='A9UFBJRKOH479FPRKTS3U4JNX' where id=3; -update noar ti set b2='A9UFBJRKOH479FPRKTS3U4JNX' where id=3; -update noar tt set v0='1OHUNAICUT8XP4O66UC' where id=4; -update noar ti set v0='1OHUNAICUT8XP4O66UC' where id=4; -update noar tt set b0='TZ9NLOPICFE' where id=4; -update noar ti set b0='TZ9NLOPICFE' where id=4; -update noar tt set v0='3VCJE3Q2BSI8ZUAVVL27APDAXBJ' where id=4; -update noar ti set v0='3VCJE3Q2BSI8ZUAVVL27APDAXBJ' where id=4; -update noar tt set b1='O9HU0YGH' where id=4; -update noar ti set b1='O9HU0YGH' where id=4; -update noar tt set v0='8J' where id=4; -update noar ti set v0='8J' where id=4; -update noar tt set b2='3OEEX9SCL3XSV2IMCV8WA804DTWNZXH' where id=4; -update noar ti set b2='3OEEX9SCL3XSV2IMCV8WA804DTWNZXH' where id=4; -update noar tt set v0='QYA938NA' where id=5; -update noar ti set v0='QYA938NA' where id=5; -update noar tt set b0='30XT95LYU4V06OTXDP4VNM' where id=5; -update noar ti set b0='30XT95LYU4V06OTXDP4VNM' where id=5; -update noar tt set v0='8S9K5D2LHGAVDR9LYVH' where id=5; -update noar ti set v0='8S9K5D2LHGAVDR9LYVH' where id=5; -update noar tt set b1='4QKM31OZ2K00XUAHX4G3VOW' where id=5; -update noar ti set b1='4QKM31OZ2K00XUAHX4G3VOW' where id=5; -update noar tt set v0='5C' where id=5; -update noar ti set v0='5C' where id=5; -update noar tt set b2='E5DNMQW0DNEV3XZG881N6' where id=5; -update noar ti set b2='E5DNMQW0DNEV3XZG881N6' where id=5; -update noar tt set v0='JKTGTP' where id=6; -update noar ti set v0='JKTGTP' where id=6; -update noar tt set b0='8YWA1' where id=6; -update noar ti set b0='8YWA1' where id=6; -update noar tt set v0='KE1WTCQWP1SRBSARCBP5HCBL6M' where id=6; -update noar ti set v0='KE1WTCQWP1SRBSARCBP5HCBL6M' where id=6; -update noar tt set b1='ZK5C01FTEOGRYX33PG5IQ9UF0F7PN2' where id=6; -update noar ti set b1='ZK5C01FTEOGRYX33PG5IQ9UF0F7PN2' where id=6; -update noar tt set v0='E5ZPX8R24XY78TPHAU3YQT26' where id=6; -update noar ti set v0='E5ZPX8R24XY78TPHAU3YQT26' where id=6; -update noar tt set b2='GE' where id=6; -update noar ti set b2='GE' where id=6; -update noar tt set v0='0XOJYDX8PEHRJYS57XM6B34T3IJPN' where id=7; -update noar ti set v0='0XOJYDX8PEHRJYS57XM6B34T3IJPN' where id=7; -update noar tt set b0='PJ6CMI7C' where id=7; -update noar ti set b0='PJ6CMI7C' where id=7; -update noar tt set v0='BW1FVWMHL4G5' where id=7; -update noar ti set v0='BW1FVWMHL4G5' where id=7; -update noar tt set b1='AM9PTG21' where id=7; -update noar ti set b1='AM9PTG21' where id=7; -update noar tt set v0='OJXW7YO' where id=7; -update noar ti set v0='OJXW7YO' where id=7; -update noar tt set b2='IYBAI4Z2A' where id=7; -update noar ti set b2='IYBAI4Z2A' where id=7; -update noar tt set v0='ADSI8OELHE0ZZEA3Z' where id=8; -update noar ti set v0='ADSI8OELHE0ZZEA3Z' where id=8; -update noar tt set b0='F9DRCG5NCCTY1NAYHKV6W' where id=8; -update noar ti set b0='F9DRCG5NCCTY1NAYHKV6W' where id=8; -update noar tt set v0='90DG6AA' where id=8; -update noar ti set v0='90DG6AA' where id=8; -update noar tt set b1='S4' where id=8; -update noar ti set b1='S4' where id=8; -update noar tt set v0='KRKT17T019AUOG6API6OI0G8' where id=8; -update noar ti set v0='KRKT17T019AUOG6API6OI0G8' where id=8; -update noar tt set b2='SKLLY80VXK' where id=8; -update noar ti set b2='SKLLY80VXK' where id=8; -update noar tt set v0='P9QLBX' where id=9; -update noar ti set v0='P9QLBX' where id=9; -update noar tt set b0='1R3CPMX0OWEWT' where id=9; -update noar ti set b0='1R3CPMX0OWEWT' where id=9; -update noar tt set v0='IF0RM8UN9F6W09SC6B' where id=9; -update noar ti set v0='IF0RM8UN9F6W09SC6B' where id=9; -update noar tt set b1='ZKF5F092H183FKWWS9TP' where id=9; -update noar ti set b1='ZKF5F092H183FKWWS9TP' where id=9; -update noar tt set v0='MZR4BSRH7WV8DQ0' where id=9; -update noar ti set v0='MZR4BSRH7WV8DQ0' where id=9; -update noar tt set b2='FEDLU4D2MJ' where id=9; -update noar ti set b2='FEDLU4D2MJ' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 mediumblob not null, - b1 mediumblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='L3786MH907' where id=1; -update noar ti set v0='L3786MH907' where id=1; -update noar tt set b0='ELM3TRETS5A3WB51' where id=1; -update noar ti set b0='ELM3TRETS5A3WB51' where id=1; -update noar tt set v0='FLL1KAJZCYTD8OXO4V36H' where id=1; -update noar ti set v0='FLL1KAJZCYTD8OXO4V36H' where id=1; -update noar tt set b1='ITRUL57EP0F1YKXG2' where id=1; -update noar ti set b1='ITRUL57EP0F1YKXG2' where id=1; -update noar tt set v0='JTKPMPBR892ATZPJDO4OMWFT5W73' where id=1; -update noar ti set v0='JTKPMPBR892ATZPJDO4OMWFT5W73' where id=1; -update noar tt set b2='ZMJB82G8NDDHADDKU0LXQ2G8LJ5FDLYD' where id=1; -update noar ti set b2='ZMJB82G8NDDHADDKU0LXQ2G8LJ5FDLYD' where id=1; -update noar tt set v0='O' where id=2; -update noar ti set v0='O' where id=2; -update noar tt set b0='HCC6S' where id=2; -update noar ti set b0='HCC6S' where id=2; -update noar tt set v0='68GFRE9UBAUQRD916IKNDTZJMSSWO' where id=2; -update noar ti set v0='68GFRE9UBAUQRD916IKNDTZJMSSWO' where id=2; -update noar tt set b1='JHOL81FW3UIBEP97I78BZJ8WCAPI2P' where id=2; -update noar ti set b1='JHOL81FW3UIBEP97I78BZJ8WCAPI2P' where id=2; -update noar tt set v0='1JOA0R7LQJWD16TA' where id=2; -update noar ti set v0='1JOA0R7LQJWD16TA' where id=2; -update noar tt set b2='L' where id=2; -update noar ti set b2='L' where id=2; -update noar tt set v0='CEO0C0ONVN7Y4R2H07C4WKOZ' where id=3; -update noar ti set v0='CEO0C0ONVN7Y4R2H07C4WKOZ' where id=3; -update noar tt set b0='L6ZFC55BTWBSSDI2ZJ7LPJ1NO' where id=3; -update noar ti set b0='L6ZFC55BTWBSSDI2ZJ7LPJ1NO' where id=3; -update noar tt set v0='384WA1Z' where id=3; -update noar ti set v0='384WA1Z' where id=3; -update noar tt set b1='D9DOWXS4GXUX' where id=3; -update noar ti set b1='D9DOWXS4GXUX' where id=3; -update noar tt set v0='FGDTBLBH01EFII9OHGY' where id=3; -update noar ti set v0='FGDTBLBH01EFII9OHGY' where id=3; -update noar tt set b2='YZKYP33HYHXCOD' where id=3; -update noar ti set b2='YZKYP33HYHXCOD' where id=3; -update noar tt set v0='CU25C0' where id=4; -update noar ti set v0='CU25C0' where id=4; -update noar tt set b0='S7W3' where id=4; -update noar ti set b0='S7W3' where id=4; -update noar tt set v0='D' where id=4; -update noar ti set v0='D' where id=4; -update noar tt set b1='TYXENYDW6AVV7D7J' where id=4; -update noar ti set b1='TYXENYDW6AVV7D7J' where id=4; -update noar tt set v0='1HXHMOE25536SM7ML5H90795M3R' where id=4; -update noar ti set v0='1HXHMOE25536SM7ML5H90795M3R' where id=4; -update noar tt set b2='CLC0UPD' where id=4; -update noar ti set b2='CLC0UPD' where id=4; -update noar tt set v0='3X3I49A' where id=5; -update noar ti set v0='3X3I49A' where id=5; -update noar tt set b0='182KDM1W7YFBMFX9OMQW5PVS44IJP' where id=5; -update noar ti set b0='182KDM1W7YFBMFX9OMQW5PVS44IJP' where id=5; -update noar tt set v0='ZRIFAY71HPNDJGEFCQ2R4B9K' where id=5; -update noar ti set v0='ZRIFAY71HPNDJGEFCQ2R4B9K' where id=5; -update noar tt set b1='CJ' where id=5; -update noar ti set b1='CJ' where id=5; -update noar tt set v0='6GXY89738LQVIPB' where id=5; -update noar ti set v0='6GXY89738LQVIPB' where id=5; -update noar tt set b2='YT8TARP0SO3I9PRJS5OM4T7' where id=5; -update noar ti set b2='YT8TARP0SO3I9PRJS5OM4T7' where id=5; -update noar tt set v0='GEVUT9EVTCUHZI5BFJGWA' where id=6; -update noar ti set v0='GEVUT9EVTCUHZI5BFJGWA' where id=6; -update noar tt set b0='ZQ8S0KDGFKNT0ZNOJF' where id=6; -update noar ti set b0='ZQ8S0KDGFKNT0ZNOJF' where id=6; -update noar tt set v0='4P2ZDD9HXE1AECQB58G9HCW1KPKDMR' where id=6; -update noar ti set v0='4P2ZDD9HXE1AECQB58G9HCW1KPKDMR' where id=6; -update noar tt set b1='WBCZFSOJRG' where id=6; -update noar ti set b1='WBCZFSOJRG' where id=6; -update noar tt set v0='2ZZ' where id=6; -update noar ti set v0='2ZZ' where id=6; -update noar tt set b2='XSWQTGNK0SWMOOIBYQA1BJ' where id=6; -update noar ti set b2='XSWQTGNK0SWMOOIBYQA1BJ' where id=6; -update noar tt set v0='LRBQWRQHDY' where id=7; -update noar ti set v0='LRBQWRQHDY' where id=7; -update noar tt set b0='EBK6PH6RTVLGLTXFEMI' where id=7; -update noar ti set b0='EBK6PH6RTVLGLTXFEMI' where id=7; -update noar tt set v0='XPP5MOW6BHOK6' where id=7; -update noar ti set v0='XPP5MOW6BHOK6' where id=7; -update noar tt set b1='ZERGFQPI8QLUZ4QT3OI' where id=7; -update noar ti set b1='ZERGFQPI8QLUZ4QT3OI' where id=7; -update noar tt set v0='HHTTJCFXF9LRKK427LR15CHNFIGG4ST9' where id=7; -update noar ti set v0='HHTTJCFXF9LRKK427LR15CHNFIGG4ST9' where id=7; -update noar tt set b2='BX7I' where id=7; -update noar ti set b2='BX7I' where id=7; -update noar tt set v0='3KD' where id=8; -update noar ti set v0='3KD' where id=8; -update noar tt set b0='NE' where id=8; -update noar ti set b0='NE' where id=8; -update noar tt set v0='V2XUXEHY0RDT' where id=8; -update noar ti set v0='V2XUXEHY0RDT' where id=8; -update noar tt set b1='45AU94G24WIBAOZ094' where id=8; -update noar ti set b1='45AU94G24WIBAOZ094' where id=8; -update noar tt set v0='7S2NUS' where id=8; -update noar ti set v0='7S2NUS' where id=8; -update noar tt set b2='L0PUWZ6D7MQYI8C' where id=8; -update noar ti set b2='L0PUWZ6D7MQYI8C' where id=8; -update noar tt set v0='JKBZIFRJVD' where id=9; -update noar ti set v0='JKBZIFRJVD' where id=9; -update noar tt set b0='XCO3MNFHZV9FY1B88T2TG9M24' where id=9; -update noar ti set b0='XCO3MNFHZV9FY1B88T2TG9M24' where id=9; -update noar tt set v0='CPP0L5Z4DUABBHQ3BLH062D8U09VL7VY' where id=9; -update noar ti set v0='CPP0L5Z4DUABBHQ3BLH062D8U09VL7VY' where id=9; -update noar tt set b1='ZFQOVAF0JCJCX258O3T9OJM5KLOG4' where id=9; -update noar ti set b1='ZFQOVAF0JCJCX258O3T9OJM5KLOG4' where id=9; -update noar tt set v0='A7YP9BPP8G4B7CSSBWLB5CSS3JW' where id=9; -update noar ti set v0='A7YP9BPP8G4B7CSSBWLB5CSS3JW' where id=9; -update noar tt set b2='2UI7LHK6M7DMW' where id=9; -update noar ti set b2='2UI7LHK6M7DMW' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 mediumblob not null, - b1 mediumblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='7UI8H45MAL' where id=1; -update noar ti set v0='7UI8H45MAL' where id=1; -update noar tt set b0='G4PAQOVFVMEL4ML0YPJACR' where id=1; -update noar ti set b0='G4PAQOVFVMEL4ML0YPJACR' where id=1; -update noar tt set v0='QZMRKBIXXHBUSTIMAB4R' where id=1; -update noar ti set v0='QZMRKBIXXHBUSTIMAB4R' where id=1; -update noar tt set b1='2Q3YFFK9IO9PUM3OZW7UPQFTFAO' where id=1; -update noar ti set b1='2Q3YFFK9IO9PUM3OZW7UPQFTFAO' where id=1; -update noar tt set v0='O3WKCFM97Q2KUR3KW' where id=1; -update noar ti set v0='O3WKCFM97Q2KUR3KW' where id=1; -update noar tt set b2='NJEQ588SH2' where id=1; -update noar ti set b2='NJEQ588SH2' where id=1; -update noar tt set v0='U8' where id=2; -update noar ti set v0='U8' where id=2; -update noar tt set b0='P' where id=2; -update noar ti set b0='P' where id=2; -update noar tt set v0='0FV4X6UJUEC8M2O7K97MO5IWZAEHJ5RP' where id=2; -update noar ti set v0='0FV4X6UJUEC8M2O7K97MO5IWZAEHJ5RP' where id=2; -update noar tt set b1='EE3JI8AB0XMPRHL2C379KINBNKK42' where id=2; -update noar ti set b1='EE3JI8AB0XMPRHL2C379KINBNKK42' where id=2; -update noar tt set v0='PE1I1GLH' where id=2; -update noar ti set v0='PE1I1GLH' where id=2; -update noar tt set b2='C7FLW6QEWSG3OZLR4AQCFH5' where id=2; -update noar ti set b2='C7FLW6QEWSG3OZLR4AQCFH5' where id=2; -update noar tt set v0='5JLCCYX5A8A9VMV5UOJSYC1CHZY91JJ' where id=3; -update noar ti set v0='5JLCCYX5A8A9VMV5UOJSYC1CHZY91JJ' where id=3; -update noar tt set b0='XA90N1LVOBLSB4QK8V8B3B0KYC' where id=3; -update noar ti set b0='XA90N1LVOBLSB4QK8V8B3B0KYC' where id=3; -update noar tt set v0='YN90JBF8ILLG0B9ZN8OUM9YK9C' where id=3; -update noar ti set v0='YN90JBF8ILLG0B9ZN8OUM9YK9C' where id=3; -update noar tt set b1='4CESH6YP0Q1XYPIRDIF5CT' where id=3; -update noar ti set b1='4CESH6YP0Q1XYPIRDIF5CT' where id=3; -update noar tt set v0='JU' where id=3; -update noar ti set v0='JU' where id=3; -update noar tt set b2='KD2Q2RA8P61VD0' where id=3; -update noar ti set b2='KD2Q2RA8P61VD0' where id=3; -update noar tt set v0='5I6TPP3QDZ073' where id=4; -update noar ti set v0='5I6TPP3QDZ073' where id=4; -update noar tt set b0='YHQV33RT' where id=4; -update noar ti set b0='YHQV33RT' where id=4; -update noar tt set v0='SBHQEHGXWKEP27SJ9YHEABY2Z7B4LD' where id=4; -update noar ti set v0='SBHQEHGXWKEP27SJ9YHEABY2Z7B4LD' where id=4; -update noar tt set b1='GXNDFSV704RLWWNMX' where id=4; -update noar ti set b1='GXNDFSV704RLWWNMX' where id=4; -update noar tt set v0='QRD3A8RF2WMVE6OGFSPVV3' where id=4; -update noar ti set v0='QRD3A8RF2WMVE6OGFSPVV3' where id=4; -update noar tt set b2='OU4BEL6503YEHP9ZXHGSFFM2R' where id=4; -update noar ti set b2='OU4BEL6503YEHP9ZXHGSFFM2R' where id=4; -update noar tt set v0='DGR4JEFCGTYBINPY6YER1FU4CNXH4R28' where id=5; -update noar ti set v0='DGR4JEFCGTYBINPY6YER1FU4CNXH4R28' where id=5; -update noar tt set b0='65STS' where id=5; -update noar ti set b0='65STS' where id=5; -update noar tt set v0='OI12XC' where id=5; -update noar ti set v0='OI12XC' where id=5; -update noar tt set b1='BJ0GGPQ1YR4RLM2WYH3MM' where id=5; -update noar ti set b1='BJ0GGPQ1YR4RLM2WYH3MM' where id=5; -update noar tt set v0='J15HK0J' where id=5; -update noar ti set v0='J15HK0J' where id=5; -update noar tt set b2='X444IUUYL20KVSFNF59KSJ7' where id=5; -update noar ti set b2='X444IUUYL20KVSFNF59KSJ7' where id=5; -update noar tt set v0='0FU57N2HAZ9PBBH95Y' where id=6; -update noar ti set v0='0FU57N2HAZ9PBBH95Y' where id=6; -update noar tt set b0='BSURJ' where id=6; -update noar ti set b0='BSURJ' where id=6; -update noar tt set v0='UXCOXLDA228F57LOXRJROIMPD0T' where id=6; -update noar ti set v0='UXCOXLDA228F57LOXRJROIMPD0T' where id=6; -update noar tt set b1='YAO7U2CE509TYQ6' where id=6; -update noar ti set b1='YAO7U2CE509TYQ6' where id=6; -update noar tt set v0='E20M43XH587DZP50RJ3RW9X8ZR' where id=6; -update noar ti set v0='E20M43XH587DZP50RJ3RW9X8ZR' where id=6; -update noar tt set b2='FVTWUXIDKTR' where id=6; -update noar ti set b2='FVTWUXIDKTR' where id=6; -update noar tt set v0='E8IGQ5MJNTOAL3K9W' where id=7; -update noar ti set v0='E8IGQ5MJNTOAL3K9W' where id=7; -update noar tt set b0='79OY0PO2IDUFV1A1ONIYZ' where id=7; -update noar ti set b0='79OY0PO2IDUFV1A1ONIYZ' where id=7; -update noar tt set v0='L56LU4N9HT6Y8ZSADTELH' where id=7; -update noar ti set v0='L56LU4N9HT6Y8ZSADTELH' where id=7; -update noar tt set b1='5GR3SWUP7FAGZ19' where id=7; -update noar ti set b1='5GR3SWUP7FAGZ19' where id=7; -update noar tt set v0='ZD6O7257J4YV9I2WXZJBI9UN5RR4MLDA' where id=7; -update noar ti set v0='ZD6O7257J4YV9I2WXZJBI9UN5RR4MLDA' where id=7; -update noar tt set b2='TL4D0' where id=7; -update noar ti set b2='TL4D0' where id=7; -update noar tt set v0='LM1XXEO9G4K3X' where id=8; -update noar ti set v0='LM1XXEO9G4K3X' where id=8; -update noar tt set b0='SOQCLCWYKOR816LKAXUF' where id=8; -update noar ti set b0='SOQCLCWYKOR816LKAXUF' where id=8; -update noar tt set v0='UQF34P681HP8U' where id=8; -update noar ti set v0='UQF34P681HP8U' where id=8; -update noar tt set b1='R85VS7GPW43Q5UA' where id=8; -update noar ti set b1='R85VS7GPW43Q5UA' where id=8; -update noar tt set v0='Y3KUWQSIKOB03N2ZP' where id=8; -update noar ti set v0='Y3KUWQSIKOB03N2ZP' where id=8; -update noar tt set b2='5EUYI' where id=8; -update noar ti set b2='5EUYI' where id=8; -update noar tt set v0='JSMVXK14H76UFBI6EYB' where id=9; -update noar ti set v0='JSMVXK14H76UFBI6EYB' where id=9; -update noar tt set b0='K4WMX2VEUG6ABQRHYPOB8JAB14CVTGTI' where id=9; -update noar ti set b0='K4WMX2VEUG6ABQRHYPOB8JAB14CVTGTI' where id=9; -update noar tt set v0='M12IP' where id=9; -update noar ti set v0='M12IP' where id=9; -update noar tt set b1='69KI7EBRU07OBB4' where id=9; -update noar ti set b1='69KI7EBRU07OBB4' where id=9; -update noar tt set v0='MSLVNY1P' where id=9; -update noar ti set v0='MSLVNY1P' where id=9; -update noar tt set b2='DF0G6147Q' where id=9; -update noar ti set b2='DF0G6147Q' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 mediumblob null, - b1 longblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='JP5IX5RT' where id=1; -update noar ti set v0='JP5IX5RT' where id=1; -update noar tt set b0='GL2KM353S3JM' where id=1; -update noar ti set b0='GL2KM353S3JM' where id=1; -update noar tt set v0='LP6V6829A7DQBCN54FVDOTUU4FOT' where id=1; -update noar ti set v0='LP6V6829A7DQBCN54FVDOTUU4FOT' where id=1; -update noar tt set b1='2C9CTSB848Y28Q' where id=1; -update noar ti set b1='2C9CTSB848Y28Q' where id=1; -update noar tt set v0='MBWR' where id=1; -update noar ti set v0='MBWR' where id=1; -update noar tt set b2='2H55I6A96NKWRLOEWPJDD3D1DWQZ245A' where id=1; -update noar ti set b2='2H55I6A96NKWRLOEWPJDD3D1DWQZ245A' where id=1; -update noar tt set v0='LDLHJHS5CHSHJRK1RX6X6FO18RNH9' where id=2; -update noar ti set v0='LDLHJHS5CHSHJRK1RX6X6FO18RNH9' where id=2; -update noar tt set b0='FHQJ9GG3XU3' where id=2; -update noar ti set b0='FHQJ9GG3XU3' where id=2; -update noar tt set v0='VJH8RULNDDF8410M63CM' where id=2; -update noar ti set v0='VJH8RULNDDF8410M63CM' where id=2; -update noar tt set b1='J000R67' where id=2; -update noar ti set b1='J000R67' where id=2; -update noar tt set v0='1LDUF7QE0G3NWKPXEE7M1VETTFD2HQG3' where id=2; -update noar ti set v0='1LDUF7QE0G3NWKPXEE7M1VETTFD2HQG3' where id=2; -update noar tt set b2='QCQBC5V2' where id=2; -update noar ti set b2='QCQBC5V2' where id=2; -update noar tt set v0='Z4NKOQ93XNOO' where id=3; -update noar ti set v0='Z4NKOQ93XNOO' where id=3; -update noar tt set b0='XRO0KWQG4MKMIH7K18RJSPO5' where id=3; -update noar ti set b0='XRO0KWQG4MKMIH7K18RJSPO5' where id=3; -update noar tt set v0='88ASAHP5T69QZDZ7NUMI2S1BAC5' where id=3; -update noar ti set v0='88ASAHP5T69QZDZ7NUMI2S1BAC5' where id=3; -update noar tt set b1='EG0ANJ' where id=3; -update noar ti set b1='EG0ANJ' where id=3; -update noar tt set v0='1Q3DW' where id=3; -update noar ti set v0='1Q3DW' where id=3; -update noar tt set b2='BOEAQ55' where id=3; -update noar ti set b2='BOEAQ55' where id=3; -update noar tt set v0='6Z9D80JJP6PQ3YID3SMT6FN' where id=4; -update noar ti set v0='6Z9D80JJP6PQ3YID3SMT6FN' where id=4; -update noar tt set b0='T4KF02MKP9B9HG78WWSY' where id=4; -update noar ti set b0='T4KF02MKP9B9HG78WWSY' where id=4; -update noar tt set v0='QLETB3KLFX3YXUQ435YZEV08P' where id=4; -update noar ti set v0='QLETB3KLFX3YXUQ435YZEV08P' where id=4; -update noar tt set b1='FQVJ' where id=4; -update noar ti set b1='FQVJ' where id=4; -update noar tt set v0='V50EOPCIDXB173KR1Y4B04' where id=4; -update noar ti set v0='V50EOPCIDXB173KR1Y4B04' where id=4; -update noar tt set b2='UWK6GIHO' where id=4; -update noar ti set b2='UWK6GIHO' where id=4; -update noar tt set v0='8F2YGNC2VT09C205IQHZ' where id=5; -update noar ti set v0='8F2YGNC2VT09C205IQHZ' where id=5; -update noar tt set b0='14UU385CBB5J5WNHCKFW9T57' where id=5; -update noar ti set b0='14UU385CBB5J5WNHCKFW9T57' where id=5; -update noar tt set v0='5G2G4JFJ5' where id=5; -update noar ti set v0='5G2G4JFJ5' where id=5; -update noar tt set b1='WKKGXC1BSCKEFLFM798' where id=5; -update noar ti set b1='WKKGXC1BSCKEFLFM798' where id=5; -update noar tt set v0='A6U4YOJGG502FDQWKDW79UR6ACUO9' where id=5; -update noar ti set v0='A6U4YOJGG502FDQWKDW79UR6ACUO9' where id=5; -update noar tt set b2='0ME' where id=5; -update noar ti set b2='0ME' where id=5; -update noar tt set v0='G8VSPSLFMMP' where id=6; -update noar ti set v0='G8VSPSLFMMP' where id=6; -update noar tt set b0='K4VSH7AYZW2LZD5IOUWLA' where id=6; -update noar ti set b0='K4VSH7AYZW2LZD5IOUWLA' where id=6; -update noar tt set v0='I' where id=6; -update noar ti set v0='I' where id=6; -update noar tt set b1='4ET' where id=6; -update noar ti set b1='4ET' where id=6; -update noar tt set v0='D9X3P0F' where id=6; -update noar ti set v0='D9X3P0F' where id=6; -update noar tt set b2='2DONXTISK6Q9JMZQJEK' where id=6; -update noar ti set b2='2DONXTISK6Q9JMZQJEK' where id=6; -update noar tt set v0='WMOOA1T17C' where id=7; -update noar ti set v0='WMOOA1T17C' where id=7; -update noar tt set b0='RJ7VQM2XHRH5GGSZ14X' where id=7; -update noar ti set b0='RJ7VQM2XHRH5GGSZ14X' where id=7; -update noar tt set v0='LUP2EGMAQN7N6L10DWPW9U1F1C30LHTX' where id=7; -update noar ti set v0='LUP2EGMAQN7N6L10DWPW9U1F1C30LHTX' where id=7; -update noar tt set b1='BQ761IADLQ' where id=7; -update noar ti set b1='BQ761IADLQ' where id=7; -update noar tt set v0='77V5O02406SVD6WZNVD3BAU7Q5TKJWI' where id=7; -update noar ti set v0='77V5O02406SVD6WZNVD3BAU7Q5TKJWI' where id=7; -update noar tt set b2='FOZ98Q8MV24SMIBFJXKHPT6OBDG6M' where id=7; -update noar ti set b2='FOZ98Q8MV24SMIBFJXKHPT6OBDG6M' where id=7; -update noar tt set v0='51BD5QBO1UMR66KETIJUNZJ18B6' where id=8; -update noar ti set v0='51BD5QBO1UMR66KETIJUNZJ18B6' where id=8; -update noar tt set b0='98Q7U1ONG45AX64TDW' where id=8; -update noar ti set b0='98Q7U1ONG45AX64TDW' where id=8; -update noar tt set v0='S6MZ2BEI1DJ07KX0I99OXSVKP' where id=8; -update noar ti set v0='S6MZ2BEI1DJ07KX0I99OXSVKP' where id=8; -update noar tt set b1='VD7Q66H5J' where id=8; -update noar ti set b1='VD7Q66H5J' where id=8; -update noar tt set v0='IHA0PY656CXUZIKY89P2L' where id=8; -update noar ti set v0='IHA0PY656CXUZIKY89P2L' where id=8; -update noar tt set b2='J28Q2XKHVH8FV' where id=8; -update noar ti set b2='J28Q2XKHVH8FV' where id=8; -update noar tt set v0='LEYNEDV76' where id=9; -update noar ti set v0='LEYNEDV76' where id=9; -update noar tt set b0='XU7Z69QFAVTNWZZLFGZMQSANXL8YCO4K' where id=9; -update noar ti set b0='XU7Z69QFAVTNWZZLFGZMQSANXL8YCO4K' where id=9; -update noar tt set v0='A5B2X92O7HZZJDF6R1CM' where id=9; -update noar ti set v0='A5B2X92O7HZZJDF6R1CM' where id=9; -update noar tt set b1='0PLM3L77B0U' where id=9; -update noar ti set b1='0PLM3L77B0U' where id=9; -update noar tt set v0='0GH8Q1OWIAEXFMB' where id=9; -update noar ti set v0='0GH8Q1OWIAEXFMB' where id=9; -update noar tt set b2='HWGRL1' where id=9; -update noar ti set b2='HWGRL1' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 mediumblob null, - b1 longblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='0TURS17FE5HOHL0910GJNK0BXRF43' where id=1; -update noar ti set v0='0TURS17FE5HOHL0910GJNK0BXRF43' where id=1; -update noar tt set b0='KQ3FO2WGG' where id=1; -update noar ti set b0='KQ3FO2WGG' where id=1; -update noar tt set v0='XAD0' where id=1; -update noar ti set v0='XAD0' where id=1; -update noar tt set b1='RKMCRDYXH4I' where id=1; -update noar ti set b1='RKMCRDYXH4I' where id=1; -update noar tt set v0='6FVVD15FDZOGYR' where id=1; -update noar ti set v0='6FVVD15FDZOGYR' where id=1; -update noar tt set b2='D6O5GODMWS2YH5' where id=1; -update noar ti set b2='D6O5GODMWS2YH5' where id=1; -update noar tt set v0='WEAI5QA340HL4ACQS9NU2OS4KZH3B' where id=2; -update noar ti set v0='WEAI5QA340HL4ACQS9NU2OS4KZH3B' where id=2; -update noar tt set b0='HNKI' where id=2; -update noar ti set b0='HNKI' where id=2; -update noar tt set v0='JYFVMPCCHQ2VQ4US25KHCFE67RVS' where id=2; -update noar ti set v0='JYFVMPCCHQ2VQ4US25KHCFE67RVS' where id=2; -update noar tt set b1='G3DH0L8WM5N7O6JS8DK6WD2' where id=2; -update noar ti set b1='G3DH0L8WM5N7O6JS8DK6WD2' where id=2; -update noar tt set v0='0PZ2OD2TL' where id=2; -update noar ti set v0='0PZ2OD2TL' where id=2; -update noar tt set b2='ZID7IEW694L2MLNJW7FIK' where id=2; -update noar ti set b2='ZID7IEW694L2MLNJW7FIK' where id=2; -update noar tt set v0='HEKPIJAUY05TLI8' where id=3; -update noar ti set v0='HEKPIJAUY05TLI8' where id=3; -update noar tt set b0='U2O8HDHI6XX2X' where id=3; -update noar ti set b0='U2O8HDHI6XX2X' where id=3; -update noar tt set v0='3S81VCBDLYO2LRBIQIV' where id=3; -update noar ti set v0='3S81VCBDLYO2LRBIQIV' where id=3; -update noar tt set b1='QF8PB' where id=3; -update noar ti set b1='QF8PB' where id=3; -update noar tt set v0='QYOPPHVBO2N4YMLI7GL3Y0S' where id=3; -update noar ti set v0='QYOPPHVBO2N4YMLI7GL3Y0S' where id=3; -update noar tt set b2='0WMAJ2ND2V6EPRUPHUMLYE9V84A1' where id=3; -update noar ti set b2='0WMAJ2ND2V6EPRUPHUMLYE9V84A1' where id=3; -update noar tt set v0='8FB98OQOE03L79WMB8NTOOFYXVVKXM' where id=4; -update noar ti set v0='8FB98OQOE03L79WMB8NTOOFYXVVKXM' where id=4; -update noar tt set b0='71BIBM6' where id=4; -update noar ti set b0='71BIBM6' where id=4; -update noar tt set v0='7VUXS6DXVCQZVN' where id=4; -update noar ti set v0='7VUXS6DXVCQZVN' where id=4; -update noar tt set b1='3S' where id=4; -update noar ti set b1='3S' where id=4; -update noar tt set v0='LEX9UT9ADQ30' where id=4; -update noar ti set v0='LEX9UT9ADQ30' where id=4; -update noar tt set b2='GPTAG3WZKCN2TE68G4CGRQK1' where id=4; -update noar ti set b2='GPTAG3WZKCN2TE68G4CGRQK1' where id=4; -update noar tt set v0='7AO2KDM9JGJXNN6QKXG6M0927CKZ' where id=5; -update noar ti set v0='7AO2KDM9JGJXNN6QKXG6M0927CKZ' where id=5; -update noar tt set b0='NKCL6M1M1JA1MSU9W' where id=5; -update noar ti set b0='NKCL6M1M1JA1MSU9W' where id=5; -update noar tt set v0='2MZ4Q2D2F62T8963DY' where id=5; -update noar ti set v0='2MZ4Q2D2F62T8963DY' where id=5; -update noar tt set b1='ERPYPX8Q1I0ZEPUV6BPOPRD' where id=5; -update noar ti set b1='ERPYPX8Q1I0ZEPUV6BPOPRD' where id=5; -update noar tt set v0='CL' where id=5; -update noar ti set v0='CL' where id=5; -update noar tt set b2='B3XQZTMGA4OFNQKQDX' where id=5; -update noar ti set b2='B3XQZTMGA4OFNQKQDX' where id=5; -update noar tt set v0='K6A' where id=6; -update noar ti set v0='K6A' where id=6; -update noar tt set b0='F8UYPZBG6SQNU7H' where id=6; -update noar ti set b0='F8UYPZBG6SQNU7H' where id=6; -update noar tt set v0='OFE5UOY7FNGWCFU' where id=6; -update noar ti set v0='OFE5UOY7FNGWCFU' where id=6; -update noar tt set b1='EEXRH7UA6HHUGL362M18955SAQG' where id=6; -update noar ti set b1='EEXRH7UA6HHUGL362M18955SAQG' where id=6; -update noar tt set v0='20KKMOSA95B0PWJ2LZJ3M1' where id=6; -update noar ti set v0='20KKMOSA95B0PWJ2LZJ3M1' where id=6; -update noar tt set b2='2' where id=6; -update noar ti set b2='2' where id=6; -update noar tt set v0='4HCH4C' where id=7; -update noar ti set v0='4HCH4C' where id=7; -update noar tt set b0='E9O2UHBK9T26' where id=7; -update noar ti set b0='E9O2UHBK9T26' where id=7; -update noar tt set v0='84UEIK0BXP88TXOWK7A6PXR06KK045' where id=7; -update noar ti set v0='84UEIK0BXP88TXOWK7A6PXR06KK045' where id=7; -update noar tt set b1='TS9XWJ' where id=7; -update noar ti set b1='TS9XWJ' where id=7; -update noar tt set v0='BQAO' where id=7; -update noar ti set v0='BQAO' where id=7; -update noar tt set b2='905814Z5HRXZTMH7' where id=7; -update noar ti set b2='905814Z5HRXZTMH7' where id=7; -update noar tt set v0='AIU5F' where id=8; -update noar ti set v0='AIU5F' where id=8; -update noar tt set b0='VDIV03TLS6XT4YHCNH' where id=8; -update noar ti set b0='VDIV03TLS6XT4YHCNH' where id=8; -update noar tt set v0='M7NBRZDJOYC6' where id=8; -update noar ti set v0='M7NBRZDJOYC6' where id=8; -update noar tt set b1='05WN5YTXG0MZCT1F0H1S' where id=8; -update noar ti set b1='05WN5YTXG0MZCT1F0H1S' where id=8; -update noar tt set v0='0W5R' where id=8; -update noar ti set v0='0W5R' where id=8; -update noar tt set b2='ZBQOHJDSBPMU8C' where id=8; -update noar ti set b2='ZBQOHJDSBPMU8C' where id=8; -update noar tt set v0='Q5XTRDH1VY8NWWWQQ0EN' where id=9; -update noar ti set v0='Q5XTRDH1VY8NWWWQQ0EN' where id=9; -update noar tt set b0='JTLU5TWH6EZSMDCAGT714S2VEYOG' where id=9; -update noar ti set b0='JTLU5TWH6EZSMDCAGT714S2VEYOG' where id=9; -update noar tt set v0='4DPR38ZC3RZL0PVYS8VI0' where id=9; -update noar ti set v0='4DPR38ZC3RZL0PVYS8VI0' where id=9; -update noar tt set b1='215W02YRZ2ROUSYHJIJA8L7P69X3QT' where id=9; -update noar ti set b1='215W02YRZ2ROUSYHJIJA8L7P69X3QT' where id=9; -update noar tt set v0='BRPX6FDQOG2ZOP' where id=9; -update noar ti set v0='BRPX6FDQOG2ZOP' where id=9; -update noar tt set b2='22QVEES0BNXQM2OSMR5W' where id=9; -update noar ti set b2='22QVEES0BNXQM2OSMR5W' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 mediumblob not null, - b1 longblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='ZYERXU6INJW20WFA62VN' where id=1; -update noar ti set v0='ZYERXU6INJW20WFA62VN' where id=1; -update noar tt set b0='RV7KGDD9S2M2IGK8F' where id=1; -update noar ti set b0='RV7KGDD9S2M2IGK8F' where id=1; -update noar tt set v0='CO4G2H8LMZQR7OKTU' where id=1; -update noar ti set v0='CO4G2H8LMZQR7OKTU' where id=1; -update noar tt set b1='MA5V8S' where id=1; -update noar ti set b1='MA5V8S' where id=1; -update noar tt set v0='BPSN98AFN8KNO102Q0JHZVKVY' where id=1; -update noar ti set v0='BPSN98AFN8KNO102Q0JHZVKVY' where id=1; -update noar tt set b2='V1IR2WXBATIESLZ4YXEB4' where id=1; -update noar ti set b2='V1IR2WXBATIESLZ4YXEB4' where id=1; -update noar tt set v0='67NYKR0HOJWDVK36XJZYYFWKLD' where id=2; -update noar ti set v0='67NYKR0HOJWDVK36XJZYYFWKLD' where id=2; -update noar tt set b0='8D3E10QXTG7ZOVEWKOUQ' where id=2; -update noar ti set b0='8D3E10QXTG7ZOVEWKOUQ' where id=2; -update noar tt set v0='GHRB86F0LVXW36P5K0UYKUW6WCC3EZ' where id=2; -update noar ti set v0='GHRB86F0LVXW36P5K0UYKUW6WCC3EZ' where id=2; -update noar tt set b1='BZ7EDAML309TQHYKJ9UN9RCB3KW' where id=2; -update noar ti set b1='BZ7EDAML309TQHYKJ9UN9RCB3KW' where id=2; -update noar tt set v0='SUV258PB59VYM1TI0X7LTLT' where id=2; -update noar ti set v0='SUV258PB59VYM1TI0X7LTLT' where id=2; -update noar tt set b2='FPIWS8J27ZALNI2WWTMJCZKG0ADYVHN' where id=2; -update noar ti set b2='FPIWS8J27ZALNI2WWTMJCZKG0ADYVHN' where id=2; -update noar tt set v0='RJJFJD' where id=3; -update noar ti set v0='RJJFJD' where id=3; -update noar tt set b0='9ZL18ZR9' where id=3; -update noar ti set b0='9ZL18ZR9' where id=3; -update noar tt set v0='A0NZTU7R9UBQ92YFVC6IT2WN' where id=3; -update noar ti set v0='A0NZTU7R9UBQ92YFVC6IT2WN' where id=3; -update noar tt set b1='G9T3T0LX8GF94O2BY944BL' where id=3; -update noar ti set b1='G9T3T0LX8GF94O2BY944BL' where id=3; -update noar tt set v0='HC5CUZ1GUF87O7QW79H' where id=3; -update noar ti set v0='HC5CUZ1GUF87O7QW79H' where id=3; -update noar tt set b2='SQT0PNNG8CMB4CAE' where id=3; -update noar ti set b2='SQT0PNNG8CMB4CAE' where id=3; -update noar tt set v0='KVZ799K6XJWUE3PJA9PNIBBY3DCPIJ' where id=4; -update noar ti set v0='KVZ799K6XJWUE3PJA9PNIBBY3DCPIJ' where id=4; -update noar tt set b0='5ML8O07L6A07MVAJJX7' where id=4; -update noar ti set b0='5ML8O07L6A07MVAJJX7' where id=4; -update noar tt set v0='8J5RI9X' where id=4; -update noar ti set v0='8J5RI9X' where id=4; -update noar tt set b1='X7P0JXIJUO2L5N' where id=4; -update noar ti set b1='X7P0JXIJUO2L5N' where id=4; -update noar tt set v0='TFMGYUI212MOEKKNY2S' where id=4; -update noar ti set v0='TFMGYUI212MOEKKNY2S' where id=4; -update noar tt set b2='BB5QN' where id=4; -update noar ti set b2='BB5QN' where id=4; -update noar tt set v0='JZ4COG8NAV1NGC4IY7BH7P92I3VOV75' where id=5; -update noar ti set v0='JZ4COG8NAV1NGC4IY7BH7P92I3VOV75' where id=5; -update noar tt set b0='34O3E87MHHEOOSTUOY1U49' where id=5; -update noar ti set b0='34O3E87MHHEOOSTUOY1U49' where id=5; -update noar tt set v0='9TVSNPTQ3ZA' where id=5; -update noar ti set v0='9TVSNPTQ3ZA' where id=5; -update noar tt set b1='502C8M555G9OSA5WEF3SG1YX' where id=5; -update noar ti set b1='502C8M555G9OSA5WEF3SG1YX' where id=5; -update noar tt set v0='V' where id=5; -update noar ti set v0='V' where id=5; -update noar tt set b2='G9IYEZ2SHXZ3' where id=5; -update noar ti set b2='G9IYEZ2SHXZ3' where id=5; -update noar tt set v0='S4YT2BOP' where id=6; -update noar ti set v0='S4YT2BOP' where id=6; -update noar tt set b0='MJHBD8OR3J' where id=6; -update noar ti set b0='MJHBD8OR3J' where id=6; -update noar tt set v0='TI79XH' where id=6; -update noar ti set v0='TI79XH' where id=6; -update noar tt set b1='72YWT90FD73TYJJ' where id=6; -update noar ti set b1='72YWT90FD73TYJJ' where id=6; -update noar tt set v0='EZ6FELBMYKF9UMI' where id=6; -update noar ti set v0='EZ6FELBMYKF9UMI' where id=6; -update noar tt set b2='7BB1KDGZF4U2NH9FKQI' where id=6; -update noar ti set b2='7BB1KDGZF4U2NH9FKQI' where id=6; -update noar tt set v0='1D0CKBOHZXTWL1L42R43BWOKFD6' where id=7; -update noar ti set v0='1D0CKBOHZXTWL1L42R43BWOKFD6' where id=7; -update noar tt set b0='NDLQ0AORDTB4COKB66QM5F' where id=7; -update noar ti set b0='NDLQ0AORDTB4COKB66QM5F' where id=7; -update noar tt set v0='DJT' where id=7; -update noar ti set v0='DJT' where id=7; -update noar tt set b1='469UGLLMYEXMF9RJBE43N1KVQL1' where id=7; -update noar ti set b1='469UGLLMYEXMF9RJBE43N1KVQL1' where id=7; -update noar tt set v0='MM5KATCWGLHUGOFTSFGB3R5DM087NXL' where id=7; -update noar ti set v0='MM5KATCWGLHUGOFTSFGB3R5DM087NXL' where id=7; -update noar tt set b2='C1AYYX4Y5O7VI' where id=7; -update noar ti set b2='C1AYYX4Y5O7VI' where id=7; -update noar tt set v0='PDB4OMSUJZ6HCUEYY89' where id=8; -update noar ti set v0='PDB4OMSUJZ6HCUEYY89' where id=8; -update noar tt set b0='RYL8V67U7YXTX41' where id=8; -update noar ti set b0='RYL8V67U7YXTX41' where id=8; -update noar tt set v0='RB13F' where id=8; -update noar ti set v0='RB13F' where id=8; -update noar tt set b1='P' where id=8; -update noar ti set b1='P' where id=8; -update noar tt set v0='TD3KOODUFA' where id=8; -update noar ti set v0='TD3KOODUFA' where id=8; -update noar tt set b2='95KAYL21DU1PPLHKA5GNAS' where id=8; -update noar ti set b2='95KAYL21DU1PPLHKA5GNAS' where id=8; -update noar tt set v0='BXQIYUMD2VI0IAPCFK7M' where id=9; -update noar ti set v0='BXQIYUMD2VI0IAPCFK7M' where id=9; -update noar tt set b0='U9LDRGGW50J2RJ' where id=9; -update noar ti set b0='U9LDRGGW50J2RJ' where id=9; -update noar tt set v0='DP8Q0' where id=9; -update noar ti set v0='DP8Q0' where id=9; -update noar tt set b1='WZYTKVY6HGEG' where id=9; -update noar ti set b1='WZYTKVY6HGEG' where id=9; -update noar tt set v0='YBOA86D' where id=9; -update noar ti set v0='YBOA86D' where id=9; -update noar tt set b2='8YJZ88W1KCCWZ' where id=9; -update noar ti set b2='8YJZ88W1KCCWZ' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 mediumblob not null, - b1 longblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='XPBFVE2J5K5VIWRK8Y4' where id=1; -update noar ti set v0='XPBFVE2J5K5VIWRK8Y4' where id=1; -update noar tt set b0='N884NQ45BFOGGPU76014' where id=1; -update noar ti set b0='N884NQ45BFOGGPU76014' where id=1; -update noar tt set v0='YFX62UX6WJJK3XS83C' where id=1; -update noar ti set v0='YFX62UX6WJJK3XS83C' where id=1; -update noar tt set b1='RLF1X650Q' where id=1; -update noar ti set b1='RLF1X650Q' where id=1; -update noar tt set v0='7G1JNG2H1400MS0KVFB1OPBE2WTT7P3H' where id=1; -update noar ti set v0='7G1JNG2H1400MS0KVFB1OPBE2WTT7P3H' where id=1; -update noar tt set b2='BKGVAG2CCQTF4TN0S1E94UTHTWV' where id=1; -update noar ti set b2='BKGVAG2CCQTF4TN0S1E94UTHTWV' where id=1; -update noar tt set v0='IP5KO3PJDNIZ4MGK' where id=2; -update noar ti set v0='IP5KO3PJDNIZ4MGK' where id=2; -update noar tt set b0='N' where id=2; -update noar ti set b0='N' where id=2; -update noar tt set v0='SB19QLB0CERD' where id=2; -update noar ti set v0='SB19QLB0CERD' where id=2; -update noar tt set b1='PTEY2LECD33SMPZYE' where id=2; -update noar ti set b1='PTEY2LECD33SMPZYE' where id=2; -update noar tt set v0='KMBNXEETQDH3EYN73OYNCVQWEQRU' where id=2; -update noar ti set v0='KMBNXEETQDH3EYN73OYNCVQWEQRU' where id=2; -update noar tt set b2='ECSVUJ0RNYFGX5FIYC844K62E96B' where id=2; -update noar ti set b2='ECSVUJ0RNYFGX5FIYC844K62E96B' where id=2; -update noar tt set v0='TXARXVDIOH3' where id=3; -update noar ti set v0='TXARXVDIOH3' where id=3; -update noar tt set b0='ZYH4XMDFTB8W3XW45' where id=3; -update noar ti set b0='ZYH4XMDFTB8W3XW45' where id=3; -update noar tt set v0='ZRJV5P42YJMS4UNYVXGTQAO194' where id=3; -update noar ti set v0='ZRJV5P42YJMS4UNYVXGTQAO194' where id=3; -update noar tt set b1='UBWNX4AQT8SMTCKR89LNYIL3NSLPUMS' where id=3; -update noar ti set b1='UBWNX4AQT8SMTCKR89LNYIL3NSLPUMS' where id=3; -update noar tt set v0='QELDRSGUXXDM0VDM77J0' where id=3; -update noar ti set v0='QELDRSGUXXDM0VDM77J0' where id=3; -update noar tt set b2='NZ7OB0C7A7A4F1327U407OGI4L' where id=3; -update noar ti set b2='NZ7OB0C7A7A4F1327U407OGI4L' where id=3; -update noar tt set v0='RU10G' where id=4; -update noar ti set v0='RU10G' where id=4; -update noar tt set b0='CYB5OC8O389' where id=4; -update noar ti set b0='CYB5OC8O389' where id=4; -update noar tt set v0='8AUT' where id=4; -update noar ti set v0='8AUT' where id=4; -update noar tt set b1='7F4' where id=4; -update noar ti set b1='7F4' where id=4; -update noar tt set v0='BK4GAEHWCSBHE0HNZVVUD6B1TPAW' where id=4; -update noar ti set v0='BK4GAEHWCSBHE0HNZVVUD6B1TPAW' where id=4; -update noar tt set b2='4EP9FBNG460A59WCZ2TN76U9JLHGMP' where id=4; -update noar ti set b2='4EP9FBNG460A59WCZ2TN76U9JLHGMP' where id=4; -update noar tt set v0='MRNGXR8U7553' where id=5; -update noar ti set v0='MRNGXR8U7553' where id=5; -update noar tt set b0='S3GVN2QW7DOFFODAL' where id=5; -update noar ti set b0='S3GVN2QW7DOFFODAL' where id=5; -update noar tt set v0='H4CIYCSQ4BE4H93' where id=5; -update noar ti set v0='H4CIYCSQ4BE4H93' where id=5; -update noar tt set b1='92H15VK63D54DSQYWT7GFHXD71' where id=5; -update noar ti set b1='92H15VK63D54DSQYWT7GFHXD71' where id=5; -update noar tt set v0='C8Z9S1P7VDFDXJYGHO5HP6P0Z8MNSDY' where id=5; -update noar ti set v0='C8Z9S1P7VDFDXJYGHO5HP6P0Z8MNSDY' where id=5; -update noar tt set b2='SBCXRAK3HR' where id=5; -update noar ti set b2='SBCXRAK3HR' where id=5; -update noar tt set v0='7D4PPC4DBY3PWHOCH' where id=6; -update noar ti set v0='7D4PPC4DBY3PWHOCH' where id=6; -update noar tt set b0='J4EWJZ9UC8' where id=6; -update noar ti set b0='J4EWJZ9UC8' where id=6; -update noar tt set v0='5YSDW8WQLLNMOR59D1A8UE8VMUX' where id=6; -update noar ti set v0='5YSDW8WQLLNMOR59D1A8UE8VMUX' where id=6; -update noar tt set b1='Q3XK2VMOJFTM69FQT9' where id=6; -update noar ti set b1='Q3XK2VMOJFTM69FQT9' where id=6; -update noar tt set v0='5HIR90R2QZZL' where id=6; -update noar ti set v0='5HIR90R2QZZL' where id=6; -update noar tt set b2='2B2QP7KBDQ' where id=6; -update noar ti set b2='2B2QP7KBDQ' where id=6; -update noar tt set v0='LPEHSCY1KU1GZB' where id=7; -update noar ti set v0='LPEHSCY1KU1GZB' where id=7; -update noar tt set b0='WQYIH3OL20FINXC3A3XHME0DSP8H' where id=7; -update noar ti set b0='WQYIH3OL20FINXC3A3XHME0DSP8H' where id=7; -update noar tt set v0='2HDVCF4TMZZYJ93C4TICVWC6' where id=7; -update noar ti set v0='2HDVCF4TMZZYJ93C4TICVWC6' where id=7; -update noar tt set b1='ZEMHJD3Z' where id=7; -update noar ti set b1='ZEMHJD3Z' where id=7; -update noar tt set v0='XOQ82O827EYAS2ZUS4VXHRA17KU' where id=7; -update noar ti set v0='XOQ82O827EYAS2ZUS4VXHRA17KU' where id=7; -update noar tt set b2='JA7X11TDRZFYYENVP9GFY' where id=7; -update noar ti set b2='JA7X11TDRZFYYENVP9GFY' where id=7; -update noar tt set v0='FTE09F6BDURE' where id=8; -update noar ti set v0='FTE09F6BDURE' where id=8; -update noar tt set b0='W0T696OU' where id=8; -update noar ti set b0='W0T696OU' where id=8; -update noar tt set v0='XPZ5S1N2TPL5HR1MJE3031UQXA6' where id=8; -update noar ti set v0='XPZ5S1N2TPL5HR1MJE3031UQXA6' where id=8; -update noar tt set b1='8N1IXUL8XLJ6NY9UNLELM2G4XEF9ID' where id=8; -update noar ti set b1='8N1IXUL8XLJ6NY9UNLELM2G4XEF9ID' where id=8; -update noar tt set v0='LW041SWAM03NW8FWT7RV5GIBO' where id=8; -update noar ti set v0='LW041SWAM03NW8FWT7RV5GIBO' where id=8; -update noar tt set b2='YCVB7SRDQLYNXN002N' where id=8; -update noar ti set b2='YCVB7SRDQLYNXN002N' where id=8; -update noar tt set v0='KQN82IILP3JK' where id=9; -update noar ti set v0='KQN82IILP3JK' where id=9; -update noar tt set b0='F9YM8EY9U8W0XT92U6YJTHJLGYF4NK9F' where id=9; -update noar ti set b0='F9YM8EY9U8W0XT92U6YJTHJLGYF4NK9F' where id=9; -update noar tt set v0='MDD1EV6JTLX43QINPK428Z62PE4N34S' where id=9; -update noar ti set v0='MDD1EV6JTLX43QINPK428Z62PE4N34S' where id=9; -update noar tt set b1='0PUCMC' where id=9; -update noar ti set b1='0PUCMC' where id=9; -update noar tt set v0='QL7Q63SYC5JS2SB0QW' where id=9; -update noar ti set v0='QL7Q63SYC5JS2SB0QW' where id=9; -update noar tt set b2='BWPBJYJ67E0SIG3CKSZKXBL0MOKT' where id=9; -update noar ti set b2='BWPBJYJ67E0SIG3CKSZKXBL0MOKT' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 mediumblob null, - b1 longblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='Z104694OJFA' where id=1; -update noar ti set v0='Z104694OJFA' where id=1; -update noar tt set b0='RPG0I43KU4AVCULXN3MD2XXXWC4GUTU' where id=1; -update noar ti set b0='RPG0I43KU4AVCULXN3MD2XXXWC4GUTU' where id=1; -update noar tt set v0='GCG9RIPJUOG5YY' where id=1; -update noar ti set v0='GCG9RIPJUOG5YY' where id=1; -update noar tt set b1='JDPM61NY3TKJ' where id=1; -update noar ti set b1='JDPM61NY3TKJ' where id=1; -update noar tt set v0='D8JESE7' where id=1; -update noar ti set v0='D8JESE7' where id=1; -update noar tt set b2='HEEE1Q3OLR22EWKDDMTE9SZ9NS' where id=1; -update noar ti set b2='HEEE1Q3OLR22EWKDDMTE9SZ9NS' where id=1; -update noar tt set v0='N9OJY26GINEFLG4S' where id=2; -update noar ti set v0='N9OJY26GINEFLG4S' where id=2; -update noar tt set b0='K0UQMIL7EV1RXYF' where id=2; -update noar ti set b0='K0UQMIL7EV1RXYF' where id=2; -update noar tt set v0='UJLKP3A04AAIKNYI66J60W' where id=2; -update noar ti set v0='UJLKP3A04AAIKNYI66J60W' where id=2; -update noar tt set b1='MHT1XDZ5S8O4DMFURETLGK4HQ' where id=2; -update noar ti set b1='MHT1XDZ5S8O4DMFURETLGK4HQ' where id=2; -update noar tt set v0='6UZRF4L79IEA' where id=2; -update noar ti set v0='6UZRF4L79IEA' where id=2; -update noar tt set b2='A988H0T01T28V1VQA' where id=2; -update noar ti set b2='A988H0T01T28V1VQA' where id=2; -update noar tt set v0='9JV' where id=3; -update noar ti set v0='9JV' where id=3; -update noar tt set b0='YG8DC08IY536' where id=3; -update noar ti set b0='YG8DC08IY536' where id=3; -update noar tt set v0='3FUEF' where id=3; -update noar ti set v0='3FUEF' where id=3; -update noar tt set b1='HRSAQND8C85PX' where id=3; -update noar ti set b1='HRSAQND8C85PX' where id=3; -update noar tt set v0='P3LH16WDFVHFBPBCQXCU5B0OCSY07' where id=3; -update noar ti set v0='P3LH16WDFVHFBPBCQXCU5B0OCSY07' where id=3; -update noar tt set b2='LH5F0' where id=3; -update noar ti set b2='LH5F0' where id=3; -update noar tt set v0='KN7GC8T9J2RZQ3CH6M1ZZGER83FAY1X' where id=4; -update noar ti set v0='KN7GC8T9J2RZQ3CH6M1ZZGER83FAY1X' where id=4; -update noar tt set b0='H' where id=4; -update noar ti set b0='H' where id=4; -update noar tt set v0='BT79' where id=4; -update noar ti set v0='BT79' where id=4; -update noar tt set b1='EF24AI' where id=4; -update noar ti set b1='EF24AI' where id=4; -update noar tt set v0='MY' where id=4; -update noar ti set v0='MY' where id=4; -update noar tt set b2='ZGLZB5P' where id=4; -update noar ti set b2='ZGLZB5P' where id=4; -update noar tt set v0='8' where id=5; -update noar ti set v0='8' where id=5; -update noar tt set b0='HZTBR6' where id=5; -update noar ti set b0='HZTBR6' where id=5; -update noar tt set v0='0JG3CURUM2I2M3Y9ZJ' where id=5; -update noar ti set v0='0JG3CURUM2I2M3Y9ZJ' where id=5; -update noar tt set b1='A98P8HM8F4P7PSGHE7' where id=5; -update noar ti set b1='A98P8HM8F4P7PSGHE7' where id=5; -update noar tt set v0='65ZRDAZRIWO9PAR0T6MA0EA8' where id=5; -update noar ti set v0='65ZRDAZRIWO9PAR0T6MA0EA8' where id=5; -update noar tt set b2='D2K9423' where id=5; -update noar ti set b2='D2K9423' where id=5; -update noar tt set v0='W8T9QUSNMD5A7X34PJOC3NYA0' where id=6; -update noar ti set v0='W8T9QUSNMD5A7X34PJOC3NYA0' where id=6; -update noar tt set b0='4Z1ES5VG' where id=6; -update noar ti set b0='4Z1ES5VG' where id=6; -update noar tt set v0='88' where id=6; -update noar ti set v0='88' where id=6; -update noar tt set b1='ADJ92F3K8MI401JOYTMGD' where id=6; -update noar ti set b1='ADJ92F3K8MI401JOYTMGD' where id=6; -update noar tt set v0='QBLQLB8K85HTLE6RJ4BNRBF2X' where id=6; -update noar ti set v0='QBLQLB8K85HTLE6RJ4BNRBF2X' where id=6; -update noar tt set b2='0EENMWAJK698IWTLAJV82C6CZR4RW' where id=6; -update noar ti set b2='0EENMWAJK698IWTLAJV82C6CZR4RW' where id=6; -update noar tt set v0='N6QCJL4T16NK1DRIJ7Q3710MXNWJFA6Y' where id=7; -update noar ti set v0='N6QCJL4T16NK1DRIJ7Q3710MXNWJFA6Y' where id=7; -update noar tt set b0='NLRJ8VMTXKLGKGBD' where id=7; -update noar ti set b0='NLRJ8VMTXKLGKGBD' where id=7; -update noar tt set v0='1BT1CUJ49G9SHZUSNDOML732TPZB' where id=7; -update noar ti set v0='1BT1CUJ49G9SHZUSNDOML732TPZB' where id=7; -update noar tt set b1='315ZRCT3X3ZG69N9GTS9X152H113C4VY' where id=7; -update noar ti set b1='315ZRCT3X3ZG69N9GTS9X152H113C4VY' where id=7; -update noar tt set v0='EVTLPJHBKIJUD7HO00TU' where id=7; -update noar ti set v0='EVTLPJHBKIJUD7HO00TU' where id=7; -update noar tt set b2='OR472GINOYWB' where id=7; -update noar ti set b2='OR472GINOYWB' where id=7; -update noar tt set v0='VW7Q2Q' where id=8; -update noar ti set v0='VW7Q2Q' where id=8; -update noar tt set b0='0HPMBR62' where id=8; -update noar ti set b0='0HPMBR62' where id=8; -update noar tt set v0='GIL8' where id=8; -update noar ti set v0='GIL8' where id=8; -update noar tt set b1='TMJXG7HP' where id=8; -update noar ti set b1='TMJXG7HP' where id=8; -update noar tt set v0='N30LDJ2G9ESFQPTCKOIMBEQC' where id=8; -update noar ti set v0='N30LDJ2G9ESFQPTCKOIMBEQC' where id=8; -update noar tt set b2='6HM02YPNV9' where id=8; -update noar ti set b2='6HM02YPNV9' where id=8; -update noar tt set v0='TBHHU5WCVZ17ABTHU0TZ' where id=9; -update noar ti set v0='TBHHU5WCVZ17ABTHU0TZ' where id=9; -update noar tt set b0='OI5E3M8J0LFZB0NJFC9W' where id=9; -update noar ti set b0='OI5E3M8J0LFZB0NJFC9W' where id=9; -update noar tt set v0='C7Q9' where id=9; -update noar ti set v0='C7Q9' where id=9; -update noar tt set b1='PA4S7GR0YLZGFKDA4I8WV4449JH4I' where id=9; -update noar ti set b1='PA4S7GR0YLZGFKDA4I8WV4449JH4I' where id=9; -update noar tt set v0='OKTAUX5EWPAEAWP809JN2P0B' where id=9; -update noar ti set v0='OKTAUX5EWPAEAWP809JN2P0B' where id=9; -update noar tt set b2='K' where id=9; -update noar ti set b2='K' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 mediumblob null, - b1 longblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='42XRBOMG3KC19ICCQZG20F785P' where id=1; -update noar ti set v0='42XRBOMG3KC19ICCQZG20F785P' where id=1; -update noar tt set b0='VT6C40X6R3KXKATEA' where id=1; -update noar ti set b0='VT6C40X6R3KXKATEA' where id=1; -update noar tt set v0='3ZHP3U319UVUQ34' where id=1; -update noar ti set v0='3ZHP3U319UVUQ34' where id=1; -update noar tt set b1='IFFK5DIDR36DQ1HG7U9IWV48WQZ8' where id=1; -update noar ti set b1='IFFK5DIDR36DQ1HG7U9IWV48WQZ8' where id=1; -update noar tt set v0='200Q' where id=1; -update noar ti set v0='200Q' where id=1; -update noar tt set b2='XE8Y528DXOEFK2YCIAPYH' where id=1; -update noar ti set b2='XE8Y528DXOEFK2YCIAPYH' where id=1; -update noar tt set v0='1DNYC' where id=2; -update noar ti set v0='1DNYC' where id=2; -update noar tt set b0='CS38OK2MOMA' where id=2; -update noar ti set b0='CS38OK2MOMA' where id=2; -update noar tt set v0='KBECZLRCWB4KY2PV04JHCETWNLS1Z3' where id=2; -update noar ti set v0='KBECZLRCWB4KY2PV04JHCETWNLS1Z3' where id=2; -update noar tt set b1='O6NU' where id=2; -update noar ti set b1='O6NU' where id=2; -update noar tt set v0='4CWDGN1S9O692FN5G6R92XN8GH2OU' where id=2; -update noar ti set v0='4CWDGN1S9O692FN5G6R92XN8GH2OU' where id=2; -update noar tt set b2='2NYZDCWZWLVFXUI6ZIOG8JI7027' where id=2; -update noar ti set b2='2NYZDCWZWLVFXUI6ZIOG8JI7027' where id=2; -update noar tt set v0='W5XKM60U80BEMX7OTU0RD8ID65FNNYF' where id=3; -update noar ti set v0='W5XKM60U80BEMX7OTU0RD8ID65FNNYF' where id=3; -update noar tt set b0='YLRJPC0Q' where id=3; -update noar ti set b0='YLRJPC0Q' where id=3; -update noar tt set v0='HV3' where id=3; -update noar ti set v0='HV3' where id=3; -update noar tt set b1='TY' where id=3; -update noar ti set b1='TY' where id=3; -update noar tt set v0='3BZ4R' where id=3; -update noar ti set v0='3BZ4R' where id=3; -update noar tt set b2='SWX42SMYGD3XT' where id=3; -update noar ti set b2='SWX42SMYGD3XT' where id=3; -update noar tt set v0='8' where id=4; -update noar ti set v0='8' where id=4; -update noar tt set b0='5OPOJFZ4DR7NU' where id=4; -update noar ti set b0='5OPOJFZ4DR7NU' where id=4; -update noar tt set v0='Q487J5R36GI' where id=4; -update noar ti set v0='Q487J5R36GI' where id=4; -update noar tt set b1='IY9DNBQ77DMW48OMD' where id=4; -update noar ti set b1='IY9DNBQ77DMW48OMD' where id=4; -update noar tt set v0='I2KQF9H6YYNIITVNTX' where id=4; -update noar ti set v0='I2KQF9H6YYNIITVNTX' where id=4; -update noar tt set b2='ZK' where id=4; -update noar ti set b2='ZK' where id=4; -update noar tt set v0='60TPJ6CJSTVX7X0FHEJ864LBGTJKBB25' where id=5; -update noar ti set v0='60TPJ6CJSTVX7X0FHEJ864LBGTJKBB25' where id=5; -update noar tt set b0='WQUI7A9IZZ' where id=5; -update noar ti set b0='WQUI7A9IZZ' where id=5; -update noar tt set v0='W7DSP2MFS1LN2OAKN36B0Q3T407A' where id=5; -update noar ti set v0='W7DSP2MFS1LN2OAKN36B0Q3T407A' where id=5; -update noar tt set b1='Q5' where id=5; -update noar ti set b1='Q5' where id=5; -update noar tt set v0='61DS1' where id=5; -update noar ti set v0='61DS1' where id=5; -update noar tt set b2='GTWQB44XRH7USTUE2Q3EYI8AZXF' where id=5; -update noar ti set b2='GTWQB44XRH7USTUE2Q3EYI8AZXF' where id=5; -update noar tt set v0='7XKGH17THVCPSI' where id=6; -update noar ti set v0='7XKGH17THVCPSI' where id=6; -update noar tt set b0='4B0GHZJOA7ZYRF66ISMBLCPZNA2' where id=6; -update noar ti set b0='4B0GHZJOA7ZYRF66ISMBLCPZNA2' where id=6; -update noar tt set v0='UPPMBQZJ' where id=6; -update noar ti set v0='UPPMBQZJ' where id=6; -update noar tt set b1='1RZNIXTHU2N58' where id=6; -update noar ti set b1='1RZNIXTHU2N58' where id=6; -update noar tt set v0='F6R0TIGX4XNTPME14HRTED1CT' where id=6; -update noar ti set v0='F6R0TIGX4XNTPME14HRTED1CT' where id=6; -update noar tt set b2='2LPYO6TO8QIVHJP1KAP9PWOW1' where id=6; -update noar ti set b2='2LPYO6TO8QIVHJP1KAP9PWOW1' where id=6; -update noar tt set v0='0RE' where id=7; -update noar ti set v0='0RE' where id=7; -update noar tt set b0='Z2WBNJYHIP4YY1HQTCK' where id=7; -update noar ti set b0='Z2WBNJYHIP4YY1HQTCK' where id=7; -update noar tt set v0='0GCZCELXI' where id=7; -update noar ti set v0='0GCZCELXI' where id=7; -update noar tt set b1='6' where id=7; -update noar ti set b1='6' where id=7; -update noar tt set v0='5Z1Q2D1P1CWBOJ66I0FI8MO3463FB' where id=7; -update noar ti set v0='5Z1Q2D1P1CWBOJ66I0FI8MO3463FB' where id=7; -update noar tt set b2='RGQVQ7S594' where id=7; -update noar ti set b2='RGQVQ7S594' where id=7; -update noar tt set v0='H30R' where id=8; -update noar ti set v0='H30R' where id=8; -update noar tt set b0='B9NU' where id=8; -update noar ti set b0='B9NU' where id=8; -update noar tt set v0='R' where id=8; -update noar ti set v0='R' where id=8; -update noar tt set b1='AIWTE5L7VXU9S0AY4GYVXWD7' where id=8; -update noar ti set b1='AIWTE5L7VXU9S0AY4GYVXWD7' where id=8; -update noar tt set v0='LFQMIGNS7ZUPS8E5JXWOLZU314' where id=8; -update noar ti set v0='LFQMIGNS7ZUPS8E5JXWOLZU314' where id=8; -update noar tt set b2='TOHPIW6Y3QSFRQVJQ4M6FPELPJ0U7SD' where id=8; -update noar ti set b2='TOHPIW6Y3QSFRQVJQ4M6FPELPJ0U7SD' where id=8; -update noar tt set v0='2GP4PLTH3UKK9H3AX31OGFD9' where id=9; -update noar ti set v0='2GP4PLTH3UKK9H3AX31OGFD9' where id=9; -update noar tt set b0='ACQSK9NVBGKGCXBLL4UOMROFAA5Y9CZS' where id=9; -update noar ti set b0='ACQSK9NVBGKGCXBLL4UOMROFAA5Y9CZS' where id=9; -update noar tt set v0='YNOEV0RPCOVSIWI08A' where id=9; -update noar ti set v0='YNOEV0RPCOVSIWI08A' where id=9; -update noar tt set b1='7' where id=9; -update noar ti set b1='7' where id=9; -update noar tt set v0='52896H3LM2BORSSL6' where id=9; -update noar ti set v0='52896H3LM2BORSSL6' where id=9; -update noar tt set b2='DXMZGE' where id=9; -update noar ti set b2='DXMZGE' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 mediumblob not null, - b1 longblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='80K1T1DG' where id=1; -update noar ti set v0='80K1T1DG' where id=1; -update noar tt set b0='HBX9PLDXOB6KNKZHJX6C' where id=1; -update noar ti set b0='HBX9PLDXOB6KNKZHJX6C' where id=1; -update noar tt set v0='ZR024SSYS9O05Q4' where id=1; -update noar ti set v0='ZR024SSYS9O05Q4' where id=1; -update noar tt set b1='87199C69QG' where id=1; -update noar ti set b1='87199C69QG' where id=1; -update noar tt set v0='8PXK7KI7RJPJK1LQWOAAGD9GBE' where id=1; -update noar ti set v0='8PXK7KI7RJPJK1LQWOAAGD9GBE' where id=1; -update noar tt set b2='QPA5AB5LJJ' where id=1; -update noar ti set b2='QPA5AB5LJJ' where id=1; -update noar tt set v0='7NHOH2ON5WKWUH24NPQ5UFQ' where id=2; -update noar ti set v0='7NHOH2ON5WKWUH24NPQ5UFQ' where id=2; -update noar tt set b0='4M5OS7SHQSAEGN0UK589K' where id=2; -update noar ti set b0='4M5OS7SHQSAEGN0UK589K' where id=2; -update noar tt set v0='02R26YGLZQIJO8EA9ZFW6K9DW5N3CY' where id=2; -update noar ti set v0='02R26YGLZQIJO8EA9ZFW6K9DW5N3CY' where id=2; -update noar tt set b1='T8' where id=2; -update noar ti set b1='T8' where id=2; -update noar tt set v0='XOID16HS0QS90TVDG9NIYLJJ' where id=2; -update noar ti set v0='XOID16HS0QS90TVDG9NIYLJJ' where id=2; -update noar tt set b2='Y382S3VVV2HR3' where id=2; -update noar ti set b2='Y382S3VVV2HR3' where id=2; -update noar tt set v0='93QMMILBC7BP01GPU4' where id=3; -update noar ti set v0='93QMMILBC7BP01GPU4' where id=3; -update noar tt set b0='DORFHEW7V430A05KCH6OH2M09VM4Z2U' where id=3; -update noar ti set b0='DORFHEW7V430A05KCH6OH2M09VM4Z2U' where id=3; -update noar tt set v0='JEG71' where id=3; -update noar ti set v0='JEG71' where id=3; -update noar tt set b1='9ULCEX2XZ5KP73SPQTR32FSZCL4' where id=3; -update noar ti set b1='9ULCEX2XZ5KP73SPQTR32FSZCL4' where id=3; -update noar tt set v0='KC36VT2CIDR8FXV' where id=3; -update noar ti set v0='KC36VT2CIDR8FXV' where id=3; -update noar tt set b2='I9YA0SCIJ34HEOPS5111L0D' where id=3; -update noar ti set b2='I9YA0SCIJ34HEOPS5111L0D' where id=3; -update noar tt set v0='O67YLVNUWAH5NEKTB30D2TPN8X4FOP4D' where id=4; -update noar ti set v0='O67YLVNUWAH5NEKTB30D2TPN8X4FOP4D' where id=4; -update noar tt set b0='NK' where id=4; -update noar ti set b0='NK' where id=4; -update noar tt set v0='VLKYVN' where id=4; -update noar ti set v0='VLKYVN' where id=4; -update noar tt set b1='IJ' where id=4; -update noar ti set b1='IJ' where id=4; -update noar tt set v0='CT99GM7ILWOTCW97Z' where id=4; -update noar ti set v0='CT99GM7ILWOTCW97Z' where id=4; -update noar tt set b2='PUD7Z8YBGTG4WK1U84XYOH1I5' where id=4; -update noar ti set b2='PUD7Z8YBGTG4WK1U84XYOH1I5' where id=4; -update noar tt set v0='Q4FTV7U0QP00679ON8352BU0X0YS' where id=5; -update noar ti set v0='Q4FTV7U0QP00679ON8352BU0X0YS' where id=5; -update noar tt set b0='FW4I2' where id=5; -update noar ti set b0='FW4I2' where id=5; -update noar tt set v0='SR7YWKOJF45I1' where id=5; -update noar ti set v0='SR7YWKOJF45I1' where id=5; -update noar tt set b1='Y8I3I200H034LJTBAAK' where id=5; -update noar ti set b1='Y8I3I200H034LJTBAAK' where id=5; -update noar tt set v0='384TWQL739P440MA4' where id=5; -update noar ti set v0='384TWQL739P440MA4' where id=5; -update noar tt set b2='PGI85TB1DA8FO8' where id=5; -update noar ti set b2='PGI85TB1DA8FO8' where id=5; -update noar tt set v0='IRI7NYFWLCQNBGM4PNW9EDRLU07' where id=6; -update noar ti set v0='IRI7NYFWLCQNBGM4PNW9EDRLU07' where id=6; -update noar tt set b0='1IRJ' where id=6; -update noar ti set b0='1IRJ' where id=6; -update noar tt set v0='QR08NEK1SWDK43GKDEDDAIMV' where id=6; -update noar ti set v0='QR08NEK1SWDK43GKDEDDAIMV' where id=6; -update noar tt set b1='FLUAGBM' where id=6; -update noar ti set b1='FLUAGBM' where id=6; -update noar tt set v0='PSWBQSK86IE4Q7TSCG9DZBED3BP' where id=6; -update noar ti set v0='PSWBQSK86IE4Q7TSCG9DZBED3BP' where id=6; -update noar tt set b2='0REGOXSGZ8UYFXFTBC2ZFMORZ2' where id=6; -update noar ti set b2='0REGOXSGZ8UYFXFTBC2ZFMORZ2' where id=6; -update noar tt set v0='C' where id=7; -update noar ti set v0='C' where id=7; -update noar tt set b0='R' where id=7; -update noar ti set b0='R' where id=7; -update noar tt set v0='7C0Q313266KJISX6ER60HQYUEY' where id=7; -update noar ti set v0='7C0Q313266KJISX6ER60HQYUEY' where id=7; -update noar tt set b1='M4C7EV' where id=7; -update noar ti set b1='M4C7EV' where id=7; -update noar tt set v0='NNJK' where id=7; -update noar ti set v0='NNJK' where id=7; -update noar tt set b2='GHN5HV2ZV61GBO1MPA0RA9SAW61F' where id=7; -update noar ti set b2='GHN5HV2ZV61GBO1MPA0RA9SAW61F' where id=7; -update noar tt set v0='5' where id=8; -update noar ti set v0='5' where id=8; -update noar tt set b0='7C81N' where id=8; -update noar ti set b0='7C81N' where id=8; -update noar tt set v0='COR37X28U51YQHLOG' where id=8; -update noar ti set v0='COR37X28U51YQHLOG' where id=8; -update noar tt set b1='CB0J5X9E7758A' where id=8; -update noar ti set b1='CB0J5X9E7758A' where id=8; -update noar tt set v0='95NKZ' where id=8; -update noar ti set v0='95NKZ' where id=8; -update noar tt set b2='QCF7RYDWXVUOWLJQ22WUGIGVJ8HXPRR' where id=8; -update noar ti set b2='QCF7RYDWXVUOWLJQ22WUGIGVJ8HXPRR' where id=8; -update noar tt set v0='95FUZXMX68GFPRB844WUBJ0UKQNX' where id=9; -update noar ti set v0='95FUZXMX68GFPRB844WUBJ0UKQNX' where id=9; -update noar tt set b0='5NF8BYY5NO03' where id=9; -update noar ti set b0='5NF8BYY5NO03' where id=9; -update noar tt set v0='8AI' where id=9; -update noar ti set v0='8AI' where id=9; -update noar tt set b1='T5CPVMUV1OZMTDPM' where id=9; -update noar ti set b1='T5CPVMUV1OZMTDPM' where id=9; -update noar tt set v0='88DP' where id=9; -update noar ti set v0='88DP' where id=9; -update noar tt set b2='ZCZIN0VVO68R0QJODEVP4WZ381' where id=9; -update noar ti set b2='ZCZIN0VVO68R0QJODEVP4WZ381' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 mediumblob not null, - b1 longblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='V7ZWG4AZN' where id=1; -update noar ti set v0='V7ZWG4AZN' where id=1; -update noar tt set b0='TATBDD2ZM99M313' where id=1; -update noar ti set b0='TATBDD2ZM99M313' where id=1; -update noar tt set v0='03LC2CBJJ0BL74IK4ISJY' where id=1; -update noar ti set v0='03LC2CBJJ0BL74IK4ISJY' where id=1; -update noar tt set b1='AJAKRSLCG2GB53F5HN96' where id=1; -update noar ti set b1='AJAKRSLCG2GB53F5HN96' where id=1; -update noar tt set v0='5PM2W' where id=1; -update noar ti set v0='5PM2W' where id=1; -update noar tt set b2='UU5KAQ0CLOX84U016VEDS' where id=1; -update noar ti set b2='UU5KAQ0CLOX84U016VEDS' where id=1; -update noar tt set v0='210ZEO5YTH9U4' where id=2; -update noar ti set v0='210ZEO5YTH9U4' where id=2; -update noar tt set b0='RPS5LC05P2636TZP11ZHC4TKA9EGDD' where id=2; -update noar ti set b0='RPS5LC05P2636TZP11ZHC4TKA9EGDD' where id=2; -update noar tt set v0='CIUKVTTPFWQ4GJX1JICRFDHE' where id=2; -update noar ti set v0='CIUKVTTPFWQ4GJX1JICRFDHE' where id=2; -update noar tt set b1='5LUQKEQ0JI9SSXBQGD9P43232W' where id=2; -update noar ti set b1='5LUQKEQ0JI9SSXBQGD9P43232W' where id=2; -update noar tt set v0='9I0CLSUIA47H9ME' where id=2; -update noar ti set v0='9I0CLSUIA47H9ME' where id=2; -update noar tt set b2='DRK53ATV11Y3DDQLR7Q7R' where id=2; -update noar ti set b2='DRK53ATV11Y3DDQLR7Q7R' where id=2; -update noar tt set v0='PB0XVODYOWXTF84Q8OX6SD21' where id=3; -update noar ti set v0='PB0XVODYOWXTF84Q8OX6SD21' where id=3; -update noar tt set b0='HJZ9E7Q044US50K9VTSXDM' where id=3; -update noar ti set b0='HJZ9E7Q044US50K9VTSXDM' where id=3; -update noar tt set v0='5TMMHP3DQTDU7IFW8KCIK96YPDCU' where id=3; -update noar ti set v0='5TMMHP3DQTDU7IFW8KCIK96YPDCU' where id=3; -update noar tt set b1='OPYEFP5EXI0N' where id=3; -update noar ti set b1='OPYEFP5EXI0N' where id=3; -update noar tt set v0='HMSL2S' where id=3; -update noar ti set v0='HMSL2S' where id=3; -update noar tt set b2='JJFG1F0RC' where id=3; -update noar ti set b2='JJFG1F0RC' where id=3; -update noar tt set v0='5RE63AKKYUL16QBPQ929IW5NB9' where id=4; -update noar ti set v0='5RE63AKKYUL16QBPQ929IW5NB9' where id=4; -update noar tt set b0='4F91R01XDIYTY7PUS8DX' where id=4; -update noar ti set b0='4F91R01XDIYTY7PUS8DX' where id=4; -update noar tt set v0='XM2LWTBVF6WNNR1Y' where id=4; -update noar ti set v0='XM2LWTBVF6WNNR1Y' where id=4; -update noar tt set b1='FKZ7RP1ZW8YO49BZOUNJGZWL9XA47HZZ' where id=4; -update noar ti set b1='FKZ7RP1ZW8YO49BZOUNJGZWL9XA47HZZ' where id=4; -update noar tt set v0='Y1EDT095QEUGSC80O9QXH2YPA' where id=4; -update noar ti set v0='Y1EDT095QEUGSC80O9QXH2YPA' where id=4; -update noar tt set b2='7U0W7OCG8' where id=4; -update noar ti set b2='7U0W7OCG8' where id=4; -update noar tt set v0='3XVPGMXMQLK70U3' where id=5; -update noar ti set v0='3XVPGMXMQLK70U3' where id=5; -update noar tt set b0='Y4QWDP12JWF36SF1' where id=5; -update noar ti set b0='Y4QWDP12JWF36SF1' where id=5; -update noar tt set v0='D2H16PRZVJV320S5IJ' where id=5; -update noar ti set v0='D2H16PRZVJV320S5IJ' where id=5; -update noar tt set b1='H0HEHKKSFQZGIS' where id=5; -update noar ti set b1='H0HEHKKSFQZGIS' where id=5; -update noar tt set v0='1LK5USMV06RCN7UW6QNAUKN6' where id=5; -update noar ti set v0='1LK5USMV06RCN7UW6QNAUKN6' where id=5; -update noar tt set b2='S8UCVUCJUTL7SX2UW0O5H3PJ' where id=5; -update noar ti set b2='S8UCVUCJUTL7SX2UW0O5H3PJ' where id=5; -update noar tt set v0='2WFOQNFRK7RG1LHKM69YAX3DU' where id=6; -update noar ti set v0='2WFOQNFRK7RG1LHKM69YAX3DU' where id=6; -update noar tt set b0='MOXEFXE7O86GBF149569NE83BRULB' where id=6; -update noar ti set b0='MOXEFXE7O86GBF149569NE83BRULB' where id=6; -update noar tt set v0='W381UCX' where id=6; -update noar ti set v0='W381UCX' where id=6; -update noar tt set b1='J75YLBPR6MQ' where id=6; -update noar ti set b1='J75YLBPR6MQ' where id=6; -update noar tt set v0='W7AOOR8I9455' where id=6; -update noar ti set v0='W7AOOR8I9455' where id=6; -update noar tt set b2='P26M' where id=6; -update noar ti set b2='P26M' where id=6; -update noar tt set v0='CL3WQ1K115R' where id=7; -update noar ti set v0='CL3WQ1K115R' where id=7; -update noar tt set b0='HNAN9AVT0AOT2OFX6QK1279S' where id=7; -update noar ti set b0='HNAN9AVT0AOT2OFX6QK1279S' where id=7; -update noar tt set v0='BNU3MYAPQ86OOQI8K2XJ0X' where id=7; -update noar ti set v0='BNU3MYAPQ86OOQI8K2XJ0X' where id=7; -update noar tt set b1='3SB8DB8XRHCJQ2M9YE0H9BS1T51' where id=7; -update noar ti set b1='3SB8DB8XRHCJQ2M9YE0H9BS1T51' where id=7; -update noar tt set v0='IH390HHQZUMM67V2U8ETY' where id=7; -update noar ti set v0='IH390HHQZUMM67V2U8ETY' where id=7; -update noar tt set b2='HWMGCETHG' where id=7; -update noar ti set b2='HWMGCETHG' where id=7; -update noar tt set v0='ZPD0QKTZY8GGA' where id=8; -update noar ti set v0='ZPD0QKTZY8GGA' where id=8; -update noar tt set b0='SPPEFGAI' where id=8; -update noar ti set b0='SPPEFGAI' where id=8; -update noar tt set v0='RTFOKFTU2KIMD' where id=8; -update noar ti set v0='RTFOKFTU2KIMD' where id=8; -update noar tt set b1='58' where id=8; -update noar ti set b1='58' where id=8; -update noar tt set v0='DUIYVWOW' where id=8; -update noar ti set v0='DUIYVWOW' where id=8; -update noar tt set b2='ZL0M4SSJ488QF1RRW9' where id=8; -update noar ti set b2='ZL0M4SSJ488QF1RRW9' where id=8; -update noar tt set v0='IMBQX11WXDZD23' where id=9; -update noar ti set v0='IMBQX11WXDZD23' where id=9; -update noar tt set b0='LR95KY4LF9LBODKVVYP6VNQB5A97V' where id=9; -update noar ti set b0='LR95KY4LF9LBODKVVYP6VNQB5A97V' where id=9; -update noar tt set v0='9G2XMTYWQ9DZHC6R2SZFMHM7FIN2FXNE' where id=9; -update noar ti set v0='9G2XMTYWQ9DZHC6R2SZFMHM7FIN2FXNE' where id=9; -update noar tt set b1='YJBADF389CUS9CZBY9K3T07ICL4' where id=9; -update noar ti set b1='YJBADF389CUS9CZBY9K3T07ICL4' where id=9; -update noar tt set v0='GLDLMJP3SGKJ1IIAJPJ' where id=9; -update noar ti set v0='GLDLMJP3SGKJ1IIAJPJ' where id=9; -update noar tt set b2='Y5SXJBOJP7OU8I251M29ZNEAWF98Z' where id=9; -update noar ti set b2='Y5SXJBOJP7OU8I251M29ZNEAWF98Z' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 mediumblob null, - b1 longblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='HEMYCHEGMT4Y1B9' where id=1; -update noar ti set v0='HEMYCHEGMT4Y1B9' where id=1; -update noar tt set b0='FFNXWDY2QWMMI8GC' where id=1; -update noar ti set b0='FFNXWDY2QWMMI8GC' where id=1; -update noar tt set v0='RE6A13N6VX4X7WRFBDODLPKG38MTP' where id=1; -update noar ti set v0='RE6A13N6VX4X7WRFBDODLPKG38MTP' where id=1; -update noar tt set b1='N' where id=1; -update noar ti set b1='N' where id=1; -update noar tt set v0='ZUEDPH7OKOEK2A' where id=1; -update noar ti set v0='ZUEDPH7OKOEK2A' where id=1; -update noar tt set b2='PZKKNBCMF7HFB2Z622Y' where id=1; -update noar ti set b2='PZKKNBCMF7HFB2Z622Y' where id=1; -update noar tt set v0='O326QBS9C' where id=2; -update noar ti set v0='O326QBS9C' where id=2; -update noar tt set b0='83XA2ZJWA6FIV8IE2L6PMYV460RF7J' where id=2; -update noar ti set b0='83XA2ZJWA6FIV8IE2L6PMYV460RF7J' where id=2; -update noar tt set v0='IVBTK11YVL' where id=2; -update noar ti set v0='IVBTK11YVL' where id=2; -update noar tt set b1='62LZS7HF1Y151FFD09AZC70WUBBRE5FC' where id=2; -update noar ti set b1='62LZS7HF1Y151FFD09AZC70WUBBRE5FC' where id=2; -update noar tt set v0='UKT9TGCHU2IQOT2BM3TEPMIOKTJJ3LWE' where id=2; -update noar ti set v0='UKT9TGCHU2IQOT2BM3TEPMIOKTJJ3LWE' where id=2; -update noar tt set b2='OFCOACO' where id=2; -update noar ti set b2='OFCOACO' where id=2; -update noar tt set v0='3UD24CUV4J837VZZMOOZ14DMGR7CL' where id=3; -update noar ti set v0='3UD24CUV4J837VZZMOOZ14DMGR7CL' where id=3; -update noar tt set b0='H118W0CPF67WCLB0H' where id=3; -update noar ti set b0='H118W0CPF67WCLB0H' where id=3; -update noar tt set v0='YEEL8JQUQA081O7FHKEKG0UFHWCF' where id=3; -update noar ti set v0='YEEL8JQUQA081O7FHKEKG0UFHWCF' where id=3; -update noar tt set b1='AR2AHT9YYH5BGWNEFV2HJ5F8ZPN2X1' where id=3; -update noar ti set b1='AR2AHT9YYH5BGWNEFV2HJ5F8ZPN2X1' where id=3; -update noar tt set v0='VR6HMN8I7XJ7B' where id=3; -update noar ti set v0='VR6HMN8I7XJ7B' where id=3; -update noar tt set b2='TZSEX34FFOQXBTS36BP2DIW8SDTS' where id=3; -update noar ti set b2='TZSEX34FFOQXBTS36BP2DIW8SDTS' where id=3; -update noar tt set v0='GJ5O8KZWHXT9NRAET8U2OH9NA7GNXEYO' where id=4; -update noar ti set v0='GJ5O8KZWHXT9NRAET8U2OH9NA7GNXEYO' where id=4; -update noar tt set b0='WKERUZFBWX2TK2RU4NYGFT' where id=4; -update noar ti set b0='WKERUZFBWX2TK2RU4NYGFT' where id=4; -update noar tt set v0='IKLNC2XN0LRFTWDOLYA4P' where id=4; -update noar ti set v0='IKLNC2XN0LRFTWDOLYA4P' where id=4; -update noar tt set b1='5C6' where id=4; -update noar ti set b1='5C6' where id=4; -update noar tt set v0='0HP0DQ87N0UUZXUVBSD' where id=4; -update noar ti set v0='0HP0DQ87N0UUZXUVBSD' where id=4; -update noar tt set b2='PCB45590USUWTZTZJZAB4YG1E8' where id=4; -update noar ti set b2='PCB45590USUWTZTZJZAB4YG1E8' where id=4; -update noar tt set v0='WI' where id=5; -update noar ti set v0='WI' where id=5; -update noar tt set b0='B6G' where id=5; -update noar ti set b0='B6G' where id=5; -update noar tt set v0='0NEJKWGH3E6RQM2EO2G4M31B' where id=5; -update noar ti set v0='0NEJKWGH3E6RQM2EO2G4M31B' where id=5; -update noar tt set b1='VTA' where id=5; -update noar ti set b1='VTA' where id=5; -update noar tt set v0='FHN7PZUPR0K5MZBZC7UQKY57I' where id=5; -update noar ti set v0='FHN7PZUPR0K5MZBZC7UQKY57I' where id=5; -update noar tt set b2='JWC437U603LHDVC6' where id=5; -update noar ti set b2='JWC437U603LHDVC6' where id=5; -update noar tt set v0='W95HR' where id=6; -update noar ti set v0='W95HR' where id=6; -update noar tt set b0='KW1L' where id=6; -update noar ti set b0='KW1L' where id=6; -update noar tt set v0='W3PKX3RMYXH0VO4S0X03ZCOG4EP' where id=6; -update noar ti set v0='W3PKX3RMYXH0VO4S0X03ZCOG4EP' where id=6; -update noar tt set b1='3M' where id=6; -update noar ti set b1='3M' where id=6; -update noar tt set v0='58SYRP3KAZWEZCW0KCKL0P6C1OP3' where id=6; -update noar ti set v0='58SYRP3KAZWEZCW0KCKL0P6C1OP3' where id=6; -update noar tt set b2='G' where id=6; -update noar ti set b2='G' where id=6; -update noar tt set v0='1V69FB47T49HMDZJ6WXV7HYNXY4S' where id=7; -update noar ti set v0='1V69FB47T49HMDZJ6WXV7HYNXY4S' where id=7; -update noar tt set b0='S4WKPRVBAQWOJHPQ84PBX8PC2BZR' where id=7; -update noar ti set b0='S4WKPRVBAQWOJHPQ84PBX8PC2BZR' where id=7; -update noar tt set v0='U9ZG9I7RFDV1J4H9MCP1IBXCIW' where id=7; -update noar ti set v0='U9ZG9I7RFDV1J4H9MCP1IBXCIW' where id=7; -update noar tt set b1='Z6VEJCBCNSM7BM2G' where id=7; -update noar ti set b1='Z6VEJCBCNSM7BM2G' where id=7; -update noar tt set v0='CHW4AYEMTEZ0Y84HJBTPD40TR03XZ' where id=7; -update noar ti set v0='CHW4AYEMTEZ0Y84HJBTPD40TR03XZ' where id=7; -update noar tt set b2='WICZLVZ1DA6PMSMQ1JPA2' where id=7; -update noar ti set b2='WICZLVZ1DA6PMSMQ1JPA2' where id=7; -update noar tt set v0='JBCKL91QVNSC' where id=8; -update noar ti set v0='JBCKL91QVNSC' where id=8; -update noar tt set b0='VU' where id=8; -update noar ti set b0='VU' where id=8; -update noar tt set v0='TKRV0AGLFXH9' where id=8; -update noar ti set v0='TKRV0AGLFXH9' where id=8; -update noar tt set b1='FYZTUUXIDOM2JC7D5UDTFNVEXNKC67V' where id=8; -update noar ti set b1='FYZTUUXIDOM2JC7D5UDTFNVEXNKC67V' where id=8; -update noar tt set v0='ZASLCM7TE29EMVXOLZ4' where id=8; -update noar ti set v0='ZASLCM7TE29EMVXOLZ4' where id=8; -update noar tt set b2='385MA3E0O1D2K0ANMSJX6I32B' where id=8; -update noar ti set b2='385MA3E0O1D2K0ANMSJX6I32B' where id=8; -update noar tt set v0='R9QS4' where id=9; -update noar ti set v0='R9QS4' where id=9; -update noar tt set b0='01XPT9N4' where id=9; -update noar ti set b0='01XPT9N4' where id=9; -update noar tt set v0='O4Z' where id=9; -update noar ti set v0='O4Z' where id=9; -update noar tt set b1='NF5VSD2PZT5W57FER4VY8Z2DQ8I1LNJ' where id=9; -update noar ti set b1='NF5VSD2PZT5W57FER4VY8Z2DQ8I1LNJ' where id=9; -update noar tt set v0='5SVC884CFGCG77UER3NUZ95KY5M4Q' where id=9; -update noar ti set v0='5SVC884CFGCG77UER3NUZ95KY5M4Q' where id=9; -update noar tt set b2='8B' where id=9; -update noar ti set b2='8B' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 mediumblob null, - b1 longblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='VBNLXDWCY8P0D827ZS' where id=1; -update noar ti set v0='VBNLXDWCY8P0D827ZS' where id=1; -update noar tt set b0='HGOQ86QPAJELJY' where id=1; -update noar ti set b0='HGOQ86QPAJELJY' where id=1; -update noar tt set v0='D11ZZAFZDELOMBJ9F4' where id=1; -update noar ti set v0='D11ZZAFZDELOMBJ9F4' where id=1; -update noar tt set b1='W1HW4' where id=1; -update noar ti set b1='W1HW4' where id=1; -update noar tt set v0='JG8L8NA067' where id=1; -update noar ti set v0='JG8L8NA067' where id=1; -update noar tt set b2='I' where id=1; -update noar ti set b2='I' where id=1; -update noar tt set v0='WU6IU' where id=2; -update noar ti set v0='WU6IU' where id=2; -update noar tt set b0='2DL5F2ZV0' where id=2; -update noar ti set b0='2DL5F2ZV0' where id=2; -update noar tt set v0='GOUMQ5RXP5IF0S64UXY5UX' where id=2; -update noar ti set v0='GOUMQ5RXP5IF0S64UXY5UX' where id=2; -update noar tt set b1='9Q4XP7Z3O2DC5010C4L2JA' where id=2; -update noar ti set b1='9Q4XP7Z3O2DC5010C4L2JA' where id=2; -update noar tt set v0='6I2SHG3IOPRDKOI9UYJN6' where id=2; -update noar ti set v0='6I2SHG3IOPRDKOI9UYJN6' where id=2; -update noar tt set b2='6WSWK5E9EBJVXBKVD7IJWFP57VNY' where id=2; -update noar ti set b2='6WSWK5E9EBJVXBKVD7IJWFP57VNY' where id=2; -update noar tt set v0='3K43ZFVV8Y8' where id=3; -update noar ti set v0='3K43ZFVV8Y8' where id=3; -update noar tt set b0='X18B2' where id=3; -update noar ti set b0='X18B2' where id=3; -update noar tt set v0='1AS08QZHPYLM99KTAS58' where id=3; -update noar ti set v0='1AS08QZHPYLM99KTAS58' where id=3; -update noar tt set b1='Q9ANGZ' where id=3; -update noar ti set b1='Q9ANGZ' where id=3; -update noar tt set v0='70QIT25GLE' where id=3; -update noar ti set v0='70QIT25GLE' where id=3; -update noar tt set b2='PPJLC0N1IFY4K6KJ' where id=3; -update noar ti set b2='PPJLC0N1IFY4K6KJ' where id=3; -update noar tt set v0='TN4GIH4YSG411YD3' where id=4; -update noar ti set v0='TN4GIH4YSG411YD3' where id=4; -update noar tt set b0='YQZYG98APFB9HZ360L7WN9GCXDSHC6' where id=4; -update noar ti set b0='YQZYG98APFB9HZ360L7WN9GCXDSHC6' where id=4; -update noar tt set v0='BW00HBMU4U' where id=4; -update noar ti set v0='BW00HBMU4U' where id=4; -update noar tt set b1='7144MN0RURPUP4UZGQEVGRGG8A4CY4W' where id=4; -update noar ti set b1='7144MN0RURPUP4UZGQEVGRGG8A4CY4W' where id=4; -update noar tt set v0='ZMWJ2SULYN8RGNJZ863LNJB0AFCGWU' where id=4; -update noar ti set v0='ZMWJ2SULYN8RGNJZ863LNJB0AFCGWU' where id=4; -update noar tt set b2='1SC2' where id=4; -update noar ti set b2='1SC2' where id=4; -update noar tt set v0='O7' where id=5; -update noar ti set v0='O7' where id=5; -update noar tt set b0='2X54APC5PR3DS4KH04VGE' where id=5; -update noar ti set b0='2X54APC5PR3DS4KH04VGE' where id=5; -update noar tt set v0='HVY5EKT1ZXCRJ' where id=5; -update noar ti set v0='HVY5EKT1ZXCRJ' where id=5; -update noar tt set b1='WTPTUF' where id=5; -update noar ti set b1='WTPTUF' where id=5; -update noar tt set v0='KHD78EKF9P5HSYN0KDYAUGC9' where id=5; -update noar ti set v0='KHD78EKF9P5HSYN0KDYAUGC9' where id=5; -update noar tt set b2='J477EQG00AHOH3WA9' where id=5; -update noar ti set b2='J477EQG00AHOH3WA9' where id=5; -update noar tt set v0='LCFGNS92EOU6YKAF' where id=6; -update noar ti set v0='LCFGNS92EOU6YKAF' where id=6; -update noar tt set b0='O3U1RW1BOJYOP3J' where id=6; -update noar ti set b0='O3U1RW1BOJYOP3J' where id=6; -update noar tt set v0='LA17XKMM6XURUMQXMSW38' where id=6; -update noar ti set v0='LA17XKMM6XURUMQXMSW38' where id=6; -update noar tt set b1='N' where id=6; -update noar ti set b1='N' where id=6; -update noar tt set v0='MTFL4RSOQ98VKT1' where id=6; -update noar ti set v0='MTFL4RSOQ98VKT1' where id=6; -update noar tt set b2='CTSJ5TE2Z85Y4SHXSG' where id=6; -update noar ti set b2='CTSJ5TE2Z85Y4SHXSG' where id=6; -update noar tt set v0='LEM2DK4XYJGAMQL' where id=7; -update noar ti set v0='LEM2DK4XYJGAMQL' where id=7; -update noar tt set b0='CNHPI6OQPRBMR' where id=7; -update noar ti set b0='CNHPI6OQPRBMR' where id=7; -update noar tt set v0='0T31' where id=7; -update noar ti set v0='0T31' where id=7; -update noar tt set b1='KWTYAN3JHT7RVQGOMMC8Z' where id=7; -update noar ti set b1='KWTYAN3JHT7RVQGOMMC8Z' where id=7; -update noar tt set v0='DT2AYTM1RYB5ELQKU3B2' where id=7; -update noar ti set v0='DT2AYTM1RYB5ELQKU3B2' where id=7; -update noar tt set b2='2H5XXD4MLKVUKKLHM6' where id=7; -update noar ti set b2='2H5XXD4MLKVUKKLHM6' where id=7; -update noar tt set v0='XII6KEUC23X' where id=8; -update noar ti set v0='XII6KEUC23X' where id=8; -update noar tt set b0='KM9J386EX9MJLD79POMU4' where id=8; -update noar ti set b0='KM9J386EX9MJLD79POMU4' where id=8; -update noar tt set v0='0JLFR7G9QWSUO' where id=8; -update noar ti set v0='0JLFR7G9QWSUO' where id=8; -update noar tt set b1='DLAAOUBXYGC87UIV88LM9' where id=8; -update noar ti set b1='DLAAOUBXYGC87UIV88LM9' where id=8; -update noar tt set v0='JKVYZY6K0RCCLRMEX0E' where id=8; -update noar ti set v0='JKVYZY6K0RCCLRMEX0E' where id=8; -update noar tt set b2='EW5AG' where id=8; -update noar ti set b2='EW5AG' where id=8; -update noar tt set v0='BJ3I5IB' where id=9; -update noar ti set v0='BJ3I5IB' where id=9; -update noar tt set b0='5QNVTA0D23UQ' where id=9; -update noar ti set b0='5QNVTA0D23UQ' where id=9; -update noar tt set v0='LLROIM1QK2YUBGD2SCAAGEE90Y' where id=9; -update noar ti set v0='LLROIM1QK2YUBGD2SCAAGEE90Y' where id=9; -update noar tt set b1='BLBPU6CTR3FZH71YP8WEYRGS1LE33EP' where id=9; -update noar ti set b1='BLBPU6CTR3FZH71YP8WEYRGS1LE33EP' where id=9; -update noar tt set v0='W6YY3MSY6OGNZL5YDGJ95' where id=9; -update noar ti set v0='W6YY3MSY6OGNZL5YDGJ95' where id=9; -update noar tt set b2='1ES1IN7ZEVXSNP9G2T' where id=9; -update noar ti set b2='1ES1IN7ZEVXSNP9G2T' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 mediumblob not null, - b1 longblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='NNCHWZG' where id=1; -update noar ti set v0='NNCHWZG' where id=1; -update noar tt set b0='V62LJQQ1N8Z' where id=1; -update noar ti set b0='V62LJQQ1N8Z' where id=1; -update noar tt set v0='UP6JH766TL8DIPJW26GG' where id=1; -update noar ti set v0='UP6JH766TL8DIPJW26GG' where id=1; -update noar tt set b1='972' where id=1; -update noar ti set b1='972' where id=1; -update noar tt set v0='V76YTXYWIB5CQE3JP7WH31' where id=1; -update noar ti set v0='V76YTXYWIB5CQE3JP7WH31' where id=1; -update noar tt set b2='UOQ975H6L3E2L761L978SIFX' where id=1; -update noar ti set b2='UOQ975H6L3E2L761L978SIFX' where id=1; -update noar tt set v0='6V8F8IBA24O20SELD' where id=2; -update noar ti set v0='6V8F8IBA24O20SELD' where id=2; -update noar tt set b0='C7UHQE5LRMP6GCS9LJHP3PJ3' where id=2; -update noar ti set b0='C7UHQE5LRMP6GCS9LJHP3PJ3' where id=2; -update noar tt set v0='I8KDINPV3HQDCOFVSTOI' where id=2; -update noar ti set v0='I8KDINPV3HQDCOFVSTOI' where id=2; -update noar tt set b1='GNHXYR7U8X' where id=2; -update noar ti set b1='GNHXYR7U8X' where id=2; -update noar tt set v0='IL8' where id=2; -update noar ti set v0='IL8' where id=2; -update noar tt set b2='V9NL7V5CEW4EOUIML3PGE0YA2' where id=2; -update noar ti set b2='V9NL7V5CEW4EOUIML3PGE0YA2' where id=2; -update noar tt set v0='S63FMJ' where id=3; -update noar ti set v0='S63FMJ' where id=3; -update noar tt set b0='VRLARBNL5LFZZXO' where id=3; -update noar ti set b0='VRLARBNL5LFZZXO' where id=3; -update noar tt set v0='9HBT0A45DHHLBMNK6DOEZYI' where id=3; -update noar ti set v0='9HBT0A45DHHLBMNK6DOEZYI' where id=3; -update noar tt set b1='QLXOSRJSFXFOMJUXSBYHU' where id=3; -update noar ti set b1='QLXOSRJSFXFOMJUXSBYHU' where id=3; -update noar tt set v0='8KDWYIM24DDZD8GBGZ' where id=3; -update noar ti set v0='8KDWYIM24DDZD8GBGZ' where id=3; -update noar tt set b2='W0M52DI0AXF3ITN9FA68MFZDHL1AO7A' where id=3; -update noar ti set b2='W0M52DI0AXF3ITN9FA68MFZDHL1AO7A' where id=3; -update noar tt set v0='816JGL6G79SMB' where id=4; -update noar ti set v0='816JGL6G79SMB' where id=4; -update noar tt set b0='172JZ8EV6BG5E4BS' where id=4; -update noar ti set b0='172JZ8EV6BG5E4BS' where id=4; -update noar tt set v0='6CA538UKIEPYDC7MA2BLT0' where id=4; -update noar ti set v0='6CA538UKIEPYDC7MA2BLT0' where id=4; -update noar tt set b1='2S25DBO8AGY7QYZ9RX9' where id=4; -update noar ti set b1='2S25DBO8AGY7QYZ9RX9' where id=4; -update noar tt set v0='VBHPTZFVTJUHGGE71L2O' where id=4; -update noar ti set v0='VBHPTZFVTJUHGGE71L2O' where id=4; -update noar tt set b2='1ZBLWOA2SI93MVUVNBE82WXY71SQHQ' where id=4; -update noar ti set b2='1ZBLWOA2SI93MVUVNBE82WXY71SQHQ' where id=4; -update noar tt set v0='FW7643Z' where id=5; -update noar ti set v0='FW7643Z' where id=5; -update noar tt set b0='ZN813I0S8998E31Q1QFMHHBU' where id=5; -update noar ti set b0='ZN813I0S8998E31Q1QFMHHBU' where id=5; -update noar tt set v0='KS9LRDYKYKJEUA8VT887' where id=5; -update noar ti set v0='KS9LRDYKYKJEUA8VT887' where id=5; -update noar tt set b1='CXN90DC77STQC8FZBC31' where id=5; -update noar ti set b1='CXN90DC77STQC8FZBC31' where id=5; -update noar tt set v0='HZSW3GC2GD5F1U8SYG16TNIN' where id=5; -update noar ti set v0='HZSW3GC2GD5F1U8SYG16TNIN' where id=5; -update noar tt set b2='PAHYVJY6K5EAMHW2R674' where id=5; -update noar ti set b2='PAHYVJY6K5EAMHW2R674' where id=5; -update noar tt set v0='KYQ2YM4SP8T52EDP7' where id=6; -update noar ti set v0='KYQ2YM4SP8T52EDP7' where id=6; -update noar tt set b0='QGAJ4I' where id=6; -update noar ti set b0='QGAJ4I' where id=6; -update noar tt set v0='HVBHKHZQ1JK4H1QHHQ3TT' where id=6; -update noar ti set v0='HVBHKHZQ1JK4H1QHHQ3TT' where id=6; -update noar tt set b1='6W9U8TSLOW1BGPJRO3LLA7KMACW9' where id=6; -update noar ti set b1='6W9U8TSLOW1BGPJRO3LLA7KMACW9' where id=6; -update noar tt set v0='W14WY3M9SSHZ39C7P54RN1WPJ9YZAB0' where id=6; -update noar ti set v0='W14WY3M9SSHZ39C7P54RN1WPJ9YZAB0' where id=6; -update noar tt set b2='10LWIW6DZJAC' where id=6; -update noar ti set b2='10LWIW6DZJAC' where id=6; -update noar tt set v0='AZJVV74K5E60TAP0R7BXR8N0BL' where id=7; -update noar ti set v0='AZJVV74K5E60TAP0R7BXR8N0BL' where id=7; -update noar tt set b0='HTRBI14ZEVI' where id=7; -update noar ti set b0='HTRBI14ZEVI' where id=7; -update noar tt set v0='YPZDK29RF' where id=7; -update noar ti set v0='YPZDK29RF' where id=7; -update noar tt set b1='IF42WK3QIJDZ2U8Z5PVS53' where id=7; -update noar ti set b1='IF42WK3QIJDZ2U8Z5PVS53' where id=7; -update noar tt set v0='EQ6Q8EY87BHUD9BH762SKD1EYY8' where id=7; -update noar ti set v0='EQ6Q8EY87BHUD9BH762SKD1EYY8' where id=7; -update noar tt set b2='BKC0IGEBLGMXCBK873X0UG4TCO9' where id=7; -update noar ti set b2='BKC0IGEBLGMXCBK873X0UG4TCO9' where id=7; -update noar tt set v0='GVOYN7JMCCC' where id=8; -update noar ti set v0='GVOYN7JMCCC' where id=8; -update noar tt set b0='R22TS1O1GEY34' where id=8; -update noar ti set b0='R22TS1O1GEY34' where id=8; -update noar tt set v0='4RN0AJO7WY30RWALO30QQ2401' where id=8; -update noar ti set v0='4RN0AJO7WY30RWALO30QQ2401' where id=8; -update noar tt set b1='35EU66WGWFFKL64MH2NVQJ9ZCDK' where id=8; -update noar ti set b1='35EU66WGWFFKL64MH2NVQJ9ZCDK' where id=8; -update noar tt set v0='Y8' where id=8; -update noar ti set v0='Y8' where id=8; -update noar tt set b2='QLTZBSKPUFAMX1ZAC' where id=8; -update noar ti set b2='QLTZBSKPUFAMX1ZAC' where id=8; -update noar tt set v0='CECRHPZC3MFG155D' where id=9; -update noar ti set v0='CECRHPZC3MFG155D' where id=9; -update noar tt set b0='8GR46T3GF5TN' where id=9; -update noar ti set b0='8GR46T3GF5TN' where id=9; -update noar tt set v0='W2TCPWFKBPA' where id=9; -update noar ti set v0='W2TCPWFKBPA' where id=9; -update noar tt set b1='ZS20088B3OEEY8X1YRHC8BORTB0TSMEW' where id=9; -update noar ti set b1='ZS20088B3OEEY8X1YRHC8BORTB0TSMEW' where id=9; -update noar tt set v0='FWBPYW42JN3FSCW00' where id=9; -update noar ti set v0='FWBPYW42JN3FSCW00' where id=9; -update noar tt set b2='AM9E34IYOFC' where id=9; -update noar ti set b2='AM9E34IYOFC' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 mediumblob not null, - b1 longblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='PS8276JENLW25W7AWMZB3LN5KF' where id=1; -update noar ti set v0='PS8276JENLW25W7AWMZB3LN5KF' where id=1; -update noar tt set b0='FQ62XXOGQPK14KWKHKDT' where id=1; -update noar ti set b0='FQ62XXOGQPK14KWKHKDT' where id=1; -update noar tt set v0='593GWDBUDFVYIHVW2QYM0KUFWL694M' where id=1; -update noar ti set v0='593GWDBUDFVYIHVW2QYM0KUFWL694M' where id=1; -update noar tt set b1='RW0' where id=1; -update noar ti set b1='RW0' where id=1; -update noar tt set v0='ZW71DEKRQHWI2HX7K2' where id=1; -update noar ti set v0='ZW71DEKRQHWI2HX7K2' where id=1; -update noar tt set b2='TIRRRSO01XQ24MGKG' where id=1; -update noar ti set b2='TIRRRSO01XQ24MGKG' where id=1; -update noar tt set v0='AW6GICB7IOEUDJXTPPZQX' where id=2; -update noar ti set v0='AW6GICB7IOEUDJXTPPZQX' where id=2; -update noar tt set b0='EP5HNJD059W00PXYSDH' where id=2; -update noar ti set b0='EP5HNJD059W00PXYSDH' where id=2; -update noar tt set v0='Z4C4ULL7Q20C5S3IILVZCZRPY3E' where id=2; -update noar ti set v0='Z4C4ULL7Q20C5S3IILVZCZRPY3E' where id=2; -update noar tt set b1='7VBK' where id=2; -update noar ti set b1='7VBK' where id=2; -update noar tt set v0='38L418T35CUX91R4Y8HR9DW' where id=2; -update noar ti set v0='38L418T35CUX91R4Y8HR9DW' where id=2; -update noar tt set b2='7AKF9CTL528AXDYY2G9B31JO6O' where id=2; -update noar ti set b2='7AKF9CTL528AXDYY2G9B31JO6O' where id=2; -update noar tt set v0='JRI0NYXJET2O52DNLHA2' where id=3; -update noar ti set v0='JRI0NYXJET2O52DNLHA2' where id=3; -update noar tt set b0='ERIVS2PFP' where id=3; -update noar ti set b0='ERIVS2PFP' where id=3; -update noar tt set v0='E1VHJS7OPQK5PI' where id=3; -update noar ti set v0='E1VHJS7OPQK5PI' where id=3; -update noar tt set b1='ZJPITF0GVESBKINVI5P1QNPKJVVE' where id=3; -update noar ti set b1='ZJPITF0GVESBKINVI5P1QNPKJVVE' where id=3; -update noar tt set v0='R08MVVJ8NONN9S2KCU063XAUTGLBAZ' where id=3; -update noar ti set v0='R08MVVJ8NONN9S2KCU063XAUTGLBAZ' where id=3; -update noar tt set b2='I52ES10M7L4TXORS' where id=3; -update noar ti set b2='I52ES10M7L4TXORS' where id=3; -update noar tt set v0='223U0E7F2EXKOMFI2E' where id=4; -update noar ti set v0='223U0E7F2EXKOMFI2E' where id=4; -update noar tt set b0='ZF641A' where id=4; -update noar ti set b0='ZF641A' where id=4; -update noar tt set v0='P8DQ1M0W5ONK2' where id=4; -update noar ti set v0='P8DQ1M0W5ONK2' where id=4; -update noar tt set b1='RDMQ3Q7YJW13CD' where id=4; -update noar ti set b1='RDMQ3Q7YJW13CD' where id=4; -update noar tt set v0='XW9LZLLRA8XVUN' where id=4; -update noar ti set v0='XW9LZLLRA8XVUN' where id=4; -update noar tt set b2='OJFYL' where id=4; -update noar ti set b2='OJFYL' where id=4; -update noar tt set v0='MZGAQ08ADA8898CLLQKRKRH8KT9O6' where id=5; -update noar ti set v0='MZGAQ08ADA8898CLLQKRKRH8KT9O6' where id=5; -update noar tt set b0='V5L442FIMKA7U8' where id=5; -update noar ti set b0='V5L442FIMKA7U8' where id=5; -update noar tt set v0='2J4CSIV3GI415AHC' where id=5; -update noar ti set v0='2J4CSIV3GI415AHC' where id=5; -update noar tt set b1='ID0BB5P5XM5GWRKR' where id=5; -update noar ti set b1='ID0BB5P5XM5GWRKR' where id=5; -update noar tt set v0='PP18FE7JX3OITBTC7X7' where id=5; -update noar ti set v0='PP18FE7JX3OITBTC7X7' where id=5; -update noar tt set b2='0W6QFAA9MPB4M2A90O2H58A' where id=5; -update noar ti set b2='0W6QFAA9MPB4M2A90O2H58A' where id=5; -update noar tt set v0='LWRKR8J' where id=6; -update noar ti set v0='LWRKR8J' where id=6; -update noar tt set b0='AHZTRCOTKJO0E' where id=6; -update noar ti set b0='AHZTRCOTKJO0E' where id=6; -update noar tt set v0='H5WHHBYH350Q3' where id=6; -update noar ti set v0='H5WHHBYH350Q3' where id=6; -update noar tt set b1='1EEIEPCDY5OCB7CO622UN' where id=6; -update noar ti set b1='1EEIEPCDY5OCB7CO622UN' where id=6; -update noar tt set v0='A98DPKO' where id=6; -update noar ti set v0='A98DPKO' where id=6; -update noar tt set b2='BJAFLN7RY7E3QB2Q' where id=6; -update noar ti set b2='BJAFLN7RY7E3QB2Q' where id=6; -update noar tt set v0='3QBNUE4ONWQHXJ8NTHER' where id=7; -update noar ti set v0='3QBNUE4ONWQHXJ8NTHER' where id=7; -update noar tt set b0='HFW09CGB1L4EZA2E76KDE9G0SCF' where id=7; -update noar ti set b0='HFW09CGB1L4EZA2E76KDE9G0SCF' where id=7; -update noar tt set v0='HLEK8UNBAD3D4W6VT7QZXQFZ1JI' where id=7; -update noar ti set v0='HLEK8UNBAD3D4W6VT7QZXQFZ1JI' where id=7; -update noar tt set b1='UVN3' where id=7; -update noar ti set b1='UVN3' where id=7; -update noar tt set v0='MU' where id=7; -update noar ti set v0='MU' where id=7; -update noar tt set b2='SPHNA52UAJEGA6AY22VHH0EUS0O' where id=7; -update noar ti set b2='SPHNA52UAJEGA6AY22VHH0EUS0O' where id=7; -update noar tt set v0='ZXUMZ2T3Y' where id=8; -update noar ti set v0='ZXUMZ2T3Y' where id=8; -update noar tt set b0='JYHP9LSMJO0U7KX' where id=8; -update noar ti set b0='JYHP9LSMJO0U7KX' where id=8; -update noar tt set v0='SFQS3F7E873MQ' where id=8; -update noar ti set v0='SFQS3F7E873MQ' where id=8; -update noar tt set b1='E9A5231B2K1EIWDRBLJ3Y7ZZEP2' where id=8; -update noar ti set b1='E9A5231B2K1EIWDRBLJ3Y7ZZEP2' where id=8; -update noar tt set v0='EI95FML8RIXJ43CNELEI1S4X39' where id=8; -update noar ti set v0='EI95FML8RIXJ43CNELEI1S4X39' where id=8; -update noar tt set b2='HD1VYYTYGQHE1ZRRW5CN' where id=8; -update noar ti set b2='HD1VYYTYGQHE1ZRRW5CN' where id=8; -update noar tt set v0='AUA57HQBP5GGDQ' where id=9; -update noar ti set v0='AUA57HQBP5GGDQ' where id=9; -update noar tt set b0='HWZFNCTUMFQGO816CM95ZUOFQ' where id=9; -update noar ti set b0='HWZFNCTUMFQGO816CM95ZUOFQ' where id=9; -update noar tt set v0='GXRANG' where id=9; -update noar ti set v0='GXRANG' where id=9; -update noar tt set b1='6F66DRUTYRLQWS7F9N' where id=9; -update noar ti set b1='6F66DRUTYRLQWS7F9N' where id=9; -update noar tt set v0='65JAXOFRP8VJGA078GKVCB2MMJQXB699' where id=9; -update noar ti set v0='65JAXOFRP8VJGA078GKVCB2MMJQXB699' where id=9; -update noar tt set b2='T5R0EJCJ8159HT9JATA1SU' where id=9; -update noar ti set b2='T5R0EJCJ8159HT9JATA1SU' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 mediumblob null, - b1 longblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='XRYHJO6E2DFBIYWBFQUA9' where id=1; -update noar ti set v0='XRYHJO6E2DFBIYWBFQUA9' where id=1; -update noar tt set b0='R3XBQA7TPBCBUJ9OV4NUBQGXE8JS0MX' where id=1; -update noar ti set b0='R3XBQA7TPBCBUJ9OV4NUBQGXE8JS0MX' where id=1; -update noar tt set v0='0JH205WDY4' where id=1; -update noar ti set v0='0JH205WDY4' where id=1; -update noar tt set b1='XPJLGAM5G5MBMOYL8' where id=1; -update noar ti set b1='XPJLGAM5G5MBMOYL8' where id=1; -update noar tt set v0='5Z4ZTNXUH2OFO8AYIEU' where id=1; -update noar ti set v0='5Z4ZTNXUH2OFO8AYIEU' where id=1; -update noar tt set b2='T6L1A41RFVS5XPOZUW0ZF' where id=1; -update noar ti set b2='T6L1A41RFVS5XPOZUW0ZF' where id=1; -update noar tt set v0='H4ZV7BVH18JJJCL' where id=2; -update noar ti set v0='H4ZV7BVH18JJJCL' where id=2; -update noar tt set b0='UUJ896ZTCDUXHP' where id=2; -update noar ti set b0='UUJ896ZTCDUXHP' where id=2; -update noar tt set v0='QSXKD8WSFV94FN9NXC7FLXOW' where id=2; -update noar ti set v0='QSXKD8WSFV94FN9NXC7FLXOW' where id=2; -update noar tt set b1='I8N6W3K21XI2IQ9BYX2LVPO' where id=2; -update noar ti set b1='I8N6W3K21XI2IQ9BYX2LVPO' where id=2; -update noar tt set v0='Q7TPGAEMO4PGSWXUT4O06PHQ2QH9' where id=2; -update noar ti set v0='Q7TPGAEMO4PGSWXUT4O06PHQ2QH9' where id=2; -update noar tt set b2='APWOW9YW6HUWF9M3RMQUD4I' where id=2; -update noar ti set b2='APWOW9YW6HUWF9M3RMQUD4I' where id=2; -update noar tt set v0='FC0Q71ZFT3KL0LGJRXQUORTYCM917Z' where id=3; -update noar ti set v0='FC0Q71ZFT3KL0LGJRXQUORTYCM917Z' where id=3; -update noar tt set b0='1' where id=3; -update noar ti set b0='1' where id=3; -update noar tt set v0='I7E' where id=3; -update noar ti set v0='I7E' where id=3; -update noar tt set b1='3FDG83' where id=3; -update noar ti set b1='3FDG83' where id=3; -update noar tt set v0='4ORPNPK' where id=3; -update noar ti set v0='4ORPNPK' where id=3; -update noar tt set b2='2ULS9K' where id=3; -update noar ti set b2='2ULS9K' where id=3; -update noar tt set v0='O1PMBHY075U16X935JJMK08S' where id=4; -update noar ti set v0='O1PMBHY075U16X935JJMK08S' where id=4; -update noar tt set b0='K' where id=4; -update noar ti set b0='K' where id=4; -update noar tt set v0='7R9KQ82H4G50ZJ3LMWBAXQNY46NM3X' where id=4; -update noar ti set v0='7R9KQ82H4G50ZJ3LMWBAXQNY46NM3X' where id=4; -update noar tt set b1='EEPNPN8V7SKDXQ7RS2JUIU2D3UZ9DE' where id=4; -update noar ti set b1='EEPNPN8V7SKDXQ7RS2JUIU2D3UZ9DE' where id=4; -update noar tt set v0='0YAIGU3LQJN5DGBEYTYN7NGPMUD' where id=4; -update noar ti set v0='0YAIGU3LQJN5DGBEYTYN7NGPMUD' where id=4; -update noar tt set b2='OR3MRXDHIE4CF8NTR10N' where id=4; -update noar ti set b2='OR3MRXDHIE4CF8NTR10N' where id=4; -update noar tt set v0='4EZSHZKP6BQIPO8US8H1VKVMU1ZT4E' where id=5; -update noar ti set v0='4EZSHZKP6BQIPO8US8H1VKVMU1ZT4E' where id=5; -update noar tt set b0='3H' where id=5; -update noar ti set b0='3H' where id=5; -update noar tt set v0='QMWPWW1CXB' where id=5; -update noar ti set v0='QMWPWW1CXB' where id=5; -update noar tt set b1='AX5RLDPA' where id=5; -update noar ti set b1='AX5RLDPA' where id=5; -update noar tt set v0='4ROM60I2Z33' where id=5; -update noar ti set v0='4ROM60I2Z33' where id=5; -update noar tt set b2='90ZSZJFO0' where id=5; -update noar ti set b2='90ZSZJFO0' where id=5; -update noar tt set v0='DQEVQS4J' where id=6; -update noar ti set v0='DQEVQS4J' where id=6; -update noar tt set b0='YM5MYGDHFWM9GNSG' where id=6; -update noar ti set b0='YM5MYGDHFWM9GNSG' where id=6; -update noar tt set v0='KUT48NZFM7IY' where id=6; -update noar ti set v0='KUT48NZFM7IY' where id=6; -update noar tt set b1='Y2A0EHDBB5UZ4GYFP9WO' where id=6; -update noar ti set b1='Y2A0EHDBB5UZ4GYFP9WO' where id=6; -update noar tt set v0='MJ92HTW2XUQ02JPJ421LUIYLDQ1' where id=6; -update noar ti set v0='MJ92HTW2XUQ02JPJ421LUIYLDQ1' where id=6; -update noar tt set b2='7AMJCK45ASCK4OUB' where id=6; -update noar ti set b2='7AMJCK45ASCK4OUB' where id=6; -update noar tt set v0='Z6UJT8M6Z4KC5E0THQ' where id=7; -update noar ti set v0='Z6UJT8M6Z4KC5E0THQ' where id=7; -update noar tt set b0='W334K2AZZA' where id=7; -update noar ti set b0='W334K2AZZA' where id=7; -update noar tt set v0='5WKZ8O2O89GXP9MC6A6HOQ4OG' where id=7; -update noar ti set v0='5WKZ8O2O89GXP9MC6A6HOQ4OG' where id=7; -update noar tt set b1='OK0W67ORO' where id=7; -update noar ti set b1='OK0W67ORO' where id=7; -update noar tt set v0='AD8234RVE9D88NZQ' where id=7; -update noar ti set v0='AD8234RVE9D88NZQ' where id=7; -update noar tt set b2='NCI9L5L' where id=7; -update noar ti set b2='NCI9L5L' where id=7; -update noar tt set v0='7OH8BLDL' where id=8; -update noar ti set v0='7OH8BLDL' where id=8; -update noar tt set b0='C4RH' where id=8; -update noar ti set b0='C4RH' where id=8; -update noar tt set v0='KHLQ5K9K28ULKKHU6KEV' where id=8; -update noar ti set v0='KHLQ5K9K28ULKKHU6KEV' where id=8; -update noar tt set b1='XJWIA4AF20PZDVQ6H' where id=8; -update noar ti set b1='XJWIA4AF20PZDVQ6H' where id=8; -update noar tt set v0='VAN6D2ZK7ZBR4JRHQUU5' where id=8; -update noar ti set v0='VAN6D2ZK7ZBR4JRHQUU5' where id=8; -update noar tt set b2='84XOQYON69B29PJF1K410X5VGNI5X' where id=8; -update noar ti set b2='84XOQYON69B29PJF1K410X5VGNI5X' where id=8; -update noar tt set v0='X6M2XK1HFG2' where id=9; -update noar ti set v0='X6M2XK1HFG2' where id=9; -update noar tt set b0='K63E' where id=9; -update noar ti set b0='K63E' where id=9; -update noar tt set v0='J82ASN9450NFQBR30S2' where id=9; -update noar ti set v0='J82ASN9450NFQBR30S2' where id=9; -update noar tt set b1='SN2T8P1CCWIBYCRFGXDFJO8B' where id=9; -update noar ti set b1='SN2T8P1CCWIBYCRFGXDFJO8B' where id=9; -update noar tt set v0='5625AQU4J5MNRI65A' where id=9; -update noar ti set v0='5625AQU4J5MNRI65A' where id=9; -update noar tt set b2='I4D5VW0LEQ3PABO' where id=9; -update noar ti set b2='I4D5VW0LEQ3PABO' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 mediumblob null, - b1 longblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='0BPTF92ADUFGK8NPZGP' where id=1; -update noar ti set v0='0BPTF92ADUFGK8NPZGP' where id=1; -update noar tt set b0='A4TC8QLOP7ZMTHRQ88DC7E04AQK5YT' where id=1; -update noar ti set b0='A4TC8QLOP7ZMTHRQ88DC7E04AQK5YT' where id=1; -update noar tt set v0='AVEXP37LCH6NUYO' where id=1; -update noar ti set v0='AVEXP37LCH6NUYO' where id=1; -update noar tt set b1='LZIIS4V6XZV1UO3K99' where id=1; -update noar ti set b1='LZIIS4V6XZV1UO3K99' where id=1; -update noar tt set v0='WI21TIKKAAFGPNFWWMY7NE7U1QM' where id=1; -update noar ti set v0='WI21TIKKAAFGPNFWWMY7NE7U1QM' where id=1; -update noar tt set b2='CRLUDYC9IY8RAZN92VNV' where id=1; -update noar ti set b2='CRLUDYC9IY8RAZN92VNV' where id=1; -update noar tt set v0='AZPAWHEZIVRCI' where id=2; -update noar ti set v0='AZPAWHEZIVRCI' where id=2; -update noar tt set b0='GPHBYSOBEO8338JF8JRMSFRH3' where id=2; -update noar ti set b0='GPHBYSOBEO8338JF8JRMSFRH3' where id=2; -update noar tt set v0='PRX4G3CGU33QXL4D8GMZK4QRTL6' where id=2; -update noar ti set v0='PRX4G3CGU33QXL4D8GMZK4QRTL6' where id=2; -update noar tt set b1='771QV07PW9H6DHVT8NTGJ' where id=2; -update noar ti set b1='771QV07PW9H6DHVT8NTGJ' where id=2; -update noar tt set v0='HMN' where id=2; -update noar ti set v0='HMN' where id=2; -update noar tt set b2='H' where id=2; -update noar ti set b2='H' where id=2; -update noar tt set v0='QT8AHVEEUY4YE3QP' where id=3; -update noar ti set v0='QT8AHVEEUY4YE3QP' where id=3; -update noar tt set b0='G2K48C04S83TCEKYVOV33JVRBGP9AH' where id=3; -update noar ti set b0='G2K48C04S83TCEKYVOV33JVRBGP9AH' where id=3; -update noar tt set v0='K28L41LNI3UNDERFG6F' where id=3; -update noar ti set v0='K28L41LNI3UNDERFG6F' where id=3; -update noar tt set b1='OMTGMTL6BAPFNJM7165SRWZ4A5QIWZM' where id=3; -update noar ti set b1='OMTGMTL6BAPFNJM7165SRWZ4A5QIWZM' where id=3; -update noar tt set v0='ZW9Y8TJU554E32P' where id=3; -update noar ti set v0='ZW9Y8TJU554E32P' where id=3; -update noar tt set b2='V1GVNA2OS8Q2OVJ8CCA6VS5ROQIQ' where id=3; -update noar ti set b2='V1GVNA2OS8Q2OVJ8CCA6VS5ROQIQ' where id=3; -update noar tt set v0='ECN55GSELF1JY' where id=4; -update noar ti set v0='ECN55GSELF1JY' where id=4; -update noar tt set b0='S1' where id=4; -update noar ti set b0='S1' where id=4; -update noar tt set v0='SDK17N5IEDSK8ZNJ5W6D' where id=4; -update noar ti set v0='SDK17N5IEDSK8ZNJ5W6D' where id=4; -update noar tt set b1='WZPKFLC302AROII0' where id=4; -update noar ti set b1='WZPKFLC302AROII0' where id=4; -update noar tt set v0='UOET36' where id=4; -update noar ti set v0='UOET36' where id=4; -update noar tt set b2='TZGTB267C9XCOUM32REXAZE' where id=4; -update noar ti set b2='TZGTB267C9XCOUM32REXAZE' where id=4; -update noar tt set v0='6F9RNV2E6OZ2RJZOX4GRM0JM21HSBGZR' where id=5; -update noar ti set v0='6F9RNV2E6OZ2RJZOX4GRM0JM21HSBGZR' where id=5; -update noar tt set b0='BYMXMSQO5T71VS317HR3T' where id=5; -update noar ti set b0='BYMXMSQO5T71VS317HR3T' where id=5; -update noar tt set v0='9YTTI1EMLUHC0VFC01' where id=5; -update noar ti set v0='9YTTI1EMLUHC0VFC01' where id=5; -update noar tt set b1='B767P9QSSTG3XZPYHM77DB6BXECBRHLK' where id=5; -update noar ti set b1='B767P9QSSTG3XZPYHM77DB6BXECBRHLK' where id=5; -update noar tt set v0='O7KGCHNOX9N' where id=5; -update noar ti set v0='O7KGCHNOX9N' where id=5; -update noar tt set b2='PU8' where id=5; -update noar ti set b2='PU8' where id=5; -update noar tt set v0='HYSOHU' where id=6; -update noar ti set v0='HYSOHU' where id=6; -update noar tt set b0='4OIVYTCHV' where id=6; -update noar ti set b0='4OIVYTCHV' where id=6; -update noar tt set v0='VC8RXP3MN15O10QZ4VZOHUN3PNO' where id=6; -update noar ti set v0='VC8RXP3MN15O10QZ4VZOHUN3PNO' where id=6; -update noar tt set b1='HS9TLI0SS4GLH9HJE3MBBWRCFO1' where id=6; -update noar ti set b1='HS9TLI0SS4GLH9HJE3MBBWRCFO1' where id=6; -update noar tt set v0='T6570PPLMITPCPD' where id=6; -update noar ti set v0='T6570PPLMITPCPD' where id=6; -update noar tt set b2='D76S0N5AI7XIID6T1ASG8NTWP92S' where id=6; -update noar ti set b2='D76S0N5AI7XIID6T1ASG8NTWP92S' where id=6; -update noar tt set v0='IANCRZHUB31M4R4VGA' where id=7; -update noar ti set v0='IANCRZHUB31M4R4VGA' where id=7; -update noar tt set b0='961A1S' where id=7; -update noar ti set b0='961A1S' where id=7; -update noar tt set v0='MU21O5VHGYC4RL3MJ8EZ' where id=7; -update noar ti set v0='MU21O5VHGYC4RL3MJ8EZ' where id=7; -update noar tt set b1='OS7M7QJLG5TUQ4MOMBJ' where id=7; -update noar ti set b1='OS7M7QJLG5TUQ4MOMBJ' where id=7; -update noar tt set v0='UY' where id=7; -update noar ti set v0='UY' where id=7; -update noar tt set b2='JRK9MJ752JTPUKMZZQPF6' where id=7; -update noar ti set b2='JRK9MJ752JTPUKMZZQPF6' where id=7; -update noar tt set v0='D0KT' where id=8; -update noar ti set v0='D0KT' where id=8; -update noar tt set b0='A7LAQ6U07Q92OP0UTB2HSZ84F50R' where id=8; -update noar ti set b0='A7LAQ6U07Q92OP0UTB2HSZ84F50R' where id=8; -update noar tt set v0='CV5OY830BXQQXL95JDX3' where id=8; -update noar ti set v0='CV5OY830BXQQXL95JDX3' where id=8; -update noar tt set b1='1ZNFCTS3C2M' where id=8; -update noar ti set b1='1ZNFCTS3C2M' where id=8; -update noar tt set v0='2M5XH8SUK' where id=8; -update noar ti set v0='2M5XH8SUK' where id=8; -update noar tt set b2='5B335GUE2CA65AO8' where id=8; -update noar ti set b2='5B335GUE2CA65AO8' where id=8; -update noar tt set v0='UKR7HGQ' where id=9; -update noar ti set v0='UKR7HGQ' where id=9; -update noar tt set b0='VQH8ONUT7REUY2UF4RZT2HE3IZ5OXS94' where id=9; -update noar ti set b0='VQH8ONUT7REUY2UF4RZT2HE3IZ5OXS94' where id=9; -update noar tt set v0='1ZGID7OWPXRUNPMTLAVB' where id=9; -update noar ti set v0='1ZGID7OWPXRUNPMTLAVB' where id=9; -update noar tt set b1='3736ZBEFFYM1VB4ONERO' where id=9; -update noar ti set b1='3736ZBEFFYM1VB4ONERO' where id=9; -update noar tt set v0='DM41BH75U' where id=9; -update noar ti set v0='DM41BH75U' where id=9; -update noar tt set b2='Y4KONN4LCCDPL6TO8D20ZIPQ8OXBNFZ' where id=9; -update noar ti set b2='Y4KONN4LCCDPL6TO8D20ZIPQ8OXBNFZ' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 mediumblob not null, - b1 longblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='P9754ISX9ROQI08URN1' where id=1; -update noar ti set v0='P9754ISX9ROQI08URN1' where id=1; -update noar tt set b0='4BBTZ86HNXI6XSDIN2L' where id=1; -update noar ti set b0='4BBTZ86HNXI6XSDIN2L' where id=1; -update noar tt set v0='0RAT02RZ4IKOB3' where id=1; -update noar ti set v0='0RAT02RZ4IKOB3' where id=1; -update noar tt set b1='16XK' where id=1; -update noar ti set b1='16XK' where id=1; -update noar tt set v0='N3FG8WXXK6N17UHB8ZM285U' where id=1; -update noar ti set v0='N3FG8WXXK6N17UHB8ZM285U' where id=1; -update noar tt set b2='RMYJW6GIOKWPWN4UAEIDC' where id=1; -update noar ti set b2='RMYJW6GIOKWPWN4UAEIDC' where id=1; -update noar tt set v0='PX91W0OI4F' where id=2; -update noar ti set v0='PX91W0OI4F' where id=2; -update noar tt set b0='A78080RH6BZE5X1J8QU9H49YHAZV' where id=2; -update noar ti set b0='A78080RH6BZE5X1J8QU9H49YHAZV' where id=2; -update noar tt set v0='JOPIZFWL0ZLP7FC2RL1013B0' where id=2; -update noar ti set v0='JOPIZFWL0ZLP7FC2RL1013B0' where id=2; -update noar tt set b1='VAGWTRWGIL2' where id=2; -update noar ti set b1='VAGWTRWGIL2' where id=2; -update noar tt set v0='M2XRI5T8YS4Q0TX0YG' where id=2; -update noar ti set v0='M2XRI5T8YS4Q0TX0YG' where id=2; -update noar tt set b2='YSPL89LJE0PAFXNTZZJ5W6T7O' where id=2; -update noar ti set b2='YSPL89LJE0PAFXNTZZJ5W6T7O' where id=2; -update noar tt set v0='12MMIH2CKX1UBVRQ6DEQBIB7FYTSV' where id=3; -update noar ti set v0='12MMIH2CKX1UBVRQ6DEQBIB7FYTSV' where id=3; -update noar tt set b0='CZG1U8EELR1Y6' where id=3; -update noar ti set b0='CZG1U8EELR1Y6' where id=3; -update noar tt set v0='MU0D0R9BZPUNTILNCLIN2M700H0XM' where id=3; -update noar ti set v0='MU0D0R9BZPUNTILNCLIN2M700H0XM' where id=3; -update noar tt set b1='F3QL0ELJ7MER7TT8O4YZ8H' where id=3; -update noar ti set b1='F3QL0ELJ7MER7TT8O4YZ8H' where id=3; -update noar tt set v0='QXPFZV' where id=3; -update noar ti set v0='QXPFZV' where id=3; -update noar tt set b2='AC59PD1PD15SH' where id=3; -update noar ti set b2='AC59PD1PD15SH' where id=3; -update noar tt set v0='YGOAL6EI4F92QMOXSEF4FANMVAKW' where id=4; -update noar ti set v0='YGOAL6EI4F92QMOXSEF4FANMVAKW' where id=4; -update noar tt set b0='3XQDDPCX2WB0MI5KSMK1N7CR3ZA2' where id=4; -update noar ti set b0='3XQDDPCX2WB0MI5KSMK1N7CR3ZA2' where id=4; -update noar tt set v0='GRSIW0UA9UNZ6XW28VYOIVWLS' where id=4; -update noar ti set v0='GRSIW0UA9UNZ6XW28VYOIVWLS' where id=4; -update noar tt set b1='4CWUPLJD9JIO8HN' where id=4; -update noar ti set b1='4CWUPLJD9JIO8HN' where id=4; -update noar tt set v0='H4OD1RGACNC5LBU6ULY0PGPGBCZ' where id=4; -update noar ti set v0='H4OD1RGACNC5LBU6ULY0PGPGBCZ' where id=4; -update noar tt set b2='HRE87PTZXG' where id=4; -update noar ti set b2='HRE87PTZXG' where id=4; -update noar tt set v0='0258P3I2M5' where id=5; -update noar ti set v0='0258P3I2M5' where id=5; -update noar tt set b0='1DKFW0MKOBZY30ACA6192' where id=5; -update noar ti set b0='1DKFW0MKOBZY30ACA6192' where id=5; -update noar tt set v0='VM6BPD8GNB18FUCM1C0F6KORQSA5' where id=5; -update noar ti set v0='VM6BPD8GNB18FUCM1C0F6KORQSA5' where id=5; -update noar tt set b1='QS2ZSLW5NJJ799HX8' where id=5; -update noar ti set b1='QS2ZSLW5NJJ799HX8' where id=5; -update noar tt set v0='PV52H6MO' where id=5; -update noar ti set v0='PV52H6MO' where id=5; -update noar tt set b2='SR7G9PX66DF3LIZBY69CWT9B0MXAE' where id=5; -update noar ti set b2='SR7G9PX66DF3LIZBY69CWT9B0MXAE' where id=5; -update noar tt set v0='M3BJN377JMRFQS5AY' where id=6; -update noar ti set v0='M3BJN377JMRFQS5AY' where id=6; -update noar tt set b0='GSZB' where id=6; -update noar ti set b0='GSZB' where id=6; -update noar tt set v0='IRUI2NWN1RDT171EA4' where id=6; -update noar ti set v0='IRUI2NWN1RDT171EA4' where id=6; -update noar tt set b1='OFVG79YD4PYDE3T' where id=6; -update noar ti set b1='OFVG79YD4PYDE3T' where id=6; -update noar tt set v0='EDZCEV5MSY1J' where id=6; -update noar ti set v0='EDZCEV5MSY1J' where id=6; -update noar tt set b2='2J6DCPASNBWD3TC7A12ZK022CIZ8A' where id=6; -update noar ti set b2='2J6DCPASNBWD3TC7A12ZK022CIZ8A' where id=6; -update noar tt set v0='79XDYIF9M49T4S25PQ6RBDSQ8' where id=7; -update noar ti set v0='79XDYIF9M49T4S25PQ6RBDSQ8' where id=7; -update noar tt set b0='Y7D49VAUV8' where id=7; -update noar ti set b0='Y7D49VAUV8' where id=7; -update noar tt set v0='CNQBLJAIRXCF37D4ZJ2VYRK1L' where id=7; -update noar ti set v0='CNQBLJAIRXCF37D4ZJ2VYRK1L' where id=7; -update noar tt set b1='8LQ2' where id=7; -update noar ti set b1='8LQ2' where id=7; -update noar tt set v0='CSHU3BW8EAH3B' where id=7; -update noar ti set v0='CSHU3BW8EAH3B' where id=7; -update noar tt set b2='XSLTUBDNBOPI5TLHVC8N1R9ALD22' where id=7; -update noar ti set b2='XSLTUBDNBOPI5TLHVC8N1R9ALD22' where id=7; -update noar tt set v0='7GX' where id=8; -update noar ti set v0='7GX' where id=8; -update noar tt set b0='GX20R0WSGFZLWVHJNTZK61QF8CUH4XXL' where id=8; -update noar ti set b0='GX20R0WSGFZLWVHJNTZK61QF8CUH4XXL' where id=8; -update noar tt set v0='6RFA36W' where id=8; -update noar ti set v0='6RFA36W' where id=8; -update noar tt set b1='DWEGGV3R14Q9NB3ZFJO9CQS2OKWI' where id=8; -update noar ti set b1='DWEGGV3R14Q9NB3ZFJO9CQS2OKWI' where id=8; -update noar tt set v0='BFPY09E4SPIBG09GDUPR7EI1FMM' where id=8; -update noar ti set v0='BFPY09E4SPIBG09GDUPR7EI1FMM' where id=8; -update noar tt set b2='YA8ODNAS2PQ6KE6TTBW65B' where id=8; -update noar ti set b2='YA8ODNAS2PQ6KE6TTBW65B' where id=8; -update noar tt set v0='YX77DNRPZ6ZSIZVFKM' where id=9; -update noar ti set v0='YX77DNRPZ6ZSIZVFKM' where id=9; -update noar tt set b0='IAOV80TPE' where id=9; -update noar ti set b0='IAOV80TPE' where id=9; -update noar tt set v0='VVI4660KTG2O8LX7IVON3SABIW4NMS' where id=9; -update noar ti set v0='VVI4660KTG2O8LX7IVON3SABIW4NMS' where id=9; -update noar tt set b1='SEDK8F56J9UAP3X0LTSCIVUK' where id=9; -update noar ti set b1='SEDK8F56J9UAP3X0LTSCIVUK' where id=9; -update noar tt set v0='P04MRK1G7' where id=9; -update noar ti set v0='P04MRK1G7' where id=9; -update noar tt set b2='TKGH91K6OT2AE9M9TLL3GLR7BF' where id=9; -update noar ti set b2='TKGH91K6OT2AE9M9TLL3GLR7BF' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 mediumblob not null, - b1 longblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='T1274APIHBBP4B2U2L21ZU2XXZA' where id=1; -update noar ti set v0='T1274APIHBBP4B2U2L21ZU2XXZA' where id=1; -update noar tt set b0='R6BNDO36V0ZVP1I831RG24MHUVWMC' where id=1; -update noar ti set b0='R6BNDO36V0ZVP1I831RG24MHUVWMC' where id=1; -update noar tt set v0='WNYH9PHZ02C9D9UM' where id=1; -update noar ti set v0='WNYH9PHZ02C9D9UM' where id=1; -update noar tt set b1='YFF' where id=1; -update noar ti set b1='YFF' where id=1; -update noar tt set v0='Y4XZ5P3G0PLCD3LEA87A28LTLN1E' where id=1; -update noar ti set v0='Y4XZ5P3G0PLCD3LEA87A28LTLN1E' where id=1; -update noar tt set b2='5JTLME485' where id=1; -update noar ti set b2='5JTLME485' where id=1; -update noar tt set v0='F4RJXJX7WIE5Y3' where id=2; -update noar ti set v0='F4RJXJX7WIE5Y3' where id=2; -update noar tt set b0='7NFHZU1NN' where id=2; -update noar ti set b0='7NFHZU1NN' where id=2; -update noar tt set v0='NTIE5DW1F28WSMZ7D30W' where id=2; -update noar ti set v0='NTIE5DW1F28WSMZ7D30W' where id=2; -update noar tt set b1='QMPFBZASME' where id=2; -update noar ti set b1='QMPFBZASME' where id=2; -update noar tt set v0='NG' where id=2; -update noar ti set v0='NG' where id=2; -update noar tt set b2='AGVRQ4GV38JE1' where id=2; -update noar ti set b2='AGVRQ4GV38JE1' where id=2; -update noar tt set v0='39UE1TEX2BA442N' where id=3; -update noar ti set v0='39UE1TEX2BA442N' where id=3; -update noar tt set b0='BE5GLXPCCAY81DFMFC06J4CFYC6VZK8W' where id=3; -update noar ti set b0='BE5GLXPCCAY81DFMFC06J4CFYC6VZK8W' where id=3; -update noar tt set v0='IKC944DZARP9DH' where id=3; -update noar ti set v0='IKC944DZARP9DH' where id=3; -update noar tt set b1='SQ5USLL10UIV14OZUJ3A8VBZN12Q3DS' where id=3; -update noar ti set b1='SQ5USLL10UIV14OZUJ3A8VBZN12Q3DS' where id=3; -update noar tt set v0='I0T6NPLXDMGWZJVS' where id=3; -update noar ti set v0='I0T6NPLXDMGWZJVS' where id=3; -update noar tt set b2='EE7O0QXJ' where id=3; -update noar ti set b2='EE7O0QXJ' where id=3; -update noar tt set v0='LDBP8T5IE3XVV8QV402F9TK0O' where id=4; -update noar ti set v0='LDBP8T5IE3XVV8QV402F9TK0O' where id=4; -update noar tt set b0='HCJXTNPL0UTX' where id=4; -update noar ti set b0='HCJXTNPL0UTX' where id=4; -update noar tt set v0='LX4O8' where id=4; -update noar ti set v0='LX4O8' where id=4; -update noar tt set b1='55Z2H7JJ' where id=4; -update noar ti set b1='55Z2H7JJ' where id=4; -update noar tt set v0='KABNXA8VZTK1OF4R8TWOM6IWX7A26CU' where id=4; -update noar ti set v0='KABNXA8VZTK1OF4R8TWOM6IWX7A26CU' where id=4; -update noar tt set b2='7QF43' where id=4; -update noar ti set b2='7QF43' where id=4; -update noar tt set v0='1M0EUUZ8S3ET2' where id=5; -update noar ti set v0='1M0EUUZ8S3ET2' where id=5; -update noar tt set b0='SQWBIH0E90M43R' where id=5; -update noar ti set b0='SQWBIH0E90M43R' where id=5; -update noar tt set v0='J1597GUSZZWOPU6D3RCIO' where id=5; -update noar ti set v0='J1597GUSZZWOPU6D3RCIO' where id=5; -update noar tt set b1='C' where id=5; -update noar ti set b1='C' where id=5; -update noar tt set v0='8UPD193X9P12KGKN179' where id=5; -update noar ti set v0='8UPD193X9P12KGKN179' where id=5; -update noar tt set b2='BQLC431LDK4GTLN93' where id=5; -update noar ti set b2='BQLC431LDK4GTLN93' where id=5; -update noar tt set v0='FKIRPWPEAGN0XNHINS9' where id=6; -update noar ti set v0='FKIRPWPEAGN0XNHINS9' where id=6; -update noar tt set b0='W' where id=6; -update noar ti set b0='W' where id=6; -update noar tt set v0='C26NC9B0X68XYH' where id=6; -update noar ti set v0='C26NC9B0X68XYH' where id=6; -update noar tt set b1='PBV8MRYF3DX5P' where id=6; -update noar ti set b1='PBV8MRYF3DX5P' where id=6; -update noar tt set v0='IZ9RL24Z9631QT7KJJHYMM1S6LB8' where id=6; -update noar ti set v0='IZ9RL24Z9631QT7KJJHYMM1S6LB8' where id=6; -update noar tt set b2='95UQDOGLDG2O6I8SF2' where id=6; -update noar ti set b2='95UQDOGLDG2O6I8SF2' where id=6; -update noar tt set v0='MAOMFDRT' where id=7; -update noar ti set v0='MAOMFDRT' where id=7; -update noar tt set b0='1LPNHX3MNGOWKAML0OKK63IBV6M0' where id=7; -update noar ti set b0='1LPNHX3MNGOWKAML0OKK63IBV6M0' where id=7; -update noar tt set v0='HEAT2I13KB6PGO4090CRT0MA0DOIXZ' where id=7; -update noar ti set v0='HEAT2I13KB6PGO4090CRT0MA0DOIXZ' where id=7; -update noar tt set b1='9H9VRMA0NPBOZ' where id=7; -update noar ti set b1='9H9VRMA0NPBOZ' where id=7; -update noar tt set v0='T' where id=7; -update noar ti set v0='T' where id=7; -update noar tt set b2='SD6EPVYZIXSBI5EMCTZQK060ZMF' where id=7; -update noar ti set b2='SD6EPVYZIXSBI5EMCTZQK060ZMF' where id=7; -update noar tt set v0='3FS8KW7FSUW' where id=8; -update noar ti set v0='3FS8KW7FSUW' where id=8; -update noar tt set b0='CHDAHU0DRI6' where id=8; -update noar ti set b0='CHDAHU0DRI6' where id=8; -update noar tt set v0='12R217A2EXCSOD9UA' where id=8; -update noar ti set v0='12R217A2EXCSOD9UA' where id=8; -update noar tt set b1='57U9SRYFJ3J0258A1Q4BEELYQX9' where id=8; -update noar ti set b1='57U9SRYFJ3J0258A1Q4BEELYQX9' where id=8; -update noar tt set v0='7' where id=8; -update noar ti set v0='7' where id=8; -update noar tt set b2='0T055ZOMZ5QJ5' where id=8; -update noar ti set b2='0T055ZOMZ5QJ5' where id=8; -update noar tt set v0='UAH0JHN6PG0RJ3' where id=9; -update noar ti set v0='UAH0JHN6PG0RJ3' where id=9; -update noar tt set b0='S3' where id=9; -update noar ti set b0='S3' where id=9; -update noar tt set v0='2C0F5F1ZHPV1' where id=9; -update noar ti set v0='2C0F5F1ZHPV1' where id=9; -update noar tt set b1='A1GVONA281EGWFOJP2UB' where id=9; -update noar ti set b1='A1GVONA281EGWFOJP2UB' where id=9; -update noar tt set v0='0VQOMMO9' where id=9; -update noar ti set v0='0VQOMMO9' where id=9; -update noar tt set b2='IXITT8D1SLMKFJYPGD3ZXTD4B5G' where id=9; -update noar ti set b2='IXITT8D1SLMKFJYPGD3ZXTD4B5G' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 longblob null, - b1 tinyblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='CR1XGA' where id=1; -update noar ti set v0='CR1XGA' where id=1; -update noar tt set b0='E8' where id=1; -update noar ti set b0='E8' where id=1; -update noar tt set v0='L1NASIKWECW0CCXXCW5HTIE5FL' where id=1; -update noar ti set v0='L1NASIKWECW0CCXXCW5HTIE5FL' where id=1; -update noar tt set b1='WP66DCCBAFZGOXMV8JMSUUVC3TK' where id=1; -update noar ti set b1='WP66DCCBAFZGOXMV8JMSUUVC3TK' where id=1; -update noar tt set v0='EIDQ6N74ADVELZPASLV0I07LN' where id=1; -update noar ti set v0='EIDQ6N74ADVELZPASLV0I07LN' where id=1; -update noar tt set b2='5IK7YPSDFZWNU' where id=1; -update noar ti set b2='5IK7YPSDFZWNU' where id=1; -update noar tt set v0='HJUNFY' where id=2; -update noar ti set v0='HJUNFY' where id=2; -update noar tt set b0='2III2HXL24GFAOFU8BU' where id=2; -update noar ti set b0='2III2HXL24GFAOFU8BU' where id=2; -update noar tt set v0='5X7O6USCXDLGP889HBX5ZR6' where id=2; -update noar ti set v0='5X7O6USCXDLGP889HBX5ZR6' where id=2; -update noar tt set b1='9YN' where id=2; -update noar ti set b1='9YN' where id=2; -update noar tt set v0='ZAQ3FXYRY2REPXK9UL90F' where id=2; -update noar ti set v0='ZAQ3FXYRY2REPXK9UL90F' where id=2; -update noar tt set b2='JB088Y0DUU' where id=2; -update noar ti set b2='JB088Y0DUU' where id=2; -update noar tt set v0='O2BFIR1CB5K2OPX7NYFBYS14' where id=3; -update noar ti set v0='O2BFIR1CB5K2OPX7NYFBYS14' where id=3; -update noar tt set b0='TAX0AS3BOFYRPZXQR7M7C0C3' where id=3; -update noar ti set b0='TAX0AS3BOFYRPZXQR7M7C0C3' where id=3; -update noar tt set v0='JTBORLWDTO36AQL' where id=3; -update noar ti set v0='JTBORLWDTO36AQL' where id=3; -update noar tt set b1='R72OPFWSIBYXJYBKTVKVSG1UVVV0' where id=3; -update noar ti set b1='R72OPFWSIBYXJYBKTVKVSG1UVVV0' where id=3; -update noar tt set v0='QB9VYA8BV6NOMEJAYN36B' where id=3; -update noar ti set v0='QB9VYA8BV6NOMEJAYN36B' where id=3; -update noar tt set b2='KTL0HUCN0M' where id=3; -update noar ti set b2='KTL0HUCN0M' where id=3; -update noar tt set v0='AH1Q0TTRBLLKSHIIGHM2UC' where id=4; -update noar ti set v0='AH1Q0TTRBLLKSHIIGHM2UC' where id=4; -update noar tt set b0='Z259P259Z9UV' where id=4; -update noar ti set b0='Z259P259Z9UV' where id=4; -update noar tt set v0='CSN6QCX27GZHGJ111TR6G0FU4EM' where id=4; -update noar ti set v0='CSN6QCX27GZHGJ111TR6G0FU4EM' where id=4; -update noar tt set b1='7' where id=4; -update noar ti set b1='7' where id=4; -update noar tt set v0='4H3J8TO' where id=4; -update noar ti set v0='4H3J8TO' where id=4; -update noar tt set b2='XY8BF07UKW773O' where id=4; -update noar ti set b2='XY8BF07UKW773O' where id=4; -update noar tt set v0='MYD7B92M4U5PJ5F2XR8LEASE062MSB91' where id=5; -update noar ti set v0='MYD7B92M4U5PJ5F2XR8LEASE062MSB91' where id=5; -update noar tt set b0='R' where id=5; -update noar ti set b0='R' where id=5; -update noar tt set v0='GY1MJUTPI8B71YQK45QXA1' where id=5; -update noar ti set v0='GY1MJUTPI8B71YQK45QXA1' where id=5; -update noar tt set b1='7WP725AY1O147HHK372S61B' where id=5; -update noar ti set b1='7WP725AY1O147HHK372S61B' where id=5; -update noar tt set v0='RIHTML9TVADI6KCUL4U7DRW' where id=5; -update noar ti set v0='RIHTML9TVADI6KCUL4U7DRW' where id=5; -update noar tt set b2='O2HSARPHHL4' where id=5; -update noar ti set b2='O2HSARPHHL4' where id=5; -update noar tt set v0='RGU6JH5' where id=6; -update noar ti set v0='RGU6JH5' where id=6; -update noar tt set b0='ESRK7RRGVRJTXMJE78AHPTLE4WP62DM' where id=6; -update noar ti set b0='ESRK7RRGVRJTXMJE78AHPTLE4WP62DM' where id=6; -update noar tt set v0='O7GOV5G5SHGFWMNNHDC0JVQ2IT1L7' where id=6; -update noar ti set v0='O7GOV5G5SHGFWMNNHDC0JVQ2IT1L7' where id=6; -update noar tt set b1='SMKZZS0I504FDLODZTHTZMCJDR9XP1' where id=6; -update noar ti set b1='SMKZZS0I504FDLODZTHTZMCJDR9XP1' where id=6; -update noar tt set v0='G7ZSSFMBDVU8EOYSEHKBY' where id=6; -update noar ti set v0='G7ZSSFMBDVU8EOYSEHKBY' where id=6; -update noar tt set b2='LNJJO33NMF9I9Z65NPKZC1NCHIEI38' where id=6; -update noar ti set b2='LNJJO33NMF9I9Z65NPKZC1NCHIEI38' where id=6; -update noar tt set v0='CA3L4IG8' where id=7; -update noar ti set v0='CA3L4IG8' where id=7; -update noar tt set b0='7AZ' where id=7; -update noar ti set b0='7AZ' where id=7; -update noar tt set v0='C49AL32LNCVW' where id=7; -update noar ti set v0='C49AL32LNCVW' where id=7; -update noar tt set b1='XAC495IV7WSC2CBIYYYOG0' where id=7; -update noar ti set b1='XAC495IV7WSC2CBIYYYOG0' where id=7; -update noar tt set v0='UC6RTUBJMLOF2IZ' where id=7; -update noar ti set v0='UC6RTUBJMLOF2IZ' where id=7; -update noar tt set b2='MJJUH66554ZN6N3B18PU4XOZX9ETF2M' where id=7; -update noar ti set b2='MJJUH66554ZN6N3B18PU4XOZX9ETF2M' where id=7; -update noar tt set v0='92W81S36LCQ' where id=8; -update noar ti set v0='92W81S36LCQ' where id=8; -update noar tt set b0='QUHA43D9RK73B0N7JSYZ6WDWGZLK' where id=8; -update noar ti set b0='QUHA43D9RK73B0N7JSYZ6WDWGZLK' where id=8; -update noar tt set v0='CDCMSQ' where id=8; -update noar ti set v0='CDCMSQ' where id=8; -update noar tt set b1='FW1S1MMI' where id=8; -update noar ti set b1='FW1S1MMI' where id=8; -update noar tt set v0='9IY1JC' where id=8; -update noar ti set v0='9IY1JC' where id=8; -update noar tt set b2='D3YYVPJW7ATCDEVU2NAXWLRFOY7N' where id=8; -update noar ti set b2='D3YYVPJW7ATCDEVU2NAXWLRFOY7N' where id=8; -update noar tt set v0='7XDSX8FVQHCYZ7LF4DNFKRXJK3CY71US' where id=9; -update noar ti set v0='7XDSX8FVQHCYZ7LF4DNFKRXJK3CY71US' where id=9; -update noar tt set b0='GN9OJF' where id=9; -update noar ti set b0='GN9OJF' where id=9; -update noar tt set v0='I5UAABASIYUD53OHBD2CMT' where id=9; -update noar ti set v0='I5UAABASIYUD53OHBD2CMT' where id=9; -update noar tt set b1='3XE6IIEHMCI89BXWUPWZTF' where id=9; -update noar ti set b1='3XE6IIEHMCI89BXWUPWZTF' where id=9; -update noar tt set v0='PU37BK87C2F433FH697TA' where id=9; -update noar ti set v0='PU37BK87C2F433FH697TA' where id=9; -update noar tt set b2='3NAXFO3RIYZO77AJP1BM3W5FFAJM3C' where id=9; -update noar ti set b2='3NAXFO3RIYZO77AJP1BM3W5FFAJM3C' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 longblob null, - b1 tinyblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='RTMTUTG8' where id=1; -update noar ti set v0='RTMTUTG8' where id=1; -update noar tt set b0='X7VE' where id=1; -update noar ti set b0='X7VE' where id=1; -update noar tt set v0='5SX0TV5E725' where id=1; -update noar ti set v0='5SX0TV5E725' where id=1; -update noar tt set b1='SBDCGTM5JXWJNPDVOGD9YRS' where id=1; -update noar ti set b1='SBDCGTM5JXWJNPDVOGD9YRS' where id=1; -update noar tt set v0='26KIJZIGNWIX7N26VYQNPX4KY1BJT' where id=1; -update noar ti set v0='26KIJZIGNWIX7N26VYQNPX4KY1BJT' where id=1; -update noar tt set b2='BU3QL18B5PTSX3G7ZY7K4QM' where id=1; -update noar ti set b2='BU3QL18B5PTSX3G7ZY7K4QM' where id=1; -update noar tt set v0='Z6M4I1H0MJJOPKP6SVHR1R93PTZQJW9' where id=2; -update noar ti set v0='Z6M4I1H0MJJOPKP6SVHR1R93PTZQJW9' where id=2; -update noar tt set b0='SXAD1J5K2MAVN9TERSE' where id=2; -update noar ti set b0='SXAD1J5K2MAVN9TERSE' where id=2; -update noar tt set v0='WZ7Q48Y4P' where id=2; -update noar ti set v0='WZ7Q48Y4P' where id=2; -update noar tt set b1='LPV8WVT6F63F6X1XQ13YA' where id=2; -update noar ti set b1='LPV8WVT6F63F6X1XQ13YA' where id=2; -update noar tt set v0='TA2X5W60R03HU2SCR1RPAJ41249C14E5' where id=2; -update noar ti set v0='TA2X5W60R03HU2SCR1RPAJ41249C14E5' where id=2; -update noar tt set b2='3Q6KCQO4QYANCNQG8SACQ7DR2' where id=2; -update noar ti set b2='3Q6KCQO4QYANCNQG8SACQ7DR2' where id=2; -update noar tt set v0='8' where id=3; -update noar ti set v0='8' where id=3; -update noar tt set b0='5Z1SST1CFQHJC76KNF9U1YIL9' where id=3; -update noar ti set b0='5Z1SST1CFQHJC76KNF9U1YIL9' where id=3; -update noar tt set v0='BXF8' where id=3; -update noar ti set v0='BXF8' where id=3; -update noar tt set b1='DT8CMO7WWANCVCLW0WSX7TDCHN99GP84' where id=3; -update noar ti set b1='DT8CMO7WWANCVCLW0WSX7TDCHN99GP84' where id=3; -update noar tt set v0='WDPU' where id=3; -update noar ti set v0='WDPU' where id=3; -update noar tt set b2='FB2LQXNAPVP6U8LHJDER' where id=3; -update noar ti set b2='FB2LQXNAPVP6U8LHJDER' where id=3; -update noar tt set v0='SK3PO1RAD' where id=4; -update noar ti set v0='SK3PO1RAD' where id=4; -update noar tt set b0='WGBK47FR56TAE758UOC8' where id=4; -update noar ti set b0='WGBK47FR56TAE758UOC8' where id=4; -update noar tt set v0='NV' where id=4; -update noar ti set v0='NV' where id=4; -update noar tt set b1='TY589HFE91KG' where id=4; -update noar ti set b1='TY589HFE91KG' where id=4; -update noar tt set v0='HYDK69ZP8TIW31LPWE7WL1N7SCPN' where id=4; -update noar ti set v0='HYDK69ZP8TIW31LPWE7WL1N7SCPN' where id=4; -update noar tt set b2='W' where id=4; -update noar ti set b2='W' where id=4; -update noar tt set v0='2O42O63C4TVZGN1VGYZQDA' where id=5; -update noar ti set v0='2O42O63C4TVZGN1VGYZQDA' where id=5; -update noar tt set b0='WTL4DSC6HHHAQJ504VFWXD9B' where id=5; -update noar ti set b0='WTL4DSC6HHHAQJ504VFWXD9B' where id=5; -update noar tt set v0='3TCWGRJR7RA4M951K93XK80E' where id=5; -update noar ti set v0='3TCWGRJR7RA4M951K93XK80E' where id=5; -update noar tt set b1='DHBXPUGDSVD4' where id=5; -update noar ti set b1='DHBXPUGDSVD4' where id=5; -update noar tt set v0='9W1F67VS4U3EMA7LP2IXUNYMW53WG' where id=5; -update noar ti set v0='9W1F67VS4U3EMA7LP2IXUNYMW53WG' where id=5; -update noar tt set b2='3VPY3IZ68J' where id=5; -update noar ti set b2='3VPY3IZ68J' where id=5; -update noar tt set v0='MF8SUTEEUHCF3MOH79PFV' where id=6; -update noar ti set v0='MF8SUTEEUHCF3MOH79PFV' where id=6; -update noar tt set b0='M9G887ULQV0XU' where id=6; -update noar ti set b0='M9G887ULQV0XU' where id=6; -update noar tt set v0='E5YXO1FFW5LTWWMHC3L' where id=6; -update noar ti set v0='E5YXO1FFW5LTWWMHC3L' where id=6; -update noar tt set b1='3MEXXTITVPX5R7IPZDDI' where id=6; -update noar ti set b1='3MEXXTITVPX5R7IPZDDI' where id=6; -update noar tt set v0='K5N' where id=6; -update noar ti set v0='K5N' where id=6; -update noar tt set b2='SCJBLZC3YGBKPK2GIYNQ4' where id=6; -update noar ti set b2='SCJBLZC3YGBKPK2GIYNQ4' where id=6; -update noar tt set v0='RQ0XBRUZTGWG5SPCXKJ2T7XR92' where id=7; -update noar ti set v0='RQ0XBRUZTGWG5SPCXKJ2T7XR92' where id=7; -update noar tt set b0='H2H2K5YIQZX9KP24EE8ENNPKU17WY' where id=7; -update noar ti set b0='H2H2K5YIQZX9KP24EE8ENNPKU17WY' where id=7; -update noar tt set v0='I3XNMPSMIM2LCMC' where id=7; -update noar ti set v0='I3XNMPSMIM2LCMC' where id=7; -update noar tt set b1='SBL2' where id=7; -update noar ti set b1='SBL2' where id=7; -update noar tt set v0='WDE6C9UGCJD' where id=7; -update noar ti set v0='WDE6C9UGCJD' where id=7; -update noar tt set b2='J8Q1C5BWYB7XAMVPX497Z5HCN91Y' where id=7; -update noar ti set b2='J8Q1C5BWYB7XAMVPX497Z5HCN91Y' where id=7; -update noar tt set v0='LTLKN6CVZEK1IKHAHYDMYNE6620ZPW5' where id=8; -update noar ti set v0='LTLKN6CVZEK1IKHAHYDMYNE6620ZPW5' where id=8; -update noar tt set b0='GI6KMXXT1JY54PN7M58AW2PN5JK6G' where id=8; -update noar ti set b0='GI6KMXXT1JY54PN7M58AW2PN5JK6G' where id=8; -update noar tt set v0='5X2N' where id=8; -update noar ti set v0='5X2N' where id=8; -update noar tt set b1='NHFYK9V8TZNPSTOPLHU98' where id=8; -update noar ti set b1='NHFYK9V8TZNPSTOPLHU98' where id=8; -update noar tt set v0='BQWXTLN620N7BY4VCM' where id=8; -update noar ti set v0='BQWXTLN620N7BY4VCM' where id=8; -update noar tt set b2='VYGGUA0EOP' where id=8; -update noar ti set b2='VYGGUA0EOP' where id=8; -update noar tt set v0='CDYYKNWYLSY1F9N0EDDJ6RS63ETV' where id=9; -update noar ti set v0='CDYYKNWYLSY1F9N0EDDJ6RS63ETV' where id=9; -update noar tt set b0='ZGPLEIP8X8YT4HQJCV4Y6JWLWYHD0S2S' where id=9; -update noar ti set b0='ZGPLEIP8X8YT4HQJCV4Y6JWLWYHD0S2S' where id=9; -update noar tt set v0='CT608GR265F4R91LJOQUXJY2A1OB2' where id=9; -update noar ti set v0='CT608GR265F4R91LJOQUXJY2A1OB2' where id=9; -update noar tt set b1='9AIYYZQ2W5VP2HB8FTAOIPGECU4CCS' where id=9; -update noar ti set b1='9AIYYZQ2W5VP2HB8FTAOIPGECU4CCS' where id=9; -update noar tt set v0='ET' where id=9; -update noar ti set v0='ET' where id=9; -update noar tt set b2='T8HOBUPHXNDI6T6QR2WKSE0DMUOE' where id=9; -update noar ti set b2='T8HOBUPHXNDI6T6QR2WKSE0DMUOE' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 longblob not null, - b1 tinyblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='JDZTWT75GK' where id=1; -update noar ti set v0='JDZTWT75GK' where id=1; -update noar tt set b0='JAN6LMJO9FYXI5WAGRN8KKXT' where id=1; -update noar ti set b0='JAN6LMJO9FYXI5WAGRN8KKXT' where id=1; -update noar tt set v0='EMG430PG6EH9PNRLV0RXW' where id=1; -update noar ti set v0='EMG430PG6EH9PNRLV0RXW' where id=1; -update noar tt set b1='DKZ9TYWDVXCT4J97T7L' where id=1; -update noar ti set b1='DKZ9TYWDVXCT4J97T7L' where id=1; -update noar tt set v0='8N94K60XISURNM49HE6' where id=1; -update noar ti set v0='8N94K60XISURNM49HE6' where id=1; -update noar tt set b2='8IGRG23FVMSLBMVDQKZ2LQCE' where id=1; -update noar ti set b2='8IGRG23FVMSLBMVDQKZ2LQCE' where id=1; -update noar tt set v0='ZSPMQAAPH89NCZU9BFW118MO0M' where id=2; -update noar ti set v0='ZSPMQAAPH89NCZU9BFW118MO0M' where id=2; -update noar tt set b0='UT' where id=2; -update noar ti set b0='UT' where id=2; -update noar tt set v0='BUX76QV0U6S0TKN0X75DJ' where id=2; -update noar ti set v0='BUX76QV0U6S0TKN0X75DJ' where id=2; -update noar tt set b1='SPC' where id=2; -update noar ti set b1='SPC' where id=2; -update noar tt set v0='VLK0JQYJ1WSZW3' where id=2; -update noar ti set v0='VLK0JQYJ1WSZW3' where id=2; -update noar tt set b2='JINEEUSGSR61P08RVB2ILZ0' where id=2; -update noar ti set b2='JINEEUSGSR61P08RVB2ILZ0' where id=2; -update noar tt set v0='1CXDB3DF4KXPDYSUGGOJXMNK7TNKHIE' where id=3; -update noar ti set v0='1CXDB3DF4KXPDYSUGGOJXMNK7TNKHIE' where id=3; -update noar tt set b0='WXJ5LSF4PQXP17K6XRGJ' where id=3; -update noar ti set b0='WXJ5LSF4PQXP17K6XRGJ' where id=3; -update noar tt set v0='NL55D8511QCFO0HSMAUKCHZ0CVG' where id=3; -update noar ti set v0='NL55D8511QCFO0HSMAUKCHZ0CVG' where id=3; -update noar tt set b1='M07QGB3AYF' where id=3; -update noar ti set b1='M07QGB3AYF' where id=3; -update noar tt set v0='I9Q5EZDTI3H2L8FLWTLUJ7SVXBS59N9' where id=3; -update noar ti set v0='I9Q5EZDTI3H2L8FLWTLUJ7SVXBS59N9' where id=3; -update noar tt set b2='2VQGZMRVFARPEJFKHI' where id=3; -update noar ti set b2='2VQGZMRVFARPEJFKHI' where id=3; -update noar tt set v0='ZLREW5MJM64' where id=4; -update noar ti set v0='ZLREW5MJM64' where id=4; -update noar tt set b0='XWAGF' where id=4; -update noar ti set b0='XWAGF' where id=4; -update noar tt set v0='8QSQO9369AC4' where id=4; -update noar ti set v0='8QSQO9369AC4' where id=4; -update noar tt set b1='LJGH2B5XK316GS5LO8UCXZSN07V9LW9X' where id=4; -update noar ti set b1='LJGH2B5XK316GS5LO8UCXZSN07V9LW9X' where id=4; -update noar tt set v0='WNS04K7Y4A93Y39J' where id=4; -update noar ti set v0='WNS04K7Y4A93Y39J' where id=4; -update noar tt set b2='3MB2F7LE4IVIAPWHQT0BVIR468J7T1NY' where id=4; -update noar ti set b2='3MB2F7LE4IVIAPWHQT0BVIR468J7T1NY' where id=4; -update noar tt set v0='JH8FPOKV5X8JMCAY' where id=5; -update noar ti set v0='JH8FPOKV5X8JMCAY' where id=5; -update noar tt set b0='SO4B3TBLXFPWM5RSTF9LOAO8U7DGIGDW' where id=5; -update noar ti set b0='SO4B3TBLXFPWM5RSTF9LOAO8U7DGIGDW' where id=5; -update noar tt set v0='L2GLQ9LDDFTQLXARKISRE3' where id=5; -update noar ti set v0='L2GLQ9LDDFTQLXARKISRE3' where id=5; -update noar tt set b1='EPPR17' where id=5; -update noar ti set b1='EPPR17' where id=5; -update noar tt set v0='BDZFW5LMD1FI4KVOS3' where id=5; -update noar ti set v0='BDZFW5LMD1FI4KVOS3' where id=5; -update noar tt set b2='WJD0PUENGA9H0' where id=5; -update noar ti set b2='WJD0PUENGA9H0' where id=5; -update noar tt set v0='TIJM7AJP' where id=6; -update noar ti set v0='TIJM7AJP' where id=6; -update noar tt set b0='JIBSVOPPL7XTFZBHNA' where id=6; -update noar ti set b0='JIBSVOPPL7XTFZBHNA' where id=6; -update noar tt set v0='53KEIE9064KHPLBFX939' where id=6; -update noar ti set v0='53KEIE9064KHPLBFX939' where id=6; -update noar tt set b1='G9JJ4JGJJLCY48NMAMWQRJ372V0N0' where id=6; -update noar ti set b1='G9JJ4JGJJLCY48NMAMWQRJ372V0N0' where id=6; -update noar tt set v0='XT6BU32Z' where id=6; -update noar ti set v0='XT6BU32Z' where id=6; -update noar tt set b2='08VCFYRT6VWA6LT' where id=6; -update noar ti set b2='08VCFYRT6VWA6LT' where id=6; -update noar tt set v0='E6W8FCMHOTFVA' where id=7; -update noar ti set v0='E6W8FCMHOTFVA' where id=7; -update noar tt set b0='NAX' where id=7; -update noar ti set b0='NAX' where id=7; -update noar tt set v0='V5RSUKWZZVGYU77QK7M4O2M' where id=7; -update noar ti set v0='V5RSUKWZZVGYU77QK7M4O2M' where id=7; -update noar tt set b1='1E' where id=7; -update noar ti set b1='1E' where id=7; -update noar tt set v0='WU5US9BV2161QYVAVIR8SOX4' where id=7; -update noar ti set v0='WU5US9BV2161QYVAVIR8SOX4' where id=7; -update noar tt set b2='547' where id=7; -update noar ti set b2='547' where id=7; -update noar tt set v0='DBPYKFTAI7ZOZFX24GGGULHKIHXCCEHZ' where id=8; -update noar ti set v0='DBPYKFTAI7ZOZFX24GGGULHKIHXCCEHZ' where id=8; -update noar tt set b0='9P22MJWBRALIQM34A5NPVG' where id=8; -update noar ti set b0='9P22MJWBRALIQM34A5NPVG' where id=8; -update noar tt set v0='IXNPII71VQ' where id=8; -update noar ti set v0='IXNPII71VQ' where id=8; -update noar tt set b1='10M7W6HBY0WOWSP6TZUROEDG0P5P' where id=8; -update noar ti set b1='10M7W6HBY0WOWSP6TZUROEDG0P5P' where id=8; -update noar tt set v0='R9H5XNWJMBZ' where id=8; -update noar ti set v0='R9H5XNWJMBZ' where id=8; -update noar tt set b2='D5BJV2Q9U1XNREU3Z8ENZW6G3Y4' where id=8; -update noar ti set b2='D5BJV2Q9U1XNREU3Z8ENZW6G3Y4' where id=8; -update noar tt set v0='F6QDB9GGTX5F11VGHUKZI' where id=9; -update noar ti set v0='F6QDB9GGTX5F11VGHUKZI' where id=9; -update noar tt set b0='C9JG9WQ9A15S4' where id=9; -update noar ti set b0='C9JG9WQ9A15S4' where id=9; -update noar tt set v0='JJ2JN7S5' where id=9; -update noar ti set v0='JJ2JN7S5' where id=9; -update noar tt set b1='UTBD5J5TZ0' where id=9; -update noar ti set b1='UTBD5J5TZ0' where id=9; -update noar tt set v0='Z696FKBSCT4N' where id=9; -update noar ti set v0='Z696FKBSCT4N' where id=9; -update noar tt set b2='X02OHHSTWDB' where id=9; -update noar ti set b2='X02OHHSTWDB' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 longblob not null, - b1 tinyblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='V8ET1B6MD0V383' where id=1; -update noar ti set v0='V8ET1B6MD0V383' where id=1; -update noar tt set b0='C63Q2NL3TX' where id=1; -update noar ti set b0='C63Q2NL3TX' where id=1; -update noar tt set v0='HBM69BKQFXB7WI4VDLV6K8MBND8RU' where id=1; -update noar ti set v0='HBM69BKQFXB7WI4VDLV6K8MBND8RU' where id=1; -update noar tt set b1='3N' where id=1; -update noar ti set b1='3N' where id=1; -update noar tt set v0='GRMMJT3PN2JWE9QZOA8D8' where id=1; -update noar ti set v0='GRMMJT3PN2JWE9QZOA8D8' where id=1; -update noar tt set b2='R9I9GZIZQ3YH0O8X' where id=1; -update noar ti set b2='R9I9GZIZQ3YH0O8X' where id=1; -update noar tt set v0='ZHP22TVL4HZWLMLDDLR7KAK3W0NF45W' where id=2; -update noar ti set v0='ZHP22TVL4HZWLMLDDLR7KAK3W0NF45W' where id=2; -update noar tt set b0='XGB0O43GM55EO9IW4' where id=2; -update noar ti set b0='XGB0O43GM55EO9IW4' where id=2; -update noar tt set v0='XHA1PKD29B1I90O6EWS9C' where id=2; -update noar ti set v0='XHA1PKD29B1I90O6EWS9C' where id=2; -update noar tt set b1='6UZM7NZCRON0J1PIVBUVSLNQQJ' where id=2; -update noar ti set b1='6UZM7NZCRON0J1PIVBUVSLNQQJ' where id=2; -update noar tt set v0='YPGMIW1IUBERGCXJP58EPIIF' where id=2; -update noar ti set v0='YPGMIW1IUBERGCXJP58EPIIF' where id=2; -update noar tt set b2='FHR3BL30LGDQEXN' where id=2; -update noar ti set b2='FHR3BL30LGDQEXN' where id=2; -update noar tt set v0='XCX2XPKN6TRU0WNLISGIER39PB' where id=3; -update noar ti set v0='XCX2XPKN6TRU0WNLISGIER39PB' where id=3; -update noar tt set b0='3COZNPSBT9SWK3' where id=3; -update noar ti set b0='3COZNPSBT9SWK3' where id=3; -update noar tt set v0='8GA22CP2UJGR22RYO8' where id=3; -update noar ti set v0='8GA22CP2UJGR22RYO8' where id=3; -update noar tt set b1='Q3U2XVKP' where id=3; -update noar ti set b1='Q3U2XVKP' where id=3; -update noar tt set v0='2KQJWE5XR4JJFQDM58Q5Z9QGFV96YHX' where id=3; -update noar ti set v0='2KQJWE5XR4JJFQDM58Q5Z9QGFV96YHX' where id=3; -update noar tt set b2='702' where id=3; -update noar ti set b2='702' where id=3; -update noar tt set v0='ZC0GRJUJBIOSANCAPDED2FEH8OQS' where id=4; -update noar ti set v0='ZC0GRJUJBIOSANCAPDED2FEH8OQS' where id=4; -update noar tt set b0='9LBI9' where id=4; -update noar ti set b0='9LBI9' where id=4; -update noar tt set v0='YZEISY903PWBWS200L' where id=4; -update noar ti set v0='YZEISY903PWBWS200L' where id=4; -update noar tt set b1='D' where id=4; -update noar ti set b1='D' where id=4; -update noar tt set v0='A00YQ0JYM2HVARHX1I2I1K06' where id=4; -update noar ti set v0='A00YQ0JYM2HVARHX1I2I1K06' where id=4; -update noar tt set b2='9T1XICJFE5E1ACKB17VSDNKJHOK1' where id=4; -update noar ti set b2='9T1XICJFE5E1ACKB17VSDNKJHOK1' where id=4; -update noar tt set v0='U75DI3FMZIHS' where id=5; -update noar ti set v0='U75DI3FMZIHS' where id=5; -update noar tt set b0='X2OFOMJ8X5DSD75C0UOYS2HH' where id=5; -update noar ti set b0='X2OFOMJ8X5DSD75C0UOYS2HH' where id=5; -update noar tt set v0='NU77J5H6Y1' where id=5; -update noar ti set v0='NU77J5H6Y1' where id=5; -update noar tt set b1='WBW' where id=5; -update noar ti set b1='WBW' where id=5; -update noar tt set v0='3C6EWF8' where id=5; -update noar ti set v0='3C6EWF8' where id=5; -update noar tt set b2='GK3SWJG4KAIF4' where id=5; -update noar ti set b2='GK3SWJG4KAIF4' where id=5; -update noar tt set v0='C3X68CP7DV7A1WWCUD4F' where id=6; -update noar ti set v0='C3X68CP7DV7A1WWCUD4F' where id=6; -update noar tt set b0='HVF0WS' where id=6; -update noar ti set b0='HVF0WS' where id=6; -update noar tt set v0='T63GM2' where id=6; -update noar ti set v0='T63GM2' where id=6; -update noar tt set b1='XN23KY' where id=6; -update noar ti set b1='XN23KY' where id=6; -update noar tt set v0='ZB0G' where id=6; -update noar ti set v0='ZB0G' where id=6; -update noar tt set b2='KA74QT1I2N4FBHT95A' where id=6; -update noar ti set b2='KA74QT1I2N4FBHT95A' where id=6; -update noar tt set v0='WMZQZFE5QQBKHSZAUR9H5TMW15HS' where id=7; -update noar ti set v0='WMZQZFE5QQBKHSZAUR9H5TMW15HS' where id=7; -update noar tt set b0='XF7OOBW7A9W84' where id=7; -update noar ti set b0='XF7OOBW7A9W84' where id=7; -update noar tt set v0='C5QNBG40LB' where id=7; -update noar ti set v0='C5QNBG40LB' where id=7; -update noar tt set b1='B5ABZ78' where id=7; -update noar ti set b1='B5ABZ78' where id=7; -update noar tt set v0='UJP' where id=7; -update noar ti set v0='UJP' where id=7; -update noar tt set b2='SM5VVQLM4GNXDDWZWO5NFZ5TUOUECB2U' where id=7; -update noar ti set b2='SM5VVQLM4GNXDDWZWO5NFZ5TUOUECB2U' where id=7; -update noar tt set v0='GG9I8JP4499CHGYEESY0' where id=8; -update noar ti set v0='GG9I8JP4499CHGYEESY0' where id=8; -update noar tt set b0='SJSEH6KYWRWEFEH89BB652A5BK911N4E' where id=8; -update noar ti set b0='SJSEH6KYWRWEFEH89BB652A5BK911N4E' where id=8; -update noar tt set v0='EVRT6T82RJSF5LY96E0QEPT1XH5H' where id=8; -update noar ti set v0='EVRT6T82RJSF5LY96E0QEPT1XH5H' where id=8; -update noar tt set b1='N' where id=8; -update noar ti set b1='N' where id=8; -update noar tt set v0='RZQOGVX4Q' where id=8; -update noar ti set v0='RZQOGVX4Q' where id=8; -update noar tt set b2='V91DL9J' where id=8; -update noar ti set b2='V91DL9J' where id=8; -update noar tt set v0='W0F' where id=9; -update noar ti set v0='W0F' where id=9; -update noar tt set b0='3' where id=9; -update noar ti set b0='3' where id=9; -update noar tt set v0='7W3UCZM696JOB4D2' where id=9; -update noar ti set v0='7W3UCZM696JOB4D2' where id=9; -update noar tt set b1='FLAX9FH851YA1B0Q8S6PUCU8U9R2FH' where id=9; -update noar ti set b1='FLAX9FH851YA1B0Q8S6PUCU8U9R2FH' where id=9; -update noar tt set v0='F' where id=9; -update noar ti set v0='F' where id=9; -update noar tt set b2='S9MC06HV7MP64K4WFYPFEJ6WW7F42L' where id=9; -update noar ti set b2='S9MC06HV7MP64K4WFYPFEJ6WW7F42L' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 longblob null, - b1 tinyblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='Y0TZFAFPO' where id=1; -update noar ti set v0='Y0TZFAFPO' where id=1; -update noar tt set b0='2AJED9GAEV3L134X2X1FQSTDGH' where id=1; -update noar ti set b0='2AJED9GAEV3L134X2X1FQSTDGH' where id=1; -update noar tt set v0='GUBD7S0WD86QA8HGF' where id=1; -update noar ti set v0='GUBD7S0WD86QA8HGF' where id=1; -update noar tt set b1='2V7D7S6PR4X1AKWC' where id=1; -update noar ti set b1='2V7D7S6PR4X1AKWC' where id=1; -update noar tt set v0='BAE7FM27LJ3KI9TS68KL0Y25K3' where id=1; -update noar ti set v0='BAE7FM27LJ3KI9TS68KL0Y25K3' where id=1; -update noar tt set b2='W6A3JEVTJX24R' where id=1; -update noar ti set b2='W6A3JEVTJX24R' where id=1; -update noar tt set v0='UBWEBIPMQ2NXM43X6EURRZHG79Q3TJI' where id=2; -update noar ti set v0='UBWEBIPMQ2NXM43X6EURRZHG79Q3TJI' where id=2; -update noar tt set b0='8YXEKMBBYQLMC64A6TRYAA' where id=2; -update noar ti set b0='8YXEKMBBYQLMC64A6TRYAA' where id=2; -update noar tt set v0='HU44Z6YHY5R311J' where id=2; -update noar ti set v0='HU44Z6YHY5R311J' where id=2; -update noar tt set b1='AXX672PN0EKWJYWN1F99IB90P' where id=2; -update noar ti set b1='AXX672PN0EKWJYWN1F99IB90P' where id=2; -update noar tt set v0='RUSPN4JRC74C3LSGS' where id=2; -update noar ti set v0='RUSPN4JRC74C3LSGS' where id=2; -update noar tt set b2='SQQBG7T6I7ZULI1FZK0KTGCAF' where id=2; -update noar ti set b2='SQQBG7T6I7ZULI1FZK0KTGCAF' where id=2; -update noar tt set v0='X2N1NAH504TXGFKYENFL3ES0OTF' where id=3; -update noar ti set v0='X2N1NAH504TXGFKYENFL3ES0OTF' where id=3; -update noar tt set b0='N6CQXE66GXE4TQV0O97PO1UFK3MGI6D' where id=3; -update noar ti set b0='N6CQXE66GXE4TQV0O97PO1UFK3MGI6D' where id=3; -update noar tt set v0='GIR0FXNUJOIGGSQ4XV8FCMJLPZ4FD36' where id=3; -update noar ti set v0='GIR0FXNUJOIGGSQ4XV8FCMJLPZ4FD36' where id=3; -update noar tt set b1='UDPP' where id=3; -update noar ti set b1='UDPP' where id=3; -update noar tt set v0='HEVV0XFYYOI4HN677NT775ODYYJZM' where id=3; -update noar ti set v0='HEVV0XFYYOI4HN677NT775ODYYJZM' where id=3; -update noar tt set b2='5471SQJNYHOKVC2HVO8OQ5FJA6T7P' where id=3; -update noar ti set b2='5471SQJNYHOKVC2HVO8OQ5FJA6T7P' where id=3; -update noar tt set v0='I4' where id=4; -update noar ti set v0='I4' where id=4; -update noar tt set b0='4SZQEWI7WP' where id=4; -update noar ti set b0='4SZQEWI7WP' where id=4; -update noar tt set v0='GRF1XVBVD' where id=4; -update noar ti set v0='GRF1XVBVD' where id=4; -update noar tt set b1='NQY3WWU' where id=4; -update noar ti set b1='NQY3WWU' where id=4; -update noar tt set v0='0UI5SRLRGOMI' where id=4; -update noar ti set v0='0UI5SRLRGOMI' where id=4; -update noar tt set b2='I1IO3HUIDWU9CK2GPG6OH' where id=4; -update noar ti set b2='I1IO3HUIDWU9CK2GPG6OH' where id=4; -update noar tt set v0='ZYIOVR4I9VHKUBA3JV0A5' where id=5; -update noar ti set v0='ZYIOVR4I9VHKUBA3JV0A5' where id=5; -update noar tt set b0='GN061QFF0DTCSSIHFNC3I' where id=5; -update noar ti set b0='GN061QFF0DTCSSIHFNC3I' where id=5; -update noar tt set v0='LFB91L6WVCNIV1XUQ88B9KBJGIRH1KTA' where id=5; -update noar ti set v0='LFB91L6WVCNIV1XUQ88B9KBJGIRH1KTA' where id=5; -update noar tt set b1='SF6LHC5Y8VIJVI6HYU8' where id=5; -update noar ti set b1='SF6LHC5Y8VIJVI6HYU8' where id=5; -update noar tt set v0='H61ML8BKE22A1U' where id=5; -update noar ti set v0='H61ML8BKE22A1U' where id=5; -update noar tt set b2='2ZSJ89CRFJ4CSR7H9D9ABDCJS9' where id=5; -update noar ti set b2='2ZSJ89CRFJ4CSR7H9D9ABDCJS9' where id=5; -update noar tt set v0='6ZRR5WMP6LK41K8PWY5SBJ' where id=6; -update noar ti set v0='6ZRR5WMP6LK41K8PWY5SBJ' where id=6; -update noar tt set b0='UIM4YDBTUKZ4KA9E1OJJDH0IPPDWJ6YR' where id=6; -update noar ti set b0='UIM4YDBTUKZ4KA9E1OJJDH0IPPDWJ6YR' where id=6; -update noar tt set v0='UL774WMW2' where id=6; -update noar ti set v0='UL774WMW2' where id=6; -update noar tt set b1='LDYP0LXVSR7V6CFST0' where id=6; -update noar ti set b1='LDYP0LXVSR7V6CFST0' where id=6; -update noar tt set v0='CY5O25XWQHOHVMJ02' where id=6; -update noar ti set v0='CY5O25XWQHOHVMJ02' where id=6; -update noar tt set b2='BIMCIIDQT1JD1' where id=6; -update noar ti set b2='BIMCIIDQT1JD1' where id=6; -update noar tt set v0='K6' where id=7; -update noar ti set v0='K6' where id=7; -update noar tt set b0='A7CSST68SL' where id=7; -update noar ti set b0='A7CSST68SL' where id=7; -update noar tt set v0='99RUPK8PHGC' where id=7; -update noar ti set v0='99RUPK8PHGC' where id=7; -update noar tt set b1='F27B43FXYVNCBEBKH7X2F3MNDGBC0GG' where id=7; -update noar ti set b1='F27B43FXYVNCBEBKH7X2F3MNDGBC0GG' where id=7; -update noar tt set v0='V153NO' where id=7; -update noar ti set v0='V153NO' where id=7; -update noar tt set b2='9D0JW6FJV0J91PN4M1RRUR2M' where id=7; -update noar ti set b2='9D0JW6FJV0J91PN4M1RRUR2M' where id=7; -update noar tt set v0='4FAWYLHXETBPGUI0M0963BL' where id=8; -update noar ti set v0='4FAWYLHXETBPGUI0M0963BL' where id=8; -update noar tt set b0='0NR021OY5XIQX' where id=8; -update noar ti set b0='0NR021OY5XIQX' where id=8; -update noar tt set v0='EUEIQDO4MCV59K2DSAQHZ' where id=8; -update noar ti set v0='EUEIQDO4MCV59K2DSAQHZ' where id=8; -update noar tt set b1='24GNKUXK' where id=8; -update noar ti set b1='24GNKUXK' where id=8; -update noar tt set v0='JIQNYN5SW974MY9GI1YCN5K3X' where id=8; -update noar ti set v0='JIQNYN5SW974MY9GI1YCN5K3X' where id=8; -update noar tt set b2='9OGVXHP498Q882IHV' where id=8; -update noar ti set b2='9OGVXHP498Q882IHV' where id=8; -update noar tt set v0='YIRUN7D9HELPIFI04P1P9NHD' where id=9; -update noar ti set v0='YIRUN7D9HELPIFI04P1P9NHD' where id=9; -update noar tt set b0='KE048PRIXCQETE' where id=9; -update noar ti set b0='KE048PRIXCQETE' where id=9; -update noar tt set v0='UKWHY5NIA' where id=9; -update noar ti set v0='UKWHY5NIA' where id=9; -update noar tt set b1='1IMO1WU3MONAXGZE' where id=9; -update noar ti set b1='1IMO1WU3MONAXGZE' where id=9; -update noar tt set v0='W23HUU7DNUB7M4VGQ38C668' where id=9; -update noar ti set v0='W23HUU7DNUB7M4VGQ38C668' where id=9; -update noar tt set b2='PECRR4P2K93AARS3D' where id=9; -update noar ti set b2='PECRR4P2K93AARS3D' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 longblob null, - b1 tinyblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='B1IGO7DV20L56324S8' where id=1; -update noar ti set v0='B1IGO7DV20L56324S8' where id=1; -update noar tt set b0='MJ8CQD0' where id=1; -update noar ti set b0='MJ8CQD0' where id=1; -update noar tt set v0='S1LA5VV5G9QGH8' where id=1; -update noar ti set v0='S1LA5VV5G9QGH8' where id=1; -update noar tt set b1='J9OY0V' where id=1; -update noar ti set b1='J9OY0V' where id=1; -update noar tt set v0='5EFRNODWQ792HNH3ZJTP7DK3KWU4' where id=1; -update noar ti set v0='5EFRNODWQ792HNH3ZJTP7DK3KWU4' where id=1; -update noar tt set b2='4RG9SMNZC0J' where id=1; -update noar ti set b2='4RG9SMNZC0J' where id=1; -update noar tt set v0='YXA6MMZP' where id=2; -update noar ti set v0='YXA6MMZP' where id=2; -update noar tt set b0='FH3XKR97ETX8BDCLAJBBWL33CADU' where id=2; -update noar ti set b0='FH3XKR97ETX8BDCLAJBBWL33CADU' where id=2; -update noar tt set v0='GGOUD' where id=2; -update noar ti set v0='GGOUD' where id=2; -update noar tt set b1='5B4Y734Q6BSBR5BN35GBGOZ' where id=2; -update noar ti set b1='5B4Y734Q6BSBR5BN35GBGOZ' where id=2; -update noar tt set v0='L7E6RO53E' where id=2; -update noar ti set v0='L7E6RO53E' where id=2; -update noar tt set b2='SE678Z1A7OIGGALRFUCXV2TD9' where id=2; -update noar ti set b2='SE678Z1A7OIGGALRFUCXV2TD9' where id=2; -update noar tt set v0='H0D91Q3RT7H5OJZR' where id=3; -update noar ti set v0='H0D91Q3RT7H5OJZR' where id=3; -update noar tt set b0='XZM16WP9FF4JDBB8AG2M' where id=3; -update noar ti set b0='XZM16WP9FF4JDBB8AG2M' where id=3; -update noar tt set v0='7FFUQ2VU9ZPM0XJVA1OSB' where id=3; -update noar ti set v0='7FFUQ2VU9ZPM0XJVA1OSB' where id=3; -update noar tt set b1='IR7QINVXUYRH7' where id=3; -update noar ti set b1='IR7QINVXUYRH7' where id=3; -update noar tt set v0='9Q4CFI4YXX7VSXV' where id=3; -update noar ti set v0='9Q4CFI4YXX7VSXV' where id=3; -update noar tt set b2='AR02Q3OY9K37ZFUPZG' where id=3; -update noar ti set b2='AR02Q3OY9K37ZFUPZG' where id=3; -update noar tt set v0='2YHV63R51IIK0B2' where id=4; -update noar ti set v0='2YHV63R51IIK0B2' where id=4; -update noar tt set b0='5VXJZZSJLFCEYVBKJ9410Z9FY1KWR4' where id=4; -update noar ti set b0='5VXJZZSJLFCEYVBKJ9410Z9FY1KWR4' where id=4; -update noar tt set v0='M8KJFKIU9' where id=4; -update noar ti set v0='M8KJFKIU9' where id=4; -update noar tt set b1='3GKFA1VK0G7FWFNFCMH6FWDR22S' where id=4; -update noar ti set b1='3GKFA1VK0G7FWFNFCMH6FWDR22S' where id=4; -update noar tt set v0='M5K2XHQ9S5I5701R2IP3V94HOFYDK' where id=4; -update noar ti set v0='M5K2XHQ9S5I5701R2IP3V94HOFYDK' where id=4; -update noar tt set b2='MITK5L82OVS1ZKKSKHFXPQ0IGSYYRT' where id=4; -update noar ti set b2='MITK5L82OVS1ZKKSKHFXPQ0IGSYYRT' where id=4; -update noar tt set v0='146B6' where id=5; -update noar ti set v0='146B6' where id=5; -update noar tt set b0='NIV9UQ0YMCPFQYEX8EH7AO264M33Q4S9' where id=5; -update noar ti set b0='NIV9UQ0YMCPFQYEX8EH7AO264M33Q4S9' where id=5; -update noar tt set v0='53K6LDH3A47JZDCYYF0NA4XY49' where id=5; -update noar ti set v0='53K6LDH3A47JZDCYYF0NA4XY49' where id=5; -update noar tt set b1='KOXNN77WBW40GPFOBMAYP38LQJ' where id=5; -update noar ti set b1='KOXNN77WBW40GPFOBMAYP38LQJ' where id=5; -update noar tt set v0='6CD20XU7YBKQBX7XWBW4GZ2APQZ848' where id=5; -update noar ti set v0='6CD20XU7YBKQBX7XWBW4GZ2APQZ848' where id=5; -update noar tt set b2='FY3M1K67FYR2BZHKH9ZHX0AH6UYA' where id=5; -update noar ti set b2='FY3M1K67FYR2BZHKH9ZHX0AH6UYA' where id=5; -update noar tt set v0='5M1D0YRXIUVAOBIOM1NN' where id=6; -update noar ti set v0='5M1D0YRXIUVAOBIOM1NN' where id=6; -update noar tt set b0='81OULN2Z5U3ZR2F' where id=6; -update noar ti set b0='81OULN2Z5U3ZR2F' where id=6; -update noar tt set v0='NDDE8SHV1T1F10M90N' where id=6; -update noar ti set v0='NDDE8SHV1T1F10M90N' where id=6; -update noar tt set b1='8LCC5RHZ9ID5T366BFOT57HGJSI8J' where id=6; -update noar ti set b1='8LCC5RHZ9ID5T366BFOT57HGJSI8J' where id=6; -update noar tt set v0='78I0ODYN5' where id=6; -update noar ti set v0='78I0ODYN5' where id=6; -update noar tt set b2='6KZVJUE97U4T' where id=6; -update noar ti set b2='6KZVJUE97U4T' where id=6; -update noar tt set v0='65TLN8GCF022' where id=7; -update noar ti set v0='65TLN8GCF022' where id=7; -update noar tt set b0='I' where id=7; -update noar ti set b0='I' where id=7; -update noar tt set v0='NKPCBWKX983O0G65RZTDSPF5113AT' where id=7; -update noar ti set v0='NKPCBWKX983O0G65RZTDSPF5113AT' where id=7; -update noar tt set b1='J1VGQHTJX1TVILO2I1XKH8KV70OCFA9' where id=7; -update noar ti set b1='J1VGQHTJX1TVILO2I1XKH8KV70OCFA9' where id=7; -update noar tt set v0='CR9ZJPVFPBXF994JKXTASXYCEF' where id=7; -update noar ti set v0='CR9ZJPVFPBXF994JKXTASXYCEF' where id=7; -update noar tt set b2='1CDYV630DYAJNVY' where id=7; -update noar ti set b2='1CDYV630DYAJNVY' where id=7; -update noar tt set v0='N9OOB6PD2AORDA' where id=8; -update noar ti set v0='N9OOB6PD2AORDA' where id=8; -update noar tt set b0='47U7FAS5G0796N5YQM' where id=8; -update noar ti set b0='47U7FAS5G0796N5YQM' where id=8; -update noar tt set v0='4' where id=8; -update noar ti set v0='4' where id=8; -update noar tt set b1='Z030' where id=8; -update noar ti set b1='Z030' where id=8; -update noar tt set v0='3ZESS79005ZT9' where id=8; -update noar ti set v0='3ZESS79005ZT9' where id=8; -update noar tt set b2='R6MX2YE81IMI4VP2DYN1S2' where id=8; -update noar ti set b2='R6MX2YE81IMI4VP2DYN1S2' where id=8; -update noar tt set v0='XW1OL1IHPMVWF1GXNGT0CDXQHKE' where id=9; -update noar ti set v0='XW1OL1IHPMVWF1GXNGT0CDXQHKE' where id=9; -update noar tt set b0='KZXRYUP19AX0KFTQ5M' where id=9; -update noar ti set b0='KZXRYUP19AX0KFTQ5M' where id=9; -update noar tt set v0='9ICCVNAFM0JY5OQ8UUWW3' where id=9; -update noar ti set v0='9ICCVNAFM0JY5OQ8UUWW3' where id=9; -update noar tt set b1='0KPET4QKC' where id=9; -update noar ti set b1='0KPET4QKC' where id=9; -update noar tt set v0='C4LZ68' where id=9; -update noar ti set v0='C4LZ68' where id=9; -update noar tt set b2='AAV9VEMA009IHYOJ6SGM7E' where id=9; -update noar ti set b2='AAV9VEMA009IHYOJ6SGM7E' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 longblob not null, - b1 tinyblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='L' where id=1; -update noar ti set v0='L' where id=1; -update noar tt set b0='IF69NY3BXJ' where id=1; -update noar ti set b0='IF69NY3BXJ' where id=1; -update noar tt set v0='1ZL' where id=1; -update noar ti set v0='1ZL' where id=1; -update noar tt set b1='XNALR03RRD0ZJKE3R478YN' where id=1; -update noar ti set b1='XNALR03RRD0ZJKE3R478YN' where id=1; -update noar tt set v0='126V8KE3LTM8SJ9VWVT2GKE9NM73V4OI' where id=1; -update noar ti set v0='126V8KE3LTM8SJ9VWVT2GKE9NM73V4OI' where id=1; -update noar tt set b2='6R1CV9QU6BBS0F2TYNBJCJ4DJS' where id=1; -update noar ti set b2='6R1CV9QU6BBS0F2TYNBJCJ4DJS' where id=1; -update noar tt set v0='FKNVSHDGTBANHPFQHF3BRG8ZOS' where id=2; -update noar ti set v0='FKNVSHDGTBANHPFQHF3BRG8ZOS' where id=2; -update noar tt set b0='GNMO31UCLY0MQS8J2FOFNDKVUX' where id=2; -update noar ti set b0='GNMO31UCLY0MQS8J2FOFNDKVUX' where id=2; -update noar tt set v0='H07SAQWVECS74XHRYQ' where id=2; -update noar ti set v0='H07SAQWVECS74XHRYQ' where id=2; -update noar tt set b1='EQLHGZCJVAQXH' where id=2; -update noar ti set b1='EQLHGZCJVAQXH' where id=2; -update noar tt set v0='1H45UEOJWEIU' where id=2; -update noar ti set v0='1H45UEOJWEIU' where id=2; -update noar tt set b2='1UTY5NL' where id=2; -update noar ti set b2='1UTY5NL' where id=2; -update noar tt set v0='BWL3TTLP9JRLJ' where id=3; -update noar ti set v0='BWL3TTLP9JRLJ' where id=3; -update noar tt set b0='HL9JXI94MQB1PO9CVDHQYKKT5D' where id=3; -update noar ti set b0='HL9JXI94MQB1PO9CVDHQYKKT5D' where id=3; -update noar tt set v0='O32AJI62PH1QOV' where id=3; -update noar ti set v0='O32AJI62PH1QOV' where id=3; -update noar tt set b1='A1DCBV2E54EH001Q56HUS' where id=3; -update noar ti set b1='A1DCBV2E54EH001Q56HUS' where id=3; -update noar tt set v0='H6I6Q5EPZLY1QFYT048XMW79GAJX4UFM' where id=3; -update noar ti set v0='H6I6Q5EPZLY1QFYT048XMW79GAJX4UFM' where id=3; -update noar tt set b2='6' where id=3; -update noar ti set b2='6' where id=3; -update noar tt set v0='DCB88P1BS5L4WWTRJJD' where id=4; -update noar ti set v0='DCB88P1BS5L4WWTRJJD' where id=4; -update noar tt set b0='NZ6LCR5WOA2XRU5TD8' where id=4; -update noar ti set b0='NZ6LCR5WOA2XRU5TD8' where id=4; -update noar tt set v0='GP2WH0P74UL3W' where id=4; -update noar ti set v0='GP2WH0P74UL3W' where id=4; -update noar tt set b1='Z8FFCOGQE9D3IDX0' where id=4; -update noar ti set b1='Z8FFCOGQE9D3IDX0' where id=4; -update noar tt set v0='1WPRL8' where id=4; -update noar ti set v0='1WPRL8' where id=4; -update noar tt set b2='1AYFH7ATPPCD7TQEHROSSYXZQ' where id=4; -update noar ti set b2='1AYFH7ATPPCD7TQEHROSSYXZQ' where id=4; -update noar tt set v0='A224B86H08EE0QXF' where id=5; -update noar ti set v0='A224B86H08EE0QXF' where id=5; -update noar tt set b0='ZPS8HCUDPA5HYJJC6KJ51EQ0XP' where id=5; -update noar ti set b0='ZPS8HCUDPA5HYJJC6KJ51EQ0XP' where id=5; -update noar tt set v0='UYDH5NXIL71TQ241LLUN2PPPOY4FX' where id=5; -update noar ti set v0='UYDH5NXIL71TQ241LLUN2PPPOY4FX' where id=5; -update noar tt set b1='NR29' where id=5; -update noar ti set b1='NR29' where id=5; -update noar tt set v0='DLE2' where id=5; -update noar ti set v0='DLE2' where id=5; -update noar tt set b2='75GYXANI2URDQNHH2A0G' where id=5; -update noar ti set b2='75GYXANI2URDQNHH2A0G' where id=5; -update noar tt set v0='UNBC' where id=6; -update noar ti set v0='UNBC' where id=6; -update noar tt set b0='AU5RH' where id=6; -update noar ti set b0='AU5RH' where id=6; -update noar tt set v0='IWW2358XZECDI3JX3' where id=6; -update noar ti set v0='IWW2358XZECDI3JX3' where id=6; -update noar tt set b1='4WC' where id=6; -update noar ti set b1='4WC' where id=6; -update noar tt set v0='AX41AV2FD791OIQ8' where id=6; -update noar ti set v0='AX41AV2FD791OIQ8' where id=6; -update noar tt set b2='N1MVMBKI94HV7KWT5GXPZKC69' where id=6; -update noar ti set b2='N1MVMBKI94HV7KWT5GXPZKC69' where id=6; -update noar tt set v0='JCE827LMW' where id=7; -update noar ti set v0='JCE827LMW' where id=7; -update noar tt set b0='C0CRF0GRC4' where id=7; -update noar ti set b0='C0CRF0GRC4' where id=7; -update noar tt set v0='WM2' where id=7; -update noar ti set v0='WM2' where id=7; -update noar tt set b1='NPLL8QOKHBGII' where id=7; -update noar ti set b1='NPLL8QOKHBGII' where id=7; -update noar tt set v0='E' where id=7; -update noar ti set v0='E' where id=7; -update noar tt set b2='GVI3F9WU1CK2QCL2HNWP64CZQ84OBWTP' where id=7; -update noar ti set b2='GVI3F9WU1CK2QCL2HNWP64CZQ84OBWTP' where id=7; -update noar tt set v0='ICA' where id=8; -update noar ti set v0='ICA' where id=8; -update noar tt set b0='V9CXIG1Y' where id=8; -update noar ti set b0='V9CXIG1Y' where id=8; -update noar tt set v0='GGOEI1JJ37H9UR7SNGA2L6PTZOT' where id=8; -update noar ti set v0='GGOEI1JJ37H9UR7SNGA2L6PTZOT' where id=8; -update noar tt set b1='WXAZQ9B4UXHPS8CLTIY8O' where id=8; -update noar ti set b1='WXAZQ9B4UXHPS8CLTIY8O' where id=8; -update noar tt set v0='GYU0O' where id=8; -update noar ti set v0='GYU0O' where id=8; -update noar tt set b2='0LNX7N8HJKRR613LJOL' where id=8; -update noar ti set b2='0LNX7N8HJKRR613LJOL' where id=8; -update noar tt set v0='60TZIU6G6Q5DE60BF0DVQVL9G' where id=9; -update noar ti set v0='60TZIU6G6Q5DE60BF0DVQVL9G' where id=9; -update noar tt set b0='VJL5PQEICASWGELCQ4CABIL4PN3ME' where id=9; -update noar ti set b0='VJL5PQEICASWGELCQ4CABIL4PN3ME' where id=9; -update noar tt set v0='P1TIS1TKAT' where id=9; -update noar ti set v0='P1TIS1TKAT' where id=9; -update noar tt set b1='6AO7DZDS68' where id=9; -update noar ti set b1='6AO7DZDS68' where id=9; -update noar tt set v0='BFJGZH00LXF9FQ39MK' where id=9; -update noar ti set v0='BFJGZH00LXF9FQ39MK' where id=9; -update noar tt set b2='97F59UKP' where id=9; -update noar ti set b2='97F59UKP' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 longblob not null, - b1 tinyblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='ZOCDEKMHB2QN11NE51' where id=1; -update noar ti set v0='ZOCDEKMHB2QN11NE51' where id=1; -update noar tt set b0='CAR6T8HPC5PCL' where id=1; -update noar ti set b0='CAR6T8HPC5PCL' where id=1; -update noar tt set v0='M7W67XGCP293DKXJTQ3XE' where id=1; -update noar ti set v0='M7W67XGCP293DKXJTQ3XE' where id=1; -update noar tt set b1='A8ZNUZK4WN' where id=1; -update noar ti set b1='A8ZNUZK4WN' where id=1; -update noar tt set v0='0T7R81XZSE4D4L9' where id=1; -update noar ti set v0='0T7R81XZSE4D4L9' where id=1; -update noar tt set b2='EPSTA' where id=1; -update noar ti set b2='EPSTA' where id=1; -update noar tt set v0='QVNL9ORWZ4GHG' where id=2; -update noar ti set v0='QVNL9ORWZ4GHG' where id=2; -update noar tt set b0='V9DVQLQ5FTXF' where id=2; -update noar ti set b0='V9DVQLQ5FTXF' where id=2; -update noar tt set v0='TD' where id=2; -update noar ti set v0='TD' where id=2; -update noar tt set b1='UBT1RRT5DYN' where id=2; -update noar ti set b1='UBT1RRT5DYN' where id=2; -update noar tt set v0='7NGC4AD0YOE38CEXI0J5' where id=2; -update noar ti set v0='7NGC4AD0YOE38CEXI0J5' where id=2; -update noar tt set b2='S6H0OB82UFW0V3' where id=2; -update noar ti set b2='S6H0OB82UFW0V3' where id=2; -update noar tt set v0='28EGQHQAHLNM7J61U9EWJ1L' where id=3; -update noar ti set v0='28EGQHQAHLNM7J61U9EWJ1L' where id=3; -update noar tt set b0='2L' where id=3; -update noar ti set b0='2L' where id=3; -update noar tt set v0='HL36AT3QC41UURQ18O7SG32GVLO' where id=3; -update noar ti set v0='HL36AT3QC41UURQ18O7SG32GVLO' where id=3; -update noar tt set b1='DC' where id=3; -update noar ti set b1='DC' where id=3; -update noar tt set v0='VNU4E5UU4ECBEW5OUJ9R3W5ALDN' where id=3; -update noar ti set v0='VNU4E5UU4ECBEW5OUJ9R3W5ALDN' where id=3; -update noar tt set b2='4792LM8T8CIYKBVICLQKQZHJJ207C' where id=3; -update noar ti set b2='4792LM8T8CIYKBVICLQKQZHJJ207C' where id=3; -update noar tt set v0='4' where id=4; -update noar ti set v0='4' where id=4; -update noar tt set b0='OHOPZLCK9' where id=4; -update noar ti set b0='OHOPZLCK9' where id=4; -update noar tt set v0='T7HZEBG5INMYYMBEYYWQLU1' where id=4; -update noar ti set v0='T7HZEBG5INMYYMBEYYWQLU1' where id=4; -update noar tt set b1='BV1JHRA9V' where id=4; -update noar ti set b1='BV1JHRA9V' where id=4; -update noar tt set v0='K1RH2UNXR75EDOJDF4GNH' where id=4; -update noar ti set v0='K1RH2UNXR75EDOJDF4GNH' where id=4; -update noar tt set b2='R1QXWG18EM58E86GOO2GXXP' where id=4; -update noar ti set b2='R1QXWG18EM58E86GOO2GXXP' where id=4; -update noar tt set v0='J9GEQ25I0947YIK70H8Z' where id=5; -update noar ti set v0='J9GEQ25I0947YIK70H8Z' where id=5; -update noar tt set b0='W7VGX4GBRWP7B91HCZ4RJY8J' where id=5; -update noar ti set b0='W7VGX4GBRWP7B91HCZ4RJY8J' where id=5; -update noar tt set v0='INBTWALEA02PU6TTOI0HDQFJ' where id=5; -update noar ti set v0='INBTWALEA02PU6TTOI0HDQFJ' where id=5; -update noar tt set b1='43T04NNJQ2Q7YQGPLE5UVNYE' where id=5; -update noar ti set b1='43T04NNJQ2Q7YQGPLE5UVNYE' where id=5; -update noar tt set v0='ML7' where id=5; -update noar ti set v0='ML7' where id=5; -update noar tt set b2='4MZ99F' where id=5; -update noar ti set b2='4MZ99F' where id=5; -update noar tt set v0='JSYE9U6YDF9Y83DBT6JCT06Q' where id=6; -update noar ti set v0='JSYE9U6YDF9Y83DBT6JCT06Q' where id=6; -update noar tt set b0='9PUCB9SDDFZI1F39' where id=6; -update noar ti set b0='9PUCB9SDDFZI1F39' where id=6; -update noar tt set v0='ZXF8VNJQ5CKM4N0LHVCJX9ELZKOAW6' where id=6; -update noar ti set v0='ZXF8VNJQ5CKM4N0LHVCJX9ELZKOAW6' where id=6; -update noar tt set b1='EOPRC5ZCA02SQOSLDVTKW' where id=6; -update noar ti set b1='EOPRC5ZCA02SQOSLDVTKW' where id=6; -update noar tt set v0='3ZA7LXSSFQ9ETSN7AT8R8AE' where id=6; -update noar ti set v0='3ZA7LXSSFQ9ETSN7AT8R8AE' where id=6; -update noar tt set b2='414BF7SBPRW3DCT5A5ME7IWK' where id=6; -update noar ti set b2='414BF7SBPRW3DCT5A5ME7IWK' where id=6; -update noar tt set v0='V7GKO7XGBPF986HVCIYCW7WS9HYC2' where id=7; -update noar ti set v0='V7GKO7XGBPF986HVCIYCW7WS9HYC2' where id=7; -update noar tt set b0='SPUUTRMS' where id=7; -update noar ti set b0='SPUUTRMS' where id=7; -update noar tt set v0='DGNM362PAALAC' where id=7; -update noar ti set v0='DGNM362PAALAC' where id=7; -update noar tt set b1='MN7RXYQ1ID5R1K4C' where id=7; -update noar ti set b1='MN7RXYQ1ID5R1K4C' where id=7; -update noar tt set v0='TMO9NDT1UJRC3HSRQ9K7UXVAE3P1O' where id=7; -update noar ti set v0='TMO9NDT1UJRC3HSRQ9K7UXVAE3P1O' where id=7; -update noar tt set b2='7JRP2HY' where id=7; -update noar ti set b2='7JRP2HY' where id=7; -update noar tt set v0='JAE9LUZV6T7ZJYD0D42B' where id=8; -update noar ti set v0='JAE9LUZV6T7ZJYD0D42B' where id=8; -update noar tt set b0='B' where id=8; -update noar ti set b0='B' where id=8; -update noar tt set v0='OW1AECDWD820HL0WQRVZ94' where id=8; -update noar ti set v0='OW1AECDWD820HL0WQRVZ94' where id=8; -update noar tt set b1='LHIISZ7Y6CG70ZFD6' where id=8; -update noar ti set b1='LHIISZ7Y6CG70ZFD6' where id=8; -update noar tt set v0='PAMD08IADUBO' where id=8; -update noar ti set v0='PAMD08IADUBO' where id=8; -update noar tt set b2='ZMJSZBQIPHR9H74P75DYIWDN8' where id=8; -update noar ti set b2='ZMJSZBQIPHR9H74P75DYIWDN8' where id=8; -update noar tt set v0='6B5DOVQDSMP7T2HK1G' where id=9; -update noar ti set v0='6B5DOVQDSMP7T2HK1G' where id=9; -update noar tt set b0='CNFE1MUZFMNH8HNUCHLKF3A4QUL' where id=9; -update noar ti set b0='CNFE1MUZFMNH8HNUCHLKF3A4QUL' where id=9; -update noar tt set v0='CZBB1JOJ5HZJZJB9QLXV86Q5TL1' where id=9; -update noar ti set v0='CZBB1JOJ5HZJZJB9QLXV86Q5TL1' where id=9; -update noar tt set b1='S0RYYTTDT1SKPYWPRUBJ' where id=9; -update noar ti set b1='S0RYYTTDT1SKPYWPRUBJ' where id=9; -update noar tt set v0='BPPVJ1QZK42' where id=9; -update noar ti set v0='BPPVJ1QZK42' where id=9; -update noar tt set b2='01F0KRLBVONW' where id=9; -update noar ti set b2='01F0KRLBVONW' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 longblob null, - b1 tinyblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='ULS8LOZYQY7ZN73UMV8ZBPJA' where id=1; -update noar ti set v0='ULS8LOZYQY7ZN73UMV8ZBPJA' where id=1; -update noar tt set b0='TICZNHX6SMBRVN' where id=1; -update noar ti set b0='TICZNHX6SMBRVN' where id=1; -update noar tt set v0='3' where id=1; -update noar ti set v0='3' where id=1; -update noar tt set b1='E' where id=1; -update noar ti set b1='E' where id=1; -update noar tt set v0='HAHL7PP' where id=1; -update noar ti set v0='HAHL7PP' where id=1; -update noar tt set b2='DE1DCSY2SS9PA3' where id=1; -update noar ti set b2='DE1DCSY2SS9PA3' where id=1; -update noar tt set v0='SA2EBYISV883BAF' where id=2; -update noar ti set v0='SA2EBYISV883BAF' where id=2; -update noar tt set b0='P0' where id=2; -update noar ti set b0='P0' where id=2; -update noar tt set v0='BRLQDV0VX6WY5V42TIQ3CEAS' where id=2; -update noar ti set v0='BRLQDV0VX6WY5V42TIQ3CEAS' where id=2; -update noar tt set b1='G' where id=2; -update noar ti set b1='G' where id=2; -update noar tt set v0='YW87EGUCTJB9XUY9Z5' where id=2; -update noar ti set v0='YW87EGUCTJB9XUY9Z5' where id=2; -update noar tt set b2='OLF6D7Y0DJ5QKXYYXQ6I34HNUO0GM4YJ' where id=2; -update noar ti set b2='OLF6D7Y0DJ5QKXYYXQ6I34HNUO0GM4YJ' where id=2; -update noar tt set v0='M3ZJUW12WKFM0KXPNVGE' where id=3; -update noar ti set v0='M3ZJUW12WKFM0KXPNVGE' where id=3; -update noar tt set b0='ECSUVUKU2YJ4WOM' where id=3; -update noar ti set b0='ECSUVUKU2YJ4WOM' where id=3; -update noar tt set v0='67SBC0QSVQXW8W77JFPTFQ36Q6SBR3V5' where id=3; -update noar ti set v0='67SBC0QSVQXW8W77JFPTFQ36Q6SBR3V5' where id=3; -update noar tt set b1='2M74HBMZOZCAD8P2' where id=3; -update noar ti set b1='2M74HBMZOZCAD8P2' where id=3; -update noar tt set v0='168' where id=3; -update noar ti set v0='168' where id=3; -update noar tt set b2='T3PIJT7PZ4S' where id=3; -update noar ti set b2='T3PIJT7PZ4S' where id=3; -update noar tt set v0='I1QPO05HPCKYFJLVRQ4' where id=4; -update noar ti set v0='I1QPO05HPCKYFJLVRQ4' where id=4; -update noar tt set b0='NQKU2GUCKPHJ8BP15M1B2O6VBF29' where id=4; -update noar ti set b0='NQKU2GUCKPHJ8BP15M1B2O6VBF29' where id=4; -update noar tt set v0='VEPYIS3XNWF' where id=4; -update noar ti set v0='VEPYIS3XNWF' where id=4; -update noar tt set b1='A6MSVJZF9BPUS2MRZVYR61LG3' where id=4; -update noar ti set b1='A6MSVJZF9BPUS2MRZVYR61LG3' where id=4; -update noar tt set v0='DAESI1GVZV5I8E7Y7A4LW8E0OV' where id=4; -update noar ti set v0='DAESI1GVZV5I8E7Y7A4LW8E0OV' where id=4; -update noar tt set b2='6ORP9' where id=4; -update noar ti set b2='6ORP9' where id=4; -update noar tt set v0='KQK00LMBM42A' where id=5; -update noar ti set v0='KQK00LMBM42A' where id=5; -update noar tt set b0='XEVYZCWFKT4TSOTXVE3O3VL7B' where id=5; -update noar ti set b0='XEVYZCWFKT4TSOTXVE3O3VL7B' where id=5; -update noar tt set v0='VSG14N0REDW' where id=5; -update noar ti set v0='VSG14N0REDW' where id=5; -update noar tt set b1='I29HIB0L8TMPU8YKQ146' where id=5; -update noar ti set b1='I29HIB0L8TMPU8YKQ146' where id=5; -update noar tt set v0='0CUA7XOPXVJ66ZHFL43SQ8BITRBG8' where id=5; -update noar ti set v0='0CUA7XOPXVJ66ZHFL43SQ8BITRBG8' where id=5; -update noar tt set b2='QDQBGT' where id=5; -update noar ti set b2='QDQBGT' where id=5; -update noar tt set v0='AXUJ' where id=6; -update noar ti set v0='AXUJ' where id=6; -update noar tt set b0='6KVRFRJ9ZD1647' where id=6; -update noar ti set b0='6KVRFRJ9ZD1647' where id=6; -update noar tt set v0='VYVOYKY' where id=6; -update noar ti set v0='VYVOYKY' where id=6; -update noar tt set b1='K0SK' where id=6; -update noar ti set b1='K0SK' where id=6; -update noar tt set v0='70040D81WJSOUYQAJDZ5Q1VPXCGG' where id=6; -update noar ti set v0='70040D81WJSOUYQAJDZ5Q1VPXCGG' where id=6; -update noar tt set b2='HZ' where id=6; -update noar ti set b2='HZ' where id=6; -update noar tt set v0='NTYB9VB9QWY0QPW0HLWA38' where id=7; -update noar ti set v0='NTYB9VB9QWY0QPW0HLWA38' where id=7; -update noar tt set b0='SE8G7OYYORSJXZ' where id=7; -update noar ti set b0='SE8G7OYYORSJXZ' where id=7; -update noar tt set v0='QMLE6CXXCLSVB' where id=7; -update noar ti set v0='QMLE6CXXCLSVB' where id=7; -update noar tt set b1='CHP77LJWJQB1I076U4DWXX4M' where id=7; -update noar ti set b1='CHP77LJWJQB1I076U4DWXX4M' where id=7; -update noar tt set v0='OU1OE5' where id=7; -update noar ti set v0='OU1OE5' where id=7; -update noar tt set b2='6ICDHU6MBIBOVRIPH9EHZRXERBNS' where id=7; -update noar ti set b2='6ICDHU6MBIBOVRIPH9EHZRXERBNS' where id=7; -update noar tt set v0='QB' where id=8; -update noar ti set v0='QB' where id=8; -update noar tt set b0='40PP83' where id=8; -update noar ti set b0='40PP83' where id=8; -update noar tt set v0='0DJVHDFWUDQUH6G' where id=8; -update noar ti set v0='0DJVHDFWUDQUH6G' where id=8; -update noar tt set b1='N02XUW50C9UZG3Y24ZECG0T67NMG0C' where id=8; -update noar ti set b1='N02XUW50C9UZG3Y24ZECG0T67NMG0C' where id=8; -update noar tt set v0='I4W1' where id=8; -update noar ti set v0='I4W1' where id=8; -update noar tt set b2='CP2R41KJPHKBACPNZ' where id=8; -update noar ti set b2='CP2R41KJPHKBACPNZ' where id=8; -update noar tt set v0='DFH1J14EYHYHMNPL8UX1Q4SRYNVXBRY' where id=9; -update noar ti set v0='DFH1J14EYHYHMNPL8UX1Q4SRYNVXBRY' where id=9; -update noar tt set b0='33J76D63WVJ' where id=9; -update noar ti set b0='33J76D63WVJ' where id=9; -update noar tt set v0='3N41WDAVWDN24SJD94X' where id=9; -update noar ti set v0='3N41WDAVWDN24SJD94X' where id=9; -update noar tt set b1='X5LXGCJ5FMN4GC26E737SWDDSWDU4H87' where id=9; -update noar ti set b1='X5LXGCJ5FMN4GC26E737SWDDSWDU4H87' where id=9; -update noar tt set v0='RCDMKUG' where id=9; -update noar ti set v0='RCDMKUG' where id=9; -update noar tt set b2='ZUQE6NCO53NUAMCI79J2V' where id=9; -update noar ti set b2='ZUQE6NCO53NUAMCI79J2V' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 longblob null, - b1 tinyblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='IGMFUYDB0UD218GSMIUTY1H' where id=1; -update noar ti set v0='IGMFUYDB0UD218GSMIUTY1H' where id=1; -update noar tt set b0='NAKSD4AHH17MNU4C0R1G5LWHDHP' where id=1; -update noar ti set b0='NAKSD4AHH17MNU4C0R1G5LWHDHP' where id=1; -update noar tt set v0='LODP6R' where id=1; -update noar ti set v0='LODP6R' where id=1; -update noar tt set b1='S97PHH46QPU9SSAENQLUSCJHAX6ME' where id=1; -update noar ti set b1='S97PHH46QPU9SSAENQLUSCJHAX6ME' where id=1; -update noar tt set v0='KGLZL2SDLF' where id=1; -update noar ti set v0='KGLZL2SDLF' where id=1; -update noar tt set b2='LQOR5V8WNGV907Q7CUW51' where id=1; -update noar ti set b2='LQOR5V8WNGV907Q7CUW51' where id=1; -update noar tt set v0='YSRDR' where id=2; -update noar ti set v0='YSRDR' where id=2; -update noar tt set b0='EC1IY3VJPV5BT6S9RHLPR3RIK0P9T' where id=2; -update noar ti set b0='EC1IY3VJPV5BT6S9RHLPR3RIK0P9T' where id=2; -update noar tt set v0='5TQIAH62TOYG98O9AAXS73B10YGQMMG' where id=2; -update noar ti set v0='5TQIAH62TOYG98O9AAXS73B10YGQMMG' where id=2; -update noar tt set b1='CVGSJMQQ10A9XTYZOLTF75' where id=2; -update noar ti set b1='CVGSJMQQ10A9XTYZOLTF75' where id=2; -update noar tt set v0='UG61G1IU02DC' where id=2; -update noar ti set v0='UG61G1IU02DC' where id=2; -update noar tt set b2='IRJ627EIQNXIE2OO152N41H' where id=2; -update noar ti set b2='IRJ627EIQNXIE2OO152N41H' where id=2; -update noar tt set v0='RUAXU0MH' where id=3; -update noar ti set v0='RUAXU0MH' where id=3; -update noar tt set b0='DYQAB9S08O' where id=3; -update noar ti set b0='DYQAB9S08O' where id=3; -update noar tt set v0='79T1MC1AM8LWSS4JPLTM' where id=3; -update noar ti set v0='79T1MC1AM8LWSS4JPLTM' where id=3; -update noar tt set b1='0K838MO2IQ89' where id=3; -update noar ti set b1='0K838MO2IQ89' where id=3; -update noar tt set v0='U2RHCV8SD4VYMN8JXYXV9' where id=3; -update noar ti set v0='U2RHCV8SD4VYMN8JXYXV9' where id=3; -update noar tt set b2='BDVP168J' where id=3; -update noar ti set b2='BDVP168J' where id=3; -update noar tt set v0='NO8T26I920P6WHW2' where id=4; -update noar ti set v0='NO8T26I920P6WHW2' where id=4; -update noar tt set b0='ZB81ZCBMCEQW0QWL0UDSXQ' where id=4; -update noar ti set b0='ZB81ZCBMCEQW0QWL0UDSXQ' where id=4; -update noar tt set v0='923X' where id=4; -update noar ti set v0='923X' where id=4; -update noar tt set b1='EVV' where id=4; -update noar ti set b1='EVV' where id=4; -update noar tt set v0='J26PMGW0GE9O5' where id=4; -update noar ti set v0='J26PMGW0GE9O5' where id=4; -update noar tt set b2='EM' where id=4; -update noar ti set b2='EM' where id=4; -update noar tt set v0='2VVNYN6UAR7XGIVAYN3TXDRCXI' where id=5; -update noar ti set v0='2VVNYN6UAR7XGIVAYN3TXDRCXI' where id=5; -update noar tt set b0='28FI0Y8MXCU2CC6' where id=5; -update noar ti set b0='28FI0Y8MXCU2CC6' where id=5; -update noar tt set v0='BZJ42JC' where id=5; -update noar ti set v0='BZJ42JC' where id=5; -update noar tt set b1='Q' where id=5; -update noar ti set b1='Q' where id=5; -update noar tt set v0='UGY2B9' where id=5; -update noar ti set v0='UGY2B9' where id=5; -update noar tt set b2='ZZBK9NNA630N9FWDNV8VCC' where id=5; -update noar ti set b2='ZZBK9NNA630N9FWDNV8VCC' where id=5; -update noar tt set v0='60PYFUZ2KZ0U9EL2' where id=6; -update noar ti set v0='60PYFUZ2KZ0U9EL2' where id=6; -update noar tt set b0='E0GPNXK7PRX9XHBXCJDAD' where id=6; -update noar ti set b0='E0GPNXK7PRX9XHBXCJDAD' where id=6; -update noar tt set v0='M1X5T' where id=6; -update noar ti set v0='M1X5T' where id=6; -update noar tt set b1='JJV5SDS' where id=6; -update noar ti set b1='JJV5SDS' where id=6; -update noar tt set v0='29' where id=6; -update noar ti set v0='29' where id=6; -update noar tt set b2='9HHBDWFG1IU' where id=6; -update noar ti set b2='9HHBDWFG1IU' where id=6; -update noar tt set v0='UEY1BXVS41D2T3QM' where id=7; -update noar ti set v0='UEY1BXVS41D2T3QM' where id=7; -update noar tt set b0='Y54UF5X58AAPJJX0P6KIQFVNKNVK' where id=7; -update noar ti set b0='Y54UF5X58AAPJJX0P6KIQFVNKNVK' where id=7; -update noar tt set v0='IFNRKG8PG6HAX42HM7' where id=7; -update noar ti set v0='IFNRKG8PG6HAX42HM7' where id=7; -update noar tt set b1='6L22HQB9YGS3YQVZO' where id=7; -update noar ti set b1='6L22HQB9YGS3YQVZO' where id=7; -update noar tt set v0='TN5DVBFBXYSPTBS4D4RDDVMB67BIG' where id=7; -update noar ti set v0='TN5DVBFBXYSPTBS4D4RDDVMB67BIG' where id=7; -update noar tt set b2='85SHVJ96H5FWDMXWP' where id=7; -update noar ti set b2='85SHVJ96H5FWDMXWP' where id=7; -update noar tt set v0='Z5B' where id=8; -update noar ti set v0='Z5B' where id=8; -update noar tt set b0='XGWL9B7KW9631CD6WFTJZND7UQXAV' where id=8; -update noar ti set b0='XGWL9B7KW9631CD6WFTJZND7UQXAV' where id=8; -update noar tt set v0='CWLWGPLK8CXPFGPI7EB' where id=8; -update noar ti set v0='CWLWGPLK8CXPFGPI7EB' where id=8; -update noar tt set b1='H' where id=8; -update noar ti set b1='H' where id=8; -update noar tt set v0='F0DV13Q4LBKEUAKPC3NGO3ZT' where id=8; -update noar ti set v0='F0DV13Q4LBKEUAKPC3NGO3ZT' where id=8; -update noar tt set b2='47DOY1MIKDJTA' where id=8; -update noar ti set b2='47DOY1MIKDJTA' where id=8; -update noar tt set v0='IPIDSS1GA0TSF6OST3IEWEH205TS1' where id=9; -update noar ti set v0='IPIDSS1GA0TSF6OST3IEWEH205TS1' where id=9; -update noar tt set b0='8' where id=9; -update noar ti set b0='8' where id=9; -update noar tt set v0='L1YFD04D2YP9OKQ00K' where id=9; -update noar ti set v0='L1YFD04D2YP9OKQ00K' where id=9; -update noar tt set b1='JA58' where id=9; -update noar ti set b1='JA58' where id=9; -update noar tt set v0='H40W5JV3HKCXQGMF' where id=9; -update noar ti set v0='H40W5JV3HKCXQGMF' where id=9; -update noar tt set b2='OICEWOXTGPQLL5SBZI3COVK0' where id=9; -update noar ti set b2='OICEWOXTGPQLL5SBZI3COVK0' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 longblob not null, - b1 tinyblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='PU3EM78KC13EOL243T9K4019IPRWIPT9' where id=1; -update noar ti set v0='PU3EM78KC13EOL243T9K4019IPRWIPT9' where id=1; -update noar tt set b0='O1EL4FXXE6HL6UB4JLDZ9GDCE0M' where id=1; -update noar ti set b0='O1EL4FXXE6HL6UB4JLDZ9GDCE0M' where id=1; -update noar tt set v0='ZS' where id=1; -update noar ti set v0='ZS' where id=1; -update noar tt set b1='5DOON491BMLHG2ESO' where id=1; -update noar ti set b1='5DOON491BMLHG2ESO' where id=1; -update noar tt set v0='W9MI90OM' where id=1; -update noar ti set v0='W9MI90OM' where id=1; -update noar tt set b2='JA9KNJ1N12K57LK54N37FPI' where id=1; -update noar ti set b2='JA9KNJ1N12K57LK54N37FPI' where id=1; -update noar tt set v0='K5WL57F6S2QB6UH6RDIP2VTQD1' where id=2; -update noar ti set v0='K5WL57F6S2QB6UH6RDIP2VTQD1' where id=2; -update noar tt set b0='YOMA9VC5QZHSWW' where id=2; -update noar ti set b0='YOMA9VC5QZHSWW' where id=2; -update noar tt set v0='BNBIY5QEV9ZVAQXI' where id=2; -update noar ti set v0='BNBIY5QEV9ZVAQXI' where id=2; -update noar tt set b1='TO9B82GFVV1SB40A88C0VL' where id=2; -update noar ti set b1='TO9B82GFVV1SB40A88C0VL' where id=2; -update noar tt set v0='6H3893SDBQ41MW' where id=2; -update noar ti set v0='6H3893SDBQ41MW' where id=2; -update noar tt set b2='3WF2LSAZ29BLJP4P5IE' where id=2; -update noar ti set b2='3WF2LSAZ29BLJP4P5IE' where id=2; -update noar tt set v0='FGC5A0Q9XQTOQEXFD2J' where id=3; -update noar ti set v0='FGC5A0Q9XQTOQEXFD2J' where id=3; -update noar tt set b0='MR4ETFEZ9MKTEM9443UDZ9MGOLL1' where id=3; -update noar ti set b0='MR4ETFEZ9MKTEM9443UDZ9MGOLL1' where id=3; -update noar tt set v0='EHJ3SIELU89Q' where id=3; -update noar ti set v0='EHJ3SIELU89Q' where id=3; -update noar tt set b1='CWHXGMDBX3' where id=3; -update noar ti set b1='CWHXGMDBX3' where id=3; -update noar tt set v0='3TF3QDOHS' where id=3; -update noar ti set v0='3TF3QDOHS' where id=3; -update noar tt set b2='M3YKPTO5H4C6PP6X0TXF5Q' where id=3; -update noar ti set b2='M3YKPTO5H4C6PP6X0TXF5Q' where id=3; -update noar tt set v0='CWHXBTFQJHNCPCM8DXIPFP' where id=4; -update noar ti set v0='CWHXBTFQJHNCPCM8DXIPFP' where id=4; -update noar tt set b0='NQ4G3ZC6HGAETFG7KKI0SLWXA642' where id=4; -update noar ti set b0='NQ4G3ZC6HGAETFG7KKI0SLWXA642' where id=4; -update noar tt set v0='NZS92FP4JBZF' where id=4; -update noar ti set v0='NZS92FP4JBZF' where id=4; -update noar tt set b1='P88E' where id=4; -update noar ti set b1='P88E' where id=4; -update noar tt set v0='TKSX7PY30C4U0XMU3L6W5YE4UVL' where id=4; -update noar ti set v0='TKSX7PY30C4U0XMU3L6W5YE4UVL' where id=4; -update noar tt set b2='MFEKKPG' where id=4; -update noar ti set b2='MFEKKPG' where id=4; -update noar tt set v0='C6URJHA60YKGW1I7KURHMPN9004LCL' where id=5; -update noar ti set v0='C6URJHA60YKGW1I7KURHMPN9004LCL' where id=5; -update noar tt set b0='Q8R3IJUM02Y2WEDL6UY61N5K02EZJRTA' where id=5; -update noar ti set b0='Q8R3IJUM02Y2WEDL6UY61N5K02EZJRTA' where id=5; -update noar tt set v0='94T3FOLJCXXWGM' where id=5; -update noar ti set v0='94T3FOLJCXXWGM' where id=5; -update noar tt set b1='LKO3' where id=5; -update noar ti set b1='LKO3' where id=5; -update noar tt set v0='IML7U3CCMJWATB' where id=5; -update noar ti set v0='IML7U3CCMJWATB' where id=5; -update noar tt set b2='IRZGRE' where id=5; -update noar ti set b2='IRZGRE' where id=5; -update noar tt set v0='SCAS7O8V7XQER' where id=6; -update noar ti set v0='SCAS7O8V7XQER' where id=6; -update noar tt set b0='GYWPLARQZ19TWMKKPV9RXXRRIX' where id=6; -update noar ti set b0='GYWPLARQZ19TWMKKPV9RXXRRIX' where id=6; -update noar tt set v0='M744VJHSRQVPSB6Z8M46TGMDOMH2LMT8' where id=6; -update noar ti set v0='M744VJHSRQVPSB6Z8M46TGMDOMH2LMT8' where id=6; -update noar tt set b1='M7HADTIAYFFZ2CZA3JRW48GI6' where id=6; -update noar ti set b1='M7HADTIAYFFZ2CZA3JRW48GI6' where id=6; -update noar tt set v0='L2NBU13U2JUQNSFTR2L' where id=6; -update noar ti set v0='L2NBU13U2JUQNSFTR2L' where id=6; -update noar tt set b2='DE1246A53PW4EF0K3VMIL5G' where id=6; -update noar ti set b2='DE1246A53PW4EF0K3VMIL5G' where id=6; -update noar tt set v0='9J79ZA0WS33TSPQ7BUJCABZ' where id=7; -update noar ti set v0='9J79ZA0WS33TSPQ7BUJCABZ' where id=7; -update noar tt set b0='P3' where id=7; -update noar ti set b0='P3' where id=7; -update noar tt set v0='BPBPYRZ5557DD3SUD' where id=7; -update noar ti set v0='BPBPYRZ5557DD3SUD' where id=7; -update noar tt set b1='P60SQ1UJO40J00TP' where id=7; -update noar ti set b1='P60SQ1UJO40J00TP' where id=7; -update noar tt set v0='LC1RB9ENHEKJ4' where id=7; -update noar ti set v0='LC1RB9ENHEKJ4' where id=7; -update noar tt set b2='K287TBFS03Q6SSEEC42LTZNHR' where id=7; -update noar ti set b2='K287TBFS03Q6SSEEC42LTZNHR' where id=7; -update noar tt set v0='ZTL4RJDSV5UU8D4YTLF38825PVFH42' where id=8; -update noar ti set v0='ZTL4RJDSV5UU8D4YTLF38825PVFH42' where id=8; -update noar tt set b0='BAMXRTMNSY3F4SWXQYZVZQO83DVZVXD0' where id=8; -update noar ti set b0='BAMXRTMNSY3F4SWXQYZVZQO83DVZVXD0' where id=8; -update noar tt set v0='U5JFGIIHE8T7OYRYECDB6SOZRDZ1R' where id=8; -update noar ti set v0='U5JFGIIHE8T7OYRYECDB6SOZRDZ1R' where id=8; -update noar tt set b1='ZCCJCA6ADQJTB09W0I8W3HNME' where id=8; -update noar ti set b1='ZCCJCA6ADQJTB09W0I8W3HNME' where id=8; -update noar tt set v0='7QAXCDCJSRBWTS7LHFC2ZH' where id=8; -update noar ti set v0='7QAXCDCJSRBWTS7LHFC2ZH' where id=8; -update noar tt set b2='99N2UPRFUGZ0DH' where id=8; -update noar ti set b2='99N2UPRFUGZ0DH' where id=8; -update noar tt set v0='IYK6UQA' where id=9; -update noar ti set v0='IYK6UQA' where id=9; -update noar tt set b0='EPQ51VE7P4H9T721Q89XFI8NRHL7S3M' where id=9; -update noar ti set b0='EPQ51VE7P4H9T721Q89XFI8NRHL7S3M' where id=9; -update noar tt set v0='OXWX5PWC7R0ZWJKZKTDROF' where id=9; -update noar ti set v0='OXWX5PWC7R0ZWJKZKTDROF' where id=9; -update noar tt set b1='SAAXXBPEISOGETTZWTCL' where id=9; -update noar ti set b1='SAAXXBPEISOGETTZWTCL' where id=9; -update noar tt set v0='A0FTT95ECJ9A7M9CBVXDURG' where id=9; -update noar ti set v0='A0FTT95ECJ9A7M9CBVXDURG' where id=9; -update noar tt set b2='TJ42' where id=9; -update noar ti set b2='TJ42' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 longblob not null, - b1 tinyblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='EDGZ' where id=1; -update noar ti set v0='EDGZ' where id=1; -update noar tt set b0='LY1ZQXGR5VZCG' where id=1; -update noar ti set b0='LY1ZQXGR5VZCG' where id=1; -update noar tt set v0='1WCOIK6IX1' where id=1; -update noar ti set v0='1WCOIK6IX1' where id=1; -update noar tt set b1='UXML1V' where id=1; -update noar ti set b1='UXML1V' where id=1; -update noar tt set v0='Q58HLME7JQQR7Q09S' where id=1; -update noar ti set v0='Q58HLME7JQQR7Q09S' where id=1; -update noar tt set b2='J19SCMYZXROWONP5' where id=1; -update noar ti set b2='J19SCMYZXROWONP5' where id=1; -update noar tt set v0='Q3WCQBSGBGPO7' where id=2; -update noar ti set v0='Q3WCQBSGBGPO7' where id=2; -update noar tt set b0='EXOLCMZSGKVB1MH8VFZ08528CQXUWFN' where id=2; -update noar ti set b0='EXOLCMZSGKVB1MH8VFZ08528CQXUWFN' where id=2; -update noar tt set v0='4PT' where id=2; -update noar ti set v0='4PT' where id=2; -update noar tt set b1='TI4ND0PN5C' where id=2; -update noar ti set b1='TI4ND0PN5C' where id=2; -update noar tt set v0='DZXS' where id=2; -update noar ti set v0='DZXS' where id=2; -update noar tt set b2='G7OUN4L43' where id=2; -update noar ti set b2='G7OUN4L43' where id=2; -update noar tt set v0='URLY1C4ACI5GCXO4CXX' where id=3; -update noar ti set v0='URLY1C4ACI5GCXO4CXX' where id=3; -update noar tt set b0='8VEB2' where id=3; -update noar ti set b0='8VEB2' where id=3; -update noar tt set v0='77IY79DQ78MPKS2XZ5ZHI2D32O6GC' where id=3; -update noar ti set v0='77IY79DQ78MPKS2XZ5ZHI2D32O6GC' where id=3; -update noar tt set b1='PMWL2CZXV17YH1OOFVOGZ5OUH331' where id=3; -update noar ti set b1='PMWL2CZXV17YH1OOFVOGZ5OUH331' where id=3; -update noar tt set v0='3LXWSFYZLAH3MR8PDIBX3MX' where id=3; -update noar ti set v0='3LXWSFYZLAH3MR8PDIBX3MX' where id=3; -update noar tt set b2='X3S7GUZJ1' where id=3; -update noar ti set b2='X3S7GUZJ1' where id=3; -update noar tt set v0='1W9S8' where id=4; -update noar ti set v0='1W9S8' where id=4; -update noar tt set b0='USZE17MLNOXAJE0FFZ8EVTUCTTZYJ9XH' where id=4; -update noar ti set b0='USZE17MLNOXAJE0FFZ8EVTUCTTZYJ9XH' where id=4; -update noar tt set v0='N0U8QCM0EN8HRO34HEYNHW4Z' where id=4; -update noar ti set v0='N0U8QCM0EN8HRO34HEYNHW4Z' where id=4; -update noar tt set b1='7RXWG4BW36Y54041ZZXA7IIP4GMCDJFA' where id=4; -update noar ti set b1='7RXWG4BW36Y54041ZZXA7IIP4GMCDJFA' where id=4; -update noar tt set v0='EKPT46X2S7VOX1ONCVEGFEL5BWUL' where id=4; -update noar ti set v0='EKPT46X2S7VOX1ONCVEGFEL5BWUL' where id=4; -update noar tt set b2='GZ04H5FE0HRQT38XBQVVR4RD2L7A' where id=4; -update noar ti set b2='GZ04H5FE0HRQT38XBQVVR4RD2L7A' where id=4; -update noar tt set v0='9EWYHRP0D8' where id=5; -update noar ti set v0='9EWYHRP0D8' where id=5; -update noar tt set b0='LPGD' where id=5; -update noar ti set b0='LPGD' where id=5; -update noar tt set v0='XG7BF8KE' where id=5; -update noar ti set v0='XG7BF8KE' where id=5; -update noar tt set b1='U5GPP2BCJO9N1WYP30' where id=5; -update noar ti set b1='U5GPP2BCJO9N1WYP30' where id=5; -update noar tt set v0='UV5XL42YUWWXG' where id=5; -update noar ti set v0='UV5XL42YUWWXG' where id=5; -update noar tt set b2='7MN5NZD36Q96W9E' where id=5; -update noar ti set b2='7MN5NZD36Q96W9E' where id=5; -update noar tt set v0='AGCT3IRDSD3PWB5AL3WJMPW6K2W0' where id=6; -update noar ti set v0='AGCT3IRDSD3PWB5AL3WJMPW6K2W0' where id=6; -update noar tt set b0='VO' where id=6; -update noar ti set b0='VO' where id=6; -update noar tt set v0='Y6' where id=6; -update noar ti set v0='Y6' where id=6; -update noar tt set b1='9CFEKCL301KCECC0BIN6JZ5ODKKXVT9R' where id=6; -update noar ti set b1='9CFEKCL301KCECC0BIN6JZ5ODKKXVT9R' where id=6; -update noar tt set v0='S5FKO2KP' where id=6; -update noar ti set v0='S5FKO2KP' where id=6; -update noar tt set b2='R' where id=6; -update noar ti set b2='R' where id=6; -update noar tt set v0='87TAH6H3QYRC99KJV2KRK469F' where id=7; -update noar ti set v0='87TAH6H3QYRC99KJV2KRK469F' where id=7; -update noar tt set b0='FSPDL686DJ' where id=7; -update noar ti set b0='FSPDL686DJ' where id=7; -update noar tt set v0='C3FP17RHYLQJ04BMRK8' where id=7; -update noar ti set v0='C3FP17RHYLQJ04BMRK8' where id=7; -update noar tt set b1='J4RDQJY7MXR8Q9D' where id=7; -update noar ti set b1='J4RDQJY7MXR8Q9D' where id=7; -update noar tt set v0='DEV' where id=7; -update noar ti set v0='DEV' where id=7; -update noar tt set b2='5TTD5X7LUE9F1GAO32P1CSUCJ' where id=7; -update noar ti set b2='5TTD5X7LUE9F1GAO32P1CSUCJ' where id=7; -update noar tt set v0='A4PHIJ1GOWESVUQURKMR' where id=8; -update noar ti set v0='A4PHIJ1GOWESVUQURKMR' where id=8; -update noar tt set b0='5VU3ZUUBTIF8TLU3SNZ35FWATBR96' where id=8; -update noar ti set b0='5VU3ZUUBTIF8TLU3SNZ35FWATBR96' where id=8; -update noar tt set v0='12VJKL4HGDCWWNHD' where id=8; -update noar ti set v0='12VJKL4HGDCWWNHD' where id=8; -update noar tt set b1='7YI' where id=8; -update noar ti set b1='7YI' where id=8; -update noar tt set v0='KIJG51BVAVB' where id=8; -update noar ti set v0='KIJG51BVAVB' where id=8; -update noar tt set b2='I0ED9S52N7BGL' where id=8; -update noar ti set b2='I0ED9S52N7BGL' where id=8; -update noar tt set v0='XXARA4LJ' where id=9; -update noar ti set v0='XXARA4LJ' where id=9; -update noar tt set b0='PAOK10M2KCW47HL5LP41TYEH3KSEGBQ' where id=9; -update noar ti set b0='PAOK10M2KCW47HL5LP41TYEH3KSEGBQ' where id=9; -update noar tt set v0='7' where id=9; -update noar ti set v0='7' where id=9; -update noar tt set b1='2OPAV4T6YIFJ0A5IURKFCLSH6' where id=9; -update noar ti set b1='2OPAV4T6YIFJ0A5IURKFCLSH6' where id=9; -update noar tt set v0='SM3KD9E1499042WLSJL' where id=9; -update noar ti set v0='SM3KD9E1499042WLSJL' where id=9; -update noar tt set b2='ZYZRERVCZYTT07BHP9YAIDG' where id=9; -update noar ti set b2='ZYZRERVCZYTT07BHP9YAIDG' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 longblob null, - b1 tinyblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='RPULX62LW9PWNL1BBV' where id=1; -update noar ti set v0='RPULX62LW9PWNL1BBV' where id=1; -update noar tt set b0='EBN6H433WR' where id=1; -update noar ti set b0='EBN6H433WR' where id=1; -update noar tt set v0='60NROLQQ' where id=1; -update noar ti set v0='60NROLQQ' where id=1; -update noar tt set b1='GWKLRG9MUHC75DF0XL1JPC1N' where id=1; -update noar ti set b1='GWKLRG9MUHC75DF0XL1JPC1N' where id=1; -update noar tt set v0='LCT' where id=1; -update noar ti set v0='LCT' where id=1; -update noar tt set b2='GI5KZZ99EBI40COB8MF' where id=1; -update noar ti set b2='GI5KZZ99EBI40COB8MF' where id=1; -update noar tt set v0='5KIKJIPI2O' where id=2; -update noar ti set v0='5KIKJIPI2O' where id=2; -update noar tt set b0='6FPOWKKA7T453RNKFDZEA' where id=2; -update noar ti set b0='6FPOWKKA7T453RNKFDZEA' where id=2; -update noar tt set v0='9P8EWPCORITZOW120GXQKB120UO2Y5C' where id=2; -update noar ti set v0='9P8EWPCORITZOW120GXQKB120UO2Y5C' where id=2; -update noar tt set b1='U1EG0N56F8B9LPK6NY' where id=2; -update noar ti set b1='U1EG0N56F8B9LPK6NY' where id=2; -update noar tt set v0='VAI' where id=2; -update noar ti set v0='VAI' where id=2; -update noar tt set b2='JERVQIXJAIW0MO7112GW' where id=2; -update noar ti set b2='JERVQIXJAIW0MO7112GW' where id=2; -update noar tt set v0='U6Z' where id=3; -update noar ti set v0='U6Z' where id=3; -update noar tt set b0='DKV6A4' where id=3; -update noar ti set b0='DKV6A4' where id=3; -update noar tt set v0='G1PU5MW3D1VNOIW4' where id=3; -update noar ti set v0='G1PU5MW3D1VNOIW4' where id=3; -update noar tt set b1='KMEQVKZN8PS9J1HIG8WTJGV' where id=3; -update noar ti set b1='KMEQVKZN8PS9J1HIG8WTJGV' where id=3; -update noar tt set v0='G19NBCB' where id=3; -update noar ti set v0='G19NBCB' where id=3; -update noar tt set b2='X4O' where id=3; -update noar ti set b2='X4O' where id=3; -update noar tt set v0='HYZ66QZUP4616J63S3HI7PADW1XF' where id=4; -update noar ti set v0='HYZ66QZUP4616J63S3HI7PADW1XF' where id=4; -update noar tt set b0='A69A2R5RHBQW4G8DOYPD325N9E2O' where id=4; -update noar ti set b0='A69A2R5RHBQW4G8DOYPD325N9E2O' where id=4; -update noar tt set v0='3W6WSQHAV3UQ3KNIKGVCJKSU6859ECV' where id=4; -update noar ti set v0='3W6WSQHAV3UQ3KNIKGVCJKSU6859ECV' where id=4; -update noar tt set b1='ARGOPXPZ9ZZRNMKVJ4E1J5Y49' where id=4; -update noar ti set b1='ARGOPXPZ9ZZRNMKVJ4E1J5Y49' where id=4; -update noar tt set v0='SWL9BUMAZOWZQPOTVJWH' where id=4; -update noar ti set v0='SWL9BUMAZOWZQPOTVJWH' where id=4; -update noar tt set b2='JC0JMDLMA' where id=4; -update noar ti set b2='JC0JMDLMA' where id=4; -update noar tt set v0='OWM2KBXJKS033BE4MS17IX' where id=5; -update noar ti set v0='OWM2KBXJKS033BE4MS17IX' where id=5; -update noar tt set b0='XSWV23J92G16F' where id=5; -update noar ti set b0='XSWV23J92G16F' where id=5; -update noar tt set v0='BE5ZN0HOB5XRA8N8780V1JXI0' where id=5; -update noar ti set v0='BE5ZN0HOB5XRA8N8780V1JXI0' where id=5; -update noar tt set b1='OYL1R79EVXBUNHOF3DMA0UIQV94' where id=5; -update noar ti set b1='OYL1R79EVXBUNHOF3DMA0UIQV94' where id=5; -update noar tt set v0='CWB06LM81LYJO9P1MJMLY743OVA0D8P' where id=5; -update noar ti set v0='CWB06LM81LYJO9P1MJMLY743OVA0D8P' where id=5; -update noar tt set b2='T8VO7Z72AVLOIHFH' where id=5; -update noar ti set b2='T8VO7Z72AVLOIHFH' where id=5; -update noar tt set v0='JIJ' where id=6; -update noar ti set v0='JIJ' where id=6; -update noar tt set b0='V382QTI0XDOHNMBHASS' where id=6; -update noar ti set b0='V382QTI0XDOHNMBHASS' where id=6; -update noar tt set v0='PHDU8W5R9WSBVV' where id=6; -update noar ti set v0='PHDU8W5R9WSBVV' where id=6; -update noar tt set b1='C0' where id=6; -update noar ti set b1='C0' where id=6; -update noar tt set v0='HMZSR5CLHHRPXC67' where id=6; -update noar ti set v0='HMZSR5CLHHRPXC67' where id=6; -update noar tt set b2='2LEXRJ' where id=6; -update noar ti set b2='2LEXRJ' where id=6; -update noar tt set v0='C5UEJCZ44ZSKWASGCHOCZS5XPI' where id=7; -update noar ti set v0='C5UEJCZ44ZSKWASGCHOCZS5XPI' where id=7; -update noar tt set b0='NSJ32ESFTEURC8Q1QUISI3Q' where id=7; -update noar ti set b0='NSJ32ESFTEURC8Q1QUISI3Q' where id=7; -update noar tt set v0='U9A6JGW3F1QERDQKC' where id=7; -update noar ti set v0='U9A6JGW3F1QERDQKC' where id=7; -update noar tt set b1='A4QS9VL' where id=7; -update noar ti set b1='A4QS9VL' where id=7; -update noar tt set v0='T90E75CMRO2MLLSQ0A736U2RQYZH' where id=7; -update noar ti set v0='T90E75CMRO2MLLSQ0A736U2RQYZH' where id=7; -update noar tt set b2='JEY07ZTACQSBJ5EMAP8N' where id=7; -update noar ti set b2='JEY07ZTACQSBJ5EMAP8N' where id=7; -update noar tt set v0='107OUA94OD61MYZKSWWED5HZ13H9U5' where id=8; -update noar ti set v0='107OUA94OD61MYZKSWWED5HZ13H9U5' where id=8; -update noar tt set b0='2TTWCMPE38E' where id=8; -update noar ti set b0='2TTWCMPE38E' where id=8; -update noar tt set v0='YTY0086ZWN3MLYD9' where id=8; -update noar ti set v0='YTY0086ZWN3MLYD9' where id=8; -update noar tt set b1='SVV9MHT0T11KZHMW1MD2LSY37JI' where id=8; -update noar ti set b1='SVV9MHT0T11KZHMW1MD2LSY37JI' where id=8; -update noar tt set v0='4K6QCBNS3MBNPHI1XD1ZCIC8J47B18UD' where id=8; -update noar ti set v0='4K6QCBNS3MBNPHI1XD1ZCIC8J47B18UD' where id=8; -update noar tt set b2='8J9DMSY8YQUT28SJUIVLD' where id=8; -update noar ti set b2='8J9DMSY8YQUT28SJUIVLD' where id=8; -update noar tt set v0='9AG61GUQBY8XNS' where id=9; -update noar ti set v0='9AG61GUQBY8XNS' where id=9; -update noar tt set b0='2FOE7XGXRRXZ0CP2CB1XF7Y' where id=9; -update noar ti set b0='2FOE7XGXRRXZ0CP2CB1XF7Y' where id=9; -update noar tt set v0='ATK4K28K' where id=9; -update noar ti set v0='ATK4K28K' where id=9; -update noar tt set b1='KENHIFIEMDMC' where id=9; -update noar ti set b1='KENHIFIEMDMC' where id=9; -update noar tt set v0='QETX6P2KHF77839KVZEUZFX6MRV' where id=9; -update noar ti set v0='QETX6P2KHF77839KVZEUZFX6MRV' where id=9; -update noar tt set b2='GWPCEJ7Z3477H9QRG' where id=9; -update noar ti set b2='GWPCEJ7Z3477H9QRG' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 longblob null, - b1 tinyblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='58BLDTUHYA3L9SSP455H1' where id=1; -update noar ti set v0='58BLDTUHYA3L9SSP455H1' where id=1; -update noar tt set b0='5AAQ6W7ZXBB25WA2HH4' where id=1; -update noar ti set b0='5AAQ6W7ZXBB25WA2HH4' where id=1; -update noar tt set v0='Y4IMF' where id=1; -update noar ti set v0='Y4IMF' where id=1; -update noar tt set b1='NM72EQ9ONP' where id=1; -update noar ti set b1='NM72EQ9ONP' where id=1; -update noar tt set v0='M6' where id=1; -update noar ti set v0='M6' where id=1; -update noar tt set b2='Z48P1N9PHFQX3' where id=1; -update noar ti set b2='Z48P1N9PHFQX3' where id=1; -update noar tt set v0='4EUQXPC3FPCGGT3' where id=2; -update noar ti set v0='4EUQXPC3FPCGGT3' where id=2; -update noar tt set b0='91SLTZYN3' where id=2; -update noar ti set b0='91SLTZYN3' where id=2; -update noar tt set v0='WAEH1BDR9' where id=2; -update noar ti set v0='WAEH1BDR9' where id=2; -update noar tt set b1='G5LYTOO3BUPN2YMPCOOG224VHFDV5B' where id=2; -update noar ti set b1='G5LYTOO3BUPN2YMPCOOG224VHFDV5B' where id=2; -update noar tt set v0='3Q9OTAOFAEUKMTNXGAAR' where id=2; -update noar ti set v0='3Q9OTAOFAEUKMTNXGAAR' where id=2; -update noar tt set b2='SOZXB0T23OOJ' where id=2; -update noar ti set b2='SOZXB0T23OOJ' where id=2; -update noar tt set v0='VBTA34YD' where id=3; -update noar ti set v0='VBTA34YD' where id=3; -update noar tt set b0='MWN05PD8' where id=3; -update noar ti set b0='MWN05PD8' where id=3; -update noar tt set v0='L62NDWVIUX5ZX1ACNC3SIAT1' where id=3; -update noar ti set v0='L62NDWVIUX5ZX1ACNC3SIAT1' where id=3; -update noar tt set b1='ECEI' where id=3; -update noar ti set b1='ECEI' where id=3; -update noar tt set v0='C6' where id=3; -update noar ti set v0='C6' where id=3; -update noar tt set b2='8P5H68F' where id=3; -update noar ti set b2='8P5H68F' where id=3; -update noar tt set v0='3FICLOL8BJTD7SXE' where id=4; -update noar ti set v0='3FICLOL8BJTD7SXE' where id=4; -update noar tt set b0='Y7KL5NS9LEXDQ2KKTT2DHL4816' where id=4; -update noar ti set b0='Y7KL5NS9LEXDQ2KKTT2DHL4816' where id=4; -update noar tt set v0='U26ZCEPQJ5OFB' where id=4; -update noar ti set v0='U26ZCEPQJ5OFB' where id=4; -update noar tt set b1='YFM8S' where id=4; -update noar ti set b1='YFM8S' where id=4; -update noar tt set v0='W7Y1Q9F0J0T6SS9IGL012WT' where id=4; -update noar ti set v0='W7Y1Q9F0J0T6SS9IGL012WT' where id=4; -update noar tt set b2='PPK' where id=4; -update noar ti set b2='PPK' where id=4; -update noar tt set v0='Z5RSICBC2X5B2ACKDR193O56' where id=5; -update noar ti set v0='Z5RSICBC2X5B2ACKDR193O56' where id=5; -update noar tt set b0='RE213' where id=5; -update noar ti set b0='RE213' where id=5; -update noar tt set v0='TZ' where id=5; -update noar ti set v0='TZ' where id=5; -update noar tt set b1='J6' where id=5; -update noar ti set b1='J6' where id=5; -update noar tt set v0='OL1VSJ51WE9V1P7' where id=5; -update noar ti set v0='OL1VSJ51WE9V1P7' where id=5; -update noar tt set b2='S' where id=5; -update noar ti set b2='S' where id=5; -update noar tt set v0='4X7OIPGWT9966Y7UMWEFGPEU3JS' where id=6; -update noar ti set v0='4X7OIPGWT9966Y7UMWEFGPEU3JS' where id=6; -update noar tt set b0='BB7SVEU7Z5LDJ9DLM5' where id=6; -update noar ti set b0='BB7SVEU7Z5LDJ9DLM5' where id=6; -update noar tt set v0='CMPL5ODE8KGFYMX4X' where id=6; -update noar ti set v0='CMPL5ODE8KGFYMX4X' where id=6; -update noar tt set b1='A8LT6A2389RXW8TWZV711R2LFBHPYZ' where id=6; -update noar ti set b1='A8LT6A2389RXW8TWZV711R2LFBHPYZ' where id=6; -update noar tt set v0='W0E6GTBF' where id=6; -update noar ti set v0='W0E6GTBF' where id=6; -update noar tt set b2='R8MP28VSR5A8F2FBQ4OT5RJZ2F27OLK' where id=6; -update noar ti set b2='R8MP28VSR5A8F2FBQ4OT5RJZ2F27OLK' where id=6; -update noar tt set v0='6D3U9MM3K6QXQM3QFT7YBNSMY145TS' where id=7; -update noar ti set v0='6D3U9MM3K6QXQM3QFT7YBNSMY145TS' where id=7; -update noar tt set b0='O1A00MQB10MI8' where id=7; -update noar ti set b0='O1A00MQB10MI8' where id=7; -update noar tt set v0='DQMRXZY1QLUXO0SAJLE8B' where id=7; -update noar ti set v0='DQMRXZY1QLUXO0SAJLE8B' where id=7; -update noar tt set b1='QL59' where id=7; -update noar ti set b1='QL59' where id=7; -update noar tt set v0='FR1IISP7H0EZE1BKUM8OC' where id=7; -update noar ti set v0='FR1IISP7H0EZE1BKUM8OC' where id=7; -update noar tt set b2='5DLR63GH6D1HNTR1GH' where id=7; -update noar ti set b2='5DLR63GH6D1HNTR1GH' where id=7; -update noar tt set v0='B6HLS9E2I63HRS62BQ5' where id=8; -update noar ti set v0='B6HLS9E2I63HRS62BQ5' where id=8; -update noar tt set b0='M9B7QL297VR9RG9SZGT0MNEO' where id=8; -update noar ti set b0='M9B7QL297VR9RG9SZGT0MNEO' where id=8; -update noar tt set v0='0PFH3UIO4S4MF1VPG4ODF51Y5HVZ0WS' where id=8; -update noar ti set v0='0PFH3UIO4S4MF1VPG4ODF51Y5HVZ0WS' where id=8; -update noar tt set b1='3G9R3JMB194T3UBMOS0GI5KY' where id=8; -update noar ti set b1='3G9R3JMB194T3UBMOS0GI5KY' where id=8; -update noar tt set v0='TGBG4QLZO18CL9XF6LCD2' where id=8; -update noar ti set v0='TGBG4QLZO18CL9XF6LCD2' where id=8; -update noar tt set b2='7M3XU0L4PD1Y8ABNLZLR3OS' where id=8; -update noar ti set b2='7M3XU0L4PD1Y8ABNLZLR3OS' where id=8; -update noar tt set v0='31OMU1T13401V5NUK' where id=9; -update noar ti set v0='31OMU1T13401V5NUK' where id=9; -update noar tt set b0='PQ3HSSEWF4O164ZAT' where id=9; -update noar ti set b0='PQ3HSSEWF4O164ZAT' where id=9; -update noar tt set v0='AFAUHUC' where id=9; -update noar ti set v0='AFAUHUC' where id=9; -update noar tt set b1='5VDUXHIGXINJAX2BPJLQH4U5SV5' where id=9; -update noar ti set b1='5VDUXHIGXINJAX2BPJLQH4U5SV5' where id=9; -update noar tt set v0='YP' where id=9; -update noar ti set v0='YP' where id=9; -update noar tt set b2='4U5F6DOHHLIXCSJCWIK5ZILOY63Y5' where id=9; -update noar ti set b2='4U5F6DOHHLIXCSJCWIK5ZILOY63Y5' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 longblob not null, - b1 tinyblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='PFZI1ZDQWRW79BR' where id=1; -update noar ti set v0='PFZI1ZDQWRW79BR' where id=1; -update noar tt set b0='ZY4' where id=1; -update noar ti set b0='ZY4' where id=1; -update noar tt set v0='NCWVA3LUVESHQ046HQI1VLHRAU38YA0' where id=1; -update noar ti set v0='NCWVA3LUVESHQ046HQI1VLHRAU38YA0' where id=1; -update noar tt set b1='DBW5MIYOW66JF' where id=1; -update noar ti set b1='DBW5MIYOW66JF' where id=1; -update noar tt set v0='BTJ8P0F7Z9A55BG17QMGH0URYIN' where id=1; -update noar ti set v0='BTJ8P0F7Z9A55BG17QMGH0URYIN' where id=1; -update noar tt set b2='LCUB' where id=1; -update noar ti set b2='LCUB' where id=1; -update noar tt set v0='1Q3G' where id=2; -update noar ti set v0='1Q3G' where id=2; -update noar tt set b0='6V7DPI' where id=2; -update noar ti set b0='6V7DPI' where id=2; -update noar tt set v0='Q2EEOCM7TZKRM9DM' where id=2; -update noar ti set v0='Q2EEOCM7TZKRM9DM' where id=2; -update noar tt set b1='19RO1G' where id=2; -update noar ti set b1='19RO1G' where id=2; -update noar tt set v0='GK4ERLUA2VYO' where id=2; -update noar ti set v0='GK4ERLUA2VYO' where id=2; -update noar tt set b2='LR8F35OLYZZZ5CULEQTJ' where id=2; -update noar ti set b2='LR8F35OLYZZZ5CULEQTJ' where id=2; -update noar tt set v0='FJTVQ' where id=3; -update noar ti set v0='FJTVQ' where id=3; -update noar tt set b0='L6MH3B8YISILMLWQMEZYQ5B1UVLWOE' where id=3; -update noar ti set b0='L6MH3B8YISILMLWQMEZYQ5B1UVLWOE' where id=3; -update noar tt set v0='YSUUP05OQI53S1AVZSSY048WOYID04' where id=3; -update noar ti set v0='YSUUP05OQI53S1AVZSSY048WOYID04' where id=3; -update noar tt set b1='KFA75OEBW4MJW9N2GW' where id=3; -update noar ti set b1='KFA75OEBW4MJW9N2GW' where id=3; -update noar tt set v0='F68IZ0374' where id=3; -update noar ti set v0='F68IZ0374' where id=3; -update noar tt set b2='ZXS8XWVM35DBD' where id=3; -update noar ti set b2='ZXS8XWVM35DBD' where id=3; -update noar tt set v0='O57L' where id=4; -update noar ti set v0='O57L' where id=4; -update noar tt set b0='7X4BT8LV' where id=4; -update noar ti set b0='7X4BT8LV' where id=4; -update noar tt set v0='CN9YUBSTBQGUIDFM05UKAF' where id=4; -update noar ti set v0='CN9YUBSTBQGUIDFM05UKAF' where id=4; -update noar tt set b1='IT742DH35MG0ZZL59FD3' where id=4; -update noar ti set b1='IT742DH35MG0ZZL59FD3' where id=4; -update noar tt set v0='TCNJYKTBL33MLG10' where id=4; -update noar ti set v0='TCNJYKTBL33MLG10' where id=4; -update noar tt set b2='HZ5CHOJ7K6CB7LD15N62TO4YEM7BG3' where id=4; -update noar ti set b2='HZ5CHOJ7K6CB7LD15N62TO4YEM7BG3' where id=4; -update noar tt set v0='AGW0EZFKVV' where id=5; -update noar ti set v0='AGW0EZFKVV' where id=5; -update noar tt set b0='3I5X9D' where id=5; -update noar ti set b0='3I5X9D' where id=5; -update noar tt set v0='SYTLOCLUI3PQIY2WEAO442O3' where id=5; -update noar ti set v0='SYTLOCLUI3PQIY2WEAO442O3' where id=5; -update noar tt set b1='HY5VK58ER70PZASX4' where id=5; -update noar ti set b1='HY5VK58ER70PZASX4' where id=5; -update noar tt set v0='EVCKXHJJNSCKB48XT' where id=5; -update noar ti set v0='EVCKXHJJNSCKB48XT' where id=5; -update noar tt set b2='5T26V6C47MOUDCXLHB9Z8N' where id=5; -update noar ti set b2='5T26V6C47MOUDCXLHB9Z8N' where id=5; -update noar tt set v0='A065D7RN1JT56EJQV' where id=6; -update noar ti set v0='A065D7RN1JT56EJQV' where id=6; -update noar tt set b0='R9KWS0UEOUZ394' where id=6; -update noar ti set b0='R9KWS0UEOUZ394' where id=6; -update noar tt set v0='S55FYWZQVX' where id=6; -update noar ti set v0='S55FYWZQVX' where id=6; -update noar tt set b1='OTMPKHQNZFJNI' where id=6; -update noar ti set b1='OTMPKHQNZFJNI' where id=6; -update noar tt set v0='E4P3B' where id=6; -update noar ti set v0='E4P3B' where id=6; -update noar tt set b2='OKQWF8P0C4S6TR05BTF1' where id=6; -update noar ti set b2='OKQWF8P0C4S6TR05BTF1' where id=6; -update noar tt set v0='VB6L3HT40EEOEUZ8ADDHD9YDW7LMRIH0' where id=7; -update noar ti set v0='VB6L3HT40EEOEUZ8ADDHD9YDW7LMRIH0' where id=7; -update noar tt set b0='GRVCDP53ZVKTH05V' where id=7; -update noar ti set b0='GRVCDP53ZVKTH05V' where id=7; -update noar tt set v0='BDLOGIPIRIS' where id=7; -update noar ti set v0='BDLOGIPIRIS' where id=7; -update noar tt set b1='7HSQVQC01PPQ' where id=7; -update noar ti set b1='7HSQVQC01PPQ' where id=7; -update noar tt set v0='84AX4UFWW' where id=7; -update noar ti set v0='84AX4UFWW' where id=7; -update noar tt set b2='IAIU' where id=7; -update noar ti set b2='IAIU' where id=7; -update noar tt set v0='FW3H1K4TJ9TINYXVPYZ9' where id=8; -update noar ti set v0='FW3H1K4TJ9TINYXVPYZ9' where id=8; -update noar tt set b0='7ZI1B' where id=8; -update noar ti set b0='7ZI1B' where id=8; -update noar tt set v0='CFGJD7O' where id=8; -update noar ti set v0='CFGJD7O' where id=8; -update noar tt set b1='XNEOK0CD5UAZO3PE631R825L7IXE' where id=8; -update noar ti set b1='XNEOK0CD5UAZO3PE631R825L7IXE' where id=8; -update noar tt set v0='N8498UCGW8O8ZDHXI11' where id=8; -update noar ti set v0='N8498UCGW8O8ZDHXI11' where id=8; -update noar tt set b2='CMOL' where id=8; -update noar ti set b2='CMOL' where id=8; -update noar tt set v0='003' where id=9; -update noar ti set v0='003' where id=9; -update noar tt set b0='8RS' where id=9; -update noar ti set b0='8RS' where id=9; -update noar tt set v0='OH85JETPP' where id=9; -update noar ti set v0='OH85JETPP' where id=9; -update noar tt set b1='GYUQAX51UEX2V' where id=9; -update noar ti set b1='GYUQAX51UEX2V' where id=9; -update noar tt set v0='UM2XY' where id=9; -update noar ti set v0='UM2XY' where id=9; -update noar tt set b2='SFGJ8CMU5B4XL35M9EVPO85LQ9RFN33' where id=9; -update noar ti set b2='SFGJ8CMU5B4XL35M9EVPO85LQ9RFN33' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 longblob not null, - b1 tinyblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='K7XOCEWHIK6N4' where id=1; -update noar ti set v0='K7XOCEWHIK6N4' where id=1; -update noar tt set b0='VK8NMQYX7UQE6XYPALQOXQWK5I2S61' where id=1; -update noar ti set b0='VK8NMQYX7UQE6XYPALQOXQWK5I2S61' where id=1; -update noar tt set v0='VNU2BOQLXYGFWKTIMJ2OVJNYPTZHEX' where id=1; -update noar ti set v0='VNU2BOQLXYGFWKTIMJ2OVJNYPTZHEX' where id=1; -update noar tt set b1='KU2DL1ZB414TU0XZ5I' where id=1; -update noar ti set b1='KU2DL1ZB414TU0XZ5I' where id=1; -update noar tt set v0='ZQXND1RKI36X' where id=1; -update noar ti set v0='ZQXND1RKI36X' where id=1; -update noar tt set b2='U' where id=1; -update noar ti set b2='U' where id=1; -update noar tt set v0='GLVWB4O63MR' where id=2; -update noar ti set v0='GLVWB4O63MR' where id=2; -update noar tt set b0='905J2XXRBGMF08JF5AF7KA2CS46' where id=2; -update noar ti set b0='905J2XXRBGMF08JF5AF7KA2CS46' where id=2; -update noar tt set v0='ASSXRUYQBX7GB' where id=2; -update noar ti set v0='ASSXRUYQBX7GB' where id=2; -update noar tt set b1='Z98E' where id=2; -update noar ti set b1='Z98E' where id=2; -update noar tt set v0='FVGE24ML' where id=2; -update noar ti set v0='FVGE24ML' where id=2; -update noar tt set b2='G37NBLBNJU' where id=2; -update noar ti set b2='G37NBLBNJU' where id=2; -update noar tt set v0='2QNCL' where id=3; -update noar ti set v0='2QNCL' where id=3; -update noar tt set b0='JMQ27CLX4L9NGIK1IRLKT8J3KFNHA' where id=3; -update noar ti set b0='JMQ27CLX4L9NGIK1IRLKT8J3KFNHA' where id=3; -update noar tt set v0='UFH7J' where id=3; -update noar ti set v0='UFH7J' where id=3; -update noar tt set b1='WRAD9B1D1YG2GEPA8N05B' where id=3; -update noar ti set b1='WRAD9B1D1YG2GEPA8N05B' where id=3; -update noar tt set v0='QE2KNNEA2N9H8M0YJT5BJ19UOOWKZH' where id=3; -update noar ti set v0='QE2KNNEA2N9H8M0YJT5BJ19UOOWKZH' where id=3; -update noar tt set b2='TYKL2R4LAYRU0K4' where id=3; -update noar ti set b2='TYKL2R4LAYRU0K4' where id=3; -update noar tt set v0='OT8V2O5A2NKCQ71' where id=4; -update noar ti set v0='OT8V2O5A2NKCQ71' where id=4; -update noar tt set b0='5PDA9I' where id=4; -update noar ti set b0='5PDA9I' where id=4; -update noar tt set v0='QXBTYZ1Q0UB0JMO64SK0B' where id=4; -update noar ti set v0='QXBTYZ1Q0UB0JMO64SK0B' where id=4; -update noar tt set b1='STTW7WR7GHIUCYF08DXXC' where id=4; -update noar ti set b1='STTW7WR7GHIUCYF08DXXC' where id=4; -update noar tt set v0='R70CZSXFAA0LF02QGSNAWKQL' where id=4; -update noar ti set v0='R70CZSXFAA0LF02QGSNAWKQL' where id=4; -update noar tt set b2='SKFJD2IXD4LY' where id=4; -update noar ti set b2='SKFJD2IXD4LY' where id=4; -update noar tt set v0='VSA4F624UJE' where id=5; -update noar ti set v0='VSA4F624UJE' where id=5; -update noar tt set b0='W' where id=5; -update noar ti set b0='W' where id=5; -update noar tt set v0='6Y6EVQTPWNI6G0V8R5UARD' where id=5; -update noar ti set v0='6Y6EVQTPWNI6G0V8R5UARD' where id=5; -update noar tt set b1='1NBU' where id=5; -update noar ti set b1='1NBU' where id=5; -update noar tt set v0='KFPXT4QUGB28OOEAHU06B' where id=5; -update noar ti set v0='KFPXT4QUGB28OOEAHU06B' where id=5; -update noar tt set b2='YOOKE6BR' where id=5; -update noar ti set b2='YOOKE6BR' where id=5; -update noar tt set v0='ILUOUWS5LJ' where id=6; -update noar ti set v0='ILUOUWS5LJ' where id=6; -update noar tt set b0='RKXV8F56U7JZLE' where id=6; -update noar ti set b0='RKXV8F56U7JZLE' where id=6; -update noar tt set v0='2XN21YLQS5' where id=6; -update noar ti set v0='2XN21YLQS5' where id=6; -update noar tt set b1='QL' where id=6; -update noar ti set b1='QL' where id=6; -update noar tt set v0='9HTHQEQ9UFG7GBLIB' where id=6; -update noar ti set v0='9HTHQEQ9UFG7GBLIB' where id=6; -update noar tt set b2='U6RH' where id=6; -update noar ti set b2='U6RH' where id=6; -update noar tt set v0='7VWXERGUPBLLXGLTEX6' where id=7; -update noar ti set v0='7VWXERGUPBLLXGLTEX6' where id=7; -update noar tt set b0='MZPX0PUJAR3C1L9AAQV18O' where id=7; -update noar ti set b0='MZPX0PUJAR3C1L9AAQV18O' where id=7; -update noar tt set v0='6IZGPGBAQ3RXM' where id=7; -update noar ti set v0='6IZGPGBAQ3RXM' where id=7; -update noar tt set b1='ZTQUOXDQCR' where id=7; -update noar ti set b1='ZTQUOXDQCR' where id=7; -update noar tt set v0='WMT5NH' where id=7; -update noar ti set v0='WMT5NH' where id=7; -update noar tt set b2='9LG5DRG8QBT2' where id=7; -update noar ti set b2='9LG5DRG8QBT2' where id=7; -update noar tt set v0='0FSV9LF7HN' where id=8; -update noar ti set v0='0FSV9LF7HN' where id=8; -update noar tt set b0='2LTUA' where id=8; -update noar ti set b0='2LTUA' where id=8; -update noar tt set v0='OA7R2IYQ4A3NYE0WR7N7PCJ' where id=8; -update noar ti set v0='OA7R2IYQ4A3NYE0WR7N7PCJ' where id=8; -update noar tt set b1='QDQ8J6CVSR0DAZ11B' where id=8; -update noar ti set b1='QDQ8J6CVSR0DAZ11B' where id=8; -update noar tt set v0='QQIEK3SWCIF1A9372A3' where id=8; -update noar ti set v0='QQIEK3SWCIF1A9372A3' where id=8; -update noar tt set b2='JP2RIQR162VE5W8TX' where id=8; -update noar ti set b2='JP2RIQR162VE5W8TX' where id=8; -update noar tt set v0='MCCED6Z4M' where id=9; -update noar ti set v0='MCCED6Z4M' where id=9; -update noar tt set b0='NQ8UOIM0P7H' where id=9; -update noar ti set b0='NQ8UOIM0P7H' where id=9; -update noar tt set v0='YC34H379KF' where id=9; -update noar ti set v0='YC34H379KF' where id=9; -update noar tt set b1='KI' where id=9; -update noar ti set b1='KI' where id=9; -update noar tt set v0='2XOR8' where id=9; -update noar ti set v0='2XOR8' where id=9; -update noar tt set b2='J5K5YTVFQ9HVZTDJKY' where id=9; -update noar ti set b2='J5K5YTVFQ9HVZTDJKY' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 longblob null, - b1 blob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='XXZRVK2LX' where id=1; -update noar ti set v0='XXZRVK2LX' where id=1; -update noar tt set b0='OCH53MO2OKGD2' where id=1; -update noar ti set b0='OCH53MO2OKGD2' where id=1; -update noar tt set v0='H2Z' where id=1; -update noar ti set v0='H2Z' where id=1; -update noar tt set b1='FZSRXCRM8F' where id=1; -update noar ti set b1='FZSRXCRM8F' where id=1; -update noar tt set v0='QHJI4' where id=1; -update noar ti set v0='QHJI4' where id=1; -update noar tt set b2='7JSKNMZEP06X2FNVTRCXOL' where id=1; -update noar ti set b2='7JSKNMZEP06X2FNVTRCXOL' where id=1; -update noar tt set v0='BWVRJJKHOWFZ960CX' where id=2; -update noar ti set v0='BWVRJJKHOWFZ960CX' where id=2; -update noar tt set b0='NT1438HIJ257H5WYXZ9LB6' where id=2; -update noar ti set b0='NT1438HIJ257H5WYXZ9LB6' where id=2; -update noar tt set v0='NEWE' where id=2; -update noar ti set v0='NEWE' where id=2; -update noar tt set b1='2RJGJ2A7GQB1HPH4558D2NJ109WEL' where id=2; -update noar ti set b1='2RJGJ2A7GQB1HPH4558D2NJ109WEL' where id=2; -update noar tt set v0='K9Y8IS72OW0UW0HRNSEJB' where id=2; -update noar ti set v0='K9Y8IS72OW0UW0HRNSEJB' where id=2; -update noar tt set b2='34NG7W6B86XFMFOR6' where id=2; -update noar ti set b2='34NG7W6B86XFMFOR6' where id=2; -update noar tt set v0='TX3LAJWBE4' where id=3; -update noar ti set v0='TX3LAJWBE4' where id=3; -update noar tt set b0='SA' where id=3; -update noar ti set b0='SA' where id=3; -update noar tt set v0='U0GP9ZVUEGWERA18A6' where id=3; -update noar ti set v0='U0GP9ZVUEGWERA18A6' where id=3; -update noar tt set b1='WWL99RHWMO005TRG9EI1XZPFYIW6' where id=3; -update noar ti set b1='WWL99RHWMO005TRG9EI1XZPFYIW6' where id=3; -update noar tt set v0='JUE9OH' where id=3; -update noar ti set v0='JUE9OH' where id=3; -update noar tt set b2='BPOLUVX9TPIM08BM3' where id=3; -update noar ti set b2='BPOLUVX9TPIM08BM3' where id=3; -update noar tt set v0='NNNFCYWJK3M21LLFZJRV' where id=4; -update noar ti set v0='NNNFCYWJK3M21LLFZJRV' where id=4; -update noar tt set b0='VF75HXBL43KB0YOGJXQF2Y9W13' where id=4; -update noar ti set b0='VF75HXBL43KB0YOGJXQF2Y9W13' where id=4; -update noar tt set v0='0WQVBGWN39HUQ3V' where id=4; -update noar ti set v0='0WQVBGWN39HUQ3V' where id=4; -update noar tt set b1='P8P8SCTSQ3KKPCW0B7CJZGHLLJ' where id=4; -update noar ti set b1='P8P8SCTSQ3KKPCW0B7CJZGHLLJ' where id=4; -update noar tt set v0='2VBNB6HU98S6A9Y3CJI5CPOU9' where id=4; -update noar ti set v0='2VBNB6HU98S6A9Y3CJI5CPOU9' where id=4; -update noar tt set b2='6HCOT9U6BABUW2D' where id=4; -update noar ti set b2='6HCOT9U6BABUW2D' where id=4; -update noar tt set v0='Q' where id=5; -update noar ti set v0='Q' where id=5; -update noar tt set b0='IXNX70ALXFO365UWMZVZF7I0L' where id=5; -update noar ti set b0='IXNX70ALXFO365UWMZVZF7I0L' where id=5; -update noar tt set v0='NP36V0U2ZLP0NL' where id=5; -update noar ti set v0='NP36V0U2ZLP0NL' where id=5; -update noar tt set b1='NSG4' where id=5; -update noar ti set b1='NSG4' where id=5; -update noar tt set v0='L3BWRRDPGF9BVFB7PMB05J1K' where id=5; -update noar ti set v0='L3BWRRDPGF9BVFB7PMB05J1K' where id=5; -update noar tt set b2='MK1Y8IU7BC2IUY' where id=5; -update noar ti set b2='MK1Y8IU7BC2IUY' where id=5; -update noar tt set v0='PG' where id=6; -update noar ti set v0='PG' where id=6; -update noar tt set b0='9G3IIZKS55DO3VJCRGOSLCEESS5CA' where id=6; -update noar ti set b0='9G3IIZKS55DO3VJCRGOSLCEESS5CA' where id=6; -update noar tt set v0='QS5WG' where id=6; -update noar ti set v0='QS5WG' where id=6; -update noar tt set b1='QR2OAV95RJBTHCM2SD' where id=6; -update noar ti set b1='QR2OAV95RJBTHCM2SD' where id=6; -update noar tt set v0='2AWVDGBP2YIK4FUFRVO70W' where id=6; -update noar ti set v0='2AWVDGBP2YIK4FUFRVO70W' where id=6; -update noar tt set b2='V83ZMLV' where id=6; -update noar ti set b2='V83ZMLV' where id=6; -update noar tt set v0='0JMYXS19X7195QA2H96F2C22RBLM' where id=7; -update noar ti set v0='0JMYXS19X7195QA2H96F2C22RBLM' where id=7; -update noar tt set b0='ZKO6X' where id=7; -update noar ti set b0='ZKO6X' where id=7; -update noar tt set v0='I0IZ08A8JOPO3LRCUTR47HFU' where id=7; -update noar ti set v0='I0IZ08A8JOPO3LRCUTR47HFU' where id=7; -update noar tt set b1='AU1YSN3RW5NDMSSQ8H' where id=7; -update noar ti set b1='AU1YSN3RW5NDMSSQ8H' where id=7; -update noar tt set v0='ZP8YB' where id=7; -update noar ti set v0='ZP8YB' where id=7; -update noar tt set b2='7JHX61OHCWL3JADI62XL6AVMXXBRL' where id=7; -update noar ti set b2='7JHX61OHCWL3JADI62XL6AVMXXBRL' where id=7; -update noar tt set v0='1VOD4' where id=8; -update noar ti set v0='1VOD4' where id=8; -update noar tt set b0='QKTK6B6M4HH64H8YAL2DY91226O4B' where id=8; -update noar ti set b0='QKTK6B6M4HH64H8YAL2DY91226O4B' where id=8; -update noar tt set v0='TRYAUJ4NYSY0' where id=8; -update noar ti set v0='TRYAUJ4NYSY0' where id=8; -update noar tt set b1='PO5DLN' where id=8; -update noar ti set b1='PO5DLN' where id=8; -update noar tt set v0='TGU0GG4VVWAPOSPQT' where id=8; -update noar ti set v0='TGU0GG4VVWAPOSPQT' where id=8; -update noar tt set b2='60' where id=8; -update noar ti set b2='60' where id=8; -update noar tt set v0='CD9KLYG2YR0RI8F' where id=9; -update noar ti set v0='CD9KLYG2YR0RI8F' where id=9; -update noar tt set b0='6RUQIWVBR99VWPL4' where id=9; -update noar ti set b0='6RUQIWVBR99VWPL4' where id=9; -update noar tt set v0='WY5S8XA5LDQXNNFNPOHGH' where id=9; -update noar ti set v0='WY5S8XA5LDQXNNFNPOHGH' where id=9; -update noar tt set b1='Z2X2' where id=9; -update noar ti set b1='Z2X2' where id=9; -update noar tt set v0='DPITK' where id=9; -update noar ti set v0='DPITK' where id=9; -update noar tt set b2='37M' where id=9; -update noar ti set b2='37M' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 longblob null, - b1 blob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='XB7HWL6Z612TDX16ZOMFVIJDQ' where id=1; -update noar ti set v0='XB7HWL6Z612TDX16ZOMFVIJDQ' where id=1; -update noar tt set b0='G4GS2A7T015PH' where id=1; -update noar ti set b0='G4GS2A7T015PH' where id=1; -update noar tt set v0='8DSJ1KX1LUIW' where id=1; -update noar ti set v0='8DSJ1KX1LUIW' where id=1; -update noar tt set b1='XNEUE1B9RFCVFIHN419KF1RYR4' where id=1; -update noar ti set b1='XNEUE1B9RFCVFIHN419KF1RYR4' where id=1; -update noar tt set v0='6RK84CG8ED1LC9RFF0968NPMTJQJ8AU' where id=1; -update noar ti set v0='6RK84CG8ED1LC9RFF0968NPMTJQJ8AU' where id=1; -update noar tt set b2='BPOY7999PI769JY9SQ69XYA2' where id=1; -update noar ti set b2='BPOY7999PI769JY9SQ69XYA2' where id=1; -update noar tt set v0='A8EQ7ZSAGDLA85JUHGRXI79KJJ8Z' where id=2; -update noar ti set v0='A8EQ7ZSAGDLA85JUHGRXI79KJJ8Z' where id=2; -update noar tt set b0='8AVX3WZQC111M940V' where id=2; -update noar ti set b0='8AVX3WZQC111M940V' where id=2; -update noar tt set v0='LXD8' where id=2; -update noar ti set v0='LXD8' where id=2; -update noar tt set b1='HU0CIH4' where id=2; -update noar ti set b1='HU0CIH4' where id=2; -update noar tt set v0='R' where id=2; -update noar ti set v0='R' where id=2; -update noar tt set b2='AHYYQU' where id=2; -update noar ti set b2='AHYYQU' where id=2; -update noar tt set v0='YI0YBXN676MSZG6GQHM84C' where id=3; -update noar ti set v0='YI0YBXN676MSZG6GQHM84C' where id=3; -update noar tt set b0='GJ6CG8OORJ0S761ZOFTEW86P6AYXTNO' where id=3; -update noar ti set b0='GJ6CG8OORJ0S761ZOFTEW86P6AYXTNO' where id=3; -update noar tt set v0='GSS2GNYNI0EX97BIGT5ZW0QU8GK3A' where id=3; -update noar ti set v0='GSS2GNYNI0EX97BIGT5ZW0QU8GK3A' where id=3; -update noar tt set b1='II1KSE5UD' where id=3; -update noar ti set b1='II1KSE5UD' where id=3; -update noar tt set v0='W5Z3' where id=3; -update noar ti set v0='W5Z3' where id=3; -update noar tt set b2='AQTAT8Y089147A12' where id=3; -update noar ti set b2='AQTAT8Y089147A12' where id=3; -update noar tt set v0='G6757GORF9OMXPT8DPJRW5TO' where id=4; -update noar ti set v0='G6757GORF9OMXPT8DPJRW5TO' where id=4; -update noar tt set b0='WQS9H9DP1DH7JNYRIP' where id=4; -update noar ti set b0='WQS9H9DP1DH7JNYRIP' where id=4; -update noar tt set v0='J4X3CVQSWNXTBPKLRSJOSJR' where id=4; -update noar ti set v0='J4X3CVQSWNXTBPKLRSJOSJR' where id=4; -update noar tt set b1='BYMUD0DD1QU6BZ1' where id=4; -update noar ti set b1='BYMUD0DD1QU6BZ1' where id=4; -update noar tt set v0='EQLIIP1LW5QQE7D5BUS98RDU' where id=4; -update noar ti set v0='EQLIIP1LW5QQE7D5BUS98RDU' where id=4; -update noar tt set b2='Y5BHOQTL0VXLLP55HH5ON3POJC' where id=4; -update noar ti set b2='Y5BHOQTL0VXLLP55HH5ON3POJC' where id=4; -update noar tt set v0='MVQBXP4O6KOI2' where id=5; -update noar ti set v0='MVQBXP4O6KOI2' where id=5; -update noar tt set b0='BLNJDAUNF' where id=5; -update noar ti set b0='BLNJDAUNF' where id=5; -update noar tt set v0='SLRBQAH2G2STSCPAAOBNQCXUVJ' where id=5; -update noar ti set v0='SLRBQAH2G2STSCPAAOBNQCXUVJ' where id=5; -update noar tt set b1='57WQ6XZIZ9TXZCS65F696HOR' where id=5; -update noar ti set b1='57WQ6XZIZ9TXZCS65F696HOR' where id=5; -update noar tt set v0='H5B1W8GVTZQZKW9M4KPTWIMIS9' where id=5; -update noar ti set v0='H5B1W8GVTZQZKW9M4KPTWIMIS9' where id=5; -update noar tt set b2='MDV64GUBR4F9TV' where id=5; -update noar ti set b2='MDV64GUBR4F9TV' where id=5; -update noar tt set v0='A3S3UVKSPLT0RZT089PUZ6ID3' where id=6; -update noar ti set v0='A3S3UVKSPLT0RZT089PUZ6ID3' where id=6; -update noar tt set b0='QHKCUHAMQVU5HXJRO5RN6HEH8TNDOIVX' where id=6; -update noar ti set b0='QHKCUHAMQVU5HXJRO5RN6HEH8TNDOIVX' where id=6; -update noar tt set v0='7KG0U9Y6TFWI2CXEZFGWDJLGXNBY' where id=6; -update noar ti set v0='7KG0U9Y6TFWI2CXEZFGWDJLGXNBY' where id=6; -update noar tt set b1='N502CN01R0E5E3ZN0I0VNLH2S' where id=6; -update noar ti set b1='N502CN01R0E5E3ZN0I0VNLH2S' where id=6; -update noar tt set v0='QN3RW00QL1I9D8T82KAVOR5A2MS' where id=6; -update noar ti set v0='QN3RW00QL1I9D8T82KAVOR5A2MS' where id=6; -update noar tt set b2='1BFE4ZCHCA8A28F71R4XLPWQM' where id=6; -update noar ti set b2='1BFE4ZCHCA8A28F71R4XLPWQM' where id=6; -update noar tt set v0='MCVVCZC6S436F207CLDLBSMRNI' where id=7; -update noar ti set v0='MCVVCZC6S436F207CLDLBSMRNI' where id=7; -update noar tt set b0='6AGUIR3MRAK7VFT9I3' where id=7; -update noar ti set b0='6AGUIR3MRAK7VFT9I3' where id=7; -update noar tt set v0='WU55SUYRYR6GPL8A4KFCW2XGWQY' where id=7; -update noar ti set v0='WU55SUYRYR6GPL8A4KFCW2XGWQY' where id=7; -update noar tt set b1='F16EIO0YQB2PJ4S3URMWRLV5NFX55M8N' where id=7; -update noar ti set b1='F16EIO0YQB2PJ4S3URMWRLV5NFX55M8N' where id=7; -update noar tt set v0='9HIC5MAC71UMW6UZ2DX' where id=7; -update noar ti set v0='9HIC5MAC71UMW6UZ2DX' where id=7; -update noar tt set b2='4CQ8' where id=7; -update noar ti set b2='4CQ8' where id=7; -update noar tt set v0='T5T4NFXJ2F8NMZ5VTS3DARVOFYY' where id=8; -update noar ti set v0='T5T4NFXJ2F8NMZ5VTS3DARVOFYY' where id=8; -update noar tt set b0='TZ' where id=8; -update noar ti set b0='TZ' where id=8; -update noar tt set v0='QMTHHSZBFB06M6E7JZTOCO1' where id=8; -update noar ti set v0='QMTHHSZBFB06M6E7JZTOCO1' where id=8; -update noar tt set b1='7HHOZ3YF5T5CFPH' where id=8; -update noar ti set b1='7HHOZ3YF5T5CFPH' where id=8; -update noar tt set v0='3' where id=8; -update noar ti set v0='3' where id=8; -update noar tt set b2='34Q5EMYYUZY8' where id=8; -update noar ti set b2='34Q5EMYYUZY8' where id=8; -update noar tt set v0='X6ZA' where id=9; -update noar ti set v0='X6ZA' where id=9; -update noar tt set b0='8' where id=9; -update noar ti set b0='8' where id=9; -update noar tt set v0='FMX05GOH826ACCM' where id=9; -update noar ti set v0='FMX05GOH826ACCM' where id=9; -update noar tt set b1='NVCOX3' where id=9; -update noar ti set b1='NVCOX3' where id=9; -update noar tt set v0='SPNUJBWY3V' where id=9; -update noar ti set v0='SPNUJBWY3V' where id=9; -update noar tt set b2='IMMRRH2FFBQ8OKIS' where id=9; -update noar ti set b2='IMMRRH2FFBQ8OKIS' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 longblob not null, - b1 blob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='RWWEOX7M4YUGNG7QYUL1BOT' where id=1; -update noar ti set v0='RWWEOX7M4YUGNG7QYUL1BOT' where id=1; -update noar tt set b0='1U8B33OAI3R7FIT6OVFBZT0HXAXSM' where id=1; -update noar ti set b0='1U8B33OAI3R7FIT6OVFBZT0HXAXSM' where id=1; -update noar tt set v0='TQXSXWKG4HE61EQ4QWNMNO6SS' where id=1; -update noar ti set v0='TQXSXWKG4HE61EQ4QWNMNO6SS' where id=1; -update noar tt set b1='G490QRKXEQW4' where id=1; -update noar ti set b1='G490QRKXEQW4' where id=1; -update noar tt set v0='UB5NL0POVFPUTBS8AAKLNQQHEM4ZNJ' where id=1; -update noar ti set v0='UB5NL0POVFPUTBS8AAKLNQQHEM4ZNJ' where id=1; -update noar tt set b2='CE12HXKWT6IIFPGI2' where id=1; -update noar ti set b2='CE12HXKWT6IIFPGI2' where id=1; -update noar tt set v0='WC5BV5SZYAOS3FK' where id=2; -update noar ti set v0='WC5BV5SZYAOS3FK' where id=2; -update noar tt set b0='V6HPB1JTAXGBXHT' where id=2; -update noar ti set b0='V6HPB1JTAXGBXHT' where id=2; -update noar tt set v0='MJX2WP' where id=2; -update noar ti set v0='MJX2WP' where id=2; -update noar tt set b1='CZGE90Z4HFE5F' where id=2; -update noar ti set b1='CZGE90Z4HFE5F' where id=2; -update noar tt set v0='XKB47MXHIJKO2Y' where id=2; -update noar ti set v0='XKB47MXHIJKO2Y' where id=2; -update noar tt set b2='B1N1HM25MMRSEB' where id=2; -update noar ti set b2='B1N1HM25MMRSEB' where id=2; -update noar tt set v0='YZD4DP2SVZFJ4QLUDEFD31NE' where id=3; -update noar ti set v0='YZD4DP2SVZFJ4QLUDEFD31NE' where id=3; -update noar tt set b0='7C2NFFZ21CHNR' where id=3; -update noar ti set b0='7C2NFFZ21CHNR' where id=3; -update noar tt set v0='TKI79L3SJZNMUEE87WC7D5CWSJ4ISIEI' where id=3; -update noar ti set v0='TKI79L3SJZNMUEE87WC7D5CWSJ4ISIEI' where id=3; -update noar tt set b1='6R2QTRAIN' where id=3; -update noar ti set b1='6R2QTRAIN' where id=3; -update noar tt set v0='IIENO12LVHWKGV0Z2D20VZ' where id=3; -update noar ti set v0='IIENO12LVHWKGV0Z2D20VZ' where id=3; -update noar tt set b2='MFY' where id=3; -update noar ti set b2='MFY' where id=3; -update noar tt set v0='KPF5V32AK8IFN5H8A43A7H' where id=4; -update noar ti set v0='KPF5V32AK8IFN5H8A43A7H' where id=4; -update noar tt set b0='5GIW9LP90EV2HA3T2V3H84HUJ' where id=4; -update noar ti set b0='5GIW9LP90EV2HA3T2V3H84HUJ' where id=4; -update noar tt set v0='GV4IVQBPIB20M2IXNYNU' where id=4; -update noar ti set v0='GV4IVQBPIB20M2IXNYNU' where id=4; -update noar tt set b1='5OCFIE' where id=4; -update noar ti set b1='5OCFIE' where id=4; -update noar tt set v0='573GA9L3' where id=4; -update noar ti set v0='573GA9L3' where id=4; -update noar tt set b2='D2H3AGMYRCXMFIZ9LKX' where id=4; -update noar ti set b2='D2H3AGMYRCXMFIZ9LKX' where id=4; -update noar tt set v0='G3CQI6NNS' where id=5; -update noar ti set v0='G3CQI6NNS' where id=5; -update noar tt set b0='ICJ629Z6Z1G' where id=5; -update noar ti set b0='ICJ629Z6Z1G' where id=5; -update noar tt set v0='MEPUUC13THR15U7UAJR' where id=5; -update noar ti set v0='MEPUUC13THR15U7UAJR' where id=5; -update noar tt set b1='UFNZRE63HCEYVQF278ZB' where id=5; -update noar ti set b1='UFNZRE63HCEYVQF278ZB' where id=5; -update noar tt set v0='UJRZZ5YROICF9MMG3' where id=5; -update noar ti set v0='UJRZZ5YROICF9MMG3' where id=5; -update noar tt set b2='2ZOYW3DDS40JAMSFHDUTIAQVAF10DX' where id=5; -update noar ti set b2='2ZOYW3DDS40JAMSFHDUTIAQVAF10DX' where id=5; -update noar tt set v0='CWOJVA01' where id=6; -update noar ti set v0='CWOJVA01' where id=6; -update noar tt set b0='VIU28ZUWB513YLV1Z0RPZ' where id=6; -update noar ti set b0='VIU28ZUWB513YLV1Z0RPZ' where id=6; -update noar tt set v0='UYGHA4V0' where id=6; -update noar ti set v0='UYGHA4V0' where id=6; -update noar tt set b1='2VZZZZ2GJX5PBFNKFK' where id=6; -update noar ti set b1='2VZZZZ2GJX5PBFNKFK' where id=6; -update noar tt set v0='COWFEC3H498X' where id=6; -update noar ti set v0='COWFEC3H498X' where id=6; -update noar tt set b2='V81V0ZAGMO' where id=6; -update noar ti set b2='V81V0ZAGMO' where id=6; -update noar tt set v0='46' where id=7; -update noar ti set v0='46' where id=7; -update noar tt set b0='HPDP180T0' where id=7; -update noar ti set b0='HPDP180T0' where id=7; -update noar tt set v0='KOHD9G6AW579YUFJB' where id=7; -update noar ti set v0='KOHD9G6AW579YUFJB' where id=7; -update noar tt set b1='KFYQREWEKWTJUC8KJ452OSVNTDVIF' where id=7; -update noar ti set b1='KFYQREWEKWTJUC8KJ452OSVNTDVIF' where id=7; -update noar tt set v0='9TS4YJQM16XK44QGK' where id=7; -update noar ti set v0='9TS4YJQM16XK44QGK' where id=7; -update noar tt set b2='N2XOQWYW7JWKV8DBZC1Q6' where id=7; -update noar ti set b2='N2XOQWYW7JWKV8DBZC1Q6' where id=7; -update noar tt set v0='AZJ9YU8' where id=8; -update noar ti set v0='AZJ9YU8' where id=8; -update noar tt set b0='87H2I43CB' where id=8; -update noar ti set b0='87H2I43CB' where id=8; -update noar tt set v0='J4X' where id=8; -update noar ti set v0='J4X' where id=8; -update noar tt set b1='QQZKJWZLI19XC8FWTA57V2UUK9N1IMLD' where id=8; -update noar ti set b1='QQZKJWZLI19XC8FWTA57V2UUK9N1IMLD' where id=8; -update noar tt set v0='VYIR1JCLJT5BMJJ0S8NQVKBXHB' where id=8; -update noar ti set v0='VYIR1JCLJT5BMJJ0S8NQVKBXHB' where id=8; -update noar tt set b2='VC0BUEPZQCBJGH' where id=8; -update noar ti set b2='VC0BUEPZQCBJGH' where id=8; -update noar tt set v0='DGVXNJWAPWQS3733QOSG470L9D8' where id=9; -update noar ti set v0='DGVXNJWAPWQS3733QOSG470L9D8' where id=9; -update noar tt set b0='UX3LPFAMCMSNTQLT1WA6D5QDER2RFTSQ' where id=9; -update noar ti set b0='UX3LPFAMCMSNTQLT1WA6D5QDER2RFTSQ' where id=9; -update noar tt set v0='TR5BUF2E98TDRUK2P540HBO5O' where id=9; -update noar ti set v0='TR5BUF2E98TDRUK2P540HBO5O' where id=9; -update noar tt set b1='WT2WQGBZA5NDTIMHA' where id=9; -update noar ti set b1='WT2WQGBZA5NDTIMHA' where id=9; -update noar tt set v0='S43OB3JP' where id=9; -update noar ti set v0='S43OB3JP' where id=9; -update noar tt set b2='167K9PC4OQ' where id=9; -update noar ti set b2='167K9PC4OQ' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 longblob not null, - b1 blob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='50RCO9JLZ2PCP5' where id=1; -update noar ti set v0='50RCO9JLZ2PCP5' where id=1; -update noar tt set b0='KS8KMZ5U4QUF6ZGQFZUKLI89MEWC' where id=1; -update noar ti set b0='KS8KMZ5U4QUF6ZGQFZUKLI89MEWC' where id=1; -update noar tt set v0='O8Y7J4HPNZQU8AIJ2' where id=1; -update noar ti set v0='O8Y7J4HPNZQU8AIJ2' where id=1; -update noar tt set b1='IUDWG6LGU5Q3Y6LG2D0RWL' where id=1; -update noar ti set b1='IUDWG6LGU5Q3Y6LG2D0RWL' where id=1; -update noar tt set v0='J5EI5W' where id=1; -update noar ti set v0='J5EI5W' where id=1; -update noar tt set b2='KL25N5PYDHHULJZ' where id=1; -update noar ti set b2='KL25N5PYDHHULJZ' where id=1; -update noar tt set v0='B4HSII' where id=2; -update noar ti set v0='B4HSII' where id=2; -update noar tt set b0='OYP' where id=2; -update noar ti set b0='OYP' where id=2; -update noar tt set v0='NEMJH6BW1ZMXJ3ZD75UV' where id=2; -update noar ti set v0='NEMJH6BW1ZMXJ3ZD75UV' where id=2; -update noar tt set b1='W3FP8UD8RGDJGLGE6LVOQQIVZAVO' where id=2; -update noar ti set b1='W3FP8UD8RGDJGLGE6LVOQQIVZAVO' where id=2; -update noar tt set v0='HQLO0LUVQMOJBJA' where id=2; -update noar ti set v0='HQLO0LUVQMOJBJA' where id=2; -update noar tt set b2='ITTO1E1O0TJ7ZZ75WC' where id=2; -update noar ti set b2='ITTO1E1O0TJ7ZZ75WC' where id=2; -update noar tt set v0='CX5SD1MCI5KR49MYHGR5CBE2C5JDAJ' where id=3; -update noar ti set v0='CX5SD1MCI5KR49MYHGR5CBE2C5JDAJ' where id=3; -update noar tt set b0='FFOVOYO3RLVVYLKXWPUG2Q' where id=3; -update noar ti set b0='FFOVOYO3RLVVYLKXWPUG2Q' where id=3; -update noar tt set v0='BINCGEUSIDFRKX0AD5YRDWL8MEYZE' where id=3; -update noar ti set v0='BINCGEUSIDFRKX0AD5YRDWL8MEYZE' where id=3; -update noar tt set b1='TAT2G0EROEFBIDTOR8S71HZ4' where id=3; -update noar ti set b1='TAT2G0EROEFBIDTOR8S71HZ4' where id=3; -update noar tt set v0='FP73YLU30Q3JEFL7SZ98JVT6' where id=3; -update noar ti set v0='FP73YLU30Q3JEFL7SZ98JVT6' where id=3; -update noar tt set b2='MK44' where id=3; -update noar ti set b2='MK44' where id=3; -update noar tt set v0='48Z45CTL4TGL9SSG38UZB4' where id=4; -update noar ti set v0='48Z45CTL4TGL9SSG38UZB4' where id=4; -update noar tt set b0='U6ASIAI04VUA4CJG75O3' where id=4; -update noar ti set b0='U6ASIAI04VUA4CJG75O3' where id=4; -update noar tt set v0='R0U253LVWU9R8AHVZY05Q32SM7K' where id=4; -update noar ti set v0='R0U253LVWU9R8AHVZY05Q32SM7K' where id=4; -update noar tt set b1='I5EV4MO2AS9UF9015YRM6W0' where id=4; -update noar ti set b1='I5EV4MO2AS9UF9015YRM6W0' where id=4; -update noar tt set v0='HVEH529JYF5D8QHPGPDUIJO4U9DHAI' where id=4; -update noar ti set v0='HVEH529JYF5D8QHPGPDUIJO4U9DHAI' where id=4; -update noar tt set b2='SOIAP3WDE74SBBDP0M7YJYKMIJO' where id=4; -update noar ti set b2='SOIAP3WDE74SBBDP0M7YJYKMIJO' where id=4; -update noar tt set v0='JXYOGUA3RSQOY0PTRZ2RWT' where id=5; -update noar ti set v0='JXYOGUA3RSQOY0PTRZ2RWT' where id=5; -update noar tt set b0='603N9FOX3CWPSWOCOR0UEI3XE' where id=5; -update noar ti set b0='603N9FOX3CWPSWOCOR0UEI3XE' where id=5; -update noar tt set v0='IO0SBG7G5TFJM4' where id=5; -update noar ti set v0='IO0SBG7G5TFJM4' where id=5; -update noar tt set b1='6YUNRCIFC5JKT' where id=5; -update noar ti set b1='6YUNRCIFC5JKT' where id=5; -update noar tt set v0='Y92DCBMQ' where id=5; -update noar ti set v0='Y92DCBMQ' where id=5; -update noar tt set b2='V4U1BLCKMFATATOEWBSF' where id=5; -update noar ti set b2='V4U1BLCKMFATATOEWBSF' where id=5; -update noar tt set v0='D1EI1' where id=6; -update noar ti set v0='D1EI1' where id=6; -update noar tt set b0='YF18KWDFWBTBFWXOOY4CRKMV' where id=6; -update noar ti set b0='YF18KWDFWBTBFWXOOY4CRKMV' where id=6; -update noar tt set v0='892KGP26627GMGXOV1S4Z0' where id=6; -update noar ti set v0='892KGP26627GMGXOV1S4Z0' where id=6; -update noar tt set b1='YEI0SQB4HM0EDMETPCYHDIZYO32' where id=6; -update noar ti set b1='YEI0SQB4HM0EDMETPCYHDIZYO32' where id=6; -update noar tt set v0='9ZYRWKX3' where id=6; -update noar ti set v0='9ZYRWKX3' where id=6; -update noar tt set b2='OD8D63R9QGAX32OYNI' where id=6; -update noar ti set b2='OD8D63R9QGAX32OYNI' where id=6; -update noar tt set v0='R8UXPSCDZ508S8U8' where id=7; -update noar ti set v0='R8UXPSCDZ508S8U8' where id=7; -update noar tt set b0='VMNXZE2F7TJQMMTUR6IF' where id=7; -update noar ti set b0='VMNXZE2F7TJQMMTUR6IF' where id=7; -update noar tt set v0='5H3HUTEX45H13U99AKZ2WC8FFFTZKN1' where id=7; -update noar ti set v0='5H3HUTEX45H13U99AKZ2WC8FFFTZKN1' where id=7; -update noar tt set b1='HIFJ27HSYHCYZQJSWDVALX4' where id=7; -update noar ti set b1='HIFJ27HSYHCYZQJSWDVALX4' where id=7; -update noar tt set v0='87E8HH7L' where id=7; -update noar ti set v0='87E8HH7L' where id=7; -update noar tt set b2='Z6' where id=7; -update noar ti set b2='Z6' where id=7; -update noar tt set v0='DSSQ' where id=8; -update noar ti set v0='DSSQ' where id=8; -update noar tt set b0='3JN1YB3VL7CD4ZVYKBZWXKYJS3UE' where id=8; -update noar ti set b0='3JN1YB3VL7CD4ZVYKBZWXKYJS3UE' where id=8; -update noar tt set v0='SHX6JGANSBC4TQEVNSY0' where id=8; -update noar ti set v0='SHX6JGANSBC4TQEVNSY0' where id=8; -update noar tt set b1='V5D5SAJZTB7R70ZDGOZK5S' where id=8; -update noar ti set b1='V5D5SAJZTB7R70ZDGOZK5S' where id=8; -update noar tt set v0='96JKDFJOO' where id=8; -update noar ti set v0='96JKDFJOO' where id=8; -update noar tt set b2='3Z0OG8LM8I0UYFII4ACKK2T' where id=8; -update noar ti set b2='3Z0OG8LM8I0UYFII4ACKK2T' where id=8; -update noar tt set v0='O3SEA36FRTCM8P63ER5JNO0957IZ7E' where id=9; -update noar ti set v0='O3SEA36FRTCM8P63ER5JNO0957IZ7E' where id=9; -update noar tt set b0='CQAHXE6SG772H3U2ALA' where id=9; -update noar ti set b0='CQAHXE6SG772H3U2ALA' where id=9; -update noar tt set v0='7WM3HWM38OFTG7XVCRZTE9M1AM' where id=9; -update noar ti set v0='7WM3HWM38OFTG7XVCRZTE9M1AM' where id=9; -update noar tt set b1='JUEO7UGL' where id=9; -update noar ti set b1='JUEO7UGL' where id=9; -update noar tt set v0='K2M2NQYB374ADJDQDA0H9IMPVNDJKTT' where id=9; -update noar ti set v0='K2M2NQYB374ADJDQDA0H9IMPVNDJKTT' where id=9; -update noar tt set b2='5QIIZ789T4' where id=9; -update noar ti set b2='5QIIZ789T4' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 longblob null, - b1 blob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='WD0W8C2F8QAZBDWHEZOYQWJH7AGV1IB' where id=1; -update noar ti set v0='WD0W8C2F8QAZBDWHEZOYQWJH7AGV1IB' where id=1; -update noar tt set b0='57DCEZQ' where id=1; -update noar ti set b0='57DCEZQ' where id=1; -update noar tt set v0='X7T6E0FAE64U9NHSRUSUCLXVYM' where id=1; -update noar ti set v0='X7T6E0FAE64U9NHSRUSUCLXVYM' where id=1; -update noar tt set b1='96Z868HIDSN7U0AIM9BGQ5' where id=1; -update noar ti set b1='96Z868HIDSN7U0AIM9BGQ5' where id=1; -update noar tt set v0='NW01RNLPB1XGYJVAD3' where id=1; -update noar ti set v0='NW01RNLPB1XGYJVAD3' where id=1; -update noar tt set b2='IMW74MIZ9136TCZTAWEPSB30SPC8' where id=1; -update noar ti set b2='IMW74MIZ9136TCZTAWEPSB30SPC8' where id=1; -update noar tt set v0='B3RM59WT0BGDEK74K903CO92LIF2YR' where id=2; -update noar ti set v0='B3RM59WT0BGDEK74K903CO92LIF2YR' where id=2; -update noar tt set b0='Q7PXFZN82E2KN1JDQI9A2' where id=2; -update noar ti set b0='Q7PXFZN82E2KN1JDQI9A2' where id=2; -update noar tt set v0='OCP66CMFR0Z8S69W34O' where id=2; -update noar ti set v0='OCP66CMFR0Z8S69W34O' where id=2; -update noar tt set b1='OTFJF' where id=2; -update noar ti set b1='OTFJF' where id=2; -update noar tt set v0='C95HU32AO9Z' where id=2; -update noar ti set v0='C95HU32AO9Z' where id=2; -update noar tt set b2='JE0S6U7KR3H940OMEB8BA69LCLG' where id=2; -update noar ti set b2='JE0S6U7KR3H940OMEB8BA69LCLG' where id=2; -update noar tt set v0='8QFBMSNLI7JR74DCWYH5' where id=3; -update noar ti set v0='8QFBMSNLI7JR74DCWYH5' where id=3; -update noar tt set b0='FS9L70DUN2L199XHFMGMZRO2ITOE0SLV' where id=3; -update noar ti set b0='FS9L70DUN2L199XHFMGMZRO2ITOE0SLV' where id=3; -update noar tt set v0='WLIW1HSSYOIVQAIR1J74G4T' where id=3; -update noar ti set v0='WLIW1HSSYOIVQAIR1J74G4T' where id=3; -update noar tt set b1='270XASA7JJZROBB7O6M' where id=3; -update noar ti set b1='270XASA7JJZROBB7O6M' where id=3; -update noar tt set v0='N1H1AMZOH7OXFRB4J9Q4G' where id=3; -update noar ti set v0='N1H1AMZOH7OXFRB4J9Q4G' where id=3; -update noar tt set b2='KMZEXA3A9FGOM63RL1DU' where id=3; -update noar ti set b2='KMZEXA3A9FGOM63RL1DU' where id=3; -update noar tt set v0='O4MJW6JRWNPRQ2Z5K6IMNF9' where id=4; -update noar ti set v0='O4MJW6JRWNPRQ2Z5K6IMNF9' where id=4; -update noar tt set b0='FRLZIIP0F48GW8VU4VXZI' where id=4; -update noar ti set b0='FRLZIIP0F48GW8VU4VXZI' where id=4; -update noar tt set v0='XOCRJJPVLVR9BCTYOF3A2' where id=4; -update noar ti set v0='XOCRJJPVLVR9BCTYOF3A2' where id=4; -update noar tt set b1='WEB9UPJRX3PZK1ANRER0OR57SFC6DTU' where id=4; -update noar ti set b1='WEB9UPJRX3PZK1ANRER0OR57SFC6DTU' where id=4; -update noar tt set v0='QE4IHUVFGZRGNF' where id=4; -update noar ti set v0='QE4IHUVFGZRGNF' where id=4; -update noar tt set b2='P' where id=4; -update noar ti set b2='P' where id=4; -update noar tt set v0='DJNCX5SQTK' where id=5; -update noar ti set v0='DJNCX5SQTK' where id=5; -update noar tt set b0='ANFUSL236IWH3RE71T71ZPYPHU87' where id=5; -update noar ti set b0='ANFUSL236IWH3RE71T71ZPYPHU87' where id=5; -update noar tt set v0='8GVL4NPZ' where id=5; -update noar ti set v0='8GVL4NPZ' where id=5; -update noar tt set b1='LW0F7ZPM2' where id=5; -update noar ti set b1='LW0F7ZPM2' where id=5; -update noar tt set v0='BPLK0LD' where id=5; -update noar ti set v0='BPLK0LD' where id=5; -update noar tt set b2='D4S' where id=5; -update noar ti set b2='D4S' where id=5; -update noar tt set v0='JKYGMPPXAW6' where id=6; -update noar ti set v0='JKYGMPPXAW6' where id=6; -update noar tt set b0='NL7ABMQ' where id=6; -update noar ti set b0='NL7ABMQ' where id=6; -update noar tt set v0='WDG7L1QJZESZ9V7OEBH4CNE77JW' where id=6; -update noar ti set v0='WDG7L1QJZESZ9V7OEBH4CNE77JW' where id=6; -update noar tt set b1='BM2CHLWIC6DZNS' where id=6; -update noar ti set b1='BM2CHLWIC6DZNS' where id=6; -update noar tt set v0='J88PI3GFJNCCCEER4350' where id=6; -update noar ti set v0='J88PI3GFJNCCCEER4350' where id=6; -update noar tt set b2='PV3EH83BPH7K9KBH' where id=6; -update noar ti set b2='PV3EH83BPH7K9KBH' where id=6; -update noar tt set v0='EW' where id=7; -update noar ti set v0='EW' where id=7; -update noar tt set b0='RSKH1TA2C2S8KG9E8' where id=7; -update noar ti set b0='RSKH1TA2C2S8KG9E8' where id=7; -update noar tt set v0='4CN5OXWS' where id=7; -update noar ti set v0='4CN5OXWS' where id=7; -update noar tt set b1='UI1J1X' where id=7; -update noar ti set b1='UI1J1X' where id=7; -update noar tt set v0='TUV' where id=7; -update noar ti set v0='TUV' where id=7; -update noar tt set b2='EKKFDTL' where id=7; -update noar ti set b2='EKKFDTL' where id=7; -update noar tt set v0='ZU9' where id=8; -update noar ti set v0='ZU9' where id=8; -update noar tt set b0='IE' where id=8; -update noar ti set b0='IE' where id=8; -update noar tt set v0='HV' where id=8; -update noar ti set v0='HV' where id=8; -update noar tt set b1='F5AVF' where id=8; -update noar ti set b1='F5AVF' where id=8; -update noar tt set v0='00BZDX4JTRHD0YYL5DT7HQX2LOW' where id=8; -update noar ti set v0='00BZDX4JTRHD0YYL5DT7HQX2LOW' where id=8; -update noar tt set b2='9DQH' where id=8; -update noar ti set b2='9DQH' where id=8; -update noar tt set v0='U1IAVIXIZ4G0TLMDQ131SV02AJG' where id=9; -update noar ti set v0='U1IAVIXIZ4G0TLMDQ131SV02AJG' where id=9; -update noar tt set b0='CUNUCWH' where id=9; -update noar ti set b0='CUNUCWH' where id=9; -update noar tt set v0='9K85Z30MX05KX0' where id=9; -update noar ti set v0='9K85Z30MX05KX0' where id=9; -update noar tt set b1='ET3WJTI' where id=9; -update noar ti set b1='ET3WJTI' where id=9; -update noar tt set v0='K5DRRM1MGPHQLYZMJUG6JTC7H7WRFQ' where id=9; -update noar ti set v0='K5DRRM1MGPHQLYZMJUG6JTC7H7WRFQ' where id=9; -update noar tt set b2='CNF2VVL0GK' where id=9; -update noar ti set b2='CNF2VVL0GK' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 longblob null, - b1 blob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='RE0A5K9RVR0E98NPYY1G6ZHF9' where id=1; -update noar ti set v0='RE0A5K9RVR0E98NPYY1G6ZHF9' where id=1; -update noar tt set b0='SD0DCNISM6T' where id=1; -update noar ti set b0='SD0DCNISM6T' where id=1; -update noar tt set v0='EX' where id=1; -update noar ti set v0='EX' where id=1; -update noar tt set b1='JAYYOBCVDKILTQ4ZFB5M9R8T88YFQXW' where id=1; -update noar ti set b1='JAYYOBCVDKILTQ4ZFB5M9R8T88YFQXW' where id=1; -update noar tt set v0='LZF12I3940AUCYJL3' where id=1; -update noar ti set v0='LZF12I3940AUCYJL3' where id=1; -update noar tt set b2='9' where id=1; -update noar ti set b2='9' where id=1; -update noar tt set v0='F9U2J5FA03K1Z5KX20OF1908A' where id=2; -update noar ti set v0='F9U2J5FA03K1Z5KX20OF1908A' where id=2; -update noar tt set b0='OB7TXGILE0XJKRXN9CY83VBKB' where id=2; -update noar ti set b0='OB7TXGILE0XJKRXN9CY83VBKB' where id=2; -update noar tt set v0='RYL5YFPD24DMF8PTZ9ONCY0Z1CNKU5UR' where id=2; -update noar ti set v0='RYL5YFPD24DMF8PTZ9ONCY0Z1CNKU5UR' where id=2; -update noar tt set b1='W7KIGZHH29POEJF' where id=2; -update noar ti set b1='W7KIGZHH29POEJF' where id=2; -update noar tt set v0='4OVO3AYB0VQ2EEBND7R' where id=2; -update noar ti set v0='4OVO3AYB0VQ2EEBND7R' where id=2; -update noar tt set b2='UI9WQUJPYA' where id=2; -update noar ti set b2='UI9WQUJPYA' where id=2; -update noar tt set v0='6FZBGYYJRL5QL8OHGIPT6NC' where id=3; -update noar ti set v0='6FZBGYYJRL5QL8OHGIPT6NC' where id=3; -update noar tt set b0='M' where id=3; -update noar ti set b0='M' where id=3; -update noar tt set v0='E9RBS24LQE9LMLDTD8B52X8XG9AR' where id=3; -update noar ti set v0='E9RBS24LQE9LMLDTD8B52X8XG9AR' where id=3; -update noar tt set b1='3M9ZAY6KCMCEVT55PB' where id=3; -update noar ti set b1='3M9ZAY6KCMCEVT55PB' where id=3; -update noar tt set v0='XKQ4OSRTOQ92XYDXXZD4J' where id=3; -update noar ti set v0='XKQ4OSRTOQ92XYDXXZD4J' where id=3; -update noar tt set b2='0CBCS87WTG3CRG0Z46UCXLU78N00CT' where id=3; -update noar ti set b2='0CBCS87WTG3CRG0Z46UCXLU78N00CT' where id=3; -update noar tt set v0='7YZ1GVXYQAZ7M' where id=4; -update noar ti set v0='7YZ1GVXYQAZ7M' where id=4; -update noar tt set b0='I3RFY9' where id=4; -update noar ti set b0='I3RFY9' where id=4; -update noar tt set v0='2M4SR0PYAEH' where id=4; -update noar ti set v0='2M4SR0PYAEH' where id=4; -update noar tt set b1='2SEC6MBYRK7BDG2H3TQ' where id=4; -update noar ti set b1='2SEC6MBYRK7BDG2H3TQ' where id=4; -update noar tt set v0='SA90Q3W0UMKM6C5VWGL4KIYMHI' where id=4; -update noar ti set v0='SA90Q3W0UMKM6C5VWGL4KIYMHI' where id=4; -update noar tt set b2='D7WDO8F' where id=4; -update noar ti set b2='D7WDO8F' where id=4; -update noar tt set v0='2WVL5LP5DGWAMYGGKZLQFI27' where id=5; -update noar ti set v0='2WVL5LP5DGWAMYGGKZLQFI27' where id=5; -update noar tt set b0='JFXH0MHEEXI3ZILHK2EZ27Y2HKD' where id=5; -update noar ti set b0='JFXH0MHEEXI3ZILHK2EZ27Y2HKD' where id=5; -update noar tt set v0='SFH8LF1M1UR' where id=5; -update noar ti set v0='SFH8LF1M1UR' where id=5; -update noar tt set b1='2Z0Q4XTYCDAWJUR' where id=5; -update noar ti set b1='2Z0Q4XTYCDAWJUR' where id=5; -update noar tt set v0='ZO0GTH70INU3WGVX3H8I12KZ4W1' where id=5; -update noar ti set v0='ZO0GTH70INU3WGVX3H8I12KZ4W1' where id=5; -update noar tt set b2='2GVG5TDZ0W1U8PNWZ2Z5VQ' where id=5; -update noar ti set b2='2GVG5TDZ0W1U8PNWZ2Z5VQ' where id=5; -update noar tt set v0='TU79F08N50UI4L1O' where id=6; -update noar ti set v0='TU79F08N50UI4L1O' where id=6; -update noar tt set b0='XOBI8I4' where id=6; -update noar ti set b0='XOBI8I4' where id=6; -update noar tt set v0='7B63CCS09SZHOQ' where id=6; -update noar ti set v0='7B63CCS09SZHOQ' where id=6; -update noar tt set b1='AWP2FPSJQ0EB6A25M6' where id=6; -update noar ti set b1='AWP2FPSJQ0EB6A25M6' where id=6; -update noar tt set v0='2Z2M6YTE4N0NGB6J60HAD1CB0DA' where id=6; -update noar ti set v0='2Z2M6YTE4N0NGB6J60HAD1CB0DA' where id=6; -update noar tt set b2='CHWA5PFG0JK6X42OT3TBQKRWA7IY2O8' where id=6; -update noar ti set b2='CHWA5PFG0JK6X42OT3TBQKRWA7IY2O8' where id=6; -update noar tt set v0='7C9YTG3PXX' where id=7; -update noar ti set v0='7C9YTG3PXX' where id=7; -update noar tt set b0='EI93' where id=7; -update noar ti set b0='EI93' where id=7; -update noar tt set v0='2X1GI8U3CD4P2IJ9ZCVEB0YQH3MINYX' where id=7; -update noar ti set v0='2X1GI8U3CD4P2IJ9ZCVEB0YQH3MINYX' where id=7; -update noar tt set b1='C0EMNJO' where id=7; -update noar ti set b1='C0EMNJO' where id=7; -update noar tt set v0='MLQNW1XP19FF3BPQ5' where id=7; -update noar ti set v0='MLQNW1XP19FF3BPQ5' where id=7; -update noar tt set b2='BYJ6W' where id=7; -update noar ti set b2='BYJ6W' where id=7; -update noar tt set v0='T61PTORAJRPLCOXPUDHJ6Z' where id=8; -update noar ti set v0='T61PTORAJRPLCOXPUDHJ6Z' where id=8; -update noar tt set b0='P8OEM' where id=8; -update noar ti set b0='P8OEM' where id=8; -update noar tt set v0='3D5GYH1QPWP7BPB6LPWX5' where id=8; -update noar ti set v0='3D5GYH1QPWP7BPB6LPWX5' where id=8; -update noar tt set b1='C4ZYBOR31BS9' where id=8; -update noar ti set b1='C4ZYBOR31BS9' where id=8; -update noar tt set v0='I332AIMZO2VL485' where id=8; -update noar ti set v0='I332AIMZO2VL485' where id=8; -update noar tt set b2='7IAW6ZPPAQ2E735RD8A3B0CVH21' where id=8; -update noar ti set b2='7IAW6ZPPAQ2E735RD8A3B0CVH21' where id=8; -update noar tt set v0='CZHHJ' where id=9; -update noar ti set v0='CZHHJ' where id=9; -update noar tt set b0='5' where id=9; -update noar ti set b0='5' where id=9; -update noar tt set v0='X99Z9UB6DI86UD5P' where id=9; -update noar ti set v0='X99Z9UB6DI86UD5P' where id=9; -update noar tt set b1='82EW183M55IPL9QVGAJ77CN4U5E74M' where id=9; -update noar ti set b1='82EW183M55IPL9QVGAJ77CN4U5E74M' where id=9; -update noar tt set v0='Y06SNYH3' where id=9; -update noar ti set v0='Y06SNYH3' where id=9; -update noar tt set b2='MWNSAEZ2P' where id=9; -update noar ti set b2='MWNSAEZ2P' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 longblob not null, - b1 blob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='T' where id=1; -update noar ti set v0='T' where id=1; -update noar tt set b0='SIU9ULYKC' where id=1; -update noar ti set b0='SIU9ULYKC' where id=1; -update noar tt set v0='ZFZH3PB7ED' where id=1; -update noar ti set v0='ZFZH3PB7ED' where id=1; -update noar tt set b1='ZU' where id=1; -update noar ti set b1='ZU' where id=1; -update noar tt set v0='EOTFHZ5EWJ1AYOFD' where id=1; -update noar ti set v0='EOTFHZ5EWJ1AYOFD' where id=1; -update noar tt set b2='WAQGZA2CHZI5OCRFAP7OFANP6' where id=1; -update noar ti set b2='WAQGZA2CHZI5OCRFAP7OFANP6' where id=1; -update noar tt set v0='H5DW9A' where id=2; -update noar ti set v0='H5DW9A' where id=2; -update noar tt set b0='639001SULAZG18U7AU4YRVA' where id=2; -update noar ti set b0='639001SULAZG18U7AU4YRVA' where id=2; -update noar tt set v0='S4WNQI8IPNVQOPGOJ9MHBMZIRXOBFMD' where id=2; -update noar ti set v0='S4WNQI8IPNVQOPGOJ9MHBMZIRXOBFMD' where id=2; -update noar tt set b1='MS6STQRV4GAXOC9C' where id=2; -update noar ti set b1='MS6STQRV4GAXOC9C' where id=2; -update noar tt set v0='F01CPGHT4JLKXH3I6W7' where id=2; -update noar ti set v0='F01CPGHT4JLKXH3I6W7' where id=2; -update noar tt set b2='IO06VG' where id=2; -update noar ti set b2='IO06VG' where id=2; -update noar tt set v0='AGJ' where id=3; -update noar ti set v0='AGJ' where id=3; -update noar tt set b0='RB' where id=3; -update noar ti set b0='RB' where id=3; -update noar tt set v0='2UWLYEU2BGADY' where id=3; -update noar ti set v0='2UWLYEU2BGADY' where id=3; -update noar tt set b1='9752DUQ93LK42Z115J60XPNV' where id=3; -update noar ti set b1='9752DUQ93LK42Z115J60XPNV' where id=3; -update noar tt set v0='MPMSFRQI' where id=3; -update noar ti set v0='MPMSFRQI' where id=3; -update noar tt set b2='B' where id=3; -update noar ti set b2='B' where id=3; -update noar tt set v0='SXZUTXNDNMXVO5JMBVVU18I7' where id=4; -update noar ti set v0='SXZUTXNDNMXVO5JMBVVU18I7' where id=4; -update noar tt set b0='IO3TUEWZ43P6R1Y60MXD5' where id=4; -update noar ti set b0='IO3TUEWZ43P6R1Y60MXD5' where id=4; -update noar tt set v0='UA0MARBHHZSIP3FZZ9C7XJ9' where id=4; -update noar ti set v0='UA0MARBHHZSIP3FZZ9C7XJ9' where id=4; -update noar tt set b1='F2LU0ODAH3DU5TLRSWYLDS9' where id=4; -update noar ti set b1='F2LU0ODAH3DU5TLRSWYLDS9' where id=4; -update noar tt set v0='JZ2O19P3' where id=4; -update noar ti set v0='JZ2O19P3' where id=4; -update noar tt set b2='E8CRIRAT7S' where id=4; -update noar ti set b2='E8CRIRAT7S' where id=4; -update noar tt set v0='DLMRMIERFYJED8GMDEJ4G7G' where id=5; -update noar ti set v0='DLMRMIERFYJED8GMDEJ4G7G' where id=5; -update noar tt set b0='CAA2O' where id=5; -update noar ti set b0='CAA2O' where id=5; -update noar tt set v0='7A8JKQYS2AQCAC1S7JFOEIEFT' where id=5; -update noar ti set v0='7A8JKQYS2AQCAC1S7JFOEIEFT' where id=5; -update noar tt set b1='QVPYAC9LFB7G' where id=5; -update noar ti set b1='QVPYAC9LFB7G' where id=5; -update noar tt set v0='TYBZYCODHQ8QRU' where id=5; -update noar ti set v0='TYBZYCODHQ8QRU' where id=5; -update noar tt set b2='GW0BWV8FJ077RHJR' where id=5; -update noar ti set b2='GW0BWV8FJ077RHJR' where id=5; -update noar tt set v0='N94BACIP6HE6XA4NW0Y' where id=6; -update noar ti set v0='N94BACIP6HE6XA4NW0Y' where id=6; -update noar tt set b0='BS3D4UOMP1JWL3AOEJK3PH5N8CNI' where id=6; -update noar ti set b0='BS3D4UOMP1JWL3AOEJK3PH5N8CNI' where id=6; -update noar tt set v0='BIZ8JOG0AHVBCFG5SQ75N' where id=6; -update noar ti set v0='BIZ8JOG0AHVBCFG5SQ75N' where id=6; -update noar tt set b1='F58CMPMY' where id=6; -update noar ti set b1='F58CMPMY' where id=6; -update noar tt set v0='S66TOKO2LGXOXN5OM8' where id=6; -update noar ti set v0='S66TOKO2LGXOXN5OM8' where id=6; -update noar tt set b2='8B6OD13T38XMR' where id=6; -update noar ti set b2='8B6OD13T38XMR' where id=6; -update noar tt set v0='1' where id=7; -update noar ti set v0='1' where id=7; -update noar tt set b0='RK6044JV54ACAVDVSIJN23XTIVWE' where id=7; -update noar ti set b0='RK6044JV54ACAVDVSIJN23XTIVWE' where id=7; -update noar tt set v0='H5IW6MO7E3GNAL9YSA6EA6' where id=7; -update noar ti set v0='H5IW6MO7E3GNAL9YSA6EA6' where id=7; -update noar tt set b1='BU148FKQ100F7D' where id=7; -update noar ti set b1='BU148FKQ100F7D' where id=7; -update noar tt set v0='QU2TL69T0ML49545YVQL98' where id=7; -update noar ti set v0='QU2TL69T0ML49545YVQL98' where id=7; -update noar tt set b2='ZF0NSBRPM7GAO9AYUCVEECZ1ENYF' where id=7; -update noar ti set b2='ZF0NSBRPM7GAO9AYUCVEECZ1ENYF' where id=7; -update noar tt set v0='7IY55JZBJ1OYXEC41P33W2XWZYI2N6CY' where id=8; -update noar ti set v0='7IY55JZBJ1OYXEC41P33W2XWZYI2N6CY' where id=8; -update noar tt set b0='FJK1' where id=8; -update noar ti set b0='FJK1' where id=8; -update noar tt set v0='TE5GSCMLV5PKNJ3B13WGF8RK05W7W8' where id=8; -update noar ti set v0='TE5GSCMLV5PKNJ3B13WGF8RK05W7W8' where id=8; -update noar tt set b1='2B73K2TKEKVKMHWY792Y9CMA1BBD2' where id=8; -update noar ti set b1='2B73K2TKEKVKMHWY792Y9CMA1BBD2' where id=8; -update noar tt set v0='39PVX0HHATHKDLJ7BV3D75' where id=8; -update noar ti set v0='39PVX0HHATHKDLJ7BV3D75' where id=8; -update noar tt set b2='YENGFU8QCGABF37P6YQ' where id=8; -update noar ti set b2='YENGFU8QCGABF37P6YQ' where id=8; -update noar tt set v0='4J49JA6L5KPL9R' where id=9; -update noar ti set v0='4J49JA6L5KPL9R' where id=9; -update noar tt set b0='DGRUSPJ6A4KYKJG06U6PRTCGUXFCPB' where id=9; -update noar ti set b0='DGRUSPJ6A4KYKJG06U6PRTCGUXFCPB' where id=9; -update noar tt set v0='4LQNA9H5Q3L9' where id=9; -update noar ti set v0='4LQNA9H5Q3L9' where id=9; -update noar tt set b1='66Q' where id=9; -update noar ti set b1='66Q' where id=9; -update noar tt set v0='XUOSFGAY3OVRM9OTN23RMN8Y414JD4O' where id=9; -update noar ti set v0='XUOSFGAY3OVRM9OTN23RMN8Y414JD4O' where id=9; -update noar tt set b2='OJWREDX80X5SJIF6V5YMH1NS8JYE' where id=9; -update noar ti set b2='OJWREDX80X5SJIF6V5YMH1NS8JYE' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 longblob not null, - b1 blob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='U8SIJCI4YPN' where id=1; -update noar ti set v0='U8SIJCI4YPN' where id=1; -update noar tt set b0='LUUD2PD3YOV3R94BS5W1DO9K12W5RDKV' where id=1; -update noar ti set b0='LUUD2PD3YOV3R94BS5W1DO9K12W5RDKV' where id=1; -update noar tt set v0='0OO' where id=1; -update noar ti set v0='0OO' where id=1; -update noar tt set b1='8S7HWXRE3UJ' where id=1; -update noar ti set b1='8S7HWXRE3UJ' where id=1; -update noar tt set v0='F69OSZO1FRATRYPHY' where id=1; -update noar ti set v0='F69OSZO1FRATRYPHY' where id=1; -update noar tt set b2='3OJKVJMBXNAP5REGHZ0DLQWD' where id=1; -update noar ti set b2='3OJKVJMBXNAP5REGHZ0DLQWD' where id=1; -update noar tt set v0='LNT4C43E05EMHJF5SQL' where id=2; -update noar ti set v0='LNT4C43E05EMHJF5SQL' where id=2; -update noar tt set b0='8D8TJ5S6GOSVBJGVTQ2A63W8IPM' where id=2; -update noar ti set b0='8D8TJ5S6GOSVBJGVTQ2A63W8IPM' where id=2; -update noar tt set v0='G3H3MNG8J323QA2YHF' where id=2; -update noar ti set v0='G3H3MNG8J323QA2YHF' where id=2; -update noar tt set b1='54GZX2XF609LF0SABF8Q' where id=2; -update noar ti set b1='54GZX2XF609LF0SABF8Q' where id=2; -update noar tt set v0='ZUIWP20Y7GQ5T2SM4' where id=2; -update noar ti set v0='ZUIWP20Y7GQ5T2SM4' where id=2; -update noar tt set b2='7V3L5A6' where id=2; -update noar ti set b2='7V3L5A6' where id=2; -update noar tt set v0='XMA0JT04TAN3QHZT' where id=3; -update noar ti set v0='XMA0JT04TAN3QHZT' where id=3; -update noar tt set b0='44V9O8FYYD3SVVLT0IM2K7TQ1DNI1QU' where id=3; -update noar ti set b0='44V9O8FYYD3SVVLT0IM2K7TQ1DNI1QU' where id=3; -update noar tt set v0='1XUTKRMRDOZLIQC3A' where id=3; -update noar ti set v0='1XUTKRMRDOZLIQC3A' where id=3; -update noar tt set b1='F9FQ6VL0QL3KVD3AO1IF' where id=3; -update noar ti set b1='F9FQ6VL0QL3KVD3AO1IF' where id=3; -update noar tt set v0='FSHR80K' where id=3; -update noar ti set v0='FSHR80K' where id=3; -update noar tt set b2='7TO2YG04OPGWF62IOJ81VUM' where id=3; -update noar ti set b2='7TO2YG04OPGWF62IOJ81VUM' where id=3; -update noar tt set v0='9QY2JTEJBS5M0TSC3O' where id=4; -update noar ti set v0='9QY2JTEJBS5M0TSC3O' where id=4; -update noar tt set b0='6N4D0L4CY' where id=4; -update noar ti set b0='6N4D0L4CY' where id=4; -update noar tt set v0='WF8HQI7QUD44JRD3LQ3B2IL' where id=4; -update noar ti set v0='WF8HQI7QUD44JRD3LQ3B2IL' where id=4; -update noar tt set b1='ZO8RGJ0YX2JJLWUMCGEXXKLA98' where id=4; -update noar ti set b1='ZO8RGJ0YX2JJLWUMCGEXXKLA98' where id=4; -update noar tt set v0='5ISQS21S9' where id=4; -update noar ti set v0='5ISQS21S9' where id=4; -update noar tt set b2='NCHX55606AEWAK0P1TUUG34VKJ' where id=4; -update noar ti set b2='NCHX55606AEWAK0P1TUUG34VKJ' where id=4; -update noar tt set v0='JX4C84CT' where id=5; -update noar ti set v0='JX4C84CT' where id=5; -update noar tt set b0='OPCLKHTRB35DAZIV4RC7Q' where id=5; -update noar ti set b0='OPCLKHTRB35DAZIV4RC7Q' where id=5; -update noar tt set v0='ZAO9' where id=5; -update noar ti set v0='ZAO9' where id=5; -update noar tt set b1='6CK27' where id=5; -update noar ti set b1='6CK27' where id=5; -update noar tt set v0='HZTQ1M' where id=5; -update noar ti set v0='HZTQ1M' where id=5; -update noar tt set b2='LQOPPSUAE0MEZMCR4J1X9ADRQJQZ4UA3' where id=5; -update noar ti set b2='LQOPPSUAE0MEZMCR4J1X9ADRQJQZ4UA3' where id=5; -update noar tt set v0='4VA3JP' where id=6; -update noar ti set v0='4VA3JP' where id=6; -update noar tt set b0='HEW7B3VU83PUET' where id=6; -update noar ti set b0='HEW7B3VU83PUET' where id=6; -update noar tt set v0='1CMVTZVX3A51D95P4HGURCLTKIAZQ2' where id=6; -update noar ti set v0='1CMVTZVX3A51D95P4HGURCLTKIAZQ2' where id=6; -update noar tt set b1='GCGDIH86ZJK351PYI' where id=6; -update noar ti set b1='GCGDIH86ZJK351PYI' where id=6; -update noar tt set v0='JCLYLMSAE' where id=6; -update noar ti set v0='JCLYLMSAE' where id=6; -update noar tt set b2='ESGORQWV' where id=6; -update noar ti set b2='ESGORQWV' where id=6; -update noar tt set v0='LTDNZ4ZY1NR4' where id=7; -update noar ti set v0='LTDNZ4ZY1NR4' where id=7; -update noar tt set b0='9UVL785DID8OZY589FLBIEZYVQANK' where id=7; -update noar ti set b0='9UVL785DID8OZY589FLBIEZYVQANK' where id=7; -update noar tt set v0='YT3SR0TMOP' where id=7; -update noar ti set v0='YT3SR0TMOP' where id=7; -update noar tt set b1='7' where id=7; -update noar ti set b1='7' where id=7; -update noar tt set v0='57HM20P752U1U9CMZ' where id=7; -update noar ti set v0='57HM20P752U1U9CMZ' where id=7; -update noar tt set b2='Z89K24K9MVO9I3G6YG1OYPS' where id=7; -update noar ti set b2='Z89K24K9MVO9I3G6YG1OYPS' where id=7; -update noar tt set v0='ZJVSLN2SL6XTEN6' where id=8; -update noar ti set v0='ZJVSLN2SL6XTEN6' where id=8; -update noar tt set b0='QLX75HLH3SIM1TXF4F2OF' where id=8; -update noar ti set b0='QLX75HLH3SIM1TXF4F2OF' where id=8; -update noar tt set v0='Z' where id=8; -update noar ti set v0='Z' where id=8; -update noar tt set b1='Y9IPFE3BXTAC0UT9HC21ESA1FEX' where id=8; -update noar ti set b1='Y9IPFE3BXTAC0UT9HC21ESA1FEX' where id=8; -update noar tt set v0='F' where id=8; -update noar ti set v0='F' where id=8; -update noar tt set b2='DIYHEXW9PDMCSTXDNR0J95EYOO' where id=8; -update noar ti set b2='DIYHEXW9PDMCSTXDNR0J95EYOO' where id=8; -update noar tt set v0='41PZHYVX' where id=9; -update noar ti set v0='41PZHYVX' where id=9; -update noar tt set b0='K3TX52Z' where id=9; -update noar ti set b0='K3TX52Z' where id=9; -update noar tt set v0='C6' where id=9; -update noar ti set v0='C6' where id=9; -update noar tt set b1='4SM7Y7EPR76ALSJ0MY5RUZIF' where id=9; -update noar ti set b1='4SM7Y7EPR76ALSJ0MY5RUZIF' where id=9; -update noar tt set v0='TXJ5L77OC94B5N6DB7TWE7EV8VSK7' where id=9; -update noar ti set v0='TXJ5L77OC94B5N6DB7TWE7EV8VSK7' where id=9; -update noar tt set b2='MZ4F8BQ8A392YM8ARUV96Q6FKGAAJQH' where id=9; -update noar ti set b2='MZ4F8BQ8A392YM8ARUV96Q6FKGAAJQH' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 longblob null, - b1 blob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='TBBF7PNIEY0' where id=1; -update noar ti set v0='TBBF7PNIEY0' where id=1; -update noar tt set b0='LIZNCB0CTAXNQSD93GJ7' where id=1; -update noar ti set b0='LIZNCB0CTAXNQSD93GJ7' where id=1; -update noar tt set v0='K4I1C1C' where id=1; -update noar ti set v0='K4I1C1C' where id=1; -update noar tt set b1='VKP9NE2M88912BMV83E85RKX0' where id=1; -update noar ti set b1='VKP9NE2M88912BMV83E85RKX0' where id=1; -update noar tt set v0='XYPIXPOQCVNTJ' where id=1; -update noar ti set v0='XYPIXPOQCVNTJ' where id=1; -update noar tt set b2='T8ZJH' where id=1; -update noar ti set b2='T8ZJH' where id=1; -update noar tt set v0='YE8WYESMIBLBHOPKDIUIGAPROYKH' where id=2; -update noar ti set v0='YE8WYESMIBLBHOPKDIUIGAPROYKH' where id=2; -update noar tt set b0='2KFS6VVW6KVUQYOZ' where id=2; -update noar ti set b0='2KFS6VVW6KVUQYOZ' where id=2; -update noar tt set v0='6GC1XAWF6HIR2XJ1A4XU70TWWRBVXP' where id=2; -update noar ti set v0='6GC1XAWF6HIR2XJ1A4XU70TWWRBVXP' where id=2; -update noar tt set b1='QC' where id=2; -update noar ti set b1='QC' where id=2; -update noar tt set v0='IP05NF9I79DN9H43C2Y2J9X2' where id=2; -update noar ti set v0='IP05NF9I79DN9H43C2Y2J9X2' where id=2; -update noar tt set b2='AK55K44396UYZA58SF6' where id=2; -update noar ti set b2='AK55K44396UYZA58SF6' where id=2; -update noar tt set v0='BVXN6HK9' where id=3; -update noar ti set v0='BVXN6HK9' where id=3; -update noar tt set b0='JA7WALKHAQOBQFLYSMUZVEZLDVQ' where id=3; -update noar ti set b0='JA7WALKHAQOBQFLYSMUZVEZLDVQ' where id=3; -update noar tt set v0='S2NHOKLWQYMGGKDOZU1BJL' where id=3; -update noar ti set v0='S2NHOKLWQYMGGKDOZU1BJL' where id=3; -update noar tt set b1='E' where id=3; -update noar ti set b1='E' where id=3; -update noar tt set v0='7Z7OVC5XYY9HIRENZ9TR' where id=3; -update noar ti set v0='7Z7OVC5XYY9HIRENZ9TR' where id=3; -update noar tt set b2='M12B16' where id=3; -update noar ti set b2='M12B16' where id=3; -update noar tt set v0='JJ7NM' where id=4; -update noar ti set v0='JJ7NM' where id=4; -update noar tt set b0='5Z1QWAHPXTIZH' where id=4; -update noar ti set b0='5Z1QWAHPXTIZH' where id=4; -update noar tt set v0='5ASWU915ZHUJ6ZAX3' where id=4; -update noar ti set v0='5ASWU915ZHUJ6ZAX3' where id=4; -update noar tt set b1='M' where id=4; -update noar ti set b1='M' where id=4; -update noar tt set v0='35WL482ODFSP' where id=4; -update noar ti set v0='35WL482ODFSP' where id=4; -update noar tt set b2='YKWKLIHSBIDNV1W2W2454M0V4U4' where id=4; -update noar ti set b2='YKWKLIHSBIDNV1W2W2454M0V4U4' where id=4; -update noar tt set v0='49QN' where id=5; -update noar ti set v0='49QN' where id=5; -update noar tt set b0='FSBF' where id=5; -update noar ti set b0='FSBF' where id=5; -update noar tt set v0='M5SHHM4BVPJGHBP2V3WLBH24' where id=5; -update noar ti set v0='M5SHHM4BVPJGHBP2V3WLBH24' where id=5; -update noar tt set b1='XREMAVV3V' where id=5; -update noar ti set b1='XREMAVV3V' where id=5; -update noar tt set v0='Q3JQA1OGH6Z2FT8JMTXLD14HWTHP5Y1K' where id=5; -update noar ti set v0='Q3JQA1OGH6Z2FT8JMTXLD14HWTHP5Y1K' where id=5; -update noar tt set b2='ZLH0PSC738953AXM3' where id=5; -update noar ti set b2='ZLH0PSC738953AXM3' where id=5; -update noar tt set v0='6JEIEWSW5I4U3RBNRPZZIZ' where id=6; -update noar ti set v0='6JEIEWSW5I4U3RBNRPZZIZ' where id=6; -update noar tt set b0='TV6AFZN19FM' where id=6; -update noar ti set b0='TV6AFZN19FM' where id=6; -update noar tt set v0='3WYRVJB726G0' where id=6; -update noar ti set v0='3WYRVJB726G0' where id=6; -update noar tt set b1='BV4LMOJ8J3BMTNX01EYBCKWVXFT' where id=6; -update noar ti set b1='BV4LMOJ8J3BMTNX01EYBCKWVXFT' where id=6; -update noar tt set v0='E104FGTKY7H8SZDGHTNPNF092D1U' where id=6; -update noar ti set v0='E104FGTKY7H8SZDGHTNPNF092D1U' where id=6; -update noar tt set b2='1SCYP805068' where id=6; -update noar ti set b2='1SCYP805068' where id=6; -update noar tt set v0='DJUBO3DUJVAN' where id=7; -update noar ti set v0='DJUBO3DUJVAN' where id=7; -update noar tt set b0='Y8KMOF2FA55NBO0FYWT5O6' where id=7; -update noar ti set b0='Y8KMOF2FA55NBO0FYWT5O6' where id=7; -update noar tt set v0='CTRS5FX94HLNNDS2ICS' where id=7; -update noar ti set v0='CTRS5FX94HLNNDS2ICS' where id=7; -update noar tt set b1='FVHURWB1WUVU0Z9AD' where id=7; -update noar ti set b1='FVHURWB1WUVU0Z9AD' where id=7; -update noar tt set v0='AY' where id=7; -update noar ti set v0='AY' where id=7; -update noar tt set b2='3YMPHT51' where id=7; -update noar ti set b2='3YMPHT51' where id=7; -update noar tt set v0='Y2N8IHBQANWG9IL091D5Q7V2' where id=8; -update noar ti set v0='Y2N8IHBQANWG9IL091D5Q7V2' where id=8; -update noar tt set b0='561GQ1WTR5JUT4' where id=8; -update noar ti set b0='561GQ1WTR5JUT4' where id=8; -update noar tt set v0='CRDDPT6' where id=8; -update noar ti set v0='CRDDPT6' where id=8; -update noar tt set b1='CVI35ZHTANAXT9H0PX75BSACUJXW2Y' where id=8; -update noar ti set b1='CVI35ZHTANAXT9H0PX75BSACUJXW2Y' where id=8; -update noar tt set v0='E83T4C3AGAUEE8CA' where id=8; -update noar ti set v0='E83T4C3AGAUEE8CA' where id=8; -update noar tt set b2='PQEKJUKB6BG46N' where id=8; -update noar ti set b2='PQEKJUKB6BG46N' where id=8; -update noar tt set v0='QQLMPUZ48F2MKG57Y' where id=9; -update noar ti set v0='QQLMPUZ48F2MKG57Y' where id=9; -update noar tt set b0='57KJMENX6Q' where id=9; -update noar ti set b0='57KJMENX6Q' where id=9; -update noar tt set v0='DAVGGNCD6JCDDOGEERRU4540YEOABUQ' where id=9; -update noar ti set v0='DAVGGNCD6JCDDOGEERRU4540YEOABUQ' where id=9; -update noar tt set b1='7' where id=9; -update noar ti set b1='7' where id=9; -update noar tt set v0='E4' where id=9; -update noar ti set v0='E4' where id=9; -update noar tt set b2='VKGRLTTFLDRFU9YEF6HCINXBIKZY75O' where id=9; -update noar ti set b2='VKGRLTTFLDRFU9YEF6HCINXBIKZY75O' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 longblob null, - b1 blob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='2E' where id=1; -update noar ti set v0='2E' where id=1; -update noar tt set b0='53TK1A4LL' where id=1; -update noar ti set b0='53TK1A4LL' where id=1; -update noar tt set v0='9M5M4WWJUM' where id=1; -update noar ti set v0='9M5M4WWJUM' where id=1; -update noar tt set b1='SI6NYL' where id=1; -update noar ti set b1='SI6NYL' where id=1; -update noar tt set v0='73CKDYI3UC8I0GCN48UT9DEH3GOY6C37' where id=1; -update noar ti set v0='73CKDYI3UC8I0GCN48UT9DEH3GOY6C37' where id=1; -update noar tt set b2='87CERJODG11T5I7XLZ67' where id=1; -update noar ti set b2='87CERJODG11T5I7XLZ67' where id=1; -update noar tt set v0='325DYXA87X2WCVXI8RQBA8' where id=2; -update noar ti set v0='325DYXA87X2WCVXI8RQBA8' where id=2; -update noar tt set b0='9DB4O5F174YRU70V3' where id=2; -update noar ti set b0='9DB4O5F174YRU70V3' where id=2; -update noar tt set v0='Y7UVP66MTMRMDDQTOFOQG7BG7HV' where id=2; -update noar ti set v0='Y7UVP66MTMRMDDQTOFOQG7BG7HV' where id=2; -update noar tt set b1='D8D6D8ZJANJ3DOUMUXC6SKX1EF' where id=2; -update noar ti set b1='D8D6D8ZJANJ3DOUMUXC6SKX1EF' where id=2; -update noar tt set v0='W5I' where id=2; -update noar ti set v0='W5I' where id=2; -update noar tt set b2='C' where id=2; -update noar ti set b2='C' where id=2; -update noar tt set v0='0CRRFIUSG5FX' where id=3; -update noar ti set v0='0CRRFIUSG5FX' where id=3; -update noar tt set b0='IHB' where id=3; -update noar ti set b0='IHB' where id=3; -update noar tt set v0='CSBDFFO4K26WX6A1O497YZCG1IFYM0H' where id=3; -update noar ti set v0='CSBDFFO4K26WX6A1O497YZCG1IFYM0H' where id=3; -update noar tt set b1='0WDTQ8990ONKBIZX90XL7Z85BFUHGO' where id=3; -update noar ti set b1='0WDTQ8990ONKBIZX90XL7Z85BFUHGO' where id=3; -update noar tt set v0='18AJ7I5ERYTH' where id=3; -update noar ti set v0='18AJ7I5ERYTH' where id=3; -update noar tt set b2='8DQ9V' where id=3; -update noar ti set b2='8DQ9V' where id=3; -update noar tt set v0='7EMJX7JTXN3NKZG6Q1LV9VM6Q87' where id=4; -update noar ti set v0='7EMJX7JTXN3NKZG6Q1LV9VM6Q87' where id=4; -update noar tt set b0='BFBZOC5JPDFE' where id=4; -update noar ti set b0='BFBZOC5JPDFE' where id=4; -update noar tt set v0='LKCVPSETW2YZ8GG6BTZC' where id=4; -update noar ti set v0='LKCVPSETW2YZ8GG6BTZC' where id=4; -update noar tt set b1='M' where id=4; -update noar ti set b1='M' where id=4; -update noar tt set v0='PHQTBXBOD0M14DII' where id=4; -update noar ti set v0='PHQTBXBOD0M14DII' where id=4; -update noar tt set b2='OHQHP6YE' where id=4; -update noar ti set b2='OHQHP6YE' where id=4; -update noar tt set v0='J6S2OAVLBQXOF2' where id=5; -update noar ti set v0='J6S2OAVLBQXOF2' where id=5; -update noar tt set b0='LF8KZHUOLIMPORVU' where id=5; -update noar ti set b0='LF8KZHUOLIMPORVU' where id=5; -update noar tt set v0='FAP2FZOKQPPUB2J' where id=5; -update noar ti set v0='FAP2FZOKQPPUB2J' where id=5; -update noar tt set b1='R3GYXMU' where id=5; -update noar ti set b1='R3GYXMU' where id=5; -update noar tt set v0='1DMYKJB5SUQHGBKI5QCMM' where id=5; -update noar ti set v0='1DMYKJB5SUQHGBKI5QCMM' where id=5; -update noar tt set b2='1C7TCKJTE73L' where id=5; -update noar ti set b2='1C7TCKJTE73L' where id=5; -update noar tt set v0='QXY' where id=6; -update noar ti set v0='QXY' where id=6; -update noar tt set b0='N3P9Y60LA' where id=6; -update noar ti set b0='N3P9Y60LA' where id=6; -update noar tt set v0='KQ9AMGGCUE5PHY75I2' where id=6; -update noar ti set v0='KQ9AMGGCUE5PHY75I2' where id=6; -update noar tt set b1='KQUWJOYEDPXBQ8GR2LMP0LYTHGCB888' where id=6; -update noar ti set b1='KQUWJOYEDPXBQ8GR2LMP0LYTHGCB888' where id=6; -update noar tt set v0='HJX8KQMJKE47VFJ8Q6' where id=6; -update noar ti set v0='HJX8KQMJKE47VFJ8Q6' where id=6; -update noar tt set b2='ITLB5314ATXDPQL4LXS1C' where id=6; -update noar ti set b2='ITLB5314ATXDPQL4LXS1C' where id=6; -update noar tt set v0='IZKXBGF0M6MVF8WZE3HN0GZSOFW' where id=7; -update noar ti set v0='IZKXBGF0M6MVF8WZE3HN0GZSOFW' where id=7; -update noar tt set b0='M1S8GMO1YFTVKBHV3CH0Q6D5J84' where id=7; -update noar ti set b0='M1S8GMO1YFTVKBHV3CH0Q6D5J84' where id=7; -update noar tt set v0='HYBDR079M0RJPBL9V0TNXSJ3MW8' where id=7; -update noar ti set v0='HYBDR079M0RJPBL9V0TNXSJ3MW8' where id=7; -update noar tt set b1='7GOV921001P3QIW4GKG1QDMS2U40XSU0' where id=7; -update noar ti set b1='7GOV921001P3QIW4GKG1QDMS2U40XSU0' where id=7; -update noar tt set v0='I71R32RCD40GV' where id=7; -update noar ti set v0='I71R32RCD40GV' where id=7; -update noar tt set b2='TQ0K1D5CJ4LU5Z3SN1U47MBUTEDVO' where id=7; -update noar ti set b2='TQ0K1D5CJ4LU5Z3SN1U47MBUTEDVO' where id=7; -update noar tt set v0='W3JKQCMP1OGINQY2VO00MXBS0GHKNUX' where id=8; -update noar ti set v0='W3JKQCMP1OGINQY2VO00MXBS0GHKNUX' where id=8; -update noar tt set b0='ZBNA0TCRCEB' where id=8; -update noar ti set b0='ZBNA0TCRCEB' where id=8; -update noar tt set v0='JDJZEAESVWDVDTYRH2XB0' where id=8; -update noar ti set v0='JDJZEAESVWDVDTYRH2XB0' where id=8; -update noar tt set b1='LVF' where id=8; -update noar ti set b1='LVF' where id=8; -update noar tt set v0='1EKMZOSGE12VJB2ZR3SUJ649X6' where id=8; -update noar ti set v0='1EKMZOSGE12VJB2ZR3SUJ649X6' where id=8; -update noar tt set b2='5LJSMNV0P571P2N' where id=8; -update noar ti set b2='5LJSMNV0P571P2N' where id=8; -update noar tt set v0='3IC11MXCFUN4O5OVS51KUMWF' where id=9; -update noar ti set v0='3IC11MXCFUN4O5OVS51KUMWF' where id=9; -update noar tt set b0='A5O3IP3Y' where id=9; -update noar ti set b0='A5O3IP3Y' where id=9; -update noar tt set v0='BDS' where id=9; -update noar ti set v0='BDS' where id=9; -update noar tt set b1='YVK2RYAMSYJICH85Q0L5KLT' where id=9; -update noar ti set b1='YVK2RYAMSYJICH85Q0L5KLT' where id=9; -update noar tt set v0='GZ31I1069A' where id=9; -update noar ti set v0='GZ31I1069A' where id=9; -update noar tt set b2='1JP3' where id=9; -update noar ti set b2='1JP3' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 longblob not null, - b1 blob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='UKIJ7HPB54D2N1KW50' where id=1; -update noar ti set v0='UKIJ7HPB54D2N1KW50' where id=1; -update noar tt set b0='KW' where id=1; -update noar ti set b0='KW' where id=1; -update noar tt set v0='NJ5WRQXR2LNP5ZGBPUKODQ4L4RE' where id=1; -update noar ti set v0='NJ5WRQXR2LNP5ZGBPUKODQ4L4RE' where id=1; -update noar tt set b1='KRZT54RUHIIOGBRAZ7Q0' where id=1; -update noar ti set b1='KRZT54RUHIIOGBRAZ7Q0' where id=1; -update noar tt set v0='G9UB9LVW5C' where id=1; -update noar ti set v0='G9UB9LVW5C' where id=1; -update noar tt set b2='594RGPUQ6738NEZAGTG5ZEMBKY9' where id=1; -update noar ti set b2='594RGPUQ6738NEZAGTG5ZEMBKY9' where id=1; -update noar tt set v0='V2C' where id=2; -update noar ti set v0='V2C' where id=2; -update noar tt set b0='DZC6NFZW023RZPJEF8K9VBHN98FAV5O' where id=2; -update noar ti set b0='DZC6NFZW023RZPJEF8K9VBHN98FAV5O' where id=2; -update noar tt set v0='UOOBPBV53' where id=2; -update noar ti set v0='UOOBPBV53' where id=2; -update noar tt set b1='BW41MYTU2E4BGDJN6Z' where id=2; -update noar ti set b1='BW41MYTU2E4BGDJN6Z' where id=2; -update noar tt set v0='WN43Z4AAZ80W' where id=2; -update noar ti set v0='WN43Z4AAZ80W' where id=2; -update noar tt set b2='JTTYK3QVHHBGWYAIGC504FOZS1XJ5' where id=2; -update noar ti set b2='JTTYK3QVHHBGWYAIGC504FOZS1XJ5' where id=2; -update noar tt set v0='MI1KT' where id=3; -update noar ti set v0='MI1KT' where id=3; -update noar tt set b0='T1TJOALQQWM' where id=3; -update noar ti set b0='T1TJOALQQWM' where id=3; -update noar tt set v0='AIH6PR41ICGZ0BAE0SA77EL7NBC' where id=3; -update noar ti set v0='AIH6PR41ICGZ0BAE0SA77EL7NBC' where id=3; -update noar tt set b1='NVK6IIORGFBKG0WXRBCYR6H7R' where id=3; -update noar ti set b1='NVK6IIORGFBKG0WXRBCYR6H7R' where id=3; -update noar tt set v0='RMYFIPHXLDMHHILLDGR0PXLZVR' where id=3; -update noar ti set v0='RMYFIPHXLDMHHILLDGR0PXLZVR' where id=3; -update noar tt set b2='C5F6RJ4WPUT6FQOSS2GNJNSR78G9PAL' where id=3; -update noar ti set b2='C5F6RJ4WPUT6FQOSS2GNJNSR78G9PAL' where id=3; -update noar tt set v0='U8WK8TM6IN9TVFWFZG' where id=4; -update noar ti set v0='U8WK8TM6IN9TVFWFZG' where id=4; -update noar tt set b0='9MRBJDYNZVMB4J11DAKEPPNP' where id=4; -update noar ti set b0='9MRBJDYNZVMB4J11DAKEPPNP' where id=4; -update noar tt set v0='IV64YL7ONEJKS10H58UTIOJL' where id=4; -update noar ti set v0='IV64YL7ONEJKS10H58UTIOJL' where id=4; -update noar tt set b1='DMCKOREFOHPURS2JQ9AV4OL81QU8' where id=4; -update noar ti set b1='DMCKOREFOHPURS2JQ9AV4OL81QU8' where id=4; -update noar tt set v0='NDQVS4VMYAKX4NIX6AXBUQ0' where id=4; -update noar ti set v0='NDQVS4VMYAKX4NIX6AXBUQ0' where id=4; -update noar tt set b2='ZFL89395OILU1ENGJAAM' where id=4; -update noar ti set b2='ZFL89395OILU1ENGJAAM' where id=4; -update noar tt set v0='9KP9F90F8VOV' where id=5; -update noar ti set v0='9KP9F90F8VOV' where id=5; -update noar tt set b0='QAD1TZ3G4VR7E' where id=5; -update noar ti set b0='QAD1TZ3G4VR7E' where id=5; -update noar tt set v0='8EI150DNY1QNF7SX1384HTPF3IAHG' where id=5; -update noar ti set v0='8EI150DNY1QNF7SX1384HTPF3IAHG' where id=5; -update noar tt set b1='7AG7O3IW9SNK3CDRARU' where id=5; -update noar ti set b1='7AG7O3IW9SNK3CDRARU' where id=5; -update noar tt set v0='93DY8PIEHIYBNW5N78HC' where id=5; -update noar ti set v0='93DY8PIEHIYBNW5N78HC' where id=5; -update noar tt set b2='VTTT398NHC5TFATK5SUJ63EJYTJU2' where id=5; -update noar ti set b2='VTTT398NHC5TFATK5SUJ63EJYTJU2' where id=5; -update noar tt set v0='9V6CUWYXLJZJF44AEC0XCRWD512TWK0I' where id=6; -update noar ti set v0='9V6CUWYXLJZJF44AEC0XCRWD512TWK0I' where id=6; -update noar tt set b0='FB37HKBDAKD23ZZZP4Z3' where id=6; -update noar ti set b0='FB37HKBDAKD23ZZZP4Z3' where id=6; -update noar tt set v0='TP2MLYK14IH5S1D' where id=6; -update noar ti set v0='TP2MLYK14IH5S1D' where id=6; -update noar tt set b1='ZVINAO1EA36KB46D5YXHJ0' where id=6; -update noar ti set b1='ZVINAO1EA36KB46D5YXHJ0' where id=6; -update noar tt set v0='MZVUTNW246M40QX3XD5FSJPUO8N9WKAV' where id=6; -update noar ti set v0='MZVUTNW246M40QX3XD5FSJPUO8N9WKAV' where id=6; -update noar tt set b2='SMKR3N' where id=6; -update noar ti set b2='SMKR3N' where id=6; -update noar tt set v0='X8W4YF0191NKRO2AFAU' where id=7; -update noar ti set v0='X8W4YF0191NKRO2AFAU' where id=7; -update noar tt set b0='INQYC21Z2TF58QRQ3A89GSB5' where id=7; -update noar ti set b0='INQYC21Z2TF58QRQ3A89GSB5' where id=7; -update noar tt set v0='KXUIANCEXBWSL3FP4SGU' where id=7; -update noar ti set v0='KXUIANCEXBWSL3FP4SGU' where id=7; -update noar tt set b1='8RQKOE8FYOHIWA8WB' where id=7; -update noar ti set b1='8RQKOE8FYOHIWA8WB' where id=7; -update noar tt set v0='7QMZAYZ36FVC5F87' where id=7; -update noar ti set v0='7QMZAYZ36FVC5F87' where id=7; -update noar tt set b2='OIIPOOKV7ZZKR7HURPAL1MUL9PCZW40' where id=7; -update noar ti set b2='OIIPOOKV7ZZKR7HURPAL1MUL9PCZW40' where id=7; -update noar tt set v0='RZQQHZW1DQMN0JWXX8U4CFXZR9B89Q' where id=8; -update noar ti set v0='RZQQHZW1DQMN0JWXX8U4CFXZR9B89Q' where id=8; -update noar tt set b0='UC4N0WU3TCLB74I30FOWNMJQPPMUF50C' where id=8; -update noar ti set b0='UC4N0WU3TCLB74I30FOWNMJQPPMUF50C' where id=8; -update noar tt set v0='K1ZTD89TLKK103E09C8Q7' where id=8; -update noar ti set v0='K1ZTD89TLKK103E09C8Q7' where id=8; -update noar tt set b1='12NDKZ9HL' where id=8; -update noar ti set b1='12NDKZ9HL' where id=8; -update noar tt set v0='A442U8OULC7M2T5UB7416KL' where id=8; -update noar ti set v0='A442U8OULC7M2T5UB7416KL' where id=8; -update noar tt set b2='7ZJE82EX9XK7DL6L' where id=8; -update noar ti set b2='7ZJE82EX9XK7DL6L' where id=8; -update noar tt set v0='VOSU04MMOBI3009UXCM5' where id=9; -update noar ti set v0='VOSU04MMOBI3009UXCM5' where id=9; -update noar tt set b0='PRKEEUBGOTXA3' where id=9; -update noar ti set b0='PRKEEUBGOTXA3' where id=9; -update noar tt set v0='E32NQOLSN3KUSOTNNQ' where id=9; -update noar ti set v0='E32NQOLSN3KUSOTNNQ' where id=9; -update noar tt set b1='345AT8LGSTZVN4HTUJ2LM' where id=9; -update noar ti set b1='345AT8LGSTZVN4HTUJ2LM' where id=9; -update noar tt set v0='3IORRAI29CW97PMBOGPPDM29WOOD7' where id=9; -update noar ti set v0='3IORRAI29CW97PMBOGPPDM29WOOD7' where id=9; -update noar tt set b2='161CVACR' where id=9; -update noar ti set b2='161CVACR' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 longblob not null, - b1 blob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='S3WGRYWS1JL87K' where id=1; -update noar ti set v0='S3WGRYWS1JL87K' where id=1; -update noar tt set b0='ANUIZ2NNTQBUDA0T88L2RYZ44Q' where id=1; -update noar ti set b0='ANUIZ2NNTQBUDA0T88L2RYZ44Q' where id=1; -update noar tt set v0='E7KQ4DM76T29VJKJM' where id=1; -update noar ti set v0='E7KQ4DM76T29VJKJM' where id=1; -update noar tt set b1='RWPL' where id=1; -update noar ti set b1='RWPL' where id=1; -update noar tt set v0='L2ZEPTEO5LZID0SQTCPXODL6CB1RU' where id=1; -update noar ti set v0='L2ZEPTEO5LZID0SQTCPXODL6CB1RU' where id=1; -update noar tt set b2='M' where id=1; -update noar ti set b2='M' where id=1; -update noar tt set v0='605452XQRHQ' where id=2; -update noar ti set v0='605452XQRHQ' where id=2; -update noar tt set b0='S2Y1GNILERW5BX' where id=2; -update noar ti set b0='S2Y1GNILERW5BX' where id=2; -update noar tt set v0='322C' where id=2; -update noar ti set v0='322C' where id=2; -update noar tt set b1='F2TJ6BN8LP9D2KM8' where id=2; -update noar ti set b1='F2TJ6BN8LP9D2KM8' where id=2; -update noar tt set v0='JWR0IFLLBS' where id=2; -update noar ti set v0='JWR0IFLLBS' where id=2; -update noar tt set b2='6SLGPDR64QH1ZXQZQCX0EK564TH8SA' where id=2; -update noar ti set b2='6SLGPDR64QH1ZXQZQCX0EK564TH8SA' where id=2; -update noar tt set v0='6W' where id=3; -update noar ti set v0='6W' where id=3; -update noar tt set b0='Q3RL2U' where id=3; -update noar ti set b0='Q3RL2U' where id=3; -update noar tt set v0='LPGJ8XWM69B14YMLR' where id=3; -update noar ti set v0='LPGJ8XWM69B14YMLR' where id=3; -update noar tt set b1='GHQS7QEWEO9XE91UI4CB' where id=3; -update noar ti set b1='GHQS7QEWEO9XE91UI4CB' where id=3; -update noar tt set v0='H98TAFAKTIEGX' where id=3; -update noar ti set v0='H98TAFAKTIEGX' where id=3; -update noar tt set b2='1ET6ADIAABFH4L6B2AMYKYXWDQJROJ' where id=3; -update noar ti set b2='1ET6ADIAABFH4L6B2AMYKYXWDQJROJ' where id=3; -update noar tt set v0='U59L' where id=4; -update noar ti set v0='U59L' where id=4; -update noar tt set b0='0Y4JKSE8450D8SFL0' where id=4; -update noar ti set b0='0Y4JKSE8450D8SFL0' where id=4; -update noar tt set v0='29JZ7IN87653YDI9N0EVHEM' where id=4; -update noar ti set v0='29JZ7IN87653YDI9N0EVHEM' where id=4; -update noar tt set b1='QEBZE2HC3NP9U' where id=4; -update noar ti set b1='QEBZE2HC3NP9U' where id=4; -update noar tt set v0='4ED1URIBWQ9W1QQNGCDI' where id=4; -update noar ti set v0='4ED1URIBWQ9W1QQNGCDI' where id=4; -update noar tt set b2='X64F2F9E3JJ73VG68PAF5610O9VG' where id=4; -update noar ti set b2='X64F2F9E3JJ73VG68PAF5610O9VG' where id=4; -update noar tt set v0='TEHPUQ8383CZ6OJFP5CWAMJOFUD2Y47' where id=5; -update noar ti set v0='TEHPUQ8383CZ6OJFP5CWAMJOFUD2Y47' where id=5; -update noar tt set b0='3N1CRKKJVI5298D9PJEVLM8KGBY4N0' where id=5; -update noar ti set b0='3N1CRKKJVI5298D9PJEVLM8KGBY4N0' where id=5; -update noar tt set v0='54CE1XHYTI2ESZW398QWQAMFWDPCVR8' where id=5; -update noar ti set v0='54CE1XHYTI2ESZW398QWQAMFWDPCVR8' where id=5; -update noar tt set b1='2TCB3SDEGTPC4PLVO7J' where id=5; -update noar ti set b1='2TCB3SDEGTPC4PLVO7J' where id=5; -update noar tt set v0='XDVTJAWMK0YE3XZ6XT' where id=5; -update noar ti set v0='XDVTJAWMK0YE3XZ6XT' where id=5; -update noar tt set b2='5UB' where id=5; -update noar ti set b2='5UB' where id=5; -update noar tt set v0='P6WMWYCTZP8YC4S8FQ507W8R0GB' where id=6; -update noar ti set v0='P6WMWYCTZP8YC4S8FQ507W8R0GB' where id=6; -update noar tt set b0='XZU1SQ8YNN5JQBUK8PBDBRD9JDECQ' where id=6; -update noar ti set b0='XZU1SQ8YNN5JQBUK8PBDBRD9JDECQ' where id=6; -update noar tt set v0='JPQKP7HBTIRYC' where id=6; -update noar ti set v0='JPQKP7HBTIRYC' where id=6; -update noar tt set b1='HFTW8L0K' where id=6; -update noar ti set b1='HFTW8L0K' where id=6; -update noar tt set v0='9P79B8HRRW3IUKCP5G99YSUQ4BP2' where id=6; -update noar ti set v0='9P79B8HRRW3IUKCP5G99YSUQ4BP2' where id=6; -update noar tt set b2='Z8EI0HHMDU6M3176YYAWE89GFZ67ILN' where id=6; -update noar ti set b2='Z8EI0HHMDU6M3176YYAWE89GFZ67ILN' where id=6; -update noar tt set v0='R598N0WNNKZZ81MBQRR24WNEA83O' where id=7; -update noar ti set v0='R598N0WNNKZZ81MBQRR24WNEA83O' where id=7; -update noar tt set b0='2AFH2XG7BBE7Y6IMX' where id=7; -update noar ti set b0='2AFH2XG7BBE7Y6IMX' where id=7; -update noar tt set v0='GVL4L966AQCP39HH' where id=7; -update noar ti set v0='GVL4L966AQCP39HH' where id=7; -update noar tt set b1='3J2E90GHY1I' where id=7; -update noar ti set b1='3J2E90GHY1I' where id=7; -update noar tt set v0='3X4DERQ' where id=7; -update noar ti set v0='3X4DERQ' where id=7; -update noar tt set b2='MM7GCW7Z' where id=7; -update noar ti set b2='MM7GCW7Z' where id=7; -update noar tt set v0='2PRWPXXB29I5SFMRK6TZGMFUO6A' where id=8; -update noar ti set v0='2PRWPXXB29I5SFMRK6TZGMFUO6A' where id=8; -update noar tt set b0='RBRB9N9AK3LIWEJ9GVC7J1YIM' where id=8; -update noar ti set b0='RBRB9N9AK3LIWEJ9GVC7J1YIM' where id=8; -update noar tt set v0='W7THSP2D4K54RG8HJQNT12C' where id=8; -update noar ti set v0='W7THSP2D4K54RG8HJQNT12C' where id=8; -update noar tt set b1='GCH5CYW' where id=8; -update noar ti set b1='GCH5CYW' where id=8; -update noar tt set v0='F167WCWWYOFOPQH' where id=8; -update noar ti set v0='F167WCWWYOFOPQH' where id=8; -update noar tt set b2='29TW1DGZW3FNCA93VWNZBHOO5JP2Y' where id=8; -update noar ti set b2='29TW1DGZW3FNCA93VWNZBHOO5JP2Y' where id=8; -update noar tt set v0='O' where id=9; -update noar ti set v0='O' where id=9; -update noar tt set b0='OG8ZGD0CPFLSP' where id=9; -update noar ti set b0='OG8ZGD0CPFLSP' where id=9; -update noar tt set v0='FDP6R52NMT' where id=9; -update noar ti set v0='FDP6R52NMT' where id=9; -update noar tt set b1='2JRMGMPX3AYRI' where id=9; -update noar ti set b1='2JRMGMPX3AYRI' where id=9; -update noar tt set v0='DRFZVY2L5Y203E1S7S0VJSMVTXQUZGD' where id=9; -update noar ti set v0='DRFZVY2L5Y203E1S7S0VJSMVTXQUZGD' where id=9; -update noar tt set b2='KDVOG4LMBEQ3032BXUC7AYZD7GUHVGD' where id=9; -update noar ti set b2='KDVOG4LMBEQ3032BXUC7AYZD7GUHVGD' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 longblob null, - b1 blob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='FSW75BDDV1PMV3X986QWXKR7AAV5' where id=1; -update noar ti set v0='FSW75BDDV1PMV3X986QWXKR7AAV5' where id=1; -update noar tt set b0='JC' where id=1; -update noar ti set b0='JC' where id=1; -update noar tt set v0='ZM8X0DQAI5MOT7AYWG' where id=1; -update noar ti set v0='ZM8X0DQAI5MOT7AYWG' where id=1; -update noar tt set b1='BIAGAZJAG9T3IZME688IXY' where id=1; -update noar ti set b1='BIAGAZJAG9T3IZME688IXY' where id=1; -update noar tt set v0='RBWDFY62NS8ESMSRWIHEKNU32W10W5A0' where id=1; -update noar ti set v0='RBWDFY62NS8ESMSRWIHEKNU32W10W5A0' where id=1; -update noar tt set b2='YU4VQ3N1069EAP3IV' where id=1; -update noar ti set b2='YU4VQ3N1069EAP3IV' where id=1; -update noar tt set v0='JLGE7GCYFIRI3S2UWXFQ9VGKX9QUXIKM' where id=2; -update noar ti set v0='JLGE7GCYFIRI3S2UWXFQ9VGKX9QUXIKM' where id=2; -update noar tt set b0='YWG77Z4Y8HG7NBJ7WMR9O419X' where id=2; -update noar ti set b0='YWG77Z4Y8HG7NBJ7WMR9O419X' where id=2; -update noar tt set v0='T6DOCH0A0TRCYV' where id=2; -update noar ti set v0='T6DOCH0A0TRCYV' where id=2; -update noar tt set b1='ZHNETGL9ZN' where id=2; -update noar ti set b1='ZHNETGL9ZN' where id=2; -update noar tt set v0='L' where id=2; -update noar ti set v0='L' where id=2; -update noar tt set b2='GAPSO5HXJGKYSKKIEUMWV7ZZ9219' where id=2; -update noar ti set b2='GAPSO5HXJGKYSKKIEUMWV7ZZ9219' where id=2; -update noar tt set v0='ZZYZSKSWF50Z9WZS2IAOGBI5EN3' where id=3; -update noar ti set v0='ZZYZSKSWF50Z9WZS2IAOGBI5EN3' where id=3; -update noar tt set b0='CEVM974G1P0718EJ' where id=3; -update noar ti set b0='CEVM974G1P0718EJ' where id=3; -update noar tt set v0='H5S2ATW7C98DF9RPMMWL' where id=3; -update noar ti set v0='H5S2ATW7C98DF9RPMMWL' where id=3; -update noar tt set b1='X3JXFAX2M7COBCK9U4CCKD99ECDP' where id=3; -update noar ti set b1='X3JXFAX2M7COBCK9U4CCKD99ECDP' where id=3; -update noar tt set v0='MQYJ1XKFJ3PFPX9PGOL0E36W2L' where id=3; -update noar ti set v0='MQYJ1XKFJ3PFPX9PGOL0E36W2L' where id=3; -update noar tt set b2='R11FH6OGNN1AHWZQPMTIK' where id=3; -update noar ti set b2='R11FH6OGNN1AHWZQPMTIK' where id=3; -update noar tt set v0='GSQYPZWE4L5TG49FU0DM' where id=4; -update noar ti set v0='GSQYPZWE4L5TG49FU0DM' where id=4; -update noar tt set b0='Q9DU6YVORIO1Y7CLLZ4GSWQNYK' where id=4; -update noar ti set b0='Q9DU6YVORIO1Y7CLLZ4GSWQNYK' where id=4; -update noar tt set v0='A9GWMMIWZTFMXTENV05FGQ8SPVHOKL' where id=4; -update noar ti set v0='A9GWMMIWZTFMXTENV05FGQ8SPVHOKL' where id=4; -update noar tt set b1='SLG1MM87DROCQHN6PNHLLJIURHVQ0' where id=4; -update noar ti set b1='SLG1MM87DROCQHN6PNHLLJIURHVQ0' where id=4; -update noar tt set v0='N3Z42UT2SOFRQDGMC' where id=4; -update noar ti set v0='N3Z42UT2SOFRQDGMC' where id=4; -update noar tt set b2='FLMV1FQD64ILB3I0YELHQSPDAI9P4D5L' where id=4; -update noar ti set b2='FLMV1FQD64ILB3I0YELHQSPDAI9P4D5L' where id=4; -update noar tt set v0='ICLDS9J7TVOZ1' where id=5; -update noar ti set v0='ICLDS9J7TVOZ1' where id=5; -update noar tt set b0='2YGR189L95XJ6TVVLK6MSNI2YYGRL' where id=5; -update noar ti set b0='2YGR189L95XJ6TVVLK6MSNI2YYGRL' where id=5; -update noar tt set v0='YNA9KWNBVFV9I82Q' where id=5; -update noar ti set v0='YNA9KWNBVFV9I82Q' where id=5; -update noar tt set b1='GNOO' where id=5; -update noar ti set b1='GNOO' where id=5; -update noar tt set v0='3PTH' where id=5; -update noar ti set v0='3PTH' where id=5; -update noar tt set b2='NKLRJ6VASBQ' where id=5; -update noar ti set b2='NKLRJ6VASBQ' where id=5; -update noar tt set v0='SX5SX5NVWBO3J380IGRLVCOROGBI4WW' where id=6; -update noar ti set v0='SX5SX5NVWBO3J380IGRLVCOROGBI4WW' where id=6; -update noar tt set b0='B3R0UO2Q2E01PMDF7HZWAU6DKA4' where id=6; -update noar ti set b0='B3R0UO2Q2E01PMDF7HZWAU6DKA4' where id=6; -update noar tt set v0='CR04P4R36D5BQM' where id=6; -update noar ti set v0='CR04P4R36D5BQM' where id=6; -update noar tt set b1='GGIP0U' where id=6; -update noar ti set b1='GGIP0U' where id=6; -update noar tt set v0='CH4HDIAT4GTDC64MQ' where id=6; -update noar ti set v0='CH4HDIAT4GTDC64MQ' where id=6; -update noar tt set b2='FNIBYL9I1S9OXKBFVDO5CXNFEHMC' where id=6; -update noar ti set b2='FNIBYL9I1S9OXKBFVDO5CXNFEHMC' where id=6; -update noar tt set v0='02H' where id=7; -update noar ti set v0='02H' where id=7; -update noar tt set b0='C9E7H5C2EQOT1M' where id=7; -update noar ti set b0='C9E7H5C2EQOT1M' where id=7; -update noar tt set v0='DGFGS07K6DNCPC3MS3R' where id=7; -update noar ti set v0='DGFGS07K6DNCPC3MS3R' where id=7; -update noar tt set b1='Q0XONI3W9' where id=7; -update noar ti set b1='Q0XONI3W9' where id=7; -update noar tt set v0='JLA' where id=7; -update noar ti set v0='JLA' where id=7; -update noar tt set b2='QUTND2Z40XVU6I1374Y7DY4' where id=7; -update noar ti set b2='QUTND2Z40XVU6I1374Y7DY4' where id=7; -update noar tt set v0='8HF' where id=8; -update noar ti set v0='8HF' where id=8; -update noar tt set b0='WORURWAPBVPPGN0NLSM3EL' where id=8; -update noar ti set b0='WORURWAPBVPPGN0NLSM3EL' where id=8; -update noar tt set v0='R39N7LGH4WS7RS9ZUU41JG3' where id=8; -update noar ti set v0='R39N7LGH4WS7RS9ZUU41JG3' where id=8; -update noar tt set b1='WSLC6MIHAXWDH6XOOX1' where id=8; -update noar ti set b1='WSLC6MIHAXWDH6XOOX1' where id=8; -update noar tt set v0='UIVXW' where id=8; -update noar ti set v0='UIVXW' where id=8; -update noar tt set b2='0AS2JR3U946QVNOF9CHDSH1FE7VH' where id=8; -update noar ti set b2='0AS2JR3U946QVNOF9CHDSH1FE7VH' where id=8; -update noar tt set v0='MB75XVQOMALVJ' where id=9; -update noar ti set v0='MB75XVQOMALVJ' where id=9; -update noar tt set b0='2ABLE4QR49JE5JGSOYKXLLH45W' where id=9; -update noar ti set b0='2ABLE4QR49JE5JGSOYKXLLH45W' where id=9; -update noar tt set v0='ICGZHLQCZME9WGX2IEG1J' where id=9; -update noar ti set v0='ICGZHLQCZME9WGX2IEG1J' where id=9; -update noar tt set b1='NHKE4FV419DKF0LRP' where id=9; -update noar ti set b1='NHKE4FV419DKF0LRP' where id=9; -update noar tt set v0='Y276HO0ONEXAVTY' where id=9; -update noar ti set v0='Y276HO0ONEXAVTY' where id=9; -update noar tt set b2='8P6JLX4FO9THEXEKUFG6UUMFWDJZ7DZ8' where id=9; -update noar ti set b2='8P6JLX4FO9THEXEKUFG6UUMFWDJZ7DZ8' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 longblob null, - b1 blob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='L' where id=1; -update noar ti set v0='L' where id=1; -update noar tt set b0='IZDGVD23VNETNGY5XTLCHSPOCD' where id=1; -update noar ti set b0='IZDGVD23VNETNGY5XTLCHSPOCD' where id=1; -update noar tt set v0='UAX9SHXL53IFTHBOF11NIU7VFTQGFLFG' where id=1; -update noar ti set v0='UAX9SHXL53IFTHBOF11NIU7VFTQGFLFG' where id=1; -update noar tt set b1='B8J18ASUR15OQ4T' where id=1; -update noar ti set b1='B8J18ASUR15OQ4T' where id=1; -update noar tt set v0='5RUR2QM26SI' where id=1; -update noar ti set v0='5RUR2QM26SI' where id=1; -update noar tt set b2='8E0EP9Q61EHI5MYY3TJKDG' where id=1; -update noar ti set b2='8E0EP9Q61EHI5MYY3TJKDG' where id=1; -update noar tt set v0='QZYWCD' where id=2; -update noar ti set v0='QZYWCD' where id=2; -update noar tt set b0='BINEM1YJTSUNDCC876' where id=2; -update noar ti set b0='BINEM1YJTSUNDCC876' where id=2; -update noar tt set v0='P' where id=2; -update noar ti set v0='P' where id=2; -update noar tt set b1='7YUUSBRW7A6AT4PW1LX7B03FQ' where id=2; -update noar ti set b1='7YUUSBRW7A6AT4PW1LX7B03FQ' where id=2; -update noar tt set v0='A298' where id=2; -update noar ti set v0='A298' where id=2; -update noar tt set b2='GZYHSDQJQHYALX71VU93L' where id=2; -update noar ti set b2='GZYHSDQJQHYALX71VU93L' where id=2; -update noar tt set v0='D85O7I' where id=3; -update noar ti set v0='D85O7I' where id=3; -update noar tt set b0='CPA8QF9H9UX12KA81' where id=3; -update noar ti set b0='CPA8QF9H9UX12KA81' where id=3; -update noar tt set v0='FICQ84LZJFIP7PYL' where id=3; -update noar ti set v0='FICQ84LZJFIP7PYL' where id=3; -update noar tt set b1='IX3GC' where id=3; -update noar ti set b1='IX3GC' where id=3; -update noar tt set v0='F8BYMYYZK' where id=3; -update noar ti set v0='F8BYMYYZK' where id=3; -update noar tt set b2='DTY2J15TDF6QJ4ASDFHV' where id=3; -update noar ti set b2='DTY2J15TDF6QJ4ASDFHV' where id=3; -update noar tt set v0='JSFK' where id=4; -update noar ti set v0='JSFK' where id=4; -update noar tt set b0='PSGKQCI247AWJF4TYZOCYP2' where id=4; -update noar ti set b0='PSGKQCI247AWJF4TYZOCYP2' where id=4; -update noar tt set v0='CINJSK' where id=4; -update noar ti set v0='CINJSK' where id=4; -update noar tt set b1='71YNP5SHY3ACZ' where id=4; -update noar ti set b1='71YNP5SHY3ACZ' where id=4; -update noar tt set v0='WJ6FJ8ZS0731AKJR6X12SDJY' where id=4; -update noar ti set v0='WJ6FJ8ZS0731AKJR6X12SDJY' where id=4; -update noar tt set b2='RBNY60W2NIO401AZF0JABJS' where id=4; -update noar ti set b2='RBNY60W2NIO401AZF0JABJS' where id=4; -update noar tt set v0='41RSKPVDMZ9TJ2X0Y' where id=5; -update noar ti set v0='41RSKPVDMZ9TJ2X0Y' where id=5; -update noar tt set b0='RST9GQUA12JLRJWYT8SG03' where id=5; -update noar ti set b0='RST9GQUA12JLRJWYT8SG03' where id=5; -update noar tt set v0='SM9M2WFG2UFUPGKQ0BHK28PAVOPMMEDK' where id=5; -update noar ti set v0='SM9M2WFG2UFUPGKQ0BHK28PAVOPMMEDK' where id=5; -update noar tt set b1='JL7D3A5W6DTOSOJT387' where id=5; -update noar ti set b1='JL7D3A5W6DTOSOJT387' where id=5; -update noar tt set v0='G3GRW4A7T7NXYECN9S8' where id=5; -update noar ti set v0='G3GRW4A7T7NXYECN9S8' where id=5; -update noar tt set b2='JP3AP2RV3CHL6NLKH44W' where id=5; -update noar ti set b2='JP3AP2RV3CHL6NLKH44W' where id=5; -update noar tt set v0='HNEGO' where id=6; -update noar ti set v0='HNEGO' where id=6; -update noar tt set b0='U12549GNVN' where id=6; -update noar ti set b0='U12549GNVN' where id=6; -update noar tt set v0='DDL4V8N5D10UKHGOUAU' where id=6; -update noar ti set v0='DDL4V8N5D10UKHGOUAU' where id=6; -update noar tt set b1='B' where id=6; -update noar ti set b1='B' where id=6; -update noar tt set v0='B16NOL74LUGBL13JE9TXN79P64G' where id=6; -update noar ti set v0='B16NOL74LUGBL13JE9TXN79P64G' where id=6; -update noar tt set b2='BBSMZ5LNW9Y01F45U4Y3B3Z1SET8W' where id=6; -update noar ti set b2='BBSMZ5LNW9Y01F45U4Y3B3Z1SET8W' where id=6; -update noar tt set v0='P' where id=7; -update noar ti set v0='P' where id=7; -update noar tt set b0='KB5F87UYEMELU1TV8M6URR' where id=7; -update noar ti set b0='KB5F87UYEMELU1TV8M6URR' where id=7; -update noar tt set v0='VHY5G' where id=7; -update noar ti set v0='VHY5G' where id=7; -update noar tt set b1='XLIK3Q9BEC5CVUVKQEF0' where id=7; -update noar ti set b1='XLIK3Q9BEC5CVUVKQEF0' where id=7; -update noar tt set v0='PGFJOT537HSAX83GK63EIQWD7AFB' where id=7; -update noar ti set v0='PGFJOT537HSAX83GK63EIQWD7AFB' where id=7; -update noar tt set b2='ZGA' where id=7; -update noar ti set b2='ZGA' where id=7; -update noar tt set v0='6FY31V0YF8S9XUBBHQY' where id=8; -update noar ti set v0='6FY31V0YF8S9XUBBHQY' where id=8; -update noar tt set b0='2H6ICYISC3QGBMRQQIDU2Z' where id=8; -update noar ti set b0='2H6ICYISC3QGBMRQQIDU2Z' where id=8; -update noar tt set v0='UMI4K' where id=8; -update noar ti set v0='UMI4K' where id=8; -update noar tt set b1='CF9FSN7IOJ87XMIBTL3E1FQ38Q' where id=8; -update noar ti set b1='CF9FSN7IOJ87XMIBTL3E1FQ38Q' where id=8; -update noar tt set v0='T0IC0011NB' where id=8; -update noar ti set v0='T0IC0011NB' where id=8; -update noar tt set b2='2CLAVM6ICGB6C5GTRN9AHO' where id=8; -update noar ti set b2='2CLAVM6ICGB6C5GTRN9AHO' where id=8; -update noar tt set v0='44YSU3K9RQFOCJO9HDEWVVNA5Z' where id=9; -update noar ti set v0='44YSU3K9RQFOCJO9HDEWVVNA5Z' where id=9; -update noar tt set b0='7Q6D64RGUK3PUY' where id=9; -update noar ti set b0='7Q6D64RGUK3PUY' where id=9; -update noar tt set v0='NZ9IZYIWTQT8XX7EQTGTLO5Z' where id=9; -update noar ti set v0='NZ9IZYIWTQT8XX7EQTGTLO5Z' where id=9; -update noar tt set b1='4' where id=9; -update noar ti set b1='4' where id=9; -update noar tt set v0='QEH2B8FJFGMO4MKY6NL' where id=9; -update noar ti set v0='QEH2B8FJFGMO4MKY6NL' where id=9; -update noar tt set b2='ZU58H9' where id=9; -update noar ti set b2='ZU58H9' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 longblob not null, - b1 blob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='DTMX31LT49' where id=1; -update noar ti set v0='DTMX31LT49' where id=1; -update noar tt set b0='PAIW5VX' where id=1; -update noar ti set b0='PAIW5VX' where id=1; -update noar tt set v0='PQ1P3WOVPOAQ09BNOV6' where id=1; -update noar ti set v0='PQ1P3WOVPOAQ09BNOV6' where id=1; -update noar tt set b1='ZNMM2QH8D3' where id=1; -update noar ti set b1='ZNMM2QH8D3' where id=1; -update noar tt set v0='9' where id=1; -update noar ti set v0='9' where id=1; -update noar tt set b2='21EP4CDRGDO3P4GBDYWQEL' where id=1; -update noar ti set b2='21EP4CDRGDO3P4GBDYWQEL' where id=1; -update noar tt set v0='242U6W' where id=2; -update noar ti set v0='242U6W' where id=2; -update noar tt set b0='QY1GS8DC6G4W4TT4EMY3RP8' where id=2; -update noar ti set b0='QY1GS8DC6G4W4TT4EMY3RP8' where id=2; -update noar tt set v0='UHJMZKTNQYM07TR' where id=2; -update noar ti set v0='UHJMZKTNQYM07TR' where id=2; -update noar tt set b1='M' where id=2; -update noar ti set b1='M' where id=2; -update noar tt set v0='XX7JU2EWQCU' where id=2; -update noar ti set v0='XX7JU2EWQCU' where id=2; -update noar tt set b2='W' where id=2; -update noar ti set b2='W' where id=2; -update noar tt set v0='KK2GTOD6G' where id=3; -update noar ti set v0='KK2GTOD6G' where id=3; -update noar tt set b0='JUDSP5NKRSK57OQBR' where id=3; -update noar ti set b0='JUDSP5NKRSK57OQBR' where id=3; -update noar tt set v0='W66TIBKUX60QL3HOBI0AIFL17NW' where id=3; -update noar ti set v0='W66TIBKUX60QL3HOBI0AIFL17NW' where id=3; -update noar tt set b1='LC6D3Z' where id=3; -update noar ti set b1='LC6D3Z' where id=3; -update noar tt set v0='S708Z4E' where id=3; -update noar ti set v0='S708Z4E' where id=3; -update noar tt set b2='2FFK5' where id=3; -update noar ti set b2='2FFK5' where id=3; -update noar tt set v0='PT22MSDN13S6GE' where id=4; -update noar ti set v0='PT22MSDN13S6GE' where id=4; -update noar tt set b0='4H9DYO3EVGG0ERP5CJZDE91F8UU' where id=4; -update noar ti set b0='4H9DYO3EVGG0ERP5CJZDE91F8UU' where id=4; -update noar tt set v0='26AXFZS49ZF004BMLOGMB4PYNEWHA' where id=4; -update noar ti set v0='26AXFZS49ZF004BMLOGMB4PYNEWHA' where id=4; -update noar tt set b1='OBYGYWZJONTEX8GTDKC' where id=4; -update noar ti set b1='OBYGYWZJONTEX8GTDKC' where id=4; -update noar tt set v0='G9ZLLSPV3YKDQZ1X' where id=4; -update noar ti set v0='G9ZLLSPV3YKDQZ1X' where id=4; -update noar tt set b2='F5P74FRS78K4T1L' where id=4; -update noar ti set b2='F5P74FRS78K4T1L' where id=4; -update noar tt set v0='4T5R' where id=5; -update noar ti set v0='4T5R' where id=5; -update noar tt set b0='E9VY137EVTW8VSAKEENN0K1IPR6N' where id=5; -update noar ti set b0='E9VY137EVTW8VSAKEENN0K1IPR6N' where id=5; -update noar tt set v0='IR24U' where id=5; -update noar ti set v0='IR24U' where id=5; -update noar tt set b1='IFQNUF4Q' where id=5; -update noar ti set b1='IFQNUF4Q' where id=5; -update noar tt set v0='QUJBTXTAUP0YHF5C052RYEY4IN9' where id=5; -update noar ti set v0='QUJBTXTAUP0YHF5C052RYEY4IN9' where id=5; -update noar tt set b2='HHL2R52IHN3JS6FU7LKHB7QOB' where id=5; -update noar ti set b2='HHL2R52IHN3JS6FU7LKHB7QOB' where id=5; -update noar tt set v0='VGR1KV1OMROQ65YSRQYHT6ZVW' where id=6; -update noar ti set v0='VGR1KV1OMROQ65YSRQYHT6ZVW' where id=6; -update noar tt set b0='01O9NBGUVH9WNB4S025B1TZ9I' where id=6; -update noar ti set b0='01O9NBGUVH9WNB4S025B1TZ9I' where id=6; -update noar tt set v0='NU1VRWH1BY3XHQ' where id=6; -update noar ti set v0='NU1VRWH1BY3XHQ' where id=6; -update noar tt set b1='P1PBGYABXMC' where id=6; -update noar ti set b1='P1PBGYABXMC' where id=6; -update noar tt set v0='CDENN3JWMIVNF' where id=6; -update noar ti set v0='CDENN3JWMIVNF' where id=6; -update noar tt set b2='K5CPN6ZZMCF52D13G90' where id=6; -update noar ti set b2='K5CPN6ZZMCF52D13G90' where id=6; -update noar tt set v0='J0U5KLDWT20DX9BW3C1OJ0' where id=7; -update noar ti set v0='J0U5KLDWT20DX9BW3C1OJ0' where id=7; -update noar tt set b0='YVLF' where id=7; -update noar ti set b0='YVLF' where id=7; -update noar tt set v0='OBP0EPIUE8WZLG328CTIL' where id=7; -update noar ti set v0='OBP0EPIUE8WZLG328CTIL' where id=7; -update noar tt set b1='DZZ9MJ2CFU8YOH6FMX1' where id=7; -update noar ti set b1='DZZ9MJ2CFU8YOH6FMX1' where id=7; -update noar tt set v0='B1UU9' where id=7; -update noar ti set v0='B1UU9' where id=7; -update noar tt set b2='JGOJ1O5ESXBEN7QQNWK3K1N0JH' where id=7; -update noar ti set b2='JGOJ1O5ESXBEN7QQNWK3K1N0JH' where id=7; -update noar tt set v0='OOBQJZFN72H9C564B3MH' where id=8; -update noar ti set v0='OOBQJZFN72H9C564B3MH' where id=8; -update noar tt set b0='NZ0GGLHXVCZSCKY660KWQ5' where id=8; -update noar ti set b0='NZ0GGLHXVCZSCKY660KWQ5' where id=8; -update noar tt set v0='PW5E5EGXSO7QD30APF69HG' where id=8; -update noar ti set v0='PW5E5EGXSO7QD30APF69HG' where id=8; -update noar tt set b1='9UEC06C49JBF2399K7WE96UAKHKA' where id=8; -update noar ti set b1='9UEC06C49JBF2399K7WE96UAKHKA' where id=8; -update noar tt set v0='NJ' where id=8; -update noar ti set v0='NJ' where id=8; -update noar tt set b2='N0D1X57S5D38EKVICEQ' where id=8; -update noar ti set b2='N0D1X57S5D38EKVICEQ' where id=8; -update noar tt set v0='QYGRDIB1OK5KQYQL3NMZICWT54MVE645' where id=9; -update noar ti set v0='QYGRDIB1OK5KQYQL3NMZICWT54MVE645' where id=9; -update noar tt set b0='66P8RS0J2' where id=9; -update noar ti set b0='66P8RS0J2' where id=9; -update noar tt set v0='96UZN0ODBV1YIR2YFQUL9EL' where id=9; -update noar ti set v0='96UZN0ODBV1YIR2YFQUL9EL' where id=9; -update noar tt set b1='APCV460NQRTF' where id=9; -update noar ti set b1='APCV460NQRTF' where id=9; -update noar tt set v0='VOA55UOV17DCYAT' where id=9; -update noar ti set v0='VOA55UOV17DCYAT' where id=9; -update noar tt set b2='JCT7W515BQHB7SX9Q2DLDH7310HU' where id=9; -update noar ti set b2='JCT7W515BQHB7SX9Q2DLDH7310HU' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 longblob not null, - b1 blob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='IFHBN69C2W9IH8Q1I5' where id=1; -update noar ti set v0='IFHBN69C2W9IH8Q1I5' where id=1; -update noar tt set b0='K2EZPJMULWBD1Q9HMP' where id=1; -update noar ti set b0='K2EZPJMULWBD1Q9HMP' where id=1; -update noar tt set v0='V0Y' where id=1; -update noar ti set v0='V0Y' where id=1; -update noar tt set b1='FW' where id=1; -update noar ti set b1='FW' where id=1; -update noar tt set v0='1EQFFX4S7WO89IFGGFGTLGL' where id=1; -update noar ti set v0='1EQFFX4S7WO89IFGGFGTLGL' where id=1; -update noar tt set b2='H4P4VTTZZST92I7MAIUOLEFN' where id=1; -update noar ti set b2='H4P4VTTZZST92I7MAIUOLEFN' where id=1; -update noar tt set v0='7J0R6O6D4COSHLQOXTOL' where id=2; -update noar ti set v0='7J0R6O6D4COSHLQOXTOL' where id=2; -update noar tt set b0='756Y' where id=2; -update noar ti set b0='756Y' where id=2; -update noar tt set v0='MWJE44Z' where id=2; -update noar ti set v0='MWJE44Z' where id=2; -update noar tt set b1='RYSNYV4FA96AU' where id=2; -update noar ti set b1='RYSNYV4FA96AU' where id=2; -update noar tt set v0='3HVY' where id=2; -update noar ti set v0='3HVY' where id=2; -update noar tt set b2='54LHL' where id=2; -update noar ti set b2='54LHL' where id=2; -update noar tt set v0='6SUIYDNFL1WLYMEIDOBDXJHX8' where id=3; -update noar ti set v0='6SUIYDNFL1WLYMEIDOBDXJHX8' where id=3; -update noar tt set b0='TQQZ1NG4TZUYPQ4O99TGZGZUV' where id=3; -update noar ti set b0='TQQZ1NG4TZUYPQ4O99TGZGZUV' where id=3; -update noar tt set v0='T2K5EBKLKUMLNNGS' where id=3; -update noar ti set v0='T2K5EBKLKUMLNNGS' where id=3; -update noar tt set b1='6LFQMYZ3I2X' where id=3; -update noar ti set b1='6LFQMYZ3I2X' where id=3; -update noar tt set v0='V7RIZMDYL8UT6731QDD' where id=3; -update noar ti set v0='V7RIZMDYL8UT6731QDD' where id=3; -update noar tt set b2='I' where id=3; -update noar ti set b2='I' where id=3; -update noar tt set v0='7UYA84RHSB7XYZG' where id=4; -update noar ti set v0='7UYA84RHSB7XYZG' where id=4; -update noar tt set b0='IY' where id=4; -update noar ti set b0='IY' where id=4; -update noar tt set v0='FDFY6B' where id=4; -update noar ti set v0='FDFY6B' where id=4; -update noar tt set b1='K4A1DR46UCEKTQD83OILDY' where id=4; -update noar ti set b1='K4A1DR46UCEKTQD83OILDY' where id=4; -update noar tt set v0='0LYV0Y65VWVGJ9EW' where id=4; -update noar ti set v0='0LYV0Y65VWVGJ9EW' where id=4; -update noar tt set b2='BHC6AABZIM' where id=4; -update noar ti set b2='BHC6AABZIM' where id=4; -update noar tt set v0='YUZOM62M3ZD1DKS7YS' where id=5; -update noar ti set v0='YUZOM62M3ZD1DKS7YS' where id=5; -update noar tt set b0='MWKGIRKGIGJHJ6ZEQ0E1Z1GM0' where id=5; -update noar ti set b0='MWKGIRKGIGJHJ6ZEQ0E1Z1GM0' where id=5; -update noar tt set v0='AMG85TBX5SNXT' where id=5; -update noar ti set v0='AMG85TBX5SNXT' where id=5; -update noar tt set b1='LXTBW' where id=5; -update noar ti set b1='LXTBW' where id=5; -update noar tt set v0='PNNQ48WUL9D921YV51XLKDCWN42UYXUD' where id=5; -update noar ti set v0='PNNQ48WUL9D921YV51XLKDCWN42UYXUD' where id=5; -update noar tt set b2='WNXM0XP8NCVBV' where id=5; -update noar ti set b2='WNXM0XP8NCVBV' where id=5; -update noar tt set v0='7P3SMXKNRDE6B43PAZ2QYDY' where id=6; -update noar ti set v0='7P3SMXKNRDE6B43PAZ2QYDY' where id=6; -update noar tt set b0='S3S0BKWUVSVAY55AYVWF9T3D8Y8BGG' where id=6; -update noar ti set b0='S3S0BKWUVSVAY55AYVWF9T3D8Y8BGG' where id=6; -update noar tt set v0='U6L4233IRRA3J2W9GM8NH75KCZ' where id=6; -update noar ti set v0='U6L4233IRRA3J2W9GM8NH75KCZ' where id=6; -update noar tt set b1='6KZ5V5CV3PK3QH6JZO8QVGV59BP' where id=6; -update noar ti set b1='6KZ5V5CV3PK3QH6JZO8QVGV59BP' where id=6; -update noar tt set v0='JSOG8BT7Z7A' where id=6; -update noar ti set v0='JSOG8BT7Z7A' where id=6; -update noar tt set b2='7AXL8J9L411W4W' where id=6; -update noar ti set b2='7AXL8J9L411W4W' where id=6; -update noar tt set v0='VXRGTZGXFOQSGM6WCDUMR3' where id=7; -update noar ti set v0='VXRGTZGXFOQSGM6WCDUMR3' where id=7; -update noar tt set b0='E6N1DZ0HCJN7TWR57ZKUZ29341IEQ' where id=7; -update noar ti set b0='E6N1DZ0HCJN7TWR57ZKUZ29341IEQ' where id=7; -update noar tt set v0='EMNHTOWOPS4RM8KIKV5TQ4LA7U9RDOP9' where id=7; -update noar ti set v0='EMNHTOWOPS4RM8KIKV5TQ4LA7U9RDOP9' where id=7; -update noar tt set b1='Q2CKSPZGM02UOITDSHLFNGZN' where id=7; -update noar ti set b1='Q2CKSPZGM02UOITDSHLFNGZN' where id=7; -update noar tt set v0='5IYW' where id=7; -update noar ti set v0='5IYW' where id=7; -update noar tt set b2='I8OXFV24GB6G' where id=7; -update noar ti set b2='I8OXFV24GB6G' where id=7; -update noar tt set v0='3S60974J' where id=8; -update noar ti set v0='3S60974J' where id=8; -update noar tt set b0='0PII0CSKGOUX9SZ1N319' where id=8; -update noar ti set b0='0PII0CSKGOUX9SZ1N319' where id=8; -update noar tt set v0='Z7TYZQUWV9' where id=8; -update noar ti set v0='Z7TYZQUWV9' where id=8; -update noar tt set b1='P40KW6Y4EGGC0V' where id=8; -update noar ti set b1='P40KW6Y4EGGC0V' where id=8; -update noar tt set v0='2S' where id=8; -update noar ti set v0='2S' where id=8; -update noar tt set b2='HZ8R527GG7982M63' where id=8; -update noar ti set b2='HZ8R527GG7982M63' where id=8; -update noar tt set v0='B16XUAD5I' where id=9; -update noar ti set v0='B16XUAD5I' where id=9; -update noar tt set b0='R' where id=9; -update noar ti set b0='R' where id=9; -update noar tt set v0='CPWNEW3ST3D2' where id=9; -update noar ti set v0='CPWNEW3ST3D2' where id=9; -update noar tt set b1='U0YF3J7V4EM6DL85C3' where id=9; -update noar ti set b1='U0YF3J7V4EM6DL85C3' where id=9; -update noar tt set v0='HX01FHNZ1901HRG49X' where id=9; -update noar ti set v0='HX01FHNZ1901HRG49X' where id=9; -update noar tt set b2='7F9GOYGBGTP031UO19RHET1UFUC1L' where id=9; -update noar ti set b2='7F9GOYGBGTP031UO19RHET1UFUC1L' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 longblob null, - b1 mediumblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='KKG71HYAK6VH4' where id=1; -update noar ti set v0='KKG71HYAK6VH4' where id=1; -update noar tt set b0='7NL8U' where id=1; -update noar ti set b0='7NL8U' where id=1; -update noar tt set v0='K6NK3340PXQHMIGCI66' where id=1; -update noar ti set v0='K6NK3340PXQHMIGCI66' where id=1; -update noar tt set b1='X0E2E7DJ9DU4D084BRA00F9PO3Z9TS' where id=1; -update noar ti set b1='X0E2E7DJ9DU4D084BRA00F9PO3Z9TS' where id=1; -update noar tt set v0='EPNZ8F5KYZQXVTMA' where id=1; -update noar ti set v0='EPNZ8F5KYZQXVTMA' where id=1; -update noar tt set b2='JU91' where id=1; -update noar ti set b2='JU91' where id=1; -update noar tt set v0='1CZK' where id=2; -update noar ti set v0='1CZK' where id=2; -update noar tt set b0='1U4HOMCUNG7FECITNRBWEV049JHEE' where id=2; -update noar ti set b0='1U4HOMCUNG7FECITNRBWEV049JHEE' where id=2; -update noar tt set v0='LONF7ZLFZ11I9I42WBLVEFI09R2I' where id=2; -update noar ti set v0='LONF7ZLFZ11I9I42WBLVEFI09R2I' where id=2; -update noar tt set b1='CT9UF0XFJXDU5HYFG5JK9M' where id=2; -update noar ti set b1='CT9UF0XFJXDU5HYFG5JK9M' where id=2; -update noar tt set v0='04SEPXRP2KX0OJBX5R08W789FH75R' where id=2; -update noar ti set v0='04SEPXRP2KX0OJBX5R08W789FH75R' where id=2; -update noar tt set b2='QRYYAZO4ODLRHL0YKJ' where id=2; -update noar ti set b2='QRYYAZO4ODLRHL0YKJ' where id=2; -update noar tt set v0='C15Q13TVWFIMUCJ3QP122G241OT' where id=3; -update noar ti set v0='C15Q13TVWFIMUCJ3QP122G241OT' where id=3; -update noar tt set b0='BE5YU6UTBNMU' where id=3; -update noar ti set b0='BE5YU6UTBNMU' where id=3; -update noar tt set v0='ZVJEMU6EZN9S0VQINI02J1M1BRE2EPDK' where id=3; -update noar ti set v0='ZVJEMU6EZN9S0VQINI02J1M1BRE2EPDK' where id=3; -update noar tt set b1='TB1RUWW1YNZ6CEMMKM04254EMF14B' where id=3; -update noar ti set b1='TB1RUWW1YNZ6CEMMKM04254EMF14B' where id=3; -update noar tt set v0='LCO31M3M3N588RBRR7BKP0ADLX2U' where id=3; -update noar ti set v0='LCO31M3M3N588RBRR7BKP0ADLX2U' where id=3; -update noar tt set b2='OEZQAOA9VQZ384NH2PM9KH9XHNF' where id=3; -update noar ti set b2='OEZQAOA9VQZ384NH2PM9KH9XHNF' where id=3; -update noar tt set v0='IXAGO2SGMFQBKGK6UMCTRNTFKCCJ8' where id=4; -update noar ti set v0='IXAGO2SGMFQBKGK6UMCTRNTFKCCJ8' where id=4; -update noar tt set b0='GYHL1BJU34B4WE6JR8M7M' where id=4; -update noar ti set b0='GYHL1BJU34B4WE6JR8M7M' where id=4; -update noar tt set v0='AKXGGKICASNTJEZ' where id=4; -update noar ti set v0='AKXGGKICASNTJEZ' where id=4; -update noar tt set b1='8B5JNCBCM2O59V69OV18DNGMP9' where id=4; -update noar ti set b1='8B5JNCBCM2O59V69OV18DNGMP9' where id=4; -update noar tt set v0='J8Q6TD1C7RP2U107XA5' where id=4; -update noar ti set v0='J8Q6TD1C7RP2U107XA5' where id=4; -update noar tt set b2='4H7RUEITVZJHVBLGVXCSOMO53F7LLG' where id=4; -update noar ti set b2='4H7RUEITVZJHVBLGVXCSOMO53F7LLG' where id=4; -update noar tt set v0='8TRLGUPWI3' where id=5; -update noar ti set v0='8TRLGUPWI3' where id=5; -update noar tt set b0='MWS8G1Y2' where id=5; -update noar ti set b0='MWS8G1Y2' where id=5; -update noar tt set v0='W4FFGSYVW45WYPSWEZIUE4PZ7IFGN' where id=5; -update noar ti set v0='W4FFGSYVW45WYPSWEZIUE4PZ7IFGN' where id=5; -update noar tt set b1='W217SSVSLM2R1MRU50MJOPTI6OQ' where id=5; -update noar ti set b1='W217SSVSLM2R1MRU50MJOPTI6OQ' where id=5; -update noar tt set v0='YC00FBB0JF66CCCXX5V8L7OR1' where id=5; -update noar ti set v0='YC00FBB0JF66CCCXX5V8L7OR1' where id=5; -update noar tt set b2='557MUWJP0O83PMQU' where id=5; -update noar ti set b2='557MUWJP0O83PMQU' where id=5; -update noar tt set v0='6AZBII' where id=6; -update noar ti set v0='6AZBII' where id=6; -update noar tt set b0='CH' where id=6; -update noar ti set b0='CH' where id=6; -update noar tt set v0='TDNXQ3XSJRNZMHAIEC6UPMWBRLE05U' where id=6; -update noar ti set v0='TDNXQ3XSJRNZMHAIEC6UPMWBRLE05U' where id=6; -update noar tt set b1='O38TW8PN97HD' where id=6; -update noar ti set b1='O38TW8PN97HD' where id=6; -update noar tt set v0='1M0XYF8A912WNXOKUTMK2G1GM1J' where id=6; -update noar ti set v0='1M0XYF8A912WNXOKUTMK2G1GM1J' where id=6; -update noar tt set b2='VSYZYABAT89SLCDSELCYN8' where id=6; -update noar ti set b2='VSYZYABAT89SLCDSELCYN8' where id=6; -update noar tt set v0='8' where id=7; -update noar ti set v0='8' where id=7; -update noar tt set b0='WF35' where id=7; -update noar ti set b0='WF35' where id=7; -update noar tt set v0='3RN2C3KSOA4EPYYIFIX' where id=7; -update noar ti set v0='3RN2C3KSOA4EPYYIFIX' where id=7; -update noar tt set b1='ZTP75F0LLL3DS57Q8RC9EON' where id=7; -update noar ti set b1='ZTP75F0LLL3DS57Q8RC9EON' where id=7; -update noar tt set v0='HVPK4RS5JD3T49' where id=7; -update noar ti set v0='HVPK4RS5JD3T49' where id=7; -update noar tt set b2='S51AMSCGIVVAYITZUHFPAKT10FA' where id=7; -update noar ti set b2='S51AMSCGIVVAYITZUHFPAKT10FA' where id=7; -update noar tt set v0='E1RNRITTQ5YSTRBG7V78L' where id=8; -update noar ti set v0='E1RNRITTQ5YSTRBG7V78L' where id=8; -update noar tt set b0='LA7' where id=8; -update noar ti set b0='LA7' where id=8; -update noar tt set v0='1BEH' where id=8; -update noar ti set v0='1BEH' where id=8; -update noar tt set b1='UCK8ZHJDJL74ZUKTYLS5' where id=8; -update noar ti set b1='UCK8ZHJDJL74ZUKTYLS5' where id=8; -update noar tt set v0='QQPM3U' where id=8; -update noar ti set v0='QQPM3U' where id=8; -update noar tt set b2='4TCJ' where id=8; -update noar ti set b2='4TCJ' where id=8; -update noar tt set v0='PMGHI89V66IJ' where id=9; -update noar ti set v0='PMGHI89V66IJ' where id=9; -update noar tt set b0='PO35OJSKFGBZMOZH' where id=9; -update noar ti set b0='PO35OJSKFGBZMOZH' where id=9; -update noar tt set v0='2HBC0KY622IQYGZP8ALS3PRRX' where id=9; -update noar ti set v0='2HBC0KY622IQYGZP8ALS3PRRX' where id=9; -update noar tt set b1='ZWYQG68SMETHER41VGT41H9E468YIVN' where id=9; -update noar ti set b1='ZWYQG68SMETHER41VGT41H9E468YIVN' where id=9; -update noar tt set v0='M' where id=9; -update noar ti set v0='M' where id=9; -update noar tt set b2='NP5FWUCRIMC4DNH7RPB4GTCL03PLU5UW' where id=9; -update noar ti set b2='NP5FWUCRIMC4DNH7RPB4GTCL03PLU5UW' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 longblob null, - b1 mediumblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='5HJABLX3Y7MQMAPU2OWCGN8GFTEEYM' where id=1; -update noar ti set v0='5HJABLX3Y7MQMAPU2OWCGN8GFTEEYM' where id=1; -update noar tt set b0='15LBEF35' where id=1; -update noar ti set b0='15LBEF35' where id=1; -update noar tt set v0='ULVX' where id=1; -update noar ti set v0='ULVX' where id=1; -update noar tt set b1='C0PO' where id=1; -update noar ti set b1='C0PO' where id=1; -update noar tt set v0='3' where id=1; -update noar ti set v0='3' where id=1; -update noar tt set b2='681J7U6IQSZ2UPRY' where id=1; -update noar ti set b2='681J7U6IQSZ2UPRY' where id=1; -update noar tt set v0='AISOC' where id=2; -update noar ti set v0='AISOC' where id=2; -update noar tt set b0='GWUH8008KDKY668UAL7XADPA' where id=2; -update noar ti set b0='GWUH8008KDKY668UAL7XADPA' where id=2; -update noar tt set v0='1RN0I8A1XXRDZTPAQD5PK5G76U7J3TZV' where id=2; -update noar ti set v0='1RN0I8A1XXRDZTPAQD5PK5G76U7J3TZV' where id=2; -update noar tt set b1='QFFST3U6W4M7W8CHWE' where id=2; -update noar ti set b1='QFFST3U6W4M7W8CHWE' where id=2; -update noar tt set v0='O9HDG3BFOH' where id=2; -update noar ti set v0='O9HDG3BFOH' where id=2; -update noar tt set b2='B1COOU87L5M55BFKMPE4PDZNEFW5P' where id=2; -update noar ti set b2='B1COOU87L5M55BFKMPE4PDZNEFW5P' where id=2; -update noar tt set v0='M4YWI9TLG2HVBUYJBBGYO' where id=3; -update noar ti set v0='M4YWI9TLG2HVBUYJBBGYO' where id=3; -update noar tt set b0='62BZ4UKSX9' where id=3; -update noar ti set b0='62BZ4UKSX9' where id=3; -update noar tt set v0='1ZNSRP6FMQNYHFV8P' where id=3; -update noar ti set v0='1ZNSRP6FMQNYHFV8P' where id=3; -update noar tt set b1='VK424ARYYBMHWJK0EV8JKRMQ6T2YU8' where id=3; -update noar ti set b1='VK424ARYYBMHWJK0EV8JKRMQ6T2YU8' where id=3; -update noar tt set v0='6ZT2WWXD8MGDTHEE' where id=3; -update noar ti set v0='6ZT2WWXD8MGDTHEE' where id=3; -update noar tt set b2='HWHVNHMQAL54B4FLGZAXWN5THG' where id=3; -update noar ti set b2='HWHVNHMQAL54B4FLGZAXWN5THG' where id=3; -update noar tt set v0='9NQBVBGBHAN090' where id=4; -update noar ti set v0='9NQBVBGBHAN090' where id=4; -update noar tt set b0='PN27FCP2YN7BD5ZIRBZ45SS' where id=4; -update noar ti set b0='PN27FCP2YN7BD5ZIRBZ45SS' where id=4; -update noar tt set v0='OTA' where id=4; -update noar ti set v0='OTA' where id=4; -update noar tt set b1='TU70S6R3M6IDHRHCORFTS6' where id=4; -update noar ti set b1='TU70S6R3M6IDHRHCORFTS6' where id=4; -update noar tt set v0='TQMVKV9OP3AFS5NO8709KUZ1EJ' where id=4; -update noar ti set v0='TQMVKV9OP3AFS5NO8709KUZ1EJ' where id=4; -update noar tt set b2='4HV' where id=4; -update noar ti set b2='4HV' where id=4; -update noar tt set v0='HV33UANAE3KR8EZI460WD2' where id=5; -update noar ti set v0='HV33UANAE3KR8EZI460WD2' where id=5; -update noar tt set b0='GQVKLO6VQG42CD47LL68SLQSXOX60UR' where id=5; -update noar ti set b0='GQVKLO6VQG42CD47LL68SLQSXOX60UR' where id=5; -update noar tt set v0='40K5QSJ' where id=5; -update noar ti set v0='40K5QSJ' where id=5; -update noar tt set b1='JL3WX8LEGQ1ONZT69QIHDLQ5LL' where id=5; -update noar ti set b1='JL3WX8LEGQ1ONZT69QIHDLQ5LL' where id=5; -update noar tt set v0='0LSTCMFPGM51' where id=5; -update noar ti set v0='0LSTCMFPGM51' where id=5; -update noar tt set b2='MX0BFS7BA' where id=5; -update noar ti set b2='MX0BFS7BA' where id=5; -update noar tt set v0='YCG5Z904G9PEEEE' where id=6; -update noar ti set v0='YCG5Z904G9PEEEE' where id=6; -update noar tt set b0='FK8' where id=6; -update noar ti set b0='FK8' where id=6; -update noar tt set v0='1W2IAM53X' where id=6; -update noar ti set v0='1W2IAM53X' where id=6; -update noar tt set b1='5PUKX7ELP2ZA0T11N1AZ6QD7' where id=6; -update noar ti set b1='5PUKX7ELP2ZA0T11N1AZ6QD7' where id=6; -update noar tt set v0='449S1CG59A89YMYXFSHXF6KUGFMV8' where id=6; -update noar ti set v0='449S1CG59A89YMYXFSHXF6KUGFMV8' where id=6; -update noar tt set b2='FVAUG17IK4F5DV0HYLSRD2' where id=6; -update noar ti set b2='FVAUG17IK4F5DV0HYLSRD2' where id=6; -update noar tt set v0='GR7DFFQUPUQGKQ6EXQ8P5VVOFR49NK9O' where id=7; -update noar ti set v0='GR7DFFQUPUQGKQ6EXQ8P5VVOFR49NK9O' where id=7; -update noar tt set b0='PAUXCKPS9BP8SLG39UI8C5' where id=7; -update noar ti set b0='PAUXCKPS9BP8SLG39UI8C5' where id=7; -update noar tt set v0='KV1ADBOZJ13DJQKUMAO3' where id=7; -update noar ti set v0='KV1ADBOZJ13DJQKUMAO3' where id=7; -update noar tt set b1='6X2WO0' where id=7; -update noar ti set b1='6X2WO0' where id=7; -update noar tt set v0='6WNKIIPT89M29CG' where id=7; -update noar ti set v0='6WNKIIPT89M29CG' where id=7; -update noar tt set b2='VHU4MTJIUERQ9Y' where id=7; -update noar ti set b2='VHU4MTJIUERQ9Y' where id=7; -update noar tt set v0='WJIJRUOO5C9616IXN90Y6K0FHKH57H' where id=8; -update noar ti set v0='WJIJRUOO5C9616IXN90Y6K0FHKH57H' where id=8; -update noar tt set b0='2OEFAFFMRP1TWXZWU6L2X7ZHJDIIGFQ' where id=8; -update noar ti set b0='2OEFAFFMRP1TWXZWU6L2X7ZHJDIIGFQ' where id=8; -update noar tt set v0='DNDBTWE9DYO3ZIBH9YIN' where id=8; -update noar ti set v0='DNDBTWE9DYO3ZIBH9YIN' where id=8; -update noar tt set b1='V2B1WA' where id=8; -update noar ti set b1='V2B1WA' where id=8; -update noar tt set v0='8Y7AHSDA2F' where id=8; -update noar ti set v0='8Y7AHSDA2F' where id=8; -update noar tt set b2='BTIIE2VHX43Q7TK5YWER247XXNQ' where id=8; -update noar ti set b2='BTIIE2VHX43Q7TK5YWER247XXNQ' where id=8; -update noar tt set v0='PLDT1PNNR8RJH1HXQVQSJ' where id=9; -update noar ti set v0='PLDT1PNNR8RJH1HXQVQSJ' where id=9; -update noar tt set b0='8FJOI6XSW121Q56SV02HE8L2XEX' where id=9; -update noar ti set b0='8FJOI6XSW121Q56SV02HE8L2XEX' where id=9; -update noar tt set v0='R4MDOOMPUVWFSM2PDSB4AOJVZR7Y' where id=9; -update noar ti set v0='R4MDOOMPUVWFSM2PDSB4AOJVZR7Y' where id=9; -update noar tt set b1='PBTAUBEYQ4J4PCXZQTVA9LAZV19DP3T' where id=9; -update noar ti set b1='PBTAUBEYQ4J4PCXZQTVA9LAZV19DP3T' where id=9; -update noar tt set v0='A3F5ZW201WYLZ1UFFF6KSBJ1C' where id=9; -update noar ti set v0='A3F5ZW201WYLZ1UFFF6KSBJ1C' where id=9; -update noar tt set b2='NMNOLAVSYOIFTUSEIQBWSAOKKAI2R7' where id=9; -update noar ti set b2='NMNOLAVSYOIFTUSEIQBWSAOKKAI2R7' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 longblob not null, - b1 mediumblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='8K7' where id=1; -update noar ti set v0='8K7' where id=1; -update noar tt set b0='YHTFQ5CNLDJ' where id=1; -update noar ti set b0='YHTFQ5CNLDJ' where id=1; -update noar tt set v0='4TQD' where id=1; -update noar ti set v0='4TQD' where id=1; -update noar tt set b1='LPVX1U2IX8JZYAZ6J0DR52BSN6D0' where id=1; -update noar ti set b1='LPVX1U2IX8JZYAZ6J0DR52BSN6D0' where id=1; -update noar tt set v0='PZEDC2A7OCSHSSVWWMJ68X' where id=1; -update noar ti set v0='PZEDC2A7OCSHSSVWWMJ68X' where id=1; -update noar tt set b2='6JXGU' where id=1; -update noar ti set b2='6JXGU' where id=1; -update noar tt set v0='FMY45C6R' where id=2; -update noar ti set v0='FMY45C6R' where id=2; -update noar tt set b0='DZPNU7UOJMRZ32' where id=2; -update noar ti set b0='DZPNU7UOJMRZ32' where id=2; -update noar tt set v0='6O8RKDQ037LS21J2RI0251W3POML' where id=2; -update noar ti set v0='6O8RKDQ037LS21J2RI0251W3POML' where id=2; -update noar tt set b1='2EE7HQ7M0HNS5544HRA' where id=2; -update noar ti set b1='2EE7HQ7M0HNS5544HRA' where id=2; -update noar tt set v0='REX08ZX' where id=2; -update noar ti set v0='REX08ZX' where id=2; -update noar tt set b2='30Y9U53YHCQ3AT2W9RCFZHDZ19W9LL9' where id=2; -update noar ti set b2='30Y9U53YHCQ3AT2W9RCFZHDZ19W9LL9' where id=2; -update noar tt set v0='8N5B0SJ' where id=3; -update noar ti set v0='8N5B0SJ' where id=3; -update noar tt set b0='VFA0U16AIWNPR5QV95CU9UTZ0R4IO7' where id=3; -update noar ti set b0='VFA0U16AIWNPR5QV95CU9UTZ0R4IO7' where id=3; -update noar tt set v0='9J77DG0' where id=3; -update noar ti set v0='9J77DG0' where id=3; -update noar tt set b1='TF2NVS7GN18EZ5OWAIM3APUK7MB' where id=3; -update noar ti set b1='TF2NVS7GN18EZ5OWAIM3APUK7MB' where id=3; -update noar tt set v0='E6EL9QY' where id=3; -update noar ti set v0='E6EL9QY' where id=3; -update noar tt set b2='5L6M2D' where id=3; -update noar ti set b2='5L6M2D' where id=3; -update noar tt set v0='ENJTUAV1MMFBL' where id=4; -update noar ti set v0='ENJTUAV1MMFBL' where id=4; -update noar tt set b0='C8AWSZ7ZXP8KLT9LW' where id=4; -update noar ti set b0='C8AWSZ7ZXP8KLT9LW' where id=4; -update noar tt set v0='2QIPFZ5R8PTEIWJKQZTVLANR6617F' where id=4; -update noar ti set v0='2QIPFZ5R8PTEIWJKQZTVLANR6617F' where id=4; -update noar tt set b1='UKCCS6TX8LHKVKOP' where id=4; -update noar ti set b1='UKCCS6TX8LHKVKOP' where id=4; -update noar tt set v0='4HP1TA9VI4EFFI6YIO' where id=4; -update noar ti set v0='4HP1TA9VI4EFFI6YIO' where id=4; -update noar tt set b2='7PLPI2NWS94829G1RRFCY1BZJ' where id=4; -update noar ti set b2='7PLPI2NWS94829G1RRFCY1BZJ' where id=4; -update noar tt set v0='H2H5FRLZGF70985BKZUWGZ1O' where id=5; -update noar ti set v0='H2H5FRLZGF70985BKZUWGZ1O' where id=5; -update noar tt set b0='LCSXXVOYGW8C6LJDCFV9USHTYAK3' where id=5; -update noar ti set b0='LCSXXVOYGW8C6LJDCFV9USHTYAK3' where id=5; -update noar tt set v0='VSFP3X7QQHR' where id=5; -update noar ti set v0='VSFP3X7QQHR' where id=5; -update noar tt set b1='4YHFHDXFIC6WTY922XM4RJ30Q5' where id=5; -update noar ti set b1='4YHFHDXFIC6WTY922XM4RJ30Q5' where id=5; -update noar tt set v0='SBW8YSE7ZRDVK9RB82' where id=5; -update noar ti set v0='SBW8YSE7ZRDVK9RB82' where id=5; -update noar tt set b2='7D22' where id=5; -update noar ti set b2='7D22' where id=5; -update noar tt set v0='WQ81QM' where id=6; -update noar ti set v0='WQ81QM' where id=6; -update noar tt set b0='K9UK6KJFZFH3PCB' where id=6; -update noar ti set b0='K9UK6KJFZFH3PCB' where id=6; -update noar tt set v0='NVDT6Q9OZ3RK4GNUKO9BPH29ECI' where id=6; -update noar ti set v0='NVDT6Q9OZ3RK4GNUKO9BPH29ECI' where id=6; -update noar tt set b1='9VCDUX8AWVC7H68KNTSB' where id=6; -update noar ti set b1='9VCDUX8AWVC7H68KNTSB' where id=6; -update noar tt set v0='X4JFJIBQL3ADRRF1XT8YATEG9G3A' where id=6; -update noar ti set v0='X4JFJIBQL3ADRRF1XT8YATEG9G3A' where id=6; -update noar tt set b2='LV0A37F8E7UL8F5W' where id=6; -update noar ti set b2='LV0A37F8E7UL8F5W' where id=6; -update noar tt set v0='MBO7HCNVNZ0VE90UOKRRH5Y99DZNAH' where id=7; -update noar ti set v0='MBO7HCNVNZ0VE90UOKRRH5Y99DZNAH' where id=7; -update noar tt set b0='HPTTSUCMR4Z6PIJXFGR4BORBEA' where id=7; -update noar ti set b0='HPTTSUCMR4Z6PIJXFGR4BORBEA' where id=7; -update noar tt set v0='IN8OAYIF999IR9D7GB0B7PFWKE2K' where id=7; -update noar ti set v0='IN8OAYIF999IR9D7GB0B7PFWKE2K' where id=7; -update noar tt set b1='A321KGGFXWBBMBPSU66Y4ZJR5' where id=7; -update noar ti set b1='A321KGGFXWBBMBPSU66Y4ZJR5' where id=7; -update noar tt set v0='RD5RXL7ODA562LG85' where id=7; -update noar ti set v0='RD5RXL7ODA562LG85' where id=7; -update noar tt set b2='TZPS2M4MCY4RB093QLR' where id=7; -update noar ti set b2='TZPS2M4MCY4RB093QLR' where id=7; -update noar tt set v0='AXASNN0FLXEJ5MLG5YNR' where id=8; -update noar ti set v0='AXASNN0FLXEJ5MLG5YNR' where id=8; -update noar tt set b0='59WF0PW7Z5DUB0YTTE' where id=8; -update noar ti set b0='59WF0PW7Z5DUB0YTTE' where id=8; -update noar tt set v0='SYSOURNST5XPY3DSUYCI13Z8UL' where id=8; -update noar ti set v0='SYSOURNST5XPY3DSUYCI13Z8UL' where id=8; -update noar tt set b1='RHRPX9AKWNPYWDV000GCXT3FH' where id=8; -update noar ti set b1='RHRPX9AKWNPYWDV000GCXT3FH' where id=8; -update noar tt set v0='WX1WM9LKY5EETUZQ346W4FLEQK' where id=8; -update noar ti set v0='WX1WM9LKY5EETUZQ346W4FLEQK' where id=8; -update noar tt set b2='4T6PACN' where id=8; -update noar ti set b2='4T6PACN' where id=8; -update noar tt set v0='RDLQO3OBKRW51MPFILQ025QMCL2' where id=9; -update noar ti set v0='RDLQO3OBKRW51MPFILQ025QMCL2' where id=9; -update noar tt set b0='2FZAIMNXGUETJEJNF2VACRW47MDYFCDI' where id=9; -update noar ti set b0='2FZAIMNXGUETJEJNF2VACRW47MDYFCDI' where id=9; -update noar tt set v0='XKTYZ3' where id=9; -update noar ti set v0='XKTYZ3' where id=9; -update noar tt set b1='UQWQQYQ8CIORII8BFNXC' where id=9; -update noar ti set b1='UQWQQYQ8CIORII8BFNXC' where id=9; -update noar tt set v0='H351JDZO1E64OJ1BHJ5268' where id=9; -update noar ti set v0='H351JDZO1E64OJ1BHJ5268' where id=9; -update noar tt set b2='832RSIP315L3HA8' where id=9; -update noar ti set b2='832RSIP315L3HA8' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 longblob not null, - b1 mediumblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='QKEGN3A' where id=1; -update noar ti set v0='QKEGN3A' where id=1; -update noar tt set b0='P8S2QR330UZ1NLL' where id=1; -update noar ti set b0='P8S2QR330UZ1NLL' where id=1; -update noar tt set v0='GQZ55V84' where id=1; -update noar ti set v0='GQZ55V84' where id=1; -update noar tt set b1='WBXM6MDUSOXZDS' where id=1; -update noar ti set b1='WBXM6MDUSOXZDS' where id=1; -update noar tt set v0='1VM3B9ZB1D7GXHP9T8' where id=1; -update noar ti set v0='1VM3B9ZB1D7GXHP9T8' where id=1; -update noar tt set b2='FQYKK87HX' where id=1; -update noar ti set b2='FQYKK87HX' where id=1; -update noar tt set v0='RNUGJXGNGEQ47OPEWZ5JTHAFR8NB9' where id=2; -update noar ti set v0='RNUGJXGNGEQ47OPEWZ5JTHAFR8NB9' where id=2; -update noar tt set b0='YJ2VXB5QI4CI5B9VFZZBTNECJ9HR' where id=2; -update noar ti set b0='YJ2VXB5QI4CI5B9VFZZBTNECJ9HR' where id=2; -update noar tt set v0='971VENWHO77XZ1SXJU8FJI90JB6EN8' where id=2; -update noar ti set v0='971VENWHO77XZ1SXJU8FJI90JB6EN8' where id=2; -update noar tt set b1='OP2A50UYKG0DC3DWVAGPGABL3HF' where id=2; -update noar ti set b1='OP2A50UYKG0DC3DWVAGPGABL3HF' where id=2; -update noar tt set v0='6L83JY7CL1' where id=2; -update noar ti set v0='6L83JY7CL1' where id=2; -update noar tt set b2='CAPR5LBGQ6GR3Q4PMPFU2M' where id=2; -update noar ti set b2='CAPR5LBGQ6GR3Q4PMPFU2M' where id=2; -update noar tt set v0='ZN3XTBLOKGQH6ZSOYMWKIO5HK6ZFHTL' where id=3; -update noar ti set v0='ZN3XTBLOKGQH6ZSOYMWKIO5HK6ZFHTL' where id=3; -update noar tt set b0='E1DRBM7' where id=3; -update noar ti set b0='E1DRBM7' where id=3; -update noar tt set v0='G0WB61PS5Q9ABRG73Y1Q5K01QYMQR3L' where id=3; -update noar ti set v0='G0WB61PS5Q9ABRG73Y1Q5K01QYMQR3L' where id=3; -update noar tt set b1='NVCPKUJEN6EWLNFH56DYG8K477B1LVR5' where id=3; -update noar ti set b1='NVCPKUJEN6EWLNFH56DYG8K477B1LVR5' where id=3; -update noar tt set v0='8NAGYOQ0XMG1YCDUK5T6' where id=3; -update noar ti set v0='8NAGYOQ0XMG1YCDUK5T6' where id=3; -update noar tt set b2='JWTW5FO04EGC2SPB34JP937' where id=3; -update noar ti set b2='JWTW5FO04EGC2SPB34JP937' where id=3; -update noar tt set v0='R4QP0055' where id=4; -update noar ti set v0='R4QP0055' where id=4; -update noar tt set b0='CN5HDFZVI5GYSJPG' where id=4; -update noar ti set b0='CN5HDFZVI5GYSJPG' where id=4; -update noar tt set v0='1UKDNSUCV8Y6RP1BHDYLD' where id=4; -update noar ti set v0='1UKDNSUCV8Y6RP1BHDYLD' where id=4; -update noar tt set b1='PJE2D5WM4' where id=4; -update noar ti set b1='PJE2D5WM4' where id=4; -update noar tt set v0='YHUMXRU0E8MKF28CQLQTQ7JT0552' where id=4; -update noar ti set v0='YHUMXRU0E8MKF28CQLQTQ7JT0552' where id=4; -update noar tt set b2='GQNKU8Z7FYEA9G4N8GOQC8' where id=4; -update noar ti set b2='GQNKU8Z7FYEA9G4N8GOQC8' where id=4; -update noar tt set v0='EXV5K5055PGDE' where id=5; -update noar ti set v0='EXV5K5055PGDE' where id=5; -update noar tt set b0='5X92ZD445CCBCTDZ0WJOGYB8Q6P9KLKX' where id=5; -update noar ti set b0='5X92ZD445CCBCTDZ0WJOGYB8Q6P9KLKX' where id=5; -update noar tt set v0='5IXO279N52YXDZPLJQI4VXFJQKV' where id=5; -update noar ti set v0='5IXO279N52YXDZPLJQI4VXFJQKV' where id=5; -update noar tt set b1='FDIQKTX2G4ZY' where id=5; -update noar ti set b1='FDIQKTX2G4ZY' where id=5; -update noar tt set v0='VUYONOVGKHKRAPSYRLHH' where id=5; -update noar ti set v0='VUYONOVGKHKRAPSYRLHH' where id=5; -update noar tt set b2='RSIFG7AFR' where id=5; -update noar ti set b2='RSIFG7AFR' where id=5; -update noar tt set v0='61S8SGOJLUCS0EOMAWW' where id=6; -update noar ti set v0='61S8SGOJLUCS0EOMAWW' where id=6; -update noar tt set b0='ESG9BM1JTCGRT7091S8OH5' where id=6; -update noar ti set b0='ESG9BM1JTCGRT7091S8OH5' where id=6; -update noar tt set v0='VWJUD7426TAVMH' where id=6; -update noar ti set v0='VWJUD7426TAVMH' where id=6; -update noar tt set b1='HW6JLYDHRCPG2BDVU4Y' where id=6; -update noar ti set b1='HW6JLYDHRCPG2BDVU4Y' where id=6; -update noar tt set v0='264LW3NFCBJ8HCG' where id=6; -update noar ti set v0='264LW3NFCBJ8HCG' where id=6; -update noar tt set b2='57AV' where id=6; -update noar ti set b2='57AV' where id=6; -update noar tt set v0='KLLIBS' where id=7; -update noar ti set v0='KLLIBS' where id=7; -update noar tt set b0='LL7J2W' where id=7; -update noar ti set b0='LL7J2W' where id=7; -update noar tt set v0='B' where id=7; -update noar ti set v0='B' where id=7; -update noar tt set b1='SG0TI8SN9JYJZSSPO' where id=7; -update noar ti set b1='SG0TI8SN9JYJZSSPO' where id=7; -update noar tt set v0='ADFHGID2EXVAJE28ISTDWYEMTK' where id=7; -update noar ti set v0='ADFHGID2EXVAJE28ISTDWYEMTK' where id=7; -update noar tt set b2='1Z5Y' where id=7; -update noar ti set b2='1Z5Y' where id=7; -update noar tt set v0='W' where id=8; -update noar ti set v0='W' where id=8; -update noar tt set b0='T' where id=8; -update noar ti set b0='T' where id=8; -update noar tt set v0='W8BHHA88M80T9' where id=8; -update noar ti set v0='W8BHHA88M80T9' where id=8; -update noar tt set b1='T4XUC7Q9Z7PWBFD61DWMK' where id=8; -update noar ti set b1='T4XUC7Q9Z7PWBFD61DWMK' where id=8; -update noar tt set v0='P5R6S15AJJZ4G' where id=8; -update noar ti set v0='P5R6S15AJJZ4G' where id=8; -update noar tt set b2='4B47OTCK5BX0FQ' where id=8; -update noar ti set b2='4B47OTCK5BX0FQ' where id=8; -update noar tt set v0='R1JA4IW8770G3XN' where id=9; -update noar ti set v0='R1JA4IW8770G3XN' where id=9; -update noar tt set b0='U0E198M5MQYGBDRQFCDJW5KTI0' where id=9; -update noar ti set b0='U0E198M5MQYGBDRQFCDJW5KTI0' where id=9; -update noar tt set v0='KX59YQO5130RP' where id=9; -update noar ti set v0='KX59YQO5130RP' where id=9; -update noar tt set b1='CSBG6JYS' where id=9; -update noar ti set b1='CSBG6JYS' where id=9; -update noar tt set v0='3B7RTVA2VXRR' where id=9; -update noar ti set v0='3B7RTVA2VXRR' where id=9; -update noar tt set b2='6T' where id=9; -update noar ti set b2='6T' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 longblob null, - b1 mediumblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='FT8' where id=1; -update noar ti set v0='FT8' where id=1; -update noar tt set b0='VAENZXPK6O' where id=1; -update noar ti set b0='VAENZXPK6O' where id=1; -update noar tt set v0='POZ88ANNZ2D' where id=1; -update noar ti set v0='POZ88ANNZ2D' where id=1; -update noar tt set b1='NVAZQZOL3FCLFTH7P' where id=1; -update noar ti set b1='NVAZQZOL3FCLFTH7P' where id=1; -update noar tt set v0='Q0PDJQ55ORMBZSGXYHJRGDXL' where id=1; -update noar ti set v0='Q0PDJQ55ORMBZSGXYHJRGDXL' where id=1; -update noar tt set b2='I6W45LDM0593NT' where id=1; -update noar ti set b2='I6W45LDM0593NT' where id=1; -update noar tt set v0='WULPLIRCJQQJYMT' where id=2; -update noar ti set v0='WULPLIRCJQQJYMT' where id=2; -update noar tt set b0='DG' where id=2; -update noar ti set b0='DG' where id=2; -update noar tt set v0='39LEIGUBHIFF2B8IEVDVL5CBVQHWA' where id=2; -update noar ti set v0='39LEIGUBHIFF2B8IEVDVL5CBVQHWA' where id=2; -update noar tt set b1='NWSA44U51BEFY0OAUOFNQH' where id=2; -update noar ti set b1='NWSA44U51BEFY0OAUOFNQH' where id=2; -update noar tt set v0='3OQ02' where id=2; -update noar ti set v0='3OQ02' where id=2; -update noar tt set b2='BKSPK46ZD80J6PJABFHGUY3SSJQ' where id=2; -update noar ti set b2='BKSPK46ZD80J6PJABFHGUY3SSJQ' where id=2; -update noar tt set v0='HVAPLR7RCME647MBTX09MRFI' where id=3; -update noar ti set v0='HVAPLR7RCME647MBTX09MRFI' where id=3; -update noar tt set b0='82F' where id=3; -update noar ti set b0='82F' where id=3; -update noar tt set v0='0FSAXVVNPC95SQPC5V9VBCKLVLLOCX' where id=3; -update noar ti set v0='0FSAXVVNPC95SQPC5V9VBCKLVLLOCX' where id=3; -update noar tt set b1='I0F2EVAPI8LHOL' where id=3; -update noar ti set b1='I0F2EVAPI8LHOL' where id=3; -update noar tt set v0='UDK' where id=3; -update noar ti set v0='UDK' where id=3; -update noar tt set b2='RE4YV8L5Q6QKF0S' where id=3; -update noar ti set b2='RE4YV8L5Q6QKF0S' where id=3; -update noar tt set v0='J' where id=4; -update noar ti set v0='J' where id=4; -update noar tt set b0='U9GTNHFP8D9HPJHVVJCJ57PBA' where id=4; -update noar ti set b0='U9GTNHFP8D9HPJHVVJCJ57PBA' where id=4; -update noar tt set v0='5F7K1UKGLI' where id=4; -update noar ti set v0='5F7K1UKGLI' where id=4; -update noar tt set b1='WQG6RZ946ZB0' where id=4; -update noar ti set b1='WQG6RZ946ZB0' where id=4; -update noar tt set v0='QMSUCJ7LZOTRCW75AYV2' where id=4; -update noar ti set v0='QMSUCJ7LZOTRCW75AYV2' where id=4; -update noar tt set b2='Q0DJAQ608RYJF05Q2TLV0Q6YW7BFU' where id=4; -update noar ti set b2='Q0DJAQ608RYJF05Q2TLV0Q6YW7BFU' where id=4; -update noar tt set v0='G' where id=5; -update noar ti set v0='G' where id=5; -update noar tt set b0='5KU994BHZ5H0G1BS42HR' where id=5; -update noar ti set b0='5KU994BHZ5H0G1BS42HR' where id=5; -update noar tt set v0='4T920MU0HN4O5O8NFQAZOMN2Y' where id=5; -update noar ti set v0='4T920MU0HN4O5O8NFQAZOMN2Y' where id=5; -update noar tt set b1='Z2OURVX9' where id=5; -update noar ti set b1='Z2OURVX9' where id=5; -update noar tt set v0='2V6J2G0N1N6ZQV45TT04PYJDRTV7UEC' where id=5; -update noar ti set v0='2V6J2G0N1N6ZQV45TT04PYJDRTV7UEC' where id=5; -update noar tt set b2='CKO74TCU' where id=5; -update noar ti set b2='CKO74TCU' where id=5; -update noar tt set v0='6IZ0L3J14L866E7GFUSJWFLSJQTROI' where id=6; -update noar ti set v0='6IZ0L3J14L866E7GFUSJWFLSJQTROI' where id=6; -update noar tt set b0='S7CCMHX5X' where id=6; -update noar ti set b0='S7CCMHX5X' where id=6; -update noar tt set v0='T8X0JS3W9OILAZ4G7V8WJEF1QXNZJX' where id=6; -update noar ti set v0='T8X0JS3W9OILAZ4G7V8WJEF1QXNZJX' where id=6; -update noar tt set b1='NBKKR6' where id=6; -update noar ti set b1='NBKKR6' where id=6; -update noar tt set v0='GJ0R78ES7G0ZEZ44D4' where id=6; -update noar ti set v0='GJ0R78ES7G0ZEZ44D4' where id=6; -update noar tt set b2='FVUK89WOO7T3N3C5GK7AK4V133' where id=6; -update noar ti set b2='FVUK89WOO7T3N3C5GK7AK4V133' where id=6; -update noar tt set v0='1RSH3XPQP0TYTVJ2N92YUOTEIK2QOB' where id=7; -update noar ti set v0='1RSH3XPQP0TYTVJ2N92YUOTEIK2QOB' where id=7; -update noar tt set b0='R11ZT3B2' where id=7; -update noar ti set b0='R11ZT3B2' where id=7; -update noar tt set v0='VCOBT9ECGMQNNUWS6S' where id=7; -update noar ti set v0='VCOBT9ECGMQNNUWS6S' where id=7; -update noar tt set b1='9NXOAVIAI0U7OT' where id=7; -update noar ti set b1='9NXOAVIAI0U7OT' where id=7; -update noar tt set v0='DTGTWZTK1GMNYH4EB6X8SMSWP28EFUKG' where id=7; -update noar ti set v0='DTGTWZTK1GMNYH4EB6X8SMSWP28EFUKG' where id=7; -update noar tt set b2='U' where id=7; -update noar ti set b2='U' where id=7; -update noar tt set v0='5XZ6FWRJ5P43EMLMD6' where id=8; -update noar ti set v0='5XZ6FWRJ5P43EMLMD6' where id=8; -update noar tt set b0='X' where id=8; -update noar ti set b0='X' where id=8; -update noar tt set v0='DMHVL7SHYJADINV' where id=8; -update noar ti set v0='DMHVL7SHYJADINV' where id=8; -update noar tt set b1='LGBH1UZBRYWYZWV5U8YGO' where id=8; -update noar ti set b1='LGBH1UZBRYWYZWV5U8YGO' where id=8; -update noar tt set v0='6XPNWI4MTS31HCW1FQWHI1S05YSD' where id=8; -update noar ti set v0='6XPNWI4MTS31HCW1FQWHI1S05YSD' where id=8; -update noar tt set b2='4O6W1246AHR3ZJSYSTE25YML3CS7W635' where id=8; -update noar ti set b2='4O6W1246AHR3ZJSYSTE25YML3CS7W635' where id=8; -update noar tt set v0='JCL6BMQ96LMYV5' where id=9; -update noar ti set v0='JCL6BMQ96LMYV5' where id=9; -update noar tt set b0='H0G31IKJRM7ZAWQEIXD' where id=9; -update noar ti set b0='H0G31IKJRM7ZAWQEIXD' where id=9; -update noar tt set v0='EF89U9AM4NSCDYN' where id=9; -update noar ti set v0='EF89U9AM4NSCDYN' where id=9; -update noar tt set b1='97K4W4SVM86MJ60X' where id=9; -update noar ti set b1='97K4W4SVM86MJ60X' where id=9; -update noar tt set v0='XVKM0Q9' where id=9; -update noar ti set v0='XVKM0Q9' where id=9; -update noar tt set b2='FLYYHT23YJ4S236I5V5RNQXR' where id=9; -update noar ti set b2='FLYYHT23YJ4S236I5V5RNQXR' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 longblob null, - b1 mediumblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='DPBVHLPKWMWULUJG' where id=1; -update noar ti set v0='DPBVHLPKWMWULUJG' where id=1; -update noar tt set b0='JLRR6KMZKYE14QLM3C' where id=1; -update noar ti set b0='JLRR6KMZKYE14QLM3C' where id=1; -update noar tt set v0='J9ZHH2M3RDH7RPATB0BQQSS1D10L' where id=1; -update noar ti set v0='J9ZHH2M3RDH7RPATB0BQQSS1D10L' where id=1; -update noar tt set b1='BE643WDQVTNJ05CZTK4' where id=1; -update noar ti set b1='BE643WDQVTNJ05CZTK4' where id=1; -update noar tt set v0='OGR24I' where id=1; -update noar ti set v0='OGR24I' where id=1; -update noar tt set b2='ASHKPG' where id=1; -update noar ti set b2='ASHKPG' where id=1; -update noar tt set v0='PY' where id=2; -update noar ti set v0='PY' where id=2; -update noar tt set b0='VZO6ZU3COBPXOLQG2VJIEG' where id=2; -update noar ti set b0='VZO6ZU3COBPXOLQG2VJIEG' where id=2; -update noar tt set v0='AF' where id=2; -update noar ti set v0='AF' where id=2; -update noar tt set b1='YP' where id=2; -update noar ti set b1='YP' where id=2; -update noar tt set v0='S1' where id=2; -update noar ti set v0='S1' where id=2; -update noar tt set b2='KRNT33UF877E8D66TU02NNRXY' where id=2; -update noar ti set b2='KRNT33UF877E8D66TU02NNRXY' where id=2; -update noar tt set v0='VSJGHLTY8' where id=3; -update noar ti set v0='VSJGHLTY8' where id=3; -update noar tt set b0='T07R29PLQL5MMX' where id=3; -update noar ti set b0='T07R29PLQL5MMX' where id=3; -update noar tt set v0='MEMFPA6F3U56FIAO' where id=3; -update noar ti set v0='MEMFPA6F3U56FIAO' where id=3; -update noar tt set b1='PER5TPZHMPF2UYTHFQ5AR0JX7HNBXKW4' where id=3; -update noar ti set b1='PER5TPZHMPF2UYTHFQ5AR0JX7HNBXKW4' where id=3; -update noar tt set v0='5R' where id=3; -update noar ti set v0='5R' where id=3; -update noar tt set b2='ZZ05G9JJ5M3HOGOEVJZOYW2' where id=3; -update noar ti set b2='ZZ05G9JJ5M3HOGOEVJZOYW2' where id=3; -update noar tt set v0='NH0XB' where id=4; -update noar ti set v0='NH0XB' where id=4; -update noar tt set b0='YZX9AKNHMTFL0JVYL3V4R' where id=4; -update noar ti set b0='YZX9AKNHMTFL0JVYL3V4R' where id=4; -update noar tt set v0='9P9RKH2Y85FEVODV10D727F' where id=4; -update noar ti set v0='9P9RKH2Y85FEVODV10D727F' where id=4; -update noar tt set b1='ZJTGIRV9OTBWW8A430TNJM9XOUF' where id=4; -update noar ti set b1='ZJTGIRV9OTBWW8A430TNJM9XOUF' where id=4; -update noar tt set v0='70U3RQ49YBC1Z' where id=4; -update noar ti set v0='70U3RQ49YBC1Z' where id=4; -update noar tt set b2='CQ9FB0VF6K1AIAUIX6YKFR9' where id=4; -update noar ti set b2='CQ9FB0VF6K1AIAUIX6YKFR9' where id=4; -update noar tt set v0='VJIZQR' where id=5; -update noar ti set v0='VJIZQR' where id=5; -update noar tt set b0='29TMBR5JL0OY77U6NY2K1IJ6SGU' where id=5; -update noar ti set b0='29TMBR5JL0OY77U6NY2K1IJ6SGU' where id=5; -update noar tt set v0='47F8XGW8YJD0EQC1KFG4NFZ9IECNWJ' where id=5; -update noar ti set v0='47F8XGW8YJD0EQC1KFG4NFZ9IECNWJ' where id=5; -update noar tt set b1='8WW3AAJD04B3BXCG' where id=5; -update noar ti set b1='8WW3AAJD04B3BXCG' where id=5; -update noar tt set v0='DZO5UHVKBCY2YX' where id=5; -update noar ti set v0='DZO5UHVKBCY2YX' where id=5; -update noar tt set b2='JPVKJM4JQ36621PSV2PLSYTL9' where id=5; -update noar ti set b2='JPVKJM4JQ36621PSV2PLSYTL9' where id=5; -update noar tt set v0='IWU4TOJT3HJYXSX5TE3DPOM401E' where id=6; -update noar ti set v0='IWU4TOJT3HJYXSX5TE3DPOM401E' where id=6; -update noar tt set b0='V8AYYCP2B8D658V5BQY2XIDI6' where id=6; -update noar ti set b0='V8AYYCP2B8D658V5BQY2XIDI6' where id=6; -update noar tt set v0='KZ2' where id=6; -update noar ti set v0='KZ2' where id=6; -update noar tt set b1='Q38Q533JRLU12BMG73V6NP' where id=6; -update noar ti set b1='Q38Q533JRLU12BMG73V6NP' where id=6; -update noar tt set v0='MIP3EAAH4' where id=6; -update noar ti set v0='MIP3EAAH4' where id=6; -update noar tt set b2='3RO9JWRVN140L' where id=6; -update noar ti set b2='3RO9JWRVN140L' where id=6; -update noar tt set v0='M06FWZ7NCZSFI' where id=7; -update noar ti set v0='M06FWZ7NCZSFI' where id=7; -update noar tt set b0='I1' where id=7; -update noar ti set b0='I1' where id=7; -update noar tt set v0='KKD8J8QG' where id=7; -update noar ti set v0='KKD8J8QG' where id=7; -update noar tt set b1='BRI0QXX5BJYO6LT9D0TFX2VZDPZ4QD' where id=7; -update noar ti set b1='BRI0QXX5BJYO6LT9D0TFX2VZDPZ4QD' where id=7; -update noar tt set v0='GI4ULG5OX0UMGQ89W7ZTFPRLWGVT3' where id=7; -update noar ti set v0='GI4ULG5OX0UMGQ89W7ZTFPRLWGVT3' where id=7; -update noar tt set b2='6MSCEY7O2KVI8RAU09QQVG7HWFT' where id=7; -update noar ti set b2='6MSCEY7O2KVI8RAU09QQVG7HWFT' where id=7; -update noar tt set v0='UFN199EXA4BGPML' where id=8; -update noar ti set v0='UFN199EXA4BGPML' where id=8; -update noar tt set b0='DGI7MQXFOAZJARDUC2EFT' where id=8; -update noar ti set b0='DGI7MQXFOAZJARDUC2EFT' where id=8; -update noar tt set v0='BGU' where id=8; -update noar ti set v0='BGU' where id=8; -update noar tt set b1='KKW8BEMYDAQBP1JCN' where id=8; -update noar ti set b1='KKW8BEMYDAQBP1JCN' where id=8; -update noar tt set v0='YNG3VJZUJCA' where id=8; -update noar ti set v0='YNG3VJZUJCA' where id=8; -update noar tt set b2='L' where id=8; -update noar ti set b2='L' where id=8; -update noar tt set v0='MINRP' where id=9; -update noar ti set v0='MINRP' where id=9; -update noar tt set b0='506LVCZ' where id=9; -update noar ti set b0='506LVCZ' where id=9; -update noar tt set v0='MMXHLKXDM' where id=9; -update noar ti set v0='MMXHLKXDM' where id=9; -update noar tt set b1='QDHBE755V3W9A73TVKE' where id=9; -update noar ti set b1='QDHBE755V3W9A73TVKE' where id=9; -update noar tt set v0='VWVR8L3ZF1JMADSDUF2' where id=9; -update noar ti set v0='VWVR8L3ZF1JMADSDUF2' where id=9; -update noar tt set b2='6AICB3TQLAHVJ' where id=9; -update noar ti set b2='6AICB3TQLAHVJ' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 longblob not null, - b1 mediumblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='0AL83Q2S5J81R' where id=1; -update noar ti set v0='0AL83Q2S5J81R' where id=1; -update noar tt set b0='TIFCWHGSX' where id=1; -update noar ti set b0='TIFCWHGSX' where id=1; -update noar tt set v0='X3' where id=1; -update noar ti set v0='X3' where id=1; -update noar tt set b1='LMWQ5YYOXY1JG6D4JUPHKI9JAEXPFGK' where id=1; -update noar ti set b1='LMWQ5YYOXY1JG6D4JUPHKI9JAEXPFGK' where id=1; -update noar tt set v0='UWR' where id=1; -update noar ti set v0='UWR' where id=1; -update noar tt set b2='S2F78TIABEB8F4F92' where id=1; -update noar ti set b2='S2F78TIABEB8F4F92' where id=1; -update noar tt set v0='2KDUHNXJRUY2' where id=2; -update noar ti set v0='2KDUHNXJRUY2' where id=2; -update noar tt set b0='GI00LGX32WB' where id=2; -update noar ti set b0='GI00LGX32WB' where id=2; -update noar tt set v0='8IJPQB5QY62V30QNP' where id=2; -update noar ti set v0='8IJPQB5QY62V30QNP' where id=2; -update noar tt set b1='YBPBGZQRFF1R0VLQTN6FO0' where id=2; -update noar ti set b1='YBPBGZQRFF1R0VLQTN6FO0' where id=2; -update noar tt set v0='GT2NMHWCMJA1SPK1R2OBX9' where id=2; -update noar ti set v0='GT2NMHWCMJA1SPK1R2OBX9' where id=2; -update noar tt set b2='CBUJW6RBNX8BWYCCE75ZSDP7TC8NFKB' where id=2; -update noar ti set b2='CBUJW6RBNX8BWYCCE75ZSDP7TC8NFKB' where id=2; -update noar tt set v0='6VQ3MVYTKB1POM8ELRA983LI' where id=3; -update noar ti set v0='6VQ3MVYTKB1POM8ELRA983LI' where id=3; -update noar tt set b0='ERI1I5Z8ZEF2BPD8VDETD9NN28BX' where id=3; -update noar ti set b0='ERI1I5Z8ZEF2BPD8VDETD9NN28BX' where id=3; -update noar tt set v0='D2CTCQV' where id=3; -update noar ti set v0='D2CTCQV' where id=3; -update noar tt set b1='0YVH37BRDL74OFXJL4CGQYYJI6I2' where id=3; -update noar ti set b1='0YVH37BRDL74OFXJL4CGQYYJI6I2' where id=3; -update noar tt set v0='UFPM3BZ1L39KCUV4EMEU' where id=3; -update noar ti set v0='UFPM3BZ1L39KCUV4EMEU' where id=3; -update noar tt set b2='WRCP9DBQKMGQZSE2PV5A5UN19UHXL' where id=3; -update noar ti set b2='WRCP9DBQKMGQZSE2PV5A5UN19UHXL' where id=3; -update noar tt set v0='YW9Y2' where id=4; -update noar ti set v0='YW9Y2' where id=4; -update noar tt set b0='S66AEROOH4IV9' where id=4; -update noar ti set b0='S66AEROOH4IV9' where id=4; -update noar tt set v0='DXEXU3A3GBUBLBKLQKUPFLSOY8AKBKVV' where id=4; -update noar ti set v0='DXEXU3A3GBUBLBKLQKUPFLSOY8AKBKVV' where id=4; -update noar tt set b1='366U66S2T9JNP' where id=4; -update noar ti set b1='366U66S2T9JNP' where id=4; -update noar tt set v0='HCR64N1CT12T8XUPGETMYTPOPLB' where id=4; -update noar ti set v0='HCR64N1CT12T8XUPGETMYTPOPLB' where id=4; -update noar tt set b2='O5BJD1RXAE7YC03T5' where id=4; -update noar ti set b2='O5BJD1RXAE7YC03T5' where id=4; -update noar tt set v0='Q4XSM6EDTJC' where id=5; -update noar ti set v0='Q4XSM6EDTJC' where id=5; -update noar tt set b0='IT72' where id=5; -update noar ti set b0='IT72' where id=5; -update noar tt set v0='N7AS66FIASORGQW3DSYZF4M9ZZVO4' where id=5; -update noar ti set v0='N7AS66FIASORGQW3DSYZF4M9ZZVO4' where id=5; -update noar tt set b1='SR0RDFEJYDVJ36X047H5ML' where id=5; -update noar ti set b1='SR0RDFEJYDVJ36X047H5ML' where id=5; -update noar tt set v0='38G7' where id=5; -update noar ti set v0='38G7' where id=5; -update noar tt set b2='F8IC8EKXZVVGG3WBDXP' where id=5; -update noar ti set b2='F8IC8EKXZVVGG3WBDXP' where id=5; -update noar tt set v0='CTK5UK51O' where id=6; -update noar ti set v0='CTK5UK51O' where id=6; -update noar tt set b0='L1P6AYNNZ8FJ' where id=6; -update noar ti set b0='L1P6AYNNZ8FJ' where id=6; -update noar tt set v0='8P1C8AYNRHQRYCGV06CA9GH64X53F' where id=6; -update noar ti set v0='8P1C8AYNRHQRYCGV06CA9GH64X53F' where id=6; -update noar tt set b1='FPHV49XBPAUG' where id=6; -update noar ti set b1='FPHV49XBPAUG' where id=6; -update noar tt set v0='EV6MQJQCP' where id=6; -update noar ti set v0='EV6MQJQCP' where id=6; -update noar tt set b2='TCD7BHFAEX3V8ULH0I' where id=6; -update noar ti set b2='TCD7BHFAEX3V8ULH0I' where id=6; -update noar tt set v0='8SBDXZHEIZXXZWRODV' where id=7; -update noar ti set v0='8SBDXZHEIZXXZWRODV' where id=7; -update noar tt set b0='DNEDD7U3J8E2' where id=7; -update noar ti set b0='DNEDD7U3J8E2' where id=7; -update noar tt set v0='QLM0PKRSHEWD97V4W0980N0' where id=7; -update noar ti set v0='QLM0PKRSHEWD97V4W0980N0' where id=7; -update noar tt set b1='M12ABZP9XTESDPLMP4C3EJH6' where id=7; -update noar ti set b1='M12ABZP9XTESDPLMP4C3EJH6' where id=7; -update noar tt set v0='TJG7FYG2' where id=7; -update noar ti set v0='TJG7FYG2' where id=7; -update noar tt set b2='XJ77US2RX27X13UP2XNVQ9' where id=7; -update noar ti set b2='XJ77US2RX27X13UP2XNVQ9' where id=7; -update noar tt set v0='09WEKFIFA4A89NT5G6CS5BMNXYDP61B' where id=8; -update noar ti set v0='09WEKFIFA4A89NT5G6CS5BMNXYDP61B' where id=8; -update noar tt set b0='SFSJ7OK0IDVR929EN6ARE1OZ66GZRR8M' where id=8; -update noar ti set b0='SFSJ7OK0IDVR929EN6ARE1OZ66GZRR8M' where id=8; -update noar tt set v0='TP3VBDMNWLHIB4L9JRGDZ4DIDF9S' where id=8; -update noar ti set v0='TP3VBDMNWLHIB4L9JRGDZ4DIDF9S' where id=8; -update noar tt set b1='B584ISQ609ZZT0XOESRNZY985J' where id=8; -update noar ti set b1='B584ISQ609ZZT0XOESRNZY985J' where id=8; -update noar tt set v0='2A7JLBC66U7M2XKQH' where id=8; -update noar ti set v0='2A7JLBC66U7M2XKQH' where id=8; -update noar tt set b2='68ZZQ' where id=8; -update noar ti set b2='68ZZQ' where id=8; -update noar tt set v0='ZG2AUMEYP84C10E84JLRHMI7YCOZO7FK' where id=9; -update noar ti set v0='ZG2AUMEYP84C10E84JLRHMI7YCOZO7FK' where id=9; -update noar tt set b0='PUJFIX793HCU' where id=9; -update noar ti set b0='PUJFIX793HCU' where id=9; -update noar tt set v0='F621WRGT4TP49E9YKVFCRG85UMJ0F' where id=9; -update noar ti set v0='F621WRGT4TP49E9YKVFCRG85UMJ0F' where id=9; -update noar tt set b1='V516HJNAMD0I42VD0AUN0H7VSDPLWZU6' where id=9; -update noar ti set b1='V516HJNAMD0I42VD0AUN0H7VSDPLWZU6' where id=9; -update noar tt set v0='IQD' where id=9; -update noar ti set v0='IQD' where id=9; -update noar tt set b2='8NUK3TXA846PXVBDF8Q9I5NWEEJ' where id=9; -update noar ti set b2='8NUK3TXA846PXVBDF8Q9I5NWEEJ' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 longblob not null, - b1 mediumblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='FME77XFX8HT' where id=1; -update noar ti set v0='FME77XFX8HT' where id=1; -update noar tt set b0='7YDHKFEIYB5CB24KV9PXDIRU9WCDZ9CQ' where id=1; -update noar ti set b0='7YDHKFEIYB5CB24KV9PXDIRU9WCDZ9CQ' where id=1; -update noar tt set v0='M3LZN8GQH98FM' where id=1; -update noar ti set v0='M3LZN8GQH98FM' where id=1; -update noar tt set b1='4P9VBC31GLFT' where id=1; -update noar ti set b1='4P9VBC31GLFT' where id=1; -update noar tt set v0='DEUK' where id=1; -update noar ti set v0='DEUK' where id=1; -update noar tt set b2='FNLX15HDQK' where id=1; -update noar ti set b2='FNLX15HDQK' where id=1; -update noar tt set v0='30A8KSEINAA9K' where id=2; -update noar ti set v0='30A8KSEINAA9K' where id=2; -update noar tt set b0='19Y4BUYPQORPRY36' where id=2; -update noar ti set b0='19Y4BUYPQORPRY36' where id=2; -update noar tt set v0='ANLTWPN5J4YHSA26MRYUCCTZ90DV' where id=2; -update noar ti set v0='ANLTWPN5J4YHSA26MRYUCCTZ90DV' where id=2; -update noar tt set b1='N87HND4V6Q4' where id=2; -update noar ti set b1='N87HND4V6Q4' where id=2; -update noar tt set v0='R7PYFPMJJ5G66E4Z2' where id=2; -update noar ti set v0='R7PYFPMJJ5G66E4Z2' where id=2; -update noar tt set b2='EGNRYF5AEZ0YDD' where id=2; -update noar ti set b2='EGNRYF5AEZ0YDD' where id=2; -update noar tt set v0='TVTV64N350LF5MPMIXNVEJ75' where id=3; -update noar ti set v0='TVTV64N350LF5MPMIXNVEJ75' where id=3; -update noar tt set b0='H4CBMCNTU' where id=3; -update noar ti set b0='H4CBMCNTU' where id=3; -update noar tt set v0='NN' where id=3; -update noar ti set v0='NN' where id=3; -update noar tt set b1='0GX2XQL4SHH' where id=3; -update noar ti set b1='0GX2XQL4SHH' where id=3; -update noar tt set v0='WSZR2498E3MCXLGVLAHME5QC0T1' where id=3; -update noar ti set v0='WSZR2498E3MCXLGVLAHME5QC0T1' where id=3; -update noar tt set b2='0GSN12RLPSONISN1U' where id=3; -update noar ti set b2='0GSN12RLPSONISN1U' where id=3; -update noar tt set v0='SNNDVAJT2CMC009OSE' where id=4; -update noar ti set v0='SNNDVAJT2CMC009OSE' where id=4; -update noar tt set b0='QZIQNF6XMO9B7GBHDC39Y77' where id=4; -update noar ti set b0='QZIQNF6XMO9B7GBHDC39Y77' where id=4; -update noar tt set v0='7VFGU17XSOYWXOKODDD8C3KXAF1' where id=4; -update noar ti set v0='7VFGU17XSOYWXOKODDD8C3KXAF1' where id=4; -update noar tt set b1='GTK3HFPND' where id=4; -update noar ti set b1='GTK3HFPND' where id=4; -update noar tt set v0='C8L65XAHG' where id=4; -update noar ti set v0='C8L65XAHG' where id=4; -update noar tt set b2='LJS387EZC1YMQV1FYMYA4XUK0HWGAAKR' where id=4; -update noar ti set b2='LJS387EZC1YMQV1FYMYA4XUK0HWGAAKR' where id=4; -update noar tt set v0='J' where id=5; -update noar ti set v0='J' where id=5; -update noar tt set b0='PEEAU5N47WR' where id=5; -update noar ti set b0='PEEAU5N47WR' where id=5; -update noar tt set v0='1Z738TO6E7' where id=5; -update noar ti set v0='1Z738TO6E7' where id=5; -update noar tt set b1='S74DYHAUSA97NWRXM5T2JLANLJT7GMS' where id=5; -update noar ti set b1='S74DYHAUSA97NWRXM5T2JLANLJT7GMS' where id=5; -update noar tt set v0='SEBBBYRQKOJ49O5WH' where id=5; -update noar ti set v0='SEBBBYRQKOJ49O5WH' where id=5; -update noar tt set b2='2OTVKSVF322JN' where id=5; -update noar ti set b2='2OTVKSVF322JN' where id=5; -update noar tt set v0='91K2WCPVHJEBNOOTMII85P149J5RU' where id=6; -update noar ti set v0='91K2WCPVHJEBNOOTMII85P149J5RU' where id=6; -update noar tt set b0='K58DLLPGH2X9I7USC15VVC' where id=6; -update noar ti set b0='K58DLLPGH2X9I7USC15VVC' where id=6; -update noar tt set v0='HU6ZB1HYH73YHL' where id=6; -update noar ti set v0='HU6ZB1HYH73YHL' where id=6; -update noar tt set b1='S5K5X0G3DA99IPS5HDWUHO5CUBFDZV' where id=6; -update noar ti set b1='S5K5X0G3DA99IPS5HDWUHO5CUBFDZV' where id=6; -update noar tt set v0='MV3OLMODIPFIVUSJVBQG' where id=6; -update noar ti set v0='MV3OLMODIPFIVUSJVBQG' where id=6; -update noar tt set b2='EZQ9GRFZUJP67GJ1SS8VXQGQO64' where id=6; -update noar ti set b2='EZQ9GRFZUJP67GJ1SS8VXQGQO64' where id=6; -update noar tt set v0='K3KMHHZEQS9HN1' where id=7; -update noar ti set v0='K3KMHHZEQS9HN1' where id=7; -update noar tt set b0='K251SWEDZDSL79' where id=7; -update noar ti set b0='K251SWEDZDSL79' where id=7; -update noar tt set v0='XO7M' where id=7; -update noar ti set v0='XO7M' where id=7; -update noar tt set b1='UMBDSPYMBHVHB3EI3' where id=7; -update noar ti set b1='UMBDSPYMBHVHB3EI3' where id=7; -update noar tt set v0='ZPWUCVI7VIT' where id=7; -update noar ti set v0='ZPWUCVI7VIT' where id=7; -update noar tt set b2='RKEU' where id=7; -update noar ti set b2='RKEU' where id=7; -update noar tt set v0='GJ1GV1DF' where id=8; -update noar ti set v0='GJ1GV1DF' where id=8; -update noar tt set b0='G8TT460BFZ6C3OZ0QAZH7PIS5J4V' where id=8; -update noar ti set b0='G8TT460BFZ6C3OZ0QAZH7PIS5J4V' where id=8; -update noar tt set v0='41MJM605CH4EWX373399TOA272CP' where id=8; -update noar ti set v0='41MJM605CH4EWX373399TOA272CP' where id=8; -update noar tt set b1='1RHPS5FOUBYVPAEC79D' where id=8; -update noar ti set b1='1RHPS5FOUBYVPAEC79D' where id=8; -update noar tt set v0='TGJZQ8CTPAER55BHD2S' where id=8; -update noar ti set v0='TGJZQ8CTPAER55BHD2S' where id=8; -update noar tt set b2='MFZA7IQPA4KGWU972E' where id=8; -update noar ti set b2='MFZA7IQPA4KGWU972E' where id=8; -update noar tt set v0='JTO1Y630JQHY2J9ATLR8LR8FOOC4LN9' where id=9; -update noar ti set v0='JTO1Y630JQHY2J9ATLR8LR8FOOC4LN9' where id=9; -update noar tt set b0='UCBC95REM4' where id=9; -update noar ti set b0='UCBC95REM4' where id=9; -update noar tt set v0='H8VW26' where id=9; -update noar ti set v0='H8VW26' where id=9; -update noar tt set b1='IW5X02RZ9NWCL3KLIQ0T9H' where id=9; -update noar ti set b1='IW5X02RZ9NWCL3KLIQ0T9H' where id=9; -update noar tt set v0='9V1MX0SZ00QXS' where id=9; -update noar ti set v0='9V1MX0SZ00QXS' where id=9; -update noar tt set b2='D9E15RPWMKOPTMQC' where id=9; -update noar ti set b2='D9E15RPWMKOPTMQC' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 longblob null, - b1 mediumblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='SJBTJFBY' where id=1; -update noar ti set v0='SJBTJFBY' where id=1; -update noar tt set b0='2P0BD7V89' where id=1; -update noar ti set b0='2P0BD7V89' where id=1; -update noar tt set v0='6DK7PVS' where id=1; -update noar ti set v0='6DK7PVS' where id=1; -update noar tt set b1='3EDI' where id=1; -update noar ti set b1='3EDI' where id=1; -update noar tt set v0='8RF' where id=1; -update noar ti set v0='8RF' where id=1; -update noar tt set b2='WPD24ZNHA55SRT93AD066DBNW' where id=1; -update noar ti set b2='WPD24ZNHA55SRT93AD066DBNW' where id=1; -update noar tt set v0='HJ798U3XK' where id=2; -update noar ti set v0='HJ798U3XK' where id=2; -update noar tt set b0='YHHQZ' where id=2; -update noar ti set b0='YHHQZ' where id=2; -update noar tt set v0='PCKJJU7F7Z9C5AI7P9EG6I8' where id=2; -update noar ti set v0='PCKJJU7F7Z9C5AI7P9EG6I8' where id=2; -update noar tt set b1='RF0M9S27M2UCOM3NXZ907QMU' where id=2; -update noar ti set b1='RF0M9S27M2UCOM3NXZ907QMU' where id=2; -update noar tt set v0='AW4SWOMZ1FTBFKI4HB1MWQ' where id=2; -update noar ti set v0='AW4SWOMZ1FTBFKI4HB1MWQ' where id=2; -update noar tt set b2='2H2S7N43OGN2FB1S7RMNQQDE4Q0JU' where id=2; -update noar ti set b2='2H2S7N43OGN2FB1S7RMNQQDE4Q0JU' where id=2; -update noar tt set v0='X3JSOWS7KOB9NV3V' where id=3; -update noar ti set v0='X3JSOWS7KOB9NV3V' where id=3; -update noar tt set b0='NO' where id=3; -update noar ti set b0='NO' where id=3; -update noar tt set v0='KXJZU0Z0K2RMGU9' where id=3; -update noar ti set v0='KXJZU0Z0K2RMGU9' where id=3; -update noar tt set b1='XS8ORTD7FLQG1E0' where id=3; -update noar ti set b1='XS8ORTD7FLQG1E0' where id=3; -update noar tt set v0='MUELL5VZ941O5BCGP2BO92JJFO4C3XG' where id=3; -update noar ti set v0='MUELL5VZ941O5BCGP2BO92JJFO4C3XG' where id=3; -update noar tt set b2='LPUO39GEGZ' where id=3; -update noar ti set b2='LPUO39GEGZ' where id=3; -update noar tt set v0='GEXJ5RTDCE' where id=4; -update noar ti set v0='GEXJ5RTDCE' where id=4; -update noar tt set b0='JNL8JLYKPKX31CPHHHCPN9P556XTDX3' where id=4; -update noar ti set b0='JNL8JLYKPKX31CPHHHCPN9P556XTDX3' where id=4; -update noar tt set v0='LP' where id=4; -update noar ti set v0='LP' where id=4; -update noar tt set b1='UZWKA6A2AE5D8FMP0BKKT7AL4VO36GM' where id=4; -update noar ti set b1='UZWKA6A2AE5D8FMP0BKKT7AL4VO36GM' where id=4; -update noar tt set v0='SF574' where id=4; -update noar ti set v0='SF574' where id=4; -update noar tt set b2='8PWGL3C' where id=4; -update noar ti set b2='8PWGL3C' where id=4; -update noar tt set v0='FW0TYH58E8UC1JD26J5LI' where id=5; -update noar ti set v0='FW0TYH58E8UC1JD26J5LI' where id=5; -update noar tt set b0='056' where id=5; -update noar ti set b0='056' where id=5; -update noar tt set v0='038PYFJHGH6MID0S77HP8RJQAH' where id=5; -update noar ti set v0='038PYFJHGH6MID0S77HP8RJQAH' where id=5; -update noar tt set b1='TRJ' where id=5; -update noar ti set b1='TRJ' where id=5; -update noar tt set v0='E77DGQIBFSDCLX0CFMR3CXTIM' where id=5; -update noar ti set v0='E77DGQIBFSDCLX0CFMR3CXTIM' where id=5; -update noar tt set b2='ADG2SMIWRR' where id=5; -update noar ti set b2='ADG2SMIWRR' where id=5; -update noar tt set v0='3WD8W4VMJ0235ND4M1843RZY492S' where id=6; -update noar ti set v0='3WD8W4VMJ0235ND4M1843RZY492S' where id=6; -update noar tt set b0='8ETYMSQO' where id=6; -update noar ti set b0='8ETYMSQO' where id=6; -update noar tt set v0='XDX17PMRJT4GT' where id=6; -update noar ti set v0='XDX17PMRJT4GT' where id=6; -update noar tt set b1='O3K9ZTZ9PO867' where id=6; -update noar ti set b1='O3K9ZTZ9PO867' where id=6; -update noar tt set v0='0' where id=6; -update noar ti set v0='0' where id=6; -update noar tt set b2='OAQJQ0' where id=6; -update noar ti set b2='OAQJQ0' where id=6; -update noar tt set v0='D1RD' where id=7; -update noar ti set v0='D1RD' where id=7; -update noar tt set b0='7JRBYJQ2ILXUQDEGSS2YH' where id=7; -update noar ti set b0='7JRBYJQ2ILXUQDEGSS2YH' where id=7; -update noar tt set v0='Y6PJ' where id=7; -update noar ti set v0='Y6PJ' where id=7; -update noar tt set b1='99SOGZBAHF' where id=7; -update noar ti set b1='99SOGZBAHF' where id=7; -update noar tt set v0='OG38T' where id=7; -update noar ti set v0='OG38T' where id=7; -update noar tt set b2='BR5SXFGS7SY7AODMDVGBBF02GM8LS4' where id=7; -update noar ti set b2='BR5SXFGS7SY7AODMDVGBBF02GM8LS4' where id=7; -update noar tt set v0='MQXX0R6UY1O' where id=8; -update noar ti set v0='MQXX0R6UY1O' where id=8; -update noar tt set b0='SCXVZJB2GXCGMMATGT0J6DG' where id=8; -update noar ti set b0='SCXVZJB2GXCGMMATGT0J6DG' where id=8; -update noar tt set v0='F96K5MZ6OYLK' where id=8; -update noar ti set v0='F96K5MZ6OYLK' where id=8; -update noar tt set b1='XXP79A9TH5E1NL1X3WZ' where id=8; -update noar ti set b1='XXP79A9TH5E1NL1X3WZ' where id=8; -update noar tt set v0='A' where id=8; -update noar ti set v0='A' where id=8; -update noar tt set b2='OCT0W2941UU0XWFMG29' where id=8; -update noar ti set b2='OCT0W2941UU0XWFMG29' where id=8; -update noar tt set v0='EQHZFJ2WQ92YCH8P01UEOTBF' where id=9; -update noar ti set v0='EQHZFJ2WQ92YCH8P01UEOTBF' where id=9; -update noar tt set b0='6' where id=9; -update noar ti set b0='6' where id=9; -update noar tt set v0='OF3UCX5SKADQ4KIF' where id=9; -update noar ti set v0='OF3UCX5SKADQ4KIF' where id=9; -update noar tt set b1='BYTQG9EQJVQTJIIC8' where id=9; -update noar ti set b1='BYTQG9EQJVQTJIIC8' where id=9; -update noar tt set v0='JSN3NW5EJJU4C540BZJZHK' where id=9; -update noar ti set v0='JSN3NW5EJJU4C540BZJZHK' where id=9; -update noar tt set b2='GMLCNHJVOODY62BVXNS544F91MO' where id=9; -update noar ti set b2='GMLCNHJVOODY62BVXNS544F91MO' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 longblob null, - b1 mediumblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='AEGMDK8EYV80LO5N0F714KACBJ5XMV' where id=1; -update noar ti set v0='AEGMDK8EYV80LO5N0F714KACBJ5XMV' where id=1; -update noar tt set b0='5ZUR86QBTVDP93LIQ' where id=1; -update noar ti set b0='5ZUR86QBTVDP93LIQ' where id=1; -update noar tt set v0='5GNLQ' where id=1; -update noar ti set v0='5GNLQ' where id=1; -update noar tt set b1='IE0XF8HDL3PTSEFLVWM33T1U' where id=1; -update noar ti set b1='IE0XF8HDL3PTSEFLVWM33T1U' where id=1; -update noar tt set v0='XLA22WGK9SMP06N7RD0RDCVRXG' where id=1; -update noar ti set v0='XLA22WGK9SMP06N7RD0RDCVRXG' where id=1; -update noar tt set b2='QOA2PY6H1OP16DVOD1PC4' where id=1; -update noar ti set b2='QOA2PY6H1OP16DVOD1PC4' where id=1; -update noar tt set v0='4MDHHB7JKV8ZMLJT5W1BPZY' where id=2; -update noar ti set v0='4MDHHB7JKV8ZMLJT5W1BPZY' where id=2; -update noar tt set b0='FOPAO85BB78ZCT5U18M9JD' where id=2; -update noar ti set b0='FOPAO85BB78ZCT5U18M9JD' where id=2; -update noar tt set v0='TAFV3R39DWJTL5EHAAALI1CJY' where id=2; -update noar ti set v0='TAFV3R39DWJTL5EHAAALI1CJY' where id=2; -update noar tt set b1='TEY962JR9OE' where id=2; -update noar ti set b1='TEY962JR9OE' where id=2; -update noar tt set v0='CPFZ4IO' where id=2; -update noar ti set v0='CPFZ4IO' where id=2; -update noar tt set b2='HKSDHDHLX9P' where id=2; -update noar ti set b2='HKSDHDHLX9P' where id=2; -update noar tt set v0='QHXL2WU17IT' where id=3; -update noar ti set v0='QHXL2WU17IT' where id=3; -update noar tt set b0='I06H1EKO1NIMYJXF2O5C' where id=3; -update noar ti set b0='I06H1EKO1NIMYJXF2O5C' where id=3; -update noar tt set v0='UPT67K6K7FC8Z2' where id=3; -update noar ti set v0='UPT67K6K7FC8Z2' where id=3; -update noar tt set b1='X1M1EG132P4BL17XWE7XBN1B2GKUI' where id=3; -update noar ti set b1='X1M1EG132P4BL17XWE7XBN1B2GKUI' where id=3; -update noar tt set v0='A2SJT6C0IWQKM9I3' where id=3; -update noar ti set v0='A2SJT6C0IWQKM9I3' where id=3; -update noar tt set b2='I5YEITB973H84PFGQZ3XG3J' where id=3; -update noar ti set b2='I5YEITB973H84PFGQZ3XG3J' where id=3; -update noar tt set v0='RW7' where id=4; -update noar ti set v0='RW7' where id=4; -update noar tt set b0='UJQ3Z4N5C3NS3832A' where id=4; -update noar ti set b0='UJQ3Z4N5C3NS3832A' where id=4; -update noar tt set v0='N00IXPQCHO3TB0P671' where id=4; -update noar ti set v0='N00IXPQCHO3TB0P671' where id=4; -update noar tt set b1='P7TP9H4FA' where id=4; -update noar ti set b1='P7TP9H4FA' where id=4; -update noar tt set v0='VG24O291JX0EYG5UY' where id=4; -update noar ti set v0='VG24O291JX0EYG5UY' where id=4; -update noar tt set b2='CIZ3EYAITJANDCXSMKWID' where id=4; -update noar ti set b2='CIZ3EYAITJANDCXSMKWID' where id=4; -update noar tt set v0='PSN1WAALUNSAT' where id=5; -update noar ti set v0='PSN1WAALUNSAT' where id=5; -update noar tt set b0='WE2T801L006YN9J' where id=5; -update noar ti set b0='WE2T801L006YN9J' where id=5; -update noar tt set v0='724HJ9HCTL6I2G6A1TIOH2HDOKN' where id=5; -update noar ti set v0='724HJ9HCTL6I2G6A1TIOH2HDOKN' where id=5; -update noar tt set b1='DJA7' where id=5; -update noar ti set b1='DJA7' where id=5; -update noar tt set v0='04OUGOZ0MK1' where id=5; -update noar ti set v0='04OUGOZ0MK1' where id=5; -update noar tt set b2='UFS' where id=5; -update noar ti set b2='UFS' where id=5; -update noar tt set v0='B57M3DC4Y5FBHAFQUN8BZKWMJZ63CZ4' where id=6; -update noar ti set v0='B57M3DC4Y5FBHAFQUN8BZKWMJZ63CZ4' where id=6; -update noar tt set b0='6J6NPSZ67C2QRTFWV2PZN2W3QIMUG' where id=6; -update noar ti set b0='6J6NPSZ67C2QRTFWV2PZN2W3QIMUG' where id=6; -update noar tt set v0='6CSD7SPG4L936VTONHLQYNP196K063X' where id=6; -update noar ti set v0='6CSD7SPG4L936VTONHLQYNP196K063X' where id=6; -update noar tt set b1='US3CK8X8J8WQWHX5AFJ45AP6FIPKAM' where id=6; -update noar ti set b1='US3CK8X8J8WQWHX5AFJ45AP6FIPKAM' where id=6; -update noar tt set v0='MJUI09VTZ6QAAHLKXRNCV23B3Z7O' where id=6; -update noar ti set v0='MJUI09VTZ6QAAHLKXRNCV23B3Z7O' where id=6; -update noar tt set b2='MPTIN3UP2VYEFDUURAVLXWP24GH6U56' where id=6; -update noar ti set b2='MPTIN3UP2VYEFDUURAVLXWP24GH6U56' where id=6; -update noar tt set v0='OTVKMTCQ1QUQ3SKH5967SE' where id=7; -update noar ti set v0='OTVKMTCQ1QUQ3SKH5967SE' where id=7; -update noar tt set b0='96LBU3UD38V1517X4X0' where id=7; -update noar ti set b0='96LBU3UD38V1517X4X0' where id=7; -update noar tt set v0='2IT7WZJWAIT0I' where id=7; -update noar ti set v0='2IT7WZJWAIT0I' where id=7; -update noar tt set b1='V3C4JW70IOP97RJWDMCSSX' where id=7; -update noar ti set b1='V3C4JW70IOP97RJWDMCSSX' where id=7; -update noar tt set v0='L9G3' where id=7; -update noar ti set v0='L9G3' where id=7; -update noar tt set b2='LRLO45QI6A6SCLFV7NOI13QLW' where id=7; -update noar ti set b2='LRLO45QI6A6SCLFV7NOI13QLW' where id=7; -update noar tt set v0='42NLOT4UQFS' where id=8; -update noar ti set v0='42NLOT4UQFS' where id=8; -update noar tt set b0='S62B8XDFSSQ0' where id=8; -update noar ti set b0='S62B8XDFSSQ0' where id=8; -update noar tt set v0='X76ZFPSI6' where id=8; -update noar ti set v0='X76ZFPSI6' where id=8; -update noar tt set b1='FXK' where id=8; -update noar ti set b1='FXK' where id=8; -update noar tt set v0='MSNUUCHC4D' where id=8; -update noar ti set v0='MSNUUCHC4D' where id=8; -update noar tt set b2='T0XXZ3DB' where id=8; -update noar ti set b2='T0XXZ3DB' where id=8; -update noar tt set v0='I8IWTMSE' where id=9; -update noar ti set v0='I8IWTMSE' where id=9; -update noar tt set b0='1UO' where id=9; -update noar ti set b0='1UO' where id=9; -update noar tt set v0='JT' where id=9; -update noar ti set v0='JT' where id=9; -update noar tt set b1='XF7YZLXM8TS7V44I1OBBLAYCLMTDMJE' where id=9; -update noar ti set b1='XF7YZLXM8TS7V44I1OBBLAYCLMTDMJE' where id=9; -update noar tt set v0='TH5E9Z' where id=9; -update noar ti set v0='TH5E9Z' where id=9; -update noar tt set b2='222NO4NTFXSOM57' where id=9; -update noar ti set b2='222NO4NTFXSOM57' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 longblob not null, - b1 mediumblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='5YIBB5UNICW9845FJBUCTO' where id=1; -update noar ti set v0='5YIBB5UNICW9845FJBUCTO' where id=1; -update noar tt set b0='MXN7' where id=1; -update noar ti set b0='MXN7' where id=1; -update noar tt set v0='KUJVXXVC7JOR5DQP' where id=1; -update noar ti set v0='KUJVXXVC7JOR5DQP' where id=1; -update noar tt set b1='6D15RMD9AP1PJLXG2X0PETP24JC' where id=1; -update noar ti set b1='6D15RMD9AP1PJLXG2X0PETP24JC' where id=1; -update noar tt set v0='Y5EQSR52HVK98VLCMCUBPMW4HZH4D' where id=1; -update noar ti set v0='Y5EQSR52HVK98VLCMCUBPMW4HZH4D' where id=1; -update noar tt set b2='NPZQWM6' where id=1; -update noar ti set b2='NPZQWM6' where id=1; -update noar tt set v0='7IIYB8' where id=2; -update noar ti set v0='7IIYB8' where id=2; -update noar tt set b0='3XA8WDH4ILAZXZ3MYN' where id=2; -update noar ti set b0='3XA8WDH4ILAZXZ3MYN' where id=2; -update noar tt set v0='T3QGJ9J7NRHJI6K1D' where id=2; -update noar ti set v0='T3QGJ9J7NRHJI6K1D' where id=2; -update noar tt set b1='HY' where id=2; -update noar ti set b1='HY' where id=2; -update noar tt set v0='YDV2S0YCTQ8RASJJ2HS' where id=2; -update noar ti set v0='YDV2S0YCTQ8RASJJ2HS' where id=2; -update noar tt set b2='0JNS9N9BRIUGHIGJUTVZLYVE887' where id=2; -update noar ti set b2='0JNS9N9BRIUGHIGJUTVZLYVE887' where id=2; -update noar tt set v0='1UDERKW4U60UYANPN7XZ9S8N' where id=3; -update noar ti set v0='1UDERKW4U60UYANPN7XZ9S8N' where id=3; -update noar tt set b0='E8DE7XU' where id=3; -update noar ti set b0='E8DE7XU' where id=3; -update noar tt set v0='GRAD2LTLER' where id=3; -update noar ti set v0='GRAD2LTLER' where id=3; -update noar tt set b1='CPKQOCLGYDOP18' where id=3; -update noar ti set b1='CPKQOCLGYDOP18' where id=3; -update noar tt set v0='9I7HF5S6JFDGQRJAYK5QT5VV4' where id=3; -update noar ti set v0='9I7HF5S6JFDGQRJAYK5QT5VV4' where id=3; -update noar tt set b2='YI' where id=3; -update noar ti set b2='YI' where id=3; -update noar tt set v0='H' where id=4; -update noar ti set v0='H' where id=4; -update noar tt set b0='VNFPJJKXK91C' where id=4; -update noar ti set b0='VNFPJJKXK91C' where id=4; -update noar tt set v0='BXK6KLIBNT8OPMDP1DKBONRP6BBB5ZVD' where id=4; -update noar ti set v0='BXK6KLIBNT8OPMDP1DKBONRP6BBB5ZVD' where id=4; -update noar tt set b1='LVRAWWTLD79J77P705WWWSZ1W34DZRB' where id=4; -update noar ti set b1='LVRAWWTLD79J77P705WWWSZ1W34DZRB' where id=4; -update noar tt set v0='V' where id=4; -update noar ti set v0='V' where id=4; -update noar tt set b2='00Z6QQ' where id=4; -update noar ti set b2='00Z6QQ' where id=4; -update noar tt set v0='53C8BD8' where id=5; -update noar ti set v0='53C8BD8' where id=5; -update noar tt set b0='6LM17NK1' where id=5; -update noar ti set b0='6LM17NK1' where id=5; -update noar tt set v0='Y0TUAR0QU0QO8U' where id=5; -update noar ti set v0='Y0TUAR0QU0QO8U' where id=5; -update noar tt set b1='0CPIUW' where id=5; -update noar ti set b1='0CPIUW' where id=5; -update noar tt set v0='TXX80PRDST6ZKF' where id=5; -update noar ti set v0='TXX80PRDST6ZKF' where id=5; -update noar tt set b2='ANHBGV8GFJM' where id=5; -update noar ti set b2='ANHBGV8GFJM' where id=5; -update noar tt set v0='7AMA7A2G7I4YRGQK2JZ2YPLRRRSYI' where id=6; -update noar ti set v0='7AMA7A2G7I4YRGQK2JZ2YPLRRRSYI' where id=6; -update noar tt set b0='K0OHWH6TGS3XN' where id=6; -update noar ti set b0='K0OHWH6TGS3XN' where id=6; -update noar tt set v0='S8MK5XH9C7ERQKQCT0239TY8XJ7' where id=6; -update noar ti set v0='S8MK5XH9C7ERQKQCT0239TY8XJ7' where id=6; -update noar tt set b1='5' where id=6; -update noar ti set b1='5' where id=6; -update noar tt set v0='5KA8V1OMWDB2Z9UDYQK' where id=6; -update noar ti set v0='5KA8V1OMWDB2Z9UDYQK' where id=6; -update noar tt set b2='817L591' where id=6; -update noar ti set b2='817L591' where id=6; -update noar tt set v0='I58CWEWAOBC0HHXHDJSA0NAKAUIXF' where id=7; -update noar ti set v0='I58CWEWAOBC0HHXHDJSA0NAKAUIXF' where id=7; -update noar tt set b0='QFRXQ3NOOX1RKXLQBO9G5K' where id=7; -update noar ti set b0='QFRXQ3NOOX1RKXLQBO9G5K' where id=7; -update noar tt set v0='H54KHZJB5' where id=7; -update noar ti set v0='H54KHZJB5' where id=7; -update noar tt set b1='PLBFN5IDR9S0DV4IIUYV63H0GISSHN' where id=7; -update noar ti set b1='PLBFN5IDR9S0DV4IIUYV63H0GISSHN' where id=7; -update noar tt set v0='4UF9' where id=7; -update noar ti set v0='4UF9' where id=7; -update noar tt set b2='CBD6U6MUZHWS4RY1W5' where id=7; -update noar ti set b2='CBD6U6MUZHWS4RY1W5' where id=7; -update noar tt set v0='V4VEFIGTJ5S67Z6MVQZ' where id=8; -update noar ti set v0='V4VEFIGTJ5S67Z6MVQZ' where id=8; -update noar tt set b0='CFIF77FGMJ4BUJG5V3ZB5XW3D' where id=8; -update noar ti set b0='CFIF77FGMJ4BUJG5V3ZB5XW3D' where id=8; -update noar tt set v0='4' where id=8; -update noar ti set v0='4' where id=8; -update noar tt set b1='SSR74TAPELE03RMYQAFT' where id=8; -update noar ti set b1='SSR74TAPELE03RMYQAFT' where id=8; -update noar tt set v0='07GYC0C26KXP37NWZE1MO' where id=8; -update noar ti set v0='07GYC0C26KXP37NWZE1MO' where id=8; -update noar tt set b2='KUTT43527FXLKUMRRZ2JVMYUQUI' where id=8; -update noar ti set b2='KUTT43527FXLKUMRRZ2JVMYUQUI' where id=8; -update noar tt set v0='PVQ50MWWW' where id=9; -update noar ti set v0='PVQ50MWWW' where id=9; -update noar tt set b0='L0O9FP02FNGD6BY00WCSUSASAQZ' where id=9; -update noar ti set b0='L0O9FP02FNGD6BY00WCSUSASAQZ' where id=9; -update noar tt set v0='08943H3VSMOBTTP7L9CPKFEAG3' where id=9; -update noar ti set v0='08943H3VSMOBTTP7L9CPKFEAG3' where id=9; -update noar tt set b1='7RUY5OQDD8' where id=9; -update noar ti set b1='7RUY5OQDD8' where id=9; -update noar tt set v0='MY8OYZTR0UNYNZO59ZW23KZTJLNUUV2' where id=9; -update noar ti set v0='MY8OYZTR0UNYNZO59ZW23KZTJLNUUV2' where id=9; -update noar tt set b2='FVEE4VTIENXXZUK8PV4W5NJ' where id=9; -update noar ti set b2='FVEE4VTIENXXZUK8PV4W5NJ' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 longblob not null, - b1 mediumblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='S3WOBYMKV629I7E1XUJCG163' where id=1; -update noar ti set v0='S3WOBYMKV629I7E1XUJCG163' where id=1; -update noar tt set b0='7GSYV' where id=1; -update noar ti set b0='7GSYV' where id=1; -update noar tt set v0='JMP59E0SBEI5UKS2CF1' where id=1; -update noar ti set v0='JMP59E0SBEI5UKS2CF1' where id=1; -update noar tt set b1='BR44HNYO9JJV9NNPMVST' where id=1; -update noar ti set b1='BR44HNYO9JJV9NNPMVST' where id=1; -update noar tt set v0='R4NKM8LXH2' where id=1; -update noar ti set v0='R4NKM8LXH2' where id=1; -update noar tt set b2='VE2LB0DFDES1CB97V' where id=1; -update noar ti set b2='VE2LB0DFDES1CB97V' where id=1; -update noar tt set v0='NWWCS9HVGWBNEBIMCZA23' where id=2; -update noar ti set v0='NWWCS9HVGWBNEBIMCZA23' where id=2; -update noar tt set b0='QOGKOYP2RWVRJJXHJ9M91R5LN3U' where id=2; -update noar ti set b0='QOGKOYP2RWVRJJXHJ9M91R5LN3U' where id=2; -update noar tt set v0='YUAQ3E' where id=2; -update noar ti set v0='YUAQ3E' where id=2; -update noar tt set b1='1DCYTJTC2KJT9JZEQPDNI9N0JODU' where id=2; -update noar ti set b1='1DCYTJTC2KJT9JZEQPDNI9N0JODU' where id=2; -update noar tt set v0='MJMLFBB' where id=2; -update noar ti set v0='MJMLFBB' where id=2; -update noar tt set b2='UT0ZYO6DKRZIG54C772MDG' where id=2; -update noar ti set b2='UT0ZYO6DKRZIG54C772MDG' where id=2; -update noar tt set v0='BWTS5XCE563B61T3CP4DMO' where id=3; -update noar ti set v0='BWTS5XCE563B61T3CP4DMO' where id=3; -update noar tt set b0='EIW7WSKT0MEGBJJMEO' where id=3; -update noar ti set b0='EIW7WSKT0MEGBJJMEO' where id=3; -update noar tt set v0='EPICL7Z14LG9' where id=3; -update noar ti set v0='EPICL7Z14LG9' where id=3; -update noar tt set b1='8B0DOJL2JE7K10LACH2ERDOBUQDB0F' where id=3; -update noar ti set b1='8B0DOJL2JE7K10LACH2ERDOBUQDB0F' where id=3; -update noar tt set v0='JKW946I5U2676TEFELJC0I3DSOMKCKRB' where id=3; -update noar ti set v0='JKW946I5U2676TEFELJC0I3DSOMKCKRB' where id=3; -update noar tt set b2='IALFJJ7K40IXNQU8' where id=3; -update noar ti set b2='IALFJJ7K40IXNQU8' where id=3; -update noar tt set v0='ORHEIO52QFHWJ4A3' where id=4; -update noar ti set v0='ORHEIO52QFHWJ4A3' where id=4; -update noar tt set b0='GRYJN4R2AHE' where id=4; -update noar ti set b0='GRYJN4R2AHE' where id=4; -update noar tt set v0='V37WORKOR9O' where id=4; -update noar ti set v0='V37WORKOR9O' where id=4; -update noar tt set b1='FDBVAG' where id=4; -update noar ti set b1='FDBVAG' where id=4; -update noar tt set v0='UZBFL9UHEPE7OTV04GETP' where id=4; -update noar ti set v0='UZBFL9UHEPE7OTV04GETP' where id=4; -update noar tt set b2='CM8EMC1YNNS7UEF4GP4M18KMBXJRGN' where id=4; -update noar ti set b2='CM8EMC1YNNS7UEF4GP4M18KMBXJRGN' where id=4; -update noar tt set v0='KADFFXAAU5QLA9T5BLPL583' where id=5; -update noar ti set v0='KADFFXAAU5QLA9T5BLPL583' where id=5; -update noar tt set b0='36S59X86VT' where id=5; -update noar ti set b0='36S59X86VT' where id=5; -update noar tt set v0='FX5EHG28EHYWCRLL6' where id=5; -update noar ti set v0='FX5EHG28EHYWCRLL6' where id=5; -update noar tt set b1='RVWERPBBNP58QPJHQEFL6KGXB08PY' where id=5; -update noar ti set b1='RVWERPBBNP58QPJHQEFL6KGXB08PY' where id=5; -update noar tt set v0='QTYVPED8KKZ5S5QU601VDVXBLM8' where id=5; -update noar ti set v0='QTYVPED8KKZ5S5QU601VDVXBLM8' where id=5; -update noar tt set b2='GNPJ8Q48R10OUHK347Q2D240ZRPSV' where id=5; -update noar ti set b2='GNPJ8Q48R10OUHK347Q2D240ZRPSV' where id=5; -update noar tt set v0='FK0DK4SCUA4G3REDN5HOTM4IKDVAI2BB' where id=6; -update noar ti set v0='FK0DK4SCUA4G3REDN5HOTM4IKDVAI2BB' where id=6; -update noar tt set b0='QD97N3TTIL3' where id=6; -update noar ti set b0='QD97N3TTIL3' where id=6; -update noar tt set v0='4NF378ECWJ' where id=6; -update noar ti set v0='4NF378ECWJ' where id=6; -update noar tt set b1='LAAW46MQHWT6A' where id=6; -update noar ti set b1='LAAW46MQHWT6A' where id=6; -update noar tt set v0='2FTO3NIS' where id=6; -update noar ti set v0='2FTO3NIS' where id=6; -update noar tt set b2='WEB38FB8YMHHLCPV' where id=6; -update noar ti set b2='WEB38FB8YMHHLCPV' where id=6; -update noar tt set v0='ZNXXVVB' where id=7; -update noar ti set v0='ZNXXVVB' where id=7; -update noar tt set b0='UF5P19DYI3' where id=7; -update noar ti set b0='UF5P19DYI3' where id=7; -update noar tt set v0='1UBGXLDMB' where id=7; -update noar ti set v0='1UBGXLDMB' where id=7; -update noar tt set b1='PVL9NH95K4NEQXDQLNWQ4B' where id=7; -update noar ti set b1='PVL9NH95K4NEQXDQLNWQ4B' where id=7; -update noar tt set v0='EUB8FA6TBQT1HNWQGIC75SIZ889' where id=7; -update noar ti set v0='EUB8FA6TBQT1HNWQGIC75SIZ889' where id=7; -update noar tt set b2='8YQR2W5UP50MTPW690WQUC0RZNL8' where id=7; -update noar ti set b2='8YQR2W5UP50MTPW690WQUC0RZNL8' where id=7; -update noar tt set v0='LUWLJORIA7POZCB' where id=8; -update noar ti set v0='LUWLJORIA7POZCB' where id=8; -update noar tt set b0='2TVGNOR' where id=8; -update noar ti set b0='2TVGNOR' where id=8; -update noar tt set v0='BPM4GRLCJGT7QCAR6V5R3Z64W' where id=8; -update noar ti set v0='BPM4GRLCJGT7QCAR6V5R3Z64W' where id=8; -update noar tt set b1='O170TG' where id=8; -update noar ti set b1='O170TG' where id=8; -update noar tt set v0='GIYB3SKHI1YHZFV' where id=8; -update noar ti set v0='GIYB3SKHI1YHZFV' where id=8; -update noar tt set b2='XBJEJ7IZNL22RHKA' where id=8; -update noar ti set b2='XBJEJ7IZNL22RHKA' where id=8; -update noar tt set v0='3KFAL' where id=9; -update noar ti set v0='3KFAL' where id=9; -update noar tt set b0='LPHWJCBIQ4JNNBDZKENL5RT3AWVUDHVE' where id=9; -update noar ti set b0='LPHWJCBIQ4JNNBDZKENL5RT3AWVUDHVE' where id=9; -update noar tt set v0='J4WP' where id=9; -update noar ti set v0='J4WP' where id=9; -update noar tt set b1='E9C4DU0LWIR0052208LIZDWUX3' where id=9; -update noar ti set b1='E9C4DU0LWIR0052208LIZDWUX3' where id=9; -update noar tt set v0='KU' where id=9; -update noar ti set v0='KU' where id=9; -update noar tt set b2='E8T' where id=9; -update noar ti set b2='E8T' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 longblob null, - b1 mediumblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='R3K75JPZ7DBNDLWGKZWUN7JFQ0LVVNKD' where id=1; -update noar ti set v0='R3K75JPZ7DBNDLWGKZWUN7JFQ0LVVNKD' where id=1; -update noar tt set b0='CEXAX0IX02SS6E7AKO1H8US' where id=1; -update noar ti set b0='CEXAX0IX02SS6E7AKO1H8US' where id=1; -update noar tt set v0='0FPUB1ABYX7L7DQW5EWTFCYN0' where id=1; -update noar ti set v0='0FPUB1ABYX7L7DQW5EWTFCYN0' where id=1; -update noar tt set b1='MUYE4FEQZ5' where id=1; -update noar ti set b1='MUYE4FEQZ5' where id=1; -update noar tt set v0='CJVU7TTVU9Z708FZH059JLWRSP' where id=1; -update noar ti set v0='CJVU7TTVU9Z708FZH059JLWRSP' where id=1; -update noar tt set b2='TWCPR' where id=1; -update noar ti set b2='TWCPR' where id=1; -update noar tt set v0='MTEZE8LTCJPIDKSJWXE' where id=2; -update noar ti set v0='MTEZE8LTCJPIDKSJWXE' where id=2; -update noar tt set b0='QIAIZUVDN8YM' where id=2; -update noar ti set b0='QIAIZUVDN8YM' where id=2; -update noar tt set v0='TFGRNU2QU' where id=2; -update noar ti set v0='TFGRNU2QU' where id=2; -update noar tt set b1='7BCLZC2NE52505OKEYE6HCM5I' where id=2; -update noar ti set b1='7BCLZC2NE52505OKEYE6HCM5I' where id=2; -update noar tt set v0='JE' where id=2; -update noar ti set v0='JE' where id=2; -update noar tt set b2='3QYP8R05V8ST' where id=2; -update noar ti set b2='3QYP8R05V8ST' where id=2; -update noar tt set v0='312J4UC0M6MSUYYKHTN4SL5JYG' where id=3; -update noar ti set v0='312J4UC0M6MSUYYKHTN4SL5JYG' where id=3; -update noar tt set b0='PA7IDPT95SW2OW5' where id=3; -update noar ti set b0='PA7IDPT95SW2OW5' where id=3; -update noar tt set v0='2X6H0H' where id=3; -update noar ti set v0='2X6H0H' where id=3; -update noar tt set b1='8BQHCICPE' where id=3; -update noar ti set b1='8BQHCICPE' where id=3; -update noar tt set v0='WFVTH1Q9O4BP5A14957VS' where id=3; -update noar ti set v0='WFVTH1Q9O4BP5A14957VS' where id=3; -update noar tt set b2='DRZ3JOLF9BE' where id=3; -update noar ti set b2='DRZ3JOLF9BE' where id=3; -update noar tt set v0='39W8FXHK14GYLKHCUS' where id=4; -update noar ti set v0='39W8FXHK14GYLKHCUS' where id=4; -update noar tt set b0='PY20H353UIANN3I8G8O9AKY' where id=4; -update noar ti set b0='PY20H353UIANN3I8G8O9AKY' where id=4; -update noar tt set v0='KGJB3HFFKRE72JXWMET2DPIW90P' where id=4; -update noar ti set v0='KGJB3HFFKRE72JXWMET2DPIW90P' where id=4; -update noar tt set b1='J1GRMTVT746A63V3BKHD3U' where id=4; -update noar ti set b1='J1GRMTVT746A63V3BKHD3U' where id=4; -update noar tt set v0='IXUJPWUTCL4MXPMUBITCC14NOIQP4Y' where id=4; -update noar ti set v0='IXUJPWUTCL4MXPMUBITCC14NOIQP4Y' where id=4; -update noar tt set b2='X6VKEIHA' where id=4; -update noar ti set b2='X6VKEIHA' where id=4; -update noar tt set v0='2HM74' where id=5; -update noar ti set v0='2HM74' where id=5; -update noar tt set b0='Q1MZZHM7C7AQELLNCBV2YV' where id=5; -update noar ti set b0='Q1MZZHM7C7AQELLNCBV2YV' where id=5; -update noar tt set v0='YNDEJGCQ29SOCEILQ2CEZU' where id=5; -update noar ti set v0='YNDEJGCQ29SOCEILQ2CEZU' where id=5; -update noar tt set b1='VLRF4G3T7NTTMBQX6CY4Y7HJG5N' where id=5; -update noar ti set b1='VLRF4G3T7NTTMBQX6CY4Y7HJG5N' where id=5; -update noar tt set v0='6PT4RS2L' where id=5; -update noar ti set v0='6PT4RS2L' where id=5; -update noar tt set b2='NRH' where id=5; -update noar ti set b2='NRH' where id=5; -update noar tt set v0='AO9REU3AKJ2HN' where id=6; -update noar ti set v0='AO9REU3AKJ2HN' where id=6; -update noar tt set b0='344IMAFNYWN1VPNIO8G3QP' where id=6; -update noar ti set b0='344IMAFNYWN1VPNIO8G3QP' where id=6; -update noar tt set v0='ROFZG3WP4CCJQV4FXX3YXG4MFWV17ZGA' where id=6; -update noar ti set v0='ROFZG3WP4CCJQV4FXX3YXG4MFWV17ZGA' where id=6; -update noar tt set b1='3OR3MJA0AAXGXJEHZUSROQ249J' where id=6; -update noar ti set b1='3OR3MJA0AAXGXJEHZUSROQ249J' where id=6; -update noar tt set v0='ZAWIH0Z032M68' where id=6; -update noar ti set v0='ZAWIH0Z032M68' where id=6; -update noar tt set b2='DQ41UB' where id=6; -update noar ti set b2='DQ41UB' where id=6; -update noar tt set v0='YMFQS5' where id=7; -update noar ti set v0='YMFQS5' where id=7; -update noar tt set b0='5EWX' where id=7; -update noar ti set b0='5EWX' where id=7; -update noar tt set v0='24CYCJWWTW5Y3S9CITJPZJKY' where id=7; -update noar ti set v0='24CYCJWWTW5Y3S9CITJPZJKY' where id=7; -update noar tt set b1='0PGUONFQBMKD' where id=7; -update noar ti set b1='0PGUONFQBMKD' where id=7; -update noar tt set v0='UNOLJ35TQJVFXZCV' where id=7; -update noar ti set v0='UNOLJ35TQJVFXZCV' where id=7; -update noar tt set b2='1J3L' where id=7; -update noar ti set b2='1J3L' where id=7; -update noar tt set v0='R0492MGGPP1EQKYVMM18VEVC' where id=8; -update noar ti set v0='R0492MGGPP1EQKYVMM18VEVC' where id=8; -update noar tt set b0='0IY0' where id=8; -update noar ti set b0='0IY0' where id=8; -update noar tt set v0='6L1B8FLDQE7M1HCLY0GG' where id=8; -update noar ti set v0='6L1B8FLDQE7M1HCLY0GG' where id=8; -update noar tt set b1='IX5LTS7AV3G7JJX5GMHXR3DFRNXK3' where id=8; -update noar ti set b1='IX5LTS7AV3G7JJX5GMHXR3DFRNXK3' where id=8; -update noar tt set v0='IP' where id=8; -update noar ti set v0='IP' where id=8; -update noar tt set b2='7' where id=8; -update noar ti set b2='7' where id=8; -update noar tt set v0='SX9KI0TPRDN3FC2VB1YLCRO01VX2AS' where id=9; -update noar ti set v0='SX9KI0TPRDN3FC2VB1YLCRO01VX2AS' where id=9; -update noar tt set b0='YPPN52C7IPNUK' where id=9; -update noar ti set b0='YPPN52C7IPNUK' where id=9; -update noar tt set v0='XEDMBXRTD253UJ' where id=9; -update noar ti set v0='XEDMBXRTD253UJ' where id=9; -update noar tt set b1='RBTR77M2XYIQJXW73NLQQQG8A4' where id=9; -update noar ti set b1='RBTR77M2XYIQJXW73NLQQQG8A4' where id=9; -update noar tt set v0='J' where id=9; -update noar ti set v0='J' where id=9; -update noar tt set b2='DP7RSS29NH6W' where id=9; -update noar ti set b2='DP7RSS29NH6W' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 longblob null, - b1 mediumblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='D9' where id=1; -update noar ti set v0='D9' where id=1; -update noar tt set b0='4KY26BDHRD3J5IC4TCAQW1RJATC' where id=1; -update noar ti set b0='4KY26BDHRD3J5IC4TCAQW1RJATC' where id=1; -update noar tt set v0='QR0EKGQ5YUDOT57D3T5' where id=1; -update noar ti set v0='QR0EKGQ5YUDOT57D3T5' where id=1; -update noar tt set b1='EE2R5' where id=1; -update noar ti set b1='EE2R5' where id=1; -update noar tt set v0='HL2F1D8CBB' where id=1; -update noar ti set v0='HL2F1D8CBB' where id=1; -update noar tt set b2='UGDNBKQ2YT5WAMJX9RRGVC' where id=1; -update noar ti set b2='UGDNBKQ2YT5WAMJX9RRGVC' where id=1; -update noar tt set v0='IFOG7SJDQLWHQ7S9H5S47M6N20U84L' where id=2; -update noar ti set v0='IFOG7SJDQLWHQ7S9H5S47M6N20U84L' where id=2; -update noar tt set b0='JFHS' where id=2; -update noar ti set b0='JFHS' where id=2; -update noar tt set v0='1JRI1UYSQRCCMIINOA4XTRZXGVR2' where id=2; -update noar ti set v0='1JRI1UYSQRCCMIINOA4XTRZXGVR2' where id=2; -update noar tt set b1='PM4IS8CHAS4' where id=2; -update noar ti set b1='PM4IS8CHAS4' where id=2; -update noar tt set v0='92BQAV8NM5BZQY94Q' where id=2; -update noar ti set v0='92BQAV8NM5BZQY94Q' where id=2; -update noar tt set b2='HOPYGDCR8Q' where id=2; -update noar ti set b2='HOPYGDCR8Q' where id=2; -update noar tt set v0='9K1UIZBEAJKXRM0C15XVRV1N4OF' where id=3; -update noar ti set v0='9K1UIZBEAJKXRM0C15XVRV1N4OF' where id=3; -update noar tt set b0='MXNUGECQVV10FM' where id=3; -update noar ti set b0='MXNUGECQVV10FM' where id=3; -update noar tt set v0='DJKJCMDTS5XITVSQJCRA60YVOGPVI' where id=3; -update noar ti set v0='DJKJCMDTS5XITVSQJCRA60YVOGPVI' where id=3; -update noar tt set b1='6IF' where id=3; -update noar ti set b1='6IF' where id=3; -update noar tt set v0='JCIKPZFLSWSR' where id=3; -update noar ti set v0='JCIKPZFLSWSR' where id=3; -update noar tt set b2='WK2U8Z3LHRIOT50AB295CWWU6XH29E' where id=3; -update noar ti set b2='WK2U8Z3LHRIOT50AB295CWWU6XH29E' where id=3; -update noar tt set v0='11WIUBVQ0GNTY8WXXYH6GE1HXE' where id=4; -update noar ti set v0='11WIUBVQ0GNTY8WXXYH6GE1HXE' where id=4; -update noar tt set b0='3027K0E8VM7ZFUGKSFKH6' where id=4; -update noar ti set b0='3027K0E8VM7ZFUGKSFKH6' where id=4; -update noar tt set v0='UBQBM1AVW1Z48KF3' where id=4; -update noar ti set v0='UBQBM1AVW1Z48KF3' where id=4; -update noar tt set b1='EZPPFKYZP7BF9YSVNK972CU8VOLNZ75' where id=4; -update noar ti set b1='EZPPFKYZP7BF9YSVNK972CU8VOLNZ75' where id=4; -update noar tt set v0='SCLTUZ76N03DLZYQ' where id=4; -update noar ti set v0='SCLTUZ76N03DLZYQ' where id=4; -update noar tt set b2='LDC21J8P32AT8SUF14LT4IZ9WVFT0' where id=4; -update noar ti set b2='LDC21J8P32AT8SUF14LT4IZ9WVFT0' where id=4; -update noar tt set v0='MEQX9LYC85VJPI00FJB35C9TNW4QH' where id=5; -update noar ti set v0='MEQX9LYC85VJPI00FJB35C9TNW4QH' where id=5; -update noar tt set b0='I7X0FRJA666B65WR' where id=5; -update noar ti set b0='I7X0FRJA666B65WR' where id=5; -update noar tt set v0='RM36BXLHOBCP59BAXLPCXSZ' where id=5; -update noar ti set v0='RM36BXLHOBCP59BAXLPCXSZ' where id=5; -update noar tt set b1='OUG3JM1LGMK7ZSQY78WE3HZ5CKEL5P' where id=5; -update noar ti set b1='OUG3JM1LGMK7ZSQY78WE3HZ5CKEL5P' where id=5; -update noar tt set v0='BNHP3ORJD224TI9' where id=5; -update noar ti set v0='BNHP3ORJD224TI9' where id=5; -update noar tt set b2='DA2' where id=5; -update noar ti set b2='DA2' where id=5; -update noar tt set v0='2IRR7ENDLBQV9D839S7Y9134GZ2G0SZO' where id=6; -update noar ti set v0='2IRR7ENDLBQV9D839S7Y9134GZ2G0SZO' where id=6; -update noar tt set b0='ICTA580809' where id=6; -update noar ti set b0='ICTA580809' where id=6; -update noar tt set v0='6FPBLTQZME' where id=6; -update noar ti set v0='6FPBLTQZME' where id=6; -update noar tt set b1='KVS0SR22V84J' where id=6; -update noar ti set b1='KVS0SR22V84J' where id=6; -update noar tt set v0='NZUHCUHEVFY015AWH0II' where id=6; -update noar ti set v0='NZUHCUHEVFY015AWH0II' where id=6; -update noar tt set b2='5LKMNFT7BYX13RNN3D2' where id=6; -update noar ti set b2='5LKMNFT7BYX13RNN3D2' where id=6; -update noar tt set v0='8OJF7ATX' where id=7; -update noar ti set v0='8OJF7ATX' where id=7; -update noar tt set b0='HY' where id=7; -update noar ti set b0='HY' where id=7; -update noar tt set v0='BAZYWPNOLLEYZ1SHHM19JLCO' where id=7; -update noar ti set v0='BAZYWPNOLLEYZ1SHHM19JLCO' where id=7; -update noar tt set b1='S390CJJD' where id=7; -update noar ti set b1='S390CJJD' where id=7; -update noar tt set v0='Q4B9OTOG95V5511GTKUFZAOOG1SR' where id=7; -update noar ti set v0='Q4B9OTOG95V5511GTKUFZAOOG1SR' where id=7; -update noar tt set b2='N953HL01BEHB6W2UO0KHIU1RBBUR7' where id=7; -update noar ti set b2='N953HL01BEHB6W2UO0KHIU1RBBUR7' where id=7; -update noar tt set v0='QQMPZ0OHR28D79' where id=8; -update noar ti set v0='QQMPZ0OHR28D79' where id=8; -update noar tt set b0='ZKA08H4VSV78' where id=8; -update noar ti set b0='ZKA08H4VSV78' where id=8; -update noar tt set v0='JX3TMT' where id=8; -update noar ti set v0='JX3TMT' where id=8; -update noar tt set b1='PKBFYE7GHSXVXQ0YF3UO1UFGT1R75' where id=8; -update noar ti set b1='PKBFYE7GHSXVXQ0YF3UO1UFGT1R75' where id=8; -update noar tt set v0='0JIHXPB96SZQ44SQSWTA4L260' where id=8; -update noar ti set v0='0JIHXPB96SZQ44SQSWTA4L260' where id=8; -update noar tt set b2='5F4HV' where id=8; -update noar ti set b2='5F4HV' where id=8; -update noar tt set v0='PIXO' where id=9; -update noar ti set v0='PIXO' where id=9; -update noar tt set b0='YYRAVC33GKFL8FWX3L7W356' where id=9; -update noar ti set b0='YYRAVC33GKFL8FWX3L7W356' where id=9; -update noar tt set v0='4V0B0LXK7UXJ52R2N8ZE5Y3MG1R' where id=9; -update noar ti set v0='4V0B0LXK7UXJ52R2N8ZE5Y3MG1R' where id=9; -update noar tt set b1='991XDMGDFUY' where id=9; -update noar ti set b1='991XDMGDFUY' where id=9; -update noar tt set v0='EVB07' where id=9; -update noar ti set v0='EVB07' where id=9; -update noar tt set b2='2TEUEW2UPEGM8TTC' where id=9; -update noar ti set b2='2TEUEW2UPEGM8TTC' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 longblob not null, - b1 mediumblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='CNE69R3TSTJTJ9A3GJ6U9V658E' where id=1; -update noar ti set v0='CNE69R3TSTJTJ9A3GJ6U9V658E' where id=1; -update noar tt set b0='65AYFMENZSIIE1AU9GQH0' where id=1; -update noar ti set b0='65AYFMENZSIIE1AU9GQH0' where id=1; -update noar tt set v0='EMZ0FRE4' where id=1; -update noar ti set v0='EMZ0FRE4' where id=1; -update noar tt set b1='MDA1YSS46DFWOH2OLRAOQT2' where id=1; -update noar ti set b1='MDA1YSS46DFWOH2OLRAOQT2' where id=1; -update noar tt set v0='J8CZQVDQVHIL0JK' where id=1; -update noar ti set v0='J8CZQVDQVHIL0JK' where id=1; -update noar tt set b2='D' where id=1; -update noar ti set b2='D' where id=1; -update noar tt set v0='P21FAHOJO0CP1Q82C9999SYL' where id=2; -update noar ti set v0='P21FAHOJO0CP1Q82C9999SYL' where id=2; -update noar tt set b0='KLOIV3M1S7Y6ZA4JU7649FF8EXL4N' where id=2; -update noar ti set b0='KLOIV3M1S7Y6ZA4JU7649FF8EXL4N' where id=2; -update noar tt set v0='ZE9N2MAVGKMTFGSV26LMLEXZFQ8T' where id=2; -update noar ti set v0='ZE9N2MAVGKMTFGSV26LMLEXZFQ8T' where id=2; -update noar tt set b1='XNUO087QXE2DW2S2RN' where id=2; -update noar ti set b1='XNUO087QXE2DW2S2RN' where id=2; -update noar tt set v0='WXBLHR5O9S26KJ' where id=2; -update noar ti set v0='WXBLHR5O9S26KJ' where id=2; -update noar tt set b2='FBZ2G4EC1TL0Z' where id=2; -update noar ti set b2='FBZ2G4EC1TL0Z' where id=2; -update noar tt set v0='G5MTX6MM' where id=3; -update noar ti set v0='G5MTX6MM' where id=3; -update noar tt set b0='MJ90DEZCR89NDZEM1YFVF5O3X' where id=3; -update noar ti set b0='MJ90DEZCR89NDZEM1YFVF5O3X' where id=3; -update noar tt set v0='EPVJTJWUX2J5WJ8POC0' where id=3; -update noar ti set v0='EPVJTJWUX2J5WJ8POC0' where id=3; -update noar tt set b1='XZK8ONZZB38V6XFB4RQY' where id=3; -update noar ti set b1='XZK8ONZZB38V6XFB4RQY' where id=3; -update noar tt set v0='1JVN3HYNHN8VSWLKIDB6JJVH7R4D' where id=3; -update noar ti set v0='1JVN3HYNHN8VSWLKIDB6JJVH7R4D' where id=3; -update noar tt set b2='6BCT9YG7Q' where id=3; -update noar ti set b2='6BCT9YG7Q' where id=3; -update noar tt set v0='KZCKIHDO68' where id=4; -update noar ti set v0='KZCKIHDO68' where id=4; -update noar tt set b0='3ZBSXY8HC6V0V' where id=4; -update noar ti set b0='3ZBSXY8HC6V0V' where id=4; -update noar tt set v0='MDQ0NC6DUQ8RHHMLCTWRNEYJDA61R' where id=4; -update noar ti set v0='MDQ0NC6DUQ8RHHMLCTWRNEYJDA61R' where id=4; -update noar tt set b1='IUR6XIDPH3S53428KL62E' where id=4; -update noar ti set b1='IUR6XIDPH3S53428KL62E' where id=4; -update noar tt set v0='UGG5Q22T71' where id=4; -update noar ti set v0='UGG5Q22T71' where id=4; -update noar tt set b2='I84P493V' where id=4; -update noar ti set b2='I84P493V' where id=4; -update noar tt set v0='3SKVU9U' where id=5; -update noar ti set v0='3SKVU9U' where id=5; -update noar tt set b0='Z8UN8Y6ONX3OVNF9HJ' where id=5; -update noar ti set b0='Z8UN8Y6ONX3OVNF9HJ' where id=5; -update noar tt set v0='ZKN87Y91E92' where id=5; -update noar ti set v0='ZKN87Y91E92' where id=5; -update noar tt set b1='ORNCL32BWWCE0Y7K8H' where id=5; -update noar ti set b1='ORNCL32BWWCE0Y7K8H' where id=5; -update noar tt set v0='1' where id=5; -update noar ti set v0='1' where id=5; -update noar tt set b2='LUZMB9L7EOBP9ECU2JQIL7' where id=5; -update noar ti set b2='LUZMB9L7EOBP9ECU2JQIL7' where id=5; -update noar tt set v0='E6RZC5A1VJ7UNHDZSS806C8Z' where id=6; -update noar ti set v0='E6RZC5A1VJ7UNHDZSS806C8Z' where id=6; -update noar tt set b0='P3IST8MDNY' where id=6; -update noar ti set b0='P3IST8MDNY' where id=6; -update noar tt set v0='XQ5' where id=6; -update noar ti set v0='XQ5' where id=6; -update noar tt set b1='YEYC0C43E6CRC19QASY4VISNRHQZ2C' where id=6; -update noar ti set b1='YEYC0C43E6CRC19QASY4VISNRHQZ2C' where id=6; -update noar tt set v0='OBY0G0PUUJRBQBINB04KOFAI261FIX0' where id=6; -update noar ti set v0='OBY0G0PUUJRBQBINB04KOFAI261FIX0' where id=6; -update noar tt set b2='IHQ7RRK2HRFMT3Y3F22UD' where id=6; -update noar ti set b2='IHQ7RRK2HRFMT3Y3F22UD' where id=6; -update noar tt set v0='MBNPX9BQGA7HQCG6TFJW0CB' where id=7; -update noar ti set v0='MBNPX9BQGA7HQCG6TFJW0CB' where id=7; -update noar tt set b0='LOP4D' where id=7; -update noar ti set b0='LOP4D' where id=7; -update noar tt set v0='YQ6J3XV79NKRAPOWVK4CP7R8Q1ZNIHJ' where id=7; -update noar ti set v0='YQ6J3XV79NKRAPOWVK4CP7R8Q1ZNIHJ' where id=7; -update noar tt set b1='SYPK32' where id=7; -update noar ti set b1='SYPK32' where id=7; -update noar tt set v0='LD' where id=7; -update noar ti set v0='LD' where id=7; -update noar tt set b2='C6AH3YQ7FY5O1SV300TCOA2HRBCRJ8' where id=7; -update noar ti set b2='C6AH3YQ7FY5O1SV300TCOA2HRBCRJ8' where id=7; -update noar tt set v0='SQ0IIA75ERHFB1' where id=8; -update noar ti set v0='SQ0IIA75ERHFB1' where id=8; -update noar tt set b0='M10NQVJL21TE1VR6DV' where id=8; -update noar ti set b0='M10NQVJL21TE1VR6DV' where id=8; -update noar tt set v0='GZKT2DLPN6WW9T499E' where id=8; -update noar ti set v0='GZKT2DLPN6WW9T499E' where id=8; -update noar tt set b1='VE599MSD5X' where id=8; -update noar ti set b1='VE599MSD5X' where id=8; -update noar tt set v0='OVGL29VY68UL038ZGMX0OACD19' where id=8; -update noar ti set v0='OVGL29VY68UL038ZGMX0OACD19' where id=8; -update noar tt set b2='O8GBPNTCFFBS26BMTRPZ729P0PD' where id=8; -update noar ti set b2='O8GBPNTCFFBS26BMTRPZ729P0PD' where id=8; -update noar tt set v0='AJBQCQ0FKGVM3H5ZMW9HFORKK7' where id=9; -update noar ti set v0='AJBQCQ0FKGVM3H5ZMW9HFORKK7' where id=9; -update noar tt set b0='KXTSIXGF' where id=9; -update noar ti set b0='KXTSIXGF' where id=9; -update noar tt set v0='9IVFLPZ2' where id=9; -update noar ti set v0='9IVFLPZ2' where id=9; -update noar tt set b1='AW8YKSIQOKO2DW68K8KAODZB1OVAER6' where id=9; -update noar ti set b1='AW8YKSIQOKO2DW68K8KAODZB1OVAER6' where id=9; -update noar tt set v0='WK8VFMLB16ME5MHHUFY3ZISFDE' where id=9; -update noar ti set v0='WK8VFMLB16ME5MHHUFY3ZISFDE' where id=9; -update noar tt set b2='CRIKIZKM3J025XCCCX1MXO' where id=9; -update noar ti set b2='CRIKIZKM3J025XCCCX1MXO' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 longblob not null, - b1 mediumblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='ZH1TFZ81TLN11R595U8V7X407JGQ68' where id=1; -update noar ti set v0='ZH1TFZ81TLN11R595U8V7X407JGQ68' where id=1; -update noar tt set b0='72LS2M4YJDXD' where id=1; -update noar ti set b0='72LS2M4YJDXD' where id=1; -update noar tt set v0='UWVM8Q6345VJAMSF6T06SYTXZX' where id=1; -update noar ti set v0='UWVM8Q6345VJAMSF6T06SYTXZX' where id=1; -update noar tt set b1='LCYPKWBO8YE6H7GDVQZVCYPDY0A6Y14' where id=1; -update noar ti set b1='LCYPKWBO8YE6H7GDVQZVCYPDY0A6Y14' where id=1; -update noar tt set v0='ZHG308' where id=1; -update noar ti set v0='ZHG308' where id=1; -update noar tt set b2='M0CEW9C' where id=1; -update noar ti set b2='M0CEW9C' where id=1; -update noar tt set v0='VKTY2ZMT4AYDUNHMYK' where id=2; -update noar ti set v0='VKTY2ZMT4AYDUNHMYK' where id=2; -update noar tt set b0='U4R7GFY0VPJSTBLC8W1T1RI7ZI8' where id=2; -update noar ti set b0='U4R7GFY0VPJSTBLC8W1T1RI7ZI8' where id=2; -update noar tt set v0='6XP0J5V' where id=2; -update noar ti set v0='6XP0J5V' where id=2; -update noar tt set b1='2UO54AUG1RFKZ' where id=2; -update noar ti set b1='2UO54AUG1RFKZ' where id=2; -update noar tt set v0='FLMK2O3O7XW1LZVYXSDUVRXACQZRIR' where id=2; -update noar ti set v0='FLMK2O3O7XW1LZVYXSDUVRXACQZRIR' where id=2; -update noar tt set b2='R1XTLNTXROFKYPF40A0Y5K1' where id=2; -update noar ti set b2='R1XTLNTXROFKYPF40A0Y5K1' where id=2; -update noar tt set v0='MHNPHHW7' where id=3; -update noar ti set v0='MHNPHHW7' where id=3; -update noar tt set b0='FS9LSQRKPF77QRDMO4' where id=3; -update noar ti set b0='FS9LSQRKPF77QRDMO4' where id=3; -update noar tt set v0='O9BI0WGMD6YT7R6MPWXX32IH' where id=3; -update noar ti set v0='O9BI0WGMD6YT7R6MPWXX32IH' where id=3; -update noar tt set b1='BGE6F42ZE922TU4SD36VPLJ' where id=3; -update noar ti set b1='BGE6F42ZE922TU4SD36VPLJ' where id=3; -update noar tt set v0='NIEMYE13POB2VIK86Z2EBN5' where id=3; -update noar ti set v0='NIEMYE13POB2VIK86Z2EBN5' where id=3; -update noar tt set b2='3' where id=3; -update noar ti set b2='3' where id=3; -update noar tt set v0='V17V33W179' where id=4; -update noar ti set v0='V17V33W179' where id=4; -update noar tt set b0='KOCJSJYVH0MZ5M19Y8VW' where id=4; -update noar ti set b0='KOCJSJYVH0MZ5M19Y8VW' where id=4; -update noar tt set v0='QZ7X' where id=4; -update noar ti set v0='QZ7X' where id=4; -update noar tt set b1='7IG' where id=4; -update noar ti set b1='7IG' where id=4; -update noar tt set v0='8XRY8VV4' where id=4; -update noar ti set v0='8XRY8VV4' where id=4; -update noar tt set b2='F9KCRAMOX' where id=4; -update noar ti set b2='F9KCRAMOX' where id=4; -update noar tt set v0='BTA69' where id=5; -update noar ti set v0='BTA69' where id=5; -update noar tt set b0='AUSE5LIB1D8J1RUI7CMKD9' where id=5; -update noar ti set b0='AUSE5LIB1D8J1RUI7CMKD9' where id=5; -update noar tt set v0='5RH2LJHDGKEE6OREV4UILWQA' where id=5; -update noar ti set v0='5RH2LJHDGKEE6OREV4UILWQA' where id=5; -update noar tt set b1='3AN82BKB715CQXR6EDY5I5KQ1SR6RQ8J' where id=5; -update noar ti set b1='3AN82BKB715CQXR6EDY5I5KQ1SR6RQ8J' where id=5; -update noar tt set v0='W28OJ9X3C1RLQ3L7KOOP2F7YM' where id=5; -update noar ti set v0='W28OJ9X3C1RLQ3L7KOOP2F7YM' where id=5; -update noar tt set b2='H1PFDRF7WP29AFRHMJZOG5IX0LSVVZ' where id=5; -update noar ti set b2='H1PFDRF7WP29AFRHMJZOG5IX0LSVVZ' where id=5; -update noar tt set v0='RPW5T8FYOPM2TN1JNVZEMA3QXVR5' where id=6; -update noar ti set v0='RPW5T8FYOPM2TN1JNVZEMA3QXVR5' where id=6; -update noar tt set b0='D2EL72ESP446YH' where id=6; -update noar ti set b0='D2EL72ESP446YH' where id=6; -update noar tt set v0='DDOB0SN5HM0FQG4MM70L4BATFQ65TEP' where id=6; -update noar ti set v0='DDOB0SN5HM0FQG4MM70L4BATFQ65TEP' where id=6; -update noar tt set b1='8099L' where id=6; -update noar ti set b1='8099L' where id=6; -update noar tt set v0='20SHNTYE2VMGG9GIXK' where id=6; -update noar ti set v0='20SHNTYE2VMGG9GIXK' where id=6; -update noar tt set b2='KGLOVNR3R5OC6KYSYQZT9Q' where id=6; -update noar ti set b2='KGLOVNR3R5OC6KYSYQZT9Q' where id=6; -update noar tt set v0='HK82FN' where id=7; -update noar ti set v0='HK82FN' where id=7; -update noar tt set b0='I10FAXAQK1EBKFHRZUBZ' where id=7; -update noar ti set b0='I10FAXAQK1EBKFHRZUBZ' where id=7; -update noar tt set v0='BU03' where id=7; -update noar ti set v0='BU03' where id=7; -update noar tt set b1='ZR7XX7HQ0HUCMU851983W275VKM5LQCR' where id=7; -update noar ti set b1='ZR7XX7HQ0HUCMU851983W275VKM5LQCR' where id=7; -update noar tt set v0='PBQVNAGNWP678UAQWV2ONXSBU' where id=7; -update noar ti set v0='PBQVNAGNWP678UAQWV2ONXSBU' where id=7; -update noar tt set b2='TODWD481ZJC2JZ' where id=7; -update noar ti set b2='TODWD481ZJC2JZ' where id=7; -update noar tt set v0='5' where id=8; -update noar ti set v0='5' where id=8; -update noar tt set b0='HQ6J28DAFS64264HEOJUJN0VY' where id=8; -update noar ti set b0='HQ6J28DAFS64264HEOJUJN0VY' where id=8; -update noar tt set v0='MEOTLCQHRL60BPTXT' where id=8; -update noar ti set v0='MEOTLCQHRL60BPTXT' where id=8; -update noar tt set b1='HAXDD6AKW0D1IPY' where id=8; -update noar ti set b1='HAXDD6AKW0D1IPY' where id=8; -update noar tt set v0='NG0MA83UE' where id=8; -update noar ti set v0='NG0MA83UE' where id=8; -update noar tt set b2='WOLTOVV62CCIYYMW1N1D' where id=8; -update noar ti set b2='WOLTOVV62CCIYYMW1N1D' where id=8; -update noar tt set v0='NHL8D5' where id=9; -update noar ti set v0='NHL8D5' where id=9; -update noar tt set b0='T3SPV0RLXMZ5MCYNYW9V' where id=9; -update noar ti set b0='T3SPV0RLXMZ5MCYNYW9V' where id=9; -update noar tt set v0='GVZULKGGT' where id=9; -update noar ti set v0='GVZULKGGT' where id=9; -update noar tt set b1='ZVKGLZN' where id=9; -update noar ti set b1='ZVKGLZN' where id=9; -update noar tt set v0='7838230IEEWPJYQ19Q2XG' where id=9; -update noar ti set v0='7838230IEEWPJYQ19Q2XG' where id=9; -update noar tt set b2='PMVF1TZRSE1JZVSPT7Q41XCT' where id=9; -update noar ti set b2='PMVF1TZRSE1JZVSPT7Q41XCT' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 longblob null, - b1 longblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='LE77E' where id=1; -update noar ti set v0='LE77E' where id=1; -update noar tt set b0='DBLRKONL' where id=1; -update noar ti set b0='DBLRKONL' where id=1; -update noar tt set v0='QWI9VG1K2W5' where id=1; -update noar ti set v0='QWI9VG1K2W5' where id=1; -update noar tt set b1='JIXJDHN6H6SYB0S07QWA58M14WP6' where id=1; -update noar ti set b1='JIXJDHN6H6SYB0S07QWA58M14WP6' where id=1; -update noar tt set v0='TA5IGNDGFGD39RNKCQZQ1S' where id=1; -update noar ti set v0='TA5IGNDGFGD39RNKCQZQ1S' where id=1; -update noar tt set b2='JFRXOZ3TJO4UXEF0T09VSV3' where id=1; -update noar ti set b2='JFRXOZ3TJO4UXEF0T09VSV3' where id=1; -update noar tt set v0='ZYEZJ8K' where id=2; -update noar ti set v0='ZYEZJ8K' where id=2; -update noar tt set b0='WBVUH62MOPZECYHI5559' where id=2; -update noar ti set b0='WBVUH62MOPZECYHI5559' where id=2; -update noar tt set v0='RW56J' where id=2; -update noar ti set v0='RW56J' where id=2; -update noar tt set b1='PRWW5QOHUI20X07RINST1UNJ8V5CJ' where id=2; -update noar ti set b1='PRWW5QOHUI20X07RINST1UNJ8V5CJ' where id=2; -update noar tt set v0='VHGN3IGBLZN' where id=2; -update noar ti set v0='VHGN3IGBLZN' where id=2; -update noar tt set b2='B1RFAYWRDZ3COH8BIBRNZJ1RTMJF8U' where id=2; -update noar ti set b2='B1RFAYWRDZ3COH8BIBRNZJ1RTMJF8U' where id=2; -update noar tt set v0='GJJ3' where id=3; -update noar ti set v0='GJJ3' where id=3; -update noar tt set b0='VNX4VJOINCEV3AALGU90LYDV6B99REE' where id=3; -update noar ti set b0='VNX4VJOINCEV3AALGU90LYDV6B99REE' where id=3; -update noar tt set v0='FRRHASR4A7GADCJWGXMTPBEXS' where id=3; -update noar ti set v0='FRRHASR4A7GADCJWGXMTPBEXS' where id=3; -update noar tt set b1='ZPA8PX60WDY2XKGC2VC9Q6XHJEH' where id=3; -update noar ti set b1='ZPA8PX60WDY2XKGC2VC9Q6XHJEH' where id=3; -update noar tt set v0='WW7W' where id=3; -update noar ti set v0='WW7W' where id=3; -update noar tt set b2='W3MP' where id=3; -update noar ti set b2='W3MP' where id=3; -update noar tt set v0='8NIB1GCG86BDGZZS1FQ3MKNI77RP' where id=4; -update noar ti set v0='8NIB1GCG86BDGZZS1FQ3MKNI77RP' where id=4; -update noar tt set b0='3425PRNQ8SXL1F7YO' where id=4; -update noar ti set b0='3425PRNQ8SXL1F7YO' where id=4; -update noar tt set v0='WTRXLPM7XWJI2OR' where id=4; -update noar ti set v0='WTRXLPM7XWJI2OR' where id=4; -update noar tt set b1='RNP8GVFPPPWG609847B' where id=4; -update noar ti set b1='RNP8GVFPPPWG609847B' where id=4; -update noar tt set v0='8G' where id=4; -update noar ti set v0='8G' where id=4; -update noar tt set b2='X' where id=4; -update noar ti set b2='X' where id=4; -update noar tt set v0='5DK7EGZI9Y' where id=5; -update noar ti set v0='5DK7EGZI9Y' where id=5; -update noar tt set b0='GRGKXIMMHJO94CYJ9MAKE0FK4' where id=5; -update noar ti set b0='GRGKXIMMHJO94CYJ9MAKE0FK4' where id=5; -update noar tt set v0='OR4PX1WF2G' where id=5; -update noar ti set v0='OR4PX1WF2G' where id=5; -update noar tt set b1='POO8IY' where id=5; -update noar ti set b1='POO8IY' where id=5; -update noar tt set v0='89C2MZWNO4926BA7ENZI2ORAQ1IOOI' where id=5; -update noar ti set v0='89C2MZWNO4926BA7ENZI2ORAQ1IOOI' where id=5; -update noar tt set b2='FOKG' where id=5; -update noar ti set b2='FOKG' where id=5; -update noar tt set v0='NY0W0L4K2HJGD81C2X8OCF' where id=6; -update noar ti set v0='NY0W0L4K2HJGD81C2X8OCF' where id=6; -update noar tt set b0='4DUST3OJQ8J3UXKXWPZNYUSDME51PSQ' where id=6; -update noar ti set b0='4DUST3OJQ8J3UXKXWPZNYUSDME51PSQ' where id=6; -update noar tt set v0='1JYIPB1FF5VSXFSGKWB5HP' where id=6; -update noar ti set v0='1JYIPB1FF5VSXFSGKWB5HP' where id=6; -update noar tt set b1='19KHDEA1J25JSYNKJ8DB3MICQ' where id=6; -update noar ti set b1='19KHDEA1J25JSYNKJ8DB3MICQ' where id=6; -update noar tt set v0='ILCEOH1F85WFFQPN' where id=6; -update noar ti set v0='ILCEOH1F85WFFQPN' where id=6; -update noar tt set b2='BDH5PGE1K6R' where id=6; -update noar ti set b2='BDH5PGE1K6R' where id=6; -update noar tt set v0='T5' where id=7; -update noar ti set v0='T5' where id=7; -update noar tt set b0='JRPH' where id=7; -update noar ti set b0='JRPH' where id=7; -update noar tt set v0='X83G5NATI1WK2ACTAVJWJDEVVR5F1' where id=7; -update noar ti set v0='X83G5NATI1WK2ACTAVJWJDEVVR5F1' where id=7; -update noar tt set b1='TOU8LL26' where id=7; -update noar ti set b1='TOU8LL26' where id=7; -update noar tt set v0='O' where id=7; -update noar ti set v0='O' where id=7; -update noar tt set b2='0' where id=7; -update noar ti set b2='0' where id=7; -update noar tt set v0='1S6QQV39EM80' where id=8; -update noar ti set v0='1S6QQV39EM80' where id=8; -update noar tt set b0='0F12G0Z9M7J1RA9UTE2A' where id=8; -update noar ti set b0='0F12G0Z9M7J1RA9UTE2A' where id=8; -update noar tt set v0='STFID1XJJTZUT6RC8X6OMF' where id=8; -update noar ti set v0='STFID1XJJTZUT6RC8X6OMF' where id=8; -update noar tt set b1='51F' where id=8; -update noar ti set b1='51F' where id=8; -update noar tt set v0='O4Z421BB16A6ROXPQKYYWYDY7BHHNUO' where id=8; -update noar ti set v0='O4Z421BB16A6ROXPQKYYWYDY7BHHNUO' where id=8; -update noar tt set b2='7Z6' where id=8; -update noar ti set b2='7Z6' where id=8; -update noar tt set v0='ZYSI' where id=9; -update noar ti set v0='ZYSI' where id=9; -update noar tt set b0='3YEINTO537GEUG03K000RZAYH5Z' where id=9; -update noar ti set b0='3YEINTO537GEUG03K000RZAYH5Z' where id=9; -update noar tt set v0='LSUOEYIHZP2PTA' where id=9; -update noar ti set v0='LSUOEYIHZP2PTA' where id=9; -update noar tt set b1='QDV3MRPS' where id=9; -update noar ti set b1='QDV3MRPS' where id=9; -update noar tt set v0='H50G3PABPMQ6I94LAQAB3N8Y9MA6BVO' where id=9; -update noar ti set v0='H50G3PABPMQ6I94LAQAB3N8Y9MA6BVO' where id=9; -update noar tt set b2='JPGM3T05Z6VFU29585DR' where id=9; -update noar ti set b2='JPGM3T05Z6VFU29585DR' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 longblob null, - b1 longblob null, - b2 tinyblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='6' where id=1; -update noar ti set v0='6' where id=1; -update noar tt set b0='US4ATMUKEBZM' where id=1; -update noar ti set b0='US4ATMUKEBZM' where id=1; -update noar tt set v0='PO671AYD4PNRQM' where id=1; -update noar ti set v0='PO671AYD4PNRQM' where id=1; -update noar tt set b1='6' where id=1; -update noar ti set b1='6' where id=1; -update noar tt set v0='Y0YKCBOJQ0SPEX0IV6' where id=1; -update noar ti set v0='Y0YKCBOJQ0SPEX0IV6' where id=1; -update noar tt set b2='90E9F' where id=1; -update noar ti set b2='90E9F' where id=1; -update noar tt set v0='WGN4E92CYV4LE3P59S' where id=2; -update noar ti set v0='WGN4E92CYV4LE3P59S' where id=2; -update noar tt set b0='3XJPS7CAN4WRL6527MULO9H8MJ' where id=2; -update noar ti set b0='3XJPS7CAN4WRL6527MULO9H8MJ' where id=2; -update noar tt set v0='KC067CC836LE9C40X7IY6HXPPT' where id=2; -update noar ti set v0='KC067CC836LE9C40X7IY6HXPPT' where id=2; -update noar tt set b1='9238' where id=2; -update noar ti set b1='9238' where id=2; -update noar tt set v0='4KHWURCRKU0ULXCBPIFQEC' where id=2; -update noar ti set v0='4KHWURCRKU0ULXCBPIFQEC' where id=2; -update noar tt set b2='G' where id=2; -update noar ti set b2='G' where id=2; -update noar tt set v0='1NJ7LM61CXS9NQFE7' where id=3; -update noar ti set v0='1NJ7LM61CXS9NQFE7' where id=3; -update noar tt set b0='IX8U1Q3NTKH79B4GSIFT63RK' where id=3; -update noar ti set b0='IX8U1Q3NTKH79B4GSIFT63RK' where id=3; -update noar tt set v0='ZQ685LDAPNZ0MEXGNE9JZ' where id=3; -update noar ti set v0='ZQ685LDAPNZ0MEXGNE9JZ' where id=3; -update noar tt set b1='ZISHL16ER9XK84O4NCKGSC97D4' where id=3; -update noar ti set b1='ZISHL16ER9XK84O4NCKGSC97D4' where id=3; -update noar tt set v0='8' where id=3; -update noar ti set v0='8' where id=3; -update noar tt set b2='RL6JWGO77OXZKLZTHJCE1' where id=3; -update noar ti set b2='RL6JWGO77OXZKLZTHJCE1' where id=3; -update noar tt set v0='KFCF4Y6KMBUIF' where id=4; -update noar ti set v0='KFCF4Y6KMBUIF' where id=4; -update noar tt set b0='4ZT4VCBLOKZH2ETNQQNTP5KV0Y' where id=4; -update noar ti set b0='4ZT4VCBLOKZH2ETNQQNTP5KV0Y' where id=4; -update noar tt set v0='DDOG' where id=4; -update noar ti set v0='DDOG' where id=4; -update noar tt set b1='2UVOD1LZXJGNYDMB' where id=4; -update noar ti set b1='2UVOD1LZXJGNYDMB' where id=4; -update noar tt set v0='SI4REPI8A3JVD21S8JX4HV3YZG1PY3VP' where id=4; -update noar ti set v0='SI4REPI8A3JVD21S8JX4HV3YZG1PY3VP' where id=4; -update noar tt set b2='ZEJ2TRU6LNKLCAHHMAA' where id=4; -update noar ti set b2='ZEJ2TRU6LNKLCAHHMAA' where id=4; -update noar tt set v0='RD42DBX0M0HN5KTZ4BUR6' where id=5; -update noar ti set v0='RD42DBX0M0HN5KTZ4BUR6' where id=5; -update noar tt set b0='Z9E520' where id=5; -update noar ti set b0='Z9E520' where id=5; -update noar tt set v0='0OYSU4Q' where id=5; -update noar ti set v0='0OYSU4Q' where id=5; -update noar tt set b1='7MKYBQJHOO8WC' where id=5; -update noar ti set b1='7MKYBQJHOO8WC' where id=5; -update noar tt set v0='8T6JWTZ6B' where id=5; -update noar ti set v0='8T6JWTZ6B' where id=5; -update noar tt set b2='83H80G45GR3' where id=5; -update noar ti set b2='83H80G45GR3' where id=5; -update noar tt set v0='5DJEHJ4JTX58WUTE' where id=6; -update noar ti set v0='5DJEHJ4JTX58WUTE' where id=6; -update noar tt set b0='JGZT2QS37N9ZEE2SCHI66NGBGNQG87' where id=6; -update noar ti set b0='JGZT2QS37N9ZEE2SCHI66NGBGNQG87' where id=6; -update noar tt set v0='S2UH3F6TXP' where id=6; -update noar ti set v0='S2UH3F6TXP' where id=6; -update noar tt set b1='WQUCJVWWZ14KF' where id=6; -update noar ti set b1='WQUCJVWWZ14KF' where id=6; -update noar tt set v0='UMQ2PJ' where id=6; -update noar ti set v0='UMQ2PJ' where id=6; -update noar tt set b2='CS9M' where id=6; -update noar ti set b2='CS9M' where id=6; -update noar tt set v0='M0Y6KKWGSPE' where id=7; -update noar ti set v0='M0Y6KKWGSPE' where id=7; -update noar tt set b0='4DA5MTAB4N' where id=7; -update noar ti set b0='4DA5MTAB4N' where id=7; -update noar tt set v0='2ARPR017U' where id=7; -update noar ti set v0='2ARPR017U' where id=7; -update noar tt set b1='WB' where id=7; -update noar ti set b1='WB' where id=7; -update noar tt set v0='P0NJ8KPKEFXRR3GCWWY' where id=7; -update noar ti set v0='P0NJ8KPKEFXRR3GCWWY' where id=7; -update noar tt set b2='7GA3' where id=7; -update noar ti set b2='7GA3' where id=7; -update noar tt set v0='18XC4VQW6' where id=8; -update noar ti set v0='18XC4VQW6' where id=8; -update noar tt set b0='V7A4EM87' where id=8; -update noar ti set b0='V7A4EM87' where id=8; -update noar tt set v0='GSDWAGS2XMRFUVKS8Y5NQWLWM5IM4S1B' where id=8; -update noar ti set v0='GSDWAGS2XMRFUVKS8Y5NQWLWM5IM4S1B' where id=8; -update noar tt set b1='CFFZDJSJJQ3C32XVOE9HQ4T' where id=8; -update noar ti set b1='CFFZDJSJJQ3C32XVOE9HQ4T' where id=8; -update noar tt set v0='DZK8O9BTTIWEU7XN84YDESY61' where id=8; -update noar ti set v0='DZK8O9BTTIWEU7XN84YDESY61' where id=8; -update noar tt set b2='3XR7V98QU8SKOPGKXY' where id=8; -update noar ti set b2='3XR7V98QU8SKOPGKXY' where id=8; -update noar tt set v0='FYMG57DSX4PKN60AF7KFIEFZK5XBUG2' where id=9; -update noar ti set v0='FYMG57DSX4PKN60AF7KFIEFZK5XBUG2' where id=9; -update noar tt set b0='3KF' where id=9; -update noar ti set b0='3KF' where id=9; -update noar tt set v0='QJ4' where id=9; -update noar ti set v0='QJ4' where id=9; -update noar tt set b1='7H752FL6HSZ6QCYPPKB8X9Q3MSD' where id=9; -update noar ti set b1='7H752FL6HSZ6QCYPPKB8X9Q3MSD' where id=9; -update noar tt set v0='01H2432K4ELT78BCC5T43VN' where id=9; -update noar ti set v0='01H2432K4ELT78BCC5T43VN' where id=9; -update noar tt set b2='CSN100AKXU2UTC0SKPUHT6D7Q5DOX' where id=9; -update noar ti set b2='CSN100AKXU2UTC0SKPUHT6D7Q5DOX' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 longblob not null, - b1 longblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='F3R16IWBI1' where id=1; -update noar ti set v0='F3R16IWBI1' where id=1; -update noar tt set b0='0BNGO0FHP' where id=1; -update noar ti set b0='0BNGO0FHP' where id=1; -update noar tt set v0='GRTFJROM63ED8P8C8QXV98' where id=1; -update noar ti set v0='GRTFJROM63ED8P8C8QXV98' where id=1; -update noar tt set b1='NE7EGR10V3AEJPHMOKOPJAU17N5K' where id=1; -update noar ti set b1='NE7EGR10V3AEJPHMOKOPJAU17N5K' where id=1; -update noar tt set v0='BD4AHS' where id=1; -update noar ti set v0='BD4AHS' where id=1; -update noar tt set b2='R23B3AF19AC9YE' where id=1; -update noar ti set b2='R23B3AF19AC9YE' where id=1; -update noar tt set v0='3XLCF7QRZCAW1K8F90' where id=2; -update noar ti set v0='3XLCF7QRZCAW1K8F90' where id=2; -update noar tt set b0='IBA8CC5BQCVCSGVZG' where id=2; -update noar ti set b0='IBA8CC5BQCVCSGVZG' where id=2; -update noar tt set v0='UR1UEW9X58ZK3LB4KE2AQ' where id=2; -update noar ti set v0='UR1UEW9X58ZK3LB4KE2AQ' where id=2; -update noar tt set b1='U41DLMCW8' where id=2; -update noar ti set b1='U41DLMCW8' where id=2; -update noar tt set v0='0E703N2IH3ZBEKNR7R3J' where id=2; -update noar ti set v0='0E703N2IH3ZBEKNR7R3J' where id=2; -update noar tt set b2='OZ5PX8VJGD1L3094FKJDOZOW1D2' where id=2; -update noar ti set b2='OZ5PX8VJGD1L3094FKJDOZOW1D2' where id=2; -update noar tt set v0='7ZG2WNP5K5Z3HH7T6U8LJT91' where id=3; -update noar ti set v0='7ZG2WNP5K5Z3HH7T6U8LJT91' where id=3; -update noar tt set b0='HG4DF0D4BP15FNBIVIQ2KCWLMFQI' where id=3; -update noar ti set b0='HG4DF0D4BP15FNBIVIQ2KCWLMFQI' where id=3; -update noar tt set v0='TV3E8S9' where id=3; -update noar ti set v0='TV3E8S9' where id=3; -update noar tt set b1='XO037GKYSAGDK26NTX2JIYVR6' where id=3; -update noar ti set b1='XO037GKYSAGDK26NTX2JIYVR6' where id=3; -update noar tt set v0='UGFO65AWN0EJZUT3COQPLSEHN6' where id=3; -update noar ti set v0='UGFO65AWN0EJZUT3COQPLSEHN6' where id=3; -update noar tt set b2='PD46IS543T' where id=3; -update noar ti set b2='PD46IS543T' where id=3; -update noar tt set v0='S6JUY3V9' where id=4; -update noar ti set v0='S6JUY3V9' where id=4; -update noar tt set b0='FBRYCZ06YHTNN1YDLYACW7SSR5EHEQS' where id=4; -update noar ti set b0='FBRYCZ06YHTNN1YDLYACW7SSR5EHEQS' where id=4; -update noar tt set v0='EE7X2LFKGKW' where id=4; -update noar ti set v0='EE7X2LFKGKW' where id=4; -update noar tt set b1='7' where id=4; -update noar ti set b1='7' where id=4; -update noar tt set v0='5A9' where id=4; -update noar ti set v0='5A9' where id=4; -update noar tt set b2='IYZ2Q6VZREMCZRO4SAS4DOUJ7QGTNVP' where id=4; -update noar ti set b2='IYZ2Q6VZREMCZRO4SAS4DOUJ7QGTNVP' where id=4; -update noar tt set v0='B0CHY56DVWKWY8F8IC7TTTZMSOP1' where id=5; -update noar ti set v0='B0CHY56DVWKWY8F8IC7TTTZMSOP1' where id=5; -update noar tt set b0='2SASR7' where id=5; -update noar ti set b0='2SASR7' where id=5; -update noar tt set v0='XKISCEET6LG' where id=5; -update noar ti set v0='XKISCEET6LG' where id=5; -update noar tt set b1='DR9GPRNQH9KEV0LYG3F3' where id=5; -update noar ti set b1='DR9GPRNQH9KEV0LYG3F3' where id=5; -update noar tt set v0='II7LOD36CAR2HNTGBENX' where id=5; -update noar ti set v0='II7LOD36CAR2HNTGBENX' where id=5; -update noar tt set b2='MBY5RCYSH' where id=5; -update noar ti set b2='MBY5RCYSH' where id=5; -update noar tt set v0='GVJWR7KC9TCY2KIR4I5YW' where id=6; -update noar ti set v0='GVJWR7KC9TCY2KIR4I5YW' where id=6; -update noar tt set b0='L0570NIN17TQ0VKC' where id=6; -update noar ti set b0='L0570NIN17TQ0VKC' where id=6; -update noar tt set v0='7O7JSUFYHN0S4WRCDIRD' where id=6; -update noar ti set v0='7O7JSUFYHN0S4WRCDIRD' where id=6; -update noar tt set b1='NFSIFRK126XXUNAG38MMX6Q5QOEZ0W' where id=6; -update noar ti set b1='NFSIFRK126XXUNAG38MMX6Q5QOEZ0W' where id=6; -update noar tt set v0='NSP' where id=6; -update noar ti set v0='NSP' where id=6; -update noar tt set b2='IYI1B13P3D0B7JJCN' where id=6; -update noar ti set b2='IYI1B13P3D0B7JJCN' where id=6; -update noar tt set v0='JXC4' where id=7; -update noar ti set v0='JXC4' where id=7; -update noar tt set b0='XPQTVJGJ8TNR3YT0D' where id=7; -update noar ti set b0='XPQTVJGJ8TNR3YT0D' where id=7; -update noar tt set v0='CUN4NTDZKRXWS5Q9M7CER' where id=7; -update noar ti set v0='CUN4NTDZKRXWS5Q9M7CER' where id=7; -update noar tt set b1='G8DHXTSGNXUW' where id=7; -update noar ti set b1='G8DHXTSGNXUW' where id=7; -update noar tt set v0='SUPO4N75K8' where id=7; -update noar ti set v0='SUPO4N75K8' where id=7; -update noar tt set b2='MRHFYKI' where id=7; -update noar ti set b2='MRHFYKI' where id=7; -update noar tt set v0='MTC5F1VCOEHNDPRY' where id=8; -update noar ti set v0='MTC5F1VCOEHNDPRY' where id=8; -update noar tt set b0='Z2551V8D2' where id=8; -update noar ti set b0='Z2551V8D2' where id=8; -update noar tt set v0='C034Y5CZBZ28RLGCK3XUO' where id=8; -update noar ti set v0='C034Y5CZBZ28RLGCK3XUO' where id=8; -update noar tt set b1='FXDRZE82LX' where id=8; -update noar ti set b1='FXDRZE82LX' where id=8; -update noar tt set v0='MHSJFLU' where id=8; -update noar ti set v0='MHSJFLU' where id=8; -update noar tt set b2='G6YUGUA83DX3X7F2YMO5P4L5' where id=8; -update noar ti set b2='G6YUGUA83DX3X7F2YMO5P4L5' where id=8; -update noar tt set v0='4RSFIHB7O0' where id=9; -update noar ti set v0='4RSFIHB7O0' where id=9; -update noar tt set b0='9TA' where id=9; -update noar ti set b0='9TA' where id=9; -update noar tt set v0='4XPAK' where id=9; -update noar ti set v0='4XPAK' where id=9; -update noar tt set b1='VFP2O' where id=9; -update noar ti set b1='VFP2O' where id=9; -update noar tt set v0='YSZFP4XUUNYF7HLHH9RR' where id=9; -update noar ti set v0='YSZFP4XUUNYF7HLHH9RR' where id=9; -update noar tt set b2='OZ92E63NCPEC9J2' where id=9; -update noar ti set b2='OZ92E63NCPEC9J2' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 longblob not null, - b1 longblob not null, - b2 tinyblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='NP4IKXAT99YOZVHRFT' where id=1; -update noar ti set v0='NP4IKXAT99YOZVHRFT' where id=1; -update noar tt set b0='Y7SYCX8W3' where id=1; -update noar ti set b0='Y7SYCX8W3' where id=1; -update noar tt set v0='C3H85HL2VOQ7KOPFHVW' where id=1; -update noar ti set v0='C3H85HL2VOQ7KOPFHVW' where id=1; -update noar tt set b1='ZBRD2' where id=1; -update noar ti set b1='ZBRD2' where id=1; -update noar tt set v0='D94' where id=1; -update noar ti set v0='D94' where id=1; -update noar tt set b2='Q45AV1HPLZZXZCIJQNC75IW9AVQ500JP' where id=1; -update noar ti set b2='Q45AV1HPLZZXZCIJQNC75IW9AVQ500JP' where id=1; -update noar tt set v0='0TQX0E5QUPPJEWPA075R3XZW2XNA' where id=2; -update noar ti set v0='0TQX0E5QUPPJEWPA075R3XZW2XNA' where id=2; -update noar tt set b0='4IRR5MMCRE9EHZV9TC7Z6CAPQNC1DD5H' where id=2; -update noar ti set b0='4IRR5MMCRE9EHZV9TC7Z6CAPQNC1DD5H' where id=2; -update noar tt set v0='BMYDWE8N65CZUXJMUJLQSRZO8YBF' where id=2; -update noar ti set v0='BMYDWE8N65CZUXJMUJLQSRZO8YBF' where id=2; -update noar tt set b1='QJZ' where id=2; -update noar ti set b1='QJZ' where id=2; -update noar tt set v0='I0KEDT2TTTC9WC4E0X2V3ZQOMMK' where id=2; -update noar ti set v0='I0KEDT2TTTC9WC4E0X2V3ZQOMMK' where id=2; -update noar tt set b2='B96X7N' where id=2; -update noar ti set b2='B96X7N' where id=2; -update noar tt set v0='9OA0JWUY9NYTZRO37SSYS49GJI7E14JU' where id=3; -update noar ti set v0='9OA0JWUY9NYTZRO37SSYS49GJI7E14JU' where id=3; -update noar tt set b0='T' where id=3; -update noar ti set b0='T' where id=3; -update noar tt set v0='Q6PD5P39JFEDMLL8TQTYAH1Y' where id=3; -update noar ti set v0='Q6PD5P39JFEDMLL8TQTYAH1Y' where id=3; -update noar tt set b1='SEQL908JJ3' where id=3; -update noar ti set b1='SEQL908JJ3' where id=3; -update noar tt set v0='94DWF5EFS2GAA6XADVR2Y' where id=3; -update noar ti set v0='94DWF5EFS2GAA6XADVR2Y' where id=3; -update noar tt set b2='6KW' where id=3; -update noar ti set b2='6KW' where id=3; -update noar tt set v0='DYAW77E3ZXD6N6PDS0HLFPUKQH4' where id=4; -update noar ti set v0='DYAW77E3ZXD6N6PDS0HLFPUKQH4' where id=4; -update noar tt set b0='97CC0OR4GU5YW34O9G3WE' where id=4; -update noar ti set b0='97CC0OR4GU5YW34O9G3WE' where id=4; -update noar tt set v0='G4C05B3MZO2QV00LI54DTFWFTJ77N652' where id=4; -update noar ti set v0='G4C05B3MZO2QV00LI54DTFWFTJ77N652' where id=4; -update noar tt set b1='2I04' where id=4; -update noar ti set b1='2I04' where id=4; -update noar tt set v0='XB7YSPC1' where id=4; -update noar ti set v0='XB7YSPC1' where id=4; -update noar tt set b2='ZI' where id=4; -update noar ti set b2='ZI' where id=4; -update noar tt set v0='4ORML134L4E7OV1' where id=5; -update noar ti set v0='4ORML134L4E7OV1' where id=5; -update noar tt set b0='0JQN0BUBFCF3LVNHIULT80SJMA1OB9A8' where id=5; -update noar ti set b0='0JQN0BUBFCF3LVNHIULT80SJMA1OB9A8' where id=5; -update noar tt set v0='6WNA1' where id=5; -update noar ti set v0='6WNA1' where id=5; -update noar tt set b1='KH2N21FZBVVNXT' where id=5; -update noar ti set b1='KH2N21FZBVVNXT' where id=5; -update noar tt set v0='71NU42PJCX40QBX' where id=5; -update noar ti set v0='71NU42PJCX40QBX' where id=5; -update noar tt set b2='OKT389OSLS8FGB4QWOHEJMKZQI751P' where id=5; -update noar ti set b2='OKT389OSLS8FGB4QWOHEJMKZQI751P' where id=5; -update noar tt set v0='DAFL6DFK' where id=6; -update noar ti set v0='DAFL6DFK' where id=6; -update noar tt set b0='TC0Y' where id=6; -update noar ti set b0='TC0Y' where id=6; -update noar tt set v0='PAP5Q5FU41ZKMAYUOU0Q50NOXKTQI' where id=6; -update noar ti set v0='PAP5Q5FU41ZKMAYUOU0Q50NOXKTQI' where id=6; -update noar tt set b1='5LPAKVBZ6H9QA24' where id=6; -update noar ti set b1='5LPAKVBZ6H9QA24' where id=6; -update noar tt set v0='ZITMKAM5BP9YCF0K' where id=6; -update noar ti set v0='ZITMKAM5BP9YCF0K' where id=6; -update noar tt set b2='KV6I8KFCOK' where id=6; -update noar ti set b2='KV6I8KFCOK' where id=6; -update noar tt set v0='3E559JVFAS' where id=7; -update noar ti set v0='3E559JVFAS' where id=7; -update noar tt set b0='3KSY9DVQRV95BIS5C7QNRXPB6' where id=7; -update noar ti set b0='3KSY9DVQRV95BIS5C7QNRXPB6' where id=7; -update noar tt set v0='WWJL5UQ' where id=7; -update noar ti set v0='WWJL5UQ' where id=7; -update noar tt set b1='KWL1BKB1L07N797' where id=7; -update noar ti set b1='KWL1BKB1L07N797' where id=7; -update noar tt set v0='4HFM5SHP3WNPI9J51JNBQPYBVR' where id=7; -update noar ti set v0='4HFM5SHP3WNPI9J51JNBQPYBVR' where id=7; -update noar tt set b2='GUI7C' where id=7; -update noar ti set b2='GUI7C' where id=7; -update noar tt set v0='249V3Y78FFR2WB6UYWTY' where id=8; -update noar ti set v0='249V3Y78FFR2WB6UYWTY' where id=8; -update noar tt set b0='HY5ECNKUT2FI' where id=8; -update noar ti set b0='HY5ECNKUT2FI' where id=8; -update noar tt set v0='4HU4W7R10OMZSZO21X2' where id=8; -update noar ti set v0='4HU4W7R10OMZSZO21X2' where id=8; -update noar tt set b1='D67TG1' where id=8; -update noar ti set b1='D67TG1' where id=8; -update noar tt set v0='4ZN6MOOH3K4UAA55MK7PLQ1MPE' where id=8; -update noar ti set v0='4ZN6MOOH3K4UAA55MK7PLQ1MPE' where id=8; -update noar tt set b2='3151T5O' where id=8; -update noar ti set b2='3151T5O' where id=8; -update noar tt set v0='6HFX' where id=9; -update noar ti set v0='6HFX' where id=9; -update noar tt set b0='FUNLX89' where id=9; -update noar ti set b0='FUNLX89' where id=9; -update noar tt set v0='0JQV4OSSB6VPP9TJDUO1IUHAO8FEXU' where id=9; -update noar ti set v0='0JQV4OSSB6VPP9TJDUO1IUHAO8FEXU' where id=9; -update noar tt set b1='O87L8MBFS6SRJ2J4U9K' where id=9; -update noar ti set b1='O87L8MBFS6SRJ2J4U9K' where id=9; -update noar tt set v0='NLKEWRS0SKVW2KJF7M1EJTF0Y' where id=9; -update noar ti set v0='NLKEWRS0SKVW2KJF7M1EJTF0Y' where id=9; -update noar tt set b2='R7PGHEL' where id=9; -update noar ti set b2='R7PGHEL' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 longblob null, - b1 longblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='F72NWFY051JONVM1E4N4' where id=1; -update noar ti set v0='F72NWFY051JONVM1E4N4' where id=1; -update noar tt set b0='YKE1' where id=1; -update noar ti set b0='YKE1' where id=1; -update noar tt set v0='CXGL1OZJ5' where id=1; -update noar ti set v0='CXGL1OZJ5' where id=1; -update noar tt set b1='SOERUCNZTM1NTX1OASE7EI2L' where id=1; -update noar ti set b1='SOERUCNZTM1NTX1OASE7EI2L' where id=1; -update noar tt set v0='62DTN052LY5T7DKUG22YHGM' where id=1; -update noar ti set v0='62DTN052LY5T7DKUG22YHGM' where id=1; -update noar tt set b2='YFDP5VKSGP3QA3B' where id=1; -update noar ti set b2='YFDP5VKSGP3QA3B' where id=1; -update noar tt set v0='YH06LB1JEHMHO3U4EULLC69LK' where id=2; -update noar ti set v0='YH06LB1JEHMHO3U4EULLC69LK' where id=2; -update noar tt set b0='MQZBZP' where id=2; -update noar ti set b0='MQZBZP' where id=2; -update noar tt set v0='JFYGTWN40CT45B7GGYUTR' where id=2; -update noar ti set v0='JFYGTWN40CT45B7GGYUTR' where id=2; -update noar tt set b1='A8IAETVWRULGUMQX2E' where id=2; -update noar ti set b1='A8IAETVWRULGUMQX2E' where id=2; -update noar tt set v0='LJM4LCIEQ4WA61CL' where id=2; -update noar ti set v0='LJM4LCIEQ4WA61CL' where id=2; -update noar tt set b2='AJNR9KA606I0WEINCS1RLZ0M8208K' where id=2; -update noar ti set b2='AJNR9KA606I0WEINCS1RLZ0M8208K' where id=2; -update noar tt set v0='GUFJ' where id=3; -update noar ti set v0='GUFJ' where id=3; -update noar tt set b0='FMZ7LUVCL' where id=3; -update noar ti set b0='FMZ7LUVCL' where id=3; -update noar tt set v0='IGZA3P9YU6BLG44' where id=3; -update noar ti set v0='IGZA3P9YU6BLG44' where id=3; -update noar tt set b1='0AHRCNFSY928W' where id=3; -update noar ti set b1='0AHRCNFSY928W' where id=3; -update noar tt set v0='1LBZ3F4M' where id=3; -update noar ti set v0='1LBZ3F4M' where id=3; -update noar tt set b2='NM6YBTZN8WTGGAL4ZE' where id=3; -update noar ti set b2='NM6YBTZN8WTGGAL4ZE' where id=3; -update noar tt set v0='WSK' where id=4; -update noar ti set v0='WSK' where id=4; -update noar tt set b0='4IMKPEC354BD' where id=4; -update noar ti set b0='4IMKPEC354BD' where id=4; -update noar tt set v0='9KEY9LRGNX45UJ4MVAB5Y629B5VCJCH' where id=4; -update noar ti set v0='9KEY9LRGNX45UJ4MVAB5Y629B5VCJCH' where id=4; -update noar tt set b1='O8QEPCSCVG4TN8RE0P00M' where id=4; -update noar ti set b1='O8QEPCSCVG4TN8RE0P00M' where id=4; -update noar tt set v0='CDHA8OVJSBNV2' where id=4; -update noar ti set v0='CDHA8OVJSBNV2' where id=4; -update noar tt set b2='83TIOFSKYE89SBDFE7PPIC3IN1KQULT' where id=4; -update noar ti set b2='83TIOFSKYE89SBDFE7PPIC3IN1KQULT' where id=4; -update noar tt set v0='PDNQREAX4YAFDZST4' where id=5; -update noar ti set v0='PDNQREAX4YAFDZST4' where id=5; -update noar tt set b0='D3' where id=5; -update noar ti set b0='D3' where id=5; -update noar tt set v0='2WQ3NXOXYKC63AGL9JPA6H9FJP0P' where id=5; -update noar ti set v0='2WQ3NXOXYKC63AGL9JPA6H9FJP0P' where id=5; -update noar tt set b1='ONWN6' where id=5; -update noar ti set b1='ONWN6' where id=5; -update noar tt set v0='Z63OYWP1' where id=5; -update noar ti set v0='Z63OYWP1' where id=5; -update noar tt set b2='08GFNMGE2CN569GFG0ZO4IOCIEJRQ6E' where id=5; -update noar ti set b2='08GFNMGE2CN569GFG0ZO4IOCIEJRQ6E' where id=5; -update noar tt set v0='F11EJ73DUP397PSBXDZEJ7Z' where id=6; -update noar ti set v0='F11EJ73DUP397PSBXDZEJ7Z' where id=6; -update noar tt set b0='68ITH8MZV5VM3FGPKJ5EK1PGCO3MA' where id=6; -update noar ti set b0='68ITH8MZV5VM3FGPKJ5EK1PGCO3MA' where id=6; -update noar tt set v0='KNEK' where id=6; -update noar ti set v0='KNEK' where id=6; -update noar tt set b1='EBLGZXZL362MTG38JZGQU8JQ' where id=6; -update noar ti set b1='EBLGZXZL362MTG38JZGQU8JQ' where id=6; -update noar tt set v0='21DPG0O26YEMF722QXIOHI' where id=6; -update noar ti set v0='21DPG0O26YEMF722QXIOHI' where id=6; -update noar tt set b2='U9LV8NADTRY35NL17HWW137' where id=6; -update noar ti set b2='U9LV8NADTRY35NL17HWW137' where id=6; -update noar tt set v0='UAC629SBMJLSN1QR1M' where id=7; -update noar ti set v0='UAC629SBMJLSN1QR1M' where id=7; -update noar tt set b0='LWIQ3DHPERZ8GW9YCL644FS7L53T' where id=7; -update noar ti set b0='LWIQ3DHPERZ8GW9YCL644FS7L53T' where id=7; -update noar tt set v0='KHDNXO0YUBC' where id=7; -update noar ti set v0='KHDNXO0YUBC' where id=7; -update noar tt set b1='1DYRKIZMDUTKHR009JNJ0TSKYUSVQCT' where id=7; -update noar ti set b1='1DYRKIZMDUTKHR009JNJ0TSKYUSVQCT' where id=7; -update noar tt set v0='1TP2B6JG4GHVDR05QNTVFFIBV2YT' where id=7; -update noar ti set v0='1TP2B6JG4GHVDR05QNTVFFIBV2YT' where id=7; -update noar tt set b2='1N' where id=7; -update noar ti set b2='1N' where id=7; -update noar tt set v0='EPHKTPAMZSO9VD' where id=8; -update noar ti set v0='EPHKTPAMZSO9VD' where id=8; -update noar tt set b0='UCTP1PB4S37LMC11O4SG' where id=8; -update noar ti set b0='UCTP1PB4S37LMC11O4SG' where id=8; -update noar tt set v0='Z72ZKRJ80GXAKD9XC' where id=8; -update noar ti set v0='Z72ZKRJ80GXAKD9XC' where id=8; -update noar tt set b1='424GFORQPN7IFY9WXF75' where id=8; -update noar ti set b1='424GFORQPN7IFY9WXF75' where id=8; -update noar tt set v0='DXL2TJAZ76S' where id=8; -update noar ti set v0='DXL2TJAZ76S' where id=8; -update noar tt set b2='7VMAGJF9654ODDIF6Y' where id=8; -update noar ti set b2='7VMAGJF9654ODDIF6Y' where id=8; -update noar tt set v0='PE2LA6KP2AQ3XYZ16XVL4GFE' where id=9; -update noar ti set v0='PE2LA6KP2AQ3XYZ16XVL4GFE' where id=9; -update noar tt set b0='Q620B3726' where id=9; -update noar ti set b0='Q620B3726' where id=9; -update noar tt set v0='LSZK5M0CR46TQM7J7202' where id=9; -update noar ti set v0='LSZK5M0CR46TQM7J7202' where id=9; -update noar tt set b1='PN1AEX4113G2MWG6T2TE749' where id=9; -update noar ti set b1='PN1AEX4113G2MWG6T2TE749' where id=9; -update noar tt set v0='05CRYOREIPFEI2TTFVQ4SD4GLU7EL9' where id=9; -update noar ti set v0='05CRYOREIPFEI2TTFVQ4SD4GLU7EL9' where id=9; -update noar tt set b2='9AMN88PAHTXOJT780AOVYR4' where id=9; -update noar ti set b2='9AMN88PAHTXOJT780AOVYR4' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 longblob null, - b1 longblob null, - b2 blob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='APLZI' where id=1; -update noar ti set v0='APLZI' where id=1; -update noar tt set b0='S9MZ4WBPJ1ELTXHYXU6751NX165H9K' where id=1; -update noar ti set b0='S9MZ4WBPJ1ELTXHYXU6751NX165H9K' where id=1; -update noar tt set v0='I4V63LCSQ' where id=1; -update noar ti set v0='I4V63LCSQ' where id=1; -update noar tt set b1='MHQJC9NV7C8Y0XM' where id=1; -update noar ti set b1='MHQJC9NV7C8Y0XM' where id=1; -update noar tt set v0='R0Q5TLCM4E' where id=1; -update noar ti set v0='R0Q5TLCM4E' where id=1; -update noar tt set b2='01W3U47FLDXU' where id=1; -update noar ti set b2='01W3U47FLDXU' where id=1; -update noar tt set v0='A4U7B4LAI3FDVAT7UG25TZATDXYT' where id=2; -update noar ti set v0='A4U7B4LAI3FDVAT7UG25TZATDXYT' where id=2; -update noar tt set b0='H19OVWEIZV0L4ZPU' where id=2; -update noar ti set b0='H19OVWEIZV0L4ZPU' where id=2; -update noar tt set v0='8QXDGL1YI17WMRX2X8' where id=2; -update noar ti set v0='8QXDGL1YI17WMRX2X8' where id=2; -update noar tt set b1='SNSJ1OA' where id=2; -update noar ti set b1='SNSJ1OA' where id=2; -update noar tt set v0='ACAKCLR0Z' where id=2; -update noar ti set v0='ACAKCLR0Z' where id=2; -update noar tt set b2='GKW8' where id=2; -update noar ti set b2='GKW8' where id=2; -update noar tt set v0='GORMU1E6O4SZF5N' where id=3; -update noar ti set v0='GORMU1E6O4SZF5N' where id=3; -update noar tt set b0='0B1QFQWK4QIYQUD9YLN6' where id=3; -update noar ti set b0='0B1QFQWK4QIYQUD9YLN6' where id=3; -update noar tt set v0='M4F2ZS8S5ED6' where id=3; -update noar ti set v0='M4F2ZS8S5ED6' where id=3; -update noar tt set b1='19PJZNZ7XSTA4F218O204ZI1R4' where id=3; -update noar ti set b1='19PJZNZ7XSTA4F218O204ZI1R4' where id=3; -update noar tt set v0='AR8GF7OXRV3VYBOG8ECQLP64S7' where id=3; -update noar ti set v0='AR8GF7OXRV3VYBOG8ECQLP64S7' where id=3; -update noar tt set b2='JXRWRAFA0XCIEC6HIW9HG27C' where id=3; -update noar ti set b2='JXRWRAFA0XCIEC6HIW9HG27C' where id=3; -update noar tt set v0='Z3XLULRTTIJYE86ZZ1LFLU3Z' where id=4; -update noar ti set v0='Z3XLULRTTIJYE86ZZ1LFLU3Z' where id=4; -update noar tt set b0='1' where id=4; -update noar ti set b0='1' where id=4; -update noar tt set v0='225NUVBNSANXY8FXQ' where id=4; -update noar ti set v0='225NUVBNSANXY8FXQ' where id=4; -update noar tt set b1='40CCS0V14AQYGU3HUV0' where id=4; -update noar ti set b1='40CCS0V14AQYGU3HUV0' where id=4; -update noar tt set v0='XE9IQE9RG5F0F' where id=4; -update noar ti set v0='XE9IQE9RG5F0F' where id=4; -update noar tt set b2='YU5YRK0M3JA5U4FHN1XJUMVFGW' where id=4; -update noar ti set b2='YU5YRK0M3JA5U4FHN1XJUMVFGW' where id=4; -update noar tt set v0='THQDSFZFBIRX1QA0I2QLMDO5ZCCGPLRI' where id=5; -update noar ti set v0='THQDSFZFBIRX1QA0I2QLMDO5ZCCGPLRI' where id=5; -update noar tt set b0='157GH41KBMXQ1NB86SI8' where id=5; -update noar ti set b0='157GH41KBMXQ1NB86SI8' where id=5; -update noar tt set v0='E69RBLXP6GE3SZ7NA1Y8' where id=5; -update noar ti set v0='E69RBLXP6GE3SZ7NA1Y8' where id=5; -update noar tt set b1='CJI5CKES00ZEUFRDICA67' where id=5; -update noar ti set b1='CJI5CKES00ZEUFRDICA67' where id=5; -update noar tt set v0='I0P6UW01XIQ3WUNIR' where id=5; -update noar ti set v0='I0P6UW01XIQ3WUNIR' where id=5; -update noar tt set b2='E7' where id=5; -update noar ti set b2='E7' where id=5; -update noar tt set v0='5CWTITYB30POBA565D17PZGT1TFT311' where id=6; -update noar ti set v0='5CWTITYB30POBA565D17PZGT1TFT311' where id=6; -update noar tt set b0='O1HKAN2KDVFHRWKVV' where id=6; -update noar ti set b0='O1HKAN2KDVFHRWKVV' where id=6; -update noar tt set v0='P1U732XALDLCKC4VGJCBWSL2TEJ4ISD1' where id=6; -update noar ti set v0='P1U732XALDLCKC4VGJCBWSL2TEJ4ISD1' where id=6; -update noar tt set b1='45XI' where id=6; -update noar ti set b1='45XI' where id=6; -update noar tt set v0='ZE08WAVCCXIMXEKIYVJQ3Q0' where id=6; -update noar ti set v0='ZE08WAVCCXIMXEKIYVJQ3Q0' where id=6; -update noar tt set b2='TFH0198RJO7L' where id=6; -update noar ti set b2='TFH0198RJO7L' where id=6; -update noar tt set v0='3Z' where id=7; -update noar ti set v0='3Z' where id=7; -update noar tt set b0='XJA96B06L9AP97TX' where id=7; -update noar ti set b0='XJA96B06L9AP97TX' where id=7; -update noar tt set v0='64TJ2GMIHOYE' where id=7; -update noar ti set v0='64TJ2GMIHOYE' where id=7; -update noar tt set b1='5CDAHJ' where id=7; -update noar ti set b1='5CDAHJ' where id=7; -update noar tt set v0='5EPYCKMEP5OQYXZ67' where id=7; -update noar ti set v0='5EPYCKMEP5OQYXZ67' where id=7; -update noar tt set b2='1KW5SQH3O1C9MVVNGLA92EOQ15HAB8IY' where id=7; -update noar ti set b2='1KW5SQH3O1C9MVVNGLA92EOQ15HAB8IY' where id=7; -update noar tt set v0='1YDMMK99RLONRIEHZC8JUS' where id=8; -update noar ti set v0='1YDMMK99RLONRIEHZC8JUS' where id=8; -update noar tt set b0='0HE327ETWP8ZYGQ8DXS' where id=8; -update noar ti set b0='0HE327ETWP8ZYGQ8DXS' where id=8; -update noar tt set v0='AQ852028Z1Y9FYITIHTM' where id=8; -update noar ti set v0='AQ852028Z1Y9FYITIHTM' where id=8; -update noar tt set b1='3DXVPJW8Y8' where id=8; -update noar ti set b1='3DXVPJW8Y8' where id=8; -update noar tt set v0='IN' where id=8; -update noar ti set v0='IN' where id=8; -update noar tt set b2='SOI73ZNUPWHTSW' where id=8; -update noar ti set b2='SOI73ZNUPWHTSW' where id=8; -update noar tt set v0='83868FRCEWWI' where id=9; -update noar ti set v0='83868FRCEWWI' where id=9; -update noar tt set b0='8N76N1ZG6KIHHUVUB73GDVZGN738A' where id=9; -update noar ti set b0='8N76N1ZG6KIHHUVUB73GDVZGN738A' where id=9; -update noar tt set v0='E8YAGGTRWYS' where id=9; -update noar ti set v0='E8YAGGTRWYS' where id=9; -update noar tt set b1='SGEATI51WWWYV6BDT' where id=9; -update noar ti set b1='SGEATI51WWWYV6BDT' where id=9; -update noar tt set v0='2' where id=9; -update noar ti set v0='2' where id=9; -update noar tt set b2='6' where id=9; -update noar ti set b2='6' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 longblob not null, - b1 longblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='6ZBNVKOG3W6NX4RB' where id=1; -update noar ti set v0='6ZBNVKOG3W6NX4RB' where id=1; -update noar tt set b0='QX8O7MA5URA98KP94' where id=1; -update noar ti set b0='QX8O7MA5URA98KP94' where id=1; -update noar tt set v0='G1RI' where id=1; -update noar ti set v0='G1RI' where id=1; -update noar tt set b1='AMIUUG4FC5JLMTQTFNQOM' where id=1; -update noar ti set b1='AMIUUG4FC5JLMTQTFNQOM' where id=1; -update noar tt set v0='5SOZSZ9ORSJFQ3DB661DEI5R' where id=1; -update noar ti set v0='5SOZSZ9ORSJFQ3DB661DEI5R' where id=1; -update noar tt set b2='1GT4K11JD1UC8HFVDD5Q3TYPGC' where id=1; -update noar ti set b2='1GT4K11JD1UC8HFVDD5Q3TYPGC' where id=1; -update noar tt set v0='1270IA7FZOOF3' where id=2; -update noar ti set v0='1270IA7FZOOF3' where id=2; -update noar tt set b0='94VPNXSEYWLZU8GRM08XFAIFQ' where id=2; -update noar ti set b0='94VPNXSEYWLZU8GRM08XFAIFQ' where id=2; -update noar tt set v0='3N309BC1X29YOJLKIH0T610VNQ' where id=2; -update noar ti set v0='3N309BC1X29YOJLKIH0T610VNQ' where id=2; -update noar tt set b1='TI1UBV' where id=2; -update noar ti set b1='TI1UBV' where id=2; -update noar tt set v0='7Y7Y6KQGY654GH99E8ULTEYST9P' where id=2; -update noar ti set v0='7Y7Y6KQGY654GH99E8ULTEYST9P' where id=2; -update noar tt set b2='4J1' where id=2; -update noar ti set b2='4J1' where id=2; -update noar tt set v0='YINZ3QJL3BD3Q6YPY67Y07VBHR' where id=3; -update noar ti set v0='YINZ3QJL3BD3Q6YPY67Y07VBHR' where id=3; -update noar tt set b0='BDIGSLA111X85PNCA748Q9VFW95D9' where id=3; -update noar ti set b0='BDIGSLA111X85PNCA748Q9VFW95D9' where id=3; -update noar tt set v0='K2A2LFVTVSKSGXHNO80BFCV0VD' where id=3; -update noar ti set v0='K2A2LFVTVSKSGXHNO80BFCV0VD' where id=3; -update noar tt set b1='FS8IKIEFRHJCOG0WU0OZ5W6UMW8QHYN' where id=3; -update noar ti set b1='FS8IKIEFRHJCOG0WU0OZ5W6UMW8QHYN' where id=3; -update noar tt set v0='0N' where id=3; -update noar ti set v0='0N' where id=3; -update noar tt set b2='Y8CMUCOD' where id=3; -update noar ti set b2='Y8CMUCOD' where id=3; -update noar tt set v0='X' where id=4; -update noar ti set v0='X' where id=4; -update noar tt set b0='X' where id=4; -update noar ti set b0='X' where id=4; -update noar tt set v0='7R2JXVMPCVQGIMVHH6S3A' where id=4; -update noar ti set v0='7R2JXVMPCVQGIMVHH6S3A' where id=4; -update noar tt set b1='YK40PK165PPS' where id=4; -update noar ti set b1='YK40PK165PPS' where id=4; -update noar tt set v0='0F79BGF63EHJKH6OHB49LLGJ' where id=4; -update noar ti set v0='0F79BGF63EHJKH6OHB49LLGJ' where id=4; -update noar tt set b2='DA3NEDNCW9NUF87' where id=4; -update noar ti set b2='DA3NEDNCW9NUF87' where id=4; -update noar tt set v0='UN6NUVXDYV68AZT8T65XJW2VMJF' where id=5; -update noar ti set v0='UN6NUVXDYV68AZT8T65XJW2VMJF' where id=5; -update noar tt set b0='Y3CP1FCN93' where id=5; -update noar ti set b0='Y3CP1FCN93' where id=5; -update noar tt set v0='AR9JVNGCRIJ' where id=5; -update noar ti set v0='AR9JVNGCRIJ' where id=5; -update noar tt set b1='5MU6N' where id=5; -update noar ti set b1='5MU6N' where id=5; -update noar tt set v0='SW9A7073QK8IFU5P' where id=5; -update noar ti set v0='SW9A7073QK8IFU5P' where id=5; -update noar tt set b2='NY3EY' where id=5; -update noar ti set b2='NY3EY' where id=5; -update noar tt set v0='GKUH3JWD1Q7MV' where id=6; -update noar ti set v0='GKUH3JWD1Q7MV' where id=6; -update noar tt set b0='SAW4QX2J9UUA4QICOWMVO3Y' where id=6; -update noar ti set b0='SAW4QX2J9UUA4QICOWMVO3Y' where id=6; -update noar tt set v0='O9JR149YTD5AC74D' where id=6; -update noar ti set v0='O9JR149YTD5AC74D' where id=6; -update noar tt set b1='HP2' where id=6; -update noar ti set b1='HP2' where id=6; -update noar tt set v0='G8C00B9YWE8RM9I3JASP7C58CAF4S' where id=6; -update noar ti set v0='G8C00B9YWE8RM9I3JASP7C58CAF4S' where id=6; -update noar tt set b2='JGGTNH1Q4D11DL5QSBXZQD5RR4M530' where id=6; -update noar ti set b2='JGGTNH1Q4D11DL5QSBXZQD5RR4M530' where id=6; -update noar tt set v0='S75Z2E0HLQLOPKOL672WJQ' where id=7; -update noar ti set v0='S75Z2E0HLQLOPKOL672WJQ' where id=7; -update noar tt set b0='638SVMZ1HDZ' where id=7; -update noar ti set b0='638SVMZ1HDZ' where id=7; -update noar tt set v0='5K' where id=7; -update noar ti set v0='5K' where id=7; -update noar tt set b1='3XC' where id=7; -update noar ti set b1='3XC' where id=7; -update noar tt set v0='V5NIFIE57BNHT9GC8' where id=7; -update noar ti set v0='V5NIFIE57BNHT9GC8' where id=7; -update noar tt set b2='K5YFJQLVCESN9A' where id=7; -update noar ti set b2='K5YFJQLVCESN9A' where id=7; -update noar tt set v0='ZHZWH4OFS91HN22GJWK3G' where id=8; -update noar ti set v0='ZHZWH4OFS91HN22GJWK3G' where id=8; -update noar tt set b0='22ZU078V' where id=8; -update noar ti set b0='22ZU078V' where id=8; -update noar tt set v0='PGNQOOW733ZWZ2AIG9WMBX6X71QCDC2' where id=8; -update noar ti set v0='PGNQOOW733ZWZ2AIG9WMBX6X71QCDC2' where id=8; -update noar tt set b1='CHQWB5G7TB7R6F' where id=8; -update noar ti set b1='CHQWB5G7TB7R6F' where id=8; -update noar tt set v0='MCNXLAYKR1MER4R1U0UUQ5YCZ27Q16G' where id=8; -update noar ti set v0='MCNXLAYKR1MER4R1U0UUQ5YCZ27Q16G' where id=8; -update noar tt set b2='N3Y0' where id=8; -update noar ti set b2='N3Y0' where id=8; -update noar tt set v0='GY7Y73QRKBYO9H0856DT34' where id=9; -update noar ti set v0='GY7Y73QRKBYO9H0856DT34' where id=9; -update noar tt set b0='D5OGS' where id=9; -update noar ti set b0='D5OGS' where id=9; -update noar tt set v0='VLI69Y0IGG9X2G9ZJV0XU671TQXDQ4L' where id=9; -update noar ti set v0='VLI69Y0IGG9X2G9ZJV0XU671TQXDQ4L' where id=9; -update noar tt set b1='ESTISXLS27HP2TSFS8IQ' where id=9; -update noar ti set b1='ESTISXLS27HP2TSFS8IQ' where id=9; -update noar tt set v0='OWHJZDT3YWSAG2U' where id=9; -update noar ti set v0='OWHJZDT3YWSAG2U' where id=9; -update noar tt set b2='B0Z' where id=9; -update noar ti set b2='B0Z' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 longblob not null, - b1 longblob not null, - b2 blob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='ONFF44G2302R' where id=1; -update noar ti set v0='ONFF44G2302R' where id=1; -update noar tt set b0='UC5R9GZTZ3GL4WG' where id=1; -update noar ti set b0='UC5R9GZTZ3GL4WG' where id=1; -update noar tt set v0='V' where id=1; -update noar ti set v0='V' where id=1; -update noar tt set b1='9PF80X3LPB9ZYO6VF19IA8' where id=1; -update noar ti set b1='9PF80X3LPB9ZYO6VF19IA8' where id=1; -update noar tt set v0='XSCJ6ER4CAI' where id=1; -update noar ti set v0='XSCJ6ER4CAI' where id=1; -update noar tt set b2='EP15TLUDWYZGFC' where id=1; -update noar ti set b2='EP15TLUDWYZGFC' where id=1; -update noar tt set v0='ZOBJM6BIB58SYN' where id=2; -update noar ti set v0='ZOBJM6BIB58SYN' where id=2; -update noar tt set b0='JEV0KHG' where id=2; -update noar ti set b0='JEV0KHG' where id=2; -update noar tt set v0='QQVJ0' where id=2; -update noar ti set v0='QQVJ0' where id=2; -update noar tt set b1='VVBKWCNX0S43N3A0NBT8KPQOT78P4NGD' where id=2; -update noar ti set b1='VVBKWCNX0S43N3A0NBT8KPQOT78P4NGD' where id=2; -update noar tt set v0='2NTRQQYTSWC1R5KQ44D283Z9U412W2A' where id=2; -update noar ti set v0='2NTRQQYTSWC1R5KQ44D283Z9U412W2A' where id=2; -update noar tt set b2='RPSC5L8' where id=2; -update noar ti set b2='RPSC5L8' where id=2; -update noar tt set v0='TQZHRXXTV3TF964F2JM1LUNOEL35RU' where id=3; -update noar ti set v0='TQZHRXXTV3TF964F2JM1LUNOEL35RU' where id=3; -update noar tt set b0='JLBNDOU9UND27' where id=3; -update noar ti set b0='JLBNDOU9UND27' where id=3; -update noar tt set v0='BGI68Q06' where id=3; -update noar ti set v0='BGI68Q06' where id=3; -update noar tt set b1='NZZC3V2E5O3SSH8T5' where id=3; -update noar ti set b1='NZZC3V2E5O3SSH8T5' where id=3; -update noar tt set v0='JGKQUMGQ7G07XZ8GI' where id=3; -update noar ti set v0='JGKQUMGQ7G07XZ8GI' where id=3; -update noar tt set b2='1QXL' where id=3; -update noar ti set b2='1QXL' where id=3; -update noar tt set v0='3OT0Z8' where id=4; -update noar ti set v0='3OT0Z8' where id=4; -update noar tt set b0='5R0ZEF' where id=4; -update noar ti set b0='5R0ZEF' where id=4; -update noar tt set v0='9PZFZJ6ENDTNTOSRL' where id=4; -update noar ti set v0='9PZFZJ6ENDTNTOSRL' where id=4; -update noar tt set b1='CKPULBG8ZMEOGBH713IHHKTKLF' where id=4; -update noar ti set b1='CKPULBG8ZMEOGBH713IHHKTKLF' where id=4; -update noar tt set v0='P0XEWHUE19J0ICFPLHSEGW' where id=4; -update noar ti set v0='P0XEWHUE19J0ICFPLHSEGW' where id=4; -update noar tt set b2='9YF1NI30R1ZP8FESQCR' where id=4; -update noar ti set b2='9YF1NI30R1ZP8FESQCR' where id=4; -update noar tt set v0='WT6E0O93I89T8UB59LM78WRNNKA2N1FF' where id=5; -update noar ti set v0='WT6E0O93I89T8UB59LM78WRNNKA2N1FF' where id=5; -update noar tt set b0='4BWWN467RNC1M5CRZQ' where id=5; -update noar ti set b0='4BWWN467RNC1M5CRZQ' where id=5; -update noar tt set v0='V5I916LT9G4YWHRFUZVS92' where id=5; -update noar ti set v0='V5I916LT9G4YWHRFUZVS92' where id=5; -update noar tt set b1='YKTLN36YOE2C87PMY2O2Q4MYRQR0' where id=5; -update noar ti set b1='YKTLN36YOE2C87PMY2O2Q4MYRQR0' where id=5; -update noar tt set v0='RDQ1PCR' where id=5; -update noar ti set v0='RDQ1PCR' where id=5; -update noar tt set b2='P9ZZEQ79YMBLG3Q80JC1PF' where id=5; -update noar ti set b2='P9ZZEQ79YMBLG3Q80JC1PF' where id=5; -update noar tt set v0='TSQ7SMNE2UK57' where id=6; -update noar ti set v0='TSQ7SMNE2UK57' where id=6; -update noar tt set b0='96G9QADI0NURQB8SR8AW3Z' where id=6; -update noar ti set b0='96G9QADI0NURQB8SR8AW3Z' where id=6; -update noar tt set v0='LSGP724UKNHA86OZO' where id=6; -update noar ti set v0='LSGP724UKNHA86OZO' where id=6; -update noar tt set b1='W5PPE5Q6' where id=6; -update noar ti set b1='W5PPE5Q6' where id=6; -update noar tt set v0='KJ5R' where id=6; -update noar ti set v0='KJ5R' where id=6; -update noar tt set b2='44V3F' where id=6; -update noar ti set b2='44V3F' where id=6; -update noar tt set v0='8F41FKG835LCEE9HBQ' where id=7; -update noar ti set v0='8F41FKG835LCEE9HBQ' where id=7; -update noar tt set b0='KA72MDBST2VEN2RUXSZS1KEEEI3J271' where id=7; -update noar ti set b0='KA72MDBST2VEN2RUXSZS1KEEEI3J271' where id=7; -update noar tt set v0='3I4KFFXPOMX' where id=7; -update noar ti set v0='3I4KFFXPOMX' where id=7; -update noar tt set b1='BGDG' where id=7; -update noar ti set b1='BGDG' where id=7; -update noar tt set v0='INYS5F0A7YMJZHPAMY0YJLP0P99160' where id=7; -update noar ti set v0='INYS5F0A7YMJZHPAMY0YJLP0P99160' where id=7; -update noar tt set b2='75AGVP4YUIJQ3USI9LTK8M' where id=7; -update noar ti set b2='75AGVP4YUIJQ3USI9LTK8M' where id=7; -update noar tt set v0='QPFVBY5OMJN' where id=8; -update noar ti set v0='QPFVBY5OMJN' where id=8; -update noar tt set b0='FHOWUG2M30B0SCM4FBIA' where id=8; -update noar ti set b0='FHOWUG2M30B0SCM4FBIA' where id=8; -update noar tt set v0='LTNSHQ3' where id=8; -update noar ti set v0='LTNSHQ3' where id=8; -update noar tt set b1='D2TI8X28OV4FT0P6867HZA2TVJAX0L' where id=8; -update noar ti set b1='D2TI8X28OV4FT0P6867HZA2TVJAX0L' where id=8; -update noar tt set v0='4' where id=8; -update noar ti set v0='4' where id=8; -update noar tt set b2='B50OD0' where id=8; -update noar ti set b2='B50OD0' where id=8; -update noar tt set v0='G' where id=9; -update noar ti set v0='G' where id=9; -update noar tt set b0='9ZKNYBO5C' where id=9; -update noar ti set b0='9ZKNYBO5C' where id=9; -update noar tt set v0='3V1ZXCECFE458612Z20AL' where id=9; -update noar ti set v0='3V1ZXCECFE458612Z20AL' where id=9; -update noar tt set b1='S8L' where id=9; -update noar ti set b1='S8L' where id=9; -update noar tt set v0='4NFAK0P40' where id=9; -update noar ti set v0='4NFAK0P40' where id=9; -update noar tt set b2='TVC5WGNVIKZQAZOU2Q' where id=9; -update noar ti set b2='TVC5WGNVIKZQAZOU2Q' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 longblob null, - b1 longblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='GBAK2BFJAOAQZSAE1' where id=1; -update noar ti set v0='GBAK2BFJAOAQZSAE1' where id=1; -update noar tt set b0='68SKPCL6Q1T11H43QMNDZARIW7C' where id=1; -update noar ti set b0='68SKPCL6Q1T11H43QMNDZARIW7C' where id=1; -update noar tt set v0='PYUIY91OPGDQTNJ9ICXJRVWGACSVI4' where id=1; -update noar ti set v0='PYUIY91OPGDQTNJ9ICXJRVWGACSVI4' where id=1; -update noar tt set b1='75' where id=1; -update noar ti set b1='75' where id=1; -update noar tt set v0='6L3C5H' where id=1; -update noar ti set v0='6L3C5H' where id=1; -update noar tt set b2='R4HZOO7UMCKCLR7NEV5C' where id=1; -update noar ti set b2='R4HZOO7UMCKCLR7NEV5C' where id=1; -update noar tt set v0='MF9CRTJ0SO5JUEZSP04L471MT27V9W' where id=2; -update noar ti set v0='MF9CRTJ0SO5JUEZSP04L471MT27V9W' where id=2; -update noar tt set b0='WQ5SMJW4YB32YW5R8KTMEMLSSKH49AU' where id=2; -update noar ti set b0='WQ5SMJW4YB32YW5R8KTMEMLSSKH49AU' where id=2; -update noar tt set v0='CEBLSXHJFZM8PZH' where id=2; -update noar ti set v0='CEBLSXHJFZM8PZH' where id=2; -update noar tt set b1='LZMVYM8' where id=2; -update noar ti set b1='LZMVYM8' where id=2; -update noar tt set v0='9K91PKWQCGXUVBFM9ZYIJLZOIYPP' where id=2; -update noar ti set v0='9K91PKWQCGXUVBFM9ZYIJLZOIYPP' where id=2; -update noar tt set b2='3G7C5EFVZNVHH' where id=2; -update noar ti set b2='3G7C5EFVZNVHH' where id=2; -update noar tt set v0='RG3HEJVRQ1NZ' where id=3; -update noar ti set v0='RG3HEJVRQ1NZ' where id=3; -update noar tt set b0='80ZRCXXZB6JMYCPUC5IOE3E9L' where id=3; -update noar ti set b0='80ZRCXXZB6JMYCPUC5IOE3E9L' where id=3; -update noar tt set v0='Z09I' where id=3; -update noar ti set v0='Z09I' where id=3; -update noar tt set b1='ZGI0798ASCB9LBTUP1NIA5ANZ' where id=3; -update noar ti set b1='ZGI0798ASCB9LBTUP1NIA5ANZ' where id=3; -update noar tt set v0='I' where id=3; -update noar ti set v0='I' where id=3; -update noar tt set b2='CA4I0PRT3GTU7TB07MRR1EAG1GFVD' where id=3; -update noar ti set b2='CA4I0PRT3GTU7TB07MRR1EAG1GFVD' where id=3; -update noar tt set v0='P17KDT11RZTM7NJFHAY7S' where id=4; -update noar ti set v0='P17KDT11RZTM7NJFHAY7S' where id=4; -update noar tt set b0='3' where id=4; -update noar ti set b0='3' where id=4; -update noar tt set v0='RM' where id=4; -update noar ti set v0='RM' where id=4; -update noar tt set b1='G0LSI2ZRCTHNTWKMR4BAKTDKT7AC9Y' where id=4; -update noar ti set b1='G0LSI2ZRCTHNTWKMR4BAKTDKT7AC9Y' where id=4; -update noar tt set v0='U76' where id=4; -update noar ti set v0='U76' where id=4; -update noar tt set b2='ZYKG98BP' where id=4; -update noar ti set b2='ZYKG98BP' where id=4; -update noar tt set v0='OJTAQG1TZMB7IIGAIQCEFYWL' where id=5; -update noar ti set v0='OJTAQG1TZMB7IIGAIQCEFYWL' where id=5; -update noar tt set b0='WZ6UW2AXNVHZZR3S213H' where id=5; -update noar ti set b0='WZ6UW2AXNVHZZR3S213H' where id=5; -update noar tt set v0='2QDB4AXJCRQ8CQRPHMXO298' where id=5; -update noar ti set v0='2QDB4AXJCRQ8CQRPHMXO298' where id=5; -update noar tt set b1='V3HOG6WVDD81L0IRYXX' where id=5; -update noar ti set b1='V3HOG6WVDD81L0IRYXX' where id=5; -update noar tt set v0='WCES569KHVDNK8AL2WEWXWLJO963OP3' where id=5; -update noar ti set v0='WCES569KHVDNK8AL2WEWXWLJO963OP3' where id=5; -update noar tt set b2='3TEB7F6M8GDF' where id=5; -update noar ti set b2='3TEB7F6M8GDF' where id=5; -update noar tt set v0='J5A74PPDI7DOHN7ONV3WNO8' where id=6; -update noar ti set v0='J5A74PPDI7DOHN7ONV3WNO8' where id=6; -update noar tt set b0='V07KWAZ0CZ4NGOL' where id=6; -update noar ti set b0='V07KWAZ0CZ4NGOL' where id=6; -update noar tt set v0='Z2M0IN0E2CJUW56N1XC' where id=6; -update noar ti set v0='Z2M0IN0E2CJUW56N1XC' where id=6; -update noar tt set b1='N5A' where id=6; -update noar ti set b1='N5A' where id=6; -update noar tt set v0='WFAGYXW8RY' where id=6; -update noar ti set v0='WFAGYXW8RY' where id=6; -update noar tt set b2='DQVMF' where id=6; -update noar ti set b2='DQVMF' where id=6; -update noar tt set v0='ODYUYEZLTQWHFXP7HO' where id=7; -update noar ti set v0='ODYUYEZLTQWHFXP7HO' where id=7; -update noar tt set b0='42' where id=7; -update noar ti set b0='42' where id=7; -update noar tt set v0='JW06A2SCBZJ0UBF' where id=7; -update noar ti set v0='JW06A2SCBZJ0UBF' where id=7; -update noar tt set b1='T' where id=7; -update noar ti set b1='T' where id=7; -update noar tt set v0='Q1' where id=7; -update noar ti set v0='Q1' where id=7; -update noar tt set b2='LU5V96HNDFV3II9DG' where id=7; -update noar ti set b2='LU5V96HNDFV3II9DG' where id=7; -update noar tt set v0='9CDZSGIQYZ1' where id=8; -update noar ti set v0='9CDZSGIQYZ1' where id=8; -update noar tt set b0='QZAF36' where id=8; -update noar ti set b0='QZAF36' where id=8; -update noar tt set v0='O1E0E4EGX80N7FREU2GCX7NFRP' where id=8; -update noar ti set v0='O1E0E4EGX80N7FREU2GCX7NFRP' where id=8; -update noar tt set b1='5' where id=8; -update noar ti set b1='5' where id=8; -update noar tt set v0='8N528105NZKSFCEME9Y05AW92YD7XW' where id=8; -update noar ti set v0='8N528105NZKSFCEME9Y05AW92YD7XW' where id=8; -update noar tt set b2='0F2LTWHBA7CMPDMT' where id=8; -update noar ti set b2='0F2LTWHBA7CMPDMT' where id=8; -update noar tt set v0='BVFQFLWV37YE9' where id=9; -update noar ti set v0='BVFQFLWV37YE9' where id=9; -update noar tt set b0='FO7AVDCBHBQD85C2XIB' where id=9; -update noar ti set b0='FO7AVDCBHBQD85C2XIB' where id=9; -update noar tt set v0='5MI' where id=9; -update noar ti set v0='5MI' where id=9; -update noar tt set b1='MBFUVC7' where id=9; -update noar ti set b1='MBFUVC7' where id=9; -update noar tt set v0='7HGQN' where id=9; -update noar ti set v0='7HGQN' where id=9; -update noar tt set b2='6UN2QPBM7F' where id=9; -update noar ti set b2='6UN2QPBM7F' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 longblob null, - b1 longblob null, - b2 mediumblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='KPZVYO9AB4TBWV79HS42AEPOZ52AP' where id=1; -update noar ti set v0='KPZVYO9AB4TBWV79HS42AEPOZ52AP' where id=1; -update noar tt set b0='UUKC7TM3' where id=1; -update noar ti set b0='UUKC7TM3' where id=1; -update noar tt set v0='GPY8QITUR6O6W97FY' where id=1; -update noar ti set v0='GPY8QITUR6O6W97FY' where id=1; -update noar tt set b1='874KU4JDVZ3Z59' where id=1; -update noar ti set b1='874KU4JDVZ3Z59' where id=1; -update noar tt set v0='T1031PZ5PLO' where id=1; -update noar ti set v0='T1031PZ5PLO' where id=1; -update noar tt set b2='O6FUIATIUWU236FX2NAZEJWEHW' where id=1; -update noar ti set b2='O6FUIATIUWU236FX2NAZEJWEHW' where id=1; -update noar tt set v0='FMR2LZWWMDV59E631JR5H4PXWTMD6C' where id=2; -update noar ti set v0='FMR2LZWWMDV59E631JR5H4PXWTMD6C' where id=2; -update noar tt set b0='20V7TMPFEZA' where id=2; -update noar ti set b0='20V7TMPFEZA' where id=2; -update noar tt set v0='4THRSY' where id=2; -update noar ti set v0='4THRSY' where id=2; -update noar tt set b1='G0KBHF9' where id=2; -update noar ti set b1='G0KBHF9' where id=2; -update noar tt set v0='VLDX3O6195RL635BPB3Z0M6O1YCDZK9' where id=2; -update noar ti set v0='VLDX3O6195RL635BPB3Z0M6O1YCDZK9' where id=2; -update noar tt set b2='ND61J5O61IBF4' where id=2; -update noar ti set b2='ND61J5O61IBF4' where id=2; -update noar tt set v0='QPGFY0NDS' where id=3; -update noar ti set v0='QPGFY0NDS' where id=3; -update noar tt set b0='GH4DBL7P38V' where id=3; -update noar ti set b0='GH4DBL7P38V' where id=3; -update noar tt set v0='OJH31QNF7DZPDJ52A77E37V9JZCI' where id=3; -update noar ti set v0='OJH31QNF7DZPDJ52A77E37V9JZCI' where id=3; -update noar tt set b1='6XJ5O' where id=3; -update noar ti set b1='6XJ5O' where id=3; -update noar tt set v0='FM4KL1VOV' where id=3; -update noar ti set v0='FM4KL1VOV' where id=3; -update noar tt set b2='RTBMSJHJFGTJZTNI297ZV7PV1' where id=3; -update noar ti set b2='RTBMSJHJFGTJZTNI297ZV7PV1' where id=3; -update noar tt set v0='33FHSUNH06SQJFKHLMR8H' where id=4; -update noar ti set v0='33FHSUNH06SQJFKHLMR8H' where id=4; -update noar tt set b0='RLS5N6WH9UMCD1BYWIASVVNFYFB' where id=4; -update noar ti set b0='RLS5N6WH9UMCD1BYWIASVVNFYFB' where id=4; -update noar tt set v0='PNLN4U5M99YQ07' where id=4; -update noar ti set v0='PNLN4U5M99YQ07' where id=4; -update noar tt set b1='E89Z86PGWXWWGBC5187IDODXUZALMO' where id=4; -update noar ti set b1='E89Z86PGWXWWGBC5187IDODXUZALMO' where id=4; -update noar tt set v0='OSYAFEMYQA25U5WQ12LWAJN' where id=4; -update noar ti set v0='OSYAFEMYQA25U5WQ12LWAJN' where id=4; -update noar tt set b2='WNRJLQ692KBXTNZPQCZ5VF5M' where id=4; -update noar ti set b2='WNRJLQ692KBXTNZPQCZ5VF5M' where id=4; -update noar tt set v0='9NBE2Z216D9HRQ92NRHXXNH8H' where id=5; -update noar ti set v0='9NBE2Z216D9HRQ92NRHXXNH8H' where id=5; -update noar tt set b0='3NJADGOFN2SNGSJJJH7YDLLEOEM2TVHA' where id=5; -update noar ti set b0='3NJADGOFN2SNGSJJJH7YDLLEOEM2TVHA' where id=5; -update noar tt set v0='8M2ME99C9QF73PJ9E6' where id=5; -update noar ti set v0='8M2ME99C9QF73PJ9E6' where id=5; -update noar tt set b1='T9XFS1B7PH97XJN1KNLYI976ZKY' where id=5; -update noar ti set b1='T9XFS1B7PH97XJN1KNLYI976ZKY' where id=5; -update noar tt set v0='YC2U7QDBRWM4MGQGAC9IBC450KPJU6IX' where id=5; -update noar ti set v0='YC2U7QDBRWM4MGQGAC9IBC450KPJU6IX' where id=5; -update noar tt set b2='GTNYW0OMB' where id=5; -update noar ti set b2='GTNYW0OMB' where id=5; -update noar tt set v0='Z3NOBOH76EHC8PK2YX7' where id=6; -update noar ti set v0='Z3NOBOH76EHC8PK2YX7' where id=6; -update noar tt set b0='YQTQG1M' where id=6; -update noar ti set b0='YQTQG1M' where id=6; -update noar tt set v0='M9R4' where id=6; -update noar ti set v0='M9R4' where id=6; -update noar tt set b1='NGDCUMKSZYXFDSQIUBIUD2EOW2T' where id=6; -update noar ti set b1='NGDCUMKSZYXFDSQIUBIUD2EOW2T' where id=6; -update noar tt set v0='JOIL8GVR04LJ5LAY8UBUF87' where id=6; -update noar ti set v0='JOIL8GVR04LJ5LAY8UBUF87' where id=6; -update noar tt set b2='68TK0AQPJYGVF0X8K5CP' where id=6; -update noar ti set b2='68TK0AQPJYGVF0X8K5CP' where id=6; -update noar tt set v0='057MIGJB7DW83GD3TD5LY' where id=7; -update noar ti set v0='057MIGJB7DW83GD3TD5LY' where id=7; -update noar tt set b0='3I9DUBDTHRK1AWPP' where id=7; -update noar ti set b0='3I9DUBDTHRK1AWPP' where id=7; -update noar tt set v0='H5UTRAI3DT13VIW' where id=7; -update noar ti set v0='H5UTRAI3DT13VIW' where id=7; -update noar tt set b1='23WQ0U' where id=7; -update noar ti set b1='23WQ0U' where id=7; -update noar tt set v0='B2' where id=7; -update noar ti set v0='B2' where id=7; -update noar tt set b2='5O2JVOBF' where id=7; -update noar ti set b2='5O2JVOBF' where id=7; -update noar tt set v0='KV6QLNCBC72PUY9' where id=8; -update noar ti set v0='KV6QLNCBC72PUY9' where id=8; -update noar tt set b0='6JLF2XNR7OYVM8EHZ20XSZ2G' where id=8; -update noar ti set b0='6JLF2XNR7OYVM8EHZ20XSZ2G' where id=8; -update noar tt set v0='I8DXY2G2FA1D' where id=8; -update noar ti set v0='I8DXY2G2FA1D' where id=8; -update noar tt set b1='IS2N19XIFUVAQV' where id=8; -update noar ti set b1='IS2N19XIFUVAQV' where id=8; -update noar tt set v0='7B8UE7EMWCRMXULNJ6' where id=8; -update noar ti set v0='7B8UE7EMWCRMXULNJ6' where id=8; -update noar tt set b2='D717SK65NCUTOG2SWS1N8YF4ZHSUOSV' where id=8; -update noar ti set b2='D717SK65NCUTOG2SWS1N8YF4ZHSUOSV' where id=8; -update noar tt set v0='TYHWK6S2LJR22IIKQBLOYXYY07Q4FQH' where id=9; -update noar ti set v0='TYHWK6S2LJR22IIKQBLOYXYY07Q4FQH' where id=9; -update noar tt set b0='F6QH9E7C5Z8CCFN44RQ50FJC8R6B6A95' where id=9; -update noar ti set b0='F6QH9E7C5Z8CCFN44RQ50FJC8R6B6A95' where id=9; -update noar tt set v0='HW7FT' where id=9; -update noar ti set v0='HW7FT' where id=9; -update noar tt set b1='B4JZCYMR5SINH9' where id=9; -update noar ti set b1='B4JZCYMR5SINH9' where id=9; -update noar tt set v0='72P5QAGDQS6YI3UKHCQ' where id=9; -update noar ti set v0='72P5QAGDQS6YI3UKHCQ' where id=9; -update noar tt set b2='T7' where id=9; -update noar ti set b2='T7' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 longblob not null, - b1 longblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='JJVGPI9KJV8LR0BTDX0ZV7SNCIY' where id=1; -update noar ti set v0='JJVGPI9KJV8LR0BTDX0ZV7SNCIY' where id=1; -update noar tt set b0='JDRTTEDJEKYZ' where id=1; -update noar ti set b0='JDRTTEDJEKYZ' where id=1; -update noar tt set v0='5WURRXDOPD6N6T2ZQIXH4HOROS6E01BL' where id=1; -update noar ti set v0='5WURRXDOPD6N6T2ZQIXH4HOROS6E01BL' where id=1; -update noar tt set b1='KI7TCZ' where id=1; -update noar ti set b1='KI7TCZ' where id=1; -update noar tt set v0='RN6WUSGIWZ' where id=1; -update noar ti set v0='RN6WUSGIWZ' where id=1; -update noar tt set b2='5GCA9ZHZA' where id=1; -update noar ti set b2='5GCA9ZHZA' where id=1; -update noar tt set v0='58CVOYOJY2EBO381YTJ9KV2A3Q' where id=2; -update noar ti set v0='58CVOYOJY2EBO381YTJ9KV2A3Q' where id=2; -update noar tt set b0='LMXM7LYS2CYSDPJB36FY8HBW218T4' where id=2; -update noar ti set b0='LMXM7LYS2CYSDPJB36FY8HBW218T4' where id=2; -update noar tt set v0='3ZM3FY' where id=2; -update noar ti set v0='3ZM3FY' where id=2; -update noar tt set b1='NE8YKPIMT8X' where id=2; -update noar ti set b1='NE8YKPIMT8X' where id=2; -update noar tt set v0='5PGF96I4NUD' where id=2; -update noar ti set v0='5PGF96I4NUD' where id=2; -update noar tt set b2='7ZZFPAXGSE6HUJ6LIPPIOCMWWC' where id=2; -update noar ti set b2='7ZZFPAXGSE6HUJ6LIPPIOCMWWC' where id=2; -update noar tt set v0='G0YYPCREI3VN1Y90O' where id=3; -update noar ti set v0='G0YYPCREI3VN1Y90O' where id=3; -update noar tt set b0='61GSYL8K72E5M0VUASOW3XE5VA' where id=3; -update noar ti set b0='61GSYL8K72E5M0VUASOW3XE5VA' where id=3; -update noar tt set v0='B' where id=3; -update noar ti set v0='B' where id=3; -update noar tt set b1='37' where id=3; -update noar ti set b1='37' where id=3; -update noar tt set v0='HIY4NHE4J4P' where id=3; -update noar ti set v0='HIY4NHE4J4P' where id=3; -update noar tt set b2='36O2V3O9LPUE3G0OUPW59QBJGTPHF' where id=3; -update noar ti set b2='36O2V3O9LPUE3G0OUPW59QBJGTPHF' where id=3; -update noar tt set v0='ZIW2NTL' where id=4; -update noar ti set v0='ZIW2NTL' where id=4; -update noar tt set b0='63SIVCFFPDHY' where id=4; -update noar ti set b0='63SIVCFFPDHY' where id=4; -update noar tt set v0='JSF9OSHJTCEXRNUBOXR2Q3XNLU' where id=4; -update noar ti set v0='JSF9OSHJTCEXRNUBOXR2Q3XNLU' where id=4; -update noar tt set b1='1LPCZ7O' where id=4; -update noar ti set b1='1LPCZ7O' where id=4; -update noar tt set v0='38FQ3EM429F1JYNUBFIK753B2' where id=4; -update noar ti set v0='38FQ3EM429F1JYNUBFIK753B2' where id=4; -update noar tt set b2='LJXF860PG2VTG9AN5LQEZYPGFN' where id=4; -update noar ti set b2='LJXF860PG2VTG9AN5LQEZYPGFN' where id=4; -update noar tt set v0='RODZ3450' where id=5; -update noar ti set v0='RODZ3450' where id=5; -update noar tt set b0='DZ87GBUNF00SF813AFMXUF40' where id=5; -update noar ti set b0='DZ87GBUNF00SF813AFMXUF40' where id=5; -update noar tt set v0='XY' where id=5; -update noar ti set v0='XY' where id=5; -update noar tt set b1='4A8D98LCKOIQZXHMP20LFU4RDAW5' where id=5; -update noar ti set b1='4A8D98LCKOIQZXHMP20LFU4RDAW5' where id=5; -update noar tt set v0='8E5USDZ4TM0T2YG6KCUV' where id=5; -update noar ti set v0='8E5USDZ4TM0T2YG6KCUV' where id=5; -update noar tt set b2='DES9M7F2DHTK55TUWQNT' where id=5; -update noar ti set b2='DES9M7F2DHTK55TUWQNT' where id=5; -update noar tt set v0='FGV' where id=6; -update noar ti set v0='FGV' where id=6; -update noar tt set b0='OW4PGJ11' where id=6; -update noar ti set b0='OW4PGJ11' where id=6; -update noar tt set v0='CMDTIGRQ1' where id=6; -update noar ti set v0='CMDTIGRQ1' where id=6; -update noar tt set b1='JN0WE9' where id=6; -update noar ti set b1='JN0WE9' where id=6; -update noar tt set v0='EN' where id=6; -update noar ti set v0='EN' where id=6; -update noar tt set b2='1X4BGE' where id=6; -update noar ti set b2='1X4BGE' where id=6; -update noar tt set v0='C7RWJQS' where id=7; -update noar ti set v0='C7RWJQS' where id=7; -update noar tt set b0='2IUMU5TN7SI7JA9' where id=7; -update noar ti set b0='2IUMU5TN7SI7JA9' where id=7; -update noar tt set v0='UDDH2N38ZAWJ' where id=7; -update noar ti set v0='UDDH2N38ZAWJ' where id=7; -update noar tt set b1='ESPYVR27U' where id=7; -update noar ti set b1='ESPYVR27U' where id=7; -update noar tt set v0='V8TN202EO8DNY4' where id=7; -update noar ti set v0='V8TN202EO8DNY4' where id=7; -update noar tt set b2='BJ' where id=7; -update noar ti set b2='BJ' where id=7; -update noar tt set v0='AEO4L7' where id=8; -update noar ti set v0='AEO4L7' where id=8; -update noar tt set b0='E32MVCZSP4Z9ECXICSC8U' where id=8; -update noar ti set b0='E32MVCZSP4Z9ECXICSC8U' where id=8; -update noar tt set v0='K13K7VHGK4' where id=8; -update noar ti set v0='K13K7VHGK4' where id=8; -update noar tt set b1='3KYHZ47ZL744FUUD9K6O105' where id=8; -update noar ti set b1='3KYHZ47ZL744FUUD9K6O105' where id=8; -update noar tt set v0='A06' where id=8; -update noar ti set v0='A06' where id=8; -update noar tt set b2='4095SLA5PF' where id=8; -update noar ti set b2='4095SLA5PF' where id=8; -update noar tt set v0='EV5V9U' where id=9; -update noar ti set v0='EV5V9U' where id=9; -update noar tt set b0='9N5MAD6AB0VF' where id=9; -update noar ti set b0='9N5MAD6AB0VF' where id=9; -update noar tt set v0='Q790BQ5UMM0CJ3O9KT' where id=9; -update noar ti set v0='Q790BQ5UMM0CJ3O9KT' where id=9; -update noar tt set b1='H23FNIKQK3OLRK0A2GWPLRY1QG5' where id=9; -update noar ti set b1='H23FNIKQK3OLRK0A2GWPLRY1QG5' where id=9; -update noar tt set v0='XXS2RE7B7E1QAO' where id=9; -update noar ti set v0='XXS2RE7B7E1QAO' where id=9; -update noar tt set b2='OMF9SH' where id=9; -update noar ti set b2='OMF9SH' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 longblob not null, - b1 longblob not null, - b2 mediumblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='EASP4KR9E69XOA3' where id=1; -update noar ti set v0='EASP4KR9E69XOA3' where id=1; -update noar tt set b0='HQ0WT' where id=1; -update noar ti set b0='HQ0WT' where id=1; -update noar tt set v0='X76F6NXHRJL60R8Q' where id=1; -update noar ti set v0='X76F6NXHRJL60R8Q' where id=1; -update noar tt set b1='OFRR37QE397AG2SCCB' where id=1; -update noar ti set b1='OFRR37QE397AG2SCCB' where id=1; -update noar tt set v0='3SHED8VNMD7N5S5VKG7H6249Q6MU' where id=1; -update noar ti set v0='3SHED8VNMD7N5S5VKG7H6249Q6MU' where id=1; -update noar tt set b2='A2N3V7JC' where id=1; -update noar ti set b2='A2N3V7JC' where id=1; -update noar tt set v0='53' where id=2; -update noar ti set v0='53' where id=2; -update noar tt set b0='RFJV9ZOBHM0K1ST9RHD' where id=2; -update noar ti set b0='RFJV9ZOBHM0K1ST9RHD' where id=2; -update noar tt set v0='ITFVEBR3' where id=2; -update noar ti set v0='ITFVEBR3' where id=2; -update noar tt set b1='EYUFH5QVJDKQ1RGVWZ' where id=2; -update noar ti set b1='EYUFH5QVJDKQ1RGVWZ' where id=2; -update noar tt set v0='C2DO1VFDH0KIQARYW7OB' where id=2; -update noar ti set v0='C2DO1VFDH0KIQARYW7OB' where id=2; -update noar tt set b2='33ZCZUJ1KR1OR56J4STBVVS341' where id=2; -update noar ti set b2='33ZCZUJ1KR1OR56J4STBVVS341' where id=2; -update noar tt set v0='V3YGITPMKWIJTRGSDHM8' where id=3; -update noar ti set v0='V3YGITPMKWIJTRGSDHM8' where id=3; -update noar tt set b0='XZAGC' where id=3; -update noar ti set b0='XZAGC' where id=3; -update noar tt set v0='KJBBA' where id=3; -update noar ti set v0='KJBBA' where id=3; -update noar tt set b1='U8PGDXINHRV2BQYHSY0' where id=3; -update noar ti set b1='U8PGDXINHRV2BQYHSY0' where id=3; -update noar tt set v0='RWBEEYXP7YE6DGBIOUP9' where id=3; -update noar ti set v0='RWBEEYXP7YE6DGBIOUP9' where id=3; -update noar tt set b2='LRU5AOSMZH1VS3ZVASGFBNAB56272Y' where id=3; -update noar ti set b2='LRU5AOSMZH1VS3ZVASGFBNAB56272Y' where id=3; -update noar tt set v0='L7YDOAC8UA9XH9F4INR' where id=4; -update noar ti set v0='L7YDOAC8UA9XH9F4INR' where id=4; -update noar tt set b0='UN6OCULNFQU6ZW1JOH9J79' where id=4; -update noar ti set b0='UN6OCULNFQU6ZW1JOH9J79' where id=4; -update noar tt set v0='D2CST1UNS4SEPXW' where id=4; -update noar ti set v0='D2CST1UNS4SEPXW' where id=4; -update noar tt set b1='6R9PGBHQUQTL2F4J' where id=4; -update noar ti set b1='6R9PGBHQUQTL2F4J' where id=4; -update noar tt set v0='DC6BL2WA' where id=4; -update noar ti set v0='DC6BL2WA' where id=4; -update noar tt set b2='JXXP0D85VFPN433W4U80YRXT7DJ' where id=4; -update noar ti set b2='JXXP0D85VFPN433W4U80YRXT7DJ' where id=4; -update noar tt set v0='1' where id=5; -update noar ti set v0='1' where id=5; -update noar tt set b0='CG26XP421DTNU' where id=5; -update noar ti set b0='CG26XP421DTNU' where id=5; -update noar tt set v0='CSWICUXWZWB7HWJHH08L4GR71I4' where id=5; -update noar ti set v0='CSWICUXWZWB7HWJHH08L4GR71I4' where id=5; -update noar tt set b1='R4IS8O3JIEI3FRQUVH90L4U7OMT1A' where id=5; -update noar ti set b1='R4IS8O3JIEI3FRQUVH90L4U7OMT1A' where id=5; -update noar tt set v0='783USG44U1VU324J05' where id=5; -update noar ti set v0='783USG44U1VU324J05' where id=5; -update noar tt set b2='U' where id=5; -update noar ti set b2='U' where id=5; -update noar tt set v0='TATCLUSFNJ0WJ6FJLD8W0DXBMXRSY' where id=6; -update noar ti set v0='TATCLUSFNJ0WJ6FJLD8W0DXBMXRSY' where id=6; -update noar tt set b0='059YG6LM' where id=6; -update noar ti set b0='059YG6LM' where id=6; -update noar tt set v0='0FXRR0AD6YL7CL2' where id=6; -update noar ti set v0='0FXRR0AD6YL7CL2' where id=6; -update noar tt set b1='1N3SK0AXTS8M' where id=6; -update noar ti set b1='1N3SK0AXTS8M' where id=6; -update noar tt set v0='Q6IMW9S5GE3H7XHM8G0O' where id=6; -update noar ti set v0='Q6IMW9S5GE3H7XHM8G0O' where id=6; -update noar tt set b2='LFEKMN8SMAXS2H1D1WXUUTFT6MVZQLVX' where id=6; -update noar ti set b2='LFEKMN8SMAXS2H1D1WXUUTFT6MVZQLVX' where id=6; -update noar tt set v0='Y6VD622ZXQROOBF2' where id=7; -update noar ti set v0='Y6VD622ZXQROOBF2' where id=7; -update noar tt set b0='Y7SZVU36I0JD7R1' where id=7; -update noar ti set b0='Y7SZVU36I0JD7R1' where id=7; -update noar tt set v0='OQ3QMBPNLG8UWAE2M4' where id=7; -update noar ti set v0='OQ3QMBPNLG8UWAE2M4' where id=7; -update noar tt set b1='RHFNUN7M5B0J7X3XN6DFXO' where id=7; -update noar ti set b1='RHFNUN7M5B0J7X3XN6DFXO' where id=7; -update noar tt set v0='XP9NI93XL1QD' where id=7; -update noar ti set v0='XP9NI93XL1QD' where id=7; -update noar tt set b2='SCXPXKOT5' where id=7; -update noar ti set b2='SCXPXKOT5' where id=7; -update noar tt set v0='S8GSRA9U1ASKUZSHWYZZAQNTI' where id=8; -update noar ti set v0='S8GSRA9U1ASKUZSHWYZZAQNTI' where id=8; -update noar tt set b0='FONEUY5F6BUDUDJUM1905JRCTFYD8TVX' where id=8; -update noar ti set b0='FONEUY5F6BUDUDJUM1905JRCTFYD8TVX' where id=8; -update noar tt set v0='M6ILSDL7MOGD' where id=8; -update noar ti set v0='M6ILSDL7MOGD' where id=8; -update noar tt set b1='OGFM45Q87JO6I10SLIN3CQT8OWR' where id=8; -update noar ti set b1='OGFM45Q87JO6I10SLIN3CQT8OWR' where id=8; -update noar tt set v0='EKKNG44WKU9XM6KJ6C0J' where id=8; -update noar ti set v0='EKKNG44WKU9XM6KJ6C0J' where id=8; -update noar tt set b2='VLUJA3LMPY90WE8ISR1QH3IZG' where id=8; -update noar ti set b2='VLUJA3LMPY90WE8ISR1QH3IZG' where id=8; -update noar tt set v0='M8MC2B062QJE2YMBK1UQ1GD' where id=9; -update noar ti set v0='M8MC2B062QJE2YMBK1UQ1GD' where id=9; -update noar tt set b0='1VEA173H2SQPTMWD' where id=9; -update noar ti set b0='1VEA173H2SQPTMWD' where id=9; -update noar tt set v0='0CRKH4OOE774HGW' where id=9; -update noar ti set v0='0CRKH4OOE774HGW' where id=9; -update noar tt set b1='AZP9R0MEPRIG' where id=9; -update noar ti set b1='AZP9R0MEPRIG' where id=9; -update noar tt set v0='1E' where id=9; -update noar ti set v0='1E' where id=9; -update noar tt set b2='PZFZR3DXM7LKPINHAZ' where id=9; -update noar ti set b2='PZFZR3DXM7LKPINHAZ' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) null, - b0 longblob null, - b1 longblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='C' where id=1; -update noar ti set v0='C' where id=1; -update noar tt set b0='WABX9VUZ4C1R2JTHGL4OQ8R7IBC' where id=1; -update noar ti set b0='WABX9VUZ4C1R2JTHGL4OQ8R7IBC' where id=1; -update noar tt set v0='YZO' where id=1; -update noar ti set v0='YZO' where id=1; -update noar tt set b1='Y22P5303H4U' where id=1; -update noar ti set b1='Y22P5303H4U' where id=1; -update noar tt set v0='E5RIB4Q5412VGPE3K' where id=1; -update noar ti set v0='E5RIB4Q5412VGPE3K' where id=1; -update noar tt set b2='J5N5RPMG' where id=1; -update noar ti set b2='J5N5RPMG' where id=1; -update noar tt set v0='YBTFTC5VKD8OIN4BKUFFA1' where id=2; -update noar ti set v0='YBTFTC5VKD8OIN4BKUFFA1' where id=2; -update noar tt set b0='11SUB6PE2AIXKX9268WKKU76' where id=2; -update noar ti set b0='11SUB6PE2AIXKX9268WKKU76' where id=2; -update noar tt set v0='BBEYMDR3UME59L9N1Q3UBITJY8RBEE4G' where id=2; -update noar ti set v0='BBEYMDR3UME59L9N1Q3UBITJY8RBEE4G' where id=2; -update noar tt set b1='AE46G94ISVEWG00K6SSE' where id=2; -update noar ti set b1='AE46G94ISVEWG00K6SSE' where id=2; -update noar tt set v0='8HW8DRBTUNP36Y3923632JCZL' where id=2; -update noar ti set v0='8HW8DRBTUNP36Y3923632JCZL' where id=2; -update noar tt set b2='GWBOWNVV3LTAKY' where id=2; -update noar ti set b2='GWBOWNVV3LTAKY' where id=2; -update noar tt set v0='PONCREBTLQ3M8DBT4WVYD4KDTRJ5P5T' where id=3; -update noar ti set v0='PONCREBTLQ3M8DBT4WVYD4KDTRJ5P5T' where id=3; -update noar tt set b0='FC2MME72H3HTL48ZI52CBP' where id=3; -update noar ti set b0='FC2MME72H3HTL48ZI52CBP' where id=3; -update noar tt set v0='5IBK' where id=3; -update noar ti set v0='5IBK' where id=3; -update noar tt set b1='OKITB1P28Y79AWZF1UPD' where id=3; -update noar ti set b1='OKITB1P28Y79AWZF1UPD' where id=3; -update noar tt set v0='XA6HK6VWV1PKVCS5J2EKIWF9E6' where id=3; -update noar ti set v0='XA6HK6VWV1PKVCS5J2EKIWF9E6' where id=3; -update noar tt set b2='NGY5BH11JZWDGRQXZADQ20QPF0425GKX' where id=3; -update noar ti set b2='NGY5BH11JZWDGRQXZADQ20QPF0425GKX' where id=3; -update noar tt set v0='QJVE9D9H0HH04FQW8ZNMY1KK' where id=4; -update noar ti set v0='QJVE9D9H0HH04FQW8ZNMY1KK' where id=4; -update noar tt set b0='QGUW' where id=4; -update noar ti set b0='QGUW' where id=4; -update noar tt set v0='QA6OJ33FCLZK94B' where id=4; -update noar ti set v0='QA6OJ33FCLZK94B' where id=4; -update noar tt set b1='RLEX268D1Q1VYP6EN4JRMVSEDLAML' where id=4; -update noar ti set b1='RLEX268D1Q1VYP6EN4JRMVSEDLAML' where id=4; -update noar tt set v0='AJS7WSEE1YICVR0KYP0Q0450V35X' where id=4; -update noar ti set v0='AJS7WSEE1YICVR0KYP0Q0450V35X' where id=4; -update noar tt set b2='BQ5SYMGB5' where id=4; -update noar ti set b2='BQ5SYMGB5' where id=4; -update noar tt set v0='RIWJNW8ZZRG5ARGX9RYG9LF' where id=5; -update noar ti set v0='RIWJNW8ZZRG5ARGX9RYG9LF' where id=5; -update noar tt set b0='3BD2XJAPE6173BIR' where id=5; -update noar ti set b0='3BD2XJAPE6173BIR' where id=5; -update noar tt set v0='HPGT362VXNS635U6OD0FN6G1YP0' where id=5; -update noar ti set v0='HPGT362VXNS635U6OD0FN6G1YP0' where id=5; -update noar tt set b1='2QYBF1BGC4534BDJNOEJ17J' where id=5; -update noar ti set b1='2QYBF1BGC4534BDJNOEJ17J' where id=5; -update noar tt set v0='2YD9V0HDQW9OHHOBXPT6OYYHZ' where id=5; -update noar ti set v0='2YD9V0HDQW9OHHOBXPT6OYYHZ' where id=5; -update noar tt set b2='QX9RKTHZ65PYI6NL4YODE8' where id=5; -update noar ti set b2='QX9RKTHZ65PYI6NL4YODE8' where id=5; -update noar tt set v0='5' where id=6; -update noar ti set v0='5' where id=6; -update noar tt set b0='6HU9TVMCAKVUDV8Q' where id=6; -update noar ti set b0='6HU9TVMCAKVUDV8Q' where id=6; -update noar tt set v0='A0UUG8V1W4814K08MGN' where id=6; -update noar ti set v0='A0UUG8V1W4814K08MGN' where id=6; -update noar tt set b1='I2' where id=6; -update noar ti set b1='I2' where id=6; -update noar tt set v0='2BZDAWFGFKEFQLFT9LWLQK7' where id=6; -update noar ti set v0='2BZDAWFGFKEFQLFT9LWLQK7' where id=6; -update noar tt set b2='G7LEFLNKHX4EAIEM' where id=6; -update noar ti set b2='G7LEFLNKHX4EAIEM' where id=6; -update noar tt set v0='9N4CTBFJKN7I9Z6S03JU5' where id=7; -update noar ti set v0='9N4CTBFJKN7I9Z6S03JU5' where id=7; -update noar tt set b0='GBGKAWP992' where id=7; -update noar ti set b0='GBGKAWP992' where id=7; -update noar tt set v0='SWLDBUJTUFJQLU1OVYG32I6K' where id=7; -update noar ti set v0='SWLDBUJTUFJQLU1OVYG32I6K' where id=7; -update noar tt set b1='AUTYZAFELJX' where id=7; -update noar ti set b1='AUTYZAFELJX' where id=7; -update noar tt set v0='NQM9SIC6CIYFQUIE' where id=7; -update noar ti set v0='NQM9SIC6CIYFQUIE' where id=7; -update noar tt set b2='CFJUZFR5WNR0VTVXVHXSK8VD4L' where id=7; -update noar ti set b2='CFJUZFR5WNR0VTVXVHXSK8VD4L' where id=7; -update noar tt set v0='UWQ454ISEYGIEB2K3GHS' where id=8; -update noar ti set v0='UWQ454ISEYGIEB2K3GHS' where id=8; -update noar tt set b0='8L12CJHUYCBASKOQ' where id=8; -update noar ti set b0='8L12CJHUYCBASKOQ' where id=8; -update noar tt set v0='XDIZWDQ4J6M0L5E8V86TZ27X4XQZ' where id=8; -update noar ti set v0='XDIZWDQ4J6M0L5E8V86TZ27X4XQZ' where id=8; -update noar tt set b1='29Q4PXC1K' where id=8; -update noar ti set b1='29Q4PXC1K' where id=8; -update noar tt set v0='R7B5B3S32W' where id=8; -update noar ti set v0='R7B5B3S32W' where id=8; -update noar tt set b2='0RXY3JWX7S7XXQNM' where id=8; -update noar ti set b2='0RXY3JWX7S7XXQNM' where id=8; -update noar tt set v0='MOI5XW3B0QYEEJYLQQIWU34GTL54KZ' where id=9; -update noar ti set v0='MOI5XW3B0QYEEJYLQQIWU34GTL54KZ' where id=9; -update noar tt set b0='M9N7P7N3IBCJUPDGGH56D3VGZ' where id=9; -update noar ti set b0='M9N7P7N3IBCJUPDGGH56D3VGZ' where id=9; -update noar tt set v0='WIYPO515Z78RTW7B8H21M0IGCD' where id=9; -update noar ti set v0='WIYPO515Z78RTW7B8H21M0IGCD' where id=9; -update noar tt set b1='V3AL' where id=9; -update noar ti set b1='V3AL' where id=9; -update noar tt set v0='30' where id=9; -update noar ti set v0='30' where id=9; -update noar tt set b2='BWSTM87GEI8A07V88ZEY4' where id=9; -update noar ti set b2='BWSTM87GEI8A07V88ZEY4' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) null, - b0 longblob null, - b1 longblob null, - b2 longblob null -) engine=tokudb; -insert into tt (id) values (1); -insert into tt (id) values (2); -insert into tt (id) values (3); -insert into tt (id) values (4); -insert into tt (id) values (5); -insert into tt (id) values (6); -insert into tt (id) values (7); -insert into tt (id) values (8); -insert into tt (id) values (9); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='59VIS6' where id=1; -update noar ti set v0='59VIS6' where id=1; -update noar tt set b0='Y16FUVRDYANKU0F4DQ' where id=1; -update noar ti set b0='Y16FUVRDYANKU0F4DQ' where id=1; -update noar tt set v0='MN3NQ9WZC6LT6LJ74' where id=1; -update noar ti set v0='MN3NQ9WZC6LT6LJ74' where id=1; -update noar tt set b1='Z2QGMCQQT7LT15FBR1FAF' where id=1; -update noar ti set b1='Z2QGMCQQT7LT15FBR1FAF' where id=1; -update noar tt set v0='640H' where id=1; -update noar ti set v0='640H' where id=1; -update noar tt set b2='ENTGKH3UUCY6GRYQYI48HJVG9DUPWEA' where id=1; -update noar ti set b2='ENTGKH3UUCY6GRYQYI48HJVG9DUPWEA' where id=1; -update noar tt set v0='MRG388CO9ZJX' where id=2; -update noar ti set v0='MRG388CO9ZJX' where id=2; -update noar tt set b0='08O1C17PJSO0NSVYY583ABSPWFHGX' where id=2; -update noar ti set b0='08O1C17PJSO0NSVYY583ABSPWFHGX' where id=2; -update noar tt set v0='1M8HIXRKVT0DGA05TRVW20YA' where id=2; -update noar ti set v0='1M8HIXRKVT0DGA05TRVW20YA' where id=2; -update noar tt set b1='NZL5GJRNCNTCF2EB' where id=2; -update noar ti set b1='NZL5GJRNCNTCF2EB' where id=2; -update noar tt set v0='MHQLGNY' where id=2; -update noar ti set v0='MHQLGNY' where id=2; -update noar tt set b2='SSGH3O8YFLQU' where id=2; -update noar ti set b2='SSGH3O8YFLQU' where id=2; -update noar tt set v0='TIEKUG3' where id=3; -update noar ti set v0='TIEKUG3' where id=3; -update noar tt set b0='8' where id=3; -update noar ti set b0='8' where id=3; -update noar tt set v0='PMSXC24' where id=3; -update noar ti set v0='PMSXC24' where id=3; -update noar tt set b1='ES8UVFPUJEY71VIYU42IRT1A' where id=3; -update noar ti set b1='ES8UVFPUJEY71VIYU42IRT1A' where id=3; -update noar tt set v0='9' where id=3; -update noar ti set v0='9' where id=3; -update noar tt set b2='B5WIE4JC79KEI5DBYPCJVGKZQIUORI4Q' where id=3; -update noar ti set b2='B5WIE4JC79KEI5DBYPCJVGKZQIUORI4Q' where id=3; -update noar tt set v0='GJ0QKFH8G2FJJKVPEQK' where id=4; -update noar ti set v0='GJ0QKFH8G2FJJKVPEQK' where id=4; -update noar tt set b0='5D5OKOZ37565D7N2UC09M0V3HN' where id=4; -update noar ti set b0='5D5OKOZ37565D7N2UC09M0V3HN' where id=4; -update noar tt set v0='4OO3' where id=4; -update noar ti set v0='4OO3' where id=4; -update noar tt set b1='EKV7VUEF8Q7YRQGA560' where id=4; -update noar ti set b1='EKV7VUEF8Q7YRQGA560' where id=4; -update noar tt set v0='I1J7T9AAHPRK1K27M' where id=4; -update noar ti set v0='I1J7T9AAHPRK1K27M' where id=4; -update noar tt set b2='ZSYEHYPIC9G17U1JWYV27M2JCZ1R3' where id=4; -update noar ti set b2='ZSYEHYPIC9G17U1JWYV27M2JCZ1R3' where id=4; -update noar tt set v0='ZO1ZAMQKC2CHHCPGHUDR3' where id=5; -update noar ti set v0='ZO1ZAMQKC2CHHCPGHUDR3' where id=5; -update noar tt set b0='99MYQIQFLPOO2' where id=5; -update noar ti set b0='99MYQIQFLPOO2' where id=5; -update noar tt set v0='L3H89KWKVRAXFB7N723RYGFSFMXIP869' where id=5; -update noar ti set v0='L3H89KWKVRAXFB7N723RYGFSFMXIP869' where id=5; -update noar tt set b1='BYJRZ3K4RMWSWKDNUKUU' where id=5; -update noar ti set b1='BYJRZ3K4RMWSWKDNUKUU' where id=5; -update noar tt set v0='117MQSB1W' where id=5; -update noar ti set v0='117MQSB1W' where id=5; -update noar tt set b2='7' where id=5; -update noar ti set b2='7' where id=5; -update noar tt set v0='2B8K4H11FKPU54U6ZU4TH2QE' where id=6; -update noar ti set v0='2B8K4H11FKPU54U6ZU4TH2QE' where id=6; -update noar tt set b0='KDAXYY2ZKGQ' where id=6; -update noar ti set b0='KDAXYY2ZKGQ' where id=6; -update noar tt set v0='4IRV4' where id=6; -update noar ti set v0='4IRV4' where id=6; -update noar tt set b1='YIW8GEGX7W6XF2HCB2RXEF5PSVSVE' where id=6; -update noar ti set b1='YIW8GEGX7W6XF2HCB2RXEF5PSVSVE' where id=6; -update noar tt set v0='IL1B4LWKHPG9' where id=6; -update noar ti set v0='IL1B4LWKHPG9' where id=6; -update noar tt set b2='RZKG3Z0MGB20YRIK' where id=6; -update noar ti set b2='RZKG3Z0MGB20YRIK' where id=6; -update noar tt set v0='1QXMQT9' where id=7; -update noar ti set v0='1QXMQT9' where id=7; -update noar tt set b0='OHQMEALR2KYKLK5H1SE2WIQY7P' where id=7; -update noar ti set b0='OHQMEALR2KYKLK5H1SE2WIQY7P' where id=7; -update noar tt set v0='21YP6W' where id=7; -update noar ti set v0='21YP6W' where id=7; -update noar tt set b1='UFKGNPGCDLP8SUMG22FQD1RY6KJZ' where id=7; -update noar ti set b1='UFKGNPGCDLP8SUMG22FQD1RY6KJZ' where id=7; -update noar tt set v0='VY8ODP1Y4EWU28O42318FU98I1X3MAQ' where id=7; -update noar ti set v0='VY8ODP1Y4EWU28O42318FU98I1X3MAQ' where id=7; -update noar tt set b2='XC' where id=7; -update noar ti set b2='XC' where id=7; -update noar tt set v0='ZEJDHDB4545FX32R27E1RDTBF5' where id=8; -update noar ti set v0='ZEJDHDB4545FX32R27E1RDTBF5' where id=8; -update noar tt set b0='YKL29KZ2AWI9' where id=8; -update noar ti set b0='YKL29KZ2AWI9' where id=8; -update noar tt set v0='OR' where id=8; -update noar ti set v0='OR' where id=8; -update noar tt set b1='KBPNRBL0B1WNRVBEXVP16EU3U2NN3' where id=8; -update noar ti set b1='KBPNRBL0B1WNRVBEXVP16EU3U2NN3' where id=8; -update noar tt set v0='UEI6QQPEKLOVS4Q7' where id=8; -update noar ti set v0='UEI6QQPEKLOVS4Q7' where id=8; -update noar tt set b2='TFWGLAOD' where id=8; -update noar ti set b2='TFWGLAOD' where id=8; -update noar tt set v0='61E4GG41WNY575' where id=9; -update noar ti set v0='61E4GG41WNY575' where id=9; -update noar tt set b0='SCQEWNAKJR51B285WBC' where id=9; -update noar ti set b0='SCQEWNAKJR51B285WBC' where id=9; -update noar tt set v0='PB6QMSD3U9I2M' where id=9; -update noar ti set v0='PB6QMSD3U9I2M' where id=9; -update noar tt set b1='IYBZ' where id=9; -update noar ti set b1='IYBZ' where id=9; -update noar tt set v0='91XMZFO9C' where id=9; -update noar ti set v0='91XMZFO9C' where id=9; -update noar tt set b2='CJKUY1JFUFG5MDZ16KLOD' where id=9; -update noar ti set b2='CJKUY1JFUFG5MDZ16KLOD' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(32) not null, - b0 longblob not null, - b1 longblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='C8MZ88QX53XHDM0IAF6H8OBA6YBY' where id=1; -update noar ti set v0='C8MZ88QX53XHDM0IAF6H8OBA6YBY' where id=1; -update noar tt set b0='N0O88B2D6' where id=1; -update noar ti set b0='N0O88B2D6' where id=1; -update noar tt set v0='N1AOZKRMOSYXN9L79IZCC1SV' where id=1; -update noar ti set v0='N1AOZKRMOSYXN9L79IZCC1SV' where id=1; -update noar tt set b1='37XGQ95OSFFT5X42Q9W' where id=1; -update noar ti set b1='37XGQ95OSFFT5X42Q9W' where id=1; -update noar tt set v0='PR3N6SAZ' where id=1; -update noar ti set v0='PR3N6SAZ' where id=1; -update noar tt set b2='8I4A' where id=1; -update noar ti set b2='8I4A' where id=1; -update noar tt set v0='UBOZN' where id=2; -update noar ti set v0='UBOZN' where id=2; -update noar tt set b0='R1MVCFGWM1O9A0' where id=2; -update noar ti set b0='R1MVCFGWM1O9A0' where id=2; -update noar tt set v0='9ZTLN8UL83IFEII4N8TYNL9UO8E' where id=2; -update noar ti set v0='9ZTLN8UL83IFEII4N8TYNL9UO8E' where id=2; -update noar tt set b1='VHZMMIG5TB8S5YP5LBHR2MQ2WVFG' where id=2; -update noar ti set b1='VHZMMIG5TB8S5YP5LBHR2MQ2WVFG' where id=2; -update noar tt set v0='K9IOAEJHNQA9' where id=2; -update noar ti set v0='K9IOAEJHNQA9' where id=2; -update noar tt set b2='FVIM7GEJ27X' where id=2; -update noar ti set b2='FVIM7GEJ27X' where id=2; -update noar tt set v0='OU0QW7UVXY6XK06CE7Y91DBEH' where id=3; -update noar ti set v0='OU0QW7UVXY6XK06CE7Y91DBEH' where id=3; -update noar tt set b0='1OP916G1RF7QHC497' where id=3; -update noar ti set b0='1OP916G1RF7QHC497' where id=3; -update noar tt set v0='RDEPUJNC4J4141I5E8ZDC8JOCOI' where id=3; -update noar ti set v0='RDEPUJNC4J4141I5E8ZDC8JOCOI' where id=3; -update noar tt set b1='VHJ0H59W77U0PCZG88OGSPQ4QCPP1' where id=3; -update noar ti set b1='VHJ0H59W77U0PCZG88OGSPQ4QCPP1' where id=3; -update noar tt set v0='P4NY' where id=3; -update noar ti set v0='P4NY' where id=3; -update noar tt set b2='PEQ2A' where id=3; -update noar ti set b2='PEQ2A' where id=3; -update noar tt set v0='GP9PDZX09EFJ12NSPR70ISR98' where id=4; -update noar ti set v0='GP9PDZX09EFJ12NSPR70ISR98' where id=4; -update noar tt set b0='TFG25A1' where id=4; -update noar ti set b0='TFG25A1' where id=4; -update noar tt set v0='8H' where id=4; -update noar ti set v0='8H' where id=4; -update noar tt set b1='73U769BQS6Q0RHR9L1EN6G8O7BGHPJ2' where id=4; -update noar ti set b1='73U769BQS6Q0RHR9L1EN6G8O7BGHPJ2' where id=4; -update noar tt set v0='4DEAOUPR5RSLHBRF6MI3CU' where id=4; -update noar ti set v0='4DEAOUPR5RSLHBRF6MI3CU' where id=4; -update noar tt set b2='B22KOZSJD1DP0UI78HW9Y0GD0VMQH4' where id=4; -update noar ti set b2='B22KOZSJD1DP0UI78HW9Y0GD0VMQH4' where id=4; -update noar tt set v0='SRNVJNY0Z' where id=5; -update noar ti set v0='SRNVJNY0Z' where id=5; -update noar tt set b0='P' where id=5; -update noar ti set b0='P' where id=5; -update noar tt set v0='UBQZIO6U0' where id=5; -update noar ti set v0='UBQZIO6U0' where id=5; -update noar tt set b1='U54L8PRPOMM7VC31E' where id=5; -update noar ti set b1='U54L8PRPOMM7VC31E' where id=5; -update noar tt set v0='5WRETF45UVC1709ED0GV2DXHW' where id=5; -update noar ti set v0='5WRETF45UVC1709ED0GV2DXHW' where id=5; -update noar tt set b2='2UWBK5EU73X7IJRR57T2WZMCF59BB' where id=5; -update noar ti set b2='2UWBK5EU73X7IJRR57T2WZMCF59BB' where id=5; -update noar tt set v0='55AKSTWK3CKK7BV' where id=6; -update noar ti set v0='55AKSTWK3CKK7BV' where id=6; -update noar tt set b0='KY7Z' where id=6; -update noar ti set b0='KY7Z' where id=6; -update noar tt set v0='EBRTUD5C6Z5YPH8HUXJ' where id=6; -update noar ti set v0='EBRTUD5C6Z5YPH8HUXJ' where id=6; -update noar tt set b1='X3' where id=6; -update noar ti set b1='X3' where id=6; -update noar tt set v0='F57Y0R1Y8ORVP9C88YJR3ABTLWDVK6' where id=6; -update noar ti set v0='F57Y0R1Y8ORVP9C88YJR3ABTLWDVK6' where id=6; -update noar tt set b2='0OXI2SG154UCHMGQM' where id=6; -update noar ti set b2='0OXI2SG154UCHMGQM' where id=6; -update noar tt set v0='LM12BDBTUXZ' where id=7; -update noar ti set v0='LM12BDBTUXZ' where id=7; -update noar tt set b0='32AYRCYIRJRLE697I' where id=7; -update noar ti set b0='32AYRCYIRJRLE697I' where id=7; -update noar tt set v0='0' where id=7; -update noar ti set v0='0' where id=7; -update noar tt set b1='O8NY1N1JI6NE53ULNV6OXU3' where id=7; -update noar ti set b1='O8NY1N1JI6NE53ULNV6OXU3' where id=7; -update noar tt set v0='6RTRMOE31H17VNZG5DSNY0' where id=7; -update noar ti set v0='6RTRMOE31H17VNZG5DSNY0' where id=7; -update noar tt set b2='PQ2W0Q38ENFQ8QRRV' where id=7; -update noar ti set b2='PQ2W0Q38ENFQ8QRRV' where id=7; -update noar tt set v0='IT5MMMPRSDYRS276VR4V4QE' where id=8; -update noar ti set v0='IT5MMMPRSDYRS276VR4V4QE' where id=8; -update noar tt set b0='NS9PULEDOQZVAPOW6U' where id=8; -update noar ti set b0='NS9PULEDOQZVAPOW6U' where id=8; -update noar tt set v0='9FIW5ZD3RJR530ARUHJF' where id=8; -update noar ti set v0='9FIW5ZD3RJR530ARUHJF' where id=8; -update noar tt set b1='PKNK5' where id=8; -update noar ti set b1='PKNK5' where id=8; -update noar tt set v0='739F8P4' where id=8; -update noar ti set v0='739F8P4' where id=8; -update noar tt set b2='GOYURBF7P45JLITZ27VK1ZTIARKX94' where id=8; -update noar ti set b2='GOYURBF7P45JLITZ27VK1ZTIARKX94' where id=8; -update noar tt set v0='RN6PH' where id=9; -update noar ti set v0='RN6PH' where id=9; -update noar tt set b0='GP1S6HTYE0GX083U' where id=9; -update noar ti set b0='GP1S6HTYE0GX083U' where id=9; -update noar tt set v0='JEZPISDJ1KY5GJ' where id=9; -update noar ti set v0='JEZPISDJ1KY5GJ' where id=9; -update noar tt set b1='5IPR43G9OCJH9' where id=9; -update noar ti set b1='5IPR43G9OCJH9' where id=9; -update noar tt set v0='O47MVT09F9' where id=9; -update noar ti set v0='O47MVT09F9' where id=9; -update noar tt set b2='B4KOCBIM8RNDS6G23XDLIMSANJKGM' where id=9; -update noar ti set b2='B4KOCBIM8RNDS6G23XDLIMSANJKGM' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - v0 varchar(256) not null, - b0 longblob not null, - b1 longblob not null, - b2 longblob not null -) engine=tokudb; -insert into tt values (1,'','','',''); -insert into tt values (2,'','','',''); -insert into tt values (3,'','','',''); -insert into tt values (4,'','','',''); -insert into tt values (5,'','','',''); -insert into tt values (6,'','','',''); -insert into tt values (7,'','','',''); -insert into tt values (8,'','','',''); -insert into tt values (9,'','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='I6JZOVD0Q3VKPQV0F16FUI' where id=1; -update noar ti set v0='I6JZOVD0Q3VKPQV0F16FUI' where id=1; -update noar tt set b0='LMA' where id=1; -update noar ti set b0='LMA' where id=1; -update noar tt set v0='QES8729V3ZKS4FZRL' where id=1; -update noar ti set v0='QES8729V3ZKS4FZRL' where id=1; -update noar tt set b1='NDM04IPLD6KNEE1DUYZ739ST3VD0VX' where id=1; -update noar ti set b1='NDM04IPLD6KNEE1DUYZ739ST3VD0VX' where id=1; -update noar tt set v0='9DT3BFV1OKC3FP8ANCB6MOO8UI2Q' where id=1; -update noar ti set v0='9DT3BFV1OKC3FP8ANCB6MOO8UI2Q' where id=1; -update noar tt set b2='3HSO5XNEJ59' where id=1; -update noar ti set b2='3HSO5XNEJ59' where id=1; -update noar tt set v0='785EI1QQNEG1ZW7L' where id=2; -update noar ti set v0='785EI1QQNEG1ZW7L' where id=2; -update noar tt set b0='8X133OT' where id=2; -update noar ti set b0='8X133OT' where id=2; -update noar tt set v0='ZE' where id=2; -update noar ti set v0='ZE' where id=2; -update noar tt set b1='5MWOR8' where id=2; -update noar ti set b1='5MWOR8' where id=2; -update noar tt set v0='JZLR2M' where id=2; -update noar ti set v0='JZLR2M' where id=2; -update noar tt set b2='WGUMKCTYWSMWK6LT2XV7ZX5K7NQ' where id=2; -update noar ti set b2='WGUMKCTYWSMWK6LT2XV7ZX5K7NQ' where id=2; -update noar tt set v0='5JRK06C9QZL0X' where id=3; -update noar ti set v0='5JRK06C9QZL0X' where id=3; -update noar tt set b0='2XK5UFJAC2C86O0BL75PTA1DKRS3' where id=3; -update noar ti set b0='2XK5UFJAC2C86O0BL75PTA1DKRS3' where id=3; -update noar tt set v0='R88GRBCKRR4GOJCJCV0V' where id=3; -update noar ti set v0='R88GRBCKRR4GOJCJCV0V' where id=3; -update noar tt set b1='3ZMX9HD0A37PB8JP8FBF6WIX1IF1D7OD' where id=3; -update noar ti set b1='3ZMX9HD0A37PB8JP8FBF6WIX1IF1D7OD' where id=3; -update noar tt set v0='J2W9YJ1F37BQ0RVU0TE1PD1WK1Q0MOY' where id=3; -update noar ti set v0='J2W9YJ1F37BQ0RVU0TE1PD1WK1Q0MOY' where id=3; -update noar tt set b2='W1VTVX64P881E1C0LEF9' where id=3; -update noar ti set b2='W1VTVX64P881E1C0LEF9' where id=3; -update noar tt set v0='JUQC4PQSW1FH0JBJPF' where id=4; -update noar ti set v0='JUQC4PQSW1FH0JBJPF' where id=4; -update noar tt set b0='MC6Q3JQR88' where id=4; -update noar ti set b0='MC6Q3JQR88' where id=4; -update noar tt set v0='0T5OSG00PW6YWPXEDT1WC0A0ZBVEPM' where id=4; -update noar ti set v0='0T5OSG00PW6YWPXEDT1WC0A0ZBVEPM' where id=4; -update noar tt set b1='7BF7EI1' where id=4; -update noar ti set b1='7BF7EI1' where id=4; -update noar tt set v0='DPV7D8B2VZU9V4JJSZ2N7U1UBQ' where id=4; -update noar ti set v0='DPV7D8B2VZU9V4JJSZ2N7U1UBQ' where id=4; -update noar tt set b2='2FCJ8TFM3N0ICBDMMUM0' where id=4; -update noar ti set b2='2FCJ8TFM3N0ICBDMMUM0' where id=4; -update noar tt set v0='HJQC0OCESWPGF14VOVKT' where id=5; -update noar ti set v0='HJQC0OCESWPGF14VOVKT' where id=5; -update noar tt set b0='8O9UCSXDF7GU' where id=5; -update noar ti set b0='8O9UCSXDF7GU' where id=5; -update noar tt set v0='OYVZDAC0QB1OBB' where id=5; -update noar ti set v0='OYVZDAC0QB1OBB' where id=5; -update noar tt set b1='HHH50' where id=5; -update noar ti set b1='HHH50' where id=5; -update noar tt set v0='Z8MVSR60GOHWRX72QM0UQEN985' where id=5; -update noar ti set v0='Z8MVSR60GOHWRX72QM0UQEN985' where id=5; -update noar tt set b2='K779NJDMFEOA' where id=5; -update noar ti set b2='K779NJDMFEOA' where id=5; -update noar tt set v0='OVXT1X' where id=6; -update noar ti set v0='OVXT1X' where id=6; -update noar tt set b0='63V2OXBQNKL2LD710' where id=6; -update noar ti set b0='63V2OXBQNKL2LD710' where id=6; -update noar tt set v0='IWWAXFNG84G6MTUOB35EB9GKDKYM' where id=6; -update noar ti set v0='IWWAXFNG84G6MTUOB35EB9GKDKYM' where id=6; -update noar tt set b1='7HW3YATS3WGVZWQ8B24C74' where id=6; -update noar ti set b1='7HW3YATS3WGVZWQ8B24C74' where id=6; -update noar tt set v0='GBERGIH8' where id=6; -update noar ti set v0='GBERGIH8' where id=6; -update noar tt set b2='YR3LN' where id=6; -update noar ti set b2='YR3LN' where id=6; -update noar tt set v0='ZXVUWNSHXVNHGDEOWWBF6YBND1C0R3A7' where id=7; -update noar ti set v0='ZXVUWNSHXVNHGDEOWWBF6YBND1C0R3A7' where id=7; -update noar tt set b0='63U2P4E7NJPGC8J0K6Q6KIBTD39OLJ' where id=7; -update noar ti set b0='63U2P4E7NJPGC8J0K6Q6KIBTD39OLJ' where id=7; -update noar tt set v0='Y5MCY5697GHDWMX2LJGZMIN' where id=7; -update noar ti set v0='Y5MCY5697GHDWMX2LJGZMIN' where id=7; -update noar tt set b1='1U09FXSSIYL16M6JEA8H606P' where id=7; -update noar ti set b1='1U09FXSSIYL16M6JEA8H606P' where id=7; -update noar tt set v0='1W0B1V5X9BARERXRDTPS424M0FTS87' where id=7; -update noar ti set v0='1W0B1V5X9BARERXRDTPS424M0FTS87' where id=7; -update noar tt set b2='32BGBT50IT015AQWF11CYXO0RV348V' where id=7; -update noar ti set b2='32BGBT50IT015AQWF11CYXO0RV348V' where id=7; -update noar tt set v0='PQ8FXWADPE5OGKA9W' where id=8; -update noar ti set v0='PQ8FXWADPE5OGKA9W' where id=8; -update noar tt set b0='21YP85HIA8WEFUC8TNX3M50' where id=8; -update noar ti set b0='21YP85HIA8WEFUC8TNX3M50' where id=8; -update noar tt set v0='4VZFL6K01OGTFH2IID1E1' where id=8; -update noar ti set v0='4VZFL6K01OGTFH2IID1E1' where id=8; -update noar tt set b1='JUJISIJ60YBM2GHE9W6M' where id=8; -update noar ti set b1='JUJISIJ60YBM2GHE9W6M' where id=8; -update noar tt set v0='JYQ9EFJDF94MD' where id=8; -update noar ti set v0='JYQ9EFJDF94MD' where id=8; -update noar tt set b2='PHIC3GT1SEJL04' where id=8; -update noar ti set b2='PHIC3GT1SEJL04' where id=8; -update noar tt set v0='9UOB0KDAE96FO' where id=9; -update noar ti set v0='9UOB0KDAE96FO' where id=9; -update noar tt set b0='JX' where id=9; -update noar ti set b0='JX' where id=9; -update noar tt set v0='0Y08GKSNFS62O' where id=9; -update noar ti set v0='0Y08GKSNFS62O' where id=9; -update noar tt set b1='7Q0D2MQDBWV0BOILC56E3E5' where id=9; -update noar ti set b1='7Q0D2MQDBWV0BOILC56E3E5' where id=9; -update noar tt set v0='3ZVTPSW891ZZ9ZW1Q3IIO53SWTAWC22H' where id=9; -update noar ti set v0='3ZVTPSW891ZZ9ZW1Q3IIO53SWTAWC22H' where id=9; -update noar tt set b2='SFUW878IH9VJ0K59RAPU4R9T2' where id=9; -update noar ti set b2='SFUW878IH9VJ0K59RAPU4R9T2' where id=9; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; +--source ../include/fast_update_gen_header.inc + +--let GENERATED=$MYSQL_TMP_DIR/generated_fast_update_blobs_with_varchar.inc + +--perl + + my $nrows = 10; + open(FILE, '>', "$ENV{GENERATED}") or die; + my @blob_types = ('tinyblob', 'blob', 'mediumblob', 'longblob'); + foreach my $i (0, 1) { + foreach my $a (@blob_types) { + foreach my $b (@blob_types) { + foreach my $c (@blob_types) { + foreach my $n ('null', 'not null') { + foreach my $v ('varchar(32)', 'varchar(256)') { + test_blobs([$a, $b, $c], $v, $n, $i, $nrows); + } + } + } + } + } + } + close FILE; + + sub test_blobs { + my $cols = shift; + my $v = shift; + my $n = shift; + my $need_fixed_int = shift; + my $nrows = shift; + + print FILE "create table tt (id bigint unsigned primary key,\n"; + print FILE " f0 int $n,\n" if ($need_fixed_int); + print FILE " v0 $v $n,\n"; + foreach my $i (0 .. $#{$cols}) { + if ($i < $#{$cols}) { + print FILE " b$i $cols->[$i] $n,\n"; + } + else { + print FILE " b$i $cols->[$i] $n\n"; + } + } + print FILE ") engine=tokudb;\n"; + + foreach my $id (1 .. ($nrows - 1)) { + if ($n eq 'null') { + print FILE "insert into tt (id) values ($id);\n"; + } + else { + if ($need_fixed_int) { + print FILE "insert into tt values ($id, 0, '', '', '', '');\n"; + } + else { + print FILE "insert into tt values ($id, '', '', '', '');\n"; + } + } + } + + print FILE "create table ti like tt;\n"; + print FILE "alter table ti engine=innodb;\n"; + print FILE "insert into ti select * from tt;\n"; + + foreach my $id (1 .. ($nrows - 1)) { + foreach my $i (0 .. 2) { + my $long_str = rnd_str((rand(32) + 1), ("A" .. "Z", 0 .. 9)); + print FILE "update tt set v0='$long_str' where id=$id;\n"; + print FILE "update ti set v0='$long_str' where id=$id;\n"; + + $long_str = rnd_str((rand(32) + 1), ("A" .. "Z", 0 .. 9)); + print FILE "update tt set b$i='$long_str' where id=$id;\n"; + print FILE "update ti set b$i='$long_str' where id=$id;\n"; + } + } + + print FILE '--let $diff_tables = test.tt, test.ti'."\n"; + print FILE "--source include/diff_tables.inc\n"; + print FILE "drop table tt, ti;\n"; + } + + sub rnd_str { join '', @_[ map{ rand @_ } 1 .. shift ] } + +EOF + +--source ../include/fast_update_gen_footer_silent.inc diff --git a/mysql-test/suite/tokudb/t/fast_update_char.test b/mysql-test/suite/tokudb/t/fast_update_char.test index 2ee6fbd79eea..173648459428 100644 --- a/mysql-test/suite/tokudb/t/fast_update_char.test +++ b/mysql-test/suite/tokudb/t/fast_update_char.test @@ -4,94 +4,96 @@ source include/have_tokudb.inc; source include/have_innodb.inc; -set default_storage_engine='tokudb'; +set tokudb_enable_fast_update=1; +source ../include/setup_fast_update_upsert.inc; -disable_warnings; -drop table if exists tt, ti; -enable_warnings; - -set tokudb_disable_slow_update=1; - -create table tt (id int primary key, c char(32), b binary(32)); +create table tt (id int primary key, c char(32), b binary(32)) engine = tokudb; create table ti like tt; alter table ti engine=innodb; insert into tt values (1,null,null); insert into ti values (1,null,null); -update noar tt set c='hi' where id=1; -update noar ti set c='hi' where id=1; +update tt set c='hi' where id=1; +update ti set c='hi' where id=1; let $diff_tables = test.tt, test.ti; source include/diff_tables.inc; -update noar tt set c='there' where id=1; -update noar ti set c='there' where id=1; +update tt set c='there' where id=1; +update ti set c='there' where id=1; let $diff_tables = test.tt, test.ti; source include/diff_tables.inc; drop table tt, ti; -create table tt (id char(8) primary key, c char(32), b binary(32)); +create table tt (id char(8) primary key, + c char(32), + b binary(32)) engine = tokudb; create table ti like tt; alter table ti engine=innodb; insert into tt values ('1',null,null); insert into ti values ('1',null,null); -update noar tt set c='hi' where id='1'; -update noar ti set c='hi' where id='1'; +update tt set c='hi' where id='1'; +update ti set c='hi' where id='1'; let $diff_tables = test.tt, test.ti; source include/diff_tables.inc; -update noar tt set c='there' where id='1'; -update noar ti set c='there' where id='1'; +update tt set c='there' where id='1'; +update ti set c='there' where id='1'; let $diff_tables = test.tt, test.ti; source include/diff_tables.inc; drop table tt, ti; -create table tt (id varchar(8) primary key, a int, b char(32), c char(32), d binary(32)); +create table tt (id varchar(8) primary key, + a int, + b char(32), + c char(32), + d binary(32)) engine = tokudb; create table ti like tt; alter table ti engine=innodb; insert into tt values ('1',null,null,null,null); insert into ti values ('1',null,null,null,null); -update noar tt set b='hi' where id='1'; -update noar ti set b='hi' where id='1'; +update tt set b='hi' where id='1'; +update ti set b='hi' where id='1'; let $diff_tables = test.tt, test.ti; source include/diff_tables.inc; -update noar tt set c='there' where id='1'; -update noar ti set c='there' where id='1'; +update tt set c='there' where id='1'; +update ti set c='there' where id='1'; let $diff_tables = test.tt, test.ti; source include/diff_tables.inc; drop table tt, ti; -create table tt (id varchar(8) primary key, a int, b char(32), c char(32), d binary(32)); +create table tt (id varchar(8) primary key, + a int, + b char(32), + c char(32), + d binary(32)) engine = tokudb; create table ti like tt; alter table ti engine=innodb; insert into tt values ('1',null,null,null,null); insert into ti values ('1',null,null,null,null); -update noar tt set b='123' where id='1'; -update noar ti set b='123' where id='1'; +update tt set b='123' where id='1'; +update ti set b='123' where id='1'; let $diff_tables = test.tt, test.ti; source include/diff_tables.inc; -update noar tt set c=456 where id='1'; -update noar ti set c=456 where id='1'; +update tt set c=456 where id='1'; +update ti set c=456 where id='1'; let $diff_tables = test.tt, test.ti; source include/diff_tables.inc; -update noar tt set c=789 where id=1; -update noar ti set c=789 where id=1; +update tt set c=789 where id=1; +update ti set c=789 where id=1; let $diff_tables = test.tt, test.ti; source include/diff_tables.inc; drop table tt, ti; - - - diff --git a/mysql-test/suite/tokudb/t/fast_update_deadlock.test b/mysql-test/suite/tokudb/t/fast_update_deadlock.test index 24221f85f759..380f28d6a79d 100644 --- a/mysql-test/suite/tokudb/t/fast_update_deadlock.test +++ b/mysql-test/suite/tokudb/t/fast_update_deadlock.test @@ -1,31 +1,31 @@ source include/have_tokudb.inc; -disable_warnings; -drop table if exists t; -enable_warnings; +set tokudb_enable_fast_update=1; +source ../include/setup_fast_update_upsert.inc; -set default_storage_engine='tokudb'; - -create table t (id bigint primary key, b bigint not null default 0); +create table t (id bigint primary key, + b bigint not null default 0) engine = tokudb; insert into t (id) values (1),(2); connect (conn1,localhost,root,,); +set tokudb_enable_fast_update=1; +source ../include/setup_fast_update_upsert.inc; connection default; begin; -update noar t set b=b+1 where id=1; +update t set b=b+1 where id=1; connection conn1; begin; -update noar t set b=b-1 where id=2; +update t set b=b-1 where id=2; connection default; -send update noar t set b=b+1 where id=2; +send update t set b=b+1 where id=2; connection conn1; sleep 1; error 1205,1213; -update noar t set b=b-1 where id=1; +update t set b=b-1 where id=1; rollback; connection default; @@ -38,4 +38,3 @@ disconnect conn1; select * from t; drop table t; - diff --git a/mysql-test/suite/tokudb/t/fast_update_decr_floor.py b/mysql-test/suite/tokudb/t/fast_update_decr_floor.py deleted file mode 100644 index 430d4c4f3655..000000000000 --- a/mysql-test/suite/tokudb/t/fast_update_decr_floor.py +++ /dev/null @@ -1,58 +0,0 @@ -#!/usr/bin/env python - -import sys - -def main(): - print "# generated by tokudb_update_decr_floor.py" - print "source include/have_tokudb.inc;" - print "source include/have_innodb.inc;" - print "set default_storage_engine='tokudb';" - print "disable_warnings;" - print "drop table if exists t;" - print "enable_warnings;" - - print "set tokudb_disable_slow_update=1;" - - for t in [ 'tinyint', 'smallint', 'mediumint', 'int', 'bigint' ]: - for u in [ '', 'unsigned' ]: - for n in [ 'null', 'not null' ]: - test_int(t, u, n) - return 0 - -def test_int(t, u, n): - print "create table tt (" - print " id %s %s %s primary key," % (t, u, n) - print " x %s %s %s" % (t, u, n) - print ");" - - print "insert into tt values (1,4);" - print "create table ti like tt;" - print "alter table ti engine=innodb;" - print "insert into ti select * from tt;" - - if u == 'unsigned': - print "update noar tt set x=if(x=0,0,x-1) where id=1;" - print "update noar ti set x=if(x=0,0,x-1) where id=1;" - - print "update noar tt set x=if(x=0,0,x-1) where id=1;" - print "update noar ti set x=if(x=0,0,x-1) where id=1;" - - print "update noar tt set x=if(x=0,0,x-1) where id=1;" - print "update noar ti set x=if(x=0,0,x-1) where id=1;" - - print "update noar tt set x=if(x=0,0,x-1) where id=1;" - print "update noar ti set x=if(x=0,0,x-1) where id=1;" - - print "# try to decrement when x=0" - print "update noar tt set x=if(x=0,0,x-1) where id=1;" - print "update noar ti set x=if(x=0,0,x-1) where id=1;" - print "let $diff_tables = test.tt, test.ti;" - print "source include/diff_tables.inc;" - else: - print "replace_regex /MariaDB/XYZ/ /MySQL/XYZ/;" - print "error ER_UNSUPPORTED_EXTENSION;" - print "update noar tt set x=if(x=0,0,x-1) where id=1;" - - print "drop table tt, ti;" - -sys.exit(main()) diff --git a/mysql-test/suite/tokudb/t/fast_update_decr_floor.test b/mysql-test/suite/tokudb/t/fast_update_decr_floor.test index 133331d35781..109e39d0e0aa 100644 --- a/mysql-test/suite/tokudb/t/fast_update_decr_floor.test +++ b/mysql-test/suite/tokudb/t/fast_update_decr_floor.test @@ -1,348 +1,61 @@ -# generated by tokudb_update_decr_floor.py -source include/have_tokudb.inc; -source include/have_innodb.inc; -set default_storage_engine='tokudb'; -disable_warnings; -drop table if exists t; -enable_warnings; -set tokudb_disable_slow_update=1; -create table tt ( - id tinyint null primary key, - x tinyint null -); -insert into tt values (1,4); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar tt set x=if(x=0,0,x-1) where id=1; -drop table tt, ti; -create table tt ( - id tinyint not null primary key, - x tinyint not null -); -insert into tt values (1,4); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar tt set x=if(x=0,0,x-1) where id=1; -drop table tt, ti; -create table tt ( - id tinyint unsigned null primary key, - x tinyint unsigned null -); -insert into tt values (1,4); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -# try to decrement when x=0 -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt ( - id tinyint unsigned not null primary key, - x tinyint unsigned not null -); -insert into tt values (1,4); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -# try to decrement when x=0 -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt ( - id smallint null primary key, - x smallint null -); -insert into tt values (1,4); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar tt set x=if(x=0,0,x-1) where id=1; -drop table tt, ti; -create table tt ( - id smallint not null primary key, - x smallint not null -); -insert into tt values (1,4); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar tt set x=if(x=0,0,x-1) where id=1; -drop table tt, ti; -create table tt ( - id smallint unsigned null primary key, - x smallint unsigned null -); -insert into tt values (1,4); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -# try to decrement when x=0 -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt ( - id smallint unsigned not null primary key, - x smallint unsigned not null -); -insert into tt values (1,4); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -# try to decrement when x=0 -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt ( - id mediumint null primary key, - x mediumint null -); -insert into tt values (1,4); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar tt set x=if(x=0,0,x-1) where id=1; -drop table tt, ti; -create table tt ( - id mediumint not null primary key, - x mediumint not null -); -insert into tt values (1,4); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar tt set x=if(x=0,0,x-1) where id=1; -drop table tt, ti; -create table tt ( - id mediumint unsigned null primary key, - x mediumint unsigned null -); -insert into tt values (1,4); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -# try to decrement when x=0 -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt ( - id mediumint unsigned not null primary key, - x mediumint unsigned not null -); -insert into tt values (1,4); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -# try to decrement when x=0 -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt ( - id int null primary key, - x int null -); -insert into tt values (1,4); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar tt set x=if(x=0,0,x-1) where id=1; -drop table tt, ti; -create table tt ( - id int not null primary key, - x int not null -); -insert into tt values (1,4); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar tt set x=if(x=0,0,x-1) where id=1; -drop table tt, ti; -create table tt ( - id int unsigned null primary key, - x int unsigned null -); -insert into tt values (1,4); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -# try to decrement when x=0 -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt ( - id int unsigned not null primary key, - x int unsigned not null -); -insert into tt values (1,4); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -# try to decrement when x=0 -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt ( - id bigint null primary key, - x bigint null -); -insert into tt values (1,4); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar tt set x=if(x=0,0,x-1) where id=1; -drop table tt, ti; -create table tt ( - id bigint not null primary key, - x bigint not null -); -insert into tt values (1,4); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar tt set x=if(x=0,0,x-1) where id=1; -drop table tt, ti; -create table tt ( - id bigint unsigned null primary key, - x bigint unsigned null -); -insert into tt values (1,4); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -# try to decrement when x=0 -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt ( - id bigint unsigned not null primary key, - x bigint unsigned not null -); -insert into tt values (1,4); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -# try to decrement when x=0 -update noar tt set x=if(x=0,0,x-1) where id=1; -update noar ti set x=if(x=0,0,x-1) where id=1; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; +--source ../include/fast_update_gen_header.inc + +--let GENERATED=$MYSQL_TMP_DIR/generated_fast_update_decr_floor.inc + +--perl + open(FILE, '>', "$ENV{GENERATED}") or die; + foreach my $t ('tinyint', 'smallint', 'mediumint', 'int', 'bigint') { + foreach my $u ('', 'unsigned') { + foreach my $n ('null', 'not null') { + test_int($t, $u, $n); + } + } + } + close FILE; + + sub test_int { + my $t = shift; + my $u = shift; + my $n = shift; + + print FILE "create table tt (\n"; + print FILE " id $t $u primary key,\n"; + print FILE " x $t $u $n\n"; + print FILE ") engine = tokudb;\n"; + + print FILE "insert into tt values (1,4);\n"; + print FILE "create table ti like tt;\n"; + print FILE "alter table ti engine=innodb;\n"; + print FILE "insert into ti select * from tt;\n"; + + if ($u eq 'unsigned') { + print FILE "update tt set x = if(x = 0, 0, x - 1) where id = 1;\n"; + print FILE "update ti set x = if(x = 0, 0, x - 1) where id = 1;\n"; + + print FILE "update tt set x = if(x = 0, 0, x - 1) where id = 1;\n"; + print FILE "update ti set x = if(x = 0, 0, x - 1) where id = 1;\n"; + + print FILE "update tt set x = if(x = 0, 0, x - 1) where id = 1;\n"; + print FILE "update ti set x = if(x = 0, 0, x - 1) where id = 1;\n"; + + print FILE "update tt set x = if(x = 0, 0, x - 1) where id = 1;\n"; + print FILE "update ti set x = if(x = 0, 0, x - 1) where id = 1;\n"; + + print FILE "# try to decrement when x=0\n"; + print FILE "update tt set x = if(x = 0, 0, x - 1) where id = 1;\n"; + print FILE "update ti set x = if(x = 0, 0, x - 1) where id = 1;\n"; + print FILE '--let $diff_tables = test.tt, test.ti'."\n"; + print FILE "--source include/diff_tables.inc\n"; + } + else { + print FILE "--replace_regex /MariaDB/XYZ/ /MySQL/XYZ/\n"; + print FILE "--error ER_UNSUPPORTED_EXTENSION\n"; + print FILE "update tt set x = if(x = 0, 0, x - 1) where id = 1;\n"; + } + + print FILE "drop table tt, ti;\n"; + } + +EOF + +--source ../include/fast_update_gen_footer_silent.inc diff --git a/mysql-test/suite/tokudb/t/fast_update_disable_slow_update.test b/mysql-test/suite/tokudb/t/fast_update_disable_slow_update.test deleted file mode 100644 index 3fdca0a6edd6..000000000000 --- a/mysql-test/suite/tokudb/t/fast_update_disable_slow_update.test +++ /dev/null @@ -1,17 +0,0 @@ ---source include/have_tokudb.inc - -set default_storage_engine='tokudb'; - ---disable_warnings -drop table if exists t; ---enable_warnings - -create table t (id int primary key, b int, key(b)); - -set tokudb_disable_slow_update=1; - -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; ---error ER_UNSUPPORTED_EXTENSION -update noar t set b=b+1 where id=42; - -drop table t; diff --git a/mysql-test/suite/tokudb/t/fast_update_error.test b/mysql-test/suite/tokudb/t/fast_update_error.test index dc7c4d277dcf..51fde25a5f26 100644 --- a/mysql-test/suite/tokudb/t/fast_update_error.test +++ b/mysql-test/suite/tokudb/t/fast_update_error.test @@ -1,25 +1,19 @@ # test that char field updates are fast # test that char field primary keys are fast - source include/have_tokudb.inc; -set default_storage_engine='tokudb'; - -disable_warnings; -drop table if exists tt; -enable_warnings; - -set tokudb_disable_slow_update=1; +set tokudb_enable_fast_update=1; +source ../include/setup_fast_update_upsert.inc; -create table tt (id int primary key, x int); +create table tt (id int primary key, x int) engine = tokudb; replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; error ER_UNSUPPORTED_EXTENSION; -update noar tt set x=1 where id='abc'; +update tt set x=1 where id='abc'; replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; error ER_UNSUPPORTED_EXTENSION; -update noar tt set x='abc' where id=1; +update tt set x='abc' where id=1; drop table tt; diff --git a/mysql-test/suite/tokudb/t/fast_update_int.py b/mysql-test/suite/tokudb/t/fast_update_int.py deleted file mode 100644 index f6414f0ec5b3..000000000000 --- a/mysql-test/suite/tokudb/t/fast_update_int.py +++ /dev/null @@ -1,77 +0,0 @@ -#!/usr/bin/env python - -import sys - -def main(): - print "# generated by tokudb_fast_update_int.py" - print "source include/have_tokudb.inc;" - print "source include/have_innodb.inc;" - print "set default_storage_engine='tokudb';" - print "disable_warnings;" - print "drop table if exists t;" - print "enable_warnings;" - - for t in [ 'tinyint', 'smallint', 'mediumint', 'int', 'bigint' ]: - for u in [ '', 'unsigned' ]: - for n in [ 'null', 'not null' ]: - test_int(t, u, n) - return 0 - -def test_int(t, u, n): - print "create table t (" - print " id %s %s %s primary key," % (t, u, n) - print " x %s %s %s" % (t, u, n) - print ");" - - print "insert into t values (1,0),(2,0),(3,0);" - print "select * from t;" - - print "set tokudb_disable_slow_update=1;" - - # set is fast - print "update noar t set x=100 where id=2;" - print "select * from t;" - - # increment is fast - print "update noar t set x=x+1 where id=3;" - print "select * from t;" - - # decrement is fast - print "update noar t set x=x-1 where id=3;" - print "select * from t;" - - # field=field+constant is fast - print "update noar t set x=x+100 where id=3;" - print "select * from t;" - - # field=field-constant is fast - print "update noar t set x=x-100 where id=3;" - print "select * from t;" - - # field=constant+field is not yet fast - print "replace_regex /MariaDB/XYZ/ /MySQL/XYZ/;" - print "error ER_UNSUPPORTED_EXTENSION;" - print "update noar t set x=1+x where id=1;" - - # field=-field is not yet fast - print "replace_regex /MariaDB/XYZ/ /MySQL/XYZ/;" - print "error ER_UNSUPPORTED_EXTENSION;" - print "update noar t set x=-x where id=1;" - - # yes, we can update a field in a non-existent row and the row is not inserted - print "update noar t set x=x+1 where id=100;" - print "select * from t;" - - # range updates are not yet fast - print "replace_regex /MariaDB/XYZ/ /MySQL/XYZ/;" - print "error ER_UNSUPPORTED_EXTENSION;" - print "update noar t set x=x+1 where 1 <= id and id < 100;" - - # full table updates are not yet fast - print "replace_regex /MariaDB/XYZ/ /MySQL/XYZ/;" - print "error ER_UNSUPPORTED_EXTENSION;" - print "update noar t set x=x+1;" - - print "drop table t;" - -sys.exit(main()) diff --git a/mysql-test/suite/tokudb/t/fast_update_int.test b/mysql-test/suite/tokudb/t/fast_update_int.test index e663cbfb8fd0..699fc9dacba0 100644 --- a/mysql-test/suite/tokudb/t/fast_update_int.test +++ b/mysql-test/suite/tokudb/t/fast_update_int.test @@ -1,647 +1,35 @@ -# generated by tokudb_fast_update_int.py -source include/have_tokudb.inc; -source include/have_innodb.inc; -set default_storage_engine='tokudb'; -disable_warnings; -drop table if exists t; -enable_warnings; -create table t ( - id tinyint null primary key, - x tinyint null -); -insert into t values (1,0),(2,0),(3,0); -select * from t; -set tokudb_disable_slow_update=1; -update noar t set x=100 where id=2; -select * from t; -update noar t set x=x+1 where id=3; -select * from t; -update noar t set x=x-1 where id=3; -select * from t; -update noar t set x=x+100 where id=3; -select * from t; -update noar t set x=x-100 where id=3; -select * from t; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=1+x where id=1; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=-x where id=1; -update noar t set x=x+1 where id=100; -select * from t; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=x+1 where 1 <= id and id < 100; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=x+1; -drop table t; -create table t ( - id tinyint not null primary key, - x tinyint not null -); -insert into t values (1,0),(2,0),(3,0); -select * from t; -set tokudb_disable_slow_update=1; -update noar t set x=100 where id=2; -select * from t; -update noar t set x=x+1 where id=3; -select * from t; -update noar t set x=x-1 where id=3; -select * from t; -update noar t set x=x+100 where id=3; -select * from t; -update noar t set x=x-100 where id=3; -select * from t; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=1+x where id=1; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=-x where id=1; -update noar t set x=x+1 where id=100; -select * from t; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=x+1 where 1 <= id and id < 100; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=x+1; -drop table t; -create table t ( - id tinyint unsigned null primary key, - x tinyint unsigned null -); -insert into t values (1,0),(2,0),(3,0); -select * from t; -set tokudb_disable_slow_update=1; -update noar t set x=100 where id=2; -select * from t; -update noar t set x=x+1 where id=3; -select * from t; -update noar t set x=x-1 where id=3; -select * from t; -update noar t set x=x+100 where id=3; -select * from t; -update noar t set x=x-100 where id=3; -select * from t; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=1+x where id=1; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=-x where id=1; -update noar t set x=x+1 where id=100; -select * from t; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=x+1 where 1 <= id and id < 100; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=x+1; -drop table t; -create table t ( - id tinyint unsigned not null primary key, - x tinyint unsigned not null -); -insert into t values (1,0),(2,0),(3,0); -select * from t; -set tokudb_disable_slow_update=1; -update noar t set x=100 where id=2; -select * from t; -update noar t set x=x+1 where id=3; -select * from t; -update noar t set x=x-1 where id=3; -select * from t; -update noar t set x=x+100 where id=3; -select * from t; -update noar t set x=x-100 where id=3; -select * from t; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=1+x where id=1; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=-x where id=1; -update noar t set x=x+1 where id=100; -select * from t; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=x+1 where 1 <= id and id < 100; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=x+1; -drop table t; -create table t ( - id smallint null primary key, - x smallint null -); -insert into t values (1,0),(2,0),(3,0); -select * from t; -set tokudb_disable_slow_update=1; -update noar t set x=100 where id=2; -select * from t; -update noar t set x=x+1 where id=3; -select * from t; -update noar t set x=x-1 where id=3; -select * from t; -update noar t set x=x+100 where id=3; -select * from t; -update noar t set x=x-100 where id=3; -select * from t; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=1+x where id=1; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=-x where id=1; -update noar t set x=x+1 where id=100; -select * from t; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=x+1 where 1 <= id and id < 100; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=x+1; -drop table t; -create table t ( - id smallint not null primary key, - x smallint not null -); -insert into t values (1,0),(2,0),(3,0); -select * from t; -set tokudb_disable_slow_update=1; -update noar t set x=100 where id=2; -select * from t; -update noar t set x=x+1 where id=3; -select * from t; -update noar t set x=x-1 where id=3; -select * from t; -update noar t set x=x+100 where id=3; -select * from t; -update noar t set x=x-100 where id=3; -select * from t; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=1+x where id=1; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=-x where id=1; -update noar t set x=x+1 where id=100; -select * from t; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=x+1 where 1 <= id and id < 100; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=x+1; -drop table t; -create table t ( - id smallint unsigned null primary key, - x smallint unsigned null -); -insert into t values (1,0),(2,0),(3,0); -select * from t; -set tokudb_disable_slow_update=1; -update noar t set x=100 where id=2; -select * from t; -update noar t set x=x+1 where id=3; -select * from t; -update noar t set x=x-1 where id=3; -select * from t; -update noar t set x=x+100 where id=3; -select * from t; -update noar t set x=x-100 where id=3; -select * from t; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=1+x where id=1; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=-x where id=1; -update noar t set x=x+1 where id=100; -select * from t; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=x+1 where 1 <= id and id < 100; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=x+1; -drop table t; -create table t ( - id smallint unsigned not null primary key, - x smallint unsigned not null -); -insert into t values (1,0),(2,0),(3,0); -select * from t; -set tokudb_disable_slow_update=1; -update noar t set x=100 where id=2; -select * from t; -update noar t set x=x+1 where id=3; -select * from t; -update noar t set x=x-1 where id=3; -select * from t; -update noar t set x=x+100 where id=3; -select * from t; -update noar t set x=x-100 where id=3; -select * from t; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=1+x where id=1; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=-x where id=1; -update noar t set x=x+1 where id=100; -select * from t; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=x+1 where 1 <= id and id < 100; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=x+1; -drop table t; -create table t ( - id mediumint null primary key, - x mediumint null -); -insert into t values (1,0),(2,0),(3,0); -select * from t; -set tokudb_disable_slow_update=1; -update noar t set x=100 where id=2; -select * from t; -update noar t set x=x+1 where id=3; -select * from t; -update noar t set x=x-1 where id=3; -select * from t; -update noar t set x=x+100 where id=3; -select * from t; -update noar t set x=x-100 where id=3; -select * from t; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=1+x where id=1; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=-x where id=1; -update noar t set x=x+1 where id=100; -select * from t; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=x+1 where 1 <= id and id < 100; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=x+1; -drop table t; -create table t ( - id mediumint not null primary key, - x mediumint not null -); -insert into t values (1,0),(2,0),(3,0); -select * from t; -set tokudb_disable_slow_update=1; -update noar t set x=100 where id=2; -select * from t; -update noar t set x=x+1 where id=3; -select * from t; -update noar t set x=x-1 where id=3; -select * from t; -update noar t set x=x+100 where id=3; -select * from t; -update noar t set x=x-100 where id=3; -select * from t; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=1+x where id=1; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=-x where id=1; -update noar t set x=x+1 where id=100; -select * from t; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=x+1 where 1 <= id and id < 100; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=x+1; -drop table t; -create table t ( - id mediumint unsigned null primary key, - x mediumint unsigned null -); -insert into t values (1,0),(2,0),(3,0); -select * from t; -set tokudb_disable_slow_update=1; -update noar t set x=100 where id=2; -select * from t; -update noar t set x=x+1 where id=3; -select * from t; -update noar t set x=x-1 where id=3; -select * from t; -update noar t set x=x+100 where id=3; -select * from t; -update noar t set x=x-100 where id=3; -select * from t; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=1+x where id=1; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=-x where id=1; -update noar t set x=x+1 where id=100; -select * from t; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=x+1 where 1 <= id and id < 100; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=x+1; -drop table t; -create table t ( - id mediumint unsigned not null primary key, - x mediumint unsigned not null -); -insert into t values (1,0),(2,0),(3,0); -select * from t; -set tokudb_disable_slow_update=1; -update noar t set x=100 where id=2; -select * from t; -update noar t set x=x+1 where id=3; -select * from t; -update noar t set x=x-1 where id=3; -select * from t; -update noar t set x=x+100 where id=3; -select * from t; -update noar t set x=x-100 where id=3; -select * from t; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=1+x where id=1; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=-x where id=1; -update noar t set x=x+1 where id=100; -select * from t; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=x+1 where 1 <= id and id < 100; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=x+1; -drop table t; -create table t ( - id int null primary key, - x int null -); -insert into t values (1,0),(2,0),(3,0); -select * from t; -set tokudb_disable_slow_update=1; -update noar t set x=100 where id=2; -select * from t; -update noar t set x=x+1 where id=3; -select * from t; -update noar t set x=x-1 where id=3; -select * from t; -update noar t set x=x+100 where id=3; -select * from t; -update noar t set x=x-100 where id=3; -select * from t; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=1+x where id=1; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=-x where id=1; -update noar t set x=x+1 where id=100; -select * from t; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=x+1 where 1 <= id and id < 100; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=x+1; -drop table t; -create table t ( - id int not null primary key, - x int not null -); -insert into t values (1,0),(2,0),(3,0); -select * from t; -set tokudb_disable_slow_update=1; -update noar t set x=100 where id=2; -select * from t; -update noar t set x=x+1 where id=3; -select * from t; -update noar t set x=x-1 where id=3; -select * from t; -update noar t set x=x+100 where id=3; -select * from t; -update noar t set x=x-100 where id=3; -select * from t; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=1+x where id=1; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=-x where id=1; -update noar t set x=x+1 where id=100; -select * from t; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=x+1 where 1 <= id and id < 100; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=x+1; -drop table t; -create table t ( - id int unsigned null primary key, - x int unsigned null -); -insert into t values (1,0),(2,0),(3,0); -select * from t; -set tokudb_disable_slow_update=1; -update noar t set x=100 where id=2; -select * from t; -update noar t set x=x+1 where id=3; -select * from t; -update noar t set x=x-1 where id=3; -select * from t; -update noar t set x=x+100 where id=3; -select * from t; -update noar t set x=x-100 where id=3; -select * from t; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=1+x where id=1; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=-x where id=1; -update noar t set x=x+1 where id=100; -select * from t; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=x+1 where 1 <= id and id < 100; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=x+1; -drop table t; -create table t ( - id int unsigned not null primary key, - x int unsigned not null -); -insert into t values (1,0),(2,0),(3,0); -select * from t; -set tokudb_disable_slow_update=1; -update noar t set x=100 where id=2; -select * from t; -update noar t set x=x+1 where id=3; -select * from t; -update noar t set x=x-1 where id=3; -select * from t; -update noar t set x=x+100 where id=3; -select * from t; -update noar t set x=x-100 where id=3; -select * from t; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=1+x where id=1; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=-x where id=1; -update noar t set x=x+1 where id=100; -select * from t; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=x+1 where 1 <= id and id < 100; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=x+1; -drop table t; -create table t ( - id bigint null primary key, - x bigint null -); -insert into t values (1,0),(2,0),(3,0); -select * from t; -set tokudb_disable_slow_update=1; -update noar t set x=100 where id=2; -select * from t; -update noar t set x=x+1 where id=3; -select * from t; -update noar t set x=x-1 where id=3; -select * from t; -update noar t set x=x+100 where id=3; -select * from t; -update noar t set x=x-100 where id=3; -select * from t; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=1+x where id=1; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=-x where id=1; -update noar t set x=x+1 where id=100; -select * from t; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=x+1 where 1 <= id and id < 100; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=x+1; -drop table t; -create table t ( - id bigint not null primary key, - x bigint not null -); -insert into t values (1,0),(2,0),(3,0); -select * from t; -set tokudb_disable_slow_update=1; -update noar t set x=100 where id=2; -select * from t; -update noar t set x=x+1 where id=3; -select * from t; -update noar t set x=x-1 where id=3; -select * from t; -update noar t set x=x+100 where id=3; -select * from t; -update noar t set x=x-100 where id=3; -select * from t; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=1+x where id=1; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=-x where id=1; -update noar t set x=x+1 where id=100; -select * from t; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=x+1 where 1 <= id and id < 100; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=x+1; -drop table t; -create table t ( - id bigint unsigned null primary key, - x bigint unsigned null -); -insert into t values (1,0),(2,0),(3,0); -select * from t; -set tokudb_disable_slow_update=1; -update noar t set x=100 where id=2; -select * from t; -update noar t set x=x+1 where id=3; -select * from t; -update noar t set x=x-1 where id=3; -select * from t; -update noar t set x=x+100 where id=3; -select * from t; -update noar t set x=x-100 where id=3; -select * from t; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=1+x where id=1; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=-x where id=1; -update noar t set x=x+1 where id=100; -select * from t; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=x+1 where 1 <= id and id < 100; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=x+1; -drop table t; -create table t ( - id bigint unsigned not null primary key, - x bigint unsigned not null -); -insert into t values (1,0),(2,0),(3,0); -select * from t; -set tokudb_disable_slow_update=1; -update noar t set x=100 where id=2; -select * from t; -update noar t set x=x+1 where id=3; -select * from t; -update noar t set x=x-1 where id=3; -select * from t; -update noar t set x=x+100 where id=3; -select * from t; -update noar t set x=x-100 where id=3; -select * from t; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=1+x where id=1; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=-x where id=1; -update noar t set x=x+1 where id=100; -select * from t; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=x+1 where 1 <= id and id < 100; -replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; -error ER_UNSUPPORTED_EXTENSION; -update noar t set x=x+1; -drop table t; +--source ../include/fast_update_gen_header.inc + +--let GENERATED=$MYSQL_TMP_DIR/generated_fast_update_int.inc + +--perl + + my $mysql_current_test_dir = $ENV{MYSQL_CURRENT_TEST_DIR}; + open(FILE, '>', "$ENV{GENERATED}") or die; + foreach my $t ('tinyint', 'smallint', 'mediumint', 'int', 'bigint') { + foreach my $u ('', 'unsigned') { + foreach my $n ('null', 'not null') { + print FILE "--echo ### Test int for: $t, $u, $n\n"; + test_int($t, $u, $n); + } + } + } + close FILE; + + sub test_int { + my $t = shift; + my $u = shift; + my $n = shift; + + print FILE "create table t (\n"; + print FILE " id $t $u primary key,\n"; + print FILE " x $t $u $n\n"; + print FILE ") engine = tokudb;\n"; + + print FILE "--source $ENV{MYSQL_CURRENT_TEST_DIR}/../include/". + "fast_update_int.inc\n\n"; + } + +EOF + +--source ../include/fast_update_gen_footer.inc diff --git a/mysql-test/suite/tokudb/t/fast_update_int_bounds.test b/mysql-test/suite/tokudb/t/fast_update_int_bounds.test index cf3542432360..cefeb1ff1f58 100644 --- a/mysql-test/suite/tokudb/t/fast_update_int_bounds.test +++ b/mysql-test/suite/tokudb/t/fast_update_int_bounds.test @@ -1,82 +1,77 @@ source include/have_tokudb.inc; source include/have_innodb.inc; -set default_storage_engine='tokudb'; - -disable_warnings; -drop table if exists t; -enable_warnings; - -create table tt (id int primary key, x int); +create table tt (id int primary key, x int) engine = tokudb; insert into tt values (1,0),(2,-pow(2,31)),(3,pow(2,31)-1); create table ti like tt; alter table ti engine=innodb; insert into ti select * from tt; -set tokudb_disable_slow_update=1; +set tokudb_enable_fast_update=1; +source ../include/setup_fast_update_upsert.inc; -update noar tt set x=x+1 where id=1; -update noar ti set x=x+1 where id=1; +update tt set x=x+1 where id=1; +update ti set x=x+1 where id=1; let $diff_tables = test.tt, test.ti; source include/diff_tables.inc; -update noar tt set x=x-2 where id=1; -update noar ti set x=x-2 where id=1; +update tt set x=x-2 where id=1; +update ti set x=x-2 where id=1; let $diff_tables = test.tt, test.ti; source include/diff_tables.inc; -update noar tt set x=x+1 where id=1; -update noar ti set x=x+1 where id=1; +update tt set x=x+1 where id=1; +update ti set x=x+1 where id=1; let $diff_tables = test.tt, test.ti; source include/diff_tables.inc; -update noar tt set x=x-1 where id=2; -update noar ti set x=x-1 where id=2; +update tt set x=x-1 where id=2; +update ti set x=x-1 where id=2; let $diff_tables = test.tt, test.ti; source include/diff_tables.inc; -update noar tt set x=x+1 where id=2; -update noar ti set x=x+1 where id=2; +update tt set x=x+1 where id=2; +update ti set x=x+1 where id=2; let $diff_tables = test.tt, test.ti; source include/diff_tables.inc; -update noar tt set x=x+1 where id=3; -update noar ti set x=x+1 where id=3; +update tt set x=x+1 where id=3; +update ti set x=x+1 where id=3; let $diff_tables = test.tt, test.ti; source include/diff_tables.inc; -update noar tt set x=x-1 where id=3; -update noar ti set x=x-1 where id=3; +update tt set x=x-1 where id=3; +update ti set x=x-1 where id=3; let $diff_tables = test.tt, test.ti; source include/diff_tables.inc; # test clip at maximum insert into tt values (4,pow(2,31)-10); insert into ti values (4,pow(2,31)-10); -update noar tt set x=x+20 where id=4; -update noar ti set x=x+20 where id=4; +update tt set x=x+20 where id=4; +update ti set x=x+20 where id=4; let $diff_tables = test.tt, test.ti; source include/diff_tables.inc; insert into tt values (5,pow(2,31)-10); insert into ti values (5,pow(2,31)-10); -update noar tt set x=x - -20 where id=5; -update noar ti set x=x - -20 where id=5; +update tt set x=x - -20 where id=5; +update ti set x=x - -20 where id=5; let $diff_tables = test.tt, test.ti; source include/diff_tables.inc; # test clip at minimum insert into tt values (6,-pow(2,31)+10); insert into ti values (6,-pow(2,31)+10); -update noar tt set x=x-20 where id=6; -update noar ti set x=x-20 where id=6; +update tt set x=x-20 where id=6; +update ti set x=x-20 where id=6; let $diff_tables = test.tt, test.ti; source include/diff_tables.inc; insert into tt values (7,-pow(2,31)+10); insert into ti values (7,-pow(2,31)+10); -update noar tt set x=x + -20 where id=7; -update noar ti set x=x + -20 where id=7; +update tt set x=x + -20 where id=7; +update ti set x=x + -20 where id=7; let $diff_tables = test.tt, test.ti; source include/diff_tables.inc; diff --git a/mysql-test/suite/tokudb/t/fast_update_key.test b/mysql-test/suite/tokudb/t/fast_update_key.test index 21f3cbf999a7..6ff74d191af2 100644 --- a/mysql-test/suite/tokudb/t/fast_update_key.test +++ b/mysql-test/suite/tokudb/t/fast_update_key.test @@ -1,71 +1,78 @@ source include/have_tokudb.inc; -set default_storage_engine='tokudb'; - -disable_warnings; -drop table if exists t; -enable_warnings; - -set tokudb_disable_slow_update=1; +set tokudb_enable_fast_update=1; +source ../include/setup_fast_update_upsert.inc; # must have primary key -create table t (ida int not null, idb bigint not null, idc tinyint unsigned not null, x bigint); +create table t (ida int not null, + idb bigint not null, + idc tinyint unsigned not null, + x bigint) engine = tokudb; replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; error ER_UNSUPPORTED_EXTENSION; -update noar t set x=x+1 where ida=1; +update t set x=x+1 where ida=1; drop table t; # must have no clustering keys -create table t (ida int not null, idb bigint not null, idc tinyint unsigned not null, x bigint, clustering key(ida,idb,idc)); +create table t (ida int not null, + idb bigint not null, + idc tinyint unsigned not null, + x bigint, + clustering key(ida,idb,idc)) engine = tokudb; replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; error ER_UNSUPPORTED_EXTENSION; -update noar t set x=x+1 where ida=1; +update t set x=x+1 where ida=1; drop table t; -# update noar field must not be part of any key -create table t (ida int not null, idb bigint not null, idc tinyint unsigned not null, x bigint, primary key(ida,idb,idc), key(x)); +# update field must not be part of any key +create table t (ida int not null, + idb bigint not null, + idc tinyint unsigned not null, + x bigint, + primary key(ida,idb,idc), + key(x)) engine = tokudb; replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; error ER_UNSUPPORTED_EXTENSION; -update noar t set x=x+1 where ida=1; +update t set x=x+1 where ida=1; drop table t; # must have no pk prefixed -create table t (id char(32), x bigint, primary key(id(1))); +create table t (id char(32), x bigint, primary key(id(1))) engine = tokudb; replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; error ER_UNSUPPORTED_EXTENSION; -update noar t set x=x+1 where id='hi'; +update t set x=x+1 where id='hi'; drop table t; -create table t (id varchar(32), x bigint, primary key(id(1))); +create table t (id varchar(32), x bigint, primary key(id(1))) engine = tokudb; replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; error ER_UNSUPPORTED_EXTENSION; -update noar t set x=x+1 where id='hi'; +update t set x=x+1 where id='hi'; drop table t; # test for point updates on compound keys -create table t (ida int not null, idb bigint not null, idc tinyint unsigned not null, x bigint, primary key(ida,idb,idc)); +create table t (ida int not null, + idb bigint not null, + idc tinyint unsigned not null, + x bigint, + primary key(ida,idb,idc)) engine = tokudb; insert into t values (1,2,3,0); replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; error ER_UNSUPPORTED_EXTENSION; -update noar t set x=x+1 where ida=1; +update t set x=x+1 where ida=1; replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; error ER_UNSUPPORTED_EXTENSION; -update noar t set x=x+1 where ida=1 and idb=2; +update t set x=x+1 where ida=1 and idb=2; replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; error ER_UNSUPPORTED_EXTENSION; -update noar t set x=x+1 where ida=1 and idb=2 or idc=3; +update t set x=x+1 where ida=1 and idb=2 or idc=3; -update noar t set x=x+1 where ida=1 and idb=2 and idc=3; +update t set x=x+1 where ida=1 and idb=2 and idc=3; select * from t; -update noar t set x=x+1 where idc=3 and ida=1 and idb=2; +update t set x=x+1 where idc=3 and ida=1 and idb=2; select * from t; drop table t; - - - - diff --git a/mysql-test/suite/tokudb/t/fast_update_sqlmode.test b/mysql-test/suite/tokudb/t/fast_update_sqlmode.test index 9eb7721b5386..2740cd6c3160 100644 --- a/mysql-test/suite/tokudb/t/fast_update_sqlmode.test +++ b/mysql-test/suite/tokudb/t/fast_update_sqlmode.test @@ -1,36 +1,29 @@ source include/have_tokudb.inc; -set default_storage_engine='tokudb'; - -disable_warnings; -drop table if exists t; -enable_warnings; - -set tokudb_disable_slow_update=1; +set tokudb_enable_fast_update=1; +source ../include/setup_fast_update_upsert.inc; let $default_sql_mode = `select @@session.sql_mode`; -create table t (id int primary key, x int not null); +create table t (id int primary key, x int not null) engine = tokudb; insert into t values (1,0); -update noar t set x=42 where id=1; -update noar t set x=x+1 where id=1; -update noar t set x=x-1 where id=1; +update t set x=42 where id=1; +update t set x=x+1 where id=1; +update t set x=x-1 where id=1; eval set session sql_mode="$default_sql_mode,traditional"; replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; error ER_UNSUPPORTED_EXTENSION; -update noar t set x=42 where id=1; +update t set x=42 where id=1; replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; error ER_UNSUPPORTED_EXTENSION; -update noar t set x=x+1 where id=1; +update t set x=x+1 where id=1; replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; error ER_UNSUPPORTED_EXTENSION; -update noar t set x=x-1 where id=1; - -eval set session sql_mode="$default_sql_mode"; +update t set x=x-1 where id=1; drop table t; diff --git a/mysql-test/suite/tokudb/t/fast_update_uint_bounds.test b/mysql-test/suite/tokudb/t/fast_update_uint_bounds.test index f4f43d60e31a..a35658cba18b 100644 --- a/mysql-test/suite/tokudb/t/fast_update_uint_bounds.test +++ b/mysql-test/suite/tokudb/t/fast_update_uint_bounds.test @@ -1,62 +1,54 @@ source include/have_tokudb.inc; source include/have_innodb.inc; -set default_storage_engine='tokudb'; - -disable_warnings; -drop table if exists t; -enable_warnings; - -create table tt (id int primary key, x int unsigned); +create table tt (id int primary key, x int unsigned) engine = tokudb; insert into tt values (1,0),(2,pow(2,32)-1); create table ti like tt; alter table ti engine=innodb; insert into ti select * from tt; -set tokudb_disable_slow_update=1; +set tokudb_enable_fast_update=1; +source ../include/setup_fast_update_upsert.inc; -update noar tt set x=x+1 where id=1; -update noar ti set x=x+1 where id=1; +update tt set x=x+1 where id=1; +update ti set x=x+1 where id=1; let $diff_tables = test.tt, test.ti; source include/diff_tables.inc; -update noar tt set x=x-2 where id=1; -update noar ti set x=if(x<2,0,x-2) where id=1; +update tt set x=x-2 where id=1; +update ti set x=if(x<2,0,x-2) where id=1; let $diff_tables = test.tt, test.ti; source include/diff_tables.inc; -update noar tt set x=x+1 where id=1; -update noar ti set x=x+1 where id=1; +update tt set x=x+1 where id=1; +update ti set x=x+1 where id=1; let $diff_tables = test.tt, test.ti; source include/diff_tables.inc; -update noar tt set x=x-1 where id=2; -update noar ti set x=x-1 where id=2; +update tt set x=x-1 where id=2; +update ti set x=x-1 where id=2; let $diff_tables = test.tt, test.ti; source include/diff_tables.inc; -update noar tt set x=x+1 where id=2; -update noar ti set x=x+1 where id=2; +update tt set x=x+1 where id=2; +update ti set x=x+1 where id=2; let $diff_tables = test.tt, test.ti; source include/diff_tables.inc; # test clip at maximum insert into tt values (4,pow(2,32)-10); insert into ti values (4,pow(2,32)-10); -update noar tt set x=x+20 where id=4; -update noar ti set x=x+20 where id=4; +update tt set x=x+20 where id=4; +update ti set x=x+20 where id=4; let $diff_tables = test.tt, test.ti; source include/diff_tables.inc; # test clip at minimum insert into tt values (5,10); insert into ti values (5,10); -update noar tt set x=x-20 where id=5; -update noar ti set x=if(x<20,0,x-20) where id=5; +update tt set x=x-20 where id=5; +update ti set x=if(x<20,0,x-20) where id=5; let $diff_tables = test.tt, test.ti; source include/diff_tables.inc; drop table tt, ti; - - - diff --git a/mysql-test/suite/tokudb/t/fast_update_varchar.py b/mysql-test/suite/tokudb/t/fast_update_varchar.py deleted file mode 100644 index 54cc0050ee32..000000000000 --- a/mysql-test/suite/tokudb/t/fast_update_varchar.py +++ /dev/null @@ -1,63 +0,0 @@ -#!/usr/bin/env python - -import sys -import random -import string - -def main(): - print "# generated by tokudb_fast_update_varchar.py" - print "source include/have_tokudb.inc;" - print "source include/have_innodb.inc;" - print "set default_storage_engine='tokudb';" - print "disable_warnings;" - print "drop table if exists t;" - print "enable_warnings;" - - nrows = 100 - - for t in [ 'varchar', 'varbinary' ]: - for l in [ 32, 256 ]: - for n in [ 'null', 'not null' ]: - test_varchar(t, l, n, nrows) - return 0 - -def test_varchar(t, l, n, nrows): - print "create table tt (id bigint unsigned primary key," - print " f0 int %s," % (n) - for i in range(4): - print " v%d %s(%d) %s," % (i, t, l, n) - print " b0 text %s" % (n) - print ") engine=tokudb;" - - if n == 'null': - print "insert into tt (id) values (0);" - print "insert into tt values (1,2,'a','b','c','d','e');" - for i in range(2,nrows): - print "insert into tt values (%d,%d,'','','','','');" % (i,i+1) - - print "create table ti like tt;" - print "alter table ti engine=innodb;" - print "insert into ti select * from tt;" - - nulltest = [ 'null this', 'null is', 'null a', 'null test' ] - for i in range(4): - print "update noar tt set v%d='%s %s' where id=0;" % (i, nulltest[i], str(i)) - print "update noar ti set v%d='%s %s' where id=0;" % (i, nulltest[i], str(i)) - - test = [ 'this' ,'is', 'another', 'test'] - for i in range(4): - print "update noar tt set v%d='%s %s' where id=1;" % (i, test[i], str(i)) - print "update noar ti set v%d='%s %s' where id=1;" % (i, test[i], str(i)) - - for id in range(2,nrows): - for i in range(4): - long_str = ''.join(random.choice(string.ascii_uppercase + string.digits) for x in range(l+1)) - print "update noar tt set v%d='%s' where id=%d;" % (i, long_str, id) - print "update noar ti set v%d='%s' where id=%d;" % (i, long_str, id) - - print "let $diff_tables = test.tt, test.ti;" - print "source include/diff_tables.inc;" - - print "drop table tt, ti;" - -sys.exit(main()) diff --git a/mysql-test/suite/tokudb/t/fast_update_varchar.test b/mysql-test/suite/tokudb/t/fast_update_varchar.test index b407f416a3be..66e5c977d1fc 100644 --- a/mysql-test/suite/tokudb/t/fast_update_varchar.test +++ b/mysql-test/suite/tokudb/t/fast_update_varchar.test @@ -1,7315 +1,75 @@ -# generated by tokudb_fast_update_varchar.py -source include/have_tokudb.inc; -source include/have_innodb.inc; -set default_storage_engine='tokudb'; -disable_warnings; -drop table if exists t; -enable_warnings; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(32) null, - v1 varchar(32) null, - v2 varchar(32) null, - v3 varchar(32) null, - b0 text null -) engine=tokudb; -insert into tt (id) values (0); -insert into tt values (1,2,'a','b','c','d','e'); -insert into tt values (2,3,'','','','',''); -insert into tt values (3,4,'','','','',''); -insert into tt values (4,5,'','','','',''); -insert into tt values (5,6,'','','','',''); -insert into tt values (6,7,'','','','',''); -insert into tt values (7,8,'','','','',''); -insert into tt values (8,9,'','','','',''); -insert into tt values (9,10,'','','','',''); -insert into tt values (10,11,'','','','',''); -insert into tt values (11,12,'','','','',''); -insert into tt values (12,13,'','','','',''); -insert into tt values (13,14,'','','','',''); -insert into tt values (14,15,'','','','',''); -insert into tt values (15,16,'','','','',''); -insert into tt values (16,17,'','','','',''); -insert into tt values (17,18,'','','','',''); -insert into tt values (18,19,'','','','',''); -insert into tt values (19,20,'','','','',''); -insert into tt values (20,21,'','','','',''); -insert into tt values (21,22,'','','','',''); -insert into tt values (22,23,'','','','',''); -insert into tt values (23,24,'','','','',''); -insert into tt values (24,25,'','','','',''); -insert into tt values (25,26,'','','','',''); -insert into tt values (26,27,'','','','',''); -insert into tt values (27,28,'','','','',''); -insert into tt values (28,29,'','','','',''); -insert into tt values (29,30,'','','','',''); -insert into tt values (30,31,'','','','',''); -insert into tt values (31,32,'','','','',''); -insert into tt values (32,33,'','','','',''); -insert into tt values (33,34,'','','','',''); -insert into tt values (34,35,'','','','',''); -insert into tt values (35,36,'','','','',''); -insert into tt values (36,37,'','','','',''); -insert into tt values (37,38,'','','','',''); -insert into tt values (38,39,'','','','',''); -insert into tt values (39,40,'','','','',''); -insert into tt values (40,41,'','','','',''); -insert into tt values (41,42,'','','','',''); -insert into tt values (42,43,'','','','',''); -insert into tt values (43,44,'','','','',''); -insert into tt values (44,45,'','','','',''); -insert into tt values (45,46,'','','','',''); -insert into tt values (46,47,'','','','',''); -insert into tt values (47,48,'','','','',''); -insert into tt values (48,49,'','','','',''); -insert into tt values (49,50,'','','','',''); -insert into tt values (50,51,'','','','',''); -insert into tt values (51,52,'','','','',''); -insert into tt values (52,53,'','','','',''); -insert into tt values (53,54,'','','','',''); -insert into tt values (54,55,'','','','',''); -insert into tt values (55,56,'','','','',''); -insert into tt values (56,57,'','','','',''); -insert into tt values (57,58,'','','','',''); -insert into tt values (58,59,'','','','',''); -insert into tt values (59,60,'','','','',''); -insert into tt values (60,61,'','','','',''); -insert into tt values (61,62,'','','','',''); -insert into tt values (62,63,'','','','',''); -insert into tt values (63,64,'','','','',''); -insert into tt values (64,65,'','','','',''); -insert into tt values (65,66,'','','','',''); -insert into tt values (66,67,'','','','',''); -insert into tt values (67,68,'','','','',''); -insert into tt values (68,69,'','','','',''); -insert into tt values (69,70,'','','','',''); -insert into tt values (70,71,'','','','',''); -insert into tt values (71,72,'','','','',''); -insert into tt values (72,73,'','','','',''); -insert into tt values (73,74,'','','','',''); -insert into tt values (74,75,'','','','',''); -insert into tt values (75,76,'','','','',''); -insert into tt values (76,77,'','','','',''); -insert into tt values (77,78,'','','','',''); -insert into tt values (78,79,'','','','',''); -insert into tt values (79,80,'','','','',''); -insert into tt values (80,81,'','','','',''); -insert into tt values (81,82,'','','','',''); -insert into tt values (82,83,'','','','',''); -insert into tt values (83,84,'','','','',''); -insert into tt values (84,85,'','','','',''); -insert into tt values (85,86,'','','','',''); -insert into tt values (86,87,'','','','',''); -insert into tt values (87,88,'','','','',''); -insert into tt values (88,89,'','','','',''); -insert into tt values (89,90,'','','','',''); -insert into tt values (90,91,'','','','',''); -insert into tt values (91,92,'','','','',''); -insert into tt values (92,93,'','','','',''); -insert into tt values (93,94,'','','','',''); -insert into tt values (94,95,'','','','',''); -insert into tt values (95,96,'','','','',''); -insert into tt values (96,97,'','','','',''); -insert into tt values (97,98,'','','','',''); -insert into tt values (98,99,'','','','',''); -insert into tt values (99,100,'','','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='null this 0' where id=0; -update noar ti set v0='null this 0' where id=0; -update noar tt set v1='null is 1' where id=0; -update noar ti set v1='null is 1' where id=0; -update noar tt set v2='null a 2' where id=0; -update noar ti set v2='null a 2' where id=0; -update noar tt set v3='null test 3' where id=0; -update noar ti set v3='null test 3' where id=0; -update noar tt set v0='this 0' where id=1; -update noar ti set v0='this 0' where id=1; -update noar tt set v1='is 1' where id=1; -update noar ti set v1='is 1' where id=1; -update noar tt set v2='another 2' where id=1; -update noar ti set v2='another 2' where id=1; -update noar tt set v3='test 3' where id=1; -update noar ti set v3='test 3' where id=1; -update noar tt set v0='C6P5MJKRJ430AM9T012TSRGW76CFGSHQL' where id=2; -update noar ti set v0='C6P5MJKRJ430AM9T012TSRGW76CFGSHQL' where id=2; -update noar tt set v1='FQ3TW0TRJWER0OSIO33UTIFSBT7PTGO9A' where id=2; -update noar ti set v1='FQ3TW0TRJWER0OSIO33UTIFSBT7PTGO9A' where id=2; -update noar tt set v2='XAXU3S3K4PYXB4IB4HH5ANUUOGC1KD3JX' where id=2; -update noar ti set v2='XAXU3S3K4PYXB4IB4HH5ANUUOGC1KD3JX' where id=2; -update noar tt set v3='879I2MV65FUY0WFCFS09C74IN1VAISIEG' where id=2; -update noar ti set v3='879I2MV65FUY0WFCFS09C74IN1VAISIEG' where id=2; -update noar tt set v0='QAPUD5QIQINRVEPEYVDYJ6N9UI0GFZHRV' where id=3; -update noar ti set v0='QAPUD5QIQINRVEPEYVDYJ6N9UI0GFZHRV' where id=3; -update noar tt set v1='M6ME86RQIYBCUDNTD125MIV92IT6CKU15' where id=3; -update noar ti set v1='M6ME86RQIYBCUDNTD125MIV92IT6CKU15' where id=3; -update noar tt set v2='KSZGNMKS7PTH611GW21K59DD2R7KY4JAO' where id=3; -update noar ti set v2='KSZGNMKS7PTH611GW21K59DD2R7KY4JAO' where id=3; -update noar tt set v3='OSZTEY9AS1ZSXGBMVQ13ST2RB5UX4G7O2' where id=3; -update noar ti set v3='OSZTEY9AS1ZSXGBMVQ13ST2RB5UX4G7O2' where id=3; -update noar tt set v0='C67XB2ZDJCMF7MATMIZ7UKCOCXM6LX4IB' where id=4; -update noar ti set v0='C67XB2ZDJCMF7MATMIZ7UKCOCXM6LX4IB' where id=4; -update noar tt set v1='S0LRECBVNG2PF4USXXGK5HQBXNMGR0PV6' where id=4; -update noar ti set v1='S0LRECBVNG2PF4USXXGK5HQBXNMGR0PV6' where id=4; -update noar tt set v2='MYYF7M19VXCDAZYIZ0WLCDHPAA5D33BS1' where id=4; -update noar ti set v2='MYYF7M19VXCDAZYIZ0WLCDHPAA5D33BS1' where id=4; -update noar tt set v3='4KJDY3HCYE207SAY3ULNRAWO9E0ST1DBJ' where id=4; -update noar ti set v3='4KJDY3HCYE207SAY3ULNRAWO9E0ST1DBJ' where id=4; -update noar tt set v0='ZEHYFMX8YWZ0OQRFIWDF06KZSZRTWITWJ' where id=5; -update noar ti set v0='ZEHYFMX8YWZ0OQRFIWDF06KZSZRTWITWJ' where id=5; -update noar tt set v1='VB77NEBRKD15EYCTJMD5VFKUV82J77U0V' where id=5; -update noar ti set v1='VB77NEBRKD15EYCTJMD5VFKUV82J77U0V' where id=5; -update noar tt set v2='SPES6400D3NGGXUOR58GB4L6HVDUSXC8P' where id=5; -update noar ti set v2='SPES6400D3NGGXUOR58GB4L6HVDUSXC8P' where id=5; -update noar tt set v3='O8DK85ADX9I2AXO33NRKUXM4H70IQDVKR' where id=5; -update noar ti set v3='O8DK85ADX9I2AXO33NRKUXM4H70IQDVKR' where id=5; -update noar tt set v0='XG699LK06ZH0GP0MY8P2XM1W8IC31RY6M' where id=6; -update noar ti set v0='XG699LK06ZH0GP0MY8P2XM1W8IC31RY6M' where id=6; -update noar tt set v1='RR0ZPFCBNNDDO66XALOIV0M2WC2RFPWBS' where id=6; -update noar ti set v1='RR0ZPFCBNNDDO66XALOIV0M2WC2RFPWBS' where id=6; -update noar tt set v2='Z2MCQCRYBBGIAS7KKIR27SL3UBTF3KQ03' where id=6; -update noar ti set v2='Z2MCQCRYBBGIAS7KKIR27SL3UBTF3KQ03' where id=6; -update noar tt set v3='WYLCHBCNJA7T0IWFKTBZ5UBBOEUE3U9SU' where id=6; -update noar ti set v3='WYLCHBCNJA7T0IWFKTBZ5UBBOEUE3U9SU' where id=6; -update noar tt set v0='FNTPDPCBPGIND8BEXG3IFATRTOR880BQP' where id=7; -update noar ti set v0='FNTPDPCBPGIND8BEXG3IFATRTOR880BQP' where id=7; -update noar tt set v1='Y3FUDUS2RG0YODAEUX24KMI7STMMTVZWI' where id=7; -update noar ti set v1='Y3FUDUS2RG0YODAEUX24KMI7STMMTVZWI' where id=7; -update noar tt set v2='EUFYQFY3UIUWXAI2MZUSAYWINYCMPTRGZ' where id=7; -update noar ti set v2='EUFYQFY3UIUWXAI2MZUSAYWINYCMPTRGZ' where id=7; -update noar tt set v3='0VKBUX3MRYOE43HZ8G5U0MDOLG7SSXNNN' where id=7; -update noar ti set v3='0VKBUX3MRYOE43HZ8G5U0MDOLG7SSXNNN' where id=7; -update noar tt set v0='IE1Z9DPV3DFMCSETQ264T61V783D676YN' where id=8; -update noar ti set v0='IE1Z9DPV3DFMCSETQ264T61V783D676YN' where id=8; -update noar tt set v1='4ZEW2NAEC433N7TBWAI4GQWJ7LK5Q4RZ4' where id=8; -update noar ti set v1='4ZEW2NAEC433N7TBWAI4GQWJ7LK5Q4RZ4' where id=8; -update noar tt set v2='1AKQ41LJFMF1OOQMZO7QPL2ZVZYPU21DO' where id=8; -update noar ti set v2='1AKQ41LJFMF1OOQMZO7QPL2ZVZYPU21DO' where id=8; -update noar tt set v3='H8IXFC4QIDAWFHF8WUFUBPAMPKP59A4GE' where id=8; -update noar ti set v3='H8IXFC4QIDAWFHF8WUFUBPAMPKP59A4GE' where id=8; -update noar tt set v0='X52UNAQHTIRRLCHDP5UXFU6T1W92U00QM' where id=9; -update noar ti set v0='X52UNAQHTIRRLCHDP5UXFU6T1W92U00QM' where id=9; -update noar tt set v1='BMMKIH7Q87O155JXO8U6DNZX14JK7PV4Q' where id=9; -update noar ti set v1='BMMKIH7Q87O155JXO8U6DNZX14JK7PV4Q' where id=9; -update noar tt set v2='KU8TVA6SW62YC74DGYSYSDUKWQDF0AS93' where id=9; -update noar ti set v2='KU8TVA6SW62YC74DGYSYSDUKWQDF0AS93' where id=9; -update noar tt set v3='X2SX9JJP3STQ275JROOJ7PH47L1QCANI1' where id=9; -update noar ti set v3='X2SX9JJP3STQ275JROOJ7PH47L1QCANI1' where id=9; -update noar tt set v0='ETF1T11GAD3PQ1P6MNIYKOCOASRR935DN' where id=10; -update noar ti set v0='ETF1T11GAD3PQ1P6MNIYKOCOASRR935DN' where id=10; -update noar tt set v1='JAY008V1UNCFN77B872P7VBW06IM8ZULL' where id=10; -update noar ti set v1='JAY008V1UNCFN77B872P7VBW06IM8ZULL' where id=10; -update noar tt set v2='QK8M39DNPHE6PMIAUW8XP45NXJQICY8FX' where id=10; -update noar ti set v2='QK8M39DNPHE6PMIAUW8XP45NXJQICY8FX' where id=10; -update noar tt set v3='NJH9VF4CGS75EELNRM6DM8BOASPQOJ1YF' where id=10; -update noar ti set v3='NJH9VF4CGS75EELNRM6DM8BOASPQOJ1YF' where id=10; -update noar tt set v0='YPHFJEX1D9EP9OJKD711P1HDWC218HYDQ' where id=11; -update noar ti set v0='YPHFJEX1D9EP9OJKD711P1HDWC218HYDQ' where id=11; -update noar tt set v1='1C59XHWYXDJ0CH93KBID1H0FLLZW6OV4Q' where id=11; -update noar ti set v1='1C59XHWYXDJ0CH93KBID1H0FLLZW6OV4Q' where id=11; -update noar tt set v2='KCC2KKBFWCZ0TEQYF37CHNIU28PDH4G4B' where id=11; -update noar ti set v2='KCC2KKBFWCZ0TEQYF37CHNIU28PDH4G4B' where id=11; -update noar tt set v3='E9DRCXC8PRS1577KJJ0MUKCSCIQ5ULM8L' where id=11; -update noar ti set v3='E9DRCXC8PRS1577KJJ0MUKCSCIQ5ULM8L' where id=11; -update noar tt set v0='CAY0BJBX055RDS035VBFOAJYR1HV48F6L' where id=12; -update noar ti set v0='CAY0BJBX055RDS035VBFOAJYR1HV48F6L' where id=12; -update noar tt set v1='2E8R0YCLEB4KSSXAZ52SJT5Z7RHZPFUZ2' where id=12; -update noar ti set v1='2E8R0YCLEB4KSSXAZ52SJT5Z7RHZPFUZ2' where id=12; -update noar tt set v2='J7M9UEU8HY09D3P14DAZRYK48QDEEF2XU' where id=12; -update noar ti set v2='J7M9UEU8HY09D3P14DAZRYK48QDEEF2XU' where id=12; -update noar tt set v3='1FLHE73K0AJSAXRHNV18N1PIV8SSXZ4LT' where id=12; -update noar ti set v3='1FLHE73K0AJSAXRHNV18N1PIV8SSXZ4LT' where id=12; -update noar tt set v0='Z5S4BCN44TJCY6TXJN1I9NF8P2SUCD43A' where id=13; -update noar ti set v0='Z5S4BCN44TJCY6TXJN1I9NF8P2SUCD43A' where id=13; -update noar tt set v1='PGIKAGQ4A8JJDWW5W5NGXKEHG85ZXFQIZ' where id=13; -update noar ti set v1='PGIKAGQ4A8JJDWW5W5NGXKEHG85ZXFQIZ' where id=13; -update noar tt set v2='5GYNMV2KG45CU5PZ5DR7IAGOU2FXGGYRY' where id=13; -update noar ti set v2='5GYNMV2KG45CU5PZ5DR7IAGOU2FXGGYRY' where id=13; -update noar tt set v3='8YWN60PRVBV5P3XT39UK4WCZXIKNV3OMU' where id=13; -update noar ti set v3='8YWN60PRVBV5P3XT39UK4WCZXIKNV3OMU' where id=13; -update noar tt set v0='5PN29VPJJZC4X1RSDFY8CBF2LDDDU2CK3' where id=14; -update noar ti set v0='5PN29VPJJZC4X1RSDFY8CBF2LDDDU2CK3' where id=14; -update noar tt set v1='5SXHKMF44USM4OM0KUQSOAUDH74460FAO' where id=14; -update noar ti set v1='5SXHKMF44USM4OM0KUQSOAUDH74460FAO' where id=14; -update noar tt set v2='T37K7U6RHE7I8E16NBU06WAXWPQIIKRIT' where id=14; -update noar ti set v2='T37K7U6RHE7I8E16NBU06WAXWPQIIKRIT' where id=14; -update noar tt set v3='284CTENU9U8YL9B1OTG0Q8SXZZZ7M5I6U' where id=14; -update noar ti set v3='284CTENU9U8YL9B1OTG0Q8SXZZZ7M5I6U' where id=14; -update noar tt set v0='ETZNDEYEUZXLKM8HTLEBSEYP692A2WVEC' where id=15; -update noar ti set v0='ETZNDEYEUZXLKM8HTLEBSEYP692A2WVEC' where id=15; -update noar tt set v1='TOP0E92F9FWDEWEC4YPE80MH7DRSBUKIB' where id=15; -update noar ti set v1='TOP0E92F9FWDEWEC4YPE80MH7DRSBUKIB' where id=15; -update noar tt set v2='OYEI596E9HVPLAGZGBQYSFAWKZG41BCVM' where id=15; -update noar ti set v2='OYEI596E9HVPLAGZGBQYSFAWKZG41BCVM' where id=15; -update noar tt set v3='51HLJN8D2X7DIFFNY4IQBP48WODL1YG3E' where id=15; -update noar ti set v3='51HLJN8D2X7DIFFNY4IQBP48WODL1YG3E' where id=15; -update noar tt set v0='XONA19S58DXOWIKZUOIJNT8CWF3N4RVVM' where id=16; -update noar ti set v0='XONA19S58DXOWIKZUOIJNT8CWF3N4RVVM' where id=16; -update noar tt set v1='943ENEWA3RYCJRDUVOM2F8UKTR391IDL3' where id=16; -update noar ti set v1='943ENEWA3RYCJRDUVOM2F8UKTR391IDL3' where id=16; -update noar tt set v2='CB4MQIO2UXYFSCOSQACFE96L9W4LTH9UC' where id=16; -update noar ti set v2='CB4MQIO2UXYFSCOSQACFE96L9W4LTH9UC' where id=16; -update noar tt set v3='C3M7ZLL5KVPPD8YKEP7UTFN5O9BJAWRQY' where id=16; -update noar ti set v3='C3M7ZLL5KVPPD8YKEP7UTFN5O9BJAWRQY' where id=16; -update noar tt set v0='Q5SH1O4QPLTMXTL5Z6JHLNT0SVFBYOOXU' where id=17; -update noar ti set v0='Q5SH1O4QPLTMXTL5Z6JHLNT0SVFBYOOXU' where id=17; -update noar tt set v1='52FCXSRGM2N12OI10IYNRUGLVV1AUMTE7' where id=17; -update noar ti set v1='52FCXSRGM2N12OI10IYNRUGLVV1AUMTE7' where id=17; -update noar tt set v2='GYHFZZROG27CYF5ERW711U8EQ9FDS6H2T' where id=17; -update noar ti set v2='GYHFZZROG27CYF5ERW711U8EQ9FDS6H2T' where id=17; -update noar tt set v3='B2M72KUXJLTTCJ1RC47E2QNOAMH5BMX7K' where id=17; -update noar ti set v3='B2M72KUXJLTTCJ1RC47E2QNOAMH5BMX7K' where id=17; -update noar tt set v0='NAJYNURN3M8WTQI61PDF4JWAPVT6PLRGH' where id=18; -update noar ti set v0='NAJYNURN3M8WTQI61PDF4JWAPVT6PLRGH' where id=18; -update noar tt set v1='4IJQ7MVQPR795Z9IQXVHR0HMTTRN7KTES' where id=18; -update noar ti set v1='4IJQ7MVQPR795Z9IQXVHR0HMTTRN7KTES' where id=18; -update noar tt set v2='E2ZS9OQGKIRZ4V4TH1Y89HTIN4OMC2XRW' where id=18; -update noar ti set v2='E2ZS9OQGKIRZ4V4TH1Y89HTIN4OMC2XRW' where id=18; -update noar tt set v3='FL672KMTP7X2LQ2Z3X0V3JQY61XZT1LV4' where id=18; -update noar ti set v3='FL672KMTP7X2LQ2Z3X0V3JQY61XZT1LV4' where id=18; -update noar tt set v0='91MVJ862UD5B8CALA6XIPUERX6M0EZI9U' where id=19; -update noar ti set v0='91MVJ862UD5B8CALA6XIPUERX6M0EZI9U' where id=19; -update noar tt set v1='3PMLFZZSY1ILDOPUEA9V9JL6CREQXZFLI' where id=19; -update noar ti set v1='3PMLFZZSY1ILDOPUEA9V9JL6CREQXZFLI' where id=19; -update noar tt set v2='GQ9TSV4W2FAPQVICDG8H5L1LWBKX7H2G8' where id=19; -update noar ti set v2='GQ9TSV4W2FAPQVICDG8H5L1LWBKX7H2G8' where id=19; -update noar tt set v3='KQQVF17YK17KYX2N6HHWBJ5CYX0BLC3TP' where id=19; -update noar ti set v3='KQQVF17YK17KYX2N6HHWBJ5CYX0BLC3TP' where id=19; -update noar tt set v0='BQ2C26F41R16F9IT6CHBS5SPWHX44U665' where id=20; -update noar ti set v0='BQ2C26F41R16F9IT6CHBS5SPWHX44U665' where id=20; -update noar tt set v1='BQLHGIX1QDX1FTDBELFBLKHMG4EGK3JUX' where id=20; -update noar ti set v1='BQLHGIX1QDX1FTDBELFBLKHMG4EGK3JUX' where id=20; -update noar tt set v2='8D8MWG0B0O5P3L4QHU7MAZ2FG7P1WXTDH' where id=20; -update noar ti set v2='8D8MWG0B0O5P3L4QHU7MAZ2FG7P1WXTDH' where id=20; -update noar tt set v3='A8BGZNDJPECVJXRC33OIZOMDMPPUXFMUR' where id=20; -update noar ti set v3='A8BGZNDJPECVJXRC33OIZOMDMPPUXFMUR' where id=20; -update noar tt set v0='P2ZCHS22PAQE5HP6TJ6GA9G6CYJDS8Y62' where id=21; -update noar ti set v0='P2ZCHS22PAQE5HP6TJ6GA9G6CYJDS8Y62' where id=21; -update noar tt set v1='HJ76W65BKZASJ0D5MVZOTT65E9JWCSQCG' where id=21; -update noar ti set v1='HJ76W65BKZASJ0D5MVZOTT65E9JWCSQCG' where id=21; -update noar tt set v2='HXN3H4N2716EPCF7SK5TJTCBMFHC1APFB' where id=21; -update noar ti set v2='HXN3H4N2716EPCF7SK5TJTCBMFHC1APFB' where id=21; -update noar tt set v3='MH0EOVWCAIQBG9Q6ASDCR5ADU3VVACATF' where id=21; -update noar ti set v3='MH0EOVWCAIQBG9Q6ASDCR5ADU3VVACATF' where id=21; -update noar tt set v0='107DEIHQ3GDC2NDS2Q07EDVFGWSO0J7SH' where id=22; -update noar ti set v0='107DEIHQ3GDC2NDS2Q07EDVFGWSO0J7SH' where id=22; -update noar tt set v1='FP7GFDM5MIX0U2QPXRRLNS5LF4I47TCNI' where id=22; -update noar ti set v1='FP7GFDM5MIX0U2QPXRRLNS5LF4I47TCNI' where id=22; -update noar tt set v2='IW8AA65FH5KWY484BCUEC2ZG2HWCLJ524' where id=22; -update noar ti set v2='IW8AA65FH5KWY484BCUEC2ZG2HWCLJ524' where id=22; -update noar tt set v3='J753JLU9JBWL0PTD9UM79MTK8MN7O57P5' where id=22; -update noar ti set v3='J753JLU9JBWL0PTD9UM79MTK8MN7O57P5' where id=22; -update noar tt set v0='9QF74QJJ49U6GQUVDCUFZ9C37H29KK1UY' where id=23; -update noar ti set v0='9QF74QJJ49U6GQUVDCUFZ9C37H29KK1UY' where id=23; -update noar tt set v1='IHA7PGIUNHGGWSXMW36C5WKYBF4K751AL' where id=23; -update noar ti set v1='IHA7PGIUNHGGWSXMW36C5WKYBF4K751AL' where id=23; -update noar tt set v2='YH1VL0ACEOES4HMPVH0WG2S9M0HX3FTWV' where id=23; -update noar ti set v2='YH1VL0ACEOES4HMPVH0WG2S9M0HX3FTWV' where id=23; -update noar tt set v3='XUCZC7D538MJST1GT6PVVHGZFYO64SW9O' where id=23; -update noar ti set v3='XUCZC7D538MJST1GT6PVVHGZFYO64SW9O' where id=23; -update noar tt set v0='8PH7LGKOHB54MDLK7RAPQTA9WFJ16TSJO' where id=24; -update noar ti set v0='8PH7LGKOHB54MDLK7RAPQTA9WFJ16TSJO' where id=24; -update noar tt set v1='BI1N1R8MP2R1Q9J8DICC5MXUCJREWV4SN' where id=24; -update noar ti set v1='BI1N1R8MP2R1Q9J8DICC5MXUCJREWV4SN' where id=24; -update noar tt set v2='JNDECEQE4UUXAOHS5QFG0922VTF09F674' where id=24; -update noar ti set v2='JNDECEQE4UUXAOHS5QFG0922VTF09F674' where id=24; -update noar tt set v3='N8H46WLI7LDXI6RKCXN559WMGERULO3KE' where id=24; -update noar ti set v3='N8H46WLI7LDXI6RKCXN559WMGERULO3KE' where id=24; -update noar tt set v0='0WI2SGQAPLGKEMTT89MJK3NQ1TRF57OR4' where id=25; -update noar ti set v0='0WI2SGQAPLGKEMTT89MJK3NQ1TRF57OR4' where id=25; -update noar tt set v1='VDNWTAZJI1RFJT3124UQYF8DYW5OGG0K3' where id=25; -update noar ti set v1='VDNWTAZJI1RFJT3124UQYF8DYW5OGG0K3' where id=25; -update noar tt set v2='VVWCC2BHB28RTN4QFLMPKGB6VIPQS9W3E' where id=25; -update noar ti set v2='VVWCC2BHB28RTN4QFLMPKGB6VIPQS9W3E' where id=25; -update noar tt set v3='6VN2LQ5BU505V7XXF1MSOJUDMPL8JOKYS' where id=25; -update noar ti set v3='6VN2LQ5BU505V7XXF1MSOJUDMPL8JOKYS' where id=25; -update noar tt set v0='WJQFASTDWGPKZU42IU4V5YFWY1VSDE3WJ' where id=26; -update noar ti set v0='WJQFASTDWGPKZU42IU4V5YFWY1VSDE3WJ' where id=26; -update noar tt set v1='OSDG1E7D6JY0THUCU9KCZQOCV0CWUDW68' where id=26; -update noar ti set v1='OSDG1E7D6JY0THUCU9KCZQOCV0CWUDW68' where id=26; -update noar tt set v2='10MB7PZUJQ05HXB7JM5PIH17N3UR9VGKQ' where id=26; -update noar ti set v2='10MB7PZUJQ05HXB7JM5PIH17N3UR9VGKQ' where id=26; -update noar tt set v3='FFZ23U1FOVCKI2WU8MCYHK5I6YDPRGQ7M' where id=26; -update noar ti set v3='FFZ23U1FOVCKI2WU8MCYHK5I6YDPRGQ7M' where id=26; -update noar tt set v0='XZF7INM5CEMFE64IPWUMNF4CF616KP96Y' where id=27; -update noar ti set v0='XZF7INM5CEMFE64IPWUMNF4CF616KP96Y' where id=27; -update noar tt set v1='5K5SQQUIXQ0J6G4NG2H073TLMUR4JBRHR' where id=27; -update noar ti set v1='5K5SQQUIXQ0J6G4NG2H073TLMUR4JBRHR' where id=27; -update noar tt set v2='4XIOGA6AU0ZE4RNRLGXMM174169A7FJ8O' where id=27; -update noar ti set v2='4XIOGA6AU0ZE4RNRLGXMM174169A7FJ8O' where id=27; -update noar tt set v3='OQJ9J76C3G1V8YC3I3LVRP15MCY8CFNC2' where id=27; -update noar ti set v3='OQJ9J76C3G1V8YC3I3LVRP15MCY8CFNC2' where id=27; -update noar tt set v0='GEJ9PDRMCVLOG03AR7GE2KUU06MDZTYER' where id=28; -update noar ti set v0='GEJ9PDRMCVLOG03AR7GE2KUU06MDZTYER' where id=28; -update noar tt set v1='1M7LYV783XMZEH73YCQ0GDPAZR3H33QNM' where id=28; -update noar ti set v1='1M7LYV783XMZEH73YCQ0GDPAZR3H33QNM' where id=28; -update noar tt set v2='5YTZ0UGTGHUR2E4L8NSR9YVY11S370HBA' where id=28; -update noar ti set v2='5YTZ0UGTGHUR2E4L8NSR9YVY11S370HBA' where id=28; -update noar tt set v3='0EB9NBJKQNDEJ2TSBPDBF6XE0WAETK7Y6' where id=28; -update noar ti set v3='0EB9NBJKQNDEJ2TSBPDBF6XE0WAETK7Y6' where id=28; -update noar tt set v0='SPRV1BGKMGD2G168A6NTPXRVUZAEB9TNL' where id=29; -update noar ti set v0='SPRV1BGKMGD2G168A6NTPXRVUZAEB9TNL' where id=29; -update noar tt set v1='07PHHJMEP9LIY6G7ISABOP3Y9DC2CEAGR' where id=29; -update noar ti set v1='07PHHJMEP9LIY6G7ISABOP3Y9DC2CEAGR' where id=29; -update noar tt set v2='GHSF6KNPA6KU20RRTU1KX5VF2V7ES6LBF' where id=29; -update noar ti set v2='GHSF6KNPA6KU20RRTU1KX5VF2V7ES6LBF' where id=29; -update noar tt set v3='DRMTKXYG6OHUUP0HMQ63YIQ1QVM0RHEU8' where id=29; -update noar ti set v3='DRMTKXYG6OHUUP0HMQ63YIQ1QVM0RHEU8' where id=29; -update noar tt set v0='8B98SDALI4I18REJFK4IWTM2PXCCUC55Z' where id=30; -update noar ti set v0='8B98SDALI4I18REJFK4IWTM2PXCCUC55Z' where id=30; -update noar tt set v1='82ZUIOLY0RXD9YOSCJ6TM50OBAXDIDR0B' where id=30; -update noar ti set v1='82ZUIOLY0RXD9YOSCJ6TM50OBAXDIDR0B' where id=30; -update noar tt set v2='EUS9RJRQ3H4F0C2G53U83SFS7I8UGMDFZ' where id=30; -update noar ti set v2='EUS9RJRQ3H4F0C2G53U83SFS7I8UGMDFZ' where id=30; -update noar tt set v3='A3G2TYACCQ7FLM83FHBQOWCVGOQIBEA34' where id=30; -update noar ti set v3='A3G2TYACCQ7FLM83FHBQOWCVGOQIBEA34' where id=30; -update noar tt set v0='URCNNZR6413MRLALGAAVA8TBYBSIJ8DFE' where id=31; -update noar ti set v0='URCNNZR6413MRLALGAAVA8TBYBSIJ8DFE' where id=31; -update noar tt set v1='QW6IRTPK76HZFID8EB4CFZSVW04E4MNJD' where id=31; -update noar ti set v1='QW6IRTPK76HZFID8EB4CFZSVW04E4MNJD' where id=31; -update noar tt set v2='Q09KRN14VAE8LU961P5DUEXFFF0UN5H0B' where id=31; -update noar ti set v2='Q09KRN14VAE8LU961P5DUEXFFF0UN5H0B' where id=31; -update noar tt set v3='Z3WJ30H2J28NATJVWOVJZSZQ15CRMR8IQ' where id=31; -update noar ti set v3='Z3WJ30H2J28NATJVWOVJZSZQ15CRMR8IQ' where id=31; -update noar tt set v0='18CAZA6MKOP3NY31ZJGX7JY1RD9H7MSB6' where id=32; -update noar ti set v0='18CAZA6MKOP3NY31ZJGX7JY1RD9H7MSB6' where id=32; -update noar tt set v1='FLY9WZ1FJ2074AA92R56673E5VNVKBZ0U' where id=32; -update noar ti set v1='FLY9WZ1FJ2074AA92R56673E5VNVKBZ0U' where id=32; -update noar tt set v2='YKJS5WNZ21VBZMTC1IK75DKJDH88NOIJC' where id=32; -update noar ti set v2='YKJS5WNZ21VBZMTC1IK75DKJDH88NOIJC' where id=32; -update noar tt set v3='Z0TBKW3I880W08Z5R82GGQV7LFF3N31G7' where id=32; -update noar ti set v3='Z0TBKW3I880W08Z5R82GGQV7LFF3N31G7' where id=32; -update noar tt set v0='K7B49HGXRR2UYZ7U1AHA7Q6RV76VE5EI5' where id=33; -update noar ti set v0='K7B49HGXRR2UYZ7U1AHA7Q6RV76VE5EI5' where id=33; -update noar tt set v1='G0COXPS7X6FJLIJQERQ3DFD13YWEBQWDG' where id=33; -update noar ti set v1='G0COXPS7X6FJLIJQERQ3DFD13YWEBQWDG' where id=33; -update noar tt set v2='5MD1ZS25BSXQQTILR08ZAM2AX47SJ67LJ' where id=33; -update noar ti set v2='5MD1ZS25BSXQQTILR08ZAM2AX47SJ67LJ' where id=33; -update noar tt set v3='P236IWTBHCTU9Z1SVB4SPZ7EU1Q6PQ7UG' where id=33; -update noar ti set v3='P236IWTBHCTU9Z1SVB4SPZ7EU1Q6PQ7UG' where id=33; -update noar tt set v0='KRVYBE4GVL382458JLRALHF1Z5LOXSG36' where id=34; -update noar ti set v0='KRVYBE4GVL382458JLRALHF1Z5LOXSG36' where id=34; -update noar tt set v1='5GKY08ZLHY2CK1TW4W9MH8JO5X3MMZ6UA' where id=34; -update noar ti set v1='5GKY08ZLHY2CK1TW4W9MH8JO5X3MMZ6UA' where id=34; -update noar tt set v2='ZFTESHXZWSGUE1PO05DJJ4NTHC4BXNTJM' where id=34; -update noar ti set v2='ZFTESHXZWSGUE1PO05DJJ4NTHC4BXNTJM' where id=34; -update noar tt set v3='5139ZWEPLT9R59F4Q9OWO9N2N7BOUNISC' where id=34; -update noar ti set v3='5139ZWEPLT9R59F4Q9OWO9N2N7BOUNISC' where id=34; -update noar tt set v0='2Y03O5MO2DWECZAH5ZPSU6JV7ZN5CFT8G' where id=35; -update noar ti set v0='2Y03O5MO2DWECZAH5ZPSU6JV7ZN5CFT8G' where id=35; -update noar tt set v1='FWUZZYUM3HPEIAMSOYPR9LVPTHPI9UAKB' where id=35; -update noar ti set v1='FWUZZYUM3HPEIAMSOYPR9LVPTHPI9UAKB' where id=35; -update noar tt set v2='8XKKEWLGB9YBVZS6MMFXOC0R0HYT72IRI' where id=35; -update noar ti set v2='8XKKEWLGB9YBVZS6MMFXOC0R0HYT72IRI' where id=35; -update noar tt set v3='Z53R1BXHRG9O8JY4CTYVX7V04G2YL12QR' where id=35; -update noar ti set v3='Z53R1BXHRG9O8JY4CTYVX7V04G2YL12QR' where id=35; -update noar tt set v0='OUV8RMH3A8GSSV58YWWQRK0Z9PRY83AAB' where id=36; -update noar ti set v0='OUV8RMH3A8GSSV58YWWQRK0Z9PRY83AAB' where id=36; -update noar tt set v1='NZUL5BS463AGH7WMFVTGD93X5QSXLDZUR' where id=36; -update noar ti set v1='NZUL5BS463AGH7WMFVTGD93X5QSXLDZUR' where id=36; -update noar tt set v2='RLMYSEWOA5T24CERMFHDPDQHB5BVG5X1O' where id=36; -update noar ti set v2='RLMYSEWOA5T24CERMFHDPDQHB5BVG5X1O' where id=36; -update noar tt set v3='1D5MBR0R2QSYZBXOVBK0V6CJ9WMWL32TT' where id=36; -update noar ti set v3='1D5MBR0R2QSYZBXOVBK0V6CJ9WMWL32TT' where id=36; -update noar tt set v0='KOSY5HJLZEZ0N03M22KDQAFAODJ09JWUG' where id=37; -update noar ti set v0='KOSY5HJLZEZ0N03M22KDQAFAODJ09JWUG' where id=37; -update noar tt set v1='7UIFAU5VQEKE49JYQ063Y77UGCVI77O8R' where id=37; -update noar ti set v1='7UIFAU5VQEKE49JYQ063Y77UGCVI77O8R' where id=37; -update noar tt set v2='GJDCD5PGW82BYOOETKYMBWGH9208OCWYY' where id=37; -update noar ti set v2='GJDCD5PGW82BYOOETKYMBWGH9208OCWYY' where id=37; -update noar tt set v3='MU0GRMGW78R93POY2YCXXRUN5BT15VSVC' where id=37; -update noar ti set v3='MU0GRMGW78R93POY2YCXXRUN5BT15VSVC' where id=37; -update noar tt set v0='SWVVSTD1XV3KFGV6EOJLF6GVGV19R6JVG' where id=38; -update noar ti set v0='SWVVSTD1XV3KFGV6EOJLF6GVGV19R6JVG' where id=38; -update noar tt set v1='Z5377X1FRJG6ZSHVFPJFABBY2NEKAA7LZ' where id=38; -update noar ti set v1='Z5377X1FRJG6ZSHVFPJFABBY2NEKAA7LZ' where id=38; -update noar tt set v2='QTG2C52LEYE4U9BUK52MMMMRJTWT3LWSM' where id=38; -update noar ti set v2='QTG2C52LEYE4U9BUK52MMMMRJTWT3LWSM' where id=38; -update noar tt set v3='9Q8C3QT414MF8ELA72ECGELEXLB17265A' where id=38; -update noar ti set v3='9Q8C3QT414MF8ELA72ECGELEXLB17265A' where id=38; -update noar tt set v0='229ERUNFC7UUA02YUVCXYFXN2BNFMVPXB' where id=39; -update noar ti set v0='229ERUNFC7UUA02YUVCXYFXN2BNFMVPXB' where id=39; -update noar tt set v1='Q4EPIZ79FXI1BWVRW29OITU2EB2UM6NH1' where id=39; -update noar ti set v1='Q4EPIZ79FXI1BWVRW29OITU2EB2UM6NH1' where id=39; -update noar tt set v2='N5E531AI6LAYDX9OYUHXVFIKQBUYCG3BN' where id=39; -update noar ti set v2='N5E531AI6LAYDX9OYUHXVFIKQBUYCG3BN' where id=39; -update noar tt set v3='V7LEWEU5DH4NHBJ9F2KS7OATJOM48A1QV' where id=39; -update noar ti set v3='V7LEWEU5DH4NHBJ9F2KS7OATJOM48A1QV' where id=39; -update noar tt set v0='2BO42FSK5BN8K0C84LYRJSOCSOQYGUKE6' where id=40; -update noar ti set v0='2BO42FSK5BN8K0C84LYRJSOCSOQYGUKE6' where id=40; -update noar tt set v1='DBQ3SK9METFRULPA9JR3J2HENT7VBLCV8' where id=40; -update noar ti set v1='DBQ3SK9METFRULPA9JR3J2HENT7VBLCV8' where id=40; -update noar tt set v2='OHKT0HS2AJKRETD80BJBF891IKNHGTULE' where id=40; -update noar ti set v2='OHKT0HS2AJKRETD80BJBF891IKNHGTULE' where id=40; -update noar tt set v3='2CO8NXQIFWKAL4Y1G2F4H0SBG43H5D987' where id=40; -update noar ti set v3='2CO8NXQIFWKAL4Y1G2F4H0SBG43H5D987' where id=40; -update noar tt set v0='T06FV780MYOO8M5MBIN0AQ4E04LTVEE34' where id=41; -update noar ti set v0='T06FV780MYOO8M5MBIN0AQ4E04LTVEE34' where id=41; -update noar tt set v1='ST4VM9I20H6M5G8MN1VBM3SD3GE8LTL5Q' where id=41; -update noar ti set v1='ST4VM9I20H6M5G8MN1VBM3SD3GE8LTL5Q' where id=41; -update noar tt set v2='Y1QH92Q281DGR9OCMQEE0TG8IQMR7E55Q' where id=41; -update noar ti set v2='Y1QH92Q281DGR9OCMQEE0TG8IQMR7E55Q' where id=41; -update noar tt set v3='7MLHS7VHC7XZ2UE5C5J1ITNQ3HTKMT0M4' where id=41; -update noar ti set v3='7MLHS7VHC7XZ2UE5C5J1ITNQ3HTKMT0M4' where id=41; -update noar tt set v0='EUES4TNVQUHST6XYUKUNZRYDE00H9E3ET' where id=42; -update noar ti set v0='EUES4TNVQUHST6XYUKUNZRYDE00H9E3ET' where id=42; -update noar tt set v1='YRHWRPMBBHD144YCNXFT1PQIV5IJGCC86' where id=42; -update noar ti set v1='YRHWRPMBBHD144YCNXFT1PQIV5IJGCC86' where id=42; -update noar tt set v2='9M765V1YX537R8I03AO706NCMA99KCLE7' where id=42; -update noar ti set v2='9M765V1YX537R8I03AO706NCMA99KCLE7' where id=42; -update noar tt set v3='6W0ESIUQKA1KJWXE1SAEUSOO1UDPA32IP' where id=42; -update noar ti set v3='6W0ESIUQKA1KJWXE1SAEUSOO1UDPA32IP' where id=42; -update noar tt set v0='GHO01XGSMT12P8K8YUWW4822F2TB2A1WY' where id=43; -update noar ti set v0='GHO01XGSMT12P8K8YUWW4822F2TB2A1WY' where id=43; -update noar tt set v1='DMGU1UMBGB9NN4EOIC0J55TW9X5MXD54M' where id=43; -update noar ti set v1='DMGU1UMBGB9NN4EOIC0J55TW9X5MXD54M' where id=43; -update noar tt set v2='PPUGMRL5JQPIZ4OU5T3BNWO2UU01M5ZTD' where id=43; -update noar ti set v2='PPUGMRL5JQPIZ4OU5T3BNWO2UU01M5ZTD' where id=43; -update noar tt set v3='DR3UTBMFJKPHCGUDHRQAAWVC1YL24BMMN' where id=43; -update noar ti set v3='DR3UTBMFJKPHCGUDHRQAAWVC1YL24BMMN' where id=43; -update noar tt set v0='MQBQQJTIUOMW2EF464QUDTPPNX533YJZR' where id=44; -update noar ti set v0='MQBQQJTIUOMW2EF464QUDTPPNX533YJZR' where id=44; -update noar tt set v1='J53YVRKD7KWR60599IXY4M9K67GV9NLPH' where id=44; -update noar ti set v1='J53YVRKD7KWR60599IXY4M9K67GV9NLPH' where id=44; -update noar tt set v2='30SOHZPPZIKPY52Y3IK0AGZWLWWPGA7DR' where id=44; -update noar ti set v2='30SOHZPPZIKPY52Y3IK0AGZWLWWPGA7DR' where id=44; -update noar tt set v3='WJUQXAOQQ87OKE6KQ5P33Z33K00POIMV1' where id=44; -update noar ti set v3='WJUQXAOQQ87OKE6KQ5P33Z33K00POIMV1' where id=44; -update noar tt set v0='H9L307FD360CBDLITL0176G6ETWRG9RN3' where id=45; -update noar ti set v0='H9L307FD360CBDLITL0176G6ETWRG9RN3' where id=45; -update noar tt set v1='PAH82M79MPSSQCUUNOXFRXATRZ7SC0BAB' where id=45; -update noar ti set v1='PAH82M79MPSSQCUUNOXFRXATRZ7SC0BAB' where id=45; -update noar tt set v2='97I78JVD1MVPLZPZALUZNPANWFMWBHTF1' where id=45; -update noar ti set v2='97I78JVD1MVPLZPZALUZNPANWFMWBHTF1' where id=45; -update noar tt set v3='TXUJEWCI2MD8JMXWXRA7YFYVOXP2QTKOA' where id=45; -update noar ti set v3='TXUJEWCI2MD8JMXWXRA7YFYVOXP2QTKOA' where id=45; -update noar tt set v0='BG1RKJ1VBUB22VGT7L45ZYJDQ6TGZ7500' where id=46; -update noar ti set v0='BG1RKJ1VBUB22VGT7L45ZYJDQ6TGZ7500' where id=46; -update noar tt set v1='TVR985R8I8H14C1XKJL3DFJ7WFCKJG7IY' where id=46; -update noar ti set v1='TVR985R8I8H14C1XKJL3DFJ7WFCKJG7IY' where id=46; -update noar tt set v2='PQFIXIEDB7XVWRDYHCQCYEALXAGTMJT8C' where id=46; -update noar ti set v2='PQFIXIEDB7XVWRDYHCQCYEALXAGTMJT8C' where id=46; -update noar tt set v3='KWLNFQECG32YF9JLQ5WCVXRPNMH7QT5CP' where id=46; -update noar ti set v3='KWLNFQECG32YF9JLQ5WCVXRPNMH7QT5CP' where id=46; -update noar tt set v0='P05HAGUVHF2BY8A117PQB4LXKP2WWMY42' where id=47; -update noar ti set v0='P05HAGUVHF2BY8A117PQB4LXKP2WWMY42' where id=47; -update noar tt set v1='VS6KV97CEAXBBQOGETK6X0YJG6OT77V31' where id=47; -update noar ti set v1='VS6KV97CEAXBBQOGETK6X0YJG6OT77V31' where id=47; -update noar tt set v2='7Q7W0GV5G356XPDMHBH2RJZ4G9U43AUEX' where id=47; -update noar ti set v2='7Q7W0GV5G356XPDMHBH2RJZ4G9U43AUEX' where id=47; -update noar tt set v3='641AVJHYGZBGY3SS4V7CZX1D9D1PL82AA' where id=47; -update noar ti set v3='641AVJHYGZBGY3SS4V7CZX1D9D1PL82AA' where id=47; -update noar tt set v0='H76MQY3XZEMY41JDREB1U3PQGROCZJ32O' where id=48; -update noar ti set v0='H76MQY3XZEMY41JDREB1U3PQGROCZJ32O' where id=48; -update noar tt set v1='UDELV3TMJKN971SC67V04IJV0ZZ9NT957' where id=48; -update noar ti set v1='UDELV3TMJKN971SC67V04IJV0ZZ9NT957' where id=48; -update noar tt set v2='5DEU5BI2HWI7BD1E28KGU5FRFLRXTJ393' where id=48; -update noar ti set v2='5DEU5BI2HWI7BD1E28KGU5FRFLRXTJ393' where id=48; -update noar tt set v3='651U16ZE6EX7BNYFOCQQU26Y0X5S76OZI' where id=48; -update noar ti set v3='651U16ZE6EX7BNYFOCQQU26Y0X5S76OZI' where id=48; -update noar tt set v0='S3KKMZJ9TAHIG1SJMU2Q1PONODEDSM7T0' where id=49; -update noar ti set v0='S3KKMZJ9TAHIG1SJMU2Q1PONODEDSM7T0' where id=49; -update noar tt set v1='0G192ZBDTGJUMGQ0CMME00F8X1F7UKK3Q' where id=49; -update noar ti set v1='0G192ZBDTGJUMGQ0CMME00F8X1F7UKK3Q' where id=49; -update noar tt set v2='24RTDTONPHWS1H3FCA2LO8I2YP588RGJB' where id=49; -update noar ti set v2='24RTDTONPHWS1H3FCA2LO8I2YP588RGJB' where id=49; -update noar tt set v3='M8QZ39EZNBNMHS4NXEN9QOMMMAOUHW002' where id=49; -update noar ti set v3='M8QZ39EZNBNMHS4NXEN9QOMMMAOUHW002' where id=49; -update noar tt set v0='A6IZG7ZEZQTCZICP7OB1K17VF7ZGPF0RP' where id=50; -update noar ti set v0='A6IZG7ZEZQTCZICP7OB1K17VF7ZGPF0RP' where id=50; -update noar tt set v1='NEMY8UFM78ML661P6147SXCDP6J02RQEA' where id=50; -update noar ti set v1='NEMY8UFM78ML661P6147SXCDP6J02RQEA' where id=50; -update noar tt set v2='RGW6669TULDTCI6AEGFLI30M0BNJU4X91' where id=50; -update noar ti set v2='RGW6669TULDTCI6AEGFLI30M0BNJU4X91' where id=50; -update noar tt set v3='T5BB49AUMIPRA78A5NN71VHQHWCA12T4W' where id=50; -update noar ti set v3='T5BB49AUMIPRA78A5NN71VHQHWCA12T4W' where id=50; -update noar tt set v0='LXSNRNC3J6O8KPFCMD8SYV621VISQPEWE' where id=51; -update noar ti set v0='LXSNRNC3J6O8KPFCMD8SYV621VISQPEWE' where id=51; -update noar tt set v1='UWDWY1GR92F74CT5TSD6T6XGBPZ5H8SF7' where id=51; -update noar ti set v1='UWDWY1GR92F74CT5TSD6T6XGBPZ5H8SF7' where id=51; -update noar tt set v2='QJ9IP4S6WWGF0KX80D8XTAOF5HL4UQVPT' where id=51; -update noar ti set v2='QJ9IP4S6WWGF0KX80D8XTAOF5HL4UQVPT' where id=51; -update noar tt set v3='ZM7P24RT3BCVDM2ICWF07OC5OSJSFIDVL' where id=51; -update noar ti set v3='ZM7P24RT3BCVDM2ICWF07OC5OSJSFIDVL' where id=51; -update noar tt set v0='BJK46ALUVTQE8RUU97LP5E043KVMJD70D' where id=52; -update noar ti set v0='BJK46ALUVTQE8RUU97LP5E043KVMJD70D' where id=52; -update noar tt set v1='BFDIN2FDON0CU2CLKEB4MC9Z5X3JN0SK4' where id=52; -update noar ti set v1='BFDIN2FDON0CU2CLKEB4MC9Z5X3JN0SK4' where id=52; -update noar tt set v2='VNAUIIRJCOVS0KJU253HJ368GVKR11KDI' where id=52; -update noar ti set v2='VNAUIIRJCOVS0KJU253HJ368GVKR11KDI' where id=52; -update noar tt set v3='VC2YTAA7CH1X8C69MG1PC7V9ZEOTNQ4UF' where id=52; -update noar ti set v3='VC2YTAA7CH1X8C69MG1PC7V9ZEOTNQ4UF' where id=52; -update noar tt set v0='TQ8Y5T19I5IBFL0XG66X20Y7W7OQTQX5O' where id=53; -update noar ti set v0='TQ8Y5T19I5IBFL0XG66X20Y7W7OQTQX5O' where id=53; -update noar tt set v1='4SOFHDU9AZBUCTWWKUJJG30IDACHX458Y' where id=53; -update noar ti set v1='4SOFHDU9AZBUCTWWKUJJG30IDACHX458Y' where id=53; -update noar tt set v2='LC298ZARGDWN2SQC8KQ99TC0XDK0J3HNY' where id=53; -update noar ti set v2='LC298ZARGDWN2SQC8KQ99TC0XDK0J3HNY' where id=53; -update noar tt set v3='JKTZGV4VOVAOCI3M1E4PX7FZP3YYAIV9X' where id=53; -update noar ti set v3='JKTZGV4VOVAOCI3M1E4PX7FZP3YYAIV9X' where id=53; -update noar tt set v0='BU4HHSK0CDGWDZKOYOIXQHTF74DP95NFK' where id=54; -update noar ti set v0='BU4HHSK0CDGWDZKOYOIXQHTF74DP95NFK' where id=54; -update noar tt set v1='6JZYFTSSCTGO9WF9BFNLUA0NBMMF2N8XE' where id=54; -update noar ti set v1='6JZYFTSSCTGO9WF9BFNLUA0NBMMF2N8XE' where id=54; -update noar tt set v2='OU0NT3U4AIEQ0WXBG8WH5NCK96W8ZEPPE' where id=54; -update noar ti set v2='OU0NT3U4AIEQ0WXBG8WH5NCK96W8ZEPPE' where id=54; -update noar tt set v3='N7PV3KCTRBT0I1Z7R44WEBSB6OLCYFO8J' where id=54; -update noar ti set v3='N7PV3KCTRBT0I1Z7R44WEBSB6OLCYFO8J' where id=54; -update noar tt set v0='6MWP2FE7BPLOBTS1DMQ71HD2UNOMR0CKX' where id=55; -update noar ti set v0='6MWP2FE7BPLOBTS1DMQ71HD2UNOMR0CKX' where id=55; -update noar tt set v1='3IBBZHYPZUG5N4C0MZQ858DGRB3QVU8UL' where id=55; -update noar ti set v1='3IBBZHYPZUG5N4C0MZQ858DGRB3QVU8UL' where id=55; -update noar tt set v2='050LJRF8Z661PFZFFJI4PUY5HC6FZ4XAZ' where id=55; -update noar ti set v2='050LJRF8Z661PFZFFJI4PUY5HC6FZ4XAZ' where id=55; -update noar tt set v3='3N4YM08A7GF6NY4WKIZJYB812CB69M1TM' where id=55; -update noar ti set v3='3N4YM08A7GF6NY4WKIZJYB812CB69M1TM' where id=55; -update noar tt set v0='11366LNF4LLZJS8Y0PTI84JBHS00YSTU8' where id=56; -update noar ti set v0='11366LNF4LLZJS8Y0PTI84JBHS00YSTU8' where id=56; -update noar tt set v1='OR5YXKS53YP6XHGIPZ296G6AQIOET6R03' where id=56; -update noar ti set v1='OR5YXKS53YP6XHGIPZ296G6AQIOET6R03' where id=56; -update noar tt set v2='YWJ31G85YR5HHNVEODM3JKOH15OP90Q2F' where id=56; -update noar ti set v2='YWJ31G85YR5HHNVEODM3JKOH15OP90Q2F' where id=56; -update noar tt set v3='ZX8KYZ3EQSDX25XGXMZBANP2AT8UEUGQD' where id=56; -update noar ti set v3='ZX8KYZ3EQSDX25XGXMZBANP2AT8UEUGQD' where id=56; -update noar tt set v0='WIL66TSKLO1QDQ9SHC8TPYTENWK094IQL' where id=57; -update noar ti set v0='WIL66TSKLO1QDQ9SHC8TPYTENWK094IQL' where id=57; -update noar tt set v1='IZST9BLY30O1OI6GOLNSHYKW2PJ4L7PQ5' where id=57; -update noar ti set v1='IZST9BLY30O1OI6GOLNSHYKW2PJ4L7PQ5' where id=57; -update noar tt set v2='LR1LDYMEN07AFFSLXMSLMI2CRQHWW0NLJ' where id=57; -update noar ti set v2='LR1LDYMEN07AFFSLXMSLMI2CRQHWW0NLJ' where id=57; -update noar tt set v3='49FQ5TLVYGKN8ERX3UV4KBK9RDDS2FJ94' where id=57; -update noar ti set v3='49FQ5TLVYGKN8ERX3UV4KBK9RDDS2FJ94' where id=57; -update noar tt set v0='TCRDTTNMB5C482EBDU1DLJ03Q3SUJS1DN' where id=58; -update noar ti set v0='TCRDTTNMB5C482EBDU1DLJ03Q3SUJS1DN' where id=58; -update noar tt set v1='YIKSGR2NEZ614TL0PTJ51X8B1L64ZBDI7' where id=58; -update noar ti set v1='YIKSGR2NEZ614TL0PTJ51X8B1L64ZBDI7' where id=58; -update noar tt set v2='SB70C6U9232ELJNALDDGK2FMGH3TNG7DG' where id=58; -update noar ti set v2='SB70C6U9232ELJNALDDGK2FMGH3TNG7DG' where id=58; -update noar tt set v3='RTYBZM0KZMBKBQA3NP5DG61BHPHILZCPD' where id=58; -update noar ti set v3='RTYBZM0KZMBKBQA3NP5DG61BHPHILZCPD' where id=58; -update noar tt set v0='NMF2XQ4OS8UHPBS2L41G3Y3NMSQIK9L9T' where id=59; -update noar ti set v0='NMF2XQ4OS8UHPBS2L41G3Y3NMSQIK9L9T' where id=59; -update noar tt set v1='WCVNB26Z87VXGXFMQ0CDWAU3F1KRRZWFY' where id=59; -update noar ti set v1='WCVNB26Z87VXGXFMQ0CDWAU3F1KRRZWFY' where id=59; -update noar tt set v2='XU6QL3KQ6HDG5FPE1COTEVANDNK0N79AT' where id=59; -update noar ti set v2='XU6QL3KQ6HDG5FPE1COTEVANDNK0N79AT' where id=59; -update noar tt set v3='1ZUQRU4LD7QCGT0WJYWNJKJW1XFL9OQ4C' where id=59; -update noar ti set v3='1ZUQRU4LD7QCGT0WJYWNJKJW1XFL9OQ4C' where id=59; -update noar tt set v0='VM06I5MPUPJN55OXYHJ14T9OURYRW001B' where id=60; -update noar ti set v0='VM06I5MPUPJN55OXYHJ14T9OURYRW001B' where id=60; -update noar tt set v1='76ATR77K16EY7AD3L8ZGQN3UXO8C8LHJW' where id=60; -update noar ti set v1='76ATR77K16EY7AD3L8ZGQN3UXO8C8LHJW' where id=60; -update noar tt set v2='SYFSBI4ABGH7CKOIMJWL7RV551NBNB4WM' where id=60; -update noar ti set v2='SYFSBI4ABGH7CKOIMJWL7RV551NBNB4WM' where id=60; -update noar tt set v3='1VGRTZQKX8T4Q58WYGP6GQGQ3PLNBBV89' where id=60; -update noar ti set v3='1VGRTZQKX8T4Q58WYGP6GQGQ3PLNBBV89' where id=60; -update noar tt set v0='VLJU7DG5MGME7XQMV9UC6OCCABFEP2DML' where id=61; -update noar ti set v0='VLJU7DG5MGME7XQMV9UC6OCCABFEP2DML' where id=61; -update noar tt set v1='U66MIZ9X814XSSWFALZAYCTIA87M243J5' where id=61; -update noar ti set v1='U66MIZ9X814XSSWFALZAYCTIA87M243J5' where id=61; -update noar tt set v2='PZ2JMGVY0UA0NMJI5TXPN9DTUEPXD64ZJ' where id=61; -update noar ti set v2='PZ2JMGVY0UA0NMJI5TXPN9DTUEPXD64ZJ' where id=61; -update noar tt set v3='CD0C0X8WS18IBF8BOJ2B4NQX8ZE0WC6E9' where id=61; -update noar ti set v3='CD0C0X8WS18IBF8BOJ2B4NQX8ZE0WC6E9' where id=61; -update noar tt set v0='A5S44N1TMX88VG6SDHDVYQTTD70GUXWEK' where id=62; -update noar ti set v0='A5S44N1TMX88VG6SDHDVYQTTD70GUXWEK' where id=62; -update noar tt set v1='SHQW6Y2ZGOCTNYRLE1MVL53I8UV4P2HP7' where id=62; -update noar ti set v1='SHQW6Y2ZGOCTNYRLE1MVL53I8UV4P2HP7' where id=62; -update noar tt set v2='TZJYK2PK5C8DZ6POOETAXPV2H0RQ6X8QH' where id=62; -update noar ti set v2='TZJYK2PK5C8DZ6POOETAXPV2H0RQ6X8QH' where id=62; -update noar tt set v3='P5YTFZJWGPMZWGJZPO6BULJLOCF07Z9LF' where id=62; -update noar ti set v3='P5YTFZJWGPMZWGJZPO6BULJLOCF07Z9LF' where id=62; -update noar tt set v0='DXIUJPJIGCKXE8KYU4X15XQOFQ4KXU6LL' where id=63; -update noar ti set v0='DXIUJPJIGCKXE8KYU4X15XQOFQ4KXU6LL' where id=63; -update noar tt set v1='W6Q9E97RFAFETEM2IORNUUNC5GZG6TZUO' where id=63; -update noar ti set v1='W6Q9E97RFAFETEM2IORNUUNC5GZG6TZUO' where id=63; -update noar tt set v2='OQRGLG7YZZNRD1YQALS0JO6O6ZLEK1QVP' where id=63; -update noar ti set v2='OQRGLG7YZZNRD1YQALS0JO6O6ZLEK1QVP' where id=63; -update noar tt set v3='OVI0WCUGVDSVH7ZOO4TD9XV0IYQQ12VNY' where id=63; -update noar ti set v3='OVI0WCUGVDSVH7ZOO4TD9XV0IYQQ12VNY' where id=63; -update noar tt set v0='J5Q3VFO0ZA4DF8QHCTXZ4YUN7SDW3CBY2' where id=64; -update noar ti set v0='J5Q3VFO0ZA4DF8QHCTXZ4YUN7SDW3CBY2' where id=64; -update noar tt set v1='3WQ6YQKV13E7UMVSZR92EYP91I1WIBA55' where id=64; -update noar ti set v1='3WQ6YQKV13E7UMVSZR92EYP91I1WIBA55' where id=64; -update noar tt set v2='TG3O9OM8TTPPB60233M822MVF6DTMJ1GY' where id=64; -update noar ti set v2='TG3O9OM8TTPPB60233M822MVF6DTMJ1GY' where id=64; -update noar tt set v3='PECH6S66TNU0T7E2AV4G7I0ICY9J5HYMT' where id=64; -update noar ti set v3='PECH6S66TNU0T7E2AV4G7I0ICY9J5HYMT' where id=64; -update noar tt set v0='P9V026YRE4E6N27H8W0FE9RD9ID4H0KHP' where id=65; -update noar ti set v0='P9V026YRE4E6N27H8W0FE9RD9ID4H0KHP' where id=65; -update noar tt set v1='GR5V92X8VME7QHTLZRDYDNYU4XDY27WK8' where id=65; -update noar ti set v1='GR5V92X8VME7QHTLZRDYDNYU4XDY27WK8' where id=65; -update noar tt set v2='ZHTIM8XBIIKT1ZUANZI28GNAJ6WIA6VSA' where id=65; -update noar ti set v2='ZHTIM8XBIIKT1ZUANZI28GNAJ6WIA6VSA' where id=65; -update noar tt set v3='52Y1LAL6S07WFRHRMYGM703S4BNXQXFWI' where id=65; -update noar ti set v3='52Y1LAL6S07WFRHRMYGM703S4BNXQXFWI' where id=65; -update noar tt set v0='HQBYRGQY7H3EZN9NTQKO0ZV64VF211XBQ' where id=66; -update noar ti set v0='HQBYRGQY7H3EZN9NTQKO0ZV64VF211XBQ' where id=66; -update noar tt set v1='V6YGXLISICT0K8K792R7Z9FKORGIYYM3W' where id=66; -update noar ti set v1='V6YGXLISICT0K8K792R7Z9FKORGIYYM3W' where id=66; -update noar tt set v2='A9SF2TOIUJ06VKQZGFIGG4AFAMYA03I8L' where id=66; -update noar ti set v2='A9SF2TOIUJ06VKQZGFIGG4AFAMYA03I8L' where id=66; -update noar tt set v3='8DRMIRHJKHA0JUCRYG6GYK3ACZI889F5G' where id=66; -update noar ti set v3='8DRMIRHJKHA0JUCRYG6GYK3ACZI889F5G' where id=66; -update noar tt set v0='U7IRM1W59O9W71HVONRKHK63WA7APZR80' where id=67; -update noar ti set v0='U7IRM1W59O9W71HVONRKHK63WA7APZR80' where id=67; -update noar tt set v1='EW9RSVANN4GXFDHNJEUYVKTTQ1M1H6EC4' where id=67; -update noar ti set v1='EW9RSVANN4GXFDHNJEUYVKTTQ1M1H6EC4' where id=67; -update noar tt set v2='RBZLXMMNGSIH2Z0ZKTMODQR9AHUOBZGG6' where id=67; -update noar ti set v2='RBZLXMMNGSIH2Z0ZKTMODQR9AHUOBZGG6' where id=67; -update noar tt set v3='91KMBJ1JJ3EO9MFXTM2GWL9KBG2B0VUQ3' where id=67; -update noar ti set v3='91KMBJ1JJ3EO9MFXTM2GWL9KBG2B0VUQ3' where id=67; -update noar tt set v0='4VDHEZIWXIWFA9UN3UY9C0P5R5Z8J5WXJ' where id=68; -update noar ti set v0='4VDHEZIWXIWFA9UN3UY9C0P5R5Z8J5WXJ' where id=68; -update noar tt set v1='SPYS7HLQ9OAX7KOGWVTWXHD0MAP474K59' where id=68; -update noar ti set v1='SPYS7HLQ9OAX7KOGWVTWXHD0MAP474K59' where id=68; -update noar tt set v2='TN58DN9GB8OE3TKX3QXJP1D56Q0WT1WMK' where id=68; -update noar ti set v2='TN58DN9GB8OE3TKX3QXJP1D56Q0WT1WMK' where id=68; -update noar tt set v3='T7P8DXVVUCAJPU7SZIF1UH5THFSRAJBOA' where id=68; -update noar ti set v3='T7P8DXVVUCAJPU7SZIF1UH5THFSRAJBOA' where id=68; -update noar tt set v0='RBAFLFIAP39ZJPEB45CMYIJNL4O69NHJA' where id=69; -update noar ti set v0='RBAFLFIAP39ZJPEB45CMYIJNL4O69NHJA' where id=69; -update noar tt set v1='A8UO00Q0QGUITMRJYGIEJ6J3VOORX3V2X' where id=69; -update noar ti set v1='A8UO00Q0QGUITMRJYGIEJ6J3VOORX3V2X' where id=69; -update noar tt set v2='4C8OI3LBJ9BEU1UL6PSL4EUX3VI5AXZVC' where id=69; -update noar ti set v2='4C8OI3LBJ9BEU1UL6PSL4EUX3VI5AXZVC' where id=69; -update noar tt set v3='YBI1CCKRD7HH53NL2Z38J58BJUPSWD3B8' where id=69; -update noar ti set v3='YBI1CCKRD7HH53NL2Z38J58BJUPSWD3B8' where id=69; -update noar tt set v0='0R6EPZDWXP8REHTE4QAHQRR1TCR2PES1M' where id=70; -update noar ti set v0='0R6EPZDWXP8REHTE4QAHQRR1TCR2PES1M' where id=70; -update noar tt set v1='AUUJPYXXC4KFMJK48FJ8722FR9BAKX0KY' where id=70; -update noar ti set v1='AUUJPYXXC4KFMJK48FJ8722FR9BAKX0KY' where id=70; -update noar tt set v2='0Z9S1U27VH738JD5Z175A1J3YPB2N025M' where id=70; -update noar ti set v2='0Z9S1U27VH738JD5Z175A1J3YPB2N025M' where id=70; -update noar tt set v3='N1CKHUX8C5MMJLBYGQEBL6BPNBV9J11IW' where id=70; -update noar ti set v3='N1CKHUX8C5MMJLBYGQEBL6BPNBV9J11IW' where id=70; -update noar tt set v0='E53K6FCNE8296B77TTNO8FTKYDV15DHFE' where id=71; -update noar ti set v0='E53K6FCNE8296B77TTNO8FTKYDV15DHFE' where id=71; -update noar tt set v1='J70EEQVMHMLKOFVPPKGPP33WCDRD4LHHN' where id=71; -update noar ti set v1='J70EEQVMHMLKOFVPPKGPP33WCDRD4LHHN' where id=71; -update noar tt set v2='UG7ILDDTK2AFZU9YU6DQ0DYLZN430MUM9' where id=71; -update noar ti set v2='UG7ILDDTK2AFZU9YU6DQ0DYLZN430MUM9' where id=71; -update noar tt set v3='GHCMT694ZNB7UW5VTMDGLTD68F3AR46GW' where id=71; -update noar ti set v3='GHCMT694ZNB7UW5VTMDGLTD68F3AR46GW' where id=71; -update noar tt set v0='CLJZXA12D8IYJEZDB1R4E7GRMV8N72RT9' where id=72; -update noar ti set v0='CLJZXA12D8IYJEZDB1R4E7GRMV8N72RT9' where id=72; -update noar tt set v1='OSHBB5ZRF7RLE6CHZMKR56QZH0ISXB4CK' where id=72; -update noar ti set v1='OSHBB5ZRF7RLE6CHZMKR56QZH0ISXB4CK' where id=72; -update noar tt set v2='1VFD6E9NXSITTRRMLYXW93N450TU3RJ4T' where id=72; -update noar ti set v2='1VFD6E9NXSITTRRMLYXW93N450TU3RJ4T' where id=72; -update noar tt set v3='0V0KHIZHYM3FRMXLFODZSA97R7H7RDGEH' where id=72; -update noar ti set v3='0V0KHIZHYM3FRMXLFODZSA97R7H7RDGEH' where id=72; -update noar tt set v0='OZVGOUL95XCUZW1FCTFPDMXGU29RCGAFW' where id=73; -update noar ti set v0='OZVGOUL95XCUZW1FCTFPDMXGU29RCGAFW' where id=73; -update noar tt set v1='96OUR5V5JBHNI7ZFSSYCJ0H7WE4YT283N' where id=73; -update noar ti set v1='96OUR5V5JBHNI7ZFSSYCJ0H7WE4YT283N' where id=73; -update noar tt set v2='IYCI1S7HOLM7P4IC0OIEOCL953EI8G19T' where id=73; -update noar ti set v2='IYCI1S7HOLM7P4IC0OIEOCL953EI8G19T' where id=73; -update noar tt set v3='GWJW0RFJJB80X5T880J9CYGPXX0J6ZDWE' where id=73; -update noar ti set v3='GWJW0RFJJB80X5T880J9CYGPXX0J6ZDWE' where id=73; -update noar tt set v0='DZKR232DCPAICDL3DH921CM82LM0J2KCP' where id=74; -update noar ti set v0='DZKR232DCPAICDL3DH921CM82LM0J2KCP' where id=74; -update noar tt set v1='R2ZZFSGBVIX329YJGWA2NA1KNYXFICHML' where id=74; -update noar ti set v1='R2ZZFSGBVIX329YJGWA2NA1KNYXFICHML' where id=74; -update noar tt set v2='H3O2GLFUQXEAV6MONOE4NYCUUHH89IWSP' where id=74; -update noar ti set v2='H3O2GLFUQXEAV6MONOE4NYCUUHH89IWSP' where id=74; -update noar tt set v3='DN2WPI8C0V14DOIDC8HOCXL1MH36X8P1Q' where id=74; -update noar ti set v3='DN2WPI8C0V14DOIDC8HOCXL1MH36X8P1Q' where id=74; -update noar tt set v0='KKAU7NVQJIDYC5J4PSKO2B9NFQZCNZNAM' where id=75; -update noar ti set v0='KKAU7NVQJIDYC5J4PSKO2B9NFQZCNZNAM' where id=75; -update noar tt set v1='5KTQ2LYODHTNDBTPWP7O39G18YKS1F3JF' where id=75; -update noar ti set v1='5KTQ2LYODHTNDBTPWP7O39G18YKS1F3JF' where id=75; -update noar tt set v2='LSR05H81093YIS2VI9K42MF90NKAV6YBB' where id=75; -update noar ti set v2='LSR05H81093YIS2VI9K42MF90NKAV6YBB' where id=75; -update noar tt set v3='8Q6YN8ACEGSRW6J792TQRJZXL2CRM6F8R' where id=75; -update noar ti set v3='8Q6YN8ACEGSRW6J792TQRJZXL2CRM6F8R' where id=75; -update noar tt set v0='MELD8O9P7RWKK94A3N9XQEG11OX85JEBG' where id=76; -update noar ti set v0='MELD8O9P7RWKK94A3N9XQEG11OX85JEBG' where id=76; -update noar tt set v1='7MJK9CPHQ90RZKKWHG3R4NZ5BDTXP5AGV' where id=76; -update noar ti set v1='7MJK9CPHQ90RZKKWHG3R4NZ5BDTXP5AGV' where id=76; -update noar tt set v2='BVFAEOYPQQWIVH9QVEMD1B6J3U9UKB6I9' where id=76; -update noar ti set v2='BVFAEOYPQQWIVH9QVEMD1B6J3U9UKB6I9' where id=76; -update noar tt set v3='65WMWMYPC9566T2IG53KGTVILG4FAWFFR' where id=76; -update noar ti set v3='65WMWMYPC9566T2IG53KGTVILG4FAWFFR' where id=76; -update noar tt set v0='I2P6PFQJXFXRX21THQ8W3X0N90J9Z54RK' where id=77; -update noar ti set v0='I2P6PFQJXFXRX21THQ8W3X0N90J9Z54RK' where id=77; -update noar tt set v1='46L8DSTTPJTKB3PMHWKGBG5U632P4S9VH' where id=77; -update noar ti set v1='46L8DSTTPJTKB3PMHWKGBG5U632P4S9VH' where id=77; -update noar tt set v2='QHCHD1TSI870RBHOPS3X1A2TXDR3TYIOR' where id=77; -update noar ti set v2='QHCHD1TSI870RBHOPS3X1A2TXDR3TYIOR' where id=77; -update noar tt set v3='QCOE17ASDZR7CP4NF06B3RD41F09TTFBP' where id=77; -update noar ti set v3='QCOE17ASDZR7CP4NF06B3RD41F09TTFBP' where id=77; -update noar tt set v0='ZDMHLYKTPA6UJ2HOUPF2NZ29YCBS0LPB1' where id=78; -update noar ti set v0='ZDMHLYKTPA6UJ2HOUPF2NZ29YCBS0LPB1' where id=78; -update noar tt set v1='6K9DP0RUZUCQSJVYDVO3IGAP6SBDV9WK2' where id=78; -update noar ti set v1='6K9DP0RUZUCQSJVYDVO3IGAP6SBDV9WK2' where id=78; -update noar tt set v2='W968MKNIHCPENL5EU0OQYHEE736JRBDO5' where id=78; -update noar ti set v2='W968MKNIHCPENL5EU0OQYHEE736JRBDO5' where id=78; -update noar tt set v3='C1P5NN3CLAOACWO6GC8CHW2XBXTOTBQ9R' where id=78; -update noar ti set v3='C1P5NN3CLAOACWO6GC8CHW2XBXTOTBQ9R' where id=78; -update noar tt set v0='VVKCPGTI9ZP4RGQ2RE426UCHSVG5WERM2' where id=79; -update noar ti set v0='VVKCPGTI9ZP4RGQ2RE426UCHSVG5WERM2' where id=79; -update noar tt set v1='9ALQ6SFBH1BH1BSWX9ZW2QUHFIOHJNN2P' where id=79; -update noar ti set v1='9ALQ6SFBH1BH1BSWX9ZW2QUHFIOHJNN2P' where id=79; -update noar tt set v2='F1OMWTAX0TKMXLGDNRPXK2H1XMTV4U35U' where id=79; -update noar ti set v2='F1OMWTAX0TKMXLGDNRPXK2H1XMTV4U35U' where id=79; -update noar tt set v3='BBHGSD8QTJYUMMKBNO9ZXFEFN1DC4H96O' where id=79; -update noar ti set v3='BBHGSD8QTJYUMMKBNO9ZXFEFN1DC4H96O' where id=79; -update noar tt set v0='M2QRLC1L0PT4QMP0SQZOMSJ3NPO51GVVP' where id=80; -update noar ti set v0='M2QRLC1L0PT4QMP0SQZOMSJ3NPO51GVVP' where id=80; -update noar tt set v1='8CUN3B6L2QK65VPPX6KEUGK0GCCRKDWXY' where id=80; -update noar ti set v1='8CUN3B6L2QK65VPPX6KEUGK0GCCRKDWXY' where id=80; -update noar tt set v2='FPBXGU1CSXX8MJ9QI07LL3OQJNFZ26BJ6' where id=80; -update noar ti set v2='FPBXGU1CSXX8MJ9QI07LL3OQJNFZ26BJ6' where id=80; -update noar tt set v3='46F7JMV2CUHK73NN43IDQDJ3IGD3HONK1' where id=80; -update noar ti set v3='46F7JMV2CUHK73NN43IDQDJ3IGD3HONK1' where id=80; -update noar tt set v0='A0ZN1UOWXZNNHMPZQYJ7DBBTNNFNXZEMZ' where id=81; -update noar ti set v0='A0ZN1UOWXZNNHMPZQYJ7DBBTNNFNXZEMZ' where id=81; -update noar tt set v1='ORHZ2BWY8BTXPZI1L8UGPNPQDWZ82MI9F' where id=81; -update noar ti set v1='ORHZ2BWY8BTXPZI1L8UGPNPQDWZ82MI9F' where id=81; -update noar tt set v2='4SCC68CXZKXW1MSH38YPWFHHNCR1LLLPX' where id=81; -update noar ti set v2='4SCC68CXZKXW1MSH38YPWFHHNCR1LLLPX' where id=81; -update noar tt set v3='Q3UV3XI9P0K1Z0500D09ELUNF9T6HUG74' where id=81; -update noar ti set v3='Q3UV3XI9P0K1Z0500D09ELUNF9T6HUG74' where id=81; -update noar tt set v0='HMKFAE5NRNU6RH1YPE05J01N99MA2VE49' where id=82; -update noar ti set v0='HMKFAE5NRNU6RH1YPE05J01N99MA2VE49' where id=82; -update noar tt set v1='3IRSQZM5VULR93W6646I8GA84KST7OS5N' where id=82; -update noar ti set v1='3IRSQZM5VULR93W6646I8GA84KST7OS5N' where id=82; -update noar tt set v2='Y9JNPJ2LBEX0RPZJ9YVM9228DAGXNH4JW' where id=82; -update noar ti set v2='Y9JNPJ2LBEX0RPZJ9YVM9228DAGXNH4JW' where id=82; -update noar tt set v3='RS6C2HAFDTOO9543IDMN6UXTDFW1QETP1' where id=82; -update noar ti set v3='RS6C2HAFDTOO9543IDMN6UXTDFW1QETP1' where id=82; -update noar tt set v0='N4KAN5KDW8AJA5W15B4LGKU0O3I01WNRJ' where id=83; -update noar ti set v0='N4KAN5KDW8AJA5W15B4LGKU0O3I01WNRJ' where id=83; -update noar tt set v1='LVRX9LKT4XG5JRRXIQB7NBKEIWE5G1Z0F' where id=83; -update noar ti set v1='LVRX9LKT4XG5JRRXIQB7NBKEIWE5G1Z0F' where id=83; -update noar tt set v2='7V5MZJ3S5CLDNEGNN742S3AB4EF2U24AW' where id=83; -update noar ti set v2='7V5MZJ3S5CLDNEGNN742S3AB4EF2U24AW' where id=83; -update noar tt set v3='8I2GEFBSHQW0QLRJULT7HRHVK0Y2R6ES2' where id=83; -update noar ti set v3='8I2GEFBSHQW0QLRJULT7HRHVK0Y2R6ES2' where id=83; -update noar tt set v0='G562B5W18EY13A325QPBQ8NCB86402DU3' where id=84; -update noar ti set v0='G562B5W18EY13A325QPBQ8NCB86402DU3' where id=84; -update noar tt set v1='GF9MO8PYMC5QQ4L43YSECUUUT86PT5YXG' where id=84; -update noar ti set v1='GF9MO8PYMC5QQ4L43YSECUUUT86PT5YXG' where id=84; -update noar tt set v2='3YBHFTJZX6XA4VDHC3ZSAUIUJY8XZCOCG' where id=84; -update noar ti set v2='3YBHFTJZX6XA4VDHC3ZSAUIUJY8XZCOCG' where id=84; -update noar tt set v3='DQPOWJCK6AXIIMMTOL3IKCWFLNLI1NCUY' where id=84; -update noar ti set v3='DQPOWJCK6AXIIMMTOL3IKCWFLNLI1NCUY' where id=84; -update noar tt set v0='0CCAKASQ5XAATMWANI4X4ZA0O2ANTH8GW' where id=85; -update noar ti set v0='0CCAKASQ5XAATMWANI4X4ZA0O2ANTH8GW' where id=85; -update noar tt set v1='03VKPN0A8P1FCWYRG60XGG4FCOFV7RV0K' where id=85; -update noar ti set v1='03VKPN0A8P1FCWYRG60XGG4FCOFV7RV0K' where id=85; -update noar tt set v2='VZNWPKE0C0NU97GVW871PDTKLEI0JK2C5' where id=85; -update noar ti set v2='VZNWPKE0C0NU97GVW871PDTKLEI0JK2C5' where id=85; -update noar tt set v3='3ROAED83IVX2TI5V9XQ8JJTC6PM2C0BKO' where id=85; -update noar ti set v3='3ROAED83IVX2TI5V9XQ8JJTC6PM2C0BKO' where id=85; -update noar tt set v0='HFP49S7VKG4MZOW206CCV65GYXA8RTBEU' where id=86; -update noar ti set v0='HFP49S7VKG4MZOW206CCV65GYXA8RTBEU' where id=86; -update noar tt set v1='ZGO9G3JQ62QX259SX49B4KCE5J0Z13KTQ' where id=86; -update noar ti set v1='ZGO9G3JQ62QX259SX49B4KCE5J0Z13KTQ' where id=86; -update noar tt set v2='MF6BS4LYEE77RVU0XZCXG8DLPP2SI2JN7' where id=86; -update noar ti set v2='MF6BS4LYEE77RVU0XZCXG8DLPP2SI2JN7' where id=86; -update noar tt set v3='DSMSM4C5TJ1SLWSUORHARNIPFJ1BTLSRB' where id=86; -update noar ti set v3='DSMSM4C5TJ1SLWSUORHARNIPFJ1BTLSRB' where id=86; -update noar tt set v0='12J0WFG2QMZI5B9AE73EFPST3YNHKJXXI' where id=87; -update noar ti set v0='12J0WFG2QMZI5B9AE73EFPST3YNHKJXXI' where id=87; -update noar tt set v1='SE17BN62U6TY2WZUL3GE5RMT3WDX077UT' where id=87; -update noar ti set v1='SE17BN62U6TY2WZUL3GE5RMT3WDX077UT' where id=87; -update noar tt set v2='TQ2BF114DVI2JRRQUX66BSNDHQ1KF6HVH' where id=87; -update noar ti set v2='TQ2BF114DVI2JRRQUX66BSNDHQ1KF6HVH' where id=87; -update noar tt set v3='FWOVRM7J7I4NIHXNM8MGO40TY0IYA35GJ' where id=87; -update noar ti set v3='FWOVRM7J7I4NIHXNM8MGO40TY0IYA35GJ' where id=87; -update noar tt set v0='OWCTJVROTLMNGUAEBNQWVJR5MJUNIX1H4' where id=88; -update noar ti set v0='OWCTJVROTLMNGUAEBNQWVJR5MJUNIX1H4' where id=88; -update noar tt set v1='CBE9DQ9177C8HEEMKX4UP1ADNNBCGJNWQ' where id=88; -update noar ti set v1='CBE9DQ9177C8HEEMKX4UP1ADNNBCGJNWQ' where id=88; -update noar tt set v2='Y0TFC8VCPYK33W7WMQ4MYYFTAEN4I3L2W' where id=88; -update noar ti set v2='Y0TFC8VCPYK33W7WMQ4MYYFTAEN4I3L2W' where id=88; -update noar tt set v3='471X5RZT3OQ7RI5DFWIW3CKAEMSZ8SZAC' where id=88; -update noar ti set v3='471X5RZT3OQ7RI5DFWIW3CKAEMSZ8SZAC' where id=88; -update noar tt set v0='YBVOTSDFGJEIW5HKIU3TC6QNDT6DVIXY9' where id=89; -update noar ti set v0='YBVOTSDFGJEIW5HKIU3TC6QNDT6DVIXY9' where id=89; -update noar tt set v1='M93848BGHLYG3MKIMBZOPCMXS0BVM54U4' where id=89; -update noar ti set v1='M93848BGHLYG3MKIMBZOPCMXS0BVM54U4' where id=89; -update noar tt set v2='SG5JALK95ZK2BM6BFAKXWK4ZTPN2TF13G' where id=89; -update noar ti set v2='SG5JALK95ZK2BM6BFAKXWK4ZTPN2TF13G' where id=89; -update noar tt set v3='WGFAAAPCAQUODIKZR4EYP37GH23UYZRM5' where id=89; -update noar ti set v3='WGFAAAPCAQUODIKZR4EYP37GH23UYZRM5' where id=89; -update noar tt set v0='4OQ0UW7A1DMJ6TF0PN5DCRYOQPZNEC6HW' where id=90; -update noar ti set v0='4OQ0UW7A1DMJ6TF0PN5DCRYOQPZNEC6HW' where id=90; -update noar tt set v1='KDWRZM4Q2XB467W1NE7MKTCYLDDSR7FPJ' where id=90; -update noar ti set v1='KDWRZM4Q2XB467W1NE7MKTCYLDDSR7FPJ' where id=90; -update noar tt set v2='90KUWNZ9LZ8IF2U5N75FS8F5CTHR88MOX' where id=90; -update noar ti set v2='90KUWNZ9LZ8IF2U5N75FS8F5CTHR88MOX' where id=90; -update noar tt set v3='A5VA60QNXIX9VTJAPI7F7KTMCIUWXNPM2' where id=90; -update noar ti set v3='A5VA60QNXIX9VTJAPI7F7KTMCIUWXNPM2' where id=90; -update noar tt set v0='4IUUBR2FWGA4M737O3ZHRVATI1L2JJIZ3' where id=91; -update noar ti set v0='4IUUBR2FWGA4M737O3ZHRVATI1L2JJIZ3' where id=91; -update noar tt set v1='3959L09WO5RWOG8U384R6I52P4RL7UXZ7' where id=91; -update noar ti set v1='3959L09WO5RWOG8U384R6I52P4RL7UXZ7' where id=91; -update noar tt set v2='SS541JIFI2E1SVQNZXDOC4EM1S5QWWH20' where id=91; -update noar ti set v2='SS541JIFI2E1SVQNZXDOC4EM1S5QWWH20' where id=91; -update noar tt set v3='M5UVDOOASTWWNVU3TZ6O2PZ43KBU02B90' where id=91; -update noar ti set v3='M5UVDOOASTWWNVU3TZ6O2PZ43KBU02B90' where id=91; -update noar tt set v0='VKATQCCEAT6BQWHEBG25UFI7KSMCZI6H2' where id=92; -update noar ti set v0='VKATQCCEAT6BQWHEBG25UFI7KSMCZI6H2' where id=92; -update noar tt set v1='7E6MDARNTLKDCM8RU5QQADD9TDIMKMEJ6' where id=92; -update noar ti set v1='7E6MDARNTLKDCM8RU5QQADD9TDIMKMEJ6' where id=92; -update noar tt set v2='53D30F1FZN1IZD1GU6KK62FLT99XASARB' where id=92; -update noar ti set v2='53D30F1FZN1IZD1GU6KK62FLT99XASARB' where id=92; -update noar tt set v3='OXT8TH15Y1DYBRZSRJNUC3I475NNEY18R' where id=92; -update noar ti set v3='OXT8TH15Y1DYBRZSRJNUC3I475NNEY18R' where id=92; -update noar tt set v0='60OLGDJNS27L2MT3E2095PN8I2211H2MH' where id=93; -update noar ti set v0='60OLGDJNS27L2MT3E2095PN8I2211H2MH' where id=93; -update noar tt set v1='5UR3YYZWWR3ND41MCLZ6F0DBBHEOOMTLF' where id=93; -update noar ti set v1='5UR3YYZWWR3ND41MCLZ6F0DBBHEOOMTLF' where id=93; -update noar tt set v2='3SQYLKIZQYJ0IY5M8ETNA2B7XOMDNCKKX' where id=93; -update noar ti set v2='3SQYLKIZQYJ0IY5M8ETNA2B7XOMDNCKKX' where id=93; -update noar tt set v3='6OTAKG45GOXEZ3MPS13A6SZX55YVATFTM' where id=93; -update noar ti set v3='6OTAKG45GOXEZ3MPS13A6SZX55YVATFTM' where id=93; -update noar tt set v0='5FVK04MKT5OB6H8TXDUANZEP2L7F4DNXZ' where id=94; -update noar ti set v0='5FVK04MKT5OB6H8TXDUANZEP2L7F4DNXZ' where id=94; -update noar tt set v1='05SWHSWJ2OBNGU0WEDA8H0K44GUR5M11Q' where id=94; -update noar ti set v1='05SWHSWJ2OBNGU0WEDA8H0K44GUR5M11Q' where id=94; -update noar tt set v2='SXGX92BX5DS2X2NRVYK35UUJMR87LUCGU' where id=94; -update noar ti set v2='SXGX92BX5DS2X2NRVYK35UUJMR87LUCGU' where id=94; -update noar tt set v3='HNAHFBZ9NRJSYM04MGJZK81BPZ5VU50SV' where id=94; -update noar ti set v3='HNAHFBZ9NRJSYM04MGJZK81BPZ5VU50SV' where id=94; -update noar tt set v0='TDSORSBT9LYYA30HGJKNBKBDBXMZGVFDJ' where id=95; -update noar ti set v0='TDSORSBT9LYYA30HGJKNBKBDBXMZGVFDJ' where id=95; -update noar tt set v1='RVWREG0I181IDF6K3BTFY09Y2J8XSSHX9' where id=95; -update noar ti set v1='RVWREG0I181IDF6K3BTFY09Y2J8XSSHX9' where id=95; -update noar tt set v2='LBF10KKVT07EB492RYU4ULNY50G4TGDX9' where id=95; -update noar ti set v2='LBF10KKVT07EB492RYU4ULNY50G4TGDX9' where id=95; -update noar tt set v3='WQAD9AFW7LH5MV11HRKO792E2MU6PJ8V5' where id=95; -update noar ti set v3='WQAD9AFW7LH5MV11HRKO792E2MU6PJ8V5' where id=95; -update noar tt set v0='3PYBHQSOSTJZGH9DTHZLK1I7VUS96C0BR' where id=96; -update noar ti set v0='3PYBHQSOSTJZGH9DTHZLK1I7VUS96C0BR' where id=96; -update noar tt set v1='3EARLA2YM5BKMVRH2VPMNHIBPIOEQY9DM' where id=96; -update noar ti set v1='3EARLA2YM5BKMVRH2VPMNHIBPIOEQY9DM' where id=96; -update noar tt set v2='L3R0TD206KTHNIM90Q7ASMEWZFGXG0GVN' where id=96; -update noar ti set v2='L3R0TD206KTHNIM90Q7ASMEWZFGXG0GVN' where id=96; -update noar tt set v3='7RE2E3LGRTOP4MTOUEMNXEWKZJIQQ1VL4' where id=96; -update noar ti set v3='7RE2E3LGRTOP4MTOUEMNXEWKZJIQQ1VL4' where id=96; -update noar tt set v0='K568I90I55F9K8BCA069APVII0RTL908C' where id=97; -update noar ti set v0='K568I90I55F9K8BCA069APVII0RTL908C' where id=97; -update noar tt set v1='RDTRDI2GG3FMAQGXLH3FTXQEP59TC0TT3' where id=97; -update noar ti set v1='RDTRDI2GG3FMAQGXLH3FTXQEP59TC0TT3' where id=97; -update noar tt set v2='BY7R7WR4LMU70ASFV6BXPY4M3ABDIRZ26' where id=97; -update noar ti set v2='BY7R7WR4LMU70ASFV6BXPY4M3ABDIRZ26' where id=97; -update noar tt set v3='ZCBP8EQUE8UCM9BW9RMJ4GJVRZFUFG47S' where id=97; -update noar ti set v3='ZCBP8EQUE8UCM9BW9RMJ4GJVRZFUFG47S' where id=97; -update noar tt set v0='SED9J1MSSDCVAXD59O79U5RWLUL97SNH5' where id=98; -update noar ti set v0='SED9J1MSSDCVAXD59O79U5RWLUL97SNH5' where id=98; -update noar tt set v1='J3IKNGK7VOKMBEJZVWG6U3VDH895L97MN' where id=98; -update noar ti set v1='J3IKNGK7VOKMBEJZVWG6U3VDH895L97MN' where id=98; -update noar tt set v2='J3YC5CQSSIQ39DJSPA8NWV7K26X3NAJFS' where id=98; -update noar ti set v2='J3YC5CQSSIQ39DJSPA8NWV7K26X3NAJFS' where id=98; -update noar tt set v3='78AU510THUYPI35U4R32XLPJRTTN27O0Z' where id=98; -update noar ti set v3='78AU510THUYPI35U4R32XLPJRTTN27O0Z' where id=98; -update noar tt set v0='6XHBZNO1XU18061ZF5U6UQ4MC0FS0I90U' where id=99; -update noar ti set v0='6XHBZNO1XU18061ZF5U6UQ4MC0FS0I90U' where id=99; -update noar tt set v1='MSZI7IF6MAJE3QS5NMZ41OXBJ07D9UJRN' where id=99; -update noar ti set v1='MSZI7IF6MAJE3QS5NMZ41OXBJ07D9UJRN' where id=99; -update noar tt set v2='ACZUSBYPBA6NM2PPVAF1ZWAH0897G5F6G' where id=99; -update noar ti set v2='ACZUSBYPBA6NM2PPVAF1ZWAH0897G5F6G' where id=99; -update noar tt set v3='RFWF0WUA0CBD62C3IVV9SI3SW5PU8NWC3' where id=99; -update noar ti set v3='RFWF0WUA0CBD62C3IVV9SI3SW5PU8NWC3' where id=99; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(32) not null, - v1 varchar(32) not null, - v2 varchar(32) not null, - v3 varchar(32) not null, - b0 text not null -) engine=tokudb; -insert into tt values (1,2,'a','b','c','d','e'); -insert into tt values (2,3,'','','','',''); -insert into tt values (3,4,'','','','',''); -insert into tt values (4,5,'','','','',''); -insert into tt values (5,6,'','','','',''); -insert into tt values (6,7,'','','','',''); -insert into tt values (7,8,'','','','',''); -insert into tt values (8,9,'','','','',''); -insert into tt values (9,10,'','','','',''); -insert into tt values (10,11,'','','','',''); -insert into tt values (11,12,'','','','',''); -insert into tt values (12,13,'','','','',''); -insert into tt values (13,14,'','','','',''); -insert into tt values (14,15,'','','','',''); -insert into tt values (15,16,'','','','',''); -insert into tt values (16,17,'','','','',''); -insert into tt values (17,18,'','','','',''); -insert into tt values (18,19,'','','','',''); -insert into tt values (19,20,'','','','',''); -insert into tt values (20,21,'','','','',''); -insert into tt values (21,22,'','','','',''); -insert into tt values (22,23,'','','','',''); -insert into tt values (23,24,'','','','',''); -insert into tt values (24,25,'','','','',''); -insert into tt values (25,26,'','','','',''); -insert into tt values (26,27,'','','','',''); -insert into tt values (27,28,'','','','',''); -insert into tt values (28,29,'','','','',''); -insert into tt values (29,30,'','','','',''); -insert into tt values (30,31,'','','','',''); -insert into tt values (31,32,'','','','',''); -insert into tt values (32,33,'','','','',''); -insert into tt values (33,34,'','','','',''); -insert into tt values (34,35,'','','','',''); -insert into tt values (35,36,'','','','',''); -insert into tt values (36,37,'','','','',''); -insert into tt values (37,38,'','','','',''); -insert into tt values (38,39,'','','','',''); -insert into tt values (39,40,'','','','',''); -insert into tt values (40,41,'','','','',''); -insert into tt values (41,42,'','','','',''); -insert into tt values (42,43,'','','','',''); -insert into tt values (43,44,'','','','',''); -insert into tt values (44,45,'','','','',''); -insert into tt values (45,46,'','','','',''); -insert into tt values (46,47,'','','','',''); -insert into tt values (47,48,'','','','',''); -insert into tt values (48,49,'','','','',''); -insert into tt values (49,50,'','','','',''); -insert into tt values (50,51,'','','','',''); -insert into tt values (51,52,'','','','',''); -insert into tt values (52,53,'','','','',''); -insert into tt values (53,54,'','','','',''); -insert into tt values (54,55,'','','','',''); -insert into tt values (55,56,'','','','',''); -insert into tt values (56,57,'','','','',''); -insert into tt values (57,58,'','','','',''); -insert into tt values (58,59,'','','','',''); -insert into tt values (59,60,'','','','',''); -insert into tt values (60,61,'','','','',''); -insert into tt values (61,62,'','','','',''); -insert into tt values (62,63,'','','','',''); -insert into tt values (63,64,'','','','',''); -insert into tt values (64,65,'','','','',''); -insert into tt values (65,66,'','','','',''); -insert into tt values (66,67,'','','','',''); -insert into tt values (67,68,'','','','',''); -insert into tt values (68,69,'','','','',''); -insert into tt values (69,70,'','','','',''); -insert into tt values (70,71,'','','','',''); -insert into tt values (71,72,'','','','',''); -insert into tt values (72,73,'','','','',''); -insert into tt values (73,74,'','','','',''); -insert into tt values (74,75,'','','','',''); -insert into tt values (75,76,'','','','',''); -insert into tt values (76,77,'','','','',''); -insert into tt values (77,78,'','','','',''); -insert into tt values (78,79,'','','','',''); -insert into tt values (79,80,'','','','',''); -insert into tt values (80,81,'','','','',''); -insert into tt values (81,82,'','','','',''); -insert into tt values (82,83,'','','','',''); -insert into tt values (83,84,'','','','',''); -insert into tt values (84,85,'','','','',''); -insert into tt values (85,86,'','','','',''); -insert into tt values (86,87,'','','','',''); -insert into tt values (87,88,'','','','',''); -insert into tt values (88,89,'','','','',''); -insert into tt values (89,90,'','','','',''); -insert into tt values (90,91,'','','','',''); -insert into tt values (91,92,'','','','',''); -insert into tt values (92,93,'','','','',''); -insert into tt values (93,94,'','','','',''); -insert into tt values (94,95,'','','','',''); -insert into tt values (95,96,'','','','',''); -insert into tt values (96,97,'','','','',''); -insert into tt values (97,98,'','','','',''); -insert into tt values (98,99,'','','','',''); -insert into tt values (99,100,'','','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='null this 0' where id=0; -update noar ti set v0='null this 0' where id=0; -update noar tt set v1='null is 1' where id=0; -update noar ti set v1='null is 1' where id=0; -update noar tt set v2='null a 2' where id=0; -update noar ti set v2='null a 2' where id=0; -update noar tt set v3='null test 3' where id=0; -update noar ti set v3='null test 3' where id=0; -update noar tt set v0='this 0' where id=1; -update noar ti set v0='this 0' where id=1; -update noar tt set v1='is 1' where id=1; -update noar ti set v1='is 1' where id=1; -update noar tt set v2='another 2' where id=1; -update noar ti set v2='another 2' where id=1; -update noar tt set v3='test 3' where id=1; -update noar ti set v3='test 3' where id=1; -update noar tt set v0='IC5XO2HY0SNAHR1O9UT9DAISFBFW9GTL9' where id=2; -update noar ti set v0='IC5XO2HY0SNAHR1O9UT9DAISFBFW9GTL9' where id=2; -update noar tt set v1='Q0PDDCYZMRX73GMZNM7JWE1A0UGF7B31B' where id=2; -update noar ti set v1='Q0PDDCYZMRX73GMZNM7JWE1A0UGF7B31B' where id=2; -update noar tt set v2='ZOTP4VITR9E1QSA3OXLGF83HPLVW5KJM0' where id=2; -update noar ti set v2='ZOTP4VITR9E1QSA3OXLGF83HPLVW5KJM0' where id=2; -update noar tt set v3='AWXKUXS098Z5LMTQXXIN55OMZZ63CYGMP' where id=2; -update noar ti set v3='AWXKUXS098Z5LMTQXXIN55OMZZ63CYGMP' where id=2; -update noar tt set v0='4FSEIEP6GOUA7GQ8FGJ4FBRGH4BT4BTJC' where id=3; -update noar ti set v0='4FSEIEP6GOUA7GQ8FGJ4FBRGH4BT4BTJC' where id=3; -update noar tt set v1='2RSDZ9QLEIWX7P7QA25ZNSINU5V1EK85T' where id=3; -update noar ti set v1='2RSDZ9QLEIWX7P7QA25ZNSINU5V1EK85T' where id=3; -update noar tt set v2='8V8QR8UT1C81UA151W3Q92C0XKHX402RF' where id=3; -update noar ti set v2='8V8QR8UT1C81UA151W3Q92C0XKHX402RF' where id=3; -update noar tt set v3='A4Q3XWFULLJ1AVQJUCSXWO66SYH9G5DU0' where id=3; -update noar ti set v3='A4Q3XWFULLJ1AVQJUCSXWO66SYH9G5DU0' where id=3; -update noar tt set v0='NHCZBZQKG5I0X2WJVRJ4SSYQN2RYCYMCH' where id=4; -update noar ti set v0='NHCZBZQKG5I0X2WJVRJ4SSYQN2RYCYMCH' where id=4; -update noar tt set v1='N6DQGNNR1IJM8T9E3OXR8J981D02Z7NBA' where id=4; -update noar ti set v1='N6DQGNNR1IJM8T9E3OXR8J981D02Z7NBA' where id=4; -update noar tt set v2='DMAB0DQA1KA5PMA4EGOX8TEFKHV3D9IZK' where id=4; -update noar ti set v2='DMAB0DQA1KA5PMA4EGOX8TEFKHV3D9IZK' where id=4; -update noar tt set v3='DWEEZJCE69GD1YUVLMWFFB459SEGR5XPG' where id=4; -update noar ti set v3='DWEEZJCE69GD1YUVLMWFFB459SEGR5XPG' where id=4; -update noar tt set v0='POLT15DV510BZFUP1NR6RFWEPD0PXET9J' where id=5; -update noar ti set v0='POLT15DV510BZFUP1NR6RFWEPD0PXET9J' where id=5; -update noar tt set v1='5TALX42LEWH68AKJV33EJCEZF4W3LBFG5' where id=5; -update noar ti set v1='5TALX42LEWH68AKJV33EJCEZF4W3LBFG5' where id=5; -update noar tt set v2='ZZM5S7W6OHF5SZ5WFU9RKWUM9YBYZFIB8' where id=5; -update noar ti set v2='ZZM5S7W6OHF5SZ5WFU9RKWUM9YBYZFIB8' where id=5; -update noar tt set v3='4JZFKJR24A5SGQDMAXH3RSXOJ3SVWLZ0M' where id=5; -update noar ti set v3='4JZFKJR24A5SGQDMAXH3RSXOJ3SVWLZ0M' where id=5; -update noar tt set v0='USNXDKICO9BMNWKR24S48RVS8K7S8SKK9' where id=6; -update noar ti set v0='USNXDKICO9BMNWKR24S48RVS8K7S8SKK9' where id=6; -update noar tt set v1='67EEX1BOWG7H82527UDYZ0VJDQHOW029V' where id=6; -update noar ti set v1='67EEX1BOWG7H82527UDYZ0VJDQHOW029V' where id=6; -update noar tt set v2='UWFTI4U2BQ4OIWGZDMCVW7XE1XN20EO8P' where id=6; -update noar ti set v2='UWFTI4U2BQ4OIWGZDMCVW7XE1XN20EO8P' where id=6; -update noar tt set v3='9UXD7FNN7U6N0BM4QAUQCMW1CHTNEBYB0' where id=6; -update noar ti set v3='9UXD7FNN7U6N0BM4QAUQCMW1CHTNEBYB0' where id=6; -update noar tt set v0='0OBEZ3NAQYDQS7QD1KTR9VZSHP6M8CXI7' where id=7; -update noar ti set v0='0OBEZ3NAQYDQS7QD1KTR9VZSHP6M8CXI7' where id=7; -update noar tt set v1='0MRH2NPTSNSRAU8VKXW39HF2HS6T4RC0I' where id=7; -update noar ti set v1='0MRH2NPTSNSRAU8VKXW39HF2HS6T4RC0I' where id=7; -update noar tt set v2='NK9M6P6IOVZGA5HI4MHWY4AYK5I2RUASJ' where id=7; -update noar ti set v2='NK9M6P6IOVZGA5HI4MHWY4AYK5I2RUASJ' where id=7; -update noar tt set v3='ON8SN347RNPG97ODV5EI0J603UFI76718' where id=7; -update noar ti set v3='ON8SN347RNPG97ODV5EI0J603UFI76718' where id=7; -update noar tt set v0='N46Q5EM8SE02AHFIX0Z3VYT50MDUJVF26' where id=8; -update noar ti set v0='N46Q5EM8SE02AHFIX0Z3VYT50MDUJVF26' where id=8; -update noar tt set v1='OVYOQYYDBL5VW9P1O178P84WV6BT61ZFB' where id=8; -update noar ti set v1='OVYOQYYDBL5VW9P1O178P84WV6BT61ZFB' where id=8; -update noar tt set v2='WO40KLPQ3NUW7W41UO8AU649BLKPRRO8N' where id=8; -update noar ti set v2='WO40KLPQ3NUW7W41UO8AU649BLKPRRO8N' where id=8; -update noar tt set v3='E484JGWQJ29GHH2JVWXTQWGMA4CN2EV24' where id=8; -update noar ti set v3='E484JGWQJ29GHH2JVWXTQWGMA4CN2EV24' where id=8; -update noar tt set v0='MXXSJ5F5LL5N69CMDGWZRD5AK7IL9KCB1' where id=9; -update noar ti set v0='MXXSJ5F5LL5N69CMDGWZRD5AK7IL9KCB1' where id=9; -update noar tt set v1='73R73QXHPLHVQPCOU45H5BQRDQ0Z1NMOM' where id=9; -update noar ti set v1='73R73QXHPLHVQPCOU45H5BQRDQ0Z1NMOM' where id=9; -update noar tt set v2='97YU1WRG43ZR6ZIZ96WB4PLAMLPGKKAJX' where id=9; -update noar ti set v2='97YU1WRG43ZR6ZIZ96WB4PLAMLPGKKAJX' where id=9; -update noar tt set v3='PEE7XA7EHIDF51GC1ZYFNZBHKJ89ZKMLH' where id=9; -update noar ti set v3='PEE7XA7EHIDF51GC1ZYFNZBHKJ89ZKMLH' where id=9; -update noar tt set v0='S2B68U5VZ8OVWV8Q3J37HV58OE6GOXW0A' where id=10; -update noar ti set v0='S2B68U5VZ8OVWV8Q3J37HV58OE6GOXW0A' where id=10; -update noar tt set v1='GP3Y0W0P4BS0EZ7H6FE16FOKX3DJWRMLY' where id=10; -update noar ti set v1='GP3Y0W0P4BS0EZ7H6FE16FOKX3DJWRMLY' where id=10; -update noar tt set v2='3JV9560T6SJ4LJ0SFJKLLGGRFID1MNTKK' where id=10; -update noar ti set v2='3JV9560T6SJ4LJ0SFJKLLGGRFID1MNTKK' where id=10; -update noar tt set v3='9EV800RY0AITX5QFRU6ZNY17UUK73N2SC' where id=10; -update noar ti set v3='9EV800RY0AITX5QFRU6ZNY17UUK73N2SC' where id=10; -update noar tt set v0='EYBDRKCTPFMGCDZVO2YS3IY5EIY9BG42B' where id=11; -update noar ti set v0='EYBDRKCTPFMGCDZVO2YS3IY5EIY9BG42B' where id=11; -update noar tt set v1='DV27FZMQFUD649W2J8E1DW4NFEK6SROD6' where id=11; -update noar ti set v1='DV27FZMQFUD649W2J8E1DW4NFEK6SROD6' where id=11; -update noar tt set v2='PPZP92XQXICUBXKELDGCQ876W2RFSQVT5' where id=11; -update noar ti set v2='PPZP92XQXICUBXKELDGCQ876W2RFSQVT5' where id=11; -update noar tt set v3='UWCL4J2FBX582CUS2I55SVQJ58IBCJ86R' where id=11; -update noar ti set v3='UWCL4J2FBX582CUS2I55SVQJ58IBCJ86R' where id=11; -update noar tt set v0='1WXM0LVSZME86D22IW98WJUUECSDROVOM' where id=12; -update noar ti set v0='1WXM0LVSZME86D22IW98WJUUECSDROVOM' where id=12; -update noar tt set v1='VLI1TPGF2NESX1HQMOADI8VGRZ48J4K4C' where id=12; -update noar ti set v1='VLI1TPGF2NESX1HQMOADI8VGRZ48J4K4C' where id=12; -update noar tt set v2='6Q7LNCN40HHPCVVHZGSD5NXJBMW02M24A' where id=12; -update noar ti set v2='6Q7LNCN40HHPCVVHZGSD5NXJBMW02M24A' where id=12; -update noar tt set v3='PFE8GLBMI79N2W13J05171NKI7Q00Y9LT' where id=12; -update noar ti set v3='PFE8GLBMI79N2W13J05171NKI7Q00Y9LT' where id=12; -update noar tt set v0='N2XJE761M372KF2RR9Z2P1UTC366LCJ3J' where id=13; -update noar ti set v0='N2XJE761M372KF2RR9Z2P1UTC366LCJ3J' where id=13; -update noar tt set v1='GN6E0I6YTSI26BO48J0CK23DTD2B17SUQ' where id=13; -update noar ti set v1='GN6E0I6YTSI26BO48J0CK23DTD2B17SUQ' where id=13; -update noar tt set v2='ARPFNK3XAK3RVXRYX89G9Y4HJ2RXRB5H4' where id=13; -update noar ti set v2='ARPFNK3XAK3RVXRYX89G9Y4HJ2RXRB5H4' where id=13; -update noar tt set v3='NBBHLV3YQB5D5ZJYOGOC0H8K5XESK5XF2' where id=13; -update noar ti set v3='NBBHLV3YQB5D5ZJYOGOC0H8K5XESK5XF2' where id=13; -update noar tt set v0='RH3FVYGUKGXSSCHZPZRBR71SF4MQSPBLP' where id=14; -update noar ti set v0='RH3FVYGUKGXSSCHZPZRBR71SF4MQSPBLP' where id=14; -update noar tt set v1='8BZQD8O0S0X3CTIXK4B1R3QAWNUJZWL8E' where id=14; -update noar ti set v1='8BZQD8O0S0X3CTIXK4B1R3QAWNUJZWL8E' where id=14; -update noar tt set v2='TO8OJNYUK4UDMBJ217893S818K3VXRP76' where id=14; -update noar ti set v2='TO8OJNYUK4UDMBJ217893S818K3VXRP76' where id=14; -update noar tt set v3='AIP2RSZ7BM6J8W6HOBTWGKN4UXAUFVHDO' where id=14; -update noar ti set v3='AIP2RSZ7BM6J8W6HOBTWGKN4UXAUFVHDO' where id=14; -update noar tt set v0='DDR470GJVTIJXBMKR1UYTPWE98RA8X99X' where id=15; -update noar ti set v0='DDR470GJVTIJXBMKR1UYTPWE98RA8X99X' where id=15; -update noar tt set v1='GPSAJ70ZQDYTMUBZ85HHREVYSYFUYBUBB' where id=15; -update noar ti set v1='GPSAJ70ZQDYTMUBZ85HHREVYSYFUYBUBB' where id=15; -update noar tt set v2='V617AYHE1PSVO3SB6SINQJ8JWEZV14MBE' where id=15; -update noar ti set v2='V617AYHE1PSVO3SB6SINQJ8JWEZV14MBE' where id=15; -update noar tt set v3='I1WMQKDSS40M8Y59YDCYF80FZ3AUUZIXP' where id=15; -update noar ti set v3='I1WMQKDSS40M8Y59YDCYF80FZ3AUUZIXP' where id=15; -update noar tt set v0='MG4LKIVDTV26501IOAWX2LPOWWYXUM3BA' where id=16; -update noar ti set v0='MG4LKIVDTV26501IOAWX2LPOWWYXUM3BA' where id=16; -update noar tt set v1='GC4XSGQ7R9YRGWW05LDJZDFJ00D2Z5ANZ' where id=16; -update noar ti set v1='GC4XSGQ7R9YRGWW05LDJZDFJ00D2Z5ANZ' where id=16; -update noar tt set v2='OPFIIFO3L4492C6BPB8BKGQXZBILAO3ER' where id=16; -update noar ti set v2='OPFIIFO3L4492C6BPB8BKGQXZBILAO3ER' where id=16; -update noar tt set v3='97AOS93FGU3NRP8GQDBDX8TGK4F8YB6NG' where id=16; -update noar ti set v3='97AOS93FGU3NRP8GQDBDX8TGK4F8YB6NG' where id=16; -update noar tt set v0='WXNFNF2VBEFQMR1UZG9QPI06BJVIPLOZN' where id=17; -update noar ti set v0='WXNFNF2VBEFQMR1UZG9QPI06BJVIPLOZN' where id=17; -update noar tt set v1='2L1O8ETO2PJB0YZMIQUGA1PFXFRKS95O7' where id=17; -update noar ti set v1='2L1O8ETO2PJB0YZMIQUGA1PFXFRKS95O7' where id=17; -update noar tt set v2='S9ECH1HUYNSFSL30V8W5D4OE26HLNUFAQ' where id=17; -update noar ti set v2='S9ECH1HUYNSFSL30V8W5D4OE26HLNUFAQ' where id=17; -update noar tt set v3='DZANTZKACCGAASTTXK0FJIVHXOWH4AGNB' where id=17; -update noar ti set v3='DZANTZKACCGAASTTXK0FJIVHXOWH4AGNB' where id=17; -update noar tt set v0='IEG3RW11RLW5TGA4YFW9ZK8T4RTA9CVME' where id=18; -update noar ti set v0='IEG3RW11RLW5TGA4YFW9ZK8T4RTA9CVME' where id=18; -update noar tt set v1='R9EU9GRHHQG3P47YCRXN55RMM5V90T2ZY' where id=18; -update noar ti set v1='R9EU9GRHHQG3P47YCRXN55RMM5V90T2ZY' where id=18; -update noar tt set v2='EKILZ01W3LBC1NUWRRMSBKP1BD17IVDC9' where id=18; -update noar ti set v2='EKILZ01W3LBC1NUWRRMSBKP1BD17IVDC9' where id=18; -update noar tt set v3='GFDKSWC5YC4SOGIS640IPXBP9MYDIMWHE' where id=18; -update noar ti set v3='GFDKSWC5YC4SOGIS640IPXBP9MYDIMWHE' where id=18; -update noar tt set v0='W77FM5AWKG4DF3T8FPTP38NLUZWREVXYE' where id=19; -update noar ti set v0='W77FM5AWKG4DF3T8FPTP38NLUZWREVXYE' where id=19; -update noar tt set v1='I9JYBB78EUW30IUQXIXKNPV9PPNO57ZXD' where id=19; -update noar ti set v1='I9JYBB78EUW30IUQXIXKNPV9PPNO57ZXD' where id=19; -update noar tt set v2='7VL9TOKT6HAR9687A61PGBLIMWTA6DFIW' where id=19; -update noar ti set v2='7VL9TOKT6HAR9687A61PGBLIMWTA6DFIW' where id=19; -update noar tt set v3='0JF5PXKJLKAMGA7E9X8EWSXNWK2MUPVUT' where id=19; -update noar ti set v3='0JF5PXKJLKAMGA7E9X8EWSXNWK2MUPVUT' where id=19; -update noar tt set v0='HEFACTG7YYF1Z1JGMXV669FGJF0I2P0BF' where id=20; -update noar ti set v0='HEFACTG7YYF1Z1JGMXV669FGJF0I2P0BF' where id=20; -update noar tt set v1='OO7UJU0KTNQNNUQM4BPHXJUJNAKKSBS2T' where id=20; -update noar ti set v1='OO7UJU0KTNQNNUQM4BPHXJUJNAKKSBS2T' where id=20; -update noar tt set v2='4NQF6FLJH4YMYLRA1HY3HMC52USSIVTY7' where id=20; -update noar ti set v2='4NQF6FLJH4YMYLRA1HY3HMC52USSIVTY7' where id=20; -update noar tt set v3='DWQVRTFYPOB8ZTPBEKQ8J3YR130VZ2ZLW' where id=20; -update noar ti set v3='DWQVRTFYPOB8ZTPBEKQ8J3YR130VZ2ZLW' where id=20; -update noar tt set v0='5W456K1N1MDUTNUXVYGTMOSM7F4OM4OMS' where id=21; -update noar ti set v0='5W456K1N1MDUTNUXVYGTMOSM7F4OM4OMS' where id=21; -update noar tt set v1='47T3ULSER9YHQR18PVVBGQ9UEJV5CK47V' where id=21; -update noar ti set v1='47T3ULSER9YHQR18PVVBGQ9UEJV5CK47V' where id=21; -update noar tt set v2='MHF1OT9LL8DYO4MIH4TET9JZVUSSYOV34' where id=21; -update noar ti set v2='MHF1OT9LL8DYO4MIH4TET9JZVUSSYOV34' where id=21; -update noar tt set v3='MI47BUFMW8RE0UUK84CNU0ST2NBSMYNU8' where id=21; -update noar ti set v3='MI47BUFMW8RE0UUK84CNU0ST2NBSMYNU8' where id=21; -update noar tt set v0='CK794DCXV3DJ807LN5MRA69RDSEGISSWH' where id=22; -update noar ti set v0='CK794DCXV3DJ807LN5MRA69RDSEGISSWH' where id=22; -update noar tt set v1='S14ZD8B01EAB5PHS6LV3DIPXD6RFLPAHO' where id=22; -update noar ti set v1='S14ZD8B01EAB5PHS6LV3DIPXD6RFLPAHO' where id=22; -update noar tt set v2='LHDMH1H8G4S1WW2HSOD1JFGDV8KFBPYE0' where id=22; -update noar ti set v2='LHDMH1H8G4S1WW2HSOD1JFGDV8KFBPYE0' where id=22; -update noar tt set v3='PGXO0ZDSYAIJMKHNX7O1O30HID1JSTIZ7' where id=22; -update noar ti set v3='PGXO0ZDSYAIJMKHNX7O1O30HID1JSTIZ7' where id=22; -update noar tt set v0='WVLICYCYR4S9ZULQ83EENNL4YGWC73HYF' where id=23; -update noar ti set v0='WVLICYCYR4S9ZULQ83EENNL4YGWC73HYF' where id=23; -update noar tt set v1='CB70NXN6B2QHKYOWDXJ2U5LL0UD1WWVNZ' where id=23; -update noar ti set v1='CB70NXN6B2QHKYOWDXJ2U5LL0UD1WWVNZ' where id=23; -update noar tt set v2='HPKTN3F4P62UENMPQDUMS9C2TMW2Y0AV2' where id=23; -update noar ti set v2='HPKTN3F4P62UENMPQDUMS9C2TMW2Y0AV2' where id=23; -update noar tt set v3='036NGPDY8WTTM5M35C2PSWAK1XL2J4O7V' where id=23; -update noar ti set v3='036NGPDY8WTTM5M35C2PSWAK1XL2J4O7V' where id=23; -update noar tt set v0='CFSKBV9QMMYMH5D1MI3BKXUYVDDGLG98E' where id=24; -update noar ti set v0='CFSKBV9QMMYMH5D1MI3BKXUYVDDGLG98E' where id=24; -update noar tt set v1='4CCX1OCX0CE3T8XZ96HA6VX6FGKPGPY96' where id=24; -update noar ti set v1='4CCX1OCX0CE3T8XZ96HA6VX6FGKPGPY96' where id=24; -update noar tt set v2='SIYRIZQX5AXVNRMVX5F0W3L6832E0K6H4' where id=24; -update noar ti set v2='SIYRIZQX5AXVNRMVX5F0W3L6832E0K6H4' where id=24; -update noar tt set v3='FX62E6T8XI4GDS00N6L79TXAY0F2BCF4S' where id=24; -update noar ti set v3='FX62E6T8XI4GDS00N6L79TXAY0F2BCF4S' where id=24; -update noar tt set v0='ST5L6MEOLSDA060YFHTP47S0I87QQB6L3' where id=25; -update noar ti set v0='ST5L6MEOLSDA060YFHTP47S0I87QQB6L3' where id=25; -update noar tt set v1='A091Z1Q9QJL4E5D2FLS27MYW8UUABCLF9' where id=25; -update noar ti set v1='A091Z1Q9QJL4E5D2FLS27MYW8UUABCLF9' where id=25; -update noar tt set v2='HYBQ7XV6HV0HYI3QCZYT4CUX38ZCN8S70' where id=25; -update noar ti set v2='HYBQ7XV6HV0HYI3QCZYT4CUX38ZCN8S70' where id=25; -update noar tt set v3='JNOLKOLVV4R72PCMLORCWWU7M1BG7BIZR' where id=25; -update noar ti set v3='JNOLKOLVV4R72PCMLORCWWU7M1BG7BIZR' where id=25; -update noar tt set v0='MD4DSLDI07LPA90H1XQNSV3TGM9LBXPWJ' where id=26; -update noar ti set v0='MD4DSLDI07LPA90H1XQNSV3TGM9LBXPWJ' where id=26; -update noar tt set v1='J3LCONXH4O9HQLI7DWYAAZ9GOGMZIO3P5' where id=26; -update noar ti set v1='J3LCONXH4O9HQLI7DWYAAZ9GOGMZIO3P5' where id=26; -update noar tt set v2='155FN4UEQD5QXM0ZWDHCVYWO1L4T7LYBE' where id=26; -update noar ti set v2='155FN4UEQD5QXM0ZWDHCVYWO1L4T7LYBE' where id=26; -update noar tt set v3='DJJ2DRL31ZAEFNQ1Q4MYUORS9X3OVLO2X' where id=26; -update noar ti set v3='DJJ2DRL31ZAEFNQ1Q4MYUORS9X3OVLO2X' where id=26; -update noar tt set v0='ESDC76FIG5DPRG0IJ97PGKB6K87U9WIWK' where id=27; -update noar ti set v0='ESDC76FIG5DPRG0IJ97PGKB6K87U9WIWK' where id=27; -update noar tt set v1='ELWR3BV7Y78Y61B2HVHPFO1K56H0RW866' where id=27; -update noar ti set v1='ELWR3BV7Y78Y61B2HVHPFO1K56H0RW866' where id=27; -update noar tt set v2='2ZJQRVPGMU71SAKDCOCU405S8QHI21O8T' where id=27; -update noar ti set v2='2ZJQRVPGMU71SAKDCOCU405S8QHI21O8T' where id=27; -update noar tt set v3='GKX9LBORKVFG9BL7IIKGPH4GOWZFXXCLE' where id=27; -update noar ti set v3='GKX9LBORKVFG9BL7IIKGPH4GOWZFXXCLE' where id=27; -update noar tt set v0='NX882U918NUAYDJRLLQF4WDCWPSEI23XK' where id=28; -update noar ti set v0='NX882U918NUAYDJRLLQF4WDCWPSEI23XK' where id=28; -update noar tt set v1='55IH4Q3ZA6SGR0UMVZITJHXN4N3BW92W0' where id=28; -update noar ti set v1='55IH4Q3ZA6SGR0UMVZITJHXN4N3BW92W0' where id=28; -update noar tt set v2='PBKRHDGVRKON2Z8JO7DD4C81BNG569KQ4' where id=28; -update noar ti set v2='PBKRHDGVRKON2Z8JO7DD4C81BNG569KQ4' where id=28; -update noar tt set v3='A1Y2OLPE36VRI9U678V7OCCSV75IEPQFL' where id=28; -update noar ti set v3='A1Y2OLPE36VRI9U678V7OCCSV75IEPQFL' where id=28; -update noar tt set v0='RGU4YM87704N645N1I0ME54LNJ9XOVS3X' where id=29; -update noar ti set v0='RGU4YM87704N645N1I0ME54LNJ9XOVS3X' where id=29; -update noar tt set v1='HNA2T6A8VWXR6WRJ9MY6YLSCVAQQXY3M7' where id=29; -update noar ti set v1='HNA2T6A8VWXR6WRJ9MY6YLSCVAQQXY3M7' where id=29; -update noar tt set v2='9ZES4AMD4RX4ZR6QR7OFG0BSGHMBH8883' where id=29; -update noar ti set v2='9ZES4AMD4RX4ZR6QR7OFG0BSGHMBH8883' where id=29; -update noar tt set v3='AEG2C7QKLAN9V1FGFXBDK3VHHQG20NOWJ' where id=29; -update noar ti set v3='AEG2C7QKLAN9V1FGFXBDK3VHHQG20NOWJ' where id=29; -update noar tt set v0='N1WGIZC6RP2DPM8HU5VCZD56JVGSCT4X1' where id=30; -update noar ti set v0='N1WGIZC6RP2DPM8HU5VCZD56JVGSCT4X1' where id=30; -update noar tt set v1='9RHMWTVFDF6NN44UTAQETOOOUAQ7LN65Q' where id=30; -update noar ti set v1='9RHMWTVFDF6NN44UTAQETOOOUAQ7LN65Q' where id=30; -update noar tt set v2='1C5XLYIPYJVT2K0GJH8I3GHWAKHURD193' where id=30; -update noar ti set v2='1C5XLYIPYJVT2K0GJH8I3GHWAKHURD193' where id=30; -update noar tt set v3='73YSFPFLAMB492LE0G12WGKWYILPZA9BS' where id=30; -update noar ti set v3='73YSFPFLAMB492LE0G12WGKWYILPZA9BS' where id=30; -update noar tt set v0='SXB26E99E82FGNP6Y7EIDN3PIDXEMQSLO' where id=31; -update noar ti set v0='SXB26E99E82FGNP6Y7EIDN3PIDXEMQSLO' where id=31; -update noar tt set v1='UR9A8MO1JR4HRQC3ILU47FI2RBGHSHJSA' where id=31; -update noar ti set v1='UR9A8MO1JR4HRQC3ILU47FI2RBGHSHJSA' where id=31; -update noar tt set v2='H6QL8DDX982E9ITL50L00XYTBGM0A77JC' where id=31; -update noar ti set v2='H6QL8DDX982E9ITL50L00XYTBGM0A77JC' where id=31; -update noar tt set v3='4GNP22WVLSQ4XWGZ5C9WEJ6XQ17O7FVFB' where id=31; -update noar ti set v3='4GNP22WVLSQ4XWGZ5C9WEJ6XQ17O7FVFB' where id=31; -update noar tt set v0='DRK4DE6NEW3L64L9IPJFWPMYS1UK4OTZW' where id=32; -update noar ti set v0='DRK4DE6NEW3L64L9IPJFWPMYS1UK4OTZW' where id=32; -update noar tt set v1='4390UJUYHQ3L8ZF61IQCJQCMD9749L5JI' where id=32; -update noar ti set v1='4390UJUYHQ3L8ZF61IQCJQCMD9749L5JI' where id=32; -update noar tt set v2='KZHVCPKBY0VKE4VL64LHEDUU6HZ7ZMQVT' where id=32; -update noar ti set v2='KZHVCPKBY0VKE4VL64LHEDUU6HZ7ZMQVT' where id=32; -update noar tt set v3='2RBUEST1JBBCSGRRA747QGH0SEWEYMT0U' where id=32; -update noar ti set v3='2RBUEST1JBBCSGRRA747QGH0SEWEYMT0U' where id=32; -update noar tt set v0='7RCZP79131SPLJCZWTELLCSM2D06HH4HS' where id=33; -update noar ti set v0='7RCZP79131SPLJCZWTELLCSM2D06HH4HS' where id=33; -update noar tt set v1='B6CK2P0D4Q356BAC43DWHSK5OJ8Y3HQZN' where id=33; -update noar ti set v1='B6CK2P0D4Q356BAC43DWHSK5OJ8Y3HQZN' where id=33; -update noar tt set v2='2F6RG5KMIUP336XER6IDE2AWEZ1FNH1T6' where id=33; -update noar ti set v2='2F6RG5KMIUP336XER6IDE2AWEZ1FNH1T6' where id=33; -update noar tt set v3='KRPW7E7Z1C7SZP1UN9IFVXFBKHF85YK53' where id=33; -update noar ti set v3='KRPW7E7Z1C7SZP1UN9IFVXFBKHF85YK53' where id=33; -update noar tt set v0='QNUNJBUZ1FK4MCZ23HHGAXOSEAXT0KR9W' where id=34; -update noar ti set v0='QNUNJBUZ1FK4MCZ23HHGAXOSEAXT0KR9W' where id=34; -update noar tt set v1='UY513WZ30POA6498F5LN1SF72OP5QFUUL' where id=34; -update noar ti set v1='UY513WZ30POA6498F5LN1SF72OP5QFUUL' where id=34; -update noar tt set v2='DKEFMEFDK98VY4S4RO0N5LNFWRN9FSZUV' where id=34; -update noar ti set v2='DKEFMEFDK98VY4S4RO0N5LNFWRN9FSZUV' where id=34; -update noar tt set v3='1JIMNYCI3DIYDUNAE3PGYRYDUNCKVPTBT' where id=34; -update noar ti set v3='1JIMNYCI3DIYDUNAE3PGYRYDUNCKVPTBT' where id=34; -update noar tt set v0='9ZR89KBUA2FOKG6TS070CCPVFTZIJN1I0' where id=35; -update noar ti set v0='9ZR89KBUA2FOKG6TS070CCPVFTZIJN1I0' where id=35; -update noar tt set v1='7D59AS2WW3XDXFGT47GIP697J8TVA743S' where id=35; -update noar ti set v1='7D59AS2WW3XDXFGT47GIP697J8TVA743S' where id=35; -update noar tt set v2='OQXN5LBC4DV58KNIVU921B8WSAOW451GI' where id=35; -update noar ti set v2='OQXN5LBC4DV58KNIVU921B8WSAOW451GI' where id=35; -update noar tt set v3='WGNH9I1TF7KKJ9O82PVHVAC5M98BQI8OG' where id=35; -update noar ti set v3='WGNH9I1TF7KKJ9O82PVHVAC5M98BQI8OG' where id=35; -update noar tt set v0='V2K6M004XBVTSTHX9C0GXFNY90FP3AF4W' where id=36; -update noar ti set v0='V2K6M004XBVTSTHX9C0GXFNY90FP3AF4W' where id=36; -update noar tt set v1='AHS1XOZXG81WIDW5D6ZZRML5Y1DLMYH2A' where id=36; -update noar ti set v1='AHS1XOZXG81WIDW5D6ZZRML5Y1DLMYH2A' where id=36; -update noar tt set v2='RYNTCSYP7WAYT02H9OMJ5JBOBETQEKVOK' where id=36; -update noar ti set v2='RYNTCSYP7WAYT02H9OMJ5JBOBETQEKVOK' where id=36; -update noar tt set v3='ZPZCJZQN6PMG5ZS5QN69OBVMTLFXRR8ZL' where id=36; -update noar ti set v3='ZPZCJZQN6PMG5ZS5QN69OBVMTLFXRR8ZL' where id=36; -update noar tt set v0='8IVANXGSTLQ3YTV1GIRDUR5HOVS1SEX9O' where id=37; -update noar ti set v0='8IVANXGSTLQ3YTV1GIRDUR5HOVS1SEX9O' where id=37; -update noar tt set v1='ONT0M1R9TLBHE6PAZ6FQQG5C32PS3T51G' where id=37; -update noar ti set v1='ONT0M1R9TLBHE6PAZ6FQQG5C32PS3T51G' where id=37; -update noar tt set v2='HT3WH7N2MAX6Q7TE3FGB42LFRYFQBGSAC' where id=37; -update noar ti set v2='HT3WH7N2MAX6Q7TE3FGB42LFRYFQBGSAC' where id=37; -update noar tt set v3='C8UIWZCW2LUS4S2TXLLDAE1N46OQZLETC' where id=37; -update noar ti set v3='C8UIWZCW2LUS4S2TXLLDAE1N46OQZLETC' where id=37; -update noar tt set v0='HSJ4DRGWMSRJ9ELKF8MTEO0JUOCTJFXJY' where id=38; -update noar ti set v0='HSJ4DRGWMSRJ9ELKF8MTEO0JUOCTJFXJY' where id=38; -update noar tt set v1='2T5AKG48718GP6082Y6DJLOPJ50QES0PN' where id=38; -update noar ti set v1='2T5AKG48718GP6082Y6DJLOPJ50QES0PN' where id=38; -update noar tt set v2='VAVBE7XGCPILUWCU6S5B2K0MEUHJTKEWO' where id=38; -update noar ti set v2='VAVBE7XGCPILUWCU6S5B2K0MEUHJTKEWO' where id=38; -update noar tt set v3='ZTJ0R4TK4L95TVAQXAPMR78PXDFMEB07E' where id=38; -update noar ti set v3='ZTJ0R4TK4L95TVAQXAPMR78PXDFMEB07E' where id=38; -update noar tt set v0='WGTN6HRVCAFU7WME0EQJE4RDX9TG8MI2N' where id=39; -update noar ti set v0='WGTN6HRVCAFU7WME0EQJE4RDX9TG8MI2N' where id=39; -update noar tt set v1='4GMDL9HSBRIJC9N73NSN4NHKMIKOPGFI1' where id=39; -update noar ti set v1='4GMDL9HSBRIJC9N73NSN4NHKMIKOPGFI1' where id=39; -update noar tt set v2='NAY0H6O3OZWM38GYA56N55SCWFC4VW4HG' where id=39; -update noar ti set v2='NAY0H6O3OZWM38GYA56N55SCWFC4VW4HG' where id=39; -update noar tt set v3='EAS4VE6TVICZN935H74PV87TSH89BZXCE' where id=39; -update noar ti set v3='EAS4VE6TVICZN935H74PV87TSH89BZXCE' where id=39; -update noar tt set v0='QX726B4678INQ678FWVTGX9WQUIC48QKK' where id=40; -update noar ti set v0='QX726B4678INQ678FWVTGX9WQUIC48QKK' where id=40; -update noar tt set v1='9459TT7K7N1MPKDFBYSIN0PAT1S9VWTFQ' where id=40; -update noar ti set v1='9459TT7K7N1MPKDFBYSIN0PAT1S9VWTFQ' where id=40; -update noar tt set v2='Q7W3AYPPLMMAX0DWWD8PR9DCM624DJSRV' where id=40; -update noar ti set v2='Q7W3AYPPLMMAX0DWWD8PR9DCM624DJSRV' where id=40; -update noar tt set v3='YQ5RFJ2ROQYRY7ARLGZ1RN5WHMBJOIG7S' where id=40; -update noar ti set v3='YQ5RFJ2ROQYRY7ARLGZ1RN5WHMBJOIG7S' where id=40; -update noar tt set v0='4LWS3REU2R5V12F63N5WE4MCP5SB0NPQA' where id=41; -update noar ti set v0='4LWS3REU2R5V12F63N5WE4MCP5SB0NPQA' where id=41; -update noar tt set v1='37DM7X8YVGETVCCLFVS6TL6SL33ZUYK6N' where id=41; -update noar ti set v1='37DM7X8YVGETVCCLFVS6TL6SL33ZUYK6N' where id=41; -update noar tt set v2='DFF00QDEEF22SQK0XA5A9G21F6GE0DKAT' where id=41; -update noar ti set v2='DFF00QDEEF22SQK0XA5A9G21F6GE0DKAT' where id=41; -update noar tt set v3='TI1H7LFTTWUBBTF9L62SS5SDTNHKRIMGV' where id=41; -update noar ti set v3='TI1H7LFTTWUBBTF9L62SS5SDTNHKRIMGV' where id=41; -update noar tt set v0='KPG0UO65554LAFUSSIFQ30ICFOQ06PXPA' where id=42; -update noar ti set v0='KPG0UO65554LAFUSSIFQ30ICFOQ06PXPA' where id=42; -update noar tt set v1='TEZFDX8D6EVATEZXY5RUP8TKZRADQK0GW' where id=42; -update noar ti set v1='TEZFDX8D6EVATEZXY5RUP8TKZRADQK0GW' where id=42; -update noar tt set v2='GQFCTJS98GHV3F26G7GK2PT5NSMMAA6CH' where id=42; -update noar ti set v2='GQFCTJS98GHV3F26G7GK2PT5NSMMAA6CH' where id=42; -update noar tt set v3='OC2W4Q38SZ65NJ6STUODVNZ2C02B3CSLD' where id=42; -update noar ti set v3='OC2W4Q38SZ65NJ6STUODVNZ2C02B3CSLD' where id=42; -update noar tt set v0='T27I57X77K6YCLUDI73JW7USXKFBJKA0F' where id=43; -update noar ti set v0='T27I57X77K6YCLUDI73JW7USXKFBJKA0F' where id=43; -update noar tt set v1='VA9YRPYO4GF4RXLWSLZ5JOXDJ5HGHMBKK' where id=43; -update noar ti set v1='VA9YRPYO4GF4RXLWSLZ5JOXDJ5HGHMBKK' where id=43; -update noar tt set v2='5LHZ7A46PJ8IABOPK3UVKTOHVMZA7J2EY' where id=43; -update noar ti set v2='5LHZ7A46PJ8IABOPK3UVKTOHVMZA7J2EY' where id=43; -update noar tt set v3='COLCOM6R1SETG64BKZ3B95SHB32DU8TRN' where id=43; -update noar ti set v3='COLCOM6R1SETG64BKZ3B95SHB32DU8TRN' where id=43; -update noar tt set v0='NSKD5FY2WQZG8YD8ZT5LKVRLCXYMFDBT8' where id=44; -update noar ti set v0='NSKD5FY2WQZG8YD8ZT5LKVRLCXYMFDBT8' where id=44; -update noar tt set v1='E8RN2RYRTDGG5FOWPR5CBJHXLQUUR157Y' where id=44; -update noar ti set v1='E8RN2RYRTDGG5FOWPR5CBJHXLQUUR157Y' where id=44; -update noar tt set v2='EPRU7R48RJWR6Y7DVA9WZMCTI0HVT9ORH' where id=44; -update noar ti set v2='EPRU7R48RJWR6Y7DVA9WZMCTI0HVT9ORH' where id=44; -update noar tt set v3='1812OQ1ATY0MJLNQQU3QMPKI7G4MJNSUS' where id=44; -update noar ti set v3='1812OQ1ATY0MJLNQQU3QMPKI7G4MJNSUS' where id=44; -update noar tt set v0='ZTDTZADNHTWY7BH2AGHAILRVYYE1R3H39' where id=45; -update noar ti set v0='ZTDTZADNHTWY7BH2AGHAILRVYYE1R3H39' where id=45; -update noar tt set v1='X1BCYWXUWODHYBPOAERYOQT1ARJ6RSD02' where id=45; -update noar ti set v1='X1BCYWXUWODHYBPOAERYOQT1ARJ6RSD02' where id=45; -update noar tt set v2='Y7UV22XZ7ZP5961REQUIT3JTOVHVLI0OD' where id=45; -update noar ti set v2='Y7UV22XZ7ZP5961REQUIT3JTOVHVLI0OD' where id=45; -update noar tt set v3='G7DY4RERWJDSAYOL521JZOCXSQDLEEOI0' where id=45; -update noar ti set v3='G7DY4RERWJDSAYOL521JZOCXSQDLEEOI0' where id=45; -update noar tt set v0='NA21FUNZ92D94NXIB5Z5Q3BK55YH59R04' where id=46; -update noar ti set v0='NA21FUNZ92D94NXIB5Z5Q3BK55YH59R04' where id=46; -update noar tt set v1='9TO9ABF3KTVGDLB1I0H7OPNY8JQDX5T7F' where id=46; -update noar ti set v1='9TO9ABF3KTVGDLB1I0H7OPNY8JQDX5T7F' where id=46; -update noar tt set v2='6V811OH844BBI7VG00FRSRNZNRBMGYWC7' where id=46; -update noar ti set v2='6V811OH844BBI7VG00FRSRNZNRBMGYWC7' where id=46; -update noar tt set v3='225PMJV2D2MIYEPR26A46N5NCN8RFBN5L' where id=46; -update noar ti set v3='225PMJV2D2MIYEPR26A46N5NCN8RFBN5L' where id=46; -update noar tt set v0='1SO0B8ZRX54P19QDN20SGPVNMACDFYV3K' where id=47; -update noar ti set v0='1SO0B8ZRX54P19QDN20SGPVNMACDFYV3K' where id=47; -update noar tt set v1='741RH13OZT17CH11BD2QLD8RCQDOCOCK6' where id=47; -update noar ti set v1='741RH13OZT17CH11BD2QLD8RCQDOCOCK6' where id=47; -update noar tt set v2='I2V0N77TSE742033A7AQK5Y8PYL82W6YE' where id=47; -update noar ti set v2='I2V0N77TSE742033A7AQK5Y8PYL82W6YE' where id=47; -update noar tt set v3='8YFXJH16U493FMJCSEPGNWN0FKQD0T7PQ' where id=47; -update noar ti set v3='8YFXJH16U493FMJCSEPGNWN0FKQD0T7PQ' where id=47; -update noar tt set v0='YBKAK07ZWAXOK8I8ZXORSASJH2V3HNIVY' where id=48; -update noar ti set v0='YBKAK07ZWAXOK8I8ZXORSASJH2V3HNIVY' where id=48; -update noar tt set v1='RBMVMXEXCT1P67PMTTH5VF1JT4W7DALMS' where id=48; -update noar ti set v1='RBMVMXEXCT1P67PMTTH5VF1JT4W7DALMS' where id=48; -update noar tt set v2='PWU2S2SW67CKD97SD5OQ3FFW4RBO9RSLN' where id=48; -update noar ti set v2='PWU2S2SW67CKD97SD5OQ3FFW4RBO9RSLN' where id=48; -update noar tt set v3='A0O0ZK57IQ6RKFGR2DB38QONLZ9H97FCH' where id=48; -update noar ti set v3='A0O0ZK57IQ6RKFGR2DB38QONLZ9H97FCH' where id=48; -update noar tt set v0='UD5E38ESCEKY62OO2S0T9BBYNYKSP6S1T' where id=49; -update noar ti set v0='UD5E38ESCEKY62OO2S0T9BBYNYKSP6S1T' where id=49; -update noar tt set v1='U6N91XTYZRKYEDEGCKRT2N54JNGTBWO3M' where id=49; -update noar ti set v1='U6N91XTYZRKYEDEGCKRT2N54JNGTBWO3M' where id=49; -update noar tt set v2='VKJMTDP90CZSYSRKX4P76Q5PZV4H9UMNV' where id=49; -update noar ti set v2='VKJMTDP90CZSYSRKX4P76Q5PZV4H9UMNV' where id=49; -update noar tt set v3='CNOFFG1MH0OU8AVJM10SIT87NXKW5H59N' where id=49; -update noar ti set v3='CNOFFG1MH0OU8AVJM10SIT87NXKW5H59N' where id=49; -update noar tt set v0='P812RC62SIBWQXGBCS605N9S6E18NRGV4' where id=50; -update noar ti set v0='P812RC62SIBWQXGBCS605N9S6E18NRGV4' where id=50; -update noar tt set v1='QHC8S5VT9AVA5YGTUAW3VLRKUGZVXGNVA' where id=50; -update noar ti set v1='QHC8S5VT9AVA5YGTUAW3VLRKUGZVXGNVA' where id=50; -update noar tt set v2='CJGT889VWMRR3VWAHHX3I9BQ883302YUV' where id=50; -update noar ti set v2='CJGT889VWMRR3VWAHHX3I9BQ883302YUV' where id=50; -update noar tt set v3='00O79WCJKM9P95GRHM83WO18PKZZ7ZL5D' where id=50; -update noar ti set v3='00O79WCJKM9P95GRHM83WO18PKZZ7ZL5D' where id=50; -update noar tt set v0='28OB8OSV18E0UPVBFBZKI42E2LY7EAVLF' where id=51; -update noar ti set v0='28OB8OSV18E0UPVBFBZKI42E2LY7EAVLF' where id=51; -update noar tt set v1='S8FSD4Y7IPA7IBII7DM6TYWY23HX03XGH' where id=51; -update noar ti set v1='S8FSD4Y7IPA7IBII7DM6TYWY23HX03XGH' where id=51; -update noar tt set v2='79H4LSLH9C31HPCSNMKZGMF0L9ZPTKUXS' where id=51; -update noar ti set v2='79H4LSLH9C31HPCSNMKZGMF0L9ZPTKUXS' where id=51; -update noar tt set v3='NYF45SOB5E9NUXCN1UHR2JFSX4FH5SBX8' where id=51; -update noar ti set v3='NYF45SOB5E9NUXCN1UHR2JFSX4FH5SBX8' where id=51; -update noar tt set v0='L5AGQXZZQSVF6V997ZY71MDEKXBHV6M20' where id=52; -update noar ti set v0='L5AGQXZZQSVF6V997ZY71MDEKXBHV6M20' where id=52; -update noar tt set v1='ZX0IME7TZE8YTKDMTTW25YOH8XJ5B33RM' where id=52; -update noar ti set v1='ZX0IME7TZE8YTKDMTTW25YOH8XJ5B33RM' where id=52; -update noar tt set v2='S2U46H5RPOPPSHGFRYSLANRA32XWEX1LN' where id=52; -update noar ti set v2='S2U46H5RPOPPSHGFRYSLANRA32XWEX1LN' where id=52; -update noar tt set v3='B4R4JBRO0KJ402ALGLT7AAO35QDDVI1JI' where id=52; -update noar ti set v3='B4R4JBRO0KJ402ALGLT7AAO35QDDVI1JI' where id=52; -update noar tt set v0='FX574IZ99KXXQG64AR38DMMIC7USB05SD' where id=53; -update noar ti set v0='FX574IZ99KXXQG64AR38DMMIC7USB05SD' where id=53; -update noar tt set v1='S4JNMCD91RH8WD5XIK8QGRZELGTF08M1B' where id=53; -update noar ti set v1='S4JNMCD91RH8WD5XIK8QGRZELGTF08M1B' where id=53; -update noar tt set v2='E3ZNO9XQ2NK7C4KO8NL9LGAJJDD7X8RE5' where id=53; -update noar ti set v2='E3ZNO9XQ2NK7C4KO8NL9LGAJJDD7X8RE5' where id=53; -update noar tt set v3='RBA9KV3R1UIG6V83R6LZ00OZ16BB0LZ7O' where id=53; -update noar ti set v3='RBA9KV3R1UIG6V83R6LZ00OZ16BB0LZ7O' where id=53; -update noar tt set v0='QPO42ZYUTZMH8M9C6G7MONKLA92Q95SBF' where id=54; -update noar ti set v0='QPO42ZYUTZMH8M9C6G7MONKLA92Q95SBF' where id=54; -update noar tt set v1='2MACK1ERN0WK90FFUNTT6006ICJ7D881N' where id=54; -update noar ti set v1='2MACK1ERN0WK90FFUNTT6006ICJ7D881N' where id=54; -update noar tt set v2='LND86O8W9AP505H336MHTBONZQB1OHZZQ' where id=54; -update noar ti set v2='LND86O8W9AP505H336MHTBONZQB1OHZZQ' where id=54; -update noar tt set v3='UXBQT496TN75ZEYTB8FVRQCI6AYQLQMSN' where id=54; -update noar ti set v3='UXBQT496TN75ZEYTB8FVRQCI6AYQLQMSN' where id=54; -update noar tt set v0='PLTWOC7H04M5FOTV6UFI1SIRJ6PC4NUYR' where id=55; -update noar ti set v0='PLTWOC7H04M5FOTV6UFI1SIRJ6PC4NUYR' where id=55; -update noar tt set v1='RGL8W2DNKNHWGPW4N2M1NDBOARH91T9AR' where id=55; -update noar ti set v1='RGL8W2DNKNHWGPW4N2M1NDBOARH91T9AR' where id=55; -update noar tt set v2='HCEZBXWCLOR3QP22Y30THHNPPB58AAL7G' where id=55; -update noar ti set v2='HCEZBXWCLOR3QP22Y30THHNPPB58AAL7G' where id=55; -update noar tt set v3='JD6LJXFQ1C0BEH34RBRQ6CMO83M5PFY9C' where id=55; -update noar ti set v3='JD6LJXFQ1C0BEH34RBRQ6CMO83M5PFY9C' where id=55; -update noar tt set v0='6F0PQ6PJ956Z52O0UCAZIVQHKYMKNWP7C' where id=56; -update noar ti set v0='6F0PQ6PJ956Z52O0UCAZIVQHKYMKNWP7C' where id=56; -update noar tt set v1='0TIMH0J9RYFPH70LLB9CEFAX7RP44Y97B' where id=56; -update noar ti set v1='0TIMH0J9RYFPH70LLB9CEFAX7RP44Y97B' where id=56; -update noar tt set v2='60ZNZMTADX9WTK0AMKCKVWGUBX66FGC30' where id=56; -update noar ti set v2='60ZNZMTADX9WTK0AMKCKVWGUBX66FGC30' where id=56; -update noar tt set v3='R5DNMFQ3ZZ4CCUENGPVB3KC3UK4TKI3OH' where id=56; -update noar ti set v3='R5DNMFQ3ZZ4CCUENGPVB3KC3UK4TKI3OH' where id=56; -update noar tt set v0='39V33N09U4CF4UHTPXH6YMJ3HZJXC2HMH' where id=57; -update noar ti set v0='39V33N09U4CF4UHTPXH6YMJ3HZJXC2HMH' where id=57; -update noar tt set v1='873FWSLK5N7NLC4EZ3RFI9VL6QKLVKEMK' where id=57; -update noar ti set v1='873FWSLK5N7NLC4EZ3RFI9VL6QKLVKEMK' where id=57; -update noar tt set v2='UXW5GE2L9YHO6BRWP30BK09Q0IM590DDR' where id=57; -update noar ti set v2='UXW5GE2L9YHO6BRWP30BK09Q0IM590DDR' where id=57; -update noar tt set v3='BYDXX4IV634E48M2XP2XT5S4X5Q6I6U9Y' where id=57; -update noar ti set v3='BYDXX4IV634E48M2XP2XT5S4X5Q6I6U9Y' where id=57; -update noar tt set v0='PNBTJLSJRIOR6C3S77NLL4DU12WQ9N93L' where id=58; -update noar ti set v0='PNBTJLSJRIOR6C3S77NLL4DU12WQ9N93L' where id=58; -update noar tt set v1='XZSLGUO1A5405C6U0NG2RB08ALAWV6X5R' where id=58; -update noar ti set v1='XZSLGUO1A5405C6U0NG2RB08ALAWV6X5R' where id=58; -update noar tt set v2='SMX3RD2OPJ00HSV3LOB7SXVB4S5ZSUZ5R' where id=58; -update noar ti set v2='SMX3RD2OPJ00HSV3LOB7SXVB4S5ZSUZ5R' where id=58; -update noar tt set v3='MVTRS71Q1QOZEXR7RMZ719XGS4PF0OIYD' where id=58; -update noar ti set v3='MVTRS71Q1QOZEXR7RMZ719XGS4PF0OIYD' where id=58; -update noar tt set v0='1IQXUCLU60IVP95D8CTTJ84LJBKUP5281' where id=59; -update noar ti set v0='1IQXUCLU60IVP95D8CTTJ84LJBKUP5281' where id=59; -update noar tt set v1='EVU1YYQ5I93N40T3GSHEMAXINU1OLI6DF' where id=59; -update noar ti set v1='EVU1YYQ5I93N40T3GSHEMAXINU1OLI6DF' where id=59; -update noar tt set v2='6FXAWIA7W9YOAUFL8PQ7ACUGK2UEVY5YD' where id=59; -update noar ti set v2='6FXAWIA7W9YOAUFL8PQ7ACUGK2UEVY5YD' where id=59; -update noar tt set v3='DJI5LP9SH2QOIZXQX82OZO0VPE5B8MM63' where id=59; -update noar ti set v3='DJI5LP9SH2QOIZXQX82OZO0VPE5B8MM63' where id=59; -update noar tt set v0='ZQBAJG3TNI7PHWE3APHMSVCWYIQKIB7D5' where id=60; -update noar ti set v0='ZQBAJG3TNI7PHWE3APHMSVCWYIQKIB7D5' where id=60; -update noar tt set v1='LENGXXXH8LB0V1C11YLSNJV4P4GDRX886' where id=60; -update noar ti set v1='LENGXXXH8LB0V1C11YLSNJV4P4GDRX886' where id=60; -update noar tt set v2='AI5HP3552ZV9WOAUCYQFSCRHO2MONZDJ0' where id=60; -update noar ti set v2='AI5HP3552ZV9WOAUCYQFSCRHO2MONZDJ0' where id=60; -update noar tt set v3='XH4Y1FGRQVYJ4KUL68JXK4AQPPO8WQOVF' where id=60; -update noar ti set v3='XH4Y1FGRQVYJ4KUL68JXK4AQPPO8WQOVF' where id=60; -update noar tt set v0='6P0EDLNPK2ZUHIP4X6DOQ9ZI23RD88K7O' where id=61; -update noar ti set v0='6P0EDLNPK2ZUHIP4X6DOQ9ZI23RD88K7O' where id=61; -update noar tt set v1='4HQ62BOQT579T1CVOYP0SKA2UPLLU2QTD' where id=61; -update noar ti set v1='4HQ62BOQT579T1CVOYP0SKA2UPLLU2QTD' where id=61; -update noar tt set v2='J1U9LJA18760AZQ5SHUUJE1QNBUCM0XWL' where id=61; -update noar ti set v2='J1U9LJA18760AZQ5SHUUJE1QNBUCM0XWL' where id=61; -update noar tt set v3='IK9RSG1SF9VQTHVAGQPHJK5NHSNDEI004' where id=61; -update noar ti set v3='IK9RSG1SF9VQTHVAGQPHJK5NHSNDEI004' where id=61; -update noar tt set v0='EULSTNX20UWMKI41Y50A3IJS342IIN7AS' where id=62; -update noar ti set v0='EULSTNX20UWMKI41Y50A3IJS342IIN7AS' where id=62; -update noar tt set v1='MF5I064OXYNUBH4P6W5BQ1UJYMVGTP1GI' where id=62; -update noar ti set v1='MF5I064OXYNUBH4P6W5BQ1UJYMVGTP1GI' where id=62; -update noar tt set v2='IB28RE569YI4KX6Q2P19IY8KXTG5RLAZ3' where id=62; -update noar ti set v2='IB28RE569YI4KX6Q2P19IY8KXTG5RLAZ3' where id=62; -update noar tt set v3='31WVQ919FJA3HTPLNENVLZNDK18QFE6P6' where id=62; -update noar ti set v3='31WVQ919FJA3HTPLNENVLZNDK18QFE6P6' where id=62; -update noar tt set v0='VSAD6EYW20EBWUFG0MG5D9VFHPYU1KTBQ' where id=63; -update noar ti set v0='VSAD6EYW20EBWUFG0MG5D9VFHPYU1KTBQ' where id=63; -update noar tt set v1='KPTMK64O8P5BOGYKV703F5606HD7I4GU5' where id=63; -update noar ti set v1='KPTMK64O8P5BOGYKV703F5606HD7I4GU5' where id=63; -update noar tt set v2='ONYEURNEZT7FZ5A4NT4TLI6MC3VRXFROH' where id=63; -update noar ti set v2='ONYEURNEZT7FZ5A4NT4TLI6MC3VRXFROH' where id=63; -update noar tt set v3='U2F2GD4J0QGRMGMHNFVY7XAK3TOPY02X9' where id=63; -update noar ti set v3='U2F2GD4J0QGRMGMHNFVY7XAK3TOPY02X9' where id=63; -update noar tt set v0='0BQBY1BZ9K9L9STEGRS3S2NVCMCDFGV4K' where id=64; -update noar ti set v0='0BQBY1BZ9K9L9STEGRS3S2NVCMCDFGV4K' where id=64; -update noar tt set v1='2EO5P7GTH7YPASLBO25RG82G89XRPVJIK' where id=64; -update noar ti set v1='2EO5P7GTH7YPASLBO25RG82G89XRPVJIK' where id=64; -update noar tt set v2='94BNSO0BB09REGYUUOHIAD0FFXJY61TX4' where id=64; -update noar ti set v2='94BNSO0BB09REGYUUOHIAD0FFXJY61TX4' where id=64; -update noar tt set v3='HAHN3E7E855AYLHEVJFCSEWFW9L7KTKCH' where id=64; -update noar ti set v3='HAHN3E7E855AYLHEVJFCSEWFW9L7KTKCH' where id=64; -update noar tt set v0='EJRWHRZX9FR187T5M16SKH78LP7AAC7PD' where id=65; -update noar ti set v0='EJRWHRZX9FR187T5M16SKH78LP7AAC7PD' where id=65; -update noar tt set v1='6TT6QVN9FF5HJ1DXUXXLZ711QYC7SZCOZ' where id=65; -update noar ti set v1='6TT6QVN9FF5HJ1DXUXXLZ711QYC7SZCOZ' where id=65; -update noar tt set v2='7ZLQM70K04JXDLG7QR7H0KM47V3UN3MUX' where id=65; -update noar ti set v2='7ZLQM70K04JXDLG7QR7H0KM47V3UN3MUX' where id=65; -update noar tt set v3='2B2AM2WJ34QZJP7HWYDQO2LYPYNQVLOU9' where id=65; -update noar ti set v3='2B2AM2WJ34QZJP7HWYDQO2LYPYNQVLOU9' where id=65; -update noar tt set v0='Q154SZTETB5MW5GB6FRVBHVJ5N5V0S3AH' where id=66; -update noar ti set v0='Q154SZTETB5MW5GB6FRVBHVJ5N5V0S3AH' where id=66; -update noar tt set v1='GE2RXV6R22V95VXPJCQFSG82AYQDVZ1MF' where id=66; -update noar ti set v1='GE2RXV6R22V95VXPJCQFSG82AYQDVZ1MF' where id=66; -update noar tt set v2='PRUZSRQ16GCVEFGFQIYL6JFZ2Z2Y7CM80' where id=66; -update noar ti set v2='PRUZSRQ16GCVEFGFQIYL6JFZ2Z2Y7CM80' where id=66; -update noar tt set v3='0VXA0ZYG1MJ5PBP9ERCCRC6CFAO6RDY4T' where id=66; -update noar ti set v3='0VXA0ZYG1MJ5PBP9ERCCRC6CFAO6RDY4T' where id=66; -update noar tt set v0='YHYL5F5BYVLI3DNWAOJCPJ0P18QHIXRHA' where id=67; -update noar ti set v0='YHYL5F5BYVLI3DNWAOJCPJ0P18QHIXRHA' where id=67; -update noar tt set v1='JP7DDGYM7BK24EDL8AMRTXOQ3NKFGMY2V' where id=67; -update noar ti set v1='JP7DDGYM7BK24EDL8AMRTXOQ3NKFGMY2V' where id=67; -update noar tt set v2='37IJ7WD0KGCRYHS2KWCYRVKOYHJ9UQV6I' where id=67; -update noar ti set v2='37IJ7WD0KGCRYHS2KWCYRVKOYHJ9UQV6I' where id=67; -update noar tt set v3='3X8VDRPC97AAXOH7Q4T6KNG4NJRZ57W10' where id=67; -update noar ti set v3='3X8VDRPC97AAXOH7Q4T6KNG4NJRZ57W10' where id=67; -update noar tt set v0='509QVRTDDCUAPI4OQPPUXDSDQWLG558N2' where id=68; -update noar ti set v0='509QVRTDDCUAPI4OQPPUXDSDQWLG558N2' where id=68; -update noar tt set v1='7FZE6K86C7VC1VB31RZ31GS3XIALY4MUU' where id=68; -update noar ti set v1='7FZE6K86C7VC1VB31RZ31GS3XIALY4MUU' where id=68; -update noar tt set v2='M7WKQ44BRJTNJE1P3QG17FWVB7QY67NR0' where id=68; -update noar ti set v2='M7WKQ44BRJTNJE1P3QG17FWVB7QY67NR0' where id=68; -update noar tt set v3='UHBMO711Z9NXMP0PQT03IRGRE4H6F4Y0K' where id=68; -update noar ti set v3='UHBMO711Z9NXMP0PQT03IRGRE4H6F4Y0K' where id=68; -update noar tt set v0='YB2JABZV2A4UH2IRH4K5RAIKM669F6O4F' where id=69; -update noar ti set v0='YB2JABZV2A4UH2IRH4K5RAIKM669F6O4F' where id=69; -update noar tt set v1='ELON3CUX7WSO9AOLU0AE1LSDDQQDW5QNI' where id=69; -update noar ti set v1='ELON3CUX7WSO9AOLU0AE1LSDDQQDW5QNI' where id=69; -update noar tt set v2='GUA3PW824YE0STAYONF6YCZG7NZ6Y35RF' where id=69; -update noar ti set v2='GUA3PW824YE0STAYONF6YCZG7NZ6Y35RF' where id=69; -update noar tt set v3='R06CG6JLVBCVPTMGSCE6X3NHQEMME5RDA' where id=69; -update noar ti set v3='R06CG6JLVBCVPTMGSCE6X3NHQEMME5RDA' where id=69; -update noar tt set v0='8QFVPBOJZ82ADRDFS2QQS469ESDK74DEC' where id=70; -update noar ti set v0='8QFVPBOJZ82ADRDFS2QQS469ESDK74DEC' where id=70; -update noar tt set v1='C0FIKKI4OOACGSTF39JIVGNTD1YBXTPYB' where id=70; -update noar ti set v1='C0FIKKI4OOACGSTF39JIVGNTD1YBXTPYB' where id=70; -update noar tt set v2='MB1QU94AKC723WWK4WM1QGA8M1W2XYJF1' where id=70; -update noar ti set v2='MB1QU94AKC723WWK4WM1QGA8M1W2XYJF1' where id=70; -update noar tt set v3='DV1O1M3HI97UNCKF3C57VPMMJTUW9UTAV' where id=70; -update noar ti set v3='DV1O1M3HI97UNCKF3C57VPMMJTUW9UTAV' where id=70; -update noar tt set v0='4UO38QRD4VS15AATHXRZE89LE7KAA4K4A' where id=71; -update noar ti set v0='4UO38QRD4VS15AATHXRZE89LE7KAA4K4A' where id=71; -update noar tt set v1='H9EVDRRI7VUK6R61RWFNZKTQW485PTL3G' where id=71; -update noar ti set v1='H9EVDRRI7VUK6R61RWFNZKTQW485PTL3G' where id=71; -update noar tt set v2='A01XKRUP4G4HCIM0HMKC8YRFE0OJ2ML32' where id=71; -update noar ti set v2='A01XKRUP4G4HCIM0HMKC8YRFE0OJ2ML32' where id=71; -update noar tt set v3='4E3VF6JL4U6I2PY8A8PN0Z6LIJYFVT08P' where id=71; -update noar ti set v3='4E3VF6JL4U6I2PY8A8PN0Z6LIJYFVT08P' where id=71; -update noar tt set v0='WFIKIYMFOEQL0OSKVVMSJ5J6MVD3UT5O0' where id=72; -update noar ti set v0='WFIKIYMFOEQL0OSKVVMSJ5J6MVD3UT5O0' where id=72; -update noar tt set v1='UUYHQAOMT8LCLHU8BHXA29FJJJ0MZT8B9' where id=72; -update noar ti set v1='UUYHQAOMT8LCLHU8BHXA29FJJJ0MZT8B9' where id=72; -update noar tt set v2='E4QPJW1146OKN135FBM5XRIIKX6OW433W' where id=72; -update noar ti set v2='E4QPJW1146OKN135FBM5XRIIKX6OW433W' where id=72; -update noar tt set v3='BLDOKLY31IDY69EV5TC2JJ7GQYU5FZ26L' where id=72; -update noar ti set v3='BLDOKLY31IDY69EV5TC2JJ7GQYU5FZ26L' where id=72; -update noar tt set v0='Z5ZWQ7I5E4U4EQ21FO1C7TOGL6YXMAEZP' where id=73; -update noar ti set v0='Z5ZWQ7I5E4U4EQ21FO1C7TOGL6YXMAEZP' where id=73; -update noar tt set v1='U8RDOIQ951TXCLVWX1ERKXE5C5SJS44QI' where id=73; -update noar ti set v1='U8RDOIQ951TXCLVWX1ERKXE5C5SJS44QI' where id=73; -update noar tt set v2='325BHUSVCW6G9CDVKGIYJ6CP347LT7C2S' where id=73; -update noar ti set v2='325BHUSVCW6G9CDVKGIYJ6CP347LT7C2S' where id=73; -update noar tt set v3='3K59CJGTA9DM38KZL12IIRL645WDCUOF6' where id=73; -update noar ti set v3='3K59CJGTA9DM38KZL12IIRL645WDCUOF6' where id=73; -update noar tt set v0='U1EG1W31O5VM6XSK544KKZJRV5OZUSL1A' where id=74; -update noar ti set v0='U1EG1W31O5VM6XSK544KKZJRV5OZUSL1A' where id=74; -update noar tt set v1='NKN3WOH2HDBRKO2TDXJP5VE6MFTE6NQIK' where id=74; -update noar ti set v1='NKN3WOH2HDBRKO2TDXJP5VE6MFTE6NQIK' where id=74; -update noar tt set v2='MXC1QZSIHR6TD5YKCBTC6GCOQ2WDV4TA6' where id=74; -update noar ti set v2='MXC1QZSIHR6TD5YKCBTC6GCOQ2WDV4TA6' where id=74; -update noar tt set v3='LLGYBP5VLQSDZMXBB61RR0JQ1IANZUY9E' where id=74; -update noar ti set v3='LLGYBP5VLQSDZMXBB61RR0JQ1IANZUY9E' where id=74; -update noar tt set v0='6Z77X7P2SJNJ8A2Z4UQVDTGH2TXU2ESOD' where id=75; -update noar ti set v0='6Z77X7P2SJNJ8A2Z4UQVDTGH2TXU2ESOD' where id=75; -update noar tt set v1='0NGGSYR67BU1EHKG53KR7610C4YNA22SJ' where id=75; -update noar ti set v1='0NGGSYR67BU1EHKG53KR7610C4YNA22SJ' where id=75; -update noar tt set v2='JO40KAT463ZSC8MUTKREQORNAHIIK1HW8' where id=75; -update noar ti set v2='JO40KAT463ZSC8MUTKREQORNAHIIK1HW8' where id=75; -update noar tt set v3='LFI92CC2PSZPKMTKY3D10LTZWHJSHD4HM' where id=75; -update noar ti set v3='LFI92CC2PSZPKMTKY3D10LTZWHJSHD4HM' where id=75; -update noar tt set v0='H52H2Q8NQJO6UKXPX9TXM9EAJ12AVNEJ0' where id=76; -update noar ti set v0='H52H2Q8NQJO6UKXPX9TXM9EAJ12AVNEJ0' where id=76; -update noar tt set v1='Y1CZZVYK7MMZDDFNSDUP3OU01ZREMBD04' where id=76; -update noar ti set v1='Y1CZZVYK7MMZDDFNSDUP3OU01ZREMBD04' where id=76; -update noar tt set v2='J2LUUHTJQVC8EDGS7I3U159ZYL6LQ7SQ5' where id=76; -update noar ti set v2='J2LUUHTJQVC8EDGS7I3U159ZYL6LQ7SQ5' where id=76; -update noar tt set v3='E153B33MMB10WI8191FIYYWR1MD132US4' where id=76; -update noar ti set v3='E153B33MMB10WI8191FIYYWR1MD132US4' where id=76; -update noar tt set v0='DT2FB9CHFYUKX1WZEGJSTOA8DSRGLINXS' where id=77; -update noar ti set v0='DT2FB9CHFYUKX1WZEGJSTOA8DSRGLINXS' where id=77; -update noar tt set v1='K47ZCMG32O8TDMXIT4ZZVU3WUR5CK6281' where id=77; -update noar ti set v1='K47ZCMG32O8TDMXIT4ZZVU3WUR5CK6281' where id=77; -update noar tt set v2='E3MY4ZJDE9FRI845QX7L1JKE16RAOPB99' where id=77; -update noar ti set v2='E3MY4ZJDE9FRI845QX7L1JKE16RAOPB99' where id=77; -update noar tt set v3='8KIQVK1LIWNCEJOJFUJNRL3XAQCF6KQ5K' where id=77; -update noar ti set v3='8KIQVK1LIWNCEJOJFUJNRL3XAQCF6KQ5K' where id=77; -update noar tt set v0='GAUR2AKOVDS68JCYAUA27J3MEOLTT4NXD' where id=78; -update noar ti set v0='GAUR2AKOVDS68JCYAUA27J3MEOLTT4NXD' where id=78; -update noar tt set v1='WCU7F9Q0RH1IMVRYF9U1LCEQ0L50FE1CH' where id=78; -update noar ti set v1='WCU7F9Q0RH1IMVRYF9U1LCEQ0L50FE1CH' where id=78; -update noar tt set v2='L22IR67BLXQABI6DMMS5L1QMQDLFM05NH' where id=78; -update noar ti set v2='L22IR67BLXQABI6DMMS5L1QMQDLFM05NH' where id=78; -update noar tt set v3='OF514U1W2T1PULX5F19TST16ISLX261VM' where id=78; -update noar ti set v3='OF514U1W2T1PULX5F19TST16ISLX261VM' where id=78; -update noar tt set v0='FZU198AH61GTW7180NA2LFNSQW2SCVEA6' where id=79; -update noar ti set v0='FZU198AH61GTW7180NA2LFNSQW2SCVEA6' where id=79; -update noar tt set v1='7TUL6I09XZU7RP79CZDO2VLW5A8ETL695' where id=79; -update noar ti set v1='7TUL6I09XZU7RP79CZDO2VLW5A8ETL695' where id=79; -update noar tt set v2='L9D174CXNLVJW1FLYZER42YFERA5G33WO' where id=79; -update noar ti set v2='L9D174CXNLVJW1FLYZER42YFERA5G33WO' where id=79; -update noar tt set v3='V9D1TIRFVT56BXONELNKX0DZ476TY0BG9' where id=79; -update noar ti set v3='V9D1TIRFVT56BXONELNKX0DZ476TY0BG9' where id=79; -update noar tt set v0='76MITPR19HDDFNXEVC3R1QA6FCN50STKQ' where id=80; -update noar ti set v0='76MITPR19HDDFNXEVC3R1QA6FCN50STKQ' where id=80; -update noar tt set v1='5I24FSLVFP2WQDG3AQG1QHFWW08YPLD2U' where id=80; -update noar ti set v1='5I24FSLVFP2WQDG3AQG1QHFWW08YPLD2U' where id=80; -update noar tt set v2='0J0SKPWU530OVKZGJEZ8SCQ2I472EZ188' where id=80; -update noar ti set v2='0J0SKPWU530OVKZGJEZ8SCQ2I472EZ188' where id=80; -update noar tt set v3='0CV0ZOCN649DHA2VUVYJNBVQ43H62A1Z1' where id=80; -update noar ti set v3='0CV0ZOCN649DHA2VUVYJNBVQ43H62A1Z1' where id=80; -update noar tt set v0='8W9QWDO0V4HISTFSJ1Z3O0BEKHN5G6R1Z' where id=81; -update noar ti set v0='8W9QWDO0V4HISTFSJ1Z3O0BEKHN5G6R1Z' where id=81; -update noar tt set v1='93T7Z53MIR1EP02R7SOMTSEB12LS666NZ' where id=81; -update noar ti set v1='93T7Z53MIR1EP02R7SOMTSEB12LS666NZ' where id=81; -update noar tt set v2='E4YHBTUJAU83094D1Z0BCP2M4154EEPBF' where id=81; -update noar ti set v2='E4YHBTUJAU83094D1Z0BCP2M4154EEPBF' where id=81; -update noar tt set v3='2BGYRT4HGEADERD3AL8B4OBXKJUT31N88' where id=81; -update noar ti set v3='2BGYRT4HGEADERD3AL8B4OBXKJUT31N88' where id=81; -update noar tt set v0='VAMNISNLQ3PG37VIRL7AGZ45ADSWG20RP' where id=82; -update noar ti set v0='VAMNISNLQ3PG37VIRL7AGZ45ADSWG20RP' where id=82; -update noar tt set v1='R9KZX21ALTSPL2CQVQO1LJB9CRO88GOC1' where id=82; -update noar ti set v1='R9KZX21ALTSPL2CQVQO1LJB9CRO88GOC1' where id=82; -update noar tt set v2='GS8XUCBZ64ECI341QXC7638DQNYS9G977' where id=82; -update noar ti set v2='GS8XUCBZ64ECI341QXC7638DQNYS9G977' where id=82; -update noar tt set v3='ZDAT2P3X8IF5R1L52CEENJKWDLQA0G0AV' where id=82; -update noar ti set v3='ZDAT2P3X8IF5R1L52CEENJKWDLQA0G0AV' where id=82; -update noar tt set v0='71AX43MZ4ZAGC2HX30BITFS7SXOU7IXNT' where id=83; -update noar ti set v0='71AX43MZ4ZAGC2HX30BITFS7SXOU7IXNT' where id=83; -update noar tt set v1='0ELCJ3MSUGGZFQA4IIGWRQ3W7LTAML82G' where id=83; -update noar ti set v1='0ELCJ3MSUGGZFQA4IIGWRQ3W7LTAML82G' where id=83; -update noar tt set v2='VPMVK8QYNB300TILT3KX3UA034TDBR5S7' where id=83; -update noar ti set v2='VPMVK8QYNB300TILT3KX3UA034TDBR5S7' where id=83; -update noar tt set v3='8AG9QUIWP3348C4AX4FTSAOH2AOZ8N5GK' where id=83; -update noar ti set v3='8AG9QUIWP3348C4AX4FTSAOH2AOZ8N5GK' where id=83; -update noar tt set v0='2523J3T4J6YVYNGV9AYJ0Z9K9II0LJA8O' where id=84; -update noar ti set v0='2523J3T4J6YVYNGV9AYJ0Z9K9II0LJA8O' where id=84; -update noar tt set v1='DN3ZS6W6EDU1N8P19WCNU3SCYYOVWA7FG' where id=84; -update noar ti set v1='DN3ZS6W6EDU1N8P19WCNU3SCYYOVWA7FG' where id=84; -update noar tt set v2='2WI19INSY619HGY5A6P7NYDJ35OJKDR2D' where id=84; -update noar ti set v2='2WI19INSY619HGY5A6P7NYDJ35OJKDR2D' where id=84; -update noar tt set v3='DFBH97AVHBXZR6G7YYCE7NOJEOHY03OOR' where id=84; -update noar ti set v3='DFBH97AVHBXZR6G7YYCE7NOJEOHY03OOR' where id=84; -update noar tt set v0='HRJTQI6QM6W93IWKFXVEMHZILM7C51BVI' where id=85; -update noar ti set v0='HRJTQI6QM6W93IWKFXVEMHZILM7C51BVI' where id=85; -update noar tt set v1='9ETTI4T735T047AQLFXZ9V0QEBUM4Q3O8' where id=85; -update noar ti set v1='9ETTI4T735T047AQLFXZ9V0QEBUM4Q3O8' where id=85; -update noar tt set v2='MRN1XW2RQRDV56TB83GR6YY1G0OKPDH51' where id=85; -update noar ti set v2='MRN1XW2RQRDV56TB83GR6YY1G0OKPDH51' where id=85; -update noar tt set v3='7X1360SOJ83FW8CQJ0PX3REUANSSHEK6C' where id=85; -update noar ti set v3='7X1360SOJ83FW8CQJ0PX3REUANSSHEK6C' where id=85; -update noar tt set v0='JKCII8RC5G6ZFO5QBTZNQVYJQL9VDLWUM' where id=86; -update noar ti set v0='JKCII8RC5G6ZFO5QBTZNQVYJQL9VDLWUM' where id=86; -update noar tt set v1='LAB459CIQW4TF2NF2GROH28MIA1BSPODT' where id=86; -update noar ti set v1='LAB459CIQW4TF2NF2GROH28MIA1BSPODT' where id=86; -update noar tt set v2='L550EWTDOV3BJ0ZQGB8Z8L3WLCKGRQVZQ' where id=86; -update noar ti set v2='L550EWTDOV3BJ0ZQGB8Z8L3WLCKGRQVZQ' where id=86; -update noar tt set v3='030Y45DZ5LEQ03R1GXH6MJ4HBMTI1Q2SP' where id=86; -update noar ti set v3='030Y45DZ5LEQ03R1GXH6MJ4HBMTI1Q2SP' where id=86; -update noar tt set v0='Q8NF6I7AUI9Q686O4G15FBOOSEO8S9GKA' where id=87; -update noar ti set v0='Q8NF6I7AUI9Q686O4G15FBOOSEO8S9GKA' where id=87; -update noar tt set v1='1YGD1P5UV16JPPX3EQPEBMYCF5O2TMCKE' where id=87; -update noar ti set v1='1YGD1P5UV16JPPX3EQPEBMYCF5O2TMCKE' where id=87; -update noar tt set v2='F8OPSNADZEV43HMHGGPTP52QCS23096XX' where id=87; -update noar ti set v2='F8OPSNADZEV43HMHGGPTP52QCS23096XX' where id=87; -update noar tt set v3='CFJ4E3ILWHLEPZ26HHPKK4KY6RMMSDYUL' where id=87; -update noar ti set v3='CFJ4E3ILWHLEPZ26HHPKK4KY6RMMSDYUL' where id=87; -update noar tt set v0='4D52XWH2ZEB6Y2Z241UKZTR3YNI66PJLN' where id=88; -update noar ti set v0='4D52XWH2ZEB6Y2Z241UKZTR3YNI66PJLN' where id=88; -update noar tt set v1='THIISDQDZM5BOTL8RLTP4ZK9IYS3QS5TI' where id=88; -update noar ti set v1='THIISDQDZM5BOTL8RLTP4ZK9IYS3QS5TI' where id=88; -update noar tt set v2='820G35HO8VW0PKOGKWYKKO83HV29XIGNH' where id=88; -update noar ti set v2='820G35HO8VW0PKOGKWYKKO83HV29XIGNH' where id=88; -update noar tt set v3='L29KEVNWE4JHO8EZJXTZ79PTYE4TIZMIS' where id=88; -update noar ti set v3='L29KEVNWE4JHO8EZJXTZ79PTYE4TIZMIS' where id=88; -update noar tt set v0='1J5JXKMCH0FNWSRJ5JK575CZ0FR5HSV6M' where id=89; -update noar ti set v0='1J5JXKMCH0FNWSRJ5JK575CZ0FR5HSV6M' where id=89; -update noar tt set v1='38GYOGLUYPSTV8N4JO4D3MWJZ87BX4NDT' where id=89; -update noar ti set v1='38GYOGLUYPSTV8N4JO4D3MWJZ87BX4NDT' where id=89; -update noar tt set v2='6LYHDG61J75S96LURZ1QFPQPCG06Z2EOA' where id=89; -update noar ti set v2='6LYHDG61J75S96LURZ1QFPQPCG06Z2EOA' where id=89; -update noar tt set v3='LPW74VWXSOJH8YTSIPUMYGJA049P8P5UC' where id=89; -update noar ti set v3='LPW74VWXSOJH8YTSIPUMYGJA049P8P5UC' where id=89; -update noar tt set v0='COTJVYSUNNOU5XPFVBNHH0DMFNND8KQEY' where id=90; -update noar ti set v0='COTJVYSUNNOU5XPFVBNHH0DMFNND8KQEY' where id=90; -update noar tt set v1='RILPDL5BCFP1BH6G5O16VSO99N5ROH823' where id=90; -update noar ti set v1='RILPDL5BCFP1BH6G5O16VSO99N5ROH823' where id=90; -update noar tt set v2='FOYA2IWCZSND8J8LQKVXTJGZBKWRSNMRM' where id=90; -update noar ti set v2='FOYA2IWCZSND8J8LQKVXTJGZBKWRSNMRM' where id=90; -update noar tt set v3='9NX048130G536AR4Z5TGXLF048RL2B0BQ' where id=90; -update noar ti set v3='9NX048130G536AR4Z5TGXLF048RL2B0BQ' where id=90; -update noar tt set v0='5A0OKTUYFYY0REBNPA1DFQPD3WE066NH8' where id=91; -update noar ti set v0='5A0OKTUYFYY0REBNPA1DFQPD3WE066NH8' where id=91; -update noar tt set v1='M7YKAFBYA12WJ00L0T1KC060B263IRLU9' where id=91; -update noar ti set v1='M7YKAFBYA12WJ00L0T1KC060B263IRLU9' where id=91; -update noar tt set v2='RVNGMEKJ0GZJYR03MBOABN1KVCFHITH2S' where id=91; -update noar ti set v2='RVNGMEKJ0GZJYR03MBOABN1KVCFHITH2S' where id=91; -update noar tt set v3='7HU7DGM71M83XMAGJZD5BKOFUXW1ZLDX5' where id=91; -update noar ti set v3='7HU7DGM71M83XMAGJZD5BKOFUXW1ZLDX5' where id=91; -update noar tt set v0='62RVRTD2TILSQ1FIAK5445N095UB9R6L2' where id=92; -update noar ti set v0='62RVRTD2TILSQ1FIAK5445N095UB9R6L2' where id=92; -update noar tt set v1='3Z7YXT9ICT3PG2LVDTN5QSFYABGEETX0I' where id=92; -update noar ti set v1='3Z7YXT9ICT3PG2LVDTN5QSFYABGEETX0I' where id=92; -update noar tt set v2='967X07WO4V9J8G7YKA3KIIPNFBF784Y12' where id=92; -update noar ti set v2='967X07WO4V9J8G7YKA3KIIPNFBF784Y12' where id=92; -update noar tt set v3='0IGLNWBAVAHS4RAVIE6LJ6D2CVKY48DCZ' where id=92; -update noar ti set v3='0IGLNWBAVAHS4RAVIE6LJ6D2CVKY48DCZ' where id=92; -update noar tt set v0='C0U0C8KU3U6HCWSL8DFU4IBYQAK2QUP0J' where id=93; -update noar ti set v0='C0U0C8KU3U6HCWSL8DFU4IBYQAK2QUP0J' where id=93; -update noar tt set v1='QJ1PETVEJGCXZJ06ZGVI4TCVI64DMJXZE' where id=93; -update noar ti set v1='QJ1PETVEJGCXZJ06ZGVI4TCVI64DMJXZE' where id=93; -update noar tt set v2='7XA1KVO1SENCAM9C8H2PVFSKSLEFK3MDX' where id=93; -update noar ti set v2='7XA1KVO1SENCAM9C8H2PVFSKSLEFK3MDX' where id=93; -update noar tt set v3='LX94SJ3GZ2ROSOG87CHXE8Y4HMMJQFO5R' where id=93; -update noar ti set v3='LX94SJ3GZ2ROSOG87CHXE8Y4HMMJQFO5R' where id=93; -update noar tt set v0='CR5FS516EEC4FJW0TT2QF58HN21FZ0ASB' where id=94; -update noar ti set v0='CR5FS516EEC4FJW0TT2QF58HN21FZ0ASB' where id=94; -update noar tt set v1='NL6SYNS3B1MQI3UI81Y2V5RJOELZVXB0L' where id=94; -update noar ti set v1='NL6SYNS3B1MQI3UI81Y2V5RJOELZVXB0L' where id=94; -update noar tt set v2='ES2BMV466W9IR49HHWSD84QD9C5K1CZFA' where id=94; -update noar ti set v2='ES2BMV466W9IR49HHWSD84QD9C5K1CZFA' where id=94; -update noar tt set v3='MZAZ1049ZCXKM251UD33KATM0K24X45HV' where id=94; -update noar ti set v3='MZAZ1049ZCXKM251UD33KATM0K24X45HV' where id=94; -update noar tt set v0='FFTEM9NP7KAGILDCFDXNNJ3GNGL332G9G' where id=95; -update noar ti set v0='FFTEM9NP7KAGILDCFDXNNJ3GNGL332G9G' where id=95; -update noar tt set v1='RWWMHJ4SGI66H1TR7M2X3T2FP3X592S1B' where id=95; -update noar ti set v1='RWWMHJ4SGI66H1TR7M2X3T2FP3X592S1B' where id=95; -update noar tt set v2='N58JJI6J9OA5SGQWI7ZBWMZ83IPJH2UVT' where id=95; -update noar ti set v2='N58JJI6J9OA5SGQWI7ZBWMZ83IPJH2UVT' where id=95; -update noar tt set v3='T9PD6HENPF61KZ6DD0WJWQ2B3SHHHRFND' where id=95; -update noar ti set v3='T9PD6HENPF61KZ6DD0WJWQ2B3SHHHRFND' where id=95; -update noar tt set v0='UMCI75NEY2L860S6VKTKV0OH3TAE8PYRS' where id=96; -update noar ti set v0='UMCI75NEY2L860S6VKTKV0OH3TAE8PYRS' where id=96; -update noar tt set v1='9SUKTBTF1K8G2ATHFTRJV73RFU7POTY8D' where id=96; -update noar ti set v1='9SUKTBTF1K8G2ATHFTRJV73RFU7POTY8D' where id=96; -update noar tt set v2='WSU1EF52PZHNTILLBN5K2URGBVWYQ1C2L' where id=96; -update noar ti set v2='WSU1EF52PZHNTILLBN5K2URGBVWYQ1C2L' where id=96; -update noar tt set v3='7P8L8D7A48BHQFB2UTPK1OCHMHI052LCD' where id=96; -update noar ti set v3='7P8L8D7A48BHQFB2UTPK1OCHMHI052LCD' where id=96; -update noar tt set v0='UWKMNL0870KPSF7GCMSRY77I5QUIQQQ1P' where id=97; -update noar ti set v0='UWKMNL0870KPSF7GCMSRY77I5QUIQQQ1P' where id=97; -update noar tt set v1='E7FL9RTMIT5DYC9LNVCRYH414DRIE1D0D' where id=97; -update noar ti set v1='E7FL9RTMIT5DYC9LNVCRYH414DRIE1D0D' where id=97; -update noar tt set v2='1BAKJEWCJRKVY7PTO9DXC980MSDE2TE6H' where id=97; -update noar ti set v2='1BAKJEWCJRKVY7PTO9DXC980MSDE2TE6H' where id=97; -update noar tt set v3='TYXARM2HKG0P62LASWVW4N0EAXGAQW7GO' where id=97; -update noar ti set v3='TYXARM2HKG0P62LASWVW4N0EAXGAQW7GO' where id=97; -update noar tt set v0='4VE776DG508IW3LZUE6AUTAW2JDPCAZWL' where id=98; -update noar ti set v0='4VE776DG508IW3LZUE6AUTAW2JDPCAZWL' where id=98; -update noar tt set v1='NSJ0K2LFG0TGTLS16P6MWA0CQVA9WLQKO' where id=98; -update noar ti set v1='NSJ0K2LFG0TGTLS16P6MWA0CQVA9WLQKO' where id=98; -update noar tt set v2='E3I7L3WBNQ3BYO4JKT32M2NIR8P9B7J3A' where id=98; -update noar ti set v2='E3I7L3WBNQ3BYO4JKT32M2NIR8P9B7J3A' where id=98; -update noar tt set v3='Z4I17U2NUSBCDD8PCJBIPT4PYQWLVSABE' where id=98; -update noar ti set v3='Z4I17U2NUSBCDD8PCJBIPT4PYQWLVSABE' where id=98; -update noar tt set v0='0O0D2HFHYY99YW2J7W2XQHXKLXRGJ359S' where id=99; -update noar ti set v0='0O0D2HFHYY99YW2J7W2XQHXKLXRGJ359S' where id=99; -update noar tt set v1='DFF5OUK3F76SRB6QD81YPY6ORPRO1CNUC' where id=99; -update noar ti set v1='DFF5OUK3F76SRB6QD81YPY6ORPRO1CNUC' where id=99; -update noar tt set v2='NDUJ9GJXVB05Q13HOEV9OHP1RH9MJR99U' where id=99; -update noar ti set v2='NDUJ9GJXVB05Q13HOEV9OHP1RH9MJR99U' where id=99; -update noar tt set v3='M4U6GZOI06LY5NIHERUPWJA31CK4W066E' where id=99; -update noar ti set v3='M4U6GZOI06LY5NIHERUPWJA31CK4W066E' where id=99; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varchar(256) null, - v1 varchar(256) null, - v2 varchar(256) null, - v3 varchar(256) null, - b0 text null -) engine=tokudb; -insert into tt (id) values (0); -insert into tt values (1,2,'a','b','c','d','e'); -insert into tt values (2,3,'','','','',''); -insert into tt values (3,4,'','','','',''); -insert into tt values (4,5,'','','','',''); -insert into tt values (5,6,'','','','',''); -insert into tt values (6,7,'','','','',''); -insert into tt values (7,8,'','','','',''); -insert into tt values (8,9,'','','','',''); -insert into tt values (9,10,'','','','',''); -insert into tt values (10,11,'','','','',''); -insert into tt values (11,12,'','','','',''); -insert into tt values (12,13,'','','','',''); -insert into tt values (13,14,'','','','',''); -insert into tt values (14,15,'','','','',''); -insert into tt values (15,16,'','','','',''); -insert into tt values (16,17,'','','','',''); -insert into tt values (17,18,'','','','',''); -insert into tt values (18,19,'','','','',''); -insert into tt values (19,20,'','','','',''); -insert into tt values (20,21,'','','','',''); -insert into tt values (21,22,'','','','',''); -insert into tt values (22,23,'','','','',''); -insert into tt values (23,24,'','','','',''); -insert into tt values (24,25,'','','','',''); -insert into tt values (25,26,'','','','',''); -insert into tt values (26,27,'','','','',''); -insert into tt values (27,28,'','','','',''); -insert into tt values (28,29,'','','','',''); -insert into tt values (29,30,'','','','',''); -insert into tt values (30,31,'','','','',''); -insert into tt values (31,32,'','','','',''); -insert into tt values (32,33,'','','','',''); -insert into tt values (33,34,'','','','',''); -insert into tt values (34,35,'','','','',''); -insert into tt values (35,36,'','','','',''); -insert into tt values (36,37,'','','','',''); -insert into tt values (37,38,'','','','',''); -insert into tt values (38,39,'','','','',''); -insert into tt values (39,40,'','','','',''); -insert into tt values (40,41,'','','','',''); -insert into tt values (41,42,'','','','',''); -insert into tt values (42,43,'','','','',''); -insert into tt values (43,44,'','','','',''); -insert into tt values (44,45,'','','','',''); -insert into tt values (45,46,'','','','',''); -insert into tt values (46,47,'','','','',''); -insert into tt values (47,48,'','','','',''); -insert into tt values (48,49,'','','','',''); -insert into tt values (49,50,'','','','',''); -insert into tt values (50,51,'','','','',''); -insert into tt values (51,52,'','','','',''); -insert into tt values (52,53,'','','','',''); -insert into tt values (53,54,'','','','',''); -insert into tt values (54,55,'','','','',''); -insert into tt values (55,56,'','','','',''); -insert into tt values (56,57,'','','','',''); -insert into tt values (57,58,'','','','',''); -insert into tt values (58,59,'','','','',''); -insert into tt values (59,60,'','','','',''); -insert into tt values (60,61,'','','','',''); -insert into tt values (61,62,'','','','',''); -insert into tt values (62,63,'','','','',''); -insert into tt values (63,64,'','','','',''); -insert into tt values (64,65,'','','','',''); -insert into tt values (65,66,'','','','',''); -insert into tt values (66,67,'','','','',''); -insert into tt values (67,68,'','','','',''); -insert into tt values (68,69,'','','','',''); -insert into tt values (69,70,'','','','',''); -insert into tt values (70,71,'','','','',''); -insert into tt values (71,72,'','','','',''); -insert into tt values (72,73,'','','','',''); -insert into tt values (73,74,'','','','',''); -insert into tt values (74,75,'','','','',''); -insert into tt values (75,76,'','','','',''); -insert into tt values (76,77,'','','','',''); -insert into tt values (77,78,'','','','',''); -insert into tt values (78,79,'','','','',''); -insert into tt values (79,80,'','','','',''); -insert into tt values (80,81,'','','','',''); -insert into tt values (81,82,'','','','',''); -insert into tt values (82,83,'','','','',''); -insert into tt values (83,84,'','','','',''); -insert into tt values (84,85,'','','','',''); -insert into tt values (85,86,'','','','',''); -insert into tt values (86,87,'','','','',''); -insert into tt values (87,88,'','','','',''); -insert into tt values (88,89,'','','','',''); -insert into tt values (89,90,'','','','',''); -insert into tt values (90,91,'','','','',''); -insert into tt values (91,92,'','','','',''); -insert into tt values (92,93,'','','','',''); -insert into tt values (93,94,'','','','',''); -insert into tt values (94,95,'','','','',''); -insert into tt values (95,96,'','','','',''); -insert into tt values (96,97,'','','','',''); -insert into tt values (97,98,'','','','',''); -insert into tt values (98,99,'','','','',''); -insert into tt values (99,100,'','','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='null this 0' where id=0; -update noar ti set v0='null this 0' where id=0; -update noar tt set v1='null is 1' where id=0; -update noar ti set v1='null is 1' where id=0; -update noar tt set v2='null a 2' where id=0; -update noar ti set v2='null a 2' where id=0; -update noar tt set v3='null test 3' where id=0; -update noar ti set v3='null test 3' where id=0; -update noar tt set v0='this 0' where id=1; -update noar ti set v0='this 0' where id=1; -update noar tt set v1='is 1' where id=1; -update noar ti set v1='is 1' where id=1; -update noar tt set v2='another 2' where id=1; -update noar ti set v2='another 2' where id=1; -update noar tt set v3='test 3' where id=1; -update noar ti set v3='test 3' where id=1; -update noar tt set v0='K0W6GSMZDOZSZR4MMED85PF5WJ9IWV8785BFW1FNVMT5X8E2TOYD6ARV8FHJIBJFOJG78VMWR5OQNT8MRSJY8U1YRU759VGVPCDN1M1YF5BNR1R9P60U0VIW3UQJLWBUBEM7HC4XZ1YC4KQI3WTSCCQJ86I2AYN84ZD620ZOESK6J3L5BG7SWPBZZ1X69CVEOQW6B2IY19K39RMI96NAET67E4GCU6NDPH94HO5RX776UAINOL2SCPDTN8EPNF2DC' where id=2; -update noar ti set v0='K0W6GSMZDOZSZR4MMED85PF5WJ9IWV8785BFW1FNVMT5X8E2TOYD6ARV8FHJIBJFOJG78VMWR5OQNT8MRSJY8U1YRU759VGVPCDN1M1YF5BNR1R9P60U0VIW3UQJLWBUBEM7HC4XZ1YC4KQI3WTSCCQJ86I2AYN84ZD620ZOESK6J3L5BG7SWPBZZ1X69CVEOQW6B2IY19K39RMI96NAET67E4GCU6NDPH94HO5RX776UAINOL2SCPDTN8EPNF2DC' where id=2; -update noar tt set v1='Y1AQIBH8DKUGNVBYW8RJBE9NCSLAUNAUBC4VSEBE5M8R3Z2CQRKA7B51WO0U4BH2P7DDWL5UEZBA1Z2F32STCUOEBB5LD157F64EHDJ9E5UDTTXU7O8YRJC6E44R0R0TNFQ3XJ5AAP4TM46XQDJE9Y9PWQEXT9XOGSINUP5WYKTPRO436B5OYOKHDPELSLR2ABH9896GJ9PPZ7PIR9JB64UWPOW9KMVOJG1RWQHU2G4Q3FJLYJV2AONY6FBXJ25W0' where id=2; -update noar ti set v1='Y1AQIBH8DKUGNVBYW8RJBE9NCSLAUNAUBC4VSEBE5M8R3Z2CQRKA7B51WO0U4BH2P7DDWL5UEZBA1Z2F32STCUOEBB5LD157F64EHDJ9E5UDTTXU7O8YRJC6E44R0R0TNFQ3XJ5AAP4TM46XQDJE9Y9PWQEXT9XOGSINUP5WYKTPRO436B5OYOKHDPELSLR2ABH9896GJ9PPZ7PIR9JB64UWPOW9KMVOJG1RWQHU2G4Q3FJLYJV2AONY6FBXJ25W0' where id=2; -update noar tt set v2='09PCLQORLSJ5YF7N8MCH3BBWTHOGUI04V0AT7BUT09E35UG3RVA6EV96SK3VVS73TAG6K1ZL3MNVYU2Y7WSBR4HS7DX7RV046KUBG6GGORQ3OJIT9XMOA7GFAX0GPSV2KBVIVMU34DYNL96SBBOTL6ULYKA7HYEI10H0Q61Z338YPWTAITE8SP4V0NIT3Q01VOFNSDVWZCW4D4MJB8WWW1G6JNKFCNSAA13WZ9HEPQU1BAVKQGGYTR4OOWJZTZMQ9' where id=2; -update noar ti set v2='09PCLQORLSJ5YF7N8MCH3BBWTHOGUI04V0AT7BUT09E35UG3RVA6EV96SK3VVS73TAG6K1ZL3MNVYU2Y7WSBR4HS7DX7RV046KUBG6GGORQ3OJIT9XMOA7GFAX0GPSV2KBVIVMU34DYNL96SBBOTL6ULYKA7HYEI10H0Q61Z338YPWTAITE8SP4V0NIT3Q01VOFNSDVWZCW4D4MJB8WWW1G6JNKFCNSAA13WZ9HEPQU1BAVKQGGYTR4OOWJZTZMQ9' where id=2; -update noar tt set v3='PE352OYVX26PJUMOM1A7BHE9ZUHYT0LCL0XNICJPNIT527WN93EK1N50XY7NMHGEIKNCV5PN06LFZG5IOJLHYEHD9LAJFY5U4ZFMFPWDCNS4U3ORYAQSTU1VOW5YKYAX6TRNDC1JJCMYDMHGZ3XNYXY2LCIGDIC3FBLOONH2QDW6DM9C4Q2WYSOTI88H3E0DXEOI29WV5P63DFK20CI1I6VIVT2E29FO72U7W7BS1FD36W4XYQQ6WANI63G1TZ9Y9' where id=2; -update noar ti set v3='PE352OYVX26PJUMOM1A7BHE9ZUHYT0LCL0XNICJPNIT527WN93EK1N50XY7NMHGEIKNCV5PN06LFZG5IOJLHYEHD9LAJFY5U4ZFMFPWDCNS4U3ORYAQSTU1VOW5YKYAX6TRNDC1JJCMYDMHGZ3XNYXY2LCIGDIC3FBLOONH2QDW6DM9C4Q2WYSOTI88H3E0DXEOI29WV5P63DFK20CI1I6VIVT2E29FO72U7W7BS1FD36W4XYQQ6WANI63G1TZ9Y9' where id=2; -update noar tt set v0='75RKPVVH4RWVRNCN2V6UOWSVEBPEROBIOL9IYCMUVFYKCEC39SJHZPMNRXKZUWDHAOFAI8NGMURUPJ0RUBC6JQW2HAKWQLQB1UXAP0CPCGL4XTWU1TSDM9ES7IOIK5S6Z133NCYW0LLGNWCE5O6ZK5AWAJVIG5J2WVTRN4M5D649CYOH5E0WEF31BO5FZ5ZH3EWJ7V3SL3AF4VOYHGYWPOMQ8PS1RT4MARY3O9ZVN1SMG2878CFWU7LXWP3Q47Q82' where id=3; -update noar ti set v0='75RKPVVH4RWVRNCN2V6UOWSVEBPEROBIOL9IYCMUVFYKCEC39SJHZPMNRXKZUWDHAOFAI8NGMURUPJ0RUBC6JQW2HAKWQLQB1UXAP0CPCGL4XTWU1TSDM9ES7IOIK5S6Z133NCYW0LLGNWCE5O6ZK5AWAJVIG5J2WVTRN4M5D649CYOH5E0WEF31BO5FZ5ZH3EWJ7V3SL3AF4VOYHGYWPOMQ8PS1RT4MARY3O9ZVN1SMG2878CFWU7LXWP3Q47Q82' where id=3; -update noar tt set v1='PIGNY61M1LRE6P523M94TKDPSQUR48UYG570WYL123AC6M7TCTZVWRFNYMAQIYJ0GI8CT3FV3ATVR8UT2I10G8XKGXOKNTMJ7B6PLNNVQWRW18CP528DSQKNWB5KQKMW753VETUL55FEPJ516XF5AUCTPBDHUT1SVFG8HUFP7U54JC656F2CFLY7AL0MAX0J35E0VYLPK3378NW2G99E8MJJULBFAAZP4WZ9ALXW45R4X75ZETM1FQR7AYW1H3LSM' where id=3; -update noar ti set v1='PIGNY61M1LRE6P523M94TKDPSQUR48UYG570WYL123AC6M7TCTZVWRFNYMAQIYJ0GI8CT3FV3ATVR8UT2I10G8XKGXOKNTMJ7B6PLNNVQWRW18CP528DSQKNWB5KQKMW753VETUL55FEPJ516XF5AUCTPBDHUT1SVFG8HUFP7U54JC656F2CFLY7AL0MAX0J35E0VYLPK3378NW2G99E8MJJULBFAAZP4WZ9ALXW45R4X75ZETM1FQR7AYW1H3LSM' where id=3; -update noar tt set v2='4SW5NYQDT95S713YORAUW5AZUJACT2EAKMD4SRT8SKCHLOAMD4L1XHCGVZOFGCROW1QT0SEKR25RP1MVWPWMGUFRVBT3ZV0E2B2QMTRH8MZIOGLR25NGNSHI9CKGJA4LT1K6SJ5O6JYSRTH3BGZHP3LNLV37HVA9NZBBA72LVG0MDIRAPDZKEGZBSQLWJDA0Z9S4WEW5IM32UDVVXC1W3FKL95N5Q76A3DS4EFQ28Y1SL8BKF67VMJMPKMT95WXES' where id=3; -update noar ti set v2='4SW5NYQDT95S713YORAUW5AZUJACT2EAKMD4SRT8SKCHLOAMD4L1XHCGVZOFGCROW1QT0SEKR25RP1MVWPWMGUFRVBT3ZV0E2B2QMTRH8MZIOGLR25NGNSHI9CKGJA4LT1K6SJ5O6JYSRTH3BGZHP3LNLV37HVA9NZBBA72LVG0MDIRAPDZKEGZBSQLWJDA0Z9S4WEW5IM32UDVVXC1W3FKL95N5Q76A3DS4EFQ28Y1SL8BKF67VMJMPKMT95WXES' where id=3; -update noar tt set v3='JL9GZP7FPVMRNII2C3GB09OESYN1QNU5GFL5O57MJU9NJJWONWO4NDDL2KD4B5OJ5SEBY3KCL7629WX37UTW0B9H38QOHGE5VMJKSTDS3VSPRM3SRF4CUD780X8NBEWJAS81FF3UT01JVSLTC8SOIHA7C4J5W68Z3KC2T8DZXS9JI3BF9EYU9HY372EUOENHRBYJWTDF9ODVOXN40AT1WE4HBR6A7CXDY2U0W0BW0OAZ9QDX9EYHZZFDK4LHZ2ZYE' where id=3; -update noar ti set v3='JL9GZP7FPVMRNII2C3GB09OESYN1QNU5GFL5O57MJU9NJJWONWO4NDDL2KD4B5OJ5SEBY3KCL7629WX37UTW0B9H38QOHGE5VMJKSTDS3VSPRM3SRF4CUD780X8NBEWJAS81FF3UT01JVSLTC8SOIHA7C4J5W68Z3KC2T8DZXS9JI3BF9EYU9HY372EUOENHRBYJWTDF9ODVOXN40AT1WE4HBR6A7CXDY2U0W0BW0OAZ9QDX9EYHZZFDK4LHZ2ZYE' where id=3; -update noar tt set v0='O732IS5IKPAMYRXPBQ22C8BTJ3F6F1INXZNSF327JE6CRBUEZNTZRB7S4S6MYUGTJMMKL8QHDROGVO9UEKDF2OOCSZQVKFLT9GE55DFYRTSROPLKV7R60DZZ3OQ03XFOANYU62JDWMBPEL9KN2SK5O55A865ZLKU5GEVZ88OLAVM4JBUDPQW7U1N9AQFRKLG8Z8XJDR7LV7R9GKUVR5FM1DC2BDNNXCAI9R8UQ9C5D7CCSO9DZBGBO84812S7BDTT' where id=4; -update noar ti set v0='O732IS5IKPAMYRXPBQ22C8BTJ3F6F1INXZNSF327JE6CRBUEZNTZRB7S4S6MYUGTJMMKL8QHDROGVO9UEKDF2OOCSZQVKFLT9GE55DFYRTSROPLKV7R60DZZ3OQ03XFOANYU62JDWMBPEL9KN2SK5O55A865ZLKU5GEVZ88OLAVM4JBUDPQW7U1N9AQFRKLG8Z8XJDR7LV7R9GKUVR5FM1DC2BDNNXCAI9R8UQ9C5D7CCSO9DZBGBO84812S7BDTT' where id=4; -update noar tt set v1='R92NFJNZ1ZBJJ44PGPPJHP3QL89MA6GL8J4PVUIZ0QD59JSQMKF2T36UK1CKVMC41D92UJHZO9X8VDVJSV9IV790JVZRDOSDTRVN18VA2GHMMBRIJHVHH2TCQ2XX43YPY00RBNEF9XQFPFH0WPOKL01RRIIMTAN9CCOWFLHADU54HCKLIK3A8FB0M76NQFY85GOXWLENR7E4LEDI60II5ZUYYTND83IG4XCTJSRLJU6FGHB5EX10K67U6SB4LO5V5' where id=4; -update noar ti set v1='R92NFJNZ1ZBJJ44PGPPJHP3QL89MA6GL8J4PVUIZ0QD59JSQMKF2T36UK1CKVMC41D92UJHZO9X8VDVJSV9IV790JVZRDOSDTRVN18VA2GHMMBRIJHVHH2TCQ2XX43YPY00RBNEF9XQFPFH0WPOKL01RRIIMTAN9CCOWFLHADU54HCKLIK3A8FB0M76NQFY85GOXWLENR7E4LEDI60II5ZUYYTND83IG4XCTJSRLJU6FGHB5EX10K67U6SB4LO5V5' where id=4; -update noar tt set v2='W69H8Z6VZ8LA67X1IGDGBKWET2AUH4ZO7TG0T56TA2KX0MGY7QUJCW7VO26KYI2UPHITIR62NVN68V4W3X1CQTQB9X5EVY5B8YZWZ3GGEA0EDZ8LLIFH30GA4LQRW1AVZG17M2MP49KF7CYRSZ38K97NTJWEBMQQ3H044BPR2408RASQRDKISLCLP9HI9HF3XZV8DWWUUXYKK5UVFOBPI5Q9EXOG3PG83J8T68VSEO26VMLREELCQDKUKSAQNJ76R' where id=4; -update noar ti set v2='W69H8Z6VZ8LA67X1IGDGBKWET2AUH4ZO7TG0T56TA2KX0MGY7QUJCW7VO26KYI2UPHITIR62NVN68V4W3X1CQTQB9X5EVY5B8YZWZ3GGEA0EDZ8LLIFH30GA4LQRW1AVZG17M2MP49KF7CYRSZ38K97NTJWEBMQQ3H044BPR2408RASQRDKISLCLP9HI9HF3XZV8DWWUUXYKK5UVFOBPI5Q9EXOG3PG83J8T68VSEO26VMLREELCQDKUKSAQNJ76R' where id=4; -update noar tt set v3='Y7OHOAFHJXBXCX6E68T44HCLCR708OZTWB0KVUNVHOAJBO639Q5Z9V96RCOA170Z7HYCI1HJ8A53SPTOTPZGSGS9U4HIY9R6K5Z45UGZ4RXQ61818OUPLO6BSRA0H3JW41I95GFAH1WRGT9DS96J5X9C66V4KHNO6ZRK4HLBIYCEILURCLYNRGRBJBK7CL1YYIHN2TQ9J61XEN2MMP6HCSU8VGWFYGIV5VNSCQPDRGLAD97NI08W5C3KTEZ2R1W3A' where id=4; -update noar ti set v3='Y7OHOAFHJXBXCX6E68T44HCLCR708OZTWB0KVUNVHOAJBO639Q5Z9V96RCOA170Z7HYCI1HJ8A53SPTOTPZGSGS9U4HIY9R6K5Z45UGZ4RXQ61818OUPLO6BSRA0H3JW41I95GFAH1WRGT9DS96J5X9C66V4KHNO6ZRK4HLBIYCEILURCLYNRGRBJBK7CL1YYIHN2TQ9J61XEN2MMP6HCSU8VGWFYGIV5VNSCQPDRGLAD97NI08W5C3KTEZ2R1W3A' where id=4; -update noar tt set v0='QDFMNFO3RAM2I6KVQWF13POURUFMES6N4ES0BE84AZA52D0FL2I9QFKVSESY52EB6X5MJET7IFRCVGQ1SMZROWUJL37VM8JP384MQ18BXFTN57LGARZMLIHULU3TNYCJNJDNEEQW4EYHAXR6WO3FD3I0L7O941H54P18517FB67EB21NXPTIVLZDZPM97Q6PHJ01AWUYMY6D342YLPN73LY3Y6VW6EUZKFBULZ83VFQWTDQLKFP5HNPVBHE0ZAL65' where id=5; -update noar ti set v0='QDFMNFO3RAM2I6KVQWF13POURUFMES6N4ES0BE84AZA52D0FL2I9QFKVSESY52EB6X5MJET7IFRCVGQ1SMZROWUJL37VM8JP384MQ18BXFTN57LGARZMLIHULU3TNYCJNJDNEEQW4EYHAXR6WO3FD3I0L7O941H54P18517FB67EB21NXPTIVLZDZPM97Q6PHJ01AWUYMY6D342YLPN73LY3Y6VW6EUZKFBULZ83VFQWTDQLKFP5HNPVBHE0ZAL65' where id=5; -update noar tt set v1='LS0BRZHH02R0T1AR4Z5NDJS1B8UX1ZITUJDSJBWMD0LO8SB9VG3UDIMBVEXQNIQ6OF7RWDH52SITB3RX7JPVTH00AXP9ORGVAJQKO9XVSN6NQ5AWTE0QDSU8WZHO723LF1SZEZBKO3RO2XFWPPLWO0P6JH6NMD0EGM4YJ4AVMP9L0P48OZW90QCQHM8J4V10SAXAWSVNVBBLVKO5K3BFE49MCJOZ2QJIFN7DJRXFZ7PYV1O0X0FK46216OQVPW0B6' where id=5; -update noar ti set v1='LS0BRZHH02R0T1AR4Z5NDJS1B8UX1ZITUJDSJBWMD0LO8SB9VG3UDIMBVEXQNIQ6OF7RWDH52SITB3RX7JPVTH00AXP9ORGVAJQKO9XVSN6NQ5AWTE0QDSU8WZHO723LF1SZEZBKO3RO2XFWPPLWO0P6JH6NMD0EGM4YJ4AVMP9L0P48OZW90QCQHM8J4V10SAXAWSVNVBBLVKO5K3BFE49MCJOZ2QJIFN7DJRXFZ7PYV1O0X0FK46216OQVPW0B6' where id=5; -update noar tt set v2='A4C7QHK8HMB9NSK75LAALP92FWEIU68ZB8FBWCPUXMIJQQN52MW3BQP55B878AC95ZZYJBPKKPWP1DJMTCTAD5TU4S6U1YI46VUKHZ8FNRIHJ05U3A4B4P1Z9XV6QV1KH66ITXIDK3P9DKDQEI2MB50G580JYVQL46K467K3KLIFVE4OFM2BX8JJLPPKD66J7DBUZOCWSIP5N9CV3059KG6X4L3IV3GIDDGFFRTQDDX92IS5ZTJM0HUSI3EO3XPDS' where id=5; -update noar ti set v2='A4C7QHK8HMB9NSK75LAALP92FWEIU68ZB8FBWCPUXMIJQQN52MW3BQP55B878AC95ZZYJBPKKPWP1DJMTCTAD5TU4S6U1YI46VUKHZ8FNRIHJ05U3A4B4P1Z9XV6QV1KH66ITXIDK3P9DKDQEI2MB50G580JYVQL46K467K3KLIFVE4OFM2BX8JJLPPKD66J7DBUZOCWSIP5N9CV3059KG6X4L3IV3GIDDGFFRTQDDX92IS5ZTJM0HUSI3EO3XPDS' where id=5; -update noar tt set v3='D000YBD5B7GH5C90XTPYZSPH5GTQYSXOE96NSGCARPR0TYQIVAOA84QNZF2XKNVDC8BC2EMHH8SHH0377XVAESNBDH2B2H741Y0ZWP6VVGR91F5CWTYVD1EAK6QXEHUNUKWLRVMNCMIC8E2WAVOY59ERMKZPYUN3IEFIIPTOMT1SFYM27EZLZFESH4RXDV1W3CZTP79VQVKVSZTQRSJTE03N9WV3K8X6NF409ON9IEDNHABZDJZILRC1XKLL3CRUI' where id=5; -update noar ti set v3='D000YBD5B7GH5C90XTPYZSPH5GTQYSXOE96NSGCARPR0TYQIVAOA84QNZF2XKNVDC8BC2EMHH8SHH0377XVAESNBDH2B2H741Y0ZWP6VVGR91F5CWTYVD1EAK6QXEHUNUKWLRVMNCMIC8E2WAVOY59ERMKZPYUN3IEFIIPTOMT1SFYM27EZLZFESH4RXDV1W3CZTP79VQVKVSZTQRSJTE03N9WV3K8X6NF409ON9IEDNHABZDJZILRC1XKLL3CRUI' where id=5; -update noar tt set v0='XK4GTRA9D3OXXOTDRAOW18R4H6KFN8YQ6XI8K8B14UR3H5XOQTB3KP88NTVR33BE3EQFO4G9YXDD1BGV038EISPM8QZUU523UK2JFBU368LL68YZIAONYPTV0X6FF634FOOY9OJY5HR5PVUXUMFRGBGAJE162SF4M5275AF7AZUL57LMS3KPNBU78J13M071SQ3LJGYQ40SK8PD7WEVPCB6B07TZG1D9J7HS1VNVRZYZN2JQVLLVUV5IISHOFRI94' where id=6; -update noar ti set v0='XK4GTRA9D3OXXOTDRAOW18R4H6KFN8YQ6XI8K8B14UR3H5XOQTB3KP88NTVR33BE3EQFO4G9YXDD1BGV038EISPM8QZUU523UK2JFBU368LL68YZIAONYPTV0X6FF634FOOY9OJY5HR5PVUXUMFRGBGAJE162SF4M5275AF7AZUL57LMS3KPNBU78J13M071SQ3LJGYQ40SK8PD7WEVPCB6B07TZG1D9J7HS1VNVRZYZN2JQVLLVUV5IISHOFRI94' where id=6; -update noar tt set v1='YAY4QHWIZ1RZFFYDNRYNUGXUAT9JT3COKZLWY9PR0G6WY8RS7G1BVX9F7FRNTYQKSOZDJ7J2N58WQEOVVH9T2P4ILBSJRZ9S02DV15C1F6TLWGT9VP8CIB8S1C6GNMR2GT7WNFICIPELB53NZVU7DXDTMDFAXTQL0JC7TG9GTUW5LE49MFZA2XEVSVLPEU6WYNGQCJ6U2MG3PRYYF3MZO59P1D6GSSWAGI2IYBMU9RXPT976F7KVW7FTQ9OHWKEKU' where id=6; -update noar ti set v1='YAY4QHWIZ1RZFFYDNRYNUGXUAT9JT3COKZLWY9PR0G6WY8RS7G1BVX9F7FRNTYQKSOZDJ7J2N58WQEOVVH9T2P4ILBSJRZ9S02DV15C1F6TLWGT9VP8CIB8S1C6GNMR2GT7WNFICIPELB53NZVU7DXDTMDFAXTQL0JC7TG9GTUW5LE49MFZA2XEVSVLPEU6WYNGQCJ6U2MG3PRYYF3MZO59P1D6GSSWAGI2IYBMU9RXPT976F7KVW7FTQ9OHWKEKU' where id=6; -update noar tt set v2='47G26074KUHEAMXLO8QFGN2ZW43TX04A7DRFPG07QO76XMS10OX8WGN7V6PVYHCGZ4CKU2LTUU3HD1KG4V8GAKV3FHV086X5IUPJNODC6SA34XZJ379Z7V89WNRJ4G3IR67DFD2237S6D3DDM6RINUBRXSXAFBYMD26K3VY2C0AGEGJWUM81D5RBFFKGX32YFK3945PDSH6NQH4K7JA213HMEXLE2N696WX92L2BB4REVUW1PDI7IYJ35BQ75VX2Z' where id=6; -update noar ti set v2='47G26074KUHEAMXLO8QFGN2ZW43TX04A7DRFPG07QO76XMS10OX8WGN7V6PVYHCGZ4CKU2LTUU3HD1KG4V8GAKV3FHV086X5IUPJNODC6SA34XZJ379Z7V89WNRJ4G3IR67DFD2237S6D3DDM6RINUBRXSXAFBYMD26K3VY2C0AGEGJWUM81D5RBFFKGX32YFK3945PDSH6NQH4K7JA213HMEXLE2N696WX92L2BB4REVUW1PDI7IYJ35BQ75VX2Z' where id=6; -update noar tt set v3='2LTHQTEYOWTTQFD3WBBCKUI6BPT889OLB28X79EMH2T44T0RK6KN9MAO5THOQ5J77GB1NFTILR1PFBRXG9LQYJ79CNTOFCNQF8CR0OA9C8QGAVY318BIWXEKFWOBCZMFNBDJQX1D4LBQUIBWYWLKK3XIZR6AAS413W2WVXVEL7B1MVWOC3JJPF1PL9TLLZCPNWZQU75FB45P1G8LJB4B32DUA6R45T6TXYQS4LDC189VXEPNW836QNHFGMY3S5XVE' where id=6; -update noar ti set v3='2LTHQTEYOWTTQFD3WBBCKUI6BPT889OLB28X79EMH2T44T0RK6KN9MAO5THOQ5J77GB1NFTILR1PFBRXG9LQYJ79CNTOFCNQF8CR0OA9C8QGAVY318BIWXEKFWOBCZMFNBDJQX1D4LBQUIBWYWLKK3XIZR6AAS413W2WVXVEL7B1MVWOC3JJPF1PL9TLLZCPNWZQU75FB45P1G8LJB4B32DUA6R45T6TXYQS4LDC189VXEPNW836QNHFGMY3S5XVE' where id=6; -update noar tt set v0='TE4IFEDR8PCBJIQ4XEDO9WTM46X3HNHZ8HYTB8M8QXO4XARRPPA8HT6OZENYXX59PT0L9KFSYZ2VYWH8BA3WWTBGERGEHTHVSBKD0A9LCV6JLYKFWUIACXFV43R4NKQCJ8GIFXM1LMIKMDRV7JI7HZLBMGIEZE3JUDUF2E4HO5GHDQ8FQ9LTBL3IP34CYZNPD67LEOMSIO5277H8O5HWOZ2KKBS8FJY54XXTF7L4TM810QIV35F71UJC465PAVJOW' where id=7; -update noar ti set v0='TE4IFEDR8PCBJIQ4XEDO9WTM46X3HNHZ8HYTB8M8QXO4XARRPPA8HT6OZENYXX59PT0L9KFSYZ2VYWH8BA3WWTBGERGEHTHVSBKD0A9LCV6JLYKFWUIACXFV43R4NKQCJ8GIFXM1LMIKMDRV7JI7HZLBMGIEZE3JUDUF2E4HO5GHDQ8FQ9LTBL3IP34CYZNPD67LEOMSIO5277H8O5HWOZ2KKBS8FJY54XXTF7L4TM810QIV35F71UJC465PAVJOW' where id=7; -update noar tt set v1='9GD7WFEYYHFJ1QFQ2P0ZDBFBNJDNESVVSPBXD4825WP82FQOC7TU1296G278O80IHTPGDLVAGQ1A2SP3ES25QMXE7TH73A8645QFCNBY8UQY20UJEQVM8BOSNDFB79039YQUUCLL0HMLON0GEDS5JW3FUM7FURHXLU5SCZMRLZFAGEUVLBHKJTH2UXXZ8M9YKS5LNOW93ZO2B4NSUG8U9311G2WEZUISAFITADFZP2Z85OU1XLN96DT1JFHHZ3QBK' where id=7; -update noar ti set v1='9GD7WFEYYHFJ1QFQ2P0ZDBFBNJDNESVVSPBXD4825WP82FQOC7TU1296G278O80IHTPGDLVAGQ1A2SP3ES25QMXE7TH73A8645QFCNBY8UQY20UJEQVM8BOSNDFB79039YQUUCLL0HMLON0GEDS5JW3FUM7FURHXLU5SCZMRLZFAGEUVLBHKJTH2UXXZ8M9YKS5LNOW93ZO2B4NSUG8U9311G2WEZUISAFITADFZP2Z85OU1XLN96DT1JFHHZ3QBK' where id=7; -update noar tt set v2='FCTKB4A7L70RS7CWYUONWWH1A4HCZM2QAG5E933Z4B7NTN5PAROOMZWNONTDRHK8KGIAWLY3F75IOOW1BG0BZN0E16GBO4LBRP70V8IE3TDMXS2Q7E04DSY22CKQ68WAO2YASXJPJBT09GU9KNAGUZIDHC7O2BRE7R0R9H4DLRDMCUA40FKWFFAD1DLOJ2FVSV40FB8T589C10JDG0Y5KQYPQ0QVGXS1ND7UV1GQM215LT2EWG0IWWWZZWFKXRS9T' where id=7; -update noar ti set v2='FCTKB4A7L70RS7CWYUONWWH1A4HCZM2QAG5E933Z4B7NTN5PAROOMZWNONTDRHK8KGIAWLY3F75IOOW1BG0BZN0E16GBO4LBRP70V8IE3TDMXS2Q7E04DSY22CKQ68WAO2YASXJPJBT09GU9KNAGUZIDHC7O2BRE7R0R9H4DLRDMCUA40FKWFFAD1DLOJ2FVSV40FB8T589C10JDG0Y5KQYPQ0QVGXS1ND7UV1GQM215LT2EWG0IWWWZZWFKXRS9T' where id=7; -update noar tt set v3='6UZHIQ33GCT9GQBHN7CUP24EUR3DARFIFBTVVNYQBNSBWG7Q9EKJJIEZURTAWMNUCNFACD4GUK8XXSYGQY89BYYKW0YU2W5ITCS7Y0U5F8R5D9HIAOCO07XUNERE8QHU51H313JW16N5P2ZBN2V4HUZU3TMWN8B1GATROR80BPVDBUO7NYTUO6RROEZLANH2KOBSJ6YFXYUY9N2OJY7XV97IKWSE30R4JP1DB64N8IFBTLPMVRKL8SSP2BR76P7YI' where id=7; -update noar ti set v3='6UZHIQ33GCT9GQBHN7CUP24EUR3DARFIFBTVVNYQBNSBWG7Q9EKJJIEZURTAWMNUCNFACD4GUK8XXSYGQY89BYYKW0YU2W5ITCS7Y0U5F8R5D9HIAOCO07XUNERE8QHU51H313JW16N5P2ZBN2V4HUZU3TMWN8B1GATROR80BPVDBUO7NYTUO6RROEZLANH2KOBSJ6YFXYUY9N2OJY7XV97IKWSE30R4JP1DB64N8IFBTLPMVRKL8SSP2BR76P7YI' where id=7; -update noar tt set v0='K6LV9H9QJ71XWIHWV7RBHS9QPU8GWHE64VPDXZVDJKRM13A9J1RGVHOYQU7N5T11LLSSRLZH42I0MX5R82X84N03YZ954G5T52ALJC4DOBK6TPMCJTVGWN4AFVNUO0SJ0AIROS7AWRW8JUQZNAHXVOT11RU4KHOUI43QOUOKUD5TGMH8G0I0WG778DD4CR6P4AF334TZA2C34YFD3RUC547WIWZG97TYYKYZ8R3GTG64W09VMSUT3IPKL8E0G6H2O' where id=8; -update noar ti set v0='K6LV9H9QJ71XWIHWV7RBHS9QPU8GWHE64VPDXZVDJKRM13A9J1RGVHOYQU7N5T11LLSSRLZH42I0MX5R82X84N03YZ954G5T52ALJC4DOBK6TPMCJTVGWN4AFVNUO0SJ0AIROS7AWRW8JUQZNAHXVOT11RU4KHOUI43QOUOKUD5TGMH8G0I0WG778DD4CR6P4AF334TZA2C34YFD3RUC547WIWZG97TYYKYZ8R3GTG64W09VMSUT3IPKL8E0G6H2O' where id=8; -update noar tt set v1='64ZO05KGENRZWHG1OQO4R5MHCZNZXFW89PFLX5NK19I36I2NITA2AVQN7U9YALKZRWTHCOBMHVXX8PDRXOTNXGPY0P3OYBTJEOZ48V31R22S9J9I6TE8NBHGC24GYYEWWZZMZ6RWULP1CDVPVPECAB167CYMUEH6YJ0RMLVMZXN7ZANCMIQGVC7PWZHC6VMT4GHKGSHHMBG8EMCD35UWBV7S4KT77O6DGFOAPYPZ9YNEWZQ12C63ZK1ZTWL9ATE8U' where id=8; -update noar ti set v1='64ZO05KGENRZWHG1OQO4R5MHCZNZXFW89PFLX5NK19I36I2NITA2AVQN7U9YALKZRWTHCOBMHVXX8PDRXOTNXGPY0P3OYBTJEOZ48V31R22S9J9I6TE8NBHGC24GYYEWWZZMZ6RWULP1CDVPVPECAB167CYMUEH6YJ0RMLVMZXN7ZANCMIQGVC7PWZHC6VMT4GHKGSHHMBG8EMCD35UWBV7S4KT77O6DGFOAPYPZ9YNEWZQ12C63ZK1ZTWL9ATE8U' where id=8; -update noar tt set v2='55IVFEBV3CMCPLRBP7DGB8NT5J3CF27DHP0BCDEQHLSTGL46KM4ZP5DYIIHRFL4X70Q149GU1G4VOZWCCTC3VKP0C01QQ6VOQXT4X1LDNW2CSQRBG6PT3W9P5543AXO2LKSD1S53EEK7VI6THX8T9IGHB78ORLXHTWFOF1DTQ9D5IRIE9WSZHGQ5L8Z0BF7LT9FH4963IR3MES0GSYKUO8587G1LZEFCEAM720F1JJYGQJ5EAAMRNFAZ02MBBBRSM' where id=8; -update noar ti set v2='55IVFEBV3CMCPLRBP7DGB8NT5J3CF27DHP0BCDEQHLSTGL46KM4ZP5DYIIHRFL4X70Q149GU1G4VOZWCCTC3VKP0C01QQ6VOQXT4X1LDNW2CSQRBG6PT3W9P5543AXO2LKSD1S53EEK7VI6THX8T9IGHB78ORLXHTWFOF1DTQ9D5IRIE9WSZHGQ5L8Z0BF7LT9FH4963IR3MES0GSYKUO8587G1LZEFCEAM720F1JJYGQJ5EAAMRNFAZ02MBBBRSM' where id=8; -update noar tt set v3='5F05P8URBS9NAYRP75YYAEB2DF6O90RYGWS7XA0ZEHWIL4GD682WOVVWELDX90JSJ2YV3RK27QBGS6LJ1V1YOBROG4K8VRCMH80C54FZR9Z78KACY5W8B8Q6M3RWKWCBIVFI19SMDQM6YEYJZM1FT6VIRET5G4V9ZD0APKCWSI3JVKP3JIRKGUZXMG60TSNSZ7N4ZXIIXKBYB4AVL1QMWRTCIIMZKFJG8VOK8ITKOGP5H7IM2A31OHR60KMI26DA5' where id=8; -update noar ti set v3='5F05P8URBS9NAYRP75YYAEB2DF6O90RYGWS7XA0ZEHWIL4GD682WOVVWELDX90JSJ2YV3RK27QBGS6LJ1V1YOBROG4K8VRCMH80C54FZR9Z78KACY5W8B8Q6M3RWKWCBIVFI19SMDQM6YEYJZM1FT6VIRET5G4V9ZD0APKCWSI3JVKP3JIRKGUZXMG60TSNSZ7N4ZXIIXKBYB4AVL1QMWRTCIIMZKFJG8VOK8ITKOGP5H7IM2A31OHR60KMI26DA5' where id=8; -update noar tt set v0='8V6OS9RK6FCACS7MT1RL28SHETV1SDW2DC3SSHDZEU38FQTM0LOUX2EU1JPKIC6S7KZ3WQHR9G8REUSHRI2KY09J3JKC2SHMCZMR7FRSWDP7KZ7PNQ93VQUUX75VYFQ8NZYJOOEQ6PFCU0J7IW0BFPG777U0S0DJPD1V4X7C0M9EOLP9CCP5K4N9QNXLGVELV9LV2TGMI37JJCQC44G2CV64H7WSH6PAEQ4LIYJKL8UYLN9I3HU85JPMQH8KXDGJG' where id=9; -update noar ti set v0='8V6OS9RK6FCACS7MT1RL28SHETV1SDW2DC3SSHDZEU38FQTM0LOUX2EU1JPKIC6S7KZ3WQHR9G8REUSHRI2KY09J3JKC2SHMCZMR7FRSWDP7KZ7PNQ93VQUUX75VYFQ8NZYJOOEQ6PFCU0J7IW0BFPG777U0S0DJPD1V4X7C0M9EOLP9CCP5K4N9QNXLGVELV9LV2TGMI37JJCQC44G2CV64H7WSH6PAEQ4LIYJKL8UYLN9I3HU85JPMQH8KXDGJG' where id=9; -update noar tt set v1='KWRON81VJ4JE8B1OQZL08PJU844NBG4WJ2O1YIOOL7HTKFIG82U5GIY18HOIQXXNL6NAEUCME29M0KUT9RLXMHJDQ7J8FRPNV862J56815VRJLLP4ZG9AV3WNRDSMNVNQ4YK0VIXP76KSY43OI08U5K1T0RV2HPFGE2NXC2O3YPRBBQJR55LHU9TD34UWBMYKKYVV81ROHMHKYCZLZLMFK54B6XGZ5AYD0SC185QCCSGN9IDMJYL6KQELJBF1EY5H' where id=9; -update noar ti set v1='KWRON81VJ4JE8B1OQZL08PJU844NBG4WJ2O1YIOOL7HTKFIG82U5GIY18HOIQXXNL6NAEUCME29M0KUT9RLXMHJDQ7J8FRPNV862J56815VRJLLP4ZG9AV3WNRDSMNVNQ4YK0VIXP76KSY43OI08U5K1T0RV2HPFGE2NXC2O3YPRBBQJR55LHU9TD34UWBMYKKYVV81ROHMHKYCZLZLMFK54B6XGZ5AYD0SC185QCCSGN9IDMJYL6KQELJBF1EY5H' where id=9; -update noar tt set v2='8RUNX4TUNHBV7J7WBPXMC1CFQHZXJ9XSIG6DVRX6V2VO5UN7IGPIGTIJ8U879ZRX4ES3QT0F4272DUY8AK7HNDMJC8630X00T5JX4NJYTPVJTI43N8GJWAZSSMYZZY5DSPQX0RPA2RBA453WZ234T4RDLJRCEE0S4A2PWAW5468P56G0GQKVD7SSLAIAG8AFIO44V2IN1EADKA2Q5NX5JDTKNVUFWSZBNPM3NZKC6IMJJYJU4MFBPGFGIK58AVUPK' where id=9; -update noar ti set v2='8RUNX4TUNHBV7J7WBPXMC1CFQHZXJ9XSIG6DVRX6V2VO5UN7IGPIGTIJ8U879ZRX4ES3QT0F4272DUY8AK7HNDMJC8630X00T5JX4NJYTPVJTI43N8GJWAZSSMYZZY5DSPQX0RPA2RBA453WZ234T4RDLJRCEE0S4A2PWAW5468P56G0GQKVD7SSLAIAG8AFIO44V2IN1EADKA2Q5NX5JDTKNVUFWSZBNPM3NZKC6IMJJYJU4MFBPGFGIK58AVUPK' where id=9; -update noar tt set v3='PZC7VKRIK8R2RQD4WGYC0ZBI53AOWTM1KG0QQ1KQWH3MM046P38W2F7YKZCDJCC3JZE7LUCFMJ1ZXSYLI0KUN7V4OTHB2PWHB6S2RJHY3S7LEZ1TA4O3R93HF351OPLNKCDNX3XL7JJI341TUNOVH0YTZ7WN9Z7HUTQ9N030AMLSL081NMYD8HRMJCAQJB6XXYR7R9XBN6SJ8VC9NRRWQQ49H62E1X71QSDRO47JUT9FS7CCWB1RMUPFMW52VPAQ1' where id=9; -update noar ti set v3='PZC7VKRIK8R2RQD4WGYC0ZBI53AOWTM1KG0QQ1KQWH3MM046P38W2F7YKZCDJCC3JZE7LUCFMJ1ZXSYLI0KUN7V4OTHB2PWHB6S2RJHY3S7LEZ1TA4O3R93HF351OPLNKCDNX3XL7JJI341TUNOVH0YTZ7WN9Z7HUTQ9N030AMLSL081NMYD8HRMJCAQJB6XXYR7R9XBN6SJ8VC9NRRWQQ49H62E1X71QSDRO47JUT9FS7CCWB1RMUPFMW52VPAQ1' where id=9; -update noar tt set v0='TILB2FVJ9E89CM9EMNGMKAG05LA9B6JBOWM4CT7UAE5DY53HXMVGJFC75Z2NZFW1YZZZIB8YTTBUBY0O5JKL5XH3WN8KAB6844VRMKYA5OC1X9YD4X3UTYZ01YPK3YF5LK977KZ6X5TBF5X2QVVZPY3KDQ44DFM5POB3EJHM5B5CV42LML5S04XB6YIB3H9NQDJIXAXS58SK5NHQUZR4S8EFHOEV96D5UKII9P8PQL1JGP15KTT70XSQEDJJ4JNH6' where id=10; -update noar ti set v0='TILB2FVJ9E89CM9EMNGMKAG05LA9B6JBOWM4CT7UAE5DY53HXMVGJFC75Z2NZFW1YZZZIB8YTTBUBY0O5JKL5XH3WN8KAB6844VRMKYA5OC1X9YD4X3UTYZ01YPK3YF5LK977KZ6X5TBF5X2QVVZPY3KDQ44DFM5POB3EJHM5B5CV42LML5S04XB6YIB3H9NQDJIXAXS58SK5NHQUZR4S8EFHOEV96D5UKII9P8PQL1JGP15KTT70XSQEDJJ4JNH6' where id=10; -update noar tt set v1='H7RDRMIRV69WXYS228RT55O7FHO1JN5VRR8S58RO6IBJE7HG7JQ7I7CBLWWZD08J6BK5EEKGNZVTXIZ3U326GBL3TWGWL6PMEQLM38KDMG702CV3CBH130GH11RG7WJE7PDD0RUICAQS801CLCJWAJFFDTMFTQCP4WN56Z5ZTXBIDDGT8YW09CHMTYPR1NOXWG9BW3052F1EM3QKBZ9A92ZUB991L1LOH7FM7QSFPMW7UO6DRYJG5K5V1XTPC9T88' where id=10; -update noar ti set v1='H7RDRMIRV69WXYS228RT55O7FHO1JN5VRR8S58RO6IBJE7HG7JQ7I7CBLWWZD08J6BK5EEKGNZVTXIZ3U326GBL3TWGWL6PMEQLM38KDMG702CV3CBH130GH11RG7WJE7PDD0RUICAQS801CLCJWAJFFDTMFTQCP4WN56Z5ZTXBIDDGT8YW09CHMTYPR1NOXWG9BW3052F1EM3QKBZ9A92ZUB991L1LOH7FM7QSFPMW7UO6DRYJG5K5V1XTPC9T88' where id=10; -update noar tt set v2='VPURGZP03AYF64VCYB79C2MJGMOW3LOF4D9U645M5CFFOPF2T5BZIXNLCAHLVOAC27N60G672FR4GPH8I3GRSDXYEIYJIKA2FDVGLZ434NT7F7C91PM9RV0X8PETPF0JTWYOJHD3VO1FJFCBT8AE60CS2GNUKZ04EAH524TMI3L6IGUYKJUTFBVI8F4KDEVKJPOFP175VF1MCQRBHYK9WP17LDWO1D3GDYIOIIJZFTISH65020Q1LMHXUT6K53C9P' where id=10; -update noar ti set v2='VPURGZP03AYF64VCYB79C2MJGMOW3LOF4D9U645M5CFFOPF2T5BZIXNLCAHLVOAC27N60G672FR4GPH8I3GRSDXYEIYJIKA2FDVGLZ434NT7F7C91PM9RV0X8PETPF0JTWYOJHD3VO1FJFCBT8AE60CS2GNUKZ04EAH524TMI3L6IGUYKJUTFBVI8F4KDEVKJPOFP175VF1MCQRBHYK9WP17LDWO1D3GDYIOIIJZFTISH65020Q1LMHXUT6K53C9P' where id=10; -update noar tt set v3='ERAEHB3K6FHNAM4V65KY2TOFFLTG8T6R7A9C3QEFSO63HU8RZ14GG2VPDA37HXNNKM6SUK7A3E6N5ZV58PJCSJO5XLRXDEUSMGFAU9ZWYZHQO74M9EX7GDBVUAI455ATIVE1C2OVDOXQBUFBMAOCFZOMIF4HLJI06FADRN9ESXB8HIAL285Y3W1SLSEH9I0J53MNRHM46O2S4HV9YI0UN9T8KI2CYQLKBMFIZWDF0AQLWDCZ6BWKVN0F9N5X2T07I' where id=10; -update noar ti set v3='ERAEHB3K6FHNAM4V65KY2TOFFLTG8T6R7A9C3QEFSO63HU8RZ14GG2VPDA37HXNNKM6SUK7A3E6N5ZV58PJCSJO5XLRXDEUSMGFAU9ZWYZHQO74M9EX7GDBVUAI455ATIVE1C2OVDOXQBUFBMAOCFZOMIF4HLJI06FADRN9ESXB8HIAL285Y3W1SLSEH9I0J53MNRHM46O2S4HV9YI0UN9T8KI2CYQLKBMFIZWDF0AQLWDCZ6BWKVN0F9N5X2T07I' where id=10; -update noar tt set v0='STFEB339U1N7HFMLLPQN3OP5Z3MJE4ACO02GT0YVVIPN2GH1TZHBUPJBQHHWXZ4WCXDVGUEH8MJWTS2FKBKYHN10K2ZHBYX1MFEOXGNHNCW951QCV7RSLN2CSHQU8PVNI4R68LMRY8RS0FIAHTTGU3EDM034IM7DIS310E6C0CB64RT3E1EQRPFJBI1M5W4D3WE39RLPLESPDA4XNCRIHAYPNH9SM2PB08L1VF4QVJFFR4J1JB91KR7P4Q8RGF5JP' where id=11; -update noar ti set v0='STFEB339U1N7HFMLLPQN3OP5Z3MJE4ACO02GT0YVVIPN2GH1TZHBUPJBQHHWXZ4WCXDVGUEH8MJWTS2FKBKYHN10K2ZHBYX1MFEOXGNHNCW951QCV7RSLN2CSHQU8PVNI4R68LMRY8RS0FIAHTTGU3EDM034IM7DIS310E6C0CB64RT3E1EQRPFJBI1M5W4D3WE39RLPLESPDA4XNCRIHAYPNH9SM2PB08L1VF4QVJFFR4J1JB91KR7P4Q8RGF5JP' where id=11; -update noar tt set v1='JZU6AZDFHLO4IVEZU2VKR8SQGEKTOVBWAVCFIC6O14RAB74WD4SY503KM4GH9R035XFUHB8T6I0SS2YNPG8ZZ1H5QFWOIREHA9NCLOJCESBNIWOJ3NFVF4OGL2Y02ELEA4WNH6G01GATZLEKCJH00RJKZRAGXEIW70CC2I80L3D0RSB5EB5FJEDZD6W71P7ALCWM8S32SGAMH2UQTUJBHWS0CQXEXKW4CWJ9A1XNMN6MNUINBW5OABATA016JTWWI' where id=11; -update noar ti set v1='JZU6AZDFHLO4IVEZU2VKR8SQGEKTOVBWAVCFIC6O14RAB74WD4SY503KM4GH9R035XFUHB8T6I0SS2YNPG8ZZ1H5QFWOIREHA9NCLOJCESBNIWOJ3NFVF4OGL2Y02ELEA4WNH6G01GATZLEKCJH00RJKZRAGXEIW70CC2I80L3D0RSB5EB5FJEDZD6W71P7ALCWM8S32SGAMH2UQTUJBHWS0CQXEXKW4CWJ9A1XNMN6MNUINBW5OABATA016JTWWI' where id=11; -update noar tt set v2='UM3E5UG6NTBWZI5111D0TVLF4RPDLJQQPQFX2KOCNYIH7KDSH2ZRU3KZOWLMX8GT7795548PFBPXAL4T072X7667ZVMKRQVIXN8IPBNM749OKXL3PPTWQIN9EZ2O1NOZOPG1GC7NI57X8RP0A6RU0ZJ5PCI99E0SYA5HH3RGFRJBCVU875WQQOKLGXJ3A63QX9GVC3BOLXQFNZSRNXYNZO3W0P991R0XPUHO6FV22935OM1N1F6PBHYSDN522COV6' where id=11; -update noar ti set v2='UM3E5UG6NTBWZI5111D0TVLF4RPDLJQQPQFX2KOCNYIH7KDSH2ZRU3KZOWLMX8GT7795548PFBPXAL4T072X7667ZVMKRQVIXN8IPBNM749OKXL3PPTWQIN9EZ2O1NOZOPG1GC7NI57X8RP0A6RU0ZJ5PCI99E0SYA5HH3RGFRJBCVU875WQQOKLGXJ3A63QX9GVC3BOLXQFNZSRNXYNZO3W0P991R0XPUHO6FV22935OM1N1F6PBHYSDN522COV6' where id=11; -update noar tt set v3='RNO6912YC082O2MX8E0F1B3S6A4ZSOWV44SUWB9KR6SO5WVUK42OAAS7CFYWAJ8E5CTHXFGS8XGDBFRRQ21B8IZHJ1RQNDO7537BWAL1ZZ9J4A90UNYGZYCX8RQLHQ6OERYZ2P2AMQME2ICDZWP7OZ0SU49A0DJ39T7FS16B7H60VX5S7G54BUZY52FZM107NPTT87F4D6NRNPZHZAH14AK3EZVTKVHGBCMFZKOKB66BGMZFAQEWM433QYHRUMFSG' where id=11; -update noar ti set v3='RNO6912YC082O2MX8E0F1B3S6A4ZSOWV44SUWB9KR6SO5WVUK42OAAS7CFYWAJ8E5CTHXFGS8XGDBFRRQ21B8IZHJ1RQNDO7537BWAL1ZZ9J4A90UNYGZYCX8RQLHQ6OERYZ2P2AMQME2ICDZWP7OZ0SU49A0DJ39T7FS16B7H60VX5S7G54BUZY52FZM107NPTT87F4D6NRNPZHZAH14AK3EZVTKVHGBCMFZKOKB66BGMZFAQEWM433QYHRUMFSG' where id=11; -update noar tt set v0='ZBTYZZQ6N1D6SYSGMVI9OXXHTGB47K1AE70DXFCZ08NSOR5SQXS31Y16Q1BCHBMPUMOOCUXBPUDXRWVLLHB6X4ATXWP7HCUFF6I68KC34ZI7RIR0QRT5RJ79709QX4GGY5D8QCDJ5MSS6JDP1WO0VFP14P9WDS59ONVEBPJ58VD6A168LZCV9FES66NQ9YUDTGP9L88VHP807A15JOXY1XAG2FBEJX6QVHKCFNOK5FCV24ZWRN8TJIPU6SS5OAAHP' where id=12; -update noar ti set v0='ZBTYZZQ6N1D6SYSGMVI9OXXHTGB47K1AE70DXFCZ08NSOR5SQXS31Y16Q1BCHBMPUMOOCUXBPUDXRWVLLHB6X4ATXWP7HCUFF6I68KC34ZI7RIR0QRT5RJ79709QX4GGY5D8QCDJ5MSS6JDP1WO0VFP14P9WDS59ONVEBPJ58VD6A168LZCV9FES66NQ9YUDTGP9L88VHP807A15JOXY1XAG2FBEJX6QVHKCFNOK5FCV24ZWRN8TJIPU6SS5OAAHP' where id=12; -update noar tt set v1='P2QESD5NKTQKDUSGDDL2G74XRQW8UB1VUWTFKF3W3Z5W5U5FEZ51IHO1D39YBZK479DDSYE1E6PV9A70WDI9HHWWZ4E41Z7CY896TOSCFCW3LW3BHLY4OSBEYDCIV9XHLNQMUWKNJZHAXM3K72LPLGBTOC4IKGZSMRC8S53DH1ZHVR45QOP8OPMM3T8KXDQEPWX6VJXRMSXE81J00AQ8P31Q7BHE60MX2GRFL7F137D22IEHH5W0559W0FYKL9HHQ' where id=12; -update noar ti set v1='P2QESD5NKTQKDUSGDDL2G74XRQW8UB1VUWTFKF3W3Z5W5U5FEZ51IHO1D39YBZK479DDSYE1E6PV9A70WDI9HHWWZ4E41Z7CY896TOSCFCW3LW3BHLY4OSBEYDCIV9XHLNQMUWKNJZHAXM3K72LPLGBTOC4IKGZSMRC8S53DH1ZHVR45QOP8OPMM3T8KXDQEPWX6VJXRMSXE81J00AQ8P31Q7BHE60MX2GRFL7F137D22IEHH5W0559W0FYKL9HHQ' where id=12; -update noar tt set v2='D8ISEBZFRCZHU6FRW6QUKHYPOHL5RNMIXP4CGNSIF1LKQP03YC7EY9Y75K5OLVRTJPZXOF6WWG8A66E6JR6PSTW5K9SDA5TQH7I5A9B8EQNVWD77C1L5Y4ZL26QY6W7G31T7FKMEJCPN6ZFM2D336D6NGL7SK7ODP891GYPZGKGITMGTPT1HZN9DDX7OJEOONH6SB2R1SW01MATJ80QDHO9X7MMWI2YA3LHA29DZTOS5BZU20CHSEKRFSWBXI78OL' where id=12; -update noar ti set v2='D8ISEBZFRCZHU6FRW6QUKHYPOHL5RNMIXP4CGNSIF1LKQP03YC7EY9Y75K5OLVRTJPZXOF6WWG8A66E6JR6PSTW5K9SDA5TQH7I5A9B8EQNVWD77C1L5Y4ZL26QY6W7G31T7FKMEJCPN6ZFM2D336D6NGL7SK7ODP891GYPZGKGITMGTPT1HZN9DDX7OJEOONH6SB2R1SW01MATJ80QDHO9X7MMWI2YA3LHA29DZTOS5BZU20CHSEKRFSWBXI78OL' where id=12; -update noar tt set v3='QZZGM5VHOHC036K76P4O6CVQBE680S04LQ5M4QA1G6941S2B5IP3SQFCUJ43ZHEF6W34P0TFB9X4BMI2I5FENA6B7VZ0MKPDT62E4L35WWG0F4VO5TFGYSXBP2Y0ZCWUYR914RUAN1882LR6D2U1N2LQDPOM0UBTVV1RGBSS9AH4Z79IBYZUBTGVSUU84CISE06ANE0WP9HAAJN62GLP61H7FW17EYQP41E52PU0MTET8EPKFP6NGW26LKICF0YT3' where id=12; -update noar ti set v3='QZZGM5VHOHC036K76P4O6CVQBE680S04LQ5M4QA1G6941S2B5IP3SQFCUJ43ZHEF6W34P0TFB9X4BMI2I5FENA6B7VZ0MKPDT62E4L35WWG0F4VO5TFGYSXBP2Y0ZCWUYR914RUAN1882LR6D2U1N2LQDPOM0UBTVV1RGBSS9AH4Z79IBYZUBTGVSUU84CISE06ANE0WP9HAAJN62GLP61H7FW17EYQP41E52PU0MTET8EPKFP6NGW26LKICF0YT3' where id=12; -update noar tt set v0='CBZ1HGVRQXVSPJXLTAEIOTXNVAR709NC14JTZADASW9BUUEA3U79Z39IM2OP487JCUO5IM332BWRREU5HLK5ZSWA87GOTJUYWX6ATF50J2NKC5C16XRT4TYDHWJZPPGK9BW6EQ9OY2S7TC7UF5R1SJ56AWA60MTDY5X5L4JSC5NV5X9ZV4UJID4MNABB7UNCSRGVNUO0UACKSV4MQ4NWRZ6XB0OKM9FWFA247E1PYPDVI77OUDQVZIKOIH45IHJWQ' where id=13; -update noar ti set v0='CBZ1HGVRQXVSPJXLTAEIOTXNVAR709NC14JTZADASW9BUUEA3U79Z39IM2OP487JCUO5IM332BWRREU5HLK5ZSWA87GOTJUYWX6ATF50J2NKC5C16XRT4TYDHWJZPPGK9BW6EQ9OY2S7TC7UF5R1SJ56AWA60MTDY5X5L4JSC5NV5X9ZV4UJID4MNABB7UNCSRGVNUO0UACKSV4MQ4NWRZ6XB0OKM9FWFA247E1PYPDVI77OUDQVZIKOIH45IHJWQ' where id=13; -update noar tt set v1='610HGZ8VZ9FP7L3LMRIJOO1RZHRF0HTLRPYXWIU1C3TBCA8EWD0O80JTGXSUDLD2FNXI38W7D7VJ4NOFYJEJYLH1SZJ0NR4TXJ7RJFHKB9G9HLKN5C0GEDMYGYKLHNXI78ORWX5NI3QHCL5TIV3YRSJZVG06FQGF51VT8CENST8X4K4H2Q41I3LQ7JYKT0MKP3DY8U1289AQF6PY4XD6PJHDQEWV1DEUL0PA5BU0MKXVQVQQG8PC1MW19Z7L5388E' where id=13; -update noar ti set v1='610HGZ8VZ9FP7L3LMRIJOO1RZHRF0HTLRPYXWIU1C3TBCA8EWD0O80JTGXSUDLD2FNXI38W7D7VJ4NOFYJEJYLH1SZJ0NR4TXJ7RJFHKB9G9HLKN5C0GEDMYGYKLHNXI78ORWX5NI3QHCL5TIV3YRSJZVG06FQGF51VT8CENST8X4K4H2Q41I3LQ7JYKT0MKP3DY8U1289AQF6PY4XD6PJHDQEWV1DEUL0PA5BU0MKXVQVQQG8PC1MW19Z7L5388E' where id=13; -update noar tt set v2='BKMBYMGDF76K3BIJM0OD0QUGMIVKGDUPHXQ9YJ29Z924MAI7QFI534ZLNOFJ2RFUXM5S6YZ4FEDRH48NHSH3DTHWHX31TFDAI6UT4VT569AGI3VNXQE2J0XKZ6T2QR42TQVQ963PYD9J12D0PQ5WDODAIGDKSC1UKMHUBUA7BFK11U0MV65DQYBLPBP32VZN47WRWKZ3JKWDLB0QAZP8RNOMUP8FXS90DDCF49S154G7HMR312I2HWMY3KQDO7MZE' where id=13; -update noar ti set v2='BKMBYMGDF76K3BIJM0OD0QUGMIVKGDUPHXQ9YJ29Z924MAI7QFI534ZLNOFJ2RFUXM5S6YZ4FEDRH48NHSH3DTHWHX31TFDAI6UT4VT569AGI3VNXQE2J0XKZ6T2QR42TQVQ963PYD9J12D0PQ5WDODAIGDKSC1UKMHUBUA7BFK11U0MV65DQYBLPBP32VZN47WRWKZ3JKWDLB0QAZP8RNOMUP8FXS90DDCF49S154G7HMR312I2HWMY3KQDO7MZE' where id=13; -update noar tt set v3='EMN0BPRMR96LBBCRB2HEVSN9Q9856EJD6J6633XDMUX754HXGX4X818JUJS1MLN7XPERDZG7L7G5MG6H7VPVOY34C7JSELCYLDSWUC69LX56JADK6TPXGGVHY7RSBV7E1BFGNC4WMS0FX5PXRI8O4FSEVTONLIPL6A2ZWY3SA96PPCPP09QN8SJF42DJZQ3TRLGEI1VXCJ8GYIP8WFQRQ7KJUEOMVDKJQTM6S1LB6UC07X3K1Q46BL5FZ6ZQC8ULB' where id=13; -update noar ti set v3='EMN0BPRMR96LBBCRB2HEVSN9Q9856EJD6J6633XDMUX754HXGX4X818JUJS1MLN7XPERDZG7L7G5MG6H7VPVOY34C7JSELCYLDSWUC69LX56JADK6TPXGGVHY7RSBV7E1BFGNC4WMS0FX5PXRI8O4FSEVTONLIPL6A2ZWY3SA96PPCPP09QN8SJF42DJZQ3TRLGEI1VXCJ8GYIP8WFQRQ7KJUEOMVDKJQTM6S1LB6UC07X3K1Q46BL5FZ6ZQC8ULB' where id=13; -update noar tt set v0='2PNWKYJ0IL35C8Y0M5151XVQ63SJVXGWI2D7M2ZIICHF5P40JP9OHT4IZJSLTIFPKD8UJJEZNHATHFYOG171NHM8DEDFHPUA0XXHQM2JG1RCGWYL7IXRFNLKTGGKJDBCAJMIP6A04GU0MVOSZ9D0T34K4P11ATH0J2CHKNYFQ5ZXN4C839MYDMY98GTNI52DWA1FU4MSHKC0EL5EJBK7MEKH1FNGKRWTLDVY82BINBGNO65FH7J6Q3TJ4X5CHTW0F' where id=14; -update noar ti set v0='2PNWKYJ0IL35C8Y0M5151XVQ63SJVXGWI2D7M2ZIICHF5P40JP9OHT4IZJSLTIFPKD8UJJEZNHATHFYOG171NHM8DEDFHPUA0XXHQM2JG1RCGWYL7IXRFNLKTGGKJDBCAJMIP6A04GU0MVOSZ9D0T34K4P11ATH0J2CHKNYFQ5ZXN4C839MYDMY98GTNI52DWA1FU4MSHKC0EL5EJBK7MEKH1FNGKRWTLDVY82BINBGNO65FH7J6Q3TJ4X5CHTW0F' where id=14; -update noar tt set v1='ETS35EEO8ERWB9ATR3OL6LZ7LZKSEM4SGCFC6IQ5DRYZXLRZNHI8HYUUTC3EIO239AOS9RTBXGUJK54E6UDON5WFCYOHYX5S4263ZOAGBBGDKNAAJWWH1QWNODYBBRW232HJU5UX6442E0K9X027FUFD23U9I3GXTPBWPDF60CA23ZTQ9A1WIK5W47DHESV73DHJTUOBWPVN3JTZ5VA1X4KOET333Q5XOSPE9NZTIVXUL7HR0HBR7P6BG20G4K7NL' where id=14; -update noar ti set v1='ETS35EEO8ERWB9ATR3OL6LZ7LZKSEM4SGCFC6IQ5DRYZXLRZNHI8HYUUTC3EIO239AOS9RTBXGUJK54E6UDON5WFCYOHYX5S4263ZOAGBBGDKNAAJWWH1QWNODYBBRW232HJU5UX6442E0K9X027FUFD23U9I3GXTPBWPDF60CA23ZTQ9A1WIK5W47DHESV73DHJTUOBWPVN3JTZ5VA1X4KOET333Q5XOSPE9NZTIVXUL7HR0HBR7P6BG20G4K7NL' where id=14; -update noar tt set v2='13QZSK0KQFU1YD4VIJQJNQYS29TI6FPIP6VWPND2YN4NJ6VDTUJWAQXAI7GYM8ZWZ81976RRWXBZJH5KGA0AGGI8DRAGC7HB7Q2FVUE4TK9OWRZ2M5IWH3ZIQBVXU17PTVHWB4ORY424H104NAKYJ4XAAI93VHHF07F4SBBRIRQTYOAL0YKVOX9JUKMNG61A6CO3C66G8HJG2A83VCQ36GYUAMKFOCSGCF6PF5DCJR08PC4AFC781E0MYBKZT3PD3' where id=14; -update noar ti set v2='13QZSK0KQFU1YD4VIJQJNQYS29TI6FPIP6VWPND2YN4NJ6VDTUJWAQXAI7GYM8ZWZ81976RRWXBZJH5KGA0AGGI8DRAGC7HB7Q2FVUE4TK9OWRZ2M5IWH3ZIQBVXU17PTVHWB4ORY424H104NAKYJ4XAAI93VHHF07F4SBBRIRQTYOAL0YKVOX9JUKMNG61A6CO3C66G8HJG2A83VCQ36GYUAMKFOCSGCF6PF5DCJR08PC4AFC781E0MYBKZT3PD3' where id=14; -update noar tt set v3='INTZ7B0FKLX6FP8USN5MSOQ3DRQQGPBAYY3C3VVSW67D9X5WZPQ2H4KTQQSPWH9DJYJ1AACYL53112HJPK9KFWEVAZBCZPZU24G018YCILZOAZSBN7X9VYOXP572924AB2FGITSWCGRN5LWRZ173HVE1GSY2TKK8CANS1752PGHZLA0XQXJ4N3NE0W5W8XYARFSPI6LAPLNF143N8ZOFOLRBVKA0BQMFKEBF4AHT7AGNB1O556D5Y906Y8WA50NA3' where id=14; -update noar ti set v3='INTZ7B0FKLX6FP8USN5MSOQ3DRQQGPBAYY3C3VVSW67D9X5WZPQ2H4KTQQSPWH9DJYJ1AACYL53112HJPK9KFWEVAZBCZPZU24G018YCILZOAZSBN7X9VYOXP572924AB2FGITSWCGRN5LWRZ173HVE1GSY2TKK8CANS1752PGHZLA0XQXJ4N3NE0W5W8XYARFSPI6LAPLNF143N8ZOFOLRBVKA0BQMFKEBF4AHT7AGNB1O556D5Y906Y8WA50NA3' where id=14; -update noar tt set v0='OMUCFK4FET86VL9K4Z3D7P92NDDEMMTWUY80OHR2DU2S77LUDZ15Y0J4AUDLT0XYSJBSG4LHOSBHXCQPQLRZ0XLOUC7C3KTOC6PPDFO5RHH41TZ2BV6ZPS1FXJAEGNSDQ9E08SCM0A09QJC445OVSQDR7AM5GV7RYRWH37HL3W8V3WDJ62N4IQHKH08TXE5LQWR5Y2GFQTT5320KSEER3IBVFS4FUCD6WX3GG40T4JCCDZ659FGJA0LM7PCMP3KJV' where id=15; -update noar ti set v0='OMUCFK4FET86VL9K4Z3D7P92NDDEMMTWUY80OHR2DU2S77LUDZ15Y0J4AUDLT0XYSJBSG4LHOSBHXCQPQLRZ0XLOUC7C3KTOC6PPDFO5RHH41TZ2BV6ZPS1FXJAEGNSDQ9E08SCM0A09QJC445OVSQDR7AM5GV7RYRWH37HL3W8V3WDJ62N4IQHKH08TXE5LQWR5Y2GFQTT5320KSEER3IBVFS4FUCD6WX3GG40T4JCCDZ659FGJA0LM7PCMP3KJV' where id=15; -update noar tt set v1='YLNX5N8CQ4AY5YU90RUT1UELWH2NVKI955NUJ4PD1ZPB25NY4VB5B1BV7KE490YA5CITNJR6RIW58EEF59HVJRN2H8UEHELYTID6QUA7YYQZS0S3L5RSRDV0WIYQCKVNFMBQXXFVJB109GRIPYHRWDDJ9FJ1X8EEH7JXZXLPT0JE4PMFA5RGF9PKYR6XAP5UZ75ZKHRZZW6X1T1PLHNOSH4XISR2F2WSCJ1B1H1O373OMNNK2V8P3APCT9Q6A15LC' where id=15; -update noar ti set v1='YLNX5N8CQ4AY5YU90RUT1UELWH2NVKI955NUJ4PD1ZPB25NY4VB5B1BV7KE490YA5CITNJR6RIW58EEF59HVJRN2H8UEHELYTID6QUA7YYQZS0S3L5RSRDV0WIYQCKVNFMBQXXFVJB109GRIPYHRWDDJ9FJ1X8EEH7JXZXLPT0JE4PMFA5RGF9PKYR6XAP5UZ75ZKHRZZW6X1T1PLHNOSH4XISR2F2WSCJ1B1H1O373OMNNK2V8P3APCT9Q6A15LC' where id=15; -update noar tt set v2='UUN41LU3WL80F1PGPS1SIQ6PHIXBUCZCHAFOQVWVCOXWJVYEO1JU9LU80HQWAN8V358AJN9JL2LR0NSKKD741ANQKUYG3S82SM7POWXHHPU7BA60CK6PCPQ4C6HF44I9UTAVLWU56XZPJK05ENY9K6ICTF3YXPV1984WTPRP3AD436MPE1KXIXT9U92FVMJ6U3QMSKGNSZVXELP849ZF5SA5EVS0729282903L0APHAOSORFTR6TUW0L7DI63TTC5' where id=15; -update noar ti set v2='UUN41LU3WL80F1PGPS1SIQ6PHIXBUCZCHAFOQVWVCOXWJVYEO1JU9LU80HQWAN8V358AJN9JL2LR0NSKKD741ANQKUYG3S82SM7POWXHHPU7BA60CK6PCPQ4C6HF44I9UTAVLWU56XZPJK05ENY9K6ICTF3YXPV1984WTPRP3AD436MPE1KXIXT9U92FVMJ6U3QMSKGNSZVXELP849ZF5SA5EVS0729282903L0APHAOSORFTR6TUW0L7DI63TTC5' where id=15; -update noar tt set v3='CRJ95A8151BNBTWQPQEQ0UX3WMYZHTS5I1PMZ0RD5YQDYVXF8K0NN9YF2CEK20EE2N9DG1MZSQDVHLN9R51SHCI7DQCBXRQJ61CNXD3KYDDKOE0RSGWUHCOB4DAC0VF8OBOZXTYDCQNAWBIY4ZQXEWBJPYEUH8ZMS2J4BAES75UPGWD576U0BJZWIS6MQOFNFQATV61O9FKTJ2CRDASMPFLTJSV3YCN6KWTBW8VMRENA3CEZIQGEWQ95R2XS8BYJL' where id=15; -update noar ti set v3='CRJ95A8151BNBTWQPQEQ0UX3WMYZHTS5I1PMZ0RD5YQDYVXF8K0NN9YF2CEK20EE2N9DG1MZSQDVHLN9R51SHCI7DQCBXRQJ61CNXD3KYDDKOE0RSGWUHCOB4DAC0VF8OBOZXTYDCQNAWBIY4ZQXEWBJPYEUH8ZMS2J4BAES75UPGWD576U0BJZWIS6MQOFNFQATV61O9FKTJ2CRDASMPFLTJSV3YCN6KWTBW8VMRENA3CEZIQGEWQ95R2XS8BYJL' where id=15; -update noar tt set v0='DY5HNMY99RL9AFP3JM9WWU1VLM3K8G9L6HNAA1F61Q6ON1XEKTCS6JVLEL5LOA0C0AZFLPP1B00JHM2HVKOFF2C8KZ63CJIP8INIXF9MYNCAKHZJ4QW46MC9HCKEEP4AKX0KF98T64A4Z5H448V5RF0QHOLA85XVC2VLTEUL4W1UJGNGQ8M9KL9HJZE3C4MW9N6IOEYBQTTKUVRLWJUFSEBKYJIUHSWTUDLOG93QEHAYOJL33LTMZ6CB56BAA4KOE' where id=16; -update noar ti set v0='DY5HNMY99RL9AFP3JM9WWU1VLM3K8G9L6HNAA1F61Q6ON1XEKTCS6JVLEL5LOA0C0AZFLPP1B00JHM2HVKOFF2C8KZ63CJIP8INIXF9MYNCAKHZJ4QW46MC9HCKEEP4AKX0KF98T64A4Z5H448V5RF0QHOLA85XVC2VLTEUL4W1UJGNGQ8M9KL9HJZE3C4MW9N6IOEYBQTTKUVRLWJUFSEBKYJIUHSWTUDLOG93QEHAYOJL33LTMZ6CB56BAA4KOE' where id=16; -update noar tt set v1='YVIMS6MH43DTBXUPI2AM8DEDCP8OIPTWUU4EFKHW65ALSKSO4O7KOLLE6VIXG5CF17B7C7G2MF4ZMOFFEXTKKBEOHXJBIHZGTVBLCCL9NLDJB8R6KAVYUZ9LDV3XXBB8TTCXW0KSPYMT9JNFC9FS7RULWM03UQK55ABSOCA0D9ZOW967M3KFWNFOQUB8X8UTS0F6DFNJ2PWOX6S80JIG9RO8XFPRB20J07O6EW8UXX7L276SL5P1EB20BGTI44WHL' where id=16; -update noar ti set v1='YVIMS6MH43DTBXUPI2AM8DEDCP8OIPTWUU4EFKHW65ALSKSO4O7KOLLE6VIXG5CF17B7C7G2MF4ZMOFFEXTKKBEOHXJBIHZGTVBLCCL9NLDJB8R6KAVYUZ9LDV3XXBB8TTCXW0KSPYMT9JNFC9FS7RULWM03UQK55ABSOCA0D9ZOW967M3KFWNFOQUB8X8UTS0F6DFNJ2PWOX6S80JIG9RO8XFPRB20J07O6EW8UXX7L276SL5P1EB20BGTI44WHL' where id=16; -update noar tt set v2='4Z6W9NYSLKE1W93KP5IW301MDBX6XD5CJT8CZ9CEFKHH8A7KPWRME3KP58GGDHGJTI12FSVBS0YNQNU1PSDXWW8CVUJQIBTI8UQVDQF7BKAIU9QAD5PXY7IFUXRFVM4DFAIW6C83QFEEJRBTEZDZTHCJZ49AVPXS8UJ5S62AXAOOPW9FHYK2UNDNY06M0VUTFPIT8IG41B819E8TM9X8Z2UMRW2667OOXKEBGN9JVGL0MGENM4JTWLFG2OH1VUEBZ' where id=16; -update noar ti set v2='4Z6W9NYSLKE1W93KP5IW301MDBX6XD5CJT8CZ9CEFKHH8A7KPWRME3KP58GGDHGJTI12FSVBS0YNQNU1PSDXWW8CVUJQIBTI8UQVDQF7BKAIU9QAD5PXY7IFUXRFVM4DFAIW6C83QFEEJRBTEZDZTHCJZ49AVPXS8UJ5S62AXAOOPW9FHYK2UNDNY06M0VUTFPIT8IG41B819E8TM9X8Z2UMRW2667OOXKEBGN9JVGL0MGENM4JTWLFG2OH1VUEBZ' where id=16; -update noar tt set v3='6DCS6589XD15G2KDZKYUOECGWA9V71948FBVBSSH7CAY0VK5YW06NKXVCVET0ME4Z1MFSOD03N390VRBQK56EQ3JC7R5KHK1I69KNXLOVHEWFFQ98UK9AYCITUIU4SUHC9M4UN33JUSRL4GWHSIPP2U2A8GVBXBGPXARL9N8VE959SWWUOJKSESON2FHI0PXL0T1AZOW9GC60XS65KBRWDPHSJE13ZAQ71YWYUIDIT5AIGEYZD7EPA8MU0XCRE6VF' where id=16; -update noar ti set v3='6DCS6589XD15G2KDZKYUOECGWA9V71948FBVBSSH7CAY0VK5YW06NKXVCVET0ME4Z1MFSOD03N390VRBQK56EQ3JC7R5KHK1I69KNXLOVHEWFFQ98UK9AYCITUIU4SUHC9M4UN33JUSRL4GWHSIPP2U2A8GVBXBGPXARL9N8VE959SWWUOJKSESON2FHI0PXL0T1AZOW9GC60XS65KBRWDPHSJE13ZAQ71YWYUIDIT5AIGEYZD7EPA8MU0XCRE6VF' where id=16; -update noar tt set v0='1EX7JUJR8MQ6QW6ITYIBK4RS2BQI4I9FS6ZVBEACZQ853WXRDWWSG6GE3DWWU10YF7710U40XUVNW897MZV8G1EMQYX6XU7P0EPKF7ZTLO31A6XTQBVVPWCX8CZHWQCN0WOW3R5VIRM27D1GQGPSAKJYJ3YF6OQUIH3VFWUOBJHSAN019AL4RZWVIXIZUPFERNH9FUDJR42PLF2UE2FX4OFRF81YF3TJYM9I84J881KHMI3JBDPJDQ8TNBXHULHVF' where id=17; -update noar ti set v0='1EX7JUJR8MQ6QW6ITYIBK4RS2BQI4I9FS6ZVBEACZQ853WXRDWWSG6GE3DWWU10YF7710U40XUVNW897MZV8G1EMQYX6XU7P0EPKF7ZTLO31A6XTQBVVPWCX8CZHWQCN0WOW3R5VIRM27D1GQGPSAKJYJ3YF6OQUIH3VFWUOBJHSAN019AL4RZWVIXIZUPFERNH9FUDJR42PLF2UE2FX4OFRF81YF3TJYM9I84J881KHMI3JBDPJDQ8TNBXHULHVF' where id=17; -update noar tt set v1='M9XA630UPYUNXTSPY40QES8JDG4274PGCE7B1JN4YLL88GL6UCECK0V84OI8IU63Y2I4EZ16P44HHC0FJLNIOXVIOF1BEMH4DH81QS1966WQR8QESPC3FG0JYJBWLATLK5U20456YTI5N21TC27YBGBVH3LU8DADLPGLM07KLJ1DKSGUXOJXPZBNNG9LIS8AKK7D0JR3MOOWOKRN90EO7PTW8827W52T14RGMQ72XXJNFXPVIYHBQYOYDZUUC8WUM' where id=17; -update noar ti set v1='M9XA630UPYUNXTSPY40QES8JDG4274PGCE7B1JN4YLL88GL6UCECK0V84OI8IU63Y2I4EZ16P44HHC0FJLNIOXVIOF1BEMH4DH81QS1966WQR8QESPC3FG0JYJBWLATLK5U20456YTI5N21TC27YBGBVH3LU8DADLPGLM07KLJ1DKSGUXOJXPZBNNG9LIS8AKK7D0JR3MOOWOKRN90EO7PTW8827W52T14RGMQ72XXJNFXPVIYHBQYOYDZUUC8WUM' where id=17; -update noar tt set v2='IZULBI6J1M7JAAK559NKOU6YC45H51C6EOOWY0AQXGXZTX0007WVQL8LLY87PWSYVCUQXV0VCHHLCC82IATF9R9B9NKNDL633AQPSW075J2BXG65Q1JV7Q7P5YPQ6LCFWFEBFEZUC2OTARO4JBUUS1KKP6HWM89YIMU8AL236GU45P1JGQQCA6M7RXETNW5DHV4L82E4GZ4VCVY82E31BPPNZJAD1KJ1SOEQ8G1DJ45D04QKBQIJ80VPU82TS93BX' where id=17; -update noar ti set v2='IZULBI6J1M7JAAK559NKOU6YC45H51C6EOOWY0AQXGXZTX0007WVQL8LLY87PWSYVCUQXV0VCHHLCC82IATF9R9B9NKNDL633AQPSW075J2BXG65Q1JV7Q7P5YPQ6LCFWFEBFEZUC2OTARO4JBUUS1KKP6HWM89YIMU8AL236GU45P1JGQQCA6M7RXETNW5DHV4L82E4GZ4VCVY82E31BPPNZJAD1KJ1SOEQ8G1DJ45D04QKBQIJ80VPU82TS93BX' where id=17; -update noar tt set v3='QG5GTFR49E4F0LKAJ8WKFQUT7R8I2DIY7YCON9SPKW19YNPIHGYFGEYLQTVA8PIIRY3ZEQ80YY44ZZ1GD1CYQLJBV6SVFQBHANBPKX2RQZ8JLTK3UT6O3K527SVI036ENJ1UWFMNZW9DM6QC3MB4ZWMS8PA1K5B2Y55T30VPTWNWZAJICX9Z1TAG5400YH2TGW2Q9P1T8XON02UES0E7FEBWZ5XF5A6ME7B2SMLQWY4KO55LGEW4D25QF0RUYFUMB' where id=17; -update noar ti set v3='QG5GTFR49E4F0LKAJ8WKFQUT7R8I2DIY7YCON9SPKW19YNPIHGYFGEYLQTVA8PIIRY3ZEQ80YY44ZZ1GD1CYQLJBV6SVFQBHANBPKX2RQZ8JLTK3UT6O3K527SVI036ENJ1UWFMNZW9DM6QC3MB4ZWMS8PA1K5B2Y55T30VPTWNWZAJICX9Z1TAG5400YH2TGW2Q9P1T8XON02UES0E7FEBWZ5XF5A6ME7B2SMLQWY4KO55LGEW4D25QF0RUYFUMB' where id=17; -update noar tt set v0='8K2JZ9ZN54VC5W5YTMU4R2OL2UDKXGYAAK1X2N25MLU1G66DP4SHQQ6H6F0PBW5JTVQNQXVYTQ2OD2T6DP7MFJSJT95NC5EHRC3SVYBVTFLG3ZKAMPC3271AD3LBCUYPXGM4YPDT03QOEZ051EDD1L054XM9SOPWBZ71LFXQN7MZNU0C4Z94ZTZQ661XLDQCGJG16U8XWWXZXLS61EUOOMT2O9OZIHY5SF3GA4L8EBVVCTXCVECHANQVIYJF9TYJA' where id=18; -update noar ti set v0='8K2JZ9ZN54VC5W5YTMU4R2OL2UDKXGYAAK1X2N25MLU1G66DP4SHQQ6H6F0PBW5JTVQNQXVYTQ2OD2T6DP7MFJSJT95NC5EHRC3SVYBVTFLG3ZKAMPC3271AD3LBCUYPXGM4YPDT03QOEZ051EDD1L054XM9SOPWBZ71LFXQN7MZNU0C4Z94ZTZQ661XLDQCGJG16U8XWWXZXLS61EUOOMT2O9OZIHY5SF3GA4L8EBVVCTXCVECHANQVIYJF9TYJA' where id=18; -update noar tt set v1='P1TI3VGHO4U7XLPQU4J4BOB9061IRDSR2P8F6K7CVSK9OL3JW76HO7HA3YYS89MNTBU6YV0NTMM39Y2XQPEZX04NYJRJ3H7GAJ3VIJP28I8ZPXQ73PPQXB5T3RLBEFEJ80H89V3HS78NJ3JVNMQTQRDKVAWY32LSC7QY88EA436MWEVPJYHKSDSDAVOU9V5TH9LB0P9MDY45B8OQXHCT48GKPHKF9Y3WGRLZ3GCTL8NGANXTS2HU0466DO2E2AXNL' where id=18; -update noar ti set v1='P1TI3VGHO4U7XLPQU4J4BOB9061IRDSR2P8F6K7CVSK9OL3JW76HO7HA3YYS89MNTBU6YV0NTMM39Y2XQPEZX04NYJRJ3H7GAJ3VIJP28I8ZPXQ73PPQXB5T3RLBEFEJ80H89V3HS78NJ3JVNMQTQRDKVAWY32LSC7QY88EA436MWEVPJYHKSDSDAVOU9V5TH9LB0P9MDY45B8OQXHCT48GKPHKF9Y3WGRLZ3GCTL8NGANXTS2HU0466DO2E2AXNL' where id=18; -update noar tt set v2='0GF9EHOS7Y0HYH0RJK4TZLC4OSF5FPYO5ZGMTUGTP1J0247XMQXDCK3IIGCNJV1DLGZ9LSM3CC6H1WYWB6PET2WUZI5YWL9WTP7E2EWDXZF9IGUJTVV49736J22063ARMMO7VF0DA4HY85G2Z5CM5L536CYO9QGIF8Z2PZCAXYM6VCI7TOHLU257GLQVI04J29D6UYZ1V2TBXI4BNJZGFNW6E1258SLLOAAYMSCUKF6HC0P6B49ZBKBM8GPFEXJAN' where id=18; -update noar ti set v2='0GF9EHOS7Y0HYH0RJK4TZLC4OSF5FPYO5ZGMTUGTP1J0247XMQXDCK3IIGCNJV1DLGZ9LSM3CC6H1WYWB6PET2WUZI5YWL9WTP7E2EWDXZF9IGUJTVV49736J22063ARMMO7VF0DA4HY85G2Z5CM5L536CYO9QGIF8Z2PZCAXYM6VCI7TOHLU257GLQVI04J29D6UYZ1V2TBXI4BNJZGFNW6E1258SLLOAAYMSCUKF6HC0P6B49ZBKBM8GPFEXJAN' where id=18; -update noar tt set v3='VSJJPAWBOTXJE0RUC1FBYQZSFWY1KQ9O15HB8TABPYVIVEC591859EEHGPUMTLUBQ342QTP33RQQ793NIKBRT10LLOG0GGY4QILVRD48F1RXC10O46NYU0BDY4R7D6CVJLENGPVNUDRR6VCVJ4RGKRK5GS1Y1Q7NWCZ002AWD2A6V610FH2W2FX1X28RMH649YW6LVW1HRZ5VAYGDLYF5QM593F3891FRVN007L2TFPZCWW1WSUAOAK6U1Q69BXUS' where id=18; -update noar ti set v3='VSJJPAWBOTXJE0RUC1FBYQZSFWY1KQ9O15HB8TABPYVIVEC591859EEHGPUMTLUBQ342QTP33RQQ793NIKBRT10LLOG0GGY4QILVRD48F1RXC10O46NYU0BDY4R7D6CVJLENGPVNUDRR6VCVJ4RGKRK5GS1Y1Q7NWCZ002AWD2A6V610FH2W2FX1X28RMH649YW6LVW1HRZ5VAYGDLYF5QM593F3891FRVN007L2TFPZCWW1WSUAOAK6U1Q69BXUS' where id=18; -update noar tt set v0='J61BZEOQFZ08XSSBJ2LYGFGU741OSER0XJGABRRBAQOOC6X7VNLNANY0AEEXDSVIFZQ9N3V7KYDB1KO3S2JKKLY2PLA6C51NQ82LLG6BBTLID6EWSQP0C1U6X7L5GQ9O9CTDO0IGH66E2XMPYLL3TUZFW507CA9UYILSWZX4SLCHREKOU0JJPT0LDFG89A0TKRK9QMVG1JS1JD2BVXTNPOUHYZB3LO4MQCK3XD7S6V62QV8VLIPOTT2I5ZBUY5FIQ' where id=19; -update noar ti set v0='J61BZEOQFZ08XSSBJ2LYGFGU741OSER0XJGABRRBAQOOC6X7VNLNANY0AEEXDSVIFZQ9N3V7KYDB1KO3S2JKKLY2PLA6C51NQ82LLG6BBTLID6EWSQP0C1U6X7L5GQ9O9CTDO0IGH66E2XMPYLL3TUZFW507CA9UYILSWZX4SLCHREKOU0JJPT0LDFG89A0TKRK9QMVG1JS1JD2BVXTNPOUHYZB3LO4MQCK3XD7S6V62QV8VLIPOTT2I5ZBUY5FIQ' where id=19; -update noar tt set v1='X9SHZS550ADRHP2NFR6Z5LPL8Q3SIA03ST8FSMZ549EOVY8Q80ZVYG3BPLX4ESMJUFLGC5ILWHVFW5OM2VI8TT1GUPS3HXFDPQ7RNLNKZVJCDL96HQAG4VO26JYHV5CS836W6MUTFDH81Q6S68QLORT48SXYIKN3JJ2NK87MOJKEI9KNL5FBJEC2FTQQSYF8EWP9VTSKU3O41WN55L07H2FYVG986ERQWEUW93PTGHEL6G1PZFAOLNMDFGC37WSQN' where id=19; -update noar ti set v1='X9SHZS550ADRHP2NFR6Z5LPL8Q3SIA03ST8FSMZ549EOVY8Q80ZVYG3BPLX4ESMJUFLGC5ILWHVFW5OM2VI8TT1GUPS3HXFDPQ7RNLNKZVJCDL96HQAG4VO26JYHV5CS836W6MUTFDH81Q6S68QLORT48SXYIKN3JJ2NK87MOJKEI9KNL5FBJEC2FTQQSYF8EWP9VTSKU3O41WN55L07H2FYVG986ERQWEUW93PTGHEL6G1PZFAOLNMDFGC37WSQN' where id=19; -update noar tt set v2='MCK1ROFUKOOYQKHCHOD2VMXQZ8YHOSX2Q6XD8DPI8XV35BG1Z85DO89GVN6F7OKCTZXD87375GWB8H5QHP8TWUBKO0NVSFVBV5QWP3UB0M9O7PUTHNFRI2VL8EIWFNALBH7G8O2OSNP3X85N672891GCZD3QHU1LX740ST25UM4YJ7GTNCCM7QVLB85AKCU8QGXAQQGUJDFTPY7G6NM4ILR6NSY7E6CKU3QMZ5W3ZJ9O5Z412A464PK6LHA8DKPS4' where id=19; -update noar ti set v2='MCK1ROFUKOOYQKHCHOD2VMXQZ8YHOSX2Q6XD8DPI8XV35BG1Z85DO89GVN6F7OKCTZXD87375GWB8H5QHP8TWUBKO0NVSFVBV5QWP3UB0M9O7PUTHNFRI2VL8EIWFNALBH7G8O2OSNP3X85N672891GCZD3QHU1LX740ST25UM4YJ7GTNCCM7QVLB85AKCU8QGXAQQGUJDFTPY7G6NM4ILR6NSY7E6CKU3QMZ5W3ZJ9O5Z412A464PK6LHA8DKPS4' where id=19; -update noar tt set v3='YXT6TYZFVOPURSW0RQ3F4YJ9SFHH4E7NJOJPLDC9R48ZPUN8CDSISFKETUPGZLBB18JJ849UPAZEHMDFZ4CANRQAX2WKI740GSXOKVUOWT9KKIBP230B9ZGGSXDEW205SKNCCPCXI3181HKQCYB0TUL1JVSIH8A3A209M9VEEDGDE6B1FYFQCQO1QRJV9S57U6XBQMZ0K8BGJJQE4T7U43M058VAPXGAPKANFGQCB8P8SQ7K4DJFNUXPFKBXJTOV0' where id=19; -update noar ti set v3='YXT6TYZFVOPURSW0RQ3F4YJ9SFHH4E7NJOJPLDC9R48ZPUN8CDSISFKETUPGZLBB18JJ849UPAZEHMDFZ4CANRQAX2WKI740GSXOKVUOWT9KKIBP230B9ZGGSXDEW205SKNCCPCXI3181HKQCYB0TUL1JVSIH8A3A209M9VEEDGDE6B1FYFQCQO1QRJV9S57U6XBQMZ0K8BGJJQE4T7U43M058VAPXGAPKANFGQCB8P8SQ7K4DJFNUXPFKBXJTOV0' where id=19; -update noar tt set v0='LV01CP920RSCAZHN5VF1W9JEVFDYH596R8J8LC0MF86T3Z1UAYM45873ERUF3EEDP1GOTNSF2IGBLYIXTOI3TVFK1WI9JE0DX1R5WXCKJ9EBH115MTQM4T52S31O05GKVUZ62P9TXQ1J9QV4ZCT4VEOQN4BJKBKH4B7579YR7XP4AW9AVUVAS1P8S6K649WLYMPVMKHZOKRADCRWUARYLFIGW0IS030GMTLGQN9CKN9QR73MR15N5JTOMV9HORU1M' where id=20; -update noar ti set v0='LV01CP920RSCAZHN5VF1W9JEVFDYH596R8J8LC0MF86T3Z1UAYM45873ERUF3EEDP1GOTNSF2IGBLYIXTOI3TVFK1WI9JE0DX1R5WXCKJ9EBH115MTQM4T52S31O05GKVUZ62P9TXQ1J9QV4ZCT4VEOQN4BJKBKH4B7579YR7XP4AW9AVUVAS1P8S6K649WLYMPVMKHZOKRADCRWUARYLFIGW0IS030GMTLGQN9CKN9QR73MR15N5JTOMV9HORU1M' where id=20; -update noar tt set v1='1UFRXZG0XHBSFLK2C2P2ZO6R90R625ABCFS2N1EHDWLQC9CZ1K5CH797VU1GYB0WR220IXN50J8TOU7NFZIIA6P5BMHXBMTOJ7EHOHAU8MN09C9TV8315GV3HDKSWOLADRYLJMGVQ6EDK4G1C8UW2I59YEMMNIUW0GMIZRMX48FWGBGHZRFUK0LTQ0U12JJXNHIFNTMQ0J83A2MOJMXZMJ3VT89NPGDHZP742QU5MB8QZRJW5MNR7U5BW2FN68UHI' where id=20; -update noar ti set v1='1UFRXZG0XHBSFLK2C2P2ZO6R90R625ABCFS2N1EHDWLQC9CZ1K5CH797VU1GYB0WR220IXN50J8TOU7NFZIIA6P5BMHXBMTOJ7EHOHAU8MN09C9TV8315GV3HDKSWOLADRYLJMGVQ6EDK4G1C8UW2I59YEMMNIUW0GMIZRMX48FWGBGHZRFUK0LTQ0U12JJXNHIFNTMQ0J83A2MOJMXZMJ3VT89NPGDHZP742QU5MB8QZRJW5MNR7U5BW2FN68UHI' where id=20; -update noar tt set v2='8SK5PQ12JIT36Z8U8U2KML2USL1BVSRB3Y4OV7THU88WF1HQYP6VR9GXEU6JXXGYOPOXKGIB1UQL477WFK0Z4ROJD4X86PZC4RD5PHDRQ1LWL2TVML4KGS59CUU9Z123SWRE902TMW1988N5CI2OPZ5ENMF9SOW3T0346DL6TE0VKTFRERW0JYFGJ99OQAEUI9B5E1C1K9OFR6JRFZMFPJLSEKBUPRB1370URWGMEWD757G72OFBZR6KAUJL9CLWR' where id=20; -update noar ti set v2='8SK5PQ12JIT36Z8U8U2KML2USL1BVSRB3Y4OV7THU88WF1HQYP6VR9GXEU6JXXGYOPOXKGIB1UQL477WFK0Z4ROJD4X86PZC4RD5PHDRQ1LWL2TVML4KGS59CUU9Z123SWRE902TMW1988N5CI2OPZ5ENMF9SOW3T0346DL6TE0VKTFRERW0JYFGJ99OQAEUI9B5E1C1K9OFR6JRFZMFPJLSEKBUPRB1370URWGMEWD757G72OFBZR6KAUJL9CLWR' where id=20; -update noar tt set v3='T7ZKLIFD9NTGMHUL3XHEHR5WVSYDTDZPD43CNEAWTRAMRI63VD7X5RYPQ9PEXBG249AW68DNN7FME87SWD6IGBUQOAX54KXEOW2EGYIKRQONVFSZFJN0OO2JP9OBQ1NJ6CK8RDD4AC4QKARWMY2H0HFX156B5J43B3OTDSKUS1FIAD1H7ON77RMD5WD6IEUV37UVDTRXED5EFZV7HP9R7ZQ29D4C3V5KZADLRP1RPULWD25RSMQVXGMDG3AFT4FLB' where id=20; -update noar ti set v3='T7ZKLIFD9NTGMHUL3XHEHR5WVSYDTDZPD43CNEAWTRAMRI63VD7X5RYPQ9PEXBG249AW68DNN7FME87SWD6IGBUQOAX54KXEOW2EGYIKRQONVFSZFJN0OO2JP9OBQ1NJ6CK8RDD4AC4QKARWMY2H0HFX156B5J43B3OTDSKUS1FIAD1H7ON77RMD5WD6IEUV37UVDTRXED5EFZV7HP9R7ZQ29D4C3V5KZADLRP1RPULWD25RSMQVXGMDG3AFT4FLB' where id=20; -update noar tt set v0='W1VTJ1H2REY8435MAB757VIZ0X0Q36L8IHQB818ROI46K7QDUYYXC4YE7DIL247O2X6V0590O71IUDN3JVJP47Z24DJW0SQ0IYYWP6IOLRHF4XHEU7WK8AJ87ZPJV9E6VNY861F2PWANFB6XRXYP0CT0H3ZLDDH663Y8PWYF13MIL5QDVQF2Y2UKVMHI86SFED8HAA2XU035PSBQDSO136J2MLI8Y84GM0T08P5OGJRHJE1LVJ8HZ2UIHYFNO8OU6' where id=21; -update noar ti set v0='W1VTJ1H2REY8435MAB757VIZ0X0Q36L8IHQB818ROI46K7QDUYYXC4YE7DIL247O2X6V0590O71IUDN3JVJP47Z24DJW0SQ0IYYWP6IOLRHF4XHEU7WK8AJ87ZPJV9E6VNY861F2PWANFB6XRXYP0CT0H3ZLDDH663Y8PWYF13MIL5QDVQF2Y2UKVMHI86SFED8HAA2XU035PSBQDSO136J2MLI8Y84GM0T08P5OGJRHJE1LVJ8HZ2UIHYFNO8OU6' where id=21; -update noar tt set v1='4NS89B2R8N583FYQLH4K8JF4PA22Z2HHWCRKARP1SIKKVH4YW3QKA89V9A5KKI4GFMXREH351Z6Z8F36XV8D8YQBC76EGIV0V17Z4BZZBVVH6WJWQTM33UWSPI0VX5HLCN3YEYNUH6SZO5N7OY0CW00G3ZM3U4QXUFZEEDXI3Y1TMGKFLR1HVH17J14RYDBZ5JG78SPDTAU5GS9RI8THFAWFBJ4ON4IV3MN3G5PQPKXHFLSFWJAHK9OQLDHJL9HMZ' where id=21; -update noar ti set v1='4NS89B2R8N583FYQLH4K8JF4PA22Z2HHWCRKARP1SIKKVH4YW3QKA89V9A5KKI4GFMXREH351Z6Z8F36XV8D8YQBC76EGIV0V17Z4BZZBVVH6WJWQTM33UWSPI0VX5HLCN3YEYNUH6SZO5N7OY0CW00G3ZM3U4QXUFZEEDXI3Y1TMGKFLR1HVH17J14RYDBZ5JG78SPDTAU5GS9RI8THFAWFBJ4ON4IV3MN3G5PQPKXHFLSFWJAHK9OQLDHJL9HMZ' where id=21; -update noar tt set v2='A0LMSBWZ9N9HNOEL7F8JYWRD40FBX2BQJ5PZMJCDQFPWP9B3YFYNHXDLYLXIIRR00I163U773YB1J3HKXRT77S0FW734KHZ6M14PU8BZJGWV9U22H3O6EC1SZRNTXQXGQ584YBDN3CKTGSFH6RFO8N3M30HQN7O06M5HG62DMVF3UIHE56FM1NS2CVGVCQ86TFBI8N1K4NSIG0GG4SOHAQ3JN69EN84RKP5O7MV2LZQVORM2GQZ3U612OTF40N7EM' where id=21; -update noar ti set v2='A0LMSBWZ9N9HNOEL7F8JYWRD40FBX2BQJ5PZMJCDQFPWP9B3YFYNHXDLYLXIIRR00I163U773YB1J3HKXRT77S0FW734KHZ6M14PU8BZJGWV9U22H3O6EC1SZRNTXQXGQ584YBDN3CKTGSFH6RFO8N3M30HQN7O06M5HG62DMVF3UIHE56FM1NS2CVGVCQ86TFBI8N1K4NSIG0GG4SOHAQ3JN69EN84RKP5O7MV2LZQVORM2GQZ3U612OTF40N7EM' where id=21; -update noar tt set v3='NZS96BSKLCQF9IT0W1P1C3HB61PCORQDT0MBFBYMPHPOC07VHTEVXUIA8KDFR5TNSIJ4JTECMAZC1730AWPHMTN9RTVKKANK4Z4H4DHO3M2ZWICK84NJ4CS2QK6G8URGBVWGJ4N7HRN2UW82JF99Y9KRXM45O0W7CIPOMQ4U4VL7OAWMATGRWCHLEF5OOME1UFYHRNKMJEAABEP472J7MNTL20L94OS835OQR5F43RMT2I1CIZM4GERKNVQM90QIZ' where id=21; -update noar ti set v3='NZS96BSKLCQF9IT0W1P1C3HB61PCORQDT0MBFBYMPHPOC07VHTEVXUIA8KDFR5TNSIJ4JTECMAZC1730AWPHMTN9RTVKKANK4Z4H4DHO3M2ZWICK84NJ4CS2QK6G8URGBVWGJ4N7HRN2UW82JF99Y9KRXM45O0W7CIPOMQ4U4VL7OAWMATGRWCHLEF5OOME1UFYHRNKMJEAABEP472J7MNTL20L94OS835OQR5F43RMT2I1CIZM4GERKNVQM90QIZ' where id=21; -update noar tt set v0='UGBZLIBD8CC75F2WQUKFPQJIO0XXHNYJW03ZKO4N0PLCDYNGJNJC7EC5VZLLGBL9SXACXN0VD5RJWG2ERIYRSY0J3P5TULBECQM03BXM0RB5JCBZL6GPPQQXUQGXDDHJ9MKO14OF3DEIW308QTWQ00E0M96QB4CAQGFE79Q28F649ERLALRVGG9BJM2W2NJAW5QHOC71I709WYWQZKLYJ87MTC9IB8CJI8X50D64AEZQPY3BDY00XY61AW0IFDBIL' where id=22; -update noar ti set v0='UGBZLIBD8CC75F2WQUKFPQJIO0XXHNYJW03ZKO4N0PLCDYNGJNJC7EC5VZLLGBL9SXACXN0VD5RJWG2ERIYRSY0J3P5TULBECQM03BXM0RB5JCBZL6GPPQQXUQGXDDHJ9MKO14OF3DEIW308QTWQ00E0M96QB4CAQGFE79Q28F649ERLALRVGG9BJM2W2NJAW5QHOC71I709WYWQZKLYJ87MTC9IB8CJI8X50D64AEZQPY3BDY00XY61AW0IFDBIL' where id=22; -update noar tt set v1='U2D0N9XSKPXZXC19LLNV01AFVZWMK1T46MEWT7CN1HU839QKJQH1KV4QIQRU8KJ2BEVAV4T6AG0MQ6QKDQBUU35EKLH8EIXLMVMEPI8IEZCAS9256XIIP0B7YZT9FAB7DMXD7MUBNKFP5XQW70EQE4WS5MOKSWYQRJ4DWE0NMPU9NE8DRK9NNEDTMVP2PDW2PJXX5MIVSH9T8TD2OF9WBTK9RP357D9DGUSRXR4AT7F9AGP7ALLRP5JUHJ02F2Y7B' where id=22; -update noar ti set v1='U2D0N9XSKPXZXC19LLNV01AFVZWMK1T46MEWT7CN1HU839QKJQH1KV4QIQRU8KJ2BEVAV4T6AG0MQ6QKDQBUU35EKLH8EIXLMVMEPI8IEZCAS9256XIIP0B7YZT9FAB7DMXD7MUBNKFP5XQW70EQE4WS5MOKSWYQRJ4DWE0NMPU9NE8DRK9NNEDTMVP2PDW2PJXX5MIVSH9T8TD2OF9WBTK9RP357D9DGUSRXR4AT7F9AGP7ALLRP5JUHJ02F2Y7B' where id=22; -update noar tt set v2='WGPUFZ2V2NUJ8AKGWBFY35R817A5NUEK3RPA0K3441W4NMED0MP0777CCBCNM32CNNAQFCZ61L8HRBTQZ8P5J5RQ69E47PFBVJPKM3E9G88SD8BWSW133QGSLWQUNT7O5VDDUST1ZEEYO93JAN9F0SSJIQKTVUAR5EO0EW4NSURB021ITS4WM9AORN85A6JK29M7LTY28PT150WMHUXO28H7QH1O4EL90EF7NNLL8Z17HPLURNT3L88EDG4IAQ3GG' where id=22; -update noar ti set v2='WGPUFZ2V2NUJ8AKGWBFY35R817A5NUEK3RPA0K3441W4NMED0MP0777CCBCNM32CNNAQFCZ61L8HRBTQZ8P5J5RQ69E47PFBVJPKM3E9G88SD8BWSW133QGSLWQUNT7O5VDDUST1ZEEYO93JAN9F0SSJIQKTVUAR5EO0EW4NSURB021ITS4WM9AORN85A6JK29M7LTY28PT150WMHUXO28H7QH1O4EL90EF7NNLL8Z17HPLURNT3L88EDG4IAQ3GG' where id=22; -update noar tt set v3='PKP6NQBE0B5BDU8R7HYUAZKYU1C9AFI2OUWA3DTN0U3I6HZBF4NDE2AHLZFN355GDYTVB0ACHAUQRJ0DK3ZRJHUQU1WHQDZDV8AXUP77364HFEUT10KZ96C43IHITGB0HXMUT5G76269RH1VEQ9J29JW3GZZNOQ85TAZUKZXTPE2R4GY9RXIATB1S50EA8F4Q272CVZAQ3FP886ZHJRPZ3YSD3O9S7IRHWFUMRVGMEFB4702JZUJD874Z5EQGOJ4X' where id=22; -update noar ti set v3='PKP6NQBE0B5BDU8R7HYUAZKYU1C9AFI2OUWA3DTN0U3I6HZBF4NDE2AHLZFN355GDYTVB0ACHAUQRJ0DK3ZRJHUQU1WHQDZDV8AXUP77364HFEUT10KZ96C43IHITGB0HXMUT5G76269RH1VEQ9J29JW3GZZNOQ85TAZUKZXTPE2R4GY9RXIATB1S50EA8F4Q272CVZAQ3FP886ZHJRPZ3YSD3O9S7IRHWFUMRVGMEFB4702JZUJD874Z5EQGOJ4X' where id=22; -update noar tt set v0='8XUE96NUSYCBKQM1BRH2WAN8Z9E46UJOTOPZ9EZF1STTM8RB0T0ODHXS78LP7JL8XJTQ2KMEQ5TSQ3FJ88TA675FNPON62G07XCO9O9ODTCVN298RPMT22V96VDKGDR0FN74MVEBC9AHJ3MKS1U2Q8WO3EMCFZ10VKRGWGTH3C2FSLQPSJOOMR02OICALM8IUIY1DGPUY2SRWW3SP6W1NDRALQTEIBW3DDDTMOR2ZPHE2CKU9H6XGX0D070GNE94L' where id=23; -update noar ti set v0='8XUE96NUSYCBKQM1BRH2WAN8Z9E46UJOTOPZ9EZF1STTM8RB0T0ODHXS78LP7JL8XJTQ2KMEQ5TSQ3FJ88TA675FNPON62G07XCO9O9ODTCVN298RPMT22V96VDKGDR0FN74MVEBC9AHJ3MKS1U2Q8WO3EMCFZ10VKRGWGTH3C2FSLQPSJOOMR02OICALM8IUIY1DGPUY2SRWW3SP6W1NDRALQTEIBW3DDDTMOR2ZPHE2CKU9H6XGX0D070GNE94L' where id=23; -update noar tt set v1='HFRFDS0MIO9IXBXBAYGZ5UNFH9WDBR0IL9OXTNII28OXZN6BA8XNLTXGKNQIL7220BTDHN6UFD60MI7FYOH691T0ECE7GBJ26G03R9OFX35IVATM9HVKV5BXDO7JVOY9LDNMCUXZ9Z3F37RM0FON3PNSO98LUOZZSTUFIUK90S2ANW5EHD5THE14OPTPX9OKY233Y5NKQUKNE5PMH25E8BS9EJIZJZ9D9S4C9GNW37MUPFJORRRCFG2QMDZY2SP7G' where id=23; -update noar ti set v1='HFRFDS0MIO9IXBXBAYGZ5UNFH9WDBR0IL9OXTNII28OXZN6BA8XNLTXGKNQIL7220BTDHN6UFD60MI7FYOH691T0ECE7GBJ26G03R9OFX35IVATM9HVKV5BXDO7JVOY9LDNMCUXZ9Z3F37RM0FON3PNSO98LUOZZSTUFIUK90S2ANW5EHD5THE14OPTPX9OKY233Y5NKQUKNE5PMH25E8BS9EJIZJZ9D9S4C9GNW37MUPFJORRRCFG2QMDZY2SP7G' where id=23; -update noar tt set v2='G3PLP00WZ7GHLSPSB5JGEFIBVKUDM35OMABXTO7UJXZHWEB35N7H4E0M1TYPFNLIMXCT4REBMNCRWUN3XDVJEWLUUU0A3KA1ASNTJK0RKSW8B7LJYJOAQIT1HP1ZJ4PVDHA9FLVQAWTKZTZU66V6VW7O0F9TK9KKDC7QRADR6DA70YQM7MCQRRENIYHFSJRPJTM54JV8K9FOLZ8G4ZSQUZ9794EAEIQ3NOCC2IQ6NPX7NDYACVKZ3UYL9O4WE88Q8' where id=23; -update noar ti set v2='G3PLP00WZ7GHLSPSB5JGEFIBVKUDM35OMABXTO7UJXZHWEB35N7H4E0M1TYPFNLIMXCT4REBMNCRWUN3XDVJEWLUUU0A3KA1ASNTJK0RKSW8B7LJYJOAQIT1HP1ZJ4PVDHA9FLVQAWTKZTZU66V6VW7O0F9TK9KKDC7QRADR6DA70YQM7MCQRRENIYHFSJRPJTM54JV8K9FOLZ8G4ZSQUZ9794EAEIQ3NOCC2IQ6NPX7NDYACVKZ3UYL9O4WE88Q8' where id=23; -update noar tt set v3='42ZSXXWCVHS66K7MKGFW3YM204GW4RVV8TQBPMFFD5GIHDZ24YPLHGHXNHUJRRRMMCQCJN2C9DQACGUJIL582T0LCFU74B3312AFDAR1O2XWT3QTGHWEZD3EK3C8E7FP38ZP82UH7S1OC8LW18AZZRIR5I9UKAKWYYWAYK1JV2UE6EDZA66IJZEGOFQD5G51QVIT9A35ZKWTHE587Q894KJCKL0J07G5XVJEL71Z40MY1MBUQI0N3XL50YRNZFISZ' where id=23; -update noar ti set v3='42ZSXXWCVHS66K7MKGFW3YM204GW4RVV8TQBPMFFD5GIHDZ24YPLHGHXNHUJRRRMMCQCJN2C9DQACGUJIL582T0LCFU74B3312AFDAR1O2XWT3QTGHWEZD3EK3C8E7FP38ZP82UH7S1OC8LW18AZZRIR5I9UKAKWYYWAYK1JV2UE6EDZA66IJZEGOFQD5G51QVIT9A35ZKWTHE587Q894KJCKL0J07G5XVJEL71Z40MY1MBUQI0N3XL50YRNZFISZ' where id=23; -update noar tt set v0='7J8CHYLGKRVOP13WX9VZ5U4NTMQ0AGPA7RPFQG28LGZD6RYMNIIB99BP1A7I5M0Z3THBS99G3ITMSFAISAR9QFMDHECURHU2MMEGM0BL97UXT9F4622I7VISAYE8ERTOU5HVC1CYX7IOBQDTS9T9ADDLNOOC9NEJPBKL09TMX61SOI83M3BLMLS2SFJ9GRSLUYNCEHHK0MUU6C0XSSB8JJTHDEDQVEY54XG6VFFOZ5IT2C38KNZPOFK2UP0XEPECQ' where id=24; -update noar ti set v0='7J8CHYLGKRVOP13WX9VZ5U4NTMQ0AGPA7RPFQG28LGZD6RYMNIIB99BP1A7I5M0Z3THBS99G3ITMSFAISAR9QFMDHECURHU2MMEGM0BL97UXT9F4622I7VISAYE8ERTOU5HVC1CYX7IOBQDTS9T9ADDLNOOC9NEJPBKL09TMX61SOI83M3BLMLS2SFJ9GRSLUYNCEHHK0MUU6C0XSSB8JJTHDEDQVEY54XG6VFFOZ5IT2C38KNZPOFK2UP0XEPECQ' where id=24; -update noar tt set v1='D8PJ4MPF1UB0G1QBAKWA2XZ5DPHM7CCT4WAN0DJ0T4VGLW9S33PQA2FG59VSPUXMK0KDHK7WH42A82I6LBYPZDULQUZ1H9GCPH1I7SWMZHYPHX94FKY051OXN83ITWUID6AY3RJ0SR5I15IQR1MH2SWIADQKPYQ9IZZYI40XRLAEX31VKAZVYZJ0I2NQ2P9AL3J0E5YE4WT9FZBQ139GL3TXP476LQ60EOD75F8WVQ38N1G7H8YO5592L5QYT8I0E' where id=24; -update noar ti set v1='D8PJ4MPF1UB0G1QBAKWA2XZ5DPHM7CCT4WAN0DJ0T4VGLW9S33PQA2FG59VSPUXMK0KDHK7WH42A82I6LBYPZDULQUZ1H9GCPH1I7SWMZHYPHX94FKY051OXN83ITWUID6AY3RJ0SR5I15IQR1MH2SWIADQKPYQ9IZZYI40XRLAEX31VKAZVYZJ0I2NQ2P9AL3J0E5YE4WT9FZBQ139GL3TXP476LQ60EOD75F8WVQ38N1G7H8YO5592L5QYT8I0E' where id=24; -update noar tt set v2='4ZJVIU9H0VJZDIJB32Z1HHDB0WQVP1PIKF07DJRYW5P6GNID1DKJWNNCO32S164MREKD2DWC2KZKNDGD5SZ1G0NZTEMI87CA9MHVJJ9FVB5I9AS8A5WH8R377XHKORXNCU2NH2I3S85IOGFNHJS6SF2MXQ8IDV8X3A0RQ6V9M0T4Q44KZKB9508INMR7DMTKDC3Y0WBQUZUFYDQPB53X1X2CNIAQL5Q8MEHNIH3V0SQBDJR5B934RP236UVTJUXOM' where id=24; -update noar ti set v2='4ZJVIU9H0VJZDIJB32Z1HHDB0WQVP1PIKF07DJRYW5P6GNID1DKJWNNCO32S164MREKD2DWC2KZKNDGD5SZ1G0NZTEMI87CA9MHVJJ9FVB5I9AS8A5WH8R377XHKORXNCU2NH2I3S85IOGFNHJS6SF2MXQ8IDV8X3A0RQ6V9M0T4Q44KZKB9508INMR7DMTKDC3Y0WBQUZUFYDQPB53X1X2CNIAQL5Q8MEHNIH3V0SQBDJR5B934RP236UVTJUXOM' where id=24; -update noar tt set v3='53ESDP7LESASZGW8TQ767HZP425HAAKXUYFQILKVAALNWOXZM6HK0N4MEF4PAHZ7EYAI1S17P6MC0IRBXOBULT45WVJECYT27YLYDU53YUHR462N0DSGTK6P47S9VJD6RMWIQKKQ4UGN7NJRTWB8CXPU727HVTP0IMR69FB50Y6O6S74UO4OCOM3TOD8P6XSL1BQXH2NH4DQPFOIWWN9SXU1227LJ6UN6K7R9476MZYZTFKK4XFS1WSXHG3P14OKP' where id=24; -update noar ti set v3='53ESDP7LESASZGW8TQ767HZP425HAAKXUYFQILKVAALNWOXZM6HK0N4MEF4PAHZ7EYAI1S17P6MC0IRBXOBULT45WVJECYT27YLYDU53YUHR462N0DSGTK6P47S9VJD6RMWIQKKQ4UGN7NJRTWB8CXPU727HVTP0IMR69FB50Y6O6S74UO4OCOM3TOD8P6XSL1BQXH2NH4DQPFOIWWN9SXU1227LJ6UN6K7R9476MZYZTFKK4XFS1WSXHG3P14OKP' where id=24; -update noar tt set v0='MD7VLTYM9E79UYYML4O0W1XSTYJ7BHYDCAINIRSFNRI7WTPWGYNXGE7LIZVYO0VIAB4U408XG192QMCKZ6JV7NXPPRATQ86JZQIN2XAZSG6UB41SUTGDX7S5HRTJMEXJFTBR0A32ICY6P6PBYZAL5ZBSD0F13VG5AHWGPRKQIK5AVDFSFVZQHJXOXFV28GIMCU9W94EP6TTILLSN0TLT7QNZ2PD8TCXDFF7FVRJUXY22S9ZP93VQQHQBCLY80Y8WQ' where id=25; -update noar ti set v0='MD7VLTYM9E79UYYML4O0W1XSTYJ7BHYDCAINIRSFNRI7WTPWGYNXGE7LIZVYO0VIAB4U408XG192QMCKZ6JV7NXPPRATQ86JZQIN2XAZSG6UB41SUTGDX7S5HRTJMEXJFTBR0A32ICY6P6PBYZAL5ZBSD0F13VG5AHWGPRKQIK5AVDFSFVZQHJXOXFV28GIMCU9W94EP6TTILLSN0TLT7QNZ2PD8TCXDFF7FVRJUXY22S9ZP93VQQHQBCLY80Y8WQ' where id=25; -update noar tt set v1='527RZK4NO6ZJMXS85715TCM5ZRSCEJQKJCFICVAOL3ODY6EH1R4U2VD26V1T1KUHU01LX9X28O03I0DKYWLEPC8NLUR1Z74YY7N9XLY1R171QJPKGIPHU5QQIP8LU9M2WMVWVTNSOMHA5KS28R8HFZLDYSDYDA0DG2Y9W3AZ54IZ33CZNJ3N4FO9MA47WHF42PGTIO7NWDUK7KYGWTMM08AWP53Q6MMVDIY31P1NDAKFAW8R7QVC4A78C7ARRWLOP' where id=25; -update noar ti set v1='527RZK4NO6ZJMXS85715TCM5ZRSCEJQKJCFICVAOL3ODY6EH1R4U2VD26V1T1KUHU01LX9X28O03I0DKYWLEPC8NLUR1Z74YY7N9XLY1R171QJPKGIPHU5QQIP8LU9M2WMVWVTNSOMHA5KS28R8HFZLDYSDYDA0DG2Y9W3AZ54IZ33CZNJ3N4FO9MA47WHF42PGTIO7NWDUK7KYGWTMM08AWP53Q6MMVDIY31P1NDAKFAW8R7QVC4A78C7ARRWLOP' where id=25; -update noar tt set v2='JFG1272IZ1DYJNXK3YRXFOS9N0PUTD2Q5PU5R0XQQ34YCU1JJG9UFKUCMEL0RH59GYETR29E12ZAPJ7XO82BSXA2OLZ33Y5HP1ZSJ1D4EDFWZC9JQE3GFZ9Q3YHPY9GWRCLXTARG7EVOSPFR11M5WQPEWK7QFOSR1GRY1AQPSV3XT9JD35KIMRS72KWRMFZBGHIMD9FC4G6TI01C1IJBS1JOL2Y0RPE2Q0IPEJINOTI5KV4MB3ZUCRWO0COXOPDYP' where id=25; -update noar ti set v2='JFG1272IZ1DYJNXK3YRXFOS9N0PUTD2Q5PU5R0XQQ34YCU1JJG9UFKUCMEL0RH59GYETR29E12ZAPJ7XO82BSXA2OLZ33Y5HP1ZSJ1D4EDFWZC9JQE3GFZ9Q3YHPY9GWRCLXTARG7EVOSPFR11M5WQPEWK7QFOSR1GRY1AQPSV3XT9JD35KIMRS72KWRMFZBGHIMD9FC4G6TI01C1IJBS1JOL2Y0RPE2Q0IPEJINOTI5KV4MB3ZUCRWO0COXOPDYP' where id=25; -update noar tt set v3='AZ2G226Q2R8HNJTTSVAN59A0KJ7ZK6LE58GEJV3IANTVLBM6F8XW27URGZLC0R4SVGJC78U0UXWJANUYHC0UC6XRQA78F9F8WB0OS6U7XO33S2NGZDBW34KPAQLEDQDZP9GC0U5SJCUTT6EC2VU7F2ZRGL3SWUHCY33B34RC6MIB2K76R3S2NTUFSWF0SPU8TI244CMJM330JBZKAXALUTRAQJEIRN6WID56PX8CWXYXF6UOI9N79TDG9SR982YB0' where id=25; -update noar ti set v3='AZ2G226Q2R8HNJTTSVAN59A0KJ7ZK6LE58GEJV3IANTVLBM6F8XW27URGZLC0R4SVGJC78U0UXWJANUYHC0UC6XRQA78F9F8WB0OS6U7XO33S2NGZDBW34KPAQLEDQDZP9GC0U5SJCUTT6EC2VU7F2ZRGL3SWUHCY33B34RC6MIB2K76R3S2NTUFSWF0SPU8TI244CMJM330JBZKAXALUTRAQJEIRN6WID56PX8CWXYXF6UOI9N79TDG9SR982YB0' where id=25; -update noar tt set v0='XGWW4COVKK098H85IWP096PUZ8KR80M4WL0ZLE5PRQ7D7M8A1BWNRPVWWXFFNFQS1KL6WE0GEN29QATEKY7350QA2KOSPDV3CDGA5K2CLNQ9QK3UH6ZC31Q5KDQG06EF945V68EM6KCN7B7HQ77IW8P5F7T4XEH1IEVD212F10G8YM61YWAZBGPPQV4H98ZTLZZSQMQXEH5JGFM9ZZ19YY3MHGK8W07JW27F9NYA2J1RF9F00ZSWZWMRZZBXDXQPI' where id=26; -update noar ti set v0='XGWW4COVKK098H85IWP096PUZ8KR80M4WL0ZLE5PRQ7D7M8A1BWNRPVWWXFFNFQS1KL6WE0GEN29QATEKY7350QA2KOSPDV3CDGA5K2CLNQ9QK3UH6ZC31Q5KDQG06EF945V68EM6KCN7B7HQ77IW8P5F7T4XEH1IEVD212F10G8YM61YWAZBGPPQV4H98ZTLZZSQMQXEH5JGFM9ZZ19YY3MHGK8W07JW27F9NYA2J1RF9F00ZSWZWMRZZBXDXQPI' where id=26; -update noar tt set v1='LSNNWGAB5OQACFE1YHR2JEF13EHQYA6CMOKARHRQF6F1BGXXHPHED9L2VYYS5SOBNBC78HGVA95C7JQTL7DBARI7JJW6KN7ZY0C8S7RYVKTBHG93WPXM8SE2WG930Y3S0PS2PQR049107ZYWLGCROSZABXOQO7PDJE7JACBFQLILIVCFYIOEW9BGX5DPNIHEAC22CQWVMAQZCF3AIQYV4MIM7672BJIYN2QTQFVKA9H1QEWCSQV2HPFS6YFMSKWHF' where id=26; -update noar ti set v1='LSNNWGAB5OQACFE1YHR2JEF13EHQYA6CMOKARHRQF6F1BGXXHPHED9L2VYYS5SOBNBC78HGVA95C7JQTL7DBARI7JJW6KN7ZY0C8S7RYVKTBHG93WPXM8SE2WG930Y3S0PS2PQR049107ZYWLGCROSZABXOQO7PDJE7JACBFQLILIVCFYIOEW9BGX5DPNIHEAC22CQWVMAQZCF3AIQYV4MIM7672BJIYN2QTQFVKA9H1QEWCSQV2HPFS6YFMSKWHF' where id=26; -update noar tt set v2='GP24FL97JZGRHJZE652AXEA2HGD6G9ZTFTD3A6XCR9DB3FSTFX5TZ1J2RD8OIVLJ06UTKP5FWN1LF0N9W04N0HTYK2YFKLVHXYDVDJ82MKPIDXTDSFQVKL0UJ6FL3VAEV4IZYKTWW9Z8UKVANXSGWKDBJ2VKWUNR8EG3Z3Y3SOR2JPOD78GXBAWO6CNSU4KG038RVWA50IT8V0QRQXBQZLBCL7NSBIKX9V6O9CB0B8RV8WF1J65CT4HZPB7A37444' where id=26; -update noar ti set v2='GP24FL97JZGRHJZE652AXEA2HGD6G9ZTFTD3A6XCR9DB3FSTFX5TZ1J2RD8OIVLJ06UTKP5FWN1LF0N9W04N0HTYK2YFKLVHXYDVDJ82MKPIDXTDSFQVKL0UJ6FL3VAEV4IZYKTWW9Z8UKVANXSGWKDBJ2VKWUNR8EG3Z3Y3SOR2JPOD78GXBAWO6CNSU4KG038RVWA50IT8V0QRQXBQZLBCL7NSBIKX9V6O9CB0B8RV8WF1J65CT4HZPB7A37444' where id=26; -update noar tt set v3='IWJJ8IXOFW2KT60CO6UMA15QEWE0RJ5YKJFZ7MJ4UF62Y2LXEU3SIKUBL4GBBCSDQ88ILE7LSEEDX3JQ3IK5GC6XO07KFFHA8OM4BZ983ZVCJA9V7VFZ62Q38Z06K8CXFGPS4KMG5L6TUG6SOWBE3A4UZ6TJU9NU6XPEDFAKSR9K2KDO64K9NUCITIXK2PAHU12C62S9N6FNOG27DO5A44W89FD4RS709L1KW89ZWCC7Z2K8ZY8QI6IUZAPDVRKOD' where id=26; -update noar ti set v3='IWJJ8IXOFW2KT60CO6UMA15QEWE0RJ5YKJFZ7MJ4UF62Y2LXEU3SIKUBL4GBBCSDQ88ILE7LSEEDX3JQ3IK5GC6XO07KFFHA8OM4BZ983ZVCJA9V7VFZ62Q38Z06K8CXFGPS4KMG5L6TUG6SOWBE3A4UZ6TJU9NU6XPEDFAKSR9K2KDO64K9NUCITIXK2PAHU12C62S9N6FNOG27DO5A44W89FD4RS709L1KW89ZWCC7Z2K8ZY8QI6IUZAPDVRKOD' where id=26; -update noar tt set v0='40ET51DFIRBAZZ7PD57GHKU1UL5TXXPR6VGLXZ13VUOARD8V9TWWYOFF891WI0Z004ZSSJ6PKZ808YO4D2YF0QGIAXHDXI2WJXHCKST2V8SVTHHU1TVJ9IB8AVA6MHXWWM0418B64H7DEAMUFY7JPIBIDWVYXTHP42JHL7GIRP4HGVR4MRGQUBXUSJJGKYF5FWT2PIQA102TBFA9Y17HPGRVGZ7LMHKC9FE7DWV2C1NNTJCZLS1B9VU38QFX0WR1L' where id=27; -update noar ti set v0='40ET51DFIRBAZZ7PD57GHKU1UL5TXXPR6VGLXZ13VUOARD8V9TWWYOFF891WI0Z004ZSSJ6PKZ808YO4D2YF0QGIAXHDXI2WJXHCKST2V8SVTHHU1TVJ9IB8AVA6MHXWWM0418B64H7DEAMUFY7JPIBIDWVYXTHP42JHL7GIRP4HGVR4MRGQUBXUSJJGKYF5FWT2PIQA102TBFA9Y17HPGRVGZ7LMHKC9FE7DWV2C1NNTJCZLS1B9VU38QFX0WR1L' where id=27; -update noar tt set v1='EXXL17US3FVZAEYCR2UOO90O3YAOXXXTL2HL6981VLH19HUACVG6VH24JXJAG0V323Q05ZPM15KNNLLT0JV9B4VSFDKZYBF7D92SNGK3YS31FLWPPAWVPPDPTDK22BZKRAENP6JIPDOYF0EI4TTF9T6F5DBYVRJ2DYROT592TNMS4A9H4XHLJSKXF3IJKSFJ2UDRHBVRBF4IX2HX2ZAM8VJ00HV3JR8AYEA0ZI8QQI57CC66JUOHTRZ051HCE7CUC' where id=27; -update noar ti set v1='EXXL17US3FVZAEYCR2UOO90O3YAOXXXTL2HL6981VLH19HUACVG6VH24JXJAG0V323Q05ZPM15KNNLLT0JV9B4VSFDKZYBF7D92SNGK3YS31FLWPPAWVPPDPTDK22BZKRAENP6JIPDOYF0EI4TTF9T6F5DBYVRJ2DYROT592TNMS4A9H4XHLJSKXF3IJKSFJ2UDRHBVRBF4IX2HX2ZAM8VJ00HV3JR8AYEA0ZI8QQI57CC66JUOHTRZ051HCE7CUC' where id=27; -update noar tt set v2='I2TVEX131HUB85YRMIOQ0EZ877JJV9NN3829JZII2UUL8W6JDZ2YTTPUJEOOSZO70DEWQ219HQB4AUZQ1PK5AR7LSXZBRMJ79LT7HDO3F628313340XLC8XW9MYKLNCKHXIDLWN3719OQ6DKVD9M2ICE7H2EXGOM2QPFMXQXOP94IOJ3E7HB2CBFP5MOKNOO5VQHE6X08F59UZ987V7CIJDVS8L5FY4710XRA3ATR0R13ZS4U06TZJGFHY7A85G98' where id=27; -update noar ti set v2='I2TVEX131HUB85YRMIOQ0EZ877JJV9NN3829JZII2UUL8W6JDZ2YTTPUJEOOSZO70DEWQ219HQB4AUZQ1PK5AR7LSXZBRMJ79LT7HDO3F628313340XLC8XW9MYKLNCKHXIDLWN3719OQ6DKVD9M2ICE7H2EXGOM2QPFMXQXOP94IOJ3E7HB2CBFP5MOKNOO5VQHE6X08F59UZ987V7CIJDVS8L5FY4710XRA3ATR0R13ZS4U06TZJGFHY7A85G98' where id=27; -update noar tt set v3='BEO2IUTH4NNLYU7P4J3X59GRPRPYXRKTTY1QRD5JA7EQJC7YMOH47YSBPV0NIQVDV9PG32ZGPYYDOUX3IO7WLKL9AWBQJ40ZYIRW03G050XR8AL9UHWLCJY0R8SICLOEDOLD3T3CID0BMCGPD2NCF6FUO4LFGX3264J0VG37H86LHHAVCDYMNS1F4SA60XD15ZV72U64I8N2A6Z7V2FSZHXRTEHDDA85Q9W7PVRSZ7B3QFTP09MLZBBIN9CD6U0I8' where id=27; -update noar ti set v3='BEO2IUTH4NNLYU7P4J3X59GRPRPYXRKTTY1QRD5JA7EQJC7YMOH47YSBPV0NIQVDV9PG32ZGPYYDOUX3IO7WLKL9AWBQJ40ZYIRW03G050XR8AL9UHWLCJY0R8SICLOEDOLD3T3CID0BMCGPD2NCF6FUO4LFGX3264J0VG37H86LHHAVCDYMNS1F4SA60XD15ZV72U64I8N2A6Z7V2FSZHXRTEHDDA85Q9W7PVRSZ7B3QFTP09MLZBBIN9CD6U0I8' where id=27; -update noar tt set v0='1PDPPXTL3Q3N3ODSP63B7TX83IM7SOEG4NFY6OI1RGLVT7SISVSKZQYGJ3C6B5KCOYMQ38TO12I068XH31DJY8K6CZ361KKZSUEC548O569N46BRI2GP43LUD817L8KLLFVWMVDLBPRQN294SBPR7M2VETHS72W1IFG4BY29GZ9S5E3IB8TH63Z4O07GYHNC38YXPFUZKPPJV6CP608VJI4RPANS302SB83S5MAOJU5IW991CCWC5RPROEQ7GK1PI' where id=28; -update noar ti set v0='1PDPPXTL3Q3N3ODSP63B7TX83IM7SOEG4NFY6OI1RGLVT7SISVSKZQYGJ3C6B5KCOYMQ38TO12I068XH31DJY8K6CZ361KKZSUEC548O569N46BRI2GP43LUD817L8KLLFVWMVDLBPRQN294SBPR7M2VETHS72W1IFG4BY29GZ9S5E3IB8TH63Z4O07GYHNC38YXPFUZKPPJV6CP608VJI4RPANS302SB83S5MAOJU5IW991CCWC5RPROEQ7GK1PI' where id=28; -update noar tt set v1='1BVEFAHYLBA8SLVSSB5HIZ7BC5VCKN27FILHHNR25V9MO7XOTY1I8GEOZ8B9CB23L88542JN484MKMMZE94M9U3N8AP8HC30EYADQYQZSOH2TEAZ2DVHLEZ4V2FSYMQBTQMQ6EX1TNX638AM61D5KCC0EPJNPR7FS9VRD9O0TCR79D71YR1SDQ3BTAI1SQS62F7YABR7CEWKEAASQLYIF7F7MOBH933QPNTYDUOB9ONLF3LDLECDJGF4E1BSEWN3N' where id=28; -update noar ti set v1='1BVEFAHYLBA8SLVSSB5HIZ7BC5VCKN27FILHHNR25V9MO7XOTY1I8GEOZ8B9CB23L88542JN484MKMMZE94M9U3N8AP8HC30EYADQYQZSOH2TEAZ2DVHLEZ4V2FSYMQBTQMQ6EX1TNX638AM61D5KCC0EPJNPR7FS9VRD9O0TCR79D71YR1SDQ3BTAI1SQS62F7YABR7CEWKEAASQLYIF7F7MOBH933QPNTYDUOB9ONLF3LDLECDJGF4E1BSEWN3N' where id=28; -update noar tt set v2='L1AF2NRL0R3YVG5S7MF9YC4EYTZJ1KXX3D06XHKJSD3LF1UQ1D1B0DM1CANTSIF963KGJRXMHCCMU4G3LBQ6QOCDPRGBYM924YOGACFRXX846AW96A8W3U51XYYJM7DSW1BQO22D5S5E2SE2DPO0KLB6N7FK46WM14HUG644GEX8S9AWL50G3PRUB2S2FSQ3HMCR0ZSEPVXT90LPKZYIKJ1S8L2XBU6B4GLQ0PPI0VH49LVZR5ZKEKHYMGWHDDUZW' where id=28; -update noar ti set v2='L1AF2NRL0R3YVG5S7MF9YC4EYTZJ1KXX3D06XHKJSD3LF1UQ1D1B0DM1CANTSIF963KGJRXMHCCMU4G3LBQ6QOCDPRGBYM924YOGACFRXX846AW96A8W3U51XYYJM7DSW1BQO22D5S5E2SE2DPO0KLB6N7FK46WM14HUG644GEX8S9AWL50G3PRUB2S2FSQ3HMCR0ZSEPVXT90LPKZYIKJ1S8L2XBU6B4GLQ0PPI0VH49LVZR5ZKEKHYMGWHDDUZW' where id=28; -update noar tt set v3='CV3OK1PIW1WGJM1KQJTNXNRG9T9PYHH6DH9HPTYMTYPMLY98K8ZAM349JK4SR6B9L4U2TN0Y45H7OWHRZDQVICEZHRQ68XUKDBA1OYLL8L92XT6RFPLMYQPT3GHUIPA60B9IBXZFN80OT289ZDGXL2BHBI5JWB0KKN2BCWBTN2RTVBLMLH2LAF4NDBUJD7WGPUOX4RZG89RY18S03NZC5TR2OJJ5932O69ZG7VOK5Z11MR82PQKCGL2FFI9HWNXP1' where id=28; -update noar ti set v3='CV3OK1PIW1WGJM1KQJTNXNRG9T9PYHH6DH9HPTYMTYPMLY98K8ZAM349JK4SR6B9L4U2TN0Y45H7OWHRZDQVICEZHRQ68XUKDBA1OYLL8L92XT6RFPLMYQPT3GHUIPA60B9IBXZFN80OT289ZDGXL2BHBI5JWB0KKN2BCWBTN2RTVBLMLH2LAF4NDBUJD7WGPUOX4RZG89RY18S03NZC5TR2OJJ5932O69ZG7VOK5Z11MR82PQKCGL2FFI9HWNXP1' where id=28; -update noar tt set v0='HKVY2KBUSEEXYG7JWLSVT5HEG1NRG26L37LH2TZ8BV3CXVD17S8DXK9VVC6GOLYCBJUBU354FBTH2PPAKCK7EB2WB5Q8XEHF0YIV1CDMOWJV9ZMCNTP4CJFC9NG5Q2IOX0B9UEX9QJACR5QP9B2PBX3BA45TDKU0L9GRJV87S3LN7QRAAJM11JQJJ0VBN87YNV3UYMQ6V1846TX50EE4LVT7NFOELCWFHPX2FRUHEEWZ8URSBYOJVFI0WZJJ76Y0T' where id=29; -update noar ti set v0='HKVY2KBUSEEXYG7JWLSVT5HEG1NRG26L37LH2TZ8BV3CXVD17S8DXK9VVC6GOLYCBJUBU354FBTH2PPAKCK7EB2WB5Q8XEHF0YIV1CDMOWJV9ZMCNTP4CJFC9NG5Q2IOX0B9UEX9QJACR5QP9B2PBX3BA45TDKU0L9GRJV87S3LN7QRAAJM11JQJJ0VBN87YNV3UYMQ6V1846TX50EE4LVT7NFOELCWFHPX2FRUHEEWZ8URSBYOJVFI0WZJJ76Y0T' where id=29; -update noar tt set v1='GQXAY9FAJVF1NTFM7UT72OPOAUXIERUMW76E02IKK5MKROUTMTS9D9EQSAGGJSUJYJ037PSCV0P99CK4IERYQPR1Y6XS2DWVP9APLSG99K0SFB9CCNVO8SQ5CHV8C5WW6XB77RLITPR4RCNHFGP64CKRVAA513T2UOP3IN8UJ0C60PW42LB9NLG45CQPAZ2N20E71EN8H8ZJNWB6B7AVV2ZMZ4J3TMS655HDS7M9P5MA6F3G61I3ANWU5EB03QCR8' where id=29; -update noar ti set v1='GQXAY9FAJVF1NTFM7UT72OPOAUXIERUMW76E02IKK5MKROUTMTS9D9EQSAGGJSUJYJ037PSCV0P99CK4IERYQPR1Y6XS2DWVP9APLSG99K0SFB9CCNVO8SQ5CHV8C5WW6XB77RLITPR4RCNHFGP64CKRVAA513T2UOP3IN8UJ0C60PW42LB9NLG45CQPAZ2N20E71EN8H8ZJNWB6B7AVV2ZMZ4J3TMS655HDS7M9P5MA6F3G61I3ANWU5EB03QCR8' where id=29; -update noar tt set v2='KSTHQ3ASWTOIE2I31S7EK2GOVJ9CQAQDEENGHG8Q895WSZ6BV75VB325G98HIBCRVX0TA2H02A0DIJQH632SYSRGIR970TJHD6D3XZ6JTXIY761IWPHQXAZ2AHUCNC0O10Q9M09EYD5LMLY1EDJHZMOPQHXYORC7SC8WIYGF257AQ4KGGC1WX2FDYWP169C3VA0XBLOAW6NU0QP5NJT064P2KAQXKX5D9O1IUH6UEKIKQ2FJ538YPYMHCLT71KI1M' where id=29; -update noar ti set v2='KSTHQ3ASWTOIE2I31S7EK2GOVJ9CQAQDEENGHG8Q895WSZ6BV75VB325G98HIBCRVX0TA2H02A0DIJQH632SYSRGIR970TJHD6D3XZ6JTXIY761IWPHQXAZ2AHUCNC0O10Q9M09EYD5LMLY1EDJHZMOPQHXYORC7SC8WIYGF257AQ4KGGC1WX2FDYWP169C3VA0XBLOAW6NU0QP5NJT064P2KAQXKX5D9O1IUH6UEKIKQ2FJ538YPYMHCLT71KI1M' where id=29; -update noar tt set v3='HPKC8C0ZYFBF4AED2VI4EWCXWB98LDYW1ZUFTI8J1Z2ANUOEM79M8R9SHRX5JWK4TWEZUWWM1SECSKPIXYN0KFKXI1D9414L11TE2X5COSQAXOQK3LE7ZTVE16VYVPECLBKKZZRL593X936PHEY4O292BDY7EPMD4DITXQR8XCWIKYDZQEX06LHN3TOVQ8D8E72RL7I3GOQOV4MU143S3NSAOIGH9XU9CFPU9BOAVTO7O6MXWAEC04ULG68WD2REC' where id=29; -update noar ti set v3='HPKC8C0ZYFBF4AED2VI4EWCXWB98LDYW1ZUFTI8J1Z2ANUOEM79M8R9SHRX5JWK4TWEZUWWM1SECSKPIXYN0KFKXI1D9414L11TE2X5COSQAXOQK3LE7ZTVE16VYVPECLBKKZZRL593X936PHEY4O292BDY7EPMD4DITXQR8XCWIKYDZQEX06LHN3TOVQ8D8E72RL7I3GOQOV4MU143S3NSAOIGH9XU9CFPU9BOAVTO7O6MXWAEC04ULG68WD2REC' where id=29; -update noar tt set v0='SEB5VYG0UCCXMJBFOG9R0AYJZSYPBXHT7T3ESNEV1PK3Z9K6KW04UOOHGGFNJLK0EZYMGBNY3C5REE90DUDGQS8T26XPKH5OCJDHXTMTGHZAK8Y23TOI8TF01PMF1JZHHT1KNP4MVBNKA1MVLRINTFDNI2WIPYWXEHT2MTIX7M2H5JJ6JLBMWHTFGIPG08TUO67DI5FC50XOR7HYXH6KIAOYA9MTF37LPFRCG03QUSUVR9HEPZM7BF7W8VCUJH8BC' where id=30; -update noar ti set v0='SEB5VYG0UCCXMJBFOG9R0AYJZSYPBXHT7T3ESNEV1PK3Z9K6KW04UOOHGGFNJLK0EZYMGBNY3C5REE90DUDGQS8T26XPKH5OCJDHXTMTGHZAK8Y23TOI8TF01PMF1JZHHT1KNP4MVBNKA1MVLRINTFDNI2WIPYWXEHT2MTIX7M2H5JJ6JLBMWHTFGIPG08TUO67DI5FC50XOR7HYXH6KIAOYA9MTF37LPFRCG03QUSUVR9HEPZM7BF7W8VCUJH8BC' where id=30; -update noar tt set v1='BMPWURUEY3IZXOYMTMD7OQAHPFUE47A8T9Q8SXE95VEVVLBV6QRZEGEP9LBUFHUC17PAAS65D3Y1D9C4H3C3QTDOUAM5TW9XRYNSBQI0L67XBY1OREZ00QXQUV45FFST7JMFGWUY85649TNMF82ZOM3Y7NK68E0H08PMMTB3GGJTMUOH0TFO92HNVXA7HUENJERPX76LLIE6JHNT8HQW0T3BIMCEAX6I5B0ZBWJYRJC51O15TF1YGSH4ADZGR86M9' where id=30; -update noar ti set v1='BMPWURUEY3IZXOYMTMD7OQAHPFUE47A8T9Q8SXE95VEVVLBV6QRZEGEP9LBUFHUC17PAAS65D3Y1D9C4H3C3QTDOUAM5TW9XRYNSBQI0L67XBY1OREZ00QXQUV45FFST7JMFGWUY85649TNMF82ZOM3Y7NK68E0H08PMMTB3GGJTMUOH0TFO92HNVXA7HUENJERPX76LLIE6JHNT8HQW0T3BIMCEAX6I5B0ZBWJYRJC51O15TF1YGSH4ADZGR86M9' where id=30; -update noar tt set v2='EEM8ECWGIR59COM0OIM0NN9D6R8ZXT28QCAWLBI3WRB6W9IKHARIYLIQX645KTHOXLV8UFI65HD68U533H3XU3RVCWQPWONC377RQPEHEKJ09ME8N0A95K1BYKI9SS20AZ17ZDNFXUK93MX4SO8E2YOYSP1RVI98I0IMFWTQIICLN089NSSSDBL0W3P0KRI1AA98SDW1YJV5AE16175Z8YCR7DEKCVWRWYHQZ1HFLZJ0RZ5RB0HJLCCU89GT268UI' where id=30; -update noar ti set v2='EEM8ECWGIR59COM0OIM0NN9D6R8ZXT28QCAWLBI3WRB6W9IKHARIYLIQX645KTHOXLV8UFI65HD68U533H3XU3RVCWQPWONC377RQPEHEKJ09ME8N0A95K1BYKI9SS20AZ17ZDNFXUK93MX4SO8E2YOYSP1RVI98I0IMFWTQIICLN089NSSSDBL0W3P0KRI1AA98SDW1YJV5AE16175Z8YCR7DEKCVWRWYHQZ1HFLZJ0RZ5RB0HJLCCU89GT268UI' where id=30; -update noar tt set v3='XV4WH7M3MDSXGXB5AZY22QY4YFRU8CJ6603AF6D8ED5STNRWBG91O02FQ6ZE7URZZ2KH0XQNQLUP9ZB2S0YT8Y0SXL8342BN317FFP375MMQT9TM7LIN9I0B9IVV8QK5LFE7TS7CX2XGKD79M3AK9TZQIDK1GN8IM8HSAVY4L59VVA3X0FJTSQZ115E3Z26SQZL1QDK8YQSGEIXZO1KB8IZGP3UV3Z3XO5J4HXYEBZEONCVOPR6HCA9E7DCZ1EXT0' where id=30; -update noar ti set v3='XV4WH7M3MDSXGXB5AZY22QY4YFRU8CJ6603AF6D8ED5STNRWBG91O02FQ6ZE7URZZ2KH0XQNQLUP9ZB2S0YT8Y0SXL8342BN317FFP375MMQT9TM7LIN9I0B9IVV8QK5LFE7TS7CX2XGKD79M3AK9TZQIDK1GN8IM8HSAVY4L59VVA3X0FJTSQZ115E3Z26SQZL1QDK8YQSGEIXZO1KB8IZGP3UV3Z3XO5J4HXYEBZEONCVOPR6HCA9E7DCZ1EXT0' where id=30; -update noar tt set v0='USGQUUVN3R8AY8OU7J5CPG3D32QQ6KCVBBDJE5GKTDFUIS9ED1SWNSVIU08U6DNAKYJ1ADMODB8AYI5PFBZFI2FDQGT48134F87ET26CMB0IGTJTVYI7F7W8E18PUSM9VAHZN746YJ49ELHXHAIT30RP29VH2FD3122381W277SVWAOTQFBPJOL4ZR8164F18C522U1R3QSTDX0B5OL3RIPSIHT5HERUW4VLBE1X35KX9VOH7OFJ9WXR8YCAZNUE3' where id=31; -update noar ti set v0='USGQUUVN3R8AY8OU7J5CPG3D32QQ6KCVBBDJE5GKTDFUIS9ED1SWNSVIU08U6DNAKYJ1ADMODB8AYI5PFBZFI2FDQGT48134F87ET26CMB0IGTJTVYI7F7W8E18PUSM9VAHZN746YJ49ELHXHAIT30RP29VH2FD3122381W277SVWAOTQFBPJOL4ZR8164F18C522U1R3QSTDX0B5OL3RIPSIHT5HERUW4VLBE1X35KX9VOH7OFJ9WXR8YCAZNUE3' where id=31; -update noar tt set v1='6HG9A9NA3CXI9ZTB7UGBKZ26FFVJDDPKVAUB3RBVK5BDJ2WCCLZJ945CRC36FX0MWMEKFPPXZE0QLP37DPR3QBHHN05Q5GZPO0ULDC9PN96AGWNYJCNUKSUT1ODSPAGTTHYFOQGYHGX6GP35YU420OZV2TYOW1T58WF2CPDAXUGLV3URYGR7BM4OA6ISP2UKUAGYS43OX4S0EXH0E8DLHJ6L8H595DQHVK8KTRKMENLYKKCBWWZ30WX8HZ52W386V' where id=31; -update noar ti set v1='6HG9A9NA3CXI9ZTB7UGBKZ26FFVJDDPKVAUB3RBVK5BDJ2WCCLZJ945CRC36FX0MWMEKFPPXZE0QLP37DPR3QBHHN05Q5GZPO0ULDC9PN96AGWNYJCNUKSUT1ODSPAGTTHYFOQGYHGX6GP35YU420OZV2TYOW1T58WF2CPDAXUGLV3URYGR7BM4OA6ISP2UKUAGYS43OX4S0EXH0E8DLHJ6L8H595DQHVK8KTRKMENLYKKCBWWZ30WX8HZ52W386V' where id=31; -update noar tt set v2='506VCFQW8979C0B58OKSU2SQ3MFVVBJ4YMRG37AOSJOEP1CTE5ITTCH8ZHYW7WZK9B415H8ZYYOXEEN48JB28C5HCCJXVGM0UYCQT30CIB91J2J4HFYCG56715FSO2AWXWU0YV9P06WPA9LX6LSWWC7X08FS9Y6WJSA2PJZD2MO4PNDTL2841Z7AMU2X86C45BQ0LJM371XM91TEIVIY9H66021012660B01EXHUR72HXPHASQL536IZ9T8V82EM8' where id=31; -update noar ti set v2='506VCFQW8979C0B58OKSU2SQ3MFVVBJ4YMRG37AOSJOEP1CTE5ITTCH8ZHYW7WZK9B415H8ZYYOXEEN48JB28C5HCCJXVGM0UYCQT30CIB91J2J4HFYCG56715FSO2AWXWU0YV9P06WPA9LX6LSWWC7X08FS9Y6WJSA2PJZD2MO4PNDTL2841Z7AMU2X86C45BQ0LJM371XM91TEIVIY9H66021012660B01EXHUR72HXPHASQL536IZ9T8V82EM8' where id=31; -update noar tt set v3='HFPTZVT8CHM2WHXYE56GP3G0G2MG1C6BY6819KBWCF6IQ9ADZ8D8TNR363VG2VO23O4UO0SBD6N7DA91E5J690ITBTV6DLZ83D4EWTOHEFOLAUBX8WV2O35GP583NKRHIHN4PPOTAY07UU5QERNDJU5EH3GC7J5KF5TKDZV3IMXDNHM73IAQ0S1MEDNGLNF5VA1IO80YCFP51E9O4MUDL3D604H12DU69LHDU6BEZ72KC9TFZ1466NGIAYBS4QDF0' where id=31; -update noar ti set v3='HFPTZVT8CHM2WHXYE56GP3G0G2MG1C6BY6819KBWCF6IQ9ADZ8D8TNR363VG2VO23O4UO0SBD6N7DA91E5J690ITBTV6DLZ83D4EWTOHEFOLAUBX8WV2O35GP583NKRHIHN4PPOTAY07UU5QERNDJU5EH3GC7J5KF5TKDZV3IMXDNHM73IAQ0S1MEDNGLNF5VA1IO80YCFP51E9O4MUDL3D604H12DU69LHDU6BEZ72KC9TFZ1466NGIAYBS4QDF0' where id=31; -update noar tt set v0='7W6GSG53LDKXZSQ3MJD9MSCTTHGS75JLPS2HM3BRXDGDWGQBEAHDFNE4MZRRDT6OYZS9FLX8YTZF4YCAZAZL658BMFZ6NX58UJS0UYUUWASQDC3V4FTVG2X821RB3HB0PWJIONYGU0OZEH5OT7WPKMJMMZ05IF7CCE71ZFO18UOD16Q9B9RFW2BGO1G5TYM8X02KDBC08A4FJGU93HLTFZNPXDRZ53FTXBES98ODKJ1TWGGMYKPL1KBB4HBOAKJ9M' where id=32; -update noar ti set v0='7W6GSG53LDKXZSQ3MJD9MSCTTHGS75JLPS2HM3BRXDGDWGQBEAHDFNE4MZRRDT6OYZS9FLX8YTZF4YCAZAZL658BMFZ6NX58UJS0UYUUWASQDC3V4FTVG2X821RB3HB0PWJIONYGU0OZEH5OT7WPKMJMMZ05IF7CCE71ZFO18UOD16Q9B9RFW2BGO1G5TYM8X02KDBC08A4FJGU93HLTFZNPXDRZ53FTXBES98ODKJ1TWGGMYKPL1KBB4HBOAKJ9M' where id=32; -update noar tt set v1='GQLCDHO5FAU8T1I11V0LQ4ARS5AINR4XN75MMHND73CJ7GJ1O2GAF4DHT1IVDQVNGTPHTK67ZEBXCPQ5O6ZMURJDKGYEFV3ZIWTDITYY6R3DTJOV5BMCTW1MLQ2CB9ISMF68O2RP8YEOOHS3NHV3W7IXVOCNMCM91DZNT2HFS58JFBPB5KNW0M0EHJC9QOAY13IXH14V89MO1UQXV0TA0DKTG2JUH8ANGTBMYGKXVSXDAHQCOEUZP2LGXK2D1YRMD' where id=32; -update noar ti set v1='GQLCDHO5FAU8T1I11V0LQ4ARS5AINR4XN75MMHND73CJ7GJ1O2GAF4DHT1IVDQVNGTPHTK67ZEBXCPQ5O6ZMURJDKGYEFV3ZIWTDITYY6R3DTJOV5BMCTW1MLQ2CB9ISMF68O2RP8YEOOHS3NHV3W7IXVOCNMCM91DZNT2HFS58JFBPB5KNW0M0EHJC9QOAY13IXH14V89MO1UQXV0TA0DKTG2JUH8ANGTBMYGKXVSXDAHQCOEUZP2LGXK2D1YRMD' where id=32; -update noar tt set v2='OEK4R7RVKPVE3BM7AK1PU2QO4PF39QTXBT7G11U9GFFNSNEUE3Y01NWTJETKGAZ6O5UWAA0OD35F0YIFQ7ADCEDWCGU00RWYNW83GFF75XOMQOB8JA560HQLT2HIZSAOYD8QJRRKWJ2QHCPNKGTJGB7EIUMNRIT7Q2HPQGORLN41ADVYA6ARQ9EF2AI4FLAAO3ISEJNF2GYEYAY0NVX3JUCHRS82II58UEJGMKZS1W72WRXJ5X0EK6KIPW1JR3KFT' where id=32; -update noar ti set v2='OEK4R7RVKPVE3BM7AK1PU2QO4PF39QTXBT7G11U9GFFNSNEUE3Y01NWTJETKGAZ6O5UWAA0OD35F0YIFQ7ADCEDWCGU00RWYNW83GFF75XOMQOB8JA560HQLT2HIZSAOYD8QJRRKWJ2QHCPNKGTJGB7EIUMNRIT7Q2HPQGORLN41ADVYA6ARQ9EF2AI4FLAAO3ISEJNF2GYEYAY0NVX3JUCHRS82II58UEJGMKZS1W72WRXJ5X0EK6KIPW1JR3KFT' where id=32; -update noar tt set v3='JP3JGE7PM28QA2IX19WADVBAZYB1TL4V19TBYA79KFN8602XS04M0263X2TNW6BQGBV9J6HZ4Z1CH5TKNCH06ZS5NRIHWSZKS670BYM22RXF3UMZ6NXQO2L7HWNFMLUGQ7RDLYY7M4WFSKKBLG388WS8T5H5A7NJN7WIMJJWR8HC4QVO1T9S43286BIHLX1CFALNJ0J8NUM3QDZT2YO4R81A9H7M9WEIC0QK0VON062IG3MED6MB7F6NRMMQ7G0LW' where id=32; -update noar ti set v3='JP3JGE7PM28QA2IX19WADVBAZYB1TL4V19TBYA79KFN8602XS04M0263X2TNW6BQGBV9J6HZ4Z1CH5TKNCH06ZS5NRIHWSZKS670BYM22RXF3UMZ6NXQO2L7HWNFMLUGQ7RDLYY7M4WFSKKBLG388WS8T5H5A7NJN7WIMJJWR8HC4QVO1T9S43286BIHLX1CFALNJ0J8NUM3QDZT2YO4R81A9H7M9WEIC0QK0VON062IG3MED6MB7F6NRMMQ7G0LW' where id=32; -update noar tt set v0='XJUNKKGNZYOPYWI0YNXXTUYO0VD841OAH95L5489WKH42SBTEUYXJG4CAR6EH6R1PX4P61LYPWZJR5SSWBL4UGTDKWYSRURLEVI0O8Q8H8P1OOUFJ5OE67B7UGEH9S5VQR8WPIHT3ZVHX3I4NZA9BXF6S00FP4CNZRUB9VMZKXUGW9YDZLH6Q7B7W274I4TAXJTL65IP5GI7EPQLUYKO4C62OII3EGLV1IDI7MF4KX9Y77KOIE7ZPX0IQ8AWF0PF4' where id=33; -update noar ti set v0='XJUNKKGNZYOPYWI0YNXXTUYO0VD841OAH95L5489WKH42SBTEUYXJG4CAR6EH6R1PX4P61LYPWZJR5SSWBL4UGTDKWYSRURLEVI0O8Q8H8P1OOUFJ5OE67B7UGEH9S5VQR8WPIHT3ZVHX3I4NZA9BXF6S00FP4CNZRUB9VMZKXUGW9YDZLH6Q7B7W274I4TAXJTL65IP5GI7EPQLUYKO4C62OII3EGLV1IDI7MF4KX9Y77KOIE7ZPX0IQ8AWF0PF4' where id=33; -update noar tt set v1='2GQWU5SSRWW772TCQKN4Z75CTVI4FBNPOZ4GLCBJ53D266L1P00K4NU3QNVQOTD5S153G0JQQFB1UJUIK2GAXGBM5UONRK85R2MUU91IQL6G887Z7QXZ0B777NS6JO8CIEY5GKIUUXBP0Q0KC6QGVK9VT5RCLJ0LPJHGN02VPRE48EHNCELO5YVYQOJVXY1CZ085JG6U987ZBMSJAEA6YB5SU4KO3MH4WZ8BEGGOI7JE8C8R35T2SOAJQ0TNATC87' where id=33; -update noar ti set v1='2GQWU5SSRWW772TCQKN4Z75CTVI4FBNPOZ4GLCBJ53D266L1P00K4NU3QNVQOTD5S153G0JQQFB1UJUIK2GAXGBM5UONRK85R2MUU91IQL6G887Z7QXZ0B777NS6JO8CIEY5GKIUUXBP0Q0KC6QGVK9VT5RCLJ0LPJHGN02VPRE48EHNCELO5YVYQOJVXY1CZ085JG6U987ZBMSJAEA6YB5SU4KO3MH4WZ8BEGGOI7JE8C8R35T2SOAJQ0TNATC87' where id=33; -update noar tt set v2='8L6DFI5EFNTY2L9SFPMJFQGA2Y2BAHIZ8PXP7Q6K9WFCKGIOP3S61V74A5B3GJ8VF4FJYZEE5FEL6GWSQ6D5C1GA8P095H0ST5YD573I4INKDMON9GMN2LGW0E7ORZE72G37540A1H5K83QBUTLK24Y2NMK2R1QHW19XAXWC32RH0P0UAGRY6YS2PLBT7E2KP9A19KH5C7NZXEGP0GQPWHBP1AIQFGLMAOQZH2XFQOQ7CX6CAF6WNCC7WGXFGY2UJ' where id=33; -update noar ti set v2='8L6DFI5EFNTY2L9SFPMJFQGA2Y2BAHIZ8PXP7Q6K9WFCKGIOP3S61V74A5B3GJ8VF4FJYZEE5FEL6GWSQ6D5C1GA8P095H0ST5YD573I4INKDMON9GMN2LGW0E7ORZE72G37540A1H5K83QBUTLK24Y2NMK2R1QHW19XAXWC32RH0P0UAGRY6YS2PLBT7E2KP9A19KH5C7NZXEGP0GQPWHBP1AIQFGLMAOQZH2XFQOQ7CX6CAF6WNCC7WGXFGY2UJ' where id=33; -update noar tt set v3='9K0I0PMN2FVXAJ7ITQQK9AC1IP346NAT7RBGXBK5KQ42JA73HZIC05K9BW1L9KU2VR0RB9H50DPYN0VOQ58RC4WRSW49L0T4TOV4S96BZWWJBZUIX5Z76QFA8EQQ5PUE6RYTIEGVYSVIMQ14JY75BV44ZXVCTFI71JS4S2J6FXKRICRY3XM1PREQ4ZV6O8BHZTL5NRTLSI4INTSRBYV1QBDJ0RCU6RIQNBYLYN93BMV9KBEDVQSQXJESY52EMZ1EI' where id=33; -update noar ti set v3='9K0I0PMN2FVXAJ7ITQQK9AC1IP346NAT7RBGXBK5KQ42JA73HZIC05K9BW1L9KU2VR0RB9H50DPYN0VOQ58RC4WRSW49L0T4TOV4S96BZWWJBZUIX5Z76QFA8EQQ5PUE6RYTIEGVYSVIMQ14JY75BV44ZXVCTFI71JS4S2J6FXKRICRY3XM1PREQ4ZV6O8BHZTL5NRTLSI4INTSRBYV1QBDJ0RCU6RIQNBYLYN93BMV9KBEDVQSQXJESY52EMZ1EI' where id=33; -update noar tt set v0='SI26W3G68GS54M7AMEB9AG2I5OEK9BA89KR7TG7KLBFOUGXH1MYIFCYYYX32I96QTKRCRP5QJJDQDR5OJLGC2F4QO90F93LJZZAE6BTN98DFS92IA1XQNN3XKSHW2I9Y02FHVFQ84YOZIM7XLA10KPJ1ZEWNZ7EA99JXHIF4EX3PQRO99LEQ0YXTEWZJQ47OEJZB3DAQDQAKLX7KKZZ2PIGN5EOWANGLUXCKFDX1OOVXB4E1XHUF6O0S32A72YKPG' where id=34; -update noar ti set v0='SI26W3G68GS54M7AMEB9AG2I5OEK9BA89KR7TG7KLBFOUGXH1MYIFCYYYX32I96QTKRCRP5QJJDQDR5OJLGC2F4QO90F93LJZZAE6BTN98DFS92IA1XQNN3XKSHW2I9Y02FHVFQ84YOZIM7XLA10KPJ1ZEWNZ7EA99JXHIF4EX3PQRO99LEQ0YXTEWZJQ47OEJZB3DAQDQAKLX7KKZZ2PIGN5EOWANGLUXCKFDX1OOVXB4E1XHUF6O0S32A72YKPG' where id=34; -update noar tt set v1='PO8QZ3A2OC1BP6M07DVLPL1GP8ODXZIVUPRPZ6ZCKOIQDU3GFR8D10N2TVB9J7COE8IAEJ1RVSDW84K9T2AGCJQ3DCQKIYESQK0VZSUB5GNLOQYZ9MZ17VYU7CFTZGGHCF8R82HJB7NVCLMVQ1AJZK9P8F89W5IOQ7J59OX0QKV0L712WJX2ARNW75SQPS7FK67QSHKNRDUIEXJVR3F54FY3Z4BL0O9CCN1U2UIUHTGC1ZUZS0TFPN9AZDGHLF9H2' where id=34; -update noar ti set v1='PO8QZ3A2OC1BP6M07DVLPL1GP8ODXZIVUPRPZ6ZCKOIQDU3GFR8D10N2TVB9J7COE8IAEJ1RVSDW84K9T2AGCJQ3DCQKIYESQK0VZSUB5GNLOQYZ9MZ17VYU7CFTZGGHCF8R82HJB7NVCLMVQ1AJZK9P8F89W5IOQ7J59OX0QKV0L712WJX2ARNW75SQPS7FK67QSHKNRDUIEXJVR3F54FY3Z4BL0O9CCN1U2UIUHTGC1ZUZS0TFPN9AZDGHLF9H2' where id=34; -update noar tt set v2='5N6HRFQ4949NXIMOPNIA6IKQHEXN2B0R7G3T2WS2RCWO7LVJSURZRCQ52O45R598M3BDHGO1ZW22C0WAOOWJ3CDP3SAXKTRHC2W5N9R8MMR50977PSLKYLOTXZ6SKNER8BT4LC7SCPHIRDAFFPP9398I678Q3EV3WIOZDJGE84L3KV0FLNJU0M0OACPH7HD6ENJX4MYB2L29SR28SVCEQUIR644Y0ODRMU8JYK18VZW80UUUR6KPU1LK2JMPU0WPR' where id=34; -update noar ti set v2='5N6HRFQ4949NXIMOPNIA6IKQHEXN2B0R7G3T2WS2RCWO7LVJSURZRCQ52O45R598M3BDHGO1ZW22C0WAOOWJ3CDP3SAXKTRHC2W5N9R8MMR50977PSLKYLOTXZ6SKNER8BT4LC7SCPHIRDAFFPP9398I678Q3EV3WIOZDJGE84L3KV0FLNJU0M0OACPH7HD6ENJX4MYB2L29SR28SVCEQUIR644Y0ODRMU8JYK18VZW80UUUR6KPU1LK2JMPU0WPR' where id=34; -update noar tt set v3='II772IKVGX1MX8RKL36PYI9JO2BZXQKCQARD630DZQFWCMPYLDRL0XU563SUV37FNISKK1C06JGTMUHKPODBSQ7R8TH9FPXSJVQUBDU6V23GBDOGBQIFAZAH0TWAE6WKG3P2S4AD5EY7K6IM5MM3NJJQRCJM6REH78QG081T5NMLCNGLZCBXI71MTSZ2AMBHU159LJR9XQ59A6SJT7C3UZRRGT0FFVWKKZXDBZV1FXQJ6KM5WXQPCVNO5C22Q5UPY' where id=34; -update noar ti set v3='II772IKVGX1MX8RKL36PYI9JO2BZXQKCQARD630DZQFWCMPYLDRL0XU563SUV37FNISKK1C06JGTMUHKPODBSQ7R8TH9FPXSJVQUBDU6V23GBDOGBQIFAZAH0TWAE6WKG3P2S4AD5EY7K6IM5MM3NJJQRCJM6REH78QG081T5NMLCNGLZCBXI71MTSZ2AMBHU159LJR9XQ59A6SJT7C3UZRRGT0FFVWKKZXDBZV1FXQJ6KM5WXQPCVNO5C22Q5UPY' where id=34; -update noar tt set v0='6RRGZWPIE81BJ57BSNVWQGQXCK05KYLUFA471G7L3UUN7EX9J1C534B3X41QN8YY6WEO5RMWFSEE30MY01LQN1VEDZA0F7M0K32LZC6ED4VTDPD6IZ2K2443N9R2LO8VOCLZLRJZDBPWIUBNVNDENVFK31M7OVZV0J2JGI4Y2JJQMKJG7SAN3F21OTGURRJ67ARF3NJ80SA2956N74NMUESIWR5C8NUHBGMAP8NJBTS5EZC902Y70TRSQCJP7321P' where id=35; -update noar ti set v0='6RRGZWPIE81BJ57BSNVWQGQXCK05KYLUFA471G7L3UUN7EX9J1C534B3X41QN8YY6WEO5RMWFSEE30MY01LQN1VEDZA0F7M0K32LZC6ED4VTDPD6IZ2K2443N9R2LO8VOCLZLRJZDBPWIUBNVNDENVFK31M7OVZV0J2JGI4Y2JJQMKJG7SAN3F21OTGURRJ67ARF3NJ80SA2956N74NMUESIWR5C8NUHBGMAP8NJBTS5EZC902Y70TRSQCJP7321P' where id=35; -update noar tt set v1='V8VTPC7BEKW93PHXRRAE123CQ9JIN0L0PQJA9PCBR06O3FF1HD8CHI8OKAABN2J42PXJ2C8JDLCCMGE0MS0D1GF3POQQ5856K3KN49HYD074NAG1ACYL7VOPOVCZMEZMI2Y7KINSBM7JMJNICJ0YTIW1D97QGC9NO1HFME9Q1M9SU98JPU44IGUPFNFP26JNQ6GH9A880NB3BER6SNDPA17S8OV1WM5Z28RYDP057BYFHB041DPAEVYW5KK50YXF8' where id=35; -update noar ti set v1='V8VTPC7BEKW93PHXRRAE123CQ9JIN0L0PQJA9PCBR06O3FF1HD8CHI8OKAABN2J42PXJ2C8JDLCCMGE0MS0D1GF3POQQ5856K3KN49HYD074NAG1ACYL7VOPOVCZMEZMI2Y7KINSBM7JMJNICJ0YTIW1D97QGC9NO1HFME9Q1M9SU98JPU44IGUPFNFP26JNQ6GH9A880NB3BER6SNDPA17S8OV1WM5Z28RYDP057BYFHB041DPAEVYW5KK50YXF8' where id=35; -update noar tt set v2='M40EG1BA6XTQLKBSJN8A9739NS4QI29XDURDLEMMNIW1CXAOZVGX5J1VG9JPWJKKLNYWKTXEYSEIEUR50OIU84YUDKOBNCA4P4IVD86PMBWPJ6Q0WJU3P7KF3DLQ9H8EP2JJMSSHSR5BCEIS4TSLDTF2H47IH637X80DJNMCTJN2ENEK51ST3UCQQ78AEQ5QHM1XBNW9BR1PPFUMU63NOK8BSM4Y24RCJ9QZWLBAPI6Q13CIB3V4MYZGPFPAYM5E9' where id=35; -update noar ti set v2='M40EG1BA6XTQLKBSJN8A9739NS4QI29XDURDLEMMNIW1CXAOZVGX5J1VG9JPWJKKLNYWKTXEYSEIEUR50OIU84YUDKOBNCA4P4IVD86PMBWPJ6Q0WJU3P7KF3DLQ9H8EP2JJMSSHSR5BCEIS4TSLDTF2H47IH637X80DJNMCTJN2ENEK51ST3UCQQ78AEQ5QHM1XBNW9BR1PPFUMU63NOK8BSM4Y24RCJ9QZWLBAPI6Q13CIB3V4MYZGPFPAYM5E9' where id=35; -update noar tt set v3='ELPMQLP458OO7NAL97BIEJ1J7ZM4U1BGMDBUTPH1A4WKHDMB5QVX3TJUIELK1MQXH81F008HC2QV2ZM707GB67WFIG2YR7KH3L1HR5JH1527P6BOJG35ORSSIHD1SOFIN39STN53GG74MIARZBYGJHNG1TQGI0A6SW3VV9OVM2MDSJN6IE3E9Z45WAJ2J03HZQ4HEJF96PEGNOPP3RC47419S9HKF1HSU22T6ZT8QBIY1X0U1VTXE73UWUYCSQ4XZ' where id=35; -update noar ti set v3='ELPMQLP458OO7NAL97BIEJ1J7ZM4U1BGMDBUTPH1A4WKHDMB5QVX3TJUIELK1MQXH81F008HC2QV2ZM707GB67WFIG2YR7KH3L1HR5JH1527P6BOJG35ORSSIHD1SOFIN39STN53GG74MIARZBYGJHNG1TQGI0A6SW3VV9OVM2MDSJN6IE3E9Z45WAJ2J03HZQ4HEJF96PEGNOPP3RC47419S9HKF1HSU22T6ZT8QBIY1X0U1VTXE73UWUYCSQ4XZ' where id=35; -update noar tt set v0='P7JUPRGYYN2914ZB40YYAE78T3CZYKZ3LWMT9X3X94Q4XYS7G4LT1VF4SPHLS0LZQHLAQP1ES8BPI0XNEYGXQC662H4EILD1Z2P4E4CBRYDIJU9OG7SXUSZ6RPHCGYBVQNOFDQIIBC66FGK9V1S0C8RXMQ6R6GL77ZR35HI7HVHSQ0USEBG0J7TQC67CY8V6BD8TRQO0O8SX0HRAVULJMTJR60HAEYYNT4DE25IDPIGX7T88NQUS8ZYOQD9U5LS49' where id=36; -update noar ti set v0='P7JUPRGYYN2914ZB40YYAE78T3CZYKZ3LWMT9X3X94Q4XYS7G4LT1VF4SPHLS0LZQHLAQP1ES8BPI0XNEYGXQC662H4EILD1Z2P4E4CBRYDIJU9OG7SXUSZ6RPHCGYBVQNOFDQIIBC66FGK9V1S0C8RXMQ6R6GL77ZR35HI7HVHSQ0USEBG0J7TQC67CY8V6BD8TRQO0O8SX0HRAVULJMTJR60HAEYYNT4DE25IDPIGX7T88NQUS8ZYOQD9U5LS49' where id=36; -update noar tt set v1='2V2NF6ULETBD58Z0LEMRB25477HWMDYOYYNLWI3KR86K3CMV5ZF6QGOGFI8FEAYJZVDP9EMU3C291ZXCWL8GDSPIOHPCHL7BU4T9VIS3Y5ZRDRZY9LFR2TOG25ZDI5I8K6EL17ZNRAZ5CANMEGLAY2VHWV8CLBSY3TDEIX9WS25VRYZM76R3A1GSGCIE0JDGFOA1MUJSP14SQD757ME54GACJHG4I0WNR1QKKF7MW3ISJULIWP1MGS8NOG0KZ4YHF' where id=36; -update noar ti set v1='2V2NF6ULETBD58Z0LEMRB25477HWMDYOYYNLWI3KR86K3CMV5ZF6QGOGFI8FEAYJZVDP9EMU3C291ZXCWL8GDSPIOHPCHL7BU4T9VIS3Y5ZRDRZY9LFR2TOG25ZDI5I8K6EL17ZNRAZ5CANMEGLAY2VHWV8CLBSY3TDEIX9WS25VRYZM76R3A1GSGCIE0JDGFOA1MUJSP14SQD757ME54GACJHG4I0WNR1QKKF7MW3ISJULIWP1MGS8NOG0KZ4YHF' where id=36; -update noar tt set v2='UUVWDIMYHHRSSM4UKUZGDR4TUGPPQKT9ZKTUEY5D88C3WV8O7RWIWFCLYN76BH9PZDPDPEIQLONIWVGIJY60BRQEN6D2CNQFDJHXP6QZLSXTNPG27YJVHZMOVE3D216A4DKHJLSJGXW3VRKH0SLT5PBEHAZDFIYW93HO22I5JM60N6Q6PZXFABE07WBIILAY8LOQRD7B7F4CTETS4XVO5DDJCQGNOTDLF1WUNL2DDXSCNUONOA12G6E8O8ZC3RDPI' where id=36; -update noar ti set v2='UUVWDIMYHHRSSM4UKUZGDR4TUGPPQKT9ZKTUEY5D88C3WV8O7RWIWFCLYN76BH9PZDPDPEIQLONIWVGIJY60BRQEN6D2CNQFDJHXP6QZLSXTNPG27YJVHZMOVE3D216A4DKHJLSJGXW3VRKH0SLT5PBEHAZDFIYW93HO22I5JM60N6Q6PZXFABE07WBIILAY8LOQRD7B7F4CTETS4XVO5DDJCQGNOTDLF1WUNL2DDXSCNUONOA12G6E8O8ZC3RDPI' where id=36; -update noar tt set v3='PCJJE28CZRNLBBLYX00AVE0PSWUQVEY5AWYSAX3JI85D78HGQ9M7XW7TQT17IDY331HMCWFO4NB4BXXCQD36G5ZJAZ67E6WIOFWW1BKYMIOJYQLEQYP8LCWWSA618L4IRIL6LHJIZ4Q2IYK3QISO5XS91YR7SPPFJNMZ2QIT8FXXWH26HBIZYVXEAUSW6W6K6FMPUJ9NKSHMPG24TNU1UKVV6TEUTSO0T1RXVXWKO89LZDXS21LWUHB2X8TE1RKBS' where id=36; -update noar ti set v3='PCJJE28CZRNLBBLYX00AVE0PSWUQVEY5AWYSAX3JI85D78HGQ9M7XW7TQT17IDY331HMCWFO4NB4BXXCQD36G5ZJAZ67E6WIOFWW1BKYMIOJYQLEQYP8LCWWSA618L4IRIL6LHJIZ4Q2IYK3QISO5XS91YR7SPPFJNMZ2QIT8FXXWH26HBIZYVXEAUSW6W6K6FMPUJ9NKSHMPG24TNU1UKVV6TEUTSO0T1RXVXWKO89LZDXS21LWUHB2X8TE1RKBS' where id=36; -update noar tt set v0='VZYC2EVSQNE7K10HWF8BZ6FKZX45ANCG9V41LPF4QK5NS5OLC1XMBWMRWXP3X7APPGKBVOX8YAEORQWLKDALS2TJ5EELTSGC2IESQSU49YNB0T98ITOV2D9NPZPB7P340GD5ZGGGMCW6BJ5WUJQRTX397TIX0146ZD8BQMDH42EJ7ZAZGJ9SWGHIDIGPEE2TBR0QHGPVPH184AN5N0628DLV5PVIBPEUDFMJJMKRHU6YMZAG8BFPESJYSP10IJE9A' where id=37; -update noar ti set v0='VZYC2EVSQNE7K10HWF8BZ6FKZX45ANCG9V41LPF4QK5NS5OLC1XMBWMRWXP3X7APPGKBVOX8YAEORQWLKDALS2TJ5EELTSGC2IESQSU49YNB0T98ITOV2D9NPZPB7P340GD5ZGGGMCW6BJ5WUJQRTX397TIX0146ZD8BQMDH42EJ7ZAZGJ9SWGHIDIGPEE2TBR0QHGPVPH184AN5N0628DLV5PVIBPEUDFMJJMKRHU6YMZAG8BFPESJYSP10IJE9A' where id=37; -update noar tt set v1='QLGG0UEIAR6V8B7G6BVB9NTUOARB4FRCADPLCGJQY8DO5JA4B76917TI57RDEY6Z1IE1PLMDY7OXZOHABENG6EBQGTKEP2WEYWLA8VX4JUR7BFW189IUSX41ZCEANXXBI0B7W8GYHRFRPLRM43U4U10HZI8ZD6DQLKJY2V5G36PUBQMCYVKGTHBQ30MJFAMLWPB76ECVDG5YN8GVTXE229B8S3P1CJ7DSN0UWRN7JBZF03S9LRZXFI4Z04CY81TRT' where id=37; -update noar ti set v1='QLGG0UEIAR6V8B7G6BVB9NTUOARB4FRCADPLCGJQY8DO5JA4B76917TI57RDEY6Z1IE1PLMDY7OXZOHABENG6EBQGTKEP2WEYWLA8VX4JUR7BFW189IUSX41ZCEANXXBI0B7W8GYHRFRPLRM43U4U10HZI8ZD6DQLKJY2V5G36PUBQMCYVKGTHBQ30MJFAMLWPB76ECVDG5YN8GVTXE229B8S3P1CJ7DSN0UWRN7JBZF03S9LRZXFI4Z04CY81TRT' where id=37; -update noar tt set v2='WCFWJ2VCYRPGWTYQ5PZUJTMM9VA53T1RBSBUPLD36IXOEY13EV5TT38RARM7V82X2I7ZJ1ZLRXAF99PTYD8K1G8JIGH7N25T43E9NIRPMGR7RV2OL9WLBEJ0OT0CQNBKJIO7F2OMVUA20GKMES8BOU74NBJPNCVODQAJFRLK4SP2WDM6KUYXLOY7C2BYJASID5SQNS7ZFZKWHN5M40BGP9LZKDNK05J4N5HA4MHVJLIFHDEUGJ7XPYNGA79SZBBLT' where id=37; -update noar ti set v2='WCFWJ2VCYRPGWTYQ5PZUJTMM9VA53T1RBSBUPLD36IXOEY13EV5TT38RARM7V82X2I7ZJ1ZLRXAF99PTYD8K1G8JIGH7N25T43E9NIRPMGR7RV2OL9WLBEJ0OT0CQNBKJIO7F2OMVUA20GKMES8BOU74NBJPNCVODQAJFRLK4SP2WDM6KUYXLOY7C2BYJASID5SQNS7ZFZKWHN5M40BGP9LZKDNK05J4N5HA4MHVJLIFHDEUGJ7XPYNGA79SZBBLT' where id=37; -update noar tt set v3='MO2GY6Y24Z3PV67LWO081TA9FMHWX10JVJ8OUIWPACPFZ9PBHPDLHC0B23IQ2YP49BC6WOBVP1L25GG9T0SMQHEAVVN9T2SK6EBOHYCPMB9BIZYSWBES9E3I8AQS4F2ILSAHEKM8UD9TK8QC6CCAN25ZAWR8J0KYTCO63FYA3BJLP0UIL2RJIAST9GDWNQPL463P3B1WWOTGGPE31C9DHKDI20SHQS4Q872VL6HX3MRYM1JB45SOR8SCGWAXVXWQU' where id=37; -update noar ti set v3='MO2GY6Y24Z3PV67LWO081TA9FMHWX10JVJ8OUIWPACPFZ9PBHPDLHC0B23IQ2YP49BC6WOBVP1L25GG9T0SMQHEAVVN9T2SK6EBOHYCPMB9BIZYSWBES9E3I8AQS4F2ILSAHEKM8UD9TK8QC6CCAN25ZAWR8J0KYTCO63FYA3BJLP0UIL2RJIAST9GDWNQPL463P3B1WWOTGGPE31C9DHKDI20SHQS4Q872VL6HX3MRYM1JB45SOR8SCGWAXVXWQU' where id=37; -update noar tt set v0='BLEMK4WHMRMRC2168NSCHC0J1XDRQJAJWN898EK8XDNFPUQ8WK9G70B1E4C2J6J97KA2BH97WSPQKL7I7TWP26FVJQH15MQ7AHG0Q0B3W2ZTTBALUYM4S171OJV1YC0D1IVK6VSQMLL27OQR9Q8DPF6NAZJVU7BWCEBW79SVGCWFIBE997DUYGV24MP955I2QWGA0D8TSJLJPU2C6P8ZAX1ZZHBZ7PWBKNLFQ0UWZF3FWFY8E1O6K17P3Z6CY5CD7' where id=38; -update noar ti set v0='BLEMK4WHMRMRC2168NSCHC0J1XDRQJAJWN898EK8XDNFPUQ8WK9G70B1E4C2J6J97KA2BH97WSPQKL7I7TWP26FVJQH15MQ7AHG0Q0B3W2ZTTBALUYM4S171OJV1YC0D1IVK6VSQMLL27OQR9Q8DPF6NAZJVU7BWCEBW79SVGCWFIBE997DUYGV24MP955I2QWGA0D8TSJLJPU2C6P8ZAX1ZZHBZ7PWBKNLFQ0UWZF3FWFY8E1O6K17P3Z6CY5CD7' where id=38; -update noar tt set v1='3U1EKVNAUPBJSZOF7VTPEYGHFUIJ11JETHL8HU65OWMD8TELHE2THLI58JEBCKXCII7QQQAWUGZKA1FWS0EHZUXQFK8DQJ4OB0PWFLKSHCHZDF2HBCY6WRSI7J447TTFNSDGPH07S9J17RGIXI8ROWSPNRXWLOFLHKZBXPMWDL01JWNWFAZ8SFVMBO2V02E2IZ3AO7KUB0LGJTZBG1FAWT0C6PCP54YI5KRYB7ZJSTPUYZXNB3U5P1YFUZHCJ2U8M' where id=38; -update noar ti set v1='3U1EKVNAUPBJSZOF7VTPEYGHFUIJ11JETHL8HU65OWMD8TELHE2THLI58JEBCKXCII7QQQAWUGZKA1FWS0EHZUXQFK8DQJ4OB0PWFLKSHCHZDF2HBCY6WRSI7J447TTFNSDGPH07S9J17RGIXI8ROWSPNRXWLOFLHKZBXPMWDL01JWNWFAZ8SFVMBO2V02E2IZ3AO7KUB0LGJTZBG1FAWT0C6PCP54YI5KRYB7ZJSTPUYZXNB3U5P1YFUZHCJ2U8M' where id=38; -update noar tt set v2='XYXXOVJA3MVYICGJI92SLTQ8MA44NNQ456OMEAT8TZDDBCNWJH5ZEUVBGGWR9AXMHXKCAMZT6RQZVR6N1R5XOV257EFKV4JKIBOHRSOU0H057G5OZGGECT6YVFC04GVS3BFHXQYIB0AXOWPDAEM9B82ISPB1WWG9I1QEMGHUXRYFNWK7DWORZMFYP25BTUYYFJB7BYPZ37SCAEWMWNNRXLL8PWQYIW12K68AJ1VGLNAE7X2OY41F0FM9JPDSBUPUQ' where id=38; -update noar ti set v2='XYXXOVJA3MVYICGJI92SLTQ8MA44NNQ456OMEAT8TZDDBCNWJH5ZEUVBGGWR9AXMHXKCAMZT6RQZVR6N1R5XOV257EFKV4JKIBOHRSOU0H057G5OZGGECT6YVFC04GVS3BFHXQYIB0AXOWPDAEM9B82ISPB1WWG9I1QEMGHUXRYFNWK7DWORZMFYP25BTUYYFJB7BYPZ37SCAEWMWNNRXLL8PWQYIW12K68AJ1VGLNAE7X2OY41F0FM9JPDSBUPUQ' where id=38; -update noar tt set v3='5L73SKY8XCDCE44Z5XSXL2IK878E2ZQV6PCRB3Q1CWQ7QU6OBEAXJO7RN2HPX7IXDR17QR54S3C2YCE8FV9X4ILFP7ZZ69FWM2W50ALPA72SUMDBYWVGC9B8ICDOP9PHYZ89ESF0SD9X71M2JGGNAQYAEL6TK15KCSG7EAIUWSW6M3SOZLD4GSUWJZ971TG9UP1AWK6T00KFZJVOAD76ZV10XZ8PZER0DIKK7FBZ18TQDQ4Z0KX8WQM6LX0APV7H4' where id=38; -update noar ti set v3='5L73SKY8XCDCE44Z5XSXL2IK878E2ZQV6PCRB3Q1CWQ7QU6OBEAXJO7RN2HPX7IXDR17QR54S3C2YCE8FV9X4ILFP7ZZ69FWM2W50ALPA72SUMDBYWVGC9B8ICDOP9PHYZ89ESF0SD9X71M2JGGNAQYAEL6TK15KCSG7EAIUWSW6M3SOZLD4GSUWJZ971TG9UP1AWK6T00KFZJVOAD76ZV10XZ8PZER0DIKK7FBZ18TQDQ4Z0KX8WQM6LX0APV7H4' where id=38; -update noar tt set v0='B4IMNLSGG9KWHN21N6KI1DE8AM0SFA8P6YV5WF3PWKLW9LLO20AW2BL8MH60HAQEP15LE59KU0U9KFE1ZXW154CJXMWNXNWTV1GNR24T6ES5EAXT0Q9P5SN2FAP4BQI8PTPPE0S7FZ5W5NUAB0YG1UXR4KGWNFFZELBBJDBGR4TWIR6SZ0UWLKL398XP8B7712OUSLUBYJZD03GPBBQMWBVSPZWU1O2B4ALC0MFXF7XEINIDHMUWI64EVIB3YTFWW' where id=39; -update noar ti set v0='B4IMNLSGG9KWHN21N6KI1DE8AM0SFA8P6YV5WF3PWKLW9LLO20AW2BL8MH60HAQEP15LE59KU0U9KFE1ZXW154CJXMWNXNWTV1GNR24T6ES5EAXT0Q9P5SN2FAP4BQI8PTPPE0S7FZ5W5NUAB0YG1UXR4KGWNFFZELBBJDBGR4TWIR6SZ0UWLKL398XP8B7712OUSLUBYJZD03GPBBQMWBVSPZWU1O2B4ALC0MFXF7XEINIDHMUWI64EVIB3YTFWW' where id=39; -update noar tt set v1='WWW6M0YXSMIZJAFX1NPFPL7B9S75TM45GCU759PAHIDWACM5LB5IOY7GZSYK0QOZC9DQ2NNAI4ZW0RAXSZFV6YZ85RTW5JMJTVPYTCJAHSL2QPOZWURJTUI7U3ASW5P99X5QNXPXOCIWVWWFG86L7YLHCE83HPA1V1P3VFPZB6ASQEZIKM5ZKIMFND91UQMCNNYQKSKEMFDAJ7CE9Y134AV2HI4V2O5XA8EL0CDP3UIOBQ4K0WMIPE3I8HHDB18P3' where id=39; -update noar ti set v1='WWW6M0YXSMIZJAFX1NPFPL7B9S75TM45GCU759PAHIDWACM5LB5IOY7GZSYK0QOZC9DQ2NNAI4ZW0RAXSZFV6YZ85RTW5JMJTVPYTCJAHSL2QPOZWURJTUI7U3ASW5P99X5QNXPXOCIWVWWFG86L7YLHCE83HPA1V1P3VFPZB6ASQEZIKM5ZKIMFND91UQMCNNYQKSKEMFDAJ7CE9Y134AV2HI4V2O5XA8EL0CDP3UIOBQ4K0WMIPE3I8HHDB18P3' where id=39; -update noar tt set v2='R72ZGMWBTTUYGM2EJ0DQFE7LY1B8C6F83VRQQ1EI1TM4GYOMQORPCNZ2FKS1802XU7UGHGMJ5GLB7TVDT54HNVXK9Q6V7H8M7TOUP9L0FC06Y0X3HASMUJPBEB3VTO47OGQ345QKRUGGMMBFK16LTNBNK1QFH5NF3Y2LVD2UV2NALPUPERN0YB06DZ736UPOJS78W22XAHKQ97LU19AP5JXBSLSMKTU96IP087DB89XNP8463RHND2D81SZXX0HQ9' where id=39; -update noar ti set v2='R72ZGMWBTTUYGM2EJ0DQFE7LY1B8C6F83VRQQ1EI1TM4GYOMQORPCNZ2FKS1802XU7UGHGMJ5GLB7TVDT54HNVXK9Q6V7H8M7TOUP9L0FC06Y0X3HASMUJPBEB3VTO47OGQ345QKRUGGMMBFK16LTNBNK1QFH5NF3Y2LVD2UV2NALPUPERN0YB06DZ736UPOJS78W22XAHKQ97LU19AP5JXBSLSMKTU96IP087DB89XNP8463RHND2D81SZXX0HQ9' where id=39; -update noar tt set v3='I6RAY59JTJM0VVCWEA3KVOGUZ8LUVEWO9TC7IVR40TRTRX0EOMNNV46AHEFHCFA5MJYFLKPDGJXP97WZKG2K3HGUKG6JX81M3SOEX2WNDOFU3J0WD253TGUBE18343XG2HZLI1N0M7GLQ5K179NZ5J7C4QJKV031V3L1PMULL8EAWT1XL05SHW9ZF8TIQ3RRWIZK8T4QDDV6MHZP9B6WXWS6UPGJ448BSK59XLXHNA2ZKADCUV3DOIGZM1TDD2WVN' where id=39; -update noar ti set v3='I6RAY59JTJM0VVCWEA3KVOGUZ8LUVEWO9TC7IVR40TRTRX0EOMNNV46AHEFHCFA5MJYFLKPDGJXP97WZKG2K3HGUKG6JX81M3SOEX2WNDOFU3J0WD253TGUBE18343XG2HZLI1N0M7GLQ5K179NZ5J7C4QJKV031V3L1PMULL8EAWT1XL05SHW9ZF8TIQ3RRWIZK8T4QDDV6MHZP9B6WXWS6UPGJ448BSK59XLXHNA2ZKADCUV3DOIGZM1TDD2WVN' where id=39; -update noar tt set v0='993LPX5KQ7LIL089G7YFC4ZLW6MBK1SMIMSHVEVLVLG46WJP2H6K9KC3V7MK4UB0I0LHSQW9I1Y3S4HGC781WR9F5QIDL6TL5P3Q9MAL1IFJW5G9MAII7CI0UOJQYLAJDW837MVT7NVVBG0KN58WBZGWP4TEHE5SKSD6B63MLSWUW3HTENUPHWL81A4SV3JL4GR6FJWQOU3RCBLM3H3ZKKIHLS6UB49N3URGCBVPW8KYNSETT57EODXUSB4FFEB96' where id=40; -update noar ti set v0='993LPX5KQ7LIL089G7YFC4ZLW6MBK1SMIMSHVEVLVLG46WJP2H6K9KC3V7MK4UB0I0LHSQW9I1Y3S4HGC781WR9F5QIDL6TL5P3Q9MAL1IFJW5G9MAII7CI0UOJQYLAJDW837MVT7NVVBG0KN58WBZGWP4TEHE5SKSD6B63MLSWUW3HTENUPHWL81A4SV3JL4GR6FJWQOU3RCBLM3H3ZKKIHLS6UB49N3URGCBVPW8KYNSETT57EODXUSB4FFEB96' where id=40; -update noar tt set v1='G20KIJ273MJUZIS1CETODHSCF2R7IDEC9B911INZS4J5SIAX7O50LPT593YQS8PZFUFYLVIRHDILBW5J5YPRDG2GKX64NEWVEOPBNBNQIGJXLCXDVH9ETJXR936IM6ZX24OPOQPZ6F39GFLEV27809QH9HZQJDBTWNG62TV1686957XBNX0NLHKY2YB19RVM3D43OELFAQ8DAJR7SJ41Z1ZCJCCBGTH2RIL5L7WR8LB141MHU736KZ0B965T6HATI' where id=40; -update noar ti set v1='G20KIJ273MJUZIS1CETODHSCF2R7IDEC9B911INZS4J5SIAX7O50LPT593YQS8PZFUFYLVIRHDILBW5J5YPRDG2GKX64NEWVEOPBNBNQIGJXLCXDVH9ETJXR936IM6ZX24OPOQPZ6F39GFLEV27809QH9HZQJDBTWNG62TV1686957XBNX0NLHKY2YB19RVM3D43OELFAQ8DAJR7SJ41Z1ZCJCCBGTH2RIL5L7WR8LB141MHU736KZ0B965T6HATI' where id=40; -update noar tt set v2='KQQWXZC7RRYMYUHA95EXL4KSC2YXUNPVOTXTQGVSRTSAFC4DXMQ7C1DEIJDQ682UIUCHJ0985NI7T6OLLCJ4ZKJH1PM93QT2OJFQP576FSLCVB57GEHSFZEXMVJO0KA0FSND0P4QCIFCSETC6TS5HLOGD6CBGW3QIW241P855G4KMGJPSBDXZ4LGC87GZT6Z8101K4MB4WI680G9ZPDR5IOXM6ZO0L7VBTKY4CRQBL990JLBGAXXEWZPM92BZ7SH4' where id=40; -update noar ti set v2='KQQWXZC7RRYMYUHA95EXL4KSC2YXUNPVOTXTQGVSRTSAFC4DXMQ7C1DEIJDQ682UIUCHJ0985NI7T6OLLCJ4ZKJH1PM93QT2OJFQP576FSLCVB57GEHSFZEXMVJO0KA0FSND0P4QCIFCSETC6TS5HLOGD6CBGW3QIW241P855G4KMGJPSBDXZ4LGC87GZT6Z8101K4MB4WI680G9ZPDR5IOXM6ZO0L7VBTKY4CRQBL990JLBGAXXEWZPM92BZ7SH4' where id=40; -update noar tt set v3='R7732WUFVPUQ2FSPG2M64R2NWRSJXF65DEXK4ZLARSVJBFNRJYTW0OO5FJHWHLZDDURYFCSCF35WDLHR092CRIFC1DWSDC69XZ13ZDL30Y33IQW9ZS682HUG7JTXMKML50J9YJQQ7757LM5PVXS6YMNECT3N9D1H0MKSZCNV4R3SLEGHRCQXI1335UXBZSPP3GD9ZJ64A0KUB2QQZ4O6CDS9P5LSYWKHW8FZSS8I8HHKTFB1MIBMZZI5M7G70DMIM' where id=40; -update noar ti set v3='R7732WUFVPUQ2FSPG2M64R2NWRSJXF65DEXK4ZLARSVJBFNRJYTW0OO5FJHWHLZDDURYFCSCF35WDLHR092CRIFC1DWSDC69XZ13ZDL30Y33IQW9ZS682HUG7JTXMKML50J9YJQQ7757LM5PVXS6YMNECT3N9D1H0MKSZCNV4R3SLEGHRCQXI1335UXBZSPP3GD9ZJ64A0KUB2QQZ4O6CDS9P5LSYWKHW8FZSS8I8HHKTFB1MIBMZZI5M7G70DMIM' where id=40; -update noar tt set v0='Z3MCG8M3D3Y1FY3T9LXZGFNSPSABYWJPN1LRNSWZZDWLVUMUROCS747SFXQ16L0EFLZ8ZUTXFR0664NYK2MNRBO1CZ0VDHZN9WNIJZSTXD1101APO8RBR4P6NM4CS3KP7B3EBPEJI9VVVO8VSVLZ79B3YX559EC0TF4ANCB9V5DGR0SEX7UX78D9BUIFAZKFWP0UCBOMROPT9AEBMPC0NTM9O6ZGC540D5RF5DR3XVXDC063N6I3EV5MT2O6KYPHO' where id=41; -update noar ti set v0='Z3MCG8M3D3Y1FY3T9LXZGFNSPSABYWJPN1LRNSWZZDWLVUMUROCS747SFXQ16L0EFLZ8ZUTXFR0664NYK2MNRBO1CZ0VDHZN9WNIJZSTXD1101APO8RBR4P6NM4CS3KP7B3EBPEJI9VVVO8VSVLZ79B3YX559EC0TF4ANCB9V5DGR0SEX7UX78D9BUIFAZKFWP0UCBOMROPT9AEBMPC0NTM9O6ZGC540D5RF5DR3XVXDC063N6I3EV5MT2O6KYPHO' where id=41; -update noar tt set v1='46MKAPEF3NX2QVY44GJC9D7V2Z24DL6B32XK5XG6WI46CB59G13U8CVKBLGF2Z3JI3DTIL4ZCV1QUM8KZJ7HFINJAR69U9XAZLBQK3T0N3D07F0VUBHGXTDSLEM531CDBACDYN51GQ0C0NNALOLSUY5TVEC9YUFB7N17GIHLL1OQIT69VY2BPTP4ZL4RLGJFM6BCNIDZGM2AQ47OKRAA3HUH1H57QBQYDLX3DXXUI4GXIE05822GCIKGGLVH0I5CD' where id=41; -update noar ti set v1='46MKAPEF3NX2QVY44GJC9D7V2Z24DL6B32XK5XG6WI46CB59G13U8CVKBLGF2Z3JI3DTIL4ZCV1QUM8KZJ7HFINJAR69U9XAZLBQK3T0N3D07F0VUBHGXTDSLEM531CDBACDYN51GQ0C0NNALOLSUY5TVEC9YUFB7N17GIHLL1OQIT69VY2BPTP4ZL4RLGJFM6BCNIDZGM2AQ47OKRAA3HUH1H57QBQYDLX3DXXUI4GXIE05822GCIKGGLVH0I5CD' where id=41; -update noar tt set v2='KJQPN7FELWSAGIMTUZSS5G1Y4S6RZRDM117CQMC2VTXX7WP1WNPHRFTJORJ0ZAV0VKVKRMKXSPL60LTU9BMKXF50XELPVUYYGWHPH5KXIKTJBT1ZUQ5MK4QMKR1I22S8FJHYK29E2UQXK8J50D3JSIWFHGMBENW4KWWZH0RT8F3CGKGNL6F7NHJUV2JX2FXG8AFKRXAO0B5OK9ZEW95LGDJK52OQLW1DZIIIFXXO54JAGOFO350CLZWR9HDEIFKIH' where id=41; -update noar ti set v2='KJQPN7FELWSAGIMTUZSS5G1Y4S6RZRDM117CQMC2VTXX7WP1WNPHRFTJORJ0ZAV0VKVKRMKXSPL60LTU9BMKXF50XELPVUYYGWHPH5KXIKTJBT1ZUQ5MK4QMKR1I22S8FJHYK29E2UQXK8J50D3JSIWFHGMBENW4KWWZH0RT8F3CGKGNL6F7NHJUV2JX2FXG8AFKRXAO0B5OK9ZEW95LGDJK52OQLW1DZIIIFXXO54JAGOFO350CLZWR9HDEIFKIH' where id=41; -update noar tt set v3='YY06IPGGO2185RI97507ZEU5GJDLL1B1RRXQBPR84A9FZJAS0HIXW5UV3WSD5H274H16JYTIKDKHZ972RWEW1EL0CISWMTJBJ5O4DM649JN3GX1TJGHFOUTBKDGBR2J2RIUG2O8YEVT0Z82QSY0CPC4FRA1S4SVZKXOBS45MUV90MTHVOSU0DSW2EAI4NNFOC2CDKDBNIQGUK887SF6H19XXRV6CQCBGZ4YUWJ49W4HD4IXAHD8Q6PNU0CKO168NV' where id=41; -update noar ti set v3='YY06IPGGO2185RI97507ZEU5GJDLL1B1RRXQBPR84A9FZJAS0HIXW5UV3WSD5H274H16JYTIKDKHZ972RWEW1EL0CISWMTJBJ5O4DM649JN3GX1TJGHFOUTBKDGBR2J2RIUG2O8YEVT0Z82QSY0CPC4FRA1S4SVZKXOBS45MUV90MTHVOSU0DSW2EAI4NNFOC2CDKDBNIQGUK887SF6H19XXRV6CQCBGZ4YUWJ49W4HD4IXAHD8Q6PNU0CKO168NV' where id=41; -update noar tt set v0='OE23U00BRJNAN1Q6CLG6UX86B4B7F04DNNZ7488OALTICLR3RQL5EKLTQKRH1648N96KZ4JA5GDA19ZL7W0RHH2VN6ND6ZG9Y7OW2JFN3G03JSYEPX9F8ACQ8OPSW64X2GMXA45MXK5L5C84LJH5NGCDD0Z60GN0J48KE72U2QZ78NERFSU6E1KDRNKOFFU6ZXEO5D3708Z28A3A4S7Y6Z6OIQTQ947OZ5E9CDK7ZG73FME1IDK56HWWHE57UMH48' where id=42; -update noar ti set v0='OE23U00BRJNAN1Q6CLG6UX86B4B7F04DNNZ7488OALTICLR3RQL5EKLTQKRH1648N96KZ4JA5GDA19ZL7W0RHH2VN6ND6ZG9Y7OW2JFN3G03JSYEPX9F8ACQ8OPSW64X2GMXA45MXK5L5C84LJH5NGCDD0Z60GN0J48KE72U2QZ78NERFSU6E1KDRNKOFFU6ZXEO5D3708Z28A3A4S7Y6Z6OIQTQ947OZ5E9CDK7ZG73FME1IDK56HWWHE57UMH48' where id=42; -update noar tt set v1='3F403KPRKN4YWEWE7WSN3MMD5TIRZXP9H7T1P9ZGIYSR8O8QAS65NJKB07TMD875F3NN7RJNDX7FCWNFFEYZ1IIL7B1IAKC21SF1K4K89YMQB0OD0FWQRSPMLGZ8PNXZ0TV2FUKOWHZ48CLP17MCPLLQU1BBOWL43DOHDGXEV7PRA3MA7N80C2MRH9SXXD5YL4WW1C0VPJ6G2UI8K6U82WV1WCZFC50JENMFSXADNVENE71JFDPDIS6VPIQ361NWQ' where id=42; -update noar ti set v1='3F403KPRKN4YWEWE7WSN3MMD5TIRZXP9H7T1P9ZGIYSR8O8QAS65NJKB07TMD875F3NN7RJNDX7FCWNFFEYZ1IIL7B1IAKC21SF1K4K89YMQB0OD0FWQRSPMLGZ8PNXZ0TV2FUKOWHZ48CLP17MCPLLQU1BBOWL43DOHDGXEV7PRA3MA7N80C2MRH9SXXD5YL4WW1C0VPJ6G2UI8K6U82WV1WCZFC50JENMFSXADNVENE71JFDPDIS6VPIQ361NWQ' where id=42; -update noar tt set v2='A689HC5A2R0QKAS16GKGAHET6NM05JUJ6AXYM71HNYC3IXDW9E476XWMCHBQCQPOM4S44JQTWSZ23D65RIMQ4CZA6TJS5AUSVB3MXQNKVML5J5P4UG2TTPPS128LJACSHZX75SG3ZT8WWJ0RSCKOAL5IOB2B5EFDBAL67PM7YGCGXDHNSMS2WQDDWZTVXENSM6EFOZ0O8756JFBW03XHK5BJ721K4YIXI780QI6C9UHPQL9WKPDM0G6CCYVZE89MK' where id=42; -update noar ti set v2='A689HC5A2R0QKAS16GKGAHET6NM05JUJ6AXYM71HNYC3IXDW9E476XWMCHBQCQPOM4S44JQTWSZ23D65RIMQ4CZA6TJS5AUSVB3MXQNKVML5J5P4UG2TTPPS128LJACSHZX75SG3ZT8WWJ0RSCKOAL5IOB2B5EFDBAL67PM7YGCGXDHNSMS2WQDDWZTVXENSM6EFOZ0O8756JFBW03XHK5BJ721K4YIXI780QI6C9UHPQL9WKPDM0G6CCYVZE89MK' where id=42; -update noar tt set v3='05RIS5NFQ3ZVDKNECQPV7E7XQ13JPG3WGB40B4WOJ9QERREJ6O8KBBO9BLGZ2GLJJIJCCZOC3QSLH8S6UCU63KZGRTAVV9163IM8XJIB3W5ZNYG299G4OT3OBZOCB7IESUT9HMMLNJYKTIYKZAC106YRV8NSJKIGZ43CEA1YCGJKJ08UHL1JY0XE4CKWQ0BCBXAL2YI8D8WFFYU1IDN2KS9TTGX6CNIBXO653PPC6PXEOF7D5SHS8HTQKLZ1R1K62' where id=42; -update noar ti set v3='05RIS5NFQ3ZVDKNECQPV7E7XQ13JPG3WGB40B4WOJ9QERREJ6O8KBBO9BLGZ2GLJJIJCCZOC3QSLH8S6UCU63KZGRTAVV9163IM8XJIB3W5ZNYG299G4OT3OBZOCB7IESUT9HMMLNJYKTIYKZAC106YRV8NSJKIGZ43CEA1YCGJKJ08UHL1JY0XE4CKWQ0BCBXAL2YI8D8WFFYU1IDN2KS9TTGX6CNIBXO653PPC6PXEOF7D5SHS8HTQKLZ1R1K62' where id=42; -update noar tt set v0='D1G815F5O4FQG47FUSLT4QB2AFWFCAOF011LO7O0AQ0OF18N8Q8RK5IPTDDNJR3ALHVG1W40ZUA84QTHV71720GRBT6SZG6UAL5A80NIS3IM168Y5GEWDJZ2JZ7CZQHNRUUULBTYKZLKE5ZZRQ6GZYJX0VTM47MKHRPJXM4WZRZXMO4CRURT8BL0J7XYFO3CYN0LE61FVKPAAB8D8I9WLNFT5R0J9R3KKH8LKYWLREW59TY9GE3HPKYBOCGLQI6Q6' where id=43; -update noar ti set v0='D1G815F5O4FQG47FUSLT4QB2AFWFCAOF011LO7O0AQ0OF18N8Q8RK5IPTDDNJR3ALHVG1W40ZUA84QTHV71720GRBT6SZG6UAL5A80NIS3IM168Y5GEWDJZ2JZ7CZQHNRUUULBTYKZLKE5ZZRQ6GZYJX0VTM47MKHRPJXM4WZRZXMO4CRURT8BL0J7XYFO3CYN0LE61FVKPAAB8D8I9WLNFT5R0J9R3KKH8LKYWLREW59TY9GE3HPKYBOCGLQI6Q6' where id=43; -update noar tt set v1='45JZXZBA53MFMOXQG7UQH6X71TNWY03M2X742VSXT7TFM40B7KYBSNZMWDU6QFHJ5LUEQTOLK3M8KJYSWMIJ8CSYY2R9V1MMJK8L6C997D9PYNWIAUQ7C33BLNKY36BFZ66LC0DJLZXCLQ44N8ANZ2XPPJQUD8N782IIW94Q5U5TIA38T31Q1HUBS6D8QNT2XWQPFD1KQZH8EDSAGECSRJI9ZSCSU4M9X62OT1ECPJGXU5V03SWXH98SF8MGTPWKM' where id=43; -update noar ti set v1='45JZXZBA53MFMOXQG7UQH6X71TNWY03M2X742VSXT7TFM40B7KYBSNZMWDU6QFHJ5LUEQTOLK3M8KJYSWMIJ8CSYY2R9V1MMJK8L6C997D9PYNWIAUQ7C33BLNKY36BFZ66LC0DJLZXCLQ44N8ANZ2XPPJQUD8N782IIW94Q5U5TIA38T31Q1HUBS6D8QNT2XWQPFD1KQZH8EDSAGECSRJI9ZSCSU4M9X62OT1ECPJGXU5V03SWXH98SF8MGTPWKM' where id=43; -update noar tt set v2='3F00ROGF7G6ZJR61D63E6SSO7DK9NR44CFLCC4CAZVX13XAEUAMMSDK8L5MBJPRG2JR7HCUWT4JATW4MWVRSH0XLDQVRCWVRBDOWVT8VSVDA3BEQU1SZEZXGZW6T5J7TLCUIQ4S4J92PJRG6HV2UULVIU40XV29L1CB9TPW7G1Y8EZEFVOAWQ13TGCVWIXL8N2WBPE32KIOUV5MX7SAFBC1Q0K43US8WK1NAUABBCT41JD525UWGC6M4QQ7JHM9SB' where id=43; -update noar ti set v2='3F00ROGF7G6ZJR61D63E6SSO7DK9NR44CFLCC4CAZVX13XAEUAMMSDK8L5MBJPRG2JR7HCUWT4JATW4MWVRSH0XLDQVRCWVRBDOWVT8VSVDA3BEQU1SZEZXGZW6T5J7TLCUIQ4S4J92PJRG6HV2UULVIU40XV29L1CB9TPW7G1Y8EZEFVOAWQ13TGCVWIXL8N2WBPE32KIOUV5MX7SAFBC1Q0K43US8WK1NAUABBCT41JD525UWGC6M4QQ7JHM9SB' where id=43; -update noar tt set v3='NBXHDWG2L8H1845MJSD52ZPK7W89T2GPYHWIT2PR9X3BC69632RG0KHE3W6FHD51KNG58Q944SI99SGSZXKM3SBHPAWRI57NTWM0V5F5RMM97B6WJ07MK0D1J67O2HY1ZBWBSQ4YEUFIEPFE0YNYKHH8GRJELYW9G1WJFEX4TAIEK7NXMHJSAP2I48ND2XXZI2EO88623WFBPV87GVNCH9CFUIWCGJ1242PPSOZXGTMNOMPQVXULNKVBFPWDUC4U6' where id=43; -update noar ti set v3='NBXHDWG2L8H1845MJSD52ZPK7W89T2GPYHWIT2PR9X3BC69632RG0KHE3W6FHD51KNG58Q944SI99SGSZXKM3SBHPAWRI57NTWM0V5F5RMM97B6WJ07MK0D1J67O2HY1ZBWBSQ4YEUFIEPFE0YNYKHH8GRJELYW9G1WJFEX4TAIEK7NXMHJSAP2I48ND2XXZI2EO88623WFBPV87GVNCH9CFUIWCGJ1242PPSOZXGTMNOMPQVXULNKVBFPWDUC4U6' where id=43; -update noar tt set v0='ZASF426FE5FMJKZ7MC4WJJL0BQU9OYY1TRLJK39WCVAVY9B0Q5N4XUVO9XSEQDN9L9HIWSZU51R1WBMHPXRJXNS98660R84NC4J6PRWFBPTQSA28A35SY4A4G8S0JGSOOTBR1781MNE0VMLI1FDGY5MRTW1MFB7ECPQJ4GU36W2WCTE9EXCQDR5WUKSPZYVGCB425GK8Y66UPNNCG32F2FTNZ57OQDIUOXOR9PS8SK5AXU83SCELLRDDRHRCMHLQS' where id=44; -update noar ti set v0='ZASF426FE5FMJKZ7MC4WJJL0BQU9OYY1TRLJK39WCVAVY9B0Q5N4XUVO9XSEQDN9L9HIWSZU51R1WBMHPXRJXNS98660R84NC4J6PRWFBPTQSA28A35SY4A4G8S0JGSOOTBR1781MNE0VMLI1FDGY5MRTW1MFB7ECPQJ4GU36W2WCTE9EXCQDR5WUKSPZYVGCB425GK8Y66UPNNCG32F2FTNZ57OQDIUOXOR9PS8SK5AXU83SCELLRDDRHRCMHLQS' where id=44; -update noar tt set v1='6FQVOHCK6SESFKS10D3XLCGCMU73G2P4LALWX9FVXORPD43B67ST9AK1KD3PSHF3D9UQCROLCCDHGT0VX2T1CK3MUNI7DI0Y9K42UBKWI8OHQERT0JHFZ3BHGHL7D7OTOQDWD3WMKR26WNG4O5R7GP38LH7GDBMETCZQ9L5Q2O00UHCBL3Y9PIKXL32Y268F8K28NHCPWS189UDLZ1S58A1GNUOM5IWZTHXEQ3HK5W6S2YYUXRC9KEVQESVK4ASDL' where id=44; -update noar ti set v1='6FQVOHCK6SESFKS10D3XLCGCMU73G2P4LALWX9FVXORPD43B67ST9AK1KD3PSHF3D9UQCROLCCDHGT0VX2T1CK3MUNI7DI0Y9K42UBKWI8OHQERT0JHFZ3BHGHL7D7OTOQDWD3WMKR26WNG4O5R7GP38LH7GDBMETCZQ9L5Q2O00UHCBL3Y9PIKXL32Y268F8K28NHCPWS189UDLZ1S58A1GNUOM5IWZTHXEQ3HK5W6S2YYUXRC9KEVQESVK4ASDL' where id=44; -update noar tt set v2='7UG64XDR4FS4DZG9QTWHWURK1GD2LPCHG8E0VBWE1SWTHVRVD934Y5IKDF5USIMNYG822IT0KMAZ223823C7JURMEZPY5JJY0P5LY7QM7I3MCPWF1OLGPW2PJT1PZYXG71EEWMTM1U8G4FFQZUH8KXHHAMVGSPXR55QLFJ94WUNDGBI0IVBXZX7VODOLERLF0L9KW4RTTQGQF2MSIVUM0JT8LF57NFELCYA1PFNR3QSP471X3OKBGNZ5YH94ZGHWC' where id=44; -update noar ti set v2='7UG64XDR4FS4DZG9QTWHWURK1GD2LPCHG8E0VBWE1SWTHVRVD934Y5IKDF5USIMNYG822IT0KMAZ223823C7JURMEZPY5JJY0P5LY7QM7I3MCPWF1OLGPW2PJT1PZYXG71EEWMTM1U8G4FFQZUH8KXHHAMVGSPXR55QLFJ94WUNDGBI0IVBXZX7VODOLERLF0L9KW4RTTQGQF2MSIVUM0JT8LF57NFELCYA1PFNR3QSP471X3OKBGNZ5YH94ZGHWC' where id=44; -update noar tt set v3='AWIJB0TG8E28Q6Z994V6W4JL467CY5IMIT0RPUU2WO84S0FL7PM1BCFLAWBXGYQOS28Y6QF2Z0AX6HY4LDZG2GCRD3EBO9SZJ701UR65EBMPGOKSAU0VLRQX6FC248O7F4WVEYQBEL1V1U689SFLNA6JTV5H0KIHT65I2U1LDMPRQEL7HLED0HV68QIXFPJ1VVDOTZGG7PHGA269MMB4MEWQPQH5ERFYZQXS4RNE8PB5LJI950ODXK8S96VS3T8YS' where id=44; -update noar ti set v3='AWIJB0TG8E28Q6Z994V6W4JL467CY5IMIT0RPUU2WO84S0FL7PM1BCFLAWBXGYQOS28Y6QF2Z0AX6HY4LDZG2GCRD3EBO9SZJ701UR65EBMPGOKSAU0VLRQX6FC248O7F4WVEYQBEL1V1U689SFLNA6JTV5H0KIHT65I2U1LDMPRQEL7HLED0HV68QIXFPJ1VVDOTZGG7PHGA269MMB4MEWQPQH5ERFYZQXS4RNE8PB5LJI950ODXK8S96VS3T8YS' where id=44; -update noar tt set v0='JG9YIO87UTZM2RAH3O5SUU7VDOYWYC2O4WTN9WIEGY9OZ16ZIK3X0QKRBS0M7AFOHZUA7F3JHFKWMUDI9UM6LB8TXCROHPUYJ7Z9GC9Y27X5XA85SJOJK1MRWM15PE6WAU68XYHPRO3VD3F6LDNN20BIFC4D2XNDKA4CMS1VOZG4GQVLWG61K3E5RXPYHL2TWQ9UKX3H5DHEESURLUHOCJLC2PWVGI1UE7LVP6U2BTS0PCCPQBPV214ILUA7MLWFD' where id=45; -update noar ti set v0='JG9YIO87UTZM2RAH3O5SUU7VDOYWYC2O4WTN9WIEGY9OZ16ZIK3X0QKRBS0M7AFOHZUA7F3JHFKWMUDI9UM6LB8TXCROHPUYJ7Z9GC9Y27X5XA85SJOJK1MRWM15PE6WAU68XYHPRO3VD3F6LDNN20BIFC4D2XNDKA4CMS1VOZG4GQVLWG61K3E5RXPYHL2TWQ9UKX3H5DHEESURLUHOCJLC2PWVGI1UE7LVP6U2BTS0PCCPQBPV214ILUA7MLWFD' where id=45; -update noar tt set v1='HERPPL6A3AUITLQHMY061HWO2IK8GF3L5NORWYH2CC8PQA4C2IPLKSDGSIKY22P3FVV27VA3O2BYZYCIRX4EOM3CVV2BKZDWWOPKREEBBI12K9IC5DR7ZJADKCRG5CC7KQZPWSBZYTW9MJNLOEQ3EFX5YDRXBV5U2WQCKH2KM580HD5LX3G61DRXHTELYTD1J412BZSZZRTL8L63E0Y2AO4P9D0H7Q2X08LQFYIJ9MO5X1SKINILUD7N2TAS3Q14C' where id=45; -update noar ti set v1='HERPPL6A3AUITLQHMY061HWO2IK8GF3L5NORWYH2CC8PQA4C2IPLKSDGSIKY22P3FVV27VA3O2BYZYCIRX4EOM3CVV2BKZDWWOPKREEBBI12K9IC5DR7ZJADKCRG5CC7KQZPWSBZYTW9MJNLOEQ3EFX5YDRXBV5U2WQCKH2KM580HD5LX3G61DRXHTELYTD1J412BZSZZRTL8L63E0Y2AO4P9D0H7Q2X08LQFYIJ9MO5X1SKINILUD7N2TAS3Q14C' where id=45; -update noar tt set v2='YR5ZMT5CCHI8OIPLX8T01WGBIXXYBVJ8M92NYYQ2NNLM9GW27Z22FRN8Y3DDHE53QSSUGIH6NPSZXCAXVSLHA99VIA61Z15AEXE5CD0RJBJZ64WQE9BTZW8XIG89WYT5U7MONIE46KFH1WV8KZP4HQXYRTSOM39ZI25FMIC409J698GSHVYA22U663VZC77V4KJFB95K7GITFKF82RL5QHZNC2OO5ELLF6OUO3EZNHECA8IV3X71IZBRMUICPQWI9' where id=45; -update noar ti set v2='YR5ZMT5CCHI8OIPLX8T01WGBIXXYBVJ8M92NYYQ2NNLM9GW27Z22FRN8Y3DDHE53QSSUGIH6NPSZXCAXVSLHA99VIA61Z15AEXE5CD0RJBJZ64WQE9BTZW8XIG89WYT5U7MONIE46KFH1WV8KZP4HQXYRTSOM39ZI25FMIC409J698GSHVYA22U663VZC77V4KJFB95K7GITFKF82RL5QHZNC2OO5ELLF6OUO3EZNHECA8IV3X71IZBRMUICPQWI9' where id=45; -update noar tt set v3='3LXRDHCHL5PEQYT7TDNK1HX2OBGN4N23MQI20QQ4RDDGS4Z6QZVGKJYU7YOD1Z5A0WOMHFMTO1WI6XETQCC4BMSGAJEYNC257PWL7285KOSTX4FQWDTGP9OUI7EEFSTTC9SJAC46FUNOCG3T7QVVDXLEZYGVYPUBSVQSB26DR5TC19TM36XBZ74GVUDX65HWDKMHO1JP7EIGE1FE3TU941FKRACIG66D4BH77A4DPJN5VBEW80K5623WNVZVJD5KJ' where id=45; -update noar ti set v3='3LXRDHCHL5PEQYT7TDNK1HX2OBGN4N23MQI20QQ4RDDGS4Z6QZVGKJYU7YOD1Z5A0WOMHFMTO1WI6XETQCC4BMSGAJEYNC257PWL7285KOSTX4FQWDTGP9OUI7EEFSTTC9SJAC46FUNOCG3T7QVVDXLEZYGVYPUBSVQSB26DR5TC19TM36XBZ74GVUDX65HWDKMHO1JP7EIGE1FE3TU941FKRACIG66D4BH77A4DPJN5VBEW80K5623WNVZVJD5KJ' where id=45; -update noar tt set v0='9ENTSCYFZO62M5ULORB17RJQLU5V81JGLS82QTRPSZ7H0K1MV0LYI1W96DQ8P3CA2PAIXOVZLZWBH6GDNBOTT82UC4W5SQR0V76LN0H0H84TIRSPN49V1JESHVFCAQPVIAWN1UQ70JZJ8W645XXHF6QQA57VKOIJSVWSKJHRASHE3CIOXD8FW15SKMQ5JU925WT1ID84BTJGU0FIK46G0XFJD6YQIQFYMT5P1EWMUNY6ABY3EHLQEMUW23VB5BUHV' where id=46; -update noar ti set v0='9ENTSCYFZO62M5ULORB17RJQLU5V81JGLS82QTRPSZ7H0K1MV0LYI1W96DQ8P3CA2PAIXOVZLZWBH6GDNBOTT82UC4W5SQR0V76LN0H0H84TIRSPN49V1JESHVFCAQPVIAWN1UQ70JZJ8W645XXHF6QQA57VKOIJSVWSKJHRASHE3CIOXD8FW15SKMQ5JU925WT1ID84BTJGU0FIK46G0XFJD6YQIQFYMT5P1EWMUNY6ABY3EHLQEMUW23VB5BUHV' where id=46; -update noar tt set v1='DPPW2OFFL7947HVD0B21ZDIFTK7OMK5TJRZWAOXYLNFLT7E99Z5AEYH66MMJEEPVN71EOW7QFPRR0U8L6GQVELC80LY78EJRIL2LCHSX6JDKN3IWJXNPSV88JWBZNNAHHSK75KFL1BZ0DTO26C0IB2ME3K656QJYIBXNEUDPLFEM1N36K310CIQXEJJS15ACJCQJ7S9FR1A8U5VH5IPMUTJENU2CGXEQ7HTY1AD6VPTY4DH4UA1OM93TLZS2R5Y9R' where id=46; -update noar ti set v1='DPPW2OFFL7947HVD0B21ZDIFTK7OMK5TJRZWAOXYLNFLT7E99Z5AEYH66MMJEEPVN71EOW7QFPRR0U8L6GQVELC80LY78EJRIL2LCHSX6JDKN3IWJXNPSV88JWBZNNAHHSK75KFL1BZ0DTO26C0IB2ME3K656QJYIBXNEUDPLFEM1N36K310CIQXEJJS15ACJCQJ7S9FR1A8U5VH5IPMUTJENU2CGXEQ7HTY1AD6VPTY4DH4UA1OM93TLZS2R5Y9R' where id=46; -update noar tt set v2='UJZNBG6GAPE11AUNX0HMYZC5XYDQ2F8QIPNYUSK1K0BPMT9PT3KXJN71M588CZD6N9829W5OY6ZUBO2NNHN548NE9A99M6TUUO0B157DYAP67XK600355KKALHMKBQLZ3XI39T7YC8JW2OMMBMC3SLH49VLJGDAOOVDCBTY3KKV0OW8EUF1JK27Z19EA8P97P15TEV4KRP1J974FJD4M2QWGUTKL52UT6XX7WRAG1NNSSAFUQNP7JPVUWENDHTN57' where id=46; -update noar ti set v2='UJZNBG6GAPE11AUNX0HMYZC5XYDQ2F8QIPNYUSK1K0BPMT9PT3KXJN71M588CZD6N9829W5OY6ZUBO2NNHN548NE9A99M6TUUO0B157DYAP67XK600355KKALHMKBQLZ3XI39T7YC8JW2OMMBMC3SLH49VLJGDAOOVDCBTY3KKV0OW8EUF1JK27Z19EA8P97P15TEV4KRP1J974FJD4M2QWGUTKL52UT6XX7WRAG1NNSSAFUQNP7JPVUWENDHTN57' where id=46; -update noar tt set v3='UZQLK670RHRNSORMDVM9Y3CBR0YHPEVIZY84XL9OWXBWL2XSPWR163ICFEU0T9F56O873P2ZS8NACN28CU00T93I3F9SIAYZ66IPWIAUB0R8DG1L0PTQCMW3CZP7P7LE3VKQPWWTWETSMM3HCG21466YF76TKL8DZS5HKRXLWSNU7M8QGX2PHLXDSFY938WK8LSE141P2RAVNWIYY75VVBMIVSELXZMVO8JSVKOKO5O8TEMMS6OY4ZQ7742RXU9MG' where id=46; -update noar ti set v3='UZQLK670RHRNSORMDVM9Y3CBR0YHPEVIZY84XL9OWXBWL2XSPWR163ICFEU0T9F56O873P2ZS8NACN28CU00T93I3F9SIAYZ66IPWIAUB0R8DG1L0PTQCMW3CZP7P7LE3VKQPWWTWETSMM3HCG21466YF76TKL8DZS5HKRXLWSNU7M8QGX2PHLXDSFY938WK8LSE141P2RAVNWIYY75VVBMIVSELXZMVO8JSVKOKO5O8TEMMS6OY4ZQ7742RXU9MG' where id=46; -update noar tt set v0='QYCOIHOOB8T4ZSR7SSU8GV1M4WJPO16XHINOJ31CQJTOJFTHO3QWZZK1UXZJMECUPOJOM151CQB9EZSA054E7WT5M48EJH9LQ7CV5G6VU9ZOUHQ9Q97HOIR0WMG8CHMMQYHZY3Z3ENKB3VJPB6O54A8RYY8UHLD439HK2FFUJ11QIXXATAKLQ3VZ692PVK5BM39VTBYQ9T6WLG8VNC4WPUBCMZZ2HUWLMEABGDRO74MWM7B1IZQZUTKI2H2R3SG2V' where id=47; -update noar ti set v0='QYCOIHOOB8T4ZSR7SSU8GV1M4WJPO16XHINOJ31CQJTOJFTHO3QWZZK1UXZJMECUPOJOM151CQB9EZSA054E7WT5M48EJH9LQ7CV5G6VU9ZOUHQ9Q97HOIR0WMG8CHMMQYHZY3Z3ENKB3VJPB6O54A8RYY8UHLD439HK2FFUJ11QIXXATAKLQ3VZ692PVK5BM39VTBYQ9T6WLG8VNC4WPUBCMZZ2HUWLMEABGDRO74MWM7B1IZQZUTKI2H2R3SG2V' where id=47; -update noar tt set v1='M9Z0XNVK6R9G0N4AS7IDBVII5JFYPM48ZGBQCMB7V4T2JVZBVE67HJNI04GK9L426B0VO8DKI33DH2DV80HY7BW5RZS06JI3CNA5RRCVKFVKO85JOMQ43L3F2T3ZPC81HXWZBYNNJAZXTBKDI7U3LIKPVMR8F0DJN5XLGW0B37AU79KROR1THW1MRFIMX1Q51N6N05WJMHRYO2P5UW48511HOIKBNO1W25OT02CWYTR32T82ETHEZL2BNE8L3JISO' where id=47; -update noar ti set v1='M9Z0XNVK6R9G0N4AS7IDBVII5JFYPM48ZGBQCMB7V4T2JVZBVE67HJNI04GK9L426B0VO8DKI33DH2DV80HY7BW5RZS06JI3CNA5RRCVKFVKO85JOMQ43L3F2T3ZPC81HXWZBYNNJAZXTBKDI7U3LIKPVMR8F0DJN5XLGW0B37AU79KROR1THW1MRFIMX1Q51N6N05WJMHRYO2P5UW48511HOIKBNO1W25OT02CWYTR32T82ETHEZL2BNE8L3JISO' where id=47; -update noar tt set v2='G9EILFGX9P8FSREERZ6D61KGH4GWIZL8LNN9PTXITNY9R800SYWBJ01KZMUXRSZVJ71XNLLTP8FSK78X4VE9S7L5OM1YAQVMBNYHRLZVLF9R8OK1PV946K7E1SG6G47IZL9A3Q59DHEQFFNJ5LKLXE0Y0L4FO4CH5Y2MWPJGVMS51X6AL21S3SBMDPI9PTE4QCNY7NSKT3RJE91NULTRAED38I9J372RQ0WBN2UPCC7P0ILLBX5A33VJUS21YW8DS' where id=47; -update noar ti set v2='G9EILFGX9P8FSREERZ6D61KGH4GWIZL8LNN9PTXITNY9R800SYWBJ01KZMUXRSZVJ71XNLLTP8FSK78X4VE9S7L5OM1YAQVMBNYHRLZVLF9R8OK1PV946K7E1SG6G47IZL9A3Q59DHEQFFNJ5LKLXE0Y0L4FO4CH5Y2MWPJGVMS51X6AL21S3SBMDPI9PTE4QCNY7NSKT3RJE91NULTRAED38I9J372RQ0WBN2UPCC7P0ILLBX5A33VJUS21YW8DS' where id=47; -update noar tt set v3='9QLF7LOZG6PXILNQ8MNQJBLX1Z6KC0M7OO8QFLSWW4J7TPNKS5QPHU2S54ASGC1XOQGA8L1V9043ASI75YY4N92QG4OTG29OVOQ17T0GGT7ZE2ELR913TSC0P9B9AUE200UY979ZURXF5908BCYB9TSTEKCVNZEOHA590K6ZPRQZS7XHC2ANGHDA65NWVZ4A6EU6B2CD71EKNPLC9OL6CC4XNWUPXNNNAFRN9LDFBGK7R7Q7RQCH9RYKJPF424RDQ' where id=47; -update noar ti set v3='9QLF7LOZG6PXILNQ8MNQJBLX1Z6KC0M7OO8QFLSWW4J7TPNKS5QPHU2S54ASGC1XOQGA8L1V9043ASI75YY4N92QG4OTG29OVOQ17T0GGT7ZE2ELR913TSC0P9B9AUE200UY979ZURXF5908BCYB9TSTEKCVNZEOHA590K6ZPRQZS7XHC2ANGHDA65NWVZ4A6EU6B2CD71EKNPLC9OL6CC4XNWUPXNNNAFRN9LDFBGK7R7Q7RQCH9RYKJPF424RDQ' where id=47; -update noar tt set v0='84RTZR1O70NRAEV1G7078FW2C01W0N7M7DLJVQS2AN3IN45CBOQHXTE15LVS1O23R2HUBXAF73KW2FCQWAOJ18D33097V2VUI45FE3UM5DNKUPSGAB8X45DXZNKTL00TXM7R9IWEE5ID3DTVYTD6PX3IO7YEMUF5CKXUJS3KZ9FAH9ZPYTZV816ZTQHZKITOKK6SCWP62YOE10ZAAY78KVBE8Y9MVW0I3HU94KII7FPCBDM8K6Y1S4SASYW9SK9N0' where id=48; -update noar ti set v0='84RTZR1O70NRAEV1G7078FW2C01W0N7M7DLJVQS2AN3IN45CBOQHXTE15LVS1O23R2HUBXAF73KW2FCQWAOJ18D33097V2VUI45FE3UM5DNKUPSGAB8X45DXZNKTL00TXM7R9IWEE5ID3DTVYTD6PX3IO7YEMUF5CKXUJS3KZ9FAH9ZPYTZV816ZTQHZKITOKK6SCWP62YOE10ZAAY78KVBE8Y9MVW0I3HU94KII7FPCBDM8K6Y1S4SASYW9SK9N0' where id=48; -update noar tt set v1='93PI3V8FY5GI1RUR6FVC8LPAR3QVI2GG3QVZECL2ES7TXUVFBMV4PGJC4CX6JTZ8L4TBAW7DCNKE6UZR2JFD4KKNMIOEARK33YQ4FEFN3A21I38VEUUBLN3921NA1K0SFR9MZ7EUPFJNL3AGW4YS8LOCVNQ6ZTK2JZF2EZJLH5F2IP3HUBUT1KSI92E4AXG264F2B92HWNTXZRXOXKIFNMP8W4OL1UM90RE2NZJIHBV5FFKNPW2XTBAPLQN0WWWER' where id=48; -update noar ti set v1='93PI3V8FY5GI1RUR6FVC8LPAR3QVI2GG3QVZECL2ES7TXUVFBMV4PGJC4CX6JTZ8L4TBAW7DCNKE6UZR2JFD4KKNMIOEARK33YQ4FEFN3A21I38VEUUBLN3921NA1K0SFR9MZ7EUPFJNL3AGW4YS8LOCVNQ6ZTK2JZF2EZJLH5F2IP3HUBUT1KSI92E4AXG264F2B92HWNTXZRXOXKIFNMP8W4OL1UM90RE2NZJIHBV5FFKNPW2XTBAPLQN0WWWER' where id=48; -update noar tt set v2='5E48DYWE6BYJ26ZL0Z8MK84LKOGEY4PEM09FE5PCZ42969EO8D0HR2QP09OM23K4L1VGM8HIISRTDMALQNJDOMHYT9XN8KVVS327TSRTVS1AR708UJ7ICBWNCJURVP37SGZ0HX3WB1MDHL4EYQC8VWL53DF41LZ8XWJ0WIY8GCH12IEFAT4ZCQZPC8SSVLZXXCXDCPQAGRRSJ63PIPY6304W0EL00TXK2YQL8RE4CSP311D9D49H4HLTUUHZ1QK6J' where id=48; -update noar ti set v2='5E48DYWE6BYJ26ZL0Z8MK84LKOGEY4PEM09FE5PCZ42969EO8D0HR2QP09OM23K4L1VGM8HIISRTDMALQNJDOMHYT9XN8KVVS327TSRTVS1AR708UJ7ICBWNCJURVP37SGZ0HX3WB1MDHL4EYQC8VWL53DF41LZ8XWJ0WIY8GCH12IEFAT4ZCQZPC8SSVLZXXCXDCPQAGRRSJ63PIPY6304W0EL00TXK2YQL8RE4CSP311D9D49H4HLTUUHZ1QK6J' where id=48; -update noar tt set v3='6NVOZATTNOLBLORLPL1YGYFZLS8JGKT8A1WWGBH1GQR75ZNC3W4NPWI6QUIKAZMZCTNITRYH6WTUWCUWBENLUZSH0VXKBXTWALS2Q3YHBTZ1S339UH1C037O88RTY8KQ2F9WZG81EYVPFVWNUQO9W94N1RQ6XUATU21WDW7KGYOVRG8AFGXBPOO08VEUX0AM6SCMRJR6VQRXYV45X9WID0DH2ML48YGUQL948ZLJHTK03CKDDD6NR8UCQTTL04BYD' where id=48; -update noar ti set v3='6NVOZATTNOLBLORLPL1YGYFZLS8JGKT8A1WWGBH1GQR75ZNC3W4NPWI6QUIKAZMZCTNITRYH6WTUWCUWBENLUZSH0VXKBXTWALS2Q3YHBTZ1S339UH1C037O88RTY8KQ2F9WZG81EYVPFVWNUQO9W94N1RQ6XUATU21WDW7KGYOVRG8AFGXBPOO08VEUX0AM6SCMRJR6VQRXYV45X9WID0DH2ML48YGUQL948ZLJHTK03CKDDD6NR8UCQTTL04BYD' where id=48; -update noar tt set v0='JB20IGZK9ISIU6AY2JYJSMICCOW1IUA0AMW01YJWOV0RXURO5FUKF3C9O9TFYGBQAFUG15LS9ZZ9S505XFFJ2QTA015YJGLVSC4Q1266TD5TZGX3LE1TED8PNMT95HJ4A6R2AFBHH0Y9TG9W7H94YY10JWR2EF2H32BLQC5KO0K97HW3GUTYCK25U8G1KHYNJ74Q27GYA8YX3FCUVHYTZOPG4A2GVS9FFKPSSN59LXLV5ATS3MDORDUY8WMH9RTRX' where id=49; -update noar ti set v0='JB20IGZK9ISIU6AY2JYJSMICCOW1IUA0AMW01YJWOV0RXURO5FUKF3C9O9TFYGBQAFUG15LS9ZZ9S505XFFJ2QTA015YJGLVSC4Q1266TD5TZGX3LE1TED8PNMT95HJ4A6R2AFBHH0Y9TG9W7H94YY10JWR2EF2H32BLQC5KO0K97HW3GUTYCK25U8G1KHYNJ74Q27GYA8YX3FCUVHYTZOPG4A2GVS9FFKPSSN59LXLV5ATS3MDORDUY8WMH9RTRX' where id=49; -update noar tt set v1='0KC5CQPTHMTR70TV3473ZRLRJ7ND7LZV8CCGXTFVXLTELX6EESZ2042R8PHA3X5W38SYVU5AMCXSTKU51JO5IXHIGPBJURYM7H7VCMH6IR0HKTSR8QGHSRT3FMDEGYXJY6GEM4O8CFFA8G9879O14FJMAOKKIMUYDZQBFEVGHY42YZ06NN77QU5UVMQY3DZJ75NIFKNE7Y26KCCR3RG78DL55YE1Y25UZT7YMO167E4K163OJE8TW3APHI5USXRAO' where id=49; -update noar ti set v1='0KC5CQPTHMTR70TV3473ZRLRJ7ND7LZV8CCGXTFVXLTELX6EESZ2042R8PHA3X5W38SYVU5AMCXSTKU51JO5IXHIGPBJURYM7H7VCMH6IR0HKTSR8QGHSRT3FMDEGYXJY6GEM4O8CFFA8G9879O14FJMAOKKIMUYDZQBFEVGHY42YZ06NN77QU5UVMQY3DZJ75NIFKNE7Y26KCCR3RG78DL55YE1Y25UZT7YMO167E4K163OJE8TW3APHI5USXRAO' where id=49; -update noar tt set v2='VCXDXU3HTBDOM7OW62IXT71OP82FS4V9P51VB2OJMWBDXSWNEU1PPSJREM2L1YB8Y61E7N2QNOHZP6N5D09RC1XCFX3OBM76J9263TTF2664EYC5BXO5UTXRG4VUTE5NJOLBYSOYC0R244SOJFI6NW6ZO1VU063QZGHMGS5ZUYL83UXUSO6MVL9P5ZI9PSTIBUACWJPYI2I813A1I3XSXCN7RFN3EMM19R6JN024DTZBOQ9AHEDF1BVAR5FVF7815' where id=49; -update noar ti set v2='VCXDXU3HTBDOM7OW62IXT71OP82FS4V9P51VB2OJMWBDXSWNEU1PPSJREM2L1YB8Y61E7N2QNOHZP6N5D09RC1XCFX3OBM76J9263TTF2664EYC5BXO5UTXRG4VUTE5NJOLBYSOYC0R244SOJFI6NW6ZO1VU063QZGHMGS5ZUYL83UXUSO6MVL9P5ZI9PSTIBUACWJPYI2I813A1I3XSXCN7RFN3EMM19R6JN024DTZBOQ9AHEDF1BVAR5FVF7815' where id=49; -update noar tt set v3='QGK2AXBO1Y27KQ7QXXEHM4O15OKAD3SM6MSSSNYK6ALEBGL9ZGHNCIQIH27A9MN4ENKLUSX7B7WF1WPNB2B3XG0C79UQC6KVKX6Y3GR676NWC86RCFNKZJ3JXO8353DWEN10AGBEVPKZWHGZSL6CITM6C9QMW5J97MLM3DVCVO9YJL6Q1D4XKK5UE0TDX6AQP4MRDH1SB6A9NQH7K1TC8N2X6J8YYDS09W1HJDSAO88QF96YRXKCNVLLCIRYYDSZI' where id=49; -update noar ti set v3='QGK2AXBO1Y27KQ7QXXEHM4O15OKAD3SM6MSSSNYK6ALEBGL9ZGHNCIQIH27A9MN4ENKLUSX7B7WF1WPNB2B3XG0C79UQC6KVKX6Y3GR676NWC86RCFNKZJ3JXO8353DWEN10AGBEVPKZWHGZSL6CITM6C9QMW5J97MLM3DVCVO9YJL6Q1D4XKK5UE0TDX6AQP4MRDH1SB6A9NQH7K1TC8N2X6J8YYDS09W1HJDSAO88QF96YRXKCNVLLCIRYYDSZI' where id=49; -update noar tt set v0='JMPHE29OP53BE06JT195SZIHHQXQADDF3W06AJ9IFXLLBKPO3T61KL97WC1QOKAZE4QED165Z8BNZNBJBQ4SOEBLDKKCLTH95822CCNTZTKPRAKK980GQ1YFDQKTULQENRPCBYQXI2XODOQ355RWIISOHPQNE10R2SR48E76PWXK3MNVOMIP8H939CI2A0X5KK702YVAPU4793DN9WNQCHKY4RD0Q3P8IO6NIKNE09R3WRUU6HG6PW6YGPHGEM9UP' where id=50; -update noar ti set v0='JMPHE29OP53BE06JT195SZIHHQXQADDF3W06AJ9IFXLLBKPO3T61KL97WC1QOKAZE4QED165Z8BNZNBJBQ4SOEBLDKKCLTH95822CCNTZTKPRAKK980GQ1YFDQKTULQENRPCBYQXI2XODOQ355RWIISOHPQNE10R2SR48E76PWXK3MNVOMIP8H939CI2A0X5KK702YVAPU4793DN9WNQCHKY4RD0Q3P8IO6NIKNE09R3WRUU6HG6PW6YGPHGEM9UP' where id=50; -update noar tt set v1='HBF5RQQ74SCEF9U9LEYK1T601NEBP4BP82UJGBPU38658Z1LRC14NXQFHH6AQPMMEZFTLXFUVTXT1F661JT0PWDRFQI4NFEAV3ADYTI63HPJT0BWEAZHYF3NG82XWTC6L5YRC513BSDMQ1BFOIA098HW4S0FV19YSADBIEF6Y0U8IW9SYSRMIBVLWWH229RH58MC0SBQRNWVHC66I12O1F9Q9EX8F54AJGA6CI33WEIGHCRDTYYNQ0P3POWQG718S' where id=50; -update noar ti set v1='HBF5RQQ74SCEF9U9LEYK1T601NEBP4BP82UJGBPU38658Z1LRC14NXQFHH6AQPMMEZFTLXFUVTXT1F661JT0PWDRFQI4NFEAV3ADYTI63HPJT0BWEAZHYF3NG82XWTC6L5YRC513BSDMQ1BFOIA098HW4S0FV19YSADBIEF6Y0U8IW9SYSRMIBVLWWH229RH58MC0SBQRNWVHC66I12O1F9Q9EX8F54AJGA6CI33WEIGHCRDTYYNQ0P3POWQG718S' where id=50; -update noar tt set v2='C3XRV3VY0FFM9V8VAD0MCB68L7TBMYWLJAFNFOQLVWM6AG9FQ3551MWWARWYXTURKXDRX04YO1XO4345ZP0KMX300K4BYMO8WF4HS734SRG8P5A436C09CO4TWVE6414L9JSC463XXO2X0OY9UA2QT8P4SG1024PZAK8B2V6F23EXRVFRG4KGV091KC5P7SXRWR7BV35BXJ86KAS0JIH8GJQXDLPKEMGBJTMV6N4YOHH5X1RM36IZ1NDC2EEDEKR4' where id=50; -update noar ti set v2='C3XRV3VY0FFM9V8VAD0MCB68L7TBMYWLJAFNFOQLVWM6AG9FQ3551MWWARWYXTURKXDRX04YO1XO4345ZP0KMX300K4BYMO8WF4HS734SRG8P5A436C09CO4TWVE6414L9JSC463XXO2X0OY9UA2QT8P4SG1024PZAK8B2V6F23EXRVFRG4KGV091KC5P7SXRWR7BV35BXJ86KAS0JIH8GJQXDLPKEMGBJTMV6N4YOHH5X1RM36IZ1NDC2EEDEKR4' where id=50; -update noar tt set v3='IURGHSM1X5GYTBU0BZ3QCRC2ZADQB19O4AIR1S9RHP8QEIJQHDQ62D2SSPFOPNKAEIA8E3A35F5AFY1LODRK1XGLIHHS4SV1RZKAKIBQ7G2WWR1N7WKF8H3PMZFW20OCAE4K7UXUSAKN8W2UF3WI5PYG5X3OUH1BUB1KGLP23NMKSAVZPDH7FLW9CCLT14QMY7Y57V1NZFMUHJ60K8IVIFKXWG3HG1T54BDZ9JTX5DCULPIWCARNXPZEKD856NHQH' where id=50; -update noar ti set v3='IURGHSM1X5GYTBU0BZ3QCRC2ZADQB19O4AIR1S9RHP8QEIJQHDQ62D2SSPFOPNKAEIA8E3A35F5AFY1LODRK1XGLIHHS4SV1RZKAKIBQ7G2WWR1N7WKF8H3PMZFW20OCAE4K7UXUSAKN8W2UF3WI5PYG5X3OUH1BUB1KGLP23NMKSAVZPDH7FLW9CCLT14QMY7Y57V1NZFMUHJ60K8IVIFKXWG3HG1T54BDZ9JTX5DCULPIWCARNXPZEKD856NHQH' where id=50; -update noar tt set v0='W3ZUVR38BY1IPTB60N0OHV4ECOAK6EH4IINTE7OO93ELLLIKP4RPMFHNPPYQYQ0DEAEXV5XUCBDXER6JT6OM0CM29PYQ1X4VKRPDD7JCFEAS9YCB32FX61XRNVYX5RNRS5M0IF2U1KI7OOFU2J9IMM14X1I7N8WDXL7O9PDJTY67OKUON78GLL6K0YB1MCZ6ES73XPCNS0NV2RM9VT1KT8R9KVI0LPNM231NCFNMBV3Y8DL2Q7HNO3JTLS4HZMI2S' where id=51; -update noar ti set v0='W3ZUVR38BY1IPTB60N0OHV4ECOAK6EH4IINTE7OO93ELLLIKP4RPMFHNPPYQYQ0DEAEXV5XUCBDXER6JT6OM0CM29PYQ1X4VKRPDD7JCFEAS9YCB32FX61XRNVYX5RNRS5M0IF2U1KI7OOFU2J9IMM14X1I7N8WDXL7O9PDJTY67OKUON78GLL6K0YB1MCZ6ES73XPCNS0NV2RM9VT1KT8R9KVI0LPNM231NCFNMBV3Y8DL2Q7HNO3JTLS4HZMI2S' where id=51; -update noar tt set v1='7Y6ERWR5ADIBXXICMYSPIIKYIE8F6Z7JJX2PN3XWBIE2A8HCCOMTAD154YO9H6GITWA316OVQFJAI7G5TDY45DORVGTOBXU781HL9U0SYJRUX2CXI64P57Q3783KJLQIGXZ0I0QJ11PYNMDBBYAPDT0LJO3FL63883S5OAB2022UDQKTFCHIPRH3T6FKNUCRTU7YUZZ47CO21GIH4RV2ADW303ZN65BZQXW4KBMRAX70OZWDVP6QIFKLKGNZ4U1DV' where id=51; -update noar ti set v1='7Y6ERWR5ADIBXXICMYSPIIKYIE8F6Z7JJX2PN3XWBIE2A8HCCOMTAD154YO9H6GITWA316OVQFJAI7G5TDY45DORVGTOBXU781HL9U0SYJRUX2CXI64P57Q3783KJLQIGXZ0I0QJ11PYNMDBBYAPDT0LJO3FL63883S5OAB2022UDQKTFCHIPRH3T6FKNUCRTU7YUZZ47CO21GIH4RV2ADW303ZN65BZQXW4KBMRAX70OZWDVP6QIFKLKGNZ4U1DV' where id=51; -update noar tt set v2='GM8A7CBKD49TBH5B4YE5BLDZPGRS1XYCKHKQ6P4MGQTQBA8TI3P1O9O42C7VKFWR5LXLPRW76AYKI1JOW3T7MJKN0D8KY3MUF1F77MTALR8JO28FBXNB83LILDIBGRJ2H4BCIT1KL25SSI52YPFA89VBO3R4QX6GQVHJIHB9VO9VK213FH9WU1KI2N99E17PTHWOHZCUXJUP6B7JG1ZK2EOHN0IORWCKB0GTVQF216U7U9QOG7P3RQX31QMUT0N9A' where id=51; -update noar ti set v2='GM8A7CBKD49TBH5B4YE5BLDZPGRS1XYCKHKQ6P4MGQTQBA8TI3P1O9O42C7VKFWR5LXLPRW76AYKI1JOW3T7MJKN0D8KY3MUF1F77MTALR8JO28FBXNB83LILDIBGRJ2H4BCIT1KL25SSI52YPFA89VBO3R4QX6GQVHJIHB9VO9VK213FH9WU1KI2N99E17PTHWOHZCUXJUP6B7JG1ZK2EOHN0IORWCKB0GTVQF216U7U9QOG7P3RQX31QMUT0N9A' where id=51; -update noar tt set v3='KW6J55I7VBK4F7W9ZKGIU0N8LRC3WIKDA5IN67DV6HK1GTP015C9L1Q07IPJURB68D9WZ81O2VPXYRQPZUMI61LIQYHMHEL9XXDJ0D1K5QQTMDRUXY29AAX7W3NOR3K8J7YPXC9B25EXDAD7O0VCJOIIAIU3KL05NLJPAULZGY31LZ2DRGEC9IPRNUOE7WCNSZO3C5Z97CXLI48ZO2XZGF49TNPK9UQTRDREZVNGKS4UDWQT4FDEI9YP1Y8JRKLQS' where id=51; -update noar ti set v3='KW6J55I7VBK4F7W9ZKGIU0N8LRC3WIKDA5IN67DV6HK1GTP015C9L1Q07IPJURB68D9WZ81O2VPXYRQPZUMI61LIQYHMHEL9XXDJ0D1K5QQTMDRUXY29AAX7W3NOR3K8J7YPXC9B25EXDAD7O0VCJOIIAIU3KL05NLJPAULZGY31LZ2DRGEC9IPRNUOE7WCNSZO3C5Z97CXLI48ZO2XZGF49TNPK9UQTRDREZVNGKS4UDWQT4FDEI9YP1Y8JRKLQS' where id=51; -update noar tt set v0='23UQE0FZ6UB8TNMLSX1P0BW4SENCQSYZT2J5GDFE2W8A2U3V8WDTO9ANN2UE9TVPY2A3YGSUT7X8VQNXL1LQ22DOYVAQHVKB9PBY2HM1SDEDTBEW9DKF14J1N7XXNU5MD665S55B7CJ1YGF7IUWSZV1G35U1GHJP13PMI1LELWQAJZ2DFTWAE2AOGZVBXW9M3STNRNNA9Y8THMRZGTKMVIVNWYOCHXQG8FDKX3O09ZNBMKL298TEFJ1EFUSOTV6S3' where id=52; -update noar ti set v0='23UQE0FZ6UB8TNMLSX1P0BW4SENCQSYZT2J5GDFE2W8A2U3V8WDTO9ANN2UE9TVPY2A3YGSUT7X8VQNXL1LQ22DOYVAQHVKB9PBY2HM1SDEDTBEW9DKF14J1N7XXNU5MD665S55B7CJ1YGF7IUWSZV1G35U1GHJP13PMI1LELWQAJZ2DFTWAE2AOGZVBXW9M3STNRNNA9Y8THMRZGTKMVIVNWYOCHXQG8FDKX3O09ZNBMKL298TEFJ1EFUSOTV6S3' where id=52; -update noar tt set v1='PCVR85NU5EPCBR51AD4BE8DW007VMOXH0OISYAODXTY5IO4HD9MY3MOOYCT1F4QF4D22OJDE5V69C40Q6ZRJ029DWRXR1YCQMWG1W43S3IMO0A7L4CAJJ1QSXLRXLVGYW4OE5SDYAVJNA2MWDRQWT6JWTX9C5ELX2L6ZSZOAPZKWW8V9XM0OCZ1PAIVVGRMUR7ZM3BII98U1M426495A6TOOOHVF6VXEYCS3TLDLQVJ7MIXLEBINUFY9IJRHBTW1F' where id=52; -update noar ti set v1='PCVR85NU5EPCBR51AD4BE8DW007VMOXH0OISYAODXTY5IO4HD9MY3MOOYCT1F4QF4D22OJDE5V69C40Q6ZRJ029DWRXR1YCQMWG1W43S3IMO0A7L4CAJJ1QSXLRXLVGYW4OE5SDYAVJNA2MWDRQWT6JWTX9C5ELX2L6ZSZOAPZKWW8V9XM0OCZ1PAIVVGRMUR7ZM3BII98U1M426495A6TOOOHVF6VXEYCS3TLDLQVJ7MIXLEBINUFY9IJRHBTW1F' where id=52; -update noar tt set v2='1FNSSB0HKGY5CMGPP07EOI2D4DW6499BVKO643QW9G0UVF9QNIAFBS1PT5TI6OQO28QU58XAH8G25UH73NASVJY3ZMFT8RE0VFA3BZ8TLWG9ALCEI53UBDN5W06RZU83K2NZNFR48YMZODGQX81M2A712GP8HV4ICO2JCYF1JX231685YC1J6492KTHXGQPX3W3FEGZUQN3V4FTMZAQDT8YV0O42N82OO866PGPE0ZM7YD4BXU32XINLCMG1RO222' where id=52; -update noar ti set v2='1FNSSB0HKGY5CMGPP07EOI2D4DW6499BVKO643QW9G0UVF9QNIAFBS1PT5TI6OQO28QU58XAH8G25UH73NASVJY3ZMFT8RE0VFA3BZ8TLWG9ALCEI53UBDN5W06RZU83K2NZNFR48YMZODGQX81M2A712GP8HV4ICO2JCYF1JX231685YC1J6492KTHXGQPX3W3FEGZUQN3V4FTMZAQDT8YV0O42N82OO866PGPE0ZM7YD4BXU32XINLCMG1RO222' where id=52; -update noar tt set v3='AD7R73CGA41XVO20T5YR1FPZ26E4I6WM8Y213HVRIZDQGHUVOI71IPICR9KFLR2FNH7YDFDNRDJOKOD81P6DV6SUXQM8TVNM7HG9ZXIHXQ1Z0F5AVFF5X81AXMKKAI5MN1SCWCXI0D54SCYUKYZI27SHW17OBPAXTUUG1LF520RJKE2GZGH2172Y0B198NI5466UV7IT1EEU5RIG5EFD3DNHBIAMRHP6KZZCJU31ZRNPS1JZKPBYF1U7OOK9UFETO' where id=52; -update noar ti set v3='AD7R73CGA41XVO20T5YR1FPZ26E4I6WM8Y213HVRIZDQGHUVOI71IPICR9KFLR2FNH7YDFDNRDJOKOD81P6DV6SUXQM8TVNM7HG9ZXIHXQ1Z0F5AVFF5X81AXMKKAI5MN1SCWCXI0D54SCYUKYZI27SHW17OBPAXTUUG1LF520RJKE2GZGH2172Y0B198NI5466UV7IT1EEU5RIG5EFD3DNHBIAMRHP6KZZCJU31ZRNPS1JZKPBYF1U7OOK9UFETO' where id=52; -update noar tt set v0='ZL9FYITBAMBCN7ADBVNOU3A1VS8EUMQL6D0UGH532ALAVH5VL0NS4AG42HXGH5354VRG24TUZBYIVRYRVXNSGFFJHVCEJYJWGPETWFAKP3A8NSDHYHUP7QXPLHY09UFC4IIBU7N4I2X23LS0XEUG2YHVTG15GMIBUC4UWHZDL629FOB4FD7C7OMZIXVK7M7A3FD2ZRKL9RN8XX3F0099ERM0WYV6J306YBZTBGS2U6VRD9AY23Q30IBYJ5JFK0QOP' where id=53; -update noar ti set v0='ZL9FYITBAMBCN7ADBVNOU3A1VS8EUMQL6D0UGH532ALAVH5VL0NS4AG42HXGH5354VRG24TUZBYIVRYRVXNSGFFJHVCEJYJWGPETWFAKP3A8NSDHYHUP7QXPLHY09UFC4IIBU7N4I2X23LS0XEUG2YHVTG15GMIBUC4UWHZDL629FOB4FD7C7OMZIXVK7M7A3FD2ZRKL9RN8XX3F0099ERM0WYV6J306YBZTBGS2U6VRD9AY23Q30IBYJ5JFK0QOP' where id=53; -update noar tt set v1='PBBKGZEODIR5Q55FA40R3RMUXHYNVDFRF47L4PLQDY0X47X66YJX67RRZB99N8TCRCU6MTL4VRR102MTDXOW18XQE0J39G8QBF1TQ9IOMIIU8M7RSX2BHXMOTPX5ZO741UEXDPGTG6F821AB8ASN9QUE8VLXWT7GEYX6PBE15MP0GYD4UDA1CHAAT53DO86S3MMAUXNCO5SAQPGS33GMXULUTLQGQ1JPP7BKUXI2W0A2YGTLZUAJB86DEZX94BF1G' where id=53; -update noar ti set v1='PBBKGZEODIR5Q55FA40R3RMUXHYNVDFRF47L4PLQDY0X47X66YJX67RRZB99N8TCRCU6MTL4VRR102MTDXOW18XQE0J39G8QBF1TQ9IOMIIU8M7RSX2BHXMOTPX5ZO741UEXDPGTG6F821AB8ASN9QUE8VLXWT7GEYX6PBE15MP0GYD4UDA1CHAAT53DO86S3MMAUXNCO5SAQPGS33GMXULUTLQGQ1JPP7BKUXI2W0A2YGTLZUAJB86DEZX94BF1G' where id=53; -update noar tt set v2='KDL7HSEBTTF64BH0BKSZP4SOQW3LX1Z7RCJGBJJAP8ZN54E24REUIAIM5Q6YHLOOWFU0PLA6013JT7MG4R6IABW6MG1226AX4XBB71DVOPM3Z2WGGNHD7MAS93F724BMWK06BXGO147P1YCXZ3LZ938WOLBL6NDXM1279N9G0A4KNEGRSRZT1TXSN3UU4UD1XZMQCD3ATEFXM177A5F890IGWPWCBHJ4M9N1L77ZROCO1VSJIMO36YOMQ1F8FDZQX' where id=53; -update noar ti set v2='KDL7HSEBTTF64BH0BKSZP4SOQW3LX1Z7RCJGBJJAP8ZN54E24REUIAIM5Q6YHLOOWFU0PLA6013JT7MG4R6IABW6MG1226AX4XBB71DVOPM3Z2WGGNHD7MAS93F724BMWK06BXGO147P1YCXZ3LZ938WOLBL6NDXM1279N9G0A4KNEGRSRZT1TXSN3UU4UD1XZMQCD3ATEFXM177A5F890IGWPWCBHJ4M9N1L77ZROCO1VSJIMO36YOMQ1F8FDZQX' where id=53; -update noar tt set v3='A0FQBNDLIDKZ5HDXWBJAZEEEFL5LUZEB90BSCAE8AGYHK76ZCQ3JVA9HP2P7L2Z1GUDSEOY4GGZFAHGN7D0JW3IBRTOBDNK92OK084ANG0K1FYBXCT5HFMBYBORIX3B7FJN15W32KKGXJPWMD0IQITPY6FI3533TTWFLZCA0203QONACATIUXREJX64DU04RYCEGPUVHVXN2C0UO5XJ2F6YFUKUT1CCNPL4X2JHPCUXJBB85FGYH1BD4BJHK8GX3H' where id=53; -update noar ti set v3='A0FQBNDLIDKZ5HDXWBJAZEEEFL5LUZEB90BSCAE8AGYHK76ZCQ3JVA9HP2P7L2Z1GUDSEOY4GGZFAHGN7D0JW3IBRTOBDNK92OK084ANG0K1FYBXCT5HFMBYBORIX3B7FJN15W32KKGXJPWMD0IQITPY6FI3533TTWFLZCA0203QONACATIUXREJX64DU04RYCEGPUVHVXN2C0UO5XJ2F6YFUKUT1CCNPL4X2JHPCUXJBB85FGYH1BD4BJHK8GX3H' where id=53; -update noar tt set v0='BAPOIHD64B450YH4R56M3XJB67LQPZTN25RWC28ZKGMGA6SMUIWWLIS3Z4KW0OHM24MKQCSNYJ17RX45K0CMQLQPG62NWTJ4QQFOUJE8CDXPC0IVIHCFQMADXNSCT1JPYF6CCMYMG3PY6JYYX7WD5L5PRUADHM5UQDWW4OMSH9G904FV9TMQLBISGJZX6XD1E63FWNHGC5EVBTVRDX49OL35FBY0XFLHHYJN6RNS622UHAQ4LJCF88TZYQDG1QC7V' where id=54; -update noar ti set v0='BAPOIHD64B450YH4R56M3XJB67LQPZTN25RWC28ZKGMGA6SMUIWWLIS3Z4KW0OHM24MKQCSNYJ17RX45K0CMQLQPG62NWTJ4QQFOUJE8CDXPC0IVIHCFQMADXNSCT1JPYF6CCMYMG3PY6JYYX7WD5L5PRUADHM5UQDWW4OMSH9G904FV9TMQLBISGJZX6XD1E63FWNHGC5EVBTVRDX49OL35FBY0XFLHHYJN6RNS622UHAQ4LJCF88TZYQDG1QC7V' where id=54; -update noar tt set v1='EFY3XLE5OXTUSARCO934E13M3KLI2M1SMZCYZRFCU8LVREMDRCZNI2W619ENYOMDHXMMB3YC7VXYT4I6NGZBQBQXKZAFGRZMX3WI9VKZOWT1ROSYEI2UYJZ9IZXSPKAB90YLVLLCOL7V3DPBF4RJJWP4HR7OR9B7VSHR1OUD0RXXNEWYNIIGHKST58NMEKJP6DGJ312LQU1TLG31SEO4YXWIY2WDBP6PJZCJBKD8LAM7LBO26HFASVT1HPFHZL2BH' where id=54; -update noar ti set v1='EFY3XLE5OXTUSARCO934E13M3KLI2M1SMZCYZRFCU8LVREMDRCZNI2W619ENYOMDHXMMB3YC7VXYT4I6NGZBQBQXKZAFGRZMX3WI9VKZOWT1ROSYEI2UYJZ9IZXSPKAB90YLVLLCOL7V3DPBF4RJJWP4HR7OR9B7VSHR1OUD0RXXNEWYNIIGHKST58NMEKJP6DGJ312LQU1TLG31SEO4YXWIY2WDBP6PJZCJBKD8LAM7LBO26HFASVT1HPFHZL2BH' where id=54; -update noar tt set v2='N8U6ZPBXUVGIFQKJ5RQL3OATNJ0FTB44I3X93QT9ZDL2L1Q8OXNN2IHICRI8M3NKKGVOIJ4JKHM6YWVU4KKWAZZ55S6CKQ4CIZP5O06HRXT4Q4221BOPIRYEJURNCZF6EUHQ38469X9X46LTNI8MSI8507BXZQBGPCNG1YHBDQ38E63114I7F1VEH8L7SYVX3CA9921OUS4NPUV39VPTELCVVP15ZG2TPWWT8MXD147B0H3N80OBONH727VBFGO0S' where id=54; -update noar ti set v2='N8U6ZPBXUVGIFQKJ5RQL3OATNJ0FTB44I3X93QT9ZDL2L1Q8OXNN2IHICRI8M3NKKGVOIJ4JKHM6YWVU4KKWAZZ55S6CKQ4CIZP5O06HRXT4Q4221BOPIRYEJURNCZF6EUHQ38469X9X46LTNI8MSI8507BXZQBGPCNG1YHBDQ38E63114I7F1VEH8L7SYVX3CA9921OUS4NPUV39VPTELCVVP15ZG2TPWWT8MXD147B0H3N80OBONH727VBFGO0S' where id=54; -update noar tt set v3='D5WU8HHE9314PJKNKJY44TPZB4RKMQA50XOC3WRFN3HSE4JOL92VUCZQRW1DF6OCVY2AGZNO83O480JJIF3QGMM2LF0XDFXCOKK21EG7TLMW487YPQBA1DAJZANJPGD6JLCQPL939238LBP8GT93I7NSFZ8F3EX3DJ633SSX8MR0WQ010YWIEVHHTDKOH7F7RDGG2HPCQXKADD0NXTVG7XS1H44LRYSNA4GG0WK43LQLDQ1TETU6NCDGJVEO3T0WI' where id=54; -update noar ti set v3='D5WU8HHE9314PJKNKJY44TPZB4RKMQA50XOC3WRFN3HSE4JOL92VUCZQRW1DF6OCVY2AGZNO83O480JJIF3QGMM2LF0XDFXCOKK21EG7TLMW487YPQBA1DAJZANJPGD6JLCQPL939238LBP8GT93I7NSFZ8F3EX3DJ633SSX8MR0WQ010YWIEVHHTDKOH7F7RDGG2HPCQXKADD0NXTVG7XS1H44LRYSNA4GG0WK43LQLDQ1TETU6NCDGJVEO3T0WI' where id=54; -update noar tt set v0='5KEBZ7PEV4XE1WV6QIO28EEIDZTUSQHU3XXOOM7ADH9W09UQSN2G28IJOY0T1RI70TIER87ZJXWNZWKMONKET7BHBKMKDF9RF5LE5C4LRZBC7EXOEYPCH7W9SDKYJ1LHBEQVCIMEB0VZ50LPHTK8DUIB138KO4A8NW1J3U8AIVHIR8GQBSYZ2W0LH675HZUVT1FLBBV8ZEU2DC9K8HCJGB514HHS0S7DTFWUUQOS342X8LSPHCTHNRL2TRZEOPBIZ' where id=55; -update noar ti set v0='5KEBZ7PEV4XE1WV6QIO28EEIDZTUSQHU3XXOOM7ADH9W09UQSN2G28IJOY0T1RI70TIER87ZJXWNZWKMONKET7BHBKMKDF9RF5LE5C4LRZBC7EXOEYPCH7W9SDKYJ1LHBEQVCIMEB0VZ50LPHTK8DUIB138KO4A8NW1J3U8AIVHIR8GQBSYZ2W0LH675HZUVT1FLBBV8ZEU2DC9K8HCJGB514HHS0S7DTFWUUQOS342X8LSPHCTHNRL2TRZEOPBIZ' where id=55; -update noar tt set v1='SP782CC3A5B2UIW6REYP3SS0BIX7BER4VPD7483TAUYOMMSSVD69RW8DT18E8LANUGWZ2QFR3CT5VFH6F83H94RA5ED0L572ZDZRYUMO8MJSDXNK9OHJALDMO1UAH0N03ZY969KSOVNZOCO8YNJN37B0QVTI62DON7FGRCRM3B0QDXPOMSAFDGP5LMIEOFP1YUFFXHULAB8THDIMS9DYT0P7RLYXUFUY0785CBG9DZWDWTLOXC9SJLV0CITFX9D7N' where id=55; -update noar ti set v1='SP782CC3A5B2UIW6REYP3SS0BIX7BER4VPD7483TAUYOMMSSVD69RW8DT18E8LANUGWZ2QFR3CT5VFH6F83H94RA5ED0L572ZDZRYUMO8MJSDXNK9OHJALDMO1UAH0N03ZY969KSOVNZOCO8YNJN37B0QVTI62DON7FGRCRM3B0QDXPOMSAFDGP5LMIEOFP1YUFFXHULAB8THDIMS9DYT0P7RLYXUFUY0785CBG9DZWDWTLOXC9SJLV0CITFX9D7N' where id=55; -update noar tt set v2='UGTQD0STZNDIRFSK9L97HGSOORV00LVXD5U76QDQTZOBI2DFMJWVOF334RQD596ER9Y19LIANSR0K8YNB58V17Z2TM1FXYBP36QQKZ0TSTVRU3PNFUITJYM7BJQTESLEZIR49YX812XTC1CQCZZES1IGQV6I1ITFGJ3J3BDQB74OM6D4XTN2DEFVZZVIWDJBYTXNRUXFRHT47Z3JSHGKX8EP6031YAKQLS4ME5UVDD079BTWQCTRJMWLJ11KSN30R' where id=55; -update noar ti set v2='UGTQD0STZNDIRFSK9L97HGSOORV00LVXD5U76QDQTZOBI2DFMJWVOF334RQD596ER9Y19LIANSR0K8YNB58V17Z2TM1FXYBP36QQKZ0TSTVRU3PNFUITJYM7BJQTESLEZIR49YX812XTC1CQCZZES1IGQV6I1ITFGJ3J3BDQB74OM6D4XTN2DEFVZZVIWDJBYTXNRUXFRHT47Z3JSHGKX8EP6031YAKQLS4ME5UVDD079BTWQCTRJMWLJ11KSN30R' where id=55; -update noar tt set v3='IR0AVQZZUS3XEJ6O8RR6I238SPQAXJLXZHRZBK98CN4Z59TCVAUQS1ZVD7SB1B5SF2U3XVNUL3D0NQ7XTSEOJ3T6HOY405F2HB8T7TO91R90XJR6IL9SNC2O9T5LRSN3E1GAQT0ASDDRZ1KE7962FX774SECR81O4Z6WKQME9KMVHIN5C9N5145B49T6U71GBID5G1L2A47KPT4HPFH9ETHFY4HW1GX6TFRMF2N8KK0GH6K1ZVU9PMWAUXEZ7KNUH' where id=55; -update noar ti set v3='IR0AVQZZUS3XEJ6O8RR6I238SPQAXJLXZHRZBK98CN4Z59TCVAUQS1ZVD7SB1B5SF2U3XVNUL3D0NQ7XTSEOJ3T6HOY405F2HB8T7TO91R90XJR6IL9SNC2O9T5LRSN3E1GAQT0ASDDRZ1KE7962FX774SECR81O4Z6WKQME9KMVHIN5C9N5145B49T6U71GBID5G1L2A47KPT4HPFH9ETHFY4HW1GX6TFRMF2N8KK0GH6K1ZVU9PMWAUXEZ7KNUH' where id=55; -update noar tt set v0='2XVRXAUXBGGSHA02PHRF5WM23SVCINVTS31613SIKPF42FW01653P6QQ7AZDGLWWPP3E1V25LPLJ950BP6RH4OUZUP6U5JZ3ESP3CKX7W1CM10ZRKAUL0IHUCP1XJUC3NV33PT3BZQJJ4EWNW2YAAZ9SEFON7DS297QOJJA4WUUWSV43QOO5AJDOSX694MUC2M229TL19XZ80PS1R7BQ1G0RNH2HNK3EN4ENWOHMX8MAVX5JDPGP9IC6RU2DG1RDN' where id=56; -update noar ti set v0='2XVRXAUXBGGSHA02PHRF5WM23SVCINVTS31613SIKPF42FW01653P6QQ7AZDGLWWPP3E1V25LPLJ950BP6RH4OUZUP6U5JZ3ESP3CKX7W1CM10ZRKAUL0IHUCP1XJUC3NV33PT3BZQJJ4EWNW2YAAZ9SEFON7DS297QOJJA4WUUWSV43QOO5AJDOSX694MUC2M229TL19XZ80PS1R7BQ1G0RNH2HNK3EN4ENWOHMX8MAVX5JDPGP9IC6RU2DG1RDN' where id=56; -update noar tt set v1='WKTYSGIL5KW3XX3ODB3ZXQEIDPYVDFETW2PFC7JQMIEZCIIEKS6V1PR1LI4PLJQXCQALPGJJ7C7MFDNY9ZM3T9W2WGDC82PSSW8ITUD53UTVY426MRX5VJVP9N99HFE3YFSWJOZKRE2NJ6G5IBVG5Y0IDD6AX2Q6HQFD18CVA7S2Z8OXPDDADLFHM0C3BO0CCWHCG67C8G1UJ4UDYWGD7ESPLH3PIGJHT81N3PNI9EBRBV9WC6D7YIU4AY0VXQ8I2' where id=56; -update noar ti set v1='WKTYSGIL5KW3XX3ODB3ZXQEIDPYVDFETW2PFC7JQMIEZCIIEKS6V1PR1LI4PLJQXCQALPGJJ7C7MFDNY9ZM3T9W2WGDC82PSSW8ITUD53UTVY426MRX5VJVP9N99HFE3YFSWJOZKRE2NJ6G5IBVG5Y0IDD6AX2Q6HQFD18CVA7S2Z8OXPDDADLFHM0C3BO0CCWHCG67C8G1UJ4UDYWGD7ESPLH3PIGJHT81N3PNI9EBRBV9WC6D7YIU4AY0VXQ8I2' where id=56; -update noar tt set v2='VS47NFSA08ZZ47ZVU1HLA7Q29YEZIZ9PTL3SNLGSCLIOR8IKEURY24XRPBZ4AB8YA5S13MBDMJFA4W090FJHJ2GX8GWX0RT0CEHVP129KOL1X2048Z4U605ZIV2ZX9R6UU39GDX60TFRTDMV86USA03IJ9BPC6HPBTXG38MV3DWHWJ9AK272BUM8J7M09EALJSDI76TXU7NVFBGCXJVGGR1U0N1RHP2H2UTUJ7Y2I2INIYIZUGRKTP7Z45OM8S37U' where id=56; -update noar ti set v2='VS47NFSA08ZZ47ZVU1HLA7Q29YEZIZ9PTL3SNLGSCLIOR8IKEURY24XRPBZ4AB8YA5S13MBDMJFA4W090FJHJ2GX8GWX0RT0CEHVP129KOL1X2048Z4U605ZIV2ZX9R6UU39GDX60TFRTDMV86USA03IJ9BPC6HPBTXG38MV3DWHWJ9AK272BUM8J7M09EALJSDI76TXU7NVFBGCXJVGGR1U0N1RHP2H2UTUJ7Y2I2INIYIZUGRKTP7Z45OM8S37U' where id=56; -update noar tt set v3='TKHXH2TUVZ35KW8ECSY84F6B9G0RN8JZU8LZSGSTUOIAQY5P4KFM8XMI2T4FG2UVDGWNFJAZ9H5BB5MFW90XVGNGS528IEKC1G52UAHPGXF5VH10VO3OC4KO7BO4UKLR380OFXN5KDIUSS86R1TQD6YDDBNXKPDV3ZB059XOSGE0ISD9J0NEG5HDEOGY7MRTYV08937GY5N1THJJIK8FSJDGF0W8OFPWT3OHYM8L1GDLTJVYJ6VOJG1Y96JTTLSAV' where id=56; -update noar ti set v3='TKHXH2TUVZ35KW8ECSY84F6B9G0RN8JZU8LZSGSTUOIAQY5P4KFM8XMI2T4FG2UVDGWNFJAZ9H5BB5MFW90XVGNGS528IEKC1G52UAHPGXF5VH10VO3OC4KO7BO4UKLR380OFXN5KDIUSS86R1TQD6YDDBNXKPDV3ZB059XOSGE0ISD9J0NEG5HDEOGY7MRTYV08937GY5N1THJJIK8FSJDGF0W8OFPWT3OHYM8L1GDLTJVYJ6VOJG1Y96JTTLSAV' where id=56; -update noar tt set v0='OQRVV7TKUBTCNWOMOHXDKY34RBM65J78BH049YBAMGPN3LEI9X1H7OTDIFN706ISCIAT2B02IRTTSSXF7KVOC8VGVZPWTCVM0FO6ZVP92SXC75DP04MW6YXIJ90P32IZPF1F1SK2SDIQW2QJVZAYFW4ARYY9SU959VSF3L8ZW6Q6E70GRGK71ICY8FZ8SRLH7V1NS96V4JV3TRPBHMBM3HFKBGMY7HA9E0YWZYJ1MRVPATQ5LVOX8B6IUOHJ11LO0' where id=57; -update noar ti set v0='OQRVV7TKUBTCNWOMOHXDKY34RBM65J78BH049YBAMGPN3LEI9X1H7OTDIFN706ISCIAT2B02IRTTSSXF7KVOC8VGVZPWTCVM0FO6ZVP92SXC75DP04MW6YXIJ90P32IZPF1F1SK2SDIQW2QJVZAYFW4ARYY9SU959VSF3L8ZW6Q6E70GRGK71ICY8FZ8SRLH7V1NS96V4JV3TRPBHMBM3HFKBGMY7HA9E0YWZYJ1MRVPATQ5LVOX8B6IUOHJ11LO0' where id=57; -update noar tt set v1='4TN0SP1FBHJJXDMU0BUGSH16R3HZLP6PBP3898F2VNZXZ0B6267WIFAO0DXSNM4PKAAQQGDB0K4CXR19RPDGNJVC2JBDJJV50LIJH54V6XMHW1ILDV4OOIZ1028L3JP6IZV53F1TA01T640TBXEL2JX5PW85AB753K3NZWO4NHALZ2FWRJS71N130HDL14244HH4LNZOSS6ZUWKU85Q9VE0INU68JGDGIFOTHZJMXFSOR6NYUQD1ELA132DM53Z19' where id=57; -update noar ti set v1='4TN0SP1FBHJJXDMU0BUGSH16R3HZLP6PBP3898F2VNZXZ0B6267WIFAO0DXSNM4PKAAQQGDB0K4CXR19RPDGNJVC2JBDJJV50LIJH54V6XMHW1ILDV4OOIZ1028L3JP6IZV53F1TA01T640TBXEL2JX5PW85AB753K3NZWO4NHALZ2FWRJS71N130HDL14244HH4LNZOSS6ZUWKU85Q9VE0INU68JGDGIFOTHZJMXFSOR6NYUQD1ELA132DM53Z19' where id=57; -update noar tt set v2='ZT4VWDLJU9A6RX17I03RU04VKQ2IELHQ45XLD70YKQFMMKIOTCB9KINY3BHGVU5QYD2DTE2FIRRXWAERKR8H3VAW1TWMS5PSJHH38SK203CK5QF58CPHZP4YP57U13EVRCV0FANAAKNBU2MNF685D9QY43GOX1LAZWFKIZ961ZZ5HBWN9Q3R9W5OB5G1QTOVUYI9Y0CPMLANDW0BQ21TK3SUPPVNWX05E2XKI4SZ7FJKV4A5GNKW58CSDIBKJ7BKV' where id=57; -update noar ti set v2='ZT4VWDLJU9A6RX17I03RU04VKQ2IELHQ45XLD70YKQFMMKIOTCB9KINY3BHGVU5QYD2DTE2FIRRXWAERKR8H3VAW1TWMS5PSJHH38SK203CK5QF58CPHZP4YP57U13EVRCV0FANAAKNBU2MNF685D9QY43GOX1LAZWFKIZ961ZZ5HBWN9Q3R9W5OB5G1QTOVUYI9Y0CPMLANDW0BQ21TK3SUPPVNWX05E2XKI4SZ7FJKV4A5GNKW58CSDIBKJ7BKV' where id=57; -update noar tt set v3='1PDH4D1PM0XNQZT5SPS63J000RNAOUBW88BLZ8D1LZR4L1DKN6CMFU2UEKSFKXGA195XKAQUQW6OCXV1HCMAT9W18W6HE46HI6XRHLQH9UPI5DFC0RU5KQNVJ56YU4YPOFO0NZN21IPTQPAF6WHAWEJD6E8N67ZUJMIAET33V0ZR7YUKTDK52SOLJJ1XZ9JZHBRV8S3IEBSR6J90SIO2SCOZO5X98VPR7ZYJ5K4LC446M1BXDX312KAVN6KRPD2IS' where id=57; -update noar ti set v3='1PDH4D1PM0XNQZT5SPS63J000RNAOUBW88BLZ8D1LZR4L1DKN6CMFU2UEKSFKXGA195XKAQUQW6OCXV1HCMAT9W18W6HE46HI6XRHLQH9UPI5DFC0RU5KQNVJ56YU4YPOFO0NZN21IPTQPAF6WHAWEJD6E8N67ZUJMIAET33V0ZR7YUKTDK52SOLJJ1XZ9JZHBRV8S3IEBSR6J90SIO2SCOZO5X98VPR7ZYJ5K4LC446M1BXDX312KAVN6KRPD2IS' where id=57; -update noar tt set v0='T4IYVQX8QWH7DCJ98VJY092YGKJHA7UB8SNGPBPAHTM1E10925N9RUPCT6MJ1QRBUKRBFJVQGX4XQOJAO29F2SG0RBVOR595QULYSMW5BM5D9F08H9C0P62SCXRKDO87CP14BW15ODYHW3UW6L29P5ORG7U16NVODTM9ZZU8SCTFPWL2AUC6FHTQ8YP2NXMVOHGXJSUWD4VB1XR4IWHAN03GLA62YB66EXIHYYFP0NGYMU5JG8P2245FNTFH2ALSY' where id=58; -update noar ti set v0='T4IYVQX8QWH7DCJ98VJY092YGKJHA7UB8SNGPBPAHTM1E10925N9RUPCT6MJ1QRBUKRBFJVQGX4XQOJAO29F2SG0RBVOR595QULYSMW5BM5D9F08H9C0P62SCXRKDO87CP14BW15ODYHW3UW6L29P5ORG7U16NVODTM9ZZU8SCTFPWL2AUC6FHTQ8YP2NXMVOHGXJSUWD4VB1XR4IWHAN03GLA62YB66EXIHYYFP0NGYMU5JG8P2245FNTFH2ALSY' where id=58; -update noar tt set v1='H7WEYMXXQ08LK3FKZMLSW30KI0UANO3S634GJ1VSNC8XYR161D3XNQ7ZDAOR19MRUYA33R9NGGHXGOPE88QBB5JKRC9TX6MVSH3JIT0SXZI1OYBD58IG45A4WK9Y3VZSPIF96GDZ8G19Z5IATL4YNUES8AAQKPN0XWDMNCOFRD0JX5VUKORKEDJ8BBWKHCT0HT235HOFB60S35VOWNK0URG8OAOYJ0V5P1NOJ0AWGBX9GMPZVJCOAKXXU2WYOX5GV' where id=58; -update noar ti set v1='H7WEYMXXQ08LK3FKZMLSW30KI0UANO3S634GJ1VSNC8XYR161D3XNQ7ZDAOR19MRUYA33R9NGGHXGOPE88QBB5JKRC9TX6MVSH3JIT0SXZI1OYBD58IG45A4WK9Y3VZSPIF96GDZ8G19Z5IATL4YNUES8AAQKPN0XWDMNCOFRD0JX5VUKORKEDJ8BBWKHCT0HT235HOFB60S35VOWNK0URG8OAOYJ0V5P1NOJ0AWGBX9GMPZVJCOAKXXU2WYOX5GV' where id=58; -update noar tt set v2='1CKWL0AI2QJC9TJ7FXE8OHM5F3HOGMQBAME9JH19VKQ8OXX3Q4QGJOZ4MDLEJLMWT80RIMO8332NH74LP2FSRGBK541MEJ1IO190U7TVPLB7WQ7AEBIVTYVHQNZ5W5Z8XBMLHYW1T2PASDT8VJKYUYCJESPMGIIEDCOPW4PV3MUZW35GPLMMYPGUYBB75NOO7RERYD4ATM3XF10Y2N9V1QA0NYP6KXH4KS46VLUPV8DB19MA55BHESKJEW9O62777' where id=58; -update noar ti set v2='1CKWL0AI2QJC9TJ7FXE8OHM5F3HOGMQBAME9JH19VKQ8OXX3Q4QGJOZ4MDLEJLMWT80RIMO8332NH74LP2FSRGBK541MEJ1IO190U7TVPLB7WQ7AEBIVTYVHQNZ5W5Z8XBMLHYW1T2PASDT8VJKYUYCJESPMGIIEDCOPW4PV3MUZW35GPLMMYPGUYBB75NOO7RERYD4ATM3XF10Y2N9V1QA0NYP6KXH4KS46VLUPV8DB19MA55BHESKJEW9O62777' where id=58; -update noar tt set v3='GT2XAWQ1WX4S935LJDP4LU49YKV1PBSTOF0N0ZE8Z9A356SPP9TC92GE9UE5ZX4R14EXLTO4KNZE2MVIDUN3TBFIMXDU8IDGUMHLW79BJSFLB04I8K7RVETY8QIV24MJQHENQUTSXTTENVU6Z56N6SWZNTA0PN5C9XOUM3KRNFTWUU5BIV4JCKD73XVC166VGPV40PHZTJXSF1SXUSLDPIHZ3AQ8O7AHYHKZSGS1SD6TDY6K9AIWFPUTIUCEP4M3K' where id=58; -update noar ti set v3='GT2XAWQ1WX4S935LJDP4LU49YKV1PBSTOF0N0ZE8Z9A356SPP9TC92GE9UE5ZX4R14EXLTO4KNZE2MVIDUN3TBFIMXDU8IDGUMHLW79BJSFLB04I8K7RVETY8QIV24MJQHENQUTSXTTENVU6Z56N6SWZNTA0PN5C9XOUM3KRNFTWUU5BIV4JCKD73XVC166VGPV40PHZTJXSF1SXUSLDPIHZ3AQ8O7AHYHKZSGS1SD6TDY6K9AIWFPUTIUCEP4M3K' where id=58; -update noar tt set v0='OCJKLR5DWR3C8QSGNPUDDVM8FA7T7UWVKEF80AXPSP50JUKOZKXW9MLTRCSSGQ1WJ3UIM7CED973ORIG8G2X30YR6IABYP5FYXS3BUB8YASSJZ15VDR21UR4D1MKIKOOTBISIG9IUWHC607NUVBA3IRRJRZF13INTJ5UOSDFJEJFQC61NA9IF486JNSEMIZ4WEW0NPWV7SJ5FWHZPOYMYRKTTJI7SU73Y55R53A58S2R7B4TQVUC6WRLKA2XPT6W5' where id=59; -update noar ti set v0='OCJKLR5DWR3C8QSGNPUDDVM8FA7T7UWVKEF80AXPSP50JUKOZKXW9MLTRCSSGQ1WJ3UIM7CED973ORIG8G2X30YR6IABYP5FYXS3BUB8YASSJZ15VDR21UR4D1MKIKOOTBISIG9IUWHC607NUVBA3IRRJRZF13INTJ5UOSDFJEJFQC61NA9IF486JNSEMIZ4WEW0NPWV7SJ5FWHZPOYMYRKTTJI7SU73Y55R53A58S2R7B4TQVUC6WRLKA2XPT6W5' where id=59; -update noar tt set v1='SZX3XFTLON4AGEFQKX8O2A6BQQBMK0O1J02XXY1DFW8MPKSCVGYVLZ3YOM21V8YHDK7VJHZGI7NX5SOKXF4XVIN2OY7IPWPCSR9J22LHMIUJ1UXRMFCWTU04ZO3OHNB5873V882WYTFWOVLIHD2RQMPRMRBC3FKFUGT7E3SBGVVZ2KKWE82S35T0Y3S13YSIB68Z81FGFCQGDPLL6QWXHELNJB4IJRWH1ER7WM56ITTFHK0IJ9SPVTN7AV9XRR1D3' where id=59; -update noar ti set v1='SZX3XFTLON4AGEFQKX8O2A6BQQBMK0O1J02XXY1DFW8MPKSCVGYVLZ3YOM21V8YHDK7VJHZGI7NX5SOKXF4XVIN2OY7IPWPCSR9J22LHMIUJ1UXRMFCWTU04ZO3OHNB5873V882WYTFWOVLIHD2RQMPRMRBC3FKFUGT7E3SBGVVZ2KKWE82S35T0Y3S13YSIB68Z81FGFCQGDPLL6QWXHELNJB4IJRWH1ER7WM56ITTFHK0IJ9SPVTN7AV9XRR1D3' where id=59; -update noar tt set v2='SGKGE4Z01FT1ZLC2PAW8G5T8PGG0EUCYSAF8L5MV2C071IHPV5J8O9KA2749U7QUK0AC4A7MWW81HVM3NBRDWDKT1LTEOYH8UGT3QXDIV37U89K8VXAZ9G87BMEAMZI2MSBG5704H4W45B17JIRGJ8QI25O0MLRVN72NS7JJG4754YC8L6C6P26OTWXL6Z4H7ZGB094GML0PHEXA0ISPIS5YX52ZVLSEWPB6XNOHJ8I8TVARPJ9YEDT8VSS0349Q2' where id=59; -update noar ti set v2='SGKGE4Z01FT1ZLC2PAW8G5T8PGG0EUCYSAF8L5MV2C071IHPV5J8O9KA2749U7QUK0AC4A7MWW81HVM3NBRDWDKT1LTEOYH8UGT3QXDIV37U89K8VXAZ9G87BMEAMZI2MSBG5704H4W45B17JIRGJ8QI25O0MLRVN72NS7JJG4754YC8L6C6P26OTWXL6Z4H7ZGB094GML0PHEXA0ISPIS5YX52ZVLSEWPB6XNOHJ8I8TVARPJ9YEDT8VSS0349Q2' where id=59; -update noar tt set v3='WW7PJ5U5FIPYO51MRLEAD29VOJ4RONVS3U7BAR4Y0BA7ZKOLO3GE7FJCWMSFD58GEHH9I45SPCPMB5EGOZHFVI3ICQ045KPR3CLRI5UA7LN10X0T1I824EY3YMFM0Y4L2N6I9O905JKPA39931IAOT3LQ8ZFN1UWFNQU8HMD86068TAHR1M1XL6EL22P49AJXJMVECPWTERW3D7YV2RQFS1UO4N6KBVIQWN37ZRUUB1ITN7I4D1VD5KMZ6JH9F8G4' where id=59; -update noar ti set v3='WW7PJ5U5FIPYO51MRLEAD29VOJ4RONVS3U7BAR4Y0BA7ZKOLO3GE7FJCWMSFD58GEHH9I45SPCPMB5EGOZHFVI3ICQ045KPR3CLRI5UA7LN10X0T1I824EY3YMFM0Y4L2N6I9O905JKPA39931IAOT3LQ8ZFN1UWFNQU8HMD86068TAHR1M1XL6EL22P49AJXJMVECPWTERW3D7YV2RQFS1UO4N6KBVIQWN37ZRUUB1ITN7I4D1VD5KMZ6JH9F8G4' where id=59; -update noar tt set v0='AOZVC9T1CKT9IETJ31WKMG7KHLMD0H6H0SAMB3ITD6EUYXKT4SM2U7DNVWT7Y8X0YRPSTVWR0AP74XA9ZHWMBHQ3NC4EGX7B5T9GX9WI04M3EY8EVJDXLC17TYY0TDUPV3Y30MICMKCV0OYCS3TMAR29TL33OKG3VX7BK8WV04HMBSB9YCZOALIAM2R1XK4EIQG4V7R6L4Q0YADNGASZJY8Z3KM467RF308IDJ6SN9TXRWHS30NI42WIX2S5QXVP7' where id=60; -update noar ti set v0='AOZVC9T1CKT9IETJ31WKMG7KHLMD0H6H0SAMB3ITD6EUYXKT4SM2U7DNVWT7Y8X0YRPSTVWR0AP74XA9ZHWMBHQ3NC4EGX7B5T9GX9WI04M3EY8EVJDXLC17TYY0TDUPV3Y30MICMKCV0OYCS3TMAR29TL33OKG3VX7BK8WV04HMBSB9YCZOALIAM2R1XK4EIQG4V7R6L4Q0YADNGASZJY8Z3KM467RF308IDJ6SN9TXRWHS30NI42WIX2S5QXVP7' where id=60; -update noar tt set v1='MMLN0JIFW6NRG014UZVRAUY0GH8VJ731Z77FPBUZVVRXGVD8L5SOIWTU9CFKRFFY1JUZM74LEWBLUNZGJOZZDTPY93UHS4S27P72QXSB95MP3X8EXYDSCEOO7DMTMYX98GCQ4242HDVLPITE4DB16DJKGCL8HRD2KJXFT6EFMLFX1OWA6ME5JP3KRG0LC2R9IB35EHHQ4MKO7N4QBNEH6EZ8EJXPLWPECQN2M08JAPBP08RJX678HHPJFG46SDO2S' where id=60; -update noar ti set v1='MMLN0JIFW6NRG014UZVRAUY0GH8VJ731Z77FPBUZVVRXGVD8L5SOIWTU9CFKRFFY1JUZM74LEWBLUNZGJOZZDTPY93UHS4S27P72QXSB95MP3X8EXYDSCEOO7DMTMYX98GCQ4242HDVLPITE4DB16DJKGCL8HRD2KJXFT6EFMLFX1OWA6ME5JP3KRG0LC2R9IB35EHHQ4MKO7N4QBNEH6EZ8EJXPLWPECQN2M08JAPBP08RJX678HHPJFG46SDO2S' where id=60; -update noar tt set v2='QY5UN1Q1FY85OIARC056Q9VM5I46LPE7SY61Z6PNGZVNC31JJHRZ4V9S33CDNJPSD7MXFT8CSYWWLPOB9MQ3KK4IJ7NDE2WCSEUEZ2N1TFI7BOBUK5TG2RGHLTOPIJAMLYOOKIH9Y8BUEZYRW6HEFBS0WBZ38IXH4Y93SN18O6DYV5ISB83HNLFM3YAV03MYPJD09GI30RJZ2WVCA43RSH6ITEGQA3HX1KFRM3ECBVYWXYQDR1SMYHO0EZ9XW2PHT' where id=60; -update noar ti set v2='QY5UN1Q1FY85OIARC056Q9VM5I46LPE7SY61Z6PNGZVNC31JJHRZ4V9S33CDNJPSD7MXFT8CSYWWLPOB9MQ3KK4IJ7NDE2WCSEUEZ2N1TFI7BOBUK5TG2RGHLTOPIJAMLYOOKIH9Y8BUEZYRW6HEFBS0WBZ38IXH4Y93SN18O6DYV5ISB83HNLFM3YAV03MYPJD09GI30RJZ2WVCA43RSH6ITEGQA3HX1KFRM3ECBVYWXYQDR1SMYHO0EZ9XW2PHT' where id=60; -update noar tt set v3='6LEOVTR64VSNYLW6RIHCEY2CRAFZHKXEQNHT9V60WZNZ7HWXW1P347NY7A8GO4KT7GTFY5832650LMBPT5J2YHANYC0MMDSKC59C8Q85G30TJI9PKMKK2TH7AEDTB18RL82OMQI7IRAQNZUZWP62WDL4MI0XKUBN0VSWG38SZYHMX4D1ZA3G2XXCEFEVUIBQBZV9H5NUM78ENIEVY51PWE7OU9V82LBUXAIV3WPRXKVX9Q7WJCYTP29DG4IIAVEWA' where id=60; -update noar ti set v3='6LEOVTR64VSNYLW6RIHCEY2CRAFZHKXEQNHT9V60WZNZ7HWXW1P347NY7A8GO4KT7GTFY5832650LMBPT5J2YHANYC0MMDSKC59C8Q85G30TJI9PKMKK2TH7AEDTB18RL82OMQI7IRAQNZUZWP62WDL4MI0XKUBN0VSWG38SZYHMX4D1ZA3G2XXCEFEVUIBQBZV9H5NUM78ENIEVY51PWE7OU9V82LBUXAIV3WPRXKVX9Q7WJCYTP29DG4IIAVEWA' where id=60; -update noar tt set v0='Z06DWH9481KQY5ZFX768QBMQLADK5COYS3Y4O6H5EIUEL3V9OVPWQ1UL1WKLNSZF6A9IDS6W1Q6RZMI3ROTFLE363BVOXDK8SEYZHGE55ZK56JYUWJ6B67P5SIP6S4V0W1ZEI6MNZKXN2NHMU0HKJDU9HDIICVH2C29O8Y4GPFD9NH5L74ZYHXQZ5JC9WLP4H3LD0K5A9B6OT89ZXMAV52N18P06R1PQKXK5C3M1P6XENDYXX9E9VWORZWENUXG9M' where id=61; -update noar ti set v0='Z06DWH9481KQY5ZFX768QBMQLADK5COYS3Y4O6H5EIUEL3V9OVPWQ1UL1WKLNSZF6A9IDS6W1Q6RZMI3ROTFLE363BVOXDK8SEYZHGE55ZK56JYUWJ6B67P5SIP6S4V0W1ZEI6MNZKXN2NHMU0HKJDU9HDIICVH2C29O8Y4GPFD9NH5L74ZYHXQZ5JC9WLP4H3LD0K5A9B6OT89ZXMAV52N18P06R1PQKXK5C3M1P6XENDYXX9E9VWORZWENUXG9M' where id=61; -update noar tt set v1='FCAIZUEISH1PP8D1UJEMUG2LMIY4FFH9OOCLC9MNLWJ8ISEUK7H1NG74WOC5NGXJO88RW8708K3C1V0J22REYZBKA3P4OW4Z3NGSS8O0R8EQACR0W5T308R178MYU6DK7EYKZI8I34AS9X00NTTYOKPILSVXL1X2V650O1X7TOA23WJEGTCZWKF63GMDS099SC7U7G4FH9STT61069CVVJ3V1L7PVZRYRY9JQUS8DNRXGCL2O221OWZ3FYH18KB6R' where id=61; -update noar ti set v1='FCAIZUEISH1PP8D1UJEMUG2LMIY4FFH9OOCLC9MNLWJ8ISEUK7H1NG74WOC5NGXJO88RW8708K3C1V0J22REYZBKA3P4OW4Z3NGSS8O0R8EQACR0W5T308R178MYU6DK7EYKZI8I34AS9X00NTTYOKPILSVXL1X2V650O1X7TOA23WJEGTCZWKF63GMDS099SC7U7G4FH9STT61069CVVJ3V1L7PVZRYRY9JQUS8DNRXGCL2O221OWZ3FYH18KB6R' where id=61; -update noar tt set v2='VJSKU2WK2WHEIRX475ME9G71GYLRFCQ3PLISDP8AG0ML2YF1CZ3FZ7BUO4GO8367049CQZNP78901O3MYGCS8B8GEQT8JS6C8UZ6CTQSASARSYMW7AVUA36IQJQZZGIO3AHBCUEFT7ZJJ5JHEGI2N4ZAHBZP7LR4NFZEBKQH6A27G0RQTCI3E9R2DJNWZBH06GFMXS62333RIOVPDA7L35VFRGHJPN4D6ONHFH3PHQFSKIC2HBN1XOB387FP88I1M' where id=61; -update noar ti set v2='VJSKU2WK2WHEIRX475ME9G71GYLRFCQ3PLISDP8AG0ML2YF1CZ3FZ7BUO4GO8367049CQZNP78901O3MYGCS8B8GEQT8JS6C8UZ6CTQSASARSYMW7AVUA36IQJQZZGIO3AHBCUEFT7ZJJ5JHEGI2N4ZAHBZP7LR4NFZEBKQH6A27G0RQTCI3E9R2DJNWZBH06GFMXS62333RIOVPDA7L35VFRGHJPN4D6ONHFH3PHQFSKIC2HBN1XOB387FP88I1M' where id=61; -update noar tt set v3='I9SDEYSD90H16OQ8OJCZH3TSBAZU4CD4HZ8EPQ8AAADHM1JWLIZ6CZWX6H29IR5YJARZO32GSWODWNC3TZDSUMBNKI918PF1R9UOJHYJVK7DSPLRP78QHVQ7QH9G6QJO68X2RLOLDMH1O5GS3OONBFVWEEA8LAJSR1KX3T5ICPA46IDRHPXK6DKC0U7J7NIBDHKJXYCUDPUK6AA0E6ST3H4SH635J89OFQS5DCR0FH5CU757J65PJTMERPCLHIJ6K' where id=61; -update noar ti set v3='I9SDEYSD90H16OQ8OJCZH3TSBAZU4CD4HZ8EPQ8AAADHM1JWLIZ6CZWX6H29IR5YJARZO32GSWODWNC3TZDSUMBNKI918PF1R9UOJHYJVK7DSPLRP78QHVQ7QH9G6QJO68X2RLOLDMH1O5GS3OONBFVWEEA8LAJSR1KX3T5ICPA46IDRHPXK6DKC0U7J7NIBDHKJXYCUDPUK6AA0E6ST3H4SH635J89OFQS5DCR0FH5CU757J65PJTMERPCLHIJ6K' where id=61; -update noar tt set v0='NXEXZUGUPS1TTYH4MEMQCOTU47J1L06S1Y5GN3N77G8262UEXHEZ6LKSACZ0MGUE5IMHE5EMSKSG5KBANY09Q64HL579L4OJ7L51HQPT1QMNIEWV4XMH91BB9C0BTOLZRDA0RHL7KQY9IT2ICMYUHVANHFXOJCQO7YKCG8XNAXQ84EVD25315P096U36XTW85N6X6O8D2TMOGCQIMXVPN0SIRFA7WS8D9RSK79B42GDI6RB2E8FA5TEEBT5F4YCHR' where id=62; -update noar ti set v0='NXEXZUGUPS1TTYH4MEMQCOTU47J1L06S1Y5GN3N77G8262UEXHEZ6LKSACZ0MGUE5IMHE5EMSKSG5KBANY09Q64HL579L4OJ7L51HQPT1QMNIEWV4XMH91BB9C0BTOLZRDA0RHL7KQY9IT2ICMYUHVANHFXOJCQO7YKCG8XNAXQ84EVD25315P096U36XTW85N6X6O8D2TMOGCQIMXVPN0SIRFA7WS8D9RSK79B42GDI6RB2E8FA5TEEBT5F4YCHR' where id=62; -update noar tt set v1='5AU9RJ74MDW27W4LVAXBPYS3NI7AEPDVVY7OEFFS0RDKVYXX6TU08HU72MRJ4860MGPDRFYYKX3GAVGZ85K4NE7CC25JM4RF1LYRTIYH67JLAWN63DODIF0H627PC08LKYGB9FMMZVHGWRKOQU7LZPI5BTC895DB81RATMR7EV02SOREHELLO72EMTWWOIXX8XG8DHJK5FU7EU64XSTRZPTY9BE80M9XK5RO3I9L9ZGE4G0FW7Q4HBXPPUTBL13I8' where id=62; -update noar ti set v1='5AU9RJ74MDW27W4LVAXBPYS3NI7AEPDVVY7OEFFS0RDKVYXX6TU08HU72MRJ4860MGPDRFYYKX3GAVGZ85K4NE7CC25JM4RF1LYRTIYH67JLAWN63DODIF0H627PC08LKYGB9FMMZVHGWRKOQU7LZPI5BTC895DB81RATMR7EV02SOREHELLO72EMTWWOIXX8XG8DHJK5FU7EU64XSTRZPTY9BE80M9XK5RO3I9L9ZGE4G0FW7Q4HBXPPUTBL13I8' where id=62; -update noar tt set v2='70OX8IB5D52ZKY0YRQDR3P1NMCPNMWO1CQ8KFIVMTRNYKEEFGP1YP2ELLWBEHW24USBQRU6P3DGJ3FJH2TPQJ0Q4X436IGF8QC41XU74K4YOQ5YZNZGZIYY8QS8ZP9IVBHPIKTFYOO5FGAUYALC1XHDZCZUGFCAT8BBYYQXCWQJQ2Y7K72XGA7LUUFRALQG6P57OOYSADVUKYNZ75GX7AMJQBPWOAC5DNDK75XIPE6Q172FRAMRK3OLHDIRUSC14A' where id=62; -update noar ti set v2='70OX8IB5D52ZKY0YRQDR3P1NMCPNMWO1CQ8KFIVMTRNYKEEFGP1YP2ELLWBEHW24USBQRU6P3DGJ3FJH2TPQJ0Q4X436IGF8QC41XU74K4YOQ5YZNZGZIYY8QS8ZP9IVBHPIKTFYOO5FGAUYALC1XHDZCZUGFCAT8BBYYQXCWQJQ2Y7K72XGA7LUUFRALQG6P57OOYSADVUKYNZ75GX7AMJQBPWOAC5DNDK75XIPE6Q172FRAMRK3OLHDIRUSC14A' where id=62; -update noar tt set v3='122OFJ6KA5NDLUYVNC0PAVE1U3IF10MIATZ9IOTXG6GC8339IJRIFRQ2QHFKU44R0FNRV8HO75VCIQ3YRON1DMOP7TU53DC6SQG6OJ5ICNUZDT3JUI070RZPZ84U4YV5I8ATT1S8SZZ7YUCF5THZK446OFU7NV54KSBRF3LFQ4ZT5C09XDZRHP436GQEE0J8SWM57DT6RV5033VNPV6MN3NR3CLTAIMWNN2W2ON4S914094K295W0DA7T6ULBQ64R' where id=62; -update noar ti set v3='122OFJ6KA5NDLUYVNC0PAVE1U3IF10MIATZ9IOTXG6GC8339IJRIFRQ2QHFKU44R0FNRV8HO75VCIQ3YRON1DMOP7TU53DC6SQG6OJ5ICNUZDT3JUI070RZPZ84U4YV5I8ATT1S8SZZ7YUCF5THZK446OFU7NV54KSBRF3LFQ4ZT5C09XDZRHP436GQEE0J8SWM57DT6RV5033VNPV6MN3NR3CLTAIMWNN2W2ON4S914094K295W0DA7T6ULBQ64R' where id=62; -update noar tt set v0='7XPULF6CBZ1A8KZW7WRCIRVO2HJSTNY8FH7HFF6OV7KQ5XQL3CSTHZS26YHE84YD9WNW48KH1TNVT9KSAGV8M95NF31N4RRB31QAGLY5QDF1K9LKB369I8UQZZFU5KAN2CSU8ERAZHZOPV611U4L80Y9DGMN1E35JYCQJD2N0WN7SJFGG5STWU2P42KP66DZSFB317VZTL9ZT78LHMZ3VVL74QNZY1B5K0AZYL2LK5L2IU4BV0OC8PYY9X6IM6G2I' where id=63; -update noar ti set v0='7XPULF6CBZ1A8KZW7WRCIRVO2HJSTNY8FH7HFF6OV7KQ5XQL3CSTHZS26YHE84YD9WNW48KH1TNVT9KSAGV8M95NF31N4RRB31QAGLY5QDF1K9LKB369I8UQZZFU5KAN2CSU8ERAZHZOPV611U4L80Y9DGMN1E35JYCQJD2N0WN7SJFGG5STWU2P42KP66DZSFB317VZTL9ZT78LHMZ3VVL74QNZY1B5K0AZYL2LK5L2IU4BV0OC8PYY9X6IM6G2I' where id=63; -update noar tt set v1='425VW1UHS2MFSSZQYC4MJMDFT6VQUJNYA7D6JZR5TZQY0CU6O2NHSZBE3AY9YMX05Y0ER4LZXUPV6DAOS4ZJDENI9QWXWBQLM6N45VKI4EUQFV96QFLGAPA5WBL2RR5W9L96XZI76OA8LK1KMER86D3VZ7T6VQWZ15KH662NG1YEFPXNXPLZCPKSDVS2TKYAEFD0D5VAWFQ6HS2NB7V8B013ETWJ5XN9S6BXLT38U063CZDVQUPSYM6U9K8C1RFAL' where id=63; -update noar ti set v1='425VW1UHS2MFSSZQYC4MJMDFT6VQUJNYA7D6JZR5TZQY0CU6O2NHSZBE3AY9YMX05Y0ER4LZXUPV6DAOS4ZJDENI9QWXWBQLM6N45VKI4EUQFV96QFLGAPA5WBL2RR5W9L96XZI76OA8LK1KMER86D3VZ7T6VQWZ15KH662NG1YEFPXNXPLZCPKSDVS2TKYAEFD0D5VAWFQ6HS2NB7V8B013ETWJ5XN9S6BXLT38U063CZDVQUPSYM6U9K8C1RFAL' where id=63; -update noar tt set v2='FIGA0YYCOX1PAY3OZMU14NO5NRN6DH84XGAHB52YXWYFXSPIAUC5YLNAYKDPMRXJK9Q6QBS0E9T88K5NY5C9O08HJ8I3WVVTC9YOWRRHG547IW6UC0Z3ENMUD1LQ2KSELRN4SRQ0ADR0XHNTPJ9PL147WK2KLSQYMTY2P7LDGKE4M76OY6XPRUHWVMCTQM9BRAFWMU9H1PPA0OX2TU7FJWGEPD7ATSU0KV4524ZI0X9FEE95D6DQ5OLWF6HM29X2W' where id=63; -update noar ti set v2='FIGA0YYCOX1PAY3OZMU14NO5NRN6DH84XGAHB52YXWYFXSPIAUC5YLNAYKDPMRXJK9Q6QBS0E9T88K5NY5C9O08HJ8I3WVVTC9YOWRRHG547IW6UC0Z3ENMUD1LQ2KSELRN4SRQ0ADR0XHNTPJ9PL147WK2KLSQYMTY2P7LDGKE4M76OY6XPRUHWVMCTQM9BRAFWMU9H1PPA0OX2TU7FJWGEPD7ATSU0KV4524ZI0X9FEE95D6DQ5OLWF6HM29X2W' where id=63; -update noar tt set v3='NRMJA9ZDTW4RCGR5VG9S19ZYBAO8R1FRT7JMA26N2PRKIUAUBDQFB1PBD89HVWNT119VIPTYM3PE8JYT1NNMCVYEQWAPN67P0XI9BN4FA2A3Z5O7FYDO0P3FITXFDCDA19D7T82Y9FDCJ49QK3JL9L2MR1YVM1ZD7I792QOJJDAHO0HF10KKY6P99IGVVHBWFM6IQA6JD6KH83U95BQOEBX5BNJSC2CGZA1NFGCZDSPTZH5ZPMYIDPWM372O2HQPR' where id=63; -update noar ti set v3='NRMJA9ZDTW4RCGR5VG9S19ZYBAO8R1FRT7JMA26N2PRKIUAUBDQFB1PBD89HVWNT119VIPTYM3PE8JYT1NNMCVYEQWAPN67P0XI9BN4FA2A3Z5O7FYDO0P3FITXFDCDA19D7T82Y9FDCJ49QK3JL9L2MR1YVM1ZD7I792QOJJDAHO0HF10KKY6P99IGVVHBWFM6IQA6JD6KH83U95BQOEBX5BNJSC2CGZA1NFGCZDSPTZH5ZPMYIDPWM372O2HQPR' where id=63; -update noar tt set v0='XE7SDGQ7FNX96D0EETW8TBJHY74508G28F219SHG2ZUBHWQ3O631HZ6OD4GASNLZ8T92Z2C6CD1YIS59P7X79W4HYLHW2ZBF8DSX1GDZAA5YYL5IPVQWGSJZIPPY431RMDWRWTGW0NUFNTLELPVPF8GR3TG0SA7DP5YTLJE619C6HYU0WFV3QYZ7R0NOJGKCTDCJXQKSUHS4GWPPBD2JPUXSE0IZ952C98DHI6JVBDX57JNOKCQ2HM851Q7I74WL4' where id=64; -update noar ti set v0='XE7SDGQ7FNX96D0EETW8TBJHY74508G28F219SHG2ZUBHWQ3O631HZ6OD4GASNLZ8T92Z2C6CD1YIS59P7X79W4HYLHW2ZBF8DSX1GDZAA5YYL5IPVQWGSJZIPPY431RMDWRWTGW0NUFNTLELPVPF8GR3TG0SA7DP5YTLJE619C6HYU0WFV3QYZ7R0NOJGKCTDCJXQKSUHS4GWPPBD2JPUXSE0IZ952C98DHI6JVBDX57JNOKCQ2HM851Q7I74WL4' where id=64; -update noar tt set v1='O1ZV9GEHG7FW6S72BZZK030LZEX0Y1SSNG7ONY2OV7UGRHQAMCHSYRG4TG432DQN1MRT02DLPRM0YNGF47DNX4CIEYNTBW2CX55F1DJXODVM8GTK3QN997Y5HBWV5S42OZUEZTQ21L6OSO7LDOHQQTLN5FH9FBIE2PGV27CYVCJH8RFA1AVXECV1HW0ESNXI9KZ1F286EJ8RJDQIFCXB5BGNR5THFF563H30X5714SL9BWDKMY4864UICDMX5WGX1' where id=64; -update noar ti set v1='O1ZV9GEHG7FW6S72BZZK030LZEX0Y1SSNG7ONY2OV7UGRHQAMCHSYRG4TG432DQN1MRT02DLPRM0YNGF47DNX4CIEYNTBW2CX55F1DJXODVM8GTK3QN997Y5HBWV5S42OZUEZTQ21L6OSO7LDOHQQTLN5FH9FBIE2PGV27CYVCJH8RFA1AVXECV1HW0ESNXI9KZ1F286EJ8RJDQIFCXB5BGNR5THFF563H30X5714SL9BWDKMY4864UICDMX5WGX1' where id=64; -update noar tt set v2='GJC3EVDTJ11CHNZE8TJO66IGOBHT1I9004BQLJWAKI79CLZBAW7HZ73QR9HIVTEA9L3CWR9YGRA9W55EZMBSH6YNS40B1525KXYBOXGM9Z10BJ7FWS6M9SN4GD6H77O36NKX46R2YPUYZI6EB3JJ314KB0OPS5GHW1FB238IKCL3RFTGI1AC8DBO5FZZKNELMDB2JEVEC5AMGLDWQDLUGH480RN54G1FLUT5ZRB8QS2M3KR9EOGGWJ7DGZSVPSUAC' where id=64; -update noar ti set v2='GJC3EVDTJ11CHNZE8TJO66IGOBHT1I9004BQLJWAKI79CLZBAW7HZ73QR9HIVTEA9L3CWR9YGRA9W55EZMBSH6YNS40B1525KXYBOXGM9Z10BJ7FWS6M9SN4GD6H77O36NKX46R2YPUYZI6EB3JJ314KB0OPS5GHW1FB238IKCL3RFTGI1AC8DBO5FZZKNELMDB2JEVEC5AMGLDWQDLUGH480RN54G1FLUT5ZRB8QS2M3KR9EOGGWJ7DGZSVPSUAC' where id=64; -update noar tt set v3='7TGO8SWUNJIUOEW78RP3WVK20PKKBND71LFY12JWTK97D5NAHVE8T72HSHMCFQM3SGEDVYKVSBUAY2256GNICQHPZODV6WKMJGOB8CJXCDFYA9FPQ71CF3543W42E7W4RV3MHIC91VSFQZBTWLEKOC6CLF23OGY36VVLM5XMGF3134V466OL7DHTT7IU2ODZMYV07C7CH8RYXOG12EQBCNYK21UL3XM9LUSE7RK0CNWGHL0PJD9K8GBYBUNB7UGS8' where id=64; -update noar ti set v3='7TGO8SWUNJIUOEW78RP3WVK20PKKBND71LFY12JWTK97D5NAHVE8T72HSHMCFQM3SGEDVYKVSBUAY2256GNICQHPZODV6WKMJGOB8CJXCDFYA9FPQ71CF3543W42E7W4RV3MHIC91VSFQZBTWLEKOC6CLF23OGY36VVLM5XMGF3134V466OL7DHTT7IU2ODZMYV07C7CH8RYXOG12EQBCNYK21UL3XM9LUSE7RK0CNWGHL0PJD9K8GBYBUNB7UGS8' where id=64; -update noar tt set v0='TBZ6JJNFFUZLUACSYXRNADLKFK2SJ7A2JH884CTUMLZY59XUO5FJKLVU5CYPO327DVSCBOOHVXYQKVNCYHNLATG7SBZV5WSRYPYV0M1BKL11XZQJ3MYB7FGGR7L4REIBRV37COJDK1RP4Q7N78A1Q19JLPMVNDSGENPPSR46AUTFCJ4V0XADYI8CQHQ9SMNK4XU3U5K6LR2SVSH12C5L33Q6LV9ANS653E16GG6CM4SE0BJI6X9RCBYFOORL5T1VM' where id=65; -update noar ti set v0='TBZ6JJNFFUZLUACSYXRNADLKFK2SJ7A2JH884CTUMLZY59XUO5FJKLVU5CYPO327DVSCBOOHVXYQKVNCYHNLATG7SBZV5WSRYPYV0M1BKL11XZQJ3MYB7FGGR7L4REIBRV37COJDK1RP4Q7N78A1Q19JLPMVNDSGENPPSR46AUTFCJ4V0XADYI8CQHQ9SMNK4XU3U5K6LR2SVSH12C5L33Q6LV9ANS653E16GG6CM4SE0BJI6X9RCBYFOORL5T1VM' where id=65; -update noar tt set v1='C9HM3XVOLWVUD2PE7328DNI8QNARV4FXQ2MYGY6MB16ZIOAZCEZIKJE6NBKQ7QTZIFM0CY7Q9D4YH7Z39L85L93PF89SYI430WI6UTGYDAPT9ZZ8XCMOZUZPUR9VX7VN4BWY4X1ATJ21K62GZ8T59K0BNS0QEMV2106WIGYCIPWR4E5YDID3SBXL20RS2CGP9S2KUMCYPQM7BJCTW2LL9WQORNATOGPNGVU5ISK8CPJOMM668P3KI6KMVEN291ZDX' where id=65; -update noar ti set v1='C9HM3XVOLWVUD2PE7328DNI8QNARV4FXQ2MYGY6MB16ZIOAZCEZIKJE6NBKQ7QTZIFM0CY7Q9D4YH7Z39L85L93PF89SYI430WI6UTGYDAPT9ZZ8XCMOZUZPUR9VX7VN4BWY4X1ATJ21K62GZ8T59K0BNS0QEMV2106WIGYCIPWR4E5YDID3SBXL20RS2CGP9S2KUMCYPQM7BJCTW2LL9WQORNATOGPNGVU5ISK8CPJOMM668P3KI6KMVEN291ZDX' where id=65; -update noar tt set v2='AB9CA313QSU2P6OZCZ7JP715YRCJT1AWY2L65I5SL3OXWP3IBT39UGK7PITXVVOAEP47R24FU1WXC9DW9J89WSEDE2V9YC0G8KNSVYMALVFMNTKHNMMYNAXKANUAA3DS1SJAWMANGF6UUPD9KFHI8XVB1EFQ8FJL87OWM6TR9ERXVQ8EBT9A4XXQ8OAEPVPQ6POWXUKFTT7D3ZM9ABLQ611MMT1ABVZVXOK8L4RMOYD883OOT10IW27R37CU78BHV' where id=65; -update noar ti set v2='AB9CA313QSU2P6OZCZ7JP715YRCJT1AWY2L65I5SL3OXWP3IBT39UGK7PITXVVOAEP47R24FU1WXC9DW9J89WSEDE2V9YC0G8KNSVYMALVFMNTKHNMMYNAXKANUAA3DS1SJAWMANGF6UUPD9KFHI8XVB1EFQ8FJL87OWM6TR9ERXVQ8EBT9A4XXQ8OAEPVPQ6POWXUKFTT7D3ZM9ABLQ611MMT1ABVZVXOK8L4RMOYD883OOT10IW27R37CU78BHV' where id=65; -update noar tt set v3='16S87X1BMKC4BRHCCI130S0NGSXN9DC2ZKD86C8450J5LCWLHMTBYA55BAXLYIQKY8AE5NGNR69WAQHURP6Q8690UPTSVV7NJS8DPUYSFMIBQI4FVPOKV5I109KZ1GK90BQVBF3IRSHFC92E8IRPYMR3D9GZ6M8TR8HTLZROF8A554AQOEZQO8Z1OA6Y3YLMG8G2D1MHIRSRDOA06ZP5S8OB1YZYB3IIKXQS3T3T94NKFIWWW2TK31GZVG027PGQZ' where id=65; -update noar ti set v3='16S87X1BMKC4BRHCCI130S0NGSXN9DC2ZKD86C8450J5LCWLHMTBYA55BAXLYIQKY8AE5NGNR69WAQHURP6Q8690UPTSVV7NJS8DPUYSFMIBQI4FVPOKV5I109KZ1GK90BQVBF3IRSHFC92E8IRPYMR3D9GZ6M8TR8HTLZROF8A554AQOEZQO8Z1OA6Y3YLMG8G2D1MHIRSRDOA06ZP5S8OB1YZYB3IIKXQS3T3T94NKFIWWW2TK31GZVG027PGQZ' where id=65; -update noar tt set v0='RZHB0X0RWNC1F7JAFKJJOVMY4KIW4OB1D7X9LRP3WN400ER5MUHK6BVPIMH9ZW3K74MT8JCEXIOI3MQ59Z5DPECLTM7JENDYCLSWWH0UX2DMOBSFFET0LBQO0EFP38AQ09FJQL62ZL8NZLCQ4IYO9SRDZMN8I0ISS43J2P2T4D2TJUAETUKI16UIWJTVJ0OCTN1MNJV1SQILIY5VL4ER48GM4AUXS5SHFP9CBDE0KNWFG0LF19RY1TWX0MQLT1F99' where id=66; -update noar ti set v0='RZHB0X0RWNC1F7JAFKJJOVMY4KIW4OB1D7X9LRP3WN400ER5MUHK6BVPIMH9ZW3K74MT8JCEXIOI3MQ59Z5DPECLTM7JENDYCLSWWH0UX2DMOBSFFET0LBQO0EFP38AQ09FJQL62ZL8NZLCQ4IYO9SRDZMN8I0ISS43J2P2T4D2TJUAETUKI16UIWJTVJ0OCTN1MNJV1SQILIY5VL4ER48GM4AUXS5SHFP9CBDE0KNWFG0LF19RY1TWX0MQLT1F99' where id=66; -update noar tt set v1='Y84RXR00CGIVCN7CLVXLKAG90IE913CE53WSJDPM2NSNZ6U7I2JM3YLTZKZKHHUNG8F3PELUEBLHTGLQAYWKJ7MJO4KRE11FCL6GUMCP52JUCHR2V23N3ZI01E6T69RB92TM92TXCHVIM4L2JMH3HTULVNNXG6FZT2Z7GE97TXELGE2RFGZ251G6UKVVN6YFI3RGOTNNSWQ08V7TA9SGXE8L9FMYG28JW5T11SC5FP1VQNCA91DK0N6PHS5YCI877' where id=66; -update noar ti set v1='Y84RXR00CGIVCN7CLVXLKAG90IE913CE53WSJDPM2NSNZ6U7I2JM3YLTZKZKHHUNG8F3PELUEBLHTGLQAYWKJ7MJO4KRE11FCL6GUMCP52JUCHR2V23N3ZI01E6T69RB92TM92TXCHVIM4L2JMH3HTULVNNXG6FZT2Z7GE97TXELGE2RFGZ251G6UKVVN6YFI3RGOTNNSWQ08V7TA9SGXE8L9FMYG28JW5T11SC5FP1VQNCA91DK0N6PHS5YCI877' where id=66; -update noar tt set v2='T2DJLNUNRQ8L67PKZJAMR7OZKZBA64875NT0OL1ATZ4AJPY296XJGNMNMXQV5OKPJCJ5FZL637GVDVK06ALA12G6VOOOXGVVV9ASVN2CG4HWKWVRIV02SV89XN6QSCVTZ01HKRS89HJRBPJZLEDLBTS4JF2DE7VZF872C83ZCD9KD3K2XTE9Y4ZTGD8TB2KX9HTEI0PRS62ZO445QWHLXCI72NFPQA63K77QN9DPQ8AC4O8JXIUX9WLSC4BREEJWZ' where id=66; -update noar ti set v2='T2DJLNUNRQ8L67PKZJAMR7OZKZBA64875NT0OL1ATZ4AJPY296XJGNMNMXQV5OKPJCJ5FZL637GVDVK06ALA12G6VOOOXGVVV9ASVN2CG4HWKWVRIV02SV89XN6QSCVTZ01HKRS89HJRBPJZLEDLBTS4JF2DE7VZF872C83ZCD9KD3K2XTE9Y4ZTGD8TB2KX9HTEI0PRS62ZO445QWHLXCI72NFPQA63K77QN9DPQ8AC4O8JXIUX9WLSC4BREEJWZ' where id=66; -update noar tt set v3='OJ21PWZ1P9AFTGF3E8RCJSQ0JEZJZIO2A6O9MZ0TH3FJ2GQS5ZB5KNDWI9EEEGAQPIQTUFP8V0SMUJJ1TDOS3DCGRRE3ZHXB8D37U1BYMPGATU1FM9Y5AJTS5SHBL1BMNA1FARSF317SMVF590AF5PBL27RLPSEQF6S1BY6228EBC60VWOAE6426KC8NB0NXPCPCSN5TM6FIMTIK5YCZSQBA1V1KZURMROCGUU6KVQ8ZJFBXL5LLOSJLN0L2M7XTX' where id=66; -update noar ti set v3='OJ21PWZ1P9AFTGF3E8RCJSQ0JEZJZIO2A6O9MZ0TH3FJ2GQS5ZB5KNDWI9EEEGAQPIQTUFP8V0SMUJJ1TDOS3DCGRRE3ZHXB8D37U1BYMPGATU1FM9Y5AJTS5SHBL1BMNA1FARSF317SMVF590AF5PBL27RLPSEQF6S1BY6228EBC60VWOAE6426KC8NB0NXPCPCSN5TM6FIMTIK5YCZSQBA1V1KZURMROCGUU6KVQ8ZJFBXL5LLOSJLN0L2M7XTX' where id=66; -update noar tt set v0='NQLQUQ92HOZ7R8CA72CBMD7427M960IBKN1VK4OXT2VS1OKRBVUKQYV2SK8FFJUZNG7SNWMC47QOMZXY6KVR8TR3B4JW8XS6B7BSUODTD758N1AEKZNHYWX5TLN44DJKPP0CY8XS7OBI25P7NVOZIA1303QQEZF43ENG7STQPL5ZH26ANXKD9SQAGCSQWBGSRNQSJDY53DEF1HT6798XVW4XVLW0AYJZ0KUGXJO94YJVYY4UJKIJ4FTEVC03JM0M7' where id=67; -update noar ti set v0='NQLQUQ92HOZ7R8CA72CBMD7427M960IBKN1VK4OXT2VS1OKRBVUKQYV2SK8FFJUZNG7SNWMC47QOMZXY6KVR8TR3B4JW8XS6B7BSUODTD758N1AEKZNHYWX5TLN44DJKPP0CY8XS7OBI25P7NVOZIA1303QQEZF43ENG7STQPL5ZH26ANXKD9SQAGCSQWBGSRNQSJDY53DEF1HT6798XVW4XVLW0AYJZ0KUGXJO94YJVYY4UJKIJ4FTEVC03JM0M7' where id=67; -update noar tt set v1='L4O1ZCQD2DXXFBP1M6CDV7B29H2SNGME8BL5EMSLFCJORX63VDHZ10K8RBA80RUPS8DGOVWGP5G296HMDS8NUZC3PQ5ZA8FH0ECEXWWCQCAVVU58PG0CB7R8G2L2UN7F0GKX4KMWOJZ02G367WAIV81GM1VNO2ECP1DBIIWRSCVALOSD3E7XQL49X7HD3MJ8PPZPTP3D4SG62V63UZZP0PGTJOGWHWI84Z0Q46SVUZTSVT515GDDZ3P6BVAJBY2OA' where id=67; -update noar ti set v1='L4O1ZCQD2DXXFBP1M6CDV7B29H2SNGME8BL5EMSLFCJORX63VDHZ10K8RBA80RUPS8DGOVWGP5G296HMDS8NUZC3PQ5ZA8FH0ECEXWWCQCAVVU58PG0CB7R8G2L2UN7F0GKX4KMWOJZ02G367WAIV81GM1VNO2ECP1DBIIWRSCVALOSD3E7XQL49X7HD3MJ8PPZPTP3D4SG62V63UZZP0PGTJOGWHWI84Z0Q46SVUZTSVT515GDDZ3P6BVAJBY2OA' where id=67; -update noar tt set v2='Y3ORAVZHZ2CKBO493F9OKE64G80RCXG5KNZFEFP1O3R516BU8EH6SP8GZ4S3WPZ6WIGGHDLNJQXINF3EIZSF9VJEOYDLN7ZFHJL32W9SBTBGBECXR5QCUZBB67G7O1PIT4RSHCJJRJMD8WXLEFV827SY4KBY6JN9EFRD2HPYPGK3VJE7AUMB8Q6HZ8GOIQGTJHP0LUJW8CYIVP7NRFBQZATBALQTNRM0ISS6BPG8QGS9K88N4XEMYSDE7QK7JO4V4' where id=67; -update noar ti set v2='Y3ORAVZHZ2CKBO493F9OKE64G80RCXG5KNZFEFP1O3R516BU8EH6SP8GZ4S3WPZ6WIGGHDLNJQXINF3EIZSF9VJEOYDLN7ZFHJL32W9SBTBGBECXR5QCUZBB67G7O1PIT4RSHCJJRJMD8WXLEFV827SY4KBY6JN9EFRD2HPYPGK3VJE7AUMB8Q6HZ8GOIQGTJHP0LUJW8CYIVP7NRFBQZATBALQTNRM0ISS6BPG8QGS9K88N4XEMYSDE7QK7JO4V4' where id=67; -update noar tt set v3='UIHTUUTLYHOSI338HKYJT9SZ1QQXGDRXFK1F3LM8GLUFMLMQF0360UD8ZLAGYKHMR9XZ6T4HJV1SWJE40DYN9JEVQPPMX6816TP9LGA0QCWALOLQ6KZUVSS79B20E2CN5GGWNWF9DQCZGWTXDNLVDNDPDPEZ4SEWZ2W8IF9HHBY5NL888EB0GQFPTW5HEU4GGZDAD9TG46YYGKO6R78N9O2JRKHK31AHT73V6E988961WMGZPAQJ1N35B0IHEFMBQ' where id=67; -update noar ti set v3='UIHTUUTLYHOSI338HKYJT9SZ1QQXGDRXFK1F3LM8GLUFMLMQF0360UD8ZLAGYKHMR9XZ6T4HJV1SWJE40DYN9JEVQPPMX6816TP9LGA0QCWALOLQ6KZUVSS79B20E2CN5GGWNWF9DQCZGWTXDNLVDNDPDPEZ4SEWZ2W8IF9HHBY5NL888EB0GQFPTW5HEU4GGZDAD9TG46YYGKO6R78N9O2JRKHK31AHT73V6E988961WMGZPAQJ1N35B0IHEFMBQ' where id=67; -update noar tt set v0='O0UQFUA1A9SBEGIMESDN1MD5QAPA5ZO7S6A3SD5EFD6MNDWHDMM78TA4X0I5YMKQ6CZMZP49LCDV2XDNJD7P3OXK199JRHAT6D7134CIPMWB1N3WITKR27X6LS7CUUK8FLYOABTRAZNL75FORY735UWG6HFHTWCJ4IBHX55G0J94F3NVA0L7Z6ZNS0EFF2EK767IN7PBAE2J3G9GLB886NL70HYWIW9XO02VPS8DB0HPHAZDL0AD1SSGBC0VLB3E9' where id=68; -update noar ti set v0='O0UQFUA1A9SBEGIMESDN1MD5QAPA5ZO7S6A3SD5EFD6MNDWHDMM78TA4X0I5YMKQ6CZMZP49LCDV2XDNJD7P3OXK199JRHAT6D7134CIPMWB1N3WITKR27X6LS7CUUK8FLYOABTRAZNL75FORY735UWG6HFHTWCJ4IBHX55G0J94F3NVA0L7Z6ZNS0EFF2EK767IN7PBAE2J3G9GLB886NL70HYWIW9XO02VPS8DB0HPHAZDL0AD1SSGBC0VLB3E9' where id=68; -update noar tt set v1='5LTCSHBTNBGPUU41BXA57FDZGA5PRRI9JBPX8130GUNTPSPJ9VM7Q20AOICZ4IZXW6MRCGF47W6T0J3BKD4UI2U21BINN9E1VB3MU7GBTBAODQZTMI8EZKEYVPE5ANUMS7MAPOW7H30D2PHE4XDNSPQ6C371EV3GJ7PK13YD3N1D4LIJ4R37RQ5R5HFT1C16OCAEZIVDKYPGXZ2ME7CDLY465I1OH93LQ0VHHF2WIFBG98N2LPYSOFTVZU8GH84CV' where id=68; -update noar ti set v1='5LTCSHBTNBGPUU41BXA57FDZGA5PRRI9JBPX8130GUNTPSPJ9VM7Q20AOICZ4IZXW6MRCGF47W6T0J3BKD4UI2U21BINN9E1VB3MU7GBTBAODQZTMI8EZKEYVPE5ANUMS7MAPOW7H30D2PHE4XDNSPQ6C371EV3GJ7PK13YD3N1D4LIJ4R37RQ5R5HFT1C16OCAEZIVDKYPGXZ2ME7CDLY465I1OH93LQ0VHHF2WIFBG98N2LPYSOFTVZU8GH84CV' where id=68; -update noar tt set v2='7U7H6UOAQF6DYKDBH6VS9N2IJXDFGH3CADHBUN0C2UH1KBSSRTFAFGIA9YV81OP2D2G7BGCX2VCGV72AZL8H6VZDSOIUQHO9OR23F086DZDA32982W3Z67A8KOTRGSW8WY1ATQO9M4W6T7X7LCJ2A2QO3TW4NTE5BPOOJL2VZV02MMVCGMZR30XSNMKTLUYR9WY14CXKNCDXQ5F6JYW0OTN9DBYFC9QXL5KK8QS2V84LDFX7I0NJ0V4NPEYFSYIQR' where id=68; -update noar ti set v2='7U7H6UOAQF6DYKDBH6VS9N2IJXDFGH3CADHBUN0C2UH1KBSSRTFAFGIA9YV81OP2D2G7BGCX2VCGV72AZL8H6VZDSOIUQHO9OR23F086DZDA32982W3Z67A8KOTRGSW8WY1ATQO9M4W6T7X7LCJ2A2QO3TW4NTE5BPOOJL2VZV02MMVCGMZR30XSNMKTLUYR9WY14CXKNCDXQ5F6JYW0OTN9DBYFC9QXL5KK8QS2V84LDFX7I0NJ0V4NPEYFSYIQR' where id=68; -update noar tt set v3='JDNPQQDCJE6LWW34038G31CBSUGT4QRTN0R2AMD0SEBD5YOK3MA1YKOR2QAEGKREZVWBDTHC0CFEUQAPGJBGH7FFAT7CAO6NAL4AG4XC7UI0SVHYN5TV2WCV0XNMHVYHN8IIFKMWGE7TWDHMNK5GZ8YHF8GA45WP64FIYL1Y8VDRB7FOLZZRKNWZIEWNN4KF4O41KLATOID4WCRPDKLDR1BS5SDMXREX3EL4JMNIJW79BJKEKQNDQA1J65IOUEWW1' where id=68; -update noar ti set v3='JDNPQQDCJE6LWW34038G31CBSUGT4QRTN0R2AMD0SEBD5YOK3MA1YKOR2QAEGKREZVWBDTHC0CFEUQAPGJBGH7FFAT7CAO6NAL4AG4XC7UI0SVHYN5TV2WCV0XNMHVYHN8IIFKMWGE7TWDHMNK5GZ8YHF8GA45WP64FIYL1Y8VDRB7FOLZZRKNWZIEWNN4KF4O41KLATOID4WCRPDKLDR1BS5SDMXREX3EL4JMNIJW79BJKEKQNDQA1J65IOUEWW1' where id=68; -update noar tt set v0='CWBTRY3CREKBD0E8A6PVNRT1SJHA1EPS47GWEZ911SF6PZCP0R6D11O0VQFLXN1Z3QJ30T0L5SWLIB58DBYZ2LMI9K4PNWWL15WZ7RXMB34MCXXSBV3A9ML79QU4A5QA13MO8OX17KR39UZWXRYQPER9AQULFUDBSJF8H6AUDCSP0LKLX2IQZ13YWNWHLS47ETQHUWU6BGRQIQUQN50LDVZWLMUJRZB4VILPO5HGJKQ9R9OD7SYZ8DF2J82GN3DHX' where id=69; -update noar ti set v0='CWBTRY3CREKBD0E8A6PVNRT1SJHA1EPS47GWEZ911SF6PZCP0R6D11O0VQFLXN1Z3QJ30T0L5SWLIB58DBYZ2LMI9K4PNWWL15WZ7RXMB34MCXXSBV3A9ML79QU4A5QA13MO8OX17KR39UZWXRYQPER9AQULFUDBSJF8H6AUDCSP0LKLX2IQZ13YWNWHLS47ETQHUWU6BGRQIQUQN50LDVZWLMUJRZB4VILPO5HGJKQ9R9OD7SYZ8DF2J82GN3DHX' where id=69; -update noar tt set v1='9KPQEQ1AJ93X9M12FUDH6140V1L3TYIFT27QU4QRII81VE6TKF4LVYJV8F05G38ADH6Q42G6UL0PZXO2Y2CJM2P6N8FJ2XZBAWK0MGFXYT88466EVQ3SD7LJXC879V813NQ01HQ324TDPZABXQJH3HRW9MZE4DOIX37JCBP2Z0RHKHWTC7FGWVFSN1P1IR96W9T7OE6IKIT89JLBX4PUUUUQUR258XQMZ9ZV3JOO5IB8X9F3QPBPFGIZXZH7M1D5E' where id=69; -update noar ti set v1='9KPQEQ1AJ93X9M12FUDH6140V1L3TYIFT27QU4QRII81VE6TKF4LVYJV8F05G38ADH6Q42G6UL0PZXO2Y2CJM2P6N8FJ2XZBAWK0MGFXYT88466EVQ3SD7LJXC879V813NQ01HQ324TDPZABXQJH3HRW9MZE4DOIX37JCBP2Z0RHKHWTC7FGWVFSN1P1IR96W9T7OE6IKIT89JLBX4PUUUUQUR258XQMZ9ZV3JOO5IB8X9F3QPBPFGIZXZH7M1D5E' where id=69; -update noar tt set v2='WZ283O0C7H4BW4981I23P8ZLAMAKQ2DGGARBGV5HVC3M4SV0KZW87K8XXIJKQJN2ELB6OFF7YKG5PTB0DWWZNIE72BPQLFKZWN0Z2U0YUUPKBS2R6QRGNRUXU0H7RXHVNNSD53NJ46PJ1CZ8A8JB23R3ZOLVOU6PUVC0SNL2NSVJJ2N0EK3CKPT4FADU1PN61U2VQIFM9VTVEXX3Q7GFLINQXNHNB53VJO3LZEV8TY5LJJ1DGTDNKWHULWUE3UGBS' where id=69; -update noar ti set v2='WZ283O0C7H4BW4981I23P8ZLAMAKQ2DGGARBGV5HVC3M4SV0KZW87K8XXIJKQJN2ELB6OFF7YKG5PTB0DWWZNIE72BPQLFKZWN0Z2U0YUUPKBS2R6QRGNRUXU0H7RXHVNNSD53NJ46PJ1CZ8A8JB23R3ZOLVOU6PUVC0SNL2NSVJJ2N0EK3CKPT4FADU1PN61U2VQIFM9VTVEXX3Q7GFLINQXNHNB53VJO3LZEV8TY5LJJ1DGTDNKWHULWUE3UGBS' where id=69; -update noar tt set v3='1TTQY4D3DHY1P21FNR3CNXLQQIVOY6WUEZEJ0QIUJOU3BLMVGUNGFJJP7XIN7L1YZ4MBZAIDQHURMY4LTKG6MKS819UIZ3PJH20084A0VTQLS79V4CQXQ7UH4R9R1L56ZE38HYG5TJJ5KHTRMOJK7Q5JXSWXH44XUUASL7DHZX0QQ0MJ6E602DSGL36FLGT6WH406T4CLPMW5XM02V1K4O7YV7GCVXI5K8ZD2UECR1HLUCOC87ZKT0MC2AF6K382Z' where id=69; -update noar ti set v3='1TTQY4D3DHY1P21FNR3CNXLQQIVOY6WUEZEJ0QIUJOU3BLMVGUNGFJJP7XIN7L1YZ4MBZAIDQHURMY4LTKG6MKS819UIZ3PJH20084A0VTQLS79V4CQXQ7UH4R9R1L56ZE38HYG5TJJ5KHTRMOJK7Q5JXSWXH44XUUASL7DHZX0QQ0MJ6E602DSGL36FLGT6WH406T4CLPMW5XM02V1K4O7YV7GCVXI5K8ZD2UECR1HLUCOC87ZKT0MC2AF6K382Z' where id=69; -update noar tt set v0='L8CTJ4X3CQ3TNN312LONYIHMPRJ9QSTCAVW26HK4LWXFOH4EWPDZ1QGP2H89ESAW1W4WVH7J0KT7FGJ5X5LGZOM3A8BKAXL7H1HBZ907LNRGR2UITF15GIYN8KEFD9UW41E3WYQBZXNMMGE2NRCFLOA3KGVPZ87ERE01C268CGBPY5VOPKY6JME8ENCV8UT8PYGEM39C0RRUIVXCK1JK3AC39KXFHYRMUA420WI24D3F68U2U3IJQBEL2YHC9TN4W' where id=70; -update noar ti set v0='L8CTJ4X3CQ3TNN312LONYIHMPRJ9QSTCAVW26HK4LWXFOH4EWPDZ1QGP2H89ESAW1W4WVH7J0KT7FGJ5X5LGZOM3A8BKAXL7H1HBZ907LNRGR2UITF15GIYN8KEFD9UW41E3WYQBZXNMMGE2NRCFLOA3KGVPZ87ERE01C268CGBPY5VOPKY6JME8ENCV8UT8PYGEM39C0RRUIVXCK1JK3AC39KXFHYRMUA420WI24D3F68U2U3IJQBEL2YHC9TN4W' where id=70; -update noar tt set v1='WS6AEDXCXTALDXH2ETPHA58G21M6WVU4D47B5DRDQB98BKKMK9IX2D6CBHHMQXQZH0MDNI1GLRRJYL1IQ526MENRF3IFDIV3WVIR4ZE6KLVENRCULHPSMHD6LDSYJAELSOPWPQFLLJNI7C7DUDGD1G5YZEKSHSFT5QWN4IL8RNJLON2NXY40BKYWG40UCN6P7FS8GJJ0IR717YAOA980AGDEXFC2ANFKYSMT2S013HBE8CDTVWGXCACAHBIYJQYYA' where id=70; -update noar ti set v1='WS6AEDXCXTALDXH2ETPHA58G21M6WVU4D47B5DRDQB98BKKMK9IX2D6CBHHMQXQZH0MDNI1GLRRJYL1IQ526MENRF3IFDIV3WVIR4ZE6KLVENRCULHPSMHD6LDSYJAELSOPWPQFLLJNI7C7DUDGD1G5YZEKSHSFT5QWN4IL8RNJLON2NXY40BKYWG40UCN6P7FS8GJJ0IR717YAOA980AGDEXFC2ANFKYSMT2S013HBE8CDTVWGXCACAHBIYJQYYA' where id=70; -update noar tt set v2='Z83PMP1JR5548HLUP4A4OU6EKVP30L1Q7K26QS9J6RW7J909G2I56M3UAXPMX3UELF9OUNDM0OCPN3M2ONTBNON6UJ0OLS0LKW01XENZLR2J24Z5WG7GOFSLQ6L5T3HQKGZKKPG44TR1J5YND1EZE5KNR39PBPDG4ZY38O8NWHIE73EW67YP15C2LJJIVFXZQQ0W6DDCV5W9FKP7RZF55DER2B6X1B9QN3QZ66A1HIWSALPEF1ZYIL9H140FK0X1K' where id=70; -update noar ti set v2='Z83PMP1JR5548HLUP4A4OU6EKVP30L1Q7K26QS9J6RW7J909G2I56M3UAXPMX3UELF9OUNDM0OCPN3M2ONTBNON6UJ0OLS0LKW01XENZLR2J24Z5WG7GOFSLQ6L5T3HQKGZKKPG44TR1J5YND1EZE5KNR39PBPDG4ZY38O8NWHIE73EW67YP15C2LJJIVFXZQQ0W6DDCV5W9FKP7RZF55DER2B6X1B9QN3QZ66A1HIWSALPEF1ZYIL9H140FK0X1K' where id=70; -update noar tt set v3='3XLTDHJ440OZLMUBYG84ICLXZ9YSWHWWX8E6680O5KNU80DA9FE7WX6IKP0D7W3LTNU1Q4AWH1MXRDM54LE878NJJUWL1ZA89ZGK15Z4W7XWS5ML4CXJTMZKMAWMJ5VBUN3MI3USBHHMMMCGW5C2IX3WGAN87RRSXCK6ZI9AUGRC8A66PDL9MJ2S0UVYHQRXHJNDE1K4R2WIVMJS7YJMYUAMJDL7401QSKWVXZH2U56B2XBEM2BQ7HH95PGY4ISJP' where id=70; -update noar ti set v3='3XLTDHJ440OZLMUBYG84ICLXZ9YSWHWWX8E6680O5KNU80DA9FE7WX6IKP0D7W3LTNU1Q4AWH1MXRDM54LE878NJJUWL1ZA89ZGK15Z4W7XWS5ML4CXJTMZKMAWMJ5VBUN3MI3USBHHMMMCGW5C2IX3WGAN87RRSXCK6ZI9AUGRC8A66PDL9MJ2S0UVYHQRXHJNDE1K4R2WIVMJS7YJMYUAMJDL7401QSKWVXZH2U56B2XBEM2BQ7HH95PGY4ISJP' where id=70; -update noar tt set v0='PAQOHGNNE5EV7QDDR0EKMB9NKIEPRJFWPRBN2A4BU0WSPGZBHM4UOQNX0HB7RF3C1CNACXVEFABO1F0JJ5W8B34MV5FBTCSH7DC6FRXWIWMTS46R349YJ8TCVBMU2IM644UL0OYGPTV607GK5D3HZE8J066OJ4W0T65GZHQ58OWUAQG2JD4MP4R87O280JS1ZRXR6L6BX6HETQO63M43JWJ1MXMEDX0KXGFFQ4BQTTVVYGZ9PEW3STAXG69H3YCDE' where id=71; -update noar ti set v0='PAQOHGNNE5EV7QDDR0EKMB9NKIEPRJFWPRBN2A4BU0WSPGZBHM4UOQNX0HB7RF3C1CNACXVEFABO1F0JJ5W8B34MV5FBTCSH7DC6FRXWIWMTS46R349YJ8TCVBMU2IM644UL0OYGPTV607GK5D3HZE8J066OJ4W0T65GZHQ58OWUAQG2JD4MP4R87O280JS1ZRXR6L6BX6HETQO63M43JWJ1MXMEDX0KXGFFQ4BQTTVVYGZ9PEW3STAXG69H3YCDE' where id=71; -update noar tt set v1='O6BYLZL1SQUJLH6GC404WDYA8ULDGUMAV3UD22TEH4CRWEH31J5YUXZBNTQHEHRGF8R6LCJ6CKYBMSMTF0F6CBK5Z96WMZ6BZAF4H3SYTI2321X7QVRR0UWXPID501I9ROJ2YUGZU81PLYLXRB0FEVKCAA4QQTOXOMGUWY51WLRBR44V1R86BUYC4GEIQQVHNIDYKMUE75QWO8YEX37S7G2K3RHY35GXZHGHW602E3913SZCFDALS1597S6FIMSI5' where id=71; -update noar ti set v1='O6BYLZL1SQUJLH6GC404WDYA8ULDGUMAV3UD22TEH4CRWEH31J5YUXZBNTQHEHRGF8R6LCJ6CKYBMSMTF0F6CBK5Z96WMZ6BZAF4H3SYTI2321X7QVRR0UWXPID501I9ROJ2YUGZU81PLYLXRB0FEVKCAA4QQTOXOMGUWY51WLRBR44V1R86BUYC4GEIQQVHNIDYKMUE75QWO8YEX37S7G2K3RHY35GXZHGHW602E3913SZCFDALS1597S6FIMSI5' where id=71; -update noar tt set v2='A3GIY8NITTWHH2L3N0MSGF0KWAWHI3M03XW96F06XDL7WKMYLC13QOGXHF2JZL6GX26103D9NZ52L5MC1HE5WPW354646YLDQN4D1WRU5XGG6D5AULWK17LLQPQLDG3647HW5V7QVPXPHLJHKENXERT3U86XKZAKCG7W596369TEVOZ1NC9BL9SYAX7UZQPOLAPQ2KTDQZH21883OEK5ED7TW4AT5XEE6R1H4B3RL1CFID5F855G5MQPIG83XQOWV' where id=71; -update noar ti set v2='A3GIY8NITTWHH2L3N0MSGF0KWAWHI3M03XW96F06XDL7WKMYLC13QOGXHF2JZL6GX26103D9NZ52L5MC1HE5WPW354646YLDQN4D1WRU5XGG6D5AULWK17LLQPQLDG3647HW5V7QVPXPHLJHKENXERT3U86XKZAKCG7W596369TEVOZ1NC9BL9SYAX7UZQPOLAPQ2KTDQZH21883OEK5ED7TW4AT5XEE6R1H4B3RL1CFID5F855G5MQPIG83XQOWV' where id=71; -update noar tt set v3='PPX1NYCY4YLL1DWXKL67Y7S3AMQMWWYV5LWRZXIH5X2LYLVJP0RYSOBY2FUGB6EJ0WQDY52EHEGS5HTWS2P1EVIM4FIU227YUO1SF4NY3LYV9GMU4E74870A1HD86ZHJJN068LVVIWHZJXM1BBQEFLYTN6T7O265LDLCB846F84J1WOVGR918ZHD41QP60TTEFU9ZAYGTDNG6DD3J6P7RV2A78CWQCHX41FL5J9RZ5ZAZ55K5EYQN8CZ6DNPEUA2U' where id=71; -update noar ti set v3='PPX1NYCY4YLL1DWXKL67Y7S3AMQMWWYV5LWRZXIH5X2LYLVJP0RYSOBY2FUGB6EJ0WQDY52EHEGS5HTWS2P1EVIM4FIU227YUO1SF4NY3LYV9GMU4E74870A1HD86ZHJJN068LVVIWHZJXM1BBQEFLYTN6T7O265LDLCB846F84J1WOVGR918ZHD41QP60TTEFU9ZAYGTDNG6DD3J6P7RV2A78CWQCHX41FL5J9RZ5ZAZ55K5EYQN8CZ6DNPEUA2U' where id=71; -update noar tt set v0='ZS6ZZKQYHKIX6DIOVRMVY0VFUG3BGQQIGUMYOVTFNRZY0WN8YF7O6RUYAH5O3ZG33H2Z65FQQGZQE1RWKFQD79CH41SNVCREUSET3IZ1F958FHTPNWBCK0M8YM0309ACJXP8XLSCMDA62D98GZQQJ68COODW35A9EUESL0S8HGZ7TJX0D12SNCDNTPMVQHLLFOV404IRU8KEFCK71JWV77C8XP3RERERLV2U95N6P19Z2HZHWKZ1BWXK548HM89KS' where id=72; -update noar ti set v0='ZS6ZZKQYHKIX6DIOVRMVY0VFUG3BGQQIGUMYOVTFNRZY0WN8YF7O6RUYAH5O3ZG33H2Z65FQQGZQE1RWKFQD79CH41SNVCREUSET3IZ1F958FHTPNWBCK0M8YM0309ACJXP8XLSCMDA62D98GZQQJ68COODW35A9EUESL0S8HGZ7TJX0D12SNCDNTPMVQHLLFOV404IRU8KEFCK71JWV77C8XP3RERERLV2U95N6P19Z2HZHWKZ1BWXK548HM89KS' where id=72; -update noar tt set v1='8506R6MY8CHZK93TCT1WQHYWPSQOEF6U0KDMF34TRTE3E4LGKF1OO48PAW2WEWMIYM2PVX4PSVAL46KI0YFC85AXQL6YV6WDBU4193C83H6NY3W27KTB3E3504ZTRCGIVHOMY41X91JCCRG99PZBW6ZQ55IL2X062NZVFEGV9GWY73T790FAGXBGKX9D1F49OW2SLICLGZ2O9VNX61YONO73JQUQWGPPOY1HDFWOLVNXRGWHLWRWGQ5AAMZQIT17U' where id=72; -update noar ti set v1='8506R6MY8CHZK93TCT1WQHYWPSQOEF6U0KDMF34TRTE3E4LGKF1OO48PAW2WEWMIYM2PVX4PSVAL46KI0YFC85AXQL6YV6WDBU4193C83H6NY3W27KTB3E3504ZTRCGIVHOMY41X91JCCRG99PZBW6ZQ55IL2X062NZVFEGV9GWY73T790FAGXBGKX9D1F49OW2SLICLGZ2O9VNX61YONO73JQUQWGPPOY1HDFWOLVNXRGWHLWRWGQ5AAMZQIT17U' where id=72; -update noar tt set v2='XUNKIDUBM6FBMBL0XZCLA52WRD2IGF993WZY678TD8ROLU3T32M3B4R867IKX1DZ614N4YF92YOVPK0UPTMHJPR56HMKUOOXEGV9FGNA2SATAHQH2ME0VFZ7J92G14E9QP39VUJA755XVJJPY556N4I9595JMV8AT7ZBS4R02MWXDLZ0B9WGT25FKQH1I851FBCE5IA7OD8LCUVBR5NB58ZCUBF7BAFZ1NIKUCVYU62M08HEF2TH3DSFPD6UDYURE' where id=72; -update noar ti set v2='XUNKIDUBM6FBMBL0XZCLA52WRD2IGF993WZY678TD8ROLU3T32M3B4R867IKX1DZ614N4YF92YOVPK0UPTMHJPR56HMKUOOXEGV9FGNA2SATAHQH2ME0VFZ7J92G14E9QP39VUJA755XVJJPY556N4I9595JMV8AT7ZBS4R02MWXDLZ0B9WGT25FKQH1I851FBCE5IA7OD8LCUVBR5NB58ZCUBF7BAFZ1NIKUCVYU62M08HEF2TH3DSFPD6UDYURE' where id=72; -update noar tt set v3='P32HEL3LFISXRKR2F7E9CUB5F0F3JPLVR6XPBWMYCEXXTDJHI96037TFU1EKAWV9BRAMJUCMUG4W6PHZF8JOXZ5S3OD7R41ALZ77UB09DB1UYF4L5L4AT5O79UHJX5L0PSP651N11UREL7ZH9QFT3P4ODYBW1DL191AOIBWN42UM82BNSQ56RM73M4AM0UYYKOIACOKHXG4IO93M64CIWVZHF8AC6LKEVV4T9M4WNOMEJE5JK7WNJ0A45E5WFAY72' where id=72; -update noar ti set v3='P32HEL3LFISXRKR2F7E9CUB5F0F3JPLVR6XPBWMYCEXXTDJHI96037TFU1EKAWV9BRAMJUCMUG4W6PHZF8JOXZ5S3OD7R41ALZ77UB09DB1UYF4L5L4AT5O79UHJX5L0PSP651N11UREL7ZH9QFT3P4ODYBW1DL191AOIBWN42UM82BNSQ56RM73M4AM0UYYKOIACOKHXG4IO93M64CIWVZHF8AC6LKEVV4T9M4WNOMEJE5JK7WNJ0A45E5WFAY72' where id=72; -update noar tt set v0='G0T0FR4FO5EKFHMU4YY6VYVR58QQX0TK7885LRVIFIR8A6L2BQYBZME9DBORU1SX21VL80EWLBP3262H7YS7WQTTMH6T5DRMJTQJ591JF6375DQ6KL6ACATL954D4WQC60UIENOKDMHEVYI2LUJNMQYHGYY6L0EF1DHSP1UHAJJDUM16DB0CNMRJ5TKZJA4WDKLKHRV661S1FXW8VQZ9Z4ZLBBNRNG64EWJFTWQ8YLC2LCYPD0WLWBE9SADQGJOI3' where id=73; -update noar ti set v0='G0T0FR4FO5EKFHMU4YY6VYVR58QQX0TK7885LRVIFIR8A6L2BQYBZME9DBORU1SX21VL80EWLBP3262H7YS7WQTTMH6T5DRMJTQJ591JF6375DQ6KL6ACATL954D4WQC60UIENOKDMHEVYI2LUJNMQYHGYY6L0EF1DHSP1UHAJJDUM16DB0CNMRJ5TKZJA4WDKLKHRV661S1FXW8VQZ9Z4ZLBBNRNG64EWJFTWQ8YLC2LCYPD0WLWBE9SADQGJOI3' where id=73; -update noar tt set v1='BDL0CWN58ENUO49ARMZWBHJQTNLAYDOLDEKL2KO0M2TCMJS6A09238YQXNBW9YK4GJZ1CCXQTHBSL4RYARLBKVJDDH5YC4RANFAO7XOXQWLLVFEH6R92OXHUAJHT4Q3S3LH6K2AY4NPGBIPBVM0JIHBIWLT008GBB2Q7WFXBT8FVEXR1GT9LLUNHRGF6VOSPJVMUFJM19BFHLX1A9K5MC98Q6BD7LV7DILJOAAR3BP75HS6AEGM5UUQXPLVSKDAEZ' where id=73; -update noar ti set v1='BDL0CWN58ENUO49ARMZWBHJQTNLAYDOLDEKL2KO0M2TCMJS6A09238YQXNBW9YK4GJZ1CCXQTHBSL4RYARLBKVJDDH5YC4RANFAO7XOXQWLLVFEH6R92OXHUAJHT4Q3S3LH6K2AY4NPGBIPBVM0JIHBIWLT008GBB2Q7WFXBT8FVEXR1GT9LLUNHRGF6VOSPJVMUFJM19BFHLX1A9K5MC98Q6BD7LV7DILJOAAR3BP75HS6AEGM5UUQXPLVSKDAEZ' where id=73; -update noar tt set v2='XQOUXXHLEQQG9CHP01JN95K7MXJXE6Y4V199FVDFYXXCGQ70EZMADR6RVRG7H02OJNZXBS1JCEFA9TBH9ASUGIWQP06JN3WXPV2ZK98ZARIF8D91XBC3BWSOEFN9K12JD1GXXTJT0QHS9CUK480DSS3OAIIFS4E1XZO2FCHHKE5CC3MRF1O0UBK9BF178OMS462ZK4ZY9JEVUBY0IGSUTL9MFVCQI2DRUB9Q3JDE6VU331476SSHQ86AA0OJ0OT2M' where id=73; -update noar ti set v2='XQOUXXHLEQQG9CHP01JN95K7MXJXE6Y4V199FVDFYXXCGQ70EZMADR6RVRG7H02OJNZXBS1JCEFA9TBH9ASUGIWQP06JN3WXPV2ZK98ZARIF8D91XBC3BWSOEFN9K12JD1GXXTJT0QHS9CUK480DSS3OAIIFS4E1XZO2FCHHKE5CC3MRF1O0UBK9BF178OMS462ZK4ZY9JEVUBY0IGSUTL9MFVCQI2DRUB9Q3JDE6VU331476SSHQ86AA0OJ0OT2M' where id=73; -update noar tt set v3='N2EBMXJ8H4GS6VQS7OGOPJ6MTZO86T0DBC3R8EHMC86876QGVTI9IPBEQ4V0W713F1LL8KIDUR5T8C2CTCT9NKEK1D67WJKFCZDY6Z999S5R0OZNBADWP5FBT202C6HI3OCID9M722Z58Z7O3OBM1ERYZSP1BXXQZ3DPAOK9T5UM3E48XR0VOJQXED54K92AJBLJR93OIF25LNA2JS533X11DGRREZP0V049MOI1ICMWE6UVRI64UQ3ME1QFKRLP4' where id=73; -update noar ti set v3='N2EBMXJ8H4GS6VQS7OGOPJ6MTZO86T0DBC3R8EHMC86876QGVTI9IPBEQ4V0W713F1LL8KIDUR5T8C2CTCT9NKEK1D67WJKFCZDY6Z999S5R0OZNBADWP5FBT202C6HI3OCID9M722Z58Z7O3OBM1ERYZSP1BXXQZ3DPAOK9T5UM3E48XR0VOJQXED54K92AJBLJR93OIF25LNA2JS533X11DGRREZP0V049MOI1ICMWE6UVRI64UQ3ME1QFKRLP4' where id=73; -update noar tt set v0='UC7DCO0XQ183ARVILDD2MEGELDY305QRRDFIL606PRF5AGCTFSQRN73UI0GQ12WUBHI3QOTV6XGRULSLJD7J0TXKLWTRZFW65SWNVR8RTWMT79PM0SW50D1UNZWB5TVM97ZFRBL04RDFJG5QRQM1SCPEUMCMFW9FW3UNHVXN09QUMYSWEZZN6YX12HSCO4KH13O85ZSNKZAT76PQ4NND0R69WC20907D568ZCR7GJP9U7P9737S57VIS2Y56FH4IP' where id=74; -update noar ti set v0='UC7DCO0XQ183ARVILDD2MEGELDY305QRRDFIL606PRF5AGCTFSQRN73UI0GQ12WUBHI3QOTV6XGRULSLJD7J0TXKLWTRZFW65SWNVR8RTWMT79PM0SW50D1UNZWB5TVM97ZFRBL04RDFJG5QRQM1SCPEUMCMFW9FW3UNHVXN09QUMYSWEZZN6YX12HSCO4KH13O85ZSNKZAT76PQ4NND0R69WC20907D568ZCR7GJP9U7P9737S57VIS2Y56FH4IP' where id=74; -update noar tt set v1='MK0S7UJQBCXTFKE0P5G0PDCZGMQ4HO7270522MIH4QXLQ2BIEWJAHIT1EKQ9R51MJQKFGSU882POH2RKF09S8JXP5HVQ7W1RT0PZ27F5TFWGVCSAL3TAUGNBFSX9HZXUR7R5J9FSR1EZPY7C0MYA96AXKHQXMZLUBH6FL34C8SF1S7IOZDOQAUJ9I8BVC2W0R8YJ3QLQWW7X434KFAK4916BSJ66ALVN25E57DDYNLVQPC28V1ZE4JU5BMOEJ31TJ' where id=74; -update noar ti set v1='MK0S7UJQBCXTFKE0P5G0PDCZGMQ4HO7270522MIH4QXLQ2BIEWJAHIT1EKQ9R51MJQKFGSU882POH2RKF09S8JXP5HVQ7W1RT0PZ27F5TFWGVCSAL3TAUGNBFSX9HZXUR7R5J9FSR1EZPY7C0MYA96AXKHQXMZLUBH6FL34C8SF1S7IOZDOQAUJ9I8BVC2W0R8YJ3QLQWW7X434KFAK4916BSJ66ALVN25E57DDYNLVQPC28V1ZE4JU5BMOEJ31TJ' where id=74; -update noar tt set v2='A2HDH0KVYC2HLBA46L6X7FBGBKZ7EEY86GFPBRWQDWES4YQNU9TV4MC30CDT8JA49ONLDUYAW3N0P9ZZDOLWDFCQV6HY9VZEJ4T3A7NSF02TJA8OW03NO2VLE4K7ZE2PTVFFZK77NUZAG7LOHU5OZAT8605F75TWW6RZNYL21GIWABGEW7XRF2BUEZPDY220BFAZH83GW3DMSSNAJIMG7O84MJSECGH3AFU59OLLMS7D4KYRW2HZI62QP2AQX2RPU' where id=74; -update noar ti set v2='A2HDH0KVYC2HLBA46L6X7FBGBKZ7EEY86GFPBRWQDWES4YQNU9TV4MC30CDT8JA49ONLDUYAW3N0P9ZZDOLWDFCQV6HY9VZEJ4T3A7NSF02TJA8OW03NO2VLE4K7ZE2PTVFFZK77NUZAG7LOHU5OZAT8605F75TWW6RZNYL21GIWABGEW7XRF2BUEZPDY220BFAZH83GW3DMSSNAJIMG7O84MJSECGH3AFU59OLLMS7D4KYRW2HZI62QP2AQX2RPU' where id=74; -update noar tt set v3='ILB9EXDP5M5R2C9X1BVDO92DZO4I79RR2PJ7UYC0M1FV5W5Q84JT0BKXZGQYXQ6M37INZZVBOTW5XBRE139RKHUG35ZOT51ITZANBYZLL0FD4W5SNII32UJ1KJXMI56UFC0JWKCAHH3KS73MO2NI6EPR5ELBF6TEHJ66Y6LR72T1GHRMQE4TCEBWXVI8AXPSZ0D0Q4K3OR4ZI8QGY25H2S3YG5NXOR16SBBAG5AM8LE7XULRIBDIBRSSUO4F4JPKK' where id=74; -update noar ti set v3='ILB9EXDP5M5R2C9X1BVDO92DZO4I79RR2PJ7UYC0M1FV5W5Q84JT0BKXZGQYXQ6M37INZZVBOTW5XBRE139RKHUG35ZOT51ITZANBYZLL0FD4W5SNII32UJ1KJXMI56UFC0JWKCAHH3KS73MO2NI6EPR5ELBF6TEHJ66Y6LR72T1GHRMQE4TCEBWXVI8AXPSZ0D0Q4K3OR4ZI8QGY25H2S3YG5NXOR16SBBAG5AM8LE7XULRIBDIBRSSUO4F4JPKK' where id=74; -update noar tt set v0='AQE73HB3XBAN7KJEKJQLGMIKUMDX0M97EUOJ8LCWDJB0HWDQFU8VK2TZVSPIY5JH8OVD44V2YJSVDVS814VH19ZBPUJ46TXV4WYOGLG4B8RD490MVTDA50UO1X41ZXOH9TUOSZIXK8CEQV3G6JGKPI1BKZYKY8NNL4AT91EZE9ADUTZ8VLZHIJ618URP79GDDEMUGFR5OUAX1YOLIHX6JX0BIY2KFNU996UEQLRLGP171WL6X0EV7RUZGOGMZ5P0L' where id=75; -update noar ti set v0='AQE73HB3XBAN7KJEKJQLGMIKUMDX0M97EUOJ8LCWDJB0HWDQFU8VK2TZVSPIY5JH8OVD44V2YJSVDVS814VH19ZBPUJ46TXV4WYOGLG4B8RD490MVTDA50UO1X41ZXOH9TUOSZIXK8CEQV3G6JGKPI1BKZYKY8NNL4AT91EZE9ADUTZ8VLZHIJ618URP79GDDEMUGFR5OUAX1YOLIHX6JX0BIY2KFNU996UEQLRLGP171WL6X0EV7RUZGOGMZ5P0L' where id=75; -update noar tt set v1='TBFOD59SMZJTYZ4J4REYTWVE6V2OSBR3WZK9UU9JFMWCIJY97FFUC2KYB9GKJXYB5Z6LVNFWOQ7AJGEUUJXFJ8MXLW5G6EPNA52YU9ZUX5FWHYKFC9MJFVH63H726C6KFMBME327TY42IK09TKQID6XG2BMVMEBH0I0ESGS1IDT6HOPE8T02LUE5KDTP6QGI68YIHLW7T4K9XYHDOLS5ZDDPFDNOKRV3SQYF7YHFIK7PYY19JUSHNDJSXQ2BZJFYZ' where id=75; -update noar ti set v1='TBFOD59SMZJTYZ4J4REYTWVE6V2OSBR3WZK9UU9JFMWCIJY97FFUC2KYB9GKJXYB5Z6LVNFWOQ7AJGEUUJXFJ8MXLW5G6EPNA52YU9ZUX5FWHYKFC9MJFVH63H726C6KFMBME327TY42IK09TKQID6XG2BMVMEBH0I0ESGS1IDT6HOPE8T02LUE5KDTP6QGI68YIHLW7T4K9XYHDOLS5ZDDPFDNOKRV3SQYF7YHFIK7PYY19JUSHNDJSXQ2BZJFYZ' where id=75; -update noar tt set v2='NFQ8PR01T9ZZIXON8YYZHTTUN9VPMCIJ1DPSQHK25QKIJ94QIQWPN4A20NTZAUQTNYRKV596BNMW8DDCAT1Q512VJVIFPY0NMP298549EC31KMZ8DZ7PVNT19ZHUE30ECDJLGERS55RFMJWRI2LYKMTVFY0OOKJBCZX9C7QWJGUENL97SXO0L3R4XF4VFSUWNS2N99DM47EAAKOTTIO062VN32EK4JZG4ANQNQBTULABCRXOX0IFL8QV34J1WU73N' where id=75; -update noar ti set v2='NFQ8PR01T9ZZIXON8YYZHTTUN9VPMCIJ1DPSQHK25QKIJ94QIQWPN4A20NTZAUQTNYRKV596BNMW8DDCAT1Q512VJVIFPY0NMP298549EC31KMZ8DZ7PVNT19ZHUE30ECDJLGERS55RFMJWRI2LYKMTVFY0OOKJBCZX9C7QWJGUENL97SXO0L3R4XF4VFSUWNS2N99DM47EAAKOTTIO062VN32EK4JZG4ANQNQBTULABCRXOX0IFL8QV34J1WU73N' where id=75; -update noar tt set v3='TJIA711030MVUDPFEHPVTAA8GYZ1CRBFIB1AGX572645FUSSVZ2QJVOPLZL5QFHXYXLO3YMR7LBW8VWSR4A38U4VB0LQP795GK5VESGNPQ8KZBN1D4FL0JJNOLH7FKV648R80RLT3EIJKY668T26CE2TKCHP6HC4R3XP33L0JDD91VT47WF16YPESOJFRSSADRFO17OXTR8TOOW8SWGC7MRQHWPF6TEOJTHB4XEWPA1S6L5NO1D24W267R2BR1L6Q' where id=75; -update noar ti set v3='TJIA711030MVUDPFEHPVTAA8GYZ1CRBFIB1AGX572645FUSSVZ2QJVOPLZL5QFHXYXLO3YMR7LBW8VWSR4A38U4VB0LQP795GK5VESGNPQ8KZBN1D4FL0JJNOLH7FKV648R80RLT3EIJKY668T26CE2TKCHP6HC4R3XP33L0JDD91VT47WF16YPESOJFRSSADRFO17OXTR8TOOW8SWGC7MRQHWPF6TEOJTHB4XEWPA1S6L5NO1D24W267R2BR1L6Q' where id=75; -update noar tt set v0='5R4RDM613H9U030D8HCJK7Q0S7DYSORM6L5LGE8FPKRKP52ZUYKG22LBMRSQK4D39VSP52YO69RL8QIQOW99TQZ56ZAKI9JG6JKOZD6JLLWC83B5TQKPKBAKR8148KNQE021D0JVXU3LOOIWWY4GK51SVD7H3RMQ1SLAS68HM6ZJ5XUCCAXO093MJYWANKRJCCFOYTFZH1G3SNXATUP269LH8OG81M4WRQ04NWI4MXFSA5NBVZK2LK4HJ6SLIO18J' where id=76; -update noar ti set v0='5R4RDM613H9U030D8HCJK7Q0S7DYSORM6L5LGE8FPKRKP52ZUYKG22LBMRSQK4D39VSP52YO69RL8QIQOW99TQZ56ZAKI9JG6JKOZD6JLLWC83B5TQKPKBAKR8148KNQE021D0JVXU3LOOIWWY4GK51SVD7H3RMQ1SLAS68HM6ZJ5XUCCAXO093MJYWANKRJCCFOYTFZH1G3SNXATUP269LH8OG81M4WRQ04NWI4MXFSA5NBVZK2LK4HJ6SLIO18J' where id=76; -update noar tt set v1='GTXTSCFUCSFMY5Z1O2YK77NA41P0PCCFZVH05E40BUHGNILNPKS5C0DOOIM1GE2JJSRVOM7KYOEL5UNMOLUSCULNJS3AL6IMVPN5TI8H282GVP6EKVR3931SZV7JY2WV6074H5QSFXTL73JFZIXB0A3FNTO3HCYB7HXVIKVBPCIMFTUMOM702ICY70SCD74B65VBNQ0NT3SXHC4RAGNSPEKNOVJV89NAZOCSXYQ70OVIA4034SYGAFXZT9AYK51FZ' where id=76; -update noar ti set v1='GTXTSCFUCSFMY5Z1O2YK77NA41P0PCCFZVH05E40BUHGNILNPKS5C0DOOIM1GE2JJSRVOM7KYOEL5UNMOLUSCULNJS3AL6IMVPN5TI8H282GVP6EKVR3931SZV7JY2WV6074H5QSFXTL73JFZIXB0A3FNTO3HCYB7HXVIKVBPCIMFTUMOM702ICY70SCD74B65VBNQ0NT3SXHC4RAGNSPEKNOVJV89NAZOCSXYQ70OVIA4034SYGAFXZT9AYK51FZ' where id=76; -update noar tt set v2='BTL3FNIGEDABSP75C9ONT77ILIFWWCY5ZBSFASEQ106T1X2AFPGP88LYSTFBDNQQSP9ODPEMMOJ4SY7SCD9YFFQETVZOAMHJKKRVKEX9G2URA0TPCMKC5R26MN3OFC8SYGC27ETBYV05KQZ8RYKG1NSN3SORAOF40O8PQXX5HB6DH7VN7E832A7469TTQGB1IVA94EQPTLH00N1EO913DMAAAOMWXRCLHXW7IE8589QDROYBRM9R2JMDB5789DDWW' where id=76; -update noar ti set v2='BTL3FNIGEDABSP75C9ONT77ILIFWWCY5ZBSFASEQ106T1X2AFPGP88LYSTFBDNQQSP9ODPEMMOJ4SY7SCD9YFFQETVZOAMHJKKRVKEX9G2URA0TPCMKC5R26MN3OFC8SYGC27ETBYV05KQZ8RYKG1NSN3SORAOF40O8PQXX5HB6DH7VN7E832A7469TTQGB1IVA94EQPTLH00N1EO913DMAAAOMWXRCLHXW7IE8589QDROYBRM9R2JMDB5789DDWW' where id=76; -update noar tt set v3='OJ41K9N09N6ME08KZTK6726UX1IBMMAIMXC5ZLJ2EQ3A1IOY35RQYP6NIA6VU3SKTS4L4SYW9KL5T5WRET5B4I9BUJZQ35TO7WPIG0B5MCCZ6K3F58BNBIGWOPG9VGSO6AJNVV3ANI1OWAAKKJABAR8G2S01IEASSSVI79DF2F1PVN7PR5KL9YFR4KXLS1XMVRJ5WCXHXAOCGIN3VAY9YHB2X42EN3DIIJRZPFISCQD6U98G0CTCEGXJ6UAHHD8AU' where id=76; -update noar ti set v3='OJ41K9N09N6ME08KZTK6726UX1IBMMAIMXC5ZLJ2EQ3A1IOY35RQYP6NIA6VU3SKTS4L4SYW9KL5T5WRET5B4I9BUJZQ35TO7WPIG0B5MCCZ6K3F58BNBIGWOPG9VGSO6AJNVV3ANI1OWAAKKJABAR8G2S01IEASSSVI79DF2F1PVN7PR5KL9YFR4KXLS1XMVRJ5WCXHXAOCGIN3VAY9YHB2X42EN3DIIJRZPFISCQD6U98G0CTCEGXJ6UAHHD8AU' where id=76; -update noar tt set v0='7F8CDZI57S0KZRZX482RDMKHE1ZJH5D6VBLKWG5F995MNGU1GO6S1MAICIOFDCS9BTUYZ6VST3MLZWEWLTIJF74XKYVXOHGWNM0H1V5I2DJD2IQKR7N185KUDFRJGCST93ESUD0UPFYVOC8Z23TZVUFZOV1PQ0DS4AYDQ6Q82WWDJ1V8CVJZVG17RGVF1C4SR7ZE8TOPW8FZAMM75Q1LSQYOEZJF1SR99Z702F516EJVEHWUIFQSCSHRPXVRGAW0F' where id=77; -update noar ti set v0='7F8CDZI57S0KZRZX482RDMKHE1ZJH5D6VBLKWG5F995MNGU1GO6S1MAICIOFDCS9BTUYZ6VST3MLZWEWLTIJF74XKYVXOHGWNM0H1V5I2DJD2IQKR7N185KUDFRJGCST93ESUD0UPFYVOC8Z23TZVUFZOV1PQ0DS4AYDQ6Q82WWDJ1V8CVJZVG17RGVF1C4SR7ZE8TOPW8FZAMM75Q1LSQYOEZJF1SR99Z702F516EJVEHWUIFQSCSHRPXVRGAW0F' where id=77; -update noar tt set v1='ZLP681JM5DP3B1EURBN2LJH91HPPA9XMAO377O6BJ6HTCYDFZMI3LSARSFDJ3H11R4GMN6NNRD7KR4IKF6LZEG1KS3FN7ON4PA21VLUAAGWNCS98AWWIKPJVDL8KY4FY9WIBYBI7M4HUZBG39MK4UPJJKLGVIV196WXFYTOCVLA4A2TLWQ0HAVD7UNZE1G4BUOQSX24F9V5OSDL3QJA9V9L95HXYVOXA1KYHSMLMUGCAXHM91216FJGDHOJ9JZBS7' where id=77; -update noar ti set v1='ZLP681JM5DP3B1EURBN2LJH91HPPA9XMAO377O6BJ6HTCYDFZMI3LSARSFDJ3H11R4GMN6NNRD7KR4IKF6LZEG1KS3FN7ON4PA21VLUAAGWNCS98AWWIKPJVDL8KY4FY9WIBYBI7M4HUZBG39MK4UPJJKLGVIV196WXFYTOCVLA4A2TLWQ0HAVD7UNZE1G4BUOQSX24F9V5OSDL3QJA9V9L95HXYVOXA1KYHSMLMUGCAXHM91216FJGDHOJ9JZBS7' where id=77; -update noar tt set v2='1A6KJ812QRTHSOQCSR1J1HXEI8R5WI5IL4H3RWUSZE8CT4XJBIL8NDY52FQ04KF4YBE34W978A4UUIRN0H0BG5WTEMAX897W6RILLZQ6PIL38DUNE7W8218FOA2TD1BSB378CCHG6RDE8W7YCZ0BOADXHED8EGL2ZZ5O5ZRLBPRCRSU1BZEK9YQDU025D73W2LZRLSEU8JE05Z1JF61U804XWJNB5P0LJU2QOM0BS39S7N1CSA7VKDLDSBPH7190B' where id=77; -update noar ti set v2='1A6KJ812QRTHSOQCSR1J1HXEI8R5WI5IL4H3RWUSZE8CT4XJBIL8NDY52FQ04KF4YBE34W978A4UUIRN0H0BG5WTEMAX897W6RILLZQ6PIL38DUNE7W8218FOA2TD1BSB378CCHG6RDE8W7YCZ0BOADXHED8EGL2ZZ5O5ZRLBPRCRSU1BZEK9YQDU025D73W2LZRLSEU8JE05Z1JF61U804XWJNB5P0LJU2QOM0BS39S7N1CSA7VKDLDSBPH7190B' where id=77; -update noar tt set v3='MMXFX5PNICBUFU7X4AEC1653TJ55CZAT9BGL6FGO5ERMRZQUC98AXPTHRAX7VKY57GPHNXGARYO3GNWZZXTO3A2BI1C6M8Q27570SRKI818LMSUML75AJHSM67WMJ4KLOAU5M5R49KGFXE8H5VMM6BR0GYSE6NG9G3EK1QGOA66TMSI8PDD84R8R0EA41RKYHL0SAE80K2KEPATE1TZYORRGRNQAEO6VMGPHBVA1W4JP0F5YPLLM1PQAHFVCHNPQA' where id=77; -update noar ti set v3='MMXFX5PNICBUFU7X4AEC1653TJ55CZAT9BGL6FGO5ERMRZQUC98AXPTHRAX7VKY57GPHNXGARYO3GNWZZXTO3A2BI1C6M8Q27570SRKI818LMSUML75AJHSM67WMJ4KLOAU5M5R49KGFXE8H5VMM6BR0GYSE6NG9G3EK1QGOA66TMSI8PDD84R8R0EA41RKYHL0SAE80K2KEPATE1TZYORRGRNQAEO6VMGPHBVA1W4JP0F5YPLLM1PQAHFVCHNPQA' where id=77; -update noar tt set v0='NB38CTV7YJHX6YJOPNSA39K6SCQLOQJ3UTK3VBJ6TREVYN5RI2VKYYPFVVZ6XU3HBRCQQ4TNJRMJBXMRVYV8Z04S9ZN5F094AT7L9BOYG3WQQ3YFYW5C9UVEQNQYF4KV3TW454IYW8XBUEKWW016Y3OIFP88ACAIYB9NGAI4VNOGUTXWWO878MHQ7EKOCOU6WN1LYTPUGTXO15Q2LP9UYM9KMUF8XKDF7W85KVSC4NQIVS6518M7KZF3E6FLHAVM4' where id=78; -update noar ti set v0='NB38CTV7YJHX6YJOPNSA39K6SCQLOQJ3UTK3VBJ6TREVYN5RI2VKYYPFVVZ6XU3HBRCQQ4TNJRMJBXMRVYV8Z04S9ZN5F094AT7L9BOYG3WQQ3YFYW5C9UVEQNQYF4KV3TW454IYW8XBUEKWW016Y3OIFP88ACAIYB9NGAI4VNOGUTXWWO878MHQ7EKOCOU6WN1LYTPUGTXO15Q2LP9UYM9KMUF8XKDF7W85KVSC4NQIVS6518M7KZF3E6FLHAVM4' where id=78; -update noar tt set v1='WOVERXH3OXEMZ8ZIYXF4MJ7SOG71AYOHIRNWFSOLCDP8XVGZCFPGVRN5KRN86QES5LNJ19RA9WX8B6EPBD4FEH05IWIO9QSYKNGEY8UDMEGTSJBORH205CLME5ZUCONC32E0JMS7JQ6AUUMNG6M5CFW6GZK9YFZ8UTAM565FZJ6ZR0QQA98Z7PPPS2HGBQ6TU131XHLGEZ7AUFDGMIJTDHR33BP2DU2AZ600Q1EN1743H7BQNBS7DISP5VT42FZAT' where id=78; -update noar ti set v1='WOVERXH3OXEMZ8ZIYXF4MJ7SOG71AYOHIRNWFSOLCDP8XVGZCFPGVRN5KRN86QES5LNJ19RA9WX8B6EPBD4FEH05IWIO9QSYKNGEY8UDMEGTSJBORH205CLME5ZUCONC32E0JMS7JQ6AUUMNG6M5CFW6GZK9YFZ8UTAM565FZJ6ZR0QQA98Z7PPPS2HGBQ6TU131XHLGEZ7AUFDGMIJTDHR33BP2DU2AZ600Q1EN1743H7BQNBS7DISP5VT42FZAT' where id=78; -update noar tt set v2='302UGD121Z5ICNJKA3W0FIG5NJVSELC118P9SD0SRT21YAN0TC8TGOT5W3ZV0C5ZN009O8BGQWDB2PM9Y6V95FN7TQZUPK1GQJ6FTJ1N9Q1TQ7P1AQ1OO4MCQDN1FPQD0HFMCCAN720JSI03TVUFUTFR7K5CJXMSXLU8UGCSEDBBU0X05MOWLOY2KHKBBF5YSCVDY181JN0XLH9G9XXBGYSDWTVVVT7BQJ7U8KT6T2DUAW5QJ6WIGLCD4QXQHHHMI' where id=78; -update noar ti set v2='302UGD121Z5ICNJKA3W0FIG5NJVSELC118P9SD0SRT21YAN0TC8TGOT5W3ZV0C5ZN009O8BGQWDB2PM9Y6V95FN7TQZUPK1GQJ6FTJ1N9Q1TQ7P1AQ1OO4MCQDN1FPQD0HFMCCAN720JSI03TVUFUTFR7K5CJXMSXLU8UGCSEDBBU0X05MOWLOY2KHKBBF5YSCVDY181JN0XLH9G9XXBGYSDWTVVVT7BQJ7U8KT6T2DUAW5QJ6WIGLCD4QXQHHHMI' where id=78; -update noar tt set v3='UZA52RDZ11V1K163GOPSTN2WNMEG3P72W6Q3GORAZVR300CM55DIHXM11Z0CZK9XDK1TESWIGR5PIQDIGVJALJT730UTW4H1C9718EIWJYA673S1O6NA1XLRM8W0QP8YQSC10XT4VIG7Z8AVYL1G1VQ7UZOO4C412AS7GJUFZ4HOWR1F9I91UFXSJ2TUYA6N4L1SLASP59FRLIN5J3GRK2GNC360S586TKXJXU61I6ANNR7B8IJ42SW1W0S1LKWL5' where id=78; -update noar ti set v3='UZA52RDZ11V1K163GOPSTN2WNMEG3P72W6Q3GORAZVR300CM55DIHXM11Z0CZK9XDK1TESWIGR5PIQDIGVJALJT730UTW4H1C9718EIWJYA673S1O6NA1XLRM8W0QP8YQSC10XT4VIG7Z8AVYL1G1VQ7UZOO4C412AS7GJUFZ4HOWR1F9I91UFXSJ2TUYA6N4L1SLASP59FRLIN5J3GRK2GNC360S586TKXJXU61I6ANNR7B8IJ42SW1W0S1LKWL5' where id=78; -update noar tt set v0='KKUGYZNS00WEJ9K8ZZBC5WSO4B31UWH6UMXZBE4ZTFI8V60DC7D0BLYQXRJ7IH5NL01CVGZRIV6EHF3JUA0J8U8O8YFX912Q2U3C8LVJ3KNAFOQM7K20GD6UQD887NW7JB4ZFAHHL2RYUE3VJYLG3D801N2GWQ1Z47W396XGC35W2H6GWYSOEVSK2QD2BBQHYYOY3ESJFYZRGDM2NFIU7K3RC7JJ6MOUE7LE77R3EJ9KVVEPHDOOBWR52DA1NIT0U' where id=79; -update noar ti set v0='KKUGYZNS00WEJ9K8ZZBC5WSO4B31UWH6UMXZBE4ZTFI8V60DC7D0BLYQXRJ7IH5NL01CVGZRIV6EHF3JUA0J8U8O8YFX912Q2U3C8LVJ3KNAFOQM7K20GD6UQD887NW7JB4ZFAHHL2RYUE3VJYLG3D801N2GWQ1Z47W396XGC35W2H6GWYSOEVSK2QD2BBQHYYOY3ESJFYZRGDM2NFIU7K3RC7JJ6MOUE7LE77R3EJ9KVVEPHDOOBWR52DA1NIT0U' where id=79; -update noar tt set v1='VUHTVV9ONE2QHRWZR59FIG4RWWO5DNA8A8TBSEPSZGRDQBS4K270QIDWS0Y72S5K2CTUF9P2FDFKBJYCGEF89XVV7L5TDYMXPBD19I5O8MYF1QERNI7VSOPWQNKY5LJFNYRVACLRS0NTIIJEJ1BBGA23I2SGMC9FJIF8CPFOJ74T3MDOL01WXJ640UDZACGRZZ4JTAW0NGLH59VJ55H9OZSUEYAFRK5HCCELRY4251XEQCU2302Y663ZPGN3AELO1' where id=79; -update noar ti set v1='VUHTVV9ONE2QHRWZR59FIG4RWWO5DNA8A8TBSEPSZGRDQBS4K270QIDWS0Y72S5K2CTUF9P2FDFKBJYCGEF89XVV7L5TDYMXPBD19I5O8MYF1QERNI7VSOPWQNKY5LJFNYRVACLRS0NTIIJEJ1BBGA23I2SGMC9FJIF8CPFOJ74T3MDOL01WXJ640UDZACGRZZ4JTAW0NGLH59VJ55H9OZSUEYAFRK5HCCELRY4251XEQCU2302Y663ZPGN3AELO1' where id=79; -update noar tt set v2='G6HLQ7DEPCLYB9V0QTQJE36F6T2RCYR60SEQAW55LINY7QN83ZZRVFT1XR5C4GLM4IFX9TVLNQ1X0F19DOHHLQ6ABG2572P0BKKPEUV5LIC04VJZMA5EKTHVP1N6I3J4MMNQJHX0T3TLPC8EVLQPN5TQ5XWR0BFHNVTGN1A14JFYJKQTRRBYSOFKMUJHUCF1L1IGB8SBPZH8LMMN9RG6UFENIIFH3WZ81FSDECZOTTX2IVJETIF1NN7Z9EUG9RLK1' where id=79; -update noar ti set v2='G6HLQ7DEPCLYB9V0QTQJE36F6T2RCYR60SEQAW55LINY7QN83ZZRVFT1XR5C4GLM4IFX9TVLNQ1X0F19DOHHLQ6ABG2572P0BKKPEUV5LIC04VJZMA5EKTHVP1N6I3J4MMNQJHX0T3TLPC8EVLQPN5TQ5XWR0BFHNVTGN1A14JFYJKQTRRBYSOFKMUJHUCF1L1IGB8SBPZH8LMMN9RG6UFENIIFH3WZ81FSDECZOTTX2IVJETIF1NN7Z9EUG9RLK1' where id=79; -update noar tt set v3='UNKLHN1WMIS2Z1N427LRLA61946NXMAQW0K1OZZT2CAY6EC1WL1OACMC0RGAOVU22P681I3TEYUVNZEJ1M1O1Y184D70DY8F5R4VGDQCNM08UMSMQWJGYUJ2HEEB3AZCM4W5NYTGGFEWGH662XYEQV461T4GLJDPCDBN12AKOQ1P606GZS54RIPDDA1J9B21715MOHHKICO9108YPKCMJ54PC92HDXUMH313OLJYJBS93HDMT25N7EMOAHXZZFVT9' where id=79; -update noar ti set v3='UNKLHN1WMIS2Z1N427LRLA61946NXMAQW0K1OZZT2CAY6EC1WL1OACMC0RGAOVU22P681I3TEYUVNZEJ1M1O1Y184D70DY8F5R4VGDQCNM08UMSMQWJGYUJ2HEEB3AZCM4W5NYTGGFEWGH662XYEQV461T4GLJDPCDBN12AKOQ1P606GZS54RIPDDA1J9B21715MOHHKICO9108YPKCMJ54PC92HDXUMH313OLJYJBS93HDMT25N7EMOAHXZZFVT9' where id=79; -update noar tt set v0='317SXVKJPSEANQUEWXJ7AIFCIPJIYUQ7WBS69PZF4UFUDQ4BMFIXCZKB21L0KDA4GJT3G96T5YAEKX9T7VOQMAUOF5RSL2AE9E428SV3DMCMRRZ9I5HMER03ACIU83R26Z71A9P1YI4MA37VOOEFH8XAO0U6W6M8J7065FNCEGIT7M1UTR03QSDXJT67CV72YDLVT50MVLKQEDSFE60YD2O11XF9TU85NT709VVDRD6NTFUFKKVYBHBDSFPZESW75' where id=80; -update noar ti set v0='317SXVKJPSEANQUEWXJ7AIFCIPJIYUQ7WBS69PZF4UFUDQ4BMFIXCZKB21L0KDA4GJT3G96T5YAEKX9T7VOQMAUOF5RSL2AE9E428SV3DMCMRRZ9I5HMER03ACIU83R26Z71A9P1YI4MA37VOOEFH8XAO0U6W6M8J7065FNCEGIT7M1UTR03QSDXJT67CV72YDLVT50MVLKQEDSFE60YD2O11XF9TU85NT709VVDRD6NTFUFKKVYBHBDSFPZESW75' where id=80; -update noar tt set v1='Z0N22RXKYVB3MC41CB1V9DG3EMMILB4725CL7YZ54110CJJL235Y22UF0HTYGPLCUCBQPMHGU87MW0R0WNK1BDFA6G5DO0TCHVK5YOI0JBB3TBPF8ZUHXBUK2S01883OIGHMS7AH0WMKYQ1LNHS5E5B7RT9ZE5Z0OX7E9SN4BTSH5C1SSKMWH30C30AH9T9SCO1RURYJXKKX9HAVJOE8PJ08LJRO6BGRKOEINGVHLBNJ9KWEHE3IL4PI8TU0005ZZ' where id=80; -update noar ti set v1='Z0N22RXKYVB3MC41CB1V9DG3EMMILB4725CL7YZ54110CJJL235Y22UF0HTYGPLCUCBQPMHGU87MW0R0WNK1BDFA6G5DO0TCHVK5YOI0JBB3TBPF8ZUHXBUK2S01883OIGHMS7AH0WMKYQ1LNHS5E5B7RT9ZE5Z0OX7E9SN4BTSH5C1SSKMWH30C30AH9T9SCO1RURYJXKKX9HAVJOE8PJ08LJRO6BGRKOEINGVHLBNJ9KWEHE3IL4PI8TU0005ZZ' where id=80; -update noar tt set v2='I1SFWBGGEZ2SGQRUVRNWJXU734RSJB4JI7GF7X15JP9RA5AFR7WNWNKBX1AE8CVXNZ85DUIS83NSHM1T0JCAJ0OS20MC6VC82O3GRXA3NKXYULVY1UGGTJRH1IKI3T339WOVY3U6JPRHPKQIEQG44CVB3UK9NEAXQQAEKUWNLUJKOD0YG95Z1FT2VLQVWTXYV0WXI3T33XT90APM12AJ5SIWCZV6AKS09W2FXG42YDXR8OMGYVMKMC2RVE4AWM460' where id=80; -update noar ti set v2='I1SFWBGGEZ2SGQRUVRNWJXU734RSJB4JI7GF7X15JP9RA5AFR7WNWNKBX1AE8CVXNZ85DUIS83NSHM1T0JCAJ0OS20MC6VC82O3GRXA3NKXYULVY1UGGTJRH1IKI3T339WOVY3U6JPRHPKQIEQG44CVB3UK9NEAXQQAEKUWNLUJKOD0YG95Z1FT2VLQVWTXYV0WXI3T33XT90APM12AJ5SIWCZV6AKS09W2FXG42YDXR8OMGYVMKMC2RVE4AWM460' where id=80; -update noar tt set v3='MJ3LUUFRYS54ED2NDFCS0K7N4NCDP9IBITQEOXLU96OJO8IIMUR492N8AESGY2C2SL2U6NDNX5EFVL6PP7Y6QGIZXZ8TUDWN4P47GXVH7D3LY035UDZS5HL56NQXOJJQDO1TEEEUQRTC5E8GQHDWZLP1LU0XBM69YEZYH3M515RZ7C45QX8JI58TDF8J4O69W4TOW7NTB6D9MES4GCTC5T17WWKV3ICKAEGMIUPH3VHI5AJWZWGEQX6QYF4AQS2BT' where id=80; -update noar ti set v3='MJ3LUUFRYS54ED2NDFCS0K7N4NCDP9IBITQEOXLU96OJO8IIMUR492N8AESGY2C2SL2U6NDNX5EFVL6PP7Y6QGIZXZ8TUDWN4P47GXVH7D3LY035UDZS5HL56NQXOJJQDO1TEEEUQRTC5E8GQHDWZLP1LU0XBM69YEZYH3M515RZ7C45QX8JI58TDF8J4O69W4TOW7NTB6D9MES4GCTC5T17WWKV3ICKAEGMIUPH3VHI5AJWZWGEQX6QYF4AQS2BT' where id=80; -update noar tt set v0='2HJBNNMLY3ZDXX4URFRTXFFLNOAVFL5OJR4LE8ME0HSELHSZ2QC3RAIQYTVBFKVM2QYDC9XADLX3K2ZHSOPOCJ29ZS9T8R9HP6C8T3LK1WUP4ROD5LIR11J2HDTNCQ8MNF9QQ6V46SCOCGNHCMES6Y0JR9AUXOZ18SP67GCABRPVXOOE4RM11UED00QBC8N31HHZZY3CUDRKWGAANMVCQAYGIYAVZ44HID8RE3EY0K64E8KTE0H5OKX5J5U4YK2XC' where id=81; -update noar ti set v0='2HJBNNMLY3ZDXX4URFRTXFFLNOAVFL5OJR4LE8ME0HSELHSZ2QC3RAIQYTVBFKVM2QYDC9XADLX3K2ZHSOPOCJ29ZS9T8R9HP6C8T3LK1WUP4ROD5LIR11J2HDTNCQ8MNF9QQ6V46SCOCGNHCMES6Y0JR9AUXOZ18SP67GCABRPVXOOE4RM11UED00QBC8N31HHZZY3CUDRKWGAANMVCQAYGIYAVZ44HID8RE3EY0K64E8KTE0H5OKX5J5U4YK2XC' where id=81; -update noar tt set v1='JHZE4NE23OZ9BL1TM5GMR9VHDDU3HP8M6SS2RHDZ7BYBJQC0F35FLKAZAF1DWXRHXP0D2PUM5JUR3J4TDKWDPW8LFBPE3GZLKZS5YQ3ISM1WMMFC07DNDGZIXM13WAN754THD2SPWV8ZXAZKO2VQMYHHI9KX2ZH1FC7ZQAVTACGLZ1NL7HB16L986DBHWKYAYHP7J8BT8W1D3V3K5XEB5K18DT44J0Q22YXFMQTVLAWRIPUFG3FUWS670VLWMZUIU' where id=81; -update noar ti set v1='JHZE4NE23OZ9BL1TM5GMR9VHDDU3HP8M6SS2RHDZ7BYBJQC0F35FLKAZAF1DWXRHXP0D2PUM5JUR3J4TDKWDPW8LFBPE3GZLKZS5YQ3ISM1WMMFC07DNDGZIXM13WAN754THD2SPWV8ZXAZKO2VQMYHHI9KX2ZH1FC7ZQAVTACGLZ1NL7HB16L986DBHWKYAYHP7J8BT8W1D3V3K5XEB5K18DT44J0Q22YXFMQTVLAWRIPUFG3FUWS670VLWMZUIU' where id=81; -update noar tt set v2='KGA521JM3FBK82CK9TDSKPFEYD72VXXQRZ15QBWEDHOFZMS7YQJ35OPHZCWQ5R7MH1B3YHJN9U09OV3RLEE8F3CIZAD318EM0812RYVEATBF7KEL1BALAWHCDTXMF7PINC3P68MGISR56XBK93VJ8QDOG038EAUT5ZPGC7777Q5OFZLG5PPHX7JW7F5LS6JWC7S1O0L3VYENFDFH3W5QVQY59KHW66FRGZ7TURZ6ZNFHVNX1W936XOGE2FKT28RNY' where id=81; -update noar ti set v2='KGA521JM3FBK82CK9TDSKPFEYD72VXXQRZ15QBWEDHOFZMS7YQJ35OPHZCWQ5R7MH1B3YHJN9U09OV3RLEE8F3CIZAD318EM0812RYVEATBF7KEL1BALAWHCDTXMF7PINC3P68MGISR56XBK93VJ8QDOG038EAUT5ZPGC7777Q5OFZLG5PPHX7JW7F5LS6JWC7S1O0L3VYENFDFH3W5QVQY59KHW66FRGZ7TURZ6ZNFHVNX1W936XOGE2FKT28RNY' where id=81; -update noar tt set v3='LFR2K57WNKMK5VYQGUMTUVM2KJS0FULGUOEP7QQAYP7VI8PGZFX5UDIXK5XVX0XSHHJF44A4OHXEPPT3OOTNUP9CBATFYZO3N8ZLSMOPXQYE4UFDSPONQGTLTF820J4DQYOBP0F0BPR6ZYCKSI041MNJNHWAV3TGBGNSTOSN8JVGBW7EYEKSZJEXAFK3Q0ZZFG4U2MVG0184NMZ6HESFSXGUYM1HJSCKPJ1LYQ3LZIQQJDWYJXR5AHTYXPI1ZMIP3' where id=81; -update noar ti set v3='LFR2K57WNKMK5VYQGUMTUVM2KJS0FULGUOEP7QQAYP7VI8PGZFX5UDIXK5XVX0XSHHJF44A4OHXEPPT3OOTNUP9CBATFYZO3N8ZLSMOPXQYE4UFDSPONQGTLTF820J4DQYOBP0F0BPR6ZYCKSI041MNJNHWAV3TGBGNSTOSN8JVGBW7EYEKSZJEXAFK3Q0ZZFG4U2MVG0184NMZ6HESFSXGUYM1HJSCKPJ1LYQ3LZIQQJDWYJXR5AHTYXPI1ZMIP3' where id=81; -update noar tt set v0='UP9EJTXA2RUMNTLGWJJBIZAPE8EFB1M24RNH7VSJZEP7KVSIN57ZOCF7M1ABVE3PNH2TBKFXS692O2GHD8487B9YSDOYM7SA0E4G3ZJYMYT9WPBFTVLJSVRQ719LK1SEAVAN45LLDAYDVY7C2N5ZS6BV1BHMK6B4V2BHWLTN6L23DGWX5911NMO6QJ137UCEX07SIRV5AE4ELP3N1845AS7317A9BWRBW7Q6S62HDY0E6AQWOPGJ2THQ25TSKRZTH' where id=82; -update noar ti set v0='UP9EJTXA2RUMNTLGWJJBIZAPE8EFB1M24RNH7VSJZEP7KVSIN57ZOCF7M1ABVE3PNH2TBKFXS692O2GHD8487B9YSDOYM7SA0E4G3ZJYMYT9WPBFTVLJSVRQ719LK1SEAVAN45LLDAYDVY7C2N5ZS6BV1BHMK6B4V2BHWLTN6L23DGWX5911NMO6QJ137UCEX07SIRV5AE4ELP3N1845AS7317A9BWRBW7Q6S62HDY0E6AQWOPGJ2THQ25TSKRZTH' where id=82; -update noar tt set v1='8I1JP2U5WSOY3JKTQUNZ8KZZSFBMCLZDA04E89JQIZTERN1WC7URYB1RQXS6U6XP0T91G00MUWTUPS79T9ERCTSXBWAEF8E3NX0B00JQOX8C3VJOZRPKUP4MJZQSG5HI74BYRTVH7HDGZLA2YIVTX98BPI41RSPZJHCQT71RUCGRK0V49L0NYQ06N46LWMKED8T0VXJJE1UKTPJK2XSP6ASIQLDFZCBUTVBGC2APDFZJXA2C76WIRXLH6LZIWL04W' where id=82; -update noar ti set v1='8I1JP2U5WSOY3JKTQUNZ8KZZSFBMCLZDA04E89JQIZTERN1WC7URYB1RQXS6U6XP0T91G00MUWTUPS79T9ERCTSXBWAEF8E3NX0B00JQOX8C3VJOZRPKUP4MJZQSG5HI74BYRTVH7HDGZLA2YIVTX98BPI41RSPZJHCQT71RUCGRK0V49L0NYQ06N46LWMKED8T0VXJJE1UKTPJK2XSP6ASIQLDFZCBUTVBGC2APDFZJXA2C76WIRXLH6LZIWL04W' where id=82; -update noar tt set v2='VEG9CQ875N3X034OX28G53ALQQ77BQTPMA0E9KPD7QB7FW6AJF8PL3ER7KY3LLDKD1H9QG9ZASY5CTUKBNNRDL56HJA5M9SUJXB0492AUXQIKI3Z7R0M3TOITXCGDF88FR0IPVLD1UGQAOWLRCM7PNLFC1FG50QP0JWH0D3SW00YBJTTR9NIVH6WB1CXIL966LMNZDLNEMT8Q3USAM8DEOJ9CNYV4NS8NUTHSLRSE7F6NV5RS90IBKNUNFQ8RFWVJ' where id=82; -update noar ti set v2='VEG9CQ875N3X034OX28G53ALQQ77BQTPMA0E9KPD7QB7FW6AJF8PL3ER7KY3LLDKD1H9QG9ZASY5CTUKBNNRDL56HJA5M9SUJXB0492AUXQIKI3Z7R0M3TOITXCGDF88FR0IPVLD1UGQAOWLRCM7PNLFC1FG50QP0JWH0D3SW00YBJTTR9NIVH6WB1CXIL966LMNZDLNEMT8Q3USAM8DEOJ9CNYV4NS8NUTHSLRSE7F6NV5RS90IBKNUNFQ8RFWVJ' where id=82; -update noar tt set v3='Q6BBPII67U59R29LHW3X07M6J5Z9HEB1NE9W1CAHAVMLEAVU8F1DKKS7GDQ6RR9X9236IZDPS72ZCCUITUZG8562X9LEPSM6FAX550JOBVLW7M3U4MFDB34D17AHVCRY4WN7HUU683ENTM62KOSUQIWJ7T9UJKBRVOC00TQ30O1LWYH1J7M4VIEDOP69G39OAFWZ229ZR3GYBT71513R0KXH6SPK0LDNHPXPFXT1QH793FDL91GL7LBL2QWVPVADF' where id=82; -update noar ti set v3='Q6BBPII67U59R29LHW3X07M6J5Z9HEB1NE9W1CAHAVMLEAVU8F1DKKS7GDQ6RR9X9236IZDPS72ZCCUITUZG8562X9LEPSM6FAX550JOBVLW7M3U4MFDB34D17AHVCRY4WN7HUU683ENTM62KOSUQIWJ7T9UJKBRVOC00TQ30O1LWYH1J7M4VIEDOP69G39OAFWZ229ZR3GYBT71513R0KXH6SPK0LDNHPXPFXT1QH793FDL91GL7LBL2QWVPVADF' where id=82; -update noar tt set v0='4BF5NQRJBZRUFQGU0KQKLSB9JN7PKIJXZBKPJFQBYCTIGFFHEXPTGQOEE9ZL6ZEGXJ742W9YBJQV9ONKYTK0HSSC9KIQ97WLIEMR8FHDSCDFAVAN3WPS5JWSYWQ98LZWVTEAHDGPPVM8KKHG29IM5IVB69BFE60GEVL9X4MJ9NN95FLZPXFWS1NM9P3WI8PO6C7V0PAN5I91APZK3WD5WVWKGNILOUEDO49114CMUJUAA1MZ23AQ9HPUONB5YKJ55' where id=83; -update noar ti set v0='4BF5NQRJBZRUFQGU0KQKLSB9JN7PKIJXZBKPJFQBYCTIGFFHEXPTGQOEE9ZL6ZEGXJ742W9YBJQV9ONKYTK0HSSC9KIQ97WLIEMR8FHDSCDFAVAN3WPS5JWSYWQ98LZWVTEAHDGPPVM8KKHG29IM5IVB69BFE60GEVL9X4MJ9NN95FLZPXFWS1NM9P3WI8PO6C7V0PAN5I91APZK3WD5WVWKGNILOUEDO49114CMUJUAA1MZ23AQ9HPUONB5YKJ55' where id=83; -update noar tt set v1='THFMIDCUDV5NGX99QS0U603Q55ARNEFBSZOHS04KRWZ7TSFBN8Z8VXR3JRJE63V41JM6TTBX21UTHZ9OGOVPTWAPBS3N6T8LWV3ECEDL99WPD3JKN4TF0V7LTFWD1EI7U6EYP06WJ3RVQ9W682GE74Q8IHA0X1XWCZWL9PRYTBBW4KSII27KEYIJR8WO2XCWBNAH1CSEN4GGHVKDY1EYRX4MEXU3ZHPJV75RZ1Q3IM7GY8E2IKDDA6UXKCEKX4QYW' where id=83; -update noar ti set v1='THFMIDCUDV5NGX99QS0U603Q55ARNEFBSZOHS04KRWZ7TSFBN8Z8VXR3JRJE63V41JM6TTBX21UTHZ9OGOVPTWAPBS3N6T8LWV3ECEDL99WPD3JKN4TF0V7LTFWD1EI7U6EYP06WJ3RVQ9W682GE74Q8IHA0X1XWCZWL9PRYTBBW4KSII27KEYIJR8WO2XCWBNAH1CSEN4GGHVKDY1EYRX4MEXU3ZHPJV75RZ1Q3IM7GY8E2IKDDA6UXKCEKX4QYW' where id=83; -update noar tt set v2='3QR3DTO8RKAGDVM93NGA0VU4DOSF56HFZNU58QX9HNXV7IR8QCF450DEJ87YY90AJ9QWX90MW3TT1574VWC5I3SUW8STI5ML3U7YDM7XINLY2BA7RKOU855L8FKS9UNOP3DMK2NEW6TDHWF964KD1SDM4T3GPTMLUSQPIZ1LALA1BHHROJ54O4Z6G66HX262D7NAX557R8JJEZG4PWC7LRBJ570JHIAUWDXIJZUQXWHI9NT8YS67L0XRQ1HLWUWXQ' where id=83; -update noar ti set v2='3QR3DTO8RKAGDVM93NGA0VU4DOSF56HFZNU58QX9HNXV7IR8QCF450DEJ87YY90AJ9QWX90MW3TT1574VWC5I3SUW8STI5ML3U7YDM7XINLY2BA7RKOU855L8FKS9UNOP3DMK2NEW6TDHWF964KD1SDM4T3GPTMLUSQPIZ1LALA1BHHROJ54O4Z6G66HX262D7NAX557R8JJEZG4PWC7LRBJ570JHIAUWDXIJZUQXWHI9NT8YS67L0XRQ1HLWUWXQ' where id=83; -update noar tt set v3='KSKR8VYTUWUPYNBKQX9PGUMIHHIYVDM78LW3FVY7OU1L67RY4NX4XTFAXFSSEOD18N8UJKLQFUJOWIZBMLP6BKW5G31YXLG29XB2CCLBZM9Q8YX9608FKANW5H3O5JDBA3QRLST642CH2ET6IUKT34OHMEIOBUYNVFC5PX5GOZBE3Y132RU8DCE2J5OQDBCC0T2JKYI5GX9ULCV44W6XXBESZEL1Q6CIBGP7OSOO918F5LNI8KHB9PRIDTUY7TNFS' where id=83; -update noar ti set v3='KSKR8VYTUWUPYNBKQX9PGUMIHHIYVDM78LW3FVY7OU1L67RY4NX4XTFAXFSSEOD18N8UJKLQFUJOWIZBMLP6BKW5G31YXLG29XB2CCLBZM9Q8YX9608FKANW5H3O5JDBA3QRLST642CH2ET6IUKT34OHMEIOBUYNVFC5PX5GOZBE3Y132RU8DCE2J5OQDBCC0T2JKYI5GX9ULCV44W6XXBESZEL1Q6CIBGP7OSOO918F5LNI8KHB9PRIDTUY7TNFS' where id=83; -update noar tt set v0='WNHM4MPPUK2RXYH3ZNBO834CKO2WTCQ26NVK7C0UKM6NTIGLLTSZMC4Q3HE8HCYWZHX6413200LI0CQA7ZQHPNAICSE7ZV3Q9A9YN2HP9JWQX65JR49VONST7NRL19FET065KVE1GNCHTC05KBQVH1EC5V54XNJO4CIWEVB1GYK4AB3HDOE4ST2WTKJ2D66LTMLXD0NYKUFP2GLECZUGNP8HAE1HGQCRX5PDLM6273OV2OI23X7RGEUF2O1ELYDBB' where id=84; -update noar ti set v0='WNHM4MPPUK2RXYH3ZNBO834CKO2WTCQ26NVK7C0UKM6NTIGLLTSZMC4Q3HE8HCYWZHX6413200LI0CQA7ZQHPNAICSE7ZV3Q9A9YN2HP9JWQX65JR49VONST7NRL19FET065KVE1GNCHTC05KBQVH1EC5V54XNJO4CIWEVB1GYK4AB3HDOE4ST2WTKJ2D66LTMLXD0NYKUFP2GLECZUGNP8HAE1HGQCRX5PDLM6273OV2OI23X7RGEUF2O1ELYDBB' where id=84; -update noar tt set v1='SB6DQ3V0XT7SGQA5QHTTI4D59W2UXD9CDRE6W7658ZIBHW5FR4640L5XU7F1IG0IMF4X7FOT462GGJGKAHTHYPKA32V02585L3ATT4BC7FNV4IJERWS9LLNJKS6EEDJNMPRJNAGR6K10LRI7THSA1LAXTMN0UJ5KP1Q46HN4RU3I2W2DQC1GJK8G1HCVL1YB5BXFXP0MFFB66IR7TEMZ0WL6U2HNC6G6HNFROEHJPX86NEPZLUYD1H6DTIY8ZOCRS' where id=84; -update noar ti set v1='SB6DQ3V0XT7SGQA5QHTTI4D59W2UXD9CDRE6W7658ZIBHW5FR4640L5XU7F1IG0IMF4X7FOT462GGJGKAHTHYPKA32V02585L3ATT4BC7FNV4IJERWS9LLNJKS6EEDJNMPRJNAGR6K10LRI7THSA1LAXTMN0UJ5KP1Q46HN4RU3I2W2DQC1GJK8G1HCVL1YB5BXFXP0MFFB66IR7TEMZ0WL6U2HNC6G6HNFROEHJPX86NEPZLUYD1H6DTIY8ZOCRS' where id=84; -update noar tt set v2='0CNL8VKPUBNR52B4CXNPMCJRHBV67TMUL0VFNWB03FAX4C66AFGDX0ZV0E5KS0HEXZZ2NFJ5LRSVKSZ5VBQXRHH4GN28CPA33EM3NOWBHWC7G0QGS5YVO1N30Z73HZUY5MKTZZIHAW1QWNQ6U82CC2KMQT4VP1TUB2S1DXBJUZM9437P4RXXH7Z2IXLUOMNY1XFC8N9DNH5WL3VBEJKKU5I5RX93PQAC5UOJ2IOHGSQK135PCA0K97DSV4TP3WAD9' where id=84; -update noar ti set v2='0CNL8VKPUBNR52B4CXNPMCJRHBV67TMUL0VFNWB03FAX4C66AFGDX0ZV0E5KS0HEXZZ2NFJ5LRSVKSZ5VBQXRHH4GN28CPA33EM3NOWBHWC7G0QGS5YVO1N30Z73HZUY5MKTZZIHAW1QWNQ6U82CC2KMQT4VP1TUB2S1DXBJUZM9437P4RXXH7Z2IXLUOMNY1XFC8N9DNH5WL3VBEJKKU5I5RX93PQAC5UOJ2IOHGSQK135PCA0K97DSV4TP3WAD9' where id=84; -update noar tt set v3='LS6GP1ZTS75NT5ALHWGO0PLQZX28FEYFWXOKK6Q96NFMHQ7R5G32VOEQHK1UUMZJA8QOYQN16T01KJDN89FOCO78GFH8PTX23TJ8C2DK7LX4AQP5TKHZYDB04TGLPUHMVPY7G0F2U4B9N8PHRRRIMDDMRLQNDRDIE64J7S5GCSA0KIKLDBRVE2LFLJD0ASORZNWLBNG6FNDDWA4I7AFD26TWZ2K5E5SA8WX0RJSQXWWKSJXBC6WFUPX2TZXY5OKJU' where id=84; -update noar ti set v3='LS6GP1ZTS75NT5ALHWGO0PLQZX28FEYFWXOKK6Q96NFMHQ7R5G32VOEQHK1UUMZJA8QOYQN16T01KJDN89FOCO78GFH8PTX23TJ8C2DK7LX4AQP5TKHZYDB04TGLPUHMVPY7G0F2U4B9N8PHRRRIMDDMRLQNDRDIE64J7S5GCSA0KIKLDBRVE2LFLJD0ASORZNWLBNG6FNDDWA4I7AFD26TWZ2K5E5SA8WX0RJSQXWWKSJXBC6WFUPX2TZXY5OKJU' where id=84; -update noar tt set v0='Y3Q3BOUVLDLBVPY2DU3VL1Z1A1711HI0EX3AV1UQE54ODZS8DLPH9DSO1I4PBGO21VK6CG8CP1Y69CGMSL4P6LWFCEVWJJCHKMIH24FKO53KIQQMGKZUXN51ZLKVHS3OV8QE5468UMPOGFB1G0YLV2VVIYZP5J3TFYQV6WO198FLSBL9FR1A23LFP6DQIKN2DMCJ9DHRJ231F7K9CKKOUAVGN3EVKBHYIWPQU0RGNGLV0L63AX4Z7DEQ3NBXY4PVM' where id=85; -update noar ti set v0='Y3Q3BOUVLDLBVPY2DU3VL1Z1A1711HI0EX3AV1UQE54ODZS8DLPH9DSO1I4PBGO21VK6CG8CP1Y69CGMSL4P6LWFCEVWJJCHKMIH24FKO53KIQQMGKZUXN51ZLKVHS3OV8QE5468UMPOGFB1G0YLV2VVIYZP5J3TFYQV6WO198FLSBL9FR1A23LFP6DQIKN2DMCJ9DHRJ231F7K9CKKOUAVGN3EVKBHYIWPQU0RGNGLV0L63AX4Z7DEQ3NBXY4PVM' where id=85; -update noar tt set v1='HIBDYHGMHEOMDY98GA4K2P4GY5R9J98N9CQVLAQ0IKMZH0BCDHIO7LDVT6L2ZUSUL5MGRHD3DDQKWMNIK3WBUZSX144D557MVUM8QF0GUZ04J7O5CJQC9YSKRBEEYXI0R3WRRQRHQJEGR5HSGCGVH2FF3ASEVC5V68HE2E7K3UF4CJBG200XHJ36J00J4IW2GOQ7BUGM737NXXJWNR3PLJDAIH74DO1MDJWPA3JF30ZN6S27UJCTY178B2YN8PARM' where id=85; -update noar ti set v1='HIBDYHGMHEOMDY98GA4K2P4GY5R9J98N9CQVLAQ0IKMZH0BCDHIO7LDVT6L2ZUSUL5MGRHD3DDQKWMNIK3WBUZSX144D557MVUM8QF0GUZ04J7O5CJQC9YSKRBEEYXI0R3WRRQRHQJEGR5HSGCGVH2FF3ASEVC5V68HE2E7K3UF4CJBG200XHJ36J00J4IW2GOQ7BUGM737NXXJWNR3PLJDAIH74DO1MDJWPA3JF30ZN6S27UJCTY178B2YN8PARM' where id=85; -update noar tt set v2='HG6035JL1SVXPCC0Y5WIBIQO9Z0ZAG3O97ON5T1VS9U44CDNVPTYV5E48540C5Y55V26SNE1RT8L16QOOCSIGI32K1Z5JM6HV5N793PEMPQ9HP7XCXA140LZGV6THQ9BOIVFE351A5ZKW42R53V77WU0T2KQB80ZEH6FP5G6ZHB6269CCQSGX39TTKMANY19CBHVP3IBUIQRB5O1O1YM2W0NO18KJZRY1X8ZW98F48XLMVU1OTHLB9TY33JO2IBDS' where id=85; -update noar ti set v2='HG6035JL1SVXPCC0Y5WIBIQO9Z0ZAG3O97ON5T1VS9U44CDNVPTYV5E48540C5Y55V26SNE1RT8L16QOOCSIGI32K1Z5JM6HV5N793PEMPQ9HP7XCXA140LZGV6THQ9BOIVFE351A5ZKW42R53V77WU0T2KQB80ZEH6FP5G6ZHB6269CCQSGX39TTKMANY19CBHVP3IBUIQRB5O1O1YM2W0NO18KJZRY1X8ZW98F48XLMVU1OTHLB9TY33JO2IBDS' where id=85; -update noar tt set v3='TX7X75C978XFPVZK44W0ZE23IJQ9FHIRNA847XD1HE0NO7KS9BDUHB1ZL1LOM1ZF0ZDNV6YX4GWARKNOM34NYD1K950MXFE833UMMEQK9CH200OVCOZYNGIKWQ0S42K3VVJVM8H0OUKIJXXQXGYKYO69UFI5KXM5VP63MZR5122KKHPDAQRP72L1BIV2PBRR0G75DMH6M6NSHYA6SO4XTY8723YYH97S6D4PB4H1PKBHZCEODVZAG7KGIQASH2MCX' where id=85; -update noar ti set v3='TX7X75C978XFPVZK44W0ZE23IJQ9FHIRNA847XD1HE0NO7KS9BDUHB1ZL1LOM1ZF0ZDNV6YX4GWARKNOM34NYD1K950MXFE833UMMEQK9CH200OVCOZYNGIKWQ0S42K3VVJVM8H0OUKIJXXQXGYKYO69UFI5KXM5VP63MZR5122KKHPDAQRP72L1BIV2PBRR0G75DMH6M6NSHYA6SO4XTY8723YYH97S6D4PB4H1PKBHZCEODVZAG7KGIQASH2MCX' where id=85; -update noar tt set v0='TOI2L67GT79V7MD6EUQARQ6E6TSQLQSD2DV5VCPGKI7E51PRPR6J9EHQXWBZ6J01C6B5ITXP8UQCWMEPVW4QJ2LCZF2MQ0XHRZCQ8K24QPC8NGZKUWAW6M1KIA3NWO9BWXQYOMCAF6GSZIJ2BSKQI9GHULRM5SFP1TRIKMPRNMIZ0KKC95KI5MF33U4DNFPUX2VPK6ZO4XS711ILPRS5DBD4A81IAITZAFHXG71RAT5VQVSIT1M39OK645IUM34YN' where id=86; -update noar ti set v0='TOI2L67GT79V7MD6EUQARQ6E6TSQLQSD2DV5VCPGKI7E51PRPR6J9EHQXWBZ6J01C6B5ITXP8UQCWMEPVW4QJ2LCZF2MQ0XHRZCQ8K24QPC8NGZKUWAW6M1KIA3NWO9BWXQYOMCAF6GSZIJ2BSKQI9GHULRM5SFP1TRIKMPRNMIZ0KKC95KI5MF33U4DNFPUX2VPK6ZO4XS711ILPRS5DBD4A81IAITZAFHXG71RAT5VQVSIT1M39OK645IUM34YN' where id=86; -update noar tt set v1='V8MY7ZS5FSPCKIBBTUEYH34M801ZFUYETP6EN7AVXNMHZLFH15XJS1MMKDXQV44MKZVY5H0I968O7KXVQ8VHTFUK17L763099QTVE86QTP5OF5PZXIQJGH20DC6JPME7P2ELCLR7TO6HM5U9UMO9Z58B8FDYYAABBF1FLQOAXZ2JEAPLHN94G8WDIILHTFYKRA2OG9JFH6IOTSH82STSC3WGBZSG9RZMWSEP4XD8C7CT9PMDADVWAH2NZSOIA1KYU' where id=86; -update noar ti set v1='V8MY7ZS5FSPCKIBBTUEYH34M801ZFUYETP6EN7AVXNMHZLFH15XJS1MMKDXQV44MKZVY5H0I968O7KXVQ8VHTFUK17L763099QTVE86QTP5OF5PZXIQJGH20DC6JPME7P2ELCLR7TO6HM5U9UMO9Z58B8FDYYAABBF1FLQOAXZ2JEAPLHN94G8WDIILHTFYKRA2OG9JFH6IOTSH82STSC3WGBZSG9RZMWSEP4XD8C7CT9PMDADVWAH2NZSOIA1KYU' where id=86; -update noar tt set v2='OI6XGHID2H3682J24XGDFK6T75FV6RTXWRNED2OGGY28MFG0G7F083IQ429QFHIJKTUI83M8KCS40L60WD34BLHA47PWQ1N8OV13FS6QF46Y7SHR79WZ1X7GWY6LE1I5XN1CI5NHS9U5S2STN2XNCW77FIWYP476JCQBXA2GA24B1S6KSPXRBU7T0MDS9A0VI6T3X2NNV5F1UWHCEOLG39C2RYT2SAH22ZPYB9DWBVA9VZ9B46QHQAJM49Y9DEU5O' where id=86; -update noar ti set v2='OI6XGHID2H3682J24XGDFK6T75FV6RTXWRNED2OGGY28MFG0G7F083IQ429QFHIJKTUI83M8KCS40L60WD34BLHA47PWQ1N8OV13FS6QF46Y7SHR79WZ1X7GWY6LE1I5XN1CI5NHS9U5S2STN2XNCW77FIWYP476JCQBXA2GA24B1S6KSPXRBU7T0MDS9A0VI6T3X2NNV5F1UWHCEOLG39C2RYT2SAH22ZPYB9DWBVA9VZ9B46QHQAJM49Y9DEU5O' where id=86; -update noar tt set v3='5O3T1GMMV5WZKHLLE4D7WBIRA8IXU5G0GN59ZXVVHO1MZ1ZX0OV2WKF8T2WO0T0SLLSIICP45RWG5HQOEIYN1TPYUBDKMK27ZTCZ8RX2WSSSXVJ80DH81WDBO2561HLQFMDZVG0R8D0X9FRYMKOOP79HUWBTRNN1PIZ8JP34JLR4AHA7LD88L10I7Z4EXXQ1U809EARQMDPC5R6SGROBMETUDUROLF6D1FXL7DNS3RN3YUTRDAQ33IG4SBDSSW1BR' where id=86; -update noar ti set v3='5O3T1GMMV5WZKHLLE4D7WBIRA8IXU5G0GN59ZXVVHO1MZ1ZX0OV2WKF8T2WO0T0SLLSIICP45RWG5HQOEIYN1TPYUBDKMK27ZTCZ8RX2WSSSXVJ80DH81WDBO2561HLQFMDZVG0R8D0X9FRYMKOOP79HUWBTRNN1PIZ8JP34JLR4AHA7LD88L10I7Z4EXXQ1U809EARQMDPC5R6SGROBMETUDUROLF6D1FXL7DNS3RN3YUTRDAQ33IG4SBDSSW1BR' where id=86; -update noar tt set v0='RK9SI16NM1A7MCANVK3R9G8FYUMGM6KMXTSLPZU5B0H49HV21G3UU53B1528OL2J8HTMVUK8C9XUU0ZVGLH34KRITAN8WYR6TSHFNSK80PO23SHFIJN1MG71IIX081OWSL5K18E7V1D8MTUSWSI45AKQ5L7SWRZYAXF335JIZOD9FKRAX4CMUDDRFMLVYQYCGJ6J9AINQ3PK5BBBDBF7QH7HQ3MYDVM27K0G4MGAWSZT7E0NX9BDPHH7GJ8TISHFR' where id=87; -update noar ti set v0='RK9SI16NM1A7MCANVK3R9G8FYUMGM6KMXTSLPZU5B0H49HV21G3UU53B1528OL2J8HTMVUK8C9XUU0ZVGLH34KRITAN8WYR6TSHFNSK80PO23SHFIJN1MG71IIX081OWSL5K18E7V1D8MTUSWSI45AKQ5L7SWRZYAXF335JIZOD9FKRAX4CMUDDRFMLVYQYCGJ6J9AINQ3PK5BBBDBF7QH7HQ3MYDVM27K0G4MGAWSZT7E0NX9BDPHH7GJ8TISHFR' where id=87; -update noar tt set v1='TN96X4NAF2C5LBAMTZX2JD9FO5CP93EUH9USZH2EYSJG3A99UNMZCY3GOSDMEBYLFCGS6UIHQW71B315JRA6CY1H41ERF40Y2OEKH2WHJCUPACHYNE42KUGV00DPXD49COYTO5RN23SHAWSD1C66NCXAMIZARETT1SRRPHRRZX9KJ2EYB1AQCK11G7JGB49ENBBFL3Z0Q685MN1XWZZZRDI7WWYBU19PRNDDLECA6YTOCX3UHJW0EG58FPQ6LBVKD' where id=87; -update noar ti set v1='TN96X4NAF2C5LBAMTZX2JD9FO5CP93EUH9USZH2EYSJG3A99UNMZCY3GOSDMEBYLFCGS6UIHQW71B315JRA6CY1H41ERF40Y2OEKH2WHJCUPACHYNE42KUGV00DPXD49COYTO5RN23SHAWSD1C66NCXAMIZARETT1SRRPHRRZX9KJ2EYB1AQCK11G7JGB49ENBBFL3Z0Q685MN1XWZZZRDI7WWYBU19PRNDDLECA6YTOCX3UHJW0EG58FPQ6LBVKD' where id=87; -update noar tt set v2='T384QCH1DSJS1RRGH05VTWE6V6AL8UHQ2WNF6H9DFPM89DVGMAJKSG46W3DC27PH17YO7DXEF8D7L1AR6FS9F1EF2Y06M2BWGZS33XB5H2NG0GWGXZH2HUOEKLCTGNBG4QYKKX0OF0WDJWSIOQ5OFIGD2XWEGGNDIU056WCMUU7J5NT7TPATBZG96PG8XB39C7QE6XEDKXKMN6JGAWWDU9G96ZL5WZEX3EXJ8RCDLI9OYFCIFE2YAJB16J9HIVYIB' where id=87; -update noar ti set v2='T384QCH1DSJS1RRGH05VTWE6V6AL8UHQ2WNF6H9DFPM89DVGMAJKSG46W3DC27PH17YO7DXEF8D7L1AR6FS9F1EF2Y06M2BWGZS33XB5H2NG0GWGXZH2HUOEKLCTGNBG4QYKKX0OF0WDJWSIOQ5OFIGD2XWEGGNDIU056WCMUU7J5NT7TPATBZG96PG8XB39C7QE6XEDKXKMN6JGAWWDU9G96ZL5WZEX3EXJ8RCDLI9OYFCIFE2YAJB16J9HIVYIB' where id=87; -update noar tt set v3='34R1ZKMFJ8SX79GP3IALW65FZOXKUI1KQ2OL23AJJN0W2ND1OO55MKGL4T2FSQHI52QNX5YE79DU2F7LJX8RBS2OF6QYKG9JI59HVQOZEIDQKWMS7EVYJDWONOI7DJ20TNQK3BA1BLFUY45WHTJQ2BTIYSDZ168G0BSZJ4MFMNR5M8DQZJTW23HYCRKS76FWBRYZ0CAYQ9L8S6ZAWG1K0MYE1YHDFYF3YBCMIRCEVNMGBGZRM3ZU4G880PXYYW30V' where id=87; -update noar ti set v3='34R1ZKMFJ8SX79GP3IALW65FZOXKUI1KQ2OL23AJJN0W2ND1OO55MKGL4T2FSQHI52QNX5YE79DU2F7LJX8RBS2OF6QYKG9JI59HVQOZEIDQKWMS7EVYJDWONOI7DJ20TNQK3BA1BLFUY45WHTJQ2BTIYSDZ168G0BSZJ4MFMNR5M8DQZJTW23HYCRKS76FWBRYZ0CAYQ9L8S6ZAWG1K0MYE1YHDFYF3YBCMIRCEVNMGBGZRM3ZU4G880PXYYW30V' where id=87; -update noar tt set v0='DNVW1TBYCZQ3SL3XBDAH2PBKT2GT9HVF11P4N18WNEXIHO2OUCPQTI9D1Z2TKACRVOD8OMFK2PSIYA0D15YG29PNDPX1BJ9H7C447JQB0IYFUE9GJGGAYVUDDMTV75J5R1N3SXK69GTG07N4ESJ2YOSP5F69XKSJ3FBMF5D9NTU3HHDWIMEYIL17X0WSHYJFV3YXWOCWSF3E44MJ310M5EG4YHB86C3O92HS8LP6Z8IC9KOLSOA8QC5JPUSSGOPNH' where id=88; -update noar ti set v0='DNVW1TBYCZQ3SL3XBDAH2PBKT2GT9HVF11P4N18WNEXIHO2OUCPQTI9D1Z2TKACRVOD8OMFK2PSIYA0D15YG29PNDPX1BJ9H7C447JQB0IYFUE9GJGGAYVUDDMTV75J5R1N3SXK69GTG07N4ESJ2YOSP5F69XKSJ3FBMF5D9NTU3HHDWIMEYIL17X0WSHYJFV3YXWOCWSF3E44MJ310M5EG4YHB86C3O92HS8LP6Z8IC9KOLSOA8QC5JPUSSGOPNH' where id=88; -update noar tt set v1='GW13J18GQ36UC12VUK84ZG4YWTO84BNLSZYIODIQLK3F8JFJCPCQW5ZRZWZOA5Q1T0DBVGRZWHXSN5RZR02WGMGAVX6LCGNKMD1CKJVSKWBVVTZU1G984S44DWNN75D9EVQ5ZR3SCQK65270ZR7G83I3KOWQH0SJV18IKOA2CYDH7CTFO743W6O9W5A2H40DEUPVGB53VQ2D6YZQBS8S82P4G06VSANHDUXF0L5T9PJPB4TBM2TNJR1W6FWSSXZAT' where id=88; -update noar ti set v1='GW13J18GQ36UC12VUK84ZG4YWTO84BNLSZYIODIQLK3F8JFJCPCQW5ZRZWZOA5Q1T0DBVGRZWHXSN5RZR02WGMGAVX6LCGNKMD1CKJVSKWBVVTZU1G984S44DWNN75D9EVQ5ZR3SCQK65270ZR7G83I3KOWQH0SJV18IKOA2CYDH7CTFO743W6O9W5A2H40DEUPVGB53VQ2D6YZQBS8S82P4G06VSANHDUXF0L5T9PJPB4TBM2TNJR1W6FWSSXZAT' where id=88; -update noar tt set v2='SLLOG6Y0TRHMWJPJGW0L2FDLS2Q3G34KHNE8J449EDWWZ47C8S11YRHBX596S9ICBURRQWMRL7ATMNMYYXB0BH285X9X1668IW1O57SU4F0SH3S54SHDXWNPXEUGKQD3B77KJ0Y959U0J5R3OP0KSARQLN992RNYPEB0KFLF1ES11TO8CWB8N2GDMDYU2PXR950GFSBVDDC7JDBXEUK6E8OK18TZE45NPERBGE01LJZ9DBUF8X7DSTCF8800SJSK8' where id=88; -update noar ti set v2='SLLOG6Y0TRHMWJPJGW0L2FDLS2Q3G34KHNE8J449EDWWZ47C8S11YRHBX596S9ICBURRQWMRL7ATMNMYYXB0BH285X9X1668IW1O57SU4F0SH3S54SHDXWNPXEUGKQD3B77KJ0Y959U0J5R3OP0KSARQLN992RNYPEB0KFLF1ES11TO8CWB8N2GDMDYU2PXR950GFSBVDDC7JDBXEUK6E8OK18TZE45NPERBGE01LJZ9DBUF8X7DSTCF8800SJSK8' where id=88; -update noar tt set v3='8GBW401CC5Z6KC7IE4JOA48GDBLMJ9PY5HU3YD5DODCXQRSR2D58UQDFT7YLOS68YYPS3SCL3PORB5J194DJ9APTD8QWHU4KUOY9WRG200VZSXILE5TVKGCFOVYAOSTV7EP33L0XGR5BHMI0K80Y6UP7Q008MBWJHB7V0N10YIKAKABAO2S9O15VNOQYIZ599FUOG7EF0PCYLBMRPAZAR2CKQJXNU79QJA5XVN14KR5RP6GWN0G65BUEMR0BLKZHA' where id=88; -update noar ti set v3='8GBW401CC5Z6KC7IE4JOA48GDBLMJ9PY5HU3YD5DODCXQRSR2D58UQDFT7YLOS68YYPS3SCL3PORB5J194DJ9APTD8QWHU4KUOY9WRG200VZSXILE5TVKGCFOVYAOSTV7EP33L0XGR5BHMI0K80Y6UP7Q008MBWJHB7V0N10YIKAKABAO2S9O15VNOQYIZ599FUOG7EF0PCYLBMRPAZAR2CKQJXNU79QJA5XVN14KR5RP6GWN0G65BUEMR0BLKZHA' where id=88; -update noar tt set v0='FCRMBUNPXV0ZIOJJMOMTNE1QMTOUTP1AOPLK6LI5LU30190RB7KTZI19K51G3YRETK884VCNCO9QVLZZY5PUPE477R97K0RKIQL1QPDYIQPZCT6QRPOFGY4SQQLC1V8CQBKHVXJLMWUGGKMP8G7X92SISFO1CU8FZHFL015OV934K0KY7EZIE2NLES3JJX6CRLRAR9MGQPQLZYRZFG9H112GLGEANKI3U91MSJ2GKYSQ1NHODGODALC7E32AMKTZ1' where id=89; -update noar ti set v0='FCRMBUNPXV0ZIOJJMOMTNE1QMTOUTP1AOPLK6LI5LU30190RB7KTZI19K51G3YRETK884VCNCO9QVLZZY5PUPE477R97K0RKIQL1QPDYIQPZCT6QRPOFGY4SQQLC1V8CQBKHVXJLMWUGGKMP8G7X92SISFO1CU8FZHFL015OV934K0KY7EZIE2NLES3JJX6CRLRAR9MGQPQLZYRZFG9H112GLGEANKI3U91MSJ2GKYSQ1NHODGODALC7E32AMKTZ1' where id=89; -update noar tt set v1='6EQU2GAN65WL56K1TYSN7AFNU8K57HVH69I0Y3QT3GQH45WKSIP2BO09XH3WC5LTY1C4TAZME92F6VEM89INT48S3QGD6T2UT38XMYNPBI024UNZO36CS3ICGQY6TK9QZ285KD1908YPDDI1PIFN9OINOCU6UR021EGCXFOE0KD7FF4BWG6K9UMTRV47AL2B7SWZNQ8UYQ3NKOOEFPMDX08IFCXADPTY72O3CERKLI4KK6N9QL8VYLHUSJ6W27X0C' where id=89; -update noar ti set v1='6EQU2GAN65WL56K1TYSN7AFNU8K57HVH69I0Y3QT3GQH45WKSIP2BO09XH3WC5LTY1C4TAZME92F6VEM89INT48S3QGD6T2UT38XMYNPBI024UNZO36CS3ICGQY6TK9QZ285KD1908YPDDI1PIFN9OINOCU6UR021EGCXFOE0KD7FF4BWG6K9UMTRV47AL2B7SWZNQ8UYQ3NKOOEFPMDX08IFCXADPTY72O3CERKLI4KK6N9QL8VYLHUSJ6W27X0C' where id=89; -update noar tt set v2='8HX17TDB7IF28USMJSYVWPAA9AZPVRPKXJDV85TFUCDIEOYZJE40S4X4UMZGJEHGJEOO4A332NTFXGGCM09JD8Y32UIBGQ21O3097C2COQ3394DK9XLEY5R1RL453GFYTDSJH8BW5FKAQ8HJ3O7M6DHCK10IWF20OES5WNCTR08740BX4HQFIVYG3U6UAP6BMMTXAA7LPC6ODPJM22RZNEJ8BUX06QWISLQIXBDUEZIXNDXD3N5MLY1EYXPP3WJSO' where id=89; -update noar ti set v2='8HX17TDB7IF28USMJSYVWPAA9AZPVRPKXJDV85TFUCDIEOYZJE40S4X4UMZGJEHGJEOO4A332NTFXGGCM09JD8Y32UIBGQ21O3097C2COQ3394DK9XLEY5R1RL453GFYTDSJH8BW5FKAQ8HJ3O7M6DHCK10IWF20OES5WNCTR08740BX4HQFIVYG3U6UAP6BMMTXAA7LPC6ODPJM22RZNEJ8BUX06QWISLQIXBDUEZIXNDXD3N5MLY1EYXPP3WJSO' where id=89; -update noar tt set v3='CBRMEQSGVPKJX84L68LRNFB0JZJPHNF5LK23C8AEWQVCQZK5HZEVLRMIDN30PYWM2WACK8ACXR35ESB7CGJ5TLS6V4U237T9EYG9IAXDR457QY9NAK7MTE9ZJDCGMV4YPDSH6R76KAEV9O49FH07VW70BDYVRMQS98H7RKMXYOGK4RG3QEN4Z3JB84WEF7JQ9JZG4VAH2KQ895HHU1851NOS6B7KAAPGLWJCI6R5YG1PIHXT8AVW8RGNO9V7BVIYK' where id=89; -update noar ti set v3='CBRMEQSGVPKJX84L68LRNFB0JZJPHNF5LK23C8AEWQVCQZK5HZEVLRMIDN30PYWM2WACK8ACXR35ESB7CGJ5TLS6V4U237T9EYG9IAXDR457QY9NAK7MTE9ZJDCGMV4YPDSH6R76KAEV9O49FH07VW70BDYVRMQS98H7RKMXYOGK4RG3QEN4Z3JB84WEF7JQ9JZG4VAH2KQ895HHU1851NOS6B7KAAPGLWJCI6R5YG1PIHXT8AVW8RGNO9V7BVIYK' where id=89; -update noar tt set v0='QNA1QO5V7X15MRHFIWTPM54OOJTILBI5FY0WNWBWVOYJLUHVG8BZJZ6DBDVXEW909DLE8BGIB2VZ47M8NR5B73H6NSQQMUAAZF39SL8UXAQ3BES3JK4F9MJZ09KNF12QFTH4XJLDR1L1XJUTYLBQEMXSA11NYZB0K9BJG32NKIO8OFJQ4E5B9G8B17E25AMDTNL6ZLO0BBTL6HOBGRXFLM3UOP10QT99G5LC5NF8Y6G7CB6TFCT3YOYYANM45YAKT' where id=90; -update noar ti set v0='QNA1QO5V7X15MRHFIWTPM54OOJTILBI5FY0WNWBWVOYJLUHVG8BZJZ6DBDVXEW909DLE8BGIB2VZ47M8NR5B73H6NSQQMUAAZF39SL8UXAQ3BES3JK4F9MJZ09KNF12QFTH4XJLDR1L1XJUTYLBQEMXSA11NYZB0K9BJG32NKIO8OFJQ4E5B9G8B17E25AMDTNL6ZLO0BBTL6HOBGRXFLM3UOP10QT99G5LC5NF8Y6G7CB6TFCT3YOYYANM45YAKT' where id=90; -update noar tt set v1='1O65WKW4MGFDEV2DBWXLKK49LPHD7VOP0S8XDJYTQKBO7WM00AKDVTT8XT5631B6W1XI2KSAEFY0SX7O3DL3EN17OD574EB2RWYCERM0A9Z1AOW0WZBC2AODEXUKZG11IQHJG4IYDUP89GEFWKEDWRADKOA9XHMV37JTFS0V6461KNPFFIJOIXP8QM341KJ0QOVA80OGYFT1CEBQ08DUR2EN0BSJCGHWA3CKZ3IUGRD1E6VV17QUOMY80FPO67BZP' where id=90; -update noar ti set v1='1O65WKW4MGFDEV2DBWXLKK49LPHD7VOP0S8XDJYTQKBO7WM00AKDVTT8XT5631B6W1XI2KSAEFY0SX7O3DL3EN17OD574EB2RWYCERM0A9Z1AOW0WZBC2AODEXUKZG11IQHJG4IYDUP89GEFWKEDWRADKOA9XHMV37JTFS0V6461KNPFFIJOIXP8QM341KJ0QOVA80OGYFT1CEBQ08DUR2EN0BSJCGHWA3CKZ3IUGRD1E6VV17QUOMY80FPO67BZP' where id=90; -update noar tt set v2='65BYX268QR2EMW17UX9AHB021U6H3MPCB9QJXOSO774S92U28DTREPO0VKC6ROIFYJ10TYA6K75TPX2PMZ1YS90ZJM076CZE721GD63RZAKK3W8MKD1Q7AEEQDIEIABRDWTD1SZ7WLE4XT9C9Z93RIIZY95V3IEUB3T2R6JAC3F2D9ND4MM7NNNWK48XYOEI6PH99T3R3ZO31UA2S3A2LJ4CBA4KGB4JNANILIQIV8ID55VUVDEZ4V8YUD7XSJ2U5' where id=90; -update noar ti set v2='65BYX268QR2EMW17UX9AHB021U6H3MPCB9QJXOSO774S92U28DTREPO0VKC6ROIFYJ10TYA6K75TPX2PMZ1YS90ZJM076CZE721GD63RZAKK3W8MKD1Q7AEEQDIEIABRDWTD1SZ7WLE4XT9C9Z93RIIZY95V3IEUB3T2R6JAC3F2D9ND4MM7NNNWK48XYOEI6PH99T3R3ZO31UA2S3A2LJ4CBA4KGB4JNANILIQIV8ID55VUVDEZ4V8YUD7XSJ2U5' where id=90; -update noar tt set v3='F7WXSO2SLKFA4VR40QPR2YZ37UXZPGOMKSWGDLZCNOUIOQBOLDW5W0ZJPET3F5WLHT7LLZUJ0P4EOHESDFZ06ESFSYS0NHPO0XGS1N0LM5F9BVIKILIPGRNNWF9GFQQ0O6E7QW1CSWWYL0EKR4NI04VWUHM9OJ40YLWCU7WRW8Q35E1KWXT1MYAVCHBOHH01VZQORV1YIQ4IWMJFZC53KETY0OPLGRH3W398VMW02YLY0IQN6CDFSDASH1Q1B1ODI' where id=90; -update noar ti set v3='F7WXSO2SLKFA4VR40QPR2YZ37UXZPGOMKSWGDLZCNOUIOQBOLDW5W0ZJPET3F5WLHT7LLZUJ0P4EOHESDFZ06ESFSYS0NHPO0XGS1N0LM5F9BVIKILIPGRNNWF9GFQQ0O6E7QW1CSWWYL0EKR4NI04VWUHM9OJ40YLWCU7WRW8Q35E1KWXT1MYAVCHBOHH01VZQORV1YIQ4IWMJFZC53KETY0OPLGRH3W398VMW02YLY0IQN6CDFSDASH1Q1B1ODI' where id=90; -update noar tt set v0='BXN41P3XDML9LI2WGX6SEKTREEUJNC35ESVWNYC7KDI5VYTDS26N06JCUKZVEFEOZZMB6YHN590EZT2OUT11DU61HL2R4BGQSSE16GWP0VOBUGPGL1BEDOTUTM0IMSI40F5A0LAK5LZ7IQLLC79LG4XCRBO5G23SLT6P1KXD1KX61086ME55Z1ODH6T4VIM3IJEKXBB7JEI7UQ0FRHP9YCCBNZ40UUVW982ZVILNCFK1XBXCK5SXJDZB921KRQQMK' where id=91; -update noar ti set v0='BXN41P3XDML9LI2WGX6SEKTREEUJNC35ESVWNYC7KDI5VYTDS26N06JCUKZVEFEOZZMB6YHN590EZT2OUT11DU61HL2R4BGQSSE16GWP0VOBUGPGL1BEDOTUTM0IMSI40F5A0LAK5LZ7IQLLC79LG4XCRBO5G23SLT6P1KXD1KX61086ME55Z1ODH6T4VIM3IJEKXBB7JEI7UQ0FRHP9YCCBNZ40UUVW982ZVILNCFK1XBXCK5SXJDZB921KRQQMK' where id=91; -update noar tt set v1='0DJTGK5SQ2C28D1BRS9HVJM0M4SZ50LG6X8YOOC5GYAH2PQE6CWM74QNRVW2LBKF0C97R9WAMPNZCB9CM9MRVDOBVBZZE09OPIWOFARJ0SCX6F9EPJBJT7R8MWD17FB9LIPLBXADYPIVX7DKNJFVT4OE54BVLU3WIA35ODGXW2A9ZK6B6G83WS7LLRTCTGY0E3EYGMXL8LPKU5FPAUJO3MQ3LIPUPWPF66XZWFOF25GCRAN0DHTL2QEHG2C53UCY5' where id=91; -update noar ti set v1='0DJTGK5SQ2C28D1BRS9HVJM0M4SZ50LG6X8YOOC5GYAH2PQE6CWM74QNRVW2LBKF0C97R9WAMPNZCB9CM9MRVDOBVBZZE09OPIWOFARJ0SCX6F9EPJBJT7R8MWD17FB9LIPLBXADYPIVX7DKNJFVT4OE54BVLU3WIA35ODGXW2A9ZK6B6G83WS7LLRTCTGY0E3EYGMXL8LPKU5FPAUJO3MQ3LIPUPWPF66XZWFOF25GCRAN0DHTL2QEHG2C53UCY5' where id=91; -update noar tt set v2='F8I1Y2DS2GMRUL65S8BAZFCRBOWFU5U9X4C5NAD6TE0Z5OP536AWFCQ3HFLSXVIMGKRFWK4JYZWDMA60LP1FBHRXH1ZIW8HNY39U4XQGDNW95XXM6JL6F0TFFPEEIV0RPC8HOCSVPHCLOW5A144F48952XEEFEZ46AFAKHJGU71GVXVWLZ7KFX84HM6ANUSKF2AAQ6OK4Y8IZHFURJX5ZXC8PHOUU6XEKFHBIWDNK70X6HINH8TN4HFHIL6QN5KPI' where id=91; -update noar ti set v2='F8I1Y2DS2GMRUL65S8BAZFCRBOWFU5U9X4C5NAD6TE0Z5OP536AWFCQ3HFLSXVIMGKRFWK4JYZWDMA60LP1FBHRXH1ZIW8HNY39U4XQGDNW95XXM6JL6F0TFFPEEIV0RPC8HOCSVPHCLOW5A144F48952XEEFEZ46AFAKHJGU71GVXVWLZ7KFX84HM6ANUSKF2AAQ6OK4Y8IZHFURJX5ZXC8PHOUU6XEKFHBIWDNK70X6HINH8TN4HFHIL6QN5KPI' where id=91; -update noar tt set v3='07LV3REF60SP7BB98CU8BRJBQ25JIZLU3N8I2AZ9FFSGQ30KLL7SAKRXPAFPD8WCOWAA0TYIZZY5AW0FNIPK20O38ZT140QWG1DXMDBT34FIF6U9W0RN2OXGU9MV56PHM2PAG2X3OS5C7I2QEQBK4ORKIRWCEV40KJ14CENPXWKJ1E75LU7OYWHD584HTN537T7H0JDD83PD1Y3OYOO12LZ560PMDZ895PH1SUWELWAEZPO6QU9T6YDEGMKPHKATD' where id=91; -update noar ti set v3='07LV3REF60SP7BB98CU8BRJBQ25JIZLU3N8I2AZ9FFSGQ30KLL7SAKRXPAFPD8WCOWAA0TYIZZY5AW0FNIPK20O38ZT140QWG1DXMDBT34FIF6U9W0RN2OXGU9MV56PHM2PAG2X3OS5C7I2QEQBK4ORKIRWCEV40KJ14CENPXWKJ1E75LU7OYWHD584HTN537T7H0JDD83PD1Y3OYOO12LZ560PMDZ895PH1SUWELWAEZPO6QU9T6YDEGMKPHKATD' where id=91; -update noar tt set v0='H7VXGSD9HW21CEJZEQ0ZKAQCDS7DHN0W2G4R6SH8QCCB9S6NYXSDD5LV0G3GGT771ODS8M3A4QBBB6I2IOVIUDU66UJME4MH3YBNVXCE40ABPQLHTGYCKHGSTBCT9P48UFW9YDZYK5DBNLELLCASRUQXBQP3GWWWRNHTIHTCKVCXEDEFXNEY9KNMVEC08DH028T8HBFH1T7TF3AN21LC205WX344A9ZKPNRIUI18IG03VBWUUO2NMB2SHH99066IE' where id=92; -update noar ti set v0='H7VXGSD9HW21CEJZEQ0ZKAQCDS7DHN0W2G4R6SH8QCCB9S6NYXSDD5LV0G3GGT771ODS8M3A4QBBB6I2IOVIUDU66UJME4MH3YBNVXCE40ABPQLHTGYCKHGSTBCT9P48UFW9YDZYK5DBNLELLCASRUQXBQP3GWWWRNHTIHTCKVCXEDEFXNEY9KNMVEC08DH028T8HBFH1T7TF3AN21LC205WX344A9ZKPNRIUI18IG03VBWUUO2NMB2SHH99066IE' where id=92; -update noar tt set v1='2N6GCHM78TBIOTYBHCCFIK5XYNKK9VF149X3QNY6WNKUJR4BYLACQ3W6PRPDPXIAITO1SG245S6U0NII5UDL09PAI00QI0RS2LWLSA7BVNZW8K3OK87SCA4P41F7OJW85FBU4M1EM4JMWUXZULX2UDXKZ3TJDWE6XWAHH0V6SVYHAIA9N1NNDA8HIZ2Y6O6NEFD9CM9LGO7FYQEV12UMR1KD2XZFMLECCQHISM5ILMEGM9FIOMNPUAVD7GSOFPIDC' where id=92; -update noar ti set v1='2N6GCHM78TBIOTYBHCCFIK5XYNKK9VF149X3QNY6WNKUJR4BYLACQ3W6PRPDPXIAITO1SG245S6U0NII5UDL09PAI00QI0RS2LWLSA7BVNZW8K3OK87SCA4P41F7OJW85FBU4M1EM4JMWUXZULX2UDXKZ3TJDWE6XWAHH0V6SVYHAIA9N1NNDA8HIZ2Y6O6NEFD9CM9LGO7FYQEV12UMR1KD2XZFMLECCQHISM5ILMEGM9FIOMNPUAVD7GSOFPIDC' where id=92; -update noar tt set v2='G16HEGDGKKWUES48KP5L801HZCUEAXCXJL2BMISXVWNPEHU0JQHJEOSVACMAUBMSQ79WEU2PZ8JX92V0TU9078Y0MQTAD3J1MNOIOPR79PB08RM87H624K39SRQZWA2BITVAJ6NWOOG2RGVMJS4NHOU49YHNRCWCOYGA5YQ2ODWH3C6GJ10Y1G7Q8KDGSEEOLWMHQB3ULOBIANT2L205WTVJ3X1LCQL4DR99KTTFM4GT339FPROE2ED00B781TS3B' where id=92; -update noar ti set v2='G16HEGDGKKWUES48KP5L801HZCUEAXCXJL2BMISXVWNPEHU0JQHJEOSVACMAUBMSQ79WEU2PZ8JX92V0TU9078Y0MQTAD3J1MNOIOPR79PB08RM87H624K39SRQZWA2BITVAJ6NWOOG2RGVMJS4NHOU49YHNRCWCOYGA5YQ2ODWH3C6GJ10Y1G7Q8KDGSEEOLWMHQB3ULOBIANT2L205WTVJ3X1LCQL4DR99KTTFM4GT339FPROE2ED00B781TS3B' where id=92; -update noar tt set v3='LUISH4SMBA0GU26E7EF5Y20881057BZ283VUJWLUVQP3MCCUT3MPCUAT8A9JRYBBRG089V2NHO6QO69K4XO79JWJ72XKSXZWF79JLPEWIQ0HBJ5TEZ1YWGF8Y94Y1POPFGODNIAXHIEU46OXVBUMJDNRSRRT7BXU9NAAY3RWR904XELIR79XFF8NFTODWO3TSU4ZMS84AKULST7D9TGW6XFVA8HXM2PVAQHGWSHRLTVCS2GX8201YGG9HJJBYIVU2' where id=92; -update noar ti set v3='LUISH4SMBA0GU26E7EF5Y20881057BZ283VUJWLUVQP3MCCUT3MPCUAT8A9JRYBBRG089V2NHO6QO69K4XO79JWJ72XKSXZWF79JLPEWIQ0HBJ5TEZ1YWGF8Y94Y1POPFGODNIAXHIEU46OXVBUMJDNRSRRT7BXU9NAAY3RWR904XELIR79XFF8NFTODWO3TSU4ZMS84AKULST7D9TGW6XFVA8HXM2PVAQHGWSHRLTVCS2GX8201YGG9HJJBYIVU2' where id=92; -update noar tt set v0='6UM3F9UHKZ2ISW2FI8IPN1UCATLKVC6A1P6VJ39XLK8NZCF2RWCCOBH4VA4BTUR3LLNYTX6MJG5Z1TXIFP2KJQTPC4TJ2DPT67Q2FF6D7UVVMUUYESVEOJNA0TWCJOT8V2K0K575TXS3E1C4G199SXD0HD1MGJ253WZKPWNQLHQPCXRJDRF4AI1BW96Y9GVDKPNDNGNM2YYV8ASQPH78B8E6K5XGAXMMUDHA6CCSZUNDYMEPK8UGJXDUVG945DJUU' where id=93; -update noar ti set v0='6UM3F9UHKZ2ISW2FI8IPN1UCATLKVC6A1P6VJ39XLK8NZCF2RWCCOBH4VA4BTUR3LLNYTX6MJG5Z1TXIFP2KJQTPC4TJ2DPT67Q2FF6D7UVVMUUYESVEOJNA0TWCJOT8V2K0K575TXS3E1C4G199SXD0HD1MGJ253WZKPWNQLHQPCXRJDRF4AI1BW96Y9GVDKPNDNGNM2YYV8ASQPH78B8E6K5XGAXMMUDHA6CCSZUNDYMEPK8UGJXDUVG945DJUU' where id=93; -update noar tt set v1='YKWISDDQSSG39UNNF5QG83YL6DMBAHKQU8T0PL26YQZOXG9W88HDT3Y8KLT7DTE2L38PYB9WTVFDYTJIBPDHX6XGSXPIWJGTHE9V559KPQ3OE06IRVHHLZRFDO92THBD28WACKKVNZ3X4Y00QSPO346NFI0HOBW624AYXFLVFL884RBAEV0T59MSC0TRBB2EJQAKMDMIUNJB93UY6OXVE0TL98SKMUT7AVYSZ49ONUR9CLJ1MY05AH3QMTBTSCG0A' where id=93; -update noar ti set v1='YKWISDDQSSG39UNNF5QG83YL6DMBAHKQU8T0PL26YQZOXG9W88HDT3Y8KLT7DTE2L38PYB9WTVFDYTJIBPDHX6XGSXPIWJGTHE9V559KPQ3OE06IRVHHLZRFDO92THBD28WACKKVNZ3X4Y00QSPO346NFI0HOBW624AYXFLVFL884RBAEV0T59MSC0TRBB2EJQAKMDMIUNJB93UY6OXVE0TL98SKMUT7AVYSZ49ONUR9CLJ1MY05AH3QMTBTSCG0A' where id=93; -update noar tt set v2='N6G5M55YHRV5QNDIY7ZFPZIKZ7TFVFI6Z3XKQLIJO2HKLZHCHX9G2CIH36W914OKMBD836RBCIVUJVZWVACMQODIIIWQQ906J52X05BH83DI75YTYPST28HHEP748FPM8OATD5T9F1BR0A62MA4F1OCON588906QQD9NSJFUFUI90BYEWZLYJZ49LVUMSXKQDIGEK303GQS6L4QILZKIC46MW0GNXSH4T8ZCRKMPWUDGFK55RC49BT6UPDVJK0NM8' where id=93; -update noar ti set v2='N6G5M55YHRV5QNDIY7ZFPZIKZ7TFVFI6Z3XKQLIJO2HKLZHCHX9G2CIH36W914OKMBD836RBCIVUJVZWVACMQODIIIWQQ906J52X05BH83DI75YTYPST28HHEP748FPM8OATD5T9F1BR0A62MA4F1OCON588906QQD9NSJFUFUI90BYEWZLYJZ49LVUMSXKQDIGEK303GQS6L4QILZKIC46MW0GNXSH4T8ZCRKMPWUDGFK55RC49BT6UPDVJK0NM8' where id=93; -update noar tt set v3='J9S8RYACHQS0ADM472FULUJXP503SSWYBZXY5K5DRPUOLAY1FPK0FT04IL4TFTBTLGX4VAB1EO8ZUC9U0HUABJZOEQO85GPSQ8S4O5P7YK8Q4K7QPV3HZU0IA8J9F88CBG1Y6XXC4VQAZA3CGSFO491GH47YQ8R6Z0F67MPGUAL7Z76IF2E4YBR1E0L018VBICHAF24JQEX03C9A6UHNFW45A0XP9W6GOOTF0CEF5Z6BJBK0VSZG4FIJ2BRCAKAIQ' where id=93; -update noar ti set v3='J9S8RYACHQS0ADM472FULUJXP503SSWYBZXY5K5DRPUOLAY1FPK0FT04IL4TFTBTLGX4VAB1EO8ZUC9U0HUABJZOEQO85GPSQ8S4O5P7YK8Q4K7QPV3HZU0IA8J9F88CBG1Y6XXC4VQAZA3CGSFO491GH47YQ8R6Z0F67MPGUAL7Z76IF2E4YBR1E0L018VBICHAF24JQEX03C9A6UHNFW45A0XP9W6GOOTF0CEF5Z6BJBK0VSZG4FIJ2BRCAKAIQ' where id=93; -update noar tt set v0='EM1A2R5V41XC5VG64YL53YNWNO51KR6QDFUJ3UKIYHLJUNTBLDO4VOG57KJOTC86GLLWXWN0N72CQ4CZYYKNAYKG8CAGHPW1QIIFJ2F4IBYQO7O7C6LWEM1BJM0W89K55HPPUNB2V119E0LN0QP5ICRCF9YQ239HLOEE3XE8H6W0S63RPOQ6RBTX8H5IWPT4PWX1L9EEDPRB8819EX12GH05AQZLDUZ0Z0IRGOE4XCCRE5KM311EN5Z6W3JCGDKDQ' where id=94; -update noar ti set v0='EM1A2R5V41XC5VG64YL53YNWNO51KR6QDFUJ3UKIYHLJUNTBLDO4VOG57KJOTC86GLLWXWN0N72CQ4CZYYKNAYKG8CAGHPW1QIIFJ2F4IBYQO7O7C6LWEM1BJM0W89K55HPPUNB2V119E0LN0QP5ICRCF9YQ239HLOEE3XE8H6W0S63RPOQ6RBTX8H5IWPT4PWX1L9EEDPRB8819EX12GH05AQZLDUZ0Z0IRGOE4XCCRE5KM311EN5Z6W3JCGDKDQ' where id=94; -update noar tt set v1='L9285JDY5DEB8H70RKSOD83JCPQUWT53CZRDGNN1R9ZRC35X0TBD4891YTTT2D559HOXMMVK4A6U2NRUXS3HJMQCZLWT7WS8XB45UW60W42PWUPULIFE3G1H5B2DD3FUW9YCS56KF4OBHTXWOD9F93GTOE5185M4IVS9FNTX75UZ1WYDSRR8GE41R1VKLGTV0M8SNLCOJEEZT191YRIA71F1CG4EBDG3ZN1QCZ7O2HSQ35GEKBHTSNWW8FG0QW0MP' where id=94; -update noar ti set v1='L9285JDY5DEB8H70RKSOD83JCPQUWT53CZRDGNN1R9ZRC35X0TBD4891YTTT2D559HOXMMVK4A6U2NRUXS3HJMQCZLWT7WS8XB45UW60W42PWUPULIFE3G1H5B2DD3FUW9YCS56KF4OBHTXWOD9F93GTOE5185M4IVS9FNTX75UZ1WYDSRR8GE41R1VKLGTV0M8SNLCOJEEZT191YRIA71F1CG4EBDG3ZN1QCZ7O2HSQ35GEKBHTSNWW8FG0QW0MP' where id=94; -update noar tt set v2='F842MVCK5O8AOUPAR46T9N3CEHMQ13UQ8O0IN85DDVFPXA2I8Q5AQPANL8W707TTT43IG61TWRG691QPFNZXPYKH197MVWJYQ57RD4DZ95P6XEQB5KA1P7NON14H5D44WVRSVKYIGVRI28EXMEZKYNEBYH6LX8OIBOJ4YXLO06JZ9K65B7CKO64L7XXAGL6HLES0DOGOLXV5QKA8MUFJHM091ETPZUZ18MN0JLSQ0LFAZNM80CB5ZCBWSJVM4Q4DE' where id=94; -update noar ti set v2='F842MVCK5O8AOUPAR46T9N3CEHMQ13UQ8O0IN85DDVFPXA2I8Q5AQPANL8W707TTT43IG61TWRG691QPFNZXPYKH197MVWJYQ57RD4DZ95P6XEQB5KA1P7NON14H5D44WVRSVKYIGVRI28EXMEZKYNEBYH6LX8OIBOJ4YXLO06JZ9K65B7CKO64L7XXAGL6HLES0DOGOLXV5QKA8MUFJHM091ETPZUZ18MN0JLSQ0LFAZNM80CB5ZCBWSJVM4Q4DE' where id=94; -update noar tt set v3='QICNQOQ99XPHAVUQG48270CPQ4D75H315M4HZI66FFPUF4PL08FHH58CA6MK8H8Z74ASTHEIUXBS580BYVBEC8MFDH6WH8HOODJUMRQA1JA7GTJ61KAM2CEGHF9VNCNZ90PGJ2A3C3MPUVYDMGKMFAVJ87WXK21WU49KM7PTBMSF7EG60TBO2VRWA2KB9A7E3ZUH9Y53AW0N4JBN19ZCHUM1NRAEIPH0SZKCPO22EH56QDQ3OG1QUPZ63U1M2MJPU' where id=94; -update noar ti set v3='QICNQOQ99XPHAVUQG48270CPQ4D75H315M4HZI66FFPUF4PL08FHH58CA6MK8H8Z74ASTHEIUXBS580BYVBEC8MFDH6WH8HOODJUMRQA1JA7GTJ61KAM2CEGHF9VNCNZ90PGJ2A3C3MPUVYDMGKMFAVJ87WXK21WU49KM7PTBMSF7EG60TBO2VRWA2KB9A7E3ZUH9Y53AW0N4JBN19ZCHUM1NRAEIPH0SZKCPO22EH56QDQ3OG1QUPZ63U1M2MJPU' where id=94; -update noar tt set v0='9NBLHVQLDNQ58F9OZYQZZTUACHVCAMHNEXEAP7NOQ2T4U0HFQDPZ4BISMVIASTZZ05B23MB87WEBPHD44RKLV7RY6WGRE35U77HEM1I8FF22AE4915ACNLA27ICTZA7OI6H530Z5EU0AMFKGQJXIGYV1JA0IC7O7KINMXDTXYA7G83SPNAQPFB8WN0HN1704DRRFZ1KEW5RB68G9X100OY8SZ9CFN3B10JTCSMD2JJB27U2FO5AEB4TU9XWVK84DM' where id=95; -update noar ti set v0='9NBLHVQLDNQ58F9OZYQZZTUACHVCAMHNEXEAP7NOQ2T4U0HFQDPZ4BISMVIASTZZ05B23MB87WEBPHD44RKLV7RY6WGRE35U77HEM1I8FF22AE4915ACNLA27ICTZA7OI6H530Z5EU0AMFKGQJXIGYV1JA0IC7O7KINMXDTXYA7G83SPNAQPFB8WN0HN1704DRRFZ1KEW5RB68G9X100OY8SZ9CFN3B10JTCSMD2JJB27U2FO5AEB4TU9XWVK84DM' where id=95; -update noar tt set v1='7L00YVBJPY9IW9O7HBYHE7WBV2FO3JQDPZWU1M4V8XQIPH9DACJL3T4I9I19NSIE0RIPBVD11AH7BI366XHDF3930OHLV3ID9ST0GW1PWMR9EPF9RGCLQ6I9YLID6EGNP3ZT25FK9U4195J0F8TWZH88F3K39AKNV1BY0N6BYC2I55EUW3970MR06I0YL40KAGKZY50S3WFOGAK9ST7FC8WQDRUSO6V7DIPO7612R16NKS46Z30FBWC7G331Z6O70' where id=95; -update noar ti set v1='7L00YVBJPY9IW9O7HBYHE7WBV2FO3JQDPZWU1M4V8XQIPH9DACJL3T4I9I19NSIE0RIPBVD11AH7BI366XHDF3930OHLV3ID9ST0GW1PWMR9EPF9RGCLQ6I9YLID6EGNP3ZT25FK9U4195J0F8TWZH88F3K39AKNV1BY0N6BYC2I55EUW3970MR06I0YL40KAGKZY50S3WFOGAK9ST7FC8WQDRUSO6V7DIPO7612R16NKS46Z30FBWC7G331Z6O70' where id=95; -update noar tt set v2='OFUU24WX9EHGQZ1N5TXO5UTFNSKI6E4IMUTUVAAWTLEHBDLDRT0AUOGTYHWUD3RSS7XB960DTMJVOJ7TBOP9LMDJL4I70JF64QYLTPDBI9YSQ7V24PF5WYUOB3ZB8Z32NFNO12JHD8CT16LA09E12NMCK1YPETDW2JIHHAI5984I9YY5DX5TKGWRN67G0RZT13HPMEX910PYZ97DRX7GK7Z58Y908MCH9I6C2W7B5TGH6ZLX72K3ZIV7UTZRXRE8V' where id=95; -update noar ti set v2='OFUU24WX9EHGQZ1N5TXO5UTFNSKI6E4IMUTUVAAWTLEHBDLDRT0AUOGTYHWUD3RSS7XB960DTMJVOJ7TBOP9LMDJL4I70JF64QYLTPDBI9YSQ7V24PF5WYUOB3ZB8Z32NFNO12JHD8CT16LA09E12NMCK1YPETDW2JIHHAI5984I9YY5DX5TKGWRN67G0RZT13HPMEX910PYZ97DRX7GK7Z58Y908MCH9I6C2W7B5TGH6ZLX72K3ZIV7UTZRXRE8V' where id=95; -update noar tt set v3='K2YW1ZKUH39WHDUCHRRODIMWZ2BT8FDBKQJ5F7SJXMJX144OQTDLEWHGXDDWY3RLV5PQGV9LTDFTAKOHP8O9NGUN89HW9R1MANZJGVNX6DBAMZOP4LF66C1OLVDY9EF08Q6JO1O78P4RFM5Z4M0BUUO5EZHM8NSEXGHF76QQSO8UN2IBYFZL6EGEUTFJCR0G360YR4N94YZ5KN03XAJVK9ODQ7JD7ZCTOV9AV9S0DHLHT2O5NH49C74MS9Q7WE06G' where id=95; -update noar ti set v3='K2YW1ZKUH39WHDUCHRRODIMWZ2BT8FDBKQJ5F7SJXMJX144OQTDLEWHGXDDWY3RLV5PQGV9LTDFTAKOHP8O9NGUN89HW9R1MANZJGVNX6DBAMZOP4LF66C1OLVDY9EF08Q6JO1O78P4RFM5Z4M0BUUO5EZHM8NSEXGHF76QQSO8UN2IBYFZL6EGEUTFJCR0G360YR4N94YZ5KN03XAJVK9ODQ7JD7ZCTOV9AV9S0DHLHT2O5NH49C74MS9Q7WE06G' where id=95; -update noar tt set v0='23PRE68SZL8CB8MDQ9RCHIWLP7QLE6A89FWVUBVTNDLFM8D1IXJ3NIXPOGLH65FJERVAW9720ALGSBNYL04IB6HPBEOK7B2IAKBKYOZ9QWYM8GCJAAGGVZ9UCJQM978BTHC4LVW40LCCG4KZP6DSMCAUE8SMAGML6JO66FXAUTN5W4S4E1037W59EIL2W3VV56N3VG7DO6TYUTB9UPV4KNLCVU7FUHMMXPES69RWVD2JEJPFU8WWRT4R27PAWGD87' where id=96; -update noar ti set v0='23PRE68SZL8CB8MDQ9RCHIWLP7QLE6A89FWVUBVTNDLFM8D1IXJ3NIXPOGLH65FJERVAW9720ALGSBNYL04IB6HPBEOK7B2IAKBKYOZ9QWYM8GCJAAGGVZ9UCJQM978BTHC4LVW40LCCG4KZP6DSMCAUE8SMAGML6JO66FXAUTN5W4S4E1037W59EIL2W3VV56N3VG7DO6TYUTB9UPV4KNLCVU7FUHMMXPES69RWVD2JEJPFU8WWRT4R27PAWGD87' where id=96; -update noar tt set v1='2EGQV6UVS25FQ05O6WOOW66G9DX1WHDP90DBIY0YFHJ0M8D3RTZ628VEYMLY69XVMWZVRCJLJX0TKEV2DK20QNNHU694GCRJ7VJM4W527G1K1HYGSXXEDIYB6UA02BR77KITUXYBOEKDKS9OB9DPFEYGAO17PZZKJF2KYBCMO5I82Q8W6PWXQ7CBEKN0QTTTM9W6AF35XXZYORM1EUHQZSRG9RG1VV7YVR3JF4TI4RQL3878114JV8YJIOUF08FHO' where id=96; -update noar ti set v1='2EGQV6UVS25FQ05O6WOOW66G9DX1WHDP90DBIY0YFHJ0M8D3RTZ628VEYMLY69XVMWZVRCJLJX0TKEV2DK20QNNHU694GCRJ7VJM4W527G1K1HYGSXXEDIYB6UA02BR77KITUXYBOEKDKS9OB9DPFEYGAO17PZZKJF2KYBCMO5I82Q8W6PWXQ7CBEKN0QTTTM9W6AF35XXZYORM1EUHQZSRG9RG1VV7YVR3JF4TI4RQL3878114JV8YJIOUF08FHO' where id=96; -update noar tt set v2='8KCXVTPSXDWRKGYPOGVBWZW8XAZWQEHTAIYIBH6DBRYR61F7MCGMAM91GFM3JXUXNJZ3TA5BUCD4B6ZYYAGYEUZKA0XF8ANXZG2Z0NFDIVJSPLGDI2Z5PI5WW64DQZX0X8EG7B0LEVWVAUNZ0VRE8E5VJMTWTWNLDEA8MX13I2ZP4STC2V362YKHHUO85SSL3GUQELA4KA89FEUODU4Q5WS7GGGAM1YGKIOH0GLWOL11Q6S5Z9G3CGPEJO5Z6RSGY' where id=96; -update noar ti set v2='8KCXVTPSXDWRKGYPOGVBWZW8XAZWQEHTAIYIBH6DBRYR61F7MCGMAM91GFM3JXUXNJZ3TA5BUCD4B6ZYYAGYEUZKA0XF8ANXZG2Z0NFDIVJSPLGDI2Z5PI5WW64DQZX0X8EG7B0LEVWVAUNZ0VRE8E5VJMTWTWNLDEA8MX13I2ZP4STC2V362YKHHUO85SSL3GUQELA4KA89FEUODU4Q5WS7GGGAM1YGKIOH0GLWOL11Q6S5Z9G3CGPEJO5Z6RSGY' where id=96; -update noar tt set v3='OJ3S0HG0LPIMW4216CVP7Q33BT8Q0P88XPL1447M5YS59R64122ONV1N0EV3RPVKNIWC4NHTO1QL3O42Z6O0T86Q5HY2QG7ZKG5CFIRR289ULWVNBGUJYUZRE2YIHKQ9JPG5LTXRFQIVO3X96KOIW0K56VH3VKVO4MFQVIT5J68U58DHKKO4E6CRSIFU2EKZUQMTID93QCL26G3RYOC4SMDIWNSPV0I3FSV0NH8ZTT5HLHOV08YW63OWG29CI82GB' where id=96; -update noar ti set v3='OJ3S0HG0LPIMW4216CVP7Q33BT8Q0P88XPL1447M5YS59R64122ONV1N0EV3RPVKNIWC4NHTO1QL3O42Z6O0T86Q5HY2QG7ZKG5CFIRR289ULWVNBGUJYUZRE2YIHKQ9JPG5LTXRFQIVO3X96KOIW0K56VH3VKVO4MFQVIT5J68U58DHKKO4E6CRSIFU2EKZUQMTID93QCL26G3RYOC4SMDIWNSPV0I3FSV0NH8ZTT5HLHOV08YW63OWG29CI82GB' where id=96; -update noar tt set v0='OQ7GNF5TEE5DETEWY4YXA40M4HYDVPFH25YBKSXT21CN2CIHCP6KZU4A0TX4DPGTK6CP8ZE9JONP92LCD0IM3FVZ1HR0YG2XHRZMCBBBDSSVIP144XTQ164BCOYMPGKW4NNO4H0PH90IESD6DZMO71355J1B4E9LKO5K2TY9CMA8X8DH9YANVBZWTW0EC52SZGHN9X8O5NL85T5ITK33Y1GDBMYAZ2ZWQXB88XV0HIKR6QWB6PHAHF26ZEJF2DIXI' where id=97; -update noar ti set v0='OQ7GNF5TEE5DETEWY4YXA40M4HYDVPFH25YBKSXT21CN2CIHCP6KZU4A0TX4DPGTK6CP8ZE9JONP92LCD0IM3FVZ1HR0YG2XHRZMCBBBDSSVIP144XTQ164BCOYMPGKW4NNO4H0PH90IESD6DZMO71355J1B4E9LKO5K2TY9CMA8X8DH9YANVBZWTW0EC52SZGHN9X8O5NL85T5ITK33Y1GDBMYAZ2ZWQXB88XV0HIKR6QWB6PHAHF26ZEJF2DIXI' where id=97; -update noar tt set v1='SM1L8UU5DQY1A9M8V0Q49K7JKHILKLGOQPCNLMG221GEVGZ07TUPFDAZLZ3EUOGFDGW3RKW2X608IY9AWEGFMKMUGMN9KYW4PVHOS2I136RU53LWWISOJLABZWTAB19P66VODRM4USHX4FFBRFTXNK19SD4A9CIAIFRLTGLMJ958P14ZF1TAOFD6JFO70SB9CN8XTV2H43NW0JJ07T0AG7IGO8QX948W5AHBNNDM4HB8UQ982G9MIWNROM56CKD7F' where id=97; -update noar ti set v1='SM1L8UU5DQY1A9M8V0Q49K7JKHILKLGOQPCNLMG221GEVGZ07TUPFDAZLZ3EUOGFDGW3RKW2X608IY9AWEGFMKMUGMN9KYW4PVHOS2I136RU53LWWISOJLABZWTAB19P66VODRM4USHX4FFBRFTXNK19SD4A9CIAIFRLTGLMJ958P14ZF1TAOFD6JFO70SB9CN8XTV2H43NW0JJ07T0AG7IGO8QX948W5AHBNNDM4HB8UQ982G9MIWNROM56CKD7F' where id=97; -update noar tt set v2='7TXWVN1C04LBHE1JO7GZ2BNISUMCBQCL1CUIW5AQIIZZSLWSRNF4GZGZAGCQICI1Y9A58ZV59XGTRFEQTXSD66AWD8S0Y80ME0QV1WH4F1ZBZ3SBKKCVPW32CJCYDII3HCFVA2GDUJG670UVLT2BO9V0PD77GP5XIF28DP7NDRMJ53DY1F0ZF09CIJ2VLK71EFJHX0OWEOZ4LZJGG2KLSAD9TMCKBNT08Z4E7XBHG6784M5GF5KIBCYGC29REUUR8' where id=97; -update noar ti set v2='7TXWVN1C04LBHE1JO7GZ2BNISUMCBQCL1CUIW5AQIIZZSLWSRNF4GZGZAGCQICI1Y9A58ZV59XGTRFEQTXSD66AWD8S0Y80ME0QV1WH4F1ZBZ3SBKKCVPW32CJCYDII3HCFVA2GDUJG670UVLT2BO9V0PD77GP5XIF28DP7NDRMJ53DY1F0ZF09CIJ2VLK71EFJHX0OWEOZ4LZJGG2KLSAD9TMCKBNT08Z4E7XBHG6784M5GF5KIBCYGC29REUUR8' where id=97; -update noar tt set v3='3C5FU7HS2ALTSJ7X424SMIJQ4LMQKMHLJAU37JTMAARV587HDPTEA7J9ONL5G3MFWIC966KWYRXT53XLNKZ7CBLLKNU75VB74INOY7UNUNVWGQHVDGP72PF4ZBIDACTTB1MZX6UIFGI5DCCE6PYKYUHC3DSILGY2DWWMOOELH6JMEA9TZ8O99BXGOZ68IOM6P6TCO0YM5N9E6UWYJO8QEI467AHGHNOY7LKEO3NTLMXKK32OE6809XYLHW37END3L' where id=97; -update noar ti set v3='3C5FU7HS2ALTSJ7X424SMIJQ4LMQKMHLJAU37JTMAARV587HDPTEA7J9ONL5G3MFWIC966KWYRXT53XLNKZ7CBLLKNU75VB74INOY7UNUNVWGQHVDGP72PF4ZBIDACTTB1MZX6UIFGI5DCCE6PYKYUHC3DSILGY2DWWMOOELH6JMEA9TZ8O99BXGOZ68IOM6P6TCO0YM5N9E6UWYJO8QEI467AHGHNOY7LKEO3NTLMXKK32OE6809XYLHW37END3L' where id=97; -update noar tt set v0='O6TA79MCZWQ2NZNDDC2MSMS9G9OG8AC9WX4RL4DG9KBF0Y16571L2K0E25FA2UJHLK2F3I9TI7OB3H9UTZ4LL9A5SXA24RRUPLTBP4X9QETNJJ6BY52RZIKQHGHQC8BBCK6ZF08CKMPDBIBYND4T7MG569Y52MACO4VJJFFDZD2KE2Y8G6MJKAKMIFB9LMSGPTYAW0BDXRL50EQJUCQBT0U0TDQIONFII9BIBP4NIBPM5TAXIXJYWYQL7IB1S5FU3' where id=98; -update noar ti set v0='O6TA79MCZWQ2NZNDDC2MSMS9G9OG8AC9WX4RL4DG9KBF0Y16571L2K0E25FA2UJHLK2F3I9TI7OB3H9UTZ4LL9A5SXA24RRUPLTBP4X9QETNJJ6BY52RZIKQHGHQC8BBCK6ZF08CKMPDBIBYND4T7MG569Y52MACO4VJJFFDZD2KE2Y8G6MJKAKMIFB9LMSGPTYAW0BDXRL50EQJUCQBT0U0TDQIONFII9BIBP4NIBPM5TAXIXJYWYQL7IB1S5FU3' where id=98; -update noar tt set v1='UX8STJROHRKWVBKFCNB49AICJCPKRTRU3V29ILHOAOPVKNLFF58GJLIWQZMZH2RXZLOEUKVXFYXSIBY8KEAFNLEIL60VW9Z1ZJ78PU83OVAV8NQ2UE6GCUEGMULEW5X59DBVI1CT1TNPQLOKGY7MUQBEZ758MI54A4QPMC1QQLP7RG9D62G6PAWKJXHYQ3YJEIFLMW0P1AS25I5E9KDD7CGYCOVWNT9A6T60F9I0KOAZ91C1ZZIK5U6VZSURG2M0V' where id=98; -update noar ti set v1='UX8STJROHRKWVBKFCNB49AICJCPKRTRU3V29ILHOAOPVKNLFF58GJLIWQZMZH2RXZLOEUKVXFYXSIBY8KEAFNLEIL60VW9Z1ZJ78PU83OVAV8NQ2UE6GCUEGMULEW5X59DBVI1CT1TNPQLOKGY7MUQBEZ758MI54A4QPMC1QQLP7RG9D62G6PAWKJXHYQ3YJEIFLMW0P1AS25I5E9KDD7CGYCOVWNT9A6T60F9I0KOAZ91C1ZZIK5U6VZSURG2M0V' where id=98; -update noar tt set v2='MU30X8COOAX3ZGOKXZ4GUWJU5U23LDGFEU2DIGPQX64OADO8NB6G2S0ZA1YUZHK2KUNWZKPB7HKAA6439XWPIUU6POXET1IHSP0O5F5K59AFF00CCA8FIDYLIWFW6XNZHMPCZIHSI5NMZ9ODACTSXM8R6VLF1ZEMLVP45S3874W2IUBY6AUL2CEAEODBAB32JZUE2GZYRATN651OMUQZ8438D0AACQ7VTV3VTZYXHNKQVFDXC24XGSWRPM80HNFYC' where id=98; -update noar ti set v2='MU30X8COOAX3ZGOKXZ4GUWJU5U23LDGFEU2DIGPQX64OADO8NB6G2S0ZA1YUZHK2KUNWZKPB7HKAA6439XWPIUU6POXET1IHSP0O5F5K59AFF00CCA8FIDYLIWFW6XNZHMPCZIHSI5NMZ9ODACTSXM8R6VLF1ZEMLVP45S3874W2IUBY6AUL2CEAEODBAB32JZUE2GZYRATN651OMUQZ8438D0AACQ7VTV3VTZYXHNKQVFDXC24XGSWRPM80HNFYC' where id=98; -update noar tt set v3='4K0JDOCTLCYRE3DOBQMVV1BD2UQ5O6A9B6NSBGHN2W3B4ALQIAUFXGKHS7JLPSFQ127KQ4I8DEWVIDQTI39H8CU5LYX3S57LGAW2I95BS38MYV1WXNHZRM48SI85GLKS59P6DRFPN6MMYV497E4QPL4ORRWH9X15IUZMH3QLL7NZQERWN4FYUDKAWJ97KFB0L1PO1CA2J65Y481QZ5OWVD6D7HF8Q7DMAY2H1G858459YHUUXSOVP3A1RUOUFGRE2' where id=98; -update noar ti set v3='4K0JDOCTLCYRE3DOBQMVV1BD2UQ5O6A9B6NSBGHN2W3B4ALQIAUFXGKHS7JLPSFQ127KQ4I8DEWVIDQTI39H8CU5LYX3S57LGAW2I95BS38MYV1WXNHZRM48SI85GLKS59P6DRFPN6MMYV497E4QPL4ORRWH9X15IUZMH3QLL7NZQERWN4FYUDKAWJ97KFB0L1PO1CA2J65Y481QZ5OWVD6D7HF8Q7DMAY2H1G858459YHUUXSOVP3A1RUOUFGRE2' where id=98; -update noar tt set v0='1HD4FEZ6O89K9SIA7520LA3A2LHVNAC0013Y6QULNI84IN83Z6UTD5Z3MA9WVPRBAYOLO05B5ER1VH7B7KRHINK38SENRAZ67D4LCUVUID33WLDD5NEIISBD2ZO21IHWAVYOFAG9Q3LVCKM82NBKO9GTT4SUKPQ3QZBVVLRJRWIW8TLSCHBU8MREUH664MVIT6AFS8TQJN820UDKZYKAT8234995NJG9ZFT7TYJW8NAMP2G7JYN0A2G1ONIQQYDQD' where id=99; -update noar ti set v0='1HD4FEZ6O89K9SIA7520LA3A2LHVNAC0013Y6QULNI84IN83Z6UTD5Z3MA9WVPRBAYOLO05B5ER1VH7B7KRHINK38SENRAZ67D4LCUVUID33WLDD5NEIISBD2ZO21IHWAVYOFAG9Q3LVCKM82NBKO9GTT4SUKPQ3QZBVVLRJRWIW8TLSCHBU8MREUH664MVIT6AFS8TQJN820UDKZYKAT8234995NJG9ZFT7TYJW8NAMP2G7JYN0A2G1ONIQQYDQD' where id=99; -update noar tt set v1='GAE02TPZQYSWK1XC8AMMVY3AYJI2B40BLR9TZB1NAUBYHS2OD5ITZTRCBAS90YT6Y9H88PC3KZ0JG9RAV7HVFXMTEEQQOMARKNDPJB0GWK3ZWOY7UH2WVDJEQYU0BGLBCAYAUECYL1SUNSUECC5IRZL91O992Z5H308CMI56PTN76ZV1E99JM0M6YL5OKKZ4Q1SEXKNCAWAO5JP1CBKBU9CXMWT2HWHPHCXK3F4251JO1CSNYC3NO2N4L0G4E1JO0' where id=99; -update noar ti set v1='GAE02TPZQYSWK1XC8AMMVY3AYJI2B40BLR9TZB1NAUBYHS2OD5ITZTRCBAS90YT6Y9H88PC3KZ0JG9RAV7HVFXMTEEQQOMARKNDPJB0GWK3ZWOY7UH2WVDJEQYU0BGLBCAYAUECYL1SUNSUECC5IRZL91O992Z5H308CMI56PTN76ZV1E99JM0M6YL5OKKZ4Q1SEXKNCAWAO5JP1CBKBU9CXMWT2HWHPHCXK3F4251JO1CSNYC3NO2N4L0G4E1JO0' where id=99; -update noar tt set v2='CY0A4E4NBQ2ZS4CMBES53QSW0MQ1BWH8AZO9YV2OXIEZ5HOVMUAPMLMDRFR2CT0SKJMJ6SJN91NCFHUNGLE5MMMDMEGDJUX80PMIJH3XD5YADPPEE5QYLH9DOD2WX5KZ8344G1Q3YHNQHXJG3HRPJ0B5FAOYVVAD1FLSK7AYGJ1FYG7ZZB2OY94EKCKO916RHX4CRH52EH5YBR9V723Y8CN0K4TK7Z19SP2KHOH8YGK4SZ79CYSMRWONKS9ZQ8XD7' where id=99; -update noar ti set v2='CY0A4E4NBQ2ZS4CMBES53QSW0MQ1BWH8AZO9YV2OXIEZ5HOVMUAPMLMDRFR2CT0SKJMJ6SJN91NCFHUNGLE5MMMDMEGDJUX80PMIJH3XD5YADPPEE5QYLH9DOD2WX5KZ8344G1Q3YHNQHXJG3HRPJ0B5FAOYVVAD1FLSK7AYGJ1FYG7ZZB2OY94EKCKO916RHX4CRH52EH5YBR9V723Y8CN0K4TK7Z19SP2KHOH8YGK4SZ79CYSMRWONKS9ZQ8XD7' where id=99; -update noar tt set v3='DHMZ20B176AOGQAT1TJTAN6DSKYW7Y2C529037IC0ISEW2D6MV6JUKXSMA2IS577MR8IJ0G5ZZS7TYELKW3CFLH969W8IVFR2B9VZ3IYNSK8R4BOSJZGN2SK5MEKCYDVCQRXOTAJCYKO8TMI88VDCNJBH5EDC3AKYUMQEYM1I2YTYBCF1HO6R5JHYR4T8IM5ICZ8AN7DM19LY6F0E9I0Y9WCLJ57R216J7DY1VBNOV8S9SCRDNEGN85W7K8JMI83F' where id=99; -update noar ti set v3='DHMZ20B176AOGQAT1TJTAN6DSKYW7Y2C529037IC0ISEW2D6MV6JUKXSMA2IS577MR8IJ0G5ZZS7TYELKW3CFLH969W8IVFR2B9VZ3IYNSK8R4BOSJZGN2SK5MEKCYDVCQRXOTAJCYKO8TMI88VDCNJBH5EDC3AKYUMQEYM1I2YTYBCF1HO6R5JHYR4T8IM5ICZ8AN7DM19LY6F0E9I0Y9WCLJ57R216J7DY1VBNOV8S9SCRDNEGN85W7K8JMI83F' where id=99; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varchar(256) not null, - v1 varchar(256) not null, - v2 varchar(256) not null, - v3 varchar(256) not null, - b0 text not null -) engine=tokudb; -insert into tt values (1,2,'a','b','c','d','e'); -insert into tt values (2,3,'','','','',''); -insert into tt values (3,4,'','','','',''); -insert into tt values (4,5,'','','','',''); -insert into tt values (5,6,'','','','',''); -insert into tt values (6,7,'','','','',''); -insert into tt values (7,8,'','','','',''); -insert into tt values (8,9,'','','','',''); -insert into tt values (9,10,'','','','',''); -insert into tt values (10,11,'','','','',''); -insert into tt values (11,12,'','','','',''); -insert into tt values (12,13,'','','','',''); -insert into tt values (13,14,'','','','',''); -insert into tt values (14,15,'','','','',''); -insert into tt values (15,16,'','','','',''); -insert into tt values (16,17,'','','','',''); -insert into tt values (17,18,'','','','',''); -insert into tt values (18,19,'','','','',''); -insert into tt values (19,20,'','','','',''); -insert into tt values (20,21,'','','','',''); -insert into tt values (21,22,'','','','',''); -insert into tt values (22,23,'','','','',''); -insert into tt values (23,24,'','','','',''); -insert into tt values (24,25,'','','','',''); -insert into tt values (25,26,'','','','',''); -insert into tt values (26,27,'','','','',''); -insert into tt values (27,28,'','','','',''); -insert into tt values (28,29,'','','','',''); -insert into tt values (29,30,'','','','',''); -insert into tt values (30,31,'','','','',''); -insert into tt values (31,32,'','','','',''); -insert into tt values (32,33,'','','','',''); -insert into tt values (33,34,'','','','',''); -insert into tt values (34,35,'','','','',''); -insert into tt values (35,36,'','','','',''); -insert into tt values (36,37,'','','','',''); -insert into tt values (37,38,'','','','',''); -insert into tt values (38,39,'','','','',''); -insert into tt values (39,40,'','','','',''); -insert into tt values (40,41,'','','','',''); -insert into tt values (41,42,'','','','',''); -insert into tt values (42,43,'','','','',''); -insert into tt values (43,44,'','','','',''); -insert into tt values (44,45,'','','','',''); -insert into tt values (45,46,'','','','',''); -insert into tt values (46,47,'','','','',''); -insert into tt values (47,48,'','','','',''); -insert into tt values (48,49,'','','','',''); -insert into tt values (49,50,'','','','',''); -insert into tt values (50,51,'','','','',''); -insert into tt values (51,52,'','','','',''); -insert into tt values (52,53,'','','','',''); -insert into tt values (53,54,'','','','',''); -insert into tt values (54,55,'','','','',''); -insert into tt values (55,56,'','','','',''); -insert into tt values (56,57,'','','','',''); -insert into tt values (57,58,'','','','',''); -insert into tt values (58,59,'','','','',''); -insert into tt values (59,60,'','','','',''); -insert into tt values (60,61,'','','','',''); -insert into tt values (61,62,'','','','',''); -insert into tt values (62,63,'','','','',''); -insert into tt values (63,64,'','','','',''); -insert into tt values (64,65,'','','','',''); -insert into tt values (65,66,'','','','',''); -insert into tt values (66,67,'','','','',''); -insert into tt values (67,68,'','','','',''); -insert into tt values (68,69,'','','','',''); -insert into tt values (69,70,'','','','',''); -insert into tt values (70,71,'','','','',''); -insert into tt values (71,72,'','','','',''); -insert into tt values (72,73,'','','','',''); -insert into tt values (73,74,'','','','',''); -insert into tt values (74,75,'','','','',''); -insert into tt values (75,76,'','','','',''); -insert into tt values (76,77,'','','','',''); -insert into tt values (77,78,'','','','',''); -insert into tt values (78,79,'','','','',''); -insert into tt values (79,80,'','','','',''); -insert into tt values (80,81,'','','','',''); -insert into tt values (81,82,'','','','',''); -insert into tt values (82,83,'','','','',''); -insert into tt values (83,84,'','','','',''); -insert into tt values (84,85,'','','','',''); -insert into tt values (85,86,'','','','',''); -insert into tt values (86,87,'','','','',''); -insert into tt values (87,88,'','','','',''); -insert into tt values (88,89,'','','','',''); -insert into tt values (89,90,'','','','',''); -insert into tt values (90,91,'','','','',''); -insert into tt values (91,92,'','','','',''); -insert into tt values (92,93,'','','','',''); -insert into tt values (93,94,'','','','',''); -insert into tt values (94,95,'','','','',''); -insert into tt values (95,96,'','','','',''); -insert into tt values (96,97,'','','','',''); -insert into tt values (97,98,'','','','',''); -insert into tt values (98,99,'','','','',''); -insert into tt values (99,100,'','','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='null this 0' where id=0; -update noar ti set v0='null this 0' where id=0; -update noar tt set v1='null is 1' where id=0; -update noar ti set v1='null is 1' where id=0; -update noar tt set v2='null a 2' where id=0; -update noar ti set v2='null a 2' where id=0; -update noar tt set v3='null test 3' where id=0; -update noar ti set v3='null test 3' where id=0; -update noar tt set v0='this 0' where id=1; -update noar ti set v0='this 0' where id=1; -update noar tt set v1='is 1' where id=1; -update noar ti set v1='is 1' where id=1; -update noar tt set v2='another 2' where id=1; -update noar ti set v2='another 2' where id=1; -update noar tt set v3='test 3' where id=1; -update noar ti set v3='test 3' where id=1; -update noar tt set v0='F1A4JJ8LKGDMODWDFFQJT0QRKHWDIGKFJ9QPFOTEY6X8EG2IXY805D96ARABV5HW92N6F2J6RXIVPV6TOFTYP9BSVQRNMPMBKAEFJT5RZDNGLZDVP0DDZ6U6SONSC27TKAQRTEN9A0TQ6RP0HEWN3NFXUKVEM37CXEEHU0H3BLJARM7CSB31RTWDE3WHYEKYR905WCQQ9AXC1ZKAR59IYGQVFX164TW10BEL3JJVJBECFZ91SJXZSRPE7H4ZAXUB7' where id=2; -update noar ti set v0='F1A4JJ8LKGDMODWDFFQJT0QRKHWDIGKFJ9QPFOTEY6X8EG2IXY805D96ARABV5HW92N6F2J6RXIVPV6TOFTYP9BSVQRNMPMBKAEFJT5RZDNGLZDVP0DDZ6U6SONSC27TKAQRTEN9A0TQ6RP0HEWN3NFXUKVEM37CXEEHU0H3BLJARM7CSB31RTWDE3WHYEKYR905WCQQ9AXC1ZKAR59IYGQVFX164TW10BEL3JJVJBECFZ91SJXZSRPE7H4ZAXUB7' where id=2; -update noar tt set v1='90OGLWTNU84GEJCCGT0MXPY6WK7YULXN59QPRN31RC0KS3PC81SGK7NPNFAW528FTJXQDIONDTWJM5RYXC125KPMLQU6FK689HD6E0UJOAF0YYNMJMKU3N6LCK4NTRSZI2QFMHXS86ZR1PIDCXTCJNKH29UW1NCAOE4Y44RQC0X37IV2ZM0XL8CCK4BNTYYXI5OGAMNI25OHMHHY4J5O6MMFDXCEUK3749JH4EY0MU0MWDEC487H6RZUPJ0SN1L7O' where id=2; -update noar ti set v1='90OGLWTNU84GEJCCGT0MXPY6WK7YULXN59QPRN31RC0KS3PC81SGK7NPNFAW528FTJXQDIONDTWJM5RYXC125KPMLQU6FK689HD6E0UJOAF0YYNMJMKU3N6LCK4NTRSZI2QFMHXS86ZR1PIDCXTCJNKH29UW1NCAOE4Y44RQC0X37IV2ZM0XL8CCK4BNTYYXI5OGAMNI25OHMHHY4J5O6MMFDXCEUK3749JH4EY0MU0MWDEC487H6RZUPJ0SN1L7O' where id=2; -update noar tt set v2='5QCB9PASK9MVP5B5UZHYJJF2CUGL803ZRY9BMKOC2Z6074AMFMFYZ758J4NBTNMS07L16M2UDJ2KUKE03I8ISC9KW2PN4EW2HH6YNEGYIZJI73BAZQNKAJ0ERLCO119WHIN8GIYMAGKSLC52DNN9WXHU4CVYCRGLITNNC1T5A4WCUMLIG49R2TRGW5L647J8SF405L3E38VLA9YRWXOKUGBKFORY75ZOESKWWFID7ULC9PG4YD3EDH5VILUW5DBY5' where id=2; -update noar ti set v2='5QCB9PASK9MVP5B5UZHYJJF2CUGL803ZRY9BMKOC2Z6074AMFMFYZ758J4NBTNMS07L16M2UDJ2KUKE03I8ISC9KW2PN4EW2HH6YNEGYIZJI73BAZQNKAJ0ERLCO119WHIN8GIYMAGKSLC52DNN9WXHU4CVYCRGLITNNC1T5A4WCUMLIG49R2TRGW5L647J8SF405L3E38VLA9YRWXOKUGBKFORY75ZOESKWWFID7ULC9PG4YD3EDH5VILUW5DBY5' where id=2; -update noar tt set v3='G69FMB3WF75OUZG57JPZY6H56YU6BBB6A0YE534H89CVJEIHJVP45LE50A08D4JFJ05ZK6XTH1BTZ5T55F1LPQC1G3B50YUYA6364QMI7PWQ61MPUW33DPAMTAWR0GUULCC14SMC5DXNGVI3PBEFUBQ3HSO5CX8X76IGWPWGZ032S5QQATI7YZ34TV1URJHLZKKT4EI45Q49KGT7DCWT75WRNO8TZRNVWQKU06A2R49IX3AGU9DBSUMXPNPMKE3NZ' where id=2; -update noar ti set v3='G69FMB3WF75OUZG57JPZY6H56YU6BBB6A0YE534H89CVJEIHJVP45LE50A08D4JFJ05ZK6XTH1BTZ5T55F1LPQC1G3B50YUYA6364QMI7PWQ61MPUW33DPAMTAWR0GUULCC14SMC5DXNGVI3PBEFUBQ3HSO5CX8X76IGWPWGZ032S5QQATI7YZ34TV1URJHLZKKT4EI45Q49KGT7DCWT75WRNO8TZRNVWQKU06A2R49IX3AGU9DBSUMXPNPMKE3NZ' where id=2; -update noar tt set v0='ALSZON21LN9TENN7FXZSZQPS5LI1YZTQYEIXWKXW77MJLIBZZ86SE51YD8JAG9OCZ9G8EH9IL73XNVNRWGCFOLAWA6C8TNIMBZWC8NXU7KXSXHGQH1LY865H4FOFCIKLSCSJK02SK4FPXEYN7UNRZWPQEEFXO2MS2IIQ7YX6KP2DU31F9YJSVKJS3MD56VVI3N4GN5Z2RKTBBMUHEKJYMVKPHW4BTWYAS1SNWYBUMGVXCZZIUYCUQ6W316H73QV4D' where id=3; -update noar ti set v0='ALSZON21LN9TENN7FXZSZQPS5LI1YZTQYEIXWKXW77MJLIBZZ86SE51YD8JAG9OCZ9G8EH9IL73XNVNRWGCFOLAWA6C8TNIMBZWC8NXU7KXSXHGQH1LY865H4FOFCIKLSCSJK02SK4FPXEYN7UNRZWPQEEFXO2MS2IIQ7YX6KP2DU31F9YJSVKJS3MD56VVI3N4GN5Z2RKTBBMUHEKJYMVKPHW4BTWYAS1SNWYBUMGVXCZZIUYCUQ6W316H73QV4D' where id=3; -update noar tt set v1='6DAK7KZC3URTIR620Z1YNDZBDKOTZICKZNAQV44QE9WXPR1Q3ZC5PRBE1KIA2HFMHPAXR0LSEMZVJRZ5YJOFCGEC9BX5NS15YDQ5GZ78VIIFLQLF00WP7H6ZV9A256FVVNFI79ZJ9ZOGP3XXFIVUTJXO7AIYH9JMTA9AFLB6PWNGPY0HD45BJCRNATAW799B48PFEC7JT4YHZ4DSBV392QMYC2YC7L5Z1LYK59G5E2IDQQIQ8L6IKNCV60P3OMNZL' where id=3; -update noar ti set v1='6DAK7KZC3URTIR620Z1YNDZBDKOTZICKZNAQV44QE9WXPR1Q3ZC5PRBE1KIA2HFMHPAXR0LSEMZVJRZ5YJOFCGEC9BX5NS15YDQ5GZ78VIIFLQLF00WP7H6ZV9A256FVVNFI79ZJ9ZOGP3XXFIVUTJXO7AIYH9JMTA9AFLB6PWNGPY0HD45BJCRNATAW799B48PFEC7JT4YHZ4DSBV392QMYC2YC7L5Z1LYK59G5E2IDQQIQ8L6IKNCV60P3OMNZL' where id=3; -update noar tt set v2='3FJ9WJEKSA70H1TUF49LYQO14FOTKJADPQD7CNQUV2HFL8MASEID8PQQTB3H8ZZQSS6ORMJ9O4H6BV161LW3DS3PYCEMWYMDEPPCLDZEJHP0SDSLZATKY3AB299AFWM6ZU8Q8Y2KVII35SGLJSA0CRY6MXMD1YWOK0WH5ZMVA7QSRCKQLJ8QE77Z7EFMI2VW1JQE5M8RD525PEQ4MXZXJNRZGUPGYV3JYC00K24RJ28Z0QL6GUYOSW55IH3MRBO9H' where id=3; -update noar ti set v2='3FJ9WJEKSA70H1TUF49LYQO14FOTKJADPQD7CNQUV2HFL8MASEID8PQQTB3H8ZZQSS6ORMJ9O4H6BV161LW3DS3PYCEMWYMDEPPCLDZEJHP0SDSLZATKY3AB299AFWM6ZU8Q8Y2KVII35SGLJSA0CRY6MXMD1YWOK0WH5ZMVA7QSRCKQLJ8QE77Z7EFMI2VW1JQE5M8RD525PEQ4MXZXJNRZGUPGYV3JYC00K24RJ28Z0QL6GUYOSW55IH3MRBO9H' where id=3; -update noar tt set v3='LMLAZ2Y3778S6GP3PKFGMJ965OE7DACKJZB8WUUXUD0KO2SX49KZOBYNRKMC3FSONUR4YDEQ44M3SHKVZV69MWL1FHCROQE8KC76XOMPMNDRKG1VEMUQLN16I7Z09GF20FVSYM1LRL235W0F7ABYPWN3HX9T8RO56JV6W5M2WY97MLTYKBNF2M3DNVQTXM0I2095CK4YYSQ3UWJZ5DWA2W7IZ5ZUVIXBC5TZF41XD3BK5EQ50KCQKVPPZWHPDWTDX' where id=3; -update noar ti set v3='LMLAZ2Y3778S6GP3PKFGMJ965OE7DACKJZB8WUUXUD0KO2SX49KZOBYNRKMC3FSONUR4YDEQ44M3SHKVZV69MWL1FHCROQE8KC76XOMPMNDRKG1VEMUQLN16I7Z09GF20FVSYM1LRL235W0F7ABYPWN3HX9T8RO56JV6W5M2WY97MLTYKBNF2M3DNVQTXM0I2095CK4YYSQ3UWJZ5DWA2W7IZ5ZUVIXBC5TZF41XD3BK5EQ50KCQKVPPZWHPDWTDX' where id=3; -update noar tt set v0='3TXRH3RKN5QX9QH6UTXAX90FO1KT5E6RQ5YQ0Z0M029DD17ED4UITV9WBSJVJARID1XOP0BGGP4N1TN8RNXX9611YP5ZO9RBEAEHLONS7G3C5XHDYBIBW5H8K0EHP8IV4HJFRE9C4IPVY76K7XTKXK80ZOUNEC58KXPCZ0F4B8FI3O9MSYFDDY2ZRSB9XUWEC3ZMJ75OW8IJLYY6KL8KAT96PE0BMAD7F1FG6PDN9QRYNVO6EAG0QXTTT6XLEE8KA' where id=4; -update noar ti set v0='3TXRH3RKN5QX9QH6UTXAX90FO1KT5E6RQ5YQ0Z0M029DD17ED4UITV9WBSJVJARID1XOP0BGGP4N1TN8RNXX9611YP5ZO9RBEAEHLONS7G3C5XHDYBIBW5H8K0EHP8IV4HJFRE9C4IPVY76K7XTKXK80ZOUNEC58KXPCZ0F4B8FI3O9MSYFDDY2ZRSB9XUWEC3ZMJ75OW8IJLYY6KL8KAT96PE0BMAD7F1FG6PDN9QRYNVO6EAG0QXTTT6XLEE8KA' where id=4; -update noar tt set v1='V5NGOE1M02EFOTRJ4TDHKEXACA9T6RCFIHMTESJ3AGB3A8OSOBBI38NIIRS1RWGB88JROKZ5AJ2DOQGRQXTW9YRHY1KMVLJVG9LAYXC5LYF8QYAM4QLX90X7EQB13MNKBF5D6GKXJQNK7QR6XO9O42EE4V5V1J4DC9Q2PFAGP64G70085257H1ZOWIKEJ5QZ7M1IK0CQOS9BLBX8ZYWWG541YM5CFTZVIIXJ6CBR89ZHHE0G98C9MGYS9O9A34NP0' where id=4; -update noar ti set v1='V5NGOE1M02EFOTRJ4TDHKEXACA9T6RCFIHMTESJ3AGB3A8OSOBBI38NIIRS1RWGB88JROKZ5AJ2DOQGRQXTW9YRHY1KMVLJVG9LAYXC5LYF8QYAM4QLX90X7EQB13MNKBF5D6GKXJQNK7QR6XO9O42EE4V5V1J4DC9Q2PFAGP64G70085257H1ZOWIKEJ5QZ7M1IK0CQOS9BLBX8ZYWWG541YM5CFTZVIIXJ6CBR89ZHHE0G98C9MGYS9O9A34NP0' where id=4; -update noar tt set v2='8D07CWZF6LFP35FZRMBY4XSCS2T8VRU35DJHOOZB623NA0BDWJH0GV5ZXBB6C5MO4WOYMYDIP7MORXEHT0RKK9FJ98TA5X47CSZ89WTS5H3SYBNKX2O18L2QXS7NPKDC4G63XL5UL13OQIB5UBC17GH8UTNFPXU9T90OE5EM9GOQTRA5Q24NKFZLYL37R5WT54BJZ0U0RBR3SPDO3JRSJRC35LPHFU7YU8K1Q7MHXE38I59EDNUCS7CA6YMR6M2EF' where id=4; -update noar ti set v2='8D07CWZF6LFP35FZRMBY4XSCS2T8VRU35DJHOOZB623NA0BDWJH0GV5ZXBB6C5MO4WOYMYDIP7MORXEHT0RKK9FJ98TA5X47CSZ89WTS5H3SYBNKX2O18L2QXS7NPKDC4G63XL5UL13OQIB5UBC17GH8UTNFPXU9T90OE5EM9GOQTRA5Q24NKFZLYL37R5WT54BJZ0U0RBR3SPDO3JRSJRC35LPHFU7YU8K1Q7MHXE38I59EDNUCS7CA6YMR6M2EF' where id=4; -update noar tt set v3='ZKGAA6FDKPFY3SJ5QD9IR1QZNQSRN6OOT0X2PT938OREUVK36H0SMWU43RA5FRPFUXFMKMJV11ZON7PMOVOL2TIIL0O6P0CANLMZMYXNVQ3WZ7GL1CJE7872AGOZR43GI46JDAT9UHTZOULOWB7QS63H3ZABOUTLI38Z1TO091DA0KY0HOT37XJIMA63S6LLQ0JSMJU7D5SW5RWRZLGWRDMIBHS5I3V8KW6MJ44AURJKHSGC5L4SUHLUZTUJ0HYRP' where id=4; -update noar ti set v3='ZKGAA6FDKPFY3SJ5QD9IR1QZNQSRN6OOT0X2PT938OREUVK36H0SMWU43RA5FRPFUXFMKMJV11ZON7PMOVOL2TIIL0O6P0CANLMZMYXNVQ3WZ7GL1CJE7872AGOZR43GI46JDAT9UHTZOULOWB7QS63H3ZABOUTLI38Z1TO091DA0KY0HOT37XJIMA63S6LLQ0JSMJU7D5SW5RWRZLGWRDMIBHS5I3V8KW6MJ44AURJKHSGC5L4SUHLUZTUJ0HYRP' where id=4; -update noar tt set v0='UZTRANH93975WQMILZ2MUN6R4MZQ73UGRQYWDHD088I2ORRH7UC6ZEIRN6G0PUASQNROBYN2WION2W9IXA25D2RY0RCK7WF9XPZ41QNN2U56T5WFSZI7NFH81QZT80JZ3HXHN16L64SPGU373IS1XTMT9O1OLWQ7KYMUO2ZRT8X8UUFS9NPEVXE7X0NDF4UZ7D5SJNI2D5VAEWMSL4S2I18GWAJQE4YJHRBQ04FWYNMR73QX74Z96BH44T4T51YEC' where id=5; -update noar ti set v0='UZTRANH93975WQMILZ2MUN6R4MZQ73UGRQYWDHD088I2ORRH7UC6ZEIRN6G0PUASQNROBYN2WION2W9IXA25D2RY0RCK7WF9XPZ41QNN2U56T5WFSZI7NFH81QZT80JZ3HXHN16L64SPGU373IS1XTMT9O1OLWQ7KYMUO2ZRT8X8UUFS9NPEVXE7X0NDF4UZ7D5SJNI2D5VAEWMSL4S2I18GWAJQE4YJHRBQ04FWYNMR73QX74Z96BH44T4T51YEC' where id=5; -update noar tt set v1='D50S6RHBKH1MMTFNNHTC77UIYI18ELNVWR795GI0NM9O8WS06XNALDTXAQFKQRYZSREW2X75N1PKMY4GYZQMQKJ83ZS7TNJ908ICBHWDRF7AN9IJWGX7F7FFSQRJJ1XIJJ861FVMLN7D9N06UBVILS4HLGVDVC5H6BZE5HM2ZAP3OUTCP89CB5TGXUK96YL7OPWDH2AP6PP2A85G7O4ZTQNLH1TI1WX7ZQXL4XBXDQOR6KY8UI49DLHM8SNHW3563' where id=5; -update noar ti set v1='D50S6RHBKH1MMTFNNHTC77UIYI18ELNVWR795GI0NM9O8WS06XNALDTXAQFKQRYZSREW2X75N1PKMY4GYZQMQKJ83ZS7TNJ908ICBHWDRF7AN9IJWGX7F7FFSQRJJ1XIJJ861FVMLN7D9N06UBVILS4HLGVDVC5H6BZE5HM2ZAP3OUTCP89CB5TGXUK96YL7OPWDH2AP6PP2A85G7O4ZTQNLH1TI1WX7ZQXL4XBXDQOR6KY8UI49DLHM8SNHW3563' where id=5; -update noar tt set v2='O3AB3AX19SHAPTYGPEP7CGJC7P22KJ4GF65U63IE9VGB41GPDQBSCH3I87KFPGEZB2OSC80WNV0186M9YU4NZVC36WUA4DDS6H4QHRNWM1IPUJTU84E4G6HMN4NQZMLJ2XVCQVN00JPAIHHAIK0OUXKT47HM62116K6MMPDBJE65LT7Z94ZHQ2A9V34G43MYWXK88O8ZTVF2M7TS69KAPBM45ELX8DWDCL5CH5NKFH2U8S8XLI5D0XPLICKODKV6D' where id=5; -update noar ti set v2='O3AB3AX19SHAPTYGPEP7CGJC7P22KJ4GF65U63IE9VGB41GPDQBSCH3I87KFPGEZB2OSC80WNV0186M9YU4NZVC36WUA4DDS6H4QHRNWM1IPUJTU84E4G6HMN4NQZMLJ2XVCQVN00JPAIHHAIK0OUXKT47HM62116K6MMPDBJE65LT7Z94ZHQ2A9V34G43MYWXK88O8ZTVF2M7TS69KAPBM45ELX8DWDCL5CH5NKFH2U8S8XLI5D0XPLICKODKV6D' where id=5; -update noar tt set v3='KCTSSV8ISNBEAFKDGD86F4QCW1MJ09VSJPS1WM10S9I5H3U0URKWJPK8GKH18EVHJ2UFL1POO6O9DAM6DAPI95A5BHU0D85EGMDKQVHPTJZ7CQ2421LM5FI0B16GTVHLM2PU004XTSTIIZ11WVXWHJYWPCXYGY0T4PQHOVICTYL9C8MDW0EYDZV3A0DFI7NNYCCEF3IFFCUV8UVVH1GQTX83GGI0AQVDKLD172GEURRJX6UFCW8J5SQHK8DTB7D0I' where id=5; -update noar ti set v3='KCTSSV8ISNBEAFKDGD86F4QCW1MJ09VSJPS1WM10S9I5H3U0URKWJPK8GKH18EVHJ2UFL1POO6O9DAM6DAPI95A5BHU0D85EGMDKQVHPTJZ7CQ2421LM5FI0B16GTVHLM2PU004XTSTIIZ11WVXWHJYWPCXYGY0T4PQHOVICTYL9C8MDW0EYDZV3A0DFI7NNYCCEF3IFFCUV8UVVH1GQTX83GGI0AQVDKLD172GEURRJX6UFCW8J5SQHK8DTB7D0I' where id=5; -update noar tt set v0='RSIY4CQGK91NEH3B7MOBI83MS13EUKLJVM1K778UZT8FOC59JE6D7EVCYO3ASNIJQVGYHV3W5IOD14NZ76CSNSX63ZHLDROE258H0IBGCYNZKLMG7SML7WTBBEEMUDVQ1JS7ZDJ7KZAFKQP6IAR2B0FSH14OFA5OD0RMYR1P2OQBK863I6ISGSY2QLLDOR9HH289JLYBXNGGIJS9E5SET8LHG28BGCI2NP0VIMGPAN5T2PTS5U629A5MN44USRSWJ' where id=6; -update noar ti set v0='RSIY4CQGK91NEH3B7MOBI83MS13EUKLJVM1K778UZT8FOC59JE6D7EVCYO3ASNIJQVGYHV3W5IOD14NZ76CSNSX63ZHLDROE258H0IBGCYNZKLMG7SML7WTBBEEMUDVQ1JS7ZDJ7KZAFKQP6IAR2B0FSH14OFA5OD0RMYR1P2OQBK863I6ISGSY2QLLDOR9HH289JLYBXNGGIJS9E5SET8LHG28BGCI2NP0VIMGPAN5T2PTS5U629A5MN44USRSWJ' where id=6; -update noar tt set v1='9KVIHILYRAKCJ38ZXUXD886V4YVFBNTBCTZG7PDBDQM1RVO578WHZ5LP1RZ9ZYCPM1SMJ6KUVS1TUCCMMBDAM1MTOG6EBSL89576EYTCOWNK0HAPENKFHQO6ONYJO6LZ0H3WYL2WJYUN0YDWI4LGXDW7G9OBWA2LGWZDRICC9135CBHV0HDH8ATGZ6Z62KMIDYZXUSG04WJ2UDY2QQZTJMYSTLCXI05KNSILHXETOZM3GDYBOLVBUWX2FT4T8W3N7' where id=6; -update noar ti set v1='9KVIHILYRAKCJ38ZXUXD886V4YVFBNTBCTZG7PDBDQM1RVO578WHZ5LP1RZ9ZYCPM1SMJ6KUVS1TUCCMMBDAM1MTOG6EBSL89576EYTCOWNK0HAPENKFHQO6ONYJO6LZ0H3WYL2WJYUN0YDWI4LGXDW7G9OBWA2LGWZDRICC9135CBHV0HDH8ATGZ6Z62KMIDYZXUSG04WJ2UDY2QQZTJMYSTLCXI05KNSILHXETOZM3GDYBOLVBUWX2FT4T8W3N7' where id=6; -update noar tt set v2='HOZ5NVZDAKYR1AUE70K5JN2N0WIF9RKLU0CIZOOQMJ0VD4UWAY3CDGEXYC3P9N5WIN6AAXZIS8OHZER2UAG24EA8X0J0HDTVI9LYG94SX3HW2V4LFLKE2XVRB9ZCZAOALVO4XHBXAALJ0R2JLSPUJ5D1WRCRJ2X82BGSEUAMQR5U9Z1WZU1L5V9HCSLGI5BDTMNJ0QLPPWRBGDUNCGLBEWQAIZC07O4S4GO1HAIXGUV0OC9YHOCNJSP0EAMBQBMYG' where id=6; -update noar ti set v2='HOZ5NVZDAKYR1AUE70K5JN2N0WIF9RKLU0CIZOOQMJ0VD4UWAY3CDGEXYC3P9N5WIN6AAXZIS8OHZER2UAG24EA8X0J0HDTVI9LYG94SX3HW2V4LFLKE2XVRB9ZCZAOALVO4XHBXAALJ0R2JLSPUJ5D1WRCRJ2X82BGSEUAMQR5U9Z1WZU1L5V9HCSLGI5BDTMNJ0QLPPWRBGDUNCGLBEWQAIZC07O4S4GO1HAIXGUV0OC9YHOCNJSP0EAMBQBMYG' where id=6; -update noar tt set v3='KHDTOKKYJDGD0O41TB01KS8GGC7EL5TCGJPSU5HK5YPYIUCTE4RU2N4ACPJCRGCM94GW29IYRFPJIOKD4AG88WXZLMW37DY3PMPE2S2SCBKQJ0ZCF0BR6VGG45XTSHXPTZX0P24FQIW3RLPPETZ7IBAXL2JQI3NAQ9TESMEEUD1N81Z7PAY8IKQSJU6GNLHNNS09D5DL6MDRGO4ZACVKBM2JV9O2W5YULQMMWQ48ZXNSLTXVR14CNHMU1RO7P10KU' where id=6; -update noar ti set v3='KHDTOKKYJDGD0O41TB01KS8GGC7EL5TCGJPSU5HK5YPYIUCTE4RU2N4ACPJCRGCM94GW29IYRFPJIOKD4AG88WXZLMW37DY3PMPE2S2SCBKQJ0ZCF0BR6VGG45XTSHXPTZX0P24FQIW3RLPPETZ7IBAXL2JQI3NAQ9TESMEEUD1N81Z7PAY8IKQSJU6GNLHNNS09D5DL6MDRGO4ZACVKBM2JV9O2W5YULQMMWQ48ZXNSLTXVR14CNHMU1RO7P10KU' where id=6; -update noar tt set v0='LHM6SC7V983AQONHQU2KCHOWL4QRC0DFXB3YA3OOOZKJJ0BRQDAUWYA4VKLIU0CVC9RADQMJVEAWWUIE87QX6AM73FLTG8CLUX7COHTK4H6L0GJ1PQE0XA9KRKLQHESS0AIFSQLYB273Z20MP6WIHVJUKZ9NAZ982WCQ7W324DQIOGNSCK92ZQP493QDK5B4FEP97OYRNV2KAVV6IOFXR3UMPYN3DNV3E9U804E2R8NBJL5F0N0W4ER37YDL826X2' where id=7; -update noar ti set v0='LHM6SC7V983AQONHQU2KCHOWL4QRC0DFXB3YA3OOOZKJJ0BRQDAUWYA4VKLIU0CVC9RADQMJVEAWWUIE87QX6AM73FLTG8CLUX7COHTK4H6L0GJ1PQE0XA9KRKLQHESS0AIFSQLYB273Z20MP6WIHVJUKZ9NAZ982WCQ7W324DQIOGNSCK92ZQP493QDK5B4FEP97OYRNV2KAVV6IOFXR3UMPYN3DNV3E9U804E2R8NBJL5F0N0W4ER37YDL826X2' where id=7; -update noar tt set v1='90XPBAT7BYYDYFB49JHZX76W9VCYKPNAZMOW39OS2EWRO9NXFKO7TPGJ5RQUP94FXZPPRLRXUHOPL7X767PKO3I3CJEL7C96GQK3RCB3XEGT5M93O5TMVIU5B78YEJSO8PLF5I3AO9HJL99Y8MW75ZXDVHAKMKAF4G6KAGIV0LGMMPIS8D5JMR6H87OZ2S6CTWZM4C1GJEB5JQD5G1EHZY99MUSNT9W6KQ3I121T0MBDH18G0SD3168H6Z9H2GA2T' where id=7; -update noar ti set v1='90XPBAT7BYYDYFB49JHZX76W9VCYKPNAZMOW39OS2EWRO9NXFKO7TPGJ5RQUP94FXZPPRLRXUHOPL7X767PKO3I3CJEL7C96GQK3RCB3XEGT5M93O5TMVIU5B78YEJSO8PLF5I3AO9HJL99Y8MW75ZXDVHAKMKAF4G6KAGIV0LGMMPIS8D5JMR6H87OZ2S6CTWZM4C1GJEB5JQD5G1EHZY99MUSNT9W6KQ3I121T0MBDH18G0SD3168H6Z9H2GA2T' where id=7; -update noar tt set v2='NP8HYW41BNEOI62AMBSV3QL86Q4TR7W8N96HDTXKCOEFFV9OCCB0WP4LME8TUGZ0CO7JNV8HVTH1IVGNJZ7SSRSP18BN8XQ391G6WVI04RTNLYMDTQ823KH72CQWG407HSOEEQ7TI0BK1RJ7OUVX5U0YLLTEMCDMF08T3O4VR9DT4CH9I8NRSCJD7DU3XR5SRKK12519USN2IHHC0F8NNZWQU6B8E4CAIO3XCDFDDJWQYL1Z82Z0DVEI4TIFB6IYQ' where id=7; -update noar ti set v2='NP8HYW41BNEOI62AMBSV3QL86Q4TR7W8N96HDTXKCOEFFV9OCCB0WP4LME8TUGZ0CO7JNV8HVTH1IVGNJZ7SSRSP18BN8XQ391G6WVI04RTNLYMDTQ823KH72CQWG407HSOEEQ7TI0BK1RJ7OUVX5U0YLLTEMCDMF08T3O4VR9DT4CH9I8NRSCJD7DU3XR5SRKK12519USN2IHHC0F8NNZWQU6B8E4CAIO3XCDFDDJWQYL1Z82Z0DVEI4TIFB6IYQ' where id=7; -update noar tt set v3='F3K57HUK7J1FV955BLWNE6MKETSNKA9NDANUF5WZI36PHXYAV72SHSLZX8CZQMLAESFV4ZWSJBKS34OM75U3LG9MT8620N0TY8AUYEDG6J9F6XVW8B25LKT2QZBEPQN7Q9XPNGPP1MJ898C5NRF1D4SJFZGTL6B1IRJKL3PUZFYF6TUZY2NQL0EBM0GJTGX6D991EPNMQM2373FQC4U1BT8R3WR7H0TJPSOAX0AQPV4T7RIUT4XE3R0FKBWUX237M' where id=7; -update noar ti set v3='F3K57HUK7J1FV955BLWNE6MKETSNKA9NDANUF5WZI36PHXYAV72SHSLZX8CZQMLAESFV4ZWSJBKS34OM75U3LG9MT8620N0TY8AUYEDG6J9F6XVW8B25LKT2QZBEPQN7Q9XPNGPP1MJ898C5NRF1D4SJFZGTL6B1IRJKL3PUZFYF6TUZY2NQL0EBM0GJTGX6D991EPNMQM2373FQC4U1BT8R3WR7H0TJPSOAX0AQPV4T7RIUT4XE3R0FKBWUX237M' where id=7; -update noar tt set v0='Y5CNULAL1PXJ7XZWI8QX6YYYY36NZKJ7KV1ER3Q6OAURAYQZYHZ38YVOF0MZYR9OK980V7EQA5ZRKE082GVABO1CLOYXFYNZA62XP2RNK21Q9UHRM6XWG2HK9EYCFVA2GLOMQ4E139Q2RC8YVAAI27UQZP8E7BAGAYQ7QJ2FNXFN32I2LULCZZDH3QPL99OU78V4K7LP20MHKR49WI3WFJQPT3IYAOG6CHXA2GHYL7U2OLQ5GW5CZ9AP1HV4O1QCN' where id=8; -update noar ti set v0='Y5CNULAL1PXJ7XZWI8QX6YYYY36NZKJ7KV1ER3Q6OAURAYQZYHZ38YVOF0MZYR9OK980V7EQA5ZRKE082GVABO1CLOYXFYNZA62XP2RNK21Q9UHRM6XWG2HK9EYCFVA2GLOMQ4E139Q2RC8YVAAI27UQZP8E7BAGAYQ7QJ2FNXFN32I2LULCZZDH3QPL99OU78V4K7LP20MHKR49WI3WFJQPT3IYAOG6CHXA2GHYL7U2OLQ5GW5CZ9AP1HV4O1QCN' where id=8; -update noar tt set v1='Z7TBDC73IVSOY74C6RF5GBRWC96W3MBUF10FISKC1Z3YMC0SGXNCUMBHMXBGQ4XCB9D07SYR8F9HNFCKSPQ8X7EQBA126AQWEIS6D6WA42UMNB18XJZI2B7ZOQUDRANBAOIMQNHUCP04NI0VSVOVYEPOCIRL6DKD21IPZFSY7X7964ZHQNU0SMM4RBB2ZIWF5S0D540KFTIRKVXZZKK2VHWDR819BBXSBVG7ZBHL9JJAWU1VSV8QGQETBC8PFUWI6' where id=8; -update noar ti set v1='Z7TBDC73IVSOY74C6RF5GBRWC96W3MBUF10FISKC1Z3YMC0SGXNCUMBHMXBGQ4XCB9D07SYR8F9HNFCKSPQ8X7EQBA126AQWEIS6D6WA42UMNB18XJZI2B7ZOQUDRANBAOIMQNHUCP04NI0VSVOVYEPOCIRL6DKD21IPZFSY7X7964ZHQNU0SMM4RBB2ZIWF5S0D540KFTIRKVXZZKK2VHWDR819BBXSBVG7ZBHL9JJAWU1VSV8QGQETBC8PFUWI6' where id=8; -update noar tt set v2='CMJH7J3P1KZVK1IEJXESCPBHBS5L6Z8WB4YT4HZ4SP0XZGKGWMR3H28PXNG8WKWE8QW5DM6UMTLFQOFF9GGU10KK73HTGNFQ9XTX7JAEIEO83NVM3JY3O22L2MDGBSKYIM4NVYDV7CRNN5XIUPJ2NHOHU13KE05AHH08MCX7LHL8Y1SSO3VLLRDA6HLP1R54A1NL7ZA2GPU0LTFP3SJDVZIGA30978AG3T33QP05BSPLAFCBOG59HL1K99SY30GGA' where id=8; -update noar ti set v2='CMJH7J3P1KZVK1IEJXESCPBHBS5L6Z8WB4YT4HZ4SP0XZGKGWMR3H28PXNG8WKWE8QW5DM6UMTLFQOFF9GGU10KK73HTGNFQ9XTX7JAEIEO83NVM3JY3O22L2MDGBSKYIM4NVYDV7CRNN5XIUPJ2NHOHU13KE05AHH08MCX7LHL8Y1SSO3VLLRDA6HLP1R54A1NL7ZA2GPU0LTFP3SJDVZIGA30978AG3T33QP05BSPLAFCBOG59HL1K99SY30GGA' where id=8; -update noar tt set v3='85QYOPQYOOBEE3G2GRIRV57YB9DERNG48SHLPPUCZSZ6C6JJSZXLJQTTLK09O6DF7ETHB1Z8BTJFBT73G72TS2S3ZMRRZ4EZ38JJRBKI9M8D8CX6ASQZHRF88HE02OZ0PG35154RJBKC74AER4YJ24YAIBCVLCZ2LD1T55BY8Q4PEUHJG3FAQ97I0POCOOTSM92KA5G9IE9IWEM501CGVFGUTJBLSGDDPJAFE63ESJ8F04PICZ2OJ8UF08DX4PIZJ' where id=8; -update noar ti set v3='85QYOPQYOOBEE3G2GRIRV57YB9DERNG48SHLPPUCZSZ6C6JJSZXLJQTTLK09O6DF7ETHB1Z8BTJFBT73G72TS2S3ZMRRZ4EZ38JJRBKI9M8D8CX6ASQZHRF88HE02OZ0PG35154RJBKC74AER4YJ24YAIBCVLCZ2LD1T55BY8Q4PEUHJG3FAQ97I0POCOOTSM92KA5G9IE9IWEM501CGVFGUTJBLSGDDPJAFE63ESJ8F04PICZ2OJ8UF08DX4PIZJ' where id=8; -update noar tt set v0='CCXWJBA0QUXCGG1T43E8CMG0FLF0568J0MNG4MR85C2AF3HOEEOJ97GD7GQL43OJGHULZK7IWH028XSP9F604UFKBVXRRT90EJJSJA4BUHDEA3REBLQPF6PM1PNH6IX2V0Z0ZNLRWJSMQ4AHI2DJAEANQXF7RNRIV0BMZKZ4LVMROHY1HBIWEDPM8YFGPHM4BTV4AWKL209AM82ACIO94B15LCVE1N9CJICTS9X2NQ8FBDZH8XYDVVVD736PKV90P' where id=9; -update noar ti set v0='CCXWJBA0QUXCGG1T43E8CMG0FLF0568J0MNG4MR85C2AF3HOEEOJ97GD7GQL43OJGHULZK7IWH028XSP9F604UFKBVXRRT90EJJSJA4BUHDEA3REBLQPF6PM1PNH6IX2V0Z0ZNLRWJSMQ4AHI2DJAEANQXF7RNRIV0BMZKZ4LVMROHY1HBIWEDPM8YFGPHM4BTV4AWKL209AM82ACIO94B15LCVE1N9CJICTS9X2NQ8FBDZH8XYDVVVD736PKV90P' where id=9; -update noar tt set v1='UROABRDCBAA8643XGHW3GJ5GSJQ1XQO6UBP2XD2EN9RCL8AN2PVQZ1TAROUZYNHPKH3VWT4VCBR08V30P1KDW93JM1REDJ58MT1QP81LPA5NM5KXBNJQPP9YGM2S3VIJVXROVHBAWRA2SLEK7YGM2L2T29A3K09NZXR7CVFOG3H8M5C6YBSWQMGAJTFYAU38AXW72NC6TGPCIV1SYL56FIN5ZUF6EQFB28GBA8SF2DV8W6W756H9XXYCGBXX9XFW3' where id=9; -update noar ti set v1='UROABRDCBAA8643XGHW3GJ5GSJQ1XQO6UBP2XD2EN9RCL8AN2PVQZ1TAROUZYNHPKH3VWT4VCBR08V30P1KDW93JM1REDJ58MT1QP81LPA5NM5KXBNJQPP9YGM2S3VIJVXROVHBAWRA2SLEK7YGM2L2T29A3K09NZXR7CVFOG3H8M5C6YBSWQMGAJTFYAU38AXW72NC6TGPCIV1SYL56FIN5ZUF6EQFB28GBA8SF2DV8W6W756H9XXYCGBXX9XFW3' where id=9; -update noar tt set v2='JHBJNIADQ2IR585CYZOXWQPY572FK0YHY50YINS4MUPZADI64WITP85B4B1ETHHH3II4QZL4GS6E249AVCR2FUGJOR0STTEXYRRG5LC8EFXXU6837XF1WWFH7N5R38KHCB0YPAVASK2V5RHQI0QQX50OT8AUW4Y2GOAL2HTCJENGRVYIEXB46W7MMHQA0J9LDEVDIUUQKUPZIY2AFY1JNF53PDS5WYFJZJXXA05ZII8O9KPDS5VRCSAMWPYGBWR5P' where id=9; -update noar ti set v2='JHBJNIADQ2IR585CYZOXWQPY572FK0YHY50YINS4MUPZADI64WITP85B4B1ETHHH3II4QZL4GS6E249AVCR2FUGJOR0STTEXYRRG5LC8EFXXU6837XF1WWFH7N5R38KHCB0YPAVASK2V5RHQI0QQX50OT8AUW4Y2GOAL2HTCJENGRVYIEXB46W7MMHQA0J9LDEVDIUUQKUPZIY2AFY1JNF53PDS5WYFJZJXXA05ZII8O9KPDS5VRCSAMWPYGBWR5P' where id=9; -update noar tt set v3='H3W8RD7J0IY3SEMOYRZLNXUWP6SZIQXQMC9DH51RU8RP3IFJR61WY2VYYH78MYYJBWZYB4T1G14Y5783N5WLMAI08OXGWX0IBW53WY2O5QVTT1F6P9P7J4E8M7WMMAVO9UUTSBNUOHKFXQR6FX0QMZ2S5SE4HF2DNJE7QXB0OOMG8K1UQY9J7JE166BDUT3YLHVPH72EXGUKBHN7CA83F5YBM6H1RVFZW25NZLE6AK1GYYLH74SMFFTG3OG5NS5OK' where id=9; -update noar ti set v3='H3W8RD7J0IY3SEMOYRZLNXUWP6SZIQXQMC9DH51RU8RP3IFJR61WY2VYYH78MYYJBWZYB4T1G14Y5783N5WLMAI08OXGWX0IBW53WY2O5QVTT1F6P9P7J4E8M7WMMAVO9UUTSBNUOHKFXQR6FX0QMZ2S5SE4HF2DNJE7QXB0OOMG8K1UQY9J7JE166BDUT3YLHVPH72EXGUKBHN7CA83F5YBM6H1RVFZW25NZLE6AK1GYYLH74SMFFTG3OG5NS5OK' where id=9; -update noar tt set v0='NPQC5K1Y8D2FH4D9F4AY0KN8YUCM2XLJVH2W9FTWKG1UO69EEGFY8CCAT12G2R4TC472BSSJUJSEFPW5NW9AWLNOUGXXHIM8QSRRUCHE188K2JCGZY09ROGW8FPHOM32A8LQ6XRP32YNAGJOLS37XBOMGWQ05V9XRZ6SA79SNFBMEPG699IFAZGAG10HXIXPHYSNGPDSAJZ81QTWEV7H9VGF6UDT5873VZQV2DLZKFDGI0S8H4QIQEYHOVM9OCW61' where id=10; -update noar ti set v0='NPQC5K1Y8D2FH4D9F4AY0KN8YUCM2XLJVH2W9FTWKG1UO69EEGFY8CCAT12G2R4TC472BSSJUJSEFPW5NW9AWLNOUGXXHIM8QSRRUCHE188K2JCGZY09ROGW8FPHOM32A8LQ6XRP32YNAGJOLS37XBOMGWQ05V9XRZ6SA79SNFBMEPG699IFAZGAG10HXIXPHYSNGPDSAJZ81QTWEV7H9VGF6UDT5873VZQV2DLZKFDGI0S8H4QIQEYHOVM9OCW61' where id=10; -update noar tt set v1='TF6IWM7FXZE2YW7LAD000UFDXT46G74JRY1SWYK10KG98KP3I1SFT56Q7T9VPOJ0TLZ77BZIHE5VX5R6U2N8H1X9ZQG9ZI3TBQBO5IEPZE7M09QE8ADKSZWC0Q2GYNDDOG0JGMIIPNSGYU2F5MM5KKQ87RSYUMKSQPU8OVUDNTZ525OXVR9DHCBA5UV45X66QLT9XF6N2LYITP4GAA4ICD9UBDCNCQFRWMTO55OTOGJV6ESD5BWJ0E4JTNCLKISTA' where id=10; -update noar ti set v1='TF6IWM7FXZE2YW7LAD000UFDXT46G74JRY1SWYK10KG98KP3I1SFT56Q7T9VPOJ0TLZ77BZIHE5VX5R6U2N8H1X9ZQG9ZI3TBQBO5IEPZE7M09QE8ADKSZWC0Q2GYNDDOG0JGMIIPNSGYU2F5MM5KKQ87RSYUMKSQPU8OVUDNTZ525OXVR9DHCBA5UV45X66QLT9XF6N2LYITP4GAA4ICD9UBDCNCQFRWMTO55OTOGJV6ESD5BWJ0E4JTNCLKISTA' where id=10; -update noar tt set v2='Y74X1E1ZSSV0V3VH1YY9304X4Y0BYGXCOYFHFVIRI0MWOMRPSEZWJLN26DSJY7SF3304QQEBOE4ICDH4S5ZL7FY08BV4HV6MOHU57Q3QKI52U2K0LKDUP3SXV9ETYTYTW688OV9TMINUA2ZNJHZC6YYHQIRM59YCL8NI61GMMC3DOX436BU1AAABHLOV29AEN30DV9L0WL96FFIZOZHXZQJ2N2ZM1NBTFCMKO5WFKF5BB9PFJAFBWZXNPI0FG1SAE' where id=10; -update noar ti set v2='Y74X1E1ZSSV0V3VH1YY9304X4Y0BYGXCOYFHFVIRI0MWOMRPSEZWJLN26DSJY7SF3304QQEBOE4ICDH4S5ZL7FY08BV4HV6MOHU57Q3QKI52U2K0LKDUP3SXV9ETYTYTW688OV9TMINUA2ZNJHZC6YYHQIRM59YCL8NI61GMMC3DOX436BU1AAABHLOV29AEN30DV9L0WL96FFIZOZHXZQJ2N2ZM1NBTFCMKO5WFKF5BB9PFJAFBWZXNPI0FG1SAE' where id=10; -update noar tt set v3='8HMT8C2LH8AKHPP7Z33NRP8NZEAAY01FZCH9VO0LT6GXSBL8J4HAE7JT3O4R3PGW40HJK3CHV6T0B560SZH6IVHE6LILO0AR4TNVGUJKC4IU6RZRR9QS1ZN4E6LW9YMKWNK5I7OME75WTDL5QHZXP16SN6ZOD9Z8U488DEFJMZZ193MP7UHJVRQFSR67MY4JN047NGK284E2Y4HP31MWKSIYEFBBHS47CLR08ZJH7I91DKY32KC771VKW3LBVXPLG' where id=10; -update noar ti set v3='8HMT8C2LH8AKHPP7Z33NRP8NZEAAY01FZCH9VO0LT6GXSBL8J4HAE7JT3O4R3PGW40HJK3CHV6T0B560SZH6IVHE6LILO0AR4TNVGUJKC4IU6RZRR9QS1ZN4E6LW9YMKWNK5I7OME75WTDL5QHZXP16SN6ZOD9Z8U488DEFJMZZ193MP7UHJVRQFSR67MY4JN047NGK284E2Y4HP31MWKSIYEFBBHS47CLR08ZJH7I91DKY32KC771VKW3LBVXPLG' where id=10; -update noar tt set v0='G1PIUPV2DK6CK4M6UDBV8S4D9CHQ934NXHNP4Y8AWZNDY4VWF3EWL9I9FVM97C1LUL2UEUAP33MS0C8UFSVSXXPH8NI03NELI9I1L7OSA53KHNGSFMX5NDGQHEF2BJOJBW069143AYA78HJ6L9C9VX2X8BC53IAUFY5F0QA76LNOKDX10RBHEDLYKJOX9AAGK2KM81GRESU9C9ZUTGP1FNSVWV97M0RY7OKXWZINGMBSG5FPBS3UKE3OMQTAMZH24' where id=11; -update noar ti set v0='G1PIUPV2DK6CK4M6UDBV8S4D9CHQ934NXHNP4Y8AWZNDY4VWF3EWL9I9FVM97C1LUL2UEUAP33MS0C8UFSVSXXPH8NI03NELI9I1L7OSA53KHNGSFMX5NDGQHEF2BJOJBW069143AYA78HJ6L9C9VX2X8BC53IAUFY5F0QA76LNOKDX10RBHEDLYKJOX9AAGK2KM81GRESU9C9ZUTGP1FNSVWV97M0RY7OKXWZINGMBSG5FPBS3UKE3OMQTAMZH24' where id=11; -update noar tt set v1='1089YGSGCQC7EBSHXDXEKTG1B40ZGVS5ZOW6IHYHGVIB9VDZUYVG1PO8QOIL6JZN5XESZ4BEQ9M122BVSGPQVDKHA0VHLE5DENL07KTDIV4BPWPF0T9YKXZQN6V99MBKF3676VLA5A5S03F4ZD9K9PYX6RGPFOYFKFF1C5RFCJRY53IXGEL4K5AKNG7IULPXATM4384AQBMLPZBTJ9ABISHTHU5G3LLMV177H48TSJYR7BRFCE2PCP4GIJF9MZOBF' where id=11; -update noar ti set v1='1089YGSGCQC7EBSHXDXEKTG1B40ZGVS5ZOW6IHYHGVIB9VDZUYVG1PO8QOIL6JZN5XESZ4BEQ9M122BVSGPQVDKHA0VHLE5DENL07KTDIV4BPWPF0T9YKXZQN6V99MBKF3676VLA5A5S03F4ZD9K9PYX6RGPFOYFKFF1C5RFCJRY53IXGEL4K5AKNG7IULPXATM4384AQBMLPZBTJ9ABISHTHU5G3LLMV177H48TSJYR7BRFCE2PCP4GIJF9MZOBF' where id=11; -update noar tt set v2='B2DZ6JQ65DH37M765HN6PE6POJURGBVL34DC1IK9AUOGBPUIBLKXQ2BR0NT38GMY1EA3CBG964RGPPUQP631Q50ABJI9GRX95RXJ5WCQA864I3XYK0N8DSN93LP5MS9IQWRWKRO4IMM2SIR4KRN879DUXY5Y8H9RX3MYLSKC2C0CR9LGJYMNXAICQYON8JR6HUY6IR9K91ZQNIMSBBSHE0FA4YLI0G9ZH7UGC55BDNNXSWFR77241PM3M78E7A31C' where id=11; -update noar ti set v2='B2DZ6JQ65DH37M765HN6PE6POJURGBVL34DC1IK9AUOGBPUIBLKXQ2BR0NT38GMY1EA3CBG964RGPPUQP631Q50ABJI9GRX95RXJ5WCQA864I3XYK0N8DSN93LP5MS9IQWRWKRO4IMM2SIR4KRN879DUXY5Y8H9RX3MYLSKC2C0CR9LGJYMNXAICQYON8JR6HUY6IR9K91ZQNIMSBBSHE0FA4YLI0G9ZH7UGC55BDNNXSWFR77241PM3M78E7A31C' where id=11; -update noar tt set v3='EOOJW86E39PL7F6YDV949XGV9PBF5DYHTVW5W1JJGE661JT74AF3LMN1CYGQPQKDHS1IRY4JSL15S8DJC579THBSJZ2X6U6GOZXUKSGUNZTV6JOZOBNWGXCQKDL439PLRVTP7DLOUKWGX97HJBCHRPQYQRZ9JSJATZ0QHR6UBHVXGLBHWX2YPZRTW3BXLBJWHNCT5GUUA744IPBOG6RQKC5QZZZRVHA7ESYRZWY3S6B8FF8PM0EEW8G7JIO7EN8GC' where id=11; -update noar ti set v3='EOOJW86E39PL7F6YDV949XGV9PBF5DYHTVW5W1JJGE661JT74AF3LMN1CYGQPQKDHS1IRY4JSL15S8DJC579THBSJZ2X6U6GOZXUKSGUNZTV6JOZOBNWGXCQKDL439PLRVTP7DLOUKWGX97HJBCHRPQYQRZ9JSJATZ0QHR6UBHVXGLBHWX2YPZRTW3BXLBJWHNCT5GUUA744IPBOG6RQKC5QZZZRVHA7ESYRZWY3S6B8FF8PM0EEW8G7JIO7EN8GC' where id=11; -update noar tt set v0='KMPR9IT6KR3MVNV37YWY5E5P88QDA3N05PVNKHGGZM59J6HWWRE8MWRWWJOG440Q69N18BVHM214OR4ONP4R3M4BAFTSWCM5V4PH1H3CJ2SVYE20LW4OI0872NVYCRHDB58BC6QLSEP0O2WXBF0EPVO235Y6BX51QSAMK9S4WY0VVO6Y4ZACT3R03KPZKZGA6UIPVMFAVSTGF6KLFNNFBCNT58BZ4JVHZT96JELZ91TS57ZGUREHU9DSXUTG5LQ6S' where id=12; -update noar ti set v0='KMPR9IT6KR3MVNV37YWY5E5P88QDA3N05PVNKHGGZM59J6HWWRE8MWRWWJOG440Q69N18BVHM214OR4ONP4R3M4BAFTSWCM5V4PH1H3CJ2SVYE20LW4OI0872NVYCRHDB58BC6QLSEP0O2WXBF0EPVO235Y6BX51QSAMK9S4WY0VVO6Y4ZACT3R03KPZKZGA6UIPVMFAVSTGF6KLFNNFBCNT58BZ4JVHZT96JELZ91TS57ZGUREHU9DSXUTG5LQ6S' where id=12; -update noar tt set v1='7EE0CQ3NMTK6R1YYWA31YHM0PQGU2FMKNR381H3O2FA7ZBW1LIYWYQ21ENPTOA1WWW4IQXF0NMZBKUHNJVGGBK49JK9FWY06299Z66JUF65YJSWOQQMQ2R2KLGON57PCYDQ4AQEKFICIS5M0X36HHZCU8U9QIVESZ3JVDDGT7G19H5OCAIRUHOW20IOA15NXE37YFJFGGSN2SHOP9S0MMAZP8CYZBNZ0Z0M4W720ZXGL4EA2LYV6V24KBN7I0A9PB' where id=12; -update noar ti set v1='7EE0CQ3NMTK6R1YYWA31YHM0PQGU2FMKNR381H3O2FA7ZBW1LIYWYQ21ENPTOA1WWW4IQXF0NMZBKUHNJVGGBK49JK9FWY06299Z66JUF65YJSWOQQMQ2R2KLGON57PCYDQ4AQEKFICIS5M0X36HHZCU8U9QIVESZ3JVDDGT7G19H5OCAIRUHOW20IOA15NXE37YFJFGGSN2SHOP9S0MMAZP8CYZBNZ0Z0M4W720ZXGL4EA2LYV6V24KBN7I0A9PB' where id=12; -update noar tt set v2='6CAF8P27N9E6X9E5JCC40GMOLY7BQVTDEGVYP11VQN5RJ16O19E88Y3GI9XV9F2U03D2LFV9VCOF1U42B3Z8FTXNKK85DX4W1NZUNYUWFO9C4NC2C5DDGZQRNSB2KKXWED65FFB9QEZHA1PYBDYDYI7DKFSTV7W67ARIXL25S1T4DQU5VADD67PKUGLFANCP4A31CTOBTQKBL3NT3USH33QAJLE7WRBC9ZZ1JL00YWHRFIFVBR0X9JIZ8EZ60LZOK' where id=12; -update noar ti set v2='6CAF8P27N9E6X9E5JCC40GMOLY7BQVTDEGVYP11VQN5RJ16O19E88Y3GI9XV9F2U03D2LFV9VCOF1U42B3Z8FTXNKK85DX4W1NZUNYUWFO9C4NC2C5DDGZQRNSB2KKXWED65FFB9QEZHA1PYBDYDYI7DKFSTV7W67ARIXL25S1T4DQU5VADD67PKUGLFANCP4A31CTOBTQKBL3NT3USH33QAJLE7WRBC9ZZ1JL00YWHRFIFVBR0X9JIZ8EZ60LZOK' where id=12; -update noar tt set v3='ZQIV6F7BZFC8C74DSG0HDTQGMMZGLLJMI9HDQSJ1MA1H61L160RIJLTCD62TN7NNAVMGRAFGC6A7JHFAQDC8CP1BLB8X8SKUUZS36MP9NIKYSXJAX0GJWNYQG4GZALKC7QK0MIOG9QAAS3LYFFF4FCBMOKZYSDIUIIMOWTRK1J98EY6XQVAIJYCTY8MW95Q44Z6EFJHZL6EF28UE5YL8RL5I94Q2KFO01P9F3MTO4E7SSOK5B3TV7ANYKP4TE3L53' where id=12; -update noar ti set v3='ZQIV6F7BZFC8C74DSG0HDTQGMMZGLLJMI9HDQSJ1MA1H61L160RIJLTCD62TN7NNAVMGRAFGC6A7JHFAQDC8CP1BLB8X8SKUUZS36MP9NIKYSXJAX0GJWNYQG4GZALKC7QK0MIOG9QAAS3LYFFF4FCBMOKZYSDIUIIMOWTRK1J98EY6XQVAIJYCTY8MW95Q44Z6EFJHZL6EF28UE5YL8RL5I94Q2KFO01P9F3MTO4E7SSOK5B3TV7ANYKP4TE3L53' where id=12; -update noar tt set v0='KKYRHYP0AL4AF6TLSKTYX679JUVVSOHME36YHBYJGDO9W6Q7R1UU6G2KMGSFI4MBS57ZOS75N805F7QPBQK38R36NNUKTINPNJ4FYQQ8UBCI8CJVJD8Y2EKHM9GSJV1HMB7BQTM5V2NB2E2ROZZCFHNAQ0UX7QIKWPWV5LD128CEHRZ4YRRT666SIXEWN93KE7A73LNS0SHREGN2HNFRYAPYU50391B3RNVVGV74XCH2I7FW9B2AGEZTRQ16VYW52' where id=13; -update noar ti set v0='KKYRHYP0AL4AF6TLSKTYX679JUVVSOHME36YHBYJGDO9W6Q7R1UU6G2KMGSFI4MBS57ZOS75N805F7QPBQK38R36NNUKTINPNJ4FYQQ8UBCI8CJVJD8Y2EKHM9GSJV1HMB7BQTM5V2NB2E2ROZZCFHNAQ0UX7QIKWPWV5LD128CEHRZ4YRRT666SIXEWN93KE7A73LNS0SHREGN2HNFRYAPYU50391B3RNVVGV74XCH2I7FW9B2AGEZTRQ16VYW52' where id=13; -update noar tt set v1='LAK6WXGZNEMT4DWCQLT8WTP5OTJXQAX09QG44BF33SI98W7CELG2ZCEGGGCD3ETGLQG0MGFYZOC153SCQE67JJK64HE44NR2YRSTVYSM2ERGWU80CXZZU3V9FJJA85J32B3FPURONU28FO9CRQVDQK3D5EDSQZG775RGYKQJ37QBZWCHQFJ24WK3T0PFKCCP1JY3QWYVO0D5IWP63QR6H69X5PNHCYNL7ST932F6WYHKWZAUH3IS747WC2CQ94WTZ' where id=13; -update noar ti set v1='LAK6WXGZNEMT4DWCQLT8WTP5OTJXQAX09QG44BF33SI98W7CELG2ZCEGGGCD3ETGLQG0MGFYZOC153SCQE67JJK64HE44NR2YRSTVYSM2ERGWU80CXZZU3V9FJJA85J32B3FPURONU28FO9CRQVDQK3D5EDSQZG775RGYKQJ37QBZWCHQFJ24WK3T0PFKCCP1JY3QWYVO0D5IWP63QR6H69X5PNHCYNL7ST932F6WYHKWZAUH3IS747WC2CQ94WTZ' where id=13; -update noar tt set v2='XR7TCJ6SWY37YMKIA30A6P0UN4VFV8LE5NP9W074DP0D0CTKAVNJ3GSITM7XH0IDN4TS1XGRX890Z1B54YHOV05L3XBWI7NLB07IM1EOGWZGK2PT8JYS0PN4NOJYPJ9NM1VARNSL2F2T9R4F7OOS2UPI62PXGO0RHSM1XLTMKX49TJSIB7NA7QH5W0O6SE7TPEDEEU59MF7WWMKGJC2T7IVUGUA6CTZ0ULQBXPUB709EONRI5REKAGOHZ5KRUPM80' where id=13; -update noar ti set v2='XR7TCJ6SWY37YMKIA30A6P0UN4VFV8LE5NP9W074DP0D0CTKAVNJ3GSITM7XH0IDN4TS1XGRX890Z1B54YHOV05L3XBWI7NLB07IM1EOGWZGK2PT8JYS0PN4NOJYPJ9NM1VARNSL2F2T9R4F7OOS2UPI62PXGO0RHSM1XLTMKX49TJSIB7NA7QH5W0O6SE7TPEDEEU59MF7WWMKGJC2T7IVUGUA6CTZ0ULQBXPUB709EONRI5REKAGOHZ5KRUPM80' where id=13; -update noar tt set v3='HSN6YMIJAXLMEEIW4TNEY99KCC3Y75PT91I2036Z0RPD9RNH1534GPRRDP475O3EPYH92QUB5031TPFKRTSRDKOCFQ4HLSOAMUP7PSFEE02SLXPZ38DR6TO97G9FAKHT9VK1RRMFI428LBRZL72YFQ0DTVSKJXWERUE1655ZH4LGAAI7ERIV8KEP7WVZN1K4DBPKD4RM7XI5MY7ZR6IPFQLXVACBVA62ITUUDYL7XYADFQXVV2NJ5ZIGWLBCMJY8A' where id=13; -update noar ti set v3='HSN6YMIJAXLMEEIW4TNEY99KCC3Y75PT91I2036Z0RPD9RNH1534GPRRDP475O3EPYH92QUB5031TPFKRTSRDKOCFQ4HLSOAMUP7PSFEE02SLXPZ38DR6TO97G9FAKHT9VK1RRMFI428LBRZL72YFQ0DTVSKJXWERUE1655ZH4LGAAI7ERIV8KEP7WVZN1K4DBPKD4RM7XI5MY7ZR6IPFQLXVACBVA62ITUUDYL7XYADFQXVV2NJ5ZIGWLBCMJY8A' where id=13; -update noar tt set v0='DPGL9XGJWM0OHS8TV1CAI4G6WJWBKQOHE9BMN4FTO918WVPAR9PG1MJMUI5Q4PJ640S1R71QLMDJLU0J070TVUVC321UNM8MXKVG622ZZWWW3LIVGAWUM81KTHNYT3H72J317ECJLQWXVQ6J3I5594LE3Z0SDA0SCPH7IHN8SV6D3TXTMLF6SWFD5P3T5V7KP5Q177662SGUX4NS1ZDH0RR3ENKUCZ4C2MYLX8NZCGZWYNGF48L1JX7GUYPMW9XXO' where id=14; -update noar ti set v0='DPGL9XGJWM0OHS8TV1CAI4G6WJWBKQOHE9BMN4FTO918WVPAR9PG1MJMUI5Q4PJ640S1R71QLMDJLU0J070TVUVC321UNM8MXKVG622ZZWWW3LIVGAWUM81KTHNYT3H72J317ECJLQWXVQ6J3I5594LE3Z0SDA0SCPH7IHN8SV6D3TXTMLF6SWFD5P3T5V7KP5Q177662SGUX4NS1ZDH0RR3ENKUCZ4C2MYLX8NZCGZWYNGF48L1JX7GUYPMW9XXO' where id=14; -update noar tt set v1='82DXNVL7DOKCTQ7FAK8SCL8BTL9J7905QF9TY3NZE08VWBT641HD7F8JWDIB93D1R8T701TNBP819NBN6HTFU88QPOWLQQ9B56YYCR3UPN5YCGEA7X7CK318OM1DIVPN9AM93OQVUGMIXGWK8569CHDAFYJTXNPWIJSHQE0Q3SERS1DB9PQ1WB399LI11YNZ9SY399TUSY4QIKHP0EUNXWKMVQDPNT7Z545T1L534HXP5NG7NES13QJZHPATNN16L' where id=14; -update noar ti set v1='82DXNVL7DOKCTQ7FAK8SCL8BTL9J7905QF9TY3NZE08VWBT641HD7F8JWDIB93D1R8T701TNBP819NBN6HTFU88QPOWLQQ9B56YYCR3UPN5YCGEA7X7CK318OM1DIVPN9AM93OQVUGMIXGWK8569CHDAFYJTXNPWIJSHQE0Q3SERS1DB9PQ1WB399LI11YNZ9SY399TUSY4QIKHP0EUNXWKMVQDPNT7Z545T1L534HXP5NG7NES13QJZHPATNN16L' where id=14; -update noar tt set v2='E6B4AB06MLZYTMXVDN3BPX4JF1IPDXANJEZ1NE8RXK0QQN6AHFFGQSDQ3YM0A7VUQ8SZTLS7ASLAABRUSBLQMMRB5E85AG1SFH2NLKXZNSC4QSYQ2KO785ZGZATCCZAQ83XSF31B27IBIIYSXTG6ZPID6R74YW6EMUPATOCUOKRN1KPMNFZ926OC6K4T0EFA3E69FM0TN2MJI8G2JPKLK4NERIRGQ9OLNCSEM15FS0M3NCZV9O86V65A028S2IL9Z' where id=14; -update noar ti set v2='E6B4AB06MLZYTMXVDN3BPX4JF1IPDXANJEZ1NE8RXK0QQN6AHFFGQSDQ3YM0A7VUQ8SZTLS7ASLAABRUSBLQMMRB5E85AG1SFH2NLKXZNSC4QSYQ2KO785ZGZATCCZAQ83XSF31B27IBIIYSXTG6ZPID6R74YW6EMUPATOCUOKRN1KPMNFZ926OC6K4T0EFA3E69FM0TN2MJI8G2JPKLK4NERIRGQ9OLNCSEM15FS0M3NCZV9O86V65A028S2IL9Z' where id=14; -update noar tt set v3='6LDFMFYW502S2CSL96GBL7QA8XCCUYLK169ZSLQX56BPN3PPTUPYMVQ6A4M87CNJ4IKOE3KRAD82AZS4EOIJLHQPDKH9PTTF3WDOVHAJON303YISYMOQMFNJ22RD1M4I08WP8II1FNG9VYE9WGKB4J7DJ3EI5512GBJDRT7SY956EDR77UN3XA0E7JPVDIJ3OQ2IIHI1O6GGQ9J5HVXVT2I4UIBWDTRBJVK1D9GRKVXWWIGOTGSBVA5C7STCV3QTT' where id=14; -update noar ti set v3='6LDFMFYW502S2CSL96GBL7QA8XCCUYLK169ZSLQX56BPN3PPTUPYMVQ6A4M87CNJ4IKOE3KRAD82AZS4EOIJLHQPDKH9PTTF3WDOVHAJON303YISYMOQMFNJ22RD1M4I08WP8II1FNG9VYE9WGKB4J7DJ3EI5512GBJDRT7SY956EDR77UN3XA0E7JPVDIJ3OQ2IIHI1O6GGQ9J5HVXVT2I4UIBWDTRBJVK1D9GRKVXWWIGOTGSBVA5C7STCV3QTT' where id=14; -update noar tt set v0='146QAZLKFPU3ZM0GRPSDLF2TK6Z58210ZYJPVT7CWQHXSVW7K5Y7PNA5YDV4MPC0S5AY4UQMEGJVLQDV4KAMP6RWHUBOZI7B8MEV1D1V3TXFG52O6YJUAVD4BZMTCC5DWNBETALYMI41TDHEXLFFRVUY1D9I3FU0528U39GYMZFO4TR43W78HJG90S19V92O84H800PP6IT7PWOM3T94F5XC01QEHT0FN5AIEGGXCQ3VXZK542W0RDHITV8KBJ4BD' where id=15; -update noar ti set v0='146QAZLKFPU3ZM0GRPSDLF2TK6Z58210ZYJPVT7CWQHXSVW7K5Y7PNA5YDV4MPC0S5AY4UQMEGJVLQDV4KAMP6RWHUBOZI7B8MEV1D1V3TXFG52O6YJUAVD4BZMTCC5DWNBETALYMI41TDHEXLFFRVUY1D9I3FU0528U39GYMZFO4TR43W78HJG90S19V92O84H800PP6IT7PWOM3T94F5XC01QEHT0FN5AIEGGXCQ3VXZK542W0RDHITV8KBJ4BD' where id=15; -update noar tt set v1='0N2RODYAYB3DCVX0VXJPRMGIN0K5VFAFK8JPOV2GX173DM8JNLS2XEABOC1CUBU80KE6PGNC8MESOV2TUQK0V71XQMHKBWVWHUNXQ8VAW4LD71B7QTV8WXBLG4LN95IJCU35O6WST1VPWIW4YD0RKYF2P2AFRB7S56U5YLJ1AP9UEGDR92XQKIHIZ1HHP58SDCIP5BG44ZRLYJ7II1664K70MFIHRJDDEP4DRUVXTOU4BMI96QA6X7FWXOJ964Z2Q' where id=15; -update noar ti set v1='0N2RODYAYB3DCVX0VXJPRMGIN0K5VFAFK8JPOV2GX173DM8JNLS2XEABOC1CUBU80KE6PGNC8MESOV2TUQK0V71XQMHKBWVWHUNXQ8VAW4LD71B7QTV8WXBLG4LN95IJCU35O6WST1VPWIW4YD0RKYF2P2AFRB7S56U5YLJ1AP9UEGDR92XQKIHIZ1HHP58SDCIP5BG44ZRLYJ7II1664K70MFIHRJDDEP4DRUVXTOU4BMI96QA6X7FWXOJ964Z2Q' where id=15; -update noar tt set v2='TIXCEEPHSANG8VF2C9PPVYNVO5EFI1HVXI1XYL6DAJSD29GV2RT0G0HAFUBK42PZ42ONOKEBGXYHXKUAFQCY8ZFJYVKVUQQ3196UD436GYD373SMSHW7UEGE4L9BRJOKNFPPBEXBG4TD1WWJVJCX42BF8PYPDAY1F375KNVWW3L31EUXL311GSKD6LEL3T0BDDS5KXGBFDHDHNJAWELYLG1Z5Q0GP2BKY0VMASFIFND7B0ZPTH8QPPZIX9DJH8WE3' where id=15; -update noar ti set v2='TIXCEEPHSANG8VF2C9PPVYNVO5EFI1HVXI1XYL6DAJSD29GV2RT0G0HAFUBK42PZ42ONOKEBGXYHXKUAFQCY8ZFJYVKVUQQ3196UD436GYD373SMSHW7UEGE4L9BRJOKNFPPBEXBG4TD1WWJVJCX42BF8PYPDAY1F375KNVWW3L31EUXL311GSKD6LEL3T0BDDS5KXGBFDHDHNJAWELYLG1Z5Q0GP2BKY0VMASFIFND7B0ZPTH8QPPZIX9DJH8WE3' where id=15; -update noar tt set v3='BU80H39TADLUV4GHJFTHN2SRHDQI318ZBYGM08761OJ3SIURCB9U1BEQGQR8TQN0IFPBHMYFNG5S4TIYX465KSSGSIYWNV578MFHH6YWL4YZ2V6FMRNANCKGWN28KM3885S8GSV6V43F9BW4NJ00RR11C01MO1Y12RNV1GC87JFCHVKWHWYKP0GXP8W0ZXKVAL7P4CS3RJQ0QJL4UI2EN3K8NJVCM5EO4CR5QJGEGNAXSJQL27AQ7WLHVH0YI7Q6P' where id=15; -update noar ti set v3='BU80H39TADLUV4GHJFTHN2SRHDQI318ZBYGM08761OJ3SIURCB9U1BEQGQR8TQN0IFPBHMYFNG5S4TIYX465KSSGSIYWNV578MFHH6YWL4YZ2V6FMRNANCKGWN28KM3885S8GSV6V43F9BW4NJ00RR11C01MO1Y12RNV1GC87JFCHVKWHWYKP0GXP8W0ZXKVAL7P4CS3RJQ0QJL4UI2EN3K8NJVCM5EO4CR5QJGEGNAXSJQL27AQ7WLHVH0YI7Q6P' where id=15; -update noar tt set v0='1MC1WBDNA6FE50LO20BN3F7JE269P183R332QGGYOL6XI4NRO05YTFGQCVCOHRG231G2CLFYFRG20T7HU7J06DJUWRIHBQ0Q8TT2TWGNDBPQPYWMOFY2UUAY06PD79DNAJMBZJ9YL4WEYVQZAM2YLXN1TKB1PQ9ZIHZ5BHWKVQ7A1WPFN60MBQS6I2D5H38X607QW0EORB2CGF0FKMM22F1OMD6UWU12XHZLKJ1IQJMOD0AE1PUI8XWXDLDM1OVV0' where id=16; -update noar ti set v0='1MC1WBDNA6FE50LO20BN3F7JE269P183R332QGGYOL6XI4NRO05YTFGQCVCOHRG231G2CLFYFRG20T7HU7J06DJUWRIHBQ0Q8TT2TWGNDBPQPYWMOFY2UUAY06PD79DNAJMBZJ9YL4WEYVQZAM2YLXN1TKB1PQ9ZIHZ5BHWKVQ7A1WPFN60MBQS6I2D5H38X607QW0EORB2CGF0FKMM22F1OMD6UWU12XHZLKJ1IQJMOD0AE1PUI8XWXDLDM1OVV0' where id=16; -update noar tt set v1='S2KUJFIG0MEZ8EVL9BA9FGB2BJNNPLSGDJ9M87YQTRLGIJJN1WUG42JLI3M0HUC436F3PPEYJ10YIDVFJ2F30F38NIKD5Y2FH5LY01VJRIVQWZQ8CKJ4LTFMHQOBY79DVT8XLQTUN8LQOP0J3PVQA0VIUZZ9HFGA69C288MSTEA073X2CL75EO6FBEJMPGP7AXUHYIOA7FY6A7EP3ZWB37RUGICAVG4OW0P5YSLXXLN50TZBDQ6XGAFTWLE6RCNB1' where id=16; -update noar ti set v1='S2KUJFIG0MEZ8EVL9BA9FGB2BJNNPLSGDJ9M87YQTRLGIJJN1WUG42JLI3M0HUC436F3PPEYJ10YIDVFJ2F30F38NIKD5Y2FH5LY01VJRIVQWZQ8CKJ4LTFMHQOBY79DVT8XLQTUN8LQOP0J3PVQA0VIUZZ9HFGA69C288MSTEA073X2CL75EO6FBEJMPGP7AXUHYIOA7FY6A7EP3ZWB37RUGICAVG4OW0P5YSLXXLN50TZBDQ6XGAFTWLE6RCNB1' where id=16; -update noar tt set v2='ECWAIFYYPPCUPR9NY17BMBFKVG4N2XYM9ZFG7I4RLCKDNS2QT4JS2VQLHOHSP8V40MBWRK89IX1L2OEXWWWSCZCC2AZS9ZBPPOGMD5TT0NLDMBDCD7E3PI6X58QQEI1297O7B3SHQ8O5BOX2871SIRG8NWE2LA0OY22HVDO3QLDVHHK13DUP214FHUNORTX5QIFV4R28KCU5T7KSNL0X4N1FKVPVAQEF14K8OBRRUZZA22QKAT239BXR66DPLQTTF' where id=16; -update noar ti set v2='ECWAIFYYPPCUPR9NY17BMBFKVG4N2XYM9ZFG7I4RLCKDNS2QT4JS2VQLHOHSP8V40MBWRK89IX1L2OEXWWWSCZCC2AZS9ZBPPOGMD5TT0NLDMBDCD7E3PI6X58QQEI1297O7B3SHQ8O5BOX2871SIRG8NWE2LA0OY22HVDO3QLDVHHK13DUP214FHUNORTX5QIFV4R28KCU5T7KSNL0X4N1FKVPVAQEF14K8OBRRUZZA22QKAT239BXR66DPLQTTF' where id=16; -update noar tt set v3='M7TE8AOGANMM3OR3PGXSTGY8E9CD4T4LBWW9JKQR1DGWM4V3C1PQRZ01FBBUEWUDNDLYIG37B6ZSJ8IVNULWMHHG3YWLTKO37V46C5CQ6TAVR9HLXM5US8VB0UJE5GIBOGEP1BRMXDYZYBRFFW9VCWC7WFFMZGOS93HKGGX7IZ3FQAZNJXU58I6HQ13H8MS3A3M1ZEGLAFCDRDLE67FDP1L41Z3WLTFJDB7FQGMRTLLLH8MY6ARTDEPPM3YS45JPD' where id=16; -update noar ti set v3='M7TE8AOGANMM3OR3PGXSTGY8E9CD4T4LBWW9JKQR1DGWM4V3C1PQRZ01FBBUEWUDNDLYIG37B6ZSJ8IVNULWMHHG3YWLTKO37V46C5CQ6TAVR9HLXM5US8VB0UJE5GIBOGEP1BRMXDYZYBRFFW9VCWC7WFFMZGOS93HKGGX7IZ3FQAZNJXU58I6HQ13H8MS3A3M1ZEGLAFCDRDLE67FDP1L41Z3WLTFJDB7FQGMRTLLLH8MY6ARTDEPPM3YS45JPD' where id=16; -update noar tt set v0='22NCVZ1Q0AFW4FMGZ1I3DXBPISMBTAXDAU945RRMACDJYF44T8AOMJP0VQ8PCPBG5RP3JNUIUCM07SPGVG8A3FL63OWQYKFAESXP2G1FXGK0IKQI94MCOETOD9JKON7A77LXCGMZ2S0Y8Y3YTOR4MUHWC4EFLL7EI99SSPYG69SI0MMESE3FZP0QJHQMF42K58UF0HIKJ6V0AY7ITFIYXNWPMGJ6QLMF9DMYCLODEXVZZM4PARFZ3M28XP9CE8HWF' where id=17; -update noar ti set v0='22NCVZ1Q0AFW4FMGZ1I3DXBPISMBTAXDAU945RRMACDJYF44T8AOMJP0VQ8PCPBG5RP3JNUIUCM07SPGVG8A3FL63OWQYKFAESXP2G1FXGK0IKQI94MCOETOD9JKON7A77LXCGMZ2S0Y8Y3YTOR4MUHWC4EFLL7EI99SSPYG69SI0MMESE3FZP0QJHQMF42K58UF0HIKJ6V0AY7ITFIYXNWPMGJ6QLMF9DMYCLODEXVZZM4PARFZ3M28XP9CE8HWF' where id=17; -update noar tt set v1='X4UN0BAM3WBARYX8IFUL9UIEE16IFFIW1J0P2PGSDW8MWXN4B700VQTYIV7RARVAV4D5DGZYVXJYE9EUZV3QGLXKQG6PGCE4LTJO7LOUJTIPP1ENDGUYSQFFWO5HEU7ZS5WZH403C5WBI3O27HVMPA22TEST6M02UC4SEBKQB5RCTKWO5Y42A5VMVJJI69VEP5NPX9QFOMHPIS94LD4HDU0GTGB0K2EZXG448PGMYKMF152ERO7AEZ0NKG6RJ0Q5F' where id=17; -update noar ti set v1='X4UN0BAM3WBARYX8IFUL9UIEE16IFFIW1J0P2PGSDW8MWXN4B700VQTYIV7RARVAV4D5DGZYVXJYE9EUZV3QGLXKQG6PGCE4LTJO7LOUJTIPP1ENDGUYSQFFWO5HEU7ZS5WZH403C5WBI3O27HVMPA22TEST6M02UC4SEBKQB5RCTKWO5Y42A5VMVJJI69VEP5NPX9QFOMHPIS94LD4HDU0GTGB0K2EZXG448PGMYKMF152ERO7AEZ0NKG6RJ0Q5F' where id=17; -update noar tt set v2='YKCOYH0X4PMF0N25DGDSMYP7B4446O9NLP99L9P9BV6C80UD5J0RFDI7KV1XEB0MYWT3JGHD25ZXJQKMSQU257V4STCBVLLCNUPGBY1KUMLS07SCFOSS5MKWZ67LMRXVB494VEGK3B102L268GGTNSPPD0JDYWVHJ9C0KZ25WDT4HM0PTOGMNH5QP6RLSYXA12QZHQE7Z8NWWNXJALMT8RXAA4PBYDVX8QQMQ3DFWX735U04MPAIYO408FGK7YCNS' where id=17; -update noar ti set v2='YKCOYH0X4PMF0N25DGDSMYP7B4446O9NLP99L9P9BV6C80UD5J0RFDI7KV1XEB0MYWT3JGHD25ZXJQKMSQU257V4STCBVLLCNUPGBY1KUMLS07SCFOSS5MKWZ67LMRXVB494VEGK3B102L268GGTNSPPD0JDYWVHJ9C0KZ25WDT4HM0PTOGMNH5QP6RLSYXA12QZHQE7Z8NWWNXJALMT8RXAA4PBYDVX8QQMQ3DFWX735U04MPAIYO408FGK7YCNS' where id=17; -update noar tt set v3='KP5DX5S0B9VS9WHXSAUMNKM63GIM0SPCC413Y4SHO4ODNKLVFFZ0AM0CD7C929UPOP2MFJGVS8Z1NKJBC5TIRRKZ58C6HZ61K2DLFN0QMS6H4XNWYNULB708SW2RTHCRLY8TJ6D3400IL3SYAIJ2GCT1I3FD95WY3IY8WB7RF1YAS2A18J5FY161W2G14B444KM2LAEJ8N6B20HMYJ6S280TQH77EMS2ZOGE0ANW1KQZIZYW64W0SZNUZ0VLNBXB0' where id=17; -update noar ti set v3='KP5DX5S0B9VS9WHXSAUMNKM63GIM0SPCC413Y4SHO4ODNKLVFFZ0AM0CD7C929UPOP2MFJGVS8Z1NKJBC5TIRRKZ58C6HZ61K2DLFN0QMS6H4XNWYNULB708SW2RTHCRLY8TJ6D3400IL3SYAIJ2GCT1I3FD95WY3IY8WB7RF1YAS2A18J5FY161W2G14B444KM2LAEJ8N6B20HMYJ6S280TQH77EMS2ZOGE0ANW1KQZIZYW64W0SZNUZ0VLNBXB0' where id=17; -update noar tt set v0='WG6VAJUZN27NNW1XPD5RV9L46GQ0L7CGMJNTASQ4VOU4I1GWFUHDTVQ6031OQ5Y3NIAK2EGTQMVKK1HB4LIVH0BQYWR0J3M3GSIKKJHE0Y0K0186HD1JC0GQR579TVQODPNQ89EEJ8Q8FDIXLJ6UWZA6R8LZRENI6OD6MXZS1YCS0C0CGBLCC48GAYGZWZ0PI3EJ22U21J21T4ZHFYBP97ZTM9I7JNMLA9IEE06X2S9EHGLDVW11BSR4EGQIXNW4W' where id=18; -update noar ti set v0='WG6VAJUZN27NNW1XPD5RV9L46GQ0L7CGMJNTASQ4VOU4I1GWFUHDTVQ6031OQ5Y3NIAK2EGTQMVKK1HB4LIVH0BQYWR0J3M3GSIKKJHE0Y0K0186HD1JC0GQR579TVQODPNQ89EEJ8Q8FDIXLJ6UWZA6R8LZRENI6OD6MXZS1YCS0C0CGBLCC48GAYGZWZ0PI3EJ22U21J21T4ZHFYBP97ZTM9I7JNMLA9IEE06X2S9EHGLDVW11BSR4EGQIXNW4W' where id=18; -update noar tt set v1='4HQWT2BPJW5BDQ0ZBVVOVNQS9RU4BA34KG25AHJVZ1XBKKKN8RBUC8UHW70N359XMPGPJE6N7Q59J83L1KB8JOO71NB0T7AYWPLZUH56EJZWBCWVHHYVMF7M5IMSISEXIFAKF65JH7LCL0YCCLLMF794G2SZQ811PMPVWF1X8QQQJFETEYTOD6NPB8BXXPRW5AYNA5I9MOAGR09QD7B9D70SUL4OBGSRZHNSW4EM5VMBSY97R84G91DGW24EB1KV4' where id=18; -update noar ti set v1='4HQWT2BPJW5BDQ0ZBVVOVNQS9RU4BA34KG25AHJVZ1XBKKKN8RBUC8UHW70N359XMPGPJE6N7Q59J83L1KB8JOO71NB0T7AYWPLZUH56EJZWBCWVHHYVMF7M5IMSISEXIFAKF65JH7LCL0YCCLLMF794G2SZQ811PMPVWF1X8QQQJFETEYTOD6NPB8BXXPRW5AYNA5I9MOAGR09QD7B9D70SUL4OBGSRZHNSW4EM5VMBSY97R84G91DGW24EB1KV4' where id=18; -update noar tt set v2='FODMS2CIVRIXOZJ4YZNX12A32R5V5PT6GL0ODOQ90N7T8YRI2KQYOHGKWIJ0XH10W7WJSA3R4U7HGYY4M2V1S2ATTTYLLYPZ3EZM2X6THUF16FQOC6CBQR2B01E4E3QVAKP2YPWKXE0QJQO8JPK2EZRE7Y8WGSFGLY3HVXUHPG8MBY6G6IQFML3KZC1ZKZUMQH9B4CSQ83N64KWY1Y043V75HV3RNW25TZ49V5V53GM6RMLP84KBAPSX0404BG928' where id=18; -update noar ti set v2='FODMS2CIVRIXOZJ4YZNX12A32R5V5PT6GL0ODOQ90N7T8YRI2KQYOHGKWIJ0XH10W7WJSA3R4U7HGYY4M2V1S2ATTTYLLYPZ3EZM2X6THUF16FQOC6CBQR2B01E4E3QVAKP2YPWKXE0QJQO8JPK2EZRE7Y8WGSFGLY3HVXUHPG8MBY6G6IQFML3KZC1ZKZUMQH9B4CSQ83N64KWY1Y043V75HV3RNW25TZ49V5V53GM6RMLP84KBAPSX0404BG928' where id=18; -update noar tt set v3='1BTDX55UWNACA9AKC3OQOKE16GD6SN1JD9DOHRBSC59XAGJLBS12CRXEZ1TI3V109IFQFP3GH9U61SW7MDVNK27V0X0Z3MN8L8LY728C4W80CI3C6N3J1PGQDKOKW0LWE2S5A2D7XQYK9PXEYXRKQBQZU4SOGXMONV7Y5WJC0DV1HUF4ET6HLR4GNTNI955LAEA5XXWNOM8C7NJ8ZXFXU8Y6YRECWIK1280SSZDZQ2YLC2GP6ID3FN18JQPB8DQ9Y' where id=18; -update noar ti set v3='1BTDX55UWNACA9AKC3OQOKE16GD6SN1JD9DOHRBSC59XAGJLBS12CRXEZ1TI3V109IFQFP3GH9U61SW7MDVNK27V0X0Z3MN8L8LY728C4W80CI3C6N3J1PGQDKOKW0LWE2S5A2D7XQYK9PXEYXRKQBQZU4SOGXMONV7Y5WJC0DV1HUF4ET6HLR4GNTNI955LAEA5XXWNOM8C7NJ8ZXFXU8Y6YRECWIK1280SSZDZQ2YLC2GP6ID3FN18JQPB8DQ9Y' where id=18; -update noar tt set v0='3S3UA4ROC3XQNGKW81PUL9LQDN01654SV1WKXSV0BY6Q0JFQN6AJI32AC18FEG18W1OVCFS7XV32ID493YWVFDRB4Z8TDDKI7LI477FFPFMGTN2G7EZFA8CL59KKOKKFMY2U57FKVUD9XJJJ5X81LP8WQ9LO3WKVLW3DFMRY9G096KJFLLI0W57FNTIZQB7OLH5I99N45FREQVT2LB0B5QGEIHLVKC1WUEVZK85MOIEIQ21N71SEDSBJP52I9PL4W' where id=19; -update noar ti set v0='3S3UA4ROC3XQNGKW81PUL9LQDN01654SV1WKXSV0BY6Q0JFQN6AJI32AC18FEG18W1OVCFS7XV32ID493YWVFDRB4Z8TDDKI7LI477FFPFMGTN2G7EZFA8CL59KKOKKFMY2U57FKVUD9XJJJ5X81LP8WQ9LO3WKVLW3DFMRY9G096KJFLLI0W57FNTIZQB7OLH5I99N45FREQVT2LB0B5QGEIHLVKC1WUEVZK85MOIEIQ21N71SEDSBJP52I9PL4W' where id=19; -update noar tt set v1='X1IR527G5348PF69D1VVJQGI14U8TRI6GO0QPOHD5F1X0IUQZ4HC0O3XO9C4R01ZLWZH9LQR5ULGU3N45XZ0NHBYEQS2FIWBX2LYNLYM4U7WVM9Y3EMP4D9JIRHKVG5QSKRUUEALNZBAE78WUQHCD39PR4JJO5N4ALHK3OHEJU5M32A6S7UWFO15P0LA48D6VVKMUM7KY8JMOVUP1I2QGP8NUJ1TAYJXNES8W24CIYJXRTVF1AVU71TIC9QA07LOF' where id=19; -update noar ti set v1='X1IR527G5348PF69D1VVJQGI14U8TRI6GO0QPOHD5F1X0IUQZ4HC0O3XO9C4R01ZLWZH9LQR5ULGU3N45XZ0NHBYEQS2FIWBX2LYNLYM4U7WVM9Y3EMP4D9JIRHKVG5QSKRUUEALNZBAE78WUQHCD39PR4JJO5N4ALHK3OHEJU5M32A6S7UWFO15P0LA48D6VVKMUM7KY8JMOVUP1I2QGP8NUJ1TAYJXNES8W24CIYJXRTVF1AVU71TIC9QA07LOF' where id=19; -update noar tt set v2='KJ7ZA27HMCST439WCTJV138RKVKCGWQ0D36I65SR0MBFA75FTG1MTL5JR4921Z3JYOSAERNSVJY0LXD29XZ7XHYA3EXIEIGF3WMZKRPMV08SLEGHQTJ88I48HP96JWJBWGB8V198HLQV8LP2IUPSLWFIJD0M35JAN4J54PB9I8N7VCV3MOCSUZOUSD43CYFCRL3CJ1GSZ4Q6E6SJ8J5UUC1ZU51QYFH2EZ1KF9ZD2416THENRTG8IE2MJFHMJX7J5' where id=19; -update noar ti set v2='KJ7ZA27HMCST439WCTJV138RKVKCGWQ0D36I65SR0MBFA75FTG1MTL5JR4921Z3JYOSAERNSVJY0LXD29XZ7XHYA3EXIEIGF3WMZKRPMV08SLEGHQTJ88I48HP96JWJBWGB8V198HLQV8LP2IUPSLWFIJD0M35JAN4J54PB9I8N7VCV3MOCSUZOUSD43CYFCRL3CJ1GSZ4Q6E6SJ8J5UUC1ZU51QYFH2EZ1KF9ZD2416THENRTG8IE2MJFHMJX7J5' where id=19; -update noar tt set v3='55UKNY3IE2N16U0HZ2O9Q0L515BSAK0J5W80LPSZ4QUN105EKN5IOU9PW6WB1AME17JZT9WV6QH1GWIC56732TMYD7E1MW4ZAMQL49O9Z1HKSIV6C0URGKBFC2MDGLE7J19TQK5RP9MD7331FPII0ZMZFWC1ZAI61GJI3ARQ1SEZVTAI7N6C4XFUAYPKNIVMYE4U343HL1F0KLGGSG7HXMG5L1F1ZW8Q9LLQCXORQPBX1MWUJBXIMD1JD4DI83HHW' where id=19; -update noar ti set v3='55UKNY3IE2N16U0HZ2O9Q0L515BSAK0J5W80LPSZ4QUN105EKN5IOU9PW6WB1AME17JZT9WV6QH1GWIC56732TMYD7E1MW4ZAMQL49O9Z1HKSIV6C0URGKBFC2MDGLE7J19TQK5RP9MD7331FPII0ZMZFWC1ZAI61GJI3ARQ1SEZVTAI7N6C4XFUAYPKNIVMYE4U343HL1F0KLGGSG7HXMG5L1F1ZW8Q9LLQCXORQPBX1MWUJBXIMD1JD4DI83HHW' where id=19; -update noar tt set v0='9A4B5GRQGF4NXLB6WTBXEO2T5G18CTDFXNN2Y0S9MJTN6V3VOWVTG8R3KG4UQDPXZV9SOZ9EHJT3CTJJKF5MRRAYTF87592OWN6QMOOGS8N37NK45Y93DA8ZVQ2NT1XPOKJFOGDOFWD2TY92XYMWGSS2L8DYCZ6TWBM4H94Y62WNHJP5T7P7EBBBG40H4TT51FMBE2Z4X0SN5FTFFB0A7IL3HEF6APLWAG9P2RKCHFA0M9YXWIGX5MFUWLBO5E3N5' where id=20; -update noar ti set v0='9A4B5GRQGF4NXLB6WTBXEO2T5G18CTDFXNN2Y0S9MJTN6V3VOWVTG8R3KG4UQDPXZV9SOZ9EHJT3CTJJKF5MRRAYTF87592OWN6QMOOGS8N37NK45Y93DA8ZVQ2NT1XPOKJFOGDOFWD2TY92XYMWGSS2L8DYCZ6TWBM4H94Y62WNHJP5T7P7EBBBG40H4TT51FMBE2Z4X0SN5FTFFB0A7IL3HEF6APLWAG9P2RKCHFA0M9YXWIGX5MFUWLBO5E3N5' where id=20; -update noar tt set v1='ZLG2AY5DRT5OVNO77Z2IU9NQMV8FPO431XBAROHR1FXIY2YVEIOXPNZ22ZMED2ECTPEOLNEWN3EDMYATY32J2QEI5XRJS242T28BXH79PCVYMHDVEV2LVINDRDCB8DYACSA8M6FJMNKGPB9G8YQX5QLXKFX1MXJWOHLW1MVXKSGR5AA0LYJPVFK0LG0UK26TIC4S85P3ZLLTS29C2D92Y6U8TY9N781QN2Z8A8KJ0S3I3L9JTQVMA2DCBEJG4WA92' where id=20; -update noar ti set v1='ZLG2AY5DRT5OVNO77Z2IU9NQMV8FPO431XBAROHR1FXIY2YVEIOXPNZ22ZMED2ECTPEOLNEWN3EDMYATY32J2QEI5XRJS242T28BXH79PCVYMHDVEV2LVINDRDCB8DYACSA8M6FJMNKGPB9G8YQX5QLXKFX1MXJWOHLW1MVXKSGR5AA0LYJPVFK0LG0UK26TIC4S85P3ZLLTS29C2D92Y6U8TY9N781QN2Z8A8KJ0S3I3L9JTQVMA2DCBEJG4WA92' where id=20; -update noar tt set v2='53T4WDL12NJU2J7V66V4AEB78XI3CSH0AHP0DGGK96ZCJQI73V3Z1PU1325GKXW558482ZP0B2JUDPSXBC9R9RCXE1SUDP41C78DQ3V624SCOYK6ZU1F03NB63N3GF1EZJE1OUSMH0I3PK3HRXXESYSAQF46BNB4DMWAA47KBTZIA7IJY1V6S57SA6DXW4ATKENCH8GEYP01IYF6LPEFXRVL912XTK5LD1H4PR1GRAN14SLG5ES63MM4S3KPZCX1Y' where id=20; -update noar ti set v2='53T4WDL12NJU2J7V66V4AEB78XI3CSH0AHP0DGGK96ZCJQI73V3Z1PU1325GKXW558482ZP0B2JUDPSXBC9R9RCXE1SUDP41C78DQ3V624SCOYK6ZU1F03NB63N3GF1EZJE1OUSMH0I3PK3HRXXESYSAQF46BNB4DMWAA47KBTZIA7IJY1V6S57SA6DXW4ATKENCH8GEYP01IYF6LPEFXRVL912XTK5LD1H4PR1GRAN14SLG5ES63MM4S3KPZCX1Y' where id=20; -update noar tt set v3='MIUQ1V9AMOCMV1NFBCN6UXKYUE89QWR09P88V5V7JNET38YL65JERW9T54FWCD8QFLDR72S0HV41OVGE54A2UQB0XU7KLMGNK80S1C49O806IIT1MEBS26QP3L0AGJOYOXECQE8EUTWC87JAWRDDD9LEFGMSZ9PBHPZ91BMOUKIJB3KJ9ONCGG7D4DT1TY37YZJBIV6FB69A886ZCY9TZD6WX0EFU46H1GL9F6VFGFGJ3AJ1EA3JUAIPY4W5T43TO' where id=20; -update noar ti set v3='MIUQ1V9AMOCMV1NFBCN6UXKYUE89QWR09P88V5V7JNET38YL65JERW9T54FWCD8QFLDR72S0HV41OVGE54A2UQB0XU7KLMGNK80S1C49O806IIT1MEBS26QP3L0AGJOYOXECQE8EUTWC87JAWRDDD9LEFGMSZ9PBHPZ91BMOUKIJB3KJ9ONCGG7D4DT1TY37YZJBIV6FB69A886ZCY9TZD6WX0EFU46H1GL9F6VFGFGJ3AJ1EA3JUAIPY4W5T43TO' where id=20; -update noar tt set v0='SVLUC9216J60KEPVL9OC5SJ1H6KQASP581PAU8Y99I28XXPGZ217JOASTSJR1C6CA6ZPWER9DYOQNQM96W8I9N9U2LCSV8C3JTERE1V5CF6YSN8X2U6NQECHMPLQNV8PNXCPLKOI4OYXC83IOMG8QA9C2VG6WIPEQUBLZDNA7C6CWAG0IFYMU1VU5UPQJ0U7XF9ND0JTEKJONI5QKBZ4T2M07FFB566N9DIHRAFJC7UR2MS4SV1SQQMKKGAQEUN6U' where id=21; -update noar ti set v0='SVLUC9216J60KEPVL9OC5SJ1H6KQASP581PAU8Y99I28XXPGZ217JOASTSJR1C6CA6ZPWER9DYOQNQM96W8I9N9U2LCSV8C3JTERE1V5CF6YSN8X2U6NQECHMPLQNV8PNXCPLKOI4OYXC83IOMG8QA9C2VG6WIPEQUBLZDNA7C6CWAG0IFYMU1VU5UPQJ0U7XF9ND0JTEKJONI5QKBZ4T2M07FFB566N9DIHRAFJC7UR2MS4SV1SQQMKKGAQEUN6U' where id=21; -update noar tt set v1='G387H4MFM9PFE6MBY8BRAHEOY6A1MS9NIAJQMWD3IYVQK36UQRUUZG6R78XDKIC2NX7RNQVLILYKE1VPQ6OD040HKUOYCB00F8OB6ZZPABNZFH2T5DDDDQE1DAU0NIVC5X7WQMIB47AA18D7EWLP1R03D7WKASR8WKGNE3DIDQR3S4UA6UCM174RV9XW8YLAMSJ7SFATJ9LYTNQQW6868SIW0ICY1JB8GXJY0Q4V9EVI0XKFJCUZ9GWFF5BYDXFXW' where id=21; -update noar ti set v1='G387H4MFM9PFE6MBY8BRAHEOY6A1MS9NIAJQMWD3IYVQK36UQRUUZG6R78XDKIC2NX7RNQVLILYKE1VPQ6OD040HKUOYCB00F8OB6ZZPABNZFH2T5DDDDQE1DAU0NIVC5X7WQMIB47AA18D7EWLP1R03D7WKASR8WKGNE3DIDQR3S4UA6UCM174RV9XW8YLAMSJ7SFATJ9LYTNQQW6868SIW0ICY1JB8GXJY0Q4V9EVI0XKFJCUZ9GWFF5BYDXFXW' where id=21; -update noar tt set v2='RTFNBX0IMOHQGV2J2BO2DCI9GNHL2LUOVXWIV6PRLNRVQTIOS6OTQWA5K66WAWYZBO3IF54ZSMFYADTRNJ8370D8XO5ENUBQ2XNLWQUGOLPMKQ8FDHIR1O3399XV1WXP9BMRKKSQ9MWC6OWUB40LJX0YJIP0DE0BELD1B7YNP7FBG92VZ8NQKS5GAI9Z4XP7VXGTT4SH0EMX44ZOOTV5VXK4ZE2V98M8FEEHW7U5QDP4SJYRI33XOLFKYHFMZX6ZB' where id=21; -update noar ti set v2='RTFNBX0IMOHQGV2J2BO2DCI9GNHL2LUOVXWIV6PRLNRVQTIOS6OTQWA5K66WAWYZBO3IF54ZSMFYADTRNJ8370D8XO5ENUBQ2XNLWQUGOLPMKQ8FDHIR1O3399XV1WXP9BMRKKSQ9MWC6OWUB40LJX0YJIP0DE0BELD1B7YNP7FBG92VZ8NQKS5GAI9Z4XP7VXGTT4SH0EMX44ZOOTV5VXK4ZE2V98M8FEEHW7U5QDP4SJYRI33XOLFKYHFMZX6ZB' where id=21; -update noar tt set v3='WXBULGD94O04KDUPE250V2XT6DDAL2NSUORYTI50TCRTMNJ8XNRV775P7QEYGS7E9IOWFBUFA2XSFXW0WISEJMYTE0BJKQIXZSQX58E9ANQUH56DBEIWBOY0PIJJNZ3ADLMM49T4RX69IX1W4M86W56DM2ATXLTOGJC0SPPYQMMMWA2MGENIUWKI022W3FWNKLSHSGV8SAEW6XTF6GPYBGLYHS6XUS454PPQE6GGK0UB4TNLDQXFS7UDUGB2CWYQO' where id=21; -update noar ti set v3='WXBULGD94O04KDUPE250V2XT6DDAL2NSUORYTI50TCRTMNJ8XNRV775P7QEYGS7E9IOWFBUFA2XSFXW0WISEJMYTE0BJKQIXZSQX58E9ANQUH56DBEIWBOY0PIJJNZ3ADLMM49T4RX69IX1W4M86W56DM2ATXLTOGJC0SPPYQMMMWA2MGENIUWKI022W3FWNKLSHSGV8SAEW6XTF6GPYBGLYHS6XUS454PPQE6GGK0UB4TNLDQXFS7UDUGB2CWYQO' where id=21; -update noar tt set v0='JEEZEZGZ7ONLNEXWNOZ6IEOLE70TS3FG9M1B48MGOMZ67QQEZ4KX7PJUIPAECUE8TRF5NOODH9C405C5DD1YESEOMTCGP54NET4WJ0XG3Q88JK6NHAF1T85KM3JDSIUDHXUDGIJA1ISS7YRUBI4NY3SCBP6NEO6YJWP605301X5SQW6GD6E1PR07YPPULZO85CR2EGGM483ZBFJWA1MMBCO8CX6885JAOM078PIA8FTQ1ERDBQRUW2Y30PCGEJ1RC' where id=22; -update noar ti set v0='JEEZEZGZ7ONLNEXWNOZ6IEOLE70TS3FG9M1B48MGOMZ67QQEZ4KX7PJUIPAECUE8TRF5NOODH9C405C5DD1YESEOMTCGP54NET4WJ0XG3Q88JK6NHAF1T85KM3JDSIUDHXUDGIJA1ISS7YRUBI4NY3SCBP6NEO6YJWP605301X5SQW6GD6E1PR07YPPULZO85CR2EGGM483ZBFJWA1MMBCO8CX6885JAOM078PIA8FTQ1ERDBQRUW2Y30PCGEJ1RC' where id=22; -update noar tt set v1='L14W6JEIRD4STH3155ALH505X12KZM78GJ20UJT7HS7OH05LT36MUTEDO64UEOQCBAQ8SZF2PFHXF7AH4OJ63EA7V4KRD5SJK7B2ZKZ8V0RQJ4WQYVKK1H9SM2WCLJU8WASNP6K5I3WGFT7O56GFX0BBMGJQ9QMPPLFCDIW9X7S1AFV2A91WT9443OQ92J086H7GOJKPC2OHXLLGVSWFG6LRQ165WQ6ZJFV9WHWMY71E6OLP4SBDKFI5XWGT29UW9' where id=22; -update noar ti set v1='L14W6JEIRD4STH3155ALH505X12KZM78GJ20UJT7HS7OH05LT36MUTEDO64UEOQCBAQ8SZF2PFHXF7AH4OJ63EA7V4KRD5SJK7B2ZKZ8V0RQJ4WQYVKK1H9SM2WCLJU8WASNP6K5I3WGFT7O56GFX0BBMGJQ9QMPPLFCDIW9X7S1AFV2A91WT9443OQ92J086H7GOJKPC2OHXLLGVSWFG6LRQ165WQ6ZJFV9WHWMY71E6OLP4SBDKFI5XWGT29UW9' where id=22; -update noar tt set v2='UO15756S4IHK8GC5580ND2Z523LKMT8J48J4GXFJTBSJ9QTCJ9T1VWDD92UQ7FI82R3BCOLJM4JV09GAW4D02QR3OFJH665RYQYVPW60DXHBFCO1VZTOR4XMOE749DWZUYUJ5L09MKCQLHVF1SKWI3SKXDOE6NNAX6FZD1KC22ILYI6CV379FCZZ525I64Z1WXGHD6O2XNJJSIRQEE5SYDKR75PKLA5B3ZM1WY7SQ0F3EGB8T85IN6NIZH9W8CQCZ' where id=22; -update noar ti set v2='UO15756S4IHK8GC5580ND2Z523LKMT8J48J4GXFJTBSJ9QTCJ9T1VWDD92UQ7FI82R3BCOLJM4JV09GAW4D02QR3OFJH665RYQYVPW60DXHBFCO1VZTOR4XMOE749DWZUYUJ5L09MKCQLHVF1SKWI3SKXDOE6NNAX6FZD1KC22ILYI6CV379FCZZ525I64Z1WXGHD6O2XNJJSIRQEE5SYDKR75PKLA5B3ZM1WY7SQ0F3EGB8T85IN6NIZH9W8CQCZ' where id=22; -update noar tt set v3='48G9L26BM5A5IL4MF2VFZ7SAC5XQEFKBNU898PMEW7TANRVXIW6Y1JEYQMTURT6HRF355ROJ1E09OR5Z5GI2H3724R86NIBCQ4G2BQFCACINEDJNKN04A46BJGV4G4PPB67ALJJEZJQ0X9EYHISYQH6TCWQ4AX7CL0ZCKNNY6CP2VHYSQ8OCI3JMRBPLJRLB9PXULNTG6IKQ6J4K66C3RM6122FLFTZYZCNKEA692YNF71QS7VU8W260EAHSGO42H' where id=22; -update noar ti set v3='48G9L26BM5A5IL4MF2VFZ7SAC5XQEFKBNU898PMEW7TANRVXIW6Y1JEYQMTURT6HRF355ROJ1E09OR5Z5GI2H3724R86NIBCQ4G2BQFCACINEDJNKN04A46BJGV4G4PPB67ALJJEZJQ0X9EYHISYQH6TCWQ4AX7CL0ZCKNNY6CP2VHYSQ8OCI3JMRBPLJRLB9PXULNTG6IKQ6J4K66C3RM6122FLFTZYZCNKEA692YNF71QS7VU8W260EAHSGO42H' where id=22; -update noar tt set v0='742W4TS0469RFUNWNWDLI1TQJF2VMR3WZWVURHMRRV7FD4LIRO8HIVBW6SMMJHINQ7IR670MKDA46P3P2IQNJ8GE9JZOC4W2UOIW2HLOTVKVA2NH52P3PSYI8O6XM8ZOESMS5VTSTSYRU29U7Q5P6AH9KNSGMIXOTV24FGT3E7SU1P05XKZVGFRU8OF4YITK37DEUAWY0C57EI95OEH07M99GCXQ68RPZF3DZ84IFGTV4Q35FR8Z01FAEC8F81ZM6' where id=23; -update noar ti set v0='742W4TS0469RFUNWNWDLI1TQJF2VMR3WZWVURHMRRV7FD4LIRO8HIVBW6SMMJHINQ7IR670MKDA46P3P2IQNJ8GE9JZOC4W2UOIW2HLOTVKVA2NH52P3PSYI8O6XM8ZOESMS5VTSTSYRU29U7Q5P6AH9KNSGMIXOTV24FGT3E7SU1P05XKZVGFRU8OF4YITK37DEUAWY0C57EI95OEH07M99GCXQ68RPZF3DZ84IFGTV4Q35FR8Z01FAEC8F81ZM6' where id=23; -update noar tt set v1='FPBNQIHCIJ810F5HG2JL6G8WW4DNU0POZ3TKRAU0RD32YGB27APJJB3GBO1826IB1C1OVJBSE6X2N0VI8RDWLHE2K36ZNTX1ILGEULWH8W0AH8N2W3B6886XENFFRUGD2C8EXKMD5FMSFWP0VJD7GS244EDSTJXGQA31ZM86EW9HCCH131RVXDVQ54DGD6X8QKRIILOI5355EKFHTKQM9HCP00IWYSNA56JMPZDO7AGJCC31PH4XOB3R23Y89S8AC' where id=23; -update noar ti set v1='FPBNQIHCIJ810F5HG2JL6G8WW4DNU0POZ3TKRAU0RD32YGB27APJJB3GBO1826IB1C1OVJBSE6X2N0VI8RDWLHE2K36ZNTX1ILGEULWH8W0AH8N2W3B6886XENFFRUGD2C8EXKMD5FMSFWP0VJD7GS244EDSTJXGQA31ZM86EW9HCCH131RVXDVQ54DGD6X8QKRIILOI5355EKFHTKQM9HCP00IWYSNA56JMPZDO7AGJCC31PH4XOB3R23Y89S8AC' where id=23; -update noar tt set v2='SSXNTOVFT1V1W09WGG0UFW0KI84DZUUVAWPH989N2H76M1ZXQLH8FBFG9JC124ESP2Q7U4LSIVFQ681AAO99NJLOHVWI83ALBHUF6QNZKZG0MPPQ4FI02TQUUWRYOUD7IBMQACR36IB7XGZ01U7DI60GCA3AOB9IFHB48KVJTTHVIWBYURC640DHSTKH2YXUSNJHIUBFNLO8BIVJ67WZ60USJ542HEB6KK1TIBDH348LBJ3DIS8V9CMR3A3OCJ6A7' where id=23; -update noar ti set v2='SSXNTOVFT1V1W09WGG0UFW0KI84DZUUVAWPH989N2H76M1ZXQLH8FBFG9JC124ESP2Q7U4LSIVFQ681AAO99NJLOHVWI83ALBHUF6QNZKZG0MPPQ4FI02TQUUWRYOUD7IBMQACR36IB7XGZ01U7DI60GCA3AOB9IFHB48KVJTTHVIWBYURC640DHSTKH2YXUSNJHIUBFNLO8BIVJ67WZ60USJ542HEB6KK1TIBDH348LBJ3DIS8V9CMR3A3OCJ6A7' where id=23; -update noar tt set v3='7OYKHHGBLUCKU96U9QEYG8RLEAQQRQZRDCTUX6C0AMSPEB867J72NBKRGSKQIBA3TB50J5HYSVPCFTUKDYW54F10W388C046KDSZWYJ8W97FR0WRN7U2T84X5VF54ICHFZF9LNNN4NXP6EUDSX0T39UEI82W5GF1VVCQ8CX7ZLVMEST9KH6267DYB1E067NW2T3IGW8ZJVS9UAWK2ALGHEVOBNAKOENJWE6IGNEND4WK1DMUVVVN0R4S4KEYXYXGY' where id=23; -update noar ti set v3='7OYKHHGBLUCKU96U9QEYG8RLEAQQRQZRDCTUX6C0AMSPEB867J72NBKRGSKQIBA3TB50J5HYSVPCFTUKDYW54F10W388C046KDSZWYJ8W97FR0WRN7U2T84X5VF54ICHFZF9LNNN4NXP6EUDSX0T39UEI82W5GF1VVCQ8CX7ZLVMEST9KH6267DYB1E067NW2T3IGW8ZJVS9UAWK2ALGHEVOBNAKOENJWE6IGNEND4WK1DMUVVVN0R4S4KEYXYXGY' where id=23; -update noar tt set v0='UKHGEYJNEHB43UYR29RVIX2E69BM38JXOIWFE0YKEGM21M2QBYN9LLTTUZFIGG1MQJL3NJJF4VT704R5L38LZ6JRAQL8XPDRQ4P7JBYKXR43AXWZEO4GF8RD90R1750ZGGFVOCMQPEH1SZLBU9GA5RH3U9XR43D02N1YLV2OK81J1JPEF3SO600S0F9EHDSRZROBYPTO964G2B1IEUT4B8LXV0JQ011KBLNKQ2HY29DY2GIBS2QP0DPYGGGL04VRX' where id=24; -update noar ti set v0='UKHGEYJNEHB43UYR29RVIX2E69BM38JXOIWFE0YKEGM21M2QBYN9LLTTUZFIGG1MQJL3NJJF4VT704R5L38LZ6JRAQL8XPDRQ4P7JBYKXR43AXWZEO4GF8RD90R1750ZGGFVOCMQPEH1SZLBU9GA5RH3U9XR43D02N1YLV2OK81J1JPEF3SO600S0F9EHDSRZROBYPTO964G2B1IEUT4B8LXV0JQ011KBLNKQ2HY29DY2GIBS2QP0DPYGGGL04VRX' where id=24; -update noar tt set v1='WR3NEMXH8RB6CVIENPJRQE5UU412PHLH1K9LSHKMKQQW1KW57G0YWOS081DB9HL7DBR2B2FW9SUZOS37YTVCHWT8CTTIB78WWTSEVFNTRH4WPZ5BRN1W3Q8Q0IE8ZHAW6VD2JRFI6O384RABB61MF09H9YWX3FLTDU75UG1CTV8NW00BEXI58PHJSWHC4OIOUOKZBN8GQBJFX0WB4HS14LWEJ7MB2KJQDAIEN5J1H78KYLZ9HTKIFQEASH188HTMD' where id=24; -update noar ti set v1='WR3NEMXH8RB6CVIENPJRQE5UU412PHLH1K9LSHKMKQQW1KW57G0YWOS081DB9HL7DBR2B2FW9SUZOS37YTVCHWT8CTTIB78WWTSEVFNTRH4WPZ5BRN1W3Q8Q0IE8ZHAW6VD2JRFI6O384RABB61MF09H9YWX3FLTDU75UG1CTV8NW00BEXI58PHJSWHC4OIOUOKZBN8GQBJFX0WB4HS14LWEJ7MB2KJQDAIEN5J1H78KYLZ9HTKIFQEASH188HTMD' where id=24; -update noar tt set v2='UCAQ0O4WP1ILS1UAVXLI6P4506AIR4L2C85SDBQGRQ8UCUCRALFACCV62U1CBAI1QNGFDXI59ISN3M48235LYA279VU96P38BFPFJPRNAQXR3H3CAUXTQSQLMJZS00HBWLW2T6ZDP0S8QGHGO84HI0MQ6DAZT4UKYQKAWRE4AIAY3PHEQWX23UN55W2YLKGTFWILEDICTITMZZ5DFIGXMQC9DERTEBU7ZCG2LEWPIR6K3GAWAA9SIK8RPWTS6S0TK' where id=24; -update noar ti set v2='UCAQ0O4WP1ILS1UAVXLI6P4506AIR4L2C85SDBQGRQ8UCUCRALFACCV62U1CBAI1QNGFDXI59ISN3M48235LYA279VU96P38BFPFJPRNAQXR3H3CAUXTQSQLMJZS00HBWLW2T6ZDP0S8QGHGO84HI0MQ6DAZT4UKYQKAWRE4AIAY3PHEQWX23UN55W2YLKGTFWILEDICTITMZZ5DFIGXMQC9DERTEBU7ZCG2LEWPIR6K3GAWAA9SIK8RPWTS6S0TK' where id=24; -update noar tt set v3='XGLATUXOQZCS5PVNTA7P4BKEHF23QYWXMO6FL334424I087RPN9095VM4SBBK7RSQNW9R1EDNMCLHEFDBWUZ8APJ26POHN3SWHL6BR3W5I3KONYG9TEHM38ELG4EP7GTZ0H3TLGUZS1WT2PF1U468M9PX57DGYTXYH1KET4P8EP24ZBK783ZTRHC60MKYM6CV53TZM5EID31GJAED5DNOG6FBJ31DPCKKB70EG6B1O5V0NUNLY28ZAZMNOTCXY2OM' where id=24; -update noar ti set v3='XGLATUXOQZCS5PVNTA7P4BKEHF23QYWXMO6FL334424I087RPN9095VM4SBBK7RSQNW9R1EDNMCLHEFDBWUZ8APJ26POHN3SWHL6BR3W5I3KONYG9TEHM38ELG4EP7GTZ0H3TLGUZS1WT2PF1U468M9PX57DGYTXYH1KET4P8EP24ZBK783ZTRHC60MKYM6CV53TZM5EID31GJAED5DNOG6FBJ31DPCKKB70EG6B1O5V0NUNLY28ZAZMNOTCXY2OM' where id=24; -update noar tt set v0='LET2ITC7OAO0EV495YIAH04HVBSXWFG4FS202U7P369X29RB8EBI86EMMKITTGOQROVSVD5ZT2IOE6FXM5SLQLN8QZD3K0MGUEE8UGPBLBAE7PLX71IJ3LLERHTFZTGYWR1E0YA4A3VPZYV9HGCG0149HK7FN36U9DCOE4AM4264LMJ1GK4QOMDKCDMV7JLD5MVUJZX8Y6N8NHHLCQ1FVT7P15LC7CJOPNIO482RXFD8BY53FY0LS895WMW5PKCA0' where id=25; -update noar ti set v0='LET2ITC7OAO0EV495YIAH04HVBSXWFG4FS202U7P369X29RB8EBI86EMMKITTGOQROVSVD5ZT2IOE6FXM5SLQLN8QZD3K0MGUEE8UGPBLBAE7PLX71IJ3LLERHTFZTGYWR1E0YA4A3VPZYV9HGCG0149HK7FN36U9DCOE4AM4264LMJ1GK4QOMDKCDMV7JLD5MVUJZX8Y6N8NHHLCQ1FVT7P15LC7CJOPNIO482RXFD8BY53FY0LS895WMW5PKCA0' where id=25; -update noar tt set v1='BLLIFZZB3919MUJNPCVE7BSOY7J1YJS7ALBBMYTZVZ3EVHMP47DKE59BUOA4A3H731EYB4AVUCY7KSOGZJDKIL51UMQIW1RI1Q6TRTC1K2430ZU08FTNWROFC250J6X24AIYPL5BG8MIYYPIE36KPG9B1CHLA568L06A22CDU9P90DEP7Z6X0OO4DCNT2ZRL54CPFM0TD71S05RJUALNU4LMCOCSFIB0WYGEDQ1W3UWWD9S2O2IUUSCSUX6E1KGP6' where id=25; -update noar ti set v1='BLLIFZZB3919MUJNPCVE7BSOY7J1YJS7ALBBMYTZVZ3EVHMP47DKE59BUOA4A3H731EYB4AVUCY7KSOGZJDKIL51UMQIW1RI1Q6TRTC1K2430ZU08FTNWROFC250J6X24AIYPL5BG8MIYYPIE36KPG9B1CHLA568L06A22CDU9P90DEP7Z6X0OO4DCNT2ZRL54CPFM0TD71S05RJUALNU4LMCOCSFIB0WYGEDQ1W3UWWD9S2O2IUUSCSUX6E1KGP6' where id=25; -update noar tt set v2='E3DEFLQW33FV7W6GXU4KUXFAMQ1T2GS0JM7YSZOI8VS8LLGVEFLWPVU19E1Z2GVP7AQ2CT0HSMFJUPALLHHNKH4L327F3FWATH3KFZ2FQL7SE7TNMB35B19KB4ZFWURWC7MENP8OX34BVXOXLHNC06H1T9CHT968UZK6QTGY4D82KMNTQ9FPWTL42B9VEBM8EGK9SMKKZ39KTMTJE1NA2OBBGGLYC4ZRDOHT173EZF1SSQEFTL83OTFFZF6JH741U' where id=25; -update noar ti set v2='E3DEFLQW33FV7W6GXU4KUXFAMQ1T2GS0JM7YSZOI8VS8LLGVEFLWPVU19E1Z2GVP7AQ2CT0HSMFJUPALLHHNKH4L327F3FWATH3KFZ2FQL7SE7TNMB35B19KB4ZFWURWC7MENP8OX34BVXOXLHNC06H1T9CHT968UZK6QTGY4D82KMNTQ9FPWTL42B9VEBM8EGK9SMKKZ39KTMTJE1NA2OBBGGLYC4ZRDOHT173EZF1SSQEFTL83OTFFZF6JH741U' where id=25; -update noar tt set v3='G7DCK92JDBMTPDWV5E3AU6N81LP41Z2LE157M222BUUC7JNBFAB1CLTM5NRN3E3OT5V0X0PND9RXZJXBCQO6XIG60ZT9UMLKY5JMFVZRFCJ1FVS4WD1RAEGBPNWYWOU857QVJ87C602NB7TDQCAURU7ZE2JCYQCV5N83XW9Z4JCVUS7MOJFLLBOCQEN1BHVCG4ZW11YFN8F8JDAH4F0W4HUZE7D7S3YZC3HEVYMJVWEBQUEI96D5UHCZ9NZ2AFAAS' where id=25; -update noar ti set v3='G7DCK92JDBMTPDWV5E3AU6N81LP41Z2LE157M222BUUC7JNBFAB1CLTM5NRN3E3OT5V0X0PND9RXZJXBCQO6XIG60ZT9UMLKY5JMFVZRFCJ1FVS4WD1RAEGBPNWYWOU857QVJ87C602NB7TDQCAURU7ZE2JCYQCV5N83XW9Z4JCVUS7MOJFLLBOCQEN1BHVCG4ZW11YFN8F8JDAH4F0W4HUZE7D7S3YZC3HEVYMJVWEBQUEI96D5UHCZ9NZ2AFAAS' where id=25; -update noar tt set v0='92KSYM6D0QCDKV6DR6LGYQAJEPP6K3JK2MTYAJNH0OXI4VQHM83F3BNE98KWRN42GS47PMIAEJ026T8JH1OT3YXNMVVN7SX0EENAWG1UO7M83KHK9WA93W3UYPTSJ1AHT9CLSXFONP9SP2RERG0VNRZQQKIUTPPXO2QE5HJJVIWW051SWF6UUR188AKPEIXZ908JSOEGFJ2QTYY1LZ7GN2AG3JMLT8KOT8VXJRKVVY8BVVI13O5GDKL748CC5T762' where id=26; -update noar ti set v0='92KSYM6D0QCDKV6DR6LGYQAJEPP6K3JK2MTYAJNH0OXI4VQHM83F3BNE98KWRN42GS47PMIAEJ026T8JH1OT3YXNMVVN7SX0EENAWG1UO7M83KHK9WA93W3UYPTSJ1AHT9CLSXFONP9SP2RERG0VNRZQQKIUTPPXO2QE5HJJVIWW051SWF6UUR188AKPEIXZ908JSOEGFJ2QTYY1LZ7GN2AG3JMLT8KOT8VXJRKVVY8BVVI13O5GDKL748CC5T762' where id=26; -update noar tt set v1='JXZVHXEQD2EXJZ31HK5GXDP0Z5LMZAT3ODLLX9RHRVO581QGVDIY982M6K8KGVDGHQDI1ZMTP3XVO1XTCSB9UUFHNAREOI92W32044SGWWXY5310TIK780YKWDNC1UQ86014PDT4KVHYWCGKYMIEGRLG989E708XTK78R41RQPM370QLS9VNWS6IGY2L6VISSPYVRFF0I4BB966ZGJX5W4K3NH1GEJT5DMN1DFQ7YIL2U9KMHRUUABJC6SEVXDHXA' where id=26; -update noar ti set v1='JXZVHXEQD2EXJZ31HK5GXDP0Z5LMZAT3ODLLX9RHRVO581QGVDIY982M6K8KGVDGHQDI1ZMTP3XVO1XTCSB9UUFHNAREOI92W32044SGWWXY5310TIK780YKWDNC1UQ86014PDT4KVHYWCGKYMIEGRLG989E708XTK78R41RQPM370QLS9VNWS6IGY2L6VISSPYVRFF0I4BB966ZGJX5W4K3NH1GEJT5DMN1DFQ7YIL2U9KMHRUUABJC6SEVXDHXA' where id=26; -update noar tt set v2='6A6VBLBJYWFNJZP5AO8GHNS5KSAXM4U48R990LAP038RA0YJX9TFPCJMN8QB4MS47U6J8IZHV7FCHE9PTD3ZCS66DTPTME52GQEFDQT33XDYMA8E0CV71SZ4H8FCJ7XXNEU98DW7CNDMOAQ94L3QVM86QJCCC0Z9IS6M1YQYMZ1CDWEQQN95Z6RUM97QMFCZ7UAEFI9D3MNUKP8S8XAA0GT2KBQZW5XXX8K537MZM8IHWQ0PPBDJ1MAA3ARIS7VUD' where id=26; -update noar ti set v2='6A6VBLBJYWFNJZP5AO8GHNS5KSAXM4U48R990LAP038RA0YJX9TFPCJMN8QB4MS47U6J8IZHV7FCHE9PTD3ZCS66DTPTME52GQEFDQT33XDYMA8E0CV71SZ4H8FCJ7XXNEU98DW7CNDMOAQ94L3QVM86QJCCC0Z9IS6M1YQYMZ1CDWEQQN95Z6RUM97QMFCZ7UAEFI9D3MNUKP8S8XAA0GT2KBQZW5XXX8K537MZM8IHWQ0PPBDJ1MAA3ARIS7VUD' where id=26; -update noar tt set v3='TYG0RN23Z6U36OA28913RTYOSX0EQ6J7Y1ME10VLMRDEBQ4HPF1VWP35TI4GVQ9G28TDTB7ZKRSKIFYFWCX9H8UUX26W0SBX9TBI0VUCPM1PZKYO3P7QQZSH88X7ZK0702KC9GAFFSMKQJA2ARWV2S4741OU4WTJAQ8ZTAM2PH25LK2ERCAX038KMWXN1K1YWV273L6STNQBJZQ7GD26GBO0VT6V9EX7RBIU1JG6UTNRAYMRCVKDVG0MRUWM0OD8O' where id=26; -update noar ti set v3='TYG0RN23Z6U36OA28913RTYOSX0EQ6J7Y1ME10VLMRDEBQ4HPF1VWP35TI4GVQ9G28TDTB7ZKRSKIFYFWCX9H8UUX26W0SBX9TBI0VUCPM1PZKYO3P7QQZSH88X7ZK0702KC9GAFFSMKQJA2ARWV2S4741OU4WTJAQ8ZTAM2PH25LK2ERCAX038KMWXN1K1YWV273L6STNQBJZQ7GD26GBO0VT6V9EX7RBIU1JG6UTNRAYMRCVKDVG0MRUWM0OD8O' where id=26; -update noar tt set v0='1QKXZMD6C0L0Z79BL758AD91MJFXVS5QMEX33FAPO1HG7L440CS7UO12FGEPW33X6RJ5W5NYORVTOHTLB6K7R3A5THQIN6AIMH05J1EKF9ZZZSL07GG0MSG4UVS1CQ6KYOSC3LR11XERDPT02YJS97HFDFWHMGIFPLHRZPALX5F8KPSQCQU0FVCCLM8NUKG4C9ZTSQHW1Y9BXP876U17NF7O9GR5VN4XG6ATQKKMO5KUVPQV8GK2KUVNR32EIN35G' where id=27; -update noar ti set v0='1QKXZMD6C0L0Z79BL758AD91MJFXVS5QMEX33FAPO1HG7L440CS7UO12FGEPW33X6RJ5W5NYORVTOHTLB6K7R3A5THQIN6AIMH05J1EKF9ZZZSL07GG0MSG4UVS1CQ6KYOSC3LR11XERDPT02YJS97HFDFWHMGIFPLHRZPALX5F8KPSQCQU0FVCCLM8NUKG4C9ZTSQHW1Y9BXP876U17NF7O9GR5VN4XG6ATQKKMO5KUVPQV8GK2KUVNR32EIN35G' where id=27; -update noar tt set v1='43D4WF8721S3JA8E40KNKVPSRQ0A6CSIGKB60E1WG7723NVXE7ZN2HDSV62XPAXBMOB0OIS42219X1SN23XUQ43LH23L3GNKTZ601EX9G23BP1GUKXXJ4HNEHDW8VVXOVAXFL3R1X0WD2J1FU0R4N8O0DM062SNGZKDZVUV77OOAO2HQ81A29DUJ1TI23VBGNB4BPZN5D9TYHIK72WENPQURVCKRAV21GHUII9Y53UO6I05KKQKZGMLG3HC6JCYR5' where id=27; -update noar ti set v1='43D4WF8721S3JA8E40KNKVPSRQ0A6CSIGKB60E1WG7723NVXE7ZN2HDSV62XPAXBMOB0OIS42219X1SN23XUQ43LH23L3GNKTZ601EX9G23BP1GUKXXJ4HNEHDW8VVXOVAXFL3R1X0WD2J1FU0R4N8O0DM062SNGZKDZVUV77OOAO2HQ81A29DUJ1TI23VBGNB4BPZN5D9TYHIK72WENPQURVCKRAV21GHUII9Y53UO6I05KKQKZGMLG3HC6JCYR5' where id=27; -update noar tt set v2='TVFMQGD8SHUMGWLDECLPQOZ3DZZJSW6SESKODE5SV4WNWHTUHBQ6KKLQYDHQ8O03HM11S5NX7P20QH30C9102LI7HF754799AIDNN3OQC18CD4OP938YDZCBGFSUW24IY0G8QJQRM7BIE6FVI2WNSV04S67M4JAY20C7LZXYPBAJU17TEJN1X2ONMHM2QTOYSTDDGBPWKQD3D8716WUK1FAG9KFPY44WZXI64BU1SLA8EIFV4C0DEQJJUYGE3HIKF' where id=27; -update noar ti set v2='TVFMQGD8SHUMGWLDECLPQOZ3DZZJSW6SESKODE5SV4WNWHTUHBQ6KKLQYDHQ8O03HM11S5NX7P20QH30C9102LI7HF754799AIDNN3OQC18CD4OP938YDZCBGFSUW24IY0G8QJQRM7BIE6FVI2WNSV04S67M4JAY20C7LZXYPBAJU17TEJN1X2ONMHM2QTOYSTDDGBPWKQD3D8716WUK1FAG9KFPY44WZXI64BU1SLA8EIFV4C0DEQJJUYGE3HIKF' where id=27; -update noar tt set v3='C0I4MZG3VJFEYG3NN1WMQ4YFNKCB9X3VLF14YMK561P02VCEJT5DY69BT3X2L8TWFY3UEGO8W7MT2AL3ZW0ML9VG7XHT47HJ2FPES3JQO36QYRINFDAO7Z6AOEYWO7N3231SKTE9Q07WB7ME4R9C4LAH2GXWWFUAP3CXERVK88ZAQC0EXYUBNJPVCKK9Y79SY0P676HRIAWYYSN2S9EC1HB264G3WV2P4U2UOZXJWS8HO41NI1JVWEHH54SZRV7F3' where id=27; -update noar ti set v3='C0I4MZG3VJFEYG3NN1WMQ4YFNKCB9X3VLF14YMK561P02VCEJT5DY69BT3X2L8TWFY3UEGO8W7MT2AL3ZW0ML9VG7XHT47HJ2FPES3JQO36QYRINFDAO7Z6AOEYWO7N3231SKTE9Q07WB7ME4R9C4LAH2GXWWFUAP3CXERVK88ZAQC0EXYUBNJPVCKK9Y79SY0P676HRIAWYYSN2S9EC1HB264G3WV2P4U2UOZXJWS8HO41NI1JVWEHH54SZRV7F3' where id=27; -update noar tt set v0='1OFQBNZLWM12SWD0XSFBDNVNLEMT30TQW6B60KHOW829W8MIO6WVQLU6BRW2SEMSGQHP5T373ZXFDOKKJKEIDNKIH5YL9H6G2RBPVLU2L4ORCRU1JHKEZXO38PIK1Q2MHI2RCEZIIICPFN6RNXUXOWXAH8YFKT06HGKVNOLXEVPZCVR31XMAIK4USJ2CVMJMPW1YBCHRVTHISWU5IDB3E13TKKVMP1SYD1MIKQDT1VOMJ9YF1ITKJRM4URONRKHQS' where id=28; -update noar ti set v0='1OFQBNZLWM12SWD0XSFBDNVNLEMT30TQW6B60KHOW829W8MIO6WVQLU6BRW2SEMSGQHP5T373ZXFDOKKJKEIDNKIH5YL9H6G2RBPVLU2L4ORCRU1JHKEZXO38PIK1Q2MHI2RCEZIIICPFN6RNXUXOWXAH8YFKT06HGKVNOLXEVPZCVR31XMAIK4USJ2CVMJMPW1YBCHRVTHISWU5IDB3E13TKKVMP1SYD1MIKQDT1VOMJ9YF1ITKJRM4URONRKHQS' where id=28; -update noar tt set v1='GAWPIKDNCSV6UCW3UN6HR4JN75W5HWJZJHBTEE1WCIHNHULR7L9GOB627DMZW895ZDY1PTCLOSN8P32QMITOMKXUIRY67DJU0QZJHQTW147DAASJHWNMQB6ODOXU8EHREC7ECNZB1G9CMJS6BM9FTBCC3UI2VN4SSUAZMF0S052COEBF7DBJHC4T7NCTENF5RH8I44WU839IV1MAFWS10M2V73E4YDCT12VVDU2CPGHMY3CO93LBH053BKUB0ZG8Y' where id=28; -update noar ti set v1='GAWPIKDNCSV6UCW3UN6HR4JN75W5HWJZJHBTEE1WCIHNHULR7L9GOB627DMZW895ZDY1PTCLOSN8P32QMITOMKXUIRY67DJU0QZJHQTW147DAASJHWNMQB6ODOXU8EHREC7ECNZB1G9CMJS6BM9FTBCC3UI2VN4SSUAZMF0S052COEBF7DBJHC4T7NCTENF5RH8I44WU839IV1MAFWS10M2V73E4YDCT12VVDU2CPGHMY3CO93LBH053BKUB0ZG8Y' where id=28; -update noar tt set v2='5HGPJMITE8NL7NQWI69Q12P9QSCHAQ3WM6Z61YF69VDWSBBG2SS7LR7E6RRTI0IRDEHKP8LWVDAYNYM3FA9OK5EQEPRK53CAFWUSFVOJEGVK28363NJTY7JQPGSKT3LZB7CKLVBNF5C1EP5PPBGLAUTNX5GW9YR27TV0RYEX1SV0HJA7Q7C4IA8QQ4AWLX5GSRABN7LEWSN4NN0XQEOBNY24NFC2UQSNVOK1DJ3CX2RMYB9L2N54IVXMKQHQPRLGV' where id=28; -update noar ti set v2='5HGPJMITE8NL7NQWI69Q12P9QSCHAQ3WM6Z61YF69VDWSBBG2SS7LR7E6RRTI0IRDEHKP8LWVDAYNYM3FA9OK5EQEPRK53CAFWUSFVOJEGVK28363NJTY7JQPGSKT3LZB7CKLVBNF5C1EP5PPBGLAUTNX5GW9YR27TV0RYEX1SV0HJA7Q7C4IA8QQ4AWLX5GSRABN7LEWSN4NN0XQEOBNY24NFC2UQSNVOK1DJ3CX2RMYB9L2N54IVXMKQHQPRLGV' where id=28; -update noar tt set v3='GXFUU3JKG2XI92GHLAU8WQY8CEIN0TY2PZ66O7NA4LZ2TVSZJC2JLBKCAI7SH2HSZP7GJQ43SQRTU18WCUZG6RA1USKCEHHKIAMAF20WPIA1YBZ979KGUIG2HD0QB4N21BWC89XN7B57ZT2HSYMWS14IOJTAM4UO9EK7GP9E6UAECZATLT30AU58XQ291KCT6GRUDXWXFZY2J2X366NGQHYOWQ8C0GOCHC252KG37IEQTUHIX6SS27CLS4GOCMX8H' where id=28; -update noar ti set v3='GXFUU3JKG2XI92GHLAU8WQY8CEIN0TY2PZ66O7NA4LZ2TVSZJC2JLBKCAI7SH2HSZP7GJQ43SQRTU18WCUZG6RA1USKCEHHKIAMAF20WPIA1YBZ979KGUIG2HD0QB4N21BWC89XN7B57ZT2HSYMWS14IOJTAM4UO9EK7GP9E6UAECZATLT30AU58XQ291KCT6GRUDXWXFZY2J2X366NGQHYOWQ8C0GOCHC252KG37IEQTUHIX6SS27CLS4GOCMX8H' where id=28; -update noar tt set v0='5K63XUEFQTPX5H2T0IKFAJMAEKAZHSSSVXKPO2KEV9HKCBUV3XKT3VJ3LX9TU6GT9Y4Q9G472AFQ5HIIPUB0VR5CZ9D1FU3673OWW114HIZDXWDTR4H29D1EFSBRG1X7XF67GDLBN4MY64R98JBZBA5K86LGWE8G0O5BYVCSSEXXLP9KYESI4YK8TAOSLP5UEXX8IIWW5J6YXIQFP2AH7G0WGGZWC181NHQK0G2D9BVNWTMBHIS8ZZNLQSIUNMCYJ' where id=29; -update noar ti set v0='5K63XUEFQTPX5H2T0IKFAJMAEKAZHSSSVXKPO2KEV9HKCBUV3XKT3VJ3LX9TU6GT9Y4Q9G472AFQ5HIIPUB0VR5CZ9D1FU3673OWW114HIZDXWDTR4H29D1EFSBRG1X7XF67GDLBN4MY64R98JBZBA5K86LGWE8G0O5BYVCSSEXXLP9KYESI4YK8TAOSLP5UEXX8IIWW5J6YXIQFP2AH7G0WGGZWC181NHQK0G2D9BVNWTMBHIS8ZZNLQSIUNMCYJ' where id=29; -update noar tt set v1='82MZVZTCME90GI3WF4SLY9V6J7KLUKCBDYSEZAXZZKL9PTT149R2WOA201L74YUTPNQTJABKNOIX17TG5L8FR0NOCQQT3R4XFTBAM4EDO8LCRRWQR7B8QY8E74PPMC7YYEJGFNUG6ADARWDMLKWKZOU8VFIK6AEN6OQQ4A01VH3S4VLEOBCEJRT5D1UTUXVFAZPVR8TD7FX05XX1VBR9NN6QAHR7XTI8R6ED1A3LOCKN5MBUW46IONAAM27Q4V5G3' where id=29; -update noar ti set v1='82MZVZTCME90GI3WF4SLY9V6J7KLUKCBDYSEZAXZZKL9PTT149R2WOA201L74YUTPNQTJABKNOIX17TG5L8FR0NOCQQT3R4XFTBAM4EDO8LCRRWQR7B8QY8E74PPMC7YYEJGFNUG6ADARWDMLKWKZOU8VFIK6AEN6OQQ4A01VH3S4VLEOBCEJRT5D1UTUXVFAZPVR8TD7FX05XX1VBR9NN6QAHR7XTI8R6ED1A3LOCKN5MBUW46IONAAM27Q4V5G3' where id=29; -update noar tt set v2='TX7ZSXD0M8HEHB1Y8HQ2SXU6AI28RXM8NDRWZ50RSUMA388ACS7VCNEBLDVPC0CYKVW5SFZ065VRQP6MN5DMOKPTCNDWDKPYFEED1OOX59A5FNUIN7WU3RF24HPB6U2P8KL7GUC9GQGFV94VETGRROIHOYI1FDZUDGFHT1FLBULOCMYQEHDHYJQ9CJNLM8IWMUGD0FGMEMT12R5MSPHZGO590ML82TUM20H08GVETBWHO0I4XR9CXPOMGZIVQN8V4' where id=29; -update noar ti set v2='TX7ZSXD0M8HEHB1Y8HQ2SXU6AI28RXM8NDRWZ50RSUMA388ACS7VCNEBLDVPC0CYKVW5SFZ065VRQP6MN5DMOKPTCNDWDKPYFEED1OOX59A5FNUIN7WU3RF24HPB6U2P8KL7GUC9GQGFV94VETGRROIHOYI1FDZUDGFHT1FLBULOCMYQEHDHYJQ9CJNLM8IWMUGD0FGMEMT12R5MSPHZGO590ML82TUM20H08GVETBWHO0I4XR9CXPOMGZIVQN8V4' where id=29; -update noar tt set v3='AFFXMSGVOOAZY8MZ9DSZUJE6OBIL0OF10EUA3P2WT4LU22BMPBGIGLQHU3D51QREHVS7R8NNAWG4IDEWM11AT17712HR95B633HKGZ7MRJ9WC3UJDETPRBA5KYSKCWSFS32PSQ8CXT9A5VYFQHS9FBZGGUYIL9SPX1ZD7QK6Y1AL3B3OL2KEIZTGT1VSQ5FZ492FL0G10GP8NT6WUKJU325I47XSCZD24WDRQOLZ8OBM1V7YSFCKN4P8ZWCHH2CLU' where id=29; -update noar ti set v3='AFFXMSGVOOAZY8MZ9DSZUJE6OBIL0OF10EUA3P2WT4LU22BMPBGIGLQHU3D51QREHVS7R8NNAWG4IDEWM11AT17712HR95B633HKGZ7MRJ9WC3UJDETPRBA5KYSKCWSFS32PSQ8CXT9A5VYFQHS9FBZGGUYIL9SPX1ZD7QK6Y1AL3B3OL2KEIZTGT1VSQ5FZ492FL0G10GP8NT6WUKJU325I47XSCZD24WDRQOLZ8OBM1V7YSFCKN4P8ZWCHH2CLU' where id=29; -update noar tt set v0='AVZOVTI3F9H67KQ1NLFI0OMIEH0R1KI9M3HHH4GRT1M4W5539BLOVTUX8NA86O2IYOF56L1JDPC6C6YPTMAXBDAMAWL4IU7CCJPYUU65CO1EJOSD9C23FB7383RPRE2XYRUUS1TXCARLGEL5PMQLHE8HQKFQYGIGU0N80AEN6X4FCI9X3QGAY256O325F5Y9OH6RBG6GY97T84LXJHRKEW0OTWJN1BH2USMV0F0YFR06GWA2AALYUHX82DEIA0CKM' where id=30; -update noar ti set v0='AVZOVTI3F9H67KQ1NLFI0OMIEH0R1KI9M3HHH4GRT1M4W5539BLOVTUX8NA86O2IYOF56L1JDPC6C6YPTMAXBDAMAWL4IU7CCJPYUU65CO1EJOSD9C23FB7383RPRE2XYRUUS1TXCARLGEL5PMQLHE8HQKFQYGIGU0N80AEN6X4FCI9X3QGAY256O325F5Y9OH6RBG6GY97T84LXJHRKEW0OTWJN1BH2USMV0F0YFR06GWA2AALYUHX82DEIA0CKM' where id=30; -update noar tt set v1='5T4TFDF7T34PGBMBAYVW42LB2Q8Y3FHKFJEVA4QFEAYDF4XH23D91S26B5B0WQLOO2P28PUFQ8PKML3SYVPLXEXNWJZ5UJUA1M6UU6AJGWSHULZKU0RR7JI1ULP8X6RTJRI5QJLASMGHTQW664QGDNQ8QGM5B0RV887QJ8GLLN5GJNQTO9H3EE4QM22ROOOXE8BAU5C1V45Q64P0OSZI4XEJPSIU3Z4INI1GK109SBWFQSY6UU1U06CP2534DJ4NN' where id=30; -update noar ti set v1='5T4TFDF7T34PGBMBAYVW42LB2Q8Y3FHKFJEVA4QFEAYDF4XH23D91S26B5B0WQLOO2P28PUFQ8PKML3SYVPLXEXNWJZ5UJUA1M6UU6AJGWSHULZKU0RR7JI1ULP8X6RTJRI5QJLASMGHTQW664QGDNQ8QGM5B0RV887QJ8GLLN5GJNQTO9H3EE4QM22ROOOXE8BAU5C1V45Q64P0OSZI4XEJPSIU3Z4INI1GK109SBWFQSY6UU1U06CP2534DJ4NN' where id=30; -update noar tt set v2='D1LGNVY0XEFYZTJPO54TLVNQWOQOOCFS6KH8L7GDNCGVOOIH9H51QAF0OM3ZS2IMNCVTZALSKRA2BZX10DHT5KOCRMF1DN9GHUWF6FUNQCLEL1YJBNNM95JXM3V80MD37FCOJDMDJYZR0685YEUT9T1I4MV2B7AKISGIF367F40LLR1ASMDX2DK46G05SC725369I2ZLJ15CDM0LISR58FUIIMSETQAGAC3NEXS4CVLWZYOQJHUHCQAQ1MCFLRQTC' where id=30; -update noar ti set v2='D1LGNVY0XEFYZTJPO54TLVNQWOQOOCFS6KH8L7GDNCGVOOIH9H51QAF0OM3ZS2IMNCVTZALSKRA2BZX10DHT5KOCRMF1DN9GHUWF6FUNQCLEL1YJBNNM95JXM3V80MD37FCOJDMDJYZR0685YEUT9T1I4MV2B7AKISGIF367F40LLR1ASMDX2DK46G05SC725369I2ZLJ15CDM0LISR58FUIIMSETQAGAC3NEXS4CVLWZYOQJHUHCQAQ1MCFLRQTC' where id=30; -update noar tt set v3='87QKFKTUOM8OEINHO3ZLKFT3TROZF7LOBGX0F40EULIUCQUUUZB307SSLF266R49M8MJ8QM5J6DLYB0RV7KNVG1CONR4OP89LZS3A12COGA2CZIE57FFPT5U12T68BQY4HEKLBCAJOPF8H0X89OFYIRCCJDM0HBWBP6ZSIEYGN4LFF9U2DICMCKYLVZJHUBNHNA4WQGSQ2C2FCP6QX0K2IC2XCCZHBUQ3ZF9RMG9JZVGVID2LDPKRAP3EO0CB69EG' where id=30; -update noar ti set v3='87QKFKTUOM8OEINHO3ZLKFT3TROZF7LOBGX0F40EULIUCQUUUZB307SSLF266R49M8MJ8QM5J6DLYB0RV7KNVG1CONR4OP89LZS3A12COGA2CZIE57FFPT5U12T68BQY4HEKLBCAJOPF8H0X89OFYIRCCJDM0HBWBP6ZSIEYGN4LFF9U2DICMCKYLVZJHUBNHNA4WQGSQ2C2FCP6QX0K2IC2XCCZHBUQ3ZF9RMG9JZVGVID2LDPKRAP3EO0CB69EG' where id=30; -update noar tt set v0='QRQ8AHXI58TE4YCNUXJP977CTS6XUNAI1HPFCVBWDU9SJX0BV5I6JGJUO07S8Q0KA0P2FAWX5SWECS1S51PCPYHPMW6VX9ERG3XVTOGYE7LIX1XFB8X8EHC8LGZS049I9HEK77NEBSC012PDBUY2X8HBCHTJ6D2NPZFZKCXOIOEZOF5307J34V2TAII5N97J394D67A2Q89ZLI1Z2QI08S7ESPU5BJPJZIPLV2I1IMQVJKWR787EAATXSTA7AEN4E' where id=31; -update noar ti set v0='QRQ8AHXI58TE4YCNUXJP977CTS6XUNAI1HPFCVBWDU9SJX0BV5I6JGJUO07S8Q0KA0P2FAWX5SWECS1S51PCPYHPMW6VX9ERG3XVTOGYE7LIX1XFB8X8EHC8LGZS049I9HEK77NEBSC012PDBUY2X8HBCHTJ6D2NPZFZKCXOIOEZOF5307J34V2TAII5N97J394D67A2Q89ZLI1Z2QI08S7ESPU5BJPJZIPLV2I1IMQVJKWR787EAATXSTA7AEN4E' where id=31; -update noar tt set v1='Z21OH7P1L8ZJDXU6YVO2124I51YBBUKUJT8Z3PQRHP03X2N2OYTS1SSNRHFFJGCNC4GIBBM2J036FIWHYYZ77ZNYFE2OND3CGX99SPNB3AT7PJHLJ9L5E6N9YXM9OMTNLMRSTYQJWFA4YVHU116UKNDH0QMBEHSZVBFNBHFI7XZEUE580LMOPTTF4BHD77IKMIUY17VCGX5WPS4SYNP1ODIZZAXYOKCRJ9IOFGN05I4NFGIO1CHD9ZYL045BRDCRC' where id=31; -update noar ti set v1='Z21OH7P1L8ZJDXU6YVO2124I51YBBUKUJT8Z3PQRHP03X2N2OYTS1SSNRHFFJGCNC4GIBBM2J036FIWHYYZ77ZNYFE2OND3CGX99SPNB3AT7PJHLJ9L5E6N9YXM9OMTNLMRSTYQJWFA4YVHU116UKNDH0QMBEHSZVBFNBHFI7XZEUE580LMOPTTF4BHD77IKMIUY17VCGX5WPS4SYNP1ODIZZAXYOKCRJ9IOFGN05I4NFGIO1CHD9ZYL045BRDCRC' where id=31; -update noar tt set v2='Y57CQVM37ND2CY1PFONY4AOFEQ0ADDUY02CR5NP90PW9YCF2JQGIEU580793NP4XNXWCBRPGYVT1IPNWC6FGWFBVM3GZKZQTPZXRJ4H0FAIK29HW72OQBR60IJGY89GM31BEBLHJ9RBJY88078BL5RCEIY92LLQ8NN2F6MV1T6AAQUHXSLOJLW7EDX6RXC18KJE960BADGP85A82PE1GCT95UREIKHU8RZG2HI725WXZKLN2BBWTF3VVHWSW9AJI5' where id=31; -update noar ti set v2='Y57CQVM37ND2CY1PFONY4AOFEQ0ADDUY02CR5NP90PW9YCF2JQGIEU580793NP4XNXWCBRPGYVT1IPNWC6FGWFBVM3GZKZQTPZXRJ4H0FAIK29HW72OQBR60IJGY89GM31BEBLHJ9RBJY88078BL5RCEIY92LLQ8NN2F6MV1T6AAQUHXSLOJLW7EDX6RXC18KJE960BADGP85A82PE1GCT95UREIKHU8RZG2HI725WXZKLN2BBWTF3VVHWSW9AJI5' where id=31; -update noar tt set v3='PIDO3T1LWRLTSCJJ6L5JFGN4LLZ5MNWES59153PNS7133YXCQCFZRAOV6XHAEFVEOXGNSIVFZEA7299SE4PQ3ZDJERC6AHLQHQK0HAUOA3E73KCLJS8HSMDRG6VO60JR1GXWOEANVGSOCF6OJS7XXQUAEZX8NEOMYKTNGOA10C45MNYKDRTFY0IAPSLDFCJNL3Y36SALB6FQJOTYQS7653RRUW2ZVCB2N8RCC6SBP7NI92TXUVNW41MY07O8VTN42' where id=31; -update noar ti set v3='PIDO3T1LWRLTSCJJ6L5JFGN4LLZ5MNWES59153PNS7133YXCQCFZRAOV6XHAEFVEOXGNSIVFZEA7299SE4PQ3ZDJERC6AHLQHQK0HAUOA3E73KCLJS8HSMDRG6VO60JR1GXWOEANVGSOCF6OJS7XXQUAEZX8NEOMYKTNGOA10C45MNYKDRTFY0IAPSLDFCJNL3Y36SALB6FQJOTYQS7653RRUW2ZVCB2N8RCC6SBP7NI92TXUVNW41MY07O8VTN42' where id=31; -update noar tt set v0='3THSCOYLJ4BYEYIMJP04PRX4X56JG055WG81CPI9RV614ANAS33XZOMSFL3ROCRO9CX7WDKNO3WSGXUEUDUA26HH0XH1F83UZFW9HGI3694MPA0QNYHQL3D804U1AV0ZS9Y6N2A6Q66ZO2QQDM2XTWN87RW2GU6U051L9UY8IYUR7ASNQZOPYNKIMXCVDD9F1DP107VOUGOLSL3Q157LOZ4CZJM1KPE1HNYDZ1YN31D35E69ZBZ0ZNU930GZ0YDYM' where id=32; -update noar ti set v0='3THSCOYLJ4BYEYIMJP04PRX4X56JG055WG81CPI9RV614ANAS33XZOMSFL3ROCRO9CX7WDKNO3WSGXUEUDUA26HH0XH1F83UZFW9HGI3694MPA0QNYHQL3D804U1AV0ZS9Y6N2A6Q66ZO2QQDM2XTWN87RW2GU6U051L9UY8IYUR7ASNQZOPYNKIMXCVDD9F1DP107VOUGOLSL3Q157LOZ4CZJM1KPE1HNYDZ1YN31D35E69ZBZ0ZNU930GZ0YDYM' where id=32; -update noar tt set v1='J184FP5EE2BUC0EKCI70N3KL2HTW25CIJ91GXH40BAHY2LHEQIWUVGWQOFX7Z8A4P7ZEP0LR5LDC62OBLSZD05OYIS2KRJ91A6Q6Q8L3PSA7W62QT6HJ18LQ8IH2AXS4NDFZCAH6YS2Q87U7XBBQISQ43DFO3WG8II9OMDWBZ7NM2F2QEZ2FZIVKS2U5CDJF4OELNO9348WRNT8BD9NH0DR7FKPNMJPWKFH1BNM0X12S54M2YHYXIOWASJ12OEGKY' where id=32; -update noar ti set v1='J184FP5EE2BUC0EKCI70N3KL2HTW25CIJ91GXH40BAHY2LHEQIWUVGWQOFX7Z8A4P7ZEP0LR5LDC62OBLSZD05OYIS2KRJ91A6Q6Q8L3PSA7W62QT6HJ18LQ8IH2AXS4NDFZCAH6YS2Q87U7XBBQISQ43DFO3WG8II9OMDWBZ7NM2F2QEZ2FZIVKS2U5CDJF4OELNO9348WRNT8BD9NH0DR7FKPNMJPWKFH1BNM0X12S54M2YHYXIOWASJ12OEGKY' where id=32; -update noar tt set v2='TFZOGN64WWC93TFQ5W7L421WBUZ99W55VRJ9AYXJEHE7SCE1EEHHAYP9GXATCMC78JMLN90PSM7NPCLTH09DWSHZ90Y6NPYDQ1NXWR7UB8DKS0VCVY4207OXI3C0HV2UB1GK5HVC61JNAWYZ3GJ59XYMR1NT3191NSGIZLKR5EZG9RRTCDIIFIR1AOX97QR7ONGRXCFAA7SO0VXAIMP3R9P9LDGT07POOSXRSUM4AH5WKTCLYEVSAT4INWIIDFLPH' where id=32; -update noar ti set v2='TFZOGN64WWC93TFQ5W7L421WBUZ99W55VRJ9AYXJEHE7SCE1EEHHAYP9GXATCMC78JMLN90PSM7NPCLTH09DWSHZ90Y6NPYDQ1NXWR7UB8DKS0VCVY4207OXI3C0HV2UB1GK5HVC61JNAWYZ3GJ59XYMR1NT3191NSGIZLKR5EZG9RRTCDIIFIR1AOX97QR7ONGRXCFAA7SO0VXAIMP3R9P9LDGT07POOSXRSUM4AH5WKTCLYEVSAT4INWIIDFLPH' where id=32; -update noar tt set v3='U3Z9HUXGOBW8B82L7952O4W0JW67ZCJVMSQ10QJZONBNI4HMMTYRBDFAFEOTBX4WAJ1AU89I3XGJ6TJNJDDEQCUZ1YCV27F1QDV78TWK00TYESKNR5CKA25XUNX02U4NDUZBQG3B6RKPTBYQ9CA73J1B5KSUHJE7HDLXHORAV589S3DMPOMNZATHWBS5QFBT1VK8P3RN1TGNQ2TSH7N1QP3F1CZOMLZZJOY61ZOD4FLXKKRRR1KZJH6YFDT0R9IMZ' where id=32; -update noar ti set v3='U3Z9HUXGOBW8B82L7952O4W0JW67ZCJVMSQ10QJZONBNI4HMMTYRBDFAFEOTBX4WAJ1AU89I3XGJ6TJNJDDEQCUZ1YCV27F1QDV78TWK00TYESKNR5CKA25XUNX02U4NDUZBQG3B6RKPTBYQ9CA73J1B5KSUHJE7HDLXHORAV589S3DMPOMNZATHWBS5QFBT1VK8P3RN1TGNQ2TSH7N1QP3F1CZOMLZZJOY61ZOD4FLXKKRRR1KZJH6YFDT0R9IMZ' where id=32; -update noar tt set v0='XSKXM40W4WOTXYCA6UR8GS2ERD5N8W7QQT6BB404HXXPBDMMTKJGSOHILWLD4D7QC7VUPLASC5NWBY3X8W36IK5DU7RJ6OHMYVYF1C2H9WVQUR1AYNM0XFZIR11167Q57RGMX2J0SPFR56QPPKI2PRJJ5ZVK3DIX5UVWVU1V9NNN20Z31GMYD0XFNUF1J4HBFISU1HC8LX27E9YQDUZFZSJLR42KTQVGI6Q7RO0EOHDZFO39F81RYODOVFQHMJ47T' where id=33; -update noar ti set v0='XSKXM40W4WOTXYCA6UR8GS2ERD5N8W7QQT6BB404HXXPBDMMTKJGSOHILWLD4D7QC7VUPLASC5NWBY3X8W36IK5DU7RJ6OHMYVYF1C2H9WVQUR1AYNM0XFZIR11167Q57RGMX2J0SPFR56QPPKI2PRJJ5ZVK3DIX5UVWVU1V9NNN20Z31GMYD0XFNUF1J4HBFISU1HC8LX27E9YQDUZFZSJLR42KTQVGI6Q7RO0EOHDZFO39F81RYODOVFQHMJ47T' where id=33; -update noar tt set v1='MVO00J3SZNMRUIL2S0LQEDY9BXD82WI8G9CECGZJTF7K9ZF2H0EMNHRYCN3BP6IY5SVAK95VD47OUPKK9KY9N86RCANP10KSAKNZ8NGE93IHO2C2KVMF3BKFSWQOYKGG5M2SFU30UYR81E0SMTV1FN1SDPPX3B0X4NAY7C2V4Y3WJ6PB74KD4Y79V6COMG5RBHU4AUHXDDESA0WBS8ZRO5YHCTW5D5T6NUFD4RXEBKAV35KNB43PWRFC3QL5DCTV6' where id=33; -update noar ti set v1='MVO00J3SZNMRUIL2S0LQEDY9BXD82WI8G9CECGZJTF7K9ZF2H0EMNHRYCN3BP6IY5SVAK95VD47OUPKK9KY9N86RCANP10KSAKNZ8NGE93IHO2C2KVMF3BKFSWQOYKGG5M2SFU30UYR81E0SMTV1FN1SDPPX3B0X4NAY7C2V4Y3WJ6PB74KD4Y79V6COMG5RBHU4AUHXDDESA0WBS8ZRO5YHCTW5D5T6NUFD4RXEBKAV35KNB43PWRFC3QL5DCTV6' where id=33; -update noar tt set v2='7TR96M5M7G1QKYIEU7VF5L9O3KQ49X5KBO6EW748DH0ISCJJQWR62CXIDFSMO4I6H1PBTXOOPUEASNZC7GF2681H1ZDWBR22KGPDSX35DIJWOWTEDN826QC98MZTNX3LZNDLU5SYLPUYUTNRJHEVFYNMDAZX1WBH0XP1TKD5VPTRGVOD9M6Y4MDB5C3NR1JYUZ625KDRLJ0AU39A562W5DLF31JXUG7GWWPVJYWDA8GI174HKWN0800YFIPQKG0WV' where id=33; -update noar ti set v2='7TR96M5M7G1QKYIEU7VF5L9O3KQ49X5KBO6EW748DH0ISCJJQWR62CXIDFSMO4I6H1PBTXOOPUEASNZC7GF2681H1ZDWBR22KGPDSX35DIJWOWTEDN826QC98MZTNX3LZNDLU5SYLPUYUTNRJHEVFYNMDAZX1WBH0XP1TKD5VPTRGVOD9M6Y4MDB5C3NR1JYUZ625KDRLJ0AU39A562W5DLF31JXUG7GWWPVJYWDA8GI174HKWN0800YFIPQKG0WV' where id=33; -update noar tt set v3='EX850XK9PKFSCD03YP9U2ZR2KEVT4GLUMP1TQSVJI5P85E2JLHYLDSRX85CJFE1K2RB9VPGVDJ4RWU7F46UIRR25BZW9LWKCQHJWCEKU0SKOUP9DH9765XPBRUF8QNORZ54YXSG8RNERD3ZUHRR1QZ0UPOIXBAUD74ILFVOJSKJA54V85OU87ZPY8ESZPET2SYAP96L2N3DI7SJQV8AZ379F3FCFF42W7ZXBLFNJKXQARXGQXUVTUA9Y26WIQG5DJ' where id=33; -update noar ti set v3='EX850XK9PKFSCD03YP9U2ZR2KEVT4GLUMP1TQSVJI5P85E2JLHYLDSRX85CJFE1K2RB9VPGVDJ4RWU7F46UIRR25BZW9LWKCQHJWCEKU0SKOUP9DH9765XPBRUF8QNORZ54YXSG8RNERD3ZUHRR1QZ0UPOIXBAUD74ILFVOJSKJA54V85OU87ZPY8ESZPET2SYAP96L2N3DI7SJQV8AZ379F3FCFF42W7ZXBLFNJKXQARXGQXUVTUA9Y26WIQG5DJ' where id=33; -update noar tt set v0='SFHI9NDE9KJTS2PR3WAOGITVL3O5XC2D6EZGGQS0GAPE879RKWEKMN5JO7GIHY6GAZE77P2HOXF7DCG39XU3HG7HYOQK4XULG9YY1EW5GVHL3IVJJ7HV5NLRJ13KE284G7C7SO69XH7V0KPE3X0S5ADF93QPRAZRQ9T75SOCM2UKTPWY5JDHBI3HJ5W8DHK9MC15VVEZTO7W1417T5JTI307B5EP80OX1LRIT5U6L0EHG35I40YSRTTDF4OIL3MW5' where id=34; -update noar ti set v0='SFHI9NDE9KJTS2PR3WAOGITVL3O5XC2D6EZGGQS0GAPE879RKWEKMN5JO7GIHY6GAZE77P2HOXF7DCG39XU3HG7HYOQK4XULG9YY1EW5GVHL3IVJJ7HV5NLRJ13KE284G7C7SO69XH7V0KPE3X0S5ADF93QPRAZRQ9T75SOCM2UKTPWY5JDHBI3HJ5W8DHK9MC15VVEZTO7W1417T5JTI307B5EP80OX1LRIT5U6L0EHG35I40YSRTTDF4OIL3MW5' where id=34; -update noar tt set v1='DEDJUM3SPXGT7PQTR99G8UAZNVI4QMJPTUS3G8IBVA91RKY0UKFHPIMBO8XJG79Z4UROWSO68S5V4AL5ZBWYIK31E1N94XC2WRFU8G6SAWF1B78A98E28VYOCC88G3S4NZ52Z3Y49L74NCHKF89KYJDKGKC6OP34IA1ZIVJJ796UMPNYZCBELIPR4XNOYXGBDS5AZYSBFB3FI9J6D3TAHZEXRN6RUNQZSUMLLJQZ3Q7ACW44GC1UB4WWMP7U2NGH8' where id=34; -update noar ti set v1='DEDJUM3SPXGT7PQTR99G8UAZNVI4QMJPTUS3G8IBVA91RKY0UKFHPIMBO8XJG79Z4UROWSO68S5V4AL5ZBWYIK31E1N94XC2WRFU8G6SAWF1B78A98E28VYOCC88G3S4NZ52Z3Y49L74NCHKF89KYJDKGKC6OP34IA1ZIVJJ796UMPNYZCBELIPR4XNOYXGBDS5AZYSBFB3FI9J6D3TAHZEXRN6RUNQZSUMLLJQZ3Q7ACW44GC1UB4WWMP7U2NGH8' where id=34; -update noar tt set v2='U91REXQP9SQ1RKRPN2RUD73T4C6V95Q9UWP7AQEE6OW44YQUBZ297B599C2TTF61SCTMEYOVWQB4FP4P9I0PDTSLKNXJ3RURNZB6LQF85ZCEP4ET6OEGSRT7QCFVPTXXL3W2XAVCBHLUTTTD6KUM9U490DB1LU9OX2CZST8PRHDSRZ6OE4INQ4DFFYYYQXQDKBTBAN5G2BK4XOXIMEX2DWYMI3JS3G55JT38AY5K5S7TTZEY2V8LA9WVJ2KJEYU84' where id=34; -update noar ti set v2='U91REXQP9SQ1RKRPN2RUD73T4C6V95Q9UWP7AQEE6OW44YQUBZ297B599C2TTF61SCTMEYOVWQB4FP4P9I0PDTSLKNXJ3RURNZB6LQF85ZCEP4ET6OEGSRT7QCFVPTXXL3W2XAVCBHLUTTTD6KUM9U490DB1LU9OX2CZST8PRHDSRZ6OE4INQ4DFFYYYQXQDKBTBAN5G2BK4XOXIMEX2DWYMI3JS3G55JT38AY5K5S7TTZEY2V8LA9WVJ2KJEYU84' where id=34; -update noar tt set v3='F7RBP3Q9ETJEVGBKI7B699NRJ08Q6X6D0V7A42NR5FD6G64GEZ3YKMQTVH5TOE46Q1HG6JIACDDDGED2WGJU18KAI4UHIOMC5WGMLLI1NJQF6IKG0CQH67A5ZC3BHAWM1ON55CDQHKCXYSD5YMTDRQP2QM46L8DRHAZGMVVM2E573OMM3Q376JY7ACLPD98DTPNEGWF5P79CKV2HBEI58LLGGC3DLO9IXK96PQ9NCU5T4TMXJ4TQBWFDXGG23Q58T' where id=34; -update noar ti set v3='F7RBP3Q9ETJEVGBKI7B699NRJ08Q6X6D0V7A42NR5FD6G64GEZ3YKMQTVH5TOE46Q1HG6JIACDDDGED2WGJU18KAI4UHIOMC5WGMLLI1NJQF6IKG0CQH67A5ZC3BHAWM1ON55CDQHKCXYSD5YMTDRQP2QM46L8DRHAZGMVVM2E573OMM3Q376JY7ACLPD98DTPNEGWF5P79CKV2HBEI58LLGGC3DLO9IXK96PQ9NCU5T4TMXJ4TQBWFDXGG23Q58T' where id=34; -update noar tt set v0='KIPBKOWZ4H7RA8175AZW3BRYL8H8HIR79KGQRTJDR4CCMDPK1LTP4I20U0KKXUGPX3S0PORGQMZCZFUP5267YFPMTWXIA5ZBL97YZH6VYLZKNMQGXBW6RLUSDHDN93TJHA9XA34PLZ5L1U204DC3S4I9ZEM3MAGWUTBG7CZAE0P2026VV6B095CCWZF1PB5EFPP0LN6VOAIPPGG807YOPALTXNT19K9M9126RMXJIVC4IB0PB5W6PNBPZ5J5B1U2X' where id=35; -update noar ti set v0='KIPBKOWZ4H7RA8175AZW3BRYL8H8HIR79KGQRTJDR4CCMDPK1LTP4I20U0KKXUGPX3S0PORGQMZCZFUP5267YFPMTWXIA5ZBL97YZH6VYLZKNMQGXBW6RLUSDHDN93TJHA9XA34PLZ5L1U204DC3S4I9ZEM3MAGWUTBG7CZAE0P2026VV6B095CCWZF1PB5EFPP0LN6VOAIPPGG807YOPALTXNT19K9M9126RMXJIVC4IB0PB5W6PNBPZ5J5B1U2X' where id=35; -update noar tt set v1='R3JNMLP698KMVOFVH938MTOIHXUF70QGJYNU8O3L7SCLT7U5DLY6ZYC02WE1N9KG95JND2YTA47EJYRX23NNKQ58WI7Y7U8XKPTRB7MDN51Q8P3Q85V853TQWW5DEO7FAY1PQI1N89CXTJK0FU6FI247BCD2TENU2HXOGY3RGK3A9L9CMYKR64UTT702123V7OEYJE1GGWVV1RM9Y5QAYWLUPXCA42R8F0SPGL9E8JH3Y8FX6GPM1LWHRE048OS5Y' where id=35; -update noar ti set v1='R3JNMLP698KMVOFVH938MTOIHXUF70QGJYNU8O3L7SCLT7U5DLY6ZYC02WE1N9KG95JND2YTA47EJYRX23NNKQ58WI7Y7U8XKPTRB7MDN51Q8P3Q85V853TQWW5DEO7FAY1PQI1N89CXTJK0FU6FI247BCD2TENU2HXOGY3RGK3A9L9CMYKR64UTT702123V7OEYJE1GGWVV1RM9Y5QAYWLUPXCA42R8F0SPGL9E8JH3Y8FX6GPM1LWHRE048OS5Y' where id=35; -update noar tt set v2='YB1OGOHUMM19PPZ0O81KO52J44MW3F74T09SDV2AGQ0G1WSH2IWTVLN9MFZ55Q0LCGYA4A73ZGLG49IB7MAGLUQ0XN591K0XHYA4ENBF7XH24GVRKC5V70URJV7VQ8AN7Y92JPF8AZHO8H2URLXTVE6T02REGMJNTNX5PM5G04R8DA33EOJV1J79F4MF8EZCN16BIJXO5WPLHI0Z4111RIU4MQI3IWSGF6L3CX0H2AKOZUA9VF5R3KSRRXGVOBZ7H' where id=35; -update noar ti set v2='YB1OGOHUMM19PPZ0O81KO52J44MW3F74T09SDV2AGQ0G1WSH2IWTVLN9MFZ55Q0LCGYA4A73ZGLG49IB7MAGLUQ0XN591K0XHYA4ENBF7XH24GVRKC5V70URJV7VQ8AN7Y92JPF8AZHO8H2URLXTVE6T02REGMJNTNX5PM5G04R8DA33EOJV1J79F4MF8EZCN16BIJXO5WPLHI0Z4111RIU4MQI3IWSGF6L3CX0H2AKOZUA9VF5R3KSRRXGVOBZ7H' where id=35; -update noar tt set v3='0O9FEN1NI7VV3MCX55WT0W4HV2MTA78ZJDSEXYZWHS4ARLW5YJYMCHBSSKD4DBTMIVGEHR1HNPBUGDSJE8QWS6I86764YV7JHK97F1K3IDG5A700IWPM720C5KSEXR2HHRHYAOA8ERV23XHAJN8M5SS9GLOWIM37TJAULKI8VPR5RFS04PFFJT9AUDCC0BW78YGISCB7LBQW0BZWJBSORJA64R4781YND58JEBKG8TN7KAZFQC3OQRNWS89QX78W5' where id=35; -update noar ti set v3='0O9FEN1NI7VV3MCX55WT0W4HV2MTA78ZJDSEXYZWHS4ARLW5YJYMCHBSSKD4DBTMIVGEHR1HNPBUGDSJE8QWS6I86764YV7JHK97F1K3IDG5A700IWPM720C5KSEXR2HHRHYAOA8ERV23XHAJN8M5SS9GLOWIM37TJAULKI8VPR5RFS04PFFJT9AUDCC0BW78YGISCB7LBQW0BZWJBSORJA64R4781YND58JEBKG8TN7KAZFQC3OQRNWS89QX78W5' where id=35; -update noar tt set v0='IM8QDXKPVPXKT89A31YI38PGPHQ35TCMVCEB0GV2VRP7T25GC6EG7K8PG9KBLYSE07SVVFHI8GS2AQOHDPRKF6IYWG4737SUQ19CPTXX5W2AHH9LQLS4R5PPODSDDXQXL5QYWKGAJS6DGQR8F5G2WLB8NUI1TESITLG1IGI4HEF013K842XL7EFCD9FS7Q4E23REDCY36OYM0W9Z7CJH3EFSWA5B99H3XULZCFPFRP0ISAW1MQJFB61VL0YHDZYQD' where id=36; -update noar ti set v0='IM8QDXKPVPXKT89A31YI38PGPHQ35TCMVCEB0GV2VRP7T25GC6EG7K8PG9KBLYSE07SVVFHI8GS2AQOHDPRKF6IYWG4737SUQ19CPTXX5W2AHH9LQLS4R5PPODSDDXQXL5QYWKGAJS6DGQR8F5G2WLB8NUI1TESITLG1IGI4HEF013K842XL7EFCD9FS7Q4E23REDCY36OYM0W9Z7CJH3EFSWA5B99H3XULZCFPFRP0ISAW1MQJFB61VL0YHDZYQD' where id=36; -update noar tt set v1='17QBE7POFBXNMYBLU63YH9QNL6KGBWYQGUNN6W9JXAVS89OBJY9EQEJ5T1CS0M45A1JH4HCBFE97F0G0L5UA29OI3EX3GHDJ8EOB2DUXRKMNIGU7SWEGTRVMYYDBMP500JMNYI8261H19D0B992K1CE1L9PKUVSYBDNJHUTX34SUJ1TJX0ZBJKB0OSYOJ79WKXVOB4YIPIXAMB1Z9TRTDTZ2FT71THDF1R4B98HBCG23P57ZW6NMQ5MOMFSLPYBGE' where id=36; -update noar ti set v1='17QBE7POFBXNMYBLU63YH9QNL6KGBWYQGUNN6W9JXAVS89OBJY9EQEJ5T1CS0M45A1JH4HCBFE97F0G0L5UA29OI3EX3GHDJ8EOB2DUXRKMNIGU7SWEGTRVMYYDBMP500JMNYI8261H19D0B992K1CE1L9PKUVSYBDNJHUTX34SUJ1TJX0ZBJKB0OSYOJ79WKXVOB4YIPIXAMB1Z9TRTDTZ2FT71THDF1R4B98HBCG23P57ZW6NMQ5MOMFSLPYBGE' where id=36; -update noar tt set v2='O1SUXGDYRNSYX9Q0A1XCKGVYGFFQD2H1VU6OE3GUUCPYEMYQPV0IOS4H9ONK3R0WC6LHXAUBWEQ43ICX4H3B15MQNO999FLJ2VMVAOPS16MJC6XBVVK7F4TK8ZSIYKC529IXQ96T8EL2QZNPW5NAY79OCXEJ2BPELUSYGO6Q3XVXFA8ZMAZD5UAGFDYH3BEHKWNJ3B3NJXSPYXFEFAGWS9TQLMZWDKA5FHBNIYQYEVV1NDAWRYMJ6X1HXB4A583MF' where id=36; -update noar ti set v2='O1SUXGDYRNSYX9Q0A1XCKGVYGFFQD2H1VU6OE3GUUCPYEMYQPV0IOS4H9ONK3R0WC6LHXAUBWEQ43ICX4H3B15MQNO999FLJ2VMVAOPS16MJC6XBVVK7F4TK8ZSIYKC529IXQ96T8EL2QZNPW5NAY79OCXEJ2BPELUSYGO6Q3XVXFA8ZMAZD5UAGFDYH3BEHKWNJ3B3NJXSPYXFEFAGWS9TQLMZWDKA5FHBNIYQYEVV1NDAWRYMJ6X1HXB4A583MF' where id=36; -update noar tt set v3='UM2YR981US8UTN79O8LQXOQJ3EKID406ASSAOT5LR7V02GO943LC06DUBK87X9VB5XP10VYTLW2V8RAYAEJ9RK5LSFZR7LFV552BKJCLN2GZ93Z8I4ENCMN4GDIFHK4LI9NQM3XEAQXH1MRIIQZDRC2D94NEANNYOXVLHFAHX6RZGRU0BKWCBIF1NVKP0920CJZ6E5KE58C9ER26M2VPC5CP941Z2QG55U06UWUSQ7VDU0ONG0LJXRYZ3WQEZ071H' where id=36; -update noar ti set v3='UM2YR981US8UTN79O8LQXOQJ3EKID406ASSAOT5LR7V02GO943LC06DUBK87X9VB5XP10VYTLW2V8RAYAEJ9RK5LSFZR7LFV552BKJCLN2GZ93Z8I4ENCMN4GDIFHK4LI9NQM3XEAQXH1MRIIQZDRC2D94NEANNYOXVLHFAHX6RZGRU0BKWCBIF1NVKP0920CJZ6E5KE58C9ER26M2VPC5CP941Z2QG55U06UWUSQ7VDU0ONG0LJXRYZ3WQEZ071H' where id=36; -update noar tt set v0='E7HM12G1PKE9Q53X2NT75Q27YTPCQ6Q5228Q1WTACZEHQA28VEWTLRB0SBBS0NX98Q1543BU53PNDDJY0KA2DU3IIV0OJFXNP93Z9GK6UTIFN1PYC9FR18GY1R09TIL7RZK3ELL4D0D3IBC23VUVYK3BHUDE7J1H62323OJUQQO68SMWS9FOAUKLQLZHOQ1H2I51IRW0NQ1H9SLTHYUH1Q30E39UGNEOV8MLM8VHVDJYQZIWO5XLD7N04TWD9T2M5' where id=37; -update noar ti set v0='E7HM12G1PKE9Q53X2NT75Q27YTPCQ6Q5228Q1WTACZEHQA28VEWTLRB0SBBS0NX98Q1543BU53PNDDJY0KA2DU3IIV0OJFXNP93Z9GK6UTIFN1PYC9FR18GY1R09TIL7RZK3ELL4D0D3IBC23VUVYK3BHUDE7J1H62323OJUQQO68SMWS9FOAUKLQLZHOQ1H2I51IRW0NQ1H9SLTHYUH1Q30E39UGNEOV8MLM8VHVDJYQZIWO5XLD7N04TWD9T2M5' where id=37; -update noar tt set v1='ABB0S6RL26NXW97E91XYZZGCDAQYTI1JY04EGVXE71QP5T12OTF5WU2332B55LDB6W3P24LO283EV2P00JZXFFFYBB6DQSY9FKS9DC8V3B0NKIRBYRCPU89F8I7CL7YS4T9PXLME4B6YXQXPQQNG90SROEX677XKNTKYXUVUQ1G02KX1067RHWMWGTMT238KLH8IAEY8W7A3ERCUL7V80IQ21ZXVKIDGZV3Y8WJ4DMLKN541Z2M1IXYUOV8KXOP23' where id=37; -update noar ti set v1='ABB0S6RL26NXW97E91XYZZGCDAQYTI1JY04EGVXE71QP5T12OTF5WU2332B55LDB6W3P24LO283EV2P00JZXFFFYBB6DQSY9FKS9DC8V3B0NKIRBYRCPU89F8I7CL7YS4T9PXLME4B6YXQXPQQNG90SROEX677XKNTKYXUVUQ1G02KX1067RHWMWGTMT238KLH8IAEY8W7A3ERCUL7V80IQ21ZXVKIDGZV3Y8WJ4DMLKN541Z2M1IXYUOV8KXOP23' where id=37; -update noar tt set v2='UVAO28FY9545RHV4QHEQF717OJZ2SVINNIC155EWFW98U1D5E9OAQP61QD8XSAXRZWDCSZIM3C6OTI1JBKPG0W7YA06VGYU3VIJQ4KH8S5RZ7L0A83796RYUI1NGAU7LH5UHP9JCQE53AGXC74416T4DCUOMMHZIZJV6A563LMX96GBMJ7EI78QLBL23781FZENZYLRO8CY89420BP39R79TASYAAVB1N842THPNMNMFRAMH99ZXLWU9GOK16XOF8' where id=37; -update noar ti set v2='UVAO28FY9545RHV4QHEQF717OJZ2SVINNIC155EWFW98U1D5E9OAQP61QD8XSAXRZWDCSZIM3C6OTI1JBKPG0W7YA06VGYU3VIJQ4KH8S5RZ7L0A83796RYUI1NGAU7LH5UHP9JCQE53AGXC74416T4DCUOMMHZIZJV6A563LMX96GBMJ7EI78QLBL23781FZENZYLRO8CY89420BP39R79TASYAAVB1N842THPNMNMFRAMH99ZXLWU9GOK16XOF8' where id=37; -update noar tt set v3='E804XUFNM5CS6KBB610LA707IS191EKFVSTDEDZEV0RNT7E83E79UVW1UX1D770S9ODRMCIPNLR68VJRRU4T96REOSZ7Y3KUR79HJF6YOJWRT3HLWC03QGCWQEFSPWRZKKFPTWEC68M70UWDP522RFHXMKT8C976F1W17E1EJGM59W8F03GA4K6GPH5UKDSWZSUCGJGQLDTBL6AOULDPLJO1B54XLAIJA6M90D1F7JUXMLB0FUBJ37JIMSYV3D85A' where id=37; -update noar ti set v3='E804XUFNM5CS6KBB610LA707IS191EKFVSTDEDZEV0RNT7E83E79UVW1UX1D770S9ODRMCIPNLR68VJRRU4T96REOSZ7Y3KUR79HJF6YOJWRT3HLWC03QGCWQEFSPWRZKKFPTWEC68M70UWDP522RFHXMKT8C976F1W17E1EJGM59W8F03GA4K6GPH5UKDSWZSUCGJGQLDTBL6AOULDPLJO1B54XLAIJA6M90D1F7JUXMLB0FUBJ37JIMSYV3D85A' where id=37; -update noar tt set v0='KSRPHW9R54VWIIQYR5AMU7I0FVD5V0FOZ2WGXNL9ZGIE4JAHNW6DRK5P6XLX143GDVI41FM97TY00GQ9U7DMUNPKUUZ8H7CLIBASN948ZELVLW3Z30YP9JCWH9IE2KW6BAT1KRNATOL95PY1SW82ERYT7PDJUT5RAEGTYREB4CFSRWH4SVA6K654LJ03FIRGMKKSGOVJEABFHTRVBK9DS2OTXZ3ZSYW1CW3YL9QXYBQ4CMJQSIDADCYMIC8A1OIQW' where id=38; -update noar ti set v0='KSRPHW9R54VWIIQYR5AMU7I0FVD5V0FOZ2WGXNL9ZGIE4JAHNW6DRK5P6XLX143GDVI41FM97TY00GQ9U7DMUNPKUUZ8H7CLIBASN948ZELVLW3Z30YP9JCWH9IE2KW6BAT1KRNATOL95PY1SW82ERYT7PDJUT5RAEGTYREB4CFSRWH4SVA6K654LJ03FIRGMKKSGOVJEABFHTRVBK9DS2OTXZ3ZSYW1CW3YL9QXYBQ4CMJQSIDADCYMIC8A1OIQW' where id=38; -update noar tt set v1='CDY0BKT8MTJ47DYFUX93PLD18YZM2OE079MSJDYS1W6CMQOOJB2OVN3N9NL316LMGT9DSN89Q2P6TS2AOYJMB0Y19JE87KOZOO1JQXI7CMI8YWC9DUY86TXL8P88UUGCPKB7TWZWF2JACM8ARX7QZAOV5WQWG0A9V35LVQK6CEHW9U78AWJONKF49JYNA7AO2ZMFM926Z8RD72YWG0Y3Y6RZH6INL42GFTOYQ0LJ1VSCBVSHSXMT9VD97OV9N66NC' where id=38; -update noar ti set v1='CDY0BKT8MTJ47DYFUX93PLD18YZM2OE079MSJDYS1W6CMQOOJB2OVN3N9NL316LMGT9DSN89Q2P6TS2AOYJMB0Y19JE87KOZOO1JQXI7CMI8YWC9DUY86TXL8P88UUGCPKB7TWZWF2JACM8ARX7QZAOV5WQWG0A9V35LVQK6CEHW9U78AWJONKF49JYNA7AO2ZMFM926Z8RD72YWG0Y3Y6RZH6INL42GFTOYQ0LJ1VSCBVSHSXMT9VD97OV9N66NC' where id=38; -update noar tt set v2='0WRUD5M74TMCCFUW6RT45T7OUB4WLC9VB4X9KCATJI0WZ5J1BXJQ2M7A7A7PBWEJKK0KYVHRFCPBYXMGHDQLOG1P4AP5WRLN54XA9UQA3I8JOF8N2T36UUHQKD35JOAMZLKQPXJ9RNH1SSA9ZRG89BAGIL3NRCLACV8592HKN40M1MQMI2VBX5LP7RK17UUMD07IESVO838N9HR16Z80LHACAR1GE0R0HVBCSSUCKM0MKL8DPV249QEK9BCKHE7LR' where id=38; -update noar ti set v2='0WRUD5M74TMCCFUW6RT45T7OUB4WLC9VB4X9KCATJI0WZ5J1BXJQ2M7A7A7PBWEJKK0KYVHRFCPBYXMGHDQLOG1P4AP5WRLN54XA9UQA3I8JOF8N2T36UUHQKD35JOAMZLKQPXJ9RNH1SSA9ZRG89BAGIL3NRCLACV8592HKN40M1MQMI2VBX5LP7RK17UUMD07IESVO838N9HR16Z80LHACAR1GE0R0HVBCSSUCKM0MKL8DPV249QEK9BCKHE7LR' where id=38; -update noar tt set v3='DTSJLM92OSKYU8SVNKCZ10CIYYCSJT2OIOYFOGWWKTSQ4QQIMGG91O0QORDGDVWWUY8GPZFOS1WNDCZ4SGNGTIAPUDYR03SET7VW5KPFG24VZIPRIHAC69U4JWVDHE925A8XTXZFFABE7RLGBYNS8JDBSEHMR23CT93LL6UG4SVRTX51AMEODIK5S0U16O5JR9OE5KTLE3NYLMMDVLO00HCJKZCP48HJZB003O1CV2DOW3YK30AB2EM56A71QZZ38' where id=38; -update noar ti set v3='DTSJLM92OSKYU8SVNKCZ10CIYYCSJT2OIOYFOGWWKTSQ4QQIMGG91O0QORDGDVWWUY8GPZFOS1WNDCZ4SGNGTIAPUDYR03SET7VW5KPFG24VZIPRIHAC69U4JWVDHE925A8XTXZFFABE7RLGBYNS8JDBSEHMR23CT93LL6UG4SVRTX51AMEODIK5S0U16O5JR9OE5KTLE3NYLMMDVLO00HCJKZCP48HJZB003O1CV2DOW3YK30AB2EM56A71QZZ38' where id=38; -update noar tt set v0='KAQ5LAOU70U5RYC8OAG4KYV1HJ23CZMSK1E2I4Z32YBQZKB5A7RECIHXFCYQS3D5HBW2V9E7BGJ2NTIPY35IJKL83TDVBLOKJYMKC1572NUKDF8D1H6544YM06XDNSGGZKKN6KKIDWIWSRGYLHU3X91HGWW14MPCO5NT5OVHVBZO305L1JW4ROE1KHZV3FHDMRC1JC05HRKRNLNRQD9MNKAIV99JE0463KSC8SPCC5USVSB8WC48ME0K9P6IV33SY' where id=39; -update noar ti set v0='KAQ5LAOU70U5RYC8OAG4KYV1HJ23CZMSK1E2I4Z32YBQZKB5A7RECIHXFCYQS3D5HBW2V9E7BGJ2NTIPY35IJKL83TDVBLOKJYMKC1572NUKDF8D1H6544YM06XDNSGGZKKN6KKIDWIWSRGYLHU3X91HGWW14MPCO5NT5OVHVBZO305L1JW4ROE1KHZV3FHDMRC1JC05HRKRNLNRQD9MNKAIV99JE0463KSC8SPCC5USVSB8WC48ME0K9P6IV33SY' where id=39; -update noar tt set v1='MPNC600OM7GT50W8ZF2VXBPNSVMU15BANJF7AAZLWH3ZNGIQ9ZFMMM7CPYPSO0VW8PD4CCQWXFSE9PSP6I47RZXGK0AWV0B8J8V4OTM23ND4TXFCJQQDA2BQA161SB7TP3054ZI9Q9UN563HLTP35IZ0UH944ST3RLTAX2YA78UTHZJATV2QPFYEELYH3E8GJ1B5BEDM8P25O4WCN0M1WDLSKLU4B5128W1HS8RJ04VMYY2K10ST2GYEOYJMHLDHQ' where id=39; -update noar ti set v1='MPNC600OM7GT50W8ZF2VXBPNSVMU15BANJF7AAZLWH3ZNGIQ9ZFMMM7CPYPSO0VW8PD4CCQWXFSE9PSP6I47RZXGK0AWV0B8J8V4OTM23ND4TXFCJQQDA2BQA161SB7TP3054ZI9Q9UN563HLTP35IZ0UH944ST3RLTAX2YA78UTHZJATV2QPFYEELYH3E8GJ1B5BEDM8P25O4WCN0M1WDLSKLU4B5128W1HS8RJ04VMYY2K10ST2GYEOYJMHLDHQ' where id=39; -update noar tt set v2='605UIPV63A8Q5KTEC1XDGUKUHZQU8YGCU33EO02NEKDDZ1YT73TGL63AA64WIK2FXKG8U9TNBGLCUZ3CLWPZHF2PRNAVRPA7XTMDI5AMB111BNWXIDZFFIRHLEWTC5YOC6DBJV5VGTD39IE9XIPYBX0ZPMUGH259YGJPHXNVVR1V3FF6AQT0IGCVPWF6ALO4HSB031JQ0W38JG4RYC5ERAV74SLIFFPXCBIMDWZ0BOSHMPQNMS3DQENXI9X6PVNG3' where id=39; -update noar ti set v2='605UIPV63A8Q5KTEC1XDGUKUHZQU8YGCU33EO02NEKDDZ1YT73TGL63AA64WIK2FXKG8U9TNBGLCUZ3CLWPZHF2PRNAVRPA7XTMDI5AMB111BNWXIDZFFIRHLEWTC5YOC6DBJV5VGTD39IE9XIPYBX0ZPMUGH259YGJPHXNVVR1V3FF6AQT0IGCVPWF6ALO4HSB031JQ0W38JG4RYC5ERAV74SLIFFPXCBIMDWZ0BOSHMPQNMS3DQENXI9X6PVNG3' where id=39; -update noar tt set v3='Y1FYBXZ6G4JFU28VOU58PG15RSOZEF1GDQTE4ONT7BUKOPCB5AN6FV360CM4PJGLNCM38JHHTZMRI5LUC0PGAVI9G4KOEN4I4D6377118MZL152AE0UJDAT1YI6Y9541024C9JRNDH7CP1HEJPUDCLM9P40W6SU8G92E3IV8PNMEMGX4I1RZAEAUA5YVY5S2VQ247J0WE4ZI3Y1PFJIDUHNMZX7W5ZXU6HKRMWXHAUKM8ASLKS4R71DZ9J19ZA361' where id=39; -update noar ti set v3='Y1FYBXZ6G4JFU28VOU58PG15RSOZEF1GDQTE4ONT7BUKOPCB5AN6FV360CM4PJGLNCM38JHHTZMRI5LUC0PGAVI9G4KOEN4I4D6377118MZL152AE0UJDAT1YI6Y9541024C9JRNDH7CP1HEJPUDCLM9P40W6SU8G92E3IV8PNMEMGX4I1RZAEAUA5YVY5S2VQ247J0WE4ZI3Y1PFJIDUHNMZX7W5ZXU6HKRMWXHAUKM8ASLKS4R71DZ9J19ZA361' where id=39; -update noar tt set v0='0VKQ5X2PQQDTJV12EFUYSXYQU3ISX60OPPIQ0XQKM4MHW2HPQB3PQAS9HSOKT9S6Z2N3DAVFMBC2LQVY5BYO8J6NWFH86FJCPT82YJV5RRU7ATWJ3WGR7WK11Q4CZ8HP7KLY5BGAADOFWMIZR8IN4DVTXGZA9QQTJEHTR0KEYNUZ0CE9RSC7HRJNCORDS1Q7NL01VZEGW6POGQD5E5SJFING7V21VNSQW8CMFLU9ARI3X3RWWMB8DUAGE6FVQWMBI' where id=40; -update noar ti set v0='0VKQ5X2PQQDTJV12EFUYSXYQU3ISX60OPPIQ0XQKM4MHW2HPQB3PQAS9HSOKT9S6Z2N3DAVFMBC2LQVY5BYO8J6NWFH86FJCPT82YJV5RRU7ATWJ3WGR7WK11Q4CZ8HP7KLY5BGAADOFWMIZR8IN4DVTXGZA9QQTJEHTR0KEYNUZ0CE9RSC7HRJNCORDS1Q7NL01VZEGW6POGQD5E5SJFING7V21VNSQW8CMFLU9ARI3X3RWWMB8DUAGE6FVQWMBI' where id=40; -update noar tt set v1='NYE9S343RDJK6E1Z6PAPI7WJLN5U4BFHJYWOBPMW89VF2OTHRYNSRVZP3OJ0DMCWMZDBOH0KJLWF7IDK6AI7SQ6M8DOT00BQQBUY7Y9E8AGKW8BTXMJEBVYYMXCAUKAIC95U0PRUUK7GG4UI1IXZ4EDO5IK6MGNSG68S30Y6I93TMTNLCX3KQYE03V5SWVXJ7K21VK3SN9FIT7VIK1IZNG1YZRF12K7RJNQXXAIPQBO4XE10VYWPYJS0ANTDEGBNJ' where id=40; -update noar ti set v1='NYE9S343RDJK6E1Z6PAPI7WJLN5U4BFHJYWOBPMW89VF2OTHRYNSRVZP3OJ0DMCWMZDBOH0KJLWF7IDK6AI7SQ6M8DOT00BQQBUY7Y9E8AGKW8BTXMJEBVYYMXCAUKAIC95U0PRUUK7GG4UI1IXZ4EDO5IK6MGNSG68S30Y6I93TMTNLCX3KQYE03V5SWVXJ7K21VK3SN9FIT7VIK1IZNG1YZRF12K7RJNQXXAIPQBO4XE10VYWPYJS0ANTDEGBNJ' where id=40; -update noar tt set v2='Z6P0FIWZ6JVONA8AW2FPUHTZQQDG3Q6I9LNNPDRKYS7RF4F4S2Z8ASYA7SR5RSWKG9XV3H4IVHJQM0HC8M8QRHU5RGKDLJW02ZPJ63B6XS886B59Y7P29II593EQNKG8OBW3OLXHTJQHV8ZPC118O5U50IAPOHYS1OHIJYNV6YXCKETNF00LCGRAVIWSEUV5RI58SFJ7HJE7U6ZOYY2XX1ST45CELQV1N4IE47JRCUI895W59L6FIY4MTX3BF9JJY' where id=40; -update noar ti set v2='Z6P0FIWZ6JVONA8AW2FPUHTZQQDG3Q6I9LNNPDRKYS7RF4F4S2Z8ASYA7SR5RSWKG9XV3H4IVHJQM0HC8M8QRHU5RGKDLJW02ZPJ63B6XS886B59Y7P29II593EQNKG8OBW3OLXHTJQHV8ZPC118O5U50IAPOHYS1OHIJYNV6YXCKETNF00LCGRAVIWSEUV5RI58SFJ7HJE7U6ZOYY2XX1ST45CELQV1N4IE47JRCUI895W59L6FIY4MTX3BF9JJY' where id=40; -update noar tt set v3='4QJFZJF1OIDGJO8L3JF1FU8KVRBVCAW0I0OXX34SSV6WKU2TDADOYNHYLKF8S1CN9FF0HSAKFMH0Q47CBSLUBEHS64XSOY0H6WU4KZCFJ130BEYBV4O1Q8KQAHCVRH634IQSXHGH50SMT3Y86819GNDYMNNL6RJFG0LYVYG8JIM22W5D5I961Y2692JKPG4DEVUKIKRHB51F8OEUWTCEH50ECVVLU2SBV6W1NHWESX47TLCHSE796YK6CLNJV765T' where id=40; -update noar ti set v3='4QJFZJF1OIDGJO8L3JF1FU8KVRBVCAW0I0OXX34SSV6WKU2TDADOYNHYLKF8S1CN9FF0HSAKFMH0Q47CBSLUBEHS64XSOY0H6WU4KZCFJ130BEYBV4O1Q8KQAHCVRH634IQSXHGH50SMT3Y86819GNDYMNNL6RJFG0LYVYG8JIM22W5D5I961Y2692JKPG4DEVUKIKRHB51F8OEUWTCEH50ECVVLU2SBV6W1NHWESX47TLCHSE796YK6CLNJV765T' where id=40; -update noar tt set v0='HWRU6D5LE6HWXEN5S6W52X2HN11LQR9FCIHJPWAF6HSJDR7EEVE288F8DA8M2UZUE7F12BVG61VIDZ7BNXXOZWI3Y2N4705AN3866NQK6YPWH4LI48ZFUCTRLWRLT7563USJJXEKLQOPN1GAUGVR00E44D5WG6T2AHNXS2CFVKMHCJSX5ES2XVOINAQCL1JW07URUIRPAAW4CT81EHCKYNYK3KDRS6ZYL11EF6EQEOE7K2C168T5Y64JVZOK5ELCQ' where id=41; -update noar ti set v0='HWRU6D5LE6HWXEN5S6W52X2HN11LQR9FCIHJPWAF6HSJDR7EEVE288F8DA8M2UZUE7F12BVG61VIDZ7BNXXOZWI3Y2N4705AN3866NQK6YPWH4LI48ZFUCTRLWRLT7563USJJXEKLQOPN1GAUGVR00E44D5WG6T2AHNXS2CFVKMHCJSX5ES2XVOINAQCL1JW07URUIRPAAW4CT81EHCKYNYK3KDRS6ZYL11EF6EQEOE7K2C168T5Y64JVZOK5ELCQ' where id=41; -update noar tt set v1='2REATM9LDEW0A5B9N2185CGR5PBLVPYDE2DKU0O7M7EJA5PI8DU5J9BGJZI9IQ8U3IRM5AV9I8EFVKZ1AYC26QQU9SNONZAMO6JBL1DRAK7PR8760EA8EYEHV0JF35CKVNB537OQ4Z074XMH2XWU33J8D3S737QHS6FXI9GIUS404ZOIJWXZGVG77S2HO0ZX6TZ7V0URU55IXKXN9JRJBFDZUEM7GO9KOR7BKJH6DEG3WLS88EPLBQ2L1E6ZVJ8A2' where id=41; -update noar ti set v1='2REATM9LDEW0A5B9N2185CGR5PBLVPYDE2DKU0O7M7EJA5PI8DU5J9BGJZI9IQ8U3IRM5AV9I8EFVKZ1AYC26QQU9SNONZAMO6JBL1DRAK7PR8760EA8EYEHV0JF35CKVNB537OQ4Z074XMH2XWU33J8D3S737QHS6FXI9GIUS404ZOIJWXZGVG77S2HO0ZX6TZ7V0URU55IXKXN9JRJBFDZUEM7GO9KOR7BKJH6DEG3WLS88EPLBQ2L1E6ZVJ8A2' where id=41; -update noar tt set v2='O4UXNKM3O0OFP9BVJB264K46BYHG08QWXJUBQ5JGX0WH9IQ77U3GUSMJZUGFM5QGSSHE0MHM51JQZ7ME2EGR7VTLUNMUEJUZ45TI0E4AN4DTPIAT7O4VRV0W7UZVCS5STJDEUHO305FEPTXLTYELHKA85A0TO2FS1U3GO3513PE7CYRLE2VTPRN6FYIZT82G91WG0K24VF9DIRRO34VSL3C3CRF6WUP4VQM8L9J9VXPIO23V8AEFRRZ4ZDYOGD4UQ' where id=41; -update noar ti set v2='O4UXNKM3O0OFP9BVJB264K46BYHG08QWXJUBQ5JGX0WH9IQ77U3GUSMJZUGFM5QGSSHE0MHM51JQZ7ME2EGR7VTLUNMUEJUZ45TI0E4AN4DTPIAT7O4VRV0W7UZVCS5STJDEUHO305FEPTXLTYELHKA85A0TO2FS1U3GO3513PE7CYRLE2VTPRN6FYIZT82G91WG0K24VF9DIRRO34VSL3C3CRF6WUP4VQM8L9J9VXPIO23V8AEFRRZ4ZDYOGD4UQ' where id=41; -update noar tt set v3='WWQI6SKZJNZ7NTWKG1DDA6SJOLR7VJHSWRXU4P8QHB1LIH45F96SR4DKB4ZC6JDHRF3LW4CK5DROMHJW2HN7NJQKBH22S9PPRNIODSWC2T2HBDCU30BN5I77HJG8FL7N23TJYHNWTOJ4113Q62315EN4ZG1I8A1YGXL64BP3QWCNWLG13MC0DOE35BFQI6QDOA0G3N8LQEY669BVO29IK2JHHNA7RK3MGX75FHOHPJL77M8L9I9RQZBYKNR8BHDHH' where id=41; -update noar ti set v3='WWQI6SKZJNZ7NTWKG1DDA6SJOLR7VJHSWRXU4P8QHB1LIH45F96SR4DKB4ZC6JDHRF3LW4CK5DROMHJW2HN7NJQKBH22S9PPRNIODSWC2T2HBDCU30BN5I77HJG8FL7N23TJYHNWTOJ4113Q62315EN4ZG1I8A1YGXL64BP3QWCNWLG13MC0DOE35BFQI6QDOA0G3N8LQEY669BVO29IK2JHHNA7RK3MGX75FHOHPJL77M8L9I9RQZBYKNR8BHDHH' where id=41; -update noar tt set v0='B26APH1QO1T9F9IKE73JKNO8R57JW39FU554JGHS8P4ATSZBNZH1KB278NBBLC4WBBJPGAPPYCX9X12OKI1GJ1MZ7WJX0SZP7SVBO0B1RKU65D3T43ZE7RQYYJYVPLYND4743157YYNRCT8OS28RIS6OE67I8UZAN9I4DLY682DH9DU59VGTXW0K0RS51MSECC5T4M383U2JEE7638HL22UX7U8ZSZUVPHFIEFUU5CUTCOTE4BGTCW4SINRGYD70I' where id=42; -update noar ti set v0='B26APH1QO1T9F9IKE73JKNO8R57JW39FU554JGHS8P4ATSZBNZH1KB278NBBLC4WBBJPGAPPYCX9X12OKI1GJ1MZ7WJX0SZP7SVBO0B1RKU65D3T43ZE7RQYYJYVPLYND4743157YYNRCT8OS28RIS6OE67I8UZAN9I4DLY682DH9DU59VGTXW0K0RS51MSECC5T4M383U2JEE7638HL22UX7U8ZSZUVPHFIEFUU5CUTCOTE4BGTCW4SINRGYD70I' where id=42; -update noar tt set v1='33Y37JH1L18FFA4NRM2LTCHOXV17IJ75CSEC5ALLORHA3XU6HQKZ40R9N9098QH6BQ1JFL13VOZTK3UB610AZ2HORH933INO6J2ELQMVZIVRU0PSUFHIFWO959KVO994OOHN7Q5JPKL48C3PUU2097M89W92POTGYJ0ZZRKTMU8AOLT0AYU2PS4JGMOOLJC2JXFH80VA8VTMRPPRKVAEB5J2D27Z6L0JZXW1O1NRBSZ1Q7I8BC2TQIDMOXSZ5FUDB' where id=42; -update noar ti set v1='33Y37JH1L18FFA4NRM2LTCHOXV17IJ75CSEC5ALLORHA3XU6HQKZ40R9N9098QH6BQ1JFL13VOZTK3UB610AZ2HORH933INO6J2ELQMVZIVRU0PSUFHIFWO959KVO994OOHN7Q5JPKL48C3PUU2097M89W92POTGYJ0ZZRKTMU8AOLT0AYU2PS4JGMOOLJC2JXFH80VA8VTMRPPRKVAEB5J2D27Z6L0JZXW1O1NRBSZ1Q7I8BC2TQIDMOXSZ5FUDB' where id=42; -update noar tt set v2='4GA1A28P4CUYP2EPQ4AQHCM823H4GYFEIPJKG98DWKAO3J1IFLEAZHGKZUR60DMBOXIYWVS1D0YSWLCZ2IH7V83X51YWYX9IDI15H8AODQO987TCPOQN5DEY3E2KWS4A50KCQPPYNSNNH80PX92O8VD9QB2FHS7W67SG6EQ0L58O2GKFBSSORERP1WR9AJJRLT70JOTT7LP5ARD8FKHDF2E769XZS9M9WGYI4S0PCJ106D3W8U045QO3WYCZN0LUJ' where id=42; -update noar ti set v2='4GA1A28P4CUYP2EPQ4AQHCM823H4GYFEIPJKG98DWKAO3J1IFLEAZHGKZUR60DMBOXIYWVS1D0YSWLCZ2IH7V83X51YWYX9IDI15H8AODQO987TCPOQN5DEY3E2KWS4A50KCQPPYNSNNH80PX92O8VD9QB2FHS7W67SG6EQ0L58O2GKFBSSORERP1WR9AJJRLT70JOTT7LP5ARD8FKHDF2E769XZS9M9WGYI4S0PCJ106D3W8U045QO3WYCZN0LUJ' where id=42; -update noar tt set v3='TS3JKU2XDJ5H5CGJAUKUC9WLAHHJJVPNHY3V7VJSP9B7Z4TK8J9HASW8A4M699TGENR50R6LMGMWLVAS421IXCMDP2Q45ZUAK7YPNENVDU1QJD4CUORRGUK2PGZ0SWJNGTC6GOW8EE47EULXXWXCFJC3MOKL5C486TUVB34O0L08CZYSILNJQOPETYEAVK88RFJOTBFRPPAF2PJPWBMOS36J12ASE46IH2W2ZP1UXSSHKXBERCZOS3K6LPF40XD2Y' where id=42; -update noar ti set v3='TS3JKU2XDJ5H5CGJAUKUC9WLAHHJJVPNHY3V7VJSP9B7Z4TK8J9HASW8A4M699TGENR50R6LMGMWLVAS421IXCMDP2Q45ZUAK7YPNENVDU1QJD4CUORRGUK2PGZ0SWJNGTC6GOW8EE47EULXXWXCFJC3MOKL5C486TUVB34O0L08CZYSILNJQOPETYEAVK88RFJOTBFRPPAF2PJPWBMOS36J12ASE46IH2W2ZP1UXSSHKXBERCZOS3K6LPF40XD2Y' where id=42; -update noar tt set v0='CL6V9SSJP77WE8K1NQ02VZYU8RB2Q38UYZCQCFPX24666ZJD3XM60XWX394V7WV2SN374XR0AHPC9CWVOC434DKI4AJIFR83GKZSIFPOTEBNBP2IA9WY4ZYYVY79Q2QNPCCP7EJQIJW4O90LR1VUCL14MZJIU8KZXYWJR1UYWK21J5QPW7H8ZVA0HGJ3A6CYLOBUCWG52ERI5D2QOJ12T655SQFR74V8OUSQC3V44RAH88VHXBOF4D2ET4BFAHFCR' where id=43; -update noar ti set v0='CL6V9SSJP77WE8K1NQ02VZYU8RB2Q38UYZCQCFPX24666ZJD3XM60XWX394V7WV2SN374XR0AHPC9CWVOC434DKI4AJIFR83GKZSIFPOTEBNBP2IA9WY4ZYYVY79Q2QNPCCP7EJQIJW4O90LR1VUCL14MZJIU8KZXYWJR1UYWK21J5QPW7H8ZVA0HGJ3A6CYLOBUCWG52ERI5D2QOJ12T655SQFR74V8OUSQC3V44RAH88VHXBOF4D2ET4BFAHFCR' where id=43; -update noar tt set v1='PAVN2IYK705NWIJVC5PRM2K05T2SH5FFN8NK7CCQ5PQF81FAA44WGVEF4L1KDMGKXIM4QNKEQ80DTU2CWVMX92KNE330JPF6RONCWGX8Z0MAIYM9LH7YHZYAFUR0KDKZG0CFHQH6KHKBFDUH0VDX6YL08OB548A6DN65SA3FHIJMBQGM49DCJXQ0BCRW0ZYGUGRZ7T0CLVVAWPDWYFM4EDZ4V97E71LQJ50VMVHOIAYOEUGTTYRB5H89SFHE2BLO8' where id=43; -update noar ti set v1='PAVN2IYK705NWIJVC5PRM2K05T2SH5FFN8NK7CCQ5PQF81FAA44WGVEF4L1KDMGKXIM4QNKEQ80DTU2CWVMX92KNE330JPF6RONCWGX8Z0MAIYM9LH7YHZYAFUR0KDKZG0CFHQH6KHKBFDUH0VDX6YL08OB548A6DN65SA3FHIJMBQGM49DCJXQ0BCRW0ZYGUGRZ7T0CLVVAWPDWYFM4EDZ4V97E71LQJ50VMVHOIAYOEUGTTYRB5H89SFHE2BLO8' where id=43; -update noar tt set v2='A0WF6AH053APLJUK87DY1YX174LILLJFKIN7SBC969KCFXV7K0BT021NYUYFR4G7Y1XFP9PNUT7P43QDZ0MUKC8DL3IEV13UBQNGYIG6SRU93YWARIJPZLC749X2Y5476MJPZL0V5FNERXRA5J1YYARVP7Q5K3PKANY9F3YNWT075UFU1QS74FZB84Q6SKB75AXCKL7CUPXDNT6GD1G2IJ6BFS8T29UJSHU0QUSC8CRQW78SG5DX44CML2LB0IVIK' where id=43; -update noar ti set v2='A0WF6AH053APLJUK87DY1YX174LILLJFKIN7SBC969KCFXV7K0BT021NYUYFR4G7Y1XFP9PNUT7P43QDZ0MUKC8DL3IEV13UBQNGYIG6SRU93YWARIJPZLC749X2Y5476MJPZL0V5FNERXRA5J1YYARVP7Q5K3PKANY9F3YNWT075UFU1QS74FZB84Q6SKB75AXCKL7CUPXDNT6GD1G2IJ6BFS8T29UJSHU0QUSC8CRQW78SG5DX44CML2LB0IVIK' where id=43; -update noar tt set v3='BFC1W0PDFLDCE05C8PTZTJ0G748NG4V5Y649F9G4YNCWI1EPWSVVNZFR4LMCN72I28U0G6UPFRXA0W5FA2GFK5NTJ45T3BWBCV98IL9AL08JXTP6HEQLQMB5STFKQPSS4CUJFOBSV95FCC0AMY0UPKR9FIXFSS7CIOEJC9TSCGUS51416EG448IO3E2YKN6ONDMMHZLSL0TIPE0U2A8VGA0D31PX2D8BYCE616RWQTN2B4H0GT67CKL63DUEPYOUR' where id=43; -update noar ti set v3='BFC1W0PDFLDCE05C8PTZTJ0G748NG4V5Y649F9G4YNCWI1EPWSVVNZFR4LMCN72I28U0G6UPFRXA0W5FA2GFK5NTJ45T3BWBCV98IL9AL08JXTP6HEQLQMB5STFKQPSS4CUJFOBSV95FCC0AMY0UPKR9FIXFSS7CIOEJC9TSCGUS51416EG448IO3E2YKN6ONDMMHZLSL0TIPE0U2A8VGA0D31PX2D8BYCE616RWQTN2B4H0GT67CKL63DUEPYOUR' where id=43; -update noar tt set v0='65HF12YYOHEB5PJYWAMTERZR841XDGENHEJJR27LNLID4VLT4H2VDWFATJG5X9SN3BATFDUG3RXE90IB23YKLDJTHGROBTN91WGE14WW4BPRFJJR9FHVWVCGFRHH7SOPSS08QR5SGIUG1C4PMKJA8X1OX87RPBBLZBP1VU8WB65CEXWSY9DWHJ7A5DK90O00CIUPRJ880DXTVQ0FCZJIV13DMMBMGLJM62O3Y1Y6QU1MSFWPFC4EUH3L0DO4HXDFF' where id=44; -update noar ti set v0='65HF12YYOHEB5PJYWAMTERZR841XDGENHEJJR27LNLID4VLT4H2VDWFATJG5X9SN3BATFDUG3RXE90IB23YKLDJTHGROBTN91WGE14WW4BPRFJJR9FHVWVCGFRHH7SOPSS08QR5SGIUG1C4PMKJA8X1OX87RPBBLZBP1VU8WB65CEXWSY9DWHJ7A5DK90O00CIUPRJ880DXTVQ0FCZJIV13DMMBMGLJM62O3Y1Y6QU1MSFWPFC4EUH3L0DO4HXDFF' where id=44; -update noar tt set v1='KIZI306Y7UFS5PORP394I02OA9WC6MINBNAR2MHMJE567NCDF3VA1804F4T61BYUFG1L3M6F3IS4H2DB7YAHINPRWM68VR4L8W56440ZR0UY04SXIIWCC8Z5AE85VLGK6ISFE0SI2D0ARP6LVPD33XVETPX7BSHAH0SDREB2YFRSZFP3GPT2JXE4Z9VHMTTL86VT69PPVKFWCVLFGZJQZ6WNWRMC601SPZ3HZZQZ14I95FFF1Z1RWLSRBS6S1MWJ0' where id=44; -update noar ti set v1='KIZI306Y7UFS5PORP394I02OA9WC6MINBNAR2MHMJE567NCDF3VA1804F4T61BYUFG1L3M6F3IS4H2DB7YAHINPRWM68VR4L8W56440ZR0UY04SXIIWCC8Z5AE85VLGK6ISFE0SI2D0ARP6LVPD33XVETPX7BSHAH0SDREB2YFRSZFP3GPT2JXE4Z9VHMTTL86VT69PPVKFWCVLFGZJQZ6WNWRMC601SPZ3HZZQZ14I95FFF1Z1RWLSRBS6S1MWJ0' where id=44; -update noar tt set v2='6MHXEL4ZSOMZGO5G4G5DIT2YDEPKK79WMFLBDP8G7BN1NOSLGQ5D7KPGPWUGUZ7MTJ9EPE0859QOIALMQ6L0KXGVVX6XRULJV8E64XXO1BZUX7WZ26VXUAVF7NF7ORIR2GHN5W8H2BFJL1XSXDPQOFVWF8VFZZC8YXZNOGF2CELXGBKFJOTRSKNRTLWECJMU3SYOE68TNTKIHGM7IK3T857NVL9LVB7CX12PDWQ2NSUGEYO8IPFHYAZGXZGI88OOR' where id=44; -update noar ti set v2='6MHXEL4ZSOMZGO5G4G5DIT2YDEPKK79WMFLBDP8G7BN1NOSLGQ5D7KPGPWUGUZ7MTJ9EPE0859QOIALMQ6L0KXGVVX6XRULJV8E64XXO1BZUX7WZ26VXUAVF7NF7ORIR2GHN5W8H2BFJL1XSXDPQOFVWF8VFZZC8YXZNOGF2CELXGBKFJOTRSKNRTLWECJMU3SYOE68TNTKIHGM7IK3T857NVL9LVB7CX12PDWQ2NSUGEYO8IPFHYAZGXZGI88OOR' where id=44; -update noar tt set v3='YSYILL831UYPXYNDIOI5WVI203WTEIC1ZIXUB4QOMLXHB31V9NKV0YP2OXI6Y1RW5BVV19ECCCNS0VFZX98IWC6RCYVYA7TYNGQQRMNFLN3F54R030AEPP2Z4ATQYYT08E8V93896YFVD0PJAXLTYURQUA49F6Y7TMS6T6N5AEINR2K3AESWSQHQ88WYTHOYYZ4WCH2Y431XK4YRDEE5KXPRA17U0NZA0C5CRADFSIXM0Y5F2K87MIFXNKUIR79W8' where id=44; -update noar ti set v3='YSYILL831UYPXYNDIOI5WVI203WTEIC1ZIXUB4QOMLXHB31V9NKV0YP2OXI6Y1RW5BVV19ECCCNS0VFZX98IWC6RCYVYA7TYNGQQRMNFLN3F54R030AEPP2Z4ATQYYT08E8V93896YFVD0PJAXLTYURQUA49F6Y7TMS6T6N5AEINR2K3AESWSQHQ88WYTHOYYZ4WCH2Y431XK4YRDEE5KXPRA17U0NZA0C5CRADFSIXM0Y5F2K87MIFXNKUIR79W8' where id=44; -update noar tt set v0='FGX6QUO3PGR5QQ0N62GC924DZY3ZAGZAIEVZFFXNC2GC3QBUNVGZK8DL2L0J22WSXO81XCP1QF1WTSU6JH27KCDHB0BZ0JVUREJV57I20SUJ9YMJGCCWP097TK8TM81AJOJLXH7CD4WVZUEOUG695D4H5XDHOSTRITIX1B2DFHN1637YH4RITSHFEUW3K6I3VJB42HV48VYB4EXOVPDK27CW48EC2R3XL0VOUIWS0SGWJUM8XG28PFMSM6XMV6E2I' where id=45; -update noar ti set v0='FGX6QUO3PGR5QQ0N62GC924DZY3ZAGZAIEVZFFXNC2GC3QBUNVGZK8DL2L0J22WSXO81XCP1QF1WTSU6JH27KCDHB0BZ0JVUREJV57I20SUJ9YMJGCCWP097TK8TM81AJOJLXH7CD4WVZUEOUG695D4H5XDHOSTRITIX1B2DFHN1637YH4RITSHFEUW3K6I3VJB42HV48VYB4EXOVPDK27CW48EC2R3XL0VOUIWS0SGWJUM8XG28PFMSM6XMV6E2I' where id=45; -update noar tt set v1='NXRMLALWVI4DK12MNKT9LW1TW5J2MSQ24ZV0MECFGTUI1HKC08KOQUQYQL3NKA0NVB2HD1SVNB1N7LVGAY8S094SUESHJPFE1Q6FTMZQX2A6FW4DP0WPGLZ3J38VN7LA94GWCMP9VTXHB6NN0J3D72A3QLA48CKQMAIMZ6G57REX7H9DKXETPPGSVIOGQMHTJ11L183Z1UK3JMFOIGOUVXNAXFQQBJF7VCCE4CNFDVLJE915Z25EE7R5CVDVZ5GYV' where id=45; -update noar ti set v1='NXRMLALWVI4DK12MNKT9LW1TW5J2MSQ24ZV0MECFGTUI1HKC08KOQUQYQL3NKA0NVB2HD1SVNB1N7LVGAY8S094SUESHJPFE1Q6FTMZQX2A6FW4DP0WPGLZ3J38VN7LA94GWCMP9VTXHB6NN0J3D72A3QLA48CKQMAIMZ6G57REX7H9DKXETPPGSVIOGQMHTJ11L183Z1UK3JMFOIGOUVXNAXFQQBJF7VCCE4CNFDVLJE915Z25EE7R5CVDVZ5GYV' where id=45; -update noar tt set v2='P1X0GTIFY7R0IME581PI006OKRAN95XD95KET7M75P192TVDOWL45J1G76T7O8P3FA826F49I6AIUSCSCT6ZGRLDZ1O13DKP2KWX3SHAET63JKGMQ71OU3SQN26C9ED6V47LPIL8WFTQA3NT3H9EF8LLLQ3M8T1BOCDZ5T8XPULJE3HGYXRVL2P4WDMADWV09YAYLCKVJHJBKOZ3R1Y38ZX3ZY3JWZBBHFMTP08WC1MTYDZVSH4A4ZHT1DM344JKU' where id=45; -update noar ti set v2='P1X0GTIFY7R0IME581PI006OKRAN95XD95KET7M75P192TVDOWL45J1G76T7O8P3FA826F49I6AIUSCSCT6ZGRLDZ1O13DKP2KWX3SHAET63JKGMQ71OU3SQN26C9ED6V47LPIL8WFTQA3NT3H9EF8LLLQ3M8T1BOCDZ5T8XPULJE3HGYXRVL2P4WDMADWV09YAYLCKVJHJBKOZ3R1Y38ZX3ZY3JWZBBHFMTP08WC1MTYDZVSH4A4ZHT1DM344JKU' where id=45; -update noar tt set v3='3OBKSF9DZ7PWMQBBJ584R9E1ULIWQU30MIXM5P2984UO7NQKQHOK2NCG7220JHCPVVK0QMY576ENSJ1043LZYACR3UYK3PNDKT37BWWHLWAKJ2SNDLOH71ZCPEOZCEECIW7ZYE7YRTJPZ1BMCQ7WY3M9872IMMK81ORRLGDHLOLLKFZ5N4GIWEYD636E67NQ20BIGC84VLM5U6QUEA6NWDJVLPWQQFKEFKJZ9MMMCMBZCZEDVWCZ3RYNB12VB2KMI' where id=45; -update noar ti set v3='3OBKSF9DZ7PWMQBBJ584R9E1ULIWQU30MIXM5P2984UO7NQKQHOK2NCG7220JHCPVVK0QMY576ENSJ1043LZYACR3UYK3PNDKT37BWWHLWAKJ2SNDLOH71ZCPEOZCEECIW7ZYE7YRTJPZ1BMCQ7WY3M9872IMMK81ORRLGDHLOLLKFZ5N4GIWEYD636E67NQ20BIGC84VLM5U6QUEA6NWDJVLPWQQFKEFKJZ9MMMCMBZCZEDVWCZ3RYNB12VB2KMI' where id=45; -update noar tt set v0='XPSVIA76FZZ110SS9WUEQTW50A8ZI4XPPRGEOPX4YBBUKMXI600N6JBVGUNOPNV2A5I0H3KTMC959KW5BOE58LPVMSRAPBEY2APC7W8F34MJL7OL2UCQ7O44WEA6OF6GSABY8V3FFGVM2QO8GOM69CY8IKL8HEQ4GNWOAVINNJ8KWJLFSYZ0940T12SKPT0943UWJB4RY9F4P59IJFW8QTIU86ZYYLRJTP7Y5BYQGAT412WTWGPM86EU4J0YI93LO' where id=46; -update noar ti set v0='XPSVIA76FZZ110SS9WUEQTW50A8ZI4XPPRGEOPX4YBBUKMXI600N6JBVGUNOPNV2A5I0H3KTMC959KW5BOE58LPVMSRAPBEY2APC7W8F34MJL7OL2UCQ7O44WEA6OF6GSABY8V3FFGVM2QO8GOM69CY8IKL8HEQ4GNWOAVINNJ8KWJLFSYZ0940T12SKPT0943UWJB4RY9F4P59IJFW8QTIU86ZYYLRJTP7Y5BYQGAT412WTWGPM86EU4J0YI93LO' where id=46; -update noar tt set v1='MG6SLBHU0405FQXXGERN6CB8NPI374KDI1NBCA7KDX3HAB4LGAED97XNEE5QXJCE32K0ZDXGQEJPGNDB47RDQAITM3LLCC7UTT5ZAJRF48V5S5XRMVCBP3ICD83TGNPFELIC53UCVAGQTSB8UEC32VAOT1H96TJ3HE3GBR4LR5NYIT97MPUD4X932CE3L358Z4HBA68RW6Z7KEJJPSE6YSO28RTKYXAGSATNMG24Z541QC71TVVKRAJI6FWRTMNEZ' where id=46; -update noar ti set v1='MG6SLBHU0405FQXXGERN6CB8NPI374KDI1NBCA7KDX3HAB4LGAED97XNEE5QXJCE32K0ZDXGQEJPGNDB47RDQAITM3LLCC7UTT5ZAJRF48V5S5XRMVCBP3ICD83TGNPFELIC53UCVAGQTSB8UEC32VAOT1H96TJ3HE3GBR4LR5NYIT97MPUD4X932CE3L358Z4HBA68RW6Z7KEJJPSE6YSO28RTKYXAGSATNMG24Z541QC71TVVKRAJI6FWRTMNEZ' where id=46; -update noar tt set v2='UZEFVHAPP0YVNF9BYAM9J4OV66NWKXTDHXGU00896DD1SUKHNDTDZVXOD2DM7F7PHFL7LD85OII9NF5N6R49ELLQHVKI4V215YXNIZ1JTM6G4R89O20E9X4SDSV6IH4DGULXSZFUSCLD8LZ6QDQMQC5MT1OKW9J2QHGTSOCJ1L10WZWB1NWPVBXTUIK9MSG97BCTV9I6K8D3XFYNBOXPPNHWXLQATV14T2OOFVWF8W2FTGKJX6UA5DAG94P93TAAO' where id=46; -update noar ti set v2='UZEFVHAPP0YVNF9BYAM9J4OV66NWKXTDHXGU00896DD1SUKHNDTDZVXOD2DM7F7PHFL7LD85OII9NF5N6R49ELLQHVKI4V215YXNIZ1JTM6G4R89O20E9X4SDSV6IH4DGULXSZFUSCLD8LZ6QDQMQC5MT1OKW9J2QHGTSOCJ1L10WZWB1NWPVBXTUIK9MSG97BCTV9I6K8D3XFYNBOXPPNHWXLQATV14T2OOFVWF8W2FTGKJX6UA5DAG94P93TAAO' where id=46; -update noar tt set v3='N0TSZY0OU3IZOBN1698J3542T295SGXMJNSLP49PUH4GDPHZWZVM0SAGOEYSVDH0XIV7HUG6DDY2327HOQ330OVQEQXO2TH19E580BNRCN79UT8BXL4GBDWXB0QA7B1128IQM9UKF8I1C4K86P4THO1F32NZXY4VPG2L2AX4HARUE3P9YVNV6CIXDV590W5B8QBRK7TYO9B872WNNP9KIY0UHKUN9SZW86FG120GBPMP2QNZQ9P6ELEH183PK1ZDI' where id=46; -update noar ti set v3='N0TSZY0OU3IZOBN1698J3542T295SGXMJNSLP49PUH4GDPHZWZVM0SAGOEYSVDH0XIV7HUG6DDY2327HOQ330OVQEQXO2TH19E580BNRCN79UT8BXL4GBDWXB0QA7B1128IQM9UKF8I1C4K86P4THO1F32NZXY4VPG2L2AX4HARUE3P9YVNV6CIXDV590W5B8QBRK7TYO9B872WNNP9KIY0UHKUN9SZW86FG120GBPMP2QNZQ9P6ELEH183PK1ZDI' where id=46; -update noar tt set v0='ENTKQFPHX7G2AJ39YUZS9VCYQSLZDAT6P7IS8QDVU8QUPJMJOBOIYIEJG5DIQW9QPR7NTFD6AFI6DI5YMN1BFF9O5OQD0DBEFPUIFSFRI6ORPPIXVYFQ20BU1TMWAJKY5ZOBIF3EC3KXRNFP0X893TVIAWT3KNS85AGW64DU8WYFQK2CK16S5G37XYQ6PY5D34IEAWOCMSBK22V3S6HLK57LV19FI3GRUDH9P7YHO3N31PS8CS2BOP6S2LN6C0O7N' where id=47; -update noar ti set v0='ENTKQFPHX7G2AJ39YUZS9VCYQSLZDAT6P7IS8QDVU8QUPJMJOBOIYIEJG5DIQW9QPR7NTFD6AFI6DI5YMN1BFF9O5OQD0DBEFPUIFSFRI6ORPPIXVYFQ20BU1TMWAJKY5ZOBIF3EC3KXRNFP0X893TVIAWT3KNS85AGW64DU8WYFQK2CK16S5G37XYQ6PY5D34IEAWOCMSBK22V3S6HLK57LV19FI3GRUDH9P7YHO3N31PS8CS2BOP6S2LN6C0O7N' where id=47; -update noar tt set v1='HY3JITCZX272T7NC3UN2TVK3D4O2795M2YZSBD6TJFJU9KAU6QG0IAKVXD4HQY47BN3O49ILMWBXROE12SVUK880T5QU2EW8NDDWO9SWYM44PLRTFX671C2R93A1VJ216C6GY68Z1W1DAU7VR3GCNSTFGARHZ0UQX2810E46WLK3QC4KV8KJ094CW6MP51N57QPN2USYT5MH2QQOICQ5ZHBGYH4AJECVGMAAJ7D1SB1UGX3DQT55WXXCXZ45SGPME' where id=47; -update noar ti set v1='HY3JITCZX272T7NC3UN2TVK3D4O2795M2YZSBD6TJFJU9KAU6QG0IAKVXD4HQY47BN3O49ILMWBXROE12SVUK880T5QU2EW8NDDWO9SWYM44PLRTFX671C2R93A1VJ216C6GY68Z1W1DAU7VR3GCNSTFGARHZ0UQX2810E46WLK3QC4KV8KJ094CW6MP51N57QPN2USYT5MH2QQOICQ5ZHBGYH4AJECVGMAAJ7D1SB1UGX3DQT55WXXCXZ45SGPME' where id=47; -update noar tt set v2='QTAVN8W7CMXL08TSM82VSOXZFA2GJGKQH589BLHQXJ2X91H7VVEDQU0CAXJQV0KZI6UCB4TJVDSMAH7KGX3I0VK9H4PCDXMSR3J2APWS08WMQCLUVE7Q9I3XDDALTATU15WRXR5UJG9K0LDJB8HTNJ31KKPFMWHBG4G1IW1DT2R8XJKSWL1YJGO36FY5YR012AR1K7YXTLMVVNMBQOWGRA9YI8T1ZZCITMXDMEO4KBKSMNA1AJ6OH964YVP87HDD3' where id=47; -update noar ti set v2='QTAVN8W7CMXL08TSM82VSOXZFA2GJGKQH589BLHQXJ2X91H7VVEDQU0CAXJQV0KZI6UCB4TJVDSMAH7KGX3I0VK9H4PCDXMSR3J2APWS08WMQCLUVE7Q9I3XDDALTATU15WRXR5UJG9K0LDJB8HTNJ31KKPFMWHBG4G1IW1DT2R8XJKSWL1YJGO36FY5YR012AR1K7YXTLMVVNMBQOWGRA9YI8T1ZZCITMXDMEO4KBKSMNA1AJ6OH964YVP87HDD3' where id=47; -update noar tt set v3='0MU0DN3CILNTH4P4VW7L346GQH0IBHB2KRHHWUK3IZFKNZP2DDAY318J0I4YTLTOTPH7A9EW3J52MU0R3GRQL6W89PVAM9M0NJPQHCKQC9X5TFR4C40GFMMOGIYFDJN3GOSSEWJ8SYZDIILOKBPKMFAKO41KES23DU1L23H127T48KP97PCW12PI3N4KVBYWWLGB5D68UANS3AFQ8ZUKOI5Z00DKMEK6QK7TGA6MLF714UKVU8XACTFM733INRCTV' where id=47; -update noar ti set v3='0MU0DN3CILNTH4P4VW7L346GQH0IBHB2KRHHWUK3IZFKNZP2DDAY318J0I4YTLTOTPH7A9EW3J52MU0R3GRQL6W89PVAM9M0NJPQHCKQC9X5TFR4C40GFMMOGIYFDJN3GOSSEWJ8SYZDIILOKBPKMFAKO41KES23DU1L23H127T48KP97PCW12PI3N4KVBYWWLGB5D68UANS3AFQ8ZUKOI5Z00DKMEK6QK7TGA6MLF714UKVU8XACTFM733INRCTV' where id=47; -update noar tt set v0='AJ0ZB1IIX2E3PRBZC7RZDRMBNDSIBNPM107SBFHTRYDGIY66OCRW9XZBQ47N5YMY9KIQ324KRDK4PCI6GR6TGBBFF7BLXO913QN2T7NV4ZX12VWBWOBDU6FQASRAKQ5E91WEA3OIDP3SM7CG1KKF4DP4MC726LCLZV3S1PXPQD8S9ZNCE1OXI2ZJPBI5POXKSRDTCQUS9X6Y66YAPP1022Q1JQKGRRLK4N5PGPVYRUORTT2V1DPD9OGBIJXEFO5RA' where id=48; -update noar ti set v0='AJ0ZB1IIX2E3PRBZC7RZDRMBNDSIBNPM107SBFHTRYDGIY66OCRW9XZBQ47N5YMY9KIQ324KRDK4PCI6GR6TGBBFF7BLXO913QN2T7NV4ZX12VWBWOBDU6FQASRAKQ5E91WEA3OIDP3SM7CG1KKF4DP4MC726LCLZV3S1PXPQD8S9ZNCE1OXI2ZJPBI5POXKSRDTCQUS9X6Y66YAPP1022Q1JQKGRRLK4N5PGPVYRUORTT2V1DPD9OGBIJXEFO5RA' where id=48; -update noar tt set v1='PK8J4UH5XIC04B8YEQUNHLV7G9XC1S6JOCZFOHENH1VOEO3XQ5FX1SW8V3K18ODKHQEK0RLMK6GN56Z7MB2DLCXT5KTIBZ395UADYZH9RMJMQGWRRYZJPIQPEH4EIOHXFBS0L0M3JBB0O81NY0GSCZSRABK90SLXEMXCJ0RWVA91FAJY82OYE9IGWCJQBEF8IB2HXFZEQL82SWB59ZXIK6P6V1XCMOKF5ETMJ6QI2N81ZPRBMSIDSYBW6IVY94PIO' where id=48; -update noar ti set v1='PK8J4UH5XIC04B8YEQUNHLV7G9XC1S6JOCZFOHENH1VOEO3XQ5FX1SW8V3K18ODKHQEK0RLMK6GN56Z7MB2DLCXT5KTIBZ395UADYZH9RMJMQGWRRYZJPIQPEH4EIOHXFBS0L0M3JBB0O81NY0GSCZSRABK90SLXEMXCJ0RWVA91FAJY82OYE9IGWCJQBEF8IB2HXFZEQL82SWB59ZXIK6P6V1XCMOKF5ETMJ6QI2N81ZPRBMSIDSYBW6IVY94PIO' where id=48; -update noar tt set v2='DJTOKHUTKMN0KYK6NM03NPXX2745NXWIV0VUMJVAY7Q723QS03WQ4Q4O0GOPIIHZAG94UYHUT8JILAU5PFSP9S084YSRW5Q7FB1FIQIKSGZXMQUL6Q34G3K2140TL3JDEQGDGL6DX61DJVI9X5GNIOVG0U60GXTX9705EV5A21KY1NM0C3AV5OCIP9YXF3OZZ65EI3NS50FY6N9K6A7ZN2VYTGG9HRFNMKJYRC6HN5WUUSPLLZXSPS0R0AJL8YI1Q' where id=48; -update noar ti set v2='DJTOKHUTKMN0KYK6NM03NPXX2745NXWIV0VUMJVAY7Q723QS03WQ4Q4O0GOPIIHZAG94UYHUT8JILAU5PFSP9S084YSRW5Q7FB1FIQIKSGZXMQUL6Q34G3K2140TL3JDEQGDGL6DX61DJVI9X5GNIOVG0U60GXTX9705EV5A21KY1NM0C3AV5OCIP9YXF3OZZ65EI3NS50FY6N9K6A7ZN2VYTGG9HRFNMKJYRC6HN5WUUSPLLZXSPS0R0AJL8YI1Q' where id=48; -update noar tt set v3='NX5FMM59DI7ZD9BB112JIN1D8M8YUUCW9A8NOC25LL3NBY3VVRMBD4PGL7U47S3BLGK6BONHZ130KZ4QFK2BA0H4NDS2UL2OIG6DO2KX3LNNNJUNX27M01HJENL4PA0NAGYNMHG0L3VER4WPVE4F4YLX03BM7MWU9452R1B6EO5KH4NA0RR533IKHWHD88FJZCG21W7QLWDV2T2MEDZXABPEJC8O8BLY5P5PU7UVJZLVJEO1J4IJWUZ828EGQ41IM' where id=48; -update noar ti set v3='NX5FMM59DI7ZD9BB112JIN1D8M8YUUCW9A8NOC25LL3NBY3VVRMBD4PGL7U47S3BLGK6BONHZ130KZ4QFK2BA0H4NDS2UL2OIG6DO2KX3LNNNJUNX27M01HJENL4PA0NAGYNMHG0L3VER4WPVE4F4YLX03BM7MWU9452R1B6EO5KH4NA0RR533IKHWHD88FJZCG21W7QLWDV2T2MEDZXABPEJC8O8BLY5P5PU7UVJZLVJEO1J4IJWUZ828EGQ41IM' where id=48; -update noar tt set v0='DP4HVYRKY1OHXM6J5NSADI8AFXEQV4O5U1O9PQH24DDOGOK65KMBF7RDHUVUZOHJQI7855L8SMD45H90F65DW2VPGNZI00PKIE6MDYM2C2N9RB4QCWUCIB902Z54ORAOI79HS3SRZN0C6PKCO265LENOYPWOCYS78Z3J16VW0TFJWDLLP01HUG2FA38SUY8NMKY5XX3ZD6ZW64KH43TAJ9PG2TXLZM27BOL702FVKKOCT01VZ1TIBNIO282U9PIDM' where id=49; -update noar ti set v0='DP4HVYRKY1OHXM6J5NSADI8AFXEQV4O5U1O9PQH24DDOGOK65KMBF7RDHUVUZOHJQI7855L8SMD45H90F65DW2VPGNZI00PKIE6MDYM2C2N9RB4QCWUCIB902Z54ORAOI79HS3SRZN0C6PKCO265LENOYPWOCYS78Z3J16VW0TFJWDLLP01HUG2FA38SUY8NMKY5XX3ZD6ZW64KH43TAJ9PG2TXLZM27BOL702FVKKOCT01VZ1TIBNIO282U9PIDM' where id=49; -update noar tt set v1='UJCVL59R2GQVTMOEZ81QMICA726D16HQK232QLEK7IER7GV4FX9M6K1DW7D4G1V33G7WY7O1C388CUE33FGRNPSWWF9QRC2UB5PJ8QZ7YOS59FC8EBOA7FLYPKGHOYC5ETHQ3LE5B6BV2V72XAT3UL6M8R9B5UOUMP2TOCRY0JXG9MUMCD3ZLJXN14HEVNNG3VBRMOR9C495LWJAB80AY8YBO0RC0WET9YZI1TDOYSX4B8GB5WFJQ96J7L83ETHGK' where id=49; -update noar ti set v1='UJCVL59R2GQVTMOEZ81QMICA726D16HQK232QLEK7IER7GV4FX9M6K1DW7D4G1V33G7WY7O1C388CUE33FGRNPSWWF9QRC2UB5PJ8QZ7YOS59FC8EBOA7FLYPKGHOYC5ETHQ3LE5B6BV2V72XAT3UL6M8R9B5UOUMP2TOCRY0JXG9MUMCD3ZLJXN14HEVNNG3VBRMOR9C495LWJAB80AY8YBO0RC0WET9YZI1TDOYSX4B8GB5WFJQ96J7L83ETHGK' where id=49; -update noar tt set v2='OWEU4TKTFUK2F8WXPU5REQBS08WCEAGGZPZMCC0RTLRT7FYWF7V5R8MDHZNXRTHL7VOT28IOYF0NFIU89YTG2OWMUV9ULZ3WLM6NVTD3TLIF7UQ4GSTGG5HKSTG4DCCDIVWV5EEKQ5IX2496UP3ADJIQE9KKEZMHSAA0S4VFM6XCQTKHGATADSJ2IJPGE7U9U6S7IXG5U2MVLYJ1ZGJ9KN4X4X1NPULZKU37D46NKGE0E3ZLYXZIT8JZZ1XQ7CTUV' where id=49; -update noar ti set v2='OWEU4TKTFUK2F8WXPU5REQBS08WCEAGGZPZMCC0RTLRT7FYWF7V5R8MDHZNXRTHL7VOT28IOYF0NFIU89YTG2OWMUV9ULZ3WLM6NVTD3TLIF7UQ4GSTGG5HKSTG4DCCDIVWV5EEKQ5IX2496UP3ADJIQE9KKEZMHSAA0S4VFM6XCQTKHGATADSJ2IJPGE7U9U6S7IXG5U2MVLYJ1ZGJ9KN4X4X1NPULZKU37D46NKGE0E3ZLYXZIT8JZZ1XQ7CTUV' where id=49; -update noar tt set v3='64HP24BJUE39C4MPRLKFIUM1GB3B7RJJ8MEQ9PSYTWLN9LRHUE0AUI2TZLIDE8YB8SVUF0ZIZ9X0G8RUIWNSYNB70NPJLHADH53X6SH278G72BCVH0KI0UCGBJIU7GO3VW5U3JXB5LHT6TFXZ7WKGX80H8JQ04TT87X8SILUKAV3EI4978Y8E12YG3W75B1AI30YIF63IRTT0QJ7Z49A04MH3IFCBSPZP4VWZ5CT76HQ390P76X8XVJFUNVVUMMY2' where id=49; -update noar ti set v3='64HP24BJUE39C4MPRLKFIUM1GB3B7RJJ8MEQ9PSYTWLN9LRHUE0AUI2TZLIDE8YB8SVUF0ZIZ9X0G8RUIWNSYNB70NPJLHADH53X6SH278G72BCVH0KI0UCGBJIU7GO3VW5U3JXB5LHT6TFXZ7WKGX80H8JQ04TT87X8SILUKAV3EI4978Y8E12YG3W75B1AI30YIF63IRTT0QJ7Z49A04MH3IFCBSPZP4VWZ5CT76HQ390P76X8XVJFUNVVUMMY2' where id=49; -update noar tt set v0='AH6RJUA0TN3FWVAF6DAJEEXIHY5OE785ML1IUGUUINA37Q1DXMUVTQ4KTJCL4N7V4F166XKCS6UPT4O1J0CXWUI18FDCUUROXJ1GZXO3A11OJKQ6CF40PYPH4Z45L8TGBPJKITHKRAG7C9QQQEAXRKXUATYYE4ETB9DFNMZ0OCLDOI4JK8Z6ONFIBU9IL6Y4FNEQF30VW1EZB1THQ76LMNIWYEE4PNA69VRWIBZ7XSCT35JFHE4ZJOA62TDR5G004' where id=50; -update noar ti set v0='AH6RJUA0TN3FWVAF6DAJEEXIHY5OE785ML1IUGUUINA37Q1DXMUVTQ4KTJCL4N7V4F166XKCS6UPT4O1J0CXWUI18FDCUUROXJ1GZXO3A11OJKQ6CF40PYPH4Z45L8TGBPJKITHKRAG7C9QQQEAXRKXUATYYE4ETB9DFNMZ0OCLDOI4JK8Z6ONFIBU9IL6Y4FNEQF30VW1EZB1THQ76LMNIWYEE4PNA69VRWIBZ7XSCT35JFHE4ZJOA62TDR5G004' where id=50; -update noar tt set v1='3WJGO08D8N6P32S6TP8LA8EPVKK6F9H51M8E47CBQE2D2UG92ILRKC6NM31CTGNWFSH3PGSHJTHDY9UZEN41YL37PK2J9BYS63D6NT6DQ0V90L13FYFZKE5N0P3K7CGE9KZ3KRYL1T7VMK49NILEDNQN5WZGGQVHQ2G6V2W6163UL5C3AULDGYUSMHMLYDAQNCU4WS1N67HHMUKSNUKFNGYKWF5Y8GXKTL0R55FSKFONJ7KIIDMKLHCALHUAM0IK7' where id=50; -update noar ti set v1='3WJGO08D8N6P32S6TP8LA8EPVKK6F9H51M8E47CBQE2D2UG92ILRKC6NM31CTGNWFSH3PGSHJTHDY9UZEN41YL37PK2J9BYS63D6NT6DQ0V90L13FYFZKE5N0P3K7CGE9KZ3KRYL1T7VMK49NILEDNQN5WZGGQVHQ2G6V2W6163UL5C3AULDGYUSMHMLYDAQNCU4WS1N67HHMUKSNUKFNGYKWF5Y8GXKTL0R55FSKFONJ7KIIDMKLHCALHUAM0IK7' where id=50; -update noar tt set v2='BCEPH1I4N56QWD8V7ZQ8J63IBTH9VCZ00152KFWIZJO0DIIM46QA9UNRE9YJKQWCLY69YDPR3KFLNI90F9HRSCN0E6RJK038PPYM4VSMR5N387E9CD6GOUY8YPZBC3E41TEOZGEJ9WJ5HWG6VO6DNWGOW0IRN4Z4KILY4VS0ON8V1A0AL60DPGOEDE05IJUTFQW4OCVQENEWD1NP47H1FGOMAWV6G4HSY7548BELL0198FWE820OKTHG6NAEED4N9' where id=50; -update noar ti set v2='BCEPH1I4N56QWD8V7ZQ8J63IBTH9VCZ00152KFWIZJO0DIIM46QA9UNRE9YJKQWCLY69YDPR3KFLNI90F9HRSCN0E6RJK038PPYM4VSMR5N387E9CD6GOUY8YPZBC3E41TEOZGEJ9WJ5HWG6VO6DNWGOW0IRN4Z4KILY4VS0ON8V1A0AL60DPGOEDE05IJUTFQW4OCVQENEWD1NP47H1FGOMAWV6G4HSY7548BELL0198FWE820OKTHG6NAEED4N9' where id=50; -update noar tt set v3='DDYKE6YKZAILO7XJB95GWV2LPE82HPT151R32YMC6FOZKMEQFW46XH5G3ZIM6N7358EM8MDIZMJSQ35O77J0L7Z8ZRQLHU74DVY4QQRI5QR483EITJ8BYOMAN6G3XJPGLUD5ZABI333KYVU0L5G31NF6WJJMAS62KABSQ0QNE9OBCPKDLM9HJ8LUZ2KV278YPZ2N4XOWQC1VUXLSEMLA0SRQVEYXVZUONGNZUSYILI9N08NYR5EGWDN648CSF598W' where id=50; -update noar ti set v3='DDYKE6YKZAILO7XJB95GWV2LPE82HPT151R32YMC6FOZKMEQFW46XH5G3ZIM6N7358EM8MDIZMJSQ35O77J0L7Z8ZRQLHU74DVY4QQRI5QR483EITJ8BYOMAN6G3XJPGLUD5ZABI333KYVU0L5G31NF6WJJMAS62KABSQ0QNE9OBCPKDLM9HJ8LUZ2KV278YPZ2N4XOWQC1VUXLSEMLA0SRQVEYXVZUONGNZUSYILI9N08NYR5EGWDN648CSF598W' where id=50; -update noar tt set v0='IX8XV44MYZO5Q4T894ICBBS97IJEUNI9ZWUK0N13R3RT8KEWPGFG1PJ5TLKV9ZD9J75Z4DFXBHL37EYDRLUOMBY8FARXL78QPM0A6MZETUCIK3IM8IWCCK3UZAU233FREHNQ5HPF4M4T9LR5NCERZQF15TOLIV8LZ4OFZ4YE0XUPXWNBCUAFGCHOYHVRL5YWVSTI2BQ3NBVVLASBZBDVK8S2BEZ3ET9RI5W542DJWQF7FTG1MI4TM7Y8AS3ISLUZT' where id=51; -update noar ti set v0='IX8XV44MYZO5Q4T894ICBBS97IJEUNI9ZWUK0N13R3RT8KEWPGFG1PJ5TLKV9ZD9J75Z4DFXBHL37EYDRLUOMBY8FARXL78QPM0A6MZETUCIK3IM8IWCCK3UZAU233FREHNQ5HPF4M4T9LR5NCERZQF15TOLIV8LZ4OFZ4YE0XUPXWNBCUAFGCHOYHVRL5YWVSTI2BQ3NBVVLASBZBDVK8S2BEZ3ET9RI5W542DJWQF7FTG1MI4TM7Y8AS3ISLUZT' where id=51; -update noar tt set v1='BP6I9HQ6YIS0LYRJOAHTMNFDJOO3FV08BESRLO73HWVLTOR4QGNICXYMNCPIRL0BTHNFUPZUH7BC53F9EHRWIXJUWOT9MP1MA21NB5AKXN3U4PQEQZ1C895XHBB2P9U8UTO5GSCHD8DZYM2J838HACQ5RM3VV28OSP79HVOJ0IX6H6AQPYM8YKPXQIHH5SUCUWUQWL12PRBIR0G1ULZ12VUC2F706VZIN1J89VMBOTD8UDVVES8PEDZAFIC11A34X' where id=51; -update noar ti set v1='BP6I9HQ6YIS0LYRJOAHTMNFDJOO3FV08BESRLO73HWVLTOR4QGNICXYMNCPIRL0BTHNFUPZUH7BC53F9EHRWIXJUWOT9MP1MA21NB5AKXN3U4PQEQZ1C895XHBB2P9U8UTO5GSCHD8DZYM2J838HACQ5RM3VV28OSP79HVOJ0IX6H6AQPYM8YKPXQIHH5SUCUWUQWL12PRBIR0G1ULZ12VUC2F706VZIN1J89VMBOTD8UDVVES8PEDZAFIC11A34X' where id=51; -update noar tt set v2='Q06RQ2UKQZ06C0GJWGIDCRRNELZJMVF9CZ3YZKBLCILE4DI8DTG73VFR0WICBLNMOUA9L0MU4QF1MGZBQXHJWXKLKEAH4DSN66JNZSX7R0SVIWPEEPUXGZ5XEMTTUQ0NXTIL683LBJG86XK37302SX50SKMXOH9PZ4F6P9SQ3QVOZP5YM5WKMIIBIJN9U44CMOQHH631W9KMPII8ASYGP1CWYTT9398ISFSAPR5NPJ5RHEGDY9VVOHMIR8NSMGEWZ' where id=51; -update noar ti set v2='Q06RQ2UKQZ06C0GJWGIDCRRNELZJMVF9CZ3YZKBLCILE4DI8DTG73VFR0WICBLNMOUA9L0MU4QF1MGZBQXHJWXKLKEAH4DSN66JNZSX7R0SVIWPEEPUXGZ5XEMTTUQ0NXTIL683LBJG86XK37302SX50SKMXOH9PZ4F6P9SQ3QVOZP5YM5WKMIIBIJN9U44CMOQHH631W9KMPII8ASYGP1CWYTT9398ISFSAPR5NPJ5RHEGDY9VVOHMIR8NSMGEWZ' where id=51; -update noar tt set v3='CK1XXTMAKVNGHF6IHHBVZZMQTEYZ7HG8Z04HFRKN5RCM8GTUIAFPEYRK4IU4IZCSOH5RVZRV97VPGH8UD10TRJ282QHJNM2J485QPA0YCOHUPUPNFZMX6IKWA8KFHJYIAUQOJDPY8I6PQ74MA750X0ETU0F6ZWF6UONZG4O9WK1SXKPONAOKDGANNEOEZ2OYLPKN6P3R6IOVCC94WYETKHU5VEJJE01YC034GYAKABPIACQY15HVMGDNQSZ17GS3U' where id=51; -update noar ti set v3='CK1XXTMAKVNGHF6IHHBVZZMQTEYZ7HG8Z04HFRKN5RCM8GTUIAFPEYRK4IU4IZCSOH5RVZRV97VPGH8UD10TRJ282QHJNM2J485QPA0YCOHUPUPNFZMX6IKWA8KFHJYIAUQOJDPY8I6PQ74MA750X0ETU0F6ZWF6UONZG4O9WK1SXKPONAOKDGANNEOEZ2OYLPKN6P3R6IOVCC94WYETKHU5VEJJE01YC034GYAKABPIACQY15HVMGDNQSZ17GS3U' where id=51; -update noar tt set v0='M09HWRSUOLJ2POTRP5JCDYVBPMRDMBI1IW0Y7Q22YZSMDS6R7NADS0846PBSZ417UIC7VCED5OKI6GW9BLY8J7AZ1Z7YY6DDMI2M0YQXQT4KLW76UOU5W52FVNAA5PEZ8JD8HYTSF2OK2HDX5K0EHSP3ZV7X75JUKWID9PD3DDJI8YV2X3YL8L183M579APW9C600H4IXB3IZE76MBKW1KFCXDOBIJDYYX2JZ9OM29APVEGNM2FPC3GSQ57EQJ4WX' where id=52; -update noar ti set v0='M09HWRSUOLJ2POTRP5JCDYVBPMRDMBI1IW0Y7Q22YZSMDS6R7NADS0846PBSZ417UIC7VCED5OKI6GW9BLY8J7AZ1Z7YY6DDMI2M0YQXQT4KLW76UOU5W52FVNAA5PEZ8JD8HYTSF2OK2HDX5K0EHSP3ZV7X75JUKWID9PD3DDJI8YV2X3YL8L183M579APW9C600H4IXB3IZE76MBKW1KFCXDOBIJDYYX2JZ9OM29APVEGNM2FPC3GSQ57EQJ4WX' where id=52; -update noar tt set v1='S7FF8MBVYWBV1EITIENPHUW2BV6N3VOH4J4A7DOK37E9CUOF0TUJHA2FPGUZ9LS56S4OKMMRQ37Y7K2LIO0RIDOHG6JCVV0XA0CZSENOM4GOQC7QYL969ASPW5Q4Y5P2HLXON3CTTHOHB97HT34ML6CU3ELHF6DX4WQHIS9Q8PL2INFMSTZA7NO00PVS6B2BEPZ481PD9VBZENA4WA10NPHEKM6A1LWTZIO0F4R06RBKJ2G6UHJUJGJGTJDNHV2PI' where id=52; -update noar ti set v1='S7FF8MBVYWBV1EITIENPHUW2BV6N3VOH4J4A7DOK37E9CUOF0TUJHA2FPGUZ9LS56S4OKMMRQ37Y7K2LIO0RIDOHG6JCVV0XA0CZSENOM4GOQC7QYL969ASPW5Q4Y5P2HLXON3CTTHOHB97HT34ML6CU3ELHF6DX4WQHIS9Q8PL2INFMSTZA7NO00PVS6B2BEPZ481PD9VBZENA4WA10NPHEKM6A1LWTZIO0F4R06RBKJ2G6UHJUJGJGTJDNHV2PI' where id=52; -update noar tt set v2='GZD4ATOSQ5JDYQXP9TEDX71YHJFWQTV6VCWJ6TA93QF6WFC1JVJC179TWMYU4OF3GN8NANQ6UW41L60ZNW6IZVU9RROJR2EX4S433ICDLBXWUSUDTL7B94O1EOMR4OXI1DCGVBGQ4MR0991HQPLBHBU91ZOOYUCOKWU0NHFPD4XX5F8S9L2UGPCX5O0Q5MZZGZ41Y05E1GUFK5BS0AMKC55CKSDOG42W3BXO6A31W4HC485MUGKUPYDRUEJC3Y0OI' where id=52; -update noar ti set v2='GZD4ATOSQ5JDYQXP9TEDX71YHJFWQTV6VCWJ6TA93QF6WFC1JVJC179TWMYU4OF3GN8NANQ6UW41L60ZNW6IZVU9RROJR2EX4S433ICDLBXWUSUDTL7B94O1EOMR4OXI1DCGVBGQ4MR0991HQPLBHBU91ZOOYUCOKWU0NHFPD4XX5F8S9L2UGPCX5O0Q5MZZGZ41Y05E1GUFK5BS0AMKC55CKSDOG42W3BXO6A31W4HC485MUGKUPYDRUEJC3Y0OI' where id=52; -update noar tt set v3='U2YUS4MO6YA2MNGY3ATCE6LZ5ZIRW4ZVBYXVOBWTP4WC8ISQWSNXTXFP47PKHZD3JCNUQRLSF9W09TMX9NLQZG7WYY1UQCGZROSTOI0C31GJ6S81RJE3LT7L5XQO6Q6Q69A0GF3426NJ243Y2CHAXQT403IZ0V9N4TJSOJTF34EJL2MO17IND1SKA61YPCUK9BYPJ503LIPYIBBUQ5LEYTUYJRLYEFHNPPX8PTL7D4KRQDNAC2AWCFH34SA9KXN5P' where id=52; -update noar ti set v3='U2YUS4MO6YA2MNGY3ATCE6LZ5ZIRW4ZVBYXVOBWTP4WC8ISQWSNXTXFP47PKHZD3JCNUQRLSF9W09TMX9NLQZG7WYY1UQCGZROSTOI0C31GJ6S81RJE3LT7L5XQO6Q6Q69A0GF3426NJ243Y2CHAXQT403IZ0V9N4TJSOJTF34EJL2MO17IND1SKA61YPCUK9BYPJ503LIPYIBBUQ5LEYTUYJRLYEFHNPPX8PTL7D4KRQDNAC2AWCFH34SA9KXN5P' where id=52; -update noar tt set v0='YZ2XJTJJVS8SCDMGKY0T4XZFHMUE76Y6TGXZ16QTSZGBDXP9P0STCB3FWYGBMWE9IH2Y2XT0JTBP5VR4126TEI5V1VA6SP1BCD1VDCSL1V8RZMMUJIJVZAJLMWQ68FE0BOTX16OOB66VA76A8NBZFW26M8M4NPBJOKF3032E5G9H0YVUWKWH9TQAAOGF9ZJ6J86PAVOJGDEJDCYIF179WJRGW665025GLDVF2WAVUPC52YUFRE3H8WY6PAH0GRCAF' where id=53; -update noar ti set v0='YZ2XJTJJVS8SCDMGKY0T4XZFHMUE76Y6TGXZ16QTSZGBDXP9P0STCB3FWYGBMWE9IH2Y2XT0JTBP5VR4126TEI5V1VA6SP1BCD1VDCSL1V8RZMMUJIJVZAJLMWQ68FE0BOTX16OOB66VA76A8NBZFW26M8M4NPBJOKF3032E5G9H0YVUWKWH9TQAAOGF9ZJ6J86PAVOJGDEJDCYIF179WJRGW665025GLDVF2WAVUPC52YUFRE3H8WY6PAH0GRCAF' where id=53; -update noar tt set v1='GUW4DMWZGEVNXA856NJ6SRQIZ3K99KBUCH1Y9J0V63I8GSNK74NCVQ0JV0MNUYFUTMGOTZXZ59N51LXRMX8GJ1WZEXC6CB2IAYWRK0VQGSXW8RH3AA4BNYXESVQ888PW5GJOCTR7UWQI86681313LATF63IGSJNIWGNLSENWXNFXN42U7WQMM06D0YJYVJT0YFQ97SRY04FZF4BDDOIC7A1LJYV4D2RPXVNO4TWQEZYJ8PVEMHJIU4JURVHTI315Y' where id=53; -update noar ti set v1='GUW4DMWZGEVNXA856NJ6SRQIZ3K99KBUCH1Y9J0V63I8GSNK74NCVQ0JV0MNUYFUTMGOTZXZ59N51LXRMX8GJ1WZEXC6CB2IAYWRK0VQGSXW8RH3AA4BNYXESVQ888PW5GJOCTR7UWQI86681313LATF63IGSJNIWGNLSENWXNFXN42U7WQMM06D0YJYVJT0YFQ97SRY04FZF4BDDOIC7A1LJYV4D2RPXVNO4TWQEZYJ8PVEMHJIU4JURVHTI315Y' where id=53; -update noar tt set v2='VBGP5D5V2KM99SXNZISEUFL8ECH8FNEIXP78VOKMQVB8NH4FPYO9EOHKHPC06H7U2IBM7A4P748CQL11RRISDNATLSMX3H7G6Z4Z4K6ZLGQCAMPQF27120IPRWTJT2M6UBX1YOSUMHRBL3EZEB282HLSZ0UTNPMQTQASWZSFWGZNP3INXYM0GJBLAM2OSCCI7ARPNCJBJ5VQ9ZNTKPU09J7I1FB2OJ97IBP9FMRKXL0R2ZRNILK3JQ53M6YAKXW9K' where id=53; -update noar ti set v2='VBGP5D5V2KM99SXNZISEUFL8ECH8FNEIXP78VOKMQVB8NH4FPYO9EOHKHPC06H7U2IBM7A4P748CQL11RRISDNATLSMX3H7G6Z4Z4K6ZLGQCAMPQF27120IPRWTJT2M6UBX1YOSUMHRBL3EZEB282HLSZ0UTNPMQTQASWZSFWGZNP3INXYM0GJBLAM2OSCCI7ARPNCJBJ5VQ9ZNTKPU09J7I1FB2OJ97IBP9FMRKXL0R2ZRNILK3JQ53M6YAKXW9K' where id=53; -update noar tt set v3='0DGY1WNH1HRC430XLVY6KCJEB8R4OBEHJ5QD9VYY28OVE9VMWZO3BAFANRYNDZH8IDJQDNUX56F694IHQDFA9ONO5I7KTZQDGHMB57E64OX129NBGCKR5DZL1XW6O0QOFZ35G975QUCZQGXSI2JB19R5LY51IH3ZEN26FTEKAA0VFDMM4L625M7VHYL17YBPAIJOXIKUW9TAZ8MVQQ6V4CBRXCSO9FXN9TRL8F4QVGY7R7TMDZQKKW64SIX9NMP4S' where id=53; -update noar ti set v3='0DGY1WNH1HRC430XLVY6KCJEB8R4OBEHJ5QD9VYY28OVE9VMWZO3BAFANRYNDZH8IDJQDNUX56F694IHQDFA9ONO5I7KTZQDGHMB57E64OX129NBGCKR5DZL1XW6O0QOFZ35G975QUCZQGXSI2JB19R5LY51IH3ZEN26FTEKAA0VFDMM4L625M7VHYL17YBPAIJOXIKUW9TAZ8MVQQ6V4CBRXCSO9FXN9TRL8F4QVGY7R7TMDZQKKW64SIX9NMP4S' where id=53; -update noar tt set v0='148KU98F1DWGNJF21QI6TYP4RVND6DX0EB0SPRIZW9CJDCGQA3P4VWTQQUCK9A9V9J0J7QCUZ0SGJ8L1OW6ZHGNZ21P6MHP1N5JI3PKQY6ZMI9E5NOQVPCFRHV06FR0YH1ZDYYVOKAZIYM7DIFZYX3QS6P9XNB3EQIU6EDTIGF6W3VL2I2ZWE0IKA7TD5OFBVAV6ACMYJPFCYABXZMPM6O56D4LC5Z8RIHWZ9TDEBGH6JE2NYJ7RI04SQN4X1A3H3' where id=54; -update noar ti set v0='148KU98F1DWGNJF21QI6TYP4RVND6DX0EB0SPRIZW9CJDCGQA3P4VWTQQUCK9A9V9J0J7QCUZ0SGJ8L1OW6ZHGNZ21P6MHP1N5JI3PKQY6ZMI9E5NOQVPCFRHV06FR0YH1ZDYYVOKAZIYM7DIFZYX3QS6P9XNB3EQIU6EDTIGF6W3VL2I2ZWE0IKA7TD5OFBVAV6ACMYJPFCYABXZMPM6O56D4LC5Z8RIHWZ9TDEBGH6JE2NYJ7RI04SQN4X1A3H3' where id=54; -update noar tt set v1='XYGVV4QM9AB348JA8DYS2NC2QZMRTU8I2T8BTZBX3CDJOXQ5NBXS041QC29M44YKT7FCPXIO9S3KTDV713VS4LDA01DD1SEDXCL2056NTPEMEOKZZD6BSJZ0FX7PMI739KFLBSTC5I78H9OU49LWI0VWW9IE4P6YXNG3DTX6J12E4GHFKG9OHTGO3WSS7J687RCQXHO1SZL7O21LYYC89FBBB1W651TF5CYWBVANH7L27I63BKJMGX7UA2OXNO49M' where id=54; -update noar ti set v1='XYGVV4QM9AB348JA8DYS2NC2QZMRTU8I2T8BTZBX3CDJOXQ5NBXS041QC29M44YKT7FCPXIO9S3KTDV713VS4LDA01DD1SEDXCL2056NTPEMEOKZZD6BSJZ0FX7PMI739KFLBSTC5I78H9OU49LWI0VWW9IE4P6YXNG3DTX6J12E4GHFKG9OHTGO3WSS7J687RCQXHO1SZL7O21LYYC89FBBB1W651TF5CYWBVANH7L27I63BKJMGX7UA2OXNO49M' where id=54; -update noar tt set v2='IS2I84XDTHEEC1OPZF2MXH3VU03HZ43FCKBSHHEKR11YXP49QILMKNQUZIA807I5XZR80CIVA17LU546XJWJ6TCHDO3OIGJ7LVWXLBNDM802AR2E7E19XSUDI4M4XRX17VF5TSUFI396CU6PH2FOPBD908RP5F9MBAQRNSAN2STK8YY7HLCJY0VQIP4JIYJ1XRMNA29JKIT9JUKFCPN33S6GA3OCHEWLSGT1AG3MQEL21G3TT7DXACC8ASMGAF4M2' where id=54; -update noar ti set v2='IS2I84XDTHEEC1OPZF2MXH3VU03HZ43FCKBSHHEKR11YXP49QILMKNQUZIA807I5XZR80CIVA17LU546XJWJ6TCHDO3OIGJ7LVWXLBNDM802AR2E7E19XSUDI4M4XRX17VF5TSUFI396CU6PH2FOPBD908RP5F9MBAQRNSAN2STK8YY7HLCJY0VQIP4JIYJ1XRMNA29JKIT9JUKFCPN33S6GA3OCHEWLSGT1AG3MQEL21G3TT7DXACC8ASMGAF4M2' where id=54; -update noar tt set v3='R9NGX3RGHDCNUMSPBGBNZ2Q0EOJVYLDJ210HAOCU81FL18LJQOTVQ46H537P7SF3CTITMO7BGVTC5MGDY8VXCXPX1514VP31BIHOWLTM7R4ALHWBTYMW4EXMF87YDU6T1Z3Z3VRNIDLH0N3ZNOT215W761ZEXZRQEWY0629YPOI7CUS9LD0I7AZ1QV41J0F0WGZ34G9CHL6W2IOTZOUK76GV4QUEI97VH6SAG8PRTLE73D8J8ISLL0DHDUQH42YSN' where id=54; -update noar ti set v3='R9NGX3RGHDCNUMSPBGBNZ2Q0EOJVYLDJ210HAOCU81FL18LJQOTVQ46H537P7SF3CTITMO7BGVTC5MGDY8VXCXPX1514VP31BIHOWLTM7R4ALHWBTYMW4EXMF87YDU6T1Z3Z3VRNIDLH0N3ZNOT215W761ZEXZRQEWY0629YPOI7CUS9LD0I7AZ1QV41J0F0WGZ34G9CHL6W2IOTZOUK76GV4QUEI97VH6SAG8PRTLE73D8J8ISLL0DHDUQH42YSN' where id=54; -update noar tt set v0='RXITDSJRNHA6P2EMDU7N0ELY7XBRKYUNBBOLGP1TJU7QPKWEOYIW33WN7F5CYBOME1GP8R5B8MQ3X54FKUJB3ISVW3KHQ0LHV3KWA0T4DXFGFEMKY13D1Y2JQMNA06XOK6DJUVPHV66J8JYKWVFI14ELD4BQSHIJ8YWCID9RJJXMKEQPK2QN6CUS75Y6JEW7ZM15DGKJ58UEC6VP0XFX76MYHL3JMSCUE74T1VCP7MH1LAOD17PE0UZ5XWQC3O9LT' where id=55; -update noar ti set v0='RXITDSJRNHA6P2EMDU7N0ELY7XBRKYUNBBOLGP1TJU7QPKWEOYIW33WN7F5CYBOME1GP8R5B8MQ3X54FKUJB3ISVW3KHQ0LHV3KWA0T4DXFGFEMKY13D1Y2JQMNA06XOK6DJUVPHV66J8JYKWVFI14ELD4BQSHIJ8YWCID9RJJXMKEQPK2QN6CUS75Y6JEW7ZM15DGKJ58UEC6VP0XFX76MYHL3JMSCUE74T1VCP7MH1LAOD17PE0UZ5XWQC3O9LT' where id=55; -update noar tt set v1='74IZ0QHEDY8EQQ2A6LQLXXZS81RQS32X36LLNHJS56QOGZAQUL1G05JU1UE41JICQCC43LC4YV9COGWQMYH9MB18MI7RYJLTJQ0BVZ3U8SHPORLQSB4DRJ2OYD9S0K0XD2O9F6K0IALIXM1PUIJC55G3JKI7FXJHVG88AL28WCXUT1COLUTSQBO4N7KVA0JFTSPGKT2MD7ETMYLVTOCOKT1M57L85OBX620OOZ8HAV60OW9SCWMGG3027NF77TX7G' where id=55; -update noar ti set v1='74IZ0QHEDY8EQQ2A6LQLXXZS81RQS32X36LLNHJS56QOGZAQUL1G05JU1UE41JICQCC43LC4YV9COGWQMYH9MB18MI7RYJLTJQ0BVZ3U8SHPORLQSB4DRJ2OYD9S0K0XD2O9F6K0IALIXM1PUIJC55G3JKI7FXJHVG88AL28WCXUT1COLUTSQBO4N7KVA0JFTSPGKT2MD7ETMYLVTOCOKT1M57L85OBX620OOZ8HAV60OW9SCWMGG3027NF77TX7G' where id=55; -update noar tt set v2='QWSM80WQLJQSVD81V9ZZ80UIDKNPZCYZGTPSNIP9P4KABUDS0P9Y2EM5RMPP8X5NNW8LQ81NE3A9B2O3KIAOYBUFTSFFCBBY8HOO3XGY57WDD5L9439BUXBZZ0EWLUU2U9B4LEF35WUA4AMIPWG8LRHQOD4S50NUSKI5CXOBFQGDH4V0W1JFHY58C5W2KO584GTDN1QENOAR59DWXB8A1DJ28MO4D4SYSOV5X2GU57NX6WO3U2SFGEY7B98FW6PVZ' where id=55; -update noar ti set v2='QWSM80WQLJQSVD81V9ZZ80UIDKNPZCYZGTPSNIP9P4KABUDS0P9Y2EM5RMPP8X5NNW8LQ81NE3A9B2O3KIAOYBUFTSFFCBBY8HOO3XGY57WDD5L9439BUXBZZ0EWLUU2U9B4LEF35WUA4AMIPWG8LRHQOD4S50NUSKI5CXOBFQGDH4V0W1JFHY58C5W2KO584GTDN1QENOAR59DWXB8A1DJ28MO4D4SYSOV5X2GU57NX6WO3U2SFGEY7B98FW6PVZ' where id=55; -update noar tt set v3='4QCW3GZV2PRFCJFL1BNHE4BIEYWLTO32S0XJ803GNHMRQSUEVSWW419I7NR8O2H0MCO0S21BUAB4P6ZQ224QSJSJ7KTP8OB00AQSDAYRDCM5BKVVQTYBJN7LC0VY65YOEWMTZJSLERWV5UIZC5MBI5B77GLDZS1OLHRY2829LV6NH4P2VD955NWLO5U15DZSZP4Z23AHUOULYIJODPR6I558JLJ1O9VHJVYDX8S2BNHKEOYZION1XQ9ZCV2IKBJ0R' where id=55; -update noar ti set v3='4QCW3GZV2PRFCJFL1BNHE4BIEYWLTO32S0XJ803GNHMRQSUEVSWW419I7NR8O2H0MCO0S21BUAB4P6ZQ224QSJSJ7KTP8OB00AQSDAYRDCM5BKVVQTYBJN7LC0VY65YOEWMTZJSLERWV5UIZC5MBI5B77GLDZS1OLHRY2829LV6NH4P2VD955NWLO5U15DZSZP4Z23AHUOULYIJODPR6I558JLJ1O9VHJVYDX8S2BNHKEOYZION1XQ9ZCV2IKBJ0R' where id=55; -update noar tt set v0='RBC709DFZFIRQVPQJUA4NC5DUQ7JLTSUL7LP4OT32OGWIVEI12O9CTVFKY0T77DACEHDNJ2IRIJ224Q6HXZ6GDT0ZBQ9FI1C82SSZ3J4YECVL17SOUBT5EMUPU4YV5EKRFY27MJ7E97DCWP5BBVPWVFLZQ2HAT1SVJKGWBD6LN1BX7XBJJBDXKKNNFG1X81EUYX5LKB62RW666325USBGASVFAYQ89QV64PBH9KXZB396MVQPFM7KL428798YLRM8' where id=56; -update noar ti set v0='RBC709DFZFIRQVPQJUA4NC5DUQ7JLTSUL7LP4OT32OGWIVEI12O9CTVFKY0T77DACEHDNJ2IRIJ224Q6HXZ6GDT0ZBQ9FI1C82SSZ3J4YECVL17SOUBT5EMUPU4YV5EKRFY27MJ7E97DCWP5BBVPWVFLZQ2HAT1SVJKGWBD6LN1BX7XBJJBDXKKNNFG1X81EUYX5LKB62RW666325USBGASVFAYQ89QV64PBH9KXZB396MVQPFM7KL428798YLRM8' where id=56; -update noar tt set v1='HO20SZKYX0NH9STYSSEAXDFIS2KLNAHQGEGW16T89UVZHCA1EF8V6G6MYFASOURYNS59PMGVETIY8P5QAQYZS3K6P7KVJP4EMOZ9Y2OGAABTZWH3GJ6HSDDAND5L74BW3BYPZ2J0QZ6B2HP3G807B8NJ95U2YUAVELZ9PDG7G6X2YMZUHFPLGYNGNM4JA9LKTZ2PTNY3W31I7ZBZBIVFDMQPYLE9BE6NEGDG3OJD1I8ORZ0UYVK6XLQLKBMKGD5ZL' where id=56; -update noar ti set v1='HO20SZKYX0NH9STYSSEAXDFIS2KLNAHQGEGW16T89UVZHCA1EF8V6G6MYFASOURYNS59PMGVETIY8P5QAQYZS3K6P7KVJP4EMOZ9Y2OGAABTZWH3GJ6HSDDAND5L74BW3BYPZ2J0QZ6B2HP3G807B8NJ95U2YUAVELZ9PDG7G6X2YMZUHFPLGYNGNM4JA9LKTZ2PTNY3W31I7ZBZBIVFDMQPYLE9BE6NEGDG3OJD1I8ORZ0UYVK6XLQLKBMKGD5ZL' where id=56; -update noar tt set v2='OKTKCF4MVKK4NY2RXL3V7W3R7IR9J9LR9W6C6UKFQL7RNGPZNCI2RCC7XR46FXPDXRYQRSHQORE96WQC369XKDWSD47TM3IJDMYEDEDZAH3T6H8VO62NV885GRCOSL9SDNLRSUQD4ZNPMOGQUGR2KWPFX947B2LETD9ARJEWDIZW4IQU730J5EQ3NFCQ1OJ621VV8O4R58WZ2UNNEUE4S32YBELKJEJQLI6E63PRIAPHFBAT6P5A4MBNMK6U3HVJ4' where id=56; -update noar ti set v2='OKTKCF4MVKK4NY2RXL3V7W3R7IR9J9LR9W6C6UKFQL7RNGPZNCI2RCC7XR46FXPDXRYQRSHQORE96WQC369XKDWSD47TM3IJDMYEDEDZAH3T6H8VO62NV885GRCOSL9SDNLRSUQD4ZNPMOGQUGR2KWPFX947B2LETD9ARJEWDIZW4IQU730J5EQ3NFCQ1OJ621VV8O4R58WZ2UNNEUE4S32YBELKJEJQLI6E63PRIAPHFBAT6P5A4MBNMK6U3HVJ4' where id=56; -update noar tt set v3='A3TR0403QJMOPNQ7N9ETM6GMAAXH0X05S3GZ7OY0K2JUHRYUFVQ4AGOIYNZGVEE7KO90CWTUBWKPHZLP6RMSGV46HCZMY5AD2B5QNP5R3K0MT5PX5ZMQZ0ONOFP00JY2E7BUY3U4J6TF4W1P7OJ46EHAN3IWQQ336RUJ7OCJWAWW1WXKYNS9QMFN0I1FSQU2LFD15S4JL2UWH7D34M2R6DJGKPOWC6T1QNKH1CP3PA43SSS5KNMECHAEQ0Y2STGRS' where id=56; -update noar ti set v3='A3TR0403QJMOPNQ7N9ETM6GMAAXH0X05S3GZ7OY0K2JUHRYUFVQ4AGOIYNZGVEE7KO90CWTUBWKPHZLP6RMSGV46HCZMY5AD2B5QNP5R3K0MT5PX5ZMQZ0ONOFP00JY2E7BUY3U4J6TF4W1P7OJ46EHAN3IWQQ336RUJ7OCJWAWW1WXKYNS9QMFN0I1FSQU2LFD15S4JL2UWH7D34M2R6DJGKPOWC6T1QNKH1CP3PA43SSS5KNMECHAEQ0Y2STGRS' where id=56; -update noar tt set v0='K15RP1F2RBWKQYVW3YPN70EJZJOQ5UJ4ETF3RUR8DWERQB9YWKZWCET3XPRCQEXB4NQ14NB8L7GPFSSZX2P6VBLMJRK0KM81ZCJXZXK51QAH930SLZ9GGMKU6JCQVFLOD9VK7YLZIDNJWY4UXXNXCU8SVWF1TTZMD2INR689AXJ71UYU5AFS07NVK4590P7CBOXMPYKJ1FQGVNTQYUTDVIX73ATXF3F0QKBGB725O4X0YGNT53F3TI2J256R3UTPS' where id=57; -update noar ti set v0='K15RP1F2RBWKQYVW3YPN70EJZJOQ5UJ4ETF3RUR8DWERQB9YWKZWCET3XPRCQEXB4NQ14NB8L7GPFSSZX2P6VBLMJRK0KM81ZCJXZXK51QAH930SLZ9GGMKU6JCQVFLOD9VK7YLZIDNJWY4UXXNXCU8SVWF1TTZMD2INR689AXJ71UYU5AFS07NVK4590P7CBOXMPYKJ1FQGVNTQYUTDVIX73ATXF3F0QKBGB725O4X0YGNT53F3TI2J256R3UTPS' where id=57; -update noar tt set v1='EB8LKTZO0149MRXMX2V2SPEC9G1N2R5LHKL1XNSEJ3W4R626KV56I4HE33S08KZQLWCF89GGW28WD3QJIIOE52D9WUKJVLQDGU8JWC9H5JVJFQLYKA5GIP11HHGF9JP5JXTIWWCWM169PIIQY89HADZG0FB4PEC86ULCD4Z8N75YCACUXQWYR8QP6QJ5T5RN7RDQIIDIH78T90H7SFJVY4C8N9FL19IJ1QYBS75QFFN58MBKSPJWNYNCYRUZXKZJT' where id=57; -update noar ti set v1='EB8LKTZO0149MRXMX2V2SPEC9G1N2R5LHKL1XNSEJ3W4R626KV56I4HE33S08KZQLWCF89GGW28WD3QJIIOE52D9WUKJVLQDGU8JWC9H5JVJFQLYKA5GIP11HHGF9JP5JXTIWWCWM169PIIQY89HADZG0FB4PEC86ULCD4Z8N75YCACUXQWYR8QP6QJ5T5RN7RDQIIDIH78T90H7SFJVY4C8N9FL19IJ1QYBS75QFFN58MBKSPJWNYNCYRUZXKZJT' where id=57; -update noar tt set v2='R88IS6E8I6IU48YQ9NV9QPD6T0CSS7WNRV6YCM5GYWCROXB5A3V9RPK4PJYR9R9K9WGG234AF7ICPVMNRBVSS1LN83JO7FQK85GBZSKYJO688XJQDDRXOVXA2YD7XUEE8TSJ6366QIA4C4YY00OB9Q13G4A5YGUBFDF286ENE4HHKWGII2AEBFPOTQHNHSKJ80UBB2PC6P2MBPGCN8D56LF4TL40D9V47BZMR06324ZRNM2NR0OLSHWV2U57YQD9G' where id=57; -update noar ti set v2='R88IS6E8I6IU48YQ9NV9QPD6T0CSS7WNRV6YCM5GYWCROXB5A3V9RPK4PJYR9R9K9WGG234AF7ICPVMNRBVSS1LN83JO7FQK85GBZSKYJO688XJQDDRXOVXA2YD7XUEE8TSJ6366QIA4C4YY00OB9Q13G4A5YGUBFDF286ENE4HHKWGII2AEBFPOTQHNHSKJ80UBB2PC6P2MBPGCN8D56LF4TL40D9V47BZMR06324ZRNM2NR0OLSHWV2U57YQD9G' where id=57; -update noar tt set v3='QF45GZSFEVMJP97CNQ88Y3QB37GBAUCY3GU5FCT0SPVXY5BRV2ZYLBEX78TU92T0UUA4W0G9RPQZU1K5BX16430S742JKFN4RSVMAZXZBZM5VN6XL4OAWFP5V8J4KEZNNU3I34C1JSS0S3B3K9YE2J44LH2WFQKFRKDARIG2BLGJCD1K5HJ2RWG4TUAFGR84EOUMKT2G6NAQCBR7ZFW3EW15TTWAEVXH9BE2PWBOTN17CKVI3LFP3VZ22V33ZXX90' where id=57; -update noar ti set v3='QF45GZSFEVMJP97CNQ88Y3QB37GBAUCY3GU5FCT0SPVXY5BRV2ZYLBEX78TU92T0UUA4W0G9RPQZU1K5BX16430S742JKFN4RSVMAZXZBZM5VN6XL4OAWFP5V8J4KEZNNU3I34C1JSS0S3B3K9YE2J44LH2WFQKFRKDARIG2BLGJCD1K5HJ2RWG4TUAFGR84EOUMKT2G6NAQCBR7ZFW3EW15TTWAEVXH9BE2PWBOTN17CKVI3LFP3VZ22V33ZXX90' where id=57; -update noar tt set v0='QZ1JZYIAK1ZMSVJ6BA4RZQBAOH4ULI4GFI8DLQLVT0HSYI823QC0AZIYW3XRB6V3MLKHKD20VQ532FZGGZNO7X3NM43NFYDF7IKHULTZFIVSIVR9XXXSNA79C8JLJN8UZAKQ4M7FGCSS3DWPJIXWJMO0BVSM4CPV18LRLEBP5W8TWWJ9JJ1TBG7V20JXE373LL3M97U25RV256RLO7CW0DQI3LYRWAHX42ZXW196N42WPLTD0DZFJJPR5E3477F6M' where id=58; -update noar ti set v0='QZ1JZYIAK1ZMSVJ6BA4RZQBAOH4ULI4GFI8DLQLVT0HSYI823QC0AZIYW3XRB6V3MLKHKD20VQ532FZGGZNO7X3NM43NFYDF7IKHULTZFIVSIVR9XXXSNA79C8JLJN8UZAKQ4M7FGCSS3DWPJIXWJMO0BVSM4CPV18LRLEBP5W8TWWJ9JJ1TBG7V20JXE373LL3M97U25RV256RLO7CW0DQI3LYRWAHX42ZXW196N42WPLTD0DZFJJPR5E3477F6M' where id=58; -update noar tt set v1='ED5VEUPZ5V07RKUURO4MU47D6S19HO4KBP6Z4E4QH1QEMQ88B43093HGPGLNRJRHPNKZTY7LH0DRQJT5Y0VTZXHERE2K4HFCPXNRBGVZ7W7HVZUJKDPBIA1T5RFIEKCDHARZB849AODU2IXNL2J8SAZKJBG48SX8RQ43RT2ZVGZJGWS5BMICTSP5YORP07PFZZX4UBLT36AJJVOP3J1DHCJ2OLZWJ24P56XSA5ZFS2QP93VUUIW9UJK5HGOPYA09C' where id=58; -update noar ti set v1='ED5VEUPZ5V07RKUURO4MU47D6S19HO4KBP6Z4E4QH1QEMQ88B43093HGPGLNRJRHPNKZTY7LH0DRQJT5Y0VTZXHERE2K4HFCPXNRBGVZ7W7HVZUJKDPBIA1T5RFIEKCDHARZB849AODU2IXNL2J8SAZKJBG48SX8RQ43RT2ZVGZJGWS5BMICTSP5YORP07PFZZX4UBLT36AJJVOP3J1DHCJ2OLZWJ24P56XSA5ZFS2QP93VUUIW9UJK5HGOPYA09C' where id=58; -update noar tt set v2='Y6A1TF3MO7TAMRXSUIAXR2SC9T088BX8RZ5OD8SC2OPX0P9ZFD1DR9WCB9R3QMI3F9OSZF7PJU8VC8D6BSAA5NX9HIIOY6ZKWGG0LLHNHYHUIUBT3FHJ4M7HO51243WZNPRRU6GSFL0EHNX2FUMXJ1KWCO22U1YA46F42PDE1Z4RU05XNF0GR2I5XN8DNWPF1L7XCUVTF1DDXON2MS16V43HFK3KDD0I1ZPD53ZXHYHLAMSWOADUX1K6RH7KNOBJ0' where id=58; -update noar ti set v2='Y6A1TF3MO7TAMRXSUIAXR2SC9T088BX8RZ5OD8SC2OPX0P9ZFD1DR9WCB9R3QMI3F9OSZF7PJU8VC8D6BSAA5NX9HIIOY6ZKWGG0LLHNHYHUIUBT3FHJ4M7HO51243WZNPRRU6GSFL0EHNX2FUMXJ1KWCO22U1YA46F42PDE1Z4RU05XNF0GR2I5XN8DNWPF1L7XCUVTF1DDXON2MS16V43HFK3KDD0I1ZPD53ZXHYHLAMSWOADUX1K6RH7KNOBJ0' where id=58; -update noar tt set v3='VBIEKOIR2GDLKHZQVYIRRO3XUTNIPEPDGKYY5P4UNRZO9LS0AF8M5O2YMIL2247EWPJ88FY4PFP572IWGCWOWI6WHFYGXNIDOH4O4N05W3889J9HAW6ZQMG6BNKCM2NJ0VVG0KCKWWNPQT6FDZF1WXTCI1WYV5MUJ8ZW661HCFG7SQCO4SKLFI9TKBUXIA8F257ISRY07B78A9A321WG63JHJCTUJH7DXAW0L8A8HFLU7AOCU1GJ38TCD7GACX7PP' where id=58; -update noar ti set v3='VBIEKOIR2GDLKHZQVYIRRO3XUTNIPEPDGKYY5P4UNRZO9LS0AF8M5O2YMIL2247EWPJ88FY4PFP572IWGCWOWI6WHFYGXNIDOH4O4N05W3889J9HAW6ZQMG6BNKCM2NJ0VVG0KCKWWNPQT6FDZF1WXTCI1WYV5MUJ8ZW661HCFG7SQCO4SKLFI9TKBUXIA8F257ISRY07B78A9A321WG63JHJCTUJH7DXAW0L8A8HFLU7AOCU1GJ38TCD7GACX7PP' where id=58; -update noar tt set v0='2BUNCDFLTKP29WTPYHUAP60FHR16VMVZYB5L02EKAE1BCO6EE4ED6NO8BCPC8CZWMH21BTV5IX774YUE4Q3BF94HOP6NPLK42UQG56HQ7GQ9HUQRK43TXIN40G8XNEPS7YMTNFISCFE0MY65HAQ2R3C6VRJ5NOF90A6OM7JMHBJZ9Y3RVMUYEM5KH1AYPW8FSAUGNMJTYAX0IISIZ4CROXG2INWTCYWIZLI2XKK3BQQPX57NS3F12NHC05STLOB6W' where id=59; -update noar ti set v0='2BUNCDFLTKP29WTPYHUAP60FHR16VMVZYB5L02EKAE1BCO6EE4ED6NO8BCPC8CZWMH21BTV5IX774YUE4Q3BF94HOP6NPLK42UQG56HQ7GQ9HUQRK43TXIN40G8XNEPS7YMTNFISCFE0MY65HAQ2R3C6VRJ5NOF90A6OM7JMHBJZ9Y3RVMUYEM5KH1AYPW8FSAUGNMJTYAX0IISIZ4CROXG2INWTCYWIZLI2XKK3BQQPX57NS3F12NHC05STLOB6W' where id=59; -update noar tt set v1='UHHMAEEGFD4SWCMUUNKK4ZQ212JPB5IAQ8V7CKUOX7S6PWS4BEWK22IO392JZ6CBDHR1CBZ8XE81W3LFJCYH8Q5GGN23F4Q7PMISWICRL7VVH7E6385G57ADOGI2I52M5AF5NKAEWM0G9GROPQOPBHHYL9VJWCY7RZIK1K16WB6BNP3J0LKJ6XCE5I4N5VOKWN68AMFEFOOPE19RIS1WSDS5LXW2JUE0C9O2KNKXI75DU95MH8YKVHAVRV2SBIT94' where id=59; -update noar ti set v1='UHHMAEEGFD4SWCMUUNKK4ZQ212JPB5IAQ8V7CKUOX7S6PWS4BEWK22IO392JZ6CBDHR1CBZ8XE81W3LFJCYH8Q5GGN23F4Q7PMISWICRL7VVH7E6385G57ADOGI2I52M5AF5NKAEWM0G9GROPQOPBHHYL9VJWCY7RZIK1K16WB6BNP3J0LKJ6XCE5I4N5VOKWN68AMFEFOOPE19RIS1WSDS5LXW2JUE0C9O2KNKXI75DU95MH8YKVHAVRV2SBIT94' where id=59; -update noar tt set v2='OKLA2E4KX2PJANI9HK5YYMORWXX4ITMQR1AGPQB85O9ODQM959YOO995WEUBUXNWSRJIV3QJLAFLWETD4B59442RDVFEEWTSALJYHXJCBMPCY6JOYAM9KMZ1SSMVIFWU7ANPEEJBL6Q9WKPGA1ZVEOWQ2VOD0HO0QXYNAUDM56Y3FUM40FEK3762DL2UD0DPW1W6J0ME4YZS9RG9YGW0QEOQY8ABHB356TRCD04E34B8Q6E3DS73M06XRES8VI8S8' where id=59; -update noar ti set v2='OKLA2E4KX2PJANI9HK5YYMORWXX4ITMQR1AGPQB85O9ODQM959YOO995WEUBUXNWSRJIV3QJLAFLWETD4B59442RDVFEEWTSALJYHXJCBMPCY6JOYAM9KMZ1SSMVIFWU7ANPEEJBL6Q9WKPGA1ZVEOWQ2VOD0HO0QXYNAUDM56Y3FUM40FEK3762DL2UD0DPW1W6J0ME4YZS9RG9YGW0QEOQY8ABHB356TRCD04E34B8Q6E3DS73M06XRES8VI8S8' where id=59; -update noar tt set v3='K7U5XC1CN76Z4GE40A2GA4099RZATO348S8FG0VRGJ6YX4B2SOR7FOUXW0ZSY0K1QZX4TGXSN9IUAU3FR4F50FXI45KZGZZKBTTZ7S25NI6XPDLUUVWK1H1BRPE3B6TIEV50VLEYDJLO8897QVZWUAGA6SBP19Y3BT7T2VJJ4SE5XAO8PS5R77723YKPM9DBV6V6CFKTBY9Z9OMZQH220TMBMK5EREEHJEGCEANVHBCETCODDICXC8OZZEEE6ZXHV' where id=59; -update noar ti set v3='K7U5XC1CN76Z4GE40A2GA4099RZATO348S8FG0VRGJ6YX4B2SOR7FOUXW0ZSY0K1QZX4TGXSN9IUAU3FR4F50FXI45KZGZZKBTTZ7S25NI6XPDLUUVWK1H1BRPE3B6TIEV50VLEYDJLO8897QVZWUAGA6SBP19Y3BT7T2VJJ4SE5XAO8PS5R77723YKPM9DBV6V6CFKTBY9Z9OMZQH220TMBMK5EREEHJEGCEANVHBCETCODDICXC8OZZEEE6ZXHV' where id=59; -update noar tt set v0='3L36VFEBBYLBP80FP3EOCYZB85DMKVDPLHD1K7IEZAEVXJNP0HFSV7FNHROIAD69TUJZTYIRLJ68XSPXOKKKL83Q92CQN6FK7KY0YWQYQNVT98XMIN41EJIN2SDB8CMOLVLAA28WM3071GNXAEGFUGG1QST3OCCPV5Y7CTTPZWD6RE49QLPH5DP68U4FINLLJBH1LYJEGLUPVI2K319CJD1AQ213BC1ZK5ESYMD32TQLDIEZOB55DJGUCCMEGQ9NR' where id=60; -update noar ti set v0='3L36VFEBBYLBP80FP3EOCYZB85DMKVDPLHD1K7IEZAEVXJNP0HFSV7FNHROIAD69TUJZTYIRLJ68XSPXOKKKL83Q92CQN6FK7KY0YWQYQNVT98XMIN41EJIN2SDB8CMOLVLAA28WM3071GNXAEGFUGG1QST3OCCPV5Y7CTTPZWD6RE49QLPH5DP68U4FINLLJBH1LYJEGLUPVI2K319CJD1AQ213BC1ZK5ESYMD32TQLDIEZOB55DJGUCCMEGQ9NR' where id=60; -update noar tt set v1='9QEMVRKCXXE0XM5OVA3MFXIMZ7XLAGAGGQ5UBZLBJG157XO7QSAUW0STGIY0VBZNGJQG9BWOWINUH9KZTR9PFZZ9M3YPK44HCMF19H2EE5P4TILECACI0VTWNXCQBUZHO9MKOUCQEK1GGX01HZB6DGBSH2JI1ZHNLYFJFE7OYDNJVSYAPCYALSDVO9FR2PQ935G1GQ0UIWJ6MZA88JM69NRR6MDJVV6Q0SJVXYSATJSR3SF449KGO6EAKAXPKM1NA' where id=60; -update noar ti set v1='9QEMVRKCXXE0XM5OVA3MFXIMZ7XLAGAGGQ5UBZLBJG157XO7QSAUW0STGIY0VBZNGJQG9BWOWINUH9KZTR9PFZZ9M3YPK44HCMF19H2EE5P4TILECACI0VTWNXCQBUZHO9MKOUCQEK1GGX01HZB6DGBSH2JI1ZHNLYFJFE7OYDNJVSYAPCYALSDVO9FR2PQ935G1GQ0UIWJ6MZA88JM69NRR6MDJVV6Q0SJVXYSATJSR3SF449KGO6EAKAXPKM1NA' where id=60; -update noar tt set v2='AQHKV58DFWVFKHOVCOLNNAVNAIF00V7BF853WFJ4LL3KLMV77H5A0PIOLCRZJ64P1KEKCI7NSEE9990XIRUU6RN700DIT2E3BB0LMWDVVW0FT7QYVY62JYOIKT8BV5O0Z785BEBNQI3GYL5JS8INF5LYI75QWAE8PL8JQN51IA6XNARG7AFEHKKBU59KT8V7WU4VFEAZ03MUIY8JBLJDZB8DD0GBBYZJ8OJSYQTUL3SDT5HECE2I3M5ZHLSP9YAQB' where id=60; -update noar ti set v2='AQHKV58DFWVFKHOVCOLNNAVNAIF00V7BF853WFJ4LL3KLMV77H5A0PIOLCRZJ64P1KEKCI7NSEE9990XIRUU6RN700DIT2E3BB0LMWDVVW0FT7QYVY62JYOIKT8BV5O0Z785BEBNQI3GYL5JS8INF5LYI75QWAE8PL8JQN51IA6XNARG7AFEHKKBU59KT8V7WU4VFEAZ03MUIY8JBLJDZB8DD0GBBYZJ8OJSYQTUL3SDT5HECE2I3M5ZHLSP9YAQB' where id=60; -update noar tt set v3='IOGT7GFDG6PXPV2BRZV3UF9HPEZEM7O0Z08PO5P6GEGGI7DAS3RL4DE4XEMLKT9LK10TBMHCENBJ1QIKH0ZR9HENZIPQHNOJKOFNL0FG1XAB96U1E9B1QVUVX0IH5XFUCT5I2VX1FBBUY70KFKTLNYCLFDOF3WQUO4C41RBME6D270F5LRFRF7UJ82NQNJXPP2QJUN6VY1TPCPW2X0G7EKPCAF0BFYCGXNLS56NSWRF8Z0VHXPQ0P2UWTZPSW6BN6' where id=60; -update noar ti set v3='IOGT7GFDG6PXPV2BRZV3UF9HPEZEM7O0Z08PO5P6GEGGI7DAS3RL4DE4XEMLKT9LK10TBMHCENBJ1QIKH0ZR9HENZIPQHNOJKOFNL0FG1XAB96U1E9B1QVUVX0IH5XFUCT5I2VX1FBBUY70KFKTLNYCLFDOF3WQUO4C41RBME6D270F5LRFRF7UJ82NQNJXPP2QJUN6VY1TPCPW2X0G7EKPCAF0BFYCGXNLS56NSWRF8Z0VHXPQ0P2UWTZPSW6BN6' where id=60; -update noar tt set v0='CUPJV9P6FPRTVUW5W7Z3PQ3H86POO3DAAFLXWT8G3OA2D9V36I2V33OG6Q4ADFO4B9FPKV1946Y5GHT947M6OB6OL7CU5EMHZW05XLCBVOLKMDGYA4DDVB83XIJB3KRBOUEVXM64FSU2WM6IZQR6LH8ZOCYHHO82GG1ZKSSF5L2VK58Y7LJR90LFBZE05TOZ712E6RNM0XTVSYAHMDELWT8E0ANMTVYVRRVU1K4QG7XT3B6CBUA37WP3SV8Y3SUSQ' where id=61; -update noar ti set v0='CUPJV9P6FPRTVUW5W7Z3PQ3H86POO3DAAFLXWT8G3OA2D9V36I2V33OG6Q4ADFO4B9FPKV1946Y5GHT947M6OB6OL7CU5EMHZW05XLCBVOLKMDGYA4DDVB83XIJB3KRBOUEVXM64FSU2WM6IZQR6LH8ZOCYHHO82GG1ZKSSF5L2VK58Y7LJR90LFBZE05TOZ712E6RNM0XTVSYAHMDELWT8E0ANMTVYVRRVU1K4QG7XT3B6CBUA37WP3SV8Y3SUSQ' where id=61; -update noar tt set v1='ML3GJJJWXM2XPVNS2URI5VF0USCVM6DGOS6Y5ALIHKZUO48WYX9DXUR2L7FFJ4BQANG87GSJ9BE9MCP7TW0CZXCDYJL7O41EIJ70XJQ7TUJ2PSV1XR7K3DQ1QWP0XZ5PH8D4966BO1OBUFHW663KC9EVPHR9UO3XOVYHL0KC0KPJKSCVXW1D3LMTHD3FSKQZJUSSRYX3X8TGH0N6A9HEBRJ0JBZHRTF23SQL3UMSUBFXJBNUDNIL3BXRSO3OUG2JF' where id=61; -update noar ti set v1='ML3GJJJWXM2XPVNS2URI5VF0USCVM6DGOS6Y5ALIHKZUO48WYX9DXUR2L7FFJ4BQANG87GSJ9BE9MCP7TW0CZXCDYJL7O41EIJ70XJQ7TUJ2PSV1XR7K3DQ1QWP0XZ5PH8D4966BO1OBUFHW663KC9EVPHR9UO3XOVYHL0KC0KPJKSCVXW1D3LMTHD3FSKQZJUSSRYX3X8TGH0N6A9HEBRJ0JBZHRTF23SQL3UMSUBFXJBNUDNIL3BXRSO3OUG2JF' where id=61; -update noar tt set v2='CTSG7S8PW8XRJM9T0F136U65K3TF84P63SOQBR5YVK4UK6HP2SC1BF2M0GWUVDHZ6XZRJI8IH6U66XIKS82S9QHB843EL8O2IY30JJX6T3PPEU1OY4V35D2TMTO3R7Z7R7J284B4FISLCN28TPCLZ2EES09859FQFHDBKIOD2MW3XX8YGVF2J2LLM2GJ3U4IWZ6XXWZ0G4CPNHGLLWJQYD2J3K88OZ2EGFZYZDLSKV146M6889Q9VID3214SLP3I2' where id=61; -update noar ti set v2='CTSG7S8PW8XRJM9T0F136U65K3TF84P63SOQBR5YVK4UK6HP2SC1BF2M0GWUVDHZ6XZRJI8IH6U66XIKS82S9QHB843EL8O2IY30JJX6T3PPEU1OY4V35D2TMTO3R7Z7R7J284B4FISLCN28TPCLZ2EES09859FQFHDBKIOD2MW3XX8YGVF2J2LLM2GJ3U4IWZ6XXWZ0G4CPNHGLLWJQYD2J3K88OZ2EGFZYZDLSKV146M6889Q9VID3214SLP3I2' where id=61; -update noar tt set v3='OTCD82Z8KQNNWAW8XFO494KN6F6Z3HGY4KGHTBHESAIM217L4C36C3WKZB16QUN2LXNK30TU1RTC63LZMO5PQZ7BFCF7ZWI0PDQKMF6NA5I60FI25WKH6PNUSB9DOZJBUCZT5RWELOR50T09S6SGTETALGAO8IJ13H4V51Z11KIXJ796S9M8BO20PO8DV2BUX0XW8UFG3GBYR84DKO6QQCLTLH7JA335NZWZ101LF681IGRDCB1QIMJPN990WBYEM' where id=61; -update noar ti set v3='OTCD82Z8KQNNWAW8XFO494KN6F6Z3HGY4KGHTBHESAIM217L4C36C3WKZB16QUN2LXNK30TU1RTC63LZMO5PQZ7BFCF7ZWI0PDQKMF6NA5I60FI25WKH6PNUSB9DOZJBUCZT5RWELOR50T09S6SGTETALGAO8IJ13H4V51Z11KIXJ796S9M8BO20PO8DV2BUX0XW8UFG3GBYR84DKO6QQCLTLH7JA335NZWZ101LF681IGRDCB1QIMJPN990WBYEM' where id=61; -update noar tt set v0='ODWRS3H6FUUFGX3LEYCXMJ1TOIM6ELTEO1Y0YLRP0VQ0A2G04J3OUBFG3OUX174CONP5LON81GQPXQ7M8BA0ZI66KJYRCRB8URD0YDT2RPDIJBEL2I54Y0DE98VCSRVQQ35KPR2S7BUSFWN64V8I0WMA8H3ZNKDTRBYBLRM6QX3DHTKDFAYAVS4N8DT40WD0V0Y88GNM1L6L89G51EIYKTYRAXBJN477YC0SD45LKU989QEQ3MP7Q5YBZ9PSHBJJ5' where id=62; -update noar ti set v0='ODWRS3H6FUUFGX3LEYCXMJ1TOIM6ELTEO1Y0YLRP0VQ0A2G04J3OUBFG3OUX174CONP5LON81GQPXQ7M8BA0ZI66KJYRCRB8URD0YDT2RPDIJBEL2I54Y0DE98VCSRVQQ35KPR2S7BUSFWN64V8I0WMA8H3ZNKDTRBYBLRM6QX3DHTKDFAYAVS4N8DT40WD0V0Y88GNM1L6L89G51EIYKTYRAXBJN477YC0SD45LKU989QEQ3MP7Q5YBZ9PSHBJJ5' where id=62; -update noar tt set v1='2DYYELS8FMNEX4DC9I8FN6EG4HC86Q1RFSTTZH3UQRJR2AHCHPSZ645MRHDR89LOJYDQKIO45J7RYV7VOLR2IX9TLMAD965LA1Y1NR8BTGD32IW4B0SOFVNXMDUNEBXACXGEAXBILIFKWTW8CWKA6XDGR3TZEJKVBXSV8P1ARHR985QDMZBEVQ3371ZTK0KUYRNKS1SD1FYVTXDHMJWBE6G2HESM2MPRD22MT1D6QMOSTQA073BRUKNY5K0HVYI22' where id=62; -update noar ti set v1='2DYYELS8FMNEX4DC9I8FN6EG4HC86Q1RFSTTZH3UQRJR2AHCHPSZ645MRHDR89LOJYDQKIO45J7RYV7VOLR2IX9TLMAD965LA1Y1NR8BTGD32IW4B0SOFVNXMDUNEBXACXGEAXBILIFKWTW8CWKA6XDGR3TZEJKVBXSV8P1ARHR985QDMZBEVQ3371ZTK0KUYRNKS1SD1FYVTXDHMJWBE6G2HESM2MPRD22MT1D6QMOSTQA073BRUKNY5K0HVYI22' where id=62; -update noar tt set v2='GLJJB52XUKLG3Y8WMVXKIXNFQ33RX1F6PVQCTZLJJMK853CRWU8NTY3HGDKH8J5ZNY99R5Y6XPL5CA4Z56H30DDVE3V5GIPXTNQ78AUKLLEUD80UTEF69GNF7QDW0SR9O8PVTXODZXTWSZ3LSMJ7ODHLQ7JFOHKOIZ5UYGAZJ6CYBEMA70JQHWOOVFLU0E053Y07X1ZP7B412G62CWO1K010G9HQVU4SYXMIQZHNHK05HNW4ONCU0WLYCJ4RJMYDD' where id=62; -update noar ti set v2='GLJJB52XUKLG3Y8WMVXKIXNFQ33RX1F6PVQCTZLJJMK853CRWU8NTY3HGDKH8J5ZNY99R5Y6XPL5CA4Z56H30DDVE3V5GIPXTNQ78AUKLLEUD80UTEF69GNF7QDW0SR9O8PVTXODZXTWSZ3LSMJ7ODHLQ7JFOHKOIZ5UYGAZJ6CYBEMA70JQHWOOVFLU0E053Y07X1ZP7B412G62CWO1K010G9HQVU4SYXMIQZHNHK05HNW4ONCU0WLYCJ4RJMYDD' where id=62; -update noar tt set v3='TC910VQJFAGVOMTWOQVY7JP4Y9TZD06CN1VK7WB1V7LMNZQB4W1FCDLX4OG0BHG8MBQZ3YTQ29SRUDAOTRTG0NX701T90O92RDV8JSRR96RFG3B9YB7PBV3XH6JAO5UF0YNJIPVL9B2NEE9VCSVO5UN2YEK2OCATQKZD1NBZOEA2JPZPX0A8PJL2IRX8CJX3TDW2H2ZH1NNJL1ZSZRP9N2XLM3PRG1ABGMNQDOJ0HXDZ5XT0H2H2BK32BH7Q4ODQ2' where id=62; -update noar ti set v3='TC910VQJFAGVOMTWOQVY7JP4Y9TZD06CN1VK7WB1V7LMNZQB4W1FCDLX4OG0BHG8MBQZ3YTQ29SRUDAOTRTG0NX701T90O92RDV8JSRR96RFG3B9YB7PBV3XH6JAO5UF0YNJIPVL9B2NEE9VCSVO5UN2YEK2OCATQKZD1NBZOEA2JPZPX0A8PJL2IRX8CJX3TDW2H2ZH1NNJL1ZSZRP9N2XLM3PRG1ABGMNQDOJ0HXDZ5XT0H2H2BK32BH7Q4ODQ2' where id=62; -update noar tt set v0='DL1FITJMPASMD3XBWNW2PACFUUUPPEA5EICC3ZEF71UJ87CQS2LSADNBBCKFBHIEL9P5AJXPKM4L5P27SH7MHBUDV8ANCNFVO95LOEOZOPWJNP54TZ2YYU7TEWTC0CNKNQAJBC9J3P8PRN2BW9Q5ETTSP5TTCJGOM021U8EFITHTUJOJSH64G870C0ZQFYBJIL45J0O8RTGO3HFUUHC6RUHOQL1DM6JX88QSLRO2M9S1SRR6I5P0QXWBMCLOY88VA' where id=63; -update noar ti set v0='DL1FITJMPASMD3XBWNW2PACFUUUPPEA5EICC3ZEF71UJ87CQS2LSADNBBCKFBHIEL9P5AJXPKM4L5P27SH7MHBUDV8ANCNFVO95LOEOZOPWJNP54TZ2YYU7TEWTC0CNKNQAJBC9J3P8PRN2BW9Q5ETTSP5TTCJGOM021U8EFITHTUJOJSH64G870C0ZQFYBJIL45J0O8RTGO3HFUUHC6RUHOQL1DM6JX88QSLRO2M9S1SRR6I5P0QXWBMCLOY88VA' where id=63; -update noar tt set v1='5NFIJNOT6J4SAL4V9QIX4NQJNMOAB4OZFRMLCQB1NQ38IZU3KUW2SQ0KIN5C2AIOTP5C1Z3CNFOESLDR56VT1I1PYETWL3O7WLG770IKWWW6DH5785H6K47HGCZRU0HQYGEDV94NHNEFNIH2G1I8R7JQLSK1XAPH8N04P2GOJM7LETLFT53WTDDP7QC0PV5MPAMZTLL7NP7J1ARKKJWS8FV5EJG9BR59ODPUX6MN2EIPXTAEU38VC5QF4KJOR6D2B' where id=63; -update noar ti set v1='5NFIJNOT6J4SAL4V9QIX4NQJNMOAB4OZFRMLCQB1NQ38IZU3KUW2SQ0KIN5C2AIOTP5C1Z3CNFOESLDR56VT1I1PYETWL3O7WLG770IKWWW6DH5785H6K47HGCZRU0HQYGEDV94NHNEFNIH2G1I8R7JQLSK1XAPH8N04P2GOJM7LETLFT53WTDDP7QC0PV5MPAMZTLL7NP7J1ARKKJWS8FV5EJG9BR59ODPUX6MN2EIPXTAEU38VC5QF4KJOR6D2B' where id=63; -update noar tt set v2='9FKCHID9HK4TT8O6V1OGJQISQAUL6B9MV2RIL83YDH6D7VYFEA3CGQX0WYN5LCNTJ8AT5PFE20NPC6LDHHOGR9O3HTMS1EKKDMANP3Z0FVX0V1HPO1QAC3P66TS26XKGE3EPUP9QIM6HLJSRJL2L64Q5BYKWLAPDTFOZCYPDOOYGPYUFRXV9RELH3LJ40HPI81VOQ1CHRT39RBRBJ0A693QVHK5JZEG9ARA9JCSJLN76Q6DNOSMZR492QUQK8IX46' where id=63; -update noar ti set v2='9FKCHID9HK4TT8O6V1OGJQISQAUL6B9MV2RIL83YDH6D7VYFEA3CGQX0WYN5LCNTJ8AT5PFE20NPC6LDHHOGR9O3HTMS1EKKDMANP3Z0FVX0V1HPO1QAC3P66TS26XKGE3EPUP9QIM6HLJSRJL2L64Q5BYKWLAPDTFOZCYPDOOYGPYUFRXV9RELH3LJ40HPI81VOQ1CHRT39RBRBJ0A693QVHK5JZEG9ARA9JCSJLN76Q6DNOSMZR492QUQK8IX46' where id=63; -update noar tt set v3='DA6781X684GEW2RB5V7XXBKI4LD4UOUKPNU42LJCU8KK0LGIL7IS65GGOBDRNT3V0W80EZH11OKWPAMT8VY4C0HPSEYQNZMM74INJ3PMGLAI1L579NXQKBZX5G902PO8XINDCDYXP9XPG3M2XFP33LAEU2B6IY26LFAU2UK8KW9MQVKK5PBS9GP673ZFE9T8JAKVDBW3FEAQC6D07ATX3KHOT7BEUTXVT0WNGBXQJU99UR7GUAX13B83ZAMJWU0LJ' where id=63; -update noar ti set v3='DA6781X684GEW2RB5V7XXBKI4LD4UOUKPNU42LJCU8KK0LGIL7IS65GGOBDRNT3V0W80EZH11OKWPAMT8VY4C0HPSEYQNZMM74INJ3PMGLAI1L579NXQKBZX5G902PO8XINDCDYXP9XPG3M2XFP33LAEU2B6IY26LFAU2UK8KW9MQVKK5PBS9GP673ZFE9T8JAKVDBW3FEAQC6D07ATX3KHOT7BEUTXVT0WNGBXQJU99UR7GUAX13B83ZAMJWU0LJ' where id=63; -update noar tt set v0='RF0MMWZG6S8ED38OM41VKK0BTO58W17VEBQ4C8LYSTH4GDMPCUBB2ECZ5QJ61O83UV9SMHSXVVMJFFH5Z9QDF0B6B6EEPVXFMMA5OJRZNQHNCGHGN9C9PEYQU113T4AAF9SO1ODLN6BC9XIO8NGPCZREZ0QLVCDZ07B14P4TMM7V71DBOJDAYOAVW0OZLADINSGNBCE4WL1AQHXBCYH9SPODME4PWMSCQ8ONS6LDXVB852AQBCIP2UT4SMABU44LG' where id=64; -update noar ti set v0='RF0MMWZG6S8ED38OM41VKK0BTO58W17VEBQ4C8LYSTH4GDMPCUBB2ECZ5QJ61O83UV9SMHSXVVMJFFH5Z9QDF0B6B6EEPVXFMMA5OJRZNQHNCGHGN9C9PEYQU113T4AAF9SO1ODLN6BC9XIO8NGPCZREZ0QLVCDZ07B14P4TMM7V71DBOJDAYOAVW0OZLADINSGNBCE4WL1AQHXBCYH9SPODME4PWMSCQ8ONS6LDXVB852AQBCIP2UT4SMABU44LG' where id=64; -update noar tt set v1='22AA821U7P1LJRR8765ODS3WVHDI4L8Y28OGKI02EU9DEVICBHWNMAGVYE5GPK7BJR0WH4Z9QMJZJOHO4N1SWGPJ6LY7SUGPJTNN03B1UA6537PNHGXMB9E9FZPDLNIHNLPA2BWHF6XM4YCTLOSAK9ZILPSI0GX5VA6V4TE6TTNF6WT0ZS5LDCHW60AJS8VXWN075EX009PUY342A3FIC2JO8SCTUQ69DZGMR2XYYGMKL5DJMM7IT77TI5SASMMP6' where id=64; -update noar ti set v1='22AA821U7P1LJRR8765ODS3WVHDI4L8Y28OGKI02EU9DEVICBHWNMAGVYE5GPK7BJR0WH4Z9QMJZJOHO4N1SWGPJ6LY7SUGPJTNN03B1UA6537PNHGXMB9E9FZPDLNIHNLPA2BWHF6XM4YCTLOSAK9ZILPSI0GX5VA6V4TE6TTNF6WT0ZS5LDCHW60AJS8VXWN075EX009PUY342A3FIC2JO8SCTUQ69DZGMR2XYYGMKL5DJMM7IT77TI5SASMMP6' where id=64; -update noar tt set v2='FDF98Q46E6QV146E2WKM0ZCD18J59ULRRMNW6G1UMILDNQUS38P43DEX8TGO3IJEOY4D919IBL0G32C966M26J7ZCXIQJEE9RYZNSY4G7QSK8WCJUL8J2UCFANG0X2QH0XB0E8DTGJM0CPZZXIX4H1A6Y90LKYCUB8YJYXZZE2BNNVHC70DUP3P2OW4JTB04OPTI19YDCUV7DF9OP9OORV1US2G8SFMB2QT90276A9U8ZA5IBA2URCLH3VCRKS7ZA' where id=64; -update noar ti set v2='FDF98Q46E6QV146E2WKM0ZCD18J59ULRRMNW6G1UMILDNQUS38P43DEX8TGO3IJEOY4D919IBL0G32C966M26J7ZCXIQJEE9RYZNSY4G7QSK8WCJUL8J2UCFANG0X2QH0XB0E8DTGJM0CPZZXIX4H1A6Y90LKYCUB8YJYXZZE2BNNVHC70DUP3P2OW4JTB04OPTI19YDCUV7DF9OP9OORV1US2G8SFMB2QT90276A9U8ZA5IBA2URCLH3VCRKS7ZA' where id=64; -update noar tt set v3='APV8Z2WH2E5QSXT5ZQUQAWW34W5SE62TF7QFH0RF8FH6FNP8DFMD4A0I0R1P22Y7WWN7A2A841PSPSY6UAD59OUASGDMXPFHTN05SJ8VWRZPD0CHE7QPDZ1X3M0AUADKX6PWQ1R8L6QPA7XXWTU8A9LUJS4WKFOX1H728ZHT1RJOVSUPKZHGCO2TO3N0I58R0PHHLVYXQZXE8CD87DJ9QBJJGUY8M8FP67QE2YAY16ZJMAODNU21SW84P81W87V6H' where id=64; -update noar ti set v3='APV8Z2WH2E5QSXT5ZQUQAWW34W5SE62TF7QFH0RF8FH6FNP8DFMD4A0I0R1P22Y7WWN7A2A841PSPSY6UAD59OUASGDMXPFHTN05SJ8VWRZPD0CHE7QPDZ1X3M0AUADKX6PWQ1R8L6QPA7XXWTU8A9LUJS4WKFOX1H728ZHT1RJOVSUPKZHGCO2TO3N0I58R0PHHLVYXQZXE8CD87DJ9QBJJGUY8M8FP67QE2YAY16ZJMAODNU21SW84P81W87V6H' where id=64; -update noar tt set v0='80YNN85SEGS9WFQS032YLM55K9KF85751ROK8YLWW24WUE3LE4RF2EZSH2BT4ZK9Q6SRDSFZGDIXBIEGLKHJVVTQMDPV7OQXQTDWSR0IT1HDY5CQ51YW3DPGX8GWWVBZ736021FFMEA88O10Y72LNLQVCAJ1ILRL6UYK5GNRFSYDHMV9HI16NPF6HEKQ7FVFI2Q2JRJTE0NERVDNS5ZVKUCRA5553LF2M0V4D4DBUHEY8OIR1QRWDK68Y5MFQAAWL' where id=65; -update noar ti set v0='80YNN85SEGS9WFQS032YLM55K9KF85751ROK8YLWW24WUE3LE4RF2EZSH2BT4ZK9Q6SRDSFZGDIXBIEGLKHJVVTQMDPV7OQXQTDWSR0IT1HDY5CQ51YW3DPGX8GWWVBZ736021FFMEA88O10Y72LNLQVCAJ1ILRL6UYK5GNRFSYDHMV9HI16NPF6HEKQ7FVFI2Q2JRJTE0NERVDNS5ZVKUCRA5553LF2M0V4D4DBUHEY8OIR1QRWDK68Y5MFQAAWL' where id=65; -update noar tt set v1='VY7LV44SPEIX0TWZJZX6PMGKEJBXR4B9ETA5XFD2R9RJ9W2MXCM92BPYG0N43BOJ76S4X1UDNAV5I7VM2IXDLBCYBV3FPCTN3FN50T2XEH25HJLCR6DSN3O0PUQIZ1C8PBIQIOW88TMLN7SDXJ5CEALJSMTA7H2XK1B01FV5MMQRQ1MNTMPUFYUER66BVNIWGPPQZ13FDL4RD8RT41O4HC2UKHHQ2LJTS1UJPU4JRQ58YZP5VAIPP9PGDT0H4Q02I' where id=65; -update noar ti set v1='VY7LV44SPEIX0TWZJZX6PMGKEJBXR4B9ETA5XFD2R9RJ9W2MXCM92BPYG0N43BOJ76S4X1UDNAV5I7VM2IXDLBCYBV3FPCTN3FN50T2XEH25HJLCR6DSN3O0PUQIZ1C8PBIQIOW88TMLN7SDXJ5CEALJSMTA7H2XK1B01FV5MMQRQ1MNTMPUFYUER66BVNIWGPPQZ13FDL4RD8RT41O4HC2UKHHQ2LJTS1UJPU4JRQ58YZP5VAIPP9PGDT0H4Q02I' where id=65; -update noar tt set v2='KRCER8L1A7MZ2Z37C210ANS832VRIX3WK75X1248CMANBEV83REC324H8JR5X5460CECVUYH4MHS8EONJEBS7BEJMBFMZWORFM744O642I9UJ4BFENBU51YF9CSKYF34ZSEO2ZISWNJSWR8PK2FGQLZX8AE1HWM8DMJCCQ6G0N95G0BNDLTDAPDVPP5OPXLXGVGPX7VTSCI5JOXNRHNAD6AVB2QR1U87B3IO2VFB4HJ5NW51GRCX9LVNRW8GW8LBG' where id=65; -update noar ti set v2='KRCER8L1A7MZ2Z37C210ANS832VRIX3WK75X1248CMANBEV83REC324H8JR5X5460CECVUYH4MHS8EONJEBS7BEJMBFMZWORFM744O642I9UJ4BFENBU51YF9CSKYF34ZSEO2ZISWNJSWR8PK2FGQLZX8AE1HWM8DMJCCQ6G0N95G0BNDLTDAPDVPP5OPXLXGVGPX7VTSCI5JOXNRHNAD6AVB2QR1U87B3IO2VFB4HJ5NW51GRCX9LVNRW8GW8LBG' where id=65; -update noar tt set v3='PVA8LPX2SVW1UL53U4QVXAY5NW2R0BARFM800D8S2JQFBZ7YIDHY0VRIIS3BYB1PJTBJKNC8X7V3Y6IY53NEXYWUYN8KWCRLKXSDM7HJQ2Z9JOA195GXYBTTRIAINHS9UEWJU0ZRJDVLYK7NM10LVL961XGB5DQY8PXLTOI9HTEQ313F19GN4BB3AGXYZ7U4PIUNPYZXUYW1LNRN6LXHIHGFQ789XBZ4IV6IB70DQ399GHJYP3NA9MDF5IZYBGUV2' where id=65; -update noar ti set v3='PVA8LPX2SVW1UL53U4QVXAY5NW2R0BARFM800D8S2JQFBZ7YIDHY0VRIIS3BYB1PJTBJKNC8X7V3Y6IY53NEXYWUYN8KWCRLKXSDM7HJQ2Z9JOA195GXYBTTRIAINHS9UEWJU0ZRJDVLYK7NM10LVL961XGB5DQY8PXLTOI9HTEQ313F19GN4BB3AGXYZ7U4PIUNPYZXUYW1LNRN6LXHIHGFQ789XBZ4IV6IB70DQ399GHJYP3NA9MDF5IZYBGUV2' where id=65; -update noar tt set v0='F7UKETBHU8Z1JZODQLFDOBXEEM9DIS7U48L7ZIXD2AWF4VSAOWIH91G36DTDCHAM7UMIHWK2UN7C4JSXJZS42Q9UJEMWHP8EWO4E8HLAQ0IVRIWRWEZYMCHNUOAV0YBTA4M2FVAC546BXR7FUF9O5WSTZ17WCPMBFK9HJOPHQC0KIUCJKDLY3V0N5PHZ77MPB3LFOONL6E5J0A2Z9D9DS9O4UZVM3PNHHLK829KG6MG93D18LUYNFOKXDLYOHYLST' where id=66; -update noar ti set v0='F7UKETBHU8Z1JZODQLFDOBXEEM9DIS7U48L7ZIXD2AWF4VSAOWIH91G36DTDCHAM7UMIHWK2UN7C4JSXJZS42Q9UJEMWHP8EWO4E8HLAQ0IVRIWRWEZYMCHNUOAV0YBTA4M2FVAC546BXR7FUF9O5WSTZ17WCPMBFK9HJOPHQC0KIUCJKDLY3V0N5PHZ77MPB3LFOONL6E5J0A2Z9D9DS9O4UZVM3PNHHLK829KG6MG93D18LUYNFOKXDLYOHYLST' where id=66; -update noar tt set v1='K2C5WM1N0CE5SMI2LJOZIR4W7U663QYO2EB4K0A8LKXI9ZHPAW2MRYJOBO6CHBL8F6TDCW9ZC7EEUURGC8FRSULM4DVNNB61M6PNK1E0RUYHK43ZGFNZW01XNPFLEO4W17GU6WI8U6Z0S6WXRRIM4R8PG9L81RG113ZGO5T6776BO82YLHT07DPLCUVWKS7ZZY4FTM8FQDK9VIG57HLQGZBOZ5OTL76NEEQZERAUZW71NC48705AIXPF4X4IV15ZE' where id=66; -update noar ti set v1='K2C5WM1N0CE5SMI2LJOZIR4W7U663QYO2EB4K0A8LKXI9ZHPAW2MRYJOBO6CHBL8F6TDCW9ZC7EEUURGC8FRSULM4DVNNB61M6PNK1E0RUYHK43ZGFNZW01XNPFLEO4W17GU6WI8U6Z0S6WXRRIM4R8PG9L81RG113ZGO5T6776BO82YLHT07DPLCUVWKS7ZZY4FTM8FQDK9VIG57HLQGZBOZ5OTL76NEEQZERAUZW71NC48705AIXPF4X4IV15ZE' where id=66; -update noar tt set v2='EBCXAT1T5QQWYXC5ARHO58VVY93ODF2RSKHQAQNNDD9GZIFC6OJ4UGKFR1GRP9AMLG382JAR97XA5HC50LFVP6M2ZZ0FXKECFGDY2ILGZXI5G1CSIUI95XGKKDC7V5Z4YOYWXEV202DFHCR9OV420RGUDY00QB93W7JGCGV1OXJI8AA9O9PPZUOIRUAH62YXF98GCUXB7IPXCYCVIPUL48RGY2286O1OS8JSP31OHJ41F98Z38YF4SIVPH4YG5VHP' where id=66; -update noar ti set v2='EBCXAT1T5QQWYXC5ARHO58VVY93ODF2RSKHQAQNNDD9GZIFC6OJ4UGKFR1GRP9AMLG382JAR97XA5HC50LFVP6M2ZZ0FXKECFGDY2ILGZXI5G1CSIUI95XGKKDC7V5Z4YOYWXEV202DFHCR9OV420RGUDY00QB93W7JGCGV1OXJI8AA9O9PPZUOIRUAH62YXF98GCUXB7IPXCYCVIPUL48RGY2286O1OS8JSP31OHJ41F98Z38YF4SIVPH4YG5VHP' where id=66; -update noar tt set v3='00DI72N244EJE6PBNYK1AM4UEO3DDR7RQFTSCZV9MBYTDF0PX9KSNPCF589GBKOK1AA1G7H0BIE2LG6B87PI2MELYEYSGGL88YOG4VFBU6A82A3QPJF12KLV2IPE15M7U3X3UDGPB7EK9B491RJN3HLV76PUFDGBNWYAT7CBFJ6DH71XA48FITTYO87VXPEHWXK15IOJSACQRIGFK93GSYVT6W64XBOQZSSZYQ7H888NVODSMO810VVG79U2EYIVR' where id=66; -update noar ti set v3='00DI72N244EJE6PBNYK1AM4UEO3DDR7RQFTSCZV9MBYTDF0PX9KSNPCF589GBKOK1AA1G7H0BIE2LG6B87PI2MELYEYSGGL88YOG4VFBU6A82A3QPJF12KLV2IPE15M7U3X3UDGPB7EK9B491RJN3HLV76PUFDGBNWYAT7CBFJ6DH71XA48FITTYO87VXPEHWXK15IOJSACQRIGFK93GSYVT6W64XBOQZSSZYQ7H888NVODSMO810VVG79U2EYIVR' where id=66; -update noar tt set v0='GF0SYU852FTRKP8KJMS6IS77BE4QQ3D15KDM7JB854UCGLE6QQXYV5K82VOWTRLVW4RPQOBM023B43X4R1IOEG0TMA1RLRO71YIWEIBFQ7124I9SDMKZEG4HUPSOH1I7ECCNQ2K5LNHMGUMNYSM7CJKA6C7MMA4K6G3F4MXFILFJ2ZQ6TV7ACGJRBRJGRHIIBJUEMT204WJD1YH309444X5AW84MQ8443JKFSDCA6SMSQE1N71IPD4GN2Q8JMZIR0' where id=67; -update noar ti set v0='GF0SYU852FTRKP8KJMS6IS77BE4QQ3D15KDM7JB854UCGLE6QQXYV5K82VOWTRLVW4RPQOBM023B43X4R1IOEG0TMA1RLRO71YIWEIBFQ7124I9SDMKZEG4HUPSOH1I7ECCNQ2K5LNHMGUMNYSM7CJKA6C7MMA4K6G3F4MXFILFJ2ZQ6TV7ACGJRBRJGRHIIBJUEMT204WJD1YH309444X5AW84MQ8443JKFSDCA6SMSQE1N71IPD4GN2Q8JMZIR0' where id=67; -update noar tt set v1='U5QBCDD5T8XDQ00XEL71GOQ8UVKT456C47ZA7NOP20OSZ0X8C172BZN1AX5H1L4D5BWG89RHT8D6765HPPE6XKBMF2Z4DDLEDYIS6BZS6POMZ6I6NCIZQ0D0PZ4HZPLDZ4DLOLZ15PFLQGONX19YKY8YD2TORBPLUFTERTGFBV5EUF4X7VITRISS1O5PRX390USXCOBB7GCUZHA1A9I1H53RA5Y2ZJ22A92CRO9HKJL9PYZFSZCZ3DA7YZNCAX4Y9' where id=67; -update noar ti set v1='U5QBCDD5T8XDQ00XEL71GOQ8UVKT456C47ZA7NOP20OSZ0X8C172BZN1AX5H1L4D5BWG89RHT8D6765HPPE6XKBMF2Z4DDLEDYIS6BZS6POMZ6I6NCIZQ0D0PZ4HZPLDZ4DLOLZ15PFLQGONX19YKY8YD2TORBPLUFTERTGFBV5EUF4X7VITRISS1O5PRX390USXCOBB7GCUZHA1A9I1H53RA5Y2ZJ22A92CRO9HKJL9PYZFSZCZ3DA7YZNCAX4Y9' where id=67; -update noar tt set v2='Y35WRROLBG1W06EWAXE1VKYBOF3UR000Y0VHAEEIC48EMBW1QV4XBIKUNZAMVC68EJM4NI4O32L3GDMWE51SOSXH1Z41086OM8254X4E2QIBSDUQROEH1X3FG0NLR7BA1IKO3J5KJ1B65UQQCWV5SR039OR4Q305Z923KQW8BY6IJQ6PQOVSYZ1ANJMRXVT42CUMHW60DDJORX9KMLHPY9F8QO51YZQG56MSIWOMJBI0MQY5ZTVZGDUXH59YN8GEC' where id=67; -update noar ti set v2='Y35WRROLBG1W06EWAXE1VKYBOF3UR000Y0VHAEEIC48EMBW1QV4XBIKUNZAMVC68EJM4NI4O32L3GDMWE51SOSXH1Z41086OM8254X4E2QIBSDUQROEH1X3FG0NLR7BA1IKO3J5KJ1B65UQQCWV5SR039OR4Q305Z923KQW8BY6IJQ6PQOVSYZ1ANJMRXVT42CUMHW60DDJORX9KMLHPY9F8QO51YZQG56MSIWOMJBI0MQY5ZTVZGDUXH59YN8GEC' where id=67; -update noar tt set v3='KA40T1PMKTH1PL0LCE4BLLHV044DENTK595KZVBCVMO0XCH3DIX9P68HZQB7H66QCZR3GNVHZ5Y26ZQ1WSA0ZAQ2XZXGI6VBHF1ME5BUTKS5LH58UT1XOD1GEXEFZUGLG05XK26YMDTKLSI3K0465SP9945KGM1YIA6ZTGT4UL9GCP8TV3Y9XZBDTV3YDKTFCL7HO1Y83SW4RHGI7SMIFHZNLUFE073JDC099SWIWSND0FQ2U4U1LXR59W4PAN3OP' where id=67; -update noar ti set v3='KA40T1PMKTH1PL0LCE4BLLHV044DENTK595KZVBCVMO0XCH3DIX9P68HZQB7H66QCZR3GNVHZ5Y26ZQ1WSA0ZAQ2XZXGI6VBHF1ME5BUTKS5LH58UT1XOD1GEXEFZUGLG05XK26YMDTKLSI3K0465SP9945KGM1YIA6ZTGT4UL9GCP8TV3Y9XZBDTV3YDKTFCL7HO1Y83SW4RHGI7SMIFHZNLUFE073JDC099SWIWSND0FQ2U4U1LXR59W4PAN3OP' where id=67; -update noar tt set v0='V1KUJBJNJTEWA5EBAFQMF1THTFJN4EDGL1VIDZZG8CZ53LS1BY1IMFTZJNY2SLEFL1ZPSGVYJ4IORF37XXNNEIKM77UQCWFM1NYMAQI7QZK4X43PQ9TQK56OBL79J1TD6WPQUKTS8VP2H06UVUSKOV3GZXRDWKG7P2TUTTGKBRQYSOI0UA1PJ56PHSIZ21BTU5LTQOFRG48R2LR6JH0AOIF46PH6HE6YMCB8Y98HIJXJH1VONIH7MAI0NDPF5CG5O' where id=68; -update noar ti set v0='V1KUJBJNJTEWA5EBAFQMF1THTFJN4EDGL1VIDZZG8CZ53LS1BY1IMFTZJNY2SLEFL1ZPSGVYJ4IORF37XXNNEIKM77UQCWFM1NYMAQI7QZK4X43PQ9TQK56OBL79J1TD6WPQUKTS8VP2H06UVUSKOV3GZXRDWKG7P2TUTTGKBRQYSOI0UA1PJ56PHSIZ21BTU5LTQOFRG48R2LR6JH0AOIF46PH6HE6YMCB8Y98HIJXJH1VONIH7MAI0NDPF5CG5O' where id=68; -update noar tt set v1='I7XKNEP29OE3L9JYAXAURUX0GXZXRRFHJA8TP8SSBIZGZMYMWBKNTK2535D6LEODZ5PJT294218XMW0SN7NHY9F78N60OM5IY0IAX91HYCNML4F15YQGKEW9SMUZOKPYBM0DQFG5QEOWZBHYEI0UTSYQH2ZAHTBU61OW34LW81U3HIBNOJ8025LXVOSWYDA6IXZL3LJF5L20VIX8LHYVX113SLJCLMF0CKCPQ5RJ91QNEVFCF5GSSBW6EG05B7WKO' where id=68; -update noar ti set v1='I7XKNEP29OE3L9JYAXAURUX0GXZXRRFHJA8TP8SSBIZGZMYMWBKNTK2535D6LEODZ5PJT294218XMW0SN7NHY9F78N60OM5IY0IAX91HYCNML4F15YQGKEW9SMUZOKPYBM0DQFG5QEOWZBHYEI0UTSYQH2ZAHTBU61OW34LW81U3HIBNOJ8025LXVOSWYDA6IXZL3LJF5L20VIX8LHYVX113SLJCLMF0CKCPQ5RJ91QNEVFCF5GSSBW6EG05B7WKO' where id=68; -update noar tt set v2='831XK31Q47RZLWGSNMH9QA2BA44GX3HO1K5MWJ7S9N7RHEUCTRHQX3IHSB0XILQXOAJ6LQK3IJP79GT73NJHQR3R4EU3BEBS6GVX2FAJ9R0N05AMS7RU3DTM4PRFHEL12X3D1S5BC1YIVJX2IU83T18Y3YORU5UYUXDU1ANLSFEE45XBDQF7J51ANR1KNCKD940B7W28NW5ZQW88S2BQLPMKENSTXBYCB2WM5812224EDUPJVERCN71A68WKLEYEX' where id=68; -update noar ti set v2='831XK31Q47RZLWGSNMH9QA2BA44GX3HO1K5MWJ7S9N7RHEUCTRHQX3IHSB0XILQXOAJ6LQK3IJP79GT73NJHQR3R4EU3BEBS6GVX2FAJ9R0N05AMS7RU3DTM4PRFHEL12X3D1S5BC1YIVJX2IU83T18Y3YORU5UYUXDU1ANLSFEE45XBDQF7J51ANR1KNCKD940B7W28NW5ZQW88S2BQLPMKENSTXBYCB2WM5812224EDUPJVERCN71A68WKLEYEX' where id=68; -update noar tt set v3='UK79ZXGNALSWOVV77EASEQ1B1R7MLSZD3CIYOL3OG5NV8FZ46DASZP1HJDXUAW0W34AEQNND6FC0168FGOVHMQZJRR5XFLT4MSLGZX91SG36Q3SULOU3BT316YYC7QCA5DEYHFKNBBOQXVUV2QTW80EYJRGDUCT0DON5XO77HOIO7WR21RTNVBSD2SOT47Z58B0ZQBXB0O0KLQX7DZ5OH0PYTP7A2VDZRWNA2TQE6UFXQU9TNAOQ2IJJZNCCPEBLY' where id=68; -update noar ti set v3='UK79ZXGNALSWOVV77EASEQ1B1R7MLSZD3CIYOL3OG5NV8FZ46DASZP1HJDXUAW0W34AEQNND6FC0168FGOVHMQZJRR5XFLT4MSLGZX91SG36Q3SULOU3BT316YYC7QCA5DEYHFKNBBOQXVUV2QTW80EYJRGDUCT0DON5XO77HOIO7WR21RTNVBSD2SOT47Z58B0ZQBXB0O0KLQX7DZ5OH0PYTP7A2VDZRWNA2TQE6UFXQU9TNAOQ2IJJZNCCPEBLY' where id=68; -update noar tt set v0='XLIRVX3XH2QRKYSKM64J3RPXL13DD0OJIOPZUFPN78PZ7MZWTLEBZGOE0P9VJ9OOCAGJ8ZEEME7ZBOVFLWY37TU9A8FESOFDTC8J15LUYWJVNMGS5NGW6TOBKB1G2QE1DJB2ZXOYVQTJATP1JLNHR22TXQ88BVPJNEPQ5P71ZC0IS9OAJUFE6BFPM2YTSPPSEOJZR8CFAR9L0TA49CXBS1PLH2COEYYJVMSSEY9EKK5DBFFK4FR8OWK8V427SEV3S' where id=69; -update noar ti set v0='XLIRVX3XH2QRKYSKM64J3RPXL13DD0OJIOPZUFPN78PZ7MZWTLEBZGOE0P9VJ9OOCAGJ8ZEEME7ZBOVFLWY37TU9A8FESOFDTC8J15LUYWJVNMGS5NGW6TOBKB1G2QE1DJB2ZXOYVQTJATP1JLNHR22TXQ88BVPJNEPQ5P71ZC0IS9OAJUFE6BFPM2YTSPPSEOJZR8CFAR9L0TA49CXBS1PLH2COEYYJVMSSEY9EKK5DBFFK4FR8OWK8V427SEV3S' where id=69; -update noar tt set v1='8JX13HPES0FE1MDLVICQ85Q7RW7HHOJMC07IA4RIQWAIMRHZ6QQWHMTZWBHTGP4YMEJD84B0SU0BI98X567CLJR2BJ9Y0YJHU4LP0EQSG2J1NBVLE6HVY6FIIMT6XMVXE6W5HK1ZZ9Y13VXNQ9T2M2LRZ2N4U87WBGLT7EFT6KIF680IJ62PNXZTPSYZHDNJKWAIN5WNDYUDO03Z5646R0YJJBQTL5MEGYPK6C15GJM69EDYOZYA6MLRUWDGYZ91U' where id=69; -update noar ti set v1='8JX13HPES0FE1MDLVICQ85Q7RW7HHOJMC07IA4RIQWAIMRHZ6QQWHMTZWBHTGP4YMEJD84B0SU0BI98X567CLJR2BJ9Y0YJHU4LP0EQSG2J1NBVLE6HVY6FIIMT6XMVXE6W5HK1ZZ9Y13VXNQ9T2M2LRZ2N4U87WBGLT7EFT6KIF680IJ62PNXZTPSYZHDNJKWAIN5WNDYUDO03Z5646R0YJJBQTL5MEGYPK6C15GJM69EDYOZYA6MLRUWDGYZ91U' where id=69; -update noar tt set v2='FX82JZPD6S5JNEVXWK49ULK559CZTM8OTOPSTTH5SKK5NV8FQ7D8PLVZC5R2UUEXTEUBI9SH7QQSH5SCG0EUZ2J6TDCZCGIE73N31FMUL95SJXTG3EHR69I0XRJ645G0OBXK7YVW19Q8R1U5BBY6847WXUNO6FZIOBCO16RKLBDMHASMS4C1XTB3M7KH5Q84AESHI2ACUDYF2VMNF3PFURUGM2NPPMMY8B8B7H03YHX3SXKRQ5MCC44Y1GEJ9SOAD' where id=69; -update noar ti set v2='FX82JZPD6S5JNEVXWK49ULK559CZTM8OTOPSTTH5SKK5NV8FQ7D8PLVZC5R2UUEXTEUBI9SH7QQSH5SCG0EUZ2J6TDCZCGIE73N31FMUL95SJXTG3EHR69I0XRJ645G0OBXK7YVW19Q8R1U5BBY6847WXUNO6FZIOBCO16RKLBDMHASMS4C1XTB3M7KH5Q84AESHI2ACUDYF2VMNF3PFURUGM2NPPMMY8B8B7H03YHX3SXKRQ5MCC44Y1GEJ9SOAD' where id=69; -update noar tt set v3='TJQWYQ4Z60T2T1ZMW0MQ49DPNBZ8MRYQAUVHEMZILKH1MATK7LEYJA1R25ETTA1EGZ9H45ZIWOHPR9IHKEYBTY1SA5NCE0NV6GMR8LFXL0ZD9U3PBZ3EN5QW1SOLHKOECKILDKWA809QJOWM2G9JO2KWFBUFA5D0DHZSZPCDBOWS6AR0JZTY24YXDY26T1RTOGQ00D8SYMIZPGP1RFSL8EHU86AWRDFL6ATX4FAA215G5QJUZLK4S5BI1ENL8PV7V' where id=69; -update noar ti set v3='TJQWYQ4Z60T2T1ZMW0MQ49DPNBZ8MRYQAUVHEMZILKH1MATK7LEYJA1R25ETTA1EGZ9H45ZIWOHPR9IHKEYBTY1SA5NCE0NV6GMR8LFXL0ZD9U3PBZ3EN5QW1SOLHKOECKILDKWA809QJOWM2G9JO2KWFBUFA5D0DHZSZPCDBOWS6AR0JZTY24YXDY26T1RTOGQ00D8SYMIZPGP1RFSL8EHU86AWRDFL6ATX4FAA215G5QJUZLK4S5BI1ENL8PV7V' where id=69; -update noar tt set v0='496U9MN0L766DHL4SZ71NPS4XF84D2BEK4S6T8S73ABHEP8MMNFU16K4PF4KX0NZ3EZ051NBH8I0QZ2OULX85NVWABENJEG2UN8AZC6Q8V2EBQ0ANBV4YUO3VN8YHN09IYHJ79YXS0RIC8PCYHCBZ8WXLGDGSMN4FBBAZXGW2TE6EM4L8SYAFD7C57RZDTFCT9O2R3712R5C2XCRQ326ML0I3OOSCB0MR3PC6P6D4BMSCYXSGAXTYZYUU4M3W0ZE4' where id=70; -update noar ti set v0='496U9MN0L766DHL4SZ71NPS4XF84D2BEK4S6T8S73ABHEP8MMNFU16K4PF4KX0NZ3EZ051NBH8I0QZ2OULX85NVWABENJEG2UN8AZC6Q8V2EBQ0ANBV4YUO3VN8YHN09IYHJ79YXS0RIC8PCYHCBZ8WXLGDGSMN4FBBAZXGW2TE6EM4L8SYAFD7C57RZDTFCT9O2R3712R5C2XCRQ326ML0I3OOSCB0MR3PC6P6D4BMSCYXSGAXTYZYUU4M3W0ZE4' where id=70; -update noar tt set v1='RLLMLTGMYGT9V8VJQA5E4DPIHLIWEE28ARTJX25B0EONDI1JD7YQ8OAPLT38WBAY31I9XEVC11U6GGNXM1F8R4B3R9HBY8B64XJQ20OQRH9FDF5OQUI23OMECWMGXGMZKLW0HSTXL7WZY4KVF6BNNLUBECLJ0ZLO5A2T8PLF3H2N5IDBUDI93Q62X934O7LE4UKCKB5WUHIYWXE0LAYIK1OMD5TJYM44CRDZBR49D2CH6G9WPH56KVHDFGQNDHB7Z' where id=70; -update noar ti set v1='RLLMLTGMYGT9V8VJQA5E4DPIHLIWEE28ARTJX25B0EONDI1JD7YQ8OAPLT38WBAY31I9XEVC11U6GGNXM1F8R4B3R9HBY8B64XJQ20OQRH9FDF5OQUI23OMECWMGXGMZKLW0HSTXL7WZY4KVF6BNNLUBECLJ0ZLO5A2T8PLF3H2N5IDBUDI93Q62X934O7LE4UKCKB5WUHIYWXE0LAYIK1OMD5TJYM44CRDZBR49D2CH6G9WPH56KVHDFGQNDHB7Z' where id=70; -update noar tt set v2='71HCX56X32H1ENTBBYO3RJLHXK9V27BSV76U8Q89ULS8NVP29QNEFT10OPZDG6CJPNF5A50J15XBBGS6G7JL1J5Z0IKO104OJ8FF3QP1Z1MPV8YQJBSEYRROA01FX4XEZGNW0SSASBRIIMJ9529SQ9O8KPKZUB2IVX30X6T59ZJN97KSZZ72VP1IB8MBQWJN1E6X5POX7DDOD29BQ3D605EBLW4A7DPPQ3R9W7NOE37B0AIAD8RW9XGEE01O5BSFF' where id=70; -update noar ti set v2='71HCX56X32H1ENTBBYO3RJLHXK9V27BSV76U8Q89ULS8NVP29QNEFT10OPZDG6CJPNF5A50J15XBBGS6G7JL1J5Z0IKO104OJ8FF3QP1Z1MPV8YQJBSEYRROA01FX4XEZGNW0SSASBRIIMJ9529SQ9O8KPKZUB2IVX30X6T59ZJN97KSZZ72VP1IB8MBQWJN1E6X5POX7DDOD29BQ3D605EBLW4A7DPPQ3R9W7NOE37B0AIAD8RW9XGEE01O5BSFF' where id=70; -update noar tt set v3='FJLY9YYJ55F8J5PY3TRDWUNXG61YX3AIX8TOYYJTEZIRC9FSU4RBNWELRFXGPJCAVMCP1Y4NRWW78IIVF9Z4VPC6ZJW0B7QTMSTH28R4M8XZ049MJE28MTTT4OLMA2P5RP2OJSQBFRTOZZ5L1N5IQM7AC1BHE3IS990MO3IYEFX27LMYWGVBT0JXZFK4JAE5DVLDA07R7SSP7KNB08KJT8EKA7W4WI24MGFEF46MX906J6JXEGO2NHR865X7NF6KX' where id=70; -update noar ti set v3='FJLY9YYJ55F8J5PY3TRDWUNXG61YX3AIX8TOYYJTEZIRC9FSU4RBNWELRFXGPJCAVMCP1Y4NRWW78IIVF9Z4VPC6ZJW0B7QTMSTH28R4M8XZ049MJE28MTTT4OLMA2P5RP2OJSQBFRTOZZ5L1N5IQM7AC1BHE3IS990MO3IYEFX27LMYWGVBT0JXZFK4JAE5DVLDA07R7SSP7KNB08KJT8EKA7W4WI24MGFEF46MX906J6JXEGO2NHR865X7NF6KX' where id=70; -update noar tt set v0='9DZYQUSF9OTXF1YUWN6YFPG2ML3927OMDJWVQ6IV9SHJ6HDPKYA7HLWCYHCFUNTEFPFVW9T90ZS9IG8SINX8A49FLY5OFYDUMZ1PK6AXJPTY7ZQ0BZLUSOTIX32AD32KJRY8G5N3YAMWKNCQQ93N7UH0GVVR3JYT4X5DX4ZSK50ZLR3CA38W4JF3GVF7N06QM5AJWWUQ9K0PVI65MUZW5LE09O55039ZSTOUFDZ71ZEOH2R8LVO4L9J7MOYM2BMK1' where id=71; -update noar ti set v0='9DZYQUSF9OTXF1YUWN6YFPG2ML3927OMDJWVQ6IV9SHJ6HDPKYA7HLWCYHCFUNTEFPFVW9T90ZS9IG8SINX8A49FLY5OFYDUMZ1PK6AXJPTY7ZQ0BZLUSOTIX32AD32KJRY8G5N3YAMWKNCQQ93N7UH0GVVR3JYT4X5DX4ZSK50ZLR3CA38W4JF3GVF7N06QM5AJWWUQ9K0PVI65MUZW5LE09O55039ZSTOUFDZ71ZEOH2R8LVO4L9J7MOYM2BMK1' where id=71; -update noar tt set v1='N240W1BCFPSUI0MJEUYL970QF0D90E18ZTX0W5OPTNSBW964IUD65418K86X0P0AYMAR0LDV8317K7EX6BWDKK0KXFJ0WRRGKXDXIYE58TMKI9BLDRMDYB2EECS6SDXL08CHAE3GB0KUN904QQ30Y908DPYMPUSDRAV87B9KGMMXLI2DFCZENNCM27GB5C165UMNFGV31K78YTW2NWC2CJ2NA3LBPI2ADM73447QTTQ1FS70V6WD510INK7C5DNLN' where id=71; -update noar ti set v1='N240W1BCFPSUI0MJEUYL970QF0D90E18ZTX0W5OPTNSBW964IUD65418K86X0P0AYMAR0LDV8317K7EX6BWDKK0KXFJ0WRRGKXDXIYE58TMKI9BLDRMDYB2EECS6SDXL08CHAE3GB0KUN904QQ30Y908DPYMPUSDRAV87B9KGMMXLI2DFCZENNCM27GB5C165UMNFGV31K78YTW2NWC2CJ2NA3LBPI2ADM73447QTTQ1FS70V6WD510INK7C5DNLN' where id=71; -update noar tt set v2='622H5KHPBYEHO700WGUETVRWFOFJT2P0BZ2F7VBK205FBIKIU326XWYTELKQOUHJM8VYF5BW5C4PT0QUZ2IONGB9WX0U0EPSP9EREKZFMCHHKX40RKU55KWU5M3IWX2MBJIUM0V409UHR59HVU1NCJ0VOT703CGY5PC97YNOA8K9MDBTDRSBYTZC5067NOC9HI1MWHEWROUTW5JO1JO3V5E8KWJGFA9ZSUJK8J5FM3KXY9O9S6PQUWSP2RH1E8QWL' where id=71; -update noar ti set v2='622H5KHPBYEHO700WGUETVRWFOFJT2P0BZ2F7VBK205FBIKIU326XWYTELKQOUHJM8VYF5BW5C4PT0QUZ2IONGB9WX0U0EPSP9EREKZFMCHHKX40RKU55KWU5M3IWX2MBJIUM0V409UHR59HVU1NCJ0VOT703CGY5PC97YNOA8K9MDBTDRSBYTZC5067NOC9HI1MWHEWROUTW5JO1JO3V5E8KWJGFA9ZSUJK8J5FM3KXY9O9S6PQUWSP2RH1E8QWL' where id=71; -update noar tt set v3='693SVWB0NU7A8QNGNZUT2YSF0WOCLP26FH657DB76LJN47KRGPPOEG1JVE3K50XIOZHSN5J417ZNQDYWK4HZ9SFN96LL96YSXB3GDLOBBH4VWXOHE21HZ3ST2QX2LAMAZTKQR7AUSKNPOHJVORIY2YG91AD7NO31B53M05B2UZPFZ6M418I04JECNJY2PM3HNCENRH565YNJFWIGN6S4QNYG0KRYFIQ60MGS4YYO77R0OQJK99XTLUNVWPVHM7IDA' where id=71; -update noar ti set v3='693SVWB0NU7A8QNGNZUT2YSF0WOCLP26FH657DB76LJN47KRGPPOEG1JVE3K50XIOZHSN5J417ZNQDYWK4HZ9SFN96LL96YSXB3GDLOBBH4VWXOHE21HZ3ST2QX2LAMAZTKQR7AUSKNPOHJVORIY2YG91AD7NO31B53M05B2UZPFZ6M418I04JECNJY2PM3HNCENRH565YNJFWIGN6S4QNYG0KRYFIQ60MGS4YYO77R0OQJK99XTLUNVWPVHM7IDA' where id=71; -update noar tt set v0='4KVBI2G1BE6ZJC0ACZ25H195H8N0EGB00HGKZXXV2802TCJYXTR8SZQTW14ROQAZ8LDS61N8AUFGQUNXJQ19R547NY6WJ9WUA47ZZ4FQDAGSHAGRNZWNJC7Y3GSPUPIBKP9FCF15EP8PIDCOV3ZTLX5VAY933EWUKSBNDQYIWN2JIWCUOK0KAY2UCTRHVWSUWJR28H8BVNLDJTDDV29FUSGC71V33YH16GDC4VI3380U0G8LUAFRD823MKEM43F1V' where id=72; -update noar ti set v0='4KVBI2G1BE6ZJC0ACZ25H195H8N0EGB00HGKZXXV2802TCJYXTR8SZQTW14ROQAZ8LDS61N8AUFGQUNXJQ19R547NY6WJ9WUA47ZZ4FQDAGSHAGRNZWNJC7Y3GSPUPIBKP9FCF15EP8PIDCOV3ZTLX5VAY933EWUKSBNDQYIWN2JIWCUOK0KAY2UCTRHVWSUWJR28H8BVNLDJTDDV29FUSGC71V33YH16GDC4VI3380U0G8LUAFRD823MKEM43F1V' where id=72; -update noar tt set v1='5C9L72EGNPN3XEIC0S8YJX2S4BNQ5FNZ1SLA2KTRF523Q8GJG7B8J4LC8G9I1H6NCI49EUHBS57PV72WWC5XIXBIU5J69QZLNGXHYSIOF4L8VDPCNMB21S9TWQAX3WIVMSVCPD7KRWPIGNDGBFJG385DOBXVF0L86D7GMP1F1NJGM5NOUQWEWIB9E0XWH94YQWYOVS8AOT3QSHTYBZOWFQ3KMF8D2SWTV5GAC0AE2SLCWNT7WUWPGFQZQA89KM7GO' where id=72; -update noar ti set v1='5C9L72EGNPN3XEIC0S8YJX2S4BNQ5FNZ1SLA2KTRF523Q8GJG7B8J4LC8G9I1H6NCI49EUHBS57PV72WWC5XIXBIU5J69QZLNGXHYSIOF4L8VDPCNMB21S9TWQAX3WIVMSVCPD7KRWPIGNDGBFJG385DOBXVF0L86D7GMP1F1NJGM5NOUQWEWIB9E0XWH94YQWYOVS8AOT3QSHTYBZOWFQ3KMF8D2SWTV5GAC0AE2SLCWNT7WUWPGFQZQA89KM7GO' where id=72; -update noar tt set v2='UZB1VBNEW0BS1PH85F5DTEWFBB0HICPLT3G8NB92FZ01EK6DR0851HNNHRW5ISJ37WMJJR23GDU3U5UAI1V27F2IBZJF0B6154EQ7MX3EP62Q4ES37CG3QZRJHERXTD9U8JLAJ6UH2XPERL0AS87WUCR9J31WWIGG8E8H5E9NT1K427AYWXBSGI0PI5L13F6UABYP5BNENNNUFEHQPLQCRBOQBUFYJ7LIXT4AUEXHCZXBKCLS6OEZJ24AADFQS4P3' where id=72; -update noar ti set v2='UZB1VBNEW0BS1PH85F5DTEWFBB0HICPLT3G8NB92FZ01EK6DR0851HNNHRW5ISJ37WMJJR23GDU3U5UAI1V27F2IBZJF0B6154EQ7MX3EP62Q4ES37CG3QZRJHERXTD9U8JLAJ6UH2XPERL0AS87WUCR9J31WWIGG8E8H5E9NT1K427AYWXBSGI0PI5L13F6UABYP5BNENNNUFEHQPLQCRBOQBUFYJ7LIXT4AUEXHCZXBKCLS6OEZJ24AADFQS4P3' where id=72; -update noar tt set v3='M9KJ479UTCMETO0MI3SMJLXD47GS0FZ4B3PCN6G50SW38DM3Y8K8KTYK2CI8Q8XC1L1G5IYOSS6ITKLI7PK4WXMNF5N9LVR7XJY51ZQHMFL3M8GZHTQO5DROTOT3SKZ9K528B8XBW9FZX97Y29I6WN5WCKSU4QSU3KAKV1L5WHNOMFNS8Y0TBEMC2EPPZKXVIASWB98TYC4RCURHHZI1KG7HYF32XU1N5OEKI61A4KK0IXRZUYUWJCF5ASV8OTM4F' where id=72; -update noar ti set v3='M9KJ479UTCMETO0MI3SMJLXD47GS0FZ4B3PCN6G50SW38DM3Y8K8KTYK2CI8Q8XC1L1G5IYOSS6ITKLI7PK4WXMNF5N9LVR7XJY51ZQHMFL3M8GZHTQO5DROTOT3SKZ9K528B8XBW9FZX97Y29I6WN5WCKSU4QSU3KAKV1L5WHNOMFNS8Y0TBEMC2EPPZKXVIASWB98TYC4RCURHHZI1KG7HYF32XU1N5OEKI61A4KK0IXRZUYUWJCF5ASV8OTM4F' where id=72; -update noar tt set v0='7NEC4XECTR7ZW4IJASRU3H7WQGZ9T48SKRZB5J96H6124LC35990VQ1TXGGA1PYMWIH0HKOBIKBACX5Q8XE8A46HZQG9U1GIZJ01E2Y0C97IIKRLJBPWALKO71DRKXP7UA6B1JQ3L5YE3Q98R1ZIHLR4VLOZB46T7YMJHN75MIQ2S31TA4A9A9WX8JN83ZZYTWITPL748FS7AF7986FX2H6UQYESKHGB6NI26PS0PSWGES36AMXHBOZ2KNW5YD3LH' where id=73; -update noar ti set v0='7NEC4XECTR7ZW4IJASRU3H7WQGZ9T48SKRZB5J96H6124LC35990VQ1TXGGA1PYMWIH0HKOBIKBACX5Q8XE8A46HZQG9U1GIZJ01E2Y0C97IIKRLJBPWALKO71DRKXP7UA6B1JQ3L5YE3Q98R1ZIHLR4VLOZB46T7YMJHN75MIQ2S31TA4A9A9WX8JN83ZZYTWITPL748FS7AF7986FX2H6UQYESKHGB6NI26PS0PSWGES36AMXHBOZ2KNW5YD3LH' where id=73; -update noar tt set v1='C812P5RL4RLS0I5886A1PMR43QI83FMX77FNE69GENXR9ZMSAKJGZQ3DBPR1C64ZP9LQTA27G7NBZPUGLDRBP7VYNXQ8ATX2RE13OVY9X0WU1KE3O436F04H69S4XZD7U2F98Q248D2QQHS53N8A6I6IDDF9UOF1O3QG41381YTTK1V18EZGNW51588P9DZJCNXE8CJU7GN3M0DSEG31OW47JY7P2WO9R6RFIG9Y0WJUICW8PHMF2R5Y0IE49UZL0' where id=73; -update noar ti set v1='C812P5RL4RLS0I5886A1PMR43QI83FMX77FNE69GENXR9ZMSAKJGZQ3DBPR1C64ZP9LQTA27G7NBZPUGLDRBP7VYNXQ8ATX2RE13OVY9X0WU1KE3O436F04H69S4XZD7U2F98Q248D2QQHS53N8A6I6IDDF9UOF1O3QG41381YTTK1V18EZGNW51588P9DZJCNXE8CJU7GN3M0DSEG31OW47JY7P2WO9R6RFIG9Y0WJUICW8PHMF2R5Y0IE49UZL0' where id=73; -update noar tt set v2='WO8RCONG3AO65JYG2X4N02QYFQGU66QPSD6XANXR578LZ4C54R6MAXMPRWV371MZXNX94XKNZKN717QJ90ZBHF24J36UFI0430JPZZZ7HRWJB8GHAP8MKQ61XICSE0OI97DACR42F69CTXNLH3E7SSGYVDD7CHEPYMV286HS5CFAMJ8Z6SCDPK9SGS4QO82VTYJBBFYSCW09GMMR8OL36DHAWQBQT2FV2NK45KGL38WAEW9U0FZ73TRETTHMBYDNJ' where id=73; -update noar ti set v2='WO8RCONG3AO65JYG2X4N02QYFQGU66QPSD6XANXR578LZ4C54R6MAXMPRWV371MZXNX94XKNZKN717QJ90ZBHF24J36UFI0430JPZZZ7HRWJB8GHAP8MKQ61XICSE0OI97DACR42F69CTXNLH3E7SSGYVDD7CHEPYMV286HS5CFAMJ8Z6SCDPK9SGS4QO82VTYJBBFYSCW09GMMR8OL36DHAWQBQT2FV2NK45KGL38WAEW9U0FZ73TRETTHMBYDNJ' where id=73; -update noar tt set v3='8FS8A49KS3S2J7ZNUKIVYD8CR1N0SUV8UK1NWBKF8R2GOE1MSDVJLZPY6QZVAHESK0LSENBZIQ5IC86GI1DM0HWYRZEEY5JD19SNNED8E861RG3WT365K0V0N36B0SCRDGS3F5J7NG3RGDIY3U8ZJJCF2RMJ3NLYHAF5CLVCEZT3FN1X2C4B0S5H7V193QB9Z03JEHDBMH3PKPWZBF2XU913FHBN52EGEY9T88KT8WJHCN98JET6RMRFRCC36GPXW' where id=73; -update noar ti set v3='8FS8A49KS3S2J7ZNUKIVYD8CR1N0SUV8UK1NWBKF8R2GOE1MSDVJLZPY6QZVAHESK0LSENBZIQ5IC86GI1DM0HWYRZEEY5JD19SNNED8E861RG3WT365K0V0N36B0SCRDGS3F5J7NG3RGDIY3U8ZJJCF2RMJ3NLYHAF5CLVCEZT3FN1X2C4B0S5H7V193QB9Z03JEHDBMH3PKPWZBF2XU913FHBN52EGEY9T88KT8WJHCN98JET6RMRFRCC36GPXW' where id=73; -update noar tt set v0='9YNN9O1R1E5LJZ5KIIMVNEVFBFSV5ZHUFOJCJS4AOO6SUX1PN3UIS1PNBTLXD3I1DPMX7JX1JTFACPGBDDZ0XA5M3DQ91WNJK41VCB8OKB1LOWH1L6IE78HHTJ67J7O1XB44432Y1JLJLUE26PRBUYMXSTMTPWWZ4XCMQTDMG1SFG2W9UH3O6OT4XJKMMPS8BMGKHGXW85PLSKRNHA63MUBR63LU11B6ZUDQ0LMGIH2V725V7BNVTYIHB7728T8FZ' where id=74; -update noar ti set v0='9YNN9O1R1E5LJZ5KIIMVNEVFBFSV5ZHUFOJCJS4AOO6SUX1PN3UIS1PNBTLXD3I1DPMX7JX1JTFACPGBDDZ0XA5M3DQ91WNJK41VCB8OKB1LOWH1L6IE78HHTJ67J7O1XB44432Y1JLJLUE26PRBUYMXSTMTPWWZ4XCMQTDMG1SFG2W9UH3O6OT4XJKMMPS8BMGKHGXW85PLSKRNHA63MUBR63LU11B6ZUDQ0LMGIH2V725V7BNVTYIHB7728T8FZ' where id=74; -update noar tt set v1='OH77FS0E3VHZUNSGAC9ZG4SULNF66MVU6JENVIOISFZ4MIO24O6R2V9QWBET1PVSBO4W2NSWBM479O3G5RB0BF62CJ6FD817P7CW7ZZY04QGCJXA88GKU4RJ1RE6QJT8NK093EKPRJWQ6Y5MQHHMKW5914BPRD65FQ5WHY8Q0GMGQD2OU6BDKOVDS6OWWLI59C7RNHV8XX6X5BUWGR5V3WPRN68LPLEFIVQ2B5BCV9FJXH4ESJPTBF4I1YIX22LXE' where id=74; -update noar ti set v1='OH77FS0E3VHZUNSGAC9ZG4SULNF66MVU6JENVIOISFZ4MIO24O6R2V9QWBET1PVSBO4W2NSWBM479O3G5RB0BF62CJ6FD817P7CW7ZZY04QGCJXA88GKU4RJ1RE6QJT8NK093EKPRJWQ6Y5MQHHMKW5914BPRD65FQ5WHY8Q0GMGQD2OU6BDKOVDS6OWWLI59C7RNHV8XX6X5BUWGR5V3WPRN68LPLEFIVQ2B5BCV9FJXH4ESJPTBF4I1YIX22LXE' where id=74; -update noar tt set v2='A7U95GIVHS3RJI0XLFMEOCUD7F4SS5BGHSY53I6RO7WBYKW2P2UFS7TT6LF8QCDKL8LRMXQX80MGJGN29T0FDOMQRHVT0PJMY4SODMCOLHPVOS4GQVEEJXN9VXJ39DOMW823K2WXFFY9CUB5XFD3VN8F414YTAECKL1OZ6F0F3BHTYATE5WL8VPUHZODGSI95FFI55OY2GWJ0F5R3QLWQTWRM9S86FJ14CWVG1GTYPU6TMV3BQXCF15GHMSGKR6G6' where id=74; -update noar ti set v2='A7U95GIVHS3RJI0XLFMEOCUD7F4SS5BGHSY53I6RO7WBYKW2P2UFS7TT6LF8QCDKL8LRMXQX80MGJGN29T0FDOMQRHVT0PJMY4SODMCOLHPVOS4GQVEEJXN9VXJ39DOMW823K2WXFFY9CUB5XFD3VN8F414YTAECKL1OZ6F0F3BHTYATE5WL8VPUHZODGSI95FFI55OY2GWJ0F5R3QLWQTWRM9S86FJ14CWVG1GTYPU6TMV3BQXCF15GHMSGKR6G6' where id=74; -update noar tt set v3='4K0AMB69AHAMZSR7S5O0PLJ76BKVAYIE2O320HMUQJFAX22TFO3S35MIQ4GIJI9KMOQOBA9RPNHMS1T6CFWH5EVI78JQQR9IDBY46WRJVCYCZ8M6YQGQBP9AVC0AD2DS2IBW2HNXD9HOXF1AT7KRHCT4YHP2Z1BPTV7DHMW2EAABY3K698S9836N2AINOUNPLCHQDITXA6U8GYC8KAJOZZJ58JEQXBIRUT3SL2XZWULU5KAS4UW2MOEUUVUSE4SA5' where id=74; -update noar ti set v3='4K0AMB69AHAMZSR7S5O0PLJ76BKVAYIE2O320HMUQJFAX22TFO3S35MIQ4GIJI9KMOQOBA9RPNHMS1T6CFWH5EVI78JQQR9IDBY46WRJVCYCZ8M6YQGQBP9AVC0AD2DS2IBW2HNXD9HOXF1AT7KRHCT4YHP2Z1BPTV7DHMW2EAABY3K698S9836N2AINOUNPLCHQDITXA6U8GYC8KAJOZZJ58JEQXBIRUT3SL2XZWULU5KAS4UW2MOEUUVUSE4SA5' where id=74; -update noar tt set v0='MAXJK8SCOJ2E8T4VMQ261YKS5WC8TEA9US5KBXUC1T6226LYKNQMSWTIN3A7HZM01SS3WHI1OCNRRJQEJDO1DB2GLHANX99YH1TNCRYWBJ4FDV795TOA1PTTY0G7QS7DGEKL7B4TY5N4V8TLAZWDFWEC52ONF1GICCQO0V8UGVSV797VUREEEFI7ZWB1OYO3IT9BQHEED4L9JWKWDBW2WIFPUWHBZH6QJBNGOQET8HM4WMIXNUSVFJNSSTPDP5THO' where id=75; -update noar ti set v0='MAXJK8SCOJ2E8T4VMQ261YKS5WC8TEA9US5KBXUC1T6226LYKNQMSWTIN3A7HZM01SS3WHI1OCNRRJQEJDO1DB2GLHANX99YH1TNCRYWBJ4FDV795TOA1PTTY0G7QS7DGEKL7B4TY5N4V8TLAZWDFWEC52ONF1GICCQO0V8UGVSV797VUREEEFI7ZWB1OYO3IT9BQHEED4L9JWKWDBW2WIFPUWHBZH6QJBNGOQET8HM4WMIXNUSVFJNSSTPDP5THO' where id=75; -update noar tt set v1='AVWI8Y3F2LZ4J0IROPDULWOK9XE9GVUIEBO3VUBMSZW1I7RAGGMKEC1A0YN7M6AQT5QEYJFMB6RT5V2SNPSFVFHENSO0X5OGAFPMG95OQZ1LE3XVDD9IJTEG9U7QV249F805C0R4KN71LEF9I2CNPUH8IGZ9IMNBXXLM5S2GL6USLIJVUKSXWJVFNYIAZAIZNT0DOH9FFBP4DK9X6LYIC6E8ZZBZP7TD1ZA0TBW8HUKO1U41JGF5JF0FIDPRKRLB4' where id=75; -update noar ti set v1='AVWI8Y3F2LZ4J0IROPDULWOK9XE9GVUIEBO3VUBMSZW1I7RAGGMKEC1A0YN7M6AQT5QEYJFMB6RT5V2SNPSFVFHENSO0X5OGAFPMG95OQZ1LE3XVDD9IJTEG9U7QV249F805C0R4KN71LEF9I2CNPUH8IGZ9IMNBXXLM5S2GL6USLIJVUKSXWJVFNYIAZAIZNT0DOH9FFBP4DK9X6LYIC6E8ZZBZP7TD1ZA0TBW8HUKO1U41JGF5JF0FIDPRKRLB4' where id=75; -update noar tt set v2='J2WRIE1SYM8DB6EARECT01QBP6L7359A2ZLH49103EOZ0723AMYCJJNTGNF7F4NZPLUK0NZTJ3X3EGNWIQ7S0P5FNSST5BJ1EZ6NL2U85HQKGM4DYQVUR8O9EASGOI7TJWUMG6RTADPYNPIN227SK3AHTZHYJ7J7U0K1PWXNZO7UL6NK13GS6S5IXM498CM1YUTC24CG5B8JT3T654I33WM7Q0QGYO62ATVEJSHK6IN5TH8SGGE0NDFF8T6C4APFJ' where id=75; -update noar ti set v2='J2WRIE1SYM8DB6EARECT01QBP6L7359A2ZLH49103EOZ0723AMYCJJNTGNF7F4NZPLUK0NZTJ3X3EGNWIQ7S0P5FNSST5BJ1EZ6NL2U85HQKGM4DYQVUR8O9EASGOI7TJWUMG6RTADPYNPIN227SK3AHTZHYJ7J7U0K1PWXNZO7UL6NK13GS6S5IXM498CM1YUTC24CG5B8JT3T654I33WM7Q0QGYO62ATVEJSHK6IN5TH8SGGE0NDFF8T6C4APFJ' where id=75; -update noar tt set v3='QCF18C0GDB9XJ99UOJ5V5NSHX52SMX4NJCX6YM31XUWCRYOY8BT7HW330ML84ZOJAORF23HL13X9H3FI780K5BML23CE5RKD8MSP5Q4U5PIC3CPVJCO81S7INPU5X1SC1WJK66PSIP3QFLYMZ60MTBDMPZR1YQ0X6BDJQGPHJYXSAV8GH7Q5SBUCT4BGXAFWEWCNTH35QN2S6BRKRI094JGRY2K5EBUMS6H1BBI1YY8T2MCVE9W33CMG2X41MBLXC' where id=75; -update noar ti set v3='QCF18C0GDB9XJ99UOJ5V5NSHX52SMX4NJCX6YM31XUWCRYOY8BT7HW330ML84ZOJAORF23HL13X9H3FI780K5BML23CE5RKD8MSP5Q4U5PIC3CPVJCO81S7INPU5X1SC1WJK66PSIP3QFLYMZ60MTBDMPZR1YQ0X6BDJQGPHJYXSAV8GH7Q5SBUCT4BGXAFWEWCNTH35QN2S6BRKRI094JGRY2K5EBUMS6H1BBI1YY8T2MCVE9W33CMG2X41MBLXC' where id=75; -update noar tt set v0='71NT19EP84082NY6CJRT4GT5F4VRZHBW4BFBCZWDGYJA5PMNIDJHVP1LHXSMZ22GPH9RWCWE809VIVSA05G6SHT3GHU9TC0V8G8KJTSRK43X5X6EN4DT02EBN3YOVMZMAQL9O9WXLZLJVIHUZS9P1O5NNGVUEOMNT1P9HTI2BNTGLZSNCU59ZQO2B2HI1CD2K330OG33KETLRHM0KZHWY6EGLN5U36F3AN4E4RASWVIF0BQML8CQIK5DFOTWSV1I0' where id=76; -update noar ti set v0='71NT19EP84082NY6CJRT4GT5F4VRZHBW4BFBCZWDGYJA5PMNIDJHVP1LHXSMZ22GPH9RWCWE809VIVSA05G6SHT3GHU9TC0V8G8KJTSRK43X5X6EN4DT02EBN3YOVMZMAQL9O9WXLZLJVIHUZS9P1O5NNGVUEOMNT1P9HTI2BNTGLZSNCU59ZQO2B2HI1CD2K330OG33KETLRHM0KZHWY6EGLN5U36F3AN4E4RASWVIF0BQML8CQIK5DFOTWSV1I0' where id=76; -update noar tt set v1='BH3KTNOGM94BEH1J2QNK4XOSZIPMXR2G3NXCTRMZFPJOHXTDJU0ZTHK26W6M7J6O1SJLBOD46LI99XVF9KUGCWK81D6AWNUF1VEG8BEL8SYYTB7MX3DISRLI1B4OEZFXZL0UGWQ0R8KBZL774R4GZPI5T2N4NE8YAT5MDCHX7DBVDLKG4YHGV07LBAM7UHOVHQ961WA3TTR0F1743P7P65VIRGN1NMPZP2K3JILT2WFKKTWEX16GZ5RQJS5N99WM0' where id=76; -update noar ti set v1='BH3KTNOGM94BEH1J2QNK4XOSZIPMXR2G3NXCTRMZFPJOHXTDJU0ZTHK26W6M7J6O1SJLBOD46LI99XVF9KUGCWK81D6AWNUF1VEG8BEL8SYYTB7MX3DISRLI1B4OEZFXZL0UGWQ0R8KBZL774R4GZPI5T2N4NE8YAT5MDCHX7DBVDLKG4YHGV07LBAM7UHOVHQ961WA3TTR0F1743P7P65VIRGN1NMPZP2K3JILT2WFKKTWEX16GZ5RQJS5N99WM0' where id=76; -update noar tt set v2='MYG9WC3PCRJPG9WTEVI0QBKKXNL6MVRDED81DBONL7F1AK717OXTOPMJ44W4441A7UGOBO1OFFEB25TH6QNBUFHVJDO2BZHQTLX4G6LVWF9KS6KQ4DKP8X9YKQQBVJ8V29QRE8N8874BQRUVWTLPW74P13S5IVTCBMLVYODQDV6502G6FUDPY569AVTP7SFWZCVF6CCJQHSFO9JHXNSOF2EA03CYOE0B2DWS7T3GYJ9Y393SR9UBMRPMDJKNQKB0C' where id=76; -update noar ti set v2='MYG9WC3PCRJPG9WTEVI0QBKKXNL6MVRDED81DBONL7F1AK717OXTOPMJ44W4441A7UGOBO1OFFEB25TH6QNBUFHVJDO2BZHQTLX4G6LVWF9KS6KQ4DKP8X9YKQQBVJ8V29QRE8N8874BQRUVWTLPW74P13S5IVTCBMLVYODQDV6502G6FUDPY569AVTP7SFWZCVF6CCJQHSFO9JHXNSOF2EA03CYOE0B2DWS7T3GYJ9Y393SR9UBMRPMDJKNQKB0C' where id=76; -update noar tt set v3='ZKJR74B19LYTUC4TO15X0I15TZYO0P75YBNV2J3J6T844G08HKUS1Z1LBTKIXWXFGZU77ZTJYVY8TQSO1RFLHZL2XYNRBDL1UCAZMKDZMCK10RM3EM2Y1MW43MGNB2YBS39CMFD6Q9WE6ZIX7CG2P57P006HRKBMUAPOY73LGKRHX09AF8YFSS8TNBWV3E0VE23BV7V3HPBV29JY0C4EUMGL9O75G3OJJOOCRS2NBBSY2LVON6R8G4XKI7VI3882A' where id=76; -update noar ti set v3='ZKJR74B19LYTUC4TO15X0I15TZYO0P75YBNV2J3J6T844G08HKUS1Z1LBTKIXWXFGZU77ZTJYVY8TQSO1RFLHZL2XYNRBDL1UCAZMKDZMCK10RM3EM2Y1MW43MGNB2YBS39CMFD6Q9WE6ZIX7CG2P57P006HRKBMUAPOY73LGKRHX09AF8YFSS8TNBWV3E0VE23BV7V3HPBV29JY0C4EUMGL9O75G3OJJOOCRS2NBBSY2LVON6R8G4XKI7VI3882A' where id=76; -update noar tt set v0='QEH9QBXR6Q0RUU6VID14PBM1C134IF7ENG6IJUG13TCEEC7P3OO36I6RJMVMBAE47I5KE4856CKGR4YCMKHE4VZWK6R51FXBANSRRSD82NG5X1UFMOIGVTICZSZ7TKYGMOK8YHRD6W5DT8MBYWT5N6Q9KOJKJFFQTGMK13TC40BLF42JR2B5NJTKX1UM0YA05GR108UFGJGN2Q1DD4UCJKC6X2LEBR2RY5FIX9KZ796RMIYFUAQSK73WDJR3K85B0' where id=77; -update noar ti set v0='QEH9QBXR6Q0RUU6VID14PBM1C134IF7ENG6IJUG13TCEEC7P3OO36I6RJMVMBAE47I5KE4856CKGR4YCMKHE4VZWK6R51FXBANSRRSD82NG5X1UFMOIGVTICZSZ7TKYGMOK8YHRD6W5DT8MBYWT5N6Q9KOJKJFFQTGMK13TC40BLF42JR2B5NJTKX1UM0YA05GR108UFGJGN2Q1DD4UCJKC6X2LEBR2RY5FIX9KZ796RMIYFUAQSK73WDJR3K85B0' where id=77; -update noar tt set v1='ZP4W6KPAR1T6WTWH2MCFRENMQRJJRB66HEG089L5LM728YT3XIF5RVQJ3HSQRRE7G698ABL2LHUEF8UL53CKSZHMSIBNAJPQZS0NJ9UY88HC9OZFIYPEC522AMQZ55A01ZOE6HW3GK3EIF9P6GKJXDQ1DAKMV7RE2B6DRGDUO0J5PINNG1AYSFCQ8QF0CCPWQ06WX3YFW66KF3Z51LNJUROM3TNTK3S22NB3RDLFKUU57OG2FGI40U2U0SKZY8A82' where id=77; -update noar ti set v1='ZP4W6KPAR1T6WTWH2MCFRENMQRJJRB66HEG089L5LM728YT3XIF5RVQJ3HSQRRE7G698ABL2LHUEF8UL53CKSZHMSIBNAJPQZS0NJ9UY88HC9OZFIYPEC522AMQZ55A01ZOE6HW3GK3EIF9P6GKJXDQ1DAKMV7RE2B6DRGDUO0J5PINNG1AYSFCQ8QF0CCPWQ06WX3YFW66KF3Z51LNJUROM3TNTK3S22NB3RDLFKUU57OG2FGI40U2U0SKZY8A82' where id=77; -update noar tt set v2='34NNL1Y93SHGO2RMH8CGKUXEPYHS4GGK7I3EH6ZPS34D2EO6G4G4AXQQHICGC37UI1XGMPH54E0QC6E6EDN4F543YZ5WPQTZWND9V72NW9BC0ZQUAOBQAR60CDGHDY97O95UZHI7HFQBQY5NVXBMGP7UTVIRAANZ9IA015ELU2G7GUB37XZ1Z8VMVK96VRB8056XIQPS2SP1Z57SZ0EZ3YM8IN9G3IDMB54HQ9OFK0QU3BQERN4T5OOR7PXPXE2QN' where id=77; -update noar ti set v2='34NNL1Y93SHGO2RMH8CGKUXEPYHS4GGK7I3EH6ZPS34D2EO6G4G4AXQQHICGC37UI1XGMPH54E0QC6E6EDN4F543YZ5WPQTZWND9V72NW9BC0ZQUAOBQAR60CDGHDY97O95UZHI7HFQBQY5NVXBMGP7UTVIRAANZ9IA015ELU2G7GUB37XZ1Z8VMVK96VRB8056XIQPS2SP1Z57SZ0EZ3YM8IN9G3IDMB54HQ9OFK0QU3BQERN4T5OOR7PXPXE2QN' where id=77; -update noar tt set v3='QQRW0CJ6DVZKHMMCDAN0UYIJVJHDIYAXQ239COEG1Q6CH3DA41E6175QW3FSVI87T9INMJ0EZ15NXPE029KLECDS02L6LW3FVFOUVNIVCOI249MS0OZRN2YNLH3OG8W56LXCOU98NOTOAQECGXVA1304KMFLTZ17MQD5CGFSBFDWCC2F5DRNBAIJHMMW4BACUOEGR8EL8T8XD8L4ETKY4RBA9898QCGI5B7JBQXJ1HV6FBATOQW5IS7N0A4LORH42' where id=77; -update noar ti set v3='QQRW0CJ6DVZKHMMCDAN0UYIJVJHDIYAXQ239COEG1Q6CH3DA41E6175QW3FSVI87T9INMJ0EZ15NXPE029KLECDS02L6LW3FVFOUVNIVCOI249MS0OZRN2YNLH3OG8W56LXCOU98NOTOAQECGXVA1304KMFLTZ17MQD5CGFSBFDWCC2F5DRNBAIJHMMW4BACUOEGR8EL8T8XD8L4ETKY4RBA9898QCGI5B7JBQXJ1HV6FBATOQW5IS7N0A4LORH42' where id=77; -update noar tt set v0='M1TGPFZ27BNJ9HWFB6BWQU9T9J8OXRDSODTL3SMEIYA9J2YG3UIBCNR7YDIH5D3QY81FHBG2WVTO8J9ZA8JGK6GPJG9QD8JXFVI00R9L5KLQQILFULHREK1IN9ABI64EDC081J730AFPLLSUPF6ULW6IVB9DJ1E0J54UMITLZ94VV2JR2CIG1KGU2MYOCT7XB0P6SA7FLBL6KGFVFLJQTITRU0J14JRIQR239Z54YEB5BRSXHVMG5L1UOJQAGOUET' where id=78; -update noar ti set v0='M1TGPFZ27BNJ9HWFB6BWQU9T9J8OXRDSODTL3SMEIYA9J2YG3UIBCNR7YDIH5D3QY81FHBG2WVTO8J9ZA8JGK6GPJG9QD8JXFVI00R9L5KLQQILFULHREK1IN9ABI64EDC081J730AFPLLSUPF6ULW6IVB9DJ1E0J54UMITLZ94VV2JR2CIG1KGU2MYOCT7XB0P6SA7FLBL6KGFVFLJQTITRU0J14JRIQR239Z54YEB5BRSXHVMG5L1UOJQAGOUET' where id=78; -update noar tt set v1='E45HRG2PE82P2VMGLRV8ITBZOIGC0ROVAD2JNN60W9OLJ1MFE083QW3CVV3TB27XNU8YTKO4KFJFHG3W1UASL4AQR1ERT3RSW2OR5U3MDL0A9RJN2SEFG8ICL9UPZSL93UNR4LCR00A6W21O7K3CFP1XL238PS7OR71JTUPSR4GM947O0IXQJB735GGA1R1UNX1PNTBPP12KP3H1LKFCQW4H9HWUSIUZBT8PQI0V36LJ18ZR9D3QYAT9LB6IW7Z61' where id=78; -update noar ti set v1='E45HRG2PE82P2VMGLRV8ITBZOIGC0ROVAD2JNN60W9OLJ1MFE083QW3CVV3TB27XNU8YTKO4KFJFHG3W1UASL4AQR1ERT3RSW2OR5U3MDL0A9RJN2SEFG8ICL9UPZSL93UNR4LCR00A6W21O7K3CFP1XL238PS7OR71JTUPSR4GM947O0IXQJB735GGA1R1UNX1PNTBPP12KP3H1LKFCQW4H9HWUSIUZBT8PQI0V36LJ18ZR9D3QYAT9LB6IW7Z61' where id=78; -update noar tt set v2='LT422FNS340WVO7BROC6N63A63S388BF4TD1NJOVN6M2ULE9USLIZS2CD5GGLO9VIM4ZV07VU6QLA5VFZ10P2AJT5CL1CGW4FK1AESTHRUFNBHFDENW8OY6IWTDG7988B9WARPGM41CGSS6VDH7X84SQ6Z1JQDRWD5Z1HI2EUM9143P7OIGQMPBIZ64QQEMQ5USVWFZ1W8RP8Y23QJMFSYXABVVTXAF56JGCCOTICUTLZ7E6H5L6LJI9CJBLLLG4R' where id=78; -update noar ti set v2='LT422FNS340WVO7BROC6N63A63S388BF4TD1NJOVN6M2ULE9USLIZS2CD5GGLO9VIM4ZV07VU6QLA5VFZ10P2AJT5CL1CGW4FK1AESTHRUFNBHFDENW8OY6IWTDG7988B9WARPGM41CGSS6VDH7X84SQ6Z1JQDRWD5Z1HI2EUM9143P7OIGQMPBIZ64QQEMQ5USVWFZ1W8RP8Y23QJMFSYXABVVTXAF56JGCCOTICUTLZ7E6H5L6LJI9CJBLLLG4R' where id=78; -update noar tt set v3='2RRQQ3G33WUF5HHKU4ZEP20VX1I8YPRAIPYL8AKIP8ZGF3MIHY0K2MA4KFOD6IEGSSWQKBWLERQNS3OQ97CF8CROIC7IJ9FBXIRL39EIB2277KCX5PI977TJX07WP7TZ4XRQTCS26VS3IZFRHE2ECUP2N1G8SGN2DRAXK5APLP39WAN5KEVTN8VBWAGSE3EED3ZLYVR6QXXMZGLDN4QVEAMR9N0IEICCSRAHJLZIH7QS1PM6YWQPBSTXIQIFO9S07' where id=78; -update noar ti set v3='2RRQQ3G33WUF5HHKU4ZEP20VX1I8YPRAIPYL8AKIP8ZGF3MIHY0K2MA4KFOD6IEGSSWQKBWLERQNS3OQ97CF8CROIC7IJ9FBXIRL39EIB2277KCX5PI977TJX07WP7TZ4XRQTCS26VS3IZFRHE2ECUP2N1G8SGN2DRAXK5APLP39WAN5KEVTN8VBWAGSE3EED3ZLYVR6QXXMZGLDN4QVEAMR9N0IEICCSRAHJLZIH7QS1PM6YWQPBSTXIQIFO9S07' where id=78; -update noar tt set v0='GEY2MGKDC0A7ZOV2SCLHGJLN0UFEP867IBZZJ0KHNUKNAGNMTKLOSDO1A3I06AVWSUE5YTNMG4MB72EHJDYZFE82PGOTOFEAMMHSTQS6JTPXHL2JV9EGXXZY79VR271YWQVHPBPG491H57QDTNXJ1NF28RG7MXKRRGIE08SMIJA7OB8HYOKR7S8KAICAAIYQH6UHVG64IKIYA906ELD7KIA0GRSCJ8F9HJ5DD2ACBXWWPGPXY3K5SS1KLRCVYHBV8' where id=79; -update noar ti set v0='GEY2MGKDC0A7ZOV2SCLHGJLN0UFEP867IBZZJ0KHNUKNAGNMTKLOSDO1A3I06AVWSUE5YTNMG4MB72EHJDYZFE82PGOTOFEAMMHSTQS6JTPXHL2JV9EGXXZY79VR271YWQVHPBPG491H57QDTNXJ1NF28RG7MXKRRGIE08SMIJA7OB8HYOKR7S8KAICAAIYQH6UHVG64IKIYA906ELD7KIA0GRSCJ8F9HJ5DD2ACBXWWPGPXY3K5SS1KLRCVYHBV8' where id=79; -update noar tt set v1='AUR8O25HT1TRD66PAM3XUVR1X2UFPNO54QXGDTP03OWAIDQLPEPOQ2Y5YX3O1X9HWFPKM76DWEXSHRDIPR791Q9J30NQA24W5MF6MFBMSVR5DQ1X5V8ZOF93X1H4GK0DLP1Z8FQFDXGGMJ2M8G0RH9838AB8T3GSTLU9Q95XY5RJSV9NQ8XMUMFOX3VNDP4CBL58A57EWDGQO2C63I6TGQULG6W5H3DJT2I7VVN90N6ZNK7CLJ5LR0UHU4MTMWUJ0' where id=79; -update noar ti set v1='AUR8O25HT1TRD66PAM3XUVR1X2UFPNO54QXGDTP03OWAIDQLPEPOQ2Y5YX3O1X9HWFPKM76DWEXSHRDIPR791Q9J30NQA24W5MF6MFBMSVR5DQ1X5V8ZOF93X1H4GK0DLP1Z8FQFDXGGMJ2M8G0RH9838AB8T3GSTLU9Q95XY5RJSV9NQ8XMUMFOX3VNDP4CBL58A57EWDGQO2C63I6TGQULG6W5H3DJT2I7VVN90N6ZNK7CLJ5LR0UHU4MTMWUJ0' where id=79; -update noar tt set v2='HBOTJ0QPHI55D8MEL74B22UE5YGMR4HXPZ85D1X0FIFEY47WAAW44JIAQIH0MHTI4TXEGRR56CZ3IH7OA6DTWFYHCIQLWHMH9THFS46AKSYSSAGKJU3YP81RLTD4LFFLQMYKBWLEXGYEB4XG8ACGU2TR0QX7HT0QYR3LVEUB1LHFS3Q1YPPIJMNTJFMXZNOOWBSOCQYMIYY5F37RHC45X600YYHBCGPM5U7BHI4FVSD16S1XXVGVBFJAPVF0DBH1L' where id=79; -update noar ti set v2='HBOTJ0QPHI55D8MEL74B22UE5YGMR4HXPZ85D1X0FIFEY47WAAW44JIAQIH0MHTI4TXEGRR56CZ3IH7OA6DTWFYHCIQLWHMH9THFS46AKSYSSAGKJU3YP81RLTD4LFFLQMYKBWLEXGYEB4XG8ACGU2TR0QX7HT0QYR3LVEUB1LHFS3Q1YPPIJMNTJFMXZNOOWBSOCQYMIYY5F37RHC45X600YYHBCGPM5U7BHI4FVSD16S1XXVGVBFJAPVF0DBH1L' where id=79; -update noar tt set v3='KLVA79QM3ENX2ZEDQJ0G0YFX7MG38YA7XVGNI74NRSIGCO2140FROZV5S5GUV62XB4X859ZXJHNZY03R02CLTSZY3A66Z9N52S2P8Z8R2PJR3AKZDRKZHLKC59WX7ZLTKOCEKN2TCL3P3ZJ1MKBWBMZE4LPWAVFLQPIUR4A3L599QK6J456QKNVGXTC8EMNBLRMEXW2OFFLHG0MPU9RDOFTZSWRPA84F602YTXRK39WHXWIM6TNWPXT4IBR0IG1BT' where id=79; -update noar ti set v3='KLVA79QM3ENX2ZEDQJ0G0YFX7MG38YA7XVGNI74NRSIGCO2140FROZV5S5GUV62XB4X859ZXJHNZY03R02CLTSZY3A66Z9N52S2P8Z8R2PJR3AKZDRKZHLKC59WX7ZLTKOCEKN2TCL3P3ZJ1MKBWBMZE4LPWAVFLQPIUR4A3L599QK6J456QKNVGXTC8EMNBLRMEXW2OFFLHG0MPU9RDOFTZSWRPA84F602YTXRK39WHXWIM6TNWPXT4IBR0IG1BT' where id=79; -update noar tt set v0='13F7SG1T7D1P1IUD396Y3NKF692WWAOKBT5I0CYSZ3CCLJ3VWAPQCJLD31CFSLN6IRV1GPWEQG0NA1XMW7NHH1CG3DF0Z1NYQJE5UUXHMR79XSRFHHXF3814FOD276ILSAZ5G2KOTKQV61PLIGW5XVFKHJV5O6DW5F4AAWRMXGKT54K1HBAUHC5K60Y60EYZDBVXPFOCRYS61XFI2QCM9ZYJJBDLG9TXL0BZ85DUGLOR3YH5SX54TK92QYPUYULQL' where id=80; -update noar ti set v0='13F7SG1T7D1P1IUD396Y3NKF692WWAOKBT5I0CYSZ3CCLJ3VWAPQCJLD31CFSLN6IRV1GPWEQG0NA1XMW7NHH1CG3DF0Z1NYQJE5UUXHMR79XSRFHHXF3814FOD276ILSAZ5G2KOTKQV61PLIGW5XVFKHJV5O6DW5F4AAWRMXGKT54K1HBAUHC5K60Y60EYZDBVXPFOCRYS61XFI2QCM9ZYJJBDLG9TXL0BZ85DUGLOR3YH5SX54TK92QYPUYULQL' where id=80; -update noar tt set v1='57LW6PGG89D3EYVEKMN3JHTTFVPGO0JJP20MY2ZNJ1OOKV2KKWP2MB7KBN86LAO3W1WAOIUNRU4ZHFBU8LSI95I0A0ZEMRO75BLQV4Z7Y6HALJAUXRFL8K4QXO2BJH1A0XLA5WTISN8FIJS5SUJXMYMFT6GPQS3W3JIO55027QC7Q9B22MCIV0BYVXIWA4RB6R9BA0Y0Q50ZSZ9LXE1RBXYHMQJLWYMZRQNQ90J06P1DK3Y5UAWC3MQ1B1MGD36BE' where id=80; -update noar ti set v1='57LW6PGG89D3EYVEKMN3JHTTFVPGO0JJP20MY2ZNJ1OOKV2KKWP2MB7KBN86LAO3W1WAOIUNRU4ZHFBU8LSI95I0A0ZEMRO75BLQV4Z7Y6HALJAUXRFL8K4QXO2BJH1A0XLA5WTISN8FIJS5SUJXMYMFT6GPQS3W3JIO55027QC7Q9B22MCIV0BYVXIWA4RB6R9BA0Y0Q50ZSZ9LXE1RBXYHMQJLWYMZRQNQ90J06P1DK3Y5UAWC3MQ1B1MGD36BE' where id=80; -update noar tt set v2='ODJUG17MEZYWLG2TVEEKZ9GD8Z35RE87C4HM07SF05KGBJUNCJR31PTR29VWETVYJSZCHPEVGP3JU2IKZRSZMA2M1LPLLTK0HDULTQIJA2UATWJG0CO03Q9AL3HUJMJNIK1VB2LTERNXOIG016LTMLA2O2ZWCR5F3EN1WG9YZQ4NUYDYAA0MUWO2N6HUO9O86M04JDSTLAJW0PNDQ6XQ7TIDJT8C4JEUTZPU6W78H7V5XM4D0W5OT9DLFIZHGJBI4' where id=80; -update noar ti set v2='ODJUG17MEZYWLG2TVEEKZ9GD8Z35RE87C4HM07SF05KGBJUNCJR31PTR29VWETVYJSZCHPEVGP3JU2IKZRSZMA2M1LPLLTK0HDULTQIJA2UATWJG0CO03Q9AL3HUJMJNIK1VB2LTERNXOIG016LTMLA2O2ZWCR5F3EN1WG9YZQ4NUYDYAA0MUWO2N6HUO9O86M04JDSTLAJW0PNDQ6XQ7TIDJT8C4JEUTZPU6W78H7V5XM4D0W5OT9DLFIZHGJBI4' where id=80; -update noar tt set v3='SXUVWLXMZXSDJP6JGBYTFAB8B39TO6H7DUQFRZTGQJBPXMWA66FOOP4HFMEWQ4T2WDP2FRRF2HUHEOYZDQ2XHFSFSSRSXAW0NRL9478791RSMAREXVNVUXCAVIR5UPTJF2V4TT05FYD4K4PBGBZWUMSL0SU21S6C54SY8AO4U74DP7L16NQL1NFNZXEB8B3YAGBN7E97R4BXDAAWIFSLFWDSK1RGI48B3I9RXBR2LQXJL469L29WZRC4XD7GYPW2B' where id=80; -update noar ti set v3='SXUVWLXMZXSDJP6JGBYTFAB8B39TO6H7DUQFRZTGQJBPXMWA66FOOP4HFMEWQ4T2WDP2FRRF2HUHEOYZDQ2XHFSFSSRSXAW0NRL9478791RSMAREXVNVUXCAVIR5UPTJF2V4TT05FYD4K4PBGBZWUMSL0SU21S6C54SY8AO4U74DP7L16NQL1NFNZXEB8B3YAGBN7E97R4BXDAAWIFSLFWDSK1RGI48B3I9RXBR2LQXJL469L29WZRC4XD7GYPW2B' where id=80; -update noar tt set v0='AMLT048K0KR7Q5L8C2BYU1BNGZ3081ZJOGPUCL9DD8XS7V3DVMJE6C47MLFE8SWHZLEEV7E2S6Z9FOP1FH61NLUU6463OUAWB0WF6JZWM3DNNSUHNQ6WNGB7RO96VRSS2GDYIH7HVKEM090TNV7VSBBQ0K7I6OHNSBDJKCV4E30NI4UUV978CCWKCXL49EL197ZZJSTFZHP05GGDPKXCMSHY91LR2VJYGPBD4K0W8U12Y1QHXAPB73UTZG662KSKO' where id=81; -update noar ti set v0='AMLT048K0KR7Q5L8C2BYU1BNGZ3081ZJOGPUCL9DD8XS7V3DVMJE6C47MLFE8SWHZLEEV7E2S6Z9FOP1FH61NLUU6463OUAWB0WF6JZWM3DNNSUHNQ6WNGB7RO96VRSS2GDYIH7HVKEM090TNV7VSBBQ0K7I6OHNSBDJKCV4E30NI4UUV978CCWKCXL49EL197ZZJSTFZHP05GGDPKXCMSHY91LR2VJYGPBD4K0W8U12Y1QHXAPB73UTZG662KSKO' where id=81; -update noar tt set v1='V6IOC4DMKHUVG4T0VWRVYAYWG7STCVEZEPZWMTE0HIFTR7YBGR8BUY4E8ZSPYVVACFN9MSZZ8LN5Q5FRG8KSNVH8Z32P9SCJSUUHKCZPYC1DPC0ERIZDXOL2NWR1VOLBY688G9I6NI71BQHEGYENHP2F3C0W3C24GUYF6UE26TF64I9KY6HQ0UYBCD9JUTV934RJ13CEEIMUANYVDKKWKO353XW8U3F6ZJCBHOCZXBMH98KNKBZC8R41FOACHC2OG' where id=81; -update noar ti set v1='V6IOC4DMKHUVG4T0VWRVYAYWG7STCVEZEPZWMTE0HIFTR7YBGR8BUY4E8ZSPYVVACFN9MSZZ8LN5Q5FRG8KSNVH8Z32P9SCJSUUHKCZPYC1DPC0ERIZDXOL2NWR1VOLBY688G9I6NI71BQHEGYENHP2F3C0W3C24GUYF6UE26TF64I9KY6HQ0UYBCD9JUTV934RJ13CEEIMUANYVDKKWKO353XW8U3F6ZJCBHOCZXBMH98KNKBZC8R41FOACHC2OG' where id=81; -update noar tt set v2='YNK9KKE2ATAVT3RSUJ5QXUGS0GEAF1SITNX07D5LO24E5O2XY3FIJ0FVHVRA9U7WLF2Z8JZ6FWRX94G8SLMD3XB87YGCD1YXBWJN8R6Y8M4HODECUZG33JHLKANPH0ZY4AZSHL8VNG7R4XDJGIX6ZECZDWJ7XB1UPLTV1NJUCIWY78SLBQLKF9TDJZVJ2KQACAGYLKN3PX0FYV8VRKBRL2SU7TXOHRAY6BDZUQ492KETRCET7VCEUM1YU5B630TLQ' where id=81; -update noar ti set v2='YNK9KKE2ATAVT3RSUJ5QXUGS0GEAF1SITNX07D5LO24E5O2XY3FIJ0FVHVRA9U7WLF2Z8JZ6FWRX94G8SLMD3XB87YGCD1YXBWJN8R6Y8M4HODECUZG33JHLKANPH0ZY4AZSHL8VNG7R4XDJGIX6ZECZDWJ7XB1UPLTV1NJUCIWY78SLBQLKF9TDJZVJ2KQACAGYLKN3PX0FYV8VRKBRL2SU7TXOHRAY6BDZUQ492KETRCET7VCEUM1YU5B630TLQ' where id=81; -update noar tt set v3='9NHLMYS4OLQ6BJF5YP5O2CANJ8NBUVY3ZA3JJ95EK08YB4DWWS0ATU7E9XWQFF6P9RL6K10ZNYYIU8UEE5ULOX7D5Y6XXYHZU6UFE5BJEZMMBTBIB7VJ8A3YRM4IE8BX7C90M4ZX5S8148M8277P68FDZKW8YLUOE9SN5AJORM655P99TYHD8E7N7VMZKNGCCNX3K6S0G7ZH1RMK2ZMY8JCDUWV5N0UGXWAHWCL1X78H9OC41LU0GT5EI4IMEUMG1' where id=81; -update noar ti set v3='9NHLMYS4OLQ6BJF5YP5O2CANJ8NBUVY3ZA3JJ95EK08YB4DWWS0ATU7E9XWQFF6P9RL6K10ZNYYIU8UEE5ULOX7D5Y6XXYHZU6UFE5BJEZMMBTBIB7VJ8A3YRM4IE8BX7C90M4ZX5S8148M8277P68FDZKW8YLUOE9SN5AJORM655P99TYHD8E7N7VMZKNGCCNX3K6S0G7ZH1RMK2ZMY8JCDUWV5N0UGXWAHWCL1X78H9OC41LU0GT5EI4IMEUMG1' where id=81; -update noar tt set v0='DOFCX4P9HYBM8C1ZX6D1AS61K97GR9JFIU2OVM8NH2LKE9ZTZ19RP8KN9I6LYBV8H6KWXETTROSGU32JY0LUC7MOF1N7FWDZF6IIUNABG33LSB8G40OMNMUI9O9QW6A957TFVICO1ZU07HKCSX1N3052GRMTDOB6KZHUVNKKTOQL4V6TC9RFK87HJP64L7SRRBMDHABRI75KAI7CC874N5X8R343ZKQURXTJ30ISRHG9GP9KEHLV7XOT1YHPSUBUP' where id=82; -update noar ti set v0='DOFCX4P9HYBM8C1ZX6D1AS61K97GR9JFIU2OVM8NH2LKE9ZTZ19RP8KN9I6LYBV8H6KWXETTROSGU32JY0LUC7MOF1N7FWDZF6IIUNABG33LSB8G40OMNMUI9O9QW6A957TFVICO1ZU07HKCSX1N3052GRMTDOB6KZHUVNKKTOQL4V6TC9RFK87HJP64L7SRRBMDHABRI75KAI7CC874N5X8R343ZKQURXTJ30ISRHG9GP9KEHLV7XOT1YHPSUBUP' where id=82; -update noar tt set v1='P951KZJ7IBMVZ5FB6QOSCN1PJO04B2515L6CHATG9DBDXL97UIY6S8K9JVAN3JFZG8FC1XNDNSR8KDGWY8XOFIY0RI5Y7MI8XVHUXWGT33I0X2PWPAFG9XXZXC1YMHMH75Y9SN8C7NOED28NDG95JGZDRUSWER42KOVCXBXMIR1586CXTRUUR5AMTB6YYXY8876VZ4TSZPILMZHKBYAMC8AJPVG12FYKTBM7VTTNLH5ITX4B5F55YQHHR3D797DU0' where id=82; -update noar ti set v1='P951KZJ7IBMVZ5FB6QOSCN1PJO04B2515L6CHATG9DBDXL97UIY6S8K9JVAN3JFZG8FC1XNDNSR8KDGWY8XOFIY0RI5Y7MI8XVHUXWGT33I0X2PWPAFG9XXZXC1YMHMH75Y9SN8C7NOED28NDG95JGZDRUSWER42KOVCXBXMIR1586CXTRUUR5AMTB6YYXY8876VZ4TSZPILMZHKBYAMC8AJPVG12FYKTBM7VTTNLH5ITX4B5F55YQHHR3D797DU0' where id=82; -update noar tt set v2='JUZG3XE2ETQ2HU2T1T20X3TB7O2H2SL4375I810IQ4DBZHNNP8AK7H5970SWXTNK2PRBZF3PRV1KT8771G7QST9F29PDK3RK6C6NGV0WKW3FBT6D9DGKNPZWJ5GCZFHJSRV0X4VOIKVS8A40D8BWZN4SPDE32VFBCJ052NJ4TZMF9SDNL0SGNX8MUPIBCLTM4UUMI7XZ2QTPYN10TLI8OJHKE0XUU3J2X6WD0ZMW5TPWJQG41OZMWNDCOFQ7EYPXG' where id=82; -update noar ti set v2='JUZG3XE2ETQ2HU2T1T20X3TB7O2H2SL4375I810IQ4DBZHNNP8AK7H5970SWXTNK2PRBZF3PRV1KT8771G7QST9F29PDK3RK6C6NGV0WKW3FBT6D9DGKNPZWJ5GCZFHJSRV0X4VOIKVS8A40D8BWZN4SPDE32VFBCJ052NJ4TZMF9SDNL0SGNX8MUPIBCLTM4UUMI7XZ2QTPYN10TLI8OJHKE0XUU3J2X6WD0ZMW5TPWJQG41OZMWNDCOFQ7EYPXG' where id=82; -update noar tt set v3='YP41PXNDKYD7BZMXXC6ATY92DIBXGKOES918KQMD2P44FFMWJVYIZAD00SWHN2SRF160YOA6HBB1HNIOC8ZD4VFRDJA4E4WQS0P49N8MGJI73BGZVR2Q8EG8SVXGVY49SCL40E9LE7BN7BT0NDIMFINT63SKSU84QAQOLX3UKZIYTLO8KC1YE1O3TO8277J92DLGVP8P7AMQ6O64PYGIIDVLW39YZX0YPIQNR88561W2FKW8PL7HRDQOLGOKUSM6S' where id=82; -update noar ti set v3='YP41PXNDKYD7BZMXXC6ATY92DIBXGKOES918KQMD2P44FFMWJVYIZAD00SWHN2SRF160YOA6HBB1HNIOC8ZD4VFRDJA4E4WQS0P49N8MGJI73BGZVR2Q8EG8SVXGVY49SCL40E9LE7BN7BT0NDIMFINT63SKSU84QAQOLX3UKZIYTLO8KC1YE1O3TO8277J92DLGVP8P7AMQ6O64PYGIIDVLW39YZX0YPIQNR88561W2FKW8PL7HRDQOLGOKUSM6S' where id=82; -update noar tt set v0='0FCLZOQDMCW8E1R4GHV75SWZRAFRXSD2RG8BDUOOLK6AXBIJP6SBYL6D9L6AK9R646ZVD6Q4NWQR2VO1L7BT6WU9WIRBYMOIJ53SN4BZV0Y3YDT7XESFLFBJQ4K262P0XMJMYBSEWQEMGJEOJS9Q0YO31STLYJGYABDGDTLP5TCO87XKHGLOVEPB1YW4CEVYC7TJ4XR23TK0ABQB3R2QXPDN9THBV1ZM2X7SG4KM5H1L1SS25KM5D8OTIL3BH0GKT' where id=83; -update noar ti set v0='0FCLZOQDMCW8E1R4GHV75SWZRAFRXSD2RG8BDUOOLK6AXBIJP6SBYL6D9L6AK9R646ZVD6Q4NWQR2VO1L7BT6WU9WIRBYMOIJ53SN4BZV0Y3YDT7XESFLFBJQ4K262P0XMJMYBSEWQEMGJEOJS9Q0YO31STLYJGYABDGDTLP5TCO87XKHGLOVEPB1YW4CEVYC7TJ4XR23TK0ABQB3R2QXPDN9THBV1ZM2X7SG4KM5H1L1SS25KM5D8OTIL3BH0GKT' where id=83; -update noar tt set v1='6IFMEMMDPF4GHEWAN2USB2WH4XHP17EXAQFQ63ETCBA7TSZZ0H1WHD4J53W7WMZXXHGGJVKCWACCLOXM380GI8IE9T60MF7T5FQVWYYU22WU9UFZOB4OBIRC74LMIOSOM8FRTKTWTOA2OKPPEV3534SGVZT58A5W1KIXVFP0SLQRGZXLB8XA8F33EXQ04R6W4ZZH14PKQ7PDEOXBGE8CIVSU1U3BZ56Q07UDF0YYKE9Z4KJHH7451XC1WYS06B82I' where id=83; -update noar ti set v1='6IFMEMMDPF4GHEWAN2USB2WH4XHP17EXAQFQ63ETCBA7TSZZ0H1WHD4J53W7WMZXXHGGJVKCWACCLOXM380GI8IE9T60MF7T5FQVWYYU22WU9UFZOB4OBIRC74LMIOSOM8FRTKTWTOA2OKPPEV3534SGVZT58A5W1KIXVFP0SLQRGZXLB8XA8F33EXQ04R6W4ZZH14PKQ7PDEOXBGE8CIVSU1U3BZ56Q07UDF0YYKE9Z4KJHH7451XC1WYS06B82I' where id=83; -update noar tt set v2='MKRVT6JAIFQOWYG4D7L4M36HDUP5438X4HPFGCRTPCIMMXIP4VMFDVWL8NV4LCMZCD2NG09RM0U63UXBSHGY73MO142C4X0O499TQ9TSXEMDYVI1UN4F9QX787NROBJIH9KR0A2IJVOODSZD5Q3137O48N4TUUFWCH5W5YUJPNSZJ282GQF094F979CSQ72TCQOJ05JED1Q6WIGFTBPOML7MEJKII9VYJLMU3NXC5C9GODU4WYNGEQ1S0JN5R0G9H' where id=83; -update noar ti set v2='MKRVT6JAIFQOWYG4D7L4M36HDUP5438X4HPFGCRTPCIMMXIP4VMFDVWL8NV4LCMZCD2NG09RM0U63UXBSHGY73MO142C4X0O499TQ9TSXEMDYVI1UN4F9QX787NROBJIH9KR0A2IJVOODSZD5Q3137O48N4TUUFWCH5W5YUJPNSZJ282GQF094F979CSQ72TCQOJ05JED1Q6WIGFTBPOML7MEJKII9VYJLMU3NXC5C9GODU4WYNGEQ1S0JN5R0G9H' where id=83; -update noar tt set v3='6M2KK5N3FS7VS20V3O2P68RZJOU1DQ3KERUSM2ZXHWAHA03JAZGND8X1ETQMVSIHPW8CVEJBXEW69NCTS74P9872EBRDBMJ2WC1EZ6N0V90XCGZU7UAEXYHRN447P03IYAOC14KLHMKLW7HHUQOWWQ3FX34DR9PWIJD0KH135CXS9ZPYDYACJHD0NHM07JDU3AOJWQ6C1S4GQEM86M6BNIAP2LJEM8OSHVDJB2PEWB7BHTSJFBEFOP3OIDG8L4J4C' where id=83; -update noar ti set v3='6M2KK5N3FS7VS20V3O2P68RZJOU1DQ3KERUSM2ZXHWAHA03JAZGND8X1ETQMVSIHPW8CVEJBXEW69NCTS74P9872EBRDBMJ2WC1EZ6N0V90XCGZU7UAEXYHRN447P03IYAOC14KLHMKLW7HHUQOWWQ3FX34DR9PWIJD0KH135CXS9ZPYDYACJHD0NHM07JDU3AOJWQ6C1S4GQEM86M6BNIAP2LJEM8OSHVDJB2PEWB7BHTSJFBEFOP3OIDG8L4J4C' where id=83; -update noar tt set v0='B25EHGXYV5JOK9HJOHC1W0N00KGR7WXAL3LOS8XP26N6GPDH0J66NF1MFIPTVXB8AMQR92NO7JCU6HM5PIQUMLEKQKOUNTIDI7ILAHUBNDZNA20JX99R5FGQNVMAOBZ7DFMD7UA8OBQ81VXZA1F49M50KURP6WZPWW6C9Q15E2SJFPSM2TSSKTNJKHJJLKI84NDGSITSR4YCKPPPPNGPLZRUPSAIBRD2USLOLGS7L8X9TS35TQP5368KVXF5T4VTL' where id=84; -update noar ti set v0='B25EHGXYV5JOK9HJOHC1W0N00KGR7WXAL3LOS8XP26N6GPDH0J66NF1MFIPTVXB8AMQR92NO7JCU6HM5PIQUMLEKQKOUNTIDI7ILAHUBNDZNA20JX99R5FGQNVMAOBZ7DFMD7UA8OBQ81VXZA1F49M50KURP6WZPWW6C9Q15E2SJFPSM2TSSKTNJKHJJLKI84NDGSITSR4YCKPPPPNGPLZRUPSAIBRD2USLOLGS7L8X9TS35TQP5368KVXF5T4VTL' where id=84; -update noar tt set v1='TWJGKDFNMYNGMY7H75PIGUTMCPGM4CZMVPTKBFYTZ3B11NUCJ3TSZ1ZONHZ4V561J4SIOWAHIQZY8HRBVIMXXYVQMMF32Q1NIPC0V7DDUJYY7JZSLQFVQLPDBSDH4VT08XOXWZE6OV55ZFK2BMP63G8N2DMHZ6OHTLETFQYVED2UNIZ6E2MP1N4NR439AP6QTWF4PFZDFBIST93JIZRXC3RYF44VPGPKPZTY3DT115M8N9NVCW1FPUJE1WI59IY4O' where id=84; -update noar ti set v1='TWJGKDFNMYNGMY7H75PIGUTMCPGM4CZMVPTKBFYTZ3B11NUCJ3TSZ1ZONHZ4V561J4SIOWAHIQZY8HRBVIMXXYVQMMF32Q1NIPC0V7DDUJYY7JZSLQFVQLPDBSDH4VT08XOXWZE6OV55ZFK2BMP63G8N2DMHZ6OHTLETFQYVED2UNIZ6E2MP1N4NR439AP6QTWF4PFZDFBIST93JIZRXC3RYF44VPGPKPZTY3DT115M8N9NVCW1FPUJE1WI59IY4O' where id=84; -update noar tt set v2='SJOWZC3K6H34AAX7NEJPNQAINLA16GL0XPUGWWXEU6W35MV4VMLG5I5XY98ZO8KORGXMSP2XAZLAY8DF12D93TZQCZROGC2FGH6CXA7KTJ69HHW4P4MT43IY8H5U73Z0JOTK612SPYERDYXZ74BDLESGGRNIY1XTE220RMIDJ6TGBTYSFC263J4BE0GFUKNTOYBE1A78NPECPFX9LYSKCO2KPJ276992T6HVM3P7UQ8VIA8A3DI10RR4NB4LOUKYJ' where id=84; -update noar ti set v2='SJOWZC3K6H34AAX7NEJPNQAINLA16GL0XPUGWWXEU6W35MV4VMLG5I5XY98ZO8KORGXMSP2XAZLAY8DF12D93TZQCZROGC2FGH6CXA7KTJ69HHW4P4MT43IY8H5U73Z0JOTK612SPYERDYXZ74BDLESGGRNIY1XTE220RMIDJ6TGBTYSFC263J4BE0GFUKNTOYBE1A78NPECPFX9LYSKCO2KPJ276992T6HVM3P7UQ8VIA8A3DI10RR4NB4LOUKYJ' where id=84; -update noar tt set v3='SOCL23PHZJK56QAB7Z6395PU6EP6M6AKKPJQUCO9LP0IV0XH6CEDV8BXLZ38FBHVYIMBDLR0WLIGSJHAH3OTYWEMHRV64X5NHAH9EZ0J5MIUVK8T1BDBYU94LX0AAF3UFBNV0IP9WIT8991OD3ZBUTBQPI27GMOFUGS1QL59N5MKI0ONF7ZEAYO5T0ILEYLVPX1U7I2GYF1JEED33HQCRQ9YPJUWHWP9NGLTBF3FFKR8RZD64DYL4R0M52GWZQOVY' where id=84; -update noar ti set v3='SOCL23PHZJK56QAB7Z6395PU6EP6M6AKKPJQUCO9LP0IV0XH6CEDV8BXLZ38FBHVYIMBDLR0WLIGSJHAH3OTYWEMHRV64X5NHAH9EZ0J5MIUVK8T1BDBYU94LX0AAF3UFBNV0IP9WIT8991OD3ZBUTBQPI27GMOFUGS1QL59N5MKI0ONF7ZEAYO5T0ILEYLVPX1U7I2GYF1JEED33HQCRQ9YPJUWHWP9NGLTBF3FFKR8RZD64DYL4R0M52GWZQOVY' where id=84; -update noar tt set v0='P28JOIN7NYDCQP380JPX31M167CFI19Y9QQNA7LEDB4OCVDS93H6QINC4MPPE6MMJ7Y4P1KV3VSYU496XDD6D6TZZM2S216R7A2VUES2QH9GM3861AN1Q2J9FBQF9LVV81GVHT7QCRC3G8FP6L0OQJQSLB6H434MHEYW56NJ6H8YRUGKIQ0D9EBHM0K29PC6RG8JMMRW3C95DYUURIXNYYM0LAARQ2GTXUWNFH3S2LNX1ST0ZUU77RR3OSMZBIPJC' where id=85; -update noar ti set v0='P28JOIN7NYDCQP380JPX31M167CFI19Y9QQNA7LEDB4OCVDS93H6QINC4MPPE6MMJ7Y4P1KV3VSYU496XDD6D6TZZM2S216R7A2VUES2QH9GM3861AN1Q2J9FBQF9LVV81GVHT7QCRC3G8FP6L0OQJQSLB6H434MHEYW56NJ6H8YRUGKIQ0D9EBHM0K29PC6RG8JMMRW3C95DYUURIXNYYM0LAARQ2GTXUWNFH3S2LNX1ST0ZUU77RR3OSMZBIPJC' where id=85; -update noar tt set v1='BOWLIV9HON29C29AWYSNPSN5YW8RZCDTV2NWTX9BQNHOL71SL6W2FI12LUYAGLIIYAIQ53UFMMB8ZL8AM88OGWHAFCWKM1CAXMB6CMJ33U3YOVKQKR45D356GN3TLOTJJQIR5T50BEQQVCEQ0WQKA18ZWCWQWW6M04MSTY85KJOO46LS891KU89TYB4SDVDNJJNR83LS7EPBYAI3WLFFBVOIXN7SUPEJMB4C96XTH9VZ20MOFE50EGPCPJTID024D' where id=85; -update noar ti set v1='BOWLIV9HON29C29AWYSNPSN5YW8RZCDTV2NWTX9BQNHOL71SL6W2FI12LUYAGLIIYAIQ53UFMMB8ZL8AM88OGWHAFCWKM1CAXMB6CMJ33U3YOVKQKR45D356GN3TLOTJJQIR5T50BEQQVCEQ0WQKA18ZWCWQWW6M04MSTY85KJOO46LS891KU89TYB4SDVDNJJNR83LS7EPBYAI3WLFFBVOIXN7SUPEJMB4C96XTH9VZ20MOFE50EGPCPJTID024D' where id=85; -update noar tt set v2='SOUR5AWU95987LA1BKJSKXN6LQCGBTRMTTDTWEFAGSE9SPIUJHTYMX83MVKE4GR61YQ2VZ9FCF7U5Q8Y4Q7363WBRAHGMSUWNVIJMXD5LGNWHKQSWUC37VK9B4FGTCDLQ000NOZLVE6D5K1OR31K271BLNDSPV2MINO0KGJUYG7X7OYJI3MCO7OPMUYUW4BQ609BTX86LNPBWWPX9L4P2PB2HINDX4EVNH4Y6DW5ADFZJ265SUNFL6LHPNS2J7852' where id=85; -update noar ti set v2='SOUR5AWU95987LA1BKJSKXN6LQCGBTRMTTDTWEFAGSE9SPIUJHTYMX83MVKE4GR61YQ2VZ9FCF7U5Q8Y4Q7363WBRAHGMSUWNVIJMXD5LGNWHKQSWUC37VK9B4FGTCDLQ000NOZLVE6D5K1OR31K271BLNDSPV2MINO0KGJUYG7X7OYJI3MCO7OPMUYUW4BQ609BTX86LNPBWWPX9L4P2PB2HINDX4EVNH4Y6DW5ADFZJ265SUNFL6LHPNS2J7852' where id=85; -update noar tt set v3='OFT95IE0A713JR984C12GPELKFJXHFK4C9FH293BU8BTCVTP2USR6Q1XIVV2U5CIBVYPK6CYMLCFZKWGSO6QTL7P6XERZK5YLHQSLERKR488COK39IF97LC5V1TAEJB30EUM2S7UIP4UNZUC0C9FT5SE6JJZ881CSB7I654KEBIVM6JDI833Z6MQ62WDQIWJU6WSG9SNSAYN0SRCPDAE4TFWBXTV1P0T1CDH94FRUUYYG6PTMSMNXP2LIQPNHI6AX' where id=85; -update noar ti set v3='OFT95IE0A713JR984C12GPELKFJXHFK4C9FH293BU8BTCVTP2USR6Q1XIVV2U5CIBVYPK6CYMLCFZKWGSO6QTL7P6XERZK5YLHQSLERKR488COK39IF97LC5V1TAEJB30EUM2S7UIP4UNZUC0C9FT5SE6JJZ881CSB7I654KEBIVM6JDI833Z6MQ62WDQIWJU6WSG9SNSAYN0SRCPDAE4TFWBXTV1P0T1CDH94FRUUYYG6PTMSMNXP2LIQPNHI6AX' where id=85; -update noar tt set v0='7UELP5C694PXYWVGALCEANW32QF7VTKTW6JVU45W8Q84U56ZDT5ZXVA0SXC451E1YDVRHZ6G1MYAX80KDFB9KM6PYEC4IZ6AH0W4HQZE9AMUP84OFRY7BISUIUJX4NUFULGOQMBRRT3M2JEK5J166BGAVF0CH9EF29QLQGO0TD1Z57JG9R4SAA9X5O5A75RQPO0TLWP3RSFP6WMWW7T0PNF5FW54N1DUFMHOPZ8C7VBA1W7XEN9SRHZX01IPO0SIY' where id=86; -update noar ti set v0='7UELP5C694PXYWVGALCEANW32QF7VTKTW6JVU45W8Q84U56ZDT5ZXVA0SXC451E1YDVRHZ6G1MYAX80KDFB9KM6PYEC4IZ6AH0W4HQZE9AMUP84OFRY7BISUIUJX4NUFULGOQMBRRT3M2JEK5J166BGAVF0CH9EF29QLQGO0TD1Z57JG9R4SAA9X5O5A75RQPO0TLWP3RSFP6WMWW7T0PNF5FW54N1DUFMHOPZ8C7VBA1W7XEN9SRHZX01IPO0SIY' where id=86; -update noar tt set v1='28TC3K6P40MD5AU2WQ6SVT0RRJB3OI687V90NGA2C24IGDWMV8FQRXFSROJT88HTX2DD4147FZMXT4UQIDLX6SNZOWGTWYEXY1X4DLI98UER1L5VYEPPPTBD5V5W31VER1G11JR2OZEKIWB9KC36ZE2HB64NF7ADH4W5FXQ0USR0N2O20P7M09V6EMQF9UTBEE30I8Y5E1DA56BZGWFI7M6B0V95K8C4KZJXAQ850B364JTUQ43ZGLYHEDWTO6D5A' where id=86; -update noar ti set v1='28TC3K6P40MD5AU2WQ6SVT0RRJB3OI687V90NGA2C24IGDWMV8FQRXFSROJT88HTX2DD4147FZMXT4UQIDLX6SNZOWGTWYEXY1X4DLI98UER1L5VYEPPPTBD5V5W31VER1G11JR2OZEKIWB9KC36ZE2HB64NF7ADH4W5FXQ0USR0N2O20P7M09V6EMQF9UTBEE30I8Y5E1DA56BZGWFI7M6B0V95K8C4KZJXAQ850B364JTUQ43ZGLYHEDWTO6D5A' where id=86; -update noar tt set v2='APW7X4NNHGR8E8JKFQEXT6MV6TFPTKBY5BQ4ZAN5TWLV5JV2Q66U00ICNQHCBQY2SQ0LMS7NV4GWKGH5QNESTH2V9JNVCM9D2Z2J5QC2O39S8ME660EJ6E1A1GX04MSTX4N3CWK5L3XXOFOW236D1MODSB9UEESLROZO2XXC1W9WEZ0DVUQW3HV8OO7EHCKPHSUY9OS61US3AXATC5K163F4WRNJ7QOI7FTGXGI8MLUH0ZHRN1KR1OTEWWBB6B43M' where id=86; -update noar ti set v2='APW7X4NNHGR8E8JKFQEXT6MV6TFPTKBY5BQ4ZAN5TWLV5JV2Q66U00ICNQHCBQY2SQ0LMS7NV4GWKGH5QNESTH2V9JNVCM9D2Z2J5QC2O39S8ME660EJ6E1A1GX04MSTX4N3CWK5L3XXOFOW236D1MODSB9UEESLROZO2XXC1W9WEZ0DVUQW3HV8OO7EHCKPHSUY9OS61US3AXATC5K163F4WRNJ7QOI7FTGXGI8MLUH0ZHRN1KR1OTEWWBB6B43M' where id=86; -update noar tt set v3='TUUK19F8KL53VN9J1OPP65CU9ISFI6910WXSOY1Q1R9TD8WKS2NYADG92QHDP3H30DMWN316A0E3YV3FVUJ7FHWGCQX5KBMFHX2M9XBF2PM68E90AXQCYJX8ISMVQIPGV1WNKJX9VQ8SD0QLUIMUQ8DKHC4W4H33FTBLCAUBHIHAJSUM4HJF31VT7KVHD46II6FE641H9IMDATO61QIZZ3193Y8NI74NBI8PU84B6WBU0M474BLVN37S3SVDXAK2K' where id=86; -update noar ti set v3='TUUK19F8KL53VN9J1OPP65CU9ISFI6910WXSOY1Q1R9TD8WKS2NYADG92QHDP3H30DMWN316A0E3YV3FVUJ7FHWGCQX5KBMFHX2M9XBF2PM68E90AXQCYJX8ISMVQIPGV1WNKJX9VQ8SD0QLUIMUQ8DKHC4W4H33FTBLCAUBHIHAJSUM4HJF31VT7KVHD46II6FE641H9IMDATO61QIZZ3193Y8NI74NBI8PU84B6WBU0M474BLVN37S3SVDXAK2K' where id=86; -update noar tt set v0='W924NAW8RD4RSFVX8J7UOLLJTBENRK0M2W3QCMSGD27WIYXHFUAR98KP309MQVTM89F5SDALA915L5QN1QPV8N18G21D64JL1A0ESHTFC2A3AY2UZ86JXTJFDRILIK55KZMZHUCFQUHUSSO8FKMKN2HBXT6YPKYNZ2Y3VBGN8ON490MHVR8PF2OPSNXWLN6MNAWDNE8TWXIY3S38FRJO53V5WESJX2APQBQS2PVYSZ1AA2RYF49TU6V3IMV7CMP7K' where id=87; -update noar ti set v0='W924NAW8RD4RSFVX8J7UOLLJTBENRK0M2W3QCMSGD27WIYXHFUAR98KP309MQVTM89F5SDALA915L5QN1QPV8N18G21D64JL1A0ESHTFC2A3AY2UZ86JXTJFDRILIK55KZMZHUCFQUHUSSO8FKMKN2HBXT6YPKYNZ2Y3VBGN8ON490MHVR8PF2OPSNXWLN6MNAWDNE8TWXIY3S38FRJO53V5WESJX2APQBQS2PVYSZ1AA2RYF49TU6V3IMV7CMP7K' where id=87; -update noar tt set v1='1WVKVB3U3UUIH5H5PQC1QY6AMRILRTZMDDH1I2DA6TTPEFLY0TRLWJ4TPO7LWIMJZPPO3NF0TV8FAK8C0EQFUYS33H9VQJ5AWOO8RQ3J9VG0ZKOTDC2Y0QBKFVB673WGK3KNLDAIJ0C3X4B39ZV6N8ZJVL4QNJ9QKPAE1DLHK51ADHMVP9Z5BV3GZ7TDBQIRJ4IXF5RAUL5G0XSMO2GNRFRH8GB9G6EBA3SJALT4H888Q271V7F80BH8TC3B8QTTU' where id=87; -update noar ti set v1='1WVKVB3U3UUIH5H5PQC1QY6AMRILRTZMDDH1I2DA6TTPEFLY0TRLWJ4TPO7LWIMJZPPO3NF0TV8FAK8C0EQFUYS33H9VQJ5AWOO8RQ3J9VG0ZKOTDC2Y0QBKFVB673WGK3KNLDAIJ0C3X4B39ZV6N8ZJVL4QNJ9QKPAE1DLHK51ADHMVP9Z5BV3GZ7TDBQIRJ4IXF5RAUL5G0XSMO2GNRFRH8GB9G6EBA3SJALT4H888Q271V7F80BH8TC3B8QTTU' where id=87; -update noar tt set v2='X8CTNJVJXUM3AEPJEPAVUIZ69FDL6YGCIUEYOY3E2L8NAWP6OOXJWHWNM5E0DVD0L8KEOS2F5FOHT4C42ZQ8JJBAC1V4C8H0GNVD81XU0A9LYBWLK948QQLVLJ89XYQ5RNLSWVHJ3460TKYUTWEHF9AA9OAZ8WTBCSYNQEX8PO1AGWXLLPKPVI4DIO2VTQNDT5DU158Q2JXM5CBEP7RGHLPA3JSU77AN5VMIJ655RZWVTQ10GWH5UDGB2FX7KCS06' where id=87; -update noar ti set v2='X8CTNJVJXUM3AEPJEPAVUIZ69FDL6YGCIUEYOY3E2L8NAWP6OOXJWHWNM5E0DVD0L8KEOS2F5FOHT4C42ZQ8JJBAC1V4C8H0GNVD81XU0A9LYBWLK948QQLVLJ89XYQ5RNLSWVHJ3460TKYUTWEHF9AA9OAZ8WTBCSYNQEX8PO1AGWXLLPKPVI4DIO2VTQNDT5DU158Q2JXM5CBEP7RGHLPA3JSU77AN5VMIJ655RZWVTQ10GWH5UDGB2FX7KCS06' where id=87; -update noar tt set v3='20WIS5WIPC05JWKY4TIGBXUBJRX6GT8HTOQSAHCKY6PHOQEF4230DZWMTJ342ACJRBXLKCHNTT0ZSXVPEGS33RB8ISHYQKZKAQ1TM4U9448OZ2VML6HH9Q105H1722V2OU80KWAUHNUYZXS5XUSJXKX4P56ALCJ35A9R58TYXFKIMNGF76MKIA5PRKRNN8PG7E3RLST2ROQWPS2KDU21CPDNC0BW4566Z5TXE26W7W2K6HHW8K8B63GZG3FCQTDT8' where id=87; -update noar ti set v3='20WIS5WIPC05JWKY4TIGBXUBJRX6GT8HTOQSAHCKY6PHOQEF4230DZWMTJ342ACJRBXLKCHNTT0ZSXVPEGS33RB8ISHYQKZKAQ1TM4U9448OZ2VML6HH9Q105H1722V2OU80KWAUHNUYZXS5XUSJXKX4P56ALCJ35A9R58TYXFKIMNGF76MKIA5PRKRNN8PG7E3RLST2ROQWPS2KDU21CPDNC0BW4566Z5TXE26W7W2K6HHW8K8B63GZG3FCQTDT8' where id=87; -update noar tt set v0='U97O0SL9JV96D6A2D39Z50YV8SYRT1B4SZB6UTU6QDH3BFUUQJJAWG30Q58GIGK7COKJEDE0K7ILLCYFI7I0T1KHNGFVDR2IXN8HGVAPZ4WGQCZZPVLFNYHSG5MRCUWTVX2M5C12ZWJ7VBDX4X0V4J7Z3M0WFKPA205P0H2VKGDZJT7ZJYH5YNUVGITKUCZFFWCTC4HNT7XWOHM40BHLJ2G35JBX53VBI39IY2G9AAR2BNGS5A1U9HPCE2ATSULB4' where id=88; -update noar ti set v0='U97O0SL9JV96D6A2D39Z50YV8SYRT1B4SZB6UTU6QDH3BFUUQJJAWG30Q58GIGK7COKJEDE0K7ILLCYFI7I0T1KHNGFVDR2IXN8HGVAPZ4WGQCZZPVLFNYHSG5MRCUWTVX2M5C12ZWJ7VBDX4X0V4J7Z3M0WFKPA205P0H2VKGDZJT7ZJYH5YNUVGITKUCZFFWCTC4HNT7XWOHM40BHLJ2G35JBX53VBI39IY2G9AAR2BNGS5A1U9HPCE2ATSULB4' where id=88; -update noar tt set v1='WTSXJQ67WTTZ1DNKE9X15IDIVFJSYIQIQ4R9BHDCBJ2XBZBSGRNY9O73WU39ATPTMWHKMDCFQXNQ63FZR2SV1J4ASWXFYTVAV12K3U7RQZ6N1UGG2XFPWJ3VSLKZLRUXS9SS2P8247CQBGZGMCIY9LZIP2RGPNP4XRNXAEH8BST21MBC1CDEZ0MMTEX4PTKUGQOZCJ7JVLI3Y2BI7YVHW4NUDZC5UMMDHJV5EIY3A6SJEBL73J2YZDZA266C2S0JV' where id=88; -update noar ti set v1='WTSXJQ67WTTZ1DNKE9X15IDIVFJSYIQIQ4R9BHDCBJ2XBZBSGRNY9O73WU39ATPTMWHKMDCFQXNQ63FZR2SV1J4ASWXFYTVAV12K3U7RQZ6N1UGG2XFPWJ3VSLKZLRUXS9SS2P8247CQBGZGMCIY9LZIP2RGPNP4XRNXAEH8BST21MBC1CDEZ0MMTEX4PTKUGQOZCJ7JVLI3Y2BI7YVHW4NUDZC5UMMDHJV5EIY3A6SJEBL73J2YZDZA266C2S0JV' where id=88; -update noar tt set v2='Z953VOAWBDWIZH408RQYSSZ28SSTHEY58I2FRVJVGMO42KTAJJSL3UDHDGN42CLN3BTJ8GV0KUJCBWZE6XIPDPT2D33C0DHO4U7K8QL4Z1A6AEKTU7P0UU18AZXD9PTLCKRHY1WRIRZUI6W0QXV5G7X6RHMQERD25LVP0ZAD39CCBQI9HNFF7FDSBAGI3IS4UO9AS252GKSQU963IQ27JSA8WNU4VH9INY9722MS4HSNBX3VWGZ99VF84RMZ8SCXJ' where id=88; -update noar ti set v2='Z953VOAWBDWIZH408RQYSSZ28SSTHEY58I2FRVJVGMO42KTAJJSL3UDHDGN42CLN3BTJ8GV0KUJCBWZE6XIPDPT2D33C0DHO4U7K8QL4Z1A6AEKTU7P0UU18AZXD9PTLCKRHY1WRIRZUI6W0QXV5G7X6RHMQERD25LVP0ZAD39CCBQI9HNFF7FDSBAGI3IS4UO9AS252GKSQU963IQ27JSA8WNU4VH9INY9722MS4HSNBX3VWGZ99VF84RMZ8SCXJ' where id=88; -update noar tt set v3='76U1FZRVSCSO9TDC3VM4WUQD2KUGL275IE8GIOX5YROJLZT4YQC5LHSIA224H41HCIG5SSSX6BWWLZIWQJEFMVUTL7K41FLDYWB5QJI3EGOWX9GK1ZI9C0NS30WVLU3EO0EFMQN6VEB8BOJ29Q67QR02V9NLQBUTK8HPA0CVCQE84QQCVTM5OEB1A6KBZLXKYM8J6RNBDAE6K54Z1I6WN0PWMIQFSFM69AF7S4RAQ7P4F8L35N43CKKON42PBA19O' where id=88; -update noar ti set v3='76U1FZRVSCSO9TDC3VM4WUQD2KUGL275IE8GIOX5YROJLZT4YQC5LHSIA224H41HCIG5SSSX6BWWLZIWQJEFMVUTL7K41FLDYWB5QJI3EGOWX9GK1ZI9C0NS30WVLU3EO0EFMQN6VEB8BOJ29Q67QR02V9NLQBUTK8HPA0CVCQE84QQCVTM5OEB1A6KBZLXKYM8J6RNBDAE6K54Z1I6WN0PWMIQFSFM69AF7S4RAQ7P4F8L35N43CKKON42PBA19O' where id=88; -update noar tt set v0='VCG4HHIMNE2CPDDYNIFZXOPGDUKXTZXRDYLKSCYKGJUGLAOXSY0E4A5IK2FFU9SGNM9LCRXFYN2E78POZVRCFZW86GPF13GTSB143PFYAC6MYSV0T5TZ17PEIJPAL4L8XDAYQSI0UL3NNDAD33ZBVNI4CQ1BIQR5YPMDV1JKBAJKMDH50A7LP74UJ04FYS6SU3G7O1VP7BANSEQPP9NUL2TI98FAE82NTKLDB1IVLKPRMSW2UKW6ZKKZFIVSJD1JB' where id=89; -update noar ti set v0='VCG4HHIMNE2CPDDYNIFZXOPGDUKXTZXRDYLKSCYKGJUGLAOXSY0E4A5IK2FFU9SGNM9LCRXFYN2E78POZVRCFZW86GPF13GTSB143PFYAC6MYSV0T5TZ17PEIJPAL4L8XDAYQSI0UL3NNDAD33ZBVNI4CQ1BIQR5YPMDV1JKBAJKMDH50A7LP74UJ04FYS6SU3G7O1VP7BANSEQPP9NUL2TI98FAE82NTKLDB1IVLKPRMSW2UKW6ZKKZFIVSJD1JB' where id=89; -update noar tt set v1='WMRA7SFBWL5UHPKDOLUZKFAJZHL4OE4B9LR2FW274ELGV4V8DNWH5HR1EYULNJ02456Z2DIN14LLJ98HKEVCI515VTUJFC5FJCY0L3REYZD4J3D65R4CIW3652M4N2CB1EDC3FKLI4P51I1D82QFGB9L69VBJSBSXQKL2ZZAKQPWHR7LL4BD2TJ9LPN931MNRAJY0ZGGVM6URDMG1DFVMWPNOKD0TXMJ78Y4KWBRNVUVRIGXA2F9ZZK9SIJMBJI6N' where id=89; -update noar ti set v1='WMRA7SFBWL5UHPKDOLUZKFAJZHL4OE4B9LR2FW274ELGV4V8DNWH5HR1EYULNJ02456Z2DIN14LLJ98HKEVCI515VTUJFC5FJCY0L3REYZD4J3D65R4CIW3652M4N2CB1EDC3FKLI4P51I1D82QFGB9L69VBJSBSXQKL2ZZAKQPWHR7LL4BD2TJ9LPN931MNRAJY0ZGGVM6URDMG1DFVMWPNOKD0TXMJ78Y4KWBRNVUVRIGXA2F9ZZK9SIJMBJI6N' where id=89; -update noar tt set v2='FM64YFV19LCIGG7TPJKDDP32S4HYDTBNLWV8D3J52GB3TGW2GS7710F35S7UC6IA601R9JSHRXEYPPE7WHARTK4KCEWN3IZX7V0ET0X32VCQWTYW1B6U55A53IAERRAMBMQ53F2DKL1615OQMJ0MZRZP32XAUBPP021F29VYPMT070DTCSAZQVK3Z3FVAWNT38MDMJ5G77YSA0XXY1UGCZW80DEPSE7FB2CQ6RXB02QCB7JXVAP4MKVJEFATT5NKE' where id=89; -update noar ti set v2='FM64YFV19LCIGG7TPJKDDP32S4HYDTBNLWV8D3J52GB3TGW2GS7710F35S7UC6IA601R9JSHRXEYPPE7WHARTK4KCEWN3IZX7V0ET0X32VCQWTYW1B6U55A53IAERRAMBMQ53F2DKL1615OQMJ0MZRZP32XAUBPP021F29VYPMT070DTCSAZQVK3Z3FVAWNT38MDMJ5G77YSA0XXY1UGCZW80DEPSE7FB2CQ6RXB02QCB7JXVAP4MKVJEFATT5NKE' where id=89; -update noar tt set v3='NR44FZDD8CTQKCLZYS3KNY37Q8M0RTL0UOCA74W4NV5ELFTNW3PM2HYCVPNGWAINKBJJ45XTEWDGHM8UJEICLM2URD76FPSPIFE854OPKQ0X2HGVF500X44ZQ09X5X6RRDQVIE0CMCPHSQ0G6E44I71EPKB86D0OXGMMMVC0DY61NKI8Y3GBXAC9OTMWP08RB1G2L00FMDVIEIZ53CW1OI6E6UPSLGIX0K00LBE0B91JPO3B73DR94NBPJQXKIUZY' where id=89; -update noar ti set v3='NR44FZDD8CTQKCLZYS3KNY37Q8M0RTL0UOCA74W4NV5ELFTNW3PM2HYCVPNGWAINKBJJ45XTEWDGHM8UJEICLM2URD76FPSPIFE854OPKQ0X2HGVF500X44ZQ09X5X6RRDQVIE0CMCPHSQ0G6E44I71EPKB86D0OXGMMMVC0DY61NKI8Y3GBXAC9OTMWP08RB1G2L00FMDVIEIZ53CW1OI6E6UPSLGIX0K00LBE0B91JPO3B73DR94NBPJQXKIUZY' where id=89; -update noar tt set v0='9RA2VTN2QX9RUZT9O8MBOB7YJB6V2EWXH9BPCH2RNVPNQB6B27NLXRMRQ0U4Q71M5EJKYDLX2WGNFLUPEMX3YT3Q5ZCJROMDXARPDALZG741Q63MYR8BBUPJYHU1B97OE93AZE3HUCB5IU8C3TFROVN3LWA20DRYIJY7WY54YNDPF45B59U0OE9O59NDD325P7LJ3WRIS3L49F7QX7JCHUXNDGZ9PACGIBEDOPE0MQ9OETUQN4DDBZRPI5WRDE2HR' where id=90; -update noar ti set v0='9RA2VTN2QX9RUZT9O8MBOB7YJB6V2EWXH9BPCH2RNVPNQB6B27NLXRMRQ0U4Q71M5EJKYDLX2WGNFLUPEMX3YT3Q5ZCJROMDXARPDALZG741Q63MYR8BBUPJYHU1B97OE93AZE3HUCB5IU8C3TFROVN3LWA20DRYIJY7WY54YNDPF45B59U0OE9O59NDD325P7LJ3WRIS3L49F7QX7JCHUXNDGZ9PACGIBEDOPE0MQ9OETUQN4DDBZRPI5WRDE2HR' where id=90; -update noar tt set v1='H7MXPHCXU68PMAWFC6SU169CQBAWUWUJ1PQOW7W1LXBRHRQGFBWIQ8VC3M7CVLWLSYCSDXTU5VJF03POHY6IT984LBXN5IY33KT1LAVKSD16GZ40AX4IIPBY29LWJSW7OLKID9M6WHWHI2LYMQ4O2DAZJ41L8TNNY9VT3NRP6PBXCOZPF07L9B2VWM8ISOLYN9BA235DWQSZCKON67VC62GM2TD9T9B8U9DCB89CSCS4SR7F0QS3C4EDZ8IRPK3IG' where id=90; -update noar ti set v1='H7MXPHCXU68PMAWFC6SU169CQBAWUWUJ1PQOW7W1LXBRHRQGFBWIQ8VC3M7CVLWLSYCSDXTU5VJF03POHY6IT984LBXN5IY33KT1LAVKSD16GZ40AX4IIPBY29LWJSW7OLKID9M6WHWHI2LYMQ4O2DAZJ41L8TNNY9VT3NRP6PBXCOZPF07L9B2VWM8ISOLYN9BA235DWQSZCKON67VC62GM2TD9T9B8U9DCB89CSCS4SR7F0QS3C4EDZ8IRPK3IG' where id=90; -update noar tt set v2='BERHOT2VM8OBVA2MPC9HOZDS3I5KAXP2CZFF4AC4N8KF0UZEEH3GE756Y7W8C58U21MXFKUMZNYYS4I88JK8UVZ1KAPR495OUUMKLTYBXTG0WPIKALS09QC2AG5GI7L2GJK1YOPJRWMAQ6I3DUJZ78XRLRL0V8M46NLPAF6Q1SHIOJSALM5WKZ6O70ON8RNTNQAC0OD1GL901U1ZMJKWE7XMETT1J0JBGF0BH9JWVMZBYYAKRWNT5GU8MTRX672OB' where id=90; -update noar ti set v2='BERHOT2VM8OBVA2MPC9HOZDS3I5KAXP2CZFF4AC4N8KF0UZEEH3GE756Y7W8C58U21MXFKUMZNYYS4I88JK8UVZ1KAPR495OUUMKLTYBXTG0WPIKALS09QC2AG5GI7L2GJK1YOPJRWMAQ6I3DUJZ78XRLRL0V8M46NLPAF6Q1SHIOJSALM5WKZ6O70ON8RNTNQAC0OD1GL901U1ZMJKWE7XMETT1J0JBGF0BH9JWVMZBYYAKRWNT5GU8MTRX672OB' where id=90; -update noar tt set v3='DG0AZ96PWXZ5SVPKJS4BPMAH2EG1HZDDWDQ1ZEDE23289HXTJC8X1ZNYL6YFA7HVULYRQAIYI83B0KJL81ABAKFT4HIJVODY5I93IRMQ4UB5OJD5IUKK3KUZ0AE0WE6DR0DLQOR658LOE4JIJV5MQSME1TN4L0LGXBQP3BIDC51O5E8QO0A7O15Q6M6CH5422SZONJZ22IZULZ1FFMUN7WOGQO5YNSG45ELUXDDPS3PSV9JSXLIKMETZ49EX0ZX0V' where id=90; -update noar ti set v3='DG0AZ96PWXZ5SVPKJS4BPMAH2EG1HZDDWDQ1ZEDE23289HXTJC8X1ZNYL6YFA7HVULYRQAIYI83B0KJL81ABAKFT4HIJVODY5I93IRMQ4UB5OJD5IUKK3KUZ0AE0WE6DR0DLQOR658LOE4JIJV5MQSME1TN4L0LGXBQP3BIDC51O5E8QO0A7O15Q6M6CH5422SZONJZ22IZULZ1FFMUN7WOGQO5YNSG45ELUXDDPS3PSV9JSXLIKMETZ49EX0ZX0V' where id=90; -update noar tt set v0='BY5VWBEC5OEZECT5LR3XEWZOF0173U98NH3B12LMVHUE46I7IJI7XCT9N19Z15BUYNXL66F9SM3N9B8FBTEBMNGVOB407ZJ4G6L4MDCV9B9MQKH8VSRQKSAZ4WCKJSYHAS4YKWQEYK34SHN50OL3RNZVP8EV597JIZSFJ2SHMJHTL65S4AU7SJGZ9T72JGHK8S2R9M29NDJIC49NIDRWHMYYXFD124QCVB8W8HV8AU2Q3XRFNJWH7XJGJA1483Z5K' where id=91; -update noar ti set v0='BY5VWBEC5OEZECT5LR3XEWZOF0173U98NH3B12LMVHUE46I7IJI7XCT9N19Z15BUYNXL66F9SM3N9B8FBTEBMNGVOB407ZJ4G6L4MDCV9B9MQKH8VSRQKSAZ4WCKJSYHAS4YKWQEYK34SHN50OL3RNZVP8EV597JIZSFJ2SHMJHTL65S4AU7SJGZ9T72JGHK8S2R9M29NDJIC49NIDRWHMYYXFD124QCVB8W8HV8AU2Q3XRFNJWH7XJGJA1483Z5K' where id=91; -update noar tt set v1='XU9BJBHS59RVNU7W4MZDQKQLKV55OE39Z6AELRZDWS9E3T5TH7S68Y2PCDV9KS9LFJHMD9N1GQ2VRJCMQ6OHEYN16S9CSBHLYMWAINSZEWGE7KFBS8V2LNKJJSFGX0AI4XB4UKVJ4K863NPGUFLAG5EYUTI70VA6XZDNFWFLJ6FU24JT5Y7IUYKDFZIF03JWAD5B6T2EG5NP1W1L5QXF8AHL1MOWLVQVFPR1TRP97E1EIQUPNH5FZRRYH6A8IRX2A' where id=91; -update noar ti set v1='XU9BJBHS59RVNU7W4MZDQKQLKV55OE39Z6AELRZDWS9E3T5TH7S68Y2PCDV9KS9LFJHMD9N1GQ2VRJCMQ6OHEYN16S9CSBHLYMWAINSZEWGE7KFBS8V2LNKJJSFGX0AI4XB4UKVJ4K863NPGUFLAG5EYUTI70VA6XZDNFWFLJ6FU24JT5Y7IUYKDFZIF03JWAD5B6T2EG5NP1W1L5QXF8AHL1MOWLVQVFPR1TRP97E1EIQUPNH5FZRRYH6A8IRX2A' where id=91; -update noar tt set v2='Y5XLFYPAC8RVPEJ1B66GRC8KRTF5B8QLD2913Z4BUEFT37B5EMZC7YEQEXD6ZS521BEOOOIDPY769L9BNV4UDAW7TNK5XT9ZNA7N1JR80MQ4IYBXT09SLZFZAAMQAX6JQEF11TIP59VP9DJWAIQ11AF7WNU2PSK2YDAPPC597D2T495U0ZKDWMUHHWKP1CHV5FP9CBKCRDYOZ0MCA8KQQRJLWDFQGOJPIGCZK69R0QBNTMZZHRUTBOGXURB18ZD6Z' where id=91; -update noar ti set v2='Y5XLFYPAC8RVPEJ1B66GRC8KRTF5B8QLD2913Z4BUEFT37B5EMZC7YEQEXD6ZS521BEOOOIDPY769L9BNV4UDAW7TNK5XT9ZNA7N1JR80MQ4IYBXT09SLZFZAAMQAX6JQEF11TIP59VP9DJWAIQ11AF7WNU2PSK2YDAPPC597D2T495U0ZKDWMUHHWKP1CHV5FP9CBKCRDYOZ0MCA8KQQRJLWDFQGOJPIGCZK69R0QBNTMZZHRUTBOGXURB18ZD6Z' where id=91; -update noar tt set v3='OOSZLCXP95N5GMEUKD01RK0TISEK6HY51S9VQFW17ZGTGSM9RKCHTRLY0GLHNUYSYPZSF43BSFUPBLBAF6P5FI714BOQVU15WPB6ELULI8Z7HOWYW2RZ5LK6XTC7RKL8VUZNC13A63C7JKLOZ009VCLQY9QFU1SKLOSMX67SI97VO8YGQ9G36JZGAOK03N0MC8Z2RIR3NV3MNXP5HCDGHY7KFQDE87A7ZSYLH6S5FZH7QEEK725FTYYKBI7JP0T2S' where id=91; -update noar ti set v3='OOSZLCXP95N5GMEUKD01RK0TISEK6HY51S9VQFW17ZGTGSM9RKCHTRLY0GLHNUYSYPZSF43BSFUPBLBAF6P5FI714BOQVU15WPB6ELULI8Z7HOWYW2RZ5LK6XTC7RKL8VUZNC13A63C7JKLOZ009VCLQY9QFU1SKLOSMX67SI97VO8YGQ9G36JZGAOK03N0MC8Z2RIR3NV3MNXP5HCDGHY7KFQDE87A7ZSYLH6S5FZH7QEEK725FTYYKBI7JP0T2S' where id=91; -update noar tt set v0='SWPRMOJ2CCDN6IZKX7XKJ4R33MA06UVL4F2OEDUUS8W3WBWGZG5PHZZZY25FIUY99CG8T7GWGMJIGN4HOIT502VIAA5JNVXAU4VU1O0IL13A5IDGMO2KRVNNU0DI37QWBXB8SP35Q4921639LJMSJGK0TGGT8GF6MCUP87GCX1ZF2ASSQ5SJVQS9Q25EODTI7N38MOION3AC3XQFNJ9KSGJAA3XGM2REU3DR6YIRXUA3UY4ELKZS115XX1PW8K27Z' where id=92; -update noar ti set v0='SWPRMOJ2CCDN6IZKX7XKJ4R33MA06UVL4F2OEDUUS8W3WBWGZG5PHZZZY25FIUY99CG8T7GWGMJIGN4HOIT502VIAA5JNVXAU4VU1O0IL13A5IDGMO2KRVNNU0DI37QWBXB8SP35Q4921639LJMSJGK0TGGT8GF6MCUP87GCX1ZF2ASSQ5SJVQS9Q25EODTI7N38MOION3AC3XQFNJ9KSGJAA3XGM2REU3DR6YIRXUA3UY4ELKZS115XX1PW8K27Z' where id=92; -update noar tt set v1='92Q1PA0BZ0WGRWYO3I24IK5J1BUI8C4B98UGK8Y18SOR56EM9FMXCQUQPM8TUHYOE0H4QHRAUR0NIB7LR3YI9ZNDLDKITD9S17T2UCC1KXAOGVLTRCQQQ09N7HZ85M5P6ORP3EAYOIFAUSHNK4DBTA0KDRR5R1Z26H0653EO5DQSKO9VSAMPBEYSY49APBMQ2DXYHOBSWPPBDZ25UF3I4EM9TJCZS0CV49P0PLZ74JR68NV1EGBEOWX5IKS2T8MR8' where id=92; -update noar ti set v1='92Q1PA0BZ0WGRWYO3I24IK5J1BUI8C4B98UGK8Y18SOR56EM9FMXCQUQPM8TUHYOE0H4QHRAUR0NIB7LR3YI9ZNDLDKITD9S17T2UCC1KXAOGVLTRCQQQ09N7HZ85M5P6ORP3EAYOIFAUSHNK4DBTA0KDRR5R1Z26H0653EO5DQSKO9VSAMPBEYSY49APBMQ2DXYHOBSWPPBDZ25UF3I4EM9TJCZS0CV49P0PLZ74JR68NV1EGBEOWX5IKS2T8MR8' where id=92; -update noar tt set v2='2PLM212TWV9VABPG4RGJEHV3KA8QGKVSN1DXBRUZ3YPH4QJD6L09SO9TCDCU5G7553JEGAA2Z34LO4PZQU522YFSSL09Y22PZG3CISOFTVDDR84Z6ISJ4L59AKNSJ356BEENN4T7RB1Q1MVWA718JV1TAJ1UX61PYL8S8S5IGIT60NR06IAJRQQYNF0IV5LZ8VWQPRMJFZMY6T680466PPFLKUQ8TAP9E0VZUE6GRC3JU2X0ILDZPTZXZ2AG3GLKN' where id=92; -update noar ti set v2='2PLM212TWV9VABPG4RGJEHV3KA8QGKVSN1DXBRUZ3YPH4QJD6L09SO9TCDCU5G7553JEGAA2Z34LO4PZQU522YFSSL09Y22PZG3CISOFTVDDR84Z6ISJ4L59AKNSJ356BEENN4T7RB1Q1MVWA718JV1TAJ1UX61PYL8S8S5IGIT60NR06IAJRQQYNF0IV5LZ8VWQPRMJFZMY6T680466PPFLKUQ8TAP9E0VZUE6GRC3JU2X0ILDZPTZXZ2AG3GLKN' where id=92; -update noar tt set v3='D79Z78HLHH6AIWWOLDW19K4L4GQ3KUA3DMBZXLZ4HQJVK6YHE0WL9MA9VR2HODFIHBPEQZO7GOWIRNC9FF0PFGUW3ZAZY3ZUHPBTT80WJ9RB31XGUYLALD1TETSPMO12TA29FAWFTW2RGHX1SSWRVA484U7MSY960UCKXQ1YNSVG7YBDU6Z7W5AJU9VIJOV111VRFU3H5MLLGQG6ATAW200IN3JFB9Z60ZNW8ED88K251MILAC5Z6K8RZL4TE99CF' where id=92; -update noar ti set v3='D79Z78HLHH6AIWWOLDW19K4L4GQ3KUA3DMBZXLZ4HQJVK6YHE0WL9MA9VR2HODFIHBPEQZO7GOWIRNC9FF0PFGUW3ZAZY3ZUHPBTT80WJ9RB31XGUYLALD1TETSPMO12TA29FAWFTW2RGHX1SSWRVA484U7MSY960UCKXQ1YNSVG7YBDU6Z7W5AJU9VIJOV111VRFU3H5MLLGQG6ATAW200IN3JFB9Z60ZNW8ED88K251MILAC5Z6K8RZL4TE99CF' where id=92; -update noar tt set v0='QDZ079CUL8UK2JIJ60XUAT9PIDM2LLGPPQ8H8SP33IZEG41F7EOIW8BE69IIGCJO4XCORFVIERXCEW5SDR16ONXMF8SMM7ES6ECJ5CN350Y4LQWI9OSN48E88RY6UN00UHJK9RYIFKGK23O24CIUXHJ3SY287YO9WDAYG8N97D3EZZ8HXPF0DH5RFY5KLOF7WW6W7GYFCDEIQN9BMBH6S2ZDSQT008GSJ3QZMWPVC0BAVB1CE2DOHA08JQ9GIZRA1' where id=93; -update noar ti set v0='QDZ079CUL8UK2JIJ60XUAT9PIDM2LLGPPQ8H8SP33IZEG41F7EOIW8BE69IIGCJO4XCORFVIERXCEW5SDR16ONXMF8SMM7ES6ECJ5CN350Y4LQWI9OSN48E88RY6UN00UHJK9RYIFKGK23O24CIUXHJ3SY287YO9WDAYG8N97D3EZZ8HXPF0DH5RFY5KLOF7WW6W7GYFCDEIQN9BMBH6S2ZDSQT008GSJ3QZMWPVC0BAVB1CE2DOHA08JQ9GIZRA1' where id=93; -update noar tt set v1='ITZRRLA40OLHBR9H34H7T0ANTBQC61L659C5AD0BIJMC19DBI7Q4PHIPEMDT6J2EOW8DYFD1SVM7KMBP9B9PQ042DMO04SQS1VLOCKMGZ21163W4DJO0V4FCS8GOYG9V0PUVGZU6E05IOHMWCZYFLVK1JZU6VE6OJOUE9ZDIQ827TZG3MDXJ7I3LGTNOADZ9YYL170WGXNQTWUQYVACWANS1YJRJI1RQ390Q2MF1UNQY6H2130S86MIWXUH3KKKDP' where id=93; -update noar ti set v1='ITZRRLA40OLHBR9H34H7T0ANTBQC61L659C5AD0BIJMC19DBI7Q4PHIPEMDT6J2EOW8DYFD1SVM7KMBP9B9PQ042DMO04SQS1VLOCKMGZ21163W4DJO0V4FCS8GOYG9V0PUVGZU6E05IOHMWCZYFLVK1JZU6VE6OJOUE9ZDIQ827TZG3MDXJ7I3LGTNOADZ9YYL170WGXNQTWUQYVACWANS1YJRJI1RQ390Q2MF1UNQY6H2130S86MIWXUH3KKKDP' where id=93; -update noar tt set v2='D1Y72DH1QHIOQX9DPN8T57KEOAZXWMNB38VWXAPNAUDTUE1HV91LDM3BFWOOHNKP2GPSVMVYSI1HMOJSH4R4SIYSETFCL69U7VDR4E5W56RDSNG1M7HE2F7P8QSEHMCANMD4Q28F8Z520QU7E6JYWYRFEV08MOFR4STUNQZYA4RDGAAU1J90BAA5LOWHDSQE25K49JGFX2V28CWTQQM9LLVEEN6QE47NNFZ6MIN8P6DVWGOOKPUY6S6NUTC2S9TIZ' where id=93; -update noar ti set v2='D1Y72DH1QHIOQX9DPN8T57KEOAZXWMNB38VWXAPNAUDTUE1HV91LDM3BFWOOHNKP2GPSVMVYSI1HMOJSH4R4SIYSETFCL69U7VDR4E5W56RDSNG1M7HE2F7P8QSEHMCANMD4Q28F8Z520QU7E6JYWYRFEV08MOFR4STUNQZYA4RDGAAU1J90BAA5LOWHDSQE25K49JGFX2V28CWTQQM9LLVEEN6QE47NNFZ6MIN8P6DVWGOOKPUY6S6NUTC2S9TIZ' where id=93; -update noar tt set v3='REYJHFU5RDQJF0DFD7KH22V3XJR77N3YJ54E0E8QL7R0OAJU5Z96OEM6JUMEQ9NR3QRF5YTIF96BHJ81M5NETO3ZNPAU98TPADGVYJTHJC2XA3HYOGBX4B14I4B51UPQXQLWII7RBECCFBHWKVI2FEOHISPVN5L04N5D1W4XPUNKC859XTRPE3X9V8Q1TAW972F4N8YZNUJ3925ODDTSA6ETVCN5XRH4XEP2TVO4B3MCQHUS0U1AP8WETSARCMP5V' where id=93; -update noar ti set v3='REYJHFU5RDQJF0DFD7KH22V3XJR77N3YJ54E0E8QL7R0OAJU5Z96OEM6JUMEQ9NR3QRF5YTIF96BHJ81M5NETO3ZNPAU98TPADGVYJTHJC2XA3HYOGBX4B14I4B51UPQXQLWII7RBECCFBHWKVI2FEOHISPVN5L04N5D1W4XPUNKC859XTRPE3X9V8Q1TAW972F4N8YZNUJ3925ODDTSA6ETVCN5XRH4XEP2TVO4B3MCQHUS0U1AP8WETSARCMP5V' where id=93; -update noar tt set v0='09CPJ9QWKQC21LU2VE0WTRVPWJAVEOBOWA4L5XIEZH89Y5M8BLNVUSTVREYST0DL3R4E1FH9UVYR0XDCZ37B7XKJ25BJO39H3BW93FXW2SV2C4M5U50JF9RVMCWSIKMYWD840CZP4USDY0UKY5DOQY5NNFJHCXI22VX6DMCZ6JFJMX3L5HLYKSEXQ2SU1L55ZSZXPUIXD4C9MPWH6NU2QZVIJZO57DACX4BHQ87EA6BHTQPDXIXBLBG4VKOI2PZCF' where id=94; -update noar ti set v0='09CPJ9QWKQC21LU2VE0WTRVPWJAVEOBOWA4L5XIEZH89Y5M8BLNVUSTVREYST0DL3R4E1FH9UVYR0XDCZ37B7XKJ25BJO39H3BW93FXW2SV2C4M5U50JF9RVMCWSIKMYWD840CZP4USDY0UKY5DOQY5NNFJHCXI22VX6DMCZ6JFJMX3L5HLYKSEXQ2SU1L55ZSZXPUIXD4C9MPWH6NU2QZVIJZO57DACX4BHQ87EA6BHTQPDXIXBLBG4VKOI2PZCF' where id=94; -update noar tt set v1='SEVAP6S9DZJOJGXB984FWD0GB3XG8O3EG8OWBF7XIYDG2VTTH6ICMZ0VAMDVW3TYLPVR89EE9MX3W33EHLUL2B2ZDZPKY63NJVW1KXUESP1KXBYW2SJ1SZH2TPDZHH31FETK9S8O4N7G7MNE4DMKLVYY5UMQE1AXZ0K8UVS8KOR2P8V7OYNSDRWSXQ48DZJ0IB4LS145TWD38QEQY4OI7HKMJY82GJNH94DEZ19GOXA4UEFXI1XXPGH7IG8WS5DPY' where id=94; -update noar ti set v1='SEVAP6S9DZJOJGXB984FWD0GB3XG8O3EG8OWBF7XIYDG2VTTH6ICMZ0VAMDVW3TYLPVR89EE9MX3W33EHLUL2B2ZDZPKY63NJVW1KXUESP1KXBYW2SJ1SZH2TPDZHH31FETK9S8O4N7G7MNE4DMKLVYY5UMQE1AXZ0K8UVS8KOR2P8V7OYNSDRWSXQ48DZJ0IB4LS145TWD38QEQY4OI7HKMJY82GJNH94DEZ19GOXA4UEFXI1XXPGH7IG8WS5DPY' where id=94; -update noar tt set v2='FR8S6ZJAFR9MDHPM2KDE5K3OXV7D9DP3VIFH7C9R4Q8C79DUPSVNHUD6I7F9PI0GOD94YT0O5X3IX5WE9VUHJ47WQIDW9BOCVF8FDZ8S9YW2UE1U5H386U8X53RVACHB64VIYUSTBZ2S5KBVTCHT4RVC2HEI5NC49FBZMP785UOVAPFC7T9WSGQO2CHB9B9ZIJABS7US0OJVSRJR6GGEPKRQNO837G0KWOMVBCH77R4E3FQUI5VP29CTGOZJTA2X9' where id=94; -update noar ti set v2='FR8S6ZJAFR9MDHPM2KDE5K3OXV7D9DP3VIFH7C9R4Q8C79DUPSVNHUD6I7F9PI0GOD94YT0O5X3IX5WE9VUHJ47WQIDW9BOCVF8FDZ8S9YW2UE1U5H386U8X53RVACHB64VIYUSTBZ2S5KBVTCHT4RVC2HEI5NC49FBZMP785UOVAPFC7T9WSGQO2CHB9B9ZIJABS7US0OJVSRJR6GGEPKRQNO837G0KWOMVBCH77R4E3FQUI5VP29CTGOZJTA2X9' where id=94; -update noar tt set v3='M0QSCW7STQCRXOO3Y9GXVK417EVJG2GDTDN4NVRSVZAWOP5PMMCJB33CJR5ITNI1NHIG7Q4TEHVWGYRA6AUERJEGB3KYB1O5PEOZQ48Q3TSJ867ZC86Y02OWOP5ZZI0F0MTREN71E3FYFXOTIY9NQLOODMGO0LMKKVRQD9T54I99IE6U343LAUXW20CFGFLU2EZ9T3YRB5CGB2KCV2RLI0X7HPU9R61FMRI2E3S8PHDITQD4KRCEU5M87NL2TKSPG' where id=94; -update noar ti set v3='M0QSCW7STQCRXOO3Y9GXVK417EVJG2GDTDN4NVRSVZAWOP5PMMCJB33CJR5ITNI1NHIG7Q4TEHVWGYRA6AUERJEGB3KYB1O5PEOZQ48Q3TSJ867ZC86Y02OWOP5ZZI0F0MTREN71E3FYFXOTIY9NQLOODMGO0LMKKVRQD9T54I99IE6U343LAUXW20CFGFLU2EZ9T3YRB5CGB2KCV2RLI0X7HPU9R61FMRI2E3S8PHDITQD4KRCEU5M87NL2TKSPG' where id=94; -update noar tt set v0='DBOKEVKO10MXVDPTMT866DJ3NY58HR28BAASPR3UIB282Y59P0SXQ0949OLF4CXZN6YSSXAJOPO1Y2757CYBDL83SVW1EEVKSG61KTHPBPJ5PI8OZZI7WOZ1QF32S6O0HUCUY9XYXYYGA2WBUGQL7TQSNJYVJA9IYNDFPJHXH6IYVLXSLTSZ30AQVF4CZ6O0YDROMEKKDQGBQZRLZ2IVUXZP0WI4MREQ12MNXK540KYB4QFZ03T0MSYHN7QO9PU2Z' where id=95; -update noar ti set v0='DBOKEVKO10MXVDPTMT866DJ3NY58HR28BAASPR3UIB282Y59P0SXQ0949OLF4CXZN6YSSXAJOPO1Y2757CYBDL83SVW1EEVKSG61KTHPBPJ5PI8OZZI7WOZ1QF32S6O0HUCUY9XYXYYGA2WBUGQL7TQSNJYVJA9IYNDFPJHXH6IYVLXSLTSZ30AQVF4CZ6O0YDROMEKKDQGBQZRLZ2IVUXZP0WI4MREQ12MNXK540KYB4QFZ03T0MSYHN7QO9PU2Z' where id=95; -update noar tt set v1='D40IC6Y9E3ZL1D344OYH1WO0231NF2KOBIEFTF4O4R5BNBFLJ6GGBULZJE3686X98JZLA70Y7ZQUUXJANKH62E0CZTKOHWQ45NGMHO8MZPGRG7IROQJFSPVMC7EZGBX8W5ZRDJKY0FCCNV2VXWTJD96LWHLGR57FWQGWQF0K0BD1VCIYIE7TDOA5COTL9RZJR7J6S36HGAYT41C7A6XITBRZYBMDPVXETQARII8O2Q7TP5D86QZAML1G2KTXDXWZS' where id=95; -update noar ti set v1='D40IC6Y9E3ZL1D344OYH1WO0231NF2KOBIEFTF4O4R5BNBFLJ6GGBULZJE3686X98JZLA70Y7ZQUUXJANKH62E0CZTKOHWQ45NGMHO8MZPGRG7IROQJFSPVMC7EZGBX8W5ZRDJKY0FCCNV2VXWTJD96LWHLGR57FWQGWQF0K0BD1VCIYIE7TDOA5COTL9RZJR7J6S36HGAYT41C7A6XITBRZYBMDPVXETQARII8O2Q7TP5D86QZAML1G2KTXDXWZS' where id=95; -update noar tt set v2='W4W77CW3APJ6Q8HC96J5SWR2GG0OQLBD9KRJ3M9VOTK8CI8MMJMPDV4MD0HZYMQBE3UN2C0IOU35GQ3U8E3KN4A7CEAG8O4AP1V5ALNFZJ8D6MA4GAZV3WQFCA5WGWOH6FL7WWIC5TQYQ7L3NEH5MY836NT7MI224JGHYVW1Z9KIUP06KCNDZ945V8BJWUDYWMYYTXHO5QGPCUB0PLVECLLZPN5JWS6CJW53BK9OYEZV9YTQ2R0C0CI67VHYOY417' where id=95; -update noar ti set v2='W4W77CW3APJ6Q8HC96J5SWR2GG0OQLBD9KRJ3M9VOTK8CI8MMJMPDV4MD0HZYMQBE3UN2C0IOU35GQ3U8E3KN4A7CEAG8O4AP1V5ALNFZJ8D6MA4GAZV3WQFCA5WGWOH6FL7WWIC5TQYQ7L3NEH5MY836NT7MI224JGHYVW1Z9KIUP06KCNDZ945V8BJWUDYWMYYTXHO5QGPCUB0PLVECLLZPN5JWS6CJW53BK9OYEZV9YTQ2R0C0CI67VHYOY417' where id=95; -update noar tt set v3='4BBO20SI6KZ43QA7ASYSWV8OA5UQ1IW3H4Y5HCJH2VIN0ZJL3I69ZU4KQC5L2N2WV3ZPCYEPPYRDR63LYBCU3GOZK36XFLRHU8Q87Y8R9YC8GWP3Y5XNMPVA7IS8XQPRP775HJ7PFADLJE485EQMVZ447ITIM2WRIRYB6X2MG8JXLX3H4KJR23VLF7BZL4O3HOSQOYRKXAJI25V939RBDIUVNR4JT0NWTIDUB0J44I15V5U3358MMTM92UWJJ7PJI' where id=95; -update noar ti set v3='4BBO20SI6KZ43QA7ASYSWV8OA5UQ1IW3H4Y5HCJH2VIN0ZJL3I69ZU4KQC5L2N2WV3ZPCYEPPYRDR63LYBCU3GOZK36XFLRHU8Q87Y8R9YC8GWP3Y5XNMPVA7IS8XQPRP775HJ7PFADLJE485EQMVZ447ITIM2WRIRYB6X2MG8JXLX3H4KJR23VLF7BZL4O3HOSQOYRKXAJI25V939RBDIUVNR4JT0NWTIDUB0J44I15V5U3358MMTM92UWJJ7PJI' where id=95; -update noar tt set v0='XD58SW0WOZPSUK8BV3KRJTMDVB6ZHCGXA1VMQ5ITCGULPKN9Y379RE0TZIMJ4PTT824INEX0RXE8MKMSWZR8E78GU52W9U2ZQ3Z3NRBONYZIFJDTW0F0UE2T56FQ9IIV36GYVJFH336TP584WO0ZB1H73OJ3Z1DRWXW4YN0PNWLIWG888TBOLPFB5QDP0I80NPZMMNIDSKUBH80S019OZ1NF7QLDDEY2H4K1QJ0XG3J3GOF5DYUYGFS1X2W23JEXJ' where id=96; -update noar ti set v0='XD58SW0WOZPSUK8BV3KRJTMDVB6ZHCGXA1VMQ5ITCGULPKN9Y379RE0TZIMJ4PTT824INEX0RXE8MKMSWZR8E78GU52W9U2ZQ3Z3NRBONYZIFJDTW0F0UE2T56FQ9IIV36GYVJFH336TP584WO0ZB1H73OJ3Z1DRWXW4YN0PNWLIWG888TBOLPFB5QDP0I80NPZMMNIDSKUBH80S019OZ1NF7QLDDEY2H4K1QJ0XG3J3GOF5DYUYGFS1X2W23JEXJ' where id=96; -update noar tt set v1='TQCRSB14K5BFO78MT2YKNQT2AAEWCVYO63YPC71A7WQPTNYL7X5SHSCDOUHM2YD78KB52ENGBAIR9WE6V25MI20K22JCRMN115LQGX5JC7NEXHPN33N1BAL9Z24XEPTD3QSEX5C4GBWIHO1AUOEMTHXA9ONZFPB7ZD7PKA1CBC7H7736XS0MQP5XL11HH0SXBVQI8GUL5JYTCEU0Z7ATQJFL3IMLF7S97IPX2H9DW1VPKAVSWD01S7E3K47ESZKYZ' where id=96; -update noar ti set v1='TQCRSB14K5BFO78MT2YKNQT2AAEWCVYO63YPC71A7WQPTNYL7X5SHSCDOUHM2YD78KB52ENGBAIR9WE6V25MI20K22JCRMN115LQGX5JC7NEXHPN33N1BAL9Z24XEPTD3QSEX5C4GBWIHO1AUOEMTHXA9ONZFPB7ZD7PKA1CBC7H7736XS0MQP5XL11HH0SXBVQI8GUL5JYTCEU0Z7ATQJFL3IMLF7S97IPX2H9DW1VPKAVSWD01S7E3K47ESZKYZ' where id=96; -update noar tt set v2='O0LMFHUWRBTJ2RY5OS6ZOMO25H095ZEW1E172HBKDOJ0DOFFH03BJKO8UPQFJB6GAS3WPJENPDZNPDXJ1E0IQYK578Q529ZB9CKOMGILZ2DF9AQSYUPUXMLMA7D4QMLHU3R6LRA79U6WKSC1PT43TMTQOV4QLFI7CIA7G0MWR35AXMBWABYW5CWK9YVXKRH8SGNZIZ47GDR1X8KIV8SZKSVFOH1HARSXZ4UEEFIHX9HNG23AL73P5XDUWCNTVB75Q' where id=96; -update noar ti set v2='O0LMFHUWRBTJ2RY5OS6ZOMO25H095ZEW1E172HBKDOJ0DOFFH03BJKO8UPQFJB6GAS3WPJENPDZNPDXJ1E0IQYK578Q529ZB9CKOMGILZ2DF9AQSYUPUXMLMA7D4QMLHU3R6LRA79U6WKSC1PT43TMTQOV4QLFI7CIA7G0MWR35AXMBWABYW5CWK9YVXKRH8SGNZIZ47GDR1X8KIV8SZKSVFOH1HARSXZ4UEEFIHX9HNG23AL73P5XDUWCNTVB75Q' where id=96; -update noar tt set v3='IU3EZINLEE3FOULALFNKVCBWO1YPK01DOBWRO37TQMQ1YEL4ZSTDZVM5TUP875Y93YP7UQF279KJFF7Z36S7QAAC55F43EPDYBXUAC905WMVOZX81ZTLWOJDGTPRGQLUHA29WSATMX1U09E0AIILEPXL3T2DDBJWXZ6EZOOENBDWCIC6MC04RT6OA7O50JJKNY15PSJ1PJZQY79BG32GFSSP22I90VCH2XSMUEVY7B1N64Z44QKUABQG3YXGTM03F' where id=96; -update noar ti set v3='IU3EZINLEE3FOULALFNKVCBWO1YPK01DOBWRO37TQMQ1YEL4ZSTDZVM5TUP875Y93YP7UQF279KJFF7Z36S7QAAC55F43EPDYBXUAC905WMVOZX81ZTLWOJDGTPRGQLUHA29WSATMX1U09E0AIILEPXL3T2DDBJWXZ6EZOOENBDWCIC6MC04RT6OA7O50JJKNY15PSJ1PJZQY79BG32GFSSP22I90VCH2XSMUEVY7B1N64Z44QKUABQG3YXGTM03F' where id=96; -update noar tt set v0='B3HNSREC0R3SW37L1P9XDJ7ZDEPF7KIYPEC1MFMRRU9LHUPNAVJ4VBVRP0FMJJPZ4KXPDYXH9KWSXDHP1YNBS3HKK1IPACF31YIBHIRVCAS59T1DIF6CVRBFF5JW5LZQIONQ0L8DLIKF4PXDAMCN0097GOXY4ABPC23N1G03SCQTX2QTNOP1PDI9M6F7ZVBUHTNV5XBOK90PI6C9R1QF2Q5EULI9SBMOPZ5OAS8698WGVE685TLQWSJGNPD0G1AKA' where id=97; -update noar ti set v0='B3HNSREC0R3SW37L1P9XDJ7ZDEPF7KIYPEC1MFMRRU9LHUPNAVJ4VBVRP0FMJJPZ4KXPDYXH9KWSXDHP1YNBS3HKK1IPACF31YIBHIRVCAS59T1DIF6CVRBFF5JW5LZQIONQ0L8DLIKF4PXDAMCN0097GOXY4ABPC23N1G03SCQTX2QTNOP1PDI9M6F7ZVBUHTNV5XBOK90PI6C9R1QF2Q5EULI9SBMOPZ5OAS8698WGVE685TLQWSJGNPD0G1AKA' where id=97; -update noar tt set v1='YSMMAZZ1OPW08S47OJPLUV72RO2T2RIUZQREAQ75VE82SYAL6TSSA1MJ3O2A83O1TOAU7VBHAJ5IG4ODR05TY8BN6RFWUEZBJXRW6QOXKJCJ0VEY11Y8YD6JWWK5MHOLAD2FIF4G005RH7GE7TTWX2GONVHAQA4VR8JLVUUPSUV6CY19U0RXWNLP02BCQAEHMJL2F93UC97B08FH2JWT1ZTGYAAV86QYL0BUZ0UCF2895XV86XTSQ7F3TUVWZQEU6' where id=97; -update noar ti set v1='YSMMAZZ1OPW08S47OJPLUV72RO2T2RIUZQREAQ75VE82SYAL6TSSA1MJ3O2A83O1TOAU7VBHAJ5IG4ODR05TY8BN6RFWUEZBJXRW6QOXKJCJ0VEY11Y8YD6JWWK5MHOLAD2FIF4G005RH7GE7TTWX2GONVHAQA4VR8JLVUUPSUV6CY19U0RXWNLP02BCQAEHMJL2F93UC97B08FH2JWT1ZTGYAAV86QYL0BUZ0UCF2895XV86XTSQ7F3TUVWZQEU6' where id=97; -update noar tt set v2='6FNIPC8ALP3KX15590AW3P68ZPUY6WARFDS5EJ8BBJFVV4RAH6YZX7SDWFMWCTUTFMS0MHL0MXM3LNGRF32CIHKFREOEUBACJV9637UWB04RBOND7KHS73TYP7TBIEANJU49YU3TI881G6V568A4RW4J4EBYYOGMLIEEZS7V5YR8Z3V8AVHP1HBLA70SFWQFVAMILB87J8RY6TSLLRBRLQL9QYJ6Z25YGXCOHN4W2XA1DIDHM6I5I2YYCLAHIKUZR' where id=97; -update noar ti set v2='6FNIPC8ALP3KX15590AW3P68ZPUY6WARFDS5EJ8BBJFVV4RAH6YZX7SDWFMWCTUTFMS0MHL0MXM3LNGRF32CIHKFREOEUBACJV9637UWB04RBOND7KHS73TYP7TBIEANJU49YU3TI881G6V568A4RW4J4EBYYOGMLIEEZS7V5YR8Z3V8AVHP1HBLA70SFWQFVAMILB87J8RY6TSLLRBRLQL9QYJ6Z25YGXCOHN4W2XA1DIDHM6I5I2YYCLAHIKUZR' where id=97; -update noar tt set v3='G7BEQIQNCPL9V3SQY1ZY26BZQGH7L3K94FMCYZGCCVD45Z8TGJAKPUX8WBH6JGNSZVPP1BCJ8OSVCTD3EE8SVYMXFSY63ECQ4J5V98DGN2E7VYOL7DVJGBAAFNIH6Z04RPD3WDZLCD2OYJ8JFQ0XQJMJYTLT6JF29JXK7FWF8AREXQ2YZPL5X517D8DMRQVIOAM3M11AQSFNSC5GQOS981WACKFS6Z0USGKCSH8R1SHM7LB819CMNEZRON3BDNLTQ' where id=97; -update noar ti set v3='G7BEQIQNCPL9V3SQY1ZY26BZQGH7L3K94FMCYZGCCVD45Z8TGJAKPUX8WBH6JGNSZVPP1BCJ8OSVCTD3EE8SVYMXFSY63ECQ4J5V98DGN2E7VYOL7DVJGBAAFNIH6Z04RPD3WDZLCD2OYJ8JFQ0XQJMJYTLT6JF29JXK7FWF8AREXQ2YZPL5X517D8DMRQVIOAM3M11AQSFNSC5GQOS981WACKFS6Z0USGKCSH8R1SHM7LB819CMNEZRON3BDNLTQ' where id=97; -update noar tt set v0='17YM75UB7JOWA4MKPQ5PJIYMIM6WVHKOKG4ZA6K4H4RM366MM19ORCT3N3P1LE10843AIPTUPN8HU3OJS3LUQLVFY4LEZ0C8UBHWI048T2GFG40AH5IMPJ4MJHTLWKURD5NIBVH27Y823RSKSJME5LYGEB85T292UGZAIBSV7QB8VPH5P85SHOSGQ6I4MX6SIR31SZOYG9DS7Z8ZEUXU46P974277X7947J7JJXEMCA9L147OBE6YK25WHM90YWMG' where id=98; -update noar ti set v0='17YM75UB7JOWA4MKPQ5PJIYMIM6WVHKOKG4ZA6K4H4RM366MM19ORCT3N3P1LE10843AIPTUPN8HU3OJS3LUQLVFY4LEZ0C8UBHWI048T2GFG40AH5IMPJ4MJHTLWKURD5NIBVH27Y823RSKSJME5LYGEB85T292UGZAIBSV7QB8VPH5P85SHOSGQ6I4MX6SIR31SZOYG9DS7Z8ZEUXU46P974277X7947J7JJXEMCA9L147OBE6YK25WHM90YWMG' where id=98; -update noar tt set v1='AW4O3Z601EYNZAGBNDECMQUMWIH1PRCKAQD78HL1169PK5KDCQS05DZJ32IH1WMU9WG57IN2VPFDEILS3PY4SO5ZIVOW4LC3IOPA28W6VMQW2EHMSIMLHV6D3THV6UDLANAXQG73WR5DMXZVLM7UXSF3SGI6J5KG1ZUUQFZZV7LGG7S45VL5I9UHI8XXK59VKSMSKKSPRALMZVLEIA8RTB23WA5MKDBN2KC8DE45FD47VCWS4OAHP7C9OWDAGV2S5' where id=98; -update noar ti set v1='AW4O3Z601EYNZAGBNDECMQUMWIH1PRCKAQD78HL1169PK5KDCQS05DZJ32IH1WMU9WG57IN2VPFDEILS3PY4SO5ZIVOW4LC3IOPA28W6VMQW2EHMSIMLHV6D3THV6UDLANAXQG73WR5DMXZVLM7UXSF3SGI6J5KG1ZUUQFZZV7LGG7S45VL5I9UHI8XXK59VKSMSKKSPRALMZVLEIA8RTB23WA5MKDBN2KC8DE45FD47VCWS4OAHP7C9OWDAGV2S5' where id=98; -update noar tt set v2='74E41LJXI9JTWOC62IRCK1KHTNQKIUW4SWSW7BQXPLHP4NEL99X1VZB21G18PQNRP4J7DWDJE5ZO8DSGIP755HJW3JLM9VLWCLRB9ZXEHDDU8MO639CKOTLLGF5RLRGQTIXG35VDR3KE7D2OMTXJW2JFKWPBVPHS7F0WKMXO9H27PJ68BA2NS0GQ7RT4II0STLSIYMY6VVIZGD4XBVLUU7F0N2NCKQUGPAFOCOB3VAQO9CIXCOXBYJAE6PH36OJB0' where id=98; -update noar ti set v2='74E41LJXI9JTWOC62IRCK1KHTNQKIUW4SWSW7BQXPLHP4NEL99X1VZB21G18PQNRP4J7DWDJE5ZO8DSGIP755HJW3JLM9VLWCLRB9ZXEHDDU8MO639CKOTLLGF5RLRGQTIXG35VDR3KE7D2OMTXJW2JFKWPBVPHS7F0WKMXO9H27PJ68BA2NS0GQ7RT4II0STLSIYMY6VVIZGD4XBVLUU7F0N2NCKQUGPAFOCOB3VAQO9CIXCOXBYJAE6PH36OJB0' where id=98; -update noar tt set v3='NKAZHADTHWD0N0VHL47U7FMUM6O3MFZN2VAF9YPU98379ZJWS9IPPGPGCWD98V2SRAGBS1Y4WG6AKKVMIWXUZV0CUTZ51CKTPQJQ9BNBSLTGNZ3HC5QP9NITMGMXW7CNTUH1YFGAMN5X7VKE3NE7CNXDZQ6UYBQY03W6MNBRBU0VIWRWL2KUHPEWOI5XHVLDCTUWD5HDU7DJYZ0DRS2J6FXVT6H8JM2OF92XLO31R7Z8CYGECE70TWE0GOP9HU8CS' where id=98; -update noar ti set v3='NKAZHADTHWD0N0VHL47U7FMUM6O3MFZN2VAF9YPU98379ZJWS9IPPGPGCWD98V2SRAGBS1Y4WG6AKKVMIWXUZV0CUTZ51CKTPQJQ9BNBSLTGNZ3HC5QP9NITMGMXW7CNTUH1YFGAMN5X7VKE3NE7CNXDZQ6UYBQY03W6MNBRBU0VIWRWL2KUHPEWOI5XHVLDCTUWD5HDU7DJYZ0DRS2J6FXVT6H8JM2OF92XLO31R7Z8CYGECE70TWE0GOP9HU8CS' where id=98; -update noar tt set v0='2NTLB3QEKWW5DCDPV43TI8YHPOB8JMD56IRAH1Z8D2H722689BKRAMW638L59NXQRDQG0BOZ3WZK78M2RJRH1ILUOLK0K00MFQ9ATC8CO78PACPD2HMRN3MCJBKKLB0DCNB4J9S6EHTA4VY64NVG9MEUJ1TKE2PGHE8BKOR564PE6K2YD436EUMCVFAEJXQMSB9HYEWNOE3PTT4DNJYAIUK7JRQ7HEGNWX44IMSEOYDSMYEWEKOJSACQV3JYCNYTH' where id=99; -update noar ti set v0='2NTLB3QEKWW5DCDPV43TI8YHPOB8JMD56IRAH1Z8D2H722689BKRAMW638L59NXQRDQG0BOZ3WZK78M2RJRH1ILUOLK0K00MFQ9ATC8CO78PACPD2HMRN3MCJBKKLB0DCNB4J9S6EHTA4VY64NVG9MEUJ1TKE2PGHE8BKOR564PE6K2YD436EUMCVFAEJXQMSB9HYEWNOE3PTT4DNJYAIUK7JRQ7HEGNWX44IMSEOYDSMYEWEKOJSACQV3JYCNYTH' where id=99; -update noar tt set v1='U1U5AR0AJETU7MHC72BV30C6OAZLXY7KA0ML6AK18UZVIZVI7LAP6N4H5O9CZHOWZEDNGMH7MY81X1IXBFSIFPC3SQAH6Q11FU3K3GHQV0XUMDCIZW3QJFBTSA8GMT25D5KYY7NUTBG9K1966DT8HGB5TR455R7C4GQK1CGQU84A4MRMIL01A6GOUXQGIGPXKVCAPAM27PH9I950DC5R37BXV19JFHMQFC5KPESX9TI9DMPNX1AJG452MVNY60EP7' where id=99; -update noar ti set v1='U1U5AR0AJETU7MHC72BV30C6OAZLXY7KA0ML6AK18UZVIZVI7LAP6N4H5O9CZHOWZEDNGMH7MY81X1IXBFSIFPC3SQAH6Q11FU3K3GHQV0XUMDCIZW3QJFBTSA8GMT25D5KYY7NUTBG9K1966DT8HGB5TR455R7C4GQK1CGQU84A4MRMIL01A6GOUXQGIGPXKVCAPAM27PH9I950DC5R37BXV19JFHMQFC5KPESX9TI9DMPNX1AJG452MVNY60EP7' where id=99; -update noar tt set v2='4UT93HR61UO15A7VUFJK22JA2T0KLN6BSI96FMSVNM7335TJ9BQV2A6ZDNXBH3LHI6MJWIAR91ALJLDZKB328K49RJIBQYJLT5KKE93X9YDVPMH83XC2AV0SNSPCHWYRPXB9LD6OVM8PWFLOG3OTSPVIDELQHX36OHS7XI4Y5EOUYKHZUCVGB6AA6CAOPT83ISQ0C1WAMFOK2UTJN4B0U8AHPLYVL2X988X4ZGG3OJIOCSMXTV5N8RGC4LDU0VNJY' where id=99; -update noar ti set v2='4UT93HR61UO15A7VUFJK22JA2T0KLN6BSI96FMSVNM7335TJ9BQV2A6ZDNXBH3LHI6MJWIAR91ALJLDZKB328K49RJIBQYJLT5KKE93X9YDVPMH83XC2AV0SNSPCHWYRPXB9LD6OVM8PWFLOG3OTSPVIDELQHX36OHS7XI4Y5EOUYKHZUCVGB6AA6CAOPT83ISQ0C1WAMFOK2UTJN4B0U8AHPLYVL2X988X4ZGG3OJIOCSMXTV5N8RGC4LDU0VNJY' where id=99; -update noar tt set v3='FH4206H0AKGZAR04LTBY5CRSFC2WL9HU3GIIH93K1B2S87WGEIWKPH9CLJS572M5JIL1OR9R97M52X7ZUL90X6ORSY9MC44H6ITNB1XL6IRKZMYV1Q3E44W33L70HP0XXLYIPPPILG17SRQ3D4J6MKO0716J4Z79WLHU2EMETVR0H81OK6I77ER7YVGV9P9XXCUXZDBKUAN9FAZFWMCW2JE906FCKMHU71P99YI83VQS7GVYQRE1AMDHDP3Y5QLHT' where id=99; -update noar ti set v3='FH4206H0AKGZAR04LTBY5CRSFC2WL9HU3GIIH93K1B2S87WGEIWKPH9CLJS572M5JIL1OR9R97M52X7ZUL90X6ORSY9MC44H6ITNB1XL6IRKZMYV1Q3E44W33L70HP0XXLYIPPPILG17SRQ3D4J6MKO0716J4Z79WLHU2EMETVR0H81OK6I77ER7YVGV9P9XXCUXZDBKUAN9FAZFWMCW2JE906FCKMHU71P99YI83VQS7GVYQRE1AMDHDP3Y5QLHT' where id=99; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varbinary(32) null, - v1 varbinary(32) null, - v2 varbinary(32) null, - v3 varbinary(32) null, - b0 text null -) engine=tokudb; -insert into tt (id) values (0); -insert into tt values (1,2,'a','b','c','d','e'); -insert into tt values (2,3,'','','','',''); -insert into tt values (3,4,'','','','',''); -insert into tt values (4,5,'','','','',''); -insert into tt values (5,6,'','','','',''); -insert into tt values (6,7,'','','','',''); -insert into tt values (7,8,'','','','',''); -insert into tt values (8,9,'','','','',''); -insert into tt values (9,10,'','','','',''); -insert into tt values (10,11,'','','','',''); -insert into tt values (11,12,'','','','',''); -insert into tt values (12,13,'','','','',''); -insert into tt values (13,14,'','','','',''); -insert into tt values (14,15,'','','','',''); -insert into tt values (15,16,'','','','',''); -insert into tt values (16,17,'','','','',''); -insert into tt values (17,18,'','','','',''); -insert into tt values (18,19,'','','','',''); -insert into tt values (19,20,'','','','',''); -insert into tt values (20,21,'','','','',''); -insert into tt values (21,22,'','','','',''); -insert into tt values (22,23,'','','','',''); -insert into tt values (23,24,'','','','',''); -insert into tt values (24,25,'','','','',''); -insert into tt values (25,26,'','','','',''); -insert into tt values (26,27,'','','','',''); -insert into tt values (27,28,'','','','',''); -insert into tt values (28,29,'','','','',''); -insert into tt values (29,30,'','','','',''); -insert into tt values (30,31,'','','','',''); -insert into tt values (31,32,'','','','',''); -insert into tt values (32,33,'','','','',''); -insert into tt values (33,34,'','','','',''); -insert into tt values (34,35,'','','','',''); -insert into tt values (35,36,'','','','',''); -insert into tt values (36,37,'','','','',''); -insert into tt values (37,38,'','','','',''); -insert into tt values (38,39,'','','','',''); -insert into tt values (39,40,'','','','',''); -insert into tt values (40,41,'','','','',''); -insert into tt values (41,42,'','','','',''); -insert into tt values (42,43,'','','','',''); -insert into tt values (43,44,'','','','',''); -insert into tt values (44,45,'','','','',''); -insert into tt values (45,46,'','','','',''); -insert into tt values (46,47,'','','','',''); -insert into tt values (47,48,'','','','',''); -insert into tt values (48,49,'','','','',''); -insert into tt values (49,50,'','','','',''); -insert into tt values (50,51,'','','','',''); -insert into tt values (51,52,'','','','',''); -insert into tt values (52,53,'','','','',''); -insert into tt values (53,54,'','','','',''); -insert into tt values (54,55,'','','','',''); -insert into tt values (55,56,'','','','',''); -insert into tt values (56,57,'','','','',''); -insert into tt values (57,58,'','','','',''); -insert into tt values (58,59,'','','','',''); -insert into tt values (59,60,'','','','',''); -insert into tt values (60,61,'','','','',''); -insert into tt values (61,62,'','','','',''); -insert into tt values (62,63,'','','','',''); -insert into tt values (63,64,'','','','',''); -insert into tt values (64,65,'','','','',''); -insert into tt values (65,66,'','','','',''); -insert into tt values (66,67,'','','','',''); -insert into tt values (67,68,'','','','',''); -insert into tt values (68,69,'','','','',''); -insert into tt values (69,70,'','','','',''); -insert into tt values (70,71,'','','','',''); -insert into tt values (71,72,'','','','',''); -insert into tt values (72,73,'','','','',''); -insert into tt values (73,74,'','','','',''); -insert into tt values (74,75,'','','','',''); -insert into tt values (75,76,'','','','',''); -insert into tt values (76,77,'','','','',''); -insert into tt values (77,78,'','','','',''); -insert into tt values (78,79,'','','','',''); -insert into tt values (79,80,'','','','',''); -insert into tt values (80,81,'','','','',''); -insert into tt values (81,82,'','','','',''); -insert into tt values (82,83,'','','','',''); -insert into tt values (83,84,'','','','',''); -insert into tt values (84,85,'','','','',''); -insert into tt values (85,86,'','','','',''); -insert into tt values (86,87,'','','','',''); -insert into tt values (87,88,'','','','',''); -insert into tt values (88,89,'','','','',''); -insert into tt values (89,90,'','','','',''); -insert into tt values (90,91,'','','','',''); -insert into tt values (91,92,'','','','',''); -insert into tt values (92,93,'','','','',''); -insert into tt values (93,94,'','','','',''); -insert into tt values (94,95,'','','','',''); -insert into tt values (95,96,'','','','',''); -insert into tt values (96,97,'','','','',''); -insert into tt values (97,98,'','','','',''); -insert into tt values (98,99,'','','','',''); -insert into tt values (99,100,'','','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='null this 0' where id=0; -update noar ti set v0='null this 0' where id=0; -update noar tt set v1='null is 1' where id=0; -update noar ti set v1='null is 1' where id=0; -update noar tt set v2='null a 2' where id=0; -update noar ti set v2='null a 2' where id=0; -update noar tt set v3='null test 3' where id=0; -update noar ti set v3='null test 3' where id=0; -update noar tt set v0='this 0' where id=1; -update noar ti set v0='this 0' where id=1; -update noar tt set v1='is 1' where id=1; -update noar ti set v1='is 1' where id=1; -update noar tt set v2='another 2' where id=1; -update noar ti set v2='another 2' where id=1; -update noar tt set v3='test 3' where id=1; -update noar ti set v3='test 3' where id=1; -update noar tt set v0='4CP5X4JI3BIPVDNO7Z7P2CTN520K4QDCN' where id=2; -update noar ti set v0='4CP5X4JI3BIPVDNO7Z7P2CTN520K4QDCN' where id=2; -update noar tt set v1='HC7PYXH7C9WR60ULA4OMWD4BMR48R8UX5' where id=2; -update noar ti set v1='HC7PYXH7C9WR60ULA4OMWD4BMR48R8UX5' where id=2; -update noar tt set v2='K5FHOKK2G9C86C3A303DU0FSQQKMFB3YB' where id=2; -update noar ti set v2='K5FHOKK2G9C86C3A303DU0FSQQKMFB3YB' where id=2; -update noar tt set v3='2CXQ1CMYFAWE2LR87ZBMZOC9CQK8OTVSL' where id=2; -update noar ti set v3='2CXQ1CMYFAWE2LR87ZBMZOC9CQK8OTVSL' where id=2; -update noar tt set v0='793DR4UA07GWZNEPR58V97HAGQ3I6D6Y2' where id=3; -update noar ti set v0='793DR4UA07GWZNEPR58V97HAGQ3I6D6Y2' where id=3; -update noar tt set v1='PFBZXCNZYYHWVK5LSXPDQ35QIWY6UBPY7' where id=3; -update noar ti set v1='PFBZXCNZYYHWVK5LSXPDQ35QIWY6UBPY7' where id=3; -update noar tt set v2='CH11HV0RFRP15DHTDY3SN1F5OG7SPPQ3F' where id=3; -update noar ti set v2='CH11HV0RFRP15DHTDY3SN1F5OG7SPPQ3F' where id=3; -update noar tt set v3='U011IYJDGLMK4GV05MS9HGF7LF9Q95H2C' where id=3; -update noar ti set v3='U011IYJDGLMK4GV05MS9HGF7LF9Q95H2C' where id=3; -update noar tt set v0='BB737V4GRTKP57V34ST6L32J3S758HZSD' where id=4; -update noar ti set v0='BB737V4GRTKP57V34ST6L32J3S758HZSD' where id=4; -update noar tt set v1='0RWSKTVOOQQSKPSFJXP8EIUQ3UU3KXYB6' where id=4; -update noar ti set v1='0RWSKTVOOQQSKPSFJXP8EIUQ3UU3KXYB6' where id=4; -update noar tt set v2='2GO899F93HU6LIEJNZUOB7J9C9GV46MMK' where id=4; -update noar ti set v2='2GO899F93HU6LIEJNZUOB7J9C9GV46MMK' where id=4; -update noar tt set v3='8V2N9BGK197IGQD41I3WDI05UYS5J3SNI' where id=4; -update noar ti set v3='8V2N9BGK197IGQD41I3WDI05UYS5J3SNI' where id=4; -update noar tt set v0='9X7RAASZNH2LCGYKFZJBPTVPZKCACM79O' where id=5; -update noar ti set v0='9X7RAASZNH2LCGYKFZJBPTVPZKCACM79O' where id=5; -update noar tt set v1='WYARYZCZR9QTCE688SBNNLZ9FDSOX14NY' where id=5; -update noar ti set v1='WYARYZCZR9QTCE688SBNNLZ9FDSOX14NY' where id=5; -update noar tt set v2='VGD9E8B19FGQYPDNYZM5QVA63HTBHTUGY' where id=5; -update noar ti set v2='VGD9E8B19FGQYPDNYZM5QVA63HTBHTUGY' where id=5; -update noar tt set v3='JDI5QW4YD7KWG94L73DTK6W3VV4XV3XUU' where id=5; -update noar ti set v3='JDI5QW4YD7KWG94L73DTK6W3VV4XV3XUU' where id=5; -update noar tt set v0='6OBVEQVQFNVF857T56VJXICJJF5KQL7GJ' where id=6; -update noar ti set v0='6OBVEQVQFNVF857T56VJXICJJF5KQL7GJ' where id=6; -update noar tt set v1='MJOESFBM818ISRN9P4H0WUPJN48SDCTAT' where id=6; -update noar ti set v1='MJOESFBM818ISRN9P4H0WUPJN48SDCTAT' where id=6; -update noar tt set v2='QH92HZ1IG9A4HWAX2OFG2CWCW9E5V9RZR' where id=6; -update noar ti set v2='QH92HZ1IG9A4HWAX2OFG2CWCW9E5V9RZR' where id=6; -update noar tt set v3='HNXV83AOO765VV601XAV74WK28MNSC8TE' where id=6; -update noar ti set v3='HNXV83AOO765VV601XAV74WK28MNSC8TE' where id=6; -update noar tt set v0='U49CZSR017AKFJ3BX6YDCY9F1OARJ4UTT' where id=7; -update noar ti set v0='U49CZSR017AKFJ3BX6YDCY9F1OARJ4UTT' where id=7; -update noar tt set v1='RZTYCA4IBDJGC7M74CT2RS899HECRQH7O' where id=7; -update noar ti set v1='RZTYCA4IBDJGC7M74CT2RS899HECRQH7O' where id=7; -update noar tt set v2='KT312E7DD2LNM91XIAMBUFOTJRHBYNZJ2' where id=7; -update noar ti set v2='KT312E7DD2LNM91XIAMBUFOTJRHBYNZJ2' where id=7; -update noar tt set v3='FDSOY3E49UUGWPW8ZRGLGMH7OGX1GPIQW' where id=7; -update noar ti set v3='FDSOY3E49UUGWPW8ZRGLGMH7OGX1GPIQW' where id=7; -update noar tt set v0='CUO9CN8O71QR50KA5ONA2UVKJR1M8UQZM' where id=8; -update noar ti set v0='CUO9CN8O71QR50KA5ONA2UVKJR1M8UQZM' where id=8; -update noar tt set v1='EDGJ0L7LI1LJD0ZQ3W3EE9KPY9B858K2P' where id=8; -update noar ti set v1='EDGJ0L7LI1LJD0ZQ3W3EE9KPY9B858K2P' where id=8; -update noar tt set v2='5M22FGC8VPGXEIPZ42ILEDWKN4QGR7XRL' where id=8; -update noar ti set v2='5M22FGC8VPGXEIPZ42ILEDWKN4QGR7XRL' where id=8; -update noar tt set v3='PQTMEVXQ1Y6MP4FFTK40UUY77OJY9VPPI' where id=8; -update noar ti set v3='PQTMEVXQ1Y6MP4FFTK40UUY77OJY9VPPI' where id=8; -update noar tt set v0='6TK6YVBHDIR47H1VUITL8CNCADHPJSA6Y' where id=9; -update noar ti set v0='6TK6YVBHDIR47H1VUITL8CNCADHPJSA6Y' where id=9; -update noar tt set v1='OAU91413DXXAK7M0T9QGRBW2B0PL97FTG' where id=9; -update noar ti set v1='OAU91413DXXAK7M0T9QGRBW2B0PL97FTG' where id=9; -update noar tt set v2='EX4Y7MO577Z0NOCSSA52PA584HZ896YOJ' where id=9; -update noar ti set v2='EX4Y7MO577Z0NOCSSA52PA584HZ896YOJ' where id=9; -update noar tt set v3='TNJVERII0US72LZJOAP87UT6ZS320JI4C' where id=9; -update noar ti set v3='TNJVERII0US72LZJOAP87UT6ZS320JI4C' where id=9; -update noar tt set v0='KX4VD5NDNQYREB9HCNE40PFWIFWJNQCM8' where id=10; -update noar ti set v0='KX4VD5NDNQYREB9HCNE40PFWIFWJNQCM8' where id=10; -update noar tt set v1='MSBBYB879R6P45IGSCA3PV7TVYU6SMDJW' where id=10; -update noar ti set v1='MSBBYB879R6P45IGSCA3PV7TVYU6SMDJW' where id=10; -update noar tt set v2='61UJL0OACRSO64FGWGFYQRC1DR8OI1W7Z' where id=10; -update noar ti set v2='61UJL0OACRSO64FGWGFYQRC1DR8OI1W7Z' where id=10; -update noar tt set v3='DJA5KVC44MAUOXVW58IXTY8KVDJ60W0RU' where id=10; -update noar ti set v3='DJA5KVC44MAUOXVW58IXTY8KVDJ60W0RU' where id=10; -update noar tt set v0='F3KKDXYITEX2ZJGGXTFX12AK18R722YKV' where id=11; -update noar ti set v0='F3KKDXYITEX2ZJGGXTFX12AK18R722YKV' where id=11; -update noar tt set v1='BO0GMVUCD7J1SOKOM69WERXWQKET0AQOQ' where id=11; -update noar ti set v1='BO0GMVUCD7J1SOKOM69WERXWQKET0AQOQ' where id=11; -update noar tt set v2='C5H8G7L00U1EF6Z6J6V6ZGGCU6G4GITBM' where id=11; -update noar ti set v2='C5H8G7L00U1EF6Z6J6V6ZGGCU6G4GITBM' where id=11; -update noar tt set v3='X0FD3CKW82J2LAPC199SJV81Y6AKH3261' where id=11; -update noar ti set v3='X0FD3CKW82J2LAPC199SJV81Y6AKH3261' where id=11; -update noar tt set v0='J9M0SX7VQAJWD5RSY6OQRH54ZWPKTTRIG' where id=12; -update noar ti set v0='J9M0SX7VQAJWD5RSY6OQRH54ZWPKTTRIG' where id=12; -update noar tt set v1='MSWTOLNBO3TVXVUTQ418BHXJWVTIYFYP3' where id=12; -update noar ti set v1='MSWTOLNBO3TVXVUTQ418BHXJWVTIYFYP3' where id=12; -update noar tt set v2='BURRPFBYSCQCQA1P1B5GDN2FDI7KKBQD2' where id=12; -update noar ti set v2='BURRPFBYSCQCQA1P1B5GDN2FDI7KKBQD2' where id=12; -update noar tt set v3='AENI8YAP7HCL1VYZS7P7IPV7M4B9P16WR' where id=12; -update noar ti set v3='AENI8YAP7HCL1VYZS7P7IPV7M4B9P16WR' where id=12; -update noar tt set v0='T33IEGIGPA4YJTIGFY01S9ROY0WN2AHPJ' where id=13; -update noar ti set v0='T33IEGIGPA4YJTIGFY01S9ROY0WN2AHPJ' where id=13; -update noar tt set v1='A0KOR8TK5S1YUCGTJ141UAGPJC0IQUHA1' where id=13; -update noar ti set v1='A0KOR8TK5S1YUCGTJ141UAGPJC0IQUHA1' where id=13; -update noar tt set v2='IBO47UGFLR5YMS3OHOES3TFR2RJTNAUI4' where id=13; -update noar ti set v2='IBO47UGFLR5YMS3OHOES3TFR2RJTNAUI4' where id=13; -update noar tt set v3='9IJN8SQ9DKBSDZMVP5RTJ1N183N22LX9W' where id=13; -update noar ti set v3='9IJN8SQ9DKBSDZMVP5RTJ1N183N22LX9W' where id=13; -update noar tt set v0='VK7YYZ4DRDRLOXHDHO2376CMZ8O61OQG4' where id=14; -update noar ti set v0='VK7YYZ4DRDRLOXHDHO2376CMZ8O61OQG4' where id=14; -update noar tt set v1='303BLIRJSIBC6RCSG6MUFJ0YDRJDA35UI' where id=14; -update noar ti set v1='303BLIRJSIBC6RCSG6MUFJ0YDRJDA35UI' where id=14; -update noar tt set v2='NTYW8UZE23Q6HGHCXWO25G1DRHS0L725A' where id=14; -update noar ti set v2='NTYW8UZE23Q6HGHCXWO25G1DRHS0L725A' where id=14; -update noar tt set v3='0DKIBFHRCR8T2T5VHOZM6V4TOC787AT4T' where id=14; -update noar ti set v3='0DKIBFHRCR8T2T5VHOZM6V4TOC787AT4T' where id=14; -update noar tt set v0='5YU92WTZXROC00E31GCF5R3WS1FRJJ1T0' where id=15; -update noar ti set v0='5YU92WTZXROC00E31GCF5R3WS1FRJJ1T0' where id=15; -update noar tt set v1='03M43BN1ND9B2JUU03B49IPTQE2LM7FA5' where id=15; -update noar ti set v1='03M43BN1ND9B2JUU03B49IPTQE2LM7FA5' where id=15; -update noar tt set v2='4XIQFZDX4MXHH6BHKVZVJN0ROTRPZFXEJ' where id=15; -update noar ti set v2='4XIQFZDX4MXHH6BHKVZVJN0ROTRPZFXEJ' where id=15; -update noar tt set v3='M2SGE4XHADZWBQ1Q5QBN5LIYP82JJDDHE' where id=15; -update noar ti set v3='M2SGE4XHADZWBQ1Q5QBN5LIYP82JJDDHE' where id=15; -update noar tt set v0='DRVDZI5ZFD3UFRDA7Y4EZSXU6KTEXM5QU' where id=16; -update noar ti set v0='DRVDZI5ZFD3UFRDA7Y4EZSXU6KTEXM5QU' where id=16; -update noar tt set v1='GH8OBG3N7IT91MR877SKTLM6DVZS9N9HL' where id=16; -update noar ti set v1='GH8OBG3N7IT91MR877SKTLM6DVZS9N9HL' where id=16; -update noar tt set v2='P6ZM3JF3NJHTYHCRRLT1BAINKHSJR42XO' where id=16; -update noar ti set v2='P6ZM3JF3NJHTYHCRRLT1BAINKHSJR42XO' where id=16; -update noar tt set v3='GC2LVNHRNJ0WY14FJLVKFHVU4WKD1P2WJ' where id=16; -update noar ti set v3='GC2LVNHRNJ0WY14FJLVKFHVU4WKD1P2WJ' where id=16; -update noar tt set v0='7DPKSYB9BNPQR6ZFXUXGAUW5AAM49F6G5' where id=17; -update noar ti set v0='7DPKSYB9BNPQR6ZFXUXGAUW5AAM49F6G5' where id=17; -update noar tt set v1='P5BHDAG1RH0P5HCM9584JBPXNM1MW4Z67' where id=17; -update noar ti set v1='P5BHDAG1RH0P5HCM9584JBPXNM1MW4Z67' where id=17; -update noar tt set v2='ZGR15VERBSHFBXOE0X3IDQ1MGOS1CILMK' where id=17; -update noar ti set v2='ZGR15VERBSHFBXOE0X3IDQ1MGOS1CILMK' where id=17; -update noar tt set v3='6SGXIXYGD6EBYVQMMNDTE5GN229LZ2XJM' where id=17; -update noar ti set v3='6SGXIXYGD6EBYVQMMNDTE5GN229LZ2XJM' where id=17; -update noar tt set v0='2WQZCHQZ6YWLS4MHVN7MAXSA3R603FGX3' where id=18; -update noar ti set v0='2WQZCHQZ6YWLS4MHVN7MAXSA3R603FGX3' where id=18; -update noar tt set v1='TNQEFHY5LKKX5JRH78N952QAUJ88ZFX3R' where id=18; -update noar ti set v1='TNQEFHY5LKKX5JRH78N952QAUJ88ZFX3R' where id=18; -update noar tt set v2='THRKPBKBBIB1IZO5CMSULQA73FOLUG540' where id=18; -update noar ti set v2='THRKPBKBBIB1IZO5CMSULQA73FOLUG540' where id=18; -update noar tt set v3='QZW6GAXQ41EIWZ841PIMWTHA7P05FFCWS' where id=18; -update noar ti set v3='QZW6GAXQ41EIWZ841PIMWTHA7P05FFCWS' where id=18; -update noar tt set v0='5EDU1258VE5LPJQRYTHZ8HIOZFQ81R2WN' where id=19; -update noar ti set v0='5EDU1258VE5LPJQRYTHZ8HIOZFQ81R2WN' where id=19; -update noar tt set v1='775SD126XX2YC689R3K1MHUWD7IDGXC8D' where id=19; -update noar ti set v1='775SD126XX2YC689R3K1MHUWD7IDGXC8D' where id=19; -update noar tt set v2='WGFIGIJ4TXCLVTDMHMMBOL9TYSJT2U5J7' where id=19; -update noar ti set v2='WGFIGIJ4TXCLVTDMHMMBOL9TYSJT2U5J7' where id=19; -update noar tt set v3='B9R4R8WVPSW8UJSLM5XFHDLR4TR2VFAOQ' where id=19; -update noar ti set v3='B9R4R8WVPSW8UJSLM5XFHDLR4TR2VFAOQ' where id=19; -update noar tt set v0='JLL0RRC526GSC0OZ81S18P5RF6Z693OAB' where id=20; -update noar ti set v0='JLL0RRC526GSC0OZ81S18P5RF6Z693OAB' where id=20; -update noar tt set v1='4CFN1V3SZHMB880GPEMN4OZVS7JUFKD7H' where id=20; -update noar ti set v1='4CFN1V3SZHMB880GPEMN4OZVS7JUFKD7H' where id=20; -update noar tt set v2='35QG2JL3N7FAXBV8VXBVNPWBYR9DFQK2J' where id=20; -update noar ti set v2='35QG2JL3N7FAXBV8VXBVNPWBYR9DFQK2J' where id=20; -update noar tt set v3='9OBSW8L1SSF2BH2HGKJVT1AJ3IUV2SV2T' where id=20; -update noar ti set v3='9OBSW8L1SSF2BH2HGKJVT1AJ3IUV2SV2T' where id=20; -update noar tt set v0='46WNV380G1UCHVV2Y088QPDKW2XH7IQ34' where id=21; -update noar ti set v0='46WNV380G1UCHVV2Y088QPDKW2XH7IQ34' where id=21; -update noar tt set v1='UT74SRDGJ162PST8KYOHLNR9NBX4FDNZB' where id=21; -update noar ti set v1='UT74SRDGJ162PST8KYOHLNR9NBX4FDNZB' where id=21; -update noar tt set v2='PFNMIR36SAP05GKA8V84QPAEXFFXTJF1L' where id=21; -update noar ti set v2='PFNMIR36SAP05GKA8V84QPAEXFFXTJF1L' where id=21; -update noar tt set v3='8JPG5Z2F7Q82TXDAKY5XV5833VAIOXGS5' where id=21; -update noar ti set v3='8JPG5Z2F7Q82TXDAKY5XV5833VAIOXGS5' where id=21; -update noar tt set v0='0UKXDDT0GGG902TJUTEXP3WZX9YGUGI2H' where id=22; -update noar ti set v0='0UKXDDT0GGG902TJUTEXP3WZX9YGUGI2H' where id=22; -update noar tt set v1='KOJB5S4VNENEDL295MJCKSG0U6EWK2PCU' where id=22; -update noar ti set v1='KOJB5S4VNENEDL295MJCKSG0U6EWK2PCU' where id=22; -update noar tt set v2='U0V3DCABX2ZDQ6RSB5PFLFNY2J01GCK6F' where id=22; -update noar ti set v2='U0V3DCABX2ZDQ6RSB5PFLFNY2J01GCK6F' where id=22; -update noar tt set v3='0Z3TPX143JBX447B6NJ3LWYMLZ00BBWKK' where id=22; -update noar ti set v3='0Z3TPX143JBX447B6NJ3LWYMLZ00BBWKK' where id=22; -update noar tt set v0='ZY8EE75LVSXW4AU3EIL3B985J4TOH5IO1' where id=23; -update noar ti set v0='ZY8EE75LVSXW4AU3EIL3B985J4TOH5IO1' where id=23; -update noar tt set v1='D5FD17Z0K5GAPV0CMS50B2IV75V4IUXZQ' where id=23; -update noar ti set v1='D5FD17Z0K5GAPV0CMS50B2IV75V4IUXZQ' where id=23; -update noar tt set v2='7MUR2EHV1TRV16HNTPJ00LOO01798AFNB' where id=23; -update noar ti set v2='7MUR2EHV1TRV16HNTPJ00LOO01798AFNB' where id=23; -update noar tt set v3='AREQ7QKLJF6ZN0Z0UK55U2MSYDAYELT23' where id=23; -update noar ti set v3='AREQ7QKLJF6ZN0Z0UK55U2MSYDAYELT23' where id=23; -update noar tt set v0='4Q504T13MWXR6ULK0YUWCRI4G3V50P6PF' where id=24; -update noar ti set v0='4Q504T13MWXR6ULK0YUWCRI4G3V50P6PF' where id=24; -update noar tt set v1='UK541KYG7R7XHGMES2U39VYTK3QMIP2I1' where id=24; -update noar ti set v1='UK541KYG7R7XHGMES2U39VYTK3QMIP2I1' where id=24; -update noar tt set v2='6BXFG7ZUBWMWKFYU4HX4XCXFBQEGU6ARA' where id=24; -update noar ti set v2='6BXFG7ZUBWMWKFYU4HX4XCXFBQEGU6ARA' where id=24; -update noar tt set v3='UXGAOQUET56F4Q22WM3HO3RR8STL3BTGX' where id=24; -update noar ti set v3='UXGAOQUET56F4Q22WM3HO3RR8STL3BTGX' where id=24; -update noar tt set v0='6MYJ4932OBD45L7YC3L5MRMS2PK3X4ODU' where id=25; -update noar ti set v0='6MYJ4932OBD45L7YC3L5MRMS2PK3X4ODU' where id=25; -update noar tt set v1='JVTGCDRKTA4GXTGEKXDFDV7PKMOGI9IG9' where id=25; -update noar ti set v1='JVTGCDRKTA4GXTGEKXDFDV7PKMOGI9IG9' where id=25; -update noar tt set v2='SRXI5GYYDI859KJSLAONF19LMWABF8WYK' where id=25; -update noar ti set v2='SRXI5GYYDI859KJSLAONF19LMWABF8WYK' where id=25; -update noar tt set v3='EFXY8QR9T5F65EG2W2R9JHT8WXCF0EK87' where id=25; -update noar ti set v3='EFXY8QR9T5F65EG2W2R9JHT8WXCF0EK87' where id=25; -update noar tt set v0='NSO4PI7CNZW5A428BJRH10CJBEH5PZ47Z' where id=26; -update noar ti set v0='NSO4PI7CNZW5A428BJRH10CJBEH5PZ47Z' where id=26; -update noar tt set v1='8KRE4HS895B1E53HZFOUC1PHZSKU1E8TD' where id=26; -update noar ti set v1='8KRE4HS895B1E53HZFOUC1PHZSKU1E8TD' where id=26; -update noar tt set v2='M2RROHXDEYBF08RUB7VVED0WMY4FPVDEA' where id=26; -update noar ti set v2='M2RROHXDEYBF08RUB7VVED0WMY4FPVDEA' where id=26; -update noar tt set v3='AMIARU95LSVVGGSA9GMRHMWR81NTHDJ2S' where id=26; -update noar ti set v3='AMIARU95LSVVGGSA9GMRHMWR81NTHDJ2S' where id=26; -update noar tt set v0='1NGJS2DZYT851F7V7Q9EN69E5OG6NI2GS' where id=27; -update noar ti set v0='1NGJS2DZYT851F7V7Q9EN69E5OG6NI2GS' where id=27; -update noar tt set v1='KDHJFRBIFTSSL50L43SRL8NIEH4AC29TV' where id=27; -update noar ti set v1='KDHJFRBIFTSSL50L43SRL8NIEH4AC29TV' where id=27; -update noar tt set v2='UWNFRLAWJFIE8HTGNVZSLJV8UWFOWYVGM' where id=27; -update noar ti set v2='UWNFRLAWJFIE8HTGNVZSLJV8UWFOWYVGM' where id=27; -update noar tt set v3='CM9KK9IA3R0JS36E4OPKN4X5P3J3QGXGW' where id=27; -update noar ti set v3='CM9KK9IA3R0JS36E4OPKN4X5P3J3QGXGW' where id=27; -update noar tt set v0='WXVL0VAU46AEAECLL4IWODIURRN1NRJ61' where id=28; -update noar ti set v0='WXVL0VAU46AEAECLL4IWODIURRN1NRJ61' where id=28; -update noar tt set v1='FLNXU7KAEBYIA1QVIPGAC0HQGA7CGYB97' where id=28; -update noar ti set v1='FLNXU7KAEBYIA1QVIPGAC0HQGA7CGYB97' where id=28; -update noar tt set v2='HZ5SSKV25ICEW6MOX1L5FTDCP5LKCTXXT' where id=28; -update noar ti set v2='HZ5SSKV25ICEW6MOX1L5FTDCP5LKCTXXT' where id=28; -update noar tt set v3='XNGMLS5BJ2IOZM3O0ZN5RQ5OU0O53KFQI' where id=28; -update noar ti set v3='XNGMLS5BJ2IOZM3O0ZN5RQ5OU0O53KFQI' where id=28; -update noar tt set v0='8X5BD0AQOLFSQRBAUMWH4ZH7KMOJMPM0X' where id=29; -update noar ti set v0='8X5BD0AQOLFSQRBAUMWH4ZH7KMOJMPM0X' where id=29; -update noar tt set v1='VY2VPMVG4EY938I04X0J8QQJVY5Z82ZCF' where id=29; -update noar ti set v1='VY2VPMVG4EY938I04X0J8QQJVY5Z82ZCF' where id=29; -update noar tt set v2='2DWL9ZHLGQKW5FX2WWLHHMXIECOP8KX5H' where id=29; -update noar ti set v2='2DWL9ZHLGQKW5FX2WWLHHMXIECOP8KX5H' where id=29; -update noar tt set v3='B8YMT03HGSMR4G1YQL64ZF89BFMOA3KVI' where id=29; -update noar ti set v3='B8YMT03HGSMR4G1YQL64ZF89BFMOA3KVI' where id=29; -update noar tt set v0='9TAHULKNSN78RRNNZCLZUVYNR15WBXPQ4' where id=30; -update noar ti set v0='9TAHULKNSN78RRNNZCLZUVYNR15WBXPQ4' where id=30; -update noar tt set v1='S90UAF4G65THLKJ32ZYHA1Q5ZMLOIK6ZL' where id=30; -update noar ti set v1='S90UAF4G65THLKJ32ZYHA1Q5ZMLOIK6ZL' where id=30; -update noar tt set v2='XQ3OENJ87EJGBGVR39SSBBPRPNDO7XOS5' where id=30; -update noar ti set v2='XQ3OENJ87EJGBGVR39SSBBPRPNDO7XOS5' where id=30; -update noar tt set v3='5M4X6EDWDA3VFBBCS5UMYGVL9BMNN0JD4' where id=30; -update noar ti set v3='5M4X6EDWDA3VFBBCS5UMYGVL9BMNN0JD4' where id=30; -update noar tt set v0='G9162K93ZFX25S2DA7WXGQPDTFWLWLUBZ' where id=31; -update noar ti set v0='G9162K93ZFX25S2DA7WXGQPDTFWLWLUBZ' where id=31; -update noar tt set v1='BPODCXXZ7O8GFZB9F6HNFU8E8JO5I825K' where id=31; -update noar ti set v1='BPODCXXZ7O8GFZB9F6HNFU8E8JO5I825K' where id=31; -update noar tt set v2='RPWSOAON5CGL6WZINYDISF7TCGITG2N4H' where id=31; -update noar ti set v2='RPWSOAON5CGL6WZINYDISF7TCGITG2N4H' where id=31; -update noar tt set v3='X9VFTE9H7U6VZ2XGY1Z190UIAQ34VWS7K' where id=31; -update noar ti set v3='X9VFTE9H7U6VZ2XGY1Z190UIAQ34VWS7K' where id=31; -update noar tt set v0='MSPBDFB032UUMC2FJLZFOUECQ6X9SY6FN' where id=32; -update noar ti set v0='MSPBDFB032UUMC2FJLZFOUECQ6X9SY6FN' where id=32; -update noar tt set v1='7E975JP7W479XYPVAAFVAM77KWJR2WDV4' where id=32; -update noar ti set v1='7E975JP7W479XYPVAAFVAM77KWJR2WDV4' where id=32; -update noar tt set v2='D0FKVNIBA7C0MRDG1YSW5LE1GRCGXIPG8' where id=32; -update noar ti set v2='D0FKVNIBA7C0MRDG1YSW5LE1GRCGXIPG8' where id=32; -update noar tt set v3='334N2FM0WB4O6SDH99VQTZNOGG21TOH9B' where id=32; -update noar ti set v3='334N2FM0WB4O6SDH99VQTZNOGG21TOH9B' where id=32; -update noar tt set v0='DCCZEXYNV3379AN2L2VM7FSRC15ZZM5D7' where id=33; -update noar ti set v0='DCCZEXYNV3379AN2L2VM7FSRC15ZZM5D7' where id=33; -update noar tt set v1='0M67C8QUZIA52ZKYHCMNP94WBU463XIIF' where id=33; -update noar ti set v1='0M67C8QUZIA52ZKYHCMNP94WBU463XIIF' where id=33; -update noar tt set v2='AIU7JVPC24UL6ZDCKG8XCQZSF66MD4CWI' where id=33; -update noar ti set v2='AIU7JVPC24UL6ZDCKG8XCQZSF66MD4CWI' where id=33; -update noar tt set v3='JI1W62A1K1IOZ9MY4PMC41RR15RW9K8SI' where id=33; -update noar ti set v3='JI1W62A1K1IOZ9MY4PMC41RR15RW9K8SI' where id=33; -update noar tt set v0='K3KOWVVOQD2SF82ZQ0FJ8M84JWR63GW7N' where id=34; -update noar ti set v0='K3KOWVVOQD2SF82ZQ0FJ8M84JWR63GW7N' where id=34; -update noar tt set v1='3RYTC4FST2JNIPZZLY3BVM6DNSV1BYGJO' where id=34; -update noar ti set v1='3RYTC4FST2JNIPZZLY3BVM6DNSV1BYGJO' where id=34; -update noar tt set v2='PGO9LB9WQQV6I18NB79CIVAOMW1UA5JG5' where id=34; -update noar ti set v2='PGO9LB9WQQV6I18NB79CIVAOMW1UA5JG5' where id=34; -update noar tt set v3='WXTST0S0NO9Q2XVKUFNLKNOHLPVR5WMW3' where id=34; -update noar ti set v3='WXTST0S0NO9Q2XVKUFNLKNOHLPVR5WMW3' where id=34; -update noar tt set v0='QCYAPRWZL02L8P0JHB9OYXZZUK7DKEMKZ' where id=35; -update noar ti set v0='QCYAPRWZL02L8P0JHB9OYXZZUK7DKEMKZ' where id=35; -update noar tt set v1='QX6HNVX1TSMS3KDCTS2UDMD01OSBHGSQA' where id=35; -update noar ti set v1='QX6HNVX1TSMS3KDCTS2UDMD01OSBHGSQA' where id=35; -update noar tt set v2='9A6BAW9ZMGUU1X16TWO30NZCKWD4C06TQ' where id=35; -update noar ti set v2='9A6BAW9ZMGUU1X16TWO30NZCKWD4C06TQ' where id=35; -update noar tt set v3='K6S6JOOP7RYSTYT4VEXL71VOGFBY4IPJD' where id=35; -update noar ti set v3='K6S6JOOP7RYSTYT4VEXL71VOGFBY4IPJD' where id=35; -update noar tt set v0='RI4ANVX8PMG3JB152YV1GBHGC4TL5E5SN' where id=36; -update noar ti set v0='RI4ANVX8PMG3JB152YV1GBHGC4TL5E5SN' where id=36; -update noar tt set v1='YHU9HEQYPBN5FGJZ74CBMBHAS24PMSCIE' where id=36; -update noar ti set v1='YHU9HEQYPBN5FGJZ74CBMBHAS24PMSCIE' where id=36; -update noar tt set v2='NWPLUBLTD2UXNG1IDR1UZAFE4VHDYDJPV' where id=36; -update noar ti set v2='NWPLUBLTD2UXNG1IDR1UZAFE4VHDYDJPV' where id=36; -update noar tt set v3='3J7QSZA1789TZYPWLD5BBHY8VPBI8DZLX' where id=36; -update noar ti set v3='3J7QSZA1789TZYPWLD5BBHY8VPBI8DZLX' where id=36; -update noar tt set v0='2T7IMNEKKTKT5UPRSSPK1868D0IAPWCVP' where id=37; -update noar ti set v0='2T7IMNEKKTKT5UPRSSPK1868D0IAPWCVP' where id=37; -update noar tt set v1='G2VKZN58QXC9K7DDT0JGXQDLWIAD0SJF1' where id=37; -update noar ti set v1='G2VKZN58QXC9K7DDT0JGXQDLWIAD0SJF1' where id=37; -update noar tt set v2='DJPEITEJ6M70B1MWMRIAXUIGQGTFOYYX7' where id=37; -update noar ti set v2='DJPEITEJ6M70B1MWMRIAXUIGQGTFOYYX7' where id=37; -update noar tt set v3='62XLPFM3EUXBUEP4FBM4X7I6I08NMWXSM' where id=37; -update noar ti set v3='62XLPFM3EUXBUEP4FBM4X7I6I08NMWXSM' where id=37; -update noar tt set v0='R912P2HF5EHVFY6OYWY328BV0MJWIYB02' where id=38; -update noar ti set v0='R912P2HF5EHVFY6OYWY328BV0MJWIYB02' where id=38; -update noar tt set v1='ITQL0YP43X806V16F60HUPA0FCKKDEC5D' where id=38; -update noar ti set v1='ITQL0YP43X806V16F60HUPA0FCKKDEC5D' where id=38; -update noar tt set v2='3MVKMCM37ET5Y3UJDMMS6885EM079QB3Z' where id=38; -update noar ti set v2='3MVKMCM37ET5Y3UJDMMS6885EM079QB3Z' where id=38; -update noar tt set v3='VMRBAP9TCGCN6X6FRBF5TM1JUMANKD9M6' where id=38; -update noar ti set v3='VMRBAP9TCGCN6X6FRBF5TM1JUMANKD9M6' where id=38; -update noar tt set v0='DT5E4D9CD7UG4RRZDU3NTGRGWLU8DREYP' where id=39; -update noar ti set v0='DT5E4D9CD7UG4RRZDU3NTGRGWLU8DREYP' where id=39; -update noar tt set v1='L9GU0DO74KS50X401JR3Q0A8WNUJ5IPEX' where id=39; -update noar ti set v1='L9GU0DO74KS50X401JR3Q0A8WNUJ5IPEX' where id=39; -update noar tt set v2='FA0WDNHT4UL3IMNHXK7OH3UKKHE1RX8N8' where id=39; -update noar ti set v2='FA0WDNHT4UL3IMNHXK7OH3UKKHE1RX8N8' where id=39; -update noar tt set v3='IFW24W1X1BB8UTD2VSQGK017K8OHXUW56' where id=39; -update noar ti set v3='IFW24W1X1BB8UTD2VSQGK017K8OHXUW56' where id=39; -update noar tt set v0='MKJKE3COIAQ3A67Y0RYOHOLFKDLL9GWAJ' where id=40; -update noar ti set v0='MKJKE3COIAQ3A67Y0RYOHOLFKDLL9GWAJ' where id=40; -update noar tt set v1='GLID9S2KYZB9ACCUWPYKMEDXWP7TG9MFE' where id=40; -update noar ti set v1='GLID9S2KYZB9ACCUWPYKMEDXWP7TG9MFE' where id=40; -update noar tt set v2='ST2VEUTOE96PSUJDSE8PEQRMH8YB35CTM' where id=40; -update noar ti set v2='ST2VEUTOE96PSUJDSE8PEQRMH8YB35CTM' where id=40; -update noar tt set v3='A3XJVUHBILK9OHEPUD57RUIRZNVYLG63S' where id=40; -update noar ti set v3='A3XJVUHBILK9OHEPUD57RUIRZNVYLG63S' where id=40; -update noar tt set v0='3UWR1YYR5HS6ZDU6MRQI7Y15UE24DK2S3' where id=41; -update noar ti set v0='3UWR1YYR5HS6ZDU6MRQI7Y15UE24DK2S3' where id=41; -update noar tt set v1='VAA4210P14672GH4DM6L0ECZYZ09OSDW8' where id=41; -update noar ti set v1='VAA4210P14672GH4DM6L0ECZYZ09OSDW8' where id=41; -update noar tt set v2='B8F0TP4VR56U0LQ03DFHHK4JUJ9UB7ENT' where id=41; -update noar ti set v2='B8F0TP4VR56U0LQ03DFHHK4JUJ9UB7ENT' where id=41; -update noar tt set v3='FFQWF8RJT1PNQIEI57WSVIXHQ2LKTXCUP' where id=41; -update noar ti set v3='FFQWF8RJT1PNQIEI57WSVIXHQ2LKTXCUP' where id=41; -update noar tt set v0='O6VWMNB08WSKPY52C23PJ0EMB12D7M9ZA' where id=42; -update noar ti set v0='O6VWMNB08WSKPY52C23PJ0EMB12D7M9ZA' where id=42; -update noar tt set v1='XBXLZOAH7VXWIKBR2LWXG1NI53CZIXKQS' where id=42; -update noar ti set v1='XBXLZOAH7VXWIKBR2LWXG1NI53CZIXKQS' where id=42; -update noar tt set v2='ABJXY62V528OILRK03WD3Q9QBLFI1B28P' where id=42; -update noar ti set v2='ABJXY62V528OILRK03WD3Q9QBLFI1B28P' where id=42; -update noar tt set v3='AOXKZHVQHCA41PBLJJNSVEO2UEEFG2JK3' where id=42; -update noar ti set v3='AOXKZHVQHCA41PBLJJNSVEO2UEEFG2JK3' where id=42; -update noar tt set v0='9LHIQC9TVMFHHFI32KY0OS04GDZ1BTH0L' where id=43; -update noar ti set v0='9LHIQC9TVMFHHFI32KY0OS04GDZ1BTH0L' where id=43; -update noar tt set v1='RTS18K1IEHJNSA5NRQOZB4HAYBRZ0KJEV' where id=43; -update noar ti set v1='RTS18K1IEHJNSA5NRQOZB4HAYBRZ0KJEV' where id=43; -update noar tt set v2='V5XQW02KVYP37BSQA5E8MOMOT9VTMJ40I' where id=43; -update noar ti set v2='V5XQW02KVYP37BSQA5E8MOMOT9VTMJ40I' where id=43; -update noar tt set v3='5Y4B39JWO22GQ2N9P4EO1TLXTWDFT0DEN' where id=43; -update noar ti set v3='5Y4B39JWO22GQ2N9P4EO1TLXTWDFT0DEN' where id=43; -update noar tt set v0='PGKK16QDOOCE96HKCVBLEMDCKVG9V1JMO' where id=44; -update noar ti set v0='PGKK16QDOOCE96HKCVBLEMDCKVG9V1JMO' where id=44; -update noar tt set v1='78LW6GXX6Q16BPOVMOYSTYJWYHZ30TR8T' where id=44; -update noar ti set v1='78LW6GXX6Q16BPOVMOYSTYJWYHZ30TR8T' where id=44; -update noar tt set v2='QEAO4FTMGX0X009R64GRNAC0NRY8T0GOO' where id=44; -update noar ti set v2='QEAO4FTMGX0X009R64GRNAC0NRY8T0GOO' where id=44; -update noar tt set v3='2X16FM6TI5P79G3II2UQSLY1OVSAT12Q1' where id=44; -update noar ti set v3='2X16FM6TI5P79G3II2UQSLY1OVSAT12Q1' where id=44; -update noar tt set v0='ESXKX6USB9XY4FYXSD88PQI718391HAGN' where id=45; -update noar ti set v0='ESXKX6USB9XY4FYXSD88PQI718391HAGN' where id=45; -update noar tt set v1='0P2YNW03FRTHLLQ9FT78C37AUZ1TBV87F' where id=45; -update noar ti set v1='0P2YNW03FRTHLLQ9FT78C37AUZ1TBV87F' where id=45; -update noar tt set v2='413UKX649L2MF40T6HAZDMA9BESDN115E' where id=45; -update noar ti set v2='413UKX649L2MF40T6HAZDMA9BESDN115E' where id=45; -update noar tt set v3='2Z7REP7QMAKJAVBAWMVGLLFVOGVC4ADUP' where id=45; -update noar ti set v3='2Z7REP7QMAKJAVBAWMVGLLFVOGVC4ADUP' where id=45; -update noar tt set v0='8KI3Q799YHUYLMA944I8S0JVXGMXLVZSS' where id=46; -update noar ti set v0='8KI3Q799YHUYLMA944I8S0JVXGMXLVZSS' where id=46; -update noar tt set v1='TVI3CYJHZUT2AZSP876R33HS83Z5TPAW5' where id=46; -update noar ti set v1='TVI3CYJHZUT2AZSP876R33HS83Z5TPAW5' where id=46; -update noar tt set v2='RUQ9TZZR1NSFJVTK4220PVZXY8HNFOHQO' where id=46; -update noar ti set v2='RUQ9TZZR1NSFJVTK4220PVZXY8HNFOHQO' where id=46; -update noar tt set v3='MFMAMIJELQQ8IC9LCYM7UQ4MFXKESN5KN' where id=46; -update noar ti set v3='MFMAMIJELQQ8IC9LCYM7UQ4MFXKESN5KN' where id=46; -update noar tt set v0='8BYHXNU3NL88TA0WKJFIR4CV28YSEQMW3' where id=47; -update noar ti set v0='8BYHXNU3NL88TA0WKJFIR4CV28YSEQMW3' where id=47; -update noar tt set v1='QM4BZK70S004B16MVPFPE4MIPYNXEFSX0' where id=47; -update noar ti set v1='QM4BZK70S004B16MVPFPE4MIPYNXEFSX0' where id=47; -update noar tt set v2='S65PJ06W6S1K6TM82Y2T9FJV161KFAGT5' where id=47; -update noar ti set v2='S65PJ06W6S1K6TM82Y2T9FJV161KFAGT5' where id=47; -update noar tt set v3='YY6S5Y9EJ9NGN33SCYG3CQOE7H21UU1F0' where id=47; -update noar ti set v3='YY6S5Y9EJ9NGN33SCYG3CQOE7H21UU1F0' where id=47; -update noar tt set v0='TUSZUPWUJULY4NXRJJ654XQZ71REPCN62' where id=48; -update noar ti set v0='TUSZUPWUJULY4NXRJJ654XQZ71REPCN62' where id=48; -update noar tt set v1='OZU1HYIF3Y0T71NCTDFSSDMLEE6LLQ5GV' where id=48; -update noar ti set v1='OZU1HYIF3Y0T71NCTDFSSDMLEE6LLQ5GV' where id=48; -update noar tt set v2='DDOI7O9NTATXXM2FOBFP7D28YQQ2FDWSN' where id=48; -update noar ti set v2='DDOI7O9NTATXXM2FOBFP7D28YQQ2FDWSN' where id=48; -update noar tt set v3='C44MUD0KVWB2QXDWPR0TFU2AV56XF67LF' where id=48; -update noar ti set v3='C44MUD0KVWB2QXDWPR0TFU2AV56XF67LF' where id=48; -update noar tt set v0='MN5ZI8YZBWJJS8M9QBX25IU9XCNJHOMKM' where id=49; -update noar ti set v0='MN5ZI8YZBWJJS8M9QBX25IU9XCNJHOMKM' where id=49; -update noar tt set v1='5V1ER3RIF1HHF1UQ6KKOSH9MK7JV1XDP6' where id=49; -update noar ti set v1='5V1ER3RIF1HHF1UQ6KKOSH9MK7JV1XDP6' where id=49; -update noar tt set v2='JPVX4KE0GDYVTMOXZ8YWXHHFTZJ5A4LQR' where id=49; -update noar ti set v2='JPVX4KE0GDYVTMOXZ8YWXHHFTZJ5A4LQR' where id=49; -update noar tt set v3='1XWYOG4TBTULZZ8FH73O0WPQEEFCJEZOV' where id=49; -update noar ti set v3='1XWYOG4TBTULZZ8FH73O0WPQEEFCJEZOV' where id=49; -update noar tt set v0='COMYTADDRCBA0W7ORYHNUS7GYSQ44CPHD' where id=50; -update noar ti set v0='COMYTADDRCBA0W7ORYHNUS7GYSQ44CPHD' where id=50; -update noar tt set v1='UQGLOZP913RT96TX8PO1T7TEY9SNZA04B' where id=50; -update noar ti set v1='UQGLOZP913RT96TX8PO1T7TEY9SNZA04B' where id=50; -update noar tt set v2='XWFLBAJN7VEEB18QCDXLLFIXBTHUHQYYU' where id=50; -update noar ti set v2='XWFLBAJN7VEEB18QCDXLLFIXBTHUHQYYU' where id=50; -update noar tt set v3='JCR68CBYY518S9CUV1H67WZNZEW4VTXIH' where id=50; -update noar ti set v3='JCR68CBYY518S9CUV1H67WZNZEW4VTXIH' where id=50; -update noar tt set v0='AHARHQO29A125TK4DYNP1XM5NOHY98FCG' where id=51; -update noar ti set v0='AHARHQO29A125TK4DYNP1XM5NOHY98FCG' where id=51; -update noar tt set v1='T7BRSPTBZS5O6B6A3CNZSV4G2AZG9V41N' where id=51; -update noar ti set v1='T7BRSPTBZS5O6B6A3CNZSV4G2AZG9V41N' where id=51; -update noar tt set v2='VFGQCLMOGIZ5UMPCNE2YE0SILQ57P06W8' where id=51; -update noar ti set v2='VFGQCLMOGIZ5UMPCNE2YE0SILQ57P06W8' where id=51; -update noar tt set v3='YCGUIHJKGKH5I0A2ORBVSR8ROU9WA5TD8' where id=51; -update noar ti set v3='YCGUIHJKGKH5I0A2ORBVSR8ROU9WA5TD8' where id=51; -update noar tt set v0='BW5Y1UJMS97MDH7AXMSMJLCMOQR873JYP' where id=52; -update noar ti set v0='BW5Y1UJMS97MDH7AXMSMJLCMOQR873JYP' where id=52; -update noar tt set v1='MSNP8YLE46R6VDXWDI6ULZ6IUSQGYCREI' where id=52; -update noar ti set v1='MSNP8YLE46R6VDXWDI6ULZ6IUSQGYCREI' where id=52; -update noar tt set v2='LY5M8T1B2DAXX75JBXSX0OMJC4R7OWRSH' where id=52; -update noar ti set v2='LY5M8T1B2DAXX75JBXSX0OMJC4R7OWRSH' where id=52; -update noar tt set v3='WROEU2PQTO9J7FL6Z05FSA0TUJK4WUYTW' where id=52; -update noar ti set v3='WROEU2PQTO9J7FL6Z05FSA0TUJK4WUYTW' where id=52; -update noar tt set v0='RVGWA2P5SZ0V3WGJA20Z2AGZ14WNNX3MF' where id=53; -update noar ti set v0='RVGWA2P5SZ0V3WGJA20Z2AGZ14WNNX3MF' where id=53; -update noar tt set v1='MTEA9XO92VAPSAQT0IEZB21MM0JCDUBLB' where id=53; -update noar ti set v1='MTEA9XO92VAPSAQT0IEZB21MM0JCDUBLB' where id=53; -update noar tt set v2='7GH7XOZXQ41PYCL1CS6JZSNZGWVI72LWC' where id=53; -update noar ti set v2='7GH7XOZXQ41PYCL1CS6JZSNZGWVI72LWC' where id=53; -update noar tt set v3='QUBRHSONW9IX0MKCQ4UZM700OLBG3830N' where id=53; -update noar ti set v3='QUBRHSONW9IX0MKCQ4UZM700OLBG3830N' where id=53; -update noar tt set v0='ZVTO6EZ70ZROU9PUPUBVCTYG2DCN3LXPS' where id=54; -update noar ti set v0='ZVTO6EZ70ZROU9PUPUBVCTYG2DCN3LXPS' where id=54; -update noar tt set v1='URWVN56QBJE74QSR8MT644SPT4GWQKB50' where id=54; -update noar ti set v1='URWVN56QBJE74QSR8MT644SPT4GWQKB50' where id=54; -update noar tt set v2='TX79HNUJLAEOW6YH681LZ3TZPVF3QVSY7' where id=54; -update noar ti set v2='TX79HNUJLAEOW6YH681LZ3TZPVF3QVSY7' where id=54; -update noar tt set v3='F32NHURS5QZ7UCMW1ZLLMEJN4L4XJNBO9' where id=54; -update noar ti set v3='F32NHURS5QZ7UCMW1ZLLMEJN4L4XJNBO9' where id=54; -update noar tt set v0='FRMSA94HIAGIMN95QNHYDUZIGCVEPDV39' where id=55; -update noar ti set v0='FRMSA94HIAGIMN95QNHYDUZIGCVEPDV39' where id=55; -update noar tt set v1='SKKXZPI5WKBJRWLZGRAI5H7GCPVS8WL2X' where id=55; -update noar ti set v1='SKKXZPI5WKBJRWLZGRAI5H7GCPVS8WL2X' where id=55; -update noar tt set v2='GYGJ40LYFGSDS3ZE9TKXDRLR4OOTXP4NE' where id=55; -update noar ti set v2='GYGJ40LYFGSDS3ZE9TKXDRLR4OOTXP4NE' where id=55; -update noar tt set v3='11RRKQMO6DX54L4V09SBSHVKNSWOUFO5Y' where id=55; -update noar ti set v3='11RRKQMO6DX54L4V09SBSHVKNSWOUFO5Y' where id=55; -update noar tt set v0='4ZV817AXJ3UNA0SO6S6P188CWN9GIW5CA' where id=56; -update noar ti set v0='4ZV817AXJ3UNA0SO6S6P188CWN9GIW5CA' where id=56; -update noar tt set v1='TNYVAYCVX998HMIA8NH2TQ47CSQK5IX5W' where id=56; -update noar ti set v1='TNYVAYCVX998HMIA8NH2TQ47CSQK5IX5W' where id=56; -update noar tt set v2='ESZDWV23P3PQ10WXB5EDPTBEHFDA1E5DX' where id=56; -update noar ti set v2='ESZDWV23P3PQ10WXB5EDPTBEHFDA1E5DX' where id=56; -update noar tt set v3='381KXP22XWMN41GJVGJNGHKZRELKOQNHZ' where id=56; -update noar ti set v3='381KXP22XWMN41GJVGJNGHKZRELKOQNHZ' where id=56; -update noar tt set v0='NPNJBVTCADPVI4M0R1VTONQS7WXS3EH81' where id=57; -update noar ti set v0='NPNJBVTCADPVI4M0R1VTONQS7WXS3EH81' where id=57; -update noar tt set v1='AQBDV4A6BD3A3YAPKSBL7CN9Z6IBNUW82' where id=57; -update noar ti set v1='AQBDV4A6BD3A3YAPKSBL7CN9Z6IBNUW82' where id=57; -update noar tt set v2='380IWX6KBPG4HLZCRGADNXBTIZG53ABFD' where id=57; -update noar ti set v2='380IWX6KBPG4HLZCRGADNXBTIZG53ABFD' where id=57; -update noar tt set v3='G18OJAL461G4Q5HSKFKPXTU09QE2RLMY3' where id=57; -update noar ti set v3='G18OJAL461G4Q5HSKFKPXTU09QE2RLMY3' where id=57; -update noar tt set v0='DDN00LUKD3OEHQV4WQJ2HWDFYSENJCD5X' where id=58; -update noar ti set v0='DDN00LUKD3OEHQV4WQJ2HWDFYSENJCD5X' where id=58; -update noar tt set v1='3SYGNRCXS4XLTKLEZ04HUN9Y5M4UVZ4HM' where id=58; -update noar ti set v1='3SYGNRCXS4XLTKLEZ04HUN9Y5M4UVZ4HM' where id=58; -update noar tt set v2='3ISJ1V03VYDPPSLUWGFO9N0FTT89EZ0PT' where id=58; -update noar ti set v2='3ISJ1V03VYDPPSLUWGFO9N0FTT89EZ0PT' where id=58; -update noar tt set v3='BJEU63TZFNMVR7RDEQ0JPLVPAUN0LJVBY' where id=58; -update noar ti set v3='BJEU63TZFNMVR7RDEQ0JPLVPAUN0LJVBY' where id=58; -update noar tt set v0='LXEOXDHBGQSWPG70WI0JZZSLV1QU4VHDW' where id=59; -update noar ti set v0='LXEOXDHBGQSWPG70WI0JZZSLV1QU4VHDW' where id=59; -update noar tt set v1='QDIHTVPP9GXKS21JSH5ZW3JJ2NWE01WO2' where id=59; -update noar ti set v1='QDIHTVPP9GXKS21JSH5ZW3JJ2NWE01WO2' where id=59; -update noar tt set v2='FN8IF6ASEXAHAGEYX4EQJ8R3S72IMXY2M' where id=59; -update noar ti set v2='FN8IF6ASEXAHAGEYX4EQJ8R3S72IMXY2M' where id=59; -update noar tt set v3='886L60NO5VI7TTR7V4WDLOOIWBJ68BR6S' where id=59; -update noar ti set v3='886L60NO5VI7TTR7V4WDLOOIWBJ68BR6S' where id=59; -update noar tt set v0='E70TRHIS59ZZ4NQ59SHATDXZLOTEWLQ3R' where id=60; -update noar ti set v0='E70TRHIS59ZZ4NQ59SHATDXZLOTEWLQ3R' where id=60; -update noar tt set v1='BTTY4QM632NISEGAC7TA99Q41SHCB1WUC' where id=60; -update noar ti set v1='BTTY4QM632NISEGAC7TA99Q41SHCB1WUC' where id=60; -update noar tt set v2='IR32QC45X79KNWGGM095VO1J65S5A0TIV' where id=60; -update noar ti set v2='IR32QC45X79KNWGGM095VO1J65S5A0TIV' where id=60; -update noar tt set v3='T9YGLSNG8J7NHECBA5ESYDLOX74UQFA1G' where id=60; -update noar ti set v3='T9YGLSNG8J7NHECBA5ESYDLOX74UQFA1G' where id=60; -update noar tt set v0='ZFS6WYHV514XOXZISNCZL1EZA1U739PL6' where id=61; -update noar ti set v0='ZFS6WYHV514XOXZISNCZL1EZA1U739PL6' where id=61; -update noar tt set v1='5OOH8FMYR0650HTE6M59IWDEBOY9URERS' where id=61; -update noar ti set v1='5OOH8FMYR0650HTE6M59IWDEBOY9URERS' where id=61; -update noar tt set v2='Q2189FFZX3MR7DGWYRFMGK577WJLXLXO2' where id=61; -update noar ti set v2='Q2189FFZX3MR7DGWYRFMGK577WJLXLXO2' where id=61; -update noar tt set v3='30MPB9H0JZ2H5FPOZKS8F4OE7FWL3HCO4' where id=61; -update noar ti set v3='30MPB9H0JZ2H5FPOZKS8F4OE7FWL3HCO4' where id=61; -update noar tt set v0='BMH1ZK3GYMCOFENW8J4BO0Q70EFTGI92F' where id=62; -update noar ti set v0='BMH1ZK3GYMCOFENW8J4BO0Q70EFTGI92F' where id=62; -update noar tt set v1='QJBBTGAPNAX4M8J4WRJ3CED3IDCJ1C7UV' where id=62; -update noar ti set v1='QJBBTGAPNAX4M8J4WRJ3CED3IDCJ1C7UV' where id=62; -update noar tt set v2='8I7NGFA0NIB64E1CH2GRBBN0SP8ZU8KBV' where id=62; -update noar ti set v2='8I7NGFA0NIB64E1CH2GRBBN0SP8ZU8KBV' where id=62; -update noar tt set v3='RV0JH7XZNJM5OGU57SOQCP6KDZU0TSWNA' where id=62; -update noar ti set v3='RV0JH7XZNJM5OGU57SOQCP6KDZU0TSWNA' where id=62; -update noar tt set v0='8Q9EP1AH3V6CIVJDAPC5RONU6A49Z4UBM' where id=63; -update noar ti set v0='8Q9EP1AH3V6CIVJDAPC5RONU6A49Z4UBM' where id=63; -update noar tt set v1='DH8XT3SKF1VEML9GBIFVN5KDP0FDYUADL' where id=63; -update noar ti set v1='DH8XT3SKF1VEML9GBIFVN5KDP0FDYUADL' where id=63; -update noar tt set v2='T2LG8QNMINA7C1JCTQ8LSBLJ42QUGJ9VD' where id=63; -update noar ti set v2='T2LG8QNMINA7C1JCTQ8LSBLJ42QUGJ9VD' where id=63; -update noar tt set v3='SWR9BMKD2EQPIMFW6PEXNZBUHURY0KTKU' where id=63; -update noar ti set v3='SWR9BMKD2EQPIMFW6PEXNZBUHURY0KTKU' where id=63; -update noar tt set v0='3HOGCDN135GHCOLTLM8D2GUPTCJSH0UUP' where id=64; -update noar ti set v0='3HOGCDN135GHCOLTLM8D2GUPTCJSH0UUP' where id=64; -update noar tt set v1='8KL96S41VAINAHN8M5JU5Q4A6XCF7M4BD' where id=64; -update noar ti set v1='8KL96S41VAINAHN8M5JU5Q4A6XCF7M4BD' where id=64; -update noar tt set v2='KSJQ1OUGKWBN4J9JVGDRAGYHI02F65VN5' where id=64; -update noar ti set v2='KSJQ1OUGKWBN4J9JVGDRAGYHI02F65VN5' where id=64; -update noar tt set v3='0FF9J862P6PKCZE6A3APEK2QU5LIXY356' where id=64; -update noar ti set v3='0FF9J862P6PKCZE6A3APEK2QU5LIXY356' where id=64; -update noar tt set v0='J7CRG2XMNEB02IKV1ARDDK70N6Y0UIJBX' where id=65; -update noar ti set v0='J7CRG2XMNEB02IKV1ARDDK70N6Y0UIJBX' where id=65; -update noar tt set v1='QKDDHXYBZI0R27QFH6CWEN4GSWZWFNGAP' where id=65; -update noar ti set v1='QKDDHXYBZI0R27QFH6CWEN4GSWZWFNGAP' where id=65; -update noar tt set v2='P4DCWQ4ETGV59I4TUCN7OJTFZ79Y2WNZF' where id=65; -update noar ti set v2='P4DCWQ4ETGV59I4TUCN7OJTFZ79Y2WNZF' where id=65; -update noar tt set v3='HHSNM8AL42VZ1QD26ITZB24JUPIK90H2H' where id=65; -update noar ti set v3='HHSNM8AL42VZ1QD26ITZB24JUPIK90H2H' where id=65; -update noar tt set v0='U7QDG74C0O9E7RJ2B0NI7ZNKSMMP319FR' where id=66; -update noar ti set v0='U7QDG74C0O9E7RJ2B0NI7ZNKSMMP319FR' where id=66; -update noar tt set v1='21LZ0O6I11PGZ5Q9PU54AEWWH2DQCB42M' where id=66; -update noar ti set v1='21LZ0O6I11PGZ5Q9PU54AEWWH2DQCB42M' where id=66; -update noar tt set v2='XWEQ9A7RK3D3U4A6OGSUYJEY9F8857ODF' where id=66; -update noar ti set v2='XWEQ9A7RK3D3U4A6OGSUYJEY9F8857ODF' where id=66; -update noar tt set v3='722HYSC3XSUVC4FCDDU62XV3NNLHWINQG' where id=66; -update noar ti set v3='722HYSC3XSUVC4FCDDU62XV3NNLHWINQG' where id=66; -update noar tt set v0='EF9KFZ0Q574GMQJ9EXK6AVFHVN71W3J84' where id=67; -update noar ti set v0='EF9KFZ0Q574GMQJ9EXK6AVFHVN71W3J84' where id=67; -update noar tt set v1='L2J0SBTJQ26RCEOBZHLXGZA821K9D5BZC' where id=67; -update noar ti set v1='L2J0SBTJQ26RCEOBZHLXGZA821K9D5BZC' where id=67; -update noar tt set v2='J2EN7X25VKFNFSP9WS4IOD16T9RTFN5SG' where id=67; -update noar ti set v2='J2EN7X25VKFNFSP9WS4IOD16T9RTFN5SG' where id=67; -update noar tt set v3='D4II7SOYIQICLXPQMOPXI6N8V3YW5T11N' where id=67; -update noar ti set v3='D4II7SOYIQICLXPQMOPXI6N8V3YW5T11N' where id=67; -update noar tt set v0='7B5Y00JPNG3CUZ0URYRKYSB2QMOO7D2RE' where id=68; -update noar ti set v0='7B5Y00JPNG3CUZ0URYRKYSB2QMOO7D2RE' where id=68; -update noar tt set v1='Y55H3LWRWQ40KCA009OLN3XIYTBK6DOYJ' where id=68; -update noar ti set v1='Y55H3LWRWQ40KCA009OLN3XIYTBK6DOYJ' where id=68; -update noar tt set v2='05IQB948N1ZWWVOE4H9S7CPVN1HIXBAJI' where id=68; -update noar ti set v2='05IQB948N1ZWWVOE4H9S7CPVN1HIXBAJI' where id=68; -update noar tt set v3='P4QTPZ52FUM1HZVEQXPXHTTPB0AE77N4O' where id=68; -update noar ti set v3='P4QTPZ52FUM1HZVEQXPXHTTPB0AE77N4O' where id=68; -update noar tt set v0='YGN8KP34GE2OJKQA313IO0VD488FD4BSW' where id=69; -update noar ti set v0='YGN8KP34GE2OJKQA313IO0VD488FD4BSW' where id=69; -update noar tt set v1='HPQR5L105B7PMCXEXXX1O7YIFFNYVU6N3' where id=69; -update noar ti set v1='HPQR5L105B7PMCXEXXX1O7YIFFNYVU6N3' where id=69; -update noar tt set v2='LPIUASBAJI6MDE193R8YEHAZ910G2JZAQ' where id=69; -update noar ti set v2='LPIUASBAJI6MDE193R8YEHAZ910G2JZAQ' where id=69; -update noar tt set v3='DMR9KFWKZYCLZT0SXIFN898SAEI4JVVZN' where id=69; -update noar ti set v3='DMR9KFWKZYCLZT0SXIFN898SAEI4JVVZN' where id=69; -update noar tt set v0='E2QKXKRXDXU5CISL7RRQKZH65H1ND5T8L' where id=70; -update noar ti set v0='E2QKXKRXDXU5CISL7RRQKZH65H1ND5T8L' where id=70; -update noar tt set v1='KY8U273TV3S175XX41MBYIYYZEZ07HRHU' where id=70; -update noar ti set v1='KY8U273TV3S175XX41MBYIYYZEZ07HRHU' where id=70; -update noar tt set v2='E1SY1I1YHONFEXH8DQPRBXYKKM5EFEPXB' where id=70; -update noar ti set v2='E1SY1I1YHONFEXH8DQPRBXYKKM5EFEPXB' where id=70; -update noar tt set v3='V9Q3MY5BGNEGZDSBOH9V1CEFP8L5UQRYC' where id=70; -update noar ti set v3='V9Q3MY5BGNEGZDSBOH9V1CEFP8L5UQRYC' where id=70; -update noar tt set v0='HD6ZDFZ1Y05NXJ8GAC5Z7X52IXCSO57CE' where id=71; -update noar ti set v0='HD6ZDFZ1Y05NXJ8GAC5Z7X52IXCSO57CE' where id=71; -update noar tt set v1='OIYYCVQ8BW32K5HNJS8O3LJPGHZIEIWIW' where id=71; -update noar ti set v1='OIYYCVQ8BW32K5HNJS8O3LJPGHZIEIWIW' where id=71; -update noar tt set v2='6AA9R8FH4HPJCAYMG5FEGGIH8SLNYONS7' where id=71; -update noar ti set v2='6AA9R8FH4HPJCAYMG5FEGGIH8SLNYONS7' where id=71; -update noar tt set v3='8F5HTANJ45EYMRR5BUVQZO6XC3UQ0LQU7' where id=71; -update noar ti set v3='8F5HTANJ45EYMRR5BUVQZO6XC3UQ0LQU7' where id=71; -update noar tt set v0='HXDP5XI1YGXXD30DTPCG8GXH8FA3146U7' where id=72; -update noar ti set v0='HXDP5XI1YGXXD30DTPCG8GXH8FA3146U7' where id=72; -update noar tt set v1='00AGJNLXQVE9BHL1KP6KVKNLLMZXVD3L2' where id=72; -update noar ti set v1='00AGJNLXQVE9BHL1KP6KVKNLLMZXVD3L2' where id=72; -update noar tt set v2='HJWX6SF2IS19Z8R0IR7LN9X0INU5WCKPM' where id=72; -update noar ti set v2='HJWX6SF2IS19Z8R0IR7LN9X0INU5WCKPM' where id=72; -update noar tt set v3='YOJKU4F0DMW3VXUSCB0FYIZL9A741MOAL' where id=72; -update noar ti set v3='YOJKU4F0DMW3VXUSCB0FYIZL9A741MOAL' where id=72; -update noar tt set v0='54YDDTUJ7F338ADD6MG99GJDG3WP1BIHM' where id=73; -update noar ti set v0='54YDDTUJ7F338ADD6MG99GJDG3WP1BIHM' where id=73; -update noar tt set v1='OOVBMH2U3H0XZIGOUOFE3TW0LM6C2024Q' where id=73; -update noar ti set v1='OOVBMH2U3H0XZIGOUOFE3TW0LM6C2024Q' where id=73; -update noar tt set v2='ZGNXVYTHYFFUTJLLVYM6QSWBWGAF0B12B' where id=73; -update noar ti set v2='ZGNXVYTHYFFUTJLLVYM6QSWBWGAF0B12B' where id=73; -update noar tt set v3='Q7RLJLCOB7R3QWNESTCWQT88TNCSLRWZ6' where id=73; -update noar ti set v3='Q7RLJLCOB7R3QWNESTCWQT88TNCSLRWZ6' where id=73; -update noar tt set v0='SMCRS1V67Y08U5BX991NO082GWT2BPK80' where id=74; -update noar ti set v0='SMCRS1V67Y08U5BX991NO082GWT2BPK80' where id=74; -update noar tt set v1='0A28CB6Z3HVUFD1K8XW8HBIOMGZUVMO6S' where id=74; -update noar ti set v1='0A28CB6Z3HVUFD1K8XW8HBIOMGZUVMO6S' where id=74; -update noar tt set v2='75V771SGC1D9GC1AHHH6X7TA43YZDTMR6' where id=74; -update noar ti set v2='75V771SGC1D9GC1AHHH6X7TA43YZDTMR6' where id=74; -update noar tt set v3='4O3YYBGFM3ZB4ULJZRC6KR5CGJX5EXJHK' where id=74; -update noar ti set v3='4O3YYBGFM3ZB4ULJZRC6KR5CGJX5EXJHK' where id=74; -update noar tt set v0='Q2S43IWT3GDUCQI81IJTK7BJJ5L3ECEPV' where id=75; -update noar ti set v0='Q2S43IWT3GDUCQI81IJTK7BJJ5L3ECEPV' where id=75; -update noar tt set v1='3ZQ9I06NEAUY4AN2AB2XWM2GJXF7VGJWK' where id=75; -update noar ti set v1='3ZQ9I06NEAUY4AN2AB2XWM2GJXF7VGJWK' where id=75; -update noar tt set v2='A22SZG7S4QCRAB8R7LXT6TRNVN616SV44' where id=75; -update noar ti set v2='A22SZG7S4QCRAB8R7LXT6TRNVN616SV44' where id=75; -update noar tt set v3='QFFJ24MRB24MSJIW28YHIFFUQD1BKKXXC' where id=75; -update noar ti set v3='QFFJ24MRB24MSJIW28YHIFFUQD1BKKXXC' where id=75; -update noar tt set v0='Q5J8N0THHXCA8V1WK7CMJI8YYO244FFRP' where id=76; -update noar ti set v0='Q5J8N0THHXCA8V1WK7CMJI8YYO244FFRP' where id=76; -update noar tt set v1='W5P11AR03PUMZIV514BF68Q14HJZP5HG5' where id=76; -update noar ti set v1='W5P11AR03PUMZIV514BF68Q14HJZP5HG5' where id=76; -update noar tt set v2='54555ZFZQ9WW3ZB5EDJXA4M4XX3UFWF08' where id=76; -update noar ti set v2='54555ZFZQ9WW3ZB5EDJXA4M4XX3UFWF08' where id=76; -update noar tt set v3='QOPJBR9SLQUJY7QE9RWTSVTN9VPZUNSNS' where id=76; -update noar ti set v3='QOPJBR9SLQUJY7QE9RWTSVTN9VPZUNSNS' where id=76; -update noar tt set v0='SW36L31FQDUDKDZCRDG8AR29X3NAHY8T8' where id=77; -update noar ti set v0='SW36L31FQDUDKDZCRDG8AR29X3NAHY8T8' where id=77; -update noar tt set v1='J97LQNGAEBRMU74F5LBU71BNE7J0QM8P9' where id=77; -update noar ti set v1='J97LQNGAEBRMU74F5LBU71BNE7J0QM8P9' where id=77; -update noar tt set v2='2GZRW07GGP1P5MZMED64YME3OZ42CUPT2' where id=77; -update noar ti set v2='2GZRW07GGP1P5MZMED64YME3OZ42CUPT2' where id=77; -update noar tt set v3='SRICPEFRGMSKHEYK6PXT8Q6FO1BU24YAV' where id=77; -update noar ti set v3='SRICPEFRGMSKHEYK6PXT8Q6FO1BU24YAV' where id=77; -update noar tt set v0='XE2PTQ1BTPRVK0RV7VHRLBGDBSL4YY56Q' where id=78; -update noar ti set v0='XE2PTQ1BTPRVK0RV7VHRLBGDBSL4YY56Q' where id=78; -update noar tt set v1='A16OWCC43LW3H253ZJBFB9YUORY0ROGTT' where id=78; -update noar ti set v1='A16OWCC43LW3H253ZJBFB9YUORY0ROGTT' where id=78; -update noar tt set v2='N9ZFY5V8WW9MENCDRRADY61NTWLZR82RP' where id=78; -update noar ti set v2='N9ZFY5V8WW9MENCDRRADY61NTWLZR82RP' where id=78; -update noar tt set v3='7FR30M3ADDZ49Q2RR13L21B62HVTK4TN5' where id=78; -update noar ti set v3='7FR30M3ADDZ49Q2RR13L21B62HVTK4TN5' where id=78; -update noar tt set v0='X9PUMY0ZG1T3DSYS9L7459C7XFDWKNBRZ' where id=79; -update noar ti set v0='X9PUMY0ZG1T3DSYS9L7459C7XFDWKNBRZ' where id=79; -update noar tt set v1='MLN6VEL96SN2143ZBF35PB0K8X6278TOD' where id=79; -update noar ti set v1='MLN6VEL96SN2143ZBF35PB0K8X6278TOD' where id=79; -update noar tt set v2='1362321A6UEZ7YSPBNKR9V08ZH7548OOZ' where id=79; -update noar ti set v2='1362321A6UEZ7YSPBNKR9V08ZH7548OOZ' where id=79; -update noar tt set v3='N2V73YL4U821VGWBKDAZUI4WHGDDQO2FH' where id=79; -update noar ti set v3='N2V73YL4U821VGWBKDAZUI4WHGDDQO2FH' where id=79; -update noar tt set v0='4B8E20FNR5OWZTNI7SYN8JYLR50FW1HB6' where id=80; -update noar ti set v0='4B8E20FNR5OWZTNI7SYN8JYLR50FW1HB6' where id=80; -update noar tt set v1='ZYAP4KHYNI332X2W9MDT8M2H3PXBEFPMS' where id=80; -update noar ti set v1='ZYAP4KHYNI332X2W9MDT8M2H3PXBEFPMS' where id=80; -update noar tt set v2='IA45OKMD5P0SUFGK7OG6RDVFNFDLTAXQ9' where id=80; -update noar ti set v2='IA45OKMD5P0SUFGK7OG6RDVFNFDLTAXQ9' where id=80; -update noar tt set v3='WGRWSFGXRU3UJYDOSNT0HH6WYC9E2UQML' where id=80; -update noar ti set v3='WGRWSFGXRU3UJYDOSNT0HH6WYC9E2UQML' where id=80; -update noar tt set v0='K1NZYP5A3TVE59JLSULT9GKGES0WJMA7E' where id=81; -update noar ti set v0='K1NZYP5A3TVE59JLSULT9GKGES0WJMA7E' where id=81; -update noar tt set v1='1OXP30CIIQJOCTK72LT1OK36ZWBIN6FJK' where id=81; -update noar ti set v1='1OXP30CIIQJOCTK72LT1OK36ZWBIN6FJK' where id=81; -update noar tt set v2='M85XNBL432NZFLISC33CO3Z0KNES5H4JM' where id=81; -update noar ti set v2='M85XNBL432NZFLISC33CO3Z0KNES5H4JM' where id=81; -update noar tt set v3='2PG2GI9JWLTP5QBXLB2ZYDYDTBHQ3IRSJ' where id=81; -update noar ti set v3='2PG2GI9JWLTP5QBXLB2ZYDYDTBHQ3IRSJ' where id=81; -update noar tt set v0='A9I2GCJPJK4CNADPUVSXS2JEVK84H67XR' where id=82; -update noar ti set v0='A9I2GCJPJK4CNADPUVSXS2JEVK84H67XR' where id=82; -update noar tt set v1='2GCE1SV1IGRN98ZASFZTNCYQJHOM1L1UG' where id=82; -update noar ti set v1='2GCE1SV1IGRN98ZASFZTNCYQJHOM1L1UG' where id=82; -update noar tt set v2='HLU4Y21UHEWD97ODU0027LRKVMCJ1GGTS' where id=82; -update noar ti set v2='HLU4Y21UHEWD97ODU0027LRKVMCJ1GGTS' where id=82; -update noar tt set v3='EJPXNIE06RG2PS7KOVY5P4NJVC3PUU3VV' where id=82; -update noar ti set v3='EJPXNIE06RG2PS7KOVY5P4NJVC3PUU3VV' where id=82; -update noar tt set v0='D9S04KER4AI4OFX5Z1456GWVFZV6UD18M' where id=83; -update noar ti set v0='D9S04KER4AI4OFX5Z1456GWVFZV6UD18M' where id=83; -update noar tt set v1='N2NJAIYIZYZD8J6TGLXP24POVW91VEP5R' where id=83; -update noar ti set v1='N2NJAIYIZYZD8J6TGLXP24POVW91VEP5R' where id=83; -update noar tt set v2='ED6H5964IFYRRP8HMQ3N7ICN4OK5CAA71' where id=83; -update noar ti set v2='ED6H5964IFYRRP8HMQ3N7ICN4OK5CAA71' where id=83; -update noar tt set v3='W5NQR98L5J8YNFQCBLT2J6JOQM3TD5L2Y' where id=83; -update noar ti set v3='W5NQR98L5J8YNFQCBLT2J6JOQM3TD5L2Y' where id=83; -update noar tt set v0='IPL7DK90RMM6EEORED5VONN866QQXDERX' where id=84; -update noar ti set v0='IPL7DK90RMM6EEORED5VONN866QQXDERX' where id=84; -update noar tt set v1='A3UV5DFCCSMF9A0EWFW4XAEJSDYGKYZ8P' where id=84; -update noar ti set v1='A3UV5DFCCSMF9A0EWFW4XAEJSDYGKYZ8P' where id=84; -update noar tt set v2='9OLYM17E56DAHL80IWA46RLBA85JHRQ3O' where id=84; -update noar ti set v2='9OLYM17E56DAHL80IWA46RLBA85JHRQ3O' where id=84; -update noar tt set v3='KBML69OJP9LX4KE0JUNKIQIS8MNZP1DVQ' where id=84; -update noar ti set v3='KBML69OJP9LX4KE0JUNKIQIS8MNZP1DVQ' where id=84; -update noar tt set v0='7VZMOCE0YEUK32LJXQW51QOU0GMMDI1O8' where id=85; -update noar ti set v0='7VZMOCE0YEUK32LJXQW51QOU0GMMDI1O8' where id=85; -update noar tt set v1='7ZXQZM41BMMMSZYYP0L41SDSTIXOWWO3L' where id=85; -update noar ti set v1='7ZXQZM41BMMMSZYYP0L41SDSTIXOWWO3L' where id=85; -update noar tt set v2='0FVQZC3OM9JH0GULU3J9FP7XJ6LSEI6OZ' where id=85; -update noar ti set v2='0FVQZC3OM9JH0GULU3J9FP7XJ6LSEI6OZ' where id=85; -update noar tt set v3='4CN8G61XMGE56S1ETXPUQG2T6SAYMFQRH' where id=85; -update noar ti set v3='4CN8G61XMGE56S1ETXPUQG2T6SAYMFQRH' where id=85; -update noar tt set v0='EQNL9BPQEZFIBPK29BZA1VZB7H26UVDNQ' where id=86; -update noar ti set v0='EQNL9BPQEZFIBPK29BZA1VZB7H26UVDNQ' where id=86; -update noar tt set v1='9N9Y2Q84X94PXY4IHNIGMNCKLHL3J7S5N' where id=86; -update noar ti set v1='9N9Y2Q84X94PXY4IHNIGMNCKLHL3J7S5N' where id=86; -update noar tt set v2='KX0OQ10I1YL4TK9ZRDO245O0VX4NEJBV6' where id=86; -update noar ti set v2='KX0OQ10I1YL4TK9ZRDO245O0VX4NEJBV6' where id=86; -update noar tt set v3='QFHV89JZU5OS22X6TVYVISCROSZMOO1RH' where id=86; -update noar ti set v3='QFHV89JZU5OS22X6TVYVISCROSZMOO1RH' where id=86; -update noar tt set v0='O39YEURV7XZ5W35SD4ZEAQQLU0GIJU985' where id=87; -update noar ti set v0='O39YEURV7XZ5W35SD4ZEAQQLU0GIJU985' where id=87; -update noar tt set v1='HKWNBZ57F0ZUX8AR8N5X1ZFB59A0VK6IN' where id=87; -update noar ti set v1='HKWNBZ57F0ZUX8AR8N5X1ZFB59A0VK6IN' where id=87; -update noar tt set v2='D0UQJJ224G2X3AMUEQA5Q720PTWGABVCH' where id=87; -update noar ti set v2='D0UQJJ224G2X3AMUEQA5Q720PTWGABVCH' where id=87; -update noar tt set v3='WZ7BHPGL52LBR8FBVG3KG3MCZRZAVY47Z' where id=87; -update noar ti set v3='WZ7BHPGL52LBR8FBVG3KG3MCZRZAVY47Z' where id=87; -update noar tt set v0='G1KJPPG2CD18V57G1E19370KMH016QTK7' where id=88; -update noar ti set v0='G1KJPPG2CD18V57G1E19370KMH016QTK7' where id=88; -update noar tt set v1='3CCZKEVD0FQP33KP4CIN7778CSJ5TIX8J' where id=88; -update noar ti set v1='3CCZKEVD0FQP33KP4CIN7778CSJ5TIX8J' where id=88; -update noar tt set v2='VMN4DAEBQHWWA68APK3MSOS0NRP7PG0RJ' where id=88; -update noar ti set v2='VMN4DAEBQHWWA68APK3MSOS0NRP7PG0RJ' where id=88; -update noar tt set v3='MMQGLE2UJ8PL2KS4RDJ2PZWNGCCIINH7K' where id=88; -update noar ti set v3='MMQGLE2UJ8PL2KS4RDJ2PZWNGCCIINH7K' where id=88; -update noar tt set v0='9BTG0XOKV8GYMMR7LOR3V88R8412JKM48' where id=89; -update noar ti set v0='9BTG0XOKV8GYMMR7LOR3V88R8412JKM48' where id=89; -update noar tt set v1='7E0XYZPQD70XZ4HFGSIWJQHSF2FJS0H7Z' where id=89; -update noar ti set v1='7E0XYZPQD70XZ4HFGSIWJQHSF2FJS0H7Z' where id=89; -update noar tt set v2='MLKPLDJW6Q859KAFRAGOHG4V85B4ONRDX' where id=89; -update noar ti set v2='MLKPLDJW6Q859KAFRAGOHG4V85B4ONRDX' where id=89; -update noar tt set v3='C9795CRAF6AR32TOYYD6G1W0WOX6WB8U2' where id=89; -update noar ti set v3='C9795CRAF6AR32TOYYD6G1W0WOX6WB8U2' where id=89; -update noar tt set v0='6QAOPPHCOSHYHKQ0I2K1S4VJHZWH3F64R' where id=90; -update noar ti set v0='6QAOPPHCOSHYHKQ0I2K1S4VJHZWH3F64R' where id=90; -update noar tt set v1='R7BOE7RFKE8C9AVQQCE2CANSSIKFB4ETY' where id=90; -update noar ti set v1='R7BOE7RFKE8C9AVQQCE2CANSSIKFB4ETY' where id=90; -update noar tt set v2='DCEQVQKPVXQZZ6GWG4O65WKPQF8R1ZFSP' where id=90; -update noar ti set v2='DCEQVQKPVXQZZ6GWG4O65WKPQF8R1ZFSP' where id=90; -update noar tt set v3='ZOA3918RTFYQ6Q5MXWG9TM7L8G5U8WGDR' where id=90; -update noar ti set v3='ZOA3918RTFYQ6Q5MXWG9TM7L8G5U8WGDR' where id=90; -update noar tt set v0='5ZLU7HZ3QYRIGHOC8ETSRLX79QWY73YBY' where id=91; -update noar ti set v0='5ZLU7HZ3QYRIGHOC8ETSRLX79QWY73YBY' where id=91; -update noar tt set v1='GDDODFCDGO9A42KCC2ZOMCL70LM8U3V3H' where id=91; -update noar ti set v1='GDDODFCDGO9A42KCC2ZOMCL70LM8U3V3H' where id=91; -update noar tt set v2='0M2CSN6Z1X2S5AL0HF06MUJU3D02BTXN6' where id=91; -update noar ti set v2='0M2CSN6Z1X2S5AL0HF06MUJU3D02BTXN6' where id=91; -update noar tt set v3='K8WOXGDLKELE9FJ34Z6PVEKG468AYA3ZY' where id=91; -update noar ti set v3='K8WOXGDLKELE9FJ34Z6PVEKG468AYA3ZY' where id=91; -update noar tt set v0='NZSNG6PV75XWF0KRZ88RWCDIP224JGEVG' where id=92; -update noar ti set v0='NZSNG6PV75XWF0KRZ88RWCDIP224JGEVG' where id=92; -update noar tt set v1='VMIQDHJL7FK8FPT37IXKK839RWDFX1F0D' where id=92; -update noar ti set v1='VMIQDHJL7FK8FPT37IXKK839RWDFX1F0D' where id=92; -update noar tt set v2='320BLQ39CLOTR58HKZ52VJK18361767YP' where id=92; -update noar ti set v2='320BLQ39CLOTR58HKZ52VJK18361767YP' where id=92; -update noar tt set v3='6ZVOR2PKPL4AZCRH08UQP2MXMNVF2HKLA' where id=92; -update noar ti set v3='6ZVOR2PKPL4AZCRH08UQP2MXMNVF2HKLA' where id=92; -update noar tt set v0='PFWINPQSV8MS3JV3MSJXX2GGEGR2QSSUA' where id=93; -update noar ti set v0='PFWINPQSV8MS3JV3MSJXX2GGEGR2QSSUA' where id=93; -update noar tt set v1='K2DOTS8WQ5XTW0V4AQ7QQY44XMQUOBUGM' where id=93; -update noar ti set v1='K2DOTS8WQ5XTW0V4AQ7QQY44XMQUOBUGM' where id=93; -update noar tt set v2='WA5N6D873UWEWYAQ06SD6CEC109CGCWDV' where id=93; -update noar ti set v2='WA5N6D873UWEWYAQ06SD6CEC109CGCWDV' where id=93; -update noar tt set v3='FWM44LF6GNVPLOK87MMPJWVBSDZ22O630' where id=93; -update noar ti set v3='FWM44LF6GNVPLOK87MMPJWVBSDZ22O630' where id=93; -update noar tt set v0='IEUK6ZHBBMHDNFGZF4601PP4JWFMABAMK' where id=94; -update noar ti set v0='IEUK6ZHBBMHDNFGZF4601PP4JWFMABAMK' where id=94; -update noar tt set v1='10GZ9NF0ATDPHJM3UQOFTZPM37UC0DG5I' where id=94; -update noar ti set v1='10GZ9NF0ATDPHJM3UQOFTZPM37UC0DG5I' where id=94; -update noar tt set v2='R3ISPSPG3WJMOEJN18GEY2494RGVHBKR9' where id=94; -update noar ti set v2='R3ISPSPG3WJMOEJN18GEY2494RGVHBKR9' where id=94; -update noar tt set v3='X76DHCA5UDZ8QDL688ZEP4RCXCPT1Q6SN' where id=94; -update noar ti set v3='X76DHCA5UDZ8QDL688ZEP4RCXCPT1Q6SN' where id=94; -update noar tt set v0='IA3P8C6LCCCP3A28GKSAEME9C9EGG38U6' where id=95; -update noar ti set v0='IA3P8C6LCCCP3A28GKSAEME9C9EGG38U6' where id=95; -update noar tt set v1='C2SJHW0O5EIEWA7Q323ARS83A9TSUDM57' where id=95; -update noar ti set v1='C2SJHW0O5EIEWA7Q323ARS83A9TSUDM57' where id=95; -update noar tt set v2='D00MQ262E7PX2Z25Y9DMB5KDQSFQGE9NJ' where id=95; -update noar ti set v2='D00MQ262E7PX2Z25Y9DMB5KDQSFQGE9NJ' where id=95; -update noar tt set v3='09X077XI0W08QLEJ5QOL7DTSJJJ6WIEUH' where id=95; -update noar ti set v3='09X077XI0W08QLEJ5QOL7DTSJJJ6WIEUH' where id=95; -update noar tt set v0='NBKOZI0RNJVA3RQHAKBTS46CDV6MBY6MV' where id=96; -update noar ti set v0='NBKOZI0RNJVA3RQHAKBTS46CDV6MBY6MV' where id=96; -update noar tt set v1='L5B45BRUJ5BA5EKJL4RHTNO97J9O5J8CL' where id=96; -update noar ti set v1='L5B45BRUJ5BA5EKJL4RHTNO97J9O5J8CL' where id=96; -update noar tt set v2='HGPWFNBW76FTY2RJXUAJUE9A1XVO9SKKH' where id=96; -update noar ti set v2='HGPWFNBW76FTY2RJXUAJUE9A1XVO9SKKH' where id=96; -update noar tt set v3='U5BFEDZFJDN118WAA0VQ45CRUDTIMUCAD' where id=96; -update noar ti set v3='U5BFEDZFJDN118WAA0VQ45CRUDTIMUCAD' where id=96; -update noar tt set v0='HNBJW9XAI6I36QJOT92JNJT8MAO11CY6O' where id=97; -update noar ti set v0='HNBJW9XAI6I36QJOT92JNJT8MAO11CY6O' where id=97; -update noar tt set v1='YN3K2VMFRV1H6TQYH1SDRN2Q7K3CPQ6U2' where id=97; -update noar ti set v1='YN3K2VMFRV1H6TQYH1SDRN2Q7K3CPQ6U2' where id=97; -update noar tt set v2='402DS8LJ1QUGA4EEBFP32NBLKCY2HKOYB' where id=97; -update noar ti set v2='402DS8LJ1QUGA4EEBFP32NBLKCY2HKOYB' where id=97; -update noar tt set v3='L6JSFBN09KQTCE0TMQ6E5TG5M9R49HG33' where id=97; -update noar ti set v3='L6JSFBN09KQTCE0TMQ6E5TG5M9R49HG33' where id=97; -update noar tt set v0='SO9KHDO5UDDAD1RJ9YYPXZ3I5ZKU9CIE1' where id=98; -update noar ti set v0='SO9KHDO5UDDAD1RJ9YYPXZ3I5ZKU9CIE1' where id=98; -update noar tt set v1='KGBR4EUI238ATEPUSJPWHF4ZW9QYBT5B1' where id=98; -update noar ti set v1='KGBR4EUI238ATEPUSJPWHF4ZW9QYBT5B1' where id=98; -update noar tt set v2='44EJGJL6ST4QELA4OTB8QV06QWJ9MKKD7' where id=98; -update noar ti set v2='44EJGJL6ST4QELA4OTB8QV06QWJ9MKKD7' where id=98; -update noar tt set v3='70U3VG9612W1R9SX50F94HM5FYA8MG8Q9' where id=98; -update noar ti set v3='70U3VG9612W1R9SX50F94HM5FYA8MG8Q9' where id=98; -update noar tt set v0='TVTYJ99VH24RJ5PH8DSMX0JNQEW7IU9L0' where id=99; -update noar ti set v0='TVTYJ99VH24RJ5PH8DSMX0JNQEW7IU9L0' where id=99; -update noar tt set v1='4EWX41LPBMP7P0LW5XW8AOXC3YC5IB4H5' where id=99; -update noar ti set v1='4EWX41LPBMP7P0LW5XW8AOXC3YC5IB4H5' where id=99; -update noar tt set v2='EFTTO0NNEDA78AJLFIZVJUKY3BAE9NNLR' where id=99; -update noar ti set v2='EFTTO0NNEDA78AJLFIZVJUKY3BAE9NNLR' where id=99; -update noar tt set v3='0FXW7H2EYTQMK68YNRS116CNUGKL2NYPW' where id=99; -update noar ti set v3='0FXW7H2EYTQMK68YNRS116CNUGKL2NYPW' where id=99; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varbinary(32) not null, - v1 varbinary(32) not null, - v2 varbinary(32) not null, - v3 varbinary(32) not null, - b0 text not null -) engine=tokudb; -insert into tt values (1,2,'a','b','c','d','e'); -insert into tt values (2,3,'','','','',''); -insert into tt values (3,4,'','','','',''); -insert into tt values (4,5,'','','','',''); -insert into tt values (5,6,'','','','',''); -insert into tt values (6,7,'','','','',''); -insert into tt values (7,8,'','','','',''); -insert into tt values (8,9,'','','','',''); -insert into tt values (9,10,'','','','',''); -insert into tt values (10,11,'','','','',''); -insert into tt values (11,12,'','','','',''); -insert into tt values (12,13,'','','','',''); -insert into tt values (13,14,'','','','',''); -insert into tt values (14,15,'','','','',''); -insert into tt values (15,16,'','','','',''); -insert into tt values (16,17,'','','','',''); -insert into tt values (17,18,'','','','',''); -insert into tt values (18,19,'','','','',''); -insert into tt values (19,20,'','','','',''); -insert into tt values (20,21,'','','','',''); -insert into tt values (21,22,'','','','',''); -insert into tt values (22,23,'','','','',''); -insert into tt values (23,24,'','','','',''); -insert into tt values (24,25,'','','','',''); -insert into tt values (25,26,'','','','',''); -insert into tt values (26,27,'','','','',''); -insert into tt values (27,28,'','','','',''); -insert into tt values (28,29,'','','','',''); -insert into tt values (29,30,'','','','',''); -insert into tt values (30,31,'','','','',''); -insert into tt values (31,32,'','','','',''); -insert into tt values (32,33,'','','','',''); -insert into tt values (33,34,'','','','',''); -insert into tt values (34,35,'','','','',''); -insert into tt values (35,36,'','','','',''); -insert into tt values (36,37,'','','','',''); -insert into tt values (37,38,'','','','',''); -insert into tt values (38,39,'','','','',''); -insert into tt values (39,40,'','','','',''); -insert into tt values (40,41,'','','','',''); -insert into tt values (41,42,'','','','',''); -insert into tt values (42,43,'','','','',''); -insert into tt values (43,44,'','','','',''); -insert into tt values (44,45,'','','','',''); -insert into tt values (45,46,'','','','',''); -insert into tt values (46,47,'','','','',''); -insert into tt values (47,48,'','','','',''); -insert into tt values (48,49,'','','','',''); -insert into tt values (49,50,'','','','',''); -insert into tt values (50,51,'','','','',''); -insert into tt values (51,52,'','','','',''); -insert into tt values (52,53,'','','','',''); -insert into tt values (53,54,'','','','',''); -insert into tt values (54,55,'','','','',''); -insert into tt values (55,56,'','','','',''); -insert into tt values (56,57,'','','','',''); -insert into tt values (57,58,'','','','',''); -insert into tt values (58,59,'','','','',''); -insert into tt values (59,60,'','','','',''); -insert into tt values (60,61,'','','','',''); -insert into tt values (61,62,'','','','',''); -insert into tt values (62,63,'','','','',''); -insert into tt values (63,64,'','','','',''); -insert into tt values (64,65,'','','','',''); -insert into tt values (65,66,'','','','',''); -insert into tt values (66,67,'','','','',''); -insert into tt values (67,68,'','','','',''); -insert into tt values (68,69,'','','','',''); -insert into tt values (69,70,'','','','',''); -insert into tt values (70,71,'','','','',''); -insert into tt values (71,72,'','','','',''); -insert into tt values (72,73,'','','','',''); -insert into tt values (73,74,'','','','',''); -insert into tt values (74,75,'','','','',''); -insert into tt values (75,76,'','','','',''); -insert into tt values (76,77,'','','','',''); -insert into tt values (77,78,'','','','',''); -insert into tt values (78,79,'','','','',''); -insert into tt values (79,80,'','','','',''); -insert into tt values (80,81,'','','','',''); -insert into tt values (81,82,'','','','',''); -insert into tt values (82,83,'','','','',''); -insert into tt values (83,84,'','','','',''); -insert into tt values (84,85,'','','','',''); -insert into tt values (85,86,'','','','',''); -insert into tt values (86,87,'','','','',''); -insert into tt values (87,88,'','','','',''); -insert into tt values (88,89,'','','','',''); -insert into tt values (89,90,'','','','',''); -insert into tt values (90,91,'','','','',''); -insert into tt values (91,92,'','','','',''); -insert into tt values (92,93,'','','','',''); -insert into tt values (93,94,'','','','',''); -insert into tt values (94,95,'','','','',''); -insert into tt values (95,96,'','','','',''); -insert into tt values (96,97,'','','','',''); -insert into tt values (97,98,'','','','',''); -insert into tt values (98,99,'','','','',''); -insert into tt values (99,100,'','','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='null this 0' where id=0; -update noar ti set v0='null this 0' where id=0; -update noar tt set v1='null is 1' where id=0; -update noar ti set v1='null is 1' where id=0; -update noar tt set v2='null a 2' where id=0; -update noar ti set v2='null a 2' where id=0; -update noar tt set v3='null test 3' where id=0; -update noar ti set v3='null test 3' where id=0; -update noar tt set v0='this 0' where id=1; -update noar ti set v0='this 0' where id=1; -update noar tt set v1='is 1' where id=1; -update noar ti set v1='is 1' where id=1; -update noar tt set v2='another 2' where id=1; -update noar ti set v2='another 2' where id=1; -update noar tt set v3='test 3' where id=1; -update noar ti set v3='test 3' where id=1; -update noar tt set v0='O9NHDDJMDKIUNPRVJYN6VQX87KBEDQKVI' where id=2; -update noar ti set v0='O9NHDDJMDKIUNPRVJYN6VQX87KBEDQKVI' where id=2; -update noar tt set v1='Q1QBW21GRLRYIVO9LD2K65Z15SIQBN14Z' where id=2; -update noar ti set v1='Q1QBW21GRLRYIVO9LD2K65Z15SIQBN14Z' where id=2; -update noar tt set v2='R7TZZ11QHWBAVG1O70GWHZ3YKZIRYDECE' where id=2; -update noar ti set v2='R7TZZ11QHWBAVG1O70GWHZ3YKZIRYDECE' where id=2; -update noar tt set v3='JKDR781NW03TKLDOHXGXU3FYZ1O7IDT5W' where id=2; -update noar ti set v3='JKDR781NW03TKLDOHXGXU3FYZ1O7IDT5W' where id=2; -update noar tt set v0='MLKEORAFHMQL32I8PMO90AUI66RJUC9DB' where id=3; -update noar ti set v0='MLKEORAFHMQL32I8PMO90AUI66RJUC9DB' where id=3; -update noar tt set v1='8E3WWOH8Y3PTZIIRULB7NYXS4JM21CZ2P' where id=3; -update noar ti set v1='8E3WWOH8Y3PTZIIRULB7NYXS4JM21CZ2P' where id=3; -update noar tt set v2='CX82OQAA14218YUU48UM3M852HHFPTI46' where id=3; -update noar ti set v2='CX82OQAA14218YUU48UM3M852HHFPTI46' where id=3; -update noar tt set v3='RQCJ1PK1U12TPRZGJ0F4RJ2JN06WVEO2G' where id=3; -update noar ti set v3='RQCJ1PK1U12TPRZGJ0F4RJ2JN06WVEO2G' where id=3; -update noar tt set v0='5WCN7V58LEQUG4BT7OXSGEC7L9U313SOG' where id=4; -update noar ti set v0='5WCN7V58LEQUG4BT7OXSGEC7L9U313SOG' where id=4; -update noar tt set v1='NQW2XNBHBTU6PTG7TX6I5ECTUUKANN0HE' where id=4; -update noar ti set v1='NQW2XNBHBTU6PTG7TX6I5ECTUUKANN0HE' where id=4; -update noar tt set v2='N1JY8MY9LMW97QOWN1H21O2U8ND0BEDAA' where id=4; -update noar ti set v2='N1JY8MY9LMW97QOWN1H21O2U8ND0BEDAA' where id=4; -update noar tt set v3='3OLVQ8ZMX26KVFGGHW92FADNTZNTLH1XD' where id=4; -update noar ti set v3='3OLVQ8ZMX26KVFGGHW92FADNTZNTLH1XD' where id=4; -update noar tt set v0='6SV21C45VCMQIWY5ZYY1B6247NKHRZILQ' where id=5; -update noar ti set v0='6SV21C45VCMQIWY5ZYY1B6247NKHRZILQ' where id=5; -update noar tt set v1='JWJ2PXPNJFIYYG19NU97EYO0FF7WH2NTA' where id=5; -update noar ti set v1='JWJ2PXPNJFIYYG19NU97EYO0FF7WH2NTA' where id=5; -update noar tt set v2='M9FLAKPCYBDFA1Q5LUEM6YA0JCZKBRUX7' where id=5; -update noar ti set v2='M9FLAKPCYBDFA1Q5LUEM6YA0JCZKBRUX7' where id=5; -update noar tt set v3='UID3D22OU1GJ4HFTP3CVQBIS0P4I1S2B5' where id=5; -update noar ti set v3='UID3D22OU1GJ4HFTP3CVQBIS0P4I1S2B5' where id=5; -update noar tt set v0='C0DD07GZZ1HMK7T0MNKEBAQA1WRND0IAW' where id=6; -update noar ti set v0='C0DD07GZZ1HMK7T0MNKEBAQA1WRND0IAW' where id=6; -update noar tt set v1='TMZWLUOEFJHLBGVS0SKU0IPUZ73VI6UMW' where id=6; -update noar ti set v1='TMZWLUOEFJHLBGVS0SKU0IPUZ73VI6UMW' where id=6; -update noar tt set v2='7S2NEJJBHWOQFHK3RWHAR426900CF5NYN' where id=6; -update noar ti set v2='7S2NEJJBHWOQFHK3RWHAR426900CF5NYN' where id=6; -update noar tt set v3='09ZCHETG7WO0USAFFHZ5INP9U7AUIBCKZ' where id=6; -update noar ti set v3='09ZCHETG7WO0USAFFHZ5INP9U7AUIBCKZ' where id=6; -update noar tt set v0='Y8OXMWL39MMR0YEB2TQU1DDC033BZ5BW1' where id=7; -update noar ti set v0='Y8OXMWL39MMR0YEB2TQU1DDC033BZ5BW1' where id=7; -update noar tt set v1='HC86NHK9NAUV5OFBYELB1D06HAYQLX4GU' where id=7; -update noar ti set v1='HC86NHK9NAUV5OFBYELB1D06HAYQLX4GU' where id=7; -update noar tt set v2='QWL2F7Y16CLMYRDB04XUSY1GSA0ISSO76' where id=7; -update noar ti set v2='QWL2F7Y16CLMYRDB04XUSY1GSA0ISSO76' where id=7; -update noar tt set v3='P2F0GV4EEYN4VE4HDXZ0E7PDKBSQJF6GL' where id=7; -update noar ti set v3='P2F0GV4EEYN4VE4HDXZ0E7PDKBSQJF6GL' where id=7; -update noar tt set v0='OYB0CLBGINZ3YBWW9NVIHHQYJGAI0X5BT' where id=8; -update noar ti set v0='OYB0CLBGINZ3YBWW9NVIHHQYJGAI0X5BT' where id=8; -update noar tt set v1='F1QHLVE9P88J6KY7N4TKFBOOILYEOHL4A' where id=8; -update noar ti set v1='F1QHLVE9P88J6KY7N4TKFBOOILYEOHL4A' where id=8; -update noar tt set v2='QF9ZE2I0VYNZE7QGWB33ZZLD4FIBGVNLT' where id=8; -update noar ti set v2='QF9ZE2I0VYNZE7QGWB33ZZLD4FIBGVNLT' where id=8; -update noar tt set v3='HWWI750LOVQP7AS10LDFVJNNS8MF9R8GY' where id=8; -update noar ti set v3='HWWI750LOVQP7AS10LDFVJNNS8MF9R8GY' where id=8; -update noar tt set v0='3WOM3TU4HU1PL7GKZX8OCAEVHYM11GM89' where id=9; -update noar ti set v0='3WOM3TU4HU1PL7GKZX8OCAEVHYM11GM89' where id=9; -update noar tt set v1='JIHBCC09NDSWMEJTIK0QIP9KAXNBZ9H1Q' where id=9; -update noar ti set v1='JIHBCC09NDSWMEJTIK0QIP9KAXNBZ9H1Q' where id=9; -update noar tt set v2='78YO3W3NXLUTU16UTYR7555XVFV52KDQC' where id=9; -update noar ti set v2='78YO3W3NXLUTU16UTYR7555XVFV52KDQC' where id=9; -update noar tt set v3='GXR3FE0JE56D5FQF11AEU4C99T8EXF1ZJ' where id=9; -update noar ti set v3='GXR3FE0JE56D5FQF11AEU4C99T8EXF1ZJ' where id=9; -update noar tt set v0='HGMVC69FY2Z6BL87OMXLNKBOJMTLCRLFW' where id=10; -update noar ti set v0='HGMVC69FY2Z6BL87OMXLNKBOJMTLCRLFW' where id=10; -update noar tt set v1='Z3TNXODWL0PNYWPFVR4R3H58D0CWU19BD' where id=10; -update noar ti set v1='Z3TNXODWL0PNYWPFVR4R3H58D0CWU19BD' where id=10; -update noar tt set v2='0QFA5XYBCEHP0DE6U7RFVB87807HQO64H' where id=10; -update noar ti set v2='0QFA5XYBCEHP0DE6U7RFVB87807HQO64H' where id=10; -update noar tt set v3='JPYIAZFXKUO9NJPR02VIYU249KANCV92D' where id=10; -update noar ti set v3='JPYIAZFXKUO9NJPR02VIYU249KANCV92D' where id=10; -update noar tt set v0='AMEZSIYEUDNEGHOS049TJACNNDR6MIC8E' where id=11; -update noar ti set v0='AMEZSIYEUDNEGHOS049TJACNNDR6MIC8E' where id=11; -update noar tt set v1='H1SWYVWHWADQ7BTQ750J1JO58L6RPY5W7' where id=11; -update noar ti set v1='H1SWYVWHWADQ7BTQ750J1JO58L6RPY5W7' where id=11; -update noar tt set v2='PLNCWN1ROGM9T0O1MWKDO9L6ESFU0FKR6' where id=11; -update noar ti set v2='PLNCWN1ROGM9T0O1MWKDO9L6ESFU0FKR6' where id=11; -update noar tt set v3='H9P6KPN6KTCV5PLP9THH67FGM2KYMSF4J' where id=11; -update noar ti set v3='H9P6KPN6KTCV5PLP9THH67FGM2KYMSF4J' where id=11; -update noar tt set v0='PVNUO91H0R7AKWCF1W2EXEHYATPTAH1E7' where id=12; -update noar ti set v0='PVNUO91H0R7AKWCF1W2EXEHYATPTAH1E7' where id=12; -update noar tt set v1='U0FOE6HQPNDNJXEP5FBY0A1V6J8HO570E' where id=12; -update noar ti set v1='U0FOE6HQPNDNJXEP5FBY0A1V6J8HO570E' where id=12; -update noar tt set v2='8V5CG0HWS4EOG7BGBGO534MUJXCDHZVAW' where id=12; -update noar ti set v2='8V5CG0HWS4EOG7BGBGO534MUJXCDHZVAW' where id=12; -update noar tt set v3='J6TONP8M31IGAAYVBNH546V98JYANY917' where id=12; -update noar ti set v3='J6TONP8M31IGAAYVBNH546V98JYANY917' where id=12; -update noar tt set v0='9SF0ETUMBG1C2Y5ZR5MRLMYXXL55D4TFA' where id=13; -update noar ti set v0='9SF0ETUMBG1C2Y5ZR5MRLMYXXL55D4TFA' where id=13; -update noar tt set v1='S8O71MSHHSLZXI2213PHD7HFENE4Y8P6F' where id=13; -update noar ti set v1='S8O71MSHHSLZXI2213PHD7HFENE4Y8P6F' where id=13; -update noar tt set v2='P8V7H83HGN1SGHXFFUN69JT1VIOVOCTBH' where id=13; -update noar ti set v2='P8V7H83HGN1SGHXFFUN69JT1VIOVOCTBH' where id=13; -update noar tt set v3='SZQ0XEJ08LD21ZSA55OHC4XL9VVR7CUW1' where id=13; -update noar ti set v3='SZQ0XEJ08LD21ZSA55OHC4XL9VVR7CUW1' where id=13; -update noar tt set v0='B12IPIJMUDE06SR5RNR0APUJJ97I85R31' where id=14; -update noar ti set v0='B12IPIJMUDE06SR5RNR0APUJJ97I85R31' where id=14; -update noar tt set v1='SQ1IR20KOWM2DK4RQ0KFJ2UYPAHOZL55J' where id=14; -update noar ti set v1='SQ1IR20KOWM2DK4RQ0KFJ2UYPAHOZL55J' where id=14; -update noar tt set v2='6O2OW9Y7PNH03AV2P6ISEHMB99NT52RRA' where id=14; -update noar ti set v2='6O2OW9Y7PNH03AV2P6ISEHMB99NT52RRA' where id=14; -update noar tt set v3='XZNG602TFER48KS2YEW3GOZT4QLDSUSM9' where id=14; -update noar ti set v3='XZNG602TFER48KS2YEW3GOZT4QLDSUSM9' where id=14; -update noar tt set v0='8P4R9R566P05H5MN3ZQXSGPTKUTOLQ0RT' where id=15; -update noar ti set v0='8P4R9R566P05H5MN3ZQXSGPTKUTOLQ0RT' where id=15; -update noar tt set v1='BSWDQFWV114F6LNP1FZQ5D384ZLPRHXL0' where id=15; -update noar ti set v1='BSWDQFWV114F6LNP1FZQ5D384ZLPRHXL0' where id=15; -update noar tt set v2='C18UYE05QL0RYD4WG1O7Y6W74RLOP7948' where id=15; -update noar ti set v2='C18UYE05QL0RYD4WG1O7Y6W74RLOP7948' where id=15; -update noar tt set v3='SJSLH132HKQBQAOZF91XKJPWTS2NOCTLR' where id=15; -update noar ti set v3='SJSLH132HKQBQAOZF91XKJPWTS2NOCTLR' where id=15; -update noar tt set v0='UZSVSIGW2JHZGPFPUCF6EHZUQHMM8Q6G6' where id=16; -update noar ti set v0='UZSVSIGW2JHZGPFPUCF6EHZUQHMM8Q6G6' where id=16; -update noar tt set v1='MZDBG86F95PE2QSYRU855GFUMVC9JWM8Y' where id=16; -update noar ti set v1='MZDBG86F95PE2QSYRU855GFUMVC9JWM8Y' where id=16; -update noar tt set v2='NF8PIMOIPPYH3AQJR6R8FQMPX10ZBDSFQ' where id=16; -update noar ti set v2='NF8PIMOIPPYH3AQJR6R8FQMPX10ZBDSFQ' where id=16; -update noar tt set v3='SPXG4OR4XFGUVWDRV7J3G8L2V5RSJYOYM' where id=16; -update noar ti set v3='SPXG4OR4XFGUVWDRV7J3G8L2V5RSJYOYM' where id=16; -update noar tt set v0='F3A1CHQU0MEJPT62HME1VKM5EQZ57SVXR' where id=17; -update noar ti set v0='F3A1CHQU0MEJPT62HME1VKM5EQZ57SVXR' where id=17; -update noar tt set v1='TQ2XK26I1XAFIR78Z8THVBD39K4IUZFZE' where id=17; -update noar ti set v1='TQ2XK26I1XAFIR78Z8THVBD39K4IUZFZE' where id=17; -update noar tt set v2='YVO846KBJ1NV8U6SDTL51M2K3HA4C4H6B' where id=17; -update noar ti set v2='YVO846KBJ1NV8U6SDTL51M2K3HA4C4H6B' where id=17; -update noar tt set v3='LVDOI1METCQVT2VW2ME3SXROD7EA2GC6F' where id=17; -update noar ti set v3='LVDOI1METCQVT2VW2ME3SXROD7EA2GC6F' where id=17; -update noar tt set v0='MKDJ79X4CTDYB1YMWDJOCTP82EIDX6XD7' where id=18; -update noar ti set v0='MKDJ79X4CTDYB1YMWDJOCTP82EIDX6XD7' where id=18; -update noar tt set v1='DXKLQC2B8SLZ49QFJEVKB7W5MSLP10PXB' where id=18; -update noar ti set v1='DXKLQC2B8SLZ49QFJEVKB7W5MSLP10PXB' where id=18; -update noar tt set v2='OVDNU2U0VYYB4SL9ATQRX14DTPSF2EYC0' where id=18; -update noar ti set v2='OVDNU2U0VYYB4SL9ATQRX14DTPSF2EYC0' where id=18; -update noar tt set v3='GHA7T9AZU3GP1YB75FOO09LGPIC54YT29' where id=18; -update noar ti set v3='GHA7T9AZU3GP1YB75FOO09LGPIC54YT29' where id=18; -update noar tt set v0='56YU26EX616AVMGIBO9T55F77CTPBHHTY' where id=19; -update noar ti set v0='56YU26EX616AVMGIBO9T55F77CTPBHHTY' where id=19; -update noar tt set v1='6IEIJABVSHTL7B7IC8ATYUOOMNG5P4J21' where id=19; -update noar ti set v1='6IEIJABVSHTL7B7IC8ATYUOOMNG5P4J21' where id=19; -update noar tt set v2='ZQDUTBTFE4OAHNRKF4PT5O7ALF6K0B871' where id=19; -update noar ti set v2='ZQDUTBTFE4OAHNRKF4PT5O7ALF6K0B871' where id=19; -update noar tt set v3='K7GNNXZ4GV1ONF0XJ5WCOF6TBS88TM1RX' where id=19; -update noar ti set v3='K7GNNXZ4GV1ONF0XJ5WCOF6TBS88TM1RX' where id=19; -update noar tt set v0='UC8URNJBUZONLBXRPGX52ZHH4DMBJ4QES' where id=20; -update noar ti set v0='UC8URNJBUZONLBXRPGX52ZHH4DMBJ4QES' where id=20; -update noar tt set v1='QEIWBYOKP8QIBME421MTQK5XT7L5VEIE1' where id=20; -update noar ti set v1='QEIWBYOKP8QIBME421MTQK5XT7L5VEIE1' where id=20; -update noar tt set v2='LOTIEB7G2YCUSRFF8GY44EZKWPUWR9072' where id=20; -update noar ti set v2='LOTIEB7G2YCUSRFF8GY44EZKWPUWR9072' where id=20; -update noar tt set v3='98WVRWY6KRR18BR694HT4D9X9HY1UISFD' where id=20; -update noar ti set v3='98WVRWY6KRR18BR694HT4D9X9HY1UISFD' where id=20; -update noar tt set v0='WGYQ7OOYJWOO3R3593YADT3CA0X24CHGE' where id=21; -update noar ti set v0='WGYQ7OOYJWOO3R3593YADT3CA0X24CHGE' where id=21; -update noar tt set v1='HEYADKX46NP9STU5WBTMCI51NS2YJN7W0' where id=21; -update noar ti set v1='HEYADKX46NP9STU5WBTMCI51NS2YJN7W0' where id=21; -update noar tt set v2='6MRK67XGPTU37D5JLR0HMO8KO1RVTCTCK' where id=21; -update noar ti set v2='6MRK67XGPTU37D5JLR0HMO8KO1RVTCTCK' where id=21; -update noar tt set v3='VJ21I5FYUNUCI6HEVY39MHK5VJKSUWLT4' where id=21; -update noar ti set v3='VJ21I5FYUNUCI6HEVY39MHK5VJKSUWLT4' where id=21; -update noar tt set v0='RK7QU7GYTGGM50TTY4S4XKLPQ96XU89YM' where id=22; -update noar ti set v0='RK7QU7GYTGGM50TTY4S4XKLPQ96XU89YM' where id=22; -update noar tt set v1='9XYLSONJ3MWXI8I1PKO03ONPE18JPEY08' where id=22; -update noar ti set v1='9XYLSONJ3MWXI8I1PKO03ONPE18JPEY08' where id=22; -update noar tt set v2='QUPQ3LGB6745Q9DJUMXA171IQ4Y2HU6G2' where id=22; -update noar ti set v2='QUPQ3LGB6745Q9DJUMXA171IQ4Y2HU6G2' where id=22; -update noar tt set v3='PKM2DEQIRE82867HKDOEBNV7LBGF3QH43' where id=22; -update noar ti set v3='PKM2DEQIRE82867HKDOEBNV7LBGF3QH43' where id=22; -update noar tt set v0='28B1SUBXBYD7IBS0GFBPZIIFPTBWEKK41' where id=23; -update noar ti set v0='28B1SUBXBYD7IBS0GFBPZIIFPTBWEKK41' where id=23; -update noar tt set v1='VOKF6B4GX5RVKM4E1ROO7Q1N904DE93MD' where id=23; -update noar ti set v1='VOKF6B4GX5RVKM4E1ROO7Q1N904DE93MD' where id=23; -update noar tt set v2='IQQRS8LONX8URZ30TB6EIKNI7MH937U0I' where id=23; -update noar ti set v2='IQQRS8LONX8URZ30TB6EIKNI7MH937U0I' where id=23; -update noar tt set v3='0MFUCQLDYNBJZX7PH4BX2BPCT6JJU2OCY' where id=23; -update noar ti set v3='0MFUCQLDYNBJZX7PH4BX2BPCT6JJU2OCY' where id=23; -update noar tt set v0='H35VJ0JJ9M4VKRSKPZSEFOGYHQEXPWD2V' where id=24; -update noar ti set v0='H35VJ0JJ9M4VKRSKPZSEFOGYHQEXPWD2V' where id=24; -update noar tt set v1='0WVQRQNN4L9T49A8NBOY4TDVRCKZPT4LM' where id=24; -update noar ti set v1='0WVQRQNN4L9T49A8NBOY4TDVRCKZPT4LM' where id=24; -update noar tt set v2='JEFMF7ET9L805T1WJ8K4ZQ5IVRQ6ZXPJD' where id=24; -update noar ti set v2='JEFMF7ET9L805T1WJ8K4ZQ5IVRQ6ZXPJD' where id=24; -update noar tt set v3='XE099KPJIXBNUL85T6F1N7JLRW984J9TF' where id=24; -update noar ti set v3='XE099KPJIXBNUL85T6F1N7JLRW984J9TF' where id=24; -update noar tt set v0='X14F3R7GU1RJOCCW4WX7CTIGT36TE3JRG' where id=25; -update noar ti set v0='X14F3R7GU1RJOCCW4WX7CTIGT36TE3JRG' where id=25; -update noar tt set v1='U4X1TLXGG39F6MJFB4AJ5AVNVDRQBEH06' where id=25; -update noar ti set v1='U4X1TLXGG39F6MJFB4AJ5AVNVDRQBEH06' where id=25; -update noar tt set v2='6VLMEP1APE3QP9NGZHV5WAUAJJCFMUP3Y' where id=25; -update noar ti set v2='6VLMEP1APE3QP9NGZHV5WAUAJJCFMUP3Y' where id=25; -update noar tt set v3='6E0GFNFJIYRBFZ7T6D47QZXFN85X5UGLZ' where id=25; -update noar ti set v3='6E0GFNFJIYRBFZ7T6D47QZXFN85X5UGLZ' where id=25; -update noar tt set v0='J7FZVM7Z9K8JFMX7X63U5T30O10QA5OMS' where id=26; -update noar ti set v0='J7FZVM7Z9K8JFMX7X63U5T30O10QA5OMS' where id=26; -update noar tt set v1='47DZY405L0EZ5VIBA5KAAX2N2TQDXPEPN' where id=26; -update noar ti set v1='47DZY405L0EZ5VIBA5KAAX2N2TQDXPEPN' where id=26; -update noar tt set v2='CT2XH9X3W36YXMAKQPKPIXTDHSII9695N' where id=26; -update noar ti set v2='CT2XH9X3W36YXMAKQPKPIXTDHSII9695N' where id=26; -update noar tt set v3='GRJJ7OT65HHPSRIRECL3YWXZHUAV950AE' where id=26; -update noar ti set v3='GRJJ7OT65HHPSRIRECL3YWXZHUAV950AE' where id=26; -update noar tt set v0='T2PQ2G2YUHMZFOIH8KD9WOLVZACI6QXSL' where id=27; -update noar ti set v0='T2PQ2G2YUHMZFOIH8KD9WOLVZACI6QXSL' where id=27; -update noar tt set v1='WBKMMLEJIH1CELPCOJR4GFCW910192RUC' where id=27; -update noar ti set v1='WBKMMLEJIH1CELPCOJR4GFCW910192RUC' where id=27; -update noar tt set v2='GW7O784R98OO80ZQRU56JV04O5ZKVCGLM' where id=27; -update noar ti set v2='GW7O784R98OO80ZQRU56JV04O5ZKVCGLM' where id=27; -update noar tt set v3='4ASKL6U7NE4H92UNQETXZQMELKRUM9RJW' where id=27; -update noar ti set v3='4ASKL6U7NE4H92UNQETXZQMELKRUM9RJW' where id=27; -update noar tt set v0='VL5UD7E3UXP1Y30T19OUQMDNQQDCVIMF5' where id=28; -update noar ti set v0='VL5UD7E3UXP1Y30T19OUQMDNQQDCVIMF5' where id=28; -update noar tt set v1='EPLL1XI0NDVRFJTEMPY5Y6U8ERLTL8T6A' where id=28; -update noar ti set v1='EPLL1XI0NDVRFJTEMPY5Y6U8ERLTL8T6A' where id=28; -update noar tt set v2='2BTSP19L73FQ35FQ5D08MP0C0JKQNYIE9' where id=28; -update noar ti set v2='2BTSP19L73FQ35FQ5D08MP0C0JKQNYIE9' where id=28; -update noar tt set v3='BH7X40UUGJPX4S4AALT5U9IKEEBUD1OUM' where id=28; -update noar ti set v3='BH7X40UUGJPX4S4AALT5U9IKEEBUD1OUM' where id=28; -update noar tt set v0='0XYMUNMMYKYKJOFX6KU1VZUXYW2R2SGOG' where id=29; -update noar ti set v0='0XYMUNMMYKYKJOFX6KU1VZUXYW2R2SGOG' where id=29; -update noar tt set v1='2O9VFIZQU5X3N3SH7X6KBHKZE99NGKJZH' where id=29; -update noar ti set v1='2O9VFIZQU5X3N3SH7X6KBHKZE99NGKJZH' where id=29; -update noar tt set v2='NLHXCA55YM0YH9ORW54T2DYRWI7PWSMY1' where id=29; -update noar ti set v2='NLHXCA55YM0YH9ORW54T2DYRWI7PWSMY1' where id=29; -update noar tt set v3='GFEF2SYYVRSHCVM1JX5GYY51H00H87XC2' where id=29; -update noar ti set v3='GFEF2SYYVRSHCVM1JX5GYY51H00H87XC2' where id=29; -update noar tt set v0='LJMNSZA5O130HP39Q0HGEY7PW6V1TWO3A' where id=30; -update noar ti set v0='LJMNSZA5O130HP39Q0HGEY7PW6V1TWO3A' where id=30; -update noar tt set v1='J8Q5CVBM83ZF76UY4KAZ0MBCSD3ZZK59O' where id=30; -update noar ti set v1='J8Q5CVBM83ZF76UY4KAZ0MBCSD3ZZK59O' where id=30; -update noar tt set v2='410FAC6AON5D5DNNS49P87VTKZ5XHY24W' where id=30; -update noar ti set v2='410FAC6AON5D5DNNS49P87VTKZ5XHY24W' where id=30; -update noar tt set v3='6OVAG8QJYGVZ7H3QSYLOJ4KB5HM9WU201' where id=30; -update noar ti set v3='6OVAG8QJYGVZ7H3QSYLOJ4KB5HM9WU201' where id=30; -update noar tt set v0='7NHI3QNFIXZQFRN67VXYFNXODUQNYRSGF' where id=31; -update noar ti set v0='7NHI3QNFIXZQFRN67VXYFNXODUQNYRSGF' where id=31; -update noar tt set v1='2EUIFAF1PD1GQ1X00EUU4G26IUHYE00WI' where id=31; -update noar ti set v1='2EUIFAF1PD1GQ1X00EUU4G26IUHYE00WI' where id=31; -update noar tt set v2='M1H8FI0O21CY7BVEK624X5QJPHGB919UN' where id=31; -update noar ti set v2='M1H8FI0O21CY7BVEK624X5QJPHGB919UN' where id=31; -update noar tt set v3='I661L0SLV4WI6NYPB3D97AUILOV6XC0FE' where id=31; -update noar ti set v3='I661L0SLV4WI6NYPB3D97AUILOV6XC0FE' where id=31; -update noar tt set v0='OGDZHQ95S17YB4LIFHGVFLOJSY1KDSB30' where id=32; -update noar ti set v0='OGDZHQ95S17YB4LIFHGVFLOJSY1KDSB30' where id=32; -update noar tt set v1='8GQUEDNSHUCLOJNKPIH56TB6L0PBMD65U' where id=32; -update noar ti set v1='8GQUEDNSHUCLOJNKPIH56TB6L0PBMD65U' where id=32; -update noar tt set v2='HAQQ51MGMVNOXA12ALYIYXHH7A66M4NFF' where id=32; -update noar ti set v2='HAQQ51MGMVNOXA12ALYIYXHH7A66M4NFF' where id=32; -update noar tt set v3='VW5OEZ7QECGOU9VVRTM4WOX79G2RBWETN' where id=32; -update noar ti set v3='VW5OEZ7QECGOU9VVRTM4WOX79G2RBWETN' where id=32; -update noar tt set v0='1LSN1T9R98CYSP8SDL6MUHZYC7734XO2X' where id=33; -update noar ti set v0='1LSN1T9R98CYSP8SDL6MUHZYC7734XO2X' where id=33; -update noar tt set v1='6H4XU6WU6JTODYEWNZ50V0SD2BBJ2CP1M' where id=33; -update noar ti set v1='6H4XU6WU6JTODYEWNZ50V0SD2BBJ2CP1M' where id=33; -update noar tt set v2='W1HXKNQTDCNJOJQ9H5ZJ0JSG1VQ5ZJSPV' where id=33; -update noar ti set v2='W1HXKNQTDCNJOJQ9H5ZJ0JSG1VQ5ZJSPV' where id=33; -update noar tt set v3='QQFHL4QXG8NJEKQ9JK8GTRGYKTMOHWLUW' where id=33; -update noar ti set v3='QQFHL4QXG8NJEKQ9JK8GTRGYKTMOHWLUW' where id=33; -update noar tt set v0='M3WQCU84TA265RO9865JQ6XBSE7NS6Z59' where id=34; -update noar ti set v0='M3WQCU84TA265RO9865JQ6XBSE7NS6Z59' where id=34; -update noar tt set v1='Z4DNA42Z37ORF1Z9JVTTPOV58RD6VMULU' where id=34; -update noar ti set v1='Z4DNA42Z37ORF1Z9JVTTPOV58RD6VMULU' where id=34; -update noar tt set v2='ZEOSTBEIKTX7MRRBMG2UYMWLFBH7ZLZQ0' where id=34; -update noar ti set v2='ZEOSTBEIKTX7MRRBMG2UYMWLFBH7ZLZQ0' where id=34; -update noar tt set v3='S0NBDM8NNEXLKYM6QDRQXHCH56XUVPUEQ' where id=34; -update noar ti set v3='S0NBDM8NNEXLKYM6QDRQXHCH56XUVPUEQ' where id=34; -update noar tt set v0='HAK9VG8HQJRVEUSNZJMLQ5HJWQL7QZV3C' where id=35; -update noar ti set v0='HAK9VG8HQJRVEUSNZJMLQ5HJWQL7QZV3C' where id=35; -update noar tt set v1='W27V5QYK0ZTD0G8YZDFAXXUU8528NDBPJ' where id=35; -update noar ti set v1='W27V5QYK0ZTD0G8YZDFAXXUU8528NDBPJ' where id=35; -update noar tt set v2='CJ9W59MF4VSOBZFJDP40E9YKZIO1Q6KLX' where id=35; -update noar ti set v2='CJ9W59MF4VSOBZFJDP40E9YKZIO1Q6KLX' where id=35; -update noar tt set v3='TTOFMYRMF7WLKCCI1Y1QCR2D3W6CC0VXO' where id=35; -update noar ti set v3='TTOFMYRMF7WLKCCI1Y1QCR2D3W6CC0VXO' where id=35; -update noar tt set v0='MF0TRKBPLG9IBFPTG57P7F5ZX2L057ZHT' where id=36; -update noar ti set v0='MF0TRKBPLG9IBFPTG57P7F5ZX2L057ZHT' where id=36; -update noar tt set v1='TWY9GL4N6YU1MWP8XB1PI8YS3UBWDDNMB' where id=36; -update noar ti set v1='TWY9GL4N6YU1MWP8XB1PI8YS3UBWDDNMB' where id=36; -update noar tt set v2='5XD0MEQKDMR2HGXBJ6NKSF0HKA6NNS742' where id=36; -update noar ti set v2='5XD0MEQKDMR2HGXBJ6NKSF0HKA6NNS742' where id=36; -update noar tt set v3='3H0EA6B45WR6FRWTCKCHOJXTHA5BKIT2F' where id=36; -update noar ti set v3='3H0EA6B45WR6FRWTCKCHOJXTHA5BKIT2F' where id=36; -update noar tt set v0='95E6L7GSV9I7KBBHV3F9KBE23IL6WE8YL' where id=37; -update noar ti set v0='95E6L7GSV9I7KBBHV3F9KBE23IL6WE8YL' where id=37; -update noar tt set v1='9F3JB8AIRJE6QHTXIEEVZJNLQYJEGXY4H' where id=37; -update noar ti set v1='9F3JB8AIRJE6QHTXIEEVZJNLQYJEGXY4H' where id=37; -update noar tt set v2='OYH9Y7IVQRZ8G842TPF6N7QNLGLP7AM3C' where id=37; -update noar ti set v2='OYH9Y7IVQRZ8G842TPF6N7QNLGLP7AM3C' where id=37; -update noar tt set v3='3B1JQXY8WUEFUUGSHRS45CEDCQN0WRNTQ' where id=37; -update noar ti set v3='3B1JQXY8WUEFUUGSHRS45CEDCQN0WRNTQ' where id=37; -update noar tt set v0='JZQLQ9ZHXFIU7WBCDA6OTRLW3PDSJNUJ7' where id=38; -update noar ti set v0='JZQLQ9ZHXFIU7WBCDA6OTRLW3PDSJNUJ7' where id=38; -update noar tt set v1='G24SDD849GUFPH2UIUXK6TDPMVZT9KX1C' where id=38; -update noar ti set v1='G24SDD849GUFPH2UIUXK6TDPMVZT9KX1C' where id=38; -update noar tt set v2='IZD3TF8EYOVOBCBOTZS4RBRQDJEJKBEJ9' where id=38; -update noar ti set v2='IZD3TF8EYOVOBCBOTZS4RBRQDJEJKBEJ9' where id=38; -update noar tt set v3='95XWXAHWDQKCSS7P7CI97AY8ZPF8HUJDW' where id=38; -update noar ti set v3='95XWXAHWDQKCSS7P7CI97AY8ZPF8HUJDW' where id=38; -update noar tt set v0='1T3Y4KJWLSI014FJXUJVP4S23RY039MOG' where id=39; -update noar ti set v0='1T3Y4KJWLSI014FJXUJVP4S23RY039MOG' where id=39; -update noar tt set v1='8MKPK1U4WQUQF4RPY272YOL2SIXE2G6J3' where id=39; -update noar ti set v1='8MKPK1U4WQUQF4RPY272YOL2SIXE2G6J3' where id=39; -update noar tt set v2='VHDUJNM08T9L9JFP4P742MTE3H6K954ZC' where id=39; -update noar ti set v2='VHDUJNM08T9L9JFP4P742MTE3H6K954ZC' where id=39; -update noar tt set v3='51C8TP623RGCLWDMRC8XJ0349CGIUYW1S' where id=39; -update noar ti set v3='51C8TP623RGCLWDMRC8XJ0349CGIUYW1S' where id=39; -update noar tt set v0='TCBKJV7WEFI3NKLR7IV4GROF41X4YGZV8' where id=40; -update noar ti set v0='TCBKJV7WEFI3NKLR7IV4GROF41X4YGZV8' where id=40; -update noar tt set v1='2N5M3QLKEWTVH0WHD8PEHAMWMD2YKXT4W' where id=40; -update noar ti set v1='2N5M3QLKEWTVH0WHD8PEHAMWMD2YKXT4W' where id=40; -update noar tt set v2='TO6EK2U8AK5D8WRZLYIP0QU5N1SADEC8B' where id=40; -update noar ti set v2='TO6EK2U8AK5D8WRZLYIP0QU5N1SADEC8B' where id=40; -update noar tt set v3='J0HIPHB60ZPUTXBHRD2R8A584R08B7QAN' where id=40; -update noar ti set v3='J0HIPHB60ZPUTXBHRD2R8A584R08B7QAN' where id=40; -update noar tt set v0='QMOCYIW5F2KGTXJWOURV0AUPGOVU0LRD1' where id=41; -update noar ti set v0='QMOCYIW5F2KGTXJWOURV0AUPGOVU0LRD1' where id=41; -update noar tt set v1='3J81DLRM220BY3D72I3SSMHA2BQ5XR61V' where id=41; -update noar ti set v1='3J81DLRM220BY3D72I3SSMHA2BQ5XR61V' where id=41; -update noar tt set v2='OBWI4SVE17HETZB0DO93V8F3255DASLP9' where id=41; -update noar ti set v2='OBWI4SVE17HETZB0DO93V8F3255DASLP9' where id=41; -update noar tt set v3='OVXNZF1UGXBVV6RYR0SS85O7XH6XRHYVU' where id=41; -update noar ti set v3='OVXNZF1UGXBVV6RYR0SS85O7XH6XRHYVU' where id=41; -update noar tt set v0='ND5SELQZO5NMDPGID2MGDS8QWSPQWRSDC' where id=42; -update noar ti set v0='ND5SELQZO5NMDPGID2MGDS8QWSPQWRSDC' where id=42; -update noar tt set v1='APFLH78J8RIUQABJO9C0XUJ728S19FMB1' where id=42; -update noar ti set v1='APFLH78J8RIUQABJO9C0XUJ728S19FMB1' where id=42; -update noar tt set v2='97W8TYYF33GACEUL9NIZ7Y8DL3SEU6M0X' where id=42; -update noar ti set v2='97W8TYYF33GACEUL9NIZ7Y8DL3SEU6M0X' where id=42; -update noar tt set v3='T7J5UC89PA3I2J3MP6H8FY38G8KCZ8DGE' where id=42; -update noar ti set v3='T7J5UC89PA3I2J3MP6H8FY38G8KCZ8DGE' where id=42; -update noar tt set v0='L9DAO06YPFO4FNO0YML7601UL297EJLJK' where id=43; -update noar ti set v0='L9DAO06YPFO4FNO0YML7601UL297EJLJK' where id=43; -update noar tt set v1='T8LPZDBGLKVGF7J8WDPNCGC4UDT5YXT0G' where id=43; -update noar ti set v1='T8LPZDBGLKVGF7J8WDPNCGC4UDT5YXT0G' where id=43; -update noar tt set v2='F8OE6XPDSL9T5L6RWXGZ37TOR08XQNKLD' where id=43; -update noar ti set v2='F8OE6XPDSL9T5L6RWXGZ37TOR08XQNKLD' where id=43; -update noar tt set v3='JP7QNSDHCOWOHEZ19AK8WBU3P0HZZZFUC' where id=43; -update noar ti set v3='JP7QNSDHCOWOHEZ19AK8WBU3P0HZZZFUC' where id=43; -update noar tt set v0='QR5CU9J1BM54KXSALVOU2YYIIT9II5IV7' where id=44; -update noar ti set v0='QR5CU9J1BM54KXSALVOU2YYIIT9II5IV7' where id=44; -update noar tt set v1='THR2AGEW965PRL7DQ6FPFRVF555HV9BGH' where id=44; -update noar ti set v1='THR2AGEW965PRL7DQ6FPFRVF555HV9BGH' where id=44; -update noar tt set v2='GK24JP9QKQEJ41FF92VFAFG2J4H367VXY' where id=44; -update noar ti set v2='GK24JP9QKQEJ41FF92VFAFG2J4H367VXY' where id=44; -update noar tt set v3='RXQ5576BL2NWDIAAZWD6T9ARM4A0CNHPK' where id=44; -update noar ti set v3='RXQ5576BL2NWDIAAZWD6T9ARM4A0CNHPK' where id=44; -update noar tt set v0='GWR3GW8YSUEHLA2IMYNODZTMABWQL3UVN' where id=45; -update noar ti set v0='GWR3GW8YSUEHLA2IMYNODZTMABWQL3UVN' where id=45; -update noar tt set v1='BKZNASNZUDYVUMESOFLQQMW3KXZRD8TNI' where id=45; -update noar ti set v1='BKZNASNZUDYVUMESOFLQQMW3KXZRD8TNI' where id=45; -update noar tt set v2='S9SNZCF4KJ3LOD8LU51I7YIK2NHHL2S9L' where id=45; -update noar ti set v2='S9SNZCF4KJ3LOD8LU51I7YIK2NHHL2S9L' where id=45; -update noar tt set v3='ZBWLFM6A2VE95ZKNZ8HFZNQ2JVSSWH1VJ' where id=45; -update noar ti set v3='ZBWLFM6A2VE95ZKNZ8HFZNQ2JVSSWH1VJ' where id=45; -update noar tt set v0='27CIX9UJKS2U48PLDIW59ZDET9LYB9ZP8' where id=46; -update noar ti set v0='27CIX9UJKS2U48PLDIW59ZDET9LYB9ZP8' where id=46; -update noar tt set v1='1A0ELI6O5NJFOPT5NKL53RVHJE7XE39LY' where id=46; -update noar ti set v1='1A0ELI6O5NJFOPT5NKL53RVHJE7XE39LY' where id=46; -update noar tt set v2='27J8V1GVO68JHO0CK71DFDXC4HF98GDBK' where id=46; -update noar ti set v2='27J8V1GVO68JHO0CK71DFDXC4HF98GDBK' where id=46; -update noar tt set v3='AH200JYBSX88DD1XIK7GVDLMJNEYVNRD6' where id=46; -update noar ti set v3='AH200JYBSX88DD1XIK7GVDLMJNEYVNRD6' where id=46; -update noar tt set v0='H5J4WZ3QWCZA02UB84BPM78RQDK2OTIK5' where id=47; -update noar ti set v0='H5J4WZ3QWCZA02UB84BPM78RQDK2OTIK5' where id=47; -update noar tt set v1='TL89W61XVOK7G5VUFTKUDY411H6J01DIF' where id=47; -update noar ti set v1='TL89W61XVOK7G5VUFTKUDY411H6J01DIF' where id=47; -update noar tt set v2='FA4N8L56DOQSQ909DQ4IXVV6QPMB3GXY7' where id=47; -update noar ti set v2='FA4N8L56DOQSQ909DQ4IXVV6QPMB3GXY7' where id=47; -update noar tt set v3='8S6S0DCK02JY4BEU0UMJAVEK73IXPORDL' where id=47; -update noar ti set v3='8S6S0DCK02JY4BEU0UMJAVEK73IXPORDL' where id=47; -update noar tt set v0='G9VHLMZMPR34PGYRYYE7EBCVZD62OV7G7' where id=48; -update noar ti set v0='G9VHLMZMPR34PGYRYYE7EBCVZD62OV7G7' where id=48; -update noar tt set v1='PXSSL3CI37E8NIARJ97E7560CU47S7ZJH' where id=48; -update noar ti set v1='PXSSL3CI37E8NIARJ97E7560CU47S7ZJH' where id=48; -update noar tt set v2='HL0KH8QSLJTM47SZNB5XYJ334W0T7LQ17' where id=48; -update noar ti set v2='HL0KH8QSLJTM47SZNB5XYJ334W0T7LQ17' where id=48; -update noar tt set v3='SZL2PQD8RE1IKQ1O9OYB3AD6NJBLI9BWD' where id=48; -update noar ti set v3='SZL2PQD8RE1IKQ1O9OYB3AD6NJBLI9BWD' where id=48; -update noar tt set v0='Z3AFY4MML6MYH5NG9JSQ72RLK0HO0BG9V' where id=49; -update noar ti set v0='Z3AFY4MML6MYH5NG9JSQ72RLK0HO0BG9V' where id=49; -update noar tt set v1='8WMTWYRK0DI205EJFQKQBWU67OCNKL2OO' where id=49; -update noar ti set v1='8WMTWYRK0DI205EJFQKQBWU67OCNKL2OO' where id=49; -update noar tt set v2='I9UEO5RMIUO4RF9LJPZQQ9EFNQQF8Y53O' where id=49; -update noar ti set v2='I9UEO5RMIUO4RF9LJPZQQ9EFNQQF8Y53O' where id=49; -update noar tt set v3='ILHMCPLH1R46JMUI86NJ3KQXLFDR7T3PV' where id=49; -update noar ti set v3='ILHMCPLH1R46JMUI86NJ3KQXLFDR7T3PV' where id=49; -update noar tt set v0='RURSQ9L2FSKAFNVYJK1C7FLEJFZHUILXD' where id=50; -update noar ti set v0='RURSQ9L2FSKAFNVYJK1C7FLEJFZHUILXD' where id=50; -update noar tt set v1='DSL5GCW995JRY82HOPK0IV52JUI4I1RBA' where id=50; -update noar ti set v1='DSL5GCW995JRY82HOPK0IV52JUI4I1RBA' where id=50; -update noar tt set v2='TRFMGIARIBM6O4HH9YT49EI7ICZDSCCZK' where id=50; -update noar ti set v2='TRFMGIARIBM6O4HH9YT49EI7ICZDSCCZK' where id=50; -update noar tt set v3='458762STQLMQS5IK2AUZFMMDAQ8GFVW39' where id=50; -update noar ti set v3='458762STQLMQS5IK2AUZFMMDAQ8GFVW39' where id=50; -update noar tt set v0='7L6UP1XJBFY9RLRQJZMOC52GHJZUXS27J' where id=51; -update noar ti set v0='7L6UP1XJBFY9RLRQJZMOC52GHJZUXS27J' where id=51; -update noar tt set v1='YTMDICEWMQJTBWBZCB6ALJSSY2HBLGA1B' where id=51; -update noar ti set v1='YTMDICEWMQJTBWBZCB6ALJSSY2HBLGA1B' where id=51; -update noar tt set v2='L6X04J0C3HWTE8R9JN3YADC02AS5O781E' where id=51; -update noar ti set v2='L6X04J0C3HWTE8R9JN3YADC02AS5O781E' where id=51; -update noar tt set v3='AD2RYQ8TG4Q0E3T5Y7O8NJERYDHV8Q2UY' where id=51; -update noar ti set v3='AD2RYQ8TG4Q0E3T5Y7O8NJERYDHV8Q2UY' where id=51; -update noar tt set v0='KIYNLLN5RH3R6LYNPHLAPYV5GB46E2G7W' where id=52; -update noar ti set v0='KIYNLLN5RH3R6LYNPHLAPYV5GB46E2G7W' where id=52; -update noar tt set v1='MJBQA2HIXRPOH9K42ZIQ9NXLUY9QN93Z3' where id=52; -update noar ti set v1='MJBQA2HIXRPOH9K42ZIQ9NXLUY9QN93Z3' where id=52; -update noar tt set v2='FERPK7XSW9WSSHW0MMSU32PKC169QA2H6' where id=52; -update noar ti set v2='FERPK7XSW9WSSHW0MMSU32PKC169QA2H6' where id=52; -update noar tt set v3='DSH8CFWXTX2DLN9XMHLZCASZL6K5XJUUA' where id=52; -update noar ti set v3='DSH8CFWXTX2DLN9XMHLZCASZL6K5XJUUA' where id=52; -update noar tt set v0='6AN7R1VYJVONXHX17M1DO6RG5RGZZD2T7' where id=53; -update noar ti set v0='6AN7R1VYJVONXHX17M1DO6RG5RGZZD2T7' where id=53; -update noar tt set v1='JWMPLL8L4A3AJ1YQQOBV89JSSZ1OPKF0I' where id=53; -update noar ti set v1='JWMPLL8L4A3AJ1YQQOBV89JSSZ1OPKF0I' where id=53; -update noar tt set v2='0LIY2CSI9D3HPPBADYLRUYKHH6Y5J6O0I' where id=53; -update noar ti set v2='0LIY2CSI9D3HPPBADYLRUYKHH6Y5J6O0I' where id=53; -update noar tt set v3='3TPM46KEH2W2KTRAVUCLDD24ZGIIYE73G' where id=53; -update noar ti set v3='3TPM46KEH2W2KTRAVUCLDD24ZGIIYE73G' where id=53; -update noar tt set v0='9FMS4I2NTMHR3AJLL5JPKH1MS2BETT508' where id=54; -update noar ti set v0='9FMS4I2NTMHR3AJLL5JPKH1MS2BETT508' where id=54; -update noar tt set v1='SB1RJLVZA09KX532JNTE5APJUTZU94BR7' where id=54; -update noar ti set v1='SB1RJLVZA09KX532JNTE5APJUTZU94BR7' where id=54; -update noar tt set v2='SH4NIS1WYNR6W7650I4CMS4WA3EE6EJ06' where id=54; -update noar ti set v2='SH4NIS1WYNR6W7650I4CMS4WA3EE6EJ06' where id=54; -update noar tt set v3='6M8ZNTNUYGYE8K0GPZCAGMIBB9GODDJ3T' where id=54; -update noar ti set v3='6M8ZNTNUYGYE8K0GPZCAGMIBB9GODDJ3T' where id=54; -update noar tt set v0='W7DSNS4NZ9283GJVVA48PWEYB8028KQ2B' where id=55; -update noar ti set v0='W7DSNS4NZ9283GJVVA48PWEYB8028KQ2B' where id=55; -update noar tt set v1='7W0NBJABATJMK0GRD5UMY5GUBFJYKHSOS' where id=55; -update noar ti set v1='7W0NBJABATJMK0GRD5UMY5GUBFJYKHSOS' where id=55; -update noar tt set v2='57EMBWTTQSRQI2JK20H8MNHYE0KS7K5MA' where id=55; -update noar ti set v2='57EMBWTTQSRQI2JK20H8MNHYE0KS7K5MA' where id=55; -update noar tt set v3='Y9PMVRMXLN1H6H2ZSL6S8VQYO3XMXOIZC' where id=55; -update noar ti set v3='Y9PMVRMXLN1H6H2ZSL6S8VQYO3XMXOIZC' where id=55; -update noar tt set v0='QUZ7ABM7U20FX9JU87HPJ45TE9R48DMDI' where id=56; -update noar ti set v0='QUZ7ABM7U20FX9JU87HPJ45TE9R48DMDI' where id=56; -update noar tt set v1='Q53CBPGSPVA4AUL0BOF9RU6XOH3OBYBXX' where id=56; -update noar ti set v1='Q53CBPGSPVA4AUL0BOF9RU6XOH3OBYBXX' where id=56; -update noar tt set v2='XI61XGI3OR56KT9GIRRC3CM0IIMNPPTGK' where id=56; -update noar ti set v2='XI61XGI3OR56KT9GIRRC3CM0IIMNPPTGK' where id=56; -update noar tt set v3='I6YYC6B0ZE88SRV7CQ138T0YASK9VS9C9' where id=56; -update noar ti set v3='I6YYC6B0ZE88SRV7CQ138T0YASK9VS9C9' where id=56; -update noar tt set v0='7K4KWB5KJQ0FNMMDFA3PAU7XSQ8LDQA7Z' where id=57; -update noar ti set v0='7K4KWB5KJQ0FNMMDFA3PAU7XSQ8LDQA7Z' where id=57; -update noar tt set v1='T7TM731845GEWLY5D0YTCFZL8E8TY5IS0' where id=57; -update noar ti set v1='T7TM731845GEWLY5D0YTCFZL8E8TY5IS0' where id=57; -update noar tt set v2='PAD1A0MOKVUAWOVCRU12QPQZL54L58MHM' where id=57; -update noar ti set v2='PAD1A0MOKVUAWOVCRU12QPQZL54L58MHM' where id=57; -update noar tt set v3='LF7RYQN7OR38JKDHM5MHLS3AKYPO5IKTC' where id=57; -update noar ti set v3='LF7RYQN7OR38JKDHM5MHLS3AKYPO5IKTC' where id=57; -update noar tt set v0='HPR7W84PVJXJ6GQFULKCJ9CJOZEFQ0BGF' where id=58; -update noar ti set v0='HPR7W84PVJXJ6GQFULKCJ9CJOZEFQ0BGF' where id=58; -update noar tt set v1='CITNSMY4DF1631N6T90S3SNEHFNTD4R27' where id=58; -update noar ti set v1='CITNSMY4DF1631N6T90S3SNEHFNTD4R27' where id=58; -update noar tt set v2='ZHZ3JRPT1ZDOFCH6W3B5WRD0Q31KHNK9X' where id=58; -update noar ti set v2='ZHZ3JRPT1ZDOFCH6W3B5WRD0Q31KHNK9X' where id=58; -update noar tt set v3='70B5U9N677URBUQM0USYHRFBPLPD67IQX' where id=58; -update noar ti set v3='70B5U9N677URBUQM0USYHRFBPLPD67IQX' where id=58; -update noar tt set v0='LA58EWWSB68PRT1LJJB98AH1PXGNTRC06' where id=59; -update noar ti set v0='LA58EWWSB68PRT1LJJB98AH1PXGNTRC06' where id=59; -update noar tt set v1='AP637AEY7NGUISPC3KD29OZ1O0G75CR4K' where id=59; -update noar ti set v1='AP637AEY7NGUISPC3KD29OZ1O0G75CR4K' where id=59; -update noar tt set v2='3EE7QBNM4DYRH3Q74JHVYQIKTI9AWAIK4' where id=59; -update noar ti set v2='3EE7QBNM4DYRH3Q74JHVYQIKTI9AWAIK4' where id=59; -update noar tt set v3='OAZ7WEOSWUYAYE479F9LD22KB2RE9MLTR' where id=59; -update noar ti set v3='OAZ7WEOSWUYAYE479F9LD22KB2RE9MLTR' where id=59; -update noar tt set v0='1IQOOZMRYNK70DX2TP46IJ5UUGK495Y1I' where id=60; -update noar ti set v0='1IQOOZMRYNK70DX2TP46IJ5UUGK495Y1I' where id=60; -update noar tt set v1='DQUK6ERL0VW5VMRVFWS248Y276ZPBMGQE' where id=60; -update noar ti set v1='DQUK6ERL0VW5VMRVFWS248Y276ZPBMGQE' where id=60; -update noar tt set v2='4ZJBYP0QD2WUBRB4NG9C57IF9GQMCZ38A' where id=60; -update noar ti set v2='4ZJBYP0QD2WUBRB4NG9C57IF9GQMCZ38A' where id=60; -update noar tt set v3='D5IYVYR9W7A6ZE3C5JW18GTMV7CB0BEWK' where id=60; -update noar ti set v3='D5IYVYR9W7A6ZE3C5JW18GTMV7CB0BEWK' where id=60; -update noar tt set v0='R6703LWXKEUK76X1YQEZOYWMTMO8QDVI9' where id=61; -update noar ti set v0='R6703LWXKEUK76X1YQEZOYWMTMO8QDVI9' where id=61; -update noar tt set v1='BQKLJYJMXRCQZINREU6BFYUT0QNZU3Z41' where id=61; -update noar ti set v1='BQKLJYJMXRCQZINREU6BFYUT0QNZU3Z41' where id=61; -update noar tt set v2='3B4WTYG204536B6U6LSAEQWJSMTILWQGH' where id=61; -update noar ti set v2='3B4WTYG204536B6U6LSAEQWJSMTILWQGH' where id=61; -update noar tt set v3='HEE35D4CB62BMEIB7WAKFZUONQKSLDWU6' where id=61; -update noar ti set v3='HEE35D4CB62BMEIB7WAKFZUONQKSLDWU6' where id=61; -update noar tt set v0='TJGMRDOJZKJX3BQY0ROVK9MW6KKHXMAFF' where id=62; -update noar ti set v0='TJGMRDOJZKJX3BQY0ROVK9MW6KKHXMAFF' where id=62; -update noar tt set v1='T4KXHC3H3HWBCG1S8QP9ET8VT9ZHLTBKO' where id=62; -update noar ti set v1='T4KXHC3H3HWBCG1S8QP9ET8VT9ZHLTBKO' where id=62; -update noar tt set v2='WGR6RZ9YVEEFV7GCKDBK5J6I47U1E1QAE' where id=62; -update noar ti set v2='WGR6RZ9YVEEFV7GCKDBK5J6I47U1E1QAE' where id=62; -update noar tt set v3='9QFS45BXHQ5GFEIYLN0B4ZR9ZDSUQ95H8' where id=62; -update noar ti set v3='9QFS45BXHQ5GFEIYLN0B4ZR9ZDSUQ95H8' where id=62; -update noar tt set v0='C0LB0552ZAI7DB3QKO10LWBGEXEOEACAB' where id=63; -update noar ti set v0='C0LB0552ZAI7DB3QKO10LWBGEXEOEACAB' where id=63; -update noar tt set v1='VKXX45AKTKLFOCWJZT683TDRWSLH2BJRA' where id=63; -update noar ti set v1='VKXX45AKTKLFOCWJZT683TDRWSLH2BJRA' where id=63; -update noar tt set v2='9T26MXOSVWZ744I7OC2PH13TERW1GHN0K' where id=63; -update noar ti set v2='9T26MXOSVWZ744I7OC2PH13TERW1GHN0K' where id=63; -update noar tt set v3='YHWLHXQRM5CXAKOFMIO7HPT0HDUIHQQ91' where id=63; -update noar ti set v3='YHWLHXQRM5CXAKOFMIO7HPT0HDUIHQQ91' where id=63; -update noar tt set v0='L7QNRDGTFGY21MVR5N9IH1NNUS1C2T9U2' where id=64; -update noar ti set v0='L7QNRDGTFGY21MVR5N9IH1NNUS1C2T9U2' where id=64; -update noar tt set v1='6PBQ0LHXJAYIYEKFJ04WZU6RXBRD86F90' where id=64; -update noar ti set v1='6PBQ0LHXJAYIYEKFJ04WZU6RXBRD86F90' where id=64; -update noar tt set v2='EE4MO8VSMDYTXV6LW58KYTNQTRDCHM8BQ' where id=64; -update noar ti set v2='EE4MO8VSMDYTXV6LW58KYTNQTRDCHM8BQ' where id=64; -update noar tt set v3='EAFFHWK6ZSAS83ZTT5I9VWGK0S568Y5NI' where id=64; -update noar ti set v3='EAFFHWK6ZSAS83ZTT5I9VWGK0S568Y5NI' where id=64; -update noar tt set v0='FY6BMD1JXRRLTDHVD0LJ5856CYRG1U80Q' where id=65; -update noar ti set v0='FY6BMD1JXRRLTDHVD0LJ5856CYRG1U80Q' where id=65; -update noar tt set v1='2VKZFS4O1NTHB9XFQL97OLY42WXHKG2B8' where id=65; -update noar ti set v1='2VKZFS4O1NTHB9XFQL97OLY42WXHKG2B8' where id=65; -update noar tt set v2='5ZN2JQDSGF0P8K6NOD7L1CNU4FAZDIAUL' where id=65; -update noar ti set v2='5ZN2JQDSGF0P8K6NOD7L1CNU4FAZDIAUL' where id=65; -update noar tt set v3='5G0LZLLYOZ7UZ5M93TWZEYMUVQF6G1SZH' where id=65; -update noar ti set v3='5G0LZLLYOZ7UZ5M93TWZEYMUVQF6G1SZH' where id=65; -update noar tt set v0='57NOVDL3B0S7PWQMPL07DONGGI9JRW3BP' where id=66; -update noar ti set v0='57NOVDL3B0S7PWQMPL07DONGGI9JRW3BP' where id=66; -update noar tt set v1='LO6VROUBXYCVZ4ISQM3L470ZUOMLHWT14' where id=66; -update noar ti set v1='LO6VROUBXYCVZ4ISQM3L470ZUOMLHWT14' where id=66; -update noar tt set v2='YUJ6RUU9EN9LQTZFOA1WW49B4QSD4BINX' where id=66; -update noar ti set v2='YUJ6RUU9EN9LQTZFOA1WW49B4QSD4BINX' where id=66; -update noar tt set v3='CB93SCQNUAHESR1BECFL62QHUPBRV0O7S' where id=66; -update noar ti set v3='CB93SCQNUAHESR1BECFL62QHUPBRV0O7S' where id=66; -update noar tt set v0='NJ1T120GMHCEO75BWMHFRJLMM3TOU025C' where id=67; -update noar ti set v0='NJ1T120GMHCEO75BWMHFRJLMM3TOU025C' where id=67; -update noar tt set v1='6RJI6M9VCLG1AXRIRCS9YA3XLIQWQPVV1' where id=67; -update noar ti set v1='6RJI6M9VCLG1AXRIRCS9YA3XLIQWQPVV1' where id=67; -update noar tt set v2='IRDGWKGAVDAAA3YKGU6E9ET4D1GZF608S' where id=67; -update noar ti set v2='IRDGWKGAVDAAA3YKGU6E9ET4D1GZF608S' where id=67; -update noar tt set v3='MJJKZ5RBV3FH79U4AB0SRROCXUEVD0LHR' where id=67; -update noar ti set v3='MJJKZ5RBV3FH79U4AB0SRROCXUEVD0LHR' where id=67; -update noar tt set v0='2C7JFI6EB3RL5Q4TY04BH8KPWS3TMZS2Z' where id=68; -update noar ti set v0='2C7JFI6EB3RL5Q4TY04BH8KPWS3TMZS2Z' where id=68; -update noar tt set v1='0HJU1QT9FFPRZUYMKKC0RMV2GPDTTRMUQ' where id=68; -update noar ti set v1='0HJU1QT9FFPRZUYMKKC0RMV2GPDTTRMUQ' where id=68; -update noar tt set v2='E1BKSMZR2DO79KIRCFIRE716ENZRRNI13' where id=68; -update noar ti set v2='E1BKSMZR2DO79KIRCFIRE716ENZRRNI13' where id=68; -update noar tt set v3='KFNMOZNA542NFSTZKRNV7Z4HQVO7NE860' where id=68; -update noar ti set v3='KFNMOZNA542NFSTZKRNV7Z4HQVO7NE860' where id=68; -update noar tt set v0='EWBUXHHDFYK8FGJL0MDB5IZB3SMXJ3VGY' where id=69; -update noar ti set v0='EWBUXHHDFYK8FGJL0MDB5IZB3SMXJ3VGY' where id=69; -update noar tt set v1='POKHSEI10ZP9LN7L94W206670DWWZK70W' where id=69; -update noar ti set v1='POKHSEI10ZP9LN7L94W206670DWWZK70W' where id=69; -update noar tt set v2='SWLF1ZB3XVDZM7G93X1LTTDXWPS6OCLFX' where id=69; -update noar ti set v2='SWLF1ZB3XVDZM7G93X1LTTDXWPS6OCLFX' where id=69; -update noar tt set v3='I232ZNA93R4SOW2EAPO734L1QRPCAQCYI' where id=69; -update noar ti set v3='I232ZNA93R4SOW2EAPO734L1QRPCAQCYI' where id=69; -update noar tt set v0='OZ6JA65Y43HPC54YDS9E7FNJBAH8EO3AV' where id=70; -update noar ti set v0='OZ6JA65Y43HPC54YDS9E7FNJBAH8EO3AV' where id=70; -update noar tt set v1='MGGNV6P04LUF60VJX3PVO1I9JOFSMOVGH' where id=70; -update noar ti set v1='MGGNV6P04LUF60VJX3PVO1I9JOFSMOVGH' where id=70; -update noar tt set v2='JNH9IVRXE84XL76VIDWEVLRCP5427NSUT' where id=70; -update noar ti set v2='JNH9IVRXE84XL76VIDWEVLRCP5427NSUT' where id=70; -update noar tt set v3='JS565B251FRNHUJDRIEKY0Y6V74R3XMNZ' where id=70; -update noar ti set v3='JS565B251FRNHUJDRIEKY0Y6V74R3XMNZ' where id=70; -update noar tt set v0='AGRS4ON84TBQBQ252OIMBHO6GLO15CIFV' where id=71; -update noar ti set v0='AGRS4ON84TBQBQ252OIMBHO6GLO15CIFV' where id=71; -update noar tt set v1='GHY1CEEZP7X211JNGEK2D643TQM16C380' where id=71; -update noar ti set v1='GHY1CEEZP7X211JNGEK2D643TQM16C380' where id=71; -update noar tt set v2='Y16YKA3RQ37SRX6UDPTKS1WW8IQ4YYQE5' where id=71; -update noar ti set v2='Y16YKA3RQ37SRX6UDPTKS1WW8IQ4YYQE5' where id=71; -update noar tt set v3='2VELPY70X6ZXB63NDTJ2YXBZMPRWVZSQO' where id=71; -update noar ti set v3='2VELPY70X6ZXB63NDTJ2YXBZMPRWVZSQO' where id=71; -update noar tt set v0='CMXQ08AY4COWXOQ4OOW5NFI6A4Y9SPLY1' where id=72; -update noar ti set v0='CMXQ08AY4COWXOQ4OOW5NFI6A4Y9SPLY1' where id=72; -update noar tt set v1='LE98GR5C69TYWOE6VU6X2DZ93YKTTYVGB' where id=72; -update noar ti set v1='LE98GR5C69TYWOE6VU6X2DZ93YKTTYVGB' where id=72; -update noar tt set v2='QLC63V609RJQ81M2HG2EFOPBZOLNWOXEE' where id=72; -update noar ti set v2='QLC63V609RJQ81M2HG2EFOPBZOLNWOXEE' where id=72; -update noar tt set v3='UQ0RBLIPP76MIWAECE7DTOLLB9LLSZRTW' where id=72; -update noar ti set v3='UQ0RBLIPP76MIWAECE7DTOLLB9LLSZRTW' where id=72; -update noar tt set v0='X1IJ1WYMEDBI4MQMEIFF1RE3OWIMC29MQ' where id=73; -update noar ti set v0='X1IJ1WYMEDBI4MQMEIFF1RE3OWIMC29MQ' where id=73; -update noar tt set v1='Y3V894ZKYOPPIPP6S9XSE95O384NL5F81' where id=73; -update noar ti set v1='Y3V894ZKYOPPIPP6S9XSE95O384NL5F81' where id=73; -update noar tt set v2='FAHE9Z45MIV12DAZT6DGL24T6CSZJMUZH' where id=73; -update noar ti set v2='FAHE9Z45MIV12DAZT6DGL24T6CSZJMUZH' where id=73; -update noar tt set v3='99T42KM7M72CS46SDEFJ5P0GZBU6KIAZ6' where id=73; -update noar ti set v3='99T42KM7M72CS46SDEFJ5P0GZBU6KIAZ6' where id=73; -update noar tt set v0='WBOWI0CEW7B9LI5PDLJC8FIYLKJJ6SH18' where id=74; -update noar ti set v0='WBOWI0CEW7B9LI5PDLJC8FIYLKJJ6SH18' where id=74; -update noar tt set v1='LSYOJO1Q2V8GPXYCXJA77ZPUF1JL6515N' where id=74; -update noar ti set v1='LSYOJO1Q2V8GPXYCXJA77ZPUF1JL6515N' where id=74; -update noar tt set v2='O5CUZUT5IYTS1JB86QX8CRZR6ZKF8KCPO' where id=74; -update noar ti set v2='O5CUZUT5IYTS1JB86QX8CRZR6ZKF8KCPO' where id=74; -update noar tt set v3='HSBWA8KJVH7NMXG8TXWHMPTM153K1803M' where id=74; -update noar ti set v3='HSBWA8KJVH7NMXG8TXWHMPTM153K1803M' where id=74; -update noar tt set v0='P1AKA9RXMQUPJ8UH4YSF2ZZMM4KI3KLOI' where id=75; -update noar ti set v0='P1AKA9RXMQUPJ8UH4YSF2ZZMM4KI3KLOI' where id=75; -update noar tt set v1='9BLOFZIHZMD70OKANU3ZT3QUDDP2Z3HK2' where id=75; -update noar ti set v1='9BLOFZIHZMD70OKANU3ZT3QUDDP2Z3HK2' where id=75; -update noar tt set v2='YLAZUKU8YIKPQU31M87L2MF6HSBNRFGSX' where id=75; -update noar ti set v2='YLAZUKU8YIKPQU31M87L2MF6HSBNRFGSX' where id=75; -update noar tt set v3='F98NSPC5CA6PWNYZBC606V28D1GC2NLII' where id=75; -update noar ti set v3='F98NSPC5CA6PWNYZBC606V28D1GC2NLII' where id=75; -update noar tt set v0='T98JPNLVHF2P083KV6N7YKE5FCA670P1H' where id=76; -update noar ti set v0='T98JPNLVHF2P083KV6N7YKE5FCA670P1H' where id=76; -update noar tt set v1='AZ975CNB0C9FLI9A0L6R7R4H0J0A1K458' where id=76; -update noar ti set v1='AZ975CNB0C9FLI9A0L6R7R4H0J0A1K458' where id=76; -update noar tt set v2='3N2LLW7WS9ZZ6HZBOKWVHMPQWUF1CC4X0' where id=76; -update noar ti set v2='3N2LLW7WS9ZZ6HZBOKWVHMPQWUF1CC4X0' where id=76; -update noar tt set v3='73VCJOOT0IQARR6DZET8UHYMHVY2Z6JJ4' where id=76; -update noar ti set v3='73VCJOOT0IQARR6DZET8UHYMHVY2Z6JJ4' where id=76; -update noar tt set v0='XXB3IJHCAMI97ZQ2ZACHFBGFEXB0CAUSE' where id=77; -update noar ti set v0='XXB3IJHCAMI97ZQ2ZACHFBGFEXB0CAUSE' where id=77; -update noar tt set v1='21KPBI7SBPI14NKO0C7QUBBCGXK7ZKOTZ' where id=77; -update noar ti set v1='21KPBI7SBPI14NKO0C7QUBBCGXK7ZKOTZ' where id=77; -update noar tt set v2='URLPIFRVYNAMYCRX7LLKQ5MT7FJFPB7WH' where id=77; -update noar ti set v2='URLPIFRVYNAMYCRX7LLKQ5MT7FJFPB7WH' where id=77; -update noar tt set v3='YOP561AH87AQJF4L8SVF96A1B1ND7V314' where id=77; -update noar ti set v3='YOP561AH87AQJF4L8SVF96A1B1ND7V314' where id=77; -update noar tt set v0='ZBFERG4QNM083VQODBXEXH762ZJSWKL92' where id=78; -update noar ti set v0='ZBFERG4QNM083VQODBXEXH762ZJSWKL92' where id=78; -update noar tt set v1='VQR847OOUIBLXNCD0DDC6R8AUNRB76O91' where id=78; -update noar ti set v1='VQR847OOUIBLXNCD0DDC6R8AUNRB76O91' where id=78; -update noar tt set v2='ZE40D1M8DAENTUXGQ2MQDFMQZA6O1CVO2' where id=78; -update noar ti set v2='ZE40D1M8DAENTUXGQ2MQDFMQZA6O1CVO2' where id=78; -update noar tt set v3='7ZGDF7C47NSDM34BH21FVRF21KPWPLPYK' where id=78; -update noar ti set v3='7ZGDF7C47NSDM34BH21FVRF21KPWPLPYK' where id=78; -update noar tt set v0='4SGF3DQGFXV1CGDG5ANXXO47UY17Y11W8' where id=79; -update noar ti set v0='4SGF3DQGFXV1CGDG5ANXXO47UY17Y11W8' where id=79; -update noar tt set v1='K5O85JPF9UH5A8G7MHIZW96EUU9A4CFA1' where id=79; -update noar ti set v1='K5O85JPF9UH5A8G7MHIZW96EUU9A4CFA1' where id=79; -update noar tt set v2='9TBJKUOURFRTJRNJUD5V9MHDXRNUMR1LT' where id=79; -update noar ti set v2='9TBJKUOURFRTJRNJUD5V9MHDXRNUMR1LT' where id=79; -update noar tt set v3='QJWTFODVSDM8EO6UHJ5KPGLX369ODALZN' where id=79; -update noar ti set v3='QJWTFODVSDM8EO6UHJ5KPGLX369ODALZN' where id=79; -update noar tt set v0='VLAJ4S98D5U7C43CB5FUM00SD288XO8RV' where id=80; -update noar ti set v0='VLAJ4S98D5U7C43CB5FUM00SD288XO8RV' where id=80; -update noar tt set v1='13QFF0874RF6M24B64V4OETJGOLOV17E4' where id=80; -update noar ti set v1='13QFF0874RF6M24B64V4OETJGOLOV17E4' where id=80; -update noar tt set v2='X7SUAGLHK4B0KQFHL7XIR783SIXBV4QN5' where id=80; -update noar ti set v2='X7SUAGLHK4B0KQFHL7XIR783SIXBV4QN5' where id=80; -update noar tt set v3='R72XWALF9KDJO3WXK8I6WCH34N9G4ZA8O' where id=80; -update noar ti set v3='R72XWALF9KDJO3WXK8I6WCH34N9G4ZA8O' where id=80; -update noar tt set v0='KTEFFO96XY7KY2IBL894XBPXAZWXAYFL1' where id=81; -update noar ti set v0='KTEFFO96XY7KY2IBL894XBPXAZWXAYFL1' where id=81; -update noar tt set v1='IWSED1A5WIPWZ3NFHEX8410M80SS29MPC' where id=81; -update noar ti set v1='IWSED1A5WIPWZ3NFHEX8410M80SS29MPC' where id=81; -update noar tt set v2='JITMLM0KGDD1MPIOYZD4SEYYDY8O0IPZL' where id=81; -update noar ti set v2='JITMLM0KGDD1MPIOYZD4SEYYDY8O0IPZL' where id=81; -update noar tt set v3='FWGVBCKX4QOL485DJBQVL466IATPH0J0S' where id=81; -update noar ti set v3='FWGVBCKX4QOL485DJBQVL466IATPH0J0S' where id=81; -update noar tt set v0='DTNA7INNCJNI3P0AYIVAPISMBYR9RMLV5' where id=82; -update noar ti set v0='DTNA7INNCJNI3P0AYIVAPISMBYR9RMLV5' where id=82; -update noar tt set v1='NNMSJ97H4ZSXEKZKXSXAPPHD4GUNE7OG4' where id=82; -update noar ti set v1='NNMSJ97H4ZSXEKZKXSXAPPHD4GUNE7OG4' where id=82; -update noar tt set v2='XQMMZ8E3GDICMQ1E5J5RXE8SX78M1XG7L' where id=82; -update noar ti set v2='XQMMZ8E3GDICMQ1E5J5RXE8SX78M1XG7L' where id=82; -update noar tt set v3='68H0B83BFFWEMG7YZHW2EFCQERQVWGNVK' where id=82; -update noar ti set v3='68H0B83BFFWEMG7YZHW2EFCQERQVWGNVK' where id=82; -update noar tt set v0='QMO9TTFMPJ4TO73LPFBJ3AC0DEKYAB0ET' where id=83; -update noar ti set v0='QMO9TTFMPJ4TO73LPFBJ3AC0DEKYAB0ET' where id=83; -update noar tt set v1='5VQTX3YJCEFUF1FG4XWJWLJ14TFZJJXIR' where id=83; -update noar ti set v1='5VQTX3YJCEFUF1FG4XWJWLJ14TFZJJXIR' where id=83; -update noar tt set v2='RSYL7JADB2ZJCXLWISPT73N8WHTO6IW83' where id=83; -update noar ti set v2='RSYL7JADB2ZJCXLWISPT73N8WHTO6IW83' where id=83; -update noar tt set v3='ZVCSF05JJG04TIMWUVFE11IKK3L1JU7C5' where id=83; -update noar ti set v3='ZVCSF05JJG04TIMWUVFE11IKK3L1JU7C5' where id=83; -update noar tt set v0='ZW2OKFTERFEDTGDOSF7E2F92JEE0J5POQ' where id=84; -update noar ti set v0='ZW2OKFTERFEDTGDOSF7E2F92JEE0J5POQ' where id=84; -update noar tt set v1='XBDJM2ACN0I1MI2J313FEQB1424LR8EDE' where id=84; -update noar ti set v1='XBDJM2ACN0I1MI2J313FEQB1424LR8EDE' where id=84; -update noar tt set v2='2CB71ZX2DK3QV3GOQEM6Z51F9N2ZCZ8CQ' where id=84; -update noar ti set v2='2CB71ZX2DK3QV3GOQEM6Z51F9N2ZCZ8CQ' where id=84; -update noar tt set v3='H0H1PLEZZVC0O2NGJ1UKB4UX6WKG9WNO0' where id=84; -update noar ti set v3='H0H1PLEZZVC0O2NGJ1UKB4UX6WKG9WNO0' where id=84; -update noar tt set v0='CNCY1KPXQ2R9XGXW3358XVK0CPJ3KFBHZ' where id=85; -update noar ti set v0='CNCY1KPXQ2R9XGXW3358XVK0CPJ3KFBHZ' where id=85; -update noar tt set v1='P7EFQFDLO0O09Q9K4YTEUSN7UDXV9KSZJ' where id=85; -update noar ti set v1='P7EFQFDLO0O09Q9K4YTEUSN7UDXV9KSZJ' where id=85; -update noar tt set v2='5FDYDRQMZ5T60YZCE7DL8VADZ4Z5F23Z7' where id=85; -update noar ti set v2='5FDYDRQMZ5T60YZCE7DL8VADZ4Z5F23Z7' where id=85; -update noar tt set v3='45NI5UNX32OO7QWYN33WXNNQPTC14SJT3' where id=85; -update noar ti set v3='45NI5UNX32OO7QWYN33WXNNQPTC14SJT3' where id=85; -update noar tt set v0='AQEBZQBLDYRATIYRW2Q4VB9Z3QIXFHTMA' where id=86; -update noar ti set v0='AQEBZQBLDYRATIYRW2Q4VB9Z3QIXFHTMA' where id=86; -update noar tt set v1='G4DPWHM507DIR6LFHS6Z25OIL893V7RE0' where id=86; -update noar ti set v1='G4DPWHM507DIR6LFHS6Z25OIL893V7RE0' where id=86; -update noar tt set v2='BDHH5S388F9ALHJTSPK3728EY9PCYGIXL' where id=86; -update noar ti set v2='BDHH5S388F9ALHJTSPK3728EY9PCYGIXL' where id=86; -update noar tt set v3='269GE1YSO0A3ETDNC3839UHISZC5BEXUJ' where id=86; -update noar ti set v3='269GE1YSO0A3ETDNC3839UHISZC5BEXUJ' where id=86; -update noar tt set v0='9TVS7OAD7LITZBQUL99GKCYOZBCIQBPKQ' where id=87; -update noar ti set v0='9TVS7OAD7LITZBQUL99GKCYOZBCIQBPKQ' where id=87; -update noar tt set v1='7NDTE4RT66B9DUEKQE590QRVQSEEUBBLP' where id=87; -update noar ti set v1='7NDTE4RT66B9DUEKQE590QRVQSEEUBBLP' where id=87; -update noar tt set v2='75UU9H5MJ5LDBWHU5GQTJBSOGU4K0EW0I' where id=87; -update noar ti set v2='75UU9H5MJ5LDBWHU5GQTJBSOGU4K0EW0I' where id=87; -update noar tt set v3='2GTQTOQO0O7XIOV6CTGGV495DG1HZ9JRE' where id=87; -update noar ti set v3='2GTQTOQO0O7XIOV6CTGGV495DG1HZ9JRE' where id=87; -update noar tt set v0='BKBZD41ZXLAQ2Y7CJ8A9527P8I7PM4KFH' where id=88; -update noar ti set v0='BKBZD41ZXLAQ2Y7CJ8A9527P8I7PM4KFH' where id=88; -update noar tt set v1='PR6O564MYVY1V2T703CSCFPIDTT9Z7NXH' where id=88; -update noar ti set v1='PR6O564MYVY1V2T703CSCFPIDTT9Z7NXH' where id=88; -update noar tt set v2='XG59QG8DHXVGPONH4AMM85D5ZJG3MG1GT' where id=88; -update noar ti set v2='XG59QG8DHXVGPONH4AMM85D5ZJG3MG1GT' where id=88; -update noar tt set v3='E2PMCQJNBY0RIK7672MATBTLUB2CWW2FE' where id=88; -update noar ti set v3='E2PMCQJNBY0RIK7672MATBTLUB2CWW2FE' where id=88; -update noar tt set v0='ZI17RPYY2F1N7I9CH1K6VVXJJA0PQK0SF' where id=89; -update noar ti set v0='ZI17RPYY2F1N7I9CH1K6VVXJJA0PQK0SF' where id=89; -update noar tt set v1='62VI8M2LZKFMRHA2P3CNH8XMRDSUKLLPL' where id=89; -update noar ti set v1='62VI8M2LZKFMRHA2P3CNH8XMRDSUKLLPL' where id=89; -update noar tt set v2='5L98FNGZF9RSO2MY8V3AOXPTWH0W2856B' where id=89; -update noar ti set v2='5L98FNGZF9RSO2MY8V3AOXPTWH0W2856B' where id=89; -update noar tt set v3='60XB753EJQ1YGGQV083YB9K3T6RK5QDQZ' where id=89; -update noar ti set v3='60XB753EJQ1YGGQV083YB9K3T6RK5QDQZ' where id=89; -update noar tt set v0='3T7OPS6T17EEELNYMF5KQXCP6T85AAK2W' where id=90; -update noar ti set v0='3T7OPS6T17EEELNYMF5KQXCP6T85AAK2W' where id=90; -update noar tt set v1='51EGCPTYNNJ9H6H3JIJBRHA7M7Q5DLV6L' where id=90; -update noar ti set v1='51EGCPTYNNJ9H6H3JIJBRHA7M7Q5DLV6L' where id=90; -update noar tt set v2='1KO904YXC0NBCRART470WFCYNX9I8GRGG' where id=90; -update noar ti set v2='1KO904YXC0NBCRART470WFCYNX9I8GRGG' where id=90; -update noar tt set v3='HWJUBIFBUL5T8W0TXP0WGC0YSDU4F87QE' where id=90; -update noar ti set v3='HWJUBIFBUL5T8W0TXP0WGC0YSDU4F87QE' where id=90; -update noar tt set v0='MCX8VBA8SIEVZIKOSFUNEZWALPCVAHZA9' where id=91; -update noar ti set v0='MCX8VBA8SIEVZIKOSFUNEZWALPCVAHZA9' where id=91; -update noar tt set v1='HMHPSE5ZJX0EPY4AD0SONINHVO9U2KX9U' where id=91; -update noar ti set v1='HMHPSE5ZJX0EPY4AD0SONINHVO9U2KX9U' where id=91; -update noar tt set v2='U2NLR5IKGB4WV484HQX2U1274N42LR4HM' where id=91; -update noar ti set v2='U2NLR5IKGB4WV484HQX2U1274N42LR4HM' where id=91; -update noar tt set v3='E8Y7KYC1H57JSOZR5CW9V4I8M1OHTMS3Y' where id=91; -update noar ti set v3='E8Y7KYC1H57JSOZR5CW9V4I8M1OHTMS3Y' where id=91; -update noar tt set v0='MP24496CCZZZB1WF84X6UTK2ZYJ4Q4JRH' where id=92; -update noar ti set v0='MP24496CCZZZB1WF84X6UTK2ZYJ4Q4JRH' where id=92; -update noar tt set v1='632NX3QHU2LR265L3N8I0L5JRQ6ATNBDK' where id=92; -update noar ti set v1='632NX3QHU2LR265L3N8I0L5JRQ6ATNBDK' where id=92; -update noar tt set v2='ZUEOHXZ6I7PJG8CDKCYGC1P9KXOGXPAAL' where id=92; -update noar ti set v2='ZUEOHXZ6I7PJG8CDKCYGC1P9KXOGXPAAL' where id=92; -update noar tt set v3='V0CC2HHD0CKQH2LHNLT1YCD38CA3VBJON' where id=92; -update noar ti set v3='V0CC2HHD0CKQH2LHNLT1YCD38CA3VBJON' where id=92; -update noar tt set v0='CIJ08XBVT4N3QBASLZSRNMJX11L27VRTY' where id=93; -update noar ti set v0='CIJ08XBVT4N3QBASLZSRNMJX11L27VRTY' where id=93; -update noar tt set v1='ODHZY95OPJYEM1YM39CNXSO8TCJ3Q176X' where id=93; -update noar ti set v1='ODHZY95OPJYEM1YM39CNXSO8TCJ3Q176X' where id=93; -update noar tt set v2='QB6FDMHZA3DZYFFK7Y4Y536F6GMNWXCPG' where id=93; -update noar ti set v2='QB6FDMHZA3DZYFFK7Y4Y536F6GMNWXCPG' where id=93; -update noar tt set v3='IY18E8SKPI40SGJDA5O2PKMFKUH0S0250' where id=93; -update noar ti set v3='IY18E8SKPI40SGJDA5O2PKMFKUH0S0250' where id=93; -update noar tt set v0='7HRJGOIOH6M8R3MBABI3347U0NQJDTTZS' where id=94; -update noar ti set v0='7HRJGOIOH6M8R3MBABI3347U0NQJDTTZS' where id=94; -update noar tt set v1='587585VOKF9DAXK0I27DD895BDT8UJPLI' where id=94; -update noar ti set v1='587585VOKF9DAXK0I27DD895BDT8UJPLI' where id=94; -update noar tt set v2='P3NA23XVT8YE2CC1M1ANRQ66EMZUVIQBL' where id=94; -update noar ti set v2='P3NA23XVT8YE2CC1M1ANRQ66EMZUVIQBL' where id=94; -update noar tt set v3='N53W139ISAB8KUGVRX7X6Q9CI6KF637S3' where id=94; -update noar ti set v3='N53W139ISAB8KUGVRX7X6Q9CI6KF637S3' where id=94; -update noar tt set v0='72C7ANCIBV6PSIJLG1KXGGOV7AUHHK3T9' where id=95; -update noar ti set v0='72C7ANCIBV6PSIJLG1KXGGOV7AUHHK3T9' where id=95; -update noar tt set v1='LL2TPQYROSPE7WIDE1QRUL697CDK9KKKQ' where id=95; -update noar ti set v1='LL2TPQYROSPE7WIDE1QRUL697CDK9KKKQ' where id=95; -update noar tt set v2='A2HX1PJKNPXGS8Y7B1XQ2748EC70HVI5Z' where id=95; -update noar ti set v2='A2HX1PJKNPXGS8Y7B1XQ2748EC70HVI5Z' where id=95; -update noar tt set v3='20Y3TKYBJO9U3175JI59W7Y4XGGW2Z2D9' where id=95; -update noar ti set v3='20Y3TKYBJO9U3175JI59W7Y4XGGW2Z2D9' where id=95; -update noar tt set v0='154T5LUDKY2WSUB5YX5RQ6J735NDN7YP3' where id=96; -update noar ti set v0='154T5LUDKY2WSUB5YX5RQ6J735NDN7YP3' where id=96; -update noar tt set v1='ULYRIHE1QD9E4W4V1A9K0F5SE5HEX3ER5' where id=96; -update noar ti set v1='ULYRIHE1QD9E4W4V1A9K0F5SE5HEX3ER5' where id=96; -update noar tt set v2='1HKPI8WULN8PU2QBVA7IVQUIPXFXTVUCK' where id=96; -update noar ti set v2='1HKPI8WULN8PU2QBVA7IVQUIPXFXTVUCK' where id=96; -update noar tt set v3='IYGAZNVNCYEAI2OMZEJMVIODDF6FW9845' where id=96; -update noar ti set v3='IYGAZNVNCYEAI2OMZEJMVIODDF6FW9845' where id=96; -update noar tt set v0='4A38UMXJ8QCZARQMNLESLUKJ72ZU7ESQC' where id=97; -update noar ti set v0='4A38UMXJ8QCZARQMNLESLUKJ72ZU7ESQC' where id=97; -update noar tt set v1='PAR1XBCZFT852Q8NCIT9300018D1UTLFO' where id=97; -update noar ti set v1='PAR1XBCZFT852Q8NCIT9300018D1UTLFO' where id=97; -update noar tt set v2='TQWRBG455K6N8PA9KRQCAEW2D5UPF01JS' where id=97; -update noar ti set v2='TQWRBG455K6N8PA9KRQCAEW2D5UPF01JS' where id=97; -update noar tt set v3='QTKE9966ERUKBBTBFTT49UPWJJBMG9XIE' where id=97; -update noar ti set v3='QTKE9966ERUKBBTBFTT49UPWJJBMG9XIE' where id=97; -update noar tt set v0='6UUWGKGGVZFMJ2SZPZGT3M6FMCTAY0NEB' where id=98; -update noar ti set v0='6UUWGKGGVZFMJ2SZPZGT3M6FMCTAY0NEB' where id=98; -update noar tt set v1='1H449U44PIMOS2GKKWF48UJM4F5RE5QNO' where id=98; -update noar ti set v1='1H449U44PIMOS2GKKWF48UJM4F5RE5QNO' where id=98; -update noar tt set v2='1L0YUIQCJF1G7GICFNVCX5M8B6TCWRSC8' where id=98; -update noar ti set v2='1L0YUIQCJF1G7GICFNVCX5M8B6TCWRSC8' where id=98; -update noar tt set v3='5S4MH3ZHVWI7R51FW3G265C5YUOHSKRLY' where id=98; -update noar ti set v3='5S4MH3ZHVWI7R51FW3G265C5YUOHSKRLY' where id=98; -update noar tt set v0='0Z9GTT0CRTSIRMPF3FIP2GJI6LME72GCT' where id=99; -update noar ti set v0='0Z9GTT0CRTSIRMPF3FIP2GJI6LME72GCT' where id=99; -update noar tt set v1='0PVF9ONHD3QR6ROWWVIW86O4A85UX5INJ' where id=99; -update noar ti set v1='0PVF9ONHD3QR6ROWWVIW86O4A85UX5INJ' where id=99; -update noar tt set v2='O6DP7BSQ5HRF2GX4QOHHRYXMASKRRB5J3' where id=99; -update noar ti set v2='O6DP7BSQ5HRF2GX4QOHHRYXMASKRRB5J3' where id=99; -update noar tt set v3='I4NUTHC417X1WZOJT6P9NOBSQAWFOSXPK' where id=99; -update noar ti set v3='I4NUTHC417X1WZOJT6P9NOBSQAWFOSXPK' where id=99; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int null, - v0 varbinary(256) null, - v1 varbinary(256) null, - v2 varbinary(256) null, - v3 varbinary(256) null, - b0 text null -) engine=tokudb; -insert into tt (id) values (0); -insert into tt values (1,2,'a','b','c','d','e'); -insert into tt values (2,3,'','','','',''); -insert into tt values (3,4,'','','','',''); -insert into tt values (4,5,'','','','',''); -insert into tt values (5,6,'','','','',''); -insert into tt values (6,7,'','','','',''); -insert into tt values (7,8,'','','','',''); -insert into tt values (8,9,'','','','',''); -insert into tt values (9,10,'','','','',''); -insert into tt values (10,11,'','','','',''); -insert into tt values (11,12,'','','','',''); -insert into tt values (12,13,'','','','',''); -insert into tt values (13,14,'','','','',''); -insert into tt values (14,15,'','','','',''); -insert into tt values (15,16,'','','','',''); -insert into tt values (16,17,'','','','',''); -insert into tt values (17,18,'','','','',''); -insert into tt values (18,19,'','','','',''); -insert into tt values (19,20,'','','','',''); -insert into tt values (20,21,'','','','',''); -insert into tt values (21,22,'','','','',''); -insert into tt values (22,23,'','','','',''); -insert into tt values (23,24,'','','','',''); -insert into tt values (24,25,'','','','',''); -insert into tt values (25,26,'','','','',''); -insert into tt values (26,27,'','','','',''); -insert into tt values (27,28,'','','','',''); -insert into tt values (28,29,'','','','',''); -insert into tt values (29,30,'','','','',''); -insert into tt values (30,31,'','','','',''); -insert into tt values (31,32,'','','','',''); -insert into tt values (32,33,'','','','',''); -insert into tt values (33,34,'','','','',''); -insert into tt values (34,35,'','','','',''); -insert into tt values (35,36,'','','','',''); -insert into tt values (36,37,'','','','',''); -insert into tt values (37,38,'','','','',''); -insert into tt values (38,39,'','','','',''); -insert into tt values (39,40,'','','','',''); -insert into tt values (40,41,'','','','',''); -insert into tt values (41,42,'','','','',''); -insert into tt values (42,43,'','','','',''); -insert into tt values (43,44,'','','','',''); -insert into tt values (44,45,'','','','',''); -insert into tt values (45,46,'','','','',''); -insert into tt values (46,47,'','','','',''); -insert into tt values (47,48,'','','','',''); -insert into tt values (48,49,'','','','',''); -insert into tt values (49,50,'','','','',''); -insert into tt values (50,51,'','','','',''); -insert into tt values (51,52,'','','','',''); -insert into tt values (52,53,'','','','',''); -insert into tt values (53,54,'','','','',''); -insert into tt values (54,55,'','','','',''); -insert into tt values (55,56,'','','','',''); -insert into tt values (56,57,'','','','',''); -insert into tt values (57,58,'','','','',''); -insert into tt values (58,59,'','','','',''); -insert into tt values (59,60,'','','','',''); -insert into tt values (60,61,'','','','',''); -insert into tt values (61,62,'','','','',''); -insert into tt values (62,63,'','','','',''); -insert into tt values (63,64,'','','','',''); -insert into tt values (64,65,'','','','',''); -insert into tt values (65,66,'','','','',''); -insert into tt values (66,67,'','','','',''); -insert into tt values (67,68,'','','','',''); -insert into tt values (68,69,'','','','',''); -insert into tt values (69,70,'','','','',''); -insert into tt values (70,71,'','','','',''); -insert into tt values (71,72,'','','','',''); -insert into tt values (72,73,'','','','',''); -insert into tt values (73,74,'','','','',''); -insert into tt values (74,75,'','','','',''); -insert into tt values (75,76,'','','','',''); -insert into tt values (76,77,'','','','',''); -insert into tt values (77,78,'','','','',''); -insert into tt values (78,79,'','','','',''); -insert into tt values (79,80,'','','','',''); -insert into tt values (80,81,'','','','',''); -insert into tt values (81,82,'','','','',''); -insert into tt values (82,83,'','','','',''); -insert into tt values (83,84,'','','','',''); -insert into tt values (84,85,'','','','',''); -insert into tt values (85,86,'','','','',''); -insert into tt values (86,87,'','','','',''); -insert into tt values (87,88,'','','','',''); -insert into tt values (88,89,'','','','',''); -insert into tt values (89,90,'','','','',''); -insert into tt values (90,91,'','','','',''); -insert into tt values (91,92,'','','','',''); -insert into tt values (92,93,'','','','',''); -insert into tt values (93,94,'','','','',''); -insert into tt values (94,95,'','','','',''); -insert into tt values (95,96,'','','','',''); -insert into tt values (96,97,'','','','',''); -insert into tt values (97,98,'','','','',''); -insert into tt values (98,99,'','','','',''); -insert into tt values (99,100,'','','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='null this 0' where id=0; -update noar ti set v0='null this 0' where id=0; -update noar tt set v1='null is 1' where id=0; -update noar ti set v1='null is 1' where id=0; -update noar tt set v2='null a 2' where id=0; -update noar ti set v2='null a 2' where id=0; -update noar tt set v3='null test 3' where id=0; -update noar ti set v3='null test 3' where id=0; -update noar tt set v0='this 0' where id=1; -update noar ti set v0='this 0' where id=1; -update noar tt set v1='is 1' where id=1; -update noar ti set v1='is 1' where id=1; -update noar tt set v2='another 2' where id=1; -update noar ti set v2='another 2' where id=1; -update noar tt set v3='test 3' where id=1; -update noar ti set v3='test 3' where id=1; -update noar tt set v0='N5FUIPBLY8BCDFMOM9J59U0Z6ZV7IZ4E3EAR82XWC3AG45V57OCIGRMB3RV2U64D26F8M4220UOTUVAKCFNMNCNNAHJJ1203UCDOLEG6NDI1DKTKDP7L9TMA0F858TW5NITP19TN4QSBMILPWVDQA59KKMG4TW5IDJ2YXVC0L0XOE4LJ7UT764J6Y2RLZDBLD90HWBK9M3RFICD4U9KA6GVDVGWTXMNGUF1QQWBPEMFOWK5TFPP5RV1UDMLGCC3JC' where id=2; -update noar ti set v0='N5FUIPBLY8BCDFMOM9J59U0Z6ZV7IZ4E3EAR82XWC3AG45V57OCIGRMB3RV2U64D26F8M4220UOTUVAKCFNMNCNNAHJJ1203UCDOLEG6NDI1DKTKDP7L9TMA0F858TW5NITP19TN4QSBMILPWVDQA59KKMG4TW5IDJ2YXVC0L0XOE4LJ7UT764J6Y2RLZDBLD90HWBK9M3RFICD4U9KA6GVDVGWTXMNGUF1QQWBPEMFOWK5TFPP5RV1UDMLGCC3JC' where id=2; -update noar tt set v1='901NIKL85HV562NWKBJ0R1VA63AE1V5IIYMU33TGV3E43TZ2Z3B84JBQ94H1S4IL5KCZ0VVXMHB7Z5W8QMZYSJY9QFRK4AUR8LYOTCXV7SCLKR7713BT4QY7XND05IZQR6RMIFLN0NYOH2L27LVVZXBERLGX7PMM1RYNEUZIW5NKU5P2Q7WOOTEMZ2X0DB2CX2GN49W1Q10MUM2K8Y463OUPGDUY855FXT62EHAZXBAEAFTR7391OXTAPH0V9VG7M' where id=2; -update noar ti set v1='901NIKL85HV562NWKBJ0R1VA63AE1V5IIYMU33TGV3E43TZ2Z3B84JBQ94H1S4IL5KCZ0VVXMHB7Z5W8QMZYSJY9QFRK4AUR8LYOTCXV7SCLKR7713BT4QY7XND05IZQR6RMIFLN0NYOH2L27LVVZXBERLGX7PMM1RYNEUZIW5NKU5P2Q7WOOTEMZ2X0DB2CX2GN49W1Q10MUM2K8Y463OUPGDUY855FXT62EHAZXBAEAFTR7391OXTAPH0V9VG7M' where id=2; -update noar tt set v2='DYNBQU5XXFPMUXY54REGU5GW8914R17K9IJIRJ4UP153CJJMRXRVRHLO4FW4JZFTG9XOXF14RM7A7AX09NUSRPCVYXAAG5O111GJRTY2RHZBLKLVCUYNFW6SVOL64MHREY9BX26OUTR4W5UV984Z2F07MKR7A8CSEO0Q7JQUONZE1MSD61JV890OPAUPRGER1YQEGISCX2T1G2Q7YMFXY7GPVGFOJO2TGA0QR4OEXFBSAKVVJL2A3XWW1VJKB32BZ' where id=2; -update noar ti set v2='DYNBQU5XXFPMUXY54REGU5GW8914R17K9IJIRJ4UP153CJJMRXRVRHLO4FW4JZFTG9XOXF14RM7A7AX09NUSRPCVYXAAG5O111GJRTY2RHZBLKLVCUYNFW6SVOL64MHREY9BX26OUTR4W5UV984Z2F07MKR7A8CSEO0Q7JQUONZE1MSD61JV890OPAUPRGER1YQEGISCX2T1G2Q7YMFXY7GPVGFOJO2TGA0QR4OEXFBSAKVVJL2A3XWW1VJKB32BZ' where id=2; -update noar tt set v3='8TBDTM95ASERHO1JDMRTNWWG2FTGM6T7QA5F25XH4YOCLSUK4OS28CUIIYMB49ZG0UKEACZVPVXG81UOHDCTWTGTIVSSTFN5842WSAVD9EE1VHVKJ060YULWCIVSITOJGITMNF6PH6RA2SD2ZHIK1BSX1U2N7H12K8AMO53UMZI1UKNWFMG641Y0CU0154TC1AFBCUECOMF6USXRWQOIS5SZQ8MW065D0V49AIGS7IIR7JER26DDAVOZQ2LXPVT5L' where id=2; -update noar ti set v3='8TBDTM95ASERHO1JDMRTNWWG2FTGM6T7QA5F25XH4YOCLSUK4OS28CUIIYMB49ZG0UKEACZVPVXG81UOHDCTWTGTIVSSTFN5842WSAVD9EE1VHVKJ060YULWCIVSITOJGITMNF6PH6RA2SD2ZHIK1BSX1U2N7H12K8AMO53UMZI1UKNWFMG641Y0CU0154TC1AFBCUECOMF6USXRWQOIS5SZQ8MW065D0V49AIGS7IIR7JER26DDAVOZQ2LXPVT5L' where id=2; -update noar tt set v0='8OEJETZB0O1XZV5WUHM31U4H9M88EH6295AS05MXZZ6AD6OKBLSZP0V15I5ZWS503YPMZ479IU0J9BKYVI78SU01J20M4NXG863M0ITMD3SEGE9XUECDWL08LA8BVBZMQ87ZEG8A07OT0ZNVQ2JTJSFMXXLU3BTKRT8H5I2FM6QSQTUR99VXEEOZ8ZXQKHI7KAZPW88U644RB7CW64E8CGCN6GCZUTKV6V8XFWSYAUJVX0S2HLZJL3SUHCKJ0E3F4' where id=3; -update noar ti set v0='8OEJETZB0O1XZV5WUHM31U4H9M88EH6295AS05MXZZ6AD6OKBLSZP0V15I5ZWS503YPMZ479IU0J9BKYVI78SU01J20M4NXG863M0ITMD3SEGE9XUECDWL08LA8BVBZMQ87ZEG8A07OT0ZNVQ2JTJSFMXXLU3BTKRT8H5I2FM6QSQTUR99VXEEOZ8ZXQKHI7KAZPW88U644RB7CW64E8CGCN6GCZUTKV6V8XFWSYAUJVX0S2HLZJL3SUHCKJ0E3F4' where id=3; -update noar tt set v1='WZBXEEGO5NPB68OJ5NGUZY5OS3WAO0I8IKCT96KCD47A5ZLQYMAGTOHINCTRTCMMTF5Z9O7IB2B66R39HTC5ZWIC9RL05TNQE22N91XZAA0CQVCVO8J5I8JEYI0VSOGANNTGHCTZYURX8EPYE7TDTIQNHMQ28DHOFAY81GD82BLPGWV17PH0A1736URXSUO1KUQYZ8PSK6CRGV248VL49PR6IBU3ZYV1QQCMLU5EYXV6YPYZVJLNVND895YJOVEM5' where id=3; -update noar ti set v1='WZBXEEGO5NPB68OJ5NGUZY5OS3WAO0I8IKCT96KCD47A5ZLQYMAGTOHINCTRTCMMTF5Z9O7IB2B66R39HTC5ZWIC9RL05TNQE22N91XZAA0CQVCVO8J5I8JEYI0VSOGANNTGHCTZYURX8EPYE7TDTIQNHMQ28DHOFAY81GD82BLPGWV17PH0A1736URXSUO1KUQYZ8PSK6CRGV248VL49PR6IBU3ZYV1QQCMLU5EYXV6YPYZVJLNVND895YJOVEM5' where id=3; -update noar tt set v2='Y1QARB3SQBDWJF18Y1QWIDSXUQ45Z6MF6CTM2J25D3LP8CWXK72X5KUGCTIVJD4A923UFSCJQBXM6OOACWEGB5RX03C9ZDK7ZNRVFO2I7CVSUQ1U36TZL6JLKJXCL060F4XUIE1PNVFO43TC5JBBT9PZPSVZRNNEOQ2UW3N8YFJ4VCFGU34L8SM33812TRKGOVFAOLPDZOSW25OP7X55H2WIHFRYLQU5ITCAY3R3H071E1QDY8B6JTTHVOHLI2IY5' where id=3; -update noar ti set v2='Y1QARB3SQBDWJF18Y1QWIDSXUQ45Z6MF6CTM2J25D3LP8CWXK72X5KUGCTIVJD4A923UFSCJQBXM6OOACWEGB5RX03C9ZDK7ZNRVFO2I7CVSUQ1U36TZL6JLKJXCL060F4XUIE1PNVFO43TC5JBBT9PZPSVZRNNEOQ2UW3N8YFJ4VCFGU34L8SM33812TRKGOVFAOLPDZOSW25OP7X55H2WIHFRYLQU5ITCAY3R3H071E1QDY8B6JTTHVOHLI2IY5' where id=3; -update noar tt set v3='LEERCIAX974R0MFZ27OLIYWQ1JMERYH9M8262B125Y9P2IY5WW2JU0L7Y3QIRJL1NGU7OIT8GUYAR6XFU98TSRMYPIA9JS95UC4CTZ8630DP8VG0GOJTHAUYVWXMPUZ3DOMVIWPLHVO12JCN6L9PBX3ZDKQVV589DW59GZOCKE7U30KB6VUEEP8WR2GIX1957JXN4WRMS8FZAXPBVNJIO9S540YOFNI54T02NB5SHDPDYOFZ3JHYUMEAQRR50MCOU' where id=3; -update noar ti set v3='LEERCIAX974R0MFZ27OLIYWQ1JMERYH9M8262B125Y9P2IY5WW2JU0L7Y3QIRJL1NGU7OIT8GUYAR6XFU98TSRMYPIA9JS95UC4CTZ8630DP8VG0GOJTHAUYVWXMPUZ3DOMVIWPLHVO12JCN6L9PBX3ZDKQVV589DW59GZOCKE7U30KB6VUEEP8WR2GIX1957JXN4WRMS8FZAXPBVNJIO9S540YOFNI54T02NB5SHDPDYOFZ3JHYUMEAQRR50MCOU' where id=3; -update noar tt set v0='S9VT28U398ANZH2CI6MXDBOBYVU9QSXW5QA3UQSF13GNJSTWKQXMBK56XG0779DRTVOKAFB2OQDPPQYND3BZ1YRIL5RFHD74WC0X9N16J6YEDKAECYWCAIMRS8Q8F2TLUT4NNR1A9HTN0745XVWZ9R37YBAJN3NBG1A60J13UKHI90B1TN3QUROSN6EEGPBUSG6FHNSKU5FLV2PJ767K7YSOL7N87ERAAVPM37DLWQE8I1Z0VUMXXQ2AV2KJB2262' where id=4; -update noar ti set v0='S9VT28U398ANZH2CI6MXDBOBYVU9QSXW5QA3UQSF13GNJSTWKQXMBK56XG0779DRTVOKAFB2OQDPPQYND3BZ1YRIL5RFHD74WC0X9N16J6YEDKAECYWCAIMRS8Q8F2TLUT4NNR1A9HTN0745XVWZ9R37YBAJN3NBG1A60J13UKHI90B1TN3QUROSN6EEGPBUSG6FHNSKU5FLV2PJ767K7YSOL7N87ERAAVPM37DLWQE8I1Z0VUMXXQ2AV2KJB2262' where id=4; -update noar tt set v1='C7VYDGWY3ZGGCLP58C786Z60L6LSRQ6AELPXVE4OI8PQ87SJL54KHLG6C0F25CP9B9BD8SLSBDKTILXBT4WHMW17NGKOTY2RMEIV0VMRDPUHFF912JFXEF8SIQ37B43A09M0N5YVI7LHRL3Z86ANIHKR4TNAADUAZJXMX5HMYYU43RDQ57FZP8U53UM6R37ODJ45WQD4O0PIZYIOSCT6ABOSN1J3ZOHAZ7QWD5K1PZEAV1WAX0HSGYW4Q5MVOAL51' where id=4; -update noar ti set v1='C7VYDGWY3ZGGCLP58C786Z60L6LSRQ6AELPXVE4OI8PQ87SJL54KHLG6C0F25CP9B9BD8SLSBDKTILXBT4WHMW17NGKOTY2RMEIV0VMRDPUHFF912JFXEF8SIQ37B43A09M0N5YVI7LHRL3Z86ANIHKR4TNAADUAZJXMX5HMYYU43RDQ57FZP8U53UM6R37ODJ45WQD4O0PIZYIOSCT6ABOSN1J3ZOHAZ7QWD5K1PZEAV1WAX0HSGYW4Q5MVOAL51' where id=4; -update noar tt set v2='WKSVQUTJKW2IQLDIY6WNKRHNO3UB3EVI0GFL0M1B1PCH83MDBN6K8F90NJX1YKESUPCLZM63WPCWK6KI5Y6Y2YA9B4PQ0ITG7OYG6JTQ8R4MCFFV56GNOZ2I0JJRF0VBKHK8J0AP4TN5VIKYWBRKSQ7WK9A2A9SWKIY0UH6RGU11YAE1JHXC19FLK23458VB7COHU51S5KTANQOL48VJUCC2H01CP9OVX24AR42FWFKAPT5K6RK6GJ4OHBKT1ZK5O' where id=4; -update noar ti set v2='WKSVQUTJKW2IQLDIY6WNKRHNO3UB3EVI0GFL0M1B1PCH83MDBN6K8F90NJX1YKESUPCLZM63WPCWK6KI5Y6Y2YA9B4PQ0ITG7OYG6JTQ8R4MCFFV56GNOZ2I0JJRF0VBKHK8J0AP4TN5VIKYWBRKSQ7WK9A2A9SWKIY0UH6RGU11YAE1JHXC19FLK23458VB7COHU51S5KTANQOL48VJUCC2H01CP9OVX24AR42FWFKAPT5K6RK6GJ4OHBKT1ZK5O' where id=4; -update noar tt set v3='C9TM839RNF1RPA5YGG7VXSPAKPRGTQ5HW6F7JBYD21IMVIWDT25DAK3OHLDBWYB5UKQKWHWGPXZBKCUBUR34GLL64UGL7407GBW40H2N9XCS232N8A2J86BVJ3OPOWGRKO3OVOVC78TOQA01UEGN8Q9OXTC6PWBHVWJJMS3KB11VO50GV37AP1WV61PXAQYV2VSKTCN7LZ8N9VJ581VFDZX1W2PKA7ZYPPZ85N5JEDTILKWOL8MY0KRFS2PM6JHTX' where id=4; -update noar ti set v3='C9TM839RNF1RPA5YGG7VXSPAKPRGTQ5HW6F7JBYD21IMVIWDT25DAK3OHLDBWYB5UKQKWHWGPXZBKCUBUR34GLL64UGL7407GBW40H2N9XCS232N8A2J86BVJ3OPOWGRKO3OVOVC78TOQA01UEGN8Q9OXTC6PWBHVWJJMS3KB11VO50GV37AP1WV61PXAQYV2VSKTCN7LZ8N9VJ581VFDZX1W2PKA7ZYPPZ85N5JEDTILKWOL8MY0KRFS2PM6JHTX' where id=4; -update noar tt set v0='31PUS63RQ5S5ZW9QG8THBZEAAVGZYCIAKR7VLLR380KVD83EFH93PTO2UHNSCSFPP3KW4Y9FERHM6V1AESB5571ZHFFEKYVT6UVLFLXG1XC5MOPYFBR8XO6MERKSUHIU1ISLOH6TFWJMRV4LVCA1NEVNH4TRS5PUL2UK7E8QO2ZLXYDBTYACGEWTM4OF1ZNTSJZ579D31IK6KWNVG5A772X95156KVGLH3O7UT3LLES80I94Z6XV6B7RCCPN2VRVF' where id=5; -update noar ti set v0='31PUS63RQ5S5ZW9QG8THBZEAAVGZYCIAKR7VLLR380KVD83EFH93PTO2UHNSCSFPP3KW4Y9FERHM6V1AESB5571ZHFFEKYVT6UVLFLXG1XC5MOPYFBR8XO6MERKSUHIU1ISLOH6TFWJMRV4LVCA1NEVNH4TRS5PUL2UK7E8QO2ZLXYDBTYACGEWTM4OF1ZNTSJZ579D31IK6KWNVG5A772X95156KVGLH3O7UT3LLES80I94Z6XV6B7RCCPN2VRVF' where id=5; -update noar tt set v1='VM0YC3FYONLYG5NSQ8B16T9A3ISBAV2E3JMW6YRUSJXQMRQ2RPQSSC5SZY3C41T0PNOXCJCXHT81UYH9062ICJOT6BZ01YU61E9E9A1S9Y5HDNR63WA4EN556EL7VIV72TKUXI8KWRRJFVESZ28ZJN8D07DFAENNM4BCE829X0EJZKDRWVYUWM9UHWMGWN4HT6TGOI3NADQTIVJSAFXMKQDIOZV9435J8PPMI9HT4PHL77Q3UT5JH9MP2068JG6QB' where id=5; -update noar ti set v1='VM0YC3FYONLYG5NSQ8B16T9A3ISBAV2E3JMW6YRUSJXQMRQ2RPQSSC5SZY3C41T0PNOXCJCXHT81UYH9062ICJOT6BZ01YU61E9E9A1S9Y5HDNR63WA4EN556EL7VIV72TKUXI8KWRRJFVESZ28ZJN8D07DFAENNM4BCE829X0EJZKDRWVYUWM9UHWMGWN4HT6TGOI3NADQTIVJSAFXMKQDIOZV9435J8PPMI9HT4PHL77Q3UT5JH9MP2068JG6QB' where id=5; -update noar tt set v2='I78PU8Z6D7ZW7VWZ02FYCD0QBPWX494OV8EMQYI8NCBYRV36R2XJ0INZBY9YSOB2FK4IS1JTIFB9IE4YIPK7GJYOI2E9OWL2WAF1D8LCVY8N66I4NEZMEI4IV1SCZ746XEBONETIUHRGSBQWBLP2JU346WDAQBM8XPBEOIMPG4F1Y1V70XDTYG6AYCJ0DYEW7DAVVI5WSDF3PYSIOLDWW32ASEI6W60XB4K0QNIG4EOXRU1W0POOK7HCNCX9YVX8J' where id=5; -update noar ti set v2='I78PU8Z6D7ZW7VWZ02FYCD0QBPWX494OV8EMQYI8NCBYRV36R2XJ0INZBY9YSOB2FK4IS1JTIFB9IE4YIPK7GJYOI2E9OWL2WAF1D8LCVY8N66I4NEZMEI4IV1SCZ746XEBONETIUHRGSBQWBLP2JU346WDAQBM8XPBEOIMPG4F1Y1V70XDTYG6AYCJ0DYEW7DAVVI5WSDF3PYSIOLDWW32ASEI6W60XB4K0QNIG4EOXRU1W0POOK7HCNCX9YVX8J' where id=5; -update noar tt set v3='SME5KIAA01MC7JD6W3FB8DNE0KEOQLYEX507LX97FMDWJXVQVHRXH212ZPYLGUK0Q173BXICG4SAVIHMJTC626LZ0ZDBTU67OZ07BDYQ06AQZYDTEYCPKJ5OSBYS8T24HEV588QNAHG9POS5P4YLM6TWJS5QZARX9HT0ZN1BHFHD217GNHKZAMZT1YGSPWTK2SN5H5SH4MYXB9K50MWFAVOXVEPRSN2I1DNX431E310L7HANNPUUQPZ12EB8FJQKT' where id=5; -update noar ti set v3='SME5KIAA01MC7JD6W3FB8DNE0KEOQLYEX507LX97FMDWJXVQVHRXH212ZPYLGUK0Q173BXICG4SAVIHMJTC626LZ0ZDBTU67OZ07BDYQ06AQZYDTEYCPKJ5OSBYS8T24HEV588QNAHG9POS5P4YLM6TWJS5QZARX9HT0ZN1BHFHD217GNHKZAMZT1YGSPWTK2SN5H5SH4MYXB9K50MWFAVOXVEPRSN2I1DNX431E310L7HANNPUUQPZ12EB8FJQKT' where id=5; -update noar tt set v0='IKNEE2VP508DUONR75XYV05NYCDLR6INHORDYCVT1HEMQB5CI9LYBFET2WW0WC2ZYFT8WXGTJEKAA3DG12UO1T9ODY6TSDJY776J0PDJM3D09W41TBDF2QPI2ULZBMLEDAV1D1QCI40SURTBIZLV5QNTV7YYU4B8B0BL6JC2MO43P8ZQBTPJYXITUFH31JKNK9KCP3JMVOQEBZQLG8DJP63DCC171HSW0NRDFBLUU92X43HPS3XC1HEB0KKH9ARPA' where id=6; -update noar ti set v0='IKNEE2VP508DUONR75XYV05NYCDLR6INHORDYCVT1HEMQB5CI9LYBFET2WW0WC2ZYFT8WXGTJEKAA3DG12UO1T9ODY6TSDJY776J0PDJM3D09W41TBDF2QPI2ULZBMLEDAV1D1QCI40SURTBIZLV5QNTV7YYU4B8B0BL6JC2MO43P8ZQBTPJYXITUFH31JKNK9KCP3JMVOQEBZQLG8DJP63DCC171HSW0NRDFBLUU92X43HPS3XC1HEB0KKH9ARPA' where id=6; -update noar tt set v1='R0JIE2RMDVAEH5DUX6YP6P1KAPA4YPMD5I66QWEJGTEWJSJ2TL53JGJIZMULYRMVSX3Q466GIUL66RMP1397MIM4VFEBHEPGA256N7ONQZZJRIWWPCN0RE0JCHBQ3B5TN2WVYJ19OINYFZEH8TYGLKI3SUBCU0VS2XE57AJYDVB2OXK8ABYWE5UYT6J8PXDUE66NAWNWYFAD2V57RKPMU7FFMC0KRXK60P46V563SZTOXV8YEQT2DHV426GII0976' where id=6; -update noar ti set v1='R0JIE2RMDVAEH5DUX6YP6P1KAPA4YPMD5I66QWEJGTEWJSJ2TL53JGJIZMULYRMVSX3Q466GIUL66RMP1397MIM4VFEBHEPGA256N7ONQZZJRIWWPCN0RE0JCHBQ3B5TN2WVYJ19OINYFZEH8TYGLKI3SUBCU0VS2XE57AJYDVB2OXK8ABYWE5UYT6J8PXDUE66NAWNWYFAD2V57RKPMU7FFMC0KRXK60P46V563SZTOXV8YEQT2DHV426GII0976' where id=6; -update noar tt set v2='G4QISPS494QVELSOJPRI0727J080Z3FNVUC5JOAE980O099E2XDDKBJWFF4Y6XL12TXJGVJ2YIZ8OMZN1IFDKRB2KI96GGBIGRQYI8DVLDZSAVGGT272NYCKWGHAVYU7QAM1H09Z1N5JJ0TZIQKNJ0QVTWABYMIADFLOLSE8YO5CPE1X3V01Y2MEE4COEO12NDROAY55V12YG236ZCLMWEZNIHGQ89NUZKJPPWHUR1GD6R0MDVNHMBBFMRVCQ6H3N' where id=6; -update noar ti set v2='G4QISPS494QVELSOJPRI0727J080Z3FNVUC5JOAE980O099E2XDDKBJWFF4Y6XL12TXJGVJ2YIZ8OMZN1IFDKRB2KI96GGBIGRQYI8DVLDZSAVGGT272NYCKWGHAVYU7QAM1H09Z1N5JJ0TZIQKNJ0QVTWABYMIADFLOLSE8YO5CPE1X3V01Y2MEE4COEO12NDROAY55V12YG236ZCLMWEZNIHGQ89NUZKJPPWHUR1GD6R0MDVNHMBBFMRVCQ6H3N' where id=6; -update noar tt set v3='FH4EXOLMHU0WTHT3M4SCFXRKS0QTXTQHDLYZ0Z1JGKVKXDF57XXVCZ6NXAH9XPVZS3THWTIW2EGI3TKGHKHD9J6BZGWKTEN4PZP8Q2E5LAQJNH63BOB4Q8ZS2KL2QEOACW1UMAHS48KNQ9S5DLH168HFRTSJEUBW4689HQQ6MKFI95DCKXRXW0PBOXF7KU7U004L86W57ZTS05NWPCHRBQI7887RVL1AETAMB144V7Y1VFLVBJO7UR9L2M6WT96S9' where id=6; -update noar ti set v3='FH4EXOLMHU0WTHT3M4SCFXRKS0QTXTQHDLYZ0Z1JGKVKXDF57XXVCZ6NXAH9XPVZS3THWTIW2EGI3TKGHKHD9J6BZGWKTEN4PZP8Q2E5LAQJNH63BOB4Q8ZS2KL2QEOACW1UMAHS48KNQ9S5DLH168HFRTSJEUBW4689HQQ6MKFI95DCKXRXW0PBOXF7KU7U004L86W57ZTS05NWPCHRBQI7887RVL1AETAMB144V7Y1VFLVBJO7UR9L2M6WT96S9' where id=6; -update noar tt set v0='3MER9ZTRIOQ7BORJ2Y35XK8VTXK2FD47VK63HMMPFMFXKQDGFLM5PM5WG1X7VIDM5D8AMC82BUYZ2VS8029ESTYA51US3NP80GRTRFUWKGHZVKGXRRLP2PM5YIZIWZLD3SZ9IQKLKNGMQI6V31UGFKTPSI6Q05GBNIAX2TZIZYL1JN0T4V35JMFOL3KJAIJZ6TH5UUKXQLMSST1KEVN4C78JV1FDQDMDR6PZYERTRPHIDNQXUXPNGQU12OPRZRC01' where id=7; -update noar ti set v0='3MER9ZTRIOQ7BORJ2Y35XK8VTXK2FD47VK63HMMPFMFXKQDGFLM5PM5WG1X7VIDM5D8AMC82BUYZ2VS8029ESTYA51US3NP80GRTRFUWKGHZVKGXRRLP2PM5YIZIWZLD3SZ9IQKLKNGMQI6V31UGFKTPSI6Q05GBNIAX2TZIZYL1JN0T4V35JMFOL3KJAIJZ6TH5UUKXQLMSST1KEVN4C78JV1FDQDMDR6PZYERTRPHIDNQXUXPNGQU12OPRZRC01' where id=7; -update noar tt set v1='F2A36RO6O7DOIQL6LN1V9ZRYITN5JPI9OW01UTI5C7XOGAK15RU517PW54QFPVZJX4ZF9PVJJQOR2W7DTTQWXA8CE7RGCI0MLXNE85RCZYCS1RYYW3943H5G0V0OKDZ6XG6HET5U52VWGNM5CVCKO33AVIXFUTWWJP1HXHFQ0XCKQ8P5WRRKLIXKJU0Y2M6ZWLKI3B9H5MKDB4CFJQ0L35CGVKVYKXQT2L9GC0JSXTKBYAZ7PPBXEZESSNO32JDNE' where id=7; -update noar ti set v1='F2A36RO6O7DOIQL6LN1V9ZRYITN5JPI9OW01UTI5C7XOGAK15RU517PW54QFPVZJX4ZF9PVJJQOR2W7DTTQWXA8CE7RGCI0MLXNE85RCZYCS1RYYW3943H5G0V0OKDZ6XG6HET5U52VWGNM5CVCKO33AVIXFUTWWJP1HXHFQ0XCKQ8P5WRRKLIXKJU0Y2M6ZWLKI3B9H5MKDB4CFJQ0L35CGVKVYKXQT2L9GC0JSXTKBYAZ7PPBXEZESSNO32JDNE' where id=7; -update noar tt set v2='RBD8ZJIQY0QS0U6QLM447CD80KZDJZ1OEKYFOQPLR33Z0N263PO1E149WT2S7LPUOYMQHQBVMW6WMUOOOB3HKH61NHOBU6XNWI231297A57YQN4OPU7RSUXJS2W6J4VB99LA4BOITX5157TWILQ5N3VGGNRZ5O0UL6P536V32D4ZX7OWEAJRMRKI89BJ3U08SOKOX6AKQTW373YU6OIGA7JN202S0EAIU1W14V6GJZS5VG6BG91R9YV57UCTQJQLO' where id=7; -update noar ti set v2='RBD8ZJIQY0QS0U6QLM447CD80KZDJZ1OEKYFOQPLR33Z0N263PO1E149WT2S7LPUOYMQHQBVMW6WMUOOOB3HKH61NHOBU6XNWI231297A57YQN4OPU7RSUXJS2W6J4VB99LA4BOITX5157TWILQ5N3VGGNRZ5O0UL6P536V32D4ZX7OWEAJRMRKI89BJ3U08SOKOX6AKQTW373YU6OIGA7JN202S0EAIU1W14V6GJZS5VG6BG91R9YV57UCTQJQLO' where id=7; -update noar tt set v3='CHIGYE61A8LF6EH5TN6P4AAGT764LLXNSV3DC6WCT3WNJNAW15TL9PGP9PD9F0OB34SC6FIN8FW8EQCI1M8KV534AO4K9HUUGBFHJ25W99SRKMI5SFK1KHAQU1YX99KCNL4ALKZAUSQSLBF1O0CU2XNMH6L7M5JIWIDIN9JE9WKPCM6DQXSP20J8K2OXUVJ0VELEEX0HOXU3B7854LS1JFUAOP1S8KSOALA43ETVTE3LEFQ2YKPE91JMWW8K8IE2C' where id=7; -update noar ti set v3='CHIGYE61A8LF6EH5TN6P4AAGT764LLXNSV3DC6WCT3WNJNAW15TL9PGP9PD9F0OB34SC6FIN8FW8EQCI1M8KV534AO4K9HUUGBFHJ25W99SRKMI5SFK1KHAQU1YX99KCNL4ALKZAUSQSLBF1O0CU2XNMH6L7M5JIWIDIN9JE9WKPCM6DQXSP20J8K2OXUVJ0VELEEX0HOXU3B7854LS1JFUAOP1S8KSOALA43ETVTE3LEFQ2YKPE91JMWW8K8IE2C' where id=7; -update noar tt set v0='3KOBBPEI8RL9XB02NEHMPQWOHJG9BM7U5K4F86MBHG39KWROZ0LBF28EZIU5N2NBP5Y1SD2EU9QVRIYQW8A1043OAYH3BZPV84L3CBMRGFWBY9JSDMHV6R18H1FW8HOALOIX40EV9PIZ9BM33B1YX9U4TN34MI8H027VXKKIEUL7Q0D2KBJN08P4KDY3T6N8DWQU8H6WU96L41B8DIX5NDICK5RAM45L3MKJKW7WGLRV7OJPUDH0UL9TYON85W0GV' where id=8; -update noar ti set v0='3KOBBPEI8RL9XB02NEHMPQWOHJG9BM7U5K4F86MBHG39KWROZ0LBF28EZIU5N2NBP5Y1SD2EU9QVRIYQW8A1043OAYH3BZPV84L3CBMRGFWBY9JSDMHV6R18H1FW8HOALOIX40EV9PIZ9BM33B1YX9U4TN34MI8H027VXKKIEUL7Q0D2KBJN08P4KDY3T6N8DWQU8H6WU96L41B8DIX5NDICK5RAM45L3MKJKW7WGLRV7OJPUDH0UL9TYON85W0GV' where id=8; -update noar tt set v1='ECIOEFDMYAGLBT3O1R268ZS1H57E1UAPRVW6YAXLJKG5X7JW77785D9S9CD3E4RJPEKUAWBCCKX8E9T7MD11N3F8GN0NH7BR01V0VR9KQSDM3NEIYFGJOGIHJ9TDLMTE3SQK823FW9PIX9HCVUNJ452BEYF8GM63N4FW5EXOCHO4AIYJKTK5CF3OQQLLJTU4DJZXZMFVY7VB64EV3R8A495T7ZEMXDNVJTOZVEXSY59L0RGUZXHVZRPV27S4U5XWJ' where id=8; -update noar ti set v1='ECIOEFDMYAGLBT3O1R268ZS1H57E1UAPRVW6YAXLJKG5X7JW77785D9S9CD3E4RJPEKUAWBCCKX8E9T7MD11N3F8GN0NH7BR01V0VR9KQSDM3NEIYFGJOGIHJ9TDLMTE3SQK823FW9PIX9HCVUNJ452BEYF8GM63N4FW5EXOCHO4AIYJKTK5CF3OQQLLJTU4DJZXZMFVY7VB64EV3R8A495T7ZEMXDNVJTOZVEXSY59L0RGUZXHVZRPV27S4U5XWJ' where id=8; -update noar tt set v2='3NOLAGREL8P7LKC2EU895T2IZOQDRLVNP29M79Q15MC2A53FYBZSKXT5OG5ZY2L7WRDCCC0RBUUXGOZZOFTLS3AU0UAZ3MXJ5DPLUD2PGOF7QFFWHMLHDJ28O8B2HJYL3GFN7W2J0W1OR03QEUSK1SK0NK0SS644NSS49X4HSLKM9KD39FBLUROM2LKT6PEG23QGPR8NQOWDTQHNFLE44LQ43LY9KHYL36EPABSGDXQ1BJHHH2TS7RSNI3F2FXQQV' where id=8; -update noar ti set v2='3NOLAGREL8P7LKC2EU895T2IZOQDRLVNP29M79Q15MC2A53FYBZSKXT5OG5ZY2L7WRDCCC0RBUUXGOZZOFTLS3AU0UAZ3MXJ5DPLUD2PGOF7QFFWHMLHDJ28O8B2HJYL3GFN7W2J0W1OR03QEUSK1SK0NK0SS644NSS49X4HSLKM9KD39FBLUROM2LKT6PEG23QGPR8NQOWDTQHNFLE44LQ43LY9KHYL36EPABSGDXQ1BJHHH2TS7RSNI3F2FXQQV' where id=8; -update noar tt set v3='PQIAGB35N5LJS5XUZX63D942KGK62XNX3XDX53KTN532WEQC7I1UHDLLALU3X50HXH6OHU7DLSPIAOO3TYY9P21L6D109UB75KDE9XPFLX0UOZNQPLBH5ATL1PSEW42LKTBV3K46IR2PZGHGSD4XRLX5TJOCJ6Q96W3ST83BYO3K0AM8DL2JCQH5DXWJQXM5NEDS99SAHEVOV2WOEC4DF3L5FC6SD4YZY2HU2TV2X3UO70Q1E5BWH7IPAN2XDNWKC' where id=8; -update noar ti set v3='PQIAGB35N5LJS5XUZX63D942KGK62XNX3XDX53KTN532WEQC7I1UHDLLALU3X50HXH6OHU7DLSPIAOO3TYY9P21L6D109UB75KDE9XPFLX0UOZNQPLBH5ATL1PSEW42LKTBV3K46IR2PZGHGSD4XRLX5TJOCJ6Q96W3ST83BYO3K0AM8DL2JCQH5DXWJQXM5NEDS99SAHEVOV2WOEC4DF3L5FC6SD4YZY2HU2TV2X3UO70Q1E5BWH7IPAN2XDNWKC' where id=8; -update noar tt set v0='3CJCDFHZLWKHCM17I3GQCR2KQ8ZREG02KZBI10IYZO2ACEW6H7QSN93OQJ7JQBGJJB71UF8F1SA1UEMQHTABS70R283IJ4FXR6D19TTWS0X5J1DULQ2C9YV01NA6BYKL3NGEWE0E1ZH8JLTDUUP6P6LZI6LE6268EHQIY32XC2A4N3039R0QSR9L4GOCCW7BIXC2JIBLMJ9SDV3IPC1YYA3PLPLR5COWCMKSUIBXQK4X4ETU0CUSYA6DMBUPFSELG' where id=9; -update noar ti set v0='3CJCDFHZLWKHCM17I3GQCR2KQ8ZREG02KZBI10IYZO2ACEW6H7QSN93OQJ7JQBGJJB71UF8F1SA1UEMQHTABS70R283IJ4FXR6D19TTWS0X5J1DULQ2C9YV01NA6BYKL3NGEWE0E1ZH8JLTDUUP6P6LZI6LE6268EHQIY32XC2A4N3039R0QSR9L4GOCCW7BIXC2JIBLMJ9SDV3IPC1YYA3PLPLR5COWCMKSUIBXQK4X4ETU0CUSYA6DMBUPFSELG' where id=9; -update noar tt set v1='G3GOHGWATRXVR37C1YCCRCOVTMGPWDS1NK1ZL8PALAELQHDNIXGF95CYAW10TQ3VR965CE6ARQJSLL6YJMCQCPWD00YVESE70EKHNU6YRJE3T9J66X1U6HVQIPSC845124XBMJEOPRFS3H37BS7H4F3RJDXY2LRRGQV9B5N7TA5NVNB800BQU47K2XZWM5A7JJGXKA62QB1UAB4ZEG9S81UFBNQEXY22IVZQYTQKU214KFFG9Q07ZVO7WMJ2RJGYJ' where id=9; -update noar ti set v1='G3GOHGWATRXVR37C1YCCRCOVTMGPWDS1NK1ZL8PALAELQHDNIXGF95CYAW10TQ3VR965CE6ARQJSLL6YJMCQCPWD00YVESE70EKHNU6YRJE3T9J66X1U6HVQIPSC845124XBMJEOPRFS3H37BS7H4F3RJDXY2LRRGQV9B5N7TA5NVNB800BQU47K2XZWM5A7JJGXKA62QB1UAB4ZEG9S81UFBNQEXY22IVZQYTQKU214KFFG9Q07ZVO7WMJ2RJGYJ' where id=9; -update noar tt set v2='S6JQWNHUI0YD0GDXHLMA5JAFN0L3DJIIXV6TPRG7DNI9CRLHAVI2WXD1R5O0R6OBY6A9H1K2H4YVKR5WAZ25PX3OXO814I5WYMIGMKPR73TSTFAC3LTGKR0CD8J0UYIQ7UU7NWGPLZYIZZKJJ00Y2IG4JDH1HDKFDXUPD6YJB1E4X3UG02C4PJPFOSTZ8JORAI9WVDNHYF3QAASGFY3L76FPF95V59XFS7ZLCGGZMZC1FP8WF0AIJ7KVKYBM9Y411' where id=9; -update noar ti set v2='S6JQWNHUI0YD0GDXHLMA5JAFN0L3DJIIXV6TPRG7DNI9CRLHAVI2WXD1R5O0R6OBY6A9H1K2H4YVKR5WAZ25PX3OXO814I5WYMIGMKPR73TSTFAC3LTGKR0CD8J0UYIQ7UU7NWGPLZYIZZKJJ00Y2IG4JDH1HDKFDXUPD6YJB1E4X3UG02C4PJPFOSTZ8JORAI9WVDNHYF3QAASGFY3L76FPF95V59XFS7ZLCGGZMZC1FP8WF0AIJ7KVKYBM9Y411' where id=9; -update noar tt set v3='UDYQGO0R3RSDM89EZH7GQV11RGIQ6GO9BDRSE0ORS8JRM1UJR9KEOE4KGY7FXU9UVN7OW8SWX4WP13ZH13Y7G3T7XQDXQ4FWKV8PXPG7J38CCS2D3ME5UUNQFR67DYJ02EAPS0UO9P63BXCXRDBODXUAL8BYFD2DP1NREA0DW7KXB8FOUJFPAKML0394FQZF3DTOH4ES10G5XO7RQKVIM5V7QFP5Q2OH88O54V47B6V1P8BGOF04SMCZL0P3BGPDS' where id=9; -update noar ti set v3='UDYQGO0R3RSDM89EZH7GQV11RGIQ6GO9BDRSE0ORS8JRM1UJR9KEOE4KGY7FXU9UVN7OW8SWX4WP13ZH13Y7G3T7XQDXQ4FWKV8PXPG7J38CCS2D3ME5UUNQFR67DYJ02EAPS0UO9P63BXCXRDBODXUAL8BYFD2DP1NREA0DW7KXB8FOUJFPAKML0394FQZF3DTOH4ES10G5XO7RQKVIM5V7QFP5Q2OH88O54V47B6V1P8BGOF04SMCZL0P3BGPDS' where id=9; -update noar tt set v0='VM74ZVZ91H42LB6M6HVD3C84ESPUNA69FPHP61AH97TV8ECL50O2PK25ZMM3OEP9L9Z0J7IYIY8SP7NAVLRQQQ22C4BBM0W5XIG316D6907OX4U4RR2I3G1C6MTWRQUBCE1YR26GUJ6T8X1BTI5E7UG6F5Q38ETJ8UNAWY072LLPOJDZ5B875NF1MSZE5NXMVM2IVZ6BWJKOOKNV1FVQGP4TELIAQEIB4H4BP0CXF43NMQ7M7AYGDSICVG0SNR06W' where id=10; -update noar ti set v0='VM74ZVZ91H42LB6M6HVD3C84ESPUNA69FPHP61AH97TV8ECL50O2PK25ZMM3OEP9L9Z0J7IYIY8SP7NAVLRQQQ22C4BBM0W5XIG316D6907OX4U4RR2I3G1C6MTWRQUBCE1YR26GUJ6T8X1BTI5E7UG6F5Q38ETJ8UNAWY072LLPOJDZ5B875NF1MSZE5NXMVM2IVZ6BWJKOOKNV1FVQGP4TELIAQEIB4H4BP0CXF43NMQ7M7AYGDSICVG0SNR06W' where id=10; -update noar tt set v1='I7XA6F281EWOER5VZQC7QQFEMF4BWMLDPMWK3RWBG1WMBENIKRA1YUCG5H0XNDL9NXNIO0MMKXUJGHB3AZF4ZTS2HKEWJNA4VY6T5A0GXVV6ETEHY3V66D1D6TEUOLPHFPIRVMSYEV73UHZ6K1JTJM5C27G83MNHTLOJ1KP55ATEQ4395G9Q36QQM3H47UQZ4N0VS1E4Z1UND5UCPA6YWWRY61IVHRJ884KZ0NFO9S002D2P9B2TI6PJD0Z4VLI0M' where id=10; -update noar ti set v1='I7XA6F281EWOER5VZQC7QQFEMF4BWMLDPMWK3RWBG1WMBENIKRA1YUCG5H0XNDL9NXNIO0MMKXUJGHB3AZF4ZTS2HKEWJNA4VY6T5A0GXVV6ETEHY3V66D1D6TEUOLPHFPIRVMSYEV73UHZ6K1JTJM5C27G83MNHTLOJ1KP55ATEQ4395G9Q36QQM3H47UQZ4N0VS1E4Z1UND5UCPA6YWWRY61IVHRJ884KZ0NFO9S002D2P9B2TI6PJD0Z4VLI0M' where id=10; -update noar tt set v2='O76BKZPSZK3J8AIJ0CRDMO09URPA1QNC8CNPDLI2MPZU4XCTFNXURS0LTUVJEUU9PJE4TMXXZQ7D9EY8Y9NMBMCPLUCVY1KTM9Y7CX9RH87SRBNM6ECMLQTXIN9VQOA2K8ME0S33PGVWSJIETH0ERZODNTXD7WTJY1YWYS3ABAZCF5OQS95IE7I8LT9LXP69MKARA5GFHWYMQ60EIV9HAZIUI7QZYDYHVNKBEUAGT3CWWHU7B533PV5WLECMH536I' where id=10; -update noar ti set v2='O76BKZPSZK3J8AIJ0CRDMO09URPA1QNC8CNPDLI2MPZU4XCTFNXURS0LTUVJEUU9PJE4TMXXZQ7D9EY8Y9NMBMCPLUCVY1KTM9Y7CX9RH87SRBNM6ECMLQTXIN9VQOA2K8ME0S33PGVWSJIETH0ERZODNTXD7WTJY1YWYS3ABAZCF5OQS95IE7I8LT9LXP69MKARA5GFHWYMQ60EIV9HAZIUI7QZYDYHVNKBEUAGT3CWWHU7B533PV5WLECMH536I' where id=10; -update noar tt set v3='0POM4VKQ11MTFZ1A3OCIIEXW0GP8AVRZJSWEI7H2Q3LH4LZHW45OLB05CBI50ZEX6NPS03RXH6KDZYHSZ8XVSOV4IQDUBJQE4TGPD87ZM4A37HHXFDD8C23370178WP2FY5LX2E35EOTCHU39CRE4F1TBR9VKA6V79X9ODHS409ESNQANEXGIPMHGT78H5UAGWUOCJ7BK53E3VJR1FM1AGYHBI6RYTGGPYEVYNHPNM1TC7GFEPFZLSNSI6YFT9OZI' where id=10; -update noar ti set v3='0POM4VKQ11MTFZ1A3OCIIEXW0GP8AVRZJSWEI7H2Q3LH4LZHW45OLB05CBI50ZEX6NPS03RXH6KDZYHSZ8XVSOV4IQDUBJQE4TGPD87ZM4A37HHXFDD8C23370178WP2FY5LX2E35EOTCHU39CRE4F1TBR9VKA6V79X9ODHS409ESNQANEXGIPMHGT78H5UAGWUOCJ7BK53E3VJR1FM1AGYHBI6RYTGGPYEVYNHPNM1TC7GFEPFZLSNSI6YFT9OZI' where id=10; -update noar tt set v0='5Y94ZOFI4OOC7RDNJ0BK9RY5U6G60P5U4QASMKYKGJO51FWQGRNB72KE521N6RVS6OOPV28SNKGV04HLXYGDX98OMLBPZQN6OQNP0R03V4Q0B97EOJEBGJX5MOF2O7L0ZWGSFYF5VYE1Q25ONP55CU4CG4D0YCYZVVS7COOF4I9S85VZ4JT8HYL9NNP3J8LT087GEJGC8X1HYCKDIGO9FLNE1GAP1FTTW43EXPO99Q06SVF3DNJYW2AQH66GKULXP' where id=11; -update noar ti set v0='5Y94ZOFI4OOC7RDNJ0BK9RY5U6G60P5U4QASMKYKGJO51FWQGRNB72KE521N6RVS6OOPV28SNKGV04HLXYGDX98OMLBPZQN6OQNP0R03V4Q0B97EOJEBGJX5MOF2O7L0ZWGSFYF5VYE1Q25ONP55CU4CG4D0YCYZVVS7COOF4I9S85VZ4JT8HYL9NNP3J8LT087GEJGC8X1HYCKDIGO9FLNE1GAP1FTTW43EXPO99Q06SVF3DNJYW2AQH66GKULXP' where id=11; -update noar tt set v1='1RHR83UJFV03F2GA0I3E35D76NHRAHCB4OR0V494MWSYG6V3ORE17230CQQ35LRQJ6M0VSRR1GO6OBKTFXDDU56QQC4ZGOWQR96TTF5L3CO46ZU43LEXYKJNX1IGIGGPQPQDWZYM30BJS96RJCEFBVJHYE9LDF65JORHHK5VPKSVGDZIX0SIGWKVAJB2BFV7H5BOR9DIPUEZ7Q87OQ95MW8T89EQWGTKXGBAJPUO343Y7ZRTG9XF0EA2D52K5BDY2' where id=11; -update noar ti set v1='1RHR83UJFV03F2GA0I3E35D76NHRAHCB4OR0V494MWSYG6V3ORE17230CQQ35LRQJ6M0VSRR1GO6OBKTFXDDU56QQC4ZGOWQR96TTF5L3CO46ZU43LEXYKJNX1IGIGGPQPQDWZYM30BJS96RJCEFBVJHYE9LDF65JORHHK5VPKSVGDZIX0SIGWKVAJB2BFV7H5BOR9DIPUEZ7Q87OQ95MW8T89EQWGTKXGBAJPUO343Y7ZRTG9XF0EA2D52K5BDY2' where id=11; -update noar tt set v2='THOVGUU3OM2776HJ7YMHT4LZ05MRHZRKHBDNP1IOYBG2M59GNB31DGO3LSLXBKMKXRH9Z9MLM6WVJQ8JEQCAWG3Y12ZFUO9M5S2U24PV75VEJ1IJG08V5KGFKDZOSTJA9SPUOMPJR9XT1PBB1720J28O9OPS11MFSFPA67HT43LDHF0CM1PIWP4O7DZZH94MN6ULP1HZBMZWZJYHHQ1MUNS4R4GWMMD99P2XCSTBRC13KY84XN1ZKKQKQRWT4MSZG' where id=11; -update noar ti set v2='THOVGUU3OM2776HJ7YMHT4LZ05MRHZRKHBDNP1IOYBG2M59GNB31DGO3LSLXBKMKXRH9Z9MLM6WVJQ8JEQCAWG3Y12ZFUO9M5S2U24PV75VEJ1IJG08V5KGFKDZOSTJA9SPUOMPJR9XT1PBB1720J28O9OPS11MFSFPA67HT43LDHF0CM1PIWP4O7DZZH94MN6ULP1HZBMZWZJYHHQ1MUNS4R4GWMMD99P2XCSTBRC13KY84XN1ZKKQKQRWT4MSZG' where id=11; -update noar tt set v3='KLS726XGRK14V001SB4RIWT5JL749GKGSG3BZ4Q383DZ4F6BZPL4UVIMYS5RL0BKQULG9W9T1HDUN19SBJPNEYI0COAXWVMHGEU570RM29M3MGQADC1OP97BRFCMI03IUKXOBSEW7LPNLF8S0H1SHQO1KRDP2OA852XL5BTDR50HZZ08J7307B5MIGKTTM4J6CD6Z1DHPQJQEMS6SSWNZH1N5SN2D1FAD9ZX9S2LVVOMJJG42STN3ZEN9SM17LENL' where id=11; -update noar ti set v3='KLS726XGRK14V001SB4RIWT5JL749GKGSG3BZ4Q383DZ4F6BZPL4UVIMYS5RL0BKQULG9W9T1HDUN19SBJPNEYI0COAXWVMHGEU570RM29M3MGQADC1OP97BRFCMI03IUKXOBSEW7LPNLF8S0H1SHQO1KRDP2OA852XL5BTDR50HZZ08J7307B5MIGKTTM4J6CD6Z1DHPQJQEMS6SSWNZH1N5SN2D1FAD9ZX9S2LVVOMJJG42STN3ZEN9SM17LENL' where id=11; -update noar tt set v0='EEK0C0RGF12J7GDM1O1WGBPB01W0B8KF5AN78XJSBPXJ1BZ79NNJPGB68KC8HZWFJVVV3TFX787TA6QRHCYRBACIVL8DIFGFUREDFPUQSWGIB605KUX906ZBN8HE5F6SR5OA66LS3NICCVD8L4SZRPKK9Z2EPH859I8KTE6LF2DEIHQ8OEQ2TXNLGIU1CHL77XZMZGLT8LXLODJTN760V4SB8WCFAP1CVLS5VVRKE6NKRKMEFC84K5W2CML4XLXHM' where id=12; -update noar ti set v0='EEK0C0RGF12J7GDM1O1WGBPB01W0B8KF5AN78XJSBPXJ1BZ79NNJPGB68KC8HZWFJVVV3TFX787TA6QRHCYRBACIVL8DIFGFUREDFPUQSWGIB605KUX906ZBN8HE5F6SR5OA66LS3NICCVD8L4SZRPKK9Z2EPH859I8KTE6LF2DEIHQ8OEQ2TXNLGIU1CHL77XZMZGLT8LXLODJTN760V4SB8WCFAP1CVLS5VVRKE6NKRKMEFC84K5W2CML4XLXHM' where id=12; -update noar tt set v1='69KU63BJ41MALFIGAPUW5U4YB12K0VS5C84EQ60ZLBJJHZQY9VBG7JMHFKBLUU7YZXRRXFJC4NZ4IHFRB22FQYRRDMJOAER17YOK7TZ6A27NYMDN6YL48H0WHZ3CRIOF38JKCPOW4XMEC11IGRSNYHWVWNA265KJGAWXWBRD9UPSQ9GV1ZOUN4Z8FBCKACNNARTTDOSQXJTY1PW8HR4HMN9FMIJOB9SMHCC9ZLGWN726AOQF3LE3TAP1VTB46BSNZ' where id=12; -update noar ti set v1='69KU63BJ41MALFIGAPUW5U4YB12K0VS5C84EQ60ZLBJJHZQY9VBG7JMHFKBLUU7YZXRRXFJC4NZ4IHFRB22FQYRRDMJOAER17YOK7TZ6A27NYMDN6YL48H0WHZ3CRIOF38JKCPOW4XMEC11IGRSNYHWVWNA265KJGAWXWBRD9UPSQ9GV1ZOUN4Z8FBCKACNNARTTDOSQXJTY1PW8HR4HMN9FMIJOB9SMHCC9ZLGWN726AOQF3LE3TAP1VTB46BSNZ' where id=12; -update noar tt set v2='2ZIKLL8IEE2IRP883806DHIWXKH3AJN2SZBF19I8KTZ92CC1APWDOPX9VFOQM57A7BPP1CBCRZVKMNHDMCOJGLB7XL13ICGCSZ9OL6J8XDKHMOFT2ZQBVMOI4N2INW3SNQM2MNR7Y6X5ZTCT1NJ9ONYR5JROPPOTBDJ3PCERN3WN6T8FW1MC4S713UAMEWHHKXMQWROMOZLITDSM8Q30BO39OA1I79SDMHU3NY1TDAFN41N8IR666AFSMPYWDC4TS' where id=12; -update noar ti set v2='2ZIKLL8IEE2IRP883806DHIWXKH3AJN2SZBF19I8KTZ92CC1APWDOPX9VFOQM57A7BPP1CBCRZVKMNHDMCOJGLB7XL13ICGCSZ9OL6J8XDKHMOFT2ZQBVMOI4N2INW3SNQM2MNR7Y6X5ZTCT1NJ9ONYR5JROPPOTBDJ3PCERN3WN6T8FW1MC4S713UAMEWHHKXMQWROMOZLITDSM8Q30BO39OA1I79SDMHU3NY1TDAFN41N8IR666AFSMPYWDC4TS' where id=12; -update noar tt set v3='15BSSRPGNMG2W8RQUK67UU1JLFDH21KOSU9EWHLMTIVOBIYVV0KW8O8E273PPFZ0LGGCI439J5Y1V3OKNYDO5HLTEXUMPI68KUAUL4WF2NINTUTSHLYXTI8YWS6HCNS3QT0VL7BUBGF2RB1TTBW1D16LDCFNO8VFMRMUWBA9WFGBQWY6PSJI3SLOW1TUXBLZE7N0D6GQ1PR4E45JKLZ173DEEZHUIQ7EN35DPFVMP4C3MOSE70GAS9I71F6WR4WA4' where id=12; -update noar ti set v3='15BSSRPGNMG2W8RQUK67UU1JLFDH21KOSU9EWHLMTIVOBIYVV0KW8O8E273PPFZ0LGGCI439J5Y1V3OKNYDO5HLTEXUMPI68KUAUL4WF2NINTUTSHLYXTI8YWS6HCNS3QT0VL7BUBGF2RB1TTBW1D16LDCFNO8VFMRMUWBA9WFGBQWY6PSJI3SLOW1TUXBLZE7N0D6GQ1PR4E45JKLZ173DEEZHUIQ7EN35DPFVMP4C3MOSE70GAS9I71F6WR4WA4' where id=12; -update noar tt set v0='7PK3UW845LKDAMJMQXEB4JFM4U9QZL238SNW5K2TSYBWTLHQ4GC7I1YW5Z3R0LPBD7EO7YV6NGVEEL8FXDQ79RXEGQRLMRYNTN473DT96B3S5FZAM5NXV9GX5M3VSSJAAEH81MI3J6BOFV3J4S0HNT1UTR48L0UR97M1X4ROSMIKDOPZ0D8HCM1LVKXXRMFBIRYSQ6T7ZJETLILMCXKOU8M7D0UPDRYKRG60X45N12112DVZE3SAAW375V4XRYFUB' where id=13; -update noar ti set v0='7PK3UW845LKDAMJMQXEB4JFM4U9QZL238SNW5K2TSYBWTLHQ4GC7I1YW5Z3R0LPBD7EO7YV6NGVEEL8FXDQ79RXEGQRLMRYNTN473DT96B3S5FZAM5NXV9GX5M3VSSJAAEH81MI3J6BOFV3J4S0HNT1UTR48L0UR97M1X4ROSMIKDOPZ0D8HCM1LVKXXRMFBIRYSQ6T7ZJETLILMCXKOU8M7D0UPDRYKRG60X45N12112DVZE3SAAW375V4XRYFUB' where id=13; -update noar tt set v1='RMBX39P1LGB8Q0U4NRC6XCXPXAUG8SHNBDEWO8IFPJ8X6CMA6BTDHVT9PT29FCYFIDZTK1571SIHWIFC6GKUASF49NI3MYK618T0M2275K0CLBB0SQ492NMO83LO2SWKCR3JKR6DKRQQ723G4TQGR1A6LILYADCYA4P327MU6OQ66WLIOWV0IC4EXRXINSU0QZB6VQSRQKIAV5U8C4MGBT7O0XPC23FYDGRY999KY1KO12B85SD6VR14L7K9F50FJ' where id=13; -update noar ti set v1='RMBX39P1LGB8Q0U4NRC6XCXPXAUG8SHNBDEWO8IFPJ8X6CMA6BTDHVT9PT29FCYFIDZTK1571SIHWIFC6GKUASF49NI3MYK618T0M2275K0CLBB0SQ492NMO83LO2SWKCR3JKR6DKRQQ723G4TQGR1A6LILYADCYA4P327MU6OQ66WLIOWV0IC4EXRXINSU0QZB6VQSRQKIAV5U8C4MGBT7O0XPC23FYDGRY999KY1KO12B85SD6VR14L7K9F50FJ' where id=13; -update noar tt set v2='ZU93JFAVPL8EPW0SWSBSW5LXCN0Y4LSWQEQ1ZXTLKCH7PQBUDRMA7ZGDJYNIIEEWSA0YT0DEPFMXGQIORPDCMK8KSFITR0SKXGHHEL7I0CL0B9RLOXXLE5K09JMLK85CF4JEYW429VR2UGKAUFVTB3AE65XU9X8KEICVK3Y3LRWPQLIPKAS0P1RFPGLFCD9JI3TBE6B0HX7ZZPCNRAYWX6L59Y69TGJWUWJ6Q7GEO8MLBCR1MB1BLXURTI7PD2RJZ' where id=13; -update noar ti set v2='ZU93JFAVPL8EPW0SWSBSW5LXCN0Y4LSWQEQ1ZXTLKCH7PQBUDRMA7ZGDJYNIIEEWSA0YT0DEPFMXGQIORPDCMK8KSFITR0SKXGHHEL7I0CL0B9RLOXXLE5K09JMLK85CF4JEYW429VR2UGKAUFVTB3AE65XU9X8KEICVK3Y3LRWPQLIPKAS0P1RFPGLFCD9JI3TBE6B0HX7ZZPCNRAYWX6L59Y69TGJWUWJ6Q7GEO8MLBCR1MB1BLXURTI7PD2RJZ' where id=13; -update noar tt set v3='1B5466PNOB9QEYZBBIXMI8W70Q7LPU11JDFROHV84AMT6ZT93USOMV3XJHKVNJ03XGV7ID4FXZ28BBUK5J8U94PQG4V57GXL10CQN2T8L04GKIQ1C4CV7UG0K58L5N9VCREK17S3T0KWL27JA1VSOYOW7Q7P54S0NNYX3ZUDY270O801AFX3IM594B9VUGXWIQUV238QUVRCGYWW9F1C1KZA2ILYJL1V3WZ4IUD1IXI375X7T67TAKWN06DPZBPOY' where id=13; -update noar ti set v3='1B5466PNOB9QEYZBBIXMI8W70Q7LPU11JDFROHV84AMT6ZT93USOMV3XJHKVNJ03XGV7ID4FXZ28BBUK5J8U94PQG4V57GXL10CQN2T8L04GKIQ1C4CV7UG0K58L5N9VCREK17S3T0KWL27JA1VSOYOW7Q7P54S0NNYX3ZUDY270O801AFX3IM594B9VUGXWIQUV238QUVRCGYWW9F1C1KZA2ILYJL1V3WZ4IUD1IXI375X7T67TAKWN06DPZBPOY' where id=13; -update noar tt set v0='PWXJBK9ACLJIZTGZBVMWKKEB5CU5PSBSEH5K89RNFTUDG5W91KVJHVC9S2CMPIFWKI2ZDQD7LFC17PYX8TXRYEDKR7VFVZY69AZXTVPQMUTJEUS8H2LMGM679Y8JBAUKZ1B9YAXWFBJBYAMXY8DNENU8E4MCBIVJZ8AW7S3RUJP06LBFMIRS8B3SIPOQWM1GMPZAEC5S7TIH8PL7IDVABN2P3A5MEPEPJQ2BA1S3LXF0ZWTFESB2G1P7BL08JDLZ1' where id=14; -update noar ti set v0='PWXJBK9ACLJIZTGZBVMWKKEB5CU5PSBSEH5K89RNFTUDG5W91KVJHVC9S2CMPIFWKI2ZDQD7LFC17PYX8TXRYEDKR7VFVZY69AZXTVPQMUTJEUS8H2LMGM679Y8JBAUKZ1B9YAXWFBJBYAMXY8DNENU8E4MCBIVJZ8AW7S3RUJP06LBFMIRS8B3SIPOQWM1GMPZAEC5S7TIH8PL7IDVABN2P3A5MEPEPJQ2BA1S3LXF0ZWTFESB2G1P7BL08JDLZ1' where id=14; -update noar tt set v1='CWYTYZTB4ERWMGI2W8PPOJJ85MKG4T1Y19PIY5OKOXGQPZNXY8GW7HQLP3QVSDX50LKDSXTX520TCS82W4422VORS7RT0SA4T5PL26BTM06QJYBXOA0YHJMQ3O0O2IR11WU5LTVKZO5ILAB49ORO9CA5N3EOY5KHMZ26H1F67G9G2JF4LCG4SLKQXNUY1KV64HBB6LLSX1BTMRMNX414C6A22K3HG0SQ8U5H2PNA7MMQP7NTNGGAT26WBJJ0DA89S' where id=14; -update noar ti set v1='CWYTYZTB4ERWMGI2W8PPOJJ85MKG4T1Y19PIY5OKOXGQPZNXY8GW7HQLP3QVSDX50LKDSXTX520TCS82W4422VORS7RT0SA4T5PL26BTM06QJYBXOA0YHJMQ3O0O2IR11WU5LTVKZO5ILAB49ORO9CA5N3EOY5KHMZ26H1F67G9G2JF4LCG4SLKQXNUY1KV64HBB6LLSX1BTMRMNX414C6A22K3HG0SQ8U5H2PNA7MMQP7NTNGGAT26WBJJ0DA89S' where id=14; -update noar tt set v2='KVZCNPUCEGMV04O6D41DQMSPNV5BOEMQXWNKWEJNKLGAZM2DTI1I7J7IBT8TLHCZ0WS7GCKOW62MN0E9VHOIKEC21PQV3QG2ILLIZE2XM23UJPNBWTR1QX2KGORO4JEV3IJYSDDKD9YTWUQVPJ39H75PJRCZWSE1EZD13J5CC9TA504I151ED3MQA48W8YLQOCMWZ51CS3I9T7AV0S7MUNEIJD7ZCIVAC556T33N6UAYYG0MK99C29GTADOB05LWZ' where id=14; -update noar ti set v2='KVZCNPUCEGMV04O6D41DQMSPNV5BOEMQXWNKWEJNKLGAZM2DTI1I7J7IBT8TLHCZ0WS7GCKOW62MN0E9VHOIKEC21PQV3QG2ILLIZE2XM23UJPNBWTR1QX2KGORO4JEV3IJYSDDKD9YTWUQVPJ39H75PJRCZWSE1EZD13J5CC9TA504I151ED3MQA48W8YLQOCMWZ51CS3I9T7AV0S7MUNEIJD7ZCIVAC556T33N6UAYYG0MK99C29GTADOB05LWZ' where id=14; -update noar tt set v3='OQREEWT0RSE67A239V7QW6ZSPBOBV989G5DO4TFOAB6RTFWMC6QBJ8HBVF2F4HTXOBD9E53X67YRPPSQHZFVV43AY2VLREOTKCPO0NBRU63MP0YOICW29EFAFP9Z025540J1GY2I8FOWJ1E3GMWNF6X7KGPR82M2Y5L9GO92CZLFYSG3K46WK60TVI36D5ZM6N9EA7E5A8TO2Z0RYHE3GWZ0THRG2JTHT5T79PKYC8HGFPKFXY8NXEEQ55GMVI3G0' where id=14; -update noar ti set v3='OQREEWT0RSE67A239V7QW6ZSPBOBV989G5DO4TFOAB6RTFWMC6QBJ8HBVF2F4HTXOBD9E53X67YRPPSQHZFVV43AY2VLREOTKCPO0NBRU63MP0YOICW29EFAFP9Z025540J1GY2I8FOWJ1E3GMWNF6X7KGPR82M2Y5L9GO92CZLFYSG3K46WK60TVI36D5ZM6N9EA7E5A8TO2Z0RYHE3GWZ0THRG2JTHT5T79PKYC8HGFPKFXY8NXEEQ55GMVI3G0' where id=14; -update noar tt set v0='MR83IANLYWE7Q1R6NI1JTACZCMC39P7DOX2YC8RRICPVFAFPJM1S3K05740BK65RRA0ZKCISW8T4NTNWUU8YFFF1GIZHS8GUJPVTE9IZBVVIEVF2NTVKFT4638I5140B5XT1RL0YV2CDWLQEOH719W43B5NF4FUBJ0JOUKB7RDG7AW2JFFP9UZEG1HYJHLUAOV18RHTMTAXB6WDW3014YLWAPQJLP3QCS78Q43RWY30ZUXO34RWC9MBA88GTZG38V' where id=15; -update noar ti set v0='MR83IANLYWE7Q1R6NI1JTACZCMC39P7DOX2YC8RRICPVFAFPJM1S3K05740BK65RRA0ZKCISW8T4NTNWUU8YFFF1GIZHS8GUJPVTE9IZBVVIEVF2NTVKFT4638I5140B5XT1RL0YV2CDWLQEOH719W43B5NF4FUBJ0JOUKB7RDG7AW2JFFP9UZEG1HYJHLUAOV18RHTMTAXB6WDW3014YLWAPQJLP3QCS78Q43RWY30ZUXO34RWC9MBA88GTZG38V' where id=15; -update noar tt set v1='KMP2BQ44FDUD59T37WK2CBTGDBIT1VNLG1KT7HBF2QGCR98AU8BQDM6VWST1Q25ZOB29HRYDWZ8VFTMHX5BWM583BHYSZ7FYO0FHSSVLEZHEOOL95EMOHQH289BGETIP5UPHJM9P7HBUK091KFWLHNPLKM0JKE3PCLKWZVR7M97JW8VZOWKZAWLCE52MD5IRZD30UAMXG4CVPP5QQFLKLD4AV1LJFBRJRJ54K2GQ16ZVVK7MWIS8KBU41T3AHXUPP' where id=15; -update noar ti set v1='KMP2BQ44FDUD59T37WK2CBTGDBIT1VNLG1KT7HBF2QGCR98AU8BQDM6VWST1Q25ZOB29HRYDWZ8VFTMHX5BWM583BHYSZ7FYO0FHSSVLEZHEOOL95EMOHQH289BGETIP5UPHJM9P7HBUK091KFWLHNPLKM0JKE3PCLKWZVR7M97JW8VZOWKZAWLCE52MD5IRZD30UAMXG4CVPP5QQFLKLD4AV1LJFBRJRJ54K2GQ16ZVVK7MWIS8KBU41T3AHXUPP' where id=15; -update noar tt set v2='UT9IKX7AT2RGHPUFA4WZ3ZFDM30BQZYNNMS2USY7IB1IMNNA1O3I5CJJDSR3LHQLICWNUSKNOM7UPSTJZ1JZN6OQ8288E00OQ102XJRJKBJX0KRXTFXZFUQIWSZZBBMGDFPXO153R1N1FX6ZC1A52V6ZY465FLXB2GY6HG546TZTIDY78BPH07Y4U61D1I79A96P6DS4AMOTG1HAHMI7BU4WLVSAOLT4FAZL4A41GTHQ0X222RZL6T5WPDUG1TE19' where id=15; -update noar ti set v2='UT9IKX7AT2RGHPUFA4WZ3ZFDM30BQZYNNMS2USY7IB1IMNNA1O3I5CJJDSR3LHQLICWNUSKNOM7UPSTJZ1JZN6OQ8288E00OQ102XJRJKBJX0KRXTFXZFUQIWSZZBBMGDFPXO153R1N1FX6ZC1A52V6ZY465FLXB2GY6HG546TZTIDY78BPH07Y4U61D1I79A96P6DS4AMOTG1HAHMI7BU4WLVSAOLT4FAZL4A41GTHQ0X222RZL6T5WPDUG1TE19' where id=15; -update noar tt set v3='ICKII3HFMKINOU8UMYDKCEH4P7PU5RGF02VCJ6PSWW06LP4HAMCXXSZ5FVIEHGSP1XHG95D4X542FNGZXDAIVRPC0RP54PR6ZJ4YUK4KMQ85YYMJSZAPMCGSR18RXSL40CT4CPG4A9PFT56J5WCVV6DCW4L8IA978PGRU2L3GVBRJMQB0BQE27UBVVZRVX4B359XL4S2EIPT3AU3MTU36O8BXAG2TBMT63DOJQO204P9LJWHJ64CQO567VISFJW0X' where id=15; -update noar ti set v3='ICKII3HFMKINOU8UMYDKCEH4P7PU5RGF02VCJ6PSWW06LP4HAMCXXSZ5FVIEHGSP1XHG95D4X542FNGZXDAIVRPC0RP54PR6ZJ4YUK4KMQ85YYMJSZAPMCGSR18RXSL40CT4CPG4A9PFT56J5WCVV6DCW4L8IA978PGRU2L3GVBRJMQB0BQE27UBVVZRVX4B359XL4S2EIPT3AU3MTU36O8BXAG2TBMT63DOJQO204P9LJWHJ64CQO567VISFJW0X' where id=15; -update noar tt set v0='DQGN42J0F5OE57YURUHI5VTTG69RIVFYOC3CYWOISK4UU50KBUSD3FD0BN3VLHW92CE0B3YJ35DZB7LPE9WMSPWZ98YQF6YCBK9HUBXP49D4EBLLTRN7MOJ52WVBTCEWXP714WHGH0CMKO1A8QTJQDOKISR9IISDWHZYJ2Q41L5HT4C2WNVWM3YNJO2TPKT18C11BMMCA2XFR9Z45IUF67RE2UESVJFK27V4A99TIPJVPHQM2J43SAQK0WRTBBASE' where id=16; -update noar ti set v0='DQGN42J0F5OE57YURUHI5VTTG69RIVFYOC3CYWOISK4UU50KBUSD3FD0BN3VLHW92CE0B3YJ35DZB7LPE9WMSPWZ98YQF6YCBK9HUBXP49D4EBLLTRN7MOJ52WVBTCEWXP714WHGH0CMKO1A8QTJQDOKISR9IISDWHZYJ2Q41L5HT4C2WNVWM3YNJO2TPKT18C11BMMCA2XFR9Z45IUF67RE2UESVJFK27V4A99TIPJVPHQM2J43SAQK0WRTBBASE' where id=16; -update noar tt set v1='K7HFG4ISR8HL8RQNIL6IDS9R32RBYZHNB9X13J9EIOILG0PKKW4A6X8LCMXGH7KD6T8JWBW588Y5M13PBHVV4WLRD74KZZJBTY0E9VBF5D8QAOI2T75GA4OJVJ9HUVWB91EQXF0Z1QDHJ5DEBS3EML5K8YZLCVDTWIC16N4WHX0EXNDVWJFRPSAZ1GP8Q7K481K4I1TYX2X1MB8MTOOG5RGGBSSUKFRDEW9O24W7KUJCVXK9SZTDUFHK2SAG59P2G' where id=16; -update noar ti set v1='K7HFG4ISR8HL8RQNIL6IDS9R32RBYZHNB9X13J9EIOILG0PKKW4A6X8LCMXGH7KD6T8JWBW588Y5M13PBHVV4WLRD74KZZJBTY0E9VBF5D8QAOI2T75GA4OJVJ9HUVWB91EQXF0Z1QDHJ5DEBS3EML5K8YZLCVDTWIC16N4WHX0EXNDVWJFRPSAZ1GP8Q7K481K4I1TYX2X1MB8MTOOG5RGGBSSUKFRDEW9O24W7KUJCVXK9SZTDUFHK2SAG59P2G' where id=16; -update noar tt set v2='XSZHNUE8KT052R1ZK2TBAFM66DQN9R362YLHBP4EPOMBTAKIOE87X26KJSSDVRMBI2NVJTMDQF5XVT1ELMZGFSHA0YVVH1XHKPS27WPLPLER6PNWGJ91BT5SED31S1CBSS112PSHT7REHDGZIB1FAE3S9C02UCSNG36VUCJ8WYRW1G3P1DRYSETB2195T0EBQ0YOSNWO35PUPFY0UICLEPFG03L6GN4CA87QQL2A2SDC36N9KLQSFYN1CSW9PAWB4' where id=16; -update noar ti set v2='XSZHNUE8KT052R1ZK2TBAFM66DQN9R362YLHBP4EPOMBTAKIOE87X26KJSSDVRMBI2NVJTMDQF5XVT1ELMZGFSHA0YVVH1XHKPS27WPLPLER6PNWGJ91BT5SED31S1CBSS112PSHT7REHDGZIB1FAE3S9C02UCSNG36VUCJ8WYRW1G3P1DRYSETB2195T0EBQ0YOSNWO35PUPFY0UICLEPFG03L6GN4CA87QQL2A2SDC36N9KLQSFYN1CSW9PAWB4' where id=16; -update noar tt set v3='9CFIKEF4C2YAZSK0OV65F4H4GMZZM7MUQIJ1NOPAPBQ9AB5FWTJMUCJSLUZ9H1C4N6MWYB6HNIG8FM76VKJR343KFZ8KCAZ5VUQI82ST3KGGJ8T2A04RUWG86SI799AYDL6AIE0KH9X2Q8PJIHQJ2ZHO71PBD5JEKBD4SWIZA88QFGKZHZMU5WYGHADS3GKIA3YAM17LL122MH2UFTGHFTQ20P3KQOWGCBH6LFIQ8REA1WRJEZCBWA75RKU1FU0JJ' where id=16; -update noar ti set v3='9CFIKEF4C2YAZSK0OV65F4H4GMZZM7MUQIJ1NOPAPBQ9AB5FWTJMUCJSLUZ9H1C4N6MWYB6HNIG8FM76VKJR343KFZ8KCAZ5VUQI82ST3KGGJ8T2A04RUWG86SI799AYDL6AIE0KH9X2Q8PJIHQJ2ZHO71PBD5JEKBD4SWIZA88QFGKZHZMU5WYGHADS3GKIA3YAM17LL122MH2UFTGHFTQ20P3KQOWGCBH6LFIQ8REA1WRJEZCBWA75RKU1FU0JJ' where id=16; -update noar tt set v0='TY6I6SKGL5UOL42BRO29O1UXOD2JYEMXN8AZ96O7YPAUAL088O07TGEC6DVZOM3839PPZ7KBLFDRRQDKBFYPS72ORXESNCEWKM9UDM6ZR6LAZXA2SW18O705C6AII8IW2BKJ1M0Z424V6WA2ORBSJ7OZLDLGW21S9NYIZOE9OOS2TZNU323E0DX9G4C16VSHMJUCC2IOJR2VCYARZ52M4RU83KDHVFXWX6JBY4BLGYV2ZR4X481UWTP81Y099276K' where id=17; -update noar ti set v0='TY6I6SKGL5UOL42BRO29O1UXOD2JYEMXN8AZ96O7YPAUAL088O07TGEC6DVZOM3839PPZ7KBLFDRRQDKBFYPS72ORXESNCEWKM9UDM6ZR6LAZXA2SW18O705C6AII8IW2BKJ1M0Z424V6WA2ORBSJ7OZLDLGW21S9NYIZOE9OOS2TZNU323E0DX9G4C16VSHMJUCC2IOJR2VCYARZ52M4RU83KDHVFXWX6JBY4BLGYV2ZR4X481UWTP81Y099276K' where id=17; -update noar tt set v1='S1S76G57X1KT93CONQSL9JR7PWAMNRZQHBFQCJFORM6PQUOIGG9AQRKCJSK5G062464L067LMRZV36N42KNUVNW06BRS6633A5670IY1ZRTEK1W7YVP56T77H7UKL8VHJKWI4TF7D5OOFXGTY887U7F5AAI1VF70RHUCF3OQ7XLRZ2N1S488W1OMNAJUVM03KBLH2EVFYUDHE50MID8PVLS75REXQP0B10ZP6DN5BVYR5A416GR2ZVBKAK0JNJ1RA' where id=17; -update noar ti set v1='S1S76G57X1KT93CONQSL9JR7PWAMNRZQHBFQCJFORM6PQUOIGG9AQRKCJSK5G062464L067LMRZV36N42KNUVNW06BRS6633A5670IY1ZRTEK1W7YVP56T77H7UKL8VHJKWI4TF7D5OOFXGTY887U7F5AAI1VF70RHUCF3OQ7XLRZ2N1S488W1OMNAJUVM03KBLH2EVFYUDHE50MID8PVLS75REXQP0B10ZP6DN5BVYR5A416GR2ZVBKAK0JNJ1RA' where id=17; -update noar tt set v2='84XUWTY0IAMVDO7BOCMH9N40N46KOI0YM8A6ELLHXG59GUS1KM1Z7FNUP8DQ80RH2GF18X5BTTVMJ6M5RPE4N32QDS9CT0FKRA2Z69QHGGZRHGMKMNRSIMIB7Z5UTMGUE54SPE7MTMZ4Y5Y50BUHE9YOTGZUMSAPYCNP25Y0J0QUM90RV5PGD21244TNMYW2KPGZ3WKR98W5A3720OW7X1UQ3MIEMHDJY6LNA6BIC1ILECNM2KUADB4F9RN6SSS15' where id=17; -update noar ti set v2='84XUWTY0IAMVDO7BOCMH9N40N46KOI0YM8A6ELLHXG59GUS1KM1Z7FNUP8DQ80RH2GF18X5BTTVMJ6M5RPE4N32QDS9CT0FKRA2Z69QHGGZRHGMKMNRSIMIB7Z5UTMGUE54SPE7MTMZ4Y5Y50BUHE9YOTGZUMSAPYCNP25Y0J0QUM90RV5PGD21244TNMYW2KPGZ3WKR98W5A3720OW7X1UQ3MIEMHDJY6LNA6BIC1ILECNM2KUADB4F9RN6SSS15' where id=17; -update noar tt set v3='ZOG31JVCR5RRBQWGR84B3X7767PQX2XEQZTMDZ3VEPTNHKRZLPBFXSIM38KFG6D1ZH1YYWMDZQ31URMY5C90KMK9C1EWKJH8520U0JGQXWRSDIF88RJ1A4WM1K95TU68H452VIJXJIQBBGESJ2QIB5N8XCWLQPWAS38DN5K9OVYER9ODZFKI2JC92QLBUOJGUADN8O4WDPKOOGA4VGFIBLQFY1M6ICJOK5D2S210NAI4SAVSTVIL594RWP9KGS555' where id=17; -update noar ti set v3='ZOG31JVCR5RRBQWGR84B3X7767PQX2XEQZTMDZ3VEPTNHKRZLPBFXSIM38KFG6D1ZH1YYWMDZQ31URMY5C90KMK9C1EWKJH8520U0JGQXWRSDIF88RJ1A4WM1K95TU68H452VIJXJIQBBGESJ2QIB5N8XCWLQPWAS38DN5K9OVYER9ODZFKI2JC92QLBUOJGUADN8O4WDPKOOGA4VGFIBLQFY1M6ICJOK5D2S210NAI4SAVSTVIL594RWP9KGS555' where id=17; -update noar tt set v0='4Z0LYXCKI25LHUKIURUNG6Y2S2E74BKW49A90PLP634NOBX6VN68BXDEURWIYDF8PRCDS1KBWZMU8LNVI201UTXZDPE5LMQUZ2GQ6L7GYLFIKAKY00K86GH32O150MOHX2CAYFSQNG077FF60CK67E5B1BY1HAOQK74T7645W6I3MSC3HFW002H2D9Y4OUPUKVQKN4SCY36G1PQCWCAEO3V9YSAM3PCSZU6XM7A8HZGVYFDKZ7BV68AJJ1CRUXFCA' where id=18; -update noar ti set v0='4Z0LYXCKI25LHUKIURUNG6Y2S2E74BKW49A90PLP634NOBX6VN68BXDEURWIYDF8PRCDS1KBWZMU8LNVI201UTXZDPE5LMQUZ2GQ6L7GYLFIKAKY00K86GH32O150MOHX2CAYFSQNG077FF60CK67E5B1BY1HAOQK74T7645W6I3MSC3HFW002H2D9Y4OUPUKVQKN4SCY36G1PQCWCAEO3V9YSAM3PCSZU6XM7A8HZGVYFDKZ7BV68AJJ1CRUXFCA' where id=18; -update noar tt set v1='CKOKYWHVQ4ZT3FRRUYASZLCTT3MKW08LE4Q5PWRA6O016BGQMM2SZ9FSBIXSU5VQLUF7ZOMSEMU0VBQGQ1017PIE2XXFJSTY9UC7V0IA68VSYQ5XPQ7PWYD6JQ09EHR6B5LA7XWK548SCVV9Q15PXONSX82C3VIC54OXTTKRNS6YUEHN08B14AARBOPQ4EWIAFHL3NLQJC15XNG4Y1FZEI1YRFGQYKJEVXPHYD6B5V695CN0MVUSTRULKIHZEYVKZ' where id=18; -update noar ti set v1='CKOKYWHVQ4ZT3FRRUYASZLCTT3MKW08LE4Q5PWRA6O016BGQMM2SZ9FSBIXSU5VQLUF7ZOMSEMU0VBQGQ1017PIE2XXFJSTY9UC7V0IA68VSYQ5XPQ7PWYD6JQ09EHR6B5LA7XWK548SCVV9Q15PXONSX82C3VIC54OXTTKRNS6YUEHN08B14AARBOPQ4EWIAFHL3NLQJC15XNG4Y1FZEI1YRFGQYKJEVXPHYD6B5V695CN0MVUSTRULKIHZEYVKZ' where id=18; -update noar tt set v2='SDRECPG8ZCNSLDA4JOPFL554CQ798XKGFEBC25HVR4TVZI6TZWVHQBZHG0KYW6AX80I9G11PRMN2Z1BWKWUFH33AWELPJJHLSP5UJ9K7C0PYBUUM7F8D1VQWKJK70C0XVDIZC1OS52GX1MUA930WG8LNIERCLAZMA0YQ55JHSZAIWTFAROX8HEEHTBV0IZMK98YK4PI6H2CL2AIBTBLWTQOSM54BFI71X4ASSO1QHCLI8OGNQLHC3HCJZO0T4PYGS' where id=18; -update noar ti set v2='SDRECPG8ZCNSLDA4JOPFL554CQ798XKGFEBC25HVR4TVZI6TZWVHQBZHG0KYW6AX80I9G11PRMN2Z1BWKWUFH33AWELPJJHLSP5UJ9K7C0PYBUUM7F8D1VQWKJK70C0XVDIZC1OS52GX1MUA930WG8LNIERCLAZMA0YQ55JHSZAIWTFAROX8HEEHTBV0IZMK98YK4PI6H2CL2AIBTBLWTQOSM54BFI71X4ASSO1QHCLI8OGNQLHC3HCJZO0T4PYGS' where id=18; -update noar tt set v3='HTOAW4FV211DWN7412E5AAWPCYQRG6JX4KSIT94WV7AEZSACPHY0NB1D05YIEARYWTTUNXXPY6D5O3DJBDA8BZ031HRKYGRGMN9K3O7E1N6HJF8WLR2TOPC9050RQ4P3YXJF5KLERWRC7H8SPGQ472UYLC5IVGHSRYMSJ14DZSDDTGG2PF4FH93JA0PTZPL7I9FAQIWAIPJD89G6A5T4PALJTKWMBIMEZRVYK1UKZJHA4S7IFJWYVNZK0DMKF6MLG' where id=18; -update noar ti set v3='HTOAW4FV211DWN7412E5AAWPCYQRG6JX4KSIT94WV7AEZSACPHY0NB1D05YIEARYWTTUNXXPY6D5O3DJBDA8BZ031HRKYGRGMN9K3O7E1N6HJF8WLR2TOPC9050RQ4P3YXJF5KLERWRC7H8SPGQ472UYLC5IVGHSRYMSJ14DZSDDTGG2PF4FH93JA0PTZPL7I9FAQIWAIPJD89G6A5T4PALJTKWMBIMEZRVYK1UKZJHA4S7IFJWYVNZK0DMKF6MLG' where id=18; -update noar tt set v0='J2J0ES29Y61EHWTCR8LAQ4R0HVHOW0JFH1VZP7M88CG0XUXMHXLU572Y63HYJ2GK3PNMKN7QVRX7AA216NU3OBFLM1815DHOAICONUP1HL25O8PMLWL7WZ4GSIXCC80DMHRL0KY8Z0Y0DMT7XQKJNZFC23LMCY47C6P09CV4TWOTQWA137HOM457HYDV1Z7W4L99RZKTF37A2S7FFI4KFSAHHSO8FINF3CN8ABSXID8M1BBCXKXD4RTLYWNLMMPW4' where id=19; -update noar ti set v0='J2J0ES29Y61EHWTCR8LAQ4R0HVHOW0JFH1VZP7M88CG0XUXMHXLU572Y63HYJ2GK3PNMKN7QVRX7AA216NU3OBFLM1815DHOAICONUP1HL25O8PMLWL7WZ4GSIXCC80DMHRL0KY8Z0Y0DMT7XQKJNZFC23LMCY47C6P09CV4TWOTQWA137HOM457HYDV1Z7W4L99RZKTF37A2S7FFI4KFSAHHSO8FINF3CN8ABSXID8M1BBCXKXD4RTLYWNLMMPW4' where id=19; -update noar tt set v1='J7DLWVOJB6YPXAF5LQ2G7NZG6FV7J5TFRVE1QH1QOFL7B6JQN407RLZBMJHJNLC837K3T7RY9M0TX8F7FNY8K4OVA86TAF1EZVHBZZEISI10NKWSXEY5K3JTI2JFPEOI6L150MZ9WFECR8F8FV8ATGYJ69QO5CISXETT0HU25FU19AZRQ0LKJC1LHZ28G83IVSSI440WFPYA1NRTYLDFUCVUV5M21AF6ZYHBV1K2MGNOXCBXR0NCBOWTJBD5QEZ61' where id=19; -update noar ti set v1='J7DLWVOJB6YPXAF5LQ2G7NZG6FV7J5TFRVE1QH1QOFL7B6JQN407RLZBMJHJNLC837K3T7RY9M0TX8F7FNY8K4OVA86TAF1EZVHBZZEISI10NKWSXEY5K3JTI2JFPEOI6L150MZ9WFECR8F8FV8ATGYJ69QO5CISXETT0HU25FU19AZRQ0LKJC1LHZ28G83IVSSI440WFPYA1NRTYLDFUCVUV5M21AF6ZYHBV1K2MGNOXCBXR0NCBOWTJBD5QEZ61' where id=19; -update noar tt set v2='K9MU7LPUUZVCEQLKTV10NJTSE4TM8B6BH2N7O9QFYVJZG869JH50TSVYMO25NDPW0OTFLJOTHZXE2ZD23FJ7KWPYOZJRLUBK0IWGW85F7VAR3GVT5CXH02BQKYUQR04YBLE4YZZK4YWZAH2LAM3D88F3TIGMZCWKK2R7O0YE5YRREWGAZWL7K3F3KMB0E4NUC8CJXBOBPZ5ARMML1NCPKN2LTCJASNBZ90LKGKM307S2WLTDJBKSYA7IGAC5FPJSW' where id=19; -update noar ti set v2='K9MU7LPUUZVCEQLKTV10NJTSE4TM8B6BH2N7O9QFYVJZG869JH50TSVYMO25NDPW0OTFLJOTHZXE2ZD23FJ7KWPYOZJRLUBK0IWGW85F7VAR3GVT5CXH02BQKYUQR04YBLE4YZZK4YWZAH2LAM3D88F3TIGMZCWKK2R7O0YE5YRREWGAZWL7K3F3KMB0E4NUC8CJXBOBPZ5ARMML1NCPKN2LTCJASNBZ90LKGKM307S2WLTDJBKSYA7IGAC5FPJSW' where id=19; -update noar tt set v3='FA0WI39W4FQI9MO5G7WD10WO7SPFYHFJUL75GLKYD1ZXHNTQPY72RXST1V17T1MNVYZUEV5O5D7QODU0USVRH4HFZ2NV694E8NBNWRCNUOLDS3SNT6FZ0GUHPS6R4E0VN5XEQZ0XFN84S9GP445NSGXRDWIMY89IYT9KSHGJMLEQZADEMWF1OY09FLT673R4FP6T2ILYINS0K8B1OVINP0V0LUPWGPC5E3M2LA0JLLB7S1B74NFZ4N8ZDIO6YPVMS' where id=19; -update noar ti set v3='FA0WI39W4FQI9MO5G7WD10WO7SPFYHFJUL75GLKYD1ZXHNTQPY72RXST1V17T1MNVYZUEV5O5D7QODU0USVRH4HFZ2NV694E8NBNWRCNUOLDS3SNT6FZ0GUHPS6R4E0VN5XEQZ0XFN84S9GP445NSGXRDWIMY89IYT9KSHGJMLEQZADEMWF1OY09FLT673R4FP6T2ILYINS0K8B1OVINP0V0LUPWGPC5E3M2LA0JLLB7S1B74NFZ4N8ZDIO6YPVMS' where id=19; -update noar tt set v0='UQQMWAL04Q831U5I6RHE4LKN2HBD5N2D1UIWDV0CFQ0EZFWJ5J2C4Q1CS29C6RAYERUBIIQ9PW1OVTMD24PUIE5GM14TSQKM4IQA8JPRNDJBAB4OGRXMETJRWHTYDUHVI6UTMZ8AZXUXN1UHG7JUD5IZE2WN7HDMVZCLQQK1LFQT9326FS4FAH9OUVHCVC1PGK27MH8X4ZD4NZIIDSFM9RJVNR8MKRO9AXFDKLM2BKMDSDNZ8ZRDWAO9GIBLJDO8B' where id=20; -update noar ti set v0='UQQMWAL04Q831U5I6RHE4LKN2HBD5N2D1UIWDV0CFQ0EZFWJ5J2C4Q1CS29C6RAYERUBIIQ9PW1OVTMD24PUIE5GM14TSQKM4IQA8JPRNDJBAB4OGRXMETJRWHTYDUHVI6UTMZ8AZXUXN1UHG7JUD5IZE2WN7HDMVZCLQQK1LFQT9326FS4FAH9OUVHCVC1PGK27MH8X4ZD4NZIIDSFM9RJVNR8MKRO9AXFDKLM2BKMDSDNZ8ZRDWAO9GIBLJDO8B' where id=20; -update noar tt set v1='5JGEBJ322PBJ2T1E9LY6ITWX648MUXPX4YYN6YM4QXSCTEJDDJCY7O2Y15WDYPJR0RIK06SO8KRN7B9783I7KJZ80C9QCC788NYLNS8BIJ8U1H3A7AIQP39M6TG81ESRQWTP7K3QM0BIIU9G0FWHYIT3DI7LQ5EEGWDHWISZFWR7BTP2NBMWQQYRAEY48S8JFBJY79M0ZHN1UP7QZJ2GBC5ZDBG0DLP1ORLMG1B0AOJ9E4IESDV9AFQTN33V4Y3Y6' where id=20; -update noar ti set v1='5JGEBJ322PBJ2T1E9LY6ITWX648MUXPX4YYN6YM4QXSCTEJDDJCY7O2Y15WDYPJR0RIK06SO8KRN7B9783I7KJZ80C9QCC788NYLNS8BIJ8U1H3A7AIQP39M6TG81ESRQWTP7K3QM0BIIU9G0FWHYIT3DI7LQ5EEGWDHWISZFWR7BTP2NBMWQQYRAEY48S8JFBJY79M0ZHN1UP7QZJ2GBC5ZDBG0DLP1ORLMG1B0AOJ9E4IESDV9AFQTN33V4Y3Y6' where id=20; -update noar tt set v2='OG9104ZOQ6WCGCLB8KY60WN6O3QOE6SXO8WL6NPVO9CQP941CZF8J1NJ7A7ZMP48KWWV4MRRLL38RU5R0P8HM4OSQEN6Z06S0IMBNSHD0T5AKOJG1YZWKI7X4MP4LZQDXJHG5ECD5IW04PCIP7NWDYOO0MVS5UFDGW6D6P96Y5JOBO3G00IIJBB7ZAR0ZJ3MFKWP1V1MXKBQGCO3L5KKHRAYC5ID4MW5Q4TUT0B4O12YMMZ2G1NZV3YUSYREHNWKS' where id=20; -update noar ti set v2='OG9104ZOQ6WCGCLB8KY60WN6O3QOE6SXO8WL6NPVO9CQP941CZF8J1NJ7A7ZMP48KWWV4MRRLL38RU5R0P8HM4OSQEN6Z06S0IMBNSHD0T5AKOJG1YZWKI7X4MP4LZQDXJHG5ECD5IW04PCIP7NWDYOO0MVS5UFDGW6D6P96Y5JOBO3G00IIJBB7ZAR0ZJ3MFKWP1V1MXKBQGCO3L5KKHRAYC5ID4MW5Q4TUT0B4O12YMMZ2G1NZV3YUSYREHNWKS' where id=20; -update noar tt set v3='G0CK9B5NB56WDNYQD7AH6WDHNMU4R8TOTR3TK2FKS6N9YOCZS5NKI0228Z5R7GWXLJZVKFT3IPF1PQSSJLVSPO6XQG07XL0XBCNP2YZFBQIMXJOCAUYLTX4C93CT01IC8OXLI9X7O4WGNS4ZZC1NVZSL1PEP4V2IA70BBYWB8LRNY820UGSSVPTC17RJ1O10DXRDIAH714UBMIV921JRIKRKP7FH64JCCAZSD64JTQ735T7EMAWQLLKWO92P2UCNP' where id=20; -update noar ti set v3='G0CK9B5NB56WDNYQD7AH6WDHNMU4R8TOTR3TK2FKS6N9YOCZS5NKI0228Z5R7GWXLJZVKFT3IPF1PQSSJLVSPO6XQG07XL0XBCNP2YZFBQIMXJOCAUYLTX4C93CT01IC8OXLI9X7O4WGNS4ZZC1NVZSL1PEP4V2IA70BBYWB8LRNY820UGSSVPTC17RJ1O10DXRDIAH714UBMIV921JRIKRKP7FH64JCCAZSD64JTQ735T7EMAWQLLKWO92P2UCNP' where id=20; -update noar tt set v0='XEKSFWW852KAAHSKEGJ48HGLX99SZGG8QW8PZ0CDRHL5X2W1TOMNSM4RNEZAE1IX4JWTYFDM9SZ9G9KTDOTMT1KFBEUYW0X6BZMBIBNTIRX0UFCM2F6E9FAME4YA4RBMDJSHTT6GUP0QVRPCFLK5XVD0V8M8RDJD5JWWH5YHFI2DTZWG6RRTO1WFPP0HZF15DS7HM4NO5DH96JZQOY01FN9LUWV0BK6E6LXBWBCLKG8BTZULMZFFLZIAEDKX975NG' where id=21; -update noar ti set v0='XEKSFWW852KAAHSKEGJ48HGLX99SZGG8QW8PZ0CDRHL5X2W1TOMNSM4RNEZAE1IX4JWTYFDM9SZ9G9KTDOTMT1KFBEUYW0X6BZMBIBNTIRX0UFCM2F6E9FAME4YA4RBMDJSHTT6GUP0QVRPCFLK5XVD0V8M8RDJD5JWWH5YHFI2DTZWG6RRTO1WFPP0HZF15DS7HM4NO5DH96JZQOY01FN9LUWV0BK6E6LXBWBCLKG8BTZULMZFFLZIAEDKX975NG' where id=21; -update noar tt set v1='QHR1UAQQ7ITT3HPA7BIQ7QN8PAPE3Y2QTYMJ3DGEAIC0B174127WG6U5FVIQ8YPNHFVHOCI0V70B5WLEC1QPS4NDGEO90KHRH3P617ZB439KSQ10L2TIALZCDA6QVONE27720L5W4JBZBJNCQIX5DJGRRZMSL4IS68VTDE7Y6RZ7FS2RP7F6DMZ2RSVEREI4W9XSL875K5IEOMKSHJYMXCYIRJ22N5O9DXZLEB8UZIQWOIN3O10D2J7YEBF5VWEFF' where id=21; -update noar ti set v1='QHR1UAQQ7ITT3HPA7BIQ7QN8PAPE3Y2QTYMJ3DGEAIC0B174127WG6U5FVIQ8YPNHFVHOCI0V70B5WLEC1QPS4NDGEO90KHRH3P617ZB439KSQ10L2TIALZCDA6QVONE27720L5W4JBZBJNCQIX5DJGRRZMSL4IS68VTDE7Y6RZ7FS2RP7F6DMZ2RSVEREI4W9XSL875K5IEOMKSHJYMXCYIRJ22N5O9DXZLEB8UZIQWOIN3O10D2J7YEBF5VWEFF' where id=21; -update noar tt set v2='8JJARDA8JIMXNOMZO3QJT0PV7YKFK3ZP9YX8SU3XP1CAWS8XE1AE2KXT5O7V6LJIMJZOGVW7APZG40BR5C46LO54G4KR13VCXUJ60FZEIIOU9I7WZD08QVY6KDUBKL90FHUP5H3ZC6F2OITKSHW5RLF3BGYD3F7W64KHWTCB1FBWP0U42YFTI81PRGN0WSJOL9CPF3WZ0XP0LKI8BL9DHGJD4X2HAYIVCBBEA1RCCCGPADBM0SXX7JAFJHM6VTS6X' where id=21; -update noar ti set v2='8JJARDA8JIMXNOMZO3QJT0PV7YKFK3ZP9YX8SU3XP1CAWS8XE1AE2KXT5O7V6LJIMJZOGVW7APZG40BR5C46LO54G4KR13VCXUJ60FZEIIOU9I7WZD08QVY6KDUBKL90FHUP5H3ZC6F2OITKSHW5RLF3BGYD3F7W64KHWTCB1FBWP0U42YFTI81PRGN0WSJOL9CPF3WZ0XP0LKI8BL9DHGJD4X2HAYIVCBBEA1RCCCGPADBM0SXX7JAFJHM6VTS6X' where id=21; -update noar tt set v3='EDZ4EMGEZXM3X45IY3C778BVXZJ8X8RW3QEE1WKSB1R1YC69M4B4NZPNMXHO88EQEB18GLFXJLV2VMQUUNNLOAUG3PGUQPOUMP6O3BFNU3A0G7LWSORTEZZJCGRZOL5XIKUKOR2NJMBQF9WEXOLG3WC0PMC2RRRKDLSH8GBVG09SZJIHH5B4CENXV9QQY612ME0C8F5QJ034HV7JDES0NPVH1444FWTGT98YG3TUHDZBICNRM7RNQBG3GUGBUHQ6P' where id=21; -update noar ti set v3='EDZ4EMGEZXM3X45IY3C778BVXZJ8X8RW3QEE1WKSB1R1YC69M4B4NZPNMXHO88EQEB18GLFXJLV2VMQUUNNLOAUG3PGUQPOUMP6O3BFNU3A0G7LWSORTEZZJCGRZOL5XIKUKOR2NJMBQF9WEXOLG3WC0PMC2RRRKDLSH8GBVG09SZJIHH5B4CENXV9QQY612ME0C8F5QJ034HV7JDES0NPVH1444FWTGT98YG3TUHDZBICNRM7RNQBG3GUGBUHQ6P' where id=21; -update noar tt set v0='WO3CQCJRAK0VLQSJVOHQJYAF2JO2IG6BP8GYAUKA84PENPWV2ZHN46UYD7FY6DOZ0Y7HPI4B7343QHNQ4M3POFQ2CJNCLEQQ4GSPNNEBP7S0AWPP43U3PEWLN08GGR6GPCO012YE53AX8EY5NQ5GBUFDJX01XN6C3ALHOD3I2X3SKXHW6EQP8JGDNUEEYTHRVBTZZKCXKVYA3FDKSQCVO9B7QBJZATATZMXRPK9QNG9KB1HATZZ6Z6YYEROBSBY69' where id=22; -update noar ti set v0='WO3CQCJRAK0VLQSJVOHQJYAF2JO2IG6BP8GYAUKA84PENPWV2ZHN46UYD7FY6DOZ0Y7HPI4B7343QHNQ4M3POFQ2CJNCLEQQ4GSPNNEBP7S0AWPP43U3PEWLN08GGR6GPCO012YE53AX8EY5NQ5GBUFDJX01XN6C3ALHOD3I2X3SKXHW6EQP8JGDNUEEYTHRVBTZZKCXKVYA3FDKSQCVO9B7QBJZATATZMXRPK9QNG9KB1HATZZ6Z6YYEROBSBY69' where id=22; -update noar tt set v1='BT3TZ0D8XUOV3YHHAUQ3ILBZ0049B8A8JWAQK07GTIMODJITLWBQ39OWKGTBTCOAIFN0UPV8YBJCRP6MSJG81SCDN03HBRM8HT4NUN0CFL57N6IITWA5ZYLK7F9JCKHZGL4EP1QELKLA0XUIEZ4J4L4CC2PUGG836LEKA3L482KCKCIZCZ4WWI9DYLTMRERWGRCZRJU14ECX07Z835ZOILKISVDXR57AHYPE4SN7LBRHIOED69TQ6RT0R9SSG16HB' where id=22; -update noar ti set v1='BT3TZ0D8XUOV3YHHAUQ3ILBZ0049B8A8JWAQK07GTIMODJITLWBQ39OWKGTBTCOAIFN0UPV8YBJCRP6MSJG81SCDN03HBRM8HT4NUN0CFL57N6IITWA5ZYLK7F9JCKHZGL4EP1QELKLA0XUIEZ4J4L4CC2PUGG836LEKA3L482KCKCIZCZ4WWI9DYLTMRERWGRCZRJU14ECX07Z835ZOILKISVDXR57AHYPE4SN7LBRHIOED69TQ6RT0R9SSG16HB' where id=22; -update noar tt set v2='2YPKLIR4DE1LHKJEJ3XU2WCD96A5G977FZ9Z1WB93ED2GWPT7RRPX2E6SYR0A9ZMG2PGAXYGDIQJ7I67CTVF5ZCL810X1N3HTY3CRC7N4PMKU5DQ3BVB286EK5D0FLZRFB2Z3LIOJQL4R2GU5YZH8Y9R57SRJ4KFLX97D0UVSWLRD7WI00VB2GHDDJT7FJPGIZVV0LLLI3MZRUDEI012Z696XLNSBAHEH7B0ND0LVPBD53WMUSE9V0XYZ4GCGHG7U' where id=22; -update noar ti set v2='2YPKLIR4DE1LHKJEJ3XU2WCD96A5G977FZ9Z1WB93ED2GWPT7RRPX2E6SYR0A9ZMG2PGAXYGDIQJ7I67CTVF5ZCL810X1N3HTY3CRC7N4PMKU5DQ3BVB286EK5D0FLZRFB2Z3LIOJQL4R2GU5YZH8Y9R57SRJ4KFLX97D0UVSWLRD7WI00VB2GHDDJT7FJPGIZVV0LLLI3MZRUDEI012Z696XLNSBAHEH7B0ND0LVPBD53WMUSE9V0XYZ4GCGHG7U' where id=22; -update noar tt set v3='WOOXVNLOMONDMCGL3E3K673KPZBDZ8IV2ALYTDZAS2BCZYETLJO9XSFWLA1IS12RPPAZU17PFULYIBPLA12BQPX5UA47JCRISP4BMDSHGTSB6N2D339YNZRLM6PI6EST9YBQWW8IDGX5WXCLGVPH3BGADDILS78BIN1UO63XXGTE4SAIZ2OCNKLZ7MW9MY6PG80KGHM3769U9QVP7SGCXQSQG6INEFRFL5W5G6TEHAM00KXF80C7GKC1Z85R7CKJU' where id=22; -update noar ti set v3='WOOXVNLOMONDMCGL3E3K673KPZBDZ8IV2ALYTDZAS2BCZYETLJO9XSFWLA1IS12RPPAZU17PFULYIBPLA12BQPX5UA47JCRISP4BMDSHGTSB6N2D339YNZRLM6PI6EST9YBQWW8IDGX5WXCLGVPH3BGADDILS78BIN1UO63XXGTE4SAIZ2OCNKLZ7MW9MY6PG80KGHM3769U9QVP7SGCXQSQG6INEFRFL5W5G6TEHAM00KXF80C7GKC1Z85R7CKJU' where id=22; -update noar tt set v0='P7RD9WWB4R1TALVG2A6FVUCDFGTSPD4ZEPB896GSLWSCNS9BQSLXKLPDB7I8NDWYHTLR17JF9HXDFKLU0EIVR1ZS7UWXZYIAUYGJD00WC2V6GD1PLRHLTBUMR30G9FTVJSE0C1D4ZLG0IP8ZV7QX3BH18F3DX01OR0TOKWQMEA7LKJ56Q6LS76JU8CN30T4K5JGF9OUXAOTOLLQZCBK3LHZW1X6OPY7Y003HXGEI3JK9IHXFGWDARVBHIXQG8KQAE' where id=23; -update noar ti set v0='P7RD9WWB4R1TALVG2A6FVUCDFGTSPD4ZEPB896GSLWSCNS9BQSLXKLPDB7I8NDWYHTLR17JF9HXDFKLU0EIVR1ZS7UWXZYIAUYGJD00WC2V6GD1PLRHLTBUMR30G9FTVJSE0C1D4ZLG0IP8ZV7QX3BH18F3DX01OR0TOKWQMEA7LKJ56Q6LS76JU8CN30T4K5JGF9OUXAOTOLLQZCBK3LHZW1X6OPY7Y003HXGEI3JK9IHXFGWDARVBHIXQG8KQAE' where id=23; -update noar tt set v1='B2SHAL8VGJ1IQRWMPW9IGOVRRVYG2S9O7BALTD7UW60V3FV9OMLX1DR4QC6RQURGDBQU5UVVIN1L615P7P9CBKNDOIG5Y0Q2DP1I8R92SVG5JQGFBX65UR1Y280GPXVBK5W0GI42QFO7HPV65LDOBR9GDNQA8AIXQT3F6RXFVJME435BQ8EKACD9F0H2LWPY2671W93L1R4PW6FQVMDDB2DYE554T4YL9V5GJRYLDBJ7MUF53US5AYBPKHJAYCO81' where id=23; -update noar ti set v1='B2SHAL8VGJ1IQRWMPW9IGOVRRVYG2S9O7BALTD7UW60V3FV9OMLX1DR4QC6RQURGDBQU5UVVIN1L615P7P9CBKNDOIG5Y0Q2DP1I8R92SVG5JQGFBX65UR1Y280GPXVBK5W0GI42QFO7HPV65LDOBR9GDNQA8AIXQT3F6RXFVJME435BQ8EKACD9F0H2LWPY2671W93L1R4PW6FQVMDDB2DYE554T4YL9V5GJRYLDBJ7MUF53US5AYBPKHJAYCO81' where id=23; -update noar tt set v2='8IEOLDVO1OVED1QFIOBQBVI8V4T0QATA2PXS5Y83KGI58K0D6CDV21XS3MI7YRG1PW9AUVEQ7PXN0J75HIM7QQTH15YI7CPIPYON9DL4IS8IH6CJ6ZLFA1GGT3I6VG3F7A6VPNCTOOS0QM1WKL5HFFKY3GUF4852RWJJIR4L04VKZNIBXZCTJ4VZHKXK1ZKLL149S1024S4IPIRKCCNGKOTVF5WYDQ6PXIPS0AEPGP41EDE9M0E2DTUZII0JRWLKG' where id=23; -update noar ti set v2='8IEOLDVO1OVED1QFIOBQBVI8V4T0QATA2PXS5Y83KGI58K0D6CDV21XS3MI7YRG1PW9AUVEQ7PXN0J75HIM7QQTH15YI7CPIPYON9DL4IS8IH6CJ6ZLFA1GGT3I6VG3F7A6VPNCTOOS0QM1WKL5HFFKY3GUF4852RWJJIR4L04VKZNIBXZCTJ4VZHKXK1ZKLL149S1024S4IPIRKCCNGKOTVF5WYDQ6PXIPS0AEPGP41EDE9M0E2DTUZII0JRWLKG' where id=23; -update noar tt set v3='GCNB085XUZ0GZ5G66ISVJHQBO3WG50I82MDXJGSVC3WZWL7ZICYR4I4662CWM3NPGLXQ2DWLSCVXHQZEM76LJG2EJEGMSZ8E4M9LNF1FOT9J1LXEVC0V1RD53437SU5TIRUI9ULAG6ZNY8BP9VR2T4RJCGT9VFOB2F53XAT7IA69WCNKNA4LOCCNSS9GE5C3ZL6N9SJ31Y107578R3KGWZVHUDG7C941UTEF22LKVKQEJBN9SVDS93G7UYTQC320X' where id=23; -update noar ti set v3='GCNB085XUZ0GZ5G66ISVJHQBO3WG50I82MDXJGSVC3WZWL7ZICYR4I4662CWM3NPGLXQ2DWLSCVXHQZEM76LJG2EJEGMSZ8E4M9LNF1FOT9J1LXEVC0V1RD53437SU5TIRUI9ULAG6ZNY8BP9VR2T4RJCGT9VFOB2F53XAT7IA69WCNKNA4LOCCNSS9GE5C3ZL6N9SJ31Y107578R3KGWZVHUDG7C941UTEF22LKVKQEJBN9SVDS93G7UYTQC320X' where id=23; -update noar tt set v0='E0XGOP4HRH8U2O2XGZUOTBFXIRMEJY9MSJZ0JOIVE81AIFIHJSL9YAIFYYJCS4M3L4J3L0QVPNH4WPWCECGX98QSMY90VTPFMXBL2LRZZRBNIY4WAMI17A7Z1Q5BJRIN9F0QFX7W5KX9RQB1CZ3JKY6J4ODA5PMP3CE353G50YOU3W2Z1O39Y7UDXA9OVK1CTDW53REDY0K5ZIFDF750L19I45ZDRX5B3R1UZJ8UA65NL5RL71B56GYI0B2WFYLTB' where id=24; -update noar ti set v0='E0XGOP4HRH8U2O2XGZUOTBFXIRMEJY9MSJZ0JOIVE81AIFIHJSL9YAIFYYJCS4M3L4J3L0QVPNH4WPWCECGX98QSMY90VTPFMXBL2LRZZRBNIY4WAMI17A7Z1Q5BJRIN9F0QFX7W5KX9RQB1CZ3JKY6J4ODA5PMP3CE353G50YOU3W2Z1O39Y7UDXA9OVK1CTDW53REDY0K5ZIFDF750L19I45ZDRX5B3R1UZJ8UA65NL5RL71B56GYI0B2WFYLTB' where id=24; -update noar tt set v1='GTN8H25Q84ZVX3PM23GR96V21BLZ7L3RBT28LYMX40YRD042JIROH9LFEPXH1ATZSU98G7HHVVQKS5BZ87ZRT9MOU8UBNJI80F4RCZXEN521C3MGEHLYL0DNEPORII3BWPO35U63IWB58KZLE6LDIJJE321ESWQAMGTL46H4J306GF7IEAZPXQ8HNGAM7DUO9HF6H78OMP4N4816HJY8QWVE0JEN0ULTKEOUCH5MFVIDDO3NZQKUUMKDKYIMAYAD8' where id=24; -update noar ti set v1='GTN8H25Q84ZVX3PM23GR96V21BLZ7L3RBT28LYMX40YRD042JIROH9LFEPXH1ATZSU98G7HHVVQKS5BZ87ZRT9MOU8UBNJI80F4RCZXEN521C3MGEHLYL0DNEPORII3BWPO35U63IWB58KZLE6LDIJJE321ESWQAMGTL46H4J306GF7IEAZPXQ8HNGAM7DUO9HF6H78OMP4N4816HJY8QWVE0JEN0ULTKEOUCH5MFVIDDO3NZQKUUMKDKYIMAYAD8' where id=24; -update noar tt set v2='4H0K4RFAOMPR6OUAYXUOH1WJJVP9T745TF45OM5KM8YYBDP1YM56V0C0IJWICETWUXMP6ZX1AANF2314I749MKWBC3ZJO9RJB7AZJIWERIX3BYFL76QB95H1U64IVFPWXEHZV56SPF732NN30GECWXHW8W2ZXATS1EH8N53WDKSDSFZ0AL2CGZ1S7EC81IXUUU7SQ8Q47E3CG8DVB5J6WC0IY4PDX7CB36CENMHN33X6YKR2EQ8IMR8F2AVDSQZTP' where id=24; -update noar ti set v2='4H0K4RFAOMPR6OUAYXUOH1WJJVP9T745TF45OM5KM8YYBDP1YM56V0C0IJWICETWUXMP6ZX1AANF2314I749MKWBC3ZJO9RJB7AZJIWERIX3BYFL76QB95H1U64IVFPWXEHZV56SPF732NN30GECWXHW8W2ZXATS1EH8N53WDKSDSFZ0AL2CGZ1S7EC81IXUUU7SQ8Q47E3CG8DVB5J6WC0IY4PDX7CB36CENMHN33X6YKR2EQ8IMR8F2AVDSQZTP' where id=24; -update noar tt set v3='3I2P6SMLR1LY6PGGU867WSDIUE2YB9ACVPKCDLRIHIXM6VSOPS2JMU8XZ98VUBAOSVWUJ3YW2N5KZP2JFDTAV5E51VDZIHKABJLDR717WRUVBM4WKBN7SBDR5BIZUAI3V7GKTWLZYFVDO6T93XV70RUCTQ9J629W4WAE4G6717CC0BFYAOLVI0L95MABQW6E099WB4JK8R5841QV7DEG76AMXANKB41OKL3N7CKTCUF9J8E2WK9BTCLX4JLWBMB0Z' where id=24; -update noar ti set v3='3I2P6SMLR1LY6PGGU867WSDIUE2YB9ACVPKCDLRIHIXM6VSOPS2JMU8XZ98VUBAOSVWUJ3YW2N5KZP2JFDTAV5E51VDZIHKABJLDR717WRUVBM4WKBN7SBDR5BIZUAI3V7GKTWLZYFVDO6T93XV70RUCTQ9J629W4WAE4G6717CC0BFYAOLVI0L95MABQW6E099WB4JK8R5841QV7DEG76AMXANKB41OKL3N7CKTCUF9J8E2WK9BTCLX4JLWBMB0Z' where id=24; -update noar tt set v0='39XUFD29HM0I9FUXGQ358TF81A48FX1PRDJGBG319N73OJMWFSRRMOWOUXVX0HVIUPHFFELN3NZW0QX24JU0DAGVXGOIBR5BEIJIWR5EBOEARWPTK3SLBE47GG9QQ04USTVKN290H8MSPS9P6AON0H6Q9M4K8LXFIEZB90JXZZZ8UFOA1Z5MKYG2X186VRW5454S9YOTMMAQEG3WWUK4UY0ZTWHNR4ZFIEN2QA5CNW4SK10S1TH8XGOUEBNM8I4LX' where id=25; -update noar ti set v0='39XUFD29HM0I9FUXGQ358TF81A48FX1PRDJGBG319N73OJMWFSRRMOWOUXVX0HVIUPHFFELN3NZW0QX24JU0DAGVXGOIBR5BEIJIWR5EBOEARWPTK3SLBE47GG9QQ04USTVKN290H8MSPS9P6AON0H6Q9M4K8LXFIEZB90JXZZZ8UFOA1Z5MKYG2X186VRW5454S9YOTMMAQEG3WWUK4UY0ZTWHNR4ZFIEN2QA5CNW4SK10S1TH8XGOUEBNM8I4LX' where id=25; -update noar tt set v1='MERR3SYL0LYN8XNCONSVN6JYOFC7XLA1HCITK123KOTSMJJHT8ATYENA9DH85I2ODFOCX9L891SJ8Z42D94MVGFN9BRSCNWV78A8O9MDKRP9CB0AJKSHBMA3R8K635ZXAJT0OGOG1OF8IRFIIIG4H5NVYJGG44U3UKPKAZ4EXB2ZTAAUUUUPBET76UF74R4NNDBPIWT8SM9YS37UMGWGFVG7SXMA7080Y12EEUJYYCZZZ7KBCJRS1RJ6BBX0UP05R' where id=25; -update noar ti set v1='MERR3SYL0LYN8XNCONSVN6JYOFC7XLA1HCITK123KOTSMJJHT8ATYENA9DH85I2ODFOCX9L891SJ8Z42D94MVGFN9BRSCNWV78A8O9MDKRP9CB0AJKSHBMA3R8K635ZXAJT0OGOG1OF8IRFIIIG4H5NVYJGG44U3UKPKAZ4EXB2ZTAAUUUUPBET76UF74R4NNDBPIWT8SM9YS37UMGWGFVG7SXMA7080Y12EEUJYYCZZZ7KBCJRS1RJ6BBX0UP05R' where id=25; -update noar tt set v2='2FO4NAM2C26B5U1BF8UQT1MCIDRIC2QSBTD8XF3A3OC8B1NQFJDQWKO3UMJ288N3JFJIQ5WPUOF9C059X9G1ZF7GL91L83EH2P9TI7MJTWUW0AMFU6B694ZRCBRU40HJ0EX6G06GNMCDN6WJ65BVOJHASA2KYDLE0T2JIP0R01GG03SHPK4RE2R2CS3TPUWMOO0KLG08BFG3NTSOZV5FVAB2OXZQHYSQMUJ1EKET0RE5JBTS9EQMLUIEJSMT7LUGO' where id=25; -update noar ti set v2='2FO4NAM2C26B5U1BF8UQT1MCIDRIC2QSBTD8XF3A3OC8B1NQFJDQWKO3UMJ288N3JFJIQ5WPUOF9C059X9G1ZF7GL91L83EH2P9TI7MJTWUW0AMFU6B694ZRCBRU40HJ0EX6G06GNMCDN6WJ65BVOJHASA2KYDLE0T2JIP0R01GG03SHPK4RE2R2CS3TPUWMOO0KLG08BFG3NTSOZV5FVAB2OXZQHYSQMUJ1EKET0RE5JBTS9EQMLUIEJSMT7LUGO' where id=25; -update noar tt set v3='HMMKT3RWDO07HHXH2AKK4EA8O3I5O3NS1A1TXSZ6V48T9ML8CP30OQNDXQKQBG58YLH8ASDQ8L27GZGDHEAKS2ZUGEMX6P3GADT7L0N53LZSV8SDBA67PT1HO1VQCFYKEBIX8H8E7X58QUDLV8NHLDVZDJDEVM44XI4R5NTBNPAM5J2ATBHSZBKIIM9IQONCEHXOIBGRJTWT54TDK1PKUXZ0HETMU73EJQFOQFUCFOWWDX6NH1GX5B34VWK0GICEG' where id=25; -update noar ti set v3='HMMKT3RWDO07HHXH2AKK4EA8O3I5O3NS1A1TXSZ6V48T9ML8CP30OQNDXQKQBG58YLH8ASDQ8L27GZGDHEAKS2ZUGEMX6P3GADT7L0N53LZSV8SDBA67PT1HO1VQCFYKEBIX8H8E7X58QUDLV8NHLDVZDJDEVM44XI4R5NTBNPAM5J2ATBHSZBKIIM9IQONCEHXOIBGRJTWT54TDK1PKUXZ0HETMU73EJQFOQFUCFOWWDX6NH1GX5B34VWK0GICEG' where id=25; -update noar tt set v0='C2RS2NLODKUCV4IKB38BZSIHZYYE1Q0SCKCFB49GGMP3TRRN6ZP2CX2C76IGBHQ11T6TTQ66N9QPF1V7K2CLSAJM6PKARLJWAEY646O4VFW0SCY353RXAAYYOY3JPJ1Q0B203GDOQT7FYLFIYIP6C1E0XZW3CUU3BSQNF5YDPWWACE4I2Y6D9J1C08DQAORO4IWRSGU9YC6KF1JL7HFVAFJ5IIF0IUDZ61OQRX9UMAE150YJF98U5EJOYF0GJ4DAU' where id=26; -update noar ti set v0='C2RS2NLODKUCV4IKB38BZSIHZYYE1Q0SCKCFB49GGMP3TRRN6ZP2CX2C76IGBHQ11T6TTQ66N9QPF1V7K2CLSAJM6PKARLJWAEY646O4VFW0SCY353RXAAYYOY3JPJ1Q0B203GDOQT7FYLFIYIP6C1E0XZW3CUU3BSQNF5YDPWWACE4I2Y6D9J1C08DQAORO4IWRSGU9YC6KF1JL7HFVAFJ5IIF0IUDZ61OQRX9UMAE150YJF98U5EJOYF0GJ4DAU' where id=26; -update noar tt set v1='0YJVHYUJ973HRJIABAMPAX8K6TWXBNUK4LMBY5IIHLQL70JPVCXH2F18RJ1TNUMEHAMATQ4EU2R81PULB9YSW8MW67RX7MD3K8J2YHSHNTO1BZOMRTNJ1ZXUSOHCHDV518JWPFHIZXCLALXAJ7T2TONWTVJ0RTXQJAIXFKYYPTYF3LPZTNPR8TLBYNFAI1QVRNXVRPDM0B2JDJ5ANSHKLITMTQTDOG7MPYCVMVVSKU0UV8O74F4W9XWZRH6GMCZWT' where id=26; -update noar ti set v1='0YJVHYUJ973HRJIABAMPAX8K6TWXBNUK4LMBY5IIHLQL70JPVCXH2F18RJ1TNUMEHAMATQ4EU2R81PULB9YSW8MW67RX7MD3K8J2YHSHNTO1BZOMRTNJ1ZXUSOHCHDV518JWPFHIZXCLALXAJ7T2TONWTVJ0RTXQJAIXFKYYPTYF3LPZTNPR8TLBYNFAI1QVRNXVRPDM0B2JDJ5ANSHKLITMTQTDOG7MPYCVMVVSKU0UV8O74F4W9XWZRH6GMCZWT' where id=26; -update noar tt set v2='2747KCLKVF755VLZH2CJHIYL9J2Q5SXIDLPS0I23X84FQOUDAIJVIPRN6777R6U9LPHOMSFNS3PX8F6TCXTQNUQ0DKQ2WI4ADAMBSWU7384JYJDCF781LPELGIGNG607DHZXEHDUL6WGV59SGFY9EF4F98AL15OJPGWATGR4CVQM5P8YP86XMVT5S94REEDUA60VSYCKL7DIBK6ASM3YB7O7TK15DWDYBOPB8PC2RID4D6QUTJJPPAL7X55V968UN' where id=26; -update noar ti set v2='2747KCLKVF755VLZH2CJHIYL9J2Q5SXIDLPS0I23X84FQOUDAIJVIPRN6777R6U9LPHOMSFNS3PX8F6TCXTQNUQ0DKQ2WI4ADAMBSWU7384JYJDCF781LPELGIGNG607DHZXEHDUL6WGV59SGFY9EF4F98AL15OJPGWATGR4CVQM5P8YP86XMVT5S94REEDUA60VSYCKL7DIBK6ASM3YB7O7TK15DWDYBOPB8PC2RID4D6QUTJJPPAL7X55V968UN' where id=26; -update noar tt set v3='6TERZ9M8DGQ3HYD4VLLKH9LKGNSS75S6ZFKDZBA8W1XI5XVB4VMR8UQLFNNDNYWBU71WU2ZDKCOBTEP1O9Y516421LCE8CEU7V1U71KMZQ38ASIVUV6D19YHS1DNX675BYM07C20FEI6AQAKREPQJDDRZ37AAG01C2A1K2TQJ8Z6MY2VGW51MDA765QUT6PJ1U96JVZAMZ0OGZUDNQL68105YYSKI8OGYNKRQ9LNXWRX8PY5ZC5L79KG251CKG7XP' where id=26; -update noar ti set v3='6TERZ9M8DGQ3HYD4VLLKH9LKGNSS75S6ZFKDZBA8W1XI5XVB4VMR8UQLFNNDNYWBU71WU2ZDKCOBTEP1O9Y516421LCE8CEU7V1U71KMZQ38ASIVUV6D19YHS1DNX675BYM07C20FEI6AQAKREPQJDDRZ37AAG01C2A1K2TQJ8Z6MY2VGW51MDA765QUT6PJ1U96JVZAMZ0OGZUDNQL68105YYSKI8OGYNKRQ9LNXWRX8PY5ZC5L79KG251CKG7XP' where id=26; -update noar tt set v0='QKZ3UMFFSK138ITH538YKUOI35AXGMN8XGPO964RMVJSBVQU5ESKNZPVJCI112S76BDX2HNB93FMDP2PA6KEKYM7T7CAXU284MWPC58XTUDGFO20EZDT8Q6U33W5QSQ3KGRF7XNE62N8TLMPZQJSXMRY90P5NVLG3655TGY63T7QFF09OXF4UVJB65PDMYI3429FR0V1PBWCO6R6E3DB1NGM427UPPKL6ENXKEI2AAHLVL2P1EKZHZWTTZ8JR21UF' where id=27; -update noar ti set v0='QKZ3UMFFSK138ITH538YKUOI35AXGMN8XGPO964RMVJSBVQU5ESKNZPVJCI112S76BDX2HNB93FMDP2PA6KEKYM7T7CAXU284MWPC58XTUDGFO20EZDT8Q6U33W5QSQ3KGRF7XNE62N8TLMPZQJSXMRY90P5NVLG3655TGY63T7QFF09OXF4UVJB65PDMYI3429FR0V1PBWCO6R6E3DB1NGM427UPPKL6ENXKEI2AAHLVL2P1EKZHZWTTZ8JR21UF' where id=27; -update noar tt set v1='7MN2QHZPXVOVQJT9SHV3QMOMXWMZLS3M6AX041N90X75KZYN8UNK4VBIA2EZ1FADC0E2AWPRS61FAB080IJFRQ5M6J8LEUYTITAA3QRPS5CEXEZ3BQIQMPD4JNJY8XIM46NV2GMOUO4W1NQ7OYDM2D0HI8NAMSYHJQJH0FFBC1172S5VYQ6Z1VOU0WFAM6WAGLJ25KPK1Q5YUNZJK09B8NLK6HNKY5GPCNFYAGS5GFN2WIWH8ZZ5JLXH2KSSIO9KD' where id=27; -update noar ti set v1='7MN2QHZPXVOVQJT9SHV3QMOMXWMZLS3M6AX041N90X75KZYN8UNK4VBIA2EZ1FADC0E2AWPRS61FAB080IJFRQ5M6J8LEUYTITAA3QRPS5CEXEZ3BQIQMPD4JNJY8XIM46NV2GMOUO4W1NQ7OYDM2D0HI8NAMSYHJQJH0FFBC1172S5VYQ6Z1VOU0WFAM6WAGLJ25KPK1Q5YUNZJK09B8NLK6HNKY5GPCNFYAGS5GFN2WIWH8ZZ5JLXH2KSSIO9KD' where id=27; -update noar tt set v2='SML8WRDMKMUL2UQXZWCZFKSEFR9CIZ47Q5D6X7GOPHZKFY0167QNASXF6MSXWXYFNT2FS575PNR6I6OL4YCFLN1SV5IYJMZWBBJHVEUL1V8BPWRNIKY80J0KQ9N4PAFTO8ZQJ3MFL89U6400MVCEP410A7KPQU4RTTX3OZ7XHN8WJYMTKSP9QLM5PNDVQBVXGAA8B5FMO4PXXIXXSFVNEDZDNAQB4XYTEBLJT933EWAHO4IXDM1FSWCA8DQO0O0SP' where id=27; -update noar ti set v2='SML8WRDMKMUL2UQXZWCZFKSEFR9CIZ47Q5D6X7GOPHZKFY0167QNASXF6MSXWXYFNT2FS575PNR6I6OL4YCFLN1SV5IYJMZWBBJHVEUL1V8BPWRNIKY80J0KQ9N4PAFTO8ZQJ3MFL89U6400MVCEP410A7KPQU4RTTX3OZ7XHN8WJYMTKSP9QLM5PNDVQBVXGAA8B5FMO4PXXIXXSFVNEDZDNAQB4XYTEBLJT933EWAHO4IXDM1FSWCA8DQO0O0SP' where id=27; -update noar tt set v3='IVBDS3VZRB6GHU1K43OYTRCVMV4AA2H9X0J4KIXXA332YPLWT5PKP6U00OAC806XSYP621EF787D9XX0VMN5PF5EK239JH71GNGD6OB7XV7XI0W7AKET1GHA7MLSJROJB8IDMFWBIQFGLNGKO3UULYQJHR6DJ4GGYO4EDQI086NRHRYPE4OI4LNQINA6JFT10H3BMUFWUY3W9QSC316VBF6LMUS8352Z7COHUWRZO6LX13DE1W94KUR08U1PPFFZ6' where id=27; -update noar ti set v3='IVBDS3VZRB6GHU1K43OYTRCVMV4AA2H9X0J4KIXXA332YPLWT5PKP6U00OAC806XSYP621EF787D9XX0VMN5PF5EK239JH71GNGD6OB7XV7XI0W7AKET1GHA7MLSJROJB8IDMFWBIQFGLNGKO3UULYQJHR6DJ4GGYO4EDQI086NRHRYPE4OI4LNQINA6JFT10H3BMUFWUY3W9QSC316VBF6LMUS8352Z7COHUWRZO6LX13DE1W94KUR08U1PPFFZ6' where id=27; -update noar tt set v0='ZKST3LOJ5JHA3RGIMD9WXF2V734DMMHHO34ZAQCFA5LGC8QJJTKVWIVD11ZOK51QB5ZURZ6LYEL171UBWW4MTDZZ4JN4XCU5NIHERVBUR0YFXPWKV0GW7TYX26PEI69RHUO4QU0FE06T4YKF2NJQXX3U8KZ6J19P2EYGZ8IMRN2T18EY219CN9A3R92EZ4HWVZC73GFAG9FX6EY0DD1ZBM8N0YQVJFLM4KZTH9Z39AQ1J1AD4IZOWPF00TZM32RPO' where id=28; -update noar ti set v0='ZKST3LOJ5JHA3RGIMD9WXF2V734DMMHHO34ZAQCFA5LGC8QJJTKVWIVD11ZOK51QB5ZURZ6LYEL171UBWW4MTDZZ4JN4XCU5NIHERVBUR0YFXPWKV0GW7TYX26PEI69RHUO4QU0FE06T4YKF2NJQXX3U8KZ6J19P2EYGZ8IMRN2T18EY219CN9A3R92EZ4HWVZC73GFAG9FX6EY0DD1ZBM8N0YQVJFLM4KZTH9Z39AQ1J1AD4IZOWPF00TZM32RPO' where id=28; -update noar tt set v1='8LH8BNWU4CFBN15JMKI8I0TVJN5EZ4FK9AE8PIPRJ2JOM03E81MEBBY2VG4VGGAIPFO6B1JEAVRQ96PQ8EE4NTT1YUKHXMPE0AHIE16CY0WS2Q9UFZ2ZTNW01MY34EK5QB04GHSJKW9OX5YAKM2PFUWAPEZDT7W16X5SRIOV7ZCDYUU4KGLL5L5HLCZZU60GGW68ZQRM2QBDJGWRTIEYLYHC3T8695R1HE6KAQGA2VDUJKIQTJ0RVXVI3PSDCBQ59' where id=28; -update noar ti set v1='8LH8BNWU4CFBN15JMKI8I0TVJN5EZ4FK9AE8PIPRJ2JOM03E81MEBBY2VG4VGGAIPFO6B1JEAVRQ96PQ8EE4NTT1YUKHXMPE0AHIE16CY0WS2Q9UFZ2ZTNW01MY34EK5QB04GHSJKW9OX5YAKM2PFUWAPEZDT7W16X5SRIOV7ZCDYUU4KGLL5L5HLCZZU60GGW68ZQRM2QBDJGWRTIEYLYHC3T8695R1HE6KAQGA2VDUJKIQTJ0RVXVI3PSDCBQ59' where id=28; -update noar tt set v2='20S46Y0P3AF4JSHJ4Y1J1WAFG71GHGTWUMKCKI6CQAF4V3CFR9XMTJ2YUTTB0ZTU6CLYPUVLYIVE7MRCKJN76BBB1AUK2OX6UASIQ5H47DDK4DJ36B39GQEXECHQZRUKYJUD5UTQ66IXA5STJFGOP2D3AJU8YGAJ1X5L7XGACIVVCYVW6NBFBY9P85UBC6MI9PXQ06VJ0ZS6OFCDY7M1YBURMZBIWFGPRO5J5FH0P8S7G1SD08BA0VIW9JEBRLUUZ' where id=28; -update noar ti set v2='20S46Y0P3AF4JSHJ4Y1J1WAFG71GHGTWUMKCKI6CQAF4V3CFR9XMTJ2YUTTB0ZTU6CLYPUVLYIVE7MRCKJN76BBB1AUK2OX6UASIQ5H47DDK4DJ36B39GQEXECHQZRUKYJUD5UTQ66IXA5STJFGOP2D3AJU8YGAJ1X5L7XGACIVVCYVW6NBFBY9P85UBC6MI9PXQ06VJ0ZS6OFCDY7M1YBURMZBIWFGPRO5J5FH0P8S7G1SD08BA0VIW9JEBRLUUZ' where id=28; -update noar tt set v3='3TY92XYW97URV8JEGZ7VZYTPSX5NJFVNWKO7N18H4A1PMEZ9H69HSS9OB0LPXCOK8VDSRJNTUTXTNUQ2X0OKMLROXOAQ5JN2PNEOAWO2DL3UIX6OT6D2NG29IS393C80640884KNC7MGDHUGD9NOKNMZ4GTRPGO54ZFIN7602MMR00D2ZJ5X04GB0M11GMU9WPRNGZCS8O3GZH6BIBY6CIA6MIA85I5OXLM36LQZZ6MOJ9WMEXPKOQI0BUMYFYE7K' where id=28; -update noar ti set v3='3TY92XYW97URV8JEGZ7VZYTPSX5NJFVNWKO7N18H4A1PMEZ9H69HSS9OB0LPXCOK8VDSRJNTUTXTNUQ2X0OKMLROXOAQ5JN2PNEOAWO2DL3UIX6OT6D2NG29IS393C80640884KNC7MGDHUGD9NOKNMZ4GTRPGO54ZFIN7602MMR00D2ZJ5X04GB0M11GMU9WPRNGZCS8O3GZH6BIBY6CIA6MIA85I5OXLM36LQZZ6MOJ9WMEXPKOQI0BUMYFYE7K' where id=28; -update noar tt set v0='LXV10XHNT0YJOI6VRPXD409C8Y1L7RNWT7IORA4YKF17DLF2XOHXMOHN0LTVGR9AD6ITUBD5VP2T5WQ086OXPMLM9TBAT6BCEWMA722TRLYXOIIJZ372X3MEU62RHS1XENY6IVORRVHMHO8EIHYFZRUKTYAMLRL6CBNUI9C54P1WTSD9RKRLCJZEZX0EP78Z89G5VE63CRMQL55FS2YIF7505LEE93XL7YXK0YIGUH9VK91N76FX3IPG2BO6J8AZ7' where id=29; -update noar ti set v0='LXV10XHNT0YJOI6VRPXD409C8Y1L7RNWT7IORA4YKF17DLF2XOHXMOHN0LTVGR9AD6ITUBD5VP2T5WQ086OXPMLM9TBAT6BCEWMA722TRLYXOIIJZ372X3MEU62RHS1XENY6IVORRVHMHO8EIHYFZRUKTYAMLRL6CBNUI9C54P1WTSD9RKRLCJZEZX0EP78Z89G5VE63CRMQL55FS2YIF7505LEE93XL7YXK0YIGUH9VK91N76FX3IPG2BO6J8AZ7' where id=29; -update noar tt set v1='NV943HMRK7GDPEV2TOCSQC73YEJBGP9PP4ZGFE2POARAMRHKIEGH601L4NFSN86VO4I69JXLDCW36TSPS57M3A52BYRL0ZMH6Z4DJOGKT657SMV3ETMFOYGFZ9IMDRPR06TLUSX4XNQNPH8UB498F40RHSK1U6N2OM0MXHUBC6YR3WZF8WIQXR6AGTOB2GITIQYPY3MZMSSQO854TGCCAQZUCXC5FVGW18P0ZGANH46MK8E6EU7N7K5DWIXYXJMOS' where id=29; -update noar ti set v1='NV943HMRK7GDPEV2TOCSQC73YEJBGP9PP4ZGFE2POARAMRHKIEGH601L4NFSN86VO4I69JXLDCW36TSPS57M3A52BYRL0ZMH6Z4DJOGKT657SMV3ETMFOYGFZ9IMDRPR06TLUSX4XNQNPH8UB498F40RHSK1U6N2OM0MXHUBC6YR3WZF8WIQXR6AGTOB2GITIQYPY3MZMSSQO854TGCCAQZUCXC5FVGW18P0ZGANH46MK8E6EU7N7K5DWIXYXJMOS' where id=29; -update noar tt set v2='PMHHSQ67C3G8HKF90KIFQO6CUH78Y1LLJTARWTASXPIKMKWQ4B20GXDLO7D5YS1FTY6HHAMNLMHPR9Z31HWFY0ON5OR9UBJ1KSLU8SJTE8IFJTKL9TPCLS51NFLEE9TH1OTHC0UTACRMMRIMT1MRSU6FWO2D5H0AI7A84XNEGWS9FPB59FM0AYN5DREW8ONKQRQELP9AYKR2NL560GCNN1BU5LPXKYBS05PYF0DSQ4HNRFTXN40KLQNFPZYP7DDDD' where id=29; -update noar ti set v2='PMHHSQ67C3G8HKF90KIFQO6CUH78Y1LLJTARWTASXPIKMKWQ4B20GXDLO7D5YS1FTY6HHAMNLMHPR9Z31HWFY0ON5OR9UBJ1KSLU8SJTE8IFJTKL9TPCLS51NFLEE9TH1OTHC0UTACRMMRIMT1MRSU6FWO2D5H0AI7A84XNEGWS9FPB59FM0AYN5DREW8ONKQRQELP9AYKR2NL560GCNN1BU5LPXKYBS05PYF0DSQ4HNRFTXN40KLQNFPZYP7DDDD' where id=29; -update noar tt set v3='H1PWAJRJNZU6I983OO5MBSKK5RP12E56OBNEITZY57X8J11UJBURER9ZI670C9T2N21G3IBPBA7IC1106LSEWWQ90FHS6816ENTDCWP1D3JAY9E4Q33TVE0IX681NRIHW0TA4EB8Q8BSR5QZZG96I0UON6D9QN1EM4WHSNQ0LUVXA194KPGGNKHKZOYEM0C407MNOZ65CTSEU88HUYK5PWGIKDW9XHRNW4LGY9I1TQ1DJUGNMA1DV4CI40PYYZPWS' where id=29; -update noar ti set v3='H1PWAJRJNZU6I983OO5MBSKK5RP12E56OBNEITZY57X8J11UJBURER9ZI670C9T2N21G3IBPBA7IC1106LSEWWQ90FHS6816ENTDCWP1D3JAY9E4Q33TVE0IX681NRIHW0TA4EB8Q8BSR5QZZG96I0UON6D9QN1EM4WHSNQ0LUVXA194KPGGNKHKZOYEM0C407MNOZ65CTSEU88HUYK5PWGIKDW9XHRNW4LGY9I1TQ1DJUGNMA1DV4CI40PYYZPWS' where id=29; -update noar tt set v0='AU0OXSWA6CDQ8V1RJ6ZGW8B1QNXOTKM0WRWHR5DBNO4BK9E2SISOJLVM5EPPKPPJVEQ4DJ4UATRNQ810C300GIRJ64VTJCHA08NOROZMDUKWUV38Q1ZF9KDM3YN6ZLVT7T7G07GDHS60SAWRCY2ZKE60CISNFPNF8ACT9MF648752NWBNHATVAJGF62A1CFKF6VMVYB1XSWYFFSQV8XUYYRO0LW915U8Y3R25L70Q9YGC0NE86CJAJ70NFOO7ZS80' where id=30; -update noar ti set v0='AU0OXSWA6CDQ8V1RJ6ZGW8B1QNXOTKM0WRWHR5DBNO4BK9E2SISOJLVM5EPPKPPJVEQ4DJ4UATRNQ810C300GIRJ64VTJCHA08NOROZMDUKWUV38Q1ZF9KDM3YN6ZLVT7T7G07GDHS60SAWRCY2ZKE60CISNFPNF8ACT9MF648752NWBNHATVAJGF62A1CFKF6VMVYB1XSWYFFSQV8XUYYRO0LW915U8Y3R25L70Q9YGC0NE86CJAJ70NFOO7ZS80' where id=30; -update noar tt set v1='1DAJTFC8QKQ4THZVMCOY89H4T478NBAQY4ZFQZO4FRXZXL7OHAF1SQ6CI8V6H3ORQUVV4S0KBWHTIK7YCW9OO8P78JJA9CE87AH91PGBUW28XZVPHANUW6O3ERBS7VAM1LJASWPL6C09BEKZAYPAE1I6Y8IDVQKDFCOI09K1AABG6RWCJ67JAKH9A9UN5WW2QGVWUC6TEPQJ7RM4696GUTPDY9XVCLA54LTIOYPII2H3VQOT8ACV1ZPTAKZ8KFIA0' where id=30; -update noar ti set v1='1DAJTFC8QKQ4THZVMCOY89H4T478NBAQY4ZFQZO4FRXZXL7OHAF1SQ6CI8V6H3ORQUVV4S0KBWHTIK7YCW9OO8P78JJA9CE87AH91PGBUW28XZVPHANUW6O3ERBS7VAM1LJASWPL6C09BEKZAYPAE1I6Y8IDVQKDFCOI09K1AABG6RWCJ67JAKH9A9UN5WW2QGVWUC6TEPQJ7RM4696GUTPDY9XVCLA54LTIOYPII2H3VQOT8ACV1ZPTAKZ8KFIA0' where id=30; -update noar tt set v2='8E200MO7QMM0QU7RINIKZSR8JLZRUSZ82C0H2LOSQLQZ4Z40B863GQTNVEG1KR1PV6B9RTQ9WR9A0B5A5FMXK8ZMJBHJQFHLPMH1Z99PMGXAGQXU5W1PYTMRAM9MKMPTRQTVQGN8QNI4RHT5PIHNB05G3EUZ3TNJYHP407TZIVUK818J4ILMREQV28Q2ED9ZL28BFBXG1A6C6RASFV1PZESAONRUHDFNUT2OIQQ2OAU0FI1HNKI4BR91Z5Z5S7KH3' where id=30; -update noar ti set v2='8E200MO7QMM0QU7RINIKZSR8JLZRUSZ82C0H2LOSQLQZ4Z40B863GQTNVEG1KR1PV6B9RTQ9WR9A0B5A5FMXK8ZMJBHJQFHLPMH1Z99PMGXAGQXU5W1PYTMRAM9MKMPTRQTVQGN8QNI4RHT5PIHNB05G3EUZ3TNJYHP407TZIVUK818J4ILMREQV28Q2ED9ZL28BFBXG1A6C6RASFV1PZESAONRUHDFNUT2OIQQ2OAU0FI1HNKI4BR91Z5Z5S7KH3' where id=30; -update noar tt set v3='JED4CKSYO2GZUIJUGG5XU4HDCRXP6ZA0WFHNVK7COPDDB3B80GKCFT0TNXX2W0R8EJJO9WSG6WDCV76QAQ6OELSN88SBETG3SIHK740NIOE0L1ZIGBF1C5WZXDTQSKYYI8DFT0OPTOLGQWPEFVHMLT9JS1CE4S4FSJAC6FCUB3EJ67WX5DA8RYWNOQML1EGK5BZMAR4KN0V3ENGZBMPV5LX6SKXILRR6IBRKEA5UUD661GTQD0PUL8V5SA2NEG73B' where id=30; -update noar ti set v3='JED4CKSYO2GZUIJUGG5XU4HDCRXP6ZA0WFHNVK7COPDDB3B80GKCFT0TNXX2W0R8EJJO9WSG6WDCV76QAQ6OELSN88SBETG3SIHK740NIOE0L1ZIGBF1C5WZXDTQSKYYI8DFT0OPTOLGQWPEFVHMLT9JS1CE4S4FSJAC6FCUB3EJ67WX5DA8RYWNOQML1EGK5BZMAR4KN0V3ENGZBMPV5LX6SKXILRR6IBRKEA5UUD661GTQD0PUL8V5SA2NEG73B' where id=30; -update noar tt set v0='ICP5WMQ659GOI17Y5APP1MNR6K0GWALYF598VA5YBTI8LQBVVOAI9W5EHBVXGQV3X370YHXXFMK8VKU3B9LDVV4EBDIQMMT6FB6QXAQLUM5H8XRMKW0BPDT4R2USR2QGAIF13684E0LJJ0BFCQQPG9R169MIJHOJQP7SFB1SL1PXB8X12UPPPPZQFEV64Q2WKXH7YW5ZW42SCMQUZWSHKCX4ABZXA2J1NYHL3ESAFT01TSLSH6ZO2NWFMZK10XCP9' where id=31; -update noar ti set v0='ICP5WMQ659GOI17Y5APP1MNR6K0GWALYF598VA5YBTI8LQBVVOAI9W5EHBVXGQV3X370YHXXFMK8VKU3B9LDVV4EBDIQMMT6FB6QXAQLUM5H8XRMKW0BPDT4R2USR2QGAIF13684E0LJJ0BFCQQPG9R169MIJHOJQP7SFB1SL1PXB8X12UPPPPZQFEV64Q2WKXH7YW5ZW42SCMQUZWSHKCX4ABZXA2J1NYHL3ESAFT01TSLSH6ZO2NWFMZK10XCP9' where id=31; -update noar tt set v1='KTZGNSEXC1MQTS1B164LERUQ45C9WURO7YKNZTDL58G0ENKJ1SEK4WC2JVHWTWSSCK6X35G793AB88TJLSFD27DHNXESEBMBIZNGIX7IU2SUSGHY1FT30AMQ2QFLMTHED46759UMKL7RKCLH095S0VQUIGRRV92QH09BGVRKTCXN1VLXT905ICW8R8UJIXT46FEA14VZC56BCTYRQ9CP9LQP1XR8L19ZRC38ZLM4H8DXFZ4UJYU4DZ2UE65F5IIAF' where id=31; -update noar ti set v1='KTZGNSEXC1MQTS1B164LERUQ45C9WURO7YKNZTDL58G0ENKJ1SEK4WC2JVHWTWSSCK6X35G793AB88TJLSFD27DHNXESEBMBIZNGIX7IU2SUSGHY1FT30AMQ2QFLMTHED46759UMKL7RKCLH095S0VQUIGRRV92QH09BGVRKTCXN1VLXT905ICW8R8UJIXT46FEA14VZC56BCTYRQ9CP9LQP1XR8L19ZRC38ZLM4H8DXFZ4UJYU4DZ2UE65F5IIAF' where id=31; -update noar tt set v2='F43ZYNJVWZZVA4N0WAG6L1A0X9DIWK6T76HKQR76AYWQK8Q8PCWTCW1RUGCW2AHNU4FXBS2KMUUVHH4LOUI6Y24OE1GKWE5LQI3DPODPJOJIHN2U3EUOK6YX7EZJNC9PIBU4PD4JMD22BJA8YVJ1I10BX814RH8JFXA8VMOUYO512N3UFTCZTXAB0U15E8WKEZIJ4DA7CI66H6ZMPGW6BMZA8HHQBMF20EJZ48TPECAC7TR8IJ9B4FNXYCL331BNT' where id=31; -update noar ti set v2='F43ZYNJVWZZVA4N0WAG6L1A0X9DIWK6T76HKQR76AYWQK8Q8PCWTCW1RUGCW2AHNU4FXBS2KMUUVHH4LOUI6Y24OE1GKWE5LQI3DPODPJOJIHN2U3EUOK6YX7EZJNC9PIBU4PD4JMD22BJA8YVJ1I10BX814RH8JFXA8VMOUYO512N3UFTCZTXAB0U15E8WKEZIJ4DA7CI66H6ZMPGW6BMZA8HHQBMF20EJZ48TPECAC7TR8IJ9B4FNXYCL331BNT' where id=31; -update noar tt set v3='EAJN8CNKSUEXYCFDES83SR207HQ02S41N3KQLC6WII2ZT28I2MYKKRYBM8WVKD5KXU3TADL4W6IRPJTT2SI35BDQ58GS6UO7NGMXUX4FAH80VCW55TFQ54F4WJ6RU5VSHE6ZEBNRALOEDBKTLTXGPWO03YIDA7L46K7ED41PSD0AMFSSDIKCZWKJQLNC5L7T49V4OOH7C4FN6XVH9K260YY24ZMUQSW44DM3C4R1V0J131CWB44EINNY6WKRCL5AR' where id=31; -update noar ti set v3='EAJN8CNKSUEXYCFDES83SR207HQ02S41N3KQLC6WII2ZT28I2MYKKRYBM8WVKD5KXU3TADL4W6IRPJTT2SI35BDQ58GS6UO7NGMXUX4FAH80VCW55TFQ54F4WJ6RU5VSHE6ZEBNRALOEDBKTLTXGPWO03YIDA7L46K7ED41PSD0AMFSSDIKCZWKJQLNC5L7T49V4OOH7C4FN6XVH9K260YY24ZMUQSW44DM3C4R1V0J131CWB44EINNY6WKRCL5AR' where id=31; -update noar tt set v0='WSP3ZJWDVQ5XACQ0P7XB9I46MV3A487A2E624QPDDZYAQXPILCV54NOV6YCD6T6141T1JOC8NIPP080LO2IRC9PI6UGAIEUE1LJCJP9FSJ4Z5391MSNOYIXYLCH0114JG45DAAOEVDW10GIWYITGCU4VO1PZM9ELSZJ453XRZ261CPMLZF8GB4JRD4IBL7ZY3R4PSYKQH4BUG1S7STRVO50LMNSOA5H72X9QIOWZZ1GAYWJC6MN8P4HNSXR3XAFNW' where id=32; -update noar ti set v0='WSP3ZJWDVQ5XACQ0P7XB9I46MV3A487A2E624QPDDZYAQXPILCV54NOV6YCD6T6141T1JOC8NIPP080LO2IRC9PI6UGAIEUE1LJCJP9FSJ4Z5391MSNOYIXYLCH0114JG45DAAOEVDW10GIWYITGCU4VO1PZM9ELSZJ453XRZ261CPMLZF8GB4JRD4IBL7ZY3R4PSYKQH4BUG1S7STRVO50LMNSOA5H72X9QIOWZZ1GAYWJC6MN8P4HNSXR3XAFNW' where id=32; -update noar tt set v1='OZM5W0R94MQT5WE47OFXW8G2P0UXLBMRPGZ1159FXXEMK9VKODLWTCLHLJIPBRHR1CYPLXINTEM9SWXP34BT1JWM1X1T6IGGDWF11M59S01ELAWHT31E4CXFNLTCWWKYGESFBTA7PZSUMIPTU5PNE9C7THWMC1ZSXBCEFGJKJBA73Z055M2Z79OUV2P8REMV0G40BKLSWBJ1YJLO9KJVJFSI7BORCGMQEUGFA277QXT978W8JZ3F6F73L65IA1QW5' where id=32; -update noar ti set v1='OZM5W0R94MQT5WE47OFXW8G2P0UXLBMRPGZ1159FXXEMK9VKODLWTCLHLJIPBRHR1CYPLXINTEM9SWXP34BT1JWM1X1T6IGGDWF11M59S01ELAWHT31E4CXFNLTCWWKYGESFBTA7PZSUMIPTU5PNE9C7THWMC1ZSXBCEFGJKJBA73Z055M2Z79OUV2P8REMV0G40BKLSWBJ1YJLO9KJVJFSI7BORCGMQEUGFA277QXT978W8JZ3F6F73L65IA1QW5' where id=32; -update noar tt set v2='F4FCMAVRQ64ESYF7UXYLP6TPJN8KW57KQVMR97SBV796S8501INZ8GRKRYIONAEAWO85V94I3RQ5WJHFWGY6TDPRJ31HGIGN2RIZSIMEASFT8BQCVXUROGRAVDYVGRMDI8GUM5THQ3VEAZT4OMB5VHRGLGOU70FRGJ3WOA6LOROWGQE44D2TP8F000SXT482NNMKS5N25L40EBVUO7VLX6PX92KXZXFBQMS00JGP0ZSJL9S5NAE97YAHR3IQK2B49' where id=32; -update noar ti set v2='F4FCMAVRQ64ESYF7UXYLP6TPJN8KW57KQVMR97SBV796S8501INZ8GRKRYIONAEAWO85V94I3RQ5WJHFWGY6TDPRJ31HGIGN2RIZSIMEASFT8BQCVXUROGRAVDYVGRMDI8GUM5THQ3VEAZT4OMB5VHRGLGOU70FRGJ3WOA6LOROWGQE44D2TP8F000SXT482NNMKS5N25L40EBVUO7VLX6PX92KXZXFBQMS00JGP0ZSJL9S5NAE97YAHR3IQK2B49' where id=32; -update noar tt set v3='V0BL5PB096CUSXLGO3NAH6GL79WZM9CLQX0GJRP0PSTMX6T8BSNMYCJWWGJ5IMIMR9HF75YRGC63I3ZIUQYMT44C3JH09V2A5B2RMV107F85F1GPTB8EAOL4P8WD3TDEI4LELY6FY3EN66ZJCDJVPUARGAQV4O8UCEPT9MXD8WP5XCOFA7X18E51OBKVN4RLACY4Y7RK1RCTI95L7K1GI5DL00P2R4DYNKT2QGFAUSII64FY5ZZC1T1VHMCZAQ8FW' where id=32; -update noar ti set v3='V0BL5PB096CUSXLGO3NAH6GL79WZM9CLQX0GJRP0PSTMX6T8BSNMYCJWWGJ5IMIMR9HF75YRGC63I3ZIUQYMT44C3JH09V2A5B2RMV107F85F1GPTB8EAOL4P8WD3TDEI4LELY6FY3EN66ZJCDJVPUARGAQV4O8UCEPT9MXD8WP5XCOFA7X18E51OBKVN4RLACY4Y7RK1RCTI95L7K1GI5DL00P2R4DYNKT2QGFAUSII64FY5ZZC1T1VHMCZAQ8FW' where id=32; -update noar tt set v0='SMJCJ2I7BYD5ME648PESRGRNDAYLOF0AS1KEDGEGVK53QU0H1YZEVKYOFSMDD47NW277BIEIAGU9KVMIMUPBBV6MFHQTXT39FDSY3EEN0BT1TQ5JQGGT25XOQXENATG424XQ2ADICJZVA6OGQ6UE42ZJEE7MG7T6TVNXNX4ASSER6DTN4F77703UECIGDU1U8556WDHZEOUKB8RDD1WEDMUGVDK2LO9IP8Q41S0RXLFWL9TGVEA8WV7KQFGHFJFO8' where id=33; -update noar ti set v0='SMJCJ2I7BYD5ME648PESRGRNDAYLOF0AS1KEDGEGVK53QU0H1YZEVKYOFSMDD47NW277BIEIAGU9KVMIMUPBBV6MFHQTXT39FDSY3EEN0BT1TQ5JQGGT25XOQXENATG424XQ2ADICJZVA6OGQ6UE42ZJEE7MG7T6TVNXNX4ASSER6DTN4F77703UECIGDU1U8556WDHZEOUKB8RDD1WEDMUGVDK2LO9IP8Q41S0RXLFWL9TGVEA8WV7KQFGHFJFO8' where id=33; -update noar tt set v1='Z5E0TKVJXTVWLMXLOSWPMNI2S4OEQDTYSE8KZ6KLV2HY6BAEYUQTES81KH1QWKO7NP7GE5CWDZRFIO16Z1AIXSREFCOI5BCA791J2XI6USUZRAJA7IAEYEPXV9UZ4VRRQ2IWRAHJ03S0HUGPNXWKWY5OLPQ2C1JO12VMB8B983V9BXM84IHI8P3GTZ49455TYPBCJ2RLEBEAWONG6C9OHHEU6XA0J65LFD3FWP6Y3AQ2V1BUVKQG85IH1T54KOIOL' where id=33; -update noar ti set v1='Z5E0TKVJXTVWLMXLOSWPMNI2S4OEQDTYSE8KZ6KLV2HY6BAEYUQTES81KH1QWKO7NP7GE5CWDZRFIO16Z1AIXSREFCOI5BCA791J2XI6USUZRAJA7IAEYEPXV9UZ4VRRQ2IWRAHJ03S0HUGPNXWKWY5OLPQ2C1JO12VMB8B983V9BXM84IHI8P3GTZ49455TYPBCJ2RLEBEAWONG6C9OHHEU6XA0J65LFD3FWP6Y3AQ2V1BUVKQG85IH1T54KOIOL' where id=33; -update noar tt set v2='RI82AQZSNG5COFOSA2TEAJPELHLYTP83M01TZQ0H9LXFQF8NTNFYYC5XJZG5WPRG2BZ305FSKGW1SR8GWH7QW9TXYVGGSW5APS14QQIC5BCVKDM49Y6HW32Q0P76LNONUZEU4514ZMLPUUP98LZ5UE72WC4XXOD5VXFT9ZS2TGLIZKZQTDMFMIM0DL9PA54X4VZXT3HKGB3X21JQ1AG62HH764UPXVOORA8VW7B7BMY1GGET59JCXTB3YY96ADV10' where id=33; -update noar ti set v2='RI82AQZSNG5COFOSA2TEAJPELHLYTP83M01TZQ0H9LXFQF8NTNFYYC5XJZG5WPRG2BZ305FSKGW1SR8GWH7QW9TXYVGGSW5APS14QQIC5BCVKDM49Y6HW32Q0P76LNONUZEU4514ZMLPUUP98LZ5UE72WC4XXOD5VXFT9ZS2TGLIZKZQTDMFMIM0DL9PA54X4VZXT3HKGB3X21JQ1AG62HH764UPXVOORA8VW7B7BMY1GGET59JCXTB3YY96ADV10' where id=33; -update noar tt set v3='D2TIOP7HZ8XI9MKCCUCB6I0WY905H1GUXYR3PW5OQK0JZL1Y6EPO87PWGFWITHT57W3X9KUU9IJME6BPQTWBXEPWZ9RX7OESNJKSTIS50AYGPKK3KB2YE6N5Q6MDMXNVGUNHPRDHZ3V3MWWKLZJ8V4HE42MGXD1GPS6PXLNZ6VS39L4P28SCI6840Z7C3XZ323D34ZB1FSQA2L8DXBQQE7PEK15SWAQIKKY1DYJCTCWM773JZLFWB4F99SZQW7V6X' where id=33; -update noar ti set v3='D2TIOP7HZ8XI9MKCCUCB6I0WY905H1GUXYR3PW5OQK0JZL1Y6EPO87PWGFWITHT57W3X9KUU9IJME6BPQTWBXEPWZ9RX7OESNJKSTIS50AYGPKK3KB2YE6N5Q6MDMXNVGUNHPRDHZ3V3MWWKLZJ8V4HE42MGXD1GPS6PXLNZ6VS39L4P28SCI6840Z7C3XZ323D34ZB1FSQA2L8DXBQQE7PEK15SWAQIKKY1DYJCTCWM773JZLFWB4F99SZQW7V6X' where id=33; -update noar tt set v0='CEVPGTNI2AM3CB7BQZ1E68PN3EXOD1LAJRY9PYB9K52MWDPR3O0AIFZ00K76UM0ADJOIH4GT4ONL1ES09U2JSDJMRB4K6F29I1W8G41LZ03JU86HRDYALSPBB3Q7BKFYPW0XUB9KX40QXQ2LQH5RV4D2VBZG7YNLLJRZGWAEMZOML3CC2FPKUN2K76U1TMZD0SE1N17KS78CCAKS8EVDUW0L72VYPM8VGPXNHMK9OQYP6RD22B5SXW1EFX7OKOO6W' where id=34; -update noar ti set v0='CEVPGTNI2AM3CB7BQZ1E68PN3EXOD1LAJRY9PYB9K52MWDPR3O0AIFZ00K76UM0ADJOIH4GT4ONL1ES09U2JSDJMRB4K6F29I1W8G41LZ03JU86HRDYALSPBB3Q7BKFYPW0XUB9KX40QXQ2LQH5RV4D2VBZG7YNLLJRZGWAEMZOML3CC2FPKUN2K76U1TMZD0SE1N17KS78CCAKS8EVDUW0L72VYPM8VGPXNHMK9OQYP6RD22B5SXW1EFX7OKOO6W' where id=34; -update noar tt set v1='KLY7XAXSCG1PRGYEV2F4CNS74QOZ1HOZ1RZKR5PAQCBKFOG9QGZ4K7CGEYXCDVRFLR08ISL6O0LCE1DHFR6D0RZQ33M8KIIYYAJIQBIFX0SHSXCT998FZ3Y8QBKKSERX39YNTXPL2MKYRNTILEGKJEZXITPGNNNSYGGDUKX67VQLELXMX5V9GGKC6UJPJRV6N2X1U9QHM4ZBG5WHRTDS64NOKNG0HA2B3EYDXM3LT3M0TRGUGVLR3Y8XZWSNMYD2K' where id=34; -update noar ti set v1='KLY7XAXSCG1PRGYEV2F4CNS74QOZ1HOZ1RZKR5PAQCBKFOG9QGZ4K7CGEYXCDVRFLR08ISL6O0LCE1DHFR6D0RZQ33M8KIIYYAJIQBIFX0SHSXCT998FZ3Y8QBKKSERX39YNTXPL2MKYRNTILEGKJEZXITPGNNNSYGGDUKX67VQLELXMX5V9GGKC6UJPJRV6N2X1U9QHM4ZBG5WHRTDS64NOKNG0HA2B3EYDXM3LT3M0TRGUGVLR3Y8XZWSNMYD2K' where id=34; -update noar tt set v2='TASF19WZC6DOXCQELE13CAMAHCSVM2B62WERVP3OURCLITH5HP4B4Q2XMFBTV40ZIJT2NQK6G7D8YGNI7KRAVKVUDUSWYQTZUTCLCPAGXGS9WVOBJ5ZOACE3I372LMPGQ4UJTBIVZ2A6L553NQBEYN3F2PZZYXRBA9QVQOIU30ANQTH7Y8KTNYSD3DGO61CY8E2QAZYTQ2Z8GCSSIUU4DWJ5WREQRG63UAX58M5UAYGD7D6OEYVL1NGTQ4HZAWLC1' where id=34; -update noar ti set v2='TASF19WZC6DOXCQELE13CAMAHCSVM2B62WERVP3OURCLITH5HP4B4Q2XMFBTV40ZIJT2NQK6G7D8YGNI7KRAVKVUDUSWYQTZUTCLCPAGXGS9WVOBJ5ZOACE3I372LMPGQ4UJTBIVZ2A6L553NQBEYN3F2PZZYXRBA9QVQOIU30ANQTH7Y8KTNYSD3DGO61CY8E2QAZYTQ2Z8GCSSIUU4DWJ5WREQRG63UAX58M5UAYGD7D6OEYVL1NGTQ4HZAWLC1' where id=34; -update noar tt set v3='YSLWBTDMP4WO0IA84PRKYCUHTS78YHBPADLG8VQ02INCMYTES60W2K2813RP0DZ4NZYHL9BFPGM1Q1XSAEAA1GOI1P5OV1A749XNRQV0UFXKDWJU3UCK4IKVUX15CRMJRYFMH4I38KA16MAU092L3QJQNADKF2QRTGNWZ8VDHTMCW5WWV0TXT3UK1VMH2LVI8MUFTL51U6975IBKC4FA8LELUFJUXXWTO6LH5GAONH1PBMB3475M1RK3DDQCSNKZZ' where id=34; -update noar ti set v3='YSLWBTDMP4WO0IA84PRKYCUHTS78YHBPADLG8VQ02INCMYTES60W2K2813RP0DZ4NZYHL9BFPGM1Q1XSAEAA1GOI1P5OV1A749XNRQV0UFXKDWJU3UCK4IKVUX15CRMJRYFMH4I38KA16MAU092L3QJQNADKF2QRTGNWZ8VDHTMCW5WWV0TXT3UK1VMH2LVI8MUFTL51U6975IBKC4FA8LELUFJUXXWTO6LH5GAONH1PBMB3475M1RK3DDQCSNKZZ' where id=34; -update noar tt set v0='9Z2WWYVQAO54OROWEGFS1JAQBES4KLXDLOF8LXVPZ17QZMMTUXSRNTGL8GVJO2MWPBZD9CJAY7UK9IL4U4VFGE5FMDMT2YDVA1N8MCCBJL9U0WSUABMK927LBRHTD5RKT1O08AIIL6SMN6J7A1AFW92B7AKKIHWFLVKKP4AHG8RB9S9T0LMBL99CB62L0EQ4FAPUKDCCNBSM0V46DT8YO9YMZLAXB63QAGR3FKMF45DPJRZM62YQ0EBY59RVNJOLD' where id=35; -update noar ti set v0='9Z2WWYVQAO54OROWEGFS1JAQBES4KLXDLOF8LXVPZ17QZMMTUXSRNTGL8GVJO2MWPBZD9CJAY7UK9IL4U4VFGE5FMDMT2YDVA1N8MCCBJL9U0WSUABMK927LBRHTD5RKT1O08AIIL6SMN6J7A1AFW92B7AKKIHWFLVKKP4AHG8RB9S9T0LMBL99CB62L0EQ4FAPUKDCCNBSM0V46DT8YO9YMZLAXB63QAGR3FKMF45DPJRZM62YQ0EBY59RVNJOLD' where id=35; -update noar tt set v1='04ZO67E1SQKCWA18NIMQELK7GMD212AM2KPOUWINLA66A17D66SKOFLS1EPZ2EDBPGEC3WDHRCK59L7F9OFG71736IJ4CY4JOBP3ERDXB7XZGMCT0OV70TYGTWKLPYXRFBI8YBZ5YWA7KWSHQVE2ZQCT9FFYMYN68PT8QXIEA4IW9DXA2C0AEOENEG5UZLM9H13P4H71ATAHATJ5J4JSDAFAQWRJWIEH6Q2IF1UC552NQRFDRITIIBJW1C9JSGKH8' where id=35; -update noar ti set v1='04ZO67E1SQKCWA18NIMQELK7GMD212AM2KPOUWINLA66A17D66SKOFLS1EPZ2EDBPGEC3WDHRCK59L7F9OFG71736IJ4CY4JOBP3ERDXB7XZGMCT0OV70TYGTWKLPYXRFBI8YBZ5YWA7KWSHQVE2ZQCT9FFYMYN68PT8QXIEA4IW9DXA2C0AEOENEG5UZLM9H13P4H71ATAHATJ5J4JSDAFAQWRJWIEH6Q2IF1UC552NQRFDRITIIBJW1C9JSGKH8' where id=35; -update noar tt set v2='QAJHN7HVJM4MMZQD2A8MJ9FYRAD6U2S29U5DKF1B1P8J8XJOA0KSD0VYH4EF6GBN5DDLX3WLCCVJLEE3RAFE771CDVUF8EEARH1403WADOO5Q27Y7MB0Z5O94RTVN7F4DH75WWOVZ9ZJ7ZB4QIMADYAHBHOCQO3T968ZDOZH2NW2GPRS38LMGMWO824VZV19TV1J78IH1V27AJ5S78UTE03X58K5AH9VCX2WATUESM25IU0NX9AC9S5B32GQEV4DH' where id=35; -update noar ti set v2='QAJHN7HVJM4MMZQD2A8MJ9FYRAD6U2S29U5DKF1B1P8J8XJOA0KSD0VYH4EF6GBN5DDLX3WLCCVJLEE3RAFE771CDVUF8EEARH1403WADOO5Q27Y7MB0Z5O94RTVN7F4DH75WWOVZ9ZJ7ZB4QIMADYAHBHOCQO3T968ZDOZH2NW2GPRS38LMGMWO824VZV19TV1J78IH1V27AJ5S78UTE03X58K5AH9VCX2WATUESM25IU0NX9AC9S5B32GQEV4DH' where id=35; -update noar tt set v3='7YF1UUXIU98TX1QII3SE0054PWLELT3IQDFXZZD02IVY4HY5T6JKHR2CDF372IUUYV90F0IZI6K2IDC7BBBON4XGH4GS8T44F2HJWNZBFT7U2VONSOG8A4A9C690BG8WL54F8JY4GBCJQFM8SQBNJ0IWJO8CB17391QLSY7E3HC7U2P2Y7JNW47XCJ4XNP9XUKAHE4UAEGXIP1EBPG2CA0V432KJ5JAAYGUJEFS9B3UHTT907OWDJCJBJ2STVV419' where id=35; -update noar ti set v3='7YF1UUXIU98TX1QII3SE0054PWLELT3IQDFXZZD02IVY4HY5T6JKHR2CDF372IUUYV90F0IZI6K2IDC7BBBON4XGH4GS8T44F2HJWNZBFT7U2VONSOG8A4A9C690BG8WL54F8JY4GBCJQFM8SQBNJ0IWJO8CB17391QLSY7E3HC7U2P2Y7JNW47XCJ4XNP9XUKAHE4UAEGXIP1EBPG2CA0V432KJ5JAAYGUJEFS9B3UHTT907OWDJCJBJ2STVV419' where id=35; -update noar tt set v0='ZWTE34UL3W26PGM53MOG1JMLSBSP9WALLI7NFY97O95LPDQ7FWT0T5KYL81Y9WREZD8S3SNQV53ROL3365CVCKRIHE2EUQIEU2T4JTFPBAWPUP8HHQBBYHVGN8YG7MQ0WKLSDMQOMS4S0ZNH2UHTKSDMN03N4WGYUZH85EI81W7E9N7ZHDAQA4MT3XGPGN5KQR1PDKXUXMESSNOC89GFL9TFPN263VDU7WEW1AK9VC9YZXZ61O6H1QSGGEZTYOZ3O' where id=36; -update noar ti set v0='ZWTE34UL3W26PGM53MOG1JMLSBSP9WALLI7NFY97O95LPDQ7FWT0T5KYL81Y9WREZD8S3SNQV53ROL3365CVCKRIHE2EUQIEU2T4JTFPBAWPUP8HHQBBYHVGN8YG7MQ0WKLSDMQOMS4S0ZNH2UHTKSDMN03N4WGYUZH85EI81W7E9N7ZHDAQA4MT3XGPGN5KQR1PDKXUXMESSNOC89GFL9TFPN263VDU7WEW1AK9VC9YZXZ61O6H1QSGGEZTYOZ3O' where id=36; -update noar tt set v1='DB8LWOYT1Q02Z5OY1M5WHNPB1858O29EIHLA3BBAN5AUPEPG4YJCLCY9S6O10URWRV7XQQVLWMHVZWCKDCMJOVH5AORUOP37GO9VHYPA2VI7YS72W28X9P5XGIQBZZK4L5CHF2NMCBNRZIWIHTI9FSBH96W0V37SVXBZ9FJU75OCSOFJ8FBP7PSUNK0DNOKJSEJ1U3J18A1WNP8KHVQUTBQYEREHLLJ2I5G9V0Z8AWQUYD836HCE4HGPPEJS24N67' where id=36; -update noar ti set v1='DB8LWOYT1Q02Z5OY1M5WHNPB1858O29EIHLA3BBAN5AUPEPG4YJCLCY9S6O10URWRV7XQQVLWMHVZWCKDCMJOVH5AORUOP37GO9VHYPA2VI7YS72W28X9P5XGIQBZZK4L5CHF2NMCBNRZIWIHTI9FSBH96W0V37SVXBZ9FJU75OCSOFJ8FBP7PSUNK0DNOKJSEJ1U3J18A1WNP8KHVQUTBQYEREHLLJ2I5G9V0Z8AWQUYD836HCE4HGPPEJS24N67' where id=36; -update noar tt set v2='3RN6SO2MKI9QEO7D720Y4XYG98XAV7EJ74VHK4GKGIT5BTFQXTC5FCKM9K3WSSR5LZ0PKUDNPB1H1PXLGPO7CPJNHCJZJQT4R59M3L3716DSKPTEF2F8C6B56YO1L51VKTQ3D11REDDDNJO7VAQAJ8AFTAU3ELS0J4W00D98IAKK6P72W5HES28002EDN08RWY8H2GZAK1KPAMNEKDAVPHSIB23QBHQSHRVXNHTVSGQFOEK68X9P3UCDAWW5GPD2P' where id=36; -update noar ti set v2='3RN6SO2MKI9QEO7D720Y4XYG98XAV7EJ74VHK4GKGIT5BTFQXTC5FCKM9K3WSSR5LZ0PKUDNPB1H1PXLGPO7CPJNHCJZJQT4R59M3L3716DSKPTEF2F8C6B56YO1L51VKTQ3D11REDDDNJO7VAQAJ8AFTAU3ELS0J4W00D98IAKK6P72W5HES28002EDN08RWY8H2GZAK1KPAMNEKDAVPHSIB23QBHQSHRVXNHTVSGQFOEK68X9P3UCDAWW5GPD2P' where id=36; -update noar tt set v3='Y7WMCEAE241842NRD0G9QB4G0AECXE2XJBVYQANEMUBXE4GT1THUEK6RZW0LBD3XDKQU2I3Z4DCKN8HJBT9N91YGKFQVEXW689RSFH8FS29NOGTZC8T03QN8M0R9EHESKISGYRCD6AZ0FF5FC6B1KYXN156Z4IOMY65FDSLNV0XLROTCAFP7CH8MOF0TI6JITWVR3XLWCX4LPHJGR7CTPY8NI9Q9PCE0X1P5EDHO8PJYHDYELJUCTYMNEJJP1ANDR' where id=36; -update noar ti set v3='Y7WMCEAE241842NRD0G9QB4G0AECXE2XJBVYQANEMUBXE4GT1THUEK6RZW0LBD3XDKQU2I3Z4DCKN8HJBT9N91YGKFQVEXW689RSFH8FS29NOGTZC8T03QN8M0R9EHESKISGYRCD6AZ0FF5FC6B1KYXN156Z4IOMY65FDSLNV0XLROTCAFP7CH8MOF0TI6JITWVR3XLWCX4LPHJGR7CTPY8NI9Q9PCE0X1P5EDHO8PJYHDYELJUCTYMNEJJP1ANDR' where id=36; -update noar tt set v0='5KHDP07RQZBXC8CT2MMV24HBP5XFBECJPHYEN19BRDU8TZLZE3Q1R292UYKDH0B5IEII05OV04BND8ID54UW1X1YZXG6Q0CQZ2AD04E84BEH8QL5K8UBWLNTZCHWNQ3CGBIGFTD0JLLSUA6IPF48LTBJ8OLP6L094G6UXKHHYIU7FFN40LHOUDIEUZD2WQEKH7FAIDMRVCW3LF3HNCNM4YOZCMVWEX1B3WPDXW0H0E8R936E41MU0LODUGTK9GOV2' where id=37; -update noar ti set v0='5KHDP07RQZBXC8CT2MMV24HBP5XFBECJPHYEN19BRDU8TZLZE3Q1R292UYKDH0B5IEII05OV04BND8ID54UW1X1YZXG6Q0CQZ2AD04E84BEH8QL5K8UBWLNTZCHWNQ3CGBIGFTD0JLLSUA6IPF48LTBJ8OLP6L094G6UXKHHYIU7FFN40LHOUDIEUZD2WQEKH7FAIDMRVCW3LF3HNCNM4YOZCMVWEX1B3WPDXW0H0E8R936E41MU0LODUGTK9GOV2' where id=37; -update noar tt set v1='HM9HKNLFTTDS4F275OOYYVUGOWVZBN96RQ5VW8D1R8THQCW3LOWJ51FVT8BGW0UCI4IU26Q2TYZMIEUPKFLYTOODABG2QB5HQ0GML8XLNVNA8FTIHQ9BCPRK4HORQRN495CQOFQLLF193477Y0VSTOADAFEU3LPQYLJO9ON3AGPCET3SKARETYXLSGYC609QOUFO711O4KFVZUNMAPRKJMYX44CUNJQAKFOEYX46LQH4ED5MRBK8AC99AY5O2N3DW' where id=37; -update noar ti set v1='HM9HKNLFTTDS4F275OOYYVUGOWVZBN96RQ5VW8D1R8THQCW3LOWJ51FVT8BGW0UCI4IU26Q2TYZMIEUPKFLYTOODABG2QB5HQ0GML8XLNVNA8FTIHQ9BCPRK4HORQRN495CQOFQLLF193477Y0VSTOADAFEU3LPQYLJO9ON3AGPCET3SKARETYXLSGYC609QOUFO711O4KFVZUNMAPRKJMYX44CUNJQAKFOEYX46LQH4ED5MRBK8AC99AY5O2N3DW' where id=37; -update noar tt set v2='7PIF0EM0YX7VOZJL6AOEBIRN0M97MVYZQTL94HVSUI1Y8ZKK1JNPFTX9U8B5IP2VM3S6VWS06OXELAIDKC18LPIGOR4BFFF810H7EC47Z631N5W550WANJX3LXNAKM2X107C73VOUI2IR6P43H6GT9TXQDU53LDZXI8FWT4GT3JACCKFBO4LRAMATOKC2TTH44HU2PIXHTVD930JWGXBHYHKNYR7RYID3QPYRB4DH4RQBTPYBQ9FYOM9JA41V47NW' where id=37; -update noar ti set v2='7PIF0EM0YX7VOZJL6AOEBIRN0M97MVYZQTL94HVSUI1Y8ZKK1JNPFTX9U8B5IP2VM3S6VWS06OXELAIDKC18LPIGOR4BFFF810H7EC47Z631N5W550WANJX3LXNAKM2X107C73VOUI2IR6P43H6GT9TXQDU53LDZXI8FWT4GT3JACCKFBO4LRAMATOKC2TTH44HU2PIXHTVD930JWGXBHYHKNYR7RYID3QPYRB4DH4RQBTPYBQ9FYOM9JA41V47NW' where id=37; -update noar tt set v3='BHDRUYCC8FJWDWA1KMYVOW6FBNOCJTRLMJP2V5097XFIT1441QKRNEZ75WUWEGE24M3Z7SLITDJ1JLWCOZS7TVW3ZTGSQMTOOBIE5W2PLJO9YBQ41SJMIMQ8D05I3A4D6CLF9LTITTPC3VJ05GDP0Z6BCYB3R3N9036V9U4JF8TODQOHU24XSJXSP05BTFEFI9BFQDR6LU4F6P91UVKL5TF7MMP4360WOSNJM7NXZSVVH8C9WF0G8AUMEC2079OWS' where id=37; -update noar ti set v3='BHDRUYCC8FJWDWA1KMYVOW6FBNOCJTRLMJP2V5097XFIT1441QKRNEZ75WUWEGE24M3Z7SLITDJ1JLWCOZS7TVW3ZTGSQMTOOBIE5W2PLJO9YBQ41SJMIMQ8D05I3A4D6CLF9LTITTPC3VJ05GDP0Z6BCYB3R3N9036V9U4JF8TODQOHU24XSJXSP05BTFEFI9BFQDR6LU4F6P91UVKL5TF7MMP4360WOSNJM7NXZSVVH8C9WF0G8AUMEC2079OWS' where id=37; -update noar tt set v0='99R3SGHTL5SYXUJG0XYIHP9XI3K7ZYKNK41UBIZ0Q7BTSHFJ0MZ3W9EU5J36G2ZZ7KFORM8QIYTWE0042NWY45BHI4O6B32TSGFCHDI9TMI7NNCG6RTSMVSJRNDIEZVYN6IJOE43Q3CRMPXZ5SGUEB59VOS3XMEGILMI7VYS23SBV1GKCGFZMZSNNB84604ICVATGETO7V9GV56MCXVV3507SKPC4TJCSRLDJ9L4N0YRXA40UH7LQQUWL16T3XR2D' where id=38; -update noar ti set v0='99R3SGHTL5SYXUJG0XYIHP9XI3K7ZYKNK41UBIZ0Q7BTSHFJ0MZ3W9EU5J36G2ZZ7KFORM8QIYTWE0042NWY45BHI4O6B32TSGFCHDI9TMI7NNCG6RTSMVSJRNDIEZVYN6IJOE43Q3CRMPXZ5SGUEB59VOS3XMEGILMI7VYS23SBV1GKCGFZMZSNNB84604ICVATGETO7V9GV56MCXVV3507SKPC4TJCSRLDJ9L4N0YRXA40UH7LQQUWL16T3XR2D' where id=38; -update noar tt set v1='8XJ9D3TNL6AIZRNLQN73XTV10QHYAMS6CUT1Y5XKWC8V40E2URYC6SAMW0YDWF1QTG95B03KCY1FNMDQTVWPF39E6KAZ5Q920P5WCUQ5YBBY5TK1BVSOJIKG9OC5DG3MG77HXF4JHNNVZUPVE3I0F7JO953XEKHVKDFQ0FVG5E6E1ENM6X9EGLN7K4UG0FH6W9LGOHLKVJJACK2FL0C94VCXE621CKKNH2HG9VGJ40F2JG7GSTVQW1PGX9JL0YW3V' where id=38; -update noar ti set v1='8XJ9D3TNL6AIZRNLQN73XTV10QHYAMS6CUT1Y5XKWC8V40E2URYC6SAMW0YDWF1QTG95B03KCY1FNMDQTVWPF39E6KAZ5Q920P5WCUQ5YBBY5TK1BVSOJIKG9OC5DG3MG77HXF4JHNNVZUPVE3I0F7JO953XEKHVKDFQ0FVG5E6E1ENM6X9EGLN7K4UG0FH6W9LGOHLKVJJACK2FL0C94VCXE621CKKNH2HG9VGJ40F2JG7GSTVQW1PGX9JL0YW3V' where id=38; -update noar tt set v2='7OJL1AMJOI62PX9UPNGER0DPYE0IMOH0CDBD9OU8VWZGDJ1DAOFXC6UD36Y0QCSC63C5JGSERS8XTBRGW8IUGF3WYC60WN936RZMG6KRST4KZ3YTAASJ2VP0CKGJ4HYEWIC6VPYZK2EVB4BHA57DAVL96R77W9469RVGU06ZUNWDNICDQ0177FNU6K5O3ORHW4OUWU5LSHHSK1JD4GWRRSME1ECTU8B7FFVT52QMGTBL0SME3QSH6I4C0IR4QVW6Q' where id=38; -update noar ti set v2='7OJL1AMJOI62PX9UPNGER0DPYE0IMOH0CDBD9OU8VWZGDJ1DAOFXC6UD36Y0QCSC63C5JGSERS8XTBRGW8IUGF3WYC60WN936RZMG6KRST4KZ3YTAASJ2VP0CKGJ4HYEWIC6VPYZK2EVB4BHA57DAVL96R77W9469RVGU06ZUNWDNICDQ0177FNU6K5O3ORHW4OUWU5LSHHSK1JD4GWRRSME1ECTU8B7FFVT52QMGTBL0SME3QSH6I4C0IR4QVW6Q' where id=38; -update noar tt set v3='X7I8XRJKUY0PHLB4GEB99VKZU7OT097DEJ0CD7NM7ZT5SAWMUKMTKDTMVLOTAJ0O6PJKI8306ZW9ZL4CVQKCDIRDVN58M3TX5JCODJUQETLWZ078S82LZFAPOBUR7X7MEG76O9RGEMMBGGAQECIFYHN0KRK5RV2F7SGAZ11I2962C5PACSKG11SYTC5Y3KETNOW8W2E5G534R3PJLF5O63JACZ9WJ7M5RF1TCGUHTNQ9W8BS41S9SF6QQUE9WM98N' where id=38; -update noar ti set v3='X7I8XRJKUY0PHLB4GEB99VKZU7OT097DEJ0CD7NM7ZT5SAWMUKMTKDTMVLOTAJ0O6PJKI8306ZW9ZL4CVQKCDIRDVN58M3TX5JCODJUQETLWZ078S82LZFAPOBUR7X7MEG76O9RGEMMBGGAQECIFYHN0KRK5RV2F7SGAZ11I2962C5PACSKG11SYTC5Y3KETNOW8W2E5G534R3PJLF5O63JACZ9WJ7M5RF1TCGUHTNQ9W8BS41S9SF6QQUE9WM98N' where id=38; -update noar tt set v0='WJO97EIH9Z6P7F3O5KCIM6PR8SLAWJEOFBLQL2J6LVORX5T7CCT2L116VR4RMR8HVLPUWB21G17NS6HM3IIMTLU0J7SWFT1ZQLGFH8H5N8Q72A8AMRVQFW59UBXUZ1YCXW1DVEEFKIOKA4EH57D8A3TP3M6XBPCY4FKMF8P760JEURLXSW06ZGLTQNSQS1GPUZEGW256FRUCO8VE4BD5GXCAPS4BZ898F4R9KHS0LUCFVWGNLVKXN1R7I8EWT8P2L' where id=39; -update noar ti set v0='WJO97EIH9Z6P7F3O5KCIM6PR8SLAWJEOFBLQL2J6LVORX5T7CCT2L116VR4RMR8HVLPUWB21G17NS6HM3IIMTLU0J7SWFT1ZQLGFH8H5N8Q72A8AMRVQFW59UBXUZ1YCXW1DVEEFKIOKA4EH57D8A3TP3M6XBPCY4FKMF8P760JEURLXSW06ZGLTQNSQS1GPUZEGW256FRUCO8VE4BD5GXCAPS4BZ898F4R9KHS0LUCFVWGNLVKXN1R7I8EWT8P2L' where id=39; -update noar tt set v1='AY288AM1OSME167YWT2XRZPIAHF0DM16EQW6X72JPXTX1MRYG66ZYG5YNV0PNX3WMMQXBC3QYE07WBRWKHY2WK3GFRG1ZXJQ8BW4C6FS0LKLIQI14AIK1RFGFWT15HH3PFVCPXFF4F4PJDRCGC8AD8073TJYFT2LX129I3SEO4JODIBXWF611MFJ40B9VU0T21TEEMM8E2VFF1YXM2U9TQWE7VXH2WQQYS34AGPTSTDFW34FCQPENBH9TU34OCZRD' where id=39; -update noar ti set v1='AY288AM1OSME167YWT2XRZPIAHF0DM16EQW6X72JPXTX1MRYG66ZYG5YNV0PNX3WMMQXBC3QYE07WBRWKHY2WK3GFRG1ZXJQ8BW4C6FS0LKLIQI14AIK1RFGFWT15HH3PFVCPXFF4F4PJDRCGC8AD8073TJYFT2LX129I3SEO4JODIBXWF611MFJ40B9VU0T21TEEMM8E2VFF1YXM2U9TQWE7VXH2WQQYS34AGPTSTDFW34FCQPENBH9TU34OCZRD' where id=39; -update noar tt set v2='MHOMERN1SPK3N0RLL3N86XZFYIKNCFDWI6V87WTIHS75DGJJ0YAIP69MC06KGGVBRK35KMQNN42KUR6NSA0LGABJ4DZI0DTWNWTZ317UJR8VPLROTXWT6IZR0BO3QVKVVIJL1OPCF19X8JA6SKJEMUOOGYKBQ8T7XPP67X2YCRGS9SGR03LU2IIV4FNI6O1XDFAEQIE4G3SF72UFT91JE4DX3YEWJ3NUMNK5ESVERL4N7GAT8IPE93ZPF2RS5LI7V' where id=39; -update noar ti set v2='MHOMERN1SPK3N0RLL3N86XZFYIKNCFDWI6V87WTIHS75DGJJ0YAIP69MC06KGGVBRK35KMQNN42KUR6NSA0LGABJ4DZI0DTWNWTZ317UJR8VPLROTXWT6IZR0BO3QVKVVIJL1OPCF19X8JA6SKJEMUOOGYKBQ8T7XPP67X2YCRGS9SGR03LU2IIV4FNI6O1XDFAEQIE4G3SF72UFT91JE4DX3YEWJ3NUMNK5ESVERL4N7GAT8IPE93ZPF2RS5LI7V' where id=39; -update noar tt set v3='H0ECDT4ZNAECTNQ2I2M3JH1U4MJWFEB5ULS7B5NE2BLKCI4UG01KJNKIMAZ4N4107QTZLLV500KWB22WTEGLVWT1OY4QGV04LXY6BJHD0YWLB4NOWRJ3DCMB1E34GFE8R094XIM7KWFX2QLEUQMT72JT4E4BH91Q2SIS6CY9ZSBQAQ8EV0M82P7A9T6YY55SMJYQ070H3914DDMGNIHLIPWRBN20L1HOK6J6S7UOGQFFAWLMLY4CM6F92X9P2UIAK' where id=39; -update noar ti set v3='H0ECDT4ZNAECTNQ2I2M3JH1U4MJWFEB5ULS7B5NE2BLKCI4UG01KJNKIMAZ4N4107QTZLLV500KWB22WTEGLVWT1OY4QGV04LXY6BJHD0YWLB4NOWRJ3DCMB1E34GFE8R094XIM7KWFX2QLEUQMT72JT4E4BH91Q2SIS6CY9ZSBQAQ8EV0M82P7A9T6YY55SMJYQ070H3914DDMGNIHLIPWRBN20L1HOK6J6S7UOGQFFAWLMLY4CM6F92X9P2UIAK' where id=39; -update noar tt set v0='H6TYWFB0YPE87C06HV6VB15ASSH3T7KHEXJ9BDMGRQ1HEWAYVUI0OQVNJP41SKY8CV9LU428UG3LQ5AOZNVC6XHMCP7MXWLO9UVD6H2UGJXBE1FLZSNLSTWFKBEJD00X097BOTBWVR8JINXFIW6D1T3SSWROT0OP3KY63JD1EKZJ5OBWH6YMBRRUAT9LD5ZZEJGPWCH6JIP9EQ5XSUY1MDLXGI5SW513V2TGM7QOHEWHT2FANAUS7C8VU09U8F4F0' where id=40; -update noar ti set v0='H6TYWFB0YPE87C06HV6VB15ASSH3T7KHEXJ9BDMGRQ1HEWAYVUI0OQVNJP41SKY8CV9LU428UG3LQ5AOZNVC6XHMCP7MXWLO9UVD6H2UGJXBE1FLZSNLSTWFKBEJD00X097BOTBWVR8JINXFIW6D1T3SSWROT0OP3KY63JD1EKZJ5OBWH6YMBRRUAT9LD5ZZEJGPWCH6JIP9EQ5XSUY1MDLXGI5SW513V2TGM7QOHEWHT2FANAUS7C8VU09U8F4F0' where id=40; -update noar tt set v1='9YCGDP40QAO3GOF4SL44JQ034GH47O2R9AMIT7ERL4X9YAGG8YYHJ9D5OWBRIKNQKDTWVQAH89LLRBC4E3ZAD0QDSCL2FPQ6MC61Y1F087V27N8L2DOV4AYMS4BKWYQEWJC0YT3I595K4B2DQR6FY5Q66AV3TUQ3FK4JO5Z2392QO84NCG8ZX3TFXAFEE41IHSFBY7U2VSMUV6YME8HYNPL6RIFLU1VT22P9CQ1UHGX292LRIAYT91MDD68BVC9AZ' where id=40; -update noar ti set v1='9YCGDP40QAO3GOF4SL44JQ034GH47O2R9AMIT7ERL4X9YAGG8YYHJ9D5OWBRIKNQKDTWVQAH89LLRBC4E3ZAD0QDSCL2FPQ6MC61Y1F087V27N8L2DOV4AYMS4BKWYQEWJC0YT3I595K4B2DQR6FY5Q66AV3TUQ3FK4JO5Z2392QO84NCG8ZX3TFXAFEE41IHSFBY7U2VSMUV6YME8HYNPL6RIFLU1VT22P9CQ1UHGX292LRIAYT91MDD68BVC9AZ' where id=40; -update noar tt set v2='SG5W35L51AKPAWGI1FKFBFDIWS3XSHV8HA0LC15FOWRBZHPCBORMA8SK6JMJVFUT1JKQI1YAKNR5MXF1P4EW3UWSEFJ0C0ELWDSP96KPLBXRLK40R68D9RK5GM6X032EUGE1BT9ZJZAUE8JM3T51C209NIIVRFC9KEFDYYA85NL6ISF130VS1BRYA0SVTBWTG29JZEXWPXRZXJDLZ30QN3IIDWBOY5ATLHC74LJOLTRAHG9YEXCF65P4DH4K7GQT7' where id=40; -update noar ti set v2='SG5W35L51AKPAWGI1FKFBFDIWS3XSHV8HA0LC15FOWRBZHPCBORMA8SK6JMJVFUT1JKQI1YAKNR5MXF1P4EW3UWSEFJ0C0ELWDSP96KPLBXRLK40R68D9RK5GM6X032EUGE1BT9ZJZAUE8JM3T51C209NIIVRFC9KEFDYYA85NL6ISF130VS1BRYA0SVTBWTG29JZEXWPXRZXJDLZ30QN3IIDWBOY5ATLHC74LJOLTRAHG9YEXCF65P4DH4K7GQT7' where id=40; -update noar tt set v3='O6AVJDSYRVAH02R5JHW0G6TFMTE5FKNUJ01AG7IKWLT9ZR6VFLH9GD7L10ILXIB2107GFC4CL27NY3W9NJ83LR2ZFIH5BT3771C4K93XH9VIUWKC6FOR897XWACL6R9W6DJCQZFRO4K3POJLGJFA152TLHI5JJG4K5JPH81GP8JSI9VPQXAD5XIT4GWS6PE2SHT79TLYDKT2YF32TYVMGM1PA82TVCQV7KWVPQ36SJ1A5U061MD3P6DKLNJLPJTDH' where id=40; -update noar ti set v3='O6AVJDSYRVAH02R5JHW0G6TFMTE5FKNUJ01AG7IKWLT9ZR6VFLH9GD7L10ILXIB2107GFC4CL27NY3W9NJ83LR2ZFIH5BT3771C4K93XH9VIUWKC6FOR897XWACL6R9W6DJCQZFRO4K3POJLGJFA152TLHI5JJG4K5JPH81GP8JSI9VPQXAD5XIT4GWS6PE2SHT79TLYDKT2YF32TYVMGM1PA82TVCQV7KWVPQ36SJ1A5U061MD3P6DKLNJLPJTDH' where id=40; -update noar tt set v0='7IEH6KF3NPYH3V42OTV4Y3L11T8XJXUKZQXXD3DOBVWSBLLLJBCKDFKV2W889O84NJN8P3T0NNXZRT85GA5Q05SJF4HR42D51Z52CU53UG8KNUFZDSPNTHAF52608D2U2MWO5ST6YY6VYYSJBEIPVXUJWM899LQDVZM3QTFMONQP0E8H77JU6MZRJMSUQ5EL3GAM1FFDD93E5U13Z65URPBYRZ9YUG1RUPW1AK4WBV1FJ3AFWKRQ5HUQHQ54OFE9N' where id=41; -update noar ti set v0='7IEH6KF3NPYH3V42OTV4Y3L11T8XJXUKZQXXD3DOBVWSBLLLJBCKDFKV2W889O84NJN8P3T0NNXZRT85GA5Q05SJF4HR42D51Z52CU53UG8KNUFZDSPNTHAF52608D2U2MWO5ST6YY6VYYSJBEIPVXUJWM899LQDVZM3QTFMONQP0E8H77JU6MZRJMSUQ5EL3GAM1FFDD93E5U13Z65URPBYRZ9YUG1RUPW1AK4WBV1FJ3AFWKRQ5HUQHQ54OFE9N' where id=41; -update noar tt set v1='L6C3N4J9BHWSHAC6QX19XOWSM6H755SKBGV5PJ5P8PVT8NM7QJ46EA40XZEVG3ITPC6ZOBRSDSX91SVYLZ52JCUO20EP6GDYPTSQUJNBCFMG45WXSW9O31OB7G1WDOT2XMG0C6GSZL37IJKE8957PQ838YSPIQ7R2X9MZAHYYQNYHX8JDKGZCU2D4IRHSJPNCM5YKFCE08QR0K43QM695XFPE0WI9W6AJYM77FTQ782Q64IGF9UWA22GET3D627GU' where id=41; -update noar ti set v1='L6C3N4J9BHWSHAC6QX19XOWSM6H755SKBGV5PJ5P8PVT8NM7QJ46EA40XZEVG3ITPC6ZOBRSDSX91SVYLZ52JCUO20EP6GDYPTSQUJNBCFMG45WXSW9O31OB7G1WDOT2XMG0C6GSZL37IJKE8957PQ838YSPIQ7R2X9MZAHYYQNYHX8JDKGZCU2D4IRHSJPNCM5YKFCE08QR0K43QM695XFPE0WI9W6AJYM77FTQ782Q64IGF9UWA22GET3D627GU' where id=41; -update noar tt set v2='2D1P4PF60XUIPEWXSMMUZ69ZRXPTSBQZKFR38JO1C33M0X6GUE8GKYL1TVIB0AK61S3UPB7F57RG478I2BWE9Y48ETCFEIP582TLF0BPMRIL0HT0LTVEBV8A6FO2AU34MZ1X90UKZVUZW5O7MI8JGAFW0FYC61N9E24T961KAZ3YS692Y8MY82LLAR2AOYXP3E3OH73ET4G759KSRG804HP602JD29SAZOGX3OYFAJ6P85WDF8X1H3FQZI572N8VF' where id=41; -update noar ti set v2='2D1P4PF60XUIPEWXSMMUZ69ZRXPTSBQZKFR38JO1C33M0X6GUE8GKYL1TVIB0AK61S3UPB7F57RG478I2BWE9Y48ETCFEIP582TLF0BPMRIL0HT0LTVEBV8A6FO2AU34MZ1X90UKZVUZW5O7MI8JGAFW0FYC61N9E24T961KAZ3YS692Y8MY82LLAR2AOYXP3E3OH73ET4G759KSRG804HP602JD29SAZOGX3OYFAJ6P85WDF8X1H3FQZI572N8VF' where id=41; -update noar tt set v3='UNSOGZ7KH6PFU7SB5XFJKJF6PONZI4XXZM30SG7H68YR7ASKWVO9LT7RS3RS17VB1S72XWIS7CVN7STMI5RHZFUWFEXNDOXJI7ZXU2CRLLZXT0KPCTK8OBIS2NDO94VY7QK3YNGH4BA34BF1NOKT0ZV1OCB7SVG98QLROCENCR3HSFBL63UM4Y6DE1QELWMLPEVEW4DUNQUFJQBRAHXTF9YPOP70879LJ53WHE61MK5OXPB3JDFOGKF7PESMZOGQI' where id=41; -update noar ti set v3='UNSOGZ7KH6PFU7SB5XFJKJF6PONZI4XXZM30SG7H68YR7ASKWVO9LT7RS3RS17VB1S72XWIS7CVN7STMI5RHZFUWFEXNDOXJI7ZXU2CRLLZXT0KPCTK8OBIS2NDO94VY7QK3YNGH4BA34BF1NOKT0ZV1OCB7SVG98QLROCENCR3HSFBL63UM4Y6DE1QELWMLPEVEW4DUNQUFJQBRAHXTF9YPOP70879LJ53WHE61MK5OXPB3JDFOGKF7PESMZOGQI' where id=41; -update noar tt set v0='X2VS18LMHN0RSKNKD3V779LTXWS0FD7XE8J6ZSO1WXPFKREBT088TSS26Q7JFT5HZC0WKMBSQ720KMSZR1TYX7CG7Y8RB9JVT3U2D3DZPLC1RDMIFWVJCW5QSQ2LQJW0CRA5A8646G2B0YGAFT4HUCIOC0OLNDOZMB3A2E7PNYSAZK8GYD7AN2VAZE6IYT9W4L5Q4T1F4TDKEJSDVDMHVAYZ1M8WM4P3Y27AFMEVRPEUUNY4ODRQXH7U2HPE60ZHS' where id=42; -update noar ti set v0='X2VS18LMHN0RSKNKD3V779LTXWS0FD7XE8J6ZSO1WXPFKREBT088TSS26Q7JFT5HZC0WKMBSQ720KMSZR1TYX7CG7Y8RB9JVT3U2D3DZPLC1RDMIFWVJCW5QSQ2LQJW0CRA5A8646G2B0YGAFT4HUCIOC0OLNDOZMB3A2E7PNYSAZK8GYD7AN2VAZE6IYT9W4L5Q4T1F4TDKEJSDVDMHVAYZ1M8WM4P3Y27AFMEVRPEUUNY4ODRQXH7U2HPE60ZHS' where id=42; -update noar tt set v1='QUP7XPWL1USMNE30RH322RXH398Q4JCDHH65L1D5T7D6O50036YVFWOTQCP7EP2LL7BK80HFV4U2N8MQS63EMOHZHEHI2BHQLAH6NA7KX3SU8U3JOFFEUPP4IU4ZSHTLH2OBARE9AZ6IP7ZCXZB08A8KTTKJX7UBDR3I2WK09BGT9W09CD3ZMWI2O52AQDAK1I9AP28K2Y0EH4PPA9PEKV620RDMAR2UG4WWLWJMXZ9L7OOILU2NFMUFBL9WF1FYK' where id=42; -update noar ti set v1='QUP7XPWL1USMNE30RH322RXH398Q4JCDHH65L1D5T7D6O50036YVFWOTQCP7EP2LL7BK80HFV4U2N8MQS63EMOHZHEHI2BHQLAH6NA7KX3SU8U3JOFFEUPP4IU4ZSHTLH2OBARE9AZ6IP7ZCXZB08A8KTTKJX7UBDR3I2WK09BGT9W09CD3ZMWI2O52AQDAK1I9AP28K2Y0EH4PPA9PEKV620RDMAR2UG4WWLWJMXZ9L7OOILU2NFMUFBL9WF1FYK' where id=42; -update noar tt set v2='LTIIJYKPL9I9KJ0J3GFLHS0DS4SEZRV43NX25MCYG4VWO0SF9YDIEU3XYDGVQGUIHXR3LEEPAD4YY5E0A20L0VC2ZGXXDG9QR80073A0XEEZRUMDHTEB6PJMNJOM2LW0MIUK07I6OYX0UVCEPW9FP9F80OQTQWJ591RC7O8ZY8FH0KZ65DLZQIPSJ6L5KVTWZEDIPWAGGQRFL660ZYD9WE6E4ENOJLTZQXOP6HN1Z123835E3V5Y3ELHYZ3AO08V8' where id=42; -update noar ti set v2='LTIIJYKPL9I9KJ0J3GFLHS0DS4SEZRV43NX25MCYG4VWO0SF9YDIEU3XYDGVQGUIHXR3LEEPAD4YY5E0A20L0VC2ZGXXDG9QR80073A0XEEZRUMDHTEB6PJMNJOM2LW0MIUK07I6OYX0UVCEPW9FP9F80OQTQWJ591RC7O8ZY8FH0KZ65DLZQIPSJ6L5KVTWZEDIPWAGGQRFL660ZYD9WE6E4ENOJLTZQXOP6HN1Z123835E3V5Y3ELHYZ3AO08V8' where id=42; -update noar tt set v3='JVUTYXYK9ZB5483JK5XKDB1JU0XEQUZ7XQYGNSGSFSFUMO713WKHNHD5TH9JP2292SJ7E7X13EJ486IG6DT6U32ROA9T17USRFQPZR0M9CY4IAOMGYU4D0R6CTT8ZZ6FXGRAUSZASUNTRL5MA5X6WPPAL5ZRTTYD1MULKQFDDC5798KGZ6YJY4434GDRES7E4LVPOB9MMXCWB9HMVQ6E21J7KGI3LTZFNA6PVV1RI6XK5Q7MA345SVYMY12LQGUIU' where id=42; -update noar ti set v3='JVUTYXYK9ZB5483JK5XKDB1JU0XEQUZ7XQYGNSGSFSFUMO713WKHNHD5TH9JP2292SJ7E7X13EJ486IG6DT6U32ROA9T17USRFQPZR0M9CY4IAOMGYU4D0R6CTT8ZZ6FXGRAUSZASUNTRL5MA5X6WPPAL5ZRTTYD1MULKQFDDC5798KGZ6YJY4434GDRES7E4LVPOB9MMXCWB9HMVQ6E21J7KGI3LTZFNA6PVV1RI6XK5Q7MA345SVYMY12LQGUIU' where id=42; -update noar tt set v0='7OUUNWZK5PQTN3W1OSZAXC6Y2KVIQD6VYIN0TNT9GM7RH746OQN2VZAD64TN7H6F0PUG4COJUFX3IIZAT2CB9G2IDY0IWPK9OW46LS7F1R7833E5UH47L48I6CJ8H6XJ9F04HW2Z3IPU8457PS311F89IT9979SXH19BOSR40ZEK0ULODTS6RURBZZAKR9RMDT26QADIY65046JHRE2GC2ZQ0J2R3H07V1RBOT170KC8Z5O2LANXZ1OY170GC19FN' where id=43; -update noar ti set v0='7OUUNWZK5PQTN3W1OSZAXC6Y2KVIQD6VYIN0TNT9GM7RH746OQN2VZAD64TN7H6F0PUG4COJUFX3IIZAT2CB9G2IDY0IWPK9OW46LS7F1R7833E5UH47L48I6CJ8H6XJ9F04HW2Z3IPU8457PS311F89IT9979SXH19BOSR40ZEK0ULODTS6RURBZZAKR9RMDT26QADIY65046JHRE2GC2ZQ0J2R3H07V1RBOT170KC8Z5O2LANXZ1OY170GC19FN' where id=43; -update noar tt set v1='K2JI1VC0EQLF3X5JCPHHRJ8VIW9V8C634IZY6414TM1HJK5X3DOSNHS2CBBUQDOR2ZB4JUUB84L6O0JPEQ3Q58FKJZZE1X67SNXTTHD0QXPJR13YJIWLGYJP85QFHB0K3Z5AZ7X0JEVDD70W9SA7SCRQ19TGZZLBZ7E4IK8QO2K7BMZ9U7104ZUPO3IM04ZB7V1TZO8Q76OJR6558NKLJDM4DVIRX0D6XGWOWP62WY4SA1YCIJEBNWLDZ8HCR2XGH' where id=43; -update noar ti set v1='K2JI1VC0EQLF3X5JCPHHRJ8VIW9V8C634IZY6414TM1HJK5X3DOSNHS2CBBUQDOR2ZB4JUUB84L6O0JPEQ3Q58FKJZZE1X67SNXTTHD0QXPJR13YJIWLGYJP85QFHB0K3Z5AZ7X0JEVDD70W9SA7SCRQ19TGZZLBZ7E4IK8QO2K7BMZ9U7104ZUPO3IM04ZB7V1TZO8Q76OJR6558NKLJDM4DVIRX0D6XGWOWP62WY4SA1YCIJEBNWLDZ8HCR2XGH' where id=43; -update noar tt set v2='FUYIRVAUM5HEEIOW5V4KO6ADS3X0LBLELXSFR2T9IS8KB859RQ4EMT7F20YUT4X49X3JZ9J6UWTAC7P90BHEZ6TZHJY89ILOO47GPMZW68ZVMGI6NX23IJN6NEI8ZY6O3QROKZB9W7TA7KTKUN2UDV6IMZC95H1DVB0FRON57CWDR7GZWS3X5OQD0D6QRAXINE3EK5OYMHQM70R9TK0ESKQVIR0VIPEJ2LLC69AR3AYYAYKDPZS65VGXPYPGTDFE0' where id=43; -update noar ti set v2='FUYIRVAUM5HEEIOW5V4KO6ADS3X0LBLELXSFR2T9IS8KB859RQ4EMT7F20YUT4X49X3JZ9J6UWTAC7P90BHEZ6TZHJY89ILOO47GPMZW68ZVMGI6NX23IJN6NEI8ZY6O3QROKZB9W7TA7KTKUN2UDV6IMZC95H1DVB0FRON57CWDR7GZWS3X5OQD0D6QRAXINE3EK5OYMHQM70R9TK0ESKQVIR0VIPEJ2LLC69AR3AYYAYKDPZS65VGXPYPGTDFE0' where id=43; -update noar tt set v3='VU2IGL24FS2BPJ36CLN7NJ5EU7M9AJI0T6SX4MGCCJ7FHG3QY60JU3P1DNSS13P9WG8EWJWMNTISDA9IXVZJ99HNAOFRWHVX1EX7Y8NE0RUAAF7SJSWSMPOZK674J2WWY2Q6YRVOKFSFEU80QF0G7CYRKBLCWGNAF38DXLNZTBS44348NETSYBDJKO3M6DU4UG2W098L2KLEKV9QNI2TN04HP9BL1FRCZ3RIQ4JAL1LPFGWOH5J6LN6MNA26P50WD' where id=43; -update noar ti set v3='VU2IGL24FS2BPJ36CLN7NJ5EU7M9AJI0T6SX4MGCCJ7FHG3QY60JU3P1DNSS13P9WG8EWJWMNTISDA9IXVZJ99HNAOFRWHVX1EX7Y8NE0RUAAF7SJSWSMPOZK674J2WWY2Q6YRVOKFSFEU80QF0G7CYRKBLCWGNAF38DXLNZTBS44348NETSYBDJKO3M6DU4UG2W098L2KLEKV9QNI2TN04HP9BL1FRCZ3RIQ4JAL1LPFGWOH5J6LN6MNA26P50WD' where id=43; -update noar tt set v0='AETR40DV7UPJPYICX0J1EV5HNXQ70XL58VMK1EN6IQA9QNDFPJU97V3HMUFVQQXZT4SKNWHV0QRWWZWO5GPOS6G0EAQW2UJ5PVJWQ4QTVQLPPW40FAL6HHB15KO7MEHKOKL1ZDMTIGZBLZ6RWE0CASLKQV2LB51OV3REA05QL2QZNAG74I9CLN5CE6RLT956GEGY1K2ELAUU2CXXCZNPISEC7RQFIJFJ3FIQ5ZA7WFFVMM2FBODM4AT2LQK1L8H3T' where id=44; -update noar ti set v0='AETR40DV7UPJPYICX0J1EV5HNXQ70XL58VMK1EN6IQA9QNDFPJU97V3HMUFVQQXZT4SKNWHV0QRWWZWO5GPOS6G0EAQW2UJ5PVJWQ4QTVQLPPW40FAL6HHB15KO7MEHKOKL1ZDMTIGZBLZ6RWE0CASLKQV2LB51OV3REA05QL2QZNAG74I9CLN5CE6RLT956GEGY1K2ELAUU2CXXCZNPISEC7RQFIJFJ3FIQ5ZA7WFFVMM2FBODM4AT2LQK1L8H3T' where id=44; -update noar tt set v1='N8D4IMZN0Y6JIFLUVVW846REB8YSBULSTTOHO8I094O8Q61BDO8KHMJHZA21QKY2UX5L3SMZDWF78RNBAE1LMP1C8JG6TO65D0PNLVPN6VFIE1UZLGY86SR4CAH5O0XP2W8XPGAJN5VODWNLS724A5MSGR914LT30XQC905W5DOLVK259B2Z3LH2X9QEHM5ULYGZPQ3ULXFZKT4X2FBLAOXO1F5H6IR12AQJKFL5QQAM9K532N8VLVBAHSFF5F237' where id=44; -update noar ti set v1='N8D4IMZN0Y6JIFLUVVW846REB8YSBULSTTOHO8I094O8Q61BDO8KHMJHZA21QKY2UX5L3SMZDWF78RNBAE1LMP1C8JG6TO65D0PNLVPN6VFIE1UZLGY86SR4CAH5O0XP2W8XPGAJN5VODWNLS724A5MSGR914LT30XQC905W5DOLVK259B2Z3LH2X9QEHM5ULYGZPQ3ULXFZKT4X2FBLAOXO1F5H6IR12AQJKFL5QQAM9K532N8VLVBAHSFF5F237' where id=44; -update noar tt set v2='4LRXA2QRHH975VT3K72RLLC16FQ6B9MB15G217WIWL2LWJ3SZ673CTGBX1L6N3DB434DKX2RNS4Y8WSV2M2GG8UUZJYG478ANZV6LKTOBCVYM17N7640GHKRLY1WFMPZPSLH3PO57SQQ12UHT0MQRV6SIUKCMU67SGDXCD08V7VJYHE5TFO71RR0O3JKZ7YL4CVOI87VBVPGZZ4E4B31N6C2FCPFU09RZ2DJX0HTB8G9RKGGM3GM9B8FU728AH94C' where id=44; -update noar ti set v2='4LRXA2QRHH975VT3K72RLLC16FQ6B9MB15G217WIWL2LWJ3SZ673CTGBX1L6N3DB434DKX2RNS4Y8WSV2M2GG8UUZJYG478ANZV6LKTOBCVYM17N7640GHKRLY1WFMPZPSLH3PO57SQQ12UHT0MQRV6SIUKCMU67SGDXCD08V7VJYHE5TFO71RR0O3JKZ7YL4CVOI87VBVPGZZ4E4B31N6C2FCPFU09RZ2DJX0HTB8G9RKGGM3GM9B8FU728AH94C' where id=44; -update noar tt set v3='0LGG3WR798F5PQT50QWBUFZASSTY5Y75BD2OB9B3XD88J4NGZ93OZ9OILUAE4LTHNGNS65MCD692KWCUD94VX0Q5AXLQS97EZTVJN3XEPEO0J00XYJFBA5KEN6HQNN2QFQIU9T0BD5YDQCKQQIM9PKNLL05FNF2S34FANSQ38WBMEMR22VN0V0O68B50T65601H6JOOGKU0P0XLMBRMK3P0F0ZDI7CN9JBP5C5ABGYQQ4PNP25AGS4T0S72VQSCGX' where id=44; -update noar ti set v3='0LGG3WR798F5PQT50QWBUFZASSTY5Y75BD2OB9B3XD88J4NGZ93OZ9OILUAE4LTHNGNS65MCD692KWCUD94VX0Q5AXLQS97EZTVJN3XEPEO0J00XYJFBA5KEN6HQNN2QFQIU9T0BD5YDQCKQQIM9PKNLL05FNF2S34FANSQ38WBMEMR22VN0V0O68B50T65601H6JOOGKU0P0XLMBRMK3P0F0ZDI7CN9JBP5C5ABGYQQ4PNP25AGS4T0S72VQSCGX' where id=44; -update noar tt set v0='0V4RR08IBP9NZ6CB8ZRV0XPFMSAPESY3D1WH00H8HCNSHO3DQF62KCMVV1NYT7ZDSO65G0ZLUPME1GKJCVFXGZQWEHEH2GE8IHFT2892EN4IPJUHAIC7MF7KI9FRT4THFC3FSJ1J1YTAC4IA7F0RQRNJ99BL3K90PWZ8OCS6MDWH99ZQP7SJA2XD9XND8F8ZWXG49ERU7JIM43ORTAH1R60S4U5CMIVYQAQE3QI254RB3EBGY1XFZVAGSGWUOZGC7' where id=45; -update noar ti set v0='0V4RR08IBP9NZ6CB8ZRV0XPFMSAPESY3D1WH00H8HCNSHO3DQF62KCMVV1NYT7ZDSO65G0ZLUPME1GKJCVFXGZQWEHEH2GE8IHFT2892EN4IPJUHAIC7MF7KI9FRT4THFC3FSJ1J1YTAC4IA7F0RQRNJ99BL3K90PWZ8OCS6MDWH99ZQP7SJA2XD9XND8F8ZWXG49ERU7JIM43ORTAH1R60S4U5CMIVYQAQE3QI254RB3EBGY1XFZVAGSGWUOZGC7' where id=45; -update noar tt set v1='3GH5ST5IIZ8ZEG2TW9871HZ0RXZFFDVRQQ6WDFZ50BXH2TEJDACQFXSFQ9ZGXR5OOBOATZ6K0XPULOK373JB5DABA3JSB5TOAPTDKP0FACI0LPGZKMRU1MGJQ0C7QKK2Z9OS879HUKZQD51B43CU7PFETVOJBVQ0RKHZT58FYT4UA4JRHVCIMJTWQ509NSC76A6L0ZXUR69Z756X3AC0JE69NX5M0NVY90ZPFKU6X9UHD1LKAPTHNTKD40KG932YI' where id=45; -update noar ti set v1='3GH5ST5IIZ8ZEG2TW9871HZ0RXZFFDVRQQ6WDFZ50BXH2TEJDACQFXSFQ9ZGXR5OOBOATZ6K0XPULOK373JB5DABA3JSB5TOAPTDKP0FACI0LPGZKMRU1MGJQ0C7QKK2Z9OS879HUKZQD51B43CU7PFETVOJBVQ0RKHZT58FYT4UA4JRHVCIMJTWQ509NSC76A6L0ZXUR69Z756X3AC0JE69NX5M0NVY90ZPFKU6X9UHD1LKAPTHNTKD40KG932YI' where id=45; -update noar tt set v2='ARR9XXHYF1CM0A7OFKOJOW1PHEY4N2TEOW7IJ3RP3Q88QUQWOKYPMYLD0LY458LIVUIVJD4EOBOGYL8WCJ43GVJW3FKV0B8M4MO1XH644Q6A39VL4HU5LF7W737AI5ITCE5PJN93MDAPB7NW49IXAI1Q3NK5XGWZ2S3TN5UUERX6IDUNA76U7XBJJ328YWKYL7H9ZZYWOOCSHPP505SO33Y0CLJTV0693THI53Y230FLQDKMKV6K7UA7W19FFB4KZ' where id=45; -update noar ti set v2='ARR9XXHYF1CM0A7OFKOJOW1PHEY4N2TEOW7IJ3RP3Q88QUQWOKYPMYLD0LY458LIVUIVJD4EOBOGYL8WCJ43GVJW3FKV0B8M4MO1XH644Q6A39VL4HU5LF7W737AI5ITCE5PJN93MDAPB7NW49IXAI1Q3NK5XGWZ2S3TN5UUERX6IDUNA76U7XBJJ328YWKYL7H9ZZYWOOCSHPP505SO33Y0CLJTV0693THI53Y230FLQDKMKV6K7UA7W19FFB4KZ' where id=45; -update noar tt set v3='0ACKNANERV1WDP5J4UA0PQLE7QE10ZYUUTMGVAQ3MHTDWKKTSTPNFVIJ5RT1I6FE6XMM7GHG6MDK710ZI5SA67K2TYDRW0KI1UEOY5CT7608OQP3KG8120PHH6CNVA792XOFROJ7HN5ZRLPV2TKFOELEVBOM5DYE64FWJK8JTKKGL42LMCP3HSKO9Z151OCM9OKO6FADFV6O3UEOXZB5UJ9DNYSZY3HT3R0CI2YTJEK9OIROFKYO1DD4OB9ECAN6O' where id=45; -update noar ti set v3='0ACKNANERV1WDP5J4UA0PQLE7QE10ZYUUTMGVAQ3MHTDWKKTSTPNFVIJ5RT1I6FE6XMM7GHG6MDK710ZI5SA67K2TYDRW0KI1UEOY5CT7608OQP3KG8120PHH6CNVA792XOFROJ7HN5ZRLPV2TKFOELEVBOM5DYE64FWJK8JTKKGL42LMCP3HSKO9Z151OCM9OKO6FADFV6O3UEOXZB5UJ9DNYSZY3HT3R0CI2YTJEK9OIROFKYO1DD4OB9ECAN6O' where id=45; -update noar tt set v0='V9RCSI89T4LGCAOXCVVVCV1R3Q52BQB96VS7C7CVH8VPB8HO3W4OOY6CJNG72KXBBNRCA5WIHAAAHGKAP0RP61LSKT67D9WIMNSQRKPHADKE4VHDUW43MTNO2DARWTZ7P15TJI2YLPKS9QDJ6UU8WCQVJQXS45B5T7NXY0AS56WBOSBFKBFKMPJM694ZA2HW2XGALIX9G0I0ROWYJ9UGMPZV9VNE3QYGG32EGI6LM8JFK5LYIOASKI5LA7C76IURP' where id=46; -update noar ti set v0='V9RCSI89T4LGCAOXCVVVCV1R3Q52BQB96VS7C7CVH8VPB8HO3W4OOY6CJNG72KXBBNRCA5WIHAAAHGKAP0RP61LSKT67D9WIMNSQRKPHADKE4VHDUW43MTNO2DARWTZ7P15TJI2YLPKS9QDJ6UU8WCQVJQXS45B5T7NXY0AS56WBOSBFKBFKMPJM694ZA2HW2XGALIX9G0I0ROWYJ9UGMPZV9VNE3QYGG32EGI6LM8JFK5LYIOASKI5LA7C76IURP' where id=46; -update noar tt set v1='RIRWWU6AFOYC1OP9V5SGC5XCBQ5Z96X9JXBHCBCJONKMJ4UK9Y4NJRUOE7Z0VUVAGH8YWSYBBJWEJZYW0486D93PBO2ZI52LA3KTWWXEMBKBWYLOJ6YG7YV2M10JQLLR5PLPWC65R61ZRY2FPONB2PKDQQZZNVCKICBXA6AUNIWSL27EKF09ZOBKH25M7B2J6QH3WZ2DDOF0UVT8X172E7PCOXYO7CMPOWPOKD0MJSUTGFR4O7HQR6D7TL6WF96UT' where id=46; -update noar ti set v1='RIRWWU6AFOYC1OP9V5SGC5XCBQ5Z96X9JXBHCBCJONKMJ4UK9Y4NJRUOE7Z0VUVAGH8YWSYBBJWEJZYW0486D93PBO2ZI52LA3KTWWXEMBKBWYLOJ6YG7YV2M10JQLLR5PLPWC65R61ZRY2FPONB2PKDQQZZNVCKICBXA6AUNIWSL27EKF09ZOBKH25M7B2J6QH3WZ2DDOF0UVT8X172E7PCOXYO7CMPOWPOKD0MJSUTGFR4O7HQR6D7TL6WF96UT' where id=46; -update noar tt set v2='DWWQTXUC74RHFT7HSUKCPVUF33J5R8AP1N21XTYV05C7XQRUFMYZEMBT1CDQSVGSEDHMCVC7BRUZT8VZ8PYO6MI2S9PFKV2JI6HEUBNGEABUAIZJ43PS6QHFSLNU6DC338CZLUB4CR9PO2SVHU2O9Q18UW08W2V13V6T4NPFAY1CW0N1Y09ZJHWQ35BWLTHO9IAKAVMCPOBX9V3P00U5A02RQCFB4LGNYLD757I3Y342ZW5PKHFYQNI3ZO6YN0TQP' where id=46; -update noar ti set v2='DWWQTXUC74RHFT7HSUKCPVUF33J5R8AP1N21XTYV05C7XQRUFMYZEMBT1CDQSVGSEDHMCVC7BRUZT8VZ8PYO6MI2S9PFKV2JI6HEUBNGEABUAIZJ43PS6QHFSLNU6DC338CZLUB4CR9PO2SVHU2O9Q18UW08W2V13V6T4NPFAY1CW0N1Y09ZJHWQ35BWLTHO9IAKAVMCPOBX9V3P00U5A02RQCFB4LGNYLD757I3Y342ZW5PKHFYQNI3ZO6YN0TQP' where id=46; -update noar tt set v3='HH0Z1A2QNYU5N7MB90DDF33H3OFH3E1ORUTP8L87HRU7NYHGAIONAD5K6W8X8HVYAU11MRXUHPPCJDH9N5EXG1WA1KEMU55Y9AXE895OCXY5GSM4I72JXYGNB26CNZ7VAVA8DELE5A5E63PM6DYIEL04JUFRZ22YUUZ5Y0W2ZZYI3YJ4PHRY9S59FGGRO1PKZ8C596RD0AUOG7UROW9AZLEZZ6EXBOP1Q1IQHU59I9B6IUSTXQH4U461GD5UUA245' where id=46; -update noar ti set v3='HH0Z1A2QNYU5N7MB90DDF33H3OFH3E1ORUTP8L87HRU7NYHGAIONAD5K6W8X8HVYAU11MRXUHPPCJDH9N5EXG1WA1KEMU55Y9AXE895OCXY5GSM4I72JXYGNB26CNZ7VAVA8DELE5A5E63PM6DYIEL04JUFRZ22YUUZ5Y0W2ZZYI3YJ4PHRY9S59FGGRO1PKZ8C596RD0AUOG7UROW9AZLEZZ6EXBOP1Q1IQHU59I9B6IUSTXQH4U461GD5UUA245' where id=46; -update noar tt set v0='MEWSQH4NSS9ROL1BIGRPDRTL18W6HKGDZBNEUFSWHHYE5ZTRIBQND43A7DMHSTCU24450378JK3D7GM8R0JUAKU2NX7KY1XADQKXACH3LGY8SJIEL69FBLY488BYWLGYYIXBGWYSYGD2KTDEQ86121C3GL0OL734J978NSGKQUM5KTEKE6RQTPPPUWFPMWS8IPU5QVIIRLD21XRIRA4RIECJ65PWRWP2JO7O57TQI8ZRHZGPRAMJKRTU19CB3WSVZ' where id=47; -update noar ti set v0='MEWSQH4NSS9ROL1BIGRPDRTL18W6HKGDZBNEUFSWHHYE5ZTRIBQND43A7DMHSTCU24450378JK3D7GM8R0JUAKU2NX7KY1XADQKXACH3LGY8SJIEL69FBLY488BYWLGYYIXBGWYSYGD2KTDEQ86121C3GL0OL734J978NSGKQUM5KTEKE6RQTPPPUWFPMWS8IPU5QVIIRLD21XRIRA4RIECJ65PWRWP2JO7O57TQI8ZRHZGPRAMJKRTU19CB3WSVZ' where id=47; -update noar tt set v1='07U6EXGWSBP85X4EGFAGDCFXMJ2BN7TJC6F7MTRYVAB0R7SFOGCPHBYZ81649BUJGS4LV54RAJQQVVKJ13W25Y2SXN4AEEOYPHYZ5MSJ173RDG45CMXLTNBVWTO0GSNJEB2TVYXTNCIXVAQ1N4LCZZOLN6SO7R7B5WVNUOVOS3WJOIJOGIFEXRBV77MWO9NISOG51D4OVPFTBS7WYU4BFX3SFG3VXVC5F2PMRUFLALH0QX8E0A8PPB422PKCV6JV2' where id=47; -update noar ti set v1='07U6EXGWSBP85X4EGFAGDCFXMJ2BN7TJC6F7MTRYVAB0R7SFOGCPHBYZ81649BUJGS4LV54RAJQQVVKJ13W25Y2SXN4AEEOYPHYZ5MSJ173RDG45CMXLTNBVWTO0GSNJEB2TVYXTNCIXVAQ1N4LCZZOLN6SO7R7B5WVNUOVOS3WJOIJOGIFEXRBV77MWO9NISOG51D4OVPFTBS7WYU4BFX3SFG3VXVC5F2PMRUFLALH0QX8E0A8PPB422PKCV6JV2' where id=47; -update noar tt set v2='4ZE33VS11INXIY5RQ68BSV4CU3WSJOYBL4S9219JN31YOIB9XLCCN5YI4LXWKEES3AXPM28AN5454DRD1NUVXUNEHSO06J74L5GQE15ZS72KV6R2YN5TR66NN87QZOX5RW2CD9EAJQB55JYWX7L3H50WYUONVJ50815YHJB1F6GQJ0QLBRN4VVY8IOQ0LMTT2GA1EACP6QJGJ5959ZL7DE5BH903Q1O2ZT74NWLF8AFS9UKV3416XK4TVTEA1XWVD' where id=47; -update noar ti set v2='4ZE33VS11INXIY5RQ68BSV4CU3WSJOYBL4S9219JN31YOIB9XLCCN5YI4LXWKEES3AXPM28AN5454DRD1NUVXUNEHSO06J74L5GQE15ZS72KV6R2YN5TR66NN87QZOX5RW2CD9EAJQB55JYWX7L3H50WYUONVJ50815YHJB1F6GQJ0QLBRN4VVY8IOQ0LMTT2GA1EACP6QJGJ5959ZL7DE5BH903Q1O2ZT74NWLF8AFS9UKV3416XK4TVTEA1XWVD' where id=47; -update noar tt set v3='R1SY7FBXRNS2JDRH2WEJ5JR7XTLZHZ0OZLYK3WZFHDA0RR189W6U8S7RMJFW9441IVJ7900TNEPS95KO9RNYQZH00BTYPW0PDEO4RCKF8PURHU0QQIUFRF7NIU69H5RCSLRRWGW7FJFSSNEK64J1Y5YTSO6L2P3EOG7OLRTRA8HS9QERT3448KV286YOKDSWZWIG0QAO1BYDX4FT4SAT9WAHN25CLFTCTTGDV6CCS31UC1X3EDQTEJB5C5PN0BYCD' where id=47; -update noar ti set v3='R1SY7FBXRNS2JDRH2WEJ5JR7XTLZHZ0OZLYK3WZFHDA0RR189W6U8S7RMJFW9441IVJ7900TNEPS95KO9RNYQZH00BTYPW0PDEO4RCKF8PURHU0QQIUFRF7NIU69H5RCSLRRWGW7FJFSSNEK64J1Y5YTSO6L2P3EOG7OLRTRA8HS9QERT3448KV286YOKDSWZWIG0QAO1BYDX4FT4SAT9WAHN25CLFTCTTGDV6CCS31UC1X3EDQTEJB5C5PN0BYCD' where id=47; -update noar tt set v0='Z3NNEIH7FOIR6GRI7DE1JI3CWVLNABVWMYNV80C09E7LNKU8MIOSXWZVX8XMV3B6VVA38GFNP3RPT9BLIJ4D7LEY2QCAQU8LOSDR9MAXBUGI8YQ2WC4KMLYDN4J5SD4JLFZLZ627HYD0XNB9ZLS4UT3TM1BRVC5U31Z53JY9SPU0YC3EL67C4EUOBWIB6BLA1L9BLGEHB8WH0T5F99S40DMEOMH1DYDTIIVHLS0CX427XJ0I5JAZFNBA52PRX0CDQ' where id=48; -update noar ti set v0='Z3NNEIH7FOIR6GRI7DE1JI3CWVLNABVWMYNV80C09E7LNKU8MIOSXWZVX8XMV3B6VVA38GFNP3RPT9BLIJ4D7LEY2QCAQU8LOSDR9MAXBUGI8YQ2WC4KMLYDN4J5SD4JLFZLZ627HYD0XNB9ZLS4UT3TM1BRVC5U31Z53JY9SPU0YC3EL67C4EUOBWIB6BLA1L9BLGEHB8WH0T5F99S40DMEOMH1DYDTIIVHLS0CX427XJ0I5JAZFNBA52PRX0CDQ' where id=48; -update noar tt set v1='UQETTULM3ZC910CFODB2IJHTPDKJ677QZXJ6S5QY3J6A6QSHU43P5ASNC6BVAY7QPSW0QYFMAR5N6Q5JK0ZLQQF3C4ZJG3ZYAIX8DWVE6ET8LID4MRW5SBNGHH80EH73QRI2EOZ7R9F0MQRAKCXI20VF5II3CRDN17UQ6UA503ZSY817OTDY1JYHUTHOJJR0F4F3TVVWK5VTN1DTCOB9T7AE1WUN81SNP5STVNR5Y9F8H1TQQFEYGAH1ZALDL5AFU' where id=48; -update noar ti set v1='UQETTULM3ZC910CFODB2IJHTPDKJ677QZXJ6S5QY3J6A6QSHU43P5ASNC6BVAY7QPSW0QYFMAR5N6Q5JK0ZLQQF3C4ZJG3ZYAIX8DWVE6ET8LID4MRW5SBNGHH80EH73QRI2EOZ7R9F0MQRAKCXI20VF5II3CRDN17UQ6UA503ZSY817OTDY1JYHUTHOJJR0F4F3TVVWK5VTN1DTCOB9T7AE1WUN81SNP5STVNR5Y9F8H1TQQFEYGAH1ZALDL5AFU' where id=48; -update noar tt set v2='XO6WHYZJDUY15PL8GCCSK692T3BKD94YOUTCB5FWGQG0ICUHR4ZQFQ8NB2ZCPKTSYAPBOW9RHG1WHUAVY8IFMC9SNWMN8MGTWJ4Z1O6VX4CELGFE1A5QU5KM4HIDEP3C8CUM524UM54JZ6DLFRWR6O8GOR9TU5WXYFKQWWJ6AWDHRKW1AMRDA4E0VT2R1IAZ26UNM93GY760XKUE9FIPARYRK84FOYQ5GZ6P849GGQL4EZ5ZRQQU40B7UW0CSA88T' where id=48; -update noar ti set v2='XO6WHYZJDUY15PL8GCCSK692T3BKD94YOUTCB5FWGQG0ICUHR4ZQFQ8NB2ZCPKTSYAPBOW9RHG1WHUAVY8IFMC9SNWMN8MGTWJ4Z1O6VX4CELGFE1A5QU5KM4HIDEP3C8CUM524UM54JZ6DLFRWR6O8GOR9TU5WXYFKQWWJ6AWDHRKW1AMRDA4E0VT2R1IAZ26UNM93GY760XKUE9FIPARYRK84FOYQ5GZ6P849GGQL4EZ5ZRQQU40B7UW0CSA88T' where id=48; -update noar tt set v3='KGKROJSQXWLCGA578DR5ZF7Z6XNFD5JZFIN25KZUXMXCQRY2F47KE4ME724EU1ACF0W2LW6PU07AP5VAVKHSI5WJK1PNY91EM37FWDJSV6B7605PCTG67Y1ZWV2ESISM96W94VP6SD321K6XBCVO1ZFHW5SQBYW09Q5AU7N9RMA68Q0MF5YNLHYT9QLN93SCTQ3Y34T8778C1IH27UEE39Z06E7J0LJVRIXJ8S578W1VV6HXWCFGDDREWOTDOJMYU' where id=48; -update noar ti set v3='KGKROJSQXWLCGA578DR5ZF7Z6XNFD5JZFIN25KZUXMXCQRY2F47KE4ME724EU1ACF0W2LW6PU07AP5VAVKHSI5WJK1PNY91EM37FWDJSV6B7605PCTG67Y1ZWV2ESISM96W94VP6SD321K6XBCVO1ZFHW5SQBYW09Q5AU7N9RMA68Q0MF5YNLHYT9QLN93SCTQ3Y34T8778C1IH27UEE39Z06E7J0LJVRIXJ8S578W1VV6HXWCFGDDREWOTDOJMYU' where id=48; -update noar tt set v0='2C0TDDNSU7F74W7DMOWTC5XOZQXLJ92FXHA2Z0RG6S9TLQ951G3DOXGXFYXBNZF6BS4KMKUPTEOB7OQDXJVAA3SQN4P6Z60GPUV30RM293QF5KGQC2QZG1M4CX5UVI5KTM665SIV3JCCBGO0AUC6MTKFET3NCKU5VZEZ3NQS0J55IG3PAA8HJIQNIHIS02JZW2J6RFBLBCIXORLAR8K3NGEROL7XP6SM63TV92W62X0976PZKBM6P52WYWQOTD79V' where id=49; -update noar ti set v0='2C0TDDNSU7F74W7DMOWTC5XOZQXLJ92FXHA2Z0RG6S9TLQ951G3DOXGXFYXBNZF6BS4KMKUPTEOB7OQDXJVAA3SQN4P6Z60GPUV30RM293QF5KGQC2QZG1M4CX5UVI5KTM665SIV3JCCBGO0AUC6MTKFET3NCKU5VZEZ3NQS0J55IG3PAA8HJIQNIHIS02JZW2J6RFBLBCIXORLAR8K3NGEROL7XP6SM63TV92W62X0976PZKBM6P52WYWQOTD79V' where id=49; -update noar tt set v1='HDZ5SU7YMR83FBT3WKOA5LUPSTW7V1XDWU4J6Y3RS8PJOY3V13AR9RXMPE4N507KEPWINZFRF9SMDKMZREGOL4F00LK058YWKGGCHVXN3046CBI4VD47MOD394R1A1LIDRW6G4S2X2XDEXB05IMCCQONA4KX6D0X47FV9OK9B1BSW841NF90A2ENVJ1V4AUE0SCLYGDMM1FSEW6VFAN2UE0ZFBTPBMMOAT26I027KHDFG9WSPIY004V16B1L5GZXN' where id=49; -update noar ti set v1='HDZ5SU7YMR83FBT3WKOA5LUPSTW7V1XDWU4J6Y3RS8PJOY3V13AR9RXMPE4N507KEPWINZFRF9SMDKMZREGOL4F00LK058YWKGGCHVXN3046CBI4VD47MOD394R1A1LIDRW6G4S2X2XDEXB05IMCCQONA4KX6D0X47FV9OK9B1BSW841NF90A2ENVJ1V4AUE0SCLYGDMM1FSEW6VFAN2UE0ZFBTPBMMOAT26I027KHDFG9WSPIY004V16B1L5GZXN' where id=49; -update noar tt set v2='0Y5VN6FHUGBM5YPMP7CT01J0W65C56RVJRSO43SVPIF2NVATZRMXKLS4AR56TOFK475SY5GK1Y44ABNA84UXAGS6LGEWYUTNBCHQ3J3S4S5YG84GWFJXW522BDINVHZBFPTQBLUYZKDPEQRXXTM3J83E2A2CVL056GK2GF3CHF85VTPW67VRG2A7M6ZPAKMA7WITDRU6Q4W5J6179J1ZOMT10EQHYHMHKCS8MHR70WJKFRGL8D68TYV1GXN6KPIJ1' where id=49; -update noar ti set v2='0Y5VN6FHUGBM5YPMP7CT01J0W65C56RVJRSO43SVPIF2NVATZRMXKLS4AR56TOFK475SY5GK1Y44ABNA84UXAGS6LGEWYUTNBCHQ3J3S4S5YG84GWFJXW522BDINVHZBFPTQBLUYZKDPEQRXXTM3J83E2A2CVL056GK2GF3CHF85VTPW67VRG2A7M6ZPAKMA7WITDRU6Q4W5J6179J1ZOMT10EQHYHMHKCS8MHR70WJKFRGL8D68TYV1GXN6KPIJ1' where id=49; -update noar tt set v3='JCKTSLW5IWQXWY843YYA3XVS7YAYOLUGO3TAA6TU80Z2R4X8X62IDZE8OV5UWN2X0223GQ6KJI2KVL6V7QCFHCJI2BWIA2RAPBROMVEV7DP6QHVRHVRWY40HU5KEYRDDMQNGMJTOHXS92NLRAXUEIWT5VB1PD6C2UVOMZOA6IDYP5PJE5V4HLPFGNHKSTBOQ9MA7A3FXC6TM3GEYAOO8LWDW43NXQX0FHCFTH9313Z7IXHNL5IZZVPSILVJ4FG2XI' where id=49; -update noar ti set v3='JCKTSLW5IWQXWY843YYA3XVS7YAYOLUGO3TAA6TU80Z2R4X8X62IDZE8OV5UWN2X0223GQ6KJI2KVL6V7QCFHCJI2BWIA2RAPBROMVEV7DP6QHVRHVRWY40HU5KEYRDDMQNGMJTOHXS92NLRAXUEIWT5VB1PD6C2UVOMZOA6IDYP5PJE5V4HLPFGNHKSTBOQ9MA7A3FXC6TM3GEYAOO8LWDW43NXQX0FHCFTH9313Z7IXHNL5IZZVPSILVJ4FG2XI' where id=49; -update noar tt set v0='B3HHCFWDMM36S7X9QJJKZ8NDSEGGEXOYOCOGD3BHTZY2TQE097IZUTOK1GI94G5O0C8Y7PRRYDHH0M1P8BLUVKJ6CANZ5W8MB9O8UCEYM0GHJ7E87ILTE7DJMH75O0YZ4MCL4ENVL9H50EIRLM9TRGUKDI1PJ9VP7212FE4R4HRBALY49DK80WRISGR45J3RHDP4ALOANMF1W8613CVLEHOJP17ZFNR4F3D7PZYPGHYPBTOWFGNY5F0APADJJC03U' where id=50; -update noar ti set v0='B3HHCFWDMM36S7X9QJJKZ8NDSEGGEXOYOCOGD3BHTZY2TQE097IZUTOK1GI94G5O0C8Y7PRRYDHH0M1P8BLUVKJ6CANZ5W8MB9O8UCEYM0GHJ7E87ILTE7DJMH75O0YZ4MCL4ENVL9H50EIRLM9TRGUKDI1PJ9VP7212FE4R4HRBALY49DK80WRISGR45J3RHDP4ALOANMF1W8613CVLEHOJP17ZFNR4F3D7PZYPGHYPBTOWFGNY5F0APADJJC03U' where id=50; -update noar tt set v1='ZSXVHFTF1ZYI8DN9M2RF2FLYQH0IPG3PZMXRYJCZ3P5MPT5I7SH5SJYE03PCP9U1NGYGD645O432EF8Q2K0O3U3LCRPWO7VWUMFLIQFF4Y6ZOLMZCGNZJHE0UP7G2T49ZHCADTGM726B1RS9LAQOPT2PVWMPA1Q2D8SNS2LQCAE6Q0PZ3HMKGZPTBUPH4TA5Y14W76LX2663FV8D4YN93IESPCOND3YZAD43QA1YD4TQEWXV9A3SOZE4V240AI0TE' where id=50; -update noar ti set v1='ZSXVHFTF1ZYI8DN9M2RF2FLYQH0IPG3PZMXRYJCZ3P5MPT5I7SH5SJYE03PCP9U1NGYGD645O432EF8Q2K0O3U3LCRPWO7VWUMFLIQFF4Y6ZOLMZCGNZJHE0UP7G2T49ZHCADTGM726B1RS9LAQOPT2PVWMPA1Q2D8SNS2LQCAE6Q0PZ3HMKGZPTBUPH4TA5Y14W76LX2663FV8D4YN93IESPCOND3YZAD43QA1YD4TQEWXV9A3SOZE4V240AI0TE' where id=50; -update noar tt set v2='COPC5PZKQW75H1JB2V99Q0EHRDMNABBZQJQXMV67XJAPZAAQY4UT3DDXS74SFLOOBPU88MCA3P6HEEKMZ4Y21SA37HK454OLCSWA2SSY0POBLL7CBLRP020YPTIBLZSYV8FK7G1DENNVIQ1KNIUMK7PQ5V4FPUAQMWTB5A0JQMB64K9U3ASGYQR3WXKVTF3PMCAAMDU5UBLO62YGTD3VI5CZQGCAF9W8O0RXXNEKQP30HJDYJHLE20L92L8L2Y5KQ' where id=50; -update noar ti set v2='COPC5PZKQW75H1JB2V99Q0EHRDMNABBZQJQXMV67XJAPZAAQY4UT3DDXS74SFLOOBPU88MCA3P6HEEKMZ4Y21SA37HK454OLCSWA2SSY0POBLL7CBLRP020YPTIBLZSYV8FK7G1DENNVIQ1KNIUMK7PQ5V4FPUAQMWTB5A0JQMB64K9U3ASGYQR3WXKVTF3PMCAAMDU5UBLO62YGTD3VI5CZQGCAF9W8O0RXXNEKQP30HJDYJHLE20L92L8L2Y5KQ' where id=50; -update noar tt set v3='2Y4IEE44CZIVJGG3BGLHB716UH5O4VXM68VM0FH98H3QSGAI8O2KBX0ETV3H2GGI2PD4Z07MHPCONPUBPSW3YBGJWPNGFDXB37LFR42K50JC7U77P0RAC1TE178LD01S0FRFQ5JSKW92H56CO0I90SLALKABB0ABWCK28UF4Q2N7UIFIQXUMNQ88B5CJBRC4SKWX8B394TR19HTNHRCEUWMLIJCPBMD03T18API3U3H4Y38DY4HH40EVVXDRC6AEF' where id=50; -update noar ti set v3='2Y4IEE44CZIVJGG3BGLHB716UH5O4VXM68VM0FH98H3QSGAI8O2KBX0ETV3H2GGI2PD4Z07MHPCONPUBPSW3YBGJWPNGFDXB37LFR42K50JC7U77P0RAC1TE178LD01S0FRFQ5JSKW92H56CO0I90SLALKABB0ABWCK28UF4Q2N7UIFIQXUMNQ88B5CJBRC4SKWX8B394TR19HTNHRCEUWMLIJCPBMD03T18API3U3H4Y38DY4HH40EVVXDRC6AEF' where id=50; -update noar tt set v0='9KAHWAZ10DNAUVX8VNCBF3YLYN9PX46Z5G90PYYNZLGZCPQWJIARY2NCSHOTWR3I6NLGMQHVPCOKSC3AFORY2GCJSOIAVUOP2N6RQSX42S6871K6M3O4QTKLMLQNMLJ4DOQWYRIRAI1RV021FVCT0YP79ILOEWQCIDQVBDP7MMCZIIGOFBQU87QC8YUZIZMN1STRRC8ZQULPVG3PA4M0IPCM198HH95X2UEIGL671YCYIJPUIBYFBK6LODY8RO9EE' where id=51; -update noar ti set v0='9KAHWAZ10DNAUVX8VNCBF3YLYN9PX46Z5G90PYYNZLGZCPQWJIARY2NCSHOTWR3I6NLGMQHVPCOKSC3AFORY2GCJSOIAVUOP2N6RQSX42S6871K6M3O4QTKLMLQNMLJ4DOQWYRIRAI1RV021FVCT0YP79ILOEWQCIDQVBDP7MMCZIIGOFBQU87QC8YUZIZMN1STRRC8ZQULPVG3PA4M0IPCM198HH95X2UEIGL671YCYIJPUIBYFBK6LODY8RO9EE' where id=51; -update noar tt set v1='JRRFBWT3MDK1VJR7GS0Y6EPQ755EVK4V5OOCXKKO4OKTAD2GFM0GFCYR66Z753H15CK2K4Q708CXAADGRV5QFBI5X96COO90GI0IIXKO01ADVJYJFC2AHXZSPE0IJAPYATBPL4XUBYLYTU13MACVU3XBUP6KTQ51BLU5DZJCTK9PR46AU4AU7LRNAP5AZF0YCGHV7ACK90XEO6H8KOYOFYPCNF065RUGM3JWCVC5LUDPJDSGA4I8SZ2I48IRX9NQK' where id=51; -update noar ti set v1='JRRFBWT3MDK1VJR7GS0Y6EPQ755EVK4V5OOCXKKO4OKTAD2GFM0GFCYR66Z753H15CK2K4Q708CXAADGRV5QFBI5X96COO90GI0IIXKO01ADVJYJFC2AHXZSPE0IJAPYATBPL4XUBYLYTU13MACVU3XBUP6KTQ51BLU5DZJCTK9PR46AU4AU7LRNAP5AZF0YCGHV7ACK90XEO6H8KOYOFYPCNF065RUGM3JWCVC5LUDPJDSGA4I8SZ2I48IRX9NQK' where id=51; -update noar tt set v2='DT8A7KD7QYXD1I317W44YGUSBL22DITUVKYKNT571EHPOW96XW6LTS3JRVOHW3Q0VLF8XEY6KLV05G6K2YLZEW0TMVBH5W02384Y17V1MILYCAXZMF5HGRBPUQPNE90S85AM6M0HNHLQKP9I0OJJC3CJ18S29BD1CMJXHF1SX119EN8T3RDXCI7T77EP655KYQJ5C8OA3V20FDY01UIBYB4KR7NZ2W60ZNY00AADOHIAN0CNHT8RXUI586Z65LOPZ' where id=51; -update noar ti set v2='DT8A7KD7QYXD1I317W44YGUSBL22DITUVKYKNT571EHPOW96XW6LTS3JRVOHW3Q0VLF8XEY6KLV05G6K2YLZEW0TMVBH5W02384Y17V1MILYCAXZMF5HGRBPUQPNE90S85AM6M0HNHLQKP9I0OJJC3CJ18S29BD1CMJXHF1SX119EN8T3RDXCI7T77EP655KYQJ5C8OA3V20FDY01UIBYB4KR7NZ2W60ZNY00AADOHIAN0CNHT8RXUI586Z65LOPZ' where id=51; -update noar tt set v3='SNHO586PPIZR0DG5HB9LTH3OAJDR144L4XU36B2AXRPRMT962ICONI83IM9DA09HAI00SXIN2D05X8Y3PZEDD6QWKJAT3NEYGCPYBMSW6A71BNL0VU0PP18FYPS8SDP2RYQHNO21XG79X7X8O9JO739K701LARL9GCV08H02WDC712I4I6N579H8J3BLB99N1P7WXNSGMNGYIAL5GJSY73A27CGDA7335YCZWGNV7NVF6SNTD3Q2ESRQ3Z46FQ3PY' where id=51; -update noar ti set v3='SNHO586PPIZR0DG5HB9LTH3OAJDR144L4XU36B2AXRPRMT962ICONI83IM9DA09HAI00SXIN2D05X8Y3PZEDD6QWKJAT3NEYGCPYBMSW6A71BNL0VU0PP18FYPS8SDP2RYQHNO21XG79X7X8O9JO739K701LARL9GCV08H02WDC712I4I6N579H8J3BLB99N1P7WXNSGMNGYIAL5GJSY73A27CGDA7335YCZWGNV7NVF6SNTD3Q2ESRQ3Z46FQ3PY' where id=51; -update noar tt set v0='YJVAP3M8GHRF00KTP134RRE07NBYCXP67FYM7F2RQBAUV5LZAESBVU6ANEG7XZ9OD7SGDHLR6U94TIQWHLCXPFTNERL3RSXH49L2H3RXCRBYXI4TIM98QHEFHXW1Y3HNEANNV5D9TPTTENGEBMNRO84Z4SR3K7CMJI0MKDVLP7MH9EC3YKYZDG0S1RPMCDS1Y25B5B1UN84K7RAU01X6T1S3S30KP86C3WPU1QZF7K46G1NYXOVI6RF1ZPFFVNA85' where id=52; -update noar ti set v0='YJVAP3M8GHRF00KTP134RRE07NBYCXP67FYM7F2RQBAUV5LZAESBVU6ANEG7XZ9OD7SGDHLR6U94TIQWHLCXPFTNERL3RSXH49L2H3RXCRBYXI4TIM98QHEFHXW1Y3HNEANNV5D9TPTTENGEBMNRO84Z4SR3K7CMJI0MKDVLP7MH9EC3YKYZDG0S1RPMCDS1Y25B5B1UN84K7RAU01X6T1S3S30KP86C3WPU1QZF7K46G1NYXOVI6RF1ZPFFVNA85' where id=52; -update noar tt set v1='7PWERZDMXS5W3D0RULJNJUIL3O480IR9MIYLGWXHNIYIU9HP38MUP1DA9D6NSEHZ2XL0RTIUI0EEAQV56KOHSAMJY8KYBV52CBO2HLRIQZQYHZZ4TBFHQH23RNMXEIFGXR2KVYU4QFQX5WRIOE1X40TOK58YVP8RU48HR8088RE5J27Y2GRCAKP7OE6DJFCJMHGSRNAY47LYE8FY4EWNI2UK0OEDMAV71EPOU043URXT6TLOC0G6LKMHLHZ285MLJ' where id=52; -update noar ti set v1='7PWERZDMXS5W3D0RULJNJUIL3O480IR9MIYLGWXHNIYIU9HP38MUP1DA9D6NSEHZ2XL0RTIUI0EEAQV56KOHSAMJY8KYBV52CBO2HLRIQZQYHZZ4TBFHQH23RNMXEIFGXR2KVYU4QFQX5WRIOE1X40TOK58YVP8RU48HR8088RE5J27Y2GRCAKP7OE6DJFCJMHGSRNAY47LYE8FY4EWNI2UK0OEDMAV71EPOU043URXT6TLOC0G6LKMHLHZ285MLJ' where id=52; -update noar tt set v2='ABTN68797XZX1XLT9UYN6TW14OVIYIMEUOTGE0CL2FD0D65APM7UZN4CDF6Q4JKLWGUU2DWKMKTUKZSXIH3J3XXV1YNDMC8C9HAYQ8118P9FRH30I430WD8AUQXM6MSI6SGDFT0CSAHWVPEZL1PEIE453GF38116NVPVB9YMYOOYGE3ZPUP5H4MZ9G3JZKEGPBGJ2HD26M18SPOBNJTEUSFZHRCCACIE3BD18BLOMVB4MJ2MKVSIWBO1A26T69X1P' where id=52; -update noar ti set v2='ABTN68797XZX1XLT9UYN6TW14OVIYIMEUOTGE0CL2FD0D65APM7UZN4CDF6Q4JKLWGUU2DWKMKTUKZSXIH3J3XXV1YNDMC8C9HAYQ8118P9FRH30I430WD8AUQXM6MSI6SGDFT0CSAHWVPEZL1PEIE453GF38116NVPVB9YMYOOYGE3ZPUP5H4MZ9G3JZKEGPBGJ2HD26M18SPOBNJTEUSFZHRCCACIE3BD18BLOMVB4MJ2MKVSIWBO1A26T69X1P' where id=52; -update noar tt set v3='BME8T6JHZK2ADGLZNTMFMJVCKJM18KRG5LY1VDP1AX324XAWOKZZ1L0HPYLHVEK3U6VZWPEBZRHOLBXQHKIL2275L8I65EIZDNTWFSVHXEM8AUDDFVLZGYL8D7TQ4ANRHBXYMQ02JO87CEC8R4HIXUGSPK3HLWHEM3VDGF5BBKCUJXE5MGNOCM5Z6111C8TGS937QI7FLWOE13MX0U718H2VEIAMPCYD9UIB83RPRBOQ4MSE81G88OD5PB4USJQTT' where id=52; -update noar ti set v3='BME8T6JHZK2ADGLZNTMFMJVCKJM18KRG5LY1VDP1AX324XAWOKZZ1L0HPYLHVEK3U6VZWPEBZRHOLBXQHKIL2275L8I65EIZDNTWFSVHXEM8AUDDFVLZGYL8D7TQ4ANRHBXYMQ02JO87CEC8R4HIXUGSPK3HLWHEM3VDGF5BBKCUJXE5MGNOCM5Z6111C8TGS937QI7FLWOE13MX0U718H2VEIAMPCYD9UIB83RPRBOQ4MSE81G88OD5PB4USJQTT' where id=52; -update noar tt set v0='VVDXG9N95ESO8IZRXAB7BA7WWBVNQW2ZJ65ISS288DK86W5ZL00OLY8T643JXCH9W3AL4H0RP44RH3LVLKROYRI0NYM27I0Q50IJVBNHJBDZN44DU53NZ0200DTHY481FVC4X5S1PTY6KVTJ7J222HBBNHI5MKROU0MPHVS0RBEP934UBIGS9MZVXMCKQRTDR6MI93B699XQGIHY40TIPI3L21QTI0873ZVZGWNEEY7P8T36M1F2VVPX6HS5SWM5O' where id=53; -update noar ti set v0='VVDXG9N95ESO8IZRXAB7BA7WWBVNQW2ZJ65ISS288DK86W5ZL00OLY8T643JXCH9W3AL4H0RP44RH3LVLKROYRI0NYM27I0Q50IJVBNHJBDZN44DU53NZ0200DTHY481FVC4X5S1PTY6KVTJ7J222HBBNHI5MKROU0MPHVS0RBEP934UBIGS9MZVXMCKQRTDR6MI93B699XQGIHY40TIPI3L21QTI0873ZVZGWNEEY7P8T36M1F2VVPX6HS5SWM5O' where id=53; -update noar tt set v1='QHS4I64K5EI379CFKU6BR5HOCUT4XAY72IRWTQM18YK6CPKGF3ZEUQQZ9TDB4R2BFXSG6SM8BHSQ6AKMN87UZ7L6AF8TCDG5EOWIZYHFVHYR7B4FAW9MVB4QWC354YLE1RV0YUZ6RZI5HHJW9JQXP9R0IOPD9GL9O4F7ANDCN2EHIQATI2UJ89IBNMZRJG2T56KNTL0J87BHL8OA5KXCXK9G69JDZVT8GIE2CS4LT352VKMTLKI5BR8X8C33MCHL3' where id=53; -update noar ti set v1='QHS4I64K5EI379CFKU6BR5HOCUT4XAY72IRWTQM18YK6CPKGF3ZEUQQZ9TDB4R2BFXSG6SM8BHSQ6AKMN87UZ7L6AF8TCDG5EOWIZYHFVHYR7B4FAW9MVB4QWC354YLE1RV0YUZ6RZI5HHJW9JQXP9R0IOPD9GL9O4F7ANDCN2EHIQATI2UJ89IBNMZRJG2T56KNTL0J87BHL8OA5KXCXK9G69JDZVT8GIE2CS4LT352VKMTLKI5BR8X8C33MCHL3' where id=53; -update noar tt set v2='69PMN7LPEUKCD1F98FHR3VNX0TEGV0Q1TNNR16NWKW3ODHO4OSIH7CBWO0N8N45F5SVVC3COIJ43P9W9CO67V9RK2256JGUXMGL4HHLZ9C6QLME8IJYV2OB14RHOUC3773EI87QKVK58JZNAS65GELEWQFU93EP1LCVBPXI7CQL94FCHEKQ060BD0H8CO4BRDWY3KZVIRNAB8Q28KLWDH8R34NSUPN4WCOJ46DWZBXUT93L3A58J79314YWZM9RR9' where id=53; -update noar ti set v2='69PMN7LPEUKCD1F98FHR3VNX0TEGV0Q1TNNR16NWKW3ODHO4OSIH7CBWO0N8N45F5SVVC3COIJ43P9W9CO67V9RK2256JGUXMGL4HHLZ9C6QLME8IJYV2OB14RHOUC3773EI87QKVK58JZNAS65GELEWQFU93EP1LCVBPXI7CQL94FCHEKQ060BD0H8CO4BRDWY3KZVIRNAB8Q28KLWDH8R34NSUPN4WCOJ46DWZBXUT93L3A58J79314YWZM9RR9' where id=53; -update noar tt set v3='WQXSFYOTDQVPELU3QL0ROQ6Z0ES0DL34NV77V594W4MQJYUR1HWC102D4A3UZW6HFY6JFY2TU9KZ3PUHPVO2QHM50OD4OVRHSGF323TMPPBDHQMSIFHPULH6LW99FDD7V1XEHSRKUL7YNGEH6RUPE97P3L9883Y6Z98APJ6KJPVQNLESADXC79LT5W82M3ALIMMIF3ELDIE8UNMJA6GWLXH17FIH8R26N842SD2W6CLN2LIG550Y5PMO2JFC0DF3B' where id=53; -update noar ti set v3='WQXSFYOTDQVPELU3QL0ROQ6Z0ES0DL34NV77V594W4MQJYUR1HWC102D4A3UZW6HFY6JFY2TU9KZ3PUHPVO2QHM50OD4OVRHSGF323TMPPBDHQMSIFHPULH6LW99FDD7V1XEHSRKUL7YNGEH6RUPE97P3L9883Y6Z98APJ6KJPVQNLESADXC79LT5W82M3ALIMMIF3ELDIE8UNMJA6GWLXH17FIH8R26N842SD2W6CLN2LIG550Y5PMO2JFC0DF3B' where id=53; -update noar tt set v0='K451G7CBWQ1GDYNQ2IJVP4WCF11S8GN9SWKENYCC1D7693YTX6GUAZC47G4AGAT6BFOKT478NF86E5O4O68XEB11Y43CDZPK8AKQJKDUO7CW81D3CHBI7KFLVUY3PU3RLGXUR3HIM1SEVZQEWQI2I4RNGV3CCFYSR0NT2I2WPE5Z4EHT756BNSOI1ZCHGE92XX7MURLZURPF3OAKHDVKGZTBBN0BEKHIGPATVYBX2L7DR5Z6YYOTP1640E8BWT7CK' where id=54; -update noar ti set v0='K451G7CBWQ1GDYNQ2IJVP4WCF11S8GN9SWKENYCC1D7693YTX6GUAZC47G4AGAT6BFOKT478NF86E5O4O68XEB11Y43CDZPK8AKQJKDUO7CW81D3CHBI7KFLVUY3PU3RLGXUR3HIM1SEVZQEWQI2I4RNGV3CCFYSR0NT2I2WPE5Z4EHT756BNSOI1ZCHGE92XX7MURLZURPF3OAKHDVKGZTBBN0BEKHIGPATVYBX2L7DR5Z6YYOTP1640E8BWT7CK' where id=54; -update noar tt set v1='IMPDJLFC0K0EHX90WZNJMZ1HSANIUK2M2EV1ODSS7CDICR8MXIHIP49A2TCJA95TN7YSKXZZPCS1GCG69QUU80F650W6SZ2T7L4XZ6ZZJE3MZYEENSU6B3APHR44S5XCYRV5GWOEHXH3DOHOETADYNF838LO9OHQTDP32XP3LV99STJ8V3UL3X9RXXNMYK63VKIHQRRLZB6SITJCWP95A1XYUXBQOCI1BO1JHMY38PXZOHXLPPG2CZYIBAV6NQ3ZF' where id=54; -update noar ti set v1='IMPDJLFC0K0EHX90WZNJMZ1HSANIUK2M2EV1ODSS7CDICR8MXIHIP49A2TCJA95TN7YSKXZZPCS1GCG69QUU80F650W6SZ2T7L4XZ6ZZJE3MZYEENSU6B3APHR44S5XCYRV5GWOEHXH3DOHOETADYNF838LO9OHQTDP32XP3LV99STJ8V3UL3X9RXXNMYK63VKIHQRRLZB6SITJCWP95A1XYUXBQOCI1BO1JHMY38PXZOHXLPPG2CZYIBAV6NQ3ZF' where id=54; -update noar tt set v2='70WYQKTFS682JBEWD82T2YY384U1LZIQMJFGRPYL2JEUQR28AWQ19ATEWXONOKGXEON0TMW107Z1ZXZY2OC3O4FMBPUDH3Q6ILCW3VJHEES8KDZCYP8ZJAYB28Q9189FJ6744G8IHMZPTCY9LSJPLGIP38GAHEOETBGTPSETFSMNI2YW17FZQZ299CYHXQHN70RM4A04M6CQG0E7HPU4GRHKKE0Z82PM47DNB8ZY3LUUT6242SUDD4P3FU5HXV3Y1' where id=54; -update noar ti set v2='70WYQKTFS682JBEWD82T2YY384U1LZIQMJFGRPYL2JEUQR28AWQ19ATEWXONOKGXEON0TMW107Z1ZXZY2OC3O4FMBPUDH3Q6ILCW3VJHEES8KDZCYP8ZJAYB28Q9189FJ6744G8IHMZPTCY9LSJPLGIP38GAHEOETBGTPSETFSMNI2YW17FZQZ299CYHXQHN70RM4A04M6CQG0E7HPU4GRHKKE0Z82PM47DNB8ZY3LUUT6242SUDD4P3FU5HXV3Y1' where id=54; -update noar tt set v3='B1QS7BYUJ1G9II6JLAWLFNF3ZDNLLW7Y2VPQI34R83CQZC8L4RFHFQME0VMOO4GC3VG8XBP2FULKWGW9PQOZT7059BO0MCS6M44XEIOQE2JUDG67GLIMSXNWXL7NGN90FUOOSS3T60SM3WPF7JSM2WUMUOI4VY98MLG6J98OD712VGJ1Y65GXZT0PPJQ2WJ8FGGFDDXFQ5PAZ15TPZO5OKUZFXBRU2SXKRX72THILRNIPGETT0EZXEMSGU1Y8DJXJ' where id=54; -update noar ti set v3='B1QS7BYUJ1G9II6JLAWLFNF3ZDNLLW7Y2VPQI34R83CQZC8L4RFHFQME0VMOO4GC3VG8XBP2FULKWGW9PQOZT7059BO0MCS6M44XEIOQE2JUDG67GLIMSXNWXL7NGN90FUOOSS3T60SM3WPF7JSM2WUMUOI4VY98MLG6J98OD712VGJ1Y65GXZT0PPJQ2WJ8FGGFDDXFQ5PAZ15TPZO5OKUZFXBRU2SXKRX72THILRNIPGETT0EZXEMSGU1Y8DJXJ' where id=54; -update noar tt set v0='FT2E93NV3QCL4IENSLMVPXJLRU9UZU8YDHW4VIDTKVE07PD6P7H57NHA6RLP2ZXKDVQKLX2PU79IC5889CP7L5PBKWHE233WKFD0YI5LT3N9IQVA712JAGK7SE72IW2YXON7UELGIC751UTSA7BFLEQ4OXKAWTXOR89HFWI2WPF2TSY13SZA063F9EO2W0714N1TCC23HVLF2FIZFGHI0NUEL127HE7I1YW9A254IEM4T4CEEP8T613FC5WG05CEN' where id=55; -update noar ti set v0='FT2E93NV3QCL4IENSLMVPXJLRU9UZU8YDHW4VIDTKVE07PD6P7H57NHA6RLP2ZXKDVQKLX2PU79IC5889CP7L5PBKWHE233WKFD0YI5LT3N9IQVA712JAGK7SE72IW2YXON7UELGIC751UTSA7BFLEQ4OXKAWTXOR89HFWI2WPF2TSY13SZA063F9EO2W0714N1TCC23HVLF2FIZFGHI0NUEL127HE7I1YW9A254IEM4T4CEEP8T613FC5WG05CEN' where id=55; -update noar tt set v1='UUSG8E3OZ5GU6JFEAZDZTUVPU9D77QDLVFI72LED3KD8M12EEA0MA7PTSZHWQCSFRZR7Y915OWFLXULX76VYURNKPP0CM6RYKF2Y26QBRWT4UF76EOCCYBSJYB2RB0DSRU44C2AOWT9QA29IOUVSYA2TNPVR0ZL6J3NB0I9BY6BD4G3AOYKJ0RRGOUD0Q47A0BS7TSRFCL9O5B82VDZ55AUE1RMCWF2K0X88OIWTZKWG652YYGJRCKUBF5LW5HLVK' where id=55; -update noar ti set v1='UUSG8E3OZ5GU6JFEAZDZTUVPU9D77QDLVFI72LED3KD8M12EEA0MA7PTSZHWQCSFRZR7Y915OWFLXULX76VYURNKPP0CM6RYKF2Y26QBRWT4UF76EOCCYBSJYB2RB0DSRU44C2AOWT9QA29IOUVSYA2TNPVR0ZL6J3NB0I9BY6BD4G3AOYKJ0RRGOUD0Q47A0BS7TSRFCL9O5B82VDZ55AUE1RMCWF2K0X88OIWTZKWG652YYGJRCKUBF5LW5HLVK' where id=55; -update noar tt set v2='8IHXAKH9PJDI4NBT0U1XF6XCEXWYQGM1YQZWTNIBVGLGMZFOMG90W3OP69W83KI4A660G79B19U3LNBX5TL8TN9D6LSDDAOZHD4S9H95BOS0Y46JT4ESTEIXPGZY1847UTEODJ822CO4OG2OOJZWCZR3O16GVWZ7OVDW5K8M3YISQ0WLH0VRY0PBUMK095ZK4YA2XA68NTRFM70M798Q2IM8QJD6SAXCCHNCTWBEAHNPB9AD9AUFADZF4SRA28NTZ' where id=55; -update noar ti set v2='8IHXAKH9PJDI4NBT0U1XF6XCEXWYQGM1YQZWTNIBVGLGMZFOMG90W3OP69W83KI4A660G79B19U3LNBX5TL8TN9D6LSDDAOZHD4S9H95BOS0Y46JT4ESTEIXPGZY1847UTEODJ822CO4OG2OOJZWCZR3O16GVWZ7OVDW5K8M3YISQ0WLH0VRY0PBUMK095ZK4YA2XA68NTRFM70M798Q2IM8QJD6SAXCCHNCTWBEAHNPB9AD9AUFADZF4SRA28NTZ' where id=55; -update noar tt set v3='THPPDHEFNY8IAZKHNH57S5Q5JGI612U28HGOSUYPCO2WHS77MG6Q1EWMX5FE63JQIWIT2OJS3PZYDBOD2KV3MWMYBI36LSW9WLIDFC9PP318YY7N81JEE8KBXG2JWNSXBBBKSEL7ZV7FBU8VAGNPCP8KG1PM5CKDYSVBDIDA7T2C8XH3VT30PH1BHIBS7F884Q0X22531UDULHUNV50L4CKIDJYR6QDYJOWRFW1ONDMPLKYNR1O7R3EUF3PNSEB1Z' where id=55; -update noar ti set v3='THPPDHEFNY8IAZKHNH57S5Q5JGI612U28HGOSUYPCO2WHS77MG6Q1EWMX5FE63JQIWIT2OJS3PZYDBOD2KV3MWMYBI36LSW9WLIDFC9PP318YY7N81JEE8KBXG2JWNSXBBBKSEL7ZV7FBU8VAGNPCP8KG1PM5CKDYSVBDIDA7T2C8XH3VT30PH1BHIBS7F884Q0X22531UDULHUNV50L4CKIDJYR6QDYJOWRFW1ONDMPLKYNR1O7R3EUF3PNSEB1Z' where id=55; -update noar tt set v0='DGJZ5OJ8R4AZGL4857EH3S8E0NPHE3SW4XXNWRAD7ITLBIK6YMETRJQI5QFEFA6R471R7G4360YFKJJUKFXTDFXXRTZHJ8721BMSDADG5FJE5MMWO9HCOGJVQGRLENPH3H66OHNMGT5URDWZNSOKFHJT5KE7PLKN6CLWSPL6QZLZH7703V9RPJMW5RRZ3UY9JCSJQW8M79S3KKFHPV39IY2L33XUTGZA9D6T39O35EC50EPK3HIWSTJ2ZMI4OZN7D' where id=56; -update noar ti set v0='DGJZ5OJ8R4AZGL4857EH3S8E0NPHE3SW4XXNWRAD7ITLBIK6YMETRJQI5QFEFA6R471R7G4360YFKJJUKFXTDFXXRTZHJ8721BMSDADG5FJE5MMWO9HCOGJVQGRLENPH3H66OHNMGT5URDWZNSOKFHJT5KE7PLKN6CLWSPL6QZLZH7703V9RPJMW5RRZ3UY9JCSJQW8M79S3KKFHPV39IY2L33XUTGZA9D6T39O35EC50EPK3HIWSTJ2ZMI4OZN7D' where id=56; -update noar tt set v1='YTIQEU3A4OSHIHSIGPYTDDHH92K330QTDKP77E4M7NL4SIU6KTUINUFLDMP060CIG9O7BR8JBT4EK4NZV15J9AYJK4H1WTBH93MSFMWXZ7XZEZCY0PF6TOSOIW3FTA966GCCSO45D0FCXV1S12LSYS50F5QE8QZB2UW9MNBVU567BTFXAPRKXRKN4VNFFRV7BYY2TRTON7GJW6GULABHXCQEZMD6HVD74HP9JXR3QIHHQZ6CT5F8S6A28UXWYNMCW' where id=56; -update noar ti set v1='YTIQEU3A4OSHIHSIGPYTDDHH92K330QTDKP77E4M7NL4SIU6KTUINUFLDMP060CIG9O7BR8JBT4EK4NZV15J9AYJK4H1WTBH93MSFMWXZ7XZEZCY0PF6TOSOIW3FTA966GCCSO45D0FCXV1S12LSYS50F5QE8QZB2UW9MNBVU567BTFXAPRKXRKN4VNFFRV7BYY2TRTON7GJW6GULABHXCQEZMD6HVD74HP9JXR3QIHHQZ6CT5F8S6A28UXWYNMCW' where id=56; -update noar tt set v2='M6BC8QTDAGG5OA7OJ2SYLFRKD21LTTSVT80V7U0ELLZM2K4X3ZE57LRFCQIQXWP5HIN8LYKG2665JWNHRTGLCHPW8ROL3NIR1KGQ0DUZ4EDDHRENJHIOHIS5OKWIZ2WIOAEOOB73EFVCLQBHECG7UYMIAN1MWE25AX5AI05M00YNXI6WW3Z19AO59SVIKJ6SLSARG1OXAP4HKK11JJOBI8WLZSGD9YHQN9L8LVEVI30HV9KHV1HSUUJ8VY49M3LXI' where id=56; -update noar ti set v2='M6BC8QTDAGG5OA7OJ2SYLFRKD21LTTSVT80V7U0ELLZM2K4X3ZE57LRFCQIQXWP5HIN8LYKG2665JWNHRTGLCHPW8ROL3NIR1KGQ0DUZ4EDDHRENJHIOHIS5OKWIZ2WIOAEOOB73EFVCLQBHECG7UYMIAN1MWE25AX5AI05M00YNXI6WW3Z19AO59SVIKJ6SLSARG1OXAP4HKK11JJOBI8WLZSGD9YHQN9L8LVEVI30HV9KHV1HSUUJ8VY49M3LXI' where id=56; -update noar tt set v3='6MD7CL2Y95KE3EWVVTI1LF3VUTYERI7GYMABRNVLRJ5N37SWEVTXPTLQU4A3B7MR7KXC5DRHHO1LAWQYPD7RZA04GCZ7C9YOPODJMQ029IV4QZ31QV90UADVTTNC4OCAHET05IMFZ6TH3RE7C1ZBL2O54EHFAN0LCGUZPMWWGQUU2Z4LG2A0ERHT32OIHPMJ1TR5UNSTSU7QZW9L9MERFPWHH4CHQV8K9XWPGZOH6AZ8E7JL6AVECMHLRBMEJ5LLV' where id=56; -update noar ti set v3='6MD7CL2Y95KE3EWVVTI1LF3VUTYERI7GYMABRNVLRJ5N37SWEVTXPTLQU4A3B7MR7KXC5DRHHO1LAWQYPD7RZA04GCZ7C9YOPODJMQ029IV4QZ31QV90UADVTTNC4OCAHET05IMFZ6TH3RE7C1ZBL2O54EHFAN0LCGUZPMWWGQUU2Z4LG2A0ERHT32OIHPMJ1TR5UNSTSU7QZW9L9MERFPWHH4CHQV8K9XWPGZOH6AZ8E7JL6AVECMHLRBMEJ5LLV' where id=56; -update noar tt set v0='XY71VYW9EMPQ59SQ7MKUIPNBVBKJ6EM6DQF7GRJTM4SNZHUFK6VRXP24JXYZZ9FP6PCQIAQBHYN6YGD4LQ2OLYN23BJVK8LL8FBS64S6G3YPAZYBNJ7SL495FMZMPO2YNPLY5CXT8P4ZYT9TORHU8N0UWL2LAOW938C81JQLDSZR3FC5NBIOZ5T6AYJHQU1ZEIGYNW7NB1SF245QRL5PR2F9QB9B1YR47LATACOK41JZ2YEJAYJRO3HUN0G3X6VO8' where id=57; -update noar ti set v0='XY71VYW9EMPQ59SQ7MKUIPNBVBKJ6EM6DQF7GRJTM4SNZHUFK6VRXP24JXYZZ9FP6PCQIAQBHYN6YGD4LQ2OLYN23BJVK8LL8FBS64S6G3YPAZYBNJ7SL495FMZMPO2YNPLY5CXT8P4ZYT9TORHU8N0UWL2LAOW938C81JQLDSZR3FC5NBIOZ5T6AYJHQU1ZEIGYNW7NB1SF245QRL5PR2F9QB9B1YR47LATACOK41JZ2YEJAYJRO3HUN0G3X6VO8' where id=57; -update noar tt set v1='8N0TLAXW3AMYN44ZNRZCK9RFWSBQ4BHA2KFJ9AFUCPGRVUYQ79CGJRUIFS6E94EFXN0WABPM7OUI3D2033SM299S6XTMREPQF92XYTL7THW3IT735Z52PQRT5U0MTPITBY4Q1YZM0GWRUIODEFCTKSDNA554FZJZSKY37MSGJ9AOM0YZEY5N5BYFMS2TG7XJSJZ01E5Q46BTVQSPRJRCD9FUCNXK8GRY12H98ZTSP3EZ3R8ADLL2MS7ZHTSCS99YH' where id=57; -update noar ti set v1='8N0TLAXW3AMYN44ZNRZCK9RFWSBQ4BHA2KFJ9AFUCPGRVUYQ79CGJRUIFS6E94EFXN0WABPM7OUI3D2033SM299S6XTMREPQF92XYTL7THW3IT735Z52PQRT5U0MTPITBY4Q1YZM0GWRUIODEFCTKSDNA554FZJZSKY37MSGJ9AOM0YZEY5N5BYFMS2TG7XJSJZ01E5Q46BTVQSPRJRCD9FUCNXK8GRY12H98ZTSP3EZ3R8ADLL2MS7ZHTSCS99YH' where id=57; -update noar tt set v2='181IME83VOFM1CJ5NU5YRDV993DOHGVCBFDSW9JCQ7G7ORXW58239A10UYZV2S4VUKYNFSX159SXDOYX20HRL8CYEFC0M6V0OI07S1P3HIZ6OWDI3TFL5BXGPVBWKWAQQPZRPNKNHLMKEPFEYTP9NOP0KBGT3C5R0Y8YT6JH909BSFAM5HTR0PL7XZV5WLD0O58HELPH3Q1C95ILUGXYN3C4L8GJCP74U7EAPC99K6R7GPI4B6JW5RDI1WWUUF2J2' where id=57; -update noar ti set v2='181IME83VOFM1CJ5NU5YRDV993DOHGVCBFDSW9JCQ7G7ORXW58239A10UYZV2S4VUKYNFSX159SXDOYX20HRL8CYEFC0M6V0OI07S1P3HIZ6OWDI3TFL5BXGPVBWKWAQQPZRPNKNHLMKEPFEYTP9NOP0KBGT3C5R0Y8YT6JH909BSFAM5HTR0PL7XZV5WLD0O58HELPH3Q1C95ILUGXYN3C4L8GJCP74U7EAPC99K6R7GPI4B6JW5RDI1WWUUF2J2' where id=57; -update noar tt set v3='MAKEOJBJQT3M3QEOZFP2DHZMLBCOELYQCHWNV2TIRRBXWV7JNFMXG1D18OMJVLLNVD72YWNX20OOKWO7MDR1V5ZBW94IMUHZAQCJGY1YX4J8STOMZBBNCKGHA8DBEIGEH9OLGD5QNYRGVLEKTRZEML3P2Q99OT7BURN4G8EIRH68X1WW242ETZDDDU8XDMXQU87Z1AVKZSMF97FLDGLNY8HGCHT1X8PZ1L7UUK3OJG1NH6EWCG50SILBQA3775NUK' where id=57; -update noar ti set v3='MAKEOJBJQT3M3QEOZFP2DHZMLBCOELYQCHWNV2TIRRBXWV7JNFMXG1D18OMJVLLNVD72YWNX20OOKWO7MDR1V5ZBW94IMUHZAQCJGY1YX4J8STOMZBBNCKGHA8DBEIGEH9OLGD5QNYRGVLEKTRZEML3P2Q99OT7BURN4G8EIRH68X1WW242ETZDDDU8XDMXQU87Z1AVKZSMF97FLDGLNY8HGCHT1X8PZ1L7UUK3OJG1NH6EWCG50SILBQA3775NUK' where id=57; -update noar tt set v0='XNTCK6K8AXJTL5EURR61UE5KL4QI59LWZWL8W0XHOMUS7WY9D712T5QVUN24U5YG4XSSP1M1EPD9T36SGVOJDXE2XE8AKDZE2OM8DEGVT322JE6TBXA3CXAEGTBKI8WH2T29F08IOIW9U0JXKMOZOJD4LQH2R1RBHI9GYU2D2O5JZYETRJSFZILCXY2GSOO87LSGMO4COJJDJ3IMO5HPUC4TY4DPLFU6JNI2JDL7ZMKE78U1ZRFHGZP8C05X825HG' where id=58; -update noar ti set v0='XNTCK6K8AXJTL5EURR61UE5KL4QI59LWZWL8W0XHOMUS7WY9D712T5QVUN24U5YG4XSSP1M1EPD9T36SGVOJDXE2XE8AKDZE2OM8DEGVT322JE6TBXA3CXAEGTBKI8WH2T29F08IOIW9U0JXKMOZOJD4LQH2R1RBHI9GYU2D2O5JZYETRJSFZILCXY2GSOO87LSGMO4COJJDJ3IMO5HPUC4TY4DPLFU6JNI2JDL7ZMKE78U1ZRFHGZP8C05X825HG' where id=58; -update noar tt set v1='NITS3G6YX1LZILX51R77TPV16QLNHE0JE25FU308BD37CZ1R0UAVX8JVHH2IJA60HOEI2IUE7SCDEXHRXGYWD524FAHFTT7MEESDC35AKU47Z0JP804UFHR0V36WC23TT4NAI0S66ZOT1C5JCYMEF8CV8FSFWYPFJORAHMVA9BDIQT5S5P2MHURY44OHPQTTCCPGJ0YF5V2THSMP7ULLP2LXM3HC8S26ZKHOVFYJ3I9DUPIX7NTG4Q956GL7X7JSU' where id=58; -update noar ti set v1='NITS3G6YX1LZILX51R77TPV16QLNHE0JE25FU308BD37CZ1R0UAVX8JVHH2IJA60HOEI2IUE7SCDEXHRXGYWD524FAHFTT7MEESDC35AKU47Z0JP804UFHR0V36WC23TT4NAI0S66ZOT1C5JCYMEF8CV8FSFWYPFJORAHMVA9BDIQT5S5P2MHURY44OHPQTTCCPGJ0YF5V2THSMP7ULLP2LXM3HC8S26ZKHOVFYJ3I9DUPIX7NTG4Q956GL7X7JSU' where id=58; -update noar tt set v2='S0H4JFN1MX70SMLWUO4L939QUPPY9RV1GP0A446JOFH838XGFLOXU8T5EVXZQNS6ANFGKYOAM0TWK224MIJC0IHEKMSA4JE202TJ3Q76VG9E3UPRP7ZIO2FXXH5XBUAXYOJ82Y013CBX2K7S9FEV72ZHL1TZTM55O4ZCJU6P1ZR8E1WH59ATFPWAX7TT4NNSZ5F2BDFJH8Z1R7EUBPDO1DBYBOTWE8ZXTKAXUOHPRX8U7P598JXY5A2L86AHJG24S' where id=58; -update noar ti set v2='S0H4JFN1MX70SMLWUO4L939QUPPY9RV1GP0A446JOFH838XGFLOXU8T5EVXZQNS6ANFGKYOAM0TWK224MIJC0IHEKMSA4JE202TJ3Q76VG9E3UPRP7ZIO2FXXH5XBUAXYOJ82Y013CBX2K7S9FEV72ZHL1TZTM55O4ZCJU6P1ZR8E1WH59ATFPWAX7TT4NNSZ5F2BDFJH8Z1R7EUBPDO1DBYBOTWE8ZXTKAXUOHPRX8U7P598JXY5A2L86AHJG24S' where id=58; -update noar tt set v3='8WV6OJQZC90L4VLFY10MKFJ0JLW94M2U6FB2X95XNEKDFEDOWOR3WIXJ91PBY3JMAG84X3EDN9LEGK8G3TPOO5UTWRFJFXDN84804OMBSI36OKFEXAK5TCA8IVUNAEMNGOJM84XRU6AU88VMYVLXKC91P5N4L900PX9D6BCYZ4HIJS2GSTYFQN8F9ECT1JXYTE7FDPV2Y3D876ALNON62ZI3BB0P7I4QXIYM2PV8AUVWPG558AQRN3BEW7KDGY4KA' where id=58; -update noar ti set v3='8WV6OJQZC90L4VLFY10MKFJ0JLW94M2U6FB2X95XNEKDFEDOWOR3WIXJ91PBY3JMAG84X3EDN9LEGK8G3TPOO5UTWRFJFXDN84804OMBSI36OKFEXAK5TCA8IVUNAEMNGOJM84XRU6AU88VMYVLXKC91P5N4L900PX9D6BCYZ4HIJS2GSTYFQN8F9ECT1JXYTE7FDPV2Y3D876ALNON62ZI3BB0P7I4QXIYM2PV8AUVWPG558AQRN3BEW7KDGY4KA' where id=58; -update noar tt set v0='9G6I943PKYH7YHR8TW4RND8B97HJ856LCO5NU7KNH7Z2U6U7BTHO5DPFVNXNT9YB4DJQ2T5MOEBM7KUH039MNCN9IV8KDJ8VEJGK6LGN7VPZSB8YQFM5DHD6KGH48URDT7QDRQD3UBJ5ANNBN39NWT99OO0GDMB4PRA1KA4BYIPGHLZK27OCWFSIML3E0ZAE7NV0TID45GZYFZ6X4MFAVTB8TZ9720K9FD0IFD1FTM4L98N8154LTKW9OBHFZZ9DE' where id=59; -update noar ti set v0='9G6I943PKYH7YHR8TW4RND8B97HJ856LCO5NU7KNH7Z2U6U7BTHO5DPFVNXNT9YB4DJQ2T5MOEBM7KUH039MNCN9IV8KDJ8VEJGK6LGN7VPZSB8YQFM5DHD6KGH48URDT7QDRQD3UBJ5ANNBN39NWT99OO0GDMB4PRA1KA4BYIPGHLZK27OCWFSIML3E0ZAE7NV0TID45GZYFZ6X4MFAVTB8TZ9720K9FD0IFD1FTM4L98N8154LTKW9OBHFZZ9DE' where id=59; -update noar tt set v1='JFB48J7JXQWZHD2Q6X72OUDC83KI1OT0JUKOF3S0MMZIOV8BU9YMIA22R8WVD69ENZWOB562I69B9LN23EC9RAVBU8ITOMK82XFTX29NACAIXEIH7ANJQX9169M63N6Z5LDBCSQL5Y0W70D2HFALBKGI5XGW9X67YDK5COC0SMK3CJY8YCMP45PDF0GBDV1UR05QSG10DTNTQKLWWPD60SOIUFKAC1VKEBS0ZTFJ7FUPD6Z3COZWENX7ETPYP7P2Z' where id=59; -update noar ti set v1='JFB48J7JXQWZHD2Q6X72OUDC83KI1OT0JUKOF3S0MMZIOV8BU9YMIA22R8WVD69ENZWOB562I69B9LN23EC9RAVBU8ITOMK82XFTX29NACAIXEIH7ANJQX9169M63N6Z5LDBCSQL5Y0W70D2HFALBKGI5XGW9X67YDK5COC0SMK3CJY8YCMP45PDF0GBDV1UR05QSG10DTNTQKLWWPD60SOIUFKAC1VKEBS0ZTFJ7FUPD6Z3COZWENX7ETPYP7P2Z' where id=59; -update noar tt set v2='6C6KGZNIFUVCEFDBPIPJN6RYHIOYZF79HOT2UBVP65BIQVZFDNPZTI8D8YW5BFJAWTPNFGWUY7LK7EPQHRBVGJBLWJXRK85333TDB3NT1X32IQHBIORHU3SCHXRNUKZ6Y474F7ZKD2YTJR5ZTUR5AHJ82LYEXKGV0B6P5QFD7SBNJVQFNZGL48F7UHLSY4HVQ0NTSQJDGW588624MIIDXKO485ID9ZM0JJCMPB1UZVIS2LLHZC06RHQ9ZKXEFACHZ' where id=59; -update noar ti set v2='6C6KGZNIFUVCEFDBPIPJN6RYHIOYZF79HOT2UBVP65BIQVZFDNPZTI8D8YW5BFJAWTPNFGWUY7LK7EPQHRBVGJBLWJXRK85333TDB3NT1X32IQHBIORHU3SCHXRNUKZ6Y474F7ZKD2YTJR5ZTUR5AHJ82LYEXKGV0B6P5QFD7SBNJVQFNZGL48F7UHLSY4HVQ0NTSQJDGW588624MIIDXKO485ID9ZM0JJCMPB1UZVIS2LLHZC06RHQ9ZKXEFACHZ' where id=59; -update noar tt set v3='58W1GV25XYESW7KJ89OO4NEWR5L7ZFVKR8D4GTDW3M07UOA1FO9ZQBD6EN0WBO96KR1745XDYI4YP73DOMCA00QVV085QLBAYM08XBAULF0FJRX65ZTH5VQ7USAFX28WGDSL71W57LQGFFIFSQPZ4CS4JM1A64Z87IRYCRABUKSVRE42J98EDN8QADYINB2H2ZFZ1TVPMA5716GFT4HRQMUME5YSZPDX7CU80D1ZDAWI0WHBJMCPMMJ2SR52TP9SG' where id=59; -update noar ti set v3='58W1GV25XYESW7KJ89OO4NEWR5L7ZFVKR8D4GTDW3M07UOA1FO9ZQBD6EN0WBO96KR1745XDYI4YP73DOMCA00QVV085QLBAYM08XBAULF0FJRX65ZTH5VQ7USAFX28WGDSL71W57LQGFFIFSQPZ4CS4JM1A64Z87IRYCRABUKSVRE42J98EDN8QADYINB2H2ZFZ1TVPMA5716GFT4HRQMUME5YSZPDX7CU80D1ZDAWI0WHBJMCPMMJ2SR52TP9SG' where id=59; -update noar tt set v0='I73EEGL2XCVDFM7A1MMQA51II6O4Z5CURTJLOQUT8WU5MUQIHB9S3XBE2KYV6FIZSJBAWKORN9R8C18FJNGKRUEOZP2CAK5Z7ARBHDZP32OQ1QXKO3I4CVKY0P7L806TSOAO5K8J5TKQUKXKTGXA1SXEVVKD3RIX27U5BGXKD3G8OAXIJP0MYPLZODODEZA0S9P135GCMXK1OXIEAVQY89SKZJRP7497GNUMYBLA822NZV866G5RKQ2TW22RG8B9E' where id=60; -update noar ti set v0='I73EEGL2XCVDFM7A1MMQA51II6O4Z5CURTJLOQUT8WU5MUQIHB9S3XBE2KYV6FIZSJBAWKORN9R8C18FJNGKRUEOZP2CAK5Z7ARBHDZP32OQ1QXKO3I4CVKY0P7L806TSOAO5K8J5TKQUKXKTGXA1SXEVVKD3RIX27U5BGXKD3G8OAXIJP0MYPLZODODEZA0S9P135GCMXK1OXIEAVQY89SKZJRP7497GNUMYBLA822NZV866G5RKQ2TW22RG8B9E' where id=60; -update noar tt set v1='H7DSCRP710JNTL15CAT1LXSWBOP9D09FMYNBZXIO50DPXHVO8BY7AOZV0GYLM4Y4YI0BGL2NZ9NWRIXR23PSZJ2RXTLN51F8VN26CTSVN80Y2955254SZB85WZWHFYL8AAG6OSH45J4LQZL85GX026L44EYPFCK1RM2MI3PR7BTAJHUQRRFT4CR7YVAQDZTUV6RDSN45PVK4CTHCF6EJYFTQPZ4VEOXM1ORU0LYWEUTL9N2K9EAXO6AJG81DVVYQA' where id=60; -update noar ti set v1='H7DSCRP710JNTL15CAT1LXSWBOP9D09FMYNBZXIO50DPXHVO8BY7AOZV0GYLM4Y4YI0BGL2NZ9NWRIXR23PSZJ2RXTLN51F8VN26CTSVN80Y2955254SZB85WZWHFYL8AAG6OSH45J4LQZL85GX026L44EYPFCK1RM2MI3PR7BTAJHUQRRFT4CR7YVAQDZTUV6RDSN45PVK4CTHCF6EJYFTQPZ4VEOXM1ORU0LYWEUTL9N2K9EAXO6AJG81DVVYQA' where id=60; -update noar tt set v2='N3HL95RWNSMG5ULYW73MZAM9IJWAZTBW9V2Q77KUR45USYWZCFC135QQ808B9LH4RS7CN7JTPAE7997W8B5MFLGGZA94SOOE5STFWB423VIQU2JPCGKANAY9548RLVXFK614WN1U00TQMMOO3HJWDDPU6MQZ6YF9QHSPYR1KFM6E67DY39E3FF6D4Z4J3NXTZD7P3M4YRHYVW51UXZJJ0NXKK49L7AEK8SE3R0W6KH3IHNCLRU410JFRI6Z514U56' where id=60; -update noar ti set v2='N3HL95RWNSMG5ULYW73MZAM9IJWAZTBW9V2Q77KUR45USYWZCFC135QQ808B9LH4RS7CN7JTPAE7997W8B5MFLGGZA94SOOE5STFWB423VIQU2JPCGKANAY9548RLVXFK614WN1U00TQMMOO3HJWDDPU6MQZ6YF9QHSPYR1KFM6E67DY39E3FF6D4Z4J3NXTZD7P3M4YRHYVW51UXZJJ0NXKK49L7AEK8SE3R0W6KH3IHNCLRU410JFRI6Z514U56' where id=60; -update noar tt set v3='E5K3CYRB81ZAUEHY3IKPV60QVDE8H66DXJ6X2CCFQLJWDIYJ88W3IHJ0N59OYZNLCGZBDWXWVINI5P3GNZWV9TDCRA5H6SNTNNO1FSST8XB1C3FTOXJ8DNUS8VGWZ6VIV3XG48LWP7TAFE0WNRG6GBV8Z5UNGSA0RUVG4W1YV79AT1J6SZB0UFFRECY88HJD8Z0P68GSA82BBTKXFQMFKV095A42KKBE3BTUGQBFU654Z8H4X1W328JIHYKSNJ5Z7' where id=60; -update noar ti set v3='E5K3CYRB81ZAUEHY3IKPV60QVDE8H66DXJ6X2CCFQLJWDIYJ88W3IHJ0N59OYZNLCGZBDWXWVINI5P3GNZWV9TDCRA5H6SNTNNO1FSST8XB1C3FTOXJ8DNUS8VGWZ6VIV3XG48LWP7TAFE0WNRG6GBV8Z5UNGSA0RUVG4W1YV79AT1J6SZB0UFFRECY88HJD8Z0P68GSA82BBTKXFQMFKV095A42KKBE3BTUGQBFU654Z8H4X1W328JIHYKSNJ5Z7' where id=60; -update noar tt set v0='BC23ZSPXJFKOKVCR20RS9DYV100NC2SQ5PWICSU1N9CLH1X8FGLI43SP74I97O1I7P6D8Y09PWU3FFAJ6WAWKV9DDDSIT6JUL85R7JAX44WF307AMNP0WAKCRKE5Z8XTMNFJ5PQW2OR9CWMOYLS2ZYLSO7CLMI5XZC9KCAB21PHHY2IF3QJDGDFWYXV9MHYHHIP5QJOP41AZT4L1L3JIKBOTBSPGCIWBP8651VXJPSZOJNAT1PIM8EPRXWGE6LD3Z' where id=61; -update noar ti set v0='BC23ZSPXJFKOKVCR20RS9DYV100NC2SQ5PWICSU1N9CLH1X8FGLI43SP74I97O1I7P6D8Y09PWU3FFAJ6WAWKV9DDDSIT6JUL85R7JAX44WF307AMNP0WAKCRKE5Z8XTMNFJ5PQW2OR9CWMOYLS2ZYLSO7CLMI5XZC9KCAB21PHHY2IF3QJDGDFWYXV9MHYHHIP5QJOP41AZT4L1L3JIKBOTBSPGCIWBP8651VXJPSZOJNAT1PIM8EPRXWGE6LD3Z' where id=61; -update noar tt set v1='70K25FRSSEQYO12G0KVXDEK7D1JYFVO6C4STN7GGMZTTQD1P067ZYLYZHZEZ8JTJQE2AUNIN27OVAX1S4BU7USZ21FXN2YJAQO8AL417DELPSJF48JS6MIH4WO936IWBF5AJDATB25GO7LWCMRO26TTV1VRRY5LVBVL0JUE8H07GV9KRLDZWGC1ZNJH7C65A262WZPUV6JZVEQH1G1U9W0Y164DCX9WD4UGB7DSQWARN8EBJCKMMCF7A0G1QV8ITL' where id=61; -update noar ti set v1='70K25FRSSEQYO12G0KVXDEK7D1JYFVO6C4STN7GGMZTTQD1P067ZYLYZHZEZ8JTJQE2AUNIN27OVAX1S4BU7USZ21FXN2YJAQO8AL417DELPSJF48JS6MIH4WO936IWBF5AJDATB25GO7LWCMRO26TTV1VRRY5LVBVL0JUE8H07GV9KRLDZWGC1ZNJH7C65A262WZPUV6JZVEQH1G1U9W0Y164DCX9WD4UGB7DSQWARN8EBJCKMMCF7A0G1QV8ITL' where id=61; -update noar tt set v2='7NF99XEP5HPBEHHYT23I5WZ6U3K87JOY7JNK3K5RE2J1N4RJ52WGPHELFTZ5333SY6BBODGVFH8K66CUDDJHQX25H2ZW36BUE9IF1ALPS5UY762D3KMEZVFHHG720IUOLSDT92UYXE7LUOC054GGFZ2Y7Q320DFM98WGIO162M0O1M7Y998ERE4BZ3S0IOPOG5ZKV1OCFJ3V2TJX3JNSWT54CQBKVQ3XN0OUYXU2V34OXBV2RKVYIVI3D59AR3MX2' where id=61; -update noar ti set v2='7NF99XEP5HPBEHHYT23I5WZ6U3K87JOY7JNK3K5RE2J1N4RJ52WGPHELFTZ5333SY6BBODGVFH8K66CUDDJHQX25H2ZW36BUE9IF1ALPS5UY762D3KMEZVFHHG720IUOLSDT92UYXE7LUOC054GGFZ2Y7Q320DFM98WGIO162M0O1M7Y998ERE4BZ3S0IOPOG5ZKV1OCFJ3V2TJX3JNSWT54CQBKVQ3XN0OUYXU2V34OXBV2RKVYIVI3D59AR3MX2' where id=61; -update noar tt set v3='A7T0NQ8ASJMHXYNYEY42ICFARK4Q410H42IKEI4DYXW0OQHL6BDAZM03HBYDZI40TE350CENWYK1L61OAOE9FE9IZYLB7MB5TFXODXN67HXUGJ941G4PE2J7MAL3UNGG1DSBF5UAX5WZIBIHXP7JP710PGG2VBVMVRHY28N10SKQOSUDGL9MXX5G7BNOHXJXAA4L106CRENDM3U4V97UBVBJMK3VCXG02OTA9MJ51KKB2N5RZWYO3IPBMN4MIDVF5' where id=61; -update noar ti set v3='A7T0NQ8ASJMHXYNYEY42ICFARK4Q410H42IKEI4DYXW0OQHL6BDAZM03HBYDZI40TE350CENWYK1L61OAOE9FE9IZYLB7MB5TFXODXN67HXUGJ941G4PE2J7MAL3UNGG1DSBF5UAX5WZIBIHXP7JP710PGG2VBVMVRHY28N10SKQOSUDGL9MXX5G7BNOHXJXAA4L106CRENDM3U4V97UBVBJMK3VCXG02OTA9MJ51KKB2N5RZWYO3IPBMN4MIDVF5' where id=61; -update noar tt set v0='5E4N4TIDSTDNDHHKRACEGMD6B7F64VPYY6J0Y4SJSF4BX26CWN4BLA4QAJH0ED2MMAXWOXX74E5TY7D3STMQ0A7SWZEUMPLGNTE92CZWORV3HSNYBFNBMX5B4AQMJZWAYNN4Z2X0YX36ZN1Q3S8PMMX4I63MXQNW7OQ5NVR7KKO0XIZI5N4KOATMWN8ZZFQ1XEQULEFWVP0IGROQ1UTN1PB6A2QDD3J8F3FK4NS7AP061XFSOOPH6Q69BYH28NR1C' where id=62; -update noar ti set v0='5E4N4TIDSTDNDHHKRACEGMD6B7F64VPYY6J0Y4SJSF4BX26CWN4BLA4QAJH0ED2MMAXWOXX74E5TY7D3STMQ0A7SWZEUMPLGNTE92CZWORV3HSNYBFNBMX5B4AQMJZWAYNN4Z2X0YX36ZN1Q3S8PMMX4I63MXQNW7OQ5NVR7KKO0XIZI5N4KOATMWN8ZZFQ1XEQULEFWVP0IGROQ1UTN1PB6A2QDD3J8F3FK4NS7AP061XFSOOPH6Q69BYH28NR1C' where id=62; -update noar tt set v1='LLCAJ6M5UL1JWPB3Z8QN63YSPHN25ZLAEHB7UT6V9Y49O6439JCOFK38IR99104NH4MVL3L16U7PE5X0NNRJQE334PKHCG6FC8YI29HRFCAX04YBJJPCMNKHGZJ00G4LJ6I1MRNXM2FK561GH31RKFYL88XJ3133ET839CTKPCHW5OSLZA50MZBWI8GN70F5NH27XN2Q2BU7GC05ZRZ1LSQ60OT1GTZNAJE48WP61ZBMFY1YJC5D5YGI3RE66K54F' where id=62; -update noar ti set v1='LLCAJ6M5UL1JWPB3Z8QN63YSPHN25ZLAEHB7UT6V9Y49O6439JCOFK38IR99104NH4MVL3L16U7PE5X0NNRJQE334PKHCG6FC8YI29HRFCAX04YBJJPCMNKHGZJ00G4LJ6I1MRNXM2FK561GH31RKFYL88XJ3133ET839CTKPCHW5OSLZA50MZBWI8GN70F5NH27XN2Q2BU7GC05ZRZ1LSQ60OT1GTZNAJE48WP61ZBMFY1YJC5D5YGI3RE66K54F' where id=62; -update noar tt set v2='DXZ8JCRWV7Q0DSTX0TLW5XX0CZSZN5FFY6IWU7FCDADX86Q9JFVG4LNV0FUQQ6NFJJ4WI0TT1QK3VMA5O1VMX4Y3AWK6DJJTMU841BEP79RSHJIXR3A40KO7B45OX9Z1EHD75DWB7MYTI8QYRUJWATPBVD5D37KABKFFOIZ4AA7FP7CRM4FEWVIIQOM5KFZIQ4IYMLCZ41KASQVM2N0D51AQVJC2QKHRJ1462B2WYO7X4MPIBTKMNL5E2QJ6TEXRY' where id=62; -update noar ti set v2='DXZ8JCRWV7Q0DSTX0TLW5XX0CZSZN5FFY6IWU7FCDADX86Q9JFVG4LNV0FUQQ6NFJJ4WI0TT1QK3VMA5O1VMX4Y3AWK6DJJTMU841BEP79RSHJIXR3A40KO7B45OX9Z1EHD75DWB7MYTI8QYRUJWATPBVD5D37KABKFFOIZ4AA7FP7CRM4FEWVIIQOM5KFZIQ4IYMLCZ41KASQVM2N0D51AQVJC2QKHRJ1462B2WYO7X4MPIBTKMNL5E2QJ6TEXRY' where id=62; -update noar tt set v3='EUCJBIRS74PFT45AO86R084LRGIZ89P5S8TGU79I5A2X05QP83SGBNECXOQR22UEJ0BDJ9OSO5GICJDX9GSE8C1F2AGV0J13NIPQE8R5X3BF241W1GB7YHXFADQ3F1OLOOYPHZ16BMQKRVM94YOXS4127AWB2OZKOS8V8KU40PO8VUOMJVN0KG5ITQPP7W39HE80AWW8FE8LJTCNYBEL9OW6RFL8D8XGUVMN8GS6YQPDUWWQPCOY0DH9DZZX1QALS' where id=62; -update noar ti set v3='EUCJBIRS74PFT45AO86R084LRGIZ89P5S8TGU79I5A2X05QP83SGBNECXOQR22UEJ0BDJ9OSO5GICJDX9GSE8C1F2AGV0J13NIPQE8R5X3BF241W1GB7YHXFADQ3F1OLOOYPHZ16BMQKRVM94YOXS4127AWB2OZKOS8V8KU40PO8VUOMJVN0KG5ITQPP7W39HE80AWW8FE8LJTCNYBEL9OW6RFL8D8XGUVMN8GS6YQPDUWWQPCOY0DH9DZZX1QALS' where id=62; -update noar tt set v0='39CFH1HQ8UOXCI9E2R28NE4YAHBBVFY9E36BP0LS587UL44S2XTUFIVBWFPODZ5A6PO5LWXVFF1MSPK1U5XT813NZUAZJMJLK7ZD2YL39NTPG2NXZB134HGFCMTO50BCUQXWCZK5WXH03U7SO5T9Q8O2CV5H6EK7FVNBGIKTGUOWXM0TP3F566THK22OA7IQJUD19TV5OKLVY8XUONQGAE10YIDQCNTD5GOZ9IRZ3HING2MQMYPN5R8UB1GPTA6JA' where id=63; -update noar ti set v0='39CFH1HQ8UOXCI9E2R28NE4YAHBBVFY9E36BP0LS587UL44S2XTUFIVBWFPODZ5A6PO5LWXVFF1MSPK1U5XT813NZUAZJMJLK7ZD2YL39NTPG2NXZB134HGFCMTO50BCUQXWCZK5WXH03U7SO5T9Q8O2CV5H6EK7FVNBGIKTGUOWXM0TP3F566THK22OA7IQJUD19TV5OKLVY8XUONQGAE10YIDQCNTD5GOZ9IRZ3HING2MQMYPN5R8UB1GPTA6JA' where id=63; -update noar tt set v1='RS03SWW2C7K6A80ZS1JNZKYAXCQ6IG6NDR4VX30KJ16P9COD63BHO02C4A7LONEKR7SPJRWQY8BZD4IOUBNDG8UFUI4K5B0P4OOZTO4O6U6ETGCKMZME6P1ILTQKL4LCHWJ4B8FLMIOZR42DXPST9IZKM6CI1WAWK6VW7XYVNDC61Q42YS1A5KX9K7JDEP6GADCOU8ET65KXWZI5GMX7POYJU2YG6VN8LYIMUPNH5N5LN60KO38X14RLKA8YJW5OI' where id=63; -update noar ti set v1='RS03SWW2C7K6A80ZS1JNZKYAXCQ6IG6NDR4VX30KJ16P9COD63BHO02C4A7LONEKR7SPJRWQY8BZD4IOUBNDG8UFUI4K5B0P4OOZTO4O6U6ETGCKMZME6P1ILTQKL4LCHWJ4B8FLMIOZR42DXPST9IZKM6CI1WAWK6VW7XYVNDC61Q42YS1A5KX9K7JDEP6GADCOU8ET65KXWZI5GMX7POYJU2YG6VN8LYIMUPNH5N5LN60KO38X14RLKA8YJW5OI' where id=63; -update noar tt set v2='H5RAPPDQU8A0YUH4TRLD3DUAP3N4IGFFROZAO1G9V16KWA40SO3NMMAGCQHQ75XADXZPHNJA4X80AW1KR3PD479VLNIIQ0LME3VZJXBF6835AX8TIGVMCL56UGIAKQBSQ0BIRX0NY3LMCW8S4YOIX16LBLC7G4KFPZB5XJFW4KXFT5GEPEDW5ITFRX5XIGBOW43AFKPSXABQA04ZCY8IGV3UBI268YC9O73KE932AQ7LGW9OWI1PY8P9Q6ILIDJXV' where id=63; -update noar ti set v2='H5RAPPDQU8A0YUH4TRLD3DUAP3N4IGFFROZAO1G9V16KWA40SO3NMMAGCQHQ75XADXZPHNJA4X80AW1KR3PD479VLNIIQ0LME3VZJXBF6835AX8TIGVMCL56UGIAKQBSQ0BIRX0NY3LMCW8S4YOIX16LBLC7G4KFPZB5XJFW4KXFT5GEPEDW5ITFRX5XIGBOW43AFKPSXABQA04ZCY8IGV3UBI268YC9O73KE932AQ7LGW9OWI1PY8P9Q6ILIDJXV' where id=63; -update noar tt set v3='CJH5OL21PLDDG7AISNRCFBESYECZBA533K1MYP7YUMIYVYPXB3C5RFY6WC5MLB8AFTZO1DYVZSKUZOVAULLNWGORAI52OYKGW1K1UMYPDA3245OWWS6VZTX1L90VSWVOGWQQDH0BJ4G2JMTTH646QUMYOXNWMZF3W3QPP6OFZKKHXJQELSQYATQX7M92C6X2YUEM88MMQCZT6XT3215D7ATDS101PLK9DTZ6SK7OVWL4DGD907960Q3NSDL7QB6TF' where id=63; -update noar ti set v3='CJH5OL21PLDDG7AISNRCFBESYECZBA533K1MYP7YUMIYVYPXB3C5RFY6WC5MLB8AFTZO1DYVZSKUZOVAULLNWGORAI52OYKGW1K1UMYPDA3245OWWS6VZTX1L90VSWVOGWQQDH0BJ4G2JMTTH646QUMYOXNWMZF3W3QPP6OFZKKHXJQELSQYATQX7M92C6X2YUEM88MMQCZT6XT3215D7ATDS101PLK9DTZ6SK7OVWL4DGD907960Q3NSDL7QB6TF' where id=63; -update noar tt set v0='PCN8MXZ3YHRECE96RKQVEF393NXHCW7SQU82CPCFBB87Q5G1U71SJEOXCDOSQODQY536LZGFU64G9I2EMEBBNPQL7Z28XPCKK0JMMUD7DOJYKK9HKZNX8GMHVZ9EH39DPJEQ3ORMY7886M6WS1O79K6X2YB8EJEY0DVY2JVGUBY1GQEO19OK16SM1YYF1PWE295KCHVI41FND8DJSNXNTWBIXDRLIOYJ1DUQC626T9PCI31IQJ1JUJG6VSOM27JAZ' where id=64; -update noar ti set v0='PCN8MXZ3YHRECE96RKQVEF393NXHCW7SQU82CPCFBB87Q5G1U71SJEOXCDOSQODQY536LZGFU64G9I2EMEBBNPQL7Z28XPCKK0JMMUD7DOJYKK9HKZNX8GMHVZ9EH39DPJEQ3ORMY7886M6WS1O79K6X2YB8EJEY0DVY2JVGUBY1GQEO19OK16SM1YYF1PWE295KCHVI41FND8DJSNXNTWBIXDRLIOYJ1DUQC626T9PCI31IQJ1JUJG6VSOM27JAZ' where id=64; -update noar tt set v1='YIGIF0ZX8QLO64RFT1JXET0653QPXW7GQ131Z3AU254AJU194UU2TZYU2IIMEWU1IJ7XCG3F0QQ0BALFI5YHY2WNFUOG3RFMR4JTU73N6MX7DTR84VMZ1O6Z0F0N2HCC4AXD5N5PY5VBN3VLO1QEBMG73HFSTBUE5Q9VWPWPT17ZZHM17SR9AQBMR8FS70JYTMD6YVN0HU2O8FHY6EWTKOF1C4YVYOA2VNBFNNBZ1LO3SORHIN04K5FCEO0FSOGT1' where id=64; -update noar ti set v1='YIGIF0ZX8QLO64RFT1JXET0653QPXW7GQ131Z3AU254AJU194UU2TZYU2IIMEWU1IJ7XCG3F0QQ0BALFI5YHY2WNFUOG3RFMR4JTU73N6MX7DTR84VMZ1O6Z0F0N2HCC4AXD5N5PY5VBN3VLO1QEBMG73HFSTBUE5Q9VWPWPT17ZZHM17SR9AQBMR8FS70JYTMD6YVN0HU2O8FHY6EWTKOF1C4YVYOA2VNBFNNBZ1LO3SORHIN04K5FCEO0FSOGT1' where id=64; -update noar tt set v2='C4P5I84A0U101Q924KIC2P6ZAJCXS0D6C51NQ1U4ONHHDNNRC0JU6QMET0009627MF3WRXH2HSXKK0XEQDOPKJAN1AKJ38IW3S9JXVH51SNUE8WOHO25ZRTEU6HCFOVQL630PO8IQDXLBLQOF0NFDPHUHAMTBDLMH366Z3M78EPRAQ09K2X5RKLN16B96VFL8G59ELR9G6E9WV62L7M6EKH32J8ER5BZYW5B0H8QKY4Z1DNZ3GA2FW5D2QQPDKS7M' where id=64; -update noar ti set v2='C4P5I84A0U101Q924KIC2P6ZAJCXS0D6C51NQ1U4ONHHDNNRC0JU6QMET0009627MF3WRXH2HSXKK0XEQDOPKJAN1AKJ38IW3S9JXVH51SNUE8WOHO25ZRTEU6HCFOVQL630PO8IQDXLBLQOF0NFDPHUHAMTBDLMH366Z3M78EPRAQ09K2X5RKLN16B96VFL8G59ELR9G6E9WV62L7M6EKH32J8ER5BZYW5B0H8QKY4Z1DNZ3GA2FW5D2QQPDKS7M' where id=64; -update noar tt set v3='UPQLVCOOA8X666WEWY85BHB0VIYFT074071R8J27KWVLSQUWRIBEZKOL7HYRS9VS2F3D2451NLAAK1U7YK6HRKTSUTKLLD2D7J47S4R68EFCPPVB7RNCM4VKXEA6IB3OKGUNP0IG7W77S179Z5VSHN0IBMRUY0MXUX573IGJBCPAQA09PMSXRPLED5DZADQVBZJVRKOTM2AHPJXAPT4KC85TEGWLD4HCEXBLNUEXLCY987P1UM48P5EAPGC4BZMKS' where id=64; -update noar ti set v3='UPQLVCOOA8X666WEWY85BHB0VIYFT074071R8J27KWVLSQUWRIBEZKOL7HYRS9VS2F3D2451NLAAK1U7YK6HRKTSUTKLLD2D7J47S4R68EFCPPVB7RNCM4VKXEA6IB3OKGUNP0IG7W77S179Z5VSHN0IBMRUY0MXUX573IGJBCPAQA09PMSXRPLED5DZADQVBZJVRKOTM2AHPJXAPT4KC85TEGWLD4HCEXBLNUEXLCY987P1UM48P5EAPGC4BZMKS' where id=64; -update noar tt set v0='KW6ZLQWPP4QUOJC76OCDRZ6G74BEQQUWXMA5P5F80PJ49OXZWCR2JMD81NAE9YS0GKEPDOPEMUQ9M24NLJC57MXO8K3N1K6WQS1UZ47PY1T19LRSV5C66J1AA19RLWW47KPLLJKB73V5E9I0G464LO32YJLALAMA58DTP0C9CW7KXBED84704RVC5L6Z8Y6EISXV0QU2UN8WKEG49UMTZFPU0F6N4GJ68Q1CYX8IPJ1FNTLN6FNG8X54AE0NIALVU' where id=65; -update noar ti set v0='KW6ZLQWPP4QUOJC76OCDRZ6G74BEQQUWXMA5P5F80PJ49OXZWCR2JMD81NAE9YS0GKEPDOPEMUQ9M24NLJC57MXO8K3N1K6WQS1UZ47PY1T19LRSV5C66J1AA19RLWW47KPLLJKB73V5E9I0G464LO32YJLALAMA58DTP0C9CW7KXBED84704RVC5L6Z8Y6EISXV0QU2UN8WKEG49UMTZFPU0F6N4GJ68Q1CYX8IPJ1FNTLN6FNG8X54AE0NIALVU' where id=65; -update noar tt set v1='KIFMD4EKTW5JGB9J5QV6DCWWRPBFYEPI1995IWQ4H9ZVLYTOC3AF3IG301Z4D92YK1L95JNTVZVD93COUCNJNCRG7FW6N31NKXDJQJ8KCQ09TNO66FR9S7Z1EW9DHGH1ZJVHOH0CBGZ29NHGLOSBUP47TUHSQ9N265S565GTIPO2LT00E2KVBVT1T3DA0OJ6R0MSYDXFH0Z34C8IE9RFZS3T2YTQ2KFNJ296AXLSB4T1WAAM1OQY485YHC1Y9F8GQ' where id=65; -update noar ti set v1='KIFMD4EKTW5JGB9J5QV6DCWWRPBFYEPI1995IWQ4H9ZVLYTOC3AF3IG301Z4D92YK1L95JNTVZVD93COUCNJNCRG7FW6N31NKXDJQJ8KCQ09TNO66FR9S7Z1EW9DHGH1ZJVHOH0CBGZ29NHGLOSBUP47TUHSQ9N265S565GTIPO2LT00E2KVBVT1T3DA0OJ6R0MSYDXFH0Z34C8IE9RFZS3T2YTQ2KFNJ296AXLSB4T1WAAM1OQY485YHC1Y9F8GQ' where id=65; -update noar tt set v2='LT3SB6XVJCYKWLJ5XFOG20GGTFH417GYX503T08133NNW0EGC38J832FD4TQXAB47ROFYZ1JJW8HQ3WM848CWSQ3S6FSIH0TT4NA8MS1TY20I6LHNYL79ZKUDCTNBPZD9BGKB393BATUQ5NJ6G2JUFJYP9SUJHQ8W3NT659MSCPRB0GI4M1M0BAFATEEOGRZZI31G25B0YG7DMV9AH8TJ5ONBMZFCDU9ZHNSMPK4Q371ZHNEXCFKWYUL7DT5Z8PPZ' where id=65; -update noar ti set v2='LT3SB6XVJCYKWLJ5XFOG20GGTFH417GYX503T08133NNW0EGC38J832FD4TQXAB47ROFYZ1JJW8HQ3WM848CWSQ3S6FSIH0TT4NA8MS1TY20I6LHNYL79ZKUDCTNBPZD9BGKB393BATUQ5NJ6G2JUFJYP9SUJHQ8W3NT659MSCPRB0GI4M1M0BAFATEEOGRZZI31G25B0YG7DMV9AH8TJ5ONBMZFCDU9ZHNSMPK4Q371ZHNEXCFKWYUL7DT5Z8PPZ' where id=65; -update noar tt set v3='PRRX7TRDNUSBYOUFQA3ND47X6RELCDYQMNU9LA22PV0UC4YXJUTTSY111SMWM4CO923B7CXA79M5ERRTH4GWW8XUZX2CIHYML9U8TEJC3ENOL6HMCZ8JPYNNHPVTCN6G6K21DS6IQGSVVB5BSWB3CFDPX7MKK3DOLPEHSMZQ4DGMP74HXTOR1MTDM1H3J6ZH41SC03SVWOEGPGPAQFRUP04GKMXXRJLGSWHVQ5TEIAPVRYZ7EDEXDEC9C41M4TGT8' where id=65; -update noar ti set v3='PRRX7TRDNUSBYOUFQA3ND47X6RELCDYQMNU9LA22PV0UC4YXJUTTSY111SMWM4CO923B7CXA79M5ERRTH4GWW8XUZX2CIHYML9U8TEJC3ENOL6HMCZ8JPYNNHPVTCN6G6K21DS6IQGSVVB5BSWB3CFDPX7MKK3DOLPEHSMZQ4DGMP74HXTOR1MTDM1H3J6ZH41SC03SVWOEGPGPAQFRUP04GKMXXRJLGSWHVQ5TEIAPVRYZ7EDEXDEC9C41M4TGT8' where id=65; -update noar tt set v0='SBBNU41MNITGINJGLWXUVNS93PEO7C2ZN2LK37CH327WKYRMC9ZMWA8ET2RQ6HYZFUTIWNMJQ0CQ4ZRKRXHNHIGX0T5J4B8IJ2YXZ5FH87ETK72F1WLZVR16DDXY7MG8L05RMFJVHE3XH9EROG3SSBT8UTU7THOIQF5C571UMEAIMYJ5BFRKAUQI2NGF6ITEVA806YPNYAMTW1DJGUFGF4Y1KLHFBT5HQW4AM6I4WBARCR81JREUURYUNV162OSEW' where id=66; -update noar ti set v0='SBBNU41MNITGINJGLWXUVNS93PEO7C2ZN2LK37CH327WKYRMC9ZMWA8ET2RQ6HYZFUTIWNMJQ0CQ4ZRKRXHNHIGX0T5J4B8IJ2YXZ5FH87ETK72F1WLZVR16DDXY7MG8L05RMFJVHE3XH9EROG3SSBT8UTU7THOIQF5C571UMEAIMYJ5BFRKAUQI2NGF6ITEVA806YPNYAMTW1DJGUFGF4Y1KLHFBT5HQW4AM6I4WBARCR81JREUURYUNV162OSEW' where id=66; -update noar tt set v1='2HDHQ5PJVYQR7CSPMGK5NB1LXPE382STS6110MRU7VDF1RFKQMAOGQIGTG56M5M3P0MPTY55ZACTS03P142PAH1P500CIZJSQ58MDMVCUR5AIMZC5DS8QNKA0E0QG4K2KVVC9V520O0MQ79EE3UFU9B888D0JUPQ7WEPDY85HEND130AIKGUPZGMSP8T6OYPGLY4PWT44JPSB9RXWRQ0L9TCAM126JRE7WOZ33VDP47XXWK8IHXHCNLEXOVKLWXTQ' where id=66; -update noar ti set v1='2HDHQ5PJVYQR7CSPMGK5NB1LXPE382STS6110MRU7VDF1RFKQMAOGQIGTG56M5M3P0MPTY55ZACTS03P142PAH1P500CIZJSQ58MDMVCUR5AIMZC5DS8QNKA0E0QG4K2KVVC9V520O0MQ79EE3UFU9B888D0JUPQ7WEPDY85HEND130AIKGUPZGMSP8T6OYPGLY4PWT44JPSB9RXWRQ0L9TCAM126JRE7WOZ33VDP47XXWK8IHXHCNLEXOVKLWXTQ' where id=66; -update noar tt set v2='ZLK6HOEVVS608QLNIT3W987DIV5PF15NKPGJA98DXBR17EE3E0D50WC502PLHH7O16LR8W79PXLXVEME1C1FB22LC0023EQJVY1XT7HQ0QUN056YRJZS2D5LLICO70L554V98YFUJ6XHKV3TYJBIS66Q9UNF1TK5DLN6D3AZ369U78M4UGSD52DT77TMROJUTRESOD4ZE4CPHJ5IO9DC7THQZN8SFXMFXJAJDUXF934ETT76218XZ4FHLPTCNNDJM' where id=66; -update noar ti set v2='ZLK6HOEVVS608QLNIT3W987DIV5PF15NKPGJA98DXBR17EE3E0D50WC502PLHH7O16LR8W79PXLXVEME1C1FB22LC0023EQJVY1XT7HQ0QUN056YRJZS2D5LLICO70L554V98YFUJ6XHKV3TYJBIS66Q9UNF1TK5DLN6D3AZ369U78M4UGSD52DT77TMROJUTRESOD4ZE4CPHJ5IO9DC7THQZN8SFXMFXJAJDUXF934ETT76218XZ4FHLPTCNNDJM' where id=66; -update noar tt set v3='TMWQ5VG5JM2KD4UH7XUFMO7RLZRJJL2UKH8LOFLX675RLRO0BE87574T7DGM3P0U0Z6UO8M1LWFNEW416P8BS8RSPZ7QQTXWCIU6HMM8LRESOT16KYVW0FKHUS12GYJ41X1P90Z1K43F0WS0TA57DEO10ZO5BANXG8TWDZX33DWNTOXMCVSWYFY93C04PLWIDF8W27S6540ILYE8709CWRPYZUYC15WBMZU9FOBFCAWC08UICWY1LBC7I5FJ2O25N' where id=66; -update noar ti set v3='TMWQ5VG5JM2KD4UH7XUFMO7RLZRJJL2UKH8LOFLX675RLRO0BE87574T7DGM3P0U0Z6UO8M1LWFNEW416P8BS8RSPZ7QQTXWCIU6HMM8LRESOT16KYVW0FKHUS12GYJ41X1P90Z1K43F0WS0TA57DEO10ZO5BANXG8TWDZX33DWNTOXMCVSWYFY93C04PLWIDF8W27S6540ILYE8709CWRPYZUYC15WBMZU9FOBFCAWC08UICWY1LBC7I5FJ2O25N' where id=66; -update noar tt set v0='YFNAB4FB5Z6MBFPDRFWJYVTDXQUAIANDTZ63TSX7N9VRX3ZJCPAHOJAGDXKISNGT6IEQNYFW6UCRWKI77W5K06G4O8RZ6JV9LW8RSRGH4EQ81ECVQWRJVNQIRRT0GNMED29SVHZRO3J9JBUU9Q265E2DX2J1J3P991D5PKQPYFSKFY5LTBC4JSJKPZG7QHND7IIRXF8S8O5USKFDX6PD9ETYN4E951HPWKOMJL3QO4Y3M8K3UHYAA1X1E5WYND4D4' where id=67; -update noar ti set v0='YFNAB4FB5Z6MBFPDRFWJYVTDXQUAIANDTZ63TSX7N9VRX3ZJCPAHOJAGDXKISNGT6IEQNYFW6UCRWKI77W5K06G4O8RZ6JV9LW8RSRGH4EQ81ECVQWRJVNQIRRT0GNMED29SVHZRO3J9JBUU9Q265E2DX2J1J3P991D5PKQPYFSKFY5LTBC4JSJKPZG7QHND7IIRXF8S8O5USKFDX6PD9ETYN4E951HPWKOMJL3QO4Y3M8K3UHYAA1X1E5WYND4D4' where id=67; -update noar tt set v1='Y30NOVYA0YZLK4QP13UEGQAF90M2E9MOY76OFTZA8RT67GJDS8HQZBB9G7TGFA8DNIEUW8FQSSZ8A6QFUQSWNPAZ3F1VSXGLFG30UODO64GG1917465NHSWG41EBQNMZGZB25YUOL1RPD2QHXQID4S35MRS7DG5OX2XX0JDF2U4UR37N5B3C0WKA8CC83BBSVYWGIZAV8QWIVW85Z2ZIDU5LIKVSBT4E8HMVPNTJWI289NX628ZA0A81DCMVP2E2G' where id=67; -update noar ti set v1='Y30NOVYA0YZLK4QP13UEGQAF90M2E9MOY76OFTZA8RT67GJDS8HQZBB9G7TGFA8DNIEUW8FQSSZ8A6QFUQSWNPAZ3F1VSXGLFG30UODO64GG1917465NHSWG41EBQNMZGZB25YUOL1RPD2QHXQID4S35MRS7DG5OX2XX0JDF2U4UR37N5B3C0WKA8CC83BBSVYWGIZAV8QWIVW85Z2ZIDU5LIKVSBT4E8HMVPNTJWI289NX628ZA0A81DCMVP2E2G' where id=67; -update noar tt set v2='KHR0E8RGBJ5V4ID9XJRKPZ0102V9GPECTYAK3U47W005S897NVE7MP0085WZVSE9629KMSZDGQ5KH1BUW2KYVBQFC01JRNI0I478GBLNGRZPX22BFKKZTMPHIC4B5XBTBIU1VU2ZOV1XA7YM9KHNI5QXWIE01Z2CKHK1FN2M6CVWFWA1QIDBRQSZWC7Z37J1EHBOIBC88ITHBLDR8LW0PSSMA1MXTJ6VJNKKMW85EYQ6V3H2TXMA7SS4X8JFRVMMT' where id=67; -update noar ti set v2='KHR0E8RGBJ5V4ID9XJRKPZ0102V9GPECTYAK3U47W005S897NVE7MP0085WZVSE9629KMSZDGQ5KH1BUW2KYVBQFC01JRNI0I478GBLNGRZPX22BFKKZTMPHIC4B5XBTBIU1VU2ZOV1XA7YM9KHNI5QXWIE01Z2CKHK1FN2M6CVWFWA1QIDBRQSZWC7Z37J1EHBOIBC88ITHBLDR8LW0PSSMA1MXTJ6VJNKKMW85EYQ6V3H2TXMA7SS4X8JFRVMMT' where id=67; -update noar tt set v3='UJBA2DGEZYS72P7K7LXGLNDO4MC2RJ1WY1YYM04E42GBIKKXAUEHR47DBBQ9XJFQ1D86CMDEE3UB8M7P5NJSFCN45NJBBSIVAGRS63YMKLOG60G97GCPKJ4MMEUB11B69MLW7809XE2HQPFJF9KS8B5TLLT9FTZ49MODX1NR3CQ52EDJ4F7BZK5MEOTAEFCVTN99RUGW6SAW1LTDD0Q7I8NGCRHUCO1JMS8N9ZXIH4MWH7DCVIXZ3F2QDSO4G1R00' where id=67; -update noar ti set v3='UJBA2DGEZYS72P7K7LXGLNDO4MC2RJ1WY1YYM04E42GBIKKXAUEHR47DBBQ9XJFQ1D86CMDEE3UB8M7P5NJSFCN45NJBBSIVAGRS63YMKLOG60G97GCPKJ4MMEUB11B69MLW7809XE2HQPFJF9KS8B5TLLT9FTZ49MODX1NR3CQ52EDJ4F7BZK5MEOTAEFCVTN99RUGW6SAW1LTDD0Q7I8NGCRHUCO1JMS8N9ZXIH4MWH7DCVIXZ3F2QDSO4G1R00' where id=67; -update noar tt set v0='BH3ESXIZF6HIPMSRF21LF0YTBVAMG6557ZPNSSLKQ2O4RJ7ZPHI0DGTUZ7GA07ZHHHCTF263SHOR3X6KUWI5V53E42AX67TJHUFP8E48UBRK9BIC7M7OT7WF2REYZ9NBYZG99FI5OGKE5A7FRZMTNFLBZ07RUGEJ1YECL2ZZGRB04C1GUWVH941D35433PTA6MS9MDSIVR4SIYKJGES01KZ2HKDB3KG4Q7Q3GWYV5SDG30T5M7FRK73XYTH5E64XP' where id=68; -update noar ti set v0='BH3ESXIZF6HIPMSRF21LF0YTBVAMG6557ZPNSSLKQ2O4RJ7ZPHI0DGTUZ7GA07ZHHHCTF263SHOR3X6KUWI5V53E42AX67TJHUFP8E48UBRK9BIC7M7OT7WF2REYZ9NBYZG99FI5OGKE5A7FRZMTNFLBZ07RUGEJ1YECL2ZZGRB04C1GUWVH941D35433PTA6MS9MDSIVR4SIYKJGES01KZ2HKDB3KG4Q7Q3GWYV5SDG30T5M7FRK73XYTH5E64XP' where id=68; -update noar tt set v1='02YIDV7SRYPPTC3VPUOWWGBQHHOOMCFSRHSNHDWGZJQ09ZNPJERQKMHP4XPMECFFJAPUT2UG4O0WMCA9XY2WB614X2PXBNO0YYD7URBMSQG27HJ81B9BGHU55L54H19AV0GBP3QDAF1BB8S3OFBWCKQQ8YK1HXMDNNA7SJCRL61XCHHD1H2JV3AU8FAWR26TJTFVMNRRKAAEUD9RPLCENTYEVG27QBA09HD18UHUMPB874G2OVI6JHQ4BFGMJKUXN' where id=68; -update noar ti set v1='02YIDV7SRYPPTC3VPUOWWGBQHHOOMCFSRHSNHDWGZJQ09ZNPJERQKMHP4XPMECFFJAPUT2UG4O0WMCA9XY2WB614X2PXBNO0YYD7URBMSQG27HJ81B9BGHU55L54H19AV0GBP3QDAF1BB8S3OFBWCKQQ8YK1HXMDNNA7SJCRL61XCHHD1H2JV3AU8FAWR26TJTFVMNRRKAAEUD9RPLCENTYEVG27QBA09HD18UHUMPB874G2OVI6JHQ4BFGMJKUXN' where id=68; -update noar tt set v2='THLUX81EZAMATVGEYRELNEV8JF4UXX6ATOJRQILZJ4K2FXZ7S11BDSL1HWWCJV2PQZ5OQZ7ZUXSYQVGSMQ9TXL04J2AFA9A4HRAQUXLM57BU3AJIRA7M1DSGM5YFTXLHGDPBB47SWZUYVHJ6IA7SABRRG895RL8NC4LA3ZG4OBBRPILL1XWMF9Z4TM5W46DXLUNS5T53OU256XHPRYBJDVP9DUKIWEYA8163IFO58HB3OCDTA965HFI61JYHBAXES' where id=68; -update noar ti set v2='THLUX81EZAMATVGEYRELNEV8JF4UXX6ATOJRQILZJ4K2FXZ7S11BDSL1HWWCJV2PQZ5OQZ7ZUXSYQVGSMQ9TXL04J2AFA9A4HRAQUXLM57BU3AJIRA7M1DSGM5YFTXLHGDPBB47SWZUYVHJ6IA7SABRRG895RL8NC4LA3ZG4OBBRPILL1XWMF9Z4TM5W46DXLUNS5T53OU256XHPRYBJDVP9DUKIWEYA8163IFO58HB3OCDTA965HFI61JYHBAXES' where id=68; -update noar tt set v3='P4L46NDPS13Y8GI9Q1MJLQ5Y5154K57CXJVAV3G55V4UKL5UUVMR5B5ACAD40TFSV3AVMU424SZXUAGMEIQ3N0GHSFTPZWIVECS3VZFFQBY595YNR0ALF2TRR2QCSZYCGT6SFTTAH588U3VWBFNCY61TLXUK96QPZHDF4PSTC0T4BADJI53BX34QRG08YDRBCB13VAQUAR52BB3ISMEOUCF2XN8W0TVEUG99Z52PZ2M4DBVOU3EPU025OP4IKZ05T' where id=68; -update noar ti set v3='P4L46NDPS13Y8GI9Q1MJLQ5Y5154K57CXJVAV3G55V4UKL5UUVMR5B5ACAD40TFSV3AVMU424SZXUAGMEIQ3N0GHSFTPZWIVECS3VZFFQBY595YNR0ALF2TRR2QCSZYCGT6SFTTAH588U3VWBFNCY61TLXUK96QPZHDF4PSTC0T4BADJI53BX34QRG08YDRBCB13VAQUAR52BB3ISMEOUCF2XN8W0TVEUG99Z52PZ2M4DBVOU3EPU025OP4IKZ05T' where id=68; -update noar tt set v0='4WD9AP7AJNXDWXZILNE9Q54GSUUY2XR590TSPN2ABD9LVORNQAS9LZI08P405EM4NPBBC1L7SLW5VQR6IK03PHWX0HQIV0X3GXOWW0V8DJT87R44BX2V0UTOJU6ZWHT0RCKHWK96RU0I1O4JOV7J9V1XIZ9L8N7ABQCP1R43I17QP470VU92WL88I00JD9ISWDTCXP448U9T3WJCVBH5C16GIEIPMDA7ISHZGXNA4LEUKO9QETDPCXRUF0Q698E7M' where id=69; -update noar ti set v0='4WD9AP7AJNXDWXZILNE9Q54GSUUY2XR590TSPN2ABD9LVORNQAS9LZI08P405EM4NPBBC1L7SLW5VQR6IK03PHWX0HQIV0X3GXOWW0V8DJT87R44BX2V0UTOJU6ZWHT0RCKHWK96RU0I1O4JOV7J9V1XIZ9L8N7ABQCP1R43I17QP470VU92WL88I00JD9ISWDTCXP448U9T3WJCVBH5C16GIEIPMDA7ISHZGXNA4LEUKO9QETDPCXRUF0Q698E7M' where id=69; -update noar tt set v1='VEOT7T36B1XMEAH5FXQBPRQ8D23CW0FQTZSGSGNPIJA27CQCB3OK06HT06HJ0BO3R7D4PYSZSCHMQV763BM95WAJ5CNV7N6C9SQJT9MJ45N6XIHNV66VXL7Y7W9PX51DPKVMC7HAS78S368NM1V716ISVJCRI0RMT7Y733PRUSQ1A6NC9ACWCI7QROEJ1F679JIRWRU3U7K9J388AWF90B716GE1PGGDLEEAROWY9HIPLV2QY5TRAOUNYNOM8WVLL' where id=69; -update noar ti set v1='VEOT7T36B1XMEAH5FXQBPRQ8D23CW0FQTZSGSGNPIJA27CQCB3OK06HT06HJ0BO3R7D4PYSZSCHMQV763BM95WAJ5CNV7N6C9SQJT9MJ45N6XIHNV66VXL7Y7W9PX51DPKVMC7HAS78S368NM1V716ISVJCRI0RMT7Y733PRUSQ1A6NC9ACWCI7QROEJ1F679JIRWRU3U7K9J388AWF90B716GE1PGGDLEEAROWY9HIPLV2QY5TRAOUNYNOM8WVLL' where id=69; -update noar tt set v2='UNLXFL1CIO2BZEXF0HF38R1I7R8ATZXFCAUBEPWUA6FASR8F65H54LLGHPPS0LJILYE4OBHVKTRS0CY35VS8QLZC2LBPXDTW3ZAQ4E3AOTSZ49KKSLZWGRO3RD36GG9KQYYY7FI5JEF56INDMR8WDSHEA3P886ZGWIGMT9YSM6497IFD6UGRTY2VEI8UZSAPIME3JA70QY0VKQA35IDDGMOJRC6TL28NWCLL1HIPFKD81GR44O1UA9JG2ABLQW9ST' where id=69; -update noar ti set v2='UNLXFL1CIO2BZEXF0HF38R1I7R8ATZXFCAUBEPWUA6FASR8F65H54LLGHPPS0LJILYE4OBHVKTRS0CY35VS8QLZC2LBPXDTW3ZAQ4E3AOTSZ49KKSLZWGRO3RD36GG9KQYYY7FI5JEF56INDMR8WDSHEA3P886ZGWIGMT9YSM6497IFD6UGRTY2VEI8UZSAPIME3JA70QY0VKQA35IDDGMOJRC6TL28NWCLL1HIPFKD81GR44O1UA9JG2ABLQW9ST' where id=69; -update noar tt set v3='XNK3NWH69GBPW2ZKVHD4IAKUZM55I921YDBDULTCUEGVOFJIEIX02ODA03SZRNCMA88HUF4P0HPGFTRPBVYWVX7VESP5F2NGL0JWJTLB0V0SNZMWK11A0HLFYL5P2IAA84QKWDY70HWCNOLTDJPQF439HLFD73U999II9IPF6FW976S0YTT4JSB61FEMAGGM7F9HKPFGRNYF2ZJZM9Z034BUKM0YG90UM982ZBJQL4HB0EGJKPZWOZK164BGVCHHL' where id=69; -update noar ti set v3='XNK3NWH69GBPW2ZKVHD4IAKUZM55I921YDBDULTCUEGVOFJIEIX02ODA03SZRNCMA88HUF4P0HPGFTRPBVYWVX7VESP5F2NGL0JWJTLB0V0SNZMWK11A0HLFYL5P2IAA84QKWDY70HWCNOLTDJPQF439HLFD73U999II9IPF6FW976S0YTT4JSB61FEMAGGM7F9HKPFGRNYF2ZJZM9Z034BUKM0YG90UM982ZBJQL4HB0EGJKPZWOZK164BGVCHHL' where id=69; -update noar tt set v0='JOGIVDUE1SLU7XGGAAVGY4CNL724W4RL43JJWDQTW8Z9CJBMBWZ2IZMA2XOPS9CFFWGZ4UFY40TY9UYRGGCKLQINYVAMW9CHVUQG168LE0SVUO5PAT275IH3JX6UXDQH9Y9GRVIZRF1YWJUAJ671ZA9K1KMD95S6FI4DE2QW6LOY3I885GHJXQ5Y70GKS853T481Q7T89X7JD48ZG0WKPEFJOC00IFJX45AUMOMH5J93GVZKYOYQ91NM71J4IESXB' where id=70; -update noar ti set v0='JOGIVDUE1SLU7XGGAAVGY4CNL724W4RL43JJWDQTW8Z9CJBMBWZ2IZMA2XOPS9CFFWGZ4UFY40TY9UYRGGCKLQINYVAMW9CHVUQG168LE0SVUO5PAT275IH3JX6UXDQH9Y9GRVIZRF1YWJUAJ671ZA9K1KMD95S6FI4DE2QW6LOY3I885GHJXQ5Y70GKS853T481Q7T89X7JD48ZG0WKPEFJOC00IFJX45AUMOMH5J93GVZKYOYQ91NM71J4IESXB' where id=70; -update noar tt set v1='EYOMAU4VLHUE720BDNQ2GG0ZM2ITV7NMJ02P66WE7K9OUXKSBVB18S9514K9Y86EXOZZRNUW6ZGKOL09PFQF3A32SKDDNTFAJOJT06Q6FYEY5EH0BYN638PGPXQRKULK1CSCWHV4Z1MKCPZL9F0P6D9F4YEYPA7GJSU2ST8H02O3LTUA36SF7ZKNWHTGA1AEDAZPE9N811NGDTKJ1GV1G1R9TV96TS7VTWWS18FLARXMK5LM3IZU57P2U0CHA6KU9' where id=70; -update noar ti set v1='EYOMAU4VLHUE720BDNQ2GG0ZM2ITV7NMJ02P66WE7K9OUXKSBVB18S9514K9Y86EXOZZRNUW6ZGKOL09PFQF3A32SKDDNTFAJOJT06Q6FYEY5EH0BYN638PGPXQRKULK1CSCWHV4Z1MKCPZL9F0P6D9F4YEYPA7GJSU2ST8H02O3LTUA36SF7ZKNWHTGA1AEDAZPE9N811NGDTKJ1GV1G1R9TV96TS7VTWWS18FLARXMK5LM3IZU57P2U0CHA6KU9' where id=70; -update noar tt set v2='58NRQPHAGRVFTOAOEU3BR1RNRT2TADW9ZM46SY93SKRLXBLKLIEY5I5PVHDGA43A14QOQ4IGH7DG70OV3XQP6I6MP97DHJ54MDW8SKABF2T2D9YQ2IFSY5Y87R2QC1EWORBE94EJWZN01NJ5FNW744B32O4X3QFHG96PTM7RHC0GHIKAYCV80C9VWVVMWWGDADCKIAECLMEQAZ204T8AK88ZJ6X66IQB61KAGYTIZ6RX7XONXBNOR4RN1R0VW2HCC' where id=70; -update noar ti set v2='58NRQPHAGRVFTOAOEU3BR1RNRT2TADW9ZM46SY93SKRLXBLKLIEY5I5PVHDGA43A14QOQ4IGH7DG70OV3XQP6I6MP97DHJ54MDW8SKABF2T2D9YQ2IFSY5Y87R2QC1EWORBE94EJWZN01NJ5FNW744B32O4X3QFHG96PTM7RHC0GHIKAYCV80C9VWVVMWWGDADCKIAECLMEQAZ204T8AK88ZJ6X66IQB61KAGYTIZ6RX7XONXBNOR4RN1R0VW2HCC' where id=70; -update noar tt set v3='P2JYWEB3TGVNBLWEEOS0S5VCQH508JWPYBF5K3EJ3CZ62G4PW10BWPMMGY159RHEPZKW4WKYOSSD734PVWMC8PE8BT8NAH5Z7KA3GGM4HIKZ2ZOSF9LKKJQXD1E9XJ96V58O7MODJMN6XODOX262MD2BU957WH886ZOXNM0L3ESEX51G97L2T0TWJX64ARIIE2JL7LNVLL4V5HIEEXUBQDDG3ACGMQAA3C6CESEP0BO10MUSR789S0Y7XGGIYS579' where id=70; -update noar ti set v3='P2JYWEB3TGVNBLWEEOS0S5VCQH508JWPYBF5K3EJ3CZ62G4PW10BWPMMGY159RHEPZKW4WKYOSSD734PVWMC8PE8BT8NAH5Z7KA3GGM4HIKZ2ZOSF9LKKJQXD1E9XJ96V58O7MODJMN6XODOX262MD2BU957WH886ZOXNM0L3ESEX51G97L2T0TWJX64ARIIE2JL7LNVLL4V5HIEEXUBQDDG3ACGMQAA3C6CESEP0BO10MUSR789S0Y7XGGIYS579' where id=70; -update noar tt set v0='WEZEQZ33MIVHBUAIQ9H37T8RNOF3TZ8PMT18E6KK5IP43NCMUWG185FN3ING5IR80SGBRI75WVB538IGNPSB5XHH72Y02FVWH9ROMKMWNYH1NTBBILU46QVSLUUKM9IH05IDHOYZZA6CWDONV9WKQ0H853YCCJ450EKA8D4TVC7A6KVO68T6KN5JAFLPD6RPC7IEXQ33MP087HLHCU0542F9R9SDN1IXY6NGV52FQUSILDB7ZI7MW4E1R85XF8U6J' where id=71; -update noar ti set v0='WEZEQZ33MIVHBUAIQ9H37T8RNOF3TZ8PMT18E6KK5IP43NCMUWG185FN3ING5IR80SGBRI75WVB538IGNPSB5XHH72Y02FVWH9ROMKMWNYH1NTBBILU46QVSLUUKM9IH05IDHOYZZA6CWDONV9WKQ0H853YCCJ450EKA8D4TVC7A6KVO68T6KN5JAFLPD6RPC7IEXQ33MP087HLHCU0542F9R9SDN1IXY6NGV52FQUSILDB7ZI7MW4E1R85XF8U6J' where id=71; -update noar tt set v1='CQ5RZB0WIX9NV012C70BFL41IW3KBXI35F5063R3N3RUMGNOQ8I3XC4EN3ND2IQGZHLEMN1QDF79C76GVJLP0AR8IZC6YQMJ514XGOC4BS7ZKCH4NOE16YA55JIXL66DBVC05QQEQ9ZQ3C9KUY2SAQCV2SCPCCNI0I8NYALWM8VVWH5K7PWVKA52OX0D4CG0D9TGOULGGPA0DV30I0OCV0EBKAJHOG43DHF8HDQD8Z4PDG10ZEAT5UY5V5RV9YQBR' where id=71; -update noar ti set v1='CQ5RZB0WIX9NV012C70BFL41IW3KBXI35F5063R3N3RUMGNOQ8I3XC4EN3ND2IQGZHLEMN1QDF79C76GVJLP0AR8IZC6YQMJ514XGOC4BS7ZKCH4NOE16YA55JIXL66DBVC05QQEQ9ZQ3C9KUY2SAQCV2SCPCCNI0I8NYALWM8VVWH5K7PWVKA52OX0D4CG0D9TGOULGGPA0DV30I0OCV0EBKAJHOG43DHF8HDQD8Z4PDG10ZEAT5UY5V5RV9YQBR' where id=71; -update noar tt set v2='BNRB43X5QK2RLH59TRW9GMJOY270YNIZGMLYBMNVCW3ALG6IWWCHAL2OKVV7YWF5VKTOLGBLZVTDTPUVDTI7D8T6FWR64XA4Y6VDBIOF5E8NJFMGX2R0SBK0UJC8IS4TIO4VJHTWHN90QMUZIMBW25CXGC9PBEFH0SP2ITLQ15SDLGYXHN71M1G5LY1Q99ONAEHKI5B5OVHK1RFAHC5A11T2L5427O1DBCRIKD1FUC7SDR7IM0ESH20LSBC39YUY3' where id=71; -update noar ti set v2='BNRB43X5QK2RLH59TRW9GMJOY270YNIZGMLYBMNVCW3ALG6IWWCHAL2OKVV7YWF5VKTOLGBLZVTDTPUVDTI7D8T6FWR64XA4Y6VDBIOF5E8NJFMGX2R0SBK0UJC8IS4TIO4VJHTWHN90QMUZIMBW25CXGC9PBEFH0SP2ITLQ15SDLGYXHN71M1G5LY1Q99ONAEHKI5B5OVHK1RFAHC5A11T2L5427O1DBCRIKD1FUC7SDR7IM0ESH20LSBC39YUY3' where id=71; -update noar tt set v3='6I0VFCYZZI9XTQK557TD6K7OWWWJMKYU1X002UGCEM0RGYJ9QLRVRASD9DFQO7Z9L2JU2DSJNCV299B4AH6UELTUA0ZP1L6QEA49SY1ZDQL1SHB0DHGBCXSSP1WYC57MNNT52HQY769PSULEOZZ79P0HHBCU1QCFO2IH7YWGI5R1009OYANG9ZTTLLW915GZQUZR932CW513M05UATVCXXWG43BR0DN14G17W65YJ23B4V5HJS57T78D7NQF05RGQ' where id=71; -update noar ti set v3='6I0VFCYZZI9XTQK557TD6K7OWWWJMKYU1X002UGCEM0RGYJ9QLRVRASD9DFQO7Z9L2JU2DSJNCV299B4AH6UELTUA0ZP1L6QEA49SY1ZDQL1SHB0DHGBCXSSP1WYC57MNNT52HQY769PSULEOZZ79P0HHBCU1QCFO2IH7YWGI5R1009OYANG9ZTTLLW915GZQUZR932CW513M05UATVCXXWG43BR0DN14G17W65YJ23B4V5HJS57T78D7NQF05RGQ' where id=71; -update noar tt set v0='GEA32VYUZEO4Y8E3313TLVOETJG4D885IA0H72XLIVD42QTWDJPZPGVVDMDA4QTN24N6X2OOSMCTYNEAL3JBZ9PXGK0T7HGVOCSKJX0PY2ULLD3PQ4ANTN168B86S698JNX01MTYO3Y8S9EF43JE7HEQU4ZRLR4L17NN9I7IKWMP77B02YMS668ZRI4Y29YZ4BROMNTWIYD76X13KIP2P4QIJ27LCQ46R3YE2U1EVG2TJBOKU6ATCUOC828ZHVPOK' where id=72; -update noar ti set v0='GEA32VYUZEO4Y8E3313TLVOETJG4D885IA0H72XLIVD42QTWDJPZPGVVDMDA4QTN24N6X2OOSMCTYNEAL3JBZ9PXGK0T7HGVOCSKJX0PY2ULLD3PQ4ANTN168B86S698JNX01MTYO3Y8S9EF43JE7HEQU4ZRLR4L17NN9I7IKWMP77B02YMS668ZRI4Y29YZ4BROMNTWIYD76X13KIP2P4QIJ27LCQ46R3YE2U1EVG2TJBOKU6ATCUOC828ZHVPOK' where id=72; -update noar tt set v1='KKI43JO85AAO0CU50JEGZC50F0DZ11QRKC2HA9U88YJXSHL1I9K2G9JYX25NWZNNI3UK5ZML0FAMLQ7QI75DJFAZSSP8DFP81MYA1JQDNWHKUWDJX4DGECAYNOCGS89WYYA47B7HD8IG36EBOWOP6CMH4XZOQDTGWWTONV60CYXPHMWLZX6IJYFRK0YV4D4EH205SQS2J2TO3NL9AIQ9WJV2D4QYBC9C278WS08DUQDQB2MJ1HUI1ECSGP8XN0BP6' where id=72; -update noar ti set v1='KKI43JO85AAO0CU50JEGZC50F0DZ11QRKC2HA9U88YJXSHL1I9K2G9JYX25NWZNNI3UK5ZML0FAMLQ7QI75DJFAZSSP8DFP81MYA1JQDNWHKUWDJX4DGECAYNOCGS89WYYA47B7HD8IG36EBOWOP6CMH4XZOQDTGWWTONV60CYXPHMWLZX6IJYFRK0YV4D4EH205SQS2J2TO3NL9AIQ9WJV2D4QYBC9C278WS08DUQDQB2MJ1HUI1ECSGP8XN0BP6' where id=72; -update noar tt set v2='B3AR14NAJIBFS6WXNQDU9E2GSL0LSU855ILBS36KUBLF6VK81I134H4UC7F428MV7Z1KHX67NBZM1XH84UATRZWJF0MO6V1LEE24MCLDCN52YRL4A21CF9DSAEMMNK6XGH39XWIKNHXFQIB3FAFZ9VZLVQBILS24UMYZ77LJ2YWOX7TIHGLRTGHIDQOYZ48ETFRVQFDEMJ0Z2XVINPTIZJEKZ3JRUZ77860N1O4NCIQSFMYJX4XKXM65WKK9G0Q2L' where id=72; -update noar ti set v2='B3AR14NAJIBFS6WXNQDU9E2GSL0LSU855ILBS36KUBLF6VK81I134H4UC7F428MV7Z1KHX67NBZM1XH84UATRZWJF0MO6V1LEE24MCLDCN52YRL4A21CF9DSAEMMNK6XGH39XWIKNHXFQIB3FAFZ9VZLVQBILS24UMYZ77LJ2YWOX7TIHGLRTGHIDQOYZ48ETFRVQFDEMJ0Z2XVINPTIZJEKZ3JRUZ77860N1O4NCIQSFMYJX4XKXM65WKK9G0Q2L' where id=72; -update noar tt set v3='Q3PKU8ERQ21LXTL8B4NJLT2TNH3FEO4OEXROZU4CMLO2BQPPBOP2J4Z3QUP38YPWL01ON0HPDZSLQDFCF3CSVQMBW39PVMN7JJWGHWYNCQKAT9MQX017WXG9M1LAWJMZCIDA0OQ5BQ9CZ8V2WOAQGJYBW3NOGH6RWX3F0828B5H4K0HA417NUIDQPIVF0Y1P3RO8CN0HMDSDHO8NJ0YQ4D78WVSMHHIE8MJOTVVT9ZYMFTH8L2YY9IBUAIQ59VNNL' where id=72; -update noar ti set v3='Q3PKU8ERQ21LXTL8B4NJLT2TNH3FEO4OEXROZU4CMLO2BQPPBOP2J4Z3QUP38YPWL01ON0HPDZSLQDFCF3CSVQMBW39PVMN7JJWGHWYNCQKAT9MQX017WXG9M1LAWJMZCIDA0OQ5BQ9CZ8V2WOAQGJYBW3NOGH6RWX3F0828B5H4K0HA417NUIDQPIVF0Y1P3RO8CN0HMDSDHO8NJ0YQ4D78WVSMHHIE8MJOTVVT9ZYMFTH8L2YY9IBUAIQ59VNNL' where id=72; -update noar tt set v0='OJQVYIHHZDJEMWVRUUWIYNQ2B82XL2LPN5ENX334LFZ4KYAW2SSFH9JPUB1G9DOLSC4CW6HY1FQDQG4UNGBAZUKC1JFZ6VNHCPVQX9Y6DXAHR0MXSJN19VBI5A6SNFCL6VW5X37HPM2A6BMHCAA752LLDYRH71W9QUW4QSJ2FW8VOLQV1A138BOA9QL4OB55FL3R5JPJW10TOKMMPL465PCL9KXUP3WVNH24MV1XN816GDOMEDNEVC9TS215BJOMU' where id=73; -update noar ti set v0='OJQVYIHHZDJEMWVRUUWIYNQ2B82XL2LPN5ENX334LFZ4KYAW2SSFH9JPUB1G9DOLSC4CW6HY1FQDQG4UNGBAZUKC1JFZ6VNHCPVQX9Y6DXAHR0MXSJN19VBI5A6SNFCL6VW5X37HPM2A6BMHCAA752LLDYRH71W9QUW4QSJ2FW8VOLQV1A138BOA9QL4OB55FL3R5JPJW10TOKMMPL465PCL9KXUP3WVNH24MV1XN816GDOMEDNEVC9TS215BJOMU' where id=73; -update noar tt set v1='V95LHBUBZOYB47OBCZSYW2FXOX5012KZWQBJ2IPAKWQ479Y3XHW70BZLWGYQU7ETR984Z40CJ84KIGIT1O9DAF224PE3R0QU3CSQJBVH76FROWEB2RDNDNZRTE2HBVYBX7C8K3MF4QNZ6TBQ3IS64B2VOPHFHJUJGCEDI5CTQFHRPR6KK27O21AMFLE02HCJNI6ZTD4UO89Q0C8Y07HNZLWSRCQ1KVPL9IH98HP21IURTOZBG000ULWSABDHGDU9P' where id=73; -update noar ti set v1='V95LHBUBZOYB47OBCZSYW2FXOX5012KZWQBJ2IPAKWQ479Y3XHW70BZLWGYQU7ETR984Z40CJ84KIGIT1O9DAF224PE3R0QU3CSQJBVH76FROWEB2RDNDNZRTE2HBVYBX7C8K3MF4QNZ6TBQ3IS64B2VOPHFHJUJGCEDI5CTQFHRPR6KK27O21AMFLE02HCJNI6ZTD4UO89Q0C8Y07HNZLWSRCQ1KVPL9IH98HP21IURTOZBG000ULWSABDHGDU9P' where id=73; -update noar tt set v2='19DWGL7ODH4W4JXDA7YB4NNKPYE2TRGTN2028IMCKRIP3349W4C0CPTH6E9OWKGH23NUTVO9ADTRCRMFBW4UH1GXNIO2RPW8B5CB4DTMRW8407YDJ0Q1BI5MU34J17794VLDEYFBX9RAN6MFDRM72JBPXNBJP1DLFHRO8OWF0Q3UC5H6UTI5J1P2NI3L9AGK5T1I1UHP53905MY9DQXSRWYMGS21DML4J8RU23KID9IDC5810UGRZWWAIVIM2DXSS' where id=73; -update noar ti set v2='19DWGL7ODH4W4JXDA7YB4NNKPYE2TRGTN2028IMCKRIP3349W4C0CPTH6E9OWKGH23NUTVO9ADTRCRMFBW4UH1GXNIO2RPW8B5CB4DTMRW8407YDJ0Q1BI5MU34J17794VLDEYFBX9RAN6MFDRM72JBPXNBJP1DLFHRO8OWF0Q3UC5H6UTI5J1P2NI3L9AGK5T1I1UHP53905MY9DQXSRWYMGS21DML4J8RU23KID9IDC5810UGRZWWAIVIM2DXSS' where id=73; -update noar tt set v3='TUGBWR5FO4WC1S4ZN6J2KHGAR5OLAD767GKFCA0MSEKJK9H19ZB6V07MGGFLCRNUJJS4ACVUOOCN3MEFN46W3UHVJ36U1MC8EKYR8FGWOJYDFVJDKUFURINB17N18K4Q5B3LPSBKPOGX2ZL9MVGO6RB2EWVGPSF31BG87RF4NQJFJ216SZVLQSSPGLAZQ6HBLBGSRUNHATGQ8X7ICNHP3991BA2J0H4TPQX8YZ14MH4EX6E7JON5W5W1DWU80KLWA' where id=73; -update noar ti set v3='TUGBWR5FO4WC1S4ZN6J2KHGAR5OLAD767GKFCA0MSEKJK9H19ZB6V07MGGFLCRNUJJS4ACVUOOCN3MEFN46W3UHVJ36U1MC8EKYR8FGWOJYDFVJDKUFURINB17N18K4Q5B3LPSBKPOGX2ZL9MVGO6RB2EWVGPSF31BG87RF4NQJFJ216SZVLQSSPGLAZQ6HBLBGSRUNHATGQ8X7ICNHP3991BA2J0H4TPQX8YZ14MH4EX6E7JON5W5W1DWU80KLWA' where id=73; -update noar tt set v0='IXVHN2KO2BEDPMJG7XK5DJGY7AUZRHNSNNVRWJ4WU76BXVY6ENNE08NWXX3BJAFAG6CL59U5A5DF9R25IJCVPSVB8F4PX0TL0LW6HY0F7DBNFC8D4XU3ZSSGWATI7TXO0XSSC4KIV2HGSPIBSL88AXB2A6TSUP8JFI62DEEM2U6O76V722PDKCV6KKR0ITKRF6W1TAHRRR0S75OGKIOMAA9JRUSE3J7KYW7FDSH9GFJF9Y32B0SVVDVFV3GGPSHLI' where id=74; -update noar ti set v0='IXVHN2KO2BEDPMJG7XK5DJGY7AUZRHNSNNVRWJ4WU76BXVY6ENNE08NWXX3BJAFAG6CL59U5A5DF9R25IJCVPSVB8F4PX0TL0LW6HY0F7DBNFC8D4XU3ZSSGWATI7TXO0XSSC4KIV2HGSPIBSL88AXB2A6TSUP8JFI62DEEM2U6O76V722PDKCV6KKR0ITKRF6W1TAHRRR0S75OGKIOMAA9JRUSE3J7KYW7FDSH9GFJF9Y32B0SVVDVFV3GGPSHLI' where id=74; -update noar tt set v1='BGMV0FYBUTJG0ODDE8SEXM924JMID23BCV69G4FBTWNRO93G0YOTSAX9AN35V9ZYMKQF3VW9F24I1VJ2ISKQOE3R646WKIVG29WNRFRE3K64NKSCTF76JY8DDAH5B76IN5GV8175U8P5ZU8J111R3VWH1JJGD1ENC12H0PWCWV6N30JWHU7X6RZQE53S7BP5PXJ7QW7PL2SO8WQKWRA7G574TO3VWLN16SCJWQVTQ15KCRT5XN8YHJN3NXJIA4GGY' where id=74; -update noar ti set v1='BGMV0FYBUTJG0ODDE8SEXM924JMID23BCV69G4FBTWNRO93G0YOTSAX9AN35V9ZYMKQF3VW9F24I1VJ2ISKQOE3R646WKIVG29WNRFRE3K64NKSCTF76JY8DDAH5B76IN5GV8175U8P5ZU8J111R3VWH1JJGD1ENC12H0PWCWV6N30JWHU7X6RZQE53S7BP5PXJ7QW7PL2SO8WQKWRA7G574TO3VWLN16SCJWQVTQ15KCRT5XN8YHJN3NXJIA4GGY' where id=74; -update noar tt set v2='DO40UQ8OYI08NOL5F3RJEHIBDLM0QV0ONHRE7138HFIYM3KP9KZ58SP3TOVZ8C8XJC5GYQ5EPQGWGIIUTFWIBU07PB4IRZ6039BPK9HLP8F1COIA4HE35LKN2YDNP4A0IINHL10L3UL3YBPPLT11FJJKSRUO6OPPRBLKASSTPCW2193ZC3PNNSO3LBE9CHOOOQ70BNCQ1M3E73UHM6XMKW5MNM72SNNY226662P27ZGYUOA04WP3JBNFNKS6J13TI' where id=74; -update noar ti set v2='DO40UQ8OYI08NOL5F3RJEHIBDLM0QV0ONHRE7138HFIYM3KP9KZ58SP3TOVZ8C8XJC5GYQ5EPQGWGIIUTFWIBU07PB4IRZ6039BPK9HLP8F1COIA4HE35LKN2YDNP4A0IINHL10L3UL3YBPPLT11FJJKSRUO6OPPRBLKASSTPCW2193ZC3PNNSO3LBE9CHOOOQ70BNCQ1M3E73UHM6XMKW5MNM72SNNY226662P27ZGYUOA04WP3JBNFNKS6J13TI' where id=74; -update noar tt set v3='FD3BIZ39DJ7XU0NKEWHT2Q17J19E9PDN2S4FS2TIUQN12511KJJV3ROIPF6TOD5K6PI7QWRXJOCZFZ3OPUVV3IQX061MPTMXUJDTNI6MO5N9OMDE7RKOLBFCPZSLMIW3L20UCOYIQKUQV63FCWYJKLOE6EZTQXFFNKZ9HS79W2YR76OZPM12D1AEUFSPT464980H58YBBGVVH6F7LAKWLFKDU0T36ONS3TJ3FI7Q5CUF7Q643D24L493Q9VKKIUXS' where id=74; -update noar ti set v3='FD3BIZ39DJ7XU0NKEWHT2Q17J19E9PDN2S4FS2TIUQN12511KJJV3ROIPF6TOD5K6PI7QWRXJOCZFZ3OPUVV3IQX061MPTMXUJDTNI6MO5N9OMDE7RKOLBFCPZSLMIW3L20UCOYIQKUQV63FCWYJKLOE6EZTQXFFNKZ9HS79W2YR76OZPM12D1AEUFSPT464980H58YBBGVVH6F7LAKWLFKDU0T36ONS3TJ3FI7Q5CUF7Q643D24L493Q9VKKIUXS' where id=74; -update noar tt set v0='XEDOXIB62G0GD64FA796N7DNQ5F8H33Z60NO2APOG5TIULCZ7RWX0CQOIK3JXZYARHASN19GPNTV9PQEN2GIWPMSNKDCES5XCK2T0D67DVSXR8LG3A6C938C5JRAU6EDRJASCHD6CSWAT628AU6ALAC3P6X7CBJ0P9XK475K8WEN1BH0TD0V3PQD63ZSA1S9WHX11JVU2GYLT2YLVBMUJH4CHCWB6P4WY6IBRDT21Q8TU4EL7J29GIF4KEGZ686CO' where id=75; -update noar ti set v0='XEDOXIB62G0GD64FA796N7DNQ5F8H33Z60NO2APOG5TIULCZ7RWX0CQOIK3JXZYARHASN19GPNTV9PQEN2GIWPMSNKDCES5XCK2T0D67DVSXR8LG3A6C938C5JRAU6EDRJASCHD6CSWAT628AU6ALAC3P6X7CBJ0P9XK475K8WEN1BH0TD0V3PQD63ZSA1S9WHX11JVU2GYLT2YLVBMUJH4CHCWB6P4WY6IBRDT21Q8TU4EL7J29GIF4KEGZ686CO' where id=75; -update noar tt set v1='LZJY9L28JLUGLU3UO23WH0B5CCF3UOIK7Z3N60939DY83YTZI3E2UUIC489V7427CTVL8RTN723QWFTI1FVFTFRQB0C7HSMFJDMHD1UYI5OKR9HKZWMFRUBT91STZ7BQ6AZ4WWHENZLZDS0119B9ABVYO7J7447NRF2A8AYMIRKEX13X99ZP6QANWU5WPCGV2E536EP7NP6LOCV5EPLLN7ESKUSDCUY0CCAK6LC1EMO7QZI1BZWYRO7S5U42TS832' where id=75; -update noar ti set v1='LZJY9L28JLUGLU3UO23WH0B5CCF3UOIK7Z3N60939DY83YTZI3E2UUIC489V7427CTVL8RTN723QWFTI1FVFTFRQB0C7HSMFJDMHD1UYI5OKR9HKZWMFRUBT91STZ7BQ6AZ4WWHENZLZDS0119B9ABVYO7J7447NRF2A8AYMIRKEX13X99ZP6QANWU5WPCGV2E536EP7NP6LOCV5EPLLN7ESKUSDCUY0CCAK6LC1EMO7QZI1BZWYRO7S5U42TS832' where id=75; -update noar tt set v2='JKKWF9Q2L72OVYXSFM8SDPSGU3U4XW95ZW7K2Y4TUP1GSY3OI6U03J5FICPXQBPPTGT3T0XYKZ14EAIUEA0XIPCVOAPJ5SB9K9GVEM0QRRR2R1HO9UXB4NE8VRGZ3ZFVD5BPMHFS0KVTXLS13PV03D9AK088FD11H1VZ0DVYNCSVW2C28WDIUPP0IYX6XDXUYDIW8N7GT1A3RREDHS586AU0X9OQIQGD6O5IHMH5X9EWFGPCFBXC3DDKSA2TGSXAZ' where id=75; -update noar ti set v2='JKKWF9Q2L72OVYXSFM8SDPSGU3U4XW95ZW7K2Y4TUP1GSY3OI6U03J5FICPXQBPPTGT3T0XYKZ14EAIUEA0XIPCVOAPJ5SB9K9GVEM0QRRR2R1HO9UXB4NE8VRGZ3ZFVD5BPMHFS0KVTXLS13PV03D9AK088FD11H1VZ0DVYNCSVW2C28WDIUPP0IYX6XDXUYDIW8N7GT1A3RREDHS586AU0X9OQIQGD6O5IHMH5X9EWFGPCFBXC3DDKSA2TGSXAZ' where id=75; -update noar tt set v3='Q1VU1V7TLIS46IA99L44VRGFO81TPTU3C0F3MPZC46Z7HKP28HVNSPXP7ANN8MZFX0M9BC9U66WND1KVFV397JFP0W5K6LQ03IUGKVBJPZF3D7YWXD9EGL4QT3D3WZ02HZ476I8ENDDERWBRJ417VBNOO9ZS88AC2LVC45EGXCMA0L8ANHDT9C9R02V440MU5OPNGOMS3U9KIS5EGTASTA1BPJR6U1KY30YLO341CTXDZ4DIFQAUXG6DEAV6H9N47' where id=75; -update noar ti set v3='Q1VU1V7TLIS46IA99L44VRGFO81TPTU3C0F3MPZC46Z7HKP28HVNSPXP7ANN8MZFX0M9BC9U66WND1KVFV397JFP0W5K6LQ03IUGKVBJPZF3D7YWXD9EGL4QT3D3WZ02HZ476I8ENDDERWBRJ417VBNOO9ZS88AC2LVC45EGXCMA0L8ANHDT9C9R02V440MU5OPNGOMS3U9KIS5EGTASTA1BPJR6U1KY30YLO341CTXDZ4DIFQAUXG6DEAV6H9N47' where id=75; -update noar tt set v0='DGVDRPM4M78IAZLHGB6QPIP2Q2M57EAFHZ3QBNSQK0CP5MM33YFQNWW88MJSFKCTWKXTT0VHSDNX0AUAMYLNOF74EJ8DC9RA1X4BCG3FVE0BH5ISUG6MBHEO32ZKQVOTEHOBWNL2GM73QKCRNWUO1XHB3BBP3FR03L7897EJ3HXTPH94HX85T7D2CFGIMEC34680KZH26E1KJBRG3JPCAIHAY0HBX73K0KCWZVNJOSCYWFLWKEZ7Q9CW234ZQ92Y1' where id=76; -update noar ti set v0='DGVDRPM4M78IAZLHGB6QPIP2Q2M57EAFHZ3QBNSQK0CP5MM33YFQNWW88MJSFKCTWKXTT0VHSDNX0AUAMYLNOF74EJ8DC9RA1X4BCG3FVE0BH5ISUG6MBHEO32ZKQVOTEHOBWNL2GM73QKCRNWUO1XHB3BBP3FR03L7897EJ3HXTPH94HX85T7D2CFGIMEC34680KZH26E1KJBRG3JPCAIHAY0HBX73K0KCWZVNJOSCYWFLWKEZ7Q9CW234ZQ92Y1' where id=76; -update noar tt set v1='TOR40LL50S3CB1GW901HQP3D3EFF8CWVHV8NR4LGVA8P7ESZOF1W9UMHDU716E5SPL259Z1X4F639EYYOONQ3IJG7OMPIN7QZ5V3ZWP1EY0RM7IZCJY1DRQGCRKG8OTXUBW9AHR7AZIXY13B7P7RCAPX8I0MK6HJGHJZD8YOKM7ZJ9S6XFX452KLLW7MAJV3KG2PDC8C7TYEH017ZIZGBN66U3ABY04ABNH7FH0KP443TRZ5A4N5NCVBKRQ334IVU' where id=76; -update noar ti set v1='TOR40LL50S3CB1GW901HQP3D3EFF8CWVHV8NR4LGVA8P7ESZOF1W9UMHDU716E5SPL259Z1X4F639EYYOONQ3IJG7OMPIN7QZ5V3ZWP1EY0RM7IZCJY1DRQGCRKG8OTXUBW9AHR7AZIXY13B7P7RCAPX8I0MK6HJGHJZD8YOKM7ZJ9S6XFX452KLLW7MAJV3KG2PDC8C7TYEH017ZIZGBN66U3ABY04ABNH7FH0KP443TRZ5A4N5NCVBKRQ334IVU' where id=76; -update noar tt set v2='SN1EP8Y85PRPO1RPFGLHV7AHF4Y88JVNZAJE7ZPNW8CWTURPFU8EOYMCZ66TFAO2J679FQAPE4UQ21S35V7O1MFTRGWQ6TIU7X0H25FEFR9BRFDPSVBDWL3LLR6097LYWN9L2M3WHYYVCKHOW12HW6NSMH19QXMAJY159MGW6PNHURIFKBR2P0XXCRTUZP7WDPBM7B9IRFV6J90UW8AIFQROTB34NOT7ZA1I1BEV0PQ5IE34T9VX4QB3GYMZ4P4C1' where id=76; -update noar ti set v2='SN1EP8Y85PRPO1RPFGLHV7AHF4Y88JVNZAJE7ZPNW8CWTURPFU8EOYMCZ66TFAO2J679FQAPE4UQ21S35V7O1MFTRGWQ6TIU7X0H25FEFR9BRFDPSVBDWL3LLR6097LYWN9L2M3WHYYVCKHOW12HW6NSMH19QXMAJY159MGW6PNHURIFKBR2P0XXCRTUZP7WDPBM7B9IRFV6J90UW8AIFQROTB34NOT7ZA1I1BEV0PQ5IE34T9VX4QB3GYMZ4P4C1' where id=76; -update noar tt set v3='VNPXIFNWBJL398TGBQZLUNS11WZY5H3Q50TL41DE20P2IYM3DW81GPFPE3KM0385RIMN8IJ0KBF324OHDO2H4FMNZ3TBI5MSOKQI6SPMPZ8DRUBDLATQ6JI0130UGVB9LXKO36ZUPTEJ1IOPVC5SU2P6W0WU26FBGJIIQJFMYCT6QK16OHYEQG356VUD31K58AR3Z8ZKLFWG4SXNAU5ZP5LOE59TE6LP0C89DPOUE8VNFEN7MASS2FU2TIB96FY61' where id=76; -update noar ti set v3='VNPXIFNWBJL398TGBQZLUNS11WZY5H3Q50TL41DE20P2IYM3DW81GPFPE3KM0385RIMN8IJ0KBF324OHDO2H4FMNZ3TBI5MSOKQI6SPMPZ8DRUBDLATQ6JI0130UGVB9LXKO36ZUPTEJ1IOPVC5SU2P6W0WU26FBGJIIQJFMYCT6QK16OHYEQG356VUD31K58AR3Z8ZKLFWG4SXNAU5ZP5LOE59TE6LP0C89DPOUE8VNFEN7MASS2FU2TIB96FY61' where id=76; -update noar tt set v0='4WEJ6QCF8K5CYS20J88ICFQPCX470NAKBBLA5RMYB0XCK2S8C6RNIQ5LLWZR58W8ET0R2DL5I75E0YVQRC9VSPYK842NDRQLBP4SR4XMR374CS257OVQJ8TJAVTF3RS7CNZCIVN874UHR70YQO4GGQ113QEJ47EN5D1OZQNCCQU6VBMY7CPUFMB01JGH1M3R56ONEOIDNIGCHLBKI3BM2BVJ9WBPXPC2UZSEYWB222Z4LGWYM0UOZUHNA5VJCJANP' where id=77; -update noar ti set v0='4WEJ6QCF8K5CYS20J88ICFQPCX470NAKBBLA5RMYB0XCK2S8C6RNIQ5LLWZR58W8ET0R2DL5I75E0YVQRC9VSPYK842NDRQLBP4SR4XMR374CS257OVQJ8TJAVTF3RS7CNZCIVN874UHR70YQO4GGQ113QEJ47EN5D1OZQNCCQU6VBMY7CPUFMB01JGH1M3R56ONEOIDNIGCHLBKI3BM2BVJ9WBPXPC2UZSEYWB222Z4LGWYM0UOZUHNA5VJCJANP' where id=77; -update noar tt set v1='NM8HV723TWUXSOBD7UIRKVOV7H5YJ83QYYUFI0H10XPEYE1F0D51VNWRG0YLO39ONIHJ6HBM6WIZAFYFUT8DBT5K637RW8BT05UU3XSPHLHEOG62W6GGYSWSM1VVC6O3RU08WSPCZ8Z9W56DJXQRCQX79OKWIGE0GTVJ5IFF3F5LQXWOUBVOZ55EK2J1UHZK4A22KFN656WWMBGYNVBZYFT9RSW8N8BYI5UKG9Q8IW8XVDQ9WZVDI6TVPQGHDH16T' where id=77; -update noar ti set v1='NM8HV723TWUXSOBD7UIRKVOV7H5YJ83QYYUFI0H10XPEYE1F0D51VNWRG0YLO39ONIHJ6HBM6WIZAFYFUT8DBT5K637RW8BT05UU3XSPHLHEOG62W6GGYSWSM1VVC6O3RU08WSPCZ8Z9W56DJXQRCQX79OKWIGE0GTVJ5IFF3F5LQXWOUBVOZ55EK2J1UHZK4A22KFN656WWMBGYNVBZYFT9RSW8N8BYI5UKG9Q8IW8XVDQ9WZVDI6TVPQGHDH16T' where id=77; -update noar tt set v2='T8BEEU1BI4QFYVTHCAUKHUAU4VRI86XUGCL66119CXJMXQU0Q6J3TR4SCJIHIMJMUGMJ84B22XGGSOTVOVZO1TJT8YIS3G6Y1ETTYK9061SY3N9GG6GYUXU3O4VENJ1138BU7KQAKXE457SDR9D6U1B3F8H07ZWEF7UCU0WRNIP2PD3F9D8NP7DXJR06ND3SYST5AIPKW3DS5I6CENXA6E6GJQ8XB40VGSZ9MWMIQMUVQ5P6CNUL9FMB4FEGTJCA4' where id=77; -update noar ti set v2='T8BEEU1BI4QFYVTHCAUKHUAU4VRI86XUGCL66119CXJMXQU0Q6J3TR4SCJIHIMJMUGMJ84B22XGGSOTVOVZO1TJT8YIS3G6Y1ETTYK9061SY3N9GG6GYUXU3O4VENJ1138BU7KQAKXE457SDR9D6U1B3F8H07ZWEF7UCU0WRNIP2PD3F9D8NP7DXJR06ND3SYST5AIPKW3DS5I6CENXA6E6GJQ8XB40VGSZ9MWMIQMUVQ5P6CNUL9FMB4FEGTJCA4' where id=77; -update noar tt set v3='Z2LB146QXCQ1K30327L0P5C61U2NHPVF43EUZB8LMPNM0VZULCK1L77BK760Y16RS0I6TZ8VLC7OEUAC90NMRMN6PWBUKS0R9C7K5J5CXX5XMP50Y4EPK7M7DR6SFIKGOSMEC0X5NE7D8OQ8BW2M8R2UK5G6EMSON0PDVYW9LTZQ1SRSOOGD08EPKS53RHYRLJ7G3NYIFUVGTESDQPOQG3JTGHPSLLE0CSFHWMTN5DPLIX25ZZXWPD8UU3DMIO8G3' where id=77; -update noar ti set v3='Z2LB146QXCQ1K30327L0P5C61U2NHPVF43EUZB8LMPNM0VZULCK1L77BK760Y16RS0I6TZ8VLC7OEUAC90NMRMN6PWBUKS0R9C7K5J5CXX5XMP50Y4EPK7M7DR6SFIKGOSMEC0X5NE7D8OQ8BW2M8R2UK5G6EMSON0PDVYW9LTZQ1SRSOOGD08EPKS53RHYRLJ7G3NYIFUVGTESDQPOQG3JTGHPSLLE0CSFHWMTN5DPLIX25ZZXWPD8UU3DMIO8G3' where id=77; -update noar tt set v0='29IEVV2VC30F5OO9DQXIXTA11VXKRXB158ZNV40SNKBAMVHCY48LZ7EXQ879A08N766L46AKJJCE2W32TR8OQOIHFC3RV8232SABMQK0X3D32STQZXQMD2AP7FIDNYTKLDC5V19EMSB0179BJPZ33J7206FQZXZHDT2UMBRUTHMABIFNCX4WLEUWAGN2A0TZDBULK4GHDNPJFWDJJDOQAQO0XSLBUNA61QTSK720OOV3GATYBIPXA1EBIED2DNXOE' where id=78; -update noar ti set v0='29IEVV2VC30F5OO9DQXIXTA11VXKRXB158ZNV40SNKBAMVHCY48LZ7EXQ879A08N766L46AKJJCE2W32TR8OQOIHFC3RV8232SABMQK0X3D32STQZXQMD2AP7FIDNYTKLDC5V19EMSB0179BJPZ33J7206FQZXZHDT2UMBRUTHMABIFNCX4WLEUWAGN2A0TZDBULK4GHDNPJFWDJJDOQAQO0XSLBUNA61QTSK720OOV3GATYBIPXA1EBIED2DNXOE' where id=78; -update noar tt set v1='O2CZ4IKJ3US5Q376OFNLFOC5U789CY4WYVKMZBY6G4DGZPN2REBJRVCBD1VHJNUL9PDPLFHY6Y9PND3KJZEOPUU0S1CU1JXC63CD2VA1095X311EGB306DMB20PNMQZZPWG8DDI653DLS2L4WQF8MAPC8ZHBKSN9UEA35JDE6LJ5MTGVY7FN9FVY8MRL5PB8EFURSE3N524HUD7109VQZ1BB73SKTV0XVX1512PXH7P93AGKUNNN3IG8TN4T9L0MW' where id=78; -update noar ti set v1='O2CZ4IKJ3US5Q376OFNLFOC5U789CY4WYVKMZBY6G4DGZPN2REBJRVCBD1VHJNUL9PDPLFHY6Y9PND3KJZEOPUU0S1CU1JXC63CD2VA1095X311EGB306DMB20PNMQZZPWG8DDI653DLS2L4WQF8MAPC8ZHBKSN9UEA35JDE6LJ5MTGVY7FN9FVY8MRL5PB8EFURSE3N524HUD7109VQZ1BB73SKTV0XVX1512PXH7P93AGKUNNN3IG8TN4T9L0MW' where id=78; -update noar tt set v2='7MVBE30ICEGL02SN6Z82VSS93YD88NHCIR09WMZHD5L5JA4K366JQAD1TRRED086OVNV4ZW80E8PP1ZKP1ACZ53PGJVXVSI0NNC0CN1XW6RFC0FUBMF535X9A4FWA28C1BSB9FOIJJXGAX3JE9F0AWOW0HQYTQRMYLWAUMD1MXN9324Q8QW40U4TGFD3W8J2NP29VIML4F2GNYDQWTV5M3QRCVSMEN2DZ8X0ADL0TH28LLHYQ2DVNY9G979C5NJXF' where id=78; -update noar ti set v2='7MVBE30ICEGL02SN6Z82VSS93YD88NHCIR09WMZHD5L5JA4K366JQAD1TRRED086OVNV4ZW80E8PP1ZKP1ACZ53PGJVXVSI0NNC0CN1XW6RFC0FUBMF535X9A4FWA28C1BSB9FOIJJXGAX3JE9F0AWOW0HQYTQRMYLWAUMD1MXN9324Q8QW40U4TGFD3W8J2NP29VIML4F2GNYDQWTV5M3QRCVSMEN2DZ8X0ADL0TH28LLHYQ2DVNY9G979C5NJXF' where id=78; -update noar tt set v3='NXI9Z1155C569CT5SCNSUP1A94YUH0PQ8K6BJ40PCFL3TSL37GE4F55JWK87BQUERLU9TMN8RHHAWUL6VKF7JR6U6XJLQH8E3NTL8XJJW38ZOG0U9SS8A6LUJJWWLV3RTUP8M24RJUOU16ZUP8IW0BSFBPUDA6O5GI89QHBCQ9G3IV1NXDXC7WIH0AM5R1QHC2ATKCXGRH2C1BBOFJ8IDN5V55O6ALOZ7OFVAMMBL624GHZVRBBL4FCLOX5IG7CT9' where id=78; -update noar ti set v3='NXI9Z1155C569CT5SCNSUP1A94YUH0PQ8K6BJ40PCFL3TSL37GE4F55JWK87BQUERLU9TMN8RHHAWUL6VKF7JR6U6XJLQH8E3NTL8XJJW38ZOG0U9SS8A6LUJJWWLV3RTUP8M24RJUOU16ZUP8IW0BSFBPUDA6O5GI89QHBCQ9G3IV1NXDXC7WIH0AM5R1QHC2ATKCXGRH2C1BBOFJ8IDN5V55O6ALOZ7OFVAMMBL624GHZVRBBL4FCLOX5IG7CT9' where id=78; -update noar tt set v0='Q3FFZD7DDX86QMDGSJY2BRU58T98MFBN7BSDX49FII54HWDENRUHG6GP3X2SS4TD10U9OHHIW74AA99VHLM05GQECAJCA106FQX0B9CSQ5ULJ2LHTA3JSW9DU6GYQFGDNPXCRE2TQ0F4D3T0ICXJIK4UH8CN94CKVZYWETQ6M14L4P4VLLJFT2ODOIM5OG1C37CTMI84H462WMR0U75238YRCZ32335JO2T37ATFFU2R986OFMB21LRSXU7OZ8LSB' where id=79; -update noar ti set v0='Q3FFZD7DDX86QMDGSJY2BRU58T98MFBN7BSDX49FII54HWDENRUHG6GP3X2SS4TD10U9OHHIW74AA99VHLM05GQECAJCA106FQX0B9CSQ5ULJ2LHTA3JSW9DU6GYQFGDNPXCRE2TQ0F4D3T0ICXJIK4UH8CN94CKVZYWETQ6M14L4P4VLLJFT2ODOIM5OG1C37CTMI84H462WMR0U75238YRCZ32335JO2T37ATFFU2R986OFMB21LRSXU7OZ8LSB' where id=79; -update noar tt set v1='1CHHHKNY6CMSUK3X4JJYU1ID0T2WYA4QSL7C5KSJ8L1WULYTTPSWPJLNPEV7R9D37H0F819S5PDBQ483AO8ZYT64O69U2XPV0EP9X549G4PPBKMY1P8Z1JOMAANYSO6JF19GJ1IHUBVOSZDNGROFG26KW31CF8HSSVJRTVRUXSQTDJKI1KF3J281QAL41WP4Q2CKXRNCWLQ4QUOV1C8UN4DYCSPN5PYD1KHZ5I7MIQ6ZDLR4S7R5BXVQ3CK04D63M' where id=79; -update noar ti set v1='1CHHHKNY6CMSUK3X4JJYU1ID0T2WYA4QSL7C5KSJ8L1WULYTTPSWPJLNPEV7R9D37H0F819S5PDBQ483AO8ZYT64O69U2XPV0EP9X549G4PPBKMY1P8Z1JOMAANYSO6JF19GJ1IHUBVOSZDNGROFG26KW31CF8HSSVJRTVRUXSQTDJKI1KF3J281QAL41WP4Q2CKXRNCWLQ4QUOV1C8UN4DYCSPN5PYD1KHZ5I7MIQ6ZDLR4S7R5BXVQ3CK04D63M' where id=79; -update noar tt set v2='9LW7DQ1MLCRTJ9L1BRBBYOAR4M89KDJT9U00AO2VV7C48FOJRR1YQ17G0ACP25CL88T9KN2IHKNIQNZE27W2YZTD3D6JUPME6URTAPYTY7UTE80CS1GHBBJIRLLATPIBMXO1H47ZZBN1ZW07TX1P49PX4GZXNWT837N4QMS1KZ5MHGQ86Z7A2GDPDE12BH2S41RG0A1GVD52BXKXI7YFG57KUGS1C9TKYUMTZVMAQ34A60FI43R4R4HDTMVJC2QYA' where id=79; -update noar ti set v2='9LW7DQ1MLCRTJ9L1BRBBYOAR4M89KDJT9U00AO2VV7C48FOJRR1YQ17G0ACP25CL88T9KN2IHKNIQNZE27W2YZTD3D6JUPME6URTAPYTY7UTE80CS1GHBBJIRLLATPIBMXO1H47ZZBN1ZW07TX1P49PX4GZXNWT837N4QMS1KZ5MHGQ86Z7A2GDPDE12BH2S41RG0A1GVD52BXKXI7YFG57KUGS1C9TKYUMTZVMAQ34A60FI43R4R4HDTMVJC2QYA' where id=79; -update noar tt set v3='O8LRF4704XQ0JSM6M02LTI146T773PP9T4ZYYQO36S4CCBPLR8T6CUAP02YVKZ66ZHD35OUDMHGATSR5RUB6KZEDUO4FQWH8Q9ONW70C1LFTE7D4WP3EIC3RJH7XQWS7Q8PCMX7O5MUODVB6B3H8CE6PUMNJAKND4PODW6D3DGG5C8VBV7CKIB2OKGSGDPMN6SFT8R03MV07L4EASBRM7EXIRXZ80DJ7QHKRUITBY45X7L4ASLBBTOABIHRU7VEUA' where id=79; -update noar ti set v3='O8LRF4704XQ0JSM6M02LTI146T773PP9T4ZYYQO36S4CCBPLR8T6CUAP02YVKZ66ZHD35OUDMHGATSR5RUB6KZEDUO4FQWH8Q9ONW70C1LFTE7D4WP3EIC3RJH7XQWS7Q8PCMX7O5MUODVB6B3H8CE6PUMNJAKND4PODW6D3DGG5C8VBV7CKIB2OKGSGDPMN6SFT8R03MV07L4EASBRM7EXIRXZ80DJ7QHKRUITBY45X7L4ASLBBTOABIHRU7VEUA' where id=79; -update noar tt set v0='5ERX9GS9UO6KRUFIFQ3EYM7WIWVX4BN5MQZLKH3ZK9UYY5QSHKP0G04ALNCD2TNHQ7TXURQNH07B3OR16KOEUUJPJMC12MEX88SOPSM6OR9OZA549SN9768C3KMXDTX94XPFBJDO8K0RWHU6CEMYIGYMOI39HJN6SYLB79WLIO4FWMV8CHOR23N3UHVOVCUMGQI7HF52OEFEDUFLLAKDD04JEW6F5QS7EGL8JUHPN4IX1ORREBK8P1CVGU0H90P5G' where id=80; -update noar ti set v0='5ERX9GS9UO6KRUFIFQ3EYM7WIWVX4BN5MQZLKH3ZK9UYY5QSHKP0G04ALNCD2TNHQ7TXURQNH07B3OR16KOEUUJPJMC12MEX88SOPSM6OR9OZA549SN9768C3KMXDTX94XPFBJDO8K0RWHU6CEMYIGYMOI39HJN6SYLB79WLIO4FWMV8CHOR23N3UHVOVCUMGQI7HF52OEFEDUFLLAKDD04JEW6F5QS7EGL8JUHPN4IX1ORREBK8P1CVGU0H90P5G' where id=80; -update noar tt set v1='Z760IJEEUXH9MNILGXL3X1AICMXZ8K9G66B2WA39SDVDG9CNWCKZU1XXDA5LNYV4UT5DORMX17T6PNR0V4B3TD7VTAY0F4ZWW4U34P3COLBBIXR7567URPVZKKP857QH0230GNQ629SUTBQPQ5WPH4RQHYQUWMWLF1NHCMB7JFPTXPML67FSAMXE975VL4DCK3A8Q46BLOIXG3QETW7EWDHQPXLUYSKP61B71LTM1LNF0ZTOW02A95QAEQOL02VQ4' where id=80; -update noar ti set v1='Z760IJEEUXH9MNILGXL3X1AICMXZ8K9G66B2WA39SDVDG9CNWCKZU1XXDA5LNYV4UT5DORMX17T6PNR0V4B3TD7VTAY0F4ZWW4U34P3COLBBIXR7567URPVZKKP857QH0230GNQ629SUTBQPQ5WPH4RQHYQUWMWLF1NHCMB7JFPTXPML67FSAMXE975VL4DCK3A8Q46BLOIXG3QETW7EWDHQPXLUYSKP61B71LTM1LNF0ZTOW02A95QAEQOL02VQ4' where id=80; -update noar tt set v2='L78CIOWIEKYZTNHFVWC6TW66NLQJ0GP4CASGEJ5B79LD5MLVVPIG6R8W98T1OZ16ZY7QXHZ8QIZADOFMRV2AOXPW3GRD9K087QBCGQ9TWA7LAF26KDJ51P9SM0N7L8E2K6MRYUVY04GG4TZZMNP0GLH8U8TRNB7PYO7NE96HGX26MJSXXDBZ7QRBRWSWKOUA0IVO1H95XLFACM8J37TH97K1JSG6AUFLEA7Q8X6IHM7385I7PIE5J69KGYKPLP0YL' where id=80; -update noar ti set v2='L78CIOWIEKYZTNHFVWC6TW66NLQJ0GP4CASGEJ5B79LD5MLVVPIG6R8W98T1OZ16ZY7QXHZ8QIZADOFMRV2AOXPW3GRD9K087QBCGQ9TWA7LAF26KDJ51P9SM0N7L8E2K6MRYUVY04GG4TZZMNP0GLH8U8TRNB7PYO7NE96HGX26MJSXXDBZ7QRBRWSWKOUA0IVO1H95XLFACM8J37TH97K1JSG6AUFLEA7Q8X6IHM7385I7PIE5J69KGYKPLP0YL' where id=80; -update noar tt set v3='ROHU3JWF647KJDT4HJUJ2S5WQ1HJFDCE6BMNDUETEV9AENM3MMVBDENN42MHS4093TUCWNF3UBLEN8AVQ9R8RNUQ0KODU3CJXDKU79JMOK6B17ZQX5H066299S03HG2CS7HAE0XWA31Z5O27BDTBMH00AMZGURMXAY6N3DKPHWGXJMTPV8F2K261BHUBAXB3K9QY38MC7AZJIAVHF350FFPFBVPRV9CCJVNFNXFO00VFH5BO71J2M97BHCZH5GGII' where id=80; -update noar ti set v3='ROHU3JWF647KJDT4HJUJ2S5WQ1HJFDCE6BMNDUETEV9AENM3MMVBDENN42MHS4093TUCWNF3UBLEN8AVQ9R8RNUQ0KODU3CJXDKU79JMOK6B17ZQX5H066299S03HG2CS7HAE0XWA31Z5O27BDTBMH00AMZGURMXAY6N3DKPHWGXJMTPV8F2K261BHUBAXB3K9QY38MC7AZJIAVHF350FFPFBVPRV9CCJVNFNXFO00VFH5BO71J2M97BHCZH5GGII' where id=80; -update noar tt set v0='7IAQL7HCL9MS2N4H6MQRE7R98CHC5JRXI61AJOZQBLQVQ7PKGYAML3TMKZP6TCYNYEI030V838YCWSLKHT557WWIJ0MJIQA8WMMJHWHNIG4PXPAN626XG7PQT8BWJEVZ8VMNQGHCCYAXVZA4OMKO6H9AQK719WCQUZFG3CD928C7RN270PZIAZB3SHFLZSAK20WJK8VHVFN9CQ8XFGB0Q41TGNBQH8E1N2N290PNMUUCZ7YS0MWN6S1GD6D9CDF38' where id=81; -update noar ti set v0='7IAQL7HCL9MS2N4H6MQRE7R98CHC5JRXI61AJOZQBLQVQ7PKGYAML3TMKZP6TCYNYEI030V838YCWSLKHT557WWIJ0MJIQA8WMMJHWHNIG4PXPAN626XG7PQT8BWJEVZ8VMNQGHCCYAXVZA4OMKO6H9AQK719WCQUZFG3CD928C7RN270PZIAZB3SHFLZSAK20WJK8VHVFN9CQ8XFGB0Q41TGNBQH8E1N2N290PNMUUCZ7YS0MWN6S1GD6D9CDF38' where id=81; -update noar tt set v1='WHCYLKOEHI8OEAXP0KP8WICKENH4S8LI6246ZG0NVGL8G4WZFB1CM8GEA10O4G79LO79T0YKNKNHE8Y1VMPGB1YBHRA5SR6R3F9GC0K45CG9AYWG0OZ52AKNMF50YA9Q22OKXQZ111CHQESQAXEASOTAVF0ZFJ156DXRYPTW9M7OE2QDJGBEGCY9H63YHN6MI95K2ZMJPWE02VMFGTSKHAY92X65TCRXI4LXSDPGBHDXNM84ZWDOC2WX3S51A93BM' where id=81; -update noar ti set v1='WHCYLKOEHI8OEAXP0KP8WICKENH4S8LI6246ZG0NVGL8G4WZFB1CM8GEA10O4G79LO79T0YKNKNHE8Y1VMPGB1YBHRA5SR6R3F9GC0K45CG9AYWG0OZ52AKNMF50YA9Q22OKXQZ111CHQESQAXEASOTAVF0ZFJ156DXRYPTW9M7OE2QDJGBEGCY9H63YHN6MI95K2ZMJPWE02VMFGTSKHAY92X65TCRXI4LXSDPGBHDXNM84ZWDOC2WX3S51A93BM' where id=81; -update noar tt set v2='GGVI66QTBSD6H37N1UFPW2UASZB6U08I538EFE6AYGEOSG1Y4OL50FRIUW1TYDSX5NAGMUBQTVP1EI4NK85IR7BATNDZ2GTXWOROVV0GQ1IO5W1FSANU1FD6L81X6QP8EFSJ49BZO286PLZAFYNNSA6ANW8NUB8ZDO6BXOUU2NE3IC3NCUYE27L5BB0UPNNAFMOTTOXOHG3BZTV004FS0ID6H740HMCXNNTPED13B6NAUDYMBZSXHRDK42CL6WR5E' where id=81; -update noar ti set v2='GGVI66QTBSD6H37N1UFPW2UASZB6U08I538EFE6AYGEOSG1Y4OL50FRIUW1TYDSX5NAGMUBQTVP1EI4NK85IR7BATNDZ2GTXWOROVV0GQ1IO5W1FSANU1FD6L81X6QP8EFSJ49BZO286PLZAFYNNSA6ANW8NUB8ZDO6BXOUU2NE3IC3NCUYE27L5BB0UPNNAFMOTTOXOHG3BZTV004FS0ID6H740HMCXNNTPED13B6NAUDYMBZSXHRDK42CL6WR5E' where id=81; -update noar tt set v3='0CUC6PG8338586R61KV252EUYFR6KCS93634XBUJYBEBJDT0DPE4U2HCQVHLBDMQZAISIVR7DOE0YHF200PAUKMKTC7DKMGYD66XVTPKVBAO0XQJ3PRZEWR5YFXKCL3O1OXNI52P3R2JZ7VS492LH2ROOQJS7M7D8TX8T38BTNJQ702C9Q49UFV6H2WGRE85XKBPAYW0JLECJCPK78O95YP8M0W5URK8707NUBMPHALYU67CCO8HOVH2DARLRYJ9E' where id=81; -update noar ti set v3='0CUC6PG8338586R61KV252EUYFR6KCS93634XBUJYBEBJDT0DPE4U2HCQVHLBDMQZAISIVR7DOE0YHF200PAUKMKTC7DKMGYD66XVTPKVBAO0XQJ3PRZEWR5YFXKCL3O1OXNI52P3R2JZ7VS492LH2ROOQJS7M7D8TX8T38BTNJQ702C9Q49UFV6H2WGRE85XKBPAYW0JLECJCPK78O95YP8M0W5URK8707NUBMPHALYU67CCO8HOVH2DARLRYJ9E' where id=81; -update noar tt set v0='SROIC3LDYM70OIGPPB8C8TCQFKGYIH7MO31KZM3B36A2F74R99PFX9YELIANGQZP5OY3XRBVU3264KB971HUBIBVLD2PY3NPEOOU8SJQLHCPF6BCJTMEF5YMU0UKPGSBO3I9EPN6DQCINB3PDKGPV7XCXLAPCTV5L07SYFAQ1PXW1IKXWV2V76EOAJHERBMWMNSTU9KVT9S8DEHB4MQW55HGZHSY9EZG97H4RUUT36EWBYJGXHZT1NV59EYHJRQHR' where id=82; -update noar ti set v0='SROIC3LDYM70OIGPPB8C8TCQFKGYIH7MO31KZM3B36A2F74R99PFX9YELIANGQZP5OY3XRBVU3264KB971HUBIBVLD2PY3NPEOOU8SJQLHCPF6BCJTMEF5YMU0UKPGSBO3I9EPN6DQCINB3PDKGPV7XCXLAPCTV5L07SYFAQ1PXW1IKXWV2V76EOAJHERBMWMNSTU9KVT9S8DEHB4MQW55HGZHSY9EZG97H4RUUT36EWBYJGXHZT1NV59EYHJRQHR' where id=82; -update noar tt set v1='UDYCTXDNP6G6W3I140VDNAPYR48F2ETEPFV0RKPET0388DS7793BKGHR8TWBMGZMIIL52T9Z1FQ2IVQD7K895IUE3GZO92AOGF8U1GGYGU7NMXMXVUBY6OMIQRGNZ56BMAOO9L8GYKSH5HS1YTAD8CIXE1N7W93OEBVCJGSW4ZXUKBHGFFZIPXL93BEYLK9FKY6AUYAVCZIRWPG6SVSTW79KP0FWZYO0Y85UMXBGNJJ7PZDMRNR3HA09U4O4XBR8Y' where id=82; -update noar ti set v1='UDYCTXDNP6G6W3I140VDNAPYR48F2ETEPFV0RKPET0388DS7793BKGHR8TWBMGZMIIL52T9Z1FQ2IVQD7K895IUE3GZO92AOGF8U1GGYGU7NMXMXVUBY6OMIQRGNZ56BMAOO9L8GYKSH5HS1YTAD8CIXE1N7W93OEBVCJGSW4ZXUKBHGFFZIPXL93BEYLK9FKY6AUYAVCZIRWPG6SVSTW79KP0FWZYO0Y85UMXBGNJJ7PZDMRNR3HA09U4O4XBR8Y' where id=82; -update noar tt set v2='74EERGPYEQ8TB15ROHJZUQS70ZR8XBV0ESRE60YP6NLNKAPHYVS1PN3WIN65YVPTLQOARM9PX521WLO718I3DHRGDFGMULT6I5BPGMMK8SPE87G7BMA6BRIXCLFY6DF6PVEN0G1U9F0GZXN2AARQNV0HJL9KEQP08VPUNXM2P1RJG7B79Y4O0YCIOQ2WDJQKWERATSTR6JN1BACF3QMH5T8LQRTTIVGVI27Y6YYS0TCRLH62LYRIC7CKVJYYFW9YR' where id=82; -update noar ti set v2='74EERGPYEQ8TB15ROHJZUQS70ZR8XBV0ESRE60YP6NLNKAPHYVS1PN3WIN65YVPTLQOARM9PX521WLO718I3DHRGDFGMULT6I5BPGMMK8SPE87G7BMA6BRIXCLFY6DF6PVEN0G1U9F0GZXN2AARQNV0HJL9KEQP08VPUNXM2P1RJG7B79Y4O0YCIOQ2WDJQKWERATSTR6JN1BACF3QMH5T8LQRTTIVGVI27Y6YYS0TCRLH62LYRIC7CKVJYYFW9YR' where id=82; -update noar tt set v3='5C29FPCW6KQ1CGGHRXVNX6NYT4A7R9MKEJZTXWQXV5MJ3028G00BR6438SUVYQ6G518WBVN5UQSUF2DG16H54XA42G3FJGU2J2RVC58LR7LE456XODPR0Y74J4TN66DY6RUEOEINZW4NHZVZGCFDG6S5Z1H2L0NX3KKZ4CUI4S9YMNOIBRFBTYN039WL6S0FTVFZTLU4LJSV71VSHZEEQTRH1F8OLT1NPQ0GJ8IARUHCJDOTIFHLX7CX25EPZRSFF' where id=82; -update noar ti set v3='5C29FPCW6KQ1CGGHRXVNX6NYT4A7R9MKEJZTXWQXV5MJ3028G00BR6438SUVYQ6G518WBVN5UQSUF2DG16H54XA42G3FJGU2J2RVC58LR7LE456XODPR0Y74J4TN66DY6RUEOEINZW4NHZVZGCFDG6S5Z1H2L0NX3KKZ4CUI4S9YMNOIBRFBTYN039WL6S0FTVFZTLU4LJSV71VSHZEEQTRH1F8OLT1NPQ0GJ8IARUHCJDOTIFHLX7CX25EPZRSFF' where id=82; -update noar tt set v0='A93HJINGRDUQSPDDEO9JTQ3I5LZ7G29YXND123YYRRT0A1RLN870GBD1HSEI4JGOYSPRBU6QPX2H7Z1MRZ8Z2W1MNRZHPLKR0USOSDWLJD9B982AQGAQQBFEHM96H099B7WT8OEDAJTO181FW9N9WCMUOQE3NR0FCJHOLJDGM5COIV0Q2M467D04UU7M0BDF4SY8VZQT3Y3A7RLXAXD4351YNEOSQSQDM73U4EFC4SBDYJKIFK36FKS76C93WLNC6' where id=83; -update noar ti set v0='A93HJINGRDUQSPDDEO9JTQ3I5LZ7G29YXND123YYRRT0A1RLN870GBD1HSEI4JGOYSPRBU6QPX2H7Z1MRZ8Z2W1MNRZHPLKR0USOSDWLJD9B982AQGAQQBFEHM96H099B7WT8OEDAJTO181FW9N9WCMUOQE3NR0FCJHOLJDGM5COIV0Q2M467D04UU7M0BDF4SY8VZQT3Y3A7RLXAXD4351YNEOSQSQDM73U4EFC4SBDYJKIFK36FKS76C93WLNC6' where id=83; -update noar tt set v1='ENHVA29U3RP4WUZ395S1LOVG22X26CBAI0ZE342Q8CEWNLTO0GNF2GIN54OSEXK35AJ7I3FFQQCHYQQ7G27FJCYFD24920TSIWTJ9KQE0C6POSK8CKUC8T5061ILO4OJAVGQJE2P6CDUEZU93JA2HZ50NF3IXF5P24Q8V7ZYHS801487UNF6AOD2SI3YVVEW8M39BZEJ5ZLA66SCI18YQ48V02J91FDJO9H3LF8FYTF35SKYKW7DQZOU3OYRP5RLW' where id=83; -update noar ti set v1='ENHVA29U3RP4WUZ395S1LOVG22X26CBAI0ZE342Q8CEWNLTO0GNF2GIN54OSEXK35AJ7I3FFQQCHYQQ7G27FJCYFD24920TSIWTJ9KQE0C6POSK8CKUC8T5061ILO4OJAVGQJE2P6CDUEZU93JA2HZ50NF3IXF5P24Q8V7ZYHS801487UNF6AOD2SI3YVVEW8M39BZEJ5ZLA66SCI18YQ48V02J91FDJO9H3LF8FYTF35SKYKW7DQZOU3OYRP5RLW' where id=83; -update noar tt set v2='OCC0KHJO0C6BAIRDZOVJ6XWKDNEK3PH1OQTIUOF8WQRD31UAQOA51N9NXZYRCFUOGSQRADNMUMI4KAFI8IUIGG5XBGKF35QR2VQCSQS8OFLXIBZY2HC6E3CG55L5X8KBRFX1F5M9ISWLDJQOPP8QANTN7VSUYRA8R3JDXQ2KK0WMTSTAIY3ZBQUWT7O4IHP3WHGBQRL7M2FCP1TDK51MAO180U9RUUP97IKPDZZO0GTAL7MIRKIW03DGSXTG0AJTM' where id=83; -update noar ti set v2='OCC0KHJO0C6BAIRDZOVJ6XWKDNEK3PH1OQTIUOF8WQRD31UAQOA51N9NXZYRCFUOGSQRADNMUMI4KAFI8IUIGG5XBGKF35QR2VQCSQS8OFLXIBZY2HC6E3CG55L5X8KBRFX1F5M9ISWLDJQOPP8QANTN7VSUYRA8R3JDXQ2KK0WMTSTAIY3ZBQUWT7O4IHP3WHGBQRL7M2FCP1TDK51MAO180U9RUUP97IKPDZZO0GTAL7MIRKIW03DGSXTG0AJTM' where id=83; -update noar tt set v3='AQA45B652PEG93X2GUTBCA2CL7LG6DWQ3MW7YBI4T2M8JEEULAPKKS87K84MYCYLZTTGF7O9ZIQDDAM2FDKYCFGX4NOLQO4ZHO1Q1HBD64BWHOK7EC4H40585WRSYO6B8MXCW837TP0R9OX9JMZ6S23S4LUFB9KCN75CVAS34DWOUNHR0GAVXBGTVO0MHCL639JZNDJ8QOK9ASA7TEEIJNSXXZM7MVB96ED59E3JJZ4F62X6KISZOTRQPZPHCWTDZ' where id=83; -update noar ti set v3='AQA45B652PEG93X2GUTBCA2CL7LG6DWQ3MW7YBI4T2M8JEEULAPKKS87K84MYCYLZTTGF7O9ZIQDDAM2FDKYCFGX4NOLQO4ZHO1Q1HBD64BWHOK7EC4H40585WRSYO6B8MXCW837TP0R9OX9JMZ6S23S4LUFB9KCN75CVAS34DWOUNHR0GAVXBGTVO0MHCL639JZNDJ8QOK9ASA7TEEIJNSXXZM7MVB96ED59E3JJZ4F62X6KISZOTRQPZPHCWTDZ' where id=83; -update noar tt set v0='VHPHX3FNR8BD432JAU9JYZBEGTBEM8NYUVI1S3E5MBKLKN29314QG5XJ04QTEL61TSVO9QQHM3VIH3YHLAJ6QPZEXVSM34OLT5V9S91J10NZTG40XGUNKSTTC83TQ37DQZYKRNKPQWY5L4ZGK5D1V0C8BJGM9KEK43L2LL5UMQR7HWS78Z040DARY0C8X7PLG8J805DIB16LZMPVOKPGC7KWZAKFOF0AJK1M6LWJWO6IFT9PNRL73FSE0MFLYXGAJ' where id=84; -update noar ti set v0='VHPHX3FNR8BD432JAU9JYZBEGTBEM8NYUVI1S3E5MBKLKN29314QG5XJ04QTEL61TSVO9QQHM3VIH3YHLAJ6QPZEXVSM34OLT5V9S91J10NZTG40XGUNKSTTC83TQ37DQZYKRNKPQWY5L4ZGK5D1V0C8BJGM9KEK43L2LL5UMQR7HWS78Z040DARY0C8X7PLG8J805DIB16LZMPVOKPGC7KWZAKFOF0AJK1M6LWJWO6IFT9PNRL73FSE0MFLYXGAJ' where id=84; -update noar tt set v1='DA8A6LDDZ1LVOOLD12D58LQ0L4R1C54ONGOEJH62BMVJ6S9LGCF2X3CNFP7X3N31VQSQQKZN2ZFO9EBFS84URHR01YPS2PLT7DPF5U44O06V41B6ZJUPPZTQHO9XM9Z9001RVFHJL7BETRRFDEJM7829O9VELWKVXFQBT1MPCC857DJGVPWVO5H5RPNBA10F8KKORGXJUA6UU22MOFEIHD1TAK5XGO0K1S94UWBYZYUESCBH5DA6U77WEOU4G6NNX' where id=84; -update noar ti set v1='DA8A6LDDZ1LVOOLD12D58LQ0L4R1C54ONGOEJH62BMVJ6S9LGCF2X3CNFP7X3N31VQSQQKZN2ZFO9EBFS84URHR01YPS2PLT7DPF5U44O06V41B6ZJUPPZTQHO9XM9Z9001RVFHJL7BETRRFDEJM7829O9VELWKVXFQBT1MPCC857DJGVPWVO5H5RPNBA10F8KKORGXJUA6UU22MOFEIHD1TAK5XGO0K1S94UWBYZYUESCBH5DA6U77WEOU4G6NNX' where id=84; -update noar tt set v2='PJ5LUALL2G88Y3ZL176YQU77760USNMM7DQFCAURHMULAAJYXAZ3L9FSS2U59WXBWH0U9ZHUE7NK9EJK3FPIA3FTDS3SIY4152K1GXXBRZE00OKT04Y6W5ENMX6K0XRW0X6RGECKIYI22GX1XC4R14RN4SO9N7M1MFB12LH3J3UN4FIFYK69XKRPE4BWDUWCV7X5W878NHED2ENWETP79LKP2JK75E72B236NS6CWW3N24TIBGBOH3AO3LAPEU10D' where id=84; -update noar ti set v2='PJ5LUALL2G88Y3ZL176YQU77760USNMM7DQFCAURHMULAAJYXAZ3L9FSS2U59WXBWH0U9ZHUE7NK9EJK3FPIA3FTDS3SIY4152K1GXXBRZE00OKT04Y6W5ENMX6K0XRW0X6RGECKIYI22GX1XC4R14RN4SO9N7M1MFB12LH3J3UN4FIFYK69XKRPE4BWDUWCV7X5W878NHED2ENWETP79LKP2JK75E72B236NS6CWW3N24TIBGBOH3AO3LAPEU10D' where id=84; -update noar tt set v3='0FHAHXLKZRNNHJTOKUA302UYRBXTI3UY45XHDTF7719QRQWXHN3EF360U8YRPVPZ4RZ8VLSPQIKNHGPFKFX8593TT8OMWQRQH1TGH4DSNSHARZP419E7XG7NXP4ZS4L8Q2MTWGXK4K9GCMQV8UOIKDIMZ8MWSWJXKPQ7WFH9RTAPTA5OXR4F5ACOV84T2HGJPI43W3UNMJJ847H0IB1C3LWQXI61Y0YZGAW5KB7MW68KKQIHI1MIKYRU24JH9Z4LN' where id=84; -update noar ti set v3='0FHAHXLKZRNNHJTOKUA302UYRBXTI3UY45XHDTF7719QRQWXHN3EF360U8YRPVPZ4RZ8VLSPQIKNHGPFKFX8593TT8OMWQRQH1TGH4DSNSHARZP419E7XG7NXP4ZS4L8Q2MTWGXK4K9GCMQV8UOIKDIMZ8MWSWJXKPQ7WFH9RTAPTA5OXR4F5ACOV84T2HGJPI43W3UNMJJ847H0IB1C3LWQXI61Y0YZGAW5KB7MW68KKQIHI1MIKYRU24JH9Z4LN' where id=84; -update noar tt set v0='YMN4JN4O60G3GKYKGC45LL1YUC7VEJL6GMDCZJ2B0V9C8XYRQ7MEMZCP0VYS3QG8MZQIADP8OG9O1LQJJNTWJQ7E088KCUBFK0G8AL383HER588LS9OMVRYGRQZCCJTQI9V9H8EXT8B56TFLJ1B3AOA3ZW98AYNOYGZ30TJK7QITF7VTHYMLERXYTUDO036X4QN7SWP3QJVTWZGV6KICM1RK8SBH93RGR56I0FJ3IGEEDUO9QEJIWJTMOO88JEJF7' where id=85; -update noar ti set v0='YMN4JN4O60G3GKYKGC45LL1YUC7VEJL6GMDCZJ2B0V9C8XYRQ7MEMZCP0VYS3QG8MZQIADP8OG9O1LQJJNTWJQ7E088KCUBFK0G8AL383HER588LS9OMVRYGRQZCCJTQI9V9H8EXT8B56TFLJ1B3AOA3ZW98AYNOYGZ30TJK7QITF7VTHYMLERXYTUDO036X4QN7SWP3QJVTWZGV6KICM1RK8SBH93RGR56I0FJ3IGEEDUO9QEJIWJTMOO88JEJF7' where id=85; -update noar tt set v1='93YXNF3DWKVF61JYNWHWBJ2L68D8SWGM8EX7RIC05S64NR9VRSLKEQOKOMYZARSPCG6LS7BFPLUUT7USADWFI7HW71FR4KANRS2CB6BBWHI81P4V84FTL2UKTGXZBIJI4PUL38N5ABWCYPMC49UUTE0PPACP0B4BRAUV9OLCTC0WULUU0UKDBRAZUW784BO6ESB34W7JLVCKJDBP7YE32JXZ5GXRBUQJYJM779JRRI8WXFE15OF78LCRNVWUTTEAQ' where id=85; -update noar ti set v1='93YXNF3DWKVF61JYNWHWBJ2L68D8SWGM8EX7RIC05S64NR9VRSLKEQOKOMYZARSPCG6LS7BFPLUUT7USADWFI7HW71FR4KANRS2CB6BBWHI81P4V84FTL2UKTGXZBIJI4PUL38N5ABWCYPMC49UUTE0PPACP0B4BRAUV9OLCTC0WULUU0UKDBRAZUW784BO6ESB34W7JLVCKJDBP7YE32JXZ5GXRBUQJYJM779JRRI8WXFE15OF78LCRNVWUTTEAQ' where id=85; -update noar tt set v2='3QTKKLRXFDNGY27FTGIOTM2ODR7UI88BC8E6LOUXZUFWC0BFZRHBSMB1TTFEF7UBO8X3YI7DMDXYVSVWYAUGAYHVC7CEORJP5PSN6YN3JEJHDEBECLIKLMPYC8BDU3HNYZ0S9Q2CX915E7MQXNVIT8BYL1CA8D26S0QZV4YKT02DN80EX9DUTA7WGJK04ZU23MHX8DBCVESLKXDFG63ZCF8EDD54M6CLAXZ8J3DFFYNYS2XIWLH9MLYQLSYSTUO6C' where id=85; -update noar ti set v2='3QTKKLRXFDNGY27FTGIOTM2ODR7UI88BC8E6LOUXZUFWC0BFZRHBSMB1TTFEF7UBO8X3YI7DMDXYVSVWYAUGAYHVC7CEORJP5PSN6YN3JEJHDEBECLIKLMPYC8BDU3HNYZ0S9Q2CX915E7MQXNVIT8BYL1CA8D26S0QZV4YKT02DN80EX9DUTA7WGJK04ZU23MHX8DBCVESLKXDFG63ZCF8EDD54M6CLAXZ8J3DFFYNYS2XIWLH9MLYQLSYSTUO6C' where id=85; -update noar tt set v3='B8049LHH5FY9AO6WH71L37MBXUHYT4624TX7ZUP5XNL6GF938UC6FB6BTLY8TWHRPW1ZTCIRXS58BWSDN0UO0WX2MZ3U65APTH9IGF650HNRTXHXZFOB1IPQPX239CJXIBD4ECS8MWKN62OO3LEBIE2A454W74X14XE7X7X0068E8L7Q3623NEMWZ1FZKW63M90X787THKZ4FCVVNL76HKXTNXFSDX1V5JTYF41F7XANF4QNZ4XJAFZTIAT3J34SI' where id=85; -update noar ti set v3='B8049LHH5FY9AO6WH71L37MBXUHYT4624TX7ZUP5XNL6GF938UC6FB6BTLY8TWHRPW1ZTCIRXS58BWSDN0UO0WX2MZ3U65APTH9IGF650HNRTXHXZFOB1IPQPX239CJXIBD4ECS8MWKN62OO3LEBIE2A454W74X14XE7X7X0068E8L7Q3623NEMWZ1FZKW63M90X787THKZ4FCVVNL76HKXTNXFSDX1V5JTYF41F7XANF4QNZ4XJAFZTIAT3J34SI' where id=85; -update noar tt set v0='07PA99K9Y08R1MHMN8ZPHNZYDDFYKO0PQLHFPQQH4P727IA16R5VO6CJDBQFXI0EC2VMNRITR3WV9HPGJDRIOHUJ00G4S8F5OF8WQNTGC2HPTD9EFI4CK0OVKROTPEEMYP97LEUFWW0GGX4AKXAH7S0JWHJT2N9YU7VPQ9TX7NU2I6O05V7RNS0MYXRSDC3CXXPHXKURL0P42O8GB9XKEXPWZWYEJB6SPGDQU0B9RT8X6VVAQACJYMNY2EU5KKRFH' where id=86; -update noar ti set v0='07PA99K9Y08R1MHMN8ZPHNZYDDFYKO0PQLHFPQQH4P727IA16R5VO6CJDBQFXI0EC2VMNRITR3WV9HPGJDRIOHUJ00G4S8F5OF8WQNTGC2HPTD9EFI4CK0OVKROTPEEMYP97LEUFWW0GGX4AKXAH7S0JWHJT2N9YU7VPQ9TX7NU2I6O05V7RNS0MYXRSDC3CXXPHXKURL0P42O8GB9XKEXPWZWYEJB6SPGDQU0B9RT8X6VVAQACJYMNY2EU5KKRFH' where id=86; -update noar tt set v1='MGJOO4EAVA6XK9GVC0I5FGJQ8R88FHA4PXPS0F57S06VJGWVW30VVS426Q2XSZELYBJKOT008PA4R64HJE19QQD8OQ4WHLMY9UH47WT14M10CTQWHLFWP01JXIXBHEMAKCBF1QB6I6D4OK62FMWXIP20BQWL2T13FJ8Y3Q9230T8SK2V4GO2HC9706YSRN75X3IBO6JRTSJ0YO4NBEIOFVKQZ6YD7OUOPU6OV4OK8L82JHUU4W6A8UFHJPV7GTYPV' where id=86; -update noar ti set v1='MGJOO4EAVA6XK9GVC0I5FGJQ8R88FHA4PXPS0F57S06VJGWVW30VVS426Q2XSZELYBJKOT008PA4R64HJE19QQD8OQ4WHLMY9UH47WT14M10CTQWHLFWP01JXIXBHEMAKCBF1QB6I6D4OK62FMWXIP20BQWL2T13FJ8Y3Q9230T8SK2V4GO2HC9706YSRN75X3IBO6JRTSJ0YO4NBEIOFVKQZ6YD7OUOPU6OV4OK8L82JHUU4W6A8UFHJPV7GTYPV' where id=86; -update noar tt set v2='0LZB9SU9TDHNNTS3IJ7RA3ABA91ZGHYNMC9JV8GU75YIA0TVVCK7UIQIHR738T5G0RXHYTNTK3NSJ0MW95JWY7ANVL7X16ON0FJ4RIALH7U06RSI9GHWGU2A00G5SMKL0SM0ANNB39SFN2ZPO03IALQ6MNJW6IN0VG9EGGKBLI9DCJ7F9ZC7V7ZPI5696F4T3VGI54CSDANPRB39UXCRW1GJDQIXVTK4WAI8XCBU0UJA8RFSYW6ON6SI9OJQIX4OY' where id=86; -update noar ti set v2='0LZB9SU9TDHNNTS3IJ7RA3ABA91ZGHYNMC9JV8GU75YIA0TVVCK7UIQIHR738T5G0RXHYTNTK3NSJ0MW95JWY7ANVL7X16ON0FJ4RIALH7U06RSI9GHWGU2A00G5SMKL0SM0ANNB39SFN2ZPO03IALQ6MNJW6IN0VG9EGGKBLI9DCJ7F9ZC7V7ZPI5696F4T3VGI54CSDANPRB39UXCRW1GJDQIXVTK4WAI8XCBU0UJA8RFSYW6ON6SI9OJQIX4OY' where id=86; -update noar tt set v3='PMV0PY6F1MMZVICFX1NIBKQ7TGHWN5TG7Q6084EAN1S0OPFQGINF5EOOFEJPDDXWTTCN9OZC7HSHBBOXW18GG0XAGBBIJAK7HHRAZOMTYVHX7CJYHBW0NPQZ4N0ICUD6TLAHXP8RRYCLVH5UQ0L1CSXTBWQWZNW8GCKURBA0FAN5XJIK57YCF69OALKB1BRL7N5NLPIJ7OHC0E2V65TJURH9Y8CXDRMOOGUJSGHYLS7TGZ34DEIQY0P1H4NT3MF3Y' where id=86; -update noar ti set v3='PMV0PY6F1MMZVICFX1NIBKQ7TGHWN5TG7Q6084EAN1S0OPFQGINF5EOOFEJPDDXWTTCN9OZC7HSHBBOXW18GG0XAGBBIJAK7HHRAZOMTYVHX7CJYHBW0NPQZ4N0ICUD6TLAHXP8RRYCLVH5UQ0L1CSXTBWQWZNW8GCKURBA0FAN5XJIK57YCF69OALKB1BRL7N5NLPIJ7OHC0E2V65TJURH9Y8CXDRMOOGUJSGHYLS7TGZ34DEIQY0P1H4NT3MF3Y' where id=86; -update noar tt set v0='88TCH8BT2A3WQ60BCG7RR6B923JDQ8L26NS8X7J2UPM0AQVH5A0SC1L6V5312Y3KP2RDWHXW1DOW0NSXJEOD1I7YEU8YCCJ54KWGMSMNP3DA6RM4WHGYPVK6OE9IZ3LN3K7L7KZBLSQQFQW2O4XEFL0GYWTJ1ITLTZ1HKKGRNWUNBIV5R1W2CH0B3D616L8B2CWXA49DNCEDGNS2E17PI0FGA49XVZW6JT2PR7T9J8LAMT5NQIUFCMIJ8ZYGZYGFT' where id=87; -update noar ti set v0='88TCH8BT2A3WQ60BCG7RR6B923JDQ8L26NS8X7J2UPM0AQVH5A0SC1L6V5312Y3KP2RDWHXW1DOW0NSXJEOD1I7YEU8YCCJ54KWGMSMNP3DA6RM4WHGYPVK6OE9IZ3LN3K7L7KZBLSQQFQW2O4XEFL0GYWTJ1ITLTZ1HKKGRNWUNBIV5R1W2CH0B3D616L8B2CWXA49DNCEDGNS2E17PI0FGA49XVZW6JT2PR7T9J8LAMT5NQIUFCMIJ8ZYGZYGFT' where id=87; -update noar tt set v1='8MH9FXKUB9191VRDMZ2DVPLA2LO0EB8PBRZMMAVCTQPJ4EGL1F01P66W7CNR39ZYJDP73LZTW2I76VP8JBH7VCP6NMI1QBN20JE080DTPCO7DQMZ7SPXBOKUSEU2S35GRR3FYS16U20R2UR87OKVFWSQO8DT3PL3FG49BHS56PY66TY6XXNL4EXE68XX2CB2IYKNYEP5TXCDUYGAY44OVHC288U97G0Q4WXAGMTI5H79FDLIFIMBU2K1L1PY0OR2G' where id=87; -update noar ti set v1='8MH9FXKUB9191VRDMZ2DVPLA2LO0EB8PBRZMMAVCTQPJ4EGL1F01P66W7CNR39ZYJDP73LZTW2I76VP8JBH7VCP6NMI1QBN20JE080DTPCO7DQMZ7SPXBOKUSEU2S35GRR3FYS16U20R2UR87OKVFWSQO8DT3PL3FG49BHS56PY66TY6XXNL4EXE68XX2CB2IYKNYEP5TXCDUYGAY44OVHC288U97G0Q4WXAGMTI5H79FDLIFIMBU2K1L1PY0OR2G' where id=87; -update noar tt set v2='QNNPUX98IZ1946B7Y0FSA753076LCPYH1LF69OFIAK95LHFSHPDVFV8X00WLI6G8OQQMN1BNP2GUCLL0P1EE90A73RHO1FN7X27X0Z7B64BHNIIK63BQ1EZM85QTXT9CKHW63DB8ZV093SKGMM9QE318O93H1QUYVD8NYS2CGGHXP832A5YX1IO5HY8917LF5TSC7U2WSG1UPPYHJTHQ01ZFAW1XKZBEAIEON8D8GLJSC5FWI7P93FO0BTV3F2AL0' where id=87; -update noar ti set v2='QNNPUX98IZ1946B7Y0FSA753076LCPYH1LF69OFIAK95LHFSHPDVFV8X00WLI6G8OQQMN1BNP2GUCLL0P1EE90A73RHO1FN7X27X0Z7B64BHNIIK63BQ1EZM85QTXT9CKHW63DB8ZV093SKGMM9QE318O93H1QUYVD8NYS2CGGHXP832A5YX1IO5HY8917LF5TSC7U2WSG1UPPYHJTHQ01ZFAW1XKZBEAIEON8D8GLJSC5FWI7P93FO0BTV3F2AL0' where id=87; -update noar tt set v3='K3ZM9BYF6TPV9G5OLX9MC1VE72RJH3EUK00RSCMTXRPOFPJFVAMPPL449BSYZISR9Z33PQGEZ8TOHW5BNPBKBBUWE94EHCS2DW8CBDIREK6082LJ6GZUTCQL6BEU90Q5MOXE2A044XT5IYZDM1KP9MEHPY37DRR1B769VWT5H8LXV0I3TBRYM116DQF2C6MAM15EJW14JRQT9CVAESURHIJD2X41OL70HMA37GJF34YEBMEBPP9T2RFWW4JUFVA8N' where id=87; -update noar ti set v3='K3ZM9BYF6TPV9G5OLX9MC1VE72RJH3EUK00RSCMTXRPOFPJFVAMPPL449BSYZISR9Z33PQGEZ8TOHW5BNPBKBBUWE94EHCS2DW8CBDIREK6082LJ6GZUTCQL6BEU90Q5MOXE2A044XT5IYZDM1KP9MEHPY37DRR1B769VWT5H8LXV0I3TBRYM116DQF2C6MAM15EJW14JRQT9CVAESURHIJD2X41OL70HMA37GJF34YEBMEBPP9T2RFWW4JUFVA8N' where id=87; -update noar tt set v0='131I42L7FIJGNQ7KYY88QWDKYY6SHJX405VSN6JHPM6WS96NAF806N784S476OF5GPLELZNMZ5HUK5R5NTB5ANVSSDMG2NUY98EWW6YQBZ1BMDBBXHD87MCH2UCUJLEKY2TWKIPIJRK4Z85JVWCT7CF5NG65N7O63DV1HC1H55C00F2NUTBL4BUILRAOZ20KFSTX8VUDUSXC03K6X8CMGRTWS7Y891TX7ATCIJPTN3O4YETH2M5NF0V5Q7C5VF01F' where id=88; -update noar ti set v0='131I42L7FIJGNQ7KYY88QWDKYY6SHJX405VSN6JHPM6WS96NAF806N784S476OF5GPLELZNMZ5HUK5R5NTB5ANVSSDMG2NUY98EWW6YQBZ1BMDBBXHD87MCH2UCUJLEKY2TWKIPIJRK4Z85JVWCT7CF5NG65N7O63DV1HC1H55C00F2NUTBL4BUILRAOZ20KFSTX8VUDUSXC03K6X8CMGRTWS7Y891TX7ATCIJPTN3O4YETH2M5NF0V5Q7C5VF01F' where id=88; -update noar tt set v1='EWUPKULP6UG5MF1MRX86EMIP7TGZ680BG1R9VJQZBNB94TDK02VWSIT57KVCWSM1YOQ61YEKEG4PAY3PRA9QBXPEC6GIPZ0FASZLADBU9YSKN3FUH48CH0578JQAQAA5ECX6UB0OZ91TR9WWSIKQLEGGFKNH2MFSH6MRL0QTMAZYMLIY2ZAT6LK98JZVGJSDAO90SW4Z16RLIGZI3AD5VGRNMWG7BQG1PMI8C2UNUVJC4C1L60Z2SP1NL8UW6PA94' where id=88; -update noar ti set v1='EWUPKULP6UG5MF1MRX86EMIP7TGZ680BG1R9VJQZBNB94TDK02VWSIT57KVCWSM1YOQ61YEKEG4PAY3PRA9QBXPEC6GIPZ0FASZLADBU9YSKN3FUH48CH0578JQAQAA5ECX6UB0OZ91TR9WWSIKQLEGGFKNH2MFSH6MRL0QTMAZYMLIY2ZAT6LK98JZVGJSDAO90SW4Z16RLIGZI3AD5VGRNMWG7BQG1PMI8C2UNUVJC4C1L60Z2SP1NL8UW6PA94' where id=88; -update noar tt set v2='5YH8LTLGSJ0D6LUU5JQEAOJ34R5Y3XDZOR8ZYWE1DKW0HPR6RLSVCNAV377YCHPR0BBJKVEOAG07XAORX1119SWM72S0CEPCYMV3N9TLWTPJSPOGX0BJJ3UZKQZJJUTMLL6K5N1UIKWXBZNCOWMMJUVRT4CLFWMO7253IL3MO8GCNG3PJ4XN5XSGM5QQ9VM3P3RGDW03OSBZE8NRKH7PWZX4M5PPTB29D44PL6DRO7TRHK2XZ388NUJTGW5WNF9UN' where id=88; -update noar ti set v2='5YH8LTLGSJ0D6LUU5JQEAOJ34R5Y3XDZOR8ZYWE1DKW0HPR6RLSVCNAV377YCHPR0BBJKVEOAG07XAORX1119SWM72S0CEPCYMV3N9TLWTPJSPOGX0BJJ3UZKQZJJUTMLL6K5N1UIKWXBZNCOWMMJUVRT4CLFWMO7253IL3MO8GCNG3PJ4XN5XSGM5QQ9VM3P3RGDW03OSBZE8NRKH7PWZX4M5PPTB29D44PL6DRO7TRHK2XZ388NUJTGW5WNF9UN' where id=88; -update noar tt set v3='6962IUYMMANZF4VQCQR9W0OA9PXEL6VA2ZOQULH3J8EASPTD45V45O2JPHVXTX7M3OMHR4AXPTRLU9CRZR091K7L59ZAVV4KCXAQ0I0OY7Z5Y32IABDWIZY5T034EKWQ68BHS1020CRWLW8BXBJV6JI2204IQ4KY3CIP619PUTN42QBGM9JO0ANCGBAOLH9V4DQYCQM3FY4YQ0IJM7PCZEFAJGOAR1H7P5L0YL9L12R6EYLKRN2U6M679PVVKN4J2' where id=88; -update noar ti set v3='6962IUYMMANZF4VQCQR9W0OA9PXEL6VA2ZOQULH3J8EASPTD45V45O2JPHVXTX7M3OMHR4AXPTRLU9CRZR091K7L59ZAVV4KCXAQ0I0OY7Z5Y32IABDWIZY5T034EKWQ68BHS1020CRWLW8BXBJV6JI2204IQ4KY3CIP619PUTN42QBGM9JO0ANCGBAOLH9V4DQYCQM3FY4YQ0IJM7PCZEFAJGOAR1H7P5L0YL9L12R6EYLKRN2U6M679PVVKN4J2' where id=88; -update noar tt set v0='BRYU5QKKR83PAV2SQG7T3S0D3YWEDNQMR59GTKOJH6KRFAGYYRL0C9OUR3OTXLTWM06UCWG89KIQN7G91ZKGUIQMY6HX2RLJ66U2TI4WUJG929BTQF57ZS6HSRDTPE5KGXRY937O21GI6E8DY44SFREGU9NQH514SNU8U4KV10RCYHTUKW29CZAH9V9RU6ME6QAO06Z4IQGRSFRRLOP8ZLJWK1IWUXUK72M8A71A3LGETXOGYOAYH5R4E1D1XCT39' where id=89; -update noar ti set v0='BRYU5QKKR83PAV2SQG7T3S0D3YWEDNQMR59GTKOJH6KRFAGYYRL0C9OUR3OTXLTWM06UCWG89KIQN7G91ZKGUIQMY6HX2RLJ66U2TI4WUJG929BTQF57ZS6HSRDTPE5KGXRY937O21GI6E8DY44SFREGU9NQH514SNU8U4KV10RCYHTUKW29CZAH9V9RU6ME6QAO06Z4IQGRSFRRLOP8ZLJWK1IWUXUK72M8A71A3LGETXOGYOAYH5R4E1D1XCT39' where id=89; -update noar tt set v1='SH1GPNR8TGM4YSB1DQDHLEANT329WTK199FQEXJW3TMAEM09UWKKYHME3LBDY0M8YI1ASZDK87QN7M7Z97BBBBII6BI7YX1XAMQP5G3RL311OW0C3BCK3DA28KW69EVUPD59NOPQ0SIDNJCQ0PEX523XJCG4WSYAMQFMJA1PL5DLIC3C0RNQM819C906J6593Z34XJH0AQSY0YNAV14UGD8MAEPD84HON0CUZU7M3T6CG7023Z4SUQUSARCNW095Z' where id=89; -update noar ti set v1='SH1GPNR8TGM4YSB1DQDHLEANT329WTK199FQEXJW3TMAEM09UWKKYHME3LBDY0M8YI1ASZDK87QN7M7Z97BBBBII6BI7YX1XAMQP5G3RL311OW0C3BCK3DA28KW69EVUPD59NOPQ0SIDNJCQ0PEX523XJCG4WSYAMQFMJA1PL5DLIC3C0RNQM819C906J6593Z34XJH0AQSY0YNAV14UGD8MAEPD84HON0CUZU7M3T6CG7023Z4SUQUSARCNW095Z' where id=89; -update noar tt set v2='CZPY45G01J75DBNI6SSSTQ9GJUEHR22QVYTCTRDH0ZXHWKET6I4KRVB3ND5LC9BQJONLVUYD4J6V83K3K37LVUF5Y9DALIGE5N4OM50TEZ0VQGVXN48W7BMAV089ZT1A9XPRRW6Q6J676GMDKRNX7YTM4Y1AK62SVRO534DF5EII753729NSPPLRW9RO2F1MJN7FFTFL2F8XKE42K3L0QQOFKY1JVIVCFV160ENRLUEU4XQB097S344R5XT1TOX3Z' where id=89; -update noar ti set v2='CZPY45G01J75DBNI6SSSTQ9GJUEHR22QVYTCTRDH0ZXHWKET6I4KRVB3ND5LC9BQJONLVUYD4J6V83K3K37LVUF5Y9DALIGE5N4OM50TEZ0VQGVXN48W7BMAV089ZT1A9XPRRW6Q6J676GMDKRNX7YTM4Y1AK62SVRO534DF5EII753729NSPPLRW9RO2F1MJN7FFTFL2F8XKE42K3L0QQOFKY1JVIVCFV160ENRLUEU4XQB097S344R5XT1TOX3Z' where id=89; -update noar tt set v3='Q1SCK8LHFCEOUSR3VFDPFA3NOG3OSR9NHL8QW50OMU73FD3M4YXQ3YAQQIK03M23FNFQSV3HXRDZP1N1ZHECG2D41ORP3QITSO3TKW23N0CI9I7571T66KAO5YTMK6TJW84CPB7J9R4U4QUZBEN2AZIPE7WBIQBB3FNLN1YC79OLTUZH0ZO3K84EKXR3VFBINZY8N6ICOCSSN4X10QDBNMIT8LPT6N8KEHA4FGMB47E9KSI26G4WC0K8EYLHG6R5Q' where id=89; -update noar ti set v3='Q1SCK8LHFCEOUSR3VFDPFA3NOG3OSR9NHL8QW50OMU73FD3M4YXQ3YAQQIK03M23FNFQSV3HXRDZP1N1ZHECG2D41ORP3QITSO3TKW23N0CI9I7571T66KAO5YTMK6TJW84CPB7J9R4U4QUZBEN2AZIPE7WBIQBB3FNLN1YC79OLTUZH0ZO3K84EKXR3VFBINZY8N6ICOCSSN4X10QDBNMIT8LPT6N8KEHA4FGMB47E9KSI26G4WC0K8EYLHG6R5Q' where id=89; -update noar tt set v0='1L1W7ANM6CLDIZ148DXZ5IIHL7UX92HNYZ3F5OXCI5QJ6SBPPO7GCC8PIJ9O5HPV0939V0RHWU591TET75M313Z6951U1ZI26BBEM05X66O67TTDLBXJGLEDLRO07KJRDL2445QQGFOU57ZR3JXCG6TUFW8FGVGO9X702FRLCNGCL031UJ5PV9JTKKET6FWSU7Z28ARAQD0IULOUHHPZOXCVCR2X158CGDULERO8DM8BQA1VZN9IZJXMBKUAQ3ZC7' where id=90; -update noar ti set v0='1L1W7ANM6CLDIZ148DXZ5IIHL7UX92HNYZ3F5OXCI5QJ6SBPPO7GCC8PIJ9O5HPV0939V0RHWU591TET75M313Z6951U1ZI26BBEM05X66O67TTDLBXJGLEDLRO07KJRDL2445QQGFOU57ZR3JXCG6TUFW8FGVGO9X702FRLCNGCL031UJ5PV9JTKKET6FWSU7Z28ARAQD0IULOUHHPZOXCVCR2X158CGDULERO8DM8BQA1VZN9IZJXMBKUAQ3ZC7' where id=90; -update noar tt set v1='R4GXHHW8HUA2NE93YTIBLWISI09ZXUWT4R1BQZS6LYY7TGRM13RAB2526IO5P9CUJB0PHTK6DHYPI4QA187AAQDPYJMI5XUH7ZU86S4ZYYVM8CB25YEBOJ3DEVZ2HTCD4R9LBBPX6SMXERV3EI4YTFFFD3KUVQS6G6KJNYWYNKCISSF438F9M1CF287MXYP8NIUJOU9AJ86X82GU2TSLBLBNJWJGGQKLOG3PNPC7UEQ172Z2G15I2DQJUC10BFFOR' where id=90; -update noar ti set v1='R4GXHHW8HUA2NE93YTIBLWISI09ZXUWT4R1BQZS6LYY7TGRM13RAB2526IO5P9CUJB0PHTK6DHYPI4QA187AAQDPYJMI5XUH7ZU86S4ZYYVM8CB25YEBOJ3DEVZ2HTCD4R9LBBPX6SMXERV3EI4YTFFFD3KUVQS6G6KJNYWYNKCISSF438F9M1CF287MXYP8NIUJOU9AJ86X82GU2TSLBLBNJWJGGQKLOG3PNPC7UEQ172Z2G15I2DQJUC10BFFOR' where id=90; -update noar tt set v2='63VGP2SCNVZAYTH1KDUK5LLLTE20FWEL4Z1XYJIT8QWQEDM68FPDKXF6MNDI2A5TOOE9UHPOVR9BDTWLSCQ5TTFU2KR7EFL4A22F2684BHUL5IA2RXN3PEHZUMIWJV0INMXM8UOVY1K5UNRHSWKIK7RQ61MK8891GAXMB2ISK4U2YYB46DYNQXX87QBGHX8376UTVZQZJYDBREBHE5TBLARCMYUW28N3QZXJ2PC8BWJ7VRKJS0Q2MYLTWTE9FY1ZK' where id=90; -update noar ti set v2='63VGP2SCNVZAYTH1KDUK5LLLTE20FWEL4Z1XYJIT8QWQEDM68FPDKXF6MNDI2A5TOOE9UHPOVR9BDTWLSCQ5TTFU2KR7EFL4A22F2684BHUL5IA2RXN3PEHZUMIWJV0INMXM8UOVY1K5UNRHSWKIK7RQ61MK8891GAXMB2ISK4U2YYB46DYNQXX87QBGHX8376UTVZQZJYDBREBHE5TBLARCMYUW28N3QZXJ2PC8BWJ7VRKJS0Q2MYLTWTE9FY1ZK' where id=90; -update noar tt set v3='4XXV8VTI8TV1DJALD6ZQTAXR0SE05D7N5KWRZZ8VZFL71XB33CZWVO9V0C8UFCBGCGF4I2VWPXSFNSFMM4WWS0NWWRW2HGLWJMBNWNCL47IC6YMT2074VSO1NJFW8QHZ1S7LEH1DH4CD8ROCP4K5C9PN99ID4A545NDKII8O3WZLKH3YXC6KGAGC1A4OFBPKKO1H6QANDJJEPI4HU6DED0NB4FHWB86YIOKR9QK830ZS3XTHLX9UQ6HUHIUSTSXO5' where id=90; -update noar ti set v3='4XXV8VTI8TV1DJALD6ZQTAXR0SE05D7N5KWRZZ8VZFL71XB33CZWVO9V0C8UFCBGCGF4I2VWPXSFNSFMM4WWS0NWWRW2HGLWJMBNWNCL47IC6YMT2074VSO1NJFW8QHZ1S7LEH1DH4CD8ROCP4K5C9PN99ID4A545NDKII8O3WZLKH3YXC6KGAGC1A4OFBPKKO1H6QANDJJEPI4HU6DED0NB4FHWB86YIOKR9QK830ZS3XTHLX9UQ6HUHIUSTSXO5' where id=90; -update noar tt set v0='FWVLA52VDA5RM3ASLMI5F264IB2WSYYEOUGXEZNJ1N9INIYY8ZSKHMWI7HF9CZ7O746WPOQ4KH04318VOQORYW0KLMGKQJ2A87BBT19BG9YDOB4DNV1GINKSZ5GPKDM0G3H7ON0G8HKIR71M3MCYJK8S6R5O40CM3R3FCU0QL9D34O1CQSS1HCXVCXUM9EYLN6N0RCBPF6DO5QXRY2OJRG7FXFFTNZ01UMPMSGLNRLJ9DX0ZGF8942YQNI6ZPVLRJ' where id=91; -update noar ti set v0='FWVLA52VDA5RM3ASLMI5F264IB2WSYYEOUGXEZNJ1N9INIYY8ZSKHMWI7HF9CZ7O746WPOQ4KH04318VOQORYW0KLMGKQJ2A87BBT19BG9YDOB4DNV1GINKSZ5GPKDM0G3H7ON0G8HKIR71M3MCYJK8S6R5O40CM3R3FCU0QL9D34O1CQSS1HCXVCXUM9EYLN6N0RCBPF6DO5QXRY2OJRG7FXFFTNZ01UMPMSGLNRLJ9DX0ZGF8942YQNI6ZPVLRJ' where id=91; -update noar tt set v1='8VVJ3ZIVBBM8OH9SL8O1CIC5HON4HFPLWHYM55KM1FBCVAW327EBT80RDUCJLV1615NOCA0TFBL6CYRPKHL6ZMJ1A2FIT50KV7KFN6CGUJUYLT8J2XGY7AUMHOT2QR6OXO052TEMSKQ3UU04YH20BQ37MG0CYHY9QZ77VYRTZ9N0T8RR4779PRS0OMBUNU7Y6W9CU0AS6PSJPADV1MQ0K0H9BF5DZFFHVFMTXHMEQR0WPL76UG3XUWALI3SV9L7NE' where id=91; -update noar ti set v1='8VVJ3ZIVBBM8OH9SL8O1CIC5HON4HFPLWHYM55KM1FBCVAW327EBT80RDUCJLV1615NOCA0TFBL6CYRPKHL6ZMJ1A2FIT50KV7KFN6CGUJUYLT8J2XGY7AUMHOT2QR6OXO052TEMSKQ3UU04YH20BQ37MG0CYHY9QZ77VYRTZ9N0T8RR4779PRS0OMBUNU7Y6W9CU0AS6PSJPADV1MQ0K0H9BF5DZFFHVFMTXHMEQR0WPL76UG3XUWALI3SV9L7NE' where id=91; -update noar tt set v2='C3Z1IFT3RZWXJGZA9DDKQQ881R0PLTHTEFDQ2VDY2209TOVOSCT1MA28WBYKQ37HOI9P6KD00KLNAK00G98OZ8ARF5ZM072HRU5ATNBBNRE1V5K6FRBUHGED5788H0D0KV26YKXR3CAYVRKN5W5YIOBE8V44UUC0GZDLVDRGYHXL2TUCWD3A9DIS8NPVL2V1A9063B1BZST0U736FS0BVNJSP9I8V8XFWCFS3QTM7QSNHMPUIL70BL5J2QK7ACONM' where id=91; -update noar ti set v2='C3Z1IFT3RZWXJGZA9DDKQQ881R0PLTHTEFDQ2VDY2209TOVOSCT1MA28WBYKQ37HOI9P6KD00KLNAK00G98OZ8ARF5ZM072HRU5ATNBBNRE1V5K6FRBUHGED5788H0D0KV26YKXR3CAYVRKN5W5YIOBE8V44UUC0GZDLVDRGYHXL2TUCWD3A9DIS8NPVL2V1A9063B1BZST0U736FS0BVNJSP9I8V8XFWCFS3QTM7QSNHMPUIL70BL5J2QK7ACONM' where id=91; -update noar tt set v3='GM8NUPGQZQXY8MJ4IFSCNJEDHXF3OY1HP3U7ER0J9AOVN5PFULM0440NGDOK5ZVBOFWP611KWHTC1CCLFCA76HRXUPN6ZYU0QV0EBI9XNT9NA6FW4NFIKZO6RN4GCFT4ZGFM0R2KB2S2FMUTH7JRZI30OOM682NQUAZY5BU3HXDBQOGQZ47YQWJZOHKNE09A69RNYI6FA4BL4ZIDHUQTPQ2IHBRQTZAIKAMBXYEV3KLCFXSO9N1K4VVYH6BSE26Z6' where id=91; -update noar ti set v3='GM8NUPGQZQXY8MJ4IFSCNJEDHXF3OY1HP3U7ER0J9AOVN5PFULM0440NGDOK5ZVBOFWP611KWHTC1CCLFCA76HRXUPN6ZYU0QV0EBI9XNT9NA6FW4NFIKZO6RN4GCFT4ZGFM0R2KB2S2FMUTH7JRZI30OOM682NQUAZY5BU3HXDBQOGQZ47YQWJZOHKNE09A69RNYI6FA4BL4ZIDHUQTPQ2IHBRQTZAIKAMBXYEV3KLCFXSO9N1K4VVYH6BSE26Z6' where id=91; -update noar tt set v0='RVV1H440G7IF2JHF0GI37EP291FYD9RXRP5ST5Z1GG41J1Y6R1ELJZSUHMKQ52H92MFE72OI40AJKSPHPKTGW5KKC83OSWYFU2YMY2KNNYXP2A2F5LBBB9NYVALIY3J12YLHQR9C3N8BUF7A9OMOA9SY8FAVNUVTYOYWCJGKLXCUYNUWD47WLQAILOQT6LROTT9Z6RY6FBXGYIEA6VYJD69SY7752NEBEZIAG4YB99TIIAE1ZKNBONZ134F1X39JD' where id=92; -update noar ti set v0='RVV1H440G7IF2JHF0GI37EP291FYD9RXRP5ST5Z1GG41J1Y6R1ELJZSUHMKQ52H92MFE72OI40AJKSPHPKTGW5KKC83OSWYFU2YMY2KNNYXP2A2F5LBBB9NYVALIY3J12YLHQR9C3N8BUF7A9OMOA9SY8FAVNUVTYOYWCJGKLXCUYNUWD47WLQAILOQT6LROTT9Z6RY6FBXGYIEA6VYJD69SY7752NEBEZIAG4YB99TIIAE1ZKNBONZ134F1X39JD' where id=92; -update noar tt set v1='E5PPN4GMT8RKWB2ZCX0TRLNJLJRVPKB9WKG46DYD3ITX1EI1ABX0KPQ01LWYSSCFRCNRXK3NPGHYZ47QDABF07LK1HNC2NM3OSQW13TB9JPKQVS2I9NC7VH47P3BAYMQYLKQP16LSZJSC92U098ULCRDJO2DJXTDBQ0A5YRV45L525UPZ1RAEXQE4UIS6H8W1Y3660IY5MOKBJWIFUFKU94IB4IFIDJ44FE0H99ZNXA4LD3075A4ZJYBZN5JQCT34' where id=92; -update noar ti set v1='E5PPN4GMT8RKWB2ZCX0TRLNJLJRVPKB9WKG46DYD3ITX1EI1ABX0KPQ01LWYSSCFRCNRXK3NPGHYZ47QDABF07LK1HNC2NM3OSQW13TB9JPKQVS2I9NC7VH47P3BAYMQYLKQP16LSZJSC92U098ULCRDJO2DJXTDBQ0A5YRV45L525UPZ1RAEXQE4UIS6H8W1Y3660IY5MOKBJWIFUFKU94IB4IFIDJ44FE0H99ZNXA4LD3075A4ZJYBZN5JQCT34' where id=92; -update noar tt set v2='0N9AJV21Y70A87DVQMZGAVG663IMW936TIKECOWLCE5JPVRWFNQFZS8JDXIPIY5UOQETRJNDL9EUS96IRD15P2NIHA0B91MIKZMHOTM2ZQK3XBDFLD3411U38USXOYX35YXY2LLY31170T7H5MZAOTAIV4L791D0D9B5U2684CKRFY58Q1T41SP8ZCCU35N5EZ71EPTVXTMFO194MKR1Z8MJIED2KQ373NNG4ALI028MZBAJ1J3J7N3RTECPSS8S1' where id=92; -update noar ti set v2='0N9AJV21Y70A87DVQMZGAVG663IMW936TIKECOWLCE5JPVRWFNQFZS8JDXIPIY5UOQETRJNDL9EUS96IRD15P2NIHA0B91MIKZMHOTM2ZQK3XBDFLD3411U38USXOYX35YXY2LLY31170T7H5MZAOTAIV4L791D0D9B5U2684CKRFY58Q1T41SP8ZCCU35N5EZ71EPTVXTMFO194MKR1Z8MJIED2KQ373NNG4ALI028MZBAJ1J3J7N3RTECPSS8S1' where id=92; -update noar tt set v3='5NRG9TPQJFGZPU55R7HQ7DAE2WMTN6S3HGTZAN8HBIMFKDCG3DTAP4AWGSKEBBFYJGG8RGTYXWIBBVPHW66F4HLSFZBXLINYJZ8F8DNUTF0ZERIIOGRSQFXPMD0F3D2LHRJU14JSQ4COTDYT87Y79ZX8ZV5NI2H5SP1YM9Y9C8UN0YCBNMVRKRVPQ3AYQVEW1O4QB3BHXZKGGGRLYX2ULCR2ONSGYVES6JXWO4O6KA68ACHXRT5F28FAMQNNEV5GC' where id=92; -update noar ti set v3='5NRG9TPQJFGZPU55R7HQ7DAE2WMTN6S3HGTZAN8HBIMFKDCG3DTAP4AWGSKEBBFYJGG8RGTYXWIBBVPHW66F4HLSFZBXLINYJZ8F8DNUTF0ZERIIOGRSQFXPMD0F3D2LHRJU14JSQ4COTDYT87Y79ZX8ZV5NI2H5SP1YM9Y9C8UN0YCBNMVRKRVPQ3AYQVEW1O4QB3BHXZKGGGRLYX2ULCR2ONSGYVES6JXWO4O6KA68ACHXRT5F28FAMQNNEV5GC' where id=92; -update noar tt set v0='8OGUBG5PSFM9YFCRNYE1P416D66N991D3KNN79ITKN9Q4B37N7CPZVYP1BSTV60QHPWFGIUDRZKQWEG797PZ4KVX9XM0JI1MCPADAKTQYHJXIGB81Y3DLT8T7LMBWFSJ122KF8MQ3MX2WN68WWSSELG62H40WNTXORE23MM3RDK77OKCEH9ZP64Q0UKUJAINMDW8ENN3Y16AKHHOGD1XIXG131GCC43O3BSNDOWB9DW8S5JQKOH8PU272XJWLC0X5' where id=93; -update noar ti set v0='8OGUBG5PSFM9YFCRNYE1P416D66N991D3KNN79ITKN9Q4B37N7CPZVYP1BSTV60QHPWFGIUDRZKQWEG797PZ4KVX9XM0JI1MCPADAKTQYHJXIGB81Y3DLT8T7LMBWFSJ122KF8MQ3MX2WN68WWSSELG62H40WNTXORE23MM3RDK77OKCEH9ZP64Q0UKUJAINMDW8ENN3Y16AKHHOGD1XIXG131GCC43O3BSNDOWB9DW8S5JQKOH8PU272XJWLC0X5' where id=93; -update noar tt set v1='NI8A2ZUGRMA1UG3K6IC036SQ8LCRHMQB83WKHTTELLFPES4LPHT6JLXRKN30OFSUQMM574L5UB4Q02MVD786BC3RIJ1MQVCTW0GOJSFOAZSYDJWASIHSM414RQJQ6VVVVUIRAWJSGMKPN0P848MR3BLIWVCUE1DNDO2PXUKNWQYQG2KQ0EKZCYSDYRYSS2SXYSTDO471SQF93XYOXTV453HYONU7YVFHWWC3CD2M3WD7NR0P3HQH6STCC1RFV24PX' where id=93; -update noar ti set v1='NI8A2ZUGRMA1UG3K6IC036SQ8LCRHMQB83WKHTTELLFPES4LPHT6JLXRKN30OFSUQMM574L5UB4Q02MVD786BC3RIJ1MQVCTW0GOJSFOAZSYDJWASIHSM414RQJQ6VVVVUIRAWJSGMKPN0P848MR3BLIWVCUE1DNDO2PXUKNWQYQG2KQ0EKZCYSDYRYSS2SXYSTDO471SQF93XYOXTV453HYONU7YVFHWWC3CD2M3WD7NR0P3HQH6STCC1RFV24PX' where id=93; -update noar tt set v2='DPB3F7N6LDXWNRN56ZS9VR5STMD2ZHULKMRNRWGQAW3S3AS1LZX6TUHHH54342YFUFU4IQ34O7FYFWDMF8KY5QD08XD4WO8TP5DRAVOHEXQ5I47L6CIG2W9PZNS7H2T1Y8J6IWGJQGBHVOTF6GHN3X7OWGVEXQZT74T05231P6YDNTSACUFERNGP2JCZ4TT2G0BTM7000UPIXW96B9I5ZTGQZRKHU8LPC49UWFH0GVM2I4NBHXWNFM3SIIZED8B5J' where id=93; -update noar ti set v2='DPB3F7N6LDXWNRN56ZS9VR5STMD2ZHULKMRNRWGQAW3S3AS1LZX6TUHHH54342YFUFU4IQ34O7FYFWDMF8KY5QD08XD4WO8TP5DRAVOHEXQ5I47L6CIG2W9PZNS7H2T1Y8J6IWGJQGBHVOTF6GHN3X7OWGVEXQZT74T05231P6YDNTSACUFERNGP2JCZ4TT2G0BTM7000UPIXW96B9I5ZTGQZRKHU8LPC49UWFH0GVM2I4NBHXWNFM3SIIZED8B5J' where id=93; -update noar tt set v3='MIQBKX7ELS237YC2M98LXMMLQDEVSWJR0DDHJFBQ4HFCWXBZAJSUKMLFHRH853EBQCZOVBKQT96SR5SNY94IMSRSJIGJH0IAJUHNLJ15PZILRX2PQ0HK8YKSPI32H8Q4Q0R5STBQ2NJB1OO6YXQHNZN26PMZQKIEOM38T623KNNW4S18YZ93C4YBNOOBR9VG2C2B5Z8FEUBGXCU2R9TM0TEDDH7MQ1EDFAA5KHO2KV96I8FQJZI2QC1ZH8ZG44USR' where id=93; -update noar ti set v3='MIQBKX7ELS237YC2M98LXMMLQDEVSWJR0DDHJFBQ4HFCWXBZAJSUKMLFHRH853EBQCZOVBKQT96SR5SNY94IMSRSJIGJH0IAJUHNLJ15PZILRX2PQ0HK8YKSPI32H8Q4Q0R5STBQ2NJB1OO6YXQHNZN26PMZQKIEOM38T623KNNW4S18YZ93C4YBNOOBR9VG2C2B5Z8FEUBGXCU2R9TM0TEDDH7MQ1EDFAA5KHO2KV96I8FQJZI2QC1ZH8ZG44USR' where id=93; -update noar tt set v0='BXSTQD4OXKGNOO4RO94ELJKW31RICSUJZW2AHBIYOC3NSL0LJHGYAGW358OWXVQMCMWX9Y14UGIKJL7SC42WMX9FCARJL39JG59FFUFXKMQKP4DNPSDN8Y0NPMDX93NSFGUEE99OUAJWV3NC1WL9G0TGJLD7WS3AA1APY9DT5UV0LTOC5M5TCTGORYNOM7Q0YFBVQ5BKWYC1TFQT8VN0F9QVF2EJQPS1DQW1GEVMCP7VEZ5K3AUPB0IK9GYX64ASG' where id=94; -update noar ti set v0='BXSTQD4OXKGNOO4RO94ELJKW31RICSUJZW2AHBIYOC3NSL0LJHGYAGW358OWXVQMCMWX9Y14UGIKJL7SC42WMX9FCARJL39JG59FFUFXKMQKP4DNPSDN8Y0NPMDX93NSFGUEE99OUAJWV3NC1WL9G0TGJLD7WS3AA1APY9DT5UV0LTOC5M5TCTGORYNOM7Q0YFBVQ5BKWYC1TFQT8VN0F9QVF2EJQPS1DQW1GEVMCP7VEZ5K3AUPB0IK9GYX64ASG' where id=94; -update noar tt set v1='FII52OV4TALWIPZ5GT7ONEQUI9RUXZASEPCIR5136AHM1T1GDB3L8OGDESTWRYOHJOLXLHKRTZ0MKQZ6Q90DD097161T0OGFXM2QAVS8KQG9JNDRBTW2QPV713KWRW0JFDDN2A5021O1ZUIH15WYC9X79KJD8RX5X72BNPOI8EDJUMB61IHOCIW6H1PW569F3B751YTHFM0ZITZTG079D0FALBNHRA5JNC7J1C62O3DK6PX633LM3RS4MO0PUZSRK' where id=94; -update noar ti set v1='FII52OV4TALWIPZ5GT7ONEQUI9RUXZASEPCIR5136AHM1T1GDB3L8OGDESTWRYOHJOLXLHKRTZ0MKQZ6Q90DD097161T0OGFXM2QAVS8KQG9JNDRBTW2QPV713KWRW0JFDDN2A5021O1ZUIH15WYC9X79KJD8RX5X72BNPOI8EDJUMB61IHOCIW6H1PW569F3B751YTHFM0ZITZTG079D0FALBNHRA5JNC7J1C62O3DK6PX633LM3RS4MO0PUZSRK' where id=94; -update noar tt set v2='GN624I010EQ4SAY5RJ6DFYMQ5KQ1P7G3Q7C05N4PL7WRGEKA1FEUCWWQA2TARB00S75C6UFAPGZ2H5DOHYV69UUYL0P13047M0JJ8E6TKALBWGM0USLCDK2LMLBB8OAEEV2QTBBHZHA6L4S7JV8VNMD5H7T5DTZJG5597F3TQHQEIQQC5XBEYDB3OCPJEKZFFAY6Q8UBWCUXXOR6G2WKXP7XN7KJFVY6WPG9IWUDT9PDDJB1B7KH367UT0BY8ZGP6' where id=94; -update noar ti set v2='GN624I010EQ4SAY5RJ6DFYMQ5KQ1P7G3Q7C05N4PL7WRGEKA1FEUCWWQA2TARB00S75C6UFAPGZ2H5DOHYV69UUYL0P13047M0JJ8E6TKALBWGM0USLCDK2LMLBB8OAEEV2QTBBHZHA6L4S7JV8VNMD5H7T5DTZJG5597F3TQHQEIQQC5XBEYDB3OCPJEKZFFAY6Q8UBWCUXXOR6G2WKXP7XN7KJFVY6WPG9IWUDT9PDDJB1B7KH367UT0BY8ZGP6' where id=94; -update noar tt set v3='FD4M8P78IKEG20ZDD8FOFUVUHPU9A450K8TUKKBML04GX4G2HQOMXHHJ55XAIGN3SC18JC0SG8V8GPZCPN84FRKPO4AGTWVYA8155W1EMD2IDJMRYS1UTHSJ7RVOEXHAEX8X7N7Y1PI0PC28D3F4KV8AX8AEFQT6Z2SRBRIMO3I540PYM2LTI6YWI5J9OZ02VZX6UW1MX3Z18S1RJXZMN4D1QFA2G8QIU6VRZFM7R95ZH7UPJLHYGZ157N5513OMB' where id=94; -update noar ti set v3='FD4M8P78IKEG20ZDD8FOFUVUHPU9A450K8TUKKBML04GX4G2HQOMXHHJ55XAIGN3SC18JC0SG8V8GPZCPN84FRKPO4AGTWVYA8155W1EMD2IDJMRYS1UTHSJ7RVOEXHAEX8X7N7Y1PI0PC28D3F4KV8AX8AEFQT6Z2SRBRIMO3I540PYM2LTI6YWI5J9OZ02VZX6UW1MX3Z18S1RJXZMN4D1QFA2G8QIU6VRZFM7R95ZH7UPJLHYGZ157N5513OMB' where id=94; -update noar tt set v0='0XROE5VBHWTIYZBM57KHFWK6RD4BWI5ED4GRPKD3VIR1BPYWZSSX2G6RZHI3D7664T03FT1F5TI42OSEMSD302YIX6O8S77NLYBJUB4KR1FXLDEV8I5VI9G10P7MPQ81K2ZYJG9YQ49FPU7VCEVWAKY2B96YDL50NHQCK61C98J8N9DWEVNOC34NNS2W2COINLWI03BEJHMWNL4Z839ON2MK1YMPMQKOTYC50YRCLF0G6PYTJHC90GH9P1Z3WT10T' where id=95; -update noar ti set v0='0XROE5VBHWTIYZBM57KHFWK6RD4BWI5ED4GRPKD3VIR1BPYWZSSX2G6RZHI3D7664T03FT1F5TI42OSEMSD302YIX6O8S77NLYBJUB4KR1FXLDEV8I5VI9G10P7MPQ81K2ZYJG9YQ49FPU7VCEVWAKY2B96YDL50NHQCK61C98J8N9DWEVNOC34NNS2W2COINLWI03BEJHMWNL4Z839ON2MK1YMPMQKOTYC50YRCLF0G6PYTJHC90GH9P1Z3WT10T' where id=95; -update noar tt set v1='L3RBAQC8WPF07BZ5GZRIGRQBZWOWY3PW8PDMBJKWLEEL5AVWMA4JL5X9TKM3RF0R3UFZSJD7VEJW12PXR1CNXXNYAHFIHYR4VLM0PE4CL2GC1O30IL363BYQVZMU6CW4FG38W4F6U2ZERSDD6Z8FIP4F5QWA139K4797GOY1NXKKDTYOZD0Q6CVHBUW7P13J56K69QEBQO3SP9N9AJ06IERWAH3RER9HYNAQDP8E3FLI4A6XDQ53CX3DDI9Z0Z56T' where id=95; -update noar ti set v1='L3RBAQC8WPF07BZ5GZRIGRQBZWOWY3PW8PDMBJKWLEEL5AVWMA4JL5X9TKM3RF0R3UFZSJD7VEJW12PXR1CNXXNYAHFIHYR4VLM0PE4CL2GC1O30IL363BYQVZMU6CW4FG38W4F6U2ZERSDD6Z8FIP4F5QWA139K4797GOY1NXKKDTYOZD0Q6CVHBUW7P13J56K69QEBQO3SP9N9AJ06IERWAH3RER9HYNAQDP8E3FLI4A6XDQ53CX3DDI9Z0Z56T' where id=95; -update noar tt set v2='AQ81O2S4REJQC4L0WV4D9YSN6MOZA60X0RCQGYJ6JR1KU5FSUXJYDKGVQ4H4E2MUUBPY4P5KNJSFGACEZT2ON3A4ZDHE2P687SOAAK3J3QAUZLNV6F3N3SDZXGWD93C7S9HTCWV7QZ5VR53K0SC6UVQR9R857U6XKDPZMCPNAJCCH9M6FVM4C6P73U7IJFX4P8GZQV3B64KY1GK8CUFPMS45LVMLCGOQ2BSEL2ATVXO18FKD9T3Y3ABNQ848DWAMX' where id=95; -update noar ti set v2='AQ81O2S4REJQC4L0WV4D9YSN6MOZA60X0RCQGYJ6JR1KU5FSUXJYDKGVQ4H4E2MUUBPY4P5KNJSFGACEZT2ON3A4ZDHE2P687SOAAK3J3QAUZLNV6F3N3SDZXGWD93C7S9HTCWV7QZ5VR53K0SC6UVQR9R857U6XKDPZMCPNAJCCH9M6FVM4C6P73U7IJFX4P8GZQV3B64KY1GK8CUFPMS45LVMLCGOQ2BSEL2ATVXO18FKD9T3Y3ABNQ848DWAMX' where id=95; -update noar tt set v3='QZY4PIYS1TFSH4IU2SM8CMYF7BPT2GDWF3ELD5MNBAOSAN5PBKGA4OOZRHBI7RX7ZA1BVVI1KVYW4KNH6H0M5YPIULN06UZIO3W9KY2SJOOOBJ4SO8NV9V1OLFCRBJ0OSDHRIX3T3HEN17QSWVHKSS2AQYO91BOZI8IY8R8QTSYMZDKEDYY2WGHE35GXIY3FWE67RIDCDBNGQE2HCJCPP0DF8ZK157C5TMK9C7EMFK6DW4YYYRXDA4CZNVWM8HS7R' where id=95; -update noar ti set v3='QZY4PIYS1TFSH4IU2SM8CMYF7BPT2GDWF3ELD5MNBAOSAN5PBKGA4OOZRHBI7RX7ZA1BVVI1KVYW4KNH6H0M5YPIULN06UZIO3W9KY2SJOOOBJ4SO8NV9V1OLFCRBJ0OSDHRIX3T3HEN17QSWVHKSS2AQYO91BOZI8IY8R8QTSYMZDKEDYY2WGHE35GXIY3FWE67RIDCDBNGQE2HCJCPP0DF8ZK157C5TMK9C7EMFK6DW4YYYRXDA4CZNVWM8HS7R' where id=95; -update noar tt set v0='IQNTGGRADUTD2YZMX6UO5Y5MG75AYWMJYT14V8JACENITUTWQ08P7PRZAK9HKFS9TH5MEB792FNKOGGB14URFX7PZVLOK0VIZS6KW0WT6QHNOJI7MBATHUQG7SO4LZ4FB174IP35E4UI59FTL7BZPCCBYQIGS5NJ7Y2UDD2NZ20DIW0NKFCBRH6QAPI0WHZ9B1AFV398T64CM3JJO4RBAUK2JSUVK1GUEE6BGMVWMWJF8A4DLNFRDJ2ZKO6FFAR1N' where id=96; -update noar ti set v0='IQNTGGRADUTD2YZMX6UO5Y5MG75AYWMJYT14V8JACENITUTWQ08P7PRZAK9HKFS9TH5MEB792FNKOGGB14URFX7PZVLOK0VIZS6KW0WT6QHNOJI7MBATHUQG7SO4LZ4FB174IP35E4UI59FTL7BZPCCBYQIGS5NJ7Y2UDD2NZ20DIW0NKFCBRH6QAPI0WHZ9B1AFV398T64CM3JJO4RBAUK2JSUVK1GUEE6BGMVWMWJF8A4DLNFRDJ2ZKO6FFAR1N' where id=96; -update noar tt set v1='IOVZOSB1FQBQKSP0I5CPH8KQL2Q8JFCX2BUKXJJ9ZEQQ9LWG7NFDY7USIT0RJGMQ85HJ5QA0WBZ1ESFXK83LFN8ZKZMSZXK099EILWLC83CIOEC986M1LHC00T9Q1B8SJAIZO8C96JEKUBXQA26FO5EEUIM7AEU68L0GPDXRMWDL85S1AYVY8UQTO216W1MTY95QHAVKPSSNU2YUEY9586QN8CHLJKMVHDXEQHF5IH2RGQCKXBL222SBT6GZO3XE7' where id=96; -update noar ti set v1='IOVZOSB1FQBQKSP0I5CPH8KQL2Q8JFCX2BUKXJJ9ZEQQ9LWG7NFDY7USIT0RJGMQ85HJ5QA0WBZ1ESFXK83LFN8ZKZMSZXK099EILWLC83CIOEC986M1LHC00T9Q1B8SJAIZO8C96JEKUBXQA26FO5EEUIM7AEU68L0GPDXRMWDL85S1AYVY8UQTO216W1MTY95QHAVKPSSNU2YUEY9586QN8CHLJKMVHDXEQHF5IH2RGQCKXBL222SBT6GZO3XE7' where id=96; -update noar tt set v2='WZW2UZT4T1OHXCLAPWVPOIIL6LQ9MCEFBDUD6F057EW1TTS74F4W31UV3M9GTZDHA975FPZUF4LQJVI9W1PO1VFXL4MSCD6SQH003CGN8HGTWXS4DLMIMJGNTDXLLPASKIXZN3AVN39KPF48V6PQOZOW7USRO2Z3RGBN89JQMHH7AI382XK7COKOI9ZWPEJR3DJ9W4KPSIA6DTWQYRJH991Z3FNCS5JK880IL5P8DA6IC8ULWFTZGQ7UZT3483XX0' where id=96; -update noar ti set v2='WZW2UZT4T1OHXCLAPWVPOIIL6LQ9MCEFBDUD6F057EW1TTS74F4W31UV3M9GTZDHA975FPZUF4LQJVI9W1PO1VFXL4MSCD6SQH003CGN8HGTWXS4DLMIMJGNTDXLLPASKIXZN3AVN39KPF48V6PQOZOW7USRO2Z3RGBN89JQMHH7AI382XK7COKOI9ZWPEJR3DJ9W4KPSIA6DTWQYRJH991Z3FNCS5JK880IL5P8DA6IC8ULWFTZGQ7UZT3483XX0' where id=96; -update noar tt set v3='W71DTVQ7AAPG8A48LYFDQ9CZ2F0QUQPDQHY6YCT6UZZ9KI3V72W4XRXVA6TP4TMNJUBLW8UA2BLHFOSEQ53PXHMXDOIDDO8G1ZIE5PBU61ZG3W28A9M6JETXY6PCBZ97N0UGCWKZKAIA38ZOD03CV9OL0WVQHNRE3H18M05N9S9SE53Y0T5MQIB702EVBKM4PR4VHHZ0XMEO3C68MN8EETBC33AT3NR26E332D0YVNXMUW8S6UD84RYT4TJSCIRVJ' where id=96; -update noar ti set v3='W71DTVQ7AAPG8A48LYFDQ9CZ2F0QUQPDQHY6YCT6UZZ9KI3V72W4XRXVA6TP4TMNJUBLW8UA2BLHFOSEQ53PXHMXDOIDDO8G1ZIE5PBU61ZG3W28A9M6JETXY6PCBZ97N0UGCWKZKAIA38ZOD03CV9OL0WVQHNRE3H18M05N9S9SE53Y0T5MQIB702EVBKM4PR4VHHZ0XMEO3C68MN8EETBC33AT3NR26E332D0YVNXMUW8S6UD84RYT4TJSCIRVJ' where id=96; -update noar tt set v0='EQQ7QU2WKRN0S69XW8ROIL27L0NYD1RCITRN1CU7YHRAZGJA3X6BC7VUNQN81DPK62R0R94FFWNYQS4EJQPOMSJ1Z6P7ZH1XB8N6QD8IYNEOWNA66T3DU424SEY7LK48XD9X03C8DYNCRRH9UJM5KNOA1JFDEPZVVVATYXBUQBOPDC65BTMUDMIMR4OJ64J4ERU4H4EE9RHBQG5Y4AUXRI6736QQ63DG1Q3ZKON5ISN5S94I48H48SALW5UAB3Q5J' where id=97; -update noar ti set v0='EQQ7QU2WKRN0S69XW8ROIL27L0NYD1RCITRN1CU7YHRAZGJA3X6BC7VUNQN81DPK62R0R94FFWNYQS4EJQPOMSJ1Z6P7ZH1XB8N6QD8IYNEOWNA66T3DU424SEY7LK48XD9X03C8DYNCRRH9UJM5KNOA1JFDEPZVVVATYXBUQBOPDC65BTMUDMIMR4OJ64J4ERU4H4EE9RHBQG5Y4AUXRI6736QQ63DG1Q3ZKON5ISN5S94I48H48SALW5UAB3Q5J' where id=97; -update noar tt set v1='EPINWAM58B1T15VZAOUMSX7T76A8OQJUDEVCZSRJAQQMF62RJI2ALMEY9ZT3YXLXG7MKNCDY57OX50SXN7AU3Q5C4E5CTSB3W84IRGEG3EERP7QOEM4RKYPFEAMZH1AOIMCCDRBTIX9QJ96J36OAQXE1RF6F49G70ADVWHZGGTPJWQ35UINBYWZ5PVMVPL7WGYHJP1FQ7MH4K82JWBKAAXVUAW56BH7MVWQYFXK2JTOM1X72F1X8FIVHGA84P7XFX' where id=97; -update noar ti set v1='EPINWAM58B1T15VZAOUMSX7T76A8OQJUDEVCZSRJAQQMF62RJI2ALMEY9ZT3YXLXG7MKNCDY57OX50SXN7AU3Q5C4E5CTSB3W84IRGEG3EERP7QOEM4RKYPFEAMZH1AOIMCCDRBTIX9QJ96J36OAQXE1RF6F49G70ADVWHZGGTPJWQ35UINBYWZ5PVMVPL7WGYHJP1FQ7MH4K82JWBKAAXVUAW56BH7MVWQYFXK2JTOM1X72F1X8FIVHGA84P7XFX' where id=97; -update noar tt set v2='PPBNZAYK39P1F1LVEBZARC5B4N4V75V8S38J9B32WLT1KR8NYIR80VIA15DZTH28PJ6J7MQX211112OA0PH7EL3LRQ3UOAJZOUILVLP81C0GT6XYKQAHZ00FU1LNHUXQJIY262VEDV4BBWKBOWCTGLT31AWKWO6OOVZ4FCHZIT75TIECH70D5MUWMIXJQ7BSUUI6FJN2823YEGKCZT24UEMSG458W5PR0Q47RHW9BZ2HVSQMW67B9SA8ALWOUA2RG' where id=97; -update noar ti set v2='PPBNZAYK39P1F1LVEBZARC5B4N4V75V8S38J9B32WLT1KR8NYIR80VIA15DZTH28PJ6J7MQX211112OA0PH7EL3LRQ3UOAJZOUILVLP81C0GT6XYKQAHZ00FU1LNHUXQJIY262VEDV4BBWKBOWCTGLT31AWKWO6OOVZ4FCHZIT75TIECH70D5MUWMIXJQ7BSUUI6FJN2823YEGKCZT24UEMSG458W5PR0Q47RHW9BZ2HVSQMW67B9SA8ALWOUA2RG' where id=97; -update noar tt set v3='DWYM1QY2KK4ZNVADX0CZE4CEUW13L45PV6UMAKCCD63Z19ZCNQ2ANTX33K9I8GNIMGBPZYT3HO9YWJVHZ5TOW8WRCE23HIDPNCLTKXZXQR2SHQ2SBEXVOLD5GIE97EVM4JC6KK1B01MXOFY41B947YJ3CJXDK0UWCLGYWTLHWSK9DUVTZLIXBWRTV48E5LAOSLIXCNNYB2W2XX3HPY45CXFDTBHFXUC6TGNAB4217EVPLXOM3DS2YMRVRP4HHZ498' where id=97; -update noar ti set v3='DWYM1QY2KK4ZNVADX0CZE4CEUW13L45PV6UMAKCCD63Z19ZCNQ2ANTX33K9I8GNIMGBPZYT3HO9YWJVHZ5TOW8WRCE23HIDPNCLTKXZXQR2SHQ2SBEXVOLD5GIE97EVM4JC6KK1B01MXOFY41B947YJ3CJXDK0UWCLGYWTLHWSK9DUVTZLIXBWRTV48E5LAOSLIXCNNYB2W2XX3HPY45CXFDTBHFXUC6TGNAB4217EVPLXOM3DS2YMRVRP4HHZ498' where id=97; -update noar tt set v0='6OX69SYHPIQGJ5WNI1GIH6Q6MIWQ3QL1F2XPR6KDK1TBT6RR4QAW5LEI4IUXBSZJ02PRXCS01YP0SHCYV3I9AUMZ41HE3QQ7VWBP5PLK8DOP2DSKND32VSC0YNH8PJ3DRUDO0BMUKNA22O8VPJIQTIYU03SOFEVPB3HUN7JICGNMD1F0S4M473DZIB2WZHGYGJ95AGRF82DMDOHRRCCI6R12XR19X801GXR1P49LN00LKP6YLWOVFQDV8SLLEB6WZ' where id=98; -update noar ti set v0='6OX69SYHPIQGJ5WNI1GIH6Q6MIWQ3QL1F2XPR6KDK1TBT6RR4QAW5LEI4IUXBSZJ02PRXCS01YP0SHCYV3I9AUMZ41HE3QQ7VWBP5PLK8DOP2DSKND32VSC0YNH8PJ3DRUDO0BMUKNA22O8VPJIQTIYU03SOFEVPB3HUN7JICGNMD1F0S4M473DZIB2WZHGYGJ95AGRF82DMDOHRRCCI6R12XR19X801GXR1P49LN00LKP6YLWOVFQDV8SLLEB6WZ' where id=98; -update noar tt set v1='OMETU5ZLOT7SAEVMZD3OFQC7GEJTGIMFP8BGWC8F6T4F7KNVC0DQG4UZ09PFLDX6ET0QYRWJ89R6GWA322TRMKH2LOA1IIV15NBTHYUM1QNNC11VE9ZEUGXOQYEBMKAWD5XBH18X8K3WWX73FNP7L6YE9RO0THJCHL5R1TG3O21TB3WDJQR4HWOP7QMTOTVHQYTSK97WN53REXZRQBPY7F6VMOQY31T3H34IUBCYVQN5Y8RNBRJSMAHLL5NW868MK' where id=98; -update noar ti set v1='OMETU5ZLOT7SAEVMZD3OFQC7GEJTGIMFP8BGWC8F6T4F7KNVC0DQG4UZ09PFLDX6ET0QYRWJ89R6GWA322TRMKH2LOA1IIV15NBTHYUM1QNNC11VE9ZEUGXOQYEBMKAWD5XBH18X8K3WWX73FNP7L6YE9RO0THJCHL5R1TG3O21TB3WDJQR4HWOP7QMTOTVHQYTSK97WN53REXZRQBPY7F6VMOQY31T3H34IUBCYVQN5Y8RNBRJSMAHLL5NW868MK' where id=98; -update noar tt set v2='EZ8ZDWSXIIVZ3R41UPLC80LGH6BVDI56P8276QMGKSJ6HZQ5JJXIEJHKB1K5OG5J1L7OXWCZVBTCX4RMQDTK3ZGWL6WFCMD0YX1M3GS8N53TN32126QJQJH2R5PCOITFTRVVNMDQUMZRE2T5J3X1R7AHLA47M5LHQ4PEOB9ZFJRXQVDIFZZS3FVW12EPN9U664JJJ1FKGSROJJLY1FOSJ3I7JGWFCFNDPBEVF5D9HUV11PGN8SLWPFD5KOXHHB7OW' where id=98; -update noar ti set v2='EZ8ZDWSXIIVZ3R41UPLC80LGH6BVDI56P8276QMGKSJ6HZQ5JJXIEJHKB1K5OG5J1L7OXWCZVBTCX4RMQDTK3ZGWL6WFCMD0YX1M3GS8N53TN32126QJQJH2R5PCOITFTRVVNMDQUMZRE2T5J3X1R7AHLA47M5LHQ4PEOB9ZFJRXQVDIFZZS3FVW12EPN9U664JJJ1FKGSROJJLY1FOSJ3I7JGWFCFNDPBEVF5D9HUV11PGN8SLWPFD5KOXHHB7OW' where id=98; -update noar tt set v3='Y5GGZJ2QXMB5R0NP4D7TG248GQ1YOB2R7MJ637HVV6M6QSEMG3E0S5TK2VRTYS3H8ZNU0C59IY4CALDNX57C6VW8AEPSZ33BPCRYKBMPC1PFXE0SX4NHD8E3FQVHXJJ5OCK9A4WMNCW8IBRV7VWAYEW5NH4N1XCZ47U5C85WZ6JRA9FG8KAUO3F1K5GEPLEFQWI41HZVIDQKR93QBSR2RF9HGKLS3TW7AOUUBW8QO81YBOYLE48YVEX97NOPBOIL0' where id=98; -update noar ti set v3='Y5GGZJ2QXMB5R0NP4D7TG248GQ1YOB2R7MJ637HVV6M6QSEMG3E0S5TK2VRTYS3H8ZNU0C59IY4CALDNX57C6VW8AEPSZ33BPCRYKBMPC1PFXE0SX4NHD8E3FQVHXJJ5OCK9A4WMNCW8IBRV7VWAYEW5NH4N1XCZ47U5C85WZ6JRA9FG8KAUO3F1K5GEPLEFQWI41HZVIDQKR93QBSR2RF9HGKLS3TW7AOUUBW8QO81YBOYLE48YVEX97NOPBOIL0' where id=98; -update noar tt set v0='5HY6NJLDSBZZOYZWZ8Y4KTFQ7PVXI6759G5WN3KERA17M6DJMSQISJCRRK34CIXOWIWA2622J2DDAJJHO2ZNUZDUMXVPD6XNMEEZBHVI3OUO09OZY2V3I61RSBZXGBL2YO6IMHKWHIKGD6QXOWSA6G6NAFTGR651YPX8HMQY7FIHERVNAGO9UDS3V06UIYJNY8QPZX0878TEIGJ4ASMZ1GV0MW5L0FHNXEYLWCYS3RT6X5QE2SB16TOFFRX1GEF2B' where id=99; -update noar ti set v0='5HY6NJLDSBZZOYZWZ8Y4KTFQ7PVXI6759G5WN3KERA17M6DJMSQISJCRRK34CIXOWIWA2622J2DDAJJHO2ZNUZDUMXVPD6XNMEEZBHVI3OUO09OZY2V3I61RSBZXGBL2YO6IMHKWHIKGD6QXOWSA6G6NAFTGR651YPX8HMQY7FIHERVNAGO9UDS3V06UIYJNY8QPZX0878TEIGJ4ASMZ1GV0MW5L0FHNXEYLWCYS3RT6X5QE2SB16TOFFRX1GEF2B' where id=99; -update noar tt set v1='T4HGGT928YXUXK5JFRSZVC010NU1WUSBU8BSJSP2CL9JHQK3WX03T0VH6R7V2EPPW5FY44BPELIBZHCD4O4E5TKA9NL10D8ZDNVFDQL97INZHH4LJ6A0OHQ8WXLC5VGRFJP1Z49SRAQC5G3SI5SKWQU03FL12ZAFUINI1WF4LGYW06OWSTK6Z79MNIEQSF770Z6L42OKPTKG49VTFSQADBBEPF1O2HM1SKM5NU5FGGJ8SZJ7N3ASLWX7WXWELLLTQ' where id=99; -update noar ti set v1='T4HGGT928YXUXK5JFRSZVC010NU1WUSBU8BSJSP2CL9JHQK3WX03T0VH6R7V2EPPW5FY44BPELIBZHCD4O4E5TKA9NL10D8ZDNVFDQL97INZHH4LJ6A0OHQ8WXLC5VGRFJP1Z49SRAQC5G3SI5SKWQU03FL12ZAFUINI1WF4LGYW06OWSTK6Z79MNIEQSF770Z6L42OKPTKG49VTFSQADBBEPF1O2HM1SKM5NU5FGGJ8SZJ7N3ASLWX7WXWELLLTQ' where id=99; -update noar tt set v2='AAD2T24WXCYCSUJK3U748EJFRUU6SYRJIL25YIKIFFMPK98R1KY4UZ09DI1T3I7M0HH0THN46E4RAX1CWAZJ31AAHCQAYWRYIEJ763CTWOU3PI5FC5EKIEEEK2RQNY75JVB68U46K7HAQP6QUBHP5O3A4SW8VNIF7M9UNGRRCP4D1WIAG39BY2P4OWCMDCATFCU3G976SCJXX0ZY8DTYWEWYFTQMA53XZGFO5W477IDQAMJED80RZWEG5IRBJKO07' where id=99; -update noar ti set v2='AAD2T24WXCYCSUJK3U748EJFRUU6SYRJIL25YIKIFFMPK98R1KY4UZ09DI1T3I7M0HH0THN46E4RAX1CWAZJ31AAHCQAYWRYIEJ763CTWOU3PI5FC5EKIEEEK2RQNY75JVB68U46K7HAQP6QUBHP5O3A4SW8VNIF7M9UNGRRCP4D1WIAG39BY2P4OWCMDCATFCU3G976SCJXX0ZY8DTYWEWYFTQMA53XZGFO5W477IDQAMJED80RZWEG5IRBJKO07' where id=99; -update noar tt set v3='088C17CAB877RRXLZQAN3GCERG21GT9XDZNLW18J01ARBZOL74W52UBX83O6G6G98XS03MBPQIO7S774BQMBCAW9HLP8T9X81EWDPKM6CM9N0YQLXZP0D3UTV8PCD9CBH0VLEWQWPNUHO0L9B8Y7Z4EHWOBVGLKWPO539WYWXRX3OL0W47CV40L5QYFKCWKAOU78Y274ZJ9GVUD6WDHF7R8ZC11BUS9DH21HD9TGTVDSAJW3YKVTQ7LRT8552YF7H' where id=99; -update noar ti set v3='088C17CAB877RRXLZQAN3GCERG21GT9XDZNLW18J01ARBZOL74W52UBX83O6G6G98XS03MBPQIO7S774BQMBCAW9HLP8T9X81EWDPKM6CM9N0YQLXZP0D3UTV8PCD9CBH0VLEWQWPNUHO0L9B8Y7Z4EHWOBVGLKWPO539WYWXRX3OL0W47CV40L5QYFKCWKAOU78Y274ZJ9GVUD6WDHF7R8ZC11BUS9DH21HD9TGTVDSAJW3YKVTQ7LRT8552YF7H' where id=99; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt (id bigint unsigned primary key, - f0 int not null, - v0 varbinary(256) not null, - v1 varbinary(256) not null, - v2 varbinary(256) not null, - v3 varbinary(256) not null, - b0 text not null -) engine=tokudb; -insert into tt values (1,2,'a','b','c','d','e'); -insert into tt values (2,3,'','','','',''); -insert into tt values (3,4,'','','','',''); -insert into tt values (4,5,'','','','',''); -insert into tt values (5,6,'','','','',''); -insert into tt values (6,7,'','','','',''); -insert into tt values (7,8,'','','','',''); -insert into tt values (8,9,'','','','',''); -insert into tt values (9,10,'','','','',''); -insert into tt values (10,11,'','','','',''); -insert into tt values (11,12,'','','','',''); -insert into tt values (12,13,'','','','',''); -insert into tt values (13,14,'','','','',''); -insert into tt values (14,15,'','','','',''); -insert into tt values (15,16,'','','','',''); -insert into tt values (16,17,'','','','',''); -insert into tt values (17,18,'','','','',''); -insert into tt values (18,19,'','','','',''); -insert into tt values (19,20,'','','','',''); -insert into tt values (20,21,'','','','',''); -insert into tt values (21,22,'','','','',''); -insert into tt values (22,23,'','','','',''); -insert into tt values (23,24,'','','','',''); -insert into tt values (24,25,'','','','',''); -insert into tt values (25,26,'','','','',''); -insert into tt values (26,27,'','','','',''); -insert into tt values (27,28,'','','','',''); -insert into tt values (28,29,'','','','',''); -insert into tt values (29,30,'','','','',''); -insert into tt values (30,31,'','','','',''); -insert into tt values (31,32,'','','','',''); -insert into tt values (32,33,'','','','',''); -insert into tt values (33,34,'','','','',''); -insert into tt values (34,35,'','','','',''); -insert into tt values (35,36,'','','','',''); -insert into tt values (36,37,'','','','',''); -insert into tt values (37,38,'','','','',''); -insert into tt values (38,39,'','','','',''); -insert into tt values (39,40,'','','','',''); -insert into tt values (40,41,'','','','',''); -insert into tt values (41,42,'','','','',''); -insert into tt values (42,43,'','','','',''); -insert into tt values (43,44,'','','','',''); -insert into tt values (44,45,'','','','',''); -insert into tt values (45,46,'','','','',''); -insert into tt values (46,47,'','','','',''); -insert into tt values (47,48,'','','','',''); -insert into tt values (48,49,'','','','',''); -insert into tt values (49,50,'','','','',''); -insert into tt values (50,51,'','','','',''); -insert into tt values (51,52,'','','','',''); -insert into tt values (52,53,'','','','',''); -insert into tt values (53,54,'','','','',''); -insert into tt values (54,55,'','','','',''); -insert into tt values (55,56,'','','','',''); -insert into tt values (56,57,'','','','',''); -insert into tt values (57,58,'','','','',''); -insert into tt values (58,59,'','','','',''); -insert into tt values (59,60,'','','','',''); -insert into tt values (60,61,'','','','',''); -insert into tt values (61,62,'','','','',''); -insert into tt values (62,63,'','','','',''); -insert into tt values (63,64,'','','','',''); -insert into tt values (64,65,'','','','',''); -insert into tt values (65,66,'','','','',''); -insert into tt values (66,67,'','','','',''); -insert into tt values (67,68,'','','','',''); -insert into tt values (68,69,'','','','',''); -insert into tt values (69,70,'','','','',''); -insert into tt values (70,71,'','','','',''); -insert into tt values (71,72,'','','','',''); -insert into tt values (72,73,'','','','',''); -insert into tt values (73,74,'','','','',''); -insert into tt values (74,75,'','','','',''); -insert into tt values (75,76,'','','','',''); -insert into tt values (76,77,'','','','',''); -insert into tt values (77,78,'','','','',''); -insert into tt values (78,79,'','','','',''); -insert into tt values (79,80,'','','','',''); -insert into tt values (80,81,'','','','',''); -insert into tt values (81,82,'','','','',''); -insert into tt values (82,83,'','','','',''); -insert into tt values (83,84,'','','','',''); -insert into tt values (84,85,'','','','',''); -insert into tt values (85,86,'','','','',''); -insert into tt values (86,87,'','','','',''); -insert into tt values (87,88,'','','','',''); -insert into tt values (88,89,'','','','',''); -insert into tt values (89,90,'','','','',''); -insert into tt values (90,91,'','','','',''); -insert into tt values (91,92,'','','','',''); -insert into tt values (92,93,'','','','',''); -insert into tt values (93,94,'','','','',''); -insert into tt values (94,95,'','','','',''); -insert into tt values (95,96,'','','','',''); -insert into tt values (96,97,'','','','',''); -insert into tt values (97,98,'','','','',''); -insert into tt values (98,99,'','','','',''); -insert into tt values (99,100,'','','','',''); -create table ti like tt; -alter table ti engine=innodb; -insert into ti select * from tt; -update noar tt set v0='null this 0' where id=0; -update noar ti set v0='null this 0' where id=0; -update noar tt set v1='null is 1' where id=0; -update noar ti set v1='null is 1' where id=0; -update noar tt set v2='null a 2' where id=0; -update noar ti set v2='null a 2' where id=0; -update noar tt set v3='null test 3' where id=0; -update noar ti set v3='null test 3' where id=0; -update noar tt set v0='this 0' where id=1; -update noar ti set v0='this 0' where id=1; -update noar tt set v1='is 1' where id=1; -update noar ti set v1='is 1' where id=1; -update noar tt set v2='another 2' where id=1; -update noar ti set v2='another 2' where id=1; -update noar tt set v3='test 3' where id=1; -update noar ti set v3='test 3' where id=1; -update noar tt set v0='HXQARM7X1ZS6SRO83LVDNWF5OCL7F92VRP8L9J740BWJDF3BXC6MT2X6OQQGVEQ37LEX0RNL77GO7CZ5VZNDKUAALOY03UOEXCT897YJXN8IRV264SXJK9RXT5QL3FOZMRTQ8K5BGWAHFI8YX4I8MGBASVYC7ZRPXFAV4TGKY3ZYP6NCNTM515ZSEKVU7UMW4NMK1BYERGJOD8W0ZS45NTEYG0C9E1MTQYMQHV11RI8N4PBGOBDUQHOZEKBKUTETC' where id=2; -update noar ti set v0='HXQARM7X1ZS6SRO83LVDNWF5OCL7F92VRP8L9J740BWJDF3BXC6MT2X6OQQGVEQ37LEX0RNL77GO7CZ5VZNDKUAALOY03UOEXCT897YJXN8IRV264SXJK9RXT5QL3FOZMRTQ8K5BGWAHFI8YX4I8MGBASVYC7ZRPXFAV4TGKY3ZYP6NCNTM515ZSEKVU7UMW4NMK1BYERGJOD8W0ZS45NTEYG0C9E1MTQYMQHV11RI8N4PBGOBDUQHOZEKBKUTETC' where id=2; -update noar tt set v1='CP94ISC8FR6RF5QXJOUJSFNRUSLE1X4B9IPKTO5QSB8LTILPZC4MWZ134IAYHFQSD1VQ3DO4B129LD9QIF7OQQIC2YYW5ZJTOTB4S7OX2JMUQ97RLZFO7VNFTL6PB22QBNCCHV806V6QUOQGBIA4QPVJB0EYZ60TPT2Z5GXLAUUJ5J2D51WOJN8BRE8PG8KJ992CBN3ZL32OATOHF14YRYCPMED1YTOUO3RDPSQ7KCAA21FLL64BPRCADHQ8SUBJF' where id=2; -update noar ti set v1='CP94ISC8FR6RF5QXJOUJSFNRUSLE1X4B9IPKTO5QSB8LTILPZC4MWZ134IAYHFQSD1VQ3DO4B129LD9QIF7OQQIC2YYW5ZJTOTB4S7OX2JMUQ97RLZFO7VNFTL6PB22QBNCCHV806V6QUOQGBIA4QPVJB0EYZ60TPT2Z5GXLAUUJ5J2D51WOJN8BRE8PG8KJ992CBN3ZL32OATOHF14YRYCPMED1YTOUO3RDPSQ7KCAA21FLL64BPRCADHQ8SUBJF' where id=2; -update noar tt set v2='9H141GVH408C2JXFI7SYSLBZ9JS65H12XH7A986LETBIQLOYYVE1F6HMBGS60CW0RQF6SDML1IH139NDHITI9403OLOHWTR18QFBXIGIWA5UVVLBRE0ZYQEPI0PI4MBY3S9D6CS4E804RM406ZDY66ZL7UWIE4NGBVX8ITNQ83AJ93PRF45675HO5Z5QBPD1AH02Z9KUS56DKUASNZAVG2DCRN7MBIIP0SOF4VUOG7HGTP9P1KRQ8HD5C4NGBGI6A' where id=2; -update noar ti set v2='9H141GVH408C2JXFI7SYSLBZ9JS65H12XH7A986LETBIQLOYYVE1F6HMBGS60CW0RQF6SDML1IH139NDHITI9403OLOHWTR18QFBXIGIWA5UVVLBRE0ZYQEPI0PI4MBY3S9D6CS4E804RM406ZDY66ZL7UWIE4NGBVX8ITNQ83AJ93PRF45675HO5Z5QBPD1AH02Z9KUS56DKUASNZAVG2DCRN7MBIIP0SOF4VUOG7HGTP9P1KRQ8HD5C4NGBGI6A' where id=2; -update noar tt set v3='2XH2XO870O3Z97MBUK92L2QQMPCNUAJHTYFVO2Y33A7VJUMACBMPXZ6OMHMKVGBXYAHC5B2K13EYC834FCNTR9INOV0HX3A4YO131XLADU70KVVIQQ7LJV4J82TSQ91XTJ8LDH6APZDHI813OAAUMNJLNUW8626TKFSU3ZLNLMV7PAZM6397EQG89OON7VJN4LM4ACB2C695IG1NSVBYVKOTMTSR22YB29YYHKWIHQMC7CH7F81JF9E35DF1G7KPL' where id=2; -update noar ti set v3='2XH2XO870O3Z97MBUK92L2QQMPCNUAJHTYFVO2Y33A7VJUMACBMPXZ6OMHMKVGBXYAHC5B2K13EYC834FCNTR9INOV0HX3A4YO131XLADU70KVVIQQ7LJV4J82TSQ91XTJ8LDH6APZDHI813OAAUMNJLNUW8626TKFSU3ZLNLMV7PAZM6397EQG89OON7VJN4LM4ACB2C695IG1NSVBYVKOTMTSR22YB29YYHKWIHQMC7CH7F81JF9E35DF1G7KPL' where id=2; -update noar tt set v0='440DIBISFADWRW2V3COGT5VTLA5G71PWSJMN8ZTRVA11E3WNW5JHTKIXEOH56NAWZS1ZTOQ1ZV3ONKSQ639IR92AS2U1YIRHMOW5AM6GB0BNUU5JPWX3O1X7WEY3ZWE16KH4G20JLW0L4QEYXORPKD3U6T8B4DEY1WUIKKKKFZ8XYM87WKTL63E4UVIF7123Q6IEY9ASFBISM2AHTL4KGHRLO3J2NZ3YBEJNDSKGCD6ME52JMNAKHGE2ZUVTTZMGV' where id=3; -update noar ti set v0='440DIBISFADWRW2V3COGT5VTLA5G71PWSJMN8ZTRVA11E3WNW5JHTKIXEOH56NAWZS1ZTOQ1ZV3ONKSQ639IR92AS2U1YIRHMOW5AM6GB0BNUU5JPWX3O1X7WEY3ZWE16KH4G20JLW0L4QEYXORPKD3U6T8B4DEY1WUIKKKKFZ8XYM87WKTL63E4UVIF7123Q6IEY9ASFBISM2AHTL4KGHRLO3J2NZ3YBEJNDSKGCD6ME52JMNAKHGE2ZUVTTZMGV' where id=3; -update noar tt set v1='7MUG6Q7UT4GXZZVO2WG0IJ18CJI5ZXI93V88HP70410KNM6B3AJOCAEYMSRZTIU4JZJU6HIOYO13FHDWS57BR7N88M2K1ROADIR0ZKHNHFW5473RVQ3DLLHEG0B9JOEVUB8J4G0NQKZVS5XWV5JN4LOXMMMPEKYEB3FEKKLO04CPE4CW5C2A7CBDYIMYLTCM9PF8U3RLLCNAQ8M6B265LD91XNH0BRRYVKQTUCFZ4NHJGFDHBB9034L78DZFGSCY9' where id=3; -update noar ti set v1='7MUG6Q7UT4GXZZVO2WG0IJ18CJI5ZXI93V88HP70410KNM6B3AJOCAEYMSRZTIU4JZJU6HIOYO13FHDWS57BR7N88M2K1ROADIR0ZKHNHFW5473RVQ3DLLHEG0B9JOEVUB8J4G0NQKZVS5XWV5JN4LOXMMMPEKYEB3FEKKLO04CPE4CW5C2A7CBDYIMYLTCM9PF8U3RLLCNAQ8M6B265LD91XNH0BRRYVKQTUCFZ4NHJGFDHBB9034L78DZFGSCY9' where id=3; -update noar tt set v2='6I01XADNR08W7F9B89LQWI6VQR7KNH7ZGX44Z1NF2Y5A78VFLY24VMCTYSLAC9YS7TLJ56CC3MIIS01ARE9DT8JGJKD58VREHXMNRMF9YC5JNQTOR2PIHL7WTMEYJ3VH09R9DETE1UCXSK2K3ZCCXZ8D44D9XV9VIVNOHHSW10XU8QVLVY21GUJFYHYBJBTOF7PKDGTYXR6VQ0AA18BIB4NEPBW34JHWCR3C6JE0W2G5QIV7LNBN26BDCYRD7S4T9' where id=3; -update noar ti set v2='6I01XADNR08W7F9B89LQWI6VQR7KNH7ZGX44Z1NF2Y5A78VFLY24VMCTYSLAC9YS7TLJ56CC3MIIS01ARE9DT8JGJKD58VREHXMNRMF9YC5JNQTOR2PIHL7WTMEYJ3VH09R9DETE1UCXSK2K3ZCCXZ8D44D9XV9VIVNOHHSW10XU8QVLVY21GUJFYHYBJBTOF7PKDGTYXR6VQ0AA18BIB4NEPBW34JHWCR3C6JE0W2G5QIV7LNBN26BDCYRD7S4T9' where id=3; -update noar tt set v3='BMJJUN9V7HS8SWT4F2MCPZB7FE6KDUKUU43IRNU2DOJXPX58YNNHER1B4DQ41SEET9LVD4WVX9IJNWBZBDT1VKS7049QASQ15IAZ0DXFKO93XW1XWXG1GCYN1HONDSQ4PP3LIU8WAFLA9RM8TYBB8LQ0D819R5BPX11M1Y816SGSLCVZGGXZY75Z7KKOF3KFQBNJZB06CUBM4CQ8M0X9G5YEGGS682UE5G52DWW1HM19VGVQEO9DX5APMHUPUK0OK' where id=3; -update noar ti set v3='BMJJUN9V7HS8SWT4F2MCPZB7FE6KDUKUU43IRNU2DOJXPX58YNNHER1B4DQ41SEET9LVD4WVX9IJNWBZBDT1VKS7049QASQ15IAZ0DXFKO93XW1XWXG1GCYN1HONDSQ4PP3LIU8WAFLA9RM8TYBB8LQ0D819R5BPX11M1Y816SGSLCVZGGXZY75Z7KKOF3KFQBNJZB06CUBM4CQ8M0X9G5YEGGS682UE5G52DWW1HM19VGVQEO9DX5APMHUPUK0OK' where id=3; -update noar tt set v0='ZJXWEASEZMXD3BNOHGPMVXP8EH5JMP79HUEIJWCARE5F3G8ISCRHMGZWCKA971FRH2Q5NTBML46F61J8YBBEDME6X3BY3GLL6E8BLESNS700WFO2VO7R0BK5E99DMRG4BQHD4MDD4T4Z1E69TUYOZ5QXP0JHHDTUEPDD719JWX4HBHCFUIBXAYMPXA5E91GKNH5639U1QGM7LP29L0W2WAUHVH9I7O6RUL3WGVV22OV7HZK1IQKIDBOGGM8ZI8TKV' where id=4; -update noar ti set v0='ZJXWEASEZMXD3BNOHGPMVXP8EH5JMP79HUEIJWCARE5F3G8ISCRHMGZWCKA971FRH2Q5NTBML46F61J8YBBEDME6X3BY3GLL6E8BLESNS700WFO2VO7R0BK5E99DMRG4BQHD4MDD4T4Z1E69TUYOZ5QXP0JHHDTUEPDD719JWX4HBHCFUIBXAYMPXA5E91GKNH5639U1QGM7LP29L0W2WAUHVH9I7O6RUL3WGVV22OV7HZK1IQKIDBOGGM8ZI8TKV' where id=4; -update noar tt set v1='8D3PKJ4BICVJKSPJJ1ZS3MG8F17FLFGDV8BL4TJ1ZQ8DENW8A2TOJT3AGGOM2FPMP8KWLA7R8SH35DYX7BFKLV9TL7H62FV7VA49JGT8ICPH9LAO65JCSVXRJWBE09222MJRFZDIB9934SGXXT005DW1HCKK3IGPNBF83DLK0EET77YAF7WFUK98NY0THDUQ5CDJ5WE14PKKH54FXDYOR6MXL87VD8LRRLX9AEPG5Z2E06B9E88X3SMF6WIQ4FJMK' where id=4; -update noar ti set v1='8D3PKJ4BICVJKSPJJ1ZS3MG8F17FLFGDV8BL4TJ1ZQ8DENW8A2TOJT3AGGOM2FPMP8KWLA7R8SH35DYX7BFKLV9TL7H62FV7VA49JGT8ICPH9LAO65JCSVXRJWBE09222MJRFZDIB9934SGXXT005DW1HCKK3IGPNBF83DLK0EET77YAF7WFUK98NY0THDUQ5CDJ5WE14PKKH54FXDYOR6MXL87VD8LRRLX9AEPG5Z2E06B9E88X3SMF6WIQ4FJMK' where id=4; -update noar tt set v2='GJGBSMJO675H8X1HCMZZ0P1D49AMK7PZRP4U6FAWAQ1BT0US9431CB351VUNTQEJ06ZQ375341MWEDPTQJ9M6S53ZBZEG1VZ3OO8U09FYUE4KBPW5DTN1HNX3FHEX12RPA5C6QEY83FK1ZJ9FH2YZDZF23SXI2YC4128Z4PR242IJZ9G8NJB25O1YJUCSOQ0DTUL76GSF0SUQLU6KF8YU2LJDIBNS5YO4FBPJXL7GXNNZYWGWCG4QICSB4XY1J6CN' where id=4; -update noar ti set v2='GJGBSMJO675H8X1HCMZZ0P1D49AMK7PZRP4U6FAWAQ1BT0US9431CB351VUNTQEJ06ZQ375341MWEDPTQJ9M6S53ZBZEG1VZ3OO8U09FYUE4KBPW5DTN1HNX3FHEX12RPA5C6QEY83FK1ZJ9FH2YZDZF23SXI2YC4128Z4PR242IJZ9G8NJB25O1YJUCSOQ0DTUL76GSF0SUQLU6KF8YU2LJDIBNS5YO4FBPJXL7GXNNZYWGWCG4QICSB4XY1J6CN' where id=4; -update noar tt set v3='IIWFVUF80WOR7ZIJHQFWVWKSP210DGF7P9JLEXHNPPSY7K8J6GMYJXYSFBK27207QA5RTBEWE6J0F9SL1S8A5R7VM0GW6VWIRL0JPRMG56MAM3H910Y3KAUN72F7KKRONLYH2LU7PHR41MQIVE573T1TCGKEV0NNSTY67KV63T0U3EKYTLZ0CXZCOAYTB409Y5FY632FRFDDKJFSDQHF0W8X32ESCPS9MPLV65TKYP0MCVWGCRCF9WTJY6NXUK4W6' where id=4; -update noar ti set v3='IIWFVUF80WOR7ZIJHQFWVWKSP210DGF7P9JLEXHNPPSY7K8J6GMYJXYSFBK27207QA5RTBEWE6J0F9SL1S8A5R7VM0GW6VWIRL0JPRMG56MAM3H910Y3KAUN72F7KKRONLYH2LU7PHR41MQIVE573T1TCGKEV0NNSTY67KV63T0U3EKYTLZ0CXZCOAYTB409Y5FY632FRFDDKJFSDQHF0W8X32ESCPS9MPLV65TKYP0MCVWGCRCF9WTJY6NXUK4W6' where id=4; -update noar tt set v0='T3SGM9F0HHF9TGA5VIUUNYEDLWWGZ2UJDS02T2IU4MNLP81JFV0TAQPU27LF5N9YH9UYI7ISEO4RAVTJG31RTI3UU1PQP4920TJ53U8NDXURZZU6UU6M9JGGGPEAB4NDXLBBMI9LF74E8FHYVRYAKFAYIKEOPRSLNUI06TFY46CLZPLAXLJ07OT9TV9HV5SO9F5LNK9QPA6ZAK3TNBI6OBE0VSHPP14SGUJTCBKKLQUT76MQV0U95OX0MEDJ8SIOG' where id=5; -update noar ti set v0='T3SGM9F0HHF9TGA5VIUUNYEDLWWGZ2UJDS02T2IU4MNLP81JFV0TAQPU27LF5N9YH9UYI7ISEO4RAVTJG31RTI3UU1PQP4920TJ53U8NDXURZZU6UU6M9JGGGPEAB4NDXLBBMI9LF74E8FHYVRYAKFAYIKEOPRSLNUI06TFY46CLZPLAXLJ07OT9TV9HV5SO9F5LNK9QPA6ZAK3TNBI6OBE0VSHPP14SGUJTCBKKLQUT76MQV0U95OX0MEDJ8SIOG' where id=5; -update noar tt set v1='77BFM7WKREFSTQ19XJ8RYLNTVFNAXE4DBHMNJ1W9LKXU9GYDDJOFTAXI8JBFOGCV5XIDY544C85K87Q04JR8X84J7N6NW8X4V4HA7MKDVBAGHFYPPY529I92ZLZAIRUYB7R37SUAZQSKPFZEGNWH5KCTJIY003MGLZST7FVF0O8M20YBA15AHI3VQV34KH17DI2T1ILUH41ZNUFMBTBIFAN7ZKQRBTTCW99XTLFWO8DFTVIIIDH49HTTMQ3QRX9Z1' where id=5; -update noar ti set v1='77BFM7WKREFSTQ19XJ8RYLNTVFNAXE4DBHMNJ1W9LKXU9GYDDJOFTAXI8JBFOGCV5XIDY544C85K87Q04JR8X84J7N6NW8X4V4HA7MKDVBAGHFYPPY529I92ZLZAIRUYB7R37SUAZQSKPFZEGNWH5KCTJIY003MGLZST7FVF0O8M20YBA15AHI3VQV34KH17DI2T1ILUH41ZNUFMBTBIFAN7ZKQRBTTCW99XTLFWO8DFTVIIIDH49HTTMQ3QRX9Z1' where id=5; -update noar tt set v2='9E4SU4R7VEHMPWNC6JEG4LHP4RC918X3O0IAX76AKV2RDLQ28TS71CUD2AYWUP2MGXQN44DFVDQ9DKQX87BM01LPZALOO6U3ZO5DU0L14CJO3CD5OGYUDIP2JR88VOEWDEKZ9PQYP8ADQ0KVCKT9XIO3N7O7VAXTOR9QQW5D5JTKI6P0VYIWKU8KP41ZUM7OD0JCAQSU7LIA8DPWKOYOT3VC3X90ZV1Q1Y6XQ5TDRG4DP86P1XHM5QA3R73ZRFSMU' where id=5; -update noar ti set v2='9E4SU4R7VEHMPWNC6JEG4LHP4RC918X3O0IAX76AKV2RDLQ28TS71CUD2AYWUP2MGXQN44DFVDQ9DKQX87BM01LPZALOO6U3ZO5DU0L14CJO3CD5OGYUDIP2JR88VOEWDEKZ9PQYP8ADQ0KVCKT9XIO3N7O7VAXTOR9QQW5D5JTKI6P0VYIWKU8KP41ZUM7OD0JCAQSU7LIA8DPWKOYOT3VC3X90ZV1Q1Y6XQ5TDRG4DP86P1XHM5QA3R73ZRFSMU' where id=5; -update noar tt set v3='459LKZ51NEUVZ5TRZ8KD6RG9Y9EEAXUD8ZEJWXLYZQOWYQTY6KMOGQTN9FWIRM5TE3TOD63JJLZ7KIHQHO1ECT1HEY80KJZJLBR4XGL0OPHGEBZ5FFLQZ60E7PRFEFGLKJIN9HSLFYMQPD1MWBTXU8CS9BGUWT31DUZ5X7KCFZBT9VUGAYCTK6JWNP2E0WXWCY8UTO7LB9GT4D23ZT93XPWS3W9TQ8Y4JK8AIEECC349B56EAG2N8T2KWC4FOK5GB' where id=5; -update noar ti set v3='459LKZ51NEUVZ5TRZ8KD6RG9Y9EEAXUD8ZEJWXLYZQOWYQTY6KMOGQTN9FWIRM5TE3TOD63JJLZ7KIHQHO1ECT1HEY80KJZJLBR4XGL0OPHGEBZ5FFLQZ60E7PRFEFGLKJIN9HSLFYMQPD1MWBTXU8CS9BGUWT31DUZ5X7KCFZBT9VUGAYCTK6JWNP2E0WXWCY8UTO7LB9GT4D23ZT93XPWS3W9TQ8Y4JK8AIEECC349B56EAG2N8T2KWC4FOK5GB' where id=5; -update noar tt set v0='VM9LCXGPDS2BXF0QDUEYK8BDI0WCXBNJLN8HS15SY426N1DEMFTVI69I1IH4M7432ZWFR86PPXSFJOBONWCSG203EMC2OJHVJBY3XFHDY85MOIMZR7V3TMW1ZJMTKGWZ1NSK02A8BOZ7QGMTUABV1HTLM2THK3NMWHFMQLRZ6AGBAU511E5FAO5QXU960CPV6G2N5SNS6ATFTJCH1ZWQJ7S4JBJH8L8NBI80J1EUO4GKW4SAT5D3G5B470ED63GN7' where id=6; -update noar ti set v0='VM9LCXGPDS2BXF0QDUEYK8BDI0WCXBNJLN8HS15SY426N1DEMFTVI69I1IH4M7432ZWFR86PPXSFJOBONWCSG203EMC2OJHVJBY3XFHDY85MOIMZR7V3TMW1ZJMTKGWZ1NSK02A8BOZ7QGMTUABV1HTLM2THK3NMWHFMQLRZ6AGBAU511E5FAO5QXU960CPV6G2N5SNS6ATFTJCH1ZWQJ7S4JBJH8L8NBI80J1EUO4GKW4SAT5D3G5B470ED63GN7' where id=6; -update noar tt set v1='Q9K414ODT08291LVJP5NMUHGZKLTV6DY1WV5S9G89LNR9LB773ENYADVZQNFNFDI3S0PBPLZ3LQFDVWWL3DNB1XUEAYJYKW06VAAL12XF64MCGIFUITME3JCKMY1QUQ1GYXCUCK7NLQWD94CPB74F302O1YK5YZWNUT5ROU8ON6WIEN1AW5MQNYB91BODVM1AKP1TWWV75NXDLT0QNX38HEVYBYQOJL4PYO6SRCQXTWEEMB17A2OP6NXCU36F1CX5' where id=6; -update noar ti set v1='Q9K414ODT08291LVJP5NMUHGZKLTV6DY1WV5S9G89LNR9LB773ENYADVZQNFNFDI3S0PBPLZ3LQFDVWWL3DNB1XUEAYJYKW06VAAL12XF64MCGIFUITME3JCKMY1QUQ1GYXCUCK7NLQWD94CPB74F302O1YK5YZWNUT5ROU8ON6WIEN1AW5MQNYB91BODVM1AKP1TWWV75NXDLT0QNX38HEVYBYQOJL4PYO6SRCQXTWEEMB17A2OP6NXCU36F1CX5' where id=6; -update noar tt set v2='GB9HHFJVTQO39O8O42N7OV3AHZYTV3D9PDJDYFN0EY09B2VKIH9IWIS60X6AWAXM1B4QX9XF9HJ1MA9HB50GR9LSPOAHSMQ1PZV8KHX9N89A4RVCAO0YL42RN9AR7COJ7NY6FZG1XHEMBD0R7UEGJ0O3CZBO3NUBGMB2U8OY0017U6QIJCG8VNTLWN1ZZ4YQLPLU7VRUAIU7W0K55B8JQFODM7M3IGQBE8EUS9MEG8KHY4Z5SFY4GNQO5QGAYGX19' where id=6; -update noar ti set v2='GB9HHFJVTQO39O8O42N7OV3AHZYTV3D9PDJDYFN0EY09B2VKIH9IWIS60X6AWAXM1B4QX9XF9HJ1MA9HB50GR9LSPOAHSMQ1PZV8KHX9N89A4RVCAO0YL42RN9AR7COJ7NY6FZG1XHEMBD0R7UEGJ0O3CZBO3NUBGMB2U8OY0017U6QIJCG8VNTLWN1ZZ4YQLPLU7VRUAIU7W0K55B8JQFODM7M3IGQBE8EUS9MEG8KHY4Z5SFY4GNQO5QGAYGX19' where id=6; -update noar tt set v3='517YPKKKPZGE939Z5V3BUTHZUJQ5UXWTGT1MFCL54F9IGLHJP5DHZEC1V02QCRZWAWUPDWMTTT2CLV9SD944YFJT8GRLQI7FRY9MW76YV4DRO5CBVZ3ZM9GSRJAWO7759XLO21WUHVB7O3FAJ70E713HDVA092GL09TCS40T4VISH2BXQ10UTI1YEFRZOKEYXRC23GXHMC4J9LTT5YIW5I2M5ELZIMZFHKERIUVJ2BZT821XR4MX8HQ5VULVVHFQ5' where id=6; -update noar ti set v3='517YPKKKPZGE939Z5V3BUTHZUJQ5UXWTGT1MFCL54F9IGLHJP5DHZEC1V02QCRZWAWUPDWMTTT2CLV9SD944YFJT8GRLQI7FRY9MW76YV4DRO5CBVZ3ZM9GSRJAWO7759XLO21WUHVB7O3FAJ70E713HDVA092GL09TCS40T4VISH2BXQ10UTI1YEFRZOKEYXRC23GXHMC4J9LTT5YIW5I2M5ELZIMZFHKERIUVJ2BZT821XR4MX8HQ5VULVVHFQ5' where id=6; -update noar tt set v0='RTJEPXOK0PKPC8SZN4H4LSBRITZ8M1820RZYUUJCAKFFZND9P7JWY5H7WGHB4P25IBXAB2ATQFLFOE7FJD4ZESEZ3IGWHUPZ35GQ28HEQGH7TZ2FV8FYEGG11ST45TBSTCNUNK38Q0LB5VA1KNSOG9JOURGD5GF7HMYDL0YJVU0TOXR9WLK1PFDI1NQGJY0A30IK0AQ4XL8QWPFQ0KVEQYO8IZF9XDKQVJSLV8Q834GHERRE3MPFUSQ6MBIBPEL1L' where id=7; -update noar ti set v0='RTJEPXOK0PKPC8SZN4H4LSBRITZ8M1820RZYUUJCAKFFZND9P7JWY5H7WGHB4P25IBXAB2ATQFLFOE7FJD4ZESEZ3IGWHUPZ35GQ28HEQGH7TZ2FV8FYEGG11ST45TBSTCNUNK38Q0LB5VA1KNSOG9JOURGD5GF7HMYDL0YJVU0TOXR9WLK1PFDI1NQGJY0A30IK0AQ4XL8QWPFQ0KVEQYO8IZF9XDKQVJSLV8Q834GHERRE3MPFUSQ6MBIBPEL1L' where id=7; -update noar tt set v1='BR3N3TYGCY425OB42XAIYPDWDZBOOYQ4HVOKX26OXG947F69MUTW6NXT9XRLSRDMNQQV682RZI6XR8OEO2POL1GM2K35DMR9L6K6YOX7L42AL7Z5DJMXGQ5B2XQGTZ6A7DNP06CCCSMMJ8R20QGW6JGNNI4VN1F7PQY6JR8E3BW82VZVTEN2QYJJRS73AZ9QA8Q5E7G31C3BGDU43FTBLDJ9GRXBF2LLNIYUR2JTPDBLE4R64N2HKYALOBZ1OEPCU' where id=7; -update noar ti set v1='BR3N3TYGCY425OB42XAIYPDWDZBOOYQ4HVOKX26OXG947F69MUTW6NXT9XRLSRDMNQQV682RZI6XR8OEO2POL1GM2K35DMR9L6K6YOX7L42AL7Z5DJMXGQ5B2XQGTZ6A7DNP06CCCSMMJ8R20QGW6JGNNI4VN1F7PQY6JR8E3BW82VZVTEN2QYJJRS73AZ9QA8Q5E7G31C3BGDU43FTBLDJ9GRXBF2LLNIYUR2JTPDBLE4R64N2HKYALOBZ1OEPCU' where id=7; -update noar tt set v2='SL3JXYSP33BACQD2I94HOF5DW1Y577QLKIY8X83KX09SRGFLYAY35766V1C5ZADM99XQQ5B351ZIJFZI3NVIJ1EUG4N55ZIP15RMD4NYX7L5VHDTO5Y8RMRLTXMOCYSDJJ30SRHSCPEGATIRZ4XSAU4II83MZG75025IWG77UPEAK6FTUPWBNCCXMU1U80V9XQI302IIUI7RBFC4YIQSKHQWMAM97HWV69EZJ5TS6GUC3T4A9HOYUHFNV6BBF8CGR' where id=7; -update noar ti set v2='SL3JXYSP33BACQD2I94HOF5DW1Y577QLKIY8X83KX09SRGFLYAY35766V1C5ZADM99XQQ5B351ZIJFZI3NVIJ1EUG4N55ZIP15RMD4NYX7L5VHDTO5Y8RMRLTXMOCYSDJJ30SRHSCPEGATIRZ4XSAU4II83MZG75025IWG77UPEAK6FTUPWBNCCXMU1U80V9XQI302IIUI7RBFC4YIQSKHQWMAM97HWV69EZJ5TS6GUC3T4A9HOYUHFNV6BBF8CGR' where id=7; -update noar tt set v3='SG2TTFA79JQTR676JWQ5D053X40K5MQBYAU0DODYXPA507R3WVBBVCEP9KN6HNB8VH972VICRBVVX3MA679LJT9QVB3ZBF0ZT6OFB8JCPLXX9LNOUY1A4OCNPUONMLLU5X3LVQEEWQ1VWQBKETR6J7P3C0C5QCCGUST8JADO3JBSY3ES1K4AWSCTK0GRJ28B9JQZ38WNBZ0QEOHUNPR27KN88XIJWEWVK4E3YXF0OYYC653ZWQCR6LC04868OY6XF' where id=7; -update noar ti set v3='SG2TTFA79JQTR676JWQ5D053X40K5MQBYAU0DODYXPA507R3WVBBVCEP9KN6HNB8VH972VICRBVVX3MA679LJT9QVB3ZBF0ZT6OFB8JCPLXX9LNOUY1A4OCNPUONMLLU5X3LVQEEWQ1VWQBKETR6J7P3C0C5QCCGUST8JADO3JBSY3ES1K4AWSCTK0GRJ28B9JQZ38WNBZ0QEOHUNPR27KN88XIJWEWVK4E3YXF0OYYC653ZWQCR6LC04868OY6XF' where id=7; -update noar tt set v0='6Z8109SOVJDDUWRTZ7W3TNXVNSFYZLEPYEGCRYCZPABBYGR3QAFVCXLXG9PJX9VPTFXCUHBYO0XEFYKQW07ZZMPOGLV740QAWB7Z9BURCAJVDSW6AWQBV8XL3AE1KW8YVUWY1FTOAGLIAUO7UWK41IYVTF1YP2EK9H7P19I0HNDBAA6WHXI9PB23JKKJTCJQ2FP8AO8DS427PQQ5COEIO113NQ7JQEY3GOZWG1TE2G9LDLJ3W7072PEH0ALVFPQBW' where id=8; -update noar ti set v0='6Z8109SOVJDDUWRTZ7W3TNXVNSFYZLEPYEGCRYCZPABBYGR3QAFVCXLXG9PJX9VPTFXCUHBYO0XEFYKQW07ZZMPOGLV740QAWB7Z9BURCAJVDSW6AWQBV8XL3AE1KW8YVUWY1FTOAGLIAUO7UWK41IYVTF1YP2EK9H7P19I0HNDBAA6WHXI9PB23JKKJTCJQ2FP8AO8DS427PQQ5COEIO113NQ7JQEY3GOZWG1TE2G9LDLJ3W7072PEH0ALVFPQBW' where id=8; -update noar tt set v1='3M8DXQC5UXZHYCMLFSPSUP4U1VW4DTD8MM16PZKCWQIA4MDD1DU0LS4YRXZ04BE4AOLPN6JKZF52AWFHQYG688JLYBR1XT3HFDBIS4I9XLONXAM9489FEWEIA4O23Q0UY82WVXX56AUZ9S0N3ERAF92OFH6BAM7YAOJTD348XKTBD52AIRKD56QYD8RH39JT1CNB0A1Y3CIAFLJ0HB6QLNXBZHO1GFQR98O0HOYOKGC1NY3SEHVAWGPCYN5ZZHJWL' where id=8; -update noar ti set v1='3M8DXQC5UXZHYCMLFSPSUP4U1VW4DTD8MM16PZKCWQIA4MDD1DU0LS4YRXZ04BE4AOLPN6JKZF52AWFHQYG688JLYBR1XT3HFDBIS4I9XLONXAM9489FEWEIA4O23Q0UY82WVXX56AUZ9S0N3ERAF92OFH6BAM7YAOJTD348XKTBD52AIRKD56QYD8RH39JT1CNB0A1Y3CIAFLJ0HB6QLNXBZHO1GFQR98O0HOYOKGC1NY3SEHVAWGPCYN5ZZHJWL' where id=8; -update noar tt set v2='0RC1AZUH5QVDDQWSM0RE9XJIGVJN1ZFUP1O9NTRMHRPUZDMULV3C4ZXSKBZ73TC5F7487QXZ8ZV81QDZPQ3DEZBHRII0T6YFJXG54HV6OITHFEYATG8D27CYVJY58JRHK2CM7EHF45CWAG5GL7IXQD76VSLO9YEPRJWQGFK3YUSIY1J4Z4TD8HEN1C5CFT5ETJ4MP6N8UAQ3MQGXZO71WSR0Y26W1CARA0C095OKKG0ECXK6DMFKOO8EVZPECY92E' where id=8; -update noar ti set v2='0RC1AZUH5QVDDQWSM0RE9XJIGVJN1ZFUP1O9NTRMHRPUZDMULV3C4ZXSKBZ73TC5F7487QXZ8ZV81QDZPQ3DEZBHRII0T6YFJXG54HV6OITHFEYATG8D27CYVJY58JRHK2CM7EHF45CWAG5GL7IXQD76VSLO9YEPRJWQGFK3YUSIY1J4Z4TD8HEN1C5CFT5ETJ4MP6N8UAQ3MQGXZO71WSR0Y26W1CARA0C095OKKG0ECXK6DMFKOO8EVZPECY92E' where id=8; -update noar tt set v3='8E0W95X2JLN1TQHNSVEGV7XG2N0Y4Q13JWWK83BZ7SX41O9VJQ5BFNFCGTRMB4AOQSSKA2GZQOQVNP4X6TPIC3CIGCF8X1O3RUTZ0OF8BQ64CSPT8ORMNGF2XYXCE2PODKJUB2URX76HZS2LVFGWNSBFVVCZEN2OFJ06A11UJ1BMR19FIFA6UOZ29KU3Z0GA5U2VSMPUP47KSB08908R4WH1N2Y4ZHOM04DZ106VUVXV1GQ0IZ62BFGRY29KXQ3RI' where id=8; -update noar ti set v3='8E0W95X2JLN1TQHNSVEGV7XG2N0Y4Q13JWWK83BZ7SX41O9VJQ5BFNFCGTRMB4AOQSSKA2GZQOQVNP4X6TPIC3CIGCF8X1O3RUTZ0OF8BQ64CSPT8ORMNGF2XYXCE2PODKJUB2URX76HZS2LVFGWNSBFVVCZEN2OFJ06A11UJ1BMR19FIFA6UOZ29KU3Z0GA5U2VSMPUP47KSB08908R4WH1N2Y4ZHOM04DZ106VUVXV1GQ0IZ62BFGRY29KXQ3RI' where id=8; -update noar tt set v0='LKX57SWVK5IE30N7BHD3C80L769S62BXRK1A5NAOC7TU3J1E8XDZT6T4UE4AJOGJMNMS9DNC8EAT65NZ135608MBF3ZJZZJWWQSXDFV8HKN71PHPT8U6I2YX352X40JUH5XQVRNB5AYXP9K93RKC3EM2U4HP2P11QDR1AJLNWN3KHR84ASL3QOZZQP58EGZQIUQYHAXI8S9H7BDCWGN9ACC6BS7RSQZ2CCA021GAD280WJOFL4J9VPDWM59OHK2I7' where id=9; -update noar ti set v0='LKX57SWVK5IE30N7BHD3C80L769S62BXRK1A5NAOC7TU3J1E8XDZT6T4UE4AJOGJMNMS9DNC8EAT65NZ135608MBF3ZJZZJWWQSXDFV8HKN71PHPT8U6I2YX352X40JUH5XQVRNB5AYXP9K93RKC3EM2U4HP2P11QDR1AJLNWN3KHR84ASL3QOZZQP58EGZQIUQYHAXI8S9H7BDCWGN9ACC6BS7RSQZ2CCA021GAD280WJOFL4J9VPDWM59OHK2I7' where id=9; -update noar tt set v1='LAB2DLVFDCPF3S5FTZ536C082X007E9VK0IQF2FZGKYDB8Y7UD15XNBC0XHP68GN9K8DIQ63G6RWN6YQZFXPVMAHM2J9MIGJU3N7QIR17G6IKXKU7WSMFDIF0LBUM8SH3DKSXEMZ5R7UKYF762H3JZ8STOU934Z4WLBL9XIH3W7CDQC0R6SFW7HPBBA9237BDCDTXVFPBTY4SM9EIAPXAJYIYSIJ2NC0N7JCHG5I1OC6OP7KHTE3A39SHSWYBFHCE' where id=9; -update noar ti set v1='LAB2DLVFDCPF3S5FTZ536C082X007E9VK0IQF2FZGKYDB8Y7UD15XNBC0XHP68GN9K8DIQ63G6RWN6YQZFXPVMAHM2J9MIGJU3N7QIR17G6IKXKU7WSMFDIF0LBUM8SH3DKSXEMZ5R7UKYF762H3JZ8STOU934Z4WLBL9XIH3W7CDQC0R6SFW7HPBBA9237BDCDTXVFPBTY4SM9EIAPXAJYIYSIJ2NC0N7JCHG5I1OC6OP7KHTE3A39SHSWYBFHCE' where id=9; -update noar tt set v2='UPA3863V3G3BFATC0PGP4KNKMO034WQYLSMXSCABQBJISNSBXS0GY5U97PY6EZVI0RI5RTXH4FTTPLD3M3TQJP6INVTOCIGQS9R82PY8DR7KJLZOL15DFW4WWPSV6FF53OF9J06MNQO8HJUKC9R1BTG3CDXX8MFLDIUH9J7CK8E8VA3IPAQQPJZX5IJMOUVUU2397YP0T69HHWU6FS50UCP2B7XIYP1B63VX91B3M3430WSTO2186KX8TY2VQMPUQ' where id=9; -update noar ti set v2='UPA3863V3G3BFATC0PGP4KNKMO034WQYLSMXSCABQBJISNSBXS0GY5U97PY6EZVI0RI5RTXH4FTTPLD3M3TQJP6INVTOCIGQS9R82PY8DR7KJLZOL15DFW4WWPSV6FF53OF9J06MNQO8HJUKC9R1BTG3CDXX8MFLDIUH9J7CK8E8VA3IPAQQPJZX5IJMOUVUU2397YP0T69HHWU6FS50UCP2B7XIYP1B63VX91B3M3430WSTO2186KX8TY2VQMPUQ' where id=9; -update noar tt set v3='CGWF4UHGUSJ0V0R4BM4OXCUN3WIYF1XBQV0R81BXU94JHJWAY1H9LN8YR47MI56X9UNSW6OXIAYT827OYPKMFBWAQN3DYOWEZY8WOEXRDQQD7ZV5D9LV98QXD5RW6LH0B8QAXZBPLHC3SV779Z2TCXQZNZHVQ3MVIBHJ2KWGN76SO16DPNAXIV6DMRWF167GSU3A8DCW6HGAJG4EIGE408HLFZB0Z4X9WGJC1OZDNPVC9QSY9QBF7Z2H2KGLT8DHA' where id=9; -update noar ti set v3='CGWF4UHGUSJ0V0R4BM4OXCUN3WIYF1XBQV0R81BXU94JHJWAY1H9LN8YR47MI56X9UNSW6OXIAYT827OYPKMFBWAQN3DYOWEZY8WOEXRDQQD7ZV5D9LV98QXD5RW6LH0B8QAXZBPLHC3SV779Z2TCXQZNZHVQ3MVIBHJ2KWGN76SO16DPNAXIV6DMRWF167GSU3A8DCW6HGAJG4EIGE408HLFZB0Z4X9WGJC1OZDNPVC9QSY9QBF7Z2H2KGLT8DHA' where id=9; -update noar tt set v0='5MWI8L5Q1UCHJND2A5E13OJHQAOWZRQLPKJTH9NBBF5KB5SFUST56UJ0MURFTN79NBLW2E9ESMSO9HAQAQJSQ8KJRMD4O1U9BGE3Q7WQEH3Q8V6QM5TFW6CYOLJ8F6LW9Z141PU74K2SWCBLJF9FR61BM3K7IIVAX0KAIW7HIFCV1Y2R8NJ7JTGOF4K17CCXW90RW4REW7XSOMLTI07FAR7JJVVY08GWLKYCQVETAV9CBWFTB2VQJYXPF11S6HETK' where id=10; -update noar ti set v0='5MWI8L5Q1UCHJND2A5E13OJHQAOWZRQLPKJTH9NBBF5KB5SFUST56UJ0MURFTN79NBLW2E9ESMSO9HAQAQJSQ8KJRMD4O1U9BGE3Q7WQEH3Q8V6QM5TFW6CYOLJ8F6LW9Z141PU74K2SWCBLJF9FR61BM3K7IIVAX0KAIW7HIFCV1Y2R8NJ7JTGOF4K17CCXW90RW4REW7XSOMLTI07FAR7JJVVY08GWLKYCQVETAV9CBWFTB2VQJYXPF11S6HETK' where id=10; -update noar tt set v1='C49KN2OLITD139WCYM0ECVCJ6D01Z16HETLLLJGT4AZEN97OQ3R4C65VP4WSE8FYVIUZG5DBXLG9EHTDC97Y67BTB34YORGZSSV1GK315TXREO5X9PJHV7MOEFX6LQP17A41QKZNMQ280SODLE2R2EN59F06L4D9UV3G10SB62QGUIF19UWT0XY2XPAPPMIQ66I7WCM4LWO2Z0NGZ29QPFHRPJZBCLUIYB47EBBAUPPRPBXNTFBBXFSC1FPAAXSY5' where id=10; -update noar ti set v1='C49KN2OLITD139WCYM0ECVCJ6D01Z16HETLLLJGT4AZEN97OQ3R4C65VP4WSE8FYVIUZG5DBXLG9EHTDC97Y67BTB34YORGZSSV1GK315TXREO5X9PJHV7MOEFX6LQP17A41QKZNMQ280SODLE2R2EN59F06L4D9UV3G10SB62QGUIF19UWT0XY2XPAPPMIQ66I7WCM4LWO2Z0NGZ29QPFHRPJZBCLUIYB47EBBAUPPRPBXNTFBBXFSC1FPAAXSY5' where id=10; -update noar tt set v2='H7L0LK8JRYQIVVJQA8FNK1K8LJ6BE17323OUEU5SD1RZ3JW2N7EKGJ5MNM1HA2E4PCSLX3J5KNK8056UCC5I38HIY8L57ST22BYNW53YMST40VNKOIDW4QG3A54J25FBZHS55EQTXYLA31M31TCS84SP314ZOR67NA0P5DBJ6ULTTHZP41XRYX20C78IVNLLJ1HJA2WU3YMXSL0OTZNLN6X4XDQNUW1D5JT5AW7SRLKV446RCR3YU92PXX58Y75CW' where id=10; -update noar ti set v2='H7L0LK8JRYQIVVJQA8FNK1K8LJ6BE17323OUEU5SD1RZ3JW2N7EKGJ5MNM1HA2E4PCSLX3J5KNK8056UCC5I38HIY8L57ST22BYNW53YMST40VNKOIDW4QG3A54J25FBZHS55EQTXYLA31M31TCS84SP314ZOR67NA0P5DBJ6ULTTHZP41XRYX20C78IVNLLJ1HJA2WU3YMXSL0OTZNLN6X4XDQNUW1D5JT5AW7SRLKV446RCR3YU92PXX58Y75CW' where id=10; -update noar tt set v3='R96YM73YM4R0B1UNOEJNCB8YGAITGGYL0TLWYLS31LHF19XUDQBNLVZEJM0PEHP4BEOGF0FX2AI83UDPVY59WIJGMFC9G74FFJA3HV92TBCEB00V768UMIEB4C0ZR4U7M0JONP5NTVC2VSZSBMEFF6KTNUE05RCE20AR4IQX4WY1UOREP6F6IT07PQVYHNF3W6AGUANQOZI90QNC2ZSHAIR6UHZGOML3BB9SYQ0UTNMPOJ7T0NXED620VNC0RQ3MR' where id=10; -update noar ti set v3='R96YM73YM4R0B1UNOEJNCB8YGAITGGYL0TLWYLS31LHF19XUDQBNLVZEJM0PEHP4BEOGF0FX2AI83UDPVY59WIJGMFC9G74FFJA3HV92TBCEB00V768UMIEB4C0ZR4U7M0JONP5NTVC2VSZSBMEFF6KTNUE05RCE20AR4IQX4WY1UOREP6F6IT07PQVYHNF3W6AGUANQOZI90QNC2ZSHAIR6UHZGOML3BB9SYQ0UTNMPOJ7T0NXED620VNC0RQ3MR' where id=10; -update noar tt set v0='04OSZWABN8XYY4HEHYQJRM7M2XPBD8UTK1LGYIMPLC18WQU8QR3A1HJB2L9P8RA6ZLG3U56XC5VV71CT29KDCW0FUOZC3XGA7RGJZTGPZFD8E1JFVLND694GI6NNH3D36UXLE5F296PXRCC7NH7PUJS5ZQI1ZYC3TAH71S5LGJZPJTIZPPU6OOEZSVOZ26P6F6KG380CLRWV81TYQKPQL4TE3EST8X8Q5AFNAQ6HBJJ9XFAK8642TYUZQLGEK7P0G' where id=11; -update noar ti set v0='04OSZWABN8XYY4HEHYQJRM7M2XPBD8UTK1LGYIMPLC18WQU8QR3A1HJB2L9P8RA6ZLG3U56XC5VV71CT29KDCW0FUOZC3XGA7RGJZTGPZFD8E1JFVLND694GI6NNH3D36UXLE5F296PXRCC7NH7PUJS5ZQI1ZYC3TAH71S5LGJZPJTIZPPU6OOEZSVOZ26P6F6KG380CLRWV81TYQKPQL4TE3EST8X8Q5AFNAQ6HBJJ9XFAK8642TYUZQLGEK7P0G' where id=11; -update noar tt set v1='8E2N7HIEARWE7A2FUX14OL351UO3J88GLZYU3RDC5FBBY37FRBXFPIZQ9EQHNT753I4IJ3W648RGXG3STBZPUJ7TETT8QHKC7M3Z4FTNX5PEOT8OJH41IK7YZA4IK2UOK1B34RVC21JPSFFGRA5MZZ053O2T7IXW99Z49TMGJP22C6W42CT3UWY7X1HC9CWGR3NFB6K54SIPIAA6RGBQ0NR488KL85XUW0B7E1UMT12RC4WAVDMZAAJB3HIESDVX9' where id=11; -update noar ti set v1='8E2N7HIEARWE7A2FUX14OL351UO3J88GLZYU3RDC5FBBY37FRBXFPIZQ9EQHNT753I4IJ3W648RGXG3STBZPUJ7TETT8QHKC7M3Z4FTNX5PEOT8OJH41IK7YZA4IK2UOK1B34RVC21JPSFFGRA5MZZ053O2T7IXW99Z49TMGJP22C6W42CT3UWY7X1HC9CWGR3NFB6K54SIPIAA6RGBQ0NR488KL85XUW0B7E1UMT12RC4WAVDMZAAJB3HIESDVX9' where id=11; -update noar tt set v2='ZTDXW5EMDB874E1R5QJZ1VRX7C5YV4568RUA65LQDVT8PPHOVQFI25HA2LY6TXZS84SACW20K1RYKZQ59MM05ICVXNV4TVN7LP9P6CI5O1T6G7U9F8F1VRSBU65WZFF0YOLSJ3Q3KVZ7WVMAF5SZT6BKC8WNTITLWKPJP3SJL1UBAAPZ27S8BHHEJX202E1NPYRCP8VPJEK8AE238OPHRT2P8RDH0FZLOHW17WAB2GQQVL4FR4RM33IUXVUEE3HL0' where id=11; -update noar ti set v2='ZTDXW5EMDB874E1R5QJZ1VRX7C5YV4568RUA65LQDVT8PPHOVQFI25HA2LY6TXZS84SACW20K1RYKZQ59MM05ICVXNV4TVN7LP9P6CI5O1T6G7U9F8F1VRSBU65WZFF0YOLSJ3Q3KVZ7WVMAF5SZT6BKC8WNTITLWKPJP3SJL1UBAAPZ27S8BHHEJX202E1NPYRCP8VPJEK8AE238OPHRT2P8RDH0FZLOHW17WAB2GQQVL4FR4RM33IUXVUEE3HL0' where id=11; -update noar tt set v3='AB9PDSQ9YG0LBM3R95BLRP238RC8GSOJ4KMOIUZP6JD30SVS5ZYE2G4NX2KBW3IZ3DBL6E8NHY2RSSODMLWQFUTP9AYRTKSH44MQJ1BJSJ68ROS3X95WCJHZMVQW8LLGSA76XMD44TKKYPVUL7UVNHZPFTNQ3ILPYEAX8FI8X1FMKKQTOYBYUXG4JPL0G41VYW9VHUOVSK4YQ7E7L0J6R09JRHEPQQFP114Z4BAHRCU31LTTODWKN0R6SJOJK4BCJ' where id=11; -update noar ti set v3='AB9PDSQ9YG0LBM3R95BLRP238RC8GSOJ4KMOIUZP6JD30SVS5ZYE2G4NX2KBW3IZ3DBL6E8NHY2RSSODMLWQFUTP9AYRTKSH44MQJ1BJSJ68ROS3X95WCJHZMVQW8LLGSA76XMD44TKKYPVUL7UVNHZPFTNQ3ILPYEAX8FI8X1FMKKQTOYBYUXG4JPL0G41VYW9VHUOVSK4YQ7E7L0J6R09JRHEPQQFP114Z4BAHRCU31LTTODWKN0R6SJOJK4BCJ' where id=11; -update noar tt set v0='V5LXYKY6V5LZ1ZEYN00JYGI9Z5VSX0NX2QG85LKPGTK4H8IX7WJ3616O693JUUP82F9XJAVOJ9IH3YK5YT3WFQ5X3D4RM0IAX3M30KZY3G23Q9A4XC74ZOYH5TD18293O5HY2EJH7S9XCVB1GKC1P1MD9Y11V0WSEA15LI6XXNSCC9KQFQ1RS7S0HNCMJL64OQ2T1KVEFVR3E2AQOUB5SWX023MY6TY2DDDPUL28NEA3N0G1ZEV7135NAG7D5OK5G' where id=12; -update noar ti set v0='V5LXYKY6V5LZ1ZEYN00JYGI9Z5VSX0NX2QG85LKPGTK4H8IX7WJ3616O693JUUP82F9XJAVOJ9IH3YK5YT3WFQ5X3D4RM0IAX3M30KZY3G23Q9A4XC74ZOYH5TD18293O5HY2EJH7S9XCVB1GKC1P1MD9Y11V0WSEA15LI6XXNSCC9KQFQ1RS7S0HNCMJL64OQ2T1KVEFVR3E2AQOUB5SWX023MY6TY2DDDPUL28NEA3N0G1ZEV7135NAG7D5OK5G' where id=12; -update noar tt set v1='ZFN6OAEU26G707F962O4QHOZPX6W0D0QWRPRAJOFX8XPMRN9Y0TP1G34WAZYA45M3EZ78WCA84SCYS1261QZ4ZS3ULL36AS0VXJDWNJWFX3S05B3AEMANUWFEVJNVIAGB6PE6893N55ZX6QDPWPL364CAR21DXICCEXUTTPALNVO2ZRY6TRQUH6PTRBNO72MLWJ9YCAQPQNUAVCOYNQ66YQYD0I5FK01H50G1WDN8VH2JG0FRESSN5PLOF9PQD5QR' where id=12; -update noar ti set v1='ZFN6OAEU26G707F962O4QHOZPX6W0D0QWRPRAJOFX8XPMRN9Y0TP1G34WAZYA45M3EZ78WCA84SCYS1261QZ4ZS3ULL36AS0VXJDWNJWFX3S05B3AEMANUWFEVJNVIAGB6PE6893N55ZX6QDPWPL364CAR21DXICCEXUTTPALNVO2ZRY6TRQUH6PTRBNO72MLWJ9YCAQPQNUAVCOYNQ66YQYD0I5FK01H50G1WDN8VH2JG0FRESSN5PLOF9PQD5QR' where id=12; -update noar tt set v2='VQX0Z8GIYB6PDTQQ3QWOJ3UEYKJR19SD53FCIJPVJ5PG2PZCA15JF90K3CCXX2WJ5YAH2SBJ6V7RWZMWR34NGNM57OUBQ31M9XYWD7AMVTE2YMLH45V64A7EIL22LRMFNBH23OFGMMG72U8RUZUUY7VL48MWH9KQ8XBJJCL4GLA9P7BI6Z3FD5VEYN6NLZBAD38E2UKNFYZWF0C7ZHTQYMSZZI5ZKBCU1UZCD8G0BUZCUVMVTTSSZD8APYS1S2JQS' where id=12; -update noar ti set v2='VQX0Z8GIYB6PDTQQ3QWOJ3UEYKJR19SD53FCIJPVJ5PG2PZCA15JF90K3CCXX2WJ5YAH2SBJ6V7RWZMWR34NGNM57OUBQ31M9XYWD7AMVTE2YMLH45V64A7EIL22LRMFNBH23OFGMMG72U8RUZUUY7VL48MWH9KQ8XBJJCL4GLA9P7BI6Z3FD5VEYN6NLZBAD38E2UKNFYZWF0C7ZHTQYMSZZI5ZKBCU1UZCD8G0BUZCUVMVTTSSZD8APYS1S2JQS' where id=12; -update noar tt set v3='H3M5YB8VKJX9HCV2B0ZA4NZXHC8H8YTAY9A9SXI8MS1YRBISRAH5TG2N2GQK31GP12JX5J4XRSLB9A1CY4GMKVHZFMK738PPKUNJMCCHKL8CUYCRCLSQVT56CO9J87AZ9TIQG1UCR9M49CJR0JV0N3184GMXTCDTC3QGJP78NGFBMVEF8WHD3XK4X1EU49YEVMDC4AP6MA2QISRR5VSS9TAZ1YK9CJKLG0LE1SF53XQG1PZQHQ2IAAKPMGQ2IP0KN' where id=12; -update noar ti set v3='H3M5YB8VKJX9HCV2B0ZA4NZXHC8H8YTAY9A9SXI8MS1YRBISRAH5TG2N2GQK31GP12JX5J4XRSLB9A1CY4GMKVHZFMK738PPKUNJMCCHKL8CUYCRCLSQVT56CO9J87AZ9TIQG1UCR9M49CJR0JV0N3184GMXTCDTC3QGJP78NGFBMVEF8WHD3XK4X1EU49YEVMDC4AP6MA2QISRR5VSS9TAZ1YK9CJKLG0LE1SF53XQG1PZQHQ2IAAKPMGQ2IP0KN' where id=12; -update noar tt set v0='0BQ6JUDERPBLQAZNK08MLPXJNCWNYQ1LUPIIG87140824SGIOWRJREI8HEG918VT3Y2QL272H26K80BT5L112AE0M3RDVC5IU653G5SBWITYM11G419FMLNE54HPQE05A28A0TH7U8OEE1B0TRPWT2V8D5UF1XEEEJ0KRYTPRQX8UQQLFFAQRJOSHE78KOM8BMKO8D2U05HU2XMXLZAFYHT2JJ14JAJE9Q3X76O8S3LJ2D5Q995OWH8I8VNV4S34E' where id=13; -update noar ti set v0='0BQ6JUDERPBLQAZNK08MLPXJNCWNYQ1LUPIIG87140824SGIOWRJREI8HEG918VT3Y2QL272H26K80BT5L112AE0M3RDVC5IU653G5SBWITYM11G419FMLNE54HPQE05A28A0TH7U8OEE1B0TRPWT2V8D5UF1XEEEJ0KRYTPRQX8UQQLFFAQRJOSHE78KOM8BMKO8D2U05HU2XMXLZAFYHT2JJ14JAJE9Q3X76O8S3LJ2D5Q995OWH8I8VNV4S34E' where id=13; -update noar tt set v1='9AMZKRYJEMP4690BPS403LC8UT5MODEBM22BAG4D39U0Q4TBE4EWK96ZD8NUZI5TV8R9T0N6Q2ASJV0JTZUEMKXT1MOV3Z5JET3OIFZUWHKV7GE2U1HJBLFQCKUMK8P0HTMMEFSFCIH0IAL677H2DKTRA2KTCZTFJMIUZVF4E9CAREB74X2P2ZLPQHESFSY2N1ILJHCXBHSFD8J0YHAZS5IWLRCPG241RX1AFY43N4T4RTAIQY6REPXRL1U6IEPZ7' where id=13; -update noar ti set v1='9AMZKRYJEMP4690BPS403LC8UT5MODEBM22BAG4D39U0Q4TBE4EWK96ZD8NUZI5TV8R9T0N6Q2ASJV0JTZUEMKXT1MOV3Z5JET3OIFZUWHKV7GE2U1HJBLFQCKUMK8P0HTMMEFSFCIH0IAL677H2DKTRA2KTCZTFJMIUZVF4E9CAREB74X2P2ZLPQHESFSY2N1ILJHCXBHSFD8J0YHAZS5IWLRCPG241RX1AFY43N4T4RTAIQY6REPXRL1U6IEPZ7' where id=13; -update noar tt set v2='FCCDBULZN5AC5HUZMOU1J5QRCS4S1C7Z371Y8Z7N88H67IF2M8TMELBN8W1BH9ZQVGDMFQP0VLDXKYLTZUYBPBW0UO7MBPSH4AZ60AIOTIUB9LW8P0TI2U15RF62E5YPC8S5LZ05QXMSMHDCVU0RUAJ943L2GH41VRLYRUHCKUVQDAHCH20KLMY8F76EGCO1DD7GG1IJ2BN2N0IJBAAMB54QQ2Q4Z3RZYSX9383G53983PGKFS0UXMZO7J1U4HKZU' where id=13; -update noar ti set v2='FCCDBULZN5AC5HUZMOU1J5QRCS4S1C7Z371Y8Z7N88H67IF2M8TMELBN8W1BH9ZQVGDMFQP0VLDXKYLTZUYBPBW0UO7MBPSH4AZ60AIOTIUB9LW8P0TI2U15RF62E5YPC8S5LZ05QXMSMHDCVU0RUAJ943L2GH41VRLYRUHCKUVQDAHCH20KLMY8F76EGCO1DD7GG1IJ2BN2N0IJBAAMB54QQ2Q4Z3RZYSX9383G53983PGKFS0UXMZO7J1U4HKZU' where id=13; -update noar tt set v3='SAQMCV95TG3T09WH0B904FML7IG727PSMJ9TN7102TPY13JMAFKBIZSTUJJS5DJ21KMMHYJTXEGGIU83KIGIYNPEKRW8VI1CHWHTL6N7EX8DZMEMR356G4BRL4FASSVCSN1RU0FEIWGDKCCW38AYQERJRT2UVWDH2LC7ZHFODGJ16TJKU3ARDPIBDEJ5H0CWK3JV96XWYSU6Z9HWJD5G2F78HEPQU615XWYJKG7TIQA7NJ3U2B09GASBEU2YZO59H' where id=13; -update noar ti set v3='SAQMCV95TG3T09WH0B904FML7IG727PSMJ9TN7102TPY13JMAFKBIZSTUJJS5DJ21KMMHYJTXEGGIU83KIGIYNPEKRW8VI1CHWHTL6N7EX8DZMEMR356G4BRL4FASSVCSN1RU0FEIWGDKCCW38AYQERJRT2UVWDH2LC7ZHFODGJ16TJKU3ARDPIBDEJ5H0CWK3JV96XWYSU6Z9HWJD5G2F78HEPQU615XWYJKG7TIQA7NJ3U2B09GASBEU2YZO59H' where id=13; -update noar tt set v0='8P7YV1QBXTRVC6H3J5GN8BKD2CIN7H0YNSXE7VQD94SODKPKGOO7TOAHDUORC2JTLR63I81JXNFT0Y9P9ITRAX9R93W7MAGKB6LCYFSTXF53TKUASMF0ZHND54QB1Y4BV5PL4DLQ5SVMH560FVD0CA38HCLDVY278DSWSMGYAQACJL792TZ6M6LEXTMDI90ZI2TIQBQ23KEI0T8A79SUIH2XTS5MOYE7KFE3O93ERNIXVPYNQWZBTNVAFGUSX93QK' where id=14; -update noar ti set v0='8P7YV1QBXTRVC6H3J5GN8BKD2CIN7H0YNSXE7VQD94SODKPKGOO7TOAHDUORC2JTLR63I81JXNFT0Y9P9ITRAX9R93W7MAGKB6LCYFSTXF53TKUASMF0ZHND54QB1Y4BV5PL4DLQ5SVMH560FVD0CA38HCLDVY278DSWSMGYAQACJL792TZ6M6LEXTMDI90ZI2TIQBQ23KEI0T8A79SUIH2XTS5MOYE7KFE3O93ERNIXVPYNQWZBTNVAFGUSX93QK' where id=14; -update noar tt set v1='AB353RMDDKRCC3CI27XQNS4GL6N20K2GN99IG7KEABKLL3DKHL2VXWUYP2PKZIXHMQBGCWVIQUN7N7NSOWU7X79WLT4D4DZG5KBNKH86T5JK0YPHJZGNTP9OCBMJQXOEN0SV6DQOYAYWMY0VLLNU95DQWT13Y11MP2MO8HPAGXU945VW033XZSWKR1VEZYSFY7UVMWC3WJUAB266C6CCCDIIGQ0181MWZBCQXD7ZDDGPSGVNMX33DP0F2KZK4R46O' where id=14; -update noar ti set v1='AB353RMDDKRCC3CI27XQNS4GL6N20K2GN99IG7KEABKLL3DKHL2VXWUYP2PKZIXHMQBGCWVIQUN7N7NSOWU7X79WLT4D4DZG5KBNKH86T5JK0YPHJZGNTP9OCBMJQXOEN0SV6DQOYAYWMY0VLLNU95DQWT13Y11MP2MO8HPAGXU945VW033XZSWKR1VEZYSFY7UVMWC3WJUAB266C6CCCDIIGQ0181MWZBCQXD7ZDDGPSGVNMX33DP0F2KZK4R46O' where id=14; -update noar tt set v2='8YFKAMF2GMDUTSJVHV96FLY3H175FH18XC854DX64XPJQ91WJ1OVP5D4UKIM4924J3KTRUW4BP5HI5N9PFZ7GKBYMGJLBO47ZTX0UR6J6THBB0QQNMDDUXTTMJ9V9KPIPF1W6RFMZ6YVKZGPHH33LY4TDKMMQHGGG6XTIRE1MN55LAGLO4UL4X4DDBJO7D4ZKQZYFO73JDHZIUI0SI5J7B5NMG4J84EHK9J4SCYQLRYJMS0KV5AJ9E4BF5VH11KZE' where id=14; -update noar ti set v2='8YFKAMF2GMDUTSJVHV96FLY3H175FH18XC854DX64XPJQ91WJ1OVP5D4UKIM4924J3KTRUW4BP5HI5N9PFZ7GKBYMGJLBO47ZTX0UR6J6THBB0QQNMDDUXTTMJ9V9KPIPF1W6RFMZ6YVKZGPHH33LY4TDKMMQHGGG6XTIRE1MN55LAGLO4UL4X4DDBJO7D4ZKQZYFO73JDHZIUI0SI5J7B5NMG4J84EHK9J4SCYQLRYJMS0KV5AJ9E4BF5VH11KZE' where id=14; -update noar tt set v3='BWL7S5A8NUCR0ON6T559WQF9WN3ZB726H7583ETHGB6C0G3262K4IZU89HVEK1Y6SDIEPV1X5MPXUP5022VZZLTC2XULSS3258EW1KABNPHUGYIICT20OIPX2VKACTXFP5IVFP35U2JNUN3XQGHYOLLNGHED1KHJINJ0DGP6Q2BBUJ1ILBJTM2VB3VP22H9LJ8BBW6YHKNFRSFV6ST9ZVIMS8H5IHFV2V6YGQVYEHL08FW1EXTNJ14BOJRI2QFESI' where id=14; -update noar ti set v3='BWL7S5A8NUCR0ON6T559WQF9WN3ZB726H7583ETHGB6C0G3262K4IZU89HVEK1Y6SDIEPV1X5MPXUP5022VZZLTC2XULSS3258EW1KABNPHUGYIICT20OIPX2VKACTXFP5IVFP35U2JNUN3XQGHYOLLNGHED1KHJINJ0DGP6Q2BBUJ1ILBJTM2VB3VP22H9LJ8BBW6YHKNFRSFV6ST9ZVIMS8H5IHFV2V6YGQVYEHL08FW1EXTNJ14BOJRI2QFESI' where id=14; -update noar tt set v0='NIPNXTQ3XUDFIJL0BLCV2HN2L73P7VN4FU97OYLNYXSMOLO1FY70O4XSEQYHQSSF80PE42N7G3X9WV1CNP5QY0V3F2ERA2FFN3EQ4WZTHIBYBAHTX5TG9TSV000AN6LMTKDKLAN87NCLHOVLFQEJKYF4UXPAQIO7Y1TOLI43SBA6Y6KM8HFDGQKWO79FUAG9VL58PUDM0VGK2AY2T6L49ROU3PKJAE1T497O72CX2DVR3LPG247LCDKLAT5WQVBQH' where id=15; -update noar ti set v0='NIPNXTQ3XUDFIJL0BLCV2HN2L73P7VN4FU97OYLNYXSMOLO1FY70O4XSEQYHQSSF80PE42N7G3X9WV1CNP5QY0V3F2ERA2FFN3EQ4WZTHIBYBAHTX5TG9TSV000AN6LMTKDKLAN87NCLHOVLFQEJKYF4UXPAQIO7Y1TOLI43SBA6Y6KM8HFDGQKWO79FUAG9VL58PUDM0VGK2AY2T6L49ROU3PKJAE1T497O72CX2DVR3LPG247LCDKLAT5WQVBQH' where id=15; -update noar tt set v1='76BG85Z4HU5UG4K7LZTWWSGATWCKBZYC1N7O9F5KSDCV22Y72GI9PPFMH1UD99SADG003CCVBN3WLR0KB8FW0X9TV73IHSNOUT33D6J269EGZCQVIIO9I4AW3O1ULOZRTFB687M2GTEGAJG7OMAKL526W4Y5F93QKCKBWA3EOHKPO9JBABZHFG3P7WGYC712OXJBCSYXSMQR112OWHY4VNXN581FHSNP9G3QKXL27Q4V8GL2GXO8WVZB0XI5JENE6' where id=15; -update noar ti set v1='76BG85Z4HU5UG4K7LZTWWSGATWCKBZYC1N7O9F5KSDCV22Y72GI9PPFMH1UD99SADG003CCVBN3WLR0KB8FW0X9TV73IHSNOUT33D6J269EGZCQVIIO9I4AW3O1ULOZRTFB687M2GTEGAJG7OMAKL526W4Y5F93QKCKBWA3EOHKPO9JBABZHFG3P7WGYC712OXJBCSYXSMQR112OWHY4VNXN581FHSNP9G3QKXL27Q4V8GL2GXO8WVZB0XI5JENE6' where id=15; -update noar tt set v2='ZSLQN4KDSAOJ5ZHX3C46SNFQQY1CDQ02B32NIGSA7WEE9BVHL8CLWTN5HOQO6BMNETRRQMKURCRYT8CSC7E57OL0MAKU8AUKLLRNPYHHSF4RD1VUSJL6WJ8ZM3K2DVUBZDS0FERUXDJDWK340QHX24PWHHN3K7P0YOGFMEH99ZU9N7ESCUT82QUICZQWXZTOCM3Z9LTUL4P2FZFAD5K0X13Q4LWQ66TW7FMBT0FEOF73T1T84LUM1JDZ062T017KJ' where id=15; -update noar ti set v2='ZSLQN4KDSAOJ5ZHX3C46SNFQQY1CDQ02B32NIGSA7WEE9BVHL8CLWTN5HOQO6BMNETRRQMKURCRYT8CSC7E57OL0MAKU8AUKLLRNPYHHSF4RD1VUSJL6WJ8ZM3K2DVUBZDS0FERUXDJDWK340QHX24PWHHN3K7P0YOGFMEH99ZU9N7ESCUT82QUICZQWXZTOCM3Z9LTUL4P2FZFAD5K0X13Q4LWQ66TW7FMBT0FEOF73T1T84LUM1JDZ062T017KJ' where id=15; -update noar tt set v3='9ZQF665VYVHA7BI6PSJAVBQIKURT04GKN9VYB29189TCLHPSVVIKCL4MPPDZCZQAR5GAQD0MSQSJT21G27BL4YZA68P7SXEX4VTJF3VNRTXMJ7H0N40NNLL0N569X3KRH2C1X5CGMCA765DR4JJCVZ7M5F47UYPTHUBC5LP8DUCG52WEI51JX03L8X5Z0YTOFQNRVZ5FZGO5WE05P8WEYW8BJSK5XBN287BLRYPGRS10DGTCXWAQUIA1H6V5I4HU9' where id=15; -update noar ti set v3='9ZQF665VYVHA7BI6PSJAVBQIKURT04GKN9VYB29189TCLHPSVVIKCL4MPPDZCZQAR5GAQD0MSQSJT21G27BL4YZA68P7SXEX4VTJF3VNRTXMJ7H0N40NNLL0N569X3KRH2C1X5CGMCA765DR4JJCVZ7M5F47UYPTHUBC5LP8DUCG52WEI51JX03L8X5Z0YTOFQNRVZ5FZGO5WE05P8WEYW8BJSK5XBN287BLRYPGRS10DGTCXWAQUIA1H6V5I4HU9' where id=15; -update noar tt set v0='Y3QO4M5KHDN1SV95J8DA6THASVE799AGXWIFFTBYDY8N7WQL15KRNQX9E1P9MU7GYMB2CTNQE6WJG0TEU3Y7F28JLMU713WMVUCGGTPAHT7DK7S1G4A4A7KW7QXHC7JJ4R3WVZIKWLCXY0TC2EKULSR4DVOTFLW24QNKBY111298J27EXFU2Z6P40M0OTZO5X3BSVQJDOA23XYU8N6QC20RIY6N6M4VSJN3H4NR355LZEXOT7K64BFI6PX0G0V8G5' where id=16; -update noar ti set v0='Y3QO4M5KHDN1SV95J8DA6THASVE799AGXWIFFTBYDY8N7WQL15KRNQX9E1P9MU7GYMB2CTNQE6WJG0TEU3Y7F28JLMU713WMVUCGGTPAHT7DK7S1G4A4A7KW7QXHC7JJ4R3WVZIKWLCXY0TC2EKULSR4DVOTFLW24QNKBY111298J27EXFU2Z6P40M0OTZO5X3BSVQJDOA23XYU8N6QC20RIY6N6M4VSJN3H4NR355LZEXOT7K64BFI6PX0G0V8G5' where id=16; -update noar tt set v1='BUOKN95C2YZKYIR5NHASDKBN4NACXND9CLBIHGCUB040Z7Y1USZ7ZHW82DU3J4HO921LLXINRF3ZHL3CKBPLX34TIKW6CZKS6IW3VOGBHLMKQ0D1ABF2MPIQ8CQY7X4K74BGJG7MOGXZ5RKJ03ZKPM9AYUECGJQ6H7AJNX2VAPKIFF3UCA20LPEY1D9HFLX0XDBIPKFMC1XWJGGPF0LFHBLIPNMQV90ROSWX7IVFRI6L0X6ZV922WFNGMEM0P7PZT' where id=16; -update noar ti set v1='BUOKN95C2YZKYIR5NHASDKBN4NACXND9CLBIHGCUB040Z7Y1USZ7ZHW82DU3J4HO921LLXINRF3ZHL3CKBPLX34TIKW6CZKS6IW3VOGBHLMKQ0D1ABF2MPIQ8CQY7X4K74BGJG7MOGXZ5RKJ03ZKPM9AYUECGJQ6H7AJNX2VAPKIFF3UCA20LPEY1D9HFLX0XDBIPKFMC1XWJGGPF0LFHBLIPNMQV90ROSWX7IVFRI6L0X6ZV922WFNGMEM0P7PZT' where id=16; -update noar tt set v2='A4GWW90Z56JY82G9YDXZ3QA31DDD06E0BKSADEOFWLW554Z20JSITTW0TAMMTM68ZO7H74DY6K1NMD2KRAIMA585YQBB3R6D3XFWXGR9436W5HZC5CHSWNZ370YZG7UIQIKPQRO5EXGUXTNR8HQSZNSRPS9OKSZIV5OM2M6W4CRYZCSYZRFW78L5AX4SKV0W3TE27OG1ORY7RMW1P582QPDUPYOHGE2TJOOC6A5QHIK8O9N0QLB8YG3U39QF4Q7Z8' where id=16; -update noar ti set v2='A4GWW90Z56JY82G9YDXZ3QA31DDD06E0BKSADEOFWLW554Z20JSITTW0TAMMTM68ZO7H74DY6K1NMD2KRAIMA585YQBB3R6D3XFWXGR9436W5HZC5CHSWNZ370YZG7UIQIKPQRO5EXGUXTNR8HQSZNSRPS9OKSZIV5OM2M6W4CRYZCSYZRFW78L5AX4SKV0W3TE27OG1ORY7RMW1P582QPDUPYOHGE2TJOOC6A5QHIK8O9N0QLB8YG3U39QF4Q7Z8' where id=16; -update noar tt set v3='BG9HW8OWS91PFB05GXEG0LWJ94M35PKRMO5ZLMKY9Q2BTUBKDFU7W6V1DK0J9XSII1A75Q4XBRXR5K7IBH7EEJ39JZ0SUUI91P9OUKQFNOGYUGXVZI7NDBDOW42XOFYZJ76E9M3SF2ORBA6KKVHT9B4KR580DTKH9DD2AVDXZAFQVF16CFH0MW8FPY26JBVFSEMI5WIX902EEEJY2XPFC5C9S44OT04HPXX9WWBFEJM2712WZWYFFFVJPLKS5MD3B' where id=16; -update noar ti set v3='BG9HW8OWS91PFB05GXEG0LWJ94M35PKRMO5ZLMKY9Q2BTUBKDFU7W6V1DK0J9XSII1A75Q4XBRXR5K7IBH7EEJ39JZ0SUUI91P9OUKQFNOGYUGXVZI7NDBDOW42XOFYZJ76E9M3SF2ORBA6KKVHT9B4KR580DTKH9DD2AVDXZAFQVF16CFH0MW8FPY26JBVFSEMI5WIX902EEEJY2XPFC5C9S44OT04HPXX9WWBFEJM2712WZWYFFFVJPLKS5MD3B' where id=16; -update noar tt set v0='VFQA6QPOFSNDFRN56LI3PTXZRP0CGVA1OSQWW2RJR8F3868FWND46KU8FVX5MU6UC4IEF4A8BVFCML4HNXYTXZJ2KNGZLNXFHPU6RPMKOAGMD47H8FQQLEWZMQNPPRAVMNDAMCVMFVGWB0XRJGTMCB3MKY00NPV3KQF5WFJ984LNF96I7LS3ON6O4ES9JDVZ3ZPGD7Z8HUX221Y2EEYDHXJUNT1YL6HKFR0ONSGG0ZTQ5KQ2IMW8OOTOBOC7ZZSR3' where id=17; -update noar ti set v0='VFQA6QPOFSNDFRN56LI3PTXZRP0CGVA1OSQWW2RJR8F3868FWND46KU8FVX5MU6UC4IEF4A8BVFCML4HNXYTXZJ2KNGZLNXFHPU6RPMKOAGMD47H8FQQLEWZMQNPPRAVMNDAMCVMFVGWB0XRJGTMCB3MKY00NPV3KQF5WFJ984LNF96I7LS3ON6O4ES9JDVZ3ZPGD7Z8HUX221Y2EEYDHXJUNT1YL6HKFR0ONSGG0ZTQ5KQ2IMW8OOTOBOC7ZZSR3' where id=17; -update noar tt set v1='0KSFJCJ74RB0HDOS6RC38GZ7QMQMB6U86X2H24Y6UYBKJQKJ6ZXME4IJCDJYLKQYHOMLV3N2RR7AHOEHIKXUW7SSWDF2EUD5MG8B9PCRFM5ECP0CUD71T6M18CJ1IIDAAJHAZTTH3MDDBYGSE1QXOPBBA51IYAKKWKGBSO7ZP2FHIEXZVCSK9IDC1W54UARPQISV35MHFG9WD3OMGFALDO97OXKPRP3ZXS2R1TFQ6INRHRFHP1TUFAFZT27QPZ2EE' where id=17; -update noar ti set v1='0KSFJCJ74RB0HDOS6RC38GZ7QMQMB6U86X2H24Y6UYBKJQKJ6ZXME4IJCDJYLKQYHOMLV3N2RR7AHOEHIKXUW7SSWDF2EUD5MG8B9PCRFM5ECP0CUD71T6M18CJ1IIDAAJHAZTTH3MDDBYGSE1QXOPBBA51IYAKKWKGBSO7ZP2FHIEXZVCSK9IDC1W54UARPQISV35MHFG9WD3OMGFALDO97OXKPRP3ZXS2R1TFQ6INRHRFHP1TUFAFZT27QPZ2EE' where id=17; -update noar tt set v2='UDT60KSPD9246V4VB66HWC7SODE7UKZFS4VLE775641EQ0HBNEKMWMMVU0H7NGS65RIETAR9T5TIWODQKJATR8G0G7KNYD7Y0KWEKTV9J5S7C6JHXHXI8I8IZ4Q14Z4580GEP1J7PWI8HQ34V1131HOTW5CEHDEVDXKMAYNO2HKT8P3B5RGM5P05UQQ5QQJ868THVSDCVLFKC9MMAYD8SBIYX1FLE9LFE9FKVSCAH8L29CF6BMN5IQOSJ64RMTAN2' where id=17; -update noar ti set v2='UDT60KSPD9246V4VB66HWC7SODE7UKZFS4VLE775641EQ0HBNEKMWMMVU0H7NGS65RIETAR9T5TIWODQKJATR8G0G7KNYD7Y0KWEKTV9J5S7C6JHXHXI8I8IZ4Q14Z4580GEP1J7PWI8HQ34V1131HOTW5CEHDEVDXKMAYNO2HKT8P3B5RGM5P05UQQ5QQJ868THVSDCVLFKC9MMAYD8SBIYX1FLE9LFE9FKVSCAH8L29CF6BMN5IQOSJ64RMTAN2' where id=17; -update noar tt set v3='W9P796ZQ6AZYXDJDMKFI4PO42JA995NAKF3NQZXT481A81R209I0XORUSBY2CS8E6SOKDAUAEXI4HFZX8F3J6CRF0B42BC0T4VEVXBODUIAIJD9AAHIFVK9O5OMHHUXI8F3EXX76ZF6ADK3MJY541V7PWJ03Q3JQWH15OVPGTQFRCPF887XSFE0XXW8HWIS6KFLPB3L0PEJYTGQ9OP71TGVGS8OY4DXX1M8Q56DK4NIMFQ46YAD3WLW6DACMGGNCZ' where id=17; -update noar ti set v3='W9P796ZQ6AZYXDJDMKFI4PO42JA995NAKF3NQZXT481A81R209I0XORUSBY2CS8E6SOKDAUAEXI4HFZX8F3J6CRF0B42BC0T4VEVXBODUIAIJD9AAHIFVK9O5OMHHUXI8F3EXX76ZF6ADK3MJY541V7PWJ03Q3JQWH15OVPGTQFRCPF887XSFE0XXW8HWIS6KFLPB3L0PEJYTGQ9OP71TGVGS8OY4DXX1M8Q56DK4NIMFQ46YAD3WLW6DACMGGNCZ' where id=17; -update noar tt set v0='J7NA8DDFOMJ87RW8GVVQ35RDBYYY9VT4PV3XELFE9T54QQFYL6JQ3SA4G3MH2S8F1EVX8JB3BS7BPCT3GAB24ZJ5JKSMVMVZ3OCP0KDBV1C6AQYES3JGKPOOQ5TQIIXYRY212G0L2QZL1PJQ4UTVYN6M6UNOUFIRY415ENKN7841SZBM2DWSUUU2N4LHAS3Q6FUOV1TO93U0P6N0P9X4PM1JWGX23BHKRO8DE6DF48I73F2JW9IMR05HOQCC27X3J' where id=18; -update noar ti set v0='J7NA8DDFOMJ87RW8GVVQ35RDBYYY9VT4PV3XELFE9T54QQFYL6JQ3SA4G3MH2S8F1EVX8JB3BS7BPCT3GAB24ZJ5JKSMVMVZ3OCP0KDBV1C6AQYES3JGKPOOQ5TQIIXYRY212G0L2QZL1PJQ4UTVYN6M6UNOUFIRY415ENKN7841SZBM2DWSUUU2N4LHAS3Q6FUOV1TO93U0P6N0P9X4PM1JWGX23BHKRO8DE6DF48I73F2JW9IMR05HOQCC27X3J' where id=18; -update noar tt set v1='MO3OA8KS7ED5CA3JOSSF68991H67ERM2W0GVLSRTX30ANIGYCZCRKV2HF8WNLJQ9T7JGL3NFP22LUVY0PKBKNSZM0R223E0QCREU2AS51EU5K9RB3QXY8AFQVDUJNFDNX3KKFK0HDWQC90I7M9NV41RKO9VIJ2XVYDLC9CIT5N63Y6D5JZ38VA4ADXZR4OA7LNI7O7HZ3CF4C0MQ3OTQTJIRNUWNXLQJOZ89S8JTC3O6WINFJXU41MVW0NKLF7S7L' where id=18; -update noar ti set v1='MO3OA8KS7ED5CA3JOSSF68991H67ERM2W0GVLSRTX30ANIGYCZCRKV2HF8WNLJQ9T7JGL3NFP22LUVY0PKBKNSZM0R223E0QCREU2AS51EU5K9RB3QXY8AFQVDUJNFDNX3KKFK0HDWQC90I7M9NV41RKO9VIJ2XVYDLC9CIT5N63Y6D5JZ38VA4ADXZR4OA7LNI7O7HZ3CF4C0MQ3OTQTJIRNUWNXLQJOZ89S8JTC3O6WINFJXU41MVW0NKLF7S7L' where id=18; -update noar tt set v2='KC7OAY1ZX24X7I78TFM797E9P0NGC4VUCDCRWG5ZU9DD6E0O901FB8EH2GRMUO15EZLFMDQPX6T43ODLSVNWE95TN4V5Q0DYAIRMZEUJK515F5NKAPN9WJB34BWKGUQ4QRX0U6EQMXTVK5DGFL0YGDT2JO1WIEIJZBBZQKRUBF8K1HPI2ODGQ95CLB4DNF4BLYLIBXUE9UWD6F0CDLLQ3U8CLKWO5IQPE9XBGU853LOUXPNLE57F0G84QIHGIA7RO' where id=18; -update noar ti set v2='KC7OAY1ZX24X7I78TFM797E9P0NGC4VUCDCRWG5ZU9DD6E0O901FB8EH2GRMUO15EZLFMDQPX6T43ODLSVNWE95TN4V5Q0DYAIRMZEUJK515F5NKAPN9WJB34BWKGUQ4QRX0U6EQMXTVK5DGFL0YGDT2JO1WIEIJZBBZQKRUBF8K1HPI2ODGQ95CLB4DNF4BLYLIBXUE9UWD6F0CDLLQ3U8CLKWO5IQPE9XBGU853LOUXPNLE57F0G84QIHGIA7RO' where id=18; -update noar tt set v3='EUJNGCYJ6PVHSKBAF8F990V4LS87E0USG55RIS0T3HXHAU5JVEJQ0HQ8BGJT1CT2MNW2WL96K8K26KOHOMCHAP8T9NH4MZXSHWW8ZMA7VNAJ46ZTFZ5PHUGZX1T4B7RAM66HSCHNQ1631RP2SDQC3WN72LDQYW9O7TJ4UJXDWWGEPX5XPQ5KQZP6KH7FIAL2C4WIGG16F4TND40PFX6TFK0JXPBNBQ6YY69C4PAXYMIPBZV3S7D7KYBC0047BDS4U' where id=18; -update noar ti set v3='EUJNGCYJ6PVHSKBAF8F990V4LS87E0USG55RIS0T3HXHAU5JVEJQ0HQ8BGJT1CT2MNW2WL96K8K26KOHOMCHAP8T9NH4MZXSHWW8ZMA7VNAJ46ZTFZ5PHUGZX1T4B7RAM66HSCHNQ1631RP2SDQC3WN72LDQYW9O7TJ4UJXDWWGEPX5XPQ5KQZP6KH7FIAL2C4WIGG16F4TND40PFX6TFK0JXPBNBQ6YY69C4PAXYMIPBZV3S7D7KYBC0047BDS4U' where id=18; -update noar tt set v0='P05IYRHSPYQZRFCOM1WVHVDCWFYHVN0DVJBLZ6JD3MEBA7416LIQX91OVGEG4BZK9DNE0EM3FEPQ7O3BDULAH86E2CYYAPKNP4CMZ24H0VV6QJQVHM2ED7W0CGWUCXH1R1UFN3ZZ9TAH9K5YLMNPVCU8IUPZ3E5GUWVH1XP5AFA00O4R0IW0W23AYAHTOQBLG96VGI815JWXKSICM6VYOVJZZC3HTCN5RG0XMX1YRQJR8EWIOEDK2N4W3J4G9PMJ3' where id=19; -update noar ti set v0='P05IYRHSPYQZRFCOM1WVHVDCWFYHVN0DVJBLZ6JD3MEBA7416LIQX91OVGEG4BZK9DNE0EM3FEPQ7O3BDULAH86E2CYYAPKNP4CMZ24H0VV6QJQVHM2ED7W0CGWUCXH1R1UFN3ZZ9TAH9K5YLMNPVCU8IUPZ3E5GUWVH1XP5AFA00O4R0IW0W23AYAHTOQBLG96VGI815JWXKSICM6VYOVJZZC3HTCN5RG0XMX1YRQJR8EWIOEDK2N4W3J4G9PMJ3' where id=19; -update noar tt set v1='05F4SCFZ9ROHGZRW53MRW2VH23UNYZXB4UO4O45OK9LVPWNWNFSUC9Q0L8Y7NAUJA8XN2WK5JL6DWSHP9563QB911OO190DHVGWWGI3DQZCP0E2Z1SHIE4YVYQG66D1GA74UQ579E9O3O64I6BC8G6DSNAMGBDZF0X5KS6XEK3V6M2XE3HL3D5PG9N1PRDFNKWDG7YG6EH9XEIW6OLGR6XFDDDPWFQ40Y04XQZ94P5VVECWZW99UYXM8O9C1G1WRD' where id=19; -update noar ti set v1='05F4SCFZ9ROHGZRW53MRW2VH23UNYZXB4UO4O45OK9LVPWNWNFSUC9Q0L8Y7NAUJA8XN2WK5JL6DWSHP9563QB911OO190DHVGWWGI3DQZCP0E2Z1SHIE4YVYQG66D1GA74UQ579E9O3O64I6BC8G6DSNAMGBDZF0X5KS6XEK3V6M2XE3HL3D5PG9N1PRDFNKWDG7YG6EH9XEIW6OLGR6XFDDDPWFQ40Y04XQZ94P5VVECWZW99UYXM8O9C1G1WRD' where id=19; -update noar tt set v2='6OIMVHGV4MQI6G7BFJS0WK553G7N1TU176FN6ERI6CEPNM59QAFE4XEODP1N0SS5CSQ71C97ACW3DJ0QJ9BBPETGS6K97IC0ZGQHB7G8O3EEW49NZLOB2KDYC8MU8ALC7W0E7H1WVLZDTK5M1TBFVEBRRV793921INLUP40D3GY70TFJ2FAT8NNRQZGEDJO1JE62JCBPO29P3S50SS4FHLNQMOBTF0QTTLY8D2FM2JL2AQYZSZM9UK9C8XWJLWYPL' where id=19; -update noar ti set v2='6OIMVHGV4MQI6G7BFJS0WK553G7N1TU176FN6ERI6CEPNM59QAFE4XEODP1N0SS5CSQ71C97ACW3DJ0QJ9BBPETGS6K97IC0ZGQHB7G8O3EEW49NZLOB2KDYC8MU8ALC7W0E7H1WVLZDTK5M1TBFVEBRRV793921INLUP40D3GY70TFJ2FAT8NNRQZGEDJO1JE62JCBPO29P3S50SS4FHLNQMOBTF0QTTLY8D2FM2JL2AQYZSZM9UK9C8XWJLWYPL' where id=19; -update noar tt set v3='34RDPZPFXV6K7SR2X6CIUMEJY8ZKI5RJ6AAF11FPO9KKDO2RRJGQN8SRUHA47WOS1CMP065FPKFB5A8O4N9ISAXWCZ9I2TMC641XP10SJYHMYTNMDSOUXKJOYJHHW3BR86TQ9A5BMD9ADK03EHMAXDU5FMK2XA8P5HGX7FYXMVL7NY3YDMA26HHQYHQLDH15AJHZWHNHT10Y83E763DOEVF8CVWPPTE9G9S9LZJCGU3T55M7MKI1PNULMTE1LZUSC' where id=19; -update noar ti set v3='34RDPZPFXV6K7SR2X6CIUMEJY8ZKI5RJ6AAF11FPO9KKDO2RRJGQN8SRUHA47WOS1CMP065FPKFB5A8O4N9ISAXWCZ9I2TMC641XP10SJYHMYTNMDSOUXKJOYJHHW3BR86TQ9A5BMD9ADK03EHMAXDU5FMK2XA8P5HGX7FYXMVL7NY3YDMA26HHQYHQLDH15AJHZWHNHT10Y83E763DOEVF8CVWPPTE9G9S9LZJCGU3T55M7MKI1PNULMTE1LZUSC' where id=19; -update noar tt set v0='R0JF5O8W9C6EFOULZRNJ66WBXRN7FPIS5JMPYK44SMTCOEDN18P2MNBEUSMIFOMDUR48RB5DUSODRO5U2JSWK16N8EEC96B8XGGI4I6KEAM3EQX6320BHVSQMN5EDUR1IVKEYV9Z8717H7X0HU6PE7VJ6WTK8S61VS84ZKJJVVIY2107SV84Y9KK64AVVQ0G56QZ5DEVLCBLQQCWIZD9Z59G6PH33285XCP9DLDNA5N7DR8CMQVEL7B9C8L3MFB0L' where id=20; -update noar ti set v0='R0JF5O8W9C6EFOULZRNJ66WBXRN7FPIS5JMPYK44SMTCOEDN18P2MNBEUSMIFOMDUR48RB5DUSODRO5U2JSWK16N8EEC96B8XGGI4I6KEAM3EQX6320BHVSQMN5EDUR1IVKEYV9Z8717H7X0HU6PE7VJ6WTK8S61VS84ZKJJVVIY2107SV84Y9KK64AVVQ0G56QZ5DEVLCBLQQCWIZD9Z59G6PH33285XCP9DLDNA5N7DR8CMQVEL7B9C8L3MFB0L' where id=20; -update noar tt set v1='VGMCHGSZZR6TX86S67VLOZAOANYQ6CBIISLDT2ZHYYQSHNCA14VET1TKCJC2AY71A6ZXQAM1B1Z269IWAORAOX0I0M3L9Q6RYK8M80UHY4SWQK11KBP63GIG3PP8OF9MCBQBZO6C32Z6LBTMLIIT0AUW8FTYWADEMEZDSIVTG3HWRR1X7HGYC3VVHGNKRH6YH9SJ9AZOSJB4LV59CMDN81T3R3770ONHRD5IZEY2A3PK04NJVSBMZI7NFN55C49ZJ' where id=20; -update noar ti set v1='VGMCHGSZZR6TX86S67VLOZAOANYQ6CBIISLDT2ZHYYQSHNCA14VET1TKCJC2AY71A6ZXQAM1B1Z269IWAORAOX0I0M3L9Q6RYK8M80UHY4SWQK11KBP63GIG3PP8OF9MCBQBZO6C32Z6LBTMLIIT0AUW8FTYWADEMEZDSIVTG3HWRR1X7HGYC3VVHGNKRH6YH9SJ9AZOSJB4LV59CMDN81T3R3770ONHRD5IZEY2A3PK04NJVSBMZI7NFN55C49ZJ' where id=20; -update noar tt set v2='84QXI3JETHU11TT5V9RYRZQQY74DOMWYF3HUY23HZZSHIS8AWTE82I53MR4E8K97HQXRAELLXOS2ODA1DDLP357IBFH01XX0SHZIYR6IOL2UUI39Z5FPOL8LBICXG9F8QXYLJY7QWB5YKK8PWQSNDG1ATEXYCKWP18J9R1I4CFE0R6US90USQUXI31O82SJYNAN809F8IQ6YREECUGPJG55SWVPKB4O9UW7RA2DYPJ73EKJG1D9Z7VL1ZCWN5GLYG' where id=20; -update noar ti set v2='84QXI3JETHU11TT5V9RYRZQQY74DOMWYF3HUY23HZZSHIS8AWTE82I53MR4E8K97HQXRAELLXOS2ODA1DDLP357IBFH01XX0SHZIYR6IOL2UUI39Z5FPOL8LBICXG9F8QXYLJY7QWB5YKK8PWQSNDG1ATEXYCKWP18J9R1I4CFE0R6US90USQUXI31O82SJYNAN809F8IQ6YREECUGPJG55SWVPKB4O9UW7RA2DYPJ73EKJG1D9Z7VL1ZCWN5GLYG' where id=20; -update noar tt set v3='CU9PRJ19A2XGY4PYIBILRCB8XY2WK7G5UEB2SBTS4AYUI33E6XGHSJ07HJMH77F1N30WQMXVPLV92BAWVJH12PMYXCOQCS44LBQ8EGVRO1NFRUNXILTCTEUU0WX0OMDK6LGYOASBU7OK9J99FVYFSPERHZDPB19V0NXWKZJ6XC6QBTAJP6XSXGAWJVNCGGQCL14XM4N5UICFCXITEL4GVJ8LVJ7Y9Y8ZZ4187Y3HNXGP81MAQZULP0LVKNOJR1JFF' where id=20; -update noar ti set v3='CU9PRJ19A2XGY4PYIBILRCB8XY2WK7G5UEB2SBTS4AYUI33E6XGHSJ07HJMH77F1N30WQMXVPLV92BAWVJH12PMYXCOQCS44LBQ8EGVRO1NFRUNXILTCTEUU0WX0OMDK6LGYOASBU7OK9J99FVYFSPERHZDPB19V0NXWKZJ6XC6QBTAJP6XSXGAWJVNCGGQCL14XM4N5UICFCXITEL4GVJ8LVJ7Y9Y8ZZ4187Y3HNXGP81MAQZULP0LVKNOJR1JFF' where id=20; -update noar tt set v0='8TRV4USLXJZ2Y042NRYC5M2IRQ5UUFC2YZFJBLPRDADRAFJSG0YQ1FD0ROSCMG4W79C3WUJC90MJGAI17PS6CWXO9Z433RGRYNKKH86VY47HLAWDIX8O6CNTDD4NSI8OKZJZZBNVREAR7JBNM9RP78AFKE88I2TFH7NROLSGLQA8Y0P2DH3NS1L8H4Q6FI8J8VMRGOJRUAC1ZA50CV11OZY7WFO34LN5AYTEMFOKXB2603P9KCXGMXOFU4ZBOHH83' where id=21; -update noar ti set v0='8TRV4USLXJZ2Y042NRYC5M2IRQ5UUFC2YZFJBLPRDADRAFJSG0YQ1FD0ROSCMG4W79C3WUJC90MJGAI17PS6CWXO9Z433RGRYNKKH86VY47HLAWDIX8O6CNTDD4NSI8OKZJZZBNVREAR7JBNM9RP78AFKE88I2TFH7NROLSGLQA8Y0P2DH3NS1L8H4Q6FI8J8VMRGOJRUAC1ZA50CV11OZY7WFO34LN5AYTEMFOKXB2603P9KCXGMXOFU4ZBOHH83' where id=21; -update noar tt set v1='RHGJ1VLS0T9N6BPSFGZXUQRM9RFGNFXTP8U3R3S7WCVTRWSB38MGUP09ZMNQGK8CQ2TUOM8L0ZMHB5IVRFWJZ1P7KC06LGGWUR4YE7HDUGNUNDZDG6ITPKBY171IJ0EP8AA68Y46AUOAM7CXCJA6QLJ8I7KLPCGT3QSCA2ORYPXTBHD4DJFR2AHE4DFUY6IOQE0BNR4KR6SL59CY0V64HERSJ0NFM80ZR4N1R9B6AP4XVHNMP02PQME78KP399ROC' where id=21; -update noar ti set v1='RHGJ1VLS0T9N6BPSFGZXUQRM9RFGNFXTP8U3R3S7WCVTRWSB38MGUP09ZMNQGK8CQ2TUOM8L0ZMHB5IVRFWJZ1P7KC06LGGWUR4YE7HDUGNUNDZDG6ITPKBY171IJ0EP8AA68Y46AUOAM7CXCJA6QLJ8I7KLPCGT3QSCA2ORYPXTBHD4DJFR2AHE4DFUY6IOQE0BNR4KR6SL59CY0V64HERSJ0NFM80ZR4N1R9B6AP4XVHNMP02PQME78KP399ROC' where id=21; -update noar tt set v2='BLGASJTXH1V5RT3L5OZXKPPHERZS0F36T88R8FSEUXVOMJY64LL2LWN10DBGW3C5PJ0C81EURUA3VSXLXN87PZXXC0LUME8AQUQ5E0G0T7U7LDO8X528607NSEXR85GWG32HFDB3M6UGPENTEIMNDR8TQGF9F9OKOVLLNZGCE8ITFFEYL5Q8SL74UM516P67424K4LQIL8NV9UE68DVA9WH8GBEODRN3NU9K367O6IS8EG6CE52G2J3AEID1WYK5Q' where id=21; -update noar ti set v2='BLGASJTXH1V5RT3L5OZXKPPHERZS0F36T88R8FSEUXVOMJY64LL2LWN10DBGW3C5PJ0C81EURUA3VSXLXN87PZXXC0LUME8AQUQ5E0G0T7U7LDO8X528607NSEXR85GWG32HFDB3M6UGPENTEIMNDR8TQGF9F9OKOVLLNZGCE8ITFFEYL5Q8SL74UM516P67424K4LQIL8NV9UE68DVA9WH8GBEODRN3NU9K367O6IS8EG6CE52G2J3AEID1WYK5Q' where id=21; -update noar tt set v3='LKMFI2U4UT5K195NK8VDDETYAXAAJPF2WRQTWAA4D5RSKKBW25UYC95ZDHZ5T34JHCDMS3P151G3S287F5XNL18ZH4WLZD4MCBRD2D0Q0V1M2ZYZHA7AX0PDGIS6DEO9QY7HF5UPAC3T7FULJY3YYWPMB7XUFWEU84K3599LEZKNC7USYYW5IMFJJLP39N24NQAA9ZEMTPFMYGKVU5HFM1VTMCIZ3ZOHUYVSKV1JY79DF8CDWS78NXY843NFEOJNM' where id=21; -update noar ti set v3='LKMFI2U4UT5K195NK8VDDETYAXAAJPF2WRQTWAA4D5RSKKBW25UYC95ZDHZ5T34JHCDMS3P151G3S287F5XNL18ZH4WLZD4MCBRD2D0Q0V1M2ZYZHA7AX0PDGIS6DEO9QY7HF5UPAC3T7FULJY3YYWPMB7XUFWEU84K3599LEZKNC7USYYW5IMFJJLP39N24NQAA9ZEMTPFMYGKVU5HFM1VTMCIZ3ZOHUYVSKV1JY79DF8CDWS78NXY843NFEOJNM' where id=21; -update noar tt set v0='49S6PQXZJXO1TSSOAXPB0W2Q33CXG4SC3U0F8DHD3SPOP06OKTMIAS9LM8LU8KZ69H47AAF9VHTM8G7YY1P2469WRFOXR0S56JM6W7QN41VQ5DFJDF3U3LAXIBPYG6QMO66WQ6KNS7HO9QX9QR9SMNLFP4KQHND021FT4A5DPW3EOZO8S9IPFLOP89WN0EOEFPFO9A3ZOYL4QZRUFUH5A6NUBF4KJZPE5FMGVX8WX1DREETUTZM6UEI8M0UY3BG8T' where id=22; -update noar ti set v0='49S6PQXZJXO1TSSOAXPB0W2Q33CXG4SC3U0F8DHD3SPOP06OKTMIAS9LM8LU8KZ69H47AAF9VHTM8G7YY1P2469WRFOXR0S56JM6W7QN41VQ5DFJDF3U3LAXIBPYG6QMO66WQ6KNS7HO9QX9QR9SMNLFP4KQHND021FT4A5DPW3EOZO8S9IPFLOP89WN0EOEFPFO9A3ZOYL4QZRUFUH5A6NUBF4KJZPE5FMGVX8WX1DREETUTZM6UEI8M0UY3BG8T' where id=22; -update noar tt set v1='VGGJ4R69QOCMZ2MVU1J5U19W0B4BF7KQYD3WY0GWWW1DXFB2B0NF4FOXQXPCU7G88XY8HP77X8WWINLH7TNWURMZ15YJI0KH2N47W6UYQPQX0A14NZQ2ROY44VGHQICCJ2VGVTE58UJPSMA4M3QJNH62MB02KC5C92Y3C1RQYAWQ3WSLMXB9SFU1MSX3RSDBA02ITJ86BWQZL6CB671QALA05PO7CIJFDOO1FEOSVSUW934XOT5TZYOCBK0WII9YT' where id=22; -update noar ti set v1='VGGJ4R69QOCMZ2MVU1J5U19W0B4BF7KQYD3WY0GWWW1DXFB2B0NF4FOXQXPCU7G88XY8HP77X8WWINLH7TNWURMZ15YJI0KH2N47W6UYQPQX0A14NZQ2ROY44VGHQICCJ2VGVTE58UJPSMA4M3QJNH62MB02KC5C92Y3C1RQYAWQ3WSLMXB9SFU1MSX3RSDBA02ITJ86BWQZL6CB671QALA05PO7CIJFDOO1FEOSVSUW934XOT5TZYOCBK0WII9YT' where id=22; -update noar tt set v2='AADJ962WUP6UOSLGT0E15CBFLGQSJGIYSE5OBENUKLH57P5P5VKV5KUYAHV6OH5QHDQFAP9VH47HFTH4QLBMG3D7GH550F0VQFOLDC61BS568152S1SIXZR8YFZNHROMQP76GODLNBDIS8PAW26HW0F1LVKW4T4IVG4P5N006LM8X15E02RX6KWDF3LCFTZLMTDD2V02QF44ZZ8G8EV2GDYMPYHPP56QB872RRRUQ2LHIKEBML5MTXJB070R8396Z' where id=22; -update noar ti set v2='AADJ962WUP6UOSLGT0E15CBFLGQSJGIYSE5OBENUKLH57P5P5VKV5KUYAHV6OH5QHDQFAP9VH47HFTH4QLBMG3D7GH550F0VQFOLDC61BS568152S1SIXZR8YFZNHROMQP76GODLNBDIS8PAW26HW0F1LVKW4T4IVG4P5N006LM8X15E02RX6KWDF3LCFTZLMTDD2V02QF44ZZ8G8EV2GDYMPYHPP56QB872RRRUQ2LHIKEBML5MTXJB070R8396Z' where id=22; -update noar tt set v3='17MVMQ8RCO0PFAYPKMXA1ZKCDLEW9HMR5TK0QGXCYW4C3I5U1HNUABCLUN0VSQ9FN7O5NRMEQAQW73FM46F9UO3QBX7IMWNQRWGWW5QEAB9AE07GIUE962FDO80TH571EZZBP7J81E5V8UNITPTRVFEMZRZT3G7M0918AW59N9HDQYANVI0TVX0G9YDDU4Q0FJYI3L2PXL9NJ84XH43L6NQY73WYLOXP9N0YC1Y9IVLPV9GWIR2MU0KKXDAIMEVQ5' where id=22; -update noar ti set v3='17MVMQ8RCO0PFAYPKMXA1ZKCDLEW9HMR5TK0QGXCYW4C3I5U1HNUABCLUN0VSQ9FN7O5NRMEQAQW73FM46F9UO3QBX7IMWNQRWGWW5QEAB9AE07GIUE962FDO80TH571EZZBP7J81E5V8UNITPTRVFEMZRZT3G7M0918AW59N9HDQYANVI0TVX0G9YDDU4Q0FJYI3L2PXL9NJ84XH43L6NQY73WYLOXP9N0YC1Y9IVLPV9GWIR2MU0KKXDAIMEVQ5' where id=22; -update noar tt set v0='6GYJ3TQ7GG360E76XG8CCE7M9UPY89FTLSWNJY8WDZOZ24IYJ2LUBT7BOW315Z04Y4XD04R0X5TLYWQZN246EUFXU44MVPHY3QLXFLMRCHLPUYOE3KQ3XO34X0YXP2Z2IPECO745VX710O72KES736RC8BQ91EWXEDV413H5C709WS068YEIWJTC6N15ZYLRVNJ4XB721ZBFS5AL985VYRQ6QYH0KKFIQTQQQXSH6YIWDYGIMZYMYMRWXAR5V9IZV' where id=23; -update noar ti set v0='6GYJ3TQ7GG360E76XG8CCE7M9UPY89FTLSWNJY8WDZOZ24IYJ2LUBT7BOW315Z04Y4XD04R0X5TLYWQZN246EUFXU44MVPHY3QLXFLMRCHLPUYOE3KQ3XO34X0YXP2Z2IPECO745VX710O72KES736RC8BQ91EWXEDV413H5C709WS068YEIWJTC6N15ZYLRVNJ4XB721ZBFS5AL985VYRQ6QYH0KKFIQTQQQXSH6YIWDYGIMZYMYMRWXAR5V9IZV' where id=23; -update noar tt set v1='CVJWYFWYSZL79KSZPCVR1JT9XO7WJ2HQ07Y4LMWO4UKY1IFDPY17O75AM7EZ0J2NDMU3RUY38I45EBLXCH5L7PKDJNASQC4DDVHN3RU1ZYHH7BMQAA2PH26X7EVS63K5BCQPR6JSR6MUYA2HDNNEU15FCQCE1JPHBW4596G06XRSKQR4AVANM0WYN15SYTXKNMHKO2ZSV78HBL2PYDI9GMNWZA19MNTXVX49HSA0AWXC7RL7R4GQS1V5B54255LK6' where id=23; -update noar ti set v1='CVJWYFWYSZL79KSZPCVR1JT9XO7WJ2HQ07Y4LMWO4UKY1IFDPY17O75AM7EZ0J2NDMU3RUY38I45EBLXCH5L7PKDJNASQC4DDVHN3RU1ZYHH7BMQAA2PH26X7EVS63K5BCQPR6JSR6MUYA2HDNNEU15FCQCE1JPHBW4596G06XRSKQR4AVANM0WYN15SYTXKNMHKO2ZSV78HBL2PYDI9GMNWZA19MNTXVX49HSA0AWXC7RL7R4GQS1V5B54255LK6' where id=23; -update noar tt set v2='6ZLJ1ORHQTCYPNWA5JJKNUUI1D2B1VSHAEBRA4B8ZBU4NRKJX24ZWECOHIOCIUOS9NCBQHT4BTSOEBDYSECXKLDR7THFZS35L1WQ7DQDDZZBIMB7PEZQQ27XXNDR0WYA3TT17KZV4IQ9JOIOVXHCYTQ2S6ZQ1GIWQ9JN5HQ8ULCTG9PZP490JAAVBVDSNKTDL4T1ROUSV4JIN90R1LW629Y73E60550M4P7ES2E8IU3ES058SGS34Z5AKG4MDUZ8O' where id=23; -update noar ti set v2='6ZLJ1ORHQTCYPNWA5JJKNUUI1D2B1VSHAEBRA4B8ZBU4NRKJX24ZWECOHIOCIUOS9NCBQHT4BTSOEBDYSECXKLDR7THFZS35L1WQ7DQDDZZBIMB7PEZQQ27XXNDR0WYA3TT17KZV4IQ9JOIOVXHCYTQ2S6ZQ1GIWQ9JN5HQ8ULCTG9PZP490JAAVBVDSNKTDL4T1ROUSV4JIN90R1LW629Y73E60550M4P7ES2E8IU3ES058SGS34Z5AKG4MDUZ8O' where id=23; -update noar tt set v3='POZ605KQ10GA7A7056U6F1UTKYGEEKS56VSLI9SVIAQW8AMGC7O0DNMUMTJDX3WE6B47I9EQB79XS5MGHXSZHMODMJG89XVVM210YK1WQMWNY1EYW95Z9LOV1Z1TPEF862IIYIB31KV5HF2A4BNOK02T4197ZL90DVB9XU8AYBHJCVOR7Y0HZOEZY0GUH5NSSJ7GG41PPW4M8ZMV0OKBPN51I2JBJWJK277IBCPLKVCJBN0CEHPZBQG06LOV831HJ' where id=23; -update noar ti set v3='POZ605KQ10GA7A7056U6F1UTKYGEEKS56VSLI9SVIAQW8AMGC7O0DNMUMTJDX3WE6B47I9EQB79XS5MGHXSZHMODMJG89XVVM210YK1WQMWNY1EYW95Z9LOV1Z1TPEF862IIYIB31KV5HF2A4BNOK02T4197ZL90DVB9XU8AYBHJCVOR7Y0HZOEZY0GUH5NSSJ7GG41PPW4M8ZMV0OKBPN51I2JBJWJK277IBCPLKVCJBN0CEHPZBQG06LOV831HJ' where id=23; -update noar tt set v0='3QUJA2NN8LQ8IUUQ6I94GGKVJC90EHLOFD6BADS49P1RBXIK1C4OEG86PVC82QNPIGM17GJD6TEMH57N5PMWIJTU1PZBE9PMESNRQMCG6K6TYJ0OPTQRP3Y6488GL168DMBII2FYURECXG5MQ2KM06D00JND1YMNFLG4I2QDHJKC8DFSS3WI3R01HXPK5ZA36V4T5CK3PBYPPKZPJBN8YFVQ2VWACYVKRTG1TZJV2J7006JL24LIBPEIDI0DDG3ZQ' where id=24; -update noar ti set v0='3QUJA2NN8LQ8IUUQ6I94GGKVJC90EHLOFD6BADS49P1RBXIK1C4OEG86PVC82QNPIGM17GJD6TEMH57N5PMWIJTU1PZBE9PMESNRQMCG6K6TYJ0OPTQRP3Y6488GL168DMBII2FYURECXG5MQ2KM06D00JND1YMNFLG4I2QDHJKC8DFSS3WI3R01HXPK5ZA36V4T5CK3PBYPPKZPJBN8YFVQ2VWACYVKRTG1TZJV2J7006JL24LIBPEIDI0DDG3ZQ' where id=24; -update noar tt set v1='MV6VYZX7XFAH09ONK2APDARSW4VU02XPQSZKOFK3SLQKLD7I6O32FTL8T2UC1AH059ZTDGY7SBCLMU4E88A25FH5I5UAEK62BDXLIDUW6SVFBI9RYTU330BT6YKJ4AZSKBE2AALD676ZANCQCD3628LXJUM9HDF96E9FC05WTYXGYPFTAMIJY9CZMSNPRIGI6Y1R8MTV0M6J9370U25YG3VF3LT27AVYEUPKBBCVUINFXTM9TL1YUO06KE0AG50U0' where id=24; -update noar ti set v1='MV6VYZX7XFAH09ONK2APDARSW4VU02XPQSZKOFK3SLQKLD7I6O32FTL8T2UC1AH059ZTDGY7SBCLMU4E88A25FH5I5UAEK62BDXLIDUW6SVFBI9RYTU330BT6YKJ4AZSKBE2AALD676ZANCQCD3628LXJUM9HDF96E9FC05WTYXGYPFTAMIJY9CZMSNPRIGI6Y1R8MTV0M6J9370U25YG3VF3LT27AVYEUPKBBCVUINFXTM9TL1YUO06KE0AG50U0' where id=24; -update noar tt set v2='QH1U8J2ANLNCTQYX7ZXTN2JZ2BM65HGXMXW1H5URGRSR1Y8V6ERUFKTG08HSM5GX8AW01BMJEPNO5GIJRXEGN2KY8PZVK4SF07VS0QOEA24W5RB9XUXUFBTHDGS21DU7WH70CKI8IG2MFR0VTXXVVVEX9GITV5D7U2Y99PF1ECE7RPKGFO0JMZFCTVEENFVG4UQEUYNE8BMVKPXP55U81KVGFQPN87LOJNZCA8KFWCEJ7LNP96UPE43NI3I6O5SM5' where id=24; -update noar ti set v2='QH1U8J2ANLNCTQYX7ZXTN2JZ2BM65HGXMXW1H5URGRSR1Y8V6ERUFKTG08HSM5GX8AW01BMJEPNO5GIJRXEGN2KY8PZVK4SF07VS0QOEA24W5RB9XUXUFBTHDGS21DU7WH70CKI8IG2MFR0VTXXVVVEX9GITV5D7U2Y99PF1ECE7RPKGFO0JMZFCTVEENFVG4UQEUYNE8BMVKPXP55U81KVGFQPN87LOJNZCA8KFWCEJ7LNP96UPE43NI3I6O5SM5' where id=24; -update noar tt set v3='ESWBWQFN08XQZPMYWEV4UFL0F3321YHBM3OOC1141L3RCP9O213EAY41PS2384FSLI7U0JKCJVNHXN1CCBHJXDDAACET0XILTGP2X4PF4WA5AK4P5XJH8HF74PP6N83WKCI67BO6Z08Q0VB2ZB0F3WYFJPCAMSTG9HDGYSSM0B42LDWQEY91ZMCREVLSLUKAB8PUHLCVNBN8YJFE8877XG8MNUXA7T193Q7OMYZD0OKMRT11SLTXKBRB8ML8B0Y8Z' where id=24; -update noar ti set v3='ESWBWQFN08XQZPMYWEV4UFL0F3321YHBM3OOC1141L3RCP9O213EAY41PS2384FSLI7U0JKCJVNHXN1CCBHJXDDAACET0XILTGP2X4PF4WA5AK4P5XJH8HF74PP6N83WKCI67BO6Z08Q0VB2ZB0F3WYFJPCAMSTG9HDGYSSM0B42LDWQEY91ZMCREVLSLUKAB8PUHLCVNBN8YJFE8877XG8MNUXA7T193Q7OMYZD0OKMRT11SLTXKBRB8ML8B0Y8Z' where id=24; -update noar tt set v0='81J30FMX1T09PIXYANJ2LXXOOXW8O9SP6ZZD9N18TAOMFTY0KLRVEDAHJQFKJGEMLQ1VF1UFBOKQW1PFIZ7D532UT9SQR0D8G125Z0YKVAMOBV679VPOCHA5D5MHXNZ1VKNH4Q2ERAVH4X13TVGBXAKZMU6GT50VYXBN6D649KBJ7MV11MOUWL7Y4H1N1M2KKVDQ0FFIXEWFEMSMNR0LGAVAYUSUAPRHA5VOMNX0I9JO3BT7ZTJFG0PH67S7P9QG5' where id=25; -update noar ti set v0='81J30FMX1T09PIXYANJ2LXXOOXW8O9SP6ZZD9N18TAOMFTY0KLRVEDAHJQFKJGEMLQ1VF1UFBOKQW1PFIZ7D532UT9SQR0D8G125Z0YKVAMOBV679VPOCHA5D5MHXNZ1VKNH4Q2ERAVH4X13TVGBXAKZMU6GT50VYXBN6D649KBJ7MV11MOUWL7Y4H1N1M2KKVDQ0FFIXEWFEMSMNR0LGAVAYUSUAPRHA5VOMNX0I9JO3BT7ZTJFG0PH67S7P9QG5' where id=25; -update noar tt set v1='3GT2T6AUI87IJ6XYTOPKBK5X574LWH9MQP9M6Q6IQNS5AVBH3SKEKQMD1K0KQ2B8YFVY5OH7RMN2S7XAN3QAL9SFOTSGO7B6A4SSKCLPHP96MQEQX3NKM876AJ52BO3LSUVB5VWDJ3PPPNVHRE9N7FFOSWTDNTEZQQLKQ0MH74MQTB1TBT77LBM3MAF1CDH6UC16OX4A2F891R4KYJ9CG6VADM38XHY5TGSAYW3LDGFTD9REG2J2P612U169RCE2Y' where id=25; -update noar ti set v1='3GT2T6AUI87IJ6XYTOPKBK5X574LWH9MQP9M6Q6IQNS5AVBH3SKEKQMD1K0KQ2B8YFVY5OH7RMN2S7XAN3QAL9SFOTSGO7B6A4SSKCLPHP96MQEQX3NKM876AJ52BO3LSUVB5VWDJ3PPPNVHRE9N7FFOSWTDNTEZQQLKQ0MH74MQTB1TBT77LBM3MAF1CDH6UC16OX4A2F891R4KYJ9CG6VADM38XHY5TGSAYW3LDGFTD9REG2J2P612U169RCE2Y' where id=25; -update noar tt set v2='XHJZRRUSIDVND93JGKWH3J1OS4F1N32WRKP74BTN9RZF2VWEAO2TBB4KNNE6AH3MHYMYFJO1E6Y3EUQBYL7BVYUWBQ0JZGNWMFVT4V3N1EQ8XPICM2970BMOAI0VDXODSAZOS4RLTPEEQ85GWYH7F9Y8DBOIYLPSVAMDW5QC22Q8U5TY91W2K3B8ITESTAGQ6INC6IPZ3PGYZH90LLM8RKU68EETU2Z3RFTA0YGSFFLZ8HQ5OTP5W4H2W9DTGEUN4' where id=25; -update noar ti set v2='XHJZRRUSIDVND93JGKWH3J1OS4F1N32WRKP74BTN9RZF2VWEAO2TBB4KNNE6AH3MHYMYFJO1E6Y3EUQBYL7BVYUWBQ0JZGNWMFVT4V3N1EQ8XPICM2970BMOAI0VDXODSAZOS4RLTPEEQ85GWYH7F9Y8DBOIYLPSVAMDW5QC22Q8U5TY91W2K3B8ITESTAGQ6INC6IPZ3PGYZH90LLM8RKU68EETU2Z3RFTA0YGSFFLZ8HQ5OTP5W4H2W9DTGEUN4' where id=25; -update noar tt set v3='0BBEXG0WRACW3QWPFZE5WBQE6YQZZRNKJVG8RIWSANUVX4I0ETMERYTF899OKN9CYKHTSBKPR9L6NGB57Z0VSSZGETFPULIT3C6BMZ045FYOI4TFTCF6WWSJ1LDZ2BAPR74SQSCC2PDM0ZXM4E8YVAV33H52L6ZD4JV0JY7SNAXVOC5R0BA4491SPA3H1AJREZV863VANHM2LYO0AW78SF0IG68SKW2NMFJAJXRS48PDORNSQ85N9TIAOS83NLSTQ' where id=25; -update noar ti set v3='0BBEXG0WRACW3QWPFZE5WBQE6YQZZRNKJVG8RIWSANUVX4I0ETMERYTF899OKN9CYKHTSBKPR9L6NGB57Z0VSSZGETFPULIT3C6BMZ045FYOI4TFTCF6WWSJ1LDZ2BAPR74SQSCC2PDM0ZXM4E8YVAV33H52L6ZD4JV0JY7SNAXVOC5R0BA4491SPA3H1AJREZV863VANHM2LYO0AW78SF0IG68SKW2NMFJAJXRS48PDORNSQ85N9TIAOS83NLSTQ' where id=25; -update noar tt set v0='AELV5TY2XKP26JTBTS5Z90TPMUT6233ONJXMFAPEDVEIF9RNC6TB9TRP0WLRUZJ0UZK9JU9EXML437K2WNF1P2EA8P4LD5VEG5TFF46RGTRPI5OI6V1POQF8UFEATKYL9W87IVH9YG1CCSWPG8JGIRBRQF0A04BG6RSCTNYDKRC4ZH5596V7EP8SKLC2F49JW04LVOS9J643EJ77X8NR8PWH3PMVGJ9D9JSSO5YIBFUY7C426CO0S12C04MS7LK96' where id=26; -update noar ti set v0='AELV5TY2XKP26JTBTS5Z90TPMUT6233ONJXMFAPEDVEIF9RNC6TB9TRP0WLRUZJ0UZK9JU9EXML437K2WNF1P2EA8P4LD5VEG5TFF46RGTRPI5OI6V1POQF8UFEATKYL9W87IVH9YG1CCSWPG8JGIRBRQF0A04BG6RSCTNYDKRC4ZH5596V7EP8SKLC2F49JW04LVOS9J643EJ77X8NR8PWH3PMVGJ9D9JSSO5YIBFUY7C426CO0S12C04MS7LK96' where id=26; -update noar tt set v1='52VDF6V2BHAIANC339MVMDK20XLMHFNTERDXCIZRTFGQS2TNL9F1F2MA7HN97RNKUH3EOAZ58ZUVCM1XW0TBBQO69ZEFM4T51RPYJ1F3S4QT1IZVWN4VPF0IHP7IBF0VSR6V11EBYZHDGRZQ589DJ4RMWQAO1A36PK4Q0A1W2MQ2RIAUP9H4J5T0TSPSQWTS8DOVV3EK920F8OOHUAPB9NOJVA0SF4JXJB8MX8605AAYB5E341041VMSZ9RC08YFN' where id=26; -update noar ti set v1='52VDF6V2BHAIANC339MVMDK20XLMHFNTERDXCIZRTFGQS2TNL9F1F2MA7HN97RNKUH3EOAZ58ZUVCM1XW0TBBQO69ZEFM4T51RPYJ1F3S4QT1IZVWN4VPF0IHP7IBF0VSR6V11EBYZHDGRZQ589DJ4RMWQAO1A36PK4Q0A1W2MQ2RIAUP9H4J5T0TSPSQWTS8DOVV3EK920F8OOHUAPB9NOJVA0SF4JXJB8MX8605AAYB5E341041VMSZ9RC08YFN' where id=26; -update noar tt set v2='JHKKDWD0I2ISHDQBJGISUS6ZYYVQF9HF0FWX24NSCU8E1K5VRH8WZRP5SY5XVCUZVXS9AUH8CWIIXVQ728T0W47HJ7KR3YVY69WSTHIHI9YML9NJZ88HB1J4ZE91CXNHEPMRMD9YYG69C1H6T87T3E8BCP13882XX8VEY2SSZR2C580VN4PL0F0DE726DALIC7I0G6N3520HMCSGMHUVJLAFNWQB5RP4NM593OD6GNM2C1PB1G6JMUBX3G87J19GS' where id=26; -update noar ti set v2='JHKKDWD0I2ISHDQBJGISUS6ZYYVQF9HF0FWX24NSCU8E1K5VRH8WZRP5SY5XVCUZVXS9AUH8CWIIXVQ728T0W47HJ7KR3YVY69WSTHIHI9YML9NJZ88HB1J4ZE91CXNHEPMRMD9YYG69C1H6T87T3E8BCP13882XX8VEY2SSZR2C580VN4PL0F0DE726DALIC7I0G6N3520HMCSGMHUVJLAFNWQB5RP4NM593OD6GNM2C1PB1G6JMUBX3G87J19GS' where id=26; -update noar tt set v3='R3R8U0P7ULLNNJRKJXZEB4QA5D5DGNCQSQ98JEY8PAZS15C2SPO7RWNXIPCWXG3OWFVAMJ8AXMX5HLH4DXX6M2884DSC99RCV501FC96VBYCA6JWNH9CMYQGNTI5GM3HNEU1OTT18SI03XOX6AELE98UKUFD8J0967FPN3NLIENEEKLQKH1KUXQOY20EZNXE8T2LPQ6XIYQPYRD6L29YDMRSLVWLB39WXLBT4ZV8G1IQQD4PAHYBZHIQH07C1XJ1Z' where id=26; -update noar ti set v3='R3R8U0P7ULLNNJRKJXZEB4QA5D5DGNCQSQ98JEY8PAZS15C2SPO7RWNXIPCWXG3OWFVAMJ8AXMX5HLH4DXX6M2884DSC99RCV501FC96VBYCA6JWNH9CMYQGNTI5GM3HNEU1OTT18SI03XOX6AELE98UKUFD8J0967FPN3NLIENEEKLQKH1KUXQOY20EZNXE8T2LPQ6XIYQPYRD6L29YDMRSLVWLB39WXLBT4ZV8G1IQQD4PAHYBZHIQH07C1XJ1Z' where id=26; -update noar tt set v0='14SQ6M9B8T18XUN95SQCSS0L8VTKEJD4EBEN4WXSQRMGIUHR0TTHQ9CB0DT5NVH2F1J2OJHL98DAL3UUCUSW80GYGEOB0JMO8F285KBSW4GTM6ZV45NAS4QXSQZFMGM44W964474CBUMYUXMZ4X2279XZ0VKUS6JQUHUDG2OWOLS4SE94W3ES4B180HRU7TG5FQEHEP7RYXGETB4LY37PEM7B4BPTQA9V8H1E4PPLYSROWVBTROMBFQWYKBL6LWU4' where id=27; -update noar ti set v0='14SQ6M9B8T18XUN95SQCSS0L8VTKEJD4EBEN4WXSQRMGIUHR0TTHQ9CB0DT5NVH2F1J2OJHL98DAL3UUCUSW80GYGEOB0JMO8F285KBSW4GTM6ZV45NAS4QXSQZFMGM44W964474CBUMYUXMZ4X2279XZ0VKUS6JQUHUDG2OWOLS4SE94W3ES4B180HRU7TG5FQEHEP7RYXGETB4LY37PEM7B4BPTQA9V8H1E4PPLYSROWVBTROMBFQWYKBL6LWU4' where id=27; -update noar tt set v1='LTIKKUJMOU0JBSS9UD2N9D9ZVPFQD7A4F970DAV5D6T0VODSM7KSC4NS1X0YGSC7C504M66U8K4LMI5DDMCEI13YKFF2D23CQ7HAB9SFOKX2AW365WD3OW6Y9C3N2SMXTXVCMZWONGWICWYZ3YCK53MT5WYXKIOJCQLM1OVMP9VFUM7BOUUMEV4XX00FZ5N9GKGYA0TDM9M11ELCP22NCS37JGPBPXBWCDBGJL6IWHO8OLOZZ0MKS57RGEZNHOSGH' where id=27; -update noar ti set v1='LTIKKUJMOU0JBSS9UD2N9D9ZVPFQD7A4F970DAV5D6T0VODSM7KSC4NS1X0YGSC7C504M66U8K4LMI5DDMCEI13YKFF2D23CQ7HAB9SFOKX2AW365WD3OW6Y9C3N2SMXTXVCMZWONGWICWYZ3YCK53MT5WYXKIOJCQLM1OVMP9VFUM7BOUUMEV4XX00FZ5N9GKGYA0TDM9M11ELCP22NCS37JGPBPXBWCDBGJL6IWHO8OLOZZ0MKS57RGEZNHOSGH' where id=27; -update noar tt set v2='TLTNGXA7OUAJ0SGKV9PH4XTC118MCP2KESLQX77H47ICR16D70O0O2PS2P5FUP0U8Q0MTU9NKZZ8WAJA1A1JURF3JDKJZ5GOCLAJTLJG1RHYOJ86II4NQKJCZYCWWSPOFR1NEMLHJE3D664AI6VUYQ1OVKZ2EJ3GCSEUC8DUZI5GXRJY3E3SH4278V4ME0M2R9PD6VT8J7V5R5VH003LE7H8L5WORVHSG1788B928PMOUZR6SY0UYG3S3ZVYMHG2N' where id=27; -update noar ti set v2='TLTNGXA7OUAJ0SGKV9PH4XTC118MCP2KESLQX77H47ICR16D70O0O2PS2P5FUP0U8Q0MTU9NKZZ8WAJA1A1JURF3JDKJZ5GOCLAJTLJG1RHYOJ86II4NQKJCZYCWWSPOFR1NEMLHJE3D664AI6VUYQ1OVKZ2EJ3GCSEUC8DUZI5GXRJY3E3SH4278V4ME0M2R9PD6VT8J7V5R5VH003LE7H8L5WORVHSG1788B928PMOUZR6SY0UYG3S3ZVYMHG2N' where id=27; -update noar tt set v3='QC1MK2XJPJ4H86T1OSJ9P8PEI41QXDOVW6F46W2V6QR5FMG500S4GM73J3TVOHSDCZHQ9DJLI975BX8YQAKLIQNKKSWWLXVWN54WLADWY7W7BYR2MUBGMFK3RZH68EANDBEYE7YFJ6VVUR7NBCNQNDGCGNR9MEU8467U9BRR2UAKQJK1TTVWHBDEMJSGWR7G5G2H87GWNKKZB51IFV9E5TN3QS96QY1QM0RQODGZHTEEL7SKE1APD510AUCQ85KCB' where id=27; -update noar ti set v3='QC1MK2XJPJ4H86T1OSJ9P8PEI41QXDOVW6F46W2V6QR5FMG500S4GM73J3TVOHSDCZHQ9DJLI975BX8YQAKLIQNKKSWWLXVWN54WLADWY7W7BYR2MUBGMFK3RZH68EANDBEYE7YFJ6VVUR7NBCNQNDGCGNR9MEU8467U9BRR2UAKQJK1TTVWHBDEMJSGWR7G5G2H87GWNKKZB51IFV9E5TN3QS96QY1QM0RQODGZHTEEL7SKE1APD510AUCQ85KCB' where id=27; -update noar tt set v0='BM9UY69WUYPP2FSIR7DAD8M18G0V1WCLXZQ9YF3Z4AT9G02AO4P5ZJU3LOIDZ2IJY9X6ZND8SIJK258GSTKUUCD0MP29BIR3ZH2Z15YHQDAP914MU0CHY96XM3QHA61C6AJEFJOS19BP57ZYIZZNGHZ6231N4Q30F9NZDRLWMQNNH2XQNX2EU4VMIJ70QPUB5322OMBYHYT8H11095IICUI6XD1D9GDAEZO2H15DCI8TXL7HVCITTDCTVU1UMENZX' where id=28; -update noar ti set v0='BM9UY69WUYPP2FSIR7DAD8M18G0V1WCLXZQ9YF3Z4AT9G02AO4P5ZJU3LOIDZ2IJY9X6ZND8SIJK258GSTKUUCD0MP29BIR3ZH2Z15YHQDAP914MU0CHY96XM3QHA61C6AJEFJOS19BP57ZYIZZNGHZ6231N4Q30F9NZDRLWMQNNH2XQNX2EU4VMIJ70QPUB5322OMBYHYT8H11095IICUI6XD1D9GDAEZO2H15DCI8TXL7HVCITTDCTVU1UMENZX' where id=28; -update noar tt set v1='5OKWR34LOOG9BEAJU34OQHKU0M3IDR1OUKRTJPFJHFUH5KFQZMO1SNEY2UTH8HYMYP8UCC6H9I41H267VA098KKFA24G1IFGW7QCFKL7O33L4H2FO7EXA4L9V3DU79FNMG5TZMQ19DYNBJNIZ1MEUZQG2DLITIMRFTG1PIQPOWXGRUMESUTEZRN7WTLYM7BTD8MEJ2DOJZKPAWL80GS0RPWY0CVRAQR7WLAB7D256N414WXF3RK7HT3PEBQGY3DB8' where id=28; -update noar ti set v1='5OKWR34LOOG9BEAJU34OQHKU0M3IDR1OUKRTJPFJHFUH5KFQZMO1SNEY2UTH8HYMYP8UCC6H9I41H267VA098KKFA24G1IFGW7QCFKL7O33L4H2FO7EXA4L9V3DU79FNMG5TZMQ19DYNBJNIZ1MEUZQG2DLITIMRFTG1PIQPOWXGRUMESUTEZRN7WTLYM7BTD8MEJ2DOJZKPAWL80GS0RPWY0CVRAQR7WLAB7D256N414WXF3RK7HT3PEBQGY3DB8' where id=28; -update noar tt set v2='YUN0QFB9UB4C76P409QXBBVIX77MYH425FL4S3VZNPRJREJZ8V9B3SKLAWONL84HZKF4T4S9SRJKMGYNPHHEJ27C5SXCDTJ2S23DRB7O0NNJUO5ZIRKTZZASME1KYCNGKUP4LNKKWZ2XWE3U990RCDJ91D61WCX5E9TAH6OGSMK9AYALFSE3BFSHY7LFHGYOUZQJFNNX3DGX8N7CXSLU3XC7RIZCTLVMQDDTJYJGF08RNASW1KQI1EBOENNRMPNBR' where id=28; -update noar ti set v2='YUN0QFB9UB4C76P409QXBBVIX77MYH425FL4S3VZNPRJREJZ8V9B3SKLAWONL84HZKF4T4S9SRJKMGYNPHHEJ27C5SXCDTJ2S23DRB7O0NNJUO5ZIRKTZZASME1KYCNGKUP4LNKKWZ2XWE3U990RCDJ91D61WCX5E9TAH6OGSMK9AYALFSE3BFSHY7LFHGYOUZQJFNNX3DGX8N7CXSLU3XC7RIZCTLVMQDDTJYJGF08RNASW1KQI1EBOENNRMPNBR' where id=28; -update noar tt set v3='FQGWZ0W7ZCBJO3PP2GAT5IU7TEDZ77EJVP0AAPNR3WYQNAQUCANIC4FO0ALR91KWYVQY9FFKPU4WVLRCFW6DAS4UUF49ESB3WLJ2OCFI36BMXDUPJJQ4P7XPLR6DUZ8KL95990QJHPXTQU19TYV7XAKR48GMD58995CP1G4PTNDUHSIJFG3EGO1EXC24BAYOMDYCNN9AMH7EXYTESS5DMTP3JHXMUEISK7VNDRBPKZYFN67WJ2KE3TDSKF6BA7BQU' where id=28; -update noar ti set v3='FQGWZ0W7ZCBJO3PP2GAT5IU7TEDZ77EJVP0AAPNR3WYQNAQUCANIC4FO0ALR91KWYVQY9FFKPU4WVLRCFW6DAS4UUF49ESB3WLJ2OCFI36BMXDUPJJQ4P7XPLR6DUZ8KL95990QJHPXTQU19TYV7XAKR48GMD58995CP1G4PTNDUHSIJFG3EGO1EXC24BAYOMDYCNN9AMH7EXYTESS5DMTP3JHXMUEISK7VNDRBPKZYFN67WJ2KE3TDSKF6BA7BQU' where id=28; -update noar tt set v0='PR12EJBD6QG7FV4GNQ69DLY5XJX8EP8RDOR2PU9KCOKD7KHC9ENURHO3D96GI799B5ISM093XN0ROHOAKHNDRN6CFEAYXBFP00RFYJTRT6CCT2A7D15HBKMTWLVK5WAXH3KMRN3IT6LTK0ZORN9X4B2MU2N5MAPZJL2WL7L5KAECFL8I2LHNH836P6TW119IDQINDC7W4S603TSNGNRER47ATJ5Z7REEQII7B4EWMB3KX2TQ0QY8QZV591DT447PH' where id=29; -update noar ti set v0='PR12EJBD6QG7FV4GNQ69DLY5XJX8EP8RDOR2PU9KCOKD7KHC9ENURHO3D96GI799B5ISM093XN0ROHOAKHNDRN6CFEAYXBFP00RFYJTRT6CCT2A7D15HBKMTWLVK5WAXH3KMRN3IT6LTK0ZORN9X4B2MU2N5MAPZJL2WL7L5KAECFL8I2LHNH836P6TW119IDQINDC7W4S603TSNGNRER47ATJ5Z7REEQII7B4EWMB3KX2TQ0QY8QZV591DT447PH' where id=29; -update noar tt set v1='E3Z9UQF3FBTD08OF9XZJT4U4JCY6G6U5BH9GHBXVMSZYQWBFJS20Y2VI18QTHQXQWKJN78QZ6ID6B21RO5A6EE9ZCIW3430TOHALN2MTGBJNNB6909R1UXM2CZ7VSN7P3WVSA2J78TILHTC8DFGSLJ7GNCX266C2VVDE7NSPSW335FXRO95J8P697GYK6976YKWBIEZYTH7WE8FOVCHNDDM8CN7IZ6TVTTA0B55V9B56KT3DH9FOHAYYPOZX99CCE' where id=29; -update noar ti set v1='E3Z9UQF3FBTD08OF9XZJT4U4JCY6G6U5BH9GHBXVMSZYQWBFJS20Y2VI18QTHQXQWKJN78QZ6ID6B21RO5A6EE9ZCIW3430TOHALN2MTGBJNNB6909R1UXM2CZ7VSN7P3WVSA2J78TILHTC8DFGSLJ7GNCX266C2VVDE7NSPSW335FXRO95J8P697GYK6976YKWBIEZYTH7WE8FOVCHNDDM8CN7IZ6TVTTA0B55V9B56KT3DH9FOHAYYPOZX99CCE' where id=29; -update noar tt set v2='E1IZ53SPMWVTHH356XGEFAOKNMJ6RNSLPJVEEF738LOQW3T2GJOREJPDFDM9WCZ5JM1ZD1VEU5MYDOCN09H5PXDAX140GL4C1CYM9WI51BP7PPXXTMBWSR2BWL3MKJ9GUMUEU44LECULA7AYBPOIO0F1GQQLS4CMKBXE6LI1EYRQ23357K1GV7DG2QR9UYJI44DSWDXHUS8322WO9R1OBBU4U3DF11GGGAFOE2YOLUC1SB7UZUAS8FLEXXY633DX6' where id=29; -update noar ti set v2='E1IZ53SPMWVTHH356XGEFAOKNMJ6RNSLPJVEEF738LOQW3T2GJOREJPDFDM9WCZ5JM1ZD1VEU5MYDOCN09H5PXDAX140GL4C1CYM9WI51BP7PPXXTMBWSR2BWL3MKJ9GUMUEU44LECULA7AYBPOIO0F1GQQLS4CMKBXE6LI1EYRQ23357K1GV7DG2QR9UYJI44DSWDXHUS8322WO9R1OBBU4U3DF11GGGAFOE2YOLUC1SB7UZUAS8FLEXXY633DX6' where id=29; -update noar tt set v3='EHYOUSMDAJA6HFP3RN7FWVK2JHW1J3CGDG32QD93SA6BWZ3RB8YGX825H8H7KJRG7TBI2HEZV8ZV3XO9P2YFJ6R3CG1RZPWA01U2EFERK62KM6I43GFDYVTRHD59NPC1YGP1KW5EMI0J8MRQNHHUI1FBKK15YJPJR2TO16NZZGDHCI1IYE0XXDDSM52OYV9T69XBB4W8RTRDZS7KWH3YNB2R5JSKHF17EZNTY8P5OBB96T55NYHZKEE77484IB4FS' where id=29; -update noar ti set v3='EHYOUSMDAJA6HFP3RN7FWVK2JHW1J3CGDG32QD93SA6BWZ3RB8YGX825H8H7KJRG7TBI2HEZV8ZV3XO9P2YFJ6R3CG1RZPWA01U2EFERK62KM6I43GFDYVTRHD59NPC1YGP1KW5EMI0J8MRQNHHUI1FBKK15YJPJR2TO16NZZGDHCI1IYE0XXDDSM52OYV9T69XBB4W8RTRDZS7KWH3YNB2R5JSKHF17EZNTY8P5OBB96T55NYHZKEE77484IB4FS' where id=29; -update noar tt set v0='A8SOCOKOXSANBDWQVMJ4ERXE4CSFKV8D4B0KSAER0API3SJ6G6FQ8VXGFPNVOQ4OU0K2FT1Z78WK3SBTELGT7PLCJ8JE0KAVUWFXGHNMOTQQXB5GEYT0UJLFRR201TLROF3VZPSJ63N4KXSC5UWSXLLMNRBFQ78XVIXKQKFQ9QBUQV3RNUOVR9DPETTM88OZBWWW3NDSWVATQRYTFGNMEEQOO4NS8ZQ484PMLD0YUG2ENQP6M12TX11V5O8S6BEAW' where id=30; -update noar ti set v0='A8SOCOKOXSANBDWQVMJ4ERXE4CSFKV8D4B0KSAER0API3SJ6G6FQ8VXGFPNVOQ4OU0K2FT1Z78WK3SBTELGT7PLCJ8JE0KAVUWFXGHNMOTQQXB5GEYT0UJLFRR201TLROF3VZPSJ63N4KXSC5UWSXLLMNRBFQ78XVIXKQKFQ9QBUQV3RNUOVR9DPETTM88OZBWWW3NDSWVATQRYTFGNMEEQOO4NS8ZQ484PMLD0YUG2ENQP6M12TX11V5O8S6BEAW' where id=30; -update noar tt set v1='UZCU1TSDNZB5Z6R0JR916UOWDGK9OBCPA8R5XYYGXZIYRC36JF07CBNRIWYZJ4J0P695TY731DFUAIW10AHHBIOWKVET3MA1XDQUMH2AESGI7XKSYQN0802I4A9YIL7BBBGBO0RAGC5GXVOAGATVP93AFPHHWZZGKKCD1KUJ0SI158PQGZ4YA8814TS951ONGJ1FCVM7U7UII13SNCWD3QE7FAOU6G7XDFTCHAR9E5HFZNLY2V09YSLX9Y2ZB1BNS' where id=30; -update noar ti set v1='UZCU1TSDNZB5Z6R0JR916UOWDGK9OBCPA8R5XYYGXZIYRC36JF07CBNRIWYZJ4J0P695TY731DFUAIW10AHHBIOWKVET3MA1XDQUMH2AESGI7XKSYQN0802I4A9YIL7BBBGBO0RAGC5GXVOAGATVP93AFPHHWZZGKKCD1KUJ0SI158PQGZ4YA8814TS951ONGJ1FCVM7U7UII13SNCWD3QE7FAOU6G7XDFTCHAR9E5HFZNLY2V09YSLX9Y2ZB1BNS' where id=30; -update noar tt set v2='UQO8AFUSLDZKCMQAPRTEFZ3T20WLELNA0A8ALYCM52A0KWNDOAJYGNK35C6F3ZJMBLGU4ZYT0GTUHPXWT1GPCW26DQWIX4S4DS7HXKYKCLF86EAGWQCW37D3R7LZ8CLNNHW8TUU4Y028EVN93RIQGNNW9L21XX9WAHSZEWLFAMPMZXM1VI4VR7WTB8R0XOIBLZH0GFFNYF86R8CTD2H3NUGNUMKYT7ZR9QC22ZYIY9EBU9E7XDTFQI6SM6N6AY6Q0' where id=30; -update noar ti set v2='UQO8AFUSLDZKCMQAPRTEFZ3T20WLELNA0A8ALYCM52A0KWNDOAJYGNK35C6F3ZJMBLGU4ZYT0GTUHPXWT1GPCW26DQWIX4S4DS7HXKYKCLF86EAGWQCW37D3R7LZ8CLNNHW8TUU4Y028EVN93RIQGNNW9L21XX9WAHSZEWLFAMPMZXM1VI4VR7WTB8R0XOIBLZH0GFFNYF86R8CTD2H3NUGNUMKYT7ZR9QC22ZYIY9EBU9E7XDTFQI6SM6N6AY6Q0' where id=30; -update noar tt set v3='O8VP1VV8KFCC1VDBP96SC07ONPBV43RU9A939XNP18AYPKN1O7V8088VK70P3Y4TLGKNKQERUYQE2CI0RJSSNDCPIEC08GKNDOB7VEWSK5RJHNR6YPV800DXIZV9BBY0VOCQE30AHN6ZKQVW52AORWHEOHTSSHZN3MJAZZZ7MQKROJJ7SC0GP5WEBJ4CH882EWE8XWCT4UWNUCDENGOB56QXLOX9XMNBH35INO016TNCO0V2W9K39CWDDZ860MXQ2' where id=30; -update noar ti set v3='O8VP1VV8KFCC1VDBP96SC07ONPBV43RU9A939XNP18AYPKN1O7V8088VK70P3Y4TLGKNKQERUYQE2CI0RJSSNDCPIEC08GKNDOB7VEWSK5RJHNR6YPV800DXIZV9BBY0VOCQE30AHN6ZKQVW52AORWHEOHTSSHZN3MJAZZZ7MQKROJJ7SC0GP5WEBJ4CH882EWE8XWCT4UWNUCDENGOB56QXLOX9XMNBH35INO016TNCO0V2W9K39CWDDZ860MXQ2' where id=30; -update noar tt set v0='IB0Z7TPVX8Q2TA32KC6S89FE2VEB82FGEJ8L67EI5ZRRE0G0H0G3PBYJI8E2H8NSDNCU2UNY8MRM8WOY5KOU6VTN5G5O2ZPK6Z9OSD5DZ44HWJJN2AQ0VOEA21LMJ71FMI0DQ17JSTU15MUFW5N5TY5LLI6FWX8HF4W5BNO8Z5ULNGJPO18XMCIQD7Z0ROA926YQ9BLTSCICLNGIXFA7FKSTDQIVFPEY9MGFZGRRJOG26IEFFS6SGD0P4DWV1NFY9' where id=31; -update noar ti set v0='IB0Z7TPVX8Q2TA32KC6S89FE2VEB82FGEJ8L67EI5ZRRE0G0H0G3PBYJI8E2H8NSDNCU2UNY8MRM8WOY5KOU6VTN5G5O2ZPK6Z9OSD5DZ44HWJJN2AQ0VOEA21LMJ71FMI0DQ17JSTU15MUFW5N5TY5LLI6FWX8HF4W5BNO8Z5ULNGJPO18XMCIQD7Z0ROA926YQ9BLTSCICLNGIXFA7FKSTDQIVFPEY9MGFZGRRJOG26IEFFS6SGD0P4DWV1NFY9' where id=31; -update noar tt set v1='KA5048BUOODD90DRYV4B9EY1UVLK1FLT37YGK2ZCYB2CNIAFQYWPAZZE6PDZEWZX0UXYANT38QJS04Q6JWV7YOUFZIONH9EIEWTL6KPH20LQSG466782PVVEZ4LWY7U31DDNJ6AADVF38ZHC6026WNNUAMQB6HWH7K3LW6K830J6R7ZXEWWVMQRGP09Q3QSXTA62C5CFY604U8R24F0KZKS0B27LSLF5CZPSZMIXTNZE7QLEYJJ234TA6O331CEFK' where id=31; -update noar ti set v1='KA5048BUOODD90DRYV4B9EY1UVLK1FLT37YGK2ZCYB2CNIAFQYWPAZZE6PDZEWZX0UXYANT38QJS04Q6JWV7YOUFZIONH9EIEWTL6KPH20LQSG466782PVVEZ4LWY7U31DDNJ6AADVF38ZHC6026WNNUAMQB6HWH7K3LW6K830J6R7ZXEWWVMQRGP09Q3QSXTA62C5CFY604U8R24F0KZKS0B27LSLF5CZPSZMIXTNZE7QLEYJJ234TA6O331CEFK' where id=31; -update noar tt set v2='V3IWJA42H3WKWUY7RKSP5FP8NGIZD00CIAI5ZB1RMXAHROTKZPFNYAQM8JJIDFYBD5IOJM9A9JEZPWGHYRKWKBQWBT32EVV2IBHD6MYIYDC3VN36Y2JZ819U85MQDJWQL7UUKFR3MINVQKJA1P7NNJ3MX2D0DKGAOYYM4XGIEDJQG4MB8RMDVVEJMC6R5CQCR81TTL0NJG21ZSG0AKR097J5DAJYFJG8PGM00DISDZ1PXOIL0I1C7EDEFBCRVGBFU' where id=31; -update noar ti set v2='V3IWJA42H3WKWUY7RKSP5FP8NGIZD00CIAI5ZB1RMXAHROTKZPFNYAQM8JJIDFYBD5IOJM9A9JEZPWGHYRKWKBQWBT32EVV2IBHD6MYIYDC3VN36Y2JZ819U85MQDJWQL7UUKFR3MINVQKJA1P7NNJ3MX2D0DKGAOYYM4XGIEDJQG4MB8RMDVVEJMC6R5CQCR81TTL0NJG21ZSG0AKR097J5DAJYFJG8PGM00DISDZ1PXOIL0I1C7EDEFBCRVGBFU' where id=31; -update noar tt set v3='VWJAN93Y8M3HX5N6KGMQIBWU121BYJVUTM2T1X8YUYMHVWBV4LHCVLJEVZYIH0QR9O1LFY60QXM1YE7SWXW9C2J1MB9RYLG03BCLEI3ZVMJVFJDZ3A4Q7L85D5QQPBQXYI12P8NNRVQLLK4FH40RVF7WCGBP1NXU4O4NHLAWB1XJS4KBOQJZXVRL4RV62RY8R9YOQ0798CRGT06MNA6DICQTIMJLG20S78VMRR9MS0KSEU4XF0TPMM2204I91IDDR' where id=31; -update noar ti set v3='VWJAN93Y8M3HX5N6KGMQIBWU121BYJVUTM2T1X8YUYMHVWBV4LHCVLJEVZYIH0QR9O1LFY60QXM1YE7SWXW9C2J1MB9RYLG03BCLEI3ZVMJVFJDZ3A4Q7L85D5QQPBQXYI12P8NNRVQLLK4FH40RVF7WCGBP1NXU4O4NHLAWB1XJS4KBOQJZXVRL4RV62RY8R9YOQ0798CRGT06MNA6DICQTIMJLG20S78VMRR9MS0KSEU4XF0TPMM2204I91IDDR' where id=31; -update noar tt set v0='O3E5NHT1DJTJ6B1C8DTGNZUJYFHS1BVUQAN02YCRH10H6NP9PWAYUUC43MC3KE42Y5HUS1J1HIVUR5MS439C8KE3WHD26JRRU58M0L6OBMJXJNGTRM1TYWY0K6FO7BWLUUIXZ12140NIU8Z0MEZX6G8X7VXW5NMMA9R27DN1XFMD4858KY3A48LPTTLN36ZIT25K45T7XVT2VM8YIX53OIWXQVY0069ZKRU94YDM6UR2IH99IC7EX2QJ80W1S2SHK' where id=32; -update noar ti set v0='O3E5NHT1DJTJ6B1C8DTGNZUJYFHS1BVUQAN02YCRH10H6NP9PWAYUUC43MC3KE42Y5HUS1J1HIVUR5MS439C8KE3WHD26JRRU58M0L6OBMJXJNGTRM1TYWY0K6FO7BWLUUIXZ12140NIU8Z0MEZX6G8X7VXW5NMMA9R27DN1XFMD4858KY3A48LPTTLN36ZIT25K45T7XVT2VM8YIX53OIWXQVY0069ZKRU94YDM6UR2IH99IC7EX2QJ80W1S2SHK' where id=32; -update noar tt set v1='UCY7ZLOQWXX3W9GPJCOHKDO8R5I6E33JDIFY77KXR4HCZ05FUKHMU5GZ6OQI3EB48AUHV63TSP5XL80JB4BE7W62I85T28MK866TVT1583CPMS9Y6IEM2QJW8RD2837NFO8RR35DLP8OS4S88LP5U77ZM2XREJZG4AUAW7W99ZVTMBDVSKZYLNLZYIDBM6NHQ2N1TX8IJITKI8WAMVV3CTB0YB78U3ZRN8PKWMLCHVP2Z28NUVHBXHJJYD89IWF9H' where id=32; -update noar ti set v1='UCY7ZLOQWXX3W9GPJCOHKDO8R5I6E33JDIFY77KXR4HCZ05FUKHMU5GZ6OQI3EB48AUHV63TSP5XL80JB4BE7W62I85T28MK866TVT1583CPMS9Y6IEM2QJW8RD2837NFO8RR35DLP8OS4S88LP5U77ZM2XREJZG4AUAW7W99ZVTMBDVSKZYLNLZYIDBM6NHQ2N1TX8IJITKI8WAMVV3CTB0YB78U3ZRN8PKWMLCHVP2Z28NUVHBXHJJYD89IWF9H' where id=32; -update noar tt set v2='VQL8O3HNFP7N14ISQ326AEJ9I7KJD7LW9DPRZR5VO2SLON787MPB5DT2NFAMS3QQ3YMFDPUKZQKC6TWCNCVGE5SFI52XL20B06IFPE06ZJTXODN6WESAW92QR4KS9LG0D56832YRXS8F3CR78KXX699PXNY4V07M117NBBLCNCWH0R1MUILN88QK1K57DGF8XEOFYXKJNTZOQ4P7V4YZB4C62CNF7OD162RKR4RTADBISYLT2O5LNUS3R0M8DDJKF' where id=32; -update noar ti set v2='VQL8O3HNFP7N14ISQ326AEJ9I7KJD7LW9DPRZR5VO2SLON787MPB5DT2NFAMS3QQ3YMFDPUKZQKC6TWCNCVGE5SFI52XL20B06IFPE06ZJTXODN6WESAW92QR4KS9LG0D56832YRXS8F3CR78KXX699PXNY4V07M117NBBLCNCWH0R1MUILN88QK1K57DGF8XEOFYXKJNTZOQ4P7V4YZB4C62CNF7OD162RKR4RTADBISYLT2O5LNUS3R0M8DDJKF' where id=32; -update noar tt set v3='QOTFGZC3MKU8AAFZWBN07SE9DZOSFSO42NYUZIDKHEF596JTWJAHBQY1ZF6RXF5YOAT3HJM1C1NTG91A7J6SCKWK1G5OR2XKGUSK9OYFL5UXT1EJKYZP5BH7XEFBZ6M6RFS12FAE7OAVJF3OTY567ASC8DJB0SSWH4ULATMUUOO6MVZHPQFSKS4W201QY2S68DG18GJBT6ZJAC90I7IF2EDXYPXM1E0VMMYZJK9TM14VSU3ZJAFLAI2GGJPQQQJ11' where id=32; -update noar ti set v3='QOTFGZC3MKU8AAFZWBN07SE9DZOSFSO42NYUZIDKHEF596JTWJAHBQY1ZF6RXF5YOAT3HJM1C1NTG91A7J6SCKWK1G5OR2XKGUSK9OYFL5UXT1EJKYZP5BH7XEFBZ6M6RFS12FAE7OAVJF3OTY567ASC8DJB0SSWH4ULATMUUOO6MVZHPQFSKS4W201QY2S68DG18GJBT6ZJAC90I7IF2EDXYPXM1E0VMMYZJK9TM14VSU3ZJAFLAI2GGJPQQQJ11' where id=32; -update noar tt set v0='XD6GMOBPO8POPL6K4RJOJYZR7PNROL2RRAVVUMMSMCB0H3I7VNOJWFV5TG7KDMEJT5K636GTLAGSGDHA9006Z31I63I59ZQZABVFQR4HR4L3LSXF8S3IJ2OM5ZDFOM6SMEIPIFKITY9AIWRA7NMRD6GUD3V2HLDEZGU10PLPAIUGHTTE10WP6E895L3XE3JC0FAF2R42H7CJSMGWF3T0JYLT03PAR482MMFUF0HT0M90QU4ZVNTTW3K94BLDPN4W1' where id=33; -update noar ti set v0='XD6GMOBPO8POPL6K4RJOJYZR7PNROL2RRAVVUMMSMCB0H3I7VNOJWFV5TG7KDMEJT5K636GTLAGSGDHA9006Z31I63I59ZQZABVFQR4HR4L3LSXF8S3IJ2OM5ZDFOM6SMEIPIFKITY9AIWRA7NMRD6GUD3V2HLDEZGU10PLPAIUGHTTE10WP6E895L3XE3JC0FAF2R42H7CJSMGWF3T0JYLT03PAR482MMFUF0HT0M90QU4ZVNTTW3K94BLDPN4W1' where id=33; -update noar tt set v1='UHZ23YKNC4EAKAL7U3C84W0J5FHDMIMJB9CHK6NCMJ84LYO0OW201K68BSU7VTUVUW68HQ0MKRS2RCD36WNOT5I9HE4R2VUS4XJA546EJH0T8JNQ46SWCVY1AO0SAUNVP2ZIFLCUCR4Z4R8M4C7XS44H2WHDZQI7IYKLP430PN5DZT974CB4M6EU3YYUU26IZHQ4YQ7DZBADO2ETPG8V4843UK19H2SAMXGOFIWA4YL6QQ0D0TZ353M8M8APSDLF3' where id=33; -update noar ti set v1='UHZ23YKNC4EAKAL7U3C84W0J5FHDMIMJB9CHK6NCMJ84LYO0OW201K68BSU7VTUVUW68HQ0MKRS2RCD36WNOT5I9HE4R2VUS4XJA546EJH0T8JNQ46SWCVY1AO0SAUNVP2ZIFLCUCR4Z4R8M4C7XS44H2WHDZQI7IYKLP430PN5DZT974CB4M6EU3YYUU26IZHQ4YQ7DZBADO2ETPG8V4843UK19H2SAMXGOFIWA4YL6QQ0D0TZ353M8M8APSDLF3' where id=33; -update noar tt set v2='5NBNKIO5LYRW5QECL4ZT4W0R9I6GDM2F3819LR0GTWV0GPW652R6UHFOW2FTYVO3IPH1T5OVQ6K6AYM5KEW0O1PJVCNY0YQUY9A4NTHD4SDPKLFXSRO16MWCIZZ05WQO5TEV1TE826ZAW50WI4N2OWCBAMCD4MOAE879NNVSGB6I0HEPUHHG8U6HFSDODEU5GDHX1PFCS49H9H7N0KJOIJ23C3I61X1IVE5MJY5FNE9CHG3COKZF41Z7H61WFGT6F' where id=33; -update noar ti set v2='5NBNKIO5LYRW5QECL4ZT4W0R9I6GDM2F3819LR0GTWV0GPW652R6UHFOW2FTYVO3IPH1T5OVQ6K6AYM5KEW0O1PJVCNY0YQUY9A4NTHD4SDPKLFXSRO16MWCIZZ05WQO5TEV1TE826ZAW50WI4N2OWCBAMCD4MOAE879NNVSGB6I0HEPUHHG8U6HFSDODEU5GDHX1PFCS49H9H7N0KJOIJ23C3I61X1IVE5MJY5FNE9CHG3COKZF41Z7H61WFGT6F' where id=33; -update noar tt set v3='2Z7CL7TZ3WYE0KSGC84QVQTQ9HJRYIE4AFR6ZBIWC502095GO3NRTN8UUFOQEQNVMMYUYMWOANQ9SZC3086YQJEBAGRYCNLPTX5BYW8X35FP3QAJ9KLILM856Q7AESEZ1AYBMV75CQRO5OG4BRWB6MV76BSYTXQ7U9NFTK6G8O5HI1CPTCB80O26WHQ79N0BJZFBEET4EX5ID744V7RL08AFMT0FO7U1CCLX53RLD302BZ5TNJKBLFXGC1G60QX8B' where id=33; -update noar ti set v3='2Z7CL7TZ3WYE0KSGC84QVQTQ9HJRYIE4AFR6ZBIWC502095GO3NRTN8UUFOQEQNVMMYUYMWOANQ9SZC3086YQJEBAGRYCNLPTX5BYW8X35FP3QAJ9KLILM856Q7AESEZ1AYBMV75CQRO5OG4BRWB6MV76BSYTXQ7U9NFTK6G8O5HI1CPTCB80O26WHQ79N0BJZFBEET4EX5ID744V7RL08AFMT0FO7U1CCLX53RLD302BZ5TNJKBLFXGC1G60QX8B' where id=33; -update noar tt set v0='96BHOUVW5ZGEHU12H02DMDKYX2UD5J4V4QLW3IQY7G2S7ZG8O49N6C3KI0AGUJCMNA06KOC52SZIK4Z4EGGZHMX53HB5F1WMI832BOOI6R5JU8QC3TECJVZS6XX6H3BAVEIZQ5I410GTVDEZPVIL7MNLZ9QWWVMR28WNJDZGK29R9QWZ6FRH4S5MLJL8DS6MJ4UUALBCMF24EORNATDG3QT4EEIU9A3XTGWIMACMRL5KRUB1JD4QK6030AFB06ONC' where id=34; -update noar ti set v0='96BHOUVW5ZGEHU12H02DMDKYX2UD5J4V4QLW3IQY7G2S7ZG8O49N6C3KI0AGUJCMNA06KOC52SZIK4Z4EGGZHMX53HB5F1WMI832BOOI6R5JU8QC3TECJVZS6XX6H3BAVEIZQ5I410GTVDEZPVIL7MNLZ9QWWVMR28WNJDZGK29R9QWZ6FRH4S5MLJL8DS6MJ4UUALBCMF24EORNATDG3QT4EEIU9A3XTGWIMACMRL5KRUB1JD4QK6030AFB06ONC' where id=34; -update noar tt set v1='W6LX7F2N5U0D5T4F6L750TTUKYLFCYZGZCCQ7NPV6A4BOBD7TQDP0XIQSREZ1EED9PYWSY64QH183DXTBQRRTW0ARFXZS81QSFIN6O7UGFWVY1G5C748KW9GEPOEHK3CF9IMJHBSDRXBSL0A7KVOP822UKCYTQU51ADRQEPZRCVFP2S8RSUDWQ727VJ7P6IZF0R1G3PLA5EL0WOM4RZPVQ0RQM4H1IE8HC7KPBV4KL574X8X567G5GTOE5NT4KTWE' where id=34; -update noar ti set v1='W6LX7F2N5U0D5T4F6L750TTUKYLFCYZGZCCQ7NPV6A4BOBD7TQDP0XIQSREZ1EED9PYWSY64QH183DXTBQRRTW0ARFXZS81QSFIN6O7UGFWVY1G5C748KW9GEPOEHK3CF9IMJHBSDRXBSL0A7KVOP822UKCYTQU51ADRQEPZRCVFP2S8RSUDWQ727VJ7P6IZF0R1G3PLA5EL0WOM4RZPVQ0RQM4H1IE8HC7KPBV4KL574X8X567G5GTOE5NT4KTWE' where id=34; -update noar tt set v2='V21AICMQ729RR0PNVVIH4AWH525N5TOR7GTAEBZ6W7UDQ30B5IACD91YI5Y12DM4YF01PQNIMNB42W983NVRZWSLFEYAP2ESXJELLETUNXPB33KR9R78ZPAI8S9FABROTD8QKUHQ8PVTHDGYWA4KPVRCINQS42FALYX324VHUE7UASJVK99M5XMS70FKU8683I2JSFHDGTP8178TFZCRRD6XZO364EFSMEDF96U4EXEO5CV3OKKE2OUWI6QGPKB4Q' where id=34; -update noar ti set v2='V21AICMQ729RR0PNVVIH4AWH525N5TOR7GTAEBZ6W7UDQ30B5IACD91YI5Y12DM4YF01PQNIMNB42W983NVRZWSLFEYAP2ESXJELLETUNXPB33KR9R78ZPAI8S9FABROTD8QKUHQ8PVTHDGYWA4KPVRCINQS42FALYX324VHUE7UASJVK99M5XMS70FKU8683I2JSFHDGTP8178TFZCRRD6XZO364EFSMEDF96U4EXEO5CV3OKKE2OUWI6QGPKB4Q' where id=34; -update noar tt set v3='BNJRCA1JX2QYXRADCXY75J5AGEEIY4HNKQUU2T662TRZKS59SLE6M4RFI5IQCK2KBK9SG1MMB6VB61YVK1XGWB17OFI6FSFADXGRGHQDMJ74MDGSYS8ZAMES8E3F9V29PXF0BKOA7A6QDXBXEO43KWQELU6FMWC6XIXRICV3VM734PWT7AX8O8T533H8UYQUTBD8GTQPNZV9T1CHSQKA96ZUY8TFWY5NN6KF8N5ET50ATE0XRUVY6V0ETCE31YIP4' where id=34; -update noar ti set v3='BNJRCA1JX2QYXRADCXY75J5AGEEIY4HNKQUU2T662TRZKS59SLE6M4RFI5IQCK2KBK9SG1MMB6VB61YVK1XGWB17OFI6FSFADXGRGHQDMJ74MDGSYS8ZAMES8E3F9V29PXF0BKOA7A6QDXBXEO43KWQELU6FMWC6XIXRICV3VM734PWT7AX8O8T533H8UYQUTBD8GTQPNZV9T1CHSQKA96ZUY8TFWY5NN6KF8N5ET50ATE0XRUVY6V0ETCE31YIP4' where id=34; -update noar tt set v0='8KBV6X4UKRJDPYWYI63STCRG47D369Q2YK2TNX3DJNUBLP41BZOVMKGRY0LB4PN4SNZWBZWZBB7SB61S2SWY9WAZWF1OD2W8GBUDVC1AZQPDGWH2434AQBUSXW8TZ7R3YAH1IHGKLKH9O0P60KGGHLKJIBMSP3SXKCE95UEDB8DE7N1EKCFJRBO0D6SIZ87L5JYXTB0MV43LZCFM6VI9CHHS02KH9HK0EC32VIT6J1NFV5VR7TMPM0Z6P3RAP4EJ9' where id=35; -update noar ti set v0='8KBV6X4UKRJDPYWYI63STCRG47D369Q2YK2TNX3DJNUBLP41BZOVMKGRY0LB4PN4SNZWBZWZBB7SB61S2SWY9WAZWF1OD2W8GBUDVC1AZQPDGWH2434AQBUSXW8TZ7R3YAH1IHGKLKH9O0P60KGGHLKJIBMSP3SXKCE95UEDB8DE7N1EKCFJRBO0D6SIZ87L5JYXTB0MV43LZCFM6VI9CHHS02KH9HK0EC32VIT6J1NFV5VR7TMPM0Z6P3RAP4EJ9' where id=35; -update noar tt set v1='CHV4OBDGYWDKHDDPQLBGQD5PZXNBIGZNRVBPELV3051ROSAS9H2OTAB6FFW75WZN97BDTLWP34H79GMA6C4VWC4W6CLZIG3A44O28HZCK3ZGQR9INLXXUVJ4CZ82T4FFKCHW0TZ0QHDGMDHW6E93E08IIVAAJ5NR6ZZWHFGR93TTIGCSQYWRNLODTBM9MGA8X41POBIWSN38746BFKAK294VQZBCJ1JAUPUBVX1QJ7ZSEKKM9X2TAT6BOCB19WE1B' where id=35; -update noar ti set v1='CHV4OBDGYWDKHDDPQLBGQD5PZXNBIGZNRVBPELV3051ROSAS9H2OTAB6FFW75WZN97BDTLWP34H79GMA6C4VWC4W6CLZIG3A44O28HZCK3ZGQR9INLXXUVJ4CZ82T4FFKCHW0TZ0QHDGMDHW6E93E08IIVAAJ5NR6ZZWHFGR93TTIGCSQYWRNLODTBM9MGA8X41POBIWSN38746BFKAK294VQZBCJ1JAUPUBVX1QJ7ZSEKKM9X2TAT6BOCB19WE1B' where id=35; -update noar tt set v2='01AMHL7K1YHLRCBUJWGMEZW9NJXXRAWOQTX273P4302T2HLTT5MHT6WG40ABVIP57D8VWDT1N5CXGV5T4BIA2FKXS8LQ5OA9YZO5YQSGXEIT5T7NSBQKWV9TR8QUPBAXGL72LHBJLDWWAF3DXG7GRYOYLL2CS8J27YUGJUVOCCYWXE938Z5OU2CUMP7X2I7FD6AOCN8RRQCDN2MKPB3NWL1IJ23L7MIWQV9L29RB4M9EVQPC3NVZVX3W0TPRZSEYJ' where id=35; -update noar ti set v2='01AMHL7K1YHLRCBUJWGMEZW9NJXXRAWOQTX273P4302T2HLTT5MHT6WG40ABVIP57D8VWDT1N5CXGV5T4BIA2FKXS8LQ5OA9YZO5YQSGXEIT5T7NSBQKWV9TR8QUPBAXGL72LHBJLDWWAF3DXG7GRYOYLL2CS8J27YUGJUVOCCYWXE938Z5OU2CUMP7X2I7FD6AOCN8RRQCDN2MKPB3NWL1IJ23L7MIWQV9L29RB4M9EVQPC3NVZVX3W0TPRZSEYJ' where id=35; -update noar tt set v3='9IAYO057TG9GABJS7WL1S3UVCNSVA2IVRH5UARYW5CASEXPUY8ATGUQZ5X386RJA042NW6F49DBKKAWYV0MRZU1FMHIMFQOE8XWRJ8PKLLT0RFOYG9CYUJF0DSQOUJJ1R8FYT0OFGM4M0VXGPPA0X5896WTN30RNBDZQA9KMVH5KHXOVA117YMZVBMYFS7QADGJMX3L82WC5LHOSLGO3UQPYO50IANIJXHHZP86OMRVU0KZYVRGO31IZD71L1AR0U' where id=35; -update noar ti set v3='9IAYO057TG9GABJS7WL1S3UVCNSVA2IVRH5UARYW5CASEXPUY8ATGUQZ5X386RJA042NW6F49DBKKAWYV0MRZU1FMHIMFQOE8XWRJ8PKLLT0RFOYG9CYUJF0DSQOUJJ1R8FYT0OFGM4M0VXGPPA0X5896WTN30RNBDZQA9KMVH5KHXOVA117YMZVBMYFS7QADGJMX3L82WC5LHOSLGO3UQPYO50IANIJXHHZP86OMRVU0KZYVRGO31IZD71L1AR0U' where id=35; -update noar tt set v0='M0U4EX7P7N41957A3YUCSJ1DSPR3S2KOBYKWVB0Q8OZA60ASJ9VIFS2XWTT104DISKA44DDTDJAOBNILFRWZESNJ2NZN2L4MOMXMOE1MYN3PZ7I1IXZ0TDTMP6SCIVELPF2LPE4OOB0JEQH22FLITQMS3IJ3MRFZTQWSVY9I5Y2E4X13QZW97TCQWST2YL57T4VKHWB5ACN22G0VWT2VB1MZWNLRPCB9G6RFFY9WOEMWN109V7D73WT731ANVVXCR' where id=36; -update noar ti set v0='M0U4EX7P7N41957A3YUCSJ1DSPR3S2KOBYKWVB0Q8OZA60ASJ9VIFS2XWTT104DISKA44DDTDJAOBNILFRWZESNJ2NZN2L4MOMXMOE1MYN3PZ7I1IXZ0TDTMP6SCIVELPF2LPE4OOB0JEQH22FLITQMS3IJ3MRFZTQWSVY9I5Y2E4X13QZW97TCQWST2YL57T4VKHWB5ACN22G0VWT2VB1MZWNLRPCB9G6RFFY9WOEMWN109V7D73WT731ANVVXCR' where id=36; -update noar tt set v1='T9YOL0GZXKSCXLVTGCJEO3VXAPZF0LLO8MCIT9DC9W7TPC2WH7GI4NE8HUR10X48HGDJ059HRBJ7KSDIMD1FCBBA7QCP3DLWCBBATU6Z7L3447CBLR3A3SINSAX3FDGTO1DNGWLGQCHHPVI7LOCA8N8X8ESF7OXR1W82BI75OP5TPSO3Z7UZZXTQVWIY11EFJQYW1Z01T19R748BMW0R9WHL9DE9KR16SJ2MD6X1BFVUZJLBZ2QVARSEQAS7NB03D' where id=36; -update noar ti set v1='T9YOL0GZXKSCXLVTGCJEO3VXAPZF0LLO8MCIT9DC9W7TPC2WH7GI4NE8HUR10X48HGDJ059HRBJ7KSDIMD1FCBBA7QCP3DLWCBBATU6Z7L3447CBLR3A3SINSAX3FDGTO1DNGWLGQCHHPVI7LOCA8N8X8ESF7OXR1W82BI75OP5TPSO3Z7UZZXTQVWIY11EFJQYW1Z01T19R748BMW0R9WHL9DE9KR16SJ2MD6X1BFVUZJLBZ2QVARSEQAS7NB03D' where id=36; -update noar tt set v2='B1O2TZIWYV1B9W6IB4V3YY8UDINKM3RIYCN8WINIHYCD9SQJJXJWRDRJXR93P6EVOZS4YIIGI9Y9NYZL1NHLQ2BCPI2R089P242RO04OHI2Z7UTUR95SS57S6EDWYSG1JALLNJB2Z5Q5BSUN65VBCLCD520CW6B2K9YGHXK9W6EKFFESZQUK49MYMKOMRT5IEBMMADGCLMFSEQW2947ZMMUGV75B670T55YV6N4YTBXYHQ77F6PSXOUSOLQY7HB6R' where id=36; -update noar ti set v2='B1O2TZIWYV1B9W6IB4V3YY8UDINKM3RIYCN8WINIHYCD9SQJJXJWRDRJXR93P6EVOZS4YIIGI9Y9NYZL1NHLQ2BCPI2R089P242RO04OHI2Z7UTUR95SS57S6EDWYSG1JALLNJB2Z5Q5BSUN65VBCLCD520CW6B2K9YGHXK9W6EKFFESZQUK49MYMKOMRT5IEBMMADGCLMFSEQW2947ZMMUGV75B670T55YV6N4YTBXYHQ77F6PSXOUSOLQY7HB6R' where id=36; -update noar tt set v3='VVCDXOYRKOIWZZ7SAILFI0SZ6U8T06FH16SSKJ0T0VADHJGDM5XTUJYTORV494KNEIUWNDEFRQXVDK6SRQNNCCLVMD6Z3EGJNMLG7SR9UD9NE4XKT4R1JJU9J2EBU34MCYD2JT6RDJBPTZ4BJTLZXLFF8EHEHU7JMH59NISYO4Z9399SODI04482J4J70Y5V3797OFBJQ5OOZNOT7UUE6QGEY3XD19PY62626L8R8WWZ3MG7N677S3053FSB21LR3' where id=36; -update noar ti set v3='VVCDXOYRKOIWZZ7SAILFI0SZ6U8T06FH16SSKJ0T0VADHJGDM5XTUJYTORV494KNEIUWNDEFRQXVDK6SRQNNCCLVMD6Z3EGJNMLG7SR9UD9NE4XKT4R1JJU9J2EBU34MCYD2JT6RDJBPTZ4BJTLZXLFF8EHEHU7JMH59NISYO4Z9399SODI04482J4J70Y5V3797OFBJQ5OOZNOT7UUE6QGEY3XD19PY62626L8R8WWZ3MG7N677S3053FSB21LR3' where id=36; -update noar tt set v0='ZJD2A0ARO578WAFTKJ9FTOM5ZBJGBVIQZ27SUM1YBT26R5MAL0WNS0T6HFT20TFMUN8C1YDMXVRQTERZ15E4KCD0SGL4H17L9OJY1XZFBW7U6KH2SOT95Y6DO5R148FRVB2PDOOO1PX9NOYF4MYCRF211VC4EIGYCCPQBL3D5C0BOY5SU3T5BKX5NYXFFLYB23F26YN84YVZGPL2GXMKZSLMVT0R490LBSGH9B11FDJIPRBM79B5HCHZ3O8E3CI4G' where id=37; -update noar ti set v0='ZJD2A0ARO578WAFTKJ9FTOM5ZBJGBVIQZ27SUM1YBT26R5MAL0WNS0T6HFT20TFMUN8C1YDMXVRQTERZ15E4KCD0SGL4H17L9OJY1XZFBW7U6KH2SOT95Y6DO5R148FRVB2PDOOO1PX9NOYF4MYCRF211VC4EIGYCCPQBL3D5C0BOY5SU3T5BKX5NYXFFLYB23F26YN84YVZGPL2GXMKZSLMVT0R490LBSGH9B11FDJIPRBM79B5HCHZ3O8E3CI4G' where id=37; -update noar tt set v1='7YKRX49F3N63FNVPCI8Q2FV2H10DNO30AGGZ94UD0BAMOGEWRRJUZA6HXO1ZF3YGUR5ZBNIK0B0VO799ZISVUNX3G4QVNASECBJVX1QOLCAPSER2D5YAF7WMDOVH8YKYSF107HX0VD91IXPTWSK4EDVJFX4H1RIDP7AWXPZSGVSXZARANZGUEOS8MP5YNOPEO5QS4DVKKPR3XEZAOR1R8C9F2OWAM9TDSO063OZRX4SHGIQ672CZM6X4LRGSPKGY2' where id=37; -update noar ti set v1='7YKRX49F3N63FNVPCI8Q2FV2H10DNO30AGGZ94UD0BAMOGEWRRJUZA6HXO1ZF3YGUR5ZBNIK0B0VO799ZISVUNX3G4QVNASECBJVX1QOLCAPSER2D5YAF7WMDOVH8YKYSF107HX0VD91IXPTWSK4EDVJFX4H1RIDP7AWXPZSGVSXZARANZGUEOS8MP5YNOPEO5QS4DVKKPR3XEZAOR1R8C9F2OWAM9TDSO063OZRX4SHGIQ672CZM6X4LRGSPKGY2' where id=37; -update noar tt set v2='MLIXAB8I8VUC3A0PVUZ53S26QQEUH0MDFT3JOQ9LNNEMYHNVMAK9F5VU2XC62FFLSV8DU1NWCGHLIBZY98NRSYSB6YCTYDN19EDXYWCSS6T166QF9YH5M7S5YCDC7G7IWKC8IK4NR5BOPJ15U1O6S6JMMX9L16GK8YV7V6Q3MC9HDLX0NV6OQ4J6P0IA8XVQH8YXLR1NM5YI3WBZO7EQBR07FTFP8OT2G1VBXT3AISXF19XBH1DOIIOL6C8HP5WH6' where id=37; -update noar ti set v2='MLIXAB8I8VUC3A0PVUZ53S26QQEUH0MDFT3JOQ9LNNEMYHNVMAK9F5VU2XC62FFLSV8DU1NWCGHLIBZY98NRSYSB6YCTYDN19EDXYWCSS6T166QF9YH5M7S5YCDC7G7IWKC8IK4NR5BOPJ15U1O6S6JMMX9L16GK8YV7V6Q3MC9HDLX0NV6OQ4J6P0IA8XVQH8YXLR1NM5YI3WBZO7EQBR07FTFP8OT2G1VBXT3AISXF19XBH1DOIIOL6C8HP5WH6' where id=37; -update noar tt set v3='18PSJSHLJQYHU7EMFIQNJTG3ZP4RU0NT1KA6UK1GZV2DPBXP07WYX457IKJD0Y13O4JYGY7Y8G25QV136V00EJWGZO6S5X8S41P17QREBV3UNWVHSC6AYC48KVNGS7Y9QEAMFNLOMQX6SELIR485DUSQ6KD65U0W6IJA24CZKC5CAEKUAU5O3Y8TL107L42WMRJ51M0S3PPY68AFYCQYOBLXSCLS2NSWSW1QP8M9MO7VURCTJ18Y9M5PM9V2O0L79' where id=37; -update noar ti set v3='18PSJSHLJQYHU7EMFIQNJTG3ZP4RU0NT1KA6UK1GZV2DPBXP07WYX457IKJD0Y13O4JYGY7Y8G25QV136V00EJWGZO6S5X8S41P17QREBV3UNWVHSC6AYC48KVNGS7Y9QEAMFNLOMQX6SELIR485DUSQ6KD65U0W6IJA24CZKC5CAEKUAU5O3Y8TL107L42WMRJ51M0S3PPY68AFYCQYOBLXSCLS2NSWSW1QP8M9MO7VURCTJ18Y9M5PM9V2O0L79' where id=37; -update noar tt set v0='0PPCXEXQAW6NZFYBHVFDNXZ72IOU6U0NAF6GHCC2CBWJ6FR5O60OE59X12DR94LWQH7W6RAARA3K5UA7CN7SON15SE8YYKN0BG0ME02E4X5F202TFP027IT7E7SCQYC48GVBMM4QD0V2OA4K29M96SRGRUABIKIEO8659YWZ00T2SXLB44GGIDQ4A5LL62LITG52N88ZYH2OSVYDZNUW8L6V6QZF1CG3E1H7DBRWSEZAEX122QQ87VME71Z9SMXWM' where id=38; -update noar ti set v0='0PPCXEXQAW6NZFYBHVFDNXZ72IOU6U0NAF6GHCC2CBWJ6FR5O60OE59X12DR94LWQH7W6RAARA3K5UA7CN7SON15SE8YYKN0BG0ME02E4X5F202TFP027IT7E7SCQYC48GVBMM4QD0V2OA4K29M96SRGRUABIKIEO8659YWZ00T2SXLB44GGIDQ4A5LL62LITG52N88ZYH2OSVYDZNUW8L6V6QZF1CG3E1H7DBRWSEZAEX122QQ87VME71Z9SMXWM' where id=38; -update noar tt set v1='MQ9NKR88QS3JT8D73FKF7H049V8F9FV152K381RG6MG7LXAX4LXPZIVSF7HS29RGMSTQLGAFOBB2ASWPTKZX8J9NT0A0KLR7V2SI3EUCV74HBWABGQIE7S4X3G0FXGRFISMI13X1PX87G1LSRB0WJFVV8YKR4UDFD9J2T0FI53580WEJHJGAG3IDLIJPQX2PFY3WJIJ1ZIN625KA5SAXI207M26A7J5D9Y8Q65ONKSTP41KO01K9AJPFUVEZHLYVA' where id=38; -update noar ti set v1='MQ9NKR88QS3JT8D73FKF7H049V8F9FV152K381RG6MG7LXAX4LXPZIVSF7HS29RGMSTQLGAFOBB2ASWPTKZX8J9NT0A0KLR7V2SI3EUCV74HBWABGQIE7S4X3G0FXGRFISMI13X1PX87G1LSRB0WJFVV8YKR4UDFD9J2T0FI53580WEJHJGAG3IDLIJPQX2PFY3WJIJ1ZIN625KA5SAXI207M26A7J5D9Y8Q65ONKSTP41KO01K9AJPFUVEZHLYVA' where id=38; -update noar tt set v2='J66BHK5CX59CGBKBR1II3CDGTBW1II3ND5XMK5E4J0LN4LLA3190T2V8BP1E2820PV0TUIA86JQ8P9E4NLAPJ4Y1BMFLQ1PNVDJSMO46IBOAKJ675ECHKXYE7LR892XQTDVHENA3L3SMWVY1090VFTQ658JY33ZSWSW777Y0W9II98SUM49CRD1QM4UU5BWUNCBVIUINHYHQ7RLD16NY9EK0CF9EVCCCC1XUBF23BEMVX8IOQXKHQFT0EIDSL9T6U' where id=38; -update noar ti set v2='J66BHK5CX59CGBKBR1II3CDGTBW1II3ND5XMK5E4J0LN4LLA3190T2V8BP1E2820PV0TUIA86JQ8P9E4NLAPJ4Y1BMFLQ1PNVDJSMO46IBOAKJ675ECHKXYE7LR892XQTDVHENA3L3SMWVY1090VFTQ658JY33ZSWSW777Y0W9II98SUM49CRD1QM4UU5BWUNCBVIUINHYHQ7RLD16NY9EK0CF9EVCCCC1XUBF23BEMVX8IOQXKHQFT0EIDSL9T6U' where id=38; -update noar tt set v3='6EPLPYENJL5DS3BMXF5E5TUQ1WVCZHOAXZQFK0VG212FC5SFFPLIKCSXYE2ROQT5QM32YVHY6C0JCMH4730VU6A840PMMXA2P1INN2ZT8JKY4SUC6FN2YJSGBF1B6QK7TX8GIGDH8AZEGFAJVTCCB7VN5O74HPB78W5EMBPNANJECEI00RFE76A9BSJ75M1AEMI8QA2GMZMXNOT6IPMXXYKY041XQ6WB439CPFUNB8SJ8GQBQVP286ZCFH6GU11DR' where id=38; -update noar ti set v3='6EPLPYENJL5DS3BMXF5E5TUQ1WVCZHOAXZQFK0VG212FC5SFFPLIKCSXYE2ROQT5QM32YVHY6C0JCMH4730VU6A840PMMXA2P1INN2ZT8JKY4SUC6FN2YJSGBF1B6QK7TX8GIGDH8AZEGFAJVTCCB7VN5O74HPB78W5EMBPNANJECEI00RFE76A9BSJ75M1AEMI8QA2GMZMXNOT6IPMXXYKY041XQ6WB439CPFUNB8SJ8GQBQVP286ZCFH6GU11DR' where id=38; -update noar tt set v0='MBIJLQRMHX8UN2DL59P0SL86NBBALZN4MXLLMYFCZO4P6XAWKHHFBDIPWAPAM2OLRO4KQ2GJ50J70C0HPHOTJ67U4F2DGZ4RVF6GVK5N68EPGIVQOI79L6E42MC1GPJO3GME4UZ4VHL3VQIIG90ZUJNEHX8WN3XKSJA2DRTIFB1CVXZ10VSS0ZQ7S1RMTUR21W31P245K7RZ1FSCLG265U5GHTCXR4VXNQQ29AYTPS2NZCH07CIQBPLB9ZMCRMTTA' where id=39; -update noar ti set v0='MBIJLQRMHX8UN2DL59P0SL86NBBALZN4MXLLMYFCZO4P6XAWKHHFBDIPWAPAM2OLRO4KQ2GJ50J70C0HPHOTJ67U4F2DGZ4RVF6GVK5N68EPGIVQOI79L6E42MC1GPJO3GME4UZ4VHL3VQIIG90ZUJNEHX8WN3XKSJA2DRTIFB1CVXZ10VSS0ZQ7S1RMTUR21W31P245K7RZ1FSCLG265U5GHTCXR4VXNQQ29AYTPS2NZCH07CIQBPLB9ZMCRMTTA' where id=39; -update noar tt set v1='NSFIH0HZH8POOGYFFYPK4GIE3B1UD5WRRI6SOU1B05BGPAINR7O02M1729R1VVW4UF3KHD7CJNUCKU1NRHLQGIBRO4XSAKD61Y3IZBJKXDTTEZLSFIW60A7IYH5TM96PZSCL4QMUJ5JGC8IFGURM7LBZ27AYXH9W0I476X8DFEFU8SXDTU85J0EKMSTZHGSSTFGYYAZYR8NFUAVEW9T8B9TOWPR2SXH3PBIP87ORSWT4WZG9ARQHL5GJ23A6RQOXA' where id=39; -update noar ti set v1='NSFIH0HZH8POOGYFFYPK4GIE3B1UD5WRRI6SOU1B05BGPAINR7O02M1729R1VVW4UF3KHD7CJNUCKU1NRHLQGIBRO4XSAKD61Y3IZBJKXDTTEZLSFIW60A7IYH5TM96PZSCL4QMUJ5JGC8IFGURM7LBZ27AYXH9W0I476X8DFEFU8SXDTU85J0EKMSTZHGSSTFGYYAZYR8NFUAVEW9T8B9TOWPR2SXH3PBIP87ORSWT4WZG9ARQHL5GJ23A6RQOXA' where id=39; -update noar tt set v2='KACBVXR9WWP571WUNBLZZRBI8T3ZLMNYQYCQEDHNC9SQ9AW555ZF0JFSC38Q65C9MDQPXX9VMOK3EI6N8CNCSZDMWXLH0XDJHEBYPURWHVY6BAEX5V67C08085VN31ANK5MLR9TNDYUPS2SU7R8FX0FUK2SDUXV5PYEYMT02A20LB8VI0CQAXM0GEMFBTUWW7CY5F0NMUSPCF0JEM21QLFZMMWG19U1KW3ZTV091R5QSF230Q5I58IF0USUCQ8I4Q' where id=39; -update noar ti set v2='KACBVXR9WWP571WUNBLZZRBI8T3ZLMNYQYCQEDHNC9SQ9AW555ZF0JFSC38Q65C9MDQPXX9VMOK3EI6N8CNCSZDMWXLH0XDJHEBYPURWHVY6BAEX5V67C08085VN31ANK5MLR9TNDYUPS2SU7R8FX0FUK2SDUXV5PYEYMT02A20LB8VI0CQAXM0GEMFBTUWW7CY5F0NMUSPCF0JEM21QLFZMMWG19U1KW3ZTV091R5QSF230Q5I58IF0USUCQ8I4Q' where id=39; -update noar tt set v3='IICHG9NY81SCAQMR7JPS16WZ5QN3NGGNIEAI9JVFLUAJJWD2KJUVXN54702OW7TV7JPCCCZT6U2SMNQB5GE7GAJFBRZQW8OFAC1TXMRPYBNP1NJGR4FLPR517PM8CQBBACCPCSY2AIFDCU8LSI53RQGTDCR0HLI425KEZK8P9ASGU8JI84QTLYG38A584996KCT70A7SBSLYLBQFM0FMVSGQCQPJQECHTR86XAS9W5E5SJQ8QMHEFMTKW1AZ2DQHA' where id=39; -update noar ti set v3='IICHG9NY81SCAQMR7JPS16WZ5QN3NGGNIEAI9JVFLUAJJWD2KJUVXN54702OW7TV7JPCCCZT6U2SMNQB5GE7GAJFBRZQW8OFAC1TXMRPYBNP1NJGR4FLPR517PM8CQBBACCPCSY2AIFDCU8LSI53RQGTDCR0HLI425KEZK8P9ASGU8JI84QTLYG38A584996KCT70A7SBSLYLBQFM0FMVSGQCQPJQECHTR86XAS9W5E5SJQ8QMHEFMTKW1AZ2DQHA' where id=39; -update noar tt set v0='JS2SF26JP07VS8U1UW57MYH066TW6RJ5ORZ193DCV0R67XT51BGF0VQVOMF6SMANMF66N5FHY62H0X8WHNB0FDRWIEKUHWZAZB2M6ZDNAMWPL68GL6N9X2TRPZ6VVZKYR0FLPDPZFT9J26SHUDCYDSTS3KKSPZQL40DW9U29WUKXA2GD5ZXU6UD20H1KERE7I9NC0QXUGB0T5S50MHJPW68W8E2QOLUF61PXWOAF3JVG3GZONY1EBU2DVXXMGKGHB' where id=40; -update noar ti set v0='JS2SF26JP07VS8U1UW57MYH066TW6RJ5ORZ193DCV0R67XT51BGF0VQVOMF6SMANMF66N5FHY62H0X8WHNB0FDRWIEKUHWZAZB2M6ZDNAMWPL68GL6N9X2TRPZ6VVZKYR0FLPDPZFT9J26SHUDCYDSTS3KKSPZQL40DW9U29WUKXA2GD5ZXU6UD20H1KERE7I9NC0QXUGB0T5S50MHJPW68W8E2QOLUF61PXWOAF3JVG3GZONY1EBU2DVXXMGKGHB' where id=40; -update noar tt set v1='RU9KPNR8CRROLPYW026M8NDR45WQ3CHJY1J7BYICHACR8BT2UL3XL8PVAS6T0IE915IXV5IPZP3T9N4P4J5MAH9M19AQ8S0JD9H0EPKQWQFA1HXFLWVEDDD8EF7WTH5YE7T6FGIRVM5VFHG7RDJ793SSKRAF5VSVJDMP11VT75M6OPGUPL900ZJ1842LGC0M3J3KPF60R2AVB83YG2WYE49YM2IW22YV65PNJXLVFDW20PWJR14QKOX26HU9RTQ1S' where id=40; -update noar ti set v1='RU9KPNR8CRROLPYW026M8NDR45WQ3CHJY1J7BYICHACR8BT2UL3XL8PVAS6T0IE915IXV5IPZP3T9N4P4J5MAH9M19AQ8S0JD9H0EPKQWQFA1HXFLWVEDDD8EF7WTH5YE7T6FGIRVM5VFHG7RDJ793SSKRAF5VSVJDMP11VT75M6OPGUPL900ZJ1842LGC0M3J3KPF60R2AVB83YG2WYE49YM2IW22YV65PNJXLVFDW20PWJR14QKOX26HU9RTQ1S' where id=40; -update noar tt set v2='KIQLRRPH20523ZEAX8M9299NH77Z7O6W0CLRN0R5H2QEZ8PP4YUUYP8MSZDC76UNEXPR93EGKGJ232I81G2KBYK73RCWOJKFPG58D8MDNOWPRGT7RI257Q6ZOGR1MVPX9P96OOFRC0UF1E8BC2TDK6LM54JBAGAOTKRBY6YSQ33MOE0JRP8JWHVMG2PI1JK7CR0V2SNCU32TPHXPCX00MW8O2DZTTX8LURL0OQ3DVWLSWWDKH47JOHRJ2NVBUTD5D' where id=40; -update noar ti set v2='KIQLRRPH20523ZEAX8M9299NH77Z7O6W0CLRN0R5H2QEZ8PP4YUUYP8MSZDC76UNEXPR93EGKGJ232I81G2KBYK73RCWOJKFPG58D8MDNOWPRGT7RI257Q6ZOGR1MVPX9P96OOFRC0UF1E8BC2TDK6LM54JBAGAOTKRBY6YSQ33MOE0JRP8JWHVMG2PI1JK7CR0V2SNCU32TPHXPCX00MW8O2DZTTX8LURL0OQ3DVWLSWWDKH47JOHRJ2NVBUTD5D' where id=40; -update noar tt set v3='NIY892D98R34VRPVDPXGWYEYR78HTUOWTVAIZE1YX34I7DL9SVJ8ZTKFLDAWVWNUT9H7PQVFU21RESZZIRNMXO7OSSF8DXCHMJLOA93NAWJNLUR1DI8XT9N8IEHMN68R6FONVYZVIDJYT5C5FXW4B7BD0IF2LCD1AO8U665HWH9ASVX0FM6R1Q4BXOKZO72ZGH0FI5FWL9NURKN4PLZ8TXJ57VJ30AP92FL7AKO1JU5REVJHG40PX3GJUC4AHISJH' where id=40; -update noar ti set v3='NIY892D98R34VRPVDPXGWYEYR78HTUOWTVAIZE1YX34I7DL9SVJ8ZTKFLDAWVWNUT9H7PQVFU21RESZZIRNMXO7OSSF8DXCHMJLOA93NAWJNLUR1DI8XT9N8IEHMN68R6FONVYZVIDJYT5C5FXW4B7BD0IF2LCD1AO8U665HWH9ASVX0FM6R1Q4BXOKZO72ZGH0FI5FWL9NURKN4PLZ8TXJ57VJ30AP92FL7AKO1JU5REVJHG40PX3GJUC4AHISJH' where id=40; -update noar tt set v0='C1HMR8AVREFGKVQ63C7D47U9PQZYGKQR3XII6F3990712OKXQJBSYUHWPY5GSKP3QO2D08X1SKULCWAAUKXFNFQJN65QA4O1C3X1EL3JPSIBD24GTLAOR3CXEWFF5MEUSQJKIYVJ3FZPHMAHMUNTN4GASTNMM856OO9URCX519HU7HPMB6DQMJYJVT9UXTWUS9ATL31D77AL4ZLSBSNOQ1DMYC5838E2VE5ZJLE00Y9N6EJ5AE584L449RBK3IFHE' where id=41; -update noar ti set v0='C1HMR8AVREFGKVQ63C7D47U9PQZYGKQR3XII6F3990712OKXQJBSYUHWPY5GSKP3QO2D08X1SKULCWAAUKXFNFQJN65QA4O1C3X1EL3JPSIBD24GTLAOR3CXEWFF5MEUSQJKIYVJ3FZPHMAHMUNTN4GASTNMM856OO9URCX519HU7HPMB6DQMJYJVT9UXTWUS9ATL31D77AL4ZLSBSNOQ1DMYC5838E2VE5ZJLE00Y9N6EJ5AE584L449RBK3IFHE' where id=41; -update noar tt set v1='2M27TTLJMUW78ZLY31CJ4HTV8OHD7IBLO3BLACHI5O63JUK7RL0VZZ1E4EDSTHRINUOWO64QXH9Q6ZVBRNIKPIZBDG9DJPFIU6E5X84JHXBBL51M0XYQATB7PSM8WYC6YT15PW2GRJ1OV8NCTT01HGMT5IK02SJW7Y1UB5R8NJUZC4J9885H1ZDWID4H2W6OK005S2IQ44UDGKU01EPHAOXAV05FX7TKVT19CZ9BZ12W6G5XJBC773GD2WCV0T9L7' where id=41; -update noar ti set v1='2M27TTLJMUW78ZLY31CJ4HTV8OHD7IBLO3BLACHI5O63JUK7RL0VZZ1E4EDSTHRINUOWO64QXH9Q6ZVBRNIKPIZBDG9DJPFIU6E5X84JHXBBL51M0XYQATB7PSM8WYC6YT15PW2GRJ1OV8NCTT01HGMT5IK02SJW7Y1UB5R8NJUZC4J9885H1ZDWID4H2W6OK005S2IQ44UDGKU01EPHAOXAV05FX7TKVT19CZ9BZ12W6G5XJBC773GD2WCV0T9L7' where id=41; -update noar tt set v2='P32XQK94PPU6P6XSDX80S4AWBPQVGMI87R8IYP490S1EFEHOTROI7XWZYJMA1R3SNTTBDTDN6EN5OV4C2WEGKM3F2QICKUY83ZH548QINBZR1BSYP8L2YMBM947TQ86E1TP6DCVISFVKWHH3KLJYZUOJANJEQJ6CZYDEWJTMGIAJSN4NYB409P12VKBPDU7DCY1SJ7CDN7U3S1U15MFK2MUH2ANQFNH58742X5YBDGZK8PT3VQH9D5WBLV8BCYZAZ' where id=41; -update noar ti set v2='P32XQK94PPU6P6XSDX80S4AWBPQVGMI87R8IYP490S1EFEHOTROI7XWZYJMA1R3SNTTBDTDN6EN5OV4C2WEGKM3F2QICKUY83ZH548QINBZR1BSYP8L2YMBM947TQ86E1TP6DCVISFVKWHH3KLJYZUOJANJEQJ6CZYDEWJTMGIAJSN4NYB409P12VKBPDU7DCY1SJ7CDN7U3S1U15MFK2MUH2ANQFNH58742X5YBDGZK8PT3VQH9D5WBLV8BCYZAZ' where id=41; -update noar tt set v3='K80ACSSQCTWAUUVH9B8ZXO5O1ZVDB11L5X2TBTT3QHCT6TWP46IJMP18XNMWL5ZFOMDM4F4A70BRJHQWJGA43OTVNLIZAXV6XVBPTSZTWR5BPQ1PW6Z2SHWLHINEQGW1NBODSR59LPCOQRSMIERXSOA0SX3OOK1B9IOSZELC6FZKCCB3GKFE0JNEVFFFSGFTRRYBSH563FYQU45KF3IQBTJ51E39IHGUFYGTNJT1VHBBUHT47BFAMKIK5B4H4O5DW' where id=41; -update noar ti set v3='K80ACSSQCTWAUUVH9B8ZXO5O1ZVDB11L5X2TBTT3QHCT6TWP46IJMP18XNMWL5ZFOMDM4F4A70BRJHQWJGA43OTVNLIZAXV6XVBPTSZTWR5BPQ1PW6Z2SHWLHINEQGW1NBODSR59LPCOQRSMIERXSOA0SX3OOK1B9IOSZELC6FZKCCB3GKFE0JNEVFFFSGFTRRYBSH563FYQU45KF3IQBTJ51E39IHGUFYGTNJT1VHBBUHT47BFAMKIK5B4H4O5DW' where id=41; -update noar tt set v0='AXE6E25KSO6X9FQ378OHFQJSL3Y587JHS6PS7N5TWKS0MU0PO4MU3NB64O341DQRWO0OLPL9DZ1N0CPEBKOQX8QPF0MX465BV4MML06D6GL37YX7FNVY73Z7JKD9Y6WCN5KSA1PEZ94FRMPL79ABK51SG3ETE4FMVFQF5M3YP72B2FPB1SI322X2IIL2HKECLWW9Z6IZDSDG3NPJX0B02GC39JVXUIQK4Y04A4ADW9NAVC73J8Z5WJU7U5J3OTPC9' where id=42; -update noar ti set v0='AXE6E25KSO6X9FQ378OHFQJSL3Y587JHS6PS7N5TWKS0MU0PO4MU3NB64O341DQRWO0OLPL9DZ1N0CPEBKOQX8QPF0MX465BV4MML06D6GL37YX7FNVY73Z7JKD9Y6WCN5KSA1PEZ94FRMPL79ABK51SG3ETE4FMVFQF5M3YP72B2FPB1SI322X2IIL2HKECLWW9Z6IZDSDG3NPJX0B02GC39JVXUIQK4Y04A4ADW9NAVC73J8Z5WJU7U5J3OTPC9' where id=42; -update noar tt set v1='73TOUD4EONX110H0DV7HE3HZVITV2ECQMO3QI5GL1OYXUHD4HK3422B2SIL9D0KFEODL2BD0AZJ7BFU7L7YL7YQI1A118DWTB0EU7OICZQLSF18NTGU24MUPXSXUHZY62CHOB4NNDNZ9C87FCTVVR7IT9F4853U485QQVT476K8ZE3EUIHIAXQVRMYZO6A0HNV693J2ZZK4J9AIEOR3SRP6278IAUXORSJRZ7NIOUUQXFQGON4APBRK2HDCC4ZBQJ' where id=42; -update noar ti set v1='73TOUD4EONX110H0DV7HE3HZVITV2ECQMO3QI5GL1OYXUHD4HK3422B2SIL9D0KFEODL2BD0AZJ7BFU7L7YL7YQI1A118DWTB0EU7OICZQLSF18NTGU24MUPXSXUHZY62CHOB4NNDNZ9C87FCTVVR7IT9F4853U485QQVT476K8ZE3EUIHIAXQVRMYZO6A0HNV693J2ZZK4J9AIEOR3SRP6278IAUXORSJRZ7NIOUUQXFQGON4APBRK2HDCC4ZBQJ' where id=42; -update noar tt set v2='8SNJHZKVFOKMR9JBXBSP14F7VRUPNQQ9AO779YSPCXBCVH8RNS8ZQ25KAVEUW68WXZ5CBT2S3P51CUP2HJWZSDAN28CBNBHQSB44YASD0YWTN17R8143THIBC2HCR41J8JOS5VCHUJDUEY8CGYSWGY9EWOI36X4NGTMEALRCFNKJR2W9TWCYZQFM963S6IBF1Y3MON44NL98MOCRIKZ5O97N6AM3E28JJ9WO5S7EA8WK74K0CRFLR5MBJR35PMIZN' where id=42; -update noar ti set v2='8SNJHZKVFOKMR9JBXBSP14F7VRUPNQQ9AO779YSPCXBCVH8RNS8ZQ25KAVEUW68WXZ5CBT2S3P51CUP2HJWZSDAN28CBNBHQSB44YASD0YWTN17R8143THIBC2HCR41J8JOS5VCHUJDUEY8CGYSWGY9EWOI36X4NGTMEALRCFNKJR2W9TWCYZQFM963S6IBF1Y3MON44NL98MOCRIKZ5O97N6AM3E28JJ9WO5S7EA8WK74K0CRFLR5MBJR35PMIZN' where id=42; -update noar tt set v3='26WCQVQYMI48CW3TL65ZS4F5R9MTI048B05BF60S9OHG46ZY0NEOAZFCCHH7IUNP1N93HS872SFTB2LZ3NH7RYR5WIWX2DLZCER9I1C1P1BEPOSC3S3AS66HFI15D8Y1Y31U90L207YABO9KPJEASZM4PX0V7RQCNRXTS10X2LDWC722MXTVJPWTXYV2513V3QAYAK9HMQXZXKCA668PZG1HFK6VN2WYWW8VEWRBLNV5B9CL98THF8T4PQ2MBI38P' where id=42; -update noar ti set v3='26WCQVQYMI48CW3TL65ZS4F5R9MTI048B05BF60S9OHG46ZY0NEOAZFCCHH7IUNP1N93HS872SFTB2LZ3NH7RYR5WIWX2DLZCER9I1C1P1BEPOSC3S3AS66HFI15D8Y1Y31U90L207YABO9KPJEASZM4PX0V7RQCNRXTS10X2LDWC722MXTVJPWTXYV2513V3QAYAK9HMQXZXKCA668PZG1HFK6VN2WYWW8VEWRBLNV5B9CL98THF8T4PQ2MBI38P' where id=42; -update noar tt set v0='N4QGLNWDK955DOINBQI4XMPW86UUQDBAZA1B6U6BBCDCRNXDGA7G97YJLTTM9XUPYCCVK9VKDZFMQZRC8QT83CG0Y73MPQYBN5MDSPF3H58EU9C1HGUZIVD5T0A62RKW3DBI6MLYDJPBYY33EOTBGYE2QTPO0TABRG7RPU9JHKU5WKIPZO58UGB7FV5MGHK5YQCZMT3EZF5M7KNKJ0YRH2EZAXG2TQ6G4BQQLIH92I1PI256H0ZWZLNROCLN4O0BE' where id=43; -update noar ti set v0='N4QGLNWDK955DOINBQI4XMPW86UUQDBAZA1B6U6BBCDCRNXDGA7G97YJLTTM9XUPYCCVK9VKDZFMQZRC8QT83CG0Y73MPQYBN5MDSPF3H58EU9C1HGUZIVD5T0A62RKW3DBI6MLYDJPBYY33EOTBGYE2QTPO0TABRG7RPU9JHKU5WKIPZO58UGB7FV5MGHK5YQCZMT3EZF5M7KNKJ0YRH2EZAXG2TQ6G4BQQLIH92I1PI256H0ZWZLNROCLN4O0BE' where id=43; -update noar tt set v1='C5WNK7DO09CLH11GEQ15TCEF2UW5XOLKZ6XXEMYMC1LYTAMPBY6HRGRUKURWHTS9JPNWL41BP8PM9686W2U0B8R9JSB2HQU71KM8N6Z75PFUI97S7GOMCJ9YNW43U1LFU26X8SK8RF7EIL6TMSM8FFXAT91XM96W0NPTYOLFEUEI8CYQ555FACHLW0V4R1E3QG62F3FVBBGW05MI6AZZWLAJ688GVGOIE2C8UTZUT7CJYANKIUIRT92MTH45YVG20' where id=43; -update noar ti set v1='C5WNK7DO09CLH11GEQ15TCEF2UW5XOLKZ6XXEMYMC1LYTAMPBY6HRGRUKURWHTS9JPNWL41BP8PM9686W2U0B8R9JSB2HQU71KM8N6Z75PFUI97S7GOMCJ9YNW43U1LFU26X8SK8RF7EIL6TMSM8FFXAT91XM96W0NPTYOLFEUEI8CYQ555FACHLW0V4R1E3QG62F3FVBBGW05MI6AZZWLAJ688GVGOIE2C8UTZUT7CJYANKIUIRT92MTH45YVG20' where id=43; -update noar tt set v2='KSZXG1B5O09HBMBYGDCWHIST8GRJEHY8PN4IB7TBDN01PJMOLBWY9TMLI3X5V80U2K5NNNZ2P9TTQFG1HBW1T1YY1VP3UDV1LKFNTGOWPM12XFN82W8T083GY7HR6BLYMPT0ZQHTSGMXCE7BY5L2BOB5GUWZINU36VMGLYJXX63OHXTVCHC7Q8ISLOZC3DSN2HDTM1APTXHIXKYQFZ3UCLWD09SDZ7TJ72ZYKMWNGA7QU9MGVACKXXFWYQDOS2SMC' where id=43; -update noar ti set v2='KSZXG1B5O09HBMBYGDCWHIST8GRJEHY8PN4IB7TBDN01PJMOLBWY9TMLI3X5V80U2K5NNNZ2P9TTQFG1HBW1T1YY1VP3UDV1LKFNTGOWPM12XFN82W8T083GY7HR6BLYMPT0ZQHTSGMXCE7BY5L2BOB5GUWZINU36VMGLYJXX63OHXTVCHC7Q8ISLOZC3DSN2HDTM1APTXHIXKYQFZ3UCLWD09SDZ7TJ72ZYKMWNGA7QU9MGVACKXXFWYQDOS2SMC' where id=43; -update noar tt set v3='V8LZAYWQ9VSGN0UH6ODPBSDK0N28GI0OWTC2ZNJ9S6SCJ4FJA4YGHUR8DJ84X5VXJRC71AXL92XF78L9CISJK00TVXMEMG0CC4O0S0BSOOEIPZKM5CI0A981N0CYPNGW66IPMTVPEQMWQCD8EE0JINYSQNW96RSQ5RHV1PDV47Y0VSHRESBF7T2VPO1LTTIGQSQWOVFW9I4KYVCVB8YMI5JI8X64L37GB7FIU5Z39D1VAW0WPVPI7JFQ5K59PLRNV' where id=43; -update noar ti set v3='V8LZAYWQ9VSGN0UH6ODPBSDK0N28GI0OWTC2ZNJ9S6SCJ4FJA4YGHUR8DJ84X5VXJRC71AXL92XF78L9CISJK00TVXMEMG0CC4O0S0BSOOEIPZKM5CI0A981N0CYPNGW66IPMTVPEQMWQCD8EE0JINYSQNW96RSQ5RHV1PDV47Y0VSHRESBF7T2VPO1LTTIGQSQWOVFW9I4KYVCVB8YMI5JI8X64L37GB7FIU5Z39D1VAW0WPVPI7JFQ5K59PLRNV' where id=43; -update noar tt set v0='JG70S82EH2XF6QK131GSV1AKI0CK0MH0ZSB477ZNQYRLL8DE8W9P9FV1DTUXNT3GPHRP49YZAI5I9HWRU24KQZANZWFRY1QA67KSSVQIN9ZS9PVGNLHRUPU47R0WXB6VB8NI1YBWQ4VO4EFR65XW8XLM7KG2SRNRFYVF7P54YAJS7L3QF2S68RJWHA22T73YA8N11N05E0N0C9PRDBAKKAFJ0Z0MD70XOOOPDM7K6KGQAXD78Q4CIT8PYDQ39UD3Q' where id=44; -update noar ti set v0='JG70S82EH2XF6QK131GSV1AKI0CK0MH0ZSB477ZNQYRLL8DE8W9P9FV1DTUXNT3GPHRP49YZAI5I9HWRU24KQZANZWFRY1QA67KSSVQIN9ZS9PVGNLHRUPU47R0WXB6VB8NI1YBWQ4VO4EFR65XW8XLM7KG2SRNRFYVF7P54YAJS7L3QF2S68RJWHA22T73YA8N11N05E0N0C9PRDBAKKAFJ0Z0MD70XOOOPDM7K6KGQAXD78Q4CIT8PYDQ39UD3Q' where id=44; -update noar tt set v1='07SG3BPYWQQEEPPUXICSE0JKJDFA0C3DD95G0MF2KDDBSGP636C9KSJ4JDO2W9UDT3FI465Z8WSWYULSNIH5XT7XYUTMNQRXJSGC3Q7TU8FGLFSHVX2FMKP4OU25X9NPNOQ0VUYR76DFE9MB25EMCZ8254D116AC9HUB1QSYMVQUO7IJNLZKYWSI0S973LHC0I87Y8415RJMAW8SE5EDRN5HUMGFOL2QSLCVLMB5DPZK3SHMPBQOU59PL2NDZYMAY' where id=44; -update noar ti set v1='07SG3BPYWQQEEPPUXICSE0JKJDFA0C3DD95G0MF2KDDBSGP636C9KSJ4JDO2W9UDT3FI465Z8WSWYULSNIH5XT7XYUTMNQRXJSGC3Q7TU8FGLFSHVX2FMKP4OU25X9NPNOQ0VUYR76DFE9MB25EMCZ8254D116AC9HUB1QSYMVQUO7IJNLZKYWSI0S973LHC0I87Y8415RJMAW8SE5EDRN5HUMGFOL2QSLCVLMB5DPZK3SHMPBQOU59PL2NDZYMAY' where id=44; -update noar tt set v2='1RXGUMTFHFSC2VP8HGPVKV4ZKJPBDQTQ4OK8UKMRHUKEMZGZ5CA6GKAZ5BHY5I3KM1I2Z6G28K8T9Q3QCII043K742N6KOJMWLFADKMBV59VAXE2TAC2P2K0KWLB3NX6V7TP5HPZUT60NGETTCOWFC299PQKE8VVGI6NRTKEKXMS6YXK5INJHL4W8XW2A269VR5OHMJDOE1HT1PUMYGUJA4PZCL21VN7UUJ7TF2P968OH7LRB2RR5ML6Y5XU2Y0QC' where id=44; -update noar ti set v2='1RXGUMTFHFSC2VP8HGPVKV4ZKJPBDQTQ4OK8UKMRHUKEMZGZ5CA6GKAZ5BHY5I3KM1I2Z6G28K8T9Q3QCII043K742N6KOJMWLFADKMBV59VAXE2TAC2P2K0KWLB3NX6V7TP5HPZUT60NGETTCOWFC299PQKE8VVGI6NRTKEKXMS6YXK5INJHL4W8XW2A269VR5OHMJDOE1HT1PUMYGUJA4PZCL21VN7UUJ7TF2P968OH7LRB2RR5ML6Y5XU2Y0QC' where id=44; -update noar tt set v3='NKL5I1GO2TCCE7RR4QIHHIX3QP0NX2BZXAD6DBSWXY2JJTWI63HF2C6P317LOR0CN6NIVMITIQ97NC06DJINN1UBDSAGHK1B3ZXW3N0YG8NH4OGEA9GINKXND5QQW00RE80DDCZ5658TIQQ3I0QTMZ24EIPN8GRY3L4WW2DJ44TJ2OUF2Y6YPE0469HYDISL1J3NGKMPB6GDSL01PXHSGT3E3P9O4QAT4RMR925FJRH3UJJM7LAAMAXH95TK1J0PC' where id=44; -update noar ti set v3='NKL5I1GO2TCCE7RR4QIHHIX3QP0NX2BZXAD6DBSWXY2JJTWI63HF2C6P317LOR0CN6NIVMITIQ97NC06DJINN1UBDSAGHK1B3ZXW3N0YG8NH4OGEA9GINKXND5QQW00RE80DDCZ5658TIQQ3I0QTMZ24EIPN8GRY3L4WW2DJ44TJ2OUF2Y6YPE0469HYDISL1J3NGKMPB6GDSL01PXHSGT3E3P9O4QAT4RMR925FJRH3UJJM7LAAMAXH95TK1J0PC' where id=44; -update noar tt set v0='QJLVI60CSI69F3T7M9J6LRGMMEF7QBZ140K30QJ6PCHLSWCP5PLFDNCLFY5GUVZYBJ26I3P4D8C7LF5QYD3XGY6HNMP3UKCLXV6IRN6WA50NIUDJ1K0V60YPORJCJUFURIPD5MA4SQWAQQ0B62M1GHJKEXMFMFAUE1VH2UEJ98G9075NEITENA5V94BBVPQ7DIGOTVDPEM6UN8OYY0L0LXDTYQO2BFO47XEO6U5SS0V4BMH8FTK537Z2JCZYEVFB0' where id=45; -update noar ti set v0='QJLVI60CSI69F3T7M9J6LRGMMEF7QBZ140K30QJ6PCHLSWCP5PLFDNCLFY5GUVZYBJ26I3P4D8C7LF5QYD3XGY6HNMP3UKCLXV6IRN6WA50NIUDJ1K0V60YPORJCJUFURIPD5MA4SQWAQQ0B62M1GHJKEXMFMFAUE1VH2UEJ98G9075NEITENA5V94BBVPQ7DIGOTVDPEM6UN8OYY0L0LXDTYQO2BFO47XEO6U5SS0V4BMH8FTK537Z2JCZYEVFB0' where id=45; -update noar tt set v1='0MED4MORQR2O4BOE2U9MH6LFRAIEP1HTR4MLPLYBRV3FZLH57T4O4XU8C3VWRILWECMJJZSYLVD9YAIG4OVOK06LUY002LNSLBMGVGDRHVE1R7G3I4H3J2SMWPHUV3WEMPDB0DSW72EFDQW1AEGV2GLP2KO7LZVPYDCSG0P69LZPLY7DPRPXSXOS2Z3OVXC8RX1X5EBFKRRSP9EFITVST68QO991P9GE0S19MUSDR23CLMQYP1HP47J29WVP2I1CA' where id=45; -update noar ti set v1='0MED4MORQR2O4BOE2U9MH6LFRAIEP1HTR4MLPLYBRV3FZLH57T4O4XU8C3VWRILWECMJJZSYLVD9YAIG4OVOK06LUY002LNSLBMGVGDRHVE1R7G3I4H3J2SMWPHUV3WEMPDB0DSW72EFDQW1AEGV2GLP2KO7LZVPYDCSG0P69LZPLY7DPRPXSXOS2Z3OVXC8RX1X5EBFKRRSP9EFITVST68QO991P9GE0S19MUSDR23CLMQYP1HP47J29WVP2I1CA' where id=45; -update noar tt set v2='BIG3O7ZSKC73JJW8LEXUOOEU3HZX9F3GTIXC08U7QQOGA74LOEUTY1T738SV9TAHINHU6JKK5RPW80NIXC9RHN6YHRJ1YBV8LEK4XARWJM3IMXEJP6PWB7WVB7EMDZKK42DSQ2NG7HGL6IX04EBK1HI6JJ16GW452PA6YAEU6H61HQ9T7LZPVGTBP6NMYKN7KPXOQKBOYG06LJ6WPSMN2S2NFKCDC1KDZD6ILJ83HSQSF5YCZDEWN3D5EC9AGYUW0' where id=45; -update noar ti set v2='BIG3O7ZSKC73JJW8LEXUOOEU3HZX9F3GTIXC08U7QQOGA74LOEUTY1T738SV9TAHINHU6JKK5RPW80NIXC9RHN6YHRJ1YBV8LEK4XARWJM3IMXEJP6PWB7WVB7EMDZKK42DSQ2NG7HGL6IX04EBK1HI6JJ16GW452PA6YAEU6H61HQ9T7LZPVGTBP6NMYKN7KPXOQKBOYG06LJ6WPSMN2S2NFKCDC1KDZD6ILJ83HSQSF5YCZDEWN3D5EC9AGYUW0' where id=45; -update noar tt set v3='OUYC9DKTGWZGFT4A2NRBER81EVCO2O3UA8VOUMDQJDSO52KN420UL6NE4PK94H9H62WM6THTLWK4QZXSKLVCZHRTUJ5S0FUHRKWTEFEP4FU62F1BYF23U2UQS091VV8AAACCECK0XFK85O1SHU03GZKA0TFODE1EFBOC3HTA42IIA3IS8W0YRUMPT4EQI4KI4V4I9T79ZV200J4O8IURWZHF070JWBUR702E9SEPNZ9Z95CVYHU10P1O0AMLGA9Y9' where id=45; -update noar ti set v3='OUYC9DKTGWZGFT4A2NRBER81EVCO2O3UA8VOUMDQJDSO52KN420UL6NE4PK94H9H62WM6THTLWK4QZXSKLVCZHRTUJ5S0FUHRKWTEFEP4FU62F1BYF23U2UQS091VV8AAACCECK0XFK85O1SHU03GZKA0TFODE1EFBOC3HTA42IIA3IS8W0YRUMPT4EQI4KI4V4I9T79ZV200J4O8IURWZHF070JWBUR702E9SEPNZ9Z95CVYHU10P1O0AMLGA9Y9' where id=45; -update noar tt set v0='PB6DJX0JC33IS056GK6KS818CFG0U90X8WVOUM4WYRM7RZXFZWM91LA9VF5LWY0ERXO349YZM8EUF7Y7J6DWDDZA4AANVSO5OVQL1GBQMOLL5V80V4TFLBQNN2X7YWOW5IY6FYWR4GK0XXG7NQ64P89YYADE3V27BWVJ9REG4PD33XEX4DINBT64RSDPO476HGLKW3RNH4SFCC3CL95A14DNWE17RSNBIX8U3590R7GXN2VB7LIG1A3H9T9Y58TCL' where id=46; -update noar ti set v0='PB6DJX0JC33IS056GK6KS818CFG0U90X8WVOUM4WYRM7RZXFZWM91LA9VF5LWY0ERXO349YZM8EUF7Y7J6DWDDZA4AANVSO5OVQL1GBQMOLL5V80V4TFLBQNN2X7YWOW5IY6FYWR4GK0XXG7NQ64P89YYADE3V27BWVJ9REG4PD33XEX4DINBT64RSDPO476HGLKW3RNH4SFCC3CL95A14DNWE17RSNBIX8U3590R7GXN2VB7LIG1A3H9T9Y58TCL' where id=46; -update noar tt set v1='F83WA3EXCAFGQ1J7S9CZTE399YABHZODSXR0D506Z2KEWZ7982MHMU8JTC6GCITMDVUG1ZQHEQT7MQHLVHKNE5719S6SUSLKZ9JGR224GHBZIVTD4AM09YISFRK1TLN7LMJSDIETBZRNR7U91Q13PP4V42MC6S0JSZRNAF83CN37Q2C4Y8O8TMJBICTR0ERJ4523EAJ3LKL6BFDVQVPUVWF0D5XABZXR75Z98NHSOELQ4U8XMX1727847VE2NNQQG' where id=46; -update noar ti set v1='F83WA3EXCAFGQ1J7S9CZTE399YABHZODSXR0D506Z2KEWZ7982MHMU8JTC6GCITMDVUG1ZQHEQT7MQHLVHKNE5719S6SUSLKZ9JGR224GHBZIVTD4AM09YISFRK1TLN7LMJSDIETBZRNR7U91Q13PP4V42MC6S0JSZRNAF83CN37Q2C4Y8O8TMJBICTR0ERJ4523EAJ3LKL6BFDVQVPUVWF0D5XABZXR75Z98NHSOELQ4U8XMX1727847VE2NNQQG' where id=46; -update noar tt set v2='VF2FHUXPTMJCPPC6ND5MY7L1YPUXSV4NWLQOE0COYQJ09WA940LR6V0M2FPD7LYW20UELPDE8BMUOKR1THQS1X1YBCO3KJW1C60K16ADIGLM05OEGLB5DSUZT3SDFQI2P3OQ4ONO95FI5UPLZE8ZVRRTVJQDUT6LEVFNRLMW67I2KVXCDU27L2CPS3KDEKRTFC7HIXEV6LFAYU74CCI7DAM2U76IX075N8HGAX8U8ZOWWXT10DNPI6LCY12LXO38W' where id=46; -update noar ti set v2='VF2FHUXPTMJCPPC6ND5MY7L1YPUXSV4NWLQOE0COYQJ09WA940LR6V0M2FPD7LYW20UELPDE8BMUOKR1THQS1X1YBCO3KJW1C60K16ADIGLM05OEGLB5DSUZT3SDFQI2P3OQ4ONO95FI5UPLZE8ZVRRTVJQDUT6LEVFNRLMW67I2KVXCDU27L2CPS3KDEKRTFC7HIXEV6LFAYU74CCI7DAM2U76IX075N8HGAX8U8ZOWWXT10DNPI6LCY12LXO38W' where id=46; -update noar tt set v3='1EB42JNSJZPAFH6Z91LNXM3U5AHA7KOW5QKPR1Y18HTDDJWRQIB4DE9A0BI8D77ZAS49I2Y0YV0U35XT5DRAM5DI644XMIFBLL6X7D0XE2E9IXSQUS4WI340PH3RUYCC7QPIJNH58XTKG0PFD3F2OZ43CASBUT9XDR9SA4ESDBDG6GUVZOQGV9ZF7GZ91HQV3ZPI9RCLUSKYJ4KRR1IPM3EZW9X9VD7ID06EVB9MR60WQF2K94VQS4V6FLP67EFE4' where id=46; -update noar ti set v3='1EB42JNSJZPAFH6Z91LNXM3U5AHA7KOW5QKPR1Y18HTDDJWRQIB4DE9A0BI8D77ZAS49I2Y0YV0U35XT5DRAM5DI644XMIFBLL6X7D0XE2E9IXSQUS4WI340PH3RUYCC7QPIJNH58XTKG0PFD3F2OZ43CASBUT9XDR9SA4ESDBDG6GUVZOQGV9ZF7GZ91HQV3ZPI9RCLUSKYJ4KRR1IPM3EZW9X9VD7ID06EVB9MR60WQF2K94VQS4V6FLP67EFE4' where id=46; -update noar tt set v0='AXWTUPJFKOTIA2IGWM4MX9SBKLG9Y2GM0NBE9DAISHQOS4I5ZYXRNXZ631JY9S48RY2IRQCBHF457P1G20HXOUHGYN54U06QE9KHLVDIEWR1IF34B12VVM5CUZLDYN5W6BM20EGYUJRV9S5AWO5WU7D14D5WOW7P0FPG9WXZLXPUPNTKS4VXESSISW6BM1P5UDIUGBII7370S9UJFXF4P0SA55RK9Y47P92FAE6QKG2HS528DU4VSL3H1N19MV5RB' where id=47; -update noar ti set v0='AXWTUPJFKOTIA2IGWM4MX9SBKLG9Y2GM0NBE9DAISHQOS4I5ZYXRNXZ631JY9S48RY2IRQCBHF457P1G20HXOUHGYN54U06QE9KHLVDIEWR1IF34B12VVM5CUZLDYN5W6BM20EGYUJRV9S5AWO5WU7D14D5WOW7P0FPG9WXZLXPUPNTKS4VXESSISW6BM1P5UDIUGBII7370S9UJFXF4P0SA55RK9Y47P92FAE6QKG2HS528DU4VSL3H1N19MV5RB' where id=47; -update noar tt set v1='U5HRVCAYKV0YX0Z7UFWFRFMGQZOL74CRFPA12V5RQHAOAB8WHT2GQTRWBBNMZ9ZEKM7P5CCGTNBYY5N3OHM520HNB01TRJBS9JRG6ZBGWEWNKPSNHJHB1B0Q4GWCDHLO24NMGC8KFGXKC7F8CIOA33PQODFSZCBLM55BE3P41S9COGW04H0KC767XWMUWDS879SA7MRDMXA09I0IUCXWZUWDDB5FP3Z3LXXYQ1JCDGXE9RQNO8PFGSU2GYBTPAXBU' where id=47; -update noar ti set v1='U5HRVCAYKV0YX0Z7UFWFRFMGQZOL74CRFPA12V5RQHAOAB8WHT2GQTRWBBNMZ9ZEKM7P5CCGTNBYY5N3OHM520HNB01TRJBS9JRG6ZBGWEWNKPSNHJHB1B0Q4GWCDHLO24NMGC8KFGXKC7F8CIOA33PQODFSZCBLM55BE3P41S9COGW04H0KC767XWMUWDS879SA7MRDMXA09I0IUCXWZUWDDB5FP3Z3LXXYQ1JCDGXE9RQNO8PFGSU2GYBTPAXBU' where id=47; -update noar tt set v2='SS4H5RR972GX6AC6L42C5NSQK1EPB2RZ3339ZIP8S6LBDZX9LNKF5D6DAX8EFV0HW3WCI7E4HPPYP3Q1GJRCD2F98FAR4D2526LBFVWF5F3X546B8C82D6KTC633L1BSWCKRF4MYFWOW4M9NVRAYQILXAS4XZ206T3H3K1R9V6EAH79XM6T1KJPH8N2CGY2G9JJM7ZVTKMWXXWWUMZG737VKB1441EA53REMQI9303XF96GS7JQRHAVMBCKFL15AE' where id=47; -update noar ti set v2='SS4H5RR972GX6AC6L42C5NSQK1EPB2RZ3339ZIP8S6LBDZX9LNKF5D6DAX8EFV0HW3WCI7E4HPPYP3Q1GJRCD2F98FAR4D2526LBFVWF5F3X546B8C82D6KTC633L1BSWCKRF4MYFWOW4M9NVRAYQILXAS4XZ206T3H3K1R9V6EAH79XM6T1KJPH8N2CGY2G9JJM7ZVTKMWXXWWUMZG737VKB1441EA53REMQI9303XF96GS7JQRHAVMBCKFL15AE' where id=47; -update noar tt set v3='OUX8FNHCWK1ZK9IHMWM8RMU1N006C2AFDN17KHGJJSOD8ZL3K7R6FWR8LIVSR0DLGHIFR4SO6EMXXOPZ3RZSEDQ70JJIW0COS50W4MIPUZ4PFZUHNDDBP3PFCMEQQIXUMN0E82BPR2DTMQEBLAZA7ON3QX7V612H4UO6H9ZK1Q9IQT4G95APIRXDNNLFZQTOZPWNNNJ67MHTRMN2T49PTZH9H55GXEE4PY6I551NZAVD5NRVOMXZ1MRQNWC2RY6W7' where id=47; -update noar ti set v3='OUX8FNHCWK1ZK9IHMWM8RMU1N006C2AFDN17KHGJJSOD8ZL3K7R6FWR8LIVSR0DLGHIFR4SO6EMXXOPZ3RZSEDQ70JJIW0COS50W4MIPUZ4PFZUHNDDBP3PFCMEQQIXUMN0E82BPR2DTMQEBLAZA7ON3QX7V612H4UO6H9ZK1Q9IQT4G95APIRXDNNLFZQTOZPWNNNJ67MHTRMN2T49PTZH9H55GXEE4PY6I551NZAVD5NRVOMXZ1MRQNWC2RY6W7' where id=47; -update noar tt set v0='MB5H1GDPS1VCHQ9PW1EDK84A367DLALIB92THATAP0MY21UZSLKIQMVALPITBWYZ1T6DKOMNMDJ26BP7P29QOFVY0Q1QGQ1DS4JPNKH5IJO1I1YRV3SSWBTFRF14ITYQD7FU7PV0IGUJ1A21XP8CF3ZJ9T7QB5T9OOAQPGJ0KVOM6GYJ7WA369TOV7TDRGQU1GEFYLSYRIWTTGCN6C07EQAYX9MF399JCZ3OBTDH9WDKFERXJGO95DAAIPAF0H4YK' where id=48; -update noar ti set v0='MB5H1GDPS1VCHQ9PW1EDK84A367DLALIB92THATAP0MY21UZSLKIQMVALPITBWYZ1T6DKOMNMDJ26BP7P29QOFVY0Q1QGQ1DS4JPNKH5IJO1I1YRV3SSWBTFRF14ITYQD7FU7PV0IGUJ1A21XP8CF3ZJ9T7QB5T9OOAQPGJ0KVOM6GYJ7WA369TOV7TDRGQU1GEFYLSYRIWTTGCN6C07EQAYX9MF399JCZ3OBTDH9WDKFERXJGO95DAAIPAF0H4YK' where id=48; -update noar tt set v1='WS7R7FP866JN1TTU7QFKA4URDL1IS3ENK8PL5YPOGILQ76VUFO9Y362VTAHA19J3VM4WMZON3U0KU80KCEL6G3AR9HXHFPJ98RP3YAD9IEZBTK7FU8L512R3Q3JO2EAFYLY7RONZTGZ44DF66IGNA0E2NKF8GBELZIRS55I7VOD7CTM3M60PDIACWRZAOA61NHC8BCWI8CDROUYKK0OHYGX18O71HZLHON3U3TAGPB9MJN3CCCSRW0EF0WS7H18HD' where id=48; -update noar ti set v1='WS7R7FP866JN1TTU7QFKA4URDL1IS3ENK8PL5YPOGILQ76VUFO9Y362VTAHA19J3VM4WMZON3U0KU80KCEL6G3AR9HXHFPJ98RP3YAD9IEZBTK7FU8L512R3Q3JO2EAFYLY7RONZTGZ44DF66IGNA0E2NKF8GBELZIRS55I7VOD7CTM3M60PDIACWRZAOA61NHC8BCWI8CDROUYKK0OHYGX18O71HZLHON3U3TAGPB9MJN3CCCSRW0EF0WS7H18HD' where id=48; -update noar tt set v2='OURRGQBAB4425PAAVQDZCSF3DEWUW1CVBB3C7UCCKJSWRR1D4IFS7P8UMI59MIO6YOAH3AJUAHBT05416W8WH5501TFITBJGRWQM61Q4IND4GH8L85ZBULJQOX54XT51AXUASK179GJRJWTIH8MXFORV4Z9Y9DIBBDF6VC5MWBCOVBLCQU6WX8PGP59B4G7HVT1TOA2ULTNJX5OAP6WVU92RI1M47SIHHPI6FV3F68KRO27T572PN5NIGL6TOG2BO' where id=48; -update noar ti set v2='OURRGQBAB4425PAAVQDZCSF3DEWUW1CVBB3C7UCCKJSWRR1D4IFS7P8UMI59MIO6YOAH3AJUAHBT05416W8WH5501TFITBJGRWQM61Q4IND4GH8L85ZBULJQOX54XT51AXUASK179GJRJWTIH8MXFORV4Z9Y9DIBBDF6VC5MWBCOVBLCQU6WX8PGP59B4G7HVT1TOA2ULTNJX5OAP6WVU92RI1M47SIHHPI6FV3F68KRO27T572PN5NIGL6TOG2BO' where id=48; -update noar tt set v3='M2GZYWGU6K2Z1BRUCDWQM4MX6YZ0VHVWKMVIH3YTKBQNXUYGIVEYKCIIA80205LX9OYPVGWFDOWUQBQENQQCT0CDEJ59HVFTTG7J4EG455TAXBDIHSZMZWKK9AZ6118VHSOGVEINMWWWWZUGGM79GAT5PZKI1WR8EA6J24XGGCOVKLK77UWA8LJ91GZLFEI0F0QUVBAGX4125SAJXK2HBKJMVD165V4W8DCLS3UCVWZXPPFDO6QBWHDXRKFKALR86' where id=48; -update noar ti set v3='M2GZYWGU6K2Z1BRUCDWQM4MX6YZ0VHVWKMVIH3YTKBQNXUYGIVEYKCIIA80205LX9OYPVGWFDOWUQBQENQQCT0CDEJ59HVFTTG7J4EG455TAXBDIHSZMZWKK9AZ6118VHSOGVEINMWWWWZUGGM79GAT5PZKI1WR8EA6J24XGGCOVKLK77UWA8LJ91GZLFEI0F0QUVBAGX4125SAJXK2HBKJMVD165V4W8DCLS3UCVWZXPPFDO6QBWHDXRKFKALR86' where id=48; -update noar tt set v0='AO8D9J3S7JLAIEP1567XBBM1YRUQ7R9TTBOOUCNW1WWEBVB43X0CU7VO90UC42FQUATL201RCV6QF476ELOBZEFI2J7RJZ94OR9CFTJZ1GZRJ0BO0MFLYIQD8YQ79NTMYM6P768O0GENJT4HQTMMITS5Z6TE1HY1EYTH12C0WIXI3H10BDQHOMQH9XPWN7PKBNRKVSEDQBANGB90IARLZNRP77IBID3YRG3LZUAF12DY7HJ1CCK05TR5PVGPFTZ03' where id=49; -update noar ti set v0='AO8D9J3S7JLAIEP1567XBBM1YRUQ7R9TTBOOUCNW1WWEBVB43X0CU7VO90UC42FQUATL201RCV6QF476ELOBZEFI2J7RJZ94OR9CFTJZ1GZRJ0BO0MFLYIQD8YQ79NTMYM6P768O0GENJT4HQTMMITS5Z6TE1HY1EYTH12C0WIXI3H10BDQHOMQH9XPWN7PKBNRKVSEDQBANGB90IARLZNRP77IBID3YRG3LZUAF12DY7HJ1CCK05TR5PVGPFTZ03' where id=49; -update noar tt set v1='XCKZM3OD2Z7IVD51S1UZKBLJOBHZ21CA37Z0ZLXXXU9WWPGHHKF8B7WIISUTNZ9XV48UMBS92BGSUKW1G1K0AEND4PEC7X5TUIGYOSOTUELEV5GRAO686I6SLPHO3HDM0JX9NO3BRNE44IZ9EKY0VR225LWRSLP8Z6OZTGN2O7BAD9DBRRS8VZ3O87ZDZO8X2UAS7UCFUF8T7PZ0BSAU2T4X91N9EXA8FDYQSNGKRMJOC1Y0IJA6Q6P8H1MBRQTLZ' where id=49; -update noar ti set v1='XCKZM3OD2Z7IVD51S1UZKBLJOBHZ21CA37Z0ZLXXXU9WWPGHHKF8B7WIISUTNZ9XV48UMBS92BGSUKW1G1K0AEND4PEC7X5TUIGYOSOTUELEV5GRAO686I6SLPHO3HDM0JX9NO3BRNE44IZ9EKY0VR225LWRSLP8Z6OZTGN2O7BAD9DBRRS8VZ3O87ZDZO8X2UAS7UCFUF8T7PZ0BSAU2T4X91N9EXA8FDYQSNGKRMJOC1Y0IJA6Q6P8H1MBRQTLZ' where id=49; -update noar tt set v2='HX8HWM57ZA4REZHCZ5QIFX3EHDZ5VOQALTPQ9RGTUREZD61Q2EE71ARF7Q070OECZOR74YX0VMXQ8OUOWG5U1JYJXRKLFY9OKJ1W5G19WZN3RYNTLBJTFWV66CCRGWCDS984LVZ2MX00PFU5O1PEVR6NZEDN91BYU3YNR88HI3VZ1L926IYZF7UTJOUJ7J3I6LT8KAOTF0EJXK9K2MYTAHJM430XVQ3CX1Q8D59FBWJCBBYD285SMF9MGHOZUMJX2' where id=49; -update noar ti set v2='HX8HWM57ZA4REZHCZ5QIFX3EHDZ5VOQALTPQ9RGTUREZD61Q2EE71ARF7Q070OECZOR74YX0VMXQ8OUOWG5U1JYJXRKLFY9OKJ1W5G19WZN3RYNTLBJTFWV66CCRGWCDS984LVZ2MX00PFU5O1PEVR6NZEDN91BYU3YNR88HI3VZ1L926IYZF7UTJOUJ7J3I6LT8KAOTF0EJXK9K2MYTAHJM430XVQ3CX1Q8D59FBWJCBBYD285SMF9MGHOZUMJX2' where id=49; -update noar tt set v3='GNK7N79NMO26ME4T9KR9W4L8G8252XOYJVKGG3UF8K0CXS9YKT7V75YBZHMDSL8XVGGLI50SSDKX0MPDVRR91YGM3YWKOBI9ZKDZ6YLMX6XST30TX98XKUZHOE2PIR4P3ND98UAVQ0N1TDXZ8979OCOG9CZYVQMT3AC72VQZ9SN78WW41GEKAODMR7FI1DXR91AIBOAQ0VS6QEIO5Q3EQHJKR3QD312WC3OQ5RHX45ELD10QNZFLR81V8DR8IJ8WD' where id=49; -update noar ti set v3='GNK7N79NMO26ME4T9KR9W4L8G8252XOYJVKGG3UF8K0CXS9YKT7V75YBZHMDSL8XVGGLI50SSDKX0MPDVRR91YGM3YWKOBI9ZKDZ6YLMX6XST30TX98XKUZHOE2PIR4P3ND98UAVQ0N1TDXZ8979OCOG9CZYVQMT3AC72VQZ9SN78WW41GEKAODMR7FI1DXR91AIBOAQ0VS6QEIO5Q3EQHJKR3QD312WC3OQ5RHX45ELD10QNZFLR81V8DR8IJ8WD' where id=49; -update noar tt set v0='37HT7BYR78EERPH9RVTTIOBKTLDDE9S7WVA8ZUA76MVVW2Q10E6AT0BNWCSDFB0B0HJ802F2LN6CGQJ0DU6DJ8G37WONMW0KHOFJQOVHT3YQN3FR3IFT6L90958O9AMBASZ2CEJDJT8GV0XQ67ZYC7T6PJHYS7OSITUI1126TMFUW3ADSJZBKQKJQR5B2PGVABS2V62ZKZRQDC48YAV2HV7XOGJRQQAF736COH274QB9Z0Y6M9GCQHFP9PXWRNNMH' where id=50; -update noar ti set v0='37HT7BYR78EERPH9RVTTIOBKTLDDE9S7WVA8ZUA76MVVW2Q10E6AT0BNWCSDFB0B0HJ802F2LN6CGQJ0DU6DJ8G37WONMW0KHOFJQOVHT3YQN3FR3IFT6L90958O9AMBASZ2CEJDJT8GV0XQ67ZYC7T6PJHYS7OSITUI1126TMFUW3ADSJZBKQKJQR5B2PGVABS2V62ZKZRQDC48YAV2HV7XOGJRQQAF736COH274QB9Z0Y6M9GCQHFP9PXWRNNMH' where id=50; -update noar tt set v1='M2UYZV7J77TIQRXJXXOIV7AHONHGSGR85FSDETGPJAGIN4WP7WA4INPXCC1UKW38MYWIMPZOQVM7BQJXKVBOB9LRVL2FNAKP3U6SKTVQ4VAW2PNKRNBMJ9SXLJNBWBUJEUXFPL30SXBW2PVKII5AGTPT9MGL2NXMCGX23PRU5O0769FS4Z9AYQ9CCWKZ4FB3H265QPRGL2JZ6DG4U4WJUIA5TAJB439F2APCSHVGCUV0SPVUGUADCS33MIZTBHM3J' where id=50; -update noar ti set v1='M2UYZV7J77TIQRXJXXOIV7AHONHGSGR85FSDETGPJAGIN4WP7WA4INPXCC1UKW38MYWIMPZOQVM7BQJXKVBOB9LRVL2FNAKP3U6SKTVQ4VAW2PNKRNBMJ9SXLJNBWBUJEUXFPL30SXBW2PVKII5AGTPT9MGL2NXMCGX23PRU5O0769FS4Z9AYQ9CCWKZ4FB3H265QPRGL2JZ6DG4U4WJUIA5TAJB439F2APCSHVGCUV0SPVUGUADCS33MIZTBHM3J' where id=50; -update noar tt set v2='FP83NGEV9S1FG0GW9R022EWXKFSLJ5ERTIEK2KO05FGPNPUAVYGNKNNQLVPYXS2C988FHSVGJ3UGXJXTE1MAC8DZAAQ6XM71XR2HHFSYQ4DJ3EHWKSTRU72XGAU3A1Z95J1UL4CYFM0DKZDCYCKXOZETZX37EPCZ1JOTAMLFM0BUQC4BKNGUK5K82FKVXR7Z9RN8G1UQKF2A7MHV22PZXYERT0ICT3QD9C1JFN2XMROQPEAONYCABVRR8HNF6KHEN' where id=50; -update noar ti set v2='FP83NGEV9S1FG0GW9R022EWXKFSLJ5ERTIEK2KO05FGPNPUAVYGNKNNQLVPYXS2C988FHSVGJ3UGXJXTE1MAC8DZAAQ6XM71XR2HHFSYQ4DJ3EHWKSTRU72XGAU3A1Z95J1UL4CYFM0DKZDCYCKXOZETZX37EPCZ1JOTAMLFM0BUQC4BKNGUK5K82FKVXR7Z9RN8G1UQKF2A7MHV22PZXYERT0ICT3QD9C1JFN2XMROQPEAONYCABVRR8HNF6KHEN' where id=50; -update noar tt set v3='YEV58MS7K3YGU404NGCT58AWBHF392C5LBUJGHP9PZSB9IIQAFBH8S74TQ6HSMO4NZDULW4H5PKMZ2KUTESKFC93GRP1O83QSG85ILG4WPZNW778PTQD8GHO2ILAVQX1T72GXYXE46ELH5JOQOHB1IJMIXQ7SQMB38QR58PFFTGOT626JM1C4TWN5RROFMEPDENLHTD0PONBFP6PGQQCLWUNGW3KCHM9PBWC4QYSXOVWN8HCHIYWVT4S9MQZXZXTM' where id=50; -update noar ti set v3='YEV58MS7K3YGU404NGCT58AWBHF392C5LBUJGHP9PZSB9IIQAFBH8S74TQ6HSMO4NZDULW4H5PKMZ2KUTESKFC93GRP1O83QSG85ILG4WPZNW778PTQD8GHO2ILAVQX1T72GXYXE46ELH5JOQOHB1IJMIXQ7SQMB38QR58PFFTGOT626JM1C4TWN5RROFMEPDENLHTD0PONBFP6PGQQCLWUNGW3KCHM9PBWC4QYSXOVWN8HCHIYWVT4S9MQZXZXTM' where id=50; -update noar tt set v0='L02SLSQNFP6MNF48RGP7WVWH0TWBROBHU26EP167Q5BUMEZQHDDJZ0G5TVDM0QHA9ZV4Z0OB96NBPQOGL30EBXWX2Z30AF2F9W3JPQXLR9SAPB0YIHMPK9NPB1MGL9SQU1OPKRHFJU2GNBWVQQRG2IYPX18UITGOLZKZH5SHDBH3UTRZ54INUXBL9SK7KL83VSH0D6OSX6RHAJ9JZZJW9JJ3G5HUZE4TWNJS5NNLOQ2OTSOVO3QB015LLWAHKJ8T2' where id=51; -update noar ti set v0='L02SLSQNFP6MNF48RGP7WVWH0TWBROBHU26EP167Q5BUMEZQHDDJZ0G5TVDM0QHA9ZV4Z0OB96NBPQOGL30EBXWX2Z30AF2F9W3JPQXLR9SAPB0YIHMPK9NPB1MGL9SQU1OPKRHFJU2GNBWVQQRG2IYPX18UITGOLZKZH5SHDBH3UTRZ54INUXBL9SK7KL83VSH0D6OSX6RHAJ9JZZJW9JJ3G5HUZE4TWNJS5NNLOQ2OTSOVO3QB015LLWAHKJ8T2' where id=51; -update noar tt set v1='TXPG9ZZWW0R5EWHR1AWDMBAYHOF2JEYO1Z28SQ21V1ECQFW9L20ITYB0BOPWA6T9XEY56FTQWBPCZZDQMZ3XOCRWH6H0C7Z4L879UA8B1KLQK0JOMLK0V67HO1D181Q1CAAPEXNQ0ZA9IZXX8XBASO844UN3RGXCTA1YU53AE6T37TQ383UZPWTGBAZ8GHZ5MZWJHQ4I5GR1DLPDHW8XC6OA04R6BTBIEHLSYXYZX1X7QNI1R66QAW85FZWP4SYSX' where id=51; -update noar ti set v1='TXPG9ZZWW0R5EWHR1AWDMBAYHOF2JEYO1Z28SQ21V1ECQFW9L20ITYB0BOPWA6T9XEY56FTQWBPCZZDQMZ3XOCRWH6H0C7Z4L879UA8B1KLQK0JOMLK0V67HO1D181Q1CAAPEXNQ0ZA9IZXX8XBASO844UN3RGXCTA1YU53AE6T37TQ383UZPWTGBAZ8GHZ5MZWJHQ4I5GR1DLPDHW8XC6OA04R6BTBIEHLSYXYZX1X7QNI1R66QAW85FZWP4SYSX' where id=51; -update noar tt set v2='90I06DOQD2WMCSHO3DMYUX0JX8E13HRTF4G00Z6P2J33BLLUB4105474BIDK426DO8NLVS8V17G7V9RX9AH292GF4BUZNEECW6Z496HWG5U7LXEFEW42WA3QV5CKSQNVIOFYZVZUD1MRU82J5WPNLUFIBAW4C2APG5LR3SR0WKN6RWS83YM23FXNWPBUB6OU49EKP9M5B64NI8QABYG1D8V4CROHCQRZMXF5BT23YLS5RGVWCNOHZ3Q4VNGGMKJQR' where id=51; -update noar ti set v2='90I06DOQD2WMCSHO3DMYUX0JX8E13HRTF4G00Z6P2J33BLLUB4105474BIDK426DO8NLVS8V17G7V9RX9AH292GF4BUZNEECW6Z496HWG5U7LXEFEW42WA3QV5CKSQNVIOFYZVZUD1MRU82J5WPNLUFIBAW4C2APG5LR3SR0WKN6RWS83YM23FXNWPBUB6OU49EKP9M5B64NI8QABYG1D8V4CROHCQRZMXF5BT23YLS5RGVWCNOHZ3Q4VNGGMKJQR' where id=51; -update noar tt set v3='XSVOFDOIVFWQXX8CTHTBUFDSPDAGU8OMD18HUFYEY4TFA04CSAMLQZGHSO29VDQPQTKTP1JQGGHWJJNH1K30633EZP20DDPXD7B6SLPNACGV1U6CVRZX76FA6OVWLP1ZQ0UNG34NHL7X8L8IPK03YT9TN24K0C5F5XWY9LIJPOD70G4XJBXZBZLWDCHC15BY6VG4O7H1WCH90F06YHJ1KXDQW7S52BBETH613H6RLU5MPVT2VAVJYWMRE7F9G6F3E' where id=51; -update noar ti set v3='XSVOFDOIVFWQXX8CTHTBUFDSPDAGU8OMD18HUFYEY4TFA04CSAMLQZGHSO29VDQPQTKTP1JQGGHWJJNH1K30633EZP20DDPXD7B6SLPNACGV1U6CVRZX76FA6OVWLP1ZQ0UNG34NHL7X8L8IPK03YT9TN24K0C5F5XWY9LIJPOD70G4XJBXZBZLWDCHC15BY6VG4O7H1WCH90F06YHJ1KXDQW7S52BBETH613H6RLU5MPVT2VAVJYWMRE7F9G6F3E' where id=51; -update noar tt set v0='L0ZPPT7SS7BAVC7TR9C68FWR0WAA78EN1SX4R31ZI74CRBA4L35LEZZEJVDIZ0SJZBIRDBF2RA1RE2U5A5O1UCP9L7EBL8W7A3ZQ4ES2XZ83ZQW16YQUA1UDOFB3ZUHLEJVAOR54S3QBZQANO20I9KJCXJAS5YT82MTXN1CIGWH2JVIYHOB5V0BEB5MLQ0HHG6IXEI5GONM6YZA01QHJR8MLEPRVNM8DBUYVQ473KB54GF5LO35OG0UTT4Y05DLNL' where id=52; -update noar ti set v0='L0ZPPT7SS7BAVC7TR9C68FWR0WAA78EN1SX4R31ZI74CRBA4L35LEZZEJVDIZ0SJZBIRDBF2RA1RE2U5A5O1UCP9L7EBL8W7A3ZQ4ES2XZ83ZQW16YQUA1UDOFB3ZUHLEJVAOR54S3QBZQANO20I9KJCXJAS5YT82MTXN1CIGWH2JVIYHOB5V0BEB5MLQ0HHG6IXEI5GONM6YZA01QHJR8MLEPRVNM8DBUYVQ473KB54GF5LO35OG0UTT4Y05DLNL' where id=52; -update noar tt set v1='PWI8CZ9UWFWBDES4AVY04QUTPTF2QC3KERXSNWUJS1U636EP6KEEOTXSDLW4QVF7Z662Z3V7XRTJEA4PMQ1NAH8H3OLEUVQ7IAKMJD87286B2LVQQ63TD6YVG2H1XFY5TPLEVBUJYGK7IL7JI140LJ3Z110LQ1YZPIH0NC63DM1ZIJI9FY43P9NXYF75XJHPVQMPWTD1AVRAB8O8SRZ9KICCNQ7X03LVYWOV7D4VKB1ISDAXFLOVCSR4P875AQAWJ' where id=52; -update noar ti set v1='PWI8CZ9UWFWBDES4AVY04QUTPTF2QC3KERXSNWUJS1U636EP6KEEOTXSDLW4QVF7Z662Z3V7XRTJEA4PMQ1NAH8H3OLEUVQ7IAKMJD87286B2LVQQ63TD6YVG2H1XFY5TPLEVBUJYGK7IL7JI140LJ3Z110LQ1YZPIH0NC63DM1ZIJI9FY43P9NXYF75XJHPVQMPWTD1AVRAB8O8SRZ9KICCNQ7X03LVYWOV7D4VKB1ISDAXFLOVCSR4P875AQAWJ' where id=52; -update noar tt set v2='CI0801VOLLZWCYYZVBL3M0PDXTMXOOHTRZWFNF7XSIZRL6E8U22KU09WH08Q9FBEJG9M9QY9NA89G3LBB8JAOUPO1LI1ZX49BMV6P7YQHDBL8G9ABZISV2BTA0G7HOOT6UKIM67JOFLVDQ137JM5OUPQLLSPX1Z4SWV2OD3L6LAPTWFF7QY9YTPVWRWDEBRWC2GZ5V52J3JUAWGF1DG93ODJE09FMZ8YEZ7U13HNUA60SX1BTD1SJS094E07FPX33' where id=52; -update noar ti set v2='CI0801VOLLZWCYYZVBL3M0PDXTMXOOHTRZWFNF7XSIZRL6E8U22KU09WH08Q9FBEJG9M9QY9NA89G3LBB8JAOUPO1LI1ZX49BMV6P7YQHDBL8G9ABZISV2BTA0G7HOOT6UKIM67JOFLVDQ137JM5OUPQLLSPX1Z4SWV2OD3L6LAPTWFF7QY9YTPVWRWDEBRWC2GZ5V52J3JUAWGF1DG93ODJE09FMZ8YEZ7U13HNUA60SX1BTD1SJS094E07FPX33' where id=52; -update noar tt set v3='CAS3QUFXWJLZ11XBP5SBRBWCHRB4YTFVDK8CRBS4NX9P0UHDRVR9BWF8GC0FVTZO3N4QYJE85DTSZ2Q9RTMR2Z32EFMEC9IA9CGP1LO27L110BMCPVH0I4E96Y8K7Y41A2L8XSYQVQ3CTMDS99M9WOAGIH5Q9KJOX3J2MMBQSR4MJA7V3DFZ0ZNM2QW9ACEN14MBY2KIFTQJVN1A6W0YSE6V014MDIPRRYAHTRGL5431V84L1GRCS1LIKJ4SIOGWX' where id=52; -update noar ti set v3='CAS3QUFXWJLZ11XBP5SBRBWCHRB4YTFVDK8CRBS4NX9P0UHDRVR9BWF8GC0FVTZO3N4QYJE85DTSZ2Q9RTMR2Z32EFMEC9IA9CGP1LO27L110BMCPVH0I4E96Y8K7Y41A2L8XSYQVQ3CTMDS99M9WOAGIH5Q9KJOX3J2MMBQSR4MJA7V3DFZ0ZNM2QW9ACEN14MBY2KIFTQJVN1A6W0YSE6V014MDIPRRYAHTRGL5431V84L1GRCS1LIKJ4SIOGWX' where id=52; -update noar tt set v0='F9Y7SXJEGYF82G7OCV8JBC0XC895SAD409K42N9FPADHWKIEYT7WH0IZQ1SYEXBD22XV4FTGBTUO9JTI9KCTSX5W0F0AN3Z1I89NHWIYNQTCZ9QLO6BLART4L3HLEYR7PPHX0651ABD7UZL587JFGND5AJHJZJMBR8INF5UUDR86PZIOZQCNIIELH9D59C9BYKUT1IVOWWLCRRMXA9ZKIQNDBMIQ2V7OXU8A5MMSB4NFQVP1SLEZTCWWA018RSGQX' where id=53; -update noar ti set v0='F9Y7SXJEGYF82G7OCV8JBC0XC895SAD409K42N9FPADHWKIEYT7WH0IZQ1SYEXBD22XV4FTGBTUO9JTI9KCTSX5W0F0AN3Z1I89NHWIYNQTCZ9QLO6BLART4L3HLEYR7PPHX0651ABD7UZL587JFGND5AJHJZJMBR8INF5UUDR86PZIOZQCNIIELH9D59C9BYKUT1IVOWWLCRRMXA9ZKIQNDBMIQ2V7OXU8A5MMSB4NFQVP1SLEZTCWWA018RSGQX' where id=53; -update noar tt set v1='MRBFQBTUE41O7ZNL2YQ81SOWIEF1V4Y8UNVZ3K8MWCNCRAYNTCMHFEG3KAP3I08FIN3TJPGJTW6BH8FH06Y97N9SWOQNE5BGKNLNVRRQPSW4VBPT7W1SGK5ZXXA1341JCE3QB83S8BOMCXZC5MU6V8XVXEO5NIK2CC4EU8VMPSDAHKNU22M8RXP4KU2MYXEENQWDXYBSF41EAW177715PGQ7GD0M2O2A21KXFMZ259FDPJFP0VXJOEYF79255ZCQ4' where id=53; -update noar ti set v1='MRBFQBTUE41O7ZNL2YQ81SOWIEF1V4Y8UNVZ3K8MWCNCRAYNTCMHFEG3KAP3I08FIN3TJPGJTW6BH8FH06Y97N9SWOQNE5BGKNLNVRRQPSW4VBPT7W1SGK5ZXXA1341JCE3QB83S8BOMCXZC5MU6V8XVXEO5NIK2CC4EU8VMPSDAHKNU22M8RXP4KU2MYXEENQWDXYBSF41EAW177715PGQ7GD0M2O2A21KXFMZ259FDPJFP0VXJOEYF79255ZCQ4' where id=53; -update noar tt set v2='YFRBEYDP8189782U16KDH6YKK1PFYYLSPF6ZZBJR4YZ6HY9U1NJWPBUQNKZM95U21272FISYKZW9S4NZQEBIDFKN2IO58LPMTT2M8E6TMQDEVQQQ2CY19IM8MHN1FY04947C9KTQJS6WY20O0K1WKJCLOQWPNPB64FPIACPEC00RVJSSSS7B7QFFWXE2U2NBR6O9EOBTUFG72ZJWNE9OW6C5CCJ9J1PNKBHXZ8W2GRPPML059CJ65FJTQP0TA6JXT' where id=53; -update noar ti set v2='YFRBEYDP8189782U16KDH6YKK1PFYYLSPF6ZZBJR4YZ6HY9U1NJWPBUQNKZM95U21272FISYKZW9S4NZQEBIDFKN2IO58LPMTT2M8E6TMQDEVQQQ2CY19IM8MHN1FY04947C9KTQJS6WY20O0K1WKJCLOQWPNPB64FPIACPEC00RVJSSSS7B7QFFWXE2U2NBR6O9EOBTUFG72ZJWNE9OW6C5CCJ9J1PNKBHXZ8W2GRPPML059CJ65FJTQP0TA6JXT' where id=53; -update noar tt set v3='LVM1V0I9MZ3SOPEVCLGTBIIACYI2SUING6FEEFWK5WR0T6WHQAB8RD0M2ILS5S1GYV34Z03JEK1Z4BTQUM62CYQTMHJUYU4H1YHQPEERDXYTENM3BGALT5FIFPYP7X0JL98OY9QVKF27BTAA8PWS8BW7BAL71UASZLDQMF8U01S5EBUM0DIC5NAI5F19OTDEKKI7KBHMV51317E4LMHEGGAM22X04PHJLL8NN6PX9UYHS6B8687FEVY6MIC7YBJXZ' where id=53; -update noar ti set v3='LVM1V0I9MZ3SOPEVCLGTBIIACYI2SUING6FEEFWK5WR0T6WHQAB8RD0M2ILS5S1GYV34Z03JEK1Z4BTQUM62CYQTMHJUYU4H1YHQPEERDXYTENM3BGALT5FIFPYP7X0JL98OY9QVKF27BTAA8PWS8BW7BAL71UASZLDQMF8U01S5EBUM0DIC5NAI5F19OTDEKKI7KBHMV51317E4LMHEGGAM22X04PHJLL8NN6PX9UYHS6B8687FEVY6MIC7YBJXZ' where id=53; -update noar tt set v0='ADFWI0G6MCB2ET4MQVWSOGJWVZ0RUNCG0SMSC2U35CLW3DWP8K6W3ZKM6N1TCPY4U82GOI7LZFTWTG4E087X4VPKE0L3HPNBMTGAKYMVZZ03TIB2GM07C4JFOTT05TOCV7RV25KT45TM30CEK86YW904O6J2O5DOFEYK5U3CEUB319TWTF3JJ4PPSWOQVHFOTPI0HT5BYI6AX3FUUAN4LPV8I9NJ5VLYCJZC3OH81MS98UGR5GHBHLDA8W28N97M5' where id=54; -update noar ti set v0='ADFWI0G6MCB2ET4MQVWSOGJWVZ0RUNCG0SMSC2U35CLW3DWP8K6W3ZKM6N1TCPY4U82GOI7LZFTWTG4E087X4VPKE0L3HPNBMTGAKYMVZZ03TIB2GM07C4JFOTT05TOCV7RV25KT45TM30CEK86YW904O6J2O5DOFEYK5U3CEUB319TWTF3JJ4PPSWOQVHFOTPI0HT5BYI6AX3FUUAN4LPV8I9NJ5VLYCJZC3OH81MS98UGR5GHBHLDA8W28N97M5' where id=54; -update noar tt set v1='0SVFOEMGZ3H24E1ATRK5UFXXZ7N9TVDSA59V4OCY2EWR5PL5L6QQLPMZNW5GDK3L7CEK4AJ05G4NCVBKMR4AFDAFYVOX96X6ZMFTXIDQ1M3XER1W8FHVW69A5B604KGHNBSPS03NSY4E54PAYFD8Y4284H2VN2CD7XE35MIQTOZDOK77PP8IFRT45PN8JX9OIJSNGI2XKJW5X96GN1XUUPO4B0NPQX6VT3QZC7I6A2TXJ4VMT8DW00P9EQM9BGMQM' where id=54; -update noar ti set v1='0SVFOEMGZ3H24E1ATRK5UFXXZ7N9TVDSA59V4OCY2EWR5PL5L6QQLPMZNW5GDK3L7CEK4AJ05G4NCVBKMR4AFDAFYVOX96X6ZMFTXIDQ1M3XER1W8FHVW69A5B604KGHNBSPS03NSY4E54PAYFD8Y4284H2VN2CD7XE35MIQTOZDOK77PP8IFRT45PN8JX9OIJSNGI2XKJW5X96GN1XUUPO4B0NPQX6VT3QZC7I6A2TXJ4VMT8DW00P9EQM9BGMQM' where id=54; -update noar tt set v2='KU18A9HPHCO93FHXGDH4MMSSX2U9MASPMNU6XSGK5FT2KEAIFSEM0CA4M3VO9OPIVG29S5Y4K40G53SOTEZ2R521PEWY6L185E5M1456W8EAVCIWXZU5WCPB31094WT5IVU7TNPZ8FIKNH5ALMWSE5AK0UZ5NRFF80GSRYKPYZTECQYC7NXS6PLESLBES36K2T6HT2RDUMWWPR2KQMAPNPYNIK1HFXCU3AMYKAI97D74O55E5OGHNWNLXOXGURD3B' where id=54; -update noar ti set v2='KU18A9HPHCO93FHXGDH4MMSSX2U9MASPMNU6XSGK5FT2KEAIFSEM0CA4M3VO9OPIVG29S5Y4K40G53SOTEZ2R521PEWY6L185E5M1456W8EAVCIWXZU5WCPB31094WT5IVU7TNPZ8FIKNH5ALMWSE5AK0UZ5NRFF80GSRYKPYZTECQYC7NXS6PLESLBES36K2T6HT2RDUMWWPR2KQMAPNPYNIK1HFXCU3AMYKAI97D74O55E5OGHNWNLXOXGURD3B' where id=54; -update noar tt set v3='PCQKPKVK305WUYEQ6YG3BVVQPEE58UD3ST6IV3406AS8EWQX064ZB1724J4M4EA4I9BF6L9KZB774JLF8SUPP49DQL641SNIR01T2SDT9VE84UNTJBPWDMECC4A3V0M5NLDL08ZYXLYJ0H4QVPXVUHXB5IWSVI06ZXGYM18THWEXGURXRCP5YBGJB0CFRQ43IVWT8O2NOWZ2T3XLUZEP5N5S2YOK08686MM08DQULZZCJ8DMCTQK7Z6LQA7J0ZGNS' where id=54; -update noar ti set v3='PCQKPKVK305WUYEQ6YG3BVVQPEE58UD3ST6IV3406AS8EWQX064ZB1724J4M4EA4I9BF6L9KZB774JLF8SUPP49DQL641SNIR01T2SDT9VE84UNTJBPWDMECC4A3V0M5NLDL08ZYXLYJ0H4QVPXVUHXB5IWSVI06ZXGYM18THWEXGURXRCP5YBGJB0CFRQ43IVWT8O2NOWZ2T3XLUZEP5N5S2YOK08686MM08DQULZZCJ8DMCTQK7Z6LQA7J0ZGNS' where id=54; -update noar tt set v0='196RZHXSWGM81DT1VMWLAC2Y17JN2SP7FL9RRY3RDVXAEZYR5L61IGN2I2WXLBDXC6Z8DOU2OV8USNYWUPJA7JMLSNN3AG4DUM0A7XD8X9OPRAQDFKWJ6JNRQ8X2O9ERIR6A8VPUHEMTK6Q2J03DIZ7LYQ0XBIMMJ1JI65R3DW677LWG4Y560KMTQEQFHL7ROUASJ4UQWPNF6MDJG2W26KQOOCERQHA9JMWMGDLET359PK0Y4C1EPSES4PPPZL8YO' where id=55; -update noar ti set v0='196RZHXSWGM81DT1VMWLAC2Y17JN2SP7FL9RRY3RDVXAEZYR5L61IGN2I2WXLBDXC6Z8DOU2OV8USNYWUPJA7JMLSNN3AG4DUM0A7XD8X9OPRAQDFKWJ6JNRQ8X2O9ERIR6A8VPUHEMTK6Q2J03DIZ7LYQ0XBIMMJ1JI65R3DW677LWG4Y560KMTQEQFHL7ROUASJ4UQWPNF6MDJG2W26KQOOCERQHA9JMWMGDLET359PK0Y4C1EPSES4PPPZL8YO' where id=55; -update noar tt set v1='F8GQ95HDP1DFXK5LHOAHGHVDVSBQI977RAZGXJVU6THHC0TWY7IM33BDT7M213XPCSO9D1XBBZWRX330Z2S2FOQY3XG190Q0H53ZG0XZCTIBM1L3T2NG0X8XBU018QFVL2BBSJMKIIVFJVPT5U01VN196NUZJ1OOEWC0BTK48UG4Y4J6BOG1TF4LFHFTX62ABBGSF0UP0OWTSG0GOBIUQYRSF04AJYHT9O78M11YEFZUQGJKB2SW26WSLLB8VPYS8' where id=55; -update noar ti set v1='F8GQ95HDP1DFXK5LHOAHGHVDVSBQI977RAZGXJVU6THHC0TWY7IM33BDT7M213XPCSO9D1XBBZWRX330Z2S2FOQY3XG190Q0H53ZG0XZCTIBM1L3T2NG0X8XBU018QFVL2BBSJMKIIVFJVPT5U01VN196NUZJ1OOEWC0BTK48UG4Y4J6BOG1TF4LFHFTX62ABBGSF0UP0OWTSG0GOBIUQYRSF04AJYHT9O78M11YEFZUQGJKB2SW26WSLLB8VPYS8' where id=55; -update noar tt set v2='K1I0Z2B7ZN3QBN086EHRGA27VHY9RO2YB2H681THW0HPUB497APGDOZOKMYHVDQBELBRB1JA75WE4402XI00J21TC82YF1W9KSXSYR9ESND2YSC1R1DP3ZRRNVV1RACHXA6470W0BFH65EJMWRUYK6IIKJZAZPLRH5FBYU31OBSJE9UBAU2M26IZXKVI0CKWQVUHJ3HX3C2X0DFYDQLPY9KPFRBPOO05XJYLXB7O3WWFOX7XBIPV1P2TRJC46LVVG' where id=55; -update noar ti set v2='K1I0Z2B7ZN3QBN086EHRGA27VHY9RO2YB2H681THW0HPUB497APGDOZOKMYHVDQBELBRB1JA75WE4402XI00J21TC82YF1W9KSXSYR9ESND2YSC1R1DP3ZRRNVV1RACHXA6470W0BFH65EJMWRUYK6IIKJZAZPLRH5FBYU31OBSJE9UBAU2M26IZXKVI0CKWQVUHJ3HX3C2X0DFYDQLPY9KPFRBPOO05XJYLXB7O3WWFOX7XBIPV1P2TRJC46LVVG' where id=55; -update noar tt set v3='F9TSKR4WWEF9ZUV53CTC9GHA1TGHF4885ZJYEMBDXG0NO1NBCJFLCXMFAC7QJEW0QA2V9R4QEH1SS5UD5IBU84LYZ13XL3NV6Q1V2PU6HAOTTSKYT4YHA2862JXZ5CED5SIJK8ZJ877XIR9F47BMGE2Y40J2H43N61GO0SKJ6CGO4HVYH586BR4FIAWLU6TFG2B5ZL71IMG2GIA0P45NKQ2S8KWHAWCEI5ET8UJC0AP4FB8OHGANZTDHFHY41JV22' where id=55; -update noar ti set v3='F9TSKR4WWEF9ZUV53CTC9GHA1TGHF4885ZJYEMBDXG0NO1NBCJFLCXMFAC7QJEW0QA2V9R4QEH1SS5UD5IBU84LYZ13XL3NV6Q1V2PU6HAOTTSKYT4YHA2862JXZ5CED5SIJK8ZJ877XIR9F47BMGE2Y40J2H43N61GO0SKJ6CGO4HVYH586BR4FIAWLU6TFG2B5ZL71IMG2GIA0P45NKQ2S8KWHAWCEI5ET8UJC0AP4FB8OHGANZTDHFHY41JV22' where id=55; -update noar tt set v0='8FC304K4BSVBUGNNNPNYXYDNC0EB0KSATJKOFEALXTTOB9BDWIC2D7ODG2JO8KCJXDNISTFHLHMTYB5PBMLSY7HI7EGWXBPZEWKJQH3RLB7F44P2UQKCMVA99VA1Z46DZR94Q79CY46D6WD84AYNTURPAS8KMKI8MN555QFOXKF9BLK019CL56EJ70KCIP3930YNQ0PJJDSDIANA7JA428DAHL738D5NJOBAX8T7ONZ5H6NP74LHEF9Y183PRCJLY' where id=56; -update noar ti set v0='8FC304K4BSVBUGNNNPNYXYDNC0EB0KSATJKOFEALXTTOB9BDWIC2D7ODG2JO8KCJXDNISTFHLHMTYB5PBMLSY7HI7EGWXBPZEWKJQH3RLB7F44P2UQKCMVA99VA1Z46DZR94Q79CY46D6WD84AYNTURPAS8KMKI8MN555QFOXKF9BLK019CL56EJ70KCIP3930YNQ0PJJDSDIANA7JA428DAHL738D5NJOBAX8T7ONZ5H6NP74LHEF9Y183PRCJLY' where id=56; -update noar tt set v1='D558J5CLD9TOLNJH29UJSVHLLRDNJ8M3QCW3030TPAX9UNAFGXUUJ8X63JRUOIRQNO83XOOMXC15HF02SOGV0G79V0A0408E7BD7YM2UWL8PYDQKQZQPP12YMJ85Q7N4WUO0Z7JBV402Q0VZ3RZG1EHEHSES8UOG36I0Y7NPUJC85QQEWVJ4P5ZHLFO1EGR5Y2W3V7AHEY9IJFHS2ZV4VIHRP0TAC78FYBTR79QNV0GBFTUBV3W878PMDSM7USWRS' where id=56; -update noar ti set v1='D558J5CLD9TOLNJH29UJSVHLLRDNJ8M3QCW3030TPAX9UNAFGXUUJ8X63JRUOIRQNO83XOOMXC15HF02SOGV0G79V0A0408E7BD7YM2UWL8PYDQKQZQPP12YMJ85Q7N4WUO0Z7JBV402Q0VZ3RZG1EHEHSES8UOG36I0Y7NPUJC85QQEWVJ4P5ZHLFO1EGR5Y2W3V7AHEY9IJFHS2ZV4VIHRP0TAC78FYBTR79QNV0GBFTUBV3W878PMDSM7USWRS' where id=56; -update noar tt set v2='0Z1YYXWV5WQKMUBUUZ0Q9GRJEDB4OM2MUMSA9WR2EFF6F7ZSVPREZ4MMV0GXRORDA0JAO7KGZZ9MTI4T2VFBZSGPAGLUFY7YJB6XT1P9M91Z5LL0EMFCW2KLWWZ6P65VZQ2KFOI77VQBH02GPKB1FY9RX44DPIG8F8DBIIDZM7O0NW5U1YNQBNQU3OD4XR8FHC2GNJ5WK6075COH3EKP6HE5DNUL6OTQ8LLFNTLY6X87JTQL5OWC026F98N5D3AS6' where id=56; -update noar ti set v2='0Z1YYXWV5WQKMUBUUZ0Q9GRJEDB4OM2MUMSA9WR2EFF6F7ZSVPREZ4MMV0GXRORDA0JAO7KGZZ9MTI4T2VFBZSGPAGLUFY7YJB6XT1P9M91Z5LL0EMFCW2KLWWZ6P65VZQ2KFOI77VQBH02GPKB1FY9RX44DPIG8F8DBIIDZM7O0NW5U1YNQBNQU3OD4XR8FHC2GNJ5WK6075COH3EKP6HE5DNUL6OTQ8LLFNTLY6X87JTQL5OWC026F98N5D3AS6' where id=56; -update noar tt set v3='0O9I6F4LTHAFNYSW1LVG2L95O4GM0BKQV84Q96YBQ1LSC6Q1NDDVL0VG8DRI7T28CHR6K1JBG3VDA347LOPCB6VYIAFE4A9LKOB1H5JDVG6HNFE6IFGRIFJJCIEOGNGZJYAEA5O2J3H4G0URYLCNASZ6FGCNA6KYNCKCIUOWV9P9UW2ALVKC2PF1KH4MBWFDEW0DH07A1UNLUDHEFIKCCLH9ZQ51DTXVDYFVH6ICFT2YW77FZQN1YWMNK7LRPSHA1' where id=56; -update noar ti set v3='0O9I6F4LTHAFNYSW1LVG2L95O4GM0BKQV84Q96YBQ1LSC6Q1NDDVL0VG8DRI7T28CHR6K1JBG3VDA347LOPCB6VYIAFE4A9LKOB1H5JDVG6HNFE6IFGRIFJJCIEOGNGZJYAEA5O2J3H4G0URYLCNASZ6FGCNA6KYNCKCIUOWV9P9UW2ALVKC2PF1KH4MBWFDEW0DH07A1UNLUDHEFIKCCLH9ZQ51DTXVDYFVH6ICFT2YW77FZQN1YWMNK7LRPSHA1' where id=56; -update noar tt set v0='AGYV8UPPSEGYRUQDKCAB5G55LMFLXI44EMJGQMROZP03F07M2WQK1M4ZY92BRXZEIASUT1D8ON19D6L7C48CIKAUMLL73ZB01CGIHTKXCGCGPE1DLCDUMYYU0Q2JIS5AJJKHWL2NNVQONE2P5OR28FSKYUF3DWXRSY4OSDKRAM1KDR95PETVNOPSZYN0MUC3O8IJELHASQDHQEC7GQRSC7BAXPXZMSIIMUOXKK58R6TG360XEYC3F4Z39OHMIUKJ7' where id=57; -update noar ti set v0='AGYV8UPPSEGYRUQDKCAB5G55LMFLXI44EMJGQMROZP03F07M2WQK1M4ZY92BRXZEIASUT1D8ON19D6L7C48CIKAUMLL73ZB01CGIHTKXCGCGPE1DLCDUMYYU0Q2JIS5AJJKHWL2NNVQONE2P5OR28FSKYUF3DWXRSY4OSDKRAM1KDR95PETVNOPSZYN0MUC3O8IJELHASQDHQEC7GQRSC7BAXPXZMSIIMUOXKK58R6TG360XEYC3F4Z39OHMIUKJ7' where id=57; -update noar tt set v1='KUNQBP46MWE0UJ57J9LHSMWOLWEJPXT0V9I1NZG68O7EBJYCACHSEOI0A3YNYK44AJN1LCW3L201123YJ9L36NSWFUYXV53K8136L8SUXCFYFW8A9WY7V3MG5ZEV8PR6HN426PWY3H9PO0VY368VBHRPYOE7EW7FFA6UNGZWAN9T8AD1AY2SYAWRNHZU11VLYLMPAGD6YH6BY9INGQLGLUMDUP9Q6SU6716IY8HTJXSA3BKG7OHJ7HXDNCAGULLU1' where id=57; -update noar ti set v1='KUNQBP46MWE0UJ57J9LHSMWOLWEJPXT0V9I1NZG68O7EBJYCACHSEOI0A3YNYK44AJN1LCW3L201123YJ9L36NSWFUYXV53K8136L8SUXCFYFW8A9WY7V3MG5ZEV8PR6HN426PWY3H9PO0VY368VBHRPYOE7EW7FFA6UNGZWAN9T8AD1AY2SYAWRNHZU11VLYLMPAGD6YH6BY9INGQLGLUMDUP9Q6SU6716IY8HTJXSA3BKG7OHJ7HXDNCAGULLU1' where id=57; -update noar tt set v2='CFXKAH3P31CZNHLUUQYVHJGFUW93VM345SRSZEE8HFI69G48G2CZ9SJG6SV993RZO7J9L933LS9454Z0SBBYTZSKTDQC5DELH5DGWE80TVJAW8Z5AOPM0AR9YAAPH8DDV5E87HW00NNO1QEQTEXZ22B3X2GOB9IF8K0J5VS9AAXEZ5V1O56D49PLY3XCWIPNMDIMJBZYCSE30WEX6SFB5OFNUNXV1Y5EO5Q9A71D41PC10CXF1MYNALONSCUJ233M' where id=57; -update noar ti set v2='CFXKAH3P31CZNHLUUQYVHJGFUW93VM345SRSZEE8HFI69G48G2CZ9SJG6SV993RZO7J9L933LS9454Z0SBBYTZSKTDQC5DELH5DGWE80TVJAW8Z5AOPM0AR9YAAPH8DDV5E87HW00NNO1QEQTEXZ22B3X2GOB9IF8K0J5VS9AAXEZ5V1O56D49PLY3XCWIPNMDIMJBZYCSE30WEX6SFB5OFNUNXV1Y5EO5Q9A71D41PC10CXF1MYNALONSCUJ233M' where id=57; -update noar tt set v3='CSY88EP4UG4BWCOC8BY9ILZZX9XZCSZJP7NZ77PHOMCASPTVL0UTDS525SGLO3PZW5RFTWJKGY8OWLLXI2BS6BE855X8BLZMUVMLV6FYLN9K0S8RRS6RBK42CK3JOKAIAJUYRPOYVZAB0D66ITXOV6K36UQOQ6ED8ONL6SNR1EK41426IC8D9UOWBESEHGJ83FGBRG31XEXH36UUIASEAQGXYS7SCF8PVVK7429VDGE1SYBJIGDQ8VUU7L5GY4GZ1' where id=57; -update noar ti set v3='CSY88EP4UG4BWCOC8BY9ILZZX9XZCSZJP7NZ77PHOMCASPTVL0UTDS525SGLO3PZW5RFTWJKGY8OWLLXI2BS6BE855X8BLZMUVMLV6FYLN9K0S8RRS6RBK42CK3JOKAIAJUYRPOYVZAB0D66ITXOV6K36UQOQ6ED8ONL6SNR1EK41426IC8D9UOWBESEHGJ83FGBRG31XEXH36UUIASEAQGXYS7SCF8PVVK7429VDGE1SYBJIGDQ8VUU7L5GY4GZ1' where id=57; -update noar tt set v0='AQIKFKXZ1VYWLL8ASN42UD0SHSK7CTXPR6Q7EGFVM1ARTZAN8MC5SEXSNDZ4NQL8LJUPR2CCSQBGIQTE7T7WLVEBEJAM0V6AAEWLI9GW57OF7QGSRDTT33UMV2O102JTBYNWHF4TSDWQMCS2EVR3AIBJBCBF71YB64FWWN8OR273I8PIXP2T1II2Y2SHX967RT6CP20POQQ2S44Y35AOH6BTCX1JLH86EUQ46GUZBJVCICO3PQ8UE150A5WAF7YQR' where id=58; -update noar ti set v0='AQIKFKXZ1VYWLL8ASN42UD0SHSK7CTXPR6Q7EGFVM1ARTZAN8MC5SEXSNDZ4NQL8LJUPR2CCSQBGIQTE7T7WLVEBEJAM0V6AAEWLI9GW57OF7QGSRDTT33UMV2O102JTBYNWHF4TSDWQMCS2EVR3AIBJBCBF71YB64FWWN8OR273I8PIXP2T1II2Y2SHX967RT6CP20POQQ2S44Y35AOH6BTCX1JLH86EUQ46GUZBJVCICO3PQ8UE150A5WAF7YQR' where id=58; -update noar tt set v1='3IJYIF852HE5W2MBBSH4H8APM3U2SR6J4O4HAB2DXHZSEF9E9I0SM8R1KLJYOU7HJVJN8WH090ZXQW8WRXI4JXBYRWWON0IADZ869P1CHJJI59ZL5JWCIWEUJUABKCY31IVWAL7IIB39M2E3NG63J2WQ44WSG2H26616P972UGUAV7Q84S0H5F0LG45AITQZQEHAAE4XXYADK0D3NDZQZRLXLQWAGW632LMX6V76MFPEFF4HBIQMF1A8R6P6H7D2I' where id=58; -update noar ti set v1='3IJYIF852HE5W2MBBSH4H8APM3U2SR6J4O4HAB2DXHZSEF9E9I0SM8R1KLJYOU7HJVJN8WH090ZXQW8WRXI4JXBYRWWON0IADZ869P1CHJJI59ZL5JWCIWEUJUABKCY31IVWAL7IIB39M2E3NG63J2WQ44WSG2H26616P972UGUAV7Q84S0H5F0LG45AITQZQEHAAE4XXYADK0D3NDZQZRLXLQWAGW632LMX6V76MFPEFF4HBIQMF1A8R6P6H7D2I' where id=58; -update noar tt set v2='JJIX2VVHNVNZYELVOSO886TWWQWTXYMNDBU913VNQ5338ZIPNSIGAJEKIDSACIDKZOQAUOLJRT1IZRVLKQYHGAYBZWEM8YH2T1UIBNZ4WNABYUE4DVU5XMSEQZ84P09RG6VWPHS7EJSJJ72U4ZVH236E8A0H8I6CFK9JT3ADKV7RKSDMSGE2D6PLGSB5585IM7IAHD60SXFTPK7626N5673ECXV6U7LUSGPQGRNBSQU0GPQ3YH5HFCHRW0XMUSHMQ' where id=58; -update noar ti set v2='JJIX2VVHNVNZYELVOSO886TWWQWTXYMNDBU913VNQ5338ZIPNSIGAJEKIDSACIDKZOQAUOLJRT1IZRVLKQYHGAYBZWEM8YH2T1UIBNZ4WNABYUE4DVU5XMSEQZ84P09RG6VWPHS7EJSJJ72U4ZVH236E8A0H8I6CFK9JT3ADKV7RKSDMSGE2D6PLGSB5585IM7IAHD60SXFTPK7626N5673ECXV6U7LUSGPQGRNBSQU0GPQ3YH5HFCHRW0XMUSHMQ' where id=58; -update noar tt set v3='KWR3OUUM72I0LMZK2AKTT7D814PGC0UVQEQV9V7TWYDPOX1MJNML7PBM1BRK6VOSH0WY3A5D5CFVF1JAPZT7OEANPWORJXCMS9SS5K0ZTUADNRB62TLXTZWM00FPQJG60PV7D905S22EZ48DW31Z6SF2H3LL91WOVIGOC9ARXY7E2YVWNFGQ24JMH4YNLVKIUYBHMOXMLFD00T6ALA8FTS9Z0T4PLBMQ45390X5N4PLV0M4XUU6Z4N10G92UB5OER' where id=58; -update noar ti set v3='KWR3OUUM72I0LMZK2AKTT7D814PGC0UVQEQV9V7TWYDPOX1MJNML7PBM1BRK6VOSH0WY3A5D5CFVF1JAPZT7OEANPWORJXCMS9SS5K0ZTUADNRB62TLXTZWM00FPQJG60PV7D905S22EZ48DW31Z6SF2H3LL91WOVIGOC9ARXY7E2YVWNFGQ24JMH4YNLVKIUYBHMOXMLFD00T6ALA8FTS9Z0T4PLBMQ45390X5N4PLV0M4XUU6Z4N10G92UB5OER' where id=58; -update noar tt set v0='CUVD9E35O4D9EGPG33EEQKUQIV9BCANRXED6GFNI2CQU4U2G19FOMP7W02JQ4RGM0CWWBLIDWVDG1F8EZDZYJVRR6NTNTF46DAHE5DULJQLU9QZCX6Z45SVNIUH8B6ZBY17OPC4DTNA1WDCABUDHSSTIKAXZVIIPRTC4YCNQ0FGBAL9HEYIWHKZLZHNJTJWDAWD5PGSL7S44QH2P2EK2KIV1W14SYGQYS8HKU9Y2CGA39DJRAPL5DTEO9M3LJCPKB' where id=59; -update noar ti set v0='CUVD9E35O4D9EGPG33EEQKUQIV9BCANRXED6GFNI2CQU4U2G19FOMP7W02JQ4RGM0CWWBLIDWVDG1F8EZDZYJVRR6NTNTF46DAHE5DULJQLU9QZCX6Z45SVNIUH8B6ZBY17OPC4DTNA1WDCABUDHSSTIKAXZVIIPRTC4YCNQ0FGBAL9HEYIWHKZLZHNJTJWDAWD5PGSL7S44QH2P2EK2KIV1W14SYGQYS8HKU9Y2CGA39DJRAPL5DTEO9M3LJCPKB' where id=59; -update noar tt set v1='V6TSWDUGK603NG3I4KR128P5SE1NONW8CT0DTOUB34Q24EMYUM4OK7FAJXRL5EGAT5HB2VQEMSZLFVBBUH5CUR0ACIUMAG93K9OXJ6LLC7RM3WU5TR9CJAWJSD4OOEIM1P4FYWP9NQXX7NZ76HDDYQA5XHWOKRNFUUYB4SGN69L0W88EC7PYW1ORBDDPCEV9Y7KPVQPHLBRP4TG1HONHE1ZURBU1OW7EDTMWN6PU9O226RDW9BMH0BMFZ7XYMUX87' where id=59; -update noar ti set v1='V6TSWDUGK603NG3I4KR128P5SE1NONW8CT0DTOUB34Q24EMYUM4OK7FAJXRL5EGAT5HB2VQEMSZLFVBBUH5CUR0ACIUMAG93K9OXJ6LLC7RM3WU5TR9CJAWJSD4OOEIM1P4FYWP9NQXX7NZ76HDDYQA5XHWOKRNFUUYB4SGN69L0W88EC7PYW1ORBDDPCEV9Y7KPVQPHLBRP4TG1HONHE1ZURBU1OW7EDTMWN6PU9O226RDW9BMH0BMFZ7XYMUX87' where id=59; -update noar tt set v2='4TURTU1T1JLUT90V8FUBNKKT08WILZNBYEF0GCW4VXER993RBH8MMWS5Y05M52LETQMXG0927UVJ89J4EZ6NR98XITSH2YF4T7UAUUW0I47I7I9Z8OOGZB8XADJBNHCN5MLPMHJPNU9U4ZIG8A540THY9T8UH7VL5EMX1FHDJW5FJM2TVBJG3JWLJS8QVMBTOTJHA2U85VB4U9Q992I4EUXVR3PD2RUKQ30X8QOMMSU7QS06LTR2SB4O1GZH8Q067' where id=59; -update noar ti set v2='4TURTU1T1JLUT90V8FUBNKKT08WILZNBYEF0GCW4VXER993RBH8MMWS5Y05M52LETQMXG0927UVJ89J4EZ6NR98XITSH2YF4T7UAUUW0I47I7I9Z8OOGZB8XADJBNHCN5MLPMHJPNU9U4ZIG8A540THY9T8UH7VL5EMX1FHDJW5FJM2TVBJG3JWLJS8QVMBTOTJHA2U85VB4U9Q992I4EUXVR3PD2RUKQ30X8QOMMSU7QS06LTR2SB4O1GZH8Q067' where id=59; -update noar tt set v3='QQVLJE4MR0VANDS2IV2FVVHBAQ4G6P1MD221WG1YZRTL52EDE23S9HKZ9PY3OL6V62FXYY5SUNSUTW81ZCZG05QLHB68UOTIRVT2SHNVWCZCK702PM9NVAD8F7VEQ7HBSOIHZRE2ZCR2JGLQLCTOOC3T1R14P3TPF91BQWY2QHP01YGCKVRJFD1AY0741NFDXI40VKSHXXDPQ5JNQ4045LODL91ZD9B7OY1K48OFU3I9SVY3D2T1NK8O8KLFULHME' where id=59; -update noar ti set v3='QQVLJE4MR0VANDS2IV2FVVHBAQ4G6P1MD221WG1YZRTL52EDE23S9HKZ9PY3OL6V62FXYY5SUNSUTW81ZCZG05QLHB68UOTIRVT2SHNVWCZCK702PM9NVAD8F7VEQ7HBSOIHZRE2ZCR2JGLQLCTOOC3T1R14P3TPF91BQWY2QHP01YGCKVRJFD1AY0741NFDXI40VKSHXXDPQ5JNQ4045LODL91ZD9B7OY1K48OFU3I9SVY3D2T1NK8O8KLFULHME' where id=59; -update noar tt set v0='0A941Z4EG2IV9GWFF19FW7BXF5PWXFEBS5SJHDGKMFF5O9W74903TBQA4VZ4MJ8PJNZC77R7CZO4QZ3ZL0B9UE11L3QXCK04QTOUKHK7V9TO35REW2LVZPJ06OA5Q04M0G14G81M408HPWCA6LTID12VHE5PL2F2RFWZQVYQMUSLMJXK5IID1XNV683DE6PIE5VD68W5V7OLOLU92O2GAW2UZD1BVLAI0PVUXUC8MHZJU9BDWNC5HJRI6FO4SPNM9' where id=60; -update noar ti set v0='0A941Z4EG2IV9GWFF19FW7BXF5PWXFEBS5SJHDGKMFF5O9W74903TBQA4VZ4MJ8PJNZC77R7CZO4QZ3ZL0B9UE11L3QXCK04QTOUKHK7V9TO35REW2LVZPJ06OA5Q04M0G14G81M408HPWCA6LTID12VHE5PL2F2RFWZQVYQMUSLMJXK5IID1XNV683DE6PIE5VD68W5V7OLOLU92O2GAW2UZD1BVLAI0PVUXUC8MHZJU9BDWNC5HJRI6FO4SPNM9' where id=60; -update noar tt set v1='FWIEVICR740U0VRVWLEU8QSSB3I5T1OA3KAAO5XCZ1P7CMLWVWQRXPAZCO1YK31D3RDXXLCIX4LUBJJRN5X3HHJ071S6XKMNYZ1IXZGC93KZU4TWC6EQBIPEMOZG1TNV4NEJL6KXFNWCCELJ0NJIHVHHLAN17ENNHDJIQCUILPV9ZHU9WHUK2URZ6FXC6ZPZHZ3G8W8DEN3AGKMS59GE4RSLL6EGI61C5XU18TVPD1K6N5KQWHW96TBZNFG74UNPV' where id=60; -update noar ti set v1='FWIEVICR740U0VRVWLEU8QSSB3I5T1OA3KAAO5XCZ1P7CMLWVWQRXPAZCO1YK31D3RDXXLCIX4LUBJJRN5X3HHJ071S6XKMNYZ1IXZGC93KZU4TWC6EQBIPEMOZG1TNV4NEJL6KXFNWCCELJ0NJIHVHHLAN17ENNHDJIQCUILPV9ZHU9WHUK2URZ6FXC6ZPZHZ3G8W8DEN3AGKMS59GE4RSLL6EGI61C5XU18TVPD1K6N5KQWHW96TBZNFG74UNPV' where id=60; -update noar tt set v2='RF018ZFV31DFDMEOW8L97JX8FSEDLH60GNPY79IGHH5LKSRV5SV48US3ERB2GLX3HYKORWGLCP1WPEZID1M0K06AFSP3LCHQ1P3Q7A1AUY5UYSHPB89IAKD280RYDL0VGWMN0A40O9P50ZREO7P9G0FUOU3JBHDCOZSMZO29XG1RQ126M3N393A2PIUFRNTXI59LAZQ52BM2RW4T01974SZGJNANP17DAL82QBRGHL3V4MGE3OJBRZR25QOSAHX05' where id=60; -update noar ti set v2='RF018ZFV31DFDMEOW8L97JX8FSEDLH60GNPY79IGHH5LKSRV5SV48US3ERB2GLX3HYKORWGLCP1WPEZID1M0K06AFSP3LCHQ1P3Q7A1AUY5UYSHPB89IAKD280RYDL0VGWMN0A40O9P50ZREO7P9G0FUOU3JBHDCOZSMZO29XG1RQ126M3N393A2PIUFRNTXI59LAZQ52BM2RW4T01974SZGJNANP17DAL82QBRGHL3V4MGE3OJBRZR25QOSAHX05' where id=60; -update noar tt set v3='NBQY3B9ELPVPUDV83M7M7BCGPWAKYT6XGEZ0VQXOGTAJ5S30U86DOJ0WCEE8LK3OG634DUWPE6VHW2F0PX3V2P73NROV32PTU0XTKMNE7XDIPF1DR8WEJZ1OK3F1YLCPRRMQTFRCK3WWLI2U59W27PE5D8465BK25ENG75RPDPXU2RLAH4TN09NWBQY75F51RF38T7IQCP6LFOKRI8EBC4O2I88HK7RLHUJOF7H5YVFEA2QNG25AW5BXIU62EU8MW' where id=60; -update noar ti set v3='NBQY3B9ELPVPUDV83M7M7BCGPWAKYT6XGEZ0VQXOGTAJ5S30U86DOJ0WCEE8LK3OG634DUWPE6VHW2F0PX3V2P73NROV32PTU0XTKMNE7XDIPF1DR8WEJZ1OK3F1YLCPRRMQTFRCK3WWLI2U59W27PE5D8465BK25ENG75RPDPXU2RLAH4TN09NWBQY75F51RF38T7IQCP6LFOKRI8EBC4O2I88HK7RLHUJOF7H5YVFEA2QNG25AW5BXIU62EU8MW' where id=60; -update noar tt set v0='JRK0ZCGIIRW4ZBUGCEKZ79X4TISEQDRUKABZ52FVDYN7KZ5DZ6Q2LNSAJAJXJPH1GB2QEC9874EHMGIYIEOBGI2TI0I9EG83ZR76QAHH45E3R5UQNPIQ82AYGBYGZE6K53E0P37RVV8DYUXKTQRUTNETLR322OPN6BFD9XZJ1J04WMDTYG6V1CD8WKBRPH24UPME6I6P7V4Z7I1APJRWISAIA6RZ9DAHETDZ2TBSMAVQBIWOELQDKX2LJ6GKH6TDX' where id=61; -update noar ti set v0='JRK0ZCGIIRW4ZBUGCEKZ79X4TISEQDRUKABZ52FVDYN7KZ5DZ6Q2LNSAJAJXJPH1GB2QEC9874EHMGIYIEOBGI2TI0I9EG83ZR76QAHH45E3R5UQNPIQ82AYGBYGZE6K53E0P37RVV8DYUXKTQRUTNETLR322OPN6BFD9XZJ1J04WMDTYG6V1CD8WKBRPH24UPME6I6P7V4Z7I1APJRWISAIA6RZ9DAHETDZ2TBSMAVQBIWOELQDKX2LJ6GKH6TDX' where id=61; -update noar tt set v1='4BGKVM9119Z1D0OYE9EX855MEUSPQ802FXDBDBS9UHP2PMFHOTPRSA526G1Y9HIEDWMQGSF6L9QVZ1MC482BEGM4C82XJOZR6SSQIO0XA81NF4AQAFLBZAT4L310FJN23JYT0AMNDISSJD0B7HDN8J7WTBL4PB5CU03VG3U8CAKF07PP68NB7Q4KJ9DHE7TBSINOABRTGAVDQCO2248Q3NEP5W035D0K7JGEWFPZYNITX2C5E1YHZTLO5W3248XC2' where id=61; -update noar ti set v1='4BGKVM9119Z1D0OYE9EX855MEUSPQ802FXDBDBS9UHP2PMFHOTPRSA526G1Y9HIEDWMQGSF6L9QVZ1MC482BEGM4C82XJOZR6SSQIO0XA81NF4AQAFLBZAT4L310FJN23JYT0AMNDISSJD0B7HDN8J7WTBL4PB5CU03VG3U8CAKF07PP68NB7Q4KJ9DHE7TBSINOABRTGAVDQCO2248Q3NEP5W035D0K7JGEWFPZYNITX2C5E1YHZTLO5W3248XC2' where id=61; -update noar tt set v2='Y5W2HMA232FFNHFWW8OIO6VJBVWHHKJC4KJLPD5S9D5ZNR9E82PW4VNO0M64B0W5JSPJZB7QY0HK3XTHMHJBO7LN3R34QWJ4XHK0AC26NNWWU562MU0PBICIMR5L08SKWUH3PE93M15AO2CY5YVBXIOK719BPCQRBNBAAC6UDDELK3R8XEVURBO3U8LYYBTJCM6T2ZFFQYV0328QL5L2ECPCGSNLAGKGLHMXE7IEB9PVKPSDTLC31S441X3C0M857' where id=61; -update noar ti set v2='Y5W2HMA232FFNHFWW8OIO6VJBVWHHKJC4KJLPD5S9D5ZNR9E82PW4VNO0M64B0W5JSPJZB7QY0HK3XTHMHJBO7LN3R34QWJ4XHK0AC26NNWWU562MU0PBICIMR5L08SKWUH3PE93M15AO2CY5YVBXIOK719BPCQRBNBAAC6UDDELK3R8XEVURBO3U8LYYBTJCM6T2ZFFQYV0328QL5L2ECPCGSNLAGKGLHMXE7IEB9PVKPSDTLC31S441X3C0M857' where id=61; -update noar tt set v3='IFY4880GO7ICBN1AKFJ37R410OOD8R062DQIMJKG50FF8RGU5SWS3VWJ5VVLBWXBLQG0HG9HU3X7DOHARQ36S7GGTDOM6HK9JN8GEBD0TP7GYR2GQ7KRHGL8Z4881NV8C92BU4H14LUL5OPVZT5W0C1TAL2Q5MEWDL78VENONCEPD1GSQ40S1V68IDN5IGTLG5JPO62SE13O5JCUUBDDB1S06FIU15SJHAI50ILM6MJ7XIREBW47140EPFYJDJB25' where id=61; -update noar ti set v3='IFY4880GO7ICBN1AKFJ37R410OOD8R062DQIMJKG50FF8RGU5SWS3VWJ5VVLBWXBLQG0HG9HU3X7DOHARQ36S7GGTDOM6HK9JN8GEBD0TP7GYR2GQ7KRHGL8Z4881NV8C92BU4H14LUL5OPVZT5W0C1TAL2Q5MEWDL78VENONCEPD1GSQ40S1V68IDN5IGTLG5JPO62SE13O5JCUUBDDB1S06FIU15SJHAI50ILM6MJ7XIREBW47140EPFYJDJB25' where id=61; -update noar tt set v0='EQQ6RB6C2M7FIOYXCQ0I8VVDGITDTYE16AZDLCYIJ8VVK3EU0X3QKMQ0AZRYS1CQ5XHTEVMS6TIC0IL3GJD6JEHIMOEPTDYSQZ6CHMLXLN7JCRKRH1UVEORFJMWMVODXNPG07D7S6IS6ORCKO6LZRDV19NFUUDMJTTT18GFQ03A7WLBUOUGXQLCLZBNJBGA1D75VQEU48HCEG11NGW6JIQYITGH0OF79DTAML6APHN6M3SSEO7R5FJXFFDMPJ7JN5' where id=62; -update noar ti set v0='EQQ6RB6C2M7FIOYXCQ0I8VVDGITDTYE16AZDLCYIJ8VVK3EU0X3QKMQ0AZRYS1CQ5XHTEVMS6TIC0IL3GJD6JEHIMOEPTDYSQZ6CHMLXLN7JCRKRH1UVEORFJMWMVODXNPG07D7S6IS6ORCKO6LZRDV19NFUUDMJTTT18GFQ03A7WLBUOUGXQLCLZBNJBGA1D75VQEU48HCEG11NGW6JIQYITGH0OF79DTAML6APHN6M3SSEO7R5FJXFFDMPJ7JN5' where id=62; -update noar tt set v1='V6PRL6BXT1NRCGQL5R1FFC9IWQHWMQ6PCRNEQ2HXZG34ZTYCD7E5ARETURGYMYDXRVTTZ26CARBWAPWISIS643NNJJREN2AI9Z8OZY8BW6NXKZRO55GDKIAZWXKODV7BBWIE2I5KY8EA2JPXTHKC4IR1SYN5EAS2ZYG14NVFIT48RFPJAFGRCRAFAO7GIERNPPBW9F0EKW1YBMTEFDXBYM10YUFV4RJXB1ZP26HNA8MCFWHRYWY8K1C3L5U8Q9PQ8' where id=62; -update noar ti set v1='V6PRL6BXT1NRCGQL5R1FFC9IWQHWMQ6PCRNEQ2HXZG34ZTYCD7E5ARETURGYMYDXRVTTZ26CARBWAPWISIS643NNJJREN2AI9Z8OZY8BW6NXKZRO55GDKIAZWXKODV7BBWIE2I5KY8EA2JPXTHKC4IR1SYN5EAS2ZYG14NVFIT48RFPJAFGRCRAFAO7GIERNPPBW9F0EKW1YBMTEFDXBYM10YUFV4RJXB1ZP26HNA8MCFWHRYWY8K1C3L5U8Q9PQ8' where id=62; -update noar tt set v2='9YNM51YZSRIDLE1AQKO2NGB5E5CLMG5K1B7U8G1FRZLGQUR85JUZKDNHAL2XS7NZH7362L7BUDK6O693Y1CSQ88UWEEH5AJ50ZCV258LH6WC681J41KKR053K569BPUW6CM6DVIYP4KXY0B3HJKP8QEP4DUTX6M2LQP2LMKNVVI3SFOQ41KODDQE6IDRK468ZB2NFRSALT69395B40OJMK26IAK8VIU364RF05V16TH6ZN4MZ3ETYJNCIMQ3348MF' where id=62; -update noar ti set v2='9YNM51YZSRIDLE1AQKO2NGB5E5CLMG5K1B7U8G1FRZLGQUR85JUZKDNHAL2XS7NZH7362L7BUDK6O693Y1CSQ88UWEEH5AJ50ZCV258LH6WC681J41KKR053K569BPUW6CM6DVIYP4KXY0B3HJKP8QEP4DUTX6M2LQP2LMKNVVI3SFOQ41KODDQE6IDRK468ZB2NFRSALT69395B40OJMK26IAK8VIU364RF05V16TH6ZN4MZ3ETYJNCIMQ3348MF' where id=62; -update noar tt set v3='XQRQZJFSQLKXNJUNAAMNFQ3HBTQ5KP8SOXE4IEWAVNJRRCDDV4W16VPRX1JQLZRMNIWIPMA7LT8MTTJ7SM5JP51I8CJ5W2MXKQVZIF6HEM42W5O7OGK6QEU9A8G3FJYWPUT98QPTFQ8DILIBSBR45TGULXBRMTBFNHKL640X48X2D25U55EKEZ7GZDZSBZ8CUAP2CV67IP6LVXHJ694VDYZS1P5DS7Y6N6VR52YHPKQYGLOEJQI9ZYAX1ZRYXBN3P' where id=62; -update noar ti set v3='XQRQZJFSQLKXNJUNAAMNFQ3HBTQ5KP8SOXE4IEWAVNJRRCDDV4W16VPRX1JQLZRMNIWIPMA7LT8MTTJ7SM5JP51I8CJ5W2MXKQVZIF6HEM42W5O7OGK6QEU9A8G3FJYWPUT98QPTFQ8DILIBSBR45TGULXBRMTBFNHKL640X48X2D25U55EKEZ7GZDZSBZ8CUAP2CV67IP6LVXHJ694VDYZS1P5DS7Y6N6VR52YHPKQYGLOEJQI9ZYAX1ZRYXBN3P' where id=62; -update noar tt set v0='MLK5OMNX996177NKDXK50ITSDODH5R4D9MJ9YJ6FJA5PP9Q58N680T2YISVF0RHD4YMV5MCY3YJZZZ973D1QR25HWMXE1WJE4VV7GGJ9K1HFEOJ9XQ3GPNOTG6YIXJGVNX26UKZDQNAGYQX9N7MMOF9GIU3P213BVA45DXNGHE5W6FVVPAQO3FLCVHUJ583CGAHQKBSCJRB709OK8XJA9MGGGO4IR3YU7MT32JTXTKLK5EP6WVMUAZ69D2MFB8CJW' where id=63; -update noar ti set v0='MLK5OMNX996177NKDXK50ITSDODH5R4D9MJ9YJ6FJA5PP9Q58N680T2YISVF0RHD4YMV5MCY3YJZZZ973D1QR25HWMXE1WJE4VV7GGJ9K1HFEOJ9XQ3GPNOTG6YIXJGVNX26UKZDQNAGYQX9N7MMOF9GIU3P213BVA45DXNGHE5W6FVVPAQO3FLCVHUJ583CGAHQKBSCJRB709OK8XJA9MGGGO4IR3YU7MT32JTXTKLK5EP6WVMUAZ69D2MFB8CJW' where id=63; -update noar tt set v1='9OSWRG5UVOR5SRJEYJ0YERVUXWTKNH5A4M3UMJQ6UOQRQIB59YXK4LH9XMQCR5324NTLYH0YQSHJ8MOM89BSFFN1A4COO2P14AQ402TQ5GCCK4CGL14PU6JTMV3Y3D5BFZ4CGV04N2UWA8PN0QG576PK4BBIHTMRWSCEDD8GQHUB6UBWS2UOQQE8N1865PJMTGFFINPM6HDE1ATZBUA1LLE4LJJ190DEAV3LRBLB6HP481512FRGQOLL2XV9DW8KX' where id=63; -update noar ti set v1='9OSWRG5UVOR5SRJEYJ0YERVUXWTKNH5A4M3UMJQ6UOQRQIB59YXK4LH9XMQCR5324NTLYH0YQSHJ8MOM89BSFFN1A4COO2P14AQ402TQ5GCCK4CGL14PU6JTMV3Y3D5BFZ4CGV04N2UWA8PN0QG576PK4BBIHTMRWSCEDD8GQHUB6UBWS2UOQQE8N1865PJMTGFFINPM6HDE1ATZBUA1LLE4LJJ190DEAV3LRBLB6HP481512FRGQOLL2XV9DW8KX' where id=63; -update noar tt set v2='PHIWXGZOHQKX30KUJNFVHC37XSM5COMUZ9QKVK6PAI1OVM8B4TT7N6X7RTSVQVZVVAOLDEKC1OT59K6RPYTH36O0I6BUFQ4O9MVQF73K6CD2ZPDQIDCIEONELUHNTBMDI3MF6QLLOOTED00EWK2STVNJV2ADBFZNDOMQ1EGQZ6337J8AOUISNN9CM4SB24UZ00YS3G33OLNS8C5HK0XKTCDBXB1UVN70N2JB3IDAMBNIHYDPFDQHU3CVIHQ8DT9QG' where id=63; -update noar ti set v2='PHIWXGZOHQKX30KUJNFVHC37XSM5COMUZ9QKVK6PAI1OVM8B4TT7N6X7RTSVQVZVVAOLDEKC1OT59K6RPYTH36O0I6BUFQ4O9MVQF73K6CD2ZPDQIDCIEONELUHNTBMDI3MF6QLLOOTED00EWK2STVNJV2ADBFZNDOMQ1EGQZ6337J8AOUISNN9CM4SB24UZ00YS3G33OLNS8C5HK0XKTCDBXB1UVN70N2JB3IDAMBNIHYDPFDQHU3CVIHQ8DT9QG' where id=63; -update noar tt set v3='VQML9GORFV07CPK1BYL0NSI1QUU7T8N0W6K11SPUW0OQ105AQEA7IC0XOY9F8GFBCF1EYZW7IPO4V21E01HNDFQO8HRYILOV6RRCT1UDN0YQ1Z8F9JE2PUC1HL1YDXIQ5KZTIK1NJ8Z5G3KG1KLHFE3ODHNXH555DXPN7SW8N58KDZ0AB1VYATTOH5QGLCEQF03PTODZEXN21DPTO13HO84F5W6SRQCC33RRNCRWSYWHDOAVBARZYV2ZI8NC1PEL9' where id=63; -update noar ti set v3='VQML9GORFV07CPK1BYL0NSI1QUU7T8N0W6K11SPUW0OQ105AQEA7IC0XOY9F8GFBCF1EYZW7IPO4V21E01HNDFQO8HRYILOV6RRCT1UDN0YQ1Z8F9JE2PUC1HL1YDXIQ5KZTIK1NJ8Z5G3KG1KLHFE3ODHNXH555DXPN7SW8N58KDZ0AB1VYATTOH5QGLCEQF03PTODZEXN21DPTO13HO84F5W6SRQCC33RRNCRWSYWHDOAVBARZYV2ZI8NC1PEL9' where id=63; -update noar tt set v0='A6FOTIU48JWADRZ1YRIC9JV4RLBS1KASLST56JPC9RWMY07UK1RC1A4GB0AC93MX9IK20QSK8RIC2TC8WKPXCO0XVFCJJMA3NVEGL6RL9YF3JHRD44A8QOVC2QLHLAK297ZT6OIMXNWBWRGNQF0328QU7F71GL1OWTHECVH11RKYK8VWKMD4WYOLK42U0M07OFJDXUCIBXD6LJYMFVD5EW43GRR3ZDM71R69ZPC0ZR4TLMQENPDZ0KHYVDQ7E58G0' where id=64; -update noar ti set v0='A6FOTIU48JWADRZ1YRIC9JV4RLBS1KASLST56JPC9RWMY07UK1RC1A4GB0AC93MX9IK20QSK8RIC2TC8WKPXCO0XVFCJJMA3NVEGL6RL9YF3JHRD44A8QOVC2QLHLAK297ZT6OIMXNWBWRGNQF0328QU7F71GL1OWTHECVH11RKYK8VWKMD4WYOLK42U0M07OFJDXUCIBXD6LJYMFVD5EW43GRR3ZDM71R69ZPC0ZR4TLMQENPDZ0KHYVDQ7E58G0' where id=64; -update noar tt set v1='WTY5C15ZEU2ERV7HHY1A0DOPS8MNN2LQ0YY9339UE0YTTYCPPZ2WZI0Y3CKS5RJO8QKZPNWPVXZ9DUY86MU5NJDT8I60H49T443M5VL7AWAVIPGSVDMJO4A6PSPMSBTGRTV4NM8D3P871BETF5MU4W0N1VQ4JD2Y768U7NNCJAT7NWE5V9UEWW71MZJZXB4IZPS617PRA1WMXGNOHKPMQBEPHTDY2DCZR54E12HNVEG5H60ALKFDJPGKFDVKPMECG' where id=64; -update noar ti set v1='WTY5C15ZEU2ERV7HHY1A0DOPS8MNN2LQ0YY9339UE0YTTYCPPZ2WZI0Y3CKS5RJO8QKZPNWPVXZ9DUY86MU5NJDT8I60H49T443M5VL7AWAVIPGSVDMJO4A6PSPMSBTGRTV4NM8D3P871BETF5MU4W0N1VQ4JD2Y768U7NNCJAT7NWE5V9UEWW71MZJZXB4IZPS617PRA1WMXGNOHKPMQBEPHTDY2DCZR54E12HNVEG5H60ALKFDJPGKFDVKPMECG' where id=64; -update noar tt set v2='RPTENB3ETSR98K7JT4P1F5RR2W1AMUFPEDT32FHZL13G0ENWNO95COKI6091QTXPBQIS5A5O8ELBOI46HP26HEJOBN3BXVV2XN8FYIMJAXW9V2X8158F1TAKTVF1CRYRCMXXTIHZZV8T66V0VLYG5T1U5E3WHB7RRNABCGDKBM2X5I3PL7EEJ9JM44MMFBFUWPXAILABIMSWJNEA6EQNT1P43F0MARLDXH817TS33ZP9L717N34PIAPCRRPVMGBEZ' where id=64; -update noar ti set v2='RPTENB3ETSR98K7JT4P1F5RR2W1AMUFPEDT32FHZL13G0ENWNO95COKI6091QTXPBQIS5A5O8ELBOI46HP26HEJOBN3BXVV2XN8FYIMJAXW9V2X8158F1TAKTVF1CRYRCMXXTIHZZV8T66V0VLYG5T1U5E3WHB7RRNABCGDKBM2X5I3PL7EEJ9JM44MMFBFUWPXAILABIMSWJNEA6EQNT1P43F0MARLDXH817TS33ZP9L717N34PIAPCRRPVMGBEZ' where id=64; -update noar tt set v3='3UO0GQYJYKUPJ7LR2ARKLGK6NVT945WTKI40XSBZ5YIJAX2XGR0N4ZYDUAAMCLYKFVX9VLXUIDOZGEXND1M7H8VGM511AOWQFY3IO402UTEKPJ6X5QRNCWZCYA50H4PVKUNI152UHAJTP6MRP7K1RUVX1AOL1RYUHQW7NJ0H6XL35TESBVQ1UKAB3LIUW0E5RUPLWYBZQMU3IRLWJPJN1WP3SICJTYP735JDML352Z0XZW2NJ89B9L0UQVXFQY60C' where id=64; -update noar ti set v3='3UO0GQYJYKUPJ7LR2ARKLGK6NVT945WTKI40XSBZ5YIJAX2XGR0N4ZYDUAAMCLYKFVX9VLXUIDOZGEXND1M7H8VGM511AOWQFY3IO402UTEKPJ6X5QRNCWZCYA50H4PVKUNI152UHAJTP6MRP7K1RUVX1AOL1RYUHQW7NJ0H6XL35TESBVQ1UKAB3LIUW0E5RUPLWYBZQMU3IRLWJPJN1WP3SICJTYP735JDML352Z0XZW2NJ89B9L0UQVXFQY60C' where id=64; -update noar tt set v0='IZ5G9W8JX3FFNW6K6OINC65XZECSI57UNWCS2CEDRC8F16NDEZAOAFR4WPS5TA756DQH213J5DVEPP2NLWZGK7JHIMHZ1IO23KS65Z21SX0BKUKCY5CX8NI1PH9WPG2LO9Y0LSCC9E30SHAJXBTBXVN8SCF2E5O2GLIPLKD9TRWF4ONYNBOBY7WSNJF9HLV80XJ2NEOLWK2YWRQSZXUJ20TK82PZPNGFG64XJQBEPRP4E3DU1A5VXQEJ9GVVXHFIC' where id=65; -update noar ti set v0='IZ5G9W8JX3FFNW6K6OINC65XZECSI57UNWCS2CEDRC8F16NDEZAOAFR4WPS5TA756DQH213J5DVEPP2NLWZGK7JHIMHZ1IO23KS65Z21SX0BKUKCY5CX8NI1PH9WPG2LO9Y0LSCC9E30SHAJXBTBXVN8SCF2E5O2GLIPLKD9TRWF4ONYNBOBY7WSNJF9HLV80XJ2NEOLWK2YWRQSZXUJ20TK82PZPNGFG64XJQBEPRP4E3DU1A5VXQEJ9GVVXHFIC' where id=65; -update noar tt set v1='G1JY3SIR0KJIPR3TR69AO2H2AAM1ORIPCLQ092ZEG2YUU8AQJFYL8GU12CVLA3X6XOEQLNLXJBGPL77CN1CJA4KX88U2EC7E2WMLCO1RXZU33XQ356ZUL3IWE6UOKCZY19AR5S52NMCMYM3U18MELYQFZPC6B1K0KKRFHTF39FC6YHUCG1VUEC7FP1J2EO4EABY6HQOZFM5JCOLTRTYXVIONRERSM0SYIKGFHPRJJKGO7PXPU6UQ2SLQQIN5H87I2' where id=65; -update noar ti set v1='G1JY3SIR0KJIPR3TR69AO2H2AAM1ORIPCLQ092ZEG2YUU8AQJFYL8GU12CVLA3X6XOEQLNLXJBGPL77CN1CJA4KX88U2EC7E2WMLCO1RXZU33XQ356ZUL3IWE6UOKCZY19AR5S52NMCMYM3U18MELYQFZPC6B1K0KKRFHTF39FC6YHUCG1VUEC7FP1J2EO4EABY6HQOZFM5JCOLTRTYXVIONRERSM0SYIKGFHPRJJKGO7PXPU6UQ2SLQQIN5H87I2' where id=65; -update noar tt set v2='JQB1AV58BGRQQK0ZUJCY3WH0XB67DV9MGLLR03864TD6TKEFNB4L7N2XXJLBULAZPUR2RQCP6AJDUM2IHX9FL8X81EAK39HZIMUZDU4Q2DE894N7D6GCR8IGML0YPLEGPKEDMWXQCX2LGIAR4BW5BV5HV2HZW93EQKWQAAMREEKWQLMFHGW7M1BXCYABJN8WM9AN81MOE41559XZLBWWCWLSDDCJ559SABWTUAX7MNOQ7N11ECRODOLS6M2MSL1Z1' where id=65; -update noar ti set v2='JQB1AV58BGRQQK0ZUJCY3WH0XB67DV9MGLLR03864TD6TKEFNB4L7N2XXJLBULAZPUR2RQCP6AJDUM2IHX9FL8X81EAK39HZIMUZDU4Q2DE894N7D6GCR8IGML0YPLEGPKEDMWXQCX2LGIAR4BW5BV5HV2HZW93EQKWQAAMREEKWQLMFHGW7M1BXCYABJN8WM9AN81MOE41559XZLBWWCWLSDDCJ559SABWTUAX7MNOQ7N11ECRODOLS6M2MSL1Z1' where id=65; -update noar tt set v3='BIWL5WWAB109BEHRG07GTEAO15240MWVWARPT82JRWBOTUV7OBIO4C51OIHO54JDJ2DVK4G9LEPEQGE2CQ1P92ADSAM0RVV3INHU823TX8VC889YP1YC2LOBD87GRZMKCCMU85H3B11DC9FVFDDOOUAGR8O6N7ROKPKC231HZVRCGBS84BWWSDYMSB69IPBYBIJPPWVXOJGY8XDKMBNQ0Z9D684LHNOTFATXFBXAC6ZRW491Y92WVLQ44DYPR1RCA' where id=65; -update noar ti set v3='BIWL5WWAB109BEHRG07GTEAO15240MWVWARPT82JRWBOTUV7OBIO4C51OIHO54JDJ2DVK4G9LEPEQGE2CQ1P92ADSAM0RVV3INHU823TX8VC889YP1YC2LOBD87GRZMKCCMU85H3B11DC9FVFDDOOUAGR8O6N7ROKPKC231HZVRCGBS84BWWSDYMSB69IPBYBIJPPWVXOJGY8XDKMBNQ0Z9D684LHNOTFATXFBXAC6ZRW491Y92WVLQ44DYPR1RCA' where id=65; -update noar tt set v0='698QAF0IVRQSE28DJA5L43GQKTT1JI5AQYGN85D28AM2F89AF1QEV50ZLHOR2E63NQIHQ8SG1ZHPZ1XFAPKR47MVXT570CAG5B7V9RFV86B1BIXCHL7ZW00VMQ0XZT86OCGXKTB6RY5JCGVW7DF0ORPEK42RXYKLU54N13HW7QZRCXXK7UJQDN3CC61877S7BRRK67UNJ319QK0W4CHDTAKQKNVGOH7EA4WER7RXDOR1I2MZ0BCKBR20W74IK9QW4' where id=66; -update noar ti set v0='698QAF0IVRQSE28DJA5L43GQKTT1JI5AQYGN85D28AM2F89AF1QEV50ZLHOR2E63NQIHQ8SG1ZHPZ1XFAPKR47MVXT570CAG5B7V9RFV86B1BIXCHL7ZW00VMQ0XZT86OCGXKTB6RY5JCGVW7DF0ORPEK42RXYKLU54N13HW7QZRCXXK7UJQDN3CC61877S7BRRK67UNJ319QK0W4CHDTAKQKNVGOH7EA4WER7RXDOR1I2MZ0BCKBR20W74IK9QW4' where id=66; -update noar tt set v1='BVA3SX2Z9PCS1MSM7FF4B7NOL1BSM6DFSD8DRUJ6E3B72AK2IHQNZDL9CF1ZZ64ES79VIM3UWRNY0HTNOVPQTLYYV8X4XVMDUVCIF1HO0YVDSY61FB0JE63R1QWQBIZN2VNQCFNKOPRV5OVEH9A18N07BZ3HK7F41TLOJTNE1542S4LU6UIS8YGXEKN2BR8J12JGHM6A51NFV3XHM8R00X6OUQW1CJKHCZR3096G80OJMWGGXXGTV7IAX8WO1FM8D' where id=66; -update noar ti set v1='BVA3SX2Z9PCS1MSM7FF4B7NOL1BSM6DFSD8DRUJ6E3B72AK2IHQNZDL9CF1ZZ64ES79VIM3UWRNY0HTNOVPQTLYYV8X4XVMDUVCIF1HO0YVDSY61FB0JE63R1QWQBIZN2VNQCFNKOPRV5OVEH9A18N07BZ3HK7F41TLOJTNE1542S4LU6UIS8YGXEKN2BR8J12JGHM6A51NFV3XHM8R00X6OUQW1CJKHCZR3096G80OJMWGGXXGTV7IAX8WO1FM8D' where id=66; -update noar tt set v2='0XZ0ZGTMG3V0ZFQ6JYBLXOKY11SVP6IF7SYZW7QB4DFF8MA2AF36W5NJ8T4S066TWJ55T7VLPN4BS2LJYHSK1QIVTWMLISXX1UIFXO50KO1MS11OUWYA9DSN6L04WRCE03IOQYRHKP9986KQAHCU991PYT9457LFIS74WTMSMGWO3WDY3A5S43LW9TUGK2T5K97ZTG3ROKH05DIT05SIHRDG9CR88OL2AO2S9OA5OKCMCOSS74FGZWUPW0Y3PN1Q0' where id=66; -update noar ti set v2='0XZ0ZGTMG3V0ZFQ6JYBLXOKY11SVP6IF7SYZW7QB4DFF8MA2AF36W5NJ8T4S066TWJ55T7VLPN4BS2LJYHSK1QIVTWMLISXX1UIFXO50KO1MS11OUWYA9DSN6L04WRCE03IOQYRHKP9986KQAHCU991PYT9457LFIS74WTMSMGWO3WDY3A5S43LW9TUGK2T5K97ZTG3ROKH05DIT05SIHRDG9CR88OL2AO2S9OA5OKCMCOSS74FGZWUPW0Y3PN1Q0' where id=66; -update noar tt set v3='YO0D586IHMZX1B8C2DCNV3RYQMD9KD6COQ4JABGD71L1EYF1ASLO3HLWFSJQNPWWQQ1IN9BOCPEZ4OFKLMLTBICAWMHHO3TVX10J5AVFWTZPC7YAPUO3EVFPFTHN79H82FDE98HY5ZTLOJI235EK7UQH25ESA3GO14Q5AQDWVO9PXILFJ0KH4TB56XS80QY5ED5GHD4STEL7JE87NTVHMGI8129E44RNU6GYOKKVSMC80YGX3C9LEX1MJW5HM5S9O' where id=66; -update noar ti set v3='YO0D586IHMZX1B8C2DCNV3RYQMD9KD6COQ4JABGD71L1EYF1ASLO3HLWFSJQNPWWQQ1IN9BOCPEZ4OFKLMLTBICAWMHHO3TVX10J5AVFWTZPC7YAPUO3EVFPFTHN79H82FDE98HY5ZTLOJI235EK7UQH25ESA3GO14Q5AQDWVO9PXILFJ0KH4TB56XS80QY5ED5GHD4STEL7JE87NTVHMGI8129E44RNU6GYOKKVSMC80YGX3C9LEX1MJW5HM5S9O' where id=66; -update noar tt set v0='0QHV2YSY3JS1ZXXKYXFEEXTTJD1APH1NKZ20JEPH69432V5SCACYH7RXJEZ0V866WJTDMQZASC6MUI1ARHDRSY7QZY27UXR4HCQV7IKT4WHB55D1DL9DLWV29U5S7V2BF207397J04UF8Z2LLB1GDJMWUHB3BUM1JS7G441LCLHVONHA5Q39X05IZGC4MUS46TBP79QJU6FMCWF7FJD1Y5JYGR0R7804QK4OK58AMKMR0V3PXW53ARTN4A4IY2R0F' where id=67; -update noar ti set v0='0QHV2YSY3JS1ZXXKYXFEEXTTJD1APH1NKZ20JEPH69432V5SCACYH7RXJEZ0V866WJTDMQZASC6MUI1ARHDRSY7QZY27UXR4HCQV7IKT4WHB55D1DL9DLWV29U5S7V2BF207397J04UF8Z2LLB1GDJMWUHB3BUM1JS7G441LCLHVONHA5Q39X05IZGC4MUS46TBP79QJU6FMCWF7FJD1Y5JYGR0R7804QK4OK58AMKMR0V3PXW53ARTN4A4IY2R0F' where id=67; -update noar tt set v1='HEUXEQC9LEARKUAB3CSE471DMJTC3XKE1M3SBY13Y6OBVKA0SK6OTL4LUZT0OOXL2K3GJAU8HBAOFHVINDQU6OFWT90DFAXJ97E6XFON2TKWEFMDZEK1T9REG076BXB4JBNPRN68ME3Z6T1HRYYXHI5YG3HJOGB6M540EZ4PCY0HUSSFM2I0R97SB3BMILXKYEYGEYVEBDC25614NUQWISOCT3710QEO8XAF42M5RDSG055MF2DLE5RLCJY9VOO6C' where id=67; -update noar ti set v1='HEUXEQC9LEARKUAB3CSE471DMJTC3XKE1M3SBY13Y6OBVKA0SK6OTL4LUZT0OOXL2K3GJAU8HBAOFHVINDQU6OFWT90DFAXJ97E6XFON2TKWEFMDZEK1T9REG076BXB4JBNPRN68ME3Z6T1HRYYXHI5YG3HJOGB6M540EZ4PCY0HUSSFM2I0R97SB3BMILXKYEYGEYVEBDC25614NUQWISOCT3710QEO8XAF42M5RDSG055MF2DLE5RLCJY9VOO6C' where id=67; -update noar tt set v2='HPH1C6QGUFJVG2CZKPC785GZ8OMYYQ4LWUT0J52VKMQIF4QVXW8Z4PCPAYN0OPTBJHR7SNMKOEETQ3MGBN79486K329C6MVDFX5QJG4LE76AFGFSQZ240ZNTWS3Z2ED8ALOOQO0D79S3YCYK1OKI1225EOJ01ZGUVAY9WL0WO3AHWADP956X9WU07EHB0IMKPJQ40A2CTC1DDU7AMHG18R9YY5ZPRR98XJABECZ80B5N58HK6WKIIP52U736Q38EF' where id=67; -update noar ti set v2='HPH1C6QGUFJVG2CZKPC785GZ8OMYYQ4LWUT0J52VKMQIF4QVXW8Z4PCPAYN0OPTBJHR7SNMKOEETQ3MGBN79486K329C6MVDFX5QJG4LE76AFGFSQZ240ZNTWS3Z2ED8ALOOQO0D79S3YCYK1OKI1225EOJ01ZGUVAY9WL0WO3AHWADP956X9WU07EHB0IMKPJQ40A2CTC1DDU7AMHG18R9YY5ZPRR98XJABECZ80B5N58HK6WKIIP52U736Q38EF' where id=67; -update noar tt set v3='WFURLW3O0WJEP5Z8S1J3D3KKVQ2QEU65R02H77N9Y8WWJIC3H0DNHH3PJGMHLG0CAE7L910NR1TXW9QRY3R1JBP3SPUM4PHQO9G9JQWZCKQVR0NDMPG41EYI3O5LCXV4UDAD5GOECEQNT1MLDTSQ9ZAK4ULPP3RV13K2UTMYZMX8N6PVGRZDOYWPTGKK8M0ISQBXXVMEXZDCI1EGZXB4QQ2I8Y0PJN5GOM1QD0SSKLCNR3P78IOAP0QK3VJRTYAJ8' where id=67; -update noar ti set v3='WFURLW3O0WJEP5Z8S1J3D3KKVQ2QEU65R02H77N9Y8WWJIC3H0DNHH3PJGMHLG0CAE7L910NR1TXW9QRY3R1JBP3SPUM4PHQO9G9JQWZCKQVR0NDMPG41EYI3O5LCXV4UDAD5GOECEQNT1MLDTSQ9ZAK4ULPP3RV13K2UTMYZMX8N6PVGRZDOYWPTGKK8M0ISQBXXVMEXZDCI1EGZXB4QQ2I8Y0PJN5GOM1QD0SSKLCNR3P78IOAP0QK3VJRTYAJ8' where id=67; -update noar tt set v0='SH0X13UGX8HL56FVPGWPJXRX9DA4AOCQEJEVPROCNI22GO3O7CKKUG91V32DSR2DOESVXT6VMJFM26QT2BQFNKPY2P1NFDHNHWMPLNYLJ7AI8IL9ZFD0MSDVPUFBBCMB8L7430NKAX5L21A2V9CMCZXUUH9O6T7KWY6MO4Z3713PX4BLTQOQD2BVW0JZTDTDTQWZLCXRQO8UWF96NFONL6QMF0N2RXIJKREO37EOJL8KAHIIKGR4ID33FC3JWAGIK' where id=68; -update noar ti set v0='SH0X13UGX8HL56FVPGWPJXRX9DA4AOCQEJEVPROCNI22GO3O7CKKUG91V32DSR2DOESVXT6VMJFM26QT2BQFNKPY2P1NFDHNHWMPLNYLJ7AI8IL9ZFD0MSDVPUFBBCMB8L7430NKAX5L21A2V9CMCZXUUH9O6T7KWY6MO4Z3713PX4BLTQOQD2BVW0JZTDTDTQWZLCXRQO8UWF96NFONL6QMF0N2RXIJKREO37EOJL8KAHIIKGR4ID33FC3JWAGIK' where id=68; -update noar tt set v1='XTONFIT2HEX1SIGY1QM512E302HYAGJE0WNYFPAPMTHLX8KTMZFFGAORFVGNLJXHYG09C315O2L2SCBIDFS4RGGH2WB03RXWCUJ6MUKUJ7WODHI7O8BKDIXZFRTCA8B27BS2LDZX2MHUEXY2ESRSZ05CU5LK8TXKZBXBPMKU85ZGO8Q5BNUJ7QYPMJTVF2FNG307B32WP4ZXJXSTFJ7Q95X0I5OSVFYKIY62VYJB8P1R9QL2YFZZ6OE8FGIJORCSW' where id=68; -update noar ti set v1='XTONFIT2HEX1SIGY1QM512E302HYAGJE0WNYFPAPMTHLX8KTMZFFGAORFVGNLJXHYG09C315O2L2SCBIDFS4RGGH2WB03RXWCUJ6MUKUJ7WODHI7O8BKDIXZFRTCA8B27BS2LDZX2MHUEXY2ESRSZ05CU5LK8TXKZBXBPMKU85ZGO8Q5BNUJ7QYPMJTVF2FNG307B32WP4ZXJXSTFJ7Q95X0I5OSVFYKIY62VYJB8P1R9QL2YFZZ6OE8FGIJORCSW' where id=68; -update noar tt set v2='RY89K8BQULSAX3380IKWDM4327A0KVRXR30KP7138JM19MTFBYDO7J2LJ19ELA21B8W5IAZML9HOTFLA7NPG750N6FN38INLWBAJ3TMDTFSYBII1F8YV4CNE8GOCD3OFB5SZJVJDHOEH4UQTNLDGQN2J7Y3XLRAKJMY1YGJ1WNYDHMTX4OS8KAD253DIL83HFP975HY2WECLVORROCIW0RCIE8FIT2XJE3UZAJFX6CB0WEHY7ARG344LT3RA0JDMU' where id=68; -update noar ti set v2='RY89K8BQULSAX3380IKWDM4327A0KVRXR30KP7138JM19MTFBYDO7J2LJ19ELA21B8W5IAZML9HOTFLA7NPG750N6FN38INLWBAJ3TMDTFSYBII1F8YV4CNE8GOCD3OFB5SZJVJDHOEH4UQTNLDGQN2J7Y3XLRAKJMY1YGJ1WNYDHMTX4OS8KAD253DIL83HFP975HY2WECLVORROCIW0RCIE8FIT2XJE3UZAJFX6CB0WEHY7ARG344LT3RA0JDMU' where id=68; -update noar tt set v3='K0QQA5MDSGU6MWXGWC8F7T0YS0JNAL4TQNOIP56TMPVUN1QR0Q14GHF4GKZWKRBL01BCXWVIK7LPSH8RK6XBF83GOTH1FHSOT1P670Z9M6MYB7PVDWYHPWDY3VP2CW6P4EJNOWB3MY6UN0CFQ95GHCPTJNSBJ880N6X6ZZC34QYPGIPJ62NK5BHIX8VITCS0DRF9LD9GH67NWBAL9OQB6JMKGI3968IXK81I56OTHW10WCBT1ITQDOXNTANN2BZ4Y' where id=68; -update noar ti set v3='K0QQA5MDSGU6MWXGWC8F7T0YS0JNAL4TQNOIP56TMPVUN1QR0Q14GHF4GKZWKRBL01BCXWVIK7LPSH8RK6XBF83GOTH1FHSOT1P670Z9M6MYB7PVDWYHPWDY3VP2CW6P4EJNOWB3MY6UN0CFQ95GHCPTJNSBJ880N6X6ZZC34QYPGIPJ62NK5BHIX8VITCS0DRF9LD9GH67NWBAL9OQB6JMKGI3968IXK81I56OTHW10WCBT1ITQDOXNTANN2BZ4Y' where id=68; -update noar tt set v0='F8JII6T7EL9A2FGD4HE506JAZC4P6QI58JI9RGODOBPBX0Y00UJ445PLGE5CQ4XSXAUEYUT6G6MPZDDL3EYDNOVKVEZVYWF0W2N6QBVV6X3GX6SUH0RH4P10LZ8RKS4V2K7VAKZKA2FS86B4LDKWPN0QAQQMXW3FGDW7FS0XLN2MTR03LEYDC0V0QGM2WM3JJIFFKLFJPR7JWYYIVZGLHLRPS83XU2C4PPBW445DELM7QRQR75DW3GYB3P7RSAXQJ' where id=69; -update noar ti set v0='F8JII6T7EL9A2FGD4HE506JAZC4P6QI58JI9RGODOBPBX0Y00UJ445PLGE5CQ4XSXAUEYUT6G6MPZDDL3EYDNOVKVEZVYWF0W2N6QBVV6X3GX6SUH0RH4P10LZ8RKS4V2K7VAKZKA2FS86B4LDKWPN0QAQQMXW3FGDW7FS0XLN2MTR03LEYDC0V0QGM2WM3JJIFFKLFJPR7JWYYIVZGLHLRPS83XU2C4PPBW445DELM7QRQR75DW3GYB3P7RSAXQJ' where id=69; -update noar tt set v1='UL0VE33M30IXP67YW5TUFCZLX9SKK5B3VRV18OHVV02RB1ZIQ78WDAT685TN3960YG10S2PNL4EF95AKEF0FH0MLMHW4GX85T3HCZXU5I42PNDJ373M26PQ1RWWONT9LJHU905W31PPMCW8F0LU25K17R0EL5D7HH5GCZCHFU306BUREP9I8O4HIU9C58BK9X2Y04SPFCJWFGJE0A8YAPFEIOX0DBCHXBX8P1T6UB9V6AIM2KJOXBQPWITZ7OD31B' where id=69; -update noar ti set v1='UL0VE33M30IXP67YW5TUFCZLX9SKK5B3VRV18OHVV02RB1ZIQ78WDAT685TN3960YG10S2PNL4EF95AKEF0FH0MLMHW4GX85T3HCZXU5I42PNDJ373M26PQ1RWWONT9LJHU905W31PPMCW8F0LU25K17R0EL5D7HH5GCZCHFU306BUREP9I8O4HIU9C58BK9X2Y04SPFCJWFGJE0A8YAPFEIOX0DBCHXBX8P1T6UB9V6AIM2KJOXBQPWITZ7OD31B' where id=69; -update noar tt set v2='D4UD3SBDHA9JBDOMG893SFTQRM5OYZ3J2M3Q9WNXOIKVAIDIE29YFBF6RPEB4UCO3TBKD0BLC8N0N4JELRPV86CLQHBAB00EMHL3TQ16NVWD8QSODCP4CXR32K3CRIN4PEENNT1B02AHPU31J8OX9N6VRA05OYLGJY03A0338N1K6XQJV7I8G5HZ4YPDEEO5S8QMYSQ0IMQDCDY15QVSP2P0LF127WSNMC83PNQC9E0GASDGRD6BEJ0UWN8Y1IJ94' where id=69; -update noar ti set v2='D4UD3SBDHA9JBDOMG893SFTQRM5OYZ3J2M3Q9WNXOIKVAIDIE29YFBF6RPEB4UCO3TBKD0BLC8N0N4JELRPV86CLQHBAB00EMHL3TQ16NVWD8QSODCP4CXR32K3CRIN4PEENNT1B02AHPU31J8OX9N6VRA05OYLGJY03A0338N1K6XQJV7I8G5HZ4YPDEEO5S8QMYSQ0IMQDCDY15QVSP2P0LF127WSNMC83PNQC9E0GASDGRD6BEJ0UWN8Y1IJ94' where id=69; -update noar tt set v3='KQ5EYSAZRD9DFQXP8GI1TJSR66GASD0R0QC3Q3D6XQ5C5K0R2RXID4LPOALCTZY5L6YB87HLQG68GE0N2BEPQTHDQD0ENZQAFNHM6WTXME02GPCVYXKZNSKJWNK5VWDTPR1K8E2DV6X41P6YE090437PZPHO48ERONXAQ73XYWDIFTBPXPKYIX8P9W5ONFISC45VDEWNQEWS0EXF0EMMCRIBE1ENG6QDV871LI7SGYMXD1I5CE8C9P6YCJ1K8OOXC' where id=69; -update noar ti set v3='KQ5EYSAZRD9DFQXP8GI1TJSR66GASD0R0QC3Q3D6XQ5C5K0R2RXID4LPOALCTZY5L6YB87HLQG68GE0N2BEPQTHDQD0ENZQAFNHM6WTXME02GPCVYXKZNSKJWNK5VWDTPR1K8E2DV6X41P6YE090437PZPHO48ERONXAQ73XYWDIFTBPXPKYIX8P9W5ONFISC45VDEWNQEWS0EXF0EMMCRIBE1ENG6QDV871LI7SGYMXD1I5CE8C9P6YCJ1K8OOXC' where id=69; -update noar tt set v0='XK5O7XTAISPFIB4Z0ROPEHZPDBYTMU3HE8O4SYGLGXA3MSF1CURWCJHF6R1N3IKYA4DMTP13JKTOWRGUSJ3B6FPWGR861YYB8EHM4C8C4ZU8C6LZ96TK1YV9D6TGR40WV1D1HVQK8PTSUPPVW13RY34HL6RQ8R41H1VK4RJAYO6VUZ5YI8ASG0ZA28JDVAQ4CPQW84SVDJLW0O8CMXLG3TDHLCKQA6P44I7NR3PI4D0M6Z337XTW17XJHDDEPZQWO' where id=70; -update noar ti set v0='XK5O7XTAISPFIB4Z0ROPEHZPDBYTMU3HE8O4SYGLGXA3MSF1CURWCJHF6R1N3IKYA4DMTP13JKTOWRGUSJ3B6FPWGR861YYB8EHM4C8C4ZU8C6LZ96TK1YV9D6TGR40WV1D1HVQK8PTSUPPVW13RY34HL6RQ8R41H1VK4RJAYO6VUZ5YI8ASG0ZA28JDVAQ4CPQW84SVDJLW0O8CMXLG3TDHLCKQA6P44I7NR3PI4D0M6Z337XTW17XJHDDEPZQWO' where id=70; -update noar tt set v1='E4LFFSA1J925QOFISTE14MMMS7TJDPBPFHJL1P62IBB6ZQ9LV16SBA297IWYL86064QNSAC8FODZZMTRG5RDXF9PAB5HCV6CFI56OTO2F55OT2MGDE0QHFO8BE53V5Z7SA6DJI6QGQN45WQJ1B5HOT4E5D3JVDJ1Y3R7MQYUN99O0DDLCGTSSGDMGQI4U7VAIR8P0RDGQRLWQGLBN3Z73EEZBUROI2QDIANHKZX0TA7KKBLIMISMPKIE0X2PMW8SM' where id=70; -update noar ti set v1='E4LFFSA1J925QOFISTE14MMMS7TJDPBPFHJL1P62IBB6ZQ9LV16SBA297IWYL86064QNSAC8FODZZMTRG5RDXF9PAB5HCV6CFI56OTO2F55OT2MGDE0QHFO8BE53V5Z7SA6DJI6QGQN45WQJ1B5HOT4E5D3JVDJ1Y3R7MQYUN99O0DDLCGTSSGDMGQI4U7VAIR8P0RDGQRLWQGLBN3Z73EEZBUROI2QDIANHKZX0TA7KKBLIMISMPKIE0X2PMW8SM' where id=70; -update noar tt set v2='WELHWOKHZZ3O1QOR1MUIKUDC5HW8OSXP2MW0SKCUQTLCQPUWZ1BV3CVEABS1PLQN8EU1KCDQ5ICWW0IK8T963FIDGUKH0IDGQLRP4MH22A3QC6J7AP6S8I6JWZ630SDBVRM3I5ZT7ZIJN0QLI73Z84JXQFRJLF0A9GYYOL03KCTCIOESIKUY8130AUY7VF2BGWXMFEGV2U45EDGKVUP4ILPESV4JXV9FXLMXY1OEY19Q9C5A6YZQNQTBEES9CXFH1' where id=70; -update noar ti set v2='WELHWOKHZZ3O1QOR1MUIKUDC5HW8OSXP2MW0SKCUQTLCQPUWZ1BV3CVEABS1PLQN8EU1KCDQ5ICWW0IK8T963FIDGUKH0IDGQLRP4MH22A3QC6J7AP6S8I6JWZ630SDBVRM3I5ZT7ZIJN0QLI73Z84JXQFRJLF0A9GYYOL03KCTCIOESIKUY8130AUY7VF2BGWXMFEGV2U45EDGKVUP4ILPESV4JXV9FXLMXY1OEY19Q9C5A6YZQNQTBEES9CXFH1' where id=70; -update noar tt set v3='NN98J202D6MHL1OX7XZP6CB0X67BBW02WJIVUBQB2P491X3NR1C3H5I3MQDN7Q3OXKI7MXTZ3FV4ML1D36A0R5FX849N0G6G2M1UJ6QXJ9WVSOXS2W12746BN2YY54FNQ7N64CCRQ89DPF8L0YR70NCY8OYFR71LRKCSNT3ZEOH23XMHP050HCWTJOQTTKBAMOQDUVGC0YREF4EZX35UDJ4WKM194NIE6QO8W299YKWBGRD6IQGW4F2WOA8OM1TA6' where id=70; -update noar ti set v3='NN98J202D6MHL1OX7XZP6CB0X67BBW02WJIVUBQB2P491X3NR1C3H5I3MQDN7Q3OXKI7MXTZ3FV4ML1D36A0R5FX849N0G6G2M1UJ6QXJ9WVSOXS2W12746BN2YY54FNQ7N64CCRQ89DPF8L0YR70NCY8OYFR71LRKCSNT3ZEOH23XMHP050HCWTJOQTTKBAMOQDUVGC0YREF4EZX35UDJ4WKM194NIE6QO8W299YKWBGRD6IQGW4F2WOA8OM1TA6' where id=70; -update noar tt set v0='YFRPIK542K92D9ORHSDG0MO6HRMLHASGU1I7N57A6CFWF99HWYVDJAAWC61TL0640QAGTV46V50HKTS9LN764W2M1GQYFEDLWL1FN9A95BSYS5MF2IKYROY382PGSN7VINU781K2XXYSND5VJ2LEDS0TMQHC6XG7RB2P7VZME4UZMAK8U0DNCI5YT2EYV9LIO3EYVQLMKKWBQFLL25VIXRXF0XCDB9NJBFSAWVEJL8C0FGOELC9E6FNJP1JX5JLCH' where id=71; -update noar ti set v0='YFRPIK542K92D9ORHSDG0MO6HRMLHASGU1I7N57A6CFWF99HWYVDJAAWC61TL0640QAGTV46V50HKTS9LN764W2M1GQYFEDLWL1FN9A95BSYS5MF2IKYROY382PGSN7VINU781K2XXYSND5VJ2LEDS0TMQHC6XG7RB2P7VZME4UZMAK8U0DNCI5YT2EYV9LIO3EYVQLMKKWBQFLL25VIXRXF0XCDB9NJBFSAWVEJL8C0FGOELC9E6FNJP1JX5JLCH' where id=71; -update noar tt set v1='J3XU346XQGSUTTYFKWBTN7IYUOQEXQLFIU9YA6TADH3NMINHBPD8E6ZTZVGXXVVOF1GOMO7A0BMJIYA5ARDZ3ZXVFYPI8596XQ87MLQQZVX0YOKWSJFNHFFG3SFF1OFJ0GDOPZ5UBMJ6CXHX2L26U8I711AD3LPM88H99UXMVTA7Z0ECDKLB4FJ0XIGPWA9QWTSZBJTVXG1XDL1LVN0PZTE2A7LUO9ZLXL0Q4LSQD5MT1OTQL30ZZWSSOHR18KNLV' where id=71; -update noar ti set v1='J3XU346XQGSUTTYFKWBTN7IYUOQEXQLFIU9YA6TADH3NMINHBPD8E6ZTZVGXXVVOF1GOMO7A0BMJIYA5ARDZ3ZXVFYPI8596XQ87MLQQZVX0YOKWSJFNHFFG3SFF1OFJ0GDOPZ5UBMJ6CXHX2L26U8I711AD3LPM88H99UXMVTA7Z0ECDKLB4FJ0XIGPWA9QWTSZBJTVXG1XDL1LVN0PZTE2A7LUO9ZLXL0Q4LSQD5MT1OTQL30ZZWSSOHR18KNLV' where id=71; -update noar tt set v2='V469URBLW2ZEIAF61MEEW6SQ4UZ7WSBF78RU9OHWM579KG5YAGJCOOL2SV7LBUMZUYV1WJUMHTYCDPJ764B24L0V7EQSHIBQG2KDPUGQHYVCB4QOVKXRQXAJ1X5F6M4U6TAMOIZWYD95PG51NQCC26IJP9HD0FQWEQHCP3ORX0JHMU0GYCVSC86BDTZNN1AAOUI642250ETQPT58EUJ6MDBK7RV5OICFG77ADQ0GINX6D3BNQ8OQ3Y0AWFVBJIKHF' where id=71; -update noar ti set v2='V469URBLW2ZEIAF61MEEW6SQ4UZ7WSBF78RU9OHWM579KG5YAGJCOOL2SV7LBUMZUYV1WJUMHTYCDPJ764B24L0V7EQSHIBQG2KDPUGQHYVCB4QOVKXRQXAJ1X5F6M4U6TAMOIZWYD95PG51NQCC26IJP9HD0FQWEQHCP3ORX0JHMU0GYCVSC86BDTZNN1AAOUI642250ETQPT58EUJ6MDBK7RV5OICFG77ADQ0GINX6D3BNQ8OQ3Y0AWFVBJIKHF' where id=71; -update noar tt set v3='TIJ8M4LSSCBMCRQH08HT77VAUZ8XFIQZVBXJHL3NXBGRSQE5U28PS3F48SBV2BPIPLVP4RD9YCT8ZQHAWZE3B33957HHHGBJI5909MJZPWRYVOIZ30673AZ6SX85JS8DWXUX1JS09GVMCE0NK4H29RAFDW1IRBGKLXJF9X4XUTWN91DOQJY9OBWHFL99KEU4FIZIF1K5C1EME3AXDEUDC6E4ZJ81PTJCZ4L4VHTTRUZ4EKK0NAFII3D31H4B4Z7WD' where id=71; -update noar ti set v3='TIJ8M4LSSCBMCRQH08HT77VAUZ8XFIQZVBXJHL3NXBGRSQE5U28PS3F48SBV2BPIPLVP4RD9YCT8ZQHAWZE3B33957HHHGBJI5909MJZPWRYVOIZ30673AZ6SX85JS8DWXUX1JS09GVMCE0NK4H29RAFDW1IRBGKLXJF9X4XUTWN91DOQJY9OBWHFL99KEU4FIZIF1K5C1EME3AXDEUDC6E4ZJ81PTJCZ4L4VHTTRUZ4EKK0NAFII3D31H4B4Z7WD' where id=71; -update noar tt set v0='4923FUZ9C8VB2SS9SMTKUEQSUCPJZ6BMZTZFUSOPYJTC2T2ULN27ETBZLFEFZWW7VQMA7VCSG2AUK8L6A8TDZLTJOMDK8K711AOUGXIPUHZ5K8T04HSHLNO24YR00ML2XFPKY189GFWKT5EJF8FL0TZEHJBQRSNDOI0J68GBH6XYG2U7T7MBJJRMRAAC3DDBU62M7PEOTA0HVZEUZQQ3AO5N3ED4LQJ1J7E1ELSD325MMGH4ORUU4OU454E3TFNPW' where id=72; -update noar ti set v0='4923FUZ9C8VB2SS9SMTKUEQSUCPJZ6BMZTZFUSOPYJTC2T2ULN27ETBZLFEFZWW7VQMA7VCSG2AUK8L6A8TDZLTJOMDK8K711AOUGXIPUHZ5K8T04HSHLNO24YR00ML2XFPKY189GFWKT5EJF8FL0TZEHJBQRSNDOI0J68GBH6XYG2U7T7MBJJRMRAAC3DDBU62M7PEOTA0HVZEUZQQ3AO5N3ED4LQJ1J7E1ELSD325MMGH4ORUU4OU454E3TFNPW' where id=72; -update noar tt set v1='B7VS1GQXUXDHDE6750REEMOYWEJ93J46HCF5TDBY8M18I7QXJ1Z6GIIWMG2G69DN2TS193N04XFFNLPJK04HK78MILVNVZWO2XQ8Z4V71TBKQT92T4RM00KM7F4D8L3UTH8W5PB28LCTQO9PEUBNXC779BX4ZIO2BJB6C0FMJ0WSNX18FVMQZ0Q4SYK6J6T13COUNIOXXSL3X9F41F2317W6F5EX746NSJS4YYP8K63DZFWD4B01Y3P6NGTK85VEZ' where id=72; -update noar ti set v1='B7VS1GQXUXDHDE6750REEMOYWEJ93J46HCF5TDBY8M18I7QXJ1Z6GIIWMG2G69DN2TS193N04XFFNLPJK04HK78MILVNVZWO2XQ8Z4V71TBKQT92T4RM00KM7F4D8L3UTH8W5PB28LCTQO9PEUBNXC779BX4ZIO2BJB6C0FMJ0WSNX18FVMQZ0Q4SYK6J6T13COUNIOXXSL3X9F41F2317W6F5EX746NSJS4YYP8K63DZFWD4B01Y3P6NGTK85VEZ' where id=72; -update noar tt set v2='S61LPEQUXN6S0KC9Z1W5QYATW6HZSBX9A15MTONV9MM06P4X29JVFRT9M9KI9Y6SROQC4UNWLDVRHWG4M0DIJASW8JJH3K81JVOUTP8WN2RTBI42XXSNM4LRIIOLNNGRD6GW44EJGUSYM6WGCTU6NERD42WI25YLT090KYIP4IWBLEF91Z2NQEVEOG67FUTLFII8YZ7OIO5F52R5QGHWX63SVILEPIKEZ6MOBRF692OI64Z3A8LLYXRCBG6G2R15Q' where id=72; -update noar ti set v2='S61LPEQUXN6S0KC9Z1W5QYATW6HZSBX9A15MTONV9MM06P4X29JVFRT9M9KI9Y6SROQC4UNWLDVRHWG4M0DIJASW8JJH3K81JVOUTP8WN2RTBI42XXSNM4LRIIOLNNGRD6GW44EJGUSYM6WGCTU6NERD42WI25YLT090KYIP4IWBLEF91Z2NQEVEOG67FUTLFII8YZ7OIO5F52R5QGHWX63SVILEPIKEZ6MOBRF692OI64Z3A8LLYXRCBG6G2R15Q' where id=72; -update noar tt set v3='KE8FRYTJ2OYB6WOW5AGK9JHM88CUEACNTHYQGJRJQCNYWF9FQ0GOGT9QIOGLTTYI37BBJ2VY2E1H8NII07NIN5AQZM0C18IA4ROV991DHHC0TM0NNQXF45XXSIFT1U1K3ZAQC5YRAGT7R5URPKSWDTLEMM411VW6Q8K8MFTDXJ8FYPUTCHRBMZ595EE8BL3PLGCZP06SS0RXW41XEWXQFN8QAGDJ1LJDGJ5YG8NZNPNSN8S9YP482ZLF6P926WSFU' where id=72; -update noar ti set v3='KE8FRYTJ2OYB6WOW5AGK9JHM88CUEACNTHYQGJRJQCNYWF9FQ0GOGT9QIOGLTTYI37BBJ2VY2E1H8NII07NIN5AQZM0C18IA4ROV991DHHC0TM0NNQXF45XXSIFT1U1K3ZAQC5YRAGT7R5URPKSWDTLEMM411VW6Q8K8MFTDXJ8FYPUTCHRBMZ595EE8BL3PLGCZP06SS0RXW41XEWXQFN8QAGDJ1LJDGJ5YG8NZNPNSN8S9YP482ZLF6P926WSFU' where id=72; -update noar tt set v0='9CB91B5WD7UMVUJQGVQTD49SCGF6WMV2I0CFXJR3APIWUPWNP8LSR2CY8OL84FBDSRP2MGMNBJ4P31LCXG2IC3ICVJPNM4P0HZQYYY1L5J9BDJOAL4GUS7JCFSZ4WTU53CL385XSK45G56JNU9E6MWHSODZYLZ5AJKVAKYUNUY9UGOMT4RE9K1J9CH1X8WHQQYXODL85IYJ2Z9I8ZE32C6R98O6FEHP06YB7DZBDSCOHS4OA31HEM1O12HC0DYBIC' where id=73; -update noar ti set v0='9CB91B5WD7UMVUJQGVQTD49SCGF6WMV2I0CFXJR3APIWUPWNP8LSR2CY8OL84FBDSRP2MGMNBJ4P31LCXG2IC3ICVJPNM4P0HZQYYY1L5J9BDJOAL4GUS7JCFSZ4WTU53CL385XSK45G56JNU9E6MWHSODZYLZ5AJKVAKYUNUY9UGOMT4RE9K1J9CH1X8WHQQYXODL85IYJ2Z9I8ZE32C6R98O6FEHP06YB7DZBDSCOHS4OA31HEM1O12HC0DYBIC' where id=73; -update noar tt set v1='S7CPPV8WQDPDQMB5RNVLBUJAKOVJBLST3TEX0MJWZRSDKW4SF2UVZGW9R8WB4C6CR8IOYE4C61X0QCFKGFCBYY5RGZ6XU4S9Q71ACMAUY7VKDJONUFELZY4JI56S8XXUWWNWC16FV3B4TD5TH5TBVNRFKO3Y2XM6VKRG888T2OH82TJ4N7910IPY9Y2GLZ274CV5ZGR23AXHVIBENR1PPHTSHILA9AYW2POKOK63JMQMVW2UD2GIG7452E121LVXP' where id=73; -update noar ti set v1='S7CPPV8WQDPDQMB5RNVLBUJAKOVJBLST3TEX0MJWZRSDKW4SF2UVZGW9R8WB4C6CR8IOYE4C61X0QCFKGFCBYY5RGZ6XU4S9Q71ACMAUY7VKDJONUFELZY4JI56S8XXUWWNWC16FV3B4TD5TH5TBVNRFKO3Y2XM6VKRG888T2OH82TJ4N7910IPY9Y2GLZ274CV5ZGR23AXHVIBENR1PPHTSHILA9AYW2POKOK63JMQMVW2UD2GIG7452E121LVXP' where id=73; -update noar tt set v2='3S8L7M742YLSQI65DUNEZDD5C771A435R9PDBHHR38AC1ZYMWG0OW6BOG94AIX3ATWJ055JF0X4NENH0CA4L6J0U1XGAQQN70O3LWLR57F7MMISEL41TV895SEC4CXOT4KSR5MBMHJL0FR88ASZWP2KW1RDWN4V9K5XGB0ES1PLVYCDZ45CZCOPP35UFZ3WMG614VUYG4JP7VX96DA6WRTSFQIBP3UAPHGOU05UC0SLZ7DYNPWHOMWEVI0OZI5V40' where id=73; -update noar ti set v2='3S8L7M742YLSQI65DUNEZDD5C771A435R9PDBHHR38AC1ZYMWG0OW6BOG94AIX3ATWJ055JF0X4NENH0CA4L6J0U1XGAQQN70O3LWLR57F7MMISEL41TV895SEC4CXOT4KSR5MBMHJL0FR88ASZWP2KW1RDWN4V9K5XGB0ES1PLVYCDZ45CZCOPP35UFZ3WMG614VUYG4JP7VX96DA6WRTSFQIBP3UAPHGOU05UC0SLZ7DYNPWHOMWEVI0OZI5V40' where id=73; -update noar tt set v3='4IFPJW2AGP7HSP6CEN4SLLL8XE9Y4UTBLDCOYCIBMK6ZI8WM3BGOO19ZT2LX4G79QMJH7TE7KOPYDR2PAO6APT3JIJ3OGNH85CTBAQZWOY1LXIMDPOG1OS5OZNKDU7SZTUSLETAHRE3VAZ5IAO493S5N8UOST4P2BM6XB92FDVW3C9WSZ9A4O2MOIH79TL4UPKF96HE7MVRRPC2A64ETW4GZO1MH2EPYGWHC1UTKZFJGEFHHUFM46YKA7B1AHZZD2' where id=73; -update noar ti set v3='4IFPJW2AGP7HSP6CEN4SLLL8XE9Y4UTBLDCOYCIBMK6ZI8WM3BGOO19ZT2LX4G79QMJH7TE7KOPYDR2PAO6APT3JIJ3OGNH85CTBAQZWOY1LXIMDPOG1OS5OZNKDU7SZTUSLETAHRE3VAZ5IAO493S5N8UOST4P2BM6XB92FDVW3C9WSZ9A4O2MOIH79TL4UPKF96HE7MVRRPC2A64ETW4GZO1MH2EPYGWHC1UTKZFJGEFHHUFM46YKA7B1AHZZD2' where id=73; -update noar tt set v0='4U6SRBJ8NTLWAPC4SDPZN3RYZ9YORA5VUTNZRJQ3FQKSYJAR1M1UK2FJJ8B1OMN40KVL43M24TSA7L1AR5A0XYNR6YMUDOC6THT5225G3J01YM5KYXU7BAN0K227SGQ3ZBKU3WMVIEFH9O14YCEEAGQ8WBW6IZSVIHOM0LVA8Y7QEZFWEEEFR7PFKFORQBXENJOCB433JZ3HSAIPZRC24S7W036J5ISPH9LDVP832MG1NY80OOV60URI9JMNGYID9' where id=74; -update noar ti set v0='4U6SRBJ8NTLWAPC4SDPZN3RYZ9YORA5VUTNZRJQ3FQKSYJAR1M1UK2FJJ8B1OMN40KVL43M24TSA7L1AR5A0XYNR6YMUDOC6THT5225G3J01YM5KYXU7BAN0K227SGQ3ZBKU3WMVIEFH9O14YCEEAGQ8WBW6IZSVIHOM0LVA8Y7QEZFWEEEFR7PFKFORQBXENJOCB433JZ3HSAIPZRC24S7W036J5ISPH9LDVP832MG1NY80OOV60URI9JMNGYID9' where id=74; -update noar tt set v1='SCY94S3SS1B716ZVXOMSQXIV84IAE60B4888EQGK9S6YVWIAK3ITNTA2YS14A1ZOOLSXNTO6PBVIKTWMCKEB8HS0T5GUZT07HJBEQUYT8GVSB79L70LZGRGY9VKK5Y8YQJ98W4XVTBN1B48C9C3X130LLONJA90FQION5E17K8KKEU7GJ8VXKA6GVLAB3G9XJ2NS8G5IKQKZUDTR9NX23NF738ZU6JC50B49RYZJC4JC2WT98OCAJUW46SCHCWJZX' where id=74; -update noar ti set v1='SCY94S3SS1B716ZVXOMSQXIV84IAE60B4888EQGK9S6YVWIAK3ITNTA2YS14A1ZOOLSXNTO6PBVIKTWMCKEB8HS0T5GUZT07HJBEQUYT8GVSB79L70LZGRGY9VKK5Y8YQJ98W4XVTBN1B48C9C3X130LLONJA90FQION5E17K8KKEU7GJ8VXKA6GVLAB3G9XJ2NS8G5IKQKZUDTR9NX23NF738ZU6JC50B49RYZJC4JC2WT98OCAJUW46SCHCWJZX' where id=74; -update noar tt set v2='3MOJPPCWMCY7LZX1V6N08LUS6P6IF0O2G2B0IAWFYV7VSZAAZ4L4RDOV28ENC4J6IBBS0P7WMBPLT1UNJNO2YNESJC20K1T2V039W6DB4U9AA95A3HROO8HCLVDHI1X5TDLJLWYKYFF05G5GH6JUMPNAHYR0QTCV2NK33N1TIWM2KK21ENP7NKESYWGUI66SDGIJ7R08PIKV2GFT2SXWISXE61UWPDBLO1MWKLA3DU9OUT4WDNEBDK8CX6EUPDVTH' where id=74; -update noar ti set v2='3MOJPPCWMCY7LZX1V6N08LUS6P6IF0O2G2B0IAWFYV7VSZAAZ4L4RDOV28ENC4J6IBBS0P7WMBPLT1UNJNO2YNESJC20K1T2V039W6DB4U9AA95A3HROO8HCLVDHI1X5TDLJLWYKYFF05G5GH6JUMPNAHYR0QTCV2NK33N1TIWM2KK21ENP7NKESYWGUI66SDGIJ7R08PIKV2GFT2SXWISXE61UWPDBLO1MWKLA3DU9OUT4WDNEBDK8CX6EUPDVTH' where id=74; -update noar tt set v3='2MN0GKNKCTDHL4JG1UNE5BGPMWHKFP3SFIVF787RKBYIYM4V42QL95CZK3ZMDNGL22XWELJ9BRARV4E26FA9ELLLL8FLPS2BL746WO8ZHKFPHQAFHP3N921BQY2Y7B5QH99R6SQ6KG7XD5V25CB8AVBU443FEHB4IZOUSQTODXVYZAQDILSXV440GHY7IJ09FQ1RUBULQPG56JJ7X6JXDN7S1R5ZSRUC368RB27S342XS7OQM07VWM99BRYXIKURK' where id=74; -update noar ti set v3='2MN0GKNKCTDHL4JG1UNE5BGPMWHKFP3SFIVF787RKBYIYM4V42QL95CZK3ZMDNGL22XWELJ9BRARV4E26FA9ELLLL8FLPS2BL746WO8ZHKFPHQAFHP3N921BQY2Y7B5QH99R6SQ6KG7XD5V25CB8AVBU443FEHB4IZOUSQTODXVYZAQDILSXV440GHY7IJ09FQ1RUBULQPG56JJ7X6JXDN7S1R5ZSRUC368RB27S342XS7OQM07VWM99BRYXIKURK' where id=74; -update noar tt set v0='6FCV3W9RQ4B1P1SNF745MID6YK0F7WDBWW25H2UR539DVV2PQTICFZ3C9QRFZ7ZBNTI2UVVQCCYVZK4VSX7KOULFZEAF0229LMKU9YEYGXW2ZKC0G6IBPPXBH35OATNOZKKGOFWRGJGBQKPUDUZKA83L9A9WLEIUNSVJ7DQZXUYWB4XRLAIDABG7IIXI6TMBG5IC27J3U9DL8GF8M5C8Q57JV222KGMXJVQKVHIIHMOMQA46GOG7EHHPAUINUVX8B' where id=75; -update noar ti set v0='6FCV3W9RQ4B1P1SNF745MID6YK0F7WDBWW25H2UR539DVV2PQTICFZ3C9QRFZ7ZBNTI2UVVQCCYVZK4VSX7KOULFZEAF0229LMKU9YEYGXW2ZKC0G6IBPPXBH35OATNOZKKGOFWRGJGBQKPUDUZKA83L9A9WLEIUNSVJ7DQZXUYWB4XRLAIDABG7IIXI6TMBG5IC27J3U9DL8GF8M5C8Q57JV222KGMXJVQKVHIIHMOMQA46GOG7EHHPAUINUVX8B' where id=75; -update noar tt set v1='VR4NED14HX9SFOJ6RS62SIRCHHMQO3F4DS1GHLTK1FLBVMJXSIIOD3V34SKQ2YQ8L42A9YV5B4Z1P20IFZ4S2BLLN1NOEH9OCHU5DIAKL34M997K9TU6EZKHNIMBS9OJKTRCP7LJTZZCTVA19GUNQUTJOZCAWEOM8665SC7QKLUM7T76K52DX1ITTPE90L9F00V7IZM54QP6AGZEH6K9W9QYX3MD13TIZAONM333SH8WSZ8Y1GGIHRMKJOSHQBPST' where id=75; -update noar ti set v1='VR4NED14HX9SFOJ6RS62SIRCHHMQO3F4DS1GHLTK1FLBVMJXSIIOD3V34SKQ2YQ8L42A9YV5B4Z1P20IFZ4S2BLLN1NOEH9OCHU5DIAKL34M997K9TU6EZKHNIMBS9OJKTRCP7LJTZZCTVA19GUNQUTJOZCAWEOM8665SC7QKLUM7T76K52DX1ITTPE90L9F00V7IZM54QP6AGZEH6K9W9QYX3MD13TIZAONM333SH8WSZ8Y1GGIHRMKJOSHQBPST' where id=75; -update noar tt set v2='K44JPUE83N81GY0NRA8JTL4L7RVB36Y1VSSA6FW1525WMM6UX5Z3GQF6EJCD31YVWOX3MBPJLXPE7JOZZ4S9TP2Z2Q9BJY1WJEKGEAKGE40A849FADDQOYMU8UU515ACU1KGHBF4FBBFR96T4ZFZXWGBKQHBZU6U34RWRZ5YR12UMC7LGIECJAS0UK774QOLMN97XVATXTPJGCOR0U7LUH4GUP2ZHZ37QMCH3Z7E91HPP5S8QXWF3TCD67HS7T1EZ' where id=75; -update noar ti set v2='K44JPUE83N81GY0NRA8JTL4L7RVB36Y1VSSA6FW1525WMM6UX5Z3GQF6EJCD31YVWOX3MBPJLXPE7JOZZ4S9TP2Z2Q9BJY1WJEKGEAKGE40A849FADDQOYMU8UU515ACU1KGHBF4FBBFR96T4ZFZXWGBKQHBZU6U34RWRZ5YR12UMC7LGIECJAS0UK774QOLMN97XVATXTPJGCOR0U7LUH4GUP2ZHZ37QMCH3Z7E91HPP5S8QXWF3TCD67HS7T1EZ' where id=75; -update noar tt set v3='HKHJA63CY8D34IU6BFOOG21VORX8C7M672KRPN0C1TLSDC38MGXI0X1UKV44671YDMLLN3I1A693ZWIQU1D2QFK5QG9LTW723P6OP18YO4NNBNXP66QI61PC27KKYBK83SICHFNO7K37JF1V5NTHTDCTPT7T7JND1R1NEOWUQ0U4NXLLIINLQWK284K74U34OD2R68V2M0OXV123NWAGWE5XWOYU3GU1CH3K5W13UGW2N15G0QU8L7BOPSOQ6Z7I7' where id=75; -update noar ti set v3='HKHJA63CY8D34IU6BFOOG21VORX8C7M672KRPN0C1TLSDC38MGXI0X1UKV44671YDMLLN3I1A693ZWIQU1D2QFK5QG9LTW723P6OP18YO4NNBNXP66QI61PC27KKYBK83SICHFNO7K37JF1V5NTHTDCTPT7T7JND1R1NEOWUQ0U4NXLLIINLQWK284K74U34OD2R68V2M0OXV123NWAGWE5XWOYU3GU1CH3K5W13UGW2N15G0QU8L7BOPSOQ6Z7I7' where id=75; -update noar tt set v0='1UH6NRKWMVCGYAF3R4Q65BR4JOANCQYV06XPL2FAVYRAWXKFCEBFZ3LUSDSZPHS06KDNU3Z7ZGD0QLRBVVGBVI877CJ4AI8MN9I82HBSYJ86PJV83M734KX6YGUOARKV4MLD5LRMPGFNH4V1ATJQQY5BNVOPMUNGPUVH7XK0V51QNJX390ZHX5J6NY0LJ9NTV2HH6NSD4HAEC4OAFJGRKYYJX6NXL9P1FGY25810IGH3LUVSTNSL91NBCHDG79IFF' where id=76; -update noar ti set v0='1UH6NRKWMVCGYAF3R4Q65BR4JOANCQYV06XPL2FAVYRAWXKFCEBFZ3LUSDSZPHS06KDNU3Z7ZGD0QLRBVVGBVI877CJ4AI8MN9I82HBSYJ86PJV83M734KX6YGUOARKV4MLD5LRMPGFNH4V1ATJQQY5BNVOPMUNGPUVH7XK0V51QNJX390ZHX5J6NY0LJ9NTV2HH6NSD4HAEC4OAFJGRKYYJX6NXL9P1FGY25810IGH3LUVSTNSL91NBCHDG79IFF' where id=76; -update noar tt set v1='E8R00BKNSPVOV9O06UFQKV6BRY8LLJJO7KCF9OAZQIMLM4VZ6YL8SNW7R5BY1Y737NFD52OKXEFIA1O43XJ6Q24MIHJNQGG69WIN9Z5NAYKU552T15P7D7N56NR55KLAIM1V9VKRQJLXUJLB5L55SDDGFHAQO5MGAYFKIQ26IQ0YD4QEELVWL76DUDG4PNGHT1N6TASQ0LJPFNFU56UAEDQM6DHKN6M4H8XQPTXCKN9AG0XRBMGY4FW3DZ0AUZXXH' where id=76; -update noar ti set v1='E8R00BKNSPVOV9O06UFQKV6BRY8LLJJO7KCF9OAZQIMLM4VZ6YL8SNW7R5BY1Y737NFD52OKXEFIA1O43XJ6Q24MIHJNQGG69WIN9Z5NAYKU552T15P7D7N56NR55KLAIM1V9VKRQJLXUJLB5L55SDDGFHAQO5MGAYFKIQ26IQ0YD4QEELVWL76DUDG4PNGHT1N6TASQ0LJPFNFU56UAEDQM6DHKN6M4H8XQPTXCKN9AG0XRBMGY4FW3DZ0AUZXXH' where id=76; -update noar tt set v2='K1HD98641FDCHEWHOC1Q43L1EQHYILBBTCPHK3DJYWY7LPG9BMK48RCZFZPZUSGLETR7XFNC5KKK74MZ2FBJVLDNWUD966KG7VSA46D2F0YL3O0NERYCQJF0J8CH8828ILH812JBG7IW7VNE7PREB2MQFP2SFSQRRWQ4SKWPWNWR98ODGDBD4P4SARPEH77SDOEJ0BHMX1NOZJD3KULBJ7UGXSWLQ6DHENTVXI1N7RGRR6P6NHPV58QYZDU3VLUV8' where id=76; -update noar ti set v2='K1HD98641FDCHEWHOC1Q43L1EQHYILBBTCPHK3DJYWY7LPG9BMK48RCZFZPZUSGLETR7XFNC5KKK74MZ2FBJVLDNWUD966KG7VSA46D2F0YL3O0NERYCQJF0J8CH8828ILH812JBG7IW7VNE7PREB2MQFP2SFSQRRWQ4SKWPWNWR98ODGDBD4P4SARPEH77SDOEJ0BHMX1NOZJD3KULBJ7UGXSWLQ6DHENTVXI1N7RGRR6P6NHPV58QYZDU3VLUV8' where id=76; -update noar tt set v3='7M9XV1GQQJN22D12Z4QU3NVE33X5TRK20DA7ZK6RXOAYP62JWIU0YQWZCFKZN6EJCJ875XIF7YHOE3B3S2CH4UMLAB6KPDVLPNS6T9R82L9D3LEJPBB178YCV1BFDPQGNHYMKBN7SDGYQG1EZS16P36RJ8JTRXX5KBQZH0EGK8MCXLUMLGNB4RXE4W56PPEW5H5L2LSW3KCZQ1XD1SF2EDBUH90O8CIWTFTZTMWZQIK7HZ07SQQNOQ39UMACKHZ7B' where id=76; -update noar ti set v3='7M9XV1GQQJN22D12Z4QU3NVE33X5TRK20DA7ZK6RXOAYP62JWIU0YQWZCFKZN6EJCJ875XIF7YHOE3B3S2CH4UMLAB6KPDVLPNS6T9R82L9D3LEJPBB178YCV1BFDPQGNHYMKBN7SDGYQG1EZS16P36RJ8JTRXX5KBQZH0EGK8MCXLUMLGNB4RXE4W56PPEW5H5L2LSW3KCZQ1XD1SF2EDBUH90O8CIWTFTZTMWZQIK7HZ07SQQNOQ39UMACKHZ7B' where id=76; -update noar tt set v0='Y0X21K01JOROS64RCVXJIZ5P915919548PNC48QXQV1JYSPX1NKECQ8A27ZXPHF72Y18HEFUPSQGZKY2IASHE6A2XAY32UG5Q5EP61RHRWF0255WKEYX1H8FL30NV3D6TK02L03GYK0KDZ5UFUQ795KZT6ZTB5BDLBDBPKZ45TZU26016JEYNLCT71TVXXOFH9Q5WX8B341T215D8GAQAQ6L0F86X7STD0G6G8KWZOBVI7D8U0WQHS26OVMVEAPHY' where id=77; -update noar ti set v0='Y0X21K01JOROS64RCVXJIZ5P915919548PNC48QXQV1JYSPX1NKECQ8A27ZXPHF72Y18HEFUPSQGZKY2IASHE6A2XAY32UG5Q5EP61RHRWF0255WKEYX1H8FL30NV3D6TK02L03GYK0KDZ5UFUQ795KZT6ZTB5BDLBDBPKZ45TZU26016JEYNLCT71TVXXOFH9Q5WX8B341T215D8GAQAQ6L0F86X7STD0G6G8KWZOBVI7D8U0WQHS26OVMVEAPHY' where id=77; -update noar tt set v1='3UZNHPJWOTPKIOFVBGEDE3VS34IYJTKA3W1VXYQ4F4F68VR8M7YIE0BSTNR0D3M72S6NYMZWMKK4XBOXLQJXRT4S0OHDENV40ZGIUCQM1RCJOWP11VJ9UUKT10J6PGH76JM60VCKJ0UJO81T0ZKCKAQQ6TVQMZ6AWOEFKKUFOPB0TKO8O3V47TYN6AWBGQDLK85PZ8QC8WBRBBF0504QO8ORODEYVJUEZBKUNEMEPL8I3N4P15XEZV4UUKC13SFFD' where id=77; -update noar ti set v1='3UZNHPJWOTPKIOFVBGEDE3VS34IYJTKA3W1VXYQ4F4F68VR8M7YIE0BSTNR0D3M72S6NYMZWMKK4XBOXLQJXRT4S0OHDENV40ZGIUCQM1RCJOWP11VJ9UUKT10J6PGH76JM60VCKJ0UJO81T0ZKCKAQQ6TVQMZ6AWOEFKKUFOPB0TKO8O3V47TYN6AWBGQDLK85PZ8QC8WBRBBF0504QO8ORODEYVJUEZBKUNEMEPL8I3N4P15XEZV4UUKC13SFFD' where id=77; -update noar tt set v2='BK0XLWGMSO3G9PUXI2ALOWONIRS4OYW77WJ0VQNHWUVUF2ZFABNZP3LLVA3ELIP3GOX4GL9Y5O0DN2J8SN7YQHGF9FB6ZO6U865WPARKOW01VXAHMRFDQTKH071J5WRB0HAK4SFGJWXIJNBB4G03NRVBUMPVKLZHZ4E8UKZ8AI088HCZPHWKDY6VEK27OECSEYFQMU10IK76922K6BKQISJ78COQJLDZHYHNI1VWBKEW6X4Z1Q2WRJKWYYU4FA9ZG' where id=77; -update noar ti set v2='BK0XLWGMSO3G9PUXI2ALOWONIRS4OYW77WJ0VQNHWUVUF2ZFABNZP3LLVA3ELIP3GOX4GL9Y5O0DN2J8SN7YQHGF9FB6ZO6U865WPARKOW01VXAHMRFDQTKH071J5WRB0HAK4SFGJWXIJNBB4G03NRVBUMPVKLZHZ4E8UKZ8AI088HCZPHWKDY6VEK27OECSEYFQMU10IK76922K6BKQISJ78COQJLDZHYHNI1VWBKEW6X4Z1Q2WRJKWYYU4FA9ZG' where id=77; -update noar tt set v3='PBYBVDSMU71C3KRULCTZ3MESIFK15Y1X3CYOOV9E3ZHJQRT4YPQJX3XD9F9SGI310NV7CGDL2U9U19A2WI11JORKYW5K6S3VV3TAJJ0M2KODAVRE0B5LB8UMUE17P9L1283C1SO0V1XO5ZFIFSB37YY8FEJJCCD0CO242580XG2GMB9U1C8XQ5X5TPZ18FUMO0L66KTH3WRMC5CGJ05SM3RXUA85Q528Q6YU8URQLWZ6EOXZ5E69AHT7M2OCLOP0V' where id=77; -update noar ti set v3='PBYBVDSMU71C3KRULCTZ3MESIFK15Y1X3CYOOV9E3ZHJQRT4YPQJX3XD9F9SGI310NV7CGDL2U9U19A2WI11JORKYW5K6S3VV3TAJJ0M2KODAVRE0B5LB8UMUE17P9L1283C1SO0V1XO5ZFIFSB37YY8FEJJCCD0CO242580XG2GMB9U1C8XQ5X5TPZ18FUMO0L66KTH3WRMC5CGJ05SM3RXUA85Q528Q6YU8URQLWZ6EOXZ5E69AHT7M2OCLOP0V' where id=77; -update noar tt set v0='XZZXMF5AN6Z9244CI69NPBUJ8UTW7NCHOIU3SNQYZX67PRRKV22QLOUVN3EVGVY9TDYDROIX6W2P43PP07KZU2EGS4RRIZWBRAD7JCRGG435MDI7GXC3N7UPDYBYFS0MOL15KFFRZPPGG3T9U19GSZ31DYMEXADQ18K4WFOH3DW20MXEQV59V8PRDXY4800SYJH0JB5CP7RUTMPALPIJS6ACBCRKMEQ7AY4V65JFUWYYF2DGFVJSVEA3V32NVCSI8' where id=78; -update noar ti set v0='XZZXMF5AN6Z9244CI69NPBUJ8UTW7NCHOIU3SNQYZX67PRRKV22QLOUVN3EVGVY9TDYDROIX6W2P43PP07KZU2EGS4RRIZWBRAD7JCRGG435MDI7GXC3N7UPDYBYFS0MOL15KFFRZPPGG3T9U19GSZ31DYMEXADQ18K4WFOH3DW20MXEQV59V8PRDXY4800SYJH0JB5CP7RUTMPALPIJS6ACBCRKMEQ7AY4V65JFUWYYF2DGFVJSVEA3V32NVCSI8' where id=78; -update noar tt set v1='Q50TIDU0O84HE11QSQN4L83ASFGW5XCWM1MC38WZH218A5QN4AKUP4OLHB0HV096HRPQDB7AV2JKKAKDLF46MMKGLSZGNVT79QFPQF0M0R43WXAP26OXGQCHPUM479XZIEYA1A2K2O93W3YWMRD02Z0F5R2D3CPJLWREPPIIVKAJULI9PIH53HCDLMI88YZX1US6ZB5SR4IE68DD7R6N3EGIBG7MU9NECW9HZ39WJKBM8AQF8K7DJ29GULOX99OJG' where id=78; -update noar ti set v1='Q50TIDU0O84HE11QSQN4L83ASFGW5XCWM1MC38WZH218A5QN4AKUP4OLHB0HV096HRPQDB7AV2JKKAKDLF46MMKGLSZGNVT79QFPQF0M0R43WXAP26OXGQCHPUM479XZIEYA1A2K2O93W3YWMRD02Z0F5R2D3CPJLWREPPIIVKAJULI9PIH53HCDLMI88YZX1US6ZB5SR4IE68DD7R6N3EGIBG7MU9NECW9HZ39WJKBM8AQF8K7DJ29GULOX99OJG' where id=78; -update noar tt set v2='ZX31YBDENGT4ZUZ3M15EHDQ0H4QJYFGZ28UYD1SI2OEW8WTGDXO0US62RRZWTDY9CWP1308P07KTKS6N3NH8J6M9XNPY3U85GTP8IA8BHFF6MHRKD34RJ9CNG523CXSICUHREMOBYTNDFICPLD3Q23WF0LUOCXOT0BTLZO0LHHX5MU52RALZ2B03NDDN7C1F3X0YAZMPT174IORNAW3IAQB9YG9MZOO1HTD3F1GOMO9XNKECX48885PPMF0L8Z2OQ' where id=78; -update noar ti set v2='ZX31YBDENGT4ZUZ3M15EHDQ0H4QJYFGZ28UYD1SI2OEW8WTGDXO0US62RRZWTDY9CWP1308P07KTKS6N3NH8J6M9XNPY3U85GTP8IA8BHFF6MHRKD34RJ9CNG523CXSICUHREMOBYTNDFICPLD3Q23WF0LUOCXOT0BTLZO0LHHX5MU52RALZ2B03NDDN7C1F3X0YAZMPT174IORNAW3IAQB9YG9MZOO1HTD3F1GOMO9XNKECX48885PPMF0L8Z2OQ' where id=78; -update noar tt set v3='GXYG7808ZF0F88QWX1ZBH44CCAC8GDIOWDUUVWZYSDCZSDGH5LCQZIJZEJLVISFPPJ7KPBOJQOQ6658CU89HLQC9L4ZEAW08OYTTYZFWMNWR8X1E8CFKRXRTRI4U6KTSHNRDOMQYMKD1JWNYXTX08ZO7ANY3CJLBWP6I4JIH5ZTVAGCJQIN2ZRXFJOUKTHY7PEF7QJ259G3DSIWOAMOYACR9FD9PL6OL2YYPH0W3F4A6BJLAP7FTZEDXFXPYEIQTN' where id=78; -update noar ti set v3='GXYG7808ZF0F88QWX1ZBH44CCAC8GDIOWDUUVWZYSDCZSDGH5LCQZIJZEJLVISFPPJ7KPBOJQOQ6658CU89HLQC9L4ZEAW08OYTTYZFWMNWR8X1E8CFKRXRTRI4U6KTSHNRDOMQYMKD1JWNYXTX08ZO7ANY3CJLBWP6I4JIH5ZTVAGCJQIN2ZRXFJOUKTHY7PEF7QJ259G3DSIWOAMOYACR9FD9PL6OL2YYPH0W3F4A6BJLAP7FTZEDXFXPYEIQTN' where id=78; -update noar tt set v0='PMJHK06HYCSFCNMRFGWMWU44Q1BW8YQ11GHJW88ADUGZ8JQQKFNQH5QKMC1TAVE2AI4U409H0DV2OSD051332FEMN2K3J6E6O7BVKH3R5NGN6WCR8GUXF9QNUYE9QCY1Y5QCU4R211JGD1NIP2GPQINWEV354V2GAVXC0WUPBSZ0YRLC4WW2ADIGQQMY8PK5U7WX4TJ59KXAKNWSNN1JJWVBQHM4O9SNHMN52UW0J1YDTP6KCFA6DB6QZVFAZUPVN' where id=79; -update noar ti set v0='PMJHK06HYCSFCNMRFGWMWU44Q1BW8YQ11GHJW88ADUGZ8JQQKFNQH5QKMC1TAVE2AI4U409H0DV2OSD051332FEMN2K3J6E6O7BVKH3R5NGN6WCR8GUXF9QNUYE9QCY1Y5QCU4R211JGD1NIP2GPQINWEV354V2GAVXC0WUPBSZ0YRLC4WW2ADIGQQMY8PK5U7WX4TJ59KXAKNWSNN1JJWVBQHM4O9SNHMN52UW0J1YDTP6KCFA6DB6QZVFAZUPVN' where id=79; -update noar tt set v1='ANZCL9NTECQ337BYT0I9ZQW2XLBGK1OMIU8CPE3JIIX4ITETBTBLI432NBNXQ4ZS7I92JAFUUTGULJ1I5FMSTX07IUXDMM529ZSIQYYQKXGG9K6U036KEYAD21S6P2CSLAICAAWYA8GVRMZNCWTLP1JFTSHXVM1RPOV184WA698ON67GWKE9VUB2XFE69OA0A6M0ZGIVUPT4OD7J6HLIJCKK3ED2LS2PICTBG23UO5S3NCYEKDNMWIIVP5PZRBY0K' where id=79; -update noar ti set v1='ANZCL9NTECQ337BYT0I9ZQW2XLBGK1OMIU8CPE3JIIX4ITETBTBLI432NBNXQ4ZS7I92JAFUUTGULJ1I5FMSTX07IUXDMM529ZSIQYYQKXGG9K6U036KEYAD21S6P2CSLAICAAWYA8GVRMZNCWTLP1JFTSHXVM1RPOV184WA698ON67GWKE9VUB2XFE69OA0A6M0ZGIVUPT4OD7J6HLIJCKK3ED2LS2PICTBG23UO5S3NCYEKDNMWIIVP5PZRBY0K' where id=79; -update noar tt set v2='ERC73LHB2CVEY9C5416UXYTRMK7L5STH2Q9CQHRYD7CQKKG2QQSZDRXJ16ELIR8W73VB5HO15G93XO4MFB52IUJUBT8V4LGQN9B8ABGR26RUYSRPL73OOSTV7W2HWZABQ8DEQ3B3TZULKZ2J7MOV2VMKQKUFBJEOWV9IRXXO28GRAMY1M8Q9G0CX4FZE4D5J1WXWA1W0AG4YLTOQ1JR3XAMU9MXOZ7NH295DAYUL95N4RIHVCPT3PVR2959H1W7SY' where id=79; -update noar ti set v2='ERC73LHB2CVEY9C5416UXYTRMK7L5STH2Q9CQHRYD7CQKKG2QQSZDRXJ16ELIR8W73VB5HO15G93XO4MFB52IUJUBT8V4LGQN9B8ABGR26RUYSRPL73OOSTV7W2HWZABQ8DEQ3B3TZULKZ2J7MOV2VMKQKUFBJEOWV9IRXXO28GRAMY1M8Q9G0CX4FZE4D5J1WXWA1W0AG4YLTOQ1JR3XAMU9MXOZ7NH295DAYUL95N4RIHVCPT3PVR2959H1W7SY' where id=79; -update noar tt set v3='4I4JFAAGMW4T3BM9YUVER5IZ6U9U1C9079H6S360DJ96S2ES8HY3ERN7LUB6JF737F6UWKIYRHNMFLCB8GM3X8L9PNENBEA6UGX3509HB5OYZCW4LE49JNJX0NK02TJHUH79YQSO6DVBBPXNFMRPJ0B68FF6HZIE18EC502QLPVKLM4RD18PPXCBP9ONOPFFFCX6LTKNA19T47GM7KUNFSN6PCUTT6CHINZOUJMHIHRTZW2OOVWYB5YPKJSODEERV' where id=79; -update noar ti set v3='4I4JFAAGMW4T3BM9YUVER5IZ6U9U1C9079H6S360DJ96S2ES8HY3ERN7LUB6JF737F6UWKIYRHNMFLCB8GM3X8L9PNENBEA6UGX3509HB5OYZCW4LE49JNJX0NK02TJHUH79YQSO6DVBBPXNFMRPJ0B68FF6HZIE18EC502QLPVKLM4RD18PPXCBP9ONOPFFFCX6LTKNA19T47GM7KUNFSN6PCUTT6CHINZOUJMHIHRTZW2OOVWYB5YPKJSODEERV' where id=79; -update noar tt set v0='OGE1PNX6W81XKL4S9J9EM8U3BZRE3ZJQ2V2BGONQ3I5RYG31H4DRLZ233WZ28UUH1KYOH95KUCC3EE78CX3A908SAM25AEIBWAWOY8I810IO4PGV6DAWPDFNXHJZUMXFK7GQKUAIKZK60C7C1MR295WWAQCBS8P9156WK1FA724FZ0ECYMPICO37ALT7QHAD1E27Z3WF6GJ9HD3GYZPDVMMT3TDBXH4KVCF5RY6ZQTRSFU9O3S9APGV4YZX15E9CT' where id=80; -update noar ti set v0='OGE1PNX6W81XKL4S9J9EM8U3BZRE3ZJQ2V2BGONQ3I5RYG31H4DRLZ233WZ28UUH1KYOH95KUCC3EE78CX3A908SAM25AEIBWAWOY8I810IO4PGV6DAWPDFNXHJZUMXFK7GQKUAIKZK60C7C1MR295WWAQCBS8P9156WK1FA724FZ0ECYMPICO37ALT7QHAD1E27Z3WF6GJ9HD3GYZPDVMMT3TDBXH4KVCF5RY6ZQTRSFU9O3S9APGV4YZX15E9CT' where id=80; -update noar tt set v1='XAAQGPLKVSALYLCKCRXFLKQEV8E4R671MNWV1J3TF21H7LVUCK4I94P6JW1SD9A8AETHG4DA1WC46V7WOECUUC8DTKBYJWVY3456N191V2U5PKLDN22P0TE6DFHX6JR0WKDE91JY6ZI6BLFXBJYY2H4ZZQLYMWGOPLGPZ2CLBCBVWYZF3I0WLSDX48U2LF453UYXR6LB35D2DXXDD0TBAAGJQF3XCX3C2A023DELGQQFNIG15VTW7XTDI4IAFH08H' where id=80; -update noar ti set v1='XAAQGPLKVSALYLCKCRXFLKQEV8E4R671MNWV1J3TF21H7LVUCK4I94P6JW1SD9A8AETHG4DA1WC46V7WOECUUC8DTKBYJWVY3456N191V2U5PKLDN22P0TE6DFHX6JR0WKDE91JY6ZI6BLFXBJYY2H4ZZQLYMWGOPLGPZ2CLBCBVWYZF3I0WLSDX48U2LF453UYXR6LB35D2DXXDD0TBAAGJQF3XCX3C2A023DELGQQFNIG15VTW7XTDI4IAFH08H' where id=80; -update noar tt set v2='3L080BAQAUV1E5NDE673QQ57Q2RFIMNSPGDJRJHV2U7NJ67QJ6NDBKFOIF4WEOUVBOZ5MGDAG8A7KS0SP83WWKPYEMALJ704N66IZLSWL27CUMEWG1HXOK1LYIJFH2VHD719WDTV9BXG1GCSDIUUPK0LN5T5EPXDM5K4BZJG7YH5PLTOPZCO8TKB7TIDCWBQJNBGOH7IDEJTHJTNUK0QAQ0OFTWXU41NDGDW8W2QG3KX6MY6QV63UXJTLEI0EJ6KY' where id=80; -update noar ti set v2='3L080BAQAUV1E5NDE673QQ57Q2RFIMNSPGDJRJHV2U7NJ67QJ6NDBKFOIF4WEOUVBOZ5MGDAG8A7KS0SP83WWKPYEMALJ704N66IZLSWL27CUMEWG1HXOK1LYIJFH2VHD719WDTV9BXG1GCSDIUUPK0LN5T5EPXDM5K4BZJG7YH5PLTOPZCO8TKB7TIDCWBQJNBGOH7IDEJTHJTNUK0QAQ0OFTWXU41NDGDW8W2QG3KX6MY6QV63UXJTLEI0EJ6KY' where id=80; -update noar tt set v3='XOPCY9TJ5PBMNYCRPGISOJ1E1Z5PM55QBCN2ER3MEAMP31RS2TTGFR8L7WLR6EMVQ0GY5PXFPRGZG2QWHGLJ4WV9ULB2YAYM9TK9P387LH6SMCMXB9ZVQ525GI2C13FUL58QKSHALKSRKLP47NZNT4Y3YGSYUNM5IFIFSN4ZIYLMJ060GMIW0HNOW0PVVDNQQWRI5K9CUXREFP6ENRXBQUEFLZGSBHXOX5NXES3OG4W4QN87UF8TOOWIZHUM3L4K1' where id=80; -update noar ti set v3='XOPCY9TJ5PBMNYCRPGISOJ1E1Z5PM55QBCN2ER3MEAMP31RS2TTGFR8L7WLR6EMVQ0GY5PXFPRGZG2QWHGLJ4WV9ULB2YAYM9TK9P387LH6SMCMXB9ZVQ525GI2C13FUL58QKSHALKSRKLP47NZNT4Y3YGSYUNM5IFIFSN4ZIYLMJ060GMIW0HNOW0PVVDNQQWRI5K9CUXREFP6ENRXBQUEFLZGSBHXOX5NXES3OG4W4QN87UF8TOOWIZHUM3L4K1' where id=80; -update noar tt set v0='HVKWOFNPTF1XMCLUA128Z0FL6MS60M2AUTQ3QLM4QH4VRELRLKZQTX8UW93T26WJUSAL9936LRKCUIMS8D500DEP9WFJUOJ6KFF7IH1FCT0YTIRUUEOCCJD4FYX70D89BT3HXBDV7IFHRMRHM7GQAUD1KJGKQ0SLPOFKS2Z0PCRRSZ9XYW21CZ82ZAFCCWTT5CNWA41QU31F7EVA27E2WNJM05WC96LMAU5V0KL89IFGRNE67NPVHQSOGVPCOCDS8' where id=81; -update noar ti set v0='HVKWOFNPTF1XMCLUA128Z0FL6MS60M2AUTQ3QLM4QH4VRELRLKZQTX8UW93T26WJUSAL9936LRKCUIMS8D500DEP9WFJUOJ6KFF7IH1FCT0YTIRUUEOCCJD4FYX70D89BT3HXBDV7IFHRMRHM7GQAUD1KJGKQ0SLPOFKS2Z0PCRRSZ9XYW21CZ82ZAFCCWTT5CNWA41QU31F7EVA27E2WNJM05WC96LMAU5V0KL89IFGRNE67NPVHQSOGVPCOCDS8' where id=81; -update noar tt set v1='GNOOCOB7KGE3IX7P29O9OPRXYYEWN6JEC2RZ79BY87753GSDM4NCODWAX7FQI1YQI8BGDFF93Y50USRWZGGBHCSCKHF62NUNQC48B5YDX9BDEFIODJDXRESB7H9UC54NUYEPK99B0TWI52CIY4I6N5AK10HZDD5S6HSERVS3KMVJR3MAATX05SN4WQRRBWDP9B2ZTEO957LXKKCMW6D7M09MG3GHR3L2K6XNAVRFN0AFH1W4TJ140426UVALCPDO8' where id=81; -update noar ti set v1='GNOOCOB7KGE3IX7P29O9OPRXYYEWN6JEC2RZ79BY87753GSDM4NCODWAX7FQI1YQI8BGDFF93Y50USRWZGGBHCSCKHF62NUNQC48B5YDX9BDEFIODJDXRESB7H9UC54NUYEPK99B0TWI52CIY4I6N5AK10HZDD5S6HSERVS3KMVJR3MAATX05SN4WQRRBWDP9B2ZTEO957LXKKCMW6D7M09MG3GHR3L2K6XNAVRFN0AFH1W4TJ140426UVALCPDO8' where id=81; -update noar tt set v2='WYJ9Z0PH4GMGW3Q8HA0M8LJTWEL32CELY7PRWFHUZGN22LXS4YP7OPG39Q056DWRRDTEINCDGV5DDEV7V0V37CSH3L90I5LFZ5QPCSYKHZNMSF1F3C5FYC3I2QBD5GJLRJYMWCYQRH9AADH9K3MF7PX582SQQISFU5X8OF1JLYZNABO0RWNP1TID9FOSV01ZXEL7A2EZGBL6H56RGA0BGC4I7EI504VAAWYHW7PDSMPZTRM2UXNKC765U1DAD6JQ6' where id=81; -update noar ti set v2='WYJ9Z0PH4GMGW3Q8HA0M8LJTWEL32CELY7PRWFHUZGN22LXS4YP7OPG39Q056DWRRDTEINCDGV5DDEV7V0V37CSH3L90I5LFZ5QPCSYKHZNMSF1F3C5FYC3I2QBD5GJLRJYMWCYQRH9AADH9K3MF7PX582SQQISFU5X8OF1JLYZNABO0RWNP1TID9FOSV01ZXEL7A2EZGBL6H56RGA0BGC4I7EI504VAAWYHW7PDSMPZTRM2UXNKC765U1DAD6JQ6' where id=81; -update noar tt set v3='DS8WQ78VGLXXIWT4BR4KORNH3PN74C47T4Z4H9YE8QS4W71JA5VGS1M9YBLXQYI8IH0OTPMW9UD4BTFSTAOD5W08L1Z8UF8D6EWL5V6BQ9VN81KBQC99TJNLXXBL8R5JS8DH4TZ6B11GY79HNI5VZCSXUJJZLREQP4UBNUD6LNXA5F878DZLEESJXGCHXH4GN9AWPK5C93ELSCIAJU6PMPK4898L4BGH1ZTZR9YOW06IXD1EOCERBTGLQP35OJ6T7' where id=81; -update noar ti set v3='DS8WQ78VGLXXIWT4BR4KORNH3PN74C47T4Z4H9YE8QS4W71JA5VGS1M9YBLXQYI8IH0OTPMW9UD4BTFSTAOD5W08L1Z8UF8D6EWL5V6BQ9VN81KBQC99TJNLXXBL8R5JS8DH4TZ6B11GY79HNI5VZCSXUJJZLREQP4UBNUD6LNXA5F878DZLEESJXGCHXH4GN9AWPK5C93ELSCIAJU6PMPK4898L4BGH1ZTZR9YOW06IXD1EOCERBTGLQP35OJ6T7' where id=81; -update noar tt set v0='Z1AFFAFJ8HEXQ6KWLXHTWSQME27Q0UPVYC5F0UP14OWUINMNXPLM0AIYR1VOCWF6MOQRNZ2ESBK6OD5Y3YCIZLKEHS6RX0K1U6JSGEGKODHSRHOZ9WKVKSPP11U9HHQH7W5IUXRWINAT837WDUXVOQF9R1YEHF9KYPM1NN09HMP7P0U7CCVTM3RNLBCSMCVQAJ4EA84ZTPXWEKOA8327TKU27BA8LDXZM3EUBGK7LWP8CZT8H7FZW26LR5Y6QRG6H' where id=82; -update noar ti set v0='Z1AFFAFJ8HEXQ6KWLXHTWSQME27Q0UPVYC5F0UP14OWUINMNXPLM0AIYR1VOCWF6MOQRNZ2ESBK6OD5Y3YCIZLKEHS6RX0K1U6JSGEGKODHSRHOZ9WKVKSPP11U9HHQH7W5IUXRWINAT837WDUXVOQF9R1YEHF9KYPM1NN09HMP7P0U7CCVTM3RNLBCSMCVQAJ4EA84ZTPXWEKOA8327TKU27BA8LDXZM3EUBGK7LWP8CZT8H7FZW26LR5Y6QRG6H' where id=82; -update noar tt set v1='S4NWT2J6P6SYKFPVUIJ3KYGIVY7H2354FD29C0C7GQ3FNBA998IT9GNPHK1PL7TR3T72MYLN76PQ73YUPW3VF3PD64B708NZMZ4KW85WFL3ESORTNAKGXEAOEAF5J8N0ACZMZRY3UTMI7OO3G9DMRUXCJHQ95944VX8QN4PD0L3AQFD847I425R5VSOGQ9XVKYKU7W8A7LZW2R6VY77VLVSULK0OOPZK4S0Y36MEIESDA7I4XEUT8Q3OF0CD7A9IZ' where id=82; -update noar ti set v1='S4NWT2J6P6SYKFPVUIJ3KYGIVY7H2354FD29C0C7GQ3FNBA998IT9GNPHK1PL7TR3T72MYLN76PQ73YUPW3VF3PD64B708NZMZ4KW85WFL3ESORTNAKGXEAOEAF5J8N0ACZMZRY3UTMI7OO3G9DMRUXCJHQ95944VX8QN4PD0L3AQFD847I425R5VSOGQ9XVKYKU7W8A7LZW2R6VY77VLVSULK0OOPZK4S0Y36MEIESDA7I4XEUT8Q3OF0CD7A9IZ' where id=82; -update noar tt set v2='FTICG6DF3C5TLX9AIU7AGG28LDH5JM36AY5I6CM6Q5ZPPCK0ESHK2YII7IZ4USI6KEW9YBW1FI95C367O7JVU3JSFJJX7JMT2E2TLXMP5ZOLHAOD0H5UUZQRLFPU83V6TRLZ6DSR9BG97HHK4ENQ926FJD01H7OTC4F11PBAMB40RUGJT9KQUJU5MGQY4WE21MD09KVKQWFQS3334C2QMF1C9MYT11P6TGYOT77W96F8HDS84SZJGP1W7EVCM9Y1D' where id=82; -update noar ti set v2='FTICG6DF3C5TLX9AIU7AGG28LDH5JM36AY5I6CM6Q5ZPPCK0ESHK2YII7IZ4USI6KEW9YBW1FI95C367O7JVU3JSFJJX7JMT2E2TLXMP5ZOLHAOD0H5UUZQRLFPU83V6TRLZ6DSR9BG97HHK4ENQ926FJD01H7OTC4F11PBAMB40RUGJT9KQUJU5MGQY4WE21MD09KVKQWFQS3334C2QMF1C9MYT11P6TGYOT77W96F8HDS84SZJGP1W7EVCM9Y1D' where id=82; -update noar tt set v3='Y3MGK8MKGSBMROFRXDIMDWRYAJWGPQQ8NWVAHYQX4AWKTAL1FPJKQNTQGRZCMH5WJMP9W4AB2C3270F03CDB082Z2N2X8G1CJ8Y9KA6QKG0Y3CUYSM13E88OV9CZP9LGK449XU2SIRPMLY5LD1U15H4ED6BDJNHQI1Q7SO8XFCKR07UEKFZ2VNWDPXSQ5D8EPI4LN90XDLK616GH693F5YZ20DQOJ3VN31M6ZDXH333ERFSHJ9OSMFEMHBR7TSCMP' where id=82; -update noar ti set v3='Y3MGK8MKGSBMROFRXDIMDWRYAJWGPQQ8NWVAHYQX4AWKTAL1FPJKQNTQGRZCMH5WJMP9W4AB2C3270F03CDB082Z2N2X8G1CJ8Y9KA6QKG0Y3CUYSM13E88OV9CZP9LGK449XU2SIRPMLY5LD1U15H4ED6BDJNHQI1Q7SO8XFCKR07UEKFZ2VNWDPXSQ5D8EPI4LN90XDLK616GH693F5YZ20DQOJ3VN31M6ZDXH333ERFSHJ9OSMFEMHBR7TSCMP' where id=82; -update noar tt set v0='OTMLOVFELN5DWW9P8ZQYJ3DGFDA5MQVEIC42HBGGXZ5TYKZR9RGJSJGNAK7IYPTMUIFDOLGWCSVF61H2JLO8DIRSR1MBOEUMGS7NZKKU5IK74JQATCK7KP3D7M3XH11X8TL0014PT7XER24EC3VLW8A0UF9HNSZHNO5O0JWIJI6FJSBP1ZKOIG2V6ZCLE8K2C8C5HXZN2RI69N4IH7YW09INDH16B9YA5ZJE3D4QW9OVFKX3P44V0PO7CKVTF7XOC' where id=83; -update noar ti set v0='OTMLOVFELN5DWW9P8ZQYJ3DGFDA5MQVEIC42HBGGXZ5TYKZR9RGJSJGNAK7IYPTMUIFDOLGWCSVF61H2JLO8DIRSR1MBOEUMGS7NZKKU5IK74JQATCK7KP3D7M3XH11X8TL0014PT7XER24EC3VLW8A0UF9HNSZHNO5O0JWIJI6FJSBP1ZKOIG2V6ZCLE8K2C8C5HXZN2RI69N4IH7YW09INDH16B9YA5ZJE3D4QW9OVFKX3P44V0PO7CKVTF7XOC' where id=83; -update noar tt set v1='0MP1KZYYN416GXEW0YIGMX1DK05PNGEJHH0WAK03J64VVDCKPB7675TF8AZTESKARPVLHCHT9BGVCM12QT7OZ2IWIB87G7NU0O02VIW5L3VSWFIG2MIG82O8RI7VQ696LQAWS4XI8R97EJK0ZF5I6V564A15L8YV5UDPQAEPFJKQMLZ9BBX961E3TGUUAKGDPVNU49ILB4BOTIIKYR7WXCXY3OTD92Q9F8PS3I81DKM0FQDQCKDGSHHNV94ZOFD8T' where id=83; -update noar ti set v1='0MP1KZYYN416GXEW0YIGMX1DK05PNGEJHH0WAK03J64VVDCKPB7675TF8AZTESKARPVLHCHT9BGVCM12QT7OZ2IWIB87G7NU0O02VIW5L3VSWFIG2MIG82O8RI7VQ696LQAWS4XI8R97EJK0ZF5I6V564A15L8YV5UDPQAEPFJKQMLZ9BBX961E3TGUUAKGDPVNU49ILB4BOTIIKYR7WXCXY3OTD92Q9F8PS3I81DKM0FQDQCKDGSHHNV94ZOFD8T' where id=83; -update noar tt set v2='9CRFIG074L6A6UIQRVPP5GFXXHPFN4SQI26AFPNRIYI49H5UNA63CXD39QIT8GW3U8V9DKPNGW4WJY9CMKL7K32P559F5HHC7DOD79V8FD8CQ8D2P4VZJTJCHMVAADTTO32XX7WBU9EXTI21XMU8QR4MPQN5SH29V0IOW2BUI3AHIXSYPV95RSMREPIRN29R6XVU9N3B9G7RQEX0I39LTVDYBEYGLTPE8SF7KJCJS9J9ODRJSTSKA4ULXG7ILKACZ' where id=83; -update noar ti set v2='9CRFIG074L6A6UIQRVPP5GFXXHPFN4SQI26AFPNRIYI49H5UNA63CXD39QIT8GW3U8V9DKPNGW4WJY9CMKL7K32P559F5HHC7DOD79V8FD8CQ8D2P4VZJTJCHMVAADTTO32XX7WBU9EXTI21XMU8QR4MPQN5SH29V0IOW2BUI3AHIXSYPV95RSMREPIRN29R6XVU9N3B9G7RQEX0I39LTVDYBEYGLTPE8SF7KJCJS9J9ODRJSTSKA4ULXG7ILKACZ' where id=83; -update noar tt set v3='VE01PQ912HNRHFOE9D944S39B7OISUTX4XQ0KMH24FOJIQF2EYBP4OHOQY6Q7MIEIN0ST2GVR9QQPTLIEKPZ7HHAO4UIQYATG7N2QF9RZIAQA4GCRRFXM5PE0H2AG4HPDLG4RILYMB44VVZ6J7092Q1UVBXUC090R9A6OPJWXB657XCT8CBN13MFPQ16I22D6W6X4C1RCBI73KRH2Q6LGLU611BXUWQKX4TGFK2TS76KVWHMRCOLYQ4ZVRLQLO4P9' where id=83; -update noar ti set v3='VE01PQ912HNRHFOE9D944S39B7OISUTX4XQ0KMH24FOJIQF2EYBP4OHOQY6Q7MIEIN0ST2GVR9QQPTLIEKPZ7HHAO4UIQYATG7N2QF9RZIAQA4GCRRFXM5PE0H2AG4HPDLG4RILYMB44VVZ6J7092Q1UVBXUC090R9A6OPJWXB657XCT8CBN13MFPQ16I22D6W6X4C1RCBI73KRH2Q6LGLU611BXUWQKX4TGFK2TS76KVWHMRCOLYQ4ZVRLQLO4P9' where id=83; -update noar tt set v0='ZJB6MJMV1LCAKQIJ5JYA6YCNIH1QOLIG5DDLMMXBVJ2NQHKNRIUA0PT2VBB5YBVCRF9TZ0OG7BYOTVAI6XT6GW0GAIQ8MN0RC3S1OIEYK1VBXUEB76AVATQ0HI9GB4T3DWF8AJJFCJ8HQ82ISMHHOKUJTXEO0MXDJWKPCZMR50HNX3H4VDOUBISUKARQRVK54ZNLO44KIW7S2S2YLGRM9YXD37IV33KEYIBN3XQBNMIPCXE3BIGJWS34N61B8J73V' where id=84; -update noar ti set v0='ZJB6MJMV1LCAKQIJ5JYA6YCNIH1QOLIG5DDLMMXBVJ2NQHKNRIUA0PT2VBB5YBVCRF9TZ0OG7BYOTVAI6XT6GW0GAIQ8MN0RC3S1OIEYK1VBXUEB76AVATQ0HI9GB4T3DWF8AJJFCJ8HQ82ISMHHOKUJTXEO0MXDJWKPCZMR50HNX3H4VDOUBISUKARQRVK54ZNLO44KIW7S2S2YLGRM9YXD37IV33KEYIBN3XQBNMIPCXE3BIGJWS34N61B8J73V' where id=84; -update noar tt set v1='VHFC8M5QVI85GA5BBKL57FLV4OWT1WF3AOQTVPDNS5KTSSCG1M5YR58AFFOA7XOIVMKCUOG7VAKUYH0QPPD068FTLQ03RU2FGQXM126NMTL6CQHDAXGCV7EKN7VPCPKQWCI4MRCV0WUX1NNG2ZCID4LQHRHAQA95542AV8COA35FUO0GMQ37L62HBZ3VFG369W4KTNPYR4TR8QM6JGQT6RTZW8KJRUO51S6L45OLBFWY6KF6BNDFRU2G59E0NM2GF' where id=84; -update noar ti set v1='VHFC8M5QVI85GA5BBKL57FLV4OWT1WF3AOQTVPDNS5KTSSCG1M5YR58AFFOA7XOIVMKCUOG7VAKUYH0QPPD068FTLQ03RU2FGQXM126NMTL6CQHDAXGCV7EKN7VPCPKQWCI4MRCV0WUX1NNG2ZCID4LQHRHAQA95542AV8COA35FUO0GMQ37L62HBZ3VFG369W4KTNPYR4TR8QM6JGQT6RTZW8KJRUO51S6L45OLBFWY6KF6BNDFRU2G59E0NM2GF' where id=84; -update noar tt set v2='CISL18PE36Z2RYM3TMO4S91FF0PQDRLL0CSDUYBFUDDFNJAS38MX1XZJKYHMTETY7BNV8Z9TVCS5RXI1A1FP8VYAQ8KNDSZNY7WIVDOC4WATSO5AGX7K0WZCEZM2U060TDE0TL3JJLFVT7CPLOY1JP57X12R7NHHQS4CX9DH7NUAK13LJSCBVGE9BAVFFT1I1GA1TTLXFUG0B15TACPL3FINNS48HM3UVIQ90ELSWRRZUBNTTNVKAL6KEVO87WBZS' where id=84; -update noar ti set v2='CISL18PE36Z2RYM3TMO4S91FF0PQDRLL0CSDUYBFUDDFNJAS38MX1XZJKYHMTETY7BNV8Z9TVCS5RXI1A1FP8VYAQ8KNDSZNY7WIVDOC4WATSO5AGX7K0WZCEZM2U060TDE0TL3JJLFVT7CPLOY1JP57X12R7NHHQS4CX9DH7NUAK13LJSCBVGE9BAVFFT1I1GA1TTLXFUG0B15TACPL3FINNS48HM3UVIQ90ELSWRRZUBNTTNVKAL6KEVO87WBZS' where id=84; -update noar tt set v3='ISGODRA200H08GXEPOU3MXIV4IJGMDUKIQCYL2QDVM9XJFUSNP0X5MGER3IKQ6D5J6E6DEPEZW8ICTGP6XNYSKCY52YVZ504RWKCABB94161STQWB5SDP1TJYAKRV6BGD6CUFTE9RE6CVYJUZ3PHWM503LA8HQ9OE8XGME5DP787BBIM8M3TRTBNGE1L84G7UK0SFJJY404YL5CT1WCLUHTIJ0UT5U5U5FRIRT9L45X71KL93SLK2VUNM66Y8BIMA' where id=84; -update noar ti set v3='ISGODRA200H08GXEPOU3MXIV4IJGMDUKIQCYL2QDVM9XJFUSNP0X5MGER3IKQ6D5J6E6DEPEZW8ICTGP6XNYSKCY52YVZ504RWKCABB94161STQWB5SDP1TJYAKRV6BGD6CUFTE9RE6CVYJUZ3PHWM503LA8HQ9OE8XGME5DP787BBIM8M3TRTBNGE1L84G7UK0SFJJY404YL5CT1WCLUHTIJ0UT5U5U5FRIRT9L45X71KL93SLK2VUNM66Y8BIMA' where id=84; -update noar tt set v0='49LF2XJUH54TIKVSMLM741OLVFYVO8GPNZPVR3M7U3UO5989IUIOBISZCVF9J58Q1B5EJCGU8QWWNLHA3Y80947DMV9KNLXPO0U02PF3QCZU37B2QL1UL0U5O9GXBQDRGFC5HFMA50ME7GUH4K9IIKQHYA8STE1OR2JYL0KNBNN557XPIIV5TI4C11B1Y3X7UI2XBTI9CI0VAOHJXEO2V761L215HFIW20W547OPHNOAPFGYSWNEP09JTFEPI0EIP' where id=85; -update noar ti set v0='49LF2XJUH54TIKVSMLM741OLVFYVO8GPNZPVR3M7U3UO5989IUIOBISZCVF9J58Q1B5EJCGU8QWWNLHA3Y80947DMV9KNLXPO0U02PF3QCZU37B2QL1UL0U5O9GXBQDRGFC5HFMA50ME7GUH4K9IIKQHYA8STE1OR2JYL0KNBNN557XPIIV5TI4C11B1Y3X7UI2XBTI9CI0VAOHJXEO2V761L215HFIW20W547OPHNOAPFGYSWNEP09JTFEPI0EIP' where id=85; -update noar tt set v1='8GL79SB1XRSAZHYVP7FPYSH1N1XHMWX7JYJXCOQQKK7Q09MSN6792UST3PTXCIPAEHOC5NYMLVXOII6BJU81U4RQR2TBL5XP1OGIC9LFN4388OSJJYUIUHP1PVH6M65O23X0U8ALCHD8OGA3S69QA23R6L39YWZZ62HCDDZGBFSLP9V874M01VYPWQCY2WFIH32NTWRZ4Q069EFOA6MPNTOT6YT0OPEDHBTPT435AG61V723UX8O03QBGQQL44M1Y' where id=85; -update noar ti set v1='8GL79SB1XRSAZHYVP7FPYSH1N1XHMWX7JYJXCOQQKK7Q09MSN6792UST3PTXCIPAEHOC5NYMLVXOII6BJU81U4RQR2TBL5XP1OGIC9LFN4388OSJJYUIUHP1PVH6M65O23X0U8ALCHD8OGA3S69QA23R6L39YWZZ62HCDDZGBFSLP9V874M01VYPWQCY2WFIH32NTWRZ4Q069EFOA6MPNTOT6YT0OPEDHBTPT435AG61V723UX8O03QBGQQL44M1Y' where id=85; -update noar tt set v2='80XLWF4LZ3GKQKU5M1MXKQMX8LXOKMJ5UAFGNSIKACLN05L0I1QYYKZGOWVJMLZYYM71732QLIWQMQWPUA0GBRYFDV8JPRLJS8STUIYTKRVDYHNVNX4VISJBPB0RHRJ9TVJ7GWG8LTEQEBLGYBR402XS7H007G50PZG2X4QLOUAH8YCO9TIY0F26VTZFI2B8LLMUD11EV0C87RKYK0XZ9IFG4WBXY4MS7DEZYLF1M9S7FU0YG13Y681JM51VSF47Q' where id=85; -update noar ti set v2='80XLWF4LZ3GKQKU5M1MXKQMX8LXOKMJ5UAFGNSIKACLN05L0I1QYYKZGOWVJMLZYYM71732QLIWQMQWPUA0GBRYFDV8JPRLJS8STUIYTKRVDYHNVNX4VISJBPB0RHRJ9TVJ7GWG8LTEQEBLGYBR402XS7H007G50PZG2X4QLOUAH8YCO9TIY0F26VTZFI2B8LLMUD11EV0C87RKYK0XZ9IFG4WBXY4MS7DEZYLF1M9S7FU0YG13Y681JM51VSF47Q' where id=85; -update noar tt set v3='I55NQ0DV2O5PAH8W81QUYVBS4F9BDG14MHNREC30TY30OFDGZ5A5IY43AT7A9WTXTJIIQ0IERJH22JKGE61AV1C016YWUQZSNS472WOC5QJ2Z030XSHEGBI2RSROEX0G6TH7L71FDZA0Q0HVOS4M2KBBEEM8K0WJUI1OH160ZYG2DEUXZADVI7CHLI6G904PCKH55CGBRIW8EGQNMRN1UOKR205EXFLUT17UH03MDTVPWQ02NUUBH7LS41TIHHY4W' where id=85; -update noar ti set v3='I55NQ0DV2O5PAH8W81QUYVBS4F9BDG14MHNREC30TY30OFDGZ5A5IY43AT7A9WTXTJIIQ0IERJH22JKGE61AV1C016YWUQZSNS472WOC5QJ2Z030XSHEGBI2RSROEX0G6TH7L71FDZA0Q0HVOS4M2KBBEEM8K0WJUI1OH160ZYG2DEUXZADVI7CHLI6G904PCKH55CGBRIW8EGQNMRN1UOKR205EXFLUT17UH03MDTVPWQ02NUUBH7LS41TIHHY4W' where id=85; -update noar tt set v0='KMITW1TN044QC5VOFYY0Q5EBI6ALKUUUBDMZBLP4PVG48MGZ8WD84ASK5M2BSDQVD53GTTTOZZVGU81CDBTLZFQOM0XYNLHH4EPGBSB6IV8F6QBN5MJ4G7Q57EDOTJ2NZIOO9UB0365DSCU7TQP3TD7UARAUF3M6TS008QPZIKKV24ZJ7NEQ349A8J62NM15JPL5UO3KXYEVH66SAKS96FEVNF8QH9GQ15CO4WKDS7L0B4ELYS7UMAHNBD382WPU6' where id=86; -update noar ti set v0='KMITW1TN044QC5VOFYY0Q5EBI6ALKUUUBDMZBLP4PVG48MGZ8WD84ASK5M2BSDQVD53GTTTOZZVGU81CDBTLZFQOM0XYNLHH4EPGBSB6IV8F6QBN5MJ4G7Q57EDOTJ2NZIOO9UB0365DSCU7TQP3TD7UARAUF3M6TS008QPZIKKV24ZJ7NEQ349A8J62NM15JPL5UO3KXYEVH66SAKS96FEVNF8QH9GQ15CO4WKDS7L0B4ELYS7UMAHNBD382WPU6' where id=86; -update noar tt set v1='937DKZR6XCWJDJ4ZERII10RY8G7QCJSUBMVG49BZKIXBKYNQCZSN5EZNNXCAX11WO18MSYBACNGXVE5186PW1JMH5HSTCI3D4AILVS607E88E5CIO1NZ5P4V4JDFLS5S1FJ6I5PU80B75DYXH2QI0CKAQVE0N6YJDX4ZO7CBQECRRZ80XKHASI2IHFKGQVUMHOCM2UQ5AF28YSV47K7TTQO5MTEMG6K5F0XB2DDM773ABMIUKXMSU75CNK70R5K5S' where id=86; -update noar ti set v1='937DKZR6XCWJDJ4ZERII10RY8G7QCJSUBMVG49BZKIXBKYNQCZSN5EZNNXCAX11WO18MSYBACNGXVE5186PW1JMH5HSTCI3D4AILVS607E88E5CIO1NZ5P4V4JDFLS5S1FJ6I5PU80B75DYXH2QI0CKAQVE0N6YJDX4ZO7CBQECRRZ80XKHASI2IHFKGQVUMHOCM2UQ5AF28YSV47K7TTQO5MTEMG6K5F0XB2DDM773ABMIUKXMSU75CNK70R5K5S' where id=86; -update noar tt set v2='6GW2VIOWKEJ8ESVVTRMGODL2SNCEIN8DYTZ7BN1YAJNON5CIC46FH0Z52WBYO7CYAE11MPQ9JU0J2PQVDRCIZN5X68W1M5DDD7CYNYFKFH2A466ROLZYQLFS7NLK9MAVG004PDDGSYEG3YDQHGCFCN7AYXO3MJ12I99ERIOK5HC7HTYHHNHIARE3FJHUF4KYSPEZZE6XU81GD2DN30ZIPJK5RGT3OHWYTD9YHQFYKGQUZCFRHYKF66HU6784Q3UY0' where id=86; -update noar ti set v2='6GW2VIOWKEJ8ESVVTRMGODL2SNCEIN8DYTZ7BN1YAJNON5CIC46FH0Z52WBYO7CYAE11MPQ9JU0J2PQVDRCIZN5X68W1M5DDD7CYNYFKFH2A466ROLZYQLFS7NLK9MAVG004PDDGSYEG3YDQHGCFCN7AYXO3MJ12I99ERIOK5HC7HTYHHNHIARE3FJHUF4KYSPEZZE6XU81GD2DN30ZIPJK5RGT3OHWYTD9YHQFYKGQUZCFRHYKF66HU6784Q3UY0' where id=86; -update noar tt set v3='7WVTO26UVFWPTATT9MJFCHJBKR2ZMOADMLUGV7C427LCWJ7EQ57X201KIFPPPWAXRLRNL0YJ91YB3O0B4W4YXQ3CYA7SVV71GNY6VDGKAIF2HDSLIX3PGQWMKHWQIY48EQ9FMCFC33H22W4FW4EL34SL5DE0MIOFL6RND20MAEKPO8PATTIHREMVF1W5GG3ILSH7D7IYCB73CL2L63QJ57QCYQVQY3RRVAKKE368VFFHJXO9THMLZNL3DP52YTOWX' where id=86; -update noar ti set v3='7WVTO26UVFWPTATT9MJFCHJBKR2ZMOADMLUGV7C427LCWJ7EQ57X201KIFPPPWAXRLRNL0YJ91YB3O0B4W4YXQ3CYA7SVV71GNY6VDGKAIF2HDSLIX3PGQWMKHWQIY48EQ9FMCFC33H22W4FW4EL34SL5DE0MIOFL6RND20MAEKPO8PATTIHREMVF1W5GG3ILSH7D7IYCB73CL2L63QJ57QCYQVQY3RRVAKKE368VFFHJXO9THMLZNL3DP52YTOWX' where id=86; -update noar tt set v0='TVTAELH553TRH2LW915RRLWWLUZQ7A851IW85T7PFWSISU6KBRQFNNU04MCH4FRE1IR6NW9FYOFE3Q06NNVKZJYVTA8F7GFBE4XQBR7KX3COQS64AAIY261BNYH6IRQGVYYMV4ZVH48NDBTVDBHIN9LHT0CT9RCFRSA8Q1IO8RGV683VO4Y3OFJJ22TNVHVKCBIPMNINY6PXQLG6FNEU2KULNIJK2PTPSGCMUSAYP3C7650J3CX2XYS52OKI7DK9I' where id=87; -update noar ti set v0='TVTAELH553TRH2LW915RRLWWLUZQ7A851IW85T7PFWSISU6KBRQFNNU04MCH4FRE1IR6NW9FYOFE3Q06NNVKZJYVTA8F7GFBE4XQBR7KX3COQS64AAIY261BNYH6IRQGVYYMV4ZVH48NDBTVDBHIN9LHT0CT9RCFRSA8Q1IO8RGV683VO4Y3OFJJ22TNVHVKCBIPMNINY6PXQLG6FNEU2KULNIJK2PTPSGCMUSAYP3C7650J3CX2XYS52OKI7DK9I' where id=87; -update noar tt set v1='MFOO4B51J9HDOBT48ARQ117ZJYM7ENIF4XAKA7F5ZRR0U5E8H5SSD2CO2GD9RPOPHPY7CVX56JQKNWC4L9ZVSR6NFRCSQYOFTQLQP4S9UTNG8DFGAD72EO4KJBWKEELPO59UY6Q3ERK80NQATGRKT8OUWSBC3JBJ1QPQ5C3ZEWJA3O7OI9RDRJ66YZPUVXIWMCWDJI7H2SBMBMYHMMBLFSETUWA94H7ZBRANR3AYMX06IMI4ZFGDE1EGY7QQDF9BN' where id=87; -update noar ti set v1='MFOO4B51J9HDOBT48ARQ117ZJYM7ENIF4XAKA7F5ZRR0U5E8H5SSD2CO2GD9RPOPHPY7CVX56JQKNWC4L9ZVSR6NFRCSQYOFTQLQP4S9UTNG8DFGAD72EO4KJBWKEELPO59UY6Q3ERK80NQATGRKT8OUWSBC3JBJ1QPQ5C3ZEWJA3O7OI9RDRJ66YZPUVXIWMCWDJI7H2SBMBMYHMMBLFSETUWA94H7ZBRANR3AYMX06IMI4ZFGDE1EGY7QQDF9BN' where id=87; -update noar tt set v2='E2KIABUGKRBTPRUHNUG0TP9E8AKDCBX4TDJJR87Z6ADS0BA3CZOY3F5PAQ9GNNLPEHIQYP42D3UFOC7WN55Z7A3LA02KT54RV1FG05GW9C7G98ZJED7IVU2E0DAZBR3YYT69IR4TZGN4WLW8H4CRJ4J82SVA58VOUI6ZQTMEC94NUO2G4BKZW3S1VAW1T714I4PB7DM0SCCGIHS0SVR7WR7WIDN4MAB5ZXF37WR0RM9V65PQHXJF1BGUEUS05C0EX' where id=87; -update noar ti set v2='E2KIABUGKRBTPRUHNUG0TP9E8AKDCBX4TDJJR87Z6ADS0BA3CZOY3F5PAQ9GNNLPEHIQYP42D3UFOC7WN55Z7A3LA02KT54RV1FG05GW9C7G98ZJED7IVU2E0DAZBR3YYT69IR4TZGN4WLW8H4CRJ4J82SVA58VOUI6ZQTMEC94NUO2G4BKZW3S1VAW1T714I4PB7DM0SCCGIHS0SVR7WR7WIDN4MAB5ZXF37WR0RM9V65PQHXJF1BGUEUS05C0EX' where id=87; -update noar tt set v3='CMG6KAEA2E3M3DCXKBAMGGG4TXHWTP6QHHKJ3CY1T2AKUBP2DPOF3JQXBRORE11J6X1QHY16J5M5OG74W1VE78ZVCD4UWDGWC5PVB5Y9YVWQ3ZPHFFW7WZN79S49FBDFQQGRUUTL805V8I5A1R6L3N2AJITY8NIVZQ1BFBV7X2HV01YAOBXSBXO1QMQYKL74RMFGCWYDWTIK02YM09AV4SLJPRW4IS7ITXB0P9YD7ITGBKTKY2HG5OM3Q633ZQ282' where id=87; -update noar ti set v3='CMG6KAEA2E3M3DCXKBAMGGG4TXHWTP6QHHKJ3CY1T2AKUBP2DPOF3JQXBRORE11J6X1QHY16J5M5OG74W1VE78ZVCD4UWDGWC5PVB5Y9YVWQ3ZPHFFW7WZN79S49FBDFQQGRUUTL805V8I5A1R6L3N2AJITY8NIVZQ1BFBV7X2HV01YAOBXSBXO1QMQYKL74RMFGCWYDWTIK02YM09AV4SLJPRW4IS7ITXB0P9YD7ITGBKTKY2HG5OM3Q633ZQ282' where id=87; -update noar tt set v0='JWGXVKTG89T8MXB18UHWQ24QW8TH27MIVIHCE453AXY874SOQI7ODP58C8069DDCFKJWDLWSDVR8P8KR92PG6XM2I62W6NOLBFJJE97WNCKICXCDZNCR52190LM1H28W6DKIH3MH6TPNA2L1AH1DOTDYEZDZA2NNE1ELHSLAE5QQSNMTDOV216FTHDUSXUGCBKZW5D5HJBOBZP2K5RVVCNZ6D9DX0UHDWBKLYSY233LN78HVLJC40ERONQ3QWIAG6' where id=88; -update noar ti set v0='JWGXVKTG89T8MXB18UHWQ24QW8TH27MIVIHCE453AXY874SOQI7ODP58C8069DDCFKJWDLWSDVR8P8KR92PG6XM2I62W6NOLBFJJE97WNCKICXCDZNCR52190LM1H28W6DKIH3MH6TPNA2L1AH1DOTDYEZDZA2NNE1ELHSLAE5QQSNMTDOV216FTHDUSXUGCBKZW5D5HJBOBZP2K5RVVCNZ6D9DX0UHDWBKLYSY233LN78HVLJC40ERONQ3QWIAG6' where id=88; -update noar tt set v1='TOFNGY7WGDL6P7700N7RF9776HR6ADJSOBTXTGVR4Z90WH8PMFHR91OY125A6INJDSYEW0I28TNP12B0HBHQWWUMK8JAQ3Q9EHXP6ZCOX82M6AFX493ZW2WJ5CYUVRGMEW70KRX22YWAVBWOE5LPZKX0L6MM1J9MMRYKKIAKPQJJF2XW4KYGF0NM4FW0JLXVYMV9VK060T33CMBX3X4LMX4F641BQBZWYKVIR5NGQAU8ZANPJS6HQNYRSXAFQ7YD4' where id=88; -update noar ti set v1='TOFNGY7WGDL6P7700N7RF9776HR6ADJSOBTXTGVR4Z90WH8PMFHR91OY125A6INJDSYEW0I28TNP12B0HBHQWWUMK8JAQ3Q9EHXP6ZCOX82M6AFX493ZW2WJ5CYUVRGMEW70KRX22YWAVBWOE5LPZKX0L6MM1J9MMRYKKIAKPQJJF2XW4KYGF0NM4FW0JLXVYMV9VK060T33CMBX3X4LMX4F641BQBZWYKVIR5NGQAU8ZANPJS6HQNYRSXAFQ7YD4' where id=88; -update noar tt set v2='J185Q4TTRTGJCGUZ8ELJW9E6TXO1I0ANHSAINO8BW6M3NVZIZBG2TX5FE1OSRHRDVCI4YW9RL2MAM8QKXRC7RUPFZHZA867R6572OUMYYDD7Y6KHN3E3G77H4BAR224NBMJ1RRTKRABH5KGPYKZQRMAPQE5EECIPDGQ3T1RUYUIMJHA32G3RRXVXUMBJOS6RCSH3HYMK0IUOW1YCBDRIF79Q3V7S6PZOG0M3TRZV3B2HP6P35G2D4KZKTTQ8ZR1R9' where id=88; -update noar ti set v2='J185Q4TTRTGJCGUZ8ELJW9E6TXO1I0ANHSAINO8BW6M3NVZIZBG2TX5FE1OSRHRDVCI4YW9RL2MAM8QKXRC7RUPFZHZA867R6572OUMYYDD7Y6KHN3E3G77H4BAR224NBMJ1RRTKRABH5KGPYKZQRMAPQE5EECIPDGQ3T1RUYUIMJHA32G3RRXVXUMBJOS6RCSH3HYMK0IUOW1YCBDRIF79Q3V7S6PZOG0M3TRZV3B2HP6P35G2D4KZKTTQ8ZR1R9' where id=88; -update noar tt set v3='NX9U9U7LCTO2XCGC1YP7VZ9CI4OYSZ5P0DH1PCP47GNC0P2IE9R08N1IQJOFAK3XK37YYUYBS7X5EQDUU9MXTEJ13230SP3K1QMAHPYMRYPO7TBI4NFPAJAGT54ZF47OH9Y82EAQYMZYNB3O24PVT1EKZQBK3II3SJ9Q8VPFJ2B17W32C5AG02THSREHO9P5VP9HBLZGLJCQF9Y65IRA0UPEBLERXZHIS7I2RSVC3H7J8RCI53Q35MBYDMP2UEVPV' where id=88; -update noar ti set v3='NX9U9U7LCTO2XCGC1YP7VZ9CI4OYSZ5P0DH1PCP47GNC0P2IE9R08N1IQJOFAK3XK37YYUYBS7X5EQDUU9MXTEJ13230SP3K1QMAHPYMRYPO7TBI4NFPAJAGT54ZF47OH9Y82EAQYMZYNB3O24PVT1EKZQBK3II3SJ9Q8VPFJ2B17W32C5AG02THSREHO9P5VP9HBLZGLJCQF9Y65IRA0UPEBLERXZHIS7I2RSVC3H7J8RCI53Q35MBYDMP2UEVPV' where id=88; -update noar tt set v0='XBYXZ8MFXPU5SVC7HVP9GEIU9O3S0NHTVMTMX55BQAHA1WF65U5W52WCXSIORXUIR71XQ28N0UKKY80WDIOYKO2SKY3KD2NAC3CWTF5ZDPEFWTASQ9P2RJSZ5UGOTRPKNAGMIUNKWS46WV33Q2HJ7ZH7EUBX83P87FWDRNYGFTKNLH0HYIK10HXWSZP2AXFAOKNEOQI21UFGALXA9OSZ47QNVCLRIAL9QN0VOAYBW33SJNS7B8LP27DW8IMDKNZ55' where id=89; -update noar ti set v0='XBYXZ8MFXPU5SVC7HVP9GEIU9O3S0NHTVMTMX55BQAHA1WF65U5W52WCXSIORXUIR71XQ28N0UKKY80WDIOYKO2SKY3KD2NAC3CWTF5ZDPEFWTASQ9P2RJSZ5UGOTRPKNAGMIUNKWS46WV33Q2HJ7ZH7EUBX83P87FWDRNYGFTKNLH0HYIK10HXWSZP2AXFAOKNEOQI21UFGALXA9OSZ47QNVCLRIAL9QN0VOAYBW33SJNS7B8LP27DW8IMDKNZ55' where id=89; -update noar tt set v1='XK4YWCJUAN8ZN7KLLZTFSVWRM1L99FJNSG3UGFPPB9DGX5MIQZ27LAYSEB2MCSQMKC0Q9GSDYRVVTJAA8MJTYRON3O142CV1HMDXLGNSNMZNOD4UFWT5SXXULZBG2T5X7396GZAN5CWALNBBYBTPZRZNZBYCIA2VCHI8RR8D7DP5UV1ET3CEJHH4WLS8C8S8DKMM4QXNH32JE06T7FVXWX8MZHLBZNKJ9R33IO9MO46DMB271IO9SCUON3GNRLYNM' where id=89; -update noar ti set v1='XK4YWCJUAN8ZN7KLLZTFSVWRM1L99FJNSG3UGFPPB9DGX5MIQZ27LAYSEB2MCSQMKC0Q9GSDYRVVTJAA8MJTYRON3O142CV1HMDXLGNSNMZNOD4UFWT5SXXULZBG2T5X7396GZAN5CWALNBBYBTPZRZNZBYCIA2VCHI8RR8D7DP5UV1ET3CEJHH4WLS8C8S8DKMM4QXNH32JE06T7FVXWX8MZHLBZNKJ9R33IO9MO46DMB271IO9SCUON3GNRLYNM' where id=89; -update noar tt set v2='A3QKPK822VDQ5085BZHJE918BJI27EQK2F44LGCJGKZKOYR0ZK153ZSAO0T5WD54LIDIXQ44A1XVS9BTBQC3OTNNA79PGDXAUEE9TG2Y2UYUA8QWK7DN5ZQ6L678TK32DXEOEZXW9LEAZSOO5LNMUQSALQNI8O8NNZU4NVYYWLIYRPM7WZVG6LQCLJGD33NEI2PR09TBW54OANH13UTBAGJY2MBRTJW97GVRMP76YDFZPMGH4VOKOPB9EE86215A0' where id=89; -update noar ti set v2='A3QKPK822VDQ5085BZHJE918BJI27EQK2F44LGCJGKZKOYR0ZK153ZSAO0T5WD54LIDIXQ44A1XVS9BTBQC3OTNNA79PGDXAUEE9TG2Y2UYUA8QWK7DN5ZQ6L678TK32DXEOEZXW9LEAZSOO5LNMUQSALQNI8O8NNZU4NVYYWLIYRPM7WZVG6LQCLJGD33NEI2PR09TBW54OANH13UTBAGJY2MBRTJW97GVRMP76YDFZPMGH4VOKOPB9EE86215A0' where id=89; -update noar tt set v3='AXB04X27LL84R6APRE2WD5ZQDOT5C54WDITI67PKM44FI7JL1T8JT9KCIWDDHOLRGQWUV02DPWQC0LRP6QJTQDZNAONKKZNJYKU4PHZ3WN7D835VMWXYSFXJ1LYDX4W54MVV7664V1WY5LTSDPTNUF8JSFWEOSXRPQ8G78K47FE1GJKZIBUQ3DAEARX1NM2GLB4UMA7WO0J5AW85RY2O186RVJ1P6WDEQICU0Z6D4S68GA1P0U9RN2X7YTVI3WB57' where id=89; -update noar ti set v3='AXB04X27LL84R6APRE2WD5ZQDOT5C54WDITI67PKM44FI7JL1T8JT9KCIWDDHOLRGQWUV02DPWQC0LRP6QJTQDZNAONKKZNJYKU4PHZ3WN7D835VMWXYSFXJ1LYDX4W54MVV7664V1WY5LTSDPTNUF8JSFWEOSXRPQ8G78K47FE1GJKZIBUQ3DAEARX1NM2GLB4UMA7WO0J5AW85RY2O186RVJ1P6WDEQICU0Z6D4S68GA1P0U9RN2X7YTVI3WB57' where id=89; -update noar tt set v0='24A512R1E15GG6V6BIM0F1I4KOVBRDK2KB5X5I2TR0I11DOJUYA9QPPFXE2HXUCMJYUPPXUHKV71DI246KTMUF4S69XO68YWRN9STUR8D49Y2M88K0NHPVLHTOPIA9R9J4Q2VHCKTL9WUN8BCY6RO52F6ZBGFBU4TAUH91MUF5BXFN8BMZD72HH55FUBNWT7J7PKUKYF8JRG725OU7CPKQDUBU76UM3GAJ9QZ78DKAGYZUF7P7AMFBCO3KCXP9PA1' where id=90; -update noar ti set v0='24A512R1E15GG6V6BIM0F1I4KOVBRDK2KB5X5I2TR0I11DOJUYA9QPPFXE2HXUCMJYUPPXUHKV71DI246KTMUF4S69XO68YWRN9STUR8D49Y2M88K0NHPVLHTOPIA9R9J4Q2VHCKTL9WUN8BCY6RO52F6ZBGFBU4TAUH91MUF5BXFN8BMZD72HH55FUBNWT7J7PKUKYF8JRG725OU7CPKQDUBU76UM3GAJ9QZ78DKAGYZUF7P7AMFBCO3KCXP9PA1' where id=90; -update noar tt set v1='BFBNTLUIIAIUE88NCG72GU8G6RQ166LL7GIID03YQF5D8194M6M8QOKQY0TJLSTKSTZSWJGQKLOIFH57I3FVLPCUN8SGXP2GM6R6YN4ETIV6VVZVFYXPRIF2QEPNZD6SRMH1YC17IOLM5BZSLBO91C6KYSCGATHVIHROFAAXB70Z8JO3PKN341N0UCCN6ZGKN873W5X4XTK4DQGEJ776LXEL1TAVVGXQC7WKU3WDU7NBJAJ5GQXZRU1L71BWBUTUZ' where id=90; -update noar ti set v1='BFBNTLUIIAIUE88NCG72GU8G6RQ166LL7GIID03YQF5D8194M6M8QOKQY0TJLSTKSTZSWJGQKLOIFH57I3FVLPCUN8SGXP2GM6R6YN4ETIV6VVZVFYXPRIF2QEPNZD6SRMH1YC17IOLM5BZSLBO91C6KYSCGATHVIHROFAAXB70Z8JO3PKN341N0UCCN6ZGKN873W5X4XTK4DQGEJ776LXEL1TAVVGXQC7WKU3WDU7NBJAJ5GQXZRU1L71BWBUTUZ' where id=90; -update noar tt set v2='82MJYN32AKGV01ZNZXV7ZTNR4U1B1YT403BVJV3UGYU6KG94FW69R31416L91HLNBDK0EH8LKOTVJRF13Q40D7EEXFUMX1QNSEC8LS213TCCGK6OQTPJOSF9QHDKZPZIX9LYI0F597QG796I3DQ57WU2MEBVMQGFJ3PL6ZE0WQURGMU2LFNKFRICV73UJ3T4WL9W602LPPVEENT1C1T5RUTBBGW8HTUIGNVO3PJ2GMFKXTBP4P8IAJ50S6TTLXYF6' where id=90; -update noar ti set v2='82MJYN32AKGV01ZNZXV7ZTNR4U1B1YT403BVJV3UGYU6KG94FW69R31416L91HLNBDK0EH8LKOTVJRF13Q40D7EEXFUMX1QNSEC8LS213TCCGK6OQTPJOSF9QHDKZPZIX9LYI0F597QG796I3DQ57WU2MEBVMQGFJ3PL6ZE0WQURGMU2LFNKFRICV73UJ3T4WL9W602LPPVEENT1C1T5RUTBBGW8HTUIGNVO3PJ2GMFKXTBP4P8IAJ50S6TTLXYF6' where id=90; -update noar tt set v3='4KMNFGP2LIIFBGSA0AEPA70TDRUU4T2R80BBGS0DBV5F76ET9U45GUANOHWS8ABURIIG4W2YD9WM0R3M6G9DXWIHKE5LPNUMGDO73VLJLPICQEYSXOPZ5CZXGIV8JNIF4UHUYM889Y8GZSHUFDZLUIMNU0LCWU3VF9I6UEVZGESDPKQBFYDPHVOR4SC0GOKPQFFXXT69RIYYRMIBQ9WO6K4VXBEVEX0M6WOVPA2R2N836BU35V5M6GLHL299FS5JQ' where id=90; -update noar ti set v3='4KMNFGP2LIIFBGSA0AEPA70TDRUU4T2R80BBGS0DBV5F76ET9U45GUANOHWS8ABURIIG4W2YD9WM0R3M6G9DXWIHKE5LPNUMGDO73VLJLPICQEYSXOPZ5CZXGIV8JNIF4UHUYM889Y8GZSHUFDZLUIMNU0LCWU3VF9I6UEVZGESDPKQBFYDPHVOR4SC0GOKPQFFXXT69RIYYRMIBQ9WO6K4VXBEVEX0M6WOVPA2R2N836BU35V5M6GLHL299FS5JQ' where id=90; -update noar tt set v0='H5RVFYRB8FUGWOI6VTWMAXK37BXF7W665LYAQ43K87HTDVZA1KOB6ZPA2BPM7H0QICWDRTQ34S8B2ZVU7ZZSDI9UTL9MQJ16ZNVI0EYRQCRJ0YHH1K7Z3TSLH6MAUM5DBCNRNWMSNFN6YBNDXGAXGB6JKIAC3HQ36SSLYG5BS1U0PG63L2GGPGDWIO95LGICJ59X3X9C9L2OL7P6743HB2A3OZ85G7LDZAPHGLIS9OZ17ZCZ7HZ951Q4DGQMKC5E8' where id=91; -update noar ti set v0='H5RVFYRB8FUGWOI6VTWMAXK37BXF7W665LYAQ43K87HTDVZA1KOB6ZPA2BPM7H0QICWDRTQ34S8B2ZVU7ZZSDI9UTL9MQJ16ZNVI0EYRQCRJ0YHH1K7Z3TSLH6MAUM5DBCNRNWMSNFN6YBNDXGAXGB6JKIAC3HQ36SSLYG5BS1U0PG63L2GGPGDWIO95LGICJ59X3X9C9L2OL7P6743HB2A3OZ85G7LDZAPHGLIS9OZ17ZCZ7HZ951Q4DGQMKC5E8' where id=91; -update noar tt set v1='3QTQ22O79WXROW10ZIGKFK9C0ON1CSOWUVAAC88P2LXZ6EFW22ZWYMIPPI7X13KSDBWFW8BRRUMSUYIJK5TYXSDT1QTQVSN7X2O6GTKUMS2RGW4H2P3EMF5KD1WTE8N43VZB9THRNWIZ8YLMOQYHZMLU1R5PLP9DK8AFQZDT6VV3BH93183J59E26OICO9X51TII3WXDV90CLTQKP5TK1EM3PG7NV7SXV17N7G4WIGQOFMP5RAHYLTQQHLZK2H383' where id=91; -update noar ti set v1='3QTQ22O79WXROW10ZIGKFK9C0ON1CSOWUVAAC88P2LXZ6EFW22ZWYMIPPI7X13KSDBWFW8BRRUMSUYIJK5TYXSDT1QTQVSN7X2O6GTKUMS2RGW4H2P3EMF5KD1WTE8N43VZB9THRNWIZ8YLMOQYHZMLU1R5PLP9DK8AFQZDT6VV3BH93183J59E26OICO9X51TII3WXDV90CLTQKP5TK1EM3PG7NV7SXV17N7G4WIGQOFMP5RAHYLTQQHLZK2H383' where id=91; -update noar tt set v2='5PI4Q9TEN68K5DAGII5EBTQZ0YW4CH8WRMN0SXA69CXAV55P78BD3TXIRT6TVG54E0SK12YG85HYE2EJRHK65YZT25C95Z5ZFT1M9U8RSKAJ7QA3K29L2BDL43QBKQFN1BVSMIZ5DAB4GKTMQLBQ7K98LJH70FWZWX5R5RXUZ8QSSNMNMMHC7BKWOWY3L0SM120ZGD59T2T5ONVCJN8NBD7INEROY3SWNZ45AQ8G48YKIPT5U9QNNWHLKPSWFOIUZ' where id=91; -update noar ti set v2='5PI4Q9TEN68K5DAGII5EBTQZ0YW4CH8WRMN0SXA69CXAV55P78BD3TXIRT6TVG54E0SK12YG85HYE2EJRHK65YZT25C95Z5ZFT1M9U8RSKAJ7QA3K29L2BDL43QBKQFN1BVSMIZ5DAB4GKTMQLBQ7K98LJH70FWZWX5R5RXUZ8QSSNMNMMHC7BKWOWY3L0SM120ZGD59T2T5ONVCJN8NBD7INEROY3SWNZ45AQ8G48YKIPT5U9QNNWHLKPSWFOIUZ' where id=91; -update noar tt set v3='HMCIFVLIP82EB98V66WN595HAFU5UZD2W10RR126OP0HTKEFXPQ9FCKEK094B6SNLMMKP606ULPU1S21YMFM1RDZFAM6D9N07DEPVFPSFRU8QBYUWX3H6PMELJZQ6LHP1I7Y26GOQC0NGTP7SPDDNG7A2KSBOOUHTDUXNV199ITGHOCFCE2Q1DL7T2HLTDJOMQ4HURE6PKVTOOJIYRJQGPA3WS2GJC018Q75QZ7UXL0L5A8QA9M0GSPOP8YMFOBF2' where id=91; -update noar ti set v3='HMCIFVLIP82EB98V66WN595HAFU5UZD2W10RR126OP0HTKEFXPQ9FCKEK094B6SNLMMKP606ULPU1S21YMFM1RDZFAM6D9N07DEPVFPSFRU8QBYUWX3H6PMELJZQ6LHP1I7Y26GOQC0NGTP7SPDDNG7A2KSBOOUHTDUXNV199ITGHOCFCE2Q1DL7T2HLTDJOMQ4HURE6PKVTOOJIYRJQGPA3WS2GJC018Q75QZ7UXL0L5A8QA9M0GSPOP8YMFOBF2' where id=91; -update noar tt set v0='785RE4HQE4VE16P5AWUB1V4J4DQJJBO8RP69GU94BEN98LHXML7F54A2Z1PK9XAH28J9K3MH86F6DLZ201JPNKXN38U7FLX7FJWIDYYM32JA6VC0NES00BCNAWU4QT5IV8J8A8KJ8EDAXB00OHFJ7SMDBDVXCV6ETLVL0JLKQSVPG93ZTD89061FVJ1AOW2B9EEEMM6KJKPLNGMO0NHP7US308Y90NI2YFDS1VLPX8NROVEUO9H7B9XVGWZSMKO3J' where id=92; -update noar ti set v0='785RE4HQE4VE16P5AWUB1V4J4DQJJBO8RP69GU94BEN98LHXML7F54A2Z1PK9XAH28J9K3MH86F6DLZ201JPNKXN38U7FLX7FJWIDYYM32JA6VC0NES00BCNAWU4QT5IV8J8A8KJ8EDAXB00OHFJ7SMDBDVXCV6ETLVL0JLKQSVPG93ZTD89061FVJ1AOW2B9EEEMM6KJKPLNGMO0NHP7US308Y90NI2YFDS1VLPX8NROVEUO9H7B9XVGWZSMKO3J' where id=92; -update noar tt set v1='0EAB2PKE0VSX30YVSJQA0WHFBN56CHFLCMTLDOEWUL1C3F08S1X0K2PUNJ5KYJLIDKOQW3A4N9YDFQLLVGCUERSQUUCZZ6ZXF3PEKD643XONVHBU1OIBIUSV2A2M4PU7NUZAL01LUZJGUI1EQUIWOXSML2OZNNFRJS3P98RB7AJ6MHPB3D5CH2WN7ROML9Q9P4Q3N2H6TY9ZN7BD3TKAQRBL1H1CNYM0PGKOO15MKHD7EWY10H80LGVFYNBBMBAAS' where id=92; -update noar ti set v1='0EAB2PKE0VSX30YVSJQA0WHFBN56CHFLCMTLDOEWUL1C3F08S1X0K2PUNJ5KYJLIDKOQW3A4N9YDFQLLVGCUERSQUUCZZ6ZXF3PEKD643XONVHBU1OIBIUSV2A2M4PU7NUZAL01LUZJGUI1EQUIWOXSML2OZNNFRJS3P98RB7AJ6MHPB3D5CH2WN7ROML9Q9P4Q3N2H6TY9ZN7BD3TKAQRBL1H1CNYM0PGKOO15MKHD7EWY10H80LGVFYNBBMBAAS' where id=92; -update noar tt set v2='2NJ4IUDLWPW0YBQ67EP3TRNDYMEP4LMAEDSRCVHW3VU5VUJ7U401VU5DCVO6RN4GMFU95CZCBL5BPXISWPSS9ID05H21MC5TDAQ0MNWQ85E69KFY4JRALHNEFWV1JFGLIF1AFSEN2CN5GL463TT9RPUKNJITW5ICZ5SQXD4VSKU94C7T9WU6QFW8MIDHCYYNI18GYQ23M6RCB2MRHOXIB9H78YI3191CI8BVLAT9W6GKABFKVM0MGV7V0Y7XP4352' where id=92; -update noar ti set v2='2NJ4IUDLWPW0YBQ67EP3TRNDYMEP4LMAEDSRCVHW3VU5VUJ7U401VU5DCVO6RN4GMFU95CZCBL5BPXISWPSS9ID05H21MC5TDAQ0MNWQ85E69KFY4JRALHNEFWV1JFGLIF1AFSEN2CN5GL463TT9RPUKNJITW5ICZ5SQXD4VSKU94C7T9WU6QFW8MIDHCYYNI18GYQ23M6RCB2MRHOXIB9H78YI3191CI8BVLAT9W6GKABFKVM0MGV7V0Y7XP4352' where id=92; -update noar tt set v3='JOZ0SGSDWBX0I0Z1JWZROGVYLQGHVI5RA0YVPGEG4C2MVK3F8HKWBTNZN05KV4SJJVTFML71ERZ1M3ZDOBCUIHXBE4V01B35PYOFYJJ83OWOUY93SAUSE62ZX5WJZSNUNGTJSN3R56VNP5OG0VD9YS70FQQVCTMQKL434AS124GGPRJKQ7AVSWRYO6PA8KF035TVPFCDWAENYPUPF7ZQQLJQ291VD850Q2SFGTJ22TJDNQVP40O4LQS3DXZVO2ZZA' where id=92; -update noar ti set v3='JOZ0SGSDWBX0I0Z1JWZROGVYLQGHVI5RA0YVPGEG4C2MVK3F8HKWBTNZN05KV4SJJVTFML71ERZ1M3ZDOBCUIHXBE4V01B35PYOFYJJ83OWOUY93SAUSE62ZX5WJZSNUNGTJSN3R56VNP5OG0VD9YS70FQQVCTMQKL434AS124GGPRJKQ7AVSWRYO6PA8KF035TVPFCDWAENYPUPF7ZQQLJQ291VD850Q2SFGTJ22TJDNQVP40O4LQS3DXZVO2ZZA' where id=92; -update noar tt set v0='DGCYFK8V52C5Q39UFQQI6GFV9MS2STLV1IVMQE8B3D5XVXHY0JGLH4QVNXM5X63RMO9XNQRMK1ZBW8K9B9Q2J4ANK8XIV3UF00ZQ5ZP51Z77E1UDIA0TY82H5SWNODE7SSE3LZJK4SROJ3W4LTMA3VIKBR8AROSTKU634XKY2ZQUUPD4295PMJED0ZRVDXP3SSEVM6WBTPDS37NGXA8TSYQFN59LR83GEYD24W26KAJIRQ6EGYLXFXQI56ZO1TZ47' where id=93; -update noar ti set v0='DGCYFK8V52C5Q39UFQQI6GFV9MS2STLV1IVMQE8B3D5XVXHY0JGLH4QVNXM5X63RMO9XNQRMK1ZBW8K9B9Q2J4ANK8XIV3UF00ZQ5ZP51Z77E1UDIA0TY82H5SWNODE7SSE3LZJK4SROJ3W4LTMA3VIKBR8AROSTKU634XKY2ZQUUPD4295PMJED0ZRVDXP3SSEVM6WBTPDS37NGXA8TSYQFN59LR83GEYD24W26KAJIRQ6EGYLXFXQI56ZO1TZ47' where id=93; -update noar tt set v1='X6UQMQPRLVDDO364Q5ZVKKIG7150PHH2IAK1UJ14RPMFDIC60TSCUWPFG89I85K0VU78SVGB74XE5Z8LKMH8BJL3CRLZNRROZIKFGF8SOL88ODQOM3QL6Q2TVNAO0S5QCO7VDFWVGG9Y78D29XNKLPG34YXQO9B2G43AY2CH6ICUNC8TXAHI7IFF8IE19073OZDW4UNV3ODEXOWNIHGPQS8LFEY62R7E0XZOXM14YA0MNQ9URB12029KOXJS5ADWN' where id=93; -update noar ti set v1='X6UQMQPRLVDDO364Q5ZVKKIG7150PHH2IAK1UJ14RPMFDIC60TSCUWPFG89I85K0VU78SVGB74XE5Z8LKMH8BJL3CRLZNRROZIKFGF8SOL88ODQOM3QL6Q2TVNAO0S5QCO7VDFWVGG9Y78D29XNKLPG34YXQO9B2G43AY2CH6ICUNC8TXAHI7IFF8IE19073OZDW4UNV3ODEXOWNIHGPQS8LFEY62R7E0XZOXM14YA0MNQ9URB12029KOXJS5ADWN' where id=93; -update noar tt set v2='QK5GWKB4T0VEGNP4JCJGEB2RHM5X9S1A42N33117H88ETLIJU4Z9L53SLUMZYA3VA64420NO3LFARVDSTKHUNYW4VEMP5MELEDU587HXCS9AXDPI54AOPH8EDR8AO0BPDKQOLL4NY726N1KVLA044I0MVFU63X61H7H3E8W1UT097PUOPAI1VVTMT4APDE8LAB567UZ2964ZTXSHGDLODX8Q2VX6IUBT37EE9A9VRO9X6ZXGRD1SLLZLKIRUGFDF5' where id=93; -update noar ti set v2='QK5GWKB4T0VEGNP4JCJGEB2RHM5X9S1A42N33117H88ETLIJU4Z9L53SLUMZYA3VA64420NO3LFARVDSTKHUNYW4VEMP5MELEDU587HXCS9AXDPI54AOPH8EDR8AO0BPDKQOLL4NY726N1KVLA044I0MVFU63X61H7H3E8W1UT097PUOPAI1VVTMT4APDE8LAB567UZ2964ZTXSHGDLODX8Q2VX6IUBT37EE9A9VRO9X6ZXGRD1SLLZLKIRUGFDF5' where id=93; -update noar tt set v3='MD2G12QTM7C1ADRLCAQIA3K91899IXUVBL9I2R90EOCPMKM8METIYDDJFUZA85HDLDBO2KI30IAJC5P4L195QRIHBTV18I30GB5QWBG9DPU3S4SAP4BIRNUBW871W4BJJM4B8LRW7SNT7QEFBR7L5MU52JCAZOPWNGGDN63XUKKZL929LPWUY7IRYVHIROFE9K3WMFBYCWP21VFB3KI7QICAWU6OR4LGQHLFZ92FXZABR7D4B0O75LZKUU3GO8SEK' where id=93; -update noar ti set v3='MD2G12QTM7C1ADRLCAQIA3K91899IXUVBL9I2R90EOCPMKM8METIYDDJFUZA85HDLDBO2KI30IAJC5P4L195QRIHBTV18I30GB5QWBG9DPU3S4SAP4BIRNUBW871W4BJJM4B8LRW7SNT7QEFBR7L5MU52JCAZOPWNGGDN63XUKKZL929LPWUY7IRYVHIROFE9K3WMFBYCWP21VFB3KI7QICAWU6OR4LGQHLFZ92FXZABR7D4B0O75LZKUU3GO8SEK' where id=93; -update noar tt set v0='H11BFIZVDXIQJSLBQRQ5J8F5H50NY1Q8VIN7KZM72TOK3E1XBJXV3ABNPPV9FEH3RDYXGL37XK2Z2HOQVUTS3RBKHELHI08TJD0AFBBSCXGLRWMG3OZ6Q1GH49BSOIUWWXUM84S441W33FRE3U9XIS8F69LEXY81L4V8B9CEQ5AX7J2NR43W80IIRJXWDF20283YSJKHDB9GHMXWE988IXFUG29CCBKAEMAUPVA9L475WSXQ4VYI8UOOKCOT6X5TQ' where id=94; -update noar ti set v0='H11BFIZVDXIQJSLBQRQ5J8F5H50NY1Q8VIN7KZM72TOK3E1XBJXV3ABNPPV9FEH3RDYXGL37XK2Z2HOQVUTS3RBKHELHI08TJD0AFBBSCXGLRWMG3OZ6Q1GH49BSOIUWWXUM84S441W33FRE3U9XIS8F69LEXY81L4V8B9CEQ5AX7J2NR43W80IIRJXWDF20283YSJKHDB9GHMXWE988IXFUG29CCBKAEMAUPVA9L475WSXQ4VYI8UOOKCOT6X5TQ' where id=94; -update noar tt set v1='WPC7JU4ENGC774U45EX78DMKHIZ30Y3K57FQ8P0JCHM3YI794O39DLY2D7YS9LN5XZ9DCIAU3UHY4JG6OT9OCWJLIKCNX06RVYUML9WS0OA1ZCOO4AHXOH1Y34KPHYO9MU09DH88J4IBADOPC5TCADI3OFDFJGW5IE96ZFXVXLL3ZGVANB637LHS7F6NXHDH49C6ULHU8KX8W86TZV1BEWS7HEVXDDM41IKMXB862OJCRRP86M7O10GTZF73CQIVE' where id=94; -update noar ti set v1='WPC7JU4ENGC774U45EX78DMKHIZ30Y3K57FQ8P0JCHM3YI794O39DLY2D7YS9LN5XZ9DCIAU3UHY4JG6OT9OCWJLIKCNX06RVYUML9WS0OA1ZCOO4AHXOH1Y34KPHYO9MU09DH88J4IBADOPC5TCADI3OFDFJGW5IE96ZFXVXLL3ZGVANB637LHS7F6NXHDH49C6ULHU8KX8W86TZV1BEWS7HEVXDDM41IKMXB862OJCRRP86M7O10GTZF73CQIVE' where id=94; -update noar tt set v2='TQO5EOT4LBPGC3PCJIJVZ6YMHOEZPSCI8S6HDAPJTS95E178XYUY53HFHSYXT4I9ELX7G2QDOBSD76ABGMHY2W96V0KT7FTF18035Y6RW8NDFPZBYSCJY99IM1PV0ELMI1QKN3ZAUQM8RY6VOY7MREQLGLCVYLOXQZ2L9CK4R5J3R0ZVZZBSJWZFDH25K8LNM3OPHZE57ENKK8TLLIJS6PV1Q011NCHGD61BLGZZD3KZD4X8U0XTPN57J873UHG6P' where id=94; -update noar ti set v2='TQO5EOT4LBPGC3PCJIJVZ6YMHOEZPSCI8S6HDAPJTS95E178XYUY53HFHSYXT4I9ELX7G2QDOBSD76ABGMHY2W96V0KT7FTF18035Y6RW8NDFPZBYSCJY99IM1PV0ELMI1QKN3ZAUQM8RY6VOY7MREQLGLCVYLOXQZ2L9CK4R5J3R0ZVZZBSJWZFDH25K8LNM3OPHZE57ENKK8TLLIJS6PV1Q011NCHGD61BLGZZD3KZD4X8U0XTPN57J873UHG6P' where id=94; -update noar tt set v3='W9Y750CILBYT3Z127LDRTG7RZQNCVB9OAQIHMSOSYM82F7H732IZ5WAO0NBY15SXE9N2H3PSRLAL75FT9KDW79M1SE9T89ANRHNAAA11CIE0AI2NCZVFJFT0EP3ZWYLVRY354B1AS2OXH889OCQ9CRQGZ9RRS6DNFY7Y6PL3CREQH6B3OXWMIWX3BQR8DD5AE43Z1DBC8KRZVS5GZZ2YKX3113TMGB15TE6CI97A51SJSI25JZ0L86UCUV44HERY5' where id=94; -update noar ti set v3='W9Y750CILBYT3Z127LDRTG7RZQNCVB9OAQIHMSOSYM82F7H732IZ5WAO0NBY15SXE9N2H3PSRLAL75FT9KDW79M1SE9T89ANRHNAAA11CIE0AI2NCZVFJFT0EP3ZWYLVRY354B1AS2OXH889OCQ9CRQGZ9RRS6DNFY7Y6PL3CREQH6B3OXWMIWX3BQR8DD5AE43Z1DBC8KRZVS5GZZ2YKX3113TMGB15TE6CI97A51SJSI25JZ0L86UCUV44HERY5' where id=94; -update noar tt set v0='6EH7QOIVOHN03HU0CUMJ0N2D4WM04O1P7UFKK2HJAP1A4PMOYXI4UB7SJ9NQ6K734OVFRAAB7L7IC1AZGVYECSFPS1KJX2XBJOGLFLSRADJLPSVOD56DXV0G8I7OFHH9UW9XCKR7F0547HZ1ZA6QN1PQBA25HW02EWAR909H3KZ7P8ULQXK07MRWELUUG6DR6S9WPU0OSPM73B5JMJ0R3PNTDT37JZB28VCUZQWFZYKXP25LGAMWXWZ9G6E40AF5X' where id=95; -update noar ti set v0='6EH7QOIVOHN03HU0CUMJ0N2D4WM04O1P7UFKK2HJAP1A4PMOYXI4UB7SJ9NQ6K734OVFRAAB7L7IC1AZGVYECSFPS1KJX2XBJOGLFLSRADJLPSVOD56DXV0G8I7OFHH9UW9XCKR7F0547HZ1ZA6QN1PQBA25HW02EWAR909H3KZ7P8ULQXK07MRWELUUG6DR6S9WPU0OSPM73B5JMJ0R3PNTDT37JZB28VCUZQWFZYKXP25LGAMWXWZ9G6E40AF5X' where id=95; -update noar tt set v1='5F5NA2DAJF52WVJZIPTVS277X9YJG5X0WE98SRQ5P00TF072U92VFG5BEHZXIPB9Y88137RSUR571QM9AGC0ZNDMOXTYOFW08LVJSF3EL4KQIDZN3MO28KE1WMNPPK4VM5A1AO65SDLFUSQYO0ZED3HKFG05JWNFC99GMC23K1LYC78RTJINJVZU2LI75M35MQZ3UU2ZMYDL2T0FTUDJ4RE74UE9AKYU6D4F7O9MY5SVPBBCFSVD0EAZAHBJVWK88' where id=95; -update noar ti set v1='5F5NA2DAJF52WVJZIPTVS277X9YJG5X0WE98SRQ5P00TF072U92VFG5BEHZXIPB9Y88137RSUR571QM9AGC0ZNDMOXTYOFW08LVJSF3EL4KQIDZN3MO28KE1WMNPPK4VM5A1AO65SDLFUSQYO0ZED3HKFG05JWNFC99GMC23K1LYC78RTJINJVZU2LI75M35MQZ3UU2ZMYDL2T0FTUDJ4RE74UE9AKYU6D4F7O9MY5SVPBBCFSVD0EAZAHBJVWK88' where id=95; -update noar tt set v2='Q2LDQOBULXJYLQOXWFCE3RSBY0V05RTKQCTYQETDUKUJZTLUUK01X7HGB4X0UZ67YG2CYE7O5PWYKXCOT9LNCVKWEG5Q4IGA5W4T9T1NFPA4LJ7EISBXHWA109RFB5AJMM2O7MZ57HHCD71E6AMLOFC90MSKXPUTW58D12FDRPUSZ18Z2R75D7Q0ED2BHKHAH6NT0BUDYBY6EIVCMATYKT7O6O51FDWA5LJPF3DLQF7NJVS5I7A3XG3L2B33K1O7V' where id=95; -update noar ti set v2='Q2LDQOBULXJYLQOXWFCE3RSBY0V05RTKQCTYQETDUKUJZTLUUK01X7HGB4X0UZ67YG2CYE7O5PWYKXCOT9LNCVKWEG5Q4IGA5W4T9T1NFPA4LJ7EISBXHWA109RFB5AJMM2O7MZ57HHCD71E6AMLOFC90MSKXPUTW58D12FDRPUSZ18Z2R75D7Q0ED2BHKHAH6NT0BUDYBY6EIVCMATYKT7O6O51FDWA5LJPF3DLQF7NJVS5I7A3XG3L2B33K1O7V' where id=95; -update noar tt set v3='REKOS1KNF5KJOVW58D7X5AZP883BHX8A2GOE8FJBNYXBKMERMYY2L2L0LMTNYNK538E4MJN79BEQ76KVF3Q26VNTZY7HEHZI2L1VXJK5KI1CC5SWNZF96V8H533EF2C331NZX1RTUIIXAGBX9M3UQPZDLM7R5FVO0T1BU1EGM3W9KVYOLELU65V7WWHSYNA6AQNBPEL9M4PGIOJG8XN8M9ZV1TM6XBLUEZKQGX2WDEIN9EE7QOOB7LO7HF833O9U8' where id=95; -update noar ti set v3='REKOS1KNF5KJOVW58D7X5AZP883BHX8A2GOE8FJBNYXBKMERMYY2L2L0LMTNYNK538E4MJN79BEQ76KVF3Q26VNTZY7HEHZI2L1VXJK5KI1CC5SWNZF96V8H533EF2C331NZX1RTUIIXAGBX9M3UQPZDLM7R5FVO0T1BU1EGM3W9KVYOLELU65V7WWHSYNA6AQNBPEL9M4PGIOJG8XN8M9ZV1TM6XBLUEZKQGX2WDEIN9EE7QOOB7LO7HF833O9U8' where id=95; -update noar tt set v0='FAAXUMQKWZIUTMKRYCF2CX25NLPKPG6MQ8CO4N030L52E79HDW3Q4LS2CV8F4WYKWQPP9QFJ9ES33XKMXLOMGXWVVHMGJNWUJG1X2EQA20K01CK855O3OED02VIG92SWAKHS4265HHUDIV4YZJYOXVD706BTSZV128OGQ6UKU4BHIYCCTMHA7Y92D8J9Y4X2D6BXIOYFX6D4E0OXULQUCK5JOU3P55M7QY7P6SB1GVJFZPJ887Q2LYXHQ6TZJ8UH8' where id=96; -update noar ti set v0='FAAXUMQKWZIUTMKRYCF2CX25NLPKPG6MQ8CO4N030L52E79HDW3Q4LS2CV8F4WYKWQPP9QFJ9ES33XKMXLOMGXWVVHMGJNWUJG1X2EQA20K01CK855O3OED02VIG92SWAKHS4265HHUDIV4YZJYOXVD706BTSZV128OGQ6UKU4BHIYCCTMHA7Y92D8J9Y4X2D6BXIOYFX6D4E0OXULQUCK5JOU3P55M7QY7P6SB1GVJFZPJ887Q2LYXHQ6TZJ8UH8' where id=96; -update noar tt set v1='AVB7L0JPH7EAEIWJBTF17FS34SU9LT3GWLYWJWL0X0V0YUYBT85P9Q9IX57TTDUA609O7RVDVLXX2IQJ9DBLZYUVSEXDK8Z2VC0HB9JRMM98OXK7ZUF4BQEB7EPO39U9IPFG0G0MIAMDWGNWYQC1QHAQYEOHXZ6TBV39QKF5WLF25I8OMWMRTW81SC9JEPIFVQNKTTATW720V9Y8HIS1XJT9UGXWJZFK3OJZ98Q30AR38GURYFZPVLAEXMWF1TLZ7' where id=96; -update noar ti set v1='AVB7L0JPH7EAEIWJBTF17FS34SU9LT3GWLYWJWL0X0V0YUYBT85P9Q9IX57TTDUA609O7RVDVLXX2IQJ9DBLZYUVSEXDK8Z2VC0HB9JRMM98OXK7ZUF4BQEB7EPO39U9IPFG0G0MIAMDWGNWYQC1QHAQYEOHXZ6TBV39QKF5WLF25I8OMWMRTW81SC9JEPIFVQNKTTATW720V9Y8HIS1XJT9UGXWJZFK3OJZ98Q30AR38GURYFZPVLAEXMWF1TLZ7' where id=96; -update noar tt set v2='VTGHTU2UTBEA0Q2C9VHJBGB3A2SG9YL68EH0N3HKIN8RL3ZQM9G2MYZCICJ5X9WGJ26HGLNXGBD61ZT3VPTRUT9V2NSPA2441VQYACSCM3J160CYBZ71PWWKPI1THMQWXD7RSQBBLQYJB9GYLIXSLXIHBVMFAEVGR1H4SRKMCTFX0EKVVM8UQ394F22FVZPTO8LNA3N7BCASHK7YOZM2AMW03PXHD7K4IKSHBZ524VRRER0T35PZICZNHSFO34Z4W' where id=96; -update noar ti set v2='VTGHTU2UTBEA0Q2C9VHJBGB3A2SG9YL68EH0N3HKIN8RL3ZQM9G2MYZCICJ5X9WGJ26HGLNXGBD61ZT3VPTRUT9V2NSPA2441VQYACSCM3J160CYBZ71PWWKPI1THMQWXD7RSQBBLQYJB9GYLIXSLXIHBVMFAEVGR1H4SRKMCTFX0EKVVM8UQ394F22FVZPTO8LNA3N7BCASHK7YOZM2AMW03PXHD7K4IKSHBZ524VRRER0T35PZICZNHSFO34Z4W' where id=96; -update noar tt set v3='UFJ5JLTP7WUETVGL7QAV005KL9XZ2MNNTHP7O5012TUVA6BGJ79UDMQC5OGYYCW98IZ1WOW35ZB0FSGY2BP8FGJZZ835HRNPSDJ6M2SSWLYMO2IJ6J5F0VYS84NKECE7X53K6RTBDDO0VB3ZM32Z49M8ZCVN7GT8IVEQ9O3SNQMRNY65CRVAK1VSI55E8ZUVY4IWHF6GFI7X6G6H2R75IGA1ASR0BGVBDF32IYWT4DSPJ1II3UCA9D19FLX3NC2ZX' where id=96; -update noar ti set v3='UFJ5JLTP7WUETVGL7QAV005KL9XZ2MNNTHP7O5012TUVA6BGJ79UDMQC5OGYYCW98IZ1WOW35ZB0FSGY2BP8FGJZZ835HRNPSDJ6M2SSWLYMO2IJ6J5F0VYS84NKECE7X53K6RTBDDO0VB3ZM32Z49M8ZCVN7GT8IVEQ9O3SNQMRNY65CRVAK1VSI55E8ZUVY4IWHF6GFI7X6G6H2R75IGA1ASR0BGVBDF32IYWT4DSPJ1II3UCA9D19FLX3NC2ZX' where id=96; -update noar tt set v0='2257OFXUKLFS2FB5DWHAL2W2YCLFCWSIZ1OYHQXG7DIU8MR0M5N22GZHSIK17MSZ19SGW6LWPUS6DEMLI8LNUHYOUUR6VHWJ9V1EOFVTKPH91AIG559AH6VGZHGDW5G42RCTNQ9LVVYHOQZ9P0VEW0D96WCJHSKUG07ZZFZUB6Q2J4RQ828O09OHJJOP8XF5R5WYBRYCVZL965JLKB58YMLXOMHO8MJTI8SO3XB8QX30O4Z1TY5OTCC734ISR5OR8' where id=97; -update noar ti set v0='2257OFXUKLFS2FB5DWHAL2W2YCLFCWSIZ1OYHQXG7DIU8MR0M5N22GZHSIK17MSZ19SGW6LWPUS6DEMLI8LNUHYOUUR6VHWJ9V1EOFVTKPH91AIG559AH6VGZHGDW5G42RCTNQ9LVVYHOQZ9P0VEW0D96WCJHSKUG07ZZFZUB6Q2J4RQ828O09OHJJOP8XF5R5WYBRYCVZL965JLKB58YMLXOMHO8MJTI8SO3XB8QX30O4Z1TY5OTCC734ISR5OR8' where id=97; -update noar tt set v1='PCWGA3O10XR00QS2SWXP0U7JQH8G0O5U6H3GK8TONZCESJJBF97BKWFRCNE9N58SPDMWIC3QL7U4QD3MBLMVAJO062J3JLE6HBNUOV6SJL0UEZLQKG80ZG4DS51V9NU9DQICOPGAXPNUO59V680NATGNIH0E5O0KJE30NNW4ZZ0ILP5H9QS5ZJ8RHT1MG8QABXSRVS0RS4C661EW8YNO3X6ZWMLZ133IHJVUPJNUPKTCXT027620U4IYBPPZ14E0L' where id=97; -update noar ti set v1='PCWGA3O10XR00QS2SWXP0U7JQH8G0O5U6H3GK8TONZCESJJBF97BKWFRCNE9N58SPDMWIC3QL7U4QD3MBLMVAJO062J3JLE6HBNUOV6SJL0UEZLQKG80ZG4DS51V9NU9DQICOPGAXPNUO59V680NATGNIH0E5O0KJE30NNW4ZZ0ILP5H9QS5ZJ8RHT1MG8QABXSRVS0RS4C661EW8YNO3X6ZWMLZ133IHJVUPJNUPKTCXT027620U4IYBPPZ14E0L' where id=97; -update noar tt set v2='T58S91X3BNFNRYPR3IMKC9D6UJOZA7BJ19Q9EC0TZJFHJIQAI8C4RUE71REVF85BRQ7M7UAPK6L2UUW6WVTGY9W2JAN1D1WLC5OV8DL7ZXUT6QAPLSR5VX5I7JEE0ZLBUVV0ST7LBH7444Y01YJ0TZGX3LFKAGPPWMGTQ3KJ4FV9Q9L3M6Q0BXTOYTH225XK5NG9Y3MD8WBI2CN2PIUNONJXQGXXJ8GIZMDWFWNV7L9IJXVPDJAXISI14EQD0I1LL' where id=97; -update noar ti set v2='T58S91X3BNFNRYPR3IMKC9D6UJOZA7BJ19Q9EC0TZJFHJIQAI8C4RUE71REVF85BRQ7M7UAPK6L2UUW6WVTGY9W2JAN1D1WLC5OV8DL7ZXUT6QAPLSR5VX5I7JEE0ZLBUVV0ST7LBH7444Y01YJ0TZGX3LFKAGPPWMGTQ3KJ4FV9Q9L3M6Q0BXTOYTH225XK5NG9Y3MD8WBI2CN2PIUNONJXQGXXJ8GIZMDWFWNV7L9IJXVPDJAXISI14EQD0I1LL' where id=97; -update noar tt set v3='ELR5OYU9FXZFHMBF3J2HG47AII8Y02M473OWKDEZ2AK6V3JKJWXQLM4K1Z27YA0VS6ZROJNK2RVEGWWEQBNK0AAPXZUSCJUQKD4NOGVMX3T6BNJSAGTV6NJHQHPHUZ85YJXVUD9FM1K6RK855XRKYU4MVDNB6PH9NY9OGOHR5E04LA34YRE4L8P780ERJD5OAG347T8XAMB038NGQADTYLX3PDI0MN1IXYK1A1OEZC6AIED8IPYFMQ59QQGOGLP93' where id=97; -update noar ti set v3='ELR5OYU9FXZFHMBF3J2HG47AII8Y02M473OWKDEZ2AK6V3JKJWXQLM4K1Z27YA0VS6ZROJNK2RVEGWWEQBNK0AAPXZUSCJUQKD4NOGVMX3T6BNJSAGTV6NJHQHPHUZ85YJXVUD9FM1K6RK855XRKYU4MVDNB6PH9NY9OGOHR5E04LA34YRE4L8P780ERJD5OAG347T8XAMB038NGQADTYLX3PDI0MN1IXYK1A1OEZC6AIED8IPYFMQ59QQGOGLP93' where id=97; -update noar tt set v0='PPZV0EDGI7ZL7GY81JGDYNOM2C58PD0MX2XFOC99C94BIPS89HBE0QWJM69W5TX37WICUILTDTERRFN8MNR4CK2WVKMXJI2LZAZTQTIKXDKIWXQZW34FCSP64P9QCAFNBDBJCODEGPCFVP5AZC3GYEXIMWB8IU7PVBUXK481YL49T4P99H0CI6WCMZBNEDT500DG6DE1F6QM5IQGW5I4MHQVKEHGMOYE8A66AC946MRUPJ8WMJ2CGBPTQT8VYYMUF' where id=98; -update noar ti set v0='PPZV0EDGI7ZL7GY81JGDYNOM2C58PD0MX2XFOC99C94BIPS89HBE0QWJM69W5TX37WICUILTDTERRFN8MNR4CK2WVKMXJI2LZAZTQTIKXDKIWXQZW34FCSP64P9QCAFNBDBJCODEGPCFVP5AZC3GYEXIMWB8IU7PVBUXK481YL49T4P99H0CI6WCMZBNEDT500DG6DE1F6QM5IQGW5I4MHQVKEHGMOYE8A66AC946MRUPJ8WMJ2CGBPTQT8VYYMUF' where id=98; -update noar tt set v1='MHE8ZHDRQMBO2NN7RQVMUJNFF1HZJLSBMHBYWO0YAZFO3D28C3O0GYH3IMCKBH8IOCIGWS89W56Y0J96HMUKJKCYOMWDTH02RYZ54WLQGERGQ3T92H7KUGYKS8OI06GGE04RAHEJ33BTF8KGBPCBJC62UP4K4T8X1M0MX4S8GIYGUTV0YKAAJVOPZTTMMYTK9KMCHHXTLHN36J88IFHW37N3J9FRTZDTI2EYW7XDNHYXZ6AB5XCNMQP8MMPVTO4M3' where id=98; -update noar ti set v1='MHE8ZHDRQMBO2NN7RQVMUJNFF1HZJLSBMHBYWO0YAZFO3D28C3O0GYH3IMCKBH8IOCIGWS89W56Y0J96HMUKJKCYOMWDTH02RYZ54WLQGERGQ3T92H7KUGYKS8OI06GGE04RAHEJ33BTF8KGBPCBJC62UP4K4T8X1M0MX4S8GIYGUTV0YKAAJVOPZTTMMYTK9KMCHHXTLHN36J88IFHW37N3J9FRTZDTI2EYW7XDNHYXZ6AB5XCNMQP8MMPVTO4M3' where id=98; -update noar tt set v2='SWJ9LT09OCC8EVXVTOFW27OXE71E9F49XOLWOG49Z8755GNPS5QH5X6AJ3IUPOGR0R6DQY9ABXIEZB3KQLRLMT50C7YVDJ0F4A3RRJ42N19UFEM34Y6115Y4UBLY7RA794MV1DZGDXR34T8KB6QR2ZFX3ZX8UT0965P9T2FR51JGBS3VOWPR5SD9IRGI9Y62NQ9WH569HZBM8IHAAVZ7Q9EZEE9J95ZYYC4QAOHY9GMUD2QMGEJYL5QSEC6MHXD4K' where id=98; -update noar ti set v2='SWJ9LT09OCC8EVXVTOFW27OXE71E9F49XOLWOG49Z8755GNPS5QH5X6AJ3IUPOGR0R6DQY9ABXIEZB3KQLRLMT50C7YVDJ0F4A3RRJ42N19UFEM34Y6115Y4UBLY7RA794MV1DZGDXR34T8KB6QR2ZFX3ZX8UT0965P9T2FR51JGBS3VOWPR5SD9IRGI9Y62NQ9WH569HZBM8IHAAVZ7Q9EZEE9J95ZYYC4QAOHY9GMUD2QMGEJYL5QSEC6MHXD4K' where id=98; -update noar tt set v3='JCOI29KEC0NYM1G3ZGCEYW8GGJKG8BZ5XNK0WKBWU0H0RN3XJ3GT5L2Y7LF0PHRE0KNCX9EOE6KMCPZJ5CWA88C6YAEGS4U5LNQ55CFUQCF8PIIT9VV4NHMV0MHM91D01NGTTVY3Z4B1O7QQNZGB52781EYNX0UT5OQMD19IETHNFI1FH80HS03RXPJRA49448T726CY77U5T338NONRYUF2PP40D3Z05LG8V0382Y7ULY0UR5ZVZ1BB812OQUEBT' where id=98; -update noar ti set v3='JCOI29KEC0NYM1G3ZGCEYW8GGJKG8BZ5XNK0WKBWU0H0RN3XJ3GT5L2Y7LF0PHRE0KNCX9EOE6KMCPZJ5CWA88C6YAEGS4U5LNQ55CFUQCF8PIIT9VV4NHMV0MHM91D01NGTTVY3Z4B1O7QQNZGB52781EYNX0UT5OQMD19IETHNFI1FH80HS03RXPJRA49448T726CY77U5T338NONRYUF2PP40D3Z05LG8V0382Y7ULY0UR5ZVZ1BB812OQUEBT' where id=98; -update noar tt set v0='L2I9WV9C7179KOVWGEBPR14V2R8KHW9ADCF27C1QS2LWYBOU4SIPEJK86PMMNGZQ5XDXPT4QNS3F5N8DN5L9V934ER2JYAA6PFZ61WPBVDB3WMEBAVQZ53B64V74RRA1Z6KC9EFI9ZGDJU45WJY7XIQGUUXRCI60EA6AUCYI36RON8K1E1Z4BSYK1N2GPWKPK8K25XEJWH99NK5BGSUZGMSDT15D6I2A9BNHMS4DUFFGTX9TBHKDULLZTUENPHXSB' where id=99; -update noar ti set v0='L2I9WV9C7179KOVWGEBPR14V2R8KHW9ADCF27C1QS2LWYBOU4SIPEJK86PMMNGZQ5XDXPT4QNS3F5N8DN5L9V934ER2JYAA6PFZ61WPBVDB3WMEBAVQZ53B64V74RRA1Z6KC9EFI9ZGDJU45WJY7XIQGUUXRCI60EA6AUCYI36RON8K1E1Z4BSYK1N2GPWKPK8K25XEJWH99NK5BGSUZGMSDT15D6I2A9BNHMS4DUFFGTX9TBHKDULLZTUENPHXSB' where id=99; -update noar tt set v1='3YNWGOW6CV4GMJAWES6GY0RIZLCYXJQV0GP9SB089WRV1LAIIQOEHS1NDVZTD0N5DJH6SFXIAR5B86F4F14CK9ND8RZOQ55X59PK3L7Z8E36UNTNFE5C1852AZEC1P1TY8QPINDZO5QBSBKRXOG0TWE4OAJ082PIO6KJZVMHDI5ANLKLPRP7N9O6OIFJLB5EM9M04SGFOWSRJDGPZJXGUUHUE9VRY21DM7A0RC6N3YZFNJG8Q6XQIY3J8JTQRO64V' where id=99; -update noar ti set v1='3YNWGOW6CV4GMJAWES6GY0RIZLCYXJQV0GP9SB089WRV1LAIIQOEHS1NDVZTD0N5DJH6SFXIAR5B86F4F14CK9ND8RZOQ55X59PK3L7Z8E36UNTNFE5C1852AZEC1P1TY8QPINDZO5QBSBKRXOG0TWE4OAJ082PIO6KJZVMHDI5ANLKLPRP7N9O6OIFJLB5EM9M04SGFOWSRJDGPZJXGUUHUE9VRY21DM7A0RC6N3YZFNJG8Q6XQIY3J8JTQRO64V' where id=99; -update noar tt set v2='2QS184OQUSY2T1FOAWQIE57GN9DGAXSDLAASV89Q3FBLHZXOLFJUFNBHVAHYXCG42R8PZL3BQ1RRAID83P7N4YMMGZDKG4UM7CKVVJN5M36MR574PDLC1ADMBHRFLO4CO39HP4LPUMMVY22M0QDSJILNIM4H7YUS32R8OE7MURE1N2GIRB93JQUHY5OZG743QWEY6Y98ADMP7P1YL3XDBSVZKQ2DVLN4NTC37HV3F1T0OZ5ATLLGTZPARNF4BII0A' where id=99; -update noar ti set v2='2QS184OQUSY2T1FOAWQIE57GN9DGAXSDLAASV89Q3FBLHZXOLFJUFNBHVAHYXCG42R8PZL3BQ1RRAID83P7N4YMMGZDKG4UM7CKVVJN5M36MR574PDLC1ADMBHRFLO4CO39HP4LPUMMVY22M0QDSJILNIM4H7YUS32R8OE7MURE1N2GIRB93JQUHY5OZG743QWEY6Y98ADMP7P1YL3XDBSVZKQ2DVLN4NTC37HV3F1T0OZ5ATLLGTZPARNF4BII0A' where id=99; -update noar tt set v3='GSTHW6G2VM1R3YG9RI9KQIMUAO37JPPXHVUL6AXRRA1AV2730CYIKKOQTAL1A2S4NFSV1YDKRWE854E2I7XY12GYDJ1P41WMFYOA3IW4UPAXR1JI5B5RNJI9IXZJEXOT7DWI6XUZ1GF6HDNU480SB6HNM6ZEJBROFRWEIK0T12CCTP7VOQ10H18WGEG5K9NCSGCO6B3328U663KYNC107S58LHXF02I2WI69CBGF3OE2ISAOYH2UIDN7PWFVR5XNL' where id=99; -update noar ti set v3='GSTHW6G2VM1R3YG9RI9KQIMUAO37JPPXHVUL6AXRRA1AV2730CYIKKOQTAL1A2S4NFSV1YDKRWE854E2I7XY12GYDJ1P41WMFYOA3IW4UPAXR1JI5B5RNJI9IXZJEXOT7DWI6XUZ1GF6HDNU480SB6HNM6ZEJBROFRWEIK0T12CCTP7VOQ10H18WGEG5K9NCSGCO6B3328U663KYNC107S58LHXF02I2WI69CBGF3OE2ISAOYH2UIDN7PWFVR5XNL' where id=99; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; +--source ../include/fast_update_gen_header.inc + +--let GENERATED=$MYSQL_TMP_DIR/generated_fast_update_varchar.inc + +--perl + my $nrows = 100; + open(FILE, '>', "$ENV{GENERATED}") or die; + foreach my $t ('varchar', 'varbinary') { + foreach my $l (32, 256) { + foreach my $n ('null', 'not null') { + test_varchar($t, $l, $n, $nrows) + } + } + } + close FILE; + + sub test_varchar { + my $t = shift; + my $l = shift; + my $n = shift; + my $nrows = shift; + + print FILE "create table tt (id bigint unsigned primary key,\n"; + print FILE " f0 int $n,\n"; + foreach my $i (0..3) { + print FILE " v$i $t($l) $n,\n"; + } + print FILE " b0 text $n\n"; + print FILE ") engine=tokudb;\n"; + + if ($n eq 'null') { + print FILE "insert into tt (id) values (0);\n"; + } + print FILE "insert into tt values (1, 2, 'a', 'b', 'c', 'd', 'e');\n"; + foreach my $i (2..($nrows - 1)) { + print FILE "insert into tt values ($i, ". + ($i + 1). + ", '', '', '', '', '');\n"; + } + + print FILE "create table ti like tt;\n"; + print FILE "alter table ti engine=innodb;\n"; + print FILE "insert into ti select * from tt;\n"; + + my @nulltest = ('null this', 'null is', 'null a', 'null test'); + foreach my $i (0..$#nulltest) { + print FILE "update tt set v$i = '$nulltest[$i] $i' where id = 0;\n"; + print FILE "update ti set v$i = '$nulltest[$i] $i' where id = 0;\n"; + } + + my @test = ('this' ,'is', 'another', 'test'); + foreach my $i (0..$#test) { + print FILE "update tt set v$i = '$test[$i] $i' where id = 1;\n"; + print FILE "update ti set v$i='$test[$i] $i' where id = 1;\n"; + } + + foreach my $id (2 .. ($nrows - 1)) { + foreach my $i (0 .. 3) { + my $long_str = rnd_str($l, ("A" .. "Z", 0 .. 9)); + print FILE "update tt set v$i='$long_str' where id=$id;\n"; + print FILE "update ti set v$i='$long_str' where id=$id;\n"; + } + } + + print FILE 'let $diff_tables = test.tt, test.ti;'."\n"; + print FILE "source include/diff_tables.inc;\n"; + + print FILE "drop table tt, ti;\n"; + } + + sub rnd_str { join '', @_[ map{ rand @_ } 1 .. shift ] } + +EOF + +--source ../include/fast_update_gen_footer_silent.inc diff --git a/mysql-test/suite/tokudb/t/fast_upsert_bin_pad.test b/mysql-test/suite/tokudb/t/fast_upsert_bin_pad.test index d1eb8500c556..5673c9d1542b 100644 --- a/mysql-test/suite/tokudb/t/fast_upsert_bin_pad.test +++ b/mysql-test/suite/tokudb/t/fast_upsert_bin_pad.test @@ -1,21 +1,16 @@ source include/have_tokudb.inc; -set default_storage_engine='tokudb'; +set tokudb_enable_fast_upsert=1; +source ../include/setup_fast_update_upsert.inc; -disable_warnings; -drop table if exists t0, t1; -enable_warnings; - -set tokudb_disable_slow_upsert=1; - -create table t0 (id int primary key, b binary(32)); +create table t0 (id int primary key, b binary(32)) engine = tokudb; create table t1 like t0; -insert noar into t0 values (1,'hi'),(2,'there'); +insert into t0 values (1,'hi'),(2,'there'); select * from t0; -insert noar into t1 values (1,null),(2,null); -insert noar into t1 values (1,null) on duplicate key update b='hi'; -insert noar into t1 values (2,null) on duplicate key update b='there'; +insert into t1 values (1,null),(2,null); +insert into t1 values (1,null) on duplicate key update b='hi'; +insert into t1 values (2,null) on duplicate key update b='there'; select * from t1; let $diff_tables = test.t0, test.t1; diff --git a/mysql-test/suite/tokudb/t/fast_upsert_char.test b/mysql-test/suite/tokudb/t/fast_upsert_char.test index aa06b3202e4d..afe4d3c86dcf 100644 --- a/mysql-test/suite/tokudb/t/fast_upsert_char.test +++ b/mysql-test/suite/tokudb/t/fast_upsert_char.test @@ -1,35 +1,30 @@ source include/have_tokudb.inc; source include/have_innodb.inc; -set default_storage_engine='tokudb'; +set tokudb_enable_fast_upsert=1; +source ../include/setup_fast_update_upsert.inc; -disable_warnings; -drop table if exists tt, ti; -enable_warnings; - -set tokudb_disable_slow_upsert=1; - -create table tt (id int primary key, c char(32), b binary(32)); +create table tt (id int primary key, c char(32), b binary(32)) engine = tokudb; create table ti like tt; alter table ti engine=innodb; -insert noar into tt values (1,null,null) on duplicate key update c='hi'; -insert noar into ti values (1,null,null) on duplicate key update c='hi'; +insert into tt values (1,null,null) on duplicate key update c='hi'; +insert into ti values (1,null,null) on duplicate key update c='hi'; let $diff_tables = test.tt, test.ti; source include/diff_tables.inc; -insert noar into tt values (1,null,null) on duplicate key update c='there'; -insert noar into ti values (1,null,null) on duplicate key update c='there'; +insert into tt values (1,null,null) on duplicate key update c='there'; +insert into ti values (1,null,null) on duplicate key update c='there'; let $diff_tables = test.tt, test.ti; source include/diff_tables.inc; -insert noar into tt values (1,null,null) on duplicate key update b='you'; -insert noar into ti values (1,null,null) on duplicate key update b='you'; +insert into tt values (1,null,null) on duplicate key update b='you'; +insert into ti values (1,null,null) on duplicate key update b='you'; let $diff_tables = test.tt, test.ti; source include/diff_tables.inc; -insert noar into tt values (1,null,null) on duplicate key update b='people'; -insert noar into ti values (1,null,null) on duplicate key update b='people'; +insert into tt values (1,null,null) on duplicate key update b='people'; +insert into ti values (1,null,null) on duplicate key update b='people'; let $diff_tables = test.tt, test.ti; source include/diff_tables.inc; diff --git a/mysql-test/suite/tokudb/t/fast_upsert_deadlock.test b/mysql-test/suite/tokudb/t/fast_upsert_deadlock.test index 66b212f3c24c..63452a4766f7 100644 --- a/mysql-test/suite/tokudb/t/fast_upsert_deadlock.test +++ b/mysql-test/suite/tokudb/t/fast_upsert_deadlock.test @@ -1,30 +1,32 @@ source include/have_tokudb.inc; -disable_warnings; -drop table if exists t; -enable_warnings; +set tokudb_enable_fast_upsert=1; +source ../include/setup_fast_update_upsert.inc; -set default_storage_engine='tokudb'; - -create table t (id bigint primary key, b bigint not null default 0); +create table t (id bigint primary key, b bigint not null default 0) + engine = tokudb; connect (conn1,localhost,root,,); +SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'STRICT_TRANS_TABLES','')); +SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'STRICT_ALL_TABLES','')); + +set tokudb_enable_fast_upsert=1; connection default; begin; -insert noar into t (id) values (1) on duplicate key update b=b+1; +insert into t (id) values (1) on duplicate key update b=b+1; connection conn1; begin; -insert noar into t (id) values (2) on duplicate key update b=b-1; +insert into t (id) values (2) on duplicate key update b=b-1; connection default; -send insert noar into t (id) values (2) on duplicate key update b=b+1; +send insert into t (id) values (2) on duplicate key update b=b+1; connection conn1; sleep 1; error 1205,1213; -insert noar into t (id) values (1) on duplicate key update b=b-1; +insert into t (id) values (1) on duplicate key update b=b-1; rollback; connection default; diff --git a/mysql-test/suite/tokudb/t/fast_upsert_int.py b/mysql-test/suite/tokudb/t/fast_upsert_int.py deleted file mode 100644 index a19227ec20d8..000000000000 --- a/mysql-test/suite/tokudb/t/fast_upsert_int.py +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/env python - -import sys - -def main(): - print "# generated by tokudb_upsert_int.py" - print "source include/have_tokudb.inc;" - print "source include/have_innodb.inc;" - print "set default_storage_engine='tokudb';" - print "disable_warnings;" - print "drop table if exists tt, ti;" - print "enable_warnings;" - - print "set tokudb_disable_slow_update=1;" - - for t in [ 'tinyint', 'smallint', 'mediumint', 'int', 'bigint' ]: - for u in [ '', 'unsigned' ]: - for n in [ 'null', 'not null' ]: - test_upsert_int(t, u, n) - return 0 - -def test_upsert_int(t, u, n): - print "create table tt (" - print " id %s %s %s primary key," % (t, u, n) - if n == 'not null': n += ' default 0' - print " x %s %s %s," % (t, u, n) - print " y %s %s %s," % (t, u, n) - print " z %s %s %s," % (t, u, n) - print " a char(32), aa varchar(32)" - print ");" - print "insert noar into tt (id) values (1),(2),(3) on duplicate key update x=0;" - print "insert noar into tt (id) values (1) on duplicate key update y=0,z=42;" - print "insert noar into tt (id) values (1) on duplicate key update y=y+1,z=z+100;" - print "insert noar into tt (id) values (1) on duplicate key update y=y-1;" - print "insert noar into tt (id) values (1) on duplicate key update z=z-100;" - - print "create table ti like tt;" - print "alter table ti engine=innodb;" - print "insert noar into ti (id) values (1),(2),(3) on duplicate key update x=0;" - print "insert noar into ti (id) values (1) on duplicate key update y=0,z=42;" - print "insert noar into ti (id) values (1) on duplicate key update y=y+1,z=z+100;" - print "insert noar into ti (id) values (1) on duplicate key update y=y-1;" - print "insert noar into ti (id) values (1) on duplicate key update z=z-100;" - - print "let $diff_tables = test.tt, test.ti;" - print "source include/diff_tables.inc;" - - print "drop table tt, ti;" - -sys.exit(main()) diff --git a/mysql-test/suite/tokudb/t/fast_upsert_int.test b/mysql-test/suite/tokudb/t/fast_upsert_int.test index 9f44f6b461ce..7253fb5922c4 100644 --- a/mysql-test/suite/tokudb/t/fast_upsert_int.test +++ b/mysql-test/suite/tokudb/t/fast_upsert_int.test @@ -1,448 +1,38 @@ -# generated by tokudb_upsert_int.py -source include/have_tokudb.inc; -source include/have_innodb.inc; -set default_storage_engine='tokudb'; -disable_warnings; -drop table if exists tt, ti; -enable_warnings; -set tokudb_disable_slow_update=1; -create table tt ( - id tinyint null primary key, - x tinyint null, - y tinyint null, - z tinyint null, - a char(32), aa varchar(32) -); -insert noar into tt (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into tt (id) values (1) on duplicate key update y=0,z=42; -insert noar into tt (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into tt (id) values (1) on duplicate key update y=y-1; -insert noar into tt (id) values (1) on duplicate key update z=z-100; -create table ti like tt; -alter table ti engine=innodb; -insert noar into ti (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into ti (id) values (1) on duplicate key update y=0,z=42; -insert noar into ti (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into ti (id) values (1) on duplicate key update y=y-1; -insert noar into ti (id) values (1) on duplicate key update z=z-100; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt ( - id tinyint not null primary key, - x tinyint not null default 0, - y tinyint not null default 0, - z tinyint not null default 0, - a char(32), aa varchar(32) -); -insert noar into tt (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into tt (id) values (1) on duplicate key update y=0,z=42; -insert noar into tt (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into tt (id) values (1) on duplicate key update y=y-1; -insert noar into tt (id) values (1) on duplicate key update z=z-100; -create table ti like tt; -alter table ti engine=innodb; -insert noar into ti (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into ti (id) values (1) on duplicate key update y=0,z=42; -insert noar into ti (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into ti (id) values (1) on duplicate key update y=y-1; -insert noar into ti (id) values (1) on duplicate key update z=z-100; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt ( - id tinyint unsigned null primary key, - x tinyint unsigned null, - y tinyint unsigned null, - z tinyint unsigned null, - a char(32), aa varchar(32) -); -insert noar into tt (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into tt (id) values (1) on duplicate key update y=0,z=42; -insert noar into tt (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into tt (id) values (1) on duplicate key update y=y-1; -insert noar into tt (id) values (1) on duplicate key update z=z-100; -create table ti like tt; -alter table ti engine=innodb; -insert noar into ti (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into ti (id) values (1) on duplicate key update y=0,z=42; -insert noar into ti (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into ti (id) values (1) on duplicate key update y=y-1; -insert noar into ti (id) values (1) on duplicate key update z=z-100; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt ( - id tinyint unsigned not null primary key, - x tinyint unsigned not null default 0, - y tinyint unsigned not null default 0, - z tinyint unsigned not null default 0, - a char(32), aa varchar(32) -); -insert noar into tt (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into tt (id) values (1) on duplicate key update y=0,z=42; -insert noar into tt (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into tt (id) values (1) on duplicate key update y=y-1; -insert noar into tt (id) values (1) on duplicate key update z=z-100; -create table ti like tt; -alter table ti engine=innodb; -insert noar into ti (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into ti (id) values (1) on duplicate key update y=0,z=42; -insert noar into ti (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into ti (id) values (1) on duplicate key update y=y-1; -insert noar into ti (id) values (1) on duplicate key update z=z-100; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt ( - id smallint null primary key, - x smallint null, - y smallint null, - z smallint null, - a char(32), aa varchar(32) -); -insert noar into tt (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into tt (id) values (1) on duplicate key update y=0,z=42; -insert noar into tt (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into tt (id) values (1) on duplicate key update y=y-1; -insert noar into tt (id) values (1) on duplicate key update z=z-100; -create table ti like tt; -alter table ti engine=innodb; -insert noar into ti (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into ti (id) values (1) on duplicate key update y=0,z=42; -insert noar into ti (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into ti (id) values (1) on duplicate key update y=y-1; -insert noar into ti (id) values (1) on duplicate key update z=z-100; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt ( - id smallint not null primary key, - x smallint not null default 0, - y smallint not null default 0, - z smallint not null default 0, - a char(32), aa varchar(32) -); -insert noar into tt (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into tt (id) values (1) on duplicate key update y=0,z=42; -insert noar into tt (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into tt (id) values (1) on duplicate key update y=y-1; -insert noar into tt (id) values (1) on duplicate key update z=z-100; -create table ti like tt; -alter table ti engine=innodb; -insert noar into ti (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into ti (id) values (1) on duplicate key update y=0,z=42; -insert noar into ti (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into ti (id) values (1) on duplicate key update y=y-1; -insert noar into ti (id) values (1) on duplicate key update z=z-100; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt ( - id smallint unsigned null primary key, - x smallint unsigned null, - y smallint unsigned null, - z smallint unsigned null, - a char(32), aa varchar(32) -); -insert noar into tt (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into tt (id) values (1) on duplicate key update y=0,z=42; -insert noar into tt (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into tt (id) values (1) on duplicate key update y=y-1; -insert noar into tt (id) values (1) on duplicate key update z=z-100; -create table ti like tt; -alter table ti engine=innodb; -insert noar into ti (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into ti (id) values (1) on duplicate key update y=0,z=42; -insert noar into ti (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into ti (id) values (1) on duplicate key update y=y-1; -insert noar into ti (id) values (1) on duplicate key update z=z-100; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt ( - id smallint unsigned not null primary key, - x smallint unsigned not null default 0, - y smallint unsigned not null default 0, - z smallint unsigned not null default 0, - a char(32), aa varchar(32) -); -insert noar into tt (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into tt (id) values (1) on duplicate key update y=0,z=42; -insert noar into tt (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into tt (id) values (1) on duplicate key update y=y-1; -insert noar into tt (id) values (1) on duplicate key update z=z-100; -create table ti like tt; -alter table ti engine=innodb; -insert noar into ti (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into ti (id) values (1) on duplicate key update y=0,z=42; -insert noar into ti (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into ti (id) values (1) on duplicate key update y=y-1; -insert noar into ti (id) values (1) on duplicate key update z=z-100; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt ( - id mediumint null primary key, - x mediumint null, - y mediumint null, - z mediumint null, - a char(32), aa varchar(32) -); -insert noar into tt (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into tt (id) values (1) on duplicate key update y=0,z=42; -insert noar into tt (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into tt (id) values (1) on duplicate key update y=y-1; -insert noar into tt (id) values (1) on duplicate key update z=z-100; -create table ti like tt; -alter table ti engine=innodb; -insert noar into ti (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into ti (id) values (1) on duplicate key update y=0,z=42; -insert noar into ti (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into ti (id) values (1) on duplicate key update y=y-1; -insert noar into ti (id) values (1) on duplicate key update z=z-100; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt ( - id mediumint not null primary key, - x mediumint not null default 0, - y mediumint not null default 0, - z mediumint not null default 0, - a char(32), aa varchar(32) -); -insert noar into tt (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into tt (id) values (1) on duplicate key update y=0,z=42; -insert noar into tt (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into tt (id) values (1) on duplicate key update y=y-1; -insert noar into tt (id) values (1) on duplicate key update z=z-100; -create table ti like tt; -alter table ti engine=innodb; -insert noar into ti (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into ti (id) values (1) on duplicate key update y=0,z=42; -insert noar into ti (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into ti (id) values (1) on duplicate key update y=y-1; -insert noar into ti (id) values (1) on duplicate key update z=z-100; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt ( - id mediumint unsigned null primary key, - x mediumint unsigned null, - y mediumint unsigned null, - z mediumint unsigned null, - a char(32), aa varchar(32) -); -insert noar into tt (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into tt (id) values (1) on duplicate key update y=0,z=42; -insert noar into tt (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into tt (id) values (1) on duplicate key update y=y-1; -insert noar into tt (id) values (1) on duplicate key update z=z-100; -create table ti like tt; -alter table ti engine=innodb; -insert noar into ti (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into ti (id) values (1) on duplicate key update y=0,z=42; -insert noar into ti (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into ti (id) values (1) on duplicate key update y=y-1; -insert noar into ti (id) values (1) on duplicate key update z=z-100; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt ( - id mediumint unsigned not null primary key, - x mediumint unsigned not null default 0, - y mediumint unsigned not null default 0, - z mediumint unsigned not null default 0, - a char(32), aa varchar(32) -); -insert noar into tt (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into tt (id) values (1) on duplicate key update y=0,z=42; -insert noar into tt (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into tt (id) values (1) on duplicate key update y=y-1; -insert noar into tt (id) values (1) on duplicate key update z=z-100; -create table ti like tt; -alter table ti engine=innodb; -insert noar into ti (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into ti (id) values (1) on duplicate key update y=0,z=42; -insert noar into ti (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into ti (id) values (1) on duplicate key update y=y-1; -insert noar into ti (id) values (1) on duplicate key update z=z-100; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt ( - id int null primary key, - x int null, - y int null, - z int null, - a char(32), aa varchar(32) -); -insert noar into tt (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into tt (id) values (1) on duplicate key update y=0,z=42; -insert noar into tt (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into tt (id) values (1) on duplicate key update y=y-1; -insert noar into tt (id) values (1) on duplicate key update z=z-100; -create table ti like tt; -alter table ti engine=innodb; -insert noar into ti (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into ti (id) values (1) on duplicate key update y=0,z=42; -insert noar into ti (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into ti (id) values (1) on duplicate key update y=y-1; -insert noar into ti (id) values (1) on duplicate key update z=z-100; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt ( - id int not null primary key, - x int not null default 0, - y int not null default 0, - z int not null default 0, - a char(32), aa varchar(32) -); -insert noar into tt (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into tt (id) values (1) on duplicate key update y=0,z=42; -insert noar into tt (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into tt (id) values (1) on duplicate key update y=y-1; -insert noar into tt (id) values (1) on duplicate key update z=z-100; -create table ti like tt; -alter table ti engine=innodb; -insert noar into ti (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into ti (id) values (1) on duplicate key update y=0,z=42; -insert noar into ti (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into ti (id) values (1) on duplicate key update y=y-1; -insert noar into ti (id) values (1) on duplicate key update z=z-100; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt ( - id int unsigned null primary key, - x int unsigned null, - y int unsigned null, - z int unsigned null, - a char(32), aa varchar(32) -); -insert noar into tt (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into tt (id) values (1) on duplicate key update y=0,z=42; -insert noar into tt (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into tt (id) values (1) on duplicate key update y=y-1; -insert noar into tt (id) values (1) on duplicate key update z=z-100; -create table ti like tt; -alter table ti engine=innodb; -insert noar into ti (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into ti (id) values (1) on duplicate key update y=0,z=42; -insert noar into ti (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into ti (id) values (1) on duplicate key update y=y-1; -insert noar into ti (id) values (1) on duplicate key update z=z-100; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt ( - id int unsigned not null primary key, - x int unsigned not null default 0, - y int unsigned not null default 0, - z int unsigned not null default 0, - a char(32), aa varchar(32) -); -insert noar into tt (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into tt (id) values (1) on duplicate key update y=0,z=42; -insert noar into tt (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into tt (id) values (1) on duplicate key update y=y-1; -insert noar into tt (id) values (1) on duplicate key update z=z-100; -create table ti like tt; -alter table ti engine=innodb; -insert noar into ti (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into ti (id) values (1) on duplicate key update y=0,z=42; -insert noar into ti (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into ti (id) values (1) on duplicate key update y=y-1; -insert noar into ti (id) values (1) on duplicate key update z=z-100; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt ( - id bigint null primary key, - x bigint null, - y bigint null, - z bigint null, - a char(32), aa varchar(32) -); -insert noar into tt (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into tt (id) values (1) on duplicate key update y=0,z=42; -insert noar into tt (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into tt (id) values (1) on duplicate key update y=y-1; -insert noar into tt (id) values (1) on duplicate key update z=z-100; -create table ti like tt; -alter table ti engine=innodb; -insert noar into ti (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into ti (id) values (1) on duplicate key update y=0,z=42; -insert noar into ti (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into ti (id) values (1) on duplicate key update y=y-1; -insert noar into ti (id) values (1) on duplicate key update z=z-100; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt ( - id bigint not null primary key, - x bigint not null default 0, - y bigint not null default 0, - z bigint not null default 0, - a char(32), aa varchar(32) -); -insert noar into tt (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into tt (id) values (1) on duplicate key update y=0,z=42; -insert noar into tt (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into tt (id) values (1) on duplicate key update y=y-1; -insert noar into tt (id) values (1) on duplicate key update z=z-100; -create table ti like tt; -alter table ti engine=innodb; -insert noar into ti (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into ti (id) values (1) on duplicate key update y=0,z=42; -insert noar into ti (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into ti (id) values (1) on duplicate key update y=y-1; -insert noar into ti (id) values (1) on duplicate key update z=z-100; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt ( - id bigint unsigned null primary key, - x bigint unsigned null, - y bigint unsigned null, - z bigint unsigned null, - a char(32), aa varchar(32) -); -insert noar into tt (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into tt (id) values (1) on duplicate key update y=0,z=42; -insert noar into tt (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into tt (id) values (1) on duplicate key update y=y-1; -insert noar into tt (id) values (1) on duplicate key update z=z-100; -create table ti like tt; -alter table ti engine=innodb; -insert noar into ti (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into ti (id) values (1) on duplicate key update y=0,z=42; -insert noar into ti (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into ti (id) values (1) on duplicate key update y=y-1; -insert noar into ti (id) values (1) on duplicate key update z=z-100; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; -create table tt ( - id bigint unsigned not null primary key, - x bigint unsigned not null default 0, - y bigint unsigned not null default 0, - z bigint unsigned not null default 0, - a char(32), aa varchar(32) -); -insert noar into tt (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into tt (id) values (1) on duplicate key update y=0,z=42; -insert noar into tt (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into tt (id) values (1) on duplicate key update y=y-1; -insert noar into tt (id) values (1) on duplicate key update z=z-100; -create table ti like tt; -alter table ti engine=innodb; -insert noar into ti (id) values (1),(2),(3) on duplicate key update x=0; -insert noar into ti (id) values (1) on duplicate key update y=0,z=42; -insert noar into ti (id) values (1) on duplicate key update y=y+1,z=z+100; -insert noar into ti (id) values (1) on duplicate key update y=y-1; -insert noar into ti (id) values (1) on duplicate key update z=z-100; -let $diff_tables = test.tt, test.ti; -source include/diff_tables.inc; -drop table tt, ti; +--source ../include/fast_upsert_gen_header.inc + +--let GENERATED=$MYSQL_TMP_DIR/generated_fast_upsert_int.inc + +--perl + + open(FILE, '>', "$ENV{GENERATED}") or die; + my @blob_types = (); + foreach my $t ('tinyint', 'smallint', 'mediumint', 'int', 'bigint') { + foreach my $u ('', 'unsigned') { + foreach my $n ('null', 'not null') { + test_upsert_int($t, $u, $n) + } + } + } + close FILE; + + sub test_upsert_int { + my $t = shift; + my $u = shift; + my $n = shift; + + print FILE "create table tt (\n"; + print FILE " id $t $u primary key,\n"; + $n .= ' default 0' if ($n eq 'not null'); + print FILE " x $t $u $n,\n"; + print FILE " y $t $u $n,\n"; + print FILE " z $t $u $n,\n"; + print FILE " a char(32), aa varchar(32)\n"; + print FILE ") engine = tokudb;\n"; + + print FILE "--source $ENV{MYSQL_CURRENT_TEST_DIR}/../include/". + "fast_upsert_int.inc\n\n"; + } + +EOF + +--source ../include/fast_update_gen_footer_silent.inc diff --git a/mysql-test/suite/tokudb/t/fast_upsert_key.test b/mysql-test/suite/tokudb/t/fast_upsert_key.test index c11f2f49176f..b495f6c955bb 100644 --- a/mysql-test/suite/tokudb/t/fast_upsert_key.test +++ b/mysql-test/suite/tokudb/t/fast_upsert_key.test @@ -1,45 +1,57 @@ source include/have_tokudb.inc; -set default_storage_engine='tokudb'; - -disable_warnings; -drop table if exists t; -enable_warnings; - -set tokudb_disable_slow_upsert=1; +set tokudb_enable_fast_upsert=1; +source ../include/setup_fast_update_upsert.inc; # must have primary key -create table t (a int, b char(32), c varchar(32), d blob); +create table t (a int, b char(32), c varchar(32), d blob) engine = tokudb; replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; error ER_UNSUPPORTED_EXTENSION; -insert noar into t values (1,null,null,null) on duplicate key update a=42; +insert into t values (1,null,null,null) on duplicate key update a=42; drop table t; # must have no clustering keys -create table t (id int primary key, a int, b char(32), c varchar(32), d blob, clustering key(a)); +create table t (id int primary key, + a int, b char(32), + c varchar(32), + d blob, + clustering key(a)) engine = tokudb; replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; error ER_UNSUPPORTED_EXTENSION; -insert noar into t values (1,null,null,null,null) on duplicate key update a=42; +insert into t values (1,null,null,null,null) on duplicate key update a=42; drop table t; # must have no secondary keys -create table t (id int primary key, a int, b char(32), c varchar(32), d blob, key(c)); +create table t (id int primary key, + a int, + b char(32), + c varchar(32), + d blob, + key(c)) engine = tokudb ; replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; error ER_UNSUPPORTED_EXTENSION; -insert noar into t values (1,null,null,null,null) on duplicate key update a=42; +insert into t values (1,null,null,null,null) on duplicate key update a=42; drop table t; # update field must not be part of any key -create table t (id int, a int, b char(32), c varchar(32), d blob, primary key(id, a)); +create table t (id int, + a int, b char(32), + c varchar(32), + d blob, + primary key(id, a)) engine = tokudb; replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; error ER_UNSUPPORTED_EXTENSION; -insert noar into t values (1,2,null,null,null) on duplicate key update a=42; +insert into t values (1,2,null,null,null) on duplicate key update a=42; drop table t; -create table t (id int, a int, b char(32), c varchar(32), d blob, primary key(a, id)); +create table t (id int, + a int, b char(32), + c varchar(32), + d blob, + primary key(a, id)) engine = tokudb; replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; error ER_UNSUPPORTED_EXTENSION; -insert noar into t values (1,2,null,null,null) on duplicate key update a=42; +insert into t values (1,2,null,null,null) on duplicate key update a=42; drop table t; diff --git a/mysql-test/suite/tokudb/t/fast_upsert_sqlmode.test b/mysql-test/suite/tokudb/t/fast_upsert_sqlmode.test index b83918d3412c..714d11890cfa 100644 --- a/mysql-test/suite/tokudb/t/fast_upsert_sqlmode.test +++ b/mysql-test/suite/tokudb/t/fast_upsert_sqlmode.test @@ -1,36 +1,29 @@ source include/have_tokudb.inc; -set default_storage_engine='tokudb'; - -disable_warnings; -drop table if exists t; -enable_warnings; - -set tokudb_disable_slow_upsert=1; +set tokudb_enable_fast_upsert=1; +source ../include/setup_fast_update_upsert.inc; let $default_sql_mode = `select @@session.sql_mode`; -create table t (id int primary key, x int not null); -insert noar into t values (1,0); -insert noar into t values (1,0) on duplicate key update x=42; -insert noar into t values (1,0) on duplicate key update x=x+1; -insert noar into t values (1,0) on duplicate key update x=x-1; +create table t (id int primary key, x int not null) engine = tokudb; +insert into t values (1,0); +insert into t values (1,0) on duplicate key update x=42; +insert into t values (1,0) on duplicate key update x=x+1; +insert into t values (1,0) on duplicate key update x=x-1; eval set session sql_mode="$default_sql_mode,traditional"; replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; error ER_UNSUPPORTED_EXTENSION; -insert noar into t values (1,0) on duplicate key update x=42; +insert into t values (1,0) on duplicate key update x=42; replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; error ER_UNSUPPORTED_EXTENSION; -insert noar into t values (1,0) on duplicate key update x=x+1; +insert into t values (1,0) on duplicate key update x=x+1; replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; error ER_UNSUPPORTED_EXTENSION; -insert noar into t values (1,0) on duplicate key update x=x-1; - -eval set session sql_mode="$default_sql_mode"; +insert into t values (1,0) on duplicate key update x=x-1; drop table t; diff --git a/mysql-test/suite/tokudb/t/fast_upsert_values.test b/mysql-test/suite/tokudb/t/fast_upsert_values.test index cd258836ffb8..a0b7cf408a67 100644 --- a/mysql-test/suite/tokudb/t/fast_upsert_values.test +++ b/mysql-test/suite/tokudb/t/fast_upsert_values.test @@ -2,29 +2,24 @@ source include/have_tokudb.inc; -set default_storage_engine='tokudb'; +source ../include/setup_fast_update_upsert.inc; +set tokudb_enable_fast_upsert=1; -disable_warnings; -drop table if exists t; -enable_warnings; +create table t (id int primary key, x int not null) engine = tokudb; -set tokudb_disable_slow_upsert=1; - -create table t (id int primary key, x int not null); - -insert noar into t values (1,1); -insert noar into t values (1,1) on duplicate key update x=x+1; +insert into t values (1,1); +insert into t values (1,1) on duplicate key update x=x+1; select * from t; replace_regex /MariaDB/XYZ/ /MySQL/XYZ/; error ER_UNSUPPORTED_EXTENSION; -insert noar into t values (1,10) on duplicate key update x=values(x)+1; +insert into t values (1,10) on duplicate key update x=values(x)+1; select * from t; -insert noar into t values (1,10) on duplicate key update x=x+values(x); +insert into t values (1,10) on duplicate key update x=x+values(x); select * from t; -insert noar into t values (1,100) on duplicate key update x=x+values(x); +insert into t values (1,100) on duplicate key update x=x+values(x); select * from t; drop table t; diff --git a/sql/handler.cc b/sql/handler.cc index fae16ec8d130..ca16c3a79241 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -7998,7 +7998,34 @@ int handler::ha_delete_row(const uchar *buf) return 0; } +/** + @brief Offload an update to the storage engine. See handler::fast_update() + for details. +*/ +int handler::ha_fast_update(THD *thd, + List &update_fields, + List &update_values, + Item *conds) +{ + int error= fast_update(thd, update_fields, update_values, conds); + if (error == 0) + mark_trx_read_write(); + return error; +} +/** + @brief Offload an upsert to the storage engine. See handler::upsert() + for details. +*/ +int handler::ha_upsert(THD *thd, + List &update_fields, + List &update_values) +{ + int error= upsert(thd, update_fields, update_values); + if (error == 0) + mark_trx_read_write(); + return error; +} /** @brief use_hidden_primary_key() is called in case of an update/delete when diff --git a/sql/handler.h b/sql/handler.h index fc3a204d9b6b..a89fce9de060 100644 --- a/sql/handler.h +++ b/sql/handler.h @@ -31,6 +31,7 @@ #include "structs.h" /* SHOW_COMP_OPTION */ #include +#include #include #include #include @@ -3145,7 +3146,70 @@ class handler :public Sql_alloc public: /* End of On-line/in-place ALTER TABLE interface. */ + /** + @brief Offload an update to the storage engine. See handler::fast_update() + for details. + */ + MY_NODISCARD int ha_fast_update(THD *thd, + List &update_fields, + List &update_values, + Item *conds); + + /** + @brief Offload an upsert to the storage engine. See handler::upsert() + for details. + */ + MY_NODISCARD int ha_upsert(THD *thd, + List &update_fields, + List &update_values); +private: + /** + Offload an update to the storage engine implementation. + + @param thd The thread handle. + @param update_fields The list of fields to update. + @param update_values The list of new values for the fields + in update_fields. + @param conds Conditions tree. + + @retval 0 if the storage engine handled the update. + @retval ENOTSUP if the storage engine can not handle the + update and the slow update code path should + continue executing the update. + + @return an error if the update should be terminated. + @note HA_READ_BEFORE_WRITE_REMOVAL flag doesn not fit there because + handler::ha_update_row(...) does not accept conditions. + */ + MY_NODISCARD virtual int fast_update(THD *thd, + List &update_fields, + List &update_values, + Item *conds) + { return ENOTSUP; } + + /** + Offload an upsert to the storage engine implementation. Expects the row + to be stored in record[0]. + + @param thd The thread handle. + @param update_fields The list of fields to update. + @param update_values The list of new values for the fields + in update_fields. + + @retval 0 if the storage engine handled the upsert. + @retval ENOTSUP if the storage engine can not handle the upsert + and the slow insert code path should continue + executing the insert. + + @return an error if the insert should be terminated. + */ + MY_NODISCARD virtual int upsert(THD *thd, + List &update_fields, + List &update_values) + { return ENOTSUP; } + +public: /** use_hidden_primary_key() is called in case of an update/delete when (table_flags() and HA_PRIMARY_KEY_REQUIRED_FOR_DELETE) is defined diff --git a/sql/item.h b/sql/item.h index 99404bf25ef3..e3a13fc700e2 100644 --- a/sql/item.h +++ b/sql/item.h @@ -4051,6 +4051,7 @@ class Item_insert_value : public Item_field bool eq(const Item *item, bool binary_cmp) const; bool fix_fields(THD *, Item **); virtual void print(String *str, enum_query_type query_type); + enum Type type() const { return INSERT_VALUE_ITEM; } type_conversion_status save_in_field(Field *field_arg, bool no_conversions) { return Item_field::save_in_field(field_arg, no_conversions); diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index 7582f8bbb31f..465042e3015a 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -1082,7 +1082,13 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list, } else #endif - error= write_record(thd, table, &info, &update); + { + error= table->file->ha_upsert(thd, + update_fields, + update_values); + if (error == ENOTSUP) + error= write_record(thd, table, &info, &update); + } if (error) break; thd->get_stmt_da()->inc_current_row_for_warning(); diff --git a/sql/sql_update.cc b/sql/sql_update.cc index 2b4a6760fdf8..3c3a30e87c68 100644 --- a/sql/sql_update.cc +++ b/sql/sql_update.cc @@ -740,6 +740,13 @@ int mysql_update(THD *thd, check_constant_expressions(values)) read_removal= table->check_read_removal(select->quick->index); + error= table->file->ha_fast_update(thd, fields, values, conds); + if (error == 0) + error= -1; // error < 0 means really no error at all (see below) + else if (error != ENOTSUP) { + error= 1; + } + else while (!(error=info.read_record(&info)) && !thd->killed) { thd->inc_examined_row_count(1); diff --git a/storage/tokudb/ha_tokudb.h b/storage/tokudb/ha_tokudb.h index 9c6af2550cdf..35347e8d18f5 100644 --- a/storage/tokudb/ha_tokudb.h +++ b/storage/tokudb/ha_tokudb.h @@ -1037,15 +1037,28 @@ class ha_tokudb : public handler { #if TOKU_INCLUDE_WRITE_FRM_DATA int write_frm_data(const uchar *frm_data, size_t frm_len); #endif -#if TOKU_INCLUDE_UPSERT private: - int fast_update(THD *thd, List &update_fields, List &update_values, Item *conds); - bool check_fast_update(THD *thd, List &update_fields, List &update_values, Item *conds); - int send_update_message(List &update_fields, List &update_values, Item *conds, DB_TXN *txn); - int upsert(THD *thd, List &update_fields, List &update_values); - bool check_upsert(THD *thd, List &update_fields, List &update_values); - int send_upsert_message(THD *thd, List &update_fields, List &update_values, DB_TXN *txn); -#endif + MY_NODISCARD int fast_update(THD *thd, + List &update_fields, + List &update_values, + Item *conds); + MY_NODISCARD bool check_fast_update(THD *thd, + List &update_fields, + List &update_values, + Item *conds); + MY_NODISCARD int send_update_message(List &update_fields, + List &update_values, + Item *conds, + DB_TXN *txn); + MY_NODISCARD int upsert(THD *thd, + List &update_fields, + List &update_values); + MY_NODISCARD bool check_upsert(THD *thd, + List &update_fields, + List &update_values); + MY_NODISCARD int send_upsert_message(List &update_fields, + List &update_values, + DB_TXN *txn); public: // mysql sometimes retires a txn before a cursor that references the txn is closed. // for example, commit is sometimes called before index_end. the following methods diff --git a/storage/tokudb/ha_tokudb_update.cc b/storage/tokudb/ha_tokudb_update.cc index 9fe5e729ec4e..b6b1c4eab8be 100644 --- a/storage/tokudb/ha_tokudb_update.cc +++ b/storage/tokudb/ha_tokudb_update.cc @@ -23,8 +23,6 @@ Copyright (c) 2006, 2015, Percona and/or its affiliates. All rights reserved. #ident "Copyright (c) 2006, 2015, Percona and/or its affiliates. All rights reserved." -#if TOKU_INCLUDE_UPSERT - // Point updates and upserts // Restrictions: @@ -221,43 +219,46 @@ int ha_tokudb::fast_update( TOKUDB_HANDLER_DBUG_ENTER(""); int error = 0; + if (!tokudb::sysvars::enable_fast_update(thd)) { + error = ENOTSUP; + goto exit; + } + if (TOKUDB_UNLIKELY(TOKUDB_DEBUG_FLAGS(TOKUDB_DEBUG_UPSERT))) { dump_item_list("fields", update_fields); dump_item_list("values", update_values); if (conds) { - fprintf(stderr, "conds\n"); dump_item(conds); fprintf(stderr, "\n"); + fprintf(stderr, "conds\n"); + dump_item(conds); + fprintf(stderr, "\n"); } } if (update_fields.elements < 1 || update_fields.elements != update_values.elements) { error = ENOTSUP; // something is fishy with the parameters - goto return_error; + goto exit; } - + if (!check_fast_update(thd, update_fields, update_values, conds)) { - error = ENOTSUP; - goto check_error; + error = HA_ERR_UNSUPPORTED; + goto exit; } error = send_update_message( - update_fields, - update_values, - conds, - transaction); - if (error != 0) { - goto check_error; - } + update_fields, update_values, conds, transaction); -check_error: - if (error != 0) { - if (tokudb::sysvars::disable_slow_update(thd) != 0) + if (error) { + int mapped_error = map_to_handler_error(error); + if (mapped_error == error) error = HA_ERR_UNSUPPORTED; - if (error != ENOTSUP) - print_error(error, MYF(0)); } -return_error: +exit: + + if (error != 0 && error != ENOTSUP) + print_error(error, MYF(0)); + TOKUDB_HANDLER_DBUG_RETURN(error); } @@ -953,9 +954,13 @@ int ha_tokudb::upsert( List& update_values) { TOKUDB_HANDLER_DBUG_ENTER(""); - int error = 0; + if (!tokudb::sysvars::enable_fast_upsert(thd)) { + error = ENOTSUP; + goto exit; + } + if (TOKUDB_UNLIKELY(TOKUDB_DEBUG_FLAGS(TOKUDB_DEBUG_UPSERT))) { fprintf(stderr, "upsert\n"); dump_item_list("update_fields", update_fields); @@ -966,28 +971,27 @@ int ha_tokudb::upsert( if (update_fields.elements < 1 || update_fields.elements != update_values.elements) { error = ENOTSUP; - goto return_error; + goto exit; } if (!check_upsert(thd, update_fields, update_values)) { - error = ENOTSUP; - goto check_error; - } - - error = send_upsert_message(thd, update_fields, update_values, transaction); - if (error != 0) { - goto check_error; + error = HA_ERR_UNSUPPORTED; + goto exit; } -check_error: - if (error != 0) { - if (tokudb::sysvars::disable_slow_upsert(thd) != 0) + error = send_upsert_message(update_fields, update_values, transaction); + + if (error) { + int mapped_error = map_to_handler_error(error); + if (mapped_error == error) error = HA_ERR_UNSUPPORTED; - if (error != ENOTSUP) - print_error(error, MYF(0)); } -return_error: +exit: + + if (error != 0 && error != ENOTSUP) + print_error(error, MYF(0)); + TOKUDB_HANDLER_DBUG_RETURN(error); } @@ -1036,7 +1040,6 @@ bool ha_tokudb::check_upsert( // Generate an upsert message and send it into the primary tree. // Return 0 if successful. int ha_tokudb::send_upsert_message( - THD* thd, List& update_fields, List& update_values, DB_TXN* txn) { @@ -1131,5 +1134,3 @@ int ha_tokudb::send_upsert_message( return error; } - -#endif diff --git a/storage/tokudb/hatoku_defines.h b/storage/tokudb/hatoku_defines.h index 05a06ac8142e..3f6a38f91d29 100644 --- a/storage/tokudb/hatoku_defines.h +++ b/storage/tokudb/hatoku_defines.h @@ -35,6 +35,7 @@ Copyright (c) 2006, 2015, Percona and/or its affiliates. All rights reserved. #include "log.h" #include "sql_class.h" #include "sql_show.h" +#include "item_cmpfunc.h" #include "discover.h" #include #include "debug_sync.h" diff --git a/storage/tokudb/tokudb_sysvars.cc b/storage/tokudb/tokudb_sysvars.cc index 31c44c455009..74b649abdfd7 100644 --- a/storage/tokudb/tokudb_sysvars.cc +++ b/storage/tokudb/tokudb_sysvars.cc @@ -895,9 +895,8 @@ static MYSQL_THDVAR_ULONGLONG( ~0ULL, 1); -#if TOKU_INCLUDE_UPSERT static MYSQL_THDVAR_BOOL( - disable_slow_update, + enable_fast_update, PLUGIN_VAR_THDLOCAL, "disable slow update", NULL, @@ -905,13 +904,12 @@ static MYSQL_THDVAR_BOOL( false); static MYSQL_THDVAR_BOOL( - disable_slow_upsert, + enable_fast_upsert, PLUGIN_VAR_THDLOCAL, "disable slow upsert", NULL, NULL, false); -#endif #if TOKU_INCLUDE_XA static MYSQL_THDVAR_BOOL( @@ -1062,12 +1060,8 @@ st_mysql_sys_var* system_variables[] = { MYSQL_SYSVAR(rpl_lookup_rows_delay), MYSQL_SYSVAR(rpl_unique_checks), MYSQL_SYSVAR(rpl_unique_checks_delay), - -#if TOKU_INCLUDE_UPSERT - MYSQL_SYSVAR(disable_slow_update), - MYSQL_SYSVAR(disable_slow_upsert), -#endif - + MYSQL_SYSVAR(enable_fast_update), + MYSQL_SYSVAR(enable_fast_upsert), #if TOKU_INCLUDE_XA MYSQL_SYSVAR(support_xa), #endif @@ -1124,11 +1118,11 @@ my_bool disable_prefetching(THD* thd) { my_bool disable_slow_alter(THD* thd) { return (THDVAR(thd, disable_slow_alter) != 0); } -my_bool disable_slow_update(THD* thd) { - return (THDVAR(thd, disable_slow_update) != 0); +my_bool enable_fast_update(THD* thd) { + return (THDVAR(thd, enable_fast_update) != 0); } -my_bool disable_slow_upsert(THD* thd) { - return (THDVAR(thd, disable_slow_upsert) != 0); +my_bool enable_fast_upsert(THD* thd) { + return (THDVAR(thd, enable_fast_upsert) != 0); } empty_scan_mode_t empty_scan(THD* thd) { return (empty_scan_mode_t)THDVAR(thd, empty_scan); diff --git a/storage/tokudb/tokudb_sysvars.h b/storage/tokudb/tokudb_sysvars.h index c446e2125707..393afd2f9981 100644 --- a/storage/tokudb/tokudb_sysvars.h +++ b/storage/tokudb/tokudb_sysvars.h @@ -111,8 +111,8 @@ my_bool create_index_online(THD* thd); my_bool disable_hot_alter(THD* thd); my_bool disable_prefetching(THD* thd); my_bool disable_slow_alter(THD* thd); -my_bool disable_slow_update(THD* thd); -my_bool disable_slow_upsert(THD* thd); +my_bool enable_fast_update(THD* thd); +my_bool enable_fast_upsert(THD* thd); empty_scan_mode_t empty_scan(THD* thd); uint fanout(THD* thd); my_bool hide_default_row_format(THD* thd); From efb02379116a56af2c91933cd36c0cd79a6e7cf0 Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Mon, 12 Mar 2018 14:18:26 +0100 Subject: [PATCH 0647/1221] PS-310: Added support for building PS 5.5 with clang and MSAN This change adds the option to build PS 5.5 with MSAN, but doesn't try to fix any actual issues in the main MySQL code. The only issue fixed is an uninitailized read in the mysqltest binary - without that, the test suite can't be started. After these changes, running the MTR tests is possible, but there are still some remaining errors. To build with MSAN: * use an instrumented libcxx (with msan) * use the bundled zlib and libssl And set the following environment variables before running CMake: * CFLAGS: -fsanitize=memory * CXXFLAGS: -fsanitize=memory -Wno-unused-command-line-argument -nostdinc++ -stdlib=libc++ * CC, CXX to clang * CPLUS_INCLUDE_PATH, C_INCLUDE_PATH, LIBRARY_PATH, LD_LIBRARY_PATH to use the instrumented libcxx the LD_LIBRARY_PATH setting is also required for running any of the binaries, otherwise MSAN will report false positives. --- CMakeLists.txt | 22 ++++++++++++++++++++++ client/mysqltest.cc | 4 ++-- cmake/msan-blacklist.txt | 0 cmake/os/Linux.cmake | 2 +- 4 files changed, 25 insertions(+), 3 deletions(-) create mode 100644 cmake/msan-blacklist.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index 5f9d9265d4ea..1c41189002be 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -260,6 +260,28 @@ IF (WITH_ASAN) ENDIF() ENDIF() +OPTION(WITH_MSAN "Enable memory sanitizer" OFF) +IF(WITH_MSAN) + # TLS model is required because otherwise MSAN has issues with thread local + # variable initialization in dynamic libraries + SET(MSAN_FLAGS "-fsanitize=memory -fsanitize-memory-track-origins=2 -ftls-model=initial-exec -fPIC -fno-omit-frame-pointer -fsanitize-blacklist=${CMAKE_CURRENT_SOURCE_DIR}/cmake/msan-blacklist.txt") + MY_CHECK_C_COMPILER_FLAG("-fsanitize=memory" HAVE_C_MSANITIZE) + MY_CHECK_CXX_COMPILER_FLAG("-fsanitize=memory" HAVE_CXX_MSANITIZE) + IF(HAVE_C_MSANITIZE AND HAVE_CXX_MSANITIZE) + SET(CMAKE_C_FLAGS_DEBUG + "${CMAKE_C_FLAGS_DEBUG} ${MSAN_FLAGS} -O1") + SET(CMAKE_C_FLAGS_RELWITHDEBINFO + "${CMAKE_C_FLAGS_RELWITHDEBINFO} ${MSAN_FLAGS}") + SET(CMAKE_CXX_FLAGS_DEBUG + "${CMAKE_CXX_FLAGS_DEBUG} ${MSAN_FLAGS} -O1") + SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO + "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} ${MSAN_FLAGS}") + SET(WITH_MSAN_OK 1) + ELSE() + MESSAGE(FATAL_ERROR "Do not know how to enable memory sanitizer.") + ENDIF() +ENDIF() + # Always enable debug sync for debug builds. SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DENABLED_DEBUG_SYNC") SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DENABLED_DEBUG_SYNC") diff --git a/client/mysqltest.cc b/client/mysqltest.cc index 05fd6d340461..10c874138998 100644 --- a/client/mysqltest.cc +++ b/client/mysqltest.cc @@ -10321,10 +10321,10 @@ int insert_pointer_name(reg1 POINTER_ARRAY *pa,char * name) if (!(pa->typelib.type_names=(const char **) my_malloc(((PC_MALLOC-MALLOC_OVERHEAD)/ (sizeof(char *)+sizeof(*pa->flag))* - (sizeof(char *)+sizeof(*pa->flag))),MYF(MY_WME)))) + (sizeof(char *)+sizeof(*pa->flag))),MYF(MY_WME | MY_ZEROFILL)))) DBUG_RETURN(-1); if (!(pa->str= (uchar*) my_malloc((uint) (PS_MALLOC-MALLOC_OVERHEAD), - MYF(MY_WME)))) + MYF(MY_WME | MY_ZEROFILL)))) { my_free(pa->typelib.type_names); DBUG_RETURN (-1); diff --git a/cmake/msan-blacklist.txt b/cmake/msan-blacklist.txt new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/cmake/os/Linux.cmake b/cmake/os/Linux.cmake index 5a1bd2f2d0da..fc4364844514 100644 --- a/cmake/os/Linux.cmake +++ b/cmake/os/Linux.cmake @@ -34,7 +34,7 @@ ENDFOREACH() # Ensure we have clean build for shared libraries # without unresolved symbols # Not supported with AddressSanitizer -IF(NOT WITH_ASAN) +IF(NOT WITH_ASAN AND NOT WITH_MSAN) SET(LINK_FLAG_NO_UNDEFINED "-Wl,--no-undefined") ENDIF() From 476ae18fb83dd8ce01a91d5e68b2e32ac8b46a64 Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Mon, 12 Mar 2018 14:18:26 +0100 Subject: [PATCH 0648/1221] PS-310: Added support for building PS 5.5 with clang and MSAN This change adds the option to build PS 5.5 with MSAN, but doesn't try to fix any actual issues in the main MySQL code. The only issue fixed is an uninitailized read in the mysqltest binary - without that, the test suite can't be started. After these changes, running the MTR tests is possible, but there are still some remaining errors. To build with MSAN: * use an instrumented libcxx (with msan) * use the bundled zlib and libssl And set the following environment variables before running CMake: * CFLAGS: -fsanitize=memory * CXXFLAGS: -fsanitize=memory -Wno-unused-command-line-argument -nostdinc++ -stdlib=libc++ * CC, CXX to clang * CPLUS_INCLUDE_PATH, C_INCLUDE_PATH, LIBRARY_PATH, LD_LIBRARY_PATH to use the instrumented libcxx the LD_LIBRARY_PATH setting is also required for running any of the binaries, otherwise MSAN will report false positives. (cherry picked from commit efb02379116a56af2c91933cd36c0cd79a6e7cf0) --- CMakeLists.txt | 22 ++++++++++++++++++++++ client/mysqltest.cc | 4 ++-- cmake/msan-blacklist.txt | 0 cmake/os/Linux.cmake | 2 +- 4 files changed, 25 insertions(+), 3 deletions(-) create mode 100644 cmake/msan-blacklist.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index 8764fc4fa09e..2703e2e4b728 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -291,6 +291,28 @@ IF (WITH_ASAN) ENDIF() ENDIF() +OPTION(WITH_MSAN "Enable memory sanitizer" OFF) +IF(WITH_MSAN) + # TLS model is required because otherwise MSAN has issues with thread local + # variable initialization in dynamic libraries + SET(MSAN_FLAGS "-fsanitize=memory -fsanitize-memory-track-origins=2 -ftls-model=initial-exec -fPIC -fno-omit-frame-pointer -fsanitize-blacklist=${CMAKE_CURRENT_SOURCE_DIR}/cmake/msan-blacklist.txt") + MY_CHECK_C_COMPILER_FLAG("-fsanitize=memory" HAVE_C_MSANITIZE) + MY_CHECK_CXX_COMPILER_FLAG("-fsanitize=memory" HAVE_CXX_MSANITIZE) + IF(HAVE_C_MSANITIZE AND HAVE_CXX_MSANITIZE) + SET(CMAKE_C_FLAGS_DEBUG + "${CMAKE_C_FLAGS_DEBUG} ${MSAN_FLAGS} -O1") + SET(CMAKE_C_FLAGS_RELWITHDEBINFO + "${CMAKE_C_FLAGS_RELWITHDEBINFO} ${MSAN_FLAGS}") + SET(CMAKE_CXX_FLAGS_DEBUG + "${CMAKE_CXX_FLAGS_DEBUG} ${MSAN_FLAGS} -O1") + SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO + "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} ${MSAN_FLAGS}") + SET(WITH_MSAN_OK 1) + ELSE() + MESSAGE(FATAL_ERROR "Do not know how to enable memory sanitizer.") + ENDIF() +ENDIF() + # Always enable debug sync for debug builds. SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DENABLED_DEBUG_SYNC") SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DENABLED_DEBUG_SYNC") diff --git a/client/mysqltest.cc b/client/mysqltest.cc index 37edb8c04a66..eb93a3f2dcaf 100644 --- a/client/mysqltest.cc +++ b/client/mysqltest.cc @@ -10541,10 +10541,10 @@ int insert_pointer_name(reg1 POINTER_ARRAY *pa,char * name) if (!(pa->typelib.type_names=(const char **) my_malloc(((PC_MALLOC-MALLOC_OVERHEAD)/ (sizeof(char *)+sizeof(*pa->flag))* - (sizeof(char *)+sizeof(*pa->flag))),MYF(MY_WME)))) + (sizeof(char *)+sizeof(*pa->flag))),MYF(MY_WME | MY_ZEROFILL)))) DBUG_RETURN(-1); if (!(pa->str= (uchar*) my_malloc((uint) (PS_MALLOC-MALLOC_OVERHEAD), - MYF(MY_WME)))) + MYF(MY_WME | MY_ZEROFILL)))) { my_free(pa->typelib.type_names); DBUG_RETURN (-1); diff --git a/cmake/msan-blacklist.txt b/cmake/msan-blacklist.txt new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/cmake/os/Linux.cmake b/cmake/os/Linux.cmake index 350e1503a808..9472938b06e6 100644 --- a/cmake/os/Linux.cmake +++ b/cmake/os/Linux.cmake @@ -33,7 +33,7 @@ ENDFOREACH() # Ensure we have clean build for shared libraries # without unresolved symbols # Not supported with AddressSanitizer -IF(NOT WITH_ASAN) +IF(NOT WITH_ASAN AND NOT WITH_MSAN) SET(LINK_FLAG_NO_UNDEFINED "-Wl,--no-undefined") ENDIF() From 0ebe24bdcaf9e7f41100069ad811f1b98e966769 Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Fri, 9 Mar 2018 18:01:28 +0100 Subject: [PATCH 0649/1221] PS-3883: Test more conditional builds with Travis Test more options with builds that use `INVERTED=ON`: `-DWITH_EMBEDDED_SERVER=OFF` `-DWITH_QUERY_RESPONSE_TIME=ON` Add `-DWITH_XXX_STORAGE_ENGINE=YYY` to INVERTED --- .travis.yml | 17 ++++++++++++++--- sql/sql_table.cc | 2 ++ sql/sql_update.cc | 2 ++ 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index d9d7edbaeef1..178818254174 100644 --- a/.travis.yml +++ b/.travis.yml @@ -134,18 +134,29 @@ script: - echo -- Perform Debug or RelWithDebInfo compilation; if [[ "$INVERTED" == "ON" ]]; then - CMAKE_OPT="-DWITH_SSL=system -DWITH_ZLIB=bundled -DWITH_READLINE=OFF $CMAKE_OPT"; + CMAKE_OPT=" + -DWITH_EMBEDDED_SERVER=OFF + -DWITH_READLINE=OFF + -DWITH_SSL=system + -DWITH_ZLIB=bundled + -DWITH_ARCHIVE_STORAGE_ENGINE=OFF + -DWITH_BLACKHOLE_STORAGE_ENGINE=OFF + -DWITH_EXAMPLE_STORAGE_ENGINE=ON + -DWITH_FEDERATED_STORAGE_ENGINE=OFF + -DWITH_INNOBASE_STORAGE_ENGINE=OFF + -DWITH_PARTITION_STORAGE_ENGINE=OFF + "; fi; - echo -- BUILD=$BUILD MAINTAINER_MODE=$MAINTAINER_MODE CMAKE_OPT=\"$CMAKE_OPT\"; + echo -- BUILD=$BUILD MAINTAINER_MODE=$MAINTAINER_MODE CMAKE_OPT=\"$CMAKE_OPT\" ENV_VAR_CMAKE_OPT=\"$ENV_VAR_CMAKE_OPT\"; cmake .. -DCMAKE_BUILD_TYPE=$BUILD -DMYSQL_MAINTAINER_MODE=$MAINTAINER_MODE -DBUILD_CONFIG=mysql_release -DFEATURE_SET=community -DENABLE_DTRACE=OFF - -DWITH_EXAMPLE_STORAGE_ENGINE=ON -DWITH_PAM=ON $CMAKE_OPT + $ENV_VAR_CMAKE_OPT - make -j2 - ccache --show-stats diff --git a/sql/sql_table.cc b/sql/sql_table.cc index 97f7e46cc785..be8db3eb8f46 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -4050,6 +4050,7 @@ void sp_prepare_create_field(THD *thd, Create_field *sql_field) } +#ifdef WITH_PARTITION_STORAGE_ENGINE /** Auxiliary function which allows to check if freshly created .FRM file for table can be opened. @@ -4093,6 +4094,7 @@ static bool check_if_created_table_can_be_opened(THD *thd, (void) file->ha_create_handler_files(path, NULL, CHF_DELETE_FLAG, create_info); return result; } +#endif /* diff --git a/sql/sql_update.cc b/sql/sql_update.cc index 64eec24de950..ae84bc0015a2 100644 --- a/sql/sql_update.cc +++ b/sql/sql_update.cc @@ -1089,6 +1089,7 @@ bool unsafe_key_update(TABLE_LIST *leaves, table_map tables_for_update) if (table2->map & tables_for_update && table1->s == table2->s) { // A table is updated through two aliases +#ifdef WITH_PARTITION_STORAGE_ENGINE if (table_partitioned && (partition_key_modified(table1, table1->write_set) || partition_key_modified(table2, table2->write_set))) @@ -1101,6 +1102,7 @@ bool unsafe_key_update(TABLE_LIST *leaves, table_map tables_for_update) : tl2->alias); return true; } +#endif if (primkey_clustered) { From fdb3aa258607d78db77bea3a1b61c1dbf6a5af7e Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Fri, 9 Mar 2018 18:01:28 +0100 Subject: [PATCH 0650/1221] PS-3883: Test more conditional builds with Travis Test more options with builds that use `INVERTED=ON`: `-DWITH_EMBEDDED_SERVER=OFF` `-DWITH_QUERY_RESPONSE_TIME=ON` Add `-DWITH_XXX_STORAGE_ENGINE=YYY` to INVERTED --- .travis.yml | 20 +++++++++++++++---- .../tokudb-backup-plugin/Percona-TokuBackup | 2 +- sql/sql_table.cc | 4 +++- sql/sys_vars.cc | 4 ++++ storage/rocksdb/rocksdb | 2 +- 5 files changed, 25 insertions(+), 7 deletions(-) diff --git a/.travis.yml b/.travis.yml index be6ebcd8ffe5..20300314382a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -135,9 +135,22 @@ script: - echo -- Perform Debug or RelWithDebInfo compilation; if [[ "$INVERTED" == "ON" ]]; then - CMAKE_OPT="-DWITH_SSL=system -DWITH_ZLIB=bundled -DWITH_LIBEVENT=system -DWITH_EDITLINE=bundled $CMAKE_OPT"; + CMAKE_OPT=" + -DWITH_EMBEDDED_SERVER=OFF + -DWITH_EDITLINE=bundled + -DWITH_LIBEVENT=system + -DWITH_SSL=system + -DWITH_ZLIB=bundled + -DWITH_ARCHIVE_STORAGE_ENGINE=OFF + -DWITH_BLACKHOLE_STORAGE_ENGINE=OFF + -DWITH_EXAMPLE_STORAGE_ENGINE=ON + -DWITH_FEDERATED_STORAGE_ENGINE=OFF + -DWITH_INNOBASE_STORAGE_ENGINE=OFF + -DWITH_PARTITION_STORAGE_ENGINE=OFF + -DWITH_QUERY_RESPONSE_TIME=ON + "; fi; - echo -- BUILD=$BUILD MAINTAINER_MODE=$MAINTAINER_MODE WITHOUT_TOKUDB=$WITHOUT_TOKUDB CMAKE_OPT=\"$CMAKE_OPT\"; + echo -- BUILD=$BUILD MAINTAINER_MODE=$MAINTAINER_MODE WITHOUT_TOKUDB=$WITHOUT_TOKUDB CMAKE_OPT=\"$CMAKE_OPT\" ENV_VAR_CMAKE_OPT=\"$ENV_VAR_CMAKE_OPT\"; cmake .. -DCMAKE_BUILD_TYPE=$BUILD -DMYSQL_MAINTAINER_MODE=$MAINTAINER_MODE @@ -145,11 +158,10 @@ script: -DFEATURE_SET=community -DENABLE_DTRACE=OFF -DENABLE_DOWNLOADS=1 - -DWITH_EXAMPLE_STORAGE_ENGINE=ON - -DWITH_QUERY_RESPONSE_TIME=ON -DWITH_PAM=ON -DWITHOUT_TOKUDB=$WITHOUT_TOKUDB $CMAKE_OPT + $ENV_VAR_CMAKE_OPT - make -j2 - ccache --show-stats diff --git a/plugin/tokudb-backup-plugin/Percona-TokuBackup b/plugin/tokudb-backup-plugin/Percona-TokuBackup index ae727091e02b..f6718bd6f2e7 160000 --- a/plugin/tokudb-backup-plugin/Percona-TokuBackup +++ b/plugin/tokudb-backup-plugin/Percona-TokuBackup @@ -1 +1 @@ -Subproject commit ae727091e02bdc2e5e440dea9d2343c47670db1a +Subproject commit f6718bd6f2e7223512eceede3486da030a6ce146 diff --git a/sql/sql_table.cc b/sql/sql_table.cc index 340f8233d446..eb9d12359cac 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -2032,10 +2032,12 @@ bool mysql_write_frm(ALTER_PARTITION_PARAM_TYPE *lpt, uint flags) } end: +#ifdef WITH_PARTITION_STORAGE_ENGINE if (old_part_info) { lpt->table->file->set_part_info(old_part_info, false); } +#endif DBUG_RETURN(error); } @@ -10058,7 +10060,7 @@ static bool check_engine(THD *thd, const char *db_name, !(create_info->db_type->partition_flags && (create_info->db_type->partition_flags() & HA_USE_AUTO_PARTITION)); #else - #define check_compress_columns true + #define check_compressed_columns true #endif if (check_compressed_columns && alter_info->has_compressed_columns() && diff --git a/sql/sys_vars.cc b/sql/sys_vars.cc index 466235dc0ada..281c0a49eb9f 100644 --- a/sql/sys_vars.cc +++ b/sql/sys_vars.cc @@ -2140,12 +2140,16 @@ static Sys_var_ulong Sys_net_write_timeout( ON_UPDATE(fix_net_write_timeout)); // Sync kill_idle_transaction and innodb_kill_idle_transaction values +#ifdef WITH_INNOBASE_STORAGE_ENGINE extern long srv_kill_idle_transaction; +#endif static bool fix_kill_idle_transaction(sys_var *self, THD *thd, enum_var_type type) { +#ifdef WITH_INNOBASE_STORAGE_ENGINE srv_kill_idle_transaction= kill_idle_transaction_timeout; +#endif return false; } diff --git a/storage/rocksdb/rocksdb b/storage/rocksdb/rocksdb index bc5d7b70299b..8486eab5ad1f 160000 --- a/storage/rocksdb/rocksdb +++ b/storage/rocksdb/rocksdb @@ -1 +1 @@ -Subproject commit bc5d7b70299b763127f3714055a63ebe7e04ad47 +Subproject commit 8486eab5ad1f90a41db093f23514a07cf6e6fc55 From 4674a095b1580774f5d7a137425cb1a333731103 Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Fri, 9 Mar 2018 18:01:28 +0100 Subject: [PATCH 0651/1221] PS-3883: Test more conditional builds with Travis Test more options with builds that use `INVERTED=ON`: `-DWITH_EMBEDDED_SERVER=OFF` `-DWITH_QUERY_RESPONSE_TIME=ON` Add `-DWITH_XXX_STORAGE_ENGINE=YYY` to INVERTED --- .travis.yml | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index dc3f571843ec..750e4a56da89 100644 --- a/.travis.yml +++ b/.travis.yml @@ -138,9 +138,23 @@ script: - echo -- Perform Debug or RelWithDebInfo compilation; if [[ "$INVERTED" == "ON" ]]; then - CMAKE_OPT="-DWITH_SSL=system -DWITH_ZLIB=bundled -DWITH_LIBEVENT=system -DWITH_EDITLINE=bundled -DWITH_PROTOBUF=system $CMAKE_OPT"; + CMAKE_OPT=" + -DWITH_EMBEDDED_SERVER=OFF + -DWITH_EDITLINE=bundled + -DWITH_LIBEVENT=system + -DWITH_PROTOBUF=system + -DWITH_SSL=system + -DWITH_ZLIB=bundled + -DWITH_ARCHIVE_STORAGE_ENGINE=OFF + -DWITH_BLACKHOLE_STORAGE_ENGINE=OFF + -DWITH_EXAMPLE_STORAGE_ENGINE=ON + -DWITH_FEDERATED_STORAGE_ENGINE=OFF + -DWITH_INNOBASE_STORAGE_ENGINE=OFF + -DWITH_PARTITION_STORAGE_ENGINE=OFF + -DWITH_QUERY_RESPONSE_TIME=ON + "; fi; - echo -- BUILD=$BUILD MAINTAINER_MODE=$MAINTAINER_MODE WITHOUT_TOKUDB=$WITHOUT_TOKUDB WITHOUT_ROCKSDB=$WITHOUT_ROCKSDB WITH_MECAB=$WITH_MECAB CMAKE_OPT=\"$CMAKE_OPT\"; + echo -- BUILD=$BUILD MAINTAINER_MODE=$MAINTAINER_MODE WITHOUT_TOKUDB=$WITHOUT_TOKUDB WITHOUT_ROCKSDB=$WITHOUT_ROCKSDB WITH_MECAB=$WITH_MECAB CMAKE_OPT=\"$CMAKE_OPT\" ENV_VAR_CMAKE_OPT=\"$ENV_VAR_CMAKE_OPT\"; cmake .. -DCMAKE_BUILD_TYPE=$BUILD -DMYSQL_MAINTAINER_MODE=$MAINTAINER_MODE @@ -151,13 +165,12 @@ script: -DDOWNLOAD_BOOST=1 -DWITH_BOOST=../deps -DWITH_KEYRING_VAULT=ON - -DWITH_EXAMPLE_STORAGE_ENGINE=ON - -DWITH_QUERY_RESPONSE_TIME=OFF -DWITH_PAM=ON -DWITH_MECAB=$WITH_MECAB -DWITHOUT_TOKUDB=$WITHOUT_TOKUDB -DWITHOUT_ROCKSDB=$WITHOUT_ROCKSDB $CMAKE_OPT + $ENV_VAR_CMAKE_OPT - make -j2 - ccache --show-stats From 81666f9e49768fc63e593d74d3e9a5a6acb29f4d Mon Sep 17 00:00:00 2001 From: Dima Date: Tue, 13 Mar 2018 00:27:50 +0300 Subject: [PATCH 0652/1221] Fixed DOC-442 with proposed corrections for deb-based distros standalone install --- doc/source/upgrading_guide_56_57.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/source/upgrading_guide_56_57.rst b/doc/source/upgrading_guide_56_57.rst index 66a5cd6c567e..e6d380d675d0 100644 --- a/doc/source/upgrading_guide_56_57.rst +++ b/doc/source/upgrading_guide_56_57.rst @@ -177,7 +177,7 @@ DEB-based distributions Having done the full backup (and dump if possible), stop the server: :: - $ sudo /etc/init.d/mysqld stop + $ sudo /etc/init.d/mysql stop and remove the installed packages with their dependencies: :: @@ -236,7 +236,7 @@ This will install all the packages from the bundle. Another option is to downloa .. warning:: - When installing packages manually like this, you'll need to make sure to resolve all the dependencies and install missing packages yourself. + When installing packages manually like this, you'll need to make sure to resolve all the dependencies and install missing packages yourself. At least the following packages should be installed before installing |Percona Server| 5.7: ``libmecab2``, ``libjemalloc1``, ``zlib1g-dev``, and ``libaio1``. The installation script will not run automatically :command:`mysql_upgrade`, so you'll need to run it yourself and restart the service afterwards. From 0626c138758e437a696d99aad725a6d4516168c3 Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Tue, 13 Mar 2018 01:23:40 +0100 Subject: [PATCH 0653/1221] From b324dc150ab7f335d61e753ba05c254f68250f4d Mon Sep 17 00:00:00 2001 From: Ashish Padiyar Date: Tue, 13 Mar 2018 15:39:37 +0530 Subject: [PATCH 0654/1221] Adding bug number in disabled.def for max_parts tests. --- mysql-test/suite/max_parts/t/disabled.def | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/mysql-test/suite/max_parts/t/disabled.def b/mysql-test/suite/max_parts/t/disabled.def index 6b8e28b98593..e45f734ef9cd 100644 --- a/mysql-test/suite/max_parts/t/disabled.def +++ b/mysql-test/suite/max_parts/t/disabled.def @@ -10,14 +10,14 @@ # ############################################################################## max_parts.innodb-import-partition-1 : Bug#27413612 Ashish Fails consistently on hudson jobs. Disabled until bug is fixed. -max_parts.innodb_partition_open_files_limit @windows : 20.02.2018 Ashish Disabling max_parts tests on windows. -max_parts.partition_max_parts_list_innodb @windows : 20.02.2018 Ashish Disabling max_parts tests on windows. -max_parts.partition_max_parts_hash_innodb @windows : 20.02.2018 Ashish Disabling max_parts tests on windows. -max_parts.partition_max_parts_key_innodb @windows : 20.02.2018 Ashish Disabling max_parts tests on windows. -max_parts.partition_max_parts_inv_innodb @windows : 20.02.2018 Ashish Disabling max_parts tests on windows. -max_parts.partition_max_sub_parts_range_innodb @windows : 20.02.2018 Ashish Disabling max_parts tests on windows. -max_parts.partition_max_sub_parts_key_range_innodb @windows : 20.02.2018 Ashish Disabling max_parts tests on windows. -max_parts.partition_max_sub_parts_key_list_innodb @windows : 20.02.2018 Ashish Disabling max_parts tests on windows. -max_parts.partition_max_parts_range_innodb @windows : 20.02.2018 Ashish Disabling max_parts tests on windows. -max_parts.partition_max_sub_parts_list_innodb @windows : 20.02.2018 Ashish Disabling max_parts tests on windows. +max_parts.innodb_partition_open_files_limit @windows : Bug#27681900 20.02.2018 Ashish Disabling max_parts tests on windows. +max_parts.partition_max_parts_list_innodb @windows : Bug#27681900 20.02.2018 Ashish Disabling max_parts tests on windows. +max_parts.partition_max_parts_hash_innodb @windows : Bug#27681900 20.02.2018 Ashish Disabling max_parts tests on windows. +max_parts.partition_max_parts_key_innodb @windows : Bug#27681900 20.02.2018 Ashish Disabling max_parts tests on windows. +max_parts.partition_max_parts_inv_innodb @windows : Bug#27681900 20.02.2018 Ashish Disabling max_parts tests on windows. +max_parts.partition_max_sub_parts_range_innodb @windows : Bug#27681900 20.02.2018 Ashish Disabling max_parts tests on windows. +max_parts.partition_max_sub_parts_key_range_innodb @windows : Bug#27681900 20.02.2018 Ashish Disabling max_parts tests on windows. +max_parts.partition_max_sub_parts_key_list_innodb @windows : Bug#27681900 20.02.2018 Ashish Disabling max_parts tests on windows. +max_parts.partition_max_parts_range_innodb @windows : Bug#27681900 20.02.2018 Ashish Disabling max_parts tests on windows. +max_parts.partition_max_sub_parts_list_innodb @windows : Bug#27681900 20.02.2018 Ashish Disabling max_parts tests on windows. From 7a689acaa65e9d602575f7aa53fe36a64a07460f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20Kapu=C5=9Bcik?= Date: Tue, 13 Mar 2018 12:34:03 +0100 Subject: [PATCH 0655/1221] Bug#27082268 Invalid FTS sync synchronization The fix closes two issues: Bug #27082268 - INNODB: FAILING ASSERTION: SYM_NODE->TABLE != NULL DURING FTS SYNC Bug #27095935 - DEADLOCK BETWEEN FTS_DROP_INDEX AND FTS_OPTIMIZE_SYNC_TABLE Both issues were related to a FTS cache sync being done during operations that perfomed DDL actions on internal FTS tables (ALTER TABLE, TRUNCATE). In some cases the FTS tables and/or internal cache structures could get removed while still being used to perform FTS synchronization leading to crashes. In other the sync operations could not get finishes as it was waiting for dict lock which was taken by thread waiting for the background sync to be finished. The changes done includes: - Stopping background operations during ALTER TABLE and TRUNCATE. - Removal of unused code in FTS. - Cleanup of FTS sync related code to make it more readable and easier to maintain. RB#18262 --- mysql-test/suite/innodb_fts/r/sync_ddl.result | 116 +++++++++++ mysql-test/suite/innodb_fts/t/sync_ddl.test | 176 +++++++++++++++++ storage/innobase/fts/fts0fts.cc | 182 +++++++++--------- storage/innobase/fts/fts0opt.cc | 181 ++--------------- storage/innobase/handler/handler0alter.cc | 103 +++++----- storage/innobase/include/fts0fts.h | 8 +- storage/innobase/include/fts0priv.h | 16 +- storage/innobase/row/row0trunc.cc | 17 +- 8 files changed, 479 insertions(+), 320 deletions(-) create mode 100644 mysql-test/suite/innodb_fts/r/sync_ddl.result create mode 100644 mysql-test/suite/innodb_fts/t/sync_ddl.test diff --git a/mysql-test/suite/innodb_fts/r/sync_ddl.result b/mysql-test/suite/innodb_fts/r/sync_ddl.result new file mode 100644 index 000000000000..23b962c15b07 --- /dev/null +++ b/mysql-test/suite/innodb_fts/r/sync_ddl.result @@ -0,0 +1,116 @@ +CREATE TABLE t1 ( +id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, +value VARCHAR(1024) +) ENGINE=InnoDB; +CREATE FULLTEXT INDEX idx1 ON t1(value); +Warnings: +Warning 124 InnoDB rebuilding table to add column FTS_DOC_ID +SET GLOBAL debug="+d,fts_instrument_sync_request,fts_instrument_sync_before_syncing,ib_trunc_sleep_before_fts_cache_clear"; +INSERT INTO t1 (value) VALUES +('By default or with the IN NATURAL LANGUAGE MODE modifier') +; +TRUNCATE TABLE t1; +DROP TABLE t1; +SET GLOBAL debug="-d,fts_instrument_sync_request,fts_instrument_sync_before_syncing,ib_trunc_sleep_before_fts_cache_clear"; +CREATE TABLE t1 ( +id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, +value VARCHAR(1024) +) ENGINE=InnoDB; +CREATE FULLTEXT INDEX idx1 ON t1(value); +Warnings: +Warning 124 InnoDB rebuilding table to add column FTS_DOC_ID +SET GLOBAL debug="+d,fts_instrument_sync_request,fts_instrument_write_words_before_select_index,ib_trunc_sleep_before_fts_cache_clear"; +INSERT INTO t1 (value) VALUES +('By default or with the IN NATURAL LANGUAGE MODE modifier'), +('performs a natural language search for a string'), +('collection is a set of one or more columns included'), +('returns a relevance value; that is, a similarity measure'), +('and the text in that row in the columns named in'), +('By default, the search is performed in case-insensitive'), +('sensitive full-text search, use a binary collation '), +('example, a column that uses the latin1 character'), +('collation of latin1_bin to make it case sensitive') +; +TRUNCATE TABLE t1; +DROP TABLE t1; +SET GLOBAL debug="-d,fts_instrument_sync_request,fts_instrument_write_words_before_select_index,ib_trunc_sleep_before_fts_cache_clear"; +CREATE TABLE t1 ( +value VARCHAR(1024) +) ENGINE=InnoDB; +CREATE FULLTEXT INDEX idx1 ON t1(value); +Warnings: +Warning 124 InnoDB rebuilding table to add column FTS_DOC_ID +SET GLOBAL debug="+d,fts_instrument_sync_request,fts_instrument_msg_sync_sleep"; +INSERT INTO t1 (value) VALUES +('By default or with the IN NATURAL LANGUAGE MODE modifier'), +('performs a natural language search for a string'), +('collection is a set of one or more columns included'), +('returns a relevance value; that is, a similarity measure'), +('and the text in that row in the columns named in'), +('By default, the search is performed in case-insensitive'), +('sensitive full-text search, use a binary collation '), +('example, a column that uses the latin1 character'), +('collation of latin1_bin to make it case sensitive') +; +DROP INDEX idx1 ON t1; +DROP TABLE t1; +SET GLOBAL debug="-d,fts_instrument_sync_request,fts_instrument_msg_sync_sleep"; +CREATE TABLE t1 ( +value VARCHAR(1024) +) ENGINE=InnoDB; +CREATE FULLTEXT INDEX idx1 ON t1(value); +Warnings: +Warning 124 InnoDB rebuilding table to add column FTS_DOC_ID +SET GLOBAL debug="+d,fts_instrument_sync_request,fts_instrument_msg_sync_sleep"; +INSERT INTO t1 (value) VALUES +('By default or with the IN NATURAL LANGUAGE MODE modifier'), +('performs a natural language search for a string'), +('collection is a set of one or more columns included'), +('returns a relevance value; that is, a similarity measure'), +('and the text in that row in the columns named in'), +('By default, the search is performed in case-insensitive'), +('sensitive full-text search, use a binary collation '), +('example, a column that uses the latin1 character'), +('collation of latin1_bin to make it case sensitive') +; +ALTER TABLE t1 +DROP INDEX idx1, +ALGORITHM=INPLACE; +DROP TABLE t1; +SET GLOBAL debug="-d,fts_instrument_sync_request,fts_instrument_msg_sync_sleep"; +CREATE TABLE t1 ( +value VARCHAR(1024) +) ENGINE=InnoDB; +CREATE FULLTEXT INDEX idx1 ON t1(value); +Warnings: +Warning 124 InnoDB rebuilding table to add column FTS_DOC_ID +SET GLOBAL debug="+d,fts_instrument_sync_request,fts_instrument_msg_sync_sleep"; +INSERT INTO t1 (value) VALUES +('example, a column that uses the latin1 character'), +('collation of latin1_bin to make it case sensitive') +; +ALTER TABLE t1 +DROP INDEX idx1, +ALGORITHM=COPY; +DROP TABLE t1; +SET GLOBAL debug="-d,fts_instrument_sync_request,fts_instrument_msg_sync_sleep"; +CREATE TABLE t1 ( +id1 INT NOT NULL AUTO_INCREMENT PRIMARY KEY, +value VARCHAR(1024) +) ENGINE=InnoDB; +CREATE FULLTEXT INDEX idx1 ON t1(value); +Warnings: +Warning 124 InnoDB rebuilding table to add column FTS_DOC_ID +SET GLOBAL debug="+d,fts_instrument_sync_request,fts_instrument_msg_sync_sleep"; +INSERT INTO t1 (value) VALUES +('example, a column that uses the latin1 character'), +('collation of latin1_bin to make it case sensitive') +; +ALTER TABLE t1 +DROP COLUMN id1, +ADD COLUMN id2 INT NOT NULL AUTO_INCREMENT PRIMARY KEY, +DROP INDEX idx1, +ADD FULLTEXT INDEX idx2(value), +ALGORITHM=INPLACE; +DROP TABLE t1; +SET GLOBAL debug="-d,fts_instrument_sync_request,fts_instrument_msg_sync_sleep"; diff --git a/mysql-test/suite/innodb_fts/t/sync_ddl.test b/mysql-test/suite/innodb_fts/t/sync_ddl.test new file mode 100644 index 000000000000..3e35afc27b1d --- /dev/null +++ b/mysql-test/suite/innodb_fts/t/sync_ddl.test @@ -0,0 +1,176 @@ +# +# BUG#27082268 FTS synchronization issues +# + +--source include/have_innodb.inc +--source include/have_debug_sync.inc + +#-------------------------------------- +# Check FTS_sync vs TRUNCATE (1) +#-------------------------------------- + +CREATE TABLE t1 ( + id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, + value VARCHAR(1024) + ) ENGINE=InnoDB; + +CREATE FULLTEXT INDEX idx1 ON t1(value); + +SET GLOBAL debug="+d,fts_instrument_sync_request,fts_instrument_sync_before_syncing,ib_trunc_sleep_before_fts_cache_clear"; + +INSERT INTO t1 (value) VALUES + ('By default or with the IN NATURAL LANGUAGE MODE modifier') + ; + +TRUNCATE TABLE t1; + +DROP TABLE t1; + +SET GLOBAL debug="-d,fts_instrument_sync_request,fts_instrument_sync_before_syncing,ib_trunc_sleep_before_fts_cache_clear"; + +#-------------------------------------- +# Check FTS sync vs DROP INDEX (2) +#-------------------------------------- + +CREATE TABLE t1 ( + id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, + value VARCHAR(1024) + ) ENGINE=InnoDB; + +CREATE FULLTEXT INDEX idx1 ON t1(value); + +SET GLOBAL debug="+d,fts_instrument_sync_request,fts_instrument_write_words_before_select_index,ib_trunc_sleep_before_fts_cache_clear"; + +INSERT INTO t1 (value) VALUES + ('By default or with the IN NATURAL LANGUAGE MODE modifier'), + ('performs a natural language search for a string'), + ('collection is a set of one or more columns included'), + ('returns a relevance value; that is, a similarity measure'), + ('and the text in that row in the columns named in'), + ('By default, the search is performed in case-insensitive'), + ('sensitive full-text search, use a binary collation '), + ('example, a column that uses the latin1 character'), + ('collation of latin1_bin to make it case sensitive') + ; + +TRUNCATE TABLE t1; + +DROP TABLE t1; + +SET GLOBAL debug="-d,fts_instrument_sync_request,fts_instrument_write_words_before_select_index,ib_trunc_sleep_before_fts_cache_clear"; + +#-------------------------------------- +# Check FTS sync vs DROP INDEX +#-------------------------------------- + +CREATE TABLE t1 ( + value VARCHAR(1024) + ) ENGINE=InnoDB; + +CREATE FULLTEXT INDEX idx1 ON t1(value); + +SET GLOBAL debug="+d,fts_instrument_sync_request,fts_instrument_msg_sync_sleep"; + +INSERT INTO t1 (value) VALUES + ('By default or with the IN NATURAL LANGUAGE MODE modifier'), + ('performs a natural language search for a string'), + ('collection is a set of one or more columns included'), + ('returns a relevance value; that is, a similarity measure'), + ('and the text in that row in the columns named in'), + ('By default, the search is performed in case-insensitive'), + ('sensitive full-text search, use a binary collation '), + ('example, a column that uses the latin1 character'), + ('collation of latin1_bin to make it case sensitive') + ; + +DROP INDEX idx1 ON t1; + +DROP TABLE t1; + +SET GLOBAL debug="-d,fts_instrument_sync_request,fts_instrument_msg_sync_sleep"; + +#-------------------------------------- +# Check FTS sync vs ALTER TABLE DROP INDEX (INPLACE) +#-------------------------------------- + +CREATE TABLE t1 ( + value VARCHAR(1024) + ) ENGINE=InnoDB; + +CREATE FULLTEXT INDEX idx1 ON t1(value); + +SET GLOBAL debug="+d,fts_instrument_sync_request,fts_instrument_msg_sync_sleep"; + +INSERT INTO t1 (value) VALUES + ('By default or with the IN NATURAL LANGUAGE MODE modifier'), + ('performs a natural language search for a string'), + ('collection is a set of one or more columns included'), + ('returns a relevance value; that is, a similarity measure'), + ('and the text in that row in the columns named in'), + ('By default, the search is performed in case-insensitive'), + ('sensitive full-text search, use a binary collation '), + ('example, a column that uses the latin1 character'), + ('collation of latin1_bin to make it case sensitive') + ; + +ALTER TABLE t1 + DROP INDEX idx1, + ALGORITHM=INPLACE; + +DROP TABLE t1; + +SET GLOBAL debug="-d,fts_instrument_sync_request,fts_instrument_msg_sync_sleep"; + +#-------------------------------------- +# Check FTS sync vs ALTER TABLE DROP INDEX (COPY) +#-------------------------------------- + +CREATE TABLE t1 ( + value VARCHAR(1024) + ) ENGINE=InnoDB; + +CREATE FULLTEXT INDEX idx1 ON t1(value); + +SET GLOBAL debug="+d,fts_instrument_sync_request,fts_instrument_msg_sync_sleep"; + +INSERT INTO t1 (value) VALUES + ('example, a column that uses the latin1 character'), + ('collation of latin1_bin to make it case sensitive') + ; + +ALTER TABLE t1 + DROP INDEX idx1, + ALGORITHM=COPY; + +DROP TABLE t1; + +SET GLOBAL debug="-d,fts_instrument_sync_request,fts_instrument_msg_sync_sleep"; + +#-------------------------------------- +# Check FTS sync vs ALTER TABLE (INPLACE, new cluster) +#-------------------------------------- + +CREATE TABLE t1 ( + id1 INT NOT NULL AUTO_INCREMENT PRIMARY KEY, + value VARCHAR(1024) + ) ENGINE=InnoDB; + +CREATE FULLTEXT INDEX idx1 ON t1(value); + +SET GLOBAL debug="+d,fts_instrument_sync_request,fts_instrument_msg_sync_sleep"; + +INSERT INTO t1 (value) VALUES + ('example, a column that uses the latin1 character'), + ('collation of latin1_bin to make it case sensitive') + ; + +ALTER TABLE t1 + DROP COLUMN id1, + ADD COLUMN id2 INT NOT NULL AUTO_INCREMENT PRIMARY KEY, + DROP INDEX idx1, + ADD FULLTEXT INDEX idx2(value), + ALGORITHM=INPLACE; + +DROP TABLE t1; + +SET GLOBAL debug="-d,fts_instrument_sync_request,fts_instrument_msg_sync_sleep"; diff --git a/storage/innobase/fts/fts0fts.cc b/storage/innobase/fts/fts0fts.cc index 103d8830537d..7126fb31fe58 100644 --- a/storage/innobase/fts/fts0fts.cc +++ b/storage/innobase/fts/fts0fts.cc @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2011, 2017, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2011, 2018, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -215,7 +215,7 @@ FTS auxiliary INDEX table and clear the cache at the end. @param[in,out] sync sync state @param[in] unlock_cache whether unlock cache lock when write node @param[in] wait whether wait when a sync is in progress -@param[in] has_dict whether has dict operation lock +@param[in] has_dict_lock whether has dict operation lock @return DB_SUCCESS if all OK */ static dberr_t @@ -223,7 +223,7 @@ fts_sync( fts_sync_t* sync, bool unlock_cache, bool wait, - bool has_dict); + bool has_dict_lock); /****************************************************************//** Release all resources help by the words rb tree e.g., the node ilist. */ @@ -834,37 +834,26 @@ fts_drop_index( err = fts_drop_index_tables(trx, index); - for(;;) { - bool retry = false; - if (index->index_fts_syncing) { - retry = true; - } - if (!retry){ - fts_free(table); - break; - } + while (index->index_fts_syncing) { DICT_BG_YIELD(trx); } + + fts_free(table); + return(err); } - for(;;) { - bool retry = false; - if (index->index_fts_syncing) { - retry = true; - } - if (!retry){ - current_doc_id = table->fts->cache->next_doc_id; - first_doc_id = table->fts->cache->first_doc_id; - fts_cache_clear(table->fts->cache); - fts_cache_destroy(table->fts->cache); - table->fts->cache = fts_cache_create(table); - table->fts->cache->next_doc_id = current_doc_id; - table->fts->cache->first_doc_id = first_doc_id; - break; - } - DICT_BG_YIELD(trx); - } + while (index->index_fts_syncing) { + DICT_BG_YIELD(trx); + } + + current_doc_id = table->fts->cache->next_doc_id; + first_doc_id = table->fts->cache->first_doc_id; + fts_cache_clear(table->fts->cache); + fts_cache_destroy(table->fts->cache); + table->fts->cache = fts_cache_create(table); + table->fts->cache->next_doc_id = current_doc_id; + table->fts->cache->first_doc_id = first_doc_id; } else { fts_cache_t* cache = table->fts->cache; @@ -875,19 +864,15 @@ fts_drop_index( index_cache = fts_find_index_cache(cache, index); if (index_cache != NULL) { - for(;;) { - bool retry = false; - if (index->index_fts_syncing) { - retry = true; - } - if (!retry && index_cache->words) { - fts_words_free(index_cache->words); - rbt_free(index_cache->words); - break; - } + while (index->index_fts_syncing) { DICT_BG_YIELD(trx); } + if (index_cache->words) { + fts_words_free(index_cache->words); + rbt_free(index_cache->words); + } + ib_vector_remove(cache->indexes, *(void**) index_cache); } @@ -4107,6 +4092,9 @@ fts_sync_write_words( word = rbt_value(fts_tokenizer_word_t, rbt_node); + DBUG_EXECUTE_IF("fts_instrument_write_words_before_select_index", + os_thread_sleep(300000);); + selected = fts_select_index( index_cache->charset, word->text.f_str, word->text.f_len); @@ -4662,12 +4650,42 @@ fts_sync_rollback( trx_free_for_background(trx); } +/** Check that all indexes are synced. +@param[in,out] sync sync state +@return true if all indexes are synced, false otherwise. */ +static +bool +fts_check_all_indexes_synced( + fts_sync_t* sync) +{ + ulint i; + fts_cache_t* cache = sync->table->fts->cache; + + /* Make sure all the caches are synced. */ + for (i = 0; i < ib_vector_size(cache->indexes); ++i) { + fts_index_cache_t* index_cache; + + index_cache = static_cast( + ib_vector_get(cache->indexes, i)); + + if (index_cache->index->to_be_dropped + || index_cache->index->table->to_be_dropped + || fts_sync_index_check(index_cache)) { + continue; + } + + return false; + } + + return true; +} + /** Run SYNC on the table, i.e., write out data from the cache to the FTS auxiliary INDEX table and clear the cache at the end. @param[in,out] sync sync state @param[in] unlock_cache whether unlock cache lock when write node @param[in] wait whether wait when a sync is in progress -@param[in] has_dict whether has dict operation lock +@param[in] has_dict_lock whether has dict operation lock @return DB_SUCCESS if all OK */ static dberr_t @@ -4675,7 +4693,7 @@ fts_sync( fts_sync_t* sync, bool unlock_cache, bool wait, - bool has_dict) + bool has_dict_lock) { ulint i; dberr_t error = DB_SUCCESS; @@ -4704,66 +4722,54 @@ fts_sync( DEBUG_SYNC_C("fts_sync_begin"); fts_sync_begin(sync); - /* When sync in background, we hold dict operation lock - to prevent DDL like DROP INDEX, etc. */ - if (has_dict) { + if (has_dict_lock) { + /* If lock is already taken mark that in transaction + * so rollback will not try to take it again. + */ sync->trx->dict_operation_lock_mode = RW_S_LATCH; } -begin_sync: - if (cache->total_size > fts_max_cache_size) { - /* Avoid the case: sync never finish when - insert/update keeps comming. */ - ut_ad(sync->unlock_cache); - sync->unlock_cache = false; - } + do { + if (cache->total_size > fts_max_cache_size) { + /* Avoid the case: sync never finish when + insert/update keeps comming. */ + ut_ad(sync->unlock_cache); + sync->unlock_cache = false; + } - for (i = 0; i < ib_vector_size(cache->indexes); ++i) { - fts_index_cache_t* index_cache; + for (i = 0; i < ib_vector_size(cache->indexes); ++i) { + fts_index_cache_t* index_cache; - index_cache = static_cast( - ib_vector_get(cache->indexes, i)); + index_cache = static_cast( + ib_vector_get(cache->indexes, i)); - if (index_cache->index->to_be_dropped - || index_cache->index->table->to_be_dropped) { - continue; - } + if (index_cache->index->to_be_dropped + || index_cache->index->table->to_be_dropped) { + continue; + } - index_cache->index->index_fts_syncing = true; - DBUG_EXECUTE_IF("fts_instrument_sync_sleep_drop_waits", - os_thread_sleep(10000000); - ); + DBUG_EXECUTE_IF("fts_instrument_sync_before_syncing", + os_thread_sleep(300000);); - error = fts_sync_index(sync, index_cache); + index_cache->index->index_fts_syncing = true; - if (error != DB_SUCCESS && !sync->interrupted) { + error = fts_sync_index(sync, index_cache); - goto end_sync; + if (error != DB_SUCCESS) { + break; + } } - } - - DBUG_EXECUTE_IF("fts_instrument_sync_interrupted", - sync->interrupted = true; - error = DB_INTERRUPTED; - goto end_sync; - ); - /* Make sure all the caches are synced. */ - for (i = 0; i < ib_vector_size(cache->indexes); ++i) { - fts_index_cache_t* index_cache; - - index_cache = static_cast( - ib_vector_get(cache->indexes, i)); + DBUG_EXECUTE_IF("fts_instrument_sync_interrupted", + sync->interrupted = true; + error = DB_INTERRUPTED; + ); - if (index_cache->index->to_be_dropped - || fts_sync_index_check(index_cache)) { - continue; + if (error != DB_SUCCESS) { + break; } + } while (!fts_check_all_indexes_synced(sync)); - goto begin_sync; - } - -end_sync: if (error == DB_SUCCESS && !sync->interrupted) { error = fts_sync_commit(sync); } else { @@ -4771,8 +4777,8 @@ fts_sync( } rw_lock_x_lock(&cache->lock); - /* Clear fts syncing flags of any indexes incase sync is - interrupeted */ + /* Clear fts syncing flags of any indexes in case sync is + interrupted */ for (i = 0; i < ib_vector_size(cache->indexes); ++i) { fts_index_cache_t* index_cache; index_cache = static_cast( diff --git a/storage/innobase/fts/fts0opt.cc b/storage/innobase/fts/fts0opt.cc index f28e54e04ace..d9b082ba7d5c 100644 --- a/storage/innobase/fts/fts0opt.cc +++ b/storage/innobase/fts/fts0opt.cc @@ -66,12 +66,6 @@ static const ulint FTS_WORD_NODES_INIT_SIZE = 64; /** Last time we did check whether system need a sync */ static ib_time_t last_check_sync_time; -#if 0 -/** Check each table in round robin to see whether they'd -need to be "optimized" */ -static ulint fts_optimize_sync_iterator = 0; -#endif - /** State of a table within the optimization sub system. */ enum fts_state_t { FTS_STATE_LOADED, @@ -83,17 +77,11 @@ enum fts_state_t { /** FTS optimize thread message types. */ enum fts_msg_type_t { - FTS_MSG_START, /*!< Start optimizing thread */ - - FTS_MSG_PAUSE, /*!< Pause optimizing thread */ - FTS_MSG_STOP, /*!< Stop optimizing and exit thread */ FTS_MSG_ADD_TABLE, /*!< Add table to the optimize thread's work queue */ - FTS_MSG_OPTIMIZE_TABLE, /*!< Optimize a table */ - FTS_MSG_DEL_TABLE, /*!< Remove a table from the optimize threads work queue */ FTS_MSG_SYNC_TABLE /*!< Sync fts cache of a table */ @@ -238,7 +226,7 @@ struct fts_msg_t { /** The number of words to read and optimize in a single pass. */ ulong fts_num_word_optimize; -// FIXME +/** Whether to enable additional FTS diagnostic printout. */ char fts_enable_diag_print; /** ZLib compressed block size.*/ @@ -2554,16 +2542,15 @@ fts_optimize_create_msg( return(msg); } -/**********************************************************************//** -Add the table to add to the OPTIMIZER's list. */ +/** Add the table to add to the OPTIMIZER's list. +@param[in] table table to add */ void fts_optimize_add_table( -/*===================*/ - dict_table_t* table) /*!< in: table to add */ + dict_table_t* table) { fts_msg_t* msg; - if (!fts_optimize_wq) { + if (!fts_optimize_is_init()) { return; } @@ -2575,25 +2562,6 @@ fts_optimize_add_table( ib_wqueue_add(fts_optimize_wq, msg, msg->heap); } -/**********************************************************************//** -Optimize a table. */ -void -fts_optimize_do_table( -/*==================*/ - dict_table_t* table) /*!< in: table to optimize */ -{ - fts_msg_t* msg; - - /* Optimizer thread could be shutdown */ - if (!fts_optimize_wq) { - return; - } - - msg = fts_optimize_create_msg(FTS_MSG_OPTIMIZE_TABLE, table); - - ib_wqueue_add(fts_optimize_wq, msg, msg->heap); -} - /**********************************************************************//** Remove the table from the OPTIMIZER's list. We do wait for acknowledgement from the consumer of the message. */ @@ -2607,7 +2575,7 @@ fts_optimize_remove_table( fts_msg_del_t* remove; /* if the optimize system not yet initialized, return */ - if (!fts_optimize_wq) { + if (!fts_optimize_is_init()) { return; } @@ -2647,7 +2615,7 @@ fts_optimize_request_sync_table( table_id_t* table_id; /* if the optimize system not yet initialized, return */ - if (!fts_optimize_wq) { + if (!fts_optimize_is_init()) { return; } @@ -2668,53 +2636,6 @@ fts_optimize_request_sync_table( ib_wqueue_add(fts_optimize_wq, msg, msg->heap); } -/**********************************************************************//** -Find the slot for a particular table. -@return slot if found else NULL. */ -static -fts_slot_t* -fts_optimize_find_slot( -/*===================*/ - ib_vector_t* tables, /*!< in: vector of tables */ - const dict_table_t* table) /*!< in: table to add */ -{ - ulint i; - - for (i = 0; i < ib_vector_size(tables); ++i) { - fts_slot_t* slot; - - slot = static_cast(ib_vector_get(tables, i)); - - if (slot->table == table) { - return(slot); - } - } - - return(NULL); -} - -/**********************************************************************//** -Start optimizing table. */ -static -void -fts_optimize_start_table( -/*=====================*/ - ib_vector_t* tables, /*!< in/out: vector of tables */ - dict_table_t* table) /*!< in: table to optimize */ -{ - fts_slot_t* slot; - - slot = fts_optimize_find_slot(tables, table); - - if (slot == NULL) { - ib::error() << "Table " << table->name << " not registered" - " with the optimize thread."; - } else { - slot->last_run = 0; - slot->completed = 0; - } -} - /**********************************************************************//** Add the table to the vector if it doesn't already exist. */ static @@ -2897,57 +2818,6 @@ fts_is_sync_needed( return(false); } -#if 0 -/*********************************************************************//** -Check whether a table needs to be optimized. */ -static -void -fts_optimize_need_sync( -/*===================*/ - ib_vector_t* tables) /*!< in: list of tables */ -{ - dict_table_t* table = NULL; - fts_slot_t* slot; - ulint num_table = ib_vector_size(tables); - - if (!num_table) { - return; - } - - if (fts_optimize_sync_iterator >= num_table) { - fts_optimize_sync_iterator = 0; - } - - slot = ib_vector_get(tables, fts_optimize_sync_iterator); - table = slot->table; - - if (!table) { - return; - } - - ut_ad(table->fts); - - if (table->fts->cache) { - ulint deleted = table->fts->cache->deleted; - - if (table->fts->cache->added - >= fts_optimize_add_threshold) { - fts_sync_table(table); - } else if (deleted >= fts_optimize_delete_threshold) { - fts_optimize_do_table(table); - - mutex_enter(&table->fts->cache->deleted_lock); - table->fts->cache->deleted -= deleted; - mutex_exit(&table->fts->cache->deleted_lock); - } - } - - fts_optimize_sync_iterator++; - - return; -} -#endif - /** Sync fts cache of a table @param[in] table_id table id */ void @@ -2960,7 +2830,7 @@ fts_optimize_sync_table( if (table) { if (dict_table_has_fts_index(table) && table->fts->cache) { - fts_sync_table(table, true, false, true); + fts_sync_table(table, true, false, false); } dict_table_close(table, FALSE, FALSE); @@ -3027,8 +2897,7 @@ fts_optimize_thread( fts_msg_t* msg; msg = static_cast( - ib_wqueue_timedwait(wq, - FTS_QUEUE_WAIT_IN_USECS)); + ib_wqueue_timedwait(wq, FTS_QUEUE_WAIT_IN_USECS)); /* Timeout ? */ if (msg == NULL) { @@ -3040,12 +2909,6 @@ fts_optimize_thread( } switch (msg->type) { - case FTS_MSG_START: - break; - - case FTS_MSG_PAUSE: - break; - case FTS_MSG_STOP: done = TRUE; break; @@ -3054,35 +2917,27 @@ fts_optimize_thread( ut_a(!done); if (fts_optimize_new_table( fts_slots, - static_cast( - msg->ptr))) { + static_cast(msg->ptr))) { ++n_tables; } break; - case FTS_MSG_OPTIMIZE_TABLE: - if (!done) { - fts_optimize_start_table( - fts_slots, - static_cast( - msg->ptr)); - } - break; - case FTS_MSG_DEL_TABLE: if (fts_optimize_del_table( - fts_slots, static_cast( - msg->ptr))) { + fts_slots, static_cast(msg->ptr))) { --n_tables; } /* Signal the producer that we have removed the table. */ - os_event_set( - ((fts_msg_del_t*) msg->ptr)->event); + os_event_set(((fts_msg_del_t*) msg->ptr)->event); break; case FTS_MSG_SYNC_TABLE: + DBUG_EXECUTE_IF("fts_instrument_msg_sync_sleep", + os_thread_sleep(300000); + ); + fts_optimize_sync_table( *static_cast(msg->ptr)); break; @@ -3145,7 +3000,7 @@ fts_optimize_init(void) ut_ad(!srv_read_only_mode); /* For now we only support one optimize thread. */ - ut_a(fts_optimize_wq == NULL); + ut_a(!fts_optimize_is_init()); /* Create FTS optimize work queue */ fts_optimize_wq = ib_wqueue_create(); @@ -3191,7 +3046,7 @@ fts_optimize_init(void) /**********************************************************************//** Check whether the work queue is initialized. -@return TRUE if optimze queue is initialized. */ +@return TRUE if optimize queue is initialized. */ ibool fts_optimize_is_init(void) /*======================*/ diff --git a/storage/innobase/handler/handler0alter.cc b/storage/innobase/handler/handler0alter.cc index 76ac46905c88..ec6f45193ad8 100644 --- a/storage/innobase/handler/handler0alter.cc +++ b/storage/innobase/handler/handler0alter.cc @@ -8315,24 +8315,24 @@ ha_innobase::commit_inplace_alter_table( trx_t* trx = ctx0->trx; bool fail = false; - if (new_clustered) { - for (inplace_alter_handler_ctx** pctx = ctx_array; - *pctx; pctx++) { - ha_innobase_inplace_ctx* ctx - = static_cast(*pctx); - DBUG_ASSERT(ctx->need_rebuild()); + /* Stop background FTS operations. */ + for (inplace_alter_handler_ctx** pctx = ctx_array; + *pctx; pctx++) { + ha_innobase_inplace_ctx* ctx + = static_cast(*pctx); + DBUG_ASSERT(new_clustered == ctx->need_rebuild()); + + if (new_clustered) { if (ctx->old_table->fts) { ut_ad(!ctx->old_table->fts->add_wq); - fts_optimize_remove_table( - ctx->old_table); + fts_optimize_remove_table(ctx->old_table); } + } - if (ctx->new_table->fts) { - ut_ad(!ctx->new_table->fts->add_wq); - fts_optimize_remove_table( - ctx->new_table); - } + if (ctx->new_table->fts) { + ut_ad(!ctx->new_table->fts->add_wq); + fts_optimize_remove_table(ctx->new_table); } } @@ -8562,48 +8562,44 @@ ha_innobase::commit_inplace_alter_table( continue; } - /* Make a concurrent Drop fts Index to wait until sync of that - fts index is happening in the background */ - for (;;) { - bool retry = false; - - for (inplace_alter_handler_ctx** pctx = ctx_array; - *pctx; pctx++) { - int count =0; - ha_innobase_inplace_ctx* ctx - = static_cast(*pctx); - - DBUG_ASSERT(new_clustered == ctx->need_rebuild()); - if (dict_fts_index_syncing(ctx->old_table)) { - count++; - if (count == 100) { - ib::info() << - "Drop index waiting for background sync" - "to finish\n"; + /* Make a concurrent Drop fts Index to wait until sync of that + fts index is happening in the background */ + for (int retry_count = 0;;) { + bool retry = false; + + for (inplace_alter_handler_ctx** pctx = ctx_array; *pctx; pctx++) { + ha_innobase_inplace_ctx* ctx + = static_cast(*pctx); + + DBUG_ASSERT(new_clustered == ctx->need_rebuild()); + + if (dict_fts_index_syncing(ctx->old_table)) { + retry = true; + break; + } + + if (new_clustered && dict_fts_index_syncing(ctx->new_table)) { + retry = true; + break; } - retry = true; } - if (new_clustered && dict_fts_index_syncing(ctx->new_table)) { - count++; - if (count == 100) { - ib::info() << - "Drop index waiting for background sync" - "to finish\n"; - } + if (!retry) { + break; + } - retry = true; - } + /* Print a message if waiting for a long time. */ + if (retry_count < 100) { + retry_count++; + } else { + ib::info() << + "Drop index waiting for background sync to finish\n"; + retry_count = 0; + } + DICT_BG_YIELD(trx); } - if (!retry) { - break; - } - - DICT_BG_YIELD(trx); - } - innobase_copy_frm_flags_from_table_share( ctx->new_table, altered_table->s); @@ -8700,6 +8696,11 @@ ha_innobase::commit_inplace_alter_table( ut_a(fts_check_cached_index(ctx->old_table)); DBUG_INJECT_CRASH("ib_commit_inplace_crash_fail", crash_fail_inject_count++); + + /* Restart the FTS background operations. */ + if (ctx->old_table->fts) { + fts_optimize_add_table(ctx->old_table); + } } row_mysql_unlock_data_dictionary(trx); @@ -8777,8 +8778,6 @@ ha_innobase::commit_inplace_alter_table( dict_table_autoinc_unlock(t); } - bool add_fts = false; - /* Publish the created fulltext index, if any. Note that a fulltext index can be created without creating the clustered index, if there already exists @@ -8793,14 +8792,14 @@ ha_innobase::commit_inplace_alter_table( is left unset when a drop proceeds the add. */ DICT_TF2_FLAG_SET(ctx->new_table, DICT_TF2_FTS); fts_add_index(index, ctx->new_table); - add_fts = true; } } ut_d(dict_table_check_for_dup_indexes( ctx->new_table, CHECK_ALL_COMPLETE)); - if (add_fts) { + /* Start/Restart the FTS background operations. */ + if (ctx->new_table->fts) { fts_optimize_add_table(ctx->new_table); } diff --git a/storage/innobase/include/fts0fts.h b/storage/innobase/include/fts0fts.h index c28a4a5c27f6..70ace2472962 100644 --- a/storage/innobase/include/fts0fts.h +++ b/storage/innobase/include/fts0fts.h @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2011, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2011, 2018, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -731,6 +731,12 @@ fts_drop_index_tables( dict_index_t* index) /*!< in: Index to drop */ MY_ATTRIBUTE((warn_unused_result)); +/** Add the table to add to the OPTIMIZER's list. +@param[in] table table to add */ +void +fts_optimize_add_table( + dict_table_t* table); + /******************************************************************//** Remove the table from the OPTIMIZER's list. We do wait for acknowledgement from the consumer of the message. */ diff --git a/storage/innobase/include/fts0priv.h b/storage/innobase/include/fts0priv.h index 1fd33c2b103d..a4ebfa40c621 100644 --- a/storage/innobase/include/fts0priv.h +++ b/storage/innobase/include/fts0priv.h @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2011, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2011, 2018, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -595,20 +595,6 @@ fts_get_table_id( long */ MY_ATTRIBUTE((warn_unused_result)); -/******************************************************************//** -Add the table to add to the OPTIMIZER's list. */ -void -fts_optimize_add_table( -/*===================*/ - dict_table_t* table); /*!< in: table to add */ - -/******************************************************************//** -Optimize a table. */ -void -fts_optimize_do_table( -/*==================*/ - dict_table_t* table); /*!< in: table to optimize */ - /******************************************************************//** Construct the prefix name of an FTS table. @return own: table name, must be freed with ut_free() */ diff --git a/storage/innobase/row/row0trunc.cc b/storage/innobase/row/row0trunc.cc index 73bed52e8be8..4db21ea54e6e 100644 --- a/storage/innobase/row/row0trunc.cc +++ b/storage/innobase/row/row0trunc.cc @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2013, 2017, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2013, 2018, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -1235,6 +1235,11 @@ row_truncate_complete( table->memcached_sync_count = 0; } + /* Add the table back to FTS optimize background thread. */ + if (table->fts) { + fts_optimize_add_table(table); + } + row_mysql_unlock_data_dictionary(trx); DEBUG_SYNC_C("ib_trunc_table_trunc_completing"); @@ -1580,6 +1585,9 @@ row_truncate_update_system_tables( /* Reset the Doc ID in cache to 0 */ if (has_internal_doc_id && table->fts->cache != NULL) { + DBUG_EXECUTE_IF("ib_trunc_sleep_before_fts_cache_clear", + os_thread_sleep(10000000);); + table->fts->fts_status |= TABLE_DICT_LOCKED; fts_update_next_doc_id(trx, table, NULL, 0); fts_cache_clear(table->fts->cache); @@ -1838,6 +1846,13 @@ row_truncate_table_for_mysql( /* Step-4: Stop all the background process associated with table. */ dict_stats_wait_bg_to_stop_using_table(table, trx); + if (table->fts) { + /* Remove from FTS optimize thread. Unlock is needed to allow + finishing background operations in progress. */ + row_mysql_unlock_data_dictionary(trx); + fts_optimize_remove_table(table); + row_mysql_lock_data_dictionary(trx); + } /* Step-5: There are few foreign key related constraint under which we can't truncate table (due to referential integrity unless it is From 80661e250954c4eea9d4669ef8706c195ad45f8a Mon Sep 17 00:00:00 2001 From: Tomislav Plavcic Date: Tue, 13 Mar 2018 18:23:21 +0100 Subject: [PATCH 0656/1221] BLD-1004 - Add support for auth_pam_compat plugin in ps-admin --- scripts/ps-admin.sh | 59 ++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 55 insertions(+), 4 deletions(-) diff --git a/scripts/ps-admin.sh b/scripts/ps-admin.sh index 318300254f6c..fb2e5cada83b 100755 --- a/scripts/ps-admin.sh +++ b/scripts/ps-admin.sh @@ -26,6 +26,8 @@ ENABLE_AUDIT=0 DISABLE_AUDIT=0 ENABLE_PAM=0 DISABLE_PAM=0 +ENABLE_PAM_COMPAT=0 +DISABLE_PAM_COMPAT=0 ENABLE_MYSQLX=0 DISABLE_MYSQLX=0 FORCE_MYCNF=0 @@ -39,6 +41,7 @@ STATUS_ROCKSDB_PLUGIN=0 STATUS_QRT_PLUGIN=0 STATUS_AUDIT_PLUGIN=0 STATUS_PAM_PLUGIN=0 +STATUS_PAM_COMPAT_PLUGIN=0 STATUS_MYSQLX_PLUGIN=0 STATUS_HOTBACKUP_MYCNF=0 STATUS_HOTBACKUP_PLUGIN=0 @@ -64,8 +67,8 @@ fi # Check if we have a functional getopt(1) if ! getopt --test then - go_out="$(getopt --options=c:u:p::S:h:P:edbrfmkotzawinxgD \ - --longoptions=config-file:,user:,password::,socket:,host:,port:,enable-tokudb,disable-tokudb,enable-tokubackup,disable-tokubackup,help,defaults-file:,force-envfile,force-mycnf,enable-rocksdb,disable-rocksdb,enable-qrt,disable-qrt,enable-audit,disable-audit,enable-pam,disable-pam,enable-mysqlx,disable-mysqlx,docker \ + go_out="$(getopt --options=c:u:p::S:h:P:edbrfmkotzawinjKxgD \ + --longoptions=config-file:,user:,password::,socket:,host:,port:,enable-tokudb,disable-tokudb,enable-tokubackup,disable-tokubackup,help,defaults-file:,force-envfile,force-mycnf,enable-rocksdb,disable-rocksdb,enable-qrt,disable-qrt,enable-audit,disable-audit,enable-pam,disable-pam,enable-pam-compat,disable-pam-compat,enable-mysqlx,disable-mysqlx,docker \ --name="$(basename "$0")" -- "$@")" test $? -eq 0 || exit 1 eval set -- $go_out @@ -175,6 +178,14 @@ do shift DISABLE_PAM=1 ;; + -j | --enable-pam-compat ) + shift + ENABLE_PAM_COMPAT=1 + ;; + -K | --disable-pam-compat ) + shift + DISABLE_PAM_COMPAT=1 + ;; -x | --enable-mysqlx ) shift ENABLE_MYSQLX=1 @@ -221,6 +232,8 @@ do printf " --disable-audit, -w\t\t\t disable Audit Log plugin\n" printf " --enable-pam, -i\t\t\t enable PAM Authentication plugin\n" printf " --disable-pam, -n\t\t\t disable PAM Authentication plugin\n" + printf " --enable-pam-compat, -j\t\t enable PAM Compat Authentication plugin\n" + printf " --disable-pam-compat, -K\t\t disable PAM Compat Authentication plugin\n" printf " --enable-mysqlx, -x\t\t\t enable MySQL X plugin\n" printf " --disable-mysqlx, -g\t\t\t disable MySQL X plugin\n" printf " --force-envfile, -f\t\t\t force usage of ${SYSTEMD_ENV_FILE} instead of my.cnf (relevant only for TokuDB)\n" @@ -252,7 +265,7 @@ PORT=${PORT:+"-P ${PORT}"} if [ ${ENABLE_TOKUDB} = 1 -a ${DISABLE_TOKUDB} = 1 ]; then printf "ERROR: Only --enable-tokudb OR --disable-tokudb can be specified - not both!\n" exit 1 -elif [ ${ENABLE_TOKUDB} = 0 -a ${DISABLE_TOKUDB} = 0 -a ${ENABLE_TOKUBACKUP} = 0 -a ${DISABLE_TOKUBACKUP} = 0 -a ${ENABLE_ROCKSDB} = 0 -a ${DISABLE_ROCKSDB} = 0 -a ${ENABLE_QRT} = 0 -a ${DISABLE_QRT} = 0 -a ${ENABLE_AUDIT} = 0 -a ${DISABLE_AUDIT} = 0 -a ${ENABLE_PAM} = 0 -a ${DISABLE_PAM} = 0 -a ${ENABLE_MYSQLX} = 0 -a ${DISABLE_MYSQLX} = 0 ]; then +elif [ ${ENABLE_TOKUDB} = 0 -a ${DISABLE_TOKUDB} = 0 -a ${ENABLE_TOKUBACKUP} = 0 -a ${DISABLE_TOKUBACKUP} = 0 -a ${ENABLE_ROCKSDB} = 0 -a ${DISABLE_ROCKSDB} = 0 -a ${ENABLE_QRT} = 0 -a ${DISABLE_QRT} = 0 -a ${ENABLE_AUDIT} = 0 -a ${DISABLE_AUDIT} = 0 -a ${ENABLE_PAM} = 0 -a ${DISABLE_PAM} = 0 -a ${ENABLE_PAM_COMPAT} = 0 -a ${DISABLE_PAM_COMPAT} = 0 -a ${ENABLE_MYSQLX} = 0 -a ${DISABLE_MYSQLX} = 0 ]; then printf "ERROR: You should specify one of the --enable or --disable options.\n" printf "Use --help for printing options.\n" exit 1 @@ -271,6 +284,9 @@ elif [ ${ENABLE_AUDIT} = 1 -a ${DISABLE_AUDIT} = 1 ]; then elif [ ${ENABLE_PAM} = 1 -a ${DISABLE_PAM} = 1 ]; then printf "ERROR: Only --enable-pam OR --disable-pam can be specified - not both!\n\n" exit 1 +elif [ ${ENABLE_PAM_COMPAT} = 1 -a ${DISABLE_PAM_COMPAT} = 1 ]; then + printf "ERROR: Only --enable-pam-compat OR --disable-pam-compat can be specified - not both!\n\n" + exit 1 elif [ ${ENABLE_MYSQLX} = 1 -a ${DISABLE_MYSQLX} = 1 ]; then printf "ERROR: Only --enable-mysqlx OR --disable-mysqlx can be specified - not both!\n\n" exit 1 @@ -599,7 +615,7 @@ fi # Check PAM plugin status if [ ${ENABLE_PAM} = 1 -o ${DISABLE_PAM} = 1 ]; then printf "Checking PAM plugin status...\n" - STATUS_PAM_PLUGIN=$(echo "${LIST_PLUGINS}" | grep -c "auth_pam") + STATUS_PAM_PLUGIN=$(echo "${LIST_PLUGINS}" | grep -c "auth_pam#") if [ ${STATUS_PAM_PLUGIN} = 0 ]; then printf "INFO: PAM Authentication plugin is not installed.\n\n" else @@ -607,6 +623,17 @@ if [ ${ENABLE_PAM} = 1 -o ${DISABLE_PAM} = 1 ]; then fi fi +# Check PAM compat plugin status +if [ ${ENABLE_PAM_COMPAT} = 1 -o ${DISABLE_PAM_COMPAT} = 1 ]; then + printf "Checking PAM compat plugin status...\n" + STATUS_PAM_COMPAT_PLUGIN=$(echo "${LIST_PLUGINS}" | grep -c "auth_pam_compat#") + if [ ${STATUS_PAM_COMPAT_PLUGIN} = 0 ]; then + printf "INFO: PAM Compat Authentication plugin is not installed.\n\n" + else + printf "INFO: PAM Compat Authentication plugin is installed.\n\n" + fi +fi + # Check MySQL X plugin status if [ ${ENABLE_MYSQLX} = 1 -o ${DISABLE_MYSQLX} = 1 ]; then printf "Checking MySQL X plugin status...\n" @@ -893,6 +920,18 @@ if [ ${ENABLE_PAM} = 1 -a ${STATUS_PAM_PLUGIN} = 0 ]; then fi fi +# Install PAM compat plugin +if [ ${ENABLE_PAM_COMPAT} = 1 -a ${STATUS_PAM_COMPAT_PLUGIN} = 0 ]; then + printf "Installing PAM Compat Authentication plugin...\n" + ${MYSQL_CLIENT_BIN} -u ${USER} ${PASSWORD} ${SOCKET} ${HOST} ${PORT} -e "INSTALL PLUGIN auth_pam_compat SONAME 'auth_pam_compat.so';" 2>/dev/null + if [ $? -eq 0 ]; then + printf "INFO: Successfully installed PAM Compat Authentication plugin.\n\n" + else + printf "ERROR: Failed to install PAM Compat Authentication plugin. Please check error log.\n\n" + exit 1 + fi +fi + # Install MySQL X plugin if [ ${ENABLE_MYSQLX} = 1 -a ${STATUS_MYSQLX_PLUGIN} = 0 ]; then printf "Installing MySQL X plugin...\n" @@ -1005,6 +1044,18 @@ if [ ${DISABLE_PAM} = 1 -a ${STATUS_PAM_PLUGIN} -gt 0 ]; then fi fi +# Uninstall PAM compat plugin +if [ ${DISABLE_PAM_COMPAT} = 1 -a ${STATUS_PAM_COMPAT_PLUGIN} -gt 0 ]; then + printf "Uninstalling PAM Compat Authentication plugin...\n" + ${MYSQL_CLIENT_BIN} -u ${USER} ${PASSWORD} ${SOCKET} ${HOST} ${PORT} -e "UNINSTALL PLUGIN auth_pam_compat;" 2>/dev/null + if [ $? -ne 0 ]; then + printf "ERROR: Failed to uninstall PAM Compat Authentication plugin. Please check error log.\n\n" + exit 1 + else + printf "INFO: Successfully uninstalled PAM Compat Authentication plugin.\n\n" + fi +fi + # Uninstall MySQL X plugin if [ ${DISABLE_MYSQLX} = 1 -a ${STATUS_MYSQLX_PLUGIN} -gt 0 ]; then printf "Uninstalling MySQL X plugin...\n" From 8f1473543d5abdefcb76ef28afc39fe1892fb3b1 Mon Sep 17 00:00:00 2001 From: Jon Olav Hauglid Date: Thu, 15 Nov 2012 17:48:08 +0100 Subject: [PATCH 0657/1221] Bug#15871989: REMOVE USAGE OF OBSOLETE "REGISTER" KEYWORD This patch removes the usage of the C/C++ keyword "register" and related macros. Based on a patch originally written by Davi Arnaut. (cherry picked from commit 180b7e4165bcee5fd482ce27d3f884bdaa8adb23) --- client/mysql.cc | 4 +- client/mysqlslap.c | 2 +- client/mysqltest.cc | 16 ++-- client/sql_string.cc | 12 +-- dbug/dbug.c | 16 ++-- dbug/dbug_analyze.c | 38 ++++---- dbug/factorial.c | 4 +- dbug/my_main.c | 2 +- extra/replace.c | 18 ++-- extra/yassl/taocrypt/src/des.cpp | 2 +- include/heap.h | 2 +- include/my_compare.h | 4 +- include/myisam.h | 10 +-- libevent/strlcpy.c | 6 +- mysys/mf_dirname.c | 2 +- mysys/mf_fn_ext.c | 2 +- mysys/mf_format.c | 6 +- mysys/mf_getdate.c | 4 +- mysys/mf_iocache.c | 14 +-- mysys/mf_iocache2.c | 6 +- mysys/mf_keycache.c | 8 +- mysys/mf_pack.c | 10 +-- mysys/mf_qsort.c | 6 +- mysys/mf_soundex.c | 6 +- mysys/mf_wcomp.c | 2 +- mysys/my_alloc.c | 12 +-- mysys/my_compare.c | 4 +- mysys/my_error.c | 2 +- mysys/my_fopen.c | 2 +- mysys/my_getwd.c | 2 +- mysys/my_once.c | 6 +- mysys/ptr_cmp.c | 20 ++--- mysys/queues.c | 12 +-- mysys/testhash.c | 2 +- mysys/typelib.c | 4 +- mysys_ssl/my_getopt.cc | 2 +- regex/debug.ih | 2 +- regex/engine.c | 130 +++++++++++++-------------- regex/engine.ih | 14 +-- regex/main.c | 20 ++--- regex/main.ih | 2 +- regex/regcomp.ih | 72 +++++++-------- regex/regerror.c | 10 +-- regex/regexec.c | 2 +- regex/regexp.c | 118 ++++++++++++------------ regex/regfree.c | 2 +- regex/split.c | 34 +++---- sql-common/pack.c | 4 +- sql/derror.cc | 2 +- sql/field.cc | 2 +- sql/field.h | 2 +- sql/filesort.cc | 8 +- sql/gen_lex_hash.cc | 28 +++--- sql/handler.cc | 2 +- sql/item_func.cc | 4 +- sql/item_strfunc.cc | 14 +-- sql/key.cc | 6 +- sql/lock.cc | 4 +- sql/log.cc | 6 +- sql/mf_iocache.cc | 2 +- sql/password.c | 4 +- sql/plistsort.c | 10 +-- sql/records.cc | 2 +- sql/rpl_slave.cc | 2 +- sql/sql_acl.cc | 2 +- sql/sql_base.cc | 4 +- sql/sql_db.cc | 2 +- sql/sql_insert.cc | 6 +- sql/sql_lex.cc | 8 +- sql/sql_parse.cc | 4 +- sql/sql_prepare.cc | 2 +- sql/sql_select.cc | 2 +- sql/sql_string.cc | 12 +-- sql/table.cc | 12 +-- sql/uniques.cc | 2 +- sql/unireg.cc | 4 +- storage/heap/_rectest.c | 2 +- storage/heap/heapdef.h | 2 +- storage/heap/hp_block.c | 6 +- storage/heap/hp_close.c | 2 +- storage/heap/hp_create.c | 2 +- storage/heap/hp_delete.c | 4 +- storage/heap/hp_extra.c | 6 +- storage/heap/hp_hash.c | 10 +-- storage/heap/hp_info.c | 2 +- storage/heap/hp_rename.c | 2 +- storage/heap/hp_rrnd.c | 4 +- storage/heap/hp_rsame.c | 2 +- storage/heap/hp_scan.c | 4 +- storage/heap/hp_test2.c | 2 +- storage/innobase/fts/fts0blex.cc | 30 +++---- storage/innobase/fts/fts0tlex.cc | 30 +++---- storage/innobase/handler/ha_innodb.h | 2 +- storage/innobase/page/page0page.cc | 8 +- storage/innobase/pars/lexyy.cc | 30 +++---- storage/myisam/ft_update.c | 2 +- storage/myisam/ha_myisam.cc | 2 +- storage/myisam/mi_close.c | 2 +- storage/myisam/mi_create.c | 2 +- storage/myisam/mi_dbug.c | 2 +- storage/myisam/mi_delete.c | 12 +-- storage/myisam/mi_dynrec.c | 16 ++-- storage/myisam/mi_info.c | 2 +- storage/myisam/mi_key.c | 14 +-- storage/myisam/mi_locking.c | 10 +-- storage/myisam/mi_open.c | 4 +- storage/myisam/mi_packrec.c | 28 +++--- storage/myisam/mi_page.c | 10 +-- storage/myisam/mi_range.c | 8 +- storage/myisam/mi_rprev.c | 2 +- storage/myisam/mi_rrnd.c | 2 +- storage/myisam/mi_scan.c | 2 +- storage/myisam/mi_statrec.c | 8 +- storage/myisam/mi_update.c | 4 +- storage/myisam/mi_write.c | 16 ++-- storage/myisam/myisamchk.c | 16 ++-- storage/myisam/myisamdef.h | 10 +-- storage/myisam/myisamlog.c | 4 +- storage/myisam/sp_defs.h | 2 +- storage/myisam/sp_key.c | 2 +- storage/myisammrg/ha_myisammrg.cc | 2 +- storage/myisammrg/myrg_info.c | 2 +- storage/myisammrg/myrg_update.c | 2 +- storage/myisammrg/myrg_write.c | 2 +- storage/perfschema/pfs.cc | 40 ++++----- storage/perfschema/pfs_global.h | 2 +- strings/bchange.c | 2 +- strings/bmove_upp.c | 4 +- strings/ctype-bin.c | 4 +- strings/ctype-mb.c | 28 +++--- strings/ctype-simple.c | 60 ++++++------- strings/ctype-ucs2.c | 52 +++++------ strings/do_ctype.c | 8 +- strings/dtoa.c | 10 +-- strings/int2str.c | 6 +- strings/is_prefix.c | 2 +- strings/longlong2str.c | 4 +- strings/my_vsnprintf.c | 4 +- strings/str2int.c | 4 +- strings/strappend.c | 4 +- strings/strcend.c | 2 +- strings/strcont.c | 4 +- strings/strend.c | 2 +- strings/strmake.c | 2 +- strings/strmov.c | 2 +- strings/strnlen.c | 2 +- strings/strnmov.c | 2 +- zlib/crc32.c | 8 +- zlib/deflate.c | 30 +++---- zlib/trees.c | 2 +- 150 files changed, 733 insertions(+), 735 deletions(-) diff --git a/client/mysql.cc b/client/mysql.cc index 5e2981405464..2912605a65ef 100644 --- a/client/mysql.cc +++ b/client/mysql.cc @@ -3038,7 +3038,7 @@ char *index(const char *s,int c) char *rindex(const char *s,int c) { - reg3 char *t; + char *t; t = NullS; do if (*s == (char) c) t = (char*) s; while (*s++); @@ -3327,7 +3327,7 @@ static int com_help(String *buffer MY_ATTRIBUTE((unused)), char *line MY_ATTRIBUTE((unused))) { - reg1 int i, j; + int i, j; char * help_arg= strchr(line,' '), buff[32], *end; if (help_arg) { diff --git a/client/mysqlslap.c b/client/mysqlslap.c index 94092e2ba446..b073cd6a2040 100644 --- a/client/mysqlslap.c +++ b/client/mysqlslap.c @@ -276,7 +276,7 @@ static const char ALPHANUMERICS[]= static long int timedif(struct timeval a, struct timeval b) { - register int us, s; + int us, s; us = a.tv_usec - b.tv_usec; us /= 1000; diff --git a/client/mysqltest.cc b/client/mysqltest.cc index 37edb8c04a66..eb2eb48b86b5 100644 --- a/client/mysqltest.cc +++ b/client/mysqltest.cc @@ -947,8 +947,8 @@ void do_eval(DYNAMIC_STRING *query_eval, const char *query, const char *query_end, my_bool pass_through_escape_chars) { const char *p; - register char c, next_c; - register int escaped = 0; + char c, next_c; + int escaped = 0; VAR *v; DBUG_ENTER("do_eval"); @@ -2125,7 +2125,7 @@ C_MODE_START static uchar *get_var_key(const uchar* var, size_t *len, my_bool MY_ATTRIBUTE((unused)) t) { - register char* key; + char* key; key = ((VAR*)var)->name; *len = ((VAR*)var)->name_len; return (uchar*)key; @@ -9443,7 +9443,7 @@ typedef struct st_pointer_array { /* when using array-strings */ struct st_replace *init_replace(char * *from, char * *to, uint count, char * word_end_chars); -int insert_pointer_name(reg1 POINTER_ARRAY *pa,char * name); +int insert_pointer_name(POINTER_ARRAY *pa,char * name); void free_pointer_array(POINTER_ARRAY *pa); /* @@ -9527,8 +9527,8 @@ void replace_strings_append(REPLACE *rep, DYNAMIC_STRING* ds, const char *str, int len MY_ATTRIBUTE((unused))) { - reg1 REPLACE *rep_pos; - reg2 REPLACE_STRING *rep_str; + REPLACE *rep_pos; + REPLACE_STRING *rep_str; const char *start, *from; DBUG_ENTER("replace_strings_append"); @@ -10427,7 +10427,7 @@ void internal_clear_bit(REP_SET *set, uint bit) void or_bits(REP_SET *to,REP_SET *from) { - reg1 uint i; + uint i; for (i=0 ; i < to->size_of_bits ; i++) to->bits[i]|=from->bits[i]; return; @@ -10529,7 +10529,7 @@ uint end_of_word(char * pos) #define PC_MALLOC 256 /* Bytes for pointers */ #define PS_MALLOC 512 /* Bytes for data */ -int insert_pointer_name(reg1 POINTER_ARRAY *pa,char * name) +int insert_pointer_name(POINTER_ARRAY *pa,char * name) { uint i,length,old_count; uchar *new_pos; diff --git a/client/sql_string.cc b/client/sql_string.cc index decd776d5156..691baf2fcd23 100644 --- a/client/sql_string.cc +++ b/client/sql_string.cc @@ -505,8 +505,8 @@ int String::strstr(const String &s,uint32 offset) if (!s.length()) return ((int) offset); // Empty string is always found - register const char *str = Ptr+offset; - register const char *search=s.ptr(); + const char *str = Ptr+offset; + const char *search=s.ptr(); const char *end=Ptr+str_length-s.length()+1; const char *search_end=s.ptr()+s.length(); skip: @@ -514,7 +514,7 @@ int String::strstr(const String &s,uint32 offset) { if (*str++ == *search) { - register char *i,*j; + char *i,*j; i=(char*) str; j=(char*) search+1; while (j != search_end) if (*i++ != *j++) goto skip; @@ -535,8 +535,8 @@ int String::strrstr(const String &s,uint32 offset) { if (!s.length()) return offset; // Empty string is always found - register const char *str = Ptr+offset-1; - register const char *search=s.ptr()+s.length()-1; + const char *str = Ptr+offset-1; + const char *search=s.ptr()+s.length()-1; const char *end=Ptr+s.length()-2; const char *search_end=s.ptr()-1; @@ -545,7 +545,7 @@ int String::strrstr(const String &s,uint32 offset) { if (*str-- == *search) { - register char *i,*j; + char *i,*j; i=(char*) str; j=(char*) search-1; while (j != search_end) if (*i-- != *j--) goto skip; diff --git a/dbug/dbug.c b/dbug/dbug.c index 7d23889dabd2..825088136f24 100644 --- a/dbug/dbug.c +++ b/dbug/dbug.c @@ -142,8 +142,6 @@ #define IMPORT extern /* Names defined externally */ #define EXPORT /* Allocated here, available globally */ -#define AUTO auto /* Names to be allocated on stack */ -#define REGISTER register /* Names to be placed in registers */ /* * The default file for profiling. Could also add another flag @@ -1948,7 +1946,7 @@ BOOLEAN _db_keyword_(CODE_STATE *cs, const char *keyword, int strict) static void Indent(CODE_STATE *cs, int indent) { - REGISTER int count; + int count; indent= MY_MAX(indent-1-cs->stack->sub_level,0)*INDENT; for (count= 0; count < indent ; count++) @@ -1980,7 +1978,7 @@ static void Indent(CODE_STATE *cs, int indent) static void FreeList(struct link *linkp) { - REGISTER struct link *old; + struct link *old; while (linkp != NULL) { @@ -2079,7 +2077,7 @@ static void DoPrefix(CODE_STATE *cs, uint _line_) static void DBUGOpenFile(CODE_STATE *cs, const char *name,const char *end,int append) { - REGISTER FILE *fp; + FILE *fp; if (name != NULL) { @@ -2203,7 +2201,7 @@ static void DbugExit(const char *why) static char *DbugMalloc(size_t size) { - register char *new_malloc; + char *new_malloc; if (!(new_malloc= (char*) malloc(size))) DbugExit("out of memory"); @@ -2244,7 +2242,7 @@ static const char *DbugStrTok(const char *s) static const char *BaseName(const char *pathname) { - register const char *base; + const char *base; base= strrchr(pathname, FN_LIBCHAR); if (base++ == NullS) @@ -2281,8 +2279,8 @@ static const char *BaseName(const char *pathname) static BOOLEAN Writable(const char *pathname) { - REGISTER BOOLEAN granted; - REGISTER char *lastslash; + BOOLEAN granted; + char *lastslash; granted= FALSE; if (EXISTS(pathname)) diff --git a/dbug/dbug_analyze.c b/dbug/dbug_analyze.c index cd395cd3b02f..5009cb7c46cb 100644 --- a/dbug/dbug_analyze.c +++ b/dbug/dbug_analyze.c @@ -127,10 +127,10 @@ static unsigned long lowstack = (ulong) ~0; */ void push (name_pos, time_entered) -register unsigned int name_pos; -register unsigned long time_entered; +unsigned int name_pos; +unsigned long time_entered; { - register struct stack_t *t; + struct stack_t *t; DBUG_ENTER("push"); if (++stacktop > STACKSIZ) { @@ -153,12 +153,12 @@ register unsigned long time_entered; */ unsigned int pop (name_pos, time_entered, child_time) -register unsigned int *name_pos; -register unsigned long *time_entered; -register unsigned long *child_time; +unsigned int *name_pos; +unsigned long *time_entered; +unsigned long *child_time; { - register struct stack_t *temp; - register unsigned int rtnval; + struct stack_t *temp; + unsigned int rtnval; DBUG_ENTER ("pop"); @@ -211,8 +211,8 @@ static unsigned int n_items = 0; /* No. of items in the array so far */ char *strsave (s) char *s; { - register char *retval; - register unsigned int len; + char *retval; + unsigned int len; DBUG_ENTER ("strsave"); DBUG_PRINT ("strsave", ("%s",s)); @@ -233,8 +233,8 @@ char *s; unsigned int add (m_name) char *m_name; { - register unsigned int ind = 0; - register int cmp; + unsigned int ind = 0; + int cmp; DBUG_ENTER ("add"); if (n_items == 0) { /* First item to be added */ @@ -467,13 +467,13 @@ unsigned long int sum_calls, sum_time; void out_item (outf, m,called,timed) FILE *outf; -register struct module_t *m; +struct module_t *m; unsigned long int *called, *timed; { char *name = m -> name; - register unsigned int calls = m -> m_calls; - register unsigned long local_time = m -> m_time; - register unsigned long stkuse = m -> m_stkuse; + unsigned int calls = m -> m_calls; + unsigned long local_time = m -> m_time; + unsigned long stkuse = m -> m_stkuse; unsigned int import; double per_time = 0.0; double per_calls = 0.0; @@ -514,8 +514,8 @@ unsigned long int *called, *timed; void out_body (outf, root,s_calls,s_time) FILE *outf; -register unsigned int root; -register unsigned long int *s_calls, *s_time; +unsigned int root; +unsigned long int *s_calls, *s_time; { unsigned long int calls, local_time; @@ -566,7 +566,7 @@ extern char *optarg; int main (int argc, char **argv) { - register int c; + int c; int badflg = 0; FILE *infile; FILE *outfile = {stdout}; diff --git a/dbug/factorial.c b/dbug/factorial.c index 7b190ea8d8e9..d1a869c06eae 100644 --- a/dbug/factorial.c +++ b/dbug/factorial.c @@ -1,6 +1,6 @@ #ifdef DBUG_OFF /* We are testing dbug */ -int factorial(register int value) { +int factorial(int value) { if(value > 1) { value *= factorial(value-1); } @@ -12,7 +12,7 @@ int factorial(register int value) { #include int factorial ( -register int value) +int value) { DBUG_ENTER ("factorial"); DBUG_PRINT ("find", ("find %d factorial", value)); diff --git a/dbug/my_main.c b/dbug/my_main.c index 490e1808dd28..fe7b8b2fb789 100644 --- a/dbug/my_main.c +++ b/dbug/my_main.c @@ -14,7 +14,7 @@ int main (argc, argv) int argc; char *argv[]; { - register int result, ix; + int result, ix; extern int factorial(int); my_thread_global_init(); diff --git a/extra/replace.c b/extra/replace.c index 9e19a0a42f07..c15219c56235 100644 --- a/extra/replace.c +++ b/extra/replace.c @@ -148,8 +148,8 @@ int main(int argc, char *argv[]) /* Initiates DEBUG - but no debugging here ! */ static int static_get_options(argc,argv) -register int *argc; -register char **argv[]; +int *argc; +char **argv[]; { int help,version; char *pos; @@ -218,8 +218,8 @@ register char **argv[]; static int get_replace_strings(argc,argv,from_array,to_array) -register int *argc; -register char **argv[]; +int *argc; +char **argv[]; POINTER_ARRAY *from_array,*to_array; { char *pos; @@ -248,7 +248,7 @@ POINTER_ARRAY *from_array,*to_array; return 0; } -static int insert_pointer_name(reg1 POINTER_ARRAY *pa,char * name) +static int insert_pointer_name(POINTER_ARRAY *pa,char * name) { uint i,length,old_count; uchar *new_pos; @@ -322,7 +322,7 @@ static int insert_pointer_name(reg1 POINTER_ARRAY *pa,char * name) /* free pointer array */ -static void free_pointer_array(reg1 POINTER_ARRAY *pa) +static void free_pointer_array(POINTER_ARRAY *pa) { if (pa->typelib.count) { @@ -765,7 +765,7 @@ static void internal_clear_bit(REP_SET *set, uint bit) static void or_bits(REP_SET *to,REP_SET *from) { - reg1 uint i; + uint i; for (i=0 ; i < to->size_of_bits ; i++) to->bits[i]|=from->bits[i]; return; @@ -883,8 +883,8 @@ static uint replace_len(char * str) static uint replace_strings(REPLACE *rep, char **start, uint *max_length, char *from) { - reg1 REPLACE *rep_pos; - reg2 REPLACE_STRING *rep_str; + REPLACE *rep_pos; + REPLACE_STRING *rep_str; char *to, *end, *pos, *new; end=(to= *start) + *max_length-1; diff --git a/extra/yassl/taocrypt/src/des.cpp b/extra/yassl/taocrypt/src/des.cpp index 673c21ed2071..53777f082199 100644 --- a/extra/yassl/taocrypt/src/des.cpp +++ b/extra/yassl/taocrypt/src/des.cpp @@ -224,7 +224,7 @@ void BasicDES::SetKey(const byte* key, word32 /*length*/, CipherDir dir) byte *const pc1m = buffer; /* place to modify pc1 into */ byte *const pcr = pc1m + 56; /* place to rotate pc1 into */ byte *const ks = pcr + 56; - register int i,j,l; + int i,j,l; int m; for (j = 0; j < 56; j++) { /* convert pc1 to bits of key */ diff --git a/include/heap.h b/include/heap.h index 12bcc896bb64..ad976438fcf5 100644 --- a/include/heap.h +++ b/include/heap.h @@ -270,7 +270,7 @@ extern int heap_write(HP_INFO *info,const uchar *buff); extern int heap_update(HP_INFO *info,const uchar *old,const uchar *newdata); extern int heap_rrnd(HP_INFO *info,uchar *buf,uchar *pos); extern int heap_scan_init(HP_INFO *info); -extern int heap_scan(register HP_INFO *info, uchar *record); +extern int heap_scan(HP_INFO *info, uchar *record); extern int heap_delete(HP_INFO *info,const uchar *buff); extern int heap_info(HP_INFO *info,HEAPINFO *x,int flag); extern int heap_create(const char *name, HP_CREATE_INFO *create_info, diff --git a/include/my_compare.h b/include/my_compare.h index 6e88550aa0f2..beb3440534bc 100644 --- a/include/my_compare.h +++ b/include/my_compare.h @@ -108,8 +108,8 @@ typedef struct st_HA_KEYSEG /* Key-portion */ extern int ha_compare_text(const CHARSET_INFO *, uchar *, uint, uchar *, uint , my_bool, my_bool); -extern int ha_key_cmp(register HA_KEYSEG *keyseg, register uchar *a, - register uchar *b, uint key_length, uint nextflag, +extern int ha_key_cmp(HA_KEYSEG *keyseg, uchar *a, + uchar *b, uint key_length, uint nextflag, uint *diff_pos); /* diff --git a/include/myisam.h b/include/myisam.h index 63248097700d..84747b020e5c 100644 --- a/include/myisam.h +++ b/include/myisam.h @@ -421,17 +421,17 @@ typedef struct st_sort_info /* functions in mi_check */ void myisamchk_init(MI_CHECK *param); int chk_status(MI_CHECK *param, MI_INFO *info); -int chk_del(MI_CHECK *param, register MI_INFO *info, uint test_flag); +int chk_del(MI_CHECK *param, MI_INFO *info, uint test_flag); int chk_size(MI_CHECK *param, MI_INFO *info); int chk_key(MI_CHECK *param, MI_INFO *info); int chk_data_link(MI_CHECK *param, MI_INFO *info,int extend); -int mi_repair(MI_CHECK *param, register MI_INFO *info, +int mi_repair(MI_CHECK *param, MI_INFO *info, char * name, int rep_quick, my_bool no_copy_stat); -int mi_sort_index(MI_CHECK *param, register MI_INFO *info, char * name, +int mi_sort_index(MI_CHECK *param, MI_INFO *info, char * name, my_bool no_copy_stat); -int mi_repair_by_sort(MI_CHECK *param, register MI_INFO *info, +int mi_repair_by_sort(MI_CHECK *param, MI_INFO *info, const char * name, int rep_quick, my_bool no_copy_stat); -int mi_repair_parallel(MI_CHECK *param, register MI_INFO *info, +int mi_repair_parallel(MI_CHECK *param, MI_INFO *info, const char * name, int rep_quick, my_bool no_copy_stat); int change_to_newfile(const char * filename, const char * old_ext, const char * new_ext, myf myflags); diff --git a/libevent/strlcpy.c b/libevent/strlcpy.c index 5d194527c8ca..4462db03d7a5 100644 --- a/libevent/strlcpy.c +++ b/libevent/strlcpy.c @@ -51,9 +51,9 @@ _event_strlcpy(dst, src, siz) const char *src; size_t siz; { - register char *d = dst; - register const char *s = src; - register size_t n = siz; + char *d = dst; + const char *s = src; + size_t n = siz; /* Copy as many bytes as will fit */ if (n != 0 && --n != 0) { diff --git a/mysys/mf_dirname.c b/mysys/mf_dirname.c index 569293f54016..471b45904f81 100644 --- a/mysys/mf_dirname.c +++ b/mysys/mf_dirname.c @@ -20,7 +20,7 @@ size_t dirname_length(const char *name) { - register char *pos, *gpos; + char *pos, *gpos; #ifdef BASKSLASH_MBTAIL CHARSET_INFO *fs= fs_character_set(); #endif diff --git a/mysys/mf_fn_ext.c b/mysys/mf_fn_ext.c index 47fc67cabbdd..cbe8c1508a6d 100644 --- a/mysys/mf_fn_ext.c +++ b/mysys/mf_fn_ext.c @@ -35,7 +35,7 @@ char *fn_ext(const char *name) { - register const char *pos, *gpos; + const char *pos, *gpos; DBUG_ENTER("fn_ext"); DBUG_PRINT("mfunkt",("name: '%s'",name)); diff --git a/mysys/mf_format.c b/mysys/mf_format.c index 6865926abbf7..2c0dd50e67da 100644 --- a/mysys/mf_format.c +++ b/mysys/mf_format.c @@ -28,7 +28,7 @@ char * fn_format(char * to, const char *name, const char *dir, { char dev[FN_REFLEN], buff[FN_REFLEN], *pos, *startpos; const char *ext; - reg1 size_t length; + size_t length; size_t dev_length; my_bool not_used; DBUG_ENTER("fn_format"); @@ -123,8 +123,8 @@ char * fn_format(char * to, const char *name, const char *dir, size_t strlength(const char *str) { - reg1 const char * pos; - reg2 const char * found; + const char * pos; + const char * found; DBUG_ENTER("strlength"); pos= found= str; diff --git a/mysys/mf_getdate.c b/mysys/mf_getdate.c index e3ac2e3ff136..857ea929ee01 100644 --- a/mysys/mf_getdate.c +++ b/mysys/mf_getdate.c @@ -35,9 +35,9 @@ */ -void get_date(register char * to, int flag, time_t date) +void get_date(char * to, int flag, time_t date) { - reg2 struct tm *start_time; + struct tm *start_time; time_t skr; #if defined(HAVE_LOCALTIME_R) && defined(_REENTRANT) struct tm tm_tmp; diff --git a/mysys/mf_iocache.c b/mysys/mf_iocache.c index 015acf2c2cf2..f979eb4fb4b3 100644 --- a/mysys/mf_iocache.c +++ b/mysys/mf_iocache.c @@ -446,7 +446,7 @@ my_bool reinit_io_cache(IO_CACHE *info, enum cache_type type, Otherwise info->error contains the number of bytes in Buffer. */ -int _my_b_read(register IO_CACHE *info, uchar *Buffer, size_t Count) +int _my_b_read(IO_CACHE *info, uchar *Buffer, size_t Count) { size_t length,diff_length,left_length, max_length; my_off_t pos_in_file; @@ -989,7 +989,7 @@ static void unlock_io_cache(IO_CACHE *cache) 1 Error: can't read requested characters */ -int _my_b_read_r(register IO_CACHE *cache, uchar *Buffer, size_t Count) +int _my_b_read_r(IO_CACHE *cache, uchar *Buffer, size_t Count) { my_off_t pos_in_file; size_t length, diff_length, left_length; @@ -1163,7 +1163,7 @@ static void copy_to_read_buffer(IO_CACHE *write_cache, 1 Failed to read */ -int _my_b_seq_read(register IO_CACHE *info, uchar *Buffer, size_t Count) +int _my_b_seq_read(IO_CACHE *info, uchar *Buffer, size_t Count) { size_t length, diff_length, left_length, save_count, max_length; my_off_t pos_in_file; @@ -1325,7 +1325,7 @@ int _my_b_seq_read(register IO_CACHE *info, uchar *Buffer, size_t Count) 1 An error has occurred; IO_CACHE to error state. */ -int _my_b_async_read(register IO_CACHE *info, uchar *Buffer, size_t Count) +int _my_b_async_read(IO_CACHE *info, uchar *Buffer, size_t Count) { size_t length,read_length,diff_length,left_length,use_length,org_Count; size_t max_length; @@ -1532,7 +1532,7 @@ int _my_b_get(IO_CACHE *info) -1 On error; my_errno contains error code. */ -int _my_b_write(register IO_CACHE *info, const uchar *Buffer, size_t Count) +int _my_b_write(IO_CACHE *info, const uchar *Buffer, size_t Count) { size_t rest_length,length; my_off_t pos_in_file= info->pos_in_file; @@ -1606,7 +1606,7 @@ int _my_b_write(register IO_CACHE *info, const uchar *Buffer, size_t Count) the write buffer before we are ready with it. */ -int my_b_append(register IO_CACHE *info, const uchar *Buffer, size_t Count) +int my_b_append(IO_CACHE *info, const uchar *Buffer, size_t Count) { size_t rest_length,length; @@ -1670,7 +1670,7 @@ int my_b_safe_write(IO_CACHE *info, const uchar *Buffer, size_t Count) we will never get a seek over the end of the buffer */ -int my_block_write(register IO_CACHE *info, const uchar *Buffer, size_t Count, +int my_block_write(IO_CACHE *info, const uchar *Buffer, size_t Count, my_off_t pos) { size_t length; diff --git a/mysys/mf_iocache2.c b/mysys/mf_iocache2.c index 6cbde4d0ba21..a744c795a24c 100644 --- a/mysys/mf_iocache2.c +++ b/mysys/mf_iocache2.c @@ -401,7 +401,7 @@ size_t my_b_vprintf(IO_CACHE *info, const char* fmt, va_list args) if (*fmt == 's') /* String parameter */ { - reg2 char *par = va_arg(args, char *); + char *par = va_arg(args, char *); size_t length2 = strlen(par); /* TODO: implement precision */ out_length+= length2; @@ -424,7 +424,7 @@ size_t my_b_vprintf(IO_CACHE *info, const char* fmt, va_list args) } else if (*fmt == 'd' || *fmt == 'u') /* Integer parameter */ { - register int iarg; + int iarg; size_t length2; char buff[32]; @@ -459,7 +459,7 @@ size_t my_b_vprintf(IO_CACHE *info, const char* fmt, va_list args) else if ((*fmt == 'l' && fmt[1] == 'd') || fmt[1] == 'u') /* long parameter */ { - register long iarg; + long iarg; size_t length2; char buff[32]; diff --git a/mysys/mf_keycache.c b/mysys/mf_keycache.c index b6758316419c..6aa7bc3322c5 100644 --- a/mysys/mf_keycache.c +++ b/mysys/mf_keycache.c @@ -1513,7 +1513,7 @@ static void unlink_hash(KEY_CACHE *keycache, HASH_LINK *hash_link) static HASH_LINK *get_hash_link(KEY_CACHE *keycache, int file, my_off_t filepos) { - reg1 HASH_LINK *hash_link, **start; + HASH_LINK *hash_link, **start; #if defined(KEYCACHE_DEBUG) int cnt; #endif @@ -2511,7 +2511,7 @@ uchar *key_cache_read(KEY_CACHE *keycache, if (keycache->key_cache_inited) { /* Key cache is used */ - reg1 BLOCK_LINK *block; + BLOCK_LINK *block; uint read_length; uint offset; int page_st; @@ -2741,7 +2741,7 @@ int key_cache_insert(KEY_CACHE *keycache, if (keycache->key_cache_inited) { /* Key cache is used */ - reg1 BLOCK_LINK *block; + BLOCK_LINK *block; uint read_length; uint offset; int page_st; @@ -3011,7 +3011,7 @@ int key_cache_write(KEY_CACHE *keycache, if (keycache->key_cache_inited) { /* Key cache is used */ - reg1 BLOCK_LINK *block; + BLOCK_LINK *block; uint read_length; uint offset; int page_st; diff --git a/mysys/mf_pack.c b/mysys/mf_pack.c index 5e90948f0424..abdd0fe83aa4 100644 --- a/mysys/mf_pack.c +++ b/mysys/mf_pack.c @@ -121,12 +121,12 @@ void pack_dirname(char * to, const char *from) # length of new name */ -size_t cleanup_dirname(register char *to, const char *from) +size_t cleanup_dirname(char *to, const char *from) { - reg5 size_t length; - reg2 char * pos; - reg3 char * from_ptr; - reg4 char * start; + size_t length; + char *pos; + char *from_ptr; + char *start; char parent[5], /* for "FN_PARENTDIR" */ buff[FN_REFLEN+1],*end_parentdir; #ifdef BACKSLASH_MBTAIL diff --git a/mysys/mf_qsort.c b/mysys/mf_qsort.c index 56e1fbd13781..c13e403cf4b1 100644 --- a/mysys/mf_qsort.c +++ b/mysys/mf_qsort.c @@ -36,13 +36,13 @@ do { \ if (swap_ptrs) \ { \ - reg1 char **a = (char**) (A), **b = (char**) (B); \ + char **a = (char**) (A), **b = (char**) (B); \ char *tmp = *a; *a++ = *b; *b++ = tmp; \ } \ else \ { \ - reg1 char *a = (A), *b = (B); \ - reg3 char *end= a+size; \ + char *a = (A), *b = (B); \ + char *end= a+size; \ do \ { \ char tmp = *a; *a++ = *b; *b++ = tmp; \ diff --git a/mysys/mf_soundex.c b/mysys/mf_soundex.c index c32c454f1320..319ba3a60ebc 100644 --- a/mysys/mf_soundex.c +++ b/mysys/mf_soundex.c @@ -43,12 +43,12 @@ static char get_scode(CHARSET_INFO * cs, char **ptr,pbool remove_garbage); /* outputed string is 4 byte long */ /* out_pntr can be == in_pntr */ -void soundex(CHARSET_INFO * cs,register char * out_pntr, char * in_pntr, +void soundex(CHARSET_INFO * cs, char * out_pntr, char * in_pntr, pbool remove_garbage) { char ch,last_ch; - reg3 char * end; - register uchar *map=cs->to_upper; + char *end; + uchar *map=cs->to_upper; if (remove_garbage) { diff --git a/mysys/mf_wcomp.c b/mysys/mf_wcomp.c index 5e4a6891cd85..6b38c34bbdae 100644 --- a/mysys/mf_wcomp.c +++ b/mysys/mf_wcomp.c @@ -25,7 +25,7 @@ char wild_many='*'; char wild_one='?'; char wild_prefix=0; /* QQ this can potentially cause a SIGSEGV */ -int wild_compare(register const char *str, register const char *wildstr, +int wild_compare(const char *str, const char *wildstr, pbool str_is_pattern) { char cmp; diff --git a/mysys/my_alloc.c b/mysys/my_alloc.c index e689fb356a72..c03b416be176 100644 --- a/mysys/my_alloc.c +++ b/mysys/my_alloc.c @@ -155,7 +155,7 @@ void reset_root_defaults(MEM_ROOT *mem_root, size_t block_size, void *alloc_root(MEM_ROOT *mem_root, size_t length) { #if defined(HAVE_purify) && defined(EXTRA_DEBUG) - reg1 USED_MEM *next; + USED_MEM *next; DBUG_ENTER("alloc_root"); DBUG_PRINT("enter",("root: 0x%lx", (long) mem_root)); @@ -185,8 +185,8 @@ void *alloc_root(MEM_ROOT *mem_root, size_t length) #else size_t get_size, block_size; uchar* point; - reg1 USED_MEM *next= 0; - reg2 USED_MEM **prev; + USED_MEM *next= 0; + USED_MEM **prev; DBUG_ENTER("alloc_root"); DBUG_PRINT("enter",("root: 0x%lx", (long) mem_root)); DBUG_ASSERT(alloc_root_inited(mem_root)); @@ -303,8 +303,8 @@ void *multi_alloc_root(MEM_ROOT *root, ...) static inline void mark_blocks_free(MEM_ROOT* root) { - reg1 USED_MEM *next; - reg2 USED_MEM **last; + USED_MEM *next; + USED_MEM **last; /* iterate through (partially) free blocks, mark them free */ last= &root->free; @@ -351,7 +351,7 @@ static inline void mark_blocks_free(MEM_ROOT* root) void free_root(MEM_ROOT *root, myf MyFlags) { - reg1 USED_MEM *next,*old; + USED_MEM *next,*old; DBUG_ENTER("free_root"); DBUG_PRINT("enter",("root: 0x%lx flags: %u", (long) root, (uint) MyFlags)); diff --git a/mysys/my_compare.c b/mysys/my_compare.c index 1c9da674419b..596d1616475a 100644 --- a/mysys/my_compare.c +++ b/mysys/my_compare.c @@ -116,8 +116,8 @@ static int compare_bin(uchar *a, uint a_length, uchar *b, uint b_length, #define FCMP(A,B) ((int) (A) - (int) (B)) -int ha_key_cmp(register HA_KEYSEG *keyseg, register uchar *a, - register uchar *b, uint key_length, uint nextflag, +int ha_key_cmp(HA_KEYSEG *keyseg, uchar *a, + uchar *b, uint key_length, uint nextflag, uint *diff_pos) { int flag; diff --git a/mysys/my_error.c b/mysys/my_error.c index b1f57ba6761a..0e4be0643e6a 100644 --- a/mysys/my_error.c +++ b/mysys/my_error.c @@ -272,7 +272,7 @@ void my_printf_warning(const char *format, ...) @param MyFlags Flags */ -void my_message(uint error, const char *str, register myf MyFlags) +void my_message(uint error, const char *str, myf MyFlags) { (*error_handler_hook)(error, str, MyFlags); } diff --git a/mysys/my_fopen.c b/mysys/my_fopen.c index e3a933a048d5..6de339b78bb4 100644 --- a/mysys/my_fopen.c +++ b/mysys/my_fopen.c @@ -342,7 +342,7 @@ FILE *my_fdopen(File Filedes, const char *name, int Flags, myf MyFlags) a+ == O_RDWR|O_APPEND|O_CREAT */ -static void make_ftype(register char * to, register int flag) +static void make_ftype(char * to, int flag) { /* check some possible invalid combinations */ DBUG_ASSERT((flag & (O_TRUNC | O_APPEND)) != (O_TRUNC | O_APPEND)); diff --git a/mysys/my_getwd.c b/mysys/my_getwd.c index 121e0849e347..0c669ac67750 100644 --- a/mysys/my_getwd.c +++ b/mysys/my_getwd.c @@ -134,7 +134,7 @@ int my_setwd(const char *dir, myf MyFlags) /* Test if hard pathname */ /* Returns 1 if dirname is a hard path */ -int test_if_hard_path(register const char *dir_name) +int test_if_hard_path(const char *dir_name) { if (dir_name[0] == FN_HOMELIB && dir_name[1] == FN_LIBCHAR) return (home_dir != NullS && test_if_hard_path(home_dir)); diff --git a/mysys/my_once.c b/mysys/my_once.c index 7efb017a25c0..d5178b5e4cdc 100644 --- a/mysys/my_once.c +++ b/mysys/my_once.c @@ -37,8 +37,8 @@ void* my_once_alloc(size_t Size, myf MyFlags) { size_t get_size, max_left; uchar* point; - reg1 USED_MEM *next; - reg2 USED_MEM **prev; + USED_MEM *next; + USED_MEM **prev; Size= ALIGN_SIZE(Size); prev= &my_once_root_block; @@ -105,7 +105,7 @@ void *my_once_memdup(const void *src, size_t len, myf myflags) void my_once_free(void) { - reg1 USED_MEM *next,*old; + USED_MEM *next,*old; DBUG_ENTER("my_once_free"); for (next=my_once_root_block ; next ; ) diff --git a/mysys/ptr_cmp.c b/mysys/ptr_cmp.c index 66e70d73b56c..6f21cc0c3d5f 100644 --- a/mysys/ptr_cmp.c +++ b/mysys/ptr_cmp.c @@ -94,8 +94,8 @@ qsort2_cmp get_ptr_compare (size_t size) static int ptr_compare(size_t *compare_length, uchar **a, uchar **b) { - reg3 int length= *compare_length; - reg1 uchar *first,*last; + int length= *compare_length; + uchar *first,*last; DBUG_ASSERT(length > 0); first= *a; last= *b; @@ -110,8 +110,8 @@ static int ptr_compare(size_t *compare_length, uchar **a, uchar **b) static int ptr_compare_0(size_t *compare_length,uchar **a, uchar **b) { - reg3 int length= *compare_length; - reg1 uchar *first,*last; + int length= *compare_length; + uchar *first,*last; first= *a; last= *b; loop: @@ -131,8 +131,8 @@ static int ptr_compare_0(size_t *compare_length,uchar **a, uchar **b) static int ptr_compare_1(size_t *compare_length,uchar **a, uchar **b) { - reg3 int length= *compare_length-1; - reg1 uchar *first,*last; + int length= *compare_length-1; + uchar *first,*last; first= *a+1; last= *b+1; cmp(-1); @@ -152,8 +152,8 @@ static int ptr_compare_1(size_t *compare_length,uchar **a, uchar **b) static int ptr_compare_2(size_t *compare_length,uchar **a, uchar **b) { - reg3 int length= *compare_length-2; - reg1 uchar *first,*last; + int length= *compare_length-2; + uchar *first,*last; first= *a +2 ; last= *b +2; cmp(-2); @@ -174,8 +174,8 @@ static int ptr_compare_2(size_t *compare_length,uchar **a, uchar **b) static int ptr_compare_3(size_t *compare_length,uchar **a, uchar **b) { - reg3 int length= *compare_length-3; - reg1 uchar *first,*last; + int length= *compare_length-3; + uchar *first,*last; first= *a +3 ; last= *b +3; cmp(-3); diff --git a/mysys/queues.c b/mysys/queues.c index bace681657f8..3dbe09d69abc 100644 --- a/mysys/queues.c +++ b/mysys/queues.c @@ -202,9 +202,9 @@ void delete_queue(QUEUE *queue) /* Code for insert, search and delete of elements */ -void queue_insert(register QUEUE *queue, uchar *element) +void queue_insert(QUEUE *queue, uchar *element) { - reg2 uint idx, next; + uint idx, next; DBUG_ASSERT(queue->elements < queue->max_elements); queue->root[0]= element; idx= ++queue->elements; @@ -229,7 +229,7 @@ void queue_insert(register QUEUE *queue, uchar *element) */ -int queue_insert_safe(register QUEUE *queue, uchar *element) +int queue_insert_safe(QUEUE *queue, uchar *element) { if (queue->elements == queue->max_elements) @@ -248,7 +248,7 @@ int queue_insert_safe(register QUEUE *queue, uchar *element) /* Remove item from queue */ /* Returns pointer to removed element */ -uchar *queue_remove(register QUEUE *queue, uint idx) +uchar *queue_remove(QUEUE *queue, uint idx) { uchar *element; DBUG_ASSERT(idx < queue->max_elements); @@ -269,7 +269,7 @@ void queue_replaced(QUEUE *queue) #ifndef OLD_VERSION -void _downheap(register QUEUE *queue, uint idx) +void _downheap(QUEUE *queue, uint idx) { uchar *element; uint elements,half_queue,offset_to_key, next_index; @@ -323,7 +323,7 @@ void _downheap(register QUEUE *queue, uint idx) suit or new benchmarks anyone wants to run for comparisons. */ /* Fix heap when index have changed */ -void _downheap(register QUEUE *queue, uint idx) +void _downheap(QUEUE *queue, uint idx) { uchar *element; uint elements,half_queue,next_index,offset_to_key; diff --git a/mysys/testhash.c b/mysys/testhash.c index daff98d16a0c..a0078787e51e 100644 --- a/mysys/testhash.c +++ b/mysys/testhash.c @@ -59,7 +59,7 @@ int main(int argc,char *argv[]) static int do_test() { - register uint i,j; + uint i,j; uint n1,n2,n3; uint write_count,update,delete; ulong pos; diff --git a/mysys/typelib.c b/mysys/typelib.c index fc6bf9cf7594..5bcb8696a51a 100644 --- a/mysys/typelib.c +++ b/mysys/typelib.c @@ -128,8 +128,8 @@ int find_type(const char *x, const TYPELIB *typelib, uint flags) first type is 1, 0 = empty field */ -void make_type(register char * to, register uint nr, - register TYPELIB *typelib) +void make_type(char * to, uint nr, + TYPELIB *typelib) { DBUG_ENTER("make_type"); if (!nr) diff --git a/mysys_ssl/my_getopt.cc b/mysys_ssl/my_getopt.cc index 4e3bfa37497a..ee9fb09882bc 100644 --- a/mysys_ssl/my_getopt.cc +++ b/mysys_ssl/my_getopt.cc @@ -1254,7 +1254,7 @@ static int findopt(char *optpat, uint length, 2.) Returns -1 if strings differ, 0 if they are equal */ -my_bool getopt_compare_strings(register const char *s, register const char *t, +my_bool getopt_compare_strings(const char *s, const char *t, uint length) { char const *end= s + length; diff --git a/regex/debug.ih b/regex/debug.ih index 867f06608d9e..a808fb7001fd 100644 --- a/regex/debug.ih +++ b/regex/debug.ih @@ -5,7 +5,7 @@ extern "C" { /* === debug.c === */ void regprint(my_regex_t *r, FILE *d); -static void s_print(const CHARSET_INFO *charset, register struct re_guts *g, +static void s_print(const CHARSET_INFO *charset, struct re_guts *g, FILE *d); static char *regchar(const CHARSET_INFO *charset, int ch,char *buf); diff --git a/regex/engine.c b/regex/engine.c index 5e6fed23495e..47c719401108 100644 --- a/regex/engine.c +++ b/regex/engine.c @@ -65,19 +65,19 @@ struct match { static int /* 0 success, MY_REG_NOMATCH failure */ matcher(charset,g, str, nmatch, pmatch, eflags) const CHARSET_INFO *charset; -register struct re_guts *g; +struct re_guts *g; char *str; size_t nmatch; my_regmatch_t pmatch[]; int eflags; { - register char *endp; - register uint i; + char *endp; + uint i; struct match mv; - register struct match *m = &mv; - register char *dp; - register const sopno gf = g->firststate+1; /* +1 for OEND */ - register const sopno gl = g->laststate; + struct match *m = &mv; + char *dp; + const sopno gf = g->firststate+1; /* +1 for OEND */ + const sopno gl = g->laststate; char *start; char *stop; @@ -238,24 +238,24 @@ int eflags; static char * /* == stop (success) always */ dissect(charset, m, start, stop, startst, stopst) const CHARSET_INFO *charset; -register struct match *m; +struct match *m; char *start; char *stop; sopno startst; sopno stopst; { - register uint i; - register sopno ss; /* start sop of current subRE */ - register sopno es; /* end sop of current subRE */ - register char *sp; /* start of string matched by it */ - register char *stp; /* string matched by it cannot pass here */ - register char *rest; /* start of rest of string */ - register char *tail; /* string unmatched by rest of RE */ - register sopno ssub; /* start sop of subsubRE */ - register sopno esub; /* end sop of subsubRE */ - register char *ssp; /* start of string matched by subsubRE */ - register char *sep; /* end of string matched by subsubRE */ - register char *oldssp; /* previous ssp */ + uint i; + sopno ss; /* start sop of current subRE */ + sopno es; /* end sop of current subRE */ + char *sp; /* start of string matched by it */ + char *stp; /* string matched by it cannot pass here */ + char *rest; /* start of rest of string */ + char *tail; /* string unmatched by rest of RE */ + sopno ssub; /* start sop of subsubRE */ + sopno esub; /* end sop of subsubRE */ + char *ssp; /* start of string matched by subsubRE */ + char *sep; /* end of string matched by subsubRE */ + char *oldssp; /* previous ssp */ AT("diss", start, stop, startst, stopst); sp = start; @@ -424,25 +424,25 @@ sopno stopst; static char * /* == stop (success) or NULL (failure) */ backref(charset,m, start, stop, startst, stopst, lev) const CHARSET_INFO *charset; -register struct match *m; +struct match *m; char *start; char *stop; sopno startst; sopno stopst; sopno lev; /* PLUS nesting level */ { - register uint i; - register sopno ss; /* start sop of current subRE */ - register char *sp; /* start of string matched by it */ - register sopno ssub; /* start sop of subsubRE */ - register sopno esub; /* end sop of subsubRE */ - register char *ssp; /* start of string matched by subsubRE */ - register char *dp; - register size_t len; - register int hard; - register sop s; - register my_regoff_t offsave; - register cset *cs; + uint i; + sopno ss; /* start sop of current subRE */ + char *sp; /* start of string matched by it */ + sopno ssub; /* start sop of subsubRE */ + sopno esub; /* end sop of subsubRE */ + char *ssp; /* start of string matched by subsubRE */ + char *dp; + size_t len; + int hard; + sop s; + my_regoff_t offsave; + cset *cs; AT("back", start, stop, startst, stopst); sp = start; @@ -630,21 +630,21 @@ sopno lev; /* PLUS nesting level */ static char * /* where tentative match ended, or NULL */ fast(charset, m, start, stop, startst, stopst) const CHARSET_INFO *charset; -register struct match *m; +struct match *m; char *start; char *stop; sopno startst; sopno stopst; { - register states st = m->st; - register states fresh = m->fresh; - register states tmp = m->tmp; - register char *p = start; - register int c = (start == m->beginp) ? OUT : *(start-1); - register int lastc; /* previous c */ - register int flagch; - register int i; - register char *coldp; /* last p after which no match was underway */ + states st = m->st; + states fresh = m->fresh; + states tmp = m->tmp; + char *p = start; + int c = (start == m->beginp) ? OUT : *(start-1); + int lastc; /* previous c */ + int flagch; + int i; + char *coldp; /* last p after which no match was underway */ CLEAR(st); SET1(st, startst); @@ -722,21 +722,21 @@ sopno stopst; static char * /* where it ended */ slow(charset, m, start, stop, startst, stopst) const CHARSET_INFO *charset; -register struct match *m; +struct match *m; char *start; char *stop; sopno startst; sopno stopst; { - register states st = m->st; - register states empty = m->empty; - register states tmp = m->tmp; - register char *p = start; - register int c = (start == m->beginp) ? OUT : *(start-1); - register int lastc; /* previous c */ - register int flagch; - register int i; - register char *matchp; /* last p at which a match ended */ + states st = m->st; + states empty = m->empty; + states tmp = m->tmp; + char *p = start; + int c = (start == m->beginp) ? OUT : *(start-1); + int lastc; /* previous c */ + int flagch; + int i; + char *matchp; /* last p at which a match ended */ AT("slow", start, stop, startst, stopst); CLEAR(st); @@ -818,19 +818,19 @@ sopno stopst; */ static states step(g, start, stop, bef, ch, aft) -register struct re_guts *g; +struct re_guts *g; sopno start; /* start state within strip */ sopno stop; /* state after stop state within strip */ -register states bef; /* states reachable before */ +states bef; /* states reachable before */ int ch; /* character or NONCHAR code */ -register states aft; /* states already known reachable after */ +states aft; /* states already known reachable after */ { - register cset *cs; - register sop s; - register sopno pc; - register onestate here; /* note, macros know this name */ - register sopno look; - register onestate i; /* Changed from int by Monty */ + cset *cs; + sop s; + sopno pc; + onestate here; /* note, macros know this name */ + sopno look; + onestate i; /* Changed from int by Monty */ for (pc = start, INIT(here, pc); pc != stop; pc++, INC(here)) { s = g->strip[pc]; @@ -946,9 +946,9 @@ states st; int ch; FILE *d; { - register struct re_guts *g = m->g; - register int i; - register int first = 1; + struct re_guts *g = m->g; + int i; + int first = 1; char buf[10]; if (!(m->eflags&MY_REG_TRACE)) diff --git a/regex/engine.ih b/regex/engine.ih index 993c725c9523..6d17c1f09270 100644 --- a/regex/engine.ih +++ b/regex/engine.ih @@ -4,20 +4,20 @@ extern "C" { #endif /* === engine.c === */ -static int matcher(const CHARSET_INFO *charset,register struct re_guts *g, +static int matcher(const CHARSET_INFO *charset,struct re_guts *g, char *string, size_t nmatch, my_regmatch_t pmatch[], int eflags); -static char *dissect(const CHARSET_INFO *charset, register struct match *m, +static char *dissect(const CHARSET_INFO *charset, struct match *m, char *start, char *stop, sopno startst, sopno stopst); -static char *backref(const CHARSET_INFO *charset, register struct match *m, +static char *backref(const CHARSET_INFO *charset, struct match *m, char *start, char *stop, sopno startst, sopno stopst, sopno lev); -static char *fast(const CHARSET_INFO *charset, register struct match *m, +static char *fast(const CHARSET_INFO *charset, struct match *m, char *start, char *stop, sopno startst, sopno stopst); -static char *slow(const CHARSET_INFO *charset, register struct match *m, +static char *slow(const CHARSET_INFO *charset, struct match *m, char *start, char *stop, sopno startst, sopno stopst); -static states step(register struct re_guts *g, sopno start, sopno stop, - register states bef, int ch, register states aft); +static states step(struct re_guts *g, sopno start, sopno stop, + states bef, int ch, states aft); #define BOL (OUT+1) #define EOL (BOL+1) #define BOLEOL (BOL+2) diff --git a/regex/main.c b/regex/main.c index c20de35c80a8..c1206683b9d8 100644 --- a/regex/main.c +++ b/regex/main.c @@ -67,7 +67,7 @@ char *argv[]; int c; int errflg = 0; int opt_inline = 0; - register int i; + int i; char *input_file_name= NULL; extern int optind; extern char *optarg; @@ -291,7 +291,7 @@ int opts; /* may not match f1 */ int err; int len; const char *type = (opts & MY_REG_EXTENDED) ? "ERE" : "BRE"; - register int i; + int i; char *grump; char f0copy[1000]; char f2copy[1000]; @@ -388,9 +388,9 @@ options(type, s) int type; /* 'c' compile, 'e' exec */ char *s; { - register char *p; - register int o = (type == 'c') ? copts : eopts; - register const char *legal = (type == 'c') ? "bisnmp" : "^$#tl"; + char *p; + int o = (type == 'c') ? copts : eopts; + const char *legal = (type == 'c') ? "bisnmp" : "^$#tl"; for (p = s; *p != '\0'; p++) if (strchr(legal, *p) != NULL) @@ -454,7 +454,7 @@ char *s; */ void fixstr(p) -register char *p; +char *p; { if (p == NULL) return; @@ -480,11 +480,11 @@ char *str; my_regmatch_t sub; char *should; { - register int len; - register int shlen; - register char *p; + int len; + int shlen; + char *p; static char grump[500]; - register char *at = NULL; + char *at = NULL; if (should != NULL && strcmp(should, "-") == 0) should = NULL; diff --git a/regex/main.ih b/regex/main.ih index f0104cc18c06..6e8d3273a044 100644 --- a/regex/main.ih +++ b/regex/main.ih @@ -8,7 +8,7 @@ void regress(FILE *in); void rx_try(char *f0, char *f1, char *f2, char *f3, char *f4, int opts); int options(int type, char *s); int opt(int c, char *s); -void fixstr(register char *p); +void fixstr(char *p); char *check(char *str, my_regmatch_t sub, char *should); static char *eprint(int err); static int efind(char *name); diff --git a/regex/regcomp.ih b/regex/regcomp.ih index babd0200056c..23833c0e0bbd 100644 --- a/regex/regcomp.ih +++ b/regex/regcomp.ih @@ -4,45 +4,45 @@ extern "C" { #endif /* === regcomp.c === */ -static void p_ere(register struct parse *p, int stop); -static void p_ere_exp(register struct parse *p); -static void p_str(register struct parse *p); -static void p_bre(register struct parse *p, register int end1, register int end2); -static int p_simp_re(register struct parse *p, int starordinary); -static int p_count(register struct parse *p); -static void p_bracket(register struct parse *p); -static void p_b_term(register struct parse *p, register cset *cs); -static void p_b_cclass(register struct parse *p, register cset *cs); -static void p_b_eclass(register struct parse *p, register cset *cs); -static char p_b_symbol(register struct parse *p); -static char p_b_coll_elem(register struct parse *p, int endc); +static void p_ere(struct parse *p, int stop); +static void p_ere_exp(struct parse *p); +static void p_str(struct parse *p); +static void p_bre(struct parse *p, int end1, int end2); +static int p_simp_re(struct parse *p, int starordinary); +static int p_count(struct parse *p); +static void p_bracket(struct parse *p); +static void p_b_term(struct parse *p, cset *cs); +static void p_b_cclass(struct parse *p, cset *cs); +static void p_b_eclass(struct parse *p, cset *cs); +static char p_b_symbol(struct parse *p); +static char p_b_coll_elem(struct parse *p, int endc); static char othercase(const CHARSET_INFO *charset,int ch); -static void bothcases(register struct parse *p, int ch); -static void ordinary(register struct parse *p, register int ch); -static void nonnewline(register struct parse *p); -static void repeat(register struct parse *p, sopno start, int from, int to); -static int seterr(register struct parse *p, int e); -static cset *allocset(register struct parse *p); -static void freeset(register struct parse *p, register cset *cs); -static int freezeset(register struct parse *p, register cset *cs); -static int firstch(register struct parse *p, register cset *cs); -static int nch(register struct parse *p, register cset *cs); +static void bothcases(struct parse *p, int ch); +static void ordinary(struct parse *p, int ch); +static void nonnewline(struct parse *p); +static void repeat(struct parse *p, sopno start, int from, int to); +static int seterr(struct parse *p, int e); +static cset *allocset(struct parse *p); +static void freeset(struct parse *p, cset *cs); +static int freezeset(struct parse *p, cset *cs); +static int firstch(struct parse *p, cset *cs); +static int nch(struct parse *p, cset *cs); #ifdef USE_ORIG_REGEX_CODE -static void mcadd(register struct parse *p, register cset *cs, register char *cp); +static void mcadd(struct parse *p, cset *cs, char *cp); #endif -static void mcinvert(register struct parse *p, register cset *cs); -static void mccase(register struct parse *p, register cset *cs); -static int isinsets(register struct re_guts *g, int c); -static int samesets(register struct re_guts *g, int c1, int c2); -static void categorize(struct parse *p, register struct re_guts *g); -static sopno dupl(register struct parse *p, sopno start, sopno finish); -static void doemit(register struct parse *p, sop op, size_t opnd); -static void doinsert(register struct parse *p, sop op, size_t opnd, sopno pos); -static void dofwd(register struct parse *p, sopno pos, sop value); -static void enlarge(register struct parse *p, sopno size); -static void stripsnug(register struct parse *p, register struct re_guts *g); -static void findmust(register struct parse *p, register struct re_guts *g); -static sopno pluscount(register struct parse *p, register struct re_guts *g); +static void mcinvert(struct parse *p, cset *cs); +static void mccase(struct parse *p, cset *cs); +static int isinsets(struct re_guts *g, int c); +static int samesets(struct re_guts *g, int c1, int c2); +static void categorize(struct parse *p, struct re_guts *g); +static sopno dupl(struct parse *p, sopno start, sopno finish); +static void doemit(struct parse *p, sop op, size_t opnd); +static void doinsert(struct parse *p, sop op, size_t opnd, sopno pos); +static void dofwd(struct parse *p, sopno pos, sop value); +static void enlarge(struct parse *p, sopno size); +static void stripsnug(struct parse *p, struct re_guts *g); +static void findmust(struct parse *p, struct re_guts *g); +static sopno pluscount(struct parse *p, struct re_guts *g); #ifdef __cplusplus } diff --git a/regex/regerror.c b/regex/regerror.c index cbf8c5a72899..29c695945819 100644 --- a/regex/regerror.c +++ b/regex/regerror.c @@ -58,10 +58,10 @@ static struct rerr { size_t my_regerror(int errcode, const my_regex_t *preg, char *errbuf, size_t errbuf_size) { - register struct rerr *r; - register size_t len; - register int target = errcode &~ MY_REG_ITOA; - register char *s; + struct rerr *r; + size_t len; + int target = errcode &~ MY_REG_ITOA; + char *s; char convbuf[50]; if (errcode == MY_REG_ATOI) @@ -104,7 +104,7 @@ regatoi(preg, localbuf) const my_regex_t *preg; char *localbuf; { - register struct rerr *r; + struct rerr *r; for (r = rerrs; r->code != 0; r++) if (strcmp(r->name, preg->re_endp) == 0) break; diff --git a/regex/regexec.c b/regex/regexec.c index a25fffe3838c..ca69924f2cbb 100644 --- a/regex/regexec.c +++ b/regex/regexec.c @@ -118,7 +118,7 @@ my_regmatch_t pmatch[]; int eflags; { char *pstr = (char *) str; - register struct re_guts *g = preg->re_g; + struct re_guts *g = preg->re_g; #ifdef REDEBUG # define GOODFLAGS(f) (f) #else diff --git a/regex/regexp.c b/regex/regexp.c index 70d9f4cf254e..df7c5f258e5f 100644 --- a/regex/regexp.c +++ b/regex/regexp.c @@ -256,10 +256,10 @@ regexp *regcomp(exp,excompat) char *exp; int excompat; /* \( \) operators like in unix ex */ { - register regexp *r; - register char *scan; - register char *longest; - register int len; + regexp *r; + char *scan; + char *longest; + int len; int flags; short *exp2,*dest,c; @@ -388,10 +388,10 @@ static char *reg(paren, flagp) int paren; /* Parenthesized? */ int *flagp; { - register char *ret; - register char *br; - register char *ender; - register int parno=0; /* make gcc happy */ + char *ret; + char *br; + char *ender; + int parno=0; /* make gcc happy */ int flags; *flagp = HASWIDTH; /* Tentatively. */ @@ -457,9 +457,9 @@ int *flagp; static char *regbranch(flagp) int *flagp; { - register char *ret; - register char *chain; - register char *latest; + char *ret; + char *chain; + char *latest; int flags; *flagp = WORST; /* Tentatively. */ @@ -494,9 +494,9 @@ int *flagp; static char *regpiece(flagp) int *flagp; { - register char *ret; - register short op; - /* register char *nxt; */ + char *ret; + short op; + /* char *nxt; */ int flags; ret = regatom(&flags); @@ -558,7 +558,7 @@ int *flagp; static char *regatom(flagp) int *flagp; { - register char *ret; + char *ret; int flags; *flagp = WORST; /* Tentatively. */ @@ -581,8 +581,8 @@ int *flagp; ret = regnode(WORDEND); break; case LSQBRAC:{ - register int class; - register int classend; + int class; + int classend; if (*regparse == CARET) { /* Complement of range. */ ret = regnode(ANYBUT); @@ -630,8 +630,8 @@ int *flagp; FAIL("* follows nothing\n"); default:{ - register int len; - register short ender; + int len; + short ender; regparse--; for (len=0; regparse[len] && @@ -665,8 +665,8 @@ int *flagp; static char *regnode(op) char op; { - register char *ret; - register char *ptr; + char *ret; + char *ptr; ret = regcode; if (ret == ®dummy) { @@ -703,9 +703,9 @@ static void reginsert(op, opnd) char op; char *opnd; { - register char *src; - register char *dst; - register char *place; + char *src; + char *dst; + char *place; if (regcode == ®dummy) { regsize += 3; @@ -730,9 +730,9 @@ static void regtail(p, val) char *p; char *val; { - register char *scan; - register char *temp; - register int offset; + char *scan; + char *temp; + int offset; if (p == ®dummy) return; @@ -796,10 +796,10 @@ STATIC char *regprop(); - regexec - match a regexp against a string */ int regexec(prog, string) -register regexp *prog; -register char *string; +regexp *prog; +char *string; { - register char *s; + char *s; /* Be paranoid... */ if (prog == (regexp *)NULL || string == (char *)NULL) { @@ -855,9 +855,9 @@ register char *string; static int regtry(regexp *prog, char *string) { - register int i; - register char **sp; - register char **ep; + int i; + char **sp; + char **ep; reginput = string; regstartp = prog->startp; @@ -890,7 +890,7 @@ static int regtry(regexp *prog, char *string) static int regmatch(char *prog) { - register char *scan; /* Current node. */ + char *scan; /* Current node. */ char *nxt; /* nxt node. */ scan = prog; @@ -934,8 +934,8 @@ static int regmatch(char *prog) return (0); break; case EXACTLY:{ - register int len; - register char *opnd; + int len; + char *opnd; opnd = OPERAND(scan); /* Inline the first character, for speed. */ @@ -972,8 +972,8 @@ static int regmatch(char *prog) case OPEN + 7: case OPEN + 8: case OPEN + 9:{ - register int no; - register char *save; + int no; + char *save; no = OP(scan) - OPEN; save = reginput; @@ -999,8 +999,8 @@ static int regmatch(char *prog) case CLOSE + 7: case CLOSE + 8: case CLOSE + 9:{ - register int no; - register char *save; + int no; + char *save; no = OP(scan) - CLOSE; save = reginput; @@ -1018,7 +1018,7 @@ static int regmatch(char *prog) } case BRANCH:{ - register char *save; + char *save; if (OP(nxt) != BRANCH) /* No choice. */ nxt = OPERAND(scan); /* Avoid recursion. */ @@ -1036,10 +1036,10 @@ static int regmatch(char *prog) } break; case STAR:{ - register char nextch; - register int no; - register char *save; - register int minimum; + char nextch; + int no; + char *save; + int minimum; /* * Lookahead to avoid useless match attempts when we know @@ -1089,9 +1089,9 @@ static int regmatch(char *prog) static int regrepeat(char *p) { - register int count = 0; - register char *scan; - register char *opnd; + int count = 0; + char *scan; + char *opnd; scan = reginput; opnd = OPERAND(p); @@ -1133,9 +1133,9 @@ static int regrepeat(char *p) - regnext - dig the "nxt" pointer out of a node */ -static char *regnext(register char *p) +static char *regnext(char *p) { - register int offset; + int offset; if (p == ®dummy) return ((char *)NULL); @@ -1159,9 +1159,9 @@ STATIC char *regprop(); */ void regdump(regexp *r) { - register char *s; - register char op = EXACTLY; /* Arbitrary non-END op. */ - register char *nxt; + char *s; + char op = EXACTLY; /* Arbitrary non-END op. */ + char *nxt; s = r->program + 1; while (op != END) { /* While that wasn't END last time... */ @@ -1200,7 +1200,7 @@ void regdump(regexp *r) static char *regprop(char *op) { - register char *p; + char *p; static char buf[50]; strcpy(buf, ":"); @@ -1280,11 +1280,11 @@ static char *regprop(char *op) char *regsub(regexp *prog, char *source, char *dest, int n) { - register char *src; - register char *dst; - register char c; - register int no; - register int len; + char *src; + char *dst; + char c; + int no; + int len; extern char *strncpy(); if (prog == (regexp *)NULL || diff --git a/regex/regfree.c b/regex/regfree.c index f764fcdf84e0..2ebadd8c2052 100644 --- a/regex/regfree.c +++ b/regex/regfree.c @@ -15,7 +15,7 @@ void my_regfree(preg) my_regex_t *preg; { - register struct re_guts *g; + struct re_guts *g; if (preg->re_magic != MAGIC1) /* oops */ return; /* nice to complain, but hard */ diff --git a/regex/split.c b/regex/split.c index abae74eba9c2..44bafedd38cf 100644 --- a/regex/split.c +++ b/regex/split.c @@ -12,14 +12,14 @@ char *fields[]; /* list is not NULL-terminated */ int nfields; /* number of entries available in fields[] */ char *sep; /* "" white, "c" single char, "ab" [ab]+ */ { - register char *p = string; - register char c; /* latest character */ - register char sepc = sep[0]; - register char sepc2; - register int fn; - register char **fp = fields; - register char *sepp; - register int trimtrail; + char *p = string; + char c; /* latest character */ + char sepc = sep[0]; + char sepc2; + int fn; + char **fp = fields; + char *sepp; + int trimtrail; /* white space */ if (sepc == '\0') { @@ -153,7 +153,7 @@ int argc; char *argv[]; { char buf[512]; - register int n; + int n; # define MNF 10 char *fields[MNF]; @@ -193,7 +193,7 @@ char *seps; { # define NF 5 char *fields[NF]; - register int nf; + int nf; nf = split(string, fields, NF, seps); print(nf, NF, fields); @@ -204,8 +204,8 @@ int nf; int nfp; char *fields[]; { - register int fn; - register int bound; + int fn; + int bound; bound = (nf > nfp) ? nfp : nf; printf("%d:\t", nf); @@ -285,12 +285,12 @@ struct { regress() { char buf[512]; - register int n; + int n; char *fields[RNF+1]; - register int nf; - register int i; - register int printit; - register char *f; + int nf; + int i; + int printit; + char *f; for (n = 0; tests[n].str != NULL; n++) { (void) strcpy(buf, tests[n].str); diff --git a/sql-common/pack.c b/sql-common/pack.c index 02a4efe4ac03..7f9238d7c411 100644 --- a/sql-common/pack.c +++ b/sql-common/pack.c @@ -21,7 +21,7 @@ /* Get the length of next field. Change parameter to point at fieldstart */ ulong STDCALL net_field_length(uchar **packet) { - reg1 uchar *pos= (uchar *)*packet; + uchar *pos= (uchar *)*packet; if (*pos < 251) { (*packet)++; @@ -49,7 +49,7 @@ ulong STDCALL net_field_length(uchar **packet) /* The same as above but returns longlong */ my_ulonglong net_field_length_ll(uchar **packet) { - reg1 uchar *pos= *packet; + uchar *pos= *packet; if (*pos < 251) { (*packet)++; diff --git a/sql/derror.cc b/sql/derror.cc index 6b8c74c03a7a..a67db7645284 100644 --- a/sql/derror.cc +++ b/sql/derror.cc @@ -100,7 +100,7 @@ bool init_errmessage(void) bool read_texts(const char *file_name, const char *language, const char ***point, uint error_messages) { - register uint i; + uint i; uint count,funktpos,textcount; size_t length; File file; diff --git a/sql/field.cc b/sql/field.cc index 98d695a08dc5..a73bd58a0fb0 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -2385,7 +2385,7 @@ type_conversion_status Field_decimal::store(double nr) return TYPE_WARN_OUT_OF_RANGE; } - reg4 uint i; + uint i; size_t length; uchar fyllchar,*to; char buff[DOUBLE_TO_STRING_CONVERSION_BUFFER_SIZE]; diff --git a/sql/field.h b/sql/field.h index 1fa49dec9243..0e777326f47f 100644 --- a/sql/field.h +++ b/sql/field.h @@ -1301,7 +1301,7 @@ class Field */ bool is_part_of_actual_key(THD *thd, uint cur_index, KEY *cur_index_info); - friend int cre_myisam(char * name, register TABLE *form, uint options, + friend int cre_myisam(char * name, TABLE *form, uint options, ulonglong auto_increment_value); friend class Copy_field; friend class Item_avg_field; diff --git a/sql/filesort.cc b/sql/filesort.cc index 3bd99af32171..1bf8b72c9562 100644 --- a/sql/filesort.cc +++ b/sql/filesort.cc @@ -1228,7 +1228,7 @@ void make_sortkey(Sort_param *param, uchar *to, uchar *ref_pos) static void register_used_fields(Sort_param *param) { - reg1 SORT_FIELD *sort_field; + SORT_FIELD *sort_field; TABLE *table=param->sort_form; MY_BITMAP *bitmap= table->read_set; @@ -1459,7 +1459,7 @@ bool check_if_pq_applicable(Opt_trace_context *trace, int merge_many_buff(Sort_param *param, uchar *sort_buffer, BUFFPEK *buffpek, uint *maxbuffer, IO_CACHE *t_file) { - register uint i; + uint i; IO_CACHE t_file2,*from_file,*to_file,*temp; BUFFPEK *lastbuff; DBUG_ENTER("merge_many_buff"); @@ -1517,7 +1517,7 @@ int merge_many_buff(Sort_param *param, uchar *sort_buffer, uint read_to_buffer(IO_CACHE *fromfile, BUFFPEK *buffpek, uint rec_length) { - register uint count; + uint count; uint length; if ((count=(uint) min((ha_rows) buffpek->max_keys,buffpek->count))) @@ -1769,7 +1769,7 @@ int merge_buffers(Sort_param *param, IO_CACHE *from_file, } else { - register uchar *end; + uchar *end; strpos= buffpek->key+offset; for (end= strpos+buffpek->mem_count*rec_length ; strpos != end ; diff --git a/sql/gen_lex_hash.cc b/sql/gen_lex_hash.cc index 7c4c4eff19e5..9c9deed278af 100644 --- a/sql/gen_lex_hash.cc +++ b/sql/gen_lex_hash.cc @@ -418,8 +418,8 @@ int main(int argc,char **argv) static SYMBOL *get_hash_symbol(const char *s,\n\ unsigned int len,bool function)\n\ {\n\ - register uchar *hash_map;\n\ - register const char *cur_str= s;\n\ + uchar *hash_map;\n\ + const char *cur_str= s;\n\ \n\ if (len == 0) {\n\ DBUG_PRINT(\"warning\", (\"get_hash_symbol() received a request for a zero-length symbol, which is probably a mistake.\"));\ @@ -431,25 +431,25 @@ static SYMBOL *get_hash_symbol(const char *s,\n\ if (function){\n\ if (len>sql_functions_max_len) return 0;\n\ hash_map= sql_functions_map;\n\ - register uint32 cur_struct= uint4korr(hash_map+((len-1)*4));\n\ + uint32 cur_struct= uint4korr(hash_map+((len-1)*4));\n\ \n\ for (;;){\n\ - register uchar first_char= (uchar)cur_struct;\n\ + uchar first_char= (uchar)cur_struct;\n\ \n\ if (first_char == 0)\n\ {\n\ - register int16 ires= (int16)(cur_struct>>16);\n\ + int16 ires= (int16)(cur_struct>>16);\n\ if (ires==array_elements(symbols)) return 0;\n\ - register SYMBOL *res;\n\ + SYMBOL *res;\n\ if (ires>=0) \n\ res= symbols+ires;\n\ else\n\ res= sql_functions-ires-1;\n\ - register uint count= (uint) (cur_str - s);\n\ + uint count= (uint) (cur_str - s);\n\ return lex_casecmp(cur_str,res->name+count,len-count) ? 0 : res;\n\ }\n\ \n\ - register uchar cur_char= (uchar)to_upper_lex[(uchar)*cur_str];\n\ + uchar cur_char= (uchar)to_upper_lex[(uchar)*cur_str];\n\ if (cur_char>=8;\n\ if (cur_char>(uchar)cur_struct) return 0;\n\ @@ -465,20 +465,20 @@ static SYMBOL *get_hash_symbol(const char *s,\n\ }else{\n\ if (len>symbols_max_len) return 0;\n\ hash_map= symbols_map;\n\ - register uint32 cur_struct= uint4korr(hash_map+((len-1)*4));\n\ + uint32 cur_struct= uint4korr(hash_map+((len-1)*4));\n\ \n\ for (;;){\n\ - register uchar first_char= (uchar)cur_struct;\n\ + uchar first_char= (uchar)cur_struct;\n\ \n\ if (first_char==0){\n\ - register int16 ires= (int16)(cur_struct>>16);\n\ + int16 ires= (int16)(cur_struct>>16);\n\ if (ires==array_elements(symbols)) return 0;\n\ - register SYMBOL *res= symbols+ires;\n\ - register uint count= (uint) (cur_str - s);\n\ + SYMBOL *res= symbols+ires;\n\ + uint count= (uint) (cur_str - s);\n\ return lex_casecmp(cur_str,res->name+count,len-count)!=0 ? 0 : res;\n\ }\n\ \n\ - register uchar cur_char= (uchar)to_upper_lex[(uchar)*cur_str];\n\ + uchar cur_char= (uchar)to_upper_lex[(uchar)*cur_str];\n\ if (cur_char>=8;\n\ if (cur_char>(uchar)cur_struct) return 0;\n\ diff --git a/sql/handler.cc b/sql/handler.cc index ce7703753c10..186e5da78acd 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -3347,7 +3347,7 @@ int handler::ha_index_read_last(uchar *buf, const uchar *key, uint key_len) */ int handler::read_first_row(uchar * buf, uint primary_key) { - register int error; + int error; DBUG_ENTER("handler::read_first_row"); ha_statistic_increment(&SSV::ha_read_first_count); diff --git a/sql/item_func.cc b/sql/item_func.cc index d0204b64f575..01273ea4ff81 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -3340,8 +3340,8 @@ longlong Item_func_ord::val_int() #ifdef USE_MB if (use_mb(res->charset())) { - register const char *str=res->ptr(); - register uint32 n=0, l=my_ismbchar(res->charset(),str,str+res->length()); + const char *str=res->ptr(); + uint32 n=0, l=my_ismbchar(res->charset(),str,str+res->length()); if (!l) return (longlong)((uchar) *str); while (l--) diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc index 81e7b4dbef60..7bda9779c2b4 100644 --- a/sql/item_strfunc.cc +++ b/sql/item_strfunc.cc @@ -1243,7 +1243,7 @@ String *Item_func_reverse::val_str(String *str) #ifdef USE_MB if (use_mb(res->charset())) { - register uint32 l; + uint32 l; while (ptr < end) { if ((l= my_ismbchar(res->charset(),ptr,end))) @@ -1292,7 +1292,7 @@ String *Item_func_replace::val_str(String *str) bool alloced=0; #ifdef USE_MB const char *ptr,*end,*strend,*search,*search_end; - register uint32 l; + uint32 l; bool binary_cmp; #endif @@ -1344,7 +1344,7 @@ String *Item_func_replace::val_str(String *str) { if (*ptr == *search) { - register char *i,*j; + char *i,*j; i=(char*) ptr+1; j=(char*) search+1; while (j != search_end) if (*i++ != *j++) goto skip; @@ -1793,14 +1793,14 @@ String *Item_func_substr_index::val_str(String *str) const char *search= delimiter->ptr(); const char *search_end= search+delimiter_length; int32 n=0,c=count,pass; - register uint32 l; + uint32 l; for (pass=(count>0);pass<2;++pass) { while (ptr < end) { if (*ptr == *search) { - register char *i,*j; + char *i,*j; i=(char*) ptr+1; j=(char*) search+1; while (j != search_end) if (*i++ != *j++) goto skip; @@ -2010,7 +2010,7 @@ String *Item_func_rtrim::val_str(String *str) end= ptr+res->length(); #ifdef USE_MB char *p=ptr; - register uint32 l; + uint32 l; #endif if (remove_length == 1) { @@ -2095,7 +2095,7 @@ String *Item_func_trim::val_str(String *str) ptr= trim_left_mb(res, ptr, end, remove_str); char *p=ptr; - register uint32 l; + uint32 l; loop: while (ptr + remove_length < end) { diff --git a/sql/key.cc b/sql/key.cc index d5dc1767cc4d..82b371ba3c3f 100644 --- a/sql/key.cc +++ b/sql/key.cc @@ -54,8 +54,8 @@ using std::max; int find_ref_key(KEY *key, uint key_count, uchar *record, Field *field, uint *key_length, uint *keypart) { - reg2 int i; - reg3 KEY *key_info; + int i; + KEY *key_info; uint fieldpos; fieldpos= field->offset(record); @@ -509,7 +509,7 @@ int key_cmp(KEY_PART_INFO *key_part, const uchar *key, uint key_length) if (key_part->null_bit) { /* This key part allows null values; NULL is lower than everything */ - register bool field_is_null= key_part->field->is_null(); + bool field_is_null= key_part->field->is_null(); if (*key) // If range key is null { /* the range is expecting a null value */ diff --git a/sql/lock.cc b/sql/lock.cc index 0c0c39f247f3..223f47047885 100644 --- a/sql/lock.cc +++ b/sql/lock.cc @@ -347,7 +347,7 @@ MYSQL_LOCK *mysql_lock_tables(THD *thd, TABLE **tables, uint count, uint flags) static int lock_external(THD *thd, TABLE **tables, uint count) { - reg1 uint i; + uint i; int lock_type,error; DBUG_ENTER("lock_external"); @@ -482,7 +482,7 @@ void mysql_lock_remove(THD *thd, MYSQL_LOCK *locked,TABLE *table) { if (locked) { - reg1 uint i; + uint i; for (i=0; i < locked->table_count; i++) { if (locked->table[i] == table) diff --git a/sql/log.cc b/sql/log.cc index 53a0383f327c..2004b4f6aafe 100644 --- a/sql/log.cc +++ b/sql/log.cc @@ -1423,7 +1423,7 @@ static int find_uniq_filename(char *name, ulong *next, bool need_next) uint i; char buff[FN_REFLEN], ext_buf[FN_REFLEN]; struct st_my_dir *dir_info; - reg1 struct fileinfo *file_info; + struct fileinfo *file_info; ulong max_found= 0, number= 0; size_t buf_length, length; char *start, *end; @@ -2498,10 +2498,10 @@ bool general_log_write(THD *thd, enum enum_server_command command, 0 String is not a number */ -static bool test_if_number(register const char *str, +static bool test_if_number(const char *str, ulong *res, bool allow_wildcards) { - reg2 int flag; + int flag; const char *start; DBUG_ENTER("test_if_number"); diff --git a/sql/mf_iocache.cc b/sql/mf_iocache.cc index aeb58c5cc18f..5f1684cb35b5 100644 --- a/sql/mf_iocache.cc +++ b/sql/mf_iocache.cc @@ -48,7 +48,7 @@ extern "C" { */ -int _my_b_net_read(register IO_CACHE *info, uchar *Buffer, +int _my_b_net_read(IO_CACHE *info, uchar *Buffer, size_t Count MY_ATTRIBUTE((unused))) { ulong read_length; diff --git a/sql/password.c b/sql/password.c index 4581e3e58b15..c99c2e6e8d84 100644 --- a/sql/password.c +++ b/sql/password.c @@ -102,7 +102,7 @@ void randominit(struct rand_struct *rand_st, ulong seed1, ulong seed2) void hash_password(ulong *result, const char *password, uint password_len) { - register ulong nr=1345345333L, add=7, nr2=0x12345671L; + ulong nr=1345345333L, add=7, nr2=0x12345671L; ulong tmp; const char *password_end= password + password_len; for (; password < password_end; password++) @@ -364,7 +364,7 @@ hex2octet(uint8 *to, const char *str, uint len) const char *str_end= str + len; while (str < str_end) { - register char tmp= char_val(*str++); + char tmp= char_val(*str++); *to++= (tmp << 4) | char_val(*str++); } } diff --git a/sql/plistsort.c b/sql/plistsort.c index 7807dfb9380c..c333aff857d5 100644 --- a/sql/plistsort.c +++ b/sql/plistsort.c @@ -91,7 +91,7 @@ LS_SCOPE LS_LIST_ITEM* LS_NAME(LS_COMPARE_FUNC_DECL LS_LIST_ITEM *list, int list } { - register struct LS_STRUCT_NAME *sp0= sp++; + struct LS_STRUCT_NAME *sp0= sp++; sp->list_len= sp0->list_len >> 1; sp0->list_len-= sp->list_len; sp->return_point= 0; @@ -100,7 +100,7 @@ LS_SCOPE LS_LIST_ITEM* LS_NAME(LS_COMPARE_FUNC_DECL LS_LIST_ITEM *list, int list return_point0: sp->list1= sorted_list; { - register struct LS_STRUCT_NAME *sp0= sp++; + struct LS_STRUCT_NAME *sp0= sp++; list= list_end; sp->list_len= sp0->list_len; sp->return_point= 1; @@ -108,9 +108,9 @@ LS_SCOPE LS_LIST_ITEM* LS_NAME(LS_COMPARE_FUNC_DECL LS_LIST_ITEM *list, int list goto recursion_point; return_point1: { - register LS_LIST_ITEM **hook= &sorted_list; - register LS_LIST_ITEM *list1= sp->list1; - register LS_LIST_ITEM *list2= sorted_list; + LS_LIST_ITEM **hook= &sorted_list; + LS_LIST_ITEM *list1= sp->list1; + LS_LIST_ITEM *list2= sorted_list; if (LS_COMPARE_FUNC_CALL(list1, list2)) { diff --git a/sql/records.cc b/sql/records.cc index a3bfeb3b6797..6076fe32d06c 100644 --- a/sql/records.cc +++ b/sql/records.cc @@ -652,7 +652,7 @@ static int rr_cmp(const void *p_ref_length, const void *a, const void *b) static int rr_from_cache(READ_RECORD *info) { - reg1 uint i; + uint i; ulong length; my_off_t rest_of_file; int16 error; diff --git a/sql/rpl_slave.cc b/sql/rpl_slave.cc index 8907773be047..d80a0e931882 100644 --- a/sql/rpl_slave.cc +++ b/sql/rpl_slave.cc @@ -276,7 +276,7 @@ static void set_slave_max_allowed_packet(THD *thd, MYSQL *mysql) void init_thread_mask(int* mask, Master_info* mi, bool inverse) { bool set_io = mi->slave_running, set_sql = mi->rli->slave_running; - register int tmp_mask=0; + int tmp_mask=0; DBUG_ENTER("init_thread_mask"); if (set_io) diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc index cd1b208655f8..f283273fdaca 100644 --- a/sql/sql_acl.cc +++ b/sql/sql_acl.cc @@ -9629,7 +9629,7 @@ show_proxy_grants(THD *thd, LEX_USER *user, char *buff, size_t buffsize) int wild_case_compare(CHARSET_INFO *cs, const char *str,const char *wildstr) { - reg3 int flag; + int flag; DBUG_ENTER("wild_case_compare"); DBUG_PRINT("enter",("str: '%s' wildstr: '%s'",str,wildstr)); while (*wildstr) diff --git a/sql/sql_base.cc b/sql/sql_base.cc index 0af567d52d37..bbd2d338bfbe 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -2699,7 +2699,7 @@ tdc_wait_for_old_version(THD *thd, const char *db, const char *table_name, bool open_table(THD *thd, TABLE_LIST *table_list, Open_table_context *ot_ctx) { - reg1 TABLE *table; + TABLE *table; const char *key; uint key_length; char *alias= table_list->alias; @@ -8464,7 +8464,7 @@ bool setup_fields(THD *thd, Ref_ptr_array ref_pointer_array, List &fields, enum_mark_columns mark_used_columns, List *sum_func_list, bool allow_sum_func) { - reg2 Item *item; + Item *item; enum_mark_columns save_mark_used_columns= thd->mark_used_columns; nesting_map save_allow_sum_func= thd->lex->allow_sum_func; List_iterator it(fields); diff --git a/sql/sql_db.cc b/sql/sql_db.cc index bf6bd03cc050..0664564e004a 100644 --- a/sql/sql_db.cc +++ b/sql/sql_db.cc @@ -311,7 +311,7 @@ static void del_dbopt(const char *path) static bool write_db_opt(THD *thd, const char *path, HA_CREATE_INFO *create) { - register File file; + File file; char buf[256]; // Should be enough for one option bool error=1; diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index 248d19eb7f8c..6162da8ad322 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -99,7 +99,7 @@ static bool write_delayed(THD *thd, TABLE *table, LEX_STRING query, bool log_on, static void end_delayed_insert(THD *thd); pthread_handler_t handle_delayed_insert(void *arg); -static void unlink_blobs(register TABLE *table); +static void unlink_blobs(TABLE *table); #endif static bool check_view_insertability(THD *thd, TABLE_LIST *view); @@ -3150,7 +3150,7 @@ pthread_handler_t handle_delayed_insert(void *arg) /* Remove pointers from temporary fields to allocated values */ -static void unlink_blobs(register TABLE *table) +static void unlink_blobs(TABLE *table) { for (Field **ptr=table->field ; *ptr ; ptr++) { @@ -3161,7 +3161,7 @@ static void unlink_blobs(register TABLE *table) /* Free blobs stored in current row */ -static void free_delayed_insert_blobs(register TABLE *table) +static void free_delayed_insert_blobs(TABLE *table) { for (Field **ptr=table->field ; *ptr ; ptr++) { diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index 33aa988cfa5d..447db812557f 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -659,7 +659,7 @@ static LEX_STRING get_quoted_token(Lex_input_stream *lip, static char *get_text(Lex_input_stream *lip, int pre_skip, int post_skip) { - reg1 uchar c,sep; + uchar c,sep; uint found_escape=0; const CHARSET_INFO *cs= lip->m_thd->charset(); @@ -889,7 +889,7 @@ static inline uint int_token(const char *str,uint length) */ bool consume_comment(Lex_input_stream *lip, int remaining_recursions_permitted) { - reg1 uchar c; + uchar c; while (! lip->eof()) { c= lip->yyGet(); @@ -991,9 +991,9 @@ int MYSQLlex(YYSTYPE *yylval, THD *thd) static int lex_one_token(YYSTYPE *yylval, THD *thd) { - reg1 uchar c= 0; + uchar c= 0; bool comment_closed; - int tokval, result_state; + int tokval, result_state; uint length; enum my_lex_states state; Lex_input_stream *lip= & thd->m_parser_state->m_lip; diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index f48d14d10e86..e8e9efbbeefd 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -7295,7 +7295,7 @@ bool add_field_to_list(THD *thd, LEX_STRING *field_name, enum_field_types type, List *interval_list, const CHARSET_INFO *cs, uint uint_geom_type, const LEX_CSTRING *zip_dict) { - register Create_field *new_field; + Create_field *new_field; LEX *lex= thd->lex; uint8 datetime_precision= decimals ? atoi(decimals) : 0; DBUG_ENTER("add_field_to_list"); @@ -7448,7 +7448,7 @@ TABLE_LIST *st_select_lex::add_table_to_list(THD *thd, List *partition_names, LEX_STRING *option) { - register TABLE_LIST *ptr; + TABLE_LIST *ptr; TABLE_LIST *previous_table_ref; /* The table preceding the current one. */ char *alias_str; LEX *lex= thd->lex; diff --git a/sql/sql_prepare.cc b/sql/sql_prepare.cc index 3485edc12816..0e461bfad129 100644 --- a/sql/sql_prepare.cc +++ b/sql/sql_prepare.cc @@ -432,7 +432,7 @@ static bool send_prep_stmt(Prepared_statement *stmt, static ulong get_param_length(uchar **packet, ulong len) { - reg1 uchar *pos= *packet; + uchar *pos= *packet; if (len < 1) return 0; if (*pos < 251) diff --git a/sql/sql_select.cc b/sql/sql_select.cc index c3b12b3ca0ed..74aadae1db24 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -76,7 +76,7 @@ bool handle_select(THD *thd, select_result *result, { bool res; LEX *lex= thd->lex; - register SELECT_LEX *select_lex = &lex->select_lex; + SELECT_LEX *select_lex = &lex->select_lex; DBUG_ENTER("handle_select"); MYSQL_SELECT_START(thd->query()); diff --git a/sql/sql_string.cc b/sql/sql_string.cc index 02298cb1734c..009995e0ffc6 100644 --- a/sql/sql_string.cc +++ b/sql/sql_string.cc @@ -611,8 +611,8 @@ int String::strstr(const String &s,uint32 offset) if (!s.length()) return ((int) offset); // Empty string is always found - register const char *str = Ptr+offset; - register const char *search=s.ptr(); + const char *str = Ptr+offset; + const char *search=s.ptr(); const char *end=Ptr+str_length-s.length()+1; const char *search_end=s.ptr()+s.length(); skip: @@ -620,7 +620,7 @@ int String::strstr(const String &s,uint32 offset) { if (*str++ == *search) { - register char *i,*j; + char *i,*j; i=(char*) str; j=(char*) search+1; while (j != search_end) if (*i++ != *j++) goto skip; @@ -641,8 +641,8 @@ int String::strrstr(const String &s,uint32 offset) { if (!s.length()) return offset; // Empty string is always found - register const char *str = Ptr+offset-1; - register const char *search=s.ptr()+s.length()-1; + const char *str = Ptr+offset-1; + const char *search=s.ptr()+s.length()-1; const char *end=Ptr+s.length()-2; const char *search_end=s.ptr()-1; @@ -651,7 +651,7 @@ int String::strrstr(const String &s,uint32 offset) { if (*str-- == *search) { - register char *i,*j; + char *i,*j; i=(char*) str; j=(char*) search-1; while (j != search_end) if (*i-- != *j--) goto skip; diff --git a/sql/table.cc b/sql/table.cc index d94f5cb0be06..01abaa069209 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -2551,7 +2551,7 @@ int open_table_from_share(THD *thd, TABLE_SHARE *share, const char *alias, free_share Is 1 if we also want to free table_share */ -int closefrm(register TABLE *table, bool free_share) +int closefrm(TABLE *table, bool free_share) { int error=0; DBUG_ENTER("closefrm"); @@ -2592,7 +2592,7 @@ int closefrm(register TABLE *table, bool free_share) /* Deallocate temporary blob storage */ -void free_blobs(register TABLE *table) +void free_blobs(TABLE *table) { uint *ptr, *end; for (ptr= table->s->blob_field, end=ptr + table->s->blob_fields ; @@ -2955,7 +2955,7 @@ static uint find_field(Field **fields, uchar *record, uint start, uint length) /* Check that the integer is in the internal */ -int set_zone(register int nr, int min_zone, int max_zone) +int set_zone(int nr, int min_zone, int max_zone) { if (nr<=min_zone) return (min_zone); @@ -2966,9 +2966,9 @@ int set_zone(register int nr, int min_zone, int max_zone) /* Adjust number to next larger disk buffer */ -ulong next_io_size(register ulong pos) +ulong next_io_size(ulong pos) { - reg2 ulong offset; + ulong offset; if ((offset= pos & (IO_SIZE-1))) return pos-offset+IO_SIZE; return pos; @@ -3043,7 +3043,7 @@ File create_frm(THD *thd, const char *name, const char *db, const char *table, uint reclength, uchar *fileinfo, HA_CREATE_INFO *create_info, uint keys, KEY *key_info) { - register File file; + File file; ulong length; uchar fill[IO_SIZE]; int create_flags= O_RDWR | O_TRUNC; diff --git a/sql/uniques.cc b/sql/uniques.cc index 58060b486e3d..1b6fc51ac972 100644 --- a/sql/uniques.cc +++ b/sql/uniques.cc @@ -175,7 +175,7 @@ static double get_merge_many_buffs_cost(uint *buffer, uint maxbuffer, uint max_n_elems, uint last_n_elems, int elem_size) { - register int i; + int i; double total_cost= 0.0; uint *buff_elems= buffer; /* #s of elements in each of merged sequences */ diff --git a/sql/unireg.cc b/sql/unireg.cc index 005585596007..d67bc3753f96 100644 --- a/sql/unireg.cc +++ b/sql/unireg.cc @@ -563,7 +563,7 @@ static uchar *pack_screens(List &create_fields, uint *info_length, uint *screens, bool small_file) { - reg1 uint i; + uint i; uint row,start_row,end_row,fields_on_screen; uint length,cols; uchar *info,*pos,*start_screen; @@ -911,7 +911,7 @@ static uint get_interval_id(uint *int_count,List &create_fields, static bool pack_fields(File file, List &create_fields, ulong data_offset) { - reg2 uint i; + uint i; uint int_count, comment_length=0; uchar buff[MAX_FIELD_WIDTH]; Create_field *field; diff --git a/storage/heap/_rectest.c b/storage/heap/_rectest.c index d3730fd2adcb..29f7a61ac666 100644 --- a/storage/heap/_rectest.c +++ b/storage/heap/_rectest.c @@ -19,7 +19,7 @@ #include "heapdef.h" -int hp_rectest(register HP_INFO *info, register const uchar *old) +int hp_rectest(HP_INFO *info, const uchar *old) { DBUG_ENTER("hp_rectest"); diff --git a/storage/heap/heapdef.h b/storage/heap/heapdef.h index ccfecd46f0b4..d1d95b3bed82 100644 --- a/storage/heap/heapdef.h +++ b/storage/heap/heapdef.h @@ -109,7 +109,7 @@ extern uint hp_rb_key_length(HP_KEYDEF *keydef, const uchar *key); extern uint hp_rb_null_key_length(HP_KEYDEF *keydef, const uchar *key); extern uint hp_rb_var_key_length(HP_KEYDEF *keydef, const uchar *key); extern my_bool hp_if_null_in_key(HP_KEYDEF *keyinfo, const uchar *record); -extern int hp_close(register HP_INFO *info); +extern int hp_close(HP_INFO *info); extern void hp_clear(HP_SHARE *info); extern void hp_clear_keys(HP_SHARE *info); extern uint hp_rb_pack_key(HP_KEYDEF *keydef, uchar *key, const uchar *old, diff --git a/storage/heap/hp_block.c b/storage/heap/hp_block.c index f16b30aa47ac..1a78a25a1e06 100644 --- a/storage/heap/hp_block.c +++ b/storage/heap/hp_block.c @@ -28,8 +28,8 @@ uchar *hp_find_block(HP_BLOCK *block, ulong pos) { - reg1 int i; - reg3 HP_PTRS *ptr; /* block base ptr */ + int i; + HP_PTRS *ptr; /* block base ptr */ for (i=block->levels-1, ptr=block->root ; i > 0 ; i--) { @@ -56,7 +56,7 @@ uchar *hp_find_block(HP_BLOCK *block, ulong pos) int hp_get_new_block(HP_BLOCK *block, size_t *alloc_length) { - reg1 uint i,j; + uint i,j; HP_PTRS *root; for (i=0 ; i < block->levels ; i++) diff --git a/storage/heap/hp_close.c b/storage/heap/hp_close.c index 680fca51e693..2e61e5340be3 100644 --- a/storage/heap/hp_close.c +++ b/storage/heap/hp_close.c @@ -31,7 +31,7 @@ int heap_close(HP_INFO *info) } -int hp_close(register HP_INFO *info) +int hp_close(HP_INFO *info) { int error=0; DBUG_ENTER("hp_close"); diff --git a/storage/heap/hp_create.c b/storage/heap/hp_create.c index 0ae493a07a19..278a0bd20afa 100644 --- a/storage/heap/hp_create.c +++ b/storage/heap/hp_create.c @@ -438,7 +438,7 @@ static inline void heap_try_free(HP_SHARE *share) int heap_delete_table(const char *name) { int result; - reg1 HP_SHARE *share; + HP_SHARE *share; DBUG_ENTER("heap_delete_table"); mysql_mutex_lock(&THR_LOCK_heap); diff --git a/storage/heap/hp_delete.c b/storage/heap/hp_delete.c index f7c63668acd7..66c29459f0fa 100644 --- a/storage/heap/hp_delete.c +++ b/storage/heap/hp_delete.c @@ -62,7 +62,7 @@ int heap_delete(HP_INFO *info, const uchar *record) Remove one key from rb-tree */ -int hp_rb_delete_key(HP_INFO *info, register HP_KEYDEF *keyinfo, +int hp_rb_delete_key(HP_INFO *info, HP_KEYDEF *keyinfo, const uchar *record, uchar *recpos, int flag) { heap_rb_param custom_arg; @@ -100,7 +100,7 @@ int hp_rb_delete_key(HP_INFO *info, register HP_KEYDEF *keyinfo, other Error code */ -int hp_delete_key(HP_INFO *info, register HP_KEYDEF *keyinfo, +int hp_delete_key(HP_INFO *info, HP_KEYDEF *keyinfo, const uchar *record, uchar *recpos, int flag) { ulong blength, pos2, pos_hashnr, lastpos_hashnr, key_pos; diff --git a/storage/heap/hp_extra.c b/storage/heap/hp_extra.c index 1bc39b454319..7e83aa17d443 100644 --- a/storage/heap/hp_extra.c +++ b/storage/heap/hp_extra.c @@ -21,13 +21,13 @@ #include "heapdef.h" -static void heap_extra_keyflag(register HP_INFO *info, +static void heap_extra_keyflag(HP_INFO *info, enum ha_extra_function function); /* set extra flags for database */ -int heap_extra(register HP_INFO *info, enum ha_extra_function function) +int heap_extra(HP_INFO *info, enum ha_extra_function function) { DBUG_ENTER("heap_extra"); @@ -65,7 +65,7 @@ int heap_reset(HP_INFO *info) /* Start/Stop Inserting Duplicates Into a Table, WL#1648. */ -static void heap_extra_keyflag(register HP_INFO *info, +static void heap_extra_keyflag(HP_INFO *info, enum ha_extra_function function) { uint idx; diff --git a/storage/heap/hp_hash.c b/storage/heap/hp_hash.c index 63df86a68e9d..70f185cd70bd 100644 --- a/storage/heap/hp_hash.c +++ b/storage/heap/hp_hash.c @@ -100,7 +100,7 @@ ha_rows hp_rb_records_in_range(HP_INFO *info, int inx, key_range *min_key, uchar *hp_search(HP_INFO *info, HP_KEYDEF *keyinfo, const uchar *key, uint nextflag) { - reg1 HASH_INFO *pos,*prev_ptr; + HASH_INFO *pos,*prev_ptr; int flag; uint old_nextflag; HP_SHARE *share=info->s; @@ -238,7 +238,7 @@ void hp_movelink(HASH_INFO *pos, HASH_INFO *next_link, HASH_INFO *newlink) /* Calc hashvalue for a key */ -ulong hp_hashnr(register HP_KEYDEF *keydef, register const uchar *key) +ulong hp_hashnr(HP_KEYDEF *keydef, const uchar *key) { /*register*/ ulong nr=1, nr2=4; @@ -304,7 +304,7 @@ ulong hp_hashnr(register HP_KEYDEF *keydef, register const uchar *key) /* Calc hashvalue for a key in a record */ -ulong hp_rec_hashnr(register HP_KEYDEF *keydef, register const uchar *rec) +ulong hp_rec_hashnr(HP_KEYDEF *keydef, const uchar *rec) { ulong nr=1, nr2=4; HA_KEYSEG *seg,*endseg; @@ -387,7 +387,7 @@ ulong hp_rec_hashnr(register HP_KEYDEF *keydef, register const uchar *rec) * far, and works well on both numbers and strings. */ -ulong hp_hashnr(register HP_KEYDEF *keydef, register const uchar *key) +ulong hp_hashnr(HP_KEYDEF *keydef, const uchar *key) { /* Note, if a key consists of a combination of numeric and @@ -443,7 +443,7 @@ ulong hp_hashnr(register HP_KEYDEF *keydef, register const uchar *key) /* Calc hashvalue for a key in a record */ -ulong hp_rec_hashnr(register HP_KEYDEF *keydef, register const uchar *rec) +ulong hp_rec_hashnr(HP_KEYDEF *keydef, const uchar *rec) { ulong nr= 1, nr2= 4; HA_KEYSEG *seg,*endseg; diff --git a/storage/heap/hp_info.c b/storage/heap/hp_info.c index b414f2981a8f..a4f10d67b266 100644 --- a/storage/heap/hp_info.c +++ b/storage/heap/hp_info.c @@ -43,7 +43,7 @@ ulong heap_position_old(HP_INFO *info) /* Note that heap_info does NOT return information about the current position anymore; Use heap_position instead */ -int heap_info(reg1 HP_INFO *info,reg2 HEAPINFO *x, int flag ) +int heap_info(HP_INFO *info,HEAPINFO *x, int flag ) { DBUG_ENTER("heap_info"); x->records = info->s->records; diff --git a/storage/heap/hp_rename.c b/storage/heap/hp_rename.c index 34c8218e3876..b4561de5b01c 100644 --- a/storage/heap/hp_rename.c +++ b/storage/heap/hp_rename.c @@ -21,7 +21,7 @@ int heap_rename(const char *old_name, const char *new_name) { - reg1 HP_SHARE *info; + HP_SHARE *info; char *name_buff; DBUG_ENTER("heap_rename"); diff --git a/storage/heap/hp_rrnd.c b/storage/heap/hp_rrnd.c index 42ed8e3330f5..01a8f2d874b1 100644 --- a/storage/heap/hp_rrnd.c +++ b/storage/heap/hp_rrnd.c @@ -25,7 +25,7 @@ HA_ERR_END_OF_FILE = EOF. */ -int heap_rrnd(register HP_INFO *info, uchar *record, uchar *pos) +int heap_rrnd(HP_INFO *info, uchar *record, uchar *pos) { HP_SHARE *share=info->s; DBUG_ENTER("heap_rrnd"); @@ -65,7 +65,7 @@ int heap_rrnd(register HP_INFO *info, uchar *record, uchar *pos) HA_ERR_END_OF_FILE = EOF. */ -int heap_rrnd_old(register HP_INFO *info, uchar *record, ulong pos) +int heap_rrnd_old(HP_INFO *info, uchar *record, ulong pos) { HP_SHARE *share=info->s; DBUG_ENTER("heap_rrnd"); diff --git a/storage/heap/hp_rsame.c b/storage/heap/hp_rsame.c index 1371aea485bd..211da775c648 100644 --- a/storage/heap/hp_rsame.c +++ b/storage/heap/hp_rsame.c @@ -26,7 +26,7 @@ HA_ERR_KEY_NOT_FOUND = Record not found with key */ -int heap_rsame(register HP_INFO *info, uchar *record, int inx) +int heap_rsame(HP_INFO *info, uchar *record, int inx) { HP_SHARE *share=info->s; DBUG_ENTER("heap_rsame"); diff --git a/storage/heap/hp_scan.c b/storage/heap/hp_scan.c index 92d16f3db5c6..dbbad8d80b18 100644 --- a/storage/heap/hp_scan.c +++ b/storage/heap/hp_scan.c @@ -25,7 +25,7 @@ HA_ERR_END_OF_FILE = EOF. */ -int heap_scan_init(register HP_INFO *info) +int heap_scan_init(HP_INFO *info) { DBUG_ENTER("heap_scan_init"); info->lastinx= -1; @@ -34,7 +34,7 @@ int heap_scan_init(register HP_INFO *info) DBUG_RETURN(0); } -int heap_scan(register HP_INFO *info, uchar *record) +int heap_scan(HP_INFO *info, uchar *record) { HP_SHARE *share=info->s; ulong pos; diff --git a/storage/heap/hp_test2.c b/storage/heap/hp_test2.c index aa9f9955db59..4e9679b9dc3d 100644 --- a/storage/heap/hp_test2.c +++ b/storage/heap/hp_test2.c @@ -42,7 +42,7 @@ static void make_record(uchar *record, uint n1, uint n2, uint n3, int main(int argc, char *argv[]) { - register uint i,j; + uint i,j; uint ant,n1,n2,n3; uint write_count,update,opt_delete,check2,dupp_keys,found_key; int error; diff --git a/storage/innobase/fts/fts0blex.cc b/storage/innobase/fts/fts0blex.cc index 2d71934fa0ef..a8f231268acc 100644 --- a/storage/innobase/fts/fts0blex.cc +++ b/storage/innobase/fts/fts0blex.cc @@ -701,9 +701,9 @@ extern int fts0blex (yyscan_t yyscanner); */ YY_DECL { - register yy_state_type yy_current_state; - register char *yy_cp, *yy_bp; - register int yy_act; + yy_state_type yy_current_state; + char *yy_cp, *yy_bp; + int yy_act; struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; #line 43 "fts0blex.l" @@ -753,7 +753,7 @@ YY_DECL yy_match: do { - register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; + YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; if ( yy_accept[yy_current_state] ) { yyg->yy_last_accepting_state = yy_current_state; @@ -984,9 +984,9 @@ case YY_STATE_EOF(INITIAL): static int yy_get_next_buffer (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; - register char *source = yyg->yytext_ptr; - register int number_to_move, i; + char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; + char *source = yyg->yytext_ptr; + int number_to_move, i; int ret_val; if ( yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] ) @@ -1118,15 +1118,15 @@ static int yy_get_next_buffer (yyscan_t yyscanner) static yy_state_type yy_get_previous_state (yyscan_t yyscanner) { - register yy_state_type yy_current_state; - register char *yy_cp; + yy_state_type yy_current_state; + char *yy_cp; struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; yy_current_state = yyg->yy_start; for ( yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp ) { - register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); + YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); if ( yy_accept[yy_current_state] ) { yyg->yy_last_accepting_state = yy_current_state; @@ -1151,11 +1151,11 @@ static yy_state_type yy_get_previous_state (yyscan_t yyscanner) */ static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state , yyscan_t yyscanner) { - register int yy_is_jam; + int yy_is_jam; struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* This var may be unused depending upon options. */ - register char *yy_cp = yyg->yy_c_buf_p; + char *yy_cp = yyg->yy_c_buf_p; - register YY_CHAR yy_c = 1; + YY_CHAR yy_c = 1; if ( yy_accept[yy_current_state] ) { yyg->yy_last_accepting_state = yy_current_state; @@ -1912,7 +1912,7 @@ int fts0blex_destroy (yyscan_t yyscanner) #ifndef yytext_ptr static void yy_flex_strncpy (char* s1, yyconst char * s2, int n , yyscan_t yyscanner MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused))) { - register int i; + int i; for ( i = 0; i < n; ++i ) s1[i] = s2[i]; } @@ -1921,7 +1921,7 @@ static void yy_flex_strncpy (char* s1, yyconst char * s2, int n , yys #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * s , yyscan_t yyscanner MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused))) { - register int n; + int n; for ( n = 0; s[n]; ++n ) ; diff --git a/storage/innobase/fts/fts0tlex.cc b/storage/innobase/fts/fts0tlex.cc index d4d9b4c48d1b..28fac9bf704b 100644 --- a/storage/innobase/fts/fts0tlex.cc +++ b/storage/innobase/fts/fts0tlex.cc @@ -697,9 +697,9 @@ extern int fts0tlex (yyscan_t yyscanner); */ YY_DECL { - register yy_state_type yy_current_state; - register char *yy_cp, *yy_bp; - register int yy_act; + yy_state_type yy_current_state; + char *yy_cp, *yy_bp; + int yy_act; struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; #line 44 "fts0tlex.l" @@ -749,7 +749,7 @@ YY_DECL yy_match: do { - register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; + YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; if ( yy_accept[yy_current_state] ) { yyg->yy_last_accepting_state = yy_current_state; @@ -976,9 +976,9 @@ case YY_STATE_EOF(INITIAL): static int yy_get_next_buffer (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; - register char *source = yyg->yytext_ptr; - register int number_to_move, i; + char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; + char *source = yyg->yytext_ptr; + int number_to_move, i; int ret_val; if ( yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] ) @@ -1110,15 +1110,15 @@ static int yy_get_next_buffer (yyscan_t yyscanner) static yy_state_type yy_get_previous_state (yyscan_t yyscanner) { - register yy_state_type yy_current_state; - register char *yy_cp; + yy_state_type yy_current_state; + char *yy_cp; struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; yy_current_state = yyg->yy_start; for ( yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp ) { - register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); + YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); if ( yy_accept[yy_current_state] ) { yyg->yy_last_accepting_state = yy_current_state; @@ -1143,11 +1143,11 @@ static int yy_get_next_buffer (yyscan_t yyscanner) */ static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state , yyscan_t yyscanner) { - register int yy_is_jam; + int yy_is_jam; struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* This var may be unused depending upon options. */ - register char *yy_cp = yyg->yy_c_buf_p; + char *yy_cp = yyg->yy_c_buf_p; - register YY_CHAR yy_c = 1; + YY_CHAR yy_c = 1; if ( yy_accept[yy_current_state] ) { yyg->yy_last_accepting_state = yy_current_state; @@ -1905,7 +1905,7 @@ int fts0tlex_destroy (yyscan_t yyscanner) #ifndef yytext_ptr static void yy_flex_strncpy (char* s1, yyconst char * s2, int n , yyscan_t yyscanner MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused))) { - register int i; + int i; for ( i = 0; i < n; ++i ) s1[i] = s2[i]; } @@ -1914,7 +1914,7 @@ static void yy_flex_strncpy (char* s1, yyconst char * s2, int n , yys #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * s , yyscan_t yyscanner MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused)) MY_ATTRIBUTE((unused))) { - register int n; + int n; for ( n = 0; s[n]; ++n ) ; diff --git a/storage/innobase/handler/ha_innodb.h b/storage/innobase/handler/ha_innodb.h index f4ea77bff334..652530eaaaa6 100644 --- a/storage/innobase/handler/ha_innodb.h +++ b/storage/innobase/handler/ha_innodb.h @@ -183,7 +183,7 @@ class ha_innobase: public handler char* norm_name, char* temp_path, char* remote_path); - int create(const char *name, register TABLE *form, + int create(const char *name, TABLE *form, HA_CREATE_INFO *create_info); int truncate(); int delete_table(const char *name); diff --git a/storage/innobase/page/page0page.cc b/storage/innobase/page/page0page.cc index a340c04913a7..9d9704129da6 100644 --- a/storage/innobase/page/page0page.cc +++ b/storage/innobase/page/page0page.cc @@ -99,10 +99,10 @@ page_dir_find_owner_slot( const rec_t* rec) /*!< in: the physical record */ { const page_t* page; - register uint16 rec_offs_bytes; - register const page_dir_slot_t* slot; - register const page_dir_slot_t* first_slot; - register const rec_t* r = rec; + uint16 rec_offs_bytes; + const page_dir_slot_t* slot; + const page_dir_slot_t* first_slot; + const rec_t* r = rec; ut_ad(page_rec_check(rec)); diff --git a/storage/innobase/pars/lexyy.cc b/storage/innobase/pars/lexyy.cc index bfa8e2ea9506..d88c5ad23127 100644 --- a/storage/innobase/pars/lexyy.cc +++ b/storage/innobase/pars/lexyy.cc @@ -1187,9 +1187,9 @@ extern int yylex (void); */ YY_DECL { - register yy_state_type yy_current_state; - register char *yy_cp, *yy_bp; - register int yy_act; + yy_state_type yy_current_state; + char *yy_cp, *yy_bp; + int yy_act; #line 112 "pars0lex.l" @@ -1238,7 +1238,7 @@ YY_DECL yy_match: do { - register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; + YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; @@ -2380,9 +2380,9 @@ case YY_STATE_EOF(id): */ static int yy_get_next_buffer (void) { - register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; - register char *source = (yytext_ptr); - register int number_to_move, i; + char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; + char *source = (yytext_ptr); + int number_to_move, i; int ret_val; if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) @@ -2515,14 +2515,14 @@ static int yy_get_next_buffer (void) yy_state_type yy_get_previous_state (void) { - register yy_state_type yy_current_state; - register char *yy_cp; + yy_state_type yy_current_state; + char *yy_cp; yy_current_state = (yy_start); for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) { - register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); + YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; @@ -2547,10 +2547,10 @@ static int yy_get_next_buffer (void) */ static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) { - register int yy_is_jam; - register char *yy_cp = (yy_c_buf_p); + int yy_is_jam; + char *yy_cp = (yy_c_buf_p); - register YY_CHAR yy_c = 1; + YY_CHAR yy_c = 1; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; @@ -3070,7 +3070,7 @@ MY_ATTRIBUTE((unused)) static int yylex_destroy (void) #ifndef yytext_ptr static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) { - register int i; + int i; for ( i = 0; i < n; ++i ) s1[i] = s2[i]; } @@ -3079,7 +3079,7 @@ static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * s ) { - register int n; + int n; for ( n = 0; s[n]; ++n ) ; diff --git a/storage/myisam/ft_update.c b/storage/myisam/ft_update.c index c1dcfb0c9d82..41a920942c0a 100644 --- a/storage/myisam/ft_update.c +++ b/storage/myisam/ft_update.c @@ -52,7 +52,7 @@ void _mi_ft_segiterator_dummy_init(const uchar *record, uint len, so "1" means "OK", "0" means "EOF" */ -uint _mi_ft_segiterator(register FT_SEG_ITERATOR *ftsi) +uint _mi_ft_segiterator(FT_SEG_ITERATOR *ftsi) { DBUG_ENTER("_mi_ft_segiterator"); diff --git a/storage/myisam/ha_myisam.cc b/storage/myisam/ha_myisam.cc index aa4ca5915929..5bec37ba13be 100644 --- a/storage/myisam/ha_myisam.cc +++ b/storage/myisam/ha_myisam.cc @@ -1966,7 +1966,7 @@ void ha_myisam::update_create_info(HA_CREATE_INFO *create_info) } -int ha_myisam::create(const char *name, register TABLE *table_arg, +int ha_myisam::create(const char *name, TABLE *table_arg, HA_CREATE_INFO *ha_create_info) { int error; diff --git a/storage/myisam/mi_close.c b/storage/myisam/mi_close.c index 53574a110607..9ce2cfb51412 100644 --- a/storage/myisam/mi_close.c +++ b/storage/myisam/mi_close.c @@ -22,7 +22,7 @@ #include "myisamdef.h" -int mi_close(register MI_INFO *info) +int mi_close(MI_INFO *info) { int error=0,flag; MYISAM_SHARE *share=info->s; diff --git a/storage/myisam/mi_create.c b/storage/myisam/mi_create.c index 3ea40f34a928..341ab7cb39d4 100644 --- a/storage/myisam/mi_create.c +++ b/storage/myisam/mi_create.c @@ -34,7 +34,7 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs, uint uniques, MI_UNIQUEDEF *uniquedefs, MI_CREATE_INFO *ci,uint flags) { - register uint i,j; + uint i,j; File UNINIT_VAR(dfile), UNINIT_VAR(file); int errpos,save_errno, create_mode= O_RDWR | O_TRUNC; myf create_flag; diff --git a/storage/myisam/mi_dbug.c b/storage/myisam/mi_dbug.c index 4dfd8877555a..27378b85183a 100644 --- a/storage/myisam/mi_dbug.c +++ b/storage/myisam/mi_dbug.c @@ -19,7 +19,7 @@ /* Print a key in user understandable format */ -void _mi_print_key(FILE *stream, register HA_KEYSEG *keyseg, +void _mi_print_key(FILE *stream, HA_KEYSEG *keyseg, const uchar *key, uint length) { int flag; diff --git a/storage/myisam/mi_delete.c b/storage/myisam/mi_delete.c index 83677c5fa303..ae18e8c55eb9 100644 --- a/storage/myisam/mi_delete.c +++ b/storage/myisam/mi_delete.c @@ -28,7 +28,7 @@ static int underflow(MI_INFO *info,MI_KEYDEF *keyinfo,uchar *anc_buff, static uint remove_key(MI_KEYDEF *keyinfo,uint nod_flag,uchar *keypos, uchar *lastkey,uchar *page_end, my_off_t *next_block); -static int _mi_ck_real_delete(register MI_INFO *info,MI_KEYDEF *keyinfo, +static int _mi_ck_real_delete(MI_INFO *info,MI_KEYDEF *keyinfo, uchar *key, uint key_length, my_off_t *root); @@ -133,7 +133,7 @@ int mi_delete(MI_INFO *info,const uchar *record) /* Remove a key from the btree index */ -int _mi_ck_delete(register MI_INFO *info, uint keynr, uchar *key, +int _mi_ck_delete(MI_INFO *info, uint keynr, uchar *key, uint key_length) { return _mi_ck_real_delete(info, info->s->keyinfo+keynr, key, key_length, @@ -141,7 +141,7 @@ int _mi_ck_delete(register MI_INFO *info, uint keynr, uchar *key, } /* _mi_ck_delete */ -static int _mi_ck_real_delete(register MI_INFO *info, MI_KEYDEF *keyinfo, +static int _mi_ck_real_delete(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *key, uint key_length, my_off_t *root) { int error; @@ -209,7 +209,7 @@ static int _mi_ck_real_delete(register MI_INFO *info, MI_KEYDEF *keyinfo, ** -1 on errors */ -static int d_search(register MI_INFO *info, register MI_KEYDEF *keyinfo, +static int d_search(MI_INFO *info, MI_KEYDEF *keyinfo, uint comp_flag, uchar *key, uint key_length, my_off_t page, uchar *anc_buff) { @@ -397,7 +397,7 @@ static int d_search(register MI_INFO *info, register MI_KEYDEF *keyinfo, /* Remove a key that has a page-reference */ -static int del(register MI_INFO *info, register MI_KEYDEF *keyinfo, uchar *key, +static int del(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *key, uchar *anc_buff, my_off_t leaf_page, uchar *leaf_buff, uchar *keypos, /* Pos to where deleted key was */ my_off_t next_block, @@ -500,7 +500,7 @@ static int del(register MI_INFO *info, register MI_KEYDEF *keyinfo, uchar *key, /* Balances adjacent pages if underflow occours */ -static int underflow(register MI_INFO *info, register MI_KEYDEF *keyinfo, +static int underflow(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *anc_buff, my_off_t leaf_page,/* Ancestor page and underflow page */ uchar *leaf_buff, diff --git a/storage/myisam/mi_dynrec.c b/storage/myisam/mi_dynrec.c index eb83b3cde8f4..af22c4534df3 100644 --- a/storage/myisam/mi_dynrec.c +++ b/storage/myisam/mi_dynrec.c @@ -965,13 +965,13 @@ static int update_dynamic_record(MI_INFO *info, my_off_t filepos, uchar *record, /* Pack a record. Return new reclength */ -uint _mi_rec_pack(MI_INFO *info, register uchar *to, - register const uchar *from) +uint _mi_rec_pack(MI_INFO *info, uchar *to, + const uchar *from) { uint length,new_length,flag,bit,i; uchar *pos,*end,*startpos,*packpos; enum en_fieldtype type; - reg3 MI_COLUMNDEF *rec; + MI_COLUMNDEF *rec; MI_BLOB *blob; DBUG_ENTER("_mi_rec_pack"); @@ -1097,7 +1097,7 @@ my_bool _mi_rec_check(MI_INFO *info,const uchar *record, uchar *rec_buff, uint length,new_length,flag,bit,i; uchar *pos,*end,*packpos,*to; enum en_fieldtype type; - reg3 MI_COLUMNDEF *rec; + MI_COLUMNDEF *rec; DBUG_ENTER("_mi_rec_check"); packpos=rec_buff; to= rec_buff+info->s->base.pack_bits; @@ -1215,13 +1215,13 @@ my_bool _mi_rec_check(MI_INFO *info,const uchar *record, uchar *rec_buff, /* Returns -1 and my_errno =HA_ERR_RECORD_DELETED if reclength isn't */ /* right. Returns reclength (>0) if ok */ -ulong _mi_rec_unpack(register MI_INFO *info, register uchar *to, uchar *from, +ulong _mi_rec_unpack(MI_INFO *info, uchar *to, uchar *from, ulong found_length) { uint flag,bit,length,rec_length,min_pack_length; enum en_fieldtype type; uchar *from_end,*to_end,*packpos; - reg3 MI_COLUMNDEF *rec,*end_field; + MI_COLUMNDEF *rec,*end_field; DBUG_ENTER("_mi_rec_unpack"); to_end=to + info->s->base.reclength; @@ -1569,7 +1569,7 @@ int _mi_cmp_dynamic_unique(MI_INFO *info, MI_UNIQUEDEF *def, /* Compare of record one disk with packed record in memory */ -int _mi_cmp_dynamic_record(register MI_INFO *info, register const uchar *record) +int _mi_cmp_dynamic_record(MI_INFO *info, const uchar *record) { uint flag,reclength,b_type; my_off_t filepos; @@ -1709,7 +1709,7 @@ static int _mi_cmp_buffer(File file, const uchar *buff, my_off_t filepos, */ int _mi_read_rnd_dynamic_record(MI_INFO *info, uchar *buf, - register my_off_t filepos, + my_off_t filepos, my_bool skip_deleted_blocks) { int block_of_record, info_read, save_errno; diff --git a/storage/myisam/mi_info.c b/storage/myisam/mi_info.c index 3b9288eeb838..b3b87221c8da 100644 --- a/storage/myisam/mi_info.c +++ b/storage/myisam/mi_info.c @@ -32,7 +32,7 @@ my_off_t mi_position(MI_INFO *info) /* Get information about the table */ /* if flag == 2 one get current info (no sync from database */ -int mi_status(MI_INFO *info, register MI_ISAMINFO *x, uint flag) +int mi_status(MI_INFO *info, MI_ISAMINFO *x, uint flag) { MY_STAT state; MYISAM_SHARE *share=info->s; diff --git a/storage/myisam/mi_key.c b/storage/myisam/mi_key.c index 34477a6fa0a9..1b67ec041afc 100644 --- a/storage/myisam/mi_key.c +++ b/storage/myisam/mi_key.c @@ -49,12 +49,12 @@ static int _mi_put_key_in_record(MI_INFO *info, uint keynr, Length of key */ -uint _mi_make_key(register MI_INFO *info, uint keynr, uchar *key, +uint _mi_make_key(MI_INFO *info, uint keynr, uchar *key, const uchar *record, my_off_t filepos) { uchar *pos; uchar *start; - reg1 HA_KEYSEG *keyseg; + HA_KEYSEG *keyseg; my_bool is_ft= info->s->keyinfo[keynr].flag & HA_FULLTEXT; DBUG_ENTER("_mi_make_key"); @@ -216,7 +216,7 @@ uint _mi_make_key(register MI_INFO *info, uint keynr, uchar *key, last_use_keyseg Store pointer to the keyseg after the last used one */ -uint _mi_pack_key(register MI_INFO *info, uint keynr, uchar *key, uchar *old, +uint _mi_pack_key(MI_INFO *info, uint keynr, uchar *key, uchar *old, key_part_map keypart_map, HA_KEYSEG **last_used_keyseg) { uchar *start_key=key; @@ -327,12 +327,12 @@ uint _mi_pack_key(register MI_INFO *info, uint keynr, uchar *key, uchar *old, 1 error */ -static int _mi_put_key_in_record(register MI_INFO *info, uint keynr, +static int _mi_put_key_in_record(MI_INFO *info, uint keynr, my_bool unpack_blobs, uchar *record) { - reg2 uchar *key; + uchar *key; uchar *pos,*key_end; - reg1 HA_KEYSEG *keyseg; + HA_KEYSEG *keyseg; uchar *blob_ptr; DBUG_ENTER("_mi_put_key_in_record"); @@ -505,7 +505,7 @@ int _mi_read_key_record(MI_INFO *info, my_off_t filepos, uchar *buf) 2 Index condition is not satisfied, end the scan. */ -int mi_check_index_cond(register MI_INFO *info, uint keynr, uchar *record) +int mi_check_index_cond(MI_INFO *info, uint keynr, uchar *record) { if (_mi_put_key_in_record(info, keynr, FALSE, record)) { diff --git a/storage/myisam/mi_locking.c b/storage/myisam/mi_locking.c index 7fb4e0e82fc7..ee819b589e5d 100644 --- a/storage/myisam/mi_locking.c +++ b/storage/myisam/mi_locking.c @@ -391,7 +391,7 @@ my_bool mi_check_status(void *param) ** functions to read / write the state ****************************************************************************/ -int _mi_readinfo(register MI_INFO *info, int lock_type, int check_keybuffer) +int _mi_readinfo(MI_INFO *info, int lock_type, int check_keybuffer) { DBUG_ENTER("_mi_readinfo"); @@ -430,7 +430,7 @@ int _mi_readinfo(register MI_INFO *info, int lock_type, int check_keybuffer) request */ -int _mi_writeinfo(register MI_INFO *info, uint operation) +int _mi_writeinfo(MI_INFO *info, uint operation) { int error,olderror; MYISAM_SHARE *share=info->s; @@ -474,7 +474,7 @@ int _mi_writeinfo(register MI_INFO *info, uint operation) /* Test if someone has changed the database */ /* (Should be called after readinfo) */ -int _mi_test_if_changed(register MI_INFO *info) +int _mi_test_if_changed(MI_INFO *info) { MYISAM_SHARE *share=info->s; if (share->state.process != share->last_process || @@ -519,7 +519,7 @@ int _mi_test_if_changed(register MI_INFO *info) int _mi_mark_file_changed(MI_INFO *info) { uchar buff[3]; - register MYISAM_SHARE *share=info->s; + MYISAM_SHARE *share=info->s; DBUG_ENTER("_mi_mark_file_changed"); if (!(share->state.changed & STATE_CHANGED) || ! share->global_changed) @@ -552,7 +552,7 @@ int _mi_mark_file_changed(MI_INFO *info) int _mi_decrement_open_count(MI_INFO *info) { uchar buff[2]; - register MYISAM_SHARE *share=info->s; + MYISAM_SHARE *share=info->s; int lock_error=0,write_error=0; if (share->global_changed) { diff --git a/storage/myisam/mi_open.c b/storage/myisam/mi_open.c index ea284f1b4513..db58083b237a 100644 --- a/storage/myisam/mi_open.c +++ b/storage/myisam/mi_open.c @@ -773,7 +773,7 @@ ulonglong mi_safe_mul(ulonglong a, ulonglong b) /* Set up functions in structs */ -void mi_setup_functions(register MYISAM_SHARE *share) +void mi_setup_functions(MYISAM_SHARE *share) { if (share->options & HA_OPTION_COMPRESS_RECORD) { @@ -827,7 +827,7 @@ void mi_setup_functions(register MYISAM_SHARE *share) } -static void setup_key_functions(register MI_KEYDEF *keyinfo) +static void setup_key_functions(MI_KEYDEF *keyinfo) { if (keyinfo->key_alg == HA_KEY_ALG_RTREE) { diff --git a/storage/myisam/mi_packrec.c b/storage/myisam/mi_packrec.c index 11615810a6d5..08e5126243e9 100644 --- a/storage/myisam/mi_packrec.c +++ b/storage/myisam/mi_packrec.c @@ -731,11 +731,11 @@ int _mi_read_pack_record(MI_INFO *info, my_off_t filepos, uchar *buf) -int _mi_pack_rec_unpack(register MI_INFO *info, MI_BIT_BUFF *bit_buff, - register uchar *to, uchar *from, ulong reclength) +int _mi_pack_rec_unpack(MI_INFO *info, MI_BIT_BUFF *bit_buff, + uchar *to, uchar *from, ulong reclength) { uchar *end_field; - reg3 MI_COLUMNDEF *end; + MI_COLUMNDEF *end; MI_COLUMNDEF *current_field; MYISAM_SHARE *share=info->s; DBUG_ENTER("_mi_pack_rec_unpack"); @@ -1019,7 +1019,7 @@ static void uf_constant(MI_COLUMNDEF *rec, static void uf_intervall(MI_COLUMNDEF *rec, MI_BIT_BUFF *bit_buff, uchar *to, uchar *end) { - reg1 uint field_length=(uint) (end-to); + uint field_length=(uint) (end-to); memcpy(to,rec->huff_tree->intervalls+field_length*decode_pos(bit_buff, rec->huff_tree), (size_t) field_length); @@ -1091,9 +1091,9 @@ static void uf_varchar2(MI_COLUMNDEF *rec, MI_BIT_BUFF *bit_buff, static void decode_bytes(MI_COLUMNDEF *rec,MI_BIT_BUFF *bit_buff,uchar *to, uchar *end) { - reg1 uint bits,low_byte; - reg3 uint16 *pos; - reg4 uint table_bits,table_and; + uint bits,low_byte; + uint16 *pos; + uint table_bits,table_and; MI_DECODE_TREE *decode_tree; decode_tree=rec->decode_tree; @@ -1184,9 +1184,9 @@ static void decode_bytes(MI_COLUMNDEF *rec,MI_BIT_BUFF *bit_buff,uchar *to, static void decode_bytes(MI_COLUMNDEF *rec, MI_BIT_BUFF *bit_buff, uchar *to, uchar *end) { - reg1 uint bits,low_byte; - reg3 uint16 *pos; - reg4 uint table_bits,table_and; + uint bits,low_byte; + uint16 *pos; + uint table_bits,table_and; MI_DECODE_TREE *decode_tree; decode_tree=rec->huff_tree; @@ -1293,7 +1293,7 @@ static uint decode_pos(MI_BIT_BUFF *bit_buff, MI_DECODE_TREE *decode_tree) int _mi_read_rnd_pack_record(MI_INFO *info, uchar *buf, - register my_off_t filepos, + my_off_t filepos, my_bool skip_deleted_blocks) { uint b_type; @@ -1466,9 +1466,9 @@ static void fill_buffer(MI_BIT_BUFF *bit_buff) /* Get number of bits neaded to represent value */ -static uint max_bit(register uint value) +static uint max_bit(uint value) { - reg2 uint power=1; + uint power=1; while ((value>>=1)) power++; @@ -1605,7 +1605,7 @@ static int _mi_read_mempack_record(MI_INFO *info, my_off_t filepos, uchar *buf) /*ARGSUSED*/ static int _mi_read_rnd_mempack_record(MI_INFO *info, uchar *buf, - register my_off_t filepos, + my_off_t filepos, my_bool skip_deleted_blocks MY_ATTRIBUTE((unused))) { diff --git a/storage/myisam/mi_page.c b/storage/myisam/mi_page.c index 766bb813edb7..96feef87d02d 100644 --- a/storage/myisam/mi_page.c +++ b/storage/myisam/mi_page.c @@ -19,7 +19,7 @@ /* Fetch a key-page in memory */ -uchar *_mi_fetch_keypage(register MI_INFO *info, MI_KEYDEF *keyinfo, +uchar *_mi_fetch_keypage(MI_INFO *info, MI_KEYDEF *keyinfo, my_off_t page, int level, uchar *buff, int return_buffer) { @@ -61,10 +61,10 @@ uchar *_mi_fetch_keypage(register MI_INFO *info, MI_KEYDEF *keyinfo, /* Write a key-page on disk */ -int _mi_write_keypage(register MI_INFO *info, register MI_KEYDEF *keyinfo, +int _mi_write_keypage(MI_INFO *info, MI_KEYDEF *keyinfo, my_off_t page, int level, uchar *buff) { - reg3 uint length; + uint length; DBUG_ENTER("_mi_write_keypage"); #ifndef FAST /* Safety check */ @@ -96,7 +96,7 @@ int _mi_write_keypage(register MI_INFO *info, register MI_KEYDEF *keyinfo, /* Remove page from disk */ -int _mi_dispose(register MI_INFO *info, MI_KEYDEF *keyinfo, my_off_t pos, +int _mi_dispose(MI_INFO *info, MI_KEYDEF *keyinfo, my_off_t pos, int level) { my_off_t old_link; @@ -118,7 +118,7 @@ int _mi_dispose(register MI_INFO *info, MI_KEYDEF *keyinfo, my_off_t pos, /* Make new page on disk */ -my_off_t _mi_new(register MI_INFO *info, MI_KEYDEF *keyinfo, int level) +my_off_t _mi_new(MI_INFO *info, MI_KEYDEF *keyinfo, int level) { my_off_t pos; uchar buff[8]; diff --git a/storage/myisam/mi_range.c b/storage/myisam/mi_range.c index cba5ece744df..a076dba47465 100644 --- a/storage/myisam/mi_range.c +++ b/storage/myisam/mi_range.c @@ -189,10 +189,10 @@ static ha_rows _mi_record_pos(MI_INFO *info, const uchar *key, /* This is a modified version of _mi_search */ /* Returns offset for key in indextable (decimal 0.0 <= x <= 1.0) */ -static double _mi_search_pos(register MI_INFO *info, - register MI_KEYDEF *keyinfo, +static double _mi_search_pos(MI_INFO *info, + MI_KEYDEF *keyinfo, uchar *key, uint key_len, uint nextflag, - register my_off_t pos) + my_off_t pos) { int flag; uint nod_flag,keynr,UNINIT_VAR(max_keynr); @@ -257,7 +257,7 @@ static double _mi_search_pos(register MI_INFO *info, /* Get keynummer of current key and max number of keys in nod */ -static uint _mi_keynr(MI_INFO *info, register MI_KEYDEF *keyinfo, uchar *page, +static uint _mi_keynr(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *page, uchar *keypos, uint *ret_max_key) { uint nod_flag,keynr,max_key; diff --git a/storage/myisam/mi_rprev.c b/storage/myisam/mi_rprev.c index 6e687a44d3de..d822f6cd11db 100644 --- a/storage/myisam/mi_rprev.c +++ b/storage/myisam/mi_rprev.c @@ -25,7 +25,7 @@ int mi_rprev(MI_INFO *info, uchar *buf, int inx) { int error,changed; - register uint flag; + uint flag; MYISAM_SHARE *share=info->s; DBUG_ENTER("mi_rprev"); diff --git a/storage/myisam/mi_rrnd.c b/storage/myisam/mi_rrnd.c index eea01c37d2a3..ad64c2988a90 100644 --- a/storage/myisam/mi_rrnd.c +++ b/storage/myisam/mi_rrnd.c @@ -30,7 +30,7 @@ HA_ERR_END_OF_FILE = EOF. */ -int mi_rrnd(MI_INFO *info, uchar *buf, register my_off_t filepos) +int mi_rrnd(MI_INFO *info, uchar *buf, my_off_t filepos) { my_bool skip_deleted_blocks; DBUG_ENTER("mi_rrnd"); diff --git a/storage/myisam/mi_scan.c b/storage/myisam/mi_scan.c index bde66f3575c4..d9f16c32e460 100644 --- a/storage/myisam/mi_scan.c +++ b/storage/myisam/mi_scan.c @@ -17,7 +17,7 @@ #include "myisamdef.h" -int mi_scan_init(register MI_INFO *info) +int mi_scan_init(MI_INFO *info) { DBUG_ENTER("mi_scan_init"); info->nextpos=info->s->pack.header_length; /* Read first record */ diff --git a/storage/myisam/mi_statrec.c b/storage/myisam/mi_statrec.c index 8c38e299bc99..f5e19f1fce45 100644 --- a/storage/myisam/mi_statrec.c +++ b/storage/myisam/mi_statrec.c @@ -110,7 +110,7 @@ int _mi_delete_static_record(MI_INFO *info) } -int _mi_cmp_static_record(register MI_INFO *info, register const uchar *old) +int _mi_cmp_static_record(MI_INFO *info, const uchar *old) { DBUG_ENTER("_mi_cmp_static_record"); @@ -162,8 +162,8 @@ int _mi_cmp_static_unique(MI_INFO *info, MI_UNIQUEDEF *def, /* 1 if record is deleted */ /* MY_FILE_ERROR on read-error or locking-error */ -int _mi_read_static_record(register MI_INFO *info, register my_off_t pos, - register uchar *record) +int _mi_read_static_record(MI_INFO *info, my_off_t pos, + uchar *record) { int error; @@ -197,7 +197,7 @@ int _mi_read_static_record(register MI_INFO *info, register my_off_t pos, int _mi_read_rnd_static_record(MI_INFO *info, uchar *buf, - register my_off_t filepos, + my_off_t filepos, my_bool skip_deleted_blocks) { int locked,error,cache_read; diff --git a/storage/myisam/mi_update.c b/storage/myisam/mi_update.c index 4365a18bc8ad..6bd7d2ddc46f 100644 --- a/storage/myisam/mi_update.c +++ b/storage/myisam/mi_update.c @@ -19,10 +19,10 @@ #include "fulltext.h" #include "rt_index.h" -int mi_update(register MI_INFO *info, const uchar *oldrec, uchar *newrec) +int mi_update(MI_INFO *info, const uchar *oldrec, uchar *newrec) { int flag,key_changed,save_errno; - reg3 my_off_t pos; + my_off_t pos; uint i; uchar old_key[MI_MAX_KEY_BUFF],*new_key; my_bool auto_key_changed=0; diff --git a/storage/myisam/mi_write.c b/storage/myisam/mi_write.c index 1982639ef340..e539c5ce914c 100644 --- a/storage/myisam/mi_write.c +++ b/storage/myisam/mi_write.c @@ -34,9 +34,9 @@ static int _mi_balance_page(MI_INFO *info,MI_KEYDEF *keyinfo,uchar *key, static uchar *_mi_find_last_pos(MI_KEYDEF *keyinfo, uchar *page, uchar *key, uint *return_key_length, uchar **after_key); -int _mi_ck_write_tree(register MI_INFO *info, uint keynr,uchar *key, +int _mi_ck_write_tree(MI_INFO *info, uint keynr,uchar *key, uint key_length); -int _mi_ck_write_btree(register MI_INFO *info, uint keynr,uchar *key, +int _mi_ck_write_btree(MI_INFO *info, uint keynr,uchar *key, uint key_length); /* Write new record to database */ @@ -253,7 +253,7 @@ int _mi_ck_write(MI_INFO *info, uint keynr, uchar *key, uint key_length) * Normal insert code * **********************************************************************/ -int _mi_ck_write_btree(register MI_INFO *info, uint keynr, uchar *key, +int _mi_ck_write_btree(MI_INFO *info, uint keynr, uchar *key, uint key_length) { int error; @@ -332,7 +332,7 @@ int _mi_enlarge_root(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *key, 1 = key should be stored in higher tree */ -static int w_search(register MI_INFO *info, register MI_KEYDEF *keyinfo, +static int w_search(MI_INFO *info, MI_KEYDEF *keyinfo, uint comp_flag, uchar *key, uint key_length, my_off_t page, uchar *father_buff, uchar *father_keypos, my_off_t father_page, my_bool insert_last) @@ -457,7 +457,7 @@ static int w_search(register MI_INFO *info, register MI_KEYDEF *keyinfo, < 0 Error. */ -int _mi_insert(register MI_INFO *info, register MI_KEYDEF *keyinfo, +int _mi_insert(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *key, uchar *anc_buff, uchar *key_pos, uchar *key_buff, uchar *father_buff, uchar *father_key_pos, my_off_t father_page, my_bool insert_last) @@ -586,7 +586,7 @@ int _mi_insert(register MI_INFO *info, register MI_KEYDEF *keyinfo, /* split a full page in two and assign emerging item to key */ -int _mi_split_page(register MI_INFO *info, register MI_KEYDEF *keyinfo, +int _mi_split_page(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *key, uchar *buff, uchar *key_buff, my_bool insert_last_key) { @@ -753,7 +753,7 @@ static uchar *_mi_find_last_pos(MI_KEYDEF *keyinfo, uchar *page, /* Balance page with not packed keys with page on right/left */ /* returns 0 if balance was done */ -static int _mi_balance_page(register MI_INFO *info, MI_KEYDEF *keyinfo, +static int _mi_balance_page(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *key, uchar *curr_buff, uchar *father_buff, uchar *father_key_pos, my_off_t father_page) { @@ -898,7 +898,7 @@ typedef struct { uint keynr; } bulk_insert_param; -int _mi_ck_write_tree(register MI_INFO *info, uint keynr, uchar *key, +int _mi_ck_write_tree(MI_INFO *info, uint keynr, uchar *key, uint key_length) { int error; diff --git a/storage/myisam/myisamchk.c b/storage/myisam/myisamchk.c index b2c966ac9e2b..c2a5b01b844b 100644 --- a/storage/myisam/myisamchk.c +++ b/storage/myisam/myisamchk.c @@ -64,8 +64,8 @@ static void get_options(int *argc,char * * *argv); static void print_version(void); static void usage(void); static int myisamchk(MI_CHECK *param, char *filename); -static void descript(MI_CHECK *param, register MI_INFO *info, char * name); -static int mi_sort_records(MI_CHECK *param, register MI_INFO *info, +static void descript(MI_CHECK *param, MI_INFO *info, char * name); +static int mi_sort_records(MI_CHECK *param, MI_INFO *info, char * name, uint sort_key, my_bool write_info, my_bool update_index); static int sort_record_index(MI_SORT_PARAM *sort_param, MI_INFO *info, @@ -718,7 +718,7 @@ get_one_option(int optid, } -static void get_options(register int *argc,register char ***argv) +static void get_options(int *argc,char ***argv) { int ho_error; @@ -1183,12 +1183,12 @@ static int myisamchk(MI_CHECK *param, char * filename) /* Write info about table */ -static void descript(MI_CHECK *param, register MI_INFO *info, char * name) +static void descript(MI_CHECK *param, MI_INFO *info, char * name) { uint key,keyseg_nr,field,start; - reg3 MI_KEYDEF *keyinfo; - reg2 HA_KEYSEG *keyseg; - reg4 const char *text; + MI_KEYDEF *keyinfo; + HA_KEYSEG *keyseg; + const char *text; char buff[160],length[10],*pos,*end; enum en_fieldtype type; MYISAM_SHARE *share=info->s; @@ -1442,7 +1442,7 @@ static void descript(MI_CHECK *param, register MI_INFO *info, char * name) /* Sort records according to one key */ static int mi_sort_records(MI_CHECK *param, - register MI_INFO *info, char * name, + MI_INFO *info, char * name, uint sort_key, my_bool write_info, my_bool update_index) diff --git a/storage/myisam/myisamdef.h b/storage/myisam/myisamdef.h index daa501953d82..4bb006dda9a2 100644 --- a/storage/myisam/myisamdef.h +++ b/storage/myisam/myisamdef.h @@ -352,7 +352,7 @@ typedef struct st_mi_sort_param int (*key_read)(struct st_mi_sort_param *,void *); int (*key_write)(struct st_mi_sort_param *, const void *); void (*lock_in_memory)(MI_CHECK *); - int (*write_keys)(struct st_mi_sort_param *, register uchar **, + int (*write_keys)(struct st_mi_sort_param *, uchar **, ulong , struct st_buffpek *, IO_CACHE *); ulong (*read_to_buffer)(IO_CACHE *,struct st_buffpek *, uint); int (*write_key)(struct st_mi_sort_param *, IO_CACHE *,uchar *, @@ -588,7 +588,7 @@ extern uchar *_mi_get_last_key(MI_INFO *info,MI_KEYDEF *keyinfo,uchar *keypos, extern uchar *_mi_get_key(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *page, uchar *key, uchar *keypos, uint *return_key_length); extern uint _mi_keylength(MI_KEYDEF *keyinfo,uchar *key); -extern uint _mi_keylength_part(MI_KEYDEF *keyinfo, register uchar *key, +extern uint _mi_keylength_part(MI_KEYDEF *keyinfo, uchar *key, HA_KEYSEG *end); extern uchar *_mi_move_key(MI_KEYDEF *keyinfo,uchar *to,uchar *from); extern int _mi_search_next(MI_INFO *info,MI_KEYDEF *keyinfo,uchar *key, @@ -604,7 +604,7 @@ extern int _mi_dispose(MI_INFO *info,MI_KEYDEF *keyinfo,my_off_t pos, extern my_off_t _mi_new(MI_INFO *info,MI_KEYDEF *keyinfo,int level); extern uint _mi_make_key(MI_INFO *info,uint keynr,uchar *key, const uchar *record,my_off_t filepos); -extern uint _mi_pack_key(register MI_INFO *info, uint keynr, uchar *key, +extern uint _mi_pack_key(MI_INFO *info, uint keynr, uchar *key, uchar *old, key_part_map keypart_map, HA_KEYSEG **last_used_keyseg); extern int _mi_read_key_record(MI_INFO *info,my_off_t filepos,uchar *buf); @@ -765,14 +765,14 @@ int mi_open_datafile(MI_INFO *info, MYISAM_SHARE *share, const char *orn_name, File file_to_dup); int mi_open_keyfile(MYISAM_SHARE *share); -void mi_setup_functions(register MYISAM_SHARE *share); +void mi_setup_functions(MYISAM_SHARE *share); my_bool mi_dynmap_file(MI_INFO *info, my_off_t size); int mi_munmap_file(MI_INFO *info); void mi_remap_file(MI_INFO *info, my_off_t size); void _mi_report_crashed(MI_INFO *file, const char *message, const char *sfile, uint sline); -int mi_check_index_cond(register MI_INFO *info, uint keynr, uchar *record); +int mi_check_index_cond(MI_INFO *info, uint keynr, uchar *record); /* Functions needed by mi_check */ volatile int *killed_ptr(MI_CHECK *param); diff --git a/storage/myisam/myisamlog.c b/storage/myisam/myisamlog.c index fc37b2221fd0..92abc60f286c 100644 --- a/storage/myisam/myisamlog.c +++ b/storage/myisam/myisamlog.c @@ -129,7 +129,7 @@ int main(int argc, char **argv) } /* main */ -static void get_options(register int *argc, register char ***argv) +static void get_options(int *argc, char ***argv) { int help,version; const char *pos,*usage; @@ -676,7 +676,7 @@ static int examine_log(char * file_name, char **table_names) } -static int read_string(IO_CACHE *file, register uchar* *to, register uint length) +static int read_string(IO_CACHE *file, uchar* *to, uint length) { DBUG_ENTER("read_string"); diff --git a/storage/myisam/sp_defs.h b/storage/myisam/sp_defs.h index afd89d5b2cae..bbd00cc8f13d 100644 --- a/storage/myisam/sp_defs.h +++ b/storage/myisam/sp_defs.h @@ -40,7 +40,7 @@ enum wkbByteOrder wkbNDR = 1 /* Little Endian */ }; -uint sp_make_key(register MI_INFO *info, uint keynr, uchar *key, +uint sp_make_key(MI_INFO *info, uint keynr, uchar *key, const uchar *record, my_off_t filepos); #endif /*HAVE_SPATIAL*/ diff --git a/storage/myisam/sp_key.c b/storage/myisam/sp_key.c index 4a6cd8d8ea4a..b856f2a8eaa2 100644 --- a/storage/myisam/sp_key.c +++ b/storage/myisam/sp_key.c @@ -31,7 +31,7 @@ static int sp_get_geometry_mbr(uchar *(*wkb), uchar *end, uint n_dims, double *mbr, int top); static int sp_mbr_from_wkb(uchar (*wkb), uint size, uint n_dims, double *mbr); -uint sp_make_key(register MI_INFO *info, uint keynr, uchar *key, +uint sp_make_key(MI_INFO *info, uint keynr, uchar *key, const uchar *record, my_off_t filepos) { HA_KEYSEG *keyseg; diff --git a/storage/myisammrg/ha_myisammrg.cc b/storage/myisammrg/ha_myisammrg.cc index 4bb33b8c773b..abbd21fbf299 100644 --- a/storage/myisammrg/ha_myisammrg.cc +++ b/storage/myisammrg/ha_myisammrg.cc @@ -1509,7 +1509,7 @@ void ha_myisammrg::update_create_info(HA_CREATE_INFO *create_info) } -int ha_myisammrg::create(const char *name, register TABLE *form, +int ha_myisammrg::create(const char *name, TABLE *form, HA_CREATE_INFO *create_info) { char buff[FN_REFLEN]; diff --git a/storage/myisammrg/myrg_info.c b/storage/myisammrg/myrg_info.c index 53484b430b33..be194a03a9d4 100644 --- a/storage/myisammrg/myrg_info.c +++ b/storage/myisammrg/myrg_info.c @@ -28,7 +28,7 @@ ulonglong myrg_position(MYRG_INFO *info) ~(ulonglong) 0; } -int myrg_status(MYRG_INFO *info,register MYMERGE_INFO *x,int flag) +int myrg_status(MYRG_INFO *info, MYMERGE_INFO *x,int flag) { MYRG_TABLE *current_table; DBUG_ENTER("myrg_status"); diff --git a/storage/myisammrg/myrg_update.c b/storage/myisammrg/myrg_update.c index 6eef03f17a75..54f4ff260399 100644 --- a/storage/myisammrg/myrg_update.c +++ b/storage/myisammrg/myrg_update.c @@ -18,7 +18,7 @@ #include "myrg_def.h" -int myrg_update(register MYRG_INFO *info,const uchar *oldrec, uchar *newrec) +int myrg_update(MYRG_INFO *info,const uchar *oldrec, uchar *newrec) { if (!info->current_table) return (my_errno=HA_ERR_NO_ACTIVE_RECORD); diff --git a/storage/myisammrg/myrg_write.c b/storage/myisammrg/myrg_write.c index 907fcf21372b..2432182fc18d 100644 --- a/storage/myisammrg/myrg_write.c +++ b/storage/myisammrg/myrg_write.c @@ -18,7 +18,7 @@ #include "myrg_def.h" -int myrg_write(register MYRG_INFO *info, uchar *rec) +int myrg_write(MYRG_INFO *info, uchar *rec) { /* [phi] MERGE_WRITE_DISABLED is handled by the else case */ if (info->merge_insert_method == MERGE_INSERT_TO_FIRST) diff --git a/storage/perfschema/pfs.cc b/storage/perfschema/pfs.cc index b8848d108ff3..69751483659e 100644 --- a/storage/perfschema/pfs.cc +++ b/storage/perfschema/pfs.cc @@ -2214,7 +2214,7 @@ start_mutex_wait_v1(PSI_mutex_locker_state *state, if (! pfs_mutex->m_enabled) return NULL; - register uint flags; + uint flags; ulonglong timer_start= 0; if (flag_thread_instrumentation) @@ -2312,7 +2312,7 @@ start_rwlock_wait_v1(PSI_rwlock_locker_state *state, if (! pfs_rwlock->m_enabled) return NULL; - register uint flags; + uint flags; ulonglong timer_start= 0; if (flag_thread_instrumentation) @@ -2420,7 +2420,7 @@ start_cond_wait_v1(PSI_cond_locker_state *state, if (! pfs_cond->m_enabled) return NULL; - register uint flags; + uint flags; ulonglong timer_start= 0; if (flag_thread_instrumentation) @@ -2564,7 +2564,7 @@ start_table_io_wait_v1(PSI_table_locker_state *state, PFS_thread *pfs_thread= my_pthread_getspecific_ptr(PFS_thread*, THR_PFS); - register uint flags; + uint flags; ulonglong timer_start= 0; if (flag_thread_instrumentation) @@ -2690,7 +2690,7 @@ start_table_lock_wait_v1(PSI_table_locker_state *state, DBUG_ASSERT((uint) lock_type < array_elements(table_lock_operation_map)); - register uint flags; + uint flags; ulonglong timer_start= 0; if (flag_thread_instrumentation) @@ -2798,7 +2798,7 @@ get_thread_file_name_locker_v1(PSI_file_locker_state *state, if (flag_thread_instrumentation && ! pfs_thread->m_enabled) return NULL; - register uint flags; + uint flags; state->m_thread= reinterpret_cast (pfs_thread); flags= STATE_FLAG_THREAD; @@ -2867,7 +2867,7 @@ get_thread_file_stream_locker_v1(PSI_file_locker_state *state, if (! pfs_file->m_enabled) return NULL; - register uint flags; + uint flags; if (flag_thread_instrumentation) { @@ -2973,7 +2973,7 @@ get_thread_file_descriptor_locker_v1(PSI_file_locker_state *state, DBUG_ASSERT(pfs_file->m_class != NULL); PFS_file_class *klass= pfs_file->m_class; - register uint flags; + uint flags; if (flag_thread_instrumentation) { @@ -3062,7 +3062,7 @@ start_socket_wait_v1(PSI_socket_locker_state *state, if (!pfs_socket->m_enabled || pfs_socket->m_idle) return NULL; - register uint flags= 0; + uint flags= 0; ulonglong timer_start= 0; if (flag_thread_instrumentation) @@ -3321,7 +3321,7 @@ start_idle_wait_v1(PSI_idle_locker_state* state, const char *src_file, uint src_ if (!global_idle_class.m_enabled) return NULL; - register uint flags= 0; + uint flags= 0; ulonglong timer_start= 0; if (flag_thread_instrumentation) @@ -3403,7 +3403,7 @@ static void end_idle_wait_v1(PSI_idle_locker* locker) ulonglong timer_end= 0; ulonglong wait_time= 0; - register uint flags= state->m_flags; + uint flags= state->m_flags; if (flags & STATE_FLAG_TIMED) { @@ -3473,7 +3473,7 @@ static void end_mutex_wait_v1(PSI_mutex_locker* locker, int rc) DBUG_ASSERT(mutex != NULL); PFS_thread *thread= reinterpret_cast (state->m_thread); - register uint flags= state->m_flags; + uint flags= state->m_flags; if (flags & STATE_FLAG_TIMED) { @@ -3794,7 +3794,7 @@ static void end_table_io_wait_v1(PSI_table_locker* locker) break; } - register uint flags= state->m_flags; + uint flags= state->m_flags; if (flags & STATE_FLAG_TIMED) { @@ -3865,7 +3865,7 @@ static void end_table_lock_wait_v1(PSI_table_locker* locker) PFS_single_stat *stat= & table->m_table_stat.m_lock_stat.m_stat[state->m_index]; - register uint flags= state->m_flags; + uint flags= state->m_flags; if (flags & STATE_FLAG_TIMED) { @@ -4028,7 +4028,7 @@ static void start_file_wait_v1(PSI_file_locker *locker, PSI_file_locker_state *state= reinterpret_cast (locker); DBUG_ASSERT(state != NULL); - register uint flags= state->m_flags; + uint flags= state->m_flags; if (flags & STATE_FLAG_TIMED) { @@ -4064,7 +4064,7 @@ static void end_file_wait_v1(PSI_file_locker *locker, ulonglong timer_end= 0; ulonglong wait_time= 0; PFS_byte_stat *byte_stat; - register uint flags= state->m_flags; + uint flags= state->m_flags; size_t bytes= ((int)byte_count > -1 ? byte_count : 0); PFS_file_stat *file_stat; @@ -4419,7 +4419,7 @@ get_thread_statement_locker_v1(PSI_statement_locker_state *state, if (! klass->m_enabled) return NULL; - register uint flags; + uint flags; if (flag_thread_instrumentation) { @@ -4596,7 +4596,7 @@ static void start_statement_v1(PSI_statement_locker *locker, PSI_statement_locker_state *state= reinterpret_cast (locker); DBUG_ASSERT(state != NULL); - register uint flags= state->m_flags; + uint flags= state->m_flags; ulonglong timer_start= 0; if (flags & STATE_FLAG_TIMED) @@ -4798,7 +4798,7 @@ static void end_statement_v1(PSI_statement_locker *locker, void *stmt_da) ulonglong timer_end= 0; ulonglong wait_time= 0; - register uint flags= state->m_flags; + uint flags= state->m_flags; if (flags & STATE_FLAG_TIMED) { @@ -5024,7 +5024,7 @@ static void end_socket_wait_v1(PSI_socket_locker *locker, size_t byte_count) ulonglong timer_end= 0; ulonglong wait_time= 0; PFS_byte_stat *byte_stat; - register uint flags= state->m_flags; + uint flags= state->m_flags; size_t bytes= ((int)byte_count > -1 ? byte_count : 0); switch (state->m_operation) diff --git a/storage/perfschema/pfs_global.h b/storage/perfschema/pfs_global.h index e69b304f4c48..1d7acfcef0ca 100644 --- a/storage/perfschema/pfs_global.h +++ b/storage/perfschema/pfs_global.h @@ -79,7 +79,7 @@ inline uint randomized_index(const void *ptr, uint max_size) static uint seed1= 0; static uint seed2= 0; uint result; - register intptr value; + intptr value; if (unlikely(max_size == 0)) return 0; diff --git a/strings/bchange.c b/strings/bchange.c index ed7b2e1e05bf..8fc75ba92b30 100644 --- a/strings/bchange.c +++ b/strings/bchange.c @@ -27,7 +27,7 @@ #include #include "m_string.h" -void bchange(register uchar *dst, size_t old_length, register const uchar *src, +void bchange(uchar *dst, size_t old_length, const uchar *src, size_t new_length, size_t tot_length) { size_t rest=tot_length-old_length; diff --git a/strings/bmove_upp.c b/strings/bmove_upp.c index f05cc180c591..b73fa8f52c51 100644 --- a/strings/bmove_upp.c +++ b/strings/bmove_upp.c @@ -25,8 +25,8 @@ #include #include "m_string.h" -void bmove_upp(register uchar *dst, register const uchar *src, - register size_t len) +void bmove_upp(uchar *dst, const uchar *src, + size_t len) { while (len-- != 0) *--dst = *--src; } diff --git a/strings/ctype-bin.c b/strings/ctype-bin.c index cea6db2f0a02..8408fa4907fe 100644 --- a/strings/ctype-bin.c +++ b/strings/ctype-bin.c @@ -433,7 +433,7 @@ uint my_instr_bin(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const char *s, size_t s_length, my_match_t *match, uint nmatch) { - register const uchar *str, *search, *end, *search_end; + const uchar *str, *search, *end, *search_end; if (s_length <= b_length) { @@ -458,7 +458,7 @@ uint my_instr_bin(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), { if ( (*str++) == (*search)) { - register const uchar *i,*j; + const uchar *i,*j; i= str; j= search+1; diff --git a/strings/ctype-mb.c b/strings/ctype-mb.c index faac2c94335c..264bfd1f0e12 100644 --- a/strings/ctype-mb.c +++ b/strings/ctype-mb.c @@ -22,8 +22,8 @@ size_t my_caseup_str_mb(const CHARSET_INFO *cs, char *str) { - register uint32 l; - register uchar *map= cs->to_upper; + uint32 l; + uchar *map= cs->to_upper; char *str_orig= str; while (*str) @@ -43,8 +43,8 @@ size_t my_caseup_str_mb(const CHARSET_INFO *cs, char *str) size_t my_casedn_str_mb(const CHARSET_INFO *cs, char *str) { - register uint32 l; - register uchar *map= cs->to_lower; + uint32 l; + uchar *map= cs->to_lower; char *str_orig= str; while (*str) @@ -77,9 +77,9 @@ size_t my_caseup_mb(const CHARSET_INFO *cs, char *src, size_t srclen, char *dst MY_ATTRIBUTE((unused)), size_t dstlen MY_ATTRIBUTE((unused))) { - register uint32 l; - register char *srcend= src + srclen; - register uchar *map= cs->to_upper; + uint32 l; + char *srcend= src + srclen; + uchar *map= cs->to_upper; DBUG_ASSERT(cs->caseup_multiply == 1); DBUG_ASSERT(src == dst && srclen == dstlen); @@ -112,9 +112,9 @@ size_t my_casedn_mb(const CHARSET_INFO *cs, char *src, size_t srclen, char *dst MY_ATTRIBUTE((unused)), size_t dstlen MY_ATTRIBUTE((unused))) { - register uint32 l; - register char *srcend= src + srclen; - register uchar *map=cs->to_lower; + uint32 l; + char *srcend= src + srclen; + uchar *map=cs->to_lower; DBUG_ASSERT(cs->casedn_multiply == 1); DBUG_ASSERT(src == dst && srclen == dstlen); @@ -218,8 +218,8 @@ my_caseup_mb_varlen(const CHARSET_INFO *cs, char *src, size_t srclen, int my_strcasecmp_mb(const CHARSET_INFO *cs,const char *s, const char *t) { - register uint32 l; - register uchar *map=cs->to_upper; + uint32 l; + uchar *map=cs->to_upper; while (*s && *t) { @@ -376,7 +376,7 @@ int my_wildcmp_mb(const CHARSET_INFO *cs, size_t my_numchars_mb(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), const char *pos, const char *end) { - register size_t count= 0; + size_t count= 0; while (pos < end) { uint mb_len; @@ -429,7 +429,7 @@ uint my_instr_mb(const CHARSET_INFO *cs, const char *s, size_t s_length, my_match_t *match, uint nmatch) { - register const char *end, *b0; + const char *end, *b0; int res= 0; if (s_length <= b_length) diff --git a/strings/ctype-simple.c b/strings/ctype-simple.c index 476901c43a4c..69562be04465 100644 --- a/strings/ctype-simple.c +++ b/strings/ctype-simple.c @@ -188,7 +188,7 @@ int my_strnncollsp_simple(const CHARSET_INFO *cs, const uchar *a, size_t my_caseup_str_8bit(const CHARSET_INFO *cs,char *str) { - register uchar *map= cs->to_upper; + uchar *map= cs->to_upper; char *str_orig= str; while ((*str= (char) map[(uchar) *str]) != 0) str++; @@ -198,7 +198,7 @@ size_t my_caseup_str_8bit(const CHARSET_INFO *cs,char *str) size_t my_casedn_str_8bit(const CHARSET_INFO *cs,char *str) { - register uchar *map= cs->to_lower; + uchar *map= cs->to_lower; char *str_orig= str; while ((*str= (char) map[(uchar) *str]) != 0) str++; @@ -211,7 +211,7 @@ size_t my_caseup_8bit(const CHARSET_INFO *cs, char *src, size_t srclen, size_t dstlen MY_ATTRIBUTE((unused))) { char *end= src + srclen; - register uchar *map= cs->to_upper; + uchar *map= cs->to_upper; DBUG_ASSERT(src == dst && srclen == dstlen); for ( ; src != end ; src++) *src= (char) map[(uchar) *src]; @@ -224,7 +224,7 @@ size_t my_casedn_8bit(const CHARSET_INFO *cs, char *src, size_t srclen, size_t dstlen MY_ATTRIBUTE((unused))) { char *end= src + srclen; - register uchar *map=cs->to_lower; + uchar *map=cs->to_lower; DBUG_ASSERT(src == dst && srclen == dstlen); for ( ; src != end ; src++) *src= (char) map[(uchar) *src]; @@ -233,7 +233,7 @@ size_t my_casedn_8bit(const CHARSET_INFO *cs, char *src, size_t srclen, int my_strcasecmp_8bit(const CHARSET_INFO *cs,const char *s, const char *t) { - register uchar *map=cs->to_upper; + uchar *map=cs->to_upper; while (map[(uchar) *s] == map[(uchar) *t++]) if (!*s++) return 0; return ((int) map[(uchar) s[0]] - (int) map[(uchar) t[-1]]); @@ -296,7 +296,7 @@ void my_hash_sort_simple(const CHARSET_INFO *cs, const uchar *key, size_t len, ulong *nr1, ulong *nr2) { - register uchar *sort_order=cs->sort_order; + uchar *sort_order=cs->sort_order; const uchar *end; /* @@ -319,11 +319,11 @@ long my_strntol_8bit(const CHARSET_INFO *cs, char **endptr, int *err) { int negative; - register uint32 cutoff; - register uint cutlim; - register uint32 i; - register const char *s; - register uchar c; + uint32 cutoff; + uint cutlim; + uint32 i; + const char *s; + uchar c; const char *save, *e; int overflow; @@ -415,11 +415,11 @@ ulong my_strntoul_8bit(const CHARSET_INFO *cs, char **endptr, int *err) { int negative; - register uint32 cutoff; - register uint cutlim; - register uint32 i; - register const char *s; - register uchar c; + uint32 cutoff; + uint cutlim; + uint32 i; + const char *s; + uchar c; const char *save, *e; int overflow; @@ -502,10 +502,10 @@ longlong my_strntoll_8bit(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), char **endptr,int *err) { int negative; - register ulonglong cutoff; - register uint cutlim; - register ulonglong i; - register const char *s, *e; + ulonglong cutoff; + uint cutlim; + ulonglong i; + const char *s, *e; const char *save; int overflow; @@ -543,7 +543,7 @@ longlong my_strntoll_8bit(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), i = 0; for ( ; s != e; s++) { - register uchar c= *s; + uchar c= *s; if (c>='0' && c<='9') c -= '0'; else if (c>='A' && c<='Z') @@ -598,10 +598,10 @@ ulonglong my_strntoull_8bit(const CHARSET_INFO *cs, char **endptr, int *err) { int negative; - register ulonglong cutoff; - register uint cutlim; - register ulonglong i; - register const char *s, *e; + ulonglong cutoff; + uint cutlim; + ulonglong i; + const char *s, *e; const char *save; int overflow; @@ -639,7 +639,7 @@ ulonglong my_strntoull_8bit(const CHARSET_INFO *cs, i = 0; for ( ; s != e; s++) { - register uchar c= *s; + uchar c= *s; if (c>='0' && c<='9') c -= '0'; @@ -726,7 +726,7 @@ size_t my_long10_to_str_8bit(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)), char *dst, size_t len, int radix, long int val) { char buffer[66]; - register char *p, *e; + char *p, *e; long int new_val; uint sign=0; unsigned long int uval = (unsigned long int) val; @@ -769,7 +769,7 @@ size_t my_longlong10_to_str_8bit(const CHARSET_INFO *cs longlong val) { char buffer[65]; - register char *p, *e; + char *p, *e; long long_val; uint sign= 0; ulonglong uval = (ulonglong)val; @@ -1075,7 +1075,7 @@ uint my_instr_simple(const CHARSET_INFO *cs, const char *s, size_t s_length, my_match_t *match, uint nmatch) { - register const uchar *str, *search, *end, *search_end; + const uchar *str, *search, *end, *search_end; if (s_length <= b_length) { @@ -1100,7 +1100,7 @@ uint my_instr_simple(const CHARSET_INFO *cs, { if (cs->sort_order[*str++] == cs->sort_order[*search]) { - register const uchar *i,*j; + const uchar *i,*j; i= str; j= search+1; diff --git a/strings/ctype-ucs2.c b/strings/ctype-ucs2.c index e27ff74ce99f..ad4e5f855f49 100644 --- a/strings/ctype-ucs2.c +++ b/strings/ctype-ucs2.c @@ -100,11 +100,11 @@ my_strntol_mb2_or_mb4(const CHARSET_INFO *cs, int overflow; int cnv; my_wc_t wc; - register unsigned int cutlim; - register uint32 cutoff; - register uint32 res; - register const uchar *s= (const uchar*) nptr; - register const uchar *e= (const uchar*) nptr+l; + unsigned int cutlim; + uint32 cutoff; + uint32 res; + const uchar *s= (const uchar*) nptr; + const uchar *e= (const uchar*) nptr+l; const uchar *save; *err= 0; @@ -211,11 +211,11 @@ my_strntoul_mb2_or_mb4(const CHARSET_INFO *cs, int overflow; int cnv; my_wc_t wc; - register unsigned int cutlim; - register uint32 cutoff; - register uint32 res; - register const uchar *s= (const uchar*) nptr; - register const uchar *e= (const uchar*) nptr + l; + unsigned int cutlim; + uint32 cutoff; + uint32 res; + const uchar *s= (const uchar*) nptr; + const uchar *e= (const uchar*) nptr + l; const uchar *save; *err= 0; @@ -315,11 +315,11 @@ my_strntoll_mb2_or_mb4(const CHARSET_INFO *cs, int overflow; int cnv; my_wc_t wc; - register ulonglong cutoff; - register unsigned int cutlim; - register ulonglong res; - register const uchar *s= (const uchar*) nptr; - register const uchar *e= (const uchar*) nptr+l; + ulonglong cutoff; + unsigned int cutlim; + ulonglong res; + const uchar *s= (const uchar*) nptr; + const uchar *e= (const uchar*) nptr+l; const uchar *save; *err= 0; @@ -426,11 +426,11 @@ my_strntoull_mb2_or_mb4(const CHARSET_INFO *cs, int overflow; int cnv; my_wc_t wc; - register ulonglong cutoff; - register unsigned int cutlim; - register ulonglong res; - register const uchar *s= (const uchar*) nptr; - register const uchar *e= (const uchar*) nptr + l; + ulonglong cutoff; + unsigned int cutlim; + ulonglong res; + const uchar *s= (const uchar*) nptr; + const uchar *e= (const uchar*) nptr + l; const uchar *save; *err= 0; @@ -528,8 +528,8 @@ my_strntod_mb2_or_mb4(const CHARSET_INFO *cs, { char buf[256]; double res; - register char *b= buf; - register const uchar *s= (const uchar*) nptr; + char *b= buf; + const uchar *s= (const uchar*) nptr; const uchar *end; my_wc_t wc; int cnv; @@ -595,7 +595,7 @@ my_l10tostr_mb2_or_mb4(const CHARSET_INFO *cs, char *dst, size_t len, int radix, long int val) { char buffer[66]; - register char *p, *db, *de; + char *p, *db, *de; long int new_val; int sl= 0; unsigned long int uval = (unsigned long int) val; @@ -646,7 +646,7 @@ my_ll10tostr_mb2_or_mb4(const CHARSET_INFO *cs, char *dst, size_t len, int radix, longlong val) { char buffer[65]; - register char *p, *db, *de; + char *p, *db, *de; long long_val; int sl= 0; ulonglong uval= (ulonglong) val; @@ -2252,7 +2252,7 @@ my_vsnprintf_utf32(char *dst, size_t n, const char* fmt, va_list ap) if (*fmt == 's') /* String parameter */ { - reg2 char *par= va_arg(ap, char *); + char *par= va_arg(ap, char *); size_t plen; size_t left_len= (size_t)(end - dst); if (!par) par= (char*)"(null)"; @@ -2271,7 +2271,7 @@ my_vsnprintf_utf32(char *dst, size_t n, const char* fmt, va_list ap) } else if (*fmt == 'd' || *fmt == 'u') /* Integer parameter */ { - register int iarg; + int iarg; char nbuf[16]; char *pbuf= nbuf; diff --git a/strings/do_ctype.c b/strings/do_ctype.c index a624638971fc..bd748ee42c06 100644 --- a/strings/do_ctype.c +++ b/strings/do_ctype.c @@ -71,8 +71,8 @@ char *argv[]; /* Read options */ void get_options(argc,argv) -register int *argc; -register char **argv[]; +int *argc; +char **argv[]; { int help,version; char *pos,*progname; @@ -126,8 +126,8 @@ register char **argv[]; void init_case_convert() { - reg1 int16 i; - reg2 uchar *higher_pos,*lower_pos; + int16 i; + uchar *higher_pos,*lower_pos; DBUG_ENTER("init_case_convert"); for (i=0 ; i <= MAX_CHAR_OK ; i++) diff --git a/strings/dtoa.c b/strings/dtoa.c index a7e9693f2841..9083c91df99c 100644 --- a/strings/dtoa.c +++ b/strings/dtoa.c @@ -827,9 +827,9 @@ static Bigint *s2b(const char *s, int nd0, int nd, ULong y9, Stack_alloc *alloc) } -static int hi0bits(register ULong x) +static int hi0bits(ULong x) { - register int k= 0; + int k= 0; if (!(x & 0xffff0000)) { @@ -863,8 +863,8 @@ static int hi0bits(register ULong x) static int lo0bits(ULong *y) { - register int k; - register ULong x= *y; + int k; + ULong x= *y; if (x & 7) { @@ -1182,7 +1182,7 @@ static Bigint *diff(Bigint *a, Bigint *b, Stack_alloc *alloc) static double ulp(U *x) { - register Long L; + Long L; U u; L= (word0(x) & Exp_mask) - (P - 1)*Exp_msk1; diff --git a/strings/int2str.c b/strings/int2str.c index 73a0484e2bcf..3661ecdfc371 100644 --- a/strings/int2str.c +++ b/strings/int2str.c @@ -50,11 +50,11 @@ char _dig_vec_lower[] = */ char * -int2str(register long int val, register char *dst, register int radix, +int2str(long int val, char *dst, int radix, int upcase) { char buffer[65]; - register char *p; + char *p; long int new_val; char *dig_vec= upcase ? _dig_vec_upper : _dig_vec_lower; ulong uval= (ulong) val; @@ -133,7 +133,7 @@ int2str(register long int val, register char *dst, register int radix, char *int10_to_str(long int val,char *dst,int radix) { char buffer[65]; - register char *p; + char *p; long int new_val; unsigned long int uval = (unsigned long int) val; diff --git a/strings/is_prefix.c b/strings/is_prefix.c index 05ca82844f80..885ed3d42062 100644 --- a/strings/is_prefix.c +++ b/strings/is_prefix.c @@ -25,7 +25,7 @@ #include #include "m_string.h" -int is_prefix(register const char *s, register const char *t) +int is_prefix(const char *s, const char *t) { while (*t) if (*s++ != *t++) return 0; diff --git a/strings/longlong2str.c b/strings/longlong2str.c index 18bc1daa0ba2..2867e0becd1e 100644 --- a/strings/longlong2str.c +++ b/strings/longlong2str.c @@ -50,7 +50,7 @@ char *ll2str(longlong val,char *dst,int radix, int upcase) { char buffer[65]; - register char *p; + char *p; long long_val; char *dig_vec= upcase ? _dig_vec_upper : _dig_vec_lower; ulonglong uval= (ulonglong) val; @@ -101,7 +101,7 @@ char *ll2str(longlong val,char *dst,int radix, int upcase) char *longlong10_to_str(longlong val,char *dst,int radix) { char buffer[65]; - register char *p; + char *p; long long_val; ulonglong uval= (ulonglong) val; diff --git a/strings/my_vsnprintf.c b/strings/my_vsnprintf.c index 8311340daacc..a266cd3a92f0 100644 --- a/strings/my_vsnprintf.c +++ b/strings/my_vsnprintf.c @@ -603,7 +603,7 @@ size_t my_vsnprintf_ex(const CHARSET_INFO *cs, char *to, size_t n, if (*fmt == 's') /* String parameter */ { - reg2 char *par= va_arg(ap, char *); + char *par= va_arg(ap, char *); to= process_str_arg(cs, to, end, width, par, print_type); continue; } @@ -639,7 +639,7 @@ size_t my_vsnprintf_ex(const CHARSET_INFO *cs, char *to, size_t n, } else if (*fmt == 'c') /* Character parameter */ { - register int larg; + int larg; if (to == end) break; larg = va_arg(ap, int); diff --git a/strings/str2int.c b/strings/str2int.c index 6dfa64a2dbed..750c7040683c 100644 --- a/strings/str2int.c +++ b/strings/str2int.c @@ -49,7 +49,7 @@ X >= 'a' && X <= 'z' ? X-'a'+10 :\ '\177') -char *str2int(register const char *src, register int radix, long int lower, +char *str2int(const char *src, int radix, long int lower, long int upper, long int *val) { int sign; /* is number negative (+1) or positive (-1) */ @@ -57,7 +57,7 @@ char *str2int(register const char *src, register int radix, long int lower, long limit; /* "largest" possible valid input */ long scale; /* the amount to multiply next digit by */ long sofar; /* the running value */ - register int d; /* (negative of) next digit */ + int d; /* (negative of) next digit */ char *start; int digits[32]; /* Room for numbers */ diff --git a/strings/strappend.c b/strings/strappend.c index 469c03e9dc75..edafdf8daadd 100644 --- a/strings/strappend.c +++ b/strings/strappend.c @@ -28,9 +28,9 @@ #include "m_string.h" -void strappend(register char *s, size_t len, pchar fill) +void strappend(char *s, size_t len, pchar fill) { - register char *endpos; + char *endpos; endpos = s+len; while (*s++); diff --git a/strings/strcend.c b/strings/strcend.c index 76d40dce0f5d..4becf9bc32f4 100644 --- a/strings/strcend.c +++ b/strings/strcend.c @@ -25,7 +25,7 @@ #include #include "m_string.h" -char *strcend(register const char *s, register pchar c) +char *strcend(const char *s, pchar c) { for (;;) { diff --git a/strings/strcont.c b/strings/strcont.c index f3baf591d82e..554d89c5ec96 100644 --- a/strings/strcont.c +++ b/strings/strcont.c @@ -28,9 +28,9 @@ #include #include "m_string.h" -char * strcont(reg1 const char *str,reg2 const char *set) +char * strcont(const char *str, const char *set) { - reg3 char * start = (char *) set; + char * start = (char *) set; while (*str) { diff --git a/strings/strend.c b/strings/strend.c index 257ffe9b425e..d29048a57fc7 100644 --- a/strings/strend.c +++ b/strings/strend.c @@ -29,7 +29,7 @@ #include #include "m_string.h" -char *strend(register const char *s) +char *strend(const char *s) { while (*s++); return (char*) (s-1); diff --git a/strings/strmake.c b/strings/strmake.c index 5a062e4df4fd..605d05a3954c 100644 --- a/strings/strmake.c +++ b/strings/strmake.c @@ -28,7 +28,7 @@ #include #include "m_string.h" -char *strmake(register char *dst, register const char *src, size_t length) +char *strmake(char *dst, const char *src, size_t length) { #ifdef EXTRA_DEBUG /* diff --git a/strings/strmov.c b/strings/strmov.c index 84dd358c34e7..21f53ecb08f2 100644 --- a/strings/strmov.c +++ b/strings/strmov.c @@ -29,7 +29,7 @@ #define strmov strmov_overlapp #endif -char *strmov(register char *dst, register const char *src) +char *strmov(char *dst, const char *src) { while ((*dst++ = *src++)) ; return dst-1; diff --git a/strings/strnlen.c b/strings/strnlen.c index 162cc9768f3f..ab2bf42b039d 100644 --- a/strings/strnlen.c +++ b/strings/strnlen.c @@ -26,7 +26,7 @@ #ifndef HAVE_STRNLEN -size_t strnlen(register const char *s, register size_t maxlen) +size_t strnlen(const char *s, size_t maxlen) { const char *end= (const char *)memchr(s, '\0', maxlen); return end ? (size_t) (end - s) : maxlen; diff --git a/strings/strnmov.c b/strings/strnmov.c index 19f752fa93bd..dd10749e97bd 100644 --- a/strings/strnmov.c +++ b/strings/strnmov.c @@ -24,7 +24,7 @@ #include #include "m_string.h" -char *strnmov(register char *dst, register const char *src, size_t n) +char *strnmov(char *dst, const char *src, size_t n) { while (n-- != 0) { if (!(*dst++ = *src++)) { diff --git a/zlib/crc32.c b/zlib/crc32.c index f658a9ef55ee..5bbf9c6d4b85 100644 --- a/zlib/crc32.c +++ b/zlib/crc32.c @@ -264,8 +264,8 @@ local unsigned long crc32_little(crc, buf, len) const unsigned char FAR *buf; unsigned len; { - register u4 c; - register const u4 FAR *buf4; + u4 c; + const u4 FAR *buf4; c = (u4)crc; c = ~c; @@ -304,8 +304,8 @@ local unsigned long crc32_big(crc, buf, len) const unsigned char FAR *buf; unsigned len; { - register u4 c; - register const u4 FAR *buf4; + u4 c; + const u4 FAR *buf4; c = REV((u4)crc); c = ~c; diff --git a/zlib/deflate.c b/zlib/deflate.c index 29ce1f64a57a..b00bdca88894 100644 --- a/zlib/deflate.c +++ b/zlib/deflate.c @@ -1029,9 +1029,9 @@ local uInt longest_match(s, cur_match) IPos cur_match; /* current match */ { unsigned chain_length = s->max_chain_length;/* max hash chain length */ - register Bytef *scan = s->window + s->strstart; /* current string */ - register Bytef *match; /* matched string */ - register int len; /* length of current match */ + Bytef *scan = s->window + s->strstart; /* current string */ + Bytef *match; /* matched string */ + int len; /* length of current match */ int best_len = s->prev_length; /* best match length so far */ int nice_match = s->nice_match; /* stop if match long enough */ IPos limit = s->strstart > (IPos)MAX_DIST(s) ? @@ -1046,13 +1046,13 @@ local uInt longest_match(s, cur_match) /* Compare two bytes at a time. Note: this is not always beneficial. * Try with and without -DUNALIGNED_OK to check. */ - register Bytef *strend = s->window + s->strstart + MAX_MATCH - 1; - register ush scan_start = *(ushf*)scan; - register ush scan_end = *(ushf*)(scan+best_len-1); + Bytef *strend = s->window + s->strstart + MAX_MATCH - 1; + ush scan_start = *(ushf*)scan; + ush scan_end = *(ushf*)(scan+best_len-1); #else - register Bytef *strend = s->window + s->strstart + MAX_MATCH; - register Byte scan_end1 = scan[best_len-1]; - register Byte scan_end = scan[best_len]; + Bytef *strend = s->window + s->strstart + MAX_MATCH; + Byte scan_end1 = scan[best_len-1]; + Byte scan_end = scan[best_len]; #endif /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16. @@ -1176,10 +1176,10 @@ local uInt longest_match_fast(s, cur_match) deflate_state *s; IPos cur_match; /* current match */ { - register Bytef *scan = s->window + s->strstart; /* current string */ - register Bytef *match; /* matched string */ - register int len; /* length of current match */ - register Bytef *strend = s->window + s->strstart + MAX_MATCH; + Bytef *scan = s->window + s->strstart; /* current string */ + Bytef *match; /* matched string */ + int len; /* length of current match */ + Bytef *strend = s->window + s->strstart + MAX_MATCH; /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16. * It is easy to get rid of this optimization if necessary. @@ -1266,8 +1266,8 @@ local void check_match(s, start, match, length) local void fill_window(s) deflate_state *s; { - register unsigned n, m; - register Posf *p; + unsigned n, m; + Posf *p; unsigned more; /* Amount of free space at the end of the window. */ uInt wsize = s->w_size; diff --git a/zlib/trees.c b/zlib/trees.c index 395e4e16814e..78024e8d4cc0 100644 --- a/zlib/trees.c +++ b/zlib/trees.c @@ -1147,7 +1147,7 @@ local unsigned bi_reverse(code, len) unsigned code; /* the value to invert */ int len; /* its bit length */ { - register unsigned res = 0; + unsigned res = 0; do { res |= code & 1; code >>= 1, res <<= 1; From 41c71c4457ebea4360ad6c85042e6a147e4813a4 Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Tue, 13 Mar 2018 10:44:03 -0700 Subject: [PATCH 0658/1221] TDB-137 : TokuDB 5.6 missing MRR tests - TokuDB 5.6 supports the Multi-Range Read optimization but has no tests to verify it. This adds the basic MRR test taken from mysql-test/t/inodb_mrr.test with some minor modifications. --- mysql-test/suite/tokudb/r/tokudb_mrr.result | 706 ++++++++++++++++++++ mysql-test/suite/tokudb/t/tokudb_mrr.test | 89 +++ 2 files changed, 795 insertions(+) create mode 100644 mysql-test/suite/tokudb/r/tokudb_mrr.result create mode 100644 mysql-test/suite/tokudb/t/tokudb_mrr.test diff --git a/mysql-test/suite/tokudb/r/tokudb_mrr.result b/mysql-test/suite/tokudb/r/tokudb_mrr.result new file mode 100644 index 000000000000..9eb0c2f5e348 --- /dev/null +++ b/mysql-test/suite/tokudb/r/tokudb_mrr.result @@ -0,0 +1,706 @@ +set optimizer_switch='mrr=on,mrr_cost_based=off'; +set default_storage_engine=TokuDB; +create table t1(a int); +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +insert into t1 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9); +create table t2(a int); +insert into t2 select A.a + 10*(B.a + 10*C.a) from t1 A, t1 B, t1 C; +create table t3 ( +a char(8) not null, b char(8) not null, filler char(200), +key(a) +); +insert into t3 select @a:=concat('c-', 1000+ A.a, '=w'), @a, 'filler' from t2 A; +insert into t3 select concat('c-', 1000+A.a, '=w'), concat('c-', 2000+A.a, '=w'), +'filler-1' from t2 A; +insert into t3 select concat('c-', 1000+A.a, '=w'), concat('c-', 3000+A.a, '=w'), +'filler-2' from t2 A; +select a,filler from t3 where a >= 'c-9011=w'; +a filler +select a,filler from t3 where a >= 'c-1011=w' and a <= 'c-1015=w'; +a filler +c-1011=w filler +c-1011=w filler-1 +c-1011=w filler-2 +c-1012=w filler +c-1012=w filler-1 +c-1012=w filler-2 +c-1013=w filler +c-1013=w filler-1 +c-1013=w filler-2 +c-1014=w filler +c-1014=w filler-1 +c-1014=w filler-2 +c-1015=w filler +c-1015=w filler-1 +c-1015=w filler-2 +select a,filler from t3 where (a>='c-1011=w' and a <= 'c-1013=w') or +(a>='c-1014=w' and a <= 'c-1015=w'); +a filler +c-1011=w filler +c-1011=w filler-1 +c-1011=w filler-2 +c-1012=w filler +c-1012=w filler-1 +c-1012=w filler-2 +c-1013=w filler +c-1013=w filler-1 +c-1013=w filler-2 +c-1014=w filler +c-1014=w filler-1 +c-1014=w filler-2 +c-1015=w filler +c-1015=w filler-1 +c-1015=w filler-2 +insert into t3 values ('c-1013=z', 'c-1013=z', 'err'); +insert into t3 values ('a-1014=w', 'a-1014=w', 'err'); +select a,filler from t3 where (a>='c-1011=w' and a <= 'c-1013=w') or +(a>='c-1014=w' and a <= 'c-1015=w'); +a filler +c-1011=w filler +c-1011=w filler-1 +c-1011=w filler-2 +c-1012=w filler +c-1012=w filler-1 +c-1012=w filler-2 +c-1013=w filler +c-1013=w filler-1 +c-1013=w filler-2 +c-1014=w filler +c-1014=w filler-1 +c-1014=w filler-2 +c-1015=w filler +c-1015=w filler-1 +c-1015=w filler-2 +delete from t3 where b in ('c-1013=z', 'a-1014=w'); +select a,filler from t3 where a='c-1011=w' or a='c-1012=w' or a='c-1013=w' or +a='c-1014=w' or a='c-1015=w'; +a filler +c-1011=w filler +c-1011=w filler-1 +c-1011=w filler-2 +c-1012=w filler +c-1012=w filler-1 +c-1012=w filler-2 +c-1013=w filler +c-1013=w filler-1 +c-1013=w filler-2 +c-1014=w filler +c-1014=w filler-1 +c-1014=w filler-2 +c-1015=w filler +c-1015=w filler-1 +c-1015=w filler-2 +insert into t3 values ('c-1013=w', 'del-me', 'inserted'); +select a,filler from t3 where a='c-1011=w' or a='c-1012=w' or a='c-1013=w' or +a='c-1014=w' or a='c-1015=w'; +a filler +c-1011=w filler +c-1011=w filler-1 +c-1011=w filler-2 +c-1012=w filler +c-1012=w filler-1 +c-1012=w filler-2 +c-1013=w filler +c-1013=w filler-1 +c-1013=w filler-2 +c-1013=w inserted +c-1014=w filler +c-1014=w filler-1 +c-1014=w filler-2 +c-1015=w filler +c-1015=w filler-1 +c-1015=w filler-2 +delete from t3 where b='del-me'; +alter table t3 add primary key(b); +select b,filler from t3 where (b>='c-1011=w' and b<= 'c-1018=w') or +b IN ('c-1019=w', 'c-1020=w', 'c-1021=w', +'c-1022=w', 'c-1023=w', 'c-1024=w'); +b filler +c-1011=w filler +c-1012=w filler +c-1013=w filler +c-1014=w filler +c-1015=w filler +c-1016=w filler +c-1017=w filler +c-1018=w filler +c-1019=w filler +c-1020=w filler +c-1021=w filler +c-1022=w filler +c-1023=w filler +c-1024=w filler +select b,filler from t3 where (b>='c-1011=w' and b<= 'c-1020=w') or +b IN ('c-1021=w', 'c-1022=w', 'c-1023=w'); +b filler +c-1011=w filler +c-1012=w filler +c-1013=w filler +c-1014=w filler +c-1015=w filler +c-1016=w filler +c-1017=w filler +c-1018=w filler +c-1019=w filler +c-1020=w filler +c-1021=w filler +c-1022=w filler +c-1023=w filler +select b,filler from t3 where (b>='c-1011=w' and b<= 'c-1018=w') or +b IN ('c-1019=w', 'c-1020=w') or +(b>='c-1021=w' and b<= 'c-1023=w'); +b filler +c-1011=w filler +c-1012=w filler +c-1013=w filler +c-1014=w filler +c-1015=w filler +c-1016=w filler +c-1017=w filler +c-1018=w filler +c-1019=w filler +c-1020=w filler +c-1021=w filler +c-1022=w filler +c-1023=w filler +create table t4 (a varchar(10), b int, c char(10), filler char(200), +key idx1 (a, b, c)); +insert into t4 (filler) select concat('NULL-', 15-a) from t2 order by a limit 15; +insert into t4 (a,b,c,filler) +select 'b-1',NULL,'c-1', concat('NULL-', 15-a) from t2 order by a limit 15; +insert into t4 (a,b,c,filler) +select 'b-1',NULL,'c-222', concat('NULL-', 15-a) from t2 order by a limit 15; +insert into t4 (a,b,c,filler) +select 'bb-1',NULL,'cc-2', concat('NULL-', 15-a) from t2 order by a limit 15; +insert into t4 (a,b,c,filler) +select 'zz-1',NULL,'cc-2', 'filler-data' from t2 order by a limit 500; +explain +select * from t4 where a IS NULL and b IS NULL and (c IS NULL or c='no-such-row1' + or c='no-such-row2'); +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t4 range idx1 idx1 29 NULL 16 Using where; Using MRR +select * from t4 where a IS NULL and b IS NULL and (c IS NULL or c='no-such-row1' + or c='no-such-row2'); +a b c filler +NULL NULL NULL NULL-15 +NULL NULL NULL NULL-14 +NULL NULL NULL NULL-13 +NULL NULL NULL NULL-12 +NULL NULL NULL NULL-11 +NULL NULL NULL NULL-10 +NULL NULL NULL NULL-9 +NULL NULL NULL NULL-8 +NULL NULL NULL NULL-7 +NULL NULL NULL NULL-6 +NULL NULL NULL NULL-5 +NULL NULL NULL NULL-4 +NULL NULL NULL NULL-3 +NULL NULL NULL NULL-2 +NULL NULL NULL NULL-1 +explain +select * from t4 where (a ='b-1' or a='bb-1') and b IS NULL and (c='c-1' or c='cc-2'); +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t4 range idx1 idx1 29 NULL 32 Using where; Using MRR +select * from t4 where (a ='b-1' or a='bb-1') and b IS NULL and (c='c-1' or c='cc-2'); +a b c filler +b-1 NULL c-1 NULL-15 +b-1 NULL c-1 NULL-14 +b-1 NULL c-1 NULL-13 +b-1 NULL c-1 NULL-12 +b-1 NULL c-1 NULL-11 +b-1 NULL c-1 NULL-10 +b-1 NULL c-1 NULL-9 +b-1 NULL c-1 NULL-8 +b-1 NULL c-1 NULL-7 +b-1 NULL c-1 NULL-6 +b-1 NULL c-1 NULL-5 +b-1 NULL c-1 NULL-4 +b-1 NULL c-1 NULL-3 +b-1 NULL c-1 NULL-2 +b-1 NULL c-1 NULL-1 +bb-1 NULL cc-2 NULL-15 +bb-1 NULL cc-2 NULL-14 +bb-1 NULL cc-2 NULL-13 +bb-1 NULL cc-2 NULL-12 +bb-1 NULL cc-2 NULL-11 +bb-1 NULL cc-2 NULL-10 +bb-1 NULL cc-2 NULL-9 +bb-1 NULL cc-2 NULL-8 +bb-1 NULL cc-2 NULL-7 +bb-1 NULL cc-2 NULL-6 +bb-1 NULL cc-2 NULL-5 +bb-1 NULL cc-2 NULL-4 +bb-1 NULL cc-2 NULL-3 +bb-1 NULL cc-2 NULL-2 +bb-1 NULL cc-2 NULL-1 +select * from t4 ignore index(idx1) where (a ='b-1' or a='bb-1') and b IS NULL and (c='c-1' or c='cc-2'); +a b c filler +b-1 NULL c-1 NULL-15 +b-1 NULL c-1 NULL-14 +b-1 NULL c-1 NULL-13 +b-1 NULL c-1 NULL-12 +b-1 NULL c-1 NULL-11 +b-1 NULL c-1 NULL-10 +b-1 NULL c-1 NULL-9 +b-1 NULL c-1 NULL-8 +b-1 NULL c-1 NULL-7 +b-1 NULL c-1 NULL-6 +b-1 NULL c-1 NULL-5 +b-1 NULL c-1 NULL-4 +b-1 NULL c-1 NULL-3 +b-1 NULL c-1 NULL-2 +b-1 NULL c-1 NULL-1 +bb-1 NULL cc-2 NULL-15 +bb-1 NULL cc-2 NULL-14 +bb-1 NULL cc-2 NULL-13 +bb-1 NULL cc-2 NULL-12 +bb-1 NULL cc-2 NULL-11 +bb-1 NULL cc-2 NULL-10 +bb-1 NULL cc-2 NULL-9 +bb-1 NULL cc-2 NULL-8 +bb-1 NULL cc-2 NULL-7 +bb-1 NULL cc-2 NULL-6 +bb-1 NULL cc-2 NULL-5 +bb-1 NULL cc-2 NULL-4 +bb-1 NULL cc-2 NULL-3 +bb-1 NULL cc-2 NULL-2 +bb-1 NULL cc-2 NULL-1 +drop table t1, t2, t3, t4; +create table t1 (a int, b int not null,unique key (a,b),index(b)); +insert ignore into t1 values (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(null,7),(9,9),(8,8),(7,7),(null,9),(null,9),(6,6); +create table t2 like t1; +insert into t2 select * from t1; +alter table t1 modify b blob not null, add c int not null, drop key a, add unique key (a,b(20),c), drop key b, add key (b(10)); +select * from t1 where a is null; +a b c +NULL 7 0 +NULL 9 0 +NULL 9 0 +select * from t1 where (a is null or a > 0 and a < 3) and b > 7 limit 3; +a b c +NULL 9 0 +NULL 9 0 +select * from t1 where a is null and b=9 or a is null and b=7 limit 3; +a b c +NULL 7 0 +NULL 9 0 +NULL 9 0 +drop table t1, t2; +CREATE TABLE t1 ( +ID int(10) unsigned NOT NULL AUTO_INCREMENT, +col1 int(10) unsigned DEFAULT NULL, +key1 int(10) unsigned NOT NULL DEFAULT '0', +key2 int(10) unsigned DEFAULT NULL, +text1 text, +text2 text, +col2 smallint(6) DEFAULT '100', +col3 enum('headers','bodyandsubject') NOT NULL DEFAULT 'bodyandsubject', +col4 tinyint(3) unsigned NOT NULL DEFAULT '0', +PRIMARY KEY (ID), +KEY (key1), +KEY (key2) +) AUTO_INCREMENT=6 DEFAULT CHARSET=utf8; +INSERT INTO t1 VALUES +(1,NULL,1130,NULL,'Hello',NULL,100,'bodyandsubject',0), +(2,NULL,1130,NULL,'bye',NULL,100,'bodyandsubject',0), +(3,NULL,1130,NULL,'red',NULL,100,'bodyandsubject',0), +(4,NULL,1130,NULL,'yellow',NULL,100,'bodyandsubject',0), +(5,NULL,1130,NULL,'blue',NULL,100,'bodyandsubject',0); +select * FROM t1 WHERE key1=1130 AND col1 IS NULL ORDER BY text1; +ID col1 key1 key2 text1 text2 col2 col3 col4 +5 NULL 1130 NULL blue NULL 100 bodyandsubject 0 +2 NULL 1130 NULL bye NULL 100 bodyandsubject 0 +1 NULL 1130 NULL Hello NULL 100 bodyandsubject 0 +3 NULL 1130 NULL red NULL 100 bodyandsubject 0 +4 NULL 1130 NULL yellow NULL 100 bodyandsubject 0 +drop table t1; + +BUG#37851: Crash in test_if_skip_sort_order tab->select is zero + +CREATE TABLE t1 ( +pk int(11) NOT NULL AUTO_INCREMENT, +PRIMARY KEY (pk) +); +INSERT INTO t1 VALUES (1); +CREATE TABLE t2 ( +pk int(11) NOT NULL AUTO_INCREMENT, +int_key int(11) DEFAULT NULL, +PRIMARY KEY (pk), +KEY int_key (int_key) +); +INSERT INTO t2 VALUES (1,1),(2,6),(3,0); +EXPLAIN EXTENDED +SELECT MIN(t1.pk) +FROM t1 WHERE EXISTS ( +SELECT t2.pk +FROM t2 +WHERE t2.int_key IS NULL +GROUP BY t2.pk +); +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 +2 SUBQUERY t2 ref int_key int_key 5 const 1 100.00 Using where; Using index +Warnings: +Note 1003 /* select#1 */ select min(`test`.`t1`.`pk`) AS `MIN(t1.pk)` from `test`.`t1` where 0 +DROP TABLE t1, t2; +# +# BUG#42048 Discrepancy between MyISAM and Maria's ICP implementation +# +create table t0 (a int); +insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9); +create table t1 (a int, b char(20), filler char(200), key(a,b(10))); +insert into t1 select A.a + 10*(B.a + 10*C.a), 'bbb','filler' from t0 A, t0 B, t0 C; +update t1 set b=repeat(char(65+a), 20) where a < 25; +This must show range + using index condition: +explain select * from t1 where a < 10 and b = repeat(char(65+a), 20); +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 range a a 5 NULL x Using where +select * from t1 where a < 10 and b = repeat(char(65+a), 20); +a b filler +0 AAAAAAAAAAAAAAAAAAAA filler +1 BBBBBBBBBBBBBBBBBBBB filler +2 CCCCCCCCCCCCCCCCCCCC filler +3 DDDDDDDDDDDDDDDDDDDD filler +4 EEEEEEEEEEEEEEEEEEEE filler +5 FFFFFFFFFFFFFFFFFFFF filler +6 GGGGGGGGGGGGGGGGGGGG filler +7 HHHHHHHHHHHHHHHHHHHH filler +8 IIIIIIIIIIIIIIIIIIII filler +9 JJJJJJJJJJJJJJJJJJJJ filler +drop table t0,t1; +# +# BUG#41136: ORDER BY + range access: EXPLAIN shows "Using MRR" while MRR is actually not used +# +create table t0 (a int); +insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9); +create table t1 (a int, b int, key(a)); +insert into t1 select A.a + 10 *(B.a + 10*C.a), A.a + 10 *(B.a + 10*C.a) from t0 A, t0 B, t0 C; +This mustn't show "Using MRR": +explain select * from t1 where a < 20 order by a; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 range a a 5 NULL 20 Using where +drop table t0, t1; +set @read_rnd_buffer_size_save= @@read_rnd_buffer_size; +set read_rnd_buffer_size=64; +create table t1(a int); +insert into t1 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9); +create table t2(a char(8), b char(8), c char(8), filler char(100), key k1(a,b,c) ); +insert into t2 select +concat('a-', 1000 + A.a, '-a'), +concat('b-', 1000 + B.a, '-b'), +concat('c-', 1000 + C.a, '-c'), +'filler' +from t1 A, t1 B, t1 C; +EXPLAIN select count(length(a) + length(filler)) +from t2 force index (k1) +where a>='a-1000-a' and a <'a-1001-a'; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t2 range k1 k1 9 NULL 100 Using where; Using MRR +select count(length(a) + length(filler)) +from t2 force index (k1) +where a>='a-1000-a' and a <'a-1001-a'; +count(length(a) + length(filler)) +100 +drop table t2; +create table t2 (a char(100), b char(100), c char(100), d int, +filler char(10), key(d), primary key (a,b,c)); +insert into t2 select A.a, B.a, B.a, A.a, 'filler' from t1 A, t1 B; +explain select * from t2 force index (d) where d < 10; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t2 range d d 5 NULL # Using where +drop table t2; +drop table t1; +set @@read_rnd_buffer_size= @read_rnd_buffer_size_save; +create table t1 (f1 int not null, f2 int not null,f3 int not null, f4 char(1), primary key (f1,f2), key ix(f3)); +select * from t1 where (f3>=5 and f3<=10) or (f3>=1 and f3<=4); +f1 f2 f3 f4 +1 1 1 A +10 10 10 A +2 2 2 A +3 3 3 A +4 4 4 A +5 5 5 A +6 6 6 A +7 7 7 A +8 8 8 A +9 9 9 A +drop table t1; + +BUG#37977: Wrong result returned on GROUP BY + OR + Innodb + +CREATE TABLE t1 ( +`pk` int(11) NOT NULL AUTO_INCREMENT, +`int_nokey` int(11) NOT NULL, +`int_key` int(11) NOT NULL, +`date_key` date NOT NULL, +`date_nokey` date NOT NULL, +`time_key` time NOT NULL, +`time_nokey` time NOT NULL, +`datetime_key` datetime NOT NULL, +`datetime_nokey` datetime NOT NULL, +`varchar_key` varchar(5) DEFAULT NULL, +`varchar_nokey` varchar(5) DEFAULT NULL, +PRIMARY KEY (`pk`), +KEY `int_key` (`int_key`), +KEY `date_key` (`date_key`), +KEY `time_key` (`time_key`), +KEY `datetime_key` (`datetime_key`), +KEY `varchar_key` (`varchar_key`) +); +INSERT INTO t1 VALUES +(1,5,5,'2009-10-16','2009-10-16','09:28:15','09:28:15','2007-09-14 05:34:08','2007-09-14 05:34:08','qk','qk'), +(2,6,6,'0000-00-00','0000-00-00','23:06:39','23:06:39','0000-00-00 00:00:00','0000-00-00 00:00:00','j','j'), +(3,10,10,'2000-12-18','2000-12-18','22:16:19','22:16:19','2006-11-04 15:42:50','2006-11-04 15:42:50','aew','aew'), +(4,0,0,'2001-09-18','2001-09-18','00:00:00','00:00:00','2004-03-23 13:23:35','2004-03-23 13:23:35',NULL,NULL), +(5,6,6,'2007-08-16','2007-08-16','22:13:38','22:13:38','2004-08-19 11:01:28','2004-08-19 11:01:28','qu','qu'); +select pk from t1 WHERE `varchar_key` > 'kr' group by pk; +pk +1 +5 +select pk from t1 WHERE `int_nokey` IS NULL OR `varchar_key` > 'kr' group by pk; +pk +1 +5 +drop table t1; +# +# BUG#39447: Error with NOT NULL condition and LIMIT 1 +# +CREATE TABLE t1 ( +id int(11) NOT NULL, +parent_id int(11) DEFAULT NULL, +name varchar(10) DEFAULT NULL, +PRIMARY KEY (id), +KEY ind_parent_id (parent_id) +); +insert into t1 (id, parent_id, name) values +(10,NULL,'A'), +(20,10,'B'), +(30,10,'C'), +(40,NULL,'D'), +(50,40,'E'), +(60,40,'F'), +(70,NULL,'J'); +SELECT id FROM t1 WHERE parent_id IS NOT NULL ORDER BY id DESC LIMIT 1; +id +60 +This must show type=index, extra=Using where +explain SELECT * FROM t1 WHERE parent_id IS NOT NULL ORDER BY id DESC LIMIT 1; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 index ind_parent_id PRIMARY 4 NULL 1 Using where +SELECT * FROM t1 WHERE parent_id IS NOT NULL ORDER BY id DESC LIMIT 1; +id parent_id name +60 40 F +drop table t1; +# +# Bug#50381 "Assertion failing in handler.h:1283: +# void COST_VECT::add_io(double, double)" +# +CREATE TABLE t1 ( +c1 INT NOT NULL, +c2 VARCHAR(1) DEFAULT NULL, +PRIMARY KEY (c1) +); +CREATE TABLE t2 ( +c1 INT NOT NULL, +c2 VARCHAR(1) DEFAULT NULL, +PRIMARY KEY (c1) +); +INSERT INTO t2 VALUES (10,'v'); +INSERT INTO t2 VALUES (11,'r'); +SELECT t1.c2 +FROM t2 STRAIGHT_JOIN t1 ON t1.c1 < t2.c1; +c2 +DROP TABLE t1, t2; +# +# Bug#58463: Error Can't find record on SELECT with JOIN and ORDER BY +# +CREATE TABLE t1 ( +pk INT NOT NULL, +PRIMARY KEY (pk) +) ENGINE=MyISAM; +INSERT INTO t1 VALUES (2); +CREATE TABLE t2 ( +pk INT NOT NULL, +i1 INT NOT NULL, +i2 INT NOT NULL, +c1 VARCHAR(1024) CHARACTER SET utf8, +PRIMARY KEY (pk), +KEY k1 (i1) +); +INSERT INTO t2 VALUES (3, 9, 1, NULL); +EXPLAIN SELECT i1 +FROM t1 LEFT JOIN t2 ON t1.pk = t2.i2 +WHERE t2.i1 > 5 +AND t2.pk IS NULL +ORDER BY i1; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 system PRIMARY NULL NULL NULL 1 NULL +1 SIMPLE t2 const PRIMARY,k1 PRIMARY 4 const 1 Using where +SELECT i1 +FROM t1 LEFT JOIN t2 ON t1.pk = t2.i2 +WHERE t2.i1 > 5 +AND t2.pk IS NULL +ORDER BY i1; +i1 +DROP TABLE t1, t2; +# +# Bug#12321461: CRASH IN DSMRR_IMPL::DSMRR_INIT ON SELECT STRAIGHT_JOIN +# +set @save_optimizer_switch = @@optimizer_switch; +set optimizer_switch='block_nested_loop=off,batched_key_access=off'; +CREATE TABLE t1 ( +pk INTEGER, +c1 VARCHAR(1) NOT NULL, +PRIMARY KEY (pk) +); +CREATE TABLE t2 ( +c1 VARCHAR(1) NOT NULL +); +INSERT INTO t2 VALUES ('v'), ('c'); +EXPLAIN SELECT STRAIGHT_JOIN t1.c1 +FROM t1 RIGHT OUTER JOIN t2 ON t1.c1 = t2.c1 +WHERE t1.pk > 176; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t2 ALL NULL NULL NULL NULL 2 NULL +1 SIMPLE t1 range PRIMARY PRIMARY 4 NULL 1 Using where +SELECT STRAIGHT_JOIN t1.c1 +FROM t1 RIGHT OUTER JOIN t2 ON t1.c1 = t2.c1 +WHERE t1.pk > 176; +c1 +DROP TABLE t1,t2; +set optimizer_switch= @save_optimizer_switch; +# +# Bug#13249966 MRR: RANDOM ERROR DUE TO UNINITIALIZED RES WITH +# SMALL READ_RND_BUFFER_SIZE +# +set @read_rnd_buffer_size_save= @@read_rnd_buffer_size; +set read_rnd_buffer_size=1; +select @@read_rnd_buffer_size; +@@read_rnd_buffer_size +1 +CREATE TABLE t1 ( +i1 INTEGER NOT NULL, +i2 INTEGER NOT NULL, +KEY (i2) +); +INSERT INTO t1 VALUES (0,1),(1,2),(2,3); +EXPLAIN SELECT i1 +FROM t1 +WHERE i2 > 2; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 range i2 i2 4 NULL 1 Using where +SELECT i1 +FROM t1 +WHERE i2 > 2; +i1 +2 +DROP TABLE t1; +set @@read_rnd_buffer_size= @read_rnd_buffer_size_save; +select @@read_rnd_buffer_size; +@@read_rnd_buffer_size +262144 +# +# Bug 12365385 STRAIGHT_JOIN QUERY QUICKLY EXHAUSTS SYSTEM+VIRT. +# MEMORY LEADING TO SYSTEM CRASH +# +CREATE TABLE ten (a INTEGER); +INSERT INTO ten VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9); +CREATE TABLE t1 ( +pk INTEGER NOT NULL, +i1 INTEGER NOT NULL, +c1 VARCHAR(10) NOT NULL, +PRIMARY KEY (pk) +); +INSERT INTO t1 +SELECT a, 1, 'MySQL' FROM ten; +CREATE TABLE t2 ( +pk INTEGER NOT NULL, +c1 VARCHAR(10) NOT NULL, +c2 varchar(10) NOT NULL, +PRIMARY KEY (pk) +); +INSERT INTO t2 +SELECT a, 'MySQL', 'MySQL' FROM ten; +CREATE TABLE t3 ( +pk INTEGER NOT NULL, +c1 VARCHAR(10) NOT NULL, +PRIMARY KEY (pk) +); +INSERT INTO t3 +SELECT a, 'MySQL' FROM ten; +CREATE TABLE t4 ( +pk int(11) NOT NULL, +c1_key varchar(10) CHARACTER SET utf8 NOT NULL, +c2 varchar(10) NOT NULL, +c3 varchar(10) NOT NULL, +PRIMARY KEY (pk), +KEY k1 (c1_key) +); +CREATE TABLE t5 ( +pk INTEGER NOT NULL, +c1 VARCHAR(10) NOT NULL, +PRIMARY KEY (pk) +); +INSERT INTO t5 +SELECT a, 'MySQL' FROM ten; +EXPLAIN SELECT STRAIGHT_JOIN * +FROM +(t1 LEFT JOIN +(t2 LEFT JOIN +(t3 LEFT OUTER JOIN t4 ON t3.c1 <= t4.c1_key) +ON t2.c1 = t4.c3) +ON t1.c1 = t4.c2) +RIGHT OUTER JOIN t5 ON t2.c2 <= t5.c1 +WHERE t1.i1 = 1; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t5 ALL NULL NULL NULL NULL 10 NULL +1 SIMPLE t1 ALL NULL NULL NULL NULL 10 Using where; Using join buffer (Block Nested Loop) +1 SIMPLE t2 ALL NULL NULL NULL NULL 10 Using where; Using join buffer (Block Nested Loop) +1 SIMPLE t3 ALL NULL NULL NULL NULL 10 Using join buffer (Block Nested Loop) +1 SIMPLE t4 ALL k1 NULL NULL NULL 1 Range checked for each record (index map: 0x2) +SELECT STRAIGHT_JOIN * +FROM +(t1 LEFT JOIN +(t2 LEFT JOIN +(t3 LEFT OUTER JOIN t4 ON t3.c1 <= t4.c1_key) +ON t2.c1 = t4.c3) +ON t1.c1 = t4.c2) +RIGHT OUTER JOIN t5 ON t2.c2 <= t5.c1 +WHERE t1.i1 = 1; +pk i1 c1 pk c1 c2 pk c1 pk c1_key c2 c3 pk c1 +DROP TABLE ten, t1, t2, t3, t4, t5; +# +# Bug#41029 "MRR: SELECT FOR UPDATE fails to lock gaps (InnoDB table)" +# +SET AUTOCOMMIT=0; +CREATE TABLE t1 ( +dummy INT PRIMARY KEY, +a INT UNIQUE, +b INT +) ENGINE=TokuDB; +INSERT INTO t1 VALUES (1,1,1),(3,3,3),(5,5,5); +COMMIT; +SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ; +SELECT @@tx_isolation; +@@tx_isolation +REPEATABLE-READ +START TRANSACTION; +EXPLAIN SELECT * FROM t1 WHERE a >= 2 FOR UPDATE; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 range a a 5 NULL 2 Using where +SELECT * FROM t1 WHERE a >= 2 FOR UPDATE; +dummy a b +3 3 3 +5 5 5 +SET AUTOCOMMIT=0; +SET TOKUDB_LOCK_TIMEOUT=2; +START TRANSACTION; +INSERT INTO t1 VALUES (2,2,2); +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +ROLLBACK; +ROLLBACK; +DROP TABLE t1; diff --git a/mysql-test/suite/tokudb/t/tokudb_mrr.test b/mysql-test/suite/tokudb/t/tokudb_mrr.test new file mode 100644 index 000000000000..b30bc18d7593 --- /dev/null +++ b/mysql-test/suite/tokudb/t/tokudb_mrr.test @@ -0,0 +1,89 @@ +# +# MRR/Tokudb tests, taken from mysqltest/t/innodb_mrr.test +# (Turns off all other 6.0 optimizer switches than MRR) +# + +--source include/have_tokudb.inc +--source include/have_mrr.inc + +set optimizer_switch='mrr=on,mrr_cost_based=off'; + +--disable_query_log +if (`select locate('semijoin', @@optimizer_switch) > 0`) +{ + set optimizer_switch='semijoin=off'; +} +if (`select locate('materialization', @@optimizer_switch) > 0`) +{ + set optimizer_switch='materialization=off'; +} +if (`select locate('index_condition_pushdown', @@optimizer_switch) > 0`) +{ + set optimizer_switch='index_condition_pushdown=off'; +} +--enable_query_log + +set default_storage_engine=TokuDB; + +--source include/mrr_tests.inc + + +# taken from include/mrr_innodb_tests.inc + +--source include/count_sessions.inc + +# MRR tests that are special for InnoDB (and copied for TokuDB) + +--echo # +--echo # Bug#41029 "MRR: SELECT FOR UPDATE fails to lock gaps (InnoDB table)" +--echo # + +# This test verifies that a SELECT FOR UPDATE statement executed in +# REPEATABLE READ isolation will lock the entire read interval by verifying +# that a second transaction trying to update data within this interval will +# be blocked. + +connect (con1,localhost,root,,); +connect (con2,localhost,root,,); + +connection con1; + +SET AUTOCOMMIT=0; + +CREATE TABLE t1 ( + dummy INT PRIMARY KEY, + a INT UNIQUE, + b INT +) ENGINE=TokuDB; + +INSERT INTO t1 VALUES (1,1,1),(3,3,3),(5,5,5); +COMMIT; + +SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ; +SELECT @@tx_isolation; +START TRANSACTION; + +EXPLAIN SELECT * FROM t1 WHERE a >= 2 FOR UPDATE; + +SELECT * FROM t1 WHERE a >= 2 FOR UPDATE; + +connection con2; + +SET AUTOCOMMIT=0; +SET TOKUDB_LOCK_TIMEOUT=2; +START TRANSACTION; + +--error ER_LOCK_WAIT_TIMEOUT +INSERT INTO t1 VALUES (2,2,2); +ROLLBACK; + +connection con1; + +ROLLBACK; +DROP TABLE t1; + +connection default; +disconnect con1; +disconnect con2; + +--source include/wait_until_count_sessions.inc From d3eed07ebe6e24483b84c9ab84ce36d76dc260a4 Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Wed, 14 Mar 2018 16:07:23 -0700 Subject: [PATCH 0659/1221] TDB-128 : Make .frm discovery optional at compile time - Based on idea from "rik prohaska ", make discovery functionality a compile time option to allow easier initial porting to 8.0 - Introduced new macro flag TOKU_INCLUDE_DISCOVER_FRM that when defined, causes all .frm discovery to be compiled in, otherwise it is compiled out. --- storage/tokudb/ha_tokudb.cc | 14 ++++++++++---- storage/tokudb/ha_tokudb.h | 2 ++ storage/tokudb/hatoku_defines.h | 10 +++++++++- storage/tokudb/hatoku_hton.cc | 12 +++++++++--- 4 files changed, 30 insertions(+), 8 deletions(-) diff --git a/storage/tokudb/ha_tokudb.cc b/storage/tokudb/ha_tokudb.cc index 8354a35cb704..19ff978f7650 100644 --- a/storage/tokudb/ha_tokudb.cc +++ b/storage/tokudb/ha_tokudb.cc @@ -1645,7 +1645,8 @@ int ha_tokudb::initialize_share(const char* name, int mode) { goto exit; } -#if WITH_PARTITION_STORAGE_ENGINE +#if defined(TOKU_INCLUDE_DISCOVER_FRM) && TOKU_INCLUDE_DISCOVER_FRM +#if defined(WITH_PARTITION_STORAGE_ENGINE) && WITH_PARTITION_STORAGE_ENGINE // verify frm data for non-partitioned tables if (TOKU_PARTITION_WRITE_FRM_DATA || table->part_info == NULL) { error = verify_frm_data(table->s->path.str, txn); @@ -1661,7 +1662,8 @@ int ha_tokudb::initialize_share(const char* name, int mode) { error = verify_frm_data(table->s->path.str, txn); if (error) goto exit; -#endif +#endif // defined(WITH_PARTITION_STORAGE_ENGINE) && WITH_PARTITION_STORAGE_ENGINE +#endif // defined(TOKU_INCLUDE_DISCOVER_FRM) && TOKU_INCLUDE_DISCOVER_FRM error = initialize_key_and_col_info( @@ -2082,6 +2084,7 @@ int ha_tokudb::write_metadata(DB* db, void* key_data, uint key_size, void* val_d return error; } +#if defined(TOKU_INCLUDE_DISCOVER_FRM) && TOKU_INCLUDE_DISCOVER_FRM int ha_tokudb::write_frm_data(DB* db, DB_TXN* txn, const char* frm_name) { TOKUDB_HANDLER_DBUG_ENTER("%p %p %s", db, txn, frm_name); @@ -2170,6 +2173,7 @@ int ha_tokudb::verify_frm_data(const char* frm_name, DB_TXN* txn) { tokudb::memory::free(stored_frm.data); TOKUDB_HANDLER_DBUG_RETURN(error); } +#endif // defined(TOKU_INCLUDE_DISCOVER_FRM) && TOKU_INCLUDE_DISCOVER_FRM // // Updates status.tokudb with a new max value used for the auto increment column @@ -7339,7 +7343,8 @@ int ha_tokudb::create( goto cleanup; } -#if WITH_PARTITION_STORAGE_ENGINE +#if defined(TOKU_INCLUDE_DISCOVER_FRM) && TOKU_INCLUDE_DISCOVER_FRM +#if defined(WITH_PARTITION_STORAGE_ENGINE) && WITH_PARTITION_STORAGE_ENGINE if (TOKU_PARTITION_WRITE_FRM_DATA || form->part_info == NULL) { error = write_frm_data(status_block, txn, form->s->path.str); if (error) { @@ -7351,7 +7356,8 @@ int ha_tokudb::create( if (error) { goto cleanup; } -#endif +#endif // defined(WITH_PARTITION_STORAGE_ENGINE) && WITH_PARTITION_STORAGE_ENGINE +#endif // defined(TOKU_INCLUDE_DISCOVER_FRM) && TOKU_INCLUDE_DISCOVER_FRM error = allocate_key_and_col_info(form->s, &kc_info); if (error) { diff --git a/storage/tokudb/ha_tokudb.h b/storage/tokudb/ha_tokudb.h index 9c6af2550cdf..3fc39f43f445 100644 --- a/storage/tokudb/ha_tokudb.h +++ b/storage/tokudb/ha_tokudb.h @@ -670,9 +670,11 @@ class ha_tokudb : public handler { int estimate_num_rows(DB* db, uint64_t* num_rows, DB_TXN* txn); bool has_auto_increment_flag(uint* index); +#if defined(TOKU_INCLUDE_DISCOVER_FRM) && TOKU_INCLUDE_DISCOVER_FRM int write_frm_data(DB* db, DB_TXN* txn, const char* frm_name); int verify_frm_data(const char* frm_name, DB_TXN* trans); int remove_frm_data(DB *db, DB_TXN *txn); +#endif // defined(TOKU_INCLUDE_DISCOVER_FRM) && TOKU_INCLUDE_DISCOVER_FRM int write_to_status(DB* db, HA_METADATA_KEY curr_key_data, void* data, uint size, DB_TXN* txn); int remove_from_status(DB* db, HA_METADATA_KEY curr_key_data, DB_TXN* txn); diff --git a/storage/tokudb/hatoku_defines.h b/storage/tokudb/hatoku_defines.h index 05a06ac8142e..d15458940c1b 100644 --- a/storage/tokudb/hatoku_defines.h +++ b/storage/tokudb/hatoku_defines.h @@ -35,7 +35,6 @@ Copyright (c) 2006, 2015, Percona and/or its affiliates. All rights reserved. #include "log.h" #include "sql_class.h" #include "sql_show.h" -#include "discover.h" #include #include "debug_sync.h" @@ -83,6 +82,7 @@ Copyright (c) 2006, 2015, Percona and/or its affiliates. All rights reserved. #define TOKU_INCLUDE_OPTION_STRUCTS 1 #define TOKU_OPTIMIZE_WITH_RECREATE 1 #define TOKU_CLUSTERING_IS_COVERING 1 +#define TOKU_INCLUDE_DISCOVER_FRM 1 #elif 50700 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 50799 // mysql 5.7 with no patches @@ -91,6 +91,7 @@ Copyright (c) 2006, 2015, Percona and/or its affiliates. All rights reserved. #define TOKU_INCLUDE_ALTER_56 1 #define TOKU_INCLUDE_ROW_TYPE_COMPRESSION 0 #define TOKU_PARTITION_WRITE_FRM_DATA 0 +#define TOKU_INCLUDE_DISCOVER_FRM 1 #else #error #endif @@ -117,6 +118,7 @@ Copyright (c) 2006, 2015, Percona and/or its affiliates. All rights reserved. #endif #endif #define TOKU_OPTIMIZE_WITH_RECREATE 1 +#define TOKU_INCLUDE_DISCOVER_FRM 1 #elif 50500 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 50599 // mysql 5.5 and mariadb 5.5 @@ -135,12 +137,18 @@ Copyright (c) 2006, 2015, Percona and/or its affiliates. All rights reserved. #define TOKU_INCLUDE_LOCK_TIMEOUT_QUERY_STRING 1 #endif #define TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL 0 +#define TOKU_INCLUDE_DISCOVER_FRM 1 #else #error #endif +#if defined(TOKU_INCLUDE_DISCOVER_FRM) && TOKU_INCLUDE_DISCOVER_FRM +#include "discover.h" +#endif // defined(TOKU_INCLUDE_DISCOVER_FRM) && TOKU_INCLUDE_DISCOVER_FRM + + #ifdef MARIADB_BASE_VERSION // In MariaDB 5.3, thread progress reporting was introduced. // Only include that functionality if we're using maria 5.3 + diff --git a/storage/tokudb/hatoku_hton.cc b/storage/tokudb/hatoku_hton.cc index 114376f3541a..2eeb57d813d6 100644 --- a/storage/tokudb/hatoku_hton.cc +++ b/storage/tokudb/hatoku_hton.cc @@ -104,6 +104,7 @@ static int tokudb_discover_table_existence( const char* db, const char* name); #endif +#if defined(TOKU_INCLUDE_DISCOVER_FRM) && TOKU_INCLUDE_DISCOVER_FRM static int tokudb_discover( handlerton* hton, THD* thd, @@ -127,6 +128,7 @@ static int tokudb_discover3( char* path, uchar** frmblob, size_t* frmlen); +#endif // defined(TOKU_INCLUDE_DISCOVER_FRM) && TOKU_INCLUDE_DISCOVER_FRM handlerton* tokudb_hton; const char* ha_tokudb_ext = ".tokudb"; @@ -383,11 +385,13 @@ static int tokudb_init_func(void *p) { tokudb_hton->discover_table = tokudb_discover_table; tokudb_hton->discover_table_existence = tokudb_discover_table_existence; #else +#if defined(TOKU_INCLUDE_DISCOVER_FRM) && TOKU_INCLUDE_DISCOVER_FRM tokudb_hton->discover = tokudb_discover; #if defined(MYSQL_HANDLERTON_INCLUDE_DISCOVER2) tokudb_hton->discover2 = tokudb_discover2; -#endif -#endif +#endif // MYSQL_HANDLERTON_INCLUDE_DISCOVER2 +#endif // defined(TOKU_INCLUDE_DISCOVER_FRM) && TOKU_INCLUDE_DISCOVER_FRM +#endif // 100000 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 100099 tokudb_hton->commit = tokudb_commit; tokudb_hton->rollback = tokudb_rollback; #if TOKU_INCLUDE_XA @@ -1221,8 +1225,9 @@ static int tokudb_discover_table_existence( my_free(frmblob); return res != ENOENT; } -#endif +#endif // 100000 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 100099 +#if defined(TOKU_INCLUDE_DISCOVER_FRM) && TOKU_INCLUDE_DISCOVER_FRM static int tokudb_discover( handlerton* hton, THD* thd, @@ -1320,6 +1325,7 @@ static int tokudb_discover3( } TOKUDB_DBUG_RETURN(error); } +#endif // defined(TOKU_INCLUDE_DISCOVER_FRM) && TOKU_INCLUDE_DISCOVER_FRM #define STATPRINT(legend, val) if (legend != NULL && val != NULL) \ From d7ec090d477753c6dba90952e162a115d6a939ad Mon Sep 17 00:00:00 2001 From: Jon Olav Hauglid Date: Thu, 15 Nov 2012 17:48:08 +0100 Subject: [PATCH 0660/1221] Bug#15871989: REMOVE USAGE OF OBSOLETE "REGISTER" KEYWORD This patch removes the usage of the C/C++ keyword "register" and related macros. Based on a patch originally written by Davi Arnaut. (cherry picked from commit 180b7e4165bcee5fd482ce27d3f884bdaa8adb23) (cherry picked from commit 8f1473543d5abdefcb76ef28afc39fe1892fb3b1) --- client/mysql.cc | 4 +- client/mysqlslap.c | 2 +- client/mysqltest.cc | 16 ++-- client/sql_string.cc | 12 +-- dbug/dbug.c | 16 ++-- dbug/dbug_analyze.c | 38 ++++----- dbug/factorial.c | 4 +- dbug/my_main.c | 2 +- extra/replace.c | 18 ++-- extra/yassl/taocrypt/src/des.cpp | 2 +- include/heap.h | 2 +- include/my_compare.h | 4 +- include/myisam.h | 10 +-- mysys/mf_dirname.c | 2 +- mysys/mf_fn_ext.c | 2 +- mysys/mf_format.c | 6 +- mysys/mf_getdate.c | 4 +- mysys/mf_iocache.c | 14 +-- mysys/mf_iocache2.c | 6 +- mysys/mf_keycache.c | 8 +- mysys/mf_pack.c | 10 +-- mysys/mf_qsort.c | 6 +- mysys/mf_soundex.c | 6 +- mysys/mf_wcomp.c | 2 +- mysys/my_alloc.c | 12 +-- mysys/my_compare.c | 4 +- mysys/my_error.c | 2 +- mysys/my_fopen.c | 2 +- mysys/my_getwd.c | 2 +- mysys/my_once.c | 6 +- mysys/ptr_cmp.c | 20 ++--- mysys/queues.c | 12 +-- mysys/testhash.c | 2 +- mysys/typelib.c | 4 +- regex/main.ih | 2 +- regex/regexec.c | 2 +- regex/regexp.c | 118 +++++++++++++------------- regex/regfree.c | 2 +- regex/split.c | 34 ++++---- sql-common/pack.c | 4 +- sql/derror.cc | 2 +- sql/field.cc | 2 +- sql/field.h | 2 +- sql/filesort.cc | 24 +++--- sql/gen_lex_hash.cc | 28 +++--- sql/handler.cc | 2 +- sql/item_cmpfunc.cc | 12 +-- sql/item_func.cc | 4 +- sql/item_strfunc.cc | 14 +-- sql/key.cc | 6 +- sql/lock.cc | 4 +- sql/log.cc | 6 +- sql/mf_iocache.cc | 2 +- sql/password.c | 4 +- sql/records.cc | 2 +- sql/slave.cc | 2 +- sql/sql_acl.cc | 2 +- sql/sql_base.cc | 4 +- sql/sql_class.h | 2 +- sql/sql_db.cc | 2 +- sql/sql_insert.cc | 6 +- sql/sql_lex.cc | 8 +- sql/sql_parse.cc | 4 +- sql/sql_prepare.cc | 2 +- sql/sql_select.cc | 8 +- sql/sql_string.cc | 12 +-- sql/table.cc | 12 +-- sql/uniques.cc | 2 +- sql/unireg.cc | 4 +- storage/heap/_rectest.c | 2 +- storage/heap/heapdef.h | 2 +- storage/heap/hp_block.c | 6 +- storage/heap/hp_close.c | 2 +- storage/heap/hp_create.c | 2 +- storage/heap/hp_delete.c | 4 +- storage/heap/hp_extra.c | 6 +- storage/heap/hp_hash.c | 10 +-- storage/heap/hp_info.c | 2 +- storage/heap/hp_rename.c | 2 +- storage/heap/hp_rrnd.c | 4 +- storage/heap/hp_rsame.c | 2 +- storage/heap/hp_scan.c | 4 +- storage/heap/hp_test2.c | 2 +- storage/innobase/handler/ha_innodb.cc | 2 +- storage/innobase/handler/ha_innodb.h | 2 +- storage/myisam/ft_update.c | 2 +- storage/myisam/ha_myisam.cc | 2 +- storage/myisam/mi_close.c | 2 +- storage/myisam/mi_create.c | 2 +- storage/myisam/mi_dbug.c | 2 +- storage/myisam/mi_delete.c | 12 +-- storage/myisam/mi_dynrec.c | 16 ++-- storage/myisam/mi_info.c | 2 +- storage/myisam/mi_locking.c | 10 +-- storage/myisam/mi_open.c | 4 +- storage/myisam/mi_packrec.c | 28 +++--- storage/myisam/mi_page.c | 10 +-- storage/myisam/mi_range.c | 8 +- storage/myisam/mi_rprev.c | 2 +- storage/myisam/mi_rrnd.c | 2 +- storage/myisam/mi_scan.c | 2 +- storage/myisam/mi_statrec.c | 8 +- storage/myisam/mi_update.c | 4 +- storage/myisam/mi_write.c | 16 ++-- storage/myisam/myisamchk.c | 16 ++-- storage/myisam/myisamdef.h | 8 +- storage/myisam/myisamlog.c | 4 +- storage/myisam/sp_defs.h | 2 +- storage/myisam/sp_key.c | 2 +- storage/myisammrg/ha_myisammrg.cc | 2 +- storage/myisammrg/myrg_info.c | 2 +- storage/myisammrg/myrg_update.c | 2 +- storage/myisammrg/myrg_write.c | 2 +- storage/perfschema/pfs_global.h | 2 +- strings/bchange.c | 2 +- strings/bmove_upp.c | 4 +- strings/ctype-bin.c | 4 +- strings/ctype-mb.c | 28 +++--- strings/ctype-simple.c | 60 ++++++------- strings/ctype-ucs2.c | 52 ++++++------ strings/do_ctype.c | 8 +- strings/dtoa.c | 10 +-- strings/int2str.c | 6 +- strings/is_prefix.c | 2 +- strings/longlong2str.c | 4 +- strings/my_vsnprintf.c | 4 +- strings/str2int.c | 4 +- strings/strappend.c | 4 +- strings/strcend.c | 2 +- strings/strcont.c | 4 +- strings/strend.c | 2 +- strings/strmake.c | 2 +- strings/strmov.c | 2 +- strings/strnlen.c | 2 +- strings/strnmov.c | 2 +- zlib/crc32.c | 8 +- zlib/deflate.c | 30 +++---- zlib/trees.c | 2 +- 138 files changed, 542 insertions(+), 544 deletions(-) diff --git a/client/mysql.cc b/client/mysql.cc index 30da02e79716..d26502577c71 100644 --- a/client/mysql.cc +++ b/client/mysql.cc @@ -2760,7 +2760,7 @@ char *index(const char *s,int c) char *rindex(const char *s,int c) { - reg3 char *t; + char *t; t = NullS; do if (*s == (char) c) t = (char*) s; while (*s++); @@ -2960,7 +2960,7 @@ static int com_help(String *buffer __attribute__((unused)), char *line __attribute__((unused))) { - reg1 int i, j; + int i, j; char * help_arg= strchr(line,' '), buff[32], *end; if (help_arg) { diff --git a/client/mysqlslap.c b/client/mysqlslap.c index 04fc7d25bfb2..800f8eb70b9f 100644 --- a/client/mysqlslap.c +++ b/client/mysqlslap.c @@ -273,7 +273,7 @@ static const char ALPHANUMERICS[]= static long int timedif(struct timeval a, struct timeval b) { - register int us, s; + int us, s; us = a.tv_usec - b.tv_usec; us /= 1000; diff --git a/client/mysqltest.cc b/client/mysqltest.cc index 05fd6d340461..2c3095d905d9 100644 --- a/client/mysqltest.cc +++ b/client/mysqltest.cc @@ -925,8 +925,8 @@ void do_eval(DYNAMIC_STRING *query_eval, const char *query, const char *query_end, my_bool pass_through_escape_chars) { const char *p; - register char c, next_c; - register int escaped = 0; + char c, next_c; + int escaped = 0; VAR *v; DBUG_ENTER("do_eval"); @@ -2101,7 +2101,7 @@ C_MODE_START static uchar *get_var_key(const uchar* var, size_t *len, my_bool __attribute__((unused)) t) { - register char* key; + char* key; key = ((VAR*)var)->name; *len = ((VAR*)var)->name_len; return (uchar*)key; @@ -9224,7 +9224,7 @@ typedef struct st_pointer_array { /* when using array-strings */ struct st_replace *init_replace(char * *from, char * *to, uint count, char * word_end_chars); -int insert_pointer_name(reg1 POINTER_ARRAY *pa,char * name); +int insert_pointer_name(POINTER_ARRAY *pa,char * name); void free_pointer_array(POINTER_ARRAY *pa); /* @@ -9308,8 +9308,8 @@ void replace_strings_append(REPLACE *rep, DYNAMIC_STRING* ds, const char *str, int len __attribute__((unused))) { - reg1 REPLACE *rep_pos; - reg2 REPLACE_STRING *rep_str; + REPLACE *rep_pos; + REPLACE_STRING *rep_str; const char *start, *from; DBUG_ENTER("replace_strings_append"); @@ -10207,7 +10207,7 @@ void internal_clear_bit(REP_SET *set, uint bit) void or_bits(REP_SET *to,REP_SET *from) { - reg1 uint i; + uint i; for (i=0 ; i < to->size_of_bits ; i++) to->bits[i]|=from->bits[i]; return; @@ -10309,7 +10309,7 @@ uint end_of_word(char * pos) #define PC_MALLOC 256 /* Bytes for pointers */ #define PS_MALLOC 512 /* Bytes for data */ -int insert_pointer_name(reg1 POINTER_ARRAY *pa,char * name) +int insert_pointer_name(POINTER_ARRAY *pa,char * name) { uint i,length,old_count; uchar *new_pos; diff --git a/client/sql_string.cc b/client/sql_string.cc index 5e0d3a5d8cc2..05f3b29da4c0 100644 --- a/client/sql_string.cc +++ b/client/sql_string.cc @@ -541,8 +541,8 @@ int String::strstr(const String &s,uint32 offset) if (!s.length()) return ((int) offset); // Empty string is always found - register const char *str = Ptr+offset; - register const char *search=s.ptr(); + const char *str = Ptr+offset; + const char *search=s.ptr(); const char *end=Ptr+str_length-s.length()+1; const char *search_end=s.ptr()+s.length(); skip: @@ -550,7 +550,7 @@ int String::strstr(const String &s,uint32 offset) { if (*str++ == *search) { - register char *i,*j; + char *i,*j; i=(char*) str; j=(char*) search+1; while (j != search_end) if (*i++ != *j++) goto skip; @@ -571,8 +571,8 @@ int String::strrstr(const String &s,uint32 offset) { if (!s.length()) return offset; // Empty string is always found - register const char *str = Ptr+offset-1; - register const char *search=s.ptr()+s.length()-1; + const char *str = Ptr+offset-1; + const char *search=s.ptr()+s.length()-1; const char *end=Ptr+s.length()-2; const char *search_end=s.ptr()-1; @@ -581,7 +581,7 @@ int String::strrstr(const String &s,uint32 offset) { if (*str-- == *search) { - register char *i,*j; + char *i,*j; i=(char*) str; j=(char*) search-1; while (j != search_end) if (*i-- != *j--) goto skip; diff --git a/dbug/dbug.c b/dbug/dbug.c index f969d96df1fa..a57d6c9cf18e 100644 --- a/dbug/dbug.c +++ b/dbug/dbug.c @@ -148,8 +148,6 @@ #define IMPORT extern /* Names defined externally */ #define EXPORT /* Allocated here, available globally */ -#define AUTO auto /* Names to be allocated on stack */ -#define REGISTER register /* Names to be placed in registers */ /* * The default file for profiling. Could also add another flag @@ -1742,7 +1740,7 @@ BOOLEAN _db_keyword_(CODE_STATE *cs, const char *keyword, int strict) static void Indent(CODE_STATE *cs, int indent) { - REGISTER int count; + int count; indent= max(indent-1-cs->stack->sub_level,0)*INDENT; for (count= 0; count < indent ; count++) @@ -1774,7 +1772,7 @@ static void Indent(CODE_STATE *cs, int indent) static void FreeList(struct link *linkp) { - REGISTER struct link *old; + struct link *old; while (linkp != NULL) { @@ -1873,7 +1871,7 @@ static void DoPrefix(CODE_STATE *cs, uint _line_) static void DBUGOpenFile(CODE_STATE *cs, const char *name,const char *end,int append) { - REGISTER FILE *fp; + FILE *fp; if (name != NULL) { @@ -1997,7 +1995,7 @@ static void DbugExit(const char *why) static char *DbugMalloc(size_t size) { - register char *new_malloc; + char *new_malloc; if (!(new_malloc= (char*) malloc(size))) DbugExit("out of memory"); @@ -2038,7 +2036,7 @@ static const char *DbugStrTok(const char *s) static const char *BaseName(const char *pathname) { - register const char *base; + const char *base; base= strrchr(pathname, FN_LIBCHAR); if (base++ == NullS) @@ -2075,8 +2073,8 @@ static const char *BaseName(const char *pathname) static BOOLEAN Writable(const char *pathname) { - REGISTER BOOLEAN granted; - REGISTER char *lastslash; + BOOLEAN granted; + char *lastslash; granted= FALSE; if (EXISTS(pathname)) diff --git a/dbug/dbug_analyze.c b/dbug/dbug_analyze.c index cd395cd3b02f..5009cb7c46cb 100644 --- a/dbug/dbug_analyze.c +++ b/dbug/dbug_analyze.c @@ -127,10 +127,10 @@ static unsigned long lowstack = (ulong) ~0; */ void push (name_pos, time_entered) -register unsigned int name_pos; -register unsigned long time_entered; +unsigned int name_pos; +unsigned long time_entered; { - register struct stack_t *t; + struct stack_t *t; DBUG_ENTER("push"); if (++stacktop > STACKSIZ) { @@ -153,12 +153,12 @@ register unsigned long time_entered; */ unsigned int pop (name_pos, time_entered, child_time) -register unsigned int *name_pos; -register unsigned long *time_entered; -register unsigned long *child_time; +unsigned int *name_pos; +unsigned long *time_entered; +unsigned long *child_time; { - register struct stack_t *temp; - register unsigned int rtnval; + struct stack_t *temp; + unsigned int rtnval; DBUG_ENTER ("pop"); @@ -211,8 +211,8 @@ static unsigned int n_items = 0; /* No. of items in the array so far */ char *strsave (s) char *s; { - register char *retval; - register unsigned int len; + char *retval; + unsigned int len; DBUG_ENTER ("strsave"); DBUG_PRINT ("strsave", ("%s",s)); @@ -233,8 +233,8 @@ char *s; unsigned int add (m_name) char *m_name; { - register unsigned int ind = 0; - register int cmp; + unsigned int ind = 0; + int cmp; DBUG_ENTER ("add"); if (n_items == 0) { /* First item to be added */ @@ -467,13 +467,13 @@ unsigned long int sum_calls, sum_time; void out_item (outf, m,called,timed) FILE *outf; -register struct module_t *m; +struct module_t *m; unsigned long int *called, *timed; { char *name = m -> name; - register unsigned int calls = m -> m_calls; - register unsigned long local_time = m -> m_time; - register unsigned long stkuse = m -> m_stkuse; + unsigned int calls = m -> m_calls; + unsigned long local_time = m -> m_time; + unsigned long stkuse = m -> m_stkuse; unsigned int import; double per_time = 0.0; double per_calls = 0.0; @@ -514,8 +514,8 @@ unsigned long int *called, *timed; void out_body (outf, root,s_calls,s_time) FILE *outf; -register unsigned int root; -register unsigned long int *s_calls, *s_time; +unsigned int root; +unsigned long int *s_calls, *s_time; { unsigned long int calls, local_time; @@ -566,7 +566,7 @@ extern char *optarg; int main (int argc, char **argv) { - register int c; + int c; int badflg = 0; FILE *infile; FILE *outfile = {stdout}; diff --git a/dbug/factorial.c b/dbug/factorial.c index 7b190ea8d8e9..d1a869c06eae 100644 --- a/dbug/factorial.c +++ b/dbug/factorial.c @@ -1,6 +1,6 @@ #ifdef DBUG_OFF /* We are testing dbug */ -int factorial(register int value) { +int factorial(int value) { if(value > 1) { value *= factorial(value-1); } @@ -12,7 +12,7 @@ int factorial(register int value) { #include int factorial ( -register int value) +int value) { DBUG_ENTER ("factorial"); DBUG_PRINT ("find", ("find %d factorial", value)); diff --git a/dbug/my_main.c b/dbug/my_main.c index 490e1808dd28..fe7b8b2fb789 100644 --- a/dbug/my_main.c +++ b/dbug/my_main.c @@ -14,7 +14,7 @@ int main (argc, argv) int argc; char *argv[]; { - register int result, ix; + int result, ix; extern int factorial(int); my_thread_global_init(); diff --git a/extra/replace.c b/extra/replace.c index edf62aa51042..b359b43f01f3 100644 --- a/extra/replace.c +++ b/extra/replace.c @@ -148,8 +148,8 @@ int main(int argc, char *argv[]) /* Initiates DEBUG - but no debugging here ! */ static int static_get_options(argc,argv) -register int *argc; -register char **argv[]; +int *argc; +char **argv[]; { int help,version; char *pos; @@ -218,8 +218,8 @@ register char **argv[]; static int get_replace_strings(argc,argv,from_array,to_array) -register int *argc; -register char **argv[]; +int *argc; +char **argv[]; POINTER_ARRAY *from_array,*to_array; { char *pos; @@ -248,7 +248,7 @@ POINTER_ARRAY *from_array,*to_array; return 0; } -static int insert_pointer_name(reg1 POINTER_ARRAY *pa,char * name) +static int insert_pointer_name(POINTER_ARRAY *pa,char * name) { uint i,length,old_count; uchar *new_pos; @@ -322,7 +322,7 @@ static int insert_pointer_name(reg1 POINTER_ARRAY *pa,char * name) /* free pointer array */ -static void free_pointer_array(reg1 POINTER_ARRAY *pa) +static void free_pointer_array(POINTER_ARRAY *pa) { if (pa->typelib.count) { @@ -765,7 +765,7 @@ static void internal_clear_bit(REP_SET *set, uint bit) static void or_bits(REP_SET *to,REP_SET *from) { - reg1 uint i; + uint i; for (i=0 ; i < to->size_of_bits ; i++) to->bits[i]|=from->bits[i]; return; @@ -883,8 +883,8 @@ static uint replace_len(char * str) static uint replace_strings(REPLACE *rep, char **start, uint *max_length, char *from) { - reg1 REPLACE *rep_pos; - reg2 REPLACE_STRING *rep_str; + REPLACE *rep_pos; + REPLACE_STRING *rep_str; char *to, *end, *pos, *new; end=(to= *start) + *max_length-1; diff --git a/extra/yassl/taocrypt/src/des.cpp b/extra/yassl/taocrypt/src/des.cpp index 673c21ed2071..53777f082199 100644 --- a/extra/yassl/taocrypt/src/des.cpp +++ b/extra/yassl/taocrypt/src/des.cpp @@ -224,7 +224,7 @@ void BasicDES::SetKey(const byte* key, word32 /*length*/, CipherDir dir) byte *const pc1m = buffer; /* place to modify pc1 into */ byte *const pcr = pc1m + 56; /* place to rotate pc1 into */ byte *const ks = pcr + 56; - register int i,j,l; + int i,j,l; int m; for (j = 0; j < 56; j++) { /* convert pc1 to bits of key */ diff --git a/include/heap.h b/include/heap.h index 12bcc896bb64..ad976438fcf5 100644 --- a/include/heap.h +++ b/include/heap.h @@ -270,7 +270,7 @@ extern int heap_write(HP_INFO *info,const uchar *buff); extern int heap_update(HP_INFO *info,const uchar *old,const uchar *newdata); extern int heap_rrnd(HP_INFO *info,uchar *buf,uchar *pos); extern int heap_scan_init(HP_INFO *info); -extern int heap_scan(register HP_INFO *info, uchar *record); +extern int heap_scan(HP_INFO *info, uchar *record); extern int heap_delete(HP_INFO *info,const uchar *buff); extern int heap_info(HP_INFO *info,HEAPINFO *x,int flag); extern int heap_create(const char *name, HP_CREATE_INFO *create_info, diff --git a/include/my_compare.h b/include/my_compare.h index 3821780492d7..c7a71d65407c 100644 --- a/include/my_compare.h +++ b/include/my_compare.h @@ -108,8 +108,8 @@ typedef struct st_HA_KEYSEG /* Key-portion */ extern int ha_compare_text(CHARSET_INFO *, uchar *, uint, uchar *, uint , my_bool, my_bool); -extern int ha_key_cmp(register HA_KEYSEG *keyseg, register uchar *a, - register uchar *b, uint key_length, uint nextflag, +extern int ha_key_cmp(HA_KEYSEG *keyseg, uchar *a, + uchar *b, uint key_length, uint nextflag, uint *diff_pos); /* diff --git a/include/myisam.h b/include/myisam.h index a9fcd7e43697..714c015af08d 100644 --- a/include/myisam.h +++ b/include/myisam.h @@ -421,17 +421,17 @@ typedef struct st_sort_info /* functions in mi_check */ void myisamchk_init(MI_CHECK *param); int chk_status(MI_CHECK *param, MI_INFO *info); -int chk_del(MI_CHECK *param, register MI_INFO *info, uint test_flag); +int chk_del(MI_CHECK *param, MI_INFO *info, uint test_flag); int chk_size(MI_CHECK *param, MI_INFO *info); int chk_key(MI_CHECK *param, MI_INFO *info); int chk_data_link(MI_CHECK *param, MI_INFO *info,int extend); -int mi_repair(MI_CHECK *param, register MI_INFO *info, +int mi_repair(MI_CHECK *param, MI_INFO *info, char * name, int rep_quick, my_bool no_copy_stat); -int mi_sort_index(MI_CHECK *param, register MI_INFO *info, char * name, +int mi_sort_index(MI_CHECK *param, MI_INFO *info, char * name, my_bool no_copy_stat); -int mi_repair_by_sort(MI_CHECK *param, register MI_INFO *info, +int mi_repair_by_sort(MI_CHECK *param, MI_INFO *info, const char * name, int rep_quick, my_bool no_copy_stat); -int mi_repair_parallel(MI_CHECK *param, register MI_INFO *info, +int mi_repair_parallel(MI_CHECK *param, MI_INFO *info, const char * name, int rep_quick, my_bool no_copy_stat); int change_to_newfile(const char * filename, const char * old_ext, const char * new_ext, myf myflags); diff --git a/mysys/mf_dirname.c b/mysys/mf_dirname.c index 569293f54016..471b45904f81 100644 --- a/mysys/mf_dirname.c +++ b/mysys/mf_dirname.c @@ -20,7 +20,7 @@ size_t dirname_length(const char *name) { - register char *pos, *gpos; + char *pos, *gpos; #ifdef BASKSLASH_MBTAIL CHARSET_INFO *fs= fs_character_set(); #endif diff --git a/mysys/mf_fn_ext.c b/mysys/mf_fn_ext.c index 47fc67cabbdd..cbe8c1508a6d 100644 --- a/mysys/mf_fn_ext.c +++ b/mysys/mf_fn_ext.c @@ -35,7 +35,7 @@ char *fn_ext(const char *name) { - register const char *pos, *gpos; + const char *pos, *gpos; DBUG_ENTER("fn_ext"); DBUG_PRINT("mfunkt",("name: '%s'",name)); diff --git a/mysys/mf_format.c b/mysys/mf_format.c index 2b2356c08dfc..6d17969c874c 100644 --- a/mysys/mf_format.c +++ b/mysys/mf_format.c @@ -28,7 +28,7 @@ char * fn_format(char * to, const char *name, const char *dir, { char dev[FN_REFLEN], buff[FN_REFLEN], *pos, *startpos; const char *ext; - reg1 size_t length; + size_t length; size_t dev_length; DBUG_ENTER("fn_format"); DBUG_ASSERT(name != NULL); @@ -120,8 +120,8 @@ char * fn_format(char * to, const char *name, const char *dir, size_t strlength(const char *str) { - reg1 const char * pos; - reg2 const char * found; + const char * pos; + const char * found; DBUG_ENTER("strlength"); pos= found= str; diff --git a/mysys/mf_getdate.c b/mysys/mf_getdate.c index e3ac2e3ff136..857ea929ee01 100644 --- a/mysys/mf_getdate.c +++ b/mysys/mf_getdate.c @@ -35,9 +35,9 @@ */ -void get_date(register char * to, int flag, time_t date) +void get_date(char * to, int flag, time_t date) { - reg2 struct tm *start_time; + struct tm *start_time; time_t skr; #if defined(HAVE_LOCALTIME_R) && defined(_REENTRANT) struct tm tm_tmp; diff --git a/mysys/mf_iocache.c b/mysys/mf_iocache.c index 7aa0934096ff..e0f91663e672 100644 --- a/mysys/mf_iocache.c +++ b/mysys/mf_iocache.c @@ -446,7 +446,7 @@ my_bool reinit_io_cache(IO_CACHE *info, enum cache_type type, Otherwise info->error contains the number of bytes in Buffer. */ -int _my_b_read(register IO_CACHE *info, uchar *Buffer, size_t Count) +int _my_b_read(IO_CACHE *info, uchar *Buffer, size_t Count) { size_t length,diff_length,left_length, max_length; my_off_t pos_in_file; @@ -989,7 +989,7 @@ static void unlock_io_cache(IO_CACHE *cache) 1 Error: can't read requested characters */ -int _my_b_read_r(register IO_CACHE *cache, uchar *Buffer, size_t Count) +int _my_b_read_r(IO_CACHE *cache, uchar *Buffer, size_t Count) { my_off_t pos_in_file; size_t length, diff_length, left_length; @@ -1163,7 +1163,7 @@ static void copy_to_read_buffer(IO_CACHE *write_cache, 1 Failed to read */ -int _my_b_seq_read(register IO_CACHE *info, uchar *Buffer, size_t Count) +int _my_b_seq_read(IO_CACHE *info, uchar *Buffer, size_t Count) { size_t length, diff_length, left_length, save_count, max_length; my_off_t pos_in_file; @@ -1325,7 +1325,7 @@ int _my_b_seq_read(register IO_CACHE *info, uchar *Buffer, size_t Count) 1 An error has occurred; IO_CACHE to error state. */ -int _my_b_async_read(register IO_CACHE *info, uchar *Buffer, size_t Count) +int _my_b_async_read(IO_CACHE *info, uchar *Buffer, size_t Count) { size_t length,read_length,diff_length,left_length,use_length,org_Count; size_t max_length; @@ -1525,7 +1525,7 @@ int _my_b_get(IO_CACHE *info) -1 On error; my_errno contains error code. */ -int _my_b_write(register IO_CACHE *info, const uchar *Buffer, size_t Count) +int _my_b_write(IO_CACHE *info, const uchar *Buffer, size_t Count) { size_t rest_length,length; my_off_t pos_in_file= info->pos_in_file; @@ -1599,7 +1599,7 @@ int _my_b_write(register IO_CACHE *info, const uchar *Buffer, size_t Count) the write buffer before we are ready with it. */ -int my_b_append(register IO_CACHE *info, const uchar *Buffer, size_t Count) +int my_b_append(IO_CACHE *info, const uchar *Buffer, size_t Count) { size_t rest_length,length; @@ -1663,7 +1663,7 @@ int my_b_safe_write(IO_CACHE *info, const uchar *Buffer, size_t Count) we will never get a seek over the end of the buffer */ -int my_block_write(register IO_CACHE *info, const uchar *Buffer, size_t Count, +int my_block_write(IO_CACHE *info, const uchar *Buffer, size_t Count, my_off_t pos) { size_t length; diff --git a/mysys/mf_iocache2.c b/mysys/mf_iocache2.c index 90980af08844..cd3a2e75c1a7 100644 --- a/mysys/mf_iocache2.c +++ b/mysys/mf_iocache2.c @@ -401,7 +401,7 @@ size_t my_b_vprintf(IO_CACHE *info, const char* fmt, va_list args) if (*fmt == 's') /* String parameter */ { - reg2 char *par = va_arg(args, char *); + char *par = va_arg(args, char *); size_t length2 = strlen(par); /* TODO: implement precision */ out_length+= length2; @@ -417,7 +417,7 @@ size_t my_b_vprintf(IO_CACHE *info, const char* fmt, va_list args) } else if (*fmt == 'd' || *fmt == 'u') /* Integer parameter */ { - register int iarg; + int iarg; size_t length2; char buff[32]; @@ -452,7 +452,7 @@ size_t my_b_vprintf(IO_CACHE *info, const char* fmt, va_list args) else if ((*fmt == 'l' && fmt[1] == 'd') || fmt[1] == 'u') /* long parameter */ { - register long iarg; + long iarg; size_t length2; char buff[32]; diff --git a/mysys/mf_keycache.c b/mysys/mf_keycache.c index 620fe1f5795a..8095a53594f7 100644 --- a/mysys/mf_keycache.c +++ b/mysys/mf_keycache.c @@ -1513,7 +1513,7 @@ static void unlink_hash(KEY_CACHE *keycache, HASH_LINK *hash_link) static HASH_LINK *get_hash_link(KEY_CACHE *keycache, int file, my_off_t filepos) { - reg1 HASH_LINK *hash_link, **start; + HASH_LINK *hash_link, **start; #if defined(KEYCACHE_DEBUG) int cnt; #endif @@ -2511,7 +2511,7 @@ uchar *key_cache_read(KEY_CACHE *keycache, if (keycache->key_cache_inited) { /* Key cache is used */ - reg1 BLOCK_LINK *block; + BLOCK_LINK *block; uint read_length; uint offset; int page_st; @@ -2741,7 +2741,7 @@ int key_cache_insert(KEY_CACHE *keycache, if (keycache->key_cache_inited) { /* Key cache is used */ - reg1 BLOCK_LINK *block; + BLOCK_LINK *block; uint read_length; uint offset; int page_st; @@ -3011,7 +3011,7 @@ int key_cache_write(KEY_CACHE *keycache, if (keycache->key_cache_inited) { /* Key cache is used */ - reg1 BLOCK_LINK *block; + BLOCK_LINK *block; uint read_length; uint offset; int page_st; diff --git a/mysys/mf_pack.c b/mysys/mf_pack.c index 7f844db5b9d1..c1477f4af6bf 100644 --- a/mysys/mf_pack.c +++ b/mysys/mf_pack.c @@ -121,12 +121,12 @@ void pack_dirname(char * to, const char *from) # length of new name */ -size_t cleanup_dirname(register char *to, const char *from) +size_t cleanup_dirname(char *to, const char *from) { - reg5 size_t length; - reg2 char * pos; - reg3 char * from_ptr; - reg4 char * start; + size_t length; + char *pos; + char *from_ptr; + char *start; char parent[5], /* for "FN_PARENTDIR" */ buff[FN_REFLEN+1],*end_parentdir; #ifdef BACKSLASH_MBTAIL diff --git a/mysys/mf_qsort.c b/mysys/mf_qsort.c index 45a948feab8a..d4d2c933bd12 100644 --- a/mysys/mf_qsort.c +++ b/mysys/mf_qsort.c @@ -37,13 +37,13 @@ do { \ if (swap_ptrs) \ { \ - reg1 char **a = (char**) (A), **b = (char**) (B); \ + char **a = (char**) (A), **b = (char**) (B); \ char *tmp = *a; *a++ = *b; *b++ = tmp; \ } \ else \ { \ - reg1 char *a = (A), *b = (B); \ - reg3 char *end= a+size; \ + char *a = (A), *b = (B); \ + char *end= a+size; \ do \ { \ char tmp = *a; *a++ = *b; *b++ = tmp; \ diff --git a/mysys/mf_soundex.c b/mysys/mf_soundex.c index 3452d52018da..55e3a0b45e70 100644 --- a/mysys/mf_soundex.c +++ b/mysys/mf_soundex.c @@ -43,12 +43,12 @@ static char get_scode(CHARSET_INFO * cs, char **ptr,pbool remove_garbage); /* outputed string is 4 byte long */ /* out_pntr can be == in_pntr */ -void soundex(CHARSET_INFO * cs,register char * out_pntr, char * in_pntr, +void soundex(CHARSET_INFO * cs, char * out_pntr, char * in_pntr, pbool remove_garbage) { char ch,last_ch; - reg3 char * end; - register uchar *map=cs->to_upper; + char *end; + uchar *map=cs->to_upper; if (remove_garbage) { diff --git a/mysys/mf_wcomp.c b/mysys/mf_wcomp.c index fe64d06f2db1..eb7248d91885 100644 --- a/mysys/mf_wcomp.c +++ b/mysys/mf_wcomp.c @@ -25,7 +25,7 @@ char wild_many='*'; char wild_one='?'; char wild_prefix=0; /* QQ this can potentially cause a SIGSEGV */ -int wild_compare(register const char *str, register const char *wildstr, +int wild_compare(const char *str, const char *wildstr, pbool str_is_pattern) { char cmp; diff --git a/mysys/my_alloc.c b/mysys/my_alloc.c index 65af56052064..81675d1cb339 100644 --- a/mysys/my_alloc.c +++ b/mysys/my_alloc.c @@ -148,7 +148,7 @@ void reset_root_defaults(MEM_ROOT *mem_root, size_t block_size, void *alloc_root(MEM_ROOT *mem_root, size_t length) { #if defined(HAVE_purify) && defined(EXTRA_DEBUG) - reg1 USED_MEM *next; + USED_MEM *next; DBUG_ENTER("alloc_root"); DBUG_PRINT("enter",("root: 0x%lx", (long) mem_root)); @@ -178,8 +178,8 @@ void *alloc_root(MEM_ROOT *mem_root, size_t length) #else size_t get_size, block_size; uchar* point; - reg1 USED_MEM *next= 0; - reg2 USED_MEM **prev; + USED_MEM *next= 0; + USED_MEM **prev; DBUG_ENTER("alloc_root"); DBUG_PRINT("enter",("root: 0x%lx", (long) mem_root)); DBUG_ASSERT(alloc_root_inited(mem_root)); @@ -298,8 +298,8 @@ void *multi_alloc_root(MEM_ROOT *root, ...) static inline void mark_blocks_free(MEM_ROOT* root) { - reg1 USED_MEM *next; - reg2 USED_MEM **last; + USED_MEM *next; + USED_MEM **last; /* iterate through (partially) free blocks, mark them free */ last= &root->free; @@ -346,7 +346,7 @@ static inline void mark_blocks_free(MEM_ROOT* root) void free_root(MEM_ROOT *root, myf MyFlags) { - reg1 USED_MEM *next,*old; + USED_MEM *next,*old; DBUG_ENTER("free_root"); DBUG_PRINT("enter",("root: 0x%lx flags: %u", (long) root, (uint) MyFlags)); diff --git a/mysys/my_compare.c b/mysys/my_compare.c index c9e9c4e98bf9..029c4fcfbcc9 100644 --- a/mysys/my_compare.c +++ b/mysys/my_compare.c @@ -116,8 +116,8 @@ static int compare_bin(uchar *a, uint a_length, uchar *b, uint b_length, #define FCMP(A,B) ((int) (A) - (int) (B)) -int ha_key_cmp(register HA_KEYSEG *keyseg, register uchar *a, - register uchar *b, uint key_length, uint nextflag, +int ha_key_cmp(HA_KEYSEG *keyseg, uchar *a, + uchar *b, uint key_length, uint nextflag, uint *diff_pos) { int flag; diff --git a/mysys/my_error.c b/mysys/my_error.c index 5c1e1b5e92a2..e15121a6a9c2 100644 --- a/mysys/my_error.c +++ b/mysys/my_error.c @@ -180,7 +180,7 @@ void my_printf_warning(const char *format, ...) MyFlags Flags */ -void my_message(uint error, const char *str, register myf MyFlags) +void my_message(uint error, const char *str, myf MyFlags) { (*error_handler_hook)(error, str, MyFlags); } diff --git a/mysys/my_fopen.c b/mysys/my_fopen.c index 12db47f95397..78f4f2337486 100644 --- a/mysys/my_fopen.c +++ b/mysys/my_fopen.c @@ -328,7 +328,7 @@ FILE *my_fdopen(File Filedes, const char *name, int Flags, myf MyFlags) a+ == O_RDWR|O_APPEND|O_CREAT */ -static void make_ftype(register char * to, register int flag) +static void make_ftype(char * to, int flag) { /* check some possible invalid combinations */ DBUG_ASSERT((flag & (O_TRUNC | O_APPEND)) != (O_TRUNC | O_APPEND)); diff --git a/mysys/my_getwd.c b/mysys/my_getwd.c index 3552081b85fc..92b66706588d 100644 --- a/mysys/my_getwd.c +++ b/mysys/my_getwd.c @@ -128,7 +128,7 @@ int my_setwd(const char *dir, myf MyFlags) /* Test if hard pathname */ /* Returns 1 if dirname is a hard path */ -int test_if_hard_path(register const char *dir_name) +int test_if_hard_path(const char *dir_name) { if (dir_name[0] == FN_HOMELIB && dir_name[1] == FN_LIBCHAR) return (home_dir != NullS && test_if_hard_path(home_dir)); diff --git a/mysys/my_once.c b/mysys/my_once.c index dfd5de81ac74..ab82d1f03b1b 100644 --- a/mysys/my_once.c +++ b/mysys/my_once.c @@ -37,8 +37,8 @@ void* my_once_alloc(size_t Size, myf MyFlags) { size_t get_size, max_left; uchar* point; - reg1 USED_MEM *next; - reg2 USED_MEM **prev; + USED_MEM *next; + USED_MEM **prev; Size= ALIGN_SIZE(Size); prev= &my_once_root_block; @@ -105,7 +105,7 @@ void *my_once_memdup(const void *src, size_t len, myf myflags) void my_once_free(void) { - reg1 USED_MEM *next,*old; + USED_MEM *next,*old; DBUG_ENTER("my_once_free"); for (next=my_once_root_block ; next ; ) diff --git a/mysys/ptr_cmp.c b/mysys/ptr_cmp.c index cbd8ef49ef58..f32adb0306f6 100644 --- a/mysys/ptr_cmp.c +++ b/mysys/ptr_cmp.c @@ -94,8 +94,8 @@ qsort2_cmp get_ptr_compare (size_t size) static int ptr_compare(size_t *compare_length, uchar **a, uchar **b) { - reg3 int length= *compare_length; - reg1 uchar *first,*last; + int length= *compare_length; + uchar *first,*last; DBUG_ASSERT(length > 0); first= *a; last= *b; @@ -110,8 +110,8 @@ static int ptr_compare(size_t *compare_length, uchar **a, uchar **b) static int ptr_compare_0(size_t *compare_length,uchar **a, uchar **b) { - reg3 int length= *compare_length; - reg1 uchar *first,*last; + int length= *compare_length; + uchar *first,*last; first= *a; last= *b; loop: @@ -131,8 +131,8 @@ static int ptr_compare_0(size_t *compare_length,uchar **a, uchar **b) static int ptr_compare_1(size_t *compare_length,uchar **a, uchar **b) { - reg3 int length= *compare_length-1; - reg1 uchar *first,*last; + int length= *compare_length-1; + uchar *first,*last; first= *a+1; last= *b+1; cmp(-1); @@ -152,8 +152,8 @@ static int ptr_compare_1(size_t *compare_length,uchar **a, uchar **b) static int ptr_compare_2(size_t *compare_length,uchar **a, uchar **b) { - reg3 int length= *compare_length-2; - reg1 uchar *first,*last; + int length= *compare_length-2; + uchar *first,*last; first= *a +2 ; last= *b +2; cmp(-2); @@ -174,8 +174,8 @@ static int ptr_compare_2(size_t *compare_length,uchar **a, uchar **b) static int ptr_compare_3(size_t *compare_length,uchar **a, uchar **b) { - reg3 int length= *compare_length-3; - reg1 uchar *first,*last; + int length= *compare_length-3; + uchar *first,*last; first= *a +3 ; last= *b +3; cmp(-3); diff --git a/mysys/queues.c b/mysys/queues.c index 801c5a684689..264db4f8e169 100644 --- a/mysys/queues.c +++ b/mysys/queues.c @@ -202,9 +202,9 @@ void delete_queue(QUEUE *queue) /* Code for insert, search and delete of elements */ -void queue_insert(register QUEUE *queue, uchar *element) +void queue_insert(QUEUE *queue, uchar *element) { - reg2 uint idx, next; + uint idx, next; DBUG_ASSERT(queue->elements < queue->max_elements); queue->root[0]= element; idx= ++queue->elements; @@ -229,7 +229,7 @@ void queue_insert(register QUEUE *queue, uchar *element) */ -int queue_insert_safe(register QUEUE *queue, uchar *element) +int queue_insert_safe(QUEUE *queue, uchar *element) { if (queue->elements == queue->max_elements) @@ -248,7 +248,7 @@ int queue_insert_safe(register QUEUE *queue, uchar *element) /* Remove item from queue */ /* Returns pointer to removed element */ -uchar *queue_remove(register QUEUE *queue, uint idx) +uchar *queue_remove(QUEUE *queue, uint idx) { uchar *element; DBUG_ASSERT(idx < queue->max_elements); @@ -269,7 +269,7 @@ void queue_replaced(QUEUE *queue) #ifndef OLD_VERSION -void _downheap(register QUEUE *queue, uint idx) +void _downheap(QUEUE *queue, uint idx) { uchar *element; uint elements,half_queue,offset_to_key, next_index; @@ -323,7 +323,7 @@ void _downheap(register QUEUE *queue, uint idx) suit or new benchmarks anyone wants to run for comparisons. */ /* Fix heap when index have changed */ -void _downheap(register QUEUE *queue, uint idx) +void _downheap(QUEUE *queue, uint idx) { uchar *element; uint elements,half_queue,next_index,offset_to_key; diff --git a/mysys/testhash.c b/mysys/testhash.c index ffdaaece7706..dffe38e0cdb3 100644 --- a/mysys/testhash.c +++ b/mysys/testhash.c @@ -59,7 +59,7 @@ int main(int argc,char *argv[]) static int do_test() { - register uint i,j; + uint i,j; uint n1,n2,n3; uint write_count,update,delete; ulong pos; diff --git a/mysys/typelib.c b/mysys/typelib.c index 737ffa4eb814..47b7eacaafaa 100644 --- a/mysys/typelib.c +++ b/mysys/typelib.c @@ -128,8 +128,8 @@ int find_type(const char *x, const TYPELIB *typelib, uint flags) first type is 1, 0 = empty field */ -void make_type(register char * to, register uint nr, - register TYPELIB *typelib) +void make_type(char * to, uint nr, + TYPELIB *typelib) { DBUG_ENTER("make_type"); if (!nr) diff --git a/regex/main.ih b/regex/main.ih index f0104cc18c06..6e8d3273a044 100644 --- a/regex/main.ih +++ b/regex/main.ih @@ -8,7 +8,7 @@ void regress(FILE *in); void rx_try(char *f0, char *f1, char *f2, char *f3, char *f4, int opts); int options(int type, char *s); int opt(int c, char *s); -void fixstr(register char *p); +void fixstr(char *p); char *check(char *str, my_regmatch_t sub, char *should); static char *eprint(int err); static int efind(char *name); diff --git a/regex/regexec.c b/regex/regexec.c index c0d03335b415..2fbae1bd369b 100644 --- a/regex/regexec.c +++ b/regex/regexec.c @@ -118,7 +118,7 @@ my_regmatch_t pmatch[]; int eflags; { char *pstr = (char *) str; - register struct re_guts *g = preg->re_g; + struct re_guts *g = preg->re_g; #ifdef REDEBUG # define GOODFLAGS(f) (f) #else diff --git a/regex/regexp.c b/regex/regexp.c index 8ddf90f29435..e321cde531fb 100644 --- a/regex/regexp.c +++ b/regex/regexp.c @@ -256,10 +256,10 @@ regexp *regcomp(exp,excompat) char *exp; int excompat; /* \( \) operators like in unix ex */ { - register regexp *r; - register char *scan; - register char *longest; - register int len; + regexp *r; + char *scan; + char *longest; + int len; int flags; short *exp2,*dest,c; @@ -388,10 +388,10 @@ static char *reg(paren, flagp) int paren; /* Parenthesized? */ int *flagp; { - register char *ret; - register char *br; - register char *ender; - register int parno=0; /* make gcc happy */ + char *ret; + char *br; + char *ender; + int parno=0; /* make gcc happy */ int flags; *flagp = HASWIDTH; /* Tentatively. */ @@ -457,9 +457,9 @@ int *flagp; static char *regbranch(flagp) int *flagp; { - register char *ret; - register char *chain; - register char *latest; + char *ret; + char *chain; + char *latest; int flags; *flagp = WORST; /* Tentatively. */ @@ -494,9 +494,9 @@ int *flagp; static char *regpiece(flagp) int *flagp; { - register char *ret; - register short op; - /* register char *nxt; */ + char *ret; + short op; + /* char *nxt; */ int flags; ret = regatom(&flags); @@ -558,7 +558,7 @@ int *flagp; static char *regatom(flagp) int *flagp; { - register char *ret; + char *ret; int flags; *flagp = WORST; /* Tentatively. */ @@ -581,8 +581,8 @@ int *flagp; ret = regnode(WORDEND); break; case LSQBRAC:{ - register int class; - register int classend; + int class; + int classend; if (*regparse == CARET) { /* Complement of range. */ ret = regnode(ANYBUT); @@ -630,8 +630,8 @@ int *flagp; FAIL("* follows nothing\n"); default:{ - register int len; - register short ender; + int len; + short ender; regparse--; for (len=0; regparse[len] && @@ -665,8 +665,8 @@ int *flagp; static char *regnode(op) char op; { - register char *ret; - register char *ptr; + char *ret; + char *ptr; ret = regcode; if (ret == ®dummy) { @@ -703,9 +703,9 @@ static void reginsert(op, opnd) char op; char *opnd; { - register char *src; - register char *dst; - register char *place; + char *src; + char *dst; + char *place; if (regcode == ®dummy) { regsize += 3; @@ -730,9 +730,9 @@ static void regtail(p, val) char *p; char *val; { - register char *scan; - register char *temp; - register int offset; + char *scan; + char *temp; + int offset; if (p == ®dummy) return; @@ -796,10 +796,10 @@ STATIC char *regprop(); - regexec - match a regexp against a string */ int regexec(prog, string) -register regexp *prog; -register char *string; +regexp *prog; +char *string; { - register char *s; + char *s; /* Be paranoid... */ if (prog == (regexp *)NULL || string == (char *)NULL) { @@ -855,9 +855,9 @@ register char *string; static int regtry(regexp *prog, char *string) { - register int i; - register char **sp; - register char **ep; + int i; + char **sp; + char **ep; reginput = string; regstartp = prog->startp; @@ -890,7 +890,7 @@ static int regtry(regexp *prog, char *string) static int regmatch(char *prog) { - register char *scan; /* Current node. */ + char *scan; /* Current node. */ char *nxt; /* nxt node. */ scan = prog; @@ -934,8 +934,8 @@ static int regmatch(char *prog) return (0); break; case EXACTLY:{ - register int len; - register char *opnd; + int len; + char *opnd; opnd = OPERAND(scan); /* Inline the first character, for speed. */ @@ -972,8 +972,8 @@ static int regmatch(char *prog) case OPEN + 7: case OPEN + 8: case OPEN + 9:{ - register int no; - register char *save; + int no; + char *save; no = OP(scan) - OPEN; save = reginput; @@ -999,8 +999,8 @@ static int regmatch(char *prog) case CLOSE + 7: case CLOSE + 8: case CLOSE + 9:{ - register int no; - register char *save; + int no; + char *save; no = OP(scan) - CLOSE; save = reginput; @@ -1018,7 +1018,7 @@ static int regmatch(char *prog) } case BRANCH:{ - register char *save; + char *save; if (OP(nxt) != BRANCH) /* No choice. */ nxt = OPERAND(scan); /* Avoid recursion. */ @@ -1036,10 +1036,10 @@ static int regmatch(char *prog) } break; case STAR:{ - register char nextch; - register int no; - register char *save; - register int minimum; + char nextch; + int no; + char *save; + int minimum; /* * Lookahead to avoid useless match attempts when we know @@ -1089,9 +1089,9 @@ static int regmatch(char *prog) static int regrepeat(char *p) { - register int count = 0; - register char *scan; - register char *opnd; + int count = 0; + char *scan; + char *opnd; scan = reginput; opnd = OPERAND(p); @@ -1133,9 +1133,9 @@ static int regrepeat(char *p) - regnext - dig the "nxt" pointer out of a node */ -static char *regnext(register char *p) +static char *regnext(char *p) { - register int offset; + int offset; if (p == ®dummy) return ((char *)NULL); @@ -1159,9 +1159,9 @@ STATIC char *regprop(); */ void regdump(regexp *r) { - register char *s; - register char op = EXACTLY; /* Arbitrary non-END op. */ - register char *nxt; + char *s; + char op = EXACTLY; /* Arbitrary non-END op. */ + char *nxt; s = r->program + 1; while (op != END) { /* While that wasn't END last time... */ @@ -1200,7 +1200,7 @@ void regdump(regexp *r) static char *regprop(char *op) { - register char *p; + char *p; static char buf[50]; strcpy(buf, ":"); @@ -1280,11 +1280,11 @@ static char *regprop(char *op) char *regsub(regexp *prog, char *source, char *dest, int n) { - register char *src; - register char *dst; - register char c; - register int no; - register int len; + char *src; + char *dst; + char c; + int no; + int len; extern char *strncpy(); if (prog == (regexp *)NULL || diff --git a/regex/regfree.c b/regex/regfree.c index f764fcdf84e0..2ebadd8c2052 100644 --- a/regex/regfree.c +++ b/regex/regfree.c @@ -15,7 +15,7 @@ void my_regfree(preg) my_regex_t *preg; { - register struct re_guts *g; + struct re_guts *g; if (preg->re_magic != MAGIC1) /* oops */ return; /* nice to complain, but hard */ diff --git a/regex/split.c b/regex/split.c index abae74eba9c2..44bafedd38cf 100644 --- a/regex/split.c +++ b/regex/split.c @@ -12,14 +12,14 @@ char *fields[]; /* list is not NULL-terminated */ int nfields; /* number of entries available in fields[] */ char *sep; /* "" white, "c" single char, "ab" [ab]+ */ { - register char *p = string; - register char c; /* latest character */ - register char sepc = sep[0]; - register char sepc2; - register int fn; - register char **fp = fields; - register char *sepp; - register int trimtrail; + char *p = string; + char c; /* latest character */ + char sepc = sep[0]; + char sepc2; + int fn; + char **fp = fields; + char *sepp; + int trimtrail; /* white space */ if (sepc == '\0') { @@ -153,7 +153,7 @@ int argc; char *argv[]; { char buf[512]; - register int n; + int n; # define MNF 10 char *fields[MNF]; @@ -193,7 +193,7 @@ char *seps; { # define NF 5 char *fields[NF]; - register int nf; + int nf; nf = split(string, fields, NF, seps); print(nf, NF, fields); @@ -204,8 +204,8 @@ int nf; int nfp; char *fields[]; { - register int fn; - register int bound; + int fn; + int bound; bound = (nf > nfp) ? nfp : nf; printf("%d:\t", nf); @@ -285,12 +285,12 @@ struct { regress() { char buf[512]; - register int n; + int n; char *fields[RNF+1]; - register int nf; - register int i; - register int printit; - register char *f; + int nf; + int i; + int printit; + char *f; for (n = 0; tests[n].str != NULL; n++) { (void) strcpy(buf, tests[n].str); diff --git a/sql-common/pack.c b/sql-common/pack.c index 02e91b5c3e33..24dcd3bb2a5d 100644 --- a/sql-common/pack.c +++ b/sql-common/pack.c @@ -21,7 +21,7 @@ /* Get the length of next field. Change parameter to point at fieldstart */ ulong STDCALL net_field_length(uchar **packet) { - reg1 uchar *pos= (uchar *)*packet; + uchar *pos= (uchar *)*packet; if (*pos < 251) { (*packet)++; @@ -49,7 +49,7 @@ ulong STDCALL net_field_length(uchar **packet) /* The same as above but returns longlong */ my_ulonglong net_field_length_ll(uchar **packet) { - reg1 uchar *pos= *packet; + uchar *pos= *packet; if (*pos < 251) { (*packet)++; diff --git a/sql/derror.cc b/sql/derror.cc index 2b4cc13073e2..f6ad5b99897e 100644 --- a/sql/derror.cc +++ b/sql/derror.cc @@ -99,7 +99,7 @@ bool init_errmessage(void) bool read_texts(const char *file_name, const char *language, const char ***point, uint error_messages) { - register uint i; + uint i; uint count,funktpos,textcount; size_t length; File file; diff --git a/sql/field.cc b/sql/field.cc index 1a238e2121db..65082605109e 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -2301,7 +2301,7 @@ int Field_decimal::store(double nr) return 1; } - reg4 uint i; + uint i; size_t length; uchar fyllchar,*to; char buff[DOUBLE_TO_STRING_CONVERSION_BUFFER_SIZE]; diff --git a/sql/field.h b/sql/field.h index cc4b79a9e4a8..9f3b1bca83a4 100644 --- a/sql/field.h +++ b/sql/field.h @@ -522,7 +522,7 @@ class Field */ virtual bool is_updatable() const { return FALSE; } - friend int cre_myisam(char * name, register TABLE *form, uint options, + friend int cre_myisam(char * name, TABLE *form, uint options, ulonglong auto_increment_value); friend class Copy_field; friend class Item_avg_field; diff --git a/sql/filesort.cc b/sql/filesort.cc index 9354a1182303..7c1f662d3bfd 100644 --- a/sql/filesort.cc +++ b/sql/filesort.cc @@ -424,7 +424,7 @@ static size_t char_array_size(uint fields, uint length) static uchar **make_char_array(uchar **old_pos, uint fields, uint length, myf my_flag) { - register uchar **pos; + uchar **pos; uchar *char_pos; DBUG_ENTER("make_char_array"); @@ -737,7 +737,7 @@ static ha_rows find_all_keys(SORTPARAM *param, SQL_SELECT *select, */ static int -write_keys(SORTPARAM *param, register uchar **sort_keys, uint count, +write_keys(SORTPARAM *param, uchar **sort_keys, uint count, IO_CACHE *buffpek_pointers, IO_CACHE *tempfile) { size_t sort_length, rec_length; @@ -800,12 +800,12 @@ static inline void store_length(uchar *to, uint length, uint pack_length) /** Make a sort-key from record. */ -static void make_sortkey(register SORTPARAM *param, - register uchar *to, uchar *ref_pos) +static void make_sortkey(SORTPARAM *param, + uchar *to, uchar *ref_pos) { - reg3 Field *field; - reg1 SORT_FIELD *sort_field; - reg5 uint length; + Field *field; + SORT_FIELD *sort_field; + uint length; for (sort_field=param->local_sortorder ; sort_field != param->end ; @@ -1043,7 +1043,7 @@ static void make_sortkey(register SORTPARAM *param, static void register_used_fields(SORTPARAM *param) { - reg1 SORT_FIELD *sort_field; + SORT_FIELD *sort_field; TABLE *table=param->sort_form; MY_BITMAP *bitmap= table->read_set; @@ -1108,7 +1108,7 @@ static bool save_index(SORTPARAM *param, uchar **sort_keys, uint count, int merge_many_buff(SORTPARAM *param, uchar *sort_buffer, BUFFPEK *buffpek, uint *maxbuffer, IO_CACHE *t_file) { - register uint i; + uint i; IO_CACHE t_file2,*from_file,*to_file,*temp; BUFFPEK *lastbuff; DBUG_ENTER("merge_many_buff"); @@ -1166,7 +1166,7 @@ int merge_many_buff(SORTPARAM *param, uchar *sort_buffer, uint read_to_buffer(IO_CACHE *fromfile, BUFFPEK *buffpek, uint rec_length) { - register uint count; + uint count; uint length; if ((count=(uint) min((ha_rows) buffpek->max_keys,buffpek->count))) @@ -1418,7 +1418,7 @@ int merge_buffers(SORTPARAM *param, IO_CACHE *from_file, } else { - register uchar *end; + uchar *end; strpos= buffpek->key+offset; for (end= strpos+buffpek->mem_count*rec_length ; strpos != end ; @@ -1492,7 +1492,7 @@ static uint sortlength(THD *thd, SORT_FIELD *sortorder, uint s_length, bool *multi_byte_charset) { - reg2 uint length; + uint length; CHARSET_INFO *cs; *multi_byte_charset= 0; diff --git a/sql/gen_lex_hash.cc b/sql/gen_lex_hash.cc index 569a2a1a4d09..598d2f666e30 100644 --- a/sql/gen_lex_hash.cc +++ b/sql/gen_lex_hash.cc @@ -406,8 +406,8 @@ int main(int argc,char **argv) static SYMBOL *get_hash_symbol(const char *s,\n\ unsigned int len,bool function)\n\ {\n\ - register uchar *hash_map;\n\ - register const char *cur_str= s;\n\ + uchar *hash_map;\n\ + const char *cur_str= s;\n\ \n\ if (len == 0) {\n\ DBUG_PRINT(\"warning\", (\"get_hash_symbol() received a request for a zero-length symbol, which is probably a mistake.\"));\ @@ -419,25 +419,25 @@ static SYMBOL *get_hash_symbol(const char *s,\n\ if (function){\n\ if (len>sql_functions_max_len) return 0;\n\ hash_map= sql_functions_map;\n\ - register uint32 cur_struct= uint4korr(hash_map+((len-1)*4));\n\ + uint32 cur_struct= uint4korr(hash_map+((len-1)*4));\n\ \n\ for (;;){\n\ - register uchar first_char= (uchar)cur_struct;\n\ + uchar first_char= (uchar)cur_struct;\n\ \n\ if (first_char == 0)\n\ {\n\ - register int16 ires= (int16)(cur_struct>>16);\n\ + int16 ires= (int16)(cur_struct>>16);\n\ if (ires==array_elements(symbols)) return 0;\n\ - register SYMBOL *res;\n\ + SYMBOL *res;\n\ if (ires>=0) \n\ res= symbols+ires;\n\ else\n\ res= sql_functions-ires-1;\n\ - register uint count= (uint) (cur_str - s);\n\ + uint count= (uint) (cur_str - s);\n\ return lex_casecmp(cur_str,res->name+count,len-count) ? 0 : res;\n\ }\n\ \n\ - register uchar cur_char= (uchar)to_upper_lex[(uchar)*cur_str];\n\ + uchar cur_char= (uchar)to_upper_lex[(uchar)*cur_str];\n\ if (cur_char>=8;\n\ if (cur_char>(uchar)cur_struct) return 0;\n\ @@ -453,20 +453,20 @@ static SYMBOL *get_hash_symbol(const char *s,\n\ }else{\n\ if (len>symbols_max_len) return 0;\n\ hash_map= symbols_map;\n\ - register uint32 cur_struct= uint4korr(hash_map+((len-1)*4));\n\ + uint32 cur_struct= uint4korr(hash_map+((len-1)*4));\n\ \n\ for (;;){\n\ - register uchar first_char= (uchar)cur_struct;\n\ + uchar first_char= (uchar)cur_struct;\n\ \n\ if (first_char==0){\n\ - register int16 ires= (int16)(cur_struct>>16);\n\ + int16 ires= (int16)(cur_struct>>16);\n\ if (ires==array_elements(symbols)) return 0;\n\ - register SYMBOL *res= symbols+ires;\n\ - register uint count= (uint) (cur_str - s);\n\ + SYMBOL *res= symbols+ires;\n\ + uint count= (uint) (cur_str - s);\n\ return lex_casecmp(cur_str,res->name+count,len-count)!=0 ? 0 : res;\n\ }\n\ \n\ - register uchar cur_char= (uchar)to_upper_lex[(uchar)*cur_str];\n\ + uchar cur_char= (uchar)to_upper_lex[(uchar)*cur_str];\n\ if (cur_char>=8;\n\ if (cur_char>(uchar)cur_struct) return 0;\n\ diff --git a/sql/handler.cc b/sql/handler.cc index 71a34ea9cee3..182d03f3cb16 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -2404,7 +2404,7 @@ int handler::ha_open(TABLE *table_arg, const char *name, int mode, */ int handler::read_first_row(uchar * buf, uint primary_key) { - register int error; + int error; DBUG_ENTER("handler::read_first_row"); ha_statistic_increment(&SSV::ha_read_first_count); diff --git a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc index b302440272e1..d0021c95cbe1 100644 --- a/sql/item_cmpfunc.cc +++ b/sql/item_cmpfunc.cc @@ -5223,8 +5223,8 @@ void Item_func_like::turboBM_compute_bad_character_shifts() bool Item_func_like::turboBM_matches(const char* text, int text_len) const { - register int bcShift; - register int turboShift; + int bcShift; + int turboShift; int shift = pattern_len; int j = 0; int u = 0; @@ -5238,7 +5238,7 @@ bool Item_func_like::turboBM_matches(const char* text, int text_len) const { while (j <= tlmpl) { - register int i= plm1; + int i= plm1; while (i >= 0 && pattern[i] == text[i + j]) { i--; @@ -5248,7 +5248,7 @@ bool Item_func_like::turboBM_matches(const char* text, int text_len) const if (i < 0) return 1; - register const int v = plm1 - i; + const int v = plm1 - i; turboShift = u - v; bcShift = bmBc[(uint) (uchar) text[i + j]] - plm1 + i; shift = max(turboShift, bcShift); @@ -5269,7 +5269,7 @@ bool Item_func_like::turboBM_matches(const char* text, int text_len) const { while (j <= tlmpl) { - register int i = plm1; + int i = plm1; while (i >= 0 && likeconv(cs,pattern[i]) == likeconv(cs,text[i + j])) { i--; @@ -5279,7 +5279,7 @@ bool Item_func_like::turboBM_matches(const char* text, int text_len) const if (i < 0) return 1; - register const int v = plm1 - i; + const int v = plm1 - i; turboShift = u - v; bcShift = bmBc[(uint) likeconv(cs, text[i + j])] - plm1 + i; shift = max(turboShift, bcShift); diff --git a/sql/item_func.cc b/sql/item_func.cc index e04b9eee7c7e..ac4e17133e0a 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -3001,8 +3001,8 @@ longlong Item_func_ord::val_int() #ifdef USE_MB if (use_mb(res->charset())) { - register const char *str=res->ptr(); - register uint32 n=0, l=my_ismbchar(res->charset(),str,str+res->length()); + const char *str=res->ptr(); + uint32 n=0, l=my_ismbchar(res->charset(),str,str+res->length()); if (!l) return (longlong)((uchar) *str); while (l--) diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc index e2a2ee1b6d8d..611135ee07e5 100644 --- a/sql/item_strfunc.cc +++ b/sql/item_strfunc.cc @@ -995,7 +995,7 @@ String *Item_func_reverse::val_str(String *str) #ifdef USE_MB if (use_mb(res->charset())) { - register uint32 l; + uint32 l; while (ptr < end) { if ((l= my_ismbchar(res->charset(),ptr,end))) @@ -1044,7 +1044,7 @@ String *Item_func_replace::val_str(String *str) bool alloced=0; #ifdef USE_MB const char *ptr,*end,*strend,*search,*search_end; - register uint32 l; + uint32 l; bool binary_cmp; #endif @@ -1096,7 +1096,7 @@ String *Item_func_replace::val_str(String *str) { if (*ptr == *search) { - register char *i,*j; + char *i,*j; i=(char*) ptr+1; j=(char*) search+1; while (j != search_end) if (*i++ != *j++) goto skip; @@ -1491,14 +1491,14 @@ String *Item_func_substr_index::val_str(String *str) const char *search= delimiter->ptr(); const char *search_end= search+delimiter_length; int32 n=0,c=count,pass; - register uint32 l; + uint32 l; for (pass=(count>0);pass<2;++pass) { while (ptr < end) { if (*ptr == *search) { - register char *i,*j; + char *i,*j; i=(char*) ptr+1; j=(char*) search+1; while (j != search_end) if (*i++ != *j++) goto skip; @@ -1712,7 +1712,7 @@ String *Item_func_rtrim::val_str(String *str) end= ptr+res->length(); #ifdef USE_MB char *p=ptr; - register uint32 l; + uint32 l; #endif if (remove_length == 1) { @@ -1797,7 +1797,7 @@ String *Item_func_trim::val_str(String *str) ptr= trim_left_mb(res, ptr, end, remove_str); char *p=ptr; - register uint32 l; + uint32 l; loop: while (ptr + remove_length < end) { diff --git a/sql/key.cc b/sql/key.cc index a05eb1b3a4be..181227245dd9 100644 --- a/sql/key.cc +++ b/sql/key.cc @@ -51,8 +51,8 @@ int find_ref_key(KEY *key, uint key_count, uchar *record, Field *field, uint *key_length, uint *keypart) { - reg2 int i; - reg3 KEY *key_info; + int i; + KEY *key_info; uint fieldpos; fieldpos= field->offset(record); @@ -483,7 +483,7 @@ int key_cmp(KEY_PART_INFO *key_part, const uchar *key, uint key_length) if (key_part->null_bit) { /* This key part allows null values; NULL is lower than everything */ - register bool field_is_null= key_part->field->is_null(); + bool field_is_null= key_part->field->is_null(); if (*key) // If range key is null { /* the range is expecting a null value */ diff --git a/sql/lock.cc b/sql/lock.cc index 65a51bfc0fb7..9348d9d759bc 100644 --- a/sql/lock.cc +++ b/sql/lock.cc @@ -342,7 +342,7 @@ MYSQL_LOCK *mysql_lock_tables(THD *thd, TABLE **tables, uint count, uint flags) static int lock_external(THD *thd, TABLE **tables, uint count) { - reg1 uint i; + uint i; int lock_type,error; DBUG_ENTER("lock_external"); @@ -477,7 +477,7 @@ void mysql_lock_remove(THD *thd, MYSQL_LOCK *locked,TABLE *table) { if (locked) { - reg1 uint i; + uint i; for (i=0; i < locked->table_count; i++) { if (locked->table[i] == table) diff --git a/sql/log.cc b/sql/log.cc index 11a7a9baec70..025a3f504c72 100644 --- a/sql/log.cc +++ b/sql/log.cc @@ -2208,7 +2208,7 @@ static int find_uniq_filename(char *name, ulong *next, bool need_next) uint i; char buff[FN_REFLEN], ext_buf[FN_REFLEN]; struct st_my_dir *dir_info; - reg1 struct fileinfo *file_info; + struct fileinfo *file_info; ulong max_found= 0, number= 0; size_t buf_length, length; char *start, *end; @@ -6402,10 +6402,10 @@ void MYSQL_BIN_LOG::set_max_size(ulong max_size_arg) 0 String is not a number */ -static bool test_if_number(register const char *str, +static bool test_if_number(const char *str, ulong *res, bool allow_wildcards) { - reg2 int flag; + int flag; const char *start; DBUG_ENTER("test_if_number"); diff --git a/sql/mf_iocache.cc b/sql/mf_iocache.cc index 17e406ab8a3e..cffd1e37457a 100644 --- a/sql/mf_iocache.cc +++ b/sql/mf_iocache.cc @@ -48,7 +48,7 @@ extern "C" { */ -int _my_b_net_read(register IO_CACHE *info, uchar *Buffer, +int _my_b_net_read(IO_CACHE *info, uchar *Buffer, size_t Count __attribute__((unused))) { ulong read_length; diff --git a/sql/password.c b/sql/password.c index afa514a6c53a..dcad4a84a7b2 100644 --- a/sql/password.c +++ b/sql/password.c @@ -118,7 +118,7 @@ double my_rnd(struct rand_struct *rand_st) void hash_password(ulong *result, const char *password, uint password_len) { - register ulong nr=1345345333L, add=7, nr2=0x12345671L; + ulong nr=1345345333L, add=7, nr2=0x12345671L; ulong tmp; const char *password_end= password + password_len; for (; password < password_end; password++) @@ -372,7 +372,7 @@ hex2octet(uint8 *to, const char *str, uint len) const char *str_end= str + len; while (str < str_end) { - register char tmp= char_val(*str++); + char tmp= char_val(*str++); *to++= (tmp << 4) | char_val(*str++); } } diff --git a/sql/records.cc b/sql/records.cc index 14a4390b2297..967ef9438394 100644 --- a/sql/records.cc +++ b/sql/records.cc @@ -607,7 +607,7 @@ static int init_rr_cache(THD *thd, READ_RECORD *info) static int rr_from_cache(READ_RECORD *info) { - reg1 uint i; + uint i; ulong length; my_off_t rest_of_file; int16 error; diff --git a/sql/slave.cc b/sql/slave.cc index 33bbca8a6e7c..4e366e1355ac 100644 --- a/sql/slave.cc +++ b/sql/slave.cc @@ -216,7 +216,7 @@ static void set_slave_max_allowed_packet(THD *thd, MYSQL *mysql) void init_thread_mask(int* mask,Master_info* mi,bool inverse) { bool set_io = mi->slave_running, set_sql = mi->rli.slave_running; - register int tmp_mask=0; + int tmp_mask=0; DBUG_ENTER("init_thread_mask"); if (set_io) diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc index 7d982200dbd0..c5808826c082 100644 --- a/sql/sql_acl.cc +++ b/sql/sql_acl.cc @@ -8219,7 +8219,7 @@ my_bool acl_is_utility_user(const char *user, const char *host, int wild_case_compare(CHARSET_INFO *cs, const char *str,const char *wildstr) { - reg3 int flag; + int flag; DBUG_ENTER("wild_case_compare"); DBUG_PRINT("enter",("str: '%s' wildstr: '%s'",str,wildstr)); while (*wildstr) diff --git a/sql/sql_base.cc b/sql/sql_base.cc index 972ca50b9ecf..280d0ffd56b3 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -2695,7 +2695,7 @@ tdc_wait_for_old_version(THD *thd, const char *db, const char *table_name, bool open_table(THD *thd, TABLE_LIST *table_list, MEM_ROOT *mem_root, Open_table_context *ot_ctx) { - reg1 TABLE *table; + TABLE *table; char key[MAX_DBKEY_LENGTH]; uint key_length; char *alias= table_list->alias; @@ -8005,7 +8005,7 @@ bool setup_fields(THD *thd, Item **ref_pointer_array, List &fields, enum_mark_columns mark_used_columns, List *sum_func_list, bool allow_sum_func) { - reg2 Item *item; + Item *item; enum_mark_columns save_mark_used_columns= thd->mark_used_columns; nesting_map save_allow_sum_func= thd->lex->allow_sum_func; List_iterator it(fields); diff --git a/sql/sql_class.h b/sql/sql_class.h index e90eb9857870..68e7cacfd096 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -3729,7 +3729,7 @@ class Unique :public Sql_alloc inline static int get_cost_calc_buff_size(ulong nkeys, uint key_size, ulonglong max_in_memory_size) { - register ulonglong max_elems_in_tree= + ulonglong max_elems_in_tree= (max_in_memory_size / ALIGN_SIZE(sizeof(TREE_ELEMENT)+key_size)); return (int) (sizeof(uint)*(1 + nkeys/max_elems_in_tree)); } diff --git a/sql/sql_db.cc b/sql/sql_db.cc index 7a59531bd6c0..e2a09263618f 100644 --- a/sql/sql_db.cc +++ b/sql/sql_db.cc @@ -312,7 +312,7 @@ static void del_dbopt(const char *path) static bool write_db_opt(THD *thd, const char *path, HA_CREATE_INFO *create) { - register File file; + File file; char buf[256]; // Should be enough for one option bool error=1; diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index 60cb0db7d3a4..e12e8b18b48a 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -86,7 +86,7 @@ static int write_delayed(THD *thd, TABLE *table, enum_duplicates duplic, LEX_STRING query, bool ignore, bool log_on); static void end_delayed_insert(THD *thd); pthread_handler_t handle_delayed_insert(void *arg); -static void unlink_blobs(register TABLE *table); +static void unlink_blobs(TABLE *table); #endif static bool check_view_insertability(THD *thd, TABLE_LIST *view); @@ -2897,7 +2897,7 @@ pthread_handler_t handle_delayed_insert(void *arg) /* Remove pointers from temporary fields to allocated values */ -static void unlink_blobs(register TABLE *table) +static void unlink_blobs(TABLE *table) { for (Field **ptr=table->field ; *ptr ; ptr++) { @@ -2908,7 +2908,7 @@ static void unlink_blobs(register TABLE *table) /* Free blobs stored in current row */ -static void free_delayed_insert_blobs(register TABLE *table) +static void free_delayed_insert_blobs(TABLE *table) { for (Field **ptr=table->field ; *ptr ; ptr++) { diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index e597de901e2e..a9eedcae68ac 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -600,7 +600,7 @@ static LEX_STRING get_quoted_token(Lex_input_stream *lip, static char *get_text(Lex_input_stream *lip, int pre_skip, int post_skip) { - reg1 uchar c,sep; + uchar c,sep; uint found_escape=0; CHARSET_INFO *cs= lip->m_thd->charset(); @@ -830,7 +830,7 @@ static inline uint int_token(const char *str,uint length) */ bool consume_comment(Lex_input_stream *lip, int remaining_recursions_permitted) { - reg1 uchar c; + uchar c; while (! lip->eof()) { c= lip->yyGet(); @@ -927,9 +927,9 @@ int MYSQLlex(YYSTYPE *yylval, THD *thd) static int lex_one_token(YYSTYPE *yylval, THD *thd) { - reg1 uchar c= 0; + uchar c= 0; bool comment_closed; - int tokval, result_state; + int tokval, result_state; uint length; enum my_lex_states state; Lex_input_stream *lip= & thd->m_parser_state->m_lip; diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 711e42bb06b4..3447a0256525 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -6241,7 +6241,7 @@ bool add_field_to_list(THD *thd, LEX_STRING *field_name, enum_field_types type, List *interval_list, CHARSET_INFO *cs, uint uint_geom_type) { - register Create_field *new_field; + Create_field *new_field; LEX *lex= thd->lex; DBUG_ENTER("add_field_to_list"); @@ -6397,7 +6397,7 @@ TABLE_LIST *st_select_lex::add_table_to_list(THD *thd, List *index_hints_arg, LEX_STRING *option) { - register TABLE_LIST *ptr; + TABLE_LIST *ptr; TABLE_LIST *previous_table_ref; /* The table preceding the current one. */ char *alias_str; LEX *lex= thd->lex; diff --git a/sql/sql_prepare.cc b/sql/sql_prepare.cc index 07faaad15cce..a05f6a041970 100644 --- a/sql/sql_prepare.cc +++ b/sql/sql_prepare.cc @@ -398,7 +398,7 @@ static bool send_prep_stmt(Prepared_statement *stmt, static ulong get_param_length(uchar **packet, ulong len) { - reg1 uchar *pos= *packet; + uchar *pos= *packet; if (len < 1) return 0; if (*pos < 251) diff --git a/sql/sql_select.cc b/sql/sql_select.cc index db8987dc8b5b..dbc897a8b97e 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -276,7 +276,7 @@ bool handle_select(THD *thd, LEX *lex, select_result *result, #if defined(__linux__) pid_t pid; #endif - register SELECT_LEX *select_lex = &lex->select_lex; + SELECT_LEX *select_lex = &lex->select_lex; DBUG_ENTER("handle_select"); #if defined(__linux__) if(lex->disable_flashcache && cachedev_fd > 0) @@ -14814,7 +14814,7 @@ SORT_FIELD *make_unireg_sortorder(ORDER *order, uint *length, static int join_init_cache(THD *thd,JOIN_TAB *tables,uint table_count) { - reg1 uint i; + uint i; uint length, blobs; size_t size; CACHE_FIELD *copy,**blob_ptr; @@ -17159,7 +17159,7 @@ static void select_describe(JOIN *join, bool need_tmp_table, bool need_order, if (tab->ref.key_parts) { KEY *key_info=table->key_info+ tab->ref.key; - register uint length; + uint length; item_list.push_back(new Item_string(key_info->name, strlen(key_info->name), system_charset_info)); @@ -17179,7 +17179,7 @@ static void select_describe(JOIN *join, bool need_tmp_table, bool need_order, else if (tab->type == JT_NEXT) { KEY *key_info=table->key_info+ tab->index; - register uint length; + uint length; item_list.push_back(new Item_string(key_info->name, strlen(key_info->name),cs)); length= longlong2str(key_info->key_length, keylen_str_buf, 10) - diff --git a/sql/sql_string.cc b/sql/sql_string.cc index f679ae7dc343..dcb2bedaaf16 100644 --- a/sql/sql_string.cc +++ b/sql/sql_string.cc @@ -617,8 +617,8 @@ int String::strstr(const String &s,uint32 offset) if (!s.length()) return ((int) offset); // Empty string is always found - register const char *str = Ptr+offset; - register const char *search=s.ptr(); + const char *str = Ptr+offset; + const char *search=s.ptr(); const char *end=Ptr+str_length-s.length()+1; const char *search_end=s.ptr()+s.length(); skip: @@ -626,7 +626,7 @@ int String::strstr(const String &s,uint32 offset) { if (*str++ == *search) { - register char *i,*j; + char *i,*j; i=(char*) str; j=(char*) search+1; while (j != search_end) if (*i++ != *j++) goto skip; @@ -647,8 +647,8 @@ int String::strrstr(const String &s,uint32 offset) { if (!s.length()) return offset; // Empty string is always found - register const char *str = Ptr+offset-1; - register const char *search=s.ptr()+s.length()-1; + const char *str = Ptr+offset-1; + const char *search=s.ptr()+s.length()-1; const char *end=Ptr+s.length()-2; const char *search_end=s.ptr()-1; @@ -657,7 +657,7 @@ int String::strrstr(const String &s,uint32 offset) { if (*str-- == *search) { - register char *i,*j; + char *i,*j; i=(char*) str; j=(char*) search-1; while (j != search_end) if (*i-- != *j--) goto skip; diff --git a/sql/table.cc b/sql/table.cc index 743e5872a183..dcc3fc45cf08 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -2154,7 +2154,7 @@ int open_table_from_share(THD *thd, TABLE_SHARE *share, const char *alias, free_share Is 1 if we also want to free table_share */ -int closefrm(register TABLE *table, bool free_share) +int closefrm(TABLE *table, bool free_share) { int error=0; DBUG_ENTER("closefrm"); @@ -2194,7 +2194,7 @@ int closefrm(register TABLE *table, bool free_share) /* Deallocate temporary blob storage */ -void free_blobs(register TABLE *table) +void free_blobs(TABLE *table) { uint *ptr, *end; for (ptr= table->s->blob_field, end=ptr + table->s->blob_fields ; @@ -2549,7 +2549,7 @@ static uint find_field(Field **fields, uchar *record, uint start, uint length) /* Check that the integer is in the internal */ -int set_zone(register int nr, int min_zone, int max_zone) +int set_zone(int nr, int min_zone, int max_zone) { if (nr<=min_zone) return (min_zone); @@ -2560,9 +2560,9 @@ int set_zone(register int nr, int min_zone, int max_zone) /* Adjust number to next larger disk buffer */ -ulong next_io_size(register ulong pos) +ulong next_io_size(ulong pos) { - reg2 ulong offset; + ulong offset; if ((offset= pos & (IO_SIZE-1))) return pos-offset+IO_SIZE; return pos; @@ -2637,7 +2637,7 @@ File create_frm(THD *thd, const char *name, const char *db, const char *table, uint reclength, uchar *fileinfo, HA_CREATE_INFO *create_info, uint keys, KEY *key_info) { - register File file; + File file; ulong length; uchar fill[IO_SIZE]; int create_flags= O_RDWR | O_TRUNC; diff --git a/sql/uniques.cc b/sql/uniques.cc index 71e680682cd7..65780244cfb3 100644 --- a/sql/uniques.cc +++ b/sql/uniques.cc @@ -175,7 +175,7 @@ static double get_merge_many_buffs_cost(uint *buffer, uint maxbuffer, uint max_n_elems, uint last_n_elems, int elem_size) { - register int i; + int i; double total_cost= 0.0; uint *buff_elems= buffer; /* #s of elements in each of merged sequences */ diff --git a/sql/unireg.cc b/sql/unireg.cc index d2c4c41c1795..caf03b663059 100644 --- a/sql/unireg.cc +++ b/sql/unireg.cc @@ -564,7 +564,7 @@ static uchar *pack_screens(List &create_fields, uint *info_length, uint *screens, bool small_file) { - reg1 uint i; + uint i; uint row,start_row,end_row,fields_on_screen; uint length,cols; uchar *info,*pos,*start_screen; @@ -921,7 +921,7 @@ static uint get_interval_id(uint *int_count,List &create_fields, static bool pack_fields(File file, List &create_fields, ulong data_offset) { - reg2 uint i; + uint i; uint int_count, comment_length=0; uchar buff[MAX_FIELD_WIDTH]; Create_field *field; diff --git a/storage/heap/_rectest.c b/storage/heap/_rectest.c index b232908c0613..2fd974a58c8b 100644 --- a/storage/heap/_rectest.c +++ b/storage/heap/_rectest.c @@ -19,7 +19,7 @@ #include "heapdef.h" -int hp_rectest(register HP_INFO *info, register const uchar *old) +int hp_rectest(HP_INFO *info, const uchar *old) { DBUG_ENTER("hp_rectest"); diff --git a/storage/heap/heapdef.h b/storage/heap/heapdef.h index ccfecd46f0b4..d1d95b3bed82 100644 --- a/storage/heap/heapdef.h +++ b/storage/heap/heapdef.h @@ -109,7 +109,7 @@ extern uint hp_rb_key_length(HP_KEYDEF *keydef, const uchar *key); extern uint hp_rb_null_key_length(HP_KEYDEF *keydef, const uchar *key); extern uint hp_rb_var_key_length(HP_KEYDEF *keydef, const uchar *key); extern my_bool hp_if_null_in_key(HP_KEYDEF *keyinfo, const uchar *record); -extern int hp_close(register HP_INFO *info); +extern int hp_close(HP_INFO *info); extern void hp_clear(HP_SHARE *info); extern void hp_clear_keys(HP_SHARE *info); extern uint hp_rb_pack_key(HP_KEYDEF *keydef, uchar *key, const uchar *old, diff --git a/storage/heap/hp_block.c b/storage/heap/hp_block.c index f16b30aa47ac..1a78a25a1e06 100644 --- a/storage/heap/hp_block.c +++ b/storage/heap/hp_block.c @@ -28,8 +28,8 @@ uchar *hp_find_block(HP_BLOCK *block, ulong pos) { - reg1 int i; - reg3 HP_PTRS *ptr; /* block base ptr */ + int i; + HP_PTRS *ptr; /* block base ptr */ for (i=block->levels-1, ptr=block->root ; i > 0 ; i--) { @@ -56,7 +56,7 @@ uchar *hp_find_block(HP_BLOCK *block, ulong pos) int hp_get_new_block(HP_BLOCK *block, size_t *alloc_length) { - reg1 uint i,j; + uint i,j; HP_PTRS *root; for (i=0 ; i < block->levels ; i++) diff --git a/storage/heap/hp_close.c b/storage/heap/hp_close.c index 680fca51e693..2e61e5340be3 100644 --- a/storage/heap/hp_close.c +++ b/storage/heap/hp_close.c @@ -31,7 +31,7 @@ int heap_close(HP_INFO *info) } -int hp_close(register HP_INFO *info) +int hp_close(HP_INFO *info) { int error=0; DBUG_ENTER("hp_close"); diff --git a/storage/heap/hp_create.c b/storage/heap/hp_create.c index 3ec1238877ce..bdb7f5ce6d46 100644 --- a/storage/heap/hp_create.c +++ b/storage/heap/hp_create.c @@ -438,7 +438,7 @@ static inline void heap_try_free(HP_SHARE *share) int heap_delete_table(const char *name) { int result; - reg1 HP_SHARE *share; + HP_SHARE *share; DBUG_ENTER("heap_delete_table"); mysql_mutex_lock(&THR_LOCK_heap); diff --git a/storage/heap/hp_delete.c b/storage/heap/hp_delete.c index 167a03809dea..395da250f5d6 100644 --- a/storage/heap/hp_delete.c +++ b/storage/heap/hp_delete.c @@ -62,7 +62,7 @@ int heap_delete(HP_INFO *info, const uchar *record) Remove one key from rb-tree */ -int hp_rb_delete_key(HP_INFO *info, register HP_KEYDEF *keyinfo, +int hp_rb_delete_key(HP_INFO *info, HP_KEYDEF *keyinfo, const uchar *record, uchar *recpos, int flag) { heap_rb_param custom_arg; @@ -100,7 +100,7 @@ int hp_rb_delete_key(HP_INFO *info, register HP_KEYDEF *keyinfo, other Error code */ -int hp_delete_key(HP_INFO *info, register HP_KEYDEF *keyinfo, +int hp_delete_key(HP_INFO *info, HP_KEYDEF *keyinfo, const uchar *record, uchar *recpos, int flag) { ulong blength, pos2, pos_hashnr, lastpos_hashnr, key_pos; diff --git a/storage/heap/hp_extra.c b/storage/heap/hp_extra.c index 367b9eb25570..2aa099e6eadc 100644 --- a/storage/heap/hp_extra.c +++ b/storage/heap/hp_extra.c @@ -21,13 +21,13 @@ #include "heapdef.h" -static void heap_extra_keyflag(register HP_INFO *info, +static void heap_extra_keyflag(HP_INFO *info, enum ha_extra_function function); /* set extra flags for database */ -int heap_extra(register HP_INFO *info, enum ha_extra_function function) +int heap_extra(HP_INFO *info, enum ha_extra_function function) { DBUG_ENTER("heap_extra"); @@ -65,7 +65,7 @@ int heap_reset(HP_INFO *info) /* Start/Stop Inserting Duplicates Into a Table, WL#1648. */ -static void heap_extra_keyflag(register HP_INFO *info, +static void heap_extra_keyflag(HP_INFO *info, enum ha_extra_function function) { uint idx; diff --git a/storage/heap/hp_hash.c b/storage/heap/hp_hash.c index 3631d6b83f0f..5d52dbf583e3 100644 --- a/storage/heap/hp_hash.c +++ b/storage/heap/hp_hash.c @@ -100,7 +100,7 @@ ha_rows hp_rb_records_in_range(HP_INFO *info, int inx, key_range *min_key, uchar *hp_search(HP_INFO *info, HP_KEYDEF *keyinfo, const uchar *key, uint nextflag) { - reg1 HASH_INFO *pos,*prev_ptr; + HASH_INFO *pos,*prev_ptr; int flag; uint old_nextflag; HP_SHARE *share=info->s; @@ -238,7 +238,7 @@ void hp_movelink(HASH_INFO *pos, HASH_INFO *next_link, HASH_INFO *newlink) /* Calc hashvalue for a key */ -ulong hp_hashnr(register HP_KEYDEF *keydef, register const uchar *key) +ulong hp_hashnr(HP_KEYDEF *keydef, const uchar *key) { /*register*/ ulong nr=1, nr2=4; @@ -304,7 +304,7 @@ ulong hp_hashnr(register HP_KEYDEF *keydef, register const uchar *key) /* Calc hashvalue for a key in a record */ -ulong hp_rec_hashnr(register HP_KEYDEF *keydef, register const uchar *rec) +ulong hp_rec_hashnr(HP_KEYDEF *keydef, const uchar *rec) { ulong nr=1, nr2=4; HA_KEYSEG *seg,*endseg; @@ -387,7 +387,7 @@ ulong hp_rec_hashnr(register HP_KEYDEF *keydef, register const uchar *rec) * far, and works well on both numbers and strings. */ -ulong hp_hashnr(register HP_KEYDEF *keydef, register const uchar *key) +ulong hp_hashnr(HP_KEYDEF *keydef, const uchar *key) { /* Note, if a key consists of a combination of numeric and @@ -443,7 +443,7 @@ ulong hp_hashnr(register HP_KEYDEF *keydef, register const uchar *key) /* Calc hashvalue for a key in a record */ -ulong hp_rec_hashnr(register HP_KEYDEF *keydef, register const uchar *rec) +ulong hp_rec_hashnr(HP_KEYDEF *keydef, const uchar *rec) { ulong nr= 1, nr2= 4; HA_KEYSEG *seg,*endseg; diff --git a/storage/heap/hp_info.c b/storage/heap/hp_info.c index ed6fe06a9b34..af0618f0807b 100644 --- a/storage/heap/hp_info.c +++ b/storage/heap/hp_info.c @@ -43,7 +43,7 @@ ulong heap_position_old(HP_INFO *info) /* Note that heap_info does NOT return information about the current position anymore; Use heap_position instead */ -int heap_info(reg1 HP_INFO *info,reg2 HEAPINFO *x, int flag ) +int heap_info(HP_INFO *info,HEAPINFO *x, int flag ) { DBUG_ENTER("heap_info"); x->records = info->s->records; diff --git a/storage/heap/hp_rename.c b/storage/heap/hp_rename.c index 34c8218e3876..b4561de5b01c 100644 --- a/storage/heap/hp_rename.c +++ b/storage/heap/hp_rename.c @@ -21,7 +21,7 @@ int heap_rename(const char *old_name, const char *new_name) { - reg1 HP_SHARE *info; + HP_SHARE *info; char *name_buff; DBUG_ENTER("heap_rename"); diff --git a/storage/heap/hp_rrnd.c b/storage/heap/hp_rrnd.c index 32f9a20851ce..65a12e679d15 100644 --- a/storage/heap/hp_rrnd.c +++ b/storage/heap/hp_rrnd.c @@ -25,7 +25,7 @@ HA_ERR_END_OF_FILE = EOF. */ -int heap_rrnd(register HP_INFO *info, uchar *record, uchar *pos) +int heap_rrnd(HP_INFO *info, uchar *record, uchar *pos) { HP_SHARE *share=info->s; DBUG_ENTER("heap_rrnd"); @@ -65,7 +65,7 @@ int heap_rrnd(register HP_INFO *info, uchar *record, uchar *pos) HA_ERR_END_OF_FILE = EOF. */ -int heap_rrnd_old(register HP_INFO *info, uchar *record, ulong pos) +int heap_rrnd_old(HP_INFO *info, uchar *record, ulong pos) { HP_SHARE *share=info->s; DBUG_ENTER("heap_rrnd"); diff --git a/storage/heap/hp_rsame.c b/storage/heap/hp_rsame.c index fe7e1ff72702..1a9b4cf30cd3 100644 --- a/storage/heap/hp_rsame.c +++ b/storage/heap/hp_rsame.c @@ -26,7 +26,7 @@ HA_ERR_KEY_NOT_FOUND = Record not found with key */ -int heap_rsame(register HP_INFO *info, uchar *record, int inx) +int heap_rsame(HP_INFO *info, uchar *record, int inx) { HP_SHARE *share=info->s; DBUG_ENTER("heap_rsame"); diff --git a/storage/heap/hp_scan.c b/storage/heap/hp_scan.c index a30d54e6059c..8f52e5f216a3 100644 --- a/storage/heap/hp_scan.c +++ b/storage/heap/hp_scan.c @@ -25,7 +25,7 @@ HA_ERR_END_OF_FILE = EOF. */ -int heap_scan_init(register HP_INFO *info) +int heap_scan_init(HP_INFO *info) { DBUG_ENTER("heap_scan_init"); info->lastinx= -1; @@ -34,7 +34,7 @@ int heap_scan_init(register HP_INFO *info) DBUG_RETURN(0); } -int heap_scan(register HP_INFO *info, uchar *record) +int heap_scan(HP_INFO *info, uchar *record) { HP_SHARE *share=info->s; ulong pos; diff --git a/storage/heap/hp_test2.c b/storage/heap/hp_test2.c index 3272f6178da8..8040dc842e35 100644 --- a/storage/heap/hp_test2.c +++ b/storage/heap/hp_test2.c @@ -42,7 +42,7 @@ static void make_record(uchar *record, uint n1, uint n2, uint n3, int main(int argc, char *argv[]) { - register uint i,j; + uint i,j; uint ant,n1,n2,n3; uint write_count,update,opt_delete,check2,dupp_keys,found_key; int error; diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index b2a828c1f2e4..7ad59e41470e 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -5832,7 +5832,7 @@ build_template( if (UNIV_LIKELY(templ_type == ROW_MYSQL_REC_FIELDS)) { /* Decide which columns we should fetch and which we can skip. */ - register const ibool index_contains_field = + const ibool index_contains_field = dict_index_contains_col_or_prefix(index, i); if (!index_contains_field && prebuilt->read_just_key) { diff --git a/storage/innobase/handler/ha_innodb.h b/storage/innobase/handler/ha_innodb.h index 4f21dcff7e80..aaf897afdf8b 100644 --- a/storage/innobase/handler/ha_innodb.h +++ b/storage/innobase/handler/ha_innodb.h @@ -183,7 +183,7 @@ class ha_innobase: public handler ha_rows estimate_rows_upper_bound(); void update_create_info(HA_CREATE_INFO* create_info); - int create(const char *name, register TABLE *form, + int create(const char *name, TABLE *form, HA_CREATE_INFO *create_info); int truncate(); int delete_table(const char *name); diff --git a/storage/myisam/ft_update.c b/storage/myisam/ft_update.c index 19144ff01fbb..85a7e814ab0a 100644 --- a/storage/myisam/ft_update.c +++ b/storage/myisam/ft_update.c @@ -52,7 +52,7 @@ void _mi_ft_segiterator_dummy_init(const uchar *record, uint len, so "1" means "OK", "0" means "EOF" */ -uint _mi_ft_segiterator(register FT_SEG_ITERATOR *ftsi) +uint _mi_ft_segiterator(FT_SEG_ITERATOR *ftsi) { DBUG_ENTER("_mi_ft_segiterator"); diff --git a/storage/myisam/ha_myisam.cc b/storage/myisam/ha_myisam.cc index faf421d95f2d..686b7ceafeab 100644 --- a/storage/myisam/ha_myisam.cc +++ b/storage/myisam/ha_myisam.cc @@ -1990,7 +1990,7 @@ void ha_myisam::update_create_info(HA_CREATE_INFO *create_info) } -int ha_myisam::create(const char *name, register TABLE *table_arg, +int ha_myisam::create(const char *name, TABLE *table_arg, HA_CREATE_INFO *ha_create_info) { int error; diff --git a/storage/myisam/mi_close.c b/storage/myisam/mi_close.c index 53574a110607..9ce2cfb51412 100644 --- a/storage/myisam/mi_close.c +++ b/storage/myisam/mi_close.c @@ -22,7 +22,7 @@ #include "myisamdef.h" -int mi_close(register MI_INFO *info) +int mi_close(MI_INFO *info) { int error=0,flag; MYISAM_SHARE *share=info->s; diff --git a/storage/myisam/mi_create.c b/storage/myisam/mi_create.c index 654eca0a10d3..828e7ada8526 100644 --- a/storage/myisam/mi_create.c +++ b/storage/myisam/mi_create.c @@ -34,7 +34,7 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs, uint uniques, MI_UNIQUEDEF *uniquedefs, MI_CREATE_INFO *ci,uint flags) { - register uint i,j; + uint i,j; File UNINIT_VAR(dfile), UNINIT_VAR(file); int errpos,save_errno, create_mode= O_RDWR | O_TRUNC; myf create_flag; diff --git a/storage/myisam/mi_dbug.c b/storage/myisam/mi_dbug.c index d8d2273d9781..1341a7bacbce 100644 --- a/storage/myisam/mi_dbug.c +++ b/storage/myisam/mi_dbug.c @@ -19,7 +19,7 @@ /* Print a key in user understandable format */ -void _mi_print_key(FILE *stream, register HA_KEYSEG *keyseg, +void _mi_print_key(FILE *stream, HA_KEYSEG *keyseg, const uchar *key, uint length) { int flag; diff --git a/storage/myisam/mi_delete.c b/storage/myisam/mi_delete.c index de1026aa9134..9dc281f97f39 100644 --- a/storage/myisam/mi_delete.c +++ b/storage/myisam/mi_delete.c @@ -28,7 +28,7 @@ static int underflow(MI_INFO *info,MI_KEYDEF *keyinfo,uchar *anc_buff, static uint remove_key(MI_KEYDEF *keyinfo,uint nod_flag,uchar *keypos, uchar *lastkey,uchar *page_end, my_off_t *next_block); -static int _mi_ck_real_delete(register MI_INFO *info,MI_KEYDEF *keyinfo, +static int _mi_ck_real_delete(MI_INFO *info,MI_KEYDEF *keyinfo, uchar *key, uint key_length, my_off_t *root); @@ -135,7 +135,7 @@ int mi_delete(MI_INFO *info,const uchar *record) /* Remove a key from the btree index */ -int _mi_ck_delete(register MI_INFO *info, uint keynr, uchar *key, +int _mi_ck_delete(MI_INFO *info, uint keynr, uchar *key, uint key_length) { return _mi_ck_real_delete(info, info->s->keyinfo+keynr, key, key_length, @@ -143,7 +143,7 @@ int _mi_ck_delete(register MI_INFO *info, uint keynr, uchar *key, } /* _mi_ck_delete */ -static int _mi_ck_real_delete(register MI_INFO *info, MI_KEYDEF *keyinfo, +static int _mi_ck_real_delete(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *key, uint key_length, my_off_t *root) { int error; @@ -211,7 +211,7 @@ static int _mi_ck_real_delete(register MI_INFO *info, MI_KEYDEF *keyinfo, ** -1 on errors */ -static int d_search(register MI_INFO *info, register MI_KEYDEF *keyinfo, +static int d_search(MI_INFO *info, MI_KEYDEF *keyinfo, uint comp_flag, uchar *key, uint key_length, my_off_t page, uchar *anc_buff) { @@ -399,7 +399,7 @@ static int d_search(register MI_INFO *info, register MI_KEYDEF *keyinfo, /* Remove a key that has a page-reference */ -static int del(register MI_INFO *info, register MI_KEYDEF *keyinfo, uchar *key, +static int del(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *key, uchar *anc_buff, my_off_t leaf_page, uchar *leaf_buff, uchar *keypos, /* Pos to where deleted key was */ my_off_t next_block, @@ -502,7 +502,7 @@ static int del(register MI_INFO *info, register MI_KEYDEF *keyinfo, uchar *key, /* Balances adjacent pages if underflow occours */ -static int underflow(register MI_INFO *info, register MI_KEYDEF *keyinfo, +static int underflow(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *anc_buff, my_off_t leaf_page,/* Ancestor page and underflow page */ uchar *leaf_buff, diff --git a/storage/myisam/mi_dynrec.c b/storage/myisam/mi_dynrec.c index 6acee89b0a8d..c9327b777a7f 100644 --- a/storage/myisam/mi_dynrec.c +++ b/storage/myisam/mi_dynrec.c @@ -965,13 +965,13 @@ static int update_dynamic_record(MI_INFO *info, my_off_t filepos, uchar *record, /* Pack a record. Return new reclength */ -uint _mi_rec_pack(MI_INFO *info, register uchar *to, - register const uchar *from) +uint _mi_rec_pack(MI_INFO *info, uchar *to, + const uchar *from) { uint length,new_length,flag,bit,i; uchar *pos,*end,*startpos,*packpos; enum en_fieldtype type; - reg3 MI_COLUMNDEF *rec; + MI_COLUMNDEF *rec; MI_BLOB *blob; DBUG_ENTER("_mi_rec_pack"); @@ -1097,7 +1097,7 @@ my_bool _mi_rec_check(MI_INFO *info,const uchar *record, uchar *rec_buff, uint length,new_length,flag,bit,i; uchar *pos,*end,*packpos,*to; enum en_fieldtype type; - reg3 MI_COLUMNDEF *rec; + MI_COLUMNDEF *rec; DBUG_ENTER("_mi_rec_check"); packpos=rec_buff; to= rec_buff+info->s->base.pack_bits; @@ -1215,13 +1215,13 @@ my_bool _mi_rec_check(MI_INFO *info,const uchar *record, uchar *rec_buff, /* Returns -1 and my_errno =HA_ERR_RECORD_DELETED if reclength isn't */ /* right. Returns reclength (>0) if ok */ -ulong _mi_rec_unpack(register MI_INFO *info, register uchar *to, uchar *from, +ulong _mi_rec_unpack(MI_INFO *info, uchar *to, uchar *from, ulong found_length) { uint flag,bit,length,rec_length,min_pack_length; enum en_fieldtype type; uchar *from_end,*to_end,*packpos; - reg3 MI_COLUMNDEF *rec,*end_field; + MI_COLUMNDEF *rec,*end_field; DBUG_ENTER("_mi_rec_unpack"); to_end=to + info->s->base.reclength; @@ -1569,7 +1569,7 @@ int _mi_cmp_dynamic_unique(MI_INFO *info, MI_UNIQUEDEF *def, /* Compare of record one disk with packed record in memory */ -int _mi_cmp_dynamic_record(register MI_INFO *info, register const uchar *record) +int _mi_cmp_dynamic_record(MI_INFO *info, const uchar *record) { uint flag,reclength,b_type; my_off_t filepos; @@ -1709,7 +1709,7 @@ static int _mi_cmp_buffer(File file, const uchar *buff, my_off_t filepos, */ int _mi_read_rnd_dynamic_record(MI_INFO *info, uchar *buf, - register my_off_t filepos, + my_off_t filepos, my_bool skip_deleted_blocks) { int block_of_record, info_read, save_errno; diff --git a/storage/myisam/mi_info.c b/storage/myisam/mi_info.c index 3b9288eeb838..b3b87221c8da 100644 --- a/storage/myisam/mi_info.c +++ b/storage/myisam/mi_info.c @@ -32,7 +32,7 @@ my_off_t mi_position(MI_INFO *info) /* Get information about the table */ /* if flag == 2 one get current info (no sync from database */ -int mi_status(MI_INFO *info, register MI_ISAMINFO *x, uint flag) +int mi_status(MI_INFO *info, MI_ISAMINFO *x, uint flag) { MY_STAT state; MYISAM_SHARE *share=info->s; diff --git a/storage/myisam/mi_locking.c b/storage/myisam/mi_locking.c index 4a33e838fb93..eab4aa2cf18e 100644 --- a/storage/myisam/mi_locking.c +++ b/storage/myisam/mi_locking.c @@ -391,7 +391,7 @@ my_bool mi_check_status(void *param) ** functions to read / write the state ****************************************************************************/ -int _mi_readinfo(register MI_INFO *info, int lock_type, int check_keybuffer) +int _mi_readinfo(MI_INFO *info, int lock_type, int check_keybuffer) { DBUG_ENTER("_mi_readinfo"); @@ -430,7 +430,7 @@ int _mi_readinfo(register MI_INFO *info, int lock_type, int check_keybuffer) request */ -int _mi_writeinfo(register MI_INFO *info, uint operation) +int _mi_writeinfo(MI_INFO *info, uint operation) { int error,olderror; MYISAM_SHARE *share=info->s; @@ -474,7 +474,7 @@ int _mi_writeinfo(register MI_INFO *info, uint operation) /* Test if someone has changed the database */ /* (Should be called after readinfo) */ -int _mi_test_if_changed(register MI_INFO *info) +int _mi_test_if_changed(MI_INFO *info) { MYISAM_SHARE *share=info->s; if (share->state.process != share->last_process || @@ -519,7 +519,7 @@ int _mi_test_if_changed(register MI_INFO *info) int _mi_mark_file_changed(MI_INFO *info) { uchar buff[3]; - register MYISAM_SHARE *share=info->s; + MYISAM_SHARE *share=info->s; DBUG_ENTER("_mi_mark_file_changed"); if (!(share->state.changed & STATE_CHANGED) || ! share->global_changed) @@ -552,7 +552,7 @@ int _mi_mark_file_changed(MI_INFO *info) int _mi_decrement_open_count(MI_INFO *info) { uchar buff[2]; - register MYISAM_SHARE *share=info->s; + MYISAM_SHARE *share=info->s; int lock_error=0,write_error=0; if (share->global_changed) { diff --git a/storage/myisam/mi_open.c b/storage/myisam/mi_open.c index def80269fab2..9cc7c464ffbf 100644 --- a/storage/myisam/mi_open.c +++ b/storage/myisam/mi_open.c @@ -767,7 +767,7 @@ ulonglong mi_safe_mul(ulonglong a, ulonglong b) /* Set up functions in structs */ -void mi_setup_functions(register MYISAM_SHARE *share) +void mi_setup_functions(MYISAM_SHARE *share) { if (share->options & HA_OPTION_COMPRESS_RECORD) { @@ -821,7 +821,7 @@ void mi_setup_functions(register MYISAM_SHARE *share) } -static void setup_key_functions(register MI_KEYDEF *keyinfo) +static void setup_key_functions(MI_KEYDEF *keyinfo) { if (keyinfo->key_alg == HA_KEY_ALG_RTREE) { diff --git a/storage/myisam/mi_packrec.c b/storage/myisam/mi_packrec.c index 8548b3ebd946..a31a219be49d 100644 --- a/storage/myisam/mi_packrec.c +++ b/storage/myisam/mi_packrec.c @@ -731,11 +731,11 @@ int _mi_read_pack_record(MI_INFO *info, my_off_t filepos, uchar *buf) -int _mi_pack_rec_unpack(register MI_INFO *info, MI_BIT_BUFF *bit_buff, - register uchar *to, uchar *from, ulong reclength) +int _mi_pack_rec_unpack(MI_INFO *info, MI_BIT_BUFF *bit_buff, + uchar *to, uchar *from, ulong reclength) { uchar *end_field; - reg3 MI_COLUMNDEF *end; + MI_COLUMNDEF *end; MI_COLUMNDEF *current_field; MYISAM_SHARE *share=info->s; DBUG_ENTER("_mi_pack_rec_unpack"); @@ -1019,7 +1019,7 @@ static void uf_constant(MI_COLUMNDEF *rec, static void uf_intervall(MI_COLUMNDEF *rec, MI_BIT_BUFF *bit_buff, uchar *to, uchar *end) { - reg1 uint field_length=(uint) (end-to); + uint field_length=(uint) (end-to); memcpy(to,rec->huff_tree->intervalls+field_length*decode_pos(bit_buff, rec->huff_tree), (size_t) field_length); @@ -1091,9 +1091,9 @@ static void uf_varchar2(MI_COLUMNDEF *rec, MI_BIT_BUFF *bit_buff, static void decode_bytes(MI_COLUMNDEF *rec,MI_BIT_BUFF *bit_buff,uchar *to, uchar *end) { - reg1 uint bits,low_byte; - reg3 uint16 *pos; - reg4 uint table_bits,table_and; + uint bits,low_byte; + uint16 *pos; + uint table_bits,table_and; MI_DECODE_TREE *decode_tree; decode_tree=rec->decode_tree; @@ -1184,9 +1184,9 @@ static void decode_bytes(MI_COLUMNDEF *rec,MI_BIT_BUFF *bit_buff,uchar *to, static void decode_bytes(MI_COLUMNDEF *rec, MI_BIT_BUFF *bit_buff, uchar *to, uchar *end) { - reg1 uint bits,low_byte; - reg3 uint16 *pos; - reg4 uint table_bits,table_and; + uint bits,low_byte; + uint16 *pos; + uint table_bits,table_and; MI_DECODE_TREE *decode_tree; decode_tree=rec->huff_tree; @@ -1293,7 +1293,7 @@ static uint decode_pos(MI_BIT_BUFF *bit_buff, MI_DECODE_TREE *decode_tree) int _mi_read_rnd_pack_record(MI_INFO *info, uchar *buf, - register my_off_t filepos, + my_off_t filepos, my_bool skip_deleted_blocks) { uint b_type; @@ -1466,9 +1466,9 @@ static void fill_buffer(MI_BIT_BUFF *bit_buff) /* Get number of bits neaded to represent value */ -static uint max_bit(register uint value) +static uint max_bit(uint value) { - reg2 uint power=1; + uint power=1; while ((value>>=1)) power++; @@ -1605,7 +1605,7 @@ static int _mi_read_mempack_record(MI_INFO *info, my_off_t filepos, uchar *buf) /*ARGSUSED*/ static int _mi_read_rnd_mempack_record(MI_INFO *info, uchar *buf, - register my_off_t filepos, + my_off_t filepos, my_bool skip_deleted_blocks __attribute__((unused))) { diff --git a/storage/myisam/mi_page.c b/storage/myisam/mi_page.c index 766bb813edb7..96feef87d02d 100644 --- a/storage/myisam/mi_page.c +++ b/storage/myisam/mi_page.c @@ -19,7 +19,7 @@ /* Fetch a key-page in memory */ -uchar *_mi_fetch_keypage(register MI_INFO *info, MI_KEYDEF *keyinfo, +uchar *_mi_fetch_keypage(MI_INFO *info, MI_KEYDEF *keyinfo, my_off_t page, int level, uchar *buff, int return_buffer) { @@ -61,10 +61,10 @@ uchar *_mi_fetch_keypage(register MI_INFO *info, MI_KEYDEF *keyinfo, /* Write a key-page on disk */ -int _mi_write_keypage(register MI_INFO *info, register MI_KEYDEF *keyinfo, +int _mi_write_keypage(MI_INFO *info, MI_KEYDEF *keyinfo, my_off_t page, int level, uchar *buff) { - reg3 uint length; + uint length; DBUG_ENTER("_mi_write_keypage"); #ifndef FAST /* Safety check */ @@ -96,7 +96,7 @@ int _mi_write_keypage(register MI_INFO *info, register MI_KEYDEF *keyinfo, /* Remove page from disk */ -int _mi_dispose(register MI_INFO *info, MI_KEYDEF *keyinfo, my_off_t pos, +int _mi_dispose(MI_INFO *info, MI_KEYDEF *keyinfo, my_off_t pos, int level) { my_off_t old_link; @@ -118,7 +118,7 @@ int _mi_dispose(register MI_INFO *info, MI_KEYDEF *keyinfo, my_off_t pos, /* Make new page on disk */ -my_off_t _mi_new(register MI_INFO *info, MI_KEYDEF *keyinfo, int level) +my_off_t _mi_new(MI_INFO *info, MI_KEYDEF *keyinfo, int level) { my_off_t pos; uchar buff[8]; diff --git a/storage/myisam/mi_range.c b/storage/myisam/mi_range.c index a86503e0cc35..f89bd7e4ed18 100644 --- a/storage/myisam/mi_range.c +++ b/storage/myisam/mi_range.c @@ -188,10 +188,10 @@ static ha_rows _mi_record_pos(MI_INFO *info, const uchar *key, /* This is a modified version of _mi_search */ /* Returns offset for key in indextable (decimal 0.0 <= x <= 1.0) */ -static double _mi_search_pos(register MI_INFO *info, - register MI_KEYDEF *keyinfo, +static double _mi_search_pos(MI_INFO *info, + MI_KEYDEF *keyinfo, uchar *key, uint key_len, uint nextflag, - register my_off_t pos) + my_off_t pos) { int flag; uint nod_flag,keynr,UNINIT_VAR(max_keynr); @@ -256,7 +256,7 @@ static double _mi_search_pos(register MI_INFO *info, /* Get keynummer of current key and max number of keys in nod */ -static uint _mi_keynr(MI_INFO *info, register MI_KEYDEF *keyinfo, uchar *page, +static uint _mi_keynr(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *page, uchar *keypos, uint *ret_max_key) { uint nod_flag,keynr,max_key; diff --git a/storage/myisam/mi_rprev.c b/storage/myisam/mi_rprev.c index d4fa8b46769c..3f2a706dc1fd 100644 --- a/storage/myisam/mi_rprev.c +++ b/storage/myisam/mi_rprev.c @@ -26,7 +26,7 @@ int mi_rprev(MI_INFO *info, uchar *buf, int inx) { int error,changed; - register uint flag; + uint flag; MYISAM_SHARE *share=info->s; DBUG_ENTER("mi_rprev"); diff --git a/storage/myisam/mi_rrnd.c b/storage/myisam/mi_rrnd.c index dd321e19e004..122952a458b4 100644 --- a/storage/myisam/mi_rrnd.c +++ b/storage/myisam/mi_rrnd.c @@ -30,7 +30,7 @@ HA_ERR_END_OF_FILE = EOF. */ -int mi_rrnd(MI_INFO *info, uchar *buf, register my_off_t filepos) +int mi_rrnd(MI_INFO *info, uchar *buf, my_off_t filepos) { my_bool skip_deleted_blocks; DBUG_ENTER("mi_rrnd"); diff --git a/storage/myisam/mi_scan.c b/storage/myisam/mi_scan.c index 2ccab7ba306b..783ff23c63af 100644 --- a/storage/myisam/mi_scan.c +++ b/storage/myisam/mi_scan.c @@ -18,7 +18,7 @@ #include "myisamdef.h" -int mi_scan_init(register MI_INFO *info) +int mi_scan_init(MI_INFO *info) { DBUG_ENTER("mi_scan_init"); info->nextpos=info->s->pack.header_length; /* Read first record */ diff --git a/storage/myisam/mi_statrec.c b/storage/myisam/mi_statrec.c index b8fa7554034d..2d4b4e9ea014 100644 --- a/storage/myisam/mi_statrec.c +++ b/storage/myisam/mi_statrec.c @@ -110,7 +110,7 @@ int _mi_delete_static_record(MI_INFO *info) } -int _mi_cmp_static_record(register MI_INFO *info, register const uchar *old) +int _mi_cmp_static_record(MI_INFO *info, const uchar *old) { DBUG_ENTER("_mi_cmp_static_record"); @@ -162,8 +162,8 @@ int _mi_cmp_static_unique(MI_INFO *info, MI_UNIQUEDEF *def, /* 1 if record is deleted */ /* MY_FILE_ERROR on read-error or locking-error */ -int _mi_read_static_record(register MI_INFO *info, register my_off_t pos, - register uchar *record) +int _mi_read_static_record(MI_INFO *info, my_off_t pos, + uchar *record) { int error; @@ -197,7 +197,7 @@ int _mi_read_static_record(register MI_INFO *info, register my_off_t pos, int _mi_read_rnd_static_record(MI_INFO *info, uchar *buf, - register my_off_t filepos, + my_off_t filepos, my_bool skip_deleted_blocks) { int locked,error,cache_read; diff --git a/storage/myisam/mi_update.c b/storage/myisam/mi_update.c index 8228771dc792..d37b235df541 100644 --- a/storage/myisam/mi_update.c +++ b/storage/myisam/mi_update.c @@ -19,10 +19,10 @@ #include "fulltext.h" #include "rt_index.h" -int mi_update(register MI_INFO *info, const uchar *oldrec, uchar *newrec) +int mi_update(MI_INFO *info, const uchar *oldrec, uchar *newrec) { int flag,key_changed,save_errno; - reg3 my_off_t pos; + my_off_t pos; uint i; uchar old_key[MI_MAX_KEY_BUFF],*new_key; my_bool auto_key_changed=0; diff --git a/storage/myisam/mi_write.c b/storage/myisam/mi_write.c index 376df99b85b9..c354ba254e8b 100644 --- a/storage/myisam/mi_write.c +++ b/storage/myisam/mi_write.c @@ -34,9 +34,9 @@ static int _mi_balance_page(MI_INFO *info,MI_KEYDEF *keyinfo,uchar *key, static uchar *_mi_find_last_pos(MI_KEYDEF *keyinfo, uchar *page, uchar *key, uint *return_key_length, uchar **after_key); -int _mi_ck_write_tree(register MI_INFO *info, uint keynr,uchar *key, +int _mi_ck_write_tree(MI_INFO *info, uint keynr,uchar *key, uint key_length); -int _mi_ck_write_btree(register MI_INFO *info, uint keynr,uchar *key, +int _mi_ck_write_btree(MI_INFO *info, uint keynr,uchar *key, uint key_length); /* Write new record to database */ @@ -256,7 +256,7 @@ int _mi_ck_write(MI_INFO *info, uint keynr, uchar *key, uint key_length) * Normal insert code * **********************************************************************/ -int _mi_ck_write_btree(register MI_INFO *info, uint keynr, uchar *key, +int _mi_ck_write_btree(MI_INFO *info, uint keynr, uchar *key, uint key_length) { int error; @@ -335,7 +335,7 @@ int _mi_enlarge_root(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *key, 1 = key should be stored in higher tree */ -static int w_search(register MI_INFO *info, register MI_KEYDEF *keyinfo, +static int w_search(MI_INFO *info, MI_KEYDEF *keyinfo, uint comp_flag, uchar *key, uint key_length, my_off_t page, uchar *father_buff, uchar *father_keypos, my_off_t father_page, my_bool insert_last) @@ -460,7 +460,7 @@ static int w_search(register MI_INFO *info, register MI_KEYDEF *keyinfo, < 0 Error. */ -int _mi_insert(register MI_INFO *info, register MI_KEYDEF *keyinfo, +int _mi_insert(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *key, uchar *anc_buff, uchar *key_pos, uchar *key_buff, uchar *father_buff, uchar *father_key_pos, my_off_t father_page, my_bool insert_last) @@ -589,7 +589,7 @@ int _mi_insert(register MI_INFO *info, register MI_KEYDEF *keyinfo, /* split a full page in two and assign emerging item to key */ -int _mi_split_page(register MI_INFO *info, register MI_KEYDEF *keyinfo, +int _mi_split_page(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *key, uchar *buff, uchar *key_buff, my_bool insert_last_key) { @@ -756,7 +756,7 @@ static uchar *_mi_find_last_pos(MI_KEYDEF *keyinfo, uchar *page, /* Balance page with not packed keys with page on right/left */ /* returns 0 if balance was done */ -static int _mi_balance_page(register MI_INFO *info, MI_KEYDEF *keyinfo, +static int _mi_balance_page(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *key, uchar *curr_buff, uchar *father_buff, uchar *father_key_pos, my_off_t father_page) { @@ -901,7 +901,7 @@ typedef struct { uint keynr; } bulk_insert_param; -int _mi_ck_write_tree(register MI_INFO *info, uint keynr, uchar *key, +int _mi_ck_write_tree(MI_INFO *info, uint keynr, uchar *key, uint key_length) { int error; diff --git a/storage/myisam/myisamchk.c b/storage/myisam/myisamchk.c index aece419de250..a13aa5cc000c 100644 --- a/storage/myisam/myisamchk.c +++ b/storage/myisam/myisamchk.c @@ -63,8 +63,8 @@ static void get_options(int *argc,char * * *argv); static void print_version(void); static void usage(void); static int myisamchk(MI_CHECK *param, char *filename); -static void descript(MI_CHECK *param, register MI_INFO *info, char * name); -static int mi_sort_records(MI_CHECK *param, register MI_INFO *info, +static void descript(MI_CHECK *param, MI_INFO *info, char * name); +static int mi_sort_records(MI_CHECK *param, MI_INFO *info, char * name, uint sort_key, my_bool write_info, my_bool update_index); static int sort_record_index(MI_SORT_PARAM *sort_param, MI_INFO *info, @@ -717,7 +717,7 @@ get_one_option(int optid, } -static void get_options(register int *argc,register char ***argv) +static void get_options(int *argc,char ***argv) { int ho_error; @@ -1182,12 +1182,12 @@ static int myisamchk(MI_CHECK *param, char * filename) /* Write info about table */ -static void descript(MI_CHECK *param, register MI_INFO *info, char * name) +static void descript(MI_CHECK *param, MI_INFO *info, char * name) { uint key,keyseg_nr,field,start; - reg3 MI_KEYDEF *keyinfo; - reg2 HA_KEYSEG *keyseg; - reg4 const char *text; + MI_KEYDEF *keyinfo; + HA_KEYSEG *keyseg; + const char *text; char buff[160],length[10],*pos,*end; enum en_fieldtype type; MYISAM_SHARE *share=info->s; @@ -1441,7 +1441,7 @@ static void descript(MI_CHECK *param, register MI_INFO *info, char * name) /* Sort records according to one key */ static int mi_sort_records(MI_CHECK *param, - register MI_INFO *info, char * name, + MI_INFO *info, char * name, uint sort_key, my_bool write_info, my_bool update_index) diff --git a/storage/myisam/myisamdef.h b/storage/myisam/myisamdef.h index f7ae87fb1062..a02b9b7c908c 100644 --- a/storage/myisam/myisamdef.h +++ b/storage/myisam/myisamdef.h @@ -340,7 +340,7 @@ typedef struct st_mi_sort_param int (*key_read)(struct st_mi_sort_param *,void *); int (*key_write)(struct st_mi_sort_param *, const void *); void (*lock_in_memory)(MI_CHECK *); - int (*write_keys)(struct st_mi_sort_param *, register uchar **, + int (*write_keys)(struct st_mi_sort_param *, uchar **, ulong , struct st_buffpek *, IO_CACHE *); ulong (*read_to_buffer)(IO_CACHE *,struct st_buffpek *, uint); int (*write_key)(struct st_mi_sort_param *, IO_CACHE *,uchar *, @@ -576,7 +576,7 @@ extern uchar *_mi_get_last_key(MI_INFO *info,MI_KEYDEF *keyinfo,uchar *keypos, extern uchar *_mi_get_key(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *page, uchar *key, uchar *keypos, uint *return_key_length); extern uint _mi_keylength(MI_KEYDEF *keyinfo,uchar *key); -extern uint _mi_keylength_part(MI_KEYDEF *keyinfo, register uchar *key, +extern uint _mi_keylength_part(MI_KEYDEF *keyinfo, uchar *key, HA_KEYSEG *end); extern uchar *_mi_move_key(MI_KEYDEF *keyinfo,uchar *to,uchar *from); extern int _mi_search_next(MI_INFO *info,MI_KEYDEF *keyinfo,uchar *key, @@ -592,7 +592,7 @@ extern int _mi_dispose(MI_INFO *info,MI_KEYDEF *keyinfo,my_off_t pos, extern my_off_t _mi_new(MI_INFO *info,MI_KEYDEF *keyinfo,int level); extern uint _mi_make_key(MI_INFO *info,uint keynr,uchar *key, const uchar *record,my_off_t filepos); -extern uint _mi_pack_key(register MI_INFO *info, uint keynr, uchar *key, +extern uint _mi_pack_key(MI_INFO *info, uint keynr, uchar *key, uchar *old, key_part_map keypart_map, HA_KEYSEG **last_used_keyseg); extern int _mi_read_key_record(MI_INFO *info,my_off_t filepos,uchar *buf); @@ -753,7 +753,7 @@ int mi_open_datafile(MI_INFO *info, MYISAM_SHARE *share, const char *orn_name, File file_to_dup); int mi_open_keyfile(MYISAM_SHARE *share); -void mi_setup_functions(register MYISAM_SHARE *share); +void mi_setup_functions(MYISAM_SHARE *share); my_bool mi_dynmap_file(MI_INFO *info, my_off_t size); int mi_munmap_file(MI_INFO *info); void mi_remap_file(MI_INFO *info, my_off_t size); diff --git a/storage/myisam/myisamlog.c b/storage/myisam/myisamlog.c index b63f109184a8..851f17a873cb 100644 --- a/storage/myisam/myisamlog.c +++ b/storage/myisam/myisamlog.c @@ -129,7 +129,7 @@ int main(int argc, char **argv) } /* main */ -static void get_options(register int *argc, register char ***argv) +static void get_options(int *argc, char ***argv) { int help,version; const char *pos,*usage; @@ -676,7 +676,7 @@ static int examine_log(char * file_name, char **table_names) } -static int read_string(IO_CACHE *file, register uchar* *to, register uint length) +static int read_string(IO_CACHE *file, uchar* *to, uint length) { DBUG_ENTER("read_string"); diff --git a/storage/myisam/sp_defs.h b/storage/myisam/sp_defs.h index e04f0578fd79..cb30b181fb9f 100644 --- a/storage/myisam/sp_defs.h +++ b/storage/myisam/sp_defs.h @@ -40,7 +40,7 @@ enum wkbByteOrder wkbNDR = 1 /* Little Endian */ }; -uint sp_make_key(register MI_INFO *info, uint keynr, uchar *key, +uint sp_make_key(MI_INFO *info, uint keynr, uchar *key, const uchar *record, my_off_t filepos); #endif /*HAVE_SPATIAL*/ diff --git a/storage/myisam/sp_key.c b/storage/myisam/sp_key.c index 3837ed01bd27..36e48bd44751 100644 --- a/storage/myisam/sp_key.c +++ b/storage/myisam/sp_key.c @@ -31,7 +31,7 @@ static int sp_get_geometry_mbr(uchar *(*wkb), uchar *end, uint n_dims, double *mbr, int top); static int sp_mbr_from_wkb(uchar (*wkb), uint size, uint n_dims, double *mbr); -uint sp_make_key(register MI_INFO *info, uint keynr, uchar *key, +uint sp_make_key(MI_INFO *info, uint keynr, uchar *key, const uchar *record, my_off_t filepos) { HA_KEYSEG *keyseg; diff --git a/storage/myisammrg/ha_myisammrg.cc b/storage/myisammrg/ha_myisammrg.cc index 160601e270e3..7817e3e97ce2 100644 --- a/storage/myisammrg/ha_myisammrg.cc +++ b/storage/myisammrg/ha_myisammrg.cc @@ -1514,7 +1514,7 @@ void ha_myisammrg::update_create_info(HA_CREATE_INFO *create_info) } -int ha_myisammrg::create(const char *name, register TABLE *form, +int ha_myisammrg::create(const char *name, TABLE *form, HA_CREATE_INFO *create_info) { char buff[FN_REFLEN]; diff --git a/storage/myisammrg/myrg_info.c b/storage/myisammrg/myrg_info.c index 53484b430b33..be194a03a9d4 100644 --- a/storage/myisammrg/myrg_info.c +++ b/storage/myisammrg/myrg_info.c @@ -28,7 +28,7 @@ ulonglong myrg_position(MYRG_INFO *info) ~(ulonglong) 0; } -int myrg_status(MYRG_INFO *info,register MYMERGE_INFO *x,int flag) +int myrg_status(MYRG_INFO *info, MYMERGE_INFO *x,int flag) { MYRG_TABLE *current_table; DBUG_ENTER("myrg_status"); diff --git a/storage/myisammrg/myrg_update.c b/storage/myisammrg/myrg_update.c index add6f9f819bd..df48e7728515 100644 --- a/storage/myisammrg/myrg_update.c +++ b/storage/myisammrg/myrg_update.c @@ -18,7 +18,7 @@ #include "myrg_def.h" -int myrg_update(register MYRG_INFO *info,const uchar *oldrec, uchar *newrec) +int myrg_update(MYRG_INFO *info,const uchar *oldrec, uchar *newrec) { if (!info->current_table) return (my_errno=HA_ERR_NO_ACTIVE_RECORD); diff --git a/storage/myisammrg/myrg_write.c b/storage/myisammrg/myrg_write.c index dbe3142c43e8..ddc929f32d1c 100644 --- a/storage/myisammrg/myrg_write.c +++ b/storage/myisammrg/myrg_write.c @@ -18,7 +18,7 @@ #include "myrg_def.h" -int myrg_write(register MYRG_INFO *info, uchar *rec) +int myrg_write(MYRG_INFO *info, uchar *rec) { /* [phi] MERGE_WRITE_DISABLED is handled by the else case */ if (info->merge_insert_method == MERGE_INSERT_TO_FIRST) diff --git a/storage/perfschema/pfs_global.h b/storage/perfschema/pfs_global.h index 5a3cc342b7dd..b14c55bb62c3 100644 --- a/storage/perfschema/pfs_global.h +++ b/storage/perfschema/pfs_global.h @@ -34,7 +34,7 @@ inline uint randomized_index(const void *ptr, uint max_size) static uint seed1= 0; static uint seed2= 0; uint result; - register intptr value; + intptr value; if (unlikely(max_size == 0)) return 0; diff --git a/strings/bchange.c b/strings/bchange.c index ed7b2e1e05bf..8fc75ba92b30 100644 --- a/strings/bchange.c +++ b/strings/bchange.c @@ -27,7 +27,7 @@ #include #include "m_string.h" -void bchange(register uchar *dst, size_t old_length, register const uchar *src, +void bchange(uchar *dst, size_t old_length, const uchar *src, size_t new_length, size_t tot_length) { size_t rest=tot_length-old_length; diff --git a/strings/bmove_upp.c b/strings/bmove_upp.c index f05cc180c591..b73fa8f52c51 100644 --- a/strings/bmove_upp.c +++ b/strings/bmove_upp.c @@ -25,8 +25,8 @@ #include #include "m_string.h" -void bmove_upp(register uchar *dst, register const uchar *src, - register size_t len) +void bmove_upp(uchar *dst, const uchar *src, + size_t len) { while (len-- != 0) *--dst = *--src; } diff --git a/strings/ctype-bin.c b/strings/ctype-bin.c index 7f85b532c236..c2b990a483a4 100644 --- a/strings/ctype-bin.c +++ b/strings/ctype-bin.c @@ -441,7 +441,7 @@ uint my_instr_bin(CHARSET_INFO *cs __attribute__((unused)), const char *s, size_t s_length, my_match_t *match, uint nmatch) { - register const uchar *str, *search, *end, *search_end; + const uchar *str, *search, *end, *search_end; if (s_length <= b_length) { @@ -466,7 +466,7 @@ uint my_instr_bin(CHARSET_INFO *cs __attribute__((unused)), { if ( (*str++) == (*search)) { - register const uchar *i,*j; + const uchar *i,*j; i= str; j= search+1; diff --git a/strings/ctype-mb.c b/strings/ctype-mb.c index 023733046729..464a91583c12 100644 --- a/strings/ctype-mb.c +++ b/strings/ctype-mb.c @@ -22,8 +22,8 @@ size_t my_caseup_str_mb(CHARSET_INFO * cs, char *str) { - register uint32 l; - register uchar *map= cs->to_upper; + uint32 l; + uchar *map= cs->to_upper; char *str_orig= str; while (*str) @@ -43,8 +43,8 @@ size_t my_caseup_str_mb(CHARSET_INFO * cs, char *str) size_t my_casedn_str_mb(CHARSET_INFO * cs, char *str) { - register uint32 l; - register uchar *map= cs->to_lower; + uint32 l; + uchar *map= cs->to_lower; char *str_orig= str; while (*str) @@ -77,9 +77,9 @@ size_t my_caseup_mb(CHARSET_INFO * cs, char *src, size_t srclen, char *dst __attribute__((unused)), size_t dstlen __attribute__((unused))) { - register uint32 l; - register char *srcend= src + srclen; - register uchar *map= cs->to_upper; + uint32 l; + char *srcend= src + srclen; + uchar *map= cs->to_upper; DBUG_ASSERT(cs->caseup_multiply == 1); DBUG_ASSERT(src == dst && srclen == dstlen); @@ -112,9 +112,9 @@ size_t my_casedn_mb(CHARSET_INFO * cs, char *src, size_t srclen, char *dst __attribute__((unused)), size_t dstlen __attribute__((unused))) { - register uint32 l; - register char *srcend= src + srclen; - register uchar *map=cs->to_lower; + uint32 l; + char *srcend= src + srclen; + uchar *map=cs->to_lower; DBUG_ASSERT(cs->casedn_multiply == 1); DBUG_ASSERT(src == dst && srclen == dstlen); @@ -218,8 +218,8 @@ my_caseup_mb_varlen(CHARSET_INFO * cs, char *src, size_t srclen, int my_strcasecmp_mb(CHARSET_INFO * cs,const char *s, const char *t) { - register uint32 l; - register uchar *map=cs->to_upper; + uint32 l; + uchar *map=cs->to_upper; while (*s && *t) { @@ -375,7 +375,7 @@ int my_wildcmp_mb(CHARSET_INFO *cs, size_t my_numchars_mb(CHARSET_INFO *cs __attribute__((unused)), const char *pos, const char *end) { - register size_t count= 0; + size_t count= 0; while (pos < end) { uint mb_len; @@ -428,7 +428,7 @@ uint my_instr_mb(CHARSET_INFO *cs, const char *s, size_t s_length, my_match_t *match, uint nmatch) { - register const char *end, *b0; + const char *end, *b0; int res= 0; if (s_length <= b_length) diff --git a/strings/ctype-simple.c b/strings/ctype-simple.c index ba60ff89e291..74abab245306 100644 --- a/strings/ctype-simple.c +++ b/strings/ctype-simple.c @@ -193,7 +193,7 @@ int my_strnncollsp_simple(CHARSET_INFO * cs, const uchar *a, size_t a_length, size_t my_caseup_str_8bit(CHARSET_INFO * cs,char *str) { - register uchar *map= cs->to_upper; + uchar *map= cs->to_upper; char *str_orig= str; while ((*str= (char) map[(uchar) *str]) != 0) str++; @@ -203,7 +203,7 @@ size_t my_caseup_str_8bit(CHARSET_INFO * cs,char *str) size_t my_casedn_str_8bit(CHARSET_INFO * cs,char *str) { - register uchar *map= cs->to_lower; + uchar *map= cs->to_lower; char *str_orig= str; while ((*str= (char) map[(uchar) *str]) != 0) str++; @@ -216,7 +216,7 @@ size_t my_caseup_8bit(CHARSET_INFO * cs, char *src, size_t srclen, size_t dstlen __attribute__((unused))) { char *end= src + srclen; - register uchar *map= cs->to_upper; + uchar *map= cs->to_upper; DBUG_ASSERT(src == dst && srclen == dstlen); for ( ; src != end ; src++) *src= (char) map[(uchar) *src]; @@ -229,7 +229,7 @@ size_t my_casedn_8bit(CHARSET_INFO * cs, char *src, size_t srclen, size_t dstlen __attribute__((unused))) { char *end= src + srclen; - register uchar *map=cs->to_lower; + uchar *map=cs->to_lower; DBUG_ASSERT(src == dst && srclen == dstlen); for ( ; src != end ; src++) *src= (char) map[(uchar) *src]; @@ -238,7 +238,7 @@ size_t my_casedn_8bit(CHARSET_INFO * cs, char *src, size_t srclen, int my_strcasecmp_8bit(CHARSET_INFO * cs,const char *s, const char *t) { - register uchar *map=cs->to_upper; + uchar *map=cs->to_upper; while (map[(uchar) *s] == map[(uchar) *t++]) if (!*s++) return 0; return ((int) map[(uchar) s[0]] - (int) map[(uchar) t[-1]]); @@ -301,7 +301,7 @@ void my_hash_sort_simple(CHARSET_INFO *cs, const uchar *key, size_t len, ulong *nr1, ulong *nr2) { - register uchar *sort_order=cs->sort_order; + uchar *sort_order=cs->sort_order; const uchar *end; /* @@ -324,11 +324,11 @@ long my_strntol_8bit(CHARSET_INFO *cs, char **endptr, int *err) { int negative; - register uint32 cutoff; - register uint cutlim; - register uint32 i; - register const char *s; - register uchar c; + uint32 cutoff; + uint cutlim; + uint32 i; + const char *s; + uchar c; const char *save, *e; int overflow; @@ -420,11 +420,11 @@ ulong my_strntoul_8bit(CHARSET_INFO *cs, char **endptr, int *err) { int negative; - register uint32 cutoff; - register uint cutlim; - register uint32 i; - register const char *s; - register uchar c; + uint32 cutoff; + uint cutlim; + uint32 i; + const char *s; + uchar c; const char *save, *e; int overflow; @@ -507,10 +507,10 @@ longlong my_strntoll_8bit(CHARSET_INFO *cs __attribute__((unused)), char **endptr,int *err) { int negative; - register ulonglong cutoff; - register uint cutlim; - register ulonglong i; - register const char *s, *e; + ulonglong cutoff; + uint cutlim; + ulonglong i; + const char *s, *e; const char *save; int overflow; @@ -548,7 +548,7 @@ longlong my_strntoll_8bit(CHARSET_INFO *cs __attribute__((unused)), i = 0; for ( ; s != e; s++) { - register uchar c= *s; + uchar c= *s; if (c>='0' && c<='9') c -= '0'; else if (c>='A' && c<='Z') @@ -603,10 +603,10 @@ ulonglong my_strntoull_8bit(CHARSET_INFO *cs, char **endptr, int *err) { int negative; - register ulonglong cutoff; - register uint cutlim; - register ulonglong i; - register const char *s, *e; + ulonglong cutoff; + uint cutlim; + ulonglong i; + const char *s, *e; const char *save; int overflow; @@ -644,7 +644,7 @@ ulonglong my_strntoull_8bit(CHARSET_INFO *cs, i = 0; for ( ; s != e; s++) { - register uchar c= *s; + uchar c= *s; if (c>='0' && c<='9') c -= '0'; @@ -731,7 +731,7 @@ size_t my_long10_to_str_8bit(CHARSET_INFO *cs __attribute__((unused)), char *dst, size_t len, int radix, long int val) { char buffer[66]; - register char *p, *e; + char *p, *e; long int new_val; uint sign=0; unsigned long int uval = (unsigned long int) val; @@ -773,7 +773,7 @@ size_t my_longlong10_to_str_8bit(CHARSET_INFO *cs __attribute__((unused)), longlong val) { char buffer[65]; - register char *p, *e; + char *p, *e; long long_val; uint sign= 0; ulonglong uval = (ulonglong)val; @@ -1079,7 +1079,7 @@ uint my_instr_simple(CHARSET_INFO *cs, const char *s, size_t s_length, my_match_t *match, uint nmatch) { - register const uchar *str, *search, *end, *search_end; + const uchar *str, *search, *end, *search_end; if (s_length <= b_length) { @@ -1104,7 +1104,7 @@ uint my_instr_simple(CHARSET_INFO *cs, { if (cs->sort_order[*str++] == cs->sort_order[*search]) { - register const uchar *i,*j; + const uchar *i,*j; i= str; j= search+1; diff --git a/strings/ctype-ucs2.c b/strings/ctype-ucs2.c index df0910102c46..2f66f3677101 100644 --- a/strings/ctype-ucs2.c +++ b/strings/ctype-ucs2.c @@ -101,11 +101,11 @@ my_strntol_mb2_or_mb4(CHARSET_INFO *cs, int overflow; int cnv; my_wc_t wc; - register unsigned int cutlim; - register uint32 cutoff; - register uint32 res; - register const uchar *s= (const uchar*) nptr; - register const uchar *e= (const uchar*) nptr+l; + unsigned int cutlim; + uint32 cutoff; + uint32 res; + const uchar *s= (const uchar*) nptr; + const uchar *e= (const uchar*) nptr+l; const uchar *save; *err= 0; @@ -212,11 +212,11 @@ my_strntoul_mb2_or_mb4(CHARSET_INFO *cs, int overflow; int cnv; my_wc_t wc; - register unsigned int cutlim; - register uint32 cutoff; - register uint32 res; - register const uchar *s= (const uchar*) nptr; - register const uchar *e= (const uchar*) nptr + l; + unsigned int cutlim; + uint32 cutoff; + uint32 res; + const uchar *s= (const uchar*) nptr; + const uchar *e= (const uchar*) nptr + l; const uchar *save; *err= 0; @@ -316,11 +316,11 @@ my_strntoll_mb2_or_mb4(CHARSET_INFO *cs, int overflow; int cnv; my_wc_t wc; - register ulonglong cutoff; - register unsigned int cutlim; - register ulonglong res; - register const uchar *s= (const uchar*) nptr; - register const uchar *e= (const uchar*) nptr+l; + ulonglong cutoff; + unsigned int cutlim; + ulonglong res; + const uchar *s= (const uchar*) nptr; + const uchar *e= (const uchar*) nptr+l; const uchar *save; *err= 0; @@ -427,11 +427,11 @@ my_strntoull_mb2_or_mb4(CHARSET_INFO *cs, int overflow; int cnv; my_wc_t wc; - register ulonglong cutoff; - register unsigned int cutlim; - register ulonglong res; - register const uchar *s= (const uchar*) nptr; - register const uchar *e= (const uchar*) nptr + l; + ulonglong cutoff; + unsigned int cutlim; + ulonglong res; + const uchar *s= (const uchar*) nptr; + const uchar *e= (const uchar*) nptr + l; const uchar *save; *err= 0; @@ -529,8 +529,8 @@ my_strntod_mb2_or_mb4(CHARSET_INFO *cs, { char buf[256]; double res; - register char *b= buf; - register const uchar *s= (const uchar*) nptr; + char *b= buf; + const uchar *s= (const uchar*) nptr; const uchar *end; my_wc_t wc; int cnv; @@ -596,7 +596,7 @@ my_l10tostr_mb2_or_mb4(CHARSET_INFO *cs, char *dst, size_t len, int radix, long int val) { char buffer[66]; - register char *p, *db, *de; + char *p, *db, *de; long int new_val; int sl= 0; unsigned long int uval = (unsigned long int) val; @@ -647,7 +647,7 @@ my_ll10tostr_mb2_or_mb4(CHARSET_INFO *cs, char *dst, size_t len, int radix, longlong val) { char buffer[65]; - register char *p, *db, *de; + char *p, *db, *de; long long_val; int sl= 0; ulonglong uval= (ulonglong) val; @@ -2028,7 +2028,7 @@ my_vsnprintf_utf32(char *dst, size_t n, const char* fmt, va_list ap) if (*fmt == 's') /* String parameter */ { - reg2 char *par= va_arg(ap, char *); + char *par= va_arg(ap, char *); size_t plen; size_t left_len= (size_t)(end - dst); if (!par) par= (char*)"(null)"; @@ -2047,7 +2047,7 @@ my_vsnprintf_utf32(char *dst, size_t n, const char* fmt, va_list ap) } else if (*fmt == 'd' || *fmt == 'u') /* Integer parameter */ { - register int iarg; + int iarg; char nbuf[16]; char *pbuf= nbuf; diff --git a/strings/do_ctype.c b/strings/do_ctype.c index a624638971fc..bd748ee42c06 100644 --- a/strings/do_ctype.c +++ b/strings/do_ctype.c @@ -71,8 +71,8 @@ char *argv[]; /* Read options */ void get_options(argc,argv) -register int *argc; -register char **argv[]; +int *argc; +char **argv[]; { int help,version; char *pos,*progname; @@ -126,8 +126,8 @@ register char **argv[]; void init_case_convert() { - reg1 int16 i; - reg2 uchar *higher_pos,*lower_pos; + int16 i; + uchar *higher_pos,*lower_pos; DBUG_ENTER("init_case_convert"); for (i=0 ; i <= MAX_CHAR_OK ; i++) diff --git a/strings/dtoa.c b/strings/dtoa.c index 13ae8dd52718..fc24b6c74c5f 100644 --- a/strings/dtoa.c +++ b/strings/dtoa.c @@ -827,9 +827,9 @@ static Bigint *s2b(const char *s, int nd0, int nd, ULong y9, Stack_alloc *alloc) } -static int hi0bits(register ULong x) +static int hi0bits(ULong x) { - register int k= 0; + int k= 0; if (!(x & 0xffff0000)) { @@ -863,8 +863,8 @@ static int hi0bits(register ULong x) static int lo0bits(ULong *y) { - register int k; - register ULong x= *y; + int k; + ULong x= *y; if (x & 7) { @@ -1182,7 +1182,7 @@ static Bigint *diff(Bigint *a, Bigint *b, Stack_alloc *alloc) static double ulp(U *x) { - register Long L; + Long L; U u; L= (word0(x) & Exp_mask) - (P - 1)*Exp_msk1; diff --git a/strings/int2str.c b/strings/int2str.c index 73a0484e2bcf..3661ecdfc371 100644 --- a/strings/int2str.c +++ b/strings/int2str.c @@ -50,11 +50,11 @@ char _dig_vec_lower[] = */ char * -int2str(register long int val, register char *dst, register int radix, +int2str(long int val, char *dst, int radix, int upcase) { char buffer[65]; - register char *p; + char *p; long int new_val; char *dig_vec= upcase ? _dig_vec_upper : _dig_vec_lower; ulong uval= (ulong) val; @@ -133,7 +133,7 @@ int2str(register long int val, register char *dst, register int radix, char *int10_to_str(long int val,char *dst,int radix) { char buffer[65]; - register char *p; + char *p; long int new_val; unsigned long int uval = (unsigned long int) val; diff --git a/strings/is_prefix.c b/strings/is_prefix.c index 05ca82844f80..885ed3d42062 100644 --- a/strings/is_prefix.c +++ b/strings/is_prefix.c @@ -25,7 +25,7 @@ #include #include "m_string.h" -int is_prefix(register const char *s, register const char *t) +int is_prefix(const char *s, const char *t) { while (*t) if (*s++ != *t++) return 0; diff --git a/strings/longlong2str.c b/strings/longlong2str.c index 18bc1daa0ba2..2867e0becd1e 100644 --- a/strings/longlong2str.c +++ b/strings/longlong2str.c @@ -50,7 +50,7 @@ char *ll2str(longlong val,char *dst,int radix, int upcase) { char buffer[65]; - register char *p; + char *p; long long_val; char *dig_vec= upcase ? _dig_vec_upper : _dig_vec_lower; ulonglong uval= (ulonglong) val; @@ -101,7 +101,7 @@ char *ll2str(longlong val,char *dst,int radix, int upcase) char *longlong10_to_str(longlong val,char *dst,int radix) { char buffer[65]; - register char *p; + char *p; long long_val; ulonglong uval= (ulonglong) val; diff --git a/strings/my_vsnprintf.c b/strings/my_vsnprintf.c index b0fd83451a63..5e67d0ec2aad 100644 --- a/strings/my_vsnprintf.c +++ b/strings/my_vsnprintf.c @@ -603,7 +603,7 @@ size_t my_vsnprintf_ex(CHARSET_INFO *cs, char *to, size_t n, if (*fmt == 's') /* String parameter */ { - reg2 char *par= va_arg(ap, char *); + char *par= va_arg(ap, char *); to= process_str_arg(cs, to, end, width, par, print_type); continue; } @@ -639,7 +639,7 @@ size_t my_vsnprintf_ex(CHARSET_INFO *cs, char *to, size_t n, } else if (*fmt == 'c') /* Character parameter */ { - register int larg; + int larg; if (to == end) break; larg = va_arg(ap, int); diff --git a/strings/str2int.c b/strings/str2int.c index 6dfa64a2dbed..750c7040683c 100644 --- a/strings/str2int.c +++ b/strings/str2int.c @@ -49,7 +49,7 @@ X >= 'a' && X <= 'z' ? X-'a'+10 :\ '\177') -char *str2int(register const char *src, register int radix, long int lower, +char *str2int(const char *src, int radix, long int lower, long int upper, long int *val) { int sign; /* is number negative (+1) or positive (-1) */ @@ -57,7 +57,7 @@ char *str2int(register const char *src, register int radix, long int lower, long limit; /* "largest" possible valid input */ long scale; /* the amount to multiply next digit by */ long sofar; /* the running value */ - register int d; /* (negative of) next digit */ + int d; /* (negative of) next digit */ char *start; int digits[32]; /* Room for numbers */ diff --git a/strings/strappend.c b/strings/strappend.c index 469c03e9dc75..edafdf8daadd 100644 --- a/strings/strappend.c +++ b/strings/strappend.c @@ -28,9 +28,9 @@ #include "m_string.h" -void strappend(register char *s, size_t len, pchar fill) +void strappend(char *s, size_t len, pchar fill) { - register char *endpos; + char *endpos; endpos = s+len; while (*s++); diff --git a/strings/strcend.c b/strings/strcend.c index 76d40dce0f5d..4becf9bc32f4 100644 --- a/strings/strcend.c +++ b/strings/strcend.c @@ -25,7 +25,7 @@ #include #include "m_string.h" -char *strcend(register const char *s, register pchar c) +char *strcend(const char *s, pchar c) { for (;;) { diff --git a/strings/strcont.c b/strings/strcont.c index f3baf591d82e..554d89c5ec96 100644 --- a/strings/strcont.c +++ b/strings/strcont.c @@ -28,9 +28,9 @@ #include #include "m_string.h" -char * strcont(reg1 const char *str,reg2 const char *set) +char * strcont(const char *str, const char *set) { - reg3 char * start = (char *) set; + char * start = (char *) set; while (*str) { diff --git a/strings/strend.c b/strings/strend.c index 257ffe9b425e..d29048a57fc7 100644 --- a/strings/strend.c +++ b/strings/strend.c @@ -29,7 +29,7 @@ #include #include "m_string.h" -char *strend(register const char *s) +char *strend(const char *s) { while (*s++); return (char*) (s-1); diff --git a/strings/strmake.c b/strings/strmake.c index 5a062e4df4fd..605d05a3954c 100644 --- a/strings/strmake.c +++ b/strings/strmake.c @@ -28,7 +28,7 @@ #include #include "m_string.h" -char *strmake(register char *dst, register const char *src, size_t length) +char *strmake(char *dst, const char *src, size_t length) { #ifdef EXTRA_DEBUG /* diff --git a/strings/strmov.c b/strings/strmov.c index 84dd358c34e7..21f53ecb08f2 100644 --- a/strings/strmov.c +++ b/strings/strmov.c @@ -29,7 +29,7 @@ #define strmov strmov_overlapp #endif -char *strmov(register char *dst, register const char *src) +char *strmov(char *dst, const char *src) { while ((*dst++ = *src++)) ; return dst-1; diff --git a/strings/strnlen.c b/strings/strnlen.c index 162cc9768f3f..ab2bf42b039d 100644 --- a/strings/strnlen.c +++ b/strings/strnlen.c @@ -26,7 +26,7 @@ #ifndef HAVE_STRNLEN -size_t strnlen(register const char *s, register size_t maxlen) +size_t strnlen(const char *s, size_t maxlen) { const char *end= (const char *)memchr(s, '\0', maxlen); return end ? (size_t) (end - s) : maxlen; diff --git a/strings/strnmov.c b/strings/strnmov.c index 19f752fa93bd..dd10749e97bd 100644 --- a/strings/strnmov.c +++ b/strings/strnmov.c @@ -24,7 +24,7 @@ #include #include "m_string.h" -char *strnmov(register char *dst, register const char *src, size_t n) +char *strnmov(char *dst, const char *src, size_t n) { while (n-- != 0) { if (!(*dst++ = *src++)) { diff --git a/zlib/crc32.c b/zlib/crc32.c index f658a9ef55ee..5bbf9c6d4b85 100644 --- a/zlib/crc32.c +++ b/zlib/crc32.c @@ -264,8 +264,8 @@ local unsigned long crc32_little(crc, buf, len) const unsigned char FAR *buf; unsigned len; { - register u4 c; - register const u4 FAR *buf4; + u4 c; + const u4 FAR *buf4; c = (u4)crc; c = ~c; @@ -304,8 +304,8 @@ local unsigned long crc32_big(crc, buf, len) const unsigned char FAR *buf; unsigned len; { - register u4 c; - register const u4 FAR *buf4; + u4 c; + const u4 FAR *buf4; c = REV((u4)crc); c = ~c; diff --git a/zlib/deflate.c b/zlib/deflate.c index 29ce1f64a57a..b00bdca88894 100644 --- a/zlib/deflate.c +++ b/zlib/deflate.c @@ -1029,9 +1029,9 @@ local uInt longest_match(s, cur_match) IPos cur_match; /* current match */ { unsigned chain_length = s->max_chain_length;/* max hash chain length */ - register Bytef *scan = s->window + s->strstart; /* current string */ - register Bytef *match; /* matched string */ - register int len; /* length of current match */ + Bytef *scan = s->window + s->strstart; /* current string */ + Bytef *match; /* matched string */ + int len; /* length of current match */ int best_len = s->prev_length; /* best match length so far */ int nice_match = s->nice_match; /* stop if match long enough */ IPos limit = s->strstart > (IPos)MAX_DIST(s) ? @@ -1046,13 +1046,13 @@ local uInt longest_match(s, cur_match) /* Compare two bytes at a time. Note: this is not always beneficial. * Try with and without -DUNALIGNED_OK to check. */ - register Bytef *strend = s->window + s->strstart + MAX_MATCH - 1; - register ush scan_start = *(ushf*)scan; - register ush scan_end = *(ushf*)(scan+best_len-1); + Bytef *strend = s->window + s->strstart + MAX_MATCH - 1; + ush scan_start = *(ushf*)scan; + ush scan_end = *(ushf*)(scan+best_len-1); #else - register Bytef *strend = s->window + s->strstart + MAX_MATCH; - register Byte scan_end1 = scan[best_len-1]; - register Byte scan_end = scan[best_len]; + Bytef *strend = s->window + s->strstart + MAX_MATCH; + Byte scan_end1 = scan[best_len-1]; + Byte scan_end = scan[best_len]; #endif /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16. @@ -1176,10 +1176,10 @@ local uInt longest_match_fast(s, cur_match) deflate_state *s; IPos cur_match; /* current match */ { - register Bytef *scan = s->window + s->strstart; /* current string */ - register Bytef *match; /* matched string */ - register int len; /* length of current match */ - register Bytef *strend = s->window + s->strstart + MAX_MATCH; + Bytef *scan = s->window + s->strstart; /* current string */ + Bytef *match; /* matched string */ + int len; /* length of current match */ + Bytef *strend = s->window + s->strstart + MAX_MATCH; /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16. * It is easy to get rid of this optimization if necessary. @@ -1266,8 +1266,8 @@ local void check_match(s, start, match, length) local void fill_window(s) deflate_state *s; { - register unsigned n, m; - register Posf *p; + unsigned n, m; + Posf *p; unsigned more; /* Amount of free space at the end of the window. */ uInt wsize = s->w_size; diff --git a/zlib/trees.c b/zlib/trees.c index 395e4e16814e..78024e8d4cc0 100644 --- a/zlib/trees.c +++ b/zlib/trees.c @@ -1147,7 +1147,7 @@ local unsigned bi_reverse(code, len) unsigned code; /* the value to invert */ int len; /* its bit length */ { - register unsigned res = 0; + unsigned res = 0; do { res |= code & 1; code >>= 1, res <<= 1; From b4079814efa28b79d7a5e54202f8844e6df582a0 Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Thu, 15 Mar 2018 09:39:35 +0100 Subject: [PATCH 0661/1221] PS-3893: Added clang6 to the travis config and fixed a build error --- .travis.yml | 37 ++++++++++++++++++++++--------------- sql/parse_file.h | 2 +- 2 files changed, 23 insertions(+), 16 deletions(-) diff --git a/.travis.yml b/.travis.yml index 178818254174..5abdb5228a70 100644 --- a/.travis.yml +++ b/.travis.yml @@ -39,49 +39,55 @@ matrix: env: VERSION=5.0 BUILD=RelWithDebInfo # 5 - compiler: clang - env: VERSION=5.0 BUILD=RelWithDebInfo INVERTED=ON + env: VERSION=6.0 BUILD=RelWithDebInfo # 6 + - compiler: clang + env: VERSION=6.0 BUILD=RelWithDebInfo INVERTED=ON + # 7 - compiler: gcc env: VERSION=7 BUILD=RelWithDebInfo INVERTED=ON - # 7 + # 8 - compiler: gcc env: VERSION=7 BUILD=RelWithDebInfo - # 8 + # 9 - compiler: gcc env: VERSION=6 BUILD=RelWithDebInfo - # 9 + # 10 - compiler: gcc env: VERSION=5 BUILD=RelWithDebInfo - # 10 + # 11 - compiler: gcc env: VERSION=4.8 BUILD=RelWithDebInfo - # 11 + # 12 - compiler: clang os: osx osx_image: xcode9.2 env: BUILD=Debug MAINTAINER_MODE=OFF - # 12 - - compiler: clang - env: VERSION=4.0 BUILD=Debug # 13 - compiler: clang - env: VERSION=5.0 BUILD=Debug + env: VERSION=4.0 BUILD=Debug # 14 - compiler: clang - env: VERSION=5.0 BUILD=Debug INVERTED=ON + env: VERSION=5.0 BUILD=Debug # 15 + - compiler: clang + env: VERSION=6.0 BUILD=Debug + # 16 + - compiler: clang + env: VERSION=6.0 BUILD=Debug INVERTED=ON + # 17 - compiler: gcc env: VERSION=7 BUILD=Debug INVERTED=ON - # 16 + # 18 - compiler: gcc env: VERSION=7 BUILD=Debug - # 17 + # 19 - compiler: gcc env: VERSION=6 BUILD=Debug - # 18 + # 20 - compiler: gcc env: VERSION=5 BUILD=Debug - # 19 + # 21 - compiler: gcc env: VERSION=4.8 BUILD=Debug @@ -105,6 +111,7 @@ script: PACKAGES="llvm-$VERSION-dev $PACKAGES"; curl -sSL "http://apt.llvm.org/llvm-snapshot.gpg.key" | sudo -E apt-key add -; echo "deb http://apt.llvm.org/trusty/ llvm-toolchain-trusty-$VERSION main" | sudo tee -a /etc/apt/sources.list > /dev/null; + sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test; fi; if [[ "$TRAVIS_OS_NAME" == "linux" ]] && [[ "$CC" == "gcc" ]]; then sudo -E apt-add-repository -y "ppa:ubuntu-toolchain-r/test"; diff --git a/sql/parse_file.h b/sql/parse_file.h index 3ceb84580399..7fee0325d106 100644 --- a/sql/parse_file.h +++ b/sql/parse_file.h @@ -42,7 +42,7 @@ enum file_opt_type { struct File_option { LEX_STRING name; /**< Name of the option */ - int offset; /**< offset to base address of value */ + size_t offset; /**< offset to base address of value */ file_opt_type type; /**< Option type */ }; From 6b453f306a9f8f13d848526d452208783c77a654 Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Thu, 15 Mar 2018 09:39:35 +0100 Subject: [PATCH 0662/1221] PS-3893: Added clang6 to the travis config and fixed a build error (cherry picked from commit b4079814efa28b79d7a5e54202f8844e6df582a0) --- .travis.yml | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/.travis.yml b/.travis.yml index 20300314382a..6cf75cc7d1fa 100644 --- a/.travis.yml +++ b/.travis.yml @@ -40,49 +40,55 @@ matrix: env: VERSION=5.0 BUILD=RelWithDebInfo # 5 - compiler: clang - env: VERSION=5.0 BUILD=RelWithDebInfo INVERTED=ON + env: VERSION=6.0 BUILD=RelWithDebInfo # 6 + - compiler: clang + env: VERSION=6.0 BUILD=RelWithDebInfo INVERTED=ON + # 7 - compiler: gcc env: VERSION=7 BUILD=RelWithDebInfo INVERTED=ON - # 7 + # 8 - compiler: gcc env: VERSION=7 BUILD=RelWithDebInfo - # 8 + # 9 - compiler: gcc env: VERSION=6 BUILD=RelWithDebInfo - # 9 + # 10 - compiler: gcc env: VERSION=5 BUILD=RelWithDebInfo - # 10 + # 11 - compiler: gcc env: VERSION=4.8 BUILD=RelWithDebInfo - # 11 + # 12 - compiler: clang os: osx osx_image: xcode9.2 env: BUILD=Debug MAINTAINER_MODE=OFF WITHOUT_TOKUDB=ON - # 12 - - compiler: clang - env: VERSION=4.0 BUILD=Debug # 13 - compiler: clang - env: VERSION=5.0 BUILD=Debug + env: VERSION=4.0 BUILD=Debug # 14 - compiler: clang - env: VERSION=5.0 BUILD=Debug INVERTED=ON + env: VERSION=5.0 BUILD=Debug # 15 + - compiler: clang + env: VERSION=6.0 BUILD=Debug + # 16 + - compiler: clang + env: VERSION=6.0 BUILD=Debug INVERTED=ON + # 17 - compiler: gcc env: VERSION=7 BUILD=Debug INVERTED=ON - # 16 + # 18 - compiler: gcc env: VERSION=7 BUILD=Debug - # 17 + # 19 - compiler: gcc env: VERSION=6 BUILD=Debug - # 18 + # 20 - compiler: gcc env: VERSION=5 BUILD=Debug - # 19 + # 21 - compiler: gcc env: VERSION=4.8 BUILD=Debug @@ -106,6 +112,7 @@ script: PACKAGES="llvm-$VERSION-dev $PACKAGES"; curl -sSL "http://apt.llvm.org/llvm-snapshot.gpg.key" | sudo -E apt-key add -; echo "deb http://apt.llvm.org/trusty/ llvm-toolchain-trusty-$VERSION main" | sudo tee -a /etc/apt/sources.list > /dev/null; + sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test; fi; if [[ "$TRAVIS_OS_NAME" == "linux" ]] && [[ "$CC" == "gcc" ]]; then sudo -E apt-add-repository -y "ppa:ubuntu-toolchain-r/test"; From 62bb62322e53fb390effc1c271a084a16ad28b0c Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Thu, 15 Mar 2018 09:39:35 +0100 Subject: [PATCH 0663/1221] PS-3893: Added clang6 to the travis config and fixed a build error (cherry picked from commit b4079814efa28b79d7a5e54202f8844e6df582a0) (cherry picked from commit 6b453f306a9f8f13d848526d452208783c77a654) --- .travis.yml | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/.travis.yml b/.travis.yml index 750e4a56da89..ba2a17298994 100644 --- a/.travis.yml +++ b/.travis.yml @@ -43,49 +43,55 @@ matrix: env: VERSION=5.0 BUILD=RelWithDebInfo # 5 - compiler: clang - env: VERSION=5.0 BUILD=RelWithDebInfo INVERTED=ON + env: VERSION=6.0 BUILD=RelWithDebInfo # 6 + - compiler: clang + env: VERSION=6.0 BUILD=RelWithDebInfo INVERTED=ON + # 7 - compiler: gcc env: VERSION=7 BUILD=RelWithDebInfo INVERTED=ON - # 7 + # 8 - compiler: gcc env: VERSION=7 BUILD=RelWithDebInfo - # 8 + # 9 - compiler: gcc env: VERSION=6 BUILD=RelWithDebInfo - # 9 + # 10 - compiler: gcc env: VERSION=5 BUILD=RelWithDebInfo - # 10 + # 11 - compiler: gcc env: VERSION=4.8 BUILD=RelWithDebInfo - # 11 + # 12 - compiler: clang os: osx osx_image: xcode9.2 env: BUILD=Debug MAINTAINER_MODE=OFF WITHOUT_TOKUDB=ON WITHOUT_ROCKSDB=ON WITH_MECAB= - # 12 - - compiler: clang - env: VERSION=4.0 BUILD=Debug # 13 - compiler: clang - env: VERSION=5.0 BUILD=Debug + env: VERSION=4.0 BUILD=Debug # 14 - compiler: clang - env: VERSION=5.0 BUILD=Debug INVERTED=ON + env: VERSION=5.0 BUILD=Debug # 15 + - compiler: clang + env: VERSION=6.0 BUILD=Debug + # 16 + - compiler: clang + env: VERSION=6.0 BUILD=Debug INVERTED=ON + # 17 - compiler: gcc env: VERSION=7 BUILD=Debug INVERTED=ON - # 16 + # 18 - compiler: gcc env: VERSION=7 BUILD=Debug - # 17 + # 19 - compiler: gcc env: VERSION=6 BUILD=Debug - # 18 + # 20 - compiler: gcc env: VERSION=5 BUILD=Debug - # 19 + # 21 - compiler: gcc env: VERSION=4.8 BUILD=Debug @@ -109,6 +115,7 @@ script: PACKAGES="llvm-$VERSION-dev $PACKAGES"; curl -sSL "http://apt.llvm.org/llvm-snapshot.gpg.key" | sudo -E apt-key add -; echo "deb http://apt.llvm.org/trusty/ llvm-toolchain-trusty-$VERSION main" | sudo tee -a /etc/apt/sources.list > /dev/null; + sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test; fi; if [[ "$TRAVIS_OS_NAME" == "linux" ]] && [[ "$CC" == "gcc" ]]; then sudo -E apt-add-repository -y "ppa:ubuntu-toolchain-r/test"; From a9fde2b9d993cab59a764cfa6ae6e83c0517815a Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Thu, 15 Mar 2018 10:48:30 +0100 Subject: [PATCH 0664/1221] PS-3893: Fix warnings about incorrect enum usage in log_event --- sql/log_event.cc | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/sql/log_event.cc b/sql/log_event.cc index 36b73d3965e3..3198e95127d2 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -7726,7 +7726,7 @@ int User_var_log_event::pack_info(Protocol* protocol) else { switch (type) { - case REAL_RESULT: + case REAL_TYPE: double real_val; float8get(&real_val, val); if (!(buf= (char*) my_malloc(key_memory_log_event, @@ -7736,7 +7736,7 @@ int User_var_log_event::pack_info(Protocol* protocol) event_len+= my_gcvt(real_val, MY_GCVT_ARG_DOUBLE, MY_GCVT_MAX_FIELD_WIDTH, buf + val_offset, NULL); break; - case INT_RESULT: + case INT_TYPE: if (!(buf= (char*) my_malloc(key_memory_log_event, val_offset + 22, MYF(MY_WME)))) return 1; @@ -7744,7 +7744,7 @@ int User_var_log_event::pack_info(Protocol* protocol) ((flags & User_var_log_event::UNSIGNED_F) ? 10 : -10))-buf; break; - case DECIMAL_RESULT: + case DECIMAL_TYPE: { if (!(buf= (char*) my_malloc(key_memory_log_event, val_offset + DECIMAL_MAX_STR_LENGTH + 1, @@ -7758,7 +7758,7 @@ int User_var_log_event::pack_info(Protocol* protocol) event_len= str.length() + val_offset; break; } - case STRING_RESULT: + case STRING_TYPE: /* 15 is for 'COLLATE' and other chars */ buf= (char*) my_malloc(key_memory_log_event, event_len+val_len*2+1+2*MY_CS_NAME_SIZE+15, @@ -7779,7 +7779,7 @@ int User_var_log_event::pack_info(Protocol* protocol) event_len= p-buf; } break; - case ROW_RESULT: + case ROW_TYPE: default: DBUG_ASSERT(1); return 1; @@ -7833,14 +7833,14 @@ bool User_var_log_event::write(IO_CACHE* file) int4store(buf1 + 2, charset_number); switch (type) { - case REAL_RESULT: + case REAL_TYPE: float8store(buf2, *(double*) val); break; - case INT_RESULT: + case INT_TYPE: int8store(buf2, *(longlong*) val); unsigned_len= 1; break; - case DECIMAL_RESULT: + case DECIMAL_TYPE: { my_decimal *dec= (my_decimal *)val; dec->sanity_check(); @@ -7850,10 +7850,10 @@ bool User_var_log_event::write(IO_CACHE* file) val_len= decimal_bin_size(buf2[0], buf2[1]) + 2; break; } - case STRING_RESULT: + case STRING_TYPE: pos= (uchar*) val; break; - case ROW_RESULT: + case ROW_TYPE: default: DBUG_ASSERT(1); return 0; @@ -7908,20 +7908,20 @@ void User_var_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info) else { switch (type) { - case REAL_RESULT: + case REAL_TYPE: double real_val; char real_buf[FMT_G_BUFSIZE(14)]; float8get(&real_val, val); sprintf(real_buf, "%.14g", real_val); my_b_printf(head, ":=%s%s\n", real_buf, print_event_info->delimiter); break; - case INT_RESULT: + case INT_TYPE: char int_buf[22]; longlong10_to_str(uint8korr(val), int_buf, ((flags & User_var_log_event::UNSIGNED_F) ? 10 : -10)); my_b_printf(head, ":=%s%s\n", int_buf, print_event_info->delimiter); break; - case DECIMAL_RESULT: + case DECIMAL_TYPE: { char str_buf[200]; int str_len= sizeof(str_buf) - 1; @@ -7938,7 +7938,7 @@ void User_var_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info) my_b_printf(head, ":=%s%s\n", str_buf, print_event_info->delimiter); break; } - case STRING_RESULT: + case STRING_TYPE: { /* Let's express the string in hex. That's the most robust way. If we @@ -7981,7 +7981,7 @@ void User_var_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info) my_free(hex_str); } break; - case ROW_RESULT: + case ROW_TYPE: default: DBUG_ASSERT(1); return; @@ -8033,19 +8033,19 @@ int User_var_log_event::do_apply_event(Relay_log_info const *rli) else { switch (type) { - case REAL_RESULT: + case REAL_TYPE: float8get(&real_val, val); it= new Item_float(real_val, 0); val= (char*) &real_val; // Pointer to value in native format val_len= 8; break; - case INT_RESULT: + case INT_TYPE: int_val= (longlong) uint8korr(val); it= new Item_int(int_val); val= (char*) &int_val; // Pointer to value in native format val_len= 8; break; - case DECIMAL_RESULT: + case DECIMAL_TYPE: { Item_decimal *dec= new Item_decimal((uchar*) val+2, val[0], val[1]); it= dec; @@ -8053,10 +8053,10 @@ int User_var_log_event::do_apply_event(Relay_log_info const *rli) val_len= sizeof(my_decimal); break; } - case STRING_RESULT: + case STRING_TYPE: it= new Item_string(val, val_len, charset); break; - case ROW_RESULT: + case ROW_TYPE: default: DBUG_ASSERT(1); DBUG_RETURN(0); From 262e665cbe874dc560440fe398b9c76c12c9b52c Mon Sep 17 00:00:00 2001 From: Bin Su Date: Fri, 16 Mar 2018 12:06:26 +0800 Subject: [PATCH 0665/1221] BUG#20383215 - POSIX_FALLOCATE() CAN BE INTERRUPTED (OS ERROR NUMBER 4) Because posix_fallocate() could be interrupted, the related error messages may be printed out in this case, which makes the internal MTR test case failing with errors/warnings. Since this error message about the interruption may not help users too much, it is proper to just ignore this error of EINTR and go through to write zeroes to the file. Along with this change, it now also tries writing zeroes when the error is EINVAL. RB: 19056 Reviewed-by: Jimmy Yang --- storage/innobase/fil/fil0fil.cc | 54 +++++++++++++++++++++------------ 1 file changed, 35 insertions(+), 19 deletions(-) diff --git a/storage/innobase/fil/fil0fil.cc b/storage/innobase/fil/fil0fil.cc index 1ac07f731ee0..543cedcce07f 100644 --- a/storage/innobase/fil/fil0fil.cc +++ b/storage/innobase/fil/fil0fil.cc @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1995, 2017, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1995, 2018, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -5070,24 +5070,40 @@ fil_space_extend( #if !defined(NO_FALLOCATE) && defined(UNIV_LINUX) int ret = posix_fallocate(node->handle.m_file, node_start, len); - /* We already pass the valid offset and len in, if EINVAL - is returned, it could only mean that the file system doesn't - support fallocate(), currently one known case is - ext3 FS with O_DIRECT. We ignore EINVAL here so that the - error message won't flood. */ - if (ret != 0 && ret != EINVAL) { - ib::error() - << "posix_fallocate(): Failed to preallocate" - " data for file " - << node->name << ", desired size " - << len << " bytes." - " Operating system error number " - << ret << ". Check" - " that the disk is not full or a disk quota" - " exceeded. Make sure the file system supports" - " this function. Some operating system error" - " numbers are described at " REFMAN - " operating-system-error-codes.html"; + + DBUG_EXECUTE_IF("ib_posix_fallocate_fail_eintr", + ret = EINTR;); + + DBUG_EXECUTE_IF("ib_posix_fallocate_fail_einval", + ret = EINVAL;); + + if (ret != 0) { + /* We already pass the valid offset and len in, + if EINVAL is returned, it could only mean that the + file system doesn't support fallocate(), currently + one known case is ext3 with O_DIRECT. + + Also because above call could be interrupted, + in this case, simply go to plan B by writing zeroes. + + Both error messages for above two scenarios are + skipped in case of flooding error messages, because + they can be ignored by users. */ + if (ret != EINTR && ret != EINVAL) { + ib::error() + << "posix_fallocate(): Failed to" + " preallocate data for file " + << node->name << ", desired size " + << len << " bytes." + " Operating system error number " + << ret << ". Check" + " that the disk is not full or a disk" + " quota exceeded. Make sure the file" + " system supports this function." + " Some operating system error" + " numbers are described at " REFMAN + "operating-system-error-codes.html"; + } err = DB_IO_ERROR; } From c486d93aa576a018156d101be37ea606a18a86ab Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Fri, 16 Mar 2018 14:16:47 +0100 Subject: [PATCH 0666/1221] PS-3898: Include array in rdb_datadic It is used in this file, but never included. With libstdc++, the header works beacuse array is included internally by one of the other headers. --- storage/rocksdb/rdb_datadic.h | 1 + 1 file changed, 1 insertion(+) diff --git a/storage/rocksdb/rdb_datadic.h b/storage/rocksdb/rdb_datadic.h index 0c217cc8a0eb..5b79732950a0 100644 --- a/storage/rocksdb/rdb_datadic.h +++ b/storage/rocksdb/rdb_datadic.h @@ -17,6 +17,7 @@ /* C++ standard header files */ #include +#include #include #include #include From 2096be4b643e2047fa33c2dbd12c73d820fdae18 Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Fri, 16 Mar 2018 14:24:20 +0100 Subject: [PATCH 0667/1221] PS-3899: silence an uninitialized read in zlib According to the library developers, this is an optimization which while reads these bytes, doesn't use them for anything, and should be ignored. --- cmake/msan-blacklist.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/cmake/msan-blacklist.txt b/cmake/msan-blacklist.txt index e69de29bb2d1..5fa87a0592d6 100644 --- a/cmake/msan-blacklist.txt +++ b/cmake/msan-blacklist.txt @@ -0,0 +1 @@ +fun:longest_match From 43f99a0eacd2a6e0271482d79e544c9d518268d6 Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Fri, 16 Mar 2018 14:24:20 +0100 Subject: [PATCH 0668/1221] PS-3899: silence an uninitialized read in zlib According to the library developers, this is an optimization which while reads these bytes, doesn't use them for anything, and should be ignored. (cherry picked from commit 2096be4b643e2047fa33c2dbd12c73d820fdae18) --- cmake/msan-blacklist.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/cmake/msan-blacklist.txt b/cmake/msan-blacklist.txt index e69de29bb2d1..5fa87a0592d6 100644 --- a/cmake/msan-blacklist.txt +++ b/cmake/msan-blacklist.txt @@ -0,0 +1 @@ +fun:longest_match From 66d75cf47ec63a0b688aae6f34f3cb693e51b121 Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Fri, 16 Mar 2018 14:24:20 +0100 Subject: [PATCH 0669/1221] PS-3899: silence an uninitialized read in zlib According to the library developers, this is an optimization which while reads these bytes, doesn't use them for anything, and should be ignored. (cherry picked from commit 2096be4b643e2047fa33c2dbd12c73d820fdae18) (cherry picked from commit 43f99a0eacd2a6e0271482d79e544c9d518268d6) --- CMakeLists.txt | 2 +- cmake/msan-blacklist.txt | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 cmake/msan-blacklist.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index d155d9afac35..032356a9fa8e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -332,7 +332,7 @@ ENDIF() OPTION(WITH_MSAN "Enable memory sanitizer" OFF) IF(WITH_MSAN) - MY_SANITIZER_CHECK("-fsanitize=memory -fsanitize-memory-track-origins" + MY_SANITIZER_CHECK("-fsanitize=memory -fsanitize-memory-track-origins -fsanitize-blacklist=${CMAKE_CURRENT_SOURCE_DIR}/cmake/msan-blacklist.txt" WITH_MSAN_OK) IF(NOT WITH_MSAN_OK) MESSAGE(FATAL_ERROR "Do not know how to enable memory sanitizer") diff --git a/cmake/msan-blacklist.txt b/cmake/msan-blacklist.txt new file mode 100644 index 000000000000..5fa87a0592d6 --- /dev/null +++ b/cmake/msan-blacklist.txt @@ -0,0 +1 @@ +fun:longest_match From ce31f216d618b46ab31e3186fe281100c26ab072 Mon Sep 17 00:00:00 2001 From: rik prohaska Date: Wed, 14 Mar 2018 18:02:32 -0700 Subject: [PATCH 0670/1221] TDB-139 : Make read free rpl optional at compile time - Based on idea from "rik prohaska ", make RFR functionality a compile time option to allow easier initial porting to 8.0 - Introduced new macro flag TOKU_INCLUDE_RFR that when defined, causes all RFR functionality and variables to be compiled in, otherwise it is compiled out. Copyright (c) 2018, Rik Prohaska All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --- storage/tokudb/ha_tokudb.cc | 47 +++++++++++++++++++++++++++----- storage/tokudb/ha_tokudb.h | 2 ++ storage/tokudb/hatoku_defines.h | 2 ++ storage/tokudb/tokudb_sysvars.cc | 6 ++++ storage/tokudb/tokudb_sysvars.h | 2 ++ 5 files changed, 52 insertions(+), 7 deletions(-) diff --git a/storage/tokudb/ha_tokudb.cc b/storage/tokudb/ha_tokudb.cc index 8354a35cb704..449b8afc2018 100644 --- a/storage/tokudb/ha_tokudb.cc +++ b/storage/tokudb/ha_tokudb.cc @@ -1245,7 +1245,9 @@ ha_tokudb::ha_tokudb(handlerton * hton, TABLE_SHARE * table_arg):handler(hton, t tokudb_active_index = MAX_KEY; invalidate_icp(); trx_handler_list.data = this; +#if defined(TOKU_INCLUDE_RFR) && TOKU_INCLUDE_RFR in_rpl_write_rows = in_rpl_delete_rows = in_rpl_update_rows = false; +#endif // defined(TOKU_INCLUDE_RFR) && TOKU_INCLUDE_RFR TOKUDB_HANDLER_DBUG_VOID_RETURN; } @@ -3659,7 +3661,8 @@ int ha_tokudb::is_val_unique(bool* is_unique, uchar* record, KEY* key_info, uint return error; } -static void maybe_do_unique_checks_delay(THD *thd) { +#if defined(TOKU_INCLUDE_RFR) && TOKU_INCLUDE_RFR +static void maybe_do_unique_checks_delay_fn(THD *thd) { if (thd->slave_thread) { uint64_t delay_ms = tokudb::sysvars::rpl_unique_checks_delay(thd); if (delay_ms) @@ -3667,11 +3670,19 @@ static void maybe_do_unique_checks_delay(THD *thd) { } } +#define maybe_do_unique_checks_delay(__thd) \ + (maybe_do_unique_checks_delay_fn(__thd)) + +#define maybe_do_unique_checks_delay_if_flags_set( \ + __thd, __flags_set, __flags_check) \ + { if (((__flags_set) & DB_OPFLAGS_MASK) == \ + (__flags_check)) maybe_do_unique_checks_delay_fn(__thd); } + static bool need_read_only(THD *thd) { return opt_readonly || !tokudb::sysvars::rpl_check_readonly(thd); } -static bool do_unique_checks(THD *thd, bool do_rpl_event) { +static bool do_unique_checks_fn(THD *thd, bool do_rpl_event) { if (do_rpl_event && thd->slave_thread && need_read_only(thd) && @@ -3682,6 +3693,26 @@ static bool do_unique_checks(THD *thd, bool do_rpl_event) { } } +#define do_unique_checks(__thd, __flags) \ + (do_unique_checks_fn(__thd, __flags)) + +#else + +#define maybe_do_unique_checks_delay(__thd) ((void)0) + +#define maybe_do_unique_checks_delay_if_flags_set( \ + __thd, __flags_set, __flags_check) \ + ((void)0) + +static bool do_unique_checks_fn(THD *thd) { + return !thd_test_options(thd, OPTION_RELAXED_UNIQUE_CHECKS); +} + +#define do_unique_checks(__thd, _flags) \ + (do_unique_checks_fn(__thd)) + +#endif // defined(TOKU_INCLUDE_RFR) && TOKU_INCLUDE_RFR + int ha_tokudb::do_uniqueness_checks(uchar* record, DB_TXN* txn, THD* thd) { int error = 0; // @@ -3876,8 +3907,7 @@ int ha_tokudb::insert_row_to_main_dictionary(uchar* record, DBT* pk_key, DBT* pk set_main_dict_put_flags(thd, true, &put_flags); // for test, make unique checks have a very long duration - if ((put_flags & DB_OPFLAGS_MASK) == DB_NOOVERWRITE) - maybe_do_unique_checks_delay(thd); + maybe_do_unique_checks_delay_if_flags_set(thd, put_flags, DB_NOOVERWRITE); error = share->file->put(share->file, txn, pk_key, pk_val, put_flags); if (error) { @@ -3896,8 +3926,7 @@ int ha_tokudb::insert_rows_to_dictionaries_mult(DBT* pk_key, DBT* pk_val, DB_TXN uint32_t flags = mult_put_flags[primary_key]; // for test, make unique checks have a very long duration - if ((flags & DB_OPFLAGS_MASK) == DB_NOOVERWRITE) - maybe_do_unique_checks_delay(thd); + maybe_do_unique_checks_delay_if_flags_set(thd, flags, DB_NOOVERWRITE); // the insert ignore optimization uses DB_NOOVERWRITE_NO_ERROR, // which is not allowed with env->put_multiple. @@ -5909,14 +5938,16 @@ int ha_tokudb::rnd_pos(uchar * buf, uchar * pos) { ha_statistic_increment(&SSV::ha_read_rnd_count); tokudb_active_index = MAX_KEY; - // test rpl slave by inducing a delay before the point query THD *thd = ha_thd(); +#if defined(TOKU_INCLUDE_RFR) && TOKU_INCLUDE_RFR + // test rpl slave by inducing a delay before the point query if (thd->slave_thread && (in_rpl_delete_rows || in_rpl_update_rows)) { DBUG_EXECUTE_IF("tokudb_crash_if_rpl_looks_up_row", DBUG_ASSERT(0);); uint64_t delay_ms = tokudb::sysvars::rpl_lookup_rows_delay(thd); if (delay_ms) usleep(delay_ms * 1000); } +#endif // defined(TOKU_INCLUDE_RFR) && TOKU_INCLUDE_RFR info.ha = this; info.buf = buf; @@ -8921,6 +8952,7 @@ void ha_tokudb::remove_from_trx_handler_list() { trx->handlers = list_delete(trx->handlers, &trx_handler_list); } +#if defined(TOKU_INCLUDE_RFR) && TOKU_INCLUDE_RFR void ha_tokudb::rpl_before_write_rows() { in_rpl_write_rows = true; } @@ -8951,6 +8983,7 @@ bool ha_tokudb::rpl_lookup_rows() { else return tokudb::sysvars::rpl_lookup_rows(ha_thd()); } +#endif // defined(TOKU_INCLUDE_RFR) && TOKU_INCLUDE_RFR // table admin #include "ha_tokudb_admin.cc" diff --git a/storage/tokudb/ha_tokudb.h b/storage/tokudb/ha_tokudb.h index 9c6af2550cdf..014736c2f60c 100644 --- a/storage/tokudb/ha_tokudb.h +++ b/storage/tokudb/ha_tokudb.h @@ -1060,6 +1060,7 @@ class ha_tokudb : public handler { int do_optimize(THD *thd); int map_to_handler_error(int error); +#if defined(TOKU_INCLUDE_RFR) && TOKU_INCLUDE_RFR public: void rpl_before_write_rows(); void rpl_after_write_rows(); @@ -1072,6 +1073,7 @@ class ha_tokudb : public handler { bool in_rpl_write_rows; bool in_rpl_delete_rows; bool in_rpl_update_rows; +#endif // defined(TOKU_INCLUDE_RFR) && TOKU_INCLUDE_RFR }; #if TOKU_INCLUDE_OPTION_STRUCTS diff --git a/storage/tokudb/hatoku_defines.h b/storage/tokudb/hatoku_defines.h index 05a06ac8142e..81daafad9b26 100644 --- a/storage/tokudb/hatoku_defines.h +++ b/storage/tokudb/hatoku_defines.h @@ -91,6 +91,7 @@ Copyright (c) 2006, 2015, Percona and/or its affiliates. All rights reserved. #define TOKU_INCLUDE_ALTER_56 1 #define TOKU_INCLUDE_ROW_TYPE_COMPRESSION 0 #define TOKU_PARTITION_WRITE_FRM_DATA 0 +#define TOKU_INCLUDE_RFR 1 #else #error #endif @@ -117,6 +118,7 @@ Copyright (c) 2006, 2015, Percona and/or its affiliates. All rights reserved. #endif #endif #define TOKU_OPTIMIZE_WITH_RECREATE 1 +#define TOKU_INCLUDE_RFR 1 #elif 50500 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 50599 // mysql 5.5 and mariadb 5.5 diff --git a/storage/tokudb/tokudb_sysvars.cc b/storage/tokudb/tokudb_sysvars.cc index 31c44c455009..f58990b1fd80 100644 --- a/storage/tokudb/tokudb_sysvars.cc +++ b/storage/tokudb/tokudb_sysvars.cc @@ -849,6 +849,7 @@ static MYSQL_THDVAR_ENUM( SRV_ROW_FORMAT_ZLIB, &tokudb_row_format_typelib); +#if defined(TOKU_INCLUDE_RFR) && TOKU_INCLUDE_RFR static MYSQL_THDVAR_BOOL( rpl_check_readonly, PLUGIN_VAR_THDLOCAL, @@ -894,6 +895,7 @@ static MYSQL_THDVAR_ULONGLONG( 0, ~0ULL, 1); +#endif // defined(TOKU_INCLUDE_RFR) && TOKU_INCLUDE_RFR #if TOKU_INCLUDE_UPSERT static MYSQL_THDVAR_BOOL( @@ -1057,11 +1059,13 @@ st_mysql_sys_var* system_variables[] = { MYSQL_SYSVAR(read_block_size), MYSQL_SYSVAR(read_buf_size), MYSQL_SYSVAR(row_format), +#if defined(TOKU_INCLUDE_RFR) && TOKU_INCLUDE_RFR MYSQL_SYSVAR(rpl_check_readonly), MYSQL_SYSVAR(rpl_lookup_rows), MYSQL_SYSVAR(rpl_lookup_rows_delay), MYSQL_SYSVAR(rpl_unique_checks), MYSQL_SYSVAR(rpl_unique_checks_delay), +#endif // defined(TOKU_INCLUDE_RFR) && TOKU_INCLUDE_RFR #if TOKU_INCLUDE_UPSERT MYSQL_SYSVAR(disable_slow_update), @@ -1187,6 +1191,7 @@ uint read_buf_size(THD* thd) { row_format_t row_format(THD *thd) { return (row_format_t) THDVAR(thd, row_format); } +#if defined(TOKU_INCLUDE_RFR) && TOKU_INCLUDE_RFR my_bool rpl_check_readonly(THD* thd) { return (THDVAR(thd, rpl_check_readonly) != 0); } @@ -1202,6 +1207,7 @@ my_bool rpl_unique_checks(THD* thd) { ulonglong rpl_unique_checks_delay(THD* thd) { return THDVAR(thd, rpl_unique_checks_delay); } +#endif // defined(TOKU_INCLUDE_RFR) && TOKU_INCLUDE_RFR my_bool support_xa(THD* thd) { return (THDVAR(thd, support_xa) != 0); } diff --git a/storage/tokudb/tokudb_sysvars.h b/storage/tokudb/tokudb_sysvars.h index c446e2125707..fd7f049a901d 100644 --- a/storage/tokudb/tokudb_sysvars.h +++ b/storage/tokudb/tokudb_sysvars.h @@ -132,11 +132,13 @@ my_bool prelock_empty(THD* thd); uint read_block_size(THD* thd); uint read_buf_size(THD* thd); row_format_t row_format(THD *thd); +#if defined(TOKU_INCLUDE_RFR) && TOKU_INCLUDE_RFR my_bool rpl_check_readonly(THD* thd); my_bool rpl_lookup_rows(THD* thd); ulonglong rpl_lookup_rows_delay(THD* thd); my_bool rpl_unique_checks(THD* thd); ulonglong rpl_unique_checks_delay(THD* thd); +#endif // defined(TOKU_INCLUDE_RFR) && TOKU_INCLUDE_RFR my_bool support_xa(THD* thd); extern st_mysql_sys_var* system_variables[]; From 42a787f1547a0f2b5c64edb1f10141628471ccc9 Mon Sep 17 00:00:00 2001 From: Dima Date: Mon, 19 Mar 2018 01:57:51 +0300 Subject: [PATCH 0671/1221] Fix for DOC-640 - don't mention MariaDB as having XtraDB as a part (it doesn't, starting from version 10.2) --- doc/source/percona_xtradb.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/source/percona_xtradb.rst b/doc/source/percona_xtradb.rst index 2ff5d322f210..cc2b8a3eebc3 100644 --- a/doc/source/percona_xtradb.rst +++ b/doc/source/percona_xtradb.rst @@ -10,4 +10,4 @@ |Percona| |XtraDB| includes all of |InnoDB| 's robust, reliable ``ACID``-compliant design and advanced ``MVCC`` architecture, and builds on that solid foundation with more features, more tunability, more metrics, and more scalability. In particular, it is designed to scale better on many cores, to use memory more efficiently, and to be more convenient and useful. The new features are especially designed to alleviate some of |InnoDB| 's limitations. We choose features and fixes based on customer requests and on our best judgment of real-world needs as a high-performance consulting company. -|Percona| |XtraDB| engine will not have further binary releases, it is distributed as part of |Percona Server| and *MariaDB*. +|Percona| |XtraDB| engine will not have further binary releases, it is distributed as part of |Percona Server|. From 9fae8fc31cf2734b86e2247ba39ff6d7871b67ff Mon Sep 17 00:00:00 2001 From: Vlad Lesin Date: Mon, 19 Mar 2018 13:53:12 +0300 Subject: [PATCH 0672/1221] PS-3903: lex_token.h dependency issue for libmysqld. sql_yacc.cc includes lex_token.h, that is why both GenServerSource and GenDigestServerSource must be generated before sql_embedded target build. --- libmysqld/CMakeLists.txt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/libmysqld/CMakeLists.txt b/libmysqld/CMakeLists.txt index 7f21e57afd94..ac47c051bb73 100644 --- a/libmysqld/CMakeLists.txt +++ b/libmysqld/CMakeLists.txt @@ -84,7 +84,10 @@ ENDIF() ADD_CONVENIENCE_LIBRARY(sql_embedded ${SQL_EMBEDDED_SOURCES}) DTRACE_INSTRUMENT(sql_embedded) -ADD_DEPENDENCIES(sql_embedded GenError GenServerSource) +# sql_yacc.cc includes lex_token.h, that is why both +# GenServerSource and GenDigestServerSource must be generated before +# sql_embedded target build +ADD_DEPENDENCIES(sql_embedded GenError GenServerSource GenDigestServerSource) # On Windows, static embedded server library is called mysqlserver.lib # On Unix, it is libmysqld.a From 4a041b99bab1bc20831b9e4ae8219cbd039391c0 Mon Sep 17 00:00:00 2001 From: Tiago Vale Date: Mon, 19 Mar 2018 11:21:57 +0000 Subject: [PATCH 0673/1221] Bug#27604471 THERE IS NO LOCAL IP ADDRESS MATCHING THE ONE CONFIGURED FOR THE LOCAL NODE Note ==== This bug is a duplicate of Bug#27684295 BACKPORT BUG#27376511 TO 5.7. Problem ======= When using an IP or hostname in the GR configuration parameters, there would be no match on Mac OSX. This occurs because the buffer isn't large enough to store all the interfaces' configurations, and its size does not increase because the buffer isn't completely filled, since the configurations have variable sizes which do not add up exactly to the buffer size. Fix === Modified condition to increase the buffer when the difference between its size and that of the retrieved configurations is smaller than IFNAMSIZ added to the size of the sockaddr_storage struct, which is "large enough to accommodate all supported protocol-specific address structures", according to IETF RFC3493. Reviewed-by: Sujatha Sivakumar Reviewed-by: Filipe Campos RB: 19146 --- .../src/bindings/xcom/xcom/sock_probe_ix.c | 29 +++++++++++++++---- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/sock_probe_ix.c b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/sock_probe_ix.c index bb995a4e08f7..3925b3c147ad 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/sock_probe_ix.c +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/sock_probe_ix.c @@ -42,7 +42,9 @@ #include "x_platform.h" /* Buffer size should be always a multiple of 'struct ifreq' size */ -#define IF_INIT_BUF_SIZE ((int)sizeof(struct ifreq) * 10) +#define MAX_SOCKADDR_STRUCT_SIZE (int)sizeof(struct sockaddr_storage) +#define MAX_IFCONF_ENTRY_SIZE (IFNAMSIZ + MAX_SOCKADDR_STRUCT_SIZE) +#define IF_INIT_BUF_SIZE (MAX_IFCONF_ENTRY_SIZE * 10) #define IFRP_INIT_ARR_SIZE 64 struct sock_probe @@ -87,9 +89,23 @@ static int init_sock_probe(sock_probe *s) reset_sock_probe(s); /* - ioctl may overflow without returning an error. Thence we iterate to - make sure that we don't fill up the buffer. Then, when finally ifc_len - is smaller than the buffer size, we break the loop. + The ioctl function may overflow without returning any error, and it may + also overflow even without filling up the buffer, as is the case of + Mac OS, because it does not insert any byte of a configuration that does + not fit entirely in the remaining buffer. In this case, ioctl still + returns 0 signaling the operation as successful. + Due to this, and also to the fact that the entries in the buffer may have + variable size in some platforms and that the buffer size grows in + multiples of the size of the ifreq struct, we have to iterate to make sure + that there are no interfaces' configurations outside the buffer. + To circumvent this problem, we assume that any variable size information + will never have a size that is greater than MAX_IFCONF_ENTRY_SIZE + (IFNAMSIZ + (int)sizeof(sockaddr_storage)). + The size of the sockaddr_storage struct is used as a measuring unit + because this struct is large enough to contain any socket address + structure that the system supports. + See https://tools.ietf.org/html/rfc3493#section-3.10 for more details on + sockaddr_storage. */ do { @@ -115,7 +131,7 @@ static int init_sock_probe(sock_probe *s) abrt= TRUE; goto err; } - } while (s->ifc.ifc_len >= bufsize); + } while (s->ifc.ifc_len >= (bufsize - MAX_IFCONF_ENTRY_SIZE)); DBGOUT(STRLIT("Registering interfaces:")); @@ -152,10 +168,13 @@ static int init_sock_probe(sock_probe *s) #if defined(SA_LEN) ptr+= IFNAMSIZ + SA_LEN(sa); + assert(MAX_IFCONF_ENTRY_SIZE >= (IFNAMSIZ + SA_LEN(sa))); #elif defined(HAVE_STRUCT_SOCKADDR_SA_LEN) ptr+= IFNAMSIZ + sa->sa_len; + assert(MAX_IFCONF_ENTRY_SIZE >= (IFNAMSIZ + sa->sa_len)); #else ptr+= sizeof(struct ifreq); + assert(MAX_IFCONF_ENTRY_SIZE >= sizeof(struct ifreq)); #endif #if defined(TASK_DBUG_ON) && TASK_DBUG_ON From 63e0af4c3d190d03b098ca7be8f2af15aeda60f7 Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Mon, 12 Mar 2018 11:12:45 -0700 Subject: [PATCH 0674/1221] TDB-134 : TokuDB 5.7 is missing minor optimization for read-only transactions. Code to set FT txn flags was conditionally compiled to 5.6 only, not 5.7. Removed MYSQL_VERSION_ID guards surrounding said code from 5.7. Unfortunately, this is an edge case performance only issue so know useful way to design a deterministic mtr case. --- storage/tokudb/ha_tokudb.cc | 2 -- 1 file changed, 2 deletions(-) diff --git a/storage/tokudb/ha_tokudb.cc b/storage/tokudb/ha_tokudb.cc index 04362bb999b9..a0d315104734 100644 --- a/storage/tokudb/ha_tokudb.cc +++ b/storage/tokudb/ha_tokudb.cc @@ -6386,11 +6386,9 @@ int ha_tokudb::create_txn(THD* thd, tokudb_trx_data* trx) { /* QQQ We have to start a master transaction */ // DBUG_PRINT("trans", ("starting transaction all ")); uint32_t txn_begin_flags = toku_iso_to_txn_flag(toku_iso_level); -#if 50614 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 50699 if (thd_tx_is_read_only(thd)) { txn_begin_flags |= DB_TXN_READ_ONLY; } -#endif if ((error = txn_begin(db_env, NULL, &trx->all, txn_begin_flags, thd))) { goto cleanup; } From e6a3f7e8d2f9d54620984b8e65fe9656e18d0ae3 Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Mon, 12 Mar 2018 13:16:51 -0700 Subject: [PATCH 0675/1221] TDB-135 : TokuDB 5.7 missing mrr implementation as it seems compiled out of 5.7 - Removed MYSQL_VERSION_ID constraints from TokuDB 'multi-range read' implementation which was bound to 5.6, so did not exist within 5.7. - Removed MariaDB specific implementation. - Re-enabled MRR test added by TDB-137 and re-recorded for 5.7 differences. --- mysql-test/suite/tokudb/r/tokudb_mrr.result | 144 +++++++++++++++----- mysql-test/suite/tokudb/t/disabled.def | 1 - storage/tokudb/ha_tokudb.cc | 30 +--- storage/tokudb/ha_tokudb.h | 35 ----- storage/tokudb/ha_tokudb_mrr_maria.cc | 71 ---------- 5 files changed, 115 insertions(+), 166 deletions(-) delete mode 100644 storage/tokudb/ha_tokudb_mrr_maria.cc diff --git a/mysql-test/suite/tokudb/r/tokudb_mrr.result b/mysql-test/suite/tokudb/r/tokudb_mrr.result index 9eb0c2f5e348..0c630140ebfe 100644 --- a/mysql-test/suite/tokudb/r/tokudb_mrr.result +++ b/mysql-test/suite/tokudb/r/tokudb_mrr.result @@ -181,8 +181,10 @@ select 'zz-1',NULL,'cc-2', 'filler-data' from t2 order by a limit 500; explain select * from t4 where a IS NULL and b IS NULL and (c IS NULL or c='no-such-row1' or c='no-such-row2'); -id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE t4 range idx1 idx1 29 NULL 16 Using where; Using MRR +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t4 NULL range idx1 idx1 29 NULL 16 100.00 Using where; Using MRR +Warnings: +Note 1003 /* select#1 */ select `test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b`,`test`.`t4`.`c` AS `c`,`test`.`t4`.`filler` AS `filler` from `test`.`t4` where (isnull(`test`.`t4`.`a`) and isnull(`test`.`t4`.`b`) and (isnull(`test`.`t4`.`c`) or (`test`.`t4`.`c` = 'no-such-row1') or (`test`.`t4`.`c` = 'no-such-row2'))) select * from t4 where a IS NULL and b IS NULL and (c IS NULL or c='no-such-row1' or c='no-such-row2'); a b c filler @@ -203,8 +205,10 @@ NULL NULL NULL NULL-2 NULL NULL NULL NULL-1 explain select * from t4 where (a ='b-1' or a='bb-1') and b IS NULL and (c='c-1' or c='cc-2'); -id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE t4 range idx1 idx1 29 NULL 32 Using where; Using MRR +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t4 NULL range idx1 idx1 29 NULL 32 100.00 Using where; Using MRR +Warnings: +Note 1003 /* select#1 */ select `test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b`,`test`.`t4`.`c` AS `c`,`test`.`t4`.`filler` AS `filler` from `test`.`t4` where (((`test`.`t4`.`a` = 'b-1') or (`test`.`t4`.`a` = 'bb-1')) and isnull(`test`.`t4`.`b`) and ((`test`.`t4`.`c` = 'c-1') or (`test`.`t4`.`c` = 'cc-2'))) select * from t4 where (a ='b-1' or a='bb-1') and b IS NULL and (c='c-1' or c='cc-2'); a b c filler b-1 NULL c-1 NULL-15 @@ -272,6 +276,8 @@ bb-1 NULL cc-2 NULL-1 drop table t1, t2, t3, t4; create table t1 (a int, b int not null,unique key (a,b),index(b)); insert ignore into t1 values (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(null,7),(9,9),(8,8),(7,7),(null,9),(null,9),(6,6); +Warnings: +Warning 1062 Duplicate entry '6-6' for key 'a' create table t2 like t1; insert into t2 select * from t1; alter table t1 modify b blob not null, add c int not null, drop key a, add unique key (a,b(20),c), drop key b, add key (b(10)); @@ -341,10 +347,11 @@ FROM t2 WHERE t2.int_key IS NULL GROUP BY t2.pk ); -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 -2 SUBQUERY t2 ref int_key int_key 5 const 1 100.00 Using where; Using index +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 PRIMARY NULL NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE +2 SUBQUERY t2 NULL ref int_key int_key 5 const 1 100.00 Using where; Using index Warnings: +Warning 1681 'EXTENDED' is deprecated and will be removed in a future release. Note 1003 /* select#1 */ select min(`test`.`t1`.`pk`) AS `MIN(t1.pk)` from `test`.`t1` where 0 DROP TABLE t1, t2; # @@ -357,8 +364,10 @@ insert into t1 select A.a + 10*(B.a + 10*C.a), 'bbb','filler' from t0 A, t0 B, t update t1 set b=repeat(char(65+a), 20) where a < 25; This must show range + using index condition: explain select * from t1 where a < 10 and b = repeat(char(65+a), 20); -id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE t1 range a a 5 NULL x Using where +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 NULL range a a 5 NULL x x Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`filler` AS `filler` from `test`.`t1` where ((`test`.`t1`.`a` < 10) and (`test`.`t1`.`b` = repeat(char((65 + `test`.`t1`.`a`)),20))) select * from t1 where a < 10 and b = repeat(char(65+a), 20); a b filler 0 AAAAAAAAAAAAAAAAAAAA filler @@ -381,8 +390,10 @@ create table t1 (a int, b int, key(a)); insert into t1 select A.a + 10 *(B.a + 10*C.a), A.a + 10 *(B.a + 10*C.a) from t0 A, t0 B, t0 C; This mustn't show "Using MRR": explain select * from t1 where a < 20 order by a; -id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE t1 range a a 5 NULL 20 Using where +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 NULL range a a 5 NULL 20 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t1` where (`test`.`t1`.`a` < 20) order by `test`.`t1`.`a` drop table t0, t1; set @read_rnd_buffer_size_save= @@read_rnd_buffer_size; set read_rnd_buffer_size=64; @@ -398,8 +409,10 @@ from t1 A, t1 B, t1 C; EXPLAIN select count(length(a) + length(filler)) from t2 force index (k1) where a>='a-1000-a' and a <'a-1001-a'; -id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE t2 range k1 k1 9 NULL 100 Using where; Using MRR +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t2 NULL range k1 k1 9 NULL 100 100.00 Using where; Using MRR +Warnings: +Note 1003 /* select#1 */ select count((length(`test`.`t2`.`a`) + length(`test`.`t2`.`filler`))) AS `count(length(a) + length(filler))` from `test`.`t2` FORCE INDEX (`k1`) where ((`test`.`t2`.`a` >= 'a-1000-a') and (`test`.`t2`.`a` < 'a-1001-a')) select count(length(a) + length(filler)) from t2 force index (k1) where a>='a-1000-a' and a <'a-1001-a'; @@ -410,8 +423,10 @@ create table t2 (a char(100), b char(100), c char(100), d int, filler char(10), key(d), primary key (a,b,c)); insert into t2 select A.a, B.a, B.a, A.a, 'filler' from t1 A, t1 B; explain select * from t2 force index (d) where d < 10; -id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE t2 range d d 5 NULL # Using where +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t2 NULL range d d 5 NULL # 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d`,`test`.`t2`.`filler` AS `filler` from `test`.`t2` FORCE INDEX (`d`) where (`test`.`t2`.`d` < 10) drop table t2; drop table t1; set @@read_rnd_buffer_size= @read_rnd_buffer_size_save; @@ -451,12 +466,17 @@ KEY `time_key` (`time_key`), KEY `datetime_key` (`datetime_key`), KEY `varchar_key` (`varchar_key`) ); -INSERT INTO t1 VALUES +INSERT IGNORE INTO t1 VALUES (1,5,5,'2009-10-16','2009-10-16','09:28:15','09:28:15','2007-09-14 05:34:08','2007-09-14 05:34:08','qk','qk'), (2,6,6,'0000-00-00','0000-00-00','23:06:39','23:06:39','0000-00-00 00:00:00','0000-00-00 00:00:00','j','j'), (3,10,10,'2000-12-18','2000-12-18','22:16:19','22:16:19','2006-11-04 15:42:50','2006-11-04 15:42:50','aew','aew'), (4,0,0,'2001-09-18','2001-09-18','00:00:00','00:00:00','2004-03-23 13:23:35','2004-03-23 13:23:35',NULL,NULL), (5,6,6,'2007-08-16','2007-08-16','22:13:38','22:13:38','2004-08-19 11:01:28','2004-08-19 11:01:28','qu','qu'); +Warnings: +Warning 1264 Out of range value for column 'date_key' at row 2 +Warning 1264 Out of range value for column 'date_nokey' at row 2 +Warning 1264 Out of range value for column 'datetime_key' at row 2 +Warning 1264 Out of range value for column 'datetime_nokey' at row 2 select pk from t1 WHERE `varchar_key` > 'kr' group by pk; pk 1 @@ -489,8 +509,10 @@ id 60 This must show type=index, extra=Using where explain SELECT * FROM t1 WHERE parent_id IS NOT NULL ORDER BY id DESC LIMIT 1; -id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE t1 index ind_parent_id PRIMARY 4 NULL 1 Using where +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 NULL index ind_parent_id PRIMARY 4 NULL 1 57.14 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`id` AS `id`,`test`.`t1`.`parent_id` AS `parent_id`,`test`.`t1`.`name` AS `name` from `test`.`t1` where (`test`.`t1`.`parent_id` is not null) order by `test`.`t1`.`id` desc limit 1 SELECT * FROM t1 WHERE parent_id IS NOT NULL ORDER BY id DESC LIMIT 1; id parent_id name 60 40 F @@ -537,9 +559,10 @@ FROM t1 LEFT JOIN t2 ON t1.pk = t2.i2 WHERE t2.i1 > 5 AND t2.pk IS NULL ORDER BY i1; -id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE t1 system PRIMARY NULL NULL NULL 1 NULL -1 SIMPLE t2 const PRIMARY,k1 PRIMARY 4 const 1 Using where +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table +Warnings: +Note 1003 /* select#1 */ select `test`.`t2`.`i1` AS `i1` from `test`.`t2` where ((`test`.`t2`.`i1` > 5) and isnull(`test`.`t2`.`pk`) and multiple equal('2', `test`.`t2`.`i2`)) order by `test`.`t2`.`i1` SELECT i1 FROM t1 LEFT JOIN t2 ON t1.pk = t2.i2 WHERE t2.i1 > 5 @@ -564,9 +587,11 @@ INSERT INTO t2 VALUES ('v'), ('c'); EXPLAIN SELECT STRAIGHT_JOIN t1.c1 FROM t1 RIGHT OUTER JOIN t2 ON t1.c1 = t2.c1 WHERE t1.pk > 176; -id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE t2 ALL NULL NULL NULL NULL 2 NULL -1 SIMPLE t1 range PRIMARY PRIMARY 4 NULL 1 Using where +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 2 100.00 NULL +1 SIMPLE t1 NULL range PRIMARY PRIMARY 4 NULL 1 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select straight_join `test`.`t1`.`c1` AS `c1` from `test`.`t2` join `test`.`t1` where ((`test`.`t1`.`c1` = `test`.`t2`.`c1`) and (`test`.`t1`.`pk` > 176)) SELECT STRAIGHT_JOIN t1.c1 FROM t1 RIGHT OUTER JOIN t2 ON t1.c1 = t2.c1 WHERE t1.pk > 176; @@ -591,8 +616,10 @@ INSERT INTO t1 VALUES (0,1),(1,2),(2,3); EXPLAIN SELECT i1 FROM t1 WHERE i2 > 2; -id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE t1 range i2 i2 4 NULL 1 Using where +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 NULL range i2 i2 4 NULL 1 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`i1` AS `i1` from `test`.`t1` where (`test`.`t1`.`i2` > 2) SELECT i1 FROM t1 WHERE i2 > 2; @@ -656,12 +683,14 @@ ON t2.c1 = t4.c3) ON t1.c1 = t4.c2) RIGHT OUTER JOIN t5 ON t2.c2 <= t5.c1 WHERE t1.i1 = 1; -id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE t5 ALL NULL NULL NULL NULL 10 NULL -1 SIMPLE t1 ALL NULL NULL NULL NULL 10 Using where; Using join buffer (Block Nested Loop) -1 SIMPLE t2 ALL NULL NULL NULL NULL 10 Using where; Using join buffer (Block Nested Loop) -1 SIMPLE t3 ALL NULL NULL NULL NULL 10 Using join buffer (Block Nested Loop) -1 SIMPLE t4 ALL k1 NULL NULL NULL 1 Range checked for each record (index map: 0x2) +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t5 NULL ALL NULL NULL NULL NULL 10 100.00 NULL +1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 10 10.00 Using where; Using join buffer (Block Nested Loop) +1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 10 33.33 Using where; Using join buffer (Block Nested Loop) +1 SIMPLE t3 NULL ALL NULL NULL NULL NULL 10 100.00 Using join buffer (Block Nested Loop) +1 SIMPLE t4 NULL ALL k1 NULL NULL NULL 1 100.00 Range checked for each record (index map: 0x2) +Warnings: +Note 1003 /* select#1 */ select straight_join `test`.`t1`.`pk` AS `pk`,`test`.`t1`.`i1` AS `i1`,`test`.`t1`.`c1` AS `c1`,`test`.`t2`.`pk` AS `pk`,`test`.`t2`.`c1` AS `c1`,`test`.`t2`.`c2` AS `c2`,`test`.`t3`.`pk` AS `pk`,`test`.`t3`.`c1` AS `c1`,`test`.`t4`.`pk` AS `pk`,`test`.`t4`.`c1_key` AS `c1_key`,`test`.`t4`.`c2` AS `c2`,`test`.`t4`.`c3` AS `c3`,`test`.`t5`.`pk` AS `pk`,`test`.`t5`.`c1` AS `c1` from `test`.`t5` join `test`.`t1` join `test`.`t2` join `test`.`t3` join `test`.`t4` where ((`test`.`t4`.`c3` = `test`.`t2`.`c1`) and (`test`.`t4`.`c2` = `test`.`t1`.`c1`) and (`test`.`t1`.`i1` = 1) and (`test`.`t2`.`c2` <= `test`.`t5`.`c1`) and (convert(`test`.`t3`.`c1` using utf8) <= `test`.`t4`.`c1_key`)) SELECT STRAIGHT_JOIN * FROM (t1 LEFT JOIN @@ -674,6 +703,49 @@ WHERE t1.i1 = 1; pk i1 c1 pk c1 c2 pk c1 pk c1_key c2 c3 pk c1 DROP TABLE ten, t1, t2, t3, t4, t5; # +# Bug 18172819 CRASH ON DSMRR_IMPL::CHOOSE_MRR_IMPL IN SQL/HANDLER.CC +# +set @big_tables_save= @@big_tables; +set @optimizer_switch_save=@@optimizer_switch; +set big_tables=ON; +set optimizer_switch='derived_merge=off'; +SELECT @@big_tables; +@@big_tables +1 +CREATE TABLE t1 ( +i1 INTEGER NOT NULL, +c1 VARCHAR(1) +); +INSERT INTO t1 VALUES (1,'a'), (2, NULL); +CREATE TABLE t2 ( +c1 VARCHAR(1), +i1 INTEGER NOT NULL, +KEY (c1) +); +INSERT INTO t2 VALUES ('a', 1), (NULL, 2); +EXPLAIN SELECT * +FROM +( SELECT * FROM t1 ) AS d1 +WHERE d1.c1 IN ( SELECT c1 FROM t2 ) +AND d1.c1 IS NULL +ORDER BY d1.i1; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 PRIMARY NULL ref 4 const 1 100.00 Using where; Using filesort +3 DEPENDENT SUBQUERY t2 NULL index_subquery c1 c1 4 func 1 100.00 Using index +2 DERIVED t1 NULL ALL NULL NULL NULL NULL 2 100.00 NULL +Warnings: +Note 1003 /* select#1 */ select `d1`.`i1` AS `i1`,`d1`.`c1` AS `c1` from (/* select#2 */ select `test`.`t1`.`i1` AS `i1`,`test`.`t1`.`c1` AS `c1` from `test`.`t1`) `d1` where ((`d1`.`c1`,(((`d1`.`c1`) in t2 on c1))) and isnull(`d1`.`c1`)) order by `d1`.`i1` +SELECT * +FROM +( SELECT * FROM t1 ) AS d1 +WHERE d1.c1 IN ( SELECT c1 FROM t2 ) +AND d1.c1 IS NULL +ORDER BY d1.i1; +i1 c1 +DROP TABLE t1, t2; +set big_tables=@big_tables_save; +set optimizer_switch=@optimizer_switch_save; +# # Bug#41029 "MRR: SELECT FOR UPDATE fails to lock gaps (InnoDB table)" # SET AUTOCOMMIT=0; @@ -688,10 +760,14 @@ SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ; SELECT @@tx_isolation; @@tx_isolation REPEATABLE-READ +Warnings: +Warning 1287 '@@tx_isolation' is deprecated and will be removed in a future release. Please use '@@transaction_isolation' instead START TRANSACTION; EXPLAIN SELECT * FROM t1 WHERE a >= 2 FOR UPDATE; -id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE t1 range a a 5 NULL 2 Using where +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 NULL range a a 5 NULL 2 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`dummy` AS `dummy`,`test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t1` where (`test`.`t1`.`a` >= 2) SELECT * FROM t1 WHERE a >= 2 FOR UPDATE; dummy a b 3 3 3 diff --git a/mysql-test/suite/tokudb/t/disabled.def b/mysql-test/suite/tokudb/t/disabled.def index c02c6d42e215..751794ac690e 100644 --- a/mysql-test/suite/tokudb/t/disabled.def +++ b/mysql-test/suite/tokudb/t/disabled.def @@ -2,4 +2,3 @@ mvcc-19: tokutek mvcc-20: tokutek mvcc-27: tokutek storage_engine_default: tokudb is not the default storage engine -tokudb_mrr : https://jira.percona.com/browse/TDB-135 : TokuDB 5.7 missing mrr implementation diff --git a/storage/tokudb/ha_tokudb.cc b/storage/tokudb/ha_tokudb.cc index a0d315104734..e35cab17fd26 100644 --- a/storage/tokudb/ha_tokudb.cc +++ b/storage/tokudb/ha_tokudb.cc @@ -4750,7 +4750,7 @@ int ha_tokudb::index_end() { invalidate_bulk_fetch(); invalidate_icp(); doing_bulk_fetch = false; - close_dsmrr(); + ds_mrr.dsmrr_close(); TOKUDB_HANDLER_DBUG_RETURN(0); } @@ -6320,7 +6320,7 @@ int ha_tokudb::reset() { key_read = false; using_ignore = false; using_ignore_no_key = false; - reset_dsmrr(); + ds_mrr.reset(); invalidate_icp(); TOKUDB_HANDLER_DBUG_RETURN(0); } @@ -8914,22 +8914,6 @@ void ha_tokudb::set_dup_value_for_pk(DBT* key) { last_dup_key = primary_key; } -void ha_tokudb::close_dsmrr() { -#ifdef MARIADB_BASE_VERSION - ds_mrr.dsmrr_close(); -#elif 50600 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 50699 - ds_mrr.dsmrr_close(); -#endif -} - -void ha_tokudb::reset_dsmrr() { -#ifdef MARIADB_BASE_VERSION - ds_mrr.dsmrr_close(); -#elif 50600 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 50699 - ds_mrr.reset(); -#endif -} - // we cache the information so we can do filtering ourselves, // but as far as MySQL knows, we are not doing any filtering, // so if we happen to miss filtering a row that does not match @@ -9011,16 +8995,12 @@ bool ha_tokudb::rpl_lookup_rows() { #include "ha_tokudb_alter_55.cc" #include "ha_tokudb_alter_56.cc" -// mrr -#ifdef MARIADB_BASE_VERSION -#include "ha_tokudb_mrr_maria.cc" -#elif 50600 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 50699 -#include "ha_tokudb_mrr_mysql.cc" -#endif - // key comparisons #include "hatoku_cmp.cc" +// mrr +#include "ha_tokudb_mrr_mysql.cc" + // handlerton #include "hatoku_hton.cc" diff --git a/storage/tokudb/ha_tokudb.h b/storage/tokudb/ha_tokudb.h index b8cdbc65fbdd..d63c002f0bac 100644 --- a/storage/tokudb/ha_tokudb.h +++ b/storage/tokudb/ha_tokudb.h @@ -438,13 +438,8 @@ class ha_tokudb : public handler { THR_LOCK_DATA lock; ///< MySQL lock TOKUDB_SHARE *share; ///< Shared lock info -#ifdef MARIADB_BASE_VERSION - // MariaDB version of MRR - DsMrr_impl ds_mrr; -#elif 50600 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 50699 // MySQL version of MRR DsMrr_impl ds_mrr; -#endif // For ICP. Cache our own copies Item* toku_pushed_idx_cond; @@ -873,31 +868,7 @@ class ha_tokudb : public handler { int cmp_ref(const uchar * ref1, const uchar * ref2); bool check_if_incompatible_data(HA_CREATE_INFO * info, uint table_changes); -#ifdef MARIADB_BASE_VERSION - -// MariaDB MRR introduced in 5.5, API changed in MariaDB 10.0 -#if MYSQL_VERSION_ID >= 100000 -#define COST_VECT Cost_estimate -#endif - - int multi_range_read_init(RANGE_SEQ_IF* seq, - void* seq_init_param, - uint n_ranges, uint mode, - HANDLER_BUFFER *buf); - int multi_range_read_next(range_id_t *range_info); - ha_rows multi_range_read_info_const(uint keyno, RANGE_SEQ_IF *seq, - void *seq_init_param, - uint n_ranges, uint *bufsz, - uint *flags, COST_VECT *cost); - ha_rows multi_range_read_info(uint keyno, uint n_ranges, uint keys, - uint key_parts, uint *bufsz, - uint *flags, COST_VECT *cost); - int multi_range_read_explain_info(uint mrr_mode, char *str, size_t size); - -#else - // MySQL MRR introduced in 5.6 -#if 50600 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 50699 int multi_range_read_init(RANGE_SEQ_IF *seq, void *seq_init_param, uint n_ranges, uint mode, HANDLER_BUFFER *buf); int multi_range_read_next(char **range_info); @@ -907,10 +878,6 @@ class ha_tokudb : public handler { uint *flags, Cost_estimate *cost); ha_rows multi_range_read_info(uint keyno, uint n_ranges, uint keys, uint *bufsz, uint *flags, Cost_estimate *cost); -#endif - -#endif - Item* idx_cond_push(uint keyno, class Item* idx_cond); void cancel_pushed_idx_cond(); @@ -1024,8 +991,6 @@ class ha_tokudb : public handler { void invalidate_bulk_fetch(); void invalidate_icp(); int delete_all_rows_internal(); - void close_dsmrr(); - void reset_dsmrr(); #if TOKU_INCLUDE_WRITE_FRM_DATA int write_frm_data(const uchar *frm_data, size_t frm_len); diff --git a/storage/tokudb/ha_tokudb_mrr_maria.cc b/storage/tokudb/ha_tokudb_mrr_maria.cc deleted file mode 100644 index 303239e3c803..000000000000 --- a/storage/tokudb/ha_tokudb_mrr_maria.cc +++ /dev/null @@ -1,71 +0,0 @@ -/* -*- mode: C++; c-basic-offset: 4; indent-tabs-mode: nil -*- */ -// vim: ft=cpp:expandtab:ts=8:sw=4:softtabstop=4: -#ident "$Id$" -/*====== -This file is part of TokuDB - - -Copyright (c) 2006, 2015, Percona and/or its affiliates. All rights reserved. - - TokuDBis is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License, version 2, - as published by the Free Software Foundation. - - TokuDB 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 TokuDB. If not, see . - -======= */ - -#ident "Copyright (c) 2006, 2015, Percona and/or its affiliates. All rights reserved." - -/**************************************************************************** - * DS-MRR implementation, essentially copied from InnoDB/MyISAM/Maria - ***************************************************************************/ - -/** - * Multi Range Read interface, DS-MRR calls - */ -int ha_tokudb::multi_range_read_init(RANGE_SEQ_IF *seq, void *seq_init_param, - uint n_ranges, uint mode, - HANDLER_BUFFER *buf) -{ - return ds_mrr.dsmrr_init(this, seq, seq_init_param, n_ranges, mode, buf); -} - -int ha_tokudb::multi_range_read_next(range_id_t *range_info) -{ - return ds_mrr.dsmrr_next(range_info); -} - -ha_rows ha_tokudb::multi_range_read_info_const(uint keyno, RANGE_SEQ_IF *seq, - void *seq_init_param, - uint n_ranges, uint *bufsz, - uint *flags, - COST_VECT *cost) -{ - /* See comments in ha_myisam::multi_range_read_info_const */ - ds_mrr.init(this, table); - ha_rows res= ds_mrr.dsmrr_info_const(keyno, seq, seq_init_param, n_ranges, - bufsz, flags, cost); - return res; -} - -ha_rows ha_tokudb::multi_range_read_info(uint keyno, uint n_ranges, uint keys, - uint key_parts, uint *bufsz, - uint *flags, COST_VECT *cost) -{ - ds_mrr.init(this, table); - ha_rows res= ds_mrr.dsmrr_info(keyno, n_ranges, keys, key_parts, bufsz, - flags, cost); - return res; -} - -int ha_tokudb::multi_range_read_explain_info(uint mrr_mode, char *str, size_t size) -{ - return ds_mrr.dsmrr_explain_info(mrr_mode, str, size); -} From 530b938570593d661c496978bd4d59c8695a5e83 Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Mon, 12 Mar 2018 15:05:22 -0700 Subject: [PATCH 0676/1221] TDB-129 : Normalize TokuDB ALTER code to remove 5.5 and version dependent compilation - Moved content of ha_tokudb_alter_common.cc into ha_tokudb_alter_56.cc and renamed ha_tokudb_alter_56.cc to ha_tokudb_alter.cc. Reformatted moved code and cleaned up numerous whitespace violations. - Removed all ALTER_55 and ALTER_56 conditional compilation to leave inly the ALTER_56 code behind. - Removed some MARIADB compilation specific code in alter pathways. --- storage/tokudb/ha_tokudb.cc | 9 +- storage/tokudb/ha_tokudb.h | 10 - ..._tokudb_alter_56.cc => ha_tokudb_alter.cc} | 744 ++++++++++++++-- storage/tokudb/ha_tokudb_alter_55.cc | 41 - storage/tokudb/ha_tokudb_alter_common.cc | 795 ------------------ storage/tokudb/hatoku_defines.h | 3 - 6 files changed, 657 insertions(+), 945 deletions(-) rename storage/tokudb/{ha_tokudb_alter_56.cc => ha_tokudb_alter.cc} (69%) delete mode 100644 storage/tokudb/ha_tokudb_alter_55.cc delete mode 100644 storage/tokudb/ha_tokudb_alter_common.cc diff --git a/storage/tokudb/ha_tokudb.cc b/storage/tokudb/ha_tokudb.cc index e35cab17fd26..af75413773b9 100644 --- a/storage/tokudb/ha_tokudb.cc +++ b/storage/tokudb/ha_tokudb.cc @@ -1640,7 +1640,7 @@ int ha_tokudb::initialize_share(const char* name, int mode) { #if WITH_PARTITION_STORAGE_ENGINE // verify frm data for non-partitioned tables - if (TOKU_PARTITION_WRITE_FRM_DATA || table->part_info == NULL) { + if (table->part_info == NULL) { error = verify_frm_data(table->s->path.str, txn); if (error) goto exit; @@ -7386,7 +7386,7 @@ int ha_tokudb::create( } #if WITH_PARTITION_STORAGE_ENGINE - if (TOKU_PARTITION_WRITE_FRM_DATA || form->part_info == NULL) { + if (form->part_info == NULL) { error = write_frm_data(status_block, txn, form->s->path.str); if (error) { goto cleanup; @@ -8991,9 +8991,8 @@ bool ha_tokudb::rpl_lookup_rows() { // fast updates #include "ha_tokudb_update.cc" -// alter table code for various mysql distros -#include "ha_tokudb_alter_55.cc" -#include "ha_tokudb_alter_56.cc" +// alter table +#include "ha_tokudb_alter.cc" // key comparisons #include "hatoku_cmp.cc" diff --git a/storage/tokudb/ha_tokudb.h b/storage/tokudb/ha_tokudb.h index d63c002f0bac..62e8f983484c 100644 --- a/storage/tokudb/ha_tokudb.h +++ b/storage/tokudb/ha_tokudb.h @@ -881,7 +881,6 @@ class ha_tokudb : public handler { Item* idx_cond_push(uint keyno, class Item* idx_cond); void cancel_pushed_idx_cond(); -#if TOKU_INCLUDE_ALTER_56 public: enum_alter_inplace_result check_if_supported_inplace_alter(TABLE *altered_table, Alter_inplace_info *ha_alter_info); bool prepare_inplace_alter_table(TABLE *altered_table, Alter_inplace_info *ha_alter_info); @@ -900,15 +899,6 @@ class ha_tokudb : public handler { int new_row_descriptor(TABLE *table, TABLE *altered_table, Alter_inplace_info *ha_alter_info, uint32_t idx, DBT *row_descriptor); public: -#endif -#if TOKU_INCLUDE_ALTER_55 -public: - // Returns true of the 5.6 inplace alter table interface is used. - bool try_hot_alter_table(); - - // Used by the partition storage engine to provide new frm data for the table. - int new_alter_table_frm_data(const uchar *frm_data, size_t frm_len); -#endif private: int tokudb_add_index(TABLE* table_arg, diff --git a/storage/tokudb/ha_tokudb_alter_56.cc b/storage/tokudb/ha_tokudb_alter.cc similarity index 69% rename from storage/tokudb/ha_tokudb_alter_56.cc rename to storage/tokudb/ha_tokudb_alter.cc index f9ddf8f94bde..307df796eaf8 100644 --- a/storage/tokudb/ha_tokudb_alter_56.cc +++ b/storage/tokudb/ha_tokudb_alter.cc @@ -23,25 +23,626 @@ Copyright (c) 2006, 2015, Percona and/or its affiliates. All rights reserved. #ident "Copyright (c) 2006, 2015, Percona and/or its affiliates. All rights reserved." -#if TOKU_INCLUDE_ALTER_56 - -#if 100000 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 100099 -#define TOKU_ALTER_RENAME ALTER_RENAME -#elif (50600 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 50699) || \ - (50700 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 50799) -#define TOKU_ALTER_RENAME ALTER_RENAME -#elif 50500 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 50599 -#define TOKU_ALTER_RENAME ALTER_RENAME_56 -#else -#error -#endif - -#include "ha_tokudb_alter_common.cc" #include #include #include +static bool tables_have_same_keys(TABLE* table, + TABLE* altered_table, + bool print_error, + bool check_field_index) { + bool retval; + if (table->s->keys != altered_table->s->keys) { + if (print_error) { + sql_print_error("tables have different number of keys"); + } + retval = false; + goto cleanup; + } + if (table->s->primary_key != altered_table->s->primary_key) { + if (print_error) { + sql_print_error("Tables have different primary keys, %d %d", + table->s->primary_key, + altered_table->s->primary_key); + } + retval = false; + goto cleanup; + } + for (uint32_t i = 0; i < table->s->keys; i++) { + KEY* curr_orig_key = &table->key_info[i]; + KEY* curr_altered_key = &altered_table->key_info[i]; + if (strcmp(curr_orig_key->name, curr_altered_key->name)) { + if (print_error) { + sql_print_error("key %d has different name, %s %s", + i, + curr_orig_key->name, + curr_altered_key->name); + } + retval = false; + goto cleanup; + } + if (key_is_clustering(curr_orig_key) != + key_is_clustering(curr_altered_key)) { + if (print_error) { + sql_print_error( + "keys disagree on if they are clustering, %d, %d", + curr_orig_key->user_defined_key_parts, + curr_altered_key->user_defined_key_parts); + } + retval = false; + goto cleanup; + } + if (((curr_orig_key->flags & HA_NOSAME) == 0) != + ((curr_altered_key->flags & HA_NOSAME) == 0)) { + if (print_error) { + sql_print_error("keys disagree on if they are unique, %d, %d", + curr_orig_key->user_defined_key_parts, + curr_altered_key->user_defined_key_parts); + } + retval = false; + goto cleanup; + } + if (curr_orig_key->user_defined_key_parts != + curr_altered_key->user_defined_key_parts) { + if (print_error) { + sql_print_error("keys have different number of parts, %d, %d", + curr_orig_key->user_defined_key_parts, + curr_altered_key->user_defined_key_parts); + } + retval = false; + goto cleanup; + } + // + // now verify that each field in the key is the same + // + for (uint32_t j = 0; j < curr_orig_key->user_defined_key_parts; j++) { + KEY_PART_INFO* curr_orig_part = &curr_orig_key->key_part[j]; + KEY_PART_INFO* curr_altered_part = &curr_altered_key->key_part[j]; + Field* curr_orig_field = curr_orig_part->field; + Field* curr_altered_field = curr_altered_part->field; + if (curr_orig_part->length != curr_altered_part->length) { + if (print_error) { + sql_print_error("Key %s has different length at index %d", + curr_orig_key->name, + j); + } + retval = false; + goto cleanup; + } + bool are_fields_same; + are_fields_same = + (check_field_index) + ? (curr_orig_part->fieldnr == curr_altered_part->fieldnr && + fields_are_same_type(curr_orig_field, + curr_altered_field)) + : (are_two_fields_same(curr_orig_field, + curr_altered_field)); + + if (!are_fields_same) { + if (print_error) { + sql_print_error("Key %s has different field at index %d", + curr_orig_key->name, + j); + } + retval = false; + goto cleanup; + } + } + } + + retval = true; +cleanup: + return retval; +} + +// MySQL sets the null_bit as a number that you can bit-wise AND a byte to +// to evaluate whether a field is NULL or not. This value is a power of 2, from +// 2^0 to 2^7. We return the position of the bit within the byte, which is +// lg null_bit +static inline uint32_t get_null_bit_position(uint32_t null_bit) { + uint32_t retval = 0; + switch (null_bit) { + case (1): + retval = 0; + break; + case (2): + retval = 1; + break; + case (4): + retval = 2; + break; + case (8): + retval = 3; + break; + case (16): + retval = 4; + break; + case (32): + retval = 5; + break; + case (64): + retval = 6; + break; + case (128): + retval = 7; + break; + default: + assert_unreachable(); + } + return retval; +} + +// returns the index of the null bit of field. +static inline uint32_t get_overall_null_bit_position(TABLE* table, + Field* field) { + uint32_t offset = get_null_offset(table, field); + uint32_t null_bit = field->null_bit; + return offset * 8 + get_null_bit_position(null_bit); +} + +static uint32_t get_first_null_bit_pos(TABLE* table) { + uint32_t table_pos = 0; + for (uint i = 0; i < table->s->fields; i++) { + Field* curr_field = table->field[i]; + bool nullable = (curr_field->null_bit != 0); + if (nullable) { + table_pos = get_overall_null_bit_position(table, curr_field); + break; + } + } + return table_pos; +} + +static uint32_t fill_static_row_mutator(uchar* buf, + TABLE* orig_table, + TABLE* altered_table, + KEY_AND_COL_INFO* orig_kc_info, + KEY_AND_COL_INFO* altered_kc_info, + uint32_t keynr) { + // + // start packing extra + // + uchar* pos = buf; + // says what the operation is + pos[0] = UP_COL_ADD_OR_DROP; + pos++; + + // + // null byte information + // + memcpy(pos, &orig_table->s->null_bytes, sizeof(orig_table->s->null_bytes)); + pos += sizeof(orig_table->s->null_bytes); + memcpy( + pos, &altered_table->s->null_bytes, sizeof(orig_table->s->null_bytes)); + pos += sizeof(altered_table->s->null_bytes); + + // + // num_offset_bytes + // + assert_always(orig_kc_info->num_offset_bytes <= 2); + pos[0] = orig_kc_info->num_offset_bytes; + pos++; + assert_always(altered_kc_info->num_offset_bytes <= 2); + pos[0] = altered_kc_info->num_offset_bytes; + pos++; + + // + // size of fixed fields + // + uint32_t fixed_field_size = orig_kc_info->mcp_info[keynr].fixed_field_size; + memcpy(pos, &fixed_field_size, sizeof(fixed_field_size)); + pos += sizeof(fixed_field_size); + fixed_field_size = altered_kc_info->mcp_info[keynr].fixed_field_size; + memcpy(pos, &fixed_field_size, sizeof(fixed_field_size)); + pos += sizeof(fixed_field_size); + + // + // length of offsets + // + uint32_t len_of_offsets = orig_kc_info->mcp_info[keynr].len_of_offsets; + memcpy(pos, &len_of_offsets, sizeof(len_of_offsets)); + pos += sizeof(len_of_offsets); + len_of_offsets = altered_kc_info->mcp_info[keynr].len_of_offsets; + memcpy(pos, &len_of_offsets, sizeof(len_of_offsets)); + pos += sizeof(len_of_offsets); + + uint32_t orig_start_null_pos = get_first_null_bit_pos(orig_table); + memcpy(pos, &orig_start_null_pos, sizeof(orig_start_null_pos)); + pos += sizeof(orig_start_null_pos); + uint32_t altered_start_null_pos = get_first_null_bit_pos(altered_table); + memcpy(pos, &altered_start_null_pos, sizeof(altered_start_null_pos)); + pos += sizeof(altered_start_null_pos); + + assert_always((pos - buf) == STATIC_ROW_MUTATOR_SIZE); + return pos - buf; +} + +static uint32_t fill_dynamic_row_mutator(uchar* buf, + uint32_t* columns, + uint32_t num_columns, + TABLE* src_table, + KEY_AND_COL_INFO* src_kc_info, + uint32_t keynr, + bool is_add, + bool* out_has_blobs) { + uchar* pos = buf; + bool has_blobs = false; + uint32_t cols = num_columns; + memcpy(pos, &cols, sizeof(cols)); + pos += sizeof(cols); + for (uint32_t i = 0; i < num_columns; i++) { + uint32_t curr_index = columns[i]; + Field* curr_field = src_table->field[curr_index]; + + pos[0] = is_add ? COL_ADD : COL_DROP; + pos++; + // + // NULL bit information + // + bool is_null_default = false; + bool nullable = curr_field->null_bit != 0; + if (!nullable) { + pos[0] = 0; + pos++; + } else { + pos[0] = 1; + pos++; + // write position of null byte that is to be removed + uint32_t null_bit_position = + get_overall_null_bit_position(src_table, curr_field); + memcpy(pos, &null_bit_position, sizeof(null_bit_position)); + pos += sizeof(null_bit_position); + // + // if adding a column, write the value of the default null_bit + // + if (is_add) { + is_null_default = is_overall_null_position_set( + src_table->s->default_values, null_bit_position); + pos[0] = is_null_default ? 1 : 0; + pos++; + } + } + if (is_fixed_field(src_kc_info, curr_index)) { + // we have a fixed field being dropped + // store the offset and the number of bytes + pos[0] = COL_FIXED; + pos++; + // store the offset + uint32_t fixed_field_offset = + src_kc_info->cp_info[keynr][curr_index].col_pack_val; + memcpy(pos, &fixed_field_offset, sizeof(fixed_field_offset)); + pos += sizeof(fixed_field_offset); + // store the number of bytes + uint32_t num_bytes = src_kc_info->field_lengths[curr_index]; + memcpy(pos, &num_bytes, sizeof(num_bytes)); + pos += sizeof(num_bytes); + if (is_add && !is_null_default) { + uint curr_field_offset = field_offset(curr_field, src_table); + memcpy(pos, + src_table->s->default_values + curr_field_offset, + num_bytes); + pos += num_bytes; + } + } else if (is_variable_field(src_kc_info, curr_index)) { + pos[0] = COL_VAR; + pos++; + // store the index of the variable column + uint32_t var_field_index = + src_kc_info->cp_info[keynr][curr_index].col_pack_val; + memcpy(pos, &var_field_index, sizeof(var_field_index)); + pos += sizeof(var_field_index); + if (is_add && !is_null_default) { + uint curr_field_offset = field_offset(curr_field, src_table); + uint32_t len_bytes = src_kc_info->length_bytes[curr_index]; + uint32_t data_length = get_var_data_length( + src_table->s->default_values + curr_field_offset, + len_bytes); + memcpy(pos, &data_length, sizeof(data_length)); + pos += sizeof(data_length); + memcpy(pos, + src_table->s->default_values + curr_field_offset + + len_bytes, + data_length); + pos += data_length; + } + } else { + pos[0] = COL_BLOB; + pos++; + has_blobs = true; + } + } + *out_has_blobs = has_blobs; + return pos - buf; +} + +static uint32_t fill_static_blob_row_mutator(uchar* buf, + TABLE* src_table, + KEY_AND_COL_INFO* src_kc_info) { + uchar* pos = buf; + // copy number of blobs + memcpy(pos, &src_kc_info->num_blobs, sizeof(src_kc_info->num_blobs)); + pos += sizeof(src_kc_info->num_blobs); + // copy length bytes for each blob + for (uint32_t i = 0; i < src_kc_info->num_blobs; i++) { + uint32_t curr_field_index = src_kc_info->blob_fields[i]; + Field* field = src_table->field[curr_field_index]; + uint32_t len_bytes = field->row_pack_length(); + assert_always(len_bytes <= 4); + pos[0] = len_bytes; + pos++; + } + + return pos - buf; +} + +static uint32_t fill_dynamic_blob_row_mutator(uchar* buf, + uint32_t* columns, + uint32_t num_columns, + TABLE* src_table, + KEY_AND_COL_INFO* src_kc_info, + bool is_add) { + uchar* pos = buf; + for (uint32_t i = 0; i < num_columns; i++) { + uint32_t curr_field_index = columns[i]; + Field* curr_field = src_table->field[curr_field_index]; + if (is_blob_field(src_kc_info, curr_field_index)) { + // find out which blob it is + uint32_t blob_index = src_kc_info->num_blobs; + for (uint32_t j = 0; j < src_kc_info->num_blobs; j++) { + if (curr_field_index == src_kc_info->blob_fields[j]) { + blob_index = j; + break; + } + } + // assert we found blob in list + assert_always(blob_index < src_kc_info->num_blobs); + pos[0] = is_add ? COL_ADD : COL_DROP; + pos++; + memcpy(pos, &blob_index, sizeof(blob_index)); + pos += sizeof(blob_index); + if (is_add) { + uint32_t len_bytes = curr_field->row_pack_length(); + assert_always(len_bytes <= 4); + pos[0] = len_bytes; + pos++; + + // create a zero length blob field that can be directly copied + // in for now, in MySQL, we can only have blob fields + // that have no default value + memset(pos, 0, len_bytes); + pos += len_bytes; + } + } + } + return pos - buf; +} + +// TODO: carefully review to make sure that the right information is used +// TODO: namely, when do we get stuff from share->kc_info and when we get +// TODO: it from altered_kc_info, and when is keynr associated with the right +// thing +uint32_t ha_tokudb::fill_row_mutator(uchar* buf, + uint32_t* columns, + uint32_t num_columns, + TABLE* altered_table, + KEY_AND_COL_INFO* altered_kc_info, + uint32_t keynr, + bool is_add) { + if (TOKUDB_UNLIKELY(TOKUDB_DEBUG_FLAGS(TOKUDB_DEBUG_ALTER_TABLE))) { + TOKUDB_HANDLER_TRACE("*****some info:*************"); + TOKUDB_HANDLER_TRACE( + "old things: num_null_bytes %d, num_offset_bytes %d, " + "fixed_field_size %d, fixed_field_size %d", + table->s->null_bytes, + share->kc_info.num_offset_bytes, + share->kc_info.mcp_info[keynr].fixed_field_size, + share->kc_info.mcp_info[keynr].len_of_offsets); + TOKUDB_HANDLER_TRACE( + "new things: num_null_bytes %d, num_offset_bytes %d, " + "fixed_field_size %d, fixed_field_size %d", + altered_table->s->null_bytes, + altered_kc_info->num_offset_bytes, + altered_kc_info->mcp_info[keynr].fixed_field_size, + altered_kc_info->mcp_info[keynr].len_of_offsets); + TOKUDB_HANDLER_TRACE("****************************"); + } + uchar* pos = buf; + bool has_blobs = false; + pos += fill_static_row_mutator( + pos, table, altered_table, &share->kc_info, altered_kc_info, keynr); + + if (is_add) { + pos += fill_dynamic_row_mutator(pos, + columns, + num_columns, + altered_table, + altered_kc_info, + keynr, + is_add, + &has_blobs); + } else { + pos += fill_dynamic_row_mutator(pos, + columns, + num_columns, + table, + &share->kc_info, + keynr, + is_add, + &has_blobs); + } + if (has_blobs) { + pos += fill_static_blob_row_mutator(pos, table, &share->kc_info); + if (is_add) { + pos += fill_dynamic_blob_row_mutator(pos, + columns, + num_columns, + altered_table, + altered_kc_info, + is_add); + } else { + pos += fill_dynamic_blob_row_mutator( + pos, columns, num_columns, table, &share->kc_info, is_add); + } + } + return pos - buf; +} + +static bool all_fields_are_same_type(TABLE* table_a, TABLE* table_b) { + if (table_a->s->fields != table_b->s->fields) + return false; + for (uint i = 0; i < table_a->s->fields; i++) { + Field* field_a = table_a->field[i]; + Field* field_b = table_b->field[i]; + if (!fields_are_same_type(field_a, field_b)) + return false; + } + return true; +} + +static bool column_rename_supported(TABLE* orig_table, + TABLE* new_table, + bool alter_column_order) { + bool retval = false; + bool keys_same_for_cr; + uint num_fields_with_different_names = 0; + uint field_with_different_name = orig_table->s->fields; + if (orig_table->s->fields != new_table->s->fields) { + retval = false; + goto cleanup; + } + if (alter_column_order) { + retval = false; + goto cleanup; + } + if (!all_fields_are_same_type(orig_table, new_table)) { + retval = false; + goto cleanup; + } + for (uint i = 0; i < orig_table->s->fields; i++) { + Field* orig_field = orig_table->field[i]; + Field* new_field = new_table->field[i]; + if (!fields_have_same_name(orig_field, new_field)) { + num_fields_with_different_names++; + field_with_different_name = i; + } + } + // only allow one renamed field + if (num_fields_with_different_names != 1) { + retval = false; + goto cleanup; + } + assert_always(field_with_different_name < orig_table->s->fields); + // + // at this point, we have verified that the two tables have + // the same field types and with ONLY one field with a different name. + // We have also identified the field with the different name + // + // Now we need to check the indexes + // + keys_same_for_cr = + tables_have_same_keys(orig_table, new_table, false, true); + if (!keys_same_for_cr) { + retval = false; + goto cleanup; + } + retval = true; +cleanup: + return retval; +} + +static int find_changed_columns(uint32_t* changed_columns, + uint32_t* num_changed_columns, + TABLE* smaller_table, + TABLE* bigger_table) { + int retval; + uint curr_new_col_index = 0; + uint32_t curr_num_changed_columns = 0; + assert_always(bigger_table->s->fields > smaller_table->s->fields); + for (uint i = 0; i < smaller_table->s->fields; i++, curr_new_col_index++) { + if (curr_new_col_index >= bigger_table->s->fields) { + sql_print_error("error in determining changed columns"); + retval = 1; + goto cleanup; + } + Field* curr_field_in_new = bigger_table->field[curr_new_col_index]; + Field* curr_field_in_orig = smaller_table->field[i]; + while (!fields_have_same_name(curr_field_in_orig, curr_field_in_new)) { + changed_columns[curr_num_changed_columns] = curr_new_col_index; + curr_num_changed_columns++; + curr_new_col_index++; + curr_field_in_new = bigger_table->field[curr_new_col_index]; + if (curr_new_col_index >= bigger_table->s->fields) { + sql_print_error("error in determining changed columns"); + retval = 1; + goto cleanup; + } + } + // at this point, curr_field_in_orig and curr_field_in_new should be + // the same, let's verify make sure the two fields that have the same + // name are ok + if (!are_two_fields_same(curr_field_in_orig, curr_field_in_new)) { + sql_print_error( + "Two fields that were supposedly the same are not: %s in " + "original, %s in new", + curr_field_in_orig->field_name, + curr_field_in_new->field_name); + retval = 1; + goto cleanup; + } + } + for (uint i = curr_new_col_index; i < bigger_table->s->fields; i++) { + changed_columns[curr_num_changed_columns] = i; + curr_num_changed_columns++; + } + *num_changed_columns = curr_num_changed_columns; + retval = 0; +cleanup: + return retval; +} + +static bool tables_have_same_keys_and_columns(TABLE* first_table, + TABLE* second_table, + bool print_error) { + bool retval; + if (first_table->s->null_bytes != second_table->s->null_bytes) { + retval = false; + if (print_error) { + sql_print_error( + "tables have different number of null bytes, %d, %d", + first_table->s->null_bytes, + second_table->s->null_bytes); + } + goto exit; + } + if (first_table->s->fields != second_table->s->fields) { + retval = false; + if (print_error) { + sql_print_error("tables have different number of fields, %d, %d", + first_table->s->fields, + second_table->s->fields); + } + goto exit; + } + for (uint i = 0; i < first_table->s->fields; i++) { + Field* a = first_table->field[i]; + Field* b = second_table->field[i]; + if (!are_two_fields_same(a, b)) { + retval = false; + sql_print_error("tables have different fields at position %d", i); + goto exit; + } + } + if (!tables_have_same_keys(first_table, second_table, print_error, true)) { + retval = false; + goto exit; + } + + retval = true; +exit: + return retval; +} + // The tokudb alter context contains the alter state that is set in the check if supported method and used // later when the alter operation is executed. class tokudb_alter_ctx : public inplace_alter_handler_ctx { @@ -156,7 +757,7 @@ static int find_changed_fields( for (uint i = 0; i < table_a->s->fields; i++) { Field* field_a = table_a->field[i]; Field* field_b = table_b->field[i]; - if (!fields_are_same_type(field_a, field_b)) + if (!fields_are_same_type(field_a, field_b)) changed_fields.push_back(i); } return changed_fields.size(); @@ -184,11 +785,6 @@ static ulong fix_handler_flags( ulong handler_flags = ha_alter_info->handler_flags; -#if 100000 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 100099 - // This is automatically supported, hide the flag from later checks - handler_flags &= ~Alter_inplace_info::ALTER_PARTITIONED; -#endif - // workaround for fill_alter_inplace_info bug (#5193) // the function erroneously sets the ADD_INDEX and DROP_INDEX flags for a // column addition that does not change the keys. @@ -211,8 +807,8 @@ static ulong fix_handler_flags( // always allow rename table + any other operation, so turn off the // rename flag - if (handler_flags & Alter_inplace_info::TOKU_ALTER_RENAME) { - handler_flags &= ~Alter_inplace_info::TOKU_ALTER_RENAME; + if (handler_flags & Alter_inplace_info::ALTER_RENAME) { + handler_flags &= ~Alter_inplace_info::ALTER_RENAME; } // ALTER_STORED_COLUMN_TYPE may be set when no columns have been changed, @@ -303,7 +899,7 @@ enum_alter_inplace_result ha_tokudb::check_if_supported_inplace_alter( Alter_inplace_info::ADD_INDEX + Alter_inplace_info::ADD_UNIQUE_INDEX)) { // add or drop index - if (table->s->null_bytes == altered_table->s->null_bytes && + if (table->s->null_bytes == altered_table->s->null_bytes && (ha_alter_info->index_add_count > 0 || ha_alter_info->index_drop_count > 0) && !tables_have_same_keys( @@ -337,7 +933,7 @@ enum_alter_inplace_result ha_tokudb::check_if_supported_inplace_alter( tokudb::sysvars::create_index_online(thd)) { // external_lock set WRITE_ALLOW_WRITE which allows writes // concurrent with the index creation - result = HA_ALTER_INPLACE_NO_LOCK_AFTER_PREPARE; + result = HA_ALTER_INPLACE_NO_LOCK_AFTER_PREPARE; } } } @@ -477,8 +1073,8 @@ enum_alter_inplace_result ha_tokudb::check_if_supported_inplace_alter( HA_CREATE_INFO* create_info = ha_alter_info->create_info; #if TOKU_INCLUDE_OPTION_STRUCTS - // set the USED_ROW_FORMAT flag for use later in this file for changes in the table's - // compression + // set the USED_ROW_FORMAT flag for use later in this file for changes + // in the table's compression if (create_info->option_struct->row_format != table_share->option_struct->row_format) create_info->used_fields |= HA_CREATE_USED_ROW_FORMAT; @@ -630,7 +1226,7 @@ bool ha_tokudb::inplace_alter_table( altered_table, ha_alter_info); - if (error == 0 && ctx->expand_blob_update_needed) + if (error == 0 && ctx->expand_blob_update_needed) error = alter_table_expand_blobs(altered_table, ha_alter_info); if (error == 0 && ctx->reset_card) { @@ -644,11 +1240,8 @@ bool ha_tokudb::inplace_alter_table( error = do_optimize(ha_thd()); } -#if (50600 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 50699) || \ - (50700 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 50799) #if WITH_PARTITION_STORAGE_ENGINE - if (error == 0 && - (TOKU_PARTITION_WRITE_FRM_DATA || altered_table->part_info == NULL)) { + if (error == 0 && (altered_table->part_info == NULL)) { #else if (error == 0) { #endif @@ -657,7 +1250,6 @@ bool ha_tokudb::inplace_alter_table( ctx->alter_txn, altered_table->s->path.str); } -#endif bool result = false; // success if (error) { @@ -698,7 +1290,7 @@ int ha_tokudb::alter_table_add_index( &ctx->incremented_num_DBs, &ctx->modified_DBs); if (error == HA_ERR_FOUND_DUPP_KEY) { - // hack for now, in case of duplicate key error, + // hack for now, in case of duplicate key error, // because at the moment we cannot display the right key // information to the user, so that he knows potentially what went // wrong. @@ -706,7 +1298,7 @@ int ha_tokudb::alter_table_add_index( } tokudb::memory::free(key_info); - + if (error == 0) ctx->reset_card = true; @@ -766,7 +1358,7 @@ int ha_tokudb::alter_table_drop_index( key_info = ha_alter_info->key_info_buffer; } } - + // drop indexes tokudb_alter_ctx* ctx = static_cast(ha_alter_info->handler_ctx); @@ -817,7 +1409,7 @@ int ha_tokudb::alter_table_add_or_drop_column( } else { assert_unreachable(); } - max_column_extra_size = + max_column_extra_size = // max static row_mutator STATIC_ROW_MUTATOR_SIZE + // max dynamic row_mutator @@ -833,7 +1425,7 @@ int ha_tokudb::alter_table_add_or_drop_column( error = ENOMEM; goto cleanup; } - + for (uint32_t i = 0; i < curr_num_DBs; i++) { // change to a new descriptor DBT row_descriptor; memset(&row_descriptor, 0, sizeof row_descriptor); @@ -853,7 +1445,7 @@ int ha_tokudb::alter_table_add_or_drop_column( tokudb::memory::free(row_descriptor.data); if (error) goto cleanup; - + if (i == primary_key || key_is_clustering(&table_share->key_info[i])) { num_column_extra = fill_row_mutator( column_extra, @@ -865,11 +1457,11 @@ int ha_tokudb::alter_table_add_or_drop_column( // true if adding columns, otherwise is a drop (ha_alter_info->handler_flags & Alter_inplace_info::ADD_COLUMN) != 0); - + DBT column_dbt; memset(&column_dbt, 0, sizeof column_dbt); - column_dbt.data = column_extra; + column_dbt.data = column_extra; column_dbt.size = num_column_extra; - DBUG_ASSERT(num_column_extra <= max_column_extra_size); + DBUG_ASSERT(num_column_extra <= max_column_extra_size); error = share->key_file[i]->update_broadcast( share->key_file[i], ctx->alter_txn, @@ -898,64 +1490,37 @@ bool ha_tokudb::commit_inplace_alter_table( bool commit) { TOKUDB_HANDLER_DBUG_ENTER(""); - + tokudb_alter_ctx* ctx = static_cast(ha_alter_info->handler_ctx); bool result = false; // success THD *thd = ha_thd(); if (commit) { -#if (50613 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 50699) || \ - (50700 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 50799) || \ - (100000 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 100099) if (ha_alter_info->group_commit_ctx) { ha_alter_info->group_commit_ctx = NULL; } -#endif -#if (50500 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 50599) || \ - (100000 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 100099) -#if WITH_PARTITION_STORAGE_ENGINE - if (TOKU_PARTITION_WRITE_FRM_DATA || altered_table->part_info == NULL) { -#else - if (true) { -#endif - int error = write_frm_data( - share->status_block, - ctx->alter_txn, - altered_table->s->path.str); - if (error) { - commit = false; - result = true; - print_error(error, MYF(0)); - } + int error = write_frm_data( + share->status_block, + ctx->alter_txn, + altered_table->s->path.str); + if (error) { + commit = false; + result = true; + print_error(error, MYF(0)); } -#endif } if (!commit) { - if (table->mdl_ticket->get_type() != MDL_EXCLUSIVE && + if (table->mdl_ticket->get_type() != MDL_EXCLUSIVE && (ctx->add_index_changed || ctx->drop_index_changed || ctx->compression_changed)) { // get exclusive lock no matter what -#if defined(MARIADB_BASE_VERSION) - killed_state saved_killed_state = thd->killed; - thd->killed = NOT_KILLED; - for (volatile uint i = 0; - wait_while_table_is_used(thd, table, HA_EXTRA_NOT_USED); - i++) { - if (thd->killed != NOT_KILLED) - thd->killed = NOT_KILLED; - sleep(1); - } - assert_always(table->mdl_ticket->get_type() == MDL_EXCLUSIVE); - if (thd->killed == NOT_KILLED) - thd->killed = saved_killed_state; -#else THD::killed_state saved_killed_state = thd->killed; thd->killed = THD::NOT_KILLED; // MySQL does not handle HA_EXTRA_NOT_USED so we use - // HA_EXTRA_PREPARE_FOR_RENAME since it is passed through + // HA_EXTRA_PREPARE_FOR_RENAME since it is passed through // the partition storage engine and is treated as a NOP by tokudb for (volatile uint i = 0; wait_while_table_is_used( @@ -970,7 +1535,6 @@ bool ha_tokudb::commit_inplace_alter_table( assert_always(table->mdl_ticket->get_type() == MDL_EXCLUSIVE); if (thd->killed == THD::NOT_KILLED) thd->killed = saved_killed_state; -#endif } // abort the alter transaction NOW so that any alters are rolled back. @@ -1100,7 +1664,7 @@ int ha_tokudb::alter_table_expand_varchar_offsets( uchar* expand_ptr = (uchar*)expand.data; expand_ptr[0] = UPDATE_OP_EXPAND_VARIABLE_OFFSETS; expand_ptr += sizeof(uchar); - + memcpy(expand_ptr, &number_of_offsets, sizeof(number_of_offsets)); expand_ptr += sizeof(number_of_offsets); @@ -1151,9 +1715,9 @@ static bool change_varchar_length_is_supported( Alter_inplace_info* ha_alter_info, tokudb_alter_ctx* ctx) { - if (old_field->real_type() != MYSQL_TYPE_VARCHAR || - new_field->real_type() != MYSQL_TYPE_VARCHAR || - old_field->binary() != new_field->binary() || + if (old_field->real_type() != MYSQL_TYPE_VARCHAR || + new_field->real_type() != MYSQL_TYPE_VARCHAR || + old_field->binary() != new_field->binary() || old_field->charset()->number != new_field->charset()->number || old_field->field_length > new_field->field_length) return false; @@ -1245,7 +1809,7 @@ static bool is_unsigned(Field *f) { // idx) of a particular field (selected by expand_field_num) // TODO: replace this? static uint32_t alter_table_field_offset( - uint32_t null_bytes, + uint32_t null_bytes, KEY_AND_COL_INFO* kc_info, int idx, int expand_field_num) { @@ -1453,7 +2017,7 @@ int ha_tokudb::alter_table_expand_blobs( b.append_ui( var_offset_bytes == 0 ? 0 : ctx->table_kc_info->num_offset_bytes); - + // add blobs info uint32_t num_blobs = ctx->table_kc_info->num_blobs; b.append_ui(num_blobs); @@ -1561,8 +2125,8 @@ static bool change_field_type_is_supported( return false; } else if (old_type == MYSQL_TYPE_STRING) { // char(X) -> char(Y) and binary(X) -> binary(Y) expansion - if (new_type == MYSQL_TYPE_STRING && - old_field->binary() == new_field->binary() && + if (new_type == MYSQL_TYPE_STRING && + old_field->binary() == new_field->binary() && old_field->charset()->number == new_field->charset()->number) return change_fixed_length_is_supported( table, @@ -1621,7 +2185,7 @@ static bool change_type_is_supported( altered_table, ha_alter_info, ctx)) - return false; + return false; } return true; } @@ -1673,5 +2237,3 @@ int ha_tokudb::new_row_descriptor( } return error; } - -#endif diff --git a/storage/tokudb/ha_tokudb_alter_55.cc b/storage/tokudb/ha_tokudb_alter_55.cc deleted file mode 100644 index 3e6a38c97dec..000000000000 --- a/storage/tokudb/ha_tokudb_alter_55.cc +++ /dev/null @@ -1,41 +0,0 @@ -/* -*- mode: C++; c-basic-offset: 4; indent-tabs-mode: nil -*- */ -// vim: ft=cpp:expandtab:ts=8:sw=4:softtabstop=4: -#ident "$Id$" -/*====== -This file is part of TokuDB - - -Copyright (c) 2006, 2015, Percona and/or its affiliates. All rights reserved. - - TokuDBis is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License, version 2, - as published by the Free Software Foundation. - - TokuDB 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 TokuDB. If not, see . - -======= */ - -#ident "Copyright (c) 2006, 2015, Percona and/or its affiliates. All rights reserved." - -#if TOKU_INCLUDE_ALTER_55 - -#include "ha_tokudb_alter_common.cc" - -bool ha_tokudb::try_hot_alter_table() { - TOKUDB_DBUG_ENTER("try_hot_alter_table"); - THD *thd = ha_thd(); - bool disable_hot_alter = get_disable_hot_alter(thd); - DBUG_RETURN(!disable_hot_alter); -} - -int ha_tokudb::new_alter_table_frm_data(const uchar *frm_data, size_t frm_len) { - return write_frm_data(frm_data, frm_len); -} - -#endif diff --git a/storage/tokudb/ha_tokudb_alter_common.cc b/storage/tokudb/ha_tokudb_alter_common.cc deleted file mode 100644 index d41a676de1f3..000000000000 --- a/storage/tokudb/ha_tokudb_alter_common.cc +++ /dev/null @@ -1,795 +0,0 @@ -/* -*- mode: C++; c-basic-offset: 4; indent-tabs-mode: nil -*- */ -// vim: ft=cpp:expandtab:ts=8:sw=4:softtabstop=4: -#ident "$Id$" -/*====== -This file is part of TokuDB - - -Copyright (c) 2006, 2015, Percona and/or its affiliates. All rights reserved. - - TokuDBis is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License, version 2, - as published by the Free Software Foundation. - - TokuDB 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 TokuDB. If not, see . - -======= */ - -#ident "Copyright (c) 2006, 2015, Percona and/or its affiliates. All rights reserved." - -#if !defined(TOKUDB_ALTER_COMMON) -#define TOKUDB_ALTER_COMMON - -TOKUDB_UNUSED(static bool tables_have_same_keys( - TABLE* table, - TABLE* altered_table, - bool print_error, - bool check_field_index)); - -static bool tables_have_same_keys( - TABLE* table, - TABLE* altered_table, - bool print_error, - bool check_field_index) { - - bool retval; - if (table->s->keys != altered_table->s->keys) { - if (print_error) { - sql_print_error("tables have different number of keys"); - } - retval = false; - goto cleanup; - } - if (table->s->primary_key != altered_table->s->primary_key) { - if (print_error) { - sql_print_error( - "Tables have different primary keys, %d %d", - table->s->primary_key, - altered_table->s->primary_key); - } - retval = false; - goto cleanup; - } - for (uint32_t i=0; i < table->s->keys; i++) { - KEY* curr_orig_key = &table->key_info[i]; - KEY* curr_altered_key = &altered_table->key_info[i]; - if (strcmp(curr_orig_key->name, curr_altered_key->name)) { - if (print_error) { - sql_print_error( - "key %d has different name, %s %s", - i, - curr_orig_key->name, - curr_altered_key->name); - } - retval = false; - goto cleanup; - } - if (key_is_clustering(curr_orig_key) != - key_is_clustering(curr_altered_key)) { - if (print_error) { - sql_print_error( - "keys disagree on if they are clustering, %d, %d", - curr_orig_key->user_defined_key_parts, - curr_altered_key->user_defined_key_parts); - } - retval = false; - goto cleanup; - } - if (((curr_orig_key->flags & HA_NOSAME) == 0) != - ((curr_altered_key->flags & HA_NOSAME) == 0)) { - if (print_error) { - sql_print_error( - "keys disagree on if they are unique, %d, %d", - curr_orig_key->user_defined_key_parts, - curr_altered_key->user_defined_key_parts); - } - retval = false; - goto cleanup; - } - if (curr_orig_key->user_defined_key_parts != - curr_altered_key->user_defined_key_parts) { - if (print_error) { - sql_print_error( - "keys have different number of parts, %d, %d", - curr_orig_key->user_defined_key_parts, - curr_altered_key->user_defined_key_parts); - } - retval = false; - goto cleanup; - } - // - // now verify that each field in the key is the same - // - for (uint32_t j = 0; j < curr_orig_key->user_defined_key_parts; j++) { - KEY_PART_INFO* curr_orig_part = &curr_orig_key->key_part[j]; - KEY_PART_INFO* curr_altered_part = &curr_altered_key->key_part[j]; - Field* curr_orig_field = curr_orig_part->field; - Field* curr_altered_field = curr_altered_part->field; - if (curr_orig_part->length != curr_altered_part->length) { - if (print_error) { - sql_print_error( - "Key %s has different length at index %d", - curr_orig_key->name, - j); - } - retval = false; - goto cleanup; - } - bool are_fields_same; - are_fields_same = (check_field_index) ? - (curr_orig_part->fieldnr == curr_altered_part->fieldnr && - fields_are_same_type(curr_orig_field, curr_altered_field)) : - (are_two_fields_same(curr_orig_field,curr_altered_field)); - - if (!are_fields_same) { - if (print_error) { - sql_print_error( - "Key %s has different field at index %d", - curr_orig_key->name, - j); - } - retval = false; - goto cleanup; - } - } - } - - retval = true; -cleanup: - return retval; -} - -// MySQL sets the null_bit as a number that you can bit-wise AND a byte to -// to evaluate whether a field is NULL or not. This value is a power of 2, from -// 2^0 to 2^7. We return the position of the bit within the byte, which is -// lg null_bit -TOKUDB_UNUSED(static inline uint32_t get_null_bit_position( - uint32_t null_bit)); -static inline uint32_t get_null_bit_position(uint32_t null_bit) { - uint32_t retval = 0; - switch(null_bit) { - case (1): - retval = 0; - break; - case (2): - retval = 1; - break; - case (4): - retval = 2; - break; - case (8): - retval = 3; - break; - case (16): - retval = 4; - break; - case (32): - retval = 5; - break; - case (64): - retval = 6; - break; - case (128): - retval = 7; - break; - default: - assert_unreachable(); - } - return retval; -} - -// returns the index of the null bit of field. -TOKUDB_UNUSED(static inline uint32_t get_overall_null_bit_position( - TABLE* table, - Field* field)); -static inline uint32_t get_overall_null_bit_position( - TABLE* table, - Field* field) { - - uint32_t offset = get_null_offset(table, field); - uint32_t null_bit = field->null_bit; - return offset*8 + get_null_bit_position(null_bit); -} - -// not static since 51 uses this and 56 does not -TOKUDB_UNUSED(static bool are_null_bits_in_order(TABLE* table)); -static bool are_null_bits_in_order(TABLE* table) { - uint32_t curr_null_pos = 0; - bool first = true; - bool retval = true; - for (uint i = 0; i < table->s->fields; i++) { - Field* curr_field = table->field[i]; - bool nullable = (curr_field->null_bit != 0); - if (nullable) { - uint32_t pos = - get_overall_null_bit_position(table, curr_field); - if (!first && pos != curr_null_pos+1){ - retval = false; - break; - } - first = false; - curr_null_pos = pos; - } - } - return retval; -} - -TOKUDB_UNUSED(static uint32_t get_first_null_bit_pos(TABLE* table)); -static uint32_t get_first_null_bit_pos(TABLE* table) { - uint32_t table_pos = 0; - for (uint i = 0; i < table->s->fields; i++) { - Field* curr_field = table->field[i]; - bool nullable = (curr_field->null_bit != 0); - if (nullable) { - table_pos = - get_overall_null_bit_position(table, curr_field); - break; - } - } - return table_pos; -} - -TOKUDB_UNUSED(static bool is_column_default_null( - TABLE* src_table, - uint32_t field_index)); -static bool is_column_default_null( - TABLE* src_table, - uint32_t field_index) { - - Field* curr_field = src_table->field[field_index]; - bool is_null_default = false; - bool nullable = curr_field->null_bit != 0; - if (nullable) { - uint32_t null_bit_position = - get_overall_null_bit_position(src_table, curr_field); - is_null_default = - is_overall_null_position_set( - src_table->s->default_values, - null_bit_position); - } - return is_null_default; -} - -static uint32_t fill_static_row_mutator( - uchar* buf, - TABLE* orig_table, - TABLE* altered_table, - KEY_AND_COL_INFO* orig_kc_info, - KEY_AND_COL_INFO* altered_kc_info, - uint32_t keynr) { - - // - // start packing extra - // - uchar* pos = buf; - // says what the operation is - pos[0] = UP_COL_ADD_OR_DROP; - pos++; - - // - // null byte information - // - memcpy(pos, &orig_table->s->null_bytes, sizeof(orig_table->s->null_bytes)); - pos += sizeof(orig_table->s->null_bytes); - memcpy( - pos, - &altered_table->s->null_bytes, - sizeof(orig_table->s->null_bytes)); - pos += sizeof(altered_table->s->null_bytes); - - // - // num_offset_bytes - // - assert_always(orig_kc_info->num_offset_bytes <= 2); - pos[0] = orig_kc_info->num_offset_bytes; - pos++; - assert_always(altered_kc_info->num_offset_bytes <= 2); - pos[0] = altered_kc_info->num_offset_bytes; - pos++; - - // - // size of fixed fields - // - uint32_t fixed_field_size = orig_kc_info->mcp_info[keynr].fixed_field_size; - memcpy(pos, &fixed_field_size, sizeof(fixed_field_size)); - pos += sizeof(fixed_field_size); - fixed_field_size = altered_kc_info->mcp_info[keynr].fixed_field_size; - memcpy(pos, &fixed_field_size, sizeof(fixed_field_size)); - pos += sizeof(fixed_field_size); - - // - // length of offsets - // - uint32_t len_of_offsets = orig_kc_info->mcp_info[keynr].len_of_offsets; - memcpy(pos, &len_of_offsets, sizeof(len_of_offsets)); - pos += sizeof(len_of_offsets); - len_of_offsets = altered_kc_info->mcp_info[keynr].len_of_offsets; - memcpy(pos, &len_of_offsets, sizeof(len_of_offsets)); - pos += sizeof(len_of_offsets); - - uint32_t orig_start_null_pos = get_first_null_bit_pos(orig_table); - memcpy(pos, &orig_start_null_pos, sizeof(orig_start_null_pos)); - pos += sizeof(orig_start_null_pos); - uint32_t altered_start_null_pos = get_first_null_bit_pos(altered_table); - memcpy(pos, &altered_start_null_pos, sizeof(altered_start_null_pos)); - pos += sizeof(altered_start_null_pos); - - assert_always((pos-buf) == STATIC_ROW_MUTATOR_SIZE); - return pos - buf; -} - -static uint32_t fill_dynamic_row_mutator( - uchar* buf, - uint32_t* columns, - uint32_t num_columns, - TABLE* src_table, - KEY_AND_COL_INFO* src_kc_info, - uint32_t keynr, - bool is_add, - bool* out_has_blobs) { - - uchar* pos = buf; - bool has_blobs = false; - uint32_t cols = num_columns; - memcpy(pos, &cols, sizeof(cols)); - pos += sizeof(cols); - for (uint32_t i = 0; i < num_columns; i++) { - uint32_t curr_index = columns[i]; - Field* curr_field = src_table->field[curr_index]; - - pos[0] = is_add ? COL_ADD : COL_DROP; - pos++; - // - // NULL bit information - // - bool is_null_default = false; - bool nullable = curr_field->null_bit != 0; - if (!nullable) { - pos[0] = 0; - pos++; - } else { - pos[0] = 1; - pos++; - // write position of null byte that is to be removed - uint32_t null_bit_position = - get_overall_null_bit_position(src_table, curr_field); - memcpy(pos, &null_bit_position, sizeof(null_bit_position)); - pos += sizeof(null_bit_position); - // - // if adding a column, write the value of the default null_bit - // - if (is_add) { - is_null_default = - is_overall_null_position_set( - src_table->s->default_values, - null_bit_position); - pos[0] = is_null_default ? 1 : 0; - pos++; - } - } - if (is_fixed_field(src_kc_info, curr_index)) { - // we have a fixed field being dropped - // store the offset and the number of bytes - pos[0] = COL_FIXED; - pos++; - //store the offset - uint32_t fixed_field_offset = - src_kc_info->cp_info[keynr][curr_index].col_pack_val; - memcpy(pos, &fixed_field_offset, sizeof(fixed_field_offset)); - pos += sizeof(fixed_field_offset); - //store the number of bytes - uint32_t num_bytes = src_kc_info->field_lengths[curr_index]; - memcpy(pos, &num_bytes, sizeof(num_bytes)); - pos += sizeof(num_bytes); - if (is_add && !is_null_default) { - uint curr_field_offset = field_offset(curr_field, src_table); - memcpy( - pos, - src_table->s->default_values + curr_field_offset, - num_bytes); - pos += num_bytes; - } - } else if (is_variable_field(src_kc_info, curr_index)) { - pos[0] = COL_VAR; - pos++; - //store the index of the variable column - uint32_t var_field_index = - src_kc_info->cp_info[keynr][curr_index].col_pack_val; - memcpy(pos, &var_field_index, sizeof(var_field_index)); - pos += sizeof(var_field_index); - if (is_add && !is_null_default) { - uint curr_field_offset = field_offset(curr_field, src_table); - uint32_t len_bytes = src_kc_info->length_bytes[curr_index]; - uint32_t data_length = - get_var_data_length( - src_table->s->default_values + curr_field_offset, - len_bytes); - memcpy(pos, &data_length, sizeof(data_length)); - pos += sizeof(data_length); - memcpy( - pos, - src_table->s->default_values + curr_field_offset + len_bytes, - data_length); - pos += data_length; - } - } else { - pos[0] = COL_BLOB; - pos++; - has_blobs = true; - } - } - *out_has_blobs = has_blobs; - return pos-buf; -} - -static uint32_t fill_static_blob_row_mutator( - uchar* buf, - TABLE* src_table, - KEY_AND_COL_INFO* src_kc_info) { - - uchar* pos = buf; - // copy number of blobs - memcpy(pos, &src_kc_info->num_blobs, sizeof(src_kc_info->num_blobs)); - pos += sizeof(src_kc_info->num_blobs); - // copy length bytes for each blob - for (uint32_t i = 0; i < src_kc_info->num_blobs; i++) { - uint32_t curr_field_index = src_kc_info->blob_fields[i]; - Field* field = src_table->field[curr_field_index]; - uint32_t len_bytes = field->row_pack_length(); - assert_always(len_bytes <= 4); - pos[0] = len_bytes; - pos++; - } - - return pos-buf; -} - -static uint32_t fill_dynamic_blob_row_mutator( - uchar* buf, - uint32_t* columns, - uint32_t num_columns, - TABLE* src_table, - KEY_AND_COL_INFO* src_kc_info, - bool is_add) { - - uchar* pos = buf; - for (uint32_t i = 0; i < num_columns; i++) { - uint32_t curr_field_index = columns[i]; - Field* curr_field = src_table->field[curr_field_index]; - if (is_blob_field(src_kc_info, curr_field_index)) { - // find out which blob it is - uint32_t blob_index = src_kc_info->num_blobs; - for (uint32_t j = 0; j < src_kc_info->num_blobs; j++) { - if (curr_field_index == src_kc_info->blob_fields[j]) { - blob_index = j; - break; - } - } - // assert we found blob in list - assert_always(blob_index < src_kc_info->num_blobs); - pos[0] = is_add ? COL_ADD : COL_DROP; - pos++; - memcpy(pos, &blob_index, sizeof(blob_index)); - pos += sizeof(blob_index); - if (is_add) { - uint32_t len_bytes = curr_field->row_pack_length(); - assert_always(len_bytes <= 4); - pos[0] = len_bytes; - pos++; - - // create a zero length blob field that can be directly copied - // in for now, in MySQL, we can only have blob fields - // that have no default value - memset(pos, 0, len_bytes); - pos += len_bytes; - } - } - } - return pos-buf; -} - -// TODO: carefully review to make sure that the right information is used -// TODO: namely, when do we get stuff from share->kc_info and when we get -// TODO: it from altered_kc_info, and when is keynr associated with the right thing -uint32_t ha_tokudb::fill_row_mutator( - uchar* buf, - uint32_t* columns, - uint32_t num_columns, - TABLE* altered_table, - KEY_AND_COL_INFO* altered_kc_info, - uint32_t keynr, - bool is_add) { - - if (TOKUDB_UNLIKELY(TOKUDB_DEBUG_FLAGS(TOKUDB_DEBUG_ALTER_TABLE))) { - TOKUDB_HANDLER_TRACE("*****some info:*************"); - TOKUDB_HANDLER_TRACE( - "old things: num_null_bytes %d, num_offset_bytes %d, " - "fixed_field_size %d, fixed_field_size %d", - table->s->null_bytes, - share->kc_info.num_offset_bytes, - share->kc_info.mcp_info[keynr].fixed_field_size, - share->kc_info.mcp_info[keynr].len_of_offsets); - TOKUDB_HANDLER_TRACE( - "new things: num_null_bytes %d, num_offset_bytes %d, " - "fixed_field_size %d, fixed_field_size %d", - altered_table->s->null_bytes, - altered_kc_info->num_offset_bytes, - altered_kc_info->mcp_info[keynr].fixed_field_size, - altered_kc_info->mcp_info[keynr].len_of_offsets); - TOKUDB_HANDLER_TRACE("****************************"); - } - uchar* pos = buf; - bool has_blobs = false; - pos += - fill_static_row_mutator( - pos, - table, - altered_table, - &share->kc_info, - altered_kc_info, - keynr); - - if (is_add) { - pos += - fill_dynamic_row_mutator( - pos, - columns, - num_columns, - altered_table, - altered_kc_info, - keynr, - is_add, - &has_blobs); - } else { - pos += - fill_dynamic_row_mutator( - pos, - columns, - num_columns, - table, - &share->kc_info, - keynr, - is_add, - &has_blobs); - } - if (has_blobs) { - pos += fill_static_blob_row_mutator(pos, table, &share->kc_info); - if (is_add) { - pos += - fill_dynamic_blob_row_mutator( - pos, - columns, - num_columns, - altered_table, - altered_kc_info, - is_add); - } else { - pos += - fill_dynamic_blob_row_mutator( - pos, - columns, - num_columns, - table, - &share->kc_info, - is_add); - } - } - return pos-buf; -} - -static bool all_fields_are_same_type(TABLE *table_a, TABLE *table_b) { - if (table_a->s->fields != table_b->s->fields) - return false; - for (uint i = 0; i < table_a->s->fields; i++) { - Field* field_a = table_a->field[i]; - Field* field_b = table_b->field[i]; - if (!fields_are_same_type(field_a, field_b)) - return false; - } - return true; -} - -TOKUDB_UNUSED(static bool column_rename_supported( - TABLE* orig_table, - TABLE* new_table, - bool alter_column_order)); -static bool column_rename_supported( - TABLE* orig_table, - TABLE* new_table, - bool alter_column_order) { - - bool retval = false; - bool keys_same_for_cr; - uint num_fields_with_different_names = 0; - uint field_with_different_name = orig_table->s->fields; - if (orig_table->s->fields != new_table->s->fields) { - retval = false; - goto cleanup; - } - if (alter_column_order) { - retval = false; - goto cleanup; - } - if (!all_fields_are_same_type(orig_table, new_table)) { - retval = false; - goto cleanup; - } - for (uint i = 0; i < orig_table->s->fields; i++) { - Field* orig_field = orig_table->field[i]; - Field* new_field = new_table->field[i]; - if (!fields_have_same_name(orig_field, new_field)) { - num_fields_with_different_names++; - field_with_different_name = i; - } - } - // only allow one renamed field - if (num_fields_with_different_names != 1) { - retval = false; - goto cleanup; - } - assert_always(field_with_different_name < orig_table->s->fields); - // - // at this point, we have verified that the two tables have - // the same field types and with ONLY one field with a different name. - // We have also identified the field with the different name - // - // Now we need to check the indexes - // - keys_same_for_cr = - tables_have_same_keys( - orig_table, - new_table, - false, - true); - if (!keys_same_for_cr) { - retval = false; - goto cleanup; - } - retval = true; -cleanup: - return retval; -} - -TOKUDB_UNUSED(static int find_changed_columns( - uint32_t* changed_columns, - uint32_t* num_changed_columns, - TABLE* smaller_table, - TABLE* bigger_table)); -static int find_changed_columns( - uint32_t* changed_columns, - uint32_t* num_changed_columns, - TABLE* smaller_table, - TABLE* bigger_table) { - - int retval; - uint curr_new_col_index = 0; - uint32_t curr_num_changed_columns=0; - assert_always(bigger_table->s->fields > smaller_table->s->fields); - for (uint i = 0; i < smaller_table->s->fields; i++, curr_new_col_index++) { - if (curr_new_col_index >= bigger_table->s->fields) { - sql_print_error("error in determining changed columns"); - retval = 1; - goto cleanup; - } - Field* curr_field_in_new = bigger_table->field[curr_new_col_index]; - Field* curr_field_in_orig = smaller_table->field[i]; - while (!fields_have_same_name(curr_field_in_orig, curr_field_in_new)) { - changed_columns[curr_num_changed_columns] = curr_new_col_index; - curr_num_changed_columns++; - curr_new_col_index++; - curr_field_in_new = bigger_table->field[curr_new_col_index]; - if (curr_new_col_index >= bigger_table->s->fields) { - sql_print_error("error in determining changed columns"); - retval = 1; - goto cleanup; - } - } - // at this point, curr_field_in_orig and curr_field_in_new should be - // the same, let's verify make sure the two fields that have the same - // name are ok - if (!are_two_fields_same(curr_field_in_orig, curr_field_in_new)) { - sql_print_error( - "Two fields that were supposedly the same are not: %s in " - "original, %s in new", - curr_field_in_orig->field_name, - curr_field_in_new->field_name); - retval = 1; - goto cleanup; - } - } - for (uint i = curr_new_col_index; i < bigger_table->s->fields; i++) { - changed_columns[curr_num_changed_columns] = i; - curr_num_changed_columns++; - } - *num_changed_columns = curr_num_changed_columns; - retval = 0; -cleanup: - return retval; -} - -TOKUDB_UNUSED(static bool tables_have_same_keys_and_columns( - TABLE* first_table, - TABLE* second_table, - bool print_error)); -static bool tables_have_same_keys_and_columns( - TABLE* first_table, - TABLE* second_table, - bool print_error) { - - bool retval; - if (first_table->s->null_bytes != second_table->s->null_bytes) { - retval = false; - if (print_error) { - sql_print_error( - "tables have different number of null bytes, %d, %d", - first_table->s->null_bytes, - second_table->s->null_bytes); - } - goto exit; - } - if (first_table->s->fields != second_table->s->fields) { - retval = false; - if (print_error) { - sql_print_error( - "tables have different number of fields, %d, %d", - first_table->s->fields, - second_table->s->fields); - } - goto exit; - } - for (uint i = 0; i < first_table->s->fields; i++) { - Field* a = first_table->field[i]; - Field* b = second_table->field[i]; - if (!are_two_fields_same(a,b)) { - retval = false; - sql_print_error( - "tables have different fields at position %d", - i); - goto exit; - } - } - if (!tables_have_same_keys(first_table, second_table, print_error, true)) { - retval = false; - goto exit; - } - - retval = true; -exit: - return retval; -} - -#if TOKU_INCLUDE_WRITE_FRM_DATA -// write the new frm data to the status dictionary using the alter table -// transaction -int ha_tokudb::write_frm_data(const uchar* frm_data, size_t frm_len) { - TOKUDB_DBUG_ENTER("write_frm_data"); - - int error = 0; - if (TOKU_PARTITION_WRITE_FRM_DATA || table->part_info == NULL) { - // write frmdata to status - THD* thd = ha_thd(); - tokudb_trx_data* trx = - (tokudb_trx_data*)thd_get_ha_data(thd, tokudb_hton); - assert_always(trx); - DB_TXN* txn = trx->stmt; // use alter table transaction - assert_always(txn); - error = - write_to_status( - share->status_block, - hatoku_frm_data, - (void*)frm_data, - (uint)frm_len, - txn); - } - - TOKUDB_DBUG_RETURN(error); -} -#endif - -#endif diff --git a/storage/tokudb/hatoku_defines.h b/storage/tokudb/hatoku_defines.h index 3468ce3d3c91..5ae22bd5084b 100644 --- a/storage/tokudb/hatoku_defines.h +++ b/storage/tokudb/hatoku_defines.h @@ -74,10 +74,7 @@ Copyright (c) 2006, 2015, Percona and/or its affiliates. All rights reserved. #endif #define TOKU_USE_DB_TYPE_TOKUDB 1 // has DB_TYPE_TOKUDB patch -#define TOKU_INCLUDE_ALTER_56 1 #define TOKU_INCLUDE_ROW_TYPE_COMPRESSION 1 // has tokudb row format compression patch -#define TOKU_PARTITION_WRITE_FRM_DATA 0 -#define TOKU_INCLUDE_WRITE_FRM_DATA 0 #if defined(HTON_SUPPORTS_EXTENDED_KEYS) #define TOKU_INCLUDE_EXTENDED_KEYS 1 #endif From 5d020d210c3959e1dafbc03d3ae4949a3141d2cb Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Mon, 12 Mar 2018 16:08:32 -0700 Subject: [PATCH 0677/1221] TDB-129 : 'Fix' tokub conditional compilation dependent on version id starting in 5.7 - Removed all conditional compiled code for MARIADB_BASE_VERSION - Removed all conditional compiled code for MYSQL_VERSION_ID that does not apply to 5.7 and removed remaining #ifdef --- storage/tokudb/ha_tokudb.cc | 66 ++------------ storage/tokudb/ha_tokudb.h | 4 - storage/tokudb/ha_tokudb_update.cc | 12 +-- storage/tokudb/hatoku_cmp.cc | 28 ------ storage/tokudb/hatoku_cmp.h | 5 -- storage/tokudb/hatoku_defines.h | 21 ----- storage/tokudb/hatoku_hton.cc | 98 --------------------- storage/tokudb/tokudb_information_schema.cc | 66 -------------- storage/tokudb/tokudb_memory.h | 12 --- 9 files changed, 7 insertions(+), 305 deletions(-) diff --git a/storage/tokudb/ha_tokudb.cc b/storage/tokudb/ha_tokudb.cc index af75413773b9..3e1658ea8a96 100644 --- a/storage/tokudb/ha_tokudb.cc +++ b/storage/tokudb/ha_tokudb.cc @@ -459,19 +459,6 @@ static inline bool do_ignore_flag_optimization( return do_opt; } -#if TOKU_INCLUDE_EXTENDED_KEYS -static inline uint get_ext_key_parts(const KEY *key) { -#if (50609 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 50699) || \ - (50700 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 50799) - return key->actual_key_parts; -#elif defined(MARIADB_BASE_VERSION) - return key->ext_key_parts; -#else -#error -#endif -} -#endif - ulonglong ha_tokudb::table_flags() const { return int_table_flags | HA_BINLOG_ROW_CAPABLE | HA_BINLOG_STMT_CAPABLE; } @@ -2086,13 +2073,8 @@ int ha_tokudb::write_frm_data(DB* db, DB_TXN* txn, const char* frm_name) { size_t frm_len = 0; int error = 0; -#if 100000 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 100099 - error = table_share->read_frm_image((const uchar**)&frm_data,&frm_len); - if (error) { goto cleanup; } -#else error = readfrm(frm_name,&frm_data,&frm_len); if (error) { goto cleanup; } -#endif error = write_to_status(db,hatoku_frm_data,frm_data,(uint)frm_len, txn); if (error) { goto cleanup; } @@ -2126,17 +2108,10 @@ int ha_tokudb::verify_frm_data(const char* frm_name, DB_TXN* txn) { HA_METADATA_KEY curr_key = hatoku_frm_data; // get the frm data from MySQL -#if 100000 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 100099 - error = table_share->read_frm_image((const uchar**)&mysql_frm_data,&mysql_frm_len); - if (error) { - goto cleanup; - } -#else error = readfrm(frm_name,&mysql_frm_data,&mysql_frm_len); if (error) { goto cleanup; } -#endif key.data = &curr_key; key.size = sizeof(curr_key); @@ -2632,12 +2607,10 @@ uint32_t ha_tokudb::place_key_into_mysql_buff( } record[null_offset] &= ~key_part->field->null_bit; } -#if !defined(MARIADB_BASE_VERSION) // // HOPEFULLY TEMPORARY // assert_always(table->s->db_low_byte_first); -#endif pos = unpack_toku_key_field( record + field_offset(key_part->field, table), pos, @@ -2703,12 +2676,10 @@ uint32_t ha_tokudb::place_key_into_dbt_buff( } *curr_buff++ = NONNULL_COL_VAL; // Store NOT NULL marker } -#if !defined(MARIADB_BASE_VERSION) // // HOPEFULLY TEMPORARY // assert_always(table->s->db_low_byte_first); -#endif // // accessing field_offset(key_part->field) instead off key_part->offset // because key_part->offset is SET INCORRECTLY in add_index @@ -2913,9 +2884,7 @@ DBT* ha_tokudb::pack_key( *buff++ = NONNULL_COL_VAL; offset = 1; // Data is at key_ptr+1 } -#if !defined(MARIADB_BASE_VERSION) assert_always(table->s->db_low_byte_first); -#endif buff = pack_key_toku_key_field( buff, (uchar *) key_ptr + offset, @@ -2985,9 +2954,7 @@ DBT* ha_tokudb::pack_ext_key( *buff++ = NONNULL_COL_VAL; offset = 1; // Data is at key_ptr+1 } -#if !defined(MARIADB_BASE_VERSION) assert_always(table->s->db_low_byte_first); -#endif buff = pack_key_toku_key_field( buff, (uchar *) key_ptr + offset, @@ -3001,7 +2968,11 @@ DBT* ha_tokudb::pack_ext_key( if (key_length > 0) { assert_always(key_part == end); - end = key_info->key_part + get_ext_key_parts(key_info); +#if defined(TOKU_INCLUDE_EXTENDED_KEYS) && TOKU_INCLUDE_EXTENDED_KEYS + end = key_info->key_part + key_info->actual_key_parts; +#else + end = key_info->key_part; +#endif // defined(TOKU_INCLUDE_EXTENDED_KEYS) && TOKU_INCLUDE_EXTENDED_KEYS // pack PK in order of PK key parts for (uint pk_index = 0; @@ -3298,13 +3269,8 @@ bool ha_tokudb::may_table_be_empty(DB_TXN *txn) { return ret_val; } -#if MYSQL_VERSION_ID >= 100000 -void ha_tokudb::start_bulk_insert(ha_rows rows, uint flags) { - TOKUDB_HANDLER_DBUG_ENTER("%llu %u txn %p", (unsigned long long) rows, flags, transaction); -#else void ha_tokudb::start_bulk_insert(ha_rows rows) { TOKUDB_HANDLER_DBUG_ENTER("%llu txn %p", (unsigned long long) rows, transaction); -#endif THD* thd = ha_thd(); tokudb_trx_data* trx = (tokudb_trx_data *) thd_get_ha_data(thd, tokudb_hton); delay_updating_ai_metadata = true; @@ -4006,11 +3972,6 @@ int ha_tokudb::write_row(uchar * record) { // auto timestamp // ha_statistic_increment(&SSV::ha_write_count); -#if MYSQL_VERSION_ID < 50600 - if (table->timestamp_field_type & TIMESTAMP_AUTO_SET_ON_INSERT) { - table->timestamp_field->set_time(); - } -#endif if (table->next_number_field && record == table->record[0]) { error = update_auto_increment(); if (error) @@ -4216,11 +4177,6 @@ int ha_tokudb::update_row(const uchar * old_row, uchar * new_row) { memset((void *) &old_prim_row, 0, sizeof(old_prim_row)); ha_statistic_increment(&SSV::ha_update_count); -#if MYSQL_VERSION_ID < 50600 - if (table->timestamp_field_type & TIMESTAMP_AUTO_SET_ON_UPDATE) { - table->timestamp_field->set_time(); - } -#endif // // check to see if some value for the auto increment column that is bigger // than anything else til now is being used. If so, update the metadata to reflect it @@ -5233,11 +5189,7 @@ enum icp_result ha_tokudb::toku_handler_index_cond_check( enum icp_result res; if (end_range) { int cmp; -#ifdef MARIADB_BASE_VERSION - cmp = compare_key2(end_range); -#else cmp = compare_key_icp(end_range); -#endif if (cmp > 0) { return ICP_OUT_OF_RANGE; } @@ -7258,14 +7210,6 @@ int ha_tokudb::create( memset(&kc_info, 0, sizeof(kc_info)); -#if 100000 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 100999 - // TokuDB does not support discover_table_names() and writes no files - // in the database directory, so automatic filename-based - // discover_table_names() doesn't work either. So, it must force .frm - // file to disk. - form->s->write_frm_image(); -#endif - #if TOKU_INCLUDE_OPTION_STRUCTS const tokudb::sysvars::format_t row_format = (tokudb::sysvars::row_format_t)form->s->option_struct->row_format; diff --git a/storage/tokudb/ha_tokudb.h b/storage/tokudb/ha_tokudb.h index 62e8f983484c..ba12704d8999 100644 --- a/storage/tokudb/ha_tokudb.h +++ b/storage/tokudb/ha_tokudb.h @@ -782,11 +782,7 @@ class ha_tokudb : public handler { int write_row(uchar * buf); int update_row(const uchar * old_data, uchar * new_data); int delete_row(const uchar * buf); -#if MYSQL_VERSION_ID >= 100000 - void start_bulk_insert(ha_rows rows, uint flags); -#else void start_bulk_insert(ha_rows rows); -#endif static int bulk_insert_poll(void* extra, float progress); static void loader_add_index_err(DB* db, int i, diff --git a/storage/tokudb/ha_tokudb_update.cc b/storage/tokudb/ha_tokudb_update.cc index 3072b5d156fd..60c24b913b39 100644 --- a/storage/tokudb/ha_tokudb_update.cc +++ b/storage/tokudb/ha_tokudb_update.cc @@ -560,14 +560,6 @@ static bool clustering_keys_exist(TABLE *table) { return false; } -static bool is_strict_mode(THD* thd) { -#if 50600 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 50699 - return thd->is_strict_mode(); -#else - return tokudb_test(thd->variables.sql_mode & (MODE_STRICT_TRANS_TABLES | MODE_STRICT_ALL_TABLES)); -#endif -} - // Check if an update operation can be handled by this storage engine. // Return true if it can. bool ha_tokudb::check_fast_update( @@ -580,7 +572,7 @@ bool ha_tokudb::check_fast_update( return false; // avoid strict mode arithmetic overflow issues - if (is_strict_mode(thd)) + if (thd->is_strict_mode()) return false; // no triggers @@ -1002,7 +994,7 @@ bool ha_tokudb::check_upsert( return false; // avoid strict mode arithmetic overflow issues - if (is_strict_mode(thd)) + if (thd->is_strict_mode()) return false; // no triggers diff --git a/storage/tokudb/hatoku_cmp.cc b/storage/tokudb/hatoku_cmp.cc index a4884de57d4f..65f92b4426b1 100644 --- a/storage/tokudb/hatoku_cmp.cc +++ b/storage/tokudb/hatoku_cmp.cc @@ -52,13 +52,9 @@ static bool field_valid_for_tokudb_table(Field* field) { case MYSQL_TYPE_TIMESTAMP: case MYSQL_TYPE_DOUBLE: case MYSQL_TYPE_FLOAT: -#if (50600 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 50699) || \ - (50700 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 50799) || \ - (100000 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 100099) case MYSQL_TYPE_DATETIME2: case MYSQL_TYPE_TIMESTAMP2: case MYSQL_TYPE_TIME2: -#endif case MYSQL_TYPE_NEWDECIMAL: case MYSQL_TYPE_BIT: case MYSQL_TYPE_STRING: @@ -183,14 +179,6 @@ static TOKU_TYPE mysql_to_toku_type (Field* field) { case MYSQL_TYPE_TIME: case MYSQL_TYPE_DATETIME: case MYSQL_TYPE_TIMESTAMP: -#ifdef MARIADB_BASE_VERSION - // case to handle fractional seconds in MariaDB - // - if (field->key_type() == HA_KEYTYPE_BINARY) { - ret_val = toku_type_fixbinary; - goto exit; - } -#endif ret_val = toku_type_int; goto exit; case MYSQL_TYPE_DOUBLE: @@ -199,13 +187,9 @@ static TOKU_TYPE mysql_to_toku_type (Field* field) { case MYSQL_TYPE_FLOAT: ret_val = toku_type_float; goto exit; -#if (50600 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 50699) || \ - (50700 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 50799) || \ - (100000 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 100099) case MYSQL_TYPE_DATETIME2: case MYSQL_TYPE_TIMESTAMP2: case MYSQL_TYPE_TIME2: -#endif case MYSQL_TYPE_NEWDECIMAL: case MYSQL_TYPE_BIT: ret_val = toku_type_fixbinary; @@ -689,11 +673,7 @@ static inline uchar* pack_toku_blob( uint32_t length_bytes_in_tokudb, //number of bytes to use to encode the length in to_tokudb uint32_t length_bytes_in_mysql, //number of bytes used to encode the length in from_mysql uint32_t max_num_bytes, -#if MYSQL_VERSION_ID >= 50600 const CHARSET_INFO* charset -#else - CHARSET_INFO* charset -#endif ) { uint32_t length = 0; @@ -845,11 +825,7 @@ static inline uchar* pack_toku_varstring( uint32_t length_bytes_in_tokudb, //number of bytes to use to encode the length in to_tokudb uint32_t length_bytes_in_mysql, //number of bytes used to encode the length in from_mysql uint32_t max_num_bytes, -#if MYSQL_VERSION_ID >= 50600 const CHARSET_INFO *charset -#else - CHARSET_INFO* charset -#endif ) { uint32_t length = 0; @@ -3124,13 +3100,9 @@ static bool fields_are_same_type(Field* a, Field* b) { case MYSQL_TYPE_NEWDATE: case MYSQL_TYPE_TIME: case MYSQL_TYPE_TIMESTAMP: -#if (50600 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 50699) || \ - (50700 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 50799) || \ - (100000 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 100099) case MYSQL_TYPE_DATETIME2: case MYSQL_TYPE_TIMESTAMP2: case MYSQL_TYPE_TIME2: -#endif // length if (a->pack_length() != b->pack_length()) { retval = false; diff --git a/storage/tokudb/hatoku_cmp.h b/storage/tokudb/hatoku_cmp.h index 34b3cfbe1f80..141ef4b3264b 100644 --- a/storage/tokudb/hatoku_cmp.h +++ b/storage/tokudb/hatoku_cmp.h @@ -202,12 +202,7 @@ static inline const uchar* unpack_toku_field_blob(uchar *to_mysql, const uchar* } static inline uint get_null_offset(TABLE* table, Field* field) { -#if (50606 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 50699) || \ - (50700 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 50799) return field->null_offset(table->record[0]); -#else - return (uint) ((uchar*) field->null_ptr - (uchar*) table->record[0]); -#endif } typedef enum { diff --git a/storage/tokudb/hatoku_defines.h b/storage/tokudb/hatoku_defines.h index 5ae22bd5084b..2d5b2fe64e71 100644 --- a/storage/tokudb/hatoku_defines.h +++ b/storage/tokudb/hatoku_defines.h @@ -80,18 +80,9 @@ Copyright (c) 2006, 2015, Percona and/or its affiliates. All rights reserved. #endif #define TOKU_OPTIMIZE_WITH_RECREATE 1 -#ifdef MARIADB_BASE_VERSION -// In MariaDB 5.3, thread progress reporting was introduced. -// Only include that functionality if we're using maria 5.3 + -#define HA_TOKUDB_HAS_THD_PROGRESS 1 - -// MariaDB supports thdvar memalloc correctly -#define TOKU_THDVAR_MEMALLOC_BUG 0 -#else // MySQL does not support thdvar memalloc correctly // see http://bugs.mysql.com/bug.php?id=71759 #define TOKU_THDVAR_MEMALLOC_BUG 1 -#endif #if !defined(HA_CLUSTERING) #define HA_CLUSTERING 0 @@ -109,18 +100,6 @@ Copyright (c) 2006, 2015, Percona and/or its affiliates. All rights reserved. #define HA_OPTION_CREATE_FROM_ENGINE 0 #endif -// In older (< 5.5) versions of MySQL and MariaDB, it is necessary to -// use a read/write lock on the key_file array in a table share, -// because table locks do not protect the race of some thread closing -// a table and another calling ha_tokudb::info() -// -// In version 5.5 and, a higher layer "metadata lock" was introduced -// to synchronize threads that open, close, call info(), etc on tables. -// In these versions, we don't need the key_file lock -#if MYSQL_VERSION_ID < 50500 -#define HA_TOKUDB_NEEDS_KEY_FILE_LOCK -#endif - // // returns maximum length of dictionary name, such as key-NAME // NAME_CHAR_LEN is max length of the key name, and have upper bound of 10 for key- diff --git a/storage/tokudb/hatoku_hton.cc b/storage/tokudb/hatoku_hton.cc index db8267c7146e..42b2c69af4d8 100644 --- a/storage/tokudb/hatoku_hton.cc +++ b/storage/tokudb/hatoku_hton.cc @@ -98,13 +98,6 @@ static int tokudb_release_savepoint( handlerton* hton, THD* thd, void* savepoint); -#if 100000 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 100099 -static int tokudb_discover_table(handlerton *hton, THD* thd, TABLE_SHARE *ts); -static int tokudb_discover_table_existence( - handlerton* hton, - const char* db, - const char* name); -#endif static int tokudb_discover( handlerton* hton, THD* thd, @@ -140,14 +133,10 @@ struct tokudb_map_pair { THD* thd; char *last_lock_timeout; }; -#if 50500 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 50599 -static int tokudb_map_pair_cmp(void *custom_arg, const void *a, const void *b) { -#else static int tokudb_map_pair_cmp( const void* custom_arg, const void* a, const void* b) { -#endif const struct tokudb_map_pair *a_key = (const struct tokudb_map_pair *) a; const struct tokudb_map_pair *b_key = (const struct tokudb_map_pair *) b; @@ -380,14 +369,9 @@ static int tokudb_init_func(void *p) { tokudb_hton->savepoint_rollback = tokudb_rollback_to_savepoint; tokudb_hton->savepoint_release = tokudb_release_savepoint; -#if 100000 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 100099 - tokudb_hton->discover_table = tokudb_discover_table; - tokudb_hton->discover_table_existence = tokudb_discover_table_existence; -#else tokudb_hton->discover = tokudb_discover; #if defined(MYSQL_HANDLERTON_INCLUDE_DISCOVER2) tokudb_hton->discover2 = tokudb_discover2; -#endif #endif tokudb_hton->commit = tokudb_commit; tokudb_hton->rollback = tokudb_rollback; @@ -883,23 +867,14 @@ static void tokudb_cleanup_handlers(tokudb_trx_data *trx, DB_TXN *txn) { } } -#if MYSQL_VERSION_ID >= 50600 extern "C" enum durability_properties thd_get_durability_property( const MYSQL_THD thd); -#endif // Determine if an fsync is used when a transaction is committed. static bool tokudb_sync_on_commit(THD* thd, tokudb_trx_data* trx, DB_TXN* txn) { -#if MYSQL_VERSION_ID >= 50600 // Check the client durability property which is set during 2PC if (thd_get_durability_property(thd) == HA_IGNORE_DURABILITY) return false; -#endif -#if defined(MARIADB_BASE_VERSION) - // Check is the txn is prepared and the binlog is open - if (txn->is_prepared(txn) && mysql_bin_log.is_open()) - return false; -#endif if (tokudb::sysvars::fsync_log_period > 0) return false; return tokudb::sysvars::commit_sync(thd) != 0; @@ -1186,39 +1161,6 @@ static int tokudb_release_savepoint( TOKUDB_DBUG_RETURN(error); } -#if 100000 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 100099 -static int tokudb_discover_table(handlerton *hton, THD* thd, TABLE_SHARE *ts) { - uchar *frmblob = 0; - size_t frmlen; - int res= tokudb_discover3( - hton, - thd, - ts->db.str, - ts->table_name.str, - ts->normalized_path.str, - &frmblob, - &frmlen); - if (!res) - res= ts->init_from_binary_frm_image(thd, true, frmblob, frmlen); - - my_free(frmblob); - // discover_table should returns HA_ERR_NO_SUCH_TABLE for "not exists" - return res == ENOENT ? HA_ERR_NO_SUCH_TABLE : res; -} - -static int tokudb_discover_table_existence( - handlerton* hton, - const char* db, - const char* name) { - - uchar *frmblob = 0; - size_t frmlen; - int res= tokudb_discover(hton, current_thd, db, name, &frmblob, &frmlen); - my_free(frmblob); - return res != ENOENT; -} -#endif - static int tokudb_discover( handlerton* hton, THD* thd, @@ -1268,23 +1210,9 @@ static int tokudb_discover3( DBT value = {}; bool do_commit = false; -#if 100000 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 100099 - tokudb_trx_data* trx = (tokudb_trx_data*)thd_get_ha_data(thd, tokudb_hton); - if (thd_sql_command(thd) == SQLCOM_CREATE_TABLE && - trx && - trx->sub_sp_level) { - do_commit = false; - txn = trx->sub_sp_level; - } else { - error = txn_begin(db_env, 0, &txn, 0, thd); - if (error) { goto cleanup; } - do_commit = true; - } -#else error = txn_begin(db_env, 0, &txn, 0, thd); if (error) { goto cleanup; } do_commit = true; -#endif error = open_status_dictionary(&status_db, path, txn); if (error) { goto cleanup; } @@ -1344,19 +1272,6 @@ static bool tokudb_show_engine_status(THD * thd, stat_print_fn * stat_print) { const int bufsiz = 1024; char buf[bufsiz]; -#if MYSQL_VERSION_ID < 50500 - { - sys_var* version = intern_find_sys_var("version", 0, false); - snprintf( - buf, - bufsiz, - "%s", - version->value_ptr(thd, - (enum_var_type)0, - (LEX_STRING*)NULL)); - STATPRINT("Version", buf); - } -#endif error = db_env->get_engine_status_num_rows (db_env, &max_rows); TOKU_ENGINE_STATUS_ROW_S mystat[max_rows]; error = db_env->get_engine_status( @@ -1930,11 +1845,7 @@ static void tokudb_backtrace(void) { } #endif -#ifdef MARIA_PLUGIN_INTERFACE_VERSION -maria_declare_plugin(tokudb) -#else mysql_declare_plugin(tokudb) -#endif { MYSQL_STORAGE_ENGINE_PLUGIN, &tokudb_storage_engine, @@ -1947,13 +1858,8 @@ mysql_declare_plugin(tokudb) TOKUDB_PLUGIN_VERSION, toku_global_status_variables_export, /* status variables */ tokudb::sysvars::system_variables, /* system variables */ -#ifdef MARIA_PLUGIN_INTERFACE_VERSION - tokudb::sysvars::version, - MariaDB_PLUGIN_MATURITY_STABLE /* maturity */ -#else NULL, /* config options */ 0, /* flags */ -#endif }, tokudb::information_schema::trx, tokudb::information_schema::lock_waits, @@ -1962,8 +1868,4 @@ mysql_declare_plugin(tokudb) tokudb::information_schema::fractal_tree_info, tokudb::information_schema::fractal_tree_block_map, tokudb::information_schema::background_job_status -#ifdef MARIA_PLUGIN_INTERFACE_VERSION -maria_declare_plugin_end; -#else mysql_declare_plugin_end; -#endif diff --git a/storage/tokudb/tokudb_information_schema.cc b/storage/tokudb/tokudb_information_schema.cc index c5d4c84638e8..922fee635896 100644 --- a/storage/tokudb/tokudb_information_schema.cc +++ b/storage/tokudb/tokudb_information_schema.cc @@ -89,11 +89,7 @@ int trx_callback( return error; } -#if MYSQL_VERSION_ID >= 50600 int trx_fill_table(THD* thd, TABLE_LIST* tables, Item* cond) { -#else -int trx_fill_table(THD* thd, TABLE_LIST* tables, COND* cond) { -#endif TOKUDB_DBUG_ENTER(""); int error; @@ -136,13 +132,8 @@ st_mysql_plugin trx = { TOKUDB_PLUGIN_VERSION, NULL, /* status variables */ NULL, /* system variables */ -#ifdef MARIA_PLUGIN_INTERFACE_VERSION - tokudb::sysvars::version, - MariaDB_PLUGIN_MATURITY_STABLE /* maturity */ -#else NULL, /* config options */ 0, /* flags */ -#endif }; @@ -224,11 +215,7 @@ int lock_waits_callback( return error; } -#if MYSQL_VERSION_ID >= 50600 int lock_waits_fill_table(THD* thd, TABLE_LIST* tables, Item* cond) { -#else -int lock_waits_fill_table(THD* thd, TABLE_LIST* tables, COND* cond) { -#endif TOKUDB_DBUG_ENTER(""); int error; @@ -274,13 +261,8 @@ st_mysql_plugin lock_waits = { TOKUDB_PLUGIN_VERSION, NULL, /* status variables */ NULL, /* system variables */ -#ifdef MARIA_PLUGIN_INTERFACE_VERSION - tokudb::sysvars::version, - MariaDB_PLUGIN_MATURITY_STABLE /* maturity */ -#else NULL, /* config options */ 0, /* flags */ -#endif }; @@ -367,11 +349,7 @@ int locks_callback( return error; } -#if MYSQL_VERSION_ID >= 50600 int locks_fill_table(THD* thd, TABLE_LIST* tables, Item* cond) { -#else -int locks_fill_table(THD* thd, TABLE_LIST* tables, COND* cond) { -#endif TOKUDB_DBUG_ENTER(""); int error; @@ -414,13 +392,8 @@ st_mysql_plugin locks = { TOKUDB_PLUGIN_VERSION, NULL, /* status variables */ NULL, /* system variables */ -#ifdef MARIA_PLUGIN_INTERFACE_VERSION - tokudb::sysvars::version, - MariaDB_PLUGIN_MATURITY_STABLE /* maturity */ -#else NULL, /* config options */ 0, /* flags */ -#endif }; @@ -510,11 +483,7 @@ int report_file_map(TABLE* table, THD* thd) { return error; } -#if MYSQL_VERSION_ID >= 50600 int file_map_fill_table(THD* thd, TABLE_LIST* tables, Item* cond) { -#else -int file_map_fill_table(THD* thd, TABLE_LIST* tables, COND* cond) { -#endif TOKUDB_DBUG_ENTER(""); int error; TABLE* table = tables->table; @@ -557,13 +526,8 @@ st_mysql_plugin file_map = { TOKUDB_PLUGIN_VERSION, NULL, /* status variables */ NULL, /* system variables */ -#ifdef MARIA_PLUGIN_INTERFACE_VERSION - tokudb::sysvars::version, - MariaDB_PLUGIN_MATURITY_STABLE /* maturity */ -#else NULL, /* config options */ 0, /* flags */ -#endif }; @@ -715,11 +679,7 @@ int report_fractal_tree_info(TABLE* table, THD* thd) { return error; } -#if MYSQL_VERSION_ID >= 50600 int fractal_tree_info_fill_table(THD* thd, TABLE_LIST* tables, Item* cond) { -#else -int fractal_tree_info_fill_table(THD* thd, TABLE_LIST* tables, COND* cond) { -#endif TOKUDB_DBUG_ENTER(""); int error; TABLE* table = tables->table; @@ -765,13 +725,8 @@ st_mysql_plugin fractal_tree_info = { TOKUDB_PLUGIN_VERSION, NULL, /* status variables */ NULL, /* system variables */ -#ifdef MARIA_PLUGIN_INTERFACE_VERSION - tokudb::sysvars::version, - MariaDB_PLUGIN_MATURITY_STABLE /* maturity */ -#else NULL, /* config options */ 0, /* flags */ -#endif }; @@ -1006,17 +961,10 @@ int report_fractal_tree_block_map(TABLE* table, THD* thd) { return error; } -#if MYSQL_VERSION_ID >= 50600 int fractal_tree_block_map_fill_table( THD* thd, TABLE_LIST* tables, Item* cond) { -#else -int fractal_tree_block_map_fill_table( - THD* thd, - TABLE_LIST* tables, - COND* cond) { -#endif TOKUDB_DBUG_ENTER(""); int error; TABLE* table = tables->table; @@ -1062,13 +1010,8 @@ st_mysql_plugin fractal_tree_block_map = { TOKUDB_PLUGIN_VERSION, NULL, /* status variables */ NULL, /* system variables */ -#ifdef MARIA_PLUGIN_INTERFACE_VERSION - tokudb::sysvars::version, - MariaDB_PLUGIN_MATURITY_STABLE /* maturity */ -#else NULL, /* config options */ 0, /* flags */ -#endif }; @@ -1151,11 +1094,7 @@ int report_background_job_status(TABLE *table, THD *thd) { return error; } -#if MYSQL_VERSION_ID >= 50600 int background_job_status_fill_table(THD *thd, TABLE_LIST *tables, Item *cond) { -#else -int background_job_status_fill_table(THD *thd, TABLE_LIST *tables, COND *cond) { -#endif TOKUDB_DBUG_ENTER(""); int error; TABLE* table = tables->table; @@ -1198,13 +1137,8 @@ st_mysql_plugin background_job_status = { TOKUDB_PLUGIN_VERSION, NULL, /* status variables */ NULL, /* system variables */ -#ifdef MARIA_PLUGIN_INTERFACE_VERSION - tokudb::sysvars::version, - MariaDB_PLUGIN_MATURITY_STABLE /* maturity */ -#else NULL, /* config options */ 0, /* flags */ -#endif }; } // namespace information_schema diff --git a/storage/tokudb/tokudb_memory.h b/storage/tokudb/tokudb_memory.h index 26587de6062f..a12db83e022d 100644 --- a/storage/tokudb/tokudb_memory.h +++ b/storage/tokudb/tokudb_memory.h @@ -40,31 +40,19 @@ void* multi_malloc(myf myFlags, ...); inline void* malloc(size_t s, myf flags) { -#if 50700 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 50799 return ::my_malloc(0, s, flags); -#else - return ::my_malloc(s, flags); -#endif } inline void* realloc(void* p, size_t s, myf flags) { if (s == 0) return p; -#if 50700 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 50799 return ::my_realloc(0, p, s, flags); -#else - return ::my_realloc(p, s, flags); -#endif } inline void free(void* ptr) { if (ptr) ::my_free(ptr); } inline char* strdup(const char* p, myf flags) { -#if 50700 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 50799 return ::my_strdup(0, p, flags); -#else - return ::my_strdup(p, flags); -#endif } inline void* multi_malloc(myf myFlags, ...) { va_list args; From 955486a5fa266b9849a626404b4721ee08cc55d2 Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Tue, 20 Mar 2018 12:42:59 +0100 Subject: [PATCH 0678/1221] PS-3887: Move perfschema to the beginning of the storage list in CONFIGURE_PLUGINS --- cmake/plugin.cmake | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/cmake/plugin.cmake b/cmake/plugin.cmake index cc0892faa63c..a20209aeae73 100644 --- a/cmake/plugin.cmake +++ b/cmake/plugin.cmake @@ -234,6 +234,12 @@ ENDMACRO() MACRO(CONFIGURE_PLUGINS) FILE(GLOB dirs_storage ${CMAKE_SOURCE_DIR}/storage/*) FILE(GLOB dirs_plugin ${CMAKE_SOURCE_DIR}/plugin/*) + # Move perfschema to the beginning of the storage list + LIST(FIND dirs_storage "${CMAKE_SOURCE_DIR}/storage/perfschema" PERFSCHEMA_POS) + IF(NOT ${PERFSCHEMA_POS} EQUAL -1) + LIST(REMOVE_AT dirs_storage ${PERFSCHEMA_POS}) + LIST(INSERT dirs_storage 0 "${CMAKE_SOURCE_DIR}/storage/perfschema") + ENDIF() FOREACH(dir ${dirs_storage} ${dirs_plugin}) IF (EXISTS ${dir}/CMakeLists.txt) ADD_SUBDIRECTORY(${dir}) From 64d4dd2bf61d7028cbcfffdc6dc1e6efbe467a61 Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Tue, 20 Mar 2018 13:46:16 +0100 Subject: [PATCH 0679/1221] PS-3901: Fix -DWITHOUT_xxx_STORAGE_ENGINE=ON for some plugins 1. Fix cmake errors with -DWITHOUT_INNOBASE_STORAGE_ENGINE=ON 2. Fix a collision of WITHOUT_xxx_STORAGE_ENGINE=ON and WITH_xxx_STORAGE_ENGINE=ON by setting of WITH_xxx_STORAGE_ENGINE=OFF --- cmake/plugin.cmake | 7 ++++++- storage/innobase/CMakeLists.txt | 6 ++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/cmake/plugin.cmake b/cmake/plugin.cmake index ffcf7fd96e25..ef703d93c87f 100644 --- a/cmake/plugin.cmake +++ b/cmake/plugin.cmake @@ -93,8 +93,13 @@ MACRO(MYSQL_ADD_PLUGIN) SET(WITH_${plugin} 1) ELSEIF(WITHOUT_${plugin}_STORAGE_ENGINE OR WITH_NONE OR ${plugin}_DISABLED) SET(WITHOUT_${plugin} 1) - SET(WITH_${plugin}_STORAGE_ENGINE 0) SET(WITH_${plugin} 0) + IF(WITH_${plugin}_STORAGE_ENGINE) + # if there is a cached/global WITH_${plugin}_STORAGE_ENGINE=ON then overwrite it + SET(WITH_${plugin}_STORAGE_ENGINE 0 CACHE BOOL "Don't build ${plugin}" FORCE) + ELSE() + SET(WITH_${plugin}_STORAGE_ENGINE 0) + ENDIF() ENDIF() diff --git a/storage/innobase/CMakeLists.txt b/storage/innobase/CMakeLists.txt index 2b32acfec31d..91033e60dc6c 100644 --- a/storage/innobase/CMakeLists.txt +++ b/storage/innobase/CMakeLists.txt @@ -309,5 +309,7 @@ MYSQL_ADD_PLUGIN(innobase ${INNOBASE_SOURCES} STORAGE_ENGINE MODULE_OUTPUT_NAME ha_innodb LINK_LIBRARIES ${ZLIB_LIBRARY}) -# Remove -DMYSQL_SERVER, it breaks embedded build -SET_TARGET_PROPERTIES(innobase PROPERTIES COMPILE_DEFINITIONS "") +IF(WITH_INNOBASE_STORAGE_ENGINE) + # Remove -DMYSQL_SERVER, it breaks embedded build + SET_TARGET_PROPERTIES(innobase PROPERTIES COMPILE_DEFINITIONS "") +ENDIF() From 200287edf6a30359be341d4f08341c2f7d2cead5 Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Tue, 20 Mar 2018 13:46:16 +0100 Subject: [PATCH 0680/1221] PS-3901: Fix -DWITHOUT_xxx_STORAGE_ENGINE=ON for some plugins 1. Fix cmake errors with -DWITHOUT_INNOBASE_STORAGE_ENGINE=ON 2. Fix a collision of WITHOUT_xxx_STORAGE_ENGINE=ON and WITH_xxx_STORAGE_ENGINE=ON by setting of WITH_xxx_STORAGE_ENGINE=OFF --- cmake/plugin.cmake | 7 ++++++- storage/innobase/CMakeLists.txt | 8 +++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/cmake/plugin.cmake b/cmake/plugin.cmake index 7d18976cc219..352246dcdafd 100644 --- a/cmake/plugin.cmake +++ b/cmake/plugin.cmake @@ -93,8 +93,13 @@ MACRO(MYSQL_ADD_PLUGIN) SET(WITH_${plugin} 1) ELSEIF(WITHOUT_${plugin}_STORAGE_ENGINE OR WITH_NONE OR ${plugin}_DISABLED) SET(WITHOUT_${plugin} 1) - SET(WITH_${plugin}_STORAGE_ENGINE 0) SET(WITH_${plugin} 0) + IF(WITH_${plugin}_STORAGE_ENGINE) + # if there is a cached/global WITH_${plugin}_STORAGE_ENGINE=ON then overwrite it + SET(WITH_${plugin}_STORAGE_ENGINE 0 CACHE BOOL "Don't build ${plugin}" FORCE) + ELSE() + SET(WITH_${plugin}_STORAGE_ENGINE 0) + ENDIF() ENDIF() diff --git a/storage/innobase/CMakeLists.txt b/storage/innobase/CMakeLists.txt index 2e4e13f7036d..23fa7b342a85 100644 --- a/storage/innobase/CMakeLists.txt +++ b/storage/innobase/CMakeLists.txt @@ -453,7 +453,9 @@ MYSQL_ADD_PLUGIN(innobase ${INNOBASE_SOURCES} STORAGE_ENGINE MODULE_OUTPUT_NAME ha_innodb LINK_LIBRARIES ${ZLIB_LIBRARY}) -# Remove -DMYSQL_SERVER, it breaks embedded build -SET_TARGET_PROPERTIES(innobase PROPERTIES COMPILE_DEFINITIONS "") +IF(WITH_INNOBASE_STORAGE_ENGINE) + # Remove -DMYSQL_SERVER, it breaks embedded build + SET_TARGET_PROPERTIES(innobase PROPERTIES COMPILE_DEFINITIONS "") -ADD_DEPENDENCIES(innobase GenError) + ADD_DEPENDENCIES(innobase GenError) +ENDIF() From 5fe65b06d323c565b513953f58152c62a459ef37 Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Wed, 21 Mar 2018 10:39:45 -0700 Subject: [PATCH 0681/1221] TDB-148 : Make UPSERT/NOAR optional at compile time - UPSERT/NOAR functionality requires server side patches to funvtion correctly. For 8.0, these initially will not be present, and thus we will have a bunch of dead-code present, and get compiler warning/errors from -Wunused-function. - Added in proper #if defined(TOKU_INCLUDE_UPSERT && TOKU_INCLUDE_UPSERT around all new functionality. --- storage/tokudb/ha_tokudb.cc | 2 ++ storage/tokudb/ha_tokudb.h | 2 ++ storage/tokudb/hatoku_defines.h | 1 + storage/tokudb/tokudb_sysvars.cc | 9 +++++++-- storage/tokudb/tokudb_sysvars.h | 2 ++ 5 files changed, 14 insertions(+), 2 deletions(-) diff --git a/storage/tokudb/ha_tokudb.cc b/storage/tokudb/ha_tokudb.cc index 5d74451b796a..58a6f6e02289 100644 --- a/storage/tokudb/ha_tokudb.cc +++ b/storage/tokudb/ha_tokudb.cc @@ -8972,7 +8972,9 @@ bool ha_tokudb::rpl_lookup_rows() { #include "tokudb_update_fun.cc" // fast updates +#if defined(TOKU_INCLUDE_UPSERT) && TOKU_INCLUDE_UPSERT #include "ha_tokudb_update.cc" +#endif // defined(TOKU_INCLUDE_UPSERT) && TOKU_INCLUDE_UPSERT // alter table #include "ha_tokudb_alter.cc" diff --git a/storage/tokudb/ha_tokudb.h b/storage/tokudb/ha_tokudb.h index 2383c435fb3f..a815142f7720 100644 --- a/storage/tokudb/ha_tokudb.h +++ b/storage/tokudb/ha_tokudb.h @@ -984,6 +984,7 @@ class ha_tokudb : public handler { int write_frm_data(const uchar *frm_data, size_t frm_len); #endif private: +#if defined(TOKU_INCLUDE_UPSERT) && TOKU_INCLUDE_UPSERT MY_NODISCARD int fast_update(THD *thd, List &update_fields, List &update_values, @@ -1005,6 +1006,7 @@ class ha_tokudb : public handler { MY_NODISCARD int send_upsert_message(List &update_fields, List &update_values, DB_TXN *txn); +#endif // defined(TOKU_INCLUDE_UPSERT) && TOKU_INCLUDE_UPSERT public: // mysql sometimes retires a txn before a cursor that references the txn is closed. // for example, commit is sometimes called before index_end. the following methods diff --git a/storage/tokudb/hatoku_defines.h b/storage/tokudb/hatoku_defines.h index 2050cab4efea..d55a14ed9f5e 100644 --- a/storage/tokudb/hatoku_defines.h +++ b/storage/tokudb/hatoku_defines.h @@ -80,6 +80,7 @@ Copyright (c) 2006, 2015, Percona and/or its affiliates. All rights reserved. #define TOKU_OPTIMIZE_WITH_RECREATE 1 #define TOKU_INCLUDE_DISCOVER_FRM 1 #define TOKU_INCLUDE_RFR 1 +#define TOKU_INCLUDE_UPSERT 1 #if defined(TOKU_INCLUDE_DISCOVER_FRM) && TOKU_INCLUDE_DISCOVER_FRM #include "discover.h" diff --git a/storage/tokudb/tokudb_sysvars.cc b/storage/tokudb/tokudb_sysvars.cc index d6e42223c83c..0cb76667def4 100644 --- a/storage/tokudb/tokudb_sysvars.cc +++ b/storage/tokudb/tokudb_sysvars.cc @@ -854,6 +854,7 @@ static MYSQL_THDVAR_ULONGLONG( 1); #endif // defined(TOKU_INCLUDE_RFR) && TOKU_INCLUDE_RFR +#if defined(TOKU_INCLUDE_UPSERT) && TOKU_INCLUDE_UPSERT static MYSQL_THDVAR_BOOL( enable_fast_update, PLUGIN_VAR_THDLOCAL, @@ -869,6 +870,7 @@ static MYSQL_THDVAR_BOOL( NULL, NULL, false); +#endif // defined(TOKU_INCLUDE_UPSERT) && TOKU_INCLUDE_UPSERT static const char* deprecated_tokudb_support_xa = "Using tokudb_support_xa is deprecated and the " @@ -1038,9 +1040,11 @@ st_mysql_sys_var* system_variables[] = { MYSQL_SYSVAR(rpl_lookup_rows_delay), MYSQL_SYSVAR(rpl_unique_checks), MYSQL_SYSVAR(rpl_unique_checks_delay), -#endif // defined(TOKU_INCLUDE_RFR) && TOKU_INCLUDE_RFR +#endif // defined(TOKU_INCLUDE_RFR) && TOKU_INCLUDE_RFR +#if defined(TOKU_INCLUDE_UPSERT) && TOKU_INCLUDE_UPSERT MYSQL_SYSVAR(enable_fast_update), MYSQL_SYSVAR(enable_fast_upsert), +#endif // defined(TOKU_INCLUDE_UPSERT) && TOKU_INCLUDE_UPSERT MYSQL_SYSVAR(support_xa), #if TOKUDB_DEBUG @@ -1095,13 +1099,14 @@ my_bool disable_prefetching(THD* thd) { my_bool disable_slow_alter(THD* thd) { return (THDVAR(thd, disable_slow_alter) != 0); } +#if defined(TOKU_INCLUDE_UPSERT) && TOKU_INCLUDE_UPSERT my_bool enable_fast_update(THD* thd) { return (THDVAR(thd, enable_fast_update) != 0); } my_bool enable_fast_upsert(THD* thd) { return (THDVAR(thd, enable_fast_upsert) != 0); } - +#endif // defined(TOKU_INCLUDE_UPSERT) && TOKU_INCLUDE_UPSERT empty_scan_mode_t empty_scan(THD* thd) { return (empty_scan_mode_t)THDVAR(thd, empty_scan); } diff --git a/storage/tokudb/tokudb_sysvars.h b/storage/tokudb/tokudb_sysvars.h index bc7472ffaec1..2c4414aba734 100644 --- a/storage/tokudb/tokudb_sysvars.h +++ b/storage/tokudb/tokudb_sysvars.h @@ -111,8 +111,10 @@ my_bool create_index_online(THD* thd); my_bool disable_hot_alter(THD* thd); my_bool disable_prefetching(THD* thd); my_bool disable_slow_alter(THD* thd); +#if defined(TOKU_INCLUDE_UPSERT) && TOKU_INCLUDE_UPSERT my_bool enable_fast_update(THD* thd); my_bool enable_fast_upsert(THD* thd); +#endif // defined(TOKU_INCLUDE_UPSERT) && TOKU_INCLUDE_UPSERT empty_scan_mode_t empty_scan(THD* thd); uint fanout(THD* thd); my_bool hide_default_row_format(THD* thd); From bc56e675cd58a42ebecc120eb017d88e1fd0b563 Mon Sep 17 00:00:00 2001 From: Sachin Agarwal Date: Thu, 22 Mar 2018 17:53:41 +0530 Subject: [PATCH 0682/1221] Bug #26334149 - MYSQL CRASHES WHEN FULL TEXT INDEXES IBD FILES ARE ORPHANED DUE TO RENAME TABLE Post-push testcase innodb-alter fix. --- mysql-test/suite/innodb/r/innodb-alter.result | 11 +---------- mysql-test/suite/innodb/t/innodb-alter.test | 3 +-- 2 files changed, 2 insertions(+), 12 deletions(-) diff --git a/mysql-test/suite/innodb/r/innodb-alter.result b/mysql-test/suite/innodb/r/innodb-alter.result index 1d2d30221d39..5f8f72943a39 100644 --- a/mysql-test/suite/innodb/r/innodb-alter.result +++ b/mysql-test/suite/innodb/r/innodb-alter.result @@ -871,20 +871,11 @@ id int(11) NOT NULL AUTO_INCREMENT, body text COLLATE utf8_unicode_ci, PRIMARY KEY (id) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 -COLLATE=utf8_unicode_ci -ROW_FORMAT=COMPRESSED; -Warnings: -Warning 1478 InnoDB: ROW_FORMAT=COMPRESSED requires innodb_file_format > Antelope. -Warning 1478 InnoDB: assuming ROW_FORMAT=COMPACT. +COLLATE=utf8_unicode_ci; ALTER TABLE notes ADD FULLTEXT INDEX index_ft_body (body(255)); Warnings: -Warning 1478 InnoDB: ROW_FORMAT=COMPRESSED requires innodb_file_format > Antelope. -Warning 1478 InnoDB: assuming ROW_FORMAT=COMPACT. Warning 124 InnoDB rebuilding table to add column FTS_DOC_ID DROP INDEX index_ft_body ON notes; -Warnings: -Warning 1478 InnoDB: ROW_FORMAT=COMPRESSED requires innodb_file_format > Antelope. -Warning 1478 InnoDB: assuming ROW_FORMAT=COMPACT. CREATE DATABASE db2; RENAME TABLE db1.notes TO db2.notes; DROP DATABASE db1; diff --git a/mysql-test/suite/innodb/t/innodb-alter.test b/mysql-test/suite/innodb/t/innodb-alter.test index 63e84f57b673..2208c6da86f7 100644 --- a/mysql-test/suite/innodb/t/innodb-alter.test +++ b/mysql-test/suite/innodb/t/innodb-alter.test @@ -490,8 +490,7 @@ CREATE TABLE notes ( body text COLLATE utf8_unicode_ci, PRIMARY KEY (id) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 -COLLATE=utf8_unicode_ci -ROW_FORMAT=COMPRESSED; +COLLATE=utf8_unicode_ci; ALTER TABLE notes ADD FULLTEXT INDEX index_ft_body (body(255)); DROP INDEX index_ft_body ON notes; From e1ca073a5b7034a6b37c07eaee29552054018b18 Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Wed, 21 Mar 2018 20:38:03 -0700 Subject: [PATCH 0683/1221] TDB-128 : Make .frm discovery optional at compile time - The original patch that introduced TOKU_INCLUDE_WRITE_FRM_DATA was incorrect and incomplete. It failed to properly isolate all instances of storing .frm data within TokuDB status (metadata) files and so in all cases, TokuDB would perform this regardless of the definition of the macro. - The second patch which introduced TOKU_INCLUDE_DISCOVER_FRM was also incorrect in that it extended beyond just guarding the functionality of using the stored .frm data to provide MySQL table discovery functionality and guarded some, but not all, of the 'WRITE' functionaloty. - This patch corrects all of these incorrect behaviors and properly isolated the two different, but related areas of 'WRITE' and 'DISCOVER'. - Due to the timing and logistics of merging this within the GCA workflow, it is not GCA but will be a cherry-pick to 5.7 --- storage/tokudb/ha_tokudb.cc | 16 ++++++------- storage/tokudb/ha_tokudb.h | 8 +++---- storage/tokudb/ha_tokudb_alter_55.cc | 4 ++++ storage/tokudb/ha_tokudb_alter_56.cc | 19 ++++++++++----- storage/tokudb/ha_tokudb_alter_common.cc | 6 +++-- storage/tokudb/hatoku_defines.h | 30 ++++++++++++++++++------ storage/tokudb/hatoku_hton.cc | 10 ++++---- 7 files changed, 61 insertions(+), 32 deletions(-) diff --git a/storage/tokudb/ha_tokudb.cc b/storage/tokudb/ha_tokudb.cc index 1517b3786e6a..8127d3987c8a 100644 --- a/storage/tokudb/ha_tokudb.cc +++ b/storage/tokudb/ha_tokudb.cc @@ -1631,7 +1631,7 @@ int ha_tokudb::initialize_share(const char* name, int mode) { goto exit; } -#if defined(TOKU_INCLUDE_DISCOVER_FRM) && TOKU_INCLUDE_DISCOVER_FRM +#if defined(TOKU_INCLUDE_WRITE_FRM_DATA) && TOKU_INCLUDE_WRITE_FRM_DATA #if defined(WITH_PARTITION_STORAGE_ENGINE) && WITH_PARTITION_STORAGE_ENGINE // verify frm data for non-partitioned tables if (TOKU_PARTITION_WRITE_FRM_DATA || table->part_info == NULL) { @@ -1648,8 +1648,8 @@ int ha_tokudb::initialize_share(const char* name, int mode) { error = verify_frm_data(table->s->path.str, txn); if (error) goto exit; -#endif // defined(WITH_PARTITION_STORAGE_ENGINE) && WITH_PARTITION_STORAGE_ENGINE -#endif // defined(TOKU_INCLUDE_DISCOVER_FRM) && TOKU_INCLUDE_DISCOVER_FRM +#endif // defined(WITH_PARTITION_STORAGE_ENGINE) && WITH_PARTITION_STORAGE_ENGINE +#endif // defined(TOKU_INCLUDE_WRITE_FRM_DATA) && TOKU_INCLUDE_WRITE_FRM_DATA error = initialize_key_and_col_info( @@ -2070,7 +2070,7 @@ int ha_tokudb::write_metadata(DB* db, void* key_data, uint key_size, void* val_d return error; } -#if defined(TOKU_INCLUDE_DISCOVER_FRM) && TOKU_INCLUDE_DISCOVER_FRM +#if defined(TOKU_INCLUDE_WRITE_FRM_DATA) && TOKU_INCLUDE_WRITE_FRM_DATA int ha_tokudb::write_frm_data(DB* db, DB_TXN* txn, const char* frm_name) { TOKUDB_HANDLER_DBUG_ENTER("%p %p %s", db, txn, frm_name); @@ -2159,7 +2159,7 @@ int ha_tokudb::verify_frm_data(const char* frm_name, DB_TXN* txn) { tokudb::memory::free(stored_frm.data); TOKUDB_HANDLER_DBUG_RETURN(error); } -#endif // defined(TOKU_INCLUDE_DISCOVER_FRM) && TOKU_INCLUDE_DISCOVER_FRM +#endif // defined(TOKU_INCLUDE_WRITE_FRM_DATA) && TOKU_INCLUDE_WRITE_FRM_DATA // // Updates status.tokudb with a new max value used for the auto increment column @@ -7358,7 +7358,7 @@ int ha_tokudb::create( goto cleanup; } -#if defined(TOKU_INCLUDE_DISCOVER_FRM) && TOKU_INCLUDE_DISCOVER_FRM +#if defined(TOKU_INCLUDE_WRITE_FRM_DATA) && TOKU_INCLUDE_WRITE_FRM_DATA #if defined(WITH_PARTITION_STORAGE_ENGINE) && WITH_PARTITION_STORAGE_ENGINE if (TOKU_PARTITION_WRITE_FRM_DATA || form->part_info == NULL) { error = write_frm_data(status_block, txn, form->s->path.str); @@ -7371,8 +7371,8 @@ int ha_tokudb::create( if (error) { goto cleanup; } -#endif // defined(WITH_PARTITION_STORAGE_ENGINE) && WITH_PARTITION_STORAGE_ENGINE -#endif // defined(TOKU_INCLUDE_DISCOVER_FRM) && TOKU_INCLUDE_DISCOVER_FRM +#endif // defined(WITH_PARTITION_STORAGE_ENGINE) && WITH_PARTITION_STORAGE_ENGINE +#endif // defined(TOKU_INCLUDE_WRITE_FRM_DATA) && TOKU_INCLUDE_WRITE_FRM_DATA error = allocate_key_and_col_info(form->s, &kc_info); if (error) { diff --git a/storage/tokudb/ha_tokudb.h b/storage/tokudb/ha_tokudb.h index 256960e57a80..435430760a17 100644 --- a/storage/tokudb/ha_tokudb.h +++ b/storage/tokudb/ha_tokudb.h @@ -663,11 +663,11 @@ class ha_tokudb : public handler { int estimate_num_rows(DB* db, uint64_t* num_rows, DB_TXN* txn); bool has_auto_increment_flag(uint* index); -#if defined(TOKU_INCLUDE_DISCOVER_FRM) && TOKU_INCLUDE_DISCOVER_FRM +#if defined(TOKU_INCLUDE_WRITE_FRM_DATA) && TOKU_INCLUDE_WRITE_FRM_DATA int write_frm_data(DB* db, DB_TXN* txn, const char* frm_name); int verify_frm_data(const char* frm_name, DB_TXN* trans); int remove_frm_data(DB *db, DB_TXN *txn); -#endif // defined(TOKU_INCLUDE_DISCOVER_FRM) && TOKU_INCLUDE_DISCOVER_FRM +#endif // defined(TOKU_INCLUDE_WRITE_FRM_DATA) && TOKU_INCLUDE_WRITE_FRM_DATA int write_to_status(DB* db, HA_METADATA_KEY curr_key_data, void* data, uint size, DB_TXN* txn); int remove_from_status(DB* db, HA_METADATA_KEY curr_key_data, DB_TXN* txn); @@ -1029,9 +1029,9 @@ class ha_tokudb : public handler { void close_dsmrr(); void reset_dsmrr(); -#if TOKU_INCLUDE_WRITE_FRM_DATA +#if defined(TOKU_INCLUDE_WRITE_FRM_DATA) && TOKU_INCLUDE_WRITE_FRM_DATA int write_frm_data(const uchar *frm_data, size_t frm_len); -#endif +#endif // defined(TOKU_INCLUDE_WRITE_FRM_DATA) && TOKU_INCLUDE_WRITE_FRM_DATA private: MY_NODISCARD int fast_update(THD *thd, List &update_fields, diff --git a/storage/tokudb/ha_tokudb_alter_55.cc b/storage/tokudb/ha_tokudb_alter_55.cc index 3e6a38c97dec..6ceec2087686 100644 --- a/storage/tokudb/ha_tokudb_alter_55.cc +++ b/storage/tokudb/ha_tokudb_alter_55.cc @@ -35,7 +35,11 @@ bool ha_tokudb::try_hot_alter_table() { } int ha_tokudb::new_alter_table_frm_data(const uchar *frm_data, size_t frm_len) { +#if defined(TOKU_INCLUDE_WRITE_FRM_DATA) && TOKU_INCLUDE_WRITE_FRM_DATA return write_frm_data(frm_data, frm_len); +#else + return 0; +#endif // defined(TOKU_INCLUDE_WRITE_FRM_DATA) && TOKU_INCLUDE_WRITE_FRM_DATA } #endif diff --git a/storage/tokudb/ha_tokudb_alter_56.cc b/storage/tokudb/ha_tokudb_alter_56.cc index e005d6789538..2f32e67e5854 100644 --- a/storage/tokudb/ha_tokudb_alter_56.cc +++ b/storage/tokudb/ha_tokudb_alter_56.cc @@ -644,20 +644,24 @@ bool ha_tokudb::inplace_alter_table( error = do_optimize(ha_thd()); } + +#if defined(TOKU_INCLUDE_WRITE_FRM_DATA) && TOKU_INCLUDE_WRITE_FRM_DATA #if (50600 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 50699) || \ (50700 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 50799) -#if WITH_PARTITION_STORAGE_ENGINE +#if defined(WITH_PARTITION_STORAGE_ENGINE) && WITH_PARTITION_STORAGE_ENGINE if (error == 0 && (TOKU_PARTITION_WRITE_FRM_DATA || altered_table->part_info == NULL)) { #else if (error == 0) { -#endif +#endif // defined(WITH_PARTITION_STORAGE_ENGINE) && WITH_PARTITION_STORAGE_ENGINE error = write_frm_data( share->status_block, ctx->alter_txn, altered_table->s->path.str); } -#endif +#endif // (50600 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 50699) || + // (50700 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 50799) +#endif // defined(TOKU_INCLUDE_WRITE_FRM_DATA) && TOKU_INCLUDE_WRITE_FRM_DATA bool result = false; // success if (error) { @@ -911,13 +915,14 @@ bool ha_tokudb::commit_inplace_alter_table( ha_alter_info->group_commit_ctx = NULL; } #endif +#if defined(TOKU_INCLUDE_WRITE_FRM_DATA) && TOKU_INCLUDE_WRITE_FRM_DATA #if (50500 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 50599) || \ (100000 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 100099) -#if WITH_PARTITION_STORAGE_ENGINE +#if defined(WITH_PARTITION_STORAGE_ENGINE) && WITH_PARTITION_STORAGE_ENGINE if (TOKU_PARTITION_WRITE_FRM_DATA || altered_table->part_info == NULL) { #else if (true) { -#endif +#endif // defined(WITH_PARTITION_STORAGE_ENGINE) && WITH_PARTITION_STORAGE_ENGINE int error = write_frm_data( share->status_block, ctx->alter_txn, @@ -928,7 +933,9 @@ bool ha_tokudb::commit_inplace_alter_table( print_error(error, MYF(0)); } } -#endif +#endif // (50500 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 50599) || + // (100000 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 100099) +#endif // defined(TOKU_INCLUDE_WRITE_FRM_DATA) && TOKU_INCLUDE_WRITE_FRM_DATA } if (!commit) { diff --git a/storage/tokudb/ha_tokudb_alter_common.cc b/storage/tokudb/ha_tokudb_alter_common.cc index d41a676de1f3..1de4c4017508 100644 --- a/storage/tokudb/ha_tokudb_alter_common.cc +++ b/storage/tokudb/ha_tokudb_alter_common.cc @@ -764,13 +764,14 @@ static bool tables_have_same_keys_and_columns( return retval; } -#if TOKU_INCLUDE_WRITE_FRM_DATA +#if defined(TOKU_INCLUDE_WRITE_FRM_DATA) && TOKU_INCLUDE_WRITE_FRM_DATA // write the new frm data to the status dictionary using the alter table // transaction int ha_tokudb::write_frm_data(const uchar* frm_data, size_t frm_len) { TOKUDB_DBUG_ENTER("write_frm_data"); int error = 0; +#if defined(WITH_PARTITION_STORAGE_ENGINE) && WITH_PARTITION_STORAGE_ENGINE if (TOKU_PARTITION_WRITE_FRM_DATA || table->part_info == NULL) { // write frmdata to status THD* thd = ha_thd(); @@ -787,9 +788,10 @@ int ha_tokudb::write_frm_data(const uchar* frm_data, size_t frm_len) { (uint)frm_len, txn); } +#endif // defined(WITH_PARTITION_STORAGE_ENGINE) && WITH_PARTITION_STORAGE_ENGINE TOKUDB_DBUG_RETURN(error); } -#endif +#endif // defined(TOKU_INCLUDE_WRITE_FRM_DATA) && TOKU_INCLUDE_WRITE_FRM_DATA #endif diff --git a/storage/tokudb/hatoku_defines.h b/storage/tokudb/hatoku_defines.h index b0fac3598e20..ada18d58a83a 100644 --- a/storage/tokudb/hatoku_defines.h +++ b/storage/tokudb/hatoku_defines.h @@ -72,21 +72,34 @@ Copyright (c) 2006, 2015, Percona and/or its affiliates. All rights reserved. #pragma interface /* gcc class implementation */ #endif +// TOKU_INCLUDE_WRITE_FRM_DATA, TOKU_PARTITION_WRITE_FRM_DATA, and +// TOKU_INCLUDE_DISCOVER_FRM all work together as two opposing sides +// of the same functionality. The 'WRITE' includes functionality to +// write a copy of every tables .frm data into the tables status dictionary on +// CREATE or ALTER. When WRITE is in, the .frm data is also verified whenever a +// table is opened. +// +// The 'DISCOVER' then implements the MySQL table discovery API which reads +// this same data and returns it back to MySQL. +// In most cases, they should all be in or out without mixing. There may be +// extreme cases though where one side (WRITE) is supported but perhaps +// 'DISCOVERY' may not be, thus the need for individual indicators. + #if 100000 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 100099 // mariadb 10.0 #define TOKU_USE_DB_TYPE_TOKUDB 1 #define TOKU_INCLUDE_ALTER_56 1 #define TOKU_INCLUDE_ROW_TYPE_COMPRESSION 0 #define TOKU_INCLUDE_XA 1 -#define TOKU_INCLUDE_WRITE_FRM_DATA 0 +#define TOKU_INCLUDE_WRITE_FRM_DATA 1 #define TOKU_PARTITION_WRITE_FRM_DATA 0 +#define TOKU_INCLUDE_DISCOVER_FRM 1 #if defined(MARIADB_BASE_VERSION) #define TOKU_INCLUDE_EXTENDED_KEYS 1 #endif #define TOKU_INCLUDE_OPTION_STRUCTS 1 #define TOKU_OPTIMIZE_WITH_RECREATE 1 #define TOKU_CLUSTERING_IS_COVERING 1 -#define TOKU_INCLUDE_DISCOVER_FRM 1 #elif 50700 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 50799 // mysql 5.7 with no patches @@ -94,6 +107,7 @@ Copyright (c) 2006, 2015, Percona and/or its affiliates. All rights reserved. #define TOKU_USE_DB_TYPE_UNKNOWN 1 #define TOKU_INCLUDE_ALTER_56 1 #define TOKU_INCLUDE_ROW_TYPE_COMPRESSION 0 +#define TOKU_INCLUDE_WRITE_FRM_DATA 1 #define TOKU_PARTITION_WRITE_FRM_DATA 0 #define TOKU_INCLUDE_DISCOVER_FRM 1 #define TOKU_INCLUDE_RFR 1 @@ -108,22 +122,24 @@ Copyright (c) 2006, 2015, Percona and/or its affiliates. All rights reserved. #define TOKU_INCLUDE_ALTER_56 1 #define TOKU_INCLUDE_ROW_TYPE_COMPRESSION 0 #define TOKU_INCLUDE_XA 0 +#define TOKU_INCLUDE_WRITE_FRM_DATA 1 #define TOKU_PARTITION_WRITE_FRM_DATA 0 +#define TOKU_INCLUDE_DISCOVER_FRM 1 #else // mysql 5.6 with tokutek patches #define TOKU_USE_DB_TYPE_TOKUDB 1 // has DB_TYPE_TOKUDB patch #define TOKU_INCLUDE_ALTER_56 1 #define TOKU_INCLUDE_ROW_TYPE_COMPRESSION 1 // has tokudb row format compression patch #define TOKU_INCLUDE_XA 1 // has patch that fixes TC_LOG_MMAP code +#define TOKU_INCLUDE_WRITE_FRM_DATA 1 #define TOKU_PARTITION_WRITE_FRM_DATA 0 -#define TOKU_INCLUDE_WRITE_FRM_DATA 0 +#define TOKU_INCLUDE_DISCOVER_FRM 1 #define TOKU_INCLUDE_UPSERT 1 // has tokudb upsert patch #if defined(HTON_SUPPORTS_EXTENDED_KEYS) #define TOKU_INCLUDE_EXTENDED_KEYS 1 #endif #endif #define TOKU_OPTIMIZE_WITH_RECREATE 1 -#define TOKU_INCLUDE_DISCOVER_FRM 1 #define TOKU_INCLUDE_RFR 1 #elif 50500 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 50599 @@ -133,8 +149,9 @@ Copyright (c) 2006, 2015, Percona and/or its affiliates. All rights reserved. #define TOKU_INCLUDE_ALTER_55 1 #define TOKU_INCLUDE_ROW_TYPE_COMPRESSION 1 #define TOKU_INCLUDE_XA 1 -#define TOKU_PARTITION_WRITE_FRM_DATA 1 #define TOKU_INCLUDE_WRITE_FRM_DATA 1 +#define TOKU_PARTITION_WRITE_FRM_DATA 1 +#define TOKU_INCLUDE_DISCOVER_FRM 1 #define TOKU_INCLUDE_UPSERT 1 #if defined(MARIADB_BASE_VERSION) #define TOKU_INCLUDE_EXTENDED_KEYS 1 @@ -143,7 +160,6 @@ Copyright (c) 2006, 2015, Percona and/or its affiliates. All rights reserved. #define TOKU_INCLUDE_LOCK_TIMEOUT_QUERY_STRING 1 #endif #define TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL 0 -#define TOKU_INCLUDE_DISCOVER_FRM 1 #else #error @@ -152,7 +168,7 @@ Copyright (c) 2006, 2015, Percona and/or its affiliates. All rights reserved. #if defined(TOKU_INCLUDE_DISCOVER_FRM) && TOKU_INCLUDE_DISCOVER_FRM #include "discover.h" -#endif // defined(TOKU_INCLUDE_DISCOVER_FRM) && TOKU_INCLUDE_DISCOVER_FRM +#endif // defined(TOKU_INCLUDE_DISCOVER_FRM) && TOKU_INCLUDE_DISCOVER_FRM #ifdef MARIADB_BASE_VERSION diff --git a/storage/tokudb/hatoku_hton.cc b/storage/tokudb/hatoku_hton.cc index 2eeb57d813d6..7dd35593a35a 100644 --- a/storage/tokudb/hatoku_hton.cc +++ b/storage/tokudb/hatoku_hton.cc @@ -128,7 +128,7 @@ static int tokudb_discover3( char* path, uchar** frmblob, size_t* frmlen); -#endif // defined(TOKU_INCLUDE_DISCOVER_FRM) && TOKU_INCLUDE_DISCOVER_FRM +#endif // defined(TOKU_INCLUDE_DISCOVER_FRM) && TOKU_INCLUDE_DISCOVER_FRM handlerton* tokudb_hton; const char* ha_tokudb_ext = ".tokudb"; @@ -389,9 +389,9 @@ static int tokudb_init_func(void *p) { tokudb_hton->discover = tokudb_discover; #if defined(MYSQL_HANDLERTON_INCLUDE_DISCOVER2) tokudb_hton->discover2 = tokudb_discover2; -#endif // MYSQL_HANDLERTON_INCLUDE_DISCOVER2 -#endif // defined(TOKU_INCLUDE_DISCOVER_FRM) && TOKU_INCLUDE_DISCOVER_FRM -#endif // 100000 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 100099 +#endif // MYSQL_HANDLERTON_INCLUDE_DISCOVER2 +#endif // defined(TOKU_INCLUDE_DISCOVER_FRM) && TOKU_INCLUDE_DISCOVER_FRM +#endif // 100000 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 100099 tokudb_hton->commit = tokudb_commit; tokudb_hton->rollback = tokudb_rollback; #if TOKU_INCLUDE_XA @@ -1325,7 +1325,7 @@ static int tokudb_discover3( } TOKUDB_DBUG_RETURN(error); } -#endif // defined(TOKU_INCLUDE_DISCOVER_FRM) && TOKU_INCLUDE_DISCOVER_FRM +#endif // defined(TOKU_INCLUDE_DISCOVER_FRM) && TOKU_INCLUDE_DISCOVER_FRM #define STATPRINT(legend, val) if (legend != NULL && val != NULL) \ From 57227fa6da11ddb1ef1a1f2dfcf62d4dd5ba8f08 Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Wed, 21 Mar 2018 20:38:03 -0700 Subject: [PATCH 0684/1221] TDB-128 : Make .frm discovery optional at compile time - The original patch that introduced TOKU_INCLUDE_WRITE_FRM_DATA was incorrect and incomplete. It failed to properly isolate all instances of storing .frm data within TokuDB status (metadata) files and so in all cases, TokuDB would perform this regardless of the definition of the macro. - The second patch which introduced TOKU_INCLUDE_DISCOVER_FRM was also incorrect in that it extended beyond just guarding the functionality of using the stored .frm data to provide MySQL table discovery functionality and guarded some, but not all, of the 'WRITE' functionaloty. - This patch corrects all of these incorrect behaviors and properly isolated the two different, but related areas of 'WRITE' and 'DISCOVER'. - Due to the timing and logistics of merging this within the GCA workflow, it is not GCA but will be a cherry-pick to 5.7 (cherry picked from commit e1ca073a5b7034a6b37c07eaee29552054018b18) Conflicts: storage/tokudb/ha_tokudb_alter_55.cc storage/tokudb/ha_tokudb_alter_56.cc storage/tokudb/ha_tokudb_alter_common.cc storage/tokudb/hatoku_defines.h storage/tokudb/hatoku_hton.cc --- storage/tokudb/ha_tokudb.cc | 16 ++++++++-------- storage/tokudb/ha_tokudb.h | 7 ++----- storage/tokudb/ha_tokudb_alter.cc | 4 ++-- storage/tokudb/hatoku_defines.h | 12 ++++++++++++ storage/tokudb/hatoku_hton.cc | 8 ++++---- 5 files changed, 28 insertions(+), 19 deletions(-) diff --git a/storage/tokudb/ha_tokudb.cc b/storage/tokudb/ha_tokudb.cc index 58a6f6e02289..431ac7d4f287 100644 --- a/storage/tokudb/ha_tokudb.cc +++ b/storage/tokudb/ha_tokudb.cc @@ -1627,7 +1627,7 @@ int ha_tokudb::initialize_share(const char* name, int mode) { goto exit; } -#if defined(TOKU_INCLUDE_DISCOVER_FRM) && TOKU_INCLUDE_DISCOVER_FRM +#if defined(TOKU_INCLUDE_WRITE_FRM_DATA) && TOKU_INCLUDE_WRITE_FRM_DATA #if defined(WITH_PARTITION_STORAGE_ENGINE) && WITH_PARTITION_STORAGE_ENGINE // verify frm data for non-partitioned tables if (table->part_info == NULL) { @@ -1644,8 +1644,8 @@ int ha_tokudb::initialize_share(const char* name, int mode) { error = verify_frm_data(table->s->path.str, txn); if (error) goto exit; -#endif // defined(WITH_PARTITION_STORAGE_ENGINE) && WITH_PARTITION_STORAGE_ENGINE -#endif // defined(TOKU_INCLUDE_DISCOVER_FRM) && TOKU_INCLUDE_DISCOVER_FRM +#endif // defined(WITH_PARTITION_STORAGE_ENGINE) && WITH_PARTITION_STORAGE_ENGINE +#endif // defined(TOKU_INCLUDE_WRITE_FRM_DATA) && TOKU_INCLUDE_WRITE_FRM_DATA error = initialize_key_and_col_info( @@ -2070,7 +2070,7 @@ int ha_tokudb::write_metadata(DB* db, void* key_data, uint key_size, void* val_d return error; } -#if defined(TOKU_INCLUDE_DISCOVER_FRM) && TOKU_INCLUDE_DISCOVER_FRM +#if defined(TOKU_INCLUDE_WRITE_FRM_DATA) && TOKU_INCLUDE_WRITE_FRM_DATA int ha_tokudb::write_frm_data(DB* db, DB_TXN* txn, const char* frm_name) { TOKUDB_HANDLER_DBUG_ENTER("%p %p %s", db, txn, frm_name); @@ -2147,7 +2147,7 @@ int ha_tokudb::verify_frm_data(const char* frm_name, DB_TXN* txn) { tokudb::memory::free(stored_frm.data); TOKUDB_HANDLER_DBUG_RETURN(error); } -#endif // defined(TOKU_INCLUDE_DISCOVER_FRM) && TOKU_INCLUDE_DISCOVER_FRM +#endif // defined(TOKU_INCLUDE_WRITE_FRM_DATA) && TOKU_INCLUDE_WRITE_FRM_DATA // // Updates status.tokudb with a new max value used for the auto increment column @@ -7364,7 +7364,7 @@ int ha_tokudb::create( goto cleanup; } -#if defined(TOKU_INCLUDE_DISCOVER_FRM) && TOKU_INCLUDE_DISCOVER_FRM +#if defined(TOKU_INCLUDE_WRITE_FRM_DATA) && TOKU_INCLUDE_WRITE_FRM_DATA #if defined(WITH_PARTITION_STORAGE_ENGINE) && WITH_PARTITION_STORAGE_ENGINE if (form->part_info == NULL) { error = write_frm_data(status_block, txn, form->s->path.str); @@ -7377,8 +7377,8 @@ int ha_tokudb::create( if (error) { goto cleanup; } -#endif // defined(WITH_PARTITION_STORAGE_ENGINE) && WITH_PARTITION_STORAGE_ENGINE -#endif // defined(TOKU_INCLUDE_DISCOVER_FRM) && TOKU_INCLUDE_DISCOVER_FRM +#endif // defined(WITH_PARTITION_STORAGE_ENGINE) && WITH_PARTITION_STORAGE_ENGINE +#endif // defined(TOKU_INCLUDE_WRITE_FRM_DATA) && TOKU_INCLUDE_WRITE_FRM_DATA error = allocate_key_and_col_info(form->s, &kc_info); if (error) { diff --git a/storage/tokudb/ha_tokudb.h b/storage/tokudb/ha_tokudb.h index a815142f7720..2a57753844db 100644 --- a/storage/tokudb/ha_tokudb.h +++ b/storage/tokudb/ha_tokudb.h @@ -658,11 +658,11 @@ class ha_tokudb : public handler { int estimate_num_rows(DB* db, uint64_t* num_rows, DB_TXN* txn); bool has_auto_increment_flag(uint* index); -#if defined(TOKU_INCLUDE_DISCOVER_FRM) && TOKU_INCLUDE_DISCOVER_FRM +#if defined(TOKU_INCLUDE_WRITE_FRM_DATA) && TOKU_INCLUDE_WRITE_FRM_DATA int write_frm_data(DB* db, DB_TXN* txn, const char* frm_name); int verify_frm_data(const char* frm_name, DB_TXN* trans); int remove_frm_data(DB *db, DB_TXN *txn); -#endif // defined(TOKU_INCLUDE_DISCOVER_FRM) && TOKU_INCLUDE_DISCOVER_FRM +#endif // defined(TOKU_INCLUDE_WRITE_FRM_DATA) && TOKU_INCLUDE_WRITE_FRM_DATA int write_to_status(DB* db, HA_METADATA_KEY curr_key_data, void* data, uint size, DB_TXN* txn); int remove_from_status(DB* db, HA_METADATA_KEY curr_key_data, DB_TXN* txn); @@ -980,9 +980,6 @@ class ha_tokudb : public handler { void invalidate_icp(); int delete_all_rows_internal(); -#if TOKU_INCLUDE_WRITE_FRM_DATA - int write_frm_data(const uchar *frm_data, size_t frm_len); -#endif private: #if defined(TOKU_INCLUDE_UPSERT) && TOKU_INCLUDE_UPSERT MY_NODISCARD int fast_update(THD *thd, diff --git a/storage/tokudb/ha_tokudb_alter.cc b/storage/tokudb/ha_tokudb_alter.cc index 307df796eaf8..1f874d562009 100644 --- a/storage/tokudb/ha_tokudb_alter.cc +++ b/storage/tokudb/ha_tokudb_alter.cc @@ -1240,11 +1240,11 @@ bool ha_tokudb::inplace_alter_table( error = do_optimize(ha_thd()); } -#if WITH_PARTITION_STORAGE_ENGINE +#if defined(WITH_PARTITION_STORAGE_ENGINE) && WITH_PARTITION_STORAGE_ENGINE if (error == 0 && (altered_table->part_info == NULL)) { #else if (error == 0) { -#endif +#endif // defined(WITH_PARTITION_STORAGE_ENGINE) && WITH_PARTITION_STORAGE_ENGINE error = write_frm_data( share->status_block, ctx->alter_txn, diff --git a/storage/tokudb/hatoku_defines.h b/storage/tokudb/hatoku_defines.h index d55a14ed9f5e..d9f61554a9f8 100644 --- a/storage/tokudb/hatoku_defines.h +++ b/storage/tokudb/hatoku_defines.h @@ -72,12 +72,24 @@ Copyright (c) 2006, 2015, Percona and/or its affiliates. All rights reserved. #pragma interface /* gcc class implementation */ #endif +// TOKU_INCLUDE_WRITE_FRM_DATA and TOKU_INCLUDE_DISCOVER_FRM work together as +// two opposing sides of the same functionality. The 'WRITE' includes +// functionality to write a copy of every tables .frm data into the tables +// status dictionary on CREATE or ALTER. When WRITE is in, the .frm data is +// also verified whenever a table is opened. +// +// The 'DISCOVER' then implements the MySQL table discovery API which reads +// this same data and returns it back to MySQL. +// In most cases, they should all be in or out without mixing. There may be +// extreme cases though where one side (WRITE) is supported but perhaps +// 'DISCOVERY' may not be, thus the need for individual indicators. #define TOKU_USE_DB_TYPE_TOKUDB 1 // has DB_TYPE_TOKUDB patch #define TOKU_INCLUDE_ROW_TYPE_COMPRESSION 1 // has tokudb row format compression patch #if defined(HTON_SUPPORTS_EXTENDED_KEYS) #define TOKU_INCLUDE_EXTENDED_KEYS 1 #endif #define TOKU_OPTIMIZE_WITH_RECREATE 1 +#define TOKU_INCLUDE_WRITE_FRM_DATA 1 #define TOKU_INCLUDE_DISCOVER_FRM 1 #define TOKU_INCLUDE_RFR 1 #define TOKU_INCLUDE_UPSERT 1 diff --git a/storage/tokudb/hatoku_hton.cc b/storage/tokudb/hatoku_hton.cc index 42b60aa15972..cf7af367f857 100644 --- a/storage/tokudb/hatoku_hton.cc +++ b/storage/tokudb/hatoku_hton.cc @@ -122,7 +122,7 @@ static int tokudb_discover3( char* path, uchar** frmblob, size_t* frmlen); -#endif // defined(TOKU_INCLUDE_DISCOVER_FRM) && TOKU_INCLUDE_DISCOVER_FRM +#endif // defined(TOKU_INCLUDE_DISCOVER_FRM) && TOKU_INCLUDE_DISCOVER_FRM handlerton* tokudb_hton; const char* ha_tokudb_ext = ".tokudb"; @@ -375,8 +375,8 @@ static int tokudb_init_func(void *p) { tokudb_hton->discover = tokudb_discover; #if defined(MYSQL_HANDLERTON_INCLUDE_DISCOVER2) tokudb_hton->discover2 = tokudb_discover2; -#endif // MYSQL_HANDLERTON_INCLUDE_DISCOVER2 -#endif // defined(TOKU_INCLUDE_DISCOVER_FRM) && TOKU_INCLUDE_DISCOVER_FRM +#endif // MYSQL_HANDLERTON_INCLUDE_DISCOVER2 +#endif // defined(TOKU_INCLUDE_DISCOVER_FRM) && TOKU_INCLUDE_DISCOVER_FRM tokudb_hton->commit = tokudb_commit; tokudb_hton->rollback = tokudb_rollback; tokudb_hton->prepare = tokudb_xa_prepare; @@ -1249,7 +1249,7 @@ static int tokudb_discover3( } TOKUDB_DBUG_RETURN(error); } -#endif // defined(TOKU_INCLUDE_DISCOVER_FRM) && TOKU_INCLUDE_DISCOVER_FRM +#endif // defined(TOKU_INCLUDE_DISCOVER_FRM) && TOKU_INCLUDE_DISCOVER_FRM #define STATPRINT(legend, val) if (legend != NULL && val != NULL) \ From a5ebdcf8f6c4e3541e699beac3d919f2fbe30daf Mon Sep 17 00:00:00 2001 From: Dima Date: Fri, 23 Mar 2018 09:58:26 +0300 Subject: [PATCH 0685/1221] fix for DOC-726 by adding keyring_vault_timeout to the list of system variables --- doc/source/management/data_at_rest_encryption.rst | 2 +- doc/source/ps-variables.rst | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/doc/source/management/data_at_rest_encryption.rst b/doc/source/management/data_at_rest_encryption.rst index 9faf3f227da4..5698c1a8cdc6 100644 --- a/doc/source/management/data_at_rest_encryption.rst +++ b/doc/source/management/data_at_rest_encryption.rst @@ -244,7 +244,7 @@ This variable is used to define the location of the This variable allows to set the duration in seconds for the Vault server connection timeout. Default value is ``15``. Allowed range is from ``1`` second to ``86400`` seconds (24 hours). The timeout can be also completely -disabled by setting this variable to ``0``. +disabled to wait infinite amount of time by setting this variable to ``0``. Other reading ------------- diff --git a/doc/source/ps-variables.rst b/doc/source/ps-variables.rst index 6ab62daa3d68..72ed48de0639 100644 --- a/doc/source/ps-variables.rst +++ b/doc/source/ps-variables.rst @@ -172,6 +172,16 @@ System Variables - Yes - Global - Yes + * - :variable:`keyring_vault_config` + - Yes + - Yes + - Global + - Yes + * - :variable:`keyring_vault_timeout` + - Yes + - Yes + - Global + - Yes * - :variable:`log_slow_filter` - Yes - Yes From c516b60baa1ab03c610e2a0c3a698493a9fbb20c Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Fri, 23 Mar 2018 15:58:30 +0530 Subject: [PATCH 0686/1221] From 5a55a2832ff123871eb42a6c99d2563ca2d47133 Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Fri, 23 Mar 2018 12:46:13 +0100 Subject: [PATCH 0687/1221] PS-3868: Switch Travis-CI macOS build to system protobuf 1. Add -DWITH_PROTOBUF=system to cmake options 2. Install protobuf with brew --- .travis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index ba2a17298994..5f9b588f2f8f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -34,7 +34,7 @@ matrix: - compiler: clang os: osx osx_image: xcode9.2 - env: BUILD=RelWithDebInfo MAINTAINER_MODE=OFF WITHOUT_TOKUDB=ON WITHOUT_ROCKSDB=ON WITH_MECAB= + env: BUILD=RelWithDebInfo MAINTAINER_MODE=OFF WITHOUT_TOKUDB=ON WITHOUT_ROCKSDB=ON WITH_MECAB= CMAKE_OPT="-DWITH_PROTOBUF=system" # 3 - compiler: clang env: VERSION=4.0 BUILD=RelWithDebInfo @@ -66,7 +66,7 @@ matrix: - compiler: clang os: osx osx_image: xcode9.2 - env: BUILD=Debug MAINTAINER_MODE=OFF WITHOUT_TOKUDB=ON WITHOUT_ROCKSDB=ON WITH_MECAB= + env: BUILD=Debug MAINTAINER_MODE=OFF WITHOUT_TOKUDB=ON WITHOUT_ROCKSDB=ON WITH_MECAB= CMAKE_OPT="-DWITH_PROTOBUF=system" # 13 - compiler: clang env: VERSION=4.0 BUILD=Debug @@ -131,7 +131,7 @@ script: sudo ln -s $(which ccache) /usr/lib/ccache/$CXX || echo; else brew update; - brew install ccache; + brew install ccache protobuf; brew link ccache; export PATH="/usr/local/opt/ccache/libexec:$PATH"; fi From 527611165d9dc4dd7b4e602e6b33a33dd7c58dc2 Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Fri, 23 Mar 2018 13:20:00 +0100 Subject: [PATCH 0688/1221] PS-3921: Enable RocksDB and TokuDB in Travis config for PS 5.7 Set default values in Travis config to: - WITHOUT_TOKUDB=OFF - WITHOUT_ROCKSDB=OFF --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index ba2a17298994..852487e10f8b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -17,8 +17,8 @@ env: - CCACHE_MAXSIZE=500Mi - CCACHE_CPP2=1 - MAINTAINER_MODE=ON - - WITHOUT_TOKUDB=ON - - WITHOUT_ROCKSDB=ON + - WITHOUT_TOKUDB=OFF + - WITHOUT_ROCKSDB=OFF - WITH_MECAB=system matrix: From 8314278e2ec720c8a9d65b6878017577cff55622 Mon Sep 17 00:00:00 2001 From: Parveez Baig Date: Mon, 26 Mar 2018 10:31:26 +0530 Subject: [PATCH 0689/1221] Bug#27535636:CONTRIBUTION BY FACEBOOK: TEST CASE FOR MAX_BINLOG_CACHE_SIZE AND LOAD DATA ... Added the scenario in existing rpl test which has the various scenarios to check the max_binlog_cache_size. --- .../rpl_tests/rpl_binlog_max_cache_size.test | 49 ++++++++++++++++++- .../r/rpl_mixed_binlog_max_cache_size.result | 14 +++++- .../r/rpl_row_binlog_max_cache_size.result | 14 +++++- .../r/rpl_stm_binlog_max_cache_size.result | 14 +++++- 4 files changed, 87 insertions(+), 4 deletions(-) diff --git a/mysql-test/extra/rpl_tests/rpl_binlog_max_cache_size.test b/mysql-test/extra/rpl_tests/rpl_binlog_max_cache_size.test index 1d0554af2f02..7acb07edea18 100644 --- a/mysql-test/extra/rpl_tests/rpl_binlog_max_cache_size.test +++ b/mysql-test/extra/rpl_tests/rpl_binlog_max_cache_size.test @@ -358,7 +358,54 @@ COMMIT; --let $diff_tables= master:t1,slave:t1 --source include/diff_tables.inc ---echo ######### 8 - Bug#55375(Regression Bug) Transaction bigger than ########## +--echo ####### 8 - LOAD DATA INFILE INTO TABLE ####### + +# +# This scenario verifies that load data infile fails when +# binlog cache exceeds max_binlog_cache_size +# +--source include/rpl_connection_master.inc +CREATE TABLE t6 (a varchar(20)) ENGINE=Innodb; + +# Save the current binary log position +--let $pos_before= query_get_value(show master status,Position,1) + +--disable_query_log +--let $write_var =`SELECT REPEAT('Testing\n', 1000)` +--let $write_to_file = GENERATE +--source include/write_var_to_file.inc +--enable_query_log + +# Below transaction generates transaction cache more than +# the max_binlog_cache_size i.e 4096. Hence results in error. +--replace_result $write_to_file temp_file +--error ER_TRANS_CACHE_FULL +eval LOAD DATA INFILE '$write_to_file' INTO TABLE t6; + +--exec rm $write_to_file + +# Check that the above transaction has not been logged in the binary log +--let $assert_text= assert that the above Event has not been added to binlog +--let $assert_cond= [SHOW MASTER STATUS, Position,1] = $pos_before +--source include/assert.inc + +# Check that the table is empty on master +--let $assert_text = Check that the LOAD DATA didn't add any data into the table +--let $assert_cond = [SELECT COUNT(*) FROM t6] = 0 +--source include/assert.inc + +--source include/sync_slave_sql_with_master.inc + +# Check that the table is empty on slave +--let $assert_text = Check that the LOAD DATA didn't add any data into the table +--let $assert_cond = [SELECT COUNT(*) FROM t6] = 0 +--source include/assert.inc + +--source include/rpl_connection_master.inc +DROP TABLE t6; +--source include/sync_slave_sql_with_master.inc + +--echo ######### 9 - Bug#55375(Regression Bug) Transaction bigger than ########## --echo ######### max_binlog_cache_size crashes slave ########## --echo # [ On Slave ] diff --git a/mysql-test/suite/rpl/r/rpl_mixed_binlog_max_cache_size.result b/mysql-test/suite/rpl/r/rpl_mixed_binlog_max_cache_size.result index 8bce22630432..0f3719cd57b3 100644 --- a/mysql-test/suite/rpl/r/rpl_mixed_binlog_max_cache_size.result +++ b/mysql-test/suite/rpl/r/rpl_mixed_binlog_max_cache_size.result @@ -111,7 +111,19 @@ BEGIN; Got one of the listed errors COMMIT; include/diff_tables.inc [master:t1,slave:t1] -######### 8 - Bug#55375(Regression Bug) Transaction bigger than ########## +####### 8 - LOAD DATA INFILE INTO TABLE ####### +[connection master] +CREATE TABLE t6 (a varchar(20)) ENGINE=Innodb; +LOAD DATA INFILE 'temp_file' INTO TABLE t6; +ERROR HY000: Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage; increase this mysqld variable and try again +include/assert.inc [assert that the above Event has not been added to binlog] +include/assert.inc [Check that the LOAD DATA didn't add any data into the table] +include/sync_slave_sql_with_master.inc +include/assert.inc [Check that the LOAD DATA didn't add any data into the table] +[connection master] +DROP TABLE t6; +include/sync_slave_sql_with_master.inc +######### 9 - Bug#55375(Regression Bug) Transaction bigger than ########## ######### max_binlog_cache_size crashes slave ########## # [ On Slave ] SET GLOBAL max_binlog_cache_size = 4096; diff --git a/mysql-test/suite/rpl/r/rpl_row_binlog_max_cache_size.result b/mysql-test/suite/rpl/r/rpl_row_binlog_max_cache_size.result index 670350f13220..ecd7d589c13c 100644 --- a/mysql-test/suite/rpl/r/rpl_row_binlog_max_cache_size.result +++ b/mysql-test/suite/rpl/r/rpl_row_binlog_max_cache_size.result @@ -112,7 +112,19 @@ BEGIN; Got one of the listed errors COMMIT; include/diff_tables.inc [master:t1,slave:t1] -######### 8 - Bug#55375(Regression Bug) Transaction bigger than ########## +####### 8 - LOAD DATA INFILE INTO TABLE ####### +[connection master] +CREATE TABLE t6 (a varchar(20)) ENGINE=Innodb; +LOAD DATA INFILE 'temp_file' INTO TABLE t6; +ERROR HY000: Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage; increase this mysqld variable and try again +include/assert.inc [assert that the above Event has not been added to binlog] +include/assert.inc [Check that the LOAD DATA didn't add any data into the table] +include/sync_slave_sql_with_master.inc +include/assert.inc [Check that the LOAD DATA didn't add any data into the table] +[connection master] +DROP TABLE t6; +include/sync_slave_sql_with_master.inc +######### 9 - Bug#55375(Regression Bug) Transaction bigger than ########## ######### max_binlog_cache_size crashes slave ########## # [ On Slave ] SET GLOBAL max_binlog_cache_size = 4096; diff --git a/mysql-test/suite/rpl/r/rpl_stm_binlog_max_cache_size.result b/mysql-test/suite/rpl/r/rpl_stm_binlog_max_cache_size.result index 8bce22630432..0f3719cd57b3 100644 --- a/mysql-test/suite/rpl/r/rpl_stm_binlog_max_cache_size.result +++ b/mysql-test/suite/rpl/r/rpl_stm_binlog_max_cache_size.result @@ -111,7 +111,19 @@ BEGIN; Got one of the listed errors COMMIT; include/diff_tables.inc [master:t1,slave:t1] -######### 8 - Bug#55375(Regression Bug) Transaction bigger than ########## +####### 8 - LOAD DATA INFILE INTO TABLE ####### +[connection master] +CREATE TABLE t6 (a varchar(20)) ENGINE=Innodb; +LOAD DATA INFILE 'temp_file' INTO TABLE t6; +ERROR HY000: Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage; increase this mysqld variable and try again +include/assert.inc [assert that the above Event has not been added to binlog] +include/assert.inc [Check that the LOAD DATA didn't add any data into the table] +include/sync_slave_sql_with_master.inc +include/assert.inc [Check that the LOAD DATA didn't add any data into the table] +[connection master] +DROP TABLE t6; +include/sync_slave_sql_with_master.inc +######### 9 - Bug#55375(Regression Bug) Transaction bigger than ########## ######### max_binlog_cache_size crashes slave ########## # [ On Slave ] SET GLOBAL max_binlog_cache_size = 4096; From e0bf863f5a973c65c7701139b62a536e16c36250 Mon Sep 17 00:00:00 2001 From: Allen Lai Date: Mon, 26 Mar 2018 14:49:53 +0800 Subject: [PATCH 0690/1221] Bug #27713517 GRAMMER: PLEASE CONFIRM THE KEYFILE IS MATCH Fixed grammar and typo in the error messages, and update all related test cases. --- .../suite/innodb/r/table_encrypt_1.result | 8 -------- .../suite/innodb/r/table_encrypt_2.result | 5 ----- .../suite/innodb/r/table_encrypt_3.result | 5 ----- .../suite/innodb/r/table_encrypt_5.result | 16 ---------------- .../suite/innodb/r/table_encrypt_kill.result | 18 ------------------ mysql-test/suite/innodb/t/table_encrypt_1.test | 5 ++++- mysql-test/suite/innodb/t/table_encrypt_2.test | 3 ++- mysql-test/suite/innodb/t/table_encrypt_3.test | 5 +++-- mysql-test/suite/innodb/t/table_encrypt_5.test | 5 +++-- .../suite/innodb/t/table_encrypt_debug.test | 3 +-- .../suite/innodb/t/table_encrypt_kill.test | 9 +++------ storage/innobase/fsp/fsp0file.cc | 9 ++++----- storage/innobase/fsp/fsp0fsp.cc | 6 +++--- 13 files changed, 23 insertions(+), 74 deletions(-) diff --git a/mysql-test/suite/innodb/r/table_encrypt_1.result b/mysql-test/suite/innodb/r/table_encrypt_1.result index 898666d924e4..edd99fb609a6 100644 --- a/mysql-test/suite/innodb/r/table_encrypt_1.result +++ b/mysql-test/suite/innodb/r/table_encrypt_1.result @@ -1,11 +1,3 @@ -call mtr.add_suppression("\\[Error\\] InnoDB: Encryption can't find master key, please check the keyring plugin is loaded."); -call mtr.add_suppression("\\[ERROR\\] InnoDB: Failed to find tablespace for table `\.\.*`\.`\.\.*` in the cache."); -call mtr.add_suppression("\\[ERROR\\] InnoDB: Operating system error number 2 in a file operation."); -call mtr.add_suppression("\\[ERROR\\] InnoDB: The error means the system cannot find the path specified."); -call mtr.add_suppression("\\[ERROR\\] InnoDB: Could not find a valid tablespace file for"); -call mtr.add_suppression("ibd can't be decrypted , please confirm the keyfile is match and keyring plugin is loaded."); -call mtr.add_suppression("\\[Warning\\] InnoDB: Ignoring tablespace .* because it could not be opened"); -call mtr.add_suppression("\\[ERROR\\] InnoDB: If you are installing InnoDB, remember that you must create directories yourself, InnoDB does not create them."); CREATE TABLE t1(c1 INT, c2 char(20)) ENCRYPTION="Y" ENGINE = InnoDB; ERROR HY000: Can't find master key from keyring, please check in the server log if a keyring plugin is loaded and initialized successfully. CREATE TABLE t1(c1 INT, c2 char(20)) ENGINE = InnoDB; diff --git a/mysql-test/suite/innodb/r/table_encrypt_2.result b/mysql-test/suite/innodb/r/table_encrypt_2.result index 05a703f80cf3..ff1b9a73d081 100644 --- a/mysql-test/suite/innodb/r/table_encrypt_2.result +++ b/mysql-test/suite/innodb/r/table_encrypt_2.result @@ -1,8 +1,3 @@ -call mtr.add_suppression("\\[Error\\] InnoDB: Can't generate new master key for tablespace encryption, please check the keyring plugin is loaded."); -call mtr.add_suppression("\\[Error\\] InnoDB: Encryption can't find master key, please check the keyring plugin is loaded."); -call mtr.add_suppression("\\[ERROR\\] Function 'keyring_file' already exists"); -call mtr.add_suppression("\\[ERROR\\] Couldn't load plugin named 'keyring_file' with soname 'keyring_file.*'."); -call mtr.add_suppression("Plugin keyring_file reported"); SET @@global.keyring_file_data="MYSQL_TMP_DIR/keyring"; CREATE TABLE t1(c1 int) ENGINE=InnoDB ENCRYPTION="Y"; DROP TABLE t1; diff --git a/mysql-test/suite/innodb/r/table_encrypt_3.result b/mysql-test/suite/innodb/r/table_encrypt_3.result index 136ed686d13c..be9cc8ff623e 100644 --- a/mysql-test/suite/innodb/r/table_encrypt_3.result +++ b/mysql-test/suite/innodb/r/table_encrypt_3.result @@ -1,8 +1,3 @@ -call mtr.add_suppression("\\[ERROR\\] InnoDB: Encryption can't find master key, please check the keyring plugin is loaded."); -call mtr.add_suppression("Can't generate new master key for tablespace encryption, please check the keyring plugin is loaded."); -call mtr.add_suppression("InnoDB: The error means that another program is using InnoDB's files"); -call mtr.add_suppression("InnoDB: The error means that another program is using InnoDB's files"); -call mtr.add_suppression("\\[ERROR\\] InnoDB: Operating system error number 32 in a file operation."); # Create encrypt table before loading keyring plugin SET GLOBAL innodb_file_per_table = 1; SELECT @@innodb_file_per_table; diff --git a/mysql-test/suite/innodb/r/table_encrypt_5.result b/mysql-test/suite/innodb/r/table_encrypt_5.result index d03c03271b3b..c9e251cfa9ae 100644 --- a/mysql-test/suite/innodb/r/table_encrypt_5.result +++ b/mysql-test/suite/innodb/r/table_encrypt_5.result @@ -1,19 +1,3 @@ -call mtr.add_suppression("\\[ERROR\\] InnoDB: Encryption can't find master key, please check the keyring plugin is loaded."); -call mtr.add_suppression("ibd can't be decrypted , please confirm the keyfile is match and keyring plugin is loaded"); -call mtr.add_suppression("Can't generate new master key for tablespace encryption, please check the keyring plugin is loaded."); -call mtr.add_suppression("InnoDB: Operating system error number"); -call mtr.add_suppression("The error means the system cannot find the path specified"); -call mtr.add_suppression("InnoDB: If you are installing InnoDB, remember that you must create directories yourself, InnoDB does not create them"); -call mtr.add_suppression("Could not find a valid tablespace file"); -call mtr.add_suppression("InnoDB: Ignoring tablespace"); -call mtr.add_suppression("InnoDB: Failed to find tablespace for table"); -call mtr.add_suppression("InnoDB: Cannot open table tde_db/t_encrypt.* from the internal data dictionary of InnoDB though the .frm file for the table exists"); -call mtr.add_suppression("\\[ERROR\\] InnoDB: Table tde_db/t_encrypt.* in the InnoDB data dictionary has tablespace id .*, but tablespace with that id or name does not exist"); -call mtr.add_suppression("\\[Warning\\] InnoDB: Please refer to .* for how to resolve the issue"); -call mtr.add_suppression("Error while loading keyring content. The keyring might be malformed"); -call mtr.add_suppression("\\[ERROR\\] Plugin keyring_file reported: 'Could not create keyring directory"); -call mtr.add_suppression("\\[ERROR\\] Plugin keyring_file reported: 'keyring_file initialization failure."); -call mtr.add_suppression("\\[ERROR\\] Plugin keyring_file reported: 'File .*keyring' not found .*"); # Starting server with keyring plugin # restart: --early-plugin-load=keyring_file=keyring_file.so --loose-keyring_file_data=MYSQL_TMP_DIR/mysecret_keyring --plugin-dir=KEYRING_PLUGIN_PATH DROP DATABASE IF EXISTS tde_db; diff --git a/mysql-test/suite/innodb/r/table_encrypt_kill.result b/mysql-test/suite/innodb/r/table_encrypt_kill.result index 965f46973487..5d69ec6fbd30 100644 --- a/mysql-test/suite/innodb/r/table_encrypt_kill.result +++ b/mysql-test/suite/innodb/r/table_encrypt_kill.result @@ -1,21 +1,3 @@ -call mtr.add_suppression("\\[ERROR\\] InnoDB: Encryption can't find master key, please check the keyring plugin is loaded."); -call mtr.add_suppression("ibd can't be decrypted , please confirm the keyfile is match and keyring plugin is loaded"); -call mtr.add_suppression("Can't generate new master key for tablespace encryption, please check the keyring plugin is loaded."); -call mtr.add_suppression("does not exist in the InnoDB internal data dictionary though MySQL is trying to drop it"); -call mtr.add_suppression("\\[ERROR\\] InnoDB: Encryption can't find master key, please check the keyring plugin is loaded."); -call mtr.add_suppression("ibd can't be decrypted , please confirm the keyfile is match and keyring plugin is loaded"); -call mtr.add_suppression("Can't generate new master key for tablespace encryption, please check the keyring plugin is loaded."); -call mtr.add_suppression("InnoDB: Operating system error number"); -call mtr.add_suppression("The error means the system cannot find the path specified"); -call mtr.add_suppression("InnoDB: If you are installing InnoDB, remember that you must create directories yourself, InnoDB does not create them"); -call mtr.add_suppression("Could not find a valid tablespace file"); -call mtr.add_suppression("InnoDB: Ignoring tablespace"); -call mtr.add_suppression("InnoDB: Failed to find tablespace for table"); -call mtr.add_suppression("InnoDB: Cannot open table tde_db/t_encrypt.* from the internal data dictionary of InnoDB though the .frm file for the table exists"); -call mtr.add_suppression("\\[ERROR\\] InnoDB: Table tde_db/t_encrypt.* in the InnoDB data dictionary has tablespace id .*, but tablespace with that id or name does not exist"); -call mtr.add_suppression("\\[Warning\\] InnoDB: Please refer to .* for how to resolve the issue"); -call mtr.add_suppression("Cannot create keyring directory"); -call mtr.add_suppression("\\[ERROR\\] Plugin keyring_file reported: 'Could not create keyring directory"); # Starting server with keyring plugin # restart: --early-plugin-load=keyring_file=keyring_file.so --loose-keyring_file_data=MYSQL_TMP_DIR/mysecret_keyring --plugin-dir=KEYRING_PLUGIN_PATH DROP DATABASE IF EXISTS tde_db; diff --git a/mysql-test/suite/innodb/t/table_encrypt_1.test b/mysql-test/suite/innodb/t/table_encrypt_1.test index c7f36a36b792..966802ca9a00 100644 --- a/mysql-test/suite/innodb/t/table_encrypt_1.test +++ b/mysql-test/suite/innodb/t/table_encrypt_1.test @@ -10,14 +10,17 @@ # Create a table with encryption, should fail since keyring is not # loaded +--disable_query_log call mtr.add_suppression("\\[Error\\] InnoDB: Encryption can't find master key, please check the keyring plugin is loaded."); call mtr.add_suppression("\\[ERROR\\] InnoDB: Failed to find tablespace for table `\.\.*`\.`\.\.*` in the cache."); call mtr.add_suppression("\\[ERROR\\] InnoDB: Operating system error number 2 in a file operation."); call mtr.add_suppression("\\[ERROR\\] InnoDB: The error means the system cannot find the path specified."); call mtr.add_suppression("\\[ERROR\\] InnoDB: Could not find a valid tablespace file for"); -call mtr.add_suppression("ibd can't be decrypted , please confirm the keyfile is match and keyring plugin is loaded."); +call mtr.add_suppression("ibd can't be decrypted"); call mtr.add_suppression("\\[Warning\\] InnoDB: Ignoring tablespace .* because it could not be opened"); call mtr.add_suppression("\\[ERROR\\] InnoDB: If you are installing InnoDB, remember that you must create directories yourself, InnoDB does not create them."); +--enable_query_log + --error ER_CANNOT_FIND_KEY_IN_KEYRING CREATE TABLE t1(c1 INT, c2 char(20)) ENCRYPTION="Y" ENGINE = InnoDB; diff --git a/mysql-test/suite/innodb/t/table_encrypt_2.test b/mysql-test/suite/innodb/t/table_encrypt_2.test index d7233555147b..9404df7c963d 100644 --- a/mysql-test/suite/innodb/t/table_encrypt_2.test +++ b/mysql-test/suite/innodb/t/table_encrypt_2.test @@ -5,11 +5,12 @@ --source include/have_innodb.inc --source include/not_embedded.inc -call mtr.add_suppression("\\[Error\\] InnoDB: Can't generate new master key for tablespace encryption, please check the keyring plugin is loaded."); +--disable_query_log call mtr.add_suppression("\\[Error\\] InnoDB: Encryption can't find master key, please check the keyring plugin is loaded."); call mtr.add_suppression("\\[ERROR\\] Function 'keyring_file' already exists"); call mtr.add_suppression("\\[ERROR\\] Couldn't load plugin named 'keyring_file' with soname 'keyring_file.*'."); call mtr.add_suppression("Plugin keyring_file reported"); +--enable_query_log --replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR eval SET @@global.keyring_file_data="$MYSQL_TMP_DIR/keyring"; diff --git a/mysql-test/suite/innodb/t/table_encrypt_3.test b/mysql-test/suite/innodb/t/table_encrypt_3.test index b7664910e2d7..d56c564a5817 100644 --- a/mysql-test/suite/innodb/t/table_encrypt_3.test +++ b/mysql-test/suite/innodb/t/table_encrypt_3.test @@ -6,11 +6,12 @@ --source include/not_embedded.inc --source include/have_innodb_max_16k.inc +--disable_query_log call mtr.add_suppression("\\[ERROR\\] InnoDB: Encryption can't find master key, please check the keyring plugin is loaded."); -call mtr.add_suppression("Can't generate new master key for tablespace encryption, please check the keyring plugin is loaded."); -call mtr.add_suppression("InnoDB: The error means that another program is using InnoDB's files"); call mtr.add_suppression("InnoDB: The error means that another program is using InnoDB's files"); call mtr.add_suppression("\\[ERROR\\] InnoDB: Operating system error number 32 in a file operation."); +--enable_query_log + let $innodb_file_per_table = `SELECT @@innodb_file_per_table`; #------------------------------------------------------------------------------ diff --git a/mysql-test/suite/innodb/t/table_encrypt_5.test b/mysql-test/suite/innodb/t/table_encrypt_5.test index 425c9eaccd59..457982d248ac 100644 --- a/mysql-test/suite/innodb/t/table_encrypt_5.test +++ b/mysql-test/suite/innodb/t/table_encrypt_5.test @@ -18,9 +18,9 @@ --source include/not_embedded.inc # Suppress warnings +--disable_query_log call mtr.add_suppression("\\[ERROR\\] InnoDB: Encryption can't find master key, please check the keyring plugin is loaded."); -call mtr.add_suppression("ibd can't be decrypted , please confirm the keyfile is match and keyring plugin is loaded"); -call mtr.add_suppression("Can't generate new master key for tablespace encryption, please check the keyring plugin is loaded."); +call mtr.add_suppression("ibd can't be decrypted"); call mtr.add_suppression("InnoDB: Operating system error number"); call mtr.add_suppression("The error means the system cannot find the path specified"); call mtr.add_suppression("InnoDB: If you are installing InnoDB, remember that you must create directories yourself, InnoDB does not create them"); @@ -34,6 +34,7 @@ call mtr.add_suppression("Error while loading keyring content. The keyring might call mtr.add_suppression("\\[ERROR\\] Plugin keyring_file reported: 'Could not create keyring directory"); call mtr.add_suppression("\\[ERROR\\] Plugin keyring_file reported: 'keyring_file initialization failure."); call mtr.add_suppression("\\[ERROR\\] Plugin keyring_file reported: 'File .*keyring' not found .*"); +--enable_query_log let $innodb_file_per_table = `SELECT @@innodb_file_per_table`; diff --git a/mysql-test/suite/innodb/t/table_encrypt_debug.test b/mysql-test/suite/innodb/t/table_encrypt_debug.test index 2eda1fea3723..9574cc13e2e5 100644 --- a/mysql-test/suite/innodb/t/table_encrypt_debug.test +++ b/mysql-test/suite/innodb/t/table_encrypt_debug.test @@ -19,8 +19,7 @@ --disable_query_log call mtr.add_suppression("\\[ERROR\\] InnoDB: Encryption can't find master key, please check the keyring plugin is loaded."); -call mtr.add_suppression("ibd can't be decrypted , please confirm the keyfile is match and keyring plugin is loaded"); -call mtr.add_suppression("Can't generate new master key for tablespace encryption, please check the keyring plugin is loaded."); +call mtr.add_suppression("ibd can't be decrypted"); call mtr.add_suppression("does not exist in the InnoDB internal data dictionary though MySQL is trying to drop it"); call mtr.add_suppression("Cannot open table tde_db/.* from the internal data dictionary of InnoDB"); call mtr.add_suppression("\\[Warning\\] InnoDB: Tablespace for table `tde_db`.`t1` is set as discarded"); diff --git a/mysql-test/suite/innodb/t/table_encrypt_kill.test b/mysql-test/suite/innodb/t/table_encrypt_kill.test index 4c18057ceb1f..11699f865013 100644 --- a/mysql-test/suite/innodb/t/table_encrypt_kill.test +++ b/mysql-test/suite/innodb/t/table_encrypt_kill.test @@ -15,14 +15,10 @@ --source include/not_crashrep.inc #suppress warning +--disable_query_log call mtr.add_suppression("\\[ERROR\\] InnoDB: Encryption can't find master key, please check the keyring plugin is loaded."); -call mtr.add_suppression("ibd can't be decrypted , please confirm the keyfile is match and keyring plugin is loaded"); -call mtr.add_suppression("Can't generate new master key for tablespace encryption, please check the keyring plugin is loaded."); +call mtr.add_suppression("ibd can't be decrypted"); call mtr.add_suppression("does not exist in the InnoDB internal data dictionary though MySQL is trying to drop it"); - -call mtr.add_suppression("\\[ERROR\\] InnoDB: Encryption can't find master key, please check the keyring plugin is loaded."); -call mtr.add_suppression("ibd can't be decrypted , please confirm the keyfile is match and keyring plugin is loaded"); -call mtr.add_suppression("Can't generate new master key for tablespace encryption, please check the keyring plugin is loaded."); call mtr.add_suppression("InnoDB: Operating system error number"); call mtr.add_suppression("The error means the system cannot find the path specified"); call mtr.add_suppression("InnoDB: If you are installing InnoDB, remember that you must create directories yourself, InnoDB does not create them"); @@ -34,6 +30,7 @@ call mtr.add_suppression("\\[ERROR\\] InnoDB: Table tde_db/t_encrypt.* in the In call mtr.add_suppression("\\[Warning\\] InnoDB: Please refer to .* for how to resolve the issue"); call mtr.add_suppression("Cannot create keyring directory"); call mtr.add_suppression("\\[ERROR\\] Plugin keyring_file reported: 'Could not create keyring directory"); +--enable_query_log diff --git a/storage/innobase/fsp/fsp0file.cc b/storage/innobase/fsp/fsp0file.cc index 59db3224fb80..5283869cff76 100644 --- a/storage/innobase/fsp/fsp0file.cc +++ b/storage/innobase/fsp/fsp0file.cc @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2013, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2013, 2018, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -647,10 +647,9 @@ Datafile::validate_first_page(lsn_t* flush_lsn, ib::error() << "Encryption information in" << " datafile: " << m_filepath - << " can't be decrypted" - << " , please confirm the keyfile" - << " is match and keyring plugin" - << " is loaded."; + << " can't be decrypted," + << " please check if a keyring plugin" + << " is loaded and initialized successfully."; m_is_valid = false; free_first_page(); diff --git a/storage/innobase/fsp/fsp0fsp.cc b/storage/innobase/fsp/fsp0fsp.cc index ba45c016e605..1f90ccc5e432 100644 --- a/storage/innobase/fsp/fsp0fsp.cc +++ b/storage/innobase/fsp/fsp0fsp.cc @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1995, 2017, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1995, 2018, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -1282,8 +1282,8 @@ fsp_header_decode_encryption_info( crc1 = mach_read_from_4(ptr); crc2 = ut_crc32(key_info, ENCRYPTION_KEY_LEN * 2); if (crc1 != crc2) { - ib::error() << "Failed to decrpt encryption information," - << " please check key file is not changed!"; + ib::error() << "Failed to decrypt encryption information," + << " please confirm the master key was not changed."; my_free(master_key); return(false); } From 078fc08a7fcf61636f59a5735d7ac8f67232d3c7 Mon Sep 17 00:00:00 2001 From: Bin Su Date: Mon, 26 Mar 2018 14:59:42 +0800 Subject: [PATCH 0691/1221] BUG#27211287 - MYSQL SCALABILITY IMPROVEMENT PATCH: OPTIMIZED AWAY EXCESSIVE CONDITION trx_set_rw_mode() currently has an invalid checking for trx->read_only which has been already checked by the caller. And from customer's testing, this can give scalability improvement in OLTP index updates benchmark. RB: 19234 Reviewed-by: Sunny Bains --- storage/innobase/trx/trx0trx.cc | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/storage/innobase/trx/trx0trx.cc b/storage/innobase/trx/trx0trx.cc index 4123b2d3cf1a..9f102cae8100 100644 --- a/storage/innobase/trx/trx0trx.cc +++ b/storage/innobase/trx/trx0trx.cc @@ -3201,6 +3201,7 @@ trx_set_rw_mode( ut_ad(trx->rsegs.m_redo.rseg == 0); ut_ad(!trx->in_rw_trx_list); ut_ad(!trx_is_autocommit_non_locking(trx)); + ut_ad(!trx->read_only); if (srv_force_recovery >= SRV_FORCE_NO_TRX_UNDO) { return; @@ -3240,11 +3241,9 @@ trx_set_rw_mode( } #endif /* UNIV_DEBUG */ - if (!trx->read_only) { - UT_LIST_ADD_FIRST(trx_sys->rw_trx_list, trx); + UT_LIST_ADD_FIRST(trx_sys->rw_trx_list, trx); - ut_d(trx->in_rw_trx_list = true); - } + ut_d(trx->in_rw_trx_list = true); mutex_exit(&trx_sys->mutex); } From 2c950c3ca2bf890549825417c10dd3065b78befc Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Mon, 26 Mar 2018 11:14:11 +0200 Subject: [PATCH 0692/1221] PS-3925: Use strncmp instead of memcmp in log_in_use --- sql/sql_repl.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/sql_repl.cc b/sql/sql_repl.cc index ce73e24cd628..e4c101cdfe1b 100644 --- a/sql/sql_repl.cc +++ b/sql/sql_repl.cc @@ -261,7 +261,7 @@ bool log_in_use(const char* log_name) if ((linfo = tmp->current_linfo)) { mysql_mutex_lock(&linfo->lock); - result = !memcmp(log_name, linfo->log_file_name, log_name_len); + result = !strncmp(log_name, linfo->log_file_name, log_name_len); mysql_mutex_unlock(&linfo->lock); if (result) break; From 2fb17005e0d4b5d3c3c53d817e2be1c899a94e59 Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Mon, 26 Mar 2018 11:14:11 +0200 Subject: [PATCH 0693/1221] PS-3925: Use strncmp instead of memcmp in log_in_use (cherry picked from commit 2c950c3ca2bf890549825417c10dd3065b78befc) --- sql/binlog.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/binlog.cc b/sql/binlog.cc index 29b6f27b710d..83fc43f51da2 100644 --- a/sql/binlog.cc +++ b/sql/binlog.cc @@ -2022,7 +2022,7 @@ static int log_in_use(const char* log_name) if ((linfo = (*it)->current_linfo)) { mysql_mutex_lock(&linfo->lock); - if(!memcmp(log_name, linfo->log_file_name, log_name_len)) + if(!strncmp(log_name, linfo->log_file_name, log_name_len)) { thread_count++; sql_print_warning("file %s was not purged because it was being read" From a4c3f7e3be2246ce3a8e706e1257fd8b9c722691 Mon Sep 17 00:00:00 2001 From: Evgeniy Patlan Date: Mon, 26 Mar 2018 12:34:53 +0300 Subject: [PATCH 0694/1221] [BLD-1019] Replace Launchpad references with JIRA --- README | 4 +++- build-ps/debian/copyright | 2 +- scripts/mysql_install_db.pl.in | 4 ++-- scripts/mysql_install_db.sh | 4 ++-- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/README b/README index 31a8d2f6caa5..3bd67fd9b2e3 100644 --- a/README +++ b/README @@ -8,4 +8,6 @@ http://www.percona.com/software/percona-server/ Documentation: http://www.percona.com/doc/percona-server/5.5 -Launchpad (bugs, milestones, branches): http://launchpad.net/percona-server +Bug Tracker: https://jira.percona.com/projects/PS + +Sources: https://github.com/percona/percona-server diff --git a/build-ps/debian/copyright b/build-ps/debian/copyright index 08af244918bc..37aa3ad31e6a 100644 --- a/build-ps/debian/copyright +++ b/build-ps/debian/copyright @@ -1,6 +1,6 @@ Format: http://svn.debian.org/wsvn/dep/web/deps/dep5.mdwn?rev=174 Upstream-Name: Percona Server 5.5 -Upstream-Contact: https://bugs.launchpad.net/percona-server/ +Upstream-Contact: https://jira.percona.com/projects/PS Source: http://www.percona.com/downloads/Percona-Server-5.5/ Comments: Modified from original MySQL 5.5 debian/copyright file by Stewart Smith and updated for Percona Server. diff --git a/scripts/mysql_install_db.pl.in b/scripts/mysql_install_db.pl.in index 88b4f3685d7a..e743fdc9d04f 100755 --- a/scripts/mysql_install_db.pl.in +++ b/scripts/mysql_install_db.pl.in @@ -564,7 +564,7 @@ if ( open(PIPE, "| $mysqld_install_cmd_line") ) } report($opt, "Please report any problems at", - " https://bugs.launchpad.net/percona-server/+filebug", + " https://jira.percona.com/projects/PS", "", "The latest information about Percona Server is available on the web at", " http://www.percona.com/software/percona-server", @@ -600,7 +600,7 @@ else "Another information source is the MySQL email archive.", "", "Please check all of the above before submitting a bug report at", - " https://bugs.launchpad.net/percona-server/+filebug") + " https://jira.percona.com/projects/PS") } ############################################################################## diff --git a/scripts/mysql_install_db.sh b/scripts/mysql_install_db.sh index df75029e709f..05791d789e5d 100755 --- a/scripts/mysql_install_db.sh +++ b/scripts/mysql_install_db.sh @@ -427,7 +427,7 @@ else echo "MySQL email archives available at http://lists.mysql.com/." echo echo "Please check all of the above before submitting a bug report at" - echo " https://bugs.launchpad.net/percona-server/+filebug" + echo " https://jira.percona.com/projects/PS" echo exit 1 fi @@ -479,7 +479,7 @@ then echo echo "Please report any problems at" - echo " https://bugs.launchpad.net/percona-server/+filebug" + echo " https://jira.percona.com/projects/PS" echo echo "Percona recommends that all production deployments be protected with a support" echo "contract (http://www.percona.com/mysql-suppport/) to ensure the highest uptime," From b440bcf7ba0522e5369672ed8664067979c5019e Mon Sep 17 00:00:00 2001 From: Evgeniy Patlan Date: Mon, 26 Mar 2018 13:35:56 +0300 Subject: [PATCH 0695/1221] [BLD-1019] Replace Launchpad references with JIRA --- README | 4 +++- build-ps/debian/copyright | 2 +- scripts/mysql_install_db.pl.in | 4 ++-- scripts/mysql_install_db.sh | 4 ++-- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/README b/README index 47cb2c75c199..fb09fe718a72 100644 --- a/README +++ b/README @@ -8,4 +8,6 @@ http://www.percona.com/software/percona-server/ Documentation: http://www.percona.com/doc/percona-server/5.6 -Launchpad (bugs, milestones, branches): http://launchpad.net/percona-server +Bug Tracker: https://jira.percona.com/projects/PS + +Sources: https://github.com/percona/percona-server diff --git a/build-ps/debian/copyright b/build-ps/debian/copyright index 20c958430b76..cd988fc518c1 100644 --- a/build-ps/debian/copyright +++ b/build-ps/debian/copyright @@ -1,6 +1,6 @@ Format: http://svn.debian.org/wsvn/dep/web/deps/dep5.mdwn?rev=174 Upstream-Name: Percona Server 5.6 -Upstream-Contact: https://bugs.launchpad.net/percona-server/ +Upstream-Contact: https://jira.percona.com/projects/PS Source: http://www.percona.com/downloads/Percona-Server-5.6/ Comments: Modified from original MySQL 5.5 debian/copyright file by Stewart Smith and updated for Percona Server. diff --git a/scripts/mysql_install_db.pl.in b/scripts/mysql_install_db.pl.in index bda14b4a4ab6..b235c683f9a1 100644 --- a/scripts/mysql_install_db.pl.in +++ b/scripts/mysql_install_db.pl.in @@ -906,7 +906,7 @@ if ( open(PIPE, "| $mysqld_install_cmd_line") ) } report($opt, "Please report any problems at", - " https://bugs.launchpad.net/percona-server/+filebug", + " https://jira.percona.com/projects/PS", "", "The latest information about Percona Server is available on the web at", " http://www.percona.com/software/percona-server", @@ -974,7 +974,7 @@ else "Another information source is the MySQL email archive.", "", "Please check all of the above before submitting a bug report at", - " https://bugs.launchpad.net/percona-server/+filebug") + " https://jira.percona.com/projects/PS") } ############################################################################## diff --git a/scripts/mysql_install_db.sh b/scripts/mysql_install_db.sh index e905e52a1627..d7ddc6881a05 100755 --- a/scripts/mysql_install_db.sh +++ b/scripts/mysql_install_db.sh @@ -427,7 +427,7 @@ else echo "MySQL email archives available at http://lists.mysql.com/." echo echo "Please check all of the above before submitting a bug report at" - echo " https://bugs.launchpad.net/percona-server/+filebug" + echo " https://jira.percona.com/projects/PS" echo exit 1 fi @@ -479,7 +479,7 @@ then echo echo "Please report any problems at" - echo " https://bugs.launchpad.net/percona-server/+filebug" + echo " https://jira.percona.com/projects/PS" echo echo "Percona recommends that all production deployments be protected with a support" echo "contract (http://www.percona.com/mysql-suppport/) to ensure the highest uptime," From 51d07ee9deae93caae64fc82d6eee892335150fa Mon Sep 17 00:00:00 2001 From: Evgeniy Patlan Date: Mon, 26 Mar 2018 13:37:11 +0300 Subject: [PATCH 0696/1221] [BLD-1019] Replace Launchpad references with JIRA --- README | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README b/README index 44df92e50ef5..1b4589dbb799 100644 --- a/README +++ b/README @@ -8,4 +8,6 @@ http://www.percona.com/software/percona-server/ Documentation: http://www.percona.com/doc/percona-server/5.7 -Launchpad (bugs, milestones, branches): http://launchpad.net/percona-server +Bug Tracker: https://jira.percona.com/projects/PS + +Sources: https://github.com/percona/percona-server From 96f907bb235455521a11992675cdf12c9508d822 Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Mon, 26 Mar 2018 11:14:11 +0200 Subject: [PATCH 0697/1221] PS-3925: Use strncmp instead of memcmp in log_in_use (cherry picked from commit 2c950c3ca2bf890549825417c10dd3065b78befc) (cherry picked from commit 2fb17005e0d4b5d3c3c53d817e2be1c899a94e59) --- sql/binlog.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/binlog.cc b/sql/binlog.cc index b17d7b016719..ae00d49d6e79 100644 --- a/sql/binlog.cc +++ b/sql/binlog.cc @@ -2800,7 +2800,7 @@ class Log_in_use : public Do_THD_Impl mysql_mutex_lock(&thd->LOCK_thd_data); if ((linfo = thd->current_linfo)) { - if(!memcmp(m_log_name, linfo->log_file_name, m_log_name_len)) + if(!strncmp(m_log_name, linfo->log_file_name, m_log_name_len)) { sql_print_warning("file %s was not purged because it was being read" "by thread number %u", m_log_name, thd->thread_id()); From 176fde06c5c4840284ab869487dde50c776c8761 Mon Sep 17 00:00:00 2001 From: Marek Szymczak Date: Mon, 26 Mar 2018 14:38:13 +0200 Subject: [PATCH 0698/1221] Bug#27492122 SHUTDOWN HANG WHEN FIREWALL HAS MORE THAN 250K RULES Problem ======= Deletion of 250k elements from the hash takes very long time. Analysis ======== Elements are removed from the hash using its synchronization feature, where this is not required. All elements are removed in two scenarios: - Firewall shutdown - set_firewall_mode UDF is called. Exclusive access is guaranteed by the rwlock: WR_lock lock(&fw_users_lock). Fix === Native destructor hash feature is used, which clears all elements on hash destroy (lf_hash_destroy). Are elements are destroyed within a second. Reviewed-by =========== Kristofer Alvring Georgi Kodinov Marc Alff --- include/lf.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/lf.h b/include/lf.h index d6b73f3f69da..fcb8d437e89d 100644 --- a/include/lf.h +++ b/include/lf.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -149,7 +149,7 @@ typedef void lf_hash_init_func(uchar *dst, const uchar* src); #define LF_HASH_UNIQUE 1 /* lf_hash overhead per element (that is, sizeof(LF_SLIST) */ -extern const int LF_HASH_OVERHEAD; +extern MYSQL_PLUGIN_IMPORT const int LF_HASH_OVERHEAD; typedef struct st_lf_hash { LF_DYNARRAY array; /* hash itself */ From e3a6edd6d921d141b0328045126ecb9482f09729 Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Mon, 26 Mar 2018 16:22:04 +0200 Subject: [PATCH 0699/1221] PS-3926: gcc 7.2 prints warning for storage/innobase/log/log0online.cc Provide real buffer size for snprintf() what fixes a warning from `__builtin___snprintf_chk`. --- storage/innobase/log/log0online.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/storage/innobase/log/log0online.c b/storage/innobase/log/log0online.c index 45739dffa5d3..460cc2a0276d 100644 --- a/storage/innobase/log/log0online.c +++ b/storage/innobase/log/log0online.c @@ -1561,10 +1561,10 @@ log_online_open_bitmap_file_read_only( if (srv_data_home_len && srv_data_home[srv_data_home_len-1] != SRV_PATH_SEPARATOR) { - ut_snprintf(bitmap_file->name, FN_REFLEN, "%s%c%s", + ut_snprintf(bitmap_file->name, sizeof(bitmap_file->name), "%s%c%s", srv_data_home, SRV_PATH_SEPARATOR, name); } else { - ut_snprintf(bitmap_file->name, FN_REFLEN, "%s%s", + ut_snprintf(bitmap_file->name, sizeof(bitmap_file->name), "%s%s", srv_data_home, name); } bitmap_file->file From 2da41a58c2e03aa1f6f77c1d23dfd5d8cad4976f Mon Sep 17 00:00:00 2001 From: Guilhem Bichot Date: Tue, 27 Mar 2018 18:23:57 +0200 Subject: [PATCH 0700/1221] If column is of a binary type (binary(n), blob, geometry...) and --hex-blob isn't used, mysqldump produces INSERT VALUES('cryptic chars'); and when this dump is later used for restoring, the string is treated as utf8 (per the "SET NAMES utf8" in the dump) and Server warns if the chars are not utf8 (after the fix for Bug#20238729); but this warning is wrong, as data isn't meant to be utf8. It scares users when they restore data (fortunately the data is properly inserted). Fix: make mysqldump declare that it's not meant to be utf8: add "_binary" in front of the string in the dump. Also fixing mysqlPump which had same bug. --- client/dump/sql_formatter.cc | 13 +++-- client/mysqldump.c | 20 ++++++- mysql-test/r/mysqldump-binary.result | 87 ++++++++++++++++++++++++++++ mysql-test/r/mysqldump.result | 2 +- mysql-test/t/mysqldump-binary.test | 74 +++++++++++++++++++++++ 5 files changed, 186 insertions(+), 10 deletions(-) create mode 100644 mysql-test/r/mysqldump-binary.result create mode 100644 mysql-test/t/mysqldump-binary.test diff --git a/client/dump/sql_formatter.cc b/client/dump/sql_formatter.cc index c13698bf261b..ba8f5584403d 100644 --- a/client/dump/sql_formatter.cc +++ b/client/dump/sql_formatter.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2015, 2017 Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2015, 2018 Oracle and/or its affiliates. All rights reserved. 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 @@ -90,13 +90,12 @@ void Sql_formatter::format_row_group(Row_group_dump_task* row_group) CHARSET_INFO* charset_info= this->get_charset(); - std::vector is_blob_to_hex; + std::vector is_blob; for (std::vector::const_iterator it= row_group->m_fields.begin(); it != row_group->m_fields.end(); ++it) { - is_blob_to_hex.push_back( - m_options->m_hex_blob - && it->get_character_set_nr() == my_charset_bin.number + is_blob.push_back( + it->get_character_set_nr() == my_charset_bin.number && (it->get_type() == MYSQL_TYPE_BIT || it->get_type() == MYSQL_TYPE_STRING || it->get_type() == MYSQL_TYPE_VAR_STRING @@ -150,7 +149,7 @@ void Sql_formatter::format_row_group(Row_group_dump_task* row_group) else row_string.append(column_data, column_length); } - else if (is_blob_to_hex[column]) + else if (m_options->m_hex_blob && is_blob[column]) { row_string+= "0x"; m_escaping_runner->append_hex_string( @@ -158,6 +157,8 @@ void Sql_formatter::format_row_group(Row_group_dump_task* row_group) } else { + if (is_blob[column]) + row_string += "_binary "; row_string+= '\"'; m_escaping_runner->append_escape_string( &row_string, column_data, column_length); diff --git a/client/mysqldump.c b/client/mysqldump.c index 3d8aeaca3637..ef77a38e0f99 100644 --- a/client/mysqldump.c +++ b/client/mysqldump.c @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -3874,9 +3874,8 @@ static void dump_table(char *table, char *db) /* 63 is my_charset_bin. If charsetnr is not 63, we have not a BLOB but a TEXT column. - we'll dump in hex only BLOB columns. */ - is_blob= (opt_hex_blob && field->charsetnr == 63 && + is_blob= (field->charsetnr == 63 && (field->type == MYSQL_TYPE_BIT || field->type == MYSQL_TYPE_STRING || field->type == MYSQL_TYPE_VAR_STRING || @@ -3920,6 +3919,14 @@ static void dump_table(char *table, char *db) } else { + if (is_blob) + { + /* + inform SQL parser that this string isn't in + character_set_connection, so it doesn't emit a warning. + */ + dynstr_append_checked(&extended_row, "_binary "); + } dynstr_append_checked(&extended_row,"'"); extended_row.length += mysql_real_escape_string_quote(&mysql_connection, @@ -3991,7 +3998,14 @@ static void dump_table(char *table, char *db) print_blob_as_hex(md_result_file, row[i], length); } else + { + if (is_blob) + { + fputs("_binary ", md_result_file); + check_io(md_result_file); + } unescape(md_result_file, row[i], length); + } } else { diff --git a/mysql-test/r/mysqldump-binary.result b/mysql-test/r/mysqldump-binary.result new file mode 100644 index 000000000000..01724ccfee96 --- /dev/null +++ b/mysql-test/r/mysqldump-binary.result @@ -0,0 +1,87 @@ +# Bug#22601255 Restoring a dump of binary column, made with mysqldump, warns of invalid string +CREATE TABLE t1( +u CHAR(10), +b BINARY(16), +blo BLOB, +g GEOMETRY, +bi BIT(64)); +INSERT INTO t1 VALUES( +'basic', +x'EE0C6D03C34C11E5B1640026B977EB17', +x'EE0C6D03C34C11E5B1640026B977EB17', +ST_GeomFromText('POINT(1 1)'), +x'EE0C6D03C34C11E5'); +SELECT +u='basic', +HEX(b)='EE0C6D03C34C11E5B1640026B977EB17', +HEX(blo)='EE0C6D03C34C11E5B1640026B977EB17', +HEX(g)='000000000101000000000000000000F03F000000000000F03F', +HEX(bi)='EE0C6D03C34C11E5', +ST_AsText(g) FROM t1; +u='basic' HEX(b)='EE0C6D03C34C11E5B1640026B977EB17' HEX(blo)='EE0C6D03C34C11E5B1640026B977EB17' HEX(g)='000000000101000000000000000000F03F000000000000F03F' HEX(bi)='EE0C6D03C34C11E5' ST_AsText(g) +1 1 1 1 1 POINT(1 1) +DROP TABLE t1; +Warning (Code 3090): Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +Warning (Code 3090): Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `u` char(10) DEFAULT NULL, + `b` binary(16) DEFAULT NULL, + `blo` blob, + `g` geometry DEFAULT NULL, + `bi` bit(64) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +SELECT +u='basic', +HEX(b)='EE0C6D03C34C11E5B1640026B977EB17', +HEX(blo)='EE0C6D03C34C11E5B1640026B977EB17', +HEX(g)='000000000101000000000000000000F03F000000000000F03F', +HEX(bi)='EE0C6D03C34C11E5', +ST_AsText(g) FROM t1; +u='basic' HEX(b)='EE0C6D03C34C11E5B1640026B977EB17' HEX(blo)='EE0C6D03C34C11E5B1640026B977EB17' HEX(g)='000000000101000000000000000000F03F000000000000F03F' HEX(bi)='EE0C6D03C34C11E5' ST_AsText(g) +1 1 1 1 1 POINT(1 1) +DROP TABLE t1; +Warning (Code 3090): Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +Warning (Code 3090): Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `u` char(10) DEFAULT NULL, + `b` binary(16) DEFAULT NULL, + `blo` blob, + `g` geometry DEFAULT NULL, + `bi` bit(64) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +SELECT +u='basic', +HEX(b)='EE0C6D03C34C11E5B1640026B977EB17', +HEX(blo)='EE0C6D03C34C11E5B1640026B977EB17', +HEX(g)='000000000101000000000000000000F03F000000000000F03F', +HEX(bi)='EE0C6D03C34C11E5', +ST_AsText(g) FROM t1; +u='basic' HEX(b)='EE0C6D03C34C11E5B1640026B977EB17' HEX(blo)='EE0C6D03C34C11E5B1640026B977EB17' HEX(g)='000000000101000000000000000000F03F000000000000F03F' HEX(bi)='EE0C6D03C34C11E5' ST_AsText(g) +1 1 1 1 1 POINT(1 1) +DROP TABLE t1; +Warning (Code 3090): Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +Note (Code 1007): Can't create database 'test'; database exists +Warning (Code 3090): Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `u` char(10) DEFAULT NULL, + `b` binary(16) DEFAULT NULL, + `blo` blob, + `g` geometry DEFAULT NULL, + `bi` bit(64) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +SELECT +u='basic', +HEX(b)='EE0C6D03C34C11E5B1640026B977EB17', +HEX(blo)='EE0C6D03C34C11E5B1640026B977EB17', +HEX(g)='000000000101000000000000000000F03F000000000000F03F', +HEX(bi)='EE0C6D03C34C11E5', +ST_AsText(g) FROM t1; +u='basic' HEX(b)='EE0C6D03C34C11E5B1640026B977EB17' HEX(blo)='EE0C6D03C34C11E5B1640026B977EB17' HEX(g)='000000000101000000000000000000F03F000000000000F03F' HEX(bi)='EE0C6D03C34C11E5' ST_AsText(g) +1 1 1 1 1 POINT(1 1) +DROP TABLE t1; diff --git a/mysql-test/r/mysqldump.result b/mysql-test/r/mysqldump.result index 875f48e4e1ab..281e3d8330c5 100644 --- a/mysql-test/r/mysqldump.result +++ b/mysql-test/r/mysqldump.result @@ -3168,7 +3168,7 @@ CREATE TABLE `t1` ( LOCK TABLES `t1` WRITE; /*!40000 ALTER TABLE `t1` DISABLE KEYS */; -INSERT INTO `t1` VALUES (0x00,''); +INSERT INTO `t1` VALUES (0x00,_binary ''); /*!40000 ALTER TABLE `t1` ENABLE KEYS */; UNLOCK TABLES; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; diff --git a/mysql-test/t/mysqldump-binary.test b/mysql-test/t/mysqldump-binary.test new file mode 100644 index 000000000000..9ac18f505571 --- /dev/null +++ b/mysql-test/t/mysqldump-binary.test @@ -0,0 +1,74 @@ +--echo # Bug#22601255 Restoring a dump of binary column, made with mysqldump, warns of invalid string + +CREATE TABLE t1( +u CHAR(10), +b BINARY(16), +blo BLOB, +g GEOMETRY, +bi BIT(64)); + +# These bytes are not valid utf8, except for the first column. +INSERT INTO t1 VALUES( +'basic', +x'EE0C6D03C34C11E5B1640026B977EB17', +x'EE0C6D03C34C11E5B1640026B977EB17', +ST_GeomFromText('POINT(1 1)'), +x'EE0C6D03C34C11E5'); + +SELECT +u='basic', +HEX(b)='EE0C6D03C34C11E5B1640026B977EB17', +HEX(blo)='EE0C6D03C34C11E5B1640026B977EB17', +HEX(g)='000000000101000000000000000000F03F000000000000F03F', +HEX(bi)='EE0C6D03C34C11E5', +ST_AsText(g) FROM t1; + +# Before fix you would see +# Warning (Code 1300): Invalid utf8mb4 character string: 'EE0C6D' +# Warning (Code 1300): Invalid utf8mb4 character string: 'F03F00' + +--exec $MYSQL_DUMP --skip-comments test > $MYSQLTEST_VARDIR/tmp/bug22601255.sql +DROP TABLE t1; +--exec $MYSQL --show-warnings test < $MYSQLTEST_VARDIR/tmp/bug22601255.sql + +SHOW CREATE TABLE t1; +SELECT +u='basic', +HEX(b)='EE0C6D03C34C11E5B1640026B977EB17', +HEX(blo)='EE0C6D03C34C11E5B1640026B977EB17', +HEX(g)='000000000101000000000000000000F03F000000000000F03F', +HEX(bi)='EE0C6D03C34C11E5', +ST_AsText(g) FROM t1; + +# non-extended INSERT had same problem; it has different code path + +--exec $MYSQL_DUMP --skip-extended-insert --skip-comments test > $MYSQLTEST_VARDIR/tmp/bug22601255.sql +DROP TABLE t1; +--exec $MYSQL --show-warnings test < $MYSQLTEST_VARDIR/tmp/bug22601255.sql + +SHOW CREATE TABLE t1; +SELECT +u='basic', +HEX(b)='EE0C6D03C34C11E5B1640026B977EB17', +HEX(blo)='EE0C6D03C34C11E5B1640026B977EB17', +HEX(g)='000000000101000000000000000000F03F000000000000F03F', +HEX(bi)='EE0C6D03C34C11E5', +ST_AsText(g) FROM t1; + +# Same test with mysqlPUMP + +--exec $MYSQL_PUMP --include-databases test > $MYSQLTEST_VARDIR/tmp/bug22601255.sql +DROP TABLE t1; +--exec $MYSQL --show-warnings test < $MYSQLTEST_VARDIR/tmp/bug22601255.sql + +SHOW CREATE TABLE t1; +SELECT +u='basic', +HEX(b)='EE0C6D03C34C11E5B1640026B977EB17', +HEX(blo)='EE0C6D03C34C11E5B1640026B977EB17', +HEX(g)='000000000101000000000000000000F03F000000000000F03F', +HEX(bi)='EE0C6D03C34C11E5', +ST_AsText(g) FROM t1; + +DROP TABLE t1; +--remove_file $MYSQLTEST_VARDIR/tmp/bug22601255.sql From 8978960253b75eea838185895b3a02845ddc38de Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Wed, 28 Mar 2018 14:45:34 +0800 Subject: [PATCH 0701/1221] From 56f6d21cad8f2bcfa1163a4b480033f9b29b5b45 Mon Sep 17 00:00:00 2001 From: Guilhem Bichot Date: Wed, 28 Mar 2018 09:41:14 +0200 Subject: [PATCH 0702/1221] Bug #22601255 RESTORING A DUMP OF BINARY COLUMN, MADE WITH MYSQLDUMP, WARNS OF INVALID STRING fix for pb2 failure, introduced by the fix for the said bug yesterday. --- mysql-test/t/mysqldump-binary.test | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mysql-test/t/mysqldump-binary.test b/mysql-test/t/mysqldump-binary.test index 9ac18f505571..c8f04cea7b15 100644 --- a/mysql-test/t/mysqldump-binary.test +++ b/mysql-test/t/mysqldump-binary.test @@ -1,3 +1,6 @@ +# Embedded server doesn't support external clients +--source include/not_embedded.inc + --echo # Bug#22601255 Restoring a dump of binary column, made with mysqldump, warns of invalid string CREATE TABLE t1( From 2b6c6b26c1931f5fe91aa7f08902aaf888f0c67a Mon Sep 17 00:00:00 2001 From: Evgeniy Patlan Date: Wed, 28 Mar 2018 13:29:45 +0300 Subject: [PATCH 0703/1221] [BLD-1021] weird file "null" after initial PS configuration --- scripts/ps_tokudb_admin.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/ps_tokudb_admin.sh b/scripts/ps_tokudb_admin.sh index e5a37cfb2671..1591ec8600f6 100644 --- a/scripts/ps_tokudb_admin.sh +++ b/scripts/ps_tokudb_admin.sh @@ -190,7 +190,7 @@ fi # Check if server is running with jemalloc - if not warn that restart is needed if [ $ENABLE = 1 ]; then printf "Checking if Percona Server is running with jemalloc enabled...\n" - cat /proc/${PID_NUM}/environ >null 2>&1 + cat /proc/${PID_NUM}/environ > /dev/null 2>&1 if [ $? = 0 ]; then grep -qc jemalloc /proc/${PID_NUM}/environ || ldd $(which mysqld) | grep -qc jemalloc JEMALLOC_STATUS=$? @@ -324,7 +324,7 @@ fi # Check if server is running with libHotBackup.so preloaded - if not warn that restart is needed if [ $ENABLE_TOKUBACKUP = 1 ]; then printf "Checking if Percona Server is running with libHotBackup.so preloaded...\n" - cat /proc/${PID_NUM}/environ >null 2>&1 + cat /proc/${PID_NUM}/environ > /dev/null 2>&1 if [ $? = 0 ]; then grep -qc libHotBackup.so /proc/${PID_NUM}/environ LIBHOTBACKUP_STATUS=$? From 21712df634870162277ed5438058f45719b1a448 Mon Sep 17 00:00:00 2001 From: Venkatesh Duggirala Date: Wed, 28 Mar 2018 16:19:01 +0530 Subject: [PATCH 0704/1221] Bug#27368735 BINLOG NAME AND POS ARE WRONG IN GROUP_REPLICATION_APPLIER CHANNEL'S ERROR MSGS Problem: When group_replication_applier channel's applier thread is facing an error, master_log_name and end_log_pos in the error message are incorrect. Analysis: In Group replication, events of a transaction are replicated before they were written in the binlog of the originating node. So the final master_log_name and the end_log_pos of those events are unknown at the time they are getting applied on the replica by group_replication_applier's applier thread. Fix: Now the error messages caused on group_replication_applier channel will not contain binary log name and the binary log position. --- .../tests/mtr/r/gr_applier_error.result | 57 +++++++++++ .../tests/mtr/t/gr_applier_error.test | 94 +++++++++++++++++++ sql/log_event.cc | 54 ++++++++--- sql/rpl_rli_pdb.cc | 58 ++++++++---- 4 files changed, 233 insertions(+), 30 deletions(-) create mode 100644 rapid/plugin/group_replication/tests/mtr/r/gr_applier_error.result create mode 100644 rapid/plugin/group_replication/tests/mtr/t/gr_applier_error.test diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_applier_error.result b/rapid/plugin/group_replication/tests/mtr/r/gr_applier_error.result new file mode 100644 index 000000000000..f0da961e8c43 --- /dev/null +++ b/rapid/plugin/group_replication/tests/mtr/r/gr_applier_error.result @@ -0,0 +1,57 @@ +include/group_replication.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection server1] +# +# Step-1: Initial setup (create table on both servers) +# +[connection server_1] +CREATE TABLE t1(i INT PRIMARY KEY); +include/rpl_sync.inc +# +# Step-2: Insert a tuple on server2 directly without writing +# into binlog. +# +[connection server_2] +SET sql_log_bin=0; +INSERT INTO t1 values (1); +# +# Step-3: Add error suppressions which are required +# for the test to pass. +# +CALL mtr.add_suppression("Could not execute Write_rows event on table test.t1"); +CALL mtr.add_suppression("The applier thread execution was aborted. Unable to process more transactions, this member will now leave the group."); +CALL mtr.add_suppression("Fatal error during execution on the Applier process of Group Replication. The server will now leave the group."); +CALL mtr.add_suppression("The server was automatically set into read only mode after an error was detected."); +CALL mtr.add_suppression("Skipping leave operation: concurrent attempt to leave the group is on-going."); +CALL mtr.add_suppression("The slave coordinator and worker threads are stopped"); +SET sql_log_bin=1; +# +# Step-4: Insert a tuple on server1 +# +[connection server_1] +INSERT INTO t1 VALUES (1); +# +# Step-5: sync will fail because the same tuple exists on server2 +# (insert on server2 at step-2). +# +[connection server_2] +include/gr_wait_for_member_state.inc +# +# Step-6: Grep for the expected error in server log. +# +include/assert_grep.inc [Found the expected error in group_replication_applier channel.] +# +# Step-7: Cleanup (drop table on both servers) +# +[connection server_1] +DROP TABLE t1; +# Step-7.2: Server_2 entered into 'read_only' mode due to the above error. +# Sync the above 'drop table' wont work. +# Reset the slave and 'DROP' the table manually. +[connection server_2] +include/stop_group_replication.inc +RESET SLAVE ALL FOR CHANNEL "group_replication_applier"; +DROP TABLE t1; +include/group_replication_end.inc diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_applier_error.test b/rapid/plugin/group_replication/tests/mtr/t/gr_applier_error.test new file mode 100644 index 000000000000..c7e8a4db2eec --- /dev/null +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_applier_error.test @@ -0,0 +1,94 @@ +############################################################################### +# Bug#27368735 BINLOG NAME AND POS ARE WRONG IN GROUP_REPLICATION_APPLIER +# CHANNEL'S ERROR MSGS +# Problem: When group_replication_applier channel's applier thread is facing +# an error, master_log_name and end_log_pos in the error message +# are incorrect. +# +# Steps to reproduce: +# =================== +# 0) Test require two servers in the group +# 1) Create a table with a primary key on both servers. +# 2) Have a tuple with key '1' on server2. +# 3) Insert the same tuple on server1 and try to sync on server2. +# 4) Sync (applier thread on server2) will fail because of +# the duplicate key error. +# 5) Check that the error says master_log_name and end_log_pos as +# instead of displaying wrong values. +# 6) Cleanup (drop table on both servers) +############################################################################### +--source include/only_mts_slave_parallel_workers.inc +--source ../inc/have_group_replication_plugin.inc +--source ../inc/group_replication.inc + +--echo # +--echo # Step-1: Initial setup (create table on both servers) +--echo # +--let $rpl_connection_name= server_1 +--source include/rpl_connection.inc +CREATE TABLE t1(i INT PRIMARY KEY); +--source include/rpl_sync.inc + +--echo # +--echo # Step-2: Insert a tuple on server2 directly without writing +--echo # into binlog. +--echo # +--let $rpl_connection_name= server_2 +--source include/rpl_connection.inc +SET sql_log_bin=0; +INSERT INTO t1 values (1); + +--echo # +--echo # Step-3: Add error suppressions which are required +--echo # for the test to pass. +--echo # +CALL mtr.add_suppression("Could not execute Write_rows event on table test.t1"); +CALL mtr.add_suppression("The applier thread execution was aborted. Unable to process more transactions, this member will now leave the group."); +CALL mtr.add_suppression("Fatal error during execution on the Applier process of Group Replication. The server will now leave the group."); +CALL mtr.add_suppression("The server was automatically set into read only mode after an error was detected."); +CALL mtr.add_suppression("Skipping leave operation: concurrent attempt to leave the group is on-going."); +CALL mtr.add_suppression("The slave coordinator and worker threads are stopped"); +SET sql_log_bin=1; + +--echo # +--echo # Step-4: Insert a tuple on server1 +--echo # +--let $rpl_connection_name= server_1 +--source include/rpl_connection.inc +INSERT INTO t1 VALUES (1); + +--echo # +--echo # Step-5: sync will fail because the same tuple exists on server2 +--echo # (insert on server2 at step-2). +--echo # +--let $rpl_connection_name= server_2 +--source include/rpl_connection.inc +--let $group_replication_member_state= ERROR +--source ../inc/gr_wait_for_member_state.inc + +--echo # +--echo # Step-6: Grep for the expected error in server log. +--echo # +--let $assert_file= $MYSQLTEST_VARDIR/log/mysqld.2.err +--let $assert_only_after = CURRENT_TEST: group_replication.gr_applier_error +--let $assert_count = 1 +--let $assert_select = failed executing transaction '.*'; Could not execute Write_rows event on table test.t1; Duplicate entry '1' for key 'PRIMARY', Error_code: 1062; handler error HA_ERR_FOUND_DUPP_KEY, Error_code: 1062 +--let $assert_text = Found the expected error in group_replication_applier channel. +--source include/assert_grep.inc + +--echo # +--echo # Step-7: Cleanup (drop table on both servers) +--echo # +--let $rpl_connection_name= server_1 +--source include/rpl_connection.inc +DROP TABLE t1; + +--echo # Step-7.2: Server_2 entered into 'read_only' mode due to the above error. +--echo # Sync the above 'drop table' wont work. +--echo # Reset the slave and 'DROP' the table manually. +--let $rpl_connection_name= server_2 +--source include/rpl_connection.inc +--source include/stop_group_replication.inc +RESET SLAVE ALL FOR CHANNEL "group_replication_applier"; +DROP TABLE t1; +--source ../inc/group_replication_end.inc diff --git a/sql/log_event.cc b/sql/log_event.cc index fe3e500b1937..be042c98283a 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -194,6 +194,8 @@ static void inline slave_rows_error_report(enum loglevel level, int ha_error, const char *log_name, ulong pos) { const char *handler_error= (ha_error ? HA_ERR(ha_error) : NULL); + bool is_group_replication_applier_channel= + channel_map.is_group_replication_channel_name((const_cast(rli))->get_channel(), true); char buff[MAX_SLAVE_ERRMSG], *slider; const char *buff_end= buff + sizeof(buff); size_t len; @@ -209,21 +211,45 @@ static void inline slave_rows_error_report(enum loglevel level, int ha_error, " %s, Error_code: %d;", err->message_text(), err->mysql_errno()); } - - if (ha_error != 0) - rli->report(level, thd->is_error() ? thd->get_stmt_da()->mysql_errno() : - ER_UNKNOWN_ERROR, "Could not execute %s event on table %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, - buff, handler_error == NULL ? "" : handler_error, - log_name, pos); + if (is_group_replication_applier_channel) + { + if (ha_error != 0) + { + rli->report(level, thd->is_error() ? thd->get_stmt_da()->mysql_errno() : + ER_UNKNOWN_ERROR, "Could not execute %s event on table %s.%s;" + "%s handler error %s", + type, table->s->db.str, table->s->table_name.str, + buff, handler_error == NULL ? "" : handler_error); + } + else + { + rli->report(level, thd->is_error() ? thd->get_stmt_da()->mysql_errno() : + ER_UNKNOWN_ERROR, "Could not execute %s event on table %s.%s;" + "%s", type, table->s->db.str, table->s->table_name.str, + buff); + } + } else - rli->report(level, thd->is_error() ? thd->get_stmt_da()->mysql_errno() : - ER_UNKNOWN_ERROR, "Could not execute %s event on table %s.%s;" - "%s the event's master log %s, end_log_pos %lu", - type, table->s->db.str, table->s->table_name.str, - buff, log_name, pos); + { + if (ha_error != 0) + { + rli->report(level, thd->is_error() ? thd->get_stmt_da()->mysql_errno() : + ER_UNKNOWN_ERROR, "Could not execute %s event on table %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, + buff, handler_error == NULL ? "" : handler_error, + log_name, pos); + } + else + { + rli->report(level, thd->is_error() ? thd->get_stmt_da()->mysql_errno() : + ER_UNKNOWN_ERROR, "Could not execute %s event on table %s.%s;" + "%s the event's master log %s, end_log_pos %lu", + type, table->s->db.str, table->s->table_name.str, + buff, log_name, pos); + } + } } static void set_thd_db(THD *thd, const char *db, size_t db_len) diff --git a/sql/rpl_rli_pdb.cc b/sql/rpl_rli_pdb.cc index e6ee6115c5d6..1c6e9f86b4b1 100644 --- a/sql/rpl_rli_pdb.cc +++ b/sql/rpl_rli_pdb.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -18,6 +18,7 @@ #include "log.h" // sql_print_error #include "rpl_slave_commit_order_manager.h" // Commit_order_manager +#include "rpl_msr.h" // for channel_map #include "pfs_file_provider.h" #include "mysql/psi/mysql_file.h" @@ -1629,6 +1630,8 @@ void Slave_worker::do_report(loglevel level, int err_code, const char *msg, char buff_gtid[Gtid::MAX_TEXT_LENGTH + 1]; const char* log_name= const_cast(this)->get_master_log_name(); ulonglong log_pos= const_cast(this)->get_master_log_pos(); + bool is_group_replication_applier_channel= + channel_map.is_group_replication_channel_name(c_rli->get_channel(), true); const Gtid_specification *gtid_next= &info_thd->variables.gtid_next; THD *thd= info_thd; @@ -1638,17 +1641,31 @@ void Slave_worker::do_report(loglevel level, int err_code, const char *msg, thd->get_transaction()->cannot_safely_rollback(Transaction_ctx::SESSION))) { char coordinator_errmsg[MAX_SLAVE_ERRMSG]; - - my_snprintf(coordinator_errmsg, MAX_SLAVE_ERRMSG, - "Coordinator stopped because there were error(s) in the " - "worker(s). " - "The most recent failure being: Worker %u failed executing " - "transaction '%s' at master log %s, end_log_pos %llu. " - "See error log and/or " - "performance_schema.replication_applier_status_by_worker " - "table for " - "more details about this failure or others, if any.", - internal_id, buff_gtid, log_name, log_pos); + if (is_group_replication_applier_channel) + { + my_snprintf(coordinator_errmsg, MAX_SLAVE_ERRMSG, + "Coordinator stopped because there were error(s) in the " + "worker(s). " + "The most recent failure being: Worker %u failed executing " + "transaction '%s'. See error log and/or " + "performance_schema.replication_applier_status_by_worker " + "table for " + "more details about this failure or others, if any.", + internal_id, buff_gtid); + } + else + { + my_snprintf(coordinator_errmsg, MAX_SLAVE_ERRMSG, + "Coordinator stopped because there were error(s) in the " + "worker(s). " + "The most recent failure being: Worker %u failed executing " + "transaction '%s' at master log %s, end_log_pos %llu. " + "See error log and/or " + "performance_schema.replication_applier_status_by_worker " + "table for " + "more details about this failure or others, if any.", + internal_id, buff_gtid, log_name, log_pos); + } /* We want to update the errors in coordinator as well as worker. @@ -1661,10 +1678,19 @@ void Slave_worker::do_report(loglevel level, int err_code, const char *msg, c_rli->fill_coord_err_buf(level, err_code, coordinator_errmsg); } - my_snprintf(buff_coord, sizeof(buff_coord), - "Worker %u failed executing transaction '%s' at " - "master log %s, end_log_pos %llu", - internal_id, buff_gtid, log_name, log_pos); + if (is_group_replication_applier_channel) + { + my_snprintf(buff_coord, sizeof(buff_coord), + "Worker %u failed executing transaction '%s'", + internal_id, buff_gtid); + } + else + { + my_snprintf(buff_coord, sizeof(buff_coord), + "Worker %u failed executing transaction '%s' at " + "master log %s, end_log_pos %llu", + internal_id, buff_gtid, log_name, log_pos); + } /* Error reporting by the worker. The worker updates its error fields as well From 067a984218bce4a1211548a946f3a8a11c670923 Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Fri, 16 Mar 2018 10:47:20 +0100 Subject: [PATCH 0705/1221] PS-3887: TokuDB does not compile with -DWITH_PERFSCHEMA_STORAGE_ENGINE=OFF Add `-DWITHOUT_PERFSCHEMA_STORAGE_ENGINE=ON` to inverted config in Travis config file Fix TokuDB usage of the following functions to match `psi/mysql_thread.h` definitions: 1. inline_mysql_mutex_lock to `if defined(SAFE_MUTEX) || defined (HAVE_PSI_MUTEX_INTERFACE)` 2. inline_mysql_mutex_unlock to `#ifdef SAFE_MUTEX` The commit will be cherry-picked forward to 5.7 --- .travis.yml | 1 + storage/tokudb/PerconaFT | 2 +- storage/tokudb/hatoku_defines.h | 12 ++++++++---- storage/tokudb/hatoku_hton.cc | 2 ++ storage/tokudb/tokudb_thread.h | 26 +++++++++++--------------- 5 files changed, 23 insertions(+), 20 deletions(-) diff --git a/.travis.yml b/.travis.yml index 6cf75cc7d1fa..7d90545f7b00 100644 --- a/.travis.yml +++ b/.travis.yml @@ -155,6 +155,7 @@ script: -DWITH_INNOBASE_STORAGE_ENGINE=OFF -DWITH_PARTITION_STORAGE_ENGINE=OFF -DWITH_QUERY_RESPONSE_TIME=ON + -DWITHOUT_PERFSCHEMA_STORAGE_ENGINE=ON "; fi; echo -- BUILD=$BUILD MAINTAINER_MODE=$MAINTAINER_MODE WITHOUT_TOKUDB=$WITHOUT_TOKUDB CMAKE_OPT=\"$CMAKE_OPT\" ENV_VAR_CMAKE_OPT=\"$ENV_VAR_CMAKE_OPT\"; diff --git a/storage/tokudb/PerconaFT b/storage/tokudb/PerconaFT index f2ea623d4d5c..af8783b97f8d 160000 --- a/storage/tokudb/PerconaFT +++ b/storage/tokudb/PerconaFT @@ -1 +1 @@ -Subproject commit f2ea623d4d5ce2abf28f6ae2213bc6a021464b86 +Subproject commit af8783b97f8d03da2b76e5e8d30ed256d36e9161 diff --git a/storage/tokudb/hatoku_defines.h b/storage/tokudb/hatoku_defines.h index b0fac3598e20..34e58971f71b 100644 --- a/storage/tokudb/hatoku_defines.h +++ b/storage/tokudb/hatoku_defines.h @@ -262,13 +262,17 @@ inline uint tokudb_uint3korr(const uchar *a) { typedef unsigned int pfs_key_t; -#if defined(HAVE_PSI_MUTEX_INTERFACE) +#if defined(SAFE_MUTEX) || defined(HAVE_PSI_MUTEX_INTERFACE) #define mutex_t_lock(M) M.lock(__FILE__, __LINE__) -#define mutex_t_unlock(M) M.unlock(__FILE__, __LINE__) -#else // HAVE_PSI_MUTEX_INTERFACE +#else // SAFE_MUTEX || HAVE_PSI_MUTEX_INTERFACE #define mutex_t_lock(M) M.lock() +#endif // SAFE_MUTEX || HAVE_PSI_MUTEX_INTERFACE + +#if defined(SAFE_MUTEX) +#define mutex_t_unlock(M) M.unlock(__FILE__, __LINE__) +#else // SAFE_MUTEX #define mutex_t_unlock(M) M.unlock() -#endif // HAVE_PSI_MUTEX_INTERFACE +#endif // SAFE_MUTEX #if defined(HAVE_PSI_RWLOCK_INTERFACE) #define rwlock_t_lock_read(M) M.lock_read(__FILE__, __LINE__) diff --git a/storage/tokudb/hatoku_hton.cc b/storage/tokudb/hatoku_hton.cc index 2eeb57d813d6..a4351f87f437 100644 --- a/storage/tokudb/hatoku_hton.cc +++ b/storage/tokudb/hatoku_hton.cc @@ -28,6 +28,7 @@ Copyright (c) 2006, 2015, Percona and/or its affiliates. All rights reserved. #define TOKU_METADB_NAME "tokudb_meta" +#if defined(HAVE_PSI_MUTEX_INTERFACE) static pfs_key_t tokudb_map_mutex_key; static PSI_mutex_info all_tokudb_mutexes[] = { @@ -38,6 +39,7 @@ static PSI_mutex_info all_tokudb_mutexes[] = { static PSI_rwlock_info all_tokudb_rwlocks[] = { {&num_DBs_lock_key, "num_DBs_lock", 0}, }; +#endif /* HAVE_PSI_MUTEX_INTERFACE */ typedef struct savepoint_info { DB_TXN* txn; diff --git a/storage/tokudb/tokudb_thread.h b/storage/tokudb/tokudb_thread.h index dec58f3fd355..d85bee14dbd7 100644 --- a/storage/tokudb/tokudb_thread.h +++ b/storage/tokudb/tokudb_thread.h @@ -47,16 +47,16 @@ class mutex_t { void reinit(pfs_key_t key); void lock( -#ifdef HAVE_PSI_MUTEX_INTERFACE +#if defined(SAFE_MUTEX) || defined(HAVE_PSI_MUTEX_INTERFACE) const char* src_file, uint src_line -#endif // HAVE_PSI_MUTEX_INTERFACE +#endif // SAFE_MUTEX || HAVE_PSI_MUTEX_INTERFACE ); void unlock( -#ifdef HAVE_PSI_MUTEX_INTERFACE +#if defined(SAFE_MUTEX) const char* src_file, uint src_line -#endif // HAVE_PSI_MUTEX_INTERFACE +#endif // SAFE_MUTEX ); #ifdef TOKUDB_DEBUG bool is_owned_by_me(void) const; @@ -225,18 +225,18 @@ inline void mutex_t::reinit(pfs_key_t key) { assert_debug(r == 0); } inline void mutex_t::lock( -#ifdef HAVE_PSI_MUTEX_INTERFACE +#if defined(SAFE_MUTEX) || defined(HAVE_PSI_MUTEX_INTERFACE) const char* src_file, uint src_line -#endif // HAVE_PSI_MUTEX_INTERFACE +#endif // SAFE_MUTEX || HAVE_PSI_MUTEX_INTERFACE ) { assert_debug(is_owned_by_me() == false); int r MY_ATTRIBUTE((unused)) = inline_mysql_mutex_lock(&_mutex -#ifdef HAVE_PSI_MUTEX_INTERFACE +#if defined(SAFE_MUTEX) || defined(HAVE_PSI_MUTEX_INTERFACE) , src_file, src_line -#endif // HAVE_PSI_MUTEX_INTERFACE +#endif // SAFE_MUTEX || HAVE_PSI_MUTEX_INTERFACE ); assert_debug(r == 0); #ifdef TOKUDB_DEBUG @@ -245,15 +245,11 @@ inline void mutex_t::lock( #endif } inline void mutex_t::unlock( -#ifdef HAVE_PSI_MUTEX_INTERFACE +#if defined(SAFE_MUTEX) const char* src_file, uint src_line -#endif // HAVE_PSI_MUTEX_INTERFACE - ) { -#ifndef SAFE_MUTEX - (void)(src_file); - (void)(src_line); #endif // SAFE_MUTEX + ) { #ifdef TOKUDB_DEBUG assert_debug(_owners > 0); assert_debug(is_owned_by_me()); @@ -261,7 +257,7 @@ inline void mutex_t::unlock( _owner = _null_owner; #endif int r MY_ATTRIBUTE((unused)) = inline_mysql_mutex_unlock(&_mutex -#ifdef SAFE_MUTEX +#if defined(SAFE_MUTEX) , src_file, src_line From d96c09951fbd8058ca4f888c2fdaeffd61aac518 Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Wed, 28 Mar 2018 13:32:23 +0200 Subject: [PATCH 0706/1221] PS-3887: TokuDB does not compile with -DWITH_PERFSCHEMA_STORAGE_ENGINE=OFF Add `-DWITHOUT_PERFSCHEMA_STORAGE_ENGINE=ON` to inverted config in Travis config file Fix TokuDB usage of the following functions to match `psi/mysql_thread.h` definitions: 1. inline_mysql_mutex_lock to `if defined(SAFE_MUTEX) || defined (HAVE_PSI_MUTEX_INTERFACE)` 2. inline_mysql_mutex_unlock to `#ifdef SAFE_MUTEX` (cherry picked from commit 067a984218bce4a1211548a946f3a8a11c670923) --- .travis.yml | 1 + storage/tokudb/PerconaFT | 2 +- storage/tokudb/hatoku_defines.h | 12 ++++++++---- storage/tokudb/hatoku_hton.cc | 2 ++ storage/tokudb/tokudb_thread.h | 26 +++++++++++--------------- 5 files changed, 23 insertions(+), 20 deletions(-) diff --git a/.travis.yml b/.travis.yml index 56c5c6741996..4d90c10663c3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -159,6 +159,7 @@ script: -DWITH_INNOBASE_STORAGE_ENGINE=OFF -DWITH_PARTITION_STORAGE_ENGINE=OFF -DWITH_QUERY_RESPONSE_TIME=ON + -DWITHOUT_PERFSCHEMA_STORAGE_ENGINE=ON "; fi; echo -- BUILD=$BUILD MAINTAINER_MODE=$MAINTAINER_MODE WITHOUT_TOKUDB=$WITHOUT_TOKUDB WITHOUT_ROCKSDB=$WITHOUT_ROCKSDB WITH_MECAB=$WITH_MECAB CMAKE_OPT=\"$CMAKE_OPT\" ENV_VAR_CMAKE_OPT=\"$ENV_VAR_CMAKE_OPT\"; diff --git a/storage/tokudb/PerconaFT b/storage/tokudb/PerconaFT index f2ea623d4d5c..af8783b97f8d 160000 --- a/storage/tokudb/PerconaFT +++ b/storage/tokudb/PerconaFT @@ -1 +1 @@ -Subproject commit f2ea623d4d5ce2abf28f6ae2213bc6a021464b86 +Subproject commit af8783b97f8d03da2b76e5e8d30ed256d36e9161 diff --git a/storage/tokudb/hatoku_defines.h b/storage/tokudb/hatoku_defines.h index d9f61554a9f8..71015ae18293 100644 --- a/storage/tokudb/hatoku_defines.h +++ b/storage/tokudb/hatoku_defines.h @@ -184,13 +184,17 @@ inline uint tokudb_uint3korr(const uchar *a) { typedef unsigned int pfs_key_t; -#if defined(HAVE_PSI_MUTEX_INTERFACE) +#if defined(SAFE_MUTEX) || defined(HAVE_PSI_MUTEX_INTERFACE) #define mutex_t_lock(M) M.lock(__FILE__, __LINE__) -#define mutex_t_unlock(M) M.unlock(__FILE__, __LINE__) -#else // HAVE_PSI_MUTEX_INTERFACE +#else // SAFE_MUTEX || HAVE_PSI_MUTEX_INTERFACE #define mutex_t_lock(M) M.lock() +#endif // SAFE_MUTEX || HAVE_PSI_MUTEX_INTERFACE + +#if defined(SAFE_MUTEX) +#define mutex_t_unlock(M) M.unlock(__FILE__, __LINE__) +#else // SAFE_MUTEX #define mutex_t_unlock(M) M.unlock() -#endif // HAVE_PSI_MUTEX_INTERFACE +#endif // SAFE_MUTEX #if defined(HAVE_PSI_RWLOCK_INTERFACE) #define rwlock_t_lock_read(M) M.lock_read(__FILE__, __LINE__) diff --git a/storage/tokudb/hatoku_hton.cc b/storage/tokudb/hatoku_hton.cc index cf7af367f857..1f9ee990a204 100644 --- a/storage/tokudb/hatoku_hton.cc +++ b/storage/tokudb/hatoku_hton.cc @@ -32,6 +32,7 @@ Copyright (c) 2006, 2015, Percona and/or its affiliates. All rights reserved. #define TOKU_METADB_NAME "tokudb_meta" +#if defined(HAVE_PSI_MUTEX_INTERFACE) static pfs_key_t tokudb_map_mutex_key; static PSI_mutex_info all_tokudb_mutexes[] = { @@ -42,6 +43,7 @@ static PSI_mutex_info all_tokudb_mutexes[] = { static PSI_rwlock_info all_tokudb_rwlocks[] = { {&num_DBs_lock_key, "num_DBs_lock", 0}, }; +#endif /* HAVE_PSI_MUTEX_INTERFACE */ typedef struct savepoint_info { DB_TXN* txn; diff --git a/storage/tokudb/tokudb_thread.h b/storage/tokudb/tokudb_thread.h index dec58f3fd355..d85bee14dbd7 100644 --- a/storage/tokudb/tokudb_thread.h +++ b/storage/tokudb/tokudb_thread.h @@ -47,16 +47,16 @@ class mutex_t { void reinit(pfs_key_t key); void lock( -#ifdef HAVE_PSI_MUTEX_INTERFACE +#if defined(SAFE_MUTEX) || defined(HAVE_PSI_MUTEX_INTERFACE) const char* src_file, uint src_line -#endif // HAVE_PSI_MUTEX_INTERFACE +#endif // SAFE_MUTEX || HAVE_PSI_MUTEX_INTERFACE ); void unlock( -#ifdef HAVE_PSI_MUTEX_INTERFACE +#if defined(SAFE_MUTEX) const char* src_file, uint src_line -#endif // HAVE_PSI_MUTEX_INTERFACE +#endif // SAFE_MUTEX ); #ifdef TOKUDB_DEBUG bool is_owned_by_me(void) const; @@ -225,18 +225,18 @@ inline void mutex_t::reinit(pfs_key_t key) { assert_debug(r == 0); } inline void mutex_t::lock( -#ifdef HAVE_PSI_MUTEX_INTERFACE +#if defined(SAFE_MUTEX) || defined(HAVE_PSI_MUTEX_INTERFACE) const char* src_file, uint src_line -#endif // HAVE_PSI_MUTEX_INTERFACE +#endif // SAFE_MUTEX || HAVE_PSI_MUTEX_INTERFACE ) { assert_debug(is_owned_by_me() == false); int r MY_ATTRIBUTE((unused)) = inline_mysql_mutex_lock(&_mutex -#ifdef HAVE_PSI_MUTEX_INTERFACE +#if defined(SAFE_MUTEX) || defined(HAVE_PSI_MUTEX_INTERFACE) , src_file, src_line -#endif // HAVE_PSI_MUTEX_INTERFACE +#endif // SAFE_MUTEX || HAVE_PSI_MUTEX_INTERFACE ); assert_debug(r == 0); #ifdef TOKUDB_DEBUG @@ -245,15 +245,11 @@ inline void mutex_t::lock( #endif } inline void mutex_t::unlock( -#ifdef HAVE_PSI_MUTEX_INTERFACE +#if defined(SAFE_MUTEX) const char* src_file, uint src_line -#endif // HAVE_PSI_MUTEX_INTERFACE - ) { -#ifndef SAFE_MUTEX - (void)(src_file); - (void)(src_line); #endif // SAFE_MUTEX + ) { #ifdef TOKUDB_DEBUG assert_debug(_owners > 0); assert_debug(is_owned_by_me()); @@ -261,7 +257,7 @@ inline void mutex_t::unlock( _owner = _null_owner; #endif int r MY_ATTRIBUTE((unused)) = inline_mysql_mutex_unlock(&_mutex -#ifdef SAFE_MUTEX +#if defined(SAFE_MUTEX) , src_file, src_line From 32b97c10d5b2da4dc8f5198060778a575f585d3f Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Fri, 23 Mar 2018 11:25:10 -0700 Subject: [PATCH 0707/1221] TDB-141 : Fix various places where macros are redefined or used when undefined - Fixed up some macros to use #if defined(xxx) &&xxx semantics with #endif comment --- storage/tokudb/tokudb_sysvars.cc | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/storage/tokudb/tokudb_sysvars.cc b/storage/tokudb/tokudb_sysvars.cc index 31c44c455009..1e8ae4aba02c 100644 --- a/storage/tokudb/tokudb_sysvars.cc +++ b/storage/tokudb/tokudb_sysvars.cc @@ -57,10 +57,10 @@ uint client_pool_threads = 0; my_bool compress_buffers_before_eviction = TRUE; char* data_dir = NULL; ulong debug = 0; -#if TOKUDB_DEBUG +#if defined(TOKUDB_DEBUG) && TOKUDB_DEBUG // used to control background job manager my_bool debug_pause_background_job_manager = FALSE; -#endif +#endif // defined(TOKUDB_DEBUG) && TOKUDB_DEBUG my_bool directio = FALSE; my_bool enable_partial_eviction = TRUE; int fs_reserve_percent = 0; @@ -75,10 +75,12 @@ my_bool dir_per_db = FALSE; char* version = (char*) TOKUDB_VERSION_STR; // file system reserve as a percentage of total disk space -#if TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL +#if defined(TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL) && \ + TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL char* gdb_path = NULL; my_bool gdb_on_fatal = FALSE; -#endif +#endif // defined(TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL) && + // TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL my_bool check_jemalloc = TRUE; @@ -253,7 +255,7 @@ static MYSQL_SYSVAR_ULONG( ~0UL, 0); -#if TOKUDB_DEBUG +#if defined(TOKUDB_DEBUG) && TOKUDB_DEBUG static MYSQL_SYSVAR_BOOL( debug_pause_background_job_manager, debug_pause_background_job_manager, @@ -262,7 +264,7 @@ static MYSQL_SYSVAR_BOOL( NULL, NULL, FALSE); -#endif // TOKUDB_DEBUG +#endif // defined(TOKUDB_DEBUG) && TOKUDB_DEBUG static MYSQL_SYSVAR_BOOL( directio, @@ -412,7 +414,8 @@ static MYSQL_SYSVAR_BOOL(dir_per_db, dir_per_db, 0, "TokuDB store ft files in db directories", NULL, tokudb_dir_per_db_update, FALSE); -#if TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL +#if defined(TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL) && \ + TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL static MYSQL_SYSVAR_STR( gdb_path, gdb_path, @@ -430,7 +433,8 @@ static MYSQL_SYSVAR_BOOL( NULL, NULL, true); -#endif +#endif // defined(TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL) && + // TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL static MYSQL_SYSVAR_BOOL( check_jemalloc, @@ -1017,10 +1021,12 @@ st_mysql_sys_var* system_variables[] = { MYSQL_SYSVAR(version), MYSQL_SYSVAR(write_status_frequency), MYSQL_SYSVAR(dir_per_db), -#if TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL +#if defined(TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL) && \ + TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL MYSQL_SYSVAR(gdb_path), MYSQL_SYSVAR(gdb_on_fatal), -#endif +#endif // defined(TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL) && + // TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL MYSQL_SYSVAR(check_jemalloc), @@ -1072,9 +1078,9 @@ st_mysql_sys_var* system_variables[] = { MYSQL_SYSVAR(support_xa), #endif -#if TOKUDB_DEBUG - MYSQL_SYSVAR(debug_pause_background_job_manager), -#endif // TOKUDB_DEBUG +#if defined(TOKUDB_DEBUG) && TOKUDB_DEBUG + MYSQL_SYSVAR(debug_pause_background_job_manager), +#endif // defined(TOKUDB_DEBUG) && TOKUDB_DEBUG MYSQL_SYSVAR(dir_cmd_last_error), MYSQL_SYSVAR(dir_cmd_last_error_string), MYSQL_SYSVAR(dir_cmd), From 5ca462c61b560829fdccfc05ed26697e05ec9bb0 Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Tue, 27 Mar 2018 16:33:26 +0200 Subject: [PATCH 0708/1221] PS-3929: Introduce 3 different build groups for Travis Start different jobs for the following commit types: 1) developers forks - all compilers with Debug except clang 6.0 2) pull request - all compilers RelWithDebInfo except clang 6.0 3) merge - all compilers "Debug", "RelWithDebInfo", and "RelWithDebInfo" with INVERTED=ON --- .travis.yml | 214 ++++++++++++++++++++++++++++++++-------------------- 1 file changed, 133 insertions(+), 81 deletions(-) diff --git a/.travis.yml b/.travis.yml index 5abdb5228a70..a353d1c275d0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,118 +6,157 @@ language: cpp cache: ccache: true timeout: 600 - directories: - - $HOME/.ccache env: global: - CCACHE_DIR=$HOME/.ccache - CCACHE_COMPRESS=1 + - CCACHE_COMPRESSLEVEL=9 - CCACHE_MAXSIZE=500Mi - CCACHE_CPP2=1 - - MAINTAINER_MODE=ON matrix: include: - # 1 + # Common - env: COMMAND=clang-test script: - wget https://llvm.org/svn/llvm-project/cfe/trunk/tools/clang-format/clang-format-diff.py - chmod a+x clang-format-diff.py - git diff -U0 --no-color HEAD^1 | ./clang-format-diff.py -p1 >_GIT_DIFF - '[ ! -s _GIT_DIFF ] && echo The last git commit is clang-formatted || cat _GIT_DIFF' - # 2 - - compiler: clang + + + # Configurations for developers' forks and after merging a pull request for percona/percona-server + # 1 + - if: repo != percona/percona-server OR repo = percona/percona-server AND type IN (push, cron) + env: BUILD=Debug + compiler: clang os: osx osx_image: xcode9.2 - env: BUILD=RelWithDebInfo MAINTAINER_MODE=OFF + # 2 + - if: repo != percona/percona-server OR repo = percona/percona-server AND type IN (push, cron) + env: VERSION=6.0 BUILD=RelWithDebInfo + compiler: clang # 3 - - compiler: clang - env: VERSION=4.0 BUILD=RelWithDebInfo + - if: repo != percona/percona-server OR repo = percona/percona-server AND type IN (push, cron) + env: VERSION=5.0 BUILD=Debug + compiler: clang # 4 - - compiler: clang - env: VERSION=5.0 BUILD=RelWithDebInfo + - if: repo != percona/percona-server OR repo = percona/percona-server AND type IN (push, cron) + env: VERSION=4.0 BUILD=Debug + compiler: clang # 5 - - compiler: clang - env: VERSION=6.0 BUILD=RelWithDebInfo + - if: repo != percona/percona-server OR repo = percona/percona-server AND type IN (push, cron) + env: VERSION=7 BUILD=Debug + compiler: gcc # 6 - - compiler: clang - env: VERSION=6.0 BUILD=RelWithDebInfo INVERTED=ON + - if: repo != percona/percona-server OR repo = percona/percona-server AND type IN (push, cron) + env: VERSION=6 BUILD=Debug + compiler: gcc # 7 - - compiler: gcc - env: VERSION=7 BUILD=RelWithDebInfo INVERTED=ON + - if: repo != percona/percona-server OR repo = percona/percona-server AND type IN (push, cron) + env: VERSION=5 BUILD=Debug + compiler: gcc # 8 - - compiler: gcc + - if: repo != percona/percona-server OR repo = percona/percona-server AND type IN (push, cron) + env: VERSION=4.8 BUILD=Debug + compiler: gcc + + + # Configurations for a pull request and after merging for percona/percona-server + # 1 + - if: branch =~ fullci OR repo = percona/percona-server AND type IN (push, pull_request, cron) + env: BUILD=RelWithDebInfo + compiler: clang + os: osx + osx_image: xcode9.2 + # 2 + - if: branch =~ fullci OR repo = percona/percona-server AND type IN (push, pull_request, cron) + env: VERSION=6.0 BUILD=Debug + compiler: clang + # 3 + - if: branch =~ fullci OR repo = percona/percona-server AND type IN (push, pull_request, cron) + env: VERSION=5.0 BUILD=RelWithDebInfo + compiler: clang + # 4 + - if: branch =~ fullci OR repo = percona/percona-server AND type IN (push, pull_request, cron) + env: VERSION=4.0 BUILD=RelWithDebInfo + compiler: clang + # 5 + - if: branch =~ fullci OR repo = percona/percona-server AND type IN (push, pull_request, cron) env: VERSION=7 BUILD=RelWithDebInfo - # 9 - - compiler: gcc + compiler: gcc + # 6 + - if: branch =~ fullci OR repo = percona/percona-server AND type IN (push, pull_request, cron) env: VERSION=6 BUILD=RelWithDebInfo - # 10 - - compiler: gcc + compiler: gcc + # 7 + - if: branch =~ fullci OR repo = percona/percona-server AND type IN (push, pull_request, cron) env: VERSION=5 BUILD=RelWithDebInfo - # 11 - - compiler: gcc + compiler: gcc + # 8 + - if: branch =~ fullci OR repo = percona/percona-server AND type IN (push, pull_request, cron) env: VERSION=4.8 BUILD=RelWithDebInfo - # 12 - - compiler: clang - os: osx - osx_image: xcode9.2 - env: BUILD=Debug MAINTAINER_MODE=OFF - # 13 - - compiler: clang - env: VERSION=4.0 BUILD=Debug - # 14 - - compiler: clang - env: VERSION=5.0 BUILD=Debug - # 15 - - compiler: clang - env: VERSION=6.0 BUILD=Debug - # 16 - - compiler: clang - env: VERSION=6.0 BUILD=Debug INVERTED=ON - # 17 - - compiler: gcc - env: VERSION=7 BUILD=Debug INVERTED=ON - # 18 - - compiler: gcc - env: VERSION=7 BUILD=Debug - # 19 - - compiler: gcc - env: VERSION=6 BUILD=Debug - # 20 - - compiler: gcc - env: VERSION=5 BUILD=Debug - # 21 - - compiler: gcc - env: VERSION=4.8 BUILD=Debug + compiler: gcc + + + # Configurations to be run after merging a pull request for percona/percona-server + # 1 + - if: branch =~ extraci OR repo = percona/percona-server AND type IN (push, cron) + env: VERSION=6.0 BUILD=RelWithDebInfo INVERTED=ON + compiler: clang + # 2 + - if: branch =~ extraci OR repo = percona/percona-server AND type IN (push, cron) + env: VERSION=5.0 BUILD=RelWithDebInfo INVERTED=ON + compiler: clang + # 3 + - if: branch =~ extraci OR repo = percona/percona-server AND type IN (push, cron) + env: VERSION=4.0 BUILD=RelWithDebInfo INVERTED=ON + compiler: clang + # 4 + - if: branch =~ extraci OR repo = percona/percona-server AND type IN (push, cron) + env: VERSION=7 BUILD=RelWithDebInfo INVERTED=ON + compiler: gcc + # 5 + - if: branch =~ extraci OR repo = percona/percona-server AND type IN (push, cron) + env: VERSION=6 BUILD=RelWithDebInfo INVERTED=ON + compiler: gcc + # 6 + - if: branch =~ extraci OR repo = percona/percona-server AND type IN (push, cron) + env: VERSION=5 BUILD=RelWithDebInfo INVERTED=ON + compiler: gcc + # 7 + - if: branch =~ extraci OR repo = percona/percona-server AND type IN (push, cron) + env: VERSION=4.8 BUILD=RelWithDebInfo INVERTED=ON + compiler: gcc + script: - JOB_NUMBER=$(echo $TRAVIS_JOB_NUMBER | sed -e 's:[0-9][0-9]*\.\(.*\):\1:'); - echo -- JOB_NUMBER=$JOB_NUMBER PACKAGES=$PACKAGES TRAVIS_REPO_SLUG=$TRAVIS_REPO_SLUG TRAVIS_BRANCH=$TRAVIS_BRANCH TRAVIS_EVENT_TYPE=$TRAVIS_EVENT_TYPE TRAVIS_PULL_REQUEST=$TRAVIS_PULL_REQUEST + echo --- JOB_NUMBER=$JOB_NUMBER PACKAGES=$PACKAGES TRAVIS_REPO_SLUG=$TRAVIS_REPO_SLUG TRAVIS_BRANCH=$TRAVIS_BRANCH TRAVIS_EVENT_TYPE=$TRAVIS_EVENT_TYPE TRAVIS_PULL_REQUEST=$TRAVIS_PULL_REQUEST - - echo -- Perform all Travis jobs or only jobs that are included in ENV_VAR_JOB_NUMBERS list if it is defined; + - echo --- Perform all Travis jobs or only jobs that are included in ENV_VAR_JOB_NUMBERS list if it is defined; JOB_NUMBERS="1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24"; if [[ "$ENV_VAR_JOB_NUMBERS" != "" ]]; then JOB_NUMBERS=$ENV_VAR_JOB_NUMBERS; fi; JOB_ARRAY=(${JOB_NUMBERS// / }); if [[ ! " ${JOB_ARRAY[@]} " =~ " ${JOB_NUMBER} " ]]; then - echo Finishing as job ${JOB_NUMBER} is not on a list = $JOB_NUMBERS; + echo --- Finishing as job ${JOB_NUMBER} is not on a list = $JOB_NUMBERS; travis_terminate 0; fi; - - echo -- Configure required LLVM and Ubuntu Toolchain repositories; + - echo --- Configure required LLVM and Ubuntu Toolchain repositories; if [[ "$TRAVIS_OS_NAME" == "linux" ]] && [[ "$CC" == "clang" ]]; then PACKAGES="llvm-$VERSION-dev $PACKAGES"; curl -sSL "http://apt.llvm.org/llvm-snapshot.gpg.key" | sudo -E apt-key add -; echo "deb http://apt.llvm.org/trusty/ llvm-toolchain-trusty-$VERSION main" | sudo tee -a /etc/apt/sources.list > /dev/null; - sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test; fi; - if [[ "$TRAVIS_OS_NAME" == "linux" ]] && [[ "$CC" == "gcc" ]]; then + if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo -E apt-add-repository -y "ppa:ubuntu-toolchain-r/test"; fi; - - echo -- Update list of packages and download dependencies; + - echo --- Update list of packages and download dependencies; if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then CC=$CC-$VERSION; CXX=$CXX-$VERSION; @@ -139,29 +178,42 @@ script: - ccache --print-config; ccache --zero-stats; - - echo -- Perform Debug or RelWithDebInfo compilation; - if [[ "$INVERTED" == "ON" ]]; then - CMAKE_OPT=" - -DWITH_EMBEDDED_SERVER=OFF - -DWITH_READLINE=OFF - -DWITH_SSL=system - -DWITH_ZLIB=bundled - -DWITH_ARCHIVE_STORAGE_ENGINE=OFF - -DWITH_BLACKHOLE_STORAGE_ENGINE=OFF - -DWITH_EXAMPLE_STORAGE_ENGINE=ON - -DWITH_FEDERATED_STORAGE_ENGINE=OFF - -DWITH_INNOBASE_STORAGE_ENGINE=OFF - -DWITH_PARTITION_STORAGE_ENGINE=OFF - "; - fi; - echo -- BUILD=$BUILD MAINTAINER_MODE=$MAINTAINER_MODE CMAKE_OPT=\"$CMAKE_OPT\" ENV_VAR_CMAKE_OPT=\"$ENV_VAR_CMAKE_OPT\"; - cmake .. + - echo --- Set cmake parameters; + CMAKE_OPT=" -DCMAKE_BUILD_TYPE=$BUILD - -DMYSQL_MAINTAINER_MODE=$MAINTAINER_MODE -DBUILD_CONFIG=mysql_release -DFEATURE_SET=community -DENABLE_DTRACE=OFF -DWITH_PAM=ON + "; + if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then + CMAKE_OPT="$CMAKE_OPT + -DMYSQL_MAINTAINER_MODE=ON + "; + else + CMAKE_OPT="$CMAKE_OPT + -DMYSQL_MAINTAINER_MODE=OFF + "; + fi; + if [[ "$INVERTED" == "ON" ]]; then + CMAKE_OPT="$CMAKE_OPT + -DWITH_EMBEDDED_SERVER=OFF + -DWITH_READLINE=OFF + -DWITH_SSL=system + -DWITH_ZLIB=bundled + -DWITH_ARCHIVE_STORAGE_ENGINE=OFF + -DWITH_BLACKHOLE_STORAGE_ENGINE=OFF + -DWITH_EXAMPLE_STORAGE_ENGINE=ON + -DWITH_FEDERATED_STORAGE_ENGINE=OFF + -DWITH_INNOBASE_STORAGE_ENGINE=OFF + -DWITHOUT_PARTITION_STORAGE_ENGINE=ON + "; + fi; + + - echo --- Perform Debug or RelWithDebInfo compilation; + echo --- CMAKE_OPT=\"$CMAKE_OPT\"; + echo --- ENV_VAR_CMAKE_OPT=\"$ENV_VAR_CMAKE_OPT\"; + cmake .. $CMAKE_OPT $ENV_VAR_CMAKE_OPT - make -j2 From d597a507330fb684cae0430e2651848106937e6b Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Thu, 29 Mar 2018 12:14:21 +0200 Subject: [PATCH 0709/1221] PS-3929: Introduce 3 different build groups for Travis Start different jobs for the following commit types: 1) developers forks - all compilers with Debug except clang 6.0 2) pull request - all compilers RelWithDebInfo except clang 6.0 3) merge - all compilers "Debug", "RelWithDebInfo", and "RelWithDebInfo" with INVERTED=ON --- .travis.yml | 224 ++++++++++++++++++++++++++++++++-------------------- 1 file changed, 138 insertions(+), 86 deletions(-) diff --git a/.travis.yml b/.travis.yml index 7d90545f7b00..ab47320b0f6e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,119 +6,157 @@ language: cpp cache: ccache: true timeout: 600 - directories: - - $HOME/.ccache env: global: - CCACHE_DIR=$HOME/.ccache - CCACHE_COMPRESS=1 + - CCACHE_COMPRESSLEVEL=9 - CCACHE_MAXSIZE=500Mi - CCACHE_CPP2=1 - - MAINTAINER_MODE=ON - - WITHOUT_TOKUDB=OFF matrix: include: - # 1 + # Common - env: COMMAND=clang-test script: - wget https://llvm.org/svn/llvm-project/cfe/trunk/tools/clang-format/clang-format-diff.py - chmod a+x clang-format-diff.py - git diff -U0 --no-color HEAD^1 | ./clang-format-diff.py -p1 >_GIT_DIFF - '[ ! -s _GIT_DIFF ] && echo The last git commit is clang-formatted || cat _GIT_DIFF' - # 2 - - compiler: clang + + + # Configurations for developers' forks and after merging a pull request for percona/percona-server + # 1 + - if: repo != percona/percona-server OR repo = percona/percona-server AND type IN (push, cron) + env: BUILD=Debug + compiler: clang os: osx osx_image: xcode9.2 - env: BUILD=RelWithDebInfo MAINTAINER_MODE=OFF WITHOUT_TOKUDB=ON + # 2 + - if: repo != percona/percona-server OR repo = percona/percona-server AND type IN (push, cron) + env: VERSION=6.0 BUILD=RelWithDebInfo + compiler: clang # 3 - - compiler: clang - env: VERSION=4.0 BUILD=RelWithDebInfo + - if: repo != percona/percona-server OR repo = percona/percona-server AND type IN (push, cron) + env: VERSION=5.0 BUILD=Debug + compiler: clang # 4 - - compiler: clang - env: VERSION=5.0 BUILD=RelWithDebInfo + - if: repo != percona/percona-server OR repo = percona/percona-server AND type IN (push, cron) + env: VERSION=4.0 BUILD=Debug + compiler: clang # 5 - - compiler: clang - env: VERSION=6.0 BUILD=RelWithDebInfo + - if: repo != percona/percona-server OR repo = percona/percona-server AND type IN (push, cron) + env: VERSION=7 BUILD=Debug + compiler: gcc # 6 - - compiler: clang - env: VERSION=6.0 BUILD=RelWithDebInfo INVERTED=ON + - if: repo != percona/percona-server OR repo = percona/percona-server AND type IN (push, cron) + env: VERSION=6 BUILD=Debug + compiler: gcc # 7 - - compiler: gcc - env: VERSION=7 BUILD=RelWithDebInfo INVERTED=ON + - if: repo != percona/percona-server OR repo = percona/percona-server AND type IN (push, cron) + env: VERSION=5 BUILD=Debug + compiler: gcc # 8 - - compiler: gcc + - if: repo != percona/percona-server OR repo = percona/percona-server AND type IN (push, cron) + env: VERSION=4.8 BUILD=Debug + compiler: gcc + + + # Configurations for a pull request and after merging for percona/percona-server + # 1 + - if: branch =~ fullci OR repo = percona/percona-server AND type IN (push, pull_request, cron) + env: BUILD=RelWithDebInfo + compiler: clang + os: osx + osx_image: xcode9.2 + # 2 + - if: branch =~ fullci OR repo = percona/percona-server AND type IN (push, pull_request, cron) + env: VERSION=6.0 BUILD=Debug + compiler: clang + # 3 + - if: branch =~ fullci OR repo = percona/percona-server AND type IN (push, pull_request, cron) + env: VERSION=5.0 BUILD=RelWithDebInfo + compiler: clang + # 4 + - if: branch =~ fullci OR repo = percona/percona-server AND type IN (push, pull_request, cron) + env: VERSION=4.0 BUILD=RelWithDebInfo + compiler: clang + # 5 + - if: branch =~ fullci OR repo = percona/percona-server AND type IN (push, pull_request, cron) env: VERSION=7 BUILD=RelWithDebInfo - # 9 - - compiler: gcc + compiler: gcc + # 6 + - if: branch =~ fullci OR repo = percona/percona-server AND type IN (push, pull_request, cron) env: VERSION=6 BUILD=RelWithDebInfo - # 10 - - compiler: gcc + compiler: gcc + # 7 + - if: branch =~ fullci OR repo = percona/percona-server AND type IN (push, pull_request, cron) env: VERSION=5 BUILD=RelWithDebInfo - # 11 - - compiler: gcc + compiler: gcc + # 8 + - if: branch =~ fullci OR repo = percona/percona-server AND type IN (push, pull_request, cron) env: VERSION=4.8 BUILD=RelWithDebInfo - # 12 - - compiler: clang - os: osx - osx_image: xcode9.2 - env: BUILD=Debug MAINTAINER_MODE=OFF WITHOUT_TOKUDB=ON - # 13 - - compiler: clang - env: VERSION=4.0 BUILD=Debug - # 14 - - compiler: clang - env: VERSION=5.0 BUILD=Debug - # 15 - - compiler: clang - env: VERSION=6.0 BUILD=Debug - # 16 - - compiler: clang - env: VERSION=6.0 BUILD=Debug INVERTED=ON - # 17 - - compiler: gcc - env: VERSION=7 BUILD=Debug INVERTED=ON - # 18 - - compiler: gcc - env: VERSION=7 BUILD=Debug - # 19 - - compiler: gcc - env: VERSION=6 BUILD=Debug - # 20 - - compiler: gcc - env: VERSION=5 BUILD=Debug - # 21 - - compiler: gcc - env: VERSION=4.8 BUILD=Debug + compiler: gcc + + + # Configurations to be run after merging a pull request for percona/percona-server + # 1 + - if: branch =~ extraci OR repo = percona/percona-server AND type IN (push, cron) + env: VERSION=6.0 BUILD=RelWithDebInfo INVERTED=ON + compiler: clang + # 2 + - if: branch =~ extraci OR repo = percona/percona-server AND type IN (push, cron) + env: VERSION=5.0 BUILD=RelWithDebInfo INVERTED=ON + compiler: clang + # 3 + - if: branch =~ extraci OR repo = percona/percona-server AND type IN (push, cron) + env: VERSION=4.0 BUILD=RelWithDebInfo INVERTED=ON + compiler: clang + # 4 + - if: branch =~ extraci OR repo = percona/percona-server AND type IN (push, cron) + env: VERSION=7 BUILD=RelWithDebInfo INVERTED=ON + compiler: gcc + # 5 + - if: branch =~ extraci OR repo = percona/percona-server AND type IN (push, cron) + env: VERSION=6 BUILD=RelWithDebInfo INVERTED=ON + compiler: gcc + # 6 + - if: branch =~ extraci OR repo = percona/percona-server AND type IN (push, cron) + env: VERSION=5 BUILD=RelWithDebInfo INVERTED=ON + compiler: gcc + # 7 + - if: branch =~ extraci OR repo = percona/percona-server AND type IN (push, cron) + env: VERSION=4.8 BUILD=RelWithDebInfo INVERTED=ON + compiler: gcc + script: - JOB_NUMBER=$(echo $TRAVIS_JOB_NUMBER | sed -e 's:[0-9][0-9]*\.\(.*\):\1:'); - echo -- JOB_NUMBER=$JOB_NUMBER PACKAGES=$PACKAGES TRAVIS_REPO_SLUG=$TRAVIS_REPO_SLUG TRAVIS_BRANCH=$TRAVIS_BRANCH TRAVIS_EVENT_TYPE=$TRAVIS_EVENT_TYPE TRAVIS_PULL_REQUEST=$TRAVIS_PULL_REQUEST + echo --- JOB_NUMBER=$JOB_NUMBER PACKAGES=$PACKAGES TRAVIS_REPO_SLUG=$TRAVIS_REPO_SLUG TRAVIS_BRANCH=$TRAVIS_BRANCH TRAVIS_EVENT_TYPE=$TRAVIS_EVENT_TYPE TRAVIS_PULL_REQUEST=$TRAVIS_PULL_REQUEST - - echo -- Perform all Travis jobs or only jobs that are included in ENV_VAR_JOB_NUMBERS list if it is defined; + - echo --- Perform all Travis jobs or only jobs that are included in ENV_VAR_JOB_NUMBERS list if it is defined; JOB_NUMBERS="1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24"; if [[ "$ENV_VAR_JOB_NUMBERS" != "" ]]; then JOB_NUMBERS=$ENV_VAR_JOB_NUMBERS; fi; JOB_ARRAY=(${JOB_NUMBERS// / }); if [[ ! " ${JOB_ARRAY[@]} " =~ " ${JOB_NUMBER} " ]]; then - echo Finishing as job ${JOB_NUMBER} is not on a list = $JOB_NUMBERS; + echo --- Finishing as job ${JOB_NUMBER} is not on a list = $JOB_NUMBERS; travis_terminate 0; fi; - - echo -- Configure required LLVM and Ubuntu Toolchain repositories; + - echo --- Configure required LLVM and Ubuntu Toolchain repositories; if [[ "$TRAVIS_OS_NAME" == "linux" ]] && [[ "$CC" == "clang" ]]; then PACKAGES="llvm-$VERSION-dev $PACKAGES"; curl -sSL "http://apt.llvm.org/llvm-snapshot.gpg.key" | sudo -E apt-key add -; echo "deb http://apt.llvm.org/trusty/ llvm-toolchain-trusty-$VERSION main" | sudo tee -a /etc/apt/sources.list > /dev/null; - sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test; fi; - if [[ "$TRAVIS_OS_NAME" == "linux" ]] && [[ "$CC" == "gcc" ]]; then + if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo -E apt-add-repository -y "ppa:ubuntu-toolchain-r/test"; fi; - - echo -- Update list of packages and download dependencies; + - echo --- Update list of packages and download dependencies; if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then CC=$CC-$VERSION; CXX=$CXX-$VERSION; @@ -140,34 +178,48 @@ script: - ccache --print-config; ccache --zero-stats; - - echo -- Perform Debug or RelWithDebInfo compilation; - if [[ "$INVERTED" == "ON" ]]; then - CMAKE_OPT=" - -DWITH_EMBEDDED_SERVER=OFF - -DWITH_EDITLINE=bundled - -DWITH_LIBEVENT=system - -DWITH_SSL=system - -DWITH_ZLIB=bundled - -DWITH_ARCHIVE_STORAGE_ENGINE=OFF - -DWITH_BLACKHOLE_STORAGE_ENGINE=OFF - -DWITH_EXAMPLE_STORAGE_ENGINE=ON - -DWITH_FEDERATED_STORAGE_ENGINE=OFF - -DWITH_INNOBASE_STORAGE_ENGINE=OFF - -DWITH_PARTITION_STORAGE_ENGINE=OFF - -DWITH_QUERY_RESPONSE_TIME=ON - -DWITHOUT_PERFSCHEMA_STORAGE_ENGINE=ON - "; - fi; - echo -- BUILD=$BUILD MAINTAINER_MODE=$MAINTAINER_MODE WITHOUT_TOKUDB=$WITHOUT_TOKUDB CMAKE_OPT=\"$CMAKE_OPT\" ENV_VAR_CMAKE_OPT=\"$ENV_VAR_CMAKE_OPT\"; - cmake .. + - echo --- Set cmake parameters; + CMAKE_OPT=" -DCMAKE_BUILD_TYPE=$BUILD - -DMYSQL_MAINTAINER_MODE=$MAINTAINER_MODE -DBUILD_CONFIG=mysql_release -DFEATURE_SET=community -DENABLE_DTRACE=OFF -DENABLE_DOWNLOADS=1 -DWITH_PAM=ON - -DWITHOUT_TOKUDB=$WITHOUT_TOKUDB + "; + if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then + CMAKE_OPT="$CMAKE_OPT + -DMYSQL_MAINTAINER_MODE=ON + -DWITH_TOKUDB=ON + "; + else + CMAKE_OPT="$CMAKE_OPT + -DMYSQL_MAINTAINER_MODE=OFF + -DWITHOUT_TOKUDB=ON + "; + fi; + if [[ "$INVERTED" == "ON" ]]; then + CMAKE_OPT="$CMAKE_OPT + -DWITH_EMBEDDED_SERVER=OFF + -DWITH_EDITLINE=bundled + -DWITH_LIBEVENT=system + -DWITH_SSL=system + -DWITH_ZLIB=bundled + -DWITH_ARCHIVE_STORAGE_ENGINE=OFF + -DWITH_BLACKHOLE_STORAGE_ENGINE=OFF + -DWITH_EXAMPLE_STORAGE_ENGINE=ON + -DWITH_FEDERATED_STORAGE_ENGINE=OFF + -DWITH_INNOBASE_STORAGE_ENGINE=OFF + -DWITH_QUERY_RESPONSE_TIME=ON + -DWITHOUT_PARTITION_STORAGE_ENGINE=ON + -DWITHOUT_PERFSCHEMA_STORAGE_ENGINE=ON + "; + fi; + + - echo --- Perform Debug or RelWithDebInfo compilation; + echo --- CMAKE_OPT=\"$CMAKE_OPT\"; + echo --- ENV_VAR_CMAKE_OPT=\"$ENV_VAR_CMAKE_OPT\"; + cmake .. $CMAKE_OPT $ENV_VAR_CMAKE_OPT - make -j2 From befeec00144ffcf10f5ab52530d9690715d74bab Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Tue, 27 Mar 2018 16:32:11 -0700 Subject: [PATCH 0710/1221] PS-3773 : LP #1744430: "Incorrect key file for table" frequently for tokudb - Added new logging when an index inconsistency is discovered between any SK and the PK, specifically when a key in an SK can not find the corresponding record in the PK. - Added DBUG_EXECUTE_IF point to fake return a HA_ERR_CRASHED/ER_NOT_KEYFILE from various index lookup calls and implemented basic test to ensure new logging actualy occurs. --- mysql-test/suite/tokudb.bugs/r/PS-3773.result | 7 ++++ mysql-test/suite/tokudb.bugs/t/PS-3773.test | 26 ++++++++++++++ storage/tokudb/ha_tokudb.cc | 34 ++++++++++++++----- 3 files changed, 58 insertions(+), 9 deletions(-) create mode 100644 mysql-test/suite/tokudb.bugs/r/PS-3773.result create mode 100644 mysql-test/suite/tokudb.bugs/t/PS-3773.test diff --git a/mysql-test/suite/tokudb.bugs/r/PS-3773.result b/mysql-test/suite/tokudb.bugs/r/PS-3773.result new file mode 100644 index 000000000000..e2e695611b5b --- /dev/null +++ b/mysql-test/suite/tokudb.bugs/r/PS-3773.result @@ -0,0 +1,7 @@ +CREATE TABLE t1(a INT, b INT, c INT, PRIMARY KEY(a), KEY(b)) ENGINE=TokuDB; +SET tokudb_auto_analyze=0; +INSERT INTO t1 VALUES(0,0,0), (1,1,1), (2,2,2), (3,3,3), (4,4,4), (5,5,5); +SET GLOBAL debug = "+d,tokudb_fake_db_notfound_error_in_read_full_row"; +SELECT * FROM t1 WHERE b = 2; +ERROR HY000: Incorrect key file for table 't1'; try to repair it +DROP TABLE t1; diff --git a/mysql-test/suite/tokudb.bugs/t/PS-3773.test b/mysql-test/suite/tokudb.bugs/t/PS-3773.test new file mode 100644 index 000000000000..684f9cbf8d5a --- /dev/null +++ b/mysql-test/suite/tokudb.bugs/t/PS-3773.test @@ -0,0 +1,26 @@ +--source include/have_tokudb.inc +--source include/have_debug.inc + +--let SEARCH_FILE=$MYSQLTEST_VARDIR/tmp/tokudb.bugs.PS-3773.log +--let $restart_parameters="restart: --log-error=$SEARCH_FILE" +--source include/restart_mysqld.inc + +CREATE TABLE t1(a INT, b INT, c INT, PRIMARY KEY(a), KEY(b)) ENGINE=TokuDB; +SET tokudb_auto_analyze=0; +INSERT INTO t1 VALUES(0,0,0), (1,1,1), (2,2,2), (3,3,3), (4,4,4), (5,5,5); + +SET GLOBAL debug = "+d,tokudb_fake_db_notfound_error_in_read_full_row"; +--error ER_NOT_KEYFILE +SELECT * FROM t1 WHERE b = 2; + +DROP TABLE t1; + +--let SEARCH_PATTERN=ha_tokudb::read_full_row on table +--source include/search_pattern_in_file.inc + +--let $restart_parameters= +--source include/restart_mysqld.inc + +--remove_file $SEARCH_FILE +--let SEARCH_PATTERN= +--let SEARCH_FILE= diff --git a/storage/tokudb/ha_tokudb.cc b/storage/tokudb/ha_tokudb.cc index 8354a35cb704..e8434fe31c4b 100644 --- a/storage/tokudb/ha_tokudb.cc +++ b/storage/tokudb/ha_tokudb.cc @@ -4846,21 +4846,37 @@ int ha_tokudb::read_full_row(uchar * buf) { // assumes key is stored in this->last_key // - error = share->file->getf_set( - share->file, - transaction, - cursor_flags, - &last_key, - smart_dbt_callback_rowread_ptquery, - &info - ); + error = share->file->getf_set(share->file, + transaction, + cursor_flags, + &last_key, + smart_dbt_callback_rowread_ptquery, + &info); + + DBUG_EXECUTE_IF("tokudb_fake_db_notfound_error_in_read_full_row", { + error = DB_NOTFOUND; + }); if (error) { if (error == DB_LOCK_NOTGRANTED) { error = HA_ERR_LOCK_WAIT_TIMEOUT; + } else if (error == DB_NOTFOUND) { + error = HA_ERR_CRASHED; + if (tokudb_active_index < share->_keys) { + sql_print_error( + "ha_tokudb::read_full_row on table %s cound not locate " + "record in PK that matches record found in key %s", + share->full_table_name(), + share->_key_descriptors[tokudb_active_index]._name); + } else { + sql_print_error( + "ha_tokudb::read_full_row on table %s cound not locate " + "record in PK that matches record found in key %d", + share->full_table_name(), + tokudb_active_index); + } } table->status = STATUS_NOT_FOUND; - TOKUDB_HANDLER_DBUG_RETURN(error == DB_NOTFOUND ? HA_ERR_CRASHED : error); } TOKUDB_HANDLER_DBUG_RETURN(error); From e84126949e62fd6fa922d23ba6870a39ac2c1c61 Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Wed, 28 Mar 2018 13:12:01 +0200 Subject: [PATCH 0711/1221] PS-3928: Fix for complex case insensitive full text queries These queries tried to validate the result by matching it back to the original result, converted to lower case form. As queries using binary collections weren't converted to lowercase, these validations failed when the query contained any upper case characters. This caused ngram queries which contained upper case characters and were longer than the ngram length to return no results. --- mysql-test/suite/innodb_fts/r/bug78048.result | 48 +++++++++++++++++++ mysql-test/suite/innodb_fts/t/bug78048.test | 40 ++++++++++++++++ storage/innobase/handler/ha_innodb.cc | 4 +- 3 files changed, 91 insertions(+), 1 deletion(-) create mode 100644 mysql-test/suite/innodb_fts/r/bug78048.result create mode 100644 mysql-test/suite/innodb_fts/t/bug78048.test diff --git a/mysql-test/suite/innodb_fts/r/bug78048.result b/mysql-test/suite/innodb_fts/r/bug78048.result new file mode 100644 index 000000000000..7897cc313ece --- /dev/null +++ b/mysql-test/suite/innodb_fts/r/bug78048.result @@ -0,0 +1,48 @@ +create table `ngram_simple` ( +`i` int(11) not null auto_increment, +`txt` text collate utf8mb4_bin not null, +primary key (`i`), +fulltext key `fx_txts` (`txt`) ) engine=InnoDB auto_increment=10 default charset=utf8mb4 collate=utf8mb4_bin; +insert into ngram_simple (txt) values ('CompP&C01'); +insert into ngram_simple (txt) values ('CompP&C02'); +insert into ngram_simple (txt) values ('CompP&C03'); +insert into ngram_simple (txt) values ('CompP&C04'); +insert into ngram_simple (txt) values ('CompP&C05'); +insert into ngram_simple (txt) values ('CompP&C06'); +insert into ngram_simple (txt) values ('CompP&c04'); +insert into ngram_simple (txt) values ('abc*efg'); +insert into ngram_simple (txt) values ('abc&efg'); +insert into ngram_simple (txt) values ('abC&efGh'); +select * from ngram_simple where match(txt) against ('abc' in boolean mode); +i txt +17 abc*efg +18 abc&efg +select * from ngram_simple where match(txt) against ('abC' in boolean mode); +i txt +19 abC&efGh +select * from ngram_simple where match(txt) against ('C04' in boolean mode); +i txt +13 CompP&C04 +select * from ngram_simple where match(txt) against ('c04' in boolean mode); +i txt +16 CompP&c04 +alter table ngram_simple drop key fx_txts; +alter table ngram_simple add fulltext key `fx_txts` (`txt`) with parser ngram; +optimize table ngram_simple; +Table Op Msg_type Msg_text +test.ngram_simple optimize note Table does not support optimize, doing recreate + analyze instead +test.ngram_simple optimize status OK +select * from ngram_simple where match(txt) against ('abc' in boolean mode); +i txt +17 abc*efg +18 abc&efg +select * from ngram_simple where match(txt) against ('abC' in boolean mode); +i txt +19 abC&efGh +select * from ngram_simple where match(txt) against ('C04' in boolean mode); +i txt +13 CompP&C04 +select * from ngram_simple where match(txt) against ('c04' in boolean mode); +i txt +16 CompP&c04 +drop table ngram_simple; diff --git a/mysql-test/suite/innodb_fts/t/bug78048.test b/mysql-test/suite/innodb_fts/t/bug78048.test new file mode 100644 index 000000000000..2245b48edda8 --- /dev/null +++ b/mysql-test/suite/innodb_fts/t/bug78048.test @@ -0,0 +1,40 @@ +# Bug #78048: Complex case insensitive full text queries returned no results +# +# This was especially noticable with ngram indices, where a query longer than +# the ngram length was interpreted as several concatenated queries + +--source include/have_innodb.inc + +create table `ngram_simple` ( +`i` int(11) not null auto_increment, +`txt` text collate utf8mb4_bin not null, +primary key (`i`), +fulltext key `fx_txts` (`txt`) ) engine=InnoDB auto_increment=10 default charset=utf8mb4 collate=utf8mb4_bin; + +insert into ngram_simple (txt) values ('CompP&C01'); +insert into ngram_simple (txt) values ('CompP&C02'); +insert into ngram_simple (txt) values ('CompP&C03'); +insert into ngram_simple (txt) values ('CompP&C04'); +insert into ngram_simple (txt) values ('CompP&C05'); +insert into ngram_simple (txt) values ('CompP&C06'); +insert into ngram_simple (txt) values ('CompP&c04'); +insert into ngram_simple (txt) values ('abc*efg'); +insert into ngram_simple (txt) values ('abc&efg'); +insert into ngram_simple (txt) values ('abC&efGh'); + +select * from ngram_simple where match(txt) against ('abc' in boolean mode); +select * from ngram_simple where match(txt) against ('abC' in boolean mode); +select * from ngram_simple where match(txt) against ('C04' in boolean mode); +select * from ngram_simple where match(txt) against ('c04' in boolean mode); + +alter table ngram_simple drop key fx_txts; +alter table ngram_simple add fulltext key `fx_txts` (`txt`) with parser ngram; +optimize table ngram_simple; + +select * from ngram_simple where match(txt) against ('abc' in boolean mode); +select * from ngram_simple where match(txt) against ('abC' in boolean mode); +select * from ngram_simple where match(txt) against ('C04' in boolean mode); +select * from ngram_simple where match(txt) against ('c04' in boolean mode); + +drop table ngram_simple; + diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index 2e9b64f2a6ff..9cd63cb43870 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -7173,7 +7173,9 @@ innobase_fts_text_case_cmp( const fts_string_t* s2 = (const fts_string_t*) p2; ulint newlen; - my_casedn_str(charset, (char*) s2->f_str); + if (!my_binary_compare(charset)) { + my_casedn_str(charset, (char*) s2->f_str); + } newlen = strlen((const char*) s2->f_str); From f7fa9ef59b436b7bf1b2814f4c76f8e41db45849 Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Thu, 29 Mar 2018 14:03:34 +0200 Subject: [PATCH 0712/1221] PS-3929: Introduce 3 different build groups for Travis Start different jobs for the following commit types: 1) developers forks - all compilers with Debug except clang 6.0 2) pull request - all compilers RelWithDebInfo except clang 6.0 3) merge - all compilers "Debug", "RelWithDebInfo", and "RelWithDebInfo" with INVERTED=ON --- .travis.yml | 238 ++++++++++++++++++++++++++++++++-------------------- 1 file changed, 148 insertions(+), 90 deletions(-) diff --git a/.travis.yml b/.travis.yml index 4d90c10663c3..caebf02195ed 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,121 +7,158 @@ cache: ccache: true timeout: 600 directories: - - $HOME/.ccache - $TRAVIS_BUILD_DIR/deps # cache Boost libraries env: global: - CCACHE_DIR=$HOME/.ccache - CCACHE_COMPRESS=1 + - CCACHE_COMPRESSLEVEL=9 - CCACHE_MAXSIZE=500Mi - CCACHE_CPP2=1 - - MAINTAINER_MODE=ON - - WITHOUT_TOKUDB=OFF - - WITHOUT_ROCKSDB=OFF - - WITH_MECAB=system matrix: include: - # 1 + # Common - env: COMMAND=clang-test script: - wget https://llvm.org/svn/llvm-project/cfe/trunk/tools/clang-format/clang-format-diff.py - chmod a+x clang-format-diff.py - git diff -U0 --no-color HEAD^1 | ./clang-format-diff.py -p1 >_GIT_DIFF - '[ ! -s _GIT_DIFF ] && echo The last git commit is clang-formatted || cat _GIT_DIFF' - # 2 - - compiler: clang + + + # Configurations for developers' forks and after merging a pull request for percona/percona-server + # 1 + - if: repo != percona/percona-server OR repo = percona/percona-server AND type IN (push, cron) + env: BUILD=Debug + compiler: clang os: osx osx_image: xcode9.2 - env: BUILD=RelWithDebInfo MAINTAINER_MODE=OFF WITHOUT_TOKUDB=ON WITHOUT_ROCKSDB=ON WITH_MECAB= CMAKE_OPT="-DWITH_PROTOBUF=system" + # 2 + - if: repo != percona/percona-server OR repo = percona/percona-server AND type IN (push, cron) + env: VERSION=6.0 BUILD=RelWithDebInfo + compiler: clang # 3 - - compiler: clang - env: VERSION=4.0 BUILD=RelWithDebInfo + - if: repo != percona/percona-server OR repo = percona/percona-server AND type IN (push, cron) + env: VERSION=5.0 BUILD=Debug + compiler: clang # 4 - - compiler: clang - env: VERSION=5.0 BUILD=RelWithDebInfo + - if: repo != percona/percona-server OR repo = percona/percona-server AND type IN (push, cron) + env: VERSION=4.0 BUILD=Debug + compiler: clang # 5 - - compiler: clang - env: VERSION=6.0 BUILD=RelWithDebInfo + - if: repo != percona/percona-server OR repo = percona/percona-server AND type IN (push, cron) + env: VERSION=7 BUILD=Debug + compiler: gcc # 6 - - compiler: clang - env: VERSION=6.0 BUILD=RelWithDebInfo INVERTED=ON + - if: repo != percona/percona-server OR repo = percona/percona-server AND type IN (push, cron) + env: VERSION=6 BUILD=Debug + compiler: gcc # 7 - - compiler: gcc - env: VERSION=7 BUILD=RelWithDebInfo INVERTED=ON + - if: repo != percona/percona-server OR repo = percona/percona-server AND type IN (push, cron) + env: VERSION=5 BUILD=Debug + compiler: gcc # 8 - - compiler: gcc + - if: repo != percona/percona-server OR repo = percona/percona-server AND type IN (push, cron) + env: VERSION=4.8 BUILD=Debug + compiler: gcc + + + # Configurations for a pull request and after merging for percona/percona-server + # 1 + - if: branch =~ fullci OR repo = percona/percona-server AND type IN (push, pull_request, cron) + env: BUILD=RelWithDebInfo + compiler: clang + os: osx + osx_image: xcode9.2 + # 2 + - if: branch =~ fullci OR repo = percona/percona-server AND type IN (push, pull_request, cron) + env: VERSION=6.0 BUILD=Debug + compiler: clang + # 3 + - if: branch =~ fullci OR repo = percona/percona-server AND type IN (push, pull_request, cron) + env: VERSION=5.0 BUILD=RelWithDebInfo + compiler: clang + # 4 + - if: branch =~ fullci OR repo = percona/percona-server AND type IN (push, pull_request, cron) + env: VERSION=4.0 BUILD=RelWithDebInfo + compiler: clang + # 5 + - if: branch =~ fullci OR repo = percona/percona-server AND type IN (push, pull_request, cron) env: VERSION=7 BUILD=RelWithDebInfo - # 9 - - compiler: gcc + compiler: gcc + # 6 + - if: branch =~ fullci OR repo = percona/percona-server AND type IN (push, pull_request, cron) env: VERSION=6 BUILD=RelWithDebInfo - # 10 - - compiler: gcc + compiler: gcc + # 7 + - if: branch =~ fullci OR repo = percona/percona-server AND type IN (push, pull_request, cron) env: VERSION=5 BUILD=RelWithDebInfo - # 11 - - compiler: gcc + compiler: gcc + # 8 + - if: branch =~ fullci OR repo = percona/percona-server AND type IN (push, pull_request, cron) env: VERSION=4.8 BUILD=RelWithDebInfo - # 12 - - compiler: clang - os: osx - osx_image: xcode9.2 - env: BUILD=Debug MAINTAINER_MODE=OFF WITHOUT_TOKUDB=ON WITHOUT_ROCKSDB=ON WITH_MECAB= CMAKE_OPT="-DWITH_PROTOBUF=system" - # 13 - - compiler: clang - env: VERSION=4.0 BUILD=Debug - # 14 - - compiler: clang - env: VERSION=5.0 BUILD=Debug - # 15 - - compiler: clang - env: VERSION=6.0 BUILD=Debug - # 16 - - compiler: clang - env: VERSION=6.0 BUILD=Debug INVERTED=ON - # 17 - - compiler: gcc - env: VERSION=7 BUILD=Debug INVERTED=ON - # 18 - - compiler: gcc - env: VERSION=7 BUILD=Debug - # 19 - - compiler: gcc - env: VERSION=6 BUILD=Debug - # 20 - - compiler: gcc - env: VERSION=5 BUILD=Debug - # 21 - - compiler: gcc - env: VERSION=4.8 BUILD=Debug + compiler: gcc + + + # Configurations to be run after merging a pull request for percona/percona-server + # 1 + - if: branch =~ extraci OR repo = percona/percona-server AND type IN (push, cron) + env: VERSION=6.0 BUILD=RelWithDebInfo INVERTED=ON + compiler: clang + # 2 + - if: branch =~ extraci OR repo = percona/percona-server AND type IN (push, cron) + env: VERSION=5.0 BUILD=RelWithDebInfo INVERTED=ON + compiler: clang + # 3 + - if: branch =~ extraci OR repo = percona/percona-server AND type IN (push, cron) + env: VERSION=4.0 BUILD=RelWithDebInfo INVERTED=ON + compiler: clang + # 4 + - if: branch =~ extraci OR repo = percona/percona-server AND type IN (push, cron) + env: VERSION=7 BUILD=RelWithDebInfo INVERTED=ON + compiler: gcc + # 5 + - if: branch =~ extraci OR repo = percona/percona-server AND type IN (push, cron) + env: VERSION=6 BUILD=RelWithDebInfo INVERTED=ON + compiler: gcc + # 6 + - if: branch =~ extraci OR repo = percona/percona-server AND type IN (push, cron) + env: VERSION=5 BUILD=RelWithDebInfo INVERTED=ON + compiler: gcc + # 7 + - if: branch =~ extraci OR repo = percona/percona-server AND type IN (push, cron) + env: VERSION=4.8 BUILD=RelWithDebInfo INVERTED=ON + compiler: gcc + script: - JOB_NUMBER=$(echo $TRAVIS_JOB_NUMBER | sed -e 's:[0-9][0-9]*\.\(.*\):\1:'); - echo -- JOB_NUMBER=$JOB_NUMBER PACKAGES=$PACKAGES TRAVIS_REPO_SLUG=$TRAVIS_REPO_SLUG TRAVIS_BRANCH=$TRAVIS_BRANCH TRAVIS_EVENT_TYPE=$TRAVIS_EVENT_TYPE TRAVIS_PULL_REQUEST=$TRAVIS_PULL_REQUEST + echo --- JOB_NUMBER=$JOB_NUMBER PACKAGES=$PACKAGES TRAVIS_REPO_SLUG=$TRAVIS_REPO_SLUG TRAVIS_BRANCH=$TRAVIS_BRANCH TRAVIS_EVENT_TYPE=$TRAVIS_EVENT_TYPE TRAVIS_PULL_REQUEST=$TRAVIS_PULL_REQUEST - - echo -- Perform all Travis jobs or only jobs that are included in ENV_VAR_JOB_NUMBERS list if it is defined; + - echo --- Perform all Travis jobs or only jobs that are included in ENV_VAR_JOB_NUMBERS list if it is defined; JOB_NUMBERS="1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24"; if [[ "$ENV_VAR_JOB_NUMBERS" != "" ]]; then JOB_NUMBERS=$ENV_VAR_JOB_NUMBERS; fi; JOB_ARRAY=(${JOB_NUMBERS// / }); if [[ ! " ${JOB_ARRAY[@]} " =~ " ${JOB_NUMBER} " ]]; then - echo Finishing as job ${JOB_NUMBER} is not on a list = $JOB_NUMBERS; + echo --- Finishing as job ${JOB_NUMBER} is not on a list = $JOB_NUMBERS; travis_terminate 0; fi; - - echo -- Configure required LLVM and Ubuntu Toolchain repositories; + - echo --- Configure required LLVM and Ubuntu Toolchain repositories; if [[ "$TRAVIS_OS_NAME" == "linux" ]] && [[ "$CC" == "clang" ]]; then PACKAGES="llvm-$VERSION-dev $PACKAGES"; curl -sSL "http://apt.llvm.org/llvm-snapshot.gpg.key" | sudo -E apt-key add -; echo "deb http://apt.llvm.org/trusty/ llvm-toolchain-trusty-$VERSION main" | sudo tee -a /etc/apt/sources.list > /dev/null; - sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test; fi; - if [[ "$TRAVIS_OS_NAME" == "linux" ]] && [[ "$CC" == "gcc" ]]; then + if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo -E apt-add-repository -y "ppa:ubuntu-toolchain-r/test"; fi; - - echo -- Update list of packages and download dependencies; + - echo --- Update list of packages and download dependencies; if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then CC=$CC-$VERSION; CXX=$CXX-$VERSION; @@ -143,29 +180,9 @@ script: - ccache --print-config; ccache --zero-stats; - - echo -- Perform Debug or RelWithDebInfo compilation; - if [[ "$INVERTED" == "ON" ]]; then - CMAKE_OPT=" - -DWITH_EMBEDDED_SERVER=OFF - -DWITH_EDITLINE=bundled - -DWITH_LIBEVENT=system - -DWITH_PROTOBUF=system - -DWITH_SSL=system - -DWITH_ZLIB=bundled - -DWITH_ARCHIVE_STORAGE_ENGINE=OFF - -DWITH_BLACKHOLE_STORAGE_ENGINE=OFF - -DWITH_EXAMPLE_STORAGE_ENGINE=ON - -DWITH_FEDERATED_STORAGE_ENGINE=OFF - -DWITH_INNOBASE_STORAGE_ENGINE=OFF - -DWITH_PARTITION_STORAGE_ENGINE=OFF - -DWITH_QUERY_RESPONSE_TIME=ON - -DWITHOUT_PERFSCHEMA_STORAGE_ENGINE=ON - "; - fi; - echo -- BUILD=$BUILD MAINTAINER_MODE=$MAINTAINER_MODE WITHOUT_TOKUDB=$WITHOUT_TOKUDB WITHOUT_ROCKSDB=$WITHOUT_ROCKSDB WITH_MECAB=$WITH_MECAB CMAKE_OPT=\"$CMAKE_OPT\" ENV_VAR_CMAKE_OPT=\"$ENV_VAR_CMAKE_OPT\"; - cmake .. + - echo --- Set cmake parameters; + CMAKE_OPT=" -DCMAKE_BUILD_TYPE=$BUILD - -DMYSQL_MAINTAINER_MODE=$MAINTAINER_MODE -DBUILD_CONFIG=mysql_release -DFEATURE_SET=community -DENABLE_DTRACE=OFF @@ -174,9 +191,50 @@ script: -DWITH_BOOST=../deps -DWITH_KEYRING_VAULT=ON -DWITH_PAM=ON - -DWITH_MECAB=$WITH_MECAB - -DWITHOUT_TOKUDB=$WITHOUT_TOKUDB - -DWITHOUT_ROCKSDB=$WITHOUT_ROCKSDB + "; + if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then + CMAKE_OPT+=" -DMYSQL_MAINTAINER_MODE=ON -DWITH_MECAB=system"; + if [[ "$TRAVIS_REPO_SLUG" == "percona/percona-server" ]]; then + CMAKE_OPT+=" -DWITH_TOKUDB=ON -DWITH_ROCKSDB=ON"; + else + `# disable TokuDB or RocksDB as developers' forks must fit in the 50 min time limit`; + if [[ "$BUILD" == "Debug" ]] && [[ "$CC" == "clang-$VERSION" ]]; then + CMAKE_OPT+=" -DWITH_TOKUDB=OFF -DWITH_ROCKSDB=ON"; + else + CMAKE_OPT+=" -DWITH_TOKUDB=ON -DWITH_ROCKSDB=OFF"; + fi; + fi; + else + CMAKE_OPT="$CMAKE_OPT + -DMYSQL_MAINTAINER_MODE=OFF + -DWITH_PROTOBUF=system + -DWITH_TOKUDB=OFF + -DWITH_ROCKSDB=OFF + "; + fi; + if [[ "$INVERTED" == "ON" ]]; then + CMAKE_OPT="$CMAKE_OPT + -DWITH_EMBEDDED_SERVER=OFF + -DWITH_EDITLINE=bundled + -DWITH_LIBEVENT=system + -DWITH_PROTOBUF=system + -DWITH_SSL=system + -DWITH_ZLIB=bundled + -DWITH_ARCHIVE_STORAGE_ENGINE=OFF + -DWITH_BLACKHOLE_STORAGE_ENGINE=OFF + -DWITH_EXAMPLE_STORAGE_ENGINE=ON + -DWITH_FEDERATED_STORAGE_ENGINE=OFF + -DWITH_INNOBASE_STORAGE_ENGINE=OFF + -DWITH_QUERY_RESPONSE_TIME=ON + -DWITHOUT_PARTITION_STORAGE_ENGINE=ON + -DWITHOUT_PERFSCHEMA_STORAGE_ENGINE=ON + "; + fi; + + - echo --- Perform Debug or RelWithDebInfo compilation; + echo --- CMAKE_OPT=\"$CMAKE_OPT\"; + echo --- ENV_VAR_CMAKE_OPT=\"$ENV_VAR_CMAKE_OPT\"; + cmake .. $CMAKE_OPT $ENV_VAR_CMAKE_OPT - make -j2 From 46871e9ce0e0115bfa3119fa1a8f778a4cace9e4 Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Fri, 30 Mar 2018 09:28:47 -0700 Subject: [PATCH 0713/1221] TDB-110 : Prepare TokuDB for 8.0 TDB-118 : PerconaFT needs -fexceptions flag for ftcxx to compile under 8.0 TDB-84 : PerconaFT fix -Werror=undef TDB-85 : PerconaFT fails to build in 8.0 due use of MYSQL_VERSION_* that is actually not passed down TDB-172 : PerconaFT needs different libraries to link to 8.0 debug sync and PFS - Advancing the git submodule commit pointer to pick up these changes from FT. - This branch will be cherry-picked forward to 5.7 --- storage/tokudb/PerconaFT | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage/tokudb/PerconaFT b/storage/tokudb/PerconaFT index af8783b97f8d..f02e0f418da6 160000 --- a/storage/tokudb/PerconaFT +++ b/storage/tokudb/PerconaFT @@ -1 +1 @@ -Subproject commit af8783b97f8d03da2b76e5e8d30ed256d36e9161 +Subproject commit f02e0f418da6a361f2fc42413094a46f2b1860e1 From 3df52a882db6f1c8af9ac2635287b8387dd35fb3 Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Fri, 30 Mar 2018 09:28:47 -0700 Subject: [PATCH 0714/1221] TDB-110 : Prepare TokuDB for 8.0 TDB-118 : PerconaFT needs -fexceptions flag for ftcxx to compile under 8.0 TDB-84 : PerconaFT fix -Werror=undef TDB-85 : PerconaFT fails to build in 8.0 due use of MYSQL_VERSION_* that is actually not passed down TDB-172 : PerconaFT needs different libraries to link to 8.0 debug sync and PFS - Advancing the git submodule commit pointer to pick up these changes from FT. - This branch will be cherry-picked forward to 5.7 (cherry picked from commit 46871e9ce0e0115bfa3119fa1a8f778a4cace9e4) --- storage/tokudb/PerconaFT | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage/tokudb/PerconaFT b/storage/tokudb/PerconaFT index af8783b97f8d..f02e0f418da6 160000 --- a/storage/tokudb/PerconaFT +++ b/storage/tokudb/PerconaFT @@ -1 +1 @@ -Subproject commit af8783b97f8d03da2b76e5e8d30ed256d36e9161 +Subproject commit f02e0f418da6a361f2fc42413094a46f2b1860e1 From b3f2aec88d778a3f857ccdf39b351814cf1cc116 Mon Sep 17 00:00:00 2001 From: Yura Sorokin Date: Mon, 2 Apr 2018 17:42:40 +0300 Subject: [PATCH 0715/1221] Fixed PS-3937 (Some file operations in mf_iocache2.c are not instrumented) https://jira.percona.com/browse/PS-3937 In 'mf_iocache2.c' my_tell() / my_seek() / my_read() changed to mysql_file_tell() / mysql_file_seek() / mysql_file_read() correspondingly. Re-recorded 'perfschema.relaylog' MTR test case as proper values are now reported in 'count_read' / 'sum_number_of_bytes_read' fields in 'performance_schema.file_summary_by_instance' table. --- mysql-test/suite/perfschema/r/relaylog.result | 12 ++++++------ mysys/mf_iocache2.c | 14 +++++++------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/mysql-test/suite/perfschema/r/relaylog.result b/mysql-test/suite/perfschema/r/relaylog.result index 0a7d0a5b2be4..88cd2e350684 100644 --- a/mysql-test/suite/perfschema/r/relaylog.result +++ b/mysql-test/suite/perfschema/r/relaylog.result @@ -20,7 +20,7 @@ from performance_schema.file_summary_by_instance where file_name like "%master-%" order by file_name; FILE_NAME EVENT_NAME COUNT_READ COUNT_WRITE SUM_NUMBER_OF_BYTES_READ SUM_NUMBER_OF_BYTES_WRITE master-bin.000001 wait/io/file/sql/binlog MANY MANY MANY MANY -master-bin.index wait/io/file/sql/binlog_index NONE MANY NONE MANY +master-bin.index wait/io/file/sql/binlog_index MANY MANY MANY MANY select * from performance_schema.file_summary_by_instance where file_name like "%slave-%" order by file_name; FILE_NAME EVENT_NAME COUNT_READ COUNT_WRITE SUM_NUMBER_OF_BYTES_READ SUM_NUMBER_OF_BYTES_WRITE @@ -36,7 +36,7 @@ from performance_schema.file_summary_by_instance where event_name like "%binlog%" order by file_name; FILE_NAME EVENT_NAME COUNT_READ COUNT_WRITE SUM_NUMBER_OF_BYTES_READ SUM_NUMBER_OF_BYTES_WRITE master-bin.000001 wait/io/file/sql/binlog MANY MANY MANY MANY -master-bin.index wait/io/file/sql/binlog_index NONE MANY NONE MANY +master-bin.index wait/io/file/sql/binlog_index MANY MANY MANY MANY select EVENT_NAME, if (count_read > 0, "MANY", "NONE") as COUNT_READ, @@ -47,7 +47,7 @@ from performance_schema.file_summary_by_event_name where event_name like "%binlog%" order by event_name; EVENT_NAME COUNT_READ COUNT_WRITE SUM_NUMBER_OF_BYTES_READ SUM_NUMBER_OF_BYTES_WRITE wait/io/file/sql/binlog MANY MANY MANY MANY -wait/io/file/sql/binlog_index NONE MANY NONE MANY +wait/io/file/sql/binlog_index MANY MANY MANY MANY select EVENT_NAME, if (count_star > 0, "MANY", "NONE") as COUNT_STAR @@ -93,7 +93,7 @@ where file_name like "%slave-%" order by file_name; FILE_NAME EVENT_NAME COUNT_READ COUNT_WRITE SUM_NUMBER_OF_BYTES_READ SUM_NUMBER_OF_BYTES_WRITE slave-bin.000001 wait/io/file/sql/binlog MANY MANY MANY MANY -slave-bin.index wait/io/file/sql/binlog_index NONE MANY NONE MANY +slave-bin.index wait/io/file/sql/binlog_index MANY MANY MANY MANY slave-relay-bin.000001 wait/io/file/sql/relaylog MANY MANY MANY MANY slave-relay-bin.000002 wait/io/file/sql/relaylog MANY MANY MANY MANY slave-relay-bin.index wait/io/file/sql/relaylog_index MANY MANY MANY MANY @@ -109,7 +109,7 @@ from performance_schema.file_summary_by_instance where event_name like "%binlog%" order by file_name; FILE_NAME EVENT_NAME COUNT_READ COUNT_WRITE SUM_NUMBER_OF_BYTES_READ SUM_NUMBER_OF_BYTES_WRITE slave-bin.000001 wait/io/file/sql/binlog MANY MANY MANY MANY -slave-bin.index wait/io/file/sql/binlog_index NONE MANY NONE MANY +slave-bin.index wait/io/file/sql/binlog_index MANY MANY MANY MANY select EVENT_NAME, if (count_read > 0, "MANY", "NONE") as COUNT_READ, @@ -120,7 +120,7 @@ from performance_schema.file_summary_by_event_name where event_name like "%binlog%" order by event_name; EVENT_NAME COUNT_READ COUNT_WRITE SUM_NUMBER_OF_BYTES_READ SUM_NUMBER_OF_BYTES_WRITE wait/io/file/sql/binlog MANY MANY MANY MANY -wait/io/file/sql/binlog_index NONE MANY NONE MANY +wait/io/file/sql/binlog_index MANY MANY MANY MANY select EVENT_NAME, if (count_star > 0, "MANY", "NONE") as COUNT_STAR diff --git a/mysys/mf_iocache2.c b/mysys/mf_iocache2.c index 90980af08844..12b5d21c03ea 100644 --- a/mysys/mf_iocache2.c +++ b/mysys/mf_iocache2.c @@ -102,14 +102,14 @@ my_off_t my_b_append_tell(IO_CACHE* info) */ { volatile my_off_t save_pos; - save_pos = my_tell(info->file,MYF(0)); - my_seek(info->file,(my_off_t)0,MY_SEEK_END,MYF(0)); + save_pos= mysql_file_tell(info->file, MYF(0)); + mysql_file_seek(info->file, (my_off_t)0, MY_SEEK_END,MYF(0)); /* Save the value of my_tell in res so we can see it when studying coredump */ DBUG_ASSERT(info->end_of_file - (info->append_read_pos-info->write_buffer) - == (res=my_tell(info->file,MYF(0)))); - my_seek(info->file,save_pos,MY_SEEK_SET,MYF(0)); + == (res= mysql_file_tell(info->file, MYF(0)))); + mysql_file_seek(info->file, save_pos, MY_SEEK_SET,MYF(0)); } #endif res = info->end_of_file + (info->write_pos-info->append_read_pos); @@ -203,7 +203,7 @@ size_t my_b_fill(IO_CACHE *info) if (info->seek_not_done) { /* File touched, do seek */ - if (my_seek(info->file,pos_in_file,MY_SEEK_SET,MYF(0)) == + if (mysql_file_seek(info->file, pos_in_file, MY_SEEK_SET,MYF(0)) == MY_FILEPOS_ERROR) { info->error= 0; @@ -223,7 +223,7 @@ size_t my_b_fill(IO_CACHE *info) } DBUG_EXECUTE_IF ("simulate_my_b_fill_error", {DBUG_SET("+d,simulate_file_read_error");}); - if ((length= my_read(info->file,info->buffer,max_length, + if ((length= mysql_file_read(info->file, info->buffer, max_length, info->myflags)) == (size_t) -1) { info->error= -1; @@ -287,7 +287,7 @@ my_off_t my_b_filelength(IO_CACHE *info) return my_b_tell(info); info->seek_not_done= 1; - return my_seek(info->file, 0L, MY_SEEK_END, MYF(0)); + return mysql_file_seek(info->file, 0L, MY_SEEK_END, MYF(0)); } From 1ffd7965a5edd7a0742dd1719f4cd4e03e12abce Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Thu, 8 Mar 2018 18:28:49 +0100 Subject: [PATCH 0716/1221] Bug#27558169 BACKPORT TO 5.7 BUG #26826272: REMOVE GCC 8 WARNINGS [noclose] MySQL 5.7 should compile warning-free (ie., maintainer mode should work) also with GCC 8. This is a backport of similar patches from current MySQL trunk. This patch fixes all warnings in optimized build Change-Id: Ia157b96c019f056a16ba47f1f5c5ae4d03c1a19d --- client/mysqlbinlog.cc | 2 +- client/mysqldump.c | 5 +- libbinlogevents/src/control_events.cpp | 2 +- .../include/recovery_state_transfer.h | 16 +-- sql/item_strfunc.cc | 10 +- sql/rpl_binlog_sender.h | 8 +- sql/rpl_rli.cc | 4 +- sql/sql_prepare.cc | 6 +- storage/innobase/dict/dict0dict.cc | 8 +- storage/innobase/include/dict0crea.ic | 4 +- storage/innobase/include/mem0mem.ic | 7 +- storage/innobase/row/row0mysql.cc | 4 +- storage/innobase/row/row0trunc.cc | 2 +- storage/myisam/mi_dynrec.c | 3 +- storage/perfschema/pfs_instr.cc | 6 +- storage/perfschema/pfs_instr_class.cc | 4 +- unittest/gunit/CMakeLists.txt | 1 + unittest/gunit/mock_field_long.h | 5 +- unittest/gunit/my_snprintf-t.cc | 113 ++++++++++++++++++ 19 files changed, 167 insertions(+), 43 deletions(-) create mode 100644 unittest/gunit/my_snprintf-t.cc diff --git a/client/mysqlbinlog.cc b/client/mysqlbinlog.cc index 1181104d5c4c..b118e1138ddc 100644 --- a/client/mysqlbinlog.cc +++ b/client/mysqlbinlog.cc @@ -124,7 +124,7 @@ rewrite_db(char **buf, ulong *buf_size, *buf_size - (offset_db + old_db_len)); // Write new_db and new_db_len. - strncpy((*buf) + offset_db, new_db, new_db_len); + memcpy((*buf) + offset_db, new_db, new_db_len); (*buf)[offset_len]= (char) new_db_len; // Update event length in header. diff --git a/client/mysqldump.c b/client/mysqldump.c index ef77a38e0f99..86cff842d173 100644 --- a/client/mysqldump.c +++ b/client/mysqldump.c @@ -1482,6 +1482,7 @@ static char *cover_definer_clause(const char *stmt_str, char *query_str= NULL; char *query_ptr; + LEX_CSTRING comment= { C_STRING_WITH_LEN("*/ /*!") }; if (!definer_begin) return NULL; @@ -1499,10 +1500,10 @@ static char *cover_definer_clause(const char *stmt_str, query_str= alloc_query_str(stmt_length + 23); query_ptr= my_stpncpy(query_str, stmt_str, definer_begin - stmt_str); - query_ptr= my_stpncpy(query_ptr, C_STRING_WITH_LEN("*/ /*!")); + query_ptr= my_stpncpy(query_ptr, comment.str, comment.length + 1); query_ptr= my_stpncpy(query_ptr, definer_version_str, definer_version_length); query_ptr= my_stpncpy(query_ptr, definer_begin, definer_end - definer_begin); - query_ptr= my_stpncpy(query_ptr, C_STRING_WITH_LEN("*/ /*!")); + query_ptr= my_stpncpy(query_ptr, comment.str, comment.length + 1); query_ptr= my_stpncpy(query_ptr, stmt_version_str, stmt_version_length); query_ptr= strxmov(query_ptr, definer_end, NullS); diff --git a/libbinlogevents/src/control_events.cpp b/libbinlogevents/src/control_events.cpp index 606708e5dbb9..cbd7169c453a 100644 --- a/libbinlogevents/src/control_events.cpp +++ b/libbinlogevents/src/control_events.cpp @@ -99,7 +99,7 @@ Format_description_event::Format_description_event(uint8_t binlog_ver, in getting rid of the valgrind errors. */ memset(server_version, 0, ST_SERVER_VER_LEN); - strncpy(server_version, server_ver, ST_SERVER_VER_LEN); + strncpy(server_version, server_ver, ST_SERVER_VER_LEN - 1); if (binary_log_debug::debug_pretend_version_50034_in_binlog) strcpy(server_version, "5.0.34"); common_header_len= LOG_EVENT_HEADER_LEN; diff --git a/rapid/plugin/group_replication/include/recovery_state_transfer.h b/rapid/plugin/group_replication/include/recovery_state_transfer.h index e0c902c94388..d4252d66b300 100644 --- a/rapid/plugin/group_replication/include/recovery_state_transfer.h +++ b/rapid/plugin/group_replication/include/recovery_state_transfer.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -122,43 +122,43 @@ class Recovery_state_transfer /** Set a SSL trusted certificate authorities file */ void set_recovery_ssl_ca(const char* ssl_ca) { - (void) strncpy(recovery_ssl_ca, ssl_ca, strlen(ssl_ca)+1); + memcpy(recovery_ssl_ca, ssl_ca, strlen(ssl_ca)+1); } /** Set a folder with SSL trusted CA files */ void set_recovery_ssl_capath(const char* ssl_capath) { - (void) strncpy(recovery_ssl_capath, ssl_capath, strlen(ssl_capath)+1); + memcpy(recovery_ssl_capath, ssl_capath, strlen(ssl_capath)+1); } /** Set a SSL certificate for connection */ void set_recovery_ssl_cert(const char* ssl_cert) { - (void) strncpy(recovery_ssl_cert, ssl_cert, strlen(ssl_cert)+1); + memcpy(recovery_ssl_cert, ssl_cert, strlen(ssl_cert)+1); } /** Set a SSL ciphers to be used */ void set_recovery_ssl_cipher(const char* ssl_cipher) { - (void) strncpy(recovery_ssl_cipher, ssl_cipher, strlen(ssl_cipher)+1); + memcpy(recovery_ssl_cipher, ssl_cipher, strlen(ssl_cipher)+1); } /** Set a SSL key for connections */ void set_recovery_ssl_key(const char* ssl_key) { - (void) strncpy(recovery_ssl_key, ssl_key, strlen(ssl_key)+1); + memcpy(recovery_ssl_key, ssl_key, strlen(ssl_key)+1); } /** Set a SSL revocation list file*/ void set_recovery_ssl_crl(const char* ssl_crl) { - (void) strncpy(recovery_ssl_crl, ssl_crl, strlen(ssl_crl)+1); + memcpy(recovery_ssl_crl, ssl_crl, strlen(ssl_crl)+1); } /** Set a folder with SSL revocation list files*/ void set_recovery_ssl_crlpath(const char* ssl_crlpath) { - (void) strncpy(recovery_ssl_crlpath, ssl_crlpath, strlen(ssl_crlpath)+1); + memcpy(recovery_ssl_crlpath, ssl_crlpath, strlen(ssl_crlpath)+1); } /** Set if recovery shall compare the used hostname against the certificate */ diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc index bae2c7303d9c..2e813f5a4bc0 100644 --- a/sql/item_strfunc.cc +++ b/sql/item_strfunc.cc @@ -3186,14 +3186,15 @@ String *Item_func_format::val_str_ascii(String *str) str_length >= dec_length + 1 + lc->grouping[0]) { /* We need space for ',' between each group of digits as well. */ - char buf[2 * FLOATING_POINT_BUFFER]; + char buf[2 * FLOATING_POINT_BUFFER + 2] = {0}; int count; const char *grouping= lc->grouping; char sign_length= *str->ptr() == '-' ? 1 : 0; const char *src= str->ptr() + str_length - dec_length - 1; const char *src_begin= str->ptr() + sign_length; - char *dst= buf + sizeof(buf); - + char *dst= buf + 2 * FLOATING_POINT_BUFFER; + char *start_dst = dst; + /* Put the fractional part */ if (dec) { @@ -3225,7 +3226,8 @@ String *Item_func_format::val_str_ascii(String *str) *--dst= *str->ptr(); /* Put the rest of the integer part without grouping */ - str->copy(dst, buf + sizeof(buf) - dst, &my_charset_latin1); + size_t result_length = start_dst - dst; + str->copy(dst, result_length, &my_charset_latin1); } else if (dec_length && lc->decimal_point != '.') { diff --git a/sql/rpl_binlog_sender.h b/sql/rpl_binlog_sender.h index 23ace68bbf41..806f6b96d204 100644 --- a/sql/rpl_binlog_sender.h +++ b/sql/rpl_binlog_sender.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -20,6 +20,7 @@ #include "my_global.h" #include "binlog.h" // LOG_INFO #include "binlog_event.h" // enum_binlog_checksum_alg, Log_event_type +#include "m_string.h" #include "mysqld_error.h" // ER_* #include "sql_error.h" // Diagnostics_area @@ -366,9 +367,8 @@ class Binlog_sender bool has_error() { return m_errno != 0; } void set_error(int errorno, const char *errmsg) { - // Need to set the final '\0' since strncpy does not do that. - strncpy(m_errmsg_buf, errmsg, sizeof(m_errmsg_buf) - 1); - m_errmsg_buf[sizeof(m_errmsg_buf) - 1]= '\0'; + my_snprintf(m_errmsg_buf, sizeof(m_errmsg_buf), "%.*s", + MYSQL_ERRMSG_SIZE - 1, errmsg); m_errmsg= m_errmsg_buf; m_errno= errorno; } diff --git a/sql/rpl_rli.cc b/sql/rpl_rli.cc index d12de317bf54..ad6594840920 100644 --- a/sql/rpl_rli.cc +++ b/sql/rpl_rli.cc @@ -18,6 +18,7 @@ #include "my_dir.h" // MY_STAT #include "log.h" // sql_print_error #include "log_event.h" // Log_event +#include "m_string.h" #include "rpl_group_replication.h" // set_group_replication_retrieved_certifi... #include "rpl_info_factory.h" // Rpl_info_factory #include "rpl_mi.h" // Master_info @@ -691,7 +692,8 @@ void Relay_log_info::fill_coord_err_buf(loglevel level, int err_code, if(level == ERROR_LEVEL) { m_last_error.number = err_code; - strncpy(m_last_error.message, buff_coord, MAX_SLAVE_ERRMSG); + my_snprintf(m_last_error.message, sizeof(m_last_error.message), "%.*s", + MAX_SLAVE_ERRMSG - 1, buff_coord); m_last_error.update_timestamp(); } diff --git a/sql/sql_prepare.cc b/sql/sql_prepare.cc index df9a527fcdad..3b6dfaa5086b 100644 --- a/sql/sql_prepare.cc +++ b/sql/sql_prepare.cc @@ -86,6 +86,7 @@ When one supplies long data for a placeholder: #include "sql_prepare.h" #include "auth_common.h" // insert_precheck #include "log.h" // query_logger +#include "m_string.h" #include "opt_trace.h" // Opt_trace_array #include "probes_mysql.h" // MYSQL_QUERY_EXEC_START #include "set_var.h" // set_var_base @@ -2835,9 +2836,8 @@ void mysql_stmt_get_longdata(THD *thd, ulong stmt_id, uint param_number, { stmt->state= Query_arena::STMT_ERROR; stmt->last_errno= thd->get_stmt_da()->mysql_errno(); - size_t len= sizeof(stmt->last_error); - strncpy(stmt->last_error, thd->get_stmt_da()->message_text(), len - 1); - stmt->last_error[len - 1] = '\0'; + my_snprintf(stmt->last_error, sizeof(stmt->last_error), "%.*s", + MYSQL_ERRMSG_SIZE - 1, thd->get_stmt_da()->message_text()); } thd->pop_diagnostics_area(); diff --git a/storage/innobase/dict/dict0dict.cc b/storage/innobase/dict/dict0dict.cc index 8911d60222c1..43e9bd37bdf2 100644 --- a/storage/innobase/dict/dict0dict.cc +++ b/storage/innobase/dict/dict0dict.cc @@ -1927,7 +1927,7 @@ dict_table_rename_in_cache( ulint db_len; char* old_id; - char old_name_cs_filename[MAX_TABLE_NAME_LEN+20]; + char old_name_cs_filename[MAX_FULL_NAME_LEN + 1]; uint errors = 0; /* All table names are internally stored in charset @@ -1944,7 +1944,7 @@ dict_table_rename_in_cache( in old_name_cs_filename */ strncpy(old_name_cs_filename, old_name, - MAX_TABLE_NAME_LEN); + sizeof(old_name_cs_filename)); if (strstr(old_name, TEMP_TABLE_PATH_PREFIX) == NULL) { innobase_convert_to_system_charset( @@ -1966,7 +1966,7 @@ dict_table_rename_in_cache( /* Old name already in my_charset_filename */ strncpy(old_name_cs_filename, old_name, - MAX_TABLE_NAME_LEN); + sizeof(old_name_cs_filename)); } } @@ -1992,7 +1992,7 @@ dict_table_rename_in_cache( /* This is a generated >= 4.0.18 format id */ - char table_name[MAX_TABLE_NAME_LEN] = ""; + char table_name[MAX_TABLE_NAME_LEN + 1] = ""; uint errors = 0; if (strlen(table->name.m_name) diff --git a/storage/innobase/include/dict0crea.ic b/storage/innobase/include/dict0crea.ic index 565e4ed1a8cf..c79b80581f80 100644 --- a/storage/innobase/include/dict0crea.ic +++ b/storage/innobase/include/dict0crea.ic @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2018, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -68,7 +68,7 @@ dict_create_add_foreign_id( sprintf(id, "%s_ibfk_%lu", name, (ulong) (*id_nr)++); } else { - char table_name[MAX_TABLE_NAME_LEN + 20] = ""; + char table_name[MAX_TABLE_NAME_LEN + 20 + 1] = ""; uint errors = 0; strncpy(table_name, name, diff --git a/storage/innobase/include/mem0mem.ic b/storage/innobase/include/mem0mem.ic index 3b4109ee52d0..a12c58b542cd 100644 --- a/storage/innobase/include/mem0mem.ic +++ b/storage/innobase/include/mem0mem.ic @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1994, 2014, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1994, 2018, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -590,7 +590,10 @@ mem_strdupl( { char* s = static_cast(ut_malloc_nokey(len + 1)); s[len] = 0; - return(static_cast(memcpy(s, str, len))); + if (len > 0) { + memcpy(s, str, len); + } + return s; } /**********************************************************************//** diff --git a/storage/innobase/row/row0mysql.cc b/storage/innobase/row/row0mysql.cc index ac180fd95651..70258b2f0b18 100644 --- a/storage/innobase/row/row0mysql.cc +++ b/storage/innobase/row/row0mysql.cc @@ -5381,8 +5381,8 @@ row_rename_table_for_mysql( if (!new_is_tmp) { /* Rename all constraints. */ - char new_table_name[MAX_TABLE_NAME_LEN] = ""; - char old_table_utf8[MAX_TABLE_NAME_LEN] = ""; + char new_table_name[MAX_TABLE_NAME_LEN + 1] = ""; + char old_table_utf8[MAX_TABLE_NAME_LEN + 1] = ""; uint errors = 0; strncpy(old_table_utf8, old_name, MAX_TABLE_NAME_LEN); diff --git a/storage/innobase/row/row0trunc.cc b/storage/innobase/row/row0trunc.cc index 4db21ea54e6e..c71387107a4d 100644 --- a/storage/innobase/row/row0trunc.cc +++ b/storage/innobase/row/row0trunc.cc @@ -617,7 +617,7 @@ TruncateLogParser::scan( } memset(log_file_name, 0, sz); - strncpy(log_file_name, dir_path, dir_len); + memcpy(log_file_name, dir_path, dir_len); ulint log_file_name_len = strlen(log_file_name); if (log_file_name[log_file_name_len - 1] != OS_PATH_SEPARATOR) { diff --git a/storage/myisam/mi_dynrec.c b/storage/myisam/mi_dynrec.c index 16e4fbbc9ea7..e823efd50793 100644 --- a/storage/myisam/mi_dynrec.c +++ b/storage/myisam/mi_dynrec.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -793,6 +793,7 @@ 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; + block_info.next_filepos= HA_OFFSET_ERROR; /* Check if we have enough room for the record. First we do simplified check to make usual case faster. diff --git a/storage/perfschema/pfs_instr.cc b/storage/perfschema/pfs_instr.cc index 4d3cb4bb6789..23a24daf57c2 100644 --- a/storage/perfschema/pfs_instr.cc +++ b/storage/perfschema/pfs_instr.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2008, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2008, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -864,7 +864,7 @@ find_or_create_file(PFS_thread *thread, PFS_file_class *klass, pfs->m_class= klass; pfs->m_enabled= klass->m_enabled && flag_global_instrumentation; pfs->m_timed= klass->m_timed; - strncpy(pfs->m_filename, normalized_filename, normalized_length); + memcpy(pfs->m_filename, normalized_filename, normalized_length); pfs->m_filename[normalized_length]= '\0'; pfs->m_filename_length= normalized_length; pfs->m_file_stat.m_open_count= 1; @@ -1038,7 +1038,7 @@ void find_and_rename_file(PFS_thread *thread, const char *old_filename, normalized_filename= buffer; normalized_length= (uint)strlen(normalized_filename); - strncpy(pfs->m_filename, normalized_filename, normalized_length); + memcpy(pfs->m_filename, normalized_filename, normalized_length); pfs->m_filename[normalized_length]= '\0'; pfs->m_filename_length= normalized_length; diff --git a/storage/perfschema/pfs_instr_class.cc b/storage/perfschema/pfs_instr_class.cc index 35631bb2ea92..12587896db78 100644 --- a/storage/perfschema/pfs_instr_class.cc +++ b/storage/perfschema/pfs_instr_class.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2008, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -999,7 +999,7 @@ static void init_instr_class(PFS_instr_class *klass, { DBUG_ASSERT(name_length <= PFS_MAX_INFO_NAME_LENGTH); memset(klass, 0, sizeof(PFS_instr_class)); - strncpy(klass->m_name, name, name_length); + memcpy(klass->m_name, name, name_length); klass->m_name_length= name_length; klass->m_flags= flags; klass->m_enabled= true; diff --git a/unittest/gunit/CMakeLists.txt b/unittest/gunit/CMakeLists.txt index d4840ebba95e..f37505dbd816 100644 --- a/unittest/gunit/CMakeLists.txt +++ b/unittest/gunit/CMakeLists.txt @@ -276,6 +276,7 @@ SET(TESTS my_murmur3 my_qsort_vs_stdsort my_regex + my_snprintf my_thread mysys_base64 mysys_lf diff --git a/unittest/gunit/mock_field_long.h b/unittest/gunit/mock_field_long.h index d64eb01c327c..1a53e304f2ea 100644 --- a/unittest/gunit/mock_field_long.h +++ b/unittest/gunit/mock_field_long.h @@ -1,6 +1,6 @@ #ifndef MOCK_FIELD_LONG_INCLUDED #define MOCK_FIELD_LONG_INCLUDED -/* Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -15,6 +15,7 @@ along with this program; if not, write to the Free Software Foundation, 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */ +#include "m_string.h" #include "field.h" /* @@ -37,7 +38,7 @@ class Mock_field_long : public Field_long table_name= &table_name_buf; if (name) { - strncpy(m_name, name, 1024); + my_snprintf(m_name, sizeof(m_name), "%.1023s", name); field_name= m_name; } } diff --git a/unittest/gunit/my_snprintf-t.cc b/unittest/gunit/my_snprintf-t.cc new file mode 100644 index 000000000000..8819443b291d --- /dev/null +++ b/unittest/gunit/my_snprintf-t.cc @@ -0,0 +1,113 @@ +/* Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + + 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 Street, Fifth Floor, Boston, MA 02110-1301, USA */ + +#include "my_config.h" +#include +#include + +#include "m_string.h" +#include "mysql_com.h" + +namespace my_snprintf_unittest { + +using std::string; + +string sss= string(2 * MYSQL_ERRMSG_SIZE, 'a'); + +class SnPrintfTest : public ::testing::Test +{ +public: + virtual void SetUp() + { + compile_time_assert(MYSQL_ERRMSG_SIZE == 512); + memset(m_errmsg_buf, 'x', sizeof(m_errmsg_buf)); + } + + char m_errmsg_buf[MYSQL_ERRMSG_SIZE * 2]; +}; + +TEST_F(SnPrintfTest, FixedPrecisionOne) +{ + EXPECT_EQ(1, my_snprintf(m_errmsg_buf, MYSQL_ERRMSG_SIZE, + "%.1s", sss.data())); + EXPECT_EQ('a', m_errmsg_buf[0]); + EXPECT_EQ('\0', m_errmsg_buf[1]); + EXPECT_EQ('x', m_errmsg_buf[2]); +} + +TEST_F(SnPrintfTest, FixedPrecisionTwo) +{ + EXPECT_EQ(511, my_snprintf(m_errmsg_buf, MYSQL_ERRMSG_SIZE, + "%.511s", sss.data())); + EXPECT_EQ('a', m_errmsg_buf[0]); + EXPECT_EQ('\0', m_errmsg_buf[511]); + EXPECT_EQ('x', m_errmsg_buf[512]); +} + +TEST_F(SnPrintfTest, FixedPrecisionThree) +{ + EXPECT_EQ(511, my_snprintf(m_errmsg_buf, MYSQL_ERRMSG_SIZE, + "%.512s", sss.data())); + EXPECT_EQ('a', m_errmsg_buf[0]); + EXPECT_EQ('\0', m_errmsg_buf[511]); + EXPECT_EQ('x', m_errmsg_buf[512]); +} + +TEST_F(SnPrintfTest, FixedPrecisionFour) +{ + EXPECT_EQ(511, my_snprintf(m_errmsg_buf, MYSQL_ERRMSG_SIZE, + "%.1000s", sss.data())); + EXPECT_EQ('a', m_errmsg_buf[0]); + EXPECT_EQ('\0', m_errmsg_buf[511]); + EXPECT_EQ('x', m_errmsg_buf[512]); +} + +TEST_F(SnPrintfTest, DynamicPrecisionOne) +{ + EXPECT_EQ(1, my_snprintf(m_errmsg_buf, MYSQL_ERRMSG_SIZE, + "%.*s", 1, sss.data())); + EXPECT_EQ('a', m_errmsg_buf[0]); + EXPECT_EQ('\0', m_errmsg_buf[1]); + EXPECT_EQ('x', m_errmsg_buf[2]); +} + +TEST_F(SnPrintfTest, DynamicPrecisionTwo) +{ + EXPECT_EQ(511, my_snprintf(m_errmsg_buf, MYSQL_ERRMSG_SIZE, + "%.*s", 511, sss.data())); + EXPECT_EQ('a', m_errmsg_buf[0]); + EXPECT_EQ('\0', m_errmsg_buf[511]); + EXPECT_EQ('x', m_errmsg_buf[512]); +} + +TEST_F(SnPrintfTest, DynamicPrecisionThree) +{ + EXPECT_EQ(511, my_snprintf(m_errmsg_buf, MYSQL_ERRMSG_SIZE, + "%.*s", 512, sss.data())); + EXPECT_EQ('a', m_errmsg_buf[0]); + EXPECT_EQ('\0', m_errmsg_buf[511]); + EXPECT_EQ('x', m_errmsg_buf[512]); +} + +TEST_F(SnPrintfTest, DynamicPrecisionFour) +{ + EXPECT_EQ(511, my_snprintf(m_errmsg_buf, MYSQL_ERRMSG_SIZE, + "%.*s", 1000, sss.data())); + EXPECT_EQ('a', m_errmsg_buf[0]); + EXPECT_EQ('\0', m_errmsg_buf[511]); + EXPECT_EQ('x', m_errmsg_buf[512]); +} + +} // namespace From 13390e903973404c0c232152cd0cc717d0c1a151 Mon Sep 17 00:00:00 2001 From: Laurynas Biveinis Date: Fri, 23 Sep 2016 11:05:55 +0300 Subject: [PATCH 0717/1221] PS-235: query_response_time_session_stats variable --- plugin/query_response_time/plugin.cc | 30 ++++- .../query_response_time/query_response_time.h | 3 - .../tests/mtr/basic.result | 1 + .../tests/mtr/session_toggle.result | 113 ++++++++++++++++++ .../tests/mtr/session_toggle.test | 106 ++++++++++++++++ 5 files changed, 248 insertions(+), 5 deletions(-) create mode 100644 plugin/query_response_time/tests/mtr/session_toggle.result create mode 100644 plugin/query_response_time/tests/mtr/session_toggle.test diff --git a/plugin/query_response_time/plugin.cc b/plugin/query_response_time/plugin.cc index 1d5dd8783c76..0845076f1fdc 100644 --- a/plugin/query_response_time/plugin.cc +++ b/plugin/query_response_time/plugin.cc @@ -24,7 +24,7 @@ ulong opt_query_response_time_range_base= QRT_DEFAULT_BASE; -my_bool opt_query_response_time_stats= FALSE; +static my_bool opt_query_response_time_stats= FALSE; static my_bool opt_query_response_time_flush= FALSE; @@ -60,6 +60,22 @@ static MYSQL_THDVAR_ULONGLONG(exec_time_debug, PLUGIN_VAR_NOCMDOPT, NULL, NULL, 0, 0, LONG_TIMEOUT, 1); #endif +enum session_stat +{ + session_stat_global, + session_stat_on, + session_stat_off +}; + +static const char *session_stat_names[]= {"GLOBAL", "ON", "OFF"}; +static TYPELIB session_stat_typelib= { array_elements(session_stat_names) - 1, + "", session_stat_names, NULL}; + +static MYSQL_THDVAR_ENUM(session_stats, PLUGIN_VAR_RQCMDARG, + "Controls query response time statistics collection for the current " + "session: ON - enable, OFF - disable, GLOBAL - use " + "query_response_time_stats value", NULL, NULL, + session_stat_global, &session_stat_typelib); static struct st_mysql_sys_var *query_response_time_info_vars[]= { @@ -69,6 +85,7 @@ static struct st_mysql_sys_var *query_response_time_info_vars[]= #ifndef DBUG_OFF MYSQL_SYSVAR(exec_time_debug), #endif + MYSQL_SYSVAR(session_stats), NULL }; @@ -133,6 +150,15 @@ static int query_response_time_info_deinit(void *arg __attribute__((unused))) static struct st_mysql_information_schema query_response_time_info_descriptor= { MYSQL_INFORMATION_SCHEMA_INTERFACE_VERSION }; +static bool query_response_time_should_log(MYSQL_THD thd) +{ + const enum session_stat session_stat_val + = static_cast(THDVAR(thd, session_stats)); + return (session_stat_val == session_stat_on) + || (session_stat_val == session_stat_global + && opt_query_response_time_stats); +} + static void query_response_time_audit_notify(MYSQL_THD thd, unsigned int event_class, const void *event) @@ -141,7 +167,7 @@ static void query_response_time_audit_notify(MYSQL_THD thd, (const struct mysql_event_general *) event; DBUG_ASSERT(event_class == MYSQL_AUDIT_GENERAL_CLASS); if (event_general->event_subclass == MYSQL_AUDIT_GENERAL_STATUS && - opt_query_response_time_stats) + query_response_time_should_log(thd)) { /* Get sql command id of currently executed statement diff --git a/plugin/query_response_time/query_response_time.h b/plugin/query_response_time/query_response_time.h index 474d867e5f47..a2cca0b053d9 100644 --- a/plugin/query_response_time/query_response_time.h +++ b/plugin/query_response_time/query_response_time.h @@ -73,8 +73,6 @@ enum QUERY_TYPE WRITE= 2 }; -extern ST_SCHEMA_TABLE query_response_time_table; - typedef class Item COND; extern void query_response_time_init (); @@ -89,6 +87,5 @@ extern int query_response_time_fill_rw(THD* thd, TABLE_LIST *tables, COND *cond); extern ulong opt_query_response_time_range_base; -extern my_bool opt_query_response_time_stats; #endif // QUERY_RESPONSE_TIME_H diff --git a/plugin/query_response_time/tests/mtr/basic.result b/plugin/query_response_time/tests/mtr/basic.result index 0e6c543dfa5e..c113f554d69e 100644 --- a/plugin/query_response_time/tests/mtr/basic.result +++ b/plugin/query_response_time/tests/mtr/basic.result @@ -3,6 +3,7 @@ SHOW VARIABLES WHERE VARIABLE_NAME LIKE 'query_response_time%' AND VARIABLE_NAME Variable_name Value query_response_time_flush OFF query_response_time_range_base 10 +query_response_time_session_stats GLOBAL query_response_time_stats OFF SHOW CREATE TABLE INFORMATION_SCHEMA.QUERY_RESPONSE_TIME; Table Create Table diff --git a/plugin/query_response_time/tests/mtr/session_toggle.result b/plugin/query_response_time/tests/mtr/session_toggle.result new file mode 100644 index 000000000000..8ba59ae2b380 --- /dev/null +++ b/plugin/query_response_time/tests/mtr/session_toggle.result @@ -0,0 +1,113 @@ +# +# Tests for query_response_time_session_stats variable +# +SET @saved_query_response_time_stats = @@GLOBAL.query_response_time_stats; +SET @saved_query_response_time_flush = @@GLOBAL.query_response_time_flush; +SET GLOBAL query_response_time_flush= 'ON'; +SELECT SUM(COUNT) FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME; +SUM(COUNT) +0 +# global: ON, session: default(GLOBAL): must be logged +SET GLOBAL query_response_time_stats= 'ON'; +SELECT 1; +1 +1 +SELECT SUM(COUNT) FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME; +SUM(COUNT) +2 +# global: OFF, session: default(GLOBAL): must not be logged +SET GLOBAL query_response_time_stats= 'OFF'; +SELECT 1; +1 +1 +SELECT SUM(COUNT) FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME; +SUM(COUNT) +3 +# global: ON, session: GLOBAL: must be logged +SET GLOBAL query_response_time_stats= 'ON'; +SET SESSION query_response_time_session_stats= 'GLOBAL'; +SELECT 1; +1 +1 +SELECT SUM(COUNT) FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME; +SUM(COUNT) +6 +# global: OFF, session: GLOBAL: must not be logged +SET GLOBAL query_response_time_stats= 'OFF'; +SELECT 1; +1 +1 +SELECT SUM(COUNT) FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME; +SUM(COUNT) +7 +# global: OFF, session: OFF: must not be logged +SET SESSION query_response_time_session_stats= 'OFF'; +SELECT 1; +1 +1 +SELECT SUM(COUNT) FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME; +SUM(COUNT) +7 +# global: ON, session: OFF: must not be logged +SELECT 1; +1 +1 +SELECT SUM(COUNT) FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME; +SUM(COUNT) +7 +# global: ON: session: ON: must be logged +SET SESSION query_response_time_session_stats= 'ON'; +SELECT 1; +1 +1 +SELECT SUM(COUNT) FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME; +SUM(COUNT) +9 +# global: OFF: session: ON: must be logged +SET GLOBAL query_response_time_stats= 'OFF'; +SELECT 1; +1 +1 +SELECT SUM(COUNT) FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME; +SUM(COUNT) +12 +# 2nd connection: global OFF, session: default(GLOBAL): must not be logged +SELECT 1; +1 +1 +SELECT SUM(COUNT) FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME; +SUM(COUNT) +13 +# 3rd connection: global OFF, session: OFF: must not be logged +SET SESSION query_response_time_session_stats= 'OFF'; +SELECT 1; +1 +1 +SELECT SUM(COUNT) FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME; +SUM(COUNT) +13 +# 1st connection: global ON, session: ON: must be logged +SET GLOBAL query_response_time_stats= 'ON'; +SELECT 1; +1 +1 +SELECT SUM(COUNT) FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME; +SUM(COUNT) +15 +# 2nd connection: global ON, session: default(GLOBAL): must be logged +SELECT 1; +1 +1 +SELECT SUM(COUNT) FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME; +SUM(COUNT) +17 +# 3rd connection: global ON: session: OFF: must not be logged +SELECT 1; +1 +1 +SELECT SUM(COUNT) FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME; +SUM(COUNT) +18 +# Cleanup +SET GLOBAL query_response_time_flush = @saved_query_response_time_flush; +SET GLOBAL query_response_time_stats = @saved_query_response_time_stats; diff --git a/plugin/query_response_time/tests/mtr/session_toggle.test b/plugin/query_response_time/tests/mtr/session_toggle.test new file mode 100644 index 000000000000..052c9463b580 --- /dev/null +++ b/plugin/query_response_time/tests/mtr/session_toggle.test @@ -0,0 +1,106 @@ +--source include/have_query_response_time_plugin.inc + +--echo # +--echo # Tests for query_response_time_session_stats variable +--echo # + +--source include/count_sessions.inc + +SET @saved_query_response_time_stats = @@GLOBAL.query_response_time_stats; +SET @saved_query_response_time_flush = @@GLOBAL.query_response_time_flush; +SET GLOBAL query_response_time_flush= 'ON'; + +SELECT SUM(COUNT) FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME; + +--echo # global: ON, session: default(GLOBAL): must be logged +SET GLOBAL query_response_time_stats= 'ON'; + +SELECT 1; +SELECT SUM(COUNT) FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME; + +--echo # global: OFF, session: default(GLOBAL): must not be logged +SET GLOBAL query_response_time_stats= 'OFF'; + +SELECT 1; +SELECT SUM(COUNT) FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME; + +--echo # global: ON, session: GLOBAL: must be logged +SET GLOBAL query_response_time_stats= 'ON'; +SET SESSION query_response_time_session_stats= 'GLOBAL'; + +SELECT 1; +SELECT SUM(COUNT) FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME; + +--echo # global: OFF, session: GLOBAL: must not be logged +SET GLOBAL query_response_time_stats= 'OFF'; + +SELECT 1; +SELECT SUM(COUNT) FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME; + +--echo # global: OFF, session: OFF: must not be logged +SET SESSION query_response_time_session_stats= 'OFF'; + +SELECT 1; +SELECT SUM(COUNT) FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME; + +--echo # global: ON, session: OFF: must not be logged + +SELECT 1; +SELECT SUM(COUNT) FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME; + +--echo # global: ON: session: ON: must be logged +SET SESSION query_response_time_session_stats= 'ON'; + +SELECT 1; +SELECT SUM(COUNT) FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME; + +--echo # global: OFF: session: ON: must be logged +SET GLOBAL query_response_time_stats= 'OFF'; + +SELECT 1; +SELECT SUM(COUNT) FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME; + +connect(con2,localhost,root,,); +connect(con3,localhost,root,,); + +connection con2; +--echo # 2nd connection: global OFF, session: default(GLOBAL): must not be logged + +SELECT 1; +SELECT SUM(COUNT) FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME; + +connection con3; +--echo # 3rd connection: global OFF, session: OFF: must not be logged +SET SESSION query_response_time_session_stats= 'OFF'; + +SELECT 1; +SELECT SUM(COUNT) FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME; + +connection default; +--echo # 1st connection: global ON, session: ON: must be logged +SET GLOBAL query_response_time_stats= 'ON'; + +SELECT 1; +SELECT SUM(COUNT) FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME; + +connection con2; +--echo # 2nd connection: global ON, session: default(GLOBAL): must be logged + +SELECT 1; +SELECT SUM(COUNT) FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME; + +connection con3; +--echo # 3rd connection: global ON: session: OFF: must not be logged + +SELECT 1; +SELECT SUM(COUNT) FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME; + +disconnect con2; +disconnect con3; +connection default; + +--echo # Cleanup +SET GLOBAL query_response_time_flush = @saved_query_response_time_flush; +SET GLOBAL query_response_time_stats = @saved_query_response_time_stats; + +--source include/wait_until_count_sessions.inc From bd156c89133313c47020b42aa4e371617457d951 Mon Sep 17 00:00:00 2001 From: Robert Golebiowski Date: Wed, 7 Mar 2018 17:52:09 +0100 Subject: [PATCH 0718/1221] Bug: PS-3877 User experience improvement for Percona keyring use When it is not possible to encrypt relay log - due to lack of keyring plugin installed - an appropriate error message - mentioning relay log - is generated. Also an error messages were improved and now provide more information. --- .../r/encryption_init_error.result | 2 +- .../t/binlog_encryption_without_keyring.test | 2 +- .../t/encryption_init_error.test | 2 +- ...ithout_keyring_and_bin_off_relay_on.result | 21 ++++++++ ...e_without_keyring_and_bin_off_relay_on.cnf | 12 +++++ ..._without_keyring_and_bin_off_relay_on.test | 54 +++++++++++++++++++ sql/binlog.cc | 15 +++--- 7 files changed, 99 insertions(+), 9 deletions(-) create mode 100644 mysql-test/suite/rpl_encryption/r/encrypted_slave_without_keyring_and_bin_off_relay_on.result create mode 100644 mysql-test/suite/rpl_encryption/t/encrypted_slave_without_keyring_and_bin_off_relay_on.cnf create mode 100644 mysql-test/suite/rpl_encryption/t/encrypted_slave_without_keyring_and_bin_off_relay_on.test diff --git a/mysql-test/suite/binlog_encryption/r/encryption_init_error.result b/mysql-test/suite/binlog_encryption/r/encryption_init_error.result index 103c46c61a3d..d3247a3047c9 100644 --- a/mysql-test/suite/binlog_encryption/r/encryption_init_error.result +++ b/mysql-test/suite/binlog_encryption/r/encryption_init_error.result @@ -1,4 +1,4 @@ -call mtr.add_suppression("Failed to fetch percona_binlog key from keyring and thus failed to initialize binlog encryption."); +call mtr.add_suppression("Failed to fetch or create percona_binlog key from/in keyring and thus failed to initialize binlog encryption. Have you enabled keyring plugin?"); call mtr.add_suppression("Could not use ./master-bin.000002 for logging"); call mtr.add_suppression("Could not open ./master-bin.000002 for logging"); SET debug="+d,binlog_encryption_error_on_key_fetch"; diff --git a/mysql-test/suite/binlog_encryption/t/binlog_encryption_without_keyring.test b/mysql-test/suite/binlog_encryption/t/binlog_encryption_without_keyring.test index 5606ac1522f2..fcf3f5390720 100644 --- a/mysql-test/suite/binlog_encryption/t/binlog_encryption_without_keyring.test +++ b/mysql-test/suite/binlog_encryption/t/binlog_encryption_without_keyring.test @@ -35,7 +35,7 @@ RESET MASTER; --let SEARCH_FILE= $MYSQLTEST_VARDIR/tmp/binlog_encryption_without_keyring.err --let SEARCH_PATTERN= Binary logging not possible. Message: Either disk is full or file system is read only or encryption failed while opening the binlog. Aborting the server. --source include/search_pattern_in_file.inc ---let SEARCH_PATTERN= Failed to fetch percona_binlog key from keyring and thus failed to initialize binlog encryption. Have you enabled keyring plugin? +--let SEARCH_PATTERN= Failed to fetch or create percona_binlog key from/in keyring and thus failed to initialize binlog encryption. Have you enabled keyring plugin? --source include/search_pattern_in_file.inc --let $restart_parameters= diff --git a/mysql-test/suite/binlog_encryption/t/encryption_init_error.test b/mysql-test/suite/binlog_encryption/t/encryption_init_error.test index 74f256062997..1421f74fd393 100644 --- a/mysql-test/suite/binlog_encryption/t/encryption_init_error.test +++ b/mysql-test/suite/binlog_encryption/t/encryption_init_error.test @@ -1,7 +1,7 @@ source include/have_log_bin.inc; source include/have_debug.inc; -call mtr.add_suppression("Failed to fetch percona_binlog key from keyring and thus failed to initialize binlog encryption."); +call mtr.add_suppression("Failed to fetch or create percona_binlog key from/in keyring and thus failed to initialize binlog encryption. Have you enabled keyring plugin?"); call mtr.add_suppression("Could not use ./master-bin.000002 for logging"); call mtr.add_suppression("Could not open ./master-bin.000002 for logging"); diff --git a/mysql-test/suite/rpl_encryption/r/encrypted_slave_without_keyring_and_bin_off_relay_on.result b/mysql-test/suite/rpl_encryption/r/encrypted_slave_without_keyring_and_bin_off_relay_on.result new file mode 100644 index 000000000000..7b1ee1008f4d --- /dev/null +++ b/mysql-test/suite/rpl_encryption/r/encrypted_slave_without_keyring_and_bin_off_relay_on.result @@ -0,0 +1,21 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +include/rpl_restart_server.inc [server_number=2] +UNINSTALL PLUGIN keyring_file; +include/assert.inc [No keyring plugin should be installed] +include/assert.inc [Binlog should be OFF] +include/assert.inc [Binlog encryption should be ON] +SELECT @@log_slave_updates; +@@log_slave_updates +0 +SET GLOBAL binlog_error_action= ABORT_SERVER; +FLUSH LOGS; +ERROR HY000: Binary logging not possible. Message: Either disk is full or file system is read only or encryption failed while opening the relay_log. Aborting the server. +# Check that error messages related to encryption are present in error log +include/rpl_start_server.inc [server_number=2] +include/start_slave.inc +include/sync_slave_sql_with_master.inc +include/rpl_end.inc diff --git a/mysql-test/suite/rpl_encryption/t/encrypted_slave_without_keyring_and_bin_off_relay_on.cnf b/mysql-test/suite/rpl_encryption/t/encrypted_slave_without_keyring_and_bin_off_relay_on.cnf new file mode 100644 index 000000000000..3c34f23f2d4c --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/encrypted_slave_without_keyring_and_bin_off_relay_on.cnf @@ -0,0 +1,12 @@ +!include ../my.cnf + +[mysqld.1] +encrypt-binlog=0 + +[mysqld.2] +encrypt-binlog +log-slave-updates=0 +master-verify-checksum=1 +plugin_dir=@env.KEYRING_PLUGIN_DIR +early-plugin-load=@env.KEYRING_PLUGIN +keyring_file_data=../../tmp/keyring2 diff --git a/mysql-test/suite/rpl_encryption/t/encrypted_slave_without_keyring_and_bin_off_relay_on.test b/mysql-test/suite/rpl_encryption/t/encrypted_slave_without_keyring_and_bin_off_relay_on.test new file mode 100644 index 000000000000..63b94b961804 --- /dev/null +++ b/mysql-test/suite/rpl_encryption/t/encrypted_slave_without_keyring_and_bin_off_relay_on.test @@ -0,0 +1,54 @@ +# Bug: PS-3877 User experience improvement for Percona keyring use +# +# When it is not possible to encrypt relay log - due to lack of keyring plugin installed +# an appropriate error message - mentioning relay log is generated. Also an error messages +# were improvement and now provide more information + +--source include/not_embedded.inc +--source include/master-slave.inc + +--let $rpl_server_number= 2 +--let $rpl_omit_print_server_parameters= 1 +--let $rpl_server_parameters=--log-error=$MYSQLTEST_VARDIR/tmp/encrypted_slave_without_keyring_and_bin_off_relay_on.err --skip-log-bin +--source include/rpl_restart_server.inc + +--connection server_2 +UNINSTALL PLUGIN keyring_file; + +--let $assert_text= No keyring plugin should be installed +--let $assert_cond= "[SELECT COUNT(PLUGIN_NAME) = 0 FROM INFORMATION_SCHEMA.PLUGINS WHERE plugin_name LIKE \\'keyring%\\']" = 1 +--source include/assert.inc + +--let $assert_text= Binlog should be OFF +--let $assert_cond= "[SELECT @@GLOBAL.log_bin = 0]" = 1 +--source include/assert.inc + +--let $assert_text= Binlog encryption should be ON +--let $assert_cond= "[SELECT @@GLOBAL.encrypt_binlog = 1]" = 1 +--source include/assert.inc + +SELECT @@log_slave_updates; + +SET GLOBAL binlog_error_action= ABORT_SERVER; +--disable_reconnect +--source include/expect_crash.inc +--error ER_BINLOG_LOGGING_IMPOSSIBLE +FLUSH LOGS; +--echo # Check that error messages related to encryption are present in error log +--let SEARCH_FILE= $MYSQLTEST_VARDIR/tmp/encrypted_slave_without_keyring_and_bin_off_relay_on.err +--let SEARCH_PATTERN= Binary logging not possible. Message: Either disk is full or file system is read only or encryption failed while opening the relay_log. Aborting the server. +--source include/search_pattern_in_file.inc +--let SEARCH_PATTERN=Failed to fetch or create percona_binlog key from/in keyring and thus failed to initialize relay_log encryption. Have you enabled keyring plugin? +--source include/search_pattern_in_file.inc + +--let $rpl_server_number= 2 +--let $rpl_omit_print_server_parameters= 1 +--let $rpl_server_parameters= +--source include/rpl_start_server.inc +--source include/start_slave.inc + +--remove_file $MYSQLTEST_VARDIR/tmp/encrypted_slave_without_keyring_and_bin_off_relay_on.err + +--connection server_1 +--source include/sync_slave_sql_with_master.inc +--source include/rpl_end.inc diff --git a/sql/binlog.cc b/sql/binlog.cc index b17d7b016719..71de2a23c8cb 100644 --- a/sql/binlog.cc +++ b/sql/binlog.cc @@ -4979,6 +4979,7 @@ bool MYSQL_BIN_LOG::open_binlog(const char *log_name, DBUG_ASSERT(need_sid_lock || !need_lock_index); DBUG_ENTER("MYSQL_BIN_LOG::open_binlog(const char *, ...)"); DBUG_PRINT("enter",("base filename: %s", log_name)); + const char *log_to_encrypt= is_relay_log ? "relay_log" : "binlog"; mysql_mutex_assert_owner(get_log_lock()); @@ -5112,9 +5113,9 @@ bool MYSQL_BIN_LOG::open_binlog(const char *log_name, if (crypto.load_latest_binlog_key()) { - sql_print_error("Failed to fetch percona_binlog key from keyring and thus " - "failed to initialize binlog encryption. Have you enabled " - "keyring plugin?"); + sql_print_error("Failed to fetch or create percona_binlog key from/in keyring and thus " + "failed to initialize %s encryption. Have you enabled " + "keyring plugin?", log_to_encrypt); goto err; } DBUG_EXECUTE_IF("check_consecutive_binlog_key_versions", @@ -5125,14 +5126,14 @@ bool MYSQL_BIN_LOG::open_binlog(const char *log_name, if (write_to_file(&sele)) { sql_print_error("Failed to write Start_encryption event to binary log and thus " - "failed to initialize binlog encryption."); + "failed to initialize %s encryption.", log_to_encrypt); goto err; } bytes_written+= sele.common_header->data_written; if (crypto.init_with_loaded_key(sele.crypto_scheme, nonce)) { - sql_print_error("Failed to initialize binlog encryption."); + sql_print_error("Failed to initialize %s encryption.", log_to_encrypt); goto err; } } @@ -5320,7 +5321,9 @@ bool MYSQL_BIN_LOG::open_binlog(const char *log_name, std::string err_msg= "Either disk is full or file system is read only "; if (encrypt_binlog) err_msg+= "or encryption failed "; - err_msg+= "while opening the binlog. Aborting the server."; + err_msg+= "while opening the "; + err_msg+= log_to_encrypt; + err_msg+= ". Aborting the server."; exec_binlog_error_action_abort(err_msg.c_str()); } From 7deef505c18cb1911ab043915dc3921302402e27 Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Wed, 21 Mar 2018 16:17:42 -0700 Subject: [PATCH 0719/1221] TDB-115 : Fix -Wunused-parameter - Many places where API is pre-defined either by FT or by server and parameters are unused needed annotation with TOKUDB_UNUSED. - Many internally used functions had extra, unused parameters added and were cleaned up to remove the parameters rather than proliferating TOKUDB_UNUSED. --- storage/tokudb/ha_tokudb.cc | 136 ++++++------ storage/tokudb/ha_tokudb.h | 28 +-- storage/tokudb/ha_tokudb_admin.cc | 8 +- storage/tokudb/ha_tokudb_alter_56.cc | 208 +++++------------- storage/tokudb/ha_tokudb_update.cc | 29 +-- storage/tokudb/hatoku_cmp.cc | 33 +-- storage/tokudb/hatoku_cmp.h | 14 +- storage/tokudb/hatoku_hton.cc | 70 +++--- storage/tokudb/hatoku_hton.h | 13 +- storage/tokudb/tokudb_information_schema.cc | 72 +++--- storage/tokudb/tokudb_sysvars.cc | 64 +++--- storage/tokudb/tokudb_update_fun.cc | 230 ++++++-------------- 12 files changed, 345 insertions(+), 560 deletions(-) diff --git a/storage/tokudb/ha_tokudb.cc b/storage/tokudb/ha_tokudb.cc index 8354a35cb704..eb6520f870a9 100644 --- a/storage/tokudb/ha_tokudb.cc +++ b/storage/tokudb/ha_tokudb.cc @@ -214,7 +214,6 @@ void TOKUDB_SHARE::destroy() { TOKUDB_SHARE_DBUG_VOID_RETURN(); } TOKUDB_SHARE* TOKUDB_SHARE::get_share(const char* table_name, - TABLE_SHARE* table_share, THR_LOCK_DATA* data, bool create_new) { mutex_t_lock(_open_tables_mutex); @@ -426,7 +425,7 @@ const char *ha_tokudb::table_type() const { return tokudb_hton_name; } -const char *ha_tokudb::index_type(uint inx) { +const char *ha_tokudb::index_type(TOKUDB_UNUSED(uint inx)) { return "BTREE"; } @@ -487,7 +486,9 @@ ulonglong ha_tokudb::table_flags() const { // Returns a bit mask of capabilities of the key or its part specified by // the arguments. The capabilities are defined in sql/handler.h. // -ulong ha_tokudb::index_flags(uint idx, uint part, bool all_parts) const { +ulong ha_tokudb::index_flags(uint idx, + TOKUDB_UNUSED(uint part), + TOKUDB_UNUSED(bool all_parts)) const { TOKUDB_HANDLER_DBUG_ENTER(""); assert_always(table_share); ulong flags = (HA_READ_NEXT | HA_READ_PREV | HA_READ_ORDER | @@ -531,8 +532,10 @@ typedef struct index_read_info { // want to actually do anything with the data, hence // callback does nothing // -static int smart_dbt_do_nothing (DBT const *key, DBT const *row, void *context) { - return 0; +static int smart_dbt_do_nothing(TOKUDB_UNUSED(DBT const* key), + TOKUDB_UNUSED(DBT const* row), + TOKUDB_UNUSED(void* context)) { + return 0; } static int @@ -545,8 +548,9 @@ smart_dbt_callback_rowread_ptquery (DBT const *key, DBT const *row, void *conte // // Smart DBT callback function in case where we have a covering index // -static int -smart_dbt_callback_keyread(DBT const *key, DBT const *row, void *context) { +static int smart_dbt_callback_keyread(DBT const* key, + DBT TOKUDB_UNUSED(const* row), + void* context) { SMART_DBT_INFO info = (SMART_DBT_INFO)context; info->ha->extract_hidden_primary_key(info->keynr, key); info->ha->read_key_only(info->buf,info->keynr,key); @@ -568,20 +572,24 @@ smart_dbt_callback_rowread(DBT const *key, DBT const *row, void *context) { // // Smart DBT callback function in case where we have a covering index // -static int -smart_dbt_callback_ir_keyread(DBT const *key, DBT const *row, void *context) { +static int smart_dbt_callback_ir_keyread(DBT const* key, + TOKUDB_UNUSED(DBT const* row), + void* context) { INDEX_READ_INFO ir_info = (INDEX_READ_INFO)context; - ir_info->cmp = ir_info->smart_dbt_info.ha->prefix_cmp_dbts(ir_info->smart_dbt_info.keynr, ir_info->orig_key, key); + ir_info->cmp = ir_info->smart_dbt_info.ha->prefix_cmp_dbts( + ir_info->smart_dbt_info.keynr, ir_info->orig_key, key); if (ir_info->cmp) { return 0; } return smart_dbt_callback_keyread(key, row, &ir_info->smart_dbt_info); } -static int -smart_dbt_callback_lookup(DBT const *key, DBT const *row, void *context) { +static int smart_dbt_callback_lookup(DBT const* key, + TOKUDB_UNUSED(DBT const* row), + void* context) { INDEX_READ_INFO ir_info = (INDEX_READ_INFO)context; - ir_info->cmp = ir_info->smart_dbt_info.ha->prefix_cmp_dbts(ir_info->smart_dbt_info.keynr, ir_info->orig_key, key); + ir_info->cmp = ir_info->smart_dbt_info.ha->prefix_cmp_dbts( + ir_info->smart_dbt_info.keynr, ir_info->orig_key, key); return 0; } @@ -1020,16 +1028,12 @@ static int create_tokudb_trx_data_instance(tokudb_trx_data** out_trx) { return error; } - -static inline int tokudb_generate_row( - DB *dest_db, - DB *src_db, - DBT *dest_key, - DBT *dest_val, - const DBT *src_key, - const DBT *src_val - ) -{ +static inline int tokudb_generate_row(DB* dest_db, + TOKUDB_UNUSED(DB* src_db), + DBT* dest_key, + DBT* dest_val, + const DBT* src_key, + const DBT* src_val) { int error; DB* curr_db = dest_db; @@ -1043,7 +1047,7 @@ static inline int tokudb_generate_row( desc_size = (*(uint32_t *)row_desc) - 4; row_desc += 4; - if (is_key_pk(row_desc, desc_size)) { + if (is_key_pk(row_desc)) { if (dest_key->flags == DB_DBT_REALLOC && dest_key->data != NULL) { free(dest_key->data); } @@ -1106,7 +1110,7 @@ static inline int tokudb_generate_row( desc_size = (*(uint32_t *)row_desc) - 4; row_desc += 4; if (dest_val != NULL) { - if (!is_key_clustering(row_desc, desc_size) || src_val->size == 0) { + if (!is_key_clustering(desc_size) || src_val->size == 0) { dest_val->size = 0; } else { uchar* buff = NULL; @@ -1884,7 +1888,7 @@ int ha_tokudb::open(const char *name, int mode, uint test_if_locked) { } // lookup or create share - share = TOKUDB_SHARE::get_share(name, table_share, &lock, true); + share = TOKUDB_SHARE::get_share(name, &lock, true); assert_always(share); if (share->state() != TOKUDB_SHARE::OPENED) { @@ -2110,7 +2114,9 @@ int ha_tokudb::remove_frm_data(DB *db, DB_TXN *txn) { return remove_from_status(db, hatoku_frm_data, txn); } -static int smart_dbt_callback_verify_frm (DBT const *key, DBT const *row, void *context) { +static int smart_dbt_callback_verify_frm(TOKUDB_UNUSED(DBT const* key), + DBT const* row, + void* context) { DBT* stored_frm = (DBT *)context; stored_frm->size = row->size; stored_frm->data = (uchar *)tokudb::memory::malloc(row->size, MYF(MY_WME)); @@ -3382,21 +3388,21 @@ int ha_tokudb::bulk_insert_poll(void* extra, float progress) { #endif return 0; } -void ha_tokudb::loader_add_index_err(DB* db, - int i, - int err, - DBT* key, - DBT* val, +void ha_tokudb::loader_add_index_err(TOKUDB_UNUSED(DB* db), + TOKUDB_UNUSED(int i), + TOKUDB_UNUSED(int err), + TOKUDB_UNUSED(DBT* key), + TOKUDB_UNUSED(DBT* val), void* error_extra) { LOADER_CONTEXT context = (LOADER_CONTEXT)error_extra; assert_always(context->ha); context->ha->set_loader_error(err); } -void ha_tokudb::loader_dup(DB* db, - int i, +void ha_tokudb::loader_dup(TOKUDB_UNUSED(DB* db), + TOKUDB_UNUSED(int i), int err, DBT* key, - DBT* val, + TOKUDB_UNUSED(DBT* val), void* error_extra) { LOADER_CONTEXT context = (LOADER_CONTEXT)error_extra; assert_always(context->ha); @@ -3411,7 +3417,7 @@ void ha_tokudb::loader_dup(DB* db, // (ha_tokudb::write_row). If start_bulk_insert is called, then // this is guaranteed to be called. // -int ha_tokudb::end_bulk_insert(bool abort) { +int ha_tokudb::end_bulk_insert(TOKUDB_UNUSED(bool abort)) { TOKUDB_HANDLER_DBUG_ENTER(""); int error = 0; THD* thd = ha_thd(); @@ -3866,7 +3872,11 @@ void ha_tokudb::set_main_dict_put_flags(THD* thd, bool opt_eligible, uint32_t* p } } -int ha_tokudb::insert_row_to_main_dictionary(uchar* record, DBT* pk_key, DBT* pk_val, DB_TXN* txn) { +int ha_tokudb::insert_row_to_main_dictionary( + DBT* pk_key, + DBT* pk_val, + DB_TXN* txn) { + int error = 0; uint curr_num_DBs = table->s->keys + tokudb_test(hidden_primary_key); assert_always(curr_num_DBs == 1); @@ -4090,7 +4100,7 @@ int ha_tokudb::write_row(uchar * record) { goto cleanup; } if (curr_num_DBs == 1) { - error = insert_row_to_main_dictionary(record, &prim_key, &row, txn); + error = insert_row_to_main_dictionary(&prim_key, &row, txn); if (error) { goto cleanup; } } else { error = insert_rows_to_dictionaries_mult(&prim_key, &row, txn, thd); @@ -4708,8 +4718,7 @@ int ha_tokudb::index_end() { TOKUDB_HANDLER_DBUG_RETURN(0); } - -int ha_tokudb::handle_cursor_error(int error, int err_to_return, uint keynr) { +int ha_tokudb::handle_cursor_error(int error, int err_to_return) { TOKUDB_HANDLER_DBUG_ENTER(""); if (error) { error = map_to_handler_error(error); @@ -4911,7 +4920,7 @@ int ha_tokudb::index_next_same(uchar* buf, const uchar* key, uint keylen) { } cleanup: - error = handle_cursor_error(error, HA_ERR_END_OF_FILE, tokudb_active_index); + error = handle_cursor_error(error, HA_ERR_END_OF_FILE); TOKUDB_HANDLER_DBUG_RETURN(error); } @@ -5038,7 +5047,7 @@ int ha_tokudb::index_read( error = HA_ERR_UNSUPPORTED; break; } - error = handle_cursor_error(error,HA_ERR_KEY_NOT_FOUND,tokudb_active_index); + error = handle_cursor_error(error, HA_ERR_KEY_NOT_FOUND); if (!error && !key_read && tokudb_active_index != primary_key && !key_is_clustering(&table->key_info[tokudb_active_index])) { error = read_full_row(buf); } @@ -5545,11 +5554,7 @@ int ha_tokudb::get_next( bulk_fetch_iteration++; } - error = - handle_cursor_error( - error, - HA_ERR_END_OF_FILE, - tokudb_active_index); + error = handle_cursor_error(error, HA_ERR_END_OF_FILE); if (error) { goto cleanup; } @@ -5580,11 +5585,7 @@ int ha_tokudb::get_next( SMART_DBT_CALLBACK(do_key_read), &info); } - error = - handle_cursor_error( - error, - HA_ERR_END_OF_FILE, - tokudb_active_index); + error = handle_cursor_error(error, HA_ERR_END_OF_FILE); } } } @@ -5682,7 +5683,7 @@ int ha_tokudb::index_first(uchar * buf) { info.keynr = tokudb_active_index; error = cursor->c_getf_first(cursor, flags, SMART_DBT_CALLBACK(key_read), &info); - error = handle_cursor_error(error,HA_ERR_END_OF_FILE,tokudb_active_index); + error = handle_cursor_error(error, HA_ERR_END_OF_FILE); // // still need to get entire contents of the row if operation done on @@ -5726,7 +5727,7 @@ int ha_tokudb::index_last(uchar * buf) { info.keynr = tokudb_active_index; error = cursor->c_getf_last(cursor, flags, SMART_DBT_CALLBACK(key_read), &info); - error = handle_cursor_error(error,HA_ERR_END_OF_FILE,tokudb_active_index); + error = handle_cursor_error(error, HA_ERR_END_OF_FILE); // // still need to get entire contents of the row if operation done on // secondary DB and it was NOT a covering index @@ -6887,7 +6888,7 @@ int ha_tokudb::write_key_name_to_status(DB* status_block, char* key_name, DB_TXN // some tracing moved out of ha_tokudb::create, because ::create was // getting cluttered // -void ha_tokudb::trace_create_table_info(const char *name, TABLE * form) { +void ha_tokudb::trace_create_table_info(TABLE* form) { uint i; // // tracing information about what type of table we are creating @@ -7301,7 +7302,7 @@ int ha_tokudb::create( } /* do some tracing */ - trace_create_table_info(name,form); + trace_create_table_info(form); /* Create status.tokudb and save relevant metadata */ make_name(newname, newname_len, name, "status"); @@ -7422,7 +7423,7 @@ int ha_tokudb::create( TOKUDB_HANDLER_DBUG_RETURN(error); } -int ha_tokudb::discard_or_import_tablespace(my_bool discard) { +int ha_tokudb::discard_or_import_tablespace(TOKUDB_UNUSED(my_bool discard)) { /* if (discard) { my_errno=HA_ERR_WRONG_COMMAND; @@ -7621,7 +7622,7 @@ int ha_tokudb::delete_or_rename_table (const char* from_name, const char* to_nam // int ha_tokudb::delete_table(const char *name) { TOKUDB_HANDLER_DBUG_ENTER("%s", name); - TOKUDB_SHARE* share = TOKUDB_SHARE::get_share(name, NULL, NULL, false); + TOKUDB_SHARE* share = TOKUDB_SHARE::get_share(name, NULL, false); if (share) { share->unlock(); share->release(); @@ -7683,7 +7684,7 @@ static bool tokudb_check_db_dir_exist_from_table_name(const char *table_name) { // int ha_tokudb::rename_table(const char *from, const char *to) { TOKUDB_HANDLER_DBUG_ENTER("%s %s", from, to); - TOKUDB_SHARE* share = TOKUDB_SHARE::get_share(from, NULL, NULL, false); + TOKUDB_SHARE* share = TOKUDB_SHARE::get_share(from, NULL, false); if (share) { share->unlock(); share->release(); @@ -8541,13 +8542,10 @@ void ha_tokudb::restore_add_index( // Internal function called by ha_tokudb::prepare_drop_index and ha_tokudb::alter_table_phase2 // With a transaction, drops dictionaries associated with indexes in key_num // -int ha_tokudb::drop_indexes( - TABLE* table_arg, - uint* key_num, - uint num_of_keys, - KEY* key_info, - DB_TXN* txn) { - +int ha_tokudb::drop_indexes(uint* key_num, + uint num_of_keys, + KEY* key_info, + DB_TXN* txn) { TOKUDB_HANDLER_DBUG_ENTER(""); assert_always(txn); @@ -8605,11 +8603,7 @@ int ha_tokudb::drop_indexes( // Restores dropped indexes in case of error in error path of // prepare_drop_index and alter_table_phase2 // -void ha_tokudb::restore_drop_indexes( - TABLE* table_arg, - uint* key_num, - uint num_of_keys) { - +void ha_tokudb::restore_drop_indexes(uint* key_num, uint num_of_keys) { // // reopen closed dictionaries // diff --git a/storage/tokudb/ha_tokudb.h b/storage/tokudb/ha_tokudb.h index 9c6af2550cdf..b0e4ea34b275 100644 --- a/storage/tokudb/ha_tokudb.h +++ b/storage/tokudb/ha_tokudb.h @@ -79,7 +79,6 @@ class TOKUDB_SHARE { // doesn't exist, otherwise will return NULL if an existing is not found. static TOKUDB_SHARE* get_share( const char* table_name, - TABLE_SHARE* table_share, THR_LOCK_DATA* data, bool create_new); @@ -661,7 +660,7 @@ class ha_tokudb : public handler { DBT *pack_ext_key(DBT * key, uint keynr, uchar * buff, const uchar * key_ptr, uint key_length, int8_t inf_byte); #endif bool key_changed(uint keynr, const uchar * old_row, const uchar * new_row); - int handle_cursor_error(int error, int err_to_return, uint keynr); + int handle_cursor_error(int error, int err_to_return); DBT *get_pos(DBT * to, uchar * pos); int open_main_dictionary(const char* name, bool is_read_only, DB_TXN* txn); @@ -706,12 +705,12 @@ class ha_tokudb : public handler { toku_compression_method compression_method ); int create_main_dictionary(const char* name, TABLE* form, DB_TXN* txn, KEY_AND_COL_INFO* kc_info, toku_compression_method compression_method); - void trace_create_table_info(const char *name, TABLE * form); + void trace_create_table_info(TABLE* form); int is_index_unique(bool* is_unique, DB_TXN* txn, DB* db, KEY* key_info, int lock_flags); int is_val_unique(bool* is_unique, uchar* record, KEY* key_info, uint dict_index, DB_TXN* txn); int do_uniqueness_checks(uchar* record, DB_TXN* txn, THD* thd); void set_main_dict_put_flags(THD* thd, bool opt_eligible, uint32_t* put_flags); - int insert_row_to_main_dictionary(uchar* record, DBT* pk_key, DBT* pk_val, DB_TXN* txn); + int insert_row_to_main_dictionary(DBT* pk_key, DBT* pk_val, DB_TXN* txn); int insert_rows_to_dictionaries_mult(DBT* pk_key, DBT* pk_val, DB_TXN* txn, THD* thd); void test_row_packing(uchar* record, DBT* pk_key, DBT* pk_val); uint32_t fill_row_mutator( @@ -928,8 +927,8 @@ class ha_tokudb : public handler { bool inplace_alter_table(TABLE *altered_table, Alter_inplace_info *ha_alter_info); bool commit_inplace_alter_table(TABLE *altered_table, Alter_inplace_info *ha_alter_info, bool commit); private: - int alter_table_add_index(TABLE *altered_table, Alter_inplace_info *ha_alter_info); - int alter_table_drop_index(TABLE *altered_table, Alter_inplace_info *ha_alter_info); + int alter_table_add_index(Alter_inplace_info* ha_alter_info); + int alter_table_drop_index(Alter_inplace_info* ha_alter_info); int alter_table_add_or_drop_column(TABLE *altered_table, Alter_inplace_info *ha_alter_info); int alter_table_expand_varchar_offsets(TABLE *altered_table, Alter_inplace_info *ha_alter_info); int alter_table_expand_columns(TABLE *altered_table, Alter_inplace_info *ha_alter_info); @@ -937,7 +936,10 @@ class ha_tokudb : public handler { int alter_table_expand_blobs(TABLE *altered_table, Alter_inplace_info *ha_alter_info); void print_alter_info(TABLE *altered_table, Alter_inplace_info *ha_alter_info); int setup_kc_info(TABLE *altered_table, KEY_AND_COL_INFO *kc_info); - int new_row_descriptor(TABLE *table, TABLE *altered_table, Alter_inplace_info *ha_alter_info, uint32_t idx, DBT *row_descriptor); + int new_row_descriptor(TABLE* altered_table, + Alter_inplace_info* ha_alter_info, + uint32_t idx, + DBT* row_descriptor); public: #endif @@ -962,12 +964,8 @@ class ha_tokudb : public handler { uint num_of_keys, bool incremented_numDBs, bool modified_DBs); - int drop_indexes(TABLE* table_arg, - uint* key_num, - uint num_of_keys, - KEY* key_info, - DB_TXN* txn); - void restore_drop_indexes(TABLE* table_arg, uint* key_num, uint num_of_keys); + int drop_indexes(uint* key_num, uint num_of_keys, KEY* key_info, DB_TXN* txn); + void restore_drop_indexes(uint* key_num, uint num_of_keys); public: // delete all rows from the table @@ -1044,7 +1042,9 @@ class ha_tokudb : public handler { int send_update_message(List &update_fields, List &update_values, Item *conds, DB_TXN *txn); int upsert(THD *thd, List &update_fields, List &update_values); bool check_upsert(THD *thd, List &update_fields, List &update_values); - int send_upsert_message(THD *thd, List &update_fields, List &update_values, DB_TXN *txn); + int send_upsert_message(List& update_fields, + List& update_values, + DB_TXN* txn); #endif public: // mysql sometimes retires a txn before a cursor that references the txn is closed. diff --git a/storage/tokudb/ha_tokudb_admin.cc b/storage/tokudb/ha_tokudb_admin.cc index 6d8e7173c8d8..c400e5bd22c2 100644 --- a/storage/tokudb/ha_tokudb_admin.cc +++ b/storage/tokudb/ha_tokudb_admin.cc @@ -760,7 +760,7 @@ int standard_t::analyze_key(uint64_t* rec_per_key_part) { } // namespace tokudb -int ha_tokudb::analyze(THD *thd, HA_CHECK_OPT *check_opt) { +int ha_tokudb::analyze(THD *thd, TOKUDB_UNUSED(HA_CHECK_OPT *check_opt)) { TOKUDB_HANDLER_DBUG_ENTER("%s", share->table_name()); int result = HA_ADMIN_OK; tokudb::sysvars::analyze_mode_t mode = tokudb::sysvars::analyze_mode(thd); @@ -985,7 +985,8 @@ int ha_tokudb::do_optimize(THD* thd) { TOKUDB_HANDLER_DBUG_RETURN(error); } -int ha_tokudb::optimize(THD* thd, HA_CHECK_OPT* check_opt) { +int ha_tokudb::optimize(TOKUDB_UNUSED(THD* thd), + TOKUDB_UNUSED(HA_CHECK_OPT* check_opt)) { TOKUDB_HANDLER_DBUG_ENTER("%s", share->table_name()); int error; #if TOKU_OPTIMIZE_WITH_RECREATE @@ -1000,7 +1001,8 @@ struct check_context { THD* thd; }; -static int ha_tokudb_check_progress(void* extra, float progress) { +static int ha_tokudb_check_progress(void* extra, + TOKUDB_UNUSED(float progress)) { struct check_context* context = (struct check_context*)extra; int result = 0; if (thd_killed(context->thd)) diff --git a/storage/tokudb/ha_tokudb_alter_56.cc b/storage/tokudb/ha_tokudb_alter_56.cc index e005d6789538..5502a3066fda 100644 --- a/storage/tokudb/ha_tokudb_alter_56.cc +++ b/storage/tokudb/ha_tokudb_alter_56.cc @@ -163,17 +163,13 @@ static int find_changed_fields( return changed_fields.elements(); } -static bool change_length_is_supported( - TABLE* table, - TABLE* altered_table, - Alter_inplace_info* ha_alter_info, - tokudb_alter_ctx* ctx); +static bool change_length_is_supported(TABLE* table, + TABLE* altered_table, + tokudb_alter_ctx* ctx); -static bool change_type_is_supported( - TABLE* table, - TABLE* altered_table, - Alter_inplace_info* ha_alter_info, - tokudb_alter_ctx* ctx); +static bool change_type_is_supported(TABLE* table, + TABLE* altered_table, + tokudb_alter_ctx* ctx); // The ha_alter_info->handler_flags can not be trusted. // This function maps the bogus handler flags to something we like. @@ -446,10 +442,7 @@ enum_alter_inplace_result ha_tokudb::check_if_supported_inplace_alter( setup_kc_info(altered_table, ctx->altered_table_kc_info) == 0) { // change column length - if (change_length_is_supported( - table, - altered_table, - ha_alter_info, ctx)) { + if (change_length_is_supported(table, altered_table, ctx)) { result = HA_ALTER_INPLACE_EXCLUSIVE_LOCK; } } else if ((ctx->handler_flags & Alter_inplace_info::ALTER_COLUMN_TYPE) && @@ -465,10 +458,7 @@ enum_alter_inplace_result ha_tokudb::check_if_supported_inplace_alter( setup_kc_info(altered_table, ctx->altered_table_kc_info) == 0) { // change column type - if (change_type_is_supported( - table, - altered_table, - ha_alter_info, ctx)) { + if (change_type_is_supported(table, altered_table, ctx)) { result = HA_ALTER_INPLACE_EXCLUSIVE_LOCK; } } else if (only_flags( @@ -538,10 +528,8 @@ enum_alter_inplace_result ha_tokudb::check_if_supported_inplace_alter( } // Prepare for the alter operations -bool ha_tokudb::prepare_inplace_alter_table( - TABLE* altered_table, - Alter_inplace_info* ha_alter_info) { - +bool ha_tokudb::prepare_inplace_alter_table(TOKUDB_UNUSED(TABLE* altered_table), + Alter_inplace_info* ha_alter_info) { TOKUDB_HANDLER_DBUG_ENTER(""); tokudb_alter_ctx* ctx = static_cast(ha_alter_info->handler_ctx); @@ -571,13 +559,13 @@ bool ha_tokudb::inplace_alter_table( (ctx->handler_flags & (Alter_inplace_info::DROP_INDEX + Alter_inplace_info::DROP_UNIQUE_INDEX))) { - error = alter_table_drop_index(altered_table, ha_alter_info); + error = alter_table_drop_index(ha_alter_info); } if (error == 0 && (ctx->handler_flags & (Alter_inplace_info::ADD_INDEX + Alter_inplace_info::ADD_UNIQUE_INDEX))) { - error = alter_table_add_index(altered_table, ha_alter_info); + error = alter_table_add_index(ha_alter_info); } if (error == 0 && (ctx->handler_flags & @@ -668,9 +656,7 @@ bool ha_tokudb::inplace_alter_table( DBUG_RETURN(result); } -int ha_tokudb::alter_table_add_index( - TABLE* altered_table, - Alter_inplace_info* ha_alter_info) { +int ha_tokudb::alter_table_add_index(Alter_inplace_info* ha_alter_info) { // sort keys in add index order KEY* key_info = (KEY*)tokudb::memory::malloc( @@ -741,9 +727,7 @@ static bool find_index_of_key( return false; } -int ha_tokudb::alter_table_drop_index( - TABLE* altered_table, - Alter_inplace_info* ha_alter_info) { +int ha_tokudb::alter_table_drop_index(Alter_inplace_info* ha_alter_info) { KEY *key_info = table->key_info; // translate key names to indexes into the key_info array @@ -771,12 +755,10 @@ int ha_tokudb::alter_table_drop_index( static_cast(ha_alter_info->handler_ctx); ctx->drop_index_changed = true; - int error = drop_indexes( - table, - index_drop_offsets, - ha_alter_info->index_drop_count, - key_info, - ctx->alter_txn); + int error = drop_indexes(index_drop_offsets, + ha_alter_info->index_drop_count, + key_info, + ctx->alter_txn); if (error == 0) ctx->reset_card = true; @@ -837,11 +819,7 @@ int ha_tokudb::alter_table_add_or_drop_column( // change to a new descriptor DBT row_descriptor; memset(&row_descriptor, 0, sizeof row_descriptor); error = new_row_descriptor( - table, - altered_table, - ha_alter_info, - i, - &row_descriptor); + altered_table, ha_alter_info, i, &row_descriptor); if (error) goto cleanup; error = share->key_file[i]->change_descriptor( @@ -891,11 +869,9 @@ int ha_tokudb::alter_table_add_or_drop_column( // transaction. // If abort then abort the alter transaction and try to rollback the // non-transactional changes. -bool ha_tokudb::commit_inplace_alter_table( - TABLE* altered_table, - Alter_inplace_info* ha_alter_info, - bool commit) { - +bool ha_tokudb::commit_inplace_alter_table(TOKUDB_UNUSED(TABLE* altered_table), + Alter_inplace_info* ha_alter_info, + bool commit) { TOKUDB_HANDLER_DBUG_ENTER(""); tokudb_alter_ctx* ctx = @@ -1010,10 +986,8 @@ bool ha_tokudb::commit_inplace_alter_table( &index_drop_offsets[i]); assert_always(found); } - restore_drop_indexes( - table, - index_drop_offsets, - ha_alter_info->index_drop_count); + restore_drop_indexes(index_drop_offsets, + ha_alter_info->index_drop_count); } if (ctx->compression_changed) { uint32_t curr_num_DBs = @@ -1060,11 +1034,7 @@ int ha_tokudb::alter_table_expand_varchar_offsets( // change to a new descriptor DBT row_descriptor; memset(&row_descriptor, 0, sizeof row_descriptor); error = new_row_descriptor( - table, - altered_table, - ha_alter_info, - i, - &row_descriptor); + altered_table, ha_alter_info, i, &row_descriptor); if (error) break; error = share->key_file[i]->change_descriptor( @@ -1142,14 +1112,9 @@ static bool field_in_key_of_table(TABLE *table, Field *field) { // Return true if all changed varchar/varbinary field lengths can be changed // inplace, otherwise return false -static bool change_varchar_length_is_supported( - Field* old_field, - Field* new_field, - TABLE* table, - TABLE* altered_table, - Alter_inplace_info* ha_alter_info, - tokudb_alter_ctx* ctx) { - +static bool change_varchar_length_is_supported(Field* old_field, + Field* new_field, + tokudb_alter_ctx* ctx) { if (old_field->real_type() != MYSQL_TYPE_VARCHAR || new_field->real_type() != MYSQL_TYPE_VARCHAR || old_field->binary() != new_field->binary() || @@ -1168,12 +1133,9 @@ static bool change_varchar_length_is_supported( // Return true if all changed field lengths can be changed inplace, otherwise // return false -static bool change_length_is_supported( - TABLE* table, - TABLE* altered_table, - Alter_inplace_info* ha_alter_info, - tokudb_alter_ctx* ctx) { - +static bool change_length_is_supported(TABLE* table, + TABLE* altered_table, + tokudb_alter_ctx* ctx) { if (table->s->fields != altered_table->s->fields) return false; if (table->s->null_bytes != altered_table->s->null_bytes) @@ -1193,13 +1155,7 @@ static bool change_length_is_supported( if (field_in_key_of_table(table, old_field) || field_in_key_of_table(altered_table, new_field)) return false; // not in any key - if (!change_varchar_length_is_supported( - old_field, - new_field, - table, - altered_table, - ha_alter_info, - ctx)) + if (!change_varchar_length_is_supported(old_field, new_field, ctx)) return false; } @@ -1307,11 +1263,7 @@ int ha_tokudb::alter_table_expand_one_column( // change to a new descriptor DBT row_descriptor; memset(&row_descriptor, 0, sizeof row_descriptor); error = new_row_descriptor( - table, - altered_table, - ha_alter_info, - i, - &row_descriptor); + altered_table, ha_alter_info, i, &row_descriptor); if (error) break; error = share->key_file[i]->change_descriptor( @@ -1426,11 +1378,7 @@ int ha_tokudb::alter_table_expand_blobs( // change to a new descriptor DBT row_descriptor; memset(&row_descriptor, 0, sizeof row_descriptor); error = new_row_descriptor( - table, - altered_table, - ha_alter_info, - i, - &row_descriptor); + altered_table, ha_alter_info, i, &row_descriptor); if (error) break; error = share->key_file[i]->change_descriptor( @@ -1486,13 +1434,9 @@ int ha_tokudb::alter_table_expand_blobs( } // Return true if two fixed length fields can be changed inplace -static bool change_fixed_length_is_supported( - TABLE* table, - TABLE* altered_table, - Field* old_field, - Field* new_field, - tokudb_alter_ctx* ctx) { - +static bool change_fixed_length_is_supported(Field* old_field, + Field* new_field, + tokudb_alter_ctx* ctx) { // no change in size is supported if (old_field->pack_length() == new_field->pack_length()) return true; @@ -1503,13 +1447,9 @@ static bool change_fixed_length_is_supported( return true; } -static bool change_blob_length_is_supported( - TABLE* table, - TABLE* altered_table, - Field* old_field, - Field* new_field, - tokudb_alter_ctx* ctx) { - +static bool change_blob_length_is_supported(Field* old_field, + Field* new_field, + tokudb_alter_ctx* ctx) { // blob -> longer or equal length blob if (old_field->binary() && new_field->binary() && old_field->pack_length() <= new_field->pack_length()) { @@ -1541,26 +1481,16 @@ static bool is_int_type(enum_field_types t) { } // Return true if two field types can be changed inplace -static bool change_field_type_is_supported( - Field* old_field, - Field* new_field, - TABLE* table, - TABLE* altered_table, - Alter_inplace_info* ha_alter_info, - tokudb_alter_ctx* ctx) { - +static bool change_field_type_is_supported(Field* old_field, + Field* new_field, + tokudb_alter_ctx* ctx) { enum_field_types old_type = old_field->real_type(); enum_field_types new_type = new_field->real_type(); if (is_int_type(old_type)) { // int and unsigned int expansion if (is_int_type(new_type) && is_unsigned(old_field) == is_unsigned(new_field)) - return change_fixed_length_is_supported( - table, - altered_table, - old_field, - new_field, - ctx); + return change_fixed_length_is_supported(old_field, new_field, ctx); else return false; } else if (old_type == MYSQL_TYPE_STRING) { @@ -1568,43 +1498,24 @@ static bool change_field_type_is_supported( if (new_type == MYSQL_TYPE_STRING && old_field->binary() == new_field->binary() && old_field->charset()->number == new_field->charset()->number) - return change_fixed_length_is_supported( - table, - altered_table, - old_field, - new_field, - ctx); + return change_fixed_length_is_supported(old_field, new_field, ctx); else return false; } else if (old_type == MYSQL_TYPE_VARCHAR) { // varchar(X) -> varchar(Y) and varbinary(X) -> varbinary(Y) expansion // where X < 256 <= Y the ALTER_COLUMN_TYPE handler flag is set for // these cases - return change_varchar_length_is_supported( - old_field, - new_field, - table, - altered_table, - ha_alter_info, - ctx); + return change_varchar_length_is_supported(old_field, new_field, ctx); } else if (old_type == MYSQL_TYPE_BLOB && new_type == MYSQL_TYPE_BLOB) { - return change_blob_length_is_supported( - table, - altered_table, - old_field, - new_field, - ctx); + return change_blob_length_is_supported(old_field, new_field, ctx); } else return false; } // Return true if all changed field types can be changed inplace -static bool change_type_is_supported( - TABLE* table, - TABLE* altered_table, - Alter_inplace_info* ha_alter_info, - tokudb_alter_ctx* ctx) { - +static bool change_type_is_supported(TABLE* table, + TABLE* altered_table, + tokudb_alter_ctx* ctx) { if (table->s->null_bytes != altered_table->s->null_bytes) return false; if (table->s->fields != altered_table->s->fields) @@ -1620,13 +1531,7 @@ static bool change_type_is_supported( if (field_in_key_of_table(table, old_field) || field_in_key_of_table(altered_table, new_field)) return false; - if (!change_field_type_is_supported( - old_field, - new_field, - table, - altered_table, - ha_alter_info, - ctx)) + if (!change_field_type_is_supported(old_field, new_field, ctx)) return false; } return true; @@ -1636,13 +1541,10 @@ static bool change_type_is_supported( // table identified with idx. // Return the new descriptor in the row_descriptor DBT. // Return non-zero on error. -int ha_tokudb::new_row_descriptor( - TABLE* table, - TABLE* altered_table, - Alter_inplace_info* ha_alter_info, - uint32_t idx, - DBT* row_descriptor) { - +int ha_tokudb::new_row_descriptor(TABLE* altered_table, + Alter_inplace_info* ha_alter_info, + uint32_t idx, + DBT* row_descriptor) { int error = 0; tokudb_alter_ctx* ctx = static_cast(ha_alter_info->handler_ctx); diff --git a/storage/tokudb/ha_tokudb_update.cc b/storage/tokudb/ha_tokudb_update.cc index 9fe5e729ec4e..1669a4be77e1 100644 --- a/storage/tokudb/ha_tokudb_update.cc +++ b/storage/tokudb/ha_tokudb_update.cc @@ -130,7 +130,7 @@ static void dump_item_list(const char* h, List &l) { } // Find a Field by its Item name -static Field* find_field_by_name(TABLE* table, Item* item) { +static Field* find_field_by_name(TOKUDB_UNUSED(TABLE* table), Item* item) { if (item->type() != Item::FIELD_ITEM) return NULL; Item_field* field_item = static_cast(item); @@ -191,12 +191,9 @@ static uint32_t var_field_index( return v_index; } -static uint32_t blob_field_index( - TABLE* table, - KEY_AND_COL_INFO* kc_info, - uint idx, - uint field_num) { - +static uint32_t blob_field_index(TABLE* table, + KEY_AND_COL_INFO* kc_info, + uint field_num) { assert_always(field_num < table->s->fields); uint b_index; for (b_index = 0; b_index < kc_info->num_blobs; b_index++) { @@ -773,11 +770,7 @@ static void marshall_update( update_operation = '='; field_type = lhs_field->binary() ? UPDATE_TYPE_BLOB : UPDATE_TYPE_TEXT; offset = - blob_field_index( - table, - &share->kc_info, - table->s->primary_key, - lhs_field->field_index); + blob_field_index(table, &share->kc_info, lhs_field->field_index); v_str = *rhs_item->val_str(&v_str); v_length = v_str.length(); if (v_length >= lhs_field->max_data_length()) { @@ -973,8 +966,8 @@ int ha_tokudb::upsert( error = ENOTSUP; goto check_error; } - - error = send_upsert_message(thd, update_fields, update_values, transaction); + + error = send_upsert_message(update_fields, update_values, transaction); if (error != 0) { goto check_error; } @@ -1035,11 +1028,9 @@ bool ha_tokudb::check_upsert( // Generate an upsert message and send it into the primary tree. // Return 0 if successful. -int ha_tokudb::send_upsert_message( - THD* thd, - List& update_fields, - List& update_values, - DB_TXN* txn) { +int ha_tokudb::send_upsert_message(List& update_fields, + List& update_values, + DB_TXN* txn) { int error = 0; // generate primary key diff --git a/storage/tokudb/hatoku_cmp.cc b/storage/tokudb/hatoku_cmp.cc index 0c4b5be7eb78..f064a1256496 100644 --- a/storage/tokudb/hatoku_cmp.cc +++ b/storage/tokudb/hatoku_cmp.cc @@ -1865,15 +1865,10 @@ static uint32_t pack_desc_pk_info(uchar* buf, KEY_AND_COL_INFO* kc_info, TABLE_S return pos - buf; } -static uint32_t pack_desc_pk_offset_info( - uchar* buf, - KEY_AND_COL_INFO* kc_info, - TABLE_SHARE* table_share, - KEY_PART_INFO* key_part, - KEY* prim_key, - uchar* pk_info - ) -{ +static uint32_t pack_desc_pk_offset_info(uchar* buf, + KEY_PART_INFO* key_part, + KEY* prim_key, + uchar* pk_info) { uchar* pos = buf; uint16 field_index = key_part->field->field_index; bool found_col_in_pk = false; @@ -1999,7 +1994,9 @@ static uint32_t pack_desc_key_length_info(uchar* buf, KEY_AND_COL_INFO* kc_info, return pos - buf; } -static uint32_t pack_desc_char_info(uchar* buf, KEY_AND_COL_INFO* kc_info, TABLE_SHARE* table_share, KEY_PART_INFO* key_part) { +static uint32_t pack_desc_char_info(uchar* buf, + TABLE_SHARE* table_share, + KEY_PART_INFO* key_part) { uchar* pos = buf; uint16 field_index = key_part->field->field_index; Field* field = table_share->field[field_index]; @@ -2561,14 +2558,7 @@ static uint32_t create_toku_secondary_key_pack_descriptor ( pos += sizeof(uint32_t); } if (is_col_in_pk) { - pos += pack_desc_pk_offset_info( - pos, - kc_info, - table_share, - &curr_kpi, - prim_key, - pk_info - ); + pos += pack_desc_pk_offset_info(pos, &curr_kpi, prim_key, pk_info); } else { pos += pack_desc_offset_info( @@ -2585,12 +2575,7 @@ static uint32_t create_toku_secondary_key_pack_descriptor ( table_share, &curr_kpi ); - pos += pack_desc_char_info( - pos, - kc_info, - table_share, - &curr_kpi - ); + pos += pack_desc_char_info(pos, table_share, &curr_kpi); } offset = pos - buf; diff --git a/storage/tokudb/hatoku_cmp.h b/storage/tokudb/hatoku_cmp.h index 34b3cfbe1f80..b9261a608ded 100644 --- a/storage/tokudb/hatoku_cmp.h +++ b/storage/tokudb/hatoku_cmp.h @@ -354,11 +354,7 @@ static uint32_t create_toku_clustering_val_pack_descriptor ( bool is_clustering ); -static inline bool is_key_clustering( - void* row_desc, - uint32_t row_desc_size - ) -{ +static inline bool is_key_clustering(uint32_t row_desc_size) { return (row_desc_size > 0); } @@ -384,12 +380,8 @@ static uint32_t create_toku_secondary_key_pack_descriptor ( KEY* prim_key ); -static inline bool is_key_pk( - void* row_desc, - uint32_t row_desc_size - ) -{ - uchar* buf = (uchar *)row_desc; +static inline bool is_key_pk(void* row_desc) { + uchar* buf = (uchar*)row_desc; return buf[0]; } diff --git a/storage/tokudb/hatoku_hton.cc b/storage/tokudb/hatoku_hton.cc index 114376f3541a..0b4779c5e7ef 100644 --- a/storage/tokudb/hatoku_hton.cc +++ b/storage/tokudb/hatoku_hton.cc @@ -143,7 +143,7 @@ struct tokudb_map_pair { static int tokudb_map_pair_cmp(void *custom_arg, const void *a, const void *b) { #else static int tokudb_map_pair_cmp( - const void* custom_arg, + TOKUDB_UNUSED(const void* custom_arg), const void* a, const void* b) { #endif @@ -678,7 +678,7 @@ static int tokudb_init_func(void *p) { DBUG_RETURN(true); } -static int tokudb_done_func(void* p) { +static int tokudb_done_func(TOKUDB_UNUSED(void* p)) { TOKUDB_DBUG_ENTER(""); tokudb::memory::free(toku_global_status_variables); toku_global_status_variables = NULL; @@ -694,7 +694,8 @@ static handler* tokudb_create_handler( return new(mem_root) ha_tokudb(hton, table); } -int tokudb_end(handlerton* hton, ha_panic_function type) { +int tokudb_end(TOKUDB_UNUSED(handlerton* hton), + TOKUDB_UNUSED(ha_panic_function type)) { TOKUDB_DBUG_ENTER(""); int error = 0; @@ -774,7 +775,7 @@ int tokudb_end(handlerton* hton, ha_panic_function type) { TOKUDB_DBUG_RETURN(error); } -static int tokudb_close_connection(handlerton* hton, THD* thd) { +static int tokudb_close_connection(TOKUDB_UNUSED(handlerton* hton), THD* thd) { int error = 0; tokudb_trx_data* trx = (tokudb_trx_data*)thd_get_ha_data(thd, tokudb_hton); if (trx && trx->checkpoint_lock_taken) { @@ -796,13 +797,13 @@ static int tokudb_close_connection(handlerton* hton, THD* thd) { return error; } -void tokudb_kill_connection(handlerton *hton, THD *thd) { +void tokudb_kill_connection(TOKUDB_UNUSED(handlerton* hton), THD* thd) { TOKUDB_DBUG_ENTER(""); db_env->kill_waiter(db_env, thd); DBUG_VOID_RETURN; } -bool tokudb_flush_logs(handlerton * hton) { +bool tokudb_flush_logs(TOKUDB_UNUSED(handlerton* hton)) { TOKUDB_DBUG_ENTER(""); int error; bool result = 0; @@ -894,7 +895,7 @@ extern "C" enum durability_properties thd_get_durability_property( #endif // Determine if an fsync is used when a transaction is committed. -static bool tokudb_sync_on_commit(THD* thd, tokudb_trx_data* trx, DB_TXN* txn) { +static bool tokudb_sync_on_commit(THD* thd) { #if MYSQL_VERSION_ID >= 50600 // Check the client durability property which is set during 2PC if (thd_get_durability_property(thd) == HA_IGNORE_DURABILITY) @@ -917,8 +918,7 @@ static int tokudb_commit(handlerton * hton, THD * thd, bool all) { DB_TXN **txn = all ? &trx->all : &trx->stmt; DB_TXN *this_txn = *txn; if (this_txn) { - uint32_t syncflag = - tokudb_sync_on_commit(thd, trx, this_txn) ? 0 : DB_TXN_NOSYNC; + uint32_t syncflag = tokudb_sync_on_commit(thd) ? 0 : DB_TXN_NOSYNC; TOKUDB_TRACE_FOR_FLAGS( TOKUDB_DEBUG_TXN, "commit trx %u txn %p syncflag %u", @@ -1034,7 +1034,9 @@ static int tokudb_xa_prepare(handlerton* hton, THD* thd, bool all) { TOKUDB_DBUG_RETURN(r); } -static int tokudb_xa_recover(handlerton* hton, XID* xid_list, uint len) { +static int tokudb_xa_recover(TOKUDB_UNUSED(handlerton* hton), + XID* xid_list, + uint len) { TOKUDB_DBUG_ENTER(""); TOKUDB_TRACE_FOR_FLAGS(TOKUDB_DEBUG_XA, "enter"); int r = 0; @@ -1054,7 +1056,7 @@ static int tokudb_xa_recover(handlerton* hton, XID* xid_list, uint len) { TOKUDB_DBUG_RETURN((int)num_returned); } -static int tokudb_commit_by_xid(handlerton* hton, XID* xid) { +static int tokudb_commit_by_xid(TOKUDB_UNUSED(handlerton* hton), XID* xid) { TOKUDB_DBUG_ENTER(""); TOKUDB_TRACE_FOR_FLAGS(TOKUDB_DEBUG_XA, "enter"); TOKUDB_TRACE_FOR_FLAGS(TOKUDB_DEBUG_XA, "xid %p", xid); @@ -1074,7 +1076,7 @@ static int tokudb_commit_by_xid(handlerton* hton, XID* xid) { TOKUDB_DBUG_RETURN(r); } -static int tokudb_rollback_by_xid(handlerton* hton, XID* xid) { +static int tokudb_rollback_by_xid(TOKUDB_UNUSED(handlerton* hton), XID* xid) { TOKUDB_DBUG_ENTER(""); TOKUDB_TRACE_FOR_FLAGS(TOKUDB_DEBUG_XA, "enter"); TOKUDB_TRACE_FOR_FLAGS(TOKUDB_DEBUG_XA, "xid %p", xid); @@ -1254,15 +1256,13 @@ static int tokudb_discover2( return tokudb_discover3(hton, thd, db, name, path, frmblob, frmlen); } -static int tokudb_discover3( - handlerton* hton, - THD* thd, - const char* db, - const char* name, - char* path, - uchar** frmblob, - size_t* frmlen) { - +static int tokudb_discover3(TOKUDB_UNUSED(handlerton* hton), + THD* thd, + const char* db, + const char* name, + char* path, + uchar** frmblob, + size_t* frmlen) { TOKUDB_DBUG_ENTER("%s %s %s", db, name, path); int error; DB* status_db = NULL; @@ -1525,7 +1525,7 @@ void tokudb_checkpoint_unlock(THD * thd) { } static bool tokudb_show_status( - handlerton* hton, + TOKUDB_UNUSED(handlerton* hton), THD* thd, stat_print_fn* stat_print, enum ha_stat_type stat_type) { @@ -1552,10 +1552,9 @@ static void tokudb_handle_fatal_signal( } #endif -static void tokudb_print_error( - const DB_ENV* db_env, - const char* db_errpfx, - const char* buffer) { +static void tokudb_print_error(TOKUDB_UNUSED(const DB_ENV* db_env), + const char* db_errpfx, + const char* buffer) { sql_print_error("%s: %s", db_errpfx, buffer); } @@ -1666,7 +1665,6 @@ static bool tokudb_txn_id_to_client_id( #endif static void tokudb_pretty_key( - const DB* db, const DBT* key, const char* default_key, String* out) { @@ -1688,12 +1686,12 @@ static void tokudb_pretty_key( } } -void tokudb_pretty_left_key(const DB* db, const DBT* key, String* out) { - tokudb_pretty_key(db, key, "-infinity", out); +void tokudb_pretty_left_key(const DBT* key, String* out) { + tokudb_pretty_key(key, "-infinity", out); } -void tokudb_pretty_right_key(const DB* db, const DBT* key, String* out) { - tokudb_pretty_key(db, key, "+infinity", out); +void tokudb_pretty_right_key(const DBT* key, String* out) { + tokudb_pretty_key(key, "+infinity", out); } const char* tokudb_get_index_name(DB* db) { @@ -1740,20 +1738,20 @@ static void tokudb_lock_timeout_callback( log_str.append_ulonglong(blocking_txnid); if (tokudb_equal_key(left_key, right_key)) { String key_str; - tokudb_pretty_key(db, left_key, "?", &key_str); + tokudb_pretty_key(left_key, "?", &key_str); log_str.append(", \"key\":"); log_str.append("\""); log_str.append(key_str); log_str.append("\""); } else { String left_str; - tokudb_pretty_left_key(db, left_key, &left_str); + tokudb_pretty_left_key(left_key, &left_str); log_str.append(", \"key_left\":"); log_str.append("\""); log_str.append(left_str); log_str.append("\""); String right_str; - tokudb_pretty_right_key(db, right_key, &right_str); + tokudb_pretty_right_key(right_key, &right_str); log_str.append(", \"key_right\":"); log_str.append("\""); log_str.append(right_str); @@ -1817,7 +1815,9 @@ static void tokudb_lock_timeout_callback( // Retrieves variables for information_schema.global_status. // Names (columnname) are automatically converted to upper case, // and prefixed with "TOKUDB_" -static int show_tokudb_vars(THD *thd, SHOW_VAR *var, char *buff) { +static int show_tokudb_vars(TOKUDB_UNUSED(THD* thd), + SHOW_VAR* var, + TOKUDB_UNUSED(char* buff)) { TOKUDB_DBUG_ENTER(""); int error; diff --git a/storage/tokudb/hatoku_hton.h b/storage/tokudb/hatoku_hton.h index 7efc50b96e34..967d754619e5 100644 --- a/storage/tokudb/hatoku_hton.h +++ b/storage/tokudb/hatoku_hton.h @@ -158,7 +158,8 @@ inline toku_compression_method row_type_to_toku_compression_method( void tokudb_checkpoint_lock(THD * thd); void tokudb_checkpoint_unlock(THD * thd); -inline uint64_t tokudb_get_lock_wait_time_callback(uint64_t default_wait_time) { +inline uint64_t tokudb_get_lock_wait_time_callback( + TOKUDB_UNUSED(uint64_t default_wait_time)) { THD *thd = current_thd; return tokudb::sysvars::lock_timeout(thd); } @@ -168,7 +169,8 @@ inline uint64_t tokudb_get_loader_memory_size_callback(void) { return tokudb::sysvars::loader_memory_size(thd); } -inline uint64_t tokudb_get_killed_time_callback(uint64_t default_killed_time) { +inline uint64_t tokudb_get_killed_time_callback( + TOKUDB_UNUSED(uint64_t default_killed_time)) { THD *thd = current_thd; return tokudb::sysvars::killed_time(thd); } @@ -178,7 +180,8 @@ inline int tokudb_killed_callback(void) { return thd_killed(thd); } -inline bool tokudb_killed_thd_callback(void *extra, uint64_t deleted_rows) { +inline bool tokudb_killed_thd_callback(void* extra, + TOKUDB_UNUSED(uint64_t deleted_rows)) { THD *thd = static_cast(extra); return thd_killed(thd) != 0; } @@ -196,8 +199,8 @@ void tokudb_split_dname( String& table_name, String& dictionary_name); -void tokudb_pretty_left_key(const DB* db, const DBT* key, String* out); -void tokudb_pretty_right_key(const DB* db, const DBT* key, String* out); +void tokudb_pretty_left_key(const DBT* key, String* out); +void tokudb_pretty_right_key(const DBT* key, String* out); const char *tokudb_get_index_name(DB* db); #endif //#ifdef _HATOKU_HTON diff --git a/storage/tokudb/tokudb_information_schema.cc b/storage/tokudb/tokudb_information_schema.cc index 6d4569c522d6..eff520837fdc 100644 --- a/storage/tokudb/tokudb_information_schema.cc +++ b/storage/tokudb/tokudb_information_schema.cc @@ -66,12 +66,10 @@ struct trx_extra_t { TABLE *table; }; -int trx_callback( - DB_TXN* txn, - iterate_row_locks_callback iterate_locks, - void* locks_extra, - void *extra) { - +int trx_callback(DB_TXN* txn, + TOKUDB_UNUSED(iterate_row_locks_callback iterate_locks), + TOKUDB_UNUSED(void* locks_extra), + void* extra) { uint64_t txn_id = txn->id64(txn); uint64_t client_id; txn->get_client_id(txn, &client_id, NULL); @@ -90,9 +88,9 @@ int trx_callback( } #if MYSQL_VERSION_ID >= 50600 -int trx_fill_table(THD* thd, TABLE_LIST* tables, Item* cond) { +int trx_fill_table(THD* thd, TABLE_LIST* tables, TOKUDB_UNUSED(Item* cond)) { #else -int trx_fill_table(THD* thd, TABLE_LIST* tables, COND* cond) { +int trx_fill_table(THD* thd, TABLE_LIST* tables, TOKUDB_UNUSED(COND* cond)) { #endif TOKUDB_DBUG_ENTER(""); int error; @@ -120,7 +118,7 @@ int trx_init(void* p) { return 0; } -int trx_done(void* p) { +int trx_done(TOKUDB_UNUSED(void* p)) { return 0; } @@ -188,13 +186,13 @@ int lock_waits_callback( size_t dname_length = strlen(dname); table->field[2]->store(dname, dname_length, system_charset_info); String left_str; - tokudb_pretty_left_key(db, left_key, &left_str); + tokudb_pretty_left_key(left_key, &left_str); table->field[3]->store( left_str.ptr(), left_str.length(), system_charset_info); String right_str; - tokudb_pretty_right_key(db, right_key, &right_str); + tokudb_pretty_right_key(right_key, &right_str); table->field[4]->store( right_str.ptr(), right_str.length(), @@ -225,9 +223,13 @@ int lock_waits_callback( } #if MYSQL_VERSION_ID >= 50600 -int lock_waits_fill_table(THD* thd, TABLE_LIST* tables, Item* cond) { +int lock_waits_fill_table(THD* thd, + TABLE_LIST* tables, + TOKUDB_UNUSED(Item* cond)) { #else -int lock_waits_fill_table(THD* thd, TABLE_LIST* tables, COND* cond) { +int lock_waits_fill_table(THD* thd, + TABLE_LIST* tables, + TOKUDB_UNUSED(COND* cond)) { #endif TOKUDB_DBUG_ENTER(""); int error; @@ -258,7 +260,7 @@ int lock_waits_init(void* p) { return 0; } -int lock_waits_done(void *p) { +int lock_waits_done(TOKUDB_UNUSED(void *p)) { return 0; } @@ -331,14 +333,14 @@ int locks_callback( table->field[2]->store(dname, dname_length, system_charset_info); String left_str; - tokudb_pretty_left_key(db, &left_key, &left_str); + tokudb_pretty_left_key(&left_key, &left_str); table->field[3]->store( left_str.ptr(), left_str.length(), system_charset_info); String right_str; - tokudb_pretty_right_key(db, &right_key, &right_str); + tokudb_pretty_right_key(&right_key, &right_str); table->field[4]->store( right_str.ptr(), right_str.length(), @@ -368,9 +370,9 @@ int locks_callback( } #if MYSQL_VERSION_ID >= 50600 -int locks_fill_table(THD* thd, TABLE_LIST* tables, Item* cond) { +int locks_fill_table(THD* thd, TABLE_LIST* tables, TOKUDB_UNUSED(Item* cond)) { #else -int locks_fill_table(THD* thd, TABLE_LIST* tables, COND* cond) { +int locks_fill_table(THD* thd, TABLE_LIST* tables, TOKUDB_UNUSED(COND* cond)) { #endif TOKUDB_DBUG_ENTER(""); int error; @@ -398,7 +400,7 @@ int locks_init(void* p) { return 0; } -int locks_done(void* p) { +int locks_done(TOKUDB_UNUSED(void* p)) { return 0; } @@ -511,9 +513,13 @@ int report_file_map(TABLE* table, THD* thd) { } #if MYSQL_VERSION_ID >= 50600 -int file_map_fill_table(THD* thd, TABLE_LIST* tables, Item* cond) { +int file_map_fill_table(THD* thd, + TABLE_LIST* tables, + TOKUDB_UNUSED(Item* cond)) { #else -int file_map_fill_table(THD* thd, TABLE_LIST* tables, COND* cond) { +int file_map_fill_table(THD* thd, + TABLE_LIST* tables, + TOKUDB_UNUSED(COND* cond)) { #endif TOKUDB_DBUG_ENTER(""); int error; @@ -541,7 +547,7 @@ int file_map_init(void* p) { return 0; } -int file_map_done(void* p) { +int file_map_done(TOKUDB_UNUSED(void* p)) { return 0; } @@ -716,9 +722,13 @@ int report_fractal_tree_info(TABLE* table, THD* thd) { } #if MYSQL_VERSION_ID >= 50600 -int fractal_tree_info_fill_table(THD* thd, TABLE_LIST* tables, Item* cond) { +int fractal_tree_info_fill_table(THD* thd, + TABLE_LIST* tables, + TOKUDB_UNUSED(Item* cond)) { #else -int fractal_tree_info_fill_table(THD* thd, TABLE_LIST* tables, COND* cond) { +int fractal_tree_info_fill_table(THD* thd, + TABLE_LIST* tables, + TOKUDB_UNUSED(COND* cond)) { #endif TOKUDB_DBUG_ENTER(""); int error; @@ -749,7 +759,7 @@ int fractal_tree_info_init(void* p) { return 0; } -int fractal_tree_info_done(void* p) { +int fractal_tree_info_done(TOKUDB_UNUSED(void* p)) { return 0; } @@ -1010,12 +1020,12 @@ int report_fractal_tree_block_map(TABLE* table, THD* thd) { int fractal_tree_block_map_fill_table( THD* thd, TABLE_LIST* tables, - Item* cond) { + TOKUDB_UNUSED(Item* cond)) { #else int fractal_tree_block_map_fill_table( THD* thd, TABLE_LIST* tables, - COND* cond) { + TOKUDB_UNUSED(COND* cond)) { #endif TOKUDB_DBUG_ENTER(""); int error; @@ -1046,7 +1056,7 @@ int fractal_tree_block_map_init(void* p) { return 0; } -int fractal_tree_block_map_done(void *p) { +int fractal_tree_block_map_done(TOKUDB_UNUSED(void *p)) { return 0; } @@ -1152,9 +1162,9 @@ int report_background_job_status(TABLE *table, THD *thd) { } #if MYSQL_VERSION_ID >= 50600 -int background_job_status_fill_table(THD *thd, TABLE_LIST *tables, Item *cond) { +int background_job_status_fill_table(THD *thd, TABLE_LIST *tables, TOKUDB_UNUSED(Item *cond)) { #else -int background_job_status_fill_table(THD *thd, TABLE_LIST *tables, COND *cond) { +int background_job_status_fill_table(THD *thd, TABLE_LIST *tables, TOKUDB_UNUSED(COND *cond)) { #endif TOKUDB_DBUG_ENTER(""); int error; @@ -1182,7 +1192,7 @@ int background_job_status_init(void* p) { return 0; } -int background_job_status_done(void* p) { +int background_job_status_done(TOKUDB_UNUSED(void* p)) { return 0; } diff --git a/storage/tokudb/tokudb_sysvars.cc b/storage/tokudb/tokudb_sysvars.cc index 31c44c455009..7bc86a30f462 100644 --- a/storage/tokudb/tokudb_sysvars.cc +++ b/storage/tokudb/tokudb_sysvars.cc @@ -140,11 +140,10 @@ static MYSQL_SYSVAR_UINT( 0); static void checkpointing_period_update( - THD* thd, - st_mysql_sys_var* sys_var, + TOKUDB_UNUSED(THD* thd), + TOKUDB_UNUSED(st_mysql_sys_var* sys_var), void* var, const void* save) { - uint* cp = (uint*)var; *cp = *(const uint*)save; int r = db_env->checkpointing_set_period(db_env, *cp); @@ -163,12 +162,10 @@ static MYSQL_SYSVAR_UINT( ~0U, 0); -static void cleaner_iterations_update( - THD* thd, - st_mysql_sys_var* sys_var, - void* var, - const void* save) { - +static void cleaner_iterations_update(TOKUDB_UNUSED(THD* thd), + TOKUDB_UNUSED(st_mysql_sys_var* sys_var), + void* var, + const void* save) { ulong* ci = (ulong*)var; *ci = *(const ulong*)save; int r = db_env->cleaner_set_iterations(db_env, *ci); @@ -187,12 +184,10 @@ static MYSQL_SYSVAR_ULONG( ~0UL, 0); -static void cleaner_period_update( - THD* thd, - st_mysql_sys_var* sys_var, - void* var, - const void * save) { - +static void cleaner_period_update(TOKUDB_UNUSED(THD* thd), + TOKUDB_UNUSED(st_mysql_sys_var* sys_var), + void* var, + const void* save) { ulong* cp = (ulong*)var; *cp = *(const ulong*)save; int r = db_env->cleaner_set_period(db_env, *cp); @@ -273,11 +268,10 @@ static MYSQL_SYSVAR_BOOL( FALSE); static void enable_partial_eviction_update( - THD* thd, - st_mysql_sys_var* sys_var, + TOKUDB_UNUSED(THD* thd), + TOKUDB_UNUSED(st_mysql_sys_var* sys_var), void* var, const void* save) { - my_bool* epe = (my_bool*)var; *epe = *(const my_bool*)save; int r = db_env->evictor_set_enable_partial_eviction(db_env, *epe); @@ -305,12 +299,10 @@ static MYSQL_SYSVAR_INT( 100, 0); -static void fsync_log_period_update( - THD* thd, - st_mysql_sys_var* sys_var, - void* var, - const void* save) { - +static void fsync_log_period_update(TOKUDB_UNUSED(THD* thd), + TOKUDB_UNUSED(st_mysql_sys_var* sys_var), + void* var, + const void* save) { uint* flp = (uint*)var; *flp = *(const uint*)save; db_env->change_fsync_log_period(db_env, *flp); @@ -400,9 +392,11 @@ static MYSQL_SYSVAR_UINT( ~0U, 0); -static void tokudb_dir_per_db_update(THD* thd, - struct st_mysql_sys_var* sys_var, - void* var, const void* save) { +static void tokudb_dir_per_db_update( + TOKUDB_UNUSED(THD* thd), + TOKUDB_UNUSED(struct st_mysql_sys_var* sys_var), + void* var, + const void* save) { my_bool *value = (my_bool *) var; *value = *(const my_bool *) save; db_env->set_dir_per_db(db_env, *value); @@ -550,12 +544,10 @@ static MYSQL_THDVAR_BOOL( NULL, true); -static void checkpoint_lock_update( - THD* thd, - st_mysql_sys_var* var, - void* var_ptr, - const void* save) { - +static void checkpoint_lock_update(TOKUDB_UNUSED(THD* thd), + TOKUDB_UNUSED(st_mysql_sys_var* var), + void* var_ptr, + const void* save) { my_bool* val = (my_bool*)var_ptr; *val= *(my_bool*)save ? true : false; if (*val) { @@ -959,8 +951,10 @@ static void dir_cmd_set_error(THD *thd, THDVAR_SET(thd, dir_cmd_last_error_string, buff); } -static int dir_cmd_check(THD* thd, struct st_mysql_sys_var* var, - void* save, struct st_mysql_value* value) { +static int dir_cmd_check(THD* thd, + TOKUDB_UNUSED(struct st_mysql_sys_var* var), + void* save, + struct st_mysql_value* value) { int error = 0; dir_cmd_set_error(thd, error, ""); diff --git a/storage/tokudb/tokudb_update_fun.cc b/storage/tokudb/tokudb_update_fun.cc index 05149d17317b..f9b8372ec345 100644 --- a/storage/tokudb/tokudb_update_fun.cc +++ b/storage/tokudb/tokudb_update_fun.cc @@ -343,14 +343,11 @@ static inline uint32_t copy_toku_blob( return (length + len_bytes); } -static int tokudb_hcad_update_fun( - DB* db, - const DBT* key, - const DBT* old_val, - const DBT* extra, - void (*set_val)(const DBT* new_val, void* set_extra), - void* set_extra) { - +static int tokudb_hcad_update_fun(const DBT* old_val, + const DBT* extra, + void (*set_val)(const DBT* new_val, + void* set_extra), + void* set_extra) { uint32_t max_num_bytes; uint32_t num_columns; DBT new_val; @@ -761,14 +758,11 @@ static int tokudb_hcad_update_fun( // Expand the variable offset array in the old row given the update mesage // in the extra. -static int tokudb_expand_variable_offsets( - DB* db, - const DBT* key, - const DBT* old_val, - const DBT* extra, - void (*set_val)(const DBT* new_val, void* set_extra), - void* set_extra) { - +static int tokudb_expand_variable_offsets(const DBT* old_val, + const DBT* extra, + void (*set_val)(const DBT* new_val, + void* set_extra), + void* set_extra) { int error = 0; tokudb::buffer extra_val(extra->data, 0, extra->size); @@ -840,14 +834,11 @@ static int tokudb_expand_variable_offsets( } // Expand an int field in a old row given the expand message in the extra. -static int tokudb_expand_int_field( - DB* db, - const DBT* key, - const DBT* old_val, - const DBT* extra, - void (*set_val)(const DBT* new_val, void* set_extra), - void* set_extra) { - +static int tokudb_expand_int_field(const DBT* old_val, + const DBT* extra, + void (*set_val)(const DBT* new_val, + void* set_extra), + void* set_extra) { int error = 0; tokudb::buffer extra_val(extra->data, 0, extra->size); @@ -937,14 +928,11 @@ static int tokudb_expand_int_field( } // Expand a char field in a old row given the expand message in the extra. -static int tokudb_expand_char_field( - DB* db, - const DBT* key, - const DBT* old_val, - const DBT* extra, - void (*set_val)(const DBT* new_val, void* set_extra), - void* set_extra) { - +static int tokudb_expand_char_field(const DBT* old_val, + const DBT* extra, + void (*set_val)(const DBT* new_val, + void* set_extra), + void* set_extra) { int error = 0; tokudb::buffer extra_val(extra->data, 0, extra->size); @@ -1497,14 +1485,11 @@ static uint8_t *consume_uint8_array(tokudb::buffer &b, uint32_t array_size) { return p; } -static int tokudb_expand_blobs( - DB* db, - const DBT* key_dbt, - const DBT* old_val_dbt, - const DBT* extra, - void (*set_val)(const DBT* new_val_dbt, void* set_extra), - void* set_extra) { - +static int tokudb_expand_blobs(const DBT* old_val_dbt, + const DBT* extra, + void (*set_val)(const DBT* new_val_dbt, + void* set_extra), + void* set_extra) { tokudb::buffer extra_val(extra->data, 0, extra->size); uint8_t operation; @@ -1549,12 +1534,9 @@ static int tokudb_expand_blobs( // Decode and apply a sequence of update operations defined in the extra to // the old value and put the result in the new value. -static void apply_1_updates( - tokudb::value_map& vd, - tokudb::buffer& new_val, - tokudb::buffer& old_val, - tokudb::buffer& extra_val) { - +static void apply_1_updates(tokudb::value_map& vd, + tokudb::buffer& old_val, + tokudb::buffer& extra_val) { uint32_t num_updates; extra_val.consume(&num_updates, sizeof num_updates); for ( ; num_updates > 0; num_updates--) { @@ -1628,14 +1610,11 @@ static void apply_1_updates( // Simple update handler. Decode the update message, apply the update operations // to the old value, and set the new value. -static int tokudb_update_1_fun( - DB* db, - const DBT* key_dbt, - const DBT* old_val_dbt, - const DBT* extra, - void (*set_val)(const DBT* new_val_dbt, void* set_extra), - void* set_extra) { - +static int tokudb_update_1_fun(const DBT* old_val_dbt, + const DBT* extra, + void (*set_val)(const DBT* new_val_dbt, + void* set_extra), + void* set_extra) { tokudb::buffer extra_val(extra->data, 0, extra->size); uint8_t operation; @@ -1669,7 +1648,7 @@ static int tokudb_update_1_fun( m_bytes_per_offset); // apply updates to new val - apply_1_updates(vd, new_val, old_val, extra_val); + apply_1_updates(vd, old_val, extra_val); // set the new val DBT new_val_dbt; memset(&new_val_dbt, 0, sizeof new_val_dbt); @@ -1685,14 +1664,11 @@ static int tokudb_update_1_fun( // then insert a new value from the extra. // Otherwise, apply the update operations to the old value, and then set the // new value. -static int tokudb_upsert_1_fun( - DB* db, - const DBT* key_dbt, - const DBT* old_val_dbt, - const DBT* extra, - void (*set_val)(const DBT* new_val_dbt, void* set_extra), - void* set_extra) { - +static int tokudb_upsert_1_fun(const DBT* old_val_dbt, + const DBT* extra, + void (*set_val)(const DBT* new_val_dbt, + void* set_extra), + void* set_extra) { tokudb::buffer extra_val(extra->data, 0, extra->size); uint8_t operation; @@ -1736,7 +1712,7 @@ static int tokudb_upsert_1_fun( m_bytes_per_offset); // apply updates to new val - apply_1_updates(vd, new_val, old_val, extra_val); + apply_1_updates(vd, old_val, extra_val); // set the new val DBT new_val_dbt; memset(&new_val_dbt, 0, sizeof new_val_dbt); @@ -1750,12 +1726,9 @@ static int tokudb_upsert_1_fun( // Decode and apply a sequence of update operations defined in the extra to the // old value and put the result in the new value. -static void apply_2_updates( - tokudb::value_map& vd, - tokudb::buffer& new_val, - tokudb::buffer& old_val, - tokudb::buffer& extra_val) { - +static void apply_2_updates(tokudb::value_map& vd, + tokudb::buffer& old_val, + tokudb::buffer& extra_val) { uint32_t num_updates = consume_uint32(extra_val); for (uint32_t i = 0; i < num_updates; i++) { uint32_t update_operation = consume_uint32(extra_val); @@ -1856,14 +1829,11 @@ static void apply_2_updates( // Simple update handler. Decode the update message, apply the update // operations to the old value, and set the new value. -static int tokudb_update_2_fun( - DB* db, - const DBT* key_dbt, - const DBT* old_val_dbt, - const DBT* extra, - void (*set_val)(const DBT* new_val_dbt, void* set_extra), - void* set_extra) { - +static int tokudb_update_2_fun(const DBT* old_val_dbt, + const DBT* extra, + void (*set_val)(const DBT* new_val_dbt, + void* set_extra), + void* set_extra) { tokudb::buffer extra_val(extra->data, 0, extra->size); uint8_t op; @@ -1883,7 +1853,7 @@ static int tokudb_update_2_fun( tokudb::value_map vd(&new_val); // apply updates to new val - apply_2_updates(vd, new_val, old_val, extra_val); + apply_2_updates(vd, old_val, extra_val); // set the new val DBT new_val_dbt; memset(&new_val_dbt, 0, sizeof new_val_dbt); @@ -1899,14 +1869,11 @@ static int tokudb_update_2_fun( // then insert a new value from the extra. // Otherwise, apply the update operations to the old value, and then set the // new value. -static int tokudb_upsert_2_fun( - DB* db, - const DBT* key_dbt, - const DBT* old_val_dbt, - const DBT* extra, - void (*set_val)(const DBT* new_val_dbt, void* set_extra), - void* set_extra) { - +static int tokudb_upsert_2_fun(const DBT* old_val_dbt, + const DBT* extra, + void (*set_val)(const DBT* new_val_dbt, + void* set_extra), + void* set_extra) { tokudb::buffer extra_val(extra->data, 0, extra->size); uint8_t op; @@ -1937,7 +1904,7 @@ static int tokudb_upsert_2_fun( tokudb::value_map vd(&new_val); // apply updates to new val - apply_2_updates(vd, new_val, old_val, extra_val); + apply_2_updates(vd, old_val, extra_val); // set the new val DBT new_val_dbt; memset(&new_val_dbt, 0, sizeof new_val_dbt); @@ -1952,101 +1919,46 @@ static int tokudb_upsert_2_fun( // This function is the update callback function that is registered with the // YDB environment. It uses the first byte in the update message to identify // the update message type and call the handler for that message. -int tokudb_update_fun( - DB* db, - const DBT* key, - const DBT* old_val, - const DBT* extra, - void (*set_val)(const DBT* new_val, void* set_extra), - void* set_extra) { - +int tokudb_update_fun(TOKUDB_UNUSED(DB* db), + TOKUDB_UNUSED(const DBT* key), + const DBT* old_val, + const DBT* extra, + void (*set_val)(const DBT* new_val, void* set_extra), + void* set_extra) { assert_always(extra->size > 0); uint8_t* extra_pos = (uchar*)extra->data; uint8_t operation = extra_pos[0]; int error; switch (operation) { case UPDATE_OP_COL_ADD_OR_DROP: - error = tokudb_hcad_update_fun( - db, - key, - old_val, - extra, - set_val, - set_extra); + error = tokudb_hcad_update_fun(old_val, extra, set_val, set_extra); break; case UPDATE_OP_EXPAND_VARIABLE_OFFSETS: - error = tokudb_expand_variable_offsets( - db, - key, - old_val, - extra, - set_val, - set_extra); + error = + tokudb_expand_variable_offsets(old_val, extra, set_val, set_extra); break; case UPDATE_OP_EXPAND_INT: case UPDATE_OP_EXPAND_UINT: - error = tokudb_expand_int_field( - db, - key, - old_val, - extra, - set_val, - set_extra); + error = tokudb_expand_int_field(old_val, extra, set_val, set_extra); break; case UPDATE_OP_EXPAND_CHAR: case UPDATE_OP_EXPAND_BINARY: - error = tokudb_expand_char_field( - db, - key, - old_val, - extra, - set_val, - set_extra); + error = tokudb_expand_char_field(old_val, extra, set_val, set_extra); break; case UPDATE_OP_EXPAND_BLOB: - error = tokudb_expand_blobs( - db, - key, - old_val, - extra, - set_val, - set_extra); + error = tokudb_expand_blobs(old_val, extra, set_val, set_extra); break; case UPDATE_OP_UPDATE_1: - error = tokudb_update_1_fun( - db, - key, - old_val, - extra, - set_val, - set_extra); + error = tokudb_update_1_fun(old_val, extra, set_val, set_extra); break; case UPDATE_OP_UPSERT_1: - error = tokudb_upsert_1_fun( - db, - key, - old_val, - extra, - set_val, - set_extra); + error = tokudb_upsert_1_fun(old_val, extra, set_val, set_extra); break; case UPDATE_OP_UPDATE_2: - error = tokudb_update_2_fun( - db, - key, - old_val, - extra, - set_val, - set_extra); + error = tokudb_update_2_fun(old_val, extra, set_val, set_extra); break; case UPDATE_OP_UPSERT_2: - error = tokudb_upsert_2_fun( - db, - key, - old_val, - extra, - set_val, - set_extra); + error = tokudb_upsert_2_fun(old_val, extra, set_val, set_extra); break; default: assert_unreachable(); From 7bfe1375b256d67886c15bb6ec4774ca815aaab7 Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Tue, 3 Apr 2018 16:25:30 -0700 Subject: [PATCH 0720/1221] TDB-183 : TokuDB code has vestigial TOKU_INCLUDE_BACKTRACE which is not used - Removed dead code. --- storage/tokudb/hatoku_hton.cc | 10 ---------- storage/tokudb/tokudb_debug.h | 5 ----- 2 files changed, 15 deletions(-) diff --git a/storage/tokudb/hatoku_hton.cc b/storage/tokudb/hatoku_hton.cc index 114376f3541a..9adb344b124d 100644 --- a/storage/tokudb/hatoku_hton.cc +++ b/storage/tokudb/hatoku_hton.cc @@ -1921,16 +1921,6 @@ static SHOW_VAR toku_global_status_variables_export[]= { {NullS, NullS, SHOW_LONG} }; -#if TOKU_INCLUDE_BACKTRACE -#include -static void tokudb_backtrace(void) { - const int N_POINTERS = 30; - void *backtrace_pointers[N_POINTERS]; - int n = backtrace(backtrace_pointers, N_POINTERS); - backtrace_symbols_fd(backtrace_pointers, n, fileno(stderr)); -} -#endif - #ifdef MARIA_PLUGIN_INTERFACE_VERSION maria_declare_plugin(tokudb) #else diff --git a/storage/tokudb/tokudb_debug.h b/storage/tokudb/tokudb_debug.h index 46bd65c605a2..6ae559af213b 100644 --- a/storage/tokudb/tokudb_debug.h +++ b/storage/tokudb/tokudb_debug.h @@ -29,11 +29,6 @@ Copyright (c) 2006, 2015, Percona and/or its affiliates. All rights reserved. #include "hatoku_defines.h" -#define TOKU_INCLUDE_BACKTRACE 0 -#if TOKU_INCLUDE_BACKTRACE -static void tokudb_backtrace(void); -#endif - // tokudb debug tracing for tokudb_debug declared in tokudb_sysvars.h/.cc #define TOKUDB_DEBUG_INIT (1<<0) #define TOKUDB_DEBUG_OPEN (1<<1) From 2929f4974463d379cccf619948184dc49c3c5ecd Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Tue, 3 Apr 2018 15:17:56 -0700 Subject: [PATCH 0721/1221] TDB-141 : Fix various places where macros are redefined or used when undefined - Previous fix missed several instances that need addressed to keep cross branch diffs minimal. --- storage/tokudb/ha_tokudb.cc | 36 ++++++++------- storage/tokudb/ha_tokudb.h | 30 +++++++------ storage/tokudb/hatoku_defines.h | 2 + storage/tokudb/hatoku_hton.cc | 78 +++++++++++++++++++-------------- storage/tokudb/hatoku_hton.h | 12 +++-- storage/tokudb/tokudb_sysvars.h | 6 ++- 6 files changed, 94 insertions(+), 70 deletions(-) diff --git a/storage/tokudb/ha_tokudb.cc b/storage/tokudb/ha_tokudb.cc index 8354a35cb704..299e6ffd3108 100644 --- a/storage/tokudb/ha_tokudb.cc +++ b/storage/tokudb/ha_tokudb.cc @@ -466,7 +466,7 @@ static inline bool do_ignore_flag_optimization( return do_opt; } -#if TOKU_INCLUDE_EXTENDED_KEYS +#if defined(TOKU_INCLUDE_EXTENDED_KEYS) && TOKU_INCLUDE_EXTENDED_KEYS static inline uint get_ext_key_parts(const KEY *key) { #if (50609 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 50699) || \ (50700 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 50799) @@ -477,7 +477,7 @@ static inline uint get_ext_key_parts(const KEY *key) { #error #endif } -#endif +#endif // defined(TOKU_INCLUDE_EXTENDED_KEYS) && TOKU_INCLUDE_EXTENDED_KEYS ulonglong ha_tokudb::table_flags() const { return int_table_flags | HA_BINLOG_ROW_CAPABLE | HA_BINLOG_STMT_CAPABLE; @@ -2881,11 +2881,11 @@ DBT* ha_tokudb::pack_key( key_length, key_length > 0 ? key_ptr[0] : 0, inf_byte); -#if TOKU_INCLUDE_EXTENDED_KEYS +#if defined(TOKU_INCLUDE_EXTENDED_KEYS) && TOKU_INCLUDE_EXTENDED_KEYS if (keynr != primary_key && !tokudb_test(hidden_primary_key)) { DBUG_RETURN(pack_ext_key(key, keynr, buff, key_ptr, key_length, inf_byte)); } -#endif +#endif // defined(TOKU_INCLUDE_EXTENDED_KEYS) && TOKU_INCLUDE_EXTENDED_KEYS KEY* key_info = &table->key_info[keynr]; KEY_PART_INFO* key_part = key_info->key_part; KEY_PART_INFO* end = key_part + key_info->user_defined_key_parts; @@ -2930,7 +2930,7 @@ DBT* ha_tokudb::pack_key( DBUG_RETURN(key); } -#if TOKU_INCLUDE_EXTENDED_KEYS +#if defined(TOKU_INCLUDE_EXTENDED_KEYS) && TOKU_INCLUDE_EXTENDED_KEYS DBT* ha_tokudb::pack_ext_key( DBT* key, uint keynr, @@ -3036,7 +3036,7 @@ DBT* ha_tokudb::pack_ext_key( dbug_tmp_restore_column_map(table->write_set, old_map); DBUG_RETURN(key); } -#endif +#endif // defined(TOKU_INCLUDE_EXTENDED_KEYS) && TOKU_INCLUDE_EXTENDED_KEYS // // get max used hidden primary key value @@ -4618,10 +4618,10 @@ int ha_tokudb::index_init(uint keynr, bool sorted) { } tokudb_active_index = keynr; -#if TOKU_CLUSTERING_IS_COVERING +#if defined(TOKU_CLUSTERING_IS_COVERING) && TOKU_CLUSTERING_IS_COVERING if (keynr < table->s->keys && table->key_info[keynr].option_struct->clustering) key_read = false; -#endif +#endif // defined(TOKU_CLUSTERING_IS_COVERING) && TOKU_CLUSTERING_IS_COVERING last_cursor_error = 0; range_lock_grabbed = false; @@ -6106,11 +6106,11 @@ void ha_tokudb::position(const uchar * record) { int ha_tokudb::info(uint flag) { TOKUDB_HANDLER_DBUG_ENTER("%d", flag); int error = 0; -#if TOKU_CLUSTERING_IS_COVERING +#if defined(TOKU_CLUSTERING_IS_COVERING) && TOKU_CLUSTERING_IS_COVERING for (uint i=0; i < table->s->keys; i++) if (key_is_clustering(&table->key_info[i])) table->covering_keys.set_bit(i); -#endif +#endif // defined(TOKU_CLUSTERING_IS_COVERING) && TOKU_CLUSTERING_IS_COVERING DB_TXN* txn = NULL; if (flag & HA_STATUS_VARIABLE) { stats.records = share->row_count() + share->rows_from_locked_table; @@ -6684,12 +6684,14 @@ static toku_compression_method get_compression_method(DB* file) { return method; } -#if TOKU_INCLUDE_ROW_TYPE_COMPRESSION +#if defined(TOKU_INCLUDE_ROW_TYPE_COMPRESSION) && \ + TOKU_INCLUDE_ROW_TYPE_COMPRESSION enum row_type ha_tokudb::get_row_type() const { toku_compression_method compression_method = get_compression_method(share->file); return toku_compression_method_to_row_type(compression_method); } -#endif +#endif // defined(TOKU_INCLUDE_ROW_TYPE_COMPRESSION) && + // TOKU_INCLUDE_ROW_TYPE_COMPRESSION static int create_sub_table( const char* table_name, @@ -6814,7 +6816,8 @@ void ha_tokudb::update_create_info(HA_CREATE_INFO* create_info) { create_info->auto_increment_value = stats.auto_increment_value; } } -#if TOKU_INCLUDE_ROW_TYPE_COMPRESSION +#if defined(TOKU_INCLUDE_ROW_TYPE_COMPRESSION) && \ + TOKU_INCLUDE_ROW_TYPE_COMPRESSION if (!(create_info->used_fields & HA_CREATE_USED_ROW_FORMAT)) { // show create table asks us to update this create_info, this makes it // so we'll always show what compression type we're using @@ -6824,7 +6827,8 @@ void ha_tokudb::update_create_info(HA_CREATE_INFO* create_info) { create_info->row_type = ROW_TYPE_DEFAULT; } } -#endif +#endif // defined(TOKU_INCLUDE_ROW_TYPE_COMPRESSION) && + // TOKU_INCLUDE_ROW_TYPE_COMPRESSION } // @@ -7220,7 +7224,7 @@ int ha_tokudb::create( form->s->write_frm_image(); #endif -#if TOKU_INCLUDE_OPTION_STRUCTS +#if defined(TOKU_INCLUDE_OPTION_STRUCTS) && TOKU_INCLUDE_OPTION_STRUCTS const tokudb::sysvars::format_t row_format = (tokudb::sysvars::row_format_t)form->s->option_struct->row_format; #else @@ -7246,7 +7250,7 @@ int ha_tokudb::create( "TokuDB: invalid ROW_FORMAT specifier."); } } -#endif +#endif // defined(TOKU_INCLUDE_OPTION_STRUCTS) && TOKU_INCLUDE_OPTION_STRUCTS const toku_compression_method compression_method = row_format_to_toku_compression_method(row_format); diff --git a/storage/tokudb/ha_tokudb.h b/storage/tokudb/ha_tokudb.h index 9c6af2550cdf..9ca6fcc3b8ac 100644 --- a/storage/tokudb/ha_tokudb.h +++ b/storage/tokudb/ha_tokudb.h @@ -657,9 +657,9 @@ class ha_tokudb : public handler { DBT *create_dbt_key_from_table(DBT * key, uint keynr, uchar * buff, const uchar * record, bool* has_null, int key_length = MAX_KEY_LENGTH); DBT* create_dbt_key_for_lookup(DBT * key, KEY* key_info, uchar * buff, const uchar * record, bool* has_null, int key_length = MAX_KEY_LENGTH); DBT *pack_key(DBT * key, uint keynr, uchar * buff, const uchar * key_ptr, uint key_length, int8_t inf_byte); -#if TOKU_INCLUDE_EXTENDED_KEYS +#if defined(TOKU_INCLUDE_EXTENDED_KEYS) && TOKU_INCLUDE_EXTENDED_KEYS DBT *pack_ext_key(DBT * key, uint keynr, uchar * buff, const uchar * key_ptr, uint key_length, int8_t inf_byte); -#endif +#endif // defined(TOKU_INCLUDE_EXTENDED_KEYS) && TOKU_INCLUDE_EXTENDED_KEYS bool key_changed(uint keynr, const uchar * old_row, const uchar * new_row); int handle_cursor_error(int error, int err_to_return, uint keynr); DBT *get_pos(DBT * to, uchar * pos); @@ -921,7 +921,7 @@ class ha_tokudb : public handler { Item* idx_cond_push(uint keyno, class Item* idx_cond); void cancel_pushed_idx_cond(); -#if TOKU_INCLUDE_ALTER_56 +#if defined(TOKU_INCLUDE_ALTER_56) && TOKU_INCLUDE_ALTER_56 public: enum_alter_inplace_result check_if_supported_inplace_alter(TABLE *altered_table, Alter_inplace_info *ha_alter_info); bool prepare_inplace_alter_table(TABLE *altered_table, Alter_inplace_info *ha_alter_info); @@ -940,15 +940,15 @@ class ha_tokudb : public handler { int new_row_descriptor(TABLE *table, TABLE *altered_table, Alter_inplace_info *ha_alter_info, uint32_t idx, DBT *row_descriptor); public: -#endif -#if TOKU_INCLUDE_ALTER_55 +#endif // defined(TOKU_INCLUDE_ALTER_56) && TOKU_INCLUDE_ALTER_56 +#if defined(TOKU_INCLUDE_ALTER_55) && TOKU_INCLUDE_ALTER_55 public: // Returns true of the 5.6 inplace alter table interface is used. bool try_hot_alter_table(); // Used by the partition storage engine to provide new frm data for the table. int new_alter_table_frm_data(const uchar *frm_data, size_t frm_len); -#endif +#endif // defined(TOKU_INCLUDE_ALTER_55) && TOKU_INCLUDE_ALTER_55 private: int tokudb_add_index(TABLE* table_arg, @@ -1018,9 +1018,11 @@ class ha_tokudb : public handler { uchar* buf, DBT* key_to_compare); -#if TOKU_INCLUDE_ROW_TYPE_COMPRESSION +#if defined(TOKU_INCLUDE_ROW_TYPE_COMPRESSION) && \ + TOKU_INCLUDE_ROW_TYPE_COMPRESSION enum row_type get_row_type() const; -#endif +#endif // defined(TOKU_INCLUDE_ROW_TYPE_COMPRESSION) && + // TOKU_INCLUDE_ROW_TYPE_COMPRESSION private: int read_full_row(uchar * buf); int __close(); @@ -1034,10 +1036,10 @@ class ha_tokudb : public handler { void close_dsmrr(); void reset_dsmrr(); -#if TOKU_INCLUDE_WRITE_FRM_DATA +#if defined(TOKU_INCLUDE_WRITE_FRM_DATA) && TOKU_INCLUDE_WRITE_FRM_DATA int write_frm_data(const uchar *frm_data, size_t frm_len); -#endif -#if TOKU_INCLUDE_UPSERT +#endif // defined(TOKU_INCLUDE_WRITE_FRM_DATA) && TOKU_INCLUDE_WRITE_FRM_DATA +#if defined(TOKU_INCLUDE_UPSERT) && TOKU_INCLUDE_UPSERT private: int fast_update(THD *thd, List &update_fields, List &update_values, Item *conds); bool check_fast_update(THD *thd, List &update_fields, List &update_values, Item *conds); @@ -1045,7 +1047,7 @@ class ha_tokudb : public handler { int upsert(THD *thd, List &update_fields, List &update_values); bool check_upsert(THD *thd, List &update_fields, List &update_values); int send_upsert_message(THD *thd, List &update_fields, List &update_values, DB_TXN *txn); -#endif +#endif // defined(TOKU_INCLUDE_UPSERT) && TOKU_INCLUDE_UPSERT public: // mysql sometimes retires a txn before a cursor that references the txn is closed. // for example, commit is sometimes called before index_end. the following methods @@ -1074,7 +1076,7 @@ class ha_tokudb : public handler { bool in_rpl_update_rows; }; -#if TOKU_INCLUDE_OPTION_STRUCTS +#if defined(TOKU_INCLUDE_OPTION_STRUCTS) && TOKU_INCLUDE_OPTION_STRUCTS struct ha_table_option_struct { uint row_format; }; @@ -1092,7 +1094,7 @@ static inline bool key_is_clustering(const KEY *key) { static inline bool key_is_clustering(const KEY *key) { return key->flags & HA_CLUSTERING; } -#endif +#endif // defined(TOKU_INCLUDE_OPTION_STRUCTS) && TOKU_INCLUDE_OPTION_STRUCTS #endif // _HA_TOKUDB_H diff --git a/storage/tokudb/hatoku_defines.h b/storage/tokudb/hatoku_defines.h index 05a06ac8142e..440bba00eb32 100644 --- a/storage/tokudb/hatoku_defines.h +++ b/storage/tokudb/hatoku_defines.h @@ -54,7 +54,9 @@ Copyright (c) 2006, 2015, Percona and/or its affiliates. All rights reserved. #include #include +#if !defined(__STDC_FORMAT_MACROS) #define __STDC_FORMAT_MACROS +#endif // !defined(__STDC_FORMAT_MACROS) #include #if defined(_WIN32) #include "misc.h" diff --git a/storage/tokudb/hatoku_hton.cc b/storage/tokudb/hatoku_hton.cc index 9adb344b124d..8624d20277d8 100644 --- a/storage/tokudb/hatoku_hton.cc +++ b/storage/tokudb/hatoku_hton.cc @@ -45,7 +45,7 @@ typedef struct savepoint_info { bool in_sub_stmt; } *SP_INFO, SP_INFO_T; -#if TOKU_INCLUDE_OPTION_STRUCTS +#if defined(TOKU_INCLUDE_OPTION_STRUCTS) && TOKU_INCLUDE_OPTION_STRUCTS ha_create_table_option tokudb_table_options[] = { HA_TOPTION_SYSVAR("compression", row_format, row_format), HA_TOPTION_END @@ -55,7 +55,7 @@ ha_create_table_option tokudb_index_options[] = { HA_IOPTION_BOOL("clustering", clustering, 0), HA_IOPTION_END }; -#endif +#endif // defined(TOKU_INCLUDE_OPTION_STRUCTS) && TOKU_INCLUDE_OPTION_STRUCTS static handler* tokudb_create_handler( handlerton* hton, @@ -74,19 +74,21 @@ static bool tokudb_show_status( THD* thd, stat_print_fn* print, enum ha_stat_type); -#if TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL +#if defined(TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL) && \ + TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL static void tokudb_handle_fatal_signal(handlerton* hton, THD* thd, int sig); -#endif +#endif // defined(TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL) && + // TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL static int tokudb_close_connection(handlerton* hton, THD* thd); static void tokudb_kill_connection(handlerton *hton, THD *thd); static int tokudb_commit(handlerton* hton, THD* thd, bool all); static int tokudb_rollback(handlerton* hton, THD* thd, bool all); -#if TOKU_INCLUDE_XA +#if defined(TOKU_INCLUDE_XA) && TOKU_INCLUDE_XA static int tokudb_xa_prepare(handlerton* hton, THD* thd, bool all); static int tokudb_xa_recover(handlerton* hton, XID* xid_list, uint len); static int tokudb_commit_by_xid(handlerton* hton, XID* xid); static int tokudb_rollback_by_xid(handlerton* hton, XID* xid); -#endif +#endif // defined(TOKU_INCLUDE_XA) && TOKU_INCLUDE_XA static int tokudb_rollback_to_savepoint( handlerton* hton, @@ -132,7 +134,7 @@ handlerton* tokudb_hton; const char* ha_tokudb_ext = ".tokudb"; DB_ENV* db_env; -#if TOKU_THDVAR_MEMALLOC_BUG +#if defined(TOKU_THDVAR_MEMALLOC_BUG) && TOKU_THDVAR_MEMALLOC_BUG static tokudb::thread::mutex_t tokudb_map_mutex; static TREE tokudb_map; struct tokudb_map_pair { @@ -157,7 +159,7 @@ static int tokudb_map_pair_cmp( else return 0; }; -#endif +#endif // defined(TOKU_THDVAR_MEMALLOC_BUG) && TOKU_THDVAR_MEMALLOC_BUG static PARTITIONED_COUNTER tokudb_primary_key_bytes_inserted; void toku_hton_update_primary_key_bytes_inserted(uint64_t row_size) { @@ -390,24 +392,26 @@ static int tokudb_init_func(void *p) { #endif tokudb_hton->commit = tokudb_commit; tokudb_hton->rollback = tokudb_rollback; -#if TOKU_INCLUDE_XA +#if defined(TOKU_INCLUDE_XA) && TOKU_INCLUDE_XA tokudb_hton->prepare = tokudb_xa_prepare; tokudb_hton->recover = tokudb_xa_recover; tokudb_hton->commit_by_xid = tokudb_commit_by_xid; tokudb_hton->rollback_by_xid = tokudb_rollback_by_xid; -#endif +#endif // defined(TOKU_INCLUDE_XA) && TOKU_INCLUDE_XA tokudb_hton->panic = tokudb_end; tokudb_hton->flush_logs = tokudb_flush_logs; tokudb_hton->show_status = tokudb_show_status; -#if TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL +#if defined(TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL) && \ + TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL tokudb_hton->handle_fatal_signal = tokudb_handle_fatal_signal; -#endif +#endif // defined(TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL) && + // TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL -#if TOKU_INCLUDE_OPTION_STRUCTS +#if defined(TOKU_INCLUDE_OPTION_STRUCTS) && TOKU_INCLUDE_OPTION_STRUCTS tokudb_hton->table_options = tokudb_table_options; tokudb_hton->index_options = tokudb_index_options; -#endif +#endif // defined(TOKU_INCLUDE_OPTION_STRUCTS) && TOKU_INCLUDE_OPTION_STRUCTS if (!tokudb_home) tokudb_home = mysql_real_data_home; @@ -647,9 +651,9 @@ static int tokudb_init_func(void *p) { tokudb_primary_key_bytes_inserted = create_partitioned_counter(); -#if TOKU_THDVAR_MEMALLOC_BUG +#if defined(TOKU_THDVAR_MEMALLOC_BUG) && TOKU_THDVAR_MEMALLOC_BUG init_tree(&tokudb_map, 0, 0, 0, tokudb_map_pair_cmp, true, NULL, NULL); -#endif +#endif // defined(TOKU_THDVAR_MEMALLOC_BUG) && TOKU_THDVAR_MEMALLOC_BUG if (tokudb::sysvars::strip_frm_data) { r = tokudb::metadata::strip_frm_data(db_env); @@ -714,7 +718,7 @@ int tokudb_end(handlerton* hton, ha_panic_function type) { // count the total number of prepared txn's that we discard long total_prepared = 0; -#if TOKU_INCLUDE_XA +#if defined(TOKU_INCLUDE_XA) && TOKU_INCLUDE_XA TOKUDB_TRACE_FOR_FLAGS(TOKUDB_DEBUG_XA, "begin XA cleanup"); while (1) { // get xid's @@ -741,11 +745,11 @@ int tokudb_end(handlerton* hton, ha_panic_function type) { total_prepared += n_prepared; } TOKUDB_TRACE_FOR_FLAGS(TOKUDB_DEBUG_XA, "end XA cleanup"); -#endif +#endif // defined(TOKU_INCLUDE_XA) && TOKU_INCLUDE_XA error = db_env->close( db_env, total_prepared > 0 ? TOKUFT_DIRTY_SHUTDOWN : 0); -#if TOKU_INCLUDE_XA +#if defined(TOKU_INCLUDE_XA) && TOKU_INCLUDE_XA if (error != 0 && total_prepared > 0) { sql_print_error( "%s: %ld prepared txns still live, please shutdown, error %d", @@ -753,7 +757,7 @@ int tokudb_end(handlerton* hton, ha_panic_function type) { total_prepared, error); } else -#endif +#endif // defined(TOKU_INCLUDE_XA) && TOKU_INCLUDE_XA assert_always(error == 0); db_env = NULL; } @@ -763,9 +767,9 @@ int tokudb_end(handlerton* hton, ha_panic_function type) { tokudb_primary_key_bytes_inserted = NULL; } -#if TOKU_THDVAR_MEMALLOC_BUG +#if defined(TOKU_THDVAR_MEMALLOC_BUG) && TOKU_THDVAR_MEMALLOC_BUG delete_tree(&tokudb_map); -#endif +#endif // defined(TOKU_THDVAR_MEMALLOC_BUG) && TOKU_THDVAR_MEMALLOC_BUG // 3938: drop the initialized flag and unlock tokudb_hton_initialized = 0; @@ -781,7 +785,7 @@ static int tokudb_close_connection(handlerton* hton, THD* thd) { error = db_env->checkpointing_resume(db_env); } tokudb::memory::free(trx); -#if TOKU_THDVAR_MEMALLOC_BUG +#if defined(TOKU_THDVAR_MEMALLOC_BUG) && TOKU_THDVAR_MEMALLOC_BUG mutex_t_lock(tokudb_map_mutex); struct tokudb_map_pair key = {thd, NULL}; struct tokudb_map_pair* found_key = @@ -792,7 +796,7 @@ static int tokudb_close_connection(handlerton* hton, THD* thd) { tree_delete(&tokudb_map, found_key, sizeof(*found_key), NULL); } mutex_t_unlock(tokudb_map_mutex); -#endif +#endif // defined(TOKU_THDVAR_MEMALLOC_BUG) && TOKU_THDVAR_MEMALLOC_BUG return error; } @@ -969,7 +973,7 @@ static int tokudb_rollback(handlerton * hton, THD * thd, bool all) { TOKUDB_DBUG_RETURN(0); } -#if TOKU_INCLUDE_XA +#if defined(TOKU_INCLUDE_XA) && TOKU_INCLUDE_XA static bool tokudb_sync_on_prepare(void) { TOKUDB_TRACE_FOR_FLAGS(TOKUDB_DEBUG_XA, "enter"); // skip sync of log if fsync log period > 0 @@ -1094,7 +1098,7 @@ static int tokudb_rollback_by_xid(handlerton* hton, XID* xid) { TOKUDB_DBUG_RETURN(r); } -#endif +#endif // defined(TOKU_INCLUDE_XA) && TOKU_INCLUDE_XA static int tokudb_savepoint(handlerton * hton, THD * thd, void *savepoint) { TOKUDB_DBUG_ENTER("%p", savepoint); @@ -1540,7 +1544,8 @@ static bool tokudb_show_status( return false; } -#if TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL +#if defined(TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL) && \ + TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL static void tokudb_handle_fatal_signal( TOKUDB_UNUSED(handlerton* hton), TOKUDB_UNUSD(THD* thd), @@ -1550,7 +1555,8 @@ static void tokudb_handle_fatal_signal( db_env_try_gdb_stack_trace(tokudb_gdb_path); } } -#endif +#endif // defined(TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL) && + // TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL static void tokudb_print_error( const DB_ENV* db_env, @@ -1622,7 +1628,8 @@ struct st_mysql_storage_engine tokudb_storage_engine = { MYSQL_HANDLERTON_INTERFACE_VERSION }; -#if TOKU_INCLUDE_LOCK_TIMEOUT_QUERY_STRING +#if defined(TOKU_INCLUDE_LOCK_TIMEOUT_QUERY_STRING) && \ + TOKU_INCLUDE_LOCK_TIMEOUT_QUERY_STRING struct tokudb_search_txn_extra { bool match_found; uint64_t match_txn_id; @@ -1663,7 +1670,8 @@ static bool tokudb_txn_id_to_client_id( } return e.match_found; } -#endif +#endif // defined(TOKU_INCLUDE_LOCK_TIMEOUT_QUERY_STRING) && + // TOKU_INCLUDE_LOCK_TIMEOUT_QUERY_STRING static void tokudb_pretty_key( const DB* db, @@ -1766,14 +1774,14 @@ static void tokudb_lock_timeout_callback( char* new_lock_timeout = tokudb::memory::strdup(log_str.c_ptr(), MY_FAE); tokudb::sysvars::set_last_lock_timeout(thd, new_lock_timeout); -#if TOKU_THDVAR_MEMALLOC_BUG +#if defined(TOKU_THDVAR_MEMALLOC_BUG) && TOKU_THDVAR_MEMALLOC_BUG mutex_t_lock(tokudb_map_mutex); struct tokudb_map_pair old_key = {thd, old_lock_timeout}; tree_delete(&tokudb_map, &old_key, sizeof old_key, NULL); struct tokudb_map_pair new_key = {thd, new_lock_timeout}; tree_insert(&tokudb_map, &new_key, sizeof new_key, NULL); mutex_t_unlock(tokudb_map_mutex); -#endif +#endif // defined(TOKU_THDVAR_MEMALLOC_BUG) && TOKU_THDVAR_MEMALLOC_BUG tokudb::memory::free(old_lock_timeout); } // dump to stderr @@ -1789,7 +1797,8 @@ static void tokudb_lock_timeout_callback( mysql_thread_id, (int)qs->length, qs->str); -#if TOKU_INCLUDE_LOCK_TIMEOUT_QUERY_STRING +#if defined(TOKU_INCLUDE_LOCK_TIMEOUT_QUERY_STRING) && \ + TOKU_INCLUDE_LOCK_TIMEOUT_QUERY_STRING uint64_t blocking_thread_id = 0; if (tokudb_txn_id_to_client_id( thd, @@ -1809,7 +1818,8 @@ static void tokudb_lock_timeout_callback( blocking_qs.c_ptr()); } } -#endif +#endif // defined(TOKU_INCLUDE_LOCK_TIMEOUT_QUERY_STRING) && + // TOKU_INCLUDE_LOCK_TIMEOUT_QUERY_STRING } } } diff --git a/storage/tokudb/hatoku_hton.h b/storage/tokudb/hatoku_hton.h index 7efc50b96e34..d705e62caa55 100644 --- a/storage/tokudb/hatoku_hton.h +++ b/storage/tokudb/hatoku_hton.h @@ -92,7 +92,8 @@ inline toku_compression_method row_format_to_toku_compression_method( inline enum row_type row_format_to_row_type( tokudb::sysvars::row_format_t row_format) { -#if TOKU_INCLUDE_ROW_TYPE_COMPRESSION +#if defined(TOKU_INCLUDE_ROW_TYPE_COMPRESSION) && \ + TOKU_INCLUDE_ROW_TYPE_COMPRESSION switch (row_format) { case tokudb::sysvars::SRV_ROW_FORMAT_UNCOMPRESSED: return ROW_TYPE_TOKU_UNCOMPRESSED; @@ -111,13 +112,15 @@ inline enum row_type row_format_to_row_type( case tokudb::sysvars::SRV_ROW_FORMAT_DEFAULT: return ROW_TYPE_DEFAULT; } -#endif +#endif // defined(TOKU_INCLUDE_ROW_TYPE_COMPRESSION) && + // TOKU_INCLUDE_ROW_TYPE_COMPRESSION return ROW_TYPE_DEFAULT; } inline tokudb::sysvars::row_format_t row_type_to_row_format( enum row_type type) { -#if TOKU_INCLUDE_ROW_TYPE_COMPRESSION +#if defined(TOKU_INCLUDE_ROW_TYPE_COMPRESSION) && \ + TOKU_INCLUDE_ROW_TYPE_COMPRESSION switch (type) { case ROW_TYPE_TOKU_UNCOMPRESSED: return tokudb::sysvars::SRV_ROW_FORMAT_UNCOMPRESSED; @@ -138,7 +141,8 @@ inline tokudb::sysvars::row_format_t row_type_to_row_format( default: return tokudb::sysvars::SRV_ROW_FORMAT_DEFAULT; } -#endif +#endif // defined(TOKU_INCLUDE_ROW_TYPE_COMPRESSION) && + // TOKU_INCLUDE_ROW_TYPE_COMPRESSION return tokudb::sysvars::SRV_ROW_FORMAT_DEFAULT; } diff --git a/storage/tokudb/tokudb_sysvars.h b/storage/tokudb/tokudb_sysvars.h index c446e2125707..b485ff7838b7 100644 --- a/storage/tokudb/tokudb_sysvars.h +++ b/storage/tokudb/tokudb_sysvars.h @@ -84,10 +84,12 @@ extern uint write_status_frequency; extern my_bool dir_per_db; extern char* version; -#if TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL +#if defined(TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL) && \ + TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL extern char* gdb_path; extern my_bool gdb_on_fatal; -#endif +#endif // defined(TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL) && + // TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL extern my_bool check_jemalloc; From aa6b7bc3b2df375d0ac2147c395618f07fc2fc62 Mon Sep 17 00:00:00 2001 From: Tiago Vale Date: Thu, 29 Mar 2018 14:50:46 +0100 Subject: [PATCH 0722/1221] Bug#23320254 TEST CASES ARE CONSTANTLY HANGING AND GENERATE MEMORY LEAKS (post-fix) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Problem ======= ASAN reports memory leaks when running the GCS smoke tests. Analysis ======== Two leaks are identified: 1. Leak on a test itself: std::string pointers on Multinode_Message_handler::on_message_received 2. Leak on the actual GCS code: Xcom_member_state pointer on Gcs_xcom_control::process_control_message (1) happens because a std::string is heap-allocated for each message received, stored in a global std::vector, and never deleted. (2) happens when the GCS receives a control message while *no* state exchange is going on, or when it belongs to a previous state exchange phase. Solution ======== We solve (1) by letting the global std::vector own the std::strings so they are destructed when the std::vector is itself destructed. We solve (2) by deleting the Xcom_member_state pointer when either no state exchange is going on, or when it belongs to a previous state exchange phase. Reviewed-by: André Negrão Reviewed-by: Tiago Jorge RB: 19227 --- .../src/bindings/xcom/gcs_xcom_control_interface.cc | 2 ++ .../src/bindings/xcom/gcs_xcom_state_exchange.cc | 8 +++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_control_interface.cc b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_control_interface.cc index ff2f6e63beb2..bce439240108 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_control_interface.cc +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_control_interface.cc @@ -1465,6 +1465,7 @@ void Gcs_xcom_control::process_control_message(Gcs_message *msg) << configuration_id.msgno << "), node_no(" << configuration_id.node << ")." ) + delete ms_info; delete msg; return; } @@ -1475,6 +1476,7 @@ void Gcs_xcom_control::process_control_message(Gcs_message *msg) << configuration_id.node << ")." ) + // takes ownership of ms_info bool can_install_view= m_state_exchange->process_member_state(ms_info, msg->get_origin()); diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_state_exchange.cc b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_state_exchange.cc index ea6cab05cf7f..c9ebe8102adc 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_state_exchange.cc +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_state_exchange.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -609,6 +609,12 @@ process_member_state(Xcom_member_state *ms_info, << m_configuration_id.node << ")." ) ); + /* + * ms_info will leak if we don't delete it here. + * If this branch is not taken, m_member_states takes ownership of the + * pointer below. + */ + delete ms_info; return false; } From b07475b79d95a62ceb431933028667d4a35dca03 Mon Sep 17 00:00:00 2001 From: Fungo Wang Date: Mon, 12 Mar 2018 21:42:06 +0800 Subject: [PATCH 0723/1221] TDB-130: alter TokuDB table comment rebuild whole engine data Alter TokuDB table comment should not using copying algorithm and rebuild whole engine data, only FRM definition should be changed. Make `ha_tokudb::check_if_supported_inplace_alter()` return `HA_ALTER_INPLACE_EXCLUSIVE_LOCK` while altering comment, and mysql server will invoke `ha_tokudb::inplace_alter_table` which will do nothing for altering comment. Besides table comment, there are many other create options that should be ignored by TokuDB, and they are all handled in this patch. --- .../r/alter_table_comment_rebuild_data.result | 186 ++++++++++++++++++ .../t/alter_table_comment_rebuild_data.test | 184 +++++++++++++++++ storage/tokudb/ha_tokudb_alter_56.cc | 38 ++++ 3 files changed, 408 insertions(+) create mode 100644 mysql-test/suite/tokudb.bugs/r/alter_table_comment_rebuild_data.result create mode 100644 mysql-test/suite/tokudb.bugs/t/alter_table_comment_rebuild_data.test diff --git a/mysql-test/suite/tokudb.bugs/r/alter_table_comment_rebuild_data.result b/mysql-test/suite/tokudb.bugs/r/alter_table_comment_rebuild_data.result new file mode 100644 index 000000000000..f536f5163ef2 --- /dev/null +++ b/mysql-test/suite/tokudb.bugs/r/alter_table_comment_rebuild_data.result @@ -0,0 +1,186 @@ +create table t1(id int auto_increment, name varchar(30), primary key(id)) engine=TokuDB; +alter table t1 min_rows = 8; +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(30) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 MIN_ROWS=8 +include/assert.inc [underlying ft file name not changed after alter min_rows] +alter table t1 max_rows = 100; +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(30) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 MIN_ROWS=8 MAX_ROWS=100 +include/assert.inc [underlying ft file name not changed after alter max_rows] +alter table t1 avg_row_length = 100; +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(30) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 MIN_ROWS=8 MAX_ROWS=100 AVG_ROW_LENGTH=100 +include/assert.inc [underlying ft file name not changed after alter avg_row_length] +alter table t1 pack_keys = 1; +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(30) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 MIN_ROWS=8 MAX_ROWS=100 AVG_ROW_LENGTH=100 PACK_KEYS=1 +include/assert.inc [underlying ft file name not changed after alter pack_keys] +alter table t1 character set = utf8; +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(30) CHARACTER SET latin1 DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=TokuDB DEFAULT CHARSET=utf8 MIN_ROWS=8 MAX_ROWS=100 AVG_ROW_LENGTH=100 PACK_KEYS=1 +include/assert.inc [underlying ft file name not changed after alter character set] +alter table t1 data directory = '/tmp'; +Warnings: +Warning 1618 option ignored +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(30) CHARACTER SET latin1 DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=TokuDB DEFAULT CHARSET=utf8 MIN_ROWS=8 MAX_ROWS=100 AVG_ROW_LENGTH=100 PACK_KEYS=1 +include/assert.inc [underlying ft file name not changed after alter data directory] +alter table t1 index directory = '/tmp'; +Warnings: +Warning 1618 option ignored +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(30) CHARACTER SET latin1 DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=TokuDB DEFAULT CHARSET=utf8 MIN_ROWS=8 MAX_ROWS=100 AVG_ROW_LENGTH=100 PACK_KEYS=1 +include/assert.inc [underlying ft file name not changed after alter index directory] +alter table t1 checksum = 1; +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(30) CHARACTER SET latin1 DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=TokuDB DEFAULT CHARSET=utf8 MIN_ROWS=8 MAX_ROWS=100 AVG_ROW_LENGTH=100 PACK_KEYS=1 CHECKSUM=1 +include/assert.inc [underlying ft file name not changed after alter checksum] +alter table t1 delay_key_write=1; +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(30) CHARACTER SET latin1 DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=TokuDB DEFAULT CHARSET=utf8 MIN_ROWS=8 MAX_ROWS=100 AVG_ROW_LENGTH=100 PACK_KEYS=1 CHECKSUM=1 DELAY_KEY_WRITE=1 +include/assert.inc [underlying ft file name not changed after alter delay_key_write] +alter table t1 comment = 'test table'; +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(30) CHARACTER SET latin1 DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=TokuDB DEFAULT CHARSET=utf8 MIN_ROWS=8 MAX_ROWS=100 AVG_ROW_LENGTH=100 PACK_KEYS=1 CHECKSUM=1 DELAY_KEY_WRITE=1 COMMENT='test table' +include/assert.inc [underlying ft file name not changed after alter comment] +alter table t1 password = '123456'; +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(30) CHARACTER SET latin1 DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=TokuDB DEFAULT CHARSET=utf8 MIN_ROWS=8 MAX_ROWS=100 AVG_ROW_LENGTH=100 PACK_KEYS=1 CHECKSUM=1 DELAY_KEY_WRITE=1 COMMENT='test table' +include/assert.inc [underlying ft file name not changed after alter password] +alter table t1 connection = '127.0.0.1:3306'; +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(30) CHARACTER SET latin1 DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=TokuDB DEFAULT CHARSET=utf8 MIN_ROWS=8 MAX_ROWS=100 AVG_ROW_LENGTH=100 PACK_KEYS=1 CHECKSUM=1 DELAY_KEY_WRITE=1 COMMENT='test table' CONNECTION='127.0.0.1:3306' +include/assert.inc [underlying ft file name not changed after alter connection] +alter table t1 key_block_size=32; +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(30) CHARACTER SET latin1 DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=TokuDB DEFAULT CHARSET=utf8 MIN_ROWS=8 MAX_ROWS=100 AVG_ROW_LENGTH=100 PACK_KEYS=1 CHECKSUM=1 DELAY_KEY_WRITE=1 KEY_BLOCK_SIZE=32 COMMENT='test table' CONNECTION='127.0.0.1:3306' +include/assert.inc [underlying ft file name not changed after alter key_block_size] +alter table t1 stats_persistent = 1; +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(30) CHARACTER SET latin1 DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=TokuDB DEFAULT CHARSET=utf8 MIN_ROWS=8 MAX_ROWS=100 AVG_ROW_LENGTH=100 PACK_KEYS=1 STATS_PERSISTENT=1 CHECKSUM=1 DELAY_KEY_WRITE=1 KEY_BLOCK_SIZE=32 COMMENT='test table' CONNECTION='127.0.0.1:3306' +include/assert.inc [underlying ft file name not changed after alter stats_persistent] +alter table t1 stats_auto_recalc = 1; +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(30) CHARACTER SET latin1 DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=TokuDB DEFAULT CHARSET=utf8 MIN_ROWS=8 MAX_ROWS=100 AVG_ROW_LENGTH=100 PACK_KEYS=1 STATS_PERSISTENT=1 STATS_AUTO_RECALC=1 CHECKSUM=1 DELAY_KEY_WRITE=1 KEY_BLOCK_SIZE=32 COMMENT='test table' CONNECTION='127.0.0.1:3306' +include/assert.inc [underlying ft file name not changed after alter stats_auto_recalc] +alter table t1 stats_sample_pages = 1; +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(30) CHARACTER SET latin1 DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=TokuDB DEFAULT CHARSET=utf8 MIN_ROWS=8 MAX_ROWS=100 AVG_ROW_LENGTH=100 PACK_KEYS=1 STATS_PERSISTENT=1 STATS_AUTO_RECALC=1 STATS_SAMPLE_PAGES=1 CHECKSUM=1 DELAY_KEY_WRITE=1 KEY_BLOCK_SIZE=32 COMMENT='test table' CONNECTION='127.0.0.1:3306' +include/assert.inc [underlying ft file name not changed after alter stats_sample_pages] +alter table t1 auto_increment = 1000; +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(30) CHARACTER SET latin1 DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=TokuDB AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8 MIN_ROWS=8 MAX_ROWS=100 AVG_ROW_LENGTH=100 PACK_KEYS=1 STATS_PERSISTENT=1 STATS_AUTO_RECALC=1 STATS_SAMPLE_PAGES=1 CHECKSUM=1 DELAY_KEY_WRITE=1 KEY_BLOCK_SIZE=32 COMMENT='test table' CONNECTION='127.0.0.1:3306' +include/assert.inc [underlying ft file name not changed after alter auto_increment] +alter table t1 row_format=tokudb_lzma; +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(30) CHARACTER SET latin1 DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=TokuDB AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8 MIN_ROWS=8 MAX_ROWS=100 AVG_ROW_LENGTH=100 PACK_KEYS=1 STATS_PERSISTENT=1 STATS_AUTO_RECALC=1 STATS_SAMPLE_PAGES=1 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=TOKUDB_LZMA KEY_BLOCK_SIZE=32 COMMENT='test table' CONNECTION='127.0.0.1:3306' +include/assert.inc [underlying ft file name not changed after alter compression method] +alter table t1 engine=TokuDB; +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(30) CHARACTER SET latin1 DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=TokuDB AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8 MIN_ROWS=8 MAX_ROWS=100 AVG_ROW_LENGTH=100 PACK_KEYS=1 STATS_PERSISTENT=1 STATS_AUTO_RECALC=1 STATS_SAMPLE_PAGES=1 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=TOKUDB_LZMA KEY_BLOCK_SIZE=32 COMMENT='test table' CONNECTION='127.0.0.1:3306' +include/assert.inc [underlying ft file name changed after alter engine type] +alter table t1 convert to character set utf8; +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(30) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=TokuDB AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8 MIN_ROWS=8 MAX_ROWS=100 AVG_ROW_LENGTH=100 PACK_KEYS=1 STATS_PERSISTENT=1 STATS_AUTO_RECALC=1 STATS_SAMPLE_PAGES=1 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=TOKUDB_LZMA KEY_BLOCK_SIZE=32 COMMENT='test table' CONNECTION='127.0.0.1:3306' +include/assert.inc [underlying ft file name changed after alter convert character] +drop table t1; diff --git a/mysql-test/suite/tokudb.bugs/t/alter_table_comment_rebuild_data.test b/mysql-test/suite/tokudb.bugs/t/alter_table_comment_rebuild_data.test new file mode 100644 index 000000000000..fc4f3e0fd3da --- /dev/null +++ b/mysql-test/suite/tokudb.bugs/t/alter_table_comment_rebuild_data.test @@ -0,0 +1,184 @@ +--source include/have_tokudb.inc + +# +# Create a table and get the underlying main ft file name +# +create table t1(id int auto_increment, name varchar(30), primary key(id)) engine=TokuDB; +--let $ori_file= `select internal_file_name from information_schema.tokudb_file_map where table_schema='test' and table_name='t1' and table_dictionary_name='main'` + +# +# Case 1: alter create options that are ignored by TokuDB +# + +# Alter table with min_rows +alter table t1 min_rows = 8; +show create table t1; +--let $new_file=`select internal_file_name from information_schema.tokudb_file_map where table_schema='test' and table_name='t1' and table_dictionary_name='main'` +--let $assert_text= underlying ft file name not changed after alter min_rows +--let $assert_cond= "$ori_file" = "$new_file" +--source include/assert.inc + +# Alter table with max_rows +alter table t1 max_rows = 100; +show create table t1; +--let $new_file=`select internal_file_name from information_schema.tokudb_file_map where table_schema='test' and table_name='t1' and table_dictionary_name='main'` +--let $assert_text= underlying ft file name not changed after alter max_rows +--let $assert_cond= "$ori_file" = "$new_file" +--source include/assert.inc + +# Alter table with avg_row_length +alter table t1 avg_row_length = 100; +show create table t1; +--let $new_file=`select internal_file_name from information_schema.tokudb_file_map where table_schema='test' and table_name='t1' and table_dictionary_name='main'` +--let $assert_text= underlying ft file name not changed after alter avg_row_length +--let $assert_cond= "$ori_file" = "$new_file" +--source include/assert.inc + +# Alter table with pack_keys +alter table t1 pack_keys = 1; +show create table t1; +--let $new_file=`select internal_file_name from information_schema.tokudb_file_map where table_schema='test' and table_name='t1' and table_dictionary_name='main'` +--let $assert_text= underlying ft file name not changed after alter pack_keys +--let $assert_cond= "$ori_file" = "$new_file" +--source include/assert.inc + +# Alter table with default character set +alter table t1 character set = utf8; +show create table t1; +--let $new_file=`select internal_file_name from information_schema.tokudb_file_map where table_schema='test' and table_name='t1' and table_dictionary_name='main'` +--let $assert_text= underlying ft file name not changed after alter character set +--let $assert_cond= "$ori_file" = "$new_file" +--source include/assert.inc + +# Alter table with data directory +alter table t1 data directory = '/tmp'; +show create table t1; +--let $new_file=`select internal_file_name from information_schema.tokudb_file_map where table_schema='test' and table_name='t1' and table_dictionary_name='main'` +--let $assert_text= underlying ft file name not changed after alter data directory +--let $assert_cond= "$ori_file" = "$new_file" +--source include/assert.inc + +# Alter table with index directory +alter table t1 index directory = '/tmp'; +show create table t1; +--let $new_file=`select internal_file_name from information_schema.tokudb_file_map where table_schema='test' and table_name='t1' and table_dictionary_name='main'` +--let $assert_text= underlying ft file name not changed after alter index directory +--let $assert_cond= "$ori_file" = "$new_file" +--source include/assert.inc + +# Alter table with checksum +alter table t1 checksum = 1; +show create table t1; +--let $new_file=`select internal_file_name from information_schema.tokudb_file_map where table_schema='test' and table_name='t1' and table_dictionary_name='main'` +--let $assert_text= underlying ft file name not changed after alter checksum +--let $assert_cond= "$ori_file" = "$new_file" +--source include/assert.inc + +# Alter table with delay_key_write +alter table t1 delay_key_write=1; +show create table t1; +--let $new_file=`select internal_file_name from information_schema.tokudb_file_map where table_schema='test' and table_name='t1' and table_dictionary_name='main'` +--let $assert_text= underlying ft file name not changed after alter delay_key_write +--let $assert_cond= "$ori_file" = "$new_file" +--source include/assert.inc + +# Alter table with comment +alter table t1 comment = 'test table'; +show create table t1; +--let $new_file=`select internal_file_name from information_schema.tokudb_file_map where table_schema='test' and table_name='t1' and table_dictionary_name='main'` +--let $assert_text= underlying ft file name not changed after alter comment +--let $assert_cond= "$ori_file" = "$new_file" +--source include/assert.inc + +# Alter table with password +alter table t1 password = '123456'; +show create table t1; +--let $new_file=`select internal_file_name from information_schema.tokudb_file_map where table_schema='test' and table_name='t1' and table_dictionary_name='main'` +--let $assert_text= underlying ft file name not changed after alter password +--let $assert_cond= "$ori_file" = "$new_file" +--source include/assert.inc + +# Alter table with connection +alter table t1 connection = '127.0.0.1:3306'; +show create table t1; +--let $new_file=`select internal_file_name from information_schema.tokudb_file_map where table_schema='test' and table_name='t1' and table_dictionary_name='main'` +--let $assert_text= underlying ft file name not changed after alter connection +--let $assert_cond= "$ori_file" = "$new_file" +--source include/assert.inc + +# Alter table with key_block_size +alter table t1 key_block_size=32; +show create table t1; +--let $new_file=`select internal_file_name from information_schema.tokudb_file_map where table_schema='test' and table_name='t1' and table_dictionary_name='main'` +--let $assert_text= underlying ft file name not changed after alter key_block_size +--let $assert_cond= "$ori_file" = "$new_file" +--source include/assert.inc + +# Alter table with stats_persistent +alter table t1 stats_persistent = 1; +show create table t1; +--let $new_file=`select internal_file_name from information_schema.tokudb_file_map where table_schema='test' and table_name='t1' and table_dictionary_name='main'` +--let $assert_text= underlying ft file name not changed after alter stats_persistent +--let $assert_cond= "$ori_file" = "$new_file" +--source include/assert.inc + +# Alter table with stats_auto_recalc +alter table t1 stats_auto_recalc = 1; +show create table t1; +--let $new_file=`select internal_file_name from information_schema.tokudb_file_map where table_schema='test' and table_name='t1' and table_dictionary_name='main'` +--let $assert_text= underlying ft file name not changed after alter stats_auto_recalc +--let $assert_cond= "$ori_file" = "$new_file" +--source include/assert.inc + +# Alter table with stats_sample_pages +alter table t1 stats_sample_pages = 1; +show create table t1; +--let $new_file=`select internal_file_name from information_schema.tokudb_file_map where table_schema='test' and table_name='t1' and table_dictionary_name='main'` +--let $assert_text= underlying ft file name not changed after alter stats_sample_pages +--let $assert_cond= "$ori_file" = "$new_file" +--source include/assert.inc + +# +# Case 2: alter create options that only update meta info, i.e inplace +# + +# Alter table with auto_increment +alter table t1 auto_increment = 1000; +show create table t1; +--let $new_file=`select internal_file_name from information_schema.tokudb_file_map where table_schema='test' and table_name='t1' and table_dictionary_name='main'` +--let $assert_text= underlying ft file name not changed after alter auto_increment +--let $assert_cond= "$ori_file" = "$new_file" +--source include/assert.inc + +# Alter table with compression method +alter table t1 row_format=tokudb_lzma; +show create table t1; +--let $new_file=`select internal_file_name from information_schema.tokudb_file_map where table_schema='test' and table_name='t1' and table_dictionary_name='main'` +--let $assert_text= underlying ft file name not changed after alter compression method +--let $assert_cond= "$ori_file" = "$new_file" +--source include/assert.inc + +# +# Case 3: alter create options that rebuild table using copy algorithm +# + +# Alter table with engine type +alter table t1 engine=TokuDB; +show create table t1; +--let $new_file=`select internal_file_name from information_schema.tokudb_file_map where table_schema='test' and table_name='t1' and table_dictionary_name='main'` +--let $assert_text= underlying ft file name changed after alter engine type +--let $assert_cond= "$ori_file" != "$new_file" +--source include/assert.inc + +# Alter table with convert character +alter table t1 convert to character set utf8; +show create table t1; +--let $new_file=`select internal_file_name from information_schema.tokudb_file_map where table_schema='test' and table_name='t1' and table_dictionary_name='main'` +--let $assert_text= underlying ft file name changed after alter convert character +--let $assert_cond= "$ori_file" != "$new_file" +--source include/assert.inc + +# +# clean up +# +drop table t1; diff --git a/storage/tokudb/ha_tokudb_alter_56.cc b/storage/tokudb/ha_tokudb_alter_56.cc index e005d6789538..0c8263387de4 100644 --- a/storage/tokudb/ha_tokudb_alter_56.cc +++ b/storage/tokudb/ha_tokudb_alter_56.cc @@ -248,6 +248,40 @@ static bool only_flags(ulong bits, ulong mask) { return (bits & mask) != 0 && (bits & ~mask) == 0; } +// Table create options that should be ignored by TokuDB +// There are 25 total create options defined by mysql server (see handler.h), +// and only 4 options will touch engine data, either rebuild engine data or +// just update meta info: +// 1. HA_CREATE_USED_AUTO update auto_inc info +// 2. HA_CREATE_USED_CHARSET rebuild table if contains character columns +// 3. HA_CREATE_USED_ENGINE rebuild table +// 4. HA_CREATE_USED_ROW_FORMAT update compression method info +// +// All the others are either not supported by TokuDB or no need to +// touch engine data. +static constexpr uint32_t TOKUDB_IGNORED_ALTER_CREATE_OPTION_FIELDS = + HA_CREATE_USED_RAID | // deprecated field + HA_CREATE_USED_UNION | // for MERGE table + HA_CREATE_USED_INSERT_METHOD | // for MERGE table + HA_CREATE_USED_MIN_ROWS | // for MEMORY table + HA_CREATE_USED_MAX_ROWS | // for NDB table + HA_CREATE_USED_AVG_ROW_LENGTH | // for MyISAM table + HA_CREATE_USED_PACK_KEYS | // for MyISAM table + HA_CREATE_USED_DEFAULT_CHARSET | // no need to rebuild + HA_CREATE_USED_DATADIR | // ignored by alter + HA_CREATE_USED_INDEXDIR | // ignored by alter + HA_CREATE_USED_CHECKSUM | // for MyISAM table + HA_CREATE_USED_DELAY_KEY_WRITE | // for MyISAM table + HA_CREATE_USED_COMMENT | // no need to rebuild + HA_CREATE_USED_PASSWORD | // not supported by community version + HA_CREATE_USED_CONNECTION | // for FEDERATED table + HA_CREATE_USED_KEY_BLOCK_SIZE | // not supported by TokuDB + HA_CREATE_USED_TRANSACTIONAL | // unused + HA_CREATE_USED_PAGE_CHECKSUM | // unsued + HA_CREATE_USED_STATS_PERSISTENT | // not supported by TokuDB + HA_CREATE_USED_STATS_AUTO_RECALC | // not supported by TokuDB + HA_CREATE_USED_STATS_SAMPLE_PAGES; // not supported by TokuDB + // Check if an alter table operation on this table and described by the alter // table parameters is supported inplace and if so, what type of locking is // needed to execute it. return values: @@ -503,6 +537,10 @@ enum_alter_inplace_result ha_tokudb::check_if_supported_inplace_alter( tokudb::sysvars::alter_print_error(thd) != 0)) { result = HA_ALTER_INPLACE_EXCLUSIVE_LOCK; } + } else if (only_flags( + create_info->used_fields, + TOKUDB_IGNORED_ALTER_CREATE_OPTION_FIELDS)) { + result = HA_ALTER_INPLACE_NO_LOCK_AFTER_PREPARE; } } #if TOKU_OPTIMIZE_WITH_RECREATE From 4c5e5b0f964338dcf12b22ebf6e8e9737e2998bd Mon Sep 17 00:00:00 2001 From: Dima Date: Thu, 5 Apr 2018 01:01:31 +0300 Subject: [PATCH 0724/1221] Fix for DOC-651-5.7, mention that XA support in MyRocks is experimental --- doc/source/myrocks/limitations.rst | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/doc/source/myrocks/limitations.rst b/doc/source/myrocks/limitations.rst index 480cf3f6ed1a..3949ed75289d 100644 --- a/doc/source/myrocks/limitations.rst +++ b/doc/source/myrocks/limitations.rst @@ -73,3 +73,9 @@ You should also consider the following: or :variable:`rocksdb_commit_in_the_middle`, please make sure transaction size is small enough. All modifications of the ongoing transactions are kept in memory. + +* The`XA protocol `_ support, + which allows distributed transactions combining multiple separate + transactional resources, is an experimental feature in MyRocks: the + implementation is less tested, it may lack some functionality and be not as + stable as in case of InnoDB. From 45244ef60915443234aae482fbbdeb9980d81839 Mon Sep 17 00:00:00 2001 From: Dima Date: Thu, 5 Apr 2018 01:33:07 +0300 Subject: [PATCH 0725/1221] Fix attempt for DOC-622-5.7, mentioning STWC to work in PS+MyRocks for read-only snapshots --- doc/source/myrocks/differences.rst | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/doc/source/myrocks/differences.rst b/doc/source/myrocks/differences.rst index 4495152dd3b5..8536d98e24bc 100644 --- a/doc/source/myrocks/differences.rst +++ b/doc/source/myrocks/differences.rst @@ -13,17 +13,17 @@ and includes the following differences from the original implementation: depends on the `transaction isolation level `_. - +------------------+------------------------------------------+ - | Storage Engine | Transaction isolation level | - | +--------------------+---------------------+ - | | ``READ COMMITTED`` | ``REPEATABLE READ`` | - +------------------+--------------------+---------------------+ - | InnoDB | Success | Success | - +------------------+--------------------+---------------------+ - | Facebook MyRocks | Fail | Success | - +------------------+--------------------+---------------------+ - | Percona MyRocks | Fail | Fail | - +------------------+--------------------+---------------------+ + +------------------+------------------------------------------------------+ + | Storage Engine | Transaction isolation level | + | +--------------------+---------------------------------+ + | | ``READ COMMITTED`` | ``REPEATABLE READ`` | + +------------------+--------------------+---------------------------------+ + | InnoDB | Success | Success | + +------------------+--------------------+---------------------------------+ + | Facebook MyRocks | Fail | Success | + +------------------+--------------------+---------------------------------+ + | Percona MyRocks | Fail | Success for read-only snapshots | + +------------------+--------------------+---------------------------------+ * Percona MyRocks includes the ``lz4`` and ``zstd`` statically linked libraries. From 574691be5c3a6f2704a4e327aed6a08ce188fb5f Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Tue, 3 Apr 2018 16:25:30 -0700 Subject: [PATCH 0726/1221] TDB-183 : TokuDB code has vestigial TOKU_INCLUDE_BACKTRACE which is not used - Removed dead code. --- storage/tokudb/hatoku_hton.cc | 10 ---------- storage/tokudb/tokudb_debug.h | 5 ----- 2 files changed, 15 deletions(-) diff --git a/storage/tokudb/hatoku_hton.cc b/storage/tokudb/hatoku_hton.cc index c99b7d0786e6..3959611c9f7f 100644 --- a/storage/tokudb/hatoku_hton.cc +++ b/storage/tokudb/hatoku_hton.cc @@ -1844,16 +1844,6 @@ static SHOW_VAR toku_global_status_variables_export[]= { {NullS, NullS, SHOW_LONG, SHOW_SCOPE_GLOBAL} }; -#if TOKU_INCLUDE_BACKTRACE -#include -static void tokudb_backtrace(void) { - const int N_POINTERS = 30; - void *backtrace_pointers[N_POINTERS]; - int n = backtrace(backtrace_pointers, N_POINTERS); - backtrace_symbols_fd(backtrace_pointers, n, fileno(stderr)); -} -#endif - mysql_declare_plugin(tokudb) { MYSQL_STORAGE_ENGINE_PLUGIN, diff --git a/storage/tokudb/tokudb_debug.h b/storage/tokudb/tokudb_debug.h index 46bd65c605a2..6ae559af213b 100644 --- a/storage/tokudb/tokudb_debug.h +++ b/storage/tokudb/tokudb_debug.h @@ -29,11 +29,6 @@ Copyright (c) 2006, 2015, Percona and/or its affiliates. All rights reserved. #include "hatoku_defines.h" -#define TOKU_INCLUDE_BACKTRACE 0 -#if TOKU_INCLUDE_BACKTRACE -static void tokudb_backtrace(void); -#endif - // tokudb debug tracing for tokudb_debug declared in tokudb_sysvars.h/.cc #define TOKUDB_DEBUG_INIT (1<<0) #define TOKUDB_DEBUG_OPEN (1<<1) From 2bc274c5b11656b507ff4e2a3c7517727c5bc483 Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Tue, 3 Apr 2018 15:17:56 -0700 Subject: [PATCH 0727/1221] TDB-141 : Fix various places where macros are redefined or used when undefined - Previous fix missed several instances that need addressed to keep cross branch diffs minimal. --- storage/tokudb/ha_tokudb.cc | 32 ++++++++++-------- storage/tokudb/ha_tokudb.h | 14 ++++---- storage/tokudb/hatoku_defines.h | 2 ++ storage/tokudb/hatoku_hton.cc | 58 +++++++++++++++++++-------------- storage/tokudb/hatoku_hton.h | 12 ++++--- storage/tokudb/tokudb_sysvars.h | 6 ++-- 6 files changed, 74 insertions(+), 50 deletions(-) diff --git a/storage/tokudb/ha_tokudb.cc b/storage/tokudb/ha_tokudb.cc index 1b15f9db28b3..4864d9957e50 100644 --- a/storage/tokudb/ha_tokudb.cc +++ b/storage/tokudb/ha_tokudb.cc @@ -2859,7 +2859,7 @@ DBT* ha_tokudb::pack_key( key_length, key_length > 0 ? key_ptr[0] : 0, inf_byte); -#if TOKU_INCLUDE_EXTENDED_KEYS +#if defined(TOKU_INCLUDE_EXTENDED_KEYS) && TOKU_INCLUDE_EXTENDED_KEYS if (keynr != primary_key && !tokudb_test(hidden_primary_key)) { DBUG_RETURN(pack_ext_key( key, @@ -2869,7 +2869,7 @@ DBT* ha_tokudb::pack_key( key_length, inf_byte)); } -#endif +#endif // defined(TOKU_INCLUDE_EXTENDED_KEYS) && TOKU_INCLUDE_EXTENDED_KEYS KEY* key_info = &table->key_info[keynr]; KEY_PART_INFO* key_part = key_info->key_part; KEY_PART_INFO* end = key_part + key_info->user_defined_key_parts; @@ -2912,7 +2912,7 @@ DBT* ha_tokudb::pack_key( DBUG_RETURN(key); } -#if TOKU_INCLUDE_EXTENDED_KEYS +#if defined(TOKU_INCLUDE_EXTENDED_KEYS) && TOKU_INCLUDE_EXTENDED_KEYS DBT* ha_tokudb::pack_ext_key( DBT* key, uint keynr, @@ -3020,7 +3020,7 @@ DBT* ha_tokudb::pack_ext_key( dbug_tmp_restore_column_map(table->write_set, old_map); DBUG_RETURN(key); } -#endif +#endif // defined(TOKU_INCLUDE_EXTENDED_KEYS) && TOKU_INCLUDE_EXTENDED_KEYS // // get max used hidden primary key value @@ -4657,10 +4657,10 @@ int ha_tokudb::index_init(uint keynr, bool sorted) { } tokudb_active_index = keynr; -#if TOKU_CLUSTERING_IS_COVERING +#if defined(TOKU_CLUSTERING_IS_COVERING) && TOKU_CLUSTERING_IS_COVERING if (keynr < table->s->keys && table->key_info[keynr].option_struct->clustering) key_read = false; -#endif +#endif // defined(TOKU_CLUSTERING_IS_COVERING) && TOKU_CLUSTERING_IS_COVERING last_cursor_error = 0; range_lock_grabbed = false; @@ -6150,11 +6150,11 @@ void ha_tokudb::position(const uchar * record) { int ha_tokudb::info(uint flag) { TOKUDB_HANDLER_DBUG_ENTER("%d", flag); int error = 0; -#if TOKU_CLUSTERING_IS_COVERING +#if defined(TOKU_CLUSTERING_IS_COVERING) && TOKU_CLUSTERING_IS_COVERING for (uint i=0; i < table->s->keys; i++) if (key_is_clustering(&table->key_info[i])) table->covering_keys.set_bit(i); -#endif +#endif // defined(TOKU_CLUSTERING_IS_COVERING) && TOKU_CLUSTERING_IS_COVERING DB_TXN* txn = NULL; if (flag & HA_STATUS_VARIABLE) { stats.records = share->row_count() + share->rows_from_locked_table; @@ -6727,12 +6727,14 @@ static toku_compression_method get_compression_method(DB* file) { return method; } -#if TOKU_INCLUDE_ROW_TYPE_COMPRESSION +#if defined(TOKU_INCLUDE_ROW_TYPE_COMPRESSION) && \ + TOKU_INCLUDE_ROW_TYPE_COMPRESSION enum row_type ha_tokudb::get_row_type() const { toku_compression_method compression_method = get_compression_method(share->file); return toku_compression_method_to_row_type(compression_method); } -#endif +#endif // defined(TOKU_INCLUDE_ROW_TYPE_COMPRESSION) && + // TOKU_INCLUDE_ROW_TYPE_COMPRESSION static int create_sub_table( const char* table_name, @@ -6857,7 +6859,8 @@ void ha_tokudb::update_create_info(HA_CREATE_INFO* create_info) { create_info->auto_increment_value = stats.auto_increment_value; } } -#if TOKU_INCLUDE_ROW_TYPE_COMPRESSION +#if defined(TOKU_INCLUDE_ROW_TYPE_COMPRESSION) && \ + TOKU_INCLUDE_ROW_TYPE_COMPRESSION if (!(create_info->used_fields & HA_CREATE_USED_ROW_FORMAT)) { // show create table asks us to update this create_info, this makes it // so we'll always show what compression type we're using @@ -6867,7 +6870,8 @@ void ha_tokudb::update_create_info(HA_CREATE_INFO* create_info) { create_info->row_type = ROW_TYPE_DEFAULT; } } -#endif +#endif // defined(TOKU_INCLUDE_ROW_TYPE_COMPRESSION) && + // TOKU_INCLUDE_ROW_TYPE_COMPRESSION } // @@ -7255,7 +7259,7 @@ int ha_tokudb::create( memset(&kc_info, 0, sizeof(kc_info)); -#if TOKU_INCLUDE_OPTION_STRUCTS +#if defined(TOKU_INCLUDE_OPTION_STRUCTS) && TOKU_INCLUDE_OPTION_STRUCTS const tokudb::sysvars::format_t row_format = (tokudb::sysvars::row_format_t)form->s->option_struct->row_format; #else @@ -7281,7 +7285,7 @@ int ha_tokudb::create( "TokuDB: invalid ROW_FORMAT specifier."); } } -#endif +#endif // defined(TOKU_INCLUDE_OPTION_STRUCTS) && TOKU_INCLUDE_OPTION_STRUCTS const toku_compression_method compression_method = row_format_to_toku_compression_method(row_format); diff --git a/storage/tokudb/ha_tokudb.h b/storage/tokudb/ha_tokudb.h index 45efca4e7a2c..116e02a2740d 100644 --- a/storage/tokudb/ha_tokudb.h +++ b/storage/tokudb/ha_tokudb.h @@ -644,9 +644,9 @@ class ha_tokudb : public handler { DBT *create_dbt_key_from_table(DBT * key, uint keynr, uchar * buff, const uchar * record, bool* has_null, int key_length = MAX_KEY_LENGTH); DBT* create_dbt_key_for_lookup(DBT * key, KEY* key_info, uchar * buff, const uchar * record, bool* has_null, int key_length = MAX_KEY_LENGTH); DBT *pack_key(DBT * key, uint keynr, uchar * buff, const uchar * key_ptr, uint key_length, int8_t inf_byte); -#if TOKU_INCLUDE_EXTENDED_KEYS +#if defined(TOKU_INCLUDE_EXTENDED_KEYS) && TOKU_INCLUDE_EXTENDED_KEYS DBT *pack_ext_key(DBT * key, uint keynr, uchar * buff, const uchar * key_ptr, uint key_length, int8_t inf_byte); -#endif +#endif // defined(TOKU_INCLUDE_EXTENDED_KEYS) && TOKU_INCLUDE_EXTENDED_KEYS bool key_changed(uint keynr, const uchar * old_row, const uchar * new_row); int handle_cursor_error(int error, int err_to_return); DBT *get_pos(DBT * to, uchar * pos); @@ -964,9 +964,11 @@ class ha_tokudb : public handler { uchar* buf, DBT* key_to_compare); -#if TOKU_INCLUDE_ROW_TYPE_COMPRESSION +#if defined(TOKU_INCLUDE_ROW_TYPE_COMPRESSION) && \ + TOKU_INCLUDE_ROW_TYPE_COMPRESSION enum row_type get_row_type() const; -#endif +#endif // defined(TOKU_INCLUDE_ROW_TYPE_COMPRESSION) && + // TOKU_INCLUDE_ROW_TYPE_COMPRESSION private: int read_full_row(uchar * buf); int __close(); @@ -1032,7 +1034,7 @@ class ha_tokudb : public handler { #endif // defined(TOKU_INCLUDE_RFR) && TOKU_INCLUDE_RFR }; -#if TOKU_INCLUDE_OPTION_STRUCTS +#if defined(TOKU_INCLUDE_OPTION_STRUCTS) && TOKU_INCLUDE_OPTION_STRUCTS struct ha_table_option_struct { uint row_format; }; @@ -1050,7 +1052,7 @@ static inline bool key_is_clustering(const KEY *key) { static inline bool key_is_clustering(const KEY *key) { return key->flags & HA_CLUSTERING; } -#endif +#endif // defined(TOKU_INCLUDE_OPTION_STRUCTS) && TOKU_INCLUDE_OPTION_STRUCTS #endif // _HA_TOKUDB_H diff --git a/storage/tokudb/hatoku_defines.h b/storage/tokudb/hatoku_defines.h index 71015ae18293..164642e40269 100644 --- a/storage/tokudb/hatoku_defines.h +++ b/storage/tokudb/hatoku_defines.h @@ -54,7 +54,9 @@ Copyright (c) 2006, 2015, Percona and/or its affiliates. All rights reserved. #include #include +#if !defined(__STDC_FORMAT_MACROS) #define __STDC_FORMAT_MACROS +#endif // !defined(__STDC_FORMAT_MACROS) #include #if defined(_WIN32) #include "misc.h" diff --git a/storage/tokudb/hatoku_hton.cc b/storage/tokudb/hatoku_hton.cc index 3959611c9f7f..d0f8f15031a0 100644 --- a/storage/tokudb/hatoku_hton.cc +++ b/storage/tokudb/hatoku_hton.cc @@ -51,7 +51,7 @@ typedef struct savepoint_info { bool in_sub_stmt; } *SP_INFO, SP_INFO_T; -#if TOKU_INCLUDE_OPTION_STRUCTS +#if defined(TOKU_INCLUDE_OPTION_STRUCTS) && TOKU_INCLUDE_OPTION_STRUCTS ha_create_table_option tokudb_table_options[] = { HA_TOPTION_SYSVAR("compression", row_format, row_format), HA_TOPTION_END @@ -61,7 +61,7 @@ ha_create_table_option tokudb_index_options[] = { HA_IOPTION_BOOL("clustering", clustering, 0), HA_IOPTION_END }; -#endif +#endif // defined(TOKU_INCLUDE_OPTION_STRUCTS) && TOKU_INCLUDE_OPTION_STRUCTS static handler* tokudb_create_handler( handlerton* hton, @@ -80,9 +80,11 @@ static bool tokudb_show_status( THD* thd, stat_print_fn* print, enum ha_stat_type); -#if TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL +#if defined(TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL) && \ + TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL static void tokudb_handle_fatal_signal(handlerton* hton, THD* thd, int sig); -#endif +#endif // defined(TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL) && + // TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL static int tokudb_close_connection(handlerton* hton, THD* thd); static void tokudb_kill_connection(handlerton *hton, THD *thd); static int tokudb_commit(handlerton* hton, THD* thd, bool all); @@ -130,7 +132,7 @@ handlerton* tokudb_hton; const char* ha_tokudb_ext = ".tokudb"; DB_ENV* db_env; -#if TOKU_THDVAR_MEMALLOC_BUG +#if defined(TOKU_THDVAR_MEMALLOC_BUG) && TOKU_THDVAR_MEMALLOC_BUG static tokudb::thread::mutex_t tokudb_map_mutex; static TREE tokudb_map; struct tokudb_map_pair { @@ -151,7 +153,7 @@ static int tokudb_map_pair_cmp( else return 0; }; -#endif +#endif // defined(TOKU_THDVAR_MEMALLOC_BUG) && TOKU_THDVAR_MEMALLOC_BUG static PARTITIONED_COUNTER tokudb_primary_key_bytes_inserted; void toku_hton_update_primary_key_bytes_inserted(uint64_t row_size) { @@ -389,14 +391,16 @@ static int tokudb_init_func(void *p) { tokudb_hton->panic = tokudb_end; tokudb_hton->flush_logs = tokudb_flush_logs; tokudb_hton->show_status = tokudb_show_status; -#if TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL +#if defined(TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL) && \ + TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL tokudb_hton->handle_fatal_signal = tokudb_handle_fatal_signal; -#endif +#endif // defined(TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL) && + // TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL -#if TOKU_INCLUDE_OPTION_STRUCTS +#if defined(TOKU_INCLUDE_OPTION_STRUCTS) && TOKU_INCLUDE_OPTION_STRUCTS tokudb_hton->table_options = tokudb_table_options; tokudb_hton->index_options = tokudb_index_options; -#endif +#endif // defined(TOKU_INCLUDE_OPTION_STRUCTS) && TOKU_INCLUDE_OPTION_STRUCTS if (!tokudb_home) tokudb_home = mysql_real_data_home; @@ -634,9 +638,9 @@ static int tokudb_init_func(void *p) { tokudb_primary_key_bytes_inserted = create_partitioned_counter(); -#if TOKU_THDVAR_MEMALLOC_BUG +#if defined(TOKU_THDVAR_MEMALLOC_BUG) && TOKU_THDVAR_MEMALLOC_BUG init_tree(&tokudb_map, 0, 0, 0, tokudb_map_pair_cmp, true, NULL, NULL); -#endif +#endif // defined(TOKU_THDVAR_MEMALLOC_BUG) && TOKU_THDVAR_MEMALLOC_BUG if (tokudb::sysvars::strip_frm_data) { r = tokudb::metadata::strip_frm_data(db_env); @@ -747,9 +751,9 @@ int tokudb_end(TOKUDB_UNUSED(handlerton* hton), tokudb_primary_key_bytes_inserted = NULL; } -#if TOKU_THDVAR_MEMALLOC_BUG +#if defined(TOKU_THDVAR_MEMALLOC_BUG) && TOKU_THDVAR_MEMALLOC_BUG delete_tree(&tokudb_map); -#endif +#endif // defined(TOKU_THDVAR_MEMALLOC_BUG) && TOKU_THDVAR_MEMALLOC_BUG // 3938: drop the initialized flag and unlock tokudb_hton_initialized = 0; @@ -765,7 +769,7 @@ static int tokudb_close_connection(TOKUDB_UNUSED(handlerton* hton), THD* thd) { error = db_env->checkpointing_resume(db_env); } tokudb::memory::free(trx); -#if TOKU_THDVAR_MEMALLOC_BUG +#if defined(TOKU_THDVAR_MEMALLOC_BUG) && TOKU_THDVAR_MEMALLOC_BUG mutex_t_lock(tokudb_map_mutex); struct tokudb_map_pair key = {thd, NULL}; struct tokudb_map_pair* found_key = @@ -776,7 +780,7 @@ static int tokudb_close_connection(TOKUDB_UNUSED(handlerton* hton), THD* thd) { tree_delete(&tokudb_map, found_key, sizeof(*found_key), NULL); } mutex_t_unlock(tokudb_map_mutex); -#endif +#endif // defined(TOKU_THDVAR_MEMALLOC_BUG) && TOKU_THDVAR_MEMALLOC_BUG return error; } @@ -1460,7 +1464,8 @@ static bool tokudb_show_status( return false; } -#if TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL +#if defined(TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL) && \ + TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL static void tokudb_handle_fatal_signal( TOKUDB_UNUSED(handlerton* hton), TOKUDB_UNUSD(THD* thd), @@ -1470,7 +1475,8 @@ static void tokudb_handle_fatal_signal( db_env_try_gdb_stack_trace(tokudb_gdb_path); } } -#endif +#endif // defined(TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL) && + // TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL static void tokudb_print_error(TOKUDB_UNUSED(const DB_ENV* db_env), const char* db_errpfx, @@ -1541,7 +1547,8 @@ struct st_mysql_storage_engine tokudb_storage_engine = { MYSQL_HANDLERTON_INTERFACE_VERSION }; -#if TOKU_INCLUDE_LOCK_TIMEOUT_QUERY_STRING +#if defined(TOKU_INCLUDE_LOCK_TIMEOUT_QUERY_STRING) && \ + TOKU_INCLUDE_LOCK_TIMEOUT_QUERY_STRING struct tokudb_search_txn_extra { bool match_found; uint64_t match_txn_id; @@ -1582,7 +1589,8 @@ static bool tokudb_txn_id_to_client_id( } return e.match_found; } -#endif +#endif // defined(TOKU_INCLUDE_LOCK_TIMEOUT_QUERY_STRING) && + // TOKU_INCLUDE_LOCK_TIMEOUT_QUERY_STRING static void tokudb_pretty_key( const DBT* key, @@ -1684,14 +1692,14 @@ static void tokudb_lock_timeout_callback( char* new_lock_timeout = tokudb::memory::strdup(log_str.c_ptr(), MY_FAE); tokudb::sysvars::set_last_lock_timeout(thd, new_lock_timeout); -#if TOKU_THDVAR_MEMALLOC_BUG +#if defined(TOKU_THDVAR_MEMALLOC_BUG) && TOKU_THDVAR_MEMALLOC_BUG mutex_t_lock(tokudb_map_mutex); struct tokudb_map_pair old_key = {thd, old_lock_timeout}; tree_delete(&tokudb_map, &old_key, sizeof old_key, NULL); struct tokudb_map_pair new_key = {thd, new_lock_timeout}; tree_insert(&tokudb_map, &new_key, sizeof new_key, NULL); mutex_t_unlock(tokudb_map_mutex); -#endif +#endif // defined(TOKU_THDVAR_MEMALLOC_BUG) && TOKU_THDVAR_MEMALLOC_BUG tokudb::memory::free(old_lock_timeout); } // dump to stderr @@ -1707,7 +1715,8 @@ static void tokudb_lock_timeout_callback( static_cast(mysql_thread_id), (int)qs.length, qs.str); -#if TOKU_INCLUDE_LOCK_TIMEOUT_QUERY_STRING +#if defined(TOKU_INCLUDE_LOCK_TIMEOUT_QUERY_STRING) && \ + TOKU_INCLUDE_LOCK_TIMEOUT_QUERY_STRING uint64_t blocking_thread_id = 0; if (tokudb_txn_id_to_client_id( thd, @@ -1727,7 +1736,8 @@ static void tokudb_lock_timeout_callback( blocking_qs.c_ptr()); } } -#endif +#endif // defined(TOKU_INCLUDE_LOCK_TIMEOUT_QUERY_STRING) && + // TOKU_INCLUDE_LOCK_TIMEOUT_QUERY_STRING } } } diff --git a/storage/tokudb/hatoku_hton.h b/storage/tokudb/hatoku_hton.h index 967d754619e5..c5b6aab17699 100644 --- a/storage/tokudb/hatoku_hton.h +++ b/storage/tokudb/hatoku_hton.h @@ -92,7 +92,8 @@ inline toku_compression_method row_format_to_toku_compression_method( inline enum row_type row_format_to_row_type( tokudb::sysvars::row_format_t row_format) { -#if TOKU_INCLUDE_ROW_TYPE_COMPRESSION +#if defined(TOKU_INCLUDE_ROW_TYPE_COMPRESSION) && \ + TOKU_INCLUDE_ROW_TYPE_COMPRESSION switch (row_format) { case tokudb::sysvars::SRV_ROW_FORMAT_UNCOMPRESSED: return ROW_TYPE_TOKU_UNCOMPRESSED; @@ -111,13 +112,15 @@ inline enum row_type row_format_to_row_type( case tokudb::sysvars::SRV_ROW_FORMAT_DEFAULT: return ROW_TYPE_DEFAULT; } -#endif +#endif // defined(TOKU_INCLUDE_ROW_TYPE_COMPRESSION) && + // TOKU_INCLUDE_ROW_TYPE_COMPRESSION return ROW_TYPE_DEFAULT; } inline tokudb::sysvars::row_format_t row_type_to_row_format( enum row_type type) { -#if TOKU_INCLUDE_ROW_TYPE_COMPRESSION +#if defined(TOKU_INCLUDE_ROW_TYPE_COMPRESSION) && \ + TOKU_INCLUDE_ROW_TYPE_COMPRESSION switch (type) { case ROW_TYPE_TOKU_UNCOMPRESSED: return tokudb::sysvars::SRV_ROW_FORMAT_UNCOMPRESSED; @@ -138,7 +141,8 @@ inline tokudb::sysvars::row_format_t row_type_to_row_format( default: return tokudb::sysvars::SRV_ROW_FORMAT_DEFAULT; } -#endif +#endif // defined(TOKU_INCLUDE_ROW_TYPE_COMPRESSION) && + // TOKU_INCLUDE_ROW_TYPE_COMPRESSION return tokudb::sysvars::SRV_ROW_FORMAT_DEFAULT; } diff --git a/storage/tokudb/tokudb_sysvars.h b/storage/tokudb/tokudb_sysvars.h index 2c4414aba734..2c2b82312ace 100644 --- a/storage/tokudb/tokudb_sysvars.h +++ b/storage/tokudb/tokudb_sysvars.h @@ -84,10 +84,12 @@ extern uint write_status_frequency; extern my_bool dir_per_db; extern char* version; -#if TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL +#if defined(TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL) && \ + TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL extern char* gdb_path; extern my_bool gdb_on_fatal; -#endif +#endif // defined(TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL) && + // TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL extern my_bool check_jemalloc; From 47c61586bba9014518144cbdd5e844bc136b0575 Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Tue, 3 Apr 2018 17:33:43 -0700 Subject: [PATCH 0728/1221] TDB-180 : 5.7 code still has TOKU_INCLUDE_OPTION_STRUCTS which is a MariaDB specific construct - Removed legacy code. --- storage/tokudb/ha_tokudb.cc | 5 ----- storage/tokudb/ha_tokudb.h | 16 ---------------- storage/tokudb/ha_tokudb_alter.cc | 13 ------------- storage/tokudb/hatoku_hton.cc | 17 ----------------- 4 files changed, 51 deletions(-) diff --git a/storage/tokudb/ha_tokudb.cc b/storage/tokudb/ha_tokudb.cc index 4864d9957e50..1561052c683c 100644 --- a/storage/tokudb/ha_tokudb.cc +++ b/storage/tokudb/ha_tokudb.cc @@ -7259,10 +7259,6 @@ int ha_tokudb::create( memset(&kc_info, 0, sizeof(kc_info)); -#if defined(TOKU_INCLUDE_OPTION_STRUCTS) && TOKU_INCLUDE_OPTION_STRUCTS - const tokudb::sysvars::format_t row_format = - (tokudb::sysvars::row_format_t)form->s->option_struct->row_format; -#else // TDB-76 : CREATE TABLE ... LIKE ... does not use source row_format on // target table // Original code would only use create_info->row_type if @@ -7285,7 +7281,6 @@ int ha_tokudb::create( "TokuDB: invalid ROW_FORMAT specifier."); } } -#endif // defined(TOKU_INCLUDE_OPTION_STRUCTS) && TOKU_INCLUDE_OPTION_STRUCTS const toku_compression_method compression_method = row_format_to_toku_compression_method(row_format); diff --git a/storage/tokudb/ha_tokudb.h b/storage/tokudb/ha_tokudb.h index 116e02a2740d..ae809b8410e3 100644 --- a/storage/tokudb/ha_tokudb.h +++ b/storage/tokudb/ha_tokudb.h @@ -1034,25 +1034,9 @@ class ha_tokudb : public handler { #endif // defined(TOKU_INCLUDE_RFR) && TOKU_INCLUDE_RFR }; -#if defined(TOKU_INCLUDE_OPTION_STRUCTS) && TOKU_INCLUDE_OPTION_STRUCTS -struct ha_table_option_struct { - uint row_format; -}; - -struct ha_index_option_struct { - bool clustering; -}; - -static inline bool key_is_clustering(const KEY *key) { - return (key->flags & HA_CLUSTERING) || (key->option_struct && key->option_struct->clustering); -} - -#else - static inline bool key_is_clustering(const KEY *key) { return key->flags & HA_CLUSTERING; } -#endif // defined(TOKU_INCLUDE_OPTION_STRUCTS) && TOKU_INCLUDE_OPTION_STRUCTS #endif // _HA_TOKUDB_H diff --git a/storage/tokudb/ha_tokudb_alter.cc b/storage/tokudb/ha_tokudb_alter.cc index 8efc9412e6c3..e315a4885b6b 100644 --- a/storage/tokudb/ha_tokudb_alter.cc +++ b/storage/tokudb/ha_tokudb_alter.cc @@ -1062,13 +1062,6 @@ enum_alter_inplace_result ha_tokudb::check_if_supported_inplace_alter( Alter_inplace_info::CHANGE_CREATE_OPTION)) { HA_CREATE_INFO* create_info = ha_alter_info->create_info; -#if TOKU_INCLUDE_OPTION_STRUCTS - // set the USED_ROW_FORMAT flag for use later in this file for changes - // in the table's compression - if (create_info->option_struct->row_format != - table_share->option_struct->row_format) - create_info->used_fields |= HA_CREATE_USED_ROW_FORMAT; -#endif // alter auto_increment if (only_flags(create_info->used_fields, HA_CREATE_USED_AUTO)) { // do a sanity check that the table is what we think it is @@ -1186,14 +1179,8 @@ bool ha_tokudb::inplace_alter_table( assert_always(error == 0); // Set the new compression -#if TOKU_INCLUDE_OPTION_STRUCTS - toku_compression_method method = - row_format_to_toku_compression_method( - (tokudb::sysvars::row_format_t)create_info->option_struct->row_format); -#else toku_compression_method method = row_type_to_toku_compression_method(create_info->row_type); -#endif uint32_t curr_num_DBs = table->s->keys + tokudb_test(hidden_primary_key); for (uint32_t i = 0; i < curr_num_DBs; i++) { db = share->key_file[i]; diff --git a/storage/tokudb/hatoku_hton.cc b/storage/tokudb/hatoku_hton.cc index d0f8f15031a0..1b9314ecbeb7 100644 --- a/storage/tokudb/hatoku_hton.cc +++ b/storage/tokudb/hatoku_hton.cc @@ -51,18 +51,6 @@ typedef struct savepoint_info { bool in_sub_stmt; } *SP_INFO, SP_INFO_T; -#if defined(TOKU_INCLUDE_OPTION_STRUCTS) && TOKU_INCLUDE_OPTION_STRUCTS -ha_create_table_option tokudb_table_options[] = { - HA_TOPTION_SYSVAR("compression", row_format, row_format), - HA_TOPTION_END -}; - -ha_create_table_option tokudb_index_options[] = { - HA_IOPTION_BOOL("clustering", clustering, 0), - HA_IOPTION_END -}; -#endif // defined(TOKU_INCLUDE_OPTION_STRUCTS) && TOKU_INCLUDE_OPTION_STRUCTS - static handler* tokudb_create_handler( handlerton* hton, TABLE_SHARE* table, @@ -397,11 +385,6 @@ static int tokudb_init_func(void *p) { #endif // defined(TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL) && // TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL -#if defined(TOKU_INCLUDE_OPTION_STRUCTS) && TOKU_INCLUDE_OPTION_STRUCTS - tokudb_hton->table_options = tokudb_table_options; - tokudb_hton->index_options = tokudb_index_options; -#endif // defined(TOKU_INCLUDE_OPTION_STRUCTS) && TOKU_INCLUDE_OPTION_STRUCTS - if (!tokudb_home) tokudb_home = mysql_real_data_home; DBUG_PRINT("info", ("tokudb_home: %s", tokudb_home)); From f52117f5364e605fc73db4fe78d95b5eb80a7253 Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Tue, 3 Apr 2018 17:37:26 -0700 Subject: [PATCH 0729/1221] TDB-181 : 5.7 code still has TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL which is a 5.5/MariaDB specific construct - Removed dead code. --- storage/tokudb/hatoku_hton.cc | 24 -------------------- storage/tokudb/tokudb_sysvars.cc | 38 +------------------------------- storage/tokudb/tokudb_sysvars.h | 8 ------- 3 files changed, 1 insertion(+), 69 deletions(-) diff --git a/storage/tokudb/hatoku_hton.cc b/storage/tokudb/hatoku_hton.cc index 1b9314ecbeb7..40148bfbf0fc 100644 --- a/storage/tokudb/hatoku_hton.cc +++ b/storage/tokudb/hatoku_hton.cc @@ -68,11 +68,6 @@ static bool tokudb_show_status( THD* thd, stat_print_fn* print, enum ha_stat_type); -#if defined(TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL) && \ - TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL -static void tokudb_handle_fatal_signal(handlerton* hton, THD* thd, int sig); -#endif // defined(TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL) && - // TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL static int tokudb_close_connection(handlerton* hton, THD* thd); static void tokudb_kill_connection(handlerton *hton, THD *thd); static int tokudb_commit(handlerton* hton, THD* thd, bool all); @@ -379,11 +374,6 @@ static int tokudb_init_func(void *p) { tokudb_hton->panic = tokudb_end; tokudb_hton->flush_logs = tokudb_flush_logs; tokudb_hton->show_status = tokudb_show_status; -#if defined(TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL) && \ - TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL - tokudb_hton->handle_fatal_signal = tokudb_handle_fatal_signal; -#endif // defined(TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL) && - // TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL if (!tokudb_home) tokudb_home = mysql_real_data_home; @@ -1447,20 +1437,6 @@ static bool tokudb_show_status( return false; } -#if defined(TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL) && \ - TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL -static void tokudb_handle_fatal_signal( - TOKUDB_UNUSED(handlerton* hton), - TOKUDB_UNUSD(THD* thd), - int sig) { - - if (tokudb_gdb_on_fatal) { - db_env_try_gdb_stack_trace(tokudb_gdb_path); - } -} -#endif // defined(TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL) && - // TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL - static void tokudb_print_error(TOKUDB_UNUSED(const DB_ENV* db_env), const char* db_errpfx, const char* buffer) { diff --git a/storage/tokudb/tokudb_sysvars.cc b/storage/tokudb/tokudb_sysvars.cc index f196d88cc7d3..e96ab4cf1331 100644 --- a/storage/tokudb/tokudb_sysvars.cc +++ b/storage/tokudb/tokudb_sysvars.cc @@ -64,6 +64,7 @@ my_bool debug_pause_background_job_manager = FALSE; #endif // defined(TOKUDB_DEBUG) && TOKUDB_DEBUG my_bool directio = FALSE; my_bool enable_partial_eviction = TRUE; +// file system reserve as a percentage of total disk space int fs_reserve_percent = 0; uint fsync_log_period = 0; char* log_dir = NULL; @@ -75,14 +76,6 @@ uint write_status_frequency = 0; my_bool dir_per_db = TRUE; char* version = (char*) TOKUDB_VERSION_STR; -// file system reserve as a percentage of total disk space -#if defined(TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL) && \ - TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL -char* gdb_path = NULL; -my_bool gdb_on_fatal = FALSE; -#endif // defined(TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL) && - // TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL - my_bool check_jemalloc = TRUE; static MYSQL_SYSVAR_ULONGLONG( @@ -409,28 +402,6 @@ static MYSQL_SYSVAR_BOOL(dir_per_db, dir_per_db, 0, "TokuDB store ft files in db directories", NULL, tokudb_dir_per_db_update, TRUE); -#if defined(TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL) && \ - TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL -static MYSQL_SYSVAR_STR( - gdb_path, - gdb_path, - PLUGIN_VAR_READONLY|PLUGIN_VAR_RQCMDARG, - "path to gdb for extra debug info on fatal signal", - NULL, - NULL, - "/usr/bin/gdb"); - -static MYSQL_SYSVAR_BOOL( - gdb_on_fatal, - gdb_on_fatal, - 0, - "enable gdb debug info on fatal signal", - NULL, - NULL, - true); -#endif // defined(TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL) && - // TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL - static MYSQL_SYSVAR_BOOL( check_jemalloc, check_jemalloc, @@ -993,13 +964,6 @@ st_mysql_sys_var* system_variables[] = { MYSQL_SYSVAR(version), MYSQL_SYSVAR(write_status_frequency), MYSQL_SYSVAR(dir_per_db), -#if defined(TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL) && \ - TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL - MYSQL_SYSVAR(gdb_path), - MYSQL_SYSVAR(gdb_on_fatal), -#endif // defined(TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL) && - // TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL - MYSQL_SYSVAR(check_jemalloc), // session vars diff --git a/storage/tokudb/tokudb_sysvars.h b/storage/tokudb/tokudb_sysvars.h index 2c2b82312ace..b702cf7daa95 100644 --- a/storage/tokudb/tokudb_sysvars.h +++ b/storage/tokudb/tokudb_sysvars.h @@ -83,14 +83,6 @@ extern char* tmp_dir; extern uint write_status_frequency; extern my_bool dir_per_db; extern char* version; - -#if defined(TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL) && \ - TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL -extern char* gdb_path; -extern my_bool gdb_on_fatal; -#endif // defined(TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL) && - // TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL - extern my_bool check_jemalloc; #if TOKUDB_DEBUG From ebe1f634dc5ee8e2cce7cf03e59c7a7e169f0e26 Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Tue, 3 Apr 2018 17:39:33 -0700 Subject: [PATCH 0730/1221] TDB-182 : 5.7 code still has TOKU_INCLUDE_LOCK_TIMEOUT_QUERY_STRING which is a 5.5/MariaDB specfic construct - Removed dead code. --- storage/tokudb/hatoku_hton.cc | 68 ----------------------------------- 1 file changed, 68 deletions(-) diff --git a/storage/tokudb/hatoku_hton.cc b/storage/tokudb/hatoku_hton.cc index 40148bfbf0fc..482140a589ac 100644 --- a/storage/tokudb/hatoku_hton.cc +++ b/storage/tokudb/hatoku_hton.cc @@ -1506,51 +1506,6 @@ struct st_mysql_storage_engine tokudb_storage_engine = { MYSQL_HANDLERTON_INTERFACE_VERSION }; -#if defined(TOKU_INCLUDE_LOCK_TIMEOUT_QUERY_STRING) && \ - TOKU_INCLUDE_LOCK_TIMEOUT_QUERY_STRING -struct tokudb_search_txn_extra { - bool match_found; - uint64_t match_txn_id; - uint64_t match_client_id; -}; - -static int tokudb_search_txn_callback( - DB_TXN* txn, - iterate_row_locks_callback iterate_locks, - void* locks_extra, - void* extra) { - - uint64_t txn_id = txn->id64(txn); - uint64_t client_id = txn->get_client_id(txn); - struct tokudb_search_txn_extra* e = - reinterpret_cast(extra); - if (e->match_txn_id == txn_id) { - e->match_found = true; - e->match_client_id = client_id; - return 1; - } - return 0; -} - -static bool tokudb_txn_id_to_client_id( - THD* thd, - uint64_t blocking_txnid, - uint64_t* blocking_client_id) { - - struct tokudb_search_txn_extra e = { - false, - blocking_txnid, - 0 - }; - db_env->iterate_live_transactions(db_env, tokudb_search_txn_callback, &e); - if (e.match_found) { - *blocking_client_id = e.match_client_id; - } - return e.match_found; -} -#endif // defined(TOKU_INCLUDE_LOCK_TIMEOUT_QUERY_STRING) && - // TOKU_INCLUDE_LOCK_TIMEOUT_QUERY_STRING - static void tokudb_pretty_key( const DBT* key, const char* default_key, @@ -1674,29 +1629,6 @@ static void tokudb_lock_timeout_callback( static_cast(mysql_thread_id), (int)qs.length, qs.str); -#if defined(TOKU_INCLUDE_LOCK_TIMEOUT_QUERY_STRING) && \ - TOKU_INCLUDE_LOCK_TIMEOUT_QUERY_STRING - uint64_t blocking_thread_id = 0; - if (tokudb_txn_id_to_client_id( - thd, - blocking_txnid, - &blocking_thread_id)) { - - String blocking_qs; - if (get_thread_query_string( - blocking_thread_id, - blocking_qs) == 0) { - - sql_print_error( - "%s: blocking_thread_id:%" PRIu64 " q:%.*s", - tokudb_hton_name, - blocking_thread_id, - blocking_qs.length(), - blocking_qs.c_ptr()); - } - } -#endif // defined(TOKU_INCLUDE_LOCK_TIMEOUT_QUERY_STRING) && - // TOKU_INCLUDE_LOCK_TIMEOUT_QUERY_STRING } } } From 317074bb2920d811cb3899dcf35c22afe02e550d Mon Sep 17 00:00:00 2001 From: Marek Szymczak Date: Thu, 5 Apr 2018 14:48:06 +0200 Subject: [PATCH 0731/1221] Bug#27164826 'MYSQL.FIREWALL_WHITELIST' TABLE DOES NOT CONTAIN PRIMARY KEY Problem ======= firewall_whitelist table could not be replicated due to lack of the primary key in the table. Fix === Primary key cannot be created by using the existing columns in the table. New auto incrementing column has been introduced (ID). Reviewed-by =========== Georgi Kodinov Harin Vadodaria --- packaging/rpm-docker/mysql.spec.in | 1 + packaging/rpm-oel/mysql.spec.in | 1 + packaging/rpm-sles/mysql.spec.in | 1 + 3 files changed, 3 insertions(+) diff --git a/packaging/rpm-docker/mysql.spec.in b/packaging/rpm-docker/mysql.spec.in index d4502fdd737a..6ab1117111a0 100644 --- a/packaging/rpm-docker/mysql.spec.in +++ b/packaging/rpm-docker/mysql.spec.in @@ -209,6 +209,7 @@ rm -f %{buildroot}%{_datadir}/mysql/{mysql.server,mysqld_multi.server,mysql-log- # Remove files pages we explicitly do not want to package rm -rf %{buildroot}%{_infodir}/mysql.info* rm -f %{buildroot}%{_datadir}/mysql/win_install_firewall.sql +rm -f %{buildroot}%{_datadir}/mysql/upgrade_firewall.sql rm -f %{buildroot}%{_datadir}/mysql/audit_log_filter_win_install.sql %check diff --git a/packaging/rpm-oel/mysql.spec.in b/packaging/rpm-oel/mysql.spec.in index 63ce1b496045..534c73c7c2f4 100644 --- a/packaging/rpm-oel/mysql.spec.in +++ b/packaging/rpm-oel/mysql.spec.in @@ -864,6 +864,7 @@ rm -rf %{buildroot}%{_infodir}/mysql.info* rm -rf %{buildroot}%{_datadir}/mysql/mysql.server rm -rf %{buildroot}%{_datadir}/mysql/mysqld_multi.server rm -f %{buildroot}%{_datadir}/mysql/win_install_firewall.sql +rm -f %{buildroot}%{_datadir}/mysql/upgrade_firewall.sql rm -rf %{buildroot}%{_bindir}/mysql_embedded rm -f %{buildroot}%{_datadir}/mysql/audit_log_filter_win_install.sql diff --git a/packaging/rpm-sles/mysql.spec.in b/packaging/rpm-sles/mysql.spec.in index 7806cf07d69a..eba1ab5793e7 100644 --- a/packaging/rpm-sles/mysql.spec.in +++ b/packaging/rpm-sles/mysql.spec.in @@ -656,6 +656,7 @@ rm -rf %{buildroot}%{_datadir}/mysql/mysql.server rm -rf %{buildroot}%{_datadir}/mysql/mysqld_multi.server rm -rf %{buildroot}%{_bindir}/mysql_embedded rm -f %{buildroot}%{_datadir}/mysql/win_install_firewall.sql +rm -f %{buildroot}%{_datadir}/mysql/upgrade_firewall.sql rm -f %{buildroot}%{_datadir}/mysql/audit_log_filter_win_install.sql # Remove upcoming man pages, to avoid breakage when they materialize From b61beefd900387ce788c3a11e798441b3dea48a3 Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Fri, 6 Apr 2018 11:26:39 +0530 Subject: [PATCH 0732/1221] From e484ab3ceb5a080e9a7d3cb5d878060923f85b90 Mon Sep 17 00:00:00 2001 From: Aakanksha Verma Date: Fri, 6 Apr 2018 11:38:10 +0530 Subject: [PATCH 0733/1221] Bug #27542720 SCHEMA MISMATCH - TABLE FLAGS DON'T MATCH, BUT FLAGS ARE NUMBERS PROBLEM During a schema mismatch of flags when tablespace import is attempted the concerned server table flags are not printed instead number of columns are printed , also the table flags are not human readable. FIX Print the table flags instead of columns and in human readable string format for the user's convinience. Reviewed by: Allen Lai RB :19156 --- mysql-test/r/import_schema_mismatch.result | 12 +++++++ .../suite/innodb/r/innodb-wl5522.result | 12 +++---- mysql-test/t/import_schema_mismatch.test | 32 +++++++++++++++++++ storage/innobase/row/row0import.cc | 19 ++++++++--- 4 files changed, 64 insertions(+), 11 deletions(-) create mode 100644 mysql-test/r/import_schema_mismatch.result create mode 100644 mysql-test/t/import_schema_mismatch.test diff --git a/mysql-test/r/import_schema_mismatch.result b/mysql-test/r/import_schema_mismatch.result new file mode 100644 index 000000000000..d3cbb4005506 --- /dev/null +++ b/mysql-test/r/import_schema_mismatch.result @@ -0,0 +1,12 @@ +CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB ROW_FORMAT=COMPACT; +FLUSH TABLES t1 FOR EXPORT; +UNLOCK TABLES; +DROP TABLE t1; +SET GLOBAL innodb_file_format=`Barracuda`; +SET GLOBAL innodb_file_per_table= ON; +CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB ROW_FORMAT=DYNAMIC; +ALTER TABLE t1 DISCARD TABLESPACE; +ALTER TABLE t1 IMPORT TABLESPACE; +ERROR HY000: Schema mismatch (Table flags don't match,server table has ROW_TYPE_DYNAMIC and the meta-data file has ROW_TYPE_COMPACT) +DROP TABLE t1; +SET GLOBAL innodb_file_format=`Antelope`; diff --git a/mysql-test/suite/innodb/r/innodb-wl5522.result b/mysql-test/suite/innodb/r/innodb-wl5522.result index d85873e31d8e..0b624d633c68 100644 --- a/mysql-test/suite/innodb/r/innodb-wl5522.result +++ b/mysql-test/suite/innodb/r/innodb-wl5522.result @@ -580,7 +580,7 @@ SELECT * FROM t1; ERROR HY000: Tablespace has been discarded for table 't1' restore: t1 .ibd and .cfg files ALTER TABLE t1 IMPORT TABLESPACE; -ERROR HY000: Schema mismatch (Table flags don't match, server table has 0x5 and the meta-data file has 0x0) +ERROR HY000: Schema mismatch (Table flags don't match,server table has ROW_TYPE_COMPACT and the meta-data file has ROW_TYPE_REDUNDANT) unlink: t1.ibd unlink: t1.cfg DROP TABLE t1; @@ -592,7 +592,7 @@ SELECT * FROM t1; ERROR HY000: Tablespace has been discarded for table 't1' restore: t1 .ibd and .cfg files ALTER TABLE t1 IMPORT TABLESPACE; -ERROR HY000: Schema mismatch (Table flags don't match, server table has 0x5 and the meta-data file has 0x0) +ERROR HY000: Schema mismatch (Table flags don't match,server table has ROW_TYPE_DYNAMIC and the meta-data file has ROW_TYPE_REDUNDANT) unlink: t1.ibd unlink: t1.cfg DROP TABLE t1; @@ -766,7 +766,7 @@ SELECT * FROM t1; ERROR HY000: Tablespace has been discarded for table 't1' restore: t1 .ibd and .cfg files ALTER TABLE t1 IMPORT TABLESPACE; -ERROR HY000: Schema mismatch (Table flags don't match, server table has 0x5 and the meta-data file has 0x1) +ERROR HY000: Schema mismatch (Table flags don't match,server table has ROW_TYPE_REDUNDANT and the meta-data file has ROW_TYPE_COMPACT) unlink: t1.ibd unlink: t1.cfg DROP TABLE t1; @@ -778,7 +778,7 @@ SELECT * FROM t1; ERROR HY000: Tablespace has been discarded for table 't1' restore: t1 .ibd and .cfg files ALTER TABLE t1 IMPORT TABLESPACE; -ERROR HY000: Schema mismatch (Table flags don't match, server table has 0x5 and the meta-data file has 0x1) +ERROR HY000: Schema mismatch (Table flags don't match,server table has ROW_TYPE_DYNAMIC and the meta-data file has ROW_TYPE_COMPACT) unlink: t1.ibd unlink: t1.cfg DROP TABLE t1; @@ -955,7 +955,7 @@ SELECT * FROM t1; ERROR HY000: Tablespace has been discarded for table 't1' restore: t1 .ibd and .cfg files ALTER TABLE t1 IMPORT TABLESPACE; -ERROR HY000: Schema mismatch (Table flags don't match, server table has 0x5 and the meta-data file has 0x21) +ERROR HY000: Schema mismatch (Table flags don't match,server table has ROW_TYPE_COMPACT and the meta-data file has ROW_TYPE_DYNAMIC) unlink: t1.ibd unlink: t1.cfg DROP TABLE t1; @@ -967,7 +967,7 @@ SELECT * FROM t1; ERROR HY000: Tablespace has been discarded for table 't1' restore: t1 .ibd and .cfg files ALTER TABLE t1 IMPORT TABLESPACE; -ERROR HY000: Schema mismatch (Table flags don't match, server table has 0x5 and the meta-data file has 0x21) +ERROR HY000: Schema mismatch (Table flags don't match,server table has ROW_TYPE_REDUNDANT and the meta-data file has ROW_TYPE_DYNAMIC) unlink: t1.ibd unlink: t1.cfg DROP TABLE t1; diff --git a/mysql-test/t/import_schema_mismatch.test b/mysql-test/t/import_schema_mismatch.test new file mode 100644 index 000000000000..12cf3707d4d7 --- /dev/null +++ b/mysql-test/t/import_schema_mismatch.test @@ -0,0 +1,32 @@ +# +#Bug #27542720 SCHEMA MISMATCH - TABLE FLAGS DON'T MATCH, +# BUT FLAGS ARE NUMBERS +# + + +--source include/have_innodb.inc + +--let $MYSQLD_DATADIR=`select @@datadir` +--let $DB = `SELECT DATABASE()` +#--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR + +CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB ROW_FORMAT=COMPACT; +FLUSH TABLES t1 FOR EXPORT; +#--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR +--copy_file $MYSQLD_DATADIR/$DB/t1.ibd $MYSQL_TMP_DIR/t1.ibd +--copy_file $MYSQLD_DATADIR/$DB/t1.cfg $MYSQL_TMP_DIR/t1.cfg + +UNLOCK TABLES; +DROP TABLE t1; +SET GLOBAL innodb_file_format=`Barracuda`; +SET GLOBAL innodb_file_per_table= ON; +CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB ROW_FORMAT=DYNAMIC; +ALTER TABLE t1 DISCARD TABLESPACE; +--copy_file $MYSQL_TMP_DIR/t1.ibd $MYSQLD_DATADIR/$DB/t1.ibd +--copy_file $MYSQL_TMP_DIR/t1.cfg $MYSQLD_DATADIR/$DB/t1.cfg + +--error ER_TABLE_SCHEMA_MISMATCH +ALTER TABLE t1 IMPORT TABLESPACE; +DROP TABLE t1; + +SET GLOBAL innodb_file_format=`Antelope`; diff --git a/storage/innobase/row/row0import.cc b/storage/innobase/row/row0import.cc index cd3f88c240e5..c4f6eed4aad4 100644 --- a/storage/innobase/row/row0import.cc +++ b/storage/innobase/row/row0import.cc @@ -1337,11 +1337,20 @@ row_import::match_schema( /* Do some simple checks. */ if (m_flags != m_table->flags) { - ib_errf(thd, IB_LOG_LEVEL_ERROR, ER_TABLE_SCHEMA_MISMATCH, - "Table flags don't match, server table has 0x%lx " - "and the meta-data file has 0x%lx", - (ulong) m_table->n_cols, (ulong) m_flags); - + if (dict_tf_to_row_format_string(m_flags) != + dict_tf_to_row_format_string(m_table->flags)) { + ib_errf(thd, IB_LOG_LEVEL_ERROR, + ER_TABLE_SCHEMA_MISMATCH, + "Table flags don't match," + "server table has %s " + "and the meta-data file has %s", + dict_tf_to_row_format_string(m_table->flags), + dict_tf_to_row_format_string(m_flags)); + } else { + ib_errf(thd, IB_LOG_LEVEL_ERROR, + ER_TABLE_SCHEMA_MISMATCH, + "Table flags don't match"); + } return(DB_ERROR); } else if (m_table->n_cols != m_n_cols) { ib_errf(thd, IB_LOG_LEVEL_ERROR, ER_TABLE_SCHEMA_MISMATCH, From 0c7b5ee3a509b4f0810c11a274c998eebe7d8158 Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Fri, 6 Apr 2018 13:18:27 +0200 Subject: [PATCH 0734/1221] PS-3867: Fixed typo in audit log initialization --- mysql-test/r/percona_bug_ps3867.result | 37 ++++++++++++++++++++++++++ mysql-test/t/percona_bug_ps3867.test | 34 +++++++++++++++++++++++ plugin/audit_log/audit_log.c | 2 +- 3 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 mysql-test/r/percona_bug_ps3867.result create mode 100644 mysql-test/t/percona_bug_ps3867.test diff --git a/mysql-test/r/percona_bug_ps3867.result b/mysql-test/r/percona_bug_ps3867.result new file mode 100644 index 000000000000..ee83ce6f8a44 --- /dev/null +++ b/mysql-test/r/percona_bug_ps3867.result @@ -0,0 +1,37 @@ +CREATE USER 'user1'@'127.0.0.1' IDENTIFIED BY 'password1'; +CREATE USER 'user22'@'%' IDENTIFIED BY 'password1'; +CREATE USER '22user'@'LOCALHOST' IDENTIFIED BY 'password1'; +CREATE USER 'admin'@'%' IDENTIFIED BY 'password1'; +CREATE USER 'us,er1'@'localhost' IDENTIFIED BY 'password1'; +SET GLOBAL audit_log_flush=ON; +SET GLOBAL audit_log_flush=ON; +SELECT 'user1'; +user1 +user1 +SELECT 'user22'; +user22 +user22 +SELECT '22user'; +22user +22user +SELECT 'user22'; +user22 +user22 +SELECT 'admin'; +admin +admin +SELECT 'us,er1'; +us,er1 +us,er1 +SET GLOBAL audit_log_flush=ON; +set global audit_log_flush= ON; +=================================================================== +"Connect","","","",0,"user1","user1","","","localhost","127.0.0.1","test" +"Query","","","select","",0,"SELECT 'user1'","user1[user1] @ localhost [127.0.0.1]","localhost","","127.0.0.1","test" +"Quit","","","",0,"user1","user1","","","localhost","127.0.0.1","test" +=================================================================== +DROP USER 'user1'@'127.0.0.1'; +DROP USER 'user22'@'%'; +DROP USER '22user'@'localhost'; +DROP USER 'admin'@'%'; +DROP USER 'us,er1'@'localhost'; diff --git a/mysql-test/t/percona_bug_ps3867.test b/mysql-test/t/percona_bug_ps3867.test new file mode 100644 index 000000000000..4a74f1384b06 --- /dev/null +++ b/mysql-test/t/percona_bug_ps3867.test @@ -0,0 +1,34 @@ +# PS-3867: audit_log_include_accunts was incorrect when set on the command line +--source include/not_embedded.inc + +# setup some user accounts + +CREATE USER 'user1'@'127.0.0.1' IDENTIFIED BY 'password1'; +CREATE USER 'user22'@'%' IDENTIFIED BY 'password1'; +CREATE USER '22user'@'LOCALHOST' IDENTIFIED BY 'password1'; +CREATE USER 'admin'@'%' IDENTIFIED BY 'password1'; +CREATE USER 'us,er1'@'localhost' IDENTIFIED BY 'password1'; + +let $MYSQLD_DATADIR= `select @@datadir`; +let $log_file=$MYSQLD_DATADIR/test_audit.log; + + +--let $restart_parameters="restart: $AUDIT_LOG_OPT $AUDIT_LOG_LOAD --audit_log_include_accounts='user1@localhost' --audit_log_file=test_audit.log --audit_log_policy=ALL --audit-log-format=CSV --audit_log_strategy=SYNCHRONOUS" +--source include/restart_mysqld.inc + +SET GLOBAL audit_log_flush=ON; +--remove_file $log_file +SET GLOBAL audit_log_flush=ON; + +--source audit_log_filter_events.inc + +SET GLOBAL audit_log_flush=ON; + +--source audit_log_echo.inc + +# cleanup users +DROP USER 'user1'@'127.0.0.1'; +DROP USER 'user22'@'%'; +DROP USER '22user'@'localhost'; +DROP USER 'admin'@'%'; +DROP USER 'us,er1'@'localhost'; diff --git a/plugin/audit_log/audit_log.c b/plugin/audit_log/audit_log.c index f82dcd162777..1f6e92a1fea3 100644 --- a/plugin/audit_log/audit_log.c +++ b/plugin/audit_log/audit_log.c @@ -950,7 +950,7 @@ int audit_log_plugin_init(void *arg MY_ATTRIBUTE((unused))) { audit_log_include_accounts= my_strdup(audit_log_include_accounts, MYF(MY_FAE)); - audit_log_set_exclude_accounts(audit_log_include_accounts); + audit_log_set_include_accounts(audit_log_include_accounts); } if (audit_log_exclude_commands != NULL) { From 2ee941ad2a842c0092f3419f472b17125adcd238 Mon Sep 17 00:00:00 2001 From: Aakanksha Verma Date: Fri, 6 Apr 2018 18:36:48 +0530 Subject: [PATCH 0735/1221] Bug #27542720 SCHEMA MISMATCH - TABLE FLAGS DON'T MATCH, BUT FLAGS ARE NUMBERS Post push fix for test failure like main.index_merge_delete main.information_schema_inno etc. --- mysql-test/t/import_schema_mismatch.test | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/mysql-test/t/import_schema_mismatch.test b/mysql-test/t/import_schema_mismatch.test index 12cf3707d4d7..9957aa770fba 100644 --- a/mysql-test/t/import_schema_mismatch.test +++ b/mysql-test/t/import_schema_mismatch.test @@ -12,7 +12,6 @@ CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB ROW_FORMAT=COMPACT; FLUSH TABLES t1 FOR EXPORT; -#--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR --copy_file $MYSQLD_DATADIR/$DB/t1.ibd $MYSQL_TMP_DIR/t1.ibd --copy_file $MYSQLD_DATADIR/$DB/t1.cfg $MYSQL_TMP_DIR/t1.cfg @@ -22,11 +21,14 @@ SET GLOBAL innodb_file_format=`Barracuda`; SET GLOBAL innodb_file_per_table= ON; CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB ROW_FORMAT=DYNAMIC; ALTER TABLE t1 DISCARD TABLESPACE; ---copy_file $MYSQL_TMP_DIR/t1.ibd $MYSQLD_DATADIR/$DB/t1.ibd ---copy_file $MYSQL_TMP_DIR/t1.cfg $MYSQLD_DATADIR/$DB/t1.cfg +--move_file $MYSQL_TMP_DIR/t1.ibd $MYSQLD_DATADIR/$DB/t1.ibd +--move_file $MYSQL_TMP_DIR/t1.cfg $MYSQLD_DATADIR/$DB/t1.cfg --error ER_TABLE_SCHEMA_MISMATCH ALTER TABLE t1 IMPORT TABLESPACE; DROP TABLE t1; SET GLOBAL innodb_file_format=`Antelope`; + +--remove_file $MYSQLD_DATADIR/$DB/t1.ibd +--remove_file $MYSQLD_DATADIR/$DB/t1.cfg From 816d9c44f2793fd23e093e89f076d071b9fb0ec9 Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Tue, 3 Apr 2018 17:35:09 +0200 Subject: [PATCH 0736/1221] PS-3941: Skip Travis CI builds for commits without code changes --- .travis.yml | 35 ++++++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/.travis.yml b/.travis.yml index a353d1c275d0..ccb85446ecdd 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,6 +9,7 @@ cache: env: global: + - PARENT_BRANCH=5.5 - CCACHE_DIR=$HOME/.ccache - CCACHE_COMPRESS=1 - CCACHE_COMPRESSLEVEL=9 @@ -23,7 +24,7 @@ matrix: - wget https://llvm.org/svn/llvm-project/cfe/trunk/tools/clang-format/clang-format-diff.py - chmod a+x clang-format-diff.py - git diff -U0 --no-color HEAD^1 | ./clang-format-diff.py -p1 >_GIT_DIFF - - '[ ! -s _GIT_DIFF ] && echo The last git commit is clang-formatted || cat _GIT_DIFF' + - '[ ! -s _GIT_DIFF ] && { echo The last git commit is clang-formatted; travis_terminate 0; } || { cat _GIT_DIFF; travis_terminate 1; }' # Configurations for developers' forks and after merging a pull request for percona/percona-server @@ -133,7 +134,7 @@ matrix: script: - JOB_NUMBER=$(echo $TRAVIS_JOB_NUMBER | sed -e 's:[0-9][0-9]*\.\(.*\):\1:'); - echo --- JOB_NUMBER=$JOB_NUMBER PACKAGES=$PACKAGES TRAVIS_REPO_SLUG=$TRAVIS_REPO_SLUG TRAVIS_BRANCH=$TRAVIS_BRANCH TRAVIS_EVENT_TYPE=$TRAVIS_EVENT_TYPE TRAVIS_PULL_REQUEST=$TRAVIS_PULL_REQUEST + echo --- JOB_NUMBER=$JOB_NUMBER TRAVIS_COMMIT=$TRAVIS_COMMIT TRAVIS_COMMIT_RANGE=$TRAVIS_COMMIT_RANGE TRAVIS_REPO_SLUG=$TRAVIS_REPO_SLUG TRAVIS_BRANCH=$TRAVIS_BRANCH TRAVIS_EVENT_TYPE=$TRAVIS_EVENT_TYPE TRAVIS_PULL_REQUEST=$TRAVIS_PULL_REQUEST TRAVIS_PULL_REQUEST_BRANCH=$TRAVIS_PULL_REQUEST_BRANCH - echo --- Perform all Travis jobs or only jobs that are included in ENV_VAR_JOB_NUMBERS list if it is defined; JOB_NUMBERS="1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24"; @@ -146,6 +147,26 @@ script: travis_terminate 0; fi; + # For the trunk use TRAVIS_COMMIT_RANGE but "Auto cancel branch builds" has to be turned off at https://travis-ci.org/percona/percona-server/settings + # For pull requests and feature branches replace TRAVIS_COMMIT_RANGE with the range from the root to the tip of the branch + - if [[ "$TRAVIS_EVENT_TYPE" == "pull_request" ]] || [[ "$TRAVIS_REPO_SLUG" != "percona/percona-server" ]]; then + if [[ "$TRAVIS_EVENT_TYPE" == "pull_request" ]]; then TRAVIS_COMMIT=$TRAVIS_COMMIT^2; fi; + git fetch https://github.com/percona/percona-server.git $PARENT_BRANCH:master_repo_$PARENT_BRANCH; + PARENT_COMMIT=$(git rev-list --first-parent --topo-order $TRAVIS_COMMIT ^master_repo_$PARENT_BRANCH | tail -1); + TRAVIS_COMMIT_RANGE=$PARENT_COMMIT^..$TRAVIS_COMMIT; + fi; + if MODIFIED_FILES=$(git diff --name-only $TRAVIS_COMMIT_RANGE 2>/dev/null); then + echo -e "--- Modified files in $TRAVIS_COMMIT_RANGE:\n$MODIFIED_FILES"; + if ! echo "$MODIFIED_FILES" | grep -qvE '^(doc|build-ps|mysql-test|packaging|policy|scripts|support-files)/'; then + echo "--- There are no code changes, stopping build process."; + travis_terminate 0; + else + echo "--- Code changes were found"; + fi; + else + echo "--- Can't prepare MODIFIED_FILES for $TRAVIS_COMMIT_RANGE"; + fi; + - echo --- Configure required LLVM and Ubuntu Toolchain repositories; if [[ "$TRAVIS_OS_NAME" == "linux" ]] && [[ "$CC" == "clang" ]]; then PACKAGES="llvm-$VERSION-dev $PACKAGES"; @@ -187,16 +208,16 @@ script: -DWITH_PAM=ON "; if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then - CMAKE_OPT="$CMAKE_OPT + CMAKE_OPT+=" -DMYSQL_MAINTAINER_MODE=ON "; else - CMAKE_OPT="$CMAKE_OPT + CMAKE_OPT+=" -DMYSQL_MAINTAINER_MODE=OFF "; fi; if [[ "$INVERTED" == "ON" ]]; then - CMAKE_OPT="$CMAKE_OPT + CMAKE_OPT+=" -DWITH_EMBEDDED_SERVER=OFF -DWITH_READLINE=OFF -DWITH_SSL=system @@ -208,7 +229,7 @@ script: -DWITH_INNOBASE_STORAGE_ENGINE=OFF -DWITHOUT_PARTITION_STORAGE_ENGINE=ON "; - fi; + fi; - echo --- Perform Debug or RelWithDebInfo compilation; echo --- CMAKE_OPT=\"$CMAKE_OPT\"; @@ -216,6 +237,6 @@ script: cmake .. $CMAKE_OPT $ENV_VAR_CMAKE_OPT - - make -j2 + - make -j2 || travis_terminate 1 - ccache --show-stats From 640e6b766fe1679fa41df1e9cb27ab1db1f073d0 Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Wed, 4 Apr 2018 11:09:07 +0200 Subject: [PATCH 0737/1221] Bug#27802681 ADD SUPPORT FOR NATIVE GCC ON SOLARIS In the past we have been using misc gcc compilers on Solaris. These compilers are no longer able to build the server, so we switched to Oracle Studio. There is now a port of gcc 7 available as a native compiler in Solaris, both for Intel and Sparc. Remove obsolete/wrong cmake code for gcc on Solaris, use: /usr/bin/g++ --version g++ (GCC) 7.3.0 which has proper library support on Solaris 11.4 The patch also removes obsolete cmake code for "dual" build where we used to: - build the server with a non-native version of gcc - build the client libraries with Oracle Studio. ================ client/dump/CMakeLists.txt Remove disabling of mysqlpunp when using Studio compiler. This was disabled earlier due to missing features in older versions of Studio. Remove obsolete cmake code for silencing warnings from Boost. Boost header files are now #included as "system" so no warnings are generated. Remove property RUNTIME_OUTPUT_DIRECTORY for the mysqlpump executable. This was used earlier for the "dual" build, building the server with gcc, client with Studio. ================ cmake/build_configurations/compiler_options.cmake Remove obsolete version checks for Studio compiler. Add explicit -std=c++03 ================ cmake/build_configurations/mysql_release.cmake Remove obsolete cmake code for dual gcc/Studio build. ================ cmake/os/SunOS.cmake Raise minimum compiler version for both gcc and Studio. ================ configure.cmake Remove obsolete cmake code for supporting older C++ libraries. We now only support -std=c++03 Remove obsolete cmake code for supporting non-native gcc compilers. ================ scripts/CMakeLists.txt Remove obsolete cmake code for dual gcc/Studio build. ================ unittest/gunit/CMakeLists.txt Remove obsolete check for unsupported version of Studio. Change-Id: Ib286460257a881ee54f485ee83a233585d258b7c --- client/dump/CMakeLists.txt | 47 +--- .../compiler_options.cmake | 12 +- .../build_configurations/mysql_release.cmake | 12 +- cmake/os/SunOS.cmake | 12 +- configure.cmake | 215 +----------------- scripts/CMakeLists.txt | 11 +- unittest/gunit/CMakeLists.txt | 10 - 7 files changed, 15 insertions(+), 304 deletions(-) diff --git a/client/dump/CMakeLists.txt b/client/dump/CMakeLists.txt index a2180505240e..40bc3bbe5ea2 100644 --- a/client/dump/CMakeLists.txt +++ b/client/dump/CMakeLists.txt @@ -13,23 +13,11 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# If we are building client-only (-DWITHOUT_SERVER=ON) with Solaris Studio, -# we skip building the mysqlpump tool. The server, and mysqlpump, will be built -# using gcc. - INCLUDE_DIRECTORIES( ${CMAKE_SOURCE_DIR}/dump ) -IF (CMAKE_CXX_COMPILER_ID STREQUAL "SunPro") - IF (WITHOUT_SERVER) - MESSAGE(STATUS "Not building mysqlpump") - RETURN() - ENDIF() -ENDIF() - -# Prevent Boost from including external precompiled Boost libraries, use -# threading (not implemented for older Solaris Studio compilers) +# Prevent Boost from including external precompiled Boost libraries, # and turn off unused functionality. IF(USING_LOCAL_BOOST) ADD_DEFINITIONS( @@ -143,30 +131,6 @@ ADD_CONVENIENCE_LIBRARY(mysqlpump_lib ${MYSQLPUMP_LIB_SOURCES}) TARGET_LINK_LIBRARIES(mysqlpump_lib client_base ${LZ4_LIBRARY}) -# Files that use Boost sources that trigger compilation warnings -SET(MYSQLPUMP_BOOST_SOURCES - abstract_crawler.cc - abstract_mysql_chain_element_extension.cc - abstract_progress_watcher.cc - mysql_chain_element_options.cc - mysql_object_reader.cc - mysqldump_tool_chain_maker.cc - mysqldump_tool_chain_maker_options.cc - object_filter.cc - object_queue.cc - program.cc - standard_progress_watcher.cc - sql_formatter.cc - table.cc -) - -# Boost source has unused local typedefs. -MY_CHECK_CXX_COMPILER_FLAG("-Wunused-local-typedefs" HAVE_UNUSED_TYPEDEFS) -IF(HAVE_UNUSED_TYPEDEFS) - ADD_COMPILE_FLAGS(${MYSQLPUMP_BOOST_SOURCES} - COMPILE_FLAGS "-Wno-unused-local-typedefs") -ENDIF() - ADD_COMPILE_FLAGS( compression_writer.cc mysqldump_tool_chain_maker.cc @@ -181,12 +145,3 @@ IF(USING_SYSTEM_BOOST) ENDIF() SET_TARGET_PROPERTIES(mysqlpump PROPERTIES HAS_CXX TRUE) - -# Store the executable in our parent directory. -# Why? In pushbuild we do 'touch client/mysql*' to prevent rebuild, -# in the case where we have a separate build of libmysqlclient.so -IF (NOT WIN32) - SET_TARGET_PROPERTIES(mysqlpump - PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/client) -ENDIF() - diff --git a/cmake/build_configurations/compiler_options.cmake b/cmake/build_configurations/compiler_options.cmake index f607508c8140..17bd5aeb591b 100644 --- a/cmake/build_configurations/compiler_options.cmake +++ b/cmake/build_configurations/compiler_options.cmake @@ -1,4 +1,4 @@ -# Copyright (c) 2012, 2017, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -118,23 +118,21 @@ IF(UNIX) ENDIF() IF(CMAKE_C_COMPILER_ID MATCHES "SunPro") - IF(DEFINED CC_MINOR_VERSION AND CC_MINOR_VERSION GREATER 12) - SET(SUNPRO_FLAGS "-xdebuginfo=no%decl") - ENDIF() + SET(SUNPRO_FLAGS "-xdebuginfo=no%decl") SET(SUNPRO_FLAGS "${SUNPRO_FLAGS} -xbuiltin=%all") SET(SUNPRO_FLAGS "${SUNPRO_FLAGS} -xlibmil") # Link with the libatomic library in /usr/lib # This prevents dependencies on libstatomic # This was introduced with developerstudio12.5 - IF(CC_MINOR_VERSION GREATER 13) - SET(SUNPRO_FLAGS "${SUNPRO_FLAGS} -xatomic=gcc") - ENDIF() + SET(SUNPRO_FLAGS "${SUNPRO_FLAGS} -xatomic=gcc") + IF(CMAKE_SYSTEM_PROCESSOR MATCHES "i386") SET(SUNPRO_FLAGS "${SUNPRO_FLAGS} -nofstore") ENDIF() SET(COMMON_C_FLAGS "-g ${SUNPRO_FLAGS}") SET(COMMON_CXX_FLAGS "-g0 ${SUNPRO_FLAGS}") + SET(COMMON_CXX_FLAGS "${COMMON_CXX_FLAGS} -std=c++03") SET(CMAKE_C_FLAGS_DEBUG "${COMMON_C_FLAGS}") SET(CMAKE_CXX_FLAGS_DEBUG "${COMMON_CXX_FLAGS}") SET(CMAKE_C_FLAGS_RELWITHDEBINFO "-xO3 ${COMMON_C_FLAGS}") diff --git a/cmake/build_configurations/mysql_release.cmake b/cmake/build_configurations/mysql_release.cmake index d371c29ea920..b6294454f266 100644 --- a/cmake/build_configurations/mysql_release.cmake +++ b/cmake/build_configurations/mysql_release.cmake @@ -1,4 +1,4 @@ -# Copyright (c) 2010, 2017, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -51,13 +51,3 @@ IF(UNIX) ENDIF() -# Release builds on Solaris need to do an extra build to compile the -# client libraries with Sun Studio. The release build script will replace -# those libraries and the corresponding mysql_config before making the -# final package. -# But *this* mysql_config is still relevant for the embedded library -# which will not be rebuilt, so we ensure we make a copy of it. - -IF(CMAKE_SYSTEM_NAME MATCHES "SunOS" AND CMAKE_COMPILER_IS_GNUCC) - SET(COPY_MYSQL_CONFIG 1 CACHE BOOL "") -ENDIF() diff --git a/cmake/os/SunOS.cmake b/cmake/os/SunOS.cmake index ded3095829ba..52015af15c19 100644 --- a/cmake/os/SunOS.cmake +++ b/cmake/os/SunOS.cmake @@ -1,4 +1,4 @@ -# Copyright (c) 2010, 2017, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -18,13 +18,13 @@ INCLUDE(CheckCSourceRuns) INCLUDE(CheckCSourceCompiles) INCLUDE(CheckCXXSourceCompiles) -# We require at least GCC 4.4 or SunStudio 12u2 (CC 5.11) +# We require at least GCC 7.3 or SunStudio 12.2 (CC 5.14) IF(NOT FORCE_UNSUPPORTED_COMPILER) IF(CMAKE_COMPILER_IS_GNUCC) EXECUTE_PROCESS(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION) - IF(GCC_VERSION VERSION_LESS 4.4) - MESSAGE(FATAL_ERROR "GCC 4.4 or newer is required!") + IF(GCC_VERSION VERSION_LESS 7.3) + MESSAGE(FATAL_ERROR "GCC 7.3 or newer is required!") ENDIF() ELSEIF(CMAKE_C_COMPILER_ID MATCHES "SunPro") # CC -V yields @@ -44,8 +44,8 @@ IF(NOT FORCE_UNSUPPORTED_COMPILER) VERSION_STRING ${stderr}) ENDIF() SET(CC_MINOR_VERSION ${CMAKE_MATCH_1}) - IF(${CC_MINOR_VERSION} LESS 11) - MESSAGE(FATAL_ERROR "SunStudio 12u2 or newer is required!") + IF(${CC_MINOR_VERSION} LESS 14) + MESSAGE(FATAL_ERROR "Oracle Studio 12.5 or newer is required!") ENDIF() ELSE() MESSAGE(FATAL_ERROR "Unsupported compiler!") diff --git a/configure.cmake b/configure.cmake index 2f3aa2fda5e6..d0ffda553877 100644 --- a/configure.cmake +++ b/configure.cmake @@ -68,50 +68,6 @@ IF(CMAKE_SYSTEM_NAME MATCHES "SunOS" AND ADD_DEFINITIONS(-DSOLARIS_64BIT_ENABLED) ENDIF() -# Nothing explicit on command line? Use c++03 -IF(CMAKE_SYSTEM_NAME MATCHES "SunOS" AND - CMAKE_C_COMPILER_ID MATCHES "SunPro" AND - NOT CMAKE_CXX_FLAGS MATCHES "-std=" AND - NOT CMAKE_CXX_FLAGS MATCHES "-library" AND - NOT CMAKE_CXX_FLAGS MATCHES "stdcxx4" AND - NOT CMAKE_CXX_FLAGS MATCHES "stlport" - ) - IF(SUNPRO_CXX_LIBRARY) - MESSAGE(WARNING "You should upgrade to -std=c++03") - ELSE() - # cmake/os/SunOS.cmake has done version check - # /opt/solarisstudio12.4/bin/CC has CC_MINOR_VERSION == 13 - IF(DEFINED CC_MINOR_VERSION AND CC_MINOR_VERSION GREATER 12) - MESSAGE("Adding -std=c++03") - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++03") - ENDIF() - ENDIF() -ENDIF() - -# The default C++ library for SunPro is really old, and not standards compliant. -# http://www.oracle.com/technetwork/server-storage/solaris/cmp-stlport-libcstd-142559.html -# Use stlport rather than Rogue Wave, -# unless otherwise specified on command line. -# This does *not* work for building the server, only for client libraries, -# i.e. -DWITHOUT_SERVER=1 -IF(CMAKE_SYSTEM_NAME MATCHES "SunOS") - IF(CMAKE_CXX_COMPILER_ID MATCHES "SunPro") - IF(CMAKE_CXX_FLAGS MATCHES "-std=") - # Nothing here, handled separately below - ELSE() - IF(SUNPRO_CXX_LIBRARY) - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -library=${SUNPRO_CXX_LIBRARY}") - IF(SUNPRO_CXX_LIBRARY STREQUAL "stdcxx4") - ADD_DEFINITIONS(-D__MATHERR_RENAME_EXCEPTION) - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -template=extdef") - ENDIF() - ELSE() - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -library=stlport4") - ENDIF() - ENDIF() - ENDIF() -ENDIF() - # Check to see if we are using LLVM's libc++ rather than e.g. libstd++ # Can then check HAVE_LLBM_LIBCPP later without including e.g. ciso646. CHECK_CXX_SOURCE_RUNS(" @@ -129,94 +85,10 @@ MACRO(DIRNAME IN OUT) GET_FILENAME_COMPONENT(${OUT} ${IN} PATH) ENDMACRO() -MACRO(FIND_REAL_LIBRARY SOFTLINK_NAME REALNAME) - # We re-distribute libstlport.so/libstdc++.so which are both symlinks. - # There is no 'readlink' on solaris, so we use perl to follow links: - SET(PERLSCRIPT - "my $link= $ARGV[0]; use Cwd qw(abs_path); my $file = abs_path($link); print $file;") - EXECUTE_PROCESS( - COMMAND perl -e "${PERLSCRIPT}" ${SOFTLINK_NAME} - RESULT_VARIABLE result - OUTPUT_VARIABLE real_library - ) - SET(REALNAME ${real_library}) -ENDMACRO() - -MACRO(EXTEND_CXX_LINK_FLAGS LIBRARY_PATH) - # Using the $ORIGIN token with the -R option to locate the libraries - # on a path relative to the executable: - # We need an extra backslash to pass $ORIGIN to the mysql_config script... - SET(QUOTED_CMAKE_CXX_LINK_FLAGS - "${CMAKE_CXX_LINK_FLAGS} -R'\\$ORIGIN/../lib' -R${LIBRARY_PATH} ") - SET(CMAKE_CXX_LINK_FLAGS - "${CMAKE_CXX_LINK_FLAGS} -R'\$ORIGIN/../lib' -R${LIBRARY_PATH}") - MESSAGE(STATUS "CMAKE_CXX_LINK_FLAGS ${CMAKE_CXX_LINK_FLAGS}") -ENDMACRO() - -MACRO(EXTEND_C_LINK_FLAGS LIBRARY_PATH) - SET(CMAKE_C_LINK_FLAGS - "${CMAKE_C_LINK_FLAGS} -R'\$ORIGIN/../lib' -R${LIBRARY_PATH}") - MESSAGE(STATUS "CMAKE_C_LINK_FLAGS ${CMAKE_C_LINK_FLAGS}") - SET(CMAKE_SHARED_LIBRARY_C_FLAGS - "${CMAKE_SHARED_LIBRARY_C_FLAGS} -R'\$ORIGIN/../lib' -R${LIBRARY_PATH}") -ENDMACRO() - -IF(CMAKE_SYSTEM_NAME MATCHES "SunOS" AND CMAKE_COMPILER_IS_GNUCC) - DIRNAME(${CMAKE_CXX_COMPILER} CXX_PATH) - SET(LIB_SUFFIX "lib") - IF(SIZEOF_VOIDP EQUAL 8 AND CMAKE_SYSTEM_PROCESSOR MATCHES "sparc") - SET(LIB_SUFFIX "lib/sparcv9") - ENDIF() - IF(SIZEOF_VOIDP EQUAL 8 AND CMAKE_SYSTEM_PROCESSOR MATCHES "i386") - SET(LIB_SUFFIX "lib/amd64") - ENDIF() - FIND_LIBRARY(GPP_LIBRARY_NAME - NAMES "stdc++" - PATHS ${CXX_PATH}/../${LIB_SUFFIX} - NO_DEFAULT_PATH - ) - MESSAGE(STATUS "GPP_LIBRARY_NAME ${GPP_LIBRARY_NAME}") - IF(GPP_LIBRARY_NAME) - DIRNAME(${GPP_LIBRARY_NAME} GPP_LIBRARY_PATH) - FIND_REAL_LIBRARY(${GPP_LIBRARY_NAME} real_library) - MESSAGE(STATUS "INSTALL ${GPP_LIBRARY_NAME} ${real_library}") - INSTALL(FILES ${GPP_LIBRARY_NAME} ${real_library} - DESTINATION ${INSTALL_LIBDIR} COMPONENT SharedLibraries) - EXTEND_CXX_LINK_FLAGS(${GPP_LIBRARY_PATH}) - EXECUTE_PROCESS( - COMMAND sh -c "elfdump ${real_library} | grep SONAME" - RESULT_VARIABLE result - OUTPUT_VARIABLE sonameline - ) - IF(NOT result) - STRING(REGEX MATCH "libstdc.*[^\n]" soname ${sonameline}) - MESSAGE(STATUS "INSTALL ${GPP_LIBRARY_PATH}/${soname}") - INSTALL(FILES "${GPP_LIBRARY_PATH}/${soname}" - DESTINATION ${INSTALL_LIBDIR} COMPONENT SharedLibraries) - ENDIF() - ENDIF() - FIND_LIBRARY(GCC_LIBRARY_NAME - NAMES "gcc_s" - PATHS ${CXX_PATH}/../${LIB_SUFFIX} - NO_DEFAULT_PATH - ) - IF(GCC_LIBRARY_NAME) - DIRNAME(${GCC_LIBRARY_NAME} GCC_LIBRARY_PATH) - FIND_REAL_LIBRARY(${GCC_LIBRARY_NAME} real_library) - MESSAGE(STATUS "INSTALL ${GCC_LIBRARY_NAME} ${real_library}") - INSTALL(FILES ${GCC_LIBRARY_NAME} ${real_library} - DESTINATION ${INSTALL_LIBDIR} COMPONENT SharedLibraries) - EXTEND_C_LINK_FLAGS(${GCC_LIBRARY_PATH}) - ENDIF() -ENDIF() -# TODO: consider to INSTALL this library -# /opt/developerstudio12.5/lib/compilers/atomic/sparcv9/libstatomic.so -# see: https://docs.oracle.com/cd/E60778_01/html/E60746/gqhbq.html # We assume that developer studio runtime libraries are installed. IF(CMAKE_SYSTEM_NAME MATCHES "SunOS" AND - CMAKE_CXX_COMPILER_ID STREQUAL "SunPro" AND - CMAKE_CXX_FLAGS MATCHES "-std=c") + CMAKE_CXX_COMPILER_ID STREQUAL "SunPro") DIRNAME(${CMAKE_CXX_COMPILER} CXX_PATH) SET(LIBRARY_SUFFIX "lib/compilers/CC-gcc/lib") @@ -247,91 +119,6 @@ IF(CMAKE_SYSTEM_NAME MATCHES "SunOS" AND "${CMAKE_CXX_LINK_FLAGS} -lstdc++ -lgcc_s -lCrunG3 -lc") SET(QUOTED_CMAKE_CXX_LINK_FLAGS "${QUOTED_CMAKE_CXX_LINK_FLAGS} -lstdc++ -lgcc_s -lCrunG3 -lc ") - SET(QUOTED_CMAKE_CXX_LINK_FLAGS - "${QUOTED_CMAKE_CXX_LINK_FLAGS} -L/usr/lib -latomic ") -ENDIF() - -IF(CMAKE_SYSTEM_NAME MATCHES "SunOS" AND - CMAKE_C_COMPILER_ID MATCHES "SunPro" AND - CMAKE_CXX_FLAGS MATCHES "stlport4") - DIRNAME(${CMAKE_CXX_COMPILER} CXX_PATH) - # Also extract real path to the compiler(which is normally - # in /prod/bin) and try to find the - # stlport libs relative to that location as well. - GET_FILENAME_COMPONENT(CXX_REALPATH ${CMAKE_CXX_COMPILER} REALPATH) - - # CC -V yields - # CC: Studio 12.6 Sun C++ 5.15 SunOS_sparc Beta 2016/12/19 - # CC: Studio 12.5 Sun C++ 5.14 SunOS_sparc Dodona 2016/04/04 - # CC: Sun C++ 5.13 SunOS_sparc Beta 2014/03/11 - # CC: Sun C++ 5.11 SunOS_sparc 2010/08/13 - - EXECUTE_PROCESS( - COMMAND ${CMAKE_CXX_COMPILER} "-V" - OUTPUT_VARIABLE stdout - ERROR_VARIABLE stderr - RESULT_VARIABLE result - ) - IF(result) - MESSAGE(FATAL_ERROR "Failed to execute ${CMAKE_CXX_COMPILER} -V") - ENDIF() - - STRING(REGEX MATCH "CC: Sun C\\+\\+ 5\\.([0-9]+)" VERSION_STRING ${stderr}) - IF (NOT CMAKE_MATCH_1 OR CMAKE_MATCH_1 STREQUAL "") - STRING(REGEX MATCH "CC: Studio 12\\.[56] Sun C\\+\\+ 5\\.([0-9]+)" - VERSION_STRING ${stderr}) - ENDIF() - SET(CC_MINOR_VERSION ${CMAKE_MATCH_1}) - - IF(${CC_MINOR_VERSION} EQUAL 14) - MESSAGE(FATAL_ERROR - "Please run cmake with -DCMAKE_CXX_FLAGS=-std=c++03 for ${stderr}") - ENDIF() - - IF(${CC_MINOR_VERSION} EQUAL 13) - SET(STLPORT_SUFFIX "lib/compilers/stlport4") - IF(SIZEOF_VOIDP EQUAL 8 AND CMAKE_SYSTEM_PROCESSOR MATCHES "sparc") - SET(STLPORT_SUFFIX "lib/compilers/stlport4/sparcv9") - ENDIF() - IF(SIZEOF_VOIDP EQUAL 8 AND CMAKE_SYSTEM_PROCESSOR MATCHES "i386") - SET(STLPORT_SUFFIX "lib/compilers/stlport4/amd64") - ENDIF() - ELSE() - SET(STLPORT_SUFFIX "lib/stlport4") - IF(SIZEOF_VOIDP EQUAL 8 AND CMAKE_SYSTEM_PROCESSOR MATCHES "sparc") - SET(STLPORT_SUFFIX "lib/stlport4/v9") - ENDIF() - IF(SIZEOF_VOIDP EQUAL 8 AND CMAKE_SYSTEM_PROCESSOR MATCHES "i386") - SET(STLPORT_SUFFIX "lib/stlport4/amd64") - ENDIF() - ENDIF() - - FIND_LIBRARY(STL_LIBRARY_NAME - NAMES "stlport" - PATHS ${CXX_PATH}/../${STLPORT_SUFFIX} - ${CXX_REALPATH}/../../${STLPORT_SUFFIX} - ) - MESSAGE(STATUS "STL_LIBRARY_NAME ${STL_LIBRARY_NAME}") - IF(STL_LIBRARY_NAME) - DIRNAME(${STL_LIBRARY_NAME} STLPORT_PATH) - FIND_REAL_LIBRARY(${STL_LIBRARY_NAME} real_library) - MESSAGE(STATUS "INSTALL ${STL_LIBRARY_NAME} ${real_library}") - INSTALL(FILES ${STL_LIBRARY_NAME} ${real_library} - DESTINATION ${INSTALL_LIBDIR} COMPONENT SharedLibraries) - EXTEND_C_LINK_FLAGS(${STLPORT_PATH}) - EXTEND_CXX_LINK_FLAGS(${STLPORT_PATH}) - ELSE() - MESSAGE(STATUS "Failed to find the reuired stlport library, print some" - "variables to help debugging and bail out") - MESSAGE(STATUS "CMAKE_CXX_COMPILER ${CMAKE_CXX_COMPILER}") - MESSAGE(STATUS "CXX_PATH ${CXX_PATH}") - MESSAGE(STATUS "CXX_REALPATH ${CXX_REALPATH}") - MESSAGE(STATUS "STLPORT_SUFFIX ${STLPORT_SUFFIX}") - MESSAGE(STATUS "PATH: ${CXX_PATH}/../${STLPORT_SUFFIX}") - MESSAGE(STATUS "PATH: ${CXX_REALPATH}/../../${STLPORT_SUFFIX}") - MESSAGE(FATAL_ERROR - "Could not find the required stlport library.") - ENDIF() ENDIF() IF(CMAKE_COMPILER_IS_GNUCXX) diff --git a/scripts/CMakeLists.txt b/scripts/CMakeLists.txt index beda33bea76b..be91ed094e59 100644 --- a/scripts/CMakeLists.txt +++ b/scripts/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2006, 2017, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 2018, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -468,15 +468,6 @@ ELSE() COMPONENT ${${file}_COMPONENT} ) ENDFOREACH() - IF(COPY_MYSQL_CONFIG) - CONFIGURE_FILE(${CMAKE_CURRENT_BINARY_DIR}/mysql_config - ${CMAKE_CURRENT_BINARY_DIR}/mysql_server_config COPYONLY) - INSTALL_SCRIPT( - ${CMAKE_CURRENT_BINARY_DIR}/mysql_server_config - DESTINATION ${INSTALL_BINDIR} - COMPONENT ${mysql_server_config_COMPONENT} - ) - ENDIF() # Systemd files IF(WITH_SYSTEMD) diff --git a/unittest/gunit/CMakeLists.txt b/unittest/gunit/CMakeLists.txt index f37505dbd816..48fd7374d959 100644 --- a/unittest/gunit/CMakeLists.txt +++ b/unittest/gunit/CMakeLists.txt @@ -27,16 +27,6 @@ # Either way: we will unpack the zip, compile gmock-all.cc and gtest-all.cc # and link them into the executables. -# Disable googletest for Solaris Studio < 12.4 since it doesn't compile. -IF(CMAKE_C_COMPILER_ID MATCHES "SunPro") - IF(${CC_MINOR_VERSION} LESS 13) - MESSAGE(WARNING "Googletest requires Solaris Studio 12.4 or newer.") - UNSET(GMOCK_FOUND) - UNSET(GMOCK_FOUND CACHE) - RETURN() - ENDIF() -ENDIF() - # Default location for where to download and build gmock/gtest. IF(NOT DOWNLOAD_ROOT) SET(DOWNLOAD_ROOT ${CMAKE_SOURCE_DIR}/source_downloads) From 34a89d4e8aa2f46b089a99198de2abac4095edfc Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Tue, 3 Apr 2018 17:35:09 +0200 Subject: [PATCH 0738/1221] PS-3941: Skip Travis CI builds for commits without code changes --- .travis.yml | 35 ++++++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/.travis.yml b/.travis.yml index ab47320b0f6e..86a07288c90c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,6 +9,7 @@ cache: env: global: + - PARENT_BRANCH=5.6 - CCACHE_DIR=$HOME/.ccache - CCACHE_COMPRESS=1 - CCACHE_COMPRESSLEVEL=9 @@ -23,7 +24,7 @@ matrix: - wget https://llvm.org/svn/llvm-project/cfe/trunk/tools/clang-format/clang-format-diff.py - chmod a+x clang-format-diff.py - git diff -U0 --no-color HEAD^1 | ./clang-format-diff.py -p1 >_GIT_DIFF - - '[ ! -s _GIT_DIFF ] && echo The last git commit is clang-formatted || cat _GIT_DIFF' + - '[ ! -s _GIT_DIFF ] && { echo The last git commit is clang-formatted; travis_terminate 0; } || { cat _GIT_DIFF; travis_terminate 1; }' # Configurations for developers' forks and after merging a pull request for percona/percona-server @@ -133,7 +134,7 @@ matrix: script: - JOB_NUMBER=$(echo $TRAVIS_JOB_NUMBER | sed -e 's:[0-9][0-9]*\.\(.*\):\1:'); - echo --- JOB_NUMBER=$JOB_NUMBER PACKAGES=$PACKAGES TRAVIS_REPO_SLUG=$TRAVIS_REPO_SLUG TRAVIS_BRANCH=$TRAVIS_BRANCH TRAVIS_EVENT_TYPE=$TRAVIS_EVENT_TYPE TRAVIS_PULL_REQUEST=$TRAVIS_PULL_REQUEST + echo --- JOB_NUMBER=$JOB_NUMBER TRAVIS_COMMIT=$TRAVIS_COMMIT TRAVIS_COMMIT_RANGE=$TRAVIS_COMMIT_RANGE TRAVIS_REPO_SLUG=$TRAVIS_REPO_SLUG TRAVIS_BRANCH=$TRAVIS_BRANCH TRAVIS_EVENT_TYPE=$TRAVIS_EVENT_TYPE TRAVIS_PULL_REQUEST=$TRAVIS_PULL_REQUEST TRAVIS_PULL_REQUEST_BRANCH=$TRAVIS_PULL_REQUEST_BRANCH - echo --- Perform all Travis jobs or only jobs that are included in ENV_VAR_JOB_NUMBERS list if it is defined; JOB_NUMBERS="1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24"; @@ -146,6 +147,26 @@ script: travis_terminate 0; fi; + # For the trunk use TRAVIS_COMMIT_RANGE but "Auto cancel branch builds" has to be turned off at https://travis-ci.org/percona/percona-server/settings + # For pull requests and feature branches replace TRAVIS_COMMIT_RANGE with the range from the root to the tip of the branch + - if [[ "$TRAVIS_EVENT_TYPE" == "pull_request" ]] || [[ "$TRAVIS_REPO_SLUG" != "percona/percona-server" ]]; then + if [[ "$TRAVIS_EVENT_TYPE" == "pull_request" ]]; then TRAVIS_COMMIT=$TRAVIS_COMMIT^2; fi; + git fetch https://github.com/percona/percona-server.git $PARENT_BRANCH:master_repo_$PARENT_BRANCH; + PARENT_COMMIT=$(git rev-list --first-parent --topo-order $TRAVIS_COMMIT ^master_repo_$PARENT_BRANCH | tail -1); + TRAVIS_COMMIT_RANGE=$PARENT_COMMIT^..$TRAVIS_COMMIT; + fi; + if MODIFIED_FILES=$(git diff --name-only $TRAVIS_COMMIT_RANGE 2>/dev/null); then + echo -e "--- Modified files in $TRAVIS_COMMIT_RANGE:\n$MODIFIED_FILES"; + if ! echo "$MODIFIED_FILES" | grep -qvE '^(doc|build-ps|mysql-test|packaging|policy|scripts|support-files)/'; then + echo "--- There are no code changes, stopping build process."; + travis_terminate 0; + else + echo "--- Code changes were found"; + fi; + else + echo "--- Can't prepare MODIFIED_FILES for $TRAVIS_COMMIT_RANGE"; + fi; + - echo --- Configure required LLVM and Ubuntu Toolchain repositories; if [[ "$TRAVIS_OS_NAME" == "linux" ]] && [[ "$CC" == "clang" ]]; then PACKAGES="llvm-$VERSION-dev $PACKAGES"; @@ -188,18 +209,18 @@ script: -DWITH_PAM=ON "; if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then - CMAKE_OPT="$CMAKE_OPT + CMAKE_OPT+=" -DMYSQL_MAINTAINER_MODE=ON -DWITH_TOKUDB=ON "; else - CMAKE_OPT="$CMAKE_OPT + CMAKE_OPT+=" -DMYSQL_MAINTAINER_MODE=OFF -DWITHOUT_TOKUDB=ON "; fi; if [[ "$INVERTED" == "ON" ]]; then - CMAKE_OPT="$CMAKE_OPT + CMAKE_OPT+=" -DWITH_EMBEDDED_SERVER=OFF -DWITH_EDITLINE=bundled -DWITH_LIBEVENT=system @@ -214,7 +235,7 @@ script: -DWITHOUT_PARTITION_STORAGE_ENGINE=ON -DWITHOUT_PERFSCHEMA_STORAGE_ENGINE=ON "; - fi; + fi; - echo --- Perform Debug or RelWithDebInfo compilation; echo --- CMAKE_OPT=\"$CMAKE_OPT\"; @@ -222,6 +243,6 @@ script: cmake .. $CMAKE_OPT $ENV_VAR_CMAKE_OPT - - make -j2 + - make -j2 || travis_terminate 1 - ccache --show-stats From caadcfcd984326ac160fe94bc39d23687d579a43 Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Tue, 3 Apr 2018 17:35:09 +0200 Subject: [PATCH 0739/1221] PS-3941: Skip Travis CI builds for commits without code changes --- .travis.yml | 38 +++++++++++++++++++++++++++++++------- 1 file changed, 31 insertions(+), 7 deletions(-) diff --git a/.travis.yml b/.travis.yml index caebf02195ed..ae25ef6fb171 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,6 +11,7 @@ cache: env: global: + - PARENT_BRANCH=5.7 - CCACHE_DIR=$HOME/.ccache - CCACHE_COMPRESS=1 - CCACHE_COMPRESSLEVEL=9 @@ -25,7 +26,7 @@ matrix: - wget https://llvm.org/svn/llvm-project/cfe/trunk/tools/clang-format/clang-format-diff.py - chmod a+x clang-format-diff.py - git diff -U0 --no-color HEAD^1 | ./clang-format-diff.py -p1 >_GIT_DIFF - - '[ ! -s _GIT_DIFF ] && echo The last git commit is clang-formatted || cat _GIT_DIFF' + - '[ ! -s _GIT_DIFF ] && { echo The last git commit is clang-formatted; travis_terminate 0; } || { cat _GIT_DIFF; travis_terminate 1; }' # Configurations for developers' forks and after merging a pull request for percona/percona-server @@ -135,7 +136,7 @@ matrix: script: - JOB_NUMBER=$(echo $TRAVIS_JOB_NUMBER | sed -e 's:[0-9][0-9]*\.\(.*\):\1:'); - echo --- JOB_NUMBER=$JOB_NUMBER PACKAGES=$PACKAGES TRAVIS_REPO_SLUG=$TRAVIS_REPO_SLUG TRAVIS_BRANCH=$TRAVIS_BRANCH TRAVIS_EVENT_TYPE=$TRAVIS_EVENT_TYPE TRAVIS_PULL_REQUEST=$TRAVIS_PULL_REQUEST + echo --- JOB_NUMBER=$JOB_NUMBER TRAVIS_COMMIT=$TRAVIS_COMMIT TRAVIS_COMMIT_RANGE=$TRAVIS_COMMIT_RANGE TRAVIS_REPO_SLUG=$TRAVIS_REPO_SLUG TRAVIS_BRANCH=$TRAVIS_BRANCH TRAVIS_EVENT_TYPE=$TRAVIS_EVENT_TYPE TRAVIS_PULL_REQUEST=$TRAVIS_PULL_REQUEST TRAVIS_PULL_REQUEST_BRANCH=$TRAVIS_PULL_REQUEST_BRANCH - echo --- Perform all Travis jobs or only jobs that are included in ENV_VAR_JOB_NUMBERS list if it is defined; JOB_NUMBERS="1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24"; @@ -148,6 +149,26 @@ script: travis_terminate 0; fi; + # For the trunk use TRAVIS_COMMIT_RANGE but "Auto cancel branch builds" has to be turned off at https://travis-ci.org/percona/percona-server/settings + # For pull requests and feature branches replace TRAVIS_COMMIT_RANGE with the range from the root to the tip of the branch + - if [[ "$TRAVIS_EVENT_TYPE" == "pull_request" ]] || [[ "$TRAVIS_REPO_SLUG" != "percona/percona-server" ]]; then + if [[ "$TRAVIS_EVENT_TYPE" == "pull_request" ]]; then TRAVIS_COMMIT=$TRAVIS_COMMIT^2; fi; + git fetch https://github.com/percona/percona-server.git $PARENT_BRANCH:master_repo_$PARENT_BRANCH; + PARENT_COMMIT=$(git rev-list --first-parent --topo-order $TRAVIS_COMMIT ^master_repo_$PARENT_BRANCH | tail -1); + TRAVIS_COMMIT_RANGE=$PARENT_COMMIT^..$TRAVIS_COMMIT; + fi; + if MODIFIED_FILES=$(git diff --name-only $TRAVIS_COMMIT_RANGE 2>/dev/null); then + echo -e "--- Modified files in $TRAVIS_COMMIT_RANGE:\n$MODIFIED_FILES"; + if ! echo "$MODIFIED_FILES" | grep -qvE '^(doc|build-ps|mysql-test|packaging|policy|scripts|support-files)/'; then + echo "--- There are no code changes, stopping build process."; + travis_terminate 0; + else + echo "--- Code changes were found"; + fi; + else + echo "--- Can't prepare MODIFIED_FILES for $TRAVIS_COMMIT_RANGE"; + fi; + - echo --- Configure required LLVM and Ubuntu Toolchain repositories; if [[ "$TRAVIS_OS_NAME" == "linux" ]] && [[ "$CC" == "clang" ]]; then PACKAGES="llvm-$VERSION-dev $PACKAGES"; @@ -193,7 +214,10 @@ script: -DWITH_PAM=ON "; if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then - CMAKE_OPT+=" -DMYSQL_MAINTAINER_MODE=ON -DWITH_MECAB=system"; + CMAKE_OPT+=" + -DMYSQL_MAINTAINER_MODE=ON + -DWITH_MECAB=system + "; if [[ "$TRAVIS_REPO_SLUG" == "percona/percona-server" ]]; then CMAKE_OPT+=" -DWITH_TOKUDB=ON -DWITH_ROCKSDB=ON"; else @@ -205,7 +229,7 @@ script: fi; fi; else - CMAKE_OPT="$CMAKE_OPT + CMAKE_OPT+=" -DMYSQL_MAINTAINER_MODE=OFF -DWITH_PROTOBUF=system -DWITH_TOKUDB=OFF @@ -213,7 +237,7 @@ script: "; fi; if [[ "$INVERTED" == "ON" ]]; then - CMAKE_OPT="$CMAKE_OPT + CMAKE_OPT+=" -DWITH_EMBEDDED_SERVER=OFF -DWITH_EDITLINE=bundled -DWITH_LIBEVENT=system @@ -229,7 +253,7 @@ script: -DWITHOUT_PARTITION_STORAGE_ENGINE=ON -DWITHOUT_PERFSCHEMA_STORAGE_ENGINE=ON "; - fi; + fi; - echo --- Perform Debug or RelWithDebInfo compilation; echo --- CMAKE_OPT=\"$CMAKE_OPT\"; @@ -237,6 +261,6 @@ script: cmake .. $CMAKE_OPT $ENV_VAR_CMAKE_OPT - - make -j2 + - make -j2 || travis_terminate 1 - ccache --show-stats From 331797ea2baa1b0c26c13f37e92c4c210a412f9b Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Fri, 6 Apr 2018 09:52:53 +0200 Subject: [PATCH 0740/1221] Bug#27821072 MISLEADING INDENTATION IN FIELD_ENUM::STORE_TYPE Backport from 8.0: fix one -Werror=misleading-indentation warning on linux/sparc. The patch was originally pushed as part of the fix for Bug#26436968 SWITCH TO DEVTOOLSET 6 FOR EL6 AND EL7 FOR MYSQL 8.0 Change-Id: Ie9b3680cd41b5d5b0c23a58d295d97e7ddd2d5ad --- sql/field.cc | 61 ++++++++++++++++++++++++++++++++-------------------- 1 file changed, 38 insertions(+), 23 deletions(-) diff --git a/sql/field.cc b/sql/field.cc index 2776517be908..791de85f61ab 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -9162,37 +9162,52 @@ enum ha_base_keytype Field_enum::key_type() const void Field_enum::store_type(ulonglong value) { switch (packlength) { - case 1: ptr[0]= (uchar) value; break; + case 1: ptr[0]= (uchar) value; + break; case 2: #ifdef WORDS_BIGENDIAN - if (table->s->db_low_byte_first) - { - int2store(ptr,(unsigned short) value); - } - else -#endif + if (table->s->db_low_byte_first) + { + int2store(ptr,(unsigned short) value); + } + else + { + shortstore(ptr,(unsigned short) value); + } +#else shortstore(ptr,(unsigned short) value); - break; - case 3: int3store(ptr,(long) value); break; +#endif + break; + case 3: int3store(ptr,(long) value); + break; case 4: #ifdef WORDS_BIGENDIAN - if (table->s->db_low_byte_first) - { - int4store(ptr,value); - } - else -#endif + if (table->s->db_low_byte_first) + { + int4store(ptr,value); + } + else + { + longstore(ptr,(long) value); + } +#else longstore(ptr,(long) value); - break; +#endif + break; case 8: #ifdef WORDS_BIGENDIAN - if (table->s->db_low_byte_first) - { - int8store(ptr,value); - } - else + if (table->s->db_low_byte_first) + { + int8store(ptr,value); + } + else + { + longlongstore(ptr,value); + } +#else + longlongstore(ptr,value); #endif - longlongstore(ptr,value); break; + break; } } From 8590c8e12a3374eeccb547359750a9d2a128fa6a Mon Sep 17 00:00:00 2001 From: Allen Lai Date: Sun, 8 Apr 2018 09:16:56 +0800 Subject: [PATCH 0741/1221] Bug#27805553 HARD ERROR SHOULD BE REPORTED WHEN FSYNC() RETURN EIO. fsync() will just return EIO only once when the IO error happens, so, it's wrong to keep trying to call it till it return success. When fsync() returns EIO it should be treated as a hard error and InnoDB must abort immediately. --- storage/innobase/os/os0file.cc | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/storage/innobase/os/os0file.cc b/storage/innobase/os/os0file.cc index ad4d6ba28664..fbec15b3ba4c 100644 --- a/storage/innobase/os/os0file.cc +++ b/storage/innobase/os/os0file.cc @@ -3079,21 +3079,8 @@ os_file_fsync_posix( case EIO: - ++failures; - ut_a(failures < 1000); - - if (!(failures % 100)) { - - ib::warn() - << "fsync(): " - << "An error occurred during " - << "synchronization," - << " retrying"; - } - - /* 0.2 sec */ - os_thread_sleep(200000); - break; + ib::fatal() + << "fsync() returned EIO, aborting."; case EINTR: From 5e5b158a2c079ed876d006ae3c27effd2116f094 Mon Sep 17 00:00:00 2001 From: Erlend Dahl Date: Sun, 8 Apr 2018 06:55:53 +0200 Subject: [PATCH 0742/1221] Bug#27805553 HARD ERROR SHOULD BE REPORTED WHEN FSYNC() RETURN EIO. Add a 'break' statement to fix -Werror. --- storage/innobase/os/os0file.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/storage/innobase/os/os0file.cc b/storage/innobase/os/os0file.cc index fbec15b3ba4c..6b3df4ebb417 100644 --- a/storage/innobase/os/os0file.cc +++ b/storage/innobase/os/os0file.cc @@ -3081,6 +3081,7 @@ os_file_fsync_posix( ib::fatal() << "fsync() returned EIO, aborting."; + break; case EINTR: From d982e717aba67227ec40761a21a4211db91aa0e2 Mon Sep 17 00:00:00 2001 From: Arun Kuruvila Date: Mon, 9 Apr 2018 11:18:12 +0530 Subject: [PATCH 0743/1221] Bug#27510150: MYSQLDUMP FAILS FOR SPECIFIC --WHERE CLAUSES Description: Mysqldump utility fails for specific clauses used with the option, 'where'. Analysis:- Method, "fix_identifier_with_newline()" that prefixes all occurrences of newline char ('\n') in incoming buffer does not verify the size of the buffer. The buffer in which the incoming buffer is copied is limited to 2048 bytes and the method does not try to allocate additional memory for larger incoming buffers. Fix:- Method, "fix_identifier_with_newline()" is modified to fix this issue. --- client/mysqldump.c | 182 +++++++++++++++++++++++++++++++++++---------- 1 file changed, 142 insertions(+), 40 deletions(-) diff --git a/client/mysqldump.c b/client/mysqldump.c index 2775769fe522..340373370918 100644 --- a/client/mysqldump.c +++ b/client/mysqldump.c @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -549,7 +549,8 @@ static int dump_tablespaces_for_databases(char** databases); static int dump_tablespaces(char* ts_where); static void print_comment(FILE *sql_file, my_bool is_error, const char *format, ...); -static const char* fix_identifier_with_newline(char*); +static char const* fix_identifier_with_newline(char const* object_name, + my_bool* freemem); /* @@ -644,13 +645,19 @@ static void write_header(FILE *sql_file, char *db_name) } else if (!opt_compact) { + my_bool freemem= FALSE; + char const* text= fix_identifier_with_newline(db_name, &freemem); + print_comment(sql_file, 0, "-- MySQL dump %s Distrib %s, for %s (%s)\n--\n", DUMP_VERSION, MYSQL_SERVER_VERSION, SYSTEM_TYPE, MACHINE_TYPE); print_comment(sql_file, 0, "-- Host: %s Database: %s\n", current_host ? current_host : "localhost", - db_name ? fix_identifier_with_newline(db_name) : ""); + text); + if (freemem) + my_free((void*)text); + print_comment(sql_file, 0, "-- ------------------------------------------------------\n" ); @@ -1982,31 +1989,84 @@ static void print_comment(FILE *sql_file, my_bool is_error, const char *format, print_xml_comment(sql_file, strlen(comment_buff), comment_buff); } -/* - This function accepts object names and prefixes -- wherever \n - character is found. - @param[in] object_name +/** + @brief Accepts object names and prefixes them with "-- " wherever + end-of-line character ('\n') is found. - @return - @retval fixed object name. -*/ + @param[in] object_name object name list (concatenated string) + @param[out] freemem should buffer be released after usage -static const char* fix_identifier_with_newline(char* object_name) + @return + @retval pointer to a string with prefixed objects +*/ +static char const* fix_identifier_with_newline(char const* object_name, my_bool* freemem) { - static char buff[COMMENT_LENGTH]= {0}; - char *ptr= buff; - memset(buff, 0, 255); - while(*object_name) + const size_t PREFIX_LENGTH= 3; // strlen ("-- ") + + // static buffer for replacement procedure + static char storage[NAME_LEN + 1]; + static char* buffer= storage; + static size_t buffer_size= sizeof(storage) - 1; + size_t index= 0; + size_t required_size= 0; + + // we presume memory allocation won't be needed + *freemem= FALSE; + + // traverse and reformat objects + while (object_name && *object_name) { - *ptr++ = *object_name; + ++required_size; if (*object_name == '\n') - ptr= strmov(ptr, "-- "); - object_name++; + required_size+= PREFIX_LENGTH; + + // do we need dynamic (re)allocation + if (required_size > buffer_size) + { + // new alloc size increased in COMMENT_LENGTH multiple + buffer_size= COMMENT_LENGTH * (1 + required_size/COMMENT_LENGTH); + + // is our buffer already dynamically allocated + if (*freemem) + { + // just realloc + buffer= (char*)my_realloc(buffer, buffer_size + 1, MYF(MY_WME)); + if (!buffer) + exit(1); + } + else + { + // dynamic allocation + copy from static buffer + buffer= (char*)my_malloc(buffer_size + 1, MYF(MY_WME)); + if (!buffer) + exit(1); + + strncpy(buffer, storage, index); + *freemem= TRUE; + } + } + + // copy a character + buffer[index]= *object_name; + ++index; + + // prefix new lines with double dash + if (*object_name == '\n') + { + strcpy(buffer + index, "-- "); + index += PREFIX_LENGTH; + } + + ++object_name; } - return buff; + + // don't forget null termination + buffer[index]= '\0'; + return buffer; } + /* create_delimiter Generate a new (null-terminated) string that does not exist in query @@ -2066,6 +2126,8 @@ static uint dump_events_for_db(char *db) char db_cl_name[MY_CS_NAME_SIZE]; int db_cl_altered= FALSE; + my_bool freemem= FALSE; + char const *text= fix_identifier_with_newline(db, &freemem); DBUG_ENTER("dump_events_for_db"); DBUG_PRINT("enter", ("db: '%s'", db)); @@ -2075,7 +2137,9 @@ static uint dump_events_for_db(char *db) /* nice comments */ print_comment(sql_file, 0, "\n--\n-- Dumping events for database '%s'\n--\n", - fix_identifier_with_newline(db)); + text); + if (freemem) + my_free((void*)text); /* not using "mysql_query_with_error_report" because we may have not @@ -2284,6 +2348,8 @@ static uint dump_routines_for_db(char *db) char db_cl_name[MY_CS_NAME_SIZE]; int db_cl_altered= FALSE; + my_bool freemem= FALSE; + char const *text= fix_identifier_with_newline(db, &freemem); DBUG_ENTER("dump_routines_for_db"); DBUG_PRINT("enter", ("db: '%s'", db)); @@ -2292,8 +2358,10 @@ static uint dump_routines_for_db(char *db) /* nice comments */ print_comment(sql_file, 0, - "\n--\n-- Dumping routines for database '%s'\n--\n", - fix_identifier_with_newline(db)); + "\n--\n-- Dumping routines for database '%s'\n--\n", text); + + if (freemem) + my_free((void*)text); /* not using "mysql_query_with_error_report" because we may have not @@ -2348,11 +2416,17 @@ static uint dump_routines_for_db(char *db) row[2] ? strlen(row[2]) : 0)); if (row[2] == NULL) { + my_bool freemem= FALSE; + char const* text= fix_identifier_with_newline(current_user, &freemem); + print_comment(sql_file, 1, "\n-- insufficient privileges to %s\n", query_buff); print_comment(sql_file, 1, "-- does %s have permissions on mysql.proc?\n\n", - fix_identifier_with_newline(current_user)); + text); + if (freemem) + my_free((void*)text); + maybe_die(EX_MYSQLERR,"%s has insufficent privileges to %s!", current_user, query_buff); } else if (strlen(row[2])) @@ -2547,6 +2621,8 @@ static uint get_table_structure(char *table, char *db, char *table_type, /* Make an sql-file, if path was given iow. option -T was given */ char buff[20+FN_REFLEN]; MYSQL_FIELD *field; + my_bool freemem= FALSE; + char const *text; my_snprintf(buff, sizeof(buff), "show create table %s", result_table); @@ -2563,14 +2639,17 @@ static uint get_table_structure(char *table, char *db, char *table_type, write_header(sql_file, db); } + text= fix_identifier_with_newline(result_table, &freemem); if (strcmp (table_type, "VIEW") == 0) /* view */ print_comment(sql_file, 0, "\n--\n-- Temporary table structure for view %s\n--\n\n", - fix_identifier_with_newline(result_table)); + text); else print_comment(sql_file, 0, - "\n--\n-- Table structure for table %s\n--\n\n", - fix_identifier_with_newline(result_table)); + "\n--\n-- Table structure for table %s\n--\n\n", text); + + if (freemem) + my_free((void*)text); if (opt_drop) { @@ -2803,6 +2882,9 @@ static uint get_table_structure(char *table, char *db, char *table_type, /* Make an sql-file, if path was given iow. option -T was given */ if (!opt_no_create_info) { + my_bool freemem= FALSE; + char const *text; + if (path) { if (!(sql_file= open_sql_file_for_table(table, O_WRONLY))) @@ -2810,9 +2892,13 @@ static uint get_table_structure(char *table, char *db, char *table_type, write_header(sql_file, db); } + text= fix_identifier_with_newline(result_table, &freemem); print_comment(sql_file, 0, "\n--\n-- Table structure for table %s\n--\n\n", - fix_identifier_with_newline(result_table)); + text); + if (freemem) + my_free((void*)text); + if (opt_drop) fprintf(sql_file, "DROP TABLE IF EXISTS %s;\n", result_table); if (!opt_xml) @@ -3515,25 +3601,34 @@ static void dump_table(char *table, char *db) } else { - print_comment(md_result_file, 0, - "\n--\n-- Dumping data for table %s\n--\n", - fix_identifier_with_newline(result_table)); - + my_bool freemem= FALSE; + char const* text= fix_identifier_with_newline(result_table, &freemem); + print_comment(md_result_file, 0, "\n--\n-- Dumping data for table %s\n--\n", + text); + if (freemem) + my_free((void*)text); + dynstr_append_checked(&query_string, "SELECT /*!40001 SQL_NO_CACHE */ * FROM "); dynstr_append_checked(&query_string, result_table); if (where) { - print_comment(md_result_file, 0, "-- WHERE: %s\n", - fix_identifier_with_newline(where)); + freemem= FALSE; + text= fix_identifier_with_newline(where, &freemem); + print_comment(md_result_file, 0, "-- WHERE: %s\n", text); + if (freemem) + my_free((void*)text); dynstr_append_checked(&query_string, " WHERE "); dynstr_append_checked(&query_string, where); } if (order_by) { - print_comment(md_result_file, 0, "-- ORDER BY: %s\n", - fix_identifier_with_newline(order_by)); + freemem= FALSE; + text= fix_identifier_with_newline(order_by, &freemem); + print_comment(md_result_file, 0, "-- ORDER BY: %s\n", text); + if (freemem) + my_free((void*)text); dynstr_append_checked(&query_string, " ORDER BY "); dynstr_append_checked(&query_string, order_by); @@ -4302,10 +4397,13 @@ static int init_dumping(char *database, int init_func(char*)) */ char quoted_database_buf[NAME_LEN*2+3]; char *qdatabase= quote_name(database,quoted_database_buf,opt_quoted); + my_bool freemem= FALSE; + char const* text= fix_identifier_with_newline(qdatabase, &freemem); - print_comment(md_result_file, 0, - "\n--\n-- Current Database: %s\n--\n", - fix_identifier_with_newline(qdatabase)); + print_comment(md_result_file, 0, "\n--\n-- Current Database: %s\n--\n", + text); + if (freemem) + my_free((void*)text); /* Call the view or table specific function */ init_func(qdatabase); @@ -5265,6 +5363,8 @@ static my_bool get_view_structure(char *table, char* db) char table_buff2[NAME_LEN*2+3]; char query[QUERY_LENGTH]; FILE *sql_file= md_result_file; + my_bool freemem= FALSE; + char const *text; DBUG_ENTER("get_view_structure"); if (opt_no_create_info) /* Don't write table creation info */ @@ -5309,9 +5409,11 @@ static my_bool get_view_structure(char *table, char* db) write_header(sql_file, db); } + text= fix_identifier_with_newline(result_table, &freemem); print_comment(sql_file, 0, - "\n--\n-- Final view structure for view %s\n--\n\n", - fix_identifier_with_newline(result_table)); + "\n--\n-- Final view structure for view %s\n--\n\n", text); + if (freemem) + my_free((void*)text); /* Table might not exist if this view was dumped with --tab. */ fprintf(sql_file, "/*!50001 DROP TABLE IF EXISTS %s*/;\n", opt_quoted_table); From e8374b7aca8ae91afe8fe23ba700e9ff5ba51be7 Mon Sep 17 00:00:00 2001 From: Arun Kuruvila Date: Mon, 9 Apr 2018 12:01:52 +0530 Subject: [PATCH 0744/1221] Bug#27302337: MYSQL ABORTS WITHOUT PROPER ERROR MESSAGE ON STARTUP IF GRANT TABLES ARE CORRUPT Description: Mysql server aborts with improper error message while start up. Analysis: Incomplete error message is thrown to server error log if the server failed to initialize ACL/grant/time zones structures or failed to remove temporary table files during server start up. Fix: Appropriate error message is thrown to error log for the scenarios mentioned above. This issue is already fixed in 8.0+ --- mysql-test/r/grant_debug.result | 10 ++++++++++ mysql-test/t/grant_debug.test | 29 +++++++++++++++++++++++++++++ sql/auth/sql_auth_cache.cc | 13 +++++++++++++ sql/mysqld.cc | 2 ++ 4 files changed, 54 insertions(+) diff --git a/mysql-test/r/grant_debug.result b/mysql-test/r/grant_debug.result index b3d77fc51821..3d1b2d23a598 100644 --- a/mysql-test/r/grant_debug.result +++ b/mysql-test/r/grant_debug.result @@ -152,3 +152,13 @@ Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. DROP PROCEDURE db_1.p_def; DROP DATABASE db_1; +### +### Bug#27302337: MYSQL ABORTS WITHOUT PROPER ERROR MESSAGE ON +### STARTUP IF GRANT TABLES ARE CORRUPT +### +# Shutdown the server +# Start the server to simulate acl_init() failure +Pattern "Table 'user' is marked as crashed and should be repaired" found +Pattern "Fatal error: Failed to initialize ACL/grant/time zones structures or failed to remove temporary table files." found +Pattern "Aborting" found +# Restart the server diff --git a/mysql-test/t/grant_debug.test b/mysql-test/t/grant_debug.test index d61a4257b742..91ecdd909dbb 100644 --- a/mysql-test/t/grant_debug.test +++ b/mysql-test/t/grant_debug.test @@ -171,3 +171,32 @@ SET sql_mode= @orig_sql_mode; DROP PROCEDURE db_1.p_def; DROP DATABASE db_1; +--echo ### +--echo ### Bug#27302337: MYSQL ABORTS WITHOUT PROPER ERROR MESSAGE ON +--echo ### STARTUP IF GRANT TABLES ARE CORRUPT +--echo ### + +let $DDIR= `select @@datadir`; +let server_log= $MYSQLTEST_VARDIR/log/mysqld.1.err; + +--echo # Shutdown the server +--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect +--shutdown_server +--source include/wait_until_disconnected.inc + +--echo # Start the server to simulate acl_init() failure +--error 1 +--exec $MYSQLD_CMD --datadir=$DDIR --debug=+d,simulate_acl_init_failure > $server_log 2>&1 + +let SEARCH_FILE=$server_log; +let SEARCH_PATTERN=Table 'user' is marked as crashed and should be repaired; +--source include/search_pattern.inc +let SEARCH_PATTERN=Fatal error: Failed to initialize ACL/grant/time zones structures or failed to remove temporary table files.; +--source include/search_pattern.inc +let SEARCH_PATTERN=Aborting; +--source include/search_pattern.inc + +--echo # Restart the server +--exec echo "restart: --debug=-d,simulate_acl_init_failure" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect +--enable_reconnect +--source include/wait_until_connected_again.inc diff --git a/sql/auth/sql_auth_cache.cc b/sql/auth/sql_auth_cache.cc index f55f7baa4978..a7bf3bbd3871 100644 --- a/sql/auth/sql_auth_cache.cc +++ b/sql/auth/sql_auth_cache.cc @@ -1857,8 +1857,15 @@ static my_bool acl_load(THD *thd, TABLE_LIST *tables) } // END while reading records from the mysql.user table end_read_record(&read_record_info); + + DBUG_EXECUTE_IF("simulate_acl_init_failure", + read_rec_errcode= HA_ERR_WRONG_IN_RECORD;); + if (read_rec_errcode > 0) + { + table->file->print_error(read_rec_errcode, MYF(ME_ERRORLOG)); goto end; + } std::sort(acl_users->begin(), acl_users->end(), ACL_compare()); acl_users->shrink_to_fit(); @@ -1943,7 +1950,10 @@ static my_bool acl_load(THD *thd, TABLE_LIST *tables) end_read_record(&read_record_info); if (read_rec_errcode > 0) + { + table->file->print_error(read_rec_errcode, MYF(ME_ERRORLOG)); goto end; + } std::sort(acl_dbs->begin(), acl_dbs->end(), ACL_compare()); acl_dbs->shrink_to_fit(); @@ -1973,7 +1983,10 @@ static my_bool acl_load(THD *thd, TABLE_LIST *tables) end_read_record(&read_record_info); if (read_rec_errcode > 0) + { + table->file->print_error(read_rec_errcode, MYF(ME_ERRORLOG)); goto end; + } std::sort(acl_proxy_users->begin(), acl_proxy_users->end(), ACL_compare()); } diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 7c88f052b5d8..f6a610f60c7c 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -4969,6 +4969,8 @@ int mysqld_main(int argc, char **argv) grant_init(opt_noacl)) { abort_loop= true; + sql_print_error("Fatal error: Failed to initialize ACL/grant/time zones " + "structures or failed to remove temporary table files."); delete_pid_file(MYF(MY_WME)); From c1a578458ec0dc36c566d6984b4c8e2994f3ae12 Mon Sep 17 00:00:00 2001 From: Aakanksha Verma Date: Mon, 9 Apr 2018 13:10:01 +0530 Subject: [PATCH 0745/1221] Bug #25873310 FULLTEXT SEARCH CAN NOT FIND WORD WHICH CONTAINS "," OR "." PROBLEM Ngram fts parser used to parse "," and "." as words and were tokenized which is wrong and uneccessary. FIX Disallow "." and "," as words to be tokenized (as is the case with native parser) and that would solve the bug issue which provides different results in case of natural / boolean search. Reviewed by: Jimmy Yang RB: 19191 --- mysql-test/suite/innodb_fts/include/ngram.inc | 26 +-- mysql-test/suite/innodb_fts/r/ngram_1.result | 176 ++++++++++-------- mysql-test/suite/innodb_fts/t/ngram_1.test | 26 +++ plugin/fulltext/ngram_parser/plugin_ngram.cc | 10 +- 4 files changed, 147 insertions(+), 91 deletions(-) diff --git a/mysql-test/suite/innodb_fts/include/ngram.inc b/mysql-test/suite/innodb_fts/include/ngram.inc index f275e2905777..a644a6ce1346 100644 --- a/mysql-test/suite/innodb_fts/include/ngram.inc +++ b/mysql-test/suite/innodb_fts/include/ngram.inc @@ -66,7 +66,7 @@ SELECT * FROM articles_1 WHERE SELECT * FROM articles_1 WHERE MATCH(title_varchar) AGAINST('nd'); SELECT * FROM articles_1 WHERE - MATCH(title_varchar) AGAINST('0,'); + MATCH(title_varchar) AGAINST('50'); SELECT * FROM articles_1 WHERE MATCH(title_text) AGAINST('se'); SELECT * FROM articles_1 WHERE @@ -201,7 +201,7 @@ SHOW CREATE TABLE articles; # natural language search SELECT * FROM articles WHERE - MATCH(c1) AGAINST('啊! '); + MATCH(c1) AGAINST('救命'); SELECT * FROM articles WHERE MATCH(c2) AGAINST('我幾'); @@ -258,7 +258,7 @@ SELECT * FROM articles WHERE MATCH(j3) AGAINST(">の長" IN BOOLEAN MODE); SELECT * FROM articles WHERE - MATCH(k2) AGAINST('-Ch +요*'); + MATCH(k2) AGAINST('-Ch +해요'); SELECT * FROM articles WHERE MATCH(e1) AGAINST("row1 -row" IN BOOLEAN MODE) ; @@ -266,7 +266,7 @@ SELECT * FROM articles WHERE # Query expansion mode SELECT * FROM articles WHERE - MATCH(c1) AGAINST('啊! ' WITH QUERY EXPANSION); + MATCH(c1) AGAINST('命啊' WITH QUERY EXPANSION); SELECT * FROM articles WHERE MATCH(j2) AGAINST('やっそう' WITH QUERY EXPANSION); SELECT * FROM articles WHERE @@ -299,7 +299,7 @@ SELECT COUNT(*) FROM articles t1,articles t2 WHERE MATCH(t2.j1,t2.j3) AGAINST("右さ +の長" IN BOOLEAN MODE) AND t1.seq = t2.seq ; SELECT COUNT(*) FROM articles t1,articles t2 - WHERE MATCH(t1.c1) AGAINST("啊! ") + WHERE MATCH(t1.c1) AGAINST("命啊") AND t1.seq != t2.seq AND MATCH(t2.k2) AGAINST("국말" IN BOOLEAN MODE) ; SELECT COUNT(*) FROM articles t1,articles t2 @@ -331,7 +331,7 @@ ALTER TABLE 名字 ADD FULLTEXT INDEX con7 (j3) WITH PARSER ngram; ALTER TABLE 名字 ADD FULLTEXT INDEX con8 (행운을빈다) WITH PARSER ngram; ALTER TABLE 名字 ADD FULLTEXT INDEX con9 (e1) WITH PARSER ngram; SELECT * FROM 名字 WHERE - MATCH(c1) AGAINST('啊! '); + MATCH(c1) AGAINST('命啊'); SELECT * FROM 名字 WHERE MATCH(さようなら,j3) AGAINST('やっ'); SELECT * FROM 名字 WHERE @@ -389,7 +389,7 @@ INSERT INTO 名字 (c1,c2,c3,さようなら,j2,j3,행운을빈다,k2,e1) VALUES ('救命啊!','火啊! 你好','生日快樂 ','雨季','雨が降りそう つやってみよう','雨雲','저분은 영어를 잘 합니다','저는 서울에서 살고 있습니다.','recording test'); SELECT * FROM 名字 WHERE - MATCH(c1) AGAINST('啊! '); + MATCH(c1) AGAINST('命啊'); SELECT * FROM 名字 WHERE MATCH(さようなら,j3) AGAINST('やっ'); SELECT * FROM 名字 WHERE @@ -415,7 +415,7 @@ ANALYZE TABLE 名字; -- enable_result_log SELECT * FROM 名字 WHERE - MATCH(c1) AGAINST('啊! '); + MATCH(c1) AGAINST('命啊'); SELECT * FROM 名字 WHERE MATCH(さようなら,j3) AGAINST('やっ'); SELECT * FROM 名字 WHERE @@ -446,7 +446,7 @@ INSERT INTO 名字 (c1,c2,c3,さようなら,j2,j3,행운을빈다,k2,e1) VALUES ('救命啊!','火啊! 你好','生日快樂 ','雨季','雨が降りそう つやってみよう','雨雲','저분은 영어를 잘 합니다','저는 서울에서 살고 있습니다.','recording test'); SELECT * FROM 名字 WHERE - MATCH(c1) AGAINST('啊! '); + MATCH(c1) AGAINST('命啊'); SELECT * FROM 名字 WHERE MATCH(さようなら,j3) AGAINST('やっ'); SELECT * FROM 名字 WHERE @@ -507,7 +507,7 @@ ANALYZE TABLE 名字; -- enable_result_log SELECT * FROM 名字 WHERE - MATCH(c1) AGAINST('啊! '); + MATCH(c1) AGAINST('命啊'); SELECT * FROM 名字 WHERE MATCH(さようなら,j3) AGAINST('やっ'); SELECT * FROM 名字 WHERE @@ -561,7 +561,7 @@ ANALYZE TABLE 名字; -- enable_result_log SELECT * FROM 名字 WHERE - MATCH(c1) AGAINST('啊! '); + MATCH(c1) AGAINST('命啊'); SELECT * FROM 名字 WHERE MATCH(さようなら,j3) AGAINST('やっ'); SELECT * FROM 名字 WHERE @@ -608,10 +608,10 @@ ANALYZE TABLE 名字; -- enable_result_log SELECT * FROM 名字 WHERE - MATCH(c1) AGAINST('啊! '); + MATCH(c1) AGAINST('命啊'); UPDATE 名字 SET c1 = '你好嗎?' WHERE MATCH(c2) AGAINST('啊!'); SELECT * FROM 名字 WHERE - MATCH(c1) AGAINST('啊! '); + MATCH(c1) AGAINST('命啊'); DELETE FROM 名字 WHERE MATCH(さようなら,j3) AGAINST("てみ -雨が" IN BOOLEAN MODE); SELECT * FROM 名字 WHERE diff --git a/mysql-test/suite/innodb_fts/r/ngram_1.result b/mysql-test/suite/innodb_fts/r/ngram_1.result index 308eaa26a457..1c746af543f8 100644 --- a/mysql-test/suite/innodb_fts/r/ngram_1.result +++ b/mysql-test/suite/innodb_fts/r/ngram_1.result @@ -85,7 +85,7 @@ seq title_char title_varchar title_text 3 English arose in the Anglo-Saxon kingdoms its from of England and what is now southeast Scotland Following the extensive influence of Great Britain and the United Kingdom 1 English is a West Germanic language It was first spoken in early medieval England most widely used language in the world SELECT * FROM articles_1 WHERE -MATCH(title_varchar) AGAINST('0,'); +MATCH(title_varchar) AGAINST('50'); seq title_char title_varchar title_text 7 spread across states by United Kingdom ~ England army The Oxford English Dictionary liSts over 250,000 distinct words+ it became the dominant language in the United States, Canada, Australia and New Zealand SELECT * FROM articles_1 WHERE @@ -454,7 +454,7 @@ articles CREATE TABLE `articles` ( FULLTEXT KEY `con9` (`e1`) /*!50100 WITH PARSER `ngram` */ ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1 SELECT * FROM articles WHERE -MATCH(c1) AGAINST('啊! '); +MATCH(c1) AGAINST('救命'); seq c1 c2 c3 j1 j2 j3 k1 k2 e1 3 救命啊! 火啊! 你好 生日快樂 雨季 雨が降りそう つやってみよう 雨雲 저분은 영어를 잘 합니다 저는 서울에서 살고 있습니다. recording test SELECT * FROM articles WHERE @@ -528,14 +528,14 @@ SELECT * FROM articles WHERE MATCH(j3) AGAINST(">の長" IN BOOLEAN MODE); seq c1 c2 c3 j1 j2 j3 k1 k2 e1 SELECT * FROM articles WHERE -MATCH(k2) AGAINST('-Ch +요*'); +MATCH(k2) AGAINST('-Ch +해요'); seq c1 c2 c3 j1 j2 j3 k1 k2 e1 2 你好嗎? 我幾好,你呢 好耐冇見 左右 左右される ☆右折⇔左折 제 이름은 Charles입니다. 운동을 좋아해요* row row1 value SELECT * FROM articles WHERE MATCH(e1) AGAINST("row1 -row" IN BOOLEAN MODE) ; seq c1 c2 c3 j1 j2 j3 k1 k2 e1 SELECT * FROM articles WHERE -MATCH(c1) AGAINST('啊! ' WITH QUERY EXPANSION); +MATCH(c1) AGAINST('命啊' WITH QUERY EXPANSION); seq c1 c2 c3 j1 j2 j3 k1 k2 e1 3 救命啊! 火啊! 你好 生日快樂 雨季 雨が降りそう つやってみよう 雨雲 저분은 영어를 잘 합니다 저는 서울에서 살고 있습니다. recording test SELECT * FROM articles WHERE @@ -578,7 +578,7 @@ AND t1.seq = t2.seq ; COUNT(*) 1 SELECT COUNT(*) FROM articles t1,articles t2 -WHERE MATCH(t1.c1) AGAINST("啊! ") +WHERE MATCH(t1.c1) AGAINST("命啊") AND t1.seq != t2.seq AND MATCH(t2.k2) AGAINST("국말" IN BOOLEAN MODE) ; COUNT(*) @@ -613,7 +613,7 @@ ALTER TABLE 名字 ADD FULLTEXT INDEX con7 (j3) WITH PARSER ngram; ALTER TABLE 名字 ADD FULLTEXT INDEX con8 (행운을빈다) WITH PARSER ngram; ALTER TABLE 名字 ADD FULLTEXT INDEX con9 (e1) WITH PARSER ngram; SELECT * FROM 名字 WHERE -MATCH(c1) AGAINST('啊! '); +MATCH(c1) AGAINST('命啊'); seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 3 救命啊! 火啊! 你好 生日快樂 雨季 雨が降りそう つやってみよう 雨雲 저분은 영어를 잘 합니다 저는 서울에서 살고 있습니다. recording test SELECT * FROM 名字 WHERE @@ -846,7 +846,7 @@ INSERT INTO 名字 (c1,c2,c3,さようなら,j2,j3,행운을빈다,k2,e1) VALUES ('你好嗎?','我幾好,你呢','好耐冇見','左右','左右される','☆右折⇔左折','제 이름은 Charles입니다.','운동을 좋아해요*','row value'), ('救命啊!','火啊! 你好','生日快樂 ','雨季','雨が降りそう つやってみよう','雨雲','저분은 영어를 잘 합니다','저는 서울에서 살고 있습니다.','recording test'); SELECT * FROM 名字 WHERE -MATCH(c1) AGAINST('啊! '); +MATCH(c1) AGAINST('命啊'); seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 SELECT * FROM 名字 WHERE MATCH(さようなら,j3) AGAINST('やっ'); @@ -878,7 +878,7 @@ seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 COMMIT; ANALYZE TABLE 名字; SELECT * FROM 名字 WHERE -MATCH(c1) AGAINST('啊! '); +MATCH(c1) AGAINST('命啊'); seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 0 救命啊! 火啊! 你好 生日快樂 雨季 雨が降りそう つやってみよう 雨雲 저분은 영어를 잘 합니다 저는 서울에서 살고 있습니다. recording test SELECT * FROM 名字 WHERE @@ -925,7 +925,7 @@ SAVEPOINT B; INSERT INTO 名字 (c1,c2,c3,さようなら,j2,j3,행운을빈다,k2,e1) VALUES ('救命啊!','火啊! 你好','生日快樂 ','雨季','雨が降りそう つやってみよう','雨雲','저분은 영어를 잘 합니다','저는 서울에서 살고 있습니다.','recording test'); SELECT * FROM 名字 WHERE -MATCH(c1) AGAINST('啊! '); +MATCH(c1) AGAINST('命啊'); seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 SELECT * FROM 名字 WHERE MATCH(さようなら,j3) AGAINST('やっ'); @@ -1003,7 +1003,7 @@ ROLLBACK; COMMIT; ANALYZE TABLE 名字; SELECT * FROM 名字 WHERE -MATCH(c1) AGAINST('啊! '); +MATCH(c1) AGAINST('命啊'); seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 SELECT * FROM 名字 WHERE MATCH(さようなら,j3) AGAINST('やっ'); @@ -1121,7 +1121,7 @@ ALTER TABLE 名字 ADD FULLTEXT INDEX con8 (행운을빈다) WITH PARSER ngram; COMMIT; ANALYZE TABLE 名字; SELECT * FROM 名字 WHERE -MATCH(c1) AGAINST('啊! '); +MATCH(c1) AGAINST('命啊'); seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 0 救命啊! 火啊! 你好 生日快樂 雨季 雨が降りそう つやってみよう 雨雲 저분은 영어를 잘 합니다 저는 서울에서 살고 있습니다. recording test SELECT * FROM 名字 WHERE @@ -1193,13 +1193,14 @@ INSERT INTO 名字 (c1,c2,c3,さようなら,j2,j3,행운을빈다,k2,e1) VALUES ('救命啊!','火啊! 你好','生日快樂 ','雨季','雨が降りそう つやってみよう','雨雲','저분은 영어를 잘 합니다','저는 서울에서 살고 있습니다.','recording test'); ANALYZE TABLE 名字; SELECT * FROM 名字 WHERE -MATCH(c1) AGAINST('啊! '); +MATCH(c1) AGAINST('命啊'); seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 0 救命啊! 火啊! 你好 生日快樂 雨季 雨が降りそう つやってみよう 雨雲 저분은 영어를 잘 합니다 저는 서울에서 살고 있습니다. recording test UPDATE 名字 SET c1 = '你好嗎?' WHERE MATCH(c2) AGAINST('啊!'); SELECT * FROM 名字 WHERE -MATCH(c1) AGAINST('啊! '); +MATCH(c1) AGAINST('命啊'); seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 +0 救命啊! 火啊! 你好 生日快樂 雨季 雨が降りそう つやってみよう 雨雲 저분은 영어를 잘 합니다 저는 서울에서 살고 있습니다. recording test DELETE FROM 名字 WHERE MATCH(さようなら,j3) AGAINST("てみ -雨が" IN BOOLEAN MODE); SELECT * FROM 名字 WHERE @@ -1208,12 +1209,12 @@ seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 SELECT * FROM 名字; seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 0 你好嗎? 我幾好,你呢 好耐冇見 左右 左右される ☆右折⇔左折 제 이름은 Charles입니다. 운동을 좋아해요* row value -0 你好嗎? 火啊! 你好 生日快樂 雨季 雨が降りそう つやってみよう 雨雲 저분은 영어를 잘 합니다 저는 서울에서 살고 있습니다. recording test +0 救命啊! 火啊! 你好 生日快樂 雨季 雨が降りそう つやってみよう 雨雲 저분은 영어를 잘 합니다 저는 서울에서 살고 있습니다. recording test SELECT * FROM 名字 WHERE MATCH (행운을빈다) AGAINST('니다'); seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 0 你好嗎? 我幾好,你呢 好耐冇見 左右 左右される ☆右折⇔左折 제 이름은 Charles입니다. 운동을 좋아해요* row value -0 你好嗎? 火啊! 你好 生日快樂 雨季 雨が降りそう つやってみよう 雨雲 저분은 영어를 잘 합니다 저는 서울에서 살고 있습니다. recording test +0 救命啊! 火啊! 你好 生日快樂 雨季 雨が降りそう つやってみよう 雨雲 저분은 영어를 잘 합니다 저는 서울에서 살고 있습니다. recording test DELETE FROM 名字 WHERE MATCH (행운을빈다) AGAINST('니다'); SELECT * FROM 名字; @@ -1306,7 +1307,7 @@ seq title_char title_varchar title_text 3 English arose in the Anglo-Saxon kingdoms its from of England and what is now southeast Scotland Following the extensive influence of Great Britain and the United Kingdom 1 English is a West Germanic language It was first spoken in early medieval England most widely used language in the world SELECT * FROM articles_1 WHERE -MATCH(title_varchar) AGAINST('0,'); +MATCH(title_varchar) AGAINST('50'); seq title_char title_varchar title_text 7 spread across states by United Kingdom ~ England army The Oxford English Dictionary liSts over 250,000 distinct words+ it became the dominant language in the United States, Canada, Australia and New Zealand SELECT * FROM articles_1 WHERE @@ -1675,7 +1676,7 @@ articles CREATE TABLE `articles` ( FULLTEXT KEY `con9` (`e1`) /*!50100 WITH PARSER `ngram` */ ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT SELECT * FROM articles WHERE -MATCH(c1) AGAINST('啊! '); +MATCH(c1) AGAINST('救命'); seq c1 c2 c3 j1 j2 j3 k1 k2 e1 3 救命啊! 火啊! 你好 生日快樂 雨季 雨が降りそう つやってみよう 雨雲 저분은 영어를 잘 합니다 저는 서울에서 살고 있습니다. recording test SELECT * FROM articles WHERE @@ -1749,14 +1750,14 @@ SELECT * FROM articles WHERE MATCH(j3) AGAINST(">の長" IN BOOLEAN MODE); seq c1 c2 c3 j1 j2 j3 k1 k2 e1 SELECT * FROM articles WHERE -MATCH(k2) AGAINST('-Ch +요*'); +MATCH(k2) AGAINST('-Ch +해요'); seq c1 c2 c3 j1 j2 j3 k1 k2 e1 2 你好嗎? 我幾好,你呢 好耐冇見 左右 左右される ☆右折⇔左折 제 이름은 Charles입니다. 운동을 좋아해요* row row1 value SELECT * FROM articles WHERE MATCH(e1) AGAINST("row1 -row" IN BOOLEAN MODE) ; seq c1 c2 c3 j1 j2 j3 k1 k2 e1 SELECT * FROM articles WHERE -MATCH(c1) AGAINST('啊! ' WITH QUERY EXPANSION); +MATCH(c1) AGAINST('命啊' WITH QUERY EXPANSION); seq c1 c2 c3 j1 j2 j3 k1 k2 e1 3 救命啊! 火啊! 你好 生日快樂 雨季 雨が降りそう つやってみよう 雨雲 저분은 영어를 잘 합니다 저는 서울에서 살고 있습니다. recording test SELECT * FROM articles WHERE @@ -1799,7 +1800,7 @@ AND t1.seq = t2.seq ; COUNT(*) 1 SELECT COUNT(*) FROM articles t1,articles t2 -WHERE MATCH(t1.c1) AGAINST("啊! ") +WHERE MATCH(t1.c1) AGAINST("命啊") AND t1.seq != t2.seq AND MATCH(t2.k2) AGAINST("국말" IN BOOLEAN MODE) ; COUNT(*) @@ -1834,7 +1835,7 @@ ALTER TABLE 名字 ADD FULLTEXT INDEX con7 (j3) WITH PARSER ngram; ALTER TABLE 名字 ADD FULLTEXT INDEX con8 (행운을빈다) WITH PARSER ngram; ALTER TABLE 名字 ADD FULLTEXT INDEX con9 (e1) WITH PARSER ngram; SELECT * FROM 名字 WHERE -MATCH(c1) AGAINST('啊! '); +MATCH(c1) AGAINST('命啊'); seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 3 救命啊! 火啊! 你好 生日快樂 雨季 雨が降りそう つやってみよう 雨雲 저분은 영어를 잘 합니다 저는 서울에서 살고 있습니다. recording test SELECT * FROM 名字 WHERE @@ -2067,7 +2068,7 @@ INSERT INTO 名字 (c1,c2,c3,さようなら,j2,j3,행운을빈다,k2,e1) VALUES ('你好嗎?','我幾好,你呢','好耐冇見','左右','左右される','☆右折⇔左折','제 이름은 Charles입니다.','운동을 좋아해요*','row value'), ('救命啊!','火啊! 你好','生日快樂 ','雨季','雨が降りそう つやってみよう','雨雲','저분은 영어를 잘 합니다','저는 서울에서 살고 있습니다.','recording test'); SELECT * FROM 名字 WHERE -MATCH(c1) AGAINST('啊! '); +MATCH(c1) AGAINST('命啊'); seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 SELECT * FROM 名字 WHERE MATCH(さようなら,j3) AGAINST('やっ'); @@ -2099,7 +2100,7 @@ seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 COMMIT; ANALYZE TABLE 名字; SELECT * FROM 名字 WHERE -MATCH(c1) AGAINST('啊! '); +MATCH(c1) AGAINST('命啊'); seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 0 救命啊! 火啊! 你好 生日快樂 雨季 雨が降りそう つやってみよう 雨雲 저분은 영어를 잘 합니다 저는 서울에서 살고 있습니다. recording test SELECT * FROM 名字 WHERE @@ -2146,7 +2147,7 @@ SAVEPOINT B; INSERT INTO 名字 (c1,c2,c3,さようなら,j2,j3,행운을빈다,k2,e1) VALUES ('救命啊!','火啊! 你好','生日快樂 ','雨季','雨が降りそう つやってみよう','雨雲','저분은 영어를 잘 합니다','저는 서울에서 살고 있습니다.','recording test'); SELECT * FROM 名字 WHERE -MATCH(c1) AGAINST('啊! '); +MATCH(c1) AGAINST('命啊'); seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 SELECT * FROM 名字 WHERE MATCH(さようなら,j3) AGAINST('やっ'); @@ -2224,7 +2225,7 @@ ROLLBACK; COMMIT; ANALYZE TABLE 名字; SELECT * FROM 名字 WHERE -MATCH(c1) AGAINST('啊! '); +MATCH(c1) AGAINST('命啊'); seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 SELECT * FROM 名字 WHERE MATCH(さようなら,j3) AGAINST('やっ'); @@ -2342,7 +2343,7 @@ ALTER TABLE 名字 ADD FULLTEXT INDEX con8 (행운을빈다) WITH PARSER ngram; COMMIT; ANALYZE TABLE 名字; SELECT * FROM 名字 WHERE -MATCH(c1) AGAINST('啊! '); +MATCH(c1) AGAINST('命啊'); seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 0 救命啊! 火啊! 你好 生日快樂 雨季 雨が降りそう つやってみよう 雨雲 저분은 영어를 잘 합니다 저는 서울에서 살고 있습니다. recording test SELECT * FROM 名字 WHERE @@ -2414,13 +2415,14 @@ INSERT INTO 名字 (c1,c2,c3,さようなら,j2,j3,행운을빈다,k2,e1) VALUES ('救命啊!','火啊! 你好','生日快樂 ','雨季','雨が降りそう つやってみよう','雨雲','저분은 영어를 잘 합니다','저는 서울에서 살고 있습니다.','recording test'); ANALYZE TABLE 名字; SELECT * FROM 名字 WHERE -MATCH(c1) AGAINST('啊! '); +MATCH(c1) AGAINST('命啊'); seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 0 救命啊! 火啊! 你好 生日快樂 雨季 雨が降りそう つやってみよう 雨雲 저분은 영어를 잘 합니다 저는 서울에서 살고 있습니다. recording test UPDATE 名字 SET c1 = '你好嗎?' WHERE MATCH(c2) AGAINST('啊!'); SELECT * FROM 名字 WHERE -MATCH(c1) AGAINST('啊! '); +MATCH(c1) AGAINST('命啊'); seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 +0 救命啊! 火啊! 你好 生日快樂 雨季 雨が降りそう つやってみよう 雨雲 저분은 영어를 잘 합니다 저는 서울에서 살고 있습니다. recording test DELETE FROM 名字 WHERE MATCH(さようなら,j3) AGAINST("てみ -雨が" IN BOOLEAN MODE); SELECT * FROM 名字 WHERE @@ -2429,12 +2431,12 @@ seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 SELECT * FROM 名字; seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 0 你好嗎? 我幾好,你呢 好耐冇見 左右 左右される ☆右折⇔左折 제 이름은 Charles입니다. 운동을 좋아해요* row value -0 你好嗎? 火啊! 你好 生日快樂 雨季 雨が降りそう つやってみよう 雨雲 저분은 영어를 잘 합니다 저는 서울에서 살고 있습니다. recording test +0 救命啊! 火啊! 你好 生日快樂 雨季 雨が降りそう つやってみよう 雨雲 저분은 영어를 잘 합니다 저는 서울에서 살고 있습니다. recording test SELECT * FROM 名字 WHERE MATCH (행운을빈다) AGAINST('니다'); seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 0 你好嗎? 我幾好,你呢 好耐冇見 左右 左右される ☆右折⇔左折 제 이름은 Charles입니다. 운동을 좋아해요* row value -0 你好嗎? 火啊! 你好 生日快樂 雨季 雨が降りそう つやってみよう 雨雲 저분은 영어를 잘 합니다 저는 서울에서 살고 있습니다. recording test +0 救命啊! 火啊! 你好 生日快樂 雨季 雨が降りそう つやってみよう 雨雲 저분은 영어를 잘 합니다 저는 서울에서 살고 있습니다. recording test DELETE FROM 名字 WHERE MATCH (행운을빈다) AGAINST('니다'); SELECT * FROM 名字; @@ -2527,7 +2529,7 @@ seq title_char title_varchar title_text 3 English arose in the Anglo-Saxon kingdoms its from of England and what is now southeast Scotland Following the extensive influence of Great Britain and the United Kingdom 1 English is a West Germanic language It was first spoken in early medieval England most widely used language in the world SELECT * FROM articles_1 WHERE -MATCH(title_varchar) AGAINST('0,'); +MATCH(title_varchar) AGAINST('50'); seq title_char title_varchar title_text 7 spread across states by United Kingdom ~ England army The Oxford English Dictionary liSts over 250,000 distinct words+ it became the dominant language in the United States, Canada, Australia and New Zealand SELECT * FROM articles_1 WHERE @@ -2896,7 +2898,7 @@ articles CREATE TABLE `articles` ( FULLTEXT KEY `con9` (`e1`) /*!50100 WITH PARSER `ngram` */ ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1 ROW_FORMAT=REDUNDANT SELECT * FROM articles WHERE -MATCH(c1) AGAINST('啊! '); +MATCH(c1) AGAINST('救命'); seq c1 c2 c3 j1 j2 j3 k1 k2 e1 3 救命啊! 火啊! 你好 生日快樂 雨季 雨が降りそう つやってみよう 雨雲 저분은 영어를 잘 합니다 저는 서울에서 살고 있습니다. recording test SELECT * FROM articles WHERE @@ -2970,14 +2972,14 @@ SELECT * FROM articles WHERE MATCH(j3) AGAINST(">の長" IN BOOLEAN MODE); seq c1 c2 c3 j1 j2 j3 k1 k2 e1 SELECT * FROM articles WHERE -MATCH(k2) AGAINST('-Ch +요*'); +MATCH(k2) AGAINST('-Ch +해요'); seq c1 c2 c3 j1 j2 j3 k1 k2 e1 2 你好嗎? 我幾好,你呢 好耐冇見 左右 左右される ☆右折⇔左折 제 이름은 Charles입니다. 운동을 좋아해요* row row1 value SELECT * FROM articles WHERE MATCH(e1) AGAINST("row1 -row" IN BOOLEAN MODE) ; seq c1 c2 c3 j1 j2 j3 k1 k2 e1 SELECT * FROM articles WHERE -MATCH(c1) AGAINST('啊! ' WITH QUERY EXPANSION); +MATCH(c1) AGAINST('命啊' WITH QUERY EXPANSION); seq c1 c2 c3 j1 j2 j3 k1 k2 e1 3 救命啊! 火啊! 你好 生日快樂 雨季 雨が降りそう つやってみよう 雨雲 저분은 영어를 잘 합니다 저는 서울에서 살고 있습니다. recording test SELECT * FROM articles WHERE @@ -3020,7 +3022,7 @@ AND t1.seq = t2.seq ; COUNT(*) 1 SELECT COUNT(*) FROM articles t1,articles t2 -WHERE MATCH(t1.c1) AGAINST("啊! ") +WHERE MATCH(t1.c1) AGAINST("命啊") AND t1.seq != t2.seq AND MATCH(t2.k2) AGAINST("국말" IN BOOLEAN MODE) ; COUNT(*) @@ -3055,7 +3057,7 @@ ALTER TABLE 名字 ADD FULLTEXT INDEX con7 (j3) WITH PARSER ngram; ALTER TABLE 名字 ADD FULLTEXT INDEX con8 (행운을빈다) WITH PARSER ngram; ALTER TABLE 名字 ADD FULLTEXT INDEX con9 (e1) WITH PARSER ngram; SELECT * FROM 名字 WHERE -MATCH(c1) AGAINST('啊! '); +MATCH(c1) AGAINST('命啊'); seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 3 救命啊! 火啊! 你好 生日快樂 雨季 雨が降りそう つやってみよう 雨雲 저분은 영어를 잘 합니다 저는 서울에서 살고 있습니다. recording test SELECT * FROM 名字 WHERE @@ -3288,7 +3290,7 @@ INSERT INTO 名字 (c1,c2,c3,さようなら,j2,j3,행운을빈다,k2,e1) VALUES ('你好嗎?','我幾好,你呢','好耐冇見','左右','左右される','☆右折⇔左折','제 이름은 Charles입니다.','운동을 좋아해요*','row value'), ('救命啊!','火啊! 你好','生日快樂 ','雨季','雨が降りそう つやってみよう','雨雲','저분은 영어를 잘 합니다','저는 서울에서 살고 있습니다.','recording test'); SELECT * FROM 名字 WHERE -MATCH(c1) AGAINST('啊! '); +MATCH(c1) AGAINST('命啊'); seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 SELECT * FROM 名字 WHERE MATCH(さようなら,j3) AGAINST('やっ'); @@ -3320,7 +3322,7 @@ seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 COMMIT; ANALYZE TABLE 名字; SELECT * FROM 名字 WHERE -MATCH(c1) AGAINST('啊! '); +MATCH(c1) AGAINST('命啊'); seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 0 救命啊! 火啊! 你好 生日快樂 雨季 雨が降りそう つやってみよう 雨雲 저분은 영어를 잘 합니다 저는 서울에서 살고 있습니다. recording test SELECT * FROM 名字 WHERE @@ -3367,7 +3369,7 @@ SAVEPOINT B; INSERT INTO 名字 (c1,c2,c3,さようなら,j2,j3,행운을빈다,k2,e1) VALUES ('救命啊!','火啊! 你好','生日快樂 ','雨季','雨が降りそう つやってみよう','雨雲','저분은 영어를 잘 합니다','저는 서울에서 살고 있습니다.','recording test'); SELECT * FROM 名字 WHERE -MATCH(c1) AGAINST('啊! '); +MATCH(c1) AGAINST('命啊'); seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 SELECT * FROM 名字 WHERE MATCH(さようなら,j3) AGAINST('やっ'); @@ -3445,7 +3447,7 @@ ROLLBACK; COMMIT; ANALYZE TABLE 名字; SELECT * FROM 名字 WHERE -MATCH(c1) AGAINST('啊! '); +MATCH(c1) AGAINST('命啊'); seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 SELECT * FROM 名字 WHERE MATCH(さようなら,j3) AGAINST('やっ'); @@ -3563,7 +3565,7 @@ ALTER TABLE 名字 ADD FULLTEXT INDEX con8 (행운을빈다) WITH PARSER ngram; COMMIT; ANALYZE TABLE 名字; SELECT * FROM 名字 WHERE -MATCH(c1) AGAINST('啊! '); +MATCH(c1) AGAINST('命啊'); seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 0 救命啊! 火啊! 你好 生日快樂 雨季 雨が降りそう つやってみよう 雨雲 저분은 영어를 잘 합니다 저는 서울에서 살고 있습니다. recording test SELECT * FROM 名字 WHERE @@ -3635,13 +3637,14 @@ INSERT INTO 名字 (c1,c2,c3,さようなら,j2,j3,행운을빈다,k2,e1) VALUES ('救命啊!','火啊! 你好','生日快樂 ','雨季','雨が降りそう つやってみよう','雨雲','저분은 영어를 잘 합니다','저는 서울에서 살고 있습니다.','recording test'); ANALYZE TABLE 名字; SELECT * FROM 名字 WHERE -MATCH(c1) AGAINST('啊! '); +MATCH(c1) AGAINST('命啊'); seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 0 救命啊! 火啊! 你好 生日快樂 雨季 雨が降りそう つやってみよう 雨雲 저분은 영어를 잘 합니다 저는 서울에서 살고 있습니다. recording test UPDATE 名字 SET c1 = '你好嗎?' WHERE MATCH(c2) AGAINST('啊!'); SELECT * FROM 名字 WHERE -MATCH(c1) AGAINST('啊! '); +MATCH(c1) AGAINST('命啊'); seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 +0 救命啊! 火啊! 你好 生日快樂 雨季 雨が降りそう つやってみよう 雨雲 저분은 영어를 잘 합니다 저는 서울에서 살고 있습니다. recording test DELETE FROM 名字 WHERE MATCH(さようなら,j3) AGAINST("てみ -雨が" IN BOOLEAN MODE); SELECT * FROM 名字 WHERE @@ -3650,12 +3653,12 @@ seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 SELECT * FROM 名字; seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 0 你好嗎? 我幾好,你呢 好耐冇見 左右 左右される ☆右折⇔左折 제 이름은 Charles입니다. 운동을 좋아해요* row value -0 你好嗎? 火啊! 你好 生日快樂 雨季 雨が降りそう つやってみよう 雨雲 저분은 영어를 잘 합니다 저는 서울에서 살고 있습니다. recording test +0 救命啊! 火啊! 你好 生日快樂 雨季 雨が降りそう つやってみよう 雨雲 저분은 영어를 잘 합니다 저는 서울에서 살고 있습니다. recording test SELECT * FROM 名字 WHERE MATCH (행운을빈다) AGAINST('니다'); seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 0 你好嗎? 我幾好,你呢 好耐冇見 左右 左右される ☆右折⇔左折 제 이름은 Charles입니다. 운동을 좋아해요* row value -0 你好嗎? 火啊! 你好 生日快樂 雨季 雨が降りそう つやってみよう 雨雲 저분은 영어를 잘 합니다 저는 서울에서 살고 있습니다. recording test +0 救命啊! 火啊! 你好 生日快樂 雨季 雨が降りそう つやってみよう 雨雲 저분은 영어를 잘 합니다 저는 서울에서 살고 있습니다. recording test DELETE FROM 名字 WHERE MATCH (행운을빈다) AGAINST('니다'); SELECT * FROM 名字; @@ -3748,7 +3751,7 @@ seq title_char title_varchar title_text 3 English arose in the Anglo-Saxon kingdoms its from of England and what is now southeast Scotland Following the extensive influence of Great Britain and the United Kingdom 1 English is a West Germanic language It was first spoken in early medieval England most widely used language in the world SELECT * FROM articles_1 WHERE -MATCH(title_varchar) AGAINST('0,'); +MATCH(title_varchar) AGAINST('50'); seq title_char title_varchar title_text 7 spread across states by United Kingdom ~ England army The Oxford English Dictionary liSts over 250,000 distinct words+ it became the dominant language in the United States, Canada, Australia and New Zealand SELECT * FROM articles_1 WHERE @@ -4117,7 +4120,7 @@ articles CREATE TABLE `articles` ( FULLTEXT KEY `con9` (`e1`) /*!50100 WITH PARSER `ngram` */ ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC SELECT * FROM articles WHERE -MATCH(c1) AGAINST('啊! '); +MATCH(c1) AGAINST('救命'); seq c1 c2 c3 j1 j2 j3 k1 k2 e1 3 救命啊! 火啊! 你好 生日快樂 雨季 雨が降りそう つやってみよう 雨雲 저분은 영어를 잘 합니다 저는 서울에서 살고 있습니다. recording test SELECT * FROM articles WHERE @@ -4191,14 +4194,14 @@ SELECT * FROM articles WHERE MATCH(j3) AGAINST(">の長" IN BOOLEAN MODE); seq c1 c2 c3 j1 j2 j3 k1 k2 e1 SELECT * FROM articles WHERE -MATCH(k2) AGAINST('-Ch +요*'); +MATCH(k2) AGAINST('-Ch +해요'); seq c1 c2 c3 j1 j2 j3 k1 k2 e1 2 你好嗎? 我幾好,你呢 好耐冇見 左右 左右される ☆右折⇔左折 제 이름은 Charles입니다. 운동을 좋아해요* row row1 value SELECT * FROM articles WHERE MATCH(e1) AGAINST("row1 -row" IN BOOLEAN MODE) ; seq c1 c2 c3 j1 j2 j3 k1 k2 e1 SELECT * FROM articles WHERE -MATCH(c1) AGAINST('啊! ' WITH QUERY EXPANSION); +MATCH(c1) AGAINST('命啊' WITH QUERY EXPANSION); seq c1 c2 c3 j1 j2 j3 k1 k2 e1 3 救命啊! 火啊! 你好 生日快樂 雨季 雨が降りそう つやってみよう 雨雲 저분은 영어를 잘 합니다 저는 서울에서 살고 있습니다. recording test SELECT * FROM articles WHERE @@ -4241,7 +4244,7 @@ AND t1.seq = t2.seq ; COUNT(*) 1 SELECT COUNT(*) FROM articles t1,articles t2 -WHERE MATCH(t1.c1) AGAINST("啊! ") +WHERE MATCH(t1.c1) AGAINST("命啊") AND t1.seq != t2.seq AND MATCH(t2.k2) AGAINST("국말" IN BOOLEAN MODE) ; COUNT(*) @@ -4276,7 +4279,7 @@ ALTER TABLE 名字 ADD FULLTEXT INDEX con7 (j3) WITH PARSER ngram; ALTER TABLE 名字 ADD FULLTEXT INDEX con8 (행운을빈다) WITH PARSER ngram; ALTER TABLE 名字 ADD FULLTEXT INDEX con9 (e1) WITH PARSER ngram; SELECT * FROM 名字 WHERE -MATCH(c1) AGAINST('啊! '); +MATCH(c1) AGAINST('命啊'); seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 3 救命啊! 火啊! 你好 生日快樂 雨季 雨が降りそう つやってみよう 雨雲 저분은 영어를 잘 합니다 저는 서울에서 살고 있습니다. recording test SELECT * FROM 名字 WHERE @@ -4509,7 +4512,7 @@ INSERT INTO 名字 (c1,c2,c3,さようなら,j2,j3,행운을빈다,k2,e1) VALUES ('你好嗎?','我幾好,你呢','好耐冇見','左右','左右される','☆右折⇔左折','제 이름은 Charles입니다.','운동을 좋아해요*','row value'), ('救命啊!','火啊! 你好','生日快樂 ','雨季','雨が降りそう つやってみよう','雨雲','저분은 영어를 잘 합니다','저는 서울에서 살고 있습니다.','recording test'); SELECT * FROM 名字 WHERE -MATCH(c1) AGAINST('啊! '); +MATCH(c1) AGAINST('命啊'); seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 SELECT * FROM 名字 WHERE MATCH(さようなら,j3) AGAINST('やっ'); @@ -4541,7 +4544,7 @@ seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 COMMIT; ANALYZE TABLE 名字; SELECT * FROM 名字 WHERE -MATCH(c1) AGAINST('啊! '); +MATCH(c1) AGAINST('命啊'); seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 0 救命啊! 火啊! 你好 生日快樂 雨季 雨が降りそう つやってみよう 雨雲 저분은 영어를 잘 합니다 저는 서울에서 살고 있습니다. recording test SELECT * FROM 名字 WHERE @@ -4588,7 +4591,7 @@ SAVEPOINT B; INSERT INTO 名字 (c1,c2,c3,さようなら,j2,j3,행운을빈다,k2,e1) VALUES ('救命啊!','火啊! 你好','生日快樂 ','雨季','雨が降りそう つやってみよう','雨雲','저분은 영어를 잘 합니다','저는 서울에서 살고 있습니다.','recording test'); SELECT * FROM 名字 WHERE -MATCH(c1) AGAINST('啊! '); +MATCH(c1) AGAINST('命啊'); seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 SELECT * FROM 名字 WHERE MATCH(さようなら,j3) AGAINST('やっ'); @@ -4666,7 +4669,7 @@ ROLLBACK; COMMIT; ANALYZE TABLE 名字; SELECT * FROM 名字 WHERE -MATCH(c1) AGAINST('啊! '); +MATCH(c1) AGAINST('命啊'); seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 SELECT * FROM 名字 WHERE MATCH(さようなら,j3) AGAINST('やっ'); @@ -4784,7 +4787,7 @@ ALTER TABLE 名字 ADD FULLTEXT INDEX con8 (행운을빈다) WITH PARSER ngram; COMMIT; ANALYZE TABLE 名字; SELECT * FROM 名字 WHERE -MATCH(c1) AGAINST('啊! '); +MATCH(c1) AGAINST('命啊'); seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 0 救命啊! 火啊! 你好 生日快樂 雨季 雨が降りそう つやってみよう 雨雲 저분은 영어를 잘 합니다 저는 서울에서 살고 있습니다. recording test SELECT * FROM 名字 WHERE @@ -4856,13 +4859,14 @@ INSERT INTO 名字 (c1,c2,c3,さようなら,j2,j3,행운을빈다,k2,e1) VALUES ('救命啊!','火啊! 你好','生日快樂 ','雨季','雨が降りそう つやってみよう','雨雲','저분은 영어를 잘 합니다','저는 서울에서 살고 있습니다.','recording test'); ANALYZE TABLE 名字; SELECT * FROM 名字 WHERE -MATCH(c1) AGAINST('啊! '); +MATCH(c1) AGAINST('命啊'); seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 0 救命啊! 火啊! 你好 生日快樂 雨季 雨が降りそう つやってみよう 雨雲 저분은 영어를 잘 합니다 저는 서울에서 살고 있습니다. recording test UPDATE 名字 SET c1 = '你好嗎?' WHERE MATCH(c2) AGAINST('啊!'); SELECT * FROM 名字 WHERE -MATCH(c1) AGAINST('啊! '); +MATCH(c1) AGAINST('命啊'); seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 +0 救命啊! 火啊! 你好 生日快樂 雨季 雨が降りそう つやってみよう 雨雲 저분은 영어를 잘 합니다 저는 서울에서 살고 있습니다. recording test DELETE FROM 名字 WHERE MATCH(さようなら,j3) AGAINST("てみ -雨が" IN BOOLEAN MODE); SELECT * FROM 名字 WHERE @@ -4871,12 +4875,12 @@ seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 SELECT * FROM 名字; seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 0 你好嗎? 我幾好,你呢 好耐冇見 左右 左右される ☆右折⇔左折 제 이름은 Charles입니다. 운동을 좋아해요* row value -0 你好嗎? 火啊! 你好 生日快樂 雨季 雨が降りそう つやってみよう 雨雲 저분은 영어를 잘 합니다 저는 서울에서 살고 있습니다. recording test +0 救命啊! 火啊! 你好 生日快樂 雨季 雨が降りそう つやってみよう 雨雲 저분은 영어를 잘 합니다 저는 서울에서 살고 있습니다. recording test SELECT * FROM 名字 WHERE MATCH (행운을빈다) AGAINST('니다'); seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 0 你好嗎? 我幾好,你呢 好耐冇見 左右 左右される ☆右折⇔左折 제 이름은 Charles입니다. 운동을 좋아해요* row value -0 你好嗎? 火啊! 你好 生日快樂 雨季 雨が降りそう つやってみよう 雨雲 저분은 영어를 잘 합니다 저는 서울에서 살고 있습니다. recording test +0 救命啊! 火啊! 你好 生日快樂 雨季 雨が降りそう つやってみよう 雨雲 저분은 영어를 잘 합니다 저는 서울에서 살고 있습니다. recording test DELETE FROM 名字 WHERE MATCH (행운을빈다) AGAINST('니다'); SELECT * FROM 名字; @@ -4969,7 +4973,7 @@ seq title_char title_varchar title_text 3 English arose in the Anglo-Saxon kingdoms its from of England and what is now southeast Scotland Following the extensive influence of Great Britain and the United Kingdom 1 English is a West Germanic language It was first spoken in early medieval England most widely used language in the world SELECT * FROM articles_1 WHERE -MATCH(title_varchar) AGAINST('0,'); +MATCH(title_varchar) AGAINST('50'); seq title_char title_varchar title_text 7 spread across states by United Kingdom ~ England army The Oxford English Dictionary liSts over 250,000 distinct words+ it became the dominant language in the United States, Canada, Australia and New Zealand SELECT * FROM articles_1 WHERE @@ -5338,7 +5342,7 @@ articles CREATE TABLE `articles` ( FULLTEXT KEY `con9` (`e1`) /*!50100 WITH PARSER `ngram` */ ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1 ROW_FORMAT=COMPRESSED SELECT * FROM articles WHERE -MATCH(c1) AGAINST('啊! '); +MATCH(c1) AGAINST('救命'); seq c1 c2 c3 j1 j2 j3 k1 k2 e1 3 救命啊! 火啊! 你好 生日快樂 雨季 雨が降りそう つやってみよう 雨雲 저분은 영어를 잘 합니다 저는 서울에서 살고 있습니다. recording test SELECT * FROM articles WHERE @@ -5412,14 +5416,14 @@ SELECT * FROM articles WHERE MATCH(j3) AGAINST(">の長" IN BOOLEAN MODE); seq c1 c2 c3 j1 j2 j3 k1 k2 e1 SELECT * FROM articles WHERE -MATCH(k2) AGAINST('-Ch +요*'); +MATCH(k2) AGAINST('-Ch +해요'); seq c1 c2 c3 j1 j2 j3 k1 k2 e1 2 你好嗎? 我幾好,你呢 好耐冇見 左右 左右される ☆右折⇔左折 제 이름은 Charles입니다. 운동을 좋아해요* row row1 value SELECT * FROM articles WHERE MATCH(e1) AGAINST("row1 -row" IN BOOLEAN MODE) ; seq c1 c2 c3 j1 j2 j3 k1 k2 e1 SELECT * FROM articles WHERE -MATCH(c1) AGAINST('啊! ' WITH QUERY EXPANSION); +MATCH(c1) AGAINST('命啊' WITH QUERY EXPANSION); seq c1 c2 c3 j1 j2 j3 k1 k2 e1 3 救命啊! 火啊! 你好 生日快樂 雨季 雨が降りそう つやってみよう 雨雲 저분은 영어를 잘 합니다 저는 서울에서 살고 있습니다. recording test SELECT * FROM articles WHERE @@ -5462,7 +5466,7 @@ AND t1.seq = t2.seq ; COUNT(*) 1 SELECT COUNT(*) FROM articles t1,articles t2 -WHERE MATCH(t1.c1) AGAINST("啊! ") +WHERE MATCH(t1.c1) AGAINST("命啊") AND t1.seq != t2.seq AND MATCH(t2.k2) AGAINST("국말" IN BOOLEAN MODE) ; COUNT(*) @@ -5497,7 +5501,7 @@ ALTER TABLE 名字 ADD FULLTEXT INDEX con7 (j3) WITH PARSER ngram; ALTER TABLE 名字 ADD FULLTEXT INDEX con8 (행운을빈다) WITH PARSER ngram; ALTER TABLE 名字 ADD FULLTEXT INDEX con9 (e1) WITH PARSER ngram; SELECT * FROM 名字 WHERE -MATCH(c1) AGAINST('啊! '); +MATCH(c1) AGAINST('命啊'); seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 3 救命啊! 火啊! 你好 生日快樂 雨季 雨が降りそう つやってみよう 雨雲 저분은 영어를 잘 합니다 저는 서울에서 살고 있습니다. recording test SELECT * FROM 名字 WHERE @@ -5730,7 +5734,7 @@ INSERT INTO 名字 (c1,c2,c3,さようなら,j2,j3,행운을빈다,k2,e1) VALUES ('你好嗎?','我幾好,你呢','好耐冇見','左右','左右される','☆右折⇔左折','제 이름은 Charles입니다.','운동을 좋아해요*','row value'), ('救命啊!','火啊! 你好','生日快樂 ','雨季','雨が降りそう つやってみよう','雨雲','저분은 영어를 잘 합니다','저는 서울에서 살고 있습니다.','recording test'); SELECT * FROM 名字 WHERE -MATCH(c1) AGAINST('啊! '); +MATCH(c1) AGAINST('命啊'); seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 SELECT * FROM 名字 WHERE MATCH(さようなら,j3) AGAINST('やっ'); @@ -5762,7 +5766,7 @@ seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 COMMIT; ANALYZE TABLE 名字; SELECT * FROM 名字 WHERE -MATCH(c1) AGAINST('啊! '); +MATCH(c1) AGAINST('命啊'); seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 0 救命啊! 火啊! 你好 生日快樂 雨季 雨が降りそう つやってみよう 雨雲 저분은 영어를 잘 합니다 저는 서울에서 살고 있습니다. recording test SELECT * FROM 名字 WHERE @@ -5809,7 +5813,7 @@ SAVEPOINT B; INSERT INTO 名字 (c1,c2,c3,さようなら,j2,j3,행운을빈다,k2,e1) VALUES ('救命啊!','火啊! 你好','生日快樂 ','雨季','雨が降りそう つやってみよう','雨雲','저분은 영어를 잘 합니다','저는 서울에서 살고 있습니다.','recording test'); SELECT * FROM 名字 WHERE -MATCH(c1) AGAINST('啊! '); +MATCH(c1) AGAINST('命啊'); seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 SELECT * FROM 名字 WHERE MATCH(さようなら,j3) AGAINST('やっ'); @@ -5887,7 +5891,7 @@ ROLLBACK; COMMIT; ANALYZE TABLE 名字; SELECT * FROM 名字 WHERE -MATCH(c1) AGAINST('啊! '); +MATCH(c1) AGAINST('命啊'); seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 SELECT * FROM 名字 WHERE MATCH(さようなら,j3) AGAINST('やっ'); @@ -6005,7 +6009,7 @@ ALTER TABLE 名字 ADD FULLTEXT INDEX con8 (행운을빈다) WITH PARSER ngram; COMMIT; ANALYZE TABLE 名字; SELECT * FROM 名字 WHERE -MATCH(c1) AGAINST('啊! '); +MATCH(c1) AGAINST('命啊'); seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 0 救命啊! 火啊! 你好 生日快樂 雨季 雨が降りそう つやってみよう 雨雲 저분은 영어를 잘 합니다 저는 서울에서 살고 있습니다. recording test SELECT * FROM 名字 WHERE @@ -6077,13 +6081,14 @@ INSERT INTO 名字 (c1,c2,c3,さようなら,j2,j3,행운을빈다,k2,e1) VALUES ('救命啊!','火啊! 你好','生日快樂 ','雨季','雨が降りそう つやってみよう','雨雲','저분은 영어를 잘 합니다','저는 서울에서 살고 있습니다.','recording test'); ANALYZE TABLE 名字; SELECT * FROM 名字 WHERE -MATCH(c1) AGAINST('啊! '); +MATCH(c1) AGAINST('命啊'); seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 0 救命啊! 火啊! 你好 生日快樂 雨季 雨が降りそう つやってみよう 雨雲 저분은 영어를 잘 합니다 저는 서울에서 살고 있습니다. recording test UPDATE 名字 SET c1 = '你好嗎?' WHERE MATCH(c2) AGAINST('啊!'); SELECT * FROM 名字 WHERE -MATCH(c1) AGAINST('啊! '); +MATCH(c1) AGAINST('命啊'); seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 +0 救命啊! 火啊! 你好 生日快樂 雨季 雨が降りそう つやってみよう 雨雲 저분은 영어를 잘 합니다 저는 서울에서 살고 있습니다. recording test DELETE FROM 名字 WHERE MATCH(さようなら,j3) AGAINST("てみ -雨が" IN BOOLEAN MODE); SELECT * FROM 名字 WHERE @@ -6092,15 +6097,36 @@ seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 SELECT * FROM 名字; seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 0 你好嗎? 我幾好,你呢 好耐冇見 左右 左右される ☆右折⇔左折 제 이름은 Charles입니다. 운동을 좋아해요* row value -0 你好嗎? 火啊! 你好 生日快樂 雨季 雨が降りそう つやってみよう 雨雲 저분은 영어를 잘 합니다 저는 서울에서 살고 있습니다. recording test +0 救命啊! 火啊! 你好 生日快樂 雨季 雨が降りそう つやってみよう 雨雲 저분은 영어를 잘 합니다 저는 서울에서 살고 있습니다. recording test SELECT * FROM 名字 WHERE MATCH (행운을빈다) AGAINST('니다'); seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 0 你好嗎? 我幾好,你呢 好耐冇見 左右 左右される ☆右折⇔左折 제 이름은 Charles입니다. 운동을 좋아해요* row value -0 你好嗎? 火啊! 你好 生日快樂 雨季 雨が降りそう つやってみよう 雨雲 저분은 영어를 잘 합니다 저는 서울에서 살고 있습니다. recording test +0 救命啊! 火啊! 你好 生日快樂 雨季 雨が降りそう つやってみよう 雨雲 저분은 영어를 잘 합니다 저는 서울에서 살고 있습니다. recording test DELETE FROM 名字 WHERE MATCH (행운을빈다) AGAINST('니다'); SELECT * FROM 名字; seq c1 c2 c3 さようなら j2 j3 행운을빈다 k2 e1 DROP TABLE 名字; SET GLOBAL innodb_file_per_table = 1; +SET GLOBAL innodb_ft_enable_stopword=OFF; +SET innodb_ft_enable_stopword=OFF; +CREATE TABLE ft_test3( +id INT NOT NULL, +contents TEXT, +PRIMARY KEY(id), +FULLTEXT INDEX fx_contents(contents) WITH PARSER NGRAM +) ENGINE=INNODB; +SET GLOBAL innodb_ft_aux_table='test/ft_test3'; +INSERT INTO ft_test3 VALUES (1, 'xy,yz'); +SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_CACHE ORDER BY position; +WORD FIRST_DOC_ID LAST_DOC_ID DOC_COUNT DOC_ID POSITION +xy 2 2 1 2 0 +yz 2 2 1 2 3 +SELECT * FROM ft_test3 WHERE MATCH(contents) AGAINST('y,' IN BOOLEAN MODE); +id contents +SELECT * FROM ft_test3 WHERE MATCH(contents) AGAINST('y,' IN NATURAl LANGUAGE MODE); +id contents +SET GLOBAL innodb_ft_enable_stopword = ON; +SET GLOBAL innodb_ft_aux_table = @old_innodb_ft_aux_table; +DROP TABLE ft_test3; diff --git a/mysql-test/suite/innodb_fts/t/ngram_1.test b/mysql-test/suite/innodb_fts/t/ngram_1.test index a08a8bf6e0bb..eeae4b2128ac 100644 --- a/mysql-test/suite/innodb_fts/t/ngram_1.test +++ b/mysql-test/suite/innodb_fts/t/ngram_1.test @@ -36,3 +36,29 @@ LET $table_row_format = ROW_FORMAT=COMPRESSED ; --source suite/innodb_fts/include/ngram.inc EVAL SET GLOBAL innodb_file_per_table = $per_table; + +# +## Bug #25873310 FULLTEXT SEARCH CAN NOT FIND WORD WHICH CONTAINS "," OR "." +# + +SET GLOBAL innodb_ft_enable_stopword=OFF; +SET innodb_ft_enable_stopword=OFF; + +let @old_innodb_ft_aux_table = `select @@innodb_ft_aux_table`; +CREATE TABLE ft_test3( + id INT NOT NULL, + contents TEXT, + PRIMARY KEY(id), + FULLTEXT INDEX fx_contents(contents) WITH PARSER NGRAM + ) ENGINE=INNODB; + +SET GLOBAL innodb_ft_aux_table='test/ft_test3'; +INSERT INTO ft_test3 VALUES (1, 'xy,yz'); + +SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_CACHE ORDER BY position; +SELECT * FROM ft_test3 WHERE MATCH(contents) AGAINST('y,' IN BOOLEAN MODE); +SELECT * FROM ft_test3 WHERE MATCH(contents) AGAINST('y,' IN NATURAl LANGUAGE MODE); + +SET GLOBAL innodb_ft_enable_stopword = ON; +SET GLOBAL innodb_ft_aux_table = @old_innodb_ft_aux_table; +DROP TABLE ft_test3; diff --git a/plugin/fulltext/ngram_parser/plugin_ngram.cc b/plugin/fulltext/ngram_parser/plugin_ngram.cc index 27fd46c46d8a..9ace58306845 100644 --- a/plugin/fulltext/ngram_parser/plugin_ngram.cc +++ b/plugin/fulltext/ngram_parser/plugin_ngram.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved. 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 @@ -61,8 +61,12 @@ ngram_parse( if (next + char_len > end || char_len == 0) { break; } else { - /* Skip SPACE */ - if (char_len == 1 && *next == ' ') { + /* Skip SPACE or ","/"." etc as they are not words*/ + int ctype; + cs->cset->ctype( + cs, &ctype, (uchar*) next, (uchar*) end); + if (char_len == 1 && (*next == ' ' + || !true_word_char(ctype, *next))) { start = next + 1; next = start; n_chars = 0; From 6902e31830b1c563f8f10ac154cb22f97c9a408c Mon Sep 17 00:00:00 2001 From: Piotr Obrzut Date: Mon, 9 Apr 2018 12:06:17 +0200 Subject: [PATCH 0746/1221] Bug #27343712 WINDOWS INSTALLERS USE THE OLD MYSQL LOGO WITH STRAIGHT FONT Server MSI logos update. --- packaging/WiX/AdminBackground.jpg | Bin 20557 -> 18551 bytes packaging/WiX/AdminHeader.jpg | Bin 3469 -> 4972 bytes packaging/WiX/MySQLServer.ico | Bin 22486 -> 44189 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/packaging/WiX/AdminBackground.jpg b/packaging/WiX/AdminBackground.jpg index 847dc6cdbede91dbbd4049492de464d095585e08..88db516565660955aaec177048e43783df1e5aa9 100644 GIT binary patch literal 18551 zcmd73WmufcvM4-g5;S;lhd^*=umqO@f;$8mU~mTa7;a&(;6Voo5ZocSL-63i-5o;s zChP3All$DY*ZR&q_s8uA-l?wYuC6ZW?&^2u?(5wW;E{|c#1a5dP+$ez2mC5`y8t|C zH*;Gr01^Ndfz}5A?v_y4tzBK6fSjBTE*z#7j%HvEb4PnlPg5sOZVoO^fT)D0lc~8a z*pQ#Qox$D-F|srm3ULQp$U+_MY5tfr5b~d85&Dn({?*swKg%Ng zANz75gyH;Y+TTq5Cko*|Kf!-HE~4^p*9SWw{2hvL?7Mvc&L8dyu=tD!Af&rlz*_*) zzY8(~LPkbB5s&{WD99*?f_R|*EGTGylzTtR{ePFA-4U(PP*BkBp`oJvM)`M>zX$F< z1Mu!62_c=JAmIU!@sLpPknTDFn8{Y=eyq};{yRZM2qD1nA1Bk?_w!?IR7o@~M;$s_gG^t=pEJ|eTb z82}cdCo&!i9zX(6R{L++e*q6XeAua(4gzldQ?EqcqgKBBMfwNG4A}9V9yd3Lc?r3@ zH>J=yfxf&>eT|)6Dr81k1-L!Tst)5|va}SR_HAYoU{I4**3uG?mctr25+{x5qQaq= zGVJ6VBOVw=m3D4wi_YQu%2q>n2PkS>lWAl0oyseI%;e0bz}dqis@f*sj{6|$-Fyb@ z5us_Pcc2FU@VQ3k9U$J&Z%24-$fx(Df~tN!QamJ#{$@Lh%Eq(d$9;E;Y47JShVPxu za}s^56&mys0Z-madZ_ke&xYIqrfP28u6o!_cm<=Z?f_=Pr)ujh{+3&EyBK!>Bdq{d z-qU{f+ms7#(RK0M1L{hzNB)o#K}CrdI@jApSI@7(4gP~S@6(;nI6ZH(d)iM_lj_xO zkXxp-O!|Vy*k{ij=Q>WJ3w*lwsAQ>=eFsOQzY_hZFZ`h?p5(At;lIwD>Zi0IVSUW? zeQez!&i`}i*@Vt<=AT2ZY#Sfl$i)P&XYjgapQ8no6t=|U<{8xNF4l!^P^(`=&xl4y z@Li?kQh$1K>!$TR-;Za$#qxGQRp>gg(SKys^a?&O|M>Qm$xdPEn$%Xp-i_eCnOFCC z)5>`?J?^0RZ_}g()i_SKxDX8e&u6&|hu8;eN`}1>2dAm={NPAT*W6^4a7rBdPHVoz z=yZU0Yqi=Olav(@$^T-i({2IY;;?Yrv?b3MkXm1DT>C>>BT|m4zslp|^g`LvSs}mW zbWw|BY3GSzID?YCHLn2=sSaxW=%wYerGrG%Z|2Dt(e5YS+BQzSgwvW%P!P1^sQXf7 zO5S1rXpJ9KX}-2TV-=jh3^NZ4=n@e6uG+@Oe)iK-I~x5G9AgDrezd6grVa2MvDl#e zgPZ>%W623c=w5hsuyKlc$ZhRb-*$S-+ogI3!mt5xx-iDxX9ZJA`|qY>NSe(*G|O7^ zDSOs!FHdJ5kIW@4rF(|cx3HpY1T`6|1;euJ!tMb4Mqi`uuP0Ued^u$l%`H&UKPk4f z%q3m6wCWf*qD14@-?+@8JsCKl4cDu85$R#)NF6%HRD$z1z8>8gIH0NgYviu`>b4Qa zT1}yjR>evBD}0b1zmL&0{tF_-2SV}1u$V`^U7_P<3eFTt6iQUBM_plsS!PM)p75Yv zKc|v0LuEBPsFT415q&X%YY)eM2m5X9VZ)5xDKn4GuDO>f4-X+0kHzF zI1X2(SuA5VkFQ3q^Tn{v=t+9CAlUUp+JK^RK-%*vVIO@9qMx8M3NFqn@k(Kanb{w? zWHb8fB{C&1Ou45UbK%6geLZ8TOo>XiR9qc|_ZaHH6ge>H^l{NhP&gPr8wnduJo>7+ ztR^s~Dc#LiC_1G5kxe11I9@|Q)oc7JZB_idS4Zh3$j3y}w2pn|`Rz$LE#LSQKHv>x`}taF>d`^H$fKRfU5bSx8)L00Q{Tv!o7xkV z7goTQmickW?De!_#gpRM^MsU2n7;_CAWi2+eScJW-{j62YR=WVwIsoNSZ)Es6Qk`3 zm#_7Kq!d-gQ8wY0z7lVp*|2BFpq_eUCrM$B9m+9OIO+V#`feN{DJxMa%I-GR(FGF} zq}e^{vsK}#ErgBpmj{a34Pg*01lO_i}74)m+Fby)#h5rEXC1fG1#ESK?ySXwRZ1n z@@8nI&(c*GkMLttEy1Qj`lBNPJJC-5A4#F>aZ&`xg%X+|Ar42+>jmHa*1-eJ&ac8v zOP&q)1RFU?UaVgPF7Gm$<~Fc>5znI(sa|2*ryxI9o0E!5YN+wh1L%(nSjrfJ+>;;1*=%6*~Av(#rzYHt8)Pqy4= z!~-|ZaZC8RlqyvXmOxZSPV-`N$<*Xebn%?Lmuu4*ShMx>3s4g+L2e9s2_Lx>l{zJz z6y;&klJ%2kjlMrbmzReY9xsQizCDo}IfUwR2M3c2ZA4imJRjIL&%N%X_9V|A7kQ&# zt399E`6aM$)$m>-=!7-Fk_8rJ@W237BZgE-E;`DtN0d00ZqsORc;+ zHS#*dC+#`|%V!+E`yjS5)3Zzv$e%W&QME%zZ%+9+{>izXztZBp9LR8N-Ag6SfAITX zWORBq)i$ncT{HiOY(4^Mb&0BlYteUrERP%EnDIr%jXAgTvGL6Q0O9OKS9k8I;vtt7 zce=60qLNaA(H3`ai1i)7vw>r-o;;>{Z+Hb?M&{x{wRQXzC<}vuz5Tle6h8>&=w7*E zFC3<>r1sQfN~Wu$A*KHgFc`QJMNPs?0cx|a2UZi2l-J$?j?6sa*T+Z7uRvTU2*D^>R^!EHiZ0JhKWDPxSddF#e$CwVqSowlqEbd~?L68S?Ff=KwU^#Tw zO5m%GU-2H&{1jQ=o7&=%8U0}MAs%JzG$p8}IYS1DNy?N;e*agzjF4Hbb@8tFS-9+o3VG?M-$%DLs_Jx8Qn^C?r{S@fQ=8>?F zs3GOG_M>^GFK!1`iSU6vn~Et#8=KUt3eQgU+~+&&0=|a9Y%rKw3@KTP9%F}@-j`H) zy<~wyaK)v^VPQ>z&`P@amr^%-Ty9uLLpU*1mGDG$Mzd+?_G{$edfpb|GjRF8p4*uM z7xlLRGo9T$>tE6oQp^Sm87sB7_G0n3CQ$jT-sMWB&W_CUt!vA$kj93t@pRZ!8IeCp z%i8DX)|9))<^r;}JDoS+jV(MU(ok-Gun~neU+pm|;#SkO;~Mm)~*`N72E^&eC}-KXC~P;b-Sk4sa?L@*>+n4{KtODYFY-35TRVk_;{w1~n9cFO;qW;RA~G z0`snY{W8Txyradvs`-P2+pj}vb8hIHeTj`(Kk0eSmU(Wu%7vzewoyd8wzxpIh=9nQK{l~OgKxL3dnxKk zK-VzVM_=JICD}sO+0ZwwqV55K&G&T$RZC@eMHVI+)2jl6(`&Ys#nKhsV#`k}Ru5RZdLBHf{6umzi(V0CVd3{$Ih1e;)Tw5tC?P$_Yo{FhfOvPOuq0)l z0f)O2#`tXE$s43n}0W)ZJ#li!{qbiqG<_=Ip zULvccebpD=n=5+$!~qR7P4|p#>=HgI9V}mquN9`KRG+dGoUZ{b?GLBm?w^l}VtV7{ zq1_m%Q}F$(MyqIA@79VwJY#`LFh&F}f!MND0z8d5Qhyva8YwX6wCHH>n$=Xd))(c( zS}>#p=K`Ca`vg7;N99*86y3T59Nyr!Z%ceWlpKzKRi)`zvgWPiLhAW_aUSG+VcyVB z;rm^{Vbd`ny8?wOfRjk0b1r>@;mF0w*r1^K+bMd_G)LXoK}uV+ZcM>>lX?tXpx=eA zFJ7x?+>GTtt_--UKuOwad@c|u6OS74btQ;PY-G$uC^?Wo8e~++WCf!STJZdubRe6V zm`!h}#VuIyK4dNF+o973ZB_H9%}P`=M5;YeFQ>LIjIGK#w)*+99Uu>K*sev!FJEIIG_;xsRtW*7vopo#}cvmNyUbRXs%lO7;w(z_QGVJW3^EH?`v`c)g+3^EK);ja-{m$&6^nLO?Qb~ZBAC22k#tH$-^JqoqL{{KB-7Yq zW%izF=8f1^bOEs%yct3ugrf-|A(@L*Ga;Qm#Oan&I>tKv(g15 zhxB@-TKfaT=Ajb_!_VLgUj9FwgTPd#$0~XT;T-CFPsr-R+t5ONeb|^IpZGoscs!QD z41M#!?&UA*{{z&a5sD=?WA;@4U^1nStuM>@N2Ajn;C&^~WDRvXTW4liJ(2JGLbzL) z$m5;yd6&*aFa3F8!~#6mR?rUzg+7P(L9s4zs!vHj*5=KF*W;8Vzf`_}sB21FSa`-n zXjyc|ejeoJ7HE_A3D2-Pqu6@!82wD$it$-*I_qaFsIU2;7$FMzJLf&drX*hne1B|Dss z@Ymz5Va(34bc6=2PclMoc(R&nN6pzeT(LIe<5UW_5J{Ker9X`1JIChyH!;u@bnfy^p z^}E*XSUdGrTG?Eg-3yQ{nZ=mS_e#H`RhMeGT0 zR2$20iz%(Wo}e2B`5#F_ot70R^Pz6IYS7D)+Qi=aInRSjr4$3Y_Bo-gL+6*)+@z5P)Kmc#$KCUno@0JC z1)s;boXl@p_-^k2(V;KIJu?<0|76{cFc(R{W@bZ>z(}JFc7=;3264(hb~U>}<`hZ% z`zmG&{4D~a&=^mcR*!m|Cu2=Q_U^;mvr)v=UTjkIgzVS#mFRnOar;rZ-+kw#eheQOo0srLl?v<6B$-s?Jw^iexlHzz8{}jBeCF-27sIrmI zYwbHJwnLpxg9~N6pPpT%&_$F$KV}u*_&#KV z7yl5AzsTHpX8w4=qwNHTugpJ<81>qYD^c$R-T|bZZVtzt`DFcJvf=fPf0<19cDb{$ z#O~+W=+g!wr|ozN+-8_i+*;CobLyU(^C?C~4G%gTH^;1%h9MmAbU|HK(^~WahupL~QFhP}8PMcoU4?OYa9hQZSX7@zp z(w-B?A{GZKEk*@3yqK5-bXi6`L;6@HrHloHauK^an_mrkSE^L8kUek&mg3ADub{4q z&%?7UD@zhifLEU>IQb;|mhK=(q1YkVF|x5H6jdpOX}yLP#w5qX`RLXKN#2WvjbK<` zVlXTbz2%2&G2fx7&V}l|*S<<3#2G*Gk{oduseN6$BXQb&dk%R&_g4m1dFjskyWF%L znGPc^27(di3u58>!z;@5m{c>Gi%e2R#S{Cx-Cz@K19qGY&$SzU;Fqlk(qqz<^U%v+ z>IUSllAo7`pT*(_{M4GM6~;;#p%IOW1|L5EGUVSwC=V|IIEtzJO3)9wOFz!l?f`sG zHyz{M^l~Ow>f#eFM|_v!Mj1Pj2rgPS9qMy- z@0P#?F(u7N#OJAnlH0UTi!R!d$j;_9jMh7z>dm@WurA7&$(Y$AXBxoCpbg?;i(ZtH zP?$xI*)`;eGaG3-Y7RX(jj?Q8@=>+xC$rSiii4sjhoMHNmRrLT_f0rbPYwf*w|B&tfl-_< zlBacIyt`8jzeK8;zV}X)ejV4uK@pNyC0Wo3>8y^gZLO^ois($rEviy@c7Nz(GhnDS zyx|G_&C%O89#t7j%X_y(PNyaC0zVNT#Er0IE;;hk?Yz3{g)S$A#|Cy9l(oc!6ePiWkZyiyJkDP=?sWzPi6};K`2_$SrG*W0NIdaO>W2neyF_fIh9z=5q;M z!Sat(u1}Nu0`zrzFhkHt)y!vTl5_zuueeDX&aQOUb{P6Rh^^VlbpG(rVKW)!`wav@-)a5nD0+(V>R2t)ZkPSZk zy@UQn<;Gs;4maLUieTrcG8ajBBigbY_9HCji^P+{3oWCMXAqZzK{CG`RWPMZYJftI|&%^f?xYI}n0Wmoo=N|vlNw!tXr0n~Jot|pDWem2a0 zwTd>&4Wc+cGit5>E+>hKF?aIRS9A}LKtPLvpl5cAtk_F&-HbiY(>z}D76h#N;!%)O zZ&Kq&IzsnlkYKDX#zrZtVAE?M1{tODD>uDt9#21BW+&u=CzI)87eo~AUC7xC`u>mx z@kjmbCc|5J3+H0-&PY;w1dycxGHN6uC7x#!AVV(~ z;Wt(=Z{p$!cA-XB$LAbrJS_!*iuJ{$tdZ(q9LCN4oKckuI^Myg%*|smeIwIV(%i1` z_?$sjdVIEKn^b+eLQlrb?*55j!!aE!;60IAztUzM6%Qwb=kI@OHnQPopQN;3*UmEr zOXsC2Bx}Yq9MRKrFj)8nA$Hc(=>y$)*)ej+9$w$MtH_@aYWeBFGTh97zT>W8N9 z>fhKzAmxa3l=hN8xoI(aT4y4mTL!-Hh!SxoviqubOnNi^T`JbzEq=1Z98;;_jn5P2 zNOE8Cc(}3RDyi3dCC^8{x$fVCW+dqLfT|j1o{_u+iAlLzQo5TfuvW5>QO+6Uc>r(r zLfpCYWI@MCL&y0wis{e+=31~wBWD7|{$aDOOGDe$AE;=##Qb9pOabg{Pg!X5Udb@C zY6-6o+YHFXbzYN*1!4lkh_q2B<)w$T^H=A<(xh4*W$kGr?)0eAJ!YKQ^Lm%R-9SZG z(iX(07RhluJWbey=a+oT4E#j-$Ylg&8Yua{6nl;9CnQbRzpmqEsp`{{lupuuTFeEb zX5=$Yz86+hsGb>wb31)`t@5O!%6rI%1cg)Ry)yy#g#b`R1CyNUafw~1LWb*%;K*>! zEl+=*jr+hprA4jdBa&qC)sJ$i-$)*cHp?019P z-fsuSLJ2!Onm4O>hSn;-N62h56{Oz*7R#OyE;Nz{jG)v}&ftP(IpvBxC`@?r=P^^z zxs}7>t)w()zd*Rgj~^I9Q%iB11tuIy1lZG4$ZSGxoQJLGZ-m+K|l$avab}d&M8tvT1(qb_Tw2Mcfm&yqZy)462|G zu{zK=!qIlqDt^umqMz2iBKep1pyPl0dw=-~wTf}!xcIjJ(n$|`{!mFg^g?LeBI(VQg2>1kP(Kp=+TfxO*8 zabDO?Nn-bml~z9!)rV;peM<^#yI55tnZ(|l<7sFW8IR_TdP;XkzBJqAw_HY6Mxc|C zocj@1nHYz*UAjtCD5#w5_EDTS+kgQ@lNi?_r;y3;OEr=8%MSyP4&Bg9SK+&)AUU%uc z@9-ruNn*d(1^8!dt7Y(*%`5(48XU)YUpg0?2d?Y4Q*FeFDu^mA-M&|qG(Ldbv{=s$?j-Xlcp&tl%0yXwSyF1#T1W6>My!3hsmuxCtr14 zp44cFQK}{&!m)WqEm>7qq%i5nUO|wpbGCh2Wh)*gr4(MBInkeR@NsVg6fqshucTLq znP(HR>?D~m8XG&LgiC_Mp(U6l#2lUMQ`X;gh6p-*M-5`oVK<3Sb|@&W+gGuM>Z@bo z6dks4z~+j(+wJH@_ShZ3=U!#@L9oS(Vc75je3_zS>qfu!J#ilCZlP~zGqvJa3q2I& zf%D71)%owl4$4r^XDL`pZD>(A=ECtjOpFl&lwtlP25i_8nt|}+SKaX z{R9(Lth~^2$C4JFAkNRGrrE+C@J5$J!e$x{1qLF%Pb%vJ2VraQ= z?M7=wbNs$+ytdWzyaov-s_Bj8Xq<(UDmZEmOsFr515> zw-#gSklxmQ{#^xs3!B~VFzYVrqBZrZdDq5}O;@G}^Q>NSQr9#Jk`;fiTV*;yq#*!u zQrZZY5sDk+mnjqF`nE2$PFiS-p^?$AODDSM8;#q@o<_gUL8;j(oS(9|9wqL%dC014 zzBa_judJt^b#P@Bp6u<*vm$1Md*$6j0Y1Y>%KDODEg}d-OYOQIEde>8Lq5ZJi z9PR@CK`{R|Z!qDdd754leElpS1xWp9%ebbu=)%GWS^5*|N=1Oj4sIEoC@1ZV%Umcj^ zMm*9TnE1UAmtevatN}Bj9Yw8FV$Dobw8s}>;W{@Jk6bUUIxD(%@m5$cH4Z+e!OGjY zi61Bic*8F4YbIA0N2hhAg7m6=)hJ@-4C+hi0CvmdovQ>{z673&fUE42!^1a z3;~Jqf6?TxQCJdnA!buWd5FE^|JHv&gbxcm@}94865L;Q_2(Y+;l*DM{=Z|9g6IBs zBmlKrEUxsOVE0zC$EpJt{_bBi`D@hQu*<$#IUN)^CVBM0{jdA}6}EjNwKXls1;sS= z^H(b_0n!2N|8|8*VmBvU;QTWBwnkMnunUWE=C20&OB@QW=Px{Vhdd147m1E##Wa|_ zOcsot!_sZ!)`|b{EiI~L?&E=wkZ=MnBBR0^jD>`t8LVye;yv&4PalKHluG9{_O4&k zbV&9@io0)Q@M*bgk!DWiv0+;0mx+HBKELGn9l{d(_NyxP z#?ia{$LpP;@Eu>9CxZ0X&)lAKSnh2MgeG-M6>_VuvdG4R*P+mLx=x{GLwU4ALHdTs z#oZRYEs@R{|25lsctzw|f5E(dfNY&bPwiutSSJ1SkNQ=GV40~HGJCNp&9=yR+D`ts zFY62+Gnc1u_Uff~s{D;6iv5H+=J84vqGA*6m-0v!xMotVqE8K~OUUya=}Q1v7;wddUsT#rrJ&04egHzi-Sdf^cmOB|I8_%d9iWLzZN=gj@Tq5R=#KQ@u-rT=z68vdk zWTVf&bn*`n*ZI2YThdPh8TW}vW0#QId3&Ps9x*{ zm!4TsUAQn|Sw~!xM}%3D=J{NWKVE|8jaD$S5m2>=Lj99zT@P$AjUnWO{Bb)jId=-B zlv~0u5jYzmg^mOGiC=!=v$+LuK8F5%4EMSs*Nz55o zAb^v27Wt*&z(pSy+&bovbELlILi8x8%7@w$X&puoZ~9SEPbcP=&1*H z0Hm!RR-Tzom9s4$uuA&kJ8 zyfrrhYwtTiUc=kbD>&80Sl=6{Av`5a+B;V);8luhY+_X?h{c|Bo=&v4Ra*9$lS)N{ z*C)OklU@5kYcXN&>cwUQC{yNE!Kb%bY{1m>S@$wkMYS*k1Bd3hKt4nAjaUn5`OmM1 zJ_7(us=HZ!6pPew$i}_bgJKDoe1*DJUii9;DraqyJS+E=5$Iu71O@Q zcL0$WR_m5avAE^?9cV6J{lw0q^BpzVcOgV%pXLj+D>%|rOSjRc#4z2e8RhCMWh1Fs z3WQS=h1X}7v-%c1MD3D5Y-c7PChhh2Y`)fRMXNcGLk-^(ZHvAohteqr9cMT9=j#v_ zSA7`G5^txWkbi(`mmus$uvJw`DQ<(on)mIzunw4AkudI+rwU&;Dai+spr{GeOvF6; z=Aa-M-D&kwZg1T<>ZELyFOS+3@oI^kDLxY-nir4%iHC>hbI)hUOF)uDdFZK&uYVdm zU2++T^Wop?PVJoyMq&M3_HD1x9d(gt8;BzBmc-U8Bf{4 zQuAd+rFz9yox;9@1ru>0CM)+6Giw|eYK?xpO4Ky&VehI@$GX<*=s9DeVmZ?SDc5P` zWsN(1{7pNB(VsgvvqF(u;JYtCEojT#1-dsQ){-w!yr($TRJBdM&!1}$SsiJctvPRB z?)Th^Ybj;CFIzdC^BGKf*-137GA195;{TQ%008K?;+pzGYH}on_nfm0mfl_nEJpIA1Y1cin|e_Tm_JdQv?Eh)Ehy${CQjXYrKN#gbL3W?S~QYUI) zry9Lrvv?{Os73D2AIi*ZPX_NKx{x}36B zOL#V};e0E%i@v{??hvbDABj}%poeGUa=I|}shEr%qxLxiY*{r>4KC%@i(Os$B9SaM z)LHUSv=_9o{(SXo`|Z_29#X_tRF&>PU4&5gTC^?^4KpvzN`Pvc|FQ8R~j7^G-IM zizc5chZSdXrE({%@2NUyUhgS8G}~Jh$RKC#V=9*(|MwC^JKmQ=4jIC-Q7J5~aOf(%rlAFekqnb?1 zIox(EXXoCHdq>Va|2|Y^-@@1id8=j42Y+Z+TSZ{sXWffl!BC8y{7wl2b8D(PT+TCP za0I)?Bz`8o3S#41SVR=IMysZ#X3F)LV7o^^#hkNJ);26I-GUlL!XpHue&@+ptRm3K zX7U~6N9@8B_MXzX2vpguh-Vp^yc%S|tpUZO&CcrxNezlK^9mWJc124CXrJBlMSOE{ zOW3{}%Fj}N^P%`fks_M0YTBH;^f<%2@f(K%u2gT~YH0;1*?9i2U>Np&wcK$uJgP_O z_dW(k#_hfF|X$ltsAZ&WPNZyXz6qTZYY7j})Cvydjid+V(lOP$3{ zEwsTjcYt|a52z^L zriLygg!Of8(Vm_QV5{?0-_(+PhjwJA5AOq@hjK9Xt1P0hqd&I;lTcKL@F0Dm8~ zN)wT%F}Q-XtbThNoLB+L-xw}NVCSDo?wY+Lrs@XcXWgya8NWs=h9h2`lI7AFCgCln zFpj~rl5CVfyrfpq3`c62%t0^k%|{zJ4yRP!)H}jwpOy;Bk1N$k=Z~kTxGGq`hCewf z_}E$84uYxU_a8GSbBA=L%e;4|^w@mZdV-1=ZU(b&YNh3)Z5 z`JHZ6%faf2u)uGYsn3@^sck_0Avgy$dmObjGIf6Rqk=p5;5p!ir#cIfPtpYmlO9K% zmVJ^-y7P*9sy_bqf_|K()vKiC7tEZKH?BND_g!37J`sDB0Cx|Zyn=9QRj`J(^Qysl zE^%^f`YAKs3hl9D3@HaOrmE1KVkm?jDSE9i@>$p$H%lwgLAAs%DJ_Qj${x_$(qxs` zw_c$ZrH|sHgpQEj4QHpXVis7bkY|7{7_!HoM2!LSQny#@3fFr}M^?uSpcGS+S-gT% z#5yc0Ny+0otggd6Wk@9caWh8hUw+gA6|#vE8`q0+YPvqmYLV(ePtr4I&#rA!=?>YZ z2aLLqYnuusZW3m3zlTfQ_qRNaF9JEzG$VkC0Th~xbiar?-&&T|HAmQ@(3$FE)jSjYC_PTqMabNXEk#?SA zzUTYfkv6=FZn}pECF{P+7DtOEK+2wyFpYA+&6iV|8KgpPGD5t&(j|*!e_O!Rq2!+z zHU`s%w3CP#0o7v8*P?^5?%#{MQ5AU~E%|ZJ3PSv5GZbfpGvmUKG6KI}(O%{GrZT?4 z=h%KJ7ggGuuxANqLA1`%5T>|!m%O*hMMA&{^vlX^Y@ne$?3hWT*F-b-I}Ll$ZuNfb zfbI2FMbYc*1Tp8l(m{c+su!?C!ldj;eOZTz+L3l=7EWh4QFj#53XmUh6T3cDX{#}s zm1Qv&DO|Tr)}$zD@EwIvOXf*BEFq*H#X(HP!uoxN>4zIoZLrRH>IM7l^8T2L`=V^V zOTLKv2f~IZ9<5eE#;*xBIE)tQ_xfKB@G4~B3lbZ0i%JGvTb)HrEu`V}m79&~P24t5 zt`&mK6>RWRLv~43zNz%(C@WG4l?cbxg=pA9Jk8%Fczsstmc8H~6D*NUp5p6UDW^9~ z3`9rHnXD||dObki{Ib7L2{S_>1G}>*A(1dH<#4g1OaU0T!SG&o7$jhso+jokFp*j1 zJ(frmb~^?tgeVWQvuA;}`CG{>SOY}gDX5AiK{TxhVRY)Vh`3XvqbV)5*$>q9jxXCu zs$}W+PosbS0pzkrmc-xSF2&%tPxs`#-_pzAM-NJFSY25={D|f|2X1Ux(TulhXvQdc z#PtT?>J~jPX@7j_N$!gtwA%9)qddd((LI|oS!Yg-jEOxh``|AY)~+jR`;UtBLA9jp z%E=+OqoPl}yQ}2x0MJ>}J3tKLr+U^tx^g~##SaALgK19fcEmA=yK<6J`7jvSWLr_`vUutTVoE}qfjk$(Sgmm zK8a#;j=|1k^Y~ul>|yg>*X|iWMPA4CHEfn_4ei&vssf@Gjai&E`q80D?;jMneX`xi zkTH5z*Hc#%4H_eB!>zmnM9hr~U?F}g!Iq6UUQnNt)af-y&i{DrfES$VkoaP1g>t!F zFA~bW{fae7+X7}(Xvl&Cd@A0`i`y5=CYDE)+u-RphYg|9P%O9L^ z4U1@K+A%x1YL`AwemDQQ z);aN#`FWPWDp?sXy(FkMaQd3c)pLPk+CzidB_*Lcd-E23AX}TpVA86D#Z5og25c<& z-fY<###laX`7XECawVt2Ddsg+nHpOC^~wHr3e-)xn$rlc_I<4J3_r)$thRcy0?tq2 zB@3m4^^|>;PHG)7{A@z0oKxc5tW+wfjT8%5_34@%RIG?*MKx@dXdYE-G1x#8Wmz6Z!df(icRW z@hZS4&E`B)k7wJXq`L$^-2s@R0r=7N9Jg4Tm}3Gd@Us1U5A7HAiF%)})RO!H>>$%_=&=mJOR3Z56AL1vn4O1b+YwM%vD!J6AR`Qtms z40>m9LuX6BLUqI*wS+`3-XO;5Vc#MK86lr_sP1HHcv@EM&}2 z<4a$XcA`KUah77p{IgKKhe;4MW}-|cOG8h<(cXq_SLVL0^Tm&v?Of%sCd8NUVs?^7 zvU#xsnNnmzW@StDz$-rQd8*37(&Y7Z?xI*SUOzs#JE z-NkjjIT|n23eT#Rt|=Z(7}IGk?2X!SUuz&zRH#3#vy^`0{8+RnDv-Ryosqethlz5s zRNwvW1D7-<62O9XKuYG+Cj|I4+G+qRZMrQLd4);)7QgX)<&{MMi zlr$hhY+E2H4>O#Ke?^S;3b5<*ddI58zDw`SR&r|cTIJoy_Q&F|Rz2714W7tqmAZUc=)?Kg_;eB4Gyi>No7MZLgu_dCj}@KK#>@lD&zNw@qr>&JOmUrCyoZ zqFxTjo=uDZvn?j3r4-gG-xO)&(IsDNL}`!i>|BUSenX}QdVH)bE_WPtFR`a`iR(8} z-cLy)qt_@pW<8+9>#`a(Yhq5GA$N1=@ZerfM=#lZYBXB3hvJwVvI3gm2fiVig4tL% z+h~x4$sgVUnA%=?CFGs$&7bE$nm=sKyJ&32K2F@jDVF&t?J)7WKdQ6vsXJ!AQfQRy z8+A$^M!ds4Bx`bNcl`~xx2gW<6ZQQQOo1vYO__4%_fRQ3recT2ewAV-FX5=-t_u9f zVB(rb0(1J~AMy_W$mSytBJKdQ{|EUz&a|Z}(9bGa?iFzKi~mv5lRJPl_FgNj*i~+@ zv*z8RP(O8!rc$^1frPnSnK$GP<>7tR(&^Q9>0Pbqbp?2V(9Wuims1 zV_P4cPeTd@kS3-T^w#&qJ; z%Gpz=`}R|Dh=t9~e_1|a7(lr_5zHDRTF67e#3cy>;g_jbI31NQ>-v1)+i|;JRg{H1 zj8@(&5IkHNA7kUxze5EOwjEvayJUL`ZkK{;TG69OkUpks6+dS_1RNhy64C<~89KHfNsZ-x^rz5N0+FhV(IA*=sVD_4ObH0X3F#MrL&02Bfd56g#Hmy z5HW-e@7~k9RNVp0Ha$=H!2nlg5g$)PMydgifhXrV#;IroW5I+uHK9q#SjV@9+?Ow% zKMOxr@8h+l;~mKEG(K`d`Y`^6#ox&HiOy-#V56 literal 20557 zcmbrl2Ut_vwl<90UeJRyrFjGd4Fp7*^sQ2)O9>GIMyXOlhe+QWHwZyMK)S#-^w6Xv zfgoWkgkFTuk`N-D5JD$(_~SkI|GsnYf4=*9??3ZAN!FTc&h@T2-ZAD_bB=L5cKn^= zZw9*hx*R8d;oxv&e>jepIJmR}9NdFAPH>#!;NW<|KDEqo`GKRCy%UGyU+gm{jwu{} zaQyPW%1QRWlc(6QKe2K01Q*9ITqjO)oj7jg z7+}NxrbNiZF-oW!oAFIDaI`IwoCOi10 z5XJegtxn26vaodYe?Mg9{92&^6p%{bI>GMs1p66Joa$AQU*=8?(BK^}#*ny-&6_|DpkiSwo?@>?F0IWDoA{=#*Vi$jZ} z6c;3Hy*m}1`|HQzceh<TxQ*S`cectvd3;@fp7cefxPp4EUHia+=wn-Y1r#=A^ec;UaUF874k z!K1K#np6GvN2Y)O{~QE>w;d(jcbgX|TE`quiRy-16+2Qk4b5rN~>iLr`t-_6FL5FkAL261WBAQm@;qd0jEKOji)H0B%m3PGTQZT6U!*5HSOA?5;13Vo z9pUP#3q0mX^-9y?6JgM+e)mf1ASWnbz9h(40~s1u(I6iJU)tlm-`c|tb>DNZ_xe2pTAT4-`wSvCTK#_Y%VZ!C0 zux4{ItF3cC=sm9L!gNl(Y_K8FFq8q^y1`27V&2x?*rqA;nlHHE}R;>PS}pK>#MVGS_DR*2D3a zlWuqvzj94cX8j~05deYa2cc2+^{EQ7RZm3IWfE^ zrp9bTPI{_EV)-WE7lm1tYiJ9zYJ-ddpIV_CfB@h9@&)`cM-Qpui$_m?`tbP-Z)(^v zhZG;BICLxAq+ug)Q!o0Jmh;*zamAz-;SG3K>n^qPNh??vm7((ft*w9NEFz@u;8x2i zV+gpc*-U}z1)dsjfCCBnh?VB5)kRwbuo?*Zm|9+`H$3!}R4V57LgccxuVPn|kL3pa zcMFv}0k_APUzDwFn6F@NhS{D2mX>C{r+7L=HT4C_IbFlf=M%1NLB&R_v2PsOvM4)@ zyW{ZFHHLL}LqESoAkS7_4!@0Pm$Y1nn~QnT4!>X(8gWm_D`*V3Qb#l(O>_cW!tZHh zpaP3^kpQGj#M4eV4}P+CwvEa>>2ojy&q~8&JtJodyzd&3xe7ox3DiF?OZ=3C_;6b_ zK}I8~Y2A~vRDP+pkero9_biEm1Yk`@ItAn=fFU>Hp5@YZ?re*AxjT0*1oao?UU3t3 zC=wc;gBsT`=`J)OI~WyjKYtL*zOkBEr6>aZhsX zr8+UG@A@v;GoG~t55F;n>e)3Uh@;yx&VIik_l)(?G1n_UWVlkc`rXBxA zzm_s$h1a)PU|q`|hw^nwDn_L@-f^>YB!H zQzlmB-UyMuWf|KGTBtPTvD)1aPsa2b`G4JzK`d-LmpZrW0a3#`URfUjjz#upqUiHD z1nPV2l9BhrTN?!bu6Ev9r)tl=d$?l6JdeG5yo^$G`gi+4r!&;w8Ba>ShG zOEYi3Y5Q$}Jh>j}zj1FeBd+ZBUI}i=kMH9SW@5T5KNq7GGL4Xsq6n3dq+@b#cZ^Pe zTB>a2)+J5cMO{H4oCg*nucsL_9hd1+4!^ZjlAQdwaHJVB_iv zH##+;g+`A|J&rkmV?*kCKV~@3)bEM(n$Yl)fWMDIN`8U~XXm6$#fs~NZ-98EOIa;mO+H>~} z(a;B3p%WnNsQ8i=`y#2Th0X-2_tpwdRNyICV<A!(9;tUAoNPoG0x>p}l+{p+a+S%abfCO`pl?;^uDBVG z`sLl7G9n}TqqA00N#m6{YUA*ZqC~aOknbx1ms_`-URv&h_5a|mC1f5gpJ5Gcm`5Ne zS~-D=H@Lze;Wr=!J5qb0dHg8hhl+D^KOy!LyV=AJI@;S!Q);OaN#2gl9JJZJ!yG`p z%6IZBO0w9y8(3)~KN+8*`AB?q8W+q8KGcu+1GNC7c=qj1?xGy4LPrgB8?Mm>l98I4 zOZ;d%K{GkajlVObvn#W_idylIEQ&Oy(Y`Ts8O!9{$0+BZ-911{@NO|dJI`>=l0v^E zPfWaAax-LU7z}H&VLe>4Pos@Q<5mz7TN(IwePV zyOE}Pja=6H?UAB(LPA>Z8CCrv`0Hy!gg(%-3{eTm`u3}YK-ZYc1rW8f1Cj^_X{riF z8P|F#g6f7=Q7u3Nhe$*D?AJ-Ws_57^rg6NhpNR|Q?YuZCps985y?I=k5drU3tuSEA zTSEI#!dznxhu`SZ&%mhOydbel&r=h9H%_idR*Q1HSNlEp&WvOH(N?c7;M$yY&e|mm zHJMuN-=1b(*+Wy#baSYlSWI)vZwBJk6xUg`WLTpHAzo@CD2aPuVvhe_gLUAiar$_CMX^I_l_}3aQdN9-v5Ikj`iQ7) zceb5Tnw{YEP`uQO1hx3kC)k>^k5hTdS&yC!Wr-hioLF$^6jJU9EOLs;oQfy%ZZxR| ziMX}==UL0Yc-s$)sm5-IZRWgwjLEb8h|oYZqS)wI7zODVEJ|0d6!QHlHeNnG=ZkBFv zMr?oyLj~HZ$`Uhc-D|y{Z7t+&24fp%*Z&Uk`HBb%E;6t~8+*of4dX}k^i{FQ1-Zmr z?e;OIg4;|1_4H?JDGe?VSOxF#mlo-~fIH#`*7na>va7`w%vZ?djTWU|hfqn>Ehm`pEl1c_ z)q01_*!S^zlI!o&J+hR_G|KFQY2fae(6Z4BDH|iLv|$Lo(VGl}yH_9$-2C%%qo7af z7CQ!#+d4%33hbq_$Lr-!gFs3mU{s5zreKk%`{3a2(Q8n+YiEK?wyPjcJ$uOA=YVQ7 zs9EFcl9^F$<)YH>d2zK0ZuuoNK1KLWt)E^$L7r*VRBk)5<#eIyEeq!aJ>vI2e_(d= zibbt#GJpMaoM}RchTsj|Bt#XD0^93hJ3nk6=v}Fv-Z2L}B*eWTN2?W<*VmX;9HUv$ zG=bG#b@|r07M!D?$eQ{I4xQM=4|dQMy~*nCuHnwzrbOQ2sxm#v>KnZGidVlExl57~ zcDFPar7Q2R@8#OUIzsYex25;rxZ#qd++3lLK%5?`tDPrj5bD~@fr-i8 zPF3zc2{eCu%c`jwM`?{i>jx_qtpkz+vdR42ce zcGc!u%Wx|9h!s<@0#%x(Uz}#MI4-mcvYlmmFugz^=r11b^42_Y7(L$``(EiZ`G7Ho zJOw_L|9OSL#Q0%GNNQJmx}GY7vZAGU@ru5!opu%$LS2=<4QA!cq2Q`WKvarZF0M{N4>;zV}!!Sb-ch}|j?~@*Y>u;lG5y7$7hV*(C3ap>& z_*FkknlU$37=rlsnDn8-3P1HnZGx@&dTXD?ugP08>4^=dVGq1D2Pem1+&0^V#)J4> z`N25YFj2P_ldG_A@McJtrHmG;aFa-e12$J}fk6>>n=RzIVRwkTT2i3-4=H?+qAnOCNT-BNn?e4Eo!+YD+5nwi8N?n?uyt#MGL1p#NQ+vUAhlU|do>AXdKC(@x zs?8JSpCCQQmA>et0o0U2m{mq{{#H|y1wT^9`f7;4#6rQ5@~3SliiB#ZX4RK0#{Fuz zCafCk0T({zK$q_$gBCDbWQMU$0IJB(A^HA%lGw6dQ>89arE|RA-$?(uFU|8}W$i@F zSP7B7HZyGPY(uE^*CwJVcKM%J_?Ft17v#W~(jy&Vvj`qgXw?@k$1FVnUJoS+)&Low zRYD$&`al)a?FSdCT|MIDAbjnV2*}Ib(6@^ElMc%xs)oZD91$u~cq>#U+R-FI+t=R@ z+}ZoA1aCOB<*Z+`fKzS}u~nMEz#9F_jCHc6(Upd-jkTvi(BaWjMxtf$>OzE7J!GiS znhpzl8nP6`?1ec*7%5)bGu#|qr8XjiDe(==FU4`0a^220F_|Y*yW(}xpgzzSE-rPD zk>%s^o6OA4T9QguiW}`t)?r?UWsNz+2^G($Y+IT||1-qgBquRmJf8nbSf8`-1*)@t zTz+(5yZL_VR7DCwq-WFA05apIb}RM$Xs}~(-9Q6_*S>+y^LT4JqjbDvWK(BVra|&< zqb#2~*2=-d=x`Aq)HQvBb4Qw1W3S1K$vgZLCZM$o`|`LxVnD^|P~d(8en0q|!k&iq zk>hS)u+E%uw(%;c*Rpi7SU_^Vp}>$X^+DCP8vkyyIZxWBh-c_>${5{QH-g({W%h30 z{nYrh-irL^mSaKOenj6(o0dy>rj1*+Mv)_-qoXYCj)X62dPP)+JgjZR)o=P0utmzh zM5x6`T=jVow>+J*R-;}zF&l=ghLkOXl2xC=h6abaO$~-iOF~}QH$iyh;2JBIMgk*6 zfF|xzXuH#Xp#*(0Hgmy83%)`*=8#?yoH%OEr;p4_q-G7y+rL-f0u*Z83$h=nl(pQ+ zt%PURz4X?V_V?}cE6=eC!iDDa$RsJD5dW9~5~9La=2+tmNm@%3myPAQs(yT7(*)+2 zOYm8%)M^OsM`>HvAsIn96}4ya?`1U z0!`?Jl}>gV0fu?v{;RDs*0UwPD3s1vQy0Wqq4TE|G;>@n7a5PiP@Q)xuuIY?>SFM185 zz9bM6K9ERU741Va)D09dK* zn|3P4eMaD?$n-z4Xznpww@umR=1p3^S6<*)!eR64ao3Lkh=!t1RJwug*sX@4hZ&)S zuP9{r67_1+P3Y>mQ9s-5@Bp>k{L|InCSJ1Qku9d;d~qP*+$4}=8sM=*aXk2PrLUX- zqFxe_RM{J-&nj|$wqq}FdiveYT-PqLlE(LR@eX;uUys+(Vo0uB2MlQ8&Xd$OB}lLN z+66*hFuo57v zH=>$F(@^Av`tA>E0IW}D9dl^Tp+i0sd6$6=pxvqaUfUt87Rxo>EW`PP&WujtW0J;U zQ%Rno=z4`gbOPH?5{fdA-Tu>=MOBH_sB8S8CDr}mg-yL1U$yik2_kRw3?#;XLPbvO zZVz@W$jIvvy#IvRNq=gn&nK6J;-s!vnO++Hv^G4bHp^+%htm@5O^sVe%-A~T8ws?- zWf9e2ba>UvTJaum5%rMDy_hHJnSaR%i%<;%&L=9TuDsq}g5*Z0x>p29+i0}BBnWOO zc=@WBB|M8yO3?P>rwjzEm1XODiWD6qNarlc;nfLgiQeAwhvKZgym3*(xxi)gw> z%f0W@YHdeZ&Xb+-PvBF1icDHlJ^Q$=;al_NIY1F$G!RvE=X?E~k{+D8j)NcRQn4CNM%c%sL;=1<8&gjRH$oI%I z5_j8%3v$LJzqf7qfe-Gb9f87gmBRKl{Jd5)+*L#%EQ-I~w&62`7d9&ab^bP^G>2rN zr^cru2Cwe*75#X%mRp|$bWzG(vM@v@@B7zie)=}p!2{KLz+^W1{SxA;)K8Z^gYMVZ z56SNT1D|G!(723v53BnLy*v4Pu*5M3Sok9{vQR)~20dQl=86@e<+#f7wJ#Elh6w!R zQORuE9NtUHYY=s-730C#7?vmXPL-o);}xKdQ*p?3PioqTm=_;d_H*218J~u2dys5; zWN!7`0R!&e4xU*|Z+aFjlW^FdEOpDdZ#>PN0jnO*bgU=ZUZt6hzw2Kg#8}2JPBc|A zzeFU3o*#95%eHib)dnTNmcVqyhWqXmg0lPOt>}T=HMYMCAKeJS?H`5| z(TvqI8yZA=>q!lZll36jF5Mxr>0QlrN2f<3v%`<~pP~?bh!JImR6|>$NY?%w1pf}2m<-k2n!L|;TsxT_dvR2z@o5CsKC0P_E z5;e5ANbR+Fh?Y}{&%ORqYMdnMTkK9QnOPjR_~b_o{cpf#dxCtH>x>@(i9pRnsrdDjB$9F*)S%Rc2J_iSFuj5jPMSJTb= za>!Kt4e@r^US^(KU7UTb0*yo@-dzsOYssqg3L9~q(#W!McIC38;$P})9pqizzJ==* zBd$7?CS89s*e2F|e?FMDo6tcjBpR`3{(8$4!r|Oj!7&FyCI=U=_Bx?MSW#E6)Z z;#_$LNcZ(T_dU+*i`X=pV$I*6HU)Q|Pj9jtZ&RbXhYD>zTM0mnKHG6=6{2L5RCBZ` z&cG3hqeUFX6X%IbYIGzxH*x8g%pbf?U2mK|a}IZqgke->5o<(6$I4l)gKBVV&SA_Q z29Wz+mbiYtTZ3(r?UweM?+z-vU3$1rD9LW{PdxeS8!rJpbK5j!Wpv2!UDXv}C;v3+ z^cp(x*Wzb&}xlK=V%Gjabx zei9zk@$%&i!0h{;V-l)enFq?lD|$OtSz-W3u6*K|Q)mrD?f#0|3oZ!;?3UT)UUu6> z7G2QAQOX+=dQ(^vHAFZ256a9x@~gvi#$-w_lV@>Ou(ENOhw(UI{I(l3LAcLWlK>`! zG>!MCIb-Ow7P#epEmcF9IB(FMA2)?zCN{4Z3sgjT;fOVpPNmV9TLkF?#AYQ*E#-UT}a8sUY2ZX2Eu#h@d75!>9zH4Ik z3kdJh!}>l%oYQ%^QP>Rrn7ONLjHWdXNT2T0=nle-d%U^nl+Ea%#o0mml z(ur;=0}TTzh&jNPTbXSsA_(xY*dEVtPLk(RsPZH;*O>tqmoUs)K?k^Vm&dw?u5FpV zP&LURse`bR(+gU)<%&I+S7PtIJIpx{A(YU=k)rh*{LfdZ+tA$ZO6)B$QlWin4$)xu zTk6-ihY4WaA-`cY2ki~tP3`+foYJ&pU<^fG4>Fr8J3BrqL@ny&H_~yYj_QTgV!IpB z;TUy{UGsCS^`x&h`I@!C=;T1>FRt4W#%9kN8cc`wOw0mPPG^+Ir?u*37k5qXRah>{ z+odtLjrwz{X>g!$(Xe7Dplf&79AKcNB9{hsh?K47;<8;z^4574ZRl-B;F8mo0#0Q; zOr-`%B}jfAr@_aR4_7HhHOjtr<)0ev+@3MAdYm1lt-)SE5r|Sl z*<(LobDVl@ZDI=7h@-n97(?DMS1y0g^cq1oq^MMQva`{enutA*UaE8tMg2=aaa5K+ zB`x7%x0q>^c+%j5dxtW~XEh@5cO+K!Q&>w|iXvgfalSr!CL>yUVnCZ&ey@R(A+n*k zT(WTO9^^}vUsd=7-7}YOFX)H%-g!*^?Ps*tH9x5d)cHeupA2+Z<`ae%Hmw@!kvo6h zPQ>a7+h9+bi@#^;3+3Lw`C8&ylkAzICEqu90_Si0q#B|E&n#4-e;t)-2BY`tD%;zy ziR;N%Wg#6hMKnEc7uMFY117Qpfxuz=?v=I)e4bi3Hu%%r#f#>g!!^K=)NA$bUu(=X z%+yCuW%5S+wtLVM9;ijiOf=<|TpwH6_S_&uoawz$5zONjy3Gr2mwmPw{c3`CIYTO` zY%2K3{R(JpF7L}+P*^Z5loyXK^t)T@qrKi!IsjOtaQiUkI%X{9H!|`Au%>BZ!{WZn zjY##pvBZ?TAg>6o2^C~kuNNilJRFn>cu^d`-cw!SuhDB=U}?mw@%Eui87P2d1aZ{1 zz__gLr_`x>JYCl%WmZv`U~j4UV-E8&qlh`jgJH#e=9)}m6utOkB$k<>81Jd00Q!Op#+x4*Izw=j6< z5sB9Yst>9v_~)2ag$RvATuc?*%GiAa#CxwnM3zQEFtx55I_a=Qa3y1f-v%zx*60zp zMeVfkN%8W$Xe@}LSN?6(P&`T1^=Y$@5kI7)C;&bFp5aVVN+n z_IC_ukXi?`x`=cgHt*FKoIKn5{+Q!#qNDe=#2xDBjnXlP-}x<2yFvGv%Qg<}U!tXR zjyaNJyI`Ld)|M=7?`c@~x;IV#-lt{O(eCGz9C=Hx^8r@WrqJs<&W4P32WyVx2wt&|z?Y2QcWd7w_5crXtuuJ<;bo1D#8jSL$9YVwx(egl%+XG&Qbpdl*t1 zWD?TOJX85(Fbm3efp$J>??R_3^0yoA^9zlM+M37bXx+Nf3>XaH?>C&QqOcgSeFuDQ zX1O1nx75t+?rM2Vd^tu;Xj@{vdv1v}S}6=LtXqz>F<2m4y>#4ls}Ean)^@AXF+Kf7 zoo56%v0!oT;%L|+9 zO7d8ov!vsQXp&Y17c?%G6y$8%pfJ)0ai$>e$jKQ~rK3QWsj@8%AYPN#&i64_=ggy$ zw}Z>`BO`IsKx65r;;(vYAvi&Dx5jn5!nJC`Xdw*p{-kj#GP76UbNTfNC3Oaq9gl6p$pnS##k1&7%5~ zx!jol^5cx*a1j}>Z04tz)!sJWb}_~Cj+ro=3OA}4IT?J<%lZ54`=cs~R^jLO>eCZg z93&#zVXTuTg5J23eg7vc>RJ9eUuA;^*pKB80hJ5y6?}Pb|GRblX9f!J9XNeWNRD3f z_&rq-V^AW)^G!d|VWudl23^UtwB?0FelG|!{v2o|u^_t}WWQYcbeVr1mf8Jecz`?? zI5NSv;}||Qy*Dq~F{FzE>IkNv%95Gg$;v3!W^dLyltUd!0k^(=S_JmOUcADFy|y2B zrB`Op4Lej8R7=ekRN-5U#TDWt&TUt3-L8lS3B;f>xO|_tr+o+{3{juP7JnF8_~cSB zTSF;rM2NalEl)HY+U&WEnW@rl+$2{f6GdwTHHTxjy@J%AjzXrB&j5n9o0`8GwkO!% z@$h(+y=ITlZq>8@;OkW`6}XgH>yyU~Ww=d&9#@Vwe8;qv&a>`@PUjA@RGv0Ja6vX} z<{qi3R}aVyYr(Q7&&o7k^2gZ4_6U0U5{c|3Rc?&VuFVh%W1AamQf0~bXjw9%QNL-j zJQ}W#cMYOu0t+dUm?X`xBrX4AjzL1AMVtiPnj!QFcfT-Nx0`#f=J9AlrBP}ZD!5} zH!5Zv(#Jxwt>N2nq}nm5rf+33}wu1F$CH+FBo9TnMbu zWpgw+F?$8uMNwB?o>@t>*?P~+_zBLPOvsX$1@oFJkmD{ z)ReC1OK?V1*Q(t?gVbt#FvcSo_3RbgL8_B(aSD+rbzLnJR>-6 zmRmwQxw&p(jTCn4F)gB# zP|rnw13>=v6QIrl{e6|P8n*sL_y26<{u|Yw!ZQR(jVc;iDE5lgiVjr%2dGcJvOhqz z1G3Nk45)i`#<>+2{z3Vlkj{Tn5_StSwLMoC=arcu7Kt@FA*;GaNs z;$fYy>>_dDUv&T9pvphB*3SQ{VrgRhT`on0yx+SNRkaOU-%Iz2w=y3k}-7sXoZltld z!lc>5^3&C38B;9Q`sJg3FIZL6M2}6C@5Jsg#|7Qji?me=y+Pxh)t^6uYX9*kR2Dl@ z>Aw;Kdpyi6Wc)v;H11lw!!WUFQuXVH7>XXGMrq?^DGG+h#J+F|u$WG5BBF-!r;~j4 z6~ElIHM^KCd0Cpz?*7zH7J+CT8;5ID@?^LN0f**?9c#vk2@F>yf+#H8wb}ES!>wAw zh;Rky8~x2=B=^ZAV`~`~scpa98*jMRMFpP`23+NT+?fw;^Spq6C8?V$Gw{5d`J$7H zdmy|sp|8kLC9UjiZAptidvW0Y6vm-4dlKLw0~!;0PsYHcHl$?umebX4Y5SUw5&<$7 z%Z$~mMMY(Gd_}P$8Sl1K)p5Z-ZJkuLsnAc=0~^AcmCZ7XJznud5q)yfW(?Z&KhQyQ zLdnbP=E~492c^+{1>VwDOsCK^qjiX~y(#fBek03CHWr*kQ|W|95rxyJuL< zkQog1%={Cv0S@OeNylBc--c?SE8XmF7eMdN7OsFy+uT8SrGo+=XU}s^F!$A)vo-ZC zHa=K*-XF3SnUHl;gB|RL6p;&5F|;b82dt%b`xF<9UT9Fpy!5T+aV1|D&dJ{tVM0hs zu0Bj~aUVb-mN(&zf4IMrp2qBlRVH-CZc0$wlYMB2g-M#+o>fl}1D9)qex^TZjP1B* zF+rcrcJ*RdU45#&RlMX*pK*IW(ly6o5N67QckJV>rkn>ED_@rS(T*z^c(}ga=z4iD z3M$g~m>TMp*rs-?(#J~@x~R+xzq;N8)W}a+`W8yyglRSE)ZgajF<6u~yBo*}N>*2W zj*7`pDeo*BwC2ki_Z8yo|~HTT)XPSk)k>jd&( zb48PJ=T7-`{i3=z3KZUTm zfvWIs{avFHhma63vXM>xG<7WKT8%dp)6KFIX%@}SdFk07H|Ib~zk&AH_DYlrovPT- z>l_b3V|%%;UxmKRzU3sv-|%--ycHnB3|x6BHNnkcD(CTDuR49hE+JTQdBJFwTtDKv z)O#aG#Fd_?`j99FQu_DU|AA@AYB<9^5@57@5Lw5G)D#INHow~vZxjWzBB1-Dp*;Yu7nH#et#M`fW} zPHrJKa_6RB36WaTpD5g<1Tk5(av2;|$m&+eG9pzibcTiOlyWUZrBV1Po=gfxW578R z01SzYzOZ-R%%@FdEYVH2+Cqp|J^dpnU3jc2TZYE1!^%@^SfeCUN41TDtf}(C)-Oxc z9rKn#a^Tp@Lsi`{8J(etP^ZL3p@7Q-8B4BR`(d}Ha?_}{?S$EhDt7vlq35gZau(Yx zUP4!#J-XZ|krvjIOJy&Y<#<)*n31t$r&|!V7sI@`KpD zvTS145`&?l(myk-Vu$LnypR4>?vBDbo7(JE-+z(Xa|bFF96{TU^8t^sa&#)jAsrCZ zC=T9q%P}#bh-R%vCXZTFbM>aCzKu_?+9`7Jt0GkDbnnckx&SBSqL1_xTGTH|2ZtQq6D|r`-OXnISA5l zLe+Hc#E^IgiKtCK+c}5vR-LHQPJwJO$@y0EWwK}Eu#^U$V4by0%aI*X-tj0tus1gh z!?IH4F3M#`rt;{i$G0|0rNTB91iy~nGGuaBfRgEk>UHS%7AR5a_Zwg58c_8Tx9ic~ z>`4EIR_TxwV|gW$!!^7l{%--}*vptPth80Oy}hfPM#?$78eDp{F+WW(el)v&L^HK6 zH7D7#+sO5pL+w(z?yb(4JZ_;_**7lm-(};@R3YVPq-DDU&8Sf8vf2G2KYM!B5Ei3l zqNcH2u#NQ^v7D9b}I$q;$IsabZxO$SJ0Ks32gIH-w#e~rT-fzMl`gx_z#qVy$r=czx{-& zoyjgv$||XQC`9UqaQ|L`K`^J%FW|BdQuJKvAU7S++@Ux*=Lm8q56oTh8Ul3?HuHri z@6TCMK)R8&arPWYee}cgSqw$RT|RIjeqVV@PDpssFtK5F)J>yWIIL*bDZX}OZ24_` zifT^ZlKzyx`Qy=Qp_0)69XFJHju}{@Idyhm(5s+zv*pH}d0e>D)Apx02`YUWW=l{*P}JnLj>Dd$$;<@UWC-0+lOxuFee`4XI! zF1OY!{cYw07^-Y1C;>za2A9=H&5n`$HLs2?uC*D$;$S)B76$EhO5L`{9Ix=~^x(2* zTB~ajMN$!mVrc=6hZ#rWD=dlT%6|1@j*G!0^;E3#CiYr+(ug+0)~C~Qv7RIl*iotd z#b)~mF!gNRl*d)&Gwqt_!gqEOL`?h^Gq+GrY4s>SO{X>umU|}yVGIwtSwY>UB`_7u z&F^7~mUcc=B-@+|5Y;htm{=gM6xM%)l&`UE6_KW-GYU1ywy&PgjLExYQHQ@Ycbz$v zZBIUWKNvb-6ZAB1J8t@zV-HO`=D5PYXD@loQQ+HGo>zOLHRY&vbc-~fH~DzqB?xx; z*TNE~T#V`=k9!%ASZyt(ibQt{vcnOO&*!ExcBecJ@>*3jUAa}=8FF}KI}!Z_CZYv8 z_aVjN&y2S$b4mY|*!9E0M6yseX1ihn-|d2ENDUl=Dn3HlJ6x-9jE@fi)u@1ce1o`D zv=IIuh#EV03FB6+JtLxGj;#UxHemVH<>K^7tc*1_nqFY;u2wdD{)VZT0}7Gg?vY4=~en5a_!xYZzWDCu{ozwh}|MhZn>QOB*F>DC?8BKs!kBEX&TrWSO=UM{ggoi*+Ffmeh|R zM)hkMV!PeuWUf3ZdFRC%bWeMe-P|k)>RP$z>(nTIK+2WLTJcnsekwPWn8d|rGFHTF z0*;!BYM7UdVp>9i;M(TRXd3@8i z)0HvUH}a8(yCWN3tC*$cGKOE3NXVEL`KvIkS>Ph$XIzGy)qSK)*zG+d2PhB*4Ep%iTeyv7G(L?V6}bYtu;rl z%={vkA?r81B+oqOv8tq2U>?TvGtqR>G;iBc;FGln7Ldi)JP|JgKcn)AAb<*h-BP-p z3u{wU9^Zuxns6%S$cwx@a2c5)+i8q{RkRt;;p=H91g?;_-6}qlgh`lVVqgHAIpQWr@wUd@c&YrXa5#AZe_wiiuL=qyjU#?`qJ$;8&ghE zHq9DKP2H^MhxbKL8jChUtDihA`ege887XkKi`7B8IRsV%fqZo6-^%6=a8zCv#iM6L z3LP@J>=Pm19=1*4TkTbX1Eph0f)lZbYE*sLIm<^cQURM4i?4n5e#0+!8*h71Jj|Gj z7lLs?FU2#LlLou0%j{6I3mN`@HO(Cq_3~nXA&Vyf*k&K^Q+A3Gq$!Zm(>U4wC?q$gE#XlID%hbAdA#S z2H@q#5>%nhH9AV%!FGWnYEq>OKu%K08Iwy2H+H&B5xYasfNEvEQ`$XN>_B%lI%jt~ zY2Er73`38}1+<#%c@LJkF<=+TbDD^=iXA0$S5y^c8>=^Bt8;4JJLwu3Q)#U;2zKxl z+^^7&vfSO_0}UNnv3FNv7_a0JYkg)k#`1=@ZiK|NA9ILAuriM>HaEM|;+yvlw0I%{ z!HjY1!N)ZQ$cr@9+ zM_<8>64dlLyGhGgX_V#_ZIov~L#*hO>_n6{e`kAqTo>r{)J377})^zu`WMVjPAJERqeAzmt)= zTAX`1O7X4uDAIbCDhCcPqh3`Ms>~X8Cx$h|zGp(7A6Q2PYc^_0w-+Xc*EM1&VKmKt5)*2GzvFTx_~rz}! zwx~+=EK0`U8>T(?zz%X_X>3o=#rP-0C2?lrEojl|;ZjR^`hYVK`)QHF`sF>sdyjKCI-|rln zMpE|f@iEdizF&rM6_%@>ZX0jbEV@fYbmDH0d!+Tu z2iE#pOPS+%+|$RC%rZ6)oDcMuplZh)+gtUDd17X;l*B_L_*%Q;(*AU4fT^+8zLKA7 zxaal8#7$XjWQcM|5lrQev%#TA_r@2+%G^N$)%pO%#Kj!0uF~jRl2Pjv z)S8IL7>1;E&z&S+6IurSn?sJ47$HugJ3sOcg$vu$;!T(ut!OhkK3ej{f{PM_)+0UcuZk}%g;wo4eJ$@czseuN`);-&-Wjlm7M45>R zgppd*!nbh894`gW9&^~jjyaAwTnvxiF>dT1*&TCiP91a1VAuSr4wV`YFXdIkzq4f4 zDX9t|w3T6Rv$wHsQhw=6z+`5~e6Y?14F|t{u6|!h-(u4nVnZ7_z@6pB%ZB%i>qxKx zHP0-FjnSY)@H2hIP9CG|U@J+D;$pT^Doo#_RR<9gCnDY)$FQV5gkjApJ*08mW;xk7 zr^{N~v7(zLoLsYIJ2UrT3l1+CT95{Pud@pZDkeHXQj% zcGG4zAdYgwuk9R28~|NPug9z`$3i@CP}hlZPv)>oQ|K^?tt%NTS6RmR2spuie2k zXZ=KCk(*+?&-E=2g7PhTA#rYR)psDt8>JftINzPBJg&&!R+pkk2h9R1LS@6@%&?CM zeLcmE@2>K-Upj)cqf6{AXLX1M&F+Jvx%x8%4lJt+p{&+GFMc0ET}O z+~aJ;$ZA*lfGO+hjk;vNCV73@(-Q?FjoQ1;oSrHiGqV?AblC^s}QI;Nax{vPX$EVRr} zb}HtnHHpO0$_5Mj)7ug5X%Xs24wu}ajocdWKl+Lg?`i0?MR>`04OvoKn6MP+h*4`I zJ&)Saq~hyz+;YJRka-&lsZ9b&|?OZ(@;6EafF_X{njjZWRYkK}^ z6#AArlCI`~_KxMx(Q0`dhnn6rN^Y#2V$ZYkpB-$O=OQoin1lm1}1fel%FsXWM#_}zo`r9oM1*O8%B zUh9a1bHPhZ!LnTci6*750F1-}goa8gpHmA_@`%l;uw_ctf{&cm@3vA0Lx+wRqr*tj zm}IjHq^j0&NFsa(;yL@9_Q}5nhuaGE>rjJ@N=S8KGqiZZU0{+p$_JYwKMP!l6|1k( z^42t9YZ~+OYZ~estd)Cw-n*6MHI2I$SLNe{vQ!|R)cK7eN%NscdJkeSfQN`J$#S!u#n@_g3heDw< zP<@c~qE}Fa*K){yHEB(w{<``}YFEb_4&AfosKTJLKxkI`p~GC?gm0{+(^>K9#fyAR zF?KGS{84((X-eKXyYOSSDNRG(xh499hvSC-7n;&G6d`rB14q27)<5TUy%4d_54oGR Tra}LqcTbp?{S4JJ*M$E8j%h+9 diff --git a/packaging/WiX/AdminHeader.jpg b/packaging/WiX/AdminHeader.jpg index 6e2e33d404f0d954ba6a852422d4f4721740e989..96da8f155587067b2977bcb631af9f86d9cedb3d 100644 GIT binary patch literal 4972 zcmcImXIPV2(|+ivyK1O{fEe1Mk`PLO1mr_0h7O`ARR{qCBmok-fbJqino<)HSd=P) zO7AGWBOo0?Wa+&(Az#o{_s72P<)3%1T<4lI&pr3dnVBcgq4rb9fKzH7SX%%O0YzmG zCo8lAh9qc>vBTn(z)NLSU_q>n64+Q)M^eY>GUhh+ikA!Ks+X=2+RFj0U;|dZD5&Ux z@W46YFeEEM51b>Oi11JXe<4TE^g}ZgEcgXNa!>-R97Ywqp`$N&nc#vEl!Zu3pe122 zK{y-&laYnPVHX6YBw;P|bI`nL%r0`WG%N$~PjxZrO(R%k5#&>;TBLq`XJ!V^hWcr*s3ssyHS zK(JUFgq)0wnwpv%TwP9H9tKmBQjwICQx8~w$hfb!a&bJ6WYRfC=5(rgym3JzssRJ4b8;Bz{JAD$n=jV-y#29p}qk?tN?;; zje!mX(1Yk0Ky=hvAcvM1z(C{v@dv=f$a>@`GYic`PtWiVJHW)k$V|_`N_P?fnCNL) zGBYwUeSJ$zbcFo!y*0T!upED4S>yjT2yC zU}ZYO%*^m5A{{-5f$=PiNyWg*`4JmC%e`d7F7DTzD`4x~>Z{CSmwu0w?p~G>%B$hx zkl~~b0>98QqPc(oWngRhN6tT^G4PMZzhRsz+WrinyxoT1s68qp+-8mRSZHKCa=N2o zn4TjMNu_4$Y&B`xr@0Frt=mfZ11M^SCpZt3W$e78S7WI3lIxnw7trA z?CxxF>{BVy#*&HKnyQ9khp^A-PCjDzjE7qyF>m3+3&$DCWY9!XIx)s&pO8N~nf+_O zF)|oMVfTM85aX@I9kjg6Yrv}Cmb3`q zR1Q4$mZcx~;`I(uJ1bQIzSjvDrS+l;Z2sz`{EawqG!@{3PO-dc7vCvSDmobW4w>?? z&EG9|dYz-ZJ4OZMFETspwKXkNZFYoxmR`-H1fe!k5}U(i4Y1`vSrhW%yg* z#t%jLj3`C7zvvmmrp6cPj_UE3++9}wbj_3ZR}SoqWBXQby=W(F!;Zh(OyO0+p4(W-YIEnc z8n+mu^{s?L(bP#5t&W=9?B^-la*i1~uFzK7VB*^})Wb2s(%4o@1-0VRvR_t}7i3#% z8d@riwQF_!9_PXMiGQRYlsJrk94ScvNpsDUgA+6AQi)OUI5-BL4jOb-Pn-+YORpTH z_yj&SNX8WhvPQ>^>LY+SJHTPHPn4+{7H(j$)!NDOK>e~||L(pqJeC9@Txg|MfNy%63cTL)trZ*nQ zJZEP!aS4AA!$x1Z_zW~X&qwNrPB#+~4vj2eGn+PvjPl<7YiSL#FxYw$mZb|aob!c@FW zn`}9dy@{*#g{?(gW05AZI(GBXD-<@K=tbq|R+Dnu?i)F-?i20GHAo5mc&|^KdPjot zheX|N)z8$Oc2Fuqq*(@zY{hIGFC)CeKX4x84%dSnD0jUFr}T^~qcWTCRPN}A6md#P zhsO(lq5{L3r!T=i`wPn)@b%i}g%OGp;kEebgagX0sja~=cG0GVSDN=vv>?Eg}h}b4MVMOh&PIYtA=YeKcGYssrC4w_k6{ZSf zQR~GyDaC+^A+d$;zLdo3_A-9otAmNpvhpcRJNfE`2;)-sQ49!)G(lMJo zZO~YG*ZPtwmRo)x_Z_6~f-JwMU)YtM8g0U(9=|sq+assfkxSQjvAK{K!G-vGDv+1y ze$=ccS>K+U<4Q!TxjC7aPikR)QUZTI>oJxnVZL&cJa6<_PRn!_d-DT4B4&N3DvoE% zeV{M40Gj2~m76C9JOAFK?%k&<#9~}q^KgoIIZT)*8>_j+8<`SkukAV`AD|||>(xHk zD|S4rz3qA+V&lo4dW#8KAYtjP3l)%tIKHZUG2D=6uc2Ayh)ChBD=>hJin<~+MRK2A z&|(uQyb;GX&oda5hBxaPvhMWXz2V93SXMWeYwa8`?l9Z_rz{zsmYQ3gsGqB6oZn;N zcE`2~$>BBEaaxZ5h!%>8@^2>OT^@*qZe?(PsjB$D?B)*D`Or1N(6 z)rJmgyl)-iXKxV*zHPZ7O$GFyth^gJ*1wdpSLqul^?KNO);DkHgYiR4x=Bl^>}x87%1U&HFh8UAE={JlUiIXYL+>;)lqrxpKG# zIyTyu3%DobxxIJyQd9%}mg3`s2_9vFMHdAfXlD9y*)9IFTGNEma+;sHGVhZ$Yx1bj zb1HCe68wl{G|g#`aSPFRquhAfXl*W<(%g1JBZ{ZCygS3dE%IT0WY9LxG5di>x2xSX zQ*$iXLkXnV{SBEHwspJ_aon+n1{plEMyY0xq;(sUk>dI9=lXE2S+Tf=Bhs<6XWOll zc_^UADxO!sru?DBDICliETNf8z1?#4lC-N&wNRSmfKpla&Ee}rp)%Q^9QIHR#di6P z@ijcrB2`pTp$mOEBP|tFaAvUMlF{$3c?+7Q+=Ee47vCq2&$DlIQ2d4es+XAQWVW*3 z-6+Qnns?XfCixf;wo>&nY}AG)m~nB2d-4yWU|Y%NntMj_$K+XX|1Yi9D!WYF$m*s(N8kDV4e0QL%3|F2FK3^oksp_cB+$CvRw1(uSnf7av}KJzcpz6nDlnQNioLJ=^k%{MB32++sJA zc$_Vrn_HT&HduoK@N4j8t%Z;I66c^+50D$ZHl`0IwSAJVIUMU-hnV%<$JFk>G|z@a zmNk^y>lB1+0Q0wg?k)X>`o-Os0I(;HjxW=REDRCpxYQRa{sg1Oiv&*!6O_+5u^M_T zv@&PTCTZ~~XFVy1kJ)J>|X1(cy}cI zx^D4d&tWmOV$V$`aYWvBV%NiOHkk_GP6X|CSSQ48MFi|Z@%sf^R}=QjA753Mw{6>^ z0zH=xhR=XD66=r>OK1M3$TT^)XQEM{uUx4ev>EJ{vI#V zUn77&gx_<-YA)Lhod062R`+5Fc?0Qkr|eyCf9ptRoAfEKr((VHsd@JA9KG#BZV#?c z&Tws1@MPpaa6oDDS_Oop{-$ZDiULd2s;Zg>1(h*}Q78_BIBdP0w`WUB_Ib`1R-lq6 zO9Crz+x}OrWa(%cFOoc?bl!986e}C8w_gn>Q}7qpw(dSS{3eGVF61SFW!k0i1a;v5 E0mQK}9{>OV literal 3469 zcmcguXH?T!7XOEif*KJ}imntHh9)EkLCQ!8C;VfXjWx$l;DU%ThNcXvPR4grTQz|X@0 z5FY^e?loX{1^}Cf_+Y{T5Fh{mz@G>ExA>2I zsI&-pZygZdm-7n$J|l<^%r9_K`>^0SFRaAnysGwvHOb0%uqNTxI`Bk+N@|fQRoo!anb0!t#IyvKnLs}{=SS3C-lD<#O z!b}qV+7dVrIiC^ni^Dw(IovvMI za&?Hllv5F}?D{@XgV(Nxl@C&@=mbdjV;lmJ#)4O8f8_a$a{^YjpFOCQwH1lgzh&Pf z)|ZBLD}g;q#|0#C^GDb2lF&T$5w;}MVJBB;vD4flhS4s8qJ6Zf_0fMYCSG!5cCf2u zR^BN$ly_T^JG(7rsx*0dden1yxUph+#fKcDEo zuR8LujxDyf5N)-x!j`lz8OBND$KBm*PEk*DY5028I|Hknaf6}?ziCD%@8Q|E6{>S& zSGJ|j+p5x@ymqi$_of0-p}0Owp7PAojB!8QaQ@b;LpPptN(;Q*zPaVY9uFOD8l*eZ zkcy5qLF;85wdjP13Iwi`sCGz8zc^58OFFi31tLlIvBMXA3Q@bpbk#;LWNcmxw@$jT zS$bdN{}3v6h4E0|hAnKYA|T<#>2?1XM~)KH2_>Ih&Qy}2{tlkm4)E_M>r{pU!({Y| z2g!wgSi%TvadIi7f66V=c&rX12bpe*u`JE@C=#!}OG+&HiJ*p(>@>T=O=3T-vGGq2QkQBZygSe?(i0PEI`D@N=`B}i>+E$`?G<-SxoHm1+3bUj-^k&xg0 z%Y!;h6QOYxmCxxaY;JD0o`@Pu>FDPuwBOk2VGw#z(42@Ttm&0PSC zt_p~w^?OuU*Ts?l*8Jn`yq{VpR@Dq+omR3>H&Nuel0PF16N7^+B??lNahD~*5Ah)@ zM#tBP%NeB2+qlus21YV&Z)%GP&oeU^pPR>~dD>;~+cGv~J95+=I?X#fZ7gG_qYR(} zzP-0B;Ynp!TDL=*l~w^Q@?#>mM|Z3LVadN5iZK#$xo2%ny*s5QBw8@JjiyWl$$Q$x zD;P_UBT`v5X=I74=Z;_zBr^W{O*y$Hdr9>WjHL++qTu5f^YhQ}d|1r&k{lZ?1WNTm zLVfxYG*V%3vq-bCASg#wot~b3-O){%{d5dBWO-gO`Qbynw2kqD*t%KcWjmuckF+e` z@)%pI1IV3Q86yl6xpjjlN;B2-ESYJ!Cl@ADP40OR2}5C>c>1M5xUL4bJIca2kXSvY z^}g}j5%_BTZ$Ffq-_IlDlH*5o_N z`Jo#HX!7G=ih0EM$KArLii_&hw4L$T$ml+jK^AmP!=)>OB^G5^f4eK3An&6?@l2_N ze!v%&c2%J%rnLbn?F}=5n5;4Lp(KR-WY%PsJd~1F=z~{%Hk%c};f@6+L|4uxd`K;` zm3%?Dab>0(g^8S`w@A?9s;Wpfl`Xx*p!Xy8VHi5hEayNU0>*+Zd4)@;CHMB7#ZLSZ z!bQFPky}J@teI83@!kBm)hd}8v|J@OiiR1aLM^)dF(||ZPN%lSsa?RXS4NtuaEhHU z>;c(eM7UE^``x(P5h+1>?wm{IaNUQ>udNTC^URZUCzg&^u#lSN9dpL9b?+ba`Y%dA zlEBl3G_Cd}Q8J~khf`y2j>QLkT1$5+f4SOKey%vT|5`k6-xRXAO5AUF8=2`7Ws$-9 z--cZ(;7orJ)TP1~k;{fUvqzKV%r z1Zq^fCeAdd4Dgup40U@8rFH}9kYMzBa2T;5#beMOobi=t@H|}tG_qaz9 zT4f%FfL8{@)m!Kz<=jZL2x>6Npgxe$2R@n*v7rOm39g;->&f=FyQ4GDO%L^+ed%>< zAEP6e=_E<=E{tavWOtPgNSja4)BU$O@vMWQxM%ZEjucKchs31V+zP+CSr<7zfAU9k z?||$Qw!$s+zQrPJIchAk&1xh`f7muPUNLtv`E_%^gLzv7Vw`2!(~(s6$@2sw{@uL4 z{~VQM#X#PVK5?Q|3x<1f|KsDZ{Sa2!89jgR&FsI^nZ!rQZJt?OObe&NM>ZmHJW{)^ zBO7_<$$YOyf)gxiV)13gphvd93HnK9ZV@4oOSU`lOgNYPsd094 zFw3}0m!SS`%k`-h$(BtFt@K>)sG82)Y%{h=@Asc>^K&;bX0?ug_HUbi*MtkXl1bO= zi*dkCx7g`-!nJiryUeu^HG>gk708K{2+Qv<6r+xah~SZ8+3=AhDJ3lVD7`olebda# zx#?UP1d@qxS+RRhueM*2@BANsUimumE!^h1y+=WZ?TwO*`MpNpwr-M|d}FGk5Mp2||F7B&4LIAQUE4 z1qh;qAP5D8!F0PIL0ku(meyd}N0cB=2ooSrfV?>2BSH}J!?65dx=frP;vr8<>qmMd zLClol%PSB*pnGRJUtWPI16dOdzC5Ir3F75k005T&p+JnXBZzcQf>4Dthyn-m!3bQH zcj^Gp`=yW=j?oEh>QmJ$* z&5U8?!(_O+GU!xhJe5X`r-sHS(5-Fa8MJuUP?`@&*HLMVaE2cvobF9a1?6}aqb`BY zh>EAt66t<^KCFbgcov-*P7g?=(-<$~!xN)euWDI|=`03=5heDjmJS~ZL4SomM5Pd* zhx-0UFRX)gaXl#jnE~kBD^Y7vQEO`}VIPK>sFjtug|(qJ^8bg_&c%5a8HER~)S>rG?S*q~0pmuQuk z5l^SFsNsn{bc$$bVq$l^bq(Zapm=JK7%e=}fy$uQu;>XHet=JmW<_Jrt>BNAL8k-} z6xUDyj{mF^ti%XHj811T2mfeH3crj7|LO-`3Ch4t_TbrCBkcUszZx(UcfUR8MF>D-af?ga%Qm>#ba&lUQ51 z(yc6LV%`*jpjlICuE3^QxmcM~>1N(EYq$>x!kX%3rQ}Up<2~Jq;Y~NE)1U`Z86Yo4 z_4cM&SXoiw%iJ3}C>?AP1nAMMp!Gn}>Q@DSNsG(I}xb zS6Vnji6E%@AP*_{0|2h@9iD*gGr$mOD-?&`-c+9+hBXwx8jO?n>DD;IijEkeG;hEI zKH(3*;gVR>7k0s2=t>ZwG_Y(984N%K@)?PV02Sn2q3|FIBPO_q9+{ZfLj!r}_b_@u z1{2=^uHeom-kOHxp)hc7*u>)-g%0j|=s)FsGUB755911@WyDfLv3+Yl20bvmtD6cX zfgYZb0P3OGzAN0zK8f+b4h^NFgc=yuNjz|iB+wDu`V3dPPZx~zG&pkMh4UdivcWbr-qIv4hGnvWq?i6B0)f@YUzO> z4Wi7RS~?g6A!sjP)nu^fwP3*~fmU0?V6d=XumdnaA2c%J8DOUth6<3c0l9b#f==sU zU{qiV;{>_zSAd7c3XjK_paAq*kY~|r5&IXa+qXBNc`lI-NyB2<*^VjKEZ==$ecKnD4+5EfMvA9o9=m2A$?dOYC6; zfOBw*P&y0Suj{7QCM5R2oaz@}M~m{w=poBh>yt{$Ks~Q$EIffS5)tZRft@Hu;wu>V zXsjqk6cqgi%7|yu-vJ($4+ukZ0CsR3n25Tsvv9pJ7zqrRa$n+tMlr%^8C_5l1OcM- zccd^($2E*swNUCPzz;HDBc8>C^3~GoYQk|FfV>zKhW?WNGOCvTGCqm{5ymUOAh_X~ zFxG-fEmS3L8&InC`Q1U|cQf!1 z`SnUxH@PSrtnXj0JH@dyVK#Jq_P02>)+ESvCaf*-niGilvF5CNP>D*eeMBEWegwmL zD6bh4M0q%who()_0-e!7(||02mI5(>5`p#sJp_7>h|yqs8jvN>QXnQ!BG5jdhd}QM zG#b{l(||02mI5(>GJ*C1Jp_6WL=d__G@v{n9wKysrwcq?;OTOKFb{ej4fr(R(|}I{ zSsL)+jwbSep9lOr-~)al5BPb&=K-Gwd>-(5z~=!U%19vKA>cvT2`IEKV9*5zx?oHf z6m>xeARt}%($zHv0=_Qr0SCZBx`0DB0OSFOF5u7w93X;p0f#Q&&;=a2fI}B>fEv;T z9J+u*7jWnT4qd^1f@&HdB-~o4t3wZJXPac5C1BZEF93Vi~ z0zL@jK_UN(ROg18fz#nV~T`stskOz-j2f zqNVkNR(MTVxRhH{%54Hpb5mJ0q;P&wQ%6%-DYvwUql}hnV=A?f;FlWS9TnIQzeG77tzjzm2m)#)RLFvY3M(1{w0d z@vuwEvx%<^CIiTY{qvjgl?8DE9y?$?^_2x5;D8V|-vC?96A8BN_yP2wsrTe0)mjI!pA1_t=U z`k>9uXB3GuIwYY!NO(nE4J;Kl%z#X&V3-U+y{uWep^1TYxonlDW(P92lk}et5{xp) zgghqj8D)}OCKqeL6bkmS3ZtkQGVz=WB>^0GHsu0vj32n$*{r4_)^?b2fm_s71hSnV z3v(@r4<^Z==5BIcW^x%~9Sm}s-OdIDY#$pc>%h7&`~FY|9*YZhAse<$;F05h&x8MeJ`esJ2mWmlm~>$Fz<)4*z~lr0 zOu;OefACa{XHS?*A^8IUe)7a?4i-FN;spR+m%taEqG2A!lEB3i>YxIirUwn;2$z6I1_uo2p|Jn#fS#Y0tRdloNkBt9Q(+J*{~DK16C3xDGg=;F&4o- zL4!mCvlBMRf@v4*gDT`=5wgUrK?al;9-*-o=wsh|fv`Mj4rV*NAOH!{{*Ou;w2v1Q zcwz#xq5E$l?sb#nNoxz&ZnqLW#Mos3z15 z@bcN)N&DNeK@fr&nMF1je$;1!53=O>?4mBoy*Lxhkocj1q&CzI_y9npFq9K}fJc7G z4hW#kk#zt;s(TEI>+lI zs7%Z(Y7lGckZi*ENIYN>oMTzCHMy+rGOPoiPWa$*u(%Dd7Xj%X_Q5dNfwc|ZgJ3l@ zfE=JDIk4v8vUnX$fRK-W&=R)R(1n_q4K1)TBFzJ2d~wAj%W&QOu#cTWJ`@>Nc+f6g zu(g7fVVQ=P9=xV5SPx+tu#52w)(Iq74dSfkt|mZ=i-TRTSw)gaya+Gw04K1>^5W$m zh<9?E8(2IfS%k}u|M0>HmOIdGums5<<#8^_=qloJC7WS02pfRvX0sY3c@QP-kzZK; zM?UZ+OSx=b8EGBo4w`2R0Rz79_mBF=IXJ%qmz0b1Nd`6#+dKRu#9$c-{b5iQ_J=wK zbFnxZ)JXJ$+SoRZk@D*RSZAnx5CVJHTq)#Z5m<`i0N~<~{2RoBcc_5Mx^Q{< zS7!s?JaEXBCxk=rLv=Rr`Pe|2B#8z``PbmW6mv*{u3zMJKx>l>yr3P7@$C=FHHi<} z8O-k>n~E=oa{z299}m{(f=#;8hCy9!2d*kIj=zA)Bym2LC+$H$hu-sJQx8fG;zOmm zye@IGJlIz3K+S`#OuE8~JaE{B@b+UhiN6{wk;QA01h-;5oKecH2X0YmH4GV& zUBJf(i%9#WP*c1P9`GfbAfF2a8c_KdU@5l)9tYM;i|7Lt;gDb_<YaANY8A6u?Zw8`GtfUmSO@FIda6HSx+$UH#nXP5 zLYDr0KGwmyN!~M2=u*X>#BftVjaLq#19_1s+EX9pM!Wya8!8v(s)Dd?y3Z^WzFg@i z6(-YBafTnNIk^k%+Yan>;npi`H5c@2x}X?g-IG@t*2G zX-^^r9o`!9Gd(m9$B!4VP~|~5(gks>TgaG$l4&!4()LJ4R9mt2XL@K}s*e_We!m)J z1`O(8-Qo?#D8pClC*7(lML9u6Khs0=YRa?G#j=E-d02N})LgXLUz?=en--zkquD>x zd_E3OY!5*#SId8qhjkCdn4+ygdL;2qZbiFe98e+K23;(U{>iT_jX|yTM^Jv~oS!_b zgLRL_&WC!KjSeI)M~&xpl5uXNIoicALi>}Jq6fSqhO5USW|hUHK(G07>7Evo(^f->HdGL@8Q1s zTm5yA=WU~mmgx}4(|j!ARh6TT=S_&49gXbA5*SziI@>7-`wp;^OZT^*0=A_4sn9q7 z5-pHNR3I-483_Mghh{Skt(Zfg@HJNG#RDF?fAazgTWN;uB?#neKLapL?Dw~yim>kh zJB9Q>$En~~7TQD}(X4(=lM&r!Dx%v?gS^2wmZ6%DM{6Bakhi5A`h_0Y@U>S(i)0D( z@*xlPeriJ*kzOc@?u^#jtB|tT7xsyLhuABm2RmWga{WHg4}L+=N7jLkm#HxFoJXK_ z*q_B%NE0YAXfXlZ2_>^p3cQhKQKG|-ppUkh#WHf7TPxsl7QU+S?XU z%>)47v>`fJAM~75QQ)FkXo(y?j{;}BBB|&u?+hwP4JYkE-|NRdv2W&LrF4diBIr%- z_lJJSr$8rVo9~JPKT>hA436 zW-+w&rgaNZL)Br_cKb3)TE7e}hx;!G>TE5P75l`#!+|0eD}$ZMWSii2!L;5*6S;%@ zoolDi;esUeyrmA+o-RSRubxE9rw}Lv@&lpY^5t=SJ>c;&B%qv3(&vlTtLQ@c4nzf> zH`HCoVoelaFHicyKC$npC93HxS0%6`-;etNru7Q}&jKM7yVe0czI_R;m`tE&_v_HN zu9qk!cq#IM_77d8M#}PaLKdkaU*KmjSCW11?EYJpX`#@C(-4*= z3F6^y+Q@wbfgVF2!~M-fgg}hN8YtWq*3o>qA0hUIePZ7+?kedq%T*D>d1^mnks`tr zz69E6F4SXEFlxMf2+?31316a$qF3spu!U0)(?yw-8!8`QL7>eWR->+thbYm{0fjiq zkaqYozX-t>_KAHbtWZgh^-x3M&eQsFn_$|oR28kaCSaZIf$l@U4FcPdZW@T`ERQ0V zszAFbl5&G>sEF9^I>;0HMC*-n&_7NfiZns;!l921+T@3W_OUPQ6Z=kFsR|fopbak5 z`XiSrBR;X*)DXiSY+gT$a#<7L`cdiuz!j-4#nm;ZXLC9-2es z25oYdL4O0=*ar56ePZ8P-kRwd@az-grqsX59ehK-h+CzN!r)%Q&tm&?B2ft3y9sOb zAx{Nu{2>#&LKEUMP?#BkKD=l`^=C^_AoNp=726=?ut|XFI_-wp`MOmD$PDmq`5i8zZ0lt!P2^${ED`Ptno=oO4{(T;!(bQ4!=LZ8O{ zdd3eLrbH0H}}xR{hQGSsPoh{Gf|r7ER;f-fl?{zgCX#eJf@O5 zLE{C`jq_#T7tU7?bfD)@XUQw4^>2e`-aJ2@^n6TfwNSd(?EVQ5J;*N^Ja>xWlS$I~0=-qi|}8)$)|0b3T$0Hu3^f3h#*{;ZBNyk?*9)@h?m+MNDq80T7fC(w;^ zCFnwF2Kos7`psh=I+`1fisQUcrk6U3g8rVmN&#il4NwO3;S4X0Ur?5}E=mO4FI#F! zp9p;+=dCl`IFvz|hSF9~19{#49qY6Z_FWjLmA(u1D>A*b`_op+pdyY3)c-m3r0F6$ zzb6GHLZ6FwCQ!<9Nt6Y?Hv1T&Z0}iQ9N#xXDVsVIWq|$s_15U|&9i7nm>p`nbpg)G zzD0!_Tu`!`An5C(j5V75*eCYQ4bTeY!ZSORr8kET`wgomq6E1A;-D>XxS6hta(wjA zX1HHAgI|2F{2>9RExzDm<#3b({rbc6M)bM;4#cq@=+kDQOz?$$V&6g5Q)CJQ^*V4L z$nsL}&Gy#mhq~?0_A!J|zdwsQvp>u0A0Uv&Hd5V$`j6%?`)^%7+@Bw2)1T%smgHj} z*cbMRedA}qd~a>b-N8EVir4F*BEa>}lMdRm-Vp7gPeNPZw*XxK8EE%<1F)-uun+7D z`^3KCFbetny#cTkt=A1G4c1973)M@*;Xg-O>3hSB)Axp3ks;qE_JMuzeVY-4AO~*| z{6D_1Pc!h1_bIf1C_q2=DU>1c*Dg^IlNm!0lOg<%(hm%{UNNRWyGGG$N6DEwCu#zbNRj2P?C62R|o zMq%t50K304JZk|3{Ff0Q7siOOV$A$9c-zQPB4Pa#un3;f{>uqt#8@%rANa+XuF6N5 zZi*=IzpT#;?ZdcUaT;U9SQ&20#{fUP(II3uxU1a8{VN#q{`&}?YvK6}<66H&kqj}` z4em;}F?KvYvD~M(guy$V_3%#Uzm5FtCm;^h2<_d%M4|BPgx_0XtQa%K&d1Mig?*bP z)BZbXu>uNkoCtd^vhb|#gBq(3qohD<6tqa5#D}pC#UHgwtp&ed8~VQNKNSyNBnSI3 z3TRh?H)_3AiQdBgWO|q*ltqTDcZ>^T#hCf^5AVrZ@cTNLv;Jd*>omw&8YKrVK=*H) zC7);T9#Q;SGZgGBi*P<4AI6F?^YL$_sI|a7OqL6m?LR^57s;ZXah|C2<5Tn%sC;KM zi6e9|?Cbmr6UK@$^YL$jc%%pHzd*VERm6mSh45v6%^qXP6qFHSi@tt(M)sG4wew&P zT@C$A>TzdpPhUdg5cP_&--UoE$=r+UzyL@aI zE5^*npF~q{;jB{o&3ETR-=p*6EZoju}lFS*~vzQ30^3|ZQ5V9 z$JgJmY%1)H%EDf(6xs;;7WEg3(PMZ{jic$4b;0+Kv0}`B!#}eHzpKaP`cnd|Y!4-L z6xtS_IYWPDUl^Yf;C`yXaQ+K{!94 zP1=uIsrJ(*#+pQ%`4fK%eOAjR*eAi|`ZJ1LCXX&2$VAom&ckP4 zqC6B)W{^2LR=`FNp`YM7c>sGPTOu4$K!1G7?L-V5Cr=rqyAJhe7W`Fk^bho|& z?N0PWF)N|%pq_@x{yL7aV$6K}S!=ag5@CNO4$AdM6iZP>uO3`Qr=V>k0RP#N1ehl~ z(YNl`s9@7_@ICDh_4&53on+X{`S9uv>UeP*;*zk7xTmlxYj^D{)B+V7&>39G@E0?G}yMSWjip@*=iwP}^oAL?Tpe2VcZ?oEJ>LJsXQ~ol|8c0ypT#j&jG2#rE5z}+tf6O* zejQJus-x_nd1U<;#4Le*f9M0a%$_ioL4EvM{`b16l9of1b#jRHQ%es7< z7%Rs76Mx|BmW;Kq*9?1!ze_X?l;*30-aWaF4rHwb{K~&C`+Ii4M*3P^@}2AJ$Mu8y z!24aFzhehu-3plb`16AeTC!l@Hx0`5N0j8Lj9TiCp}ON+;hhHT8UKm=uk#b3%qI&X z$+hu`o#7~PjnY4C1KY${F=jsg9T4B_htH(V`a??gQby;BH^P4XO_aG-2hQ`szVx5y z@bl9_E{(2%+FR?O58i?MZ}vZ=&$oj^j1^-h@sA-U?+Vp#!DrqwVgL7!D4nj33ZoaI z-Y?Hlar|bB^r0IZ&qG^z$3~za@vUV$6K}d&1|md z*4&nzp|epQw9DTS$mhd5qED}Gqv``mC}*uYDYG?D8`W2AMun^efJtYF-fXl5a27?` z!28i_&~IL&irlq;9qav$kKghOve?&&Z2{=ZyH==!SE%l2CX`_&!dNk8KK^|W-xa10 zIA{NYwnIACPXis_>W8{NJVwPFdz2RhXRrfiqRJ8u`U3BZxqv?p@MBpVZds>>j%InI z&u?1MS9lINn(al}!1=$n|3~RuDDTOI#-XFzDOmMdTP|9*tw#flq-n$Wf?}sxHn7)5OZvcA<2e1PM zYzJe-m@$4?phFu?TXqAl5b`h;fbZfcOY{})o2ud{w9QWyZ4cB$CDB&s&ZT0qO?y8* zh5mS-wB2;E5S@TB?Sk^{To3Qxp)c}n{aLsxLz#4JKq+cLYIw^Kt*M!MF8S!dES@PX*6nWPJl}+;2X;Yyu2RNIwNoFNMs% z;lo%lW@`w7v7%^6i8Dj?$D~~ZfihtX&JKTuGjB%3$vRuGRV*XK{ zpLu+le>Mc4TwKSD+30BMGC2Qq3;I$IYQDG&6^82k5)bwT@)#?|jIjd|TZ42cClk%l z9?1XC&>UC~n4q@nN6{yk6K|c%C)2RT`As|+E5?km;|s>2kw-R~m192ndlV?gU;SOm zze=tIep^%q{iT#;f{Mc6JPX{Tzp(uS6UK9gR^O89kolgO1p4kg|j~*flCW*K3i};mWtgHSGpoW zF_LzB5V={?;ObFLkA^qrcZTjmJiEw8jFZeWQ5(Dt2XuF|p8UW*8_0NcE-xa068X8( z!_I)|5F+=;Z?z)BI-cV{TKYuK@8RlJ z!vzwoINRor3V3+=V#QE{tLNKrrY_RoZ9^&Q!`IL3iGrB#(&! zSETxajv4Bf>j@Qp?s1xu*#G^Mwx_t3Fweql(^h6%jjm9NwxGQ>apBqGgi$q)AMQSy zuA!o$p-i_k3-y!@*ekH;lbT7@=&W5AzRy3EwWl(1YTGUG&aibx!Rzjxn5`dr$1OMX z&X(1eJJyC=jni#;+2SsgHhpj52m?=XrSaPu#ChIC=)9!9=1&&Ei{JHBC5=5=>)^3r z-SeKj6u~1+UM5hac#fdp=FEV_Qu%P0#syMKi@- z3+=JIypi_6Ccy6~~Uf$lbi?*^y8CwEhlh6`9*RW^*c zSP&4<_Wu3I_wuXS-oF+I=z074g;2ozzO&SYbdN8^vru33mf91n_>Rp{pX9U-PBz#a zFWmP*#X9rzt-HI74AlBUpHJDjEhhvWyEuH|)x3T7CBb0JF?s!S^7t1&kPQy7hasQ;YC$KIK<@pMF@G zclw2i!^A~_%!xj&A5$_`q>{IUiQpCSKHv6KBcV|X-=rI;>di6U8s8Q+G5uZKe3z17 zO9#%luX-!%N`t5GiEfrA#+&D}cDiI3p=RsVz4q^}^wt;0`L?#6nq|89rES)l+Tj9U zqzX-LmsV%Yn9(?oedVS8{9v_b=Giq14_tkG(y>xlb?gYCM2YtCRU@>CG2eXm%@Q@( z^+07_&%nA{*G+HU9k%kITQldZCShom4@|^@Ua@ji+9JratQH$$(p7!$qxit1~9(seaZKDUcd} z;)YbYyr7={qm*yy@j`o)o~!vdyfI`>F@0QPA7Q?euoYAiQJo8DF)ODY$L;aBP}Wqi4Pyy_Hmb=$T?eo14|zby^^!V7xtb1e69M4 z(j&9PP64Aa>&5MqMw>EvCe|IHe-Dvk^a#hli5H^Yvd?9wN()|(=NPx#zhRfL$yQA} z(?~_o^Ri&o0Wjqa8t^Qu%L=|qa1^5-}7HG1D&Pm=DfShS{rYL zw%<;0m5di`?p+tuq%FV|uFUx6`>0@dbMdITva_S^Jbhv@AQKxP+x_<4h=3hyB4Mns zZY%B9jE$VIa3k-?BB}9Xh$xeG&NFR2$u9GR9cHFe5>v$EZTAM3(_R{GOXn3?w+eaJ zjqALz$JlAVSYKbI99ulxJgG8JYTk$ZIqNq+%_!(*)?0P23PhBLe#C^0*CmXut~sUAby+HC zrm)pD;ko4&jyLSgwsx7QmMPqgtW{1nP{Bi@EYInhD>Um;cV0|U`yR_FXO~)6 zPEz^!b!pR@OUr!CG-_jFb2^*paj}OkuM@6qzB^|-u}V-uq%i%`v65LgC%0YCY&X5) z7`~VDO=s?oZKbtgR?3-iF z%-*O;(s`Lr<>ck2muY>Ca9V1UY&Ka)+%{ipd1lhEwyP5_MU9rJrS=?HMVmV@Z9&xGcIuosTu&uDe z>+2=4+Fc{A9bF|)dv-G^xvIbqaKwuBUVe8V{MZNogLK1YW?-jxg@p8Uig@#@dA(CP zGv_H7O?6~)jK^KrKH8!(Yjn?tu#h#cuP7bcZ*y57U81lt4 z^(za;wvCTjA+ktJYSsZ?(=v``%Z#Oe} z&t{zJXT46GAv^l{u){3&oYbV|IhXh4jvX&6E?~0jX3_>>>)loJueZ3lY3jXeTHZHu z`ugFVmpY-(Uw2G2I}~R$=Kb3-{uiIU?T|QqRXcN%oamGJQ9U>3onCta{_V8IXGIU) zt}t7)R57%>Tw3Hrv{BbtFVBkW%n`HQ-)p(3Xf^k`QC?kKwCl*hq8U2tgyvy9;c#xum8INFHu@C(+QuM_B<2_D$8@WLrE=}5|Z8Eyft6pjZWz&Ay zmbQW8YYijzj&a)BY;O8xg`RL;Q$fmzvDJHJMvv7h{W6v_zkNY_qNVzJ2?@8!*%9-D zUve%v9AyW~9BsN|SGY7we#P9;@7)b0=Ekqozy1D2`eGfg-R7tLzaIFsBcnShng%3ClL;&szdh9o|iRbZmFZq_;V5r}ADU_D>UOa~9b<^-@FE?F;l(C+_cD z?f&-OM@o43i_o4|8Si5Q5APb;`B7$$so+Y{oInc)iiy)`m3rB=d#^9_WGvXMXgzXF zm-n2_+4T!Q&(-;OATKk~Zd-ruOZScmO5-2s&;<`{%aSgNUPDx( z?v3lNCk{;8RMWKe&}Fxt+ZWQSWG#eP3ZkW}Yo;%-V618hG} zbV~hR^-FnUts|Tc$ZwERJ>(yMCw->4gx=ge&+^Q4?IN?R;)R<+>=%9J4l6G5vNm>p zdqYQ5!Hrf{CpE$E)42mj%<@^v8=f^;e7v2v?#$vB<8q3JQ(oQY>gCT|p`$#0f`i>N zbHmpn%U8uf3xi{)u{Pnd3>>1zt zav61()#wogi=aR2O25A-Ioxc8!BvNiJ$vFZZav+yNh625?W9oY=i#GeJXbsnmVNXn zZ`80xlgO{B!CC^l&nBl%8a`f&HPhcgY2fk6!1!ptc>*5JEtKay;(jJkGPzH_Fm!u; zx8K!2YM(S})JDmQdBLtO-ygK>oxP@gWwB*#^0h75@d*Oc8y{W1GfuXB)L~YLveGt+k>6XR zeGeC2C)zj9deCfFUKKG)XSlS$mfI&U1)7=)W(;&K?ipx{xUN-~;~7wMf1_KY{@fMb zEML1kjl*G5;p-yhJ1Hwz9%I=RIor(EI!MnA>z~vgZ5GR3K7YsbR`H;L|TrDR#eu_U16#) zYD=^KGO;%Uv)Ep9W|Vman~obfKKH)kk#`-l^tW6%@x?Syy!>_1LUm11b2;n!?}4?- zQ3X-PvNl)O$ejtCKa%BNt#`knLOQvZd)K7W*Qh?I=cC!`p1z|imd%~L^6;%it`hUj zr<}22PPI@_9Ovn@vm(RZei2n>#QVGYOfvzeQRA2DPdlb{Aa?Y)dWI&aa_mW7>{1`m zfKh9$N-GQurfm99s53{Yt>(a$U@9>yx_p#ly#MO`l{Ra}X>nHGI525?*@E2`wgmfB zPhIlsOMN4jZn<#h;k_!!YiXmJ6@2#iog6k#)VJg0K>gjRSQEz%>lBoymQ^!0ML$2G%$Sr;LObO*&7mi`>`J4bf1t76}nhlKUv~`YnC<{KVqo z?uD!N#`>^S_LlLE&(2cPiuO#tJ}>X0X>V!flAyBk=9k%=eBr|Dgpt32u#eB%jozny zSJXbOdKSHTbmhV6$r>#&?NP?gw)fIf%wM*p3OJ5kp55bH8l0qE9<*LoCw9`dc>x+q zR-(auZ(4GlwqKOW^((N*jT`tXtefcvX{erTXB4_hmdK-%Zk&o~rql zPuOHfyAn4)I@)wek?sDC={4?4gL~J{YLj|5+@xt->XbF_+&OndtK}WcR0Q6Qc}q}- zD=a7yes{aVLvG@t-eSXoh3dy<^nRze?K@N&WLGYsc~Qf0gwIrl`1rK3+U?>8Md-td z^i>L}$0#l{4&?8Wm>RXpIbGC7&vFgbM6lE0q7hrfZoh1h!~0>2)(EuGuB5sc%t*_4 zy7kPY(utcrpWFF{tW}{2-kCCTgKZ8+dF^n8u-?0t$B6U#J46&Hk53Vt!sYt@91RiaOhD@A11ouRo-h@GZ*YNMp(K}F*{ zarF;v{nWB!{k)~2Vi$#9%uc(RYH@Moq%L3Q!_9|Y#~bBbNLH6?qpq35THmHI&|Ckk z9I@0URXw{W6&-M=F5B^3mGA*m66*ng=?8Q1;O8A?u)8)cj&g7~DFer)*BbR;X6}6!WFig+dm3aq-+K8H& z(WhHo+MjW#(b%zD-{~ZaaiH$jjVooJr)~PCApS7<8~gmJ)ydQ3o_`n-W2i0_Z)LG) zO-$yPi2{8Za%pF-29rf{ z2Dqe;Fq@izn3vr~KGe2pH8nMsp?NEt8^veH?>%V5o{~O3r*eCHfphD=BduSg8w^xZ zg0h8koyJC)X>O_u-XT9AVkdZ~Tt*^UYE&^3Ez=OF%i-*;mml|<@bi^Wjr%f5^y`it zlSWX}rYqkP%e;Me^pXcz@N|!zV%KOqr&XLrZaJe0yOPJqNGwK)fOjSsfcaY zT9%Y-K5Ej)aZma>sabV(3~{LkU(3`LjK|wA)Xa9`#P3MBnNWQzFEn=3>V*es@48#=@QA7D&Do&?!!WwqBo{l^p8o< zTu?l_Eul)|*)(&94S7CyIH{>G*YIK`o1HgL7Eo+e$V{KySsZv!5dJx&NS`Fx;cB8; z662QTO7uXV*pVn8RW7?@%-O_6D{>ti7wa`oHT^y=RfLj$n4>ITsOG(7_uh{&!-~u0 z(lULP8uy)1cZ__azPZIAE4Aq6p5D1Sn^%d^qxxE&XuPIg?ftB{f5FT1cgp&gu`=d7 z78s@@&?Hmoa#gCZ{se=ttIU@0U+JaJn{UgxvPP|XxA^Vdx6RkYc{{`vzwmgw&2{rt z^+OvE)(%rUp;v0CmpeMsWa{LOX}N`QYuJm`bBvEHJahcx@g=9956o6q7ntUtCo|>h zw?Hj{qtbfO+g?4Jo+tX?;530fHetld6S^Y$!pkIN>w2DYyv>i^I~{XTWx8_uv6qU^ zM$vc64{R(r?JCr|a6+)x!1GfGDLo zQ%_1dwh?_JmsR>LTPv~5Q%9)$$ka^k#OE4}Y+g@L=sAfk-n%3EY<0d$PCVVQ z)2tQFE^9__VM+`vx|o$5P+v1+N8M=Ot2v=%R#vv!V`Y|4zz+$RA|z#t?q8}1w;5xm z!m(HoA{;YXiz7CPHo>e<+*V;)!P~g@-~}P?T_itu$Mhtc878(Yp_c?ug{R+K{K=eyF4{2;SSBy)s- z-@9RjUAHp#e%$ie=#+%pz@pEO6yH|8%+){TX?e=$c;x+lmVN02#*2v-GA&0-z0O@x zi2nN8;#O8>042(4j6o}9#6^k7XP!6uoBC@$&(e~rD^u#RNi)l1gVyfGEP^VdH=xvJrc%y+FIio?;f=u+>s~c-(0RBE##tc zId7wU1#^0!wNm&@m$CFE zpC>9f8XeTCpc_(8b-L5%sziQb>4}-dxO&M*zq_<8Sk=~MapSTXLJiqpW-cYvRf=1GrsZ*{+*bk4f>pnLtU!>emYHod-?|L;k#?F{GqTY+5JI*ED({`BY z@@ZrDs2vHHrBlq3j%o>a>UL|m7cZ)}Feryt@KGR=WfBbRlhbv#~IzbUM zDQi2SBvVDy4b*%(`OQaT(UOu$TAe2%?oU`}G3$`Ym#5K;`M$?LH@7Gn+%QkNY!W_u zxB2JVp7DL5NQULPMC`JquIk080sT5zi{KCM7Sr9%1{yn^bzeNDtV+bz@iOnDabYE) zG;8DYn^})H`)?ShG^eaE>GHjAx%-SY#Xmod-&t6FdbwJoGbJ$4+_;>&MQDQUR2CH>CrLxytJF8r;5#{w_ zxS9JY!;2PEI;=hXi=AwDg;cngD<`ekz?9#*j;eNZkK)ZJcZIKqw{vpKT@`hve!pt5 zpCWSTY9+L0rqag;9=YCvr71HU4)3sw&ebLEYwl4te1Bv@^_NRyUPQPY%`!*}+jsKI zrf+nv*jCN4F5WATRe#XEwPE73(8r@5^$ef6MSWCS?AH>rQqyy=scB*S}P%@z`LaK;5kM&vTA#$e}!U-n=Q~Wviorx;ro(RN&5^)+Zp8#zXFnJ;t8w_**XF9^DOZqgc^Rs$gccY|AF94Jjy#~wV@ zrY%|U$z`c%;q_OO-g;yvtP1T*bbWRtH1g5o1eeO7f$vVkUwoUh-q-%|-8p{igB^93cy%f$=Wp3rl;h_rD>JR*s`@2q;cp+er$rWuY)xQT7Sa3q zN_Kzz&{2DO;#KF#NfHNE&y#zc^X=FF5w_)2VCeIX3shy4H&{A76Io@)2RT z?Q_zbG9%nNCYrBoab?$zvnU^1I_&D^TbVBuv}4rrBnn?QQ^t9|l005=xTDLdG~>#y zW7RifL_PMlKk`?t^bwj7h%USqKX?3@Qv5K3N1qqASnbtye*GwIn!VY=*CL042F4rJ zAMnsya71mGO39_(qwduqijI5Q&s`tK?f$Ym?&hW{*Md`#S&!n}#D{qbW*pp^k$gSs z-p2QJsXS}Wg-Zp`LT5jjBbIiggqj)?o*J}()}j}C;BtCFhEqW8M+@(?Fu^^V&J;p& z{l?B2Vx}{zGVfR4eXFGvzv8uly0OgnbG>DoPFD8aZcTPLD#n)Eb%rhx-Zq?LQl!@W z;gCn-x^~|ugx#D}jZH*vs?@GKwar1%xuy}aw$ zDxPW7Ik(#$+0s{*bv9bK~J>RJ_Yc*f4 zzuu^_t~o+X=h|JPfzMkewsYt{N!w*^@pQAZC|G_=Ap~MMWb9*1Or}oySNti zaA#-{!J>4NmK605s-q*s(=TVXrUoc{y!u42hw|#GoWzE%qRShf^d8nU*zizrUUfND zY`$3y@%&4CF3t9Y`UmH!Gbbf4US(GyeR;$3T@PCh`NNXT*!T;jzj2sdP|~fM($tvJ zV9_esFp9T(*W~POdgE?k8KF!QLUw`i+mZ#7ITr}|VJeD3l@T-P{@ahg`PP49l=-7- zmrou=K^0mCW9664jeGK{?VCkQL2-sljDXEC!|qQbD{d_=s=KMMZK}kF;+(*W;zsvr zvo4+;c4+B7>k|<{w>7rq#RObQ-7!I6si@fz%^eZy8ix~f=2aQHHb{SH_CIzfq>*xN zQ$e9=(L#h@yb(k+5VXaR($Czkfpm&h^N}(3vz?IqR$33Ix6QUT@ZLu z*2w7UTE6@Hh>o2fZy9?uHrl>>uTh;fL813*-6**h|YlPWO0P+IZ9 z^J%d;#fG(?rb|1=SbD3)Q5?=457C&Y*Sz%Om=n(yuAa29e#WA>y5M%Pb~mX_yS80g zcmD#rKcRe9(}f)BaI^fXr8!!~?Fu;wZ{Mgjo~b@9)%K!#+{T_L)p>zBd!r&Qj|`B} zQy%EiyCpU^cx9pVMMENz(rNzs>(&MTQFLQ7nBR6TcZ^_-FwhjNM zq^pjL^7*G1f)BpTe>8qq?>pBz5nm? z%sl&?!5oGGaei zZE`EHyl8oW7hF?rG8Fb&R{fxs=U~{`7B&jVzj=Fdo$0{Zc%r6CuqFQInT)Y=LK zJ;rldN3*-p^+ul2mdk__6;7>Qem&Tgw1(vyiJ ziQW|S>zfW-f+{pREm23k7I+d%TkWQZag{y)yf=THHx3zce5@p^s#tSq3GNG~W{P5hNEcrh+(&L>Oy@7jBtO(H?-G6%6olf-Hjw#PUkDwuoHw9FE3oeeA-$s z*y?gN6BzO?$Z5N0!ZLCtD-D$7v=ntP>AfbH!z*VAgbpOo4IpVvn#z&kbU9|@Grt^4 zF6(T)*D|@3Anlf(?m9;z%CY$7BEOoY2WjiBbxKqL4V6_D$8+I?yjc&6ENmsZvzSoh z;c-(oE^cFtf{H);#aD|lD=B1ZFM1tQwgza-F(q2OpLIi>YPMaHBrq0oGl0tW)>Hec zjvu~kHdKD_+>h1DSt~tNQ;#+;|DyG~qM;;SU}dL@TvdH=LG`+CWK<=%hESw;2vJ9a zF=?QG4MUiW0xSrWoI|5&-CeJ`aG$P;(l27Hi8m2aUp~G=!+Eg}e`4S6;J8;{LSHJd z9u$%yxT_Zgg^8kINy7QGisj2EOX9Yb_fuedtkP$Iljtx=! zua)ClIE#PlzbuT;5I6~`bdh+;gr*+UZ(qM1+*&l=(1oDxOs-|+ z=XAK>RxvRgT;#F_BtpLKAx5Yzg$;B+(D1yV($J1+tf;TZL|m7jMydPeVzXIlXi#<2 zeKQe%j@ohb-h|O`*pK}8qp7KLy4<4ozof67+ApKN$Hd634R`O)27VtkmywH+n_4ms zyQ`IjK?m_{9ddPGhUSccvPSF^>n_&{RLml5^{dl$wR5F8c@2a_X6IuWKeN&>2m{;3 z=PO%Wzm!~A+@P9(j6n&!kipyvMQ)*XE&NK4B6+6AlP?{*bwO`NH$zSfRl4a1Zl3PQMD2_GSDK$CWd+!gTz$&QC%s}4u0 zr3zsJaZ@qS$3s>)j5D*X;0xpYJ2EPU&tm z=95_%|E*FBj8Bg1jb!rZm@pe?g*8v%w|#FXkT^dTFcH+IJ%N7h>C@?_R`}VEM;{3V zc0U-R0De<|jY1CtyJAGrhbJRuKERx9(bu}|Zoi_}1<0ARLRfXSaQCY2arXJk+1712 zac2zr!L^}qcJGb*kOvX89==JWl0MG}2+(4@*8quW{b|@T9!HtKRMW{k&>6+Y-{TL?t$LL5M?yEL6j_ zXzd&D#x6abMTniJg%9M)@US}446t#UH|`W90H zx87p&NFwGt3}PT%@gG0<5Ol7FeOqN=9V62rB-xRcJ};sL9Ti@TqWxh>dw̤om~ z?bLTe^xW0iG{fg6TrkR>?H*$iaA%wH5{QdBqmhs!qiJ&UWK}_t*AhgI`~r{S6B@80AX~ z&zufMqRzW~fQ{ZR4Xql@>~gKzgF|KmNL+qRZsWiJ$7(BP`@K~2umI8KiCSOFvMUmD z{C>%esQuM>;eOHUvm%&p}j0W00HA0flk=ztgh&~wdl1i{a85jvcbh#usifUHBVVu#F`52#6 zcD9L-A>FFs&`Q^(rP*98ed?%mMhEL>edH~U7ZSbB?0hWGNmA5lgf~u=jChpVj|O^m z8+A2h-dqr?08Remi#831Qrt;c62+sv`N=kNCtY7ovLjX^`I~B3rmd;4vPNhfGgzxPUNZ% zmfF6W>hJ1_VVdzJ*6r_Nl8pXX`tG2M;&RI*EOE#vnCo2T%pnm(jw0_+U?t_|bYWED zEGTVLsWHNySdZGXi~OEf`0Gux54*qzovwX9#(d;!@|SGssL0b%_)}NpGHMzbV-7m2lCP3MBHi*@Fy0Y{Y)} zu$4v#Ta@biEaqF-fIvQzu2d%i=YF@*ae)yzu!w9pa16pvC*Hs(rg}-SHsRvzfSgk0-eOMU( zooQu)?Q7@qCRG*2o%@;1o1Gj8dU$8CYY3yZPa<#C-#Qu!(sY3amuDJ%VpDv{hV9{F ze{m&zy#v~7E?GQ1XWpOuy@Zp$XqEf+$Qhn_uQS1#zB+o>ze>_PF+dj~yH>bqb+>zckXSw9>ey5cC4rxc~ z-6=_S|A-AO^`I+|znscQd|iVYhg>fIJA>`M$I}DU_hfRjn)YoqScTnwttmFj<;B_{ zIe;sIeaV=nlh(LAZ|#?xLYn^1(N5P3VK#OYA?a3SDc0jV zV^j0JF+ttkS1_`rj|pe15lIM!e#FFTsY6l}lzb zk`Y;Y411q%I<>xWYWJ4n_)wy`fx}@V>i4q(L{5(>%Vwc4Aw9B%$sNsl(e_fE@W(qdDz<;=-RbU-i{<|(QI!qGL7 z6l^g)C*k!(d3~O`8jfOUARjwPaulA<+*)1C>THfepyQz>6as%zSVIlHf4uCHOI<$x zvlskjeAQSrAJP&d78KQNwa0!W@=W}x^~HLr)S?fOY8jQ=oXLx_(3fW{(Rt{9S*QB? zI>;JrFh*8*i5PQwtzEB;`QD2maO#THunBbDt-SS3J|*N*$oiCp^?egZe(S9#dJ)Y_ z?#4%CDi38kcJcmoiZELETW1X3yWcv4fT8_#_~1Eb4n9voL;`Hy|DZ+ivp8)k6mKiT zEaI`rmaY!VIR0)NFi7*ALUixjuN7T z4$;?hW#m!)Ky}dnQ`a^FT-PZL^oIHYY=UzCOlFzNTy=!ZB6rb~F2Wyjq*fzFK zBl8&^Ja_nd-8Ct)K~nCROl8l+?EJwfBy-fH)sV~5aBJ5{jw$ZoW#{|aJVRC@qhm;t^gH8-$<{U{S#$80 zTUGe!Sq`l%$c2nzZO}1jBIB{b1a{-cmlt=Y$2u0L8DIzHFST$?%HJLCjsvx;m?yM? z?dN#X#NJIu?jhyRuwr(7u-dt0jY1)e#Giwun!Q^wP<(Bf=Pkc~E2?ED4DP#^pOgi~ zEy9V)ZLqXRceM5TdYESA7KJcw$0MU%a60F#^Kg}ga`O{~b&HM$4gly~r6d{f^+&S? z_&z44Q{7U5Q$@Gfwdeu}!DUiyGu8O?A5z|6j)$wl^jzc94~H(q(uBCNlL{~SKlQ^z z{6EK&8E;BSh733NPBBQa$R2l(b!+;PA3~CN^G%gh6!6OB=k)i;qT;3yqBSGoqq|21 zdKhZ20))i{jWn%KdIP7bcY3^bWmFi%B+x*5VTOX7Z(<-~=-{4=<~KpzQU1L(9Klw=* z&gf50rMbhzD7)gxuiqy;T3e?IY5|J8$d`GBfJA^I)yKYf(PtL|tX6D7k`hcAS=Spa;aXf#&AZ%*rP7<=NJ@W zPL#GZvVQW4ro+}+L2%cVp&xofpNIbp|54s!Q3IG;ReI^NO~$a$AWu3;lk{Y6)7X?L zzphRwy=cI#D)Qqu@!Mo{vwlX2LoIFs8BQp3Lxp?)K8ncv0?zzfJ!NbSzxs-417E>eEc4i zOHmbA9#wRi-I9}5nKX~o?HYT$4a~FNNEH1vF3YR2$Dd-wfaa~e_|(VxW4$Kz5rgbP zB>eAp)o$jM72kEfM%>tljLfYmWUYR57~pF!k@lWUBFoL%UNorjJYr;W4K3yr(YcF-aaW>pJ z4^s7}Z{{i(Q&gcR1$R=nYnSh;nT76uHqL*Kg)sZFZV1>DT(g-5V(A>odaV2H4ohR3 zKPrWX<7n+I7wt+r=Ew}~acp~^?TYKfJ&UX;zW$2U-L?0EGCK_Owv(X_4{qUyHk$j~ zQ(EfEiTt2<+(j!cKCpMHuN$Q&7@z;`iQ__0heo3LXReqJDS{ei{g6t*9nj^DdliX2 z?)xn}HN2DW`P;9(EdkyE9KJ!9_l(Tx?MH`4fwl{_&sh=zH>dJ8oEt0Qh9Z+bHGj?- zVFDQc@zQp}P3Tm?k=|}#LEJi=*zjM75>apWIC%?9dZteluz2_LHy|9*0@v)AkT|k; z!NEm1e2Pd+yMy3Bkk^Uc;yC0-d}b)w>Mco}nbh7zA#HXq&p3U0?Qc!x89rbl7K* zTG@WI;sZa{vF@{gyZOZLrj`_efL>D1`^ztDN6BXws$jjJ%n-r5`)ncEm%k$Czue39 zL@#Z%|IHu2Y|$x1i}^B`gzS^5i{s`JCbbw5^-e@H;)C`bs8ER6%TRg!T~V{ z(H#m9Hr>}#0GDylg!#M}ADJWxLDmbHuz7!WbOVofO1lr9|AO$LG&(KYmUThjpRC9e zO@AB3miLzy<2GV=MnO1LHGOTV@$;>%zw?JUk?J70D$HJj?9(ulRxjvW^Go=qIzRsD z>3PVYh=#%|{mQNO5B$9D&B&#evnW+Koi{Cux%NCC4(?E*%*6ZiOKM`;kU;hETH*`k z2A0pLwpw60(FiC;Uk&!3G@JR6(#DpKp5h3s7mkI&jZJ_Z2A`IpRtRTQyp%y&;WXra zH+6Umwq{l~@n^Tp`Ob#!yX>={H}V;Y!h-XUC>o?ZW=A2gAbzT?-@?E7VSqxpw+g?) zOoCQnT$P&ESOGim;{%kQXL4lMK}6^Unz9mOfxIBQ78P-%dQQR@nuM(Hvo%Fb&$VM; zfD?8Bx4iUNjQz4Xm|P?tdAllSQ?I`1nqKy($Iu`s_6-jJKcv|BSyw(8V7)C){hX4C zf0Rhiv}LdnFM!R8NT1hdngd2K1JF$Xdj|y-r9(&NFF;RA&QSmRMLgr{GLuKRWZcV( zANA=*Lc`L|Xe+C3)czOoT7T7e=+0Js&Sc-j3ZOMGqG*snU_=>9YX%LKV~8nkIX>CD zP^EXb9D=z!>t(9}fO{QQc=X*jA98;JAybm#%-udNX8zx|RpE28EEqmD=wXw0YVnp~ zuvcw&K9LOC!RM6j2S}{zjh`J=S-ybG2*BeXk7MVQApAEPMP)=4kYps~V^10)W0fEX zs}3!HV1k6MgKQITlBWrKN|v#!S5eT0ktl?vE5Ar5Z|E0>=Xrr}u7c&?R|WPODrW?d zB$m==J9JTyKoatfV{$N5=C=fJ~pQ6OjRx^NoMK^8fuOWD%MC%-Lx&x^>rwI*R9einM5KPUI^W*o*x?l0o#3a$@? z*-WX1=LkUd6lvWFXJ7HeB@?Q^V$c2hO@yTV*il6U>)xhbyba-R2#`K&$hdx0GZv7${zw`1ok&=1e-d1 zqXuOkh}n^VZRC{7$ez9tf-Cgoz=~d!cud*n`8;h1Dm=Dop=Lo4CPK!5vZ{;&uo@ z1W<8b6b2MnwUzbs%Wq7Y#CPW>p=2Vq$B&E$!*x8&sFh&_N9pbiWRUmIv+g#3jQ`55 zT#N2{owIVC?bt0TJmQ-Co1;PQ8L5cXFB~WJ4xL7c#^<`66U8fNpm`GeKgk zj$XrT&o!a>lZ{WjxN{Z=QZq=$>ntYw@IfqJrxU@Jll}m?B5WO$xn+OHakdY{{~@?a zhDZ_H**))@G478V|l-n|ZnYKCpCjq{fTwbT< zrv0^A^}!sjzK}AyxxLBy;@jmp_eXqG-L8;}j1NickXj6I?|>p+qNR&BuMG!#K@a}m z5l<4wx>M(o2C`ZgbmHi-&Cb4*wbl6AEwjmGNCry=$}@nWrFggGU_@j1&y@N|K|A8;o`5k|_^@ivhk!6S>PN zDZ-x?)T$o?9sx>cxEhteqr9fz-D+C0`ex;WbHDz87NGP-d0@C&@WP*o>bqaKz}N=N z20BS_Z0rczMiC;qhVnl$qgtntAlvbRi4OD_1-N74J|GPZe$3i+bS#MF>rPK_6mU6L zeRXX}@>L~4D9*Q~b-g6~7?~~UOh!p1+K^De4RjS?&T)#*+;&z#6I_<8{?p?nV&Y0V zN!$mMFLn|@4^dEbmQWv24+9tBz@l|NAIMD31kNx6NS{o71cR18F~A+s;>c1uZpj|8 zqysir5fxq6yRatW$@Rl0zb=0v@QVk-w;*^e;L`tU{(%N7(99U)p4gS6E$X8`*t{y+N*YpIpzE`u*VPG?f`Y{U6>8OV5}cA&do<)g~+VoQFVIx$6S0RU%o=;dYG@J=#h=#22C|JGT(j($brP)Wyijwp_?_ zKcIyG$z;~N&2d{AOo_`M9*0ljwHjQ8>p5O>v31b--~IfW5I7tx4njpd9U|R=2#I5H~8k|{N$EoLhXah#3$S_>vH0c^N{Y3(8 z+^*bET3<-6gPCwwZYSq{xZvbwNYe_Z<-QdYq2es8(`-oq zxv~}o^Jc7mb2BgCLsP^Cr4HGzt!KC4JNng;dh-b}XyIC`2W3k+7hR};J@PrPf@pTx034zT(ekN5dN-%|a9^7LE-MFL2S5e)Cc$h1D@cx zWEtlvH%-s%N=)(T1&mTWyu6}9?fRljQLX_@SoaUn%i6D3u{=1l2^R5pz+Bc=_$3$b zD8RfsRtH8X9e#%|8j3*x`)HB|kr_eLhXEn=6x6%Nq_mrl^mssdb+a5Lj(4IHrTVIg z`_*!&2as|(xSK@jtBm(#7VDZxy@2y&Q~ zwS9qOPuhE_uT);VcxgouYr|&k|C|R7p=-C5YwpwE(ZlP+VPb#@ewJUew+zuC>lq(X z(&MSQ;~#iYV)_Od*#ESK_7hsDo~UD^HdU0CXI)=XE ztRnoOV+ZT&*bjbrocHXP!~fn-51O_XJ$ynei&dJ4(wDGMpyQpUAYEb9o#FiTDWo58 z>7?%%ez7{A_2h)@K0D|;0EVFs?GzyVm=1c?!)fci;ZfoXTYtKMk}4My*GVAs<8y7Y zo3B4AIZYO4wfi{0gE<{j(VKY2R+r%@)F6z}imO(5L6m6w!_!6RFALj7M-I;*D6R2w z5G0tZw@4aF9gNuzD5q%A_7wi#Ul2nAB;au(KV5I*B*7}Ka=Db20O$C8e3N4i8d30~ zx~pGq-d3|&U?gy4L5FIiB)M@>$nftx+&b=zDS!*p{o$ZnUAm&S(T@qh1X|eKI_6zn zriMcQ)60zbyWA7m4?$g_JM&Wid@xMViXBzukfwAiFh4_Wf&ERfst&4hGd9df?7B4a zBI*OXN_HHzvDRUf8^QMuat$s>HANsp-8^dR2Q$DjSKq>$7FR25OC|0Xrh<3T1&uXs z9Xd6v7kMlJg4{WQj|sx?fb0gX#Tg<&_a$BR&4?b{D5I#hUSFa+OB7xXVgP%)5<2%} zx+8-QJZ^IaSjhof5T+!Iu(tD{Xk}0iq_YuE1N+%d0A-XeGC;3OPl_&-l6LpFpE=ew zCPcc|p8^B{QZcTrA4TT1x9?V_-$qSU%zL0mqO|gd?b;MrDB=6*Clc6a&>ph5w&B3S zW`E1=h&D@%i~gt^=2+F+MMkh3`S5Qp>M|Y6BQz}!pz;0VFtMukq93ikV?Oct=dSfQ zLv}rW%X-q;l|6u6YChn%r|sXw#W`7Vv!`qM*kyZ6gv;Zxwb1E3;xNtX|KY{~3iHeO zZbFaH4+s+1r+M6<$heYbR^IRMGsF1i^g{{*Mg$nV%D>+{J+GT3{o&<2WBF5wGgD=lTJ~cs*P;xOw2` z8W;6n-*pnIw3$w9hUt#~mym{Jy~Rn;MI_X6t!dSm{EH1ZSP5H)!Dj7sXWx^IufJVh zr(~;rFbwbiRwJF=4+ZB)FrjN#&DxTSz2H8+h>gkKB__#|r--l-Sqn8%PNyM<*MjA8 z{(T(>JWoa2^8NTl+iGOIQnUvqnqSF*dRv90_pAB{sMv4puI~0U2 zwghz%x5$0%*TL|Y^8t=(+aLg57%tSZ7APe$XK+Wt$9QSsnf@!`$M5y$U8%-9{n!DW z%L8lSzwbjKG6-)QgIJ(8cQXO0dY??UVqY+rW}D2Td2=b)WP09MeU5Me8xbexIRp5@ zGQHk~aw%a{=$IN#eRYYg;d}EfotySf>G1D}bpMAJ2fO*__FWnS&}%jM_C8)fGcpXQ zN4`DhMQKx7MccQ=&>QGfg3J4u#!YjE@CFjNs^k~MW6HaItwmuB0u07N&^ETMZU2dn z^E^dLH2Nzk&3xp^`asBWU##4A_GvO+Y6WBP4F)U}8lEd_+ofYoFg|5uvZVj6uAAq% z&>{yt6aLs<#LqAlnE@3vL5GO`r4v|c@ZrA*DvQRJNbq^l)4YEtYzlAiqvN{ zApb|DvB-?lg7QHTPrFWLHg`g*X31^j>6A9o3gbER!cx$b^Kr!J+ta%6s(`euj3Wfp z8VAGX7c^inBP}V6#KywrFX8L30*-LhFsKg5gK4?-<`ZzFoE7EjC*63d6y5Et>R6k_ zRpZq59RmjgQCw+T>vdB9{KnKQ;%AJ%gp+|MWGDbVf(RQU z&%Lu2in*h1^14L}vC{m(!{l(9DaG*7)>rI*At6Q%aA9xoUscva{`P4}EK%yaHUQ=E zr(lAcYpREt9iBoH7ji&=Bp&vFCOwI8<_Dza=@v0zHceupix14V@A+{~HIr24|0ZRI z=Kbr-uoy?xfg@MbNmE13H<+)!N6(Lo)7)0Y>6;Qk7Ycw0-}|dR2G; z0-{NyDN{n!*6K~NPs}ToOjCS1ZNl6(qJta22I5Rsn zt2a5d@+QdSj^pjc+}OGOFFU-tWHBlB+u}{Cid_NitX|ZV39<+i2!MFFuFpbHJx2d_ zqO=%*nWN0qC!x6wByy0rXZ^zxC1@$P8F-Jkg5+fFQ8`=8=Ged8^Q6S>Hdbwn1v zOv^S#ANS4TZ IEIjD{0O4aeqyPW_ literal 22486 zcmeHv2Y6P+*6u>Zu2_y9yP$$n1rZc!5k*B10jbhL3!#J(N@yVg(jc8Ag!CQ~(tGc{ z_g+cpz3H(X*L~Oi@`WOx9zFkm@AKSwcr&|9SyT4Rn)R*^q8{`hJ@phJeweg-5@``p z@7}8WfQN}n@oebOuKOp6wgRg3y-E84qSszkr|(SxD95CaIz8_D5)FBe=pB@aSA=4f zdJvID5BdAs(C)dK>Rpylr0Ez6x0^zV{@N7l{w+mXYEYW_1ZsBErVPtT6zM#dT5ICz zWLrL+=_sMI$IIw=a~73nI#JkxQB>!=7|^1W0~0CX$U3Si@S&^co9Xh|I=XhTl`fpD zq>HDksjkqQLM%s7gXf)$2-<=wYeULt%E}p7HJ>^uDbC_bBCsCctBJ$eS zhy2V(Q%7wKooUOWmWm)s@?T1oY5S-m)rj(9chjks3_8=EL(Szu6ad-s4t_x{J9<-o z+#WiAyqGGp9H=~HADyoAr}NEWRFt@vPBf)ZYgH%(*^H-Di?I~0{|$wjk0PJ_AJXZz z9K4I5igXLQ*d9-3T4Jdu2c#`YhDpQ`9?*+B{cL zldCr6`>a5jTc|A4nST1=8lA>iRc1TWQJV===`xQT*M5$)tEmL_riN^zq7*xfWfdK3 zNT(nFb%l!4?2z{`rTQ(Ra*u^{MDJ^=a$HWe0UM|!ZZ9Pr-9*Vpbtye;CuK)$rraai z)a0d2zFVeJzV%{i@mWhvfx1-hyO!F#R#TSw0y17ao|yT!lkfjO`M<9RHai@0JlrkT z0dosWD{C9ugQ_RH4Gj0}-DhNMVrnK2HgDOgw@t$K9Xog7eyz^B^{TL8qb}AS%_U2h zEnlIvQhV95Rjb!fkD0S(_nR|!-na8d^jolS5%u`|i%FBdoIK^Lsb5c;Hhl*581>QU zF=NM#*Z6qCC!bFIjCu?lGmpE(M<09qi6?tK_4G5($}Jw;cmD%DAAIQHM^v}+M1ty0rsNOf ziQ0P+r9VVuc)to*G?DIBsNYFCNiX?io$U>10J5G-FvJ@DzZs-)4?OSyJ@UvS)T>u7 zdj9$6>6KSrp+0^3&>L^OL2thKCcX96ThzC2U+UMdAHDtd+w{&m@6f>h@6eEe{b|_X z0W^Hb02(=T0DTC2G^{_3d9Oc>9X^1@zdw*PMhv8nflo&cq|ZJWNMC$7kS2XJh$aJ5 zMh~K?V+PUJz_hW0XvVm~G;91|n)C4x`gXz)TJY(+v~c3Pr1{xUTKf4gTK>f_S~2N8 zTKVOBq&;~!t@&ygt(!KObie6On`iZ<9pCn$-3wnM!^JO>@v>*gOzTN9*M6KVS3gEp zYaS!(wU3gm&SP|N-Q#p{{S#!j;YqUJ*oz!=pCZRiPm|;3XUJ*GGvuQ8EV*rej@)lMd1ZGpb&0LDNn@91E^C{kCA;r5b zqIl0ml;F9L5nS^QBV~tgqP)m0R2Zd41<~87 zFnT8yMe9>htN|6p@1dfEeN>WYOeIMsRGMr`WhwiqBF&ttGAyVn)0(QXY^gfio@#Oq zQEjdx)#W=;eStGI6gW|1fg?2)I#5f|VQMLMp_Wp2YA*4jrcys@E(^rI971hXVboq7 zMxC{xbfPYpPSuCd>Bew6(-cK#nz4Vk#M7zfBp`)OG^YXSK&FC|Em?G`HCx#;Pq*h` z-z=bW*jEMTkC)Pg6Xnnupo3t~6#e1SnHr#0(KSRzxvc0O4RqyPBhUohMbJ!FFSO9L z3vJk&+p$L<13KvX<>U0-m6P=SwbRNz{KI$W>4)zxV*k9X>~pg3{`}*0`uV5t6g=_w z1#?dy1ncFEx8A7WFTSMcwf!o@2;+S(bqsA}*H2(l)~%HC z*UmB6mDJkY++1xN93P*VnHiFbo0j&XBZezn(Z0QNZ1PT=IDV|PInOpAI3)N;WMgw% z$B7ds!c4V1@ZR+syO_e7Qxe+plM?c(Pn|k(>QpDj+dxSx3W*&fOZ$oGXepS>-PI(L%kL!uFz*7jJ~d^^2&tI_7%NMV}puSaN^_=JSUd)E~^RGnw3z5MOMB^_Lz1~jL zD_w<$42jf$HbQp<(%i33myYy6uXaGn0>(?(zfupSF24Lai=HwR&;+{mlt*!+4x;P) z$#5U^jGhnNM-TP9pB{e%XWGXfqGz9cg#P)|WAw^Do}hj&KTSj5e2zx-e}OcHyi5~^ zy-Hua|2j<`*@wO!^(K8Yx-ZQc|28e0FaUbM5Ym~7y?^R^v|-wC+BD;R+A?!E>CJkN z^kxsG?Q`Fzo%3HH{e@4`?!}Lgfo4xK)O>&pm)uW#m)=jt%O4=q6+LPH%7>sIJVF+$ z9wkfY2UcsJAZwjoWV`+uI=JB}vfKDHIc$1{9Jf46&U(*~>-K*r`he&G-Ucs`kKrrO z173qZ(1*Nt_apCJ1ITOV5c1wJoILeLlgDNaa^EzOJU4$%URyrL^H0e~e;o9N56E}l zaPl{PmjX=(QjlqX?DK;t#2h+<#Zc_`&>1YDD_D)DVC!)dYCRtMz<7!RVywnt&mT_- zmLF5H)dWhho=B-UA0|6|K}n8ZQi9WDigo&mqMg5{DCZf7XHtyo9E$V&mg2mi8+b3K z1Rx1W@m@fw-t#FPaTfH0T+hW+;I2ufu9{TkvXp8?A8^;A77uM|Rj`U$pck}wuc2mN z9cuDhM|J)>R1v5{g~4l~7p$dhATwkgWr&Utrc1fuo1r6YrTnO^h__K*)DFspj*uH; zK>4wTR1hb+!fq;#-$f+}JE<&jCsiV@OxQ)0iTYHYYyj-TdD@sNQcS5T)s$+|O{q5B zjA}9tP*u7m^a*RKhCWfBV@(aYHq?}FOU(s#fV~on9?=ASq9Ok>iDA&_g2WY;z=?Yl)=utxD5cN=Jw`BoAhqWFlCR6i;J^KI&-8| zxq2(Ro^hHv+Smc)dwV-OV-$URu(UVdV7y6p#VsP~AF#AEUcKIU)lWAm zf2zw+U6V|mjk+tA?YL3H#=ZLwtk*doy*B5U--f!Me(6}LyKK?&N!=Orjg5`9Ykt0K zsFd`xyPL3ev$64}HD*8FEnI~>%NEVj{IaWp?d#U-ZrnIOqD$rcO>}MDn)wSB&YaOz z!PZS{HfqhAH@8;NKjlwZnD@cZwB{T4(OD+5XU@=6wLpL6O09Y2<=NM}LWiqMP+~!T zyiepM^`q<8bEeIlF=MMDklwe;=dZik9UAw0CM6dXL!pfEKHL2?eAdhv8Y+P{&zt|P zR+i|p63!oRj!(`nEG{W6DGmx#9$mV0!Fc|hncrwElk&GMpF3yHtWRAps6v$ak@&9i ziwj)Kx}L6Hf%a-BJ+$N7X|ra{oNgt$Fv5QKBXNmRL2+?meo(0D;TfMb(`L-jn6(<^ z@A&$YX%nXDWGlMy@z!-7{zu}Ilk*D-3-XiWZB$S3w`{@;jTyQ~zw6TpA5Uyohw}9v zen;XGl92<5KcIfzUN+%ljTu`c{U;xd9n+!?b!!fxg1Gp^q~xT;_#+lw&&ym_PtX|O zmHxwzMyx!L*`x~V4;@AZF^Ie`e^j(230s{j0}Frf#7c* z)%8?+I=W})7suaBvyYi?7$s9SHWF?yF2-&6miA!~Kg+soS2eccdYV`*dM8q=(P zP`=;H%EWl|jILE;@t}Feum*<8(V;6e)itXx5r^8^nIF&^wNxp-XV2~LjxsenU}1Co zrX;sq*4Z9BXgRh^9AsKJaFvynby?S3xkHq7&{^vP&935m_S`vaxV4S<*|TR)1Gk5| zjP~Q9Ui(LlQMFddv}C|kZ}0S`=+MUVw}+O{P@ga#uW=((ovErr|FZ$wp%T(>oMpPM z&PPT@hKEiczW9~}Zs*7WI$_}v;WbyT96zHz-(2Y^KYry(c64;awBeuJw7f|j+eZvq zo0b+`clCTmTFup~SB^L1)6GcBINO+>7C!C0aXVFl-1xhFDzAK3nUhm@sUrs=ef6++7vI!1H)_yd zGIYSyuu6n-`GddZ-PZV^oB zu=K8eK|yG)(g6k%vnm-{taP88Q=bBQ13i?#u&w_wd%C20YQwYPrvIz| z_!!Ry0xtt{+P%{$SDrlt-pU5t*=2B74DO1-T`{;T26xp0?#d2nMgac+Zjq+KVcA#U z#*)E}F}N`XH^$(`7~B|x8)I-|3~r3Ujin>+C%`{}`v7pCE60I{WAJbc9*)7oF?cuz z569r)7(5(A)PbB=J*?c`(to_4DOG?{V}+| zKxBObobM=bi3~20!6h=d#Jd6&FJyT1dJaR}T#gWG3t`wVWM!R=!nmNB?}2Di`P_8Hthpk;V-UR)~yW$c0f z0KRanm2@mH z=~!$GyC4hC-5_ZseLL1Vn8Or%SZ@@p0jSp*Ls@wKvmpK1696lytTlZR4+h=`Mgs82 zp#H$?fUF^p0LmJG_^$-1_d!6)ly&Y?U;%7zdQ(5_dvMAJZynMY@|y6rJAloAxSC7@ zJ^)0P$AJG-4$1cf@b-{C&(GVtaGYPz~`ab-4A&CP0^4{Wr*1a-ogp<%8N2 zi@qH3rVsLL2NnUNfENL2!=DLa6aB}qH~;ym-`1&dZ9Y2O61Iz*QY^W#z?GYd+yOUk zEOh0Dd?&8UwdcB2Gj0gq#?5}~INoT^iB*$_MWc*ufb_?kfP7Qk-vzGk7Np(J1@D}G zxXo(~H%08``n<#3h&r2#y|^M1Yj&D7H#>~8zhE{@&86#?4H*l0}}8jNxm05WgyH5QLz z{RnIf+{Ccaacz!0=f>{k{6uq33E9e-5j*+Xl~erhfB%gA$dT(ygZbBA|IO!4R55IW zoD;K;8%jes0qa9)ydD=stmQ)gB@AAYb*8=_g1TjmcnP@EoV*`%=uo5odM-;bW$=w$ zl4Q&!8IJt#Uw*>6Re*LL#r}6)xtC{Z$g_@yG`@Zrvf+7NoDmnrU~djv#o0lcoa;3Q z``T)r_+B4d)IA1}d3{SLwOg{Z*?SH0?c{=(U7Q}Wk#nQAb4K_M2FJ(0{QR#!gr9!A z&Z$A`Io@X}rv-21c#oN!<};o1U8b|A?vzSYx&(LwkU6dn_hIcVDhgVMy7f59T@yM& z3fg;wn<~Qj=O3^ADO@?<%2zM8^AF!&;CSC9ob34(#~mKe)h_d~H;oQQrQ?9^KBzgo zLc7LmC1-`K=Il@%jNfYh?&?YCD3|^c&UTh?xZ`9__xYOR97l7!%?F%qvG5G){uYpV zpaiTbWtrZKI3sX5ryW_!iN1@tG~JGWxPI=gxPGY68qi%T7+@y6*Rol$W=;6AKfgX`Q^a2&=d%6U4c1g_)4#QlnH^ZnIRd^^q@E5x^E z!G-aAxg_lXbh-oFQW=i9*ZG^YlK1ktMxcp(_YZ@9^$sUk3}>vPHK=q4|#aI_l#U-6qVU zKL?xiQR{f)QU7D8KOo6&GKbr1aLB=N9OX6}`dThuyU=nAPPgZBdN9`gA_tZJ)e_E^ zJL37;$uuQyD8xEk|IUN{{-qU4l^Hv z@fpEK0sjN+#9v^xx#Kg5DhKKAZiF zdb8i2=au?>wtS_B`g@}OT(2E(^5HE{vg6jL*+suMmuJ}Wxz55{P?32M>**S9%r;hJ zkbaP{=qz_u;--8n&J5FqPF!$HJ}Kvj#Yhf1Fo2Jm_GX{m&vL25H1^s2)ne4&1ND0Z z?i#>0>mT3{+i@IVJ)SEd?>XqiqL-^7dVYe>A})&FzztdZxG8r(x8z$WvPfJIy@hM? zoV(LYzO%>jl(T{8?K0J2{W@(#4Y% z-Q`Gm;LkYDbu#D^H7bRQZoD|8&n^Kjtft;Ie z#<|WSZYm4Jna_dC(yh6%#2;x>Zb~DvtMXhtRe^6}57skN&I;X#Z}20IGabrh_Delb zfA<~?86rHk_Qo19mNP>)aaQX7exnWvc=lRQMaBVGx#~aa<1V&hn%&L9~>XfnWh}$^f?C`^kJOI6H)JP z^gzhq?Yr%5_BQRbpO z5@$jmWgUeN7rShGiZd-gk#m~ZIqn)D!>TIB1$64!_@)<- zVNa#we70TlG#@=UnVZTZxVb78b*Eqrjl-EWlfirPg;UksUY7vfvx2|J{fU+woXr!s ztu~(9YGN6DHruU#kmF509orm@oDQ9VL!z?xmFQfi!zwS}awVo{c_aQ*ejeja2<c@z6+;~ zFGG$OpcgJy&g;z;Q5c6(*k#I;eyN3RAPqXF=e{9qwfaGhHTn?!ttEBu{!^9SAu-CB z38d6GEk?Ox*+us?c3Afuo2`71jg}GG`7|F|{~RCHAIv#cQ@G7zmDFnr{OLB|q5AGe zDDP!pEf5D317bgrx@x-a?GS$f+^ko3=fB$p8}<;JrUC4mU{xZ-Gdm(Utx(YoE zv0ik6ekaJfq5$c|e@DuA2#_+xZ|8N?F&=fP%%bTJ-R8H`nno78t@h%=h8vI;I3Hi=0sCmGY$A|7H-`r5@>PvBL}lCIa(-HNZ~51h4{R zO%@x0;1D489CHC)zzd1CCKSF=&Bw8I+M089o30M7tDf&XMasbzl-`DMP$`C|AR4zS_Z zi+!*WXXysm=@hvkuh`K<-lihh@$kH<&;@W-WN$1u413-ov;p?K+=FO?6<22*P;6>7 z&`E{6fsL`_omZYsKs|DXm+#{nU;#O96;J2I61YjYjA4s$^@ zAJCsU=+A5$P72(>HLxLeHf3>YFwRWqU*SRu!9QF$UC*7+agtyIsfFCNS&%*5gsanx zxiV!hmnH7v64(`s!*saWdlj2#YBZx>AHWcp2@C{!0e|G1mNocspzom9pPTQm_jO^@ z(JiRYifghD0=8U}Wy1xr1~}L5Kp(=+ny9id{`%{$usi+=J7^^5MQy>EK^Hn$q4G?g zXM}G@dL!7uIKy^Ew1<0V!Krn+aZG|AZxO$b#DT9 z;}Y>o2{LbFeSZb`1bk6$U5FmzcM@Eg0UL0-IhQ6G;Vh-gRe4@qTXY0xM6oU6Tot#E zfBp9_3WNi!$@c`e;|<&558co6z%%AWZC31u*Ds%hEw6(Muuc_5=|cW3TokpQ^TJkg z_R+;$<+X(ESAEt7IplkgZ(0M8wN=)Wy9Md{r-9)?JEkYs2cX9pAZ>a*&FtIMk^mj$ zY?~jsiBki#IL=p##r9l}Gh?jRLfGV!VYj~ix8cmOBBej1%!{Y%VB4L_8NT0eiu)I^ zZ;#`=!&BIP^=C4V41g~H`95WRR|lCpPhf9a*Wk4Z-{fl8a&(k=8R7B`&UAU;7q0w| zK+g2h&Qmzk?;B2b{~Yp<;Ygcd+~~H9KOg=^Amm&G$a*Tem^#Q$2T2jJq-4Bm5nt6eh}Cb@*%IBgJeHb)**b`PYDke?KF*JT&8lY>sRb=IbLPQ zfb9al@Zc~`-Vo z{mlk*g!Lc}GV8;kCU0`7-O?+NTlNCcPh~%*1f#hVt6Z0IsQu?0>G(N^*?kOOgjM_< z=Hnm1S#T>^@Y$)(FyoWeUa;8*Kz89#qQN61@RiOaC2lT}aj}K{u;~w#Ta)j`M=gdy z{=pn<_6Ga!eF450i}{0hUfK?^-vtz|4R+U^xsG$dhiE|d@f>P9hJ)>4BZAFJ>}dDG z)$=WoeXHWT(h0l!$r{Mt5Xk3S!uS&S50PEC7>VV+vB-(5F~9CvChUc2L2KdDF`A?8 zM`Hbf{QE_I6-QyXV5~P}9}dV~OtnrcJd+N7#Q_$hz^Q$}p*ABq;J{GWy9RJEII*kX zpYDeGA|L2uIExh7D15=a`d`LF#-%)UKjSwScP&%uiuIVy@h%fM)^XG={hwwzTKLuk zh%NR4*~jGnxyTMP*I-}MVT#;A=0iEidz=metnkfTlWxeZh1PtmRQMNn za4&v*wlRn=v_vR#Ncvr5mwS2MT;#~rxlZ>iSL}sxo^#p9WC#bCy{*iDnLn{+?{fUU zIVD~4EBz1o>-~*Ju;}&iEyBWN}UM9n^7B7bFGrrsIueSfIW8oqau-*!9B3wy( zi5+)VxF~bzG7@x6xOCB=v;LfhTwh7y2juTAFp&(wE^QG z-?DrU63e*A_t61vDjVO-y~~zw zvkKQ|wV@Y>IZnm8qQ~vkkqTF)_O-h`PQrd!9*?tSnm*cK#L@=&7Gy5T_n_heos?Ma z<#|npF}NqAdzPDWM2nB&8w@(|PWRmR(tnyGjNTUcWe*cQTG8P!e**n?4Pr~3$N1pJ zN7-?+;0Zpg*9(4*v%wjHd%O#Zu*YUXXRk`u>uQ5=h-S+7AnlNKsjbLXiRE6tll-Vn z+yGAdZe_~zXxAAWxPKsrDSK}pW$t+He3Ii$-(%>=A&~ufK+&OLn>GqF9Lc6y_p{Bq zhdIy^I*0woN-X-6lqdY*op8K9fn(ifaY5uNu1eaf%q96A41TTQD8Cvy zVY*V!z1C@YCmelkfd|%hL&dg|AG-_jF7TePg@Rkg|D|x(y+mEMtjU?M$z|fqkppg9 z__oZWE7%!*AGYUh;g};K`)}+hkY6*=bOP^LLhyI_l#`CE1=c7wr?j9AT$Sqzz8U=W zJt3U5D$Tj$7#sATaLwvxH{u)VZah=vt42MAar#^w4}UNCP2@*zhF<(RJL*2bMbL4u z_liABt@q z_!6YwQ(yT@oILpWoAb-rr6>VDez29rIDg6Z>+e%|YUuu3Am}ag{^kbA7__=;gQxDr zW~-kBKWoVO@$fT9KZNodfhGm`|312})z5xEzLEd-w8E>4ZwCH<5oLX-$Z`V5ZK>Em z9CUlK$JXbRzMnbf9ocX1*!SvopbffNmQz@NF|nHwd=64;5Q0tROUFNF4*_6Hr>%zq05K;kG_-k)xxKtq0kfXfDb-=Bk-F6 zKhuG1y@oi!WR&>T$eI0~{jQc>VvIo_nMd~PURK%=XJ7Hn2!Ot<=*c(B z_#(v2uo$^J8;m6gQTIqD}cX`~=~< zA?-R3KMFZRi|?VtlD4HX41O>;8{?Zg(^0I#( z$$GcvyO zub_=$+Yz)@$MG?&FKzGvZK)DODgHRc$p_eB^Rrkxh=cV9DYC;iWyalP`=ifg99l4! ze76neoePPrH}~PZ1S|NXBr9mIOICa}#D}J{IR|s1L-7|qj_XeN`gQ=PVc)!V@fd8I z^@^`eXQMn%R^ByNMsSqtY&O@vkIl4tV7`xq?5iB{8zHfk|1AM+7yul~FrSP%dMRV! zYV;8}3_nF?kz0`$aR>ZhI-6AY;(K!vI1Y$^jHHn+Yo<^yRPwnr9miHSNu?7jK=YvrH?4>aNhd?XGHAfmg)p>MI}ISH%=eBaWB^= z+u-Ay?#N+Iv)MxDNk!kaT=h67n@te8%K)vvBHtg$D}4j(k?$g6&uFX@&+!h-EBQXG zHuYw2d?QB>&Emv>O=y=PM|){;Fz#LUyvL^6k1G0=A#^NPhzRX zpzHUUlzv44NUn4sk|P+R7Uus0&nlxA From 7947e4041b38d30e7de4c230c0566e930389f715 Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Mon, 9 Apr 2018 16:02:30 +0530 Subject: [PATCH 0747/1221] From 940b88b686bcf037a36f6e81be4017a07fcf782a Mon Sep 17 00:00:00 2001 From: Ajo Robert Date: Tue, 10 Apr 2018 00:30:59 +0530 Subject: [PATCH 0748/1221] Bug#27197235 USER VARIABLE + UINON + DECIMAL COLUMN RETURNS WRONG VALUES User variables will have the default session collation associated with it. And a select which uses it as part of a union may infer the collation while type merging. This leads to problems when the result is of DECIMAL type. Setting the appropriate collation of DECIMAL result type is missing in 5.7 code base. Added code to set appropriate collation when the result is of DECIMAL type during Item_type_holder::join_types(). --- mysql-test/r/union.result | 16 ++++++++++++++++ mysql-test/t/union.test | 14 ++++++++++++++ sql/item.cc | 3 ++- 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/mysql-test/r/union.result b/mysql-test/r/union.result index 97c1a8b4d491..c0b364d0fde6 100644 --- a/mysql-test/r/union.result +++ b/mysql-test/r/union.result @@ -1860,3 +1860,19 @@ DROP TABLE t17059925, t2, t3; SET @@long_query_time= @old_long_query_time; SET @@global.log_output= @old_log_output; SET @@global.slow_query_log= @old_slow_query_log; +# +# Bug#27197235 USER VARIABLE + UINON + DECIMAL COLUMN RETURNS +# WRONG VALUES +# +SET NAMES utf8; +SET @advertAcctId = 1000003; +select @advertAcctId as a from dual union all select 1.0 from dual; +a +1000003.0 +1.0 +SET NAMES latin1; +SET @advertAcctId = 1000003; +select @advertAcctId as a from dual union all select 1.0 from dual; +a +1000003.0 +1.0 diff --git a/mysql-test/t/union.test b/mysql-test/t/union.test index 147c1d3834b2..d7e362558e3e 100644 --- a/mysql-test/t/union.test +++ b/mysql-test/t/union.test @@ -1256,3 +1256,17 @@ SET @@long_query_time= @old_long_query_time; SET @@global.log_output= @old_log_output; SET @@global.slow_query_log= @old_slow_query_log; +--echo # +--echo # Bug#27197235 USER VARIABLE + UINON + DECIMAL COLUMN RETURNS +--echo # WRONG VALUES +--echo # + +let $old_charset= `SELECT @@character_set_client`; + +SET NAMES utf8; +SET @advertAcctId = 1000003; +select @advertAcctId as a from dual union all select 1.0 from dual; + +eval SET NAMES $old_charset; +SET @advertAcctId = 1000003; +select @advertAcctId as a from dual union all select 1.0 from dual; diff --git a/sql/item.cc b/sql/item.cc index a37a61453e8d..07d64881eeb1 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -8266,6 +8266,7 @@ bool Item_type_holder::join_types(THD *thd, Item *item) } if (Field::result_merge_type(fld_type) == DECIMAL_RESULT) { + collation.set_numeric(); decimals= min(max(decimals, item->decimals), DECIMAL_MAX_SCALE); int item_int_part= item->decimal_int_part(); int item_prec = max(prev_decimal_int_part, item_int_part) + decimals; From f5017c9a6fd197372dc5c6ffb86d422d26183121 Mon Sep 17 00:00:00 2001 From: Sreeharsha Ramanavarapu Date: Tue, 10 Apr 2018 06:03:18 +0530 Subject: [PATCH 0749/1221] Bug #27389294: INCORRECT BEHAVIOR WITH DATETIME COLUMN AND QUERY REQUIRING SORTING Issue: ------ This problem occurs under the following conditions: 1) A select query is required to do an "open table" (i.e. it follows a FLUSH TABLE or it is the first query to access that table). 2) ORDER BY ... LIMIT's presence mandates sorting. 3) A DATETIME column is used for ref-access. Root cause: ----------- 1) While optimizing a subquery with ORDER BY: a) it is decided that every evaluation of the subquery, for every outer row, will use a ref access and a filesort. b) ref access is set up for WHERE (the referenced value is a column of the outer query). c) a filesort is set up; this filesort wants to implement the ref access too, for this it calls get_quick_select_for_ref(); to read the referenced value. 2) my_datetime_packed_from_binary() is reached through store_key_field::copy_inner() while checking the number of rows the ref-access might return. copy_field.from_field -> (field object of t1_a.c3) copy_field.to_field -> (to object of t1_b.c3) my_datetime_packed_from_binary() sees a junk value for t1_a.c3 is junk as no row of the outer table t1_a has been read yet. It is an invalid DATETIME value. Why does this problem not occur with every other statement? For most DML statements empty_record() / restore_record() is called at some point and a valid DATETIME value is placed in the record buffer. What about SELECT statements? SELECT queries call empty_record() / restore_record() only in the execution phase, after the plan is created. Solution: --------- Calling cp_buffer_from_ref() during the optimization phase is unsafe because it might access an uninitialized column. So remove the call to this function from get_quick_select_for_ref(). The actual ref value isn't required to create a QUICK_RANGE object anyway. --- sql/opt_range.cc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/sql/opt_range.cc b/sql/opt_range.cc index e4ab8a9fa830..d7dd49786eb6 100644 --- a/sql/opt_range.cc +++ b/sql/opt_range.cc @@ -10554,8 +10554,7 @@ QUICK_RANGE_SELECT *get_quick_select_for_ref(THD *thd, TABLE *table, goto err; quick->records= records; - if ((cp_buffer_from_ref(thd, table, ref) && thd->is_fatal_error) || - !(range= new (alloc) QUICK_RANGE())) + if (!(range= new (alloc) QUICK_RANGE())) goto err; // out of memory range->min_key= range->max_key= ref->key_buff; From 5124899777145b926a120df25953f510f1ca54a7 Mon Sep 17 00:00:00 2001 From: Sujatha Sivakumar Date: Tue, 10 Apr 2018 10:55:37 +0530 Subject: [PATCH 0750/1221] Bug#27300658: IN MTS SQL THREAD EXITING AND INITIALIZING MESSAGE WITH DIFFERENT POSITION Problem: ======== When MTS is used and slave executes STOP SLAVE and START SLAVE, SQL thread reports different position for exiting and initializing position. Analysis: ========= When SQL thread stops either due to regular STOP SLAVE command or due to an error it prints the master log file name and pos upto which replication is consistent. In case of MTS the reported file name and position represent the low water mark upto which replication stream is consistent and there are no gaps. But as reported in the bug scenario the LWM which is reported is not the most recent LWM. The reason behind this scenario is, SQL thread first reports the current LWM specific positions and then invokes 'slave_stop_workers' function call to stop the worker threads. During worker threads stop 'mts_checkpoint_routine' is called which will update the LWM and hence the SQL thread's master log file name and position get advanced when compared to the file name and position that were printed in error log. Fix: === Print the SQL thread positions after the 'slave_stop_workers' call which invokes MTS checkpoint. This will ensure that the applier positions are in sync with the latest LWM. --- .../r/rpl_mts_stop_slave_report_pos.result | 101 ++++++++++++++ .../t/rpl_mts_stop_slave_report_pos-slave.opt | 1 + .../rpl/t/rpl_mts_stop_slave_report_pos.test | 131 ++++++++++++++++++ sql/rpl_slave.cc | 44 +++--- 4 files changed, 260 insertions(+), 17 deletions(-) create mode 100644 mysql-test/suite/rpl/r/rpl_mts_stop_slave_report_pos.result create mode 100644 mysql-test/suite/rpl/t/rpl_mts_stop_slave_report_pos-slave.opt create mode 100644 mysql-test/suite/rpl/t/rpl_mts_stop_slave_report_pos.test diff --git a/mysql-test/suite/rpl/r/rpl_mts_stop_slave_report_pos.result b/mysql-test/suite/rpl/r/rpl_mts_stop_slave_report_pos.result new file mode 100644 index 000000000000..efb3e197e468 --- /dev/null +++ b/mysql-test/suite/rpl/r/rpl_mts_stop_slave_report_pos.result @@ -0,0 +1,101 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +CREATE DATABASE db1; +CREATE DATABASE db2; +CREATE TABLE db1.t1 ( id INT(11) PRIMARY KEY ) ENGINE=INNODB; +CREATE TABLE db2.t1 ( id INT(11) PRIMARY KEY ) ENGINE=INNODB; +INSERT INTO db1.t1 VALUES (40); +INSERT INTO db2.t1 VALUES (40); +include/sync_slave_sql_with_master.inc +SET @save_debug = @@GLOBAL.debug; +SET @save_slave_checkpoint_group= @@GLOBAL.slave_checkpoint_group; +SET @save_slave_checkpoint_period= @@GLOBAL.slave_checkpoint_period; +SET GLOBAL slave_checkpoint_group=512; +SET GLOBAL slave_checkpoint_period=3000000; +[connection master] +insert into db1.t1 values (30); +insert into db2.t1 values (30); +insert into db1.t1 values (29); +insert into db2.t1 values (29); +insert into db1.t1 values (28); +insert into db2.t1 values (28); +insert into db1.t1 values (27); +insert into db2.t1 values (27); +insert into db1.t1 values (26); +insert into db2.t1 values (26); +insert into db1.t1 values (25); +insert into db2.t1 values (25); +insert into db1.t1 values (24); +insert into db2.t1 values (24); +insert into db1.t1 values (23); +insert into db2.t1 values (23); +insert into db1.t1 values (22); +insert into db2.t1 values (22); +insert into db1.t1 values (21); +insert into db2.t1 values (21); +insert into db1.t1 values (20); +insert into db2.t1 values (20); +insert into db1.t1 values (19); +insert into db2.t1 values (19); +insert into db1.t1 values (18); +insert into db2.t1 values (18); +insert into db1.t1 values (17); +insert into db2.t1 values (17); +insert into db1.t1 values (16); +insert into db2.t1 values (16); +insert into db1.t1 values (15); +insert into db2.t1 values (15); +insert into db1.t1 values (14); +insert into db2.t1 values (14); +insert into db1.t1 values (13); +insert into db2.t1 values (13); +insert into db1.t1 values (12); +insert into db2.t1 values (12); +insert into db1.t1 values (11); +insert into db2.t1 values (11); +insert into db1.t1 values (10); +insert into db2.t1 values (10); +insert into db1.t1 values (9); +insert into db2.t1 values (9); +insert into db1.t1 values (8); +insert into db2.t1 values (8); +insert into db1.t1 values (7); +insert into db2.t1 values (7); +insert into db1.t1 values (6); +insert into db2.t1 values (6); +insert into db1.t1 values (5); +insert into db2.t1 values (5); +insert into db1.t1 values (4); +insert into db2.t1 values (4); +insert into db1.t1 values (3); +insert into db2.t1 values (3); +insert into db1.t1 values (2); +insert into db2.t1 values (2); +insert into db1.t1 values (1); +insert into db2.t1 values (1); +include/sync_slave_io_with_master.inc +[connection slave] +include/stop_slave_io.inc +[connection master] +BEGIN; +INSERT INTO db1.t1 VALUES (50); +COMMIT; +[connection slave] +SET global debug="d,simulate_stop_when_mts_in_group"; +include/start_slave_io.inc +include/wait_for_slave_sql_to_stop.inc +include/assert_grep.inc [Assert that the expected entry is in the error log during STOP SLAVE] +SET GLOBAL debug=@save_debug; +SET @@GLOBAL.slave_checkpoint_group= @save_slave_checkpoint_group; +set @@GLOBAL.slave_checkpoint_period= @save_slave_checkpoint_period; +include/start_slave.inc +include/assert_grep.inc [Assert that the expected entry is in the error log during START SLAVE] +[connection master] +include/sync_slave_sql_with_master.inc +[connection master] +DROP DATABASE db1; +DROP DATABASE db2; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_mts_stop_slave_report_pos-slave.opt b/mysql-test/suite/rpl/t/rpl_mts_stop_slave_report_pos-slave.opt new file mode 100644 index 000000000000..b424c900beaf --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_mts_stop_slave_report_pos-slave.opt @@ -0,0 +1 @@ +--relay-log-info-repository=TABLE --master-info-repository=TABLE --slave_transaction_retries=0 --sync-master-info=1 diff --git a/mysql-test/suite/rpl/t/rpl_mts_stop_slave_report_pos.test b/mysql-test/suite/rpl/t/rpl_mts_stop_slave_report_pos.test new file mode 100644 index 000000000000..d764c47d60d1 --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_mts_stop_slave_report_pos.test @@ -0,0 +1,131 @@ +# ==== Purpose ==== +# +# Verify that the positions that are reported by the applier thread during +# STOP SLAVE are the same as that of the most recent checkpoint in case of +# Multi Threaded Slave. +# +# ==== Implementation ==== +# +# 1) Create two databases and do some DML operations on these databases. +# 2) Sync the slave applier with master to insure that a checkpoint is done. +# 3) Set bigger values for slave_checkpoint_period/group so that no further +# checkpoints are done on slave server. +# 4) Execute few more DMLS on master and wait till they are applied on slave. +# 5) This is to prove that applier thread has few more committed transactions +# after the checkpoint done at step 2. +# 6) Execute STOP SLAVE command. +# 7) Assert that the positions that are reported in error log are as per the +# latest checkpoint. +# +# ==== References ==== +# +# Bug#27300658: IN MTS SQL THREAD EXITING AND INITIALIZING +# MESSAGE WITH DIFFERENT POSITION + +# This test case is binary log format agnostic +--source include/have_binlog_format_row.inc +--source include/have_debug.inc +--source include/only_mts_slave_parallel_workers.inc +--source include/master-slave.inc + +# Do some DMLs on master and sync with slave to make sure that one checkpoint +# is done. +CREATE DATABASE db1; +CREATE DATABASE db2; +CREATE TABLE db1.t1 ( id INT(11) PRIMARY KEY ) ENGINE=INNODB; +CREATE TABLE db2.t1 ( id INT(11) PRIMARY KEY ) ENGINE=INNODB; +INSERT INTO db1.t1 VALUES (40); +INSERT INTO db2.t1 VALUES (40); +--source include/sync_slave_sql_with_master.inc + +# Save the global variables that are being modified. Set bigger values for +# slave_checkpoint_group/period so that no further checkpoints are done +# automatically. +SET @save_debug = @@GLOBAL.debug; +SET @save_slave_checkpoint_group= @@GLOBAL.slave_checkpoint_group; +SET @save_slave_checkpoint_period= @@GLOBAL.slave_checkpoint_period; +SET GLOBAL slave_checkpoint_group=512; +SET GLOBAL slave_checkpoint_period=3000000; + +# Do some DMLs on master. +--source include/rpl_connection_master.inc +--let $i=30 +while ($i) +{ + --eval insert into db1.t1 values ($i) + --eval insert into db2.t1 values ($i) + dec $i; +} +--source include/sync_slave_io_with_master.inc + +# Wait till all the transactions are applied on slave. This will ensure that +# at the time of STOP SLAVE few more committited transactions are present +# above the recent LWM. +--source include/rpl_connection_slave.inc +--let $table=db1.t1 +--let $count=31 +--source include/wait_until_rows_count.inc + +--let $table=db2.t1 +--let $count=31 +--source include/wait_until_rows_count.inc +--source include/stop_slave_io.inc + +# Wait for coordinator to populate worker's queues. +--let $show_statement= SHOW PROCESSLIST +--let $field= State +--let $condition= = 'Slave has read all relay log; waiting for the slave I/O thread to update it' +--source include/wait_show_condition.inc + + +# Initiate one more DML on master. While the DML is being processed by slave +# applier it will receive a STOP SLAVE due to debug simulation. Applier will +# execute gracefully after completing the current group in progress and print +# appropriate exit positions. +--source include/rpl_connection_master.inc +BEGIN; +INSERT INTO db1.t1 VALUES (50); +COMMIT; + +--source include/rpl_connection_slave.inc +# Debug simulation which will ensure that SLAVE STOPS as a regular exit +# without an error. This ensures we have the same scenario as that of the bug +# report. +SET global debug="d,simulate_stop_when_mts_in_group"; +--source include/start_slave_io.inc + +--source include/wait_for_slave_sql_to_stop.inc +--let $exec_master_log_pos= query_get_value(SHOW SLAVE STATUS, Exec_Master_Log_Pos, 1) +--let $exec_master_log_file= query_get_value(SHOW SLAVE STATUS, Relay_Master_Log_File, 1) + +# Assert that the positions that are reported by the applier thread during +# STOP SLAVE are the same as that of the most recent checkpoint in case of +# Multi Threaded Slave. +--let $assert_text= Assert that the expected entry is in the error log during STOP SLAVE +--let $assert_file=$MYSQLTEST_VARDIR/log/mysqld.2.err +--let $assert_only_after = Coordinator thread of multi-threaded slave is being stopped in the middle of assigning a group of events +--let $assert_select= Slave SQL thread exiting, replication stopped in log '$exec_master_log_file' at position $exec_master_log_pos +--let $assert_count= 1 +--source include/assert_grep.inc + +SET GLOBAL debug=@save_debug; +SET @@GLOBAL.slave_checkpoint_group= @save_slave_checkpoint_group; +set @@GLOBAL.slave_checkpoint_period= @save_slave_checkpoint_period; +--source include/start_slave.inc + +# Assert that the positions that are reported by the applier thread during +# START SLAVE are the same as the positions reported during STOP SLAVE. +--let $assert_text= Assert that the expected entry is in the error log during START SLAVE +--let $assert_file=$MYSQLTEST_VARDIR/log/mysqld.2.err +--let $assert_only_after = Slave SQL thread exiting, replication stopped in log +--let $assert_select= Slave SQL thread initialized, starting replication in log '$exec_master_log_file' at position $exec_master_log_pos +--let $assert_count= 1 +--source include/assert_grep.inc + +--source include/rpl_connection_master.inc +--source include/sync_slave_sql_with_master.inc + +--source include/rpl_connection_master.inc +DROP DATABASE db1; +DROP DATABASE db2; +--source include/rpl_end.inc diff --git a/sql/rpl_slave.cc b/sql/rpl_slave.cc index 40353286dea4..7f21f4c6c9ee 100644 --- a/sql/rpl_slave.cc +++ b/sql/rpl_slave.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -1693,6 +1693,10 @@ static bool sql_slave_killed(THD* thd, Relay_log_info* rli) DBUG_ASSERT(rli->slave_running == 1); if (rli->sql_thread_kill_accepted) DBUG_RETURN(true); + DBUG_EXECUTE_IF("stop_when_mts_in_group", rli->abort_slave = 1; + DBUG_SET("-d,stop_when_mts_in_group"); + DBUG_SET("-d,simulate_stop_when_mts_in_group"); + DBUG_RETURN(false);); if (abort_loop || thd->killed || rli->abort_slave) { rli->sql_thread_kill_accepted= true; @@ -3932,6 +3936,10 @@ apply_event_and_update_pos(Log_event** ptr_ev, THD* thd, Relay_log_info* rli) DBUG_RETURN(SLAVE_APPLY_EVENT_AND_UPDATE_POS_OK); exec_res= ev->apply_event(rli); + DBUG_EXECUTE_IF("simulate_stop_when_mts_in_group", + if (rli->mts_group_status == Relay_log_info::MTS_IN_GROUP + && rli->curr_group_seen_begin) + DBUG_SET("+d,stop_when_mts_in_group");); if (!exec_res && (ev->worker != rli)) { @@ -6102,6 +6110,7 @@ pthread_handler_t handle_slave_sql(void *arg) Relay_log_info* rli = ((Master_info*)arg)->rli; const char *errmsg; + const char *error_string; bool mts_inited= false; // needs to call my_thread_init(), otherwise we get a coredump in DBUG_ stuff @@ -6112,6 +6121,7 @@ pthread_handler_t handle_slave_sql(void *arg) mysql_mutex_lock(&rli->run_lock); DBUG_ASSERT(!rli->slave_running); errmsg= 0; + error_string= 0; #ifndef DBUG_OFF rli->events_until_exit = abort_slave_event_count; #endif @@ -6382,31 +6392,31 @@ log '%s' at position %s, relay log '%s' position: %s", rli->get_rpl_log_name(), sql_print_warning("Slave: %s Error_code: %d", err->get_message_text(), err->get_sql_errno()); } if (udf_error) - sql_print_error("Error loading user-defined library, slave SQL " - "thread aborted. Install the missing library, and restart the " - "slave SQL thread with \"SLAVE START\". We stopped at log '%s' " - "position %s", rli->get_rpl_log_name(), - llstr(rli->get_group_master_log_pos(), llbuff)); + error_string= "Error loading user-defined library, slave SQL " + "thread aborted. Install the missing library, and restart the" + " slave SQL thread with \"SLAVE START\"."; else - sql_print_error("\ -Error running query, slave SQL thread aborted. Fix the problem, and restart \ -the slave SQL thread with \"SLAVE START\". We stopped at log \ -'%s' position %s", rli->get_rpl_log_name(), -llstr(rli->get_group_master_log_pos(), llbuff)); + error_string= "Error running query, slave SQL thread aborted." + " Fix the problem, and restart the slave SQL thread with " + "\"SLAVE START\"."; } goto err; } } - /* Thread stopped. Print the current replication position to the log */ - sql_print_information("Slave SQL thread exiting, replication stopped in log " - "'%s' at position %s", - rli->get_rpl_log_name(), - llstr(rli->get_group_master_log_pos(), llbuff)); - err: slave_stop_workers(rli, &mts_inited); // stopping worker pool + /* Thread stopped. Print the current replication position to the log */ + if (error_string) + sql_print_error("%s We stopped at log '%s' position %s.", error_string, + rli->get_rpl_log_name(), + llstr(rli->get_group_master_log_pos(), llbuff)); + else + sql_print_information("Slave SQL thread exiting, replication stopped in log" + " '%s' at position %s", + rli->get_rpl_log_name(), + llstr(rli->get_group_master_log_pos(), llbuff)); rli->clear_mts_recovery_groups(); /* From f4c3809bf478a6197404faf45152618055811edb Mon Sep 17 00:00:00 2001 From: Ricardo Ferreira E Ferreira Date: Thu, 22 Mar 2018 14:54:17 +0000 Subject: [PATCH 0751/1221] BUG#27590534: SQL_SERVICE_INTERFACE.CC: INCORRECT ERROR MESSAGE PARAMETERS ORDER ER_GRP_RPL_SQL_SERVICE_FAILED_TO_RUN_SQL_QUERY was being logged with the incorrect argument types (the error textual representation and code were switched). The ER_GRP_RPL_SQL_SERVICE_FAILED_TO_RUN_SQL_QUERY was fixed where it was being logged. --- .../src/sql_service/sql_service_interface.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/rapid/plugin/group_replication/src/sql_service/sql_service_interface.cc b/rapid/plugin/group_replication/src/sql_service/sql_service_interface.cc index f4e79f5b6980..986e1292a5a0 100644 --- a/rapid/plugin/group_replication/src/sql_service/sql_service_interface.cc +++ b/rapid/plugin/group_replication/src/sql_service/sql_service_interface.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -194,8 +194,8 @@ long Sql_service_interface::execute_internal(Sql_resultset *rset, if (err != 0) { log_message(MY_ERROR_LEVEL, "Error running internal SQL query: %s. Got " - "internal SQL error: %s(%d)", cmd.com_query.query, - rset->sql_errno(), rset->err_msg().c_str()); + "SQL error: %s(%d)", cmd.com_query.query, + rset->err_msg().c_str(), rset->sql_errno()); } else { From e734bab1a8551b1af52651ea4d9e8365f950e19b Mon Sep 17 00:00:00 2001 From: Tiago Vale Date: Mon, 9 Apr 2018 16:22:37 +0100 Subject: [PATCH 0752/1221] Bug#27628695 LOG WHEN MEMBER CAN'T JOIN GROUP DUE TO != GROUP_REPLICATION_GROUP_NAME MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Problem ======= The system does not provide helpful feedback when a node attempts to join the wrong group, i.e. when the joining node's group_replication_group_name does not match the seed's group_replication_group_name. Solution ======== Log this fact on the seed's error log. Reviewed-by: Alfrânio Correia Reviewed-by: André Negrão RB: 19270 --- .../src/bindings/xcom/xcom/xcom_base.c | 42 +++++++++++++++++++ .../mtr/r/gr_incorrect_group_name_join.result | 3 ++ .../gr_multiple_groups_in_group_seeds.result | 6 +++ .../mtr/t/gr_incorrect_group_name_join.test | 3 ++ .../t/gr_multiple_groups_in_group_seeds.test | 6 +++ 5 files changed, 60 insertions(+) diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.c b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.c index 917ea80a61a1..11211acabc29 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.c +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.c @@ -3519,6 +3519,33 @@ static u_int is_reincarnation_removing(app_data_ptr a) return 0; } +/** + * Logs the fact that an add/remove node request is aimed at another group. + * + * @param a a pointer to the app_data of the configuration command + * @param message_fmt a formatted message to log, containing a single %s that will be replaced by the node's address + */ +static void log_cfgchange_wrong_group(app_data_ptr a, const char *const message_fmt) +{ + u_int const nr_nodes = a->body.app_u_u.nodes.node_list_len; + u_int i; + for (i = 0; i < nr_nodes; i++) + { + char const *const address = a->body.app_u_u.nodes.node_list_val[i].address; + G_WARNING(message_fmt, address); + } +} + +/** + * Validates if a configuration command can be executed. + * Checks whether the configuration command is aimed at the correct group. + * Checks whether the configuration command pertains to a node reincarnation. + * + * @param p a pointer to the pax_msg of the configuration command + * @retval REQUEST_OK if the reconfiguration command can be executed + * @retval REQUEST_RETRY if XCom is still booting + * @retval REQUEST_FAIL if the configuration command cannot be executed + */ static client_reply_code can_execute_cfgchange(pax_msg *p) { app_data_ptr a = p->a; @@ -3527,7 +3554,22 @@ static client_reply_code can_execute_cfgchange(pax_msg *p) return REQUEST_RETRY; if (a && a->group_id != 0 && a->group_id != executed_msg.group_id) + { + switch (a->body.c_t) { + case add_node_type: + log_cfgchange_wrong_group(a, "The request to add %s to the group has been rejected because it is aimed at another group"); + break; + case remove_node_type: + log_cfgchange_wrong_group(a, "The request to remove %s from the group has been rejected because it is aimed at another group"); + break; + case force_config_type: + G_WARNING("The request to force the group membership has been rejected because it is aimed at another group"); + break; + default: + assert(0 && "A cargo_type different from {add_node_type, remove_node_type, force_config_type} should not have hit this code path"); + } return REQUEST_FAIL; + } if (a && a->body.c_t == add_node_type && is_reincarnation_adding(a)) return REQUEST_FAIL; diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_incorrect_group_name_join.result b/rapid/plugin/group_replication/tests/mtr/r/gr_incorrect_group_name_join.result index 3335a5637b8e..896736e95436 100644 --- a/rapid/plugin/group_replication/tests/mtr/r/gr_incorrect_group_name_join.result +++ b/rapid/plugin/group_replication/tests/mtr/r/gr_incorrect_group_name_join.result @@ -5,6 +5,9 @@ Note #### Storing MySQL user name or password information in the master info rep [connection server1] [connection server1] include/start_and_bootstrap_group_replication.inc +SET SESSION sql_log_bin= 0; +call mtr.add_suppression("The request to add .*:[0-9]* to the group has been rejected because it is aimed at another group"); +SET SESSION sql_log_bin= 1; [connection server2] SET SESSION sql_log_bin= 0; call mtr.add_suppression("Timeout on wait for view after joining group"); diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_multiple_groups_in_group_seeds.result b/rapid/plugin/group_replication/tests/mtr/r/gr_multiple_groups_in_group_seeds.result index 826c41f4a579..d024b4eb7d1c 100644 --- a/rapid/plugin/group_replication/tests/mtr/r/gr_multiple_groups_in_group_seeds.result +++ b/rapid/plugin/group_replication/tests/mtr/r/gr_multiple_groups_in_group_seeds.result @@ -8,8 +8,14 @@ Note #### Storing MySQL user name or password information in the master info rep # [connection server1] include/start_and_bootstrap_group_replication.inc +set session sql_log_bin=0; +call mtr.add_suppression("The request to add .*:[0-9]* to the group has been rejected because it is aimed at another group"); +set session sql_log_bin=1; [connection server2] include/start_and_bootstrap_group_replication.inc +set session sql_log_bin=0; +call mtr.add_suppression("The request to add .*:[0-9]* to the group has been rejected because it is aimed at another group"); +set session sql_log_bin=1; # # GROUP#1 is b0000000-7fb8-11e6-9f35-ac56a84b7f00 # GROUP#2 is b1111111-7fb8-11e6-9f35-ac56a84b7f11 diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_incorrect_group_name_join.test b/rapid/plugin/group_replication/tests/mtr/t/gr_incorrect_group_name_join.test index 38ee363a774c..94a459d1a912 100644 --- a/rapid/plugin/group_replication/tests/mtr/t/gr_incorrect_group_name_join.test +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_incorrect_group_name_join.test @@ -18,6 +18,9 @@ --let $rpl_connection_name= server1 --source include/rpl_connection.inc --source ../inc/start_and_bootstrap_group_replication.inc +SET SESSION sql_log_bin= 0; +call mtr.add_suppression("The request to add .*:[0-9]* to the group has been rejected because it is aimed at another group"); +SET SESSION sql_log_bin= 1; --let $rpl_connection_name= server2 --source include/rpl_connection.inc diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_multiple_groups_in_group_seeds.test b/rapid/plugin/group_replication/tests/mtr/t/gr_multiple_groups_in_group_seeds.test index 9e6a720d9d36..d9fdfcc91d97 100644 --- a/rapid/plugin/group_replication/tests/mtr/t/gr_multiple_groups_in_group_seeds.test +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_multiple_groups_in_group_seeds.test @@ -37,6 +37,9 @@ --let $group_replication_group_name= $group_name_server1 --source ../inc/start_and_bootstrap_group_replication.inc --let $local_address_m1= `SELECT @@GLOBAL.group_replication_local_address;` +set session sql_log_bin=0; +call mtr.add_suppression("The request to add .*:[0-9]* to the group has been rejected because it is aimed at another group"); +set session sql_log_bin=1; --let $rpl_connection_name= server2 --source include/rpl_connection.inc @@ -45,6 +48,9 @@ --let $group_replication_group_name= $group_name_server2 --source ../inc/start_and_bootstrap_group_replication.inc --let $local_address_m2= `SELECT @@GLOBAL.group_replication_local_address;` +set session sql_log_bin=0; +call mtr.add_suppression("The request to add .*:[0-9]* to the group has been rejected because it is aimed at another group"); +set session sql_log_bin=1; --echo # --echo # GROUP#1 is $group_name_server1 From dee1463201a59d0685792a954ac98da92d8d1ef9 Mon Sep 17 00:00:00 2001 From: Sachin Agarwal Date: Tue, 10 Apr 2018 18:41:13 +0530 Subject: [PATCH 0753/1221] Bug#26100239 - CRASH ON STARTUP, DIVIDE BY ZERO, WITH INAPPROPRIATE BUFFER POOL CONFIGURATION Problem: In Windows-x64, when mysql server start with "--innodb-buffer-pool-size=10G --innodb-buffer-pool-instances=64", buf_pool_size_align() function raises divide by ZERO exception because when it calculate 'm = srv_buf_pool_instances * srv_buf_pool_chunk_unit', 'm' gets ZERO and 'm' is used to align innodb buffer pool size to the multiple of 'srv_buf_pool_chunk_unit'. 'srv_buf_pool_chunk_unit' and 'srv_buf_pool_instances' both are defined as ulong, which is 4-byte data-type in Windows-x64. So the multiplication of these two variable truncates all the bits beyond 4-bytes. Fix: Modified data-type for 'srv_buf_pool_instances' to ulonglong. RB: 19194 Reviewed by : Jimmy.Yang@oracle.com --- storage/innobase/handler/ha_innodb.cc | 6 +++--- storage/innobase/include/srv0srv.h | 4 ++-- storage/innobase/srv/srv0srv.cc | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index 2d402a35472b..8d2263684f91 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -19645,13 +19645,13 @@ static MYSQL_SYSVAR_LONGLONG(buffer_pool_size, innobase_buffer_pool_size, static_cast(srv_buf_pool_min_size), LLONG_MAX, 1024*1024L); -static MYSQL_SYSVAR_ULONG(buffer_pool_chunk_size, srv_buf_pool_chunk_unit, +static MYSQL_SYSVAR_ULONGLONG(buffer_pool_chunk_size, srv_buf_pool_chunk_unit, PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY, "Size of a single memory chunk within each buffer pool instance" " for resizing buffer pool. Online buffer pool resizing happens" " at this granularity. 0 means disable resizing buffer pool.", NULL, NULL, - 128 * 1024 * 1024, 1024 * 1024, LONG_MAX, 1024 * 1024); + 128 * 1024 * 1024, 1024 * 1024, ULONG_MAX, 1024 * 1024); #if defined UNIV_DEBUG || defined UNIV_PERF_DEBUG static MYSQL_SYSVAR_ULONG(page_hash_locks, srv_n_page_hash_locks, @@ -21262,7 +21262,7 @@ innodb_buffer_pool_size_validate( push_warning_printf(thd, Sql_condition::SL_WARNING, ER_WRONG_ARGUMENTS, "InnoDB: Cannot resize buffer pool to lesser than" - " chunk size of %lu bytes.", srv_buf_pool_chunk_unit); + " chunk size of %llu bytes.", srv_buf_pool_chunk_unit); /* nothing to do */ return(0); } diff --git a/storage/innobase/include/srv0srv.h b/storage/innobase/include/srv0srv.h index 45430beaeeab..07dafdbc31cd 100644 --- a/storage/innobase/include/srv0srv.h +++ b/storage/innobase/include/srv0srv.h @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved. +Copyright (c) 1995, 2018, Oracle and/or its affiliates. All rights reserved. Copyright (c) 2008, 2009, Google Inc. Copyright (c) 2009, Percona Inc. @@ -305,7 +305,7 @@ extern const ulint srv_buf_pool_min_size; extern const ulint srv_buf_pool_def_size; /** Requested buffer pool chunk size. Each buffer pool instance consists of one or more chunks. */ -extern ulong srv_buf_pool_chunk_unit; +extern ulonglong srv_buf_pool_chunk_unit; /** Requested number of buffer pool instances */ extern ulong srv_buf_pool_instances; /** Default number of buffer pool instances */ diff --git a/storage/innobase/srv/srv0srv.cc b/storage/innobase/srv/srv0srv.cc index fa8109cc6de2..90e0759cadfe 100644 --- a/storage/innobase/srv/srv0srv.cc +++ b/storage/innobase/srv/srv0srv.cc @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1995, 2017, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1995, 2018, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2008, 2009 Google Inc. Copyright (c) 2009, Percona Inc. @@ -250,7 +250,7 @@ const ulint srv_buf_pool_min_size = 5 * 1024 * 1024; const ulint srv_buf_pool_def_size = 128 * 1024 * 1024; /** Requested buffer pool chunk size. Each buffer pool instance consists of one or more chunks. */ -ulong srv_buf_pool_chunk_unit; +ulonglong srv_buf_pool_chunk_unit; /** Requested number of buffer pool instances */ ulong srv_buf_pool_instances; /** Default number of buffer pool instances */ From 4b3393b770f00ce76afcf135b044c176c659ab87 Mon Sep 17 00:00:00 2001 From: Arun Kuruvila Date: Wed, 11 Apr 2018 08:43:25 +0530 Subject: [PATCH 0754/1221] Bug#27302337: MYSQL ABORTS WITHOUT PROPER ERROR MESSAGE ON STARTUP IF GRANT TABLES ARE CORRUPT Post push patch to fix PB2 test case failure on windows. --- mysql-test/t/grant_debug.test | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mysql-test/t/grant_debug.test b/mysql-test/t/grant_debug.test index 91ecdd909dbb..b8f06e2ca28e 100644 --- a/mysql-test/t/grant_debug.test +++ b/mysql-test/t/grant_debug.test @@ -186,7 +186,7 @@ let server_log= $MYSQLTEST_VARDIR/log/mysqld.1.err; --echo # Start the server to simulate acl_init() failure --error 1 ---exec $MYSQLD_CMD --datadir=$DDIR --debug=+d,simulate_acl_init_failure > $server_log 2>&1 +--exec $MYSQLD_CMD --datadir=$DDIR --debug=d,simulate_acl_init_failure --loose-console > $server_log 2>&1 let SEARCH_FILE=$server_log; let SEARCH_PATTERN=Table 'user' is marked as crashed and should be repaired; @@ -197,6 +197,6 @@ let SEARCH_PATTERN=Aborting; --source include/search_pattern.inc --echo # Restart the server ---exec echo "restart: --debug=-d,simulate_acl_init_failure" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect +--exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect --enable_reconnect --source include/wait_until_connected_again.inc From c3778161bddb807869faa906604dcc32d05beeff Mon Sep 17 00:00:00 2001 From: Nisha Gopalakrishnan Date: Wed, 4 Apr 2018 20:36:14 +0530 Subject: [PATCH 0755/1221] Bug#27073100: PARTITION UPDATE_TIME NOT CORRECT AFTER RESTART/REBUILD Analysis ======== When restarting MySQL or rebuilding the table, all partitions will initially have 'update_time' set to NULL. When a partition is updated, 'update_time' for all partitions with a higher ordinal position will also be updated. Function store_schema_partitions_record() doesn't mark the 'update_time' field as NULL, when 'update_time' for the partition is ZERO. This causes get_schema_partitions_record() to use previous partition 'update_time'. Fix === The function 'store_schema_partitions_record()' now sets the 'update_time' to NULL, if it is set to zero in InnoDB. Change-Id: I25cb844e258342f4d73e264c6767c1319e915326 --- mysql-test/r/partition_innodb.result | 41 +++++++++++++++++++++++++ mysql-test/t/partition_innodb.test | 45 ++++++++++++++++++++++++++++ sql/sql_show.cc | 12 ++++++++ 3 files changed, 98 insertions(+) diff --git a/mysql-test/r/partition_innodb.result b/mysql-test/r/partition_innodb.result index 745877df211d..3cba38939729 100644 --- a/mysql-test/r/partition_innodb.result +++ b/mysql-test/r/partition_innodb.result @@ -167,6 +167,7 @@ id name myDate # No changes. COMMIT; DROP TABLE t1; +SET AUTOCOMMIT= default; # # Bug#51830: Incorrect partition pruning on range partition (regression) # @@ -341,6 +342,7 @@ UPDATE t1 SET data = data*2 WHERE data = 2; SET @@session.tx_isolation = @old_tx_isolation; Warnings: Warning 1287 '@@tx_isolation' is deprecated and will be removed in a future release. Please use '@@transaction_isolation' instead +SET autocommit= default; DROP TABLE t1; # Bug#37721, test of ORDER BY on PK and WHERE on INDEX CREATE TABLE t1 ( @@ -1293,3 +1295,42 @@ test_jfg test_jfg11 test_jfg test_jfg12#P#p1000 test_jfg test_jfg12#P#pmax DROP DATABASE test_jfg; +# +# Bug#27073100: PARTITION UPDATE_TIME NOT CORRECT AFTER RESTART/REBUILD +# +# Set up. +CREATE TABLE t1 (fld1 INT(11) NOT NULL, fld2 INT(11) NOT NULL, +fld3 DATE NOT NULL, fld4 DATE NOT NULL, +PRIMARY KEY (fld1, fld3), KEY(fld1)) PARTITION +BY RANGE (YEAR(fld3)) +(PARTITION p01 VALUES LESS THAN (1985) ENGINE = InnoDB, +PARTITION p02 VALUES LESS THAN (1986) ENGINE = InnoDB, +PARTITION p03 VALUES LESS THAN MAXVALUE ENGINE = InnoDB); +INSERT INTO t1 VALUES('11', '11111', '1984-11-16', +'2008-11-16'), ('12', '11112', '1985-11-16', '2008-11-16'), +('13', '11113', '1986-11-16', '2008-11-16'); +# Fetch the count of 'update_time' which is not null. +SELECT TABLE_NAME, COUNT(UPDATE_TIME) FROM INFORMATION_SCHEMA.PARTITIONS +WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME = 't1' ORDER BY +PARTITION_ORDINAL_POSITION; +TABLE_NAME COUNT(UPDATE_TIME) +t1 3 +# Rebuild the table. +ALTER TABLE t1 ENGINE=INNODB; +# After table rebuild, the 'update_time' will be set to NULL. +# Hence the count would return 0. +SELECT TABLE_NAME, COUNT(UPDATE_TIME) FROM INFORMATION_SCHEMA.PARTITIONS +WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME = 't1' ORDER BY +PARTITION_ORDINAL_POSITION; +TABLE_NAME COUNT(UPDATE_TIME) +t1 0 +# Update the table where partition p02 is updated. +UPDATE t1 SET fld2 = 71000 WHERE fld1 = 12 AND fld3 = '1985-11-16'; +# Without fix, the count for 'update_time' will be 2. After fix, +# it will be 1 since only partition 'p02' is updated. +SELECT TABLE_NAME, COUNT(UPDATE_TIME) +FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA = 'test' AND +TABLE_NAME = 't1' ORDER BY PARTITION_ORDINAL_POSITION; +TABLE_NAME COUNT(UPDATE_TIME) +t1 1 +DROP TABLE t1; diff --git a/mysql-test/t/partition_innodb.test b/mysql-test/t/partition_innodb.test index f534a6859372..bcae676d9ea6 100644 --- a/mysql-test/t/partition_innodb.test +++ b/mysql-test/t/partition_innodb.test @@ -178,6 +178,7 @@ SELECT * FROM t1; --echo # No changes. COMMIT; DROP TABLE t1; +SET AUTOCOMMIT= default; --echo # @@ -339,6 +340,7 @@ UPDATE t1 SET data = data*2 WHERE data = 2; #SHOW ENGINE InnoDB STATUS; SET @@session.tx_isolation = @old_tx_isolation; +SET autocommit= default; DROP TABLE t1; @@ -1274,3 +1276,46 @@ SELECT database_name, table_name FROM mysql.innodb_table_stats WHERE database_name = 'test_jfg'; DROP DATABASE test_jfg; + + +--echo # +--echo # Bug#27073100: PARTITION UPDATE_TIME NOT CORRECT AFTER RESTART/REBUILD +--echo # + +--echo # Set up. + +CREATE TABLE t1 (fld1 INT(11) NOT NULL, fld2 INT(11) NOT NULL, +fld3 DATE NOT NULL, fld4 DATE NOT NULL, +PRIMARY KEY (fld1, fld3), KEY(fld1)) PARTITION +BY RANGE (YEAR(fld3)) +(PARTITION p01 VALUES LESS THAN (1985) ENGINE = InnoDB, +PARTITION p02 VALUES LESS THAN (1986) ENGINE = InnoDB, +PARTITION p03 VALUES LESS THAN MAXVALUE ENGINE = InnoDB); +INSERT INTO t1 VALUES('11', '11111', '1984-11-16', +'2008-11-16'), ('12', '11112', '1985-11-16', '2008-11-16'), +('13', '11113', '1986-11-16', '2008-11-16'); + +--echo # Fetch the count of 'update_time' which is not null. +SELECT TABLE_NAME, COUNT(UPDATE_TIME) FROM INFORMATION_SCHEMA.PARTITIONS +WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME = 't1' ORDER BY +PARTITION_ORDINAL_POSITION; + +--echo # Rebuild the table. +ALTER TABLE t1 ENGINE=INNODB; + +--echo # After table rebuild, the 'update_time' will be set to NULL. +--echo # Hence the count would return 0. +SELECT TABLE_NAME, COUNT(UPDATE_TIME) FROM INFORMATION_SCHEMA.PARTITIONS +WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME = 't1' ORDER BY +PARTITION_ORDINAL_POSITION; + +--echo # Update the table where partition p02 is updated. +UPDATE t1 SET fld2 = 71000 WHERE fld1 = 12 AND fld3 = '1985-11-16'; + +--echo # Without fix, the count for 'update_time' will be 2. After fix, +--echo # it will be 1 since only partition 'p02' is updated. +SELECT TABLE_NAME, COUNT(UPDATE_TIME) +FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA = 'test' AND +TABLE_NAME = 't1' ORDER BY PARTITION_ORDINAL_POSITION; + +DROP TABLE t1; diff --git a/sql/sql_show.cc b/sql/sql_show.cc index 3e430c2398bb..aa4ab9225f66 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -6692,6 +6692,10 @@ static void store_schema_partitions_record(THD *thd, TABLE *schema_table, table->field[18]->store_time(&time); table->field[18]->set_notnull(); } + else + { + table->field[18]->set_null(); + } if (stat_info.update_time) { thd->variables.time_zone->gmt_sec_to_TIME(&time, @@ -6699,6 +6703,10 @@ static void store_schema_partitions_record(THD *thd, TABLE *schema_table, table->field[19]->store_time(&time); table->field[19]->set_notnull(); } + else + { + table->field[19]->set_null(); + } if (stat_info.check_time) { thd->variables.time_zone->gmt_sec_to_TIME(&time, @@ -6706,6 +6714,10 @@ static void store_schema_partitions_record(THD *thd, TABLE *schema_table, table->field[20]->store_time(&time); table->field[20]->set_notnull(); } + else + { + table->field[20]->set_null(); + } if (file->ha_table_flags() & (ulong) HA_HAS_CHECKSUM) { table->field[21]->store((longlong) check_sum, TRUE); From f3e72ecbef22834ad0df3dee7218cda79284605d Mon Sep 17 00:00:00 2001 From: Jens Even Berg Blomsoy Date: Tue, 10 Apr 2018 15:22:30 +0200 Subject: [PATCH 0756/1221] Bug #27688294 CONTRIBUTION: FIXED TYPOS Contribution bug fix by Thomas Tsiakalakis Thank you very much for this Thomas. --- sql/mysqld.cc | 2 +- sql/sql_parse.cc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sql/mysqld.cc b/sql/mysqld.cc index f6a610f60c7c..7bfe384faafa 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -2735,7 +2735,7 @@ int init_common_variables() /* TODO: remove this when my_time_t is 64 bit compatible */ if (!IS_TIME_T_VALID_FOR_TIMESTAMP(server_start_time)) { - sql_print_error("This MySQL server doesn't support dates later then 2038"); + sql_print_error("This MySQL server doesn't support dates later than 2038"); return 1; } diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 91561d1c8181..f509671e4b01 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -1250,7 +1250,7 @@ bool dispatch_command(THD *thd, const COM_DATA *com_data, TODO: remove this when we have full 64 bit my_time_t support */ - sql_print_error("This MySQL server doesn't support dates later then 2038"); + sql_print_error("This MySQL server doesn't support dates later than 2038"); ulong master_access= thd->security_context()->master_access(); thd->security_context()->set_master_access(master_access | SHUTDOWN_ACL); command= COM_SHUTDOWN; From e1b7e831bb0a81d94ddb83ca95c9d76f960aa019 Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Wed, 11 Apr 2018 14:13:17 +0200 Subject: [PATCH 0757/1221] From 0273425ab670dfce755b71ee7f9c49e008b067bf Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Tue, 10 Apr 2018 15:48:57 -0700 Subject: [PATCH 0758/1221] TDB-188 : TDB-114 (Change use of MySQL HASH to unordered_map) introduces memory leak - TDB-114 eliminated the HASH callback that releases a TOKUDB_SHARE without adding that logic back into the drop_share method. Added destruction logic back. - Since this commit is fixing an issue that has not yet been released, the GCA position is behind the place where the issue was introduced, therefore, this commit is being made on the HEAD and will be cherry picked forward to 5.7. --- storage/tokudb/ha_tokudb.cc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/storage/tokudb/ha_tokudb.cc b/storage/tokudb/ha_tokudb.cc index 6a60b57f9e55..548ac5c7b092 100644 --- a/storage/tokudb/ha_tokudb.cc +++ b/storage/tokudb/ha_tokudb.cc @@ -252,6 +252,8 @@ void TOKUDB_SHARE::drop_share(TOKUDB_SHARE* share) { mutex_t_lock(_open_tables_mutex); size_t n = _open_tables.erase(std::string(share->full_table_name())); assert_always(n == 1); + share->destroy(); + delete share; mutex_t_unlock(_open_tables_mutex); } TOKUDB_SHARE::share_state_t TOKUDB_SHARE::addref() { From 833ef8e60741020b826d24e9fd240685925552b7 Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Tue, 10 Apr 2018 15:48:57 -0700 Subject: [PATCH 0759/1221] TDB-188 : TDB-114 (Change use of MySQL HASH to unordered_map) introduces memory leak - TDB-114 eliminated the HASH callback that releases a TOKUDB_SHARE without adding that logic back into the drop_share method. Added destruction logic back. - Since this commit is fixing an issue that has not yet been released, the GCA position is behind the place where the issue was introduced, therefore, this commit is being made on the HEAD and will be cherry picked forward to 5.7. (cherry picked from commit 0273425ab670dfce755b71ee7f9c49e008b067bf) --- storage/tokudb/ha_tokudb.cc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/storage/tokudb/ha_tokudb.cc b/storage/tokudb/ha_tokudb.cc index 1561052c683c..fe55ea2bafa3 100644 --- a/storage/tokudb/ha_tokudb.cc +++ b/storage/tokudb/ha_tokudb.cc @@ -252,6 +252,8 @@ void TOKUDB_SHARE::drop_share(TOKUDB_SHARE* share) { mutex_t_lock(_open_tables_mutex); size_t n = _open_tables.erase(std::string(share->full_table_name())); assert_always(n == 1); + share->destroy(); + delete share; mutex_t_unlock(_open_tables_mutex); } TOKUDB_SHARE::share_state_t TOKUDB_SHARE::addref() { From e377f870ccfc4921aad809a2093cb2e02b96251a Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Wed, 11 Apr 2018 12:30:38 -0700 Subject: [PATCH 0760/1221] TDB-189 : Fix -Werror=suggest-attribute=format - Annotated toku_dir_cmd_set_error with attribute((format...)) --- storage/tokudb/tokudb_dir_cmd.h | 6 ++---- storage/tokudb/tokudb_sysvars.cc | 16 +++++++++++----- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/storage/tokudb/tokudb_dir_cmd.h b/storage/tokudb/tokudb_dir_cmd.h index b39caadc7c3c..2036d3f65fb5 100644 --- a/storage/tokudb/tokudb_dir_cmd.h +++ b/storage/tokudb/tokudb_dir_cmd.h @@ -31,10 +31,8 @@ Copyright (c) 2006, 2015, Percona and/or its affiliates. All rights reserved. namespace tokudb { struct dir_cmd_callbacks { - void (*set_error)(THD *thd, - int error, - const char *error_fmt, - ...); + void (*set_error)(THD *thd, int error, const char *error_fmt, ...) + MY_ATTRIBUTE((format(printf, 3, 4))); }; void process_dir_cmd(THD *thd, diff --git a/storage/tokudb/tokudb_sysvars.cc b/storage/tokudb/tokudb_sysvars.cc index 31c44c455009..0c8c7a710e46 100644 --- a/storage/tokudb/tokudb_sysvars.cc +++ b/storage/tokudb/tokudb_sysvars.cc @@ -941,10 +941,8 @@ static MYSQL_THDVAR_STR(dir_cmd, "name of the directory where the backup is stored", dir_cmd_check, NULL, NULL); -static void dir_cmd_set_error(THD *thd, - int error, - const char *error_fmt, - ...) { +static void MY_ATTRIBUTE((format(printf, 3, 4))) + dir_cmd_set_error(THD* thd, int error, const char* error_fmt, ...) { char buff[error_buffer_max_size]; va_list varargs; @@ -959,10 +957,18 @@ static void dir_cmd_set_error(THD *thd, THDVAR_SET(thd, dir_cmd_last_error_string, buff); } +static void dir_cmd_clear_error(THD* thd) { + static constexpr int no_error = 0; + static const char* empty_error_str = ""; + THDVAR_SET(thd, dir_cmd_last_error, &no_error); + THDVAR_SET(thd, dir_cmd_last_error_string, empty_error_str); +} + + static int dir_cmd_check(THD* thd, struct st_mysql_sys_var* var, void* save, struct st_mysql_value* value) { int error = 0; - dir_cmd_set_error(thd, error, ""); + dir_cmd_clear_error(thd); if (check_global_access(thd, SUPER_ACL)) { return 1; From 1d52bcb6b011bc6171f527783d2c05ffa55b7bcb Mon Sep 17 00:00:00 2001 From: Gleb Shchepa Date: Fri, 23 Mar 2018 13:28:06 +0400 Subject: [PATCH 0761/1221] WL#11459: Deprecate the syntax for GROUP BY ASC and DESC in 5.7 This patch is for 5.7. --- mysql-test/r/group_by.result | 22 ++++++++++ mysql-test/r/key.result | 2 + mysql-test/r/olap.result | 4 ++ mysql-test/r/user_var.result | 10 +++++ .../suite/funcs_1/r/innodb_views.result | 6 +++ .../suite/funcs_1/r/memory_views.result | 6 +++ .../suite/funcs_1/r/myisam_views-big.result | 6 +++ mysql-test/suite/innodb_fts/r/opt.result | 2 + sql/sql_yacc.yy | 43 +++++++++++++++---- 9 files changed, 92 insertions(+), 9 deletions(-) diff --git a/mysql-test/r/group_by.result b/mysql-test/r/group_by.result index dec56f87be82..4330a7a8e880 100644 --- a/mysql-test/r/group_by.result +++ b/mysql-test/r/group_by.result @@ -261,26 +261,35 @@ explain select userid,count(*) from t1 group by userid desc; id select_type table partitions type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 8 100.00 Using temporary; Using filesort Warnings: +Warning 1287 'GROUP BY with ASC/DESC' is deprecated and will be removed in a future release. Please use GROUP BY ... ORDER BY ... ASC/DESC instead Note 1003 /* select#1 */ select `test`.`t1`.`userID` AS `userid`,count(0) AS `count(*)` from `test`.`t1` group by `test`.`t1`.`userID` desc explain select userid,count(*) from t1 group by userid desc order by null; id select_type table partitions type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 8 100.00 Using temporary Warnings: +Warning 1287 'GROUP BY with ASC/DESC' is deprecated and will be removed in a future release. Please use GROUP BY ... ORDER BY ... ASC/DESC instead Note 1003 /* select#1 */ select `test`.`t1`.`userID` AS `userid`,count(0) AS `count(*)` from `test`.`t1` group by `test`.`t1`.`userID` desc order by NULL select userid,count(*) from t1 group by userid desc; userid count(*) 3 5 2 1 1 2 +Warnings: +Warning 1287 'GROUP BY with ASC/DESC' is deprecated and will be removed in a future release. Please use GROUP BY ... ORDER BY ... ASC/DESC instead select userid,count(*) from t1 group by userid desc having (count(*)+1) IN (4,3); userid count(*) 1 2 +Warnings: +Warning 1287 'GROUP BY with ASC/DESC' is deprecated and will be removed in a future release. Please use GROUP BY ... ORDER BY ... ASC/DESC instead select userid,count(*) from t1 group by userid desc having 3 IN (1,COUNT(*)); userid count(*) +Warnings: +Warning 1287 'GROUP BY with ASC/DESC' is deprecated and will be removed in a future release. Please use GROUP BY ... ORDER BY ... ASC/DESC instead explain select spid,count(*) from t1 where spid between 1 and 2 group by spid desc; id select_type table partitions type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 NULL range spID spID 5 NULL 3 100.00 Using where; Using index Warnings: +Warning 1287 'GROUP BY with ASC/DESC' is deprecated and will be removed in a future release. Please use GROUP BY ... ORDER BY ... ASC/DESC instead Note 1003 /* select#1 */ select `test`.`t1`.`spID` AS `spid`,count(0) AS `count(*)` from `test`.`t1` where (`test`.`t1`.`spID` between 1 and 2) group by `test`.`t1`.`spID` desc explain select spid,count(*) from t1 where spid between 1 and 2 group by spid; id select_type table partitions type possible_keys key key_len ref rows filtered Extra @@ -300,16 +309,20 @@ select spid,count(*) from t1 where spid between 1 and 2 group by spid desc; spid count(*) 2 2 1 1 +Warnings: +Warning 1287 'GROUP BY with ASC/DESC' is deprecated and will be removed in a future release. Please use GROUP BY ... ORDER BY ... ASC/DESC instead explain extended select sql_big_result spid,sum(userid) from t1 group by spid desc; id select_type table partitions type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 NULL ALL spID NULL NULL NULL 8 100.00 Using filesort Warnings: Warning 1681 'EXTENDED' is deprecated and will be removed in a future release. +Warning 1287 'GROUP BY with ASC/DESC' is deprecated and will be removed in a future release. Please use GROUP BY ... ORDER BY ... ASC/DESC instead Note 1003 /* select#1 */ select sql_big_result `test`.`t1`.`spID` AS `spid`,sum(`test`.`t1`.`userID`) AS `sum(userid)` from `test`.`t1` group by `test`.`t1`.`spID` desc explain select sql_big_result spid,sum(userid) from t1 group by spid desc order by null; id select_type table partitions type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 NULL ALL spID NULL NULL NULL 8 100.00 Using filesort Warnings: +Warning 1287 'GROUP BY with ASC/DESC' is deprecated and will be removed in a future release. Please use GROUP BY ... ORDER BY ... ASC/DESC instead Note 1003 /* select#1 */ select sql_big_result `test`.`t1`.`spID` AS `spid`,sum(`test`.`t1`.`userID`) AS `sum(userid)` from `test`.`t1` group by `test`.`t1`.`spID` desc order by NULL select sql_big_result spid,sum(userid) from t1 group by spid desc; spid sum(userid) @@ -320,21 +333,27 @@ spid sum(userid) 3 3 2 3 1 1 +Warnings: +Warning 1287 'GROUP BY with ASC/DESC' is deprecated and will be removed in a future release. Please use GROUP BY ... ORDER BY ... ASC/DESC instead explain select sql_big_result score,count(*) from t1 group by score desc; id select_type table partitions type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 NULL index score score 3 NULL 8 100.00 Using index; Using filesort Warnings: +Warning 1287 'GROUP BY with ASC/DESC' is deprecated and will be removed in a future release. Please use GROUP BY ... ORDER BY ... ASC/DESC instead Note 1003 /* select#1 */ select sql_big_result `test`.`t1`.`score` AS `score`,count(0) AS `count(*)` from `test`.`t1` group by `test`.`t1`.`score` desc explain select sql_big_result score,count(*) from t1 group by score desc order by null; id select_type table partitions type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 NULL index score score 3 NULL 8 100.00 Using index; Using filesort Warnings: +Warning 1287 'GROUP BY with ASC/DESC' is deprecated and will be removed in a future release. Please use GROUP BY ... ORDER BY ... ASC/DESC instead Note 1003 /* select#1 */ select sql_big_result `test`.`t1`.`score` AS `score`,count(0) AS `count(*)` from `test`.`t1` group by `test`.`t1`.`score` desc order by NULL select sql_big_result score,count(*) from t1 group by score desc; score count(*) 3 5 2 1 1 2 +Warnings: +Warning 1287 'GROUP BY with ASC/DESC' is deprecated and will be removed in a future release. Please use GROUP BY ... ORDER BY ... ASC/DESC instead drop table t1; create table t1 (a date default null, b date default null); insert t1 values ('1999-10-01','2000-01-10'), ('1997-01-01','1998-10-01'); @@ -638,10 +657,13 @@ userid count(*) 3 5 2 1 1 2 +Warnings: +Warning 1287 'GROUP BY with ASC/DESC' is deprecated and will be removed in a future release. Please use GROUP BY ... ORDER BY ... ASC/DESC instead EXPLAIN SELECT userid,count(*) FROM t1 GROUP BY userid DESC; id select_type table partitions type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 8 100.00 Using temporary; Using filesort Warnings: +Warning 1287 'GROUP BY with ASC/DESC' is deprecated and will be removed in a future release. Please use GROUP BY ... ORDER BY ... ASC/DESC instead Note 1003 /* select#1 */ select `test`.`t1`.`userid` AS `userid`,count(0) AS `count(*)` from `test`.`t1` group by `test`.`t1`.`userid` desc DROP TABLE t1; CREATE TABLE t1 ( diff --git a/mysql-test/r/key.result b/mysql-test/r/key.result index f7b9eac1339d..a949f57a376e 100644 --- a/mysql-test/r/key.result +++ b/mysql-test/r/key.result @@ -601,6 +601,8 @@ c1 1 1 1 +Warnings: +Warning 1287 'GROUP BY with ASC/DESC' is deprecated and will be removed in a future release. Please use GROUP BY ... ORDER BY ... ASC/DESC instead DROP TABLE t1; CREATE TABLE t1 (a INT, b INT, INDEX (a,b)) engine=myisam; INSERT INTO t1 (a, b) diff --git a/mysql-test/r/olap.result b/mysql-test/r/olap.result index f667df8cc5d1..6e56a5b8df14 100644 --- a/mysql-test/r/olap.result +++ b/mysql-test/r/olap.result @@ -109,6 +109,8 @@ Calculator 1 125 Calculator 2 150 Calculator NULL 275 NULL NULL 7785 +Warnings: +Warning 1287 'GROUP BY with ASC/DESC' is deprecated and will be removed in a future release. Please use GROUP BY ... ORDER BY ... ASC/DESC instead select product, country_id , year, sum(profit) from t1 group by product, country_id, year with rollup limit 5; product country_id year sum(profit) Calculator 1 1999 50 @@ -764,4 +766,6 @@ GROUP BY 1 DESC WITH ROLLUP; NOT EXISTS (SELECT 1) 0 NULL +Warnings: +Warning 1287 'GROUP BY with ASC/DESC' is deprecated and will be removed in a future release. Please use GROUP BY ... ORDER BY ... ASC/DESC instead DROP TABLE t1; diff --git a/mysql-test/r/user_var.result b/mysql-test/r/user_var.result index 67753de31b55..e680d55364e6 100644 --- a/mysql-test/r/user_var.result +++ b/mysql-test/r/user_var.result @@ -334,30 +334,40 @@ select @a:=f1, count(f1) from t1 group by 1 desc; 3 2 2 1 1 4 +Warnings: +Warning 1287 'GROUP BY with ASC/DESC' is deprecated and will be removed in a future release. Please use GROUP BY ... ORDER BY ... ASC/DESC instead select @a:=f1, count(f1) from t1 group by 1 asc; @a:=f1 count(f1) 1 4 2 1 3 2 4 1 +Warnings: +Warning 1287 'GROUP BY with ASC/DESC' is deprecated and will be removed in a future release. Please use GROUP BY ... ORDER BY ... ASC/DESC instead select @a:=f2, count(f2) from t1 group by 1 desc; @a:=f2 count(f2) d 1 c 2 b 1 a 4 +Warnings: +Warning 1287 'GROUP BY with ASC/DESC' is deprecated and will be removed in a future release. Please use GROUP BY ... ORDER BY ... ASC/DESC instead select @a:=f3, count(f3) from t1 group by 1 desc; @a:=f3 count(f3) 4.5 1 3.5 2 2.5 1 1.5 4 +Warnings: +Warning 1287 'GROUP BY with ASC/DESC' is deprecated and will be removed in a future release. Please use GROUP BY ... ORDER BY ... ASC/DESC instead select @a:=f4, count(f4) from t1 group by 1 desc; @a:=f4 count(f4) 4.6 1 3.6 2 2.6 1 1.6 4 +Warnings: +Warning 1287 'GROUP BY with ASC/DESC' is deprecated and will be removed in a future release. Please use GROUP BY ... ORDER BY ... ASC/DESC instead drop table t1; create table t1 (f1 int); insert into t1 values (2), (1); diff --git a/mysql-test/suite/funcs_1/r/innodb_views.result b/mysql-test/suite/funcs_1/r/innodb_views.result index 25fc38e14e72..cbd8e7949a59 100644 --- a/mysql-test/suite/funcs_1/r/innodb_views.result +++ b/mysql-test/suite/funcs_1/r/innodb_views.result @@ -331,6 +331,8 @@ f59 10 CREATE or REPLACE VIEW v1 AS select f59 from tb2 group by f59 asc; +Warnings: +Warning 1287 'GROUP BY with ASC/DESC' is deprecated and will be removed in a future release. Please use GROUP BY ... ORDER BY ... ASC/DESC instead select * FROM v1 order by f59 limit 0,10; f59 1 @@ -345,6 +347,8 @@ f59 10 CREATE or REPLACE VIEW v1 AS select f59 from tb2 group by f59 desc; +Warnings: +Warning 1287 'GROUP BY with ASC/DESC' is deprecated and will be removed in a future release. Please use GROUP BY ... ORDER BY ... ASC/DESC instead select * FROM v1 order by f59 limit 0,10; f59 1 @@ -357,6 +361,8 @@ f59 8 9 10 +Warnings: +Warning 1287 'GROUP BY with ASC/DESC' is deprecated and will be removed in a future release. Please use GROUP BY ... ORDER BY ... ASC/DESC instead CREATE or REPLACE VIEW v1 AS (select f59 from tb2) union (select f59 from t1); select * FROM v1 order by f59 limit 0,10; diff --git a/mysql-test/suite/funcs_1/r/memory_views.result b/mysql-test/suite/funcs_1/r/memory_views.result index b9016a5186ce..545327ea9037 100644 --- a/mysql-test/suite/funcs_1/r/memory_views.result +++ b/mysql-test/suite/funcs_1/r/memory_views.result @@ -334,6 +334,8 @@ f59 10 CREATE or REPLACE VIEW v1 AS select f59 from tb2 group by f59 asc; +Warnings: +Warning 1287 'GROUP BY with ASC/DESC' is deprecated and will be removed in a future release. Please use GROUP BY ... ORDER BY ... ASC/DESC instead select * FROM v1 order by f59 limit 0,10; f59 1 @@ -348,6 +350,8 @@ f59 10 CREATE or REPLACE VIEW v1 AS select f59 from tb2 group by f59 desc; +Warnings: +Warning 1287 'GROUP BY with ASC/DESC' is deprecated and will be removed in a future release. Please use GROUP BY ... ORDER BY ... ASC/DESC instead select * FROM v1 order by f59 limit 0,10; f59 1 @@ -360,6 +364,8 @@ f59 8 9 10 +Warnings: +Warning 1287 'GROUP BY with ASC/DESC' is deprecated and will be removed in a future release. Please use GROUP BY ... ORDER BY ... ASC/DESC instead CREATE or REPLACE VIEW v1 AS (select f59 from tb2) union (select f59 from t1); select * FROM v1 order by f59 limit 0,10; diff --git a/mysql-test/suite/funcs_1/r/myisam_views-big.result b/mysql-test/suite/funcs_1/r/myisam_views-big.result index 9c040ea1b678..3bdad358adfe 100644 --- a/mysql-test/suite/funcs_1/r/myisam_views-big.result +++ b/mysql-test/suite/funcs_1/r/myisam_views-big.result @@ -356,6 +356,8 @@ f59 10 CREATE or REPLACE VIEW v1 AS select f59 from tb2 group by f59 asc; +Warnings: +Warning 1287 'GROUP BY with ASC/DESC' is deprecated and will be removed in a future release. Please use GROUP BY ... ORDER BY ... ASC/DESC instead select * FROM v1 order by f59 limit 0,10; f59 1 @@ -370,6 +372,8 @@ f59 10 CREATE or REPLACE VIEW v1 AS select f59 from tb2 group by f59 desc; +Warnings: +Warning 1287 'GROUP BY with ASC/DESC' is deprecated and will be removed in a future release. Please use GROUP BY ... ORDER BY ... ASC/DESC instead select * FROM v1 order by f59 limit 0,10; f59 1 @@ -382,6 +386,8 @@ f59 8 9 10 +Warnings: +Warning 1287 'GROUP BY with ASC/DESC' is deprecated and will be removed in a future release. Please use GROUP BY ... ORDER BY ... ASC/DESC instead CREATE or REPLACE VIEW v1 AS (select f59 from tb2) union (select f59 from t1); select * FROM v1 order by f59 limit 0,10; diff --git a/mysql-test/suite/innodb_fts/r/opt.result b/mysql-test/suite/innodb_fts/r/opt.result index 1ed2b6d174aa..c6f543b67c13 100644 --- a/mysql-test/suite/innodb_fts/r/opt.result +++ b/mysql-test/suite/innodb_fts/r/opt.result @@ -1543,6 +1543,8 @@ DROP TABLE t1; CREATE TABLE t1 (f1 CHAR(1), FULLTEXT KEY (f1)); SELECT 1 FROM t1 NATURAL JOIN t1 a GROUP BY MATCH(t1.f1) AGAINST ("1") DESC; 1 +Warnings: +Warning 1287 'GROUP BY with ASC/DESC' is deprecated and will be removed in a future release. Please use GROUP BY ... ORDER BY ... ASC/DESC instead DROP TABLE t1; # # Bug#20261601 ASSERTION FAILED: !FIRST_QEP_TAB->TABLE()->NO_KEYREAD diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 40eaa96fd0c5..bc649cdc307a 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -1182,7 +1182,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, YYLTYPE **c, ulong *yystacksize); text_string opt_gconcat_separator %type - type type_with_opt_collate int_type real_type order_dir lock_option + type type_with_opt_collate int_type real_type lock_option udf_type if_exists opt_local opt_table_options table_options table_option opt_if_not_exists opt_no_write_to_binlog opt_temporary all_or_any opt_distinct @@ -1192,6 +1192,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, YYLTYPE **c, ulong *yystacksize); opt_ev_status opt_ev_on_completion ev_on_completion opt_ev_comment ev_alter_on_schedule_completion opt_ev_rename_to opt_ev_sql_stmt trg_action_time trg_event field_def + ordering_direction opt_ordering_direction /* Bit field of MYSQL_START_TRANS_OPT_* flags. @@ -1430,6 +1431,7 @@ END_OF_INPUT %type subselect %type order_expr + grouping_expr %type order_list group_list gorder_list opt_gorder_clause @@ -7444,8 +7446,14 @@ btree_or_rtree: ; key_list: - key_list ',' key_part order_dir { Lex->col_list.push_back($3); } - | key_part order_dir { Lex->col_list.push_back($1); } + key_list ',' key_part opt_ordering_direction + { + Lex->col_list.push_back($3); + } + | key_part opt_ordering_direction + { + Lex->col_list.push_back($1); + } ; key_part: @@ -10809,12 +10817,12 @@ opt_group_clause: ; group_list: - group_list ',' order_expr + group_list ',' grouping_expr { $1->push_back($3); $$= $1; } - | order_expr + | grouping_expr { $$= NEW_PTN PT_order_list(); if ($1 == NULL) @@ -10857,7 +10865,7 @@ alter_order_list: ; alter_order_item: - simple_ident_nospvar order_dir + simple_ident_nospvar opt_ordering_direction { ITEMIZE($1, &$1); @@ -10903,9 +10911,13 @@ order_list: } ; -order_dir: +opt_ordering_direction: /* empty */ { $$ = 1; } - | ASC { $$ =1; } + | ordering_direction + ; + +ordering_direction: + ASC { $$ =1; } | DESC { $$ =0; } ; @@ -12958,8 +12970,21 @@ table_wild: ; order_expr: - expr order_dir + expr opt_ordering_direction + { + $$= NEW_PTN PT_order_expr($1, $2); + } + ; + +grouping_expr: + expr + { + $$= NEW_PTN PT_order_expr($1, 1); + } + | expr ordering_direction { + push_deprecated_warn(YYTHD, "GROUP BY with ASC/DESC", + "GROUP BY ... ORDER BY ... ASC/DESC"); $$= NEW_PTN PT_order_expr($1, $2); } ; From bc5168e672bc0baa024018b4a704b8146af314da Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Tue, 10 Apr 2018 10:37:20 +0200 Subject: [PATCH 0762/1221] PS-3950: gcc-8 compilation warnings 1. Add gcc-8 to Travis config file 2. Fix the following gcc-8 warnings: - cast between incompatible function types [-Werror=cast-function-type] - clearing an object with no trivial copy-assignment [-Werror=class-memaccess] - directive output may be truncated [-Werror=format-truncation=] --- .travis.yml | 32 +++++++++++++++++++-------- client/mysql_plugin.c | 13 ++++++----- client/mysqlcheck.c | 7 ++++-- sql/datadict.cc | 2 +- sql/debug_sync.cc | 6 ++--- sql/log.cc | 2 +- sql/opt_range.cc | 2 +- sql/partition_info.cc | 8 +++---- sql/sql_analyse.cc | 7 +++--- sql/sql_analyse.h | 5 +++-- sql/sql_base.cc | 2 +- sql/sql_insert.cc | 2 +- sql/sql_select.cc | 6 ++--- sql/sql_show.cc | 2 +- sql/sql_trigger.cc | 4 ++-- sql/sql_truncate.cc | 2 +- sql/sql_view.cc | 4 ++-- sql/tztime.cc | 2 +- storage/innobase/include/data0type.ic | 2 ++ storage/myisam/mi_write.c | 17 ++++++++------ storage/myisam/myisamlog.c | 9 +++++--- 21 files changed, 82 insertions(+), 54 deletions(-) diff --git a/.travis.yml b/.travis.yml index ccb85446ecdd..29535f672496 100644 --- a/.travis.yml +++ b/.travis.yml @@ -48,17 +48,21 @@ matrix: compiler: clang # 5 - if: repo != percona/percona-server OR repo = percona/percona-server AND type IN (push, cron) - env: VERSION=7 BUILD=Debug + env: VERSION=8 BUILD=Debug compiler: gcc # 6 - if: repo != percona/percona-server OR repo = percona/percona-server AND type IN (push, cron) - env: VERSION=6 BUILD=Debug + env: VERSION=7 BUILD=Debug compiler: gcc # 7 - if: repo != percona/percona-server OR repo = percona/percona-server AND type IN (push, cron) - env: VERSION=5 BUILD=Debug + env: VERSION=6 BUILD=Debug compiler: gcc # 8 + - if: repo != percona/percona-server OR repo = percona/percona-server AND type IN (push, cron) + env: VERSION=5 BUILD=Debug + compiler: gcc + # 9 - if: repo != percona/percona-server OR repo = percona/percona-server AND type IN (push, cron) env: VERSION=4.8 BUILD=Debug compiler: gcc @@ -85,17 +89,21 @@ matrix: compiler: clang # 5 - if: branch =~ fullci OR repo = percona/percona-server AND type IN (push, pull_request, cron) - env: VERSION=7 BUILD=RelWithDebInfo + env: VERSION=8 BUILD=RelWithDebInfo compiler: gcc # 6 - if: branch =~ fullci OR repo = percona/percona-server AND type IN (push, pull_request, cron) - env: VERSION=6 BUILD=RelWithDebInfo + env: VERSION=7 BUILD=RelWithDebInfo compiler: gcc # 7 - if: branch =~ fullci OR repo = percona/percona-server AND type IN (push, pull_request, cron) - env: VERSION=5 BUILD=RelWithDebInfo + env: VERSION=6 BUILD=RelWithDebInfo compiler: gcc # 8 + - if: branch =~ fullci OR repo = percona/percona-server AND type IN (push, pull_request, cron) + env: VERSION=5 BUILD=RelWithDebInfo + compiler: gcc + # 9 - if: branch =~ fullci OR repo = percona/percona-server AND type IN (push, pull_request, cron) env: VERSION=4.8 BUILD=RelWithDebInfo compiler: gcc @@ -116,17 +124,21 @@ matrix: compiler: clang # 4 - if: branch =~ extraci OR repo = percona/percona-server AND type IN (push, cron) - env: VERSION=7 BUILD=RelWithDebInfo INVERTED=ON + env: VERSION=8 BUILD=RelWithDebInfo INVERTED=ON compiler: gcc # 5 - if: branch =~ extraci OR repo = percona/percona-server AND type IN (push, cron) - env: VERSION=6 BUILD=RelWithDebInfo INVERTED=ON + env: VERSION=7 BUILD=RelWithDebInfo INVERTED=ON compiler: gcc # 6 - if: branch =~ extraci OR repo = percona/percona-server AND type IN (push, cron) - env: VERSION=5 BUILD=RelWithDebInfo INVERTED=ON + env: VERSION=6 BUILD=RelWithDebInfo INVERTED=ON compiler: gcc # 7 + - if: branch =~ extraci OR repo = percona/percona-server AND type IN (push, cron) + env: VERSION=5 BUILD=RelWithDebInfo INVERTED=ON + compiler: gcc + #8 - if: branch =~ extraci OR repo = percona/percona-server AND type IN (push, cron) env: VERSION=4.8 BUILD=RelWithDebInfo INVERTED=ON compiler: gcc @@ -175,6 +187,8 @@ script: fi; if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo -E apt-add-repository -y "ppa:ubuntu-toolchain-r/test"; + sudo -E apt-add-repository -y "ppa:jonathonf/binutils"; + sudo -E apt-add-repository -y "ppa:jonathonf/gcc-8.0"; fi; - echo --- Update list of packages and download dependencies; diff --git a/client/mysql_plugin.c b/client/mysql_plugin.c index 293bd6727cfb..d0b2188511e3 100644 --- a/client/mysql_plugin.c +++ b/client/mysql_plugin.c @@ -315,9 +315,11 @@ static char *add_quotes(const char *path) static int get_default_values() { + static const char format_cmd[]= "%s mysqld > %s"; char tool_path[FN_REFLEN]; - char defaults_cmd[FN_REFLEN]; char defaults_file[FN_REFLEN]; + char defaults_cmd[sizeof(defaults_file) + sizeof(tool_path) + + sizeof(format_cmd)]; char line[FN_REFLEN]; int error= 0; int ret= 0; @@ -349,7 +351,7 @@ static int get_default_values() } #else snprintf(defaults_cmd, sizeof(defaults_cmd), - "%s mysqld > %s", tool_path, defaults_file); + format_cmd, tool_path, defaults_file); #endif /* Execute the command */ @@ -1168,7 +1170,9 @@ static int dump_bootstrap_file(char *bootstrap_file) static int bootstrap_server(char *server_path, char *bootstrap_file) { - char bootstrap_cmd[FN_REFLEN]; + static const char format_cmd[]= "%s --no-defaults --bootstrap --datadir=%s " + "--basedir=%s < %s"; + char bootstrap_cmd[FN_REFLEN * 2 + sizeof(format_cmd)]; int error= 0; #ifdef __WIN__ @@ -1192,8 +1196,7 @@ static int bootstrap_server(char *server_path, char *bootstrap_file) add_quotes(bootstrap_file)); #else snprintf(bootstrap_cmd, sizeof(bootstrap_cmd), - "%s --no-defaults --bootstrap --datadir=%s --basedir=%s" - " < %s", server_path, opt_datadir, opt_basedir, bootstrap_file); + format_cmd, server_path, opt_datadir, opt_basedir, bootstrap_file); #endif /* Execute the command */ diff --git a/client/mysqlcheck.c b/client/mysqlcheck.c index 99f5b4ec97e9..194931fda90b 100644 --- a/client/mysqlcheck.c +++ b/client/mysqlcheck.c @@ -708,7 +708,7 @@ static int disable_binlog() static int handle_request_for_tables(char *tables, size_t length) { - char *query, *end, options[100], message[100]; + char *query, *end, options[100]; size_t query_length= 0, query_size= sizeof(char)*(length+110); const char *op = 0; @@ -762,7 +762,10 @@ static int handle_request_for_tables(char *tables, size_t length) } if (mysql_real_query(sock, query, query_length)) { - sprintf(message, "when executing '%s TABLE ... %s'", op, options); + static const char format_msg[]= "when executing '%s TABLE ... %s'"; + char message[sizeof(options) + sizeof(format_msg) + + 32 /* to fit "OPTIMIZE NO_WRITE_TO_BINLOG" */]; + snprintf(message, sizeof(message), format_msg, op, options); DBerror(sock, message); return 1; } diff --git a/sql/datadict.cc b/sql/datadict.cc index e3f679cc7ec4..36ce4eb31dc6 100644 --- a/sql/datadict.cc +++ b/sql/datadict.cc @@ -171,7 +171,7 @@ bool dd_recreate_table(THD *thd, const char *db, const char *table_name) DBUG_ASSERT(thd->mdl_context.is_lock_owner(MDL_key::TABLE, db, table_name, MDL_EXCLUSIVE)); - memset(&create_info, 0, sizeof(create_info)); + memset(static_cast(&create_info), 0, sizeof(create_info)); /* Create a path to the table, but without a extension. */ build_table_filename(path, sizeof(path) - 1, db, table_name, "", 0); diff --git a/sql/debug_sync.cc b/sql/debug_sync.cc index 7a00df1f0e5f..1a58298d0323 100644 --- a/sql/debug_sync.cc +++ b/sql/debug_sync.cc @@ -928,7 +928,7 @@ static void debug_sync_remove_action(st_debug_sync_control *ds_control, memmove(save_action, action, sizeof(st_debug_sync_action)); /* Move actions down. */ - memmove(ds_control->ds_action + dsp_idx, + memmove(static_cast(ds_control->ds_action + dsp_idx), ds_control->ds_action + dsp_idx + 1, (ds_control->ds_active - dsp_idx) * sizeof(st_debug_sync_action)); @@ -939,8 +939,8 @@ static void debug_sync_remove_action(st_debug_sync_control *ds_control, produced by the shift. Again do not use an assignment operator to avoid string allocation/copy. */ - memmove(ds_control->ds_action + ds_control->ds_active, save_action, - sizeof(st_debug_sync_action)); + memmove(static_cast(ds_control->ds_action + ds_control->ds_active), + save_action, sizeof(st_debug_sync_action)); } DBUG_VOID_RETURN; diff --git a/sql/log.cc b/sql/log.cc index 025a3f504c72..92d53fa99283 100644 --- a/sql/log.cc +++ b/sql/log.cc @@ -4810,7 +4810,7 @@ bool MYSQL_BIN_LOG::appendv(const char* buf, uint len,...) { bool error= 0; DBUG_ENTER("MYSQL_BIN_LOG::appendv"); - va_list(args); + va_list args; va_start(args,len); DBUG_ASSERT(log_file.type == SEQ_READ_APPEND); diff --git a/sql/opt_range.cc b/sql/opt_range.cc index 6710b7a2bbac..51a843503f79 100644 --- a/sql/opt_range.cc +++ b/sql/opt_range.cc @@ -1279,7 +1279,7 @@ QUICK_INDEX_MERGE_SELECT::QUICK_INDEX_MERGE_SELECT(THD *thd_param, DBUG_ENTER("QUICK_INDEX_MERGE_SELECT::QUICK_INDEX_MERGE_SELECT"); index= MAX_KEY; head= table; - bzero(&read_record, sizeof(read_record)); + bzero(static_cast(&read_record), sizeof(read_record)); init_sql_alloc(&alloc, thd->variables.range_alloc_block_size, 0); DBUG_VOID_RETURN; } diff --git a/sql/partition_info.cc b/sql/partition_info.cc index d53680ce9013..449cd0ed7a66 100644 --- a/sql/partition_info.cc +++ b/sql/partition_info.cc @@ -41,7 +41,7 @@ partition_info *partition_info::get_clone(bool reset /* = false */) mem_alloc_error(sizeof(partition_info)); return NULL; } - memcpy(clone, this, sizeof(partition_info)); + memcpy(static_cast(clone), this, sizeof(partition_info)); clone->partitions.empty(); while ((part= (part_it++))) @@ -54,7 +54,7 @@ partition_info *partition_info::get_clone(bool reset /* = false */) mem_alloc_error(sizeof(partition_element)); return NULL; } - memcpy(part_clone, part, sizeof(partition_element)); + memcpy(static_cast(part_clone), part, sizeof(partition_element)); /* Mark that RANGE and LIST values needs to be fixed so that we don't @@ -84,7 +84,7 @@ partition_info *partition_info::get_clone(bool reset /* = false */) mem_alloc_error(sizeof(partition_element)); return NULL; } - memcpy(subpart_clone, subpart, sizeof(partition_element)); + memcpy(static_cast(subpart_clone), subpart, sizeof(partition_element)); part_clone->subpartitions.push_back(subpart_clone); } clone->partitions.push_back(part_clone); @@ -1361,7 +1361,7 @@ void partition_info::print_no_partition_found(TABLE *table_arg) char *buf_ptr= (char*)&buf; TABLE_LIST table_list; - bzero(&table_list, sizeof(table_list)); + bzero(static_cast(&table_list), sizeof(table_list)); table_list.db= table_arg->s->db.str; table_list.table_name= table_arg->s->table_name.str; diff --git a/sql/sql_analyse.cc b/sql/sql_analyse.cc index d15cd93f9ce8..627e427b4d73 100644 --- a/sql/sql_analyse.cc +++ b/sql/sql_analyse.cc @@ -295,13 +295,12 @@ bool get_ev_num_info(EV_NUM_INFO *ev_info, NUM_INFO *info, const char *num) return 1; } // get_ev_num_info - -void free_string(String *s) +void free_string(void* key, TREE_FREE action __attribute__((unused)), + void *param __attribute__((unused))) { - s->free(); + reinterpret_cast(key)->free(); } - void field_str::add() { char buff[MAX_FIELD_WIDTH], *ptr; diff --git a/sql/sql_analyse.h b/sql/sql_analyse.h index ed6d10e6eb7a..ffce2203a1da 100644 --- a/sql/sql_analyse.h +++ b/sql/sql_analyse.h @@ -68,7 +68,8 @@ int compare_ulonglong2(void* cmp_arg __attribute__((unused)), int compare_decimal2(int* len, const char *s, const char *t); Procedure *proc_analyse_init(THD *thd, ORDER *param, select_result *result, List &field_list); -void free_string(String*); +void free_string(void* key, TREE_FREE action __attribute__((unused)), + void *param __attribute__((unused))); class analyse; class field_info :public Sql_alloc @@ -121,7 +122,7 @@ class field_str :public field_info must_be_blob(0), was_zero_fill(0), was_maybe_zerofill(0), can_be_still_num(1) { init_tree(&tree, 0, 0, sizeof(String), (qsort_cmp2) sortcmp2, - 0, (tree_element_free) free_string, NULL); }; + 0, free_string, NULL); }; void add(); void get_opt_type(String*, ha_rows); diff --git a/sql/sql_base.cc b/sql/sql_base.cc index 280d0ffd56b3..0c08b6a59c6c 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -1193,7 +1193,7 @@ bool close_cached_connection_tables(THD *thd, LEX_STRING *connection) DBUG_ENTER("close_cached_connections"); DBUG_ASSERT(thd); - bzero(&tmp, sizeof(TABLE_LIST)); + bzero(static_cast(&tmp), sizeof(TABLE_LIST)); mysql_mutex_lock(&LOCK_open); diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index e12e8b18b48a..f4c010315017 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -4078,7 +4078,7 @@ select_create::binlog_show_create_table(TABLE **tables, uint count) int result; TABLE_LIST tmp_table_list; - memset(&tmp_table_list, 0, sizeof(tmp_table_list)); + memset(static_cast(&tmp_table_list), 0, sizeof(tmp_table_list)); tmp_table_list.table = *tables; query.length(0); // Have to zero it since constructor doesn't diff --git a/sql/sql_select.cc b/sql/sql_select.cc index dbc897a8b97e..00d7b2bbcb72 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -1779,7 +1779,7 @@ void JOIN::restore_tmp() { DBUG_PRINT("info", ("restore_tmp this %p tmp_join %p", this, tmp_join)); DBUG_ASSERT(tmp_join != this); - memcpy(tmp_join, this, (size_t) sizeof(JOIN)); + memcpy(static_cast(tmp_join), this, (size_t) sizeof(JOIN)); } @@ -11106,8 +11106,8 @@ TABLE *create_virtual_tmp_table(THD *thd, List &field_list) NullS)) return 0; - bzero(table, sizeof(*table)); - bzero(share, sizeof(*share)); + bzero(static_cast(table), sizeof(*table)); + bzero(static_cast(share), sizeof(*share)); table->field= field; table->s= share; table->temp_pool_slot= MY_BIT_NONE; diff --git a/sql/sql_show.cc b/sql/sql_show.cc index fa229f2c1838..f6d4d01f1e91 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -5882,7 +5882,7 @@ static int get_schema_views_record(THD *thd, TABLE_LIST *tables, { TABLE_LIST table_list; uint view_access; - memset(&table_list, 0, sizeof(table_list)); + memset(static_cast(&table_list), 0, sizeof(table_list)); table_list.db= tables->db; table_list.table_name= tables->table_name; table_list.grant.privilege= thd->col_access; diff --git a/sql/sql_trigger.cc b/sql/sql_trigger.cc index 0a4f549a052b..787e4807ab12 100644 --- a/sql/sql_trigger.cc +++ b/sql/sql_trigger.cc @@ -1786,7 +1786,7 @@ bool Table_triggers_list::drop_all_triggers(THD *thd, char *db, char *name) bool result= 0; DBUG_ENTER("drop_all_triggers"); - bzero(&table, sizeof(table)); + bzero(static_cast(&table), sizeof(table)); init_sql_alloc(&table.mem_root, 8192, 0); if (Table_triggers_list::check_n_load(thd, db, name, &table, 1)) @@ -2006,7 +2006,7 @@ bool Table_triggers_list::change_table_name(THD *thd, const char *db, LEX_STRING *err_trigname; DBUG_ENTER("change_table_name"); - bzero(&table, sizeof(table)); + bzero(static_cast(&table), sizeof(table)); init_sql_alloc(&table.mem_root, 8192, 0); /* diff --git a/sql/sql_truncate.cc b/sql/sql_truncate.cc index bed507ac4153..3abd8583a3cf 100644 --- a/sql/sql_truncate.cc +++ b/sql/sql_truncate.cc @@ -283,7 +283,7 @@ static bool recreate_temporary_table(THD *thd, TABLE *table) handlerton *table_type= table->s->db_type(); DBUG_ENTER("recreate_temporary_table"); - memset(&create_info, 0, sizeof(create_info)); + memset(static_cast(&create_info), 0, sizeof(create_info)); table->file->info(HA_STATUS_AUTO | HA_STATUS_NO_LOCK); diff --git a/sql/sql_view.cc b/sql/sql_view.cc index 18eb03da866a..338c8bba9d14 100644 --- a/sql/sql_view.cc +++ b/sql/sql_view.cc @@ -215,7 +215,7 @@ fill_defined_view_parts (THD *thd, TABLE_LIST *view) LEX *lex= thd->lex; TABLE_LIST decoy; - memcpy (&decoy, view, sizeof (TABLE_LIST)); + memcpy(static_cast(&decoy), view, sizeof (TABLE_LIST)); key_length= create_table_def_key(thd, key, view, 0); if (tdc_open_view(thd, &decoy, decoy.alias, key, key_length, @@ -2025,7 +2025,7 @@ mysql_rename_view(THD *thd, view definition parsing or use temporary 'view_def' object for it. */ - bzero(&view_def, sizeof(view_def)); + bzero(static_cast(&view_def), sizeof(view_def)); view_def.timestamp.str= view_def.timestamp_buffer; view_def.view_suid= TRUE; diff --git a/sql/tztime.cc b/sql/tztime.cc index 504decd9e7c7..5c6a09ba6f98 100644 --- a/sql/tztime.cc +++ b/sql/tztime.cc @@ -1523,7 +1523,7 @@ my_offset_tzs_get_key(Time_zone_offset *entry, static void tz_init_table_list(TABLE_LIST *tz_tabs) { - bzero(tz_tabs, sizeof(TABLE_LIST) * MY_TZ_TABLES_COUNT); + bzero(static_cast(tz_tabs), sizeof(TABLE_LIST) * MY_TZ_TABLES_COUNT); for (int i= 0; i < MY_TZ_TABLES_COUNT; i++) { diff --git a/storage/innobase/include/data0type.ic b/storage/innobase/include/data0type.ic index a04fa632886b..48ab18ef6b6f 100644 --- a/storage/innobase/include/data0type.ic +++ b/storage/innobase/include/data0type.ic @@ -446,6 +446,7 @@ dtype_get_fixed_size_low( return(0); } #endif /* UNIV_DEBUG */ + // fallthrough case DATA_CHAR: case DATA_FIXBINARY: case DATA_INT: @@ -524,6 +525,7 @@ dtype_get_min_size_low( return(0); } #endif /* UNIV_DEBUG */ + // fallthrough case DATA_CHAR: case DATA_FIXBINARY: case DATA_INT: diff --git a/storage/myisam/mi_write.c b/storage/myisam/mi_write.c index c354ba254e8b..7fc3e384175c 100644 --- a/storage/myisam/mi_write.c +++ b/storage/myisam/mi_write.c @@ -926,7 +926,7 @@ static int keys_compare(bulk_insert_param *param, uchar *key1, uchar *key2) } -static int keys_free(uchar *key, TREE_FREE mode, bulk_insert_param *param) +static void keys_free(void* vkey, TREE_FREE mode, void *vparam) { /* Probably I can use info->lastkey here, but I'm not sure, @@ -935,6 +935,8 @@ static int keys_free(uchar *key, TREE_FREE mode, bulk_insert_param *param) uchar lastkey[MI_MAX_KEY_BUFF]; uint keylen; MI_KEYDEF *keyinfo; + uchar *key= (uchar*)(vkey); + bulk_insert_param *param= (bulk_insert_param*)(vparam); switch (mode) { case free_init: @@ -943,19 +945,20 @@ static int keys_free(uchar *key, TREE_FREE mode, bulk_insert_param *param) mysql_rwlock_wrlock(¶m->info->s->key_root_lock[param->keynr]); param->info->s->keyinfo[param->keynr].version++; } - return 0; + return; case free_free: keyinfo=param->info->s->keyinfo+param->keynr; keylen=_mi_keylength(keyinfo, key); memcpy(lastkey, key, keylen); - return _mi_ck_write_btree(param->info,param->keynr,lastkey, - keylen - param->info->s->rec_reflength); + _mi_ck_write_btree(param->info,param->keynr,lastkey, + keylen - param->info->s->rec_reflength); + return; case free_end: if (param->info->s->concurrent_insert) mysql_rwlock_unlock(¶m->info->s->key_root_lock[param->keynr]); - return 0; + return; } - return -1; + return; } @@ -1012,7 +1015,7 @@ int mi_init_bulk_insert(MI_INFO *info, ulong cache_size, ha_rows rows) cache_size * key[i].maxlength, cache_size * key[i].maxlength, 0, (qsort_cmp2)keys_compare, 0, - (tree_element_free) keys_free, (void *)params++); + keys_free, (void *)params++); } else info->bulk_insert[i].root=0; diff --git a/storage/myisam/myisamlog.c b/storage/myisam/myisamlog.c index 851f17a873cb..8753a02a511b 100644 --- a/storage/myisam/myisamlog.c +++ b/storage/myisam/myisamlog.c @@ -62,7 +62,8 @@ static int test_if_open(struct file_info *key,element_count count, static void fix_blob_pointers(MI_INFO *isam,uchar *record); static int test_when_accessed(struct file_info *key,element_count count, struct st_access_param *access_param); -static void file_info_free(struct file_info *info); +static void file_info_free(void* key, TREE_FREE action __attribute__((unused)), + void *param __attribute__((unused))); static int close_some_file(TREE *tree); static int reopen_closed_file(TREE *tree,struct file_info *file_info); static int find_record_with_key(struct file_info *file_info,uchar *record); @@ -329,7 +330,7 @@ static int examine_log(char * file_name, char **table_names) init_io_cache(&cache,file,0,READ_CACHE,start_offset,0,MYF(0)); bzero((uchar*) com_count,sizeof(com_count)); init_tree(&tree,0,0,sizeof(file_info),(qsort_cmp2) file_info_compare,1, - (tree_element_free) file_info_free, NULL); + file_info_free, NULL); (void) init_key_cache(dflt_key_cache,KEY_CACHE_BLOCK_SIZE,KEY_CACHE_SIZE, 0, 0); @@ -749,8 +750,10 @@ static int test_when_accessed (struct file_info *key, } -static void file_info_free(struct file_info *fileinfo) +static void file_info_free(void* key, TREE_FREE action __attribute__((unused)), + void *param __attribute__((unused))) { + struct file_info *fileinfo= (struct file_info*)key; DBUG_ENTER("file_info_free"); if (update) { From 96057437026aca80cb563fbb5096e34b5d173441 Mon Sep 17 00:00:00 2001 From: Pedro Figueiredo Date: Thu, 12 Apr 2018 17:38:59 +0100 Subject: [PATCH 0763/1221] Bug#27442477 ASSERT `THD->GET_HA_DATA...HAS_STATE(XID_STATE::XA_ACTIVE))' AT HANDLER.CC:1396 Description ----------- With filter being set on slave, if non-filtered transaction comes post `XA ROLLBACK` then it results into ASSERTION failure `thd->get_ha_data(ht_arg->slot)->ha_ptr_backup == __null || (thd->get_transaction()->xid_state()-> has_state(XID_STATE::XA_ACTIVE))` at handler.cc:1396 in trans_register_ha. Analysis -------- The replication of empty XA transaction is not currently supported due to the "read-only optimization" covered in the X/Open XA transaction standard. Furthermore, the usage of replication filters together with XA transaction is also not supported. The assertion occurs because the data engine plugins that initialize Ha_data and are called upon `XA START`, are not properly called back to release resources, after `XA PREPARE`, due to the transaction being emptied upon applying replication filters. One possible reason for this is that the filtered statements are not skipped, instead, they are applied but with no actual impact either in the data engine or the binlog. In addition, the internal state of the data engine transaction is changed when using `*-log-info-repository=TABLE`, since the `current_thd` is used to perform the system tables update. All of the above leaves the replication transaction context state inconsistent with the data engine native transaction state, leading, either to the above assertion being emited or a segmentation fault being hit when the engine plugin tries to use the internal transaction. This problem is present in 5.7 but it got visible in 8.0.5 because of WL#10474 making `*-log-info-repository=TABLE` the default options. Fix --- This patch doesn't solve the overall issue, dealing with XA transactions working together with replication filters. Instead, adds an error message warning about the unsupported features and adds some validations that will allow the slave to continue running without the stated assertion being met, although in an undetermined state: 1. Output an error message stating the unsupported feature of using XA transactions together with replication filters. 2. Mirror acquisition of `THD` transaction data - `detach_*` functions - when reliquishing the same transaction data - `attach_*` functions - and use this execution flow when the `Ha_trx_info` has been cleared and is `nullptr`, in `xa.cc: attach_native_trx()`. 3. In the engine data plugin function handling attaching and detaching of the native transaction, allow for an empty state, meaning, include a state where the current `THD` doesn't have any native transaction associated - output of using tables to store the metadata. --- .../r/rpl_xa_with_filters_error_msg.result | 37 +++++++++++ .../rpl/t/rpl_xa_with_filters_error_msg.test | 62 +++++++++++++++++++ sql/log_event.cc | 30 ++++++++- sql/rpl_rli.cc | 11 ++++ sql/rpl_rli.h | 7 +++ sql/share/errmsg-utf8.txt | 3 + sql/sql_class.cc | 12 ++++ sql/sql_class.h | 6 ++ sql/xa.cc | 27 +++++++- sql/xa.h | 17 ++++- storage/innobase/handler/ha_innodb.cc | 20 +++--- 11 files changed, 218 insertions(+), 14 deletions(-) create mode 100644 mysql-test/suite/rpl/r/rpl_xa_with_filters_error_msg.result create mode 100644 mysql-test/suite/rpl/t/rpl_xa_with_filters_error_msg.test diff --git a/mysql-test/suite/rpl/r/rpl_xa_with_filters_error_msg.result b/mysql-test/suite/rpl/r/rpl_xa_with_filters_error_msg.result new file mode 100644 index 000000000000..0c7fb6639fd6 --- /dev/null +++ b/mysql-test/suite/rpl/r/rpl_xa_with_filters_error_msg.result @@ -0,0 +1,37 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +# +# 1) Add a replication filter to the slave node +# +[connection slave] +include/stop_slave_sql.inc +CALL mtr.add_suppression("Slave SQL.*The use of replication filters with XA transactions is not supported, and can lead to an undefined state in the replication slave.*"); +CHANGE REPLICATION FILTER Replicate_Do_Table=(test.tab1); +include/start_slave_sql.inc +[connection master] +# +# 2) Create a table that gets filtered out by the added filter +# +CREATE TABLE t1 (a INT); +# +# 3) Start an XA transaction and execute a statement that is filtered out by +# replication filter +# +XA START '1'; +INSERT INTO t1 VALUES (1); +XA END '1'; +XA PREPARE '1'; +XA COMMIT '1'; +include/sync_slave_sql_with_master.inc +# +# 4) Ensure that the error message get logged to the slave error log file. +# +include/assert_grep.inc [Found error message regarding usage of replication filters with XA transactions] +[connection master] +DROP TABLE t1; +include/sync_slave_sql_with_master.inc +include/rpl_reset.inc +include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_xa_with_filters_error_msg.test b/mysql-test/suite/rpl/t/rpl_xa_with_filters_error_msg.test new file mode 100644 index 000000000000..3341aff6acea --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_xa_with_filters_error_msg.test @@ -0,0 +1,62 @@ +# ==== Requirements ==== +# +# R1. When using replication filter together with XA transactions, output an +# error message when some statement gets filtered within the active XA +# transaction. +# +# ==== Implementation ==== +# +# With default setup: +# 1) Add a replication filter to the slave node +# 2) Create a table that gets filtered out by the added filter +# 3) Start an XA transaction and execute a statement that is filtered out by +# replication filter +# 4) Ensure that the error message get logged to the slave error log file. +# +# ==== References ==== +# +# BUG#27442477: ASSERT `THD->GET_HA_DATA...HAS_STATE(XID_STATE::XA_ACTIVE))' AT HANDLER.CC:1396 + +--source include/have_binlog_format_row.inc +--source include/master-slave.inc + +--echo # +--echo # 1) Add a replication filter to the slave node +--echo # +--source include/rpl_connection_slave.inc +--source include/stop_slave_sql.inc +CALL mtr.add_suppression("Slave SQL.*The use of replication filters with XA transactions is not supported, and can lead to an undefined state in the replication slave.*"); +CHANGE REPLICATION FILTER Replicate_Do_Table=(test.tab1); +--source include/start_slave_sql.inc + +--source include/rpl_connection_master.inc +--echo # +--echo # 2) Create a table that gets filtered out by the added filter +--echo # +CREATE TABLE t1 (a INT); +--echo # +--echo # 3) Start an XA transaction and execute a statement that is filtered out by +--echo # replication filter +--echo # +XA START '1'; INSERT INTO t1 VALUES (1); XA END '1'; XA PREPARE '1'; +XA COMMIT '1'; + +--source include/sync_slave_sql_with_master.inc + +--echo # +--echo # 4) Ensure that the error message get logged to the slave error log file. +--echo # +--let $assert_file= $MYSQLTEST_VARDIR/log/mysqld.2.err +--let $assert_only_after= CURRENT_TEST: rpl_gtid:rpl_xa_with_filters_error_msg +--let $assert_match= The use of replication filters with XA transactions is not supported, and can lead to an undefined state in the replication slave +--let $assert_select= Slave SQL +--let $assert_text= Found error message regarding usage of replication filters with XA transactions +--source include/assert_grep.inc + +--source include/rpl_connection_master.inc +DROP TABLE t1; +--source include/sync_slave_sql_with_master.inc + +--let $slave_sql_errno= convert_error(ER_XA_REPLICATION_FILTERS) +--source include/rpl_reset.inc +--source include/rpl_end.inc diff --git a/sql/log_event.cc b/sql/log_event.cc index be042c98283a..b7e1b67bb6d1 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -11885,7 +11885,14 @@ enum enum_tbl_map_status SAME_ID_MAPPING_DIFFERENT_TABLE= 2, /* a duplicate identifier was found mapping the same table */ - SAME_ID_MAPPING_SAME_TABLE= 3 + SAME_ID_MAPPING_SAME_TABLE= 3, + + /* + this table must be filtered out but found an active XA transaction. XA + transactions shouldn't be used with replication filters, until disabling + the XA read only optimization is a supported feature. + */ + FILTERED_WITH_XA_ACTIVE = 4 }; /* @@ -11936,7 +11943,11 @@ check_table_map(Relay_log_info const *rli, RPL_TABLE_LIST *table_list) if (rli->info_thd->slave_thread /* filtering is for slave only */ && (!rpl_filter->db_ok(table_list->db) || (rpl_filter->is_on() && !rpl_filter->tables_ok("", table_list)))) - res= FILTERED_OUT; + if (rli->info_thd->get_transaction()->xid_state()->has_state( + XID_STATE::XA_ACTIVE)) + res = FILTERED_WITH_XA_ACTIVE; + else + res = FILTERED_OUT; else { RPL_TABLE_LIST *ptr= static_cast(rli->tables_to_lock); @@ -12041,6 +12052,19 @@ int Table_map_log_event::do_apply_event(Relay_log_info const *rli) } else // FILTERED_OUT, SAME_ID_MAPPING_* { + if (tblmap_status == FILTERED_WITH_XA_ACTIVE) + { + if (thd->slave_thread) + rli->report(ERROR_LEVEL, ER_XA_REPLICATION_FILTERS, + "%s", ER_THD(thd, ER_XA_REPLICATION_FILTERS)); + else + /* + For the cases in which a 'BINLOG' statement is set to + execute in a user session + */ + my_printf_error(ER_XA_REPLICATION_FILTERS, + "%s", MYF(0), ER_THD(thd, ER_XA_REPLICATION_FILTERS)); + } /* If mapped already but with different properties, we raise an error. @@ -12050,7 +12074,7 @@ int Table_map_log_event::do_apply_event(Relay_log_info const *rli) In all three cases, we need to free the memory previously allocated. */ - if (tblmap_status == SAME_ID_MAPPING_DIFFERENT_TABLE) + else if (tblmap_status == SAME_ID_MAPPING_DIFFERENT_TABLE) { /* Something bad has happened. We need to stop the slave as strange things diff --git a/sql/rpl_rli.cc b/sql/rpl_rli.cc index ad6594840920..ac39c098d3e8 100644 --- a/sql/rpl_rli.cc +++ b/sql/rpl_rli.cc @@ -3027,3 +3027,14 @@ void Relay_log_info::detach_engine_ha_data(THD *thd) plugin_foreach(thd, detach_native_trx, MYSQL_STORAGE_ENGINE_PLUGIN, NULL); } + +void Relay_log_info::reattach_engine_ha_data(THD *thd) +{ + is_engine_ha_data_detached = false; + /* + In case of slave thread applier or processing binlog by client, + reattach the engine ha_data ("native" engine transaction) + in favor of dynamically created. + */ + plugin_foreach(thd, reattach_native_trx, MYSQL_STORAGE_ENGINE_PLUGIN, NULL); +} diff --git a/sql/rpl_rli.h b/sql/rpl_rli.h index 73098a735640..b3a0d606bd12 100644 --- a/sql/rpl_rli.h +++ b/sql/rpl_rli.h @@ -1321,6 +1321,13 @@ class Relay_log_info : public Rpl_info @param thd a reference to THD */ void detach_engine_ha_data(THD *thd); + /** + Reattaches the engine ha_data to THD. The fact + is memorized in @c is_engine_ha_detached flag. + + @param thd a reference to THD + */ + void reattach_engine_ha_data(THD *thd); /** Drops the engine ha_data flag when it is up. The method is run at execution points of the engine ha_data diff --git a/sql/share/errmsg-utf8.txt b/sql/share/errmsg-utf8.txt index f42f93e087fd..af1c8664c5ad 100644 --- a/sql/share/errmsg-utf8.txt +++ b/sql/share/errmsg-utf8.txt @@ -7768,6 +7768,9 @@ ER_AUDIT_LOG_HOST_NAME_INVALID_CHARACTER WARN_DEPRECATED_MAXDB_SQL_MODE_FOR_TIMESTAMP eng "With the MAXDB SQL mode enabled, TIMESTAMP is identical with DATETIME. The MAXDB SQL mode is deprecated and will be removed in a future release. Please disable the MAXDB SQL mode and use DATETIME instead." +ER_XA_REPLICATION_FILTERS + eng "The use of replication filters with XA transactions is not supported, and can lead to an undefined state in the replication slave." + # # End of 5.7 error messages. # diff --git a/sql/sql_class.cc b/sql/sql_class.cc index d8bd3c9b9df0..931bb26b462e 100644 --- a/sql/sql_class.cc +++ b/sql/sql_class.cc @@ -4778,6 +4778,18 @@ void THD::rpl_detach_engine_ha_data() #endif }; +void THD::rpl_reattach_engine_ha_data() +{ +#ifdef HAVE_REPLICATION + Relay_log_info *rli = + is_binlog_applier() ? rli_fake : (slave_thread ? rli_slave : NULL); + + DBUG_ASSERT(!rli_fake || !rli_fake->is_engine_ha_data_detached); + DBUG_ASSERT(!rli_slave || !rli_slave->is_engine_ha_data_detached); + + if (rli) rli->reattach_engine_ha_data(this); +#endif +} bool THD::rpl_unflag_detached_engine_ha_data() { diff --git a/sql/sql_class.h b/sql/sql_class.h index 61cd5b7dea7e..6fa5245fb2ba 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -1558,6 +1558,12 @@ class THD :public MDL_context_owner, */ void rpl_detach_engine_ha_data(); + /** + When the thread is a binlog or slave applier it reattaches the engine + ha_data associated with it and memorizes the fact of that. + */ + void rpl_reattach_engine_ha_data(); + /** @return true when the current binlog (rli_fake) or slave (rli_slave) applier thread has detached the engine ha_data, diff --git a/sql/xa.cc b/sql/xa.cc index c091ba76a7b4..1814db41a534 100644 --- a/sql/xa.cc +++ b/sql/xa.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -1295,6 +1295,15 @@ static void attach_native_trx(THD *thd) ha_info->reset(); } } + else + { + /* + Although the current `Ha_trx_info` object is null, we need to make sure + that the data engine plugins have the oportunity to attach their internal + transactions and clean up the session. + */ + thd->rpl_reattach_engine_ha_data(); + } } @@ -1383,3 +1392,19 @@ my_bool detach_native_trx(THD *thd, plugin_ref plugin, void *unused) return FALSE; } + +my_bool reattach_native_trx(THD *thd, plugin_ref plugin, void *) +{ + DBUG_ENTER("reattach_native_trx"); + handlerton *hton = plugin_data(plugin); + + if (hton->replace_native_transaction_in_thd) + { + /* restore the saved original engine transaction's link with thd */ + void **trx_backup = &thd->ha_data[hton->slot].ha_ptr_backup; + + hton->replace_native_transaction_in_thd(thd, *trx_backup, NULL); + *trx_backup = NULL; + } + DBUG_RETURN(FALSE); +} diff --git a/sql/xa.h b/sql/xa.h index 683bc987b6c4..ccb117c076e9 100644 --- a/sql/xa.h +++ b/sql/xa.h @@ -1,5 +1,5 @@ /* - Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -707,7 +707,22 @@ struct st_plugin_int *plugin_find_by_type(const LEX_CSTRING &plugin, int type); my_bool detach_native_trx(THD *thd, plugin_ref plugin, void *unused); +/** + The function reattaches existing storage engines transaction + context to thd. Backup area to save it is provided to low level + storage engine function. + + is invoked by plugin_foreach() after + trans_xa_prepare() for each storage engine. + + @param[in,out] thd Thread context + @param plugin Reference to handlerton + + @return FALSE on success, + TRUE otherwise. +*/ +my_bool reattach_native_trx(THD *thd, plugin_ref plugin, void *); /** Reset some transaction state information and delete corresponding diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index 8d2263684f91..34f4ecf72eed 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -2653,15 +2653,17 @@ innodb_replace_trx_in_thd( ut_ad(trx == NULL || (trx->mysql_thd == thd && !trx->is_recovered)); - } else if (trx->state == TRX_STATE_NOT_STARTED) { - ut_ad(thd == trx->mysql_thd); - trx_free_for_mysql(trx); - } else { - ut_ad(thd == trx->mysql_thd); - ut_ad(trx_state_eq(trx, TRX_STATE_PREPARED)); - trx_disconnect_prepared(trx); - } - trx = static_cast(new_trx_arg); + } else if (trx != NULL) { + if (trx->state == TRX_STATE_NOT_STARTED) { + ut_ad(thd == trx->mysql_thd); + trx_free_for_mysql(trx); + } else { + ut_ad(thd == trx->mysql_thd); + ut_ad(trx_state_eq(trx, TRX_STATE_PREPARED)); + trx_disconnect_prepared(trx); + } + } + trx = static_cast(new_trx_arg); } /*********************************************************************//** From 3c8964316ad5c931eaabcd9eb2a859c98717791e Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Wed, 11 Apr 2018 10:35:26 +0200 Subject: [PATCH 0764/1221] PS-3936, PS-3940, PS-3943: key_block_size shouldn't be set automatically for the heap engine. Key_block_size was set automatically by the improved heap storage engine, which caused: * warnings (5.5/5.6) or errors (5.7) when changing the engine type to innodb * constantly growing key_block_size during alter operations With this change, key_block_size won't be set unless the user specifies a custom value. * switching to innodb will only result in an error if the user manually specified a key_block_size before, which is expected. * key_block_size was growing because max_chuck_size is set based on the specified key_block_size, and then key_block_size was set to max_chunk_size plus an overhead value, increasing it every time. by leaving out the second step, it remains stable. Note that key_block_size was set so the chunk size is visible even when calculated automatically. As it is always set to 256 unless the user specifies something else, this didn't provide too much information. --- mysql-test/r/percona_heap_var.result | 152 ++++++++++++++++++++------- mysql-test/t/percona_heap_var.test | 123 ++++++++++++++++------ storage/heap/ha_heap.cc | 7 -- 3 files changed, 204 insertions(+), 78 deletions(-) diff --git a/mysql-test/r/percona_heap_var.result b/mysql-test/r/percona_heap_var.result index 88a3864815d7..8f07a2d5eaa3 100644 --- a/mysql-test/r/percona_heap_var.result +++ b/mysql-test/r/percona_heap_var.result @@ -1,11 +1,11 @@ -drop table if exists t1; +DROP TABLE IF EXISTS t1; set @@session.max_heap_table_size=16*1024*1024; -create table t1 (a int not null, b varchar(400), c int, primary key (a), key (c)) engine=heap comment="testing heaps" key_block_size=128; +CREATE TABLE t1 (a INT NOT NULL, b VARCHAR(400), c INT, PRIMARY KEY (a), KEY (c)) ENGINE=HEAP COMMENT="testing heaps" KEY_BLOCK_SIZE=128; ERROR 42000: Incorrect usage/placement of 'key_block_size' -create table t1 (a int not null, b int, c varchar(400), primary key (a), key (b)) engine=heap comment="testing heaps" key_block_size=4; +CREATE TABLE t1 (a INT NOT NULL, b INT, c VARCHAR(400), PRIMARY KEY (a), KEY (b)) ENGINE=HEAP COMMENT="testing heaps" KEY_BLOCK_SIZE=4; ERROR 42000: Incorrect usage/placement of 'key_block_size' -create table t1 (a int not null, b int, c varchar(400), d varchar(400), primary key (a), key (b)) engine=heap comment="testing heaps" key_block_size=24; -show table status like "t1"; +CREATE TABLE t1 (a INT NOT NULL, b INT, c VARCHAR(400), d VARCHAR(400), PRIMARY KEY (a), KEY (b)) ENGINE=HEAP COMMENT="testing heaps" KEY_BLOCK_SIZE=24; +SHOW TABLE STATUS LIKE "t1"; Name t1 Engine MEMORY Version 10 @@ -24,45 +24,45 @@ Collation latin1_swedish_ci Checksum NULL Create_options KEY_BLOCK_SIZE=24 Comment testing heaps -insert into t1 values (1,1,'012',NULL), (2,2,'0123456789',NULL), (3,3,'012345678901234567890123456789',NULL), (4,4,NULL,'0123456789012345678901234567890123456789012345678901234567890123456789'); -select * from t1; +INSERT INTO t1 VALUES (1,1,'012',NULL), (2,2,'0123456789',NULL), (3,3,'012345678901234567890123456789',NULL), (4,4,NULL,'0123456789012345678901234567890123456789012345678901234567890123456789'); +SELECT * FROM t1; a b c d 1 1 012 NULL 2 2 0123456789 NULL 3 3 012345678901234567890123456789 NULL 4 4 NULL 0123456789012345678901234567890123456789012345678901234567890123456789 -delete from t1 where a = 3; -select * from t1; +DELETE FROM t1 WHERE a = 3; +SELECT * FROM t1; a b c d 1 1 012 NULL 2 2 0123456789 NULL 4 4 NULL 0123456789012345678901234567890123456789012345678901234567890123456789 -insert into t1 values (5,5,NULL,'0123'), (6,6,NULL,'0123'); -select * from t1; +INSERT INTO t1 VALUES (5,5,NULL,'0123'), (6,6,NULL,'0123'); +SELECT * FROM t1; a b c d 1 1 012 NULL 2 2 0123456789 NULL 6 6 NULL 0123 5 5 NULL 0123 4 4 NULL 0123456789012345678901234567890123456789012345678901234567890123456789 -update t1 set c = '012345678901234567890123456789' where a = 2; -select * from t1; +UPDATE t1 SET c = '012345678901234567890123456789' WHERE a = 2; +SELECT * FROM t1; a b c d 1 1 012 NULL 2 2 012345678901234567890123456789 NULL 6 6 NULL 0123 5 5 NULL 0123 4 4 NULL 0123456789012345678901234567890123456789012345678901234567890123456789 -update t1 set c = '0123456789' where a = 2; -select * from t1; +UPDATE t1 SET c = '0123456789' WHERE a = 2; +SELECT * FROM t1; a b c d 1 1 012 NULL 2 2 0123456789 NULL 6 6 NULL 0123 5 5 NULL 0123 4 4 NULL 0123456789012345678901234567890123456789012345678901234567890123456789 -insert into t1 values (7,7,'0123',NULL), (8,8,'0123',NULL); -select * from t1; +INSERT INTO t1 VALUES (7,7,'0123',NULL), (8,8,'0123',NULL); +SELECT * FROM t1; a b c d 1 1 012 NULL 2 2 0123456789 NULL @@ -71,7 +71,7 @@ a b c d 4 4 NULL 0123456789012345678901234567890123456789012345678901234567890123456789 7 7 0123 NULL 8 8 0123 NULL -show table status like "t1"; +SHOW TABLE STATUS LIKE "t1"; Name t1 Engine MEMORY Version 10 @@ -90,8 +90,8 @@ Collation latin1_swedish_ci Checksum NULL Create_options KEY_BLOCK_SIZE=24 Comment testing heaps -alter table t1 key_block_size = 0; -show table status like "t1"; +ALTER TABLE t1 KEY_BLOCK_SIZE = 0; +SHOW TABLE STATUS LIKE "t1"; Name t1 Engine MEMORY Version 10 @@ -110,8 +110,8 @@ Collation latin1_swedish_ci Checksum NULL Create_options Comment testing heaps -alter table t1 row_format = dynamic; -show table status like "t1"; +ALTER TABLE t1 ROW_FORMAT = DYNAMIC; +SHOW TABLE STATUS LIKE "t1"; Name t1 Engine MEMORY Version 10 @@ -128,10 +128,10 @@ Update_time X Check_time X Collation latin1_swedish_ci Checksum NULL -Create_options row_format=DYNAMIC KEY_BLOCK_SIZE=X +Create_options row_format=DYNAMIC Comment testing heaps -alter table t1 key_block_size = 128, max_rows = 10001; -show table status like "t1"; +ALTER TABLE t1 KEY_BLOCK_SIZE = 128, MAX_ROWS = 10001; +SHOW TABLE STATUS LIKE "t1"; Name t1 Engine MEMORY Version 10 @@ -150,7 +150,7 @@ Collation latin1_swedish_ci Checksum NULL Create_options max_rows=10001 row_format=DYNAMIC KEY_BLOCK_SIZE=128 Comment testing heaps -select * from t1; +SELECT * FROM t1; a b c d 1 1 012 NULL 2 2 0123456789 NULL @@ -159,16 +159,16 @@ a b c d 4 4 NULL 0123456789012345678901234567890123456789012345678901234567890123456789 7 7 0123 NULL 8 8 0123 NULL -delete from t1; -select * from t1; +DELETE FROM t1; +SELECT * FROM t1; a b c d call mtr.add_suppression("The table 't1' is full"); -select count(*) from t1; -count(*) +SELECT COUNT(*) FROM t1; +COUNT(*) 10001 -insert into t1 values (100000,100000,NULL,'0123'), (100000,100000,NULL,'0123'); +INSERT INTO t1 VALUES (100000,100000,NULL,'0123'), (100000,100000,NULL,'0123'); ERROR HY000: The table 't1' is full -show table status like "t1"; +SHOW TABLE STATUS LIKE "t1"; Name t1 Engine MEMORY Version 10 @@ -187,11 +187,11 @@ Collation latin1_swedish_ci Checksum NULL Create_options max_rows=10001 row_format=DYNAMIC KEY_BLOCK_SIZE=128 Comment testing heaps -select count(*) from t1; -count(*) +SELECT COUNT(*) FROM t1; +COUNT(*) 10001 -set @@session.max_heap_table_size=default; -drop table t1; +SET @@session.max_heap_table_size=default; +DROP TABLE t1; # # Bug 1731483: MEMORY storage engine incorrectly allows BLOB columns before indexed columns # @@ -255,3 +255,83 @@ ERROR 42000: The used table type doesn't support BLOB/TEXT columns ALTER TABLE t1 ADD INDEX idx (c, a); ERROR 42000: The used table type doesn't support BLOB/TEXT columns DROP TABLE t1; +# +# PS-3940: Engine can be changed to innodb and back +# +CREATE TABLE `t1` ( +`id` INT(11) NOT NULL AUTO_INCREMENT, +`json_column` TEXT, +PRIMARY KEY (`id`) +) ENGINE=MEMORY; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `json_column` text, + PRIMARY KEY (`id`) +) ENGINE=MEMORY DEFAULT CHARSET=latin1 +ALTER TABLE t1 ENGINE=INNODB; +ALTER TABLE t1 ENGINE=MEMORY; +# +# PS-3943: Adding additional columns won't change the key_block size +# +ALTER TABLE t1 MODIFY json_column BLOB; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `json_column` blob, + PRIMARY KEY (`id`) +) ENGINE=MEMORY DEFAULT CHARSET=latin1 +ALTER TABLE t1 MODIFY json_column TEXT; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `json_column` text, + PRIMARY KEY (`id`) +) ENGINE=MEMORY DEFAULT CHARSET=latin1 +ALTER TABLE t1 MODIFY json_column BLOB; +ALTER TABLE t1 MODIFY json_column TEXT; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `json_column` text, + PRIMARY KEY (`id`) +) ENGINE=MEMORY DEFAULT CHARSET=latin1 +DROP TABLE t1; +# +# PS-3943: Explicit key_block_size is kept and doesn't change +# +CREATE TABLE `t1` ( +`id` INT(11) NOT NULL AUTO_INCREMENT, +`json_column` TEXT, +PRIMARY KEY (`id`) +) ENGINE=MEMORY KEY_BLOCK_SIZE=200; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `json_column` text, + PRIMARY KEY (`id`) +) ENGINE=MEMORY DEFAULT CHARSET=latin1 KEY_BLOCK_SIZE=200 +ALTER TABLE t1 ENGINE=INNODB KEY_BLOCK_SIZE=0; +ALTER TABLE t1 ENGINE=MEMORY; +ALTER TABLE t1 MODIFY json_column BLOB; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `json_column` blob, + PRIMARY KEY (`id`) +) ENGINE=MEMORY DEFAULT CHARSET=latin1 +ALTER TABLE t1 MODIFY json_column TEXT; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `json_column` text, + PRIMARY KEY (`id`) +) ENGINE=MEMORY DEFAULT CHARSET=latin1 +DROP TABLE t1; diff --git a/mysql-test/t/percona_heap_var.test b/mysql-test/t/percona_heap_var.test index 06c62632eead..b31bdec31a10 100644 --- a/mysql-test/t/percona_heap_var.test +++ b/mysql-test/t/percona_heap_var.test @@ -4,57 +4,56 @@ --source include/have_innodb.inc --disable_warnings -drop table if exists t1; +DROP TABLE IF EXISTS t1; --enable_warnings set @@session.max_heap_table_size=16*1024*1024; --error 1234 -create table t1 (a int not null, b varchar(400), c int, primary key (a), key (c)) engine=heap comment="testing heaps" key_block_size=128; +CREATE TABLE t1 (a INT NOT NULL, b VARCHAR(400), c INT, PRIMARY KEY (a), KEY (c)) ENGINE=HEAP COMMENT="testing heaps" KEY_BLOCK_SIZE=128; --error 1234 -create table t1 (a int not null, b int, c varchar(400), primary key (a), key (b)) engine=heap comment="testing heaps" key_block_size=4; +CREATE TABLE t1 (a INT NOT NULL, b INT, c VARCHAR(400), PRIMARY KEY (a), KEY (b)) ENGINE=HEAP COMMENT="testing heaps" KEY_BLOCK_SIZE=4; -create table t1 (a int not null, b int, c varchar(400), d varchar(400), primary key (a), key (b)) engine=heap comment="testing heaps" key_block_size=24; +CREATE TABLE t1 (a INT NOT NULL, b INT, c VARCHAR(400), d VARCHAR(400), PRIMARY KEY (a), KEY (b)) ENGINE=HEAP COMMENT="testing heaps" KEY_BLOCK_SIZE=24; --replace_column 6 X 7 X 8 X 9 X 10 X 11 X 12 X 13 X 14 X ---query_vertical show table status like "t1" +--query_vertical SHOW TABLE STATUS LIKE "t1" -insert into t1 values (1,1,'012',NULL), (2,2,'0123456789',NULL), (3,3,'012345678901234567890123456789',NULL), (4,4,NULL,'0123456789012345678901234567890123456789012345678901234567890123456789'); -select * from t1; +INSERT INTO t1 VALUES (1,1,'012',NULL), (2,2,'0123456789',NULL), (3,3,'012345678901234567890123456789',NULL), (4,4,NULL,'0123456789012345678901234567890123456789012345678901234567890123456789'); +SELECT * FROM t1; -delete from t1 where a = 3; -select * from t1; +DELETE FROM t1 WHERE a = 3; +SELECT * FROM t1; -insert into t1 values (5,5,NULL,'0123'), (6,6,NULL,'0123'); -select * from t1; +INSERT INTO t1 VALUES (5,5,NULL,'0123'), (6,6,NULL,'0123'); +SELECT * FROM t1; -update t1 set c = '012345678901234567890123456789' where a = 2; -select * from t1; +UPDATE t1 SET c = '012345678901234567890123456789' WHERE a = 2; +SELECT * FROM t1; -update t1 set c = '0123456789' where a = 2; -select * from t1; +UPDATE t1 SET c = '0123456789' WHERE a = 2; +SELECT * FROM t1; -insert into t1 values (7,7,'0123',NULL), (8,8,'0123',NULL); -select * from t1; +INSERT INTO t1 VALUES (7,7,'0123',NULL), (8,8,'0123',NULL); +SELECT * FROM t1; --replace_column 6 X 7 X 8 X 9 X 10 X 11 X 12 X 13 X 14 X ---query_vertical show table status like "t1" -alter table t1 key_block_size = 0; +--query_vertical SHOW TABLE STATUS LIKE "t1" +ALTER TABLE t1 KEY_BLOCK_SIZE = 0; --replace_column 6 X 7 X 8 X 9 X 10 X 11 X 12 X 13 X 14 X ---query_vertical show table status like "t1" -alter table t1 row_format = dynamic; +--query_vertical SHOW TABLE STATUS LIKE "t1" +ALTER TABLE t1 ROW_FORMAT = DYNAMIC; --replace_column 6 X 7 X 8 X 9 X 10 X 11 X 12 X 13 X 14 X ---replace_regex /KEY_BLOCK_SIZE=[[:digit:]]+/KEY_BLOCK_SIZE=X/ ---query_vertical show table status like "t1" -alter table t1 key_block_size = 128, max_rows = 10001; +--query_vertical SHOW TABLE STATUS LIKE "t1" +ALTER TABLE t1 KEY_BLOCK_SIZE = 128, MAX_ROWS = 10001; --replace_column 6 X 7 X 8 X 9 X 10 X 11 X 12 X 13 X 14 X ---query_vertical show table status like "t1" +--query_vertical SHOW TABLE STATUS LIKE "t1" -select * from t1; +SELECT * FROM t1; -delete from t1; -select * from t1; +DELETE FROM t1; +SELECT * FROM t1; let $1=10001; @@ -65,25 +64,25 @@ disable_query_log; while ($1) { - eval insert into t1 values ($1,$1,$1,$1); + eval INSERT INTO t1 VALUES ($1,$1,$1,$1); dec $1; } enable_query_log; -select count(*) from t1; +SELECT COUNT(*) FROM t1; --error 1114 -insert into t1 values (100000,100000,NULL,'0123'), (100000,100000,NULL,'0123'); +INSERT INTO t1 VALUES (100000,100000,NULL,'0123'), (100000,100000,NULL,'0123'); --replace_column 6 X 7 X 8 X 9 X 10 X 11 X 12 X 13 X 14 X ---query_vertical show table status like "t1" -select count(*) from t1; +--query_vertical SHOW TABLE STATUS LIKE "t1" +SELECT COUNT(*) FROM t1; -set @@session.max_heap_table_size=default; +SET @@session.max_heap_table_size=default; -drop table t1; +DROP TABLE t1; --echo # --echo # Bug 1731483: MEMORY storage engine incorrectly allows BLOB columns before indexed columns @@ -165,3 +164,57 @@ ALTER TABLE t1 ADD PRIMARY KEY (a, c); --error ER_TABLE_CANT_HANDLE_BLOB ALTER TABLE t1 ADD INDEX idx (c, a); DROP TABLE t1; + +--echo # +--echo # PS-3940: Engine can be changed to innodb and back +--echo # + +CREATE TABLE `t1` ( + `id` INT(11) NOT NULL AUTO_INCREMENT, + `json_column` TEXT, + PRIMARY KEY (`id`) +) ENGINE=MEMORY; +# no key_block_size displayed even before the bugfix +SHOW CREATE TABLE t1; + +ALTER TABLE t1 ENGINE=INNODB; +ALTER TABLE t1 ENGINE=MEMORY; + +--echo # +--echo # PS-3943: Adding additional columns won't change the key_block size +--echo # + +ALTER TABLE t1 MODIFY json_column BLOB; +# a key_block_size of 256 appeared without the bugfix +SHOW CREATE TABLE t1; +ALTER TABLE t1 MODIFY json_column TEXT; +# a key_block_size of 256+16 appeared without the bugfix +SHOW CREATE TABLE t1; + +ALTER TABLE t1 MODIFY json_column BLOB; +ALTER TABLE t1 MODIFY json_column TEXT; +# a key_block_size of 256+3*16 appeared without the bugfix +SHOW CREATE TABLE t1; + +DROP TABLE t1; + +--echo # +--echo # PS-3943: Explicit key_block_size is kept and doesn't change +--echo # +CREATE TABLE `t1` ( + `id` INT(11) NOT NULL AUTO_INCREMENT, + `json_column` TEXT, + PRIMARY KEY (`id`) +) ENGINE=MEMORY KEY_BLOCK_SIZE=200; +SHOW CREATE TABLE t1; +ALTER TABLE t1 ENGINE=INNODB KEY_BLOCK_SIZE=0; +ALTER TABLE t1 ENGINE=MEMORY; + +ALTER TABLE t1 MODIFY json_column BLOB; +# a key_block_size changed to 200+16 without the bugfix +SHOW CREATE TABLE t1; +ALTER TABLE t1 MODIFY json_column TEXT; +# a key_block_size changed to 200+2*16 without the bugfix +SHOW CREATE TABLE t1; + +DROP TABLE t1; diff --git a/storage/heap/ha_heap.cc b/storage/heap/ha_heap.cc index 9e92febd9aec..8b6451523990 100644 --- a/storage/heap/ha_heap.cc +++ b/storage/heap/ha_heap.cc @@ -925,13 +925,6 @@ void ha_heap::update_create_info(HA_CREATE_INFO *create_info) table->file->info(HA_STATUS_AUTO); if (!(create_info->used_fields & HA_CREATE_USED_AUTO)) create_info->auto_increment_value= stats.auto_increment_value; - if (!(create_info->used_fields & HA_CREATE_USED_KEY_BLOCK_SIZE)) - { - if (file->s->recordspace.is_variable_size) - create_info->key_block_size= file->s->recordspace.chunk_length; - else - create_info->key_block_size= 0; - } } void ha_heap::get_auto_increment(ulonglong offset, ulonglong increment, From a082df5ae8a5e6a04f2cd40b75bcda6ec33f6e9c Mon Sep 17 00:00:00 2001 From: Venkatesh Duggirala Date: Fri, 13 Apr 2018 10:59:59 +0530 Subject: [PATCH 0765/1221] Bug#27373559 COMMIT ORDER DEADLOCK + RETRY LOGIC IS NOT CONSIDERING TRX ERROR CASES Problem: ======== When two workers threads are involved in "Commit order deadlock", slave worker thread is retrying a transaction even when the transaction error is a 'non temporary' error. Analysis: ========= As part of BUG#20136704 fix, commit order deadlock checking mechanism is introduced. Every time when a transaction needs to wait for another transaction to release a row lock, innodb will call a slave function to check if there is an order commit deadlock. If it found an order commit deadlock, It will set a deadlock flag to the slave worker which is holding the row lock. Thereafter, the worker will roll its transaction back and retry it again. At this point, this retrying transaction *should* have no non-temporary errors. Having a non-temporary error may be a sign of: a) Slave has diverged from the master; b) There is an issue in the logical clock allowing a transaction to be applied in parallel with its dependencies (the two transactions are trying to change the same record in parallel). For (a), a retry of this transaction will produce the same error. For (b), this transaction might succeed upon retry, allowing the slave to progress without manual intervention, but it is a sign of problems in LC generation at the master. Fix: ==== Slave server will make the worker to retry a transaction (which is involved in commit order deadlock) only if there are no fatal errors. --- ...reserve_commit_order_deadlock_error.result | 141 ++++++++++++ ..._preserve_commit_order_deadlock_error.test | 212 ++++++++++++++++++ sql/rpl_rli_pdb.cc | 48 +++- sql/rpl_slave_commit_order_manager.cc | 9 +- 4 files changed, 408 insertions(+), 2 deletions(-) create mode 100644 mysql-test/suite/rpl/r/rpl_mts_slave_preserve_commit_order_deadlock_error.result create mode 100644 mysql-test/suite/rpl/t/rpl_mts_slave_preserve_commit_order_deadlock_error.test diff --git a/mysql-test/suite/rpl/r/rpl_mts_slave_preserve_commit_order_deadlock_error.result b/mysql-test/suite/rpl/r/rpl_mts_slave_preserve_commit_order_deadlock_error.result new file mode 100644 index 000000000000..29a97b28f449 --- /dev/null +++ b/mysql-test/suite/rpl/r/rpl_mts_slave_preserve_commit_order_deadlock_error.result @@ -0,0 +1,141 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +# +# 1. Initial data +# +CREATE TABLE t1(c1 INT PRIMARY KEY, c2 INT, INDEX(c2)) ENGINE = InnoDB; +CREATE TABLE t2(c1 INT PRIMARY KEY) ENGINE = InnoDB; +include/sync_slave_sql_with_master.inc +# +# 2. Initial setup on Slave. +# +# 2.1. Enable slave_preserve_commit_order on slave for Commit order +# deadlock to occur. +# +include/stop_slave_sql.inc +SET @saved_slave_preserve_commit_order = @@GLOBAL.slave_preserve_commit_order; +SET GLOBAL slave_preserve_commit_order = ON; +# +# 2.2 Set innodb_lock_wait_timeout to 300 to make test work without issues +# on slow platform runs. +# +SET @saved_innodb_lock_wait_timeout = @@GLOBAL.innodb_lock_wait_timeout; +SET GLOBAL innodb_lock_wait_timeout = 300; +# +# 2.3 Adding 'rpl_fake_cod_deadlock' debug point to execute special code required +# for the test case. +# +# Adding debug point 'rpl_fake_cod_deadlock' to @@GLOBAL.debug +# +# 2.4 Add error suppressions. +# +call mtr.add_suppression("Worker .* failed executing transaction"); +call mtr.add_suppression("The slave coordinator and worker threads are stopped"); +# +# 2.5 An extra connection needed on Slave. +# +# +# 3. Actual testing starts from here. +# +# 3.1 Insert basic data on Master +# +[connection master] +INSERT INTO t1 VALUES(1, 1),(2, 2); +# +# 3.2 Enabling set_commit_parent_100 debug point +# on Master to make two conflicting transactions +# run parallely by two worker threads on Slave. +# +# Adding debug point 'set_commit_parent_100' to @@SESSION.debug +# +# 3.3 Execute Transaction-1 +# +INSERT INTO t1 VALUES(3, 1); +# +# 3.4 Execute Transaction-2 +# +BEGIN; +DELETE FROM t1 WHERE c2 <= 1; +INSERT INTO t2 values(1); +COMMIT; +# +# 3.5 On Slave, begin a transaction (Transacation-3) +# which will acquire MDL lock on t1 +# (that blocks 'Transacation-1'). +# +[connection slave1] +BEGIN; +INSERT INTO t1 VALUES(3, 3); +# +# 3.6 On Slave, begin a transaction (Transacation-4) +# that can block INSERT in 'Transacation-2'. +# +[connection slave] +BEGIN; +INSERT INTO t2 VALUES(1); +# +# 3.7 Start SQL thread, let Transaction-1 & 2 reach SQL workers +# +include/start_slave_sql.inc +# +# 3.8 Wait till the worker threads pick up those transacations +# (Transaction 1 and Transaction 2). They will wait for locks due +# local transacations (3 & 4). +# +# 3.9 Rollback Transaction-3 which will release MDL lock required for +# Transaction-1. +# +[connection slave1] +ROLLBACK; +# +# 3.10 Wait till the worker thread detects commit order deadlock +# between two workers +# (Worker1 : Transaction-1 & Worker-2: Transaction-2). +# +SET debug_sync = "now WAIT_FOR reported_deadlock"; +# +# 3.11 Commit Transaction-4 which will release MDL lock required for +# Transaction-2. +# +[connection slave] +COMMIT; +# +# 3.12 Step 3.11 will cause worker 2 ("Transacation-2") +# to fail with 'ER_DUP_ENTRY' error (after the worker2 +# detected the 'commit order deadlock'). +# +include/wait_for_slave_sql_error.inc [errno=1062] +# +# 3.13 Check that worker 2 did not *retry* transaction-2 +# before throwing ER_DUP_ENTRY error (non-temporary error). +# +include/assert_grep.inc [Found 'Duplicate entry' error only once time which proves that transaction is not retried after getting 'non-temporary error'.] +# +# 4. Cleanup +# 4.1 Clear debug point. +# +# Removing debug point 'rpl_fake_cod_deadlock' from @@GLOBAL.debug +# +# 4.2 Clean the data on Slave. +# +include/stop_slave_io.inc +RESET SLAVE; +DROP TABLE t1, t2; +# +# 4.3 Clear system variables. +# +SET GLOBAL slave_preserve_commit_order = @saved_slave_preserve_commit_order; +SET GLOBAL innodb_lock_wait_timeout = @saved_innodb_lock_wait_timeout; +# +# 4.4 Clear debug point. +# +[connection master] +# Removing debug point 'set_commit_parent_100' from @@SESSION.debug +# +# 4.5 Clean the data on Master. +# +DROP TABLE t1, t2; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_mts_slave_preserve_commit_order_deadlock_error.test b/mysql-test/suite/rpl/t/rpl_mts_slave_preserve_commit_order_deadlock_error.test new file mode 100644 index 000000000000..8d02f7671eae --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_mts_slave_preserve_commit_order_deadlock_error.test @@ -0,0 +1,212 @@ +# ==== Purpose ==== +# +# This test verifies that when worker threads enter into +# commit order deadlock, retry logic will not be triggered +# if there is non-temporary error in the transaction. +# For more information about "commit order deadlock and +# retry logic, please see header section in +# mysql-test/suite/rpl/t/rpl_mts_slave_preserve_commit_order_deadlock.test. +# +# ==== Implementation ==== +# +# 1) Create a situation that can cause commit order deadlock between two +# worker threads on slave. +# 2) After the worker thread detects commit order deadlock, make transaction +# fail due to some other error (non-temp error). +# 3) Make sure that in this non-temp error case, the worker thread stopped +# immediately with the error instead of retrying it again. +# +# ==== References ==== +# Bug#27373559 COMMIT ORDER DEADLOCK + RETRY LOGIC IS NOT CONSIDERING TRX +# ERROR CASES +# +# ======== +# +# Commit order deadlock occurs only when MTS + LOGICAL CLOCK are enabled. +--source include/only_mts_slave_parallel_type_logical_clock.inc +--source include/only_mts_slave_parallel_workers.inc +--source include/have_binlog_format_statement.inc +--source include/have_debug.inc +--source include/master-slave.inc + +--echo # +--echo # 1. Initial data +--echo # +CREATE TABLE t1(c1 INT PRIMARY KEY, c2 INT, INDEX(c2)) ENGINE = InnoDB; +CREATE TABLE t2(c1 INT PRIMARY KEY) ENGINE = InnoDB; +--source include/sync_slave_sql_with_master.inc + +--echo # +--echo # 2. Initial setup on Slave. +--echo # +--echo # 2.1. Enable slave_preserve_commit_order on slave for Commit order +--echo # deadlock to occur. +--echo # +--source include/stop_slave_sql.inc +SET @saved_slave_preserve_commit_order = @@GLOBAL.slave_preserve_commit_order; +SET GLOBAL slave_preserve_commit_order = ON; + +--echo # +--echo # 2.2 Set innodb_lock_wait_timeout to 300 to make test work without issues +--echo # on slow platform runs. +--echo # +SET @saved_innodb_lock_wait_timeout = @@GLOBAL.innodb_lock_wait_timeout; +SET GLOBAL innodb_lock_wait_timeout = 300; + +--echo # +--echo # 2.3 Adding 'rpl_fake_cod_deadlock' debug point to execute special code required +--echo # for the test case. +--echo # +--let $debug_point= rpl_fake_cod_deadlock +--source include/add_debug_point.inc + +--echo # +--echo # 2.4 Add error suppressions. +--echo # +call mtr.add_suppression("Worker .* failed executing transaction"); +call mtr.add_suppression("The slave coordinator and worker threads are stopped"); + +--echo # +--echo # 2.5 An extra connection needed on Slave. +--echo # +connect(slave2,127.0.0.1,root,,test,$SLAVE_MYPORT,); + +--echo # +--echo # 3. Actual testing starts from here. +--echo # +--echo # 3.1 Insert basic data on Master +--echo # +--source include/rpl_connection_master.inc +INSERT INTO t1 VALUES(1, 1),(2, 2); + +--echo # +--echo # 3.2 Enabling set_commit_parent_100 debug point +--echo # on Master to make two conflicting transactions +--echo # run parallely by two worker threads on Slave. +--echo # +--let $debug_type= SESSION +--let $debug_point= set_commit_parent_100 +--source include/add_debug_point.inc + +--echo # +--echo # 3.3 Execute Transaction-1 +--echo # +INSERT INTO t1 VALUES(3, 1); + +--echo # +--echo # 3.4 Execute Transaction-2 +--echo # +BEGIN; +DELETE FROM t1 WHERE c2 <= 1; +INSERT INTO t2 values(1); +COMMIT; + +--echo # +--echo # 3.5 On Slave, begin a transaction (Transacation-3) +--echo # which will acquire MDL lock on t1 +--echo # (that blocks 'Transacation-1'). +--echo # +--source include/rpl_connection_slave1.inc +BEGIN; +INSERT INTO t1 VALUES(3, 3); + +--echo # +--echo # 3.6 On Slave, begin a transaction (Transacation-4) +--echo # that can block INSERT in 'Transacation-2'. +--echo # +--source include/rpl_connection_slave.inc +BEGIN; +INSERT INTO t2 VALUES(1); + +--echo # +--echo # 3.7 Start SQL thread, let Transaction-1 & 2 reach SQL workers +--echo # +--connection slave2 +--source include/start_slave_sql.inc + +--echo # +--echo # 3.8 Wait till the worker threads pick up those transacations +--echo # (Transaction 1 and Transaction 2). They will wait for locks due +--echo # local transacations (3 & 4). +# +--let $wait_condition= SELECT COUNT(*) = 1 FROM performance_schema.threads WHERE PROCESSLIST_INFO= 'INSERT INTO t1 VALUES(3, 1)' AND NAME LIKE '%slave_worker%' +--source include/wait_condition.inc +--let $wait_condition= SELECT COUNT(*) = 1 FROM performance_schema.threads WHERE PROCESSLIST_INFO= 'INSERT INTO t2 values(1)' AND NAME LIKE '%slave_worker%' +--source include/wait_condition.inc + +--echo # +--echo # 3.9 Rollback Transaction-3 which will release MDL lock required for +--echo # Transaction-1. +--echo # +--source include/rpl_connection_slave1.inc +ROLLBACK; + +--echo # +--echo # 3.10 Wait till the worker thread detects commit order deadlock +--echo # between two workers +--echo # (Worker1 : Transaction-1 & Worker-2: Transaction-2). +--echo # +SET debug_sync = "now WAIT_FOR reported_deadlock"; + +--echo # +--echo # 3.11 Commit Transaction-4 which will release MDL lock required for +--echo # Transaction-2. +--echo # +--source include/rpl_connection_slave.inc +COMMIT; + +--echo # +--echo # 3.12 Step 3.11 will cause worker 2 ("Transacation-2") +--echo # to fail with 'ER_DUP_ENTRY' error (after the worker2 +--echo # detected the 'commit order deadlock'). +--echo # +--let $slave_sql_errno= convert_error(ER_DUP_ENTRY) +--source include/wait_for_slave_sql_error.inc + +--echo # +--echo # 3.13 Check that worker 2 did not *retry* transaction-2 +--echo # before throwing ER_DUP_ENTRY error (non-temporary error). +--echo # +--let $assert_file= $MYSQLTEST_VARDIR/log/mysqld.2.err +--let $assert_only_after = CURRENT_TEST: rpl.rpl_mts_slave_preserve_commit_order_deadlock_error +--let $assert_count = 1 +--let $assert_select = Error 'Duplicate entry '1' for key 'PRIMARY'' on query +--let $assert_text = Found 'Duplicate entry' error only once time which proves that transaction is not retried after getting 'non-temporary error'. +--source include/assert_grep.inc + +--echo # +--echo # 4. Cleanup +--echo # 4.1 Clear debug point. +--echo # +--let $debug_type= GLOBAL +--let $debug_point= rpl_fake_cod_deadlock +--source include/remove_debug_point.inc + +--echo # +--echo # 4.2 Clean the data on Slave. +--echo # +--source include/stop_slave_io.inc +RESET SLAVE; +DROP TABLE t1, t2; + +--echo # +--echo # 4.3 Clear system variables. +--echo # +SET GLOBAL slave_preserve_commit_order = @saved_slave_preserve_commit_order; +SET GLOBAL innodb_lock_wait_timeout = @saved_innodb_lock_wait_timeout; + +--echo # +--echo # 4.4 Clear debug point. +--echo # +--source include/rpl_connection_master.inc +--let $debug_type= SESSION +--let $debug_point= set_commit_parent_100 +--source include/remove_debug_point.inc + +--echo # +--echo # 4.5 Clean the data on Master. +--echo # +DROP TABLE t1, t2; + +--let $rpl_only_running_threads= 1 +--source include/rpl_end.inc diff --git a/sql/rpl_rli_pdb.cc b/sql/rpl_rli_pdb.cc index 1c6e9f86b4b1..7f2766f5640f 100644 --- a/sql/rpl_rli_pdb.cc +++ b/sql/rpl_rli_pdb.cc @@ -1928,7 +1928,53 @@ bool Slave_worker::retry_transaction(uint start_relay_number, uint error= 0; if (found_order_commit_deadlock()) - error= ER_LOCK_DEADLOCK; + { + /* + This transaction was allowed to be executed in parallel with other that + happened earlier according to binary log order. It was asked to be + rolled back by the other transaction as it was holding a lock that is + needed by the other transaction to progress, according to binary log + order this configure a deadlock. + + At this point, this transaction *should* have no non-temporary errors. + + Having a non-temporary error may be a sign of: + + a) Slave has diverged from the master; + b) There is an issue in the logical clock allowing a transaction to be + applied in parallel with its dependencies (the two transactions are + trying to change the same record in parallel). + + For (a), a retry of this transaction will produce the same error. For + (b), this transaction might succeed upon retry, allowing the slave to + progress without manual intervention, but it is a sign of problems in LC + generation at the master. + + So, we will make the worker to retry this transaction only if there is + no error or the error is a temporary error. + */ + Diagnostics_area *da= thd->get_stmt_da(); + if (!thd->get_stmt_da()->is_error() || + has_temporary_error(thd, + da->is_error() ? da->mysql_errno() : error, + &silent)) + { + error= ER_LOCK_DEADLOCK; + } +#ifndef DBUG_OFF + else + { + /* + The non-debug binary will not retry this transactions, stopping the + SQL thread because of the non-temporary error. But, as this situation + is not supposed to happen as described in the comment above, we will + fail an assert to ease the issue investigation when it happens. + */ + if (DBUG_EVALUATE_IF("rpl_fake_cod_deadlock", 0, 1)) + DBUG_ASSERT(false); + } +#endif + } if (!has_temporary_error(thd, error, &silent) || thd->get_transaction()->cannot_safely_rollback(Transaction_ctx::SESSION)) diff --git a/sql/rpl_slave_commit_order_manager.cc b/sql/rpl_slave_commit_order_manager.cc index 58cc68d6f5c4..358a5acd841d 100644 --- a/sql/rpl_slave_commit_order_manager.cc +++ b/sql/rpl_slave_commit_order_manager.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -16,6 +16,7 @@ #include "rpl_slave_commit_order_manager.h" #include "rpl_rli_pdb.h" // Slave_worker +#include "debug_sync.h" // debug_sync_set_action Commit_order_manager::Commit_order_manager(uint32 worker_numbers) : m_rollback_trx(false), m_workers(worker_numbers), queue_head(QUEUE_EOF), @@ -152,6 +153,12 @@ void Commit_order_manager::report_deadlock(Slave_worker *worker) DBUG_ENTER("Commit_order_manager::report_deadlock"); mysql_mutex_lock(&m_mutex); worker->report_order_commit_deadlock(); + DBUG_EXECUTE_IF("rpl_fake_cod_deadlock", + { + const char act[]= "now signal reported_deadlock"; + DBUG_ASSERT(!debug_sync_set_action(current_thd, + STRING_WITH_LEN(act))); + }); mysql_cond_signal(&m_workers[worker->id].cond); mysql_mutex_unlock(&m_mutex); DBUG_VOID_RETURN; From d8e0be7e35e92e6997d3927d3cff59010276faa7 Mon Sep 17 00:00:00 2001 From: fiowro Date: Mon, 9 Apr 2018 00:38:54 +0300 Subject: [PATCH 0766/1221] Fix for DOC-372 without clarification of COMMAND_CLASS information - just minor formatting fixes --- doc/source/management/audit_log_plugin.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/source/management/audit_log_plugin.rst b/doc/source/management/audit_log_plugin.rst index d26d9e210143..3b33708b936e 100644 --- a/doc/source/management/audit_log_plugin.rst +++ b/doc/source/management/audit_log_plugin.rst @@ -40,7 +40,7 @@ Example of the Disconnect event: :: "DB"="" /> -* **Query** - Additional fields for this event are: ``COMMAND_CLASS`` (values come from the ``com_status_vars`` array in the :file:`sql/mysqld.cc`` file in a MySQL source distribution. Examples are ``select``, ``alter_table", "create_table", etc.), ``CONNECTION_ID``, ``STATUS`` (indicates error when non-zero), ``SQLTEXT`` (text of SQL-statement), ``USER``, ``HOST``, ``OS_USER``, ``IP``. Possible values for the ``NAME`` name field for this event are ``Query``, ``Prepare``, ``Execute``, ``Change user``, etc. +* **Query** - Additional fields for this event are: ``COMMAND_CLASS`` (values come from the ``com_status_vars`` array in the :file:`sql/mysqld.cc`` file in a MySQL source distribution. Examples are ``select``, ``alter_table``, ``create_table``, etc.), ``CONNECTION_ID``, ``STATUS`` (indicates error when non-zero), ``SQLTEXT`` (text of SQL-statement), ``USER``, ``HOST``, ``OS_USER``, ``IP``. Possible values for the ``NAME`` name field for this event are ``Query``, ``Prepare``, ``Execute``, ``Change user``, etc. Example of the Query event: :: From 45e0fc90a15abb0e677b2569cbff362a4debfe00 Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Thu, 5 Apr 2018 07:43:44 +0200 Subject: [PATCH 0767/1221] PS-3919: Assertion when analyze table performs a binlog rotation This commit: * Adds a minimal testcase * Backports the fix for this issue from 8.0, which can be found as part of two huge commits: * Disabling autocommit/analyze read lock for mysql_admin_table from 0a10fc8b5ca0 * Disable_autocommit_guard RAII class from 31350e8ab151 (used by the otherr backported change) --- .../suite/binlog/r/percona_bug_ps3919.result | 40 +++++++++++++++ .../binlog/t/percona_bug_ps3919-master.opt | 1 + .../suite/binlog/t/percona_bug_ps3919.test | 44 +++++++++++++++++ sql/sql_admin.cc | 19 ++++--- sql/sql_class.h | 49 +++++++++++++++++++ sql/transaction.cc | 12 ++--- sql/transaction.h | 8 +-- 7 files changed, 156 insertions(+), 17 deletions(-) create mode 100644 mysql-test/suite/binlog/r/percona_bug_ps3919.result create mode 100644 mysql-test/suite/binlog/t/percona_bug_ps3919-master.opt create mode 100644 mysql-test/suite/binlog/t/percona_bug_ps3919.test diff --git a/mysql-test/suite/binlog/r/percona_bug_ps3919.result b/mysql-test/suite/binlog/r/percona_bug_ps3919.result new file mode 100644 index 000000000000..1292b39ae20d --- /dev/null +++ b/mysql-test/suite/binlog/r/percona_bug_ps3919.result @@ -0,0 +1,40 @@ +SET @@GLOBAL.max_binlog_size=4096; +CREATE TABLE t3 (c1 VARCHAR(255) CHARACTER SET 'utf8' COLLATE 'utf8_bin',c2 VARCHAR(255) ,c3 VARCHAR(255), PRIMARY KEY(c1)) ENGINE=InnoDB; +CREATE TABLE IF NOT EXISTS t3 (c1 VARCHAR(255) PRIMARY KEY,c2 VARCHAR(255) ,c3 VARCHAR(255)) ENGINE=InnoDB; +Warnings: +Note 1050 Table 't3' already exists +INSERT INTO t3 VALUES ( +'b1234567890123456789012345678901234567890123456789012345678901234567890', +'1234567890123456789012345678901234567890123456789012345678901234567890', +'1234567890123456789012345678901234567890123456789012345678901234567890'); +INSERT INTO t3 VALUES ( +'1234567890123456789012345678901234567890123456789012345678901234567890', +'1234567890123456789012345678901234567890123456789012345678901234567890', +'1234567890123456789012345678901234567890123456789012345678901234567890'); +TRUNCATE t3; +TRUNCATE t3; +TRUNCATE t3; +TRUNCATE t3; +TRUNCATE t3; +TRUNCATE t3; +TRUNCATE t3; +TRUNCATE t3; +TRUNCATE t3; +TRUNCATE t3; +TRUNCATE t3; +TRUNCATE t3; +TRUNCATE t3; +CREATE TABLE IF NOT EXISTS t3 (c1 VARCHAR(255) PRIMARY KEY,c2 VARCHAR(255) ,c3 VARCHAR(255)) ENGINE=InnoDB; +Warnings: +Note 1050 Table 't3' already exists +ROLLBACK WORK; +START TRANSACTION; +INSERT INTO t3 VALUES ( +'1234567890123456789012345678901234567890123456789012345678901234567890', +'1234567890123456789012345678901234567890123456789012345678901234567890', +'1234567890123456789012345678901234567890123456789012345678901234567890'); +ANALYZE LOCAL TABLE t3; +Table Op Msg_type Msg_text +test.t3 analyze status OK +DROP TABLE t3; +SET @@GLOBAL.max_binlog_size=1073741824; diff --git a/mysql-test/suite/binlog/t/percona_bug_ps3919-master.opt b/mysql-test/suite/binlog/t/percona_bug_ps3919-master.opt new file mode 100644 index 000000000000..51b99dc9d5a2 --- /dev/null +++ b/mysql-test/suite/binlog/t/percona_bug_ps3919-master.opt @@ -0,0 +1 @@ +--gtid_mode=ON --enforce_gtid_consistency=ON --sql_mode=ONLY_FULL_GROUP_BY diff --git a/mysql-test/suite/binlog/t/percona_bug_ps3919.test b/mysql-test/suite/binlog/t/percona_bug_ps3919.test new file mode 100644 index 000000000000..ad34892ce1c6 --- /dev/null +++ b/mysql-test/suite/binlog/t/percona_bug_ps3919.test @@ -0,0 +1,44 @@ +# PS-3919: assertion when performing a binlog rotation during an implicit commit +--source include/have_innodb.inc + +let $initial_max_binlog_size = `select @@GLOBAL.max_binlog_size`; +SET @@GLOBAL.max_binlog_size=4096; + +# Write stuff to the binlog +CREATE TABLE t3 (c1 VARCHAR(255) CHARACTER SET 'utf8' COLLATE 'utf8_bin',c2 VARCHAR(255) ,c3 VARCHAR(255), PRIMARY KEY(c1)) ENGINE=InnoDB; +CREATE TABLE IF NOT EXISTS t3 (c1 VARCHAR(255) PRIMARY KEY,c2 VARCHAR(255) ,c3 VARCHAR(255)) ENGINE=InnoDB; +INSERT INTO t3 VALUES ( +'b1234567890123456789012345678901234567890123456789012345678901234567890', +'1234567890123456789012345678901234567890123456789012345678901234567890', +'1234567890123456789012345678901234567890123456789012345678901234567890'); +INSERT INTO t3 VALUES ( +'1234567890123456789012345678901234567890123456789012345678901234567890', +'1234567890123456789012345678901234567890123456789012345678901234567890', +'1234567890123456789012345678901234567890123456789012345678901234567890'); +TRUNCATE t3; +TRUNCATE t3; +TRUNCATE t3; +TRUNCATE t3; +TRUNCATE t3; +TRUNCATE t3; +TRUNCATE t3; +TRUNCATE t3; +TRUNCATE t3; +TRUNCATE t3; +TRUNCATE t3; +TRUNCATE t3; +TRUNCATE t3; +CREATE TABLE IF NOT EXISTS t3 (c1 VARCHAR(255) PRIMARY KEY,c2 VARCHAR(255) ,c3 VARCHAR(255)) ENGINE=InnoDB; +ROLLBACK WORK; +START TRANSACTION; +INSERT INTO t3 VALUES ( +'1234567890123456789012345678901234567890123456789012345678901234567890', +'1234567890123456789012345678901234567890123456789012345678901234567890', +'1234567890123456789012345678901234567890123456789012345678901234567890'); + +# Analyze table performs an implicit commit, and ends the current transaction +ANALYZE LOCAL TABLE t3; + +DROP TABLE t3; +eval SET @@GLOBAL.max_binlog_size=$initial_max_binlog_size; + diff --git a/sql/sql_admin.cc b/sql/sql_admin.cc index 6f84a7c49430..b6d372d7400a 100644 --- a/sql/sql_admin.cc +++ b/sql/sql_admin.cc @@ -281,6 +281,8 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables, HA_CHECK_OPT *), int (view_operator_func)(THD *, TABLE_LIST*)) { + Disable_autocommit_guard autocommit_guard(thd); + TABLE_LIST *table; SELECT_LEX *select= thd->lex->select_lex; List field_list; @@ -292,6 +294,7 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables, ((thd->variables.gtid_next.type == GTID_GROUP || thd->variables.gtid_next.type == ANONYMOUS_GROUP) && (!thd->skip_gtid_rollback)); + bool ignore_grl_on_analyze= operator_func == &handler::ha_analyze; DBUG_ENTER("mysql_admin_table"); field_list.push_back(item = new Item_empty_string("Table", NAME_CHAR_LEN*2)); @@ -592,8 +595,8 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables, length= my_snprintf(buff, sizeof(buff), ER(ER_OPEN_AS_READONLY), table_name); protocol->store(buff, length, system_charset_info); - trans_commit_stmt(thd); - trans_commit(thd); + trans_commit_stmt(thd, ignore_grl_on_analyze); + trans_commit(thd, ignore_grl_on_analyze); /* Make sure this table instance is not reused after the operation. */ if (table->table) table->table->m_needs_reopen= true; @@ -824,8 +827,8 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables, reopen the table and do ha_innobase::analyze() on it. We have to end the row, so analyze could return more rows. */ - trans_commit_stmt(thd); - trans_commit(thd); + trans_commit_stmt(thd, ignore_grl_on_analyze); + trans_commit(thd, ignore_grl_on_analyze); close_thread_tables(thd); thd->mdl_context.release_transactional_locks(); @@ -870,8 +873,8 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables, */ if (thd->get_stmt_da()->is_ok()) thd->get_stmt_da()->reset_diagnostics_area(); - trans_commit_stmt(thd); - trans_commit(thd); + trans_commit_stmt(thd, ignore_grl_on_analyze); + trans_commit(thd, ignore_grl_on_analyze); close_thread_tables(thd); thd->mdl_context.release_transactional_locks(); /* Clear references to TABLE and MDL_ticket after releasing them. */ @@ -1082,7 +1085,8 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables, } else { - if (trans_commit_stmt(thd) || trans_commit_implicit(thd)) + if (trans_commit_stmt(thd, ignore_grl_on_analyze) || + trans_commit_implicit(thd, ignore_grl_on_analyze)) goto err; } close_thread_tables(thd); @@ -1211,6 +1215,7 @@ bool Sql_cmd_analyze_table::execute(THD *thd) if (check_table_access(thd, SELECT_ACL | INSERT_ACL, first_table, FALSE, UINT_MAX, FALSE)) goto error; + thd->set_slow_log_for_admin_command(); res= mysql_admin_table(thd, first_table, &thd->lex->check_opt, "analyze", lock_type, 1, 0, 0, 0, diff --git a/sql/sql_class.h b/sql/sql_class.h index 49b2b5221f04..725fb0a0dfad 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -5818,6 +5818,55 @@ inline void add_order_to_list(THD *thd, ORDER *order) thd->lex->select_lex->add_order_to_list(order); } +/*************************************************************************/ + +/** RAII class for temporarily turning off @@autocommit in the connection. */ + +class Disable_autocommit_guard +{ +public: + + /** + @param thd non-NULL - pointer to the context of connection in which + @@autocommit mode needs to be disabled. + NULL - if @@autocommit mode needs to be left as is. + */ + Disable_autocommit_guard(THD *thd) + : m_thd(thd), m_save_option_bits(thd ? thd->variables.option_bits : 0) + { + if (m_thd) + { + /* + We can't disable auto-commit if there is ongoing transaction as this + might easily break statement/session transaction invariants. + */ + DBUG_ASSERT(m_thd->get_transaction()->is_empty(Transaction_ctx::STMT) && + m_thd->get_transaction()->is_empty(Transaction_ctx::SESSION)); + + m_thd->variables.option_bits&= ~OPTION_AUTOCOMMIT; + m_thd->variables.option_bits|= OPTION_NOT_AUTOCOMMIT; + } + } + + ~Disable_autocommit_guard() + { + if (m_thd) + { + /* + Both session and statement transactions need to be finished by the + time when we enable auto-commit mode back. + */ + DBUG_ASSERT(m_thd->get_transaction()->is_empty(Transaction_ctx::STMT) && + m_thd->get_transaction()->is_empty(Transaction_ctx::SESSION)); + m_thd->variables.option_bits= m_save_option_bits; + } + } + +private: + THD *m_thd; + ulonglong m_save_option_bits; +}; + inline void add_group_to_list(THD *thd, ORDER *order) { thd->lex->select_lex->add_group_to_list(order); diff --git a/sql/transaction.cc b/sql/transaction.cc index 791f4b7da9ef..0ecdfc709c33 100644 --- a/sql/transaction.cc +++ b/sql/transaction.cc @@ -225,7 +225,7 @@ bool trans_begin(THD *thd, uint flags) @retval TRUE Failure */ -bool trans_commit(THD *thd) +bool trans_commit(THD *thd, bool ignore_global_read_lock) { int res; DBUG_ENTER("trans_commit"); @@ -236,7 +236,7 @@ bool trans_commit(THD *thd) thd->server_status&= ~(SERVER_STATUS_IN_TRANS | SERVER_STATUS_IN_TRANS_READONLY); DBUG_PRINT("info", ("clearing SERVER_STATUS_IN_TRANS")); - res= ha_commit_trans(thd, TRUE); + res= ha_commit_trans(thd, TRUE, ignore_global_read_lock); if (res == FALSE) if (thd->rpl_thd_ctx.session_gtids_ctx(). notify_after_transaction_commit(thd)) @@ -281,7 +281,7 @@ bool trans_commit(THD *thd) @retval TRUE Failure */ -bool trans_commit_implicit(THD *thd) +bool trans_commit_implicit(THD *thd, bool ignore_global_read_lock) { bool res= FALSE; DBUG_ENTER("trans_commit_implicit"); @@ -304,7 +304,7 @@ bool trans_commit_implicit(THD *thd) thd->server_status&= ~(SERVER_STATUS_IN_TRANS | SERVER_STATUS_IN_TRANS_READONLY); DBUG_PRINT("info", ("clearing SERVER_STATUS_IN_TRANS")); - res= MY_TEST(ha_commit_trans(thd, TRUE)); + res= MY_TEST(ha_commit_trans(thd, TRUE, ignore_global_read_lock)); } else if (tc_log) tc_log->commit(thd, true); @@ -433,7 +433,7 @@ bool trans_rollback_implicit(THD *thd) @retval TRUE Failure */ -bool trans_commit_stmt(THD *thd) +bool trans_commit_stmt(THD *thd, bool ignore_global_read_lock) { DBUG_ENTER("trans_commit_stmt"); int res= FALSE; @@ -455,7 +455,7 @@ bool trans_commit_stmt(THD *thd) if (thd->get_transaction()->is_active(Transaction_ctx::STMT)) { - res= ha_commit_trans(thd, FALSE); + res= ha_commit_trans(thd, FALSE, ignore_global_read_lock); if (! thd->in_active_multi_stmt_transaction()) trans_reset_one_shot_chistics(thd); } diff --git a/sql/transaction.h b/sql/transaction.h index 395787fb265f..37d283950e26 100644 --- a/sql/transaction.h +++ b/sql/transaction.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2008, 2016 Oracle and/or its affiliates. All rights reserved. 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 @@ -26,12 +26,12 @@ void trans_reset_one_shot_chistics(THD *thd); void trans_track_end_trx(THD *thd); bool trans_begin(THD *thd, uint flags= 0); -bool trans_commit(THD *thd); -bool trans_commit_implicit(THD *thd); +bool trans_commit(THD *thd, bool ignore_global_read_lock=false); +bool trans_commit_implicit(THD *thd, bool ignore_global_read_lock=false); bool trans_rollback(THD *thd); bool trans_rollback_implicit(THD *thd); -bool trans_commit_stmt(THD *thd); +bool trans_commit_stmt(THD *thd, bool ignore_global_read_lock=false); bool trans_rollback_stmt(THD *thd); bool trans_commit_attachable(THD *thd); From c4794f02ccc93a278a1e0bd4a963179fb71f3956 Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Wed, 11 Apr 2018 10:35:26 +0200 Subject: [PATCH 0768/1221] PS-3936, PS-3940, PS-3943: key_block_size shouldn't be set automatically for the heap engine. Key_block_size was set automatically by the improved heap storage engine, which caused: * warnings (5.5/5.6) or errors (5.7) when changing the engine type to innodb * constantly growing key_block_size during alter operations With this change, key_block_size won't be set unless the user specifies a custom value. * switching to innodb will only result in an error if the user manually specified a key_block_size before, which is expected. * key_block_size was growing because max_chuck_size is set based on the specified key_block_size, and then key_block_size was set to max_chunk_size plus an overhead value, increasing it every time. by leaving out the second step, it remains stable. Note that key_block_size was set so the chunk size is visible even when calculated automatically. As it is always set to 256 unless the user specifies something else, this didn't provide too much information. (cherry picked from commit 3c8964316ad5c931eaabcd9eb2a859c98717791e) --- mysql-test/r/percona_heap_var.result | 152 ++++++++++++++++++++------- mysql-test/t/percona_heap_var.test | 123 ++++++++++++++++------ storage/heap/ha_heap.cc | 7 -- 3 files changed, 204 insertions(+), 78 deletions(-) diff --git a/mysql-test/r/percona_heap_var.result b/mysql-test/r/percona_heap_var.result index 88a3864815d7..8f07a2d5eaa3 100644 --- a/mysql-test/r/percona_heap_var.result +++ b/mysql-test/r/percona_heap_var.result @@ -1,11 +1,11 @@ -drop table if exists t1; +DROP TABLE IF EXISTS t1; set @@session.max_heap_table_size=16*1024*1024; -create table t1 (a int not null, b varchar(400), c int, primary key (a), key (c)) engine=heap comment="testing heaps" key_block_size=128; +CREATE TABLE t1 (a INT NOT NULL, b VARCHAR(400), c INT, PRIMARY KEY (a), KEY (c)) ENGINE=HEAP COMMENT="testing heaps" KEY_BLOCK_SIZE=128; ERROR 42000: Incorrect usage/placement of 'key_block_size' -create table t1 (a int not null, b int, c varchar(400), primary key (a), key (b)) engine=heap comment="testing heaps" key_block_size=4; +CREATE TABLE t1 (a INT NOT NULL, b INT, c VARCHAR(400), PRIMARY KEY (a), KEY (b)) ENGINE=HEAP COMMENT="testing heaps" KEY_BLOCK_SIZE=4; ERROR 42000: Incorrect usage/placement of 'key_block_size' -create table t1 (a int not null, b int, c varchar(400), d varchar(400), primary key (a), key (b)) engine=heap comment="testing heaps" key_block_size=24; -show table status like "t1"; +CREATE TABLE t1 (a INT NOT NULL, b INT, c VARCHAR(400), d VARCHAR(400), PRIMARY KEY (a), KEY (b)) ENGINE=HEAP COMMENT="testing heaps" KEY_BLOCK_SIZE=24; +SHOW TABLE STATUS LIKE "t1"; Name t1 Engine MEMORY Version 10 @@ -24,45 +24,45 @@ Collation latin1_swedish_ci Checksum NULL Create_options KEY_BLOCK_SIZE=24 Comment testing heaps -insert into t1 values (1,1,'012',NULL), (2,2,'0123456789',NULL), (3,3,'012345678901234567890123456789',NULL), (4,4,NULL,'0123456789012345678901234567890123456789012345678901234567890123456789'); -select * from t1; +INSERT INTO t1 VALUES (1,1,'012',NULL), (2,2,'0123456789',NULL), (3,3,'012345678901234567890123456789',NULL), (4,4,NULL,'0123456789012345678901234567890123456789012345678901234567890123456789'); +SELECT * FROM t1; a b c d 1 1 012 NULL 2 2 0123456789 NULL 3 3 012345678901234567890123456789 NULL 4 4 NULL 0123456789012345678901234567890123456789012345678901234567890123456789 -delete from t1 where a = 3; -select * from t1; +DELETE FROM t1 WHERE a = 3; +SELECT * FROM t1; a b c d 1 1 012 NULL 2 2 0123456789 NULL 4 4 NULL 0123456789012345678901234567890123456789012345678901234567890123456789 -insert into t1 values (5,5,NULL,'0123'), (6,6,NULL,'0123'); -select * from t1; +INSERT INTO t1 VALUES (5,5,NULL,'0123'), (6,6,NULL,'0123'); +SELECT * FROM t1; a b c d 1 1 012 NULL 2 2 0123456789 NULL 6 6 NULL 0123 5 5 NULL 0123 4 4 NULL 0123456789012345678901234567890123456789012345678901234567890123456789 -update t1 set c = '012345678901234567890123456789' where a = 2; -select * from t1; +UPDATE t1 SET c = '012345678901234567890123456789' WHERE a = 2; +SELECT * FROM t1; a b c d 1 1 012 NULL 2 2 012345678901234567890123456789 NULL 6 6 NULL 0123 5 5 NULL 0123 4 4 NULL 0123456789012345678901234567890123456789012345678901234567890123456789 -update t1 set c = '0123456789' where a = 2; -select * from t1; +UPDATE t1 SET c = '0123456789' WHERE a = 2; +SELECT * FROM t1; a b c d 1 1 012 NULL 2 2 0123456789 NULL 6 6 NULL 0123 5 5 NULL 0123 4 4 NULL 0123456789012345678901234567890123456789012345678901234567890123456789 -insert into t1 values (7,7,'0123',NULL), (8,8,'0123',NULL); -select * from t1; +INSERT INTO t1 VALUES (7,7,'0123',NULL), (8,8,'0123',NULL); +SELECT * FROM t1; a b c d 1 1 012 NULL 2 2 0123456789 NULL @@ -71,7 +71,7 @@ a b c d 4 4 NULL 0123456789012345678901234567890123456789012345678901234567890123456789 7 7 0123 NULL 8 8 0123 NULL -show table status like "t1"; +SHOW TABLE STATUS LIKE "t1"; Name t1 Engine MEMORY Version 10 @@ -90,8 +90,8 @@ Collation latin1_swedish_ci Checksum NULL Create_options KEY_BLOCK_SIZE=24 Comment testing heaps -alter table t1 key_block_size = 0; -show table status like "t1"; +ALTER TABLE t1 KEY_BLOCK_SIZE = 0; +SHOW TABLE STATUS LIKE "t1"; Name t1 Engine MEMORY Version 10 @@ -110,8 +110,8 @@ Collation latin1_swedish_ci Checksum NULL Create_options Comment testing heaps -alter table t1 row_format = dynamic; -show table status like "t1"; +ALTER TABLE t1 ROW_FORMAT = DYNAMIC; +SHOW TABLE STATUS LIKE "t1"; Name t1 Engine MEMORY Version 10 @@ -128,10 +128,10 @@ Update_time X Check_time X Collation latin1_swedish_ci Checksum NULL -Create_options row_format=DYNAMIC KEY_BLOCK_SIZE=X +Create_options row_format=DYNAMIC Comment testing heaps -alter table t1 key_block_size = 128, max_rows = 10001; -show table status like "t1"; +ALTER TABLE t1 KEY_BLOCK_SIZE = 128, MAX_ROWS = 10001; +SHOW TABLE STATUS LIKE "t1"; Name t1 Engine MEMORY Version 10 @@ -150,7 +150,7 @@ Collation latin1_swedish_ci Checksum NULL Create_options max_rows=10001 row_format=DYNAMIC KEY_BLOCK_SIZE=128 Comment testing heaps -select * from t1; +SELECT * FROM t1; a b c d 1 1 012 NULL 2 2 0123456789 NULL @@ -159,16 +159,16 @@ a b c d 4 4 NULL 0123456789012345678901234567890123456789012345678901234567890123456789 7 7 0123 NULL 8 8 0123 NULL -delete from t1; -select * from t1; +DELETE FROM t1; +SELECT * FROM t1; a b c d call mtr.add_suppression("The table 't1' is full"); -select count(*) from t1; -count(*) +SELECT COUNT(*) FROM t1; +COUNT(*) 10001 -insert into t1 values (100000,100000,NULL,'0123'), (100000,100000,NULL,'0123'); +INSERT INTO t1 VALUES (100000,100000,NULL,'0123'), (100000,100000,NULL,'0123'); ERROR HY000: The table 't1' is full -show table status like "t1"; +SHOW TABLE STATUS LIKE "t1"; Name t1 Engine MEMORY Version 10 @@ -187,11 +187,11 @@ Collation latin1_swedish_ci Checksum NULL Create_options max_rows=10001 row_format=DYNAMIC KEY_BLOCK_SIZE=128 Comment testing heaps -select count(*) from t1; -count(*) +SELECT COUNT(*) FROM t1; +COUNT(*) 10001 -set @@session.max_heap_table_size=default; -drop table t1; +SET @@session.max_heap_table_size=default; +DROP TABLE t1; # # Bug 1731483: MEMORY storage engine incorrectly allows BLOB columns before indexed columns # @@ -255,3 +255,83 @@ ERROR 42000: The used table type doesn't support BLOB/TEXT columns ALTER TABLE t1 ADD INDEX idx (c, a); ERROR 42000: The used table type doesn't support BLOB/TEXT columns DROP TABLE t1; +# +# PS-3940: Engine can be changed to innodb and back +# +CREATE TABLE `t1` ( +`id` INT(11) NOT NULL AUTO_INCREMENT, +`json_column` TEXT, +PRIMARY KEY (`id`) +) ENGINE=MEMORY; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `json_column` text, + PRIMARY KEY (`id`) +) ENGINE=MEMORY DEFAULT CHARSET=latin1 +ALTER TABLE t1 ENGINE=INNODB; +ALTER TABLE t1 ENGINE=MEMORY; +# +# PS-3943: Adding additional columns won't change the key_block size +# +ALTER TABLE t1 MODIFY json_column BLOB; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `json_column` blob, + PRIMARY KEY (`id`) +) ENGINE=MEMORY DEFAULT CHARSET=latin1 +ALTER TABLE t1 MODIFY json_column TEXT; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `json_column` text, + PRIMARY KEY (`id`) +) ENGINE=MEMORY DEFAULT CHARSET=latin1 +ALTER TABLE t1 MODIFY json_column BLOB; +ALTER TABLE t1 MODIFY json_column TEXT; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `json_column` text, + PRIMARY KEY (`id`) +) ENGINE=MEMORY DEFAULT CHARSET=latin1 +DROP TABLE t1; +# +# PS-3943: Explicit key_block_size is kept and doesn't change +# +CREATE TABLE `t1` ( +`id` INT(11) NOT NULL AUTO_INCREMENT, +`json_column` TEXT, +PRIMARY KEY (`id`) +) ENGINE=MEMORY KEY_BLOCK_SIZE=200; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `json_column` text, + PRIMARY KEY (`id`) +) ENGINE=MEMORY DEFAULT CHARSET=latin1 KEY_BLOCK_SIZE=200 +ALTER TABLE t1 ENGINE=INNODB KEY_BLOCK_SIZE=0; +ALTER TABLE t1 ENGINE=MEMORY; +ALTER TABLE t1 MODIFY json_column BLOB; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `json_column` blob, + PRIMARY KEY (`id`) +) ENGINE=MEMORY DEFAULT CHARSET=latin1 +ALTER TABLE t1 MODIFY json_column TEXT; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `json_column` text, + PRIMARY KEY (`id`) +) ENGINE=MEMORY DEFAULT CHARSET=latin1 +DROP TABLE t1; diff --git a/mysql-test/t/percona_heap_var.test b/mysql-test/t/percona_heap_var.test index 06c62632eead..b31bdec31a10 100644 --- a/mysql-test/t/percona_heap_var.test +++ b/mysql-test/t/percona_heap_var.test @@ -4,57 +4,56 @@ --source include/have_innodb.inc --disable_warnings -drop table if exists t1; +DROP TABLE IF EXISTS t1; --enable_warnings set @@session.max_heap_table_size=16*1024*1024; --error 1234 -create table t1 (a int not null, b varchar(400), c int, primary key (a), key (c)) engine=heap comment="testing heaps" key_block_size=128; +CREATE TABLE t1 (a INT NOT NULL, b VARCHAR(400), c INT, PRIMARY KEY (a), KEY (c)) ENGINE=HEAP COMMENT="testing heaps" KEY_BLOCK_SIZE=128; --error 1234 -create table t1 (a int not null, b int, c varchar(400), primary key (a), key (b)) engine=heap comment="testing heaps" key_block_size=4; +CREATE TABLE t1 (a INT NOT NULL, b INT, c VARCHAR(400), PRIMARY KEY (a), KEY (b)) ENGINE=HEAP COMMENT="testing heaps" KEY_BLOCK_SIZE=4; -create table t1 (a int not null, b int, c varchar(400), d varchar(400), primary key (a), key (b)) engine=heap comment="testing heaps" key_block_size=24; +CREATE TABLE t1 (a INT NOT NULL, b INT, c VARCHAR(400), d VARCHAR(400), PRIMARY KEY (a), KEY (b)) ENGINE=HEAP COMMENT="testing heaps" KEY_BLOCK_SIZE=24; --replace_column 6 X 7 X 8 X 9 X 10 X 11 X 12 X 13 X 14 X ---query_vertical show table status like "t1" +--query_vertical SHOW TABLE STATUS LIKE "t1" -insert into t1 values (1,1,'012',NULL), (2,2,'0123456789',NULL), (3,3,'012345678901234567890123456789',NULL), (4,4,NULL,'0123456789012345678901234567890123456789012345678901234567890123456789'); -select * from t1; +INSERT INTO t1 VALUES (1,1,'012',NULL), (2,2,'0123456789',NULL), (3,3,'012345678901234567890123456789',NULL), (4,4,NULL,'0123456789012345678901234567890123456789012345678901234567890123456789'); +SELECT * FROM t1; -delete from t1 where a = 3; -select * from t1; +DELETE FROM t1 WHERE a = 3; +SELECT * FROM t1; -insert into t1 values (5,5,NULL,'0123'), (6,6,NULL,'0123'); -select * from t1; +INSERT INTO t1 VALUES (5,5,NULL,'0123'), (6,6,NULL,'0123'); +SELECT * FROM t1; -update t1 set c = '012345678901234567890123456789' where a = 2; -select * from t1; +UPDATE t1 SET c = '012345678901234567890123456789' WHERE a = 2; +SELECT * FROM t1; -update t1 set c = '0123456789' where a = 2; -select * from t1; +UPDATE t1 SET c = '0123456789' WHERE a = 2; +SELECT * FROM t1; -insert into t1 values (7,7,'0123',NULL), (8,8,'0123',NULL); -select * from t1; +INSERT INTO t1 VALUES (7,7,'0123',NULL), (8,8,'0123',NULL); +SELECT * FROM t1; --replace_column 6 X 7 X 8 X 9 X 10 X 11 X 12 X 13 X 14 X ---query_vertical show table status like "t1" -alter table t1 key_block_size = 0; +--query_vertical SHOW TABLE STATUS LIKE "t1" +ALTER TABLE t1 KEY_BLOCK_SIZE = 0; --replace_column 6 X 7 X 8 X 9 X 10 X 11 X 12 X 13 X 14 X ---query_vertical show table status like "t1" -alter table t1 row_format = dynamic; +--query_vertical SHOW TABLE STATUS LIKE "t1" +ALTER TABLE t1 ROW_FORMAT = DYNAMIC; --replace_column 6 X 7 X 8 X 9 X 10 X 11 X 12 X 13 X 14 X ---replace_regex /KEY_BLOCK_SIZE=[[:digit:]]+/KEY_BLOCK_SIZE=X/ ---query_vertical show table status like "t1" -alter table t1 key_block_size = 128, max_rows = 10001; +--query_vertical SHOW TABLE STATUS LIKE "t1" +ALTER TABLE t1 KEY_BLOCK_SIZE = 128, MAX_ROWS = 10001; --replace_column 6 X 7 X 8 X 9 X 10 X 11 X 12 X 13 X 14 X ---query_vertical show table status like "t1" +--query_vertical SHOW TABLE STATUS LIKE "t1" -select * from t1; +SELECT * FROM t1; -delete from t1; -select * from t1; +DELETE FROM t1; +SELECT * FROM t1; let $1=10001; @@ -65,25 +64,25 @@ disable_query_log; while ($1) { - eval insert into t1 values ($1,$1,$1,$1); + eval INSERT INTO t1 VALUES ($1,$1,$1,$1); dec $1; } enable_query_log; -select count(*) from t1; +SELECT COUNT(*) FROM t1; --error 1114 -insert into t1 values (100000,100000,NULL,'0123'), (100000,100000,NULL,'0123'); +INSERT INTO t1 VALUES (100000,100000,NULL,'0123'), (100000,100000,NULL,'0123'); --replace_column 6 X 7 X 8 X 9 X 10 X 11 X 12 X 13 X 14 X ---query_vertical show table status like "t1" -select count(*) from t1; +--query_vertical SHOW TABLE STATUS LIKE "t1" +SELECT COUNT(*) FROM t1; -set @@session.max_heap_table_size=default; +SET @@session.max_heap_table_size=default; -drop table t1; +DROP TABLE t1; --echo # --echo # Bug 1731483: MEMORY storage engine incorrectly allows BLOB columns before indexed columns @@ -165,3 +164,57 @@ ALTER TABLE t1 ADD PRIMARY KEY (a, c); --error ER_TABLE_CANT_HANDLE_BLOB ALTER TABLE t1 ADD INDEX idx (c, a); DROP TABLE t1; + +--echo # +--echo # PS-3940: Engine can be changed to innodb and back +--echo # + +CREATE TABLE `t1` ( + `id` INT(11) NOT NULL AUTO_INCREMENT, + `json_column` TEXT, + PRIMARY KEY (`id`) +) ENGINE=MEMORY; +# no key_block_size displayed even before the bugfix +SHOW CREATE TABLE t1; + +ALTER TABLE t1 ENGINE=INNODB; +ALTER TABLE t1 ENGINE=MEMORY; + +--echo # +--echo # PS-3943: Adding additional columns won't change the key_block size +--echo # + +ALTER TABLE t1 MODIFY json_column BLOB; +# a key_block_size of 256 appeared without the bugfix +SHOW CREATE TABLE t1; +ALTER TABLE t1 MODIFY json_column TEXT; +# a key_block_size of 256+16 appeared without the bugfix +SHOW CREATE TABLE t1; + +ALTER TABLE t1 MODIFY json_column BLOB; +ALTER TABLE t1 MODIFY json_column TEXT; +# a key_block_size of 256+3*16 appeared without the bugfix +SHOW CREATE TABLE t1; + +DROP TABLE t1; + +--echo # +--echo # PS-3943: Explicit key_block_size is kept and doesn't change +--echo # +CREATE TABLE `t1` ( + `id` INT(11) NOT NULL AUTO_INCREMENT, + `json_column` TEXT, + PRIMARY KEY (`id`) +) ENGINE=MEMORY KEY_BLOCK_SIZE=200; +SHOW CREATE TABLE t1; +ALTER TABLE t1 ENGINE=INNODB KEY_BLOCK_SIZE=0; +ALTER TABLE t1 ENGINE=MEMORY; + +ALTER TABLE t1 MODIFY json_column BLOB; +# a key_block_size changed to 200+16 without the bugfix +SHOW CREATE TABLE t1; +ALTER TABLE t1 MODIFY json_column TEXT; +# a key_block_size changed to 200+2*16 without the bugfix +SHOW CREATE TABLE t1; + +DROP TABLE t1; diff --git a/storage/heap/ha_heap.cc b/storage/heap/ha_heap.cc index 0c46b7036bc6..fd22088ff85c 100644 --- a/storage/heap/ha_heap.cc +++ b/storage/heap/ha_heap.cc @@ -916,13 +916,6 @@ void ha_heap::update_create_info(HA_CREATE_INFO *create_info) table->file->info(HA_STATUS_AUTO); if (!(create_info->used_fields & HA_CREATE_USED_AUTO)) create_info->auto_increment_value= stats.auto_increment_value; - if (!(create_info->used_fields & HA_CREATE_USED_KEY_BLOCK_SIZE)) - { - if (file->s->recordspace.is_variable_size) - create_info->key_block_size= file->s->recordspace.chunk_length; - else - create_info->key_block_size= 0; - } } void ha_heap::get_auto_increment(ulonglong offset, ulonglong increment, From b8a0bdc3965ceff34db568ef8f36e696fa301a50 Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Wed, 11 Apr 2018 10:35:26 +0200 Subject: [PATCH 0769/1221] PS-3936, PS-3940, PS-3943: key_block_size shouldn't be set automatically for the heap engine. Key_block_size was set automatically by the improved heap storage engine, which caused: * warnings (5.5/5.6) or errors (5.7) when changing the engine type to innodb * constantly growing key_block_size during alter operations With this change, key_block_size won't be set unless the user specifies a custom value. * switching to innodb will only result in an error if the user manually specified a key_block_size before, which is expected. * key_block_size was growing because max_chuck_size is set based on the specified key_block_size, and then key_block_size was set to max_chunk_size plus an overhead value, increasing it every time. by leaving out the second step, it remains stable. Note that key_block_size was set so the chunk size is visible even when calculated automatically. As it is always set to 256 unless the user specifies something else, this didn't provide too much information. (cherry picked from commit 3c8964316ad5c931eaabcd9eb2a859c98717791e) (cherry picked from commit c4794f02ccc93a278a1e0bd4a963179fb71f3956) --- mysql-test/r/percona_heap_var.result | 152 ++++++++++++++++++++------- mysql-test/t/percona_heap_var.test | 123 ++++++++++++++++------ storage/heap/ha_heap.cc | 7 -- 3 files changed, 204 insertions(+), 78 deletions(-) diff --git a/mysql-test/r/percona_heap_var.result b/mysql-test/r/percona_heap_var.result index 88a3864815d7..8f07a2d5eaa3 100644 --- a/mysql-test/r/percona_heap_var.result +++ b/mysql-test/r/percona_heap_var.result @@ -1,11 +1,11 @@ -drop table if exists t1; +DROP TABLE IF EXISTS t1; set @@session.max_heap_table_size=16*1024*1024; -create table t1 (a int not null, b varchar(400), c int, primary key (a), key (c)) engine=heap comment="testing heaps" key_block_size=128; +CREATE TABLE t1 (a INT NOT NULL, b VARCHAR(400), c INT, PRIMARY KEY (a), KEY (c)) ENGINE=HEAP COMMENT="testing heaps" KEY_BLOCK_SIZE=128; ERROR 42000: Incorrect usage/placement of 'key_block_size' -create table t1 (a int not null, b int, c varchar(400), primary key (a), key (b)) engine=heap comment="testing heaps" key_block_size=4; +CREATE TABLE t1 (a INT NOT NULL, b INT, c VARCHAR(400), PRIMARY KEY (a), KEY (b)) ENGINE=HEAP COMMENT="testing heaps" KEY_BLOCK_SIZE=4; ERROR 42000: Incorrect usage/placement of 'key_block_size' -create table t1 (a int not null, b int, c varchar(400), d varchar(400), primary key (a), key (b)) engine=heap comment="testing heaps" key_block_size=24; -show table status like "t1"; +CREATE TABLE t1 (a INT NOT NULL, b INT, c VARCHAR(400), d VARCHAR(400), PRIMARY KEY (a), KEY (b)) ENGINE=HEAP COMMENT="testing heaps" KEY_BLOCK_SIZE=24; +SHOW TABLE STATUS LIKE "t1"; Name t1 Engine MEMORY Version 10 @@ -24,45 +24,45 @@ Collation latin1_swedish_ci Checksum NULL Create_options KEY_BLOCK_SIZE=24 Comment testing heaps -insert into t1 values (1,1,'012',NULL), (2,2,'0123456789',NULL), (3,3,'012345678901234567890123456789',NULL), (4,4,NULL,'0123456789012345678901234567890123456789012345678901234567890123456789'); -select * from t1; +INSERT INTO t1 VALUES (1,1,'012',NULL), (2,2,'0123456789',NULL), (3,3,'012345678901234567890123456789',NULL), (4,4,NULL,'0123456789012345678901234567890123456789012345678901234567890123456789'); +SELECT * FROM t1; a b c d 1 1 012 NULL 2 2 0123456789 NULL 3 3 012345678901234567890123456789 NULL 4 4 NULL 0123456789012345678901234567890123456789012345678901234567890123456789 -delete from t1 where a = 3; -select * from t1; +DELETE FROM t1 WHERE a = 3; +SELECT * FROM t1; a b c d 1 1 012 NULL 2 2 0123456789 NULL 4 4 NULL 0123456789012345678901234567890123456789012345678901234567890123456789 -insert into t1 values (5,5,NULL,'0123'), (6,6,NULL,'0123'); -select * from t1; +INSERT INTO t1 VALUES (5,5,NULL,'0123'), (6,6,NULL,'0123'); +SELECT * FROM t1; a b c d 1 1 012 NULL 2 2 0123456789 NULL 6 6 NULL 0123 5 5 NULL 0123 4 4 NULL 0123456789012345678901234567890123456789012345678901234567890123456789 -update t1 set c = '012345678901234567890123456789' where a = 2; -select * from t1; +UPDATE t1 SET c = '012345678901234567890123456789' WHERE a = 2; +SELECT * FROM t1; a b c d 1 1 012 NULL 2 2 012345678901234567890123456789 NULL 6 6 NULL 0123 5 5 NULL 0123 4 4 NULL 0123456789012345678901234567890123456789012345678901234567890123456789 -update t1 set c = '0123456789' where a = 2; -select * from t1; +UPDATE t1 SET c = '0123456789' WHERE a = 2; +SELECT * FROM t1; a b c d 1 1 012 NULL 2 2 0123456789 NULL 6 6 NULL 0123 5 5 NULL 0123 4 4 NULL 0123456789012345678901234567890123456789012345678901234567890123456789 -insert into t1 values (7,7,'0123',NULL), (8,8,'0123',NULL); -select * from t1; +INSERT INTO t1 VALUES (7,7,'0123',NULL), (8,8,'0123',NULL); +SELECT * FROM t1; a b c d 1 1 012 NULL 2 2 0123456789 NULL @@ -71,7 +71,7 @@ a b c d 4 4 NULL 0123456789012345678901234567890123456789012345678901234567890123456789 7 7 0123 NULL 8 8 0123 NULL -show table status like "t1"; +SHOW TABLE STATUS LIKE "t1"; Name t1 Engine MEMORY Version 10 @@ -90,8 +90,8 @@ Collation latin1_swedish_ci Checksum NULL Create_options KEY_BLOCK_SIZE=24 Comment testing heaps -alter table t1 key_block_size = 0; -show table status like "t1"; +ALTER TABLE t1 KEY_BLOCK_SIZE = 0; +SHOW TABLE STATUS LIKE "t1"; Name t1 Engine MEMORY Version 10 @@ -110,8 +110,8 @@ Collation latin1_swedish_ci Checksum NULL Create_options Comment testing heaps -alter table t1 row_format = dynamic; -show table status like "t1"; +ALTER TABLE t1 ROW_FORMAT = DYNAMIC; +SHOW TABLE STATUS LIKE "t1"; Name t1 Engine MEMORY Version 10 @@ -128,10 +128,10 @@ Update_time X Check_time X Collation latin1_swedish_ci Checksum NULL -Create_options row_format=DYNAMIC KEY_BLOCK_SIZE=X +Create_options row_format=DYNAMIC Comment testing heaps -alter table t1 key_block_size = 128, max_rows = 10001; -show table status like "t1"; +ALTER TABLE t1 KEY_BLOCK_SIZE = 128, MAX_ROWS = 10001; +SHOW TABLE STATUS LIKE "t1"; Name t1 Engine MEMORY Version 10 @@ -150,7 +150,7 @@ Collation latin1_swedish_ci Checksum NULL Create_options max_rows=10001 row_format=DYNAMIC KEY_BLOCK_SIZE=128 Comment testing heaps -select * from t1; +SELECT * FROM t1; a b c d 1 1 012 NULL 2 2 0123456789 NULL @@ -159,16 +159,16 @@ a b c d 4 4 NULL 0123456789012345678901234567890123456789012345678901234567890123456789 7 7 0123 NULL 8 8 0123 NULL -delete from t1; -select * from t1; +DELETE FROM t1; +SELECT * FROM t1; a b c d call mtr.add_suppression("The table 't1' is full"); -select count(*) from t1; -count(*) +SELECT COUNT(*) FROM t1; +COUNT(*) 10001 -insert into t1 values (100000,100000,NULL,'0123'), (100000,100000,NULL,'0123'); +INSERT INTO t1 VALUES (100000,100000,NULL,'0123'), (100000,100000,NULL,'0123'); ERROR HY000: The table 't1' is full -show table status like "t1"; +SHOW TABLE STATUS LIKE "t1"; Name t1 Engine MEMORY Version 10 @@ -187,11 +187,11 @@ Collation latin1_swedish_ci Checksum NULL Create_options max_rows=10001 row_format=DYNAMIC KEY_BLOCK_SIZE=128 Comment testing heaps -select count(*) from t1; -count(*) +SELECT COUNT(*) FROM t1; +COUNT(*) 10001 -set @@session.max_heap_table_size=default; -drop table t1; +SET @@session.max_heap_table_size=default; +DROP TABLE t1; # # Bug 1731483: MEMORY storage engine incorrectly allows BLOB columns before indexed columns # @@ -255,3 +255,83 @@ ERROR 42000: The used table type doesn't support BLOB/TEXT columns ALTER TABLE t1 ADD INDEX idx (c, a); ERROR 42000: The used table type doesn't support BLOB/TEXT columns DROP TABLE t1; +# +# PS-3940: Engine can be changed to innodb and back +# +CREATE TABLE `t1` ( +`id` INT(11) NOT NULL AUTO_INCREMENT, +`json_column` TEXT, +PRIMARY KEY (`id`) +) ENGINE=MEMORY; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `json_column` text, + PRIMARY KEY (`id`) +) ENGINE=MEMORY DEFAULT CHARSET=latin1 +ALTER TABLE t1 ENGINE=INNODB; +ALTER TABLE t1 ENGINE=MEMORY; +# +# PS-3943: Adding additional columns won't change the key_block size +# +ALTER TABLE t1 MODIFY json_column BLOB; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `json_column` blob, + PRIMARY KEY (`id`) +) ENGINE=MEMORY DEFAULT CHARSET=latin1 +ALTER TABLE t1 MODIFY json_column TEXT; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `json_column` text, + PRIMARY KEY (`id`) +) ENGINE=MEMORY DEFAULT CHARSET=latin1 +ALTER TABLE t1 MODIFY json_column BLOB; +ALTER TABLE t1 MODIFY json_column TEXT; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `json_column` text, + PRIMARY KEY (`id`) +) ENGINE=MEMORY DEFAULT CHARSET=latin1 +DROP TABLE t1; +# +# PS-3943: Explicit key_block_size is kept and doesn't change +# +CREATE TABLE `t1` ( +`id` INT(11) NOT NULL AUTO_INCREMENT, +`json_column` TEXT, +PRIMARY KEY (`id`) +) ENGINE=MEMORY KEY_BLOCK_SIZE=200; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `json_column` text, + PRIMARY KEY (`id`) +) ENGINE=MEMORY DEFAULT CHARSET=latin1 KEY_BLOCK_SIZE=200 +ALTER TABLE t1 ENGINE=INNODB KEY_BLOCK_SIZE=0; +ALTER TABLE t1 ENGINE=MEMORY; +ALTER TABLE t1 MODIFY json_column BLOB; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `json_column` blob, + PRIMARY KEY (`id`) +) ENGINE=MEMORY DEFAULT CHARSET=latin1 +ALTER TABLE t1 MODIFY json_column TEXT; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `json_column` text, + PRIMARY KEY (`id`) +) ENGINE=MEMORY DEFAULT CHARSET=latin1 +DROP TABLE t1; diff --git a/mysql-test/t/percona_heap_var.test b/mysql-test/t/percona_heap_var.test index 06c62632eead..b31bdec31a10 100644 --- a/mysql-test/t/percona_heap_var.test +++ b/mysql-test/t/percona_heap_var.test @@ -4,57 +4,56 @@ --source include/have_innodb.inc --disable_warnings -drop table if exists t1; +DROP TABLE IF EXISTS t1; --enable_warnings set @@session.max_heap_table_size=16*1024*1024; --error 1234 -create table t1 (a int not null, b varchar(400), c int, primary key (a), key (c)) engine=heap comment="testing heaps" key_block_size=128; +CREATE TABLE t1 (a INT NOT NULL, b VARCHAR(400), c INT, PRIMARY KEY (a), KEY (c)) ENGINE=HEAP COMMENT="testing heaps" KEY_BLOCK_SIZE=128; --error 1234 -create table t1 (a int not null, b int, c varchar(400), primary key (a), key (b)) engine=heap comment="testing heaps" key_block_size=4; +CREATE TABLE t1 (a INT NOT NULL, b INT, c VARCHAR(400), PRIMARY KEY (a), KEY (b)) ENGINE=HEAP COMMENT="testing heaps" KEY_BLOCK_SIZE=4; -create table t1 (a int not null, b int, c varchar(400), d varchar(400), primary key (a), key (b)) engine=heap comment="testing heaps" key_block_size=24; +CREATE TABLE t1 (a INT NOT NULL, b INT, c VARCHAR(400), d VARCHAR(400), PRIMARY KEY (a), KEY (b)) ENGINE=HEAP COMMENT="testing heaps" KEY_BLOCK_SIZE=24; --replace_column 6 X 7 X 8 X 9 X 10 X 11 X 12 X 13 X 14 X ---query_vertical show table status like "t1" +--query_vertical SHOW TABLE STATUS LIKE "t1" -insert into t1 values (1,1,'012',NULL), (2,2,'0123456789',NULL), (3,3,'012345678901234567890123456789',NULL), (4,4,NULL,'0123456789012345678901234567890123456789012345678901234567890123456789'); -select * from t1; +INSERT INTO t1 VALUES (1,1,'012',NULL), (2,2,'0123456789',NULL), (3,3,'012345678901234567890123456789',NULL), (4,4,NULL,'0123456789012345678901234567890123456789012345678901234567890123456789'); +SELECT * FROM t1; -delete from t1 where a = 3; -select * from t1; +DELETE FROM t1 WHERE a = 3; +SELECT * FROM t1; -insert into t1 values (5,5,NULL,'0123'), (6,6,NULL,'0123'); -select * from t1; +INSERT INTO t1 VALUES (5,5,NULL,'0123'), (6,6,NULL,'0123'); +SELECT * FROM t1; -update t1 set c = '012345678901234567890123456789' where a = 2; -select * from t1; +UPDATE t1 SET c = '012345678901234567890123456789' WHERE a = 2; +SELECT * FROM t1; -update t1 set c = '0123456789' where a = 2; -select * from t1; +UPDATE t1 SET c = '0123456789' WHERE a = 2; +SELECT * FROM t1; -insert into t1 values (7,7,'0123',NULL), (8,8,'0123',NULL); -select * from t1; +INSERT INTO t1 VALUES (7,7,'0123',NULL), (8,8,'0123',NULL); +SELECT * FROM t1; --replace_column 6 X 7 X 8 X 9 X 10 X 11 X 12 X 13 X 14 X ---query_vertical show table status like "t1" -alter table t1 key_block_size = 0; +--query_vertical SHOW TABLE STATUS LIKE "t1" +ALTER TABLE t1 KEY_BLOCK_SIZE = 0; --replace_column 6 X 7 X 8 X 9 X 10 X 11 X 12 X 13 X 14 X ---query_vertical show table status like "t1" -alter table t1 row_format = dynamic; +--query_vertical SHOW TABLE STATUS LIKE "t1" +ALTER TABLE t1 ROW_FORMAT = DYNAMIC; --replace_column 6 X 7 X 8 X 9 X 10 X 11 X 12 X 13 X 14 X ---replace_regex /KEY_BLOCK_SIZE=[[:digit:]]+/KEY_BLOCK_SIZE=X/ ---query_vertical show table status like "t1" -alter table t1 key_block_size = 128, max_rows = 10001; +--query_vertical SHOW TABLE STATUS LIKE "t1" +ALTER TABLE t1 KEY_BLOCK_SIZE = 128, MAX_ROWS = 10001; --replace_column 6 X 7 X 8 X 9 X 10 X 11 X 12 X 13 X 14 X ---query_vertical show table status like "t1" +--query_vertical SHOW TABLE STATUS LIKE "t1" -select * from t1; +SELECT * FROM t1; -delete from t1; -select * from t1; +DELETE FROM t1; +SELECT * FROM t1; let $1=10001; @@ -65,25 +64,25 @@ disable_query_log; while ($1) { - eval insert into t1 values ($1,$1,$1,$1); + eval INSERT INTO t1 VALUES ($1,$1,$1,$1); dec $1; } enable_query_log; -select count(*) from t1; +SELECT COUNT(*) FROM t1; --error 1114 -insert into t1 values (100000,100000,NULL,'0123'), (100000,100000,NULL,'0123'); +INSERT INTO t1 VALUES (100000,100000,NULL,'0123'), (100000,100000,NULL,'0123'); --replace_column 6 X 7 X 8 X 9 X 10 X 11 X 12 X 13 X 14 X ---query_vertical show table status like "t1" -select count(*) from t1; +--query_vertical SHOW TABLE STATUS LIKE "t1" +SELECT COUNT(*) FROM t1; -set @@session.max_heap_table_size=default; +SET @@session.max_heap_table_size=default; -drop table t1; +DROP TABLE t1; --echo # --echo # Bug 1731483: MEMORY storage engine incorrectly allows BLOB columns before indexed columns @@ -165,3 +164,57 @@ ALTER TABLE t1 ADD PRIMARY KEY (a, c); --error ER_TABLE_CANT_HANDLE_BLOB ALTER TABLE t1 ADD INDEX idx (c, a); DROP TABLE t1; + +--echo # +--echo # PS-3940: Engine can be changed to innodb and back +--echo # + +CREATE TABLE `t1` ( + `id` INT(11) NOT NULL AUTO_INCREMENT, + `json_column` TEXT, + PRIMARY KEY (`id`) +) ENGINE=MEMORY; +# no key_block_size displayed even before the bugfix +SHOW CREATE TABLE t1; + +ALTER TABLE t1 ENGINE=INNODB; +ALTER TABLE t1 ENGINE=MEMORY; + +--echo # +--echo # PS-3943: Adding additional columns won't change the key_block size +--echo # + +ALTER TABLE t1 MODIFY json_column BLOB; +# a key_block_size of 256 appeared without the bugfix +SHOW CREATE TABLE t1; +ALTER TABLE t1 MODIFY json_column TEXT; +# a key_block_size of 256+16 appeared without the bugfix +SHOW CREATE TABLE t1; + +ALTER TABLE t1 MODIFY json_column BLOB; +ALTER TABLE t1 MODIFY json_column TEXT; +# a key_block_size of 256+3*16 appeared without the bugfix +SHOW CREATE TABLE t1; + +DROP TABLE t1; + +--echo # +--echo # PS-3943: Explicit key_block_size is kept and doesn't change +--echo # +CREATE TABLE `t1` ( + `id` INT(11) NOT NULL AUTO_INCREMENT, + `json_column` TEXT, + PRIMARY KEY (`id`) +) ENGINE=MEMORY KEY_BLOCK_SIZE=200; +SHOW CREATE TABLE t1; +ALTER TABLE t1 ENGINE=INNODB KEY_BLOCK_SIZE=0; +ALTER TABLE t1 ENGINE=MEMORY; + +ALTER TABLE t1 MODIFY json_column BLOB; +# a key_block_size changed to 200+16 without the bugfix +SHOW CREATE TABLE t1; +ALTER TABLE t1 MODIFY json_column TEXT; +# a key_block_size changed to 200+2*16 without the bugfix +SHOW CREATE TABLE t1; + +DROP TABLE t1; diff --git a/storage/heap/ha_heap.cc b/storage/heap/ha_heap.cc index e983cc60f9b1..c65e82874853 100644 --- a/storage/heap/ha_heap.cc +++ b/storage/heap/ha_heap.cc @@ -927,13 +927,6 @@ void ha_heap::update_create_info(HA_CREATE_INFO *create_info) table->file->info(HA_STATUS_AUTO); if (!(create_info->used_fields & HA_CREATE_USED_AUTO)) create_info->auto_increment_value= stats.auto_increment_value; - if (!(create_info->used_fields & HA_CREATE_USED_KEY_BLOCK_SIZE)) - { - if (file->s->recordspace.is_variable_size) - create_info->key_block_size= file->s->recordspace.chunk_length; - else - create_info->key_block_size= 0; - } } void ha_heap::get_auto_increment(ulonglong offset, ulonglong increment, From 2e423906b246dd2a8b3c5b77d147b7f2db2bb92a Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Mon, 16 Apr 2018 13:10:10 +0200 Subject: [PATCH 0770/1221] PS-3955: Broken sync between innodb_kill_idle_transaction and kill_idle_transaction system variables Forward definition of WITH_INNOBASE_STORAGE_ENGINE from cmake to c/cc sources. --- config.h.cmake | 1 + 1 file changed, 1 insertion(+) diff --git a/config.h.cmake b/config.h.cmake index 89aaa27ad580..b4941acdf4ed 100644 --- a/config.h.cmake +++ b/config.h.cmake @@ -629,6 +629,7 @@ #cmakedefine WITH_CSV_STORAGE_ENGINE 1 #cmakedefine WITH_PARTITION_STORAGE_ENGINE 1 #cmakedefine WITH_PERFSCHEMA_STORAGE_ENGINE 1 +#cmakedefine WITH_INNOBASE_STORAGE_ENGINE 1 #cmakedefine WITH_NDBCLUSTER_STORAGE_ENGINE 1 #if (WITH_NDBCLUSTER_STORAGE_ENGINE) && !defined(EMBEDDED_LIBRARY) # define HAVE_NDB_BINLOG 1 From 646b5533940fae1a8c1ec95d1de1dda561418c5c Mon Sep 17 00:00:00 2001 From: Evgeniy Patlan Date: Mon, 16 Apr 2018 22:55:28 +0300 Subject: [PATCH 0771/1221] Update Version --- VERSION | 2 +- storage/innobase/include/univ.i | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/VERSION b/VERSION index de02fdcc63d3..916cff76768d 100644 --- a/VERSION +++ b/VERSION @@ -1,4 +1,4 @@ MYSQL_VERSION_MAJOR=5 MYSQL_VERSION_MINOR=7 MYSQL_VERSION_PATCH=21 -MYSQL_VERSION_EXTRA=-20 +MYSQL_VERSION_EXTRA=-21 diff --git a/storage/innobase/include/univ.i b/storage/innobase/include/univ.i index 017a219366b8..3b6330278e96 100644 --- a/storage/innobase/include/univ.i +++ b/storage/innobase/include/univ.i @@ -47,7 +47,7 @@ Created 1/20/1994 Heikki Tuuri #define INNODB_VERSION_BUGFIX MYSQL_VERSION_PATCH #ifndef PERCONA_INNODB_VERSION -#define PERCONA_INNODB_VERSION 20 +#define PERCONA_INNODB_VERSION 21 #endif /* The following is the InnoDB version as shown in From 71166bcb0c9c74a0d3a08bc9ea013f58d0f06bf5 Mon Sep 17 00:00:00 2001 From: Evgeniy Patlan Date: Mon, 16 Apr 2018 23:51:59 +0300 Subject: [PATCH 0772/1221] [BLD-1045] Fix patch --- build-ps/rpm/mysql-5.7-sharedlib-rename.patch | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/build-ps/rpm/mysql-5.7-sharedlib-rename.patch b/build-ps/rpm/mysql-5.7-sharedlib-rename.patch index 5d7fc01574c6..37327ba6cf0d 100644 --- a/build-ps/rpm/mysql-5.7-sharedlib-rename.patch +++ b/build-ps/rpm/mysql-5.7-sharedlib-rename.patch @@ -506,12 +506,12 @@ diff -rup old/rapid/unittest/gunit/xplugin/CMakeLists.txt new/rapid/unittest/gun ${PROTOBUF_LIBRARY} --- old/storage/tokudb/PerconaFT/tools/CMakeLists.txt +++ new/storage/tokudb/PerconaFT/tools/CMakeLists.txt -@@ -12,7 +12,7 @@ - (CMAKE_CXX_FLAGS_DEBUG MATCHES " -DENABLED_DEBUG_SYNC")) - target_link_libraries(${tool} sql binlog rpl master slave) - endif() -- target_link_libraries(${tool} perconaserverclient) -+ target_link_libraries(${tool} mysqlclient) +@@ -23,7 +23,7 @@ + if (MYSQL_BASE_VERSION VERSION_EQUAL "8.0") + target_link_libraries(${tool} mysqlclient) + else () +- target_link_libraries(${tool} perconaserverclient) ++ target_link_libraries(${tool} mysqlclient) + endif () + endif () endif () - - add_space_separated_property(TARGET ${tool} COMPILE_FLAGS -fvisibility=hidden) From dd736002d22e83e07a20493e0a852e9edae2290a Mon Sep 17 00:00:00 2001 From: Venkatesh Duggirala Date: Mon, 9 Apr 2018 10:58:38 +0530 Subject: [PATCH 0773/1221] Bug#27308751 FILTERED REPLICATION LEAVES GTID HOLES WITH CREATE DATABASE Problem: When CREATE/ALTER/DROP DATABASE statements are getting filtered out on slave because of the replication filters installed, server is not adding their GTID_EXECUTED to GTID_EXECUTED_SET. Analysis: When ever a statement is getting filtered out due the filter rule, server adds the gtid of the filtered transaction to GTID_EXECUTED_SET by executing an empty transaction on the slave. So that the same transaction will be replicated again in case of re connections and also GTID_EXECUTED_SET will not have any GAPS. But this is *not* happening in case of three statements that are mentioned in problem description (CREATE/ALTER/DROP DATABASE). Fix: Code has re factored to make sure that an empty transaction will be executed for these three statements (CREATE/ALTER/DROP DATABASE) also. --- .../extra/rpl_tests/rpl_db_stmts_ignored.inc | 51 +++++++ .../suite/rpl/r/rpl_db_stmts_ignored.result | 137 ++++++++++++++++++ .../suite/rpl/t/rpl_db_stmts_ignored.test | 91 ++++++++++++ sql/sql_parse.cc | 118 ++++++--------- 4 files changed, 320 insertions(+), 77 deletions(-) create mode 100644 mysql-test/extra/rpl_tests/rpl_db_stmts_ignored.inc create mode 100644 mysql-test/suite/rpl/r/rpl_db_stmts_ignored.result create mode 100644 mysql-test/suite/rpl/t/rpl_db_stmts_ignored.test diff --git a/mysql-test/extra/rpl_tests/rpl_db_stmts_ignored.inc b/mysql-test/extra/rpl_tests/rpl_db_stmts_ignored.inc new file mode 100644 index 000000000000..1d98c44bcaf3 --- /dev/null +++ b/mysql-test/extra/rpl_tests/rpl_db_stmts_ignored.inc @@ -0,0 +1,51 @@ +############################################################################### +# This .inc file is to check that filtering rules on +# CREATE DATABASE/ALTER DATABASE/DROP DATABASE statements +# works properly. +# NOTE: Filter rules should be set in such a way that 'db1' +# is filtered out on Slave. Setting the filtering rule +# should be done in the test that includes this .inc file. +# For eg: +# --replicate-ignore-db=db1 +# --source ../extra/rpl_tests/rpl_db_stmts_ignored.inc +# (OR) +# --replicate-do-db=db2 +# --source ../extra/rpl_tests/rpl_db_stmts_ignored.inc +# (OR) +# --replicate-wild-ignore-table=db1.% +# --source ../extra/rpl_tests/rpl_db_stmts_ignored.inc +############################################################################### +--source include/rpl_connection_master.inc +--echo # +--echo # Execute 'CREATE DATABASE db1' on Master. +--echo # +CREATE DATABASE db1; + +--echo # +--echo # Sync with Slave (using gtid values) +--echo # +--let $use_gtids=1 +--source include/sync_slave_sql_with_master.inc + +--echo # +--echo # Check that even after sync is completed 'db1' does not exists +--echo # on Slave which implies that 'CREATE DATABASE db1' is filtered +--echo # out. +--echo # +--error ER_BAD_DB_ERROR +USE db1; + +--echo # +--echo # Execute other database commands (ALTER/DROP) on Master. +--echo # +--source include/rpl_connection_master.inc +ALTER DATABASE db1 CHARACTER SET latin1; +DROP DATABASE db1; + +--echo # +--echo # Check that we are able to sync with slave successfully +--echo # which implies that those commands are filtered out. +--echo # If they were executed by Slave, that will break replication +--echo # as we do not have 'db1' database on Slave. +--let $use_gtids=1 +--source include/sync_slave_sql_with_master.inc diff --git a/mysql-test/suite/rpl/r/rpl_db_stmts_ignored.result b/mysql-test/suite/rpl/r/rpl_db_stmts_ignored.result new file mode 100644 index 000000000000..f9d18c7c5dbd --- /dev/null +++ b/mysql-test/suite/rpl/r/rpl_db_stmts_ignored.result @@ -0,0 +1,137 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +# +# Test replicate-ignore-db=db1 filter +# +include/rpl_restart_server.inc [server_number=2 gtids=on parameters: --replicate-ignore-db=db1 --skip_slave_start=FALSE] +[connection master] +# +# Execute 'CREATE DATABASE db1' on Master. +# +CREATE DATABASE db1; +# +# Sync with Slave (using gtid values) +# +include/sync_slave_sql_with_master.inc +# +# Check that even after sync is completed 'db1' does not exists +# on Slave which implies that 'CREATE DATABASE db1' is filtered +# out. +# +USE db1; +ERROR 42000: Unknown database 'db1' +# +# Execute other database commands (ALTER/DROP) on Master. +# +[connection master] +ALTER DATABASE db1 CHARACTER SET latin1; +DROP DATABASE db1; +# +# Check that we are able to sync with slave successfully +# which implies that those commands are filtered out. +# If they were executed by Slave, that will break replication +# as we do not have 'db1' database on Slave. +include/sync_slave_sql_with_master.inc +# +# Test replicate-do-db=db2 filter +# +include/rpl_restart_server.inc [server_number=2 gtids=on parameters: --replicate-do-db=db2 --skip_slave_start=FALSE] +[connection master] +# +# Execute 'CREATE DATABASE db1' on Master. +# +CREATE DATABASE db1; +# +# Sync with Slave (using gtid values) +# +include/sync_slave_sql_with_master.inc +# +# Check that even after sync is completed 'db1' does not exists +# on Slave which implies that 'CREATE DATABASE db1' is filtered +# out. +# +USE db1; +ERROR 42000: Unknown database 'db1' +# +# Execute other database commands (ALTER/DROP) on Master. +# +[connection master] +ALTER DATABASE db1 CHARACTER SET latin1; +DROP DATABASE db1; +# +# Check that we are able to sync with slave successfully +# which implies that those commands are filtered out. +# If they were executed by Slave, that will break replication +# as we do not have 'db1' database on Slave. +include/sync_slave_sql_with_master.inc +# +# Test replicate-wild-ignore-table=db1.% filter +# +include/rpl_restart_server.inc [server_number=2 gtids=on parameters: --replicate-wild-ignore-table=db1.% --skip_slave_start=FALSE] +[connection master] +# +# Execute 'CREATE DATABASE db1' on Master. +# +CREATE DATABASE db1; +# +# Sync with Slave (using gtid values) +# +include/sync_slave_sql_with_master.inc +# +# Check that even after sync is completed 'db1' does not exists +# on Slave which implies that 'CREATE DATABASE db1' is filtered +# out. +# +USE db1; +ERROR 42000: Unknown database 'db1' +# +# Execute other database commands (ALTER/DROP) on Master. +# +[connection master] +ALTER DATABASE db1 CHARACTER SET latin1; +DROP DATABASE db1; +# +# Check that we are able to sync with slave successfully +# which implies that those commands are filtered out. +# If they were executed by Slave, that will break replication +# as we do not have 'db1' database on Slave. +include/sync_slave_sql_with_master.inc +# +# Test replicate-wild-ignore-table=db1.% and --replicate-do-db=db2 +# filter combination +include/rpl_restart_server.inc [server_number=2 gtids=on parameters: --replicate-do-db=db2 --replicate-wild-ignore-table=db1.t% --skip_slave_start=FALSE] +[connection master] +# +# Execute 'CREATE DATABASE db1' on Master. +# +CREATE DATABASE db1; +# +# Sync with Slave (using gtid values) +# +include/sync_slave_sql_with_master.inc +# +# Check that even after sync is completed 'db1' does not exists +# on Slave which implies that 'CREATE DATABASE db1' is filtered +# out. +# +USE db1; +ERROR 42000: Unknown database 'db1' +# +# Execute other database commands (ALTER/DROP) on Master. +# +[connection master] +ALTER DATABASE db1 CHARACTER SET latin1; +DROP DATABASE db1; +# +# Check that we are able to sync with slave successfully +# which implies that those commands are filtered out. +# If they were executed by Slave, that will break replication +# as we do not have 'db1' database on Slave. +include/sync_slave_sql_with_master.inc +# +# Cleanup +# +include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_db_stmts_ignored.test b/mysql-test/suite/rpl/t/rpl_db_stmts_ignored.test new file mode 100644 index 000000000000..a03c9cccac9a --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_db_stmts_ignored.test @@ -0,0 +1,91 @@ +# +# ==== Purpose ==== +# +# This test script is created to test how filtering rules act +# against CREATE/ALTER/DROP DATABASE commands (CAD commands) +# Also it will check that there will be gtid empty transaction +# created after these CAD commands are filtered out. +# +# ==== Implementation ==== +# +# USE-CASE 1: Test --replication-ignore-db=db1 filter +# +# S1: Install --replication-ignore-db=db1 filter on slave +# S2: Try all three CAD statements (CREATE/ALTER/DROP) +# S3: Check that they are filtered and check that there is no gap in +# GTID_EXECUTED_SET. +# USE-CASE 2: Repeat S1-S3 steps against --replicate-do-db=db2 filter rule. +# USE-CASE 3: Repeat S1-S3 steps against --replicate-wild-ignore-table=db1.% +# filter rule. +# USE-CASE 4: Repeat S1-S3 steps against --replicate-do-db=db2 and +# --replicate-wild-ignore-table=db1.t% filter rule. +# +# ==== References ==== +# +# Bug#27308751 FILTERED REPLICATION LEAVES GTID HOLES WITH CREATE DATABASE +# +--source include/have_gtid.inc +--source include/have_binlog_format_statement.inc +--source include/master-slave.inc + +--echo # +--echo # Test replicate-ignore-db=db1 filter +--echo # +# +# Test replicate-ignore-db=db1 filter rule on +# CREATE/ALTER/DROP DATABASE 'db1' command +# These commands should be skipped. +# +--let $rpl_server_number= 2 +--let $rpl_start_with_gtids= 1 +--let $rpl_server_parameters=--replicate-ignore-db=db1 --skip_slave_start=FALSE +--source include/rpl_restart_server.inc +--source extra/rpl_tests/rpl_db_stmts_ignored.inc + +--echo # +--echo # Test replicate-do-db=db2 filter +--echo # +# +# Test replicate-do-db=db2 filter rule on +# CREATE/ALTER/DROP DATABASE 'db1' command +# These commands should be skipped. +# +--let $rpl_server_number= 2 +--let $rpl_start_with_gtids= 1 +--let $rpl_server_parameters=--replicate-do-db=db2 --skip_slave_start=FALSE +--source include/rpl_restart_server.inc +--source extra/rpl_tests/rpl_db_stmts_ignored.inc + +--echo # +--echo # Test replicate-wild-ignore-table=db1.% filter +--echo # +# +# Test replicate-wild-ignore-table=db1.% filter rule on +# CREATE/ALTER/DROP DATABASE 'db1' command. +# These commands should be skipped. +# +--let $rpl_server_number= 2 +--let $rpl_start_with_gtids= 1 +--let $rpl_server_parameters=--replicate-wild-ignore-table=db1.% --skip_slave_start=FALSE +--source include/rpl_restart_server.inc +--source extra/rpl_tests/rpl_db_stmts_ignored.inc + +--echo # +--echo # Test replicate-wild-ignore-table=db1.% and --replicate-do-db=db2 +--echo # filter combination +# +# Test replicate-wild-ignore-table=db1.% and --replicate-do-db=db2 +# filter combination rule on CREATE/ALTER/DROP DATABASE 'db1' command. +# These commands should be skipped. +# +--let $rpl_server_number= 2 +--let $rpl_start_with_gtids= 1 +--let $rpl_server_parameters= --replicate-do-db=db2 --replicate-wild-ignore-table=db1.t% --skip_slave_start=FALSE +--source include/rpl_restart_server.inc +--source extra/rpl_tests/rpl_db_stmts_ignored.inc + +--echo # +--echo # Cleanup +--echo # +--source include/force_restart.inc +--source include/rpl_end.inc diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 6fb9b1341a72..bffd7df18ff9 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -206,25 +206,50 @@ inline bool all_tables_not_ok(THD *thd, TABLE_LIST *tables) @param thd Thread handle. @param db Database name used while evaluating the filtering rules. - + @param sql_cmd Represents the current query that needs to be + verified against the database filter rules. + @return TRUE Query should not be filtered out from the execution. + FALSE Query should be filtered out from the execution. + */ -inline bool db_stmt_db_ok(THD *thd, char* db) +inline bool check_database_filters(THD *thd, char* db, enum_sql_command sql_cmd) { - DBUG_ENTER("db_stmt_db_ok"); - - if (!thd->slave_thread) + DBUG_ENTER("check_database_filters"); + DBUG_ASSERT(thd->slave_thread); + if (!db) DBUG_RETURN(TRUE); - + switch (sql_cmd) + { + case SQLCOM_BEGIN: + case SQLCOM_COMMIT: + case SQLCOM_SAVEPOINT: + case SQLCOM_ROLLBACK: + case SQLCOM_ROLLBACK_TO_SAVEPOINT: + DBUG_RETURN(TRUE); + default: + break; + } + bool db_ok= rpl_filter->db_ok(db); /* No filters exist in ignore/do_db ? Then, just check - wild_do_table filtering. Otherwise, check the do_db - rules. + wild_do_table filtering for 'DATABASE' related + statements (CREATE/DROP/ALTER DATABASE) */ - bool db_ok= (rpl_filter->get_do_db()->is_empty() && - rpl_filter->get_ignore_db()->is_empty()) ? - rpl_filter->db_ok_with_wild_table(db) : - rpl_filter->db_ok(db); - + if (db_ok && + (rpl_filter->get_do_db()->is_empty() && + rpl_filter->get_ignore_db()->is_empty())) + { + switch (sql_cmd) + { + case SQLCOM_CREATE_DB: + case SQLCOM_ALTER_DB: + case SQLCOM_ALTER_DB_UPGRADE: + case SQLCOM_DROP_DB: + db_ok= rpl_filter->db_ok_with_wild_table(db); + default: + break; + } + } DBUG_RETURN(db_ok); } #endif @@ -2404,13 +2429,7 @@ mysql_execute_command(THD *thd) #ifdef HAVE_REPLICATION if (unlikely(thd->slave_thread)) { - // Database filters. - if (lex->sql_command != SQLCOM_BEGIN && - lex->sql_command != SQLCOM_COMMIT && - lex->sql_command != SQLCOM_SAVEPOINT && - lex->sql_command != SQLCOM_ROLLBACK && - lex->sql_command != SQLCOM_ROLLBACK_TO_SAVEPOINT && - !rpl_filter->db_ok(thd->db)) + if (!check_database_filters(thd, thd->db, lex->sql_command)) DBUG_RETURN(0); if (lex->sql_command == SQLCOM_DROP_TRIGGER) @@ -3877,20 +3896,6 @@ case SQLCOM_PREPARE: if (!(alias=thd->strmake(lex->name.str, lex->name.length)) || (check_and_convert_db_name(&lex->name, FALSE) != IDENT_NAME_OK)) break; - /* - If in a slave thread : - CREATE DATABASE DB was certainly not preceded by USE DB. - For that reason, db_ok() in sql/slave.cc did not check the - do_db/ignore_db. And as this query involves no tables, tables_ok() - above was not called. So we have to check rules again here. - */ -#ifdef HAVE_REPLICATION - if (!db_stmt_db_ok(thd, lex->name.str)) - { - my_message(ER_SLAVE_IGNORED_TABLE, ER(ER_SLAVE_IGNORED_TABLE), MYF(0)); - break; - } -#endif if (check_access(thd, CREATE_ACL, lex->name.str, NULL, NULL, 1, 0)) break; res= mysql_create_db(thd,(lower_case_table_names == 2 ? alias : @@ -3901,20 +3906,6 @@ case SQLCOM_PREPARE: { if (check_and_convert_db_name(&lex->name, FALSE) != IDENT_NAME_OK) break; - /* - If in a slave thread : - DROP DATABASE DB may not be preceded by USE DB. - For that reason, maybe db_ok() in sql/slave.cc did not check the - do_db/ignore_db. And as this query involves no tables, tables_ok() - above was not called. So we have to check rules again here. - */ -#ifdef HAVE_REPLICATION - if (!db_stmt_db_ok(thd, lex->name.str)) - { - my_message(ER_SLAVE_IGNORED_TABLE, ER(ER_SLAVE_IGNORED_TABLE), MYF(0)); - break; - } -#endif if (check_access(thd, DROP_ACL, lex->name.str, NULL, NULL, 1, 0)) break; res= mysql_rm_db(thd, lex->name.str, lex->drop_if_exists, 0); @@ -3923,14 +3914,6 @@ case SQLCOM_PREPARE: case SQLCOM_ALTER_DB_UPGRADE: { LEX_STRING *db= & lex->name; -#ifdef HAVE_REPLICATION - if (!db_stmt_db_ok(thd, lex->name.str)) - { - res= 1; - my_message(ER_SLAVE_IGNORED_TABLE, ER(ER_SLAVE_IGNORED_TABLE), MYF(0)); - break; - } -#endif if (check_and_convert_db_name(db, FALSE) != IDENT_NAME_OK) break; if (check_access(thd, ALTER_ACL, db->str, NULL, NULL, 1, 0) || @@ -3951,20 +3934,6 @@ case SQLCOM_PREPARE: HA_CREATE_INFO create_info(lex->create_info); if (check_and_convert_db_name(db, FALSE) != IDENT_NAME_OK) break; - /* - If in a slave thread : - ALTER DATABASE DB may not be preceded by USE DB. - For that reason, maybe db_ok() in sql/slave.cc did not check the - do_db/ignore_db. And as this query involves no tables, tables_ok() - above was not called. So we have to check rules again here. - */ -#ifdef HAVE_REPLICATION - if (!db_stmt_db_ok(thd, lex->name.str)) - { - my_message(ER_SLAVE_IGNORED_TABLE, ER(ER_SLAVE_IGNORED_TABLE), MYF(0)); - break; - } -#endif if (check_access(thd, ALTER_ACL, db->str, NULL, NULL, 1, 0)) break; res= mysql_alter_db(thd, db->str, &create_info); @@ -6581,12 +6550,7 @@ bool mysql_test_parse_for_slave(THD *thd, char *rawbuf, uint length) { if (all_tables_not_ok(thd, lex->select_lex.table_list.first)) ignorable= true; - else if (lex->sql_command != SQLCOM_BEGIN && - lex->sql_command != SQLCOM_COMMIT && - lex->sql_command != SQLCOM_SAVEPOINT && - lex->sql_command != SQLCOM_ROLLBACK && - lex->sql_command != SQLCOM_ROLLBACK_TO_SAVEPOINT && - !rpl_filter->db_ok(thd->db)) + else if (!check_database_filters(thd, thd->db, lex->sql_command)) ignorable= true; } thd->m_digest= parent_digest; From 31b49ba6b4123dfab049357fc9a18d422dad741c Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Tue, 10 Apr 2018 10:37:20 +0200 Subject: [PATCH 0774/1221] PS-3950: gcc-8 compilation warnings 1. Add gcc-8 to Travis config file 2. Fix the following gcc-8 warnings: - cast between incompatible function types [-Werror=cast-function-type] - clearing an object with no trivial copy-assignment [-Werror=class-memaccess] - directive output may be truncated [-Werror=format-truncation=] (the commit will be cherry-picked forward to 5.7) --- .travis.yml | 32 +++++++++++++++++++-------- client/mysql_plugin.c | 13 ++++++----- client/mysqlcheck.c | 7 ++++-- sql/binlog.cc | 5 +++-- sql/datadict.cc | 2 +- sql/debug_sync.cc | 8 +++---- sql/field.h | 9 ++++++-- sql/ha_partition.cc | 2 +- sql/handler.cc | 6 ++--- sql/opt_range.cc | 2 +- sql/partition_info.cc | 9 ++++---- sql/records.cc | 4 ++-- sql/sp.cc | 4 ++-- sql/sp_head.cc | 2 +- sql/sql_alter.cc | 2 +- sql/sql_analyse.cc | 9 ++++---- sql/sql_analyse.h | 5 +++-- sql/sql_base.cc | 4 ++-- sql/sql_cache.cc | 2 +- sql/sql_db.cc | 2 +- sql/sql_delete.cc | 2 +- sql/sql_insert.cc | 4 ++-- sql/sql_optimizer.cc | 4 ++-- sql/sql_parse.cc | 2 +- sql/sql_partition_admin.cc | 4 ++-- sql/sql_planner.cc | 14 ++++++++---- sql/sql_select.cc | 3 ++- sql/sql_select.h | 2 +- sql/sql_show.cc | 16 +++++++------- sql/sql_table.cc | 6 ++--- sql/sql_tmp_table.cc | 8 +++---- sql/sql_trigger.cc | 4 ++-- sql/sql_truncate.cc | 2 +- sql/sql_union.cc | 3 ++- sql/sql_view.cc | 4 ++-- sql/sql_yacc.yy | 9 +++++--- sql/table.cc | 9 ++++---- sql/table.h | 2 +- sql/tztime.cc | 5 +++-- sql/unireg.cc | 4 ++-- storage/blackhole/ha_blackhole.cc | 2 +- storage/innobase/buf/buf0dump.cc | 5 +++-- storage/innobase/fts/fts0pars.cc | 10 ++++----- storage/innobase/fts/fts0pars.y | 10 ++++----- storage/innobase/handler/i_s.cc | 2 +- storage/innobase/include/data0type.ic | 2 ++ storage/innobase/row/row0import.cc | 2 +- storage/innobase/trx/trx0trx.cc | 3 ++- storage/innobase/trx/trx0undo.cc | 2 +- storage/myisam/mi_write.c | 17 ++++++++------ storage/myisam/myisamlog.c | 9 +++++--- storage/tokudb/PerconaFT | 2 +- unittest/gunit/decimal-t.cc | 10 ++++----- unittest/gunit/opt_range-t.cc | 4 ++-- unittest/gunit/table_cache-t.cc | 4 ++-- 55 files changed, 185 insertions(+), 135 deletions(-) diff --git a/.travis.yml b/.travis.yml index 86a07288c90c..5b9b350ff0ce 100644 --- a/.travis.yml +++ b/.travis.yml @@ -48,17 +48,21 @@ matrix: compiler: clang # 5 - if: repo != percona/percona-server OR repo = percona/percona-server AND type IN (push, cron) - env: VERSION=7 BUILD=Debug + env: VERSION=8 BUILD=Debug compiler: gcc # 6 - if: repo != percona/percona-server OR repo = percona/percona-server AND type IN (push, cron) - env: VERSION=6 BUILD=Debug + env: VERSION=7 BUILD=Debug compiler: gcc # 7 - if: repo != percona/percona-server OR repo = percona/percona-server AND type IN (push, cron) - env: VERSION=5 BUILD=Debug + env: VERSION=6 BUILD=Debug compiler: gcc # 8 + - if: repo != percona/percona-server OR repo = percona/percona-server AND type IN (push, cron) + env: VERSION=5 BUILD=Debug + compiler: gcc + # 9 - if: repo != percona/percona-server OR repo = percona/percona-server AND type IN (push, cron) env: VERSION=4.8 BUILD=Debug compiler: gcc @@ -85,17 +89,21 @@ matrix: compiler: clang # 5 - if: branch =~ fullci OR repo = percona/percona-server AND type IN (push, pull_request, cron) - env: VERSION=7 BUILD=RelWithDebInfo + env: VERSION=8 BUILD=RelWithDebInfo compiler: gcc # 6 - if: branch =~ fullci OR repo = percona/percona-server AND type IN (push, pull_request, cron) - env: VERSION=6 BUILD=RelWithDebInfo + env: VERSION=7 BUILD=RelWithDebInfo compiler: gcc # 7 - if: branch =~ fullci OR repo = percona/percona-server AND type IN (push, pull_request, cron) - env: VERSION=5 BUILD=RelWithDebInfo + env: VERSION=6 BUILD=RelWithDebInfo compiler: gcc # 8 + - if: branch =~ fullci OR repo = percona/percona-server AND type IN (push, pull_request, cron) + env: VERSION=5 BUILD=RelWithDebInfo + compiler: gcc + # 9 - if: branch =~ fullci OR repo = percona/percona-server AND type IN (push, pull_request, cron) env: VERSION=4.8 BUILD=RelWithDebInfo compiler: gcc @@ -116,17 +124,21 @@ matrix: compiler: clang # 4 - if: branch =~ extraci OR repo = percona/percona-server AND type IN (push, cron) - env: VERSION=7 BUILD=RelWithDebInfo INVERTED=ON + env: VERSION=8 BUILD=RelWithDebInfo INVERTED=ON compiler: gcc # 5 - if: branch =~ extraci OR repo = percona/percona-server AND type IN (push, cron) - env: VERSION=6 BUILD=RelWithDebInfo INVERTED=ON + env: VERSION=7 BUILD=RelWithDebInfo INVERTED=ON compiler: gcc # 6 - if: branch =~ extraci OR repo = percona/percona-server AND type IN (push, cron) - env: VERSION=5 BUILD=RelWithDebInfo INVERTED=ON + env: VERSION=6 BUILD=RelWithDebInfo INVERTED=ON compiler: gcc # 7 + - if: branch =~ extraci OR repo = percona/percona-server AND type IN (push, cron) + env: VERSION=5 BUILD=RelWithDebInfo INVERTED=ON + compiler: gcc + #8 - if: branch =~ extraci OR repo = percona/percona-server AND type IN (push, cron) env: VERSION=4.8 BUILD=RelWithDebInfo INVERTED=ON compiler: gcc @@ -175,6 +187,8 @@ script: fi; if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo -E apt-add-repository -y "ppa:ubuntu-toolchain-r/test"; + sudo -E apt-add-repository -y "ppa:jonathonf/binutils"; + sudo -E apt-add-repository -y "ppa:jonathonf/gcc-8.0"; fi; - echo --- Update list of packages and download dependencies; diff --git a/client/mysql_plugin.c b/client/mysql_plugin.c index 6ff6d9745d89..58e925684992 100644 --- a/client/mysql_plugin.c +++ b/client/mysql_plugin.c @@ -315,9 +315,11 @@ static char *add_quotes(const char *path) static int get_default_values() { + static const char format_cmd[]= "%s mysqld > %s"; char tool_path[FN_REFLEN]; - char defaults_cmd[FN_REFLEN]; char defaults_file[FN_REFLEN]; + char defaults_cmd[sizeof(defaults_file) + sizeof(tool_path) + + sizeof(format_cmd)]; char line[FN_REFLEN]; int error= 0; int ret= 0; @@ -349,7 +351,7 @@ static int get_default_values() } #else snprintf(defaults_cmd, sizeof(defaults_cmd), - "%s mysqld > %s", tool_path, defaults_file); + format_cmd, tool_path, defaults_file); #endif /* Execute the command */ @@ -1206,7 +1208,9 @@ static int dump_bootstrap_file(char *bootstrap_file) static int bootstrap_server(char *server_path, char *bootstrap_file) { - char bootstrap_cmd[FN_REFLEN]; + static const char format_cmd[]= "%s --no-defaults --bootstrap --datadir=%s " + "--basedir=%s < %s"; + char bootstrap_cmd[FN_REFLEN * 2 + sizeof(format_cmd)]; int error= 0; #ifdef __WIN__ @@ -1230,8 +1234,7 @@ static int bootstrap_server(char *server_path, char *bootstrap_file) add_quotes(bootstrap_file)); #else snprintf(bootstrap_cmd, sizeof(bootstrap_cmd), - "%s --no-defaults --bootstrap --datadir=%s --basedir=%s" - " < %s", server_path, opt_datadir, opt_basedir, bootstrap_file); + format_cmd, server_path, opt_datadir, opt_basedir, bootstrap_file); #endif /* Execute the command */ diff --git a/client/mysqlcheck.c b/client/mysqlcheck.c index 7e3869ce2d27..f8c8b322e481 100644 --- a/client/mysqlcheck.c +++ b/client/mysqlcheck.c @@ -727,7 +727,7 @@ static int disable_binlog() static int handle_request_for_tables(char *tables, size_t length) { - char *query, *end, options[100], message[100]; + char *query, *end, options[100]; size_t query_length= 0, query_size= sizeof(char)*(length+110); const char *op = 0; @@ -781,7 +781,10 @@ static int handle_request_for_tables(char *tables, size_t length) } if (mysql_real_query(sock, query, query_length)) { - sprintf(message, "when executing '%s TABLE ... %s'", op, options); + static const char format_msg[]= "when executing '%s TABLE ... %s'"; + char message[sizeof(options) + sizeof(format_msg) + + 32 /* to fit "OPTIMIZE NO_WRITE_TO_BINLOG" */]; + snprintf(message, sizeof(message), format_msg, op, options); DBerror(sock, message); return 1; } diff --git a/sql/binlog.cc b/sql/binlog.cc index 83fc43f51da2..d35243f310af 100644 --- a/sql/binlog.cc +++ b/sql/binlog.cc @@ -7361,8 +7361,9 @@ void MYSQL_BIN_LOG::handle_binlog_flush_or_sync_error(THD *thd, binlog_error_action == ABORT_SERVER ? "ABORT_SERVER" : "IGNORE_ERROR"); if (binlog_error_action == ABORT_SERVER) { - char err_buff[MYSQL_ERRMSG_SIZE]; - sprintf(err_buff, "%s Hence aborting the server.", errmsg); + static const char format_err[]= "%s Hence aborting the server."; + char err_buff[MYSQL_ERRMSG_SIZE + sizeof(format_err)]; + snprintf(err_buff, sizeof(err_buff), format_err, errmsg); exec_binlog_error_action_abort(err_buff); } else diff --git a/sql/datadict.cc b/sql/datadict.cc index b5cbce87d3f2..f2dec5d0cb3a 100644 --- a/sql/datadict.cc +++ b/sql/datadict.cc @@ -175,7 +175,7 @@ bool dd_recreate_table(THD *thd, const char *db, const char *table_name) DBUG_ASSERT(thd->mdl_context.is_lock_owner(MDL_key::TABLE, db, table_name, MDL_EXCLUSIVE)); - memset(&create_info, 0, sizeof(create_info)); + memset(static_cast(&create_info), 0, sizeof(create_info)); /* Create a path to the table, but without a extension. */ build_table_filename(path, sizeof(path) - 1, db, table_name, "", 0); diff --git a/sql/debug_sync.cc b/sql/debug_sync.cc index 1c977f38dd33..18edcdb908e5 100644 --- a/sql/debug_sync.cc +++ b/sql/debug_sync.cc @@ -947,7 +947,7 @@ static void debug_sync_remove_action(st_debug_sync_control *ds_control, memmove(save_action, action, sizeof(st_debug_sync_action)); /* Move actions down. */ - memmove(ds_control->ds_action + dsp_idx, + memmove(static_cast(ds_control->ds_action + dsp_idx), ds_control->ds_action + dsp_idx + 1, (ds_control->ds_active - dsp_idx) * sizeof(st_debug_sync_action)); @@ -958,8 +958,8 @@ static void debug_sync_remove_action(st_debug_sync_control *ds_control, produced by the shift. Again do not use an assignment operator to avoid string allocation/copy. */ - memmove(ds_control->ds_action + ds_control->ds_active, save_action, - sizeof(st_debug_sync_action)); + memmove(static_cast(ds_control->ds_action + ds_control->ds_active), + save_action, sizeof(st_debug_sync_action)); } DBUG_VOID_RETURN; @@ -1030,7 +1030,7 @@ static st_debug_sync_action *debug_sync_get_action(THD *thd, ds_control->ds_action= (st_debug_sync_action*) new_action; ds_control->ds_allocated= new_alloc; /* Clear memory as we do not run string constructors here. */ - memset((ds_control->ds_action + dsp_idx), 0, + memset(static_cast(ds_control->ds_action + dsp_idx), 0, (new_alloc - dsp_idx) * sizeof(st_debug_sync_action)); } DBUG_PRINT("debug_sync", ("added action idx: %u", dsp_idx)); diff --git a/sql/field.h b/sql/field.h index 0e777326f47f..be4e6ad70ef6 100644 --- a/sql/field.h +++ b/sql/field.h @@ -3444,7 +3444,10 @@ class Field_blob :public Field_longstr { memset(ptr, 0, packlength+sizeof(uchar*)); return TYPE_OK; } - void reset_fields() { memset(&value, 0, sizeof(value)); } + void reset_fields() + { + memset(static_cast(&value), 0, sizeof(value)); + } uint32 get_field_buffer_size(void) { return value.alloced_length(); } #ifndef WORDS_BIGENDIAN static @@ -3518,7 +3521,9 @@ class Field_blob :public Field_longstr { uint packed_col_length(const uchar *col_ptr, uint length); uint max_packed_col_length(uint max_length); void free() { value.free(); } - inline void clear_temporary() { memset(&value, 0, sizeof(value)); } + inline void clear_temporary() { + memset(static_cast(&value), 0, sizeof(value)); + } friend type_conversion_status field_conv(Field *to,Field *from); bool has_charset(void) const { return charset() == &my_charset_bin ? FALSE : TRUE; } diff --git a/sql/ha_partition.cc b/sql/ha_partition.cc index a3b8ddef259b..8755eb5e20b5 100644 --- a/sql/ha_partition.cc +++ b/sql/ha_partition.cc @@ -2212,7 +2212,7 @@ void ha_partition::update_create_info(HA_CREATE_INFO *create_info) uint num_parts = num_subparts ? m_file_tot_parts / num_subparts : m_file_tot_parts; HA_CREATE_INFO dummy_info; - memset(&dummy_info, 0, sizeof(dummy_info)); + memset(static_cast(&dummy_info), 0, sizeof(dummy_info)); /* Since update_create_info() can be called from mysql_prepare_alter_table() diff --git a/sql/handler.cc b/sql/handler.cc index c68e4bf558a9..1d80f61e4db0 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -2570,8 +2570,8 @@ int ha_delete_table(THD *thd, handlerton *table_type, const char *path, TABLE_SHARE dummy_share; DBUG_ENTER("ha_delete_table"); - memset(&dummy_table, 0, sizeof(dummy_table)); - memset(&dummy_share, 0, sizeof(dummy_share)); + memset(static_cast(&dummy_table), 0, sizeof(dummy_table)); + memset(static_cast(&dummy_share), 0, sizeof(dummy_share)); dummy_table.s= &dummy_share; /* DB_TYPE_UNKNOWN is used in ALTER TABLE when renaming only .frm files */ @@ -5298,7 +5298,7 @@ int ha_create_table_from_engine(THD* thd, const char *db, const char *name) DBUG_ENTER("ha_create_table_from_engine"); DBUG_PRINT("enter", ("name '%s'.'%s'", db, name)); - memset(&create_info, 0, sizeof(create_info)); + memset(static_cast(&create_info), 0, sizeof(create_info)); if ((error= ha_discover(thd, db, name, &frmblob, &frmlen))) { /* Table could not be discovered and thus not created */ diff --git a/sql/opt_range.cc b/sql/opt_range.cc index fbaf452657d5..35c504e62482 100644 --- a/sql/opt_range.cc +++ b/sql/opt_range.cc @@ -1473,7 +1473,7 @@ QUICK_INDEX_MERGE_SELECT::QUICK_INDEX_MERGE_SELECT(THD *thd_param, DBUG_ENTER("QUICK_INDEX_MERGE_SELECT::QUICK_INDEX_MERGE_SELECT"); index= MAX_KEY; head= table; - memset(&read_record, 0, sizeof(read_record)); + memset(static_cast(&read_record), 0, sizeof(read_record)); init_sql_alloc(&alloc, thd->variables.range_alloc_block_size, 0); DBUG_VOID_RETURN; } diff --git a/sql/partition_info.cc b/sql/partition_info.cc index e2ded25db4b4..6be316d7b51b 100644 --- a/sql/partition_info.cc +++ b/sql/partition_info.cc @@ -42,7 +42,7 @@ partition_info *partition_info::get_clone(bool reset /* = false */) mem_alloc_error(sizeof(partition_info)); DBUG_RETURN(NULL); } - memcpy(clone, this, sizeof(partition_info)); + memcpy(static_cast(clone), this, sizeof(partition_info)); memset(&(clone->read_partitions), 0, sizeof(clone->read_partitions)); memset(&(clone->lock_partitions), 0, sizeof(clone->lock_partitions)); clone->bitmaps_are_initialized= FALSE; @@ -59,7 +59,7 @@ partition_info *partition_info::get_clone(bool reset /* = false */) mem_alloc_error(sizeof(partition_element)); DBUG_RETURN(NULL); } - memcpy(part_clone, part, sizeof(partition_element)); + memcpy(static_cast(part_clone), part, sizeof(partition_element)); /* Mark that RANGE and LIST values needs to be fixed so that we don't @@ -89,7 +89,8 @@ partition_info *partition_info::get_clone(bool reset /* = false */) mem_alloc_error(sizeof(partition_element)); DBUG_RETURN(NULL); } - memcpy(subpart_clone, subpart, sizeof(partition_element)); + memcpy(static_cast(subpart_clone), subpart, + sizeof(partition_element)); part_clone->subpartitions.push_back(subpart_clone); } clone->partitions.push_back(part_clone); @@ -1874,7 +1875,7 @@ void partition_info::print_no_partition_found(TABLE *table_arg) char *buf_ptr= (char*)&buf; TABLE_LIST table_list; - memset(&table_list, 0, sizeof(table_list)); + memset(static_cast(&table_list), 0, sizeof(table_list)); table_list.db= table_arg->s->db.str; table_list.table_name= table_arg->s->table_name.str; diff --git a/sql/records.cc b/sql/records.cc index 6076fe32d06c..a6b48011f4ee 100644 --- a/sql/records.cc +++ b/sql/records.cc @@ -69,7 +69,7 @@ bool init_read_record_idx(READ_RECORD *info, THD *thd, TABLE *table, { int error; empty_record(table); - memset(info, 0, sizeof(*info)); + memset(static_cast(info), 0, sizeof(*info)); info->thd= thd; info->table= table; info->record= table->record[0]; @@ -188,7 +188,7 @@ bool init_read_record(READ_RECORD *info,THD *thd, TABLE *table, IO_CACHE *tempfile; DBUG_ENTER("init_read_record"); - memset(info, 0, sizeof(*info)); + memset(static_cast(info), 0, sizeof(*info)); info->thd=thd; info->table=table; info->forms= &info->table; /* Only one table */ diff --git a/sql/sp.cc b/sql/sp.cc index 68e868598a50..9884b1d15902 100644 --- a/sql/sp.cc +++ b/sql/sp.cc @@ -955,8 +955,8 @@ sp_returns_type(THD *thd, String &result, sp_head *sp) TABLE table; TABLE_SHARE share; Field *field; - memset(&table, 0, sizeof(table)); - memset(&share, 0, sizeof(share)); + memset(static_cast(&table), 0, sizeof(table)); + memset(static_cast(&share), 0, sizeof(share)); table.in_use= thd; table.s = &share; field= sp->create_result_field(0, 0, &table); diff --git a/sql/sp_head.cc b/sql/sp_head.cc index 1e2f3eda1a0c..b5668e340265 100644 --- a/sql/sp_head.cc +++ b/sql/sp_head.cc @@ -1962,7 +1962,7 @@ bool sp_head::add_used_tables_to_table_list(THD *thd, bool sp_head::check_show_access(THD *thd, bool *full_access) { TABLE_LIST tables; - memset(&tables, 0, sizeof(tables)); + memset(static_cast(&tables), 0, sizeof(tables)); tables.db= (char*) "mysql"; tables.table_name= tables.alias= (char*) "proc"; diff --git a/sql/sql_alter.cc b/sql/sql_alter.cc index f3bcc82d7bc6..2b23c5554e38 100644 --- a/sql/sql_alter.cc +++ b/sql/sql_alter.cc @@ -304,7 +304,7 @@ bool Sql_cmd_alter_table::execute(THD *thd) { // Rename of table TABLE_LIST tmp_table; - memset(&tmp_table, 0, sizeof(tmp_table)); + memset(static_cast(&tmp_table), 0, sizeof(tmp_table)); tmp_table.table_name= lex->name.str; tmp_table.db= select_lex->db; tmp_table.grant.privilege= priv; diff --git a/sql/sql_analyse.cc b/sql/sql_analyse.cc index f3a2570eee2c..da151ede6cda 100644 --- a/sql/sql_analyse.cc +++ b/sql/sql_analyse.cc @@ -239,13 +239,12 @@ bool get_ev_num_info(EV_NUM_INFO *ev_info, NUM_INFO *info, const char *num) return 1; } // get_ev_num_info - -void free_string(String *s) +void free_string(void* key, TREE_FREE action MY_ATTRIBUTE((unused)), + const void *param MY_ATTRIBUTE((unused))) { - s->free(); + reinterpret_cast(key)->free(); } - void field_str::add() { char buff[MAX_FIELD_WIDTH], *ptr; @@ -320,7 +319,7 @@ void field_str::add() } else { - memset(&s, 0, sizeof(s)); // Let tree handle free of this + memset(static_cast(&s), 0, sizeof(s)); // Let tree handle free of this if ((treemem += length) > pc->max_treemem) { room_in_tree = 0; // Remove tree, too big tree diff --git a/sql/sql_analyse.h b/sql/sql_analyse.h index b10270969f1d..393dde57766c 100644 --- a/sql/sql_analyse.h +++ b/sql/sql_analyse.h @@ -62,7 +62,8 @@ int compare_ulonglong(const ulonglong *s, const ulonglong *t); int compare_ulonglong2(void* cmp_arg MY_ATTRIBUTE((unused)), const ulonglong *s, const ulonglong *t); int compare_decimal2(int* len, const char *s, const char *t); -void free_string(String*); +void free_string(void* key, TREE_FREE action MY_ATTRIBUTE((unused)), + const void *param MY_ATTRIBUTE((unused))); class select_analyse; class field_info :public Sql_alloc @@ -116,7 +117,7 @@ class field_str :public field_info must_be_blob(0), was_zero_fill(0), was_maybe_zerofill(0), can_be_still_num(1) { init_tree(&tree, 0, 0, sizeof(String), (qsort_cmp2) sortcmp2, - 0, (tree_element_free) free_string, NULL); }; + 0, free_string, NULL); }; void add(); void get_opt_type(String*, ha_rows); diff --git a/sql/sql_base.cc b/sql/sql_base.cc index bbd2d338bfbe..d69d76fd44ba 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -753,7 +753,7 @@ OPEN_TABLE_LIST *list_open_tables(THD *thd, const char *db, const char *wild) TABLE_LIST table_list; DBUG_ENTER("list_open_tables"); - memset(&table_list, 0, sizeof(table_list)); + memset(static_cast(&table_list), 0, sizeof(table_list)); start_list= &open_list; open_list=0; @@ -1079,7 +1079,7 @@ bool close_cached_connection_tables(THD *thd, LEX_STRING *connection) DBUG_ENTER("close_cached_connections"); DBUG_ASSERT(thd); - memset(&tmp, 0, sizeof(TABLE_LIST)); + memset(static_cast(&tmp), 0, sizeof(TABLE_LIST)); mysql_mutex_lock(&LOCK_open); diff --git a/sql/sql_cache.cc b/sql/sql_cache.cc index da902d11fa1e..df3f210e950a 100644 --- a/sql/sql_cache.cc +++ b/sql/sql_cache.cc @@ -2022,7 +2022,7 @@ def_week_frmt: %lu, in_trans: %d, autocommit: %d", } } - memset(&table_list, 0, sizeof(table_list)); + memset(static_cast(&table_list), 0, sizeof(table_list)); table_list.db = table->db(); table_list.alias= table_list.table_name= table->table(); #ifndef NO_EMBEDDED_ACCESS_CHECKS diff --git a/sql/sql_db.cc b/sql/sql_db.cc index 0664564e004a..408d38098ddb 100644 --- a/sql/sql_db.cc +++ b/sql/sql_db.cc @@ -363,7 +363,7 @@ bool load_db_opt(THD *thd, const char *path, HA_CREATE_INFO *create) bool error=1; uint nbytes; - memset(create, 0, sizeof(*create)); + memset(static_cast(create), 0, sizeof(*create)); create->default_table_charset= thd->variables.collation_server; /* Check if options for this database are already in the hash */ diff --git a/sql/sql_delete.cc b/sql/sql_delete.cc index 2d6ad5f3fd9a..227c6e575961 100644 --- a/sql/sql_delete.cc +++ b/sql/sql_delete.cc @@ -91,7 +91,7 @@ bool mysql_delete(THD *thd, TABLE_LIST *table_list, Item *conds, List fields; List all_fields; - memset(&tables, 0, sizeof(tables)); + memset(static_cast(&tables), 0, sizeof(tables)); tables.table = table; tables.alias = table_list->alias; diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index 20ac027d1406..aa4655f7d5d2 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -2266,7 +2266,7 @@ class Delayed_insert :public ilink { thd.variables.lock_wait_timeout= LONG_TIMEOUT; memset(&thd.net, 0, sizeof(thd.net)); // Safety - memset(&table_list, 0, sizeof(table_list)); // Safety + memset(static_cast(&table_list), 0, sizeof(table_list)); // Safety thd.system_thread= SYSTEM_THREAD_DELAYED_INSERT; thd.security_ctx->host_or_ip= ""; mysql_mutex_init(key_delayed_insert_mutex, &mutex, MY_MUTEX_INIT_FAST); @@ -4395,7 +4395,7 @@ select_create::binlog_show_create_table(TABLE **tables, uint count) int result; TABLE_LIST tmp_table_list; - memset(&tmp_table_list, 0, sizeof(tmp_table_list)); + memset(static_cast(&tmp_table_list), 0, sizeof(tmp_table_list)); tmp_table_list.table = *tables; query.length(0); // Have to zero it since constructor doesn't diff --git a/sql/sql_optimizer.cc b/sql/sql_optimizer.cc index d50b35f62fa9..34ec5bc669c5 100644 --- a/sql/sql_optimizer.cc +++ b/sql/sql_optimizer.cc @@ -4393,7 +4393,7 @@ static bool optimize_semijoin_nests_for_materialization(JOIN *join) if (!(sj_nest->nested_join->sjm.positions= (st_position*)join->thd->alloc(sizeof(st_position)*n_tables))) DBUG_RETURN(true); - memcpy(sj_nest->nested_join->sjm.positions, + memcpy(static_cast(sj_nest->nested_join->sjm.positions), join->best_positions + join->const_tables, sizeof(st_position) * n_tables); } @@ -8069,7 +8069,7 @@ static bool make_join_select(JOIN *join, Item *cond) */ int idx= tab - join->join_tab; cond->walk(&Item::inform_item_in_cond_of_tab, false, - reinterpret_cast(&idx)); + reinterpret_cast(&idx)); } } diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index e8e9efbbeefd..541d0e3bccb2 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -3618,7 +3618,7 @@ case SQLCOM_PREPARE: */ thd->set_slow_log_for_admin_command(); - memset(&create_info, 0, sizeof(create_info)); + memset(static_cast(&create_info), 0, sizeof(create_info)); create_info.db_type= 0; create_info.row_type= ROW_TYPE_NOT_USED; create_info.default_table_charset= thd->variables.collation_database; diff --git a/sql/sql_partition_admin.cc b/sql/sql_partition_admin.cc index c4c25ccac066..3b2abcd4b10c 100644 --- a/sql/sql_partition_admin.cc +++ b/sql/sql_partition_admin.cc @@ -179,8 +179,8 @@ static bool compare_table_with_partition(THD *thd, TABLE *table, DBUG_ENTER("compare_table_with_partition"); bool metadata_equal= false; - memset(&part_create_info, 0, sizeof(HA_CREATE_INFO)); - memset(&table_create_info, 0, sizeof(HA_CREATE_INFO)); + memset(static_cast(&part_create_info), 0, sizeof(HA_CREATE_INFO)); + memset(static_cast(&table_create_info), 0, sizeof(HA_CREATE_INFO)); update_create_info_from_table(&table_create_info, table); /* get the current auto_increment value */ diff --git a/sql/sql_planner.cc b/sql/sql_planner.cc index 061aec6425b9..d589ec058bb8 100644 --- a/sql/sql_planner.cc +++ b/sql/sql_planner.cc @@ -427,7 +427,11 @@ void Optimize_table_order::best_access_path( idx == join->const_tables || // 1 !thd->optimizer_switch_flag(OPTIMIZER_SWITCH_BNL); // 2 +// See the comment at Loose_scan_opt::Loose_scan_opt for why this warning has +// been left in the code intentionally +MY_DISABLE_WARN_MAYBE_UNINITIALIZED Loose_scan_opt loose_scan_opt; +MY_RESTORE_WARN_MAYBE_UNINITIALIZED DBUG_ENTER("Optimize_table_order::best_access_path"); Opt_trace_object trace_wrapper(trace, "best_access_path"); @@ -1103,7 +1107,7 @@ bool Optimize_table_order::choose_table_order() /* Are there any tables to optimize? */ if (join->const_tables == join->tables) { - memcpy(join->best_positions, join->positions, + memcpy(static_cast(join->best_positions), join->positions, sizeof(POSITION) * join->const_tables); join->best_read= 1.0; join->best_rowcount= 1; @@ -1297,7 +1301,8 @@ void Optimize_table_order::optimize_straight_join(table_map join_tables) join->sort_by_table != join->positions[join->const_tables].table->table) read_time+= record_count; // We have to make a temp table - memcpy(join->best_positions, join->positions, sizeof(POSITION)*idx); + memcpy(static_cast(join->best_positions), join->positions, + sizeof(POSITION)*idx); /** * If many plans have identical cost, which one will be used @@ -2485,7 +2490,8 @@ bool Optimize_table_order::fix_semijoin_strategies() setting it to SJ_OPT_NONE). But until then, pos->sj_strategy should not be read. */ - memcpy(pos - table_count + 1, sjm_nest->nested_join->sjm.positions, + memcpy(static_cast(pos - table_count + 1), + sjm_nest->nested_join->sjm.positions, sizeof(POSITION) * table_count); first= tableno - table_count + 1; join->best_positions[first].n_sj_tables= table_count; @@ -2504,7 +2510,7 @@ bool Optimize_table_order::fix_semijoin_strategies() first= last_inner - table_count + 1; DBUG_ASSERT((join->best_positions + first)->table->emb_sj_nest == sjm_nest); - memcpy(join->best_positions + first, // stale semijoin strategy here too + memcpy(static_cast(join->best_positions + first), // stale semijoin strategy here too sjm_nest->nested_join->sjm.positions, sizeof(POSITION) * table_count); join->best_positions[first].sj_strategy= SJ_OPT_MATERIALIZE_SCAN; diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 74aadae1db24..63cdc0ae19fb 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -1458,7 +1458,8 @@ bool JOIN::get_best_combination() List_iterator sj_list_it(select_lex->sj_nests); TABLE_LIST *sj_nest; while ((sj_nest= sj_list_it++)) - TRASH(&sj_nest->nested_join->sjm, sizeof(sj_nest->nested_join->sjm)); + TRASH(static_cast(&sj_nest->nested_join->sjm), + sizeof(sj_nest->nested_join->sjm)); DBUG_RETURN(false); } diff --git a/sql/sql_select.h b/sql/sql_select.h index 76d6f21158c5..4a172f4692fc 100644 --- a/sql/sql_select.h +++ b/sql/sql_select.h @@ -982,7 +982,7 @@ st_join_table::st_join_table() All users do init_read_record(), which does memset(), rather than invoking a constructor. */ - memset(&read_record, 0, sizeof(read_record)); + memset(static_cast(&read_record), 0, sizeof(read_record)); } /** diff --git a/sql/sql_show.cc b/sql/sql_show.cc index 8938a65eb1cf..bdf0f1915357 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -593,7 +593,7 @@ find_files(THD *thd, List *files, const char *db, - memset(&table_list, 0, sizeof(table_list)); + memset(static_cast(&table_list), 0, sizeof(table_list)); if (!(dirp = my_dir(path,MYF(dir ? MY_WANT_STAT : 0)))) { @@ -1591,7 +1591,7 @@ int store_create_info(THD *thd, TABLE_LIST *table_list, String *packet, } key_info= table->key_info; - memset(&create_info, 0, sizeof(create_info)); + memset(static_cast(&create_info), 0, sizeof(create_info)); /* Allow update_create_info to update row type */ create_info.row_type= share->row_type; file->update_create_info(&create_info); @@ -4449,8 +4449,8 @@ static int fill_schema_table_from_frm(THD *thd, TABLE_LIST *tables, uint key_length; char db_name_buff[NAME_LEN + 1], table_name_buff[NAME_LEN + 1]; - memset(&table_list, 0, sizeof(TABLE_LIST)); - memset(&tbl, 0, sizeof(TABLE)); + memset(static_cast(&table_list), 0, sizeof(TABLE_LIST)); + memset(static_cast(&tbl), 0, sizeof(TABLE)); DBUG_ASSERT(db_name->length <= NAME_LEN); DBUG_ASSERT(table_name->length <= NAME_LEN); @@ -5792,7 +5792,7 @@ bool store_schema_params(THD *thd, TABLE *table, TABLE *proc_table, bool free_sp_head; DBUG_ENTER("store_schema_params"); - memset(&tbl, 0, sizeof(TABLE)); + memset(static_cast(&tbl), 0, sizeof(TABLE)); (void) build_table_filename(path, sizeof(path), "", "", "", 0); init_tmp_table_share(thd, &share, "", 0, "", path); @@ -6001,7 +6001,7 @@ bool store_schema_proc(THD *thd, TABLE *table, TABLE *proc_table, Field *field; Create_field *field_def= &sp->m_return_field_def; - memset(&tbl, 0, sizeof(TABLE)); + memset(static_cast(&tbl), 0, sizeof(TABLE)); (void) build_table_filename(path, sizeof(path), "", "", "", 0); init_tmp_table_share(thd, &share, "", 0, "", path); field= make_field(&share, (uchar*) 0, field_def->length, @@ -6082,7 +6082,7 @@ int fill_schema_proc(THD *thd, TABLE_LIST *tables, Item *cond) strxmov(definer, thd->security_ctx->priv_user, "@", thd->security_ctx->priv_host, NullS); /* We use this TABLE_LIST instance only for checking of privileges. */ - memset(&proc_tables, 0, sizeof(proc_tables)); + memset(static_cast(&proc_tables), 0, sizeof(proc_tables)); proc_tables.db= (char*) "mysql"; proc_tables.db_length= 5; proc_tables.table_name= proc_tables.alias= (char*) "proc"; @@ -6265,7 +6265,7 @@ static int get_schema_views_record(THD *thd, TABLE_LIST *tables, { TABLE_LIST table_list; uint view_access; - memset(&table_list, 0, sizeof(table_list)); + memset(static_cast(&table_list), 0, sizeof(table_list)); table_list.db= tables->db; table_list.table_name= tables->table_name; table_list.grant.privilege= thd->col_access; diff --git a/sql/sql_table.cc b/sql/sql_table.cc index eb9d12359cac..df0d4b7373d5 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -5688,7 +5688,7 @@ bool mysql_create_like_table(THD* thd, TABLE_LIST* table, TABLE_LIST* src_table, DEBUG_SYNC(thd, "create_table_like_after_open"); /* Fill HA_CREATE_INFO and Alter_info with description of source table. */ - memset(&local_create_info, 0, sizeof(local_create_info)); + memset(static_cast(&local_create_info), 0, sizeof(local_create_info)); local_create_info.db_type= src_table->table->s->db_type(); local_create_info.row_type= src_table->table->s->row_type; if (mysql_prepare_alter_table(thd, src_table->table, &local_create_info, @@ -9591,7 +9591,7 @@ copy_data_between_tables(TABLE *from,TABLE *to, { from->sort.io_cache=(IO_CACHE*) my_malloc(sizeof(IO_CACHE), MYF(MY_FAE | MY_ZEROFILL)); - memset(&tables, 0, sizeof(tables)); + memset(static_cast(&tables), 0, sizeof(tables)); tables.table= from; tables.alias= tables.table_name= from->s->table_name.str; tables.db= from->s->db.str; @@ -9766,7 +9766,7 @@ bool mysql_recreate_table(THD *thd, TABLE_LIST *table_list, bool table_copy) /* Same applies to MDL request. */ table_list->mdl_request.set_type(MDL_SHARED_NO_WRITE); - memset(&create_info, 0, sizeof(create_info)); + memset(static_cast(&create_info), 0, sizeof(create_info)); create_info.row_type=ROW_TYPE_NOT_USED; create_info.default_table_charset=default_charset_info; /* Force alter table to recreate table */ diff --git a/sql/sql_tmp_table.cc b/sql/sql_tmp_table.cc index 00bccb76b457..32e0f6567ebe 100644 --- a/sql/sql_tmp_table.cc +++ b/sql/sql_tmp_table.cc @@ -588,7 +588,7 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List &fields, strmov(tmpname,path); /* make table according to fields */ - memset(table, 0, sizeof(*table)); + memset(static_cast(table), 0, sizeof(*table)); memset(reg_field, 0, sizeof(Field*)*(field_count+1)); memset(default_field, 0, sizeof(Field*) * (field_count)); memset(from_field, 0, sizeof(Field*)*field_count); @@ -1272,7 +1272,7 @@ TABLE *create_duplicate_weedout_tmp_table(THD *thd, /* STEP 4: Create TABLE description */ - memset(table, 0, sizeof(*table)); + memset(static_cast(table), 0, sizeof(*table)); memset(reg_field, 0, sizeof(Field*)*2); table->mem_root= own_root; @@ -1504,8 +1504,8 @@ TABLE *create_virtual_tmp_table(THD *thd, List &field_list) NullS)) return 0; - memset(table, 0, sizeof(*table)); - memset(share, 0, sizeof(*share)); + memset(static_cast(table), 0, sizeof(*table)); + memset(static_cast(share), 0, sizeof(*share)); table->field= field; table->s= share; table->temp_pool_slot= MY_BIT_NONE; diff --git a/sql/sql_trigger.cc b/sql/sql_trigger.cc index edd9e455f327..6556a30ee8dc 100644 --- a/sql/sql_trigger.cc +++ b/sql/sql_trigger.cc @@ -1812,7 +1812,7 @@ bool Table_triggers_list::drop_all_triggers(THD *thd, char *db, char *name) bool result= 0; DBUG_ENTER("drop_all_triggers"); - memset(&table, 0, sizeof(table)); + memset(static_cast(&table), 0, sizeof(table)); init_sql_alloc(&table.mem_root, 8192, 0); if (Table_triggers_list::check_n_load(thd, db, name, &table, 1)) @@ -2032,7 +2032,7 @@ bool Table_triggers_list::change_table_name(THD *thd, const char *db, LEX_STRING *err_trigname; DBUG_ENTER("change_table_name"); - memset(&table, 0, sizeof(table)); + memset(static_cast(&table), 0, sizeof(table)); init_sql_alloc(&table.mem_root, 8192, 0); /* diff --git a/sql/sql_truncate.cc b/sql/sql_truncate.cc index 3250c8c15b97..f0b89c69c66c 100644 --- a/sql/sql_truncate.cc +++ b/sql/sql_truncate.cc @@ -279,7 +279,7 @@ static bool recreate_temporary_table(THD *thd, TABLE *table) handlerton *table_type= table->s->db_type(); DBUG_ENTER("recreate_temporary_table"); - memset(&create_info, 0, sizeof(create_info)); + memset(static_cast(&create_info), 0, sizeof(create_info)); table->file->info(HA_STATUS_AUTO | HA_STATUS_NO_LOCK); diff --git a/sql/sql_union.cc b/sql/sql_union.cc index 366af964b6d0..017b22ffe73e 100644 --- a/sql/sql_union.cc +++ b/sql/sql_union.cc @@ -478,7 +478,8 @@ bool st_select_lex_unit::prepare(THD *thd_arg, select_result *sel_result, if (union_result->create_result_table(thd, &types, MY_TEST(union_distinct), create_options, "", FALSE, TRUE)) goto err; - memset(&result_table_list, 0, sizeof(result_table_list)); + memset(static_cast(&result_table_list), 0, + sizeof(result_table_list)); result_table_list.db= (char*) ""; result_table_list.table_name= result_table_list.alias= (char*) "union"; result_table_list.table= table= union_result->table; diff --git a/sql/sql_view.cc b/sql/sql_view.cc index 804076548b5a..c77519e0719a 100644 --- a/sql/sql_view.cc +++ b/sql/sql_view.cc @@ -214,7 +214,7 @@ fill_defined_view_parts (THD *thd, TABLE_LIST *view) LEX *lex= thd->lex; TABLE_LIST decoy; - memcpy (&decoy, view, sizeof (TABLE_LIST)); + memcpy(static_cast(&decoy), view, sizeof (TABLE_LIST)); key_length= get_table_def_key(view, &key); @@ -2157,7 +2157,7 @@ mysql_rename_view(THD *thd, view definition parsing or use temporary 'view_def' object for it. */ - memset(&view_def, 0, sizeof(view_def)); + memset(static_cast(&view_def), 0, sizeof(view_def)); view_def.timestamp.str= view_def.timestamp_buffer; view_def.view_suid= TRUE; diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 071da98d291d..720ed735892a 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -2435,7 +2435,8 @@ create: lex->alter_info.reset(); lex->col_list.empty(); lex->change=NullS; - memset(&lex->create_info, 0, sizeof(lex->create_info)); + memset(static_cast(&lex->create_info), 0, + sizeof(lex->create_info)); lex->create_info.options=$2 | $4; lex->create_info.default_table_charset= NULL; lex->name.str= 0; @@ -7468,7 +7469,8 @@ alter: lex->col_list.empty(); lex->select_lex.init_order(); lex->select_lex.db= (lex->select_lex.table_list.first)->db; - memset(&lex->create_info, 0, sizeof(lex->create_info)); + memset(static_cast(&lex->create_info), 0, + sizeof(lex->create_info)); lex->create_info.db_type= 0; lex->create_info.default_table_charset= NULL; lex->create_info.row_type= ROW_TYPE_NOT_USED; @@ -12623,7 +12625,8 @@ show: lex->wild=0; mysql_init_select(lex); lex->current_select->parsing_place= SELECT_LIST; - memset(&lex->create_info, 0, sizeof(lex->create_info)); + memset(static_cast(&lex->create_info), 0, + sizeof(lex->create_info)); } show_param { diff --git a/sql/table.cc b/sql/table.cc index 01abaa069209..832c9000d786 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -342,7 +342,7 @@ TABLE_SHARE *alloc_table_share(TABLE_LIST *table_list, const char *key, table_cache_instances * sizeof(*cache_element_array), NULL)) { - memset(share, 0, sizeof(*share)); + memset(static_cast(share), 0, sizeof(*share)); share->set_table_cache_key(key_buff, key, key_length); @@ -408,7 +408,7 @@ void init_tmp_table_share(THD *thd, TABLE_SHARE *share, const char *key, DBUG_ENTER("init_tmp_table_share"); DBUG_PRINT("enter", ("table: '%s'.'%s'", key, table_name)); - memset(share, 0, sizeof(*share)); + memset(static_cast(share), 0, sizeof(*share)); init_sql_alloc(&share->mem_root, TABLE_ALLOC_BLOCK_SIZE, 0); share->table_category= TABLE_CATEGORY_TEMPORARY; share->tmp_table= INTERNAL_TMP_TABLE; @@ -2215,7 +2215,7 @@ int open_table_from_share(THD *thd, TABLE_SHARE *share, const char *alias, share->table_name.str, (long) outparam)); error= 1; - memset(outparam, 0, sizeof(*outparam)); + memset(static_cast(outparam), 0, sizeof(*outparam)); outparam->in_use= thd; outparam->s= share; outparam->db_stat= db_stat; @@ -3904,7 +3904,8 @@ TABLE_LIST *TABLE_LIST::new_nested_join(MEM_ROOT *allocator, if (join_nest == NULL) return NULL; - memset(join_nest, 0, ALIGN_SIZE(sizeof(TABLE_LIST)) + sizeof(NESTED_JOIN)); + memset(static_cast(join_nest), 0, + ALIGN_SIZE(sizeof(TABLE_LIST)) + sizeof(NESTED_JOIN)); join_nest->nested_join= (NESTED_JOIN *) ((uchar *)join_nest + ALIGN_SIZE(sizeof(TABLE_LIST))); diff --git a/sql/table.h b/sql/table.h index ff325ac8d3a1..d83922af7dc4 100644 --- a/sql/table.h +++ b/sql/table.h @@ -1575,7 +1575,7 @@ struct TABLE_LIST const char *alias_arg, enum thr_lock_type lock_type_arg) { - memset(this, 0, sizeof(*this)); + memset(static_cast(this), 0, sizeof(*this)); db= (char*) db_name_arg; db_length= db_length_arg; table_name= (char*) table_name_arg; diff --git a/sql/tztime.cc b/sql/tztime.cc index bb5249f736a3..3c5ba7e61bf0 100644 --- a/sql/tztime.cc +++ b/sql/tztime.cc @@ -1522,7 +1522,8 @@ my_offset_tzs_get_key(Time_zone_offset *entry, static void tz_init_table_list(TABLE_LIST *tz_tabs) { - memset(tz_tabs, 0, sizeof(TABLE_LIST) * MY_TZ_TABLES_COUNT); + memset(static_cast(tz_tabs), 0, + sizeof(TABLE_LIST) * MY_TZ_TABLES_COUNT); for (int i= 0; i < MY_TZ_TABLES_COUNT; i++) { @@ -1653,7 +1654,7 @@ my_tz_init(THD *org_thd, const char *default_tzname, my_bool bootstrap) */ thd->set_db(db, sizeof(db)-1); - memset(&tz_tables[0], 0, sizeof(TABLE_LIST)); + memset(static_cast(&tz_tables[0]), 0, sizeof(TABLE_LIST)); tz_tables[0].alias= tz_tables[0].table_name= (char*)"time_zone_leap_second"; tz_tables[0].table_name_length= 21; diff --git a/sql/unireg.cc b/sql/unireg.cc index d67bc3753f96..7bef68000c83 100644 --- a/sql/unireg.cc +++ b/sql/unireg.cc @@ -1094,8 +1094,8 @@ static bool make_empty_rec(THD *thd, File file, DBUG_ENTER("make_empty_rec"); /* We need a table to generate columns for default values */ - memset(&table, 0, sizeof(table)); - memset(&share, 0, sizeof(share)); + memset(static_cast(&table), 0, sizeof(table)); + memset(static_cast(&share), 0, sizeof(share)); table.s= &share; if (!(buff=(uchar*) my_malloc((size_t) reclength,MYF(MY_WME | MY_ZEROFILL)))) diff --git a/storage/blackhole/ha_blackhole.cc b/storage/blackhole/ha_blackhole.cc index a5cd03cf8c72..10ed3a048c24 100644 --- a/storage/blackhole/ha_blackhole.cc +++ b/storage/blackhole/ha_blackhole.cc @@ -188,7 +188,7 @@ int ha_blackhole::info(uint flag) { DBUG_ENTER("ha_blackhole::info"); - memset(&stats, 0, sizeof(stats)); + memset(static_cast(&stats), 0, sizeof(stats)); if (flag & HA_STATUS_AUTO) stats.auto_increment_value= 1; DBUG_RETURN(0); diff --git a/storage/innobase/buf/buf0dump.cc b/storage/innobase/buf/buf0dump.cc index 8ecdedc613be..c7c3a4b49ba0 100644 --- a/storage/innobase/buf/buf0dump.cc +++ b/storage/innobase/buf/buf0dump.cc @@ -201,8 +201,9 @@ buf_dump( { #define SHOULD_QUIT() (SHUTTING_DOWN() && obey_shutdown) + static const char format_name[]= "%s.incomplete"; char full_filename[OS_FILE_MAX_PATH]; - char tmp_filename[OS_FILE_MAX_PATH]; + char tmp_filename[OS_FILE_MAX_PATH + sizeof(format_name)]; char now[32]; FILE* f; ulint i; @@ -213,7 +214,7 @@ buf_dump( srv_buf_dump_filename); ut_snprintf(tmp_filename, sizeof(tmp_filename), - "%s.incomplete", full_filename); + format_name, full_filename); buf_dump_status(STATUS_NOTICE, "Dumping buffer pool(s) to %s", full_filename); diff --git a/storage/innobase/fts/fts0pars.cc b/storage/innobase/fts/fts0pars.cc index 7f0ba4e0c1b9..f4ac4c34f222 100644 --- a/storage/innobase/fts/fts0pars.cc +++ b/storage/innobase/fts/fts0pars.cc @@ -106,8 +106,8 @@ typedef int (*fts_scanner_alt)(YYSTYPE* val, yyscan_t yyscanner); typedef int (*fts_scanner)(); struct fts_lexer_t { - fts_scanner scanner; - void* yyscanner; + fts_scanner_alt scanner; + void* yyscanner; }; @@ -1950,7 +1950,7 @@ fts_lexer_create( reinterpret_cast(query), static_cast(query_len), fts_lexer->yyscanner); - fts_lexer->scanner = reinterpret_cast(fts_blexer); + fts_lexer->scanner = fts_blexer; /* FIXME: Debugging */ /* fts0bset_debug(1 , fts_lexer->yyscanner); */ } else { @@ -1959,7 +1959,7 @@ fts_lexer_create( reinterpret_cast(query), static_cast(query_len), fts_lexer->yyscanner); - fts_lexer->scanner = reinterpret_cast(fts_tlexer); + fts_lexer->scanner = fts_tlexer; } return(fts_lexer); @@ -1973,7 +1973,7 @@ fts_lexer_free( /*===========*/ fts_lexer_t* fts_lexer) { - if (fts_lexer->scanner == (fts_scan) fts_blexer) { + if (fts_lexer->scanner == fts_blexer) { fts0blex_destroy(fts_lexer->yyscanner); } else { fts0tlex_destroy(fts_lexer->yyscanner); diff --git a/storage/innobase/fts/fts0pars.y b/storage/innobase/fts/fts0pars.y index e48036e82fe6..d2e4612b4f5e 100644 --- a/storage/innobase/fts/fts0pars.y +++ b/storage/innobase/fts/fts0pars.y @@ -52,8 +52,8 @@ typedef int (*fts_scanner_alt)(YYSTYPE* val, yyscan_t yyscanner); typedef int (*fts_scanner)(); struct fts_lexer_struct { - fts_scanner scanner; - void* yyscanner; + fts_scanner_alt scanner; + void* yyscanner; }; %} @@ -238,13 +238,13 @@ fts_lexer_create( if (boolean_mode) { fts0blex_init(&fts_lexer->yyscanner); fts0b_scan_bytes((char*) query, query_len, fts_lexer->yyscanner); - fts_lexer->scanner = (fts_scan) fts_blexer; + fts_lexer->scanner = fts_blexer; /* FIXME: Debugging */ /* fts0bset_debug(1 , fts_lexer->yyscanner); */ } else { fts0tlex_init(&fts_lexer->yyscanner); fts0t_scan_bytes((char*) query, query_len, fts_lexer->yyscanner); - fts_lexer->scanner = (fts_scan) fts_tlexer; + fts_lexer->scanner = fts_tlexer; } return(fts_lexer); @@ -258,7 +258,7 @@ fts_lexer_free( /*===========*/ fts_lexer_t* fts_lexer) { - if (fts_lexer->scanner == (fts_scan) fts_blexer) { + if (fts_lexer->scanner == fts_blexer) { fts0blex_destroy(fts_lexer->yyscanner); } else { fts0tlex_destroy(fts_lexer->yyscanner); diff --git a/storage/innobase/handler/i_s.cc b/storage/innobase/handler/i_s.cc index 659ba5aec91e..5b692267b69f 100644 --- a/storage/innobase/handler/i_s.cc +++ b/storage/innobase/handler/i_s.cc @@ -1482,7 +1482,7 @@ i_s_cmp_fill_low( static_cast(zip_stat->decompressed_usec / 1000000)); if (reset) { - memset(zip_stat, 0, sizeof *zip_stat); + memset(static_cast(zip_stat), 0, sizeof *zip_stat); } if (schema_table_store_record(thd, table)) { diff --git a/storage/innobase/include/data0type.ic b/storage/innobase/include/data0type.ic index 552d62eef003..ef92ea435175 100644 --- a/storage/innobase/include/data0type.ic +++ b/storage/innobase/include/data0type.ic @@ -544,6 +544,7 @@ dtype_get_fixed_size_low( return(0); } #endif /* UNIV_DEBUG */ + // fallthrough case DATA_CHAR: case DATA_FIXBINARY: case DATA_INT: @@ -622,6 +623,7 @@ dtype_get_min_size_low( return(0); } #endif /* UNIV_DEBUG */ + // fallthrough case DATA_CHAR: case DATA_FIXBINARY: case DATA_INT: diff --git a/storage/innobase/row/row0import.cc b/storage/innobase/row/row0import.cc index ac26c318cb22..88d572706562 100644 --- a/storage/innobase/row/row0import.cc +++ b/storage/innobase/row/row0import.cc @@ -3522,7 +3522,7 @@ row_import_for_mysql( row_import cfg; - memset(&cfg, 0x0, sizeof(cfg)); + memset(static_cast(&cfg), 0x0, sizeof(cfg)); err = row_import_read_cfg(table, trx->mysql_thd, cfg); diff --git a/storage/innobase/trx/trx0trx.cc b/storage/innobase/trx/trx0trx.cc index 45f2a1c68aaa..db68095d3f53 100644 --- a/storage/innobase/trx/trx0trx.cc +++ b/storage/innobase/trx/trx0trx.cc @@ -2430,7 +2430,8 @@ trx_get_trx_by_xid_low( /* Invalidate the XID, so that subsequent calls will not find it. */ - memset(&trx->xid, 0, sizeof(trx->xid)); + memset(static_cast(&trx->xid), 0, + sizeof(trx->xid)); trx->xid.formatID = -1; break; } diff --git a/storage/innobase/trx/trx0undo.cc b/storage/innobase/trx/trx0undo.cc index 2ddb35d5ad08..a82e6cdfdcbd 100644 --- a/storage/innobase/trx/trx0undo.cc +++ b/storage/innobase/trx/trx0undo.cc @@ -1313,7 +1313,7 @@ trx_undo_mem_create_at_db_start( /* Read X/Open XA transaction identification if it exists, or set it to NULL. */ - memset(&xid, 0, sizeof(xid)); + memset(static_cast(&xid), 0, sizeof(xid)); xid.formatID = -1; if (xid_exists == TRUE) { diff --git a/storage/myisam/mi_write.c b/storage/myisam/mi_write.c index e539c5ce914c..33c96d116ba3 100644 --- a/storage/myisam/mi_write.c +++ b/storage/myisam/mi_write.c @@ -923,7 +923,7 @@ static int keys_compare(bulk_insert_param *param, uchar *key1, uchar *key2) } -static int keys_free(uchar *key, TREE_FREE mode, bulk_insert_param *param) +static void keys_free(void* vkey, TREE_FREE mode, const void *vparam) { /* Probably I can use info->lastkey here, but I'm not sure, @@ -932,6 +932,8 @@ static int keys_free(uchar *key, TREE_FREE mode, bulk_insert_param *param) uchar lastkey[MI_MAX_KEY_BUFF]; uint keylen; MI_KEYDEF *keyinfo; + uchar *key= (uchar*)(vkey); + bulk_insert_param *param= (bulk_insert_param*)(vparam); switch (mode) { case free_init: @@ -940,19 +942,20 @@ static int keys_free(uchar *key, TREE_FREE mode, bulk_insert_param *param) mysql_rwlock_wrlock(¶m->info->s->key_root_lock[param->keynr]); param->info->s->keyinfo[param->keynr].version++; } - return 0; + return; case free_free: keyinfo=param->info->s->keyinfo+param->keynr; keylen=_mi_keylength(keyinfo, key); memcpy(lastkey, key, keylen); - return _mi_ck_write_btree(param->info,param->keynr,lastkey, - keylen - param->info->s->rec_reflength); + _mi_ck_write_btree(param->info,param->keynr,lastkey, + keylen - param->info->s->rec_reflength); + return; case free_end: if (param->info->s->concurrent_insert) mysql_rwlock_unlock(¶m->info->s->key_root_lock[param->keynr]); - return 0; + return; } - return -1; + return; } @@ -1009,7 +1012,7 @@ int mi_init_bulk_insert(MI_INFO *info, ulong cache_size, ha_rows rows) cache_size * key[i].maxlength, cache_size * key[i].maxlength, 0, (qsort_cmp2)keys_compare, 0, - (tree_element_free) keys_free, (void *)params++); + keys_free, (void *)params++); } else info->bulk_insert[i].root=0; diff --git a/storage/myisam/myisamlog.c b/storage/myisam/myisamlog.c index 92abc60f286c..7c59db877f53 100644 --- a/storage/myisam/myisamlog.c +++ b/storage/myisam/myisamlog.c @@ -62,7 +62,8 @@ static int test_if_open(struct file_info *key,element_count count, static void fix_blob_pointers(MI_INFO *isam,uchar *record); static int test_when_accessed(struct file_info *key,element_count count, struct st_access_param *access_param); -static void file_info_free(struct file_info *info); +static void file_info_free(void* key, TREE_FREE action MY_ATTRIBUTE((unused)), + const void *param MY_ATTRIBUTE((unused))); static int close_some_file(TREE *tree); static int reopen_closed_file(TREE *tree,struct file_info *file_info); static int find_record_with_key(struct file_info *file_info,uchar *record); @@ -329,7 +330,7 @@ static int examine_log(char * file_name, char **table_names) init_io_cache(&cache,file,0,READ_CACHE,start_offset,0,MYF(0)); memset(com_count, 0, sizeof(com_count)); init_tree(&tree,0,0,sizeof(file_info),(qsort_cmp2) file_info_compare,1, - (tree_element_free) file_info_free, NULL); + file_info_free, NULL); (void) init_key_cache(dflt_key_cache,KEY_CACHE_BLOCK_SIZE,KEY_CACHE_SIZE, 0, 0); @@ -749,8 +750,10 @@ static int test_when_accessed (struct file_info *key, } -static void file_info_free(struct file_info *fileinfo) +static void file_info_free(void* key, TREE_FREE action MY_ATTRIBUTE((unused)), + const void *param MY_ATTRIBUTE((unused))) { + struct file_info *fileinfo= (struct file_info*)key; DBUG_ENTER("file_info_free"); if (update) { diff --git a/storage/tokudb/PerconaFT b/storage/tokudb/PerconaFT index f02e0f418da6..6c087026e0b3 160000 --- a/storage/tokudb/PerconaFT +++ b/storage/tokudb/PerconaFT @@ -1 +1 @@ -Subproject commit f02e0f418da6a361f2fc42413094a46f2b1860e1 +Subproject commit 6c087026e0b3e9f61938a7b725f8a18a916f7575 diff --git a/unittest/gunit/decimal-t.cc b/unittest/gunit/decimal-t.cc index 5c134faf28d1..ff1b09d9f6cf 100644 --- a/unittest/gunit/decimal-t.cc +++ b/unittest/gunit/decimal-t.cc @@ -214,7 +214,7 @@ void do_test_d2f(const char *s, int ex) void do_test_d2b2d(const char *str, int p, int s, const char *orig, int ex) { char s1[100]; - char s2[100]; + char s2[164]; uchar buf[100]; char *end; int res, i, size=decimal_bin_size(p, s); @@ -247,7 +247,7 @@ void do_test_f2d(double from, int ex) void do_test_ull2d(ulonglong from, const char *orig, int ex) { char s[100]; - char s1[100]; + char s1[123]; int res; res=ulonglong2decimal(from, &a); @@ -259,7 +259,7 @@ void do_test_ull2d(ulonglong from, const char *orig, int ex) void do_test_ll2d(longlong from, const char *orig, int ex) { char s[100]; - char s1[100]; + char s1[123]; int res; res=longlong2decimal(from, &a); @@ -271,7 +271,7 @@ void do_test_ll2d(longlong from, const char *orig, int ex) void do_test_d2ull(const char *s, const char *orig, int ex) { char s1[100], *end; - char s2[100]; + char s2[154]; ulonglong x; int res; @@ -291,7 +291,7 @@ void do_test_d2ull(const char *s, const char *orig, int ex) void do_test_d2ll(const char *s, const char *orig, int ex) { char s1[100], *end; - char s2[100]; + char s2[154]; longlong x; int res; diff --git a/unittest/gunit/opt_range-t.cc b/unittest/gunit/opt_range-t.cc index c7ed2d1bc3fb..1a0c7b982776 100644 --- a/unittest/gunit/opt_range-t.cc +++ b/unittest/gunit/opt_range-t.cc @@ -105,7 +105,7 @@ class Mock_field_long : public Field_long false) // unsigned_arg { m_table_name= "mock_table"; - memset(&m_share, 0, sizeof(m_share)); + memset(static_cast(&m_share), 0, sizeof(m_share)); const char *foo= "mock_db"; m_share.db.str= const_cast(foo); m_share.db.length= strlen(m_share.db.str); @@ -114,7 +114,7 @@ class Mock_field_long : public Field_long bitmap_set_above(&share_allset, 0, 1); //all bits 1 m_share.all_set= share_allset; - memset(&m_table, 0, sizeof(m_table)); + memset(static_cast(&m_table), 0, sizeof(m_table)); m_table.s= &m_share; bitmap_init(&tbl_readset, 0, sizeof(my_bitmap_map), 0); diff --git a/unittest/gunit/table_cache-t.cc b/unittest/gunit/table_cache-t.cc index 381036efde46..2a4bde3a136b 100644 --- a/unittest/gunit/table_cache-t.cc +++ b/unittest/gunit/table_cache-t.cc @@ -125,7 +125,7 @@ class Mock_share : public TABLE_SHARE public: Mock_share(const char *key) { - memset((TABLE_SHARE *)this, 0, sizeof(TABLE_SHARE)); + memset(static_cast(this), 0, sizeof(TABLE_SHARE)); /* Both table_cache_key and cache_element array are used by Table_cache code. @@ -154,7 +154,7 @@ class Mock_share : public TABLE_SHARE { TABLE *result= (TABLE *)my_malloc(sizeof(TABLE), MYF(0)); - memset(result, 0, sizeof(TABLE)); + memset(static_cast(result), 0, sizeof(TABLE)); result->s= this; // We create TABLE which is already marked as used result->in_use= thd; From 6fd1eccf7e321516972a31e37ea062392c4da19b Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Mon, 16 Apr 2018 10:27:29 -0700 Subject: [PATCH 0775/1221] TDB-191 : Implement better compression algo testing - Implement new test that performs about as full of an end-to-end validation that the requested compression algo at the SQL layer is actually applied to the FT data files. The only practical way to check this is to use tokuftdump and look at the data files header value for compression_method. --- mysql-test/mysql-test-run.pl | 11 +++ mysql-test/suite/tokudb/r/compressions.result | 6 ++ mysql-test/suite/tokudb/t/compressions.test | 68 +++++++++++++++++++ 3 files changed, 85 insertions(+) create mode 100644 mysql-test/suite/tokudb/r/compressions.result create mode 100644 mysql-test/suite/tokudb/t/compressions.test diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index 342823f0d116..797d2f2df3ce 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -2591,6 +2591,17 @@ sub environment_setup { "$basedir/storage/rocksdb/sst_dump"); $ENV{'MYSQL_SST_DUMP'}= native_path($exe_sst_dump); + # ---------------------------------------------------- + # tokuft_dump + # ---------------------------------------------------- + my $exe_tokuftdump= + mtr_exe_maybe_exists( + vs_config_dirs('storage/tokudb/PerconaFT/tools', 'tokuftdump'), + "$path_client_bindir/tokuftdump", + "$basedir/storage/tokudb/PerconaFT/tools/tokuftdump"); + $ENV{'MYSQL_TOKUFTDUMP'}= native_path($exe_tokuftdump); + + # ---------------------------------------------------- # Setup env so childs can execute myisampack and myisamchk # ---------------------------------------------------- diff --git a/mysql-test/suite/tokudb/r/compressions.result b/mysql-test/suite/tokudb/r/compressions.result new file mode 100644 index 000000000000..87ba94ebbe81 --- /dev/null +++ b/mysql-test/suite/tokudb/r/compressions.result @@ -0,0 +1,6 @@ +CREATE TABLE t1 (a INT) ENGINE=TokuDB ROW_FORMAT=TOKUDB_UNCOMPRESSED; +CREATE TABLE t2 (a INT) ENGINE=TokuDB ROW_FORMAT=TOKUDB_SNAPPY; +CREATE TABLE t3 (a INT) ENGINE=TokuDB ROW_FORMAT=TOKUDB_QUICKLZ; +CREATE TABLE t4 (a INT) ENGINE=TokuDB ROW_FORMAT=TOKUDB_LZMA; +CREATE TABLE t5 (a INT) ENGINE=TokuDB ROW_FORMAT=TOKUDB_ZLIB; +DROP TABLE t1, t2, t3, t4, t5; diff --git a/mysql-test/suite/tokudb/t/compressions.test b/mysql-test/suite/tokudb/t/compressions.test new file mode 100644 index 000000000000..3e83cdb8b685 --- /dev/null +++ b/mysql-test/suite/tokudb/t/compressions.test @@ -0,0 +1,68 @@ +--source include/have_tokudb.inc + +# The purpose of this test is to perform about as full of an end-to-end +# validation that the requested compression algo at the SQL layer is actually +# applied to the FT data files. The only practical way to check this is to use +# tokuftdump and look at the data files header value for compression_method. +# A side effect of this is that the existance of this test will ensure that at +# no time will the compression method IDs ever change, if they do, this test +# will fail and users data will be irreparably damaged. + +# uncompressed - compression_method=0 +CREATE TABLE t1 (a INT) ENGINE=TokuDB ROW_FORMAT=TOKUDB_UNCOMPRESSED; +--let $t1_file = `SELECT internal_file_name FROM information_schema.tokudb_file_map WHERE dictionary_name = './test/t1-main'` + +# SNAPPY - compression_method=7 +CREATE TABLE t2 (a INT) ENGINE=TokuDB ROW_FORMAT=TOKUDB_SNAPPY; +--let $t2_file = `SELECT internal_file_name FROM information_schema.tokudb_file_map WHERE dictionary_name = './test/t2-main'` + +# QUICKLZ - compression_method=9 +CREATE TABLE t3 (a INT) ENGINE=TokuDB ROW_FORMAT=TOKUDB_QUICKLZ; +--let $t3_file = `SELECT internal_file_name FROM information_schema.tokudb_file_map WHERE dictionary_name = './test/t3-main'` + +# LZMA - compression_method=10 +CREATE TABLE t4 (a INT) ENGINE=TokuDB ROW_FORMAT=TOKUDB_LZMA; +--let $t4_file = `SELECT internal_file_name FROM information_schema.tokudb_file_map WHERE dictionary_name = './test/t4-main'` + +# ZLIB (without checksum) - compression_method=11 +CREATE TABLE t5 (a INT) ENGINE=TokuDB ROW_FORMAT=TOKUDB_ZLIB; +--let $t5_file = `SELECT internal_file_name FROM information_schema.tokudb_file_map WHERE dictionary_name = './test/t5-main'` + +--let $datadir = `SELECT @@global.datadir` + +# To ensure we have correct headers written to FT data files and no chance of a +# race between header rotation and tokuftdump, lets just perform a clean server +# shutdown before we go rooting around in the FT files. +--source include/shutdown_mysqld.inc + +--let SEARCH_FILE=$MYSQLTEST_VARDIR/tmp/dump + +# uncompressed - compression_method=0 +--exec $MYSQL_TOKUFTDUMP $datadir/$t1_file > $SEARCH_FILE +--let SEARCH_PATTERN=compression_method=0 +--source include/search_pattern_in_file.inc + +# SNAPPY - compression_method=7 +--exec $MYSQL_TOKUFTDUMP $datadir/$t2_file > $SEARCH_FILE +--let SEARCH_PATTERN=compression_method=7 +--source include/search_pattern_in_file.inc + +# QUICKLZ - compression_method=9 +--exec $MYSQL_TOKUFTDUMP $datadir/$t3_file > $SEARCH_FILE +--let SEARCH_PATTERN=compression_method=9 +--source include/search_pattern_in_file.inc + +# LZMA - compression_method=10 +--exec $MYSQL_TOKUFTDUMP $datadir/$t4_file > $SEARCH_FILE +--let SEARCH_PATTERN=compression_method=10 +--source include/search_pattern_in_file.inc + +# ZLIB (without checksum) - compression_method=11 +--exec $MYSQL_TOKUFTDUMP $datadir/$t5_file > $SEARCH_FILE +--let SEARCH_PATTERN=compression_method=11 +--source include/search_pattern_in_file.inc + +--remove_file $SEARCH_FILE +--source include/start_mysqld.inc + +DROP TABLE t1, t2, t3, t4, t5; From 38575ac9504b80fb1c7efd1e582fb91b882406cb Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Wed, 18 Apr 2018 10:26:54 -0700 Subject: [PATCH 0776/1221] PS-3957 : TokuDB tests skipped because they expect non-default binlog format - These tests were located in tokudb.bugs suite which does not have binlog_format in the suite combinations like tokudb.rpl does. By all appearances, these tests are located in the wrong suite, and as such, only one of the tests would ever run depending on the value of binlog_format of the running server instance. Moved the tests to the tokudb.rpl suite and re-recorded as necessary to pick up new server warnings that were never recorded because the tests were never run. --- .../r/rpl_mixed_replace_into.result} | 0 .../{tokudb.bugs => tokudb.rpl}/r/rpl_row_replace_into.result | 3 +++ .../r/rpl_stmt_replace_into.result} | 3 +++ .../{tokudb.bugs => tokudb.rpl}/t/rpl_mixed_replace_into.test | 0 .../{tokudb.bugs => tokudb.rpl}/t/rpl_row_replace_into.test | 0 .../{tokudb.bugs => tokudb.rpl}/t/rpl_stmt_replace_into.test | 0 6 files changed, 6 insertions(+) rename mysql-test/suite/{tokudb.bugs/r/rpl_stmt_replace_into.result => tokudb.rpl/r/rpl_mixed_replace_into.result} (100%) rename mysql-test/suite/{tokudb.bugs => tokudb.rpl}/r/rpl_row_replace_into.result (58%) rename mysql-test/suite/{tokudb.bugs/r/rpl_mixed_replace_into.result => tokudb.rpl/r/rpl_stmt_replace_into.result} (58%) rename mysql-test/suite/{tokudb.bugs => tokudb.rpl}/t/rpl_mixed_replace_into.test (100%) rename mysql-test/suite/{tokudb.bugs => tokudb.rpl}/t/rpl_row_replace_into.test (100%) rename mysql-test/suite/{tokudb.bugs => tokudb.rpl}/t/rpl_stmt_replace_into.test (100%) diff --git a/mysql-test/suite/tokudb.bugs/r/rpl_stmt_replace_into.result b/mysql-test/suite/tokudb.rpl/r/rpl_mixed_replace_into.result similarity index 100% rename from mysql-test/suite/tokudb.bugs/r/rpl_stmt_replace_into.result rename to mysql-test/suite/tokudb.rpl/r/rpl_mixed_replace_into.result diff --git a/mysql-test/suite/tokudb.bugs/r/rpl_row_replace_into.result b/mysql-test/suite/tokudb.rpl/r/rpl_row_replace_into.result similarity index 58% rename from mysql-test/suite/tokudb.bugs/r/rpl_row_replace_into.result rename to mysql-test/suite/tokudb.rpl/r/rpl_row_replace_into.result index b1482aa01442..0f944801ebf7 100644 --- a/mysql-test/suite/tokudb.bugs/r/rpl_row_replace_into.result +++ b/mysql-test/suite/tokudb.rpl/r/rpl_row_replace_into.result @@ -1,4 +1,7 @@ include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. [connection master] set default_storage_engine='tokudb'; drop table if exists testr; diff --git a/mysql-test/suite/tokudb.bugs/r/rpl_mixed_replace_into.result b/mysql-test/suite/tokudb.rpl/r/rpl_stmt_replace_into.result similarity index 58% rename from mysql-test/suite/tokudb.bugs/r/rpl_mixed_replace_into.result rename to mysql-test/suite/tokudb.rpl/r/rpl_stmt_replace_into.result index b1482aa01442..0f944801ebf7 100644 --- a/mysql-test/suite/tokudb.bugs/r/rpl_mixed_replace_into.result +++ b/mysql-test/suite/tokudb.rpl/r/rpl_stmt_replace_into.result @@ -1,4 +1,7 @@ include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. [connection master] set default_storage_engine='tokudb'; drop table if exists testr; diff --git a/mysql-test/suite/tokudb.bugs/t/rpl_mixed_replace_into.test b/mysql-test/suite/tokudb.rpl/t/rpl_mixed_replace_into.test similarity index 100% rename from mysql-test/suite/tokudb.bugs/t/rpl_mixed_replace_into.test rename to mysql-test/suite/tokudb.rpl/t/rpl_mixed_replace_into.test diff --git a/mysql-test/suite/tokudb.bugs/t/rpl_row_replace_into.test b/mysql-test/suite/tokudb.rpl/t/rpl_row_replace_into.test similarity index 100% rename from mysql-test/suite/tokudb.bugs/t/rpl_row_replace_into.test rename to mysql-test/suite/tokudb.rpl/t/rpl_row_replace_into.test diff --git a/mysql-test/suite/tokudb.bugs/t/rpl_stmt_replace_into.test b/mysql-test/suite/tokudb.rpl/t/rpl_stmt_replace_into.test similarity index 100% rename from mysql-test/suite/tokudb.bugs/t/rpl_stmt_replace_into.test rename to mysql-test/suite/tokudb.rpl/t/rpl_stmt_replace_into.test From 8d497e5f41abf0a8fc1ab1bab66c317c40363fd2 Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Wed, 18 Apr 2018 13:46:49 -0700 Subject: [PATCH 0777/1221] TDB-193 : Handlerton. trx->tokudb_lock_count > 0 - Commit https://github.com/percona/percona-server/commit/530b938570593d661c496978bd4d59c8695a5e83 for TDB-129 incorrectly removed 5.5 and MariaDB specific compile out guards for code that should not exist within Percona Server 5.7. This eventually leads to the assertion in the issue report when an the FT layer returns an error during an alter table. --- mysql-test/suite/tokudb.bugs/r/TDB-193.result | 11 ++++++++++ .../suite/tokudb.bugs/t/TDB-193-master.opt | 1 + mysql-test/suite/tokudb.bugs/t/TDB-193.test | 20 +++++++++++++++++++ storage/tokudb/ha_tokudb_alter.cc | 9 --------- 4 files changed, 32 insertions(+), 9 deletions(-) create mode 100644 mysql-test/suite/tokudb.bugs/r/TDB-193.result create mode 100644 mysql-test/suite/tokudb.bugs/t/TDB-193-master.opt create mode 100644 mysql-test/suite/tokudb.bugs/t/TDB-193.test diff --git a/mysql-test/suite/tokudb.bugs/r/TDB-193.result b/mysql-test/suite/tokudb.bugs/r/TDB-193.result new file mode 100644 index 000000000000..879a7f0dd8c8 --- /dev/null +++ b/mysql-test/suite/tokudb.bugs/r/TDB-193.result @@ -0,0 +1,11 @@ +CREATE TABLE t(a INT, b INT, c CHAR(1), d CHAR (1), e VARCHAR(1), f VARCHAR(1), g BLOB, h BLOB, id INT, KEY(b), CLUSTERING KEY(e)) ENGINE=TokuDB; +ALTER TABLE t CHANGE COLUMN a a CHAR(1); +ERROR HY000: Error on rename of './test/t' to './test/#sql-temporary' (errno: -100000 - Unknown error -100000) +CREATE TABLE t(k INT, uq INT, UNIQUE KEY ix1 (uq)) ENGINE=InnoDB; +ERROR 42S01: Table 't' already exists +DROP TABLE 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,t41,t42,t43,t44,t45,t46,t47,t48,t49,t50,t51,t52,t53,t54,t55,t56,t57,t58,t59,t60,t61,t62,t63,t64,t65,t66,t67,t68,t69,t70,t71,t72,t73,t74,t75,t76,t77,t78,t79,t80,t81,t82,t83,t84,t85,t86,t87,t88,t89,t90,t91,t92,t93,t94,t95,t96,t97,t98,t99,t100,t101,t102,t103,t104,t105,t106,t107,t108,t109,t110,t111,t112,t113,t114,t115,t116,t117,t118,t119,t120,t121,t122,t123,t124,t125,t126,t127,t128,t129,t130,t131,t132,t133,t134,t135,t136,t137,t138,t139,t140,t141,t142,t143,t144,t145,t146,t147,t148,t149,t150,t151,t152,t153,t154,t155,t156,t157,t158,t159,t160,t161,t162,t163,t164,t165,t166,t167,t168,t169,t170,t171,t172,t173,t174,t175,t176,t177,t178,t179,t180,t181,t182,t183,t184,t185,t186,t187,t188,t189,t190,t191,t192,t193,t194,t195,t196,t197,t198,t199,t200,t201,t202,t203,t204,t205,t206,t207,t208,t209,t210,t211,t212,t213,t214,t215,t216,t217,t218,t219,t220,t221,t222,t223,t224,t225,t226,t227,t228,t229,t230,t231,t232,t233,t234,t235,t236,t237,t238,t239,t240,t241,t242,t243,t244,t245,t246,t247,t248,t249,t250,t251,t252,t253,t254,t255,t256,t257,t00; +ERROR 42S02: Unknown table 'test.t1,test.t2,test.t3,test.t4,test.t5,test.t6,test.t7,test.t8,test.t9,test.t10,test.t11,test.t12,t' +ALTER TABLE t ADD KEY bk(b); +Warnings: +Warning 1831 Duplicate index 'bk' defined on the table 'test.t'. This is deprecated and will be disallowed in a future release. +DROP TABLE t; diff --git a/mysql-test/suite/tokudb.bugs/t/TDB-193-master.opt b/mysql-test/suite/tokudb.bugs/t/TDB-193-master.opt new file mode 100644 index 000000000000..fc702dcb672c --- /dev/null +++ b/mysql-test/suite/tokudb.bugs/t/TDB-193-master.opt @@ -0,0 +1 @@ +--loose-tokudb-max-lock-memory=1023 diff --git a/mysql-test/suite/tokudb.bugs/t/TDB-193.test b/mysql-test/suite/tokudb.bugs/t/TDB-193.test new file mode 100644 index 000000000000..871a38b982ca --- /dev/null +++ b/mysql-test/suite/tokudb.bugs/t/TDB-193.test @@ -0,0 +1,20 @@ +--source include/have_tokudb.inc + +CREATE TABLE t(a INT, b INT, c CHAR(1), d CHAR (1), e VARCHAR(1), f VARCHAR(1), g BLOB, h BLOB, id INT, KEY(b), CLUSTERING KEY(e)) ENGINE=TokuDB; + +# this will return error -10000 from PerconaFT which is TOKUDB_OUT_OF_LOCKS but +# mtr does not allow a negative value to be passed to --error, so, disable error +# handling for now +--disable_abort_on_error +--replace_regex /#sql[0-9a-f_-]*/#sql-temporary/ +ALTER TABLE t CHANGE COLUMN a a CHAR(1); +--enable_abort_on_error +--error ER_TABLE_EXISTS_ERROR +CREATE TABLE t(k INT, uq INT, UNIQUE KEY ix1 (uq)) ENGINE=InnoDB; +--error ER_BAD_TABLE_ERROR +DROP TABLE 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,t41,t42,t43,t44,t45,t46,t47,t48,t49,t50,t51,t52,t53,t54,t55,t56,t57,t58,t59,t60,t61,t62,t63,t64,t65,t66,t67,t68,t69,t70,t71,t72,t73,t74,t75,t76,t77,t78,t79,t80,t81,t82,t83,t84,t85,t86,t87,t88,t89,t90,t91,t92,t93,t94,t95,t96,t97,t98,t99,t100,t101,t102,t103,t104,t105,t106,t107,t108,t109,t110,t111,t112,t113,t114,t115,t116,t117,t118,t119,t120,t121,t122,t123,t124,t125,t126,t127,t128,t129,t130,t131,t132,t133,t134,t135,t136,t137,t138,t139,t140,t141,t142,t143,t144,t145,t146,t147,t148,t149,t150,t151,t152,t153,t154,t155,t156,t157,t158,t159,t160,t161,t162,t163,t164,t165,t166,t167,t168,t169,t170,t171,t172,t173,t174,t175,t176,t177,t178,t179,t180,t181,t182,t183,t184,t185,t186,t187,t188,t189,t190,t191,t192,t193,t194,t195,t196,t197,t198,t199,t200,t201,t202,t203,t204,t205,t206,t207,t208,t209,t210,t211,t212,t213,t214,t215,t216,t217,t218,t219,t220,t221,t222,t223,t224,t225,t226,t227,t228,t229,t230,t231,t232,t233,t234,t235,t236,t237,t238,t239,t240,t241,t242,t243,t244,t245,t246,t247,t248,t249,t250,t251,t252,t253,t254,t255,t256,t257,t00; + +# TokuDB commit_inplace_alter would assert here with trx->tokudb_lock_count > 0 +ALTER TABLE t ADD KEY bk(b); + +DROP TABLE t; diff --git a/storage/tokudb/ha_tokudb_alter.cc b/storage/tokudb/ha_tokudb_alter.cc index 06e7e46c9b55..ce03331fdd3a 100644 --- a/storage/tokudb/ha_tokudb_alter.cc +++ b/storage/tokudb/ha_tokudb_alter.cc @@ -1503,15 +1503,6 @@ bool ha_tokudb::commit_inplace_alter_table( if (ha_alter_info->group_commit_ctx) { ha_alter_info->group_commit_ctx = NULL; } - int error = write_frm_data( - share->status_block, - ctx->alter_txn, - altered_table->s->path.str); - if (error) { - commit = false; - result = true; - print_error(error, MYF(0)); - } } if (!commit) { From b0b71ef19ba0c37c146b8e342af10aa934c31bb6 Mon Sep 17 00:00:00 2001 From: Yura Sorokin Date: Thu, 19 Apr 2018 14:39:41 +0300 Subject: [PATCH 0778/1221] Fixed PS-3959 (Installing QRT plugins causes server crash) https://jira.percona.com/browse/PS-3959 When only the audit part of the QRT plugin ('QUERY_RESPONSE_TIME_AUDIT') was installed "INSTALL PLUGIN QUERY_RESPONSE_TIME_AUDIT SONAME 'query_response_time.so'", server used to crash in 'query_response_time_audit_notify()' as 'session_stats' plugin session variable used in this function was not registered by MySQL plugin loading system in THD. This used to happen because this variable was declared in another part of the same plugin - 'QUERY_RESPONSE_TIME'. Fixed by introducing a new global flag 'qrt_vars_initialized' indicating whether all the plugin variables from 'QUERY_RESPONSE_TIME' were registered and initialized and it is safe to access them. 'query_response_time_should_log()' now attempts to access 'session_stats' variable only if this flag is set. If it is not set, its value considered to be 'OFF'. In addition, fixed problem with declaring 'session_stat_names' array without terminating 'NullS'. Added new MTR test case 'query_response_time.install_query_response_time' which simulates the scenario reported in the original bug description. --- plugin/query_response_time/plugin.cc | 62 +++++++++++++++++-- .../install_query_response_time-master.opt | 1 + .../mtr/install_query_response_time.result | 11 ++++ .../mtr/install_query_response_time.test | 22 +++++++ 4 files changed, 91 insertions(+), 5 deletions(-) create mode 100644 plugin/query_response_time/tests/mtr/install_query_response_time-master.opt create mode 100644 plugin/query_response_time/tests/mtr/install_query_response_time.result create mode 100644 plugin/query_response_time/tests/mtr/install_query_response_time.test diff --git a/plugin/query_response_time/plugin.cc b/plugin/query_response_time/plugin.cc index 05586e554f0a..f169cfe26c01 100644 --- a/plugin/query_response_time/plugin.cc +++ b/plugin/query_response_time/plugin.cc @@ -29,6 +29,46 @@ ulong opt_query_response_time_range_base= QRT_DEFAULT_BASE; static my_bool opt_query_response_time_stats= FALSE; static my_bool opt_query_response_time_flush= FALSE; +class qrt_atomic_flag +{ + public: + explicit qrt_atomic_flag(bool initial_value): + value_(initial_value ? 1 : 0) + { + my_atomic_rwlock_init(&lock_); + } + ~qrt_atomic_flag() + { + my_atomic_rwlock_destroy(&lock_); + } + void set() + { + my_atomic_rwlock_wrlock(&lock_); + my_atomic_store32(&value_, 1); + my_atomic_rwlock_wrunlock(&lock_); + } + void clear() + { + my_atomic_rwlock_wrlock(&lock_); + my_atomic_store32(&value_, 0); + my_atomic_rwlock_wrunlock(&lock_); + } + bool is_set() const + { + my_atomic_rwlock_rdlock(&lock_); + int32 res= my_atomic_load32(const_cast(&value_)); + my_atomic_rwlock_rdunlock(&lock_); + return res != 0; + } + + private: + qrt_atomic_flag(const qrt_atomic_flag&); + qrt_atomic_flag& operator = (const qrt_atomic_flag&); + + mutable my_atomic_rwlock_t lock_; + volatile int32 value_; +}; +static qrt_atomic_flag qrt_vars_initialized(false); static void query_response_time_flush_update( MYSQL_THD thd __attribute__((unused)), @@ -69,7 +109,7 @@ enum session_stat session_stat_off }; -static const char *session_stat_names[]= {"GLOBAL", "ON", "OFF"}; +static const char *session_stat_names[]= {"GLOBAL", "ON", "OFF", NullS}; static TYPELIB session_stat_typelib= { array_elements(session_stat_names) - 1, "", session_stat_names, NULL}; @@ -140,6 +180,12 @@ static int query_response_time_info_init(void *p) return 0; } +static int query_response_time_info_init_main(void *p) +{ + int res= query_response_time_info_init(p); + qrt_vars_initialized.set(); + return res; +} static int query_response_time_info_deinit(void *arg __attribute__((unused))) { @@ -148,14 +194,20 @@ static int query_response_time_info_deinit(void *arg __attribute__((unused))) return 0; } +static int query_response_time_info_deinit_main(void *arg) +{ + qrt_vars_initialized.clear(); + return query_response_time_info_deinit(arg); +} static struct st_mysql_information_schema query_response_time_info_descriptor= { MYSQL_INFORMATION_SCHEMA_INTERFACE_VERSION }; static bool query_response_time_should_log(MYSQL_THD thd) { - const enum session_stat session_stat_val - = static_cast(THDVAR(thd, session_stats)); + const enum session_stat session_stat_val= qrt_vars_initialized.is_set() ? + static_cast(THDVAR(thd, session_stats)) : + session_stat_off; return (session_stat_val == session_stat_on) || (session_stat_val == session_stat_global && opt_query_response_time_stats); @@ -243,8 +295,8 @@ mysql_declare_plugin(query_response_time) "Percona and Sergey Vojtovich", "Query Response Time Distribution INFORMATION_SCHEMA Plugin", PLUGIN_LICENSE_GPL, - query_response_time_info_init, - query_response_time_info_deinit, + query_response_time_info_init_main, + query_response_time_info_deinit_main, 0x0100, NULL, query_response_time_info_vars, diff --git a/plugin/query_response_time/tests/mtr/install_query_response_time-master.opt b/plugin/query_response_time/tests/mtr/install_query_response_time-master.opt new file mode 100644 index 000000000000..e73289b5c465 --- /dev/null +++ b/plugin/query_response_time/tests/mtr/install_query_response_time-master.opt @@ -0,0 +1 @@ +--plugin_load= diff --git a/plugin/query_response_time/tests/mtr/install_query_response_time.result b/plugin/query_response_time/tests/mtr/install_query_response_time.result new file mode 100644 index 000000000000..8fbe5a8fcc47 --- /dev/null +++ b/plugin/query_response_time/tests/mtr/install_query_response_time.result @@ -0,0 +1,11 @@ +# +# Bug PS-3959 "Installing QRT plugins causes server crash" +# https://jira.percona.com/browse/PS-3959 +# +include/assert.inc [QUERY_RESPONSE_TIME_AUDIT must not be present on startup] +INSTALL PLUGIN QUERY_RESPONSE_TIME_AUDIT SONAME 'query_response_time.so'; +include/assert.inc [QUERY_RESPONSE_TIME_AUDIT must be active] +UNINSTALL PLUGIN QUERY_RESPONSE_TIME_AUDIT; +Warnings: +Warning 1620 Plugin is busy and will be uninstalled on shutdown +include/assert.inc [QUERY_RESPONSE_TIME_AUDIT must not be present after uninstall] diff --git a/plugin/query_response_time/tests/mtr/install_query_response_time.test b/plugin/query_response_time/tests/mtr/install_query_response_time.test new file mode 100644 index 000000000000..e4eef62c4c72 --- /dev/null +++ b/plugin/query_response_time/tests/mtr/install_query_response_time.test @@ -0,0 +1,22 @@ +--echo # +--echo # Bug PS-3959 "Installing QRT plugins causes server crash" +--echo # https://jira.percona.com/browse/PS-3959 +--echo # + +--source include/have_query_response_time_plugin.inc + +--let $assert_text= QUERY_RESPONSE_TIME_AUDIT must not be present on startup +--let $assert_cond= "[SELECT COUNT(*) FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = \'QUERY_RESPONSE_TIME_AUDIT\']" = 0 +--source include/assert.inc + +--replace_regex /\.dll/.so/ +eval INSTALL PLUGIN QUERY_RESPONSE_TIME_AUDIT SONAME '$PLUGIN_QUERY_RESPONSE_TIME'; +--let $assert_text= QUERY_RESPONSE_TIME_AUDIT must be active +--let $assert_cond= "[SELECT COUNT(*) FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = \'QUERY_RESPONSE_TIME_AUDIT\' AND PLUGIN_STATUS = \'ACTIVE\']" = 1 +--source include/assert.inc + +UNINSTALL PLUGIN QUERY_RESPONSE_TIME_AUDIT; + +--let $assert_text= QUERY_RESPONSE_TIME_AUDIT must not be present after uninstall +--let $assert_cond= "[SELECT COUNT(*) FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = \'QUERY_RESPONSE_TIME_AUDIT\']" = 0 +--source include/assert.inc From 42eff2c530afbffbc29dd7235035536cbd4b9317 Mon Sep 17 00:00:00 2001 From: Yura Sorokin Date: Thu, 19 Apr 2018 14:39:41 +0300 Subject: [PATCH 0779/1221] Fixed PS-3959 (Installing QRT plugins causes server crash) https://jira.percona.com/browse/PS-3959 When only the audit part of the QRT plugin ('QUERY_RESPONSE_TIME_AUDIT') was installed "INSTALL PLUGIN QUERY_RESPONSE_TIME_AUDIT SONAME 'query_response_time.so'", server used to crash in 'query_response_time_audit_notify()' as 'session_stats' plugin session variable used in this function was not registered by MySQL plugin loading system in THD. This used to happen because this variable was declared in another part of the same plugin - 'QUERY_RESPONSE_TIME'. Fixed by introducing a new global flag 'qrt_vars_initialized' indicating whether all the plugin variables from 'QUERY_RESPONSE_TIME' were registered and initialized and it is safe to access them. 'query_response_time_should_log()' now attempts to access 'session_stats' variable only if this flag is set. If it is not set, its value considered to be 'OFF'. In addition, fixed problem with declaring 'session_stat_names' array without terminating 'NullS'. Added new MTR test case 'query_response_time.install_query_response_time' which simulates the scenario reported in the original bug description. --- plugin/query_response_time/plugin.cc | 49 +++++++++++++++++-- .../install_query_response_time-master.opt | 1 + .../mtr/install_query_response_time.result | 11 +++++ .../mtr/install_query_response_time.test | 22 +++++++++ 4 files changed, 78 insertions(+), 5 deletions(-) create mode 100644 plugin/query_response_time/tests/mtr/install_query_response_time-master.opt create mode 100644 plugin/query_response_time/tests/mtr/install_query_response_time.result create mode 100644 plugin/query_response_time/tests/mtr/install_query_response_time.test diff --git a/plugin/query_response_time/plugin.cc b/plugin/query_response_time/plugin.cc index 6499bbcb224c..6492fddbeb67 100644 --- a/plugin/query_response_time/plugin.cc +++ b/plugin/query_response_time/plugin.cc @@ -30,6 +30,33 @@ ulong opt_query_response_time_range_base= QRT_DEFAULT_BASE; static my_bool opt_query_response_time_stats= FALSE; static my_bool opt_query_response_time_flush= FALSE; +class qrt_atomic_flag +{ + public: + explicit qrt_atomic_flag(bool initial_value): + value_(initial_value ? 1 : 0) + {} + void set() + { + my_atomic_store32(&value_, 1); + } + void clear() + { + my_atomic_store32(&value_, 0); + } + bool is_set() const + { + int32 res= my_atomic_load32(const_cast(&value_)); + return res != 0; + } + + private: + qrt_atomic_flag(const qrt_atomic_flag&); + qrt_atomic_flag& operator = (const qrt_atomic_flag&); + + volatile int32 value_; +}; +static qrt_atomic_flag qrt_vars_initialized(false); static void query_response_time_flush_update( MYSQL_THD thd __attribute__((unused)), @@ -70,7 +97,7 @@ enum session_stat session_stat_off }; -static const char *session_stat_names[]= {"GLOBAL", "ON", "OFF"}; +static const char *session_stat_names[]= {"GLOBAL", "ON", "OFF", NullS}; static TYPELIB session_stat_typelib= { array_elements(session_stat_names) - 1, "", session_stat_names, NULL}; @@ -141,6 +168,12 @@ static int query_response_time_info_init(void *p) return 0; } +static int query_response_time_info_init_main(void *p) +{ + int res= query_response_time_info_init(p); + qrt_vars_initialized.set(); + return res; +} static int query_response_time_info_deinit(void *arg __attribute__((unused))) { @@ -149,14 +182,20 @@ static int query_response_time_info_deinit(void *arg __attribute__((unused))) return 0; } +static int query_response_time_info_deinit_main(void *arg) +{ + qrt_vars_initialized.clear(); + return query_response_time_info_deinit(arg); +} static struct st_mysql_information_schema query_response_time_info_descriptor= { MYSQL_INFORMATION_SCHEMA_INTERFACE_VERSION }; static bool query_response_time_should_log(MYSQL_THD thd) { - const enum session_stat session_stat_val - = static_cast(THDVAR(thd, session_stats)); + const enum session_stat session_stat_val= qrt_vars_initialized.is_set() ? + static_cast(THDVAR(thd, session_stats)) : + session_stat_off; return (session_stat_val == session_stat_on) || (session_stat_val == session_stat_global && opt_query_response_time_stats); @@ -244,8 +283,8 @@ mysql_declare_plugin(query_response_time) "Percona and Sergey Vojtovich", "Query Response Time Distribution INFORMATION_SCHEMA Plugin", PLUGIN_LICENSE_GPL, - query_response_time_info_init, - query_response_time_info_deinit, + query_response_time_info_init_main, + query_response_time_info_deinit_main, 0x0100, NULL, query_response_time_info_vars, diff --git a/plugin/query_response_time/tests/mtr/install_query_response_time-master.opt b/plugin/query_response_time/tests/mtr/install_query_response_time-master.opt new file mode 100644 index 000000000000..e73289b5c465 --- /dev/null +++ b/plugin/query_response_time/tests/mtr/install_query_response_time-master.opt @@ -0,0 +1 @@ +--plugin_load= diff --git a/plugin/query_response_time/tests/mtr/install_query_response_time.result b/plugin/query_response_time/tests/mtr/install_query_response_time.result new file mode 100644 index 000000000000..8fbe5a8fcc47 --- /dev/null +++ b/plugin/query_response_time/tests/mtr/install_query_response_time.result @@ -0,0 +1,11 @@ +# +# Bug PS-3959 "Installing QRT plugins causes server crash" +# https://jira.percona.com/browse/PS-3959 +# +include/assert.inc [QUERY_RESPONSE_TIME_AUDIT must not be present on startup] +INSTALL PLUGIN QUERY_RESPONSE_TIME_AUDIT SONAME 'query_response_time.so'; +include/assert.inc [QUERY_RESPONSE_TIME_AUDIT must be active] +UNINSTALL PLUGIN QUERY_RESPONSE_TIME_AUDIT; +Warnings: +Warning 1620 Plugin is busy and will be uninstalled on shutdown +include/assert.inc [QUERY_RESPONSE_TIME_AUDIT must not be present after uninstall] diff --git a/plugin/query_response_time/tests/mtr/install_query_response_time.test b/plugin/query_response_time/tests/mtr/install_query_response_time.test new file mode 100644 index 000000000000..e4eef62c4c72 --- /dev/null +++ b/plugin/query_response_time/tests/mtr/install_query_response_time.test @@ -0,0 +1,22 @@ +--echo # +--echo # Bug PS-3959 "Installing QRT plugins causes server crash" +--echo # https://jira.percona.com/browse/PS-3959 +--echo # + +--source include/have_query_response_time_plugin.inc + +--let $assert_text= QUERY_RESPONSE_TIME_AUDIT must not be present on startup +--let $assert_cond= "[SELECT COUNT(*) FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = \'QUERY_RESPONSE_TIME_AUDIT\']" = 0 +--source include/assert.inc + +--replace_regex /\.dll/.so/ +eval INSTALL PLUGIN QUERY_RESPONSE_TIME_AUDIT SONAME '$PLUGIN_QUERY_RESPONSE_TIME'; +--let $assert_text= QUERY_RESPONSE_TIME_AUDIT must be active +--let $assert_cond= "[SELECT COUNT(*) FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = \'QUERY_RESPONSE_TIME_AUDIT\' AND PLUGIN_STATUS = \'ACTIVE\']" = 1 +--source include/assert.inc + +UNINSTALL PLUGIN QUERY_RESPONSE_TIME_AUDIT; + +--let $assert_text= QUERY_RESPONSE_TIME_AUDIT must not be present after uninstall +--let $assert_cond= "[SELECT COUNT(*) FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = \'QUERY_RESPONSE_TIME_AUDIT\']" = 0 +--source include/assert.inc From 6d54e501ab4c84a1926a03769b58338b837f0af3 Mon Sep 17 00:00:00 2001 From: Yura Sorokin Date: Thu, 19 Apr 2018 14:39:41 +0300 Subject: [PATCH 0780/1221] Fixed PS-3959 (Installing QRT plugins causes server crash) https://jira.percona.com/browse/PS-3959 When only the audit part of the QRT plugin ('QUERY_RESPONSE_TIME_AUDIT') was installed "INSTALL PLUGIN QUERY_RESPONSE_TIME_AUDIT SONAME 'query_response_time.so'", server used to crash in 'query_response_time_audit_notify()' as 'session_stats' plugin session variable used in this function was not registered by MySQL plugin loading system in THD. This used to happen because this variable was declared in another part of the same plugin - 'QUERY_RESPONSE_TIME'. Fixed by introducing a new global flag 'qrt_vars_initialized' indicating whether all the plugin variables from 'QUERY_RESPONSE_TIME' were registered and initialized and it is safe to access them. 'query_response_time_should_log()' now attempts to access 'session_stats' variable only if this flag is set. If it is not set, its value considered to be 'OFF'. In addition, fixed problem with declaring 'session_stat_names' array without terminating 'NullS'. Added new MTR test case 'query_response_time.install_query_response_time' which simulates the scenario reported in the original bug description. --- plugin/query_response_time/plugin.cc | 49 +++++++++++++++++-- .../install_query_response_time-master.opt | 1 + .../mtr/install_query_response_time.result | 11 +++++ .../mtr/install_query_response_time.test | 22 +++++++++ 4 files changed, 78 insertions(+), 5 deletions(-) create mode 100644 plugin/query_response_time/tests/mtr/install_query_response_time-master.opt create mode 100644 plugin/query_response_time/tests/mtr/install_query_response_time.result create mode 100644 plugin/query_response_time/tests/mtr/install_query_response_time.test diff --git a/plugin/query_response_time/plugin.cc b/plugin/query_response_time/plugin.cc index 6499bbcb224c..6492fddbeb67 100644 --- a/plugin/query_response_time/plugin.cc +++ b/plugin/query_response_time/plugin.cc @@ -30,6 +30,33 @@ ulong opt_query_response_time_range_base= QRT_DEFAULT_BASE; static my_bool opt_query_response_time_stats= FALSE; static my_bool opt_query_response_time_flush= FALSE; +class qrt_atomic_flag +{ + public: + explicit qrt_atomic_flag(bool initial_value): + value_(initial_value ? 1 : 0) + {} + void set() + { + my_atomic_store32(&value_, 1); + } + void clear() + { + my_atomic_store32(&value_, 0); + } + bool is_set() const + { + int32 res= my_atomic_load32(const_cast(&value_)); + return res != 0; + } + + private: + qrt_atomic_flag(const qrt_atomic_flag&); + qrt_atomic_flag& operator = (const qrt_atomic_flag&); + + volatile int32 value_; +}; +static qrt_atomic_flag qrt_vars_initialized(false); static void query_response_time_flush_update( MYSQL_THD thd __attribute__((unused)), @@ -70,7 +97,7 @@ enum session_stat session_stat_off }; -static const char *session_stat_names[]= {"GLOBAL", "ON", "OFF"}; +static const char *session_stat_names[]= {"GLOBAL", "ON", "OFF", NullS}; static TYPELIB session_stat_typelib= { array_elements(session_stat_names) - 1, "", session_stat_names, NULL}; @@ -141,6 +168,12 @@ static int query_response_time_info_init(void *p) return 0; } +static int query_response_time_info_init_main(void *p) +{ + int res= query_response_time_info_init(p); + qrt_vars_initialized.set(); + return res; +} static int query_response_time_info_deinit(void *arg __attribute__((unused))) { @@ -149,14 +182,20 @@ static int query_response_time_info_deinit(void *arg __attribute__((unused))) return 0; } +static int query_response_time_info_deinit_main(void *arg) +{ + qrt_vars_initialized.clear(); + return query_response_time_info_deinit(arg); +} static struct st_mysql_information_schema query_response_time_info_descriptor= { MYSQL_INFORMATION_SCHEMA_INTERFACE_VERSION }; static bool query_response_time_should_log(MYSQL_THD thd) { - const enum session_stat session_stat_val - = static_cast(THDVAR(thd, session_stats)); + const enum session_stat session_stat_val= qrt_vars_initialized.is_set() ? + static_cast(THDVAR(thd, session_stats)) : + session_stat_off; return (session_stat_val == session_stat_on) || (session_stat_val == session_stat_global && opt_query_response_time_stats); @@ -244,8 +283,8 @@ mysql_declare_plugin(query_response_time) "Percona and Sergey Vojtovich", "Query Response Time Distribution INFORMATION_SCHEMA Plugin", PLUGIN_LICENSE_GPL, - query_response_time_info_init, - query_response_time_info_deinit, + query_response_time_info_init_main, + query_response_time_info_deinit_main, 0x0100, NULL, query_response_time_info_vars, diff --git a/plugin/query_response_time/tests/mtr/install_query_response_time-master.opt b/plugin/query_response_time/tests/mtr/install_query_response_time-master.opt new file mode 100644 index 000000000000..e73289b5c465 --- /dev/null +++ b/plugin/query_response_time/tests/mtr/install_query_response_time-master.opt @@ -0,0 +1 @@ +--plugin_load= diff --git a/plugin/query_response_time/tests/mtr/install_query_response_time.result b/plugin/query_response_time/tests/mtr/install_query_response_time.result new file mode 100644 index 000000000000..8fbe5a8fcc47 --- /dev/null +++ b/plugin/query_response_time/tests/mtr/install_query_response_time.result @@ -0,0 +1,11 @@ +# +# Bug PS-3959 "Installing QRT plugins causes server crash" +# https://jira.percona.com/browse/PS-3959 +# +include/assert.inc [QUERY_RESPONSE_TIME_AUDIT must not be present on startup] +INSTALL PLUGIN QUERY_RESPONSE_TIME_AUDIT SONAME 'query_response_time.so'; +include/assert.inc [QUERY_RESPONSE_TIME_AUDIT must be active] +UNINSTALL PLUGIN QUERY_RESPONSE_TIME_AUDIT; +Warnings: +Warning 1620 Plugin is busy and will be uninstalled on shutdown +include/assert.inc [QUERY_RESPONSE_TIME_AUDIT must not be present after uninstall] diff --git a/plugin/query_response_time/tests/mtr/install_query_response_time.test b/plugin/query_response_time/tests/mtr/install_query_response_time.test new file mode 100644 index 000000000000..e4eef62c4c72 --- /dev/null +++ b/plugin/query_response_time/tests/mtr/install_query_response_time.test @@ -0,0 +1,22 @@ +--echo # +--echo # Bug PS-3959 "Installing QRT plugins causes server crash" +--echo # https://jira.percona.com/browse/PS-3959 +--echo # + +--source include/have_query_response_time_plugin.inc + +--let $assert_text= QUERY_RESPONSE_TIME_AUDIT must not be present on startup +--let $assert_cond= "[SELECT COUNT(*) FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = \'QUERY_RESPONSE_TIME_AUDIT\']" = 0 +--source include/assert.inc + +--replace_regex /\.dll/.so/ +eval INSTALL PLUGIN QUERY_RESPONSE_TIME_AUDIT SONAME '$PLUGIN_QUERY_RESPONSE_TIME'; +--let $assert_text= QUERY_RESPONSE_TIME_AUDIT must be active +--let $assert_cond= "[SELECT COUNT(*) FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = \'QUERY_RESPONSE_TIME_AUDIT\' AND PLUGIN_STATUS = \'ACTIVE\']" = 1 +--source include/assert.inc + +UNINSTALL PLUGIN QUERY_RESPONSE_TIME_AUDIT; + +--let $assert_text= QUERY_RESPONSE_TIME_AUDIT must not be present after uninstall +--let $assert_cond= "[SELECT COUNT(*) FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = \'QUERY_RESPONSE_TIME_AUDIT\']" = 0 +--source include/assert.inc From 0ccf8996f652dc80852a926c1505fd4042cf7173 Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Tue, 17 Apr 2018 11:48:27 +0200 Subject: [PATCH 0781/1221] PS-3950: gcc-8 compilation warnings 1. Add gcc-8 to Travis config file 2. Fix the following gcc-8 warnings: - cast between incompatible function types [-Werror=cast-function-type] - clearing an object with no trivial copy-assignment [-Werror=class-memaccess] - directive output may be truncated [-Werror=format-truncation=] - type qualifiers ignored on cast result type [-Werror=ignored-qualifiers] - catching polymorphic type 'class std::exception' by value [-Werror=catch-value=] (cherry picked from commit 31b49ba6b4123dfab049357fc9a18d422dad741c) --- .travis.yml | 38 +++++++++---- client/dump/program.cc | 2 +- client/mysql_plugin.c | 15 +++-- libbinlogevents/src/binlog_event.cpp | 2 +- libbinlogevents/src/rows_event.cpp | 8 +-- plugin/keyring/buffered_file_io.h | 2 +- .../test_session_detach.cc | 3 +- .../test_service_sql_api/test_session_info.cc | 3 +- .../test_sql_2_sessions.cc | 3 +- .../test_sql_all_col_types.cc | 3 +- .../test_service_sql_api/test_sql_commit.cc | 3 +- .../test_service_sql_api/test_sql_complex.cc | 3 +- .../test_service_sql_api/test_sql_errors.cc | 3 +- plugin/test_service_sql_api/test_sql_lock.cc | 3 +- .../test_sql_processlist.cc | 3 +- .../test_sql_replication.cc | 3 +- .../test_service_sql_api/test_sql_shutdown.cc | 3 +- .../test_service_sql_api/test_sql_sqlmode.cc | 3 +- .../test_sql_stored_procedures_functions.cc | 3 +- .../test_sql_views_triggers.cc | 3 +- .../src/bindings/xcom/xcom/xcom_transport.c | 56 ++++++++++++------- sql/binlog.cc | 5 +- sql/datadict.cc | 2 +- sql/debug_sync.cc | 8 +-- sql/field.h | 8 ++- sql/handler.cc | 6 +- sql/log_event.cc | 2 +- sql/mysqld.cc | 5 +- sql/opt_range.cc | 2 +- sql/partition_info.cc | 9 +-- sql/records.cc | 4 +- sql/rpl_slave.cc | 2 +- sql/sp.cc | 4 +- sql/sp_head.cc | 2 +- sql/sql_alter.cc | 2 +- sql/sql_analyse.cc | 9 ++- sql/sql_analyse.h | 5 +- sql/sql_base.cc | 2 +- sql/sql_cache.cc | 2 +- sql/sql_db.cc | 2 +- sql/sql_delete.cc | 2 +- sql/sql_executor.h | 2 +- sql/sql_insert.cc | 2 +- sql/sql_load.cc | 4 +- sql/sql_optimizer.cc | 5 +- sql/sql_parse.cc | 2 +- sql/sql_partition_admin.cc | 4 +- sql/sql_planner.cc | 10 ++-- sql/sql_select.cc | 4 +- sql/sql_servers.cc | 2 +- sql/sql_show.cc | 20 +++---- sql/sql_table.cc | 6 +- sql/sql_tmp_table.cc | 10 ++-- sql/sql_truncate.cc | 2 +- sql/sql_union.cc | 3 +- sql/sql_view.cc | 4 +- sql/sql_yacc.yy | 9 ++- sql/table.cc | 9 +-- sql/table.h | 2 +- sql/trigger.cc | 3 +- sql/tztime.cc | 5 +- sql/unireg.cc | 4 +- storage/blackhole/ha_blackhole.cc | 2 +- storage/innobase/buf/buf0buddy.cc | 3 +- storage/innobase/buf/buf0buf.cc | 8 ++- storage/innobase/buf/buf0dblwr.cc | 2 +- storage/innobase/buf/buf0dump.cc | 5 +- storage/innobase/buf/buf0lru.cc | 2 +- storage/innobase/fts/fts0pars.cc | 10 ++-- storage/innobase/fts/fts0pars.y | 10 ++-- storage/innobase/gis/gis0rtree.cc | 4 +- storage/innobase/gis/gis0sea.cc | 3 +- storage/innobase/handler/ha_innodb.cc | 2 +- storage/innobase/handler/i_s.cc | 2 +- storage/innobase/include/data0type.ic | 2 + storage/innobase/os/os0file.cc | 3 +- storage/innobase/row/row0ftsort.cc | 2 +- storage/innobase/row/row0import.cc | 4 +- storage/innobase/row/row0uins.cc | 2 +- storage/myisam/mi_write.c | 17 +++--- storage/myisam/myisamlog.c | 9 ++- storage/partition/ha_partition.cc | 2 +- storage/tokudb/PerconaFT | 2 +- unittest/gunit/decimal-t.cc | 10 ++-- unittest/gunit/fake_table.h | 2 +- unittest/gunit/table_cache-t.cc | 4 +- 86 files changed, 275 insertions(+), 197 deletions(-) diff --git a/.travis.yml b/.travis.yml index ae25ef6fb171..67af970cea4e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -50,17 +50,21 @@ matrix: compiler: clang # 5 - if: repo != percona/percona-server OR repo = percona/percona-server AND type IN (push, cron) - env: VERSION=7 BUILD=Debug + env: VERSION=8 BUILD=Debug compiler: gcc # 6 - if: repo != percona/percona-server OR repo = percona/percona-server AND type IN (push, cron) - env: VERSION=6 BUILD=Debug + env: VERSION=7 BUILD=Debug compiler: gcc # 7 - if: repo != percona/percona-server OR repo = percona/percona-server AND type IN (push, cron) - env: VERSION=5 BUILD=Debug + env: VERSION=6 BUILD=Debug compiler: gcc # 8 + - if: repo != percona/percona-server OR repo = percona/percona-server AND type IN (push, cron) + env: VERSION=5 BUILD=Debug + compiler: gcc + # 9 - if: repo != percona/percona-server OR repo = percona/percona-server AND type IN (push, cron) env: VERSION=4.8 BUILD=Debug compiler: gcc @@ -87,17 +91,21 @@ matrix: compiler: clang # 5 - if: branch =~ fullci OR repo = percona/percona-server AND type IN (push, pull_request, cron) - env: VERSION=7 BUILD=RelWithDebInfo + env: VERSION=8 BUILD=RelWithDebInfo compiler: gcc # 6 - if: branch =~ fullci OR repo = percona/percona-server AND type IN (push, pull_request, cron) - env: VERSION=6 BUILD=RelWithDebInfo + env: VERSION=7 BUILD=RelWithDebInfo compiler: gcc # 7 - if: branch =~ fullci OR repo = percona/percona-server AND type IN (push, pull_request, cron) - env: VERSION=5 BUILD=RelWithDebInfo + env: VERSION=6 BUILD=RelWithDebInfo compiler: gcc # 8 + - if: branch =~ fullci OR repo = percona/percona-server AND type IN (push, pull_request, cron) + env: VERSION=5 BUILD=RelWithDebInfo + compiler: gcc + # 9 - if: branch =~ fullci OR repo = percona/percona-server AND type IN (push, pull_request, cron) env: VERSION=4.8 BUILD=RelWithDebInfo compiler: gcc @@ -118,17 +126,21 @@ matrix: compiler: clang # 4 - if: branch =~ extraci OR repo = percona/percona-server AND type IN (push, cron) - env: VERSION=7 BUILD=RelWithDebInfo INVERTED=ON + env: VERSION=8 BUILD=RelWithDebInfo INVERTED=ON compiler: gcc # 5 - if: branch =~ extraci OR repo = percona/percona-server AND type IN (push, cron) - env: VERSION=6 BUILD=RelWithDebInfo INVERTED=ON + env: VERSION=7 BUILD=RelWithDebInfo INVERTED=ON compiler: gcc # 6 - if: branch =~ extraci OR repo = percona/percona-server AND type IN (push, cron) - env: VERSION=5 BUILD=RelWithDebInfo INVERTED=ON + env: VERSION=6 BUILD=RelWithDebInfo INVERTED=ON compiler: gcc # 7 + - if: branch =~ extraci OR repo = percona/percona-server AND type IN (push, cron) + env: VERSION=5 BUILD=RelWithDebInfo INVERTED=ON + compiler: gcc + #8 - if: branch =~ extraci OR repo = percona/percona-server AND type IN (push, cron) env: VERSION=4.8 BUILD=RelWithDebInfo INVERTED=ON compiler: gcc @@ -177,6 +189,8 @@ script: fi; if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo -E apt-add-repository -y "ppa:ubuntu-toolchain-r/test"; + sudo -E apt-add-repository -y "ppa:jonathonf/binutils"; + sudo -E apt-add-repository -y "ppa:jonathonf/gcc-8.0"; fi; - echo --- Update list of packages and download dependencies; @@ -218,12 +232,14 @@ script: -DMYSQL_MAINTAINER_MODE=ON -DWITH_MECAB=system "; + `# disable RocksDB for gcc-8 until MyRocks is warning-free`; + if [[ "$CC" == "gcc-8" ]]; then NOT_GCC_8=0; else NOT_GCC_8=1; fi; if [[ "$TRAVIS_REPO_SLUG" == "percona/percona-server" ]]; then - CMAKE_OPT+=" -DWITH_TOKUDB=ON -DWITH_ROCKSDB=ON"; + CMAKE_OPT+=" -DWITH_TOKUDB=ON -DWITH_ROCKSDB=$NOT_GCC_8"; else `# disable TokuDB or RocksDB as developers' forks must fit in the 50 min time limit`; if [[ "$BUILD" == "Debug" ]] && [[ "$CC" == "clang-$VERSION" ]]; then - CMAKE_OPT+=" -DWITH_TOKUDB=OFF -DWITH_ROCKSDB=ON"; + CMAKE_OPT+=" -DWITH_TOKUDB=OFF -DWITH_ROCKSDB=$NOT_GCC_8"; else CMAKE_OPT+=" -DWITH_TOKUDB=ON -DWITH_ROCKSDB=OFF"; fi; diff --git a/client/dump/program.cc b/client/dump/program.cc index e348ee5b7ddc..2b1f9c2157dd 100644 --- a/client/dump/program.cc +++ b/client/dump/program.cc @@ -150,7 +150,7 @@ int Program::execute(std::vector positional_options) new Single_transaction_connection_provider(this, num_connections, message_handler) : new Thread_specific_connection_provider(this); } - catch (std::exception e) + catch (const std::exception &) { this->error(Mysql::Tools::Base::Message_data( 0, "Error during creating connection.", diff --git a/client/mysql_plugin.c b/client/mysql_plugin.c index f38603884ff1..a598048d54d8 100644 --- a/client/mysql_plugin.c +++ b/client/mysql_plugin.c @@ -325,9 +325,11 @@ static char *add_quotes(const char *path) static int get_default_values() { + static const char format_cmd[]= "%s mysqld > %s"; char tool_path[FN_REFLEN]; - char defaults_cmd[FN_REFLEN]; char defaults_file[FN_REFLEN]; + char defaults_cmd[sizeof(defaults_file) + sizeof(tool_path) + + sizeof(format_cmd)]; char line[FN_REFLEN]; int error= 0; int ret= 0; @@ -359,7 +361,7 @@ static int get_default_values() } #else my_snprintf(defaults_cmd, sizeof(defaults_cmd), - "%s mysqld > %s", tool_path, defaults_file); + format_cmd, tool_path, defaults_file); #endif /* Execute the command */ @@ -1234,7 +1236,9 @@ static int dump_bootstrap_file(char *bootstrap_file) static int bootstrap_server(char *server_path, char *bootstrap_file) { - char bootstrap_cmd[FN_REFLEN]; + static const char format_cmd[]= "%s --no-defaults --bootstrap --datadir=%s " + "--basedir=%s < %s"; + char bootstrap_cmd[FN_REFLEN * 2 + sizeof(format_cmd)]; int error= 0; #ifdef _WIN32 @@ -1257,9 +1261,8 @@ static int bootstrap_server(char *server_path, char *bootstrap_file) add_quotes(opt_datadir), add_quotes(opt_basedir), add_quotes(bootstrap_file)); #else - my_snprintf(bootstrap_cmd, sizeof(bootstrap_cmd), - "%s --no-defaults --bootstrap --datadir=%s --basedir=%s" - " < %s", server_path, opt_datadir, opt_basedir, bootstrap_file); + my_snprintf(bootstrap_cmd, sizeof(bootstrap_cmd), format_cmd, + server_path, opt_datadir, opt_basedir, bootstrap_file); #endif /* Execute the command */ diff --git a/libbinlogevents/src/binlog_event.cpp b/libbinlogevents/src/binlog_event.cpp index 3e84f1275bf5..7f24c1e23748 100644 --- a/libbinlogevents/src/binlog_event.cpp +++ b/libbinlogevents/src/binlog_event.cpp @@ -92,7 +92,7 @@ Log_event_header(const char* buf, uint16_t binlog_version) memcpy(&tmp_sec, buf, sizeof(tmp_sec)); when.tv_sec= le32toh(tmp_sec); when.tv_usec= 0; - type_code= static_cast(static_cast(buf[EVENT_TYPE_OFFSET])); + type_code= static_cast(static_cast(buf[EVENT_TYPE_OFFSET])); memcpy(&unmasked_server_id, buf + SERVER_ID_OFFSET, sizeof(unmasked_server_id)); diff --git a/libbinlogevents/src/rows_event.cpp b/libbinlogevents/src/rows_event.cpp index 8849f8bdc311..7b905df72b0a 100644 --- a/libbinlogevents/src/rows_event.cpp +++ b/libbinlogevents/src/rows_event.cpp @@ -91,14 +91,14 @@ Table_map_event::Table_map_event(const char *buf, unsigned int event_len, if (post_header_len == 6) { /* Master is of an intermediate source tree before 5.1.4. Id is 4 bytes */ - memcpy(&m_table_id, post_start, 4); + memcpy(static_cast(&m_table_id), post_start, 4); m_table_id= le64toh(m_table_id); post_start+= 4; } else { BAPI_ASSERT(post_header_len == TABLE_MAP_HEADER_LEN); - memcpy(&m_table_id, post_start, 6); + memcpy(static_cast(&m_table_id), post_start, 6); m_table_id= le64toh(m_table_id); post_start+= TM_FLAGS_OFFSET; } @@ -183,13 +183,13 @@ Rows_event::Rows_event(const char *buf, unsigned int event_len, if (post_header_len == 6) { /* Master is of an intermediate source tree before 5.1.4. Id is 4 bytes */ - memcpy(&m_table_id, post_start, 4); + memcpy(static_cast(&m_table_id), post_start, 4); m_table_id= le64toh(m_table_id); post_start+= 4; } else { - memcpy(&m_table_id, post_start, 6); + memcpy(static_cast(&m_table_id), post_start, 6); m_table_id= le64toh(m_table_id); post_start+= ROWS_FLAGS_OFFSET; } diff --git a/plugin/keyring/buffered_file_io.h b/plugin/keyring/buffered_file_io.h index 6d006edb166c..9a13fbcca94f 100644 --- a/plugin/keyring/buffered_file_io.h +++ b/plugin/keyring/buffered_file_io.h @@ -40,7 +40,7 @@ class Buffered_file_io : public IKeyring_io , file_io(logger) , keyring_file(-1) { - memset(&saved_keyring_stat, 0, sizeof(MY_STAT)); + memset(static_cast(&saved_keyring_stat), 0, sizeof(MY_STAT)); } my_bool init(std::string *keyring_filename); diff --git a/plugin/test_service_sql_api/test_session_detach.cc b/plugin/test_service_sql_api/test_session_detach.cc index 954d492c1475..a0cb2a903fb1 100644 --- a/plugin/test_service_sql_api/test_session_detach.cc +++ b/plugin/test_service_sql_api/test_session_detach.cc @@ -246,7 +246,8 @@ static int sql_get_null(void *ctx) uint col= pctx->current_col; pctx->current_col++; - strncpy(pctx->sql_str_value[row][col], "[NULL]", sizeof("[NULL]")-1); + strncpy(pctx->sql_str_value[row][col], "[NULL]", + sizeof(pctx->sql_str_value[0][0])); pctx->sql_str_len[row][col]= sizeof("[NULL]")-1; DBUG_RETURN(false); diff --git a/plugin/test_service_sql_api/test_session_info.cc b/plugin/test_service_sql_api/test_session_info.cc index 93db95d0c3d5..3d0d4431d959 100644 --- a/plugin/test_service_sql_api/test_session_info.cc +++ b/plugin/test_service_sql_api/test_session_info.cc @@ -267,7 +267,8 @@ static int sql_get_null(void *ctx) uint col= pctx->current_col; pctx->current_col++; - strncpy(pctx->sql_str_value[row][col], "[NULL]", sizeof("[NULL]")-1); + strncpy(pctx->sql_str_value[row][col], "[NULL]", + sizeof(pctx->sql_str_value[0][0])); pctx->sql_str_len[row][col]= sizeof("[NULL]")-1; DBUG_RETURN(false); diff --git a/plugin/test_service_sql_api/test_sql_2_sessions.cc b/plugin/test_service_sql_api/test_sql_2_sessions.cc index 4f3ab4d4c7ad..9e1dc3228a97 100644 --- a/plugin/test_service_sql_api/test_sql_2_sessions.cc +++ b/plugin/test_service_sql_api/test_sql_2_sessions.cc @@ -268,7 +268,8 @@ static int sql_get_null(void *ctx) uint col= pctx->current_col; pctx->current_col++; - strncpy(pctx->sql_str_value[row][col], "[NULL]", sizeof("[NULL]")-1); + strncpy(pctx->sql_str_value[row][col], "[NULL]", + sizeof(pctx->sql_str_value[0][0])); pctx->sql_str_len[row][col]= sizeof("[NULL]")-1; DBUG_RETURN(false); diff --git a/plugin/test_service_sql_api/test_sql_all_col_types.cc b/plugin/test_service_sql_api/test_sql_all_col_types.cc index 815ec890433e..4fa1427b94bd 100644 --- a/plugin/test_service_sql_api/test_sql_all_col_types.cc +++ b/plugin/test_service_sql_api/test_sql_all_col_types.cc @@ -248,7 +248,8 @@ static int sql_get_null(void *ctx) uint col= pctx->current_col; pctx->current_col++; - strncpy(pctx->sql_str_value[row][col], "[NULL]", sizeof("[NULL]")-1); + strncpy(pctx->sql_str_value[row][col], "[NULL]", + sizeof(pctx->sql_str_value[0][0])); pctx->sql_str_len[row][col]= sizeof("[NULL]")-1; DBUG_RETURN(false); diff --git a/plugin/test_service_sql_api/test_sql_commit.cc b/plugin/test_service_sql_api/test_sql_commit.cc index ce0ba9a162ff..2cb162518b47 100644 --- a/plugin/test_service_sql_api/test_sql_commit.cc +++ b/plugin/test_service_sql_api/test_sql_commit.cc @@ -248,7 +248,8 @@ static int sql_get_null(void *ctx) uint col= pctx->current_col; pctx->current_col++; - strncpy(pctx->sql_str_value[row][col], "[NULL]", sizeof("[NULL]")-1); + strncpy(pctx->sql_str_value[row][col], "[NULL]", + sizeof(pctx->sql_str_value[0][0])); pctx->sql_str_len[row][col]= sizeof("[NULL]")-1; DBUG_RETURN(false); diff --git a/plugin/test_service_sql_api/test_sql_complex.cc b/plugin/test_service_sql_api/test_sql_complex.cc index 4dfe7df6916a..550ef82d7c97 100644 --- a/plugin/test_service_sql_api/test_sql_complex.cc +++ b/plugin/test_service_sql_api/test_sql_complex.cc @@ -316,7 +316,8 @@ static int sql_get_null(void *ctx) uint col= pctx->current_col; pctx->current_col++; - strncpy(pctx->sql_str_value[row][col], "[NULL]", sizeof("[NULL]")-1); + strncpy(pctx->sql_str_value[row][col], "[NULL]", + sizeof(pctx->sql_str_value[0][0])); pctx->sql_str_len[row][col]= sizeof("[NULL]")-1; DBUG_RETURN(false); diff --git a/plugin/test_service_sql_api/test_sql_errors.cc b/plugin/test_service_sql_api/test_sql_errors.cc index a8983ce62502..97057ac35f51 100644 --- a/plugin/test_service_sql_api/test_sql_errors.cc +++ b/plugin/test_service_sql_api/test_sql_errors.cc @@ -271,7 +271,8 @@ static int sql_get_null(void *ctx) uint col= pctx->current_col; pctx->current_col++; - strncpy(pctx->sql_str_value[row][col], "[NULL]", sizeof("[NULL]")-1); + strncpy(pctx->sql_str_value[row][col], "[NULL]", + sizeof(pctx->sql_str_value[0][0])); pctx->sql_str_len[row][col]= sizeof("[NULL]")-1; DBUG_RETURN(false); diff --git a/plugin/test_service_sql_api/test_sql_lock.cc b/plugin/test_service_sql_api/test_sql_lock.cc index c97cc49448a2..292f826c1429 100644 --- a/plugin/test_service_sql_api/test_sql_lock.cc +++ b/plugin/test_service_sql_api/test_sql_lock.cc @@ -247,7 +247,8 @@ static int sql_get_null(void *ctx) uint col= pctx->current_col; pctx->current_col++; - strncpy(pctx->sql_str_value[row][col], "[NULL]", sizeof("[NULL]")-1); + strncpy(pctx->sql_str_value[row][col], "[NULL]", + sizeof(pctx->sql_str_value[0][0])); pctx->sql_str_len[row][col]= sizeof("[NULL]")-1; DBUG_RETURN(false); diff --git a/plugin/test_service_sql_api/test_sql_processlist.cc b/plugin/test_service_sql_api/test_sql_processlist.cc index 8b4618dbcd43..a7e0cfd3cd20 100644 --- a/plugin/test_service_sql_api/test_sql_processlist.cc +++ b/plugin/test_service_sql_api/test_sql_processlist.cc @@ -261,7 +261,8 @@ static int sql_get_null(void *ctx) uint col= pctx->current_col; pctx->current_col++; - strncpy(pctx->sql_str_value[row][col], "[NULL]", sizeof("[NULL]")-1); + strncpy(pctx->sql_str_value[row][col], "[NULL]", + sizeof(pctx->sql_str_value[0][0])); pctx->sql_str_len[row][col]= sizeof("[NULL]")-1; DBUG_RETURN(false); diff --git a/plugin/test_service_sql_api/test_sql_replication.cc b/plugin/test_service_sql_api/test_sql_replication.cc index ac9b4bbc9a3b..8656893bb8a3 100644 --- a/plugin/test_service_sql_api/test_sql_replication.cc +++ b/plugin/test_service_sql_api/test_sql_replication.cc @@ -244,7 +244,8 @@ static int sql_get_null(void *ctx) uint col= pctx->current_col; pctx->current_col++; - strncpy(pctx->sql_str_value[row][col], "[NULL]", sizeof("[NULL]")-1); + strncpy(pctx->sql_str_value[row][col], "[NULL]", + sizeof(pctx->sql_str_value[0][0])); pctx->sql_str_len[row][col]= sizeof("[NULL]")-1; DBUG_RETURN(false); diff --git a/plugin/test_service_sql_api/test_sql_shutdown.cc b/plugin/test_service_sql_api/test_sql_shutdown.cc index 7b47a161153c..69c902f2de79 100644 --- a/plugin/test_service_sql_api/test_sql_shutdown.cc +++ b/plugin/test_service_sql_api/test_sql_shutdown.cc @@ -251,7 +251,8 @@ static int sql_get_null(void *ctx) uint col= pctx->current_col; pctx->current_col++; - strncpy(pctx->sql_str_value[row][col], "[NULL]", sizeof("[NULL]")-1); + strncpy(pctx->sql_str_value[row][col], "[NULL]", + sizeof(pctx->sql_str_value[0][0])); pctx->sql_str_len[row][col]= sizeof("[NULL]")-1; DBUG_RETURN(false); diff --git a/plugin/test_service_sql_api/test_sql_sqlmode.cc b/plugin/test_service_sql_api/test_sql_sqlmode.cc index 8ec25a0e06dd..b403e72184aa 100644 --- a/plugin/test_service_sql_api/test_sql_sqlmode.cc +++ b/plugin/test_service_sql_api/test_sql_sqlmode.cc @@ -304,7 +304,8 @@ static int sql_get_null(void *ctx) uint col= pctx->current_col; pctx->current_col++; - strncpy(pctx->sql_str_value[row][col], "[NULL]", sizeof("[NULL]")-1); + strncpy(pctx->sql_str_value[row][col], "[NULL]", + sizeof(pctx->sql_str_value[0][0])); pctx->sql_str_len[row][col]= sizeof("[NULL]")-1; DBUG_RETURN(false); diff --git a/plugin/test_service_sql_api/test_sql_stored_procedures_functions.cc b/plugin/test_service_sql_api/test_sql_stored_procedures_functions.cc index ec2d1a4476e7..f93af623641a 100644 --- a/plugin/test_service_sql_api/test_sql_stored_procedures_functions.cc +++ b/plugin/test_service_sql_api/test_sql_stored_procedures_functions.cc @@ -268,7 +268,8 @@ static int sql_get_null(void *ctx) uint col= pctx->current_col; pctx->current_col++; - strncpy(pctx->sql_str_value[row][col], "[NULL]", sizeof("[NULL]")-1); + strncpy(pctx->sql_str_value[row][col], "[NULL]", + sizeof(pctx->sql_str_value[0][0])); pctx->sql_str_len[row][col]= sizeof("[NULL]")-1; DBUG_RETURN(false); diff --git a/plugin/test_service_sql_api/test_sql_views_triggers.cc b/plugin/test_service_sql_api/test_sql_views_triggers.cc index 3fd3916e876c..e278507d8cea 100644 --- a/plugin/test_service_sql_api/test_sql_views_triggers.cc +++ b/plugin/test_service_sql_api/test_sql_views_triggers.cc @@ -268,7 +268,8 @@ static int sql_get_null(void *ctx) uint col= pctx->current_col; pctx->current_col++; - strncpy(pctx->sql_str_value[row][col], "[NULL]", sizeof("[NULL]")-1); + strncpy(pctx->sql_str_value[row][col], "[NULL]", + sizeof(pctx->sql_str_value[0][0])); pctx->sql_str_len[row][col]= sizeof("[NULL]")-1; DBUG_RETURN(false); diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_transport.c b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_transport.c index 17725bee2c64..daee0459170e 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_transport.c +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_transport.c @@ -492,12 +492,41 @@ x_inline (XDR *xdrs, u_int len) #undef INLINE_T /* purecov: begin deadcode */ -static int -harmless (void) +static bool_t +/* to stop ANSI-C compiler from complaining */ +#if defined(__APPLE__) && defined(__LP64__) +dummyfunc1 (XDR *xdr MY_ATTRIBUTE((unused)), int *ip MY_ATTRIBUTE((unused))) +#else +dummyfunc1 (XDR *xdr MY_ATTRIBUTE((unused)), long *lp MY_ATTRIBUTE((unused))) +#endif { /* Always return FALSE/NULL, as the case may be */ - return 0; + return FALSE; +} + +static bool_t +dummyfunc2 (XDR *xdr MY_ATTRIBUTE((unused)), +#ifdef OLD_XDR + caddr_t ct MY_ATTRIBUTE((unused)), + int i MY_ATTRIBUTE((unused))) +#else + caddr_t ct MY_ATTRIBUTE((unused)), + u_int u MY_ATTRIBUTE((unused))) +#endif +{ + /* Always return FALSE/NULL, as the case may be */ + return FALSE; +} + +#ifdef HAVE_XDR_OPS_X_GETINT32 +static bool_t +dummyfunc3 (XDR *xdr MY_ATTRIBUTE((unused)), + int32_t *ip MY_ATTRIBUTE((unused))) +{ + /* Always return FALSE/NULL, as the case may be */ + return FALSE; } +#endif static void x_destroy (XDR *xdrs) @@ -531,20 +560,7 @@ xdr_proto_sizeof (xcom_proto x_proto, xdrproc_t func, void *data) XDR x; struct xdr_ops ops; bool_t stat; - /* to stop ANSI-C compiler from complaining */ -#if defined(__APPLE__) && defined(__LP64__) - typedef bool_t (*dummyfunc1) (XDR *, int *); -#else - typedef bool_t (*dummyfunc1) (XDR *, long *); -#endif -#ifdef HAVE_XDR_OPS_X_GETINT32 - typedef bool_t (*dummyfunc3) (XDR *, int32_t *); -#endif -#ifdef OLD_XDR - typedef bool_t (*dummyfunc2) (XDR *, caddr_t, int); -#else - typedef bool_t (*dummyfunc2) (XDR *, caddr_t, u_int); -#endif + memset(&ops, 0, sizeof(struct xdr_ops)); ops.x_putlong = x_putlong; @@ -558,10 +574,10 @@ xdr_proto_sizeof (xcom_proto x_proto, xdrproc_t func, void *data) ops.x_putint32 = x_putint32; #endif /* the other harmless ones */ - ops.x_getlong = (dummyfunc1) harmless; - ops.x_getbytes = (dummyfunc2) harmless; + ops.x_getlong = dummyfunc1; + ops.x_getbytes = dummyfunc2; #ifdef HAVE_XDR_OPS_X_GETINT32 - ops.x_getint32 = (dummyfunc3) harmless; + ops.x_getint32 = dummyfunc3; #endif x.x_op = XDR_ENCODE; x.x_ops = &ops; diff --git a/sql/binlog.cc b/sql/binlog.cc index 4ad031a94b26..1edb9285cfce 100644 --- a/sql/binlog.cc +++ b/sql/binlog.cc @@ -9518,8 +9518,9 @@ void MYSQL_BIN_LOG::handle_binlog_flush_or_sync_error(THD *thd, binlog_error_action == ABORT_SERVER ? "ABORT_SERVER" : "IGNORE_ERROR"); if (binlog_error_action == ABORT_SERVER) { - char err_buff[MYSQL_ERRMSG_SIZE]; - sprintf(err_buff, "%s Hence aborting the server.", errmsg); + static const char format_err[]= "%s Hence aborting the server."; + char err_buff[MYSQL_ERRMSG_SIZE + sizeof(format_err)]; + snprintf(err_buff, sizeof(err_buff), format_err, errmsg); exec_binlog_error_action_abort(err_buff); } else diff --git a/sql/datadict.cc b/sql/datadict.cc index 9b86e7098c96..8efb973fc5b6 100644 --- a/sql/datadict.cc +++ b/sql/datadict.cc @@ -182,7 +182,7 @@ bool dd_recreate_table(THD *thd, const char *db, const char *table_name) db, table_name, MDL_EXCLUSIVE)); - memset(&create_info, 0, sizeof(create_info)); + memset(static_cast(&create_info), 0, sizeof(create_info)); /* Create a path to the table, but without a extension. */ build_table_filename(path, sizeof(path) - 1, db, table_name, "", 0); diff --git a/sql/debug_sync.cc b/sql/debug_sync.cc index 3015c31815b9..8aba16ae7114 100644 --- a/sql/debug_sync.cc +++ b/sql/debug_sync.cc @@ -1015,7 +1015,7 @@ static void debug_sync_remove_action(st_debug_sync_control *ds_control, memmove(save_action, action, sizeof(st_debug_sync_action)); /* Move actions down. */ - memmove(ds_control->ds_action + dsp_idx, + memmove(static_cast(ds_control->ds_action + dsp_idx), ds_control->ds_action + dsp_idx + 1, (ds_control->ds_active - dsp_idx) * sizeof(st_debug_sync_action)); @@ -1026,8 +1026,8 @@ static void debug_sync_remove_action(st_debug_sync_control *ds_control, produced by the shift. Again do not use an assignment operator to avoid string allocation/copy. */ - memmove(ds_control->ds_action + ds_control->ds_active, save_action, - sizeof(st_debug_sync_action)); + memmove(static_cast(ds_control->ds_action + ds_control->ds_active), + save_action, sizeof(st_debug_sync_action)); } DBUG_VOID_RETURN; @@ -1099,7 +1099,7 @@ static st_debug_sync_action *debug_sync_get_action(THD *thd, ds_control->ds_action= (st_debug_sync_action*) new_action; ds_control->ds_allocated= new_alloc; /* Clear memory as we do not run string constructors here. */ - memset((ds_control->ds_action + dsp_idx), 0, + memset(static_cast(ds_control->ds_action + dsp_idx), 0, (new_alloc - dsp_idx) * sizeof(st_debug_sync_action)); } DBUG_PRINT("debug_sync", ("added action idx: %u", dsp_idx)); diff --git a/sql/field.h b/sql/field.h index 736445cf30b0..6939df235b86 100644 --- a/sql/field.h +++ b/sql/field.h @@ -3843,8 +3843,8 @@ class Field_blob :public Field_longstr { } void reset_fields() { - memset(&value, 0, sizeof(value)); - memset(&old_value, 0, sizeof(old_value)); + memset(static_cast(&value), 0, sizeof(value)); + memset(static_cast(&old_value), 0, sizeof(old_value)); } size_t get_field_buffer_size() { return value.alloced_length(); } #ifndef WORDS_BIGENDIAN @@ -3926,7 +3926,9 @@ class Field_blob :public Field_longstr { value.mem_free(); old_value.mem_free(); } - inline void clear_temporary() { memset(&value, 0, sizeof(value)); } + inline void clear_temporary() { + memset(static_cast(&value), 0, sizeof(value)); + } friend type_conversion_status field_conv(Field *to,Field *from); bool has_charset(void) const { return charset() == &my_charset_bin ? FALSE : TRUE; } diff --git a/sql/handler.cc b/sql/handler.cc index 195d09a53dbe..face0b0d1ce7 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -2742,8 +2742,8 @@ int ha_delete_table(THD *thd, handlerton *table_type, const char *path, TABLE_SHARE dummy_share; DBUG_ENTER("ha_delete_table"); - memset(&dummy_table, 0, sizeof(dummy_table)); - memset(&dummy_share, 0, sizeof(dummy_share)); + memset(static_cast(&dummy_table), 0, sizeof(dummy_table)); + memset(static_cast(&dummy_share), 0, sizeof(dummy_share)); dummy_table.s= &dummy_share; /* DB_TYPE_UNKNOWN is used in ALTER TABLE when renaming only .frm files */ @@ -5583,7 +5583,7 @@ int ha_create_table_from_engine(THD* thd, const char *db, const char *name) DBUG_ENTER("ha_create_table_from_engine"); DBUG_PRINT("enter", ("name '%s'.'%s'", db, name)); - memset(&create_info, 0, sizeof(create_info)); + memset(static_cast(&create_info), 0, sizeof(create_info)); if ((error= ha_discover(thd, db, name, &frmblob, &frmlen))) { /* Table could not be discovered and thus not created */ diff --git a/sql/log_event.cc b/sql/log_event.cc index 3198e95127d2..563d3ec65e7a 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -1563,7 +1563,7 @@ 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 } - uint event_type= static_cast(buf[EVENT_TYPE_OFFSET]); + uint event_type= static_cast(buf[EVENT_TYPE_OFFSET]); // all following START events in the current file are without checksum if (event_type == binary_log::START_EVENT_V3) (const_cast(description_event))-> diff --git a/sql/mysqld.cc b/sql/mysqld.cc index d3070d4a9d2c..332e0ac51f74 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -3810,9 +3810,10 @@ static int generate_server_uuid() delete thd; - strncpy(server_uuid, uuid.c_ptr(), UUID_LENGTH); + strncpy(server_uuid, uuid.c_ptr(), sizeof(server_uuid)); DBUG_EXECUTE_IF("server_uuid_deterministic", - strncpy(server_uuid, "00000000-1111-0000-1111-000000000000", UUID_LENGTH);); + strncpy(server_uuid, "00000000-1111-0000-1111-000000000000", + sizeof(server_uuid));); server_uuid[UUID_LENGTH]= '\0'; return 0; } diff --git a/sql/opt_range.cc b/sql/opt_range.cc index d52d254fb4d0..bb0997d09ac4 100644 --- a/sql/opt_range.cc +++ b/sql/opt_range.cc @@ -1606,7 +1606,7 @@ QUICK_INDEX_MERGE_SELECT::QUICK_INDEX_MERGE_SELECT(THD *thd_param, DBUG_ENTER("QUICK_INDEX_MERGE_SELECT::QUICK_INDEX_MERGE_SELECT"); index= MAX_KEY; head= table; - memset(&read_record, 0, sizeof(read_record)); + memset(static_cast(&read_record), 0, sizeof(read_record)); init_sql_alloc(key_memory_quick_index_merge_root, &alloc, thd->variables.range_alloc_block_size, 0); DBUG_VOID_RETURN; diff --git a/sql/partition_info.cc b/sql/partition_info.cc index a0ccd230ec1d..a162cfcd33aa 100644 --- a/sql/partition_info.cc +++ b/sql/partition_info.cc @@ -40,7 +40,7 @@ partition_info *partition_info::get_clone(bool reset /* = false */) mem_alloc_error(sizeof(partition_info)); DBUG_RETURN(NULL); } - memcpy(clone, this, sizeof(partition_info)); + memcpy(static_cast(clone), this, sizeof(partition_info)); memset(&(clone->read_partitions), 0, sizeof(clone->read_partitions)); memset(&(clone->lock_partitions), 0, sizeof(clone->lock_partitions)); clone->bitmaps_are_initialized= FALSE; @@ -57,7 +57,7 @@ partition_info *partition_info::get_clone(bool reset /* = false */) mem_alloc_error(sizeof(partition_element)); DBUG_RETURN(NULL); } - memcpy(part_clone, part, sizeof(partition_element)); + memcpy(static_cast(part_clone), part, sizeof(partition_element)); /* Mark that RANGE and LIST values needs to be fixed so that we don't @@ -87,7 +87,8 @@ partition_info *partition_info::get_clone(bool reset /* = false */) mem_alloc_error(sizeof(partition_element)); DBUG_RETURN(NULL); } - memcpy(subpart_clone, subpart, sizeof(partition_element)); + memcpy(static_cast(subpart_clone), subpart, + sizeof(partition_element)); part_clone->subpartitions.push_back(subpart_clone); } clone->partitions.push_back(part_clone); @@ -1921,7 +1922,7 @@ void partition_info::print_no_partition_found(TABLE *table_arg) char *buf_ptr= (char*)&buf; TABLE_LIST table_list; - memset(&table_list, 0, sizeof(table_list)); + memset(static_cast(&table_list), 0, sizeof(table_list)); table_list.db= table_arg->s->db.str; table_list.table_name= table_arg->s->table_name.str; diff --git a/sql/records.cc b/sql/records.cc index a5d56581bff7..7bfef97be88c 100644 --- a/sql/records.cc +++ b/sql/records.cc @@ -66,7 +66,7 @@ bool init_read_record_idx(READ_RECORD *info, THD *thd, TABLE *table, { int error; empty_record(table); - memset(info, 0, sizeof(*info)); + memset(static_cast(info), 0, sizeof(*info)); info->thd= thd; info->table= table; info->record= table->record[0]; @@ -191,7 +191,7 @@ bool init_read_record(READ_RECORD *info,THD *thd, if (!table) table= qep_tab->table(); - memset(info, 0, sizeof(*info)); + memset(static_cast(info), 0, sizeof(*info)); info->thd=thd; info->table=table; info->forms= &info->table; /* Only one table */ diff --git a/sql/rpl_slave.cc b/sql/rpl_slave.cc index 228f0437d695..367f0b1362b5 100644 --- a/sql/rpl_slave.cc +++ b/sql/rpl_slave.cc @@ -8167,7 +8167,7 @@ bool queue_event(Master_info* mi,const char* buf, ulong event_len) char *save_buf= NULL; // needed for checksumming the fake Rotate event char rot_buf[LOG_EVENT_HEADER_LEN + Binary_log_event::ROTATE_HEADER_LEN + FN_REFLEN]; Gtid gtid= { 0, 0 }; - Log_event_type event_type= (Log_event_type)static_cast(buf[EVENT_TYPE_OFFSET]); + Log_event_type event_type= (Log_event_type)static_cast(buf[EVENT_TYPE_OFFSET]); DBUG_ASSERT(checksum_alg == binary_log::BINLOG_CHECKSUM_ALG_OFF || checksum_alg == binary_log::BINLOG_CHECKSUM_ALG_UNDEF || diff --git a/sql/sp.cc b/sql/sp.cc index dc0bae7d4d76..e93a8dd23baf 100644 --- a/sql/sp.cc +++ b/sql/sp.cc @@ -972,8 +972,8 @@ sp_returns_type(THD *thd, String &result, sp_head *sp) TABLE table; TABLE_SHARE share; Field *field; - memset(&table, 0, sizeof(table)); - memset(&share, 0, sizeof(share)); + memset(static_cast(&table), 0, sizeof(table)); + memset(static_cast(&share), 0, sizeof(share)); table.in_use= thd; table.s = &share; field= sp->create_result_field(0, 0, &table); diff --git a/sql/sp_head.cc b/sql/sp_head.cc index 11e7d39a2dab..38696b9f3888 100644 --- a/sql/sp_head.cc +++ b/sql/sp_head.cc @@ -2174,7 +2174,7 @@ void sp_head::add_used_tables_to_table_list(THD *thd, bool sp_head::check_show_access(THD *thd, bool *full_access) { TABLE_LIST tables; - memset(&tables, 0, sizeof(tables)); + memset(static_cast(&tables), 0, sizeof(tables)); tables.db= (char*) "mysql"; tables.table_name= tables.alias= (char*) "proc"; diff --git a/sql/sql_alter.cc b/sql/sql_alter.cc index 08ab5da3d871..75c709fb4a1c 100644 --- a/sql/sql_alter.cc +++ b/sql/sql_alter.cc @@ -307,7 +307,7 @@ bool Sql_cmd_alter_table::execute(THD *thd) { // Rename of table TABLE_LIST tmp_table; - memset(&tmp_table, 0, sizeof(tmp_table)); + memset(static_cast(&tmp_table), 0, sizeof(tmp_table)); tmp_table.table_name= lex->name.str; tmp_table.db= select_lex->db; tmp_table.grant.privilege= priv; diff --git a/sql/sql_analyse.cc b/sql/sql_analyse.cc index 875bfec9e1af..080f4a7320cd 100644 --- a/sql/sql_analyse.cc +++ b/sql/sql_analyse.cc @@ -237,13 +237,12 @@ bool get_ev_num_info(EV_NUM_INFO *ev_info, NUM_INFO *info, const char *num) return 1; } // get_ev_num_info - -void free_string(String *s) +void free_string(void* key, TREE_FREE action MY_ATTRIBUTE((unused)), + const void *param MY_ATTRIBUTE((unused))) { - s->mem_free(); + reinterpret_cast(key)->mem_free(); } - void field_str::add() { char buff[MAX_FIELD_WIDTH], *ptr; @@ -318,7 +317,7 @@ void field_str::add() } else { - memset(&s, 0, sizeof(s)); // Let tree handle free of this + memset(static_cast(&s), 0, sizeof(s)); // Let tree handle free of this if ((treemem += length) > pc->max_treemem) { room_in_tree = 0; // Remove tree, too big tree diff --git a/sql/sql_analyse.h b/sql/sql_analyse.h index 804af88e86be..02260cd5ef1e 100644 --- a/sql/sql_analyse.h +++ b/sql/sql_analyse.h @@ -67,7 +67,8 @@ int compare_ulonglong(const ulonglong *s, const ulonglong *t); int compare_ulonglong2(void* cmp_arg MY_ATTRIBUTE((unused)), const ulonglong *s, const ulonglong *t); int compare_decimal2(int* len, const char *s, const char *t); -void free_string(String*); +void free_string(void* key, TREE_FREE action MY_ATTRIBUTE((unused)), + const void *param MY_ATTRIBUTE((unused))); class Query_result_analyse; class field_info :public Sql_alloc @@ -121,7 +122,7 @@ class field_str :public field_info must_be_blob(0), was_zero_fill(0), was_maybe_zerofill(0), can_be_still_num(1) { init_tree(&tree, 0, 0, sizeof(String), (qsort_cmp2) sortcmp2, - 0, (tree_element_free) free_string, NULL); }; + 0, free_string, NULL); }; void add(); void get_opt_type(String*, ha_rows); diff --git a/sql/sql_base.cc b/sql/sql_base.cc index 767c66fe707b..cce3a504dd35 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -1042,7 +1042,7 @@ OPEN_TABLE_LIST *list_open_tables(THD *thd, const char *db, const char *wild) TABLE_LIST table_list; DBUG_ENTER("list_open_tables"); - memset(&table_list, 0, sizeof(table_list)); + memset(static_cast(&table_list), 0, sizeof(table_list)); start_list= &open_list; open_list=0; diff --git a/sql/sql_cache.cc b/sql/sql_cache.cc index bba47e4c55fd..0972ef037184 100644 --- a/sql/sql_cache.cc +++ b/sql/sql_cache.cc @@ -2114,7 +2114,7 @@ def_week_frmt: %lu, in_trans: %d, autocommit: %d", } } - memset(&table_list, 0, sizeof(table_list)); + memset(static_cast(&table_list), 0, sizeof(table_list)); table_list.db = table->db(); table_list.alias= table_list.table_name= table->table(); #ifndef NO_EMBEDDED_ACCESS_CHECKS diff --git a/sql/sql_db.cc b/sql/sql_db.cc index 510eb8bfbfdf..bbabe7e7bf26 100644 --- a/sql/sql_db.cc +++ b/sql/sql_db.cc @@ -378,7 +378,7 @@ bool load_db_opt(THD *thd, const char *path, HA_CREATE_INFO *create) bool error=1; uint nbytes; - memset(create, 0, sizeof(*create)); + memset(static_cast(create), 0, sizeof(*create)); create->default_table_charset= thd->variables.collation_server; /* Check if options for this database are already in the hash */ diff --git a/sql/sql_delete.cc b/sql/sql_delete.cc index 777dbe8f17a6..4d08f1a6d98a 100644 --- a/sql/sql_delete.cc +++ b/sql/sql_delete.cc @@ -664,7 +664,7 @@ bool Sql_cmd_delete::mysql_prepare_delete(THD *thd) List fields; List all_fields; - memset(&tables, 0, sizeof(tables)); + memset(static_cast(&tables), 0, sizeof(tables)); tables.table = table_list->table; tables.alias = table_list->alias; diff --git a/sql/sql_executor.h b/sql/sql_executor.h index 135a81c96220..7c777ce69e92 100644 --- a/sql/sql_executor.h +++ b/sql/sql_executor.h @@ -381,7 +381,7 @@ class QEP_TAB : public Sql_alloc, public QEP_shared_owner All users do init_read_record(), which does memset(), rather than invoking a constructor. */ - memset(&read_record, 0, sizeof(read_record)); + memset(static_cast(&read_record), 0, sizeof(read_record)); } /// Initializes the object from a JOIN_TAB diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index 310047259c6d..ca9dc363ef69 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -2948,7 +2948,7 @@ int Query_result_create::binlog_show_create_table(TABLE **tables, uint count) int result; TABLE_LIST tmp_table_list; - memset(&tmp_table_list, 0, sizeof(tmp_table_list)); + memset(static_cast(&tmp_table_list), 0, sizeof(tmp_table_list)); tmp_table_list.table = *tables; query.length(0); // Have to zero it since constructor doesn't diff --git a/sql/sql_load.cc b/sql/sql_load.cc index 6cbce9217df0..3c48a6a7ae3e 100644 --- a/sql/sql_load.cc +++ b/sql/sql_load.cc @@ -447,8 +447,8 @@ int mysql_load(THD *thd,sql_exchange *ex,TABLE_LIST *table_list, MY_RETURN_REAL_PATH); } - if (thd->slave_thread & ((SYSTEM_THREAD_SLAVE_SQL | - (SYSTEM_THREAD_SLAVE_WORKER))!=0)) + if ((thd->slave_thread & (SYSTEM_THREAD_SLAVE_SQL | + SYSTEM_THREAD_SLAVE_WORKER))!=0) { #if defined(HAVE_REPLICATION) && !defined(MYSQL_CLIENT) Relay_log_info* rli= thd->rli_slave->get_c_rli(); diff --git a/sql/sql_optimizer.cc b/sql/sql_optimizer.cc index 83952346864c..980b93b6e978 100644 --- a/sql/sql_optimizer.cc +++ b/sql/sql_optimizer.cc @@ -2952,7 +2952,8 @@ bool JOIN::get_best_combination() List_iterator sj_list_it(select_lex->sj_nests); TABLE_LIST *sj_nest; while ((sj_nest= sj_list_it++)) - TRASH(&sj_nest->nested_join->sjm, sizeof(sj_nest->nested_join->sjm)); + TRASH(static_cast(&sj_nest->nested_join->sjm), + sizeof(sj_nest->nested_join->sjm)); DBUG_RETURN(false); } @@ -6377,7 +6378,7 @@ static bool optimize_semijoin_nests_for_materialization(JOIN *join) if (!(sj_nest->nested_join->sjm.positions= (st_position*)join->thd->alloc(sizeof(st_position)*n_tables))) DBUG_RETURN(true); - memcpy(sj_nest->nested_join->sjm.positions, + memcpy(static_cast(sj_nest->nested_join->sjm.positions), join->best_positions + join->const_tables, sizeof(st_position) * n_tables); } diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index ea0f43597fb8..d6616bb9a83d 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -3474,7 +3474,7 @@ case SQLCOM_PREPARE: */ thd->set_slow_log_for_admin_command(); - memset(&create_info, 0, sizeof(create_info)); + memset(static_cast(&create_info), 0, sizeof(create_info)); create_info.db_type= 0; create_info.row_type= ROW_TYPE_NOT_USED; create_info.default_table_charset= thd->variables.collation_database; diff --git a/sql/sql_partition_admin.cc b/sql/sql_partition_admin.cc index 3aca484a7482..7e7f69fafe69 100644 --- a/sql/sql_partition_admin.cc +++ b/sql/sql_partition_admin.cc @@ -157,8 +157,8 @@ static bool compare_table_with_partition(THD *thd, TABLE *table, DBUG_ENTER("compare_table_with_partition"); bool metadata_equal= false; - memset(&part_create_info, 0, sizeof(HA_CREATE_INFO)); - memset(&table_create_info, 0, sizeof(HA_CREATE_INFO)); + memset(static_cast(&part_create_info), 0, sizeof(HA_CREATE_INFO)); + memset(static_cast(&table_create_info), 0, sizeof(HA_CREATE_INFO)); update_create_info_from_table(&table_create_info, table); /* get the current auto_increment value */ diff --git a/sql/sql_planner.cc b/sql/sql_planner.cc index e52641cd5808..2bb437a2b8ac 100644 --- a/sql/sql_planner.cc +++ b/sql/sql_planner.cc @@ -1833,7 +1833,7 @@ bool Optimize_table_order::choose_table_order() /* Are there any tables to optimize? */ if (join->const_tables == join->tables) { - memcpy(join->best_positions, join->positions, + memcpy(static_cast(join->best_positions), join->positions, sizeof(POSITION) * join->const_tables); join->best_read= 1.0; join->best_rowcount= 1; @@ -2041,7 +2041,8 @@ void Optimize_table_order::optimize_straight_join(table_map join_tables) join->sort_by_table != join->positions[join->const_tables].table->table()) cost+= rowcount; // We have to make a temp table - memcpy(join->best_positions, join->positions, sizeof(POSITION)*idx); + memcpy(static_cast(join->best_positions), join->positions, + sizeof(POSITION)*idx); /** * If many plans have identical cost, which one will be used @@ -3285,7 +3286,8 @@ bool Optimize_table_order::fix_semijoin_strategies() setting it to SJ_OPT_NONE). But until then, pos->sj_strategy should not be read. */ - memcpy(pos - table_count + 1, sjm_nest->nested_join->sjm.positions, + memcpy(static_cast(pos - table_count + 1), + sjm_nest->nested_join->sjm.positions, sizeof(POSITION) * table_count); first= tableno - table_count + 1; join->best_positions[first].n_sj_tables= table_count; @@ -3304,7 +3306,7 @@ bool Optimize_table_order::fix_semijoin_strategies() first= last_inner - table_count + 1; DBUG_ASSERT((join->best_positions + first)->table->emb_sj_nest == sjm_nest); - memcpy(join->best_positions + first, // stale semijoin strategy here too + memcpy(static_cast(join->best_positions + first), // stale semijoin strategy here too sjm_nest->nested_join->sjm.positions, sizeof(POSITION) * table_count); join->best_positions[first].sj_strategy= SJ_OPT_MATERIALIZE_SCAN; diff --git a/sql/sql_select.cc b/sql/sql_select.cc index a503c9328896..f48e17c8012e 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -2374,7 +2374,7 @@ void JOIN_TAB::cleanup() else qs_cleanup(); - TRASH(this, sizeof(*this)); + TRASH(static_cast(this), sizeof(*this)); } @@ -2408,7 +2408,7 @@ void QEP_TAB::cleanup() op->mem_free(); } - TRASH(this, sizeof(*this)); + TRASH(static_cast(this), sizeof(*this)); } diff --git a/sql/sql_servers.cc b/sql/sql_servers.cc index 8594e4a3f4ed..f27a9d875fac 100644 --- a/sql/sql_servers.cc +++ b/sql/sql_servers.cc @@ -366,7 +366,7 @@ static bool close_cached_connection_tables(THD *thd, DBUG_ENTER("close_cached_connection_tables"); DBUG_ASSERT(thd); - memset(&tmp, 0, sizeof(TABLE_LIST)); + memset(static_cast(&tmp), 0, sizeof(TABLE_LIST)); mysql_mutex_lock(&LOCK_open); diff --git a/sql/sql_show.cc b/sql/sql_show.cc index 37348c7dd64b..26347e014a8d 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -628,7 +628,7 @@ find_files(THD *thd, List *files, const char *db, - memset(&table_list, 0, sizeof(table_list)); + memset(static_cast(&table_list), 0, sizeof(table_list)); if (!(dirp = my_dir(path,MYF(dir ? MY_WANT_STAT : 0)))) { @@ -1688,7 +1688,7 @@ int store_create_info(THD *thd, TABLE_LIST *table_list, String *packet, } key_info= table->key_info; - memset(&create_info, 0, sizeof(create_info)); + memset(static_cast(&create_info), 0, sizeof(create_info)); /* Allow update_create_info to update row type */ create_info.row_type= share->row_type; file->update_create_info(&create_info); @@ -2661,7 +2661,7 @@ int add_status_vars(const SHOW_VAR *list) while (list->name) all_status_vars.push_back(*list++); } - catch (std::bad_alloc) + catch (const std::bad_alloc &) { my_error(ER_OUTOFMEMORY, MYF(ME_FATALERROR), static_cast(sizeof(Status_var_array::value_type))); @@ -4850,7 +4850,7 @@ static int fill_schema_table_from_frm(THD *thd, TABLE_LIST *tables, size_t key_length; char db_name_buff[NAME_LEN + 1], table_name_buff[NAME_LEN + 1]; - memset(&table_list, 0, sizeof(TABLE_LIST)); + memset(static_cast(&table_list), 0, sizeof(TABLE_LIST)); DBUG_ASSERT(db_name->length <= NAME_LEN); DBUG_ASSERT(table_name->length <= NAME_LEN); @@ -4917,7 +4917,7 @@ static int fill_schema_table_from_frm(THD *thd, TABLE_LIST *tables, { TABLE tbl; - memset(&tbl, 0, sizeof(TABLE)); + memset(static_cast(&tbl), 0, sizeof(TABLE)); init_sql_alloc(key_memory_table_triggers_list, &tbl.mem_root, TABLE_ALLOC_BLOCK_SIZE, 0); @@ -4998,7 +4998,7 @@ static int fill_schema_table_from_frm(THD *thd, TABLE_LIST *tables, { TABLE tbl; - memset(&tbl, 0, sizeof(TABLE)); + memset(static_cast(&tbl), 0, sizeof(TABLE)); init_sql_alloc(key_memory_table_triggers_list, &tbl.mem_root, TABLE_ALLOC_BLOCK_SIZE, 0); @@ -6306,7 +6306,7 @@ bool store_schema_params(THD *thd, TABLE *table, TABLE *proc_table, bool free_sp_head; DBUG_ENTER("store_schema_params"); - memset(&tbl, 0, sizeof(TABLE)); + memset(static_cast(&tbl), 0, sizeof(TABLE)); (void) build_table_filename(path, sizeof(path), "", "", "", 0); init_tmp_table_share(thd, &share, "", 0, "", path); @@ -6519,7 +6519,7 @@ bool store_schema_proc(THD *thd, TABLE *table, TABLE *proc_table, Field *field; Create_field *field_def= &sp->m_return_field_def; - memset(&tbl, 0, sizeof(TABLE)); + memset(static_cast(&tbl), 0, sizeof(TABLE)); (void) build_table_filename(path, sizeof(path), "", "", "", 0); init_tmp_table_share(thd, &share, "", 0, "", path); field= make_field(&share, (uchar*) 0, field_def->length, @@ -6604,7 +6604,7 @@ int fill_schema_proc(THD *thd, TABLE_LIST *tables, Item *cond) strxmov(definer, thd->security_context()->priv_user().str, "@", thd->security_context()->priv_host().str, NullS); /* We use this TABLE_LIST instance only for checking of privileges. */ - memset(&proc_tables, 0, sizeof(proc_tables)); + memset(static_cast(&proc_tables), 0, sizeof(proc_tables)); proc_tables.db= (char*) "mysql"; proc_tables.db_length= 5; proc_tables.table_name= proc_tables.alias= (char*) "proc"; @@ -6792,7 +6792,7 @@ static int get_schema_views_record(THD *thd, TABLE_LIST *tables, { TABLE_LIST table_list; uint view_access; - memset(&table_list, 0, sizeof(table_list)); + memset(static_cast(&table_list), 0, sizeof(table_list)); table_list.db= tables->db; table_list.table_name= tables->table_name; table_list.grant.privilege= thd->col_access; diff --git a/sql/sql_table.cc b/sql/sql_table.cc index de053ba63af6..1b90f4c51763 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -6017,7 +6017,7 @@ bool mysql_create_like_table(THD* thd, TABLE_LIST* table, TABLE_LIST* src_table, } /* Fill HA_CREATE_INFO and Alter_info with description of source table. */ - memset(&local_create_info, 0, sizeof(local_create_info)); + memset(static_cast(&local_create_info), 0, sizeof(local_create_info)); local_create_info.db_type= src_table->table->s->db_type(); local_create_info.row_type= src_table->table->s->row_type; if (mysql_prepare_alter_table(thd, src_table->table, &local_create_info, @@ -10771,7 +10771,7 @@ copy_data_between_tables(PSI_stage_progress *psi, from->sort.io_cache=(IO_CACHE*) my_malloc(key_memory_TABLE_sort_io_cache, sizeof(IO_CACHE), MYF(MY_FAE | MY_ZEROFILL)); - memset(&tables, 0, sizeof(tables)); + memset(static_cast(&tables), 0, sizeof(tables)); tables.table= from; tables.alias= tables.table_name= from->s->table_name.str; tables.db= from->s->db.str; @@ -10940,7 +10940,7 @@ bool mysql_recreate_table(THD *thd, TABLE_LIST *table_list, bool table_copy) /* Same applies to MDL request. */ table_list->mdl_request.set_type(MDL_SHARED_NO_WRITE); - memset(&create_info, 0, sizeof(create_info)); + memset(static_cast(&create_info), 0, sizeof(create_info)); create_info.row_type=ROW_TYPE_NOT_USED; create_info.default_table_charset=default_charset_info; /* Force alter table to recreate table */ diff --git a/sql/sql_tmp_table.cc b/sql/sql_tmp_table.cc index a261b76b8bfa..bdf59375e758 100644 --- a/sql/sql_tmp_table.cc +++ b/sql/sql_tmp_table.cc @@ -804,7 +804,7 @@ create_tmp_table(THD *thd, Temp_table_param *param, List &fields, my_stpcpy(tmpname,path); /* make table according to fields */ - memset(table, 0, sizeof(*table)); + memset(static_cast(table), 0, sizeof(*table)); memset(reg_field, 0, sizeof(Field*)*(field_count + 2)); memset(default_field, 0, sizeof(Field*) * (field_count + 1)); memset(from_field, 0, sizeof(Field*)*(field_count + 1)); @@ -1643,7 +1643,7 @@ TABLE *create_duplicate_weedout_tmp_table(THD *thd, my_stpcpy(tmpname,path); /* STEP 4: Create TABLE description */ - memset(table, 0, sizeof(*table)); + memset(static_cast(table), 0, sizeof(*table)); memset(reg_field, 0, sizeof(Field*) * 3); table->mem_root= own_root; @@ -1962,8 +1962,8 @@ TABLE *create_virtual_tmp_table(THD *thd, List &field_list) NullS)) return 0; - memset(table, 0, sizeof(*table)); - memset(share, 0, sizeof(*share)); + memset(static_cast(table), 0, sizeof(*table)); + memset(static_cast(share), 0, sizeof(*share)); table->field= field; table->s= share; table->temp_pool_slot= MY_BIT_NONE; @@ -2243,7 +2243,7 @@ bool create_innodb_tmp_table(TABLE *table, KEY *keyinfo) HA_CREATE_INFO create_info; - memset(&create_info, 0, sizeof(create_info)); + memset(static_cast(&create_info), 0, sizeof(create_info)); create_info.db_type= table->s->db_type(); create_info.row_type= table->s->row_type; diff --git a/sql/sql_truncate.cc b/sql/sql_truncate.cc index f7d700b6c90d..efcd2c5e456c 100644 --- a/sql/sql_truncate.cc +++ b/sql/sql_truncate.cc @@ -281,7 +281,7 @@ static bool recreate_temporary_table(THD *thd, TABLE *table) handlerton *table_type= table->s->db_type(); DBUG_ENTER("recreate_temporary_table"); - memset(&create_info, 0, sizeof(create_info)); + memset(static_cast(&create_info), 0, sizeof(create_info)); table->file->info(HA_STATUS_AUTO | HA_STATUS_NO_LOCK); diff --git a/sql/sql_union.cc b/sql/sql_union.cc index ffb3e0359dfe..b68c8a49ccdd 100644 --- a/sql/sql_union.cc +++ b/sql/sql_union.cc @@ -631,7 +631,8 @@ bool st_select_lex_unit::prepare(THD *thd_arg, Query_result *sel_result, create_options, "", false, instantiate_tmp_table)) goto err; - memset(&result_table_list, 0, sizeof(result_table_list)); + memset(static_cast(&result_table_list), 0, + sizeof(result_table_list)); result_table_list.db= (char*) ""; result_table_list.table_name= result_table_list.alias= (char*) "union"; result_table_list.table= table= union_result->table; diff --git a/sql/sql_view.cc b/sql/sql_view.cc index d9605a294dac..252c8a7a90a5 100644 --- a/sql/sql_view.cc +++ b/sql/sql_view.cc @@ -212,7 +212,7 @@ fill_defined_view_parts (THD *thd, TABLE_LIST *view) LEX *lex= thd->lex; TABLE_LIST decoy; - memcpy (&decoy, view, sizeof (TABLE_LIST)); + memcpy(static_cast(&decoy), view, sizeof (TABLE_LIST)); key_length= get_table_def_key(view, &key); @@ -2075,7 +2075,7 @@ mysql_rename_view(THD *thd, view definition parsing or use temporary 'view_def' object for it. */ - memset(&view_def, 0, sizeof(view_def)); + memset(static_cast(&view_def), 0, sizeof(view_def)); view_def.timestamp.str= view_def.timestamp_buffer; view_def.view_suid= TRUE; diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 8a3dfde5a7e6..d2f376de02df 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -2290,7 +2290,8 @@ create: lex->alter_info.reset(); lex->col_list.empty(); lex->change=NullS; - memset(&lex->create_info, 0, sizeof(lex->create_info)); + memset(static_cast(&lex->create_info), 0, + sizeof(lex->create_info)); lex->create_info.options=$2 | $4; lex->create_info.default_table_charset= NULL; lex->name.str= 0; @@ -7648,7 +7649,8 @@ alter: lex->select_lex->init_order(); lex->select_lex->db= const_cast((lex->select_lex->table_list.first)->db); - memset(&lex->create_info, 0, sizeof(lex->create_info)); + memset(static_cast(&lex->create_info), 0, + sizeof(lex->create_info)); lex->create_info.db_type= 0; lex->create_info.default_table_charset= NULL; lex->create_info.row_type= ROW_TYPE_NOT_USED; @@ -11957,7 +11959,8 @@ show: SHOW { LEX *lex=Lex; - memset(&lex->create_info, 0, sizeof(lex->create_info)); + memset(static_cast(&lex->create_info), 0, + sizeof(lex->create_info)); } show_param ; diff --git a/sql/table.cc b/sql/table.cc index 159f7667514f..7b2512eb7316 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -392,7 +392,7 @@ TABLE_SHARE *alloc_table_share(TABLE_LIST *table_list, const char *key, table_cache_instances * sizeof(*cache_element_array), NULL)) { - memset(share, 0, sizeof(*share)); + memset(static_cast(share), 0, sizeof(*share)); share->set_table_cache_key(key_buff, key, key_length); @@ -458,7 +458,7 @@ void init_tmp_table_share(THD *thd, TABLE_SHARE *share, const char *key, DBUG_ENTER("init_tmp_table_share"); DBUG_PRINT("enter", ("table: '%s'.'%s'", key, table_name)); - memset(share, 0, sizeof(*share)); + memset(static_cast(share), 0, sizeof(*share)); init_sql_alloc(key_memory_table_share, &share->mem_root, TABLE_ALLOC_BLOCK_SIZE, 0); share->table_category= TABLE_CATEGORY_TEMPORARY; @@ -3168,7 +3168,7 @@ int open_table_from_share(THD *thd, TABLE_SHARE *share, const char *alias, share->table_name.str, (long) outparam)); error= 1; - memset(outparam, 0, sizeof(*outparam)); + memset(static_cast(outparam), 0, sizeof(*outparam)); outparam->in_use= thd; outparam->s= share; outparam->db_stat= db_stat; @@ -4997,7 +4997,8 @@ TABLE_LIST *TABLE_LIST::new_nested_join(MEM_ROOT *allocator, if (join_nest == NULL) return NULL; - memset(join_nest, 0, ALIGN_SIZE(sizeof(TABLE_LIST)) + sizeof(NESTED_JOIN)); + memset(static_cast(join_nest), 0, + ALIGN_SIZE(sizeof(TABLE_LIST)) + sizeof(NESTED_JOIN)); join_nest->nested_join= (NESTED_JOIN *) ((uchar *)join_nest + ALIGN_SIZE(sizeof(TABLE_LIST))); diff --git a/sql/table.h b/sql/table.h index 21deb9e289e5..2406a67f0365 100644 --- a/sql/table.h +++ b/sql/table.h @@ -1791,7 +1791,7 @@ struct TABLE_LIST enum thr_lock_type lock_type_arg, enum enum_mdl_type mdl_type_arg) { - memset(this, 0, sizeof(*this)); + memset(static_cast(this), 0, sizeof(*this)); m_map= 1; db= (char*) db_name_arg; db_length= db_length_arg; diff --git a/sql/trigger.cc b/sql/trigger.cc index 99e5c956c60d..3d5ce03fc6ce 100644 --- a/sql/trigger.cc +++ b/sql/trigger.cc @@ -426,7 +426,8 @@ Trigger::Trigger(MEM_ROOT *mem_root, m_on_table_name= NULL_STR; m_parse_error_message[0]= 0; - memset(&m_subject_table_grant, 0, sizeof (m_subject_table_grant)); + memset(static_cast(&m_subject_table_grant), 0, + sizeof(m_subject_table_grant)); } diff --git a/sql/tztime.cc b/sql/tztime.cc index 2261144ae2c4..0d4dc58f1c40 100644 --- a/sql/tztime.cc +++ b/sql/tztime.cc @@ -1537,7 +1537,8 @@ my_offset_tzs_get_key(Time_zone_offset *entry, static void tz_init_table_list(TABLE_LIST *tz_tabs) { - memset(tz_tabs, 0, sizeof(TABLE_LIST) * MY_TZ_TABLES_COUNT); + memset(static_cast(tz_tabs), 0, + sizeof(TABLE_LIST) * MY_TZ_TABLES_COUNT); for (int i= 0; i < MY_TZ_TABLES_COUNT; i++) { @@ -1680,7 +1681,7 @@ my_tz_init(THD *org_thd, const char *default_tzname, my_bool bootstrap) leap seconds shared by all time zones. */ thd->set_db(db); - memset(&tz_tables[0], 0, sizeof(TABLE_LIST)); + memset(static_cast(&tz_tables[0]), 0, sizeof(TABLE_LIST)); tz_tables[0].alias= tz_tables[0].table_name= (char*)"time_zone_leap_second"; tz_tables[0].table_name_length= 21; diff --git a/sql/unireg.cc b/sql/unireg.cc index dffa7f3bcdf5..fd5d68e93ac2 100644 --- a/sql/unireg.cc +++ b/sql/unireg.cc @@ -1298,8 +1298,8 @@ static bool make_empty_rec(THD *thd, File file, DBUG_ENTER("make_empty_rec"); /* We need a table to generate columns for default values */ - memset(&table, 0, sizeof(table)); - memset(&share, 0, sizeof(share)); + memset(static_cast(&table), 0, sizeof(table)); + memset(static_cast(&share), 0, sizeof(share)); table.s= &share; if (!(buff=(uchar*) my_malloc(key_memory_frm, diff --git a/storage/blackhole/ha_blackhole.cc b/storage/blackhole/ha_blackhole.cc index c4670ca5a803..71adbcd92ca1 100644 --- a/storage/blackhole/ha_blackhole.cc +++ b/storage/blackhole/ha_blackhole.cc @@ -189,7 +189,7 @@ int ha_blackhole::info(uint flag) { DBUG_ENTER("ha_blackhole::info"); - memset(&stats, 0, sizeof(stats)); + memset(static_cast(&stats), 0, sizeof(stats)); if (flag & HA_STATUS_AUTO) stats.auto_increment_value= 1; DBUG_RETURN(0); diff --git a/storage/innobase/buf/buf0buddy.cc b/storage/innobase/buf/buf0buddy.cc index a21aae0ad715..8a026c7f75b8 100644 --- a/storage/innobase/buf/buf0buddy.cc +++ b/storage/innobase/buf/buf0buddy.cc @@ -129,7 +129,8 @@ buf_buddy_stamp_free( buf_buddy_free_t* buf, /*!< in/out: block to stamp */ ulint i) /*!< in: block size */ { - ut_d(memset(buf, static_cast(i), BUF_BUDDY_LOW << i)); + ut_d(memset(static_cast(buf), static_cast(i), + BUF_BUDDY_LOW << i)); buf_buddy_mem_invalid(buf, i); mach_write_to_4(buf->stamp.bytes + BUF_BUDDY_STAMP_OFFSET, BUF_BUDDY_STAMP_FREE); diff --git a/storage/innobase/buf/buf0buf.cc b/storage/innobase/buf/buf0buf.cc index 226559375e88..d82df60fcda1 100644 --- a/storage/innobase/buf/buf0buf.cc +++ b/storage/innobase/buf/buf0buf.cc @@ -2038,8 +2038,10 @@ buf_page_realloc( if (buf_page_can_relocate(&block->page)) { mutex_enter(&new_block->mutex); - memcpy(new_block->frame, block->frame, UNIV_PAGE_SIZE); - memcpy(&new_block->page, &block->page, sizeof block->page); + memcpy(static_cast(new_block->frame), block->frame, + UNIV_PAGE_SIZE); + memcpy(static_cast(&new_block->page), &block->page, + sizeof block->page); /* relocate LRU list */ ut_ad(block->page.in_LRU_list); @@ -3163,7 +3165,7 @@ buf_relocate( } #endif /* UNIV_DEBUG */ - memcpy(dpage, bpage, sizeof *dpage); + memcpy(static_cast(dpage), bpage, sizeof *dpage); /* Important that we adjust the hazard pointer before removing bpage from LRU list. */ diff --git a/storage/innobase/buf/buf0dblwr.cc b/storage/innobase/buf/buf0dblwr.cc index a3502b4c0d28..e69b36d9981f 100644 --- a/storage/innobase/buf/buf0dblwr.cc +++ b/storage/innobase/buf/buf0dblwr.cc @@ -346,7 +346,7 @@ buf_parallel_dblwr_make_path(void) if (parallel_dblwr_buf.path) return(DB_SUCCESS); - char path[FN_REFLEN]; + char path[FN_REFLEN + 1 /* OS_PATH_SEPARATOR */]; const char *dir = NULL; ut_ad(srv_parallel_doublewrite_path); diff --git a/storage/innobase/buf/buf0dump.cc b/storage/innobase/buf/buf0dump.cc index 64a1204b074a..9a289519adfe 100644 --- a/storage/innobase/buf/buf0dump.cc +++ b/storage/innobase/buf/buf0dump.cc @@ -265,8 +265,9 @@ buf_dump( { #define SHOULD_QUIT() (SHUTTING_DOWN() && obey_shutdown) + static const char format_name[]= "%s.incomplete"; char full_filename[OS_FILE_MAX_PATH]; - char tmp_filename[OS_FILE_MAX_PATH]; + char tmp_filename[OS_FILE_MAX_PATH + sizeof(format_name)]; char now[32]; FILE* f; ulint i; @@ -275,7 +276,7 @@ buf_dump( buf_dump_generate_path(full_filename, sizeof(full_filename)); ut_snprintf(tmp_filename, sizeof(tmp_filename), - "%s.incomplete", full_filename); + format_name, full_filename); buf_dump_status(STATUS_INFO, "Dumping buffer pool(s) to %s", full_filename); diff --git a/storage/innobase/buf/buf0lru.cc b/storage/innobase/buf/buf0lru.cc index ef57231c2588..94511716c18c 100644 --- a/storage/innobase/buf/buf0lru.cc +++ b/storage/innobase/buf/buf0lru.cc @@ -2152,7 +2152,7 @@ buf_LRU_free_page( } if (b) { - memcpy(b, bpage, sizeof *b); + memcpy(static_cast(b), bpage, sizeof *b); } if (!buf_LRU_block_remove_hashed(bpage, zip)) { diff --git a/storage/innobase/fts/fts0pars.cc b/storage/innobase/fts/fts0pars.cc index e4d1bba2be69..78c76e8c7c05 100644 --- a/storage/innobase/fts/fts0pars.cc +++ b/storage/innobase/fts/fts0pars.cc @@ -107,8 +107,8 @@ typedef int (*fts_scanner_alt)(YYSTYPE* val, yyscan_t yyscanner); typedef int (*fts_scanner)(); struct fts_lexer_t { - fts_scanner scanner; - void* yyscanner; + fts_scanner_alt scanner; + void* yyscanner; }; @@ -1948,7 +1948,7 @@ fts_lexer_create( reinterpret_cast(query), static_cast(query_len), fts_lexer->yyscanner); - fts_lexer->scanner = reinterpret_cast(fts_blexer); + fts_lexer->scanner = fts_blexer; /* FIXME: Debugging */ /* fts0bset_debug(1 , fts_lexer->yyscanner); */ } else { @@ -1957,7 +1957,7 @@ fts_lexer_create( reinterpret_cast(query), static_cast(query_len), fts_lexer->yyscanner); - fts_lexer->scanner = reinterpret_cast(fts_tlexer); + fts_lexer->scanner = fts_tlexer; } return(fts_lexer); @@ -1971,7 +1971,7 @@ fts_lexer_free( /*===========*/ fts_lexer_t* fts_lexer) { - if (fts_lexer->scanner == (fts_scan) fts_blexer) { + if (fts_lexer->scanner == fts_blexer) { fts0blex_destroy(fts_lexer->yyscanner); } else { fts0tlex_destroy(fts_lexer->yyscanner); diff --git a/storage/innobase/fts/fts0pars.y b/storage/innobase/fts/fts0pars.y index 1f4ec9922e3b..88f354760af8 100644 --- a/storage/innobase/fts/fts0pars.y +++ b/storage/innobase/fts/fts0pars.y @@ -53,8 +53,8 @@ typedef int (*fts_scanner_alt)(YYSTYPE* val, yyscan_t yyscanner); typedef int (*fts_scanner)(); struct fts_lexer_struct { - fts_scanner scanner; - void* yyscanner; + fts_scanner_alt scanner; + void* yyscanner; }; %} @@ -238,13 +238,13 @@ fts_lexer_create( if (boolean_mode) { fts0blex_init(&fts_lexer->yyscanner); fts0b_scan_bytes((char*) query, (int) query_len, fts_lexer->yyscanner); - fts_lexer->scanner = (fts_scan) fts_blexer; + fts_lexer->scanner = fts_blexer; /* FIXME: Debugging */ /* fts0bset_debug(1 , fts_lexer->yyscanner); */ } else { fts0tlex_init(&fts_lexer->yyscanner); fts0t_scan_bytes((char*) query, (int) query_len, fts_lexer->yyscanner); - fts_lexer->scanner = (fts_scan) fts_tlexer; + fts_lexer->scanner = fts_tlexer; } return(fts_lexer); @@ -258,7 +258,7 @@ fts_lexer_free( /*===========*/ fts_lexer_t* fts_lexer) { - if (fts_lexer->scanner == (fts_scan) fts_blexer) { + if (fts_lexer->scanner == fts_blexer) { fts0blex_destroy(fts_lexer->yyscanner); } else { fts0tlex_destroy(fts_lexer->yyscanner); diff --git a/storage/innobase/gis/gis0rtree.cc b/storage/innobase/gis/gis0rtree.cc index ee89e0a913f5..639d33eb70fd 100644 --- a/storage/innobase/gis/gis0rtree.cc +++ b/storage/innobase/gis/gis0rtree.cc @@ -663,7 +663,7 @@ rtr_adjust_upper_level( /* Create a memory heap where the data tuple is stored */ heap = mem_heap_create(1024); - memset(&cursor, 0, sizeof(cursor)); + memset(static_cast(&cursor), 0, sizeof(cursor)); cursor.thr = sea_cur->thr; @@ -1380,7 +1380,7 @@ rtr_ins_enlarge_mbr( rtr_page_cal_mbr(index, block, &new_mbr, heap); /* Get father block. */ - memset(&cursor, 0, sizeof(cursor)); + memset(static_cast(&cursor), 0, sizeof(cursor)); offsets = rtr_page_get_father_block( NULL, heap, index, block, mtr, btr_cur, &cursor); diff --git a/storage/innobase/gis/gis0sea.cc b/storage/innobase/gis/gis0sea.cc index b7a061a8fef5..02057b90652d 100644 --- a/storage/innobase/gis/gis0sea.cc +++ b/storage/innobase/gis/gis0sea.cc @@ -1547,7 +1547,8 @@ rtr_copy_buf( will be copied. It is also undefined what will happen with the newly memcpy()ed mutex if the source mutex was acquired by (another) thread while it was copied. */ - memcpy(&matches->block.page, &block->page, sizeof(buf_page_t)); + memcpy(static_cast(&matches->block.page), &block->page, + sizeof(buf_page_t)); matches->block.frame = block->frame; #ifndef UNIV_HOTBACKUP matches->block.unzip_LRU = block->unzip_LRU; diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index 9cd63cb43870..c0cde0de383a 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -3217,7 +3217,7 @@ innobase_register_trx( THD* thd, /* in: MySQL thd (connection) object */ trx_t* trx) /* in: transaction to register */ { - const ulonglong trx_id = static_cast( + const ulonglong trx_id = static_cast( trx_get_id_for_print(trx)); trans_register_ha(thd, FALSE, hton, &trx_id); diff --git a/storage/innobase/handler/i_s.cc b/storage/innobase/handler/i_s.cc index a20461f65f68..c8714a704f4f 100644 --- a/storage/innobase/handler/i_s.cc +++ b/storage/innobase/handler/i_s.cc @@ -1467,7 +1467,7 @@ i_s_cmp_fill_low( table->field[5]->store(zip_stat->decompressed_usec / 1000000, true); if (reset) { - memset(zip_stat, 0, sizeof *zip_stat); + memset(static_cast(zip_stat), 0, sizeof *zip_stat); } if (schema_table_store_record(thd, table)) { diff --git a/storage/innobase/include/data0type.ic b/storage/innobase/include/data0type.ic index 901403362fee..8f3ba9eaee6b 100644 --- a/storage/innobase/include/data0type.ic +++ b/storage/innobase/include/data0type.ic @@ -506,6 +506,7 @@ dtype_get_fixed_size_low( return(0); } #endif /* UNIV_DEBUG */ + // fallthrough case DATA_CHAR: case DATA_FIXBINARY: case DATA_INT: @@ -587,6 +588,7 @@ dtype_get_min_size_low( return(0); } #endif /* UNIV_DEBUG */ + // fallthrough case DATA_CHAR: case DATA_FIXBINARY: case DATA_INT: diff --git a/storage/innobase/os/os0file.cc b/storage/innobase/os/os0file.cc index 0d87e795ef63..43963ccb53b9 100644 --- a/storage/innobase/os/os0file.cc +++ b/storage/innobase/os/os0file.cc @@ -6583,7 +6583,8 @@ AIO::AIO( m_not_full = os_event_create("aio_not_full"); m_is_empty = os_event_create("aio_is_empty"); - memset(&m_slots[0], 0x0, sizeof(m_slots[0]) * m_slots.size()); + memset(static_cast(&m_slots[0]), 0x0, + sizeof(m_slots[0]) * m_slots.size()); #ifdef LINUX_NATIVE_AIO memset(&m_events[0], 0x0, sizeof(m_events[0]) * m_events.size()); #endif /* LINUX_NATIVE_AIO */ diff --git a/storage/innobase/row/row0ftsort.cc b/storage/innobase/row/row0ftsort.cc index 5292c48fcebd..7b7bc16e732b 100644 --- a/storage/innobase/row/row0ftsort.cc +++ b/storage/innobase/row/row0ftsort.cc @@ -789,7 +789,7 @@ fts_parallel_tokenization( merge_file = psort_info->merge_file; blob_heap = mem_heap_create(512); memset(&doc, 0, sizeof(doc)); - memset(&t_ctx, 0, sizeof(t_ctx)); + memset(static_cast(&t_ctx), 0, sizeof(t_ctx)); memset(mycount, 0, FTS_NUM_AUX_INDEX * sizeof(int)); doc.charset = fts_index_get_charset( diff --git a/storage/innobase/row/row0import.cc b/storage/innobase/row/row0import.cc index 71d680aa2ada..5671729ebf44 100644 --- a/storage/innobase/row/row0import.cc +++ b/storage/innobase/row/row0import.cc @@ -2503,7 +2503,7 @@ row_import_cfg_read_index_fields( dict_field_t* field = index->m_fields; - memset(field, 0x0, sizeof(*field) * n_fields); + memset(static_cast(field), 0x0, sizeof(*field) * n_fields); for (ulint i = 0; i < n_fields; ++i, ++field) { byte* ptr = row; @@ -3623,7 +3623,7 @@ row_import_for_mysql( row_import cfg; ulint space_flags = 0; - memset(&cfg, 0x0, sizeof(cfg)); + memset(static_cast(&cfg), 0x0, sizeof(cfg)); err = row_import_read_cfg(table, trx->mysql_thd, cfg); diff --git a/storage/innobase/row/row0uins.cc b/storage/innobase/row/row0uins.cc index 4615a4e233b0..dafbfd85578f 100644 --- a/storage/innobase/row/row0uins.cc +++ b/storage/innobase/row/row0uins.cc @@ -200,7 +200,7 @@ row_undo_ins_remove_sec_low( ibool modify_leaf = false; log_free_check(); - memset(&pcur, 0, sizeof(pcur)); + memset(static_cast(&pcur), 0, sizeof(pcur)); mtr_start(&mtr); mtr.set_named_space(index->space); diff --git a/storage/myisam/mi_write.c b/storage/myisam/mi_write.c index 6cdd227588f6..890fb852bcd2 100644 --- a/storage/myisam/mi_write.c +++ b/storage/myisam/mi_write.c @@ -926,7 +926,7 @@ static int keys_compare(bulk_insert_param *param, uchar *key1, uchar *key2) } -static int keys_free(uchar *key, TREE_FREE mode, bulk_insert_param *param) +static void keys_free(void* vkey, TREE_FREE mode, const void *vparam) { /* Probably I can use info->lastkey here, but I'm not sure, @@ -935,6 +935,8 @@ static int keys_free(uchar *key, TREE_FREE mode, bulk_insert_param *param) uchar lastkey[MI_MAX_KEY_BUFF]; uint keylen; MI_KEYDEF *keyinfo; + uchar *key= (uchar*)(vkey); + bulk_insert_param *param= (bulk_insert_param*)(vparam); switch (mode) { case free_init: @@ -943,19 +945,20 @@ static int keys_free(uchar *key, TREE_FREE mode, bulk_insert_param *param) mysql_rwlock_wrlock(¶m->info->s->key_root_lock[param->keynr]); param->info->s->keyinfo[param->keynr].version++; } - return 0; + return; case free_free: keyinfo=param->info->s->keyinfo+param->keynr; keylen=_mi_keylength(keyinfo, key); memcpy(lastkey, key, keylen); - return _mi_ck_write_btree(param->info,param->keynr,lastkey, - keylen - param->info->s->rec_reflength); + _mi_ck_write_btree(param->info,param->keynr,lastkey, + keylen - param->info->s->rec_reflength); + return; case free_end: if (param->info->s->concurrent_insert) mysql_rwlock_unlock(¶m->info->s->key_root_lock[param->keynr]); - return 0; + return; } - return -1; + return; } @@ -1013,7 +1016,7 @@ int mi_init_bulk_insert(MI_INFO *info, ulong cache_size, ha_rows rows) cache_size * key[i].maxlength, cache_size * key[i].maxlength, 0, (qsort_cmp2)keys_compare, 0, - (tree_element_free) keys_free, (void *)params++); + keys_free, (void *)params++); } else info->bulk_insert[i].root=0; diff --git a/storage/myisam/myisamlog.c b/storage/myisam/myisamlog.c index 3a2c5847c447..0e1ee263bfde 100644 --- a/storage/myisam/myisamlog.c +++ b/storage/myisam/myisamlog.c @@ -62,7 +62,8 @@ static int test_if_open(struct file_info *key,element_count count, static void fix_blob_pointers(MI_INFO *isam,uchar *record); static int test_when_accessed(struct file_info *key,element_count count, struct st_access_param *access_param); -static void file_info_free(struct file_info *info); +static void file_info_free(void* key, TREE_FREE action MY_ATTRIBUTE((unused)), + const void *param MY_ATTRIBUTE((unused))); static int close_some_file(TREE *tree); static int reopen_closed_file(TREE *tree,struct file_info *file_info); static int find_record_with_key(struct file_info *file_info,uchar *record); @@ -340,7 +341,7 @@ static int examine_log(char * file_name, char **table_names) init_io_cache(&cache,file,0,READ_CACHE,start_offset,0,MYF(0)); memset(com_count, 0, sizeof(com_count)); init_tree(&tree,0,0,sizeof(file_info),(qsort_cmp2) file_info_compare,1, - (tree_element_free) file_info_free, NULL); + file_info_free, NULL); (void) init_key_cache(dflt_key_cache,KEY_CACHE_BLOCK_SIZE,KEY_CACHE_SIZE, 0, 0); @@ -763,8 +764,10 @@ static int test_when_accessed (struct file_info *key, } -static void file_info_free(struct file_info *fileinfo) +static void file_info_free(void* key, TREE_FREE action MY_ATTRIBUTE((unused)), + const void *param MY_ATTRIBUTE((unused))) { + struct file_info *fileinfo= (struct file_info*)key; DBUG_ENTER("file_info_free"); if (update) { diff --git a/storage/partition/ha_partition.cc b/storage/partition/ha_partition.cc index 94224eb332df..60e3de90dbea 100644 --- a/storage/partition/ha_partition.cc +++ b/storage/partition/ha_partition.cc @@ -1455,7 +1455,7 @@ void ha_partition::update_create_info(HA_CREATE_INFO *create_info) uint num_parts = num_subparts ? m_file_tot_parts / num_subparts : m_file_tot_parts; HA_CREATE_INFO dummy_info; - memset(&dummy_info, 0, sizeof(dummy_info)); + memset(static_cast(&dummy_info), 0, sizeof(dummy_info)); /* Since update_create_info() can be called from mysql_prepare_alter_table() diff --git a/storage/tokudb/PerconaFT b/storage/tokudb/PerconaFT index f02e0f418da6..6c087026e0b3 160000 --- a/storage/tokudb/PerconaFT +++ b/storage/tokudb/PerconaFT @@ -1 +1 @@ -Subproject commit f02e0f418da6a361f2fc42413094a46f2b1860e1 +Subproject commit 6c087026e0b3e9f61938a7b725f8a18a916f7575 diff --git a/unittest/gunit/decimal-t.cc b/unittest/gunit/decimal-t.cc index fb0e5e0a0811..4a5ff8922aff 100644 --- a/unittest/gunit/decimal-t.cc +++ b/unittest/gunit/decimal-t.cc @@ -214,7 +214,7 @@ void do_test_d2f(const char *s, int ex) void do_test_d2b2d(const char *str, int p, int s, const char *orig, int ex) { char s1[100]; - char s2[100]; + char s2[164]; uchar buf[100]; char *end; int res, i, size=decimal_bin_size(p, s); @@ -247,7 +247,7 @@ void do_test_f2d(double from, int ex) void do_test_ull2d(ulonglong from, const char *orig, int ex) { char s[100]; - char s1[100]; + char s1[123]; int res; res=ulonglong2decimal(from, &a); @@ -259,7 +259,7 @@ void do_test_ull2d(ulonglong from, const char *orig, int ex) void do_test_ll2d(longlong from, const char *orig, int ex) { char s[100]; - char s1[100]; + char s1[123]; int res; res=longlong2decimal(from, &a); @@ -271,7 +271,7 @@ void do_test_ll2d(longlong from, const char *orig, int ex) void do_test_d2ull(const char *s, const char *orig, int ex) { char s1[100], *end; - char s2[100]; + char s2[154]; ulonglong x; int res; @@ -291,7 +291,7 @@ void do_test_d2ull(const char *s, const char *orig, int ex) void do_test_d2ll(const char *s, const char *orig, int ex) { char s1[100], *end; - char s2[100]; + char s2[154]; longlong x; int res; diff --git a/unittest/gunit/fake_table.h b/unittest/gunit/fake_table.h index 85dd10fe45b9..3eb8178ccd63 100644 --- a/unittest/gunit/fake_table.h +++ b/unittest/gunit/fake_table.h @@ -104,7 +104,7 @@ class Fake_TABLE: public TABLE void initialize() { TABLE *as_table= static_cast(this); - memset(as_table, 0, sizeof(*as_table)); + memset(static_cast(as_table), 0, sizeof(*as_table)); s= &table_share; in_use= current_thd; null_row= '\0'; diff --git a/unittest/gunit/table_cache-t.cc b/unittest/gunit/table_cache-t.cc index 8ec488732f79..28d21affc91f 100644 --- a/unittest/gunit/table_cache-t.cc +++ b/unittest/gunit/table_cache-t.cc @@ -133,7 +133,7 @@ class Mock_share : public TABLE_SHARE public: Mock_share(const char *key) { - memset((TABLE_SHARE *)this, 0, sizeof(TABLE_SHARE)); + memset(static_cast(this), 0, sizeof(TABLE_SHARE)); /* Both table_cache_key and cache_element array are used by Table_cache code. @@ -162,7 +162,7 @@ class Mock_share : public TABLE_SHARE { TABLE *result= (TABLE *)my_malloc(PSI_NOT_INSTRUMENTED, sizeof(TABLE), MYF(0)); - memset(result, 0, sizeof(TABLE)); + memset(static_cast(result), 0, sizeof(TABLE)); result->s= this; // We create TABLE which is already marked as used result->in_use= thd; From b747c8ffa0216b444b24265da9133456f96951e7 Mon Sep 17 00:00:00 2001 From: fiowro Date: Fri, 20 Apr 2018 02:15:41 +0300 Subject: [PATCH 0782/1221] Fix for DOC-707 with a new lower value for rocksdb_max_row_locks --- doc/source/myrocks/variables.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/source/myrocks/variables.rst b/doc/source/myrocks/variables.rst index e35869c410a6..1f09d8c60c05 100644 --- a/doc/source/myrocks/variables.rst +++ b/doc/source/myrocks/variables.rst @@ -1630,11 +1630,12 @@ Finally, ``-1`` means no limit, i.e. an infinite number of file handles. .. variable:: rocksdb_max_row_locks :version 5.7.19-17: Implemented + :version 5.7.21-21: Default value has changed from ``1073741824`` to ``1048576`` :cli: ``--rocksdb-max-row-locks`` :dyn: Yes :scope: Global, Session :vartype: Numeric - :default: ``1073741824`` + :default: ``1048576`` Specifies the limit on the maximum number of row locks a transaction can have before it fails. From 77fe32a2b43b28da461f17e4f96a01fc67ba58ab Mon Sep 17 00:00:00 2001 From: Evgeniy Patlan Date: Fri, 20 Apr 2018 12:14:02 +0300 Subject: [PATCH 0783/1221] [BLD-1051] fix postinst script --- build-ps/debian/percona-server-server-5.7.postinst | 4 ++-- build-ps/ubuntu/percona-server-server-5.7.postinst | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build-ps/debian/percona-server-server-5.7.postinst b/build-ps/debian/percona-server-server-5.7.postinst index 0c737291ebb5..2a2869ab81eb 100755 --- a/build-ps/debian/percona-server-server-5.7.postinst +++ b/build-ps/debian/percona-server-server-5.7.postinst @@ -18,7 +18,7 @@ take_upstart_job_backup () { check_exit_status() { errcode=$1 - if [ $errcode > 0 ]; + if [ $errcode -gt 0 ]; then exit $errcode fi @@ -35,7 +35,7 @@ then for dir in "${MY_BASEDIR_VERSION}/lib/mysql" "/usr/lib64" "/usr/lib/x86_64-linux-gnu" "/usr/lib"; do if [ -r "$dir/libjemalloc.so.1" ]; then preload_value=$(grep "LD_PRELOAD" /etc/default/mysql | awk -F'=' '{print $2}') - if [ $preload_value = 0 ]; then + if [ "x$preload_value" = "x0" ]; then sed -i 's/^LD_PRELOAD.*//' /etc/default/mysql fi preload_exists=$(grep -c "LD_PRELOAD" /etc/default/mysql) diff --git a/build-ps/ubuntu/percona-server-server-5.7.postinst b/build-ps/ubuntu/percona-server-server-5.7.postinst index 141e0c2b9324..2a2869ab81eb 100755 --- a/build-ps/ubuntu/percona-server-server-5.7.postinst +++ b/build-ps/ubuntu/percona-server-server-5.7.postinst @@ -35,7 +35,7 @@ then for dir in "${MY_BASEDIR_VERSION}/lib/mysql" "/usr/lib64" "/usr/lib/x86_64-linux-gnu" "/usr/lib"; do if [ -r "$dir/libjemalloc.so.1" ]; then preload_value=$(grep "LD_PRELOAD" /etc/default/mysql | awk -F'=' '{print $2}') - if [ $preload_value = 0 ]; then + if [ "x$preload_value" = "x0" ]; then sed -i 's/^LD_PRELOAD.*//' /etc/default/mysql fi preload_exists=$(grep -c "LD_PRELOAD" /etc/default/mysql) From 99ce6d5267bd21eb0a832d5740ff8b88d43c6ba0 Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Fri, 20 Apr 2018 12:10:10 +0200 Subject: [PATCH 0784/1221] PS-3949: Update version of gcc-5, gcc-6, gcc-7 for Travis CI PS-3948: Bump XCode toolchain in TravisCI to 9.3 1. Bump XCode version from 9.2 to 9.3 2. Use PPA at https://launchpad.net/~jonathonf with gcc 5.5, gcc 6.4, and gcc 7.3 --- .travis.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 29535f672496..d2ee51b49929 100644 --- a/.travis.yml +++ b/.travis.yml @@ -33,7 +33,7 @@ matrix: env: BUILD=Debug compiler: clang os: osx - osx_image: xcode9.2 + osx_image: xcode9.3 # 2 - if: repo != percona/percona-server OR repo = percona/percona-server AND type IN (push, cron) env: VERSION=6.0 BUILD=RelWithDebInfo @@ -74,7 +74,7 @@ matrix: env: BUILD=RelWithDebInfo compiler: clang os: osx - osx_image: xcode9.2 + osx_image: xcode9.3 # 2 - if: branch =~ fullci OR repo = percona/percona-server AND type IN (push, pull_request, cron) env: VERSION=6.0 BUILD=Debug @@ -188,6 +188,9 @@ script: if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo -E apt-add-repository -y "ppa:ubuntu-toolchain-r/test"; sudo -E apt-add-repository -y "ppa:jonathonf/binutils"; + sudo -E apt-add-repository -y "ppa:jonathonf/gcc-5.5"; + sudo -E apt-add-repository -y "ppa:jonathonf/gcc-6.4"; + sudo -E apt-add-repository -y "ppa:jonathonf/gcc-7.3"; sudo -E apt-add-repository -y "ppa:jonathonf/gcc-8.0"; fi; From 792962d89b664499e890433d186a7ab4d5962f3b Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Fri, 20 Apr 2018 12:10:10 +0200 Subject: [PATCH 0785/1221] PS-3949: Update version of gcc-5, gcc-6, gcc-7 for Travis CI PS-3948: Bump XCode toolchain in TravisCI to 9.3 1. Bump XCode version from 9.2 to 9.3 2. Use PPA at https://launchpad.net/~jonathonf with gcc 5.5, gcc 6.4, and gcc 7.3 --- .travis.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 5b9b350ff0ce..fd732bd6c7fb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -33,7 +33,7 @@ matrix: env: BUILD=Debug compiler: clang os: osx - osx_image: xcode9.2 + osx_image: xcode9.3 # 2 - if: repo != percona/percona-server OR repo = percona/percona-server AND type IN (push, cron) env: VERSION=6.0 BUILD=RelWithDebInfo @@ -74,7 +74,7 @@ matrix: env: BUILD=RelWithDebInfo compiler: clang os: osx - osx_image: xcode9.2 + osx_image: xcode9.3 # 2 - if: branch =~ fullci OR repo = percona/percona-server AND type IN (push, pull_request, cron) env: VERSION=6.0 BUILD=Debug @@ -188,6 +188,9 @@ script: if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo -E apt-add-repository -y "ppa:ubuntu-toolchain-r/test"; sudo -E apt-add-repository -y "ppa:jonathonf/binutils"; + sudo -E apt-add-repository -y "ppa:jonathonf/gcc-5.5"; + sudo -E apt-add-repository -y "ppa:jonathonf/gcc-6.4"; + sudo -E apt-add-repository -y "ppa:jonathonf/gcc-7.3"; sudo -E apt-add-repository -y "ppa:jonathonf/gcc-8.0"; fi; From 3700b118e9902671ea3036646507f16a15c83212 Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Fri, 20 Apr 2018 12:10:10 +0200 Subject: [PATCH 0786/1221] PS-3949: Update version of gcc-5, gcc-6, gcc-7 for Travis CI PS-3948: Bump XCode toolchain in TravisCI to 9.3 1. Bump XCode version from 9.2 to 9.3 2. Use PPA at https://launchpad.net/~jonathonf with gcc 5.5, gcc 6.4, and gcc 7.3 --- .travis.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 67af970cea4e..267d7d001a39 100644 --- a/.travis.yml +++ b/.travis.yml @@ -35,7 +35,7 @@ matrix: env: BUILD=Debug compiler: clang os: osx - osx_image: xcode9.2 + osx_image: xcode9.3 # 2 - if: repo != percona/percona-server OR repo = percona/percona-server AND type IN (push, cron) env: VERSION=6.0 BUILD=RelWithDebInfo @@ -76,7 +76,7 @@ matrix: env: BUILD=RelWithDebInfo compiler: clang os: osx - osx_image: xcode9.2 + osx_image: xcode9.3 # 2 - if: branch =~ fullci OR repo = percona/percona-server AND type IN (push, pull_request, cron) env: VERSION=6.0 BUILD=Debug @@ -190,6 +190,9 @@ script: if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo -E apt-add-repository -y "ppa:ubuntu-toolchain-r/test"; sudo -E apt-add-repository -y "ppa:jonathonf/binutils"; + sudo -E apt-add-repository -y "ppa:jonathonf/gcc-5.5"; + sudo -E apt-add-repository -y "ppa:jonathonf/gcc-6.4"; + sudo -E apt-add-repository -y "ppa:jonathonf/gcc-7.3"; sudo -E apt-add-repository -y "ppa:jonathonf/gcc-8.0"; fi; From c111a9f822468074d66fe88e95b3a5050303c56f Mon Sep 17 00:00:00 2001 From: Dima Date: Sat, 21 Apr 2018 02:44:49 +0300 Subject: [PATCH 0787/1221] Release notes for PS 5.7.21-21 with additions describing introduced variables --- doc/source/conf.py | 2 +- .../management/data_at_rest_encryption.rst | 70 +++++++++ doc/source/myrocks/variables.rst | 7 +- doc/source/ps-variables.rst | 15 ++ .../Percona-Server-5.7.21-21.rst | 137 ++++++++++++++++++ .../release-notes/release-notes_index.rst | 1 + doc/source/tokudb/tokudb_variables.rst | 33 +++++ doc/source/upstream-bug-fixes.rst | 30 ++++ 8 files changed, 293 insertions(+), 2 deletions(-) create mode 100644 doc/source/release-notes/Percona-Server-5.7.21-21.rst diff --git a/doc/source/conf.py b/doc/source/conf.py index ec245e03df06..d78f309d2d0e 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -54,7 +54,7 @@ # The short X.Y version. version = '5.7' # The full version, including alpha/beta/rc tags. -release = '5.7.21-20' +release = '5.7.21-21' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/doc/source/management/data_at_rest_encryption.rst b/doc/source/management/data_at_rest_encryption.rst index 5698c1a8cdc6..123cb736f872 100644 --- a/doc/source/management/data_at_rest_encryption.rst +++ b/doc/source/management/data_at_rest_encryption.rst @@ -80,6 +80,76 @@ Trying to add unencrypted table to this table space will result in an error: |Percona XtraBackup| currently doesn't support backup of encrypted general tablespaces. +Checking +-------- + +If there is a general tablespace which doesn't include tables yet, sometimes +user needs to find out whether it is encrypted or not (this task is easier for +single tablespaces since you can check table info). + +A ``flag`` field in the ``INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES`` has bit +number 13 set if tablespace is encrypted. This bit can be ckecked with +``flag & 8192`` expression in the following way:: + + >SELECT space, name, flag, (flag & 8192) != 0 AS encrypted FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE name in ('foo', 'test/t2', 'bar', 'noencrypt'); + +-------+-----------+-------+-----------+ + | space | name | flag | encrypted | + +-------+-----------+-------+-----------+ + | 29 | foo | 10240 | 8192 | + | 30 | test/t2 | 8225 | 8192 | + | 31 | bar | 10240 | 8192 | + | 32 | noencrypt | 2048 | 0 | + +-------+-----------+-------+-----------+ + 4 rows in set (0.01 sec) + +System Variables +---------------- + +.. variable:: innodb_temp_tablespace_encrypt + + :version 5.7.21-21: Implemented + :cli: ``--innodb-temp-tablespace-encrypt`` + :dyn: Yes + :scope: Global + :vartype: Boolean + :default: ``Off`` + +When this option is turned on, server starts to encrypt temporary tablespace +and temporary |InnoDB| file-per-table tablespaces. The option does not force +encryption of temporary tables which are currently opened, and it doesn't +rebuild system temporary tablespace to encrypt data which are already written. + +Since temporary tablespace is created fresh at each server startup, it will not +contain unencrypted data if this option specified as server argument. + +Turning this option off at runtime makes server to create all subsequent +temporary file-per-table tablespaces unencrypted, but does not turn off +encryption of system temporary tablespace. + +.. note:: To use this option, keyring plugin must be loaded, otherwise server + will give error message and refuse to create new temporary tables. + +.. variable:: innodb_encrypt_tables + + :version 5.7.21-21: Implemented + :cli: ``--innodb-encrypt-tables`` + :dyn: Yes + :scope: Global + :vartype: Text + :default: ``OFF`` + +This variable has 3 possible values. ``ON`` makes |InnoDB| tables encrypted by +default. ``FORCE`` disables creation of unencrypted tables. ``OFF`` restores +the like-before behavior. + +.. note:: ``innodb_encrypt_tables=ON`` still allows to create unencrypted + table with ``ENCRYPTED=NO`` statement, and also allows to create unencrypted + general tablespace. + +.. note:: ``ALTER TABLE`` statement used without explicit ``ENCRYPTION=XXX`` + does not change current table encryption mode even if + :variable:`innodb_encrypt_tables` is set to ``ON`` or ``FORCE``. + Binary log encryption ===================== diff --git a/doc/source/myrocks/variables.rst b/doc/source/myrocks/variables.rst index 1f09d8c60c05..b33a36eee536 100644 --- a/doc/source/myrocks/variables.rst +++ b/doc/source/myrocks/variables.rst @@ -1914,6 +1914,7 @@ Resets MyRocks internal statistics dynamically :version 5.7.19-17: Implemented :version 5.7.20-19: Variable removed + :version 5.7.21-21: Re-implemented :cli: ``--rocksdb-rpl-skip-tx-api`` :dyn: No :scope: Global @@ -1922,7 +1923,11 @@ Resets MyRocks internal statistics dynamically Specifies whether write batches should be used for replication thread instead of the transaction API. -Disabled by default. +Disabled by default. + +There are two conditions which are necessary to +use it: row replication format and slave +operating in super read only mode. .. variable:: rocksdb_seconds_between_stat_computes diff --git a/doc/source/ps-variables.rst b/doc/source/ps-variables.rst index 72ed48de0639..1ce0d4642843 100644 --- a/doc/source/ps-variables.rst +++ b/doc/source/ps-variables.rst @@ -132,6 +132,16 @@ System Variables - Yes - Global - Yes + * - :variable:`innodb_encrypt_online_alter_logs` + - Yes + - Yes + - Global + - Yes + * - :variable:`innodb_encrypt_tables` + - Yes + - Yes + - Global + - Yes * - :variable:`innodb_kill_idle_transaction` - Yes - Yes @@ -162,6 +172,11 @@ System Variables - Yes - Global - Yes + * - :variable:`innodb_temp_tablespace_encrypt` + - Yes + - Yes + - Global + - No * - :variable:`innodb_track_changed_pages` - Yes - Yes diff --git a/doc/source/release-notes/Percona-Server-5.7.21-21.rst b/doc/source/release-notes/Percona-Server-5.7.21-21.rst new file mode 100644 index 000000000000..b656f5354d66 --- /dev/null +++ b/doc/source/release-notes/Percona-Server-5.7.21-21.rst @@ -0,0 +1,137 @@ +.. rn:: 5.7.21-21 + +======================== +Percona Server 5.7.21-21 +======================== + +Percona is glad to announce the release of Percona Server 5.7.21-21 +on April 23, 2018. Downloads are available `here +`_ +and from the :doc:`Percona Software Repositories `. + +This release is based on `MySQL 5.7.21 +`_ +and includes all the bug fixes in it. +Percona Server 5.7.21-21 is now the current GA (Generally Available) release +in the 5.7 series. All software developed by Percona is open-source and free. + +New Features +============ + +* A new variable :variable:`innodb_temp_tablespace_encrypt` is introduced to + turn encryption of temporary tablespace and temporary InnoDB file-per-table + tablespaces on/off. Bug fixed :psbug:`3821`. + +* A new variable :variable:`innodb_encrypt_online_alter_logs` simultaneously + turns on encryption of files used by InnoDB for merge sort, online DDL logs, + and temporary tables created by InnoDB for online DDL. Bug fixed :psbug:`3819`. + +* A new variable :variable:`innodb_encrypt_tables` can be set to ``ON``, making + |InnoDB| tables encrypted by default, to ``FORCE``, disabling creation of + unencrypted tables, or ``OFF``, restoring the like-before behavior. Bug fixed + :psbug:`1525`. + +* Query response time plugin now can be disabled at session level. + +Bugs Fixed +========== + +* Query response time plugin installation was able to cause server crash. + Bug fixed :psbug:`3959`. + +* There was a server crash caused by a materialized temporary table from + semi-join optimization with key length larger than 1000 bytes. Bug fixed + :psbug:`296`. + +* A regression was causing integer overflow with + :variable:`thread_pool_stall_limit` variable values bigger than 2 seconds. + Bug fixed :psbug:`1095`. + +* A memory leak took place in |Percona Server| when performance schema is used + in conjunction with thread pooling. Bug fixed :psbug:`1096`. + +* A code clean-up was done to fix compilation with clang, as general warnings + (bug fixed :psbug:`3814`, upstream :mysqlbug:`89646`) so clang 6 specific + warnings and errors (bug fixed :psbug:`3893`, upstream :mysqlbug:`98111`). + +* Compilation warning was fixed for statically linked QRT. Bug fixed + :psbug:`3841`. + +* |Percona Server| returned empty result for ``SELECT`` query if number of + connections exceeded 65535. Bug fixed :psbug:`314`. + +* A clean-up in |Percona Server| binlog-related code was made to avoid + uninitialized memory comparison. Bug fixed :psbug:`3925` (upstream + :mysqlbug:`90238`). + +* ``mysqldump`` utility with ``--innodb-optimize-keys`` option was incorrectly + working with foreign keys on the same table, producing invalid SQL + statements. Bugs fixed :psbug:`1125` and :psbug:`3863`. + +* A fix of the mysqld startup script failed to detect jemalloc library + location for preloading, thus not starting on systemd based machines, + introduced in |Percona Server| :rn:`5.7.21-20`, was improved to take into + account previously created configuration file. Bug fixed :psbug:`3850`. + +* A fix introduced in |Percona Server| :rn:`5.7.10-2` which made busy server + not to prefer LRU flushing over flush list flushing too strongly was reverted + back because of the MT LRU flusher introduction, which removed LRU flushing + from the cleaner loop, Bug fixed :psbug:`3812`. + +* The possibility of a truncated bitmap file name was fixed in |InnoDB| logging + subsystem. Bug fixed :psbug:`3926`. + +* Non-instrumented functions were used in cached reads and writes of files in + fixed-size units. Bug fixed :psbug:`3937` (upstream :mysqlbug:`90264`). + +* A crash in the unsafe query warning checks with views took place for + ``UPDATE`` statement in case of statement binlogging format. Bug fixed + :psbug:`290`. + +MyRocks Changes +=============== + +* A re-implemented variable :variable:`rpl_skip_tx_api` allows to turn on simple + |RocksDB| write batches functionality, increasing replication performance + by the transaction api skip. Bug fixed :jirabug:`MYR-47`. + +* Unpack info bytes indicating the trailing space length in a padded varchar + were not read/skipped for value-less fields, causing data corruption and/or + server crash. Bug fixed :jirabug:`MYR-232`. + +TokuDB Changes +=============== + +* Two new variables introduced for the |TokuDB| fast updates feature, + :variable:`tokudb_enable_fast_update` and + :variable:`tokudb_enable_fast_upsert` should be now used instead of the + ``NOAR`` keyword, which is now optional at compile time and off by default. + Bugs fixed :tdbbug:`63` and :tdbbug:`148`. + +* A set of compilation fixes as introduced to make |TokuDB| successfully + build in 8.0. Bugs fixed :tdbbug:`84`, :tdbbug:`85`, :tdbbug:`114`, + :tdbbug:`115`, :tdbbug:`118`, :tdbbug:`128`, :tdbbug:`139`, :tdbbug:`141`, + and :tdbbug:`172`. + +* Conditional compilation code dependent on version ID in the TokuDB tree was + separated and arranged to specific version branches. Bugs fixed + :tdbbug:`133`, :tdbbug:`134`, :tdbbug:`135`, and :tdbbug:`136`. + +* An additional code clean-up was made in bounds of 8.0 transition to remove + MariaDB-specific constructions. Bugs fixed :tdbbug:`180`, :tdbbug:`181`, + and :tdbbug:`182`. + +* Alter table comment caused |TokuDB| to rebuild the whole table, which is not + needed, as only FRM metadata should be changed. Bug fixed :tdbbug:`130`, + and :tdbbug:`137`. + +* Data race on the cache table pair attributes was fixed. + +Other bugs fixed: :psbug:`3793`, :psbug:`3813`, :psbug:`3815`, :psbug:`3818`, +:psbug:`3835`, :psbug:`3875` (upstream :mysqlbug:`89916`), :psbug:`3843` +(upstream :mysqlbug:`89822`), :psbug:`3848`, :psbug:`3856`, :psbug:`3887`, +:jirabug:`MYR-160`, :jirabug:`MYR-245`, :tdbbug:`109`, :tdbbug:`111`, +and :tdbbug:`188`. + + + diff --git a/doc/source/release-notes/release-notes_index.rst b/doc/source/release-notes/release-notes_index.rst index 0a90dd227419..877b2b20c7e7 100644 --- a/doc/source/release-notes/release-notes_index.rst +++ b/doc/source/release-notes/release-notes_index.rst @@ -6,6 +6,7 @@ :maxdepth: 1 :glob: + Percona-Server-5.7.21-21 Percona-Server-5.7.21-20 Percona-Server-5.7.20-19 Percona-Server-5.7.20-18 diff --git a/doc/source/tokudb/tokudb_variables.rst b/doc/source/tokudb/tokudb_variables.rst index bb0e7432865a..071b3ccec916 100644 --- a/doc/source/tokudb/tokudb_variables.rst +++ b/doc/source/tokudb/tokudb_variables.rst @@ -215,6 +215,16 @@ TokuDB Server Variables - Yes - Session, Global - Yes + * - tokudb_enable_fast_update + - Yes + - Yes + - Session, Global + - Yes + * - tokudb_enable_fast_upsert + - Yes + - Yes + - Session, Global + - Yes * - :variable:`tokudb_enable_partial_eviction` - Yes - Yes @@ -911,6 +921,29 @@ output: Defines direction to be used to perform table scan to check for empty tables for bulk loader. +.. variable:: tokudb_enable_fast_update + + :cli: Yes + :conf: Yes + :scope: Global/Session + :dyn: Yes + :vartype: Boolean + :default: Off + +Enables the fast updates feature, which substantially facilitates execution of +read-modify-write style queries. + +.. variable:: tokudb_enable_fast_upsert + + :cli: Yes + :conf: Yes + :scope: Global/Session + :dyn: Yes + :vartype: Boolean + :default: Off + +Enables processing upsert messages for the fast updates feature. + .. variable:: tokudb_enable_partial_eviction :cli: Yes diff --git a/doc/source/upstream-bug-fixes.rst b/doc/source/upstream-bug-fixes.rst index 516230c2120b..f040ffa943cb 100644 --- a/doc/source/upstream-bug-fixes.rst +++ b/doc/source/upstream-bug-fixes.rst @@ -4,6 +4,36 @@ List of upstream |MySQL| bugs fixed in |Percona Server| 5.7 ============================================================= ++-------------------------------------------------------------------------------------------------------------+ +|:Upstream bug: :mysqlbug:`90264` - Some file operations in mf_iocache2.c are not instrumented | +|:Launchpad bug: :jirabug:`PS-3937` | +|:Upstream state: Verified (checked on 2018-04-20) | +|:Fix Released: :rn:`5.7.21-21` | +|:Upstream fix: N/A | ++-------------------------------------------------------------------------------------------------------------+ +|:Upstream bug: :mysqlbug:`90238` - Comparison of uninitailized memory in log_in_use | +|:Launchpad bug: :jirabug:`PS-3925` | +|:Upstream state: Verified (checked on 2018-04-20) | +|:Fix Released: :rn:`5.7.21-21` | +|:Upstream fix: N/A | ++-------------------------------------------------------------------------------------------------------------+ +|:Upstream bug: :mysqlbug:`89916` - hp_test1/hp_test2 are not built unless WITH_EMBEDDED_SERVER is defined | +|:Launchpad bug: :jirabug:`PS-3845` | +|:Upstream state: Verified (checked on 2018-04-20) | +|:Fix Released: :rn:`5.7.21-21` | +|:Upstream fix: N/A | ++-------------------------------------------------------------------------------------------------------------+ +|:Upstream bug: :mysqlbug:`89822` - InnoDB retries open on EINTR error only if innodb_use_native_aio is ... | +|:Launchpad bug: :jirabug:`PS-3843` | +|:Upstream state: Verified (checked on 2018-04-20) | +|:Fix Released: :rn:`5.7.21-21` | +|:Upstream fix: N/A | ++-------------------------------------------------------------------------------------------------------------+ +|:Upstream bug: :mysqlbug:`89646` - Clang warnings in 5.7.21 | +|:Launchpad bug: :jirabug:`PS-3814` | +|:Upstream state: Verified (checked on 2018-04-20) | +|:Fix Released: :rn:`5.7.21-21` | +|:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`89598` - plugin_mecab.cc:54:19: warning: unused variable 'bundle_mecab' | |:Launchpad bug: :jirabug:`PS-3804` | From 66b74e4d7285af0642bdc2095b51d873c2a0cd5b Mon Sep 17 00:00:00 2001 From: Karthik Kamath Date: Tue, 24 Apr 2018 09:34:07 +0530 Subject: [PATCH 0788/1221] BUG#27502530: DISABLING NO_ENGINE_SUBSTITUTION DOES NOT BEHAVE AS DOCUMENTED ANALYSIS: ========= The SQL mode 'NO_ENGINE_SUBSTITUTION' controls the automatic substitution of the default storage engine when a statement such as CREATE TABLE or ALTER TABLE specifies a storage engine that is disabled or not compiled in. Currently, if 'NO_ENGINE_SUBSTITUTION' is disabled, both CREATE TABLE and ALTER TABLE ... ENGINE are reporting ER_DISABLED_STORAGE_ENGINE error if the desired engine is disabled using the option 'disabled_storage_engines'. This is because there is no engine substitution happening internally in these scenarios. FIX: ==== With 'NO_ENGINE_SUBSTITUTION' disabled, If desired engine is disabled, for CREATE TABLE we are now creating the table by substituting the desired engine with the default engine and also reporting warnings informing the user about the substitution. For ALTER TABLE .. ENGINE, a warning is reported and the table is not altered. NOTE: ===== CREATE TABLE t1(c1 INT) ENGINE= X; With 'NO_ENGINE_SUBSTITUTION' disabled and disabled_storage_engines=X, CREATE TABLE t2 LIKE t1; will create the table t2 by substituting engine X with the default storage engine by reporting warnings. --- mysql-test/r/no_engine_substitution.result | 179 +++++++++++++++++ .../t/no_engine_substitution-master.opt | 2 + mysql-test/t/no_engine_substitution.test | 181 ++++++++++++++++++ sql/sql_class.h | 14 ++ sql/sql_table.cc | 75 ++++++-- sql/sql_yacc.yy | 2 +- 6 files changed, 441 insertions(+), 12 deletions(-) create mode 100644 mysql-test/r/no_engine_substitution.result create mode 100644 mysql-test/t/no_engine_substitution-master.opt create mode 100644 mysql-test/t/no_engine_substitution.test diff --git a/mysql-test/r/no_engine_substitution.result b/mysql-test/r/no_engine_substitution.result new file mode 100644 index 000000000000..5212813f253c --- /dev/null +++ b/mysql-test/r/no_engine_substitution.result @@ -0,0 +1,179 @@ +# +# Bug#27502530: DISABLING NO_ENGINE_SUBSTITUTION DOES NOT BEHAVE AS +# DOCUMENTED +# +CALL mtr.add_suppression("default_storage_engine is set to a disabled storage engine .*"); +CALL mtr.add_suppression("default_tmp_storage_engine is set to a disabled storage engine .*"); +# Started the server by disabling InnoDB using system variable 'disabled_storage_engines' +SELECT @@disabled_storage_engines; +@@disabled_storage_engines +InnoDB +SET DEFAULT_STORAGE_ENGINE= MyISAM; +SELECT @@default_storage_engine; +@@default_storage_engine +MyISAM + +# NO_ENGINE_SUBSTITUTION enabled +SET SQL_MODE= 'NO_ENGINE_SUBSTITUTION'; +CREATE TABLE t1(c1 INT) ENGINE= MyISAM; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +INSERT INTO t1 VALUES(1); +CREATE TABLE t2(c1 INT) ENGINE= InnoDB; +ERROR HY000: Storage engine InnoDB is disabled (Table creation is disallowed). +CREATE TEMPORARY TABLE t2(c1 INT) ENGINE= InnoDB; +ERROR HY000: Storage engine InnoDB is disabled (Table creation is disallowed). +ALTER TABLE t1 ENGINE= InnoDB; +ERROR HY000: Storage engine InnoDB is disabled (Table creation is disallowed). +# Restart the server disabling the myisam storage engine using variable 'disabled_storage_engines' +SELECT @@disabled_storage_engines; +@@disabled_storage_engines +myisam,example +SET @old_default_engine= @@default_storage_engine; +# Changing the default engine to InnoDB +SET DEFAULT_STORAGE_ENGINE= InnoDB; +SELECT @@default_storage_engine; +@@default_storage_engine +InnoDB +CREATE TABLE t2(c1 INT) ENGINE= MyISAM; +ERROR HY000: Storage engine MyISAM is disabled (Table creation is disallowed). +SELECT * FROM t1; +c1 +1 +# Checking table creation with dynamic storage plugins +INSTALL PLUGIN example SONAME 'ha_example.so'; +CREATE TABLE t1(a int) ENGINE=EXAMPLE; +ERROR HY000: Storage engine EXAMPLE is disabled (Table creation is disallowed). + +# NO_ENGINE_SUBSTITUTION disabled +SET SQL_MODE=''; +# The disabled engine is substituted with the default engine for the table. +CREATE TABLE t2(c1 INT) ENGINE= MyISAM; +Warnings: +Warning 3161 Storage engine MyISAM is disabled (Table creation is disallowed). +Warning 1266 Using storage engine InnoDB for table 't2' +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `c1` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +CREATE TABLE t3 LIKE t1; +Warnings: +Warning 3161 Storage engine MyISAM is disabled (Table creation is disallowed). +Warning 1266 Using storage engine InnoDB for table 't3' +SHOW CREATE TABLE t3; +Table Create Table +t3 CREATE TABLE `t3` ( + `c1` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +CREATE TEMPORARY TABLE t4(c1 INT) ENGINE= MyISAM; +Warnings: +Warning 3161 Storage engine MyISAM is disabled (Table creation is disallowed). +Warning 1266 Using storage engine InnoDB for table 't4' +SHOW CREATE TABLE t4; +Table Create Table +t4 CREATE TEMPORARY TABLE `t4` ( + `c1` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +CREATE TABLE t5 (c1 INT) ENGINE= ARCHIVE; +# ALTER TABLE ... ENGINE reports a warning and the table is not altered. +ALTER TABLE t5 ENGINE= MyISAM; +Warnings: +Warning 1286 Unknown storage engine 'MyISAM' +SHOW CREATE TABLE t5; +Table Create Table +t5 CREATE TABLE `t5` ( + `c1` int(11) DEFAULT NULL +) ENGINE=ARCHIVE DEFAULT CHARSET=latin1 +CREATE PROCEDURE p1() +BEGIN +CREATE TABLE t6(c1 INT) ENGINE= MyISAM; +END / +CALL p1(); +Warnings: +Warning 3161 Storage engine MyISAM is disabled (Table creation is disallowed). +Warning 1266 Using storage engine InnoDB for table 't6' +SHOW CREATE TABLE t6; +Table Create Table +t6 CREATE TABLE `t6` ( + `c1` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +CREATE TABLE t7 (c1 INT) ENGINE= EXAMPLE; +Warnings: +Warning 3161 Storage engine EXAMPLE is disabled (Table creation is disallowed). +Warning 1266 Using storage engine InnoDB for table 't7' +SHOW CREATE TABLE t7; +Table Create Table +t7 CREATE TABLE `t7` ( + `c1` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +SET DEFAULT_STORAGE_ENGINE= MyISAM; +CREATE TABLE t8 (c1 INT) ENGINE= MyISAM; +ERROR HY000: Storage engine MyISAM is disabled (Table creation is disallowed). +CREATE TABLE t8 (c1 INT) ENGINE= EXAMPLE; +ERROR HY000: Storage engine EXAMPLE is disabled (Table creation is disallowed). +UNINSTALL PLUGIN EXAMPLE; +DROP PROCEDURE p1; +DROP TABLE t1; +DROP TABLE t2; +DROP TABLE t3; +DROP TABLE t4; +DROP TABLE t5; +DROP TABLE t6; +DROP TABLE t7; +SET @@default_storage_engine=@old_default_engine; +SET sql_mode= DEFAULT; +# Restart the server disabling archive engine via '--skip-archive or --archive=off' +SET @old_default_engine= @@default_storage_engine; +SET DEFAULT_STORAGE_ENGINE= MyISAM; +SET DEFAULT_TMP_STORAGE_ENGINE= MyISAM; + +# NO_ENGINE_SUBSTITUTION enabled +SET SQL_MODE='NO_ENGINE_SUBSTITUTION'; +CREATE TABLE t1 (c1 INT) ENGINE= ARCHIVE; +ERROR 42000: Unknown storage engine 'ARCHIVE' +CREATE TEMPORARY TABLE t1 (c1 INT) ENGINE= ARCHIVE; +ERROR 42000: Unknown storage engine 'ARCHIVE' +CREATE TABLE t1 (c1 INT) ENGINE=MyISAM; +ALTER TABLE t1 ENGINE= ARCHIVE; +ERROR 42000: Unknown storage engine 'ARCHIVE' + +# NO_ENGINE_SUBSTITUTION disabled +SET SQL_MODE=''; +CREATE TABLE t2 (c1 INT) ENGINE=ARCHIVE; +Warnings: +Warning 1286 Unknown storage engine 'ARCHIVE' +Warning 1266 Using storage engine MyISAM for table 't2' +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `c1` int(11) DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +CREATE TEMPORARY TABLE t3 (c1 INT) ENGINE= ARCHIVE; +Warnings: +Warning 1286 Unknown storage engine 'ARCHIVE' +Warning 1266 Using storage engine MyISAM for table 't3' +SHOW CREATE TABLE t3; +Table Create Table +t3 CREATE TEMPORARY TABLE `t3` ( + `c1` int(11) DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +# ALTER TABLE .. ENGINE reports a warning and the table is not altered. +ALTER TABLE t1 ENGINE= ARCHIVE; +Warnings: +Warning 1286 Unknown storage engine 'ARCHIVE' +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 + +DROP TABLE t1; +DROP TABLE t2; +DROP TABLE t3; +SET @@default_storage_engine= @old_default_engine; +SET sql_mode = DEFAULT; +# restart diff --git a/mysql-test/t/no_engine_substitution-master.opt b/mysql-test/t/no_engine_substitution-master.opt new file mode 100644 index 000000000000..bfd39f1162b9 --- /dev/null +++ b/mysql-test/t/no_engine_substitution-master.opt @@ -0,0 +1,2 @@ +$EXAMPLE_PLUGIN_OPT +--disabled_storage_engines=InnoDB diff --git a/mysql-test/t/no_engine_substitution.test b/mysql-test/t/no_engine_substitution.test new file mode 100644 index 000000000000..aaee8a6eae20 --- /dev/null +++ b/mysql-test/t/no_engine_substitution.test @@ -0,0 +1,181 @@ +--source include/have_example_plugin.inc +--source include/not_embedded.inc + +--echo # +--echo # Bug#27502530: DISABLING NO_ENGINE_SUBSTITUTION DOES NOT BEHAVE AS +--echo # DOCUMENTED +--echo # + +CALL mtr.add_suppression("default_storage_engine is set to a disabled storage engine .*"); +CALL mtr.add_suppression("default_tmp_storage_engine is set to a disabled storage engine .*"); + +--echo # Started the server by disabling InnoDB using system variable 'disabled_storage_engines' +SELECT @@disabled_storage_engines; +SET DEFAULT_STORAGE_ENGINE= MyISAM; +SELECT @@default_storage_engine; + +--echo +--echo # NO_ENGINE_SUBSTITUTION enabled +--disable_warnings +SET SQL_MODE= 'NO_ENGINE_SUBSTITUTION'; +--enable_warnings + +CREATE TABLE t1(c1 INT) ENGINE= MyISAM; +SHOW CREATE TABLE t1; +INSERT INTO t1 VALUES(1); + +--error ER_DISABLED_STORAGE_ENGINE +CREATE TABLE t2(c1 INT) ENGINE= InnoDB; + +--error ER_DISABLED_STORAGE_ENGINE +CREATE TEMPORARY TABLE t2(c1 INT) ENGINE= InnoDB; + +--error ER_DISABLED_STORAGE_ENGINE +ALTER TABLE t1 ENGINE= InnoDB; + +--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect +--shutdown_server +--source include/wait_until_disconnected.inc + +--echo # Restart the server disabling the myisam storage engine using variable 'disabled_storage_engines' +--exec echo "restart: --disabled_storage_engines=myisam,example" >$MYSQLTEST_VARDIR/tmp/mysqld.1.expect +--enable_reconnect +--source include/wait_until_connected_again.inc + +SELECT @@disabled_storage_engines; +SET @old_default_engine= @@default_storage_engine; + +--echo # Changing the default engine to InnoDB +SET DEFAULT_STORAGE_ENGINE= InnoDB; +SELECT @@default_storage_engine; + +--error ER_DISABLED_STORAGE_ENGINE +CREATE TABLE t2(c1 INT) ENGINE= MyISAM; + +SELECT * FROM t1; + +--echo # Checking table creation with dynamic storage plugins +--replace_regex /\.dll/.so/ +eval INSTALL PLUGIN example SONAME '$EXAMPLE_PLUGIN'; + +--ERROR ER_DISABLED_STORAGE_ENGINE +CREATE TABLE t1(a int) ENGINE=EXAMPLE; + +--echo +--echo # NO_ENGINE_SUBSTITUTION disabled +--disable_warnings +SET SQL_MODE=''; +--enable_warnings + +--echo # The disabled engine is substituted with the default engine for the table. + +# Engine for the table substituted to InnoDB +CREATE TABLE t2(c1 INT) ENGINE= MyISAM; +SHOW CREATE TABLE t2; + +CREATE TABLE t3 LIKE t1; +SHOW CREATE TABLE t3; + +CREATE TEMPORARY TABLE t4(c1 INT) ENGINE= MyISAM; +SHOW CREATE TABLE t4; + +CREATE TABLE t5 (c1 INT) ENGINE= ARCHIVE; +--echo # ALTER TABLE ... ENGINE reports a warning and the table is not altered. +ALTER TABLE t5 ENGINE= MyISAM; +SHOW CREATE TABLE t5; + +DELIMITER /; +CREATE PROCEDURE p1() +BEGIN + CREATE TABLE t6(c1 INT) ENGINE= MyISAM; +END / + +DELIMITER ;/ +CALL p1(); +SHOW CREATE TABLE t6; + +CREATE TABLE t7 (c1 INT) ENGINE= EXAMPLE; +SHOW CREATE TABLE t7; + +# If disabled engine and the default engine are the same. +SET DEFAULT_STORAGE_ENGINE= MyISAM; +--error ER_DISABLED_STORAGE_ENGINE +CREATE TABLE t8 (c1 INT) ENGINE= MyISAM; + +# If disabled engine and default engine both are in the disabled SE list. +--error ER_DISABLED_STORAGE_ENGINE +CREATE TABLE t8 (c1 INT) ENGINE= EXAMPLE; + +# Cleanup +UNINSTALL PLUGIN EXAMPLE; +DROP PROCEDURE p1; +DROP TABLE t1; +DROP TABLE t2; +DROP TABLE t3; +DROP TABLE t4; +DROP TABLE t5; +DROP TABLE t6; +DROP TABLE t7; + +SET @@default_storage_engine=@old_default_engine; +--disable_warnings +SET sql_mode= DEFAULT; +--enable_warnings + +--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect +--shutdown_server +--source include/wait_until_disconnected.inc + +--echo # Restart the server disabling archive engine via '--skip-archive or --archive=off' +--exec echo "restart: --archive=off" >$MYSQLTEST_VARDIR/tmp/mysqld.1.expect +--enable_reconnect +--source include/wait_until_connected_again.inc + +SET @old_default_engine= @@default_storage_engine; +SET DEFAULT_STORAGE_ENGINE= MyISAM; +SET DEFAULT_TMP_STORAGE_ENGINE= MyISAM; + +--echo +--echo # NO_ENGINE_SUBSTITUTION enabled +--disable_warnings +SET SQL_MODE='NO_ENGINE_SUBSTITUTION'; +--enable_warnings + +--error ER_UNKNOWN_STORAGE_ENGINE +CREATE TABLE t1 (c1 INT) ENGINE= ARCHIVE; + +--error ER_UNKNOWN_STORAGE_ENGINE +CREATE TEMPORARY TABLE t1 (c1 INT) ENGINE= ARCHIVE; + +CREATE TABLE t1 (c1 INT) ENGINE=MyISAM; +--error ER_UNKNOWN_STORAGE_ENGINE +ALTER TABLE t1 ENGINE= ARCHIVE; + +--echo +--echo # NO_ENGINE_SUBSTITUTION disabled +--disable_warnings +SET SQL_MODE=''; +--enable_warnings + +CREATE TABLE t2 (c1 INT) ENGINE=ARCHIVE; +SHOW CREATE TABLE t2; + +CREATE TEMPORARY TABLE t3 (c1 INT) ENGINE= ARCHIVE; +SHOW CREATE TABLE t3; + +--echo # ALTER TABLE .. ENGINE reports a warning and the table is not altered. +ALTER TABLE t1 ENGINE= ARCHIVE; +SHOW CREATE TABLE t1; + +--echo +# Cleanup +DROP TABLE t1; +DROP TABLE t2; +DROP TABLE t3; + +SET @@default_storage_engine= @old_default_engine; +--disable_warnings +SET sql_mode = DEFAULT; +--enable_warnings + +--source include/restart_mysqld.inc diff --git a/sql/sql_class.h b/sql/sql_class.h index 6fa5245fb2ba..a9bdb0046c18 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -5629,6 +5629,20 @@ inline void reattach_engine_ha_data_to_thd(THD *thd, const struct handlerton *ht } } +/** + Check if engine substitution is allowed in the current thread context. + + @param thd thread context + @return + @retval true if engine substitution is allowed + @retval false otherwise +*/ + +static inline bool is_engine_substitution_allowed(THD* thd) +{ + return !(thd->variables.sql_mode & MODE_NO_ENGINE_SUBSTITUTION); +} + /*************************************************************************/ #endif /* MYSQL_SERVER */ diff --git a/sql/sql_table.cc b/sql/sql_table.cc index 18fce0de40c5..c4afe359d11a 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -4859,17 +4859,52 @@ bool create_table_impl(THD *thd, DBUG_RETURN(TRUE); } + if (check_engine(thd, db, table_name, create_info)) + DBUG_RETURN(TRUE); + // Check if new table creation is disallowed by the storage engine. if (!internal_tmp_table && ha_is_storage_engine_disabled(create_info->db_type)) { - my_error(ER_DISABLED_STORAGE_ENGINE, MYF(0), - ha_resolve_storage_engine_name(create_info->db_type)); - DBUG_RETURN(true); - } + /* + If table creation is disabled for the engine then substitute the engine + for the table with the default engine only if sql mode + NO_ENGINE_SUBSTITUTION is disabled. + */ + handlerton *new_engine= NULL; + if (is_engine_substitution_allowed(thd)) + new_engine= ha_default_handlerton(thd); - if (check_engine(thd, db, table_name, create_info)) - DBUG_RETURN(TRUE); + /* + Proceed with the engine substitution only if, + 1. The disabled engine and the default engine are not the same. + 2. The default engine is not in the disabled engines list. + else report an error. + */ + if (new_engine && create_info->db_type && + new_engine != create_info->db_type && + !ha_is_storage_engine_disabled(new_engine)) + { + push_warning_printf(thd, Sql_condition::SL_WARNING, + ER_DISABLED_STORAGE_ENGINE, + ER(ER_DISABLED_STORAGE_ENGINE), + ha_resolve_storage_engine_name(create_info->db_type)); + + create_info->db_type= new_engine; + + push_warning_printf(thd, Sql_condition::SL_WARNING, + ER_WARN_USING_OTHER_HANDLER, + ER(ER_WARN_USING_OTHER_HANDLER), + ha_resolve_storage_engine_name(create_info->db_type), + table_name); + } + else + { + my_error(ER_DISABLED_STORAGE_ENGINE, MYF(0), + ha_resolve_storage_engine_name(create_info->db_type)); + DBUG_RETURN(true); + } + } set_table_default_charset(thd, create_info, (char*) db); @@ -9088,15 +9123,33 @@ bool mysql_alter_table(THD *thd, const char *new_db, const char *new_name, if (error) DBUG_RETURN(true); - // Check if ALTER TABLE ... ENGINE is disallowed by the storage engine. + /* + Check if ALTER TABLE ... ENGINE is disallowed by the desired storage + engine. + */ if (table_list->table->s->db_type() != create_info->db_type && (alter_info->flags & Alter_info::ALTER_OPTIONS) && (create_info->used_fields & HA_CREATE_USED_ENGINE) && ha_is_storage_engine_disabled(create_info->db_type)) { - my_error(ER_DISABLED_STORAGE_ENGINE, MYF(0), - ha_resolve_storage_engine_name(create_info->db_type)); - DBUG_RETURN(true); + /* + If NO_ENGINE_SUBSTITUTION is disabled, then report a warning and do not + alter the table. + */ + if (is_engine_substitution_allowed(thd)) + { + push_warning_printf(thd, Sql_condition::SL_WARNING, + ER_UNKNOWN_STORAGE_ENGINE, + ER(ER_UNKNOWN_STORAGE_ENGINE), + ha_resolve_storage_engine_name(create_info->db_type)); + create_info->db_type= table_list->table->s->db_type(); + } + else + { + my_error(ER_DISABLED_STORAGE_ENGINE, MYF(0), + ha_resolve_storage_engine_name(create_info->db_type)); + DBUG_RETURN(true); + } } TABLE *table= table_list->table; @@ -10647,7 +10700,7 @@ static bool check_engine(THD *thd, const char *db_name, handlerton **new_engine= &create_info->db_type; handlerton *req_engine= *new_engine; bool no_substitution= - MY_TEST(thd->variables.sql_mode & MODE_NO_ENGINE_SUBSTITUTION); + MY_TEST(!is_engine_substitution_allowed(thd)); if (!(*new_engine= ha_checktype(thd, ha_legacy_type(req_engine), no_substitution, 1))) DBUG_RETURN(true); diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index bc649cdc307a..089959fd5e56 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -6178,7 +6178,7 @@ storage_engines: $$= plugin_data(plugin); else { - if (thd->variables.sql_mode & MODE_NO_ENGINE_SUBSTITUTION) + if (!is_engine_substitution_allowed(thd)) { my_error(ER_UNKNOWN_STORAGE_ENGINE, MYF(0), $1.str); MYSQL_YYABORT; From a08508abf83d953f11e4823798398d9229ba0237 Mon Sep 17 00:00:00 2001 From: Arun Kuruvila Date: Tue, 24 Apr 2018 10:02:04 +0530 Subject: [PATCH 0789/1221] Bug#27407480: AUTOMATIC_SP_PRIVILEGES REQUIRES NEED THE INSERT PRIVILEGES FOR MYSQL.USER TABLE Description:- Incorrect granting of EXECUTE and ALTER ROUTINE privileges when the 'automatic_sp_privileges' variable is set. Fix:- EXECUTE and ALTER ROUTINE privileges are correctly granted to the creator of the procedure when the 'automatic_sp_privileges' is SET. --- mysql-test/r/grant.result | 3 +-- sql/sql_acl.cc | 15 ++++----------- 2 files changed, 5 insertions(+), 13 deletions(-) diff --git a/mysql-test/r/grant.result b/mysql-test/r/grant.result index 7603e4b1b1c2..e524bb5cac21 100644 --- a/mysql-test/r/grant.result +++ b/mysql-test/r/grant.result @@ -1780,8 +1780,6 @@ BEGIN SET @x = 0; REPEAT SET @x = @x + 1; UNTIL @x > p1 END REPEAT; END ;|| -Warnings: -Warning 1404 Failed to grant EXECUTE and ALTER ROUTINE privileges SHOW GRANTS FOR 'user1'@'localhost'; Grants for user1@localhost GRANT USAGE ON *.* TO 'user1'@'localhost' @@ -1791,6 +1789,7 @@ SHOW GRANTS FOR 'user2'; Grants for user2@% GRANT USAGE ON *.* TO 'user2'@'%' GRANT CREATE, CREATE ROUTINE ON `db1`.* TO 'user2'@'%' +GRANT EXECUTE, ALTER ROUTINE ON PROCEDURE `db1`.`proc2` TO 'user2'@'%' DROP PROCEDURE db1.proc1; DROP PROCEDURE db1.proc2; REVOKE ALL ON db1.* FROM 'user1'@'localhost'; diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc index 385484f2b011..705b4792a37d 100644 --- a/sql/sql_acl.cc +++ b/sql/sql_acl.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -7670,19 +7670,12 @@ bool sp_grant_privileges(THD *thd, const char *sp_db, const char *sp_name, if (!(combo=(LEX_USER*) thd->alloc(sizeof(st_lex_user)))) DBUG_RETURN(TRUE); - combo->user.str= sctx->user; + combo->user.str= (char *) sctx->priv_user; mysql_mutex_lock(&acl_cache->lock); - if ((au= find_acl_user(combo->host.str=(char*)sctx->host_or_ip,combo->user.str,FALSE))) - goto found_acl; - if ((au= find_acl_user(combo->host.str=(char*)sctx->get_host()->ptr(), - combo->user.str,FALSE))) - goto found_acl; - if ((au= find_acl_user(combo->host.str=(char*)sctx->get_ip()->ptr(), - combo->user.str,FALSE))) - goto found_acl; - if((au= find_acl_user(combo->host.str=(char*)"%", combo->user.str, FALSE))) + if ((au= find_acl_user(combo->host.str= (char *) sctx->priv_host, + combo->user.str, FALSE))) goto found_acl; mysql_mutex_unlock(&acl_cache->lock); From dd265078f0e587fdc01f0ea2b87cb23185800d34 Mon Sep 17 00:00:00 2001 From: Arun Kuruvila Date: Tue, 24 Apr 2018 10:29:07 +0530 Subject: [PATCH 0790/1221] Bug#27509959: EXCEPTION NOT CAUGHT W/IN SPROC ADDING A ROW THAT FAILS FK CHECK IN FED TABLE Description: A HANDLER within a stored procedure which catches foreign key failures is currently not possible if the table involved is using FEDERATED storage engine. Analysis:- Remote server errors such as ER_NO_REFERENCED_ROW and ER_NO_REFERENCED_ROW_2 are not handled inside ha_federated::stash_remote_error() which in turn makes a stored procedure impossible to define a HANDLER that will catch a foreign key failure due to the error, "Cannot add or update a child row: a foreign key constraint fails" Fix: ER_NO_REFERENCED_ROW and ER_NO_REFERENCED_ROW_2 are handled correctly in ha_federated::stash_remote_error`(). --- mysql-test/suite/federated/federated.result | 46 +++++++++++++++++ mysql-test/suite/federated/federated.test | 56 +++++++++++++++++++++ storage/federated/ha_federated.cc | 5 +- 3 files changed, 106 insertions(+), 1 deletion(-) diff --git a/mysql-test/suite/federated/federated.result b/mysql-test/suite/federated/federated.result index 1e0b8c57a3be..bf11e0c6a2e9 100644 --- a/mysql-test/suite/federated/federated.result +++ b/mysql-test/suite/federated/federated.result @@ -2245,6 +2245,52 @@ DROP TABLE federated.t2; connection master; DROP TABLE federated.t1_child; DROP TABLE federated.t1; +### +### Bug#27509959: EXCEPTION NOT CAUGHT W/IN SPROC ADDING A ROW +### THAT FAILS FK CHECK IN FED TABLE +### +CREATE TABLE federated.parent(a INT, PRIMARY KEY(a)) ENGINE=InnoDB; +CREATE TABLE federated.child(a INT, b INT, PRIMARY KEY(b),FOREIGN KEY(a) REFERENCES federated.parent(a))ENGINE=InnoDB; +INSERT federated.parent VALUES (1); +INSERT federated.child VALUES (1,1); +CREATE TABLE federated.child(a INT, b INT, PRIMARY KEY(b), +FOREIGN KEY(a) REFERENCES federated.parent(a)) +ENGINE=FEDERATED +CONNECTION='mysql://root@127.0.0.1:MASTER_PORT/federated/child'; +SELECT * FROM federated.child; +a b +1 1 +DROP PROCEDURE IF EXISTS add_child; +Warnings: +Note 1305 PROCEDURE test.add_child does not exist +CREATE PROCEDURE add_child(IN new_a INT, IN new_b INT) +DETERMINISTIC MODIFIES SQL DATA +BEGIN +DECLARE CONTINUE HANDLER FOR SQLEXCEPTION +BEGIN +GET DIAGNOSTICS @p1 = NUMBER, @p2 = ROW_COUNT; +GET DIAGNOSTICS CONDITION 1 @p3=CLASS_ORIGIN, @p4=SUBCLASS_ORIGIN, @p5=RETURNED_SQLSTATE, @p6=MESSAGE_TEXT, @p7=MYSQL_ERRNO; +SELECT +@p1 as 'NUMBER' + , @p2 as 'ROW_COUNT' + , @p3 as 'CLASS_ORIGIN' + , @p4 as 'SUBCLASS_ORIGIN' + , @p5 as 'RETURNED_SQLSTATE' + , @p6 as 'MESSAGE_TEXT' + , @p7 as 'MYSQL_ERRNO'; +END; +INSERT federated.child(a, b) VALUES(new_a, new_b); +END| +CALL add_child(2,2); +NUMBER ROW_COUNT CLASS_ORIGIN SUBCLASS_ORIGIN RETURNED_SQLSTATE MESSAGE_TEXT MYSQL_ERRNO +1 -1 ISO 9075 ISO 9075 23000 Cannot add or update a child row: a foreign key constraint fails () 1452 +CALL add_child(1,1); +NUMBER ROW_COUNT CLASS_ORIGIN SUBCLASS_ORIGIN RETURNED_SQLSTATE MESSAGE_TEXT MYSQL_ERRNO +1 -1 ISO 9075 ISO 9075 23000 Can't write; duplicate key in table 'child' 1022 +DROP TABLE federated.child; +DROP PROCEDURE add_child; +DROP TABLE federated.child; +DROP TABLE federated.parent; SET @@GLOBAL.CONCURRENT_INSERT= @OLD_MASTER_CONCURRENT_INSERT; SET @@GLOBAL.CONCURRENT_INSERT= @OLD_SLAVE_CONCURRENT_INSERT; DROP TABLE IF EXISTS federated.t1; diff --git a/mysql-test/suite/federated/federated.test b/mysql-test/suite/federated/federated.test index 2e92f70ed54a..95e43718bb27 100644 --- a/mysql-test/suite/federated/federated.test +++ b/mysql-test/suite/federated/federated.test @@ -2040,6 +2040,62 @@ DROP TABLE federated.t1_child; DROP TABLE federated.t1; --disable_connect_log +--echo ### +--echo ### Bug#27509959: EXCEPTION NOT CAUGHT W/IN SPROC ADDING A ROW +--echo ### THAT FAILS FK CHECK IN FED TABLE +--echo ### + +connection master; + +CREATE TABLE federated.parent(a INT, PRIMARY KEY(a)) ENGINE=InnoDB; +CREATE TABLE federated.child(a INT, b INT, PRIMARY KEY(b),FOREIGN KEY(a) REFERENCES federated.parent(a))ENGINE=InnoDB; +INSERT federated.parent VALUES (1); +INSERT federated.child VALUES (1,1); + +connection slave; + +--replace_result $MASTER_MYPORT MASTER_PORT +eval CREATE TABLE federated.child(a INT, b INT, PRIMARY KEY(b), + FOREIGN KEY(a) REFERENCES federated.parent(a)) + ENGINE=FEDERATED + CONNECTION='mysql://root@127.0.0.1:$MASTER_MYPORT/federated/child'; + +SELECT * FROM federated.child; + +DROP PROCEDURE IF EXISTS add_child; +DELIMITER |; +CREATE PROCEDURE add_child(IN new_a INT, IN new_b INT) +DETERMINISTIC MODIFIES SQL DATA +BEGIN + DECLARE CONTINUE HANDLER FOR SQLEXCEPTION + BEGIN + GET DIAGNOSTICS @p1 = NUMBER, @p2 = ROW_COUNT; + GET DIAGNOSTICS CONDITION 1 @p3=CLASS_ORIGIN, @p4=SUBCLASS_ORIGIN, @p5=RETURNED_SQLSTATE, @p6=MESSAGE_TEXT, @p7=MYSQL_ERRNO; + SELECT + @p1 as 'NUMBER' + , @p2 as 'ROW_COUNT' + , @p3 as 'CLASS_ORIGIN' + , @p4 as 'SUBCLASS_ORIGIN' + , @p5 as 'RETURNED_SQLSTATE' + , @p6 as 'MESSAGE_TEXT' + , @p7 as 'MYSQL_ERRNO'; + END; + INSERT federated.child(a, b) VALUES(new_a, new_b); +END| +DELIMITER ;| + +CALL add_child(2,2); +CALL add_child(1,1); + +#Cleanup +DROP TABLE federated.child; +DROP PROCEDURE add_child; + +connection master; +DROP TABLE federated.child; +DROP TABLE federated.parent; + + connection default; SET @@GLOBAL.CONCURRENT_INSERT= @OLD_MASTER_CONCURRENT_INSERT; connection slave; diff --git a/storage/federated/ha_federated.cc b/storage/federated/ha_federated.cc index 8524d65a7a98..ed73783cdebf 100644 --- a/storage/federated/ha_federated.cc +++ b/storage/federated/ha_federated.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2004, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2004, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -3285,6 +3285,9 @@ int ha_federated::stash_remote_error() if (remote_error_number == ER_DUP_ENTRY || remote_error_number == ER_DUP_KEY) DBUG_RETURN(HA_ERR_FOUND_DUPP_KEY); + if (remote_error_number == ER_NO_REFERENCED_ROW || + remote_error_number == ER_NO_REFERENCED_ROW_2) + DBUG_RETURN(HA_ERR_NO_REFERENCED_ROW); DBUG_RETURN(HA_FEDERATED_ERROR_WITH_REMOTE_SYSTEM); } From 82b212b157e2395b9714386fd63e19eafc3e5b1d Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Mon, 23 Apr 2018 12:41:13 +0200 Subject: [PATCH 0791/1221] PS-3842: PS 5.7 cannot be built with -DWITH_LZ4=system on Ubuntu 14.04 (Trusty) 1. Use a newer LZ4 build from https://launchpad.net/~jonathonf 2. Remove -DWITH_INNOBASE_STORAGE_ENGINE=OFF as InnoDB is MANDATORY in 5.7 --- .travis.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 267d7d001a39..e2c5a26fec92 100644 --- a/.travis.yml +++ b/.travis.yml @@ -194,6 +194,7 @@ script: sudo -E apt-add-repository -y "ppa:jonathonf/gcc-6.4"; sudo -E apt-add-repository -y "ppa:jonathonf/gcc-7.3"; sudo -E apt-add-repository -y "ppa:jonathonf/gcc-8.0"; + sudo -E apt-add-repository -y "ppa:jonathonf/mysql"; fi; - echo --- Update list of packages and download dependencies; @@ -201,7 +202,7 @@ script: CC=$CC-$VERSION; CXX=$CXX-$VERSION; sudo -E apt-get -yq update >> ~/apt-get-update.log 2>&1; - sudo -E apt-get -yq --no-install-suggests --no-install-recommends install $CXX $PACKAGES cmake cmake-curses-gui bison libncurses5-dev libaio-dev libssl-dev libevent-dev libmecab-dev libprotobuf-dev protobuf-compiler || travis_terminate 1; + sudo -E apt-get -yq --no-install-suggests --no-install-recommends install $CXX $PACKAGES cmake cmake-curses-gui bison libncurses5-dev libaio-dev libssl-dev libevent-dev libmecab-dev libprotobuf-dev protobuf-compiler liblz4-dev || travis_terminate 1; sudo ln -s $(which ccache) /usr/lib/ccache/$CC; sudo ln -s $(which ccache) /usr/lib/ccache/$CXX || echo; else @@ -260,6 +261,7 @@ script: -DWITH_EMBEDDED_SERVER=OFF -DWITH_EDITLINE=bundled -DWITH_LIBEVENT=system + -DWITH_LZ4=system -DWITH_PROTOBUF=system -DWITH_SSL=system -DWITH_ZLIB=bundled @@ -267,7 +269,6 @@ script: -DWITH_BLACKHOLE_STORAGE_ENGINE=OFF -DWITH_EXAMPLE_STORAGE_ENGINE=ON -DWITH_FEDERATED_STORAGE_ENGINE=OFF - -DWITH_INNOBASE_STORAGE_ENGINE=OFF -DWITH_QUERY_RESPONSE_TIME=ON -DWITHOUT_PARTITION_STORAGE_ENGINE=ON -DWITHOUT_PERFSCHEMA_STORAGE_ENGINE=ON From 5b5ac3300f5e849002d36f8f526809a3f17da54e Mon Sep 17 00:00:00 2001 From: Evgeniy Patlan Date: Tue, 24 Apr 2018 17:44:12 +0300 Subject: [PATCH 0792/1221] [PS-3971] /etc/my.cnf was overwritten --- build-ps/debian/percona-server-common-5.7.postinst | 2 +- build-ps/percona-server.spec | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/build-ps/debian/percona-server-common-5.7.postinst b/build-ps/debian/percona-server-common-5.7.postinst index 99b483415876..7757e92aadc9 100644 --- a/build-ps/debian/percona-server-common-5.7.postinst +++ b/build-ps/debian/percona-server-common-5.7.postinst @@ -28,7 +28,7 @@ case "$1" in for DIR in $(grep 'includedir' $FILE | awk '{print $2}'); do if [ -d $DIR ]; then COUNT=$(ls $DIR | wc -l) - if [ $COUNT > 0 ]; then + if [ $COUNT -gt 0 ]; then for file in $(ls $DIR); do modified=$(debsums --all $PKG | grep $file | awk '{print $2}') if [ $MODIFIED = "OK" ]; then diff --git a/build-ps/percona-server.spec b/build-ps/percona-server.spec index 59254ca3f260..ea8d7ca318ab 100644 --- a/build-ps/percona-server.spec +++ b/build-ps/percona-server.spec @@ -551,9 +551,11 @@ if [ -e /etc/my.cnf ]; then fi if [ "$MYCNF_PACKAGE" == "mariadb-libs" -o "$MYCNF_PACKAGE" == "mysql-libs" -o "$MYCNF_PACKAGE" == "Percona-Server-server-57" ]; then MODIFIED=$(rpm -Va "$MYCNF_PACKAGE" | grep '/etc/my.cnf' | awk '{print $1}' | grep -c 5) - if [ "$MODIFIED" == 0 ]; then + if [ "$MODIFIED" == 1 ]; then mv /etc/my.cnf /etc/my.cnf.old fi +else + mv /etc/my.cnf /etc/my.cnf.old fi if [ ! -f /etc/my.cnf ]; then rm -rf /etc/my.cnf From 1790e872093977950df6379d1aa4a20692df729c Mon Sep 17 00:00:00 2001 From: Evgeniy Patlan Date: Tue, 24 Apr 2018 17:47:34 +0300 Subject: [PATCH 0793/1221] [PS-3971] /etc/my.cnf was overwritten --- build-ps/debian/percona-server-common-5.7.postinst | 3 ++- build-ps/percona-server.spec | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/build-ps/debian/percona-server-common-5.7.postinst b/build-ps/debian/percona-server-common-5.7.postinst index 99b483415876..946aac032b93 100644 --- a/build-ps/debian/percona-server-common-5.7.postinst +++ b/build-ps/debian/percona-server-common-5.7.postinst @@ -28,7 +28,7 @@ case "$1" in for DIR in $(grep 'includedir' $FILE | awk '{print $2}'); do if [ -d $DIR ]; then COUNT=$(ls $DIR | wc -l) - if [ $COUNT > 0 ]; then + if [ $COUNT -gt 0 ]; then for file in $(ls $DIR); do modified=$(debsums --all $PKG | grep $file | awk '{print $2}') if [ $MODIFIED = "OK" ]; then @@ -43,6 +43,7 @@ case "$1" in done fi if [ $CONF_EXISTS = 0 ]; then + cp -p /etc/mysql/my.cnf /etc/mysql/my.cnf.old rm -rf /etc/mysql/my.cnf update-alternatives --install /etc/mysql/my.cnf my.cnf "/etc/mysql/percona-server.cnf" 200 exit 0 diff --git a/build-ps/percona-server.spec b/build-ps/percona-server.spec index 59254ca3f260..ea8d7ca318ab 100644 --- a/build-ps/percona-server.spec +++ b/build-ps/percona-server.spec @@ -551,9 +551,11 @@ if [ -e /etc/my.cnf ]; then fi if [ "$MYCNF_PACKAGE" == "mariadb-libs" -o "$MYCNF_PACKAGE" == "mysql-libs" -o "$MYCNF_PACKAGE" == "Percona-Server-server-57" ]; then MODIFIED=$(rpm -Va "$MYCNF_PACKAGE" | grep '/etc/my.cnf' | awk '{print $1}' | grep -c 5) - if [ "$MODIFIED" == 0 ]; then + if [ "$MODIFIED" == 1 ]; then mv /etc/my.cnf /etc/my.cnf.old fi +else + mv /etc/my.cnf /etc/my.cnf.old fi if [ ! -f /etc/my.cnf ]; then rm -rf /etc/my.cnf From 6e9b0bd48b48c504067d386cf10165eaaa4cc130 Mon Sep 17 00:00:00 2001 From: Evgeniy Patlan Date: Tue, 24 Apr 2018 17:57:45 +0300 Subject: [PATCH 0794/1221] Copy my.cnf instead of move --- build-ps/percona-server.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build-ps/percona-server.spec b/build-ps/percona-server.spec index ea8d7ca318ab..6e08aeca0584 100644 --- a/build-ps/percona-server.spec +++ b/build-ps/percona-server.spec @@ -555,7 +555,7 @@ if [ "$MYCNF_PACKAGE" == "mariadb-libs" -o "$MYCNF_PACKAGE" == "mysql-libs" -o " mv /etc/my.cnf /etc/my.cnf.old fi else - mv /etc/my.cnf /etc/my.cnf.old + cp /etc/my.cnf /etc/my.cnf.old fi if [ ! -f /etc/my.cnf ]; then rm -rf /etc/my.cnf From f8220e83e7b2651ef1eb6f9e240ae5cdc49a6751 Mon Sep 17 00:00:00 2001 From: Venkatesh Duggirala Date: Mon, 23 Apr 2018 08:57:51 +0530 Subject: [PATCH 0795/1221] Bug#27858055 BACKPORT --EXEC_IN_BACKGROUND MTR COMMAND TO 5.7 Problem: Currently in MTR, there is no way to execute a shell command in the background. For eg: executing MYSQLSLAP should be done using --exec but it is not going into background even if appened "&" at the end of the --exec command. Fix: Implementing a new command --exec_in_background that puts the shell command in the background. USAGE: --exec_in_background $MYSQL_SLAP --create-schema=test --delimiter=";" --iterations=500 --query="INSERT INTO t1 values (1)" --concurrency=10 --silent 2>&1 --- client/mysqltest.cc | 48 +++++++++++++++++++++++++++++++++------------ 1 file changed, 36 insertions(+), 12 deletions(-) diff --git a/client/mysqltest.cc b/client/mysqltest.cc index ea131b2c5720..8f6dbf571dc2 100644 --- a/client/mysqltest.cc +++ b/client/mysqltest.cc @@ -389,7 +389,7 @@ enum enum_commands { Q_ENABLE_INFO, Q_DISABLE_INFO, Q_ENABLE_SESSION_TRACK_INFO, Q_DISABLE_SESSION_TRACK_INFO, Q_ENABLE_METADATA, Q_DISABLE_METADATA, - Q_EXEC, Q_EXECW, Q_DELIMITER, + Q_EXEC, Q_EXECW, Q_EXEC_BACKGROUND, Q_DELIMITER, Q_DISABLE_ABORT_ON_ERROR, Q_ENABLE_ABORT_ON_ERROR, Q_DISPLAY_VERTICAL_RESULTS, Q_DISPLAY_HORIZONTAL_RESULTS, Q_QUERY_VERTICAL, Q_QUERY_HORIZONTAL, Q_SORTED_RESULT, @@ -465,6 +465,7 @@ const char *command_names[]= "disable_metadata", "exec", "execw", + "exec_in_background", "delimiter", "disable_abort_on_error", "enable_abort_on_error", @@ -3238,7 +3239,7 @@ static int replace(DYNAMIC_STRING *ds_str, mysqltest commmand(s) like "remove_file" for that */ -void do_exec(struct st_command *command) +void do_exec(struct st_command *command, bool run_in_background) { int error; char buf[512]; @@ -3274,6 +3275,23 @@ void do_exec(struct st_command *command) while(replace(&ds_cmd, ">&-", 3, ">&4", 3) == 0) ; #endif + if (run_in_background) + { + /* Add an invocation of "START /B" on Windows, append " &" on Linux*/ + DYNAMIC_STRING ds_tmp; +#ifdef WIN32 + init_dynamic_string(&ds_tmp, "START /B ", + ds_cmd.length + 9, 256); + dynstr_append_mem(&ds_tmp, ds_cmd.str, ds_cmd.length); +#else + init_dynamic_string(&ds_tmp, ds_cmd.str, + ds_cmd.length + 2, 256); + dynstr_append_mem(&ds_tmp, " &", 2); +#endif + dynstr_set(&ds_cmd, ds_tmp.str); + dynstr_free(&ds_tmp); + } + /* exec command is interpreted externally and will not take newlines */ while(replace(&ds_cmd, "\n", 1, " ", 1) == 0) @@ -3287,17 +3305,19 @@ void do_exec(struct st_command *command) dynstr_free(&ds_cmd); die("popen(\"%s\", \"r\") failed", command->first_argument); } - - while (fgets(buf, sizeof(buf), res_file)) + if(!run_in_background) { - if (disable_result_log) - { - buf[strlen(buf)-1]=0; - DBUG_PRINT("exec_result",("%s", buf)); - } - else + while (fgets(buf, sizeof(buf), res_file)) { - replace_dynstr_append(&ds_res, buf); + if (disable_result_log) + { + buf[strlen(buf)-1]=0; + DBUG_PRINT("exec_result",("%s", buf)); + } + else + { + replace_dynstr_append(&ds_res, buf); + } } } error= pclose(res_file); @@ -9650,7 +9670,11 @@ int main(int argc, char **argv) break; case Q_EXEC: case Q_EXECW: - do_exec(command); + do_exec(command, false); + command_executed++; + break; + case Q_EXEC_BACKGROUND: + do_exec(command, true); command_executed++; break; case Q_START_TIMER: From b80f62466471945ee6ff0d03289ba98b5c647a93 Mon Sep 17 00:00:00 2001 From: Evgeniy Patlan Date: Tue, 24 Apr 2018 20:04:33 +0300 Subject: [PATCH 0796/1221] Add additional check for my.cnf link --- build-ps/percona-server.spec | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/build-ps/percona-server.spec b/build-ps/percona-server.spec index 6e08aeca0584..c82cb713abbb 100644 --- a/build-ps/percona-server.spec +++ b/build-ps/percona-server.spec @@ -562,7 +562,9 @@ if [ ! -f /etc/my.cnf ]; then update-alternatives --install /etc/my.cnf my.cnf "/etc/percona-server.cnf" 200 else if [ "$MYCNF_PACKAGE" == "Percona-Server-server-57" ]; then - rm -rf /etc/my.cnf + if [ -L /etc/my.cnf ]; then + rm -rf /etc/my.cnf + fi update-alternatives --install /etc/my.cnf my.cnf "/etc/percona-server.cnf" 200 else echo " -------------" From 2e19ced9ef2185ceacb942ed2dcaa6afd7d7ca21 Mon Sep 17 00:00:00 2001 From: Evgeniy Patlan Date: Tue, 24 Apr 2018 22:30:26 +0300 Subject: [PATCH 0797/1221] Fix rpms --- build-ps/percona-server.spec | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build-ps/percona-server.spec b/build-ps/percona-server.spec index c82cb713abbb..f0eebb0bf8ba 100644 --- a/build-ps/percona-server.spec +++ b/build-ps/percona-server.spec @@ -552,10 +552,10 @@ fi if [ "$MYCNF_PACKAGE" == "mariadb-libs" -o "$MYCNF_PACKAGE" == "mysql-libs" -o "$MYCNF_PACKAGE" == "Percona-Server-server-57" ]; then MODIFIED=$(rpm -Va "$MYCNF_PACKAGE" | grep '/etc/my.cnf' | awk '{print $1}' | grep -c 5) if [ "$MODIFIED" == 1 ]; then - mv /etc/my.cnf /etc/my.cnf.old + cp /etc/my.cnf /etc/my.cnf.old fi else - cp /etc/my.cnf /etc/my.cnf.old + mv /etc/my.cnf /etc/my.cnf.old fi if [ ! -f /etc/my.cnf ]; then rm -rf /etc/my.cnf From b7af8823cac8638fe2910017c22a767e5ae89cc0 Mon Sep 17 00:00:00 2001 From: Evgeniy Patlan Date: Tue, 24 Apr 2018 22:59:02 +0300 Subject: [PATCH 0798/1221] Add message for rpm --- build-ps/percona-server.spec | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/build-ps/percona-server.spec b/build-ps/percona-server.spec index f0eebb0bf8ba..48e532e2486c 100644 --- a/build-ps/percona-server.spec +++ b/build-ps/percona-server.spec @@ -564,8 +564,16 @@ else if [ "$MYCNF_PACKAGE" == "Percona-Server-server-57" ]; then if [ -L /etc/my.cnf ]; then rm -rf /etc/my.cnf + update-alternatives --install /etc/my.cnf my.cnf "/etc/percona-server.cnf" 200 + else + echo " -------------" + echo " * The suggested mysql options and settings are in /etc/percona-server.conf.d/mysqld.cnf" + echo " * If you want to use mysqld.cnf as default configuration file please make backup of /etc/my.cnf" + echo " * Once it is done please execute the following commands:" + echo " rm -rf /etc/my.cnf" + echo " update-alternatives --install /etc/my.cnf my.cnf \"/etc/percona-server.cnf\" 200" + echo " -------------" fi - update-alternatives --install /etc/my.cnf my.cnf "/etc/percona-server.cnf" 200 else echo " -------------" echo " * The suggested mysql options and settings are in /etc/percona-server.conf.d/mysqld.cnf" From 2a37e4ea859cd2c2de51388ecc0cbf6fb10d0ed5 Mon Sep 17 00:00:00 2001 From: Evgeniy Patlan Date: Wed, 25 Apr 2018 18:15:19 +0300 Subject: [PATCH 0799/1221] [PS-3972] do not remove symlinks --- build-ps/debian/percona-server-common-5.7.postinst | 12 +++++++----- build-ps/percona-server.spec | 5 +++-- build-ps/ubuntu/percona-server-common-5.7.postinst | 13 ++++++++----- 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/build-ps/debian/percona-server-common-5.7.postinst b/build-ps/debian/percona-server-common-5.7.postinst index 946aac032b93..aa0fe47abfd2 100644 --- a/build-ps/debian/percona-server-common-5.7.postinst +++ b/build-ps/debian/percona-server-common-5.7.postinst @@ -44,8 +44,8 @@ case "$1" in fi if [ $CONF_EXISTS = 0 ]; then cp -p /etc/mysql/my.cnf /etc/mysql/my.cnf.old - rm -rf /etc/mysql/my.cnf - update-alternatives --install /etc/mysql/my.cnf my.cnf "/etc/mysql/percona-server.cnf" 200 + #rm -rf /etc/mysql/my.cnf + update-alternatives --install /etc/mysql/my.cnf my.cnf "/etc/mysql/percona-server.cnf" 200 || true exit 0 else print_message @@ -53,9 +53,11 @@ case "$1" in fi fi fi - if [ ! -f /etc/mysql/my.cnf -o -L /etc/mysql/my.cnf ]; then - rm -rf /etc/mysql/my.cnf - update-alternatives --install /etc/mysql/my.cnf my.cnf "/etc/mysql/percona-server.cnf" 200 + real_file=$(readlink -f /etc/mysql/my.cnf) + if [ ! -f /etc/mysql/my.cnf -o $real_file = "/etc/mysql/percona-server.cnf" ]; then + print_message + #rm -rf /etc/mysql/my.cnf + update-alternatives --install /etc/mysql/my.cnf my.cnf "/etc/mysql/percona-server.cnf" 200 || true else print_message fi diff --git a/build-ps/percona-server.spec b/build-ps/percona-server.spec index 48e532e2486c..eeb4a68ead42 100644 --- a/build-ps/percona-server.spec +++ b/build-ps/percona-server.spec @@ -555,14 +555,15 @@ if [ "$MYCNF_PACKAGE" == "mariadb-libs" -o "$MYCNF_PACKAGE" == "mysql-libs" -o " cp /etc/my.cnf /etc/my.cnf.old fi else - mv /etc/my.cnf /etc/my.cnf.old + cp /etc/my.cnf /etc/my.cnf.old fi if [ ! -f /etc/my.cnf ]; then rm -rf /etc/my.cnf update-alternatives --install /etc/my.cnf my.cnf "/etc/percona-server.cnf" 200 else if [ "$MYCNF_PACKAGE" == "Percona-Server-server-57" ]; then - if [ -L /etc/my.cnf ]; then + real_file=$(readlink -f /etc/my.cnf) + if [ -L /etc/my.cnf ] && [ "x${real_file}" == "x/etc/percona-server.cnf" ]; then rm -rf /etc/my.cnf update-alternatives --install /etc/my.cnf my.cnf "/etc/percona-server.cnf" 200 else diff --git a/build-ps/ubuntu/percona-server-common-5.7.postinst b/build-ps/ubuntu/percona-server-common-5.7.postinst index 7757e92aadc9..aa0fe47abfd2 100644 --- a/build-ps/ubuntu/percona-server-common-5.7.postinst +++ b/build-ps/ubuntu/percona-server-common-5.7.postinst @@ -43,8 +43,9 @@ case "$1" in done fi if [ $CONF_EXISTS = 0 ]; then - rm -rf /etc/mysql/my.cnf - update-alternatives --install /etc/mysql/my.cnf my.cnf "/etc/mysql/percona-server.cnf" 200 + cp -p /etc/mysql/my.cnf /etc/mysql/my.cnf.old + #rm -rf /etc/mysql/my.cnf + update-alternatives --install /etc/mysql/my.cnf my.cnf "/etc/mysql/percona-server.cnf" 200 || true exit 0 else print_message @@ -52,9 +53,11 @@ case "$1" in fi fi fi - if [ ! -f /etc/mysql/my.cnf -o -L /etc/mysql/my.cnf ]; then - rm -rf /etc/mysql/my.cnf - update-alternatives --install /etc/mysql/my.cnf my.cnf "/etc/mysql/percona-server.cnf" 200 + real_file=$(readlink -f /etc/mysql/my.cnf) + if [ ! -f /etc/mysql/my.cnf -o $real_file = "/etc/mysql/percona-server.cnf" ]; then + print_message + #rm -rf /etc/mysql/my.cnf + update-alternatives --install /etc/mysql/my.cnf my.cnf "/etc/mysql/percona-server.cnf" 200 || true else print_message fi From 30bc04f33169b00880d2e9bea7dd38927de2fa0b Mon Sep 17 00:00:00 2001 From: Bin Su Date: Thu, 26 Apr 2018 11:13:49 +0800 Subject: [PATCH 0800/1221] BUG#26553164 - INNODB PARTITION TABLE HAS UNEXPECTED ROW LOCK This is similar issue to bug#26731025, the only difference is that this one is for ordered index scan, while the other one is for unordered index scan. The cause is same too, that is for the equal range scan, it used to call improper read_range* function and set an incorrect lock to the record, which leads to the final lock waiting. The fix is that for equal range scan, call the proper index_next_same_in_part() to set a proper record to previous locking waiting. RB: 19528 Reviewed-by: Debarun Banerjee (debarun.banerjee@oracle.com) --- mysql-test/r/partition_innodb.result | 33 +++++++++++++++++++++ mysql-test/t/partition_innodb.test | 42 +++++++++++++++++++++++++++ sql/partitioning/partition_handler.cc | 22 +++++++------- 3 files changed, 86 insertions(+), 11 deletions(-) diff --git a/mysql-test/r/partition_innodb.result b/mysql-test/r/partition_innodb.result index 3cba38939729..bc4b84c08763 100644 --- a/mysql-test/r/partition_innodb.result +++ b/mysql-test/r/partition_innodb.result @@ -1334,3 +1334,36 @@ TABLE_NAME = 't1' ORDER BY PARTITION_ORDINAL_POSITION; TABLE_NAME COUNT(UPDATE_TIME) t1 1 DROP TABLE t1; + +BUG#26553164 - INNODB PARTITION TABLE HAS UNEXPECTED ROW LOCK + +CREATE TABLE `t1` ( +`id` int(11) NOT NULL, +`dt` datetime NOT NULL, +`data` varchar(10) DEFAULT NULL, +PRIMARY KEY (`id`,`dt`), +KEY `idx_dt` (`dt`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (to_days(dt)) +(PARTITION p20170218 VALUES LESS THAN (736744) ENGINE = InnoDB, +PARTITION p20170219 VALUES LESS THAN (736745) ENGINE = InnoDB, +PARTITION pMax VALUES LESS THAN MAXVALUE ENGINE = InnoDB) */; +INSERT INTO t1 VALUES (1, '2018-04-25 10:18:00', '1'); +INSERT INTO t1 VALUES (2, '2018-04-25 10:18:01', '2'); +INSERT INTO t1 VALUES (3, '2018-04-25 10:18:02', '3'); +SELECT * FROM t1; +id dt data +1 2018-04-25 10:18:00 1 +2 2018-04-25 10:18:01 2 +3 2018-04-25 10:18:02 3 +begin; +UPDATE t1 SET data = '11' WHERE id = 1; +begin; +UPDATE t1 SET data = '22' WHERE id = 2; +commit; +SELECT * FROM t1; +id dt data +1 2018-04-25 10:18:00 11 +2 2018-04-25 10:18:01 22 +3 2018-04-25 10:18:02 3 +DROP TABLE t1; diff --git a/mysql-test/t/partition_innodb.test b/mysql-test/t/partition_innodb.test index bcae676d9ea6..b2e5fe74dabf 100644 --- a/mysql-test/t/partition_innodb.test +++ b/mysql-test/t/partition_innodb.test @@ -1319,3 +1319,45 @@ FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME = 't1' ORDER BY PARTITION_ORDINAL_POSITION; DROP TABLE t1; + + +--echo +--echo BUG#26553164 - INNODB PARTITION TABLE HAS UNEXPECTED ROW LOCK +--echo + +--connect (conn1,localhost,root,,) + +--connection default + +CREATE TABLE `t1` ( + `id` int(11) NOT NULL, + `dt` datetime NOT NULL, + `data` varchar(10) DEFAULT NULL, + PRIMARY KEY (`id`,`dt`), + KEY `idx_dt` (`dt`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (to_days(dt)) +(PARTITION p20170218 VALUES LESS THAN (736744) ENGINE = InnoDB, + PARTITION p20170219 VALUES LESS THAN (736745) ENGINE = InnoDB, + PARTITION pMax VALUES LESS THAN MAXVALUE ENGINE = InnoDB) */; + +INSERT INTO t1 VALUES (1, '2018-04-25 10:18:00', '1'); +INSERT INTO t1 VALUES (2, '2018-04-25 10:18:01', '2'); +INSERT INTO t1 VALUES (3, '2018-04-25 10:18:02', '3'); + +SELECT * FROM t1; + +begin; +UPDATE t1 SET data = '11' WHERE id = 1; + +--connection conn1 +begin; +UPDATE t1 SET data = '22' WHERE id = 2; +commit; + +--disconnect conn1 + +--connection default +SELECT * FROM t1; + +DROP TABLE t1; diff --git a/sql/partitioning/partition_handler.cc b/sql/partitioning/partition_handler.cc index f5be5d8b6e4e..3ab0c22048f2 100644 --- a/sql/partitioning/partition_handler.cc +++ b/sql/partitioning/partition_handler.cc @@ -3530,20 +3530,20 @@ int Partition_helper::handle_ordered_next(uchar *buf, bool is_next_same) else read_buf= rec_buf; - - if (m_index_scan_type == PARTITION_READ_RANGE) - { - error= read_range_next_in_part(part_id, - read_buf == m_table->record[0] - ? NULL : read_buf); - } - else if (!is_next_same) - error= index_next_in_part(part_id, read_buf); - else - error= index_next_same_in_part(part_id, + if (is_next_same) { + error = index_next_same_in_part(part_id, read_buf, m_start_key.key, m_start_key.length); + } else if (m_index_scan_type == PARTITION_READ_RANGE) { + error = read_range_next_in_part(part_id, + read_buf == m_table->record[0] + ? NULL : read_buf); + } + else { + error = index_next_in_part(part_id, read_buf); + } + if (error) { if (error == HA_ERR_END_OF_FILE) From 0151c5532e2787f90591937fd16b808dde26002a Mon Sep 17 00:00:00 2001 From: fiowro Date: Thu, 26 Apr 2018 12:23:03 +0300 Subject: [PATCH 0801/1221] Addon fix for DOC-722, polishing comment on don't mixing secret mount points --- doc/source/management/data_at_rest_encryption.rst | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/doc/source/management/data_at_rest_encryption.rst b/doc/source/management/data_at_rest_encryption.rst index 123cb736f872..a1548e2229e3 100644 --- a/doc/source/management/data_at_rest_encryption.rst +++ b/doc/source/management/data_at_rest_encryption.rst @@ -267,6 +267,12 @@ Configuration file should contain the following information: to the Vault server. In this case this variable should point to CA certificate that was used to sign Vault's certificates. +.. warning:: + + Each ``secret_mount_point`` should be used by only one server - otherwise + mixing encryption keys from different servers may lead to undefined + behavior. + An example of the configuration file looks like this: :: vault_url = https://vault.public.com:8202 From c244df16ebd69f03a023255ed808a31eef3ef2f5 Mon Sep 17 00:00:00 2001 From: Dmitriy Kostiuk Date: Fri, 27 Apr 2018 06:56:39 +0300 Subject: [PATCH 0802/1221] Fix for DOC-372 without clarification of COMMAND_CLASS information - just minor formatting fixes (#2338) From 27b09e00f6ae46c052ae025d0e69565112c3f1c8 Mon Sep 17 00:00:00 2001 From: Sreeharsha Ramanavarapu Date: Mon, 30 Apr 2018 08:22:38 +0530 Subject: [PATCH 0803/1221] Bug#27881102:GCOL: INCORRECT BEHAVIOR WITH INTERVAL FUNCTION Bitwise operator is mistakenly used instead of logical &&. --- sql/item_cmpfunc.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc index abb27e4f02e9..b36182e281ae 100644 --- a/sql/item_cmpfunc.cc +++ b/sql/item_cmpfunc.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -2728,7 +2728,7 @@ void Item_func_interval::fix_length_and_dec() for (uint i= 1; not_null_consts && i < rows; i++) { Item *el= row->element_index(i); - not_null_consts&= el->const_item() & !el->is_null(); + not_null_consts= el->const_item() && !el->is_null(); } if (not_null_consts && From c84ed7095ddbc4040e5967c0e4c53b171520fd34 Mon Sep 17 00:00:00 2001 From: Bharathy Satish Date: Mon, 30 Apr 2018 06:30:08 +0200 Subject: [PATCH 0804/1221] Bug #26643180: MYSQLDUMP IS EXCLUDING GTID_EXECUTED TABLE FROM THE DUMP Problem: This bug is a regression of bug#24590891. Fix: Fix is to retain gtid_executed table and skip the data from that table during dump process. --- client/mysqldump.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/client/mysqldump.c b/client/mysqldump.c index 8a78d137183f..baaf5c85abd3 100644 --- a/client/mysqldump.c +++ b/client/mysqldump.c @@ -1015,9 +1015,6 @@ static int get_options(int *argc, char ***argv) if (my_hash_insert(&ignore_table, (uchar*) my_strdup(PSI_NOT_INSTRUMENTED, "mysql.apply_status", MYF(MY_WME))) || - my_hash_insert(&ignore_table, - (uchar*) my_strdup(PSI_NOT_INSTRUMENTED, - "mysql.gtid_executed", MYF(MY_WME))) || my_hash_insert(&ignore_table, (uchar*) my_strdup(PSI_NOT_INSTRUMENTED, "mysql.schema", MYF(MY_WME))) || @@ -2703,13 +2700,17 @@ static inline my_bool general_log_or_slow_log_tables(const char *db, !my_strcasecmp(charset_info, table, "slow_log")); } -/* slave_master_info and slave_relay_log_info tables under mysql database */ +/* + slave_master_info,slave_relay_log_info and gtid_executed tables under + mysql database +*/ static inline my_bool replication_metadata_tables(const char *db, const char *table) { return (!my_strcasecmp(charset_info, db, "mysql")) && (!my_strcasecmp(charset_info, table, "slave_master_info") || - !my_strcasecmp(charset_info, table, "slave_relay_log_info")); + !my_strcasecmp(charset_info, table, "slave_relay_log_info") || + !my_strcasecmp(charset_info, table, "gtid_executed")); } /* From e20833e4d28168b9894f8d0a2944bb1f7cbe7f57 Mon Sep 17 00:00:00 2001 From: Neha Kumari Date: Mon, 30 Apr 2018 09:52:29 +0530 Subject: [PATCH 0805/1221] Bug#26450129:DEAD BRANCH IN SEARCH_KEY_IN_TABLE() Problem: if (key_type & UNIQUE_KEY_FLAG && table->s->uniques) { ... } The condition (table->s->uniques) is always 0 so the if block will never be executed. In cases where different primary key is used on master and slave and if there is an Unique key present on slave then that should be used for lookup created index. Before this bug in above cases a TABLE_SCAN was being performed which can be slower than INDEX_SCAN that will be performed after the bug fix. Fix: Remove the condition (table->s->uniques). --- .../r/rpl_different_index_master_slave.result | 31 +++++++++ .../t/rpl_different_index_master_slave.test | 66 +++++++++++++++++++ sql/log_event.cc | 4 +- 3 files changed, 98 insertions(+), 3 deletions(-) create mode 100644 mysql-test/suite/rpl/r/rpl_different_index_master_slave.result create mode 100644 mysql-test/suite/rpl/t/rpl_different_index_master_slave.test diff --git a/mysql-test/suite/rpl/r/rpl_different_index_master_slave.result b/mysql-test/suite/rpl/r/rpl_different_index_master_slave.result new file mode 100644 index 000000000000..8f08da6829eb --- /dev/null +++ b/mysql-test/suite/rpl/r/rpl_different_index_master_slave.result @@ -0,0 +1,31 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +==== Initialize ==== +[connection slave] +SET @old_slave_rows_search_algorithms = @@global.slave_rows_search_algorithms; +SET @@global.slave_rows_search_algorithms = 'INDEX_SCAN,TABLE_SCAN'; +include/start_slave.inc +[connection master] +SET @@session.binlog_row_image = 'MINIMAL'; +SET @@session.sql_log_bin = 0; +CREATE TABLE t1 (a INT, b INT, PRIMARY KEY(b)); +SET @@session.sql_log_bin = 1; +[connection slave] +CREATE TABLE t1 (a INT, b INT NOT NULL, UNIQUE KEY(b), PRIMARY KEY(a)); +[connection master] +INSERT INTO t1 VALUES [100 rows]; +include/sync_slave_sql_with_master.inc +==== Test ==== +[connection master] +DELETE FROM t1 WHERE b != 0 ORDER BY b DESC; +include/sync_slave_sql_with_master.inc +include/assert.inc [The search algorithm used while deleting rows is INDEX_SCAN, in the code before this bug it was TABLE_SCAN] +[connection master] +DROP TABLE t1; +include/sync_slave_sql_with_master.inc +include/stop_slave.inc +SET @@global.slave_rows_search_algorithms = @old_slave_rows_search_algorithms; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_different_index_master_slave.test b/mysql-test/suite/rpl/t/rpl_different_index_master_slave.test new file mode 100644 index 000000000000..45146114f05e --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_different_index_master_slave.test @@ -0,0 +1,66 @@ +# =========== Purpose =========== +# +# To test that if different primary key is used on master and slave +# and if there is an Unique key present on slave then that should be +# used for lookup replicated rows. +# Earlier in above cases a TABLE_SCAN was being performed which can be +# slower than INDEX_SCAN that will be performed after the bug fix. +# +# ========= Reference ========== +# Bug#26450129:DEAD BRANCH IN SEARCH_KEY_IN_TABLE() + +--source include/have_binlog_format_row.inc +--let $rpl_skip_start_slave = 1 +--source include/master-slave.inc + +--echo ==== Initialize ==== + +--source include/rpl_connection_slave.inc +SET @old_slave_rows_search_algorithms = @@global.slave_rows_search_algorithms; +SET @@global.slave_rows_search_algorithms = 'INDEX_SCAN,TABLE_SCAN'; +--source include/start_slave.inc + +--source include/rpl_connection_master.inc +SET @@session.binlog_row_image = 'MINIMAL'; + +SET @@session.sql_log_bin = 0; +CREATE TABLE t1 (a INT, b INT, PRIMARY KEY(b)); +SET @@session.sql_log_bin = 1; +--source include/rpl_connection_slave.inc +CREATE TABLE t1 (a INT, b INT NOT NULL, UNIQUE KEY(b), PRIMARY KEY(a)); +--source include/rpl_connection_master.inc + +--let $row_count = 100 +--let $rows = (0, 0) +--let $i = 1 +while ($i < $row_count) { + --let $rows = $rows, ($i, $i) + --inc $i +} +--disable_query_log +--echo INSERT INTO t1 VALUES [$row_count rows]; +eval INSERT INTO t1 VALUES $rows; +--enable_query_log +--source include/sync_slave_sql_with_master.inc + +--echo ==== Test ==== + +--source include/rpl_connection_master.inc + +DELETE FROM t1 WHERE b != 0 ORDER BY b DESC; +--source include/sync_slave_sql_with_master.inc + + +--let $assert_cond = "[SHOW STATUS LIKE \"Slave_rows_last_search_algorithm_used\", Value, 1]" = "INDEX_SCAN" +--let $assert_text= The search algorithm used while deleting rows is INDEX_SCAN, in the code before this bug it was TABLE_SCAN +--source include/assert.inc + +# Cleanup +--source include/rpl_connection_master.inc +DROP TABLE t1; +--source include/sync_slave_sql_with_master.inc +--source include/stop_slave.inc +SET @@global.slave_rows_search_algorithms = @old_slave_rows_search_algorithms; + +--let $rpl_only_running_threads=1 +--source include/rpl_end.inc diff --git a/sql/log_event.cc b/sql/log_event.cc index b7e1b67bb6d1..ea15f565a4f9 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -9633,9 +9633,7 @@ search_key_in_table(TABLE *table, MY_BITMAP *bi_cols, uint key_type) DBUG_RETURN(table->s->primary_key); } - DBUG_PRINT("debug", ("Unique keys count: %u", table->s->uniques)); - - if (key_type & UNIQUE_KEY_FLAG && table->s->uniques) + if (key_type & UNIQUE_KEY_FLAG) { DBUG_PRINT("debug", ("Searching for UK")); for (key=0,keyinfo= table->key_info ; From e21b2414967553007d431e9335a4ff358a788c81 Mon Sep 17 00:00:00 2001 From: Karthik Kamath Date: Mon, 30 Apr 2018 11:46:00 +0530 Subject: [PATCH 0806/1221] BUG#23221336: STORED ROUTINES - USER VARIABLE WOES WITH CURSOR + SELECT INTO .. ANALYSIS: ========= While executing a stored program, a debug assert is triggered for a SELECT query if the derived table resolving failed for the previous sub-statement of the stored program. In non-debug build, execution of the statement in such a scenario will yield unexpected result. TABLE has a bitmap read_set. A bit in this bitmap is set for a field of a table used in the query. But this bitmap is not set (for outer-most query block) while resolving derived tables. A flag THD::derived_tables_processing is used to indicate the derived table processing. In case of a stored program, if the derived table resolving fails then the flag THD::derived_tables_processing is not reset for the stored program statement. Due to this, read_set of TABLE is not set during the execution of next stored program statement. Hence an assert condition that checks for the state of read_set fails. In non-debug builds, the second SELECT query execution completes but returns wrong result set. FIX: ==== THD::derived_tables_processing flag is now reset before execution of each sub-statement in the stored program. Change-Id: I84bc5d8b509d341ca7c58d12241992672135b6bf --- sql/sql_prepare.cc | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/sql/sql_prepare.cc b/sql/sql_prepare.cc index 3b6dfaa5086b..c0110634313e 100644 --- a/sql/sql_prepare.cc +++ b/sql/sql_prepare.cc @@ -2337,6 +2337,13 @@ bool reinit_stmt_before_use(THD *thd, LEX *lex) // Default to READ access for every field that is resolved thd->mark_used_columns= MARK_COLUMNS_READ; + + /* + THD::derived_tables_processing is not reset if derived table resolving fails + for the previous sub-statement. Hence resetting it here. + */ + thd->derived_tables_processing= false; + /* We have to update "thd" pointer in LEX, all its units and in LEX::result, since statements which belong to trigger body are associated with TABLE From 9a65c73c5c15923514c236fb1239ee2c2f7524f6 Mon Sep 17 00:00:00 2001 From: Shishir Jaiswal Date: Mon, 30 Apr 2018 17:35:36 +0530 Subject: [PATCH 0807/1221] Bug#24911117 - SUPER PRIVILEGE NO LONGER REQUIRED TO DISPLAY PASSWORD HASH DESCRIPTION =========== As of now any user can view his password hash by executing SHOW CREATE USER. It should be viweable only if he has got enough privileges. ANALYSIS ======== append_user_new() generates the IDENTIFIED AS '' part of the output to SHOW CREATE USER. The user, if issues this statement for himself, should be able to view the password hash only if he can perform SELECT on mysql.user table. If he can't, he should see instead of password hash. FIX === We're now checking if or not the user is issuing the SHOW CREATE USER for himself in mysql_execute_command(). The same is captured in variable 'are_both_users_same' and passed to mysql_show_create_user(). If same, we now call check_table_access() to fetch privileges for the user and decide on if we need to hide the password or not. The same is captured in variable 'hide_password_hash'and passed to mysql_rewrite_create_alter_user() further to append_user_new() where we append either the hash or based on this variable. The bug was initially reported for both SHOW CREATE USER and SHOW GRANTS. This patch just deals with SHOW CREATE USER and not with the other. Reason being that SHOW GRANTS doesn't show the reported issue till 5.6 (as seen in matrix below) and from 5.7+ the IDENTIFIED BY PASSWORD clause was removed from it altogether. SELF OTHERS Access level [star].[star] hash hash mysql.[star] mysql.user Access denied default Access denied NOTE TO THE DOCUMENTATION TEAM ============================== The doc page says, "The statement requires the SELECT privilege for the mysql database, except to display information for the current user." This still holds true as this patch changes nothing for the case when user attempts to perform SHOW CREATE USER . With this patch in effect, the documentation should be extended as, "For current user, the statement IDENTIFIED AS clause displays password hash if he can perform SELECT on mysql.user table. If he can't he would see instead of password hash. --- mysql-test/r/grant_alter_user_qa.result | 2 +- sql/auth/auth_common.h | 8 +++++--- sql/auth/sql_user.cc | 20 ++++++++++++++++---- sql/sql_parse.cc | 11 ++++++----- sql/sql_rewrite.cc | 7 ++++--- 5 files changed, 32 insertions(+), 16 deletions(-) diff --git a/mysql-test/r/grant_alter_user_qa.result b/mysql-test/r/grant_alter_user_qa.result index 85e5536a2059..0fbdb5113824 100644 --- a/mysql-test/r/grant_alter_user_qa.result +++ b/mysql-test/r/grant_alter_user_qa.result @@ -2222,6 +2222,6 @@ SHOW CREATE USER bug20625566_user@localhost; ERROR 42000: Access denied for user 'bug20625566_dest'@'localhost' to database 'mysql' SHOW CREATE USER bug20625566_dest@localhost; CREATE USER for bug20625566_dest@localhost -CREATE USER 'bug20625566_dest'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*64AC67AF30F51749441BE9044F20D83D608F4B33' REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK +CREATE USER 'bug20625566_dest'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '' REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK DROP USER user1@localhost, user1@47.9.9.9, user2, bug20625566_user@localhost, bug20625566_dest@localhost; diff --git a/sql/auth/auth_common.h b/sql/auth/auth_common.h index 2e0590bc9ff4..60e820aac474 100644 --- a/sql/auth/auth_common.h +++ b/sql/auth/auth_common.h @@ -608,13 +608,15 @@ bool acl_check_host(const char *host, const char *ip); /* rewrite CREATE/ALTER/GRANT user */ void mysql_rewrite_create_alter_user(THD *thd, String *rlb, - std::set *extra_users= NULL); + std::set *extra_users= NULL, + bool hide_password_hash= false); void mysql_rewrite_grant(THD *thd, String *rlb); /* sql_user */ void append_user(THD *thd, String *str, LEX_USER *user, bool comma, bool ident); -void append_user_new(THD *thd, String *str, LEX_USER *user, bool comma); +void append_user_new(THD *thd, String *str, LEX_USER *user, bool comma= true, + bool hide_password_hash= false); int check_change_password(THD *thd, const char *host, const char *user, const char *password, size_t password_len); bool change_password(THD *thd, const char *host, const char *user, @@ -679,7 +681,7 @@ ulong get_column_grant(THD *thd, GRANT_INFO *grant, const char *db_name, const char *table_name, const char *field_name); bool mysql_show_grants(THD *thd, LEX_USER *user); -bool mysql_show_create_user(THD *thd, LEX_USER *user); +bool mysql_show_create_user(THD *thd, LEX_USER *user, bool are_both_users_same); bool mysql_revoke_all(THD *thd, List &list); bool sp_revoke_privileges(THD *thd, const char *sp_db, const char *sp_name, bool is_proc); diff --git a/sql/auth/sql_user.cc b/sql/auth/sql_user.cc index 3c813c82f88f..7182655efe77 100644 --- a/sql/auth/sql_user.cc +++ b/sql/auth/sql_user.cc @@ -124,7 +124,8 @@ void append_user(THD *thd, String *str, LEX_USER *user, bool comma= true, } } -void append_user_new(THD *thd, String *str, LEX_USER *user, bool comma= true) +void append_user_new(THD *thd, String *str, LEX_USER *user, bool comma, + bool hide_password_hash) { String from_user(user->user.str, user->user.length, system_charset_info); String from_plugin(user->plugin.str, user->plugin.length, system_charset_info); @@ -174,7 +175,8 @@ void append_user_new(THD *thd, String *str, LEX_USER *user, bool comma= true) if (user->auth.length > 0) { str->append(STRING_WITH_LEN(" AS ")); - if (thd->lex->contains_plaintext_password) + if (thd->lex->contains_plaintext_password || + hide_password_hash) { str->append("'"); str->append(STRING_WITH_LEN("")); @@ -275,7 +277,8 @@ int check_change_password(THD *thd, const char *host, const char *user, 1 Error. */ -bool mysql_show_create_user(THD *thd, LEX_USER *user_name) +bool mysql_show_create_user(THD *thd, LEX_USER *user_name, + bool are_both_users_same) { int error= 0; ACL_USER *acl_user; @@ -289,8 +292,17 @@ bool mysql_show_create_user(THD *thd, LEX_USER *user_name) List field_list; String sql_text(buff,sizeof(buff),system_charset_info); LEX_ALTER alter_info; + bool hide_password_hash= false; DBUG_ENTER("mysql_show_create_user"); + if (are_both_users_same) + { + TABLE_LIST t1; + t1.init_one_table(C_STRING_WITH_LEN("mysql"), C_STRING_WITH_LEN("user"), + "user", TL_READ); + hide_password_hash= check_table_access(thd, SELECT_ACL, &t1, false, + UINT_MAX, true); + } mysql_mutex_lock(&acl_cache->lock); if (!(acl_user= find_acl_user(user_name->host.str, user_name->user.str, TRUE))) @@ -359,7 +371,7 @@ bool mysql_show_create_user(THD *thd, LEX_USER *user_name) } sql_text.length(0); lex->users_list.push_back(user_name); - mysql_rewrite_create_alter_user(thd, &sql_text); + mysql_rewrite_create_alter_user(thd, &sql_text, NULL, hide_password_hash); /* send the result row to client */ protocol->start_row(); protocol->store(sql_text.ptr(),sql_text.length(),sql_text.charset()); diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index d2d4bf73f9d2..03687b247890 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -4208,11 +4208,12 @@ case SQLCOM_PREPARE: case SQLCOM_SHOW_CREATE_USER: { LEX_USER *show_user= get_current_user(thd, lex->grant_user); - if (!(strcmp(thd->security_context()->priv_user().str, show_user->user.str) || - my_strcasecmp(system_charset_info, show_user->host.str, - thd->security_context()->priv_host().str)) || - !check_access(thd, SELECT_ACL, "mysql", NULL, NULL, 1, 0)) - res= mysql_show_create_user(thd, show_user); + Security_context *sctx= thd->security_context(); + bool are_both_users_same= !strcmp(sctx->priv_user().str, show_user->user.str) && + !my_strcasecmp(system_charset_info, show_user->host.str, + sctx->priv_host().str); + if (are_both_users_same || !check_access(thd, SELECT_ACL, "mysql", NULL, NULL, 1, 0)) + res= mysql_show_create_user(thd, show_user, are_both_users_same); break; } #endif diff --git a/sql/sql_rewrite.cc b/sql/sql_rewrite.cc index 9f92ce26207b..4c714d60ec2d 100644 --- a/sql/sql_rewrite.cc +++ b/sql/sql_rewrite.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -355,7 +355,8 @@ static void mysql_rewrite_set(THD *thd, String *rlb) */ void mysql_rewrite_create_alter_user(THD *thd, String *rlb, - std::set *extra_users) + std::set *extra_users, + bool hide_password_hash) { LEX *lex= thd->lex; LEX_USER *user_name, *tmp_user_name; @@ -383,7 +384,7 @@ void mysql_rewrite_create_alter_user(THD *thd, String *rlb, thd->lex->sql_command != SQLCOM_ALTER_USER) append_user(thd, rlb, user_name, comma, true); else - append_user_new(thd, rlb, user_name, comma); + append_user_new(thd, rlb, user_name, comma, hide_password_hash); comma= TRUE; } } From 3c22853d6dbadf7ee162a4933a75ff77d2344484 Mon Sep 17 00:00:00 2001 From: Piotr Obrzut Date: Tue, 10 Apr 2018 17:15:34 +0200 Subject: [PATCH 0808/1221] Bug #27621546 CANNOT UNINSTALL MYSQL SERVER IF MS VC++ REDIST IS REMOVED FIRST Problem ======== When VC++ Redist is removed before MySQL Server is uninstalled the C++ custom action we use in the uninstall process fails due to missing dependency. Analysis: ======== The custom action role was to remove MySQL server service. This functionality no longer works, since service configuration handling got moved to MySQL Installer. Fix: ======== Remove custom action code since it no longer does anything usefull. This will remove the VC++ Redistributable dependency from the server msi installer. --- packaging/WiX/CMakeLists.txt | 7 +- packaging/WiX/ca/CMakeLists.txt | 55 --------- packaging/WiX/ca/CustomAction.cpp | 188 ------------------------------ packaging/WiX/ca/CustomAction.def | 8 -- packaging/WiX/create_msi.cmake.in | 5 +- packaging/WiX/mysql_server.wxs.in | 25 +--- 6 files changed, 3 insertions(+), 285 deletions(-) delete mode 100644 packaging/WiX/ca/CMakeLists.txt delete mode 100644 packaging/WiX/ca/CustomAction.cpp delete mode 100644 packaging/WiX/ca/CustomAction.def diff --git a/packaging/WiX/CMakeLists.txt b/packaging/WiX/CMakeLists.txt index ec10d9a9c2bb..e2bf591966fc 100644 --- a/packaging/WiX/CMakeLists.txt +++ b/packaging/WiX/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -40,8 +40,6 @@ IF(NOT WIX_DIR) RETURN() ENDIF() -ADD_SUBDIRECTORY(ca) - # mysql_server_extra.wxs.in needs DATADIR_MYSQL_FILES and DATADIR_PERFORMANCE_SCHEMA_FILES, i.e # Wix-compatible file lists for ${builddir}\sql\data\{mysql,performance_schema} @@ -100,7 +98,6 @@ ELSE() FILE(APPEND "${CMAKE_CURRENT_BINARY_DIR}/COPYING.rtf" "\n}\n") SET(COPYING_RTF "${CMAKE_CURRENT_BINARY_DIR}/COPYING.rtf") ENDIF() -GET_TARGET_PROPERTY(WIXCA_LOCATION wixca LOCATION) SET(CPACK_WIX_CONFIG ${CMAKE_CURRENT_SOURCE_DIR}/CPackWixConfig.cmake) SET(CPACK_WIX_INCLUDE "${CMAKE_CURRENT_BINARY_DIR}/mysql_server_extra.wxs;${CMAKE_CURRENT_SOURCE_DIR}/custom_ui.wxs") @@ -130,7 +127,6 @@ ADD_CUSTOM_TARGET( ${CONFIG_PARAM} -P ${CMAKE_CURRENT_BINARY_DIR}/create_msi.cmake ) -ADD_DEPENDENCIES(MSI wixca) ADD_CUSTOM_TARGET( MSI_ESSENTIALS @@ -139,5 +135,4 @@ ADD_CUSTOM_TARGET( ${CONFIG_PARAM} -P ${CMAKE_CURRENT_BINARY_DIR}/create_msi.cmake ) -ADD_DEPENDENCIES(MSI_ESSENTIALS wixca) diff --git a/packaging/WiX/ca/CMakeLists.txt b/packaging/WiX/ca/CMakeLists.txt deleted file mode 100644 index 2afa5aff64d0..000000000000 --- a/packaging/WiX/ca/CMakeLists.txt +++ /dev/null @@ -1,55 +0,0 @@ -# Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -IF(CMAKE_SIZEOF_VOID_P EQUAL 8) - SET(WIX_ARCH "x64") -ELSE() - SET(WIX_ARCH "x86") -ENDIF() - -IF(MSVC_VERSION EQUAL 1900) - SET(WIX_MSVC_DIR "VS2015") -ELSEIF(MSVC_VERSION EQUAL 1800) - SET(WIX_MSVC_DIR "VS2013") -ELSEIF(MSVC_VERSION EQUAL 1600) - SET(WIX_MSVC_DIR "VS2010") -ELSE() - # When next VS is out, add the correct version here - MESSAGE(FATAL_ERROR "Unknown VS version") -ENDIF() - -INCLUDE_DIRECTORIES(${WIX_DIR}/../SDK/${WIX_MSVC_DIR}/inc) -LINK_DIRECTORIES(${WIX_DIR}/../SDK/${WIX_MSVC_DIR}/lib/${WIX_ARCH}) - -SET(WIXCA_SOURCES CustomAction.cpp CustomAction.def) - -MESSAGE(STATUS "Searching for wcautil in ${WIX_DIR}/../SDK/${WIX_MSVC_DIR}/lib/${WIX_ARCH}") -MESSAGE(STATUS "Searching for dutil in ${WIX_DIR}/../SDK/${WIX_MSVC_DIR}/lib/${WIX_ARCH}") - -FIND_LIBRARY(WIX_WCAUTIL_LIBRARY - NAMES wcautil - PATHS ${WIX_DIR}/../SDK/${WIX_MSVC_DIR}/lib/${WIX_ARCH}) - -FIND_LIBRARY(WIX_DUTIL_LIBRARY - NAMES dutil - PATHS ${WIX_DIR}/../SDK/${WIX_MSVC_DIR}/lib/${WIX_ARCH}) - -MESSAGE(STATUS "Found: ${WIX_WCAUTIL_LIBRARY}") -MESSAGE(STATUS "Found: ${WIX_DUTIL_LIBRARY}") - -ADD_VERSION_INFO(wixca SHARED WIXCA_SOURCES) -ADD_LIBRARY(wixca SHARED EXCLUDE_FROM_ALL ${WIXCA_SOURCES}) -TARGET_LINK_LIBRARIES(wixca ${WIX_WCAUTIL_LIBRARY} ${WIX_DUTIL_LIBRARY} - msi version ) diff --git a/packaging/WiX/ca/CustomAction.cpp b/packaging/WiX/ca/CustomAction.cpp deleted file mode 100644 index 444e003c3f2c..000000000000 --- a/packaging/WiX/ca/CustomAction.cpp +++ /dev/null @@ -1,188 +0,0 @@ -/* Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. - - 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 */ - -#ifndef UNICODE -#define UNICODE -#endif - -#include -#include -#include -#include -#include -#include -#include - -/* - * Search the registry for a service whose ImagePath starts - * with our install directory. Stop and remove it if requested. - */ -static TCHAR last_service_name[128]; -int remove_service(TCHAR *installdir, int check_only) { - HKEY hKey; - int done = 0; - - if(wcslen(installdir) < 3) { - WcaLog(LOGMSG_STANDARD, "INSTALLDIR is suspiciously short, better not do anything."); - return 0; - } - - if(check_only == 0) { - WcaLog(LOGMSG_STANDARD, "Determining number of matching services..."); - int servicecount = remove_service(installdir, 1); - if(servicecount <= 0) { - WcaLog(LOGMSG_STANDARD, "No services found, not removing anything."); - return 0; - } else if(servicecount == 1) { - TCHAR buf[256]; - swprintf_s(buf, sizeof(buf), TEXT("There is a service called '%ls' set up to run from this installation. Do you wish me to stop and remove that service?"), last_service_name); - int rc = MessageBox(NULL, buf, TEXT("Removing MySQL Server"), MB_ICONQUESTION|MB_YESNOCANCEL|MB_SYSTEMMODAL); - if(rc == IDCANCEL) return -1; - if(rc != IDYES) return 0; - } else if(servicecount > 0) { - TCHAR buf[256]; - swprintf_s(buf, sizeof(buf), TEXT("There appear to be %d services set up to run from this installation. Do you wish me to stop and remove those services?"), servicecount); - int rc = MessageBox(NULL, buf, TEXT("Removing MySQL Server"), MB_ICONQUESTION|MB_YESNOCANCEL|MB_SYSTEMMODAL); - if(rc == IDCANCEL) return -1; - if(rc != IDYES) return 0; - } - } - - if(check_only == -1) check_only = 0; - - WcaLog(LOGMSG_STANDARD, "Looking for service..."); - WcaLog(LOGMSG_STANDARD, "INSTALLDIR = %ls", installdir); - if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, TEXT("SYSTEM\\CurrentControlSet\\services"), 0, KEY_READ, &hKey)==ERROR_SUCCESS) { - DWORD index = 0; - TCHAR keyname[1024]; - DWORD keylen = sizeof(keyname); - FILETIME t; - /* Go through all services in the registry */ - while(RegEnumKeyExW(hKey, index, keyname, &keylen, NULL, NULL, NULL, &t) == ERROR_SUCCESS) { - HKEY hServiceKey = 0; - TCHAR path[1024]; - DWORD pathlen = sizeof(path)-1; - if (RegOpenKeyExW(hKey, keyname, NULL, KEY_READ, &hServiceKey) == ERROR_SUCCESS) { - /* Look at the ImagePath value of each service */ - if (RegQueryValueExW(hServiceKey, TEXT("ImagePath"), NULL, NULL, (LPBYTE)path, &pathlen) == ERROR_SUCCESS) { - path[pathlen] = 0; - TCHAR *p = path; - if(p[0] == '"') p += 1; - /* See if it is similar to our install directory */ - if(wcsncmp(p, installdir, wcslen(installdir)) == 0) { - WcaLog(LOGMSG_STANDARD, "Found service '%ls' with ImagePath '%ls'.", keyname, path); - swprintf_s(last_service_name, sizeof(last_service_name), TEXT("%ls"), keyname); - /* If we are supposed to stop and remove the service... */ - if(!check_only) { - WcaLog(LOGMSG_STANDARD, "Trying to stop the service."); - SC_HANDLE hSCM = NULL; - hSCM = OpenSCManager(NULL, NULL, SC_MANAGER_CONNECT); - if(hSCM != NULL) { - SC_HANDLE hService = NULL; - hService = OpenService(hSCM, keyname, SERVICE_STOP|SERVICE_QUERY_STATUS|DELETE); - if(hService != NULL) { - WcaLog(LOGMSG_STANDARD, "Waiting for the service to stop..."); - SERVICE_STATUS status; - /* Attempt to stop the service */ - if(ControlService(hService, SERVICE_CONTROL_STOP, &status)) { - /* Now wait until it's stopped */ - while("it's one big, mean and cruel world out there") { - if(!QueryServiceStatus(hService, &status)) break; - if(status.dwCurrentState == SERVICE_STOPPED) break; - Sleep(1000); - } - WcaLog(LOGMSG_STANDARD, "Stopped the service."); - } - /* Mark the service for deletion */ - DeleteService(hService); - CloseServiceHandle(hService); - } - CloseServiceHandle(hSCM); - } - } - done++; - } - } - RegCloseKey(hServiceKey); - } - index++; - keylen = sizeof(keyname)-1; - } - RegCloseKey(hKey); - } else { - WcaLog(LOGMSG_STANDARD, "Can't seem to go through the list of installed services in the registry."); - } - return done; -} - -UINT wrap(MSIHANDLE hInstall, char *name, int check_only) { - HRESULT hr = S_OK; - UINT er = ERROR_SUCCESS; - - hr = WcaInitialize(hInstall, name); - ExitOnFailure(hr, "Failed to initialize"); - - WcaLog(LOGMSG_STANDARD, "Initialized."); - - TCHAR INSTALLDIR[1024]; - DWORD INSTALLDIR_size = sizeof(INSTALLDIR); - if(MsiGetPropertyW(hInstall, TEXT("CustomActionData"), INSTALLDIR, &INSTALLDIR_size) == ERROR_SUCCESS) { - int rc = remove_service(INSTALLDIR, check_only); - if(rc < 0) { - er = ERROR_CANCELLED; - } - } else { - er = ERROR_CANT_ACCESS_FILE; - } - -LExit: - return WcaFinalize(er); -} - -UINT __stdcall RemoveServiceNoninteractive(MSIHANDLE hInstall) -{ - return wrap(hInstall, "RemoveServiceNoninteractive", -1); -} - -UINT __stdcall RemoveService(MSIHANDLE hInstall) -{ - return wrap(hInstall, "RemoveService", 0); -} - -UINT __stdcall TestService(MSIHANDLE hInstall) -{ - return wrap(hInstall, "TestService", 1); -} - -/* DllMain - Initialize and cleanup WiX custom action utils */ -extern "C" BOOL WINAPI DllMain( - __in HINSTANCE hInst, - __in ULONG ulReason, - __in LPVOID - ) -{ - switch(ulReason) - { - case DLL_PROCESS_ATTACH: - WcaGlobalInitialize(hInst); - break; - - case DLL_PROCESS_DETACH: - WcaGlobalFinalize(); - break; - } - - return TRUE; -} diff --git a/packaging/WiX/ca/CustomAction.def b/packaging/WiX/ca/CustomAction.def deleted file mode 100644 index 5f5e66300135..000000000000 --- a/packaging/WiX/ca/CustomAction.def +++ /dev/null @@ -1,8 +0,0 @@ -LIBRARY "wixca" -VERSION 1.0 - -EXPORTS - -RemoveService -RemoveServiceNoninteractive -TestService diff --git a/packaging/WiX/create_msi.cmake.in b/packaging/WiX/create_msi.cmake.in index b306c0c70d3a..72914ae6cf1c 100644 --- a/packaging/WiX/create_msi.cmake.in +++ b/packaging/WiX/create_msi.cmake.in @@ -1,4 +1,4 @@ -# Copyright (c) 2010, 2017, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -26,7 +26,6 @@ SET(MINOR_VERSION "@MINOR_VERSION@") SET(PATCH_VERSION "@PATCH_VERSION@") SET(CMAKE_SIZEOF_VOID_P @CMAKE_SIZEOF_VOID_P@) SET(MANUFACTURER "@MANUFACTURER@") -SET(WIXCA_LOCATION "@WIXCA_LOCATION@") SET(COPYING_RTF "@COPYING_RTF@") SET(CPACK_WIX_CONFIG "@CPACK_WIX_CONFIG@") SET(CPACK_WIX_INCLUDE "@CPACK_WIX_INCLUDE@") @@ -193,8 +192,6 @@ ENDFOREACH() IF(CMAKE_INSTALL_CONFIG_NAME) - STRING(REPLACE "${CMAKE_CFG_INTDIR}" "${CMAKE_INSTALL_CONFIG_NAME}" - WIXCA_LOCATION "${WIXCA_LOCATION}") SET(CONFIG_PARAM "-DCMAKE_INSTALL_CONFIG_NAME=${CMAKE_INSTALL_CONFIG_NAME}") ENDIF() diff --git a/packaging/WiX/mysql_server.wxs.in b/packaging/WiX/mysql_server.wxs.in index 7b3cffb5a38e..6e5d2d69486e 100644 --- a/packaging/WiX/mysql_server.wxs.in +++ b/packaging/WiX/mysql_server.wxs.in @@ -2,7 +2,7 @@ xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"> - - - - - - - Installed And Not UPGRADINGPRODUCTCODE And REMOVE="ALL" - Installed And Not UPGRADINGPRODUCTCODE And REMOVE="ALL" - Installed And Not UPGRADINGPRODUCTCODE And REMOVE="ALL" And UILevel>4 - Installed And Not UPGRADINGPRODUCTCODE And REMOVE="ALL" And UILevel<=4 - - From 997b42a2b70273eecbe66e9693ed23d6b14160cd Mon Sep 17 00:00:00 2001 From: Sergei Glushchenko Date: Mon, 23 Apr 2018 19:51:10 +0700 Subject: [PATCH 0809/1221] PS-3958: handle_fatal_signal (sig=11) in subselect_hash_sj_engine::cleanup subselect_hash_sj_engine::cleanup crashed when temporary table was not created. Fix is to avoid crash. Changes in MTR required to allow it to start server with "Encryption can't find master key" error. --- .../include/wait_until_connected_again.inc | 5 ++++- .../innodb/include/temp_table_encrypt.inc | 22 +++++++++++++++++++ .../r/temp_table_encrypt_keyring_file.result | 8 +++++++ ...temp_table_encrypt_keyring_file-master.opt | 3 --- .../temp_table_encrypt_keyring_vault.result | 8 +++++++ sql/item_subselect.cc | 18 +++++++++------ 6 files changed, 53 insertions(+), 11 deletions(-) delete mode 100644 mysql-test/suite/innodb/t/temp_table_encrypt_keyring_file-master.opt diff --git a/mysql-test/include/wait_until_connected_again.inc b/mysql-test/include/wait_until_connected_again.inc index 5dd006a89bf2..6323615ff164 100644 --- a/mysql-test/include/wait_until_connected_again.inc +++ b/mysql-test/include/wait_until_connected_again.inc @@ -14,7 +14,7 @@ while ($mysql_errno) # Strangely enough, the server might return "Too many connections" # while being shutdown, thus 1040 is an "allowed" error # See BUG#36228 - --error 0,1040,1053,2002,2003,2006,2013,1045,ER_SECURE_TRANSPORT_REQUIRED + --error 0,1040,1053,2002,2003,2006,2013,1045,ER_CANNOT_FIND_KEY_IN_KEYRING,ER_SECURE_TRANSPORT_REQUIRED show session status; if ($mysql_errno == 1045){ let mysql_errno=0; @@ -22,6 +22,9 @@ while ($mysql_errno) if ($mysql_errname == ER_SECURE_TRANSPORT_REQUIRED){ let mysql_errno=0; } + if ($mysql_errname == ER_CANNOT_FIND_KEY_IN_KEYRING){ + let mysql_errno=0; + } dec $counter; if (!$counter) { diff --git a/mysql-test/suite/innodb/include/temp_table_encrypt.inc b/mysql-test/suite/innodb/include/temp_table_encrypt.inc index bf412a716bd9..fb9a0e1957c6 100644 --- a/mysql-test/suite/innodb/include/temp_table_encrypt.inc +++ b/mysql-test/suite/innodb/include/temp_table_encrypt.inc @@ -1,5 +1,7 @@ # test temporary tables encryption +call mtr.add_suppression("\\[Error\\] InnoDB: Encryption can't find master key, please check the keyring plugin is loaded."); + --let $MYSQL_DATA_DIR= `select @@datadir` # we need restart to make sure keyring settings are picked up @@ -156,3 +158,23 @@ CREATE TEMPORARY TABLE t01 (a INT) ENGINE=InnoDB; INSERT INTO t01 VALUES (1), (2), (3); DROP TABLE t10; + + + +# +# PS-3958: handle_fatal_signal (sig=11) in subselect_hash_sj_engine::cleanup +# +# Make sure MySQL doesn't crash in subselect_hash_sj_engine::cleanup +# when innodb_temp_tablespace_encrypt=ON but keyring isn't set up +# + +let $restart_hide_args = 0; +let $restart_parameters = restart: --innodb-temp-tablespace-encrypt; +--source include/restart_mysqld.inc + +CREATE TABLE t1(a INT key) ENGINE = MEMORY; +INSERT INTO t1 VALUES (11061); +INSERT INTO t1 VALUES (3); +SET big_tables=1; +--error ER_CANNOT_FIND_KEY_IN_KEYRING +SELECT * FROM t1 WHERE a IN(SELECT MAX(a) FROM t1); diff --git a/mysql-test/suite/innodb/r/temp_table_encrypt_keyring_file.result b/mysql-test/suite/innodb/r/temp_table_encrypt_keyring_file.result index 82daa27e8750..fe5fc26a57e8 100644 --- a/mysql-test/suite/innodb/r/temp_table_encrypt_keyring_file.result +++ b/mysql-test/suite/innodb/r/temp_table_encrypt_keyring_file.result @@ -1,3 +1,4 @@ +call mtr.add_suppression("\\[Error\\] InnoDB: Encryption can't find master key, please check the keyring plugin is loaded."); # restart: CREATE TEMPORARY TABLE t01 (a TEXT) ENGINE=InnoDB; INSERT INTO t01 VALUES ('Lorem ipsum dolor sit amet, consectetur adipiscing elit'); @@ -55,3 +56,10 @@ INSERT INTO t01 VALUES (1), (2), (3); CREATE TEMPORARY TABLE t01 (a INT) ENGINE=InnoDB; INSERT INTO t01 VALUES (1), (2), (3); DROP TABLE t10; +# restart: --innodb-temp-tablespace-encrypt +CREATE TABLE t1(a INT key) ENGINE = MEMORY; +INSERT INTO t1 VALUES (11061); +INSERT INTO t1 VALUES (3); +SET big_tables=1; +SELECT * FROM t1 WHERE a IN(SELECT MAX(a) FROM t1); +ERROR HY000: Can't find master key from keyring, please check keyring plugin is loaded. diff --git a/mysql-test/suite/innodb/t/temp_table_encrypt_keyring_file-master.opt b/mysql-test/suite/innodb/t/temp_table_encrypt_keyring_file-master.opt deleted file mode 100644 index f16c3ca66e87..000000000000 --- a/mysql-test/suite/innodb/t/temp_table_encrypt_keyring_file-master.opt +++ /dev/null @@ -1,3 +0,0 @@ ---early-plugin-load="keyring_file=$KEYRING_PLUGIN" ---loose-keyring_file_data=$MYSQL_TMP_DIR/ts_encrypt_keyring -$KEYRING_PLUGIN_OPT diff --git a/plugin/keyring_vault/tests/mtr/temp_table_encrypt_keyring_vault.result b/plugin/keyring_vault/tests/mtr/temp_table_encrypt_keyring_vault.result index 0029c28f8823..e43e28b1059f 100644 --- a/plugin/keyring_vault/tests/mtr/temp_table_encrypt_keyring_vault.result +++ b/plugin/keyring_vault/tests/mtr/temp_table_encrypt_keyring_vault.result @@ -1,6 +1,7 @@ call mtr.add_suppression("\\[ERROR\\] Function 'keyring_vault' already exists"); call mtr.add_suppression("\\[ERROR\\] Couldn't load plugin named 'keyring_vault' with soname 'keyring_vault.*'."); call mtr.add_suppression("Plugin keyring_vault reported"); +call mtr.add_suppression("\\[Error\\] InnoDB: Encryption can't find master key, please check the keyring plugin is loaded."); # restart: CREATE TEMPORARY TABLE t01 (a TEXT) ENGINE=InnoDB; INSERT INTO t01 VALUES ('Lorem ipsum dolor sit amet, consectetur adipiscing elit'); @@ -58,3 +59,10 @@ INSERT INTO t01 VALUES (1), (2), (3); CREATE TEMPORARY TABLE t01 (a INT) ENGINE=InnoDB; INSERT INTO t01 VALUES (1), (2), (3); DROP TABLE t10; +# restart: --innodb-temp-tablespace-encrypt +CREATE TABLE t1(a INT key) ENGINE = MEMORY; +INSERT INTO t1 VALUES (11061); +INSERT INTO t1 VALUES (3); +SET big_tables=1; +SELECT * FROM t1 WHERE a IN(SELECT MAX(a) FROM t1); +ERROR HY000: Can't find master key from keyring, please check keyring plugin is loaded. diff --git a/sql/item_subselect.cc b/sql/item_subselect.cc index b4bbf1159976..d95136178f9f 100644 --- a/sql/item_subselect.cc +++ b/sql/item_subselect.cc @@ -4013,15 +4013,19 @@ void subselect_hash_sj_engine::cleanup() { DBUG_ENTER("subselect_hash_sj_engine::cleanup"); is_materialized= false; - result->cleanup(); /* Resets the temp table as well. */ + if (result != NULL) + result->cleanup(); /* Resets the temp table as well. */ THD * const thd= item->unit->thd; DEBUG_SYNC(thd, "before_index_end_in_subselect"); - TABLE *const table= tab->table(); - if (table->file->inited) - table->file->ha_index_end(); // Close the scan over the index - free_tmp_table(thd, table); - // Note that tab->qep_cleanup() is not called - tab= NULL; + if (tab != NULL) + { + TABLE *const table= tab->table(); + if (table->file->inited) + table->file->ha_index_end(); // Close the scan over the index + free_tmp_table(thd, table); + // Note that tab->qep_cleanup() is not called + tab= NULL; + } materialize_engine->cleanup(); DBUG_VOID_RETURN; } From f098f3202ccc5b215e4130ce0557764c2a8a5021 Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Wed, 2 May 2018 12:42:54 +0530 Subject: [PATCH 0810/1221] From f0d3f1120d346b5ddecbb32015168dfcc6badc27 Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Tue, 1 May 2018 12:43:10 +0200 Subject: [PATCH 0811/1221] PS-3803: Crash on AIO failure caused by uninitialized data members The count and pending data members weren't always initialized, which caused crashes when the AIO object was destructed after a failure. --- storage/innobase/os/os0file.cc | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/storage/innobase/os/os0file.cc b/storage/innobase/os/os0file.cc index 43963ccb53b9..1de0ed445739 100644 --- a/storage/innobase/os/os0file.cc +++ b/storage/innobase/os/os0file.cc @@ -2750,6 +2750,8 @@ AIO::os_aio_dispatch_read_array_submit_low( if (acquire_mutex) array->acquire(); /* Submit aio requests buffered on all segments. */ + ut_ad(array->m_pending); + ut_ad(array->m_count); for (ulint i = 0; i < array->m_n_segments; i++) { const int count = array->m_count[i]; int offset = 0; @@ -2841,9 +2843,11 @@ AIO::linux_dispatch(Slot* slot, bool should_buffer) in the pending array consecutively as they come. m_count[i] records the number of buffered aio requests in the ith segment.*/ + ut_ad(m_count); ulint& count = m_count[io_ctx_index]; ut_ad(count != slots_per_segment); ulint n = io_ctx_index * slots_per_segment + count; + ut_ad(m_pending); m_pending[n] = iocb; ++count; if (count == slots_per_segment) { @@ -6571,6 +6575,8 @@ AIO::AIO( # ifdef LINUX_NATIVE_AIO ,m_aio_ctx(), m_events(m_slots.size()) + ,m_pending(NULL) + ,m_count(NULL) # elif defined(_WIN32) ,m_handles() # endif /* LINUX_NATIVE_AIO */ @@ -6753,10 +6759,14 @@ AIO::~AIO() m_events.clear(); ut_free(m_aio_ctx); #ifdef UNIV_DEBUG - for (size_t idx = 0; idx < m_slots.size(); ++idx) - ut_ad(m_pending[idx] == NULL); - for (size_t idx = 0; idx < m_n_segments; ++idx) - ut_ad(m_count[idx] == 0); + if (m_pending) { + for (size_t idx = 0; idx < m_slots.size(); ++idx) + ut_ad(m_pending[idx] == NULL); + } + if (m_count) { + for (size_t idx = 0; idx < m_n_segments; ++idx) + ut_ad(m_count[idx] == 0); + } #endif ut_free(m_pending); ut_free(m_count); From 4525228180566f2866c7fb88e69ead17a146c8ff Mon Sep 17 00:00:00 2001 From: Neha Kumari Date: Wed, 2 May 2018 18:16:59 +0530 Subject: [PATCH 0812/1221] Bug#26450129:DEAD BRANCH IN SEARCH_KEY_IN_TABLE() Post-push fix: Problem: The test was failing with non-debug mode as the status variable Slave_rows_last_search_algorithm_used is not defined in non-debug mode. Fix: Run the test only in debug mode. --- mysql-test/suite/rpl/t/rpl_different_index_master_slave.test | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/mysql-test/suite/rpl/t/rpl_different_index_master_slave.test b/mysql-test/suite/rpl/t/rpl_different_index_master_slave.test index 45146114f05e..ccac9ba64b39 100644 --- a/mysql-test/suite/rpl/t/rpl_different_index_master_slave.test +++ b/mysql-test/suite/rpl/t/rpl_different_index_master_slave.test @@ -9,6 +9,10 @@ # ========= Reference ========== # Bug#26450129:DEAD BRANCH IN SEARCH_KEY_IN_TABLE() +# The status variable Slave_rows_last_search_algorithm_used is defined +# only in Debug mode, running this test in non-debug mode will cause +# assert failure. +--source include/have_debug.inc --source include/have_binlog_format_row.inc --let $rpl_skip_start_slave = 1 --source include/master-slave.inc From a09e56b0af28481c4dcf7f84c3fa85f363354b2e Mon Sep 17 00:00:00 2001 From: Shishir Jaiswal Date: Thu, 3 May 2018 13:59:37 +0530 Subject: [PATCH 0813/1221] Bug#24911117 - SUPER PRIVILEGE NO LONGER REQUIRED TO DISPLAY PASSWORD HASH Postpush fix - Added documentation for newly added params for doxygen. --- sql/auth/sql_user.cc | 5 +++-- sql/sql_rewrite.cc | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/sql/auth/sql_user.cc b/sql/auth/sql_user.cc index 7182655efe77..18d8d09fcde3 100644 --- a/sql/auth/sql_user.cc +++ b/sql/auth/sql_user.cc @@ -269,8 +269,9 @@ int check_change_password(THD *thd, const char *host, const char *user, /** Auxiliary function for constructing CREATE USER sql for a given user. - @param thd Thread context - @param user_name user for which the sql should be constructed. + @param thd Thread context + @param user_name user for which the sql should be constructed. + @param are_both_users_same If the command is issued for self or not. @retval 0 OK. diff --git a/sql/sql_rewrite.cc b/sql/sql_rewrite.cc index 4c714d60ec2d..bf76641cf269 100644 --- a/sql/sql_rewrite.cc +++ b/sql/sql_rewrite.cc @@ -350,8 +350,9 @@ static void mysql_rewrite_set(THD *thd, String *rlb) /** Rewrite CREATE/ALTER USER statement. - @param thd The THD to rewrite for. - @param rlb An empty String object to put the rewritten query in. + @param thd The THD to rewrite for. + @param rlb An empty String object to put the rewritten query in. + @param hide_password_hash If password hash has to be shown as or not. */ void mysql_rewrite_create_alter_user(THD *thd, String *rlb, From c58c6f8f66ddd0357ecd0c99646aa6bf1dae49c8 Mon Sep 17 00:00:00 2001 From: Aakanksha Verma Date: Fri, 4 May 2018 15:53:13 +0530 Subject: [PATCH 0814/1221] Bug #27155294 MAX_EXECUTION_TIME NOT INTERUPTED WITH FULLTEXT SEARCH USING MECAB PROBLEM While running select with optimizer hint -> max_execution_time to return the count of rows using the column that is primary key,the query doesn't get interrupted after the max_execution_time is reached. Optimizer does some optimization to fetch count of rows without actually searchin of rows if the column in count expression can never be NULL . Since there is no trx interruption check inside fts optimize query the query isn't interrupted. FIX Add an interruption check in the long running fts_ast_visit function so that query gets interrupted as expected. Reviewed by: Jimmy Yang RB: 19490 --- .../suite/innodb/r/fts_exec_interrupt.result | 21 +++++++++++ .../suite/innodb/t/fts_exec_interrupt.test | 37 +++++++++++++++++++ storage/innobase/fts/fts0ast.cc | 8 +++- storage/innobase/fts/fts0que.cc | 12 +++++- storage/innobase/include/fts0ast.h | 3 +- 5 files changed, 78 insertions(+), 3 deletions(-) create mode 100644 mysql-test/suite/innodb/r/fts_exec_interrupt.result create mode 100644 mysql-test/suite/innodb/t/fts_exec_interrupt.test diff --git a/mysql-test/suite/innodb/r/fts_exec_interrupt.result b/mysql-test/suite/innodb/r/fts_exec_interrupt.result new file mode 100644 index 000000000000..cf4968ea86f7 --- /dev/null +++ b/mysql-test/suite/innodb/r/fts_exec_interrupt.result @@ -0,0 +1,21 @@ +CREATE TABLE `fttest04` ( +`id` int(11) NOT NULL AUTO_INCREMENT, +`str` varchar(300) DEFAULT NULL, +`str2` mediumtext, +PRIMARY KEY (`id`), +FULLTEXT KEY `idx` (`str`,`str2`) +) ENGINE=InnoDB AUTO_INCREMENT=65520 DEFAULT CHARSET=utf8mb4; +CREATE PROCEDURE load_test_data() +BEGIN +DECLARE cnt INTEGER UNSIGNED DEFAULT 1; +WHILE (cnt <= 600220) DO +INSERT INTO fttest04(str, str2) VALUES('徳島県','徳島県'); +SET cnt= cnt+1; +END WHILE; +END| +CALL load_test_data(); +DROP PROCEDURE load_test_data; +SELECT /*+ max_execution_time(2000) */ COUNT(id) FROM fttest04 WHERE +MATCH (str,str2) AGAINST ('徳島県' IN BOOLEAN MODE) ; +ERROR HY000: Query execution was interrupted, maximum statement execution time exceeded +DROP TABLE fttest04; diff --git a/mysql-test/suite/innodb/t/fts_exec_interrupt.test b/mysql-test/suite/innodb/t/fts_exec_interrupt.test new file mode 100644 index 000000000000..0c9b25a0efc6 --- /dev/null +++ b/mysql-test/suite/innodb/t/fts_exec_interrupt.test @@ -0,0 +1,37 @@ +--source include/not_embedded.inc +--source include/have_statement_timeout.inc +--source include/have_query_cache.inc +--source include/have_debug.inc +--source include/not_valgrind.inc +--source include/big_test.inc + +CREATE TABLE `fttest04` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `str` varchar(300) DEFAULT NULL, + `str2` mediumtext, + PRIMARY KEY (`id`), + FULLTEXT KEY `idx` (`str`,`str2`) +) ENGINE=InnoDB AUTO_INCREMENT=65520 DEFAULT CHARSET=utf8mb4; + +--disable_result_log +DELIMITER |; +CREATE PROCEDURE load_test_data() +BEGIN + +DECLARE cnt INTEGER UNSIGNED DEFAULT 1; + WHILE (cnt <= 600220) DO + INSERT INTO fttest04(str, str2) VALUES('徳島県','徳島県'); + SET cnt= cnt+1; + END WHILE; +END| +DELIMITER ;| + +CALL load_test_data(); +DROP PROCEDURE load_test_data; + +--enable_result_log +--error ER_QUERY_TIMEOUT +SELECT /*+ max_execution_time(2000) */ COUNT(id) FROM fttest04 WHERE +MATCH (str,str2) AGAINST ('徳島県' IN BOOLEAN MODE) ; + +DROP TABLE fttest04; diff --git a/storage/innobase/fts/fts0ast.cc b/storage/innobase/fts/fts0ast.cc index 8c542aab2899..8e448501d865 100644 --- a/storage/innobase/fts/fts0ast.cc +++ b/storage/innobase/fts/fts0ast.cc @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2007, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2007, 2018, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -28,6 +28,7 @@ Created 2007/3/16 Sunny Bains. #include "fts0ast.h" #include "fts0pars.h" #include "fts0fts.h" +#include "row0sel.h" /* The FTS ast visit pass. */ enum fts_ast_visit_pass_t { @@ -590,6 +591,7 @@ fts_ast_visit( bool revisit = false; bool will_be_ignored = false; fts_ast_visit_pass_t visit_pass = FTS_PASS_FIRST; + trx_t* trx = node->trx; start_node = node->list.head; @@ -688,6 +690,10 @@ fts_ast_visit( } } + if (trx_is_interrupted(trx)) { + return (DB_INTERRUPTED); + } + if (revisit) { /* Exist pass processes the skipped FTS_EXIST operation. */ for (node = start_node; diff --git a/storage/innobase/fts/fts0que.cc b/storage/innobase/fts/fts0que.cc index adc6c44d7d08..3cfba3ecc84c 100644 --- a/storage/innobase/fts/fts0que.cc +++ b/storage/innobase/fts/fts0que.cc @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2007, 2017, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2007, 2018, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -4085,6 +4085,7 @@ fts_query( /* Parse the input query string. */ if (fts_query_parse(&query, lc_query_str, result_len)) { fts_ast_node_t* ast = query.root; + ast->trx = trx; /* Optimize query to check if it's a single term */ fts_query_can_optimize(&query, flags); @@ -4111,6 +4112,10 @@ fts_query( query.error = fts_ast_visit( FTS_NONE, ast, fts_query_visitor, &query, &will_be_ignored); + if (query.error == DB_INTERRUPTED) { + error = DB_INTERRUPTED; + goto func_exit; + } /* If query expansion is requested, extend the search with first search pass result */ @@ -4137,6 +4142,11 @@ fts_query( ut_zalloc_nokey(sizeof(**result))); } + if (trx_is_interrupted(trx)) { + error = DB_INTERRUPTED; + goto func_exit; + } + ut_free(lc_query_str); if (fts_enable_diag_print && (*result)) { diff --git a/storage/innobase/include/fts0ast.h b/storage/innobase/include/fts0ast.h index 87b7cf709c85..fc088ed30380 100644 --- a/storage/innobase/include/fts0ast.h +++ b/storage/innobase/include/fts0ast.h @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2007, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2007, 2018, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -323,6 +323,7 @@ struct fts_ast_node_t { fts_ast_node_t* next_alloc; /*!< For tracking allocations */ bool visited; /*!< whether this node is already processed */ + trx_t* trx; /* Used by plugin parser */ fts_ast_node_t* up_node; /*!< Direct up node */ bool go_up; /*!< Flag if go one level up */ From 1df5d30dcca350743e4751cddc571bad8b1b8a84 Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Thu, 3 May 2018 12:44:33 +0200 Subject: [PATCH 0815/1221] Fix compile warning sql/filesort_utils.h: In member function virtual void filesort_buffer_unittest::FileSortBufferTest::TearDown(): sql/filesort_utils.h:251:24: warning: .Filesort_buffer::m_sort_length is used uninitialized in this function [-Wuninitialized] Change-Id: If334119a3a336a601187f58bfa2a2ad9d0bef21c --- sql/filesort_utils.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sql/filesort_utils.h b/sql/filesort_utils.h index 1ae027199c4c..968bfa790dec 100644 --- a/sql/filesort_utils.h +++ b/sql/filesort_utils.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -84,6 +84,7 @@ class Filesort_buffer m_next_rec_ptr(NULL), m_rawmem(NULL), m_record_pointers(NULL), m_sort_keys(NULL), m_num_records(0), m_record_length(0), + m_sort_length(0), m_size_in_bytes(0), m_idx(0) {} From 7cb6282ff170247f2c82fe412d60a746452ed710 Mon Sep 17 00:00:00 2001 From: Dima Date: Fri, 4 May 2018 01:53:35 +0300 Subject: [PATCH 0816/1221] Fix for DOC-668 documenting use of newer openssl library --- doc/source/installation.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/source/installation.rst b/doc/source/installation.rst index fef235bbe02e..4b729fc4b2e3 100644 --- a/doc/source/installation.rst +++ b/doc/source/installation.rst @@ -39,8 +39,9 @@ Installing |Percona Server| from a Binary Tarball |Percona Server| offers multiple tarballs depending on the *OpenSSL* library available in the distribution: - * ssl100 - for all *Debian/Ubuntu* versions (``libssl.so.1.0.0 => /usr/lib/x86_64-linux-gnu/libssl.so.1.0.0 (0x00007f2e389a5000)``); + * ssl100 - for *Debian* prior to 9 and *Ubuntu* prior to 14.04 versions (``libssl.so.1.0.0 => /usr/lib/x86_64-linux-gnu/libssl.so.1.0.0 (0x00007f2e389a5000)``); * ssl101 - for *CentOS* 6 and *CentOS* 7 (``libssl.so.10 => /usr/lib64/libssl.so.10 (0x00007facbe8c4000)``); + * ssl102 - for *Debian* 9 and *Ubuntu* versions starting from 14.04 (``libssl.so.1.1 => /usr/lib/libssl.so.1.1 (0x00007f5e57397000)``; You can download the binary tarballs from the ``Linux - Generic`` `section `_ on the download page. From e887bf50df9d6848faf2243e247cac65506273ab Mon Sep 17 00:00:00 2001 From: Harin Vadodaria Date: Fri, 4 May 2018 11:17:23 +0200 Subject: [PATCH 0817/1221] Bug#27761057: -DWITH_KEYRING_TEST=ON PRODUCES UNEXPECTED COMPILER BUILD FAILURE Description: Removed test file it was obsolite. --- plugin/keyring/CMakeLists.txt | 4 - plugin/keyring/keyring-test/CMakeLists.txt | 26 -- plugin/keyring/keyring-test/keyring-test.cc | 311 -------------------- 3 files changed, 341 deletions(-) delete mode 100644 plugin/keyring/keyring-test/CMakeLists.txt delete mode 100644 plugin/keyring/keyring-test/keyring-test.cc diff --git a/plugin/keyring/CMakeLists.txt b/plugin/keyring/CMakeLists.txt index 466958ebb221..b4712a691a9b 100644 --- a/plugin/keyring/CMakeLists.txt +++ b/plugin/keyring/CMakeLists.txt @@ -40,10 +40,6 @@ IF(SSL_DEFINES) ADD_DEFINITIONS(${SSL_DEFINES}) ENDIF() -IF(WITH_KEYRING_TEST) - ADD_SUBDIRECTORY(keyring-test) -ENDIF() - IF(HAVE_DLOPEN) SET(DYNLIB_EXTENSION "so") SET_TARGET_PROPERTIES(keyring_file diff --git a/plugin/keyring/keyring-test/CMakeLists.txt b/plugin/keyring/keyring-test/CMakeLists.txt deleted file mode 100644 index 715713184d54..000000000000 --- a/plugin/keyring/keyring-test/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. -# -# 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 - -ADD_EXECUTABLE(keyring-test - ./keyring-test.cc - ../common/keyring_key.cc - ../common/keys_container.cc - ../common/keyring_impl.cc - ../buffered_file_io.cc - ../hash_to_buffer_serializer.cc - ../buffer.cc - ../file_io.cc) -TARGET_LINK_LIBRARIES(keyring-test strings dbug regex mysys sql) -TARGET_LINK_LIBRARIES(keyring-test binlog rpl master slave) diff --git a/plugin/keyring/keyring-test/keyring-test.cc b/plugin/keyring/keyring-test/keyring-test.cc deleted file mode 100644 index 60227a2cda8b..000000000000 --- a/plugin/keyring/keyring-test/keyring-test.cc +++ /dev/null @@ -1,311 +0,0 @@ -/* Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. - - 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 */ - -#undef HAVE_PSI_INTERFACE -#include -#include -#include -#include -#include "../keyring.cc" - -my_bool random_keys= FALSE; -my_bool verbose; -my_bool generate_random_keys_data= FALSE; -int number_of_keys_added= 0; -int number_of_keys_fetched= 0; -int number_of_keys_removed= 0; -int number_of_keys_generated= 0; -int max_generated_key_length= 0; -int number_of_keys_to_generate= 0; - -mysql_mutex_t LOCK_verbose; - -void* generate(void *arg) -{ - my_thread_init(); - int number_of_keys_to_generate= *((int *)arg); - - for (uint i= 0; number_of_keys_generated < number_of_keys_to_generate; i= (i+1) % number_of_keys_to_generate) - { - char key_id[12]; //Key#1000000\0 - char key_type[16]; //KeyType#1000000\0 - char user[13]; //User#1000000\0 - size_t key_len= rand() % 100; - - int key_nr= random_keys ? rand() % number_of_keys_to_generate : i; - sprintf(key_id, "Key#%d", key_nr); - strcpy(key_type, "AES"); - sprintf(user, "User#%d", key_nr); - - my_bool result= FALSE; - - if((result= mysql_key_generate(reinterpret_cast(key_id), - reinterpret_cast(key_type), - reinterpret_cast(user), key_len)) == FALSE) - my_atomic_add32(&number_of_keys_generated,1); - - if (verbose) - { - mysql_mutex_lock(&LOCK_verbose); - std::cout << "Key generate " << key_id << ' ' << key_type << ' ' << user << ' '; - if(result==FALSE) - std::cout << "successfull" << std::endl; - else - std::cout << "failed" << std::endl; - mysql_mutex_unlock(&LOCK_verbose); - } - } - my_thread_end(); - return NULL; -} - -void* store(void *arg) -{ - my_thread_init(); - int number_of_keys_to_store= *((int *)arg); - - for (uint i= 0; number_of_keys_added < number_of_keys_to_store; i= (i+1) % number_of_keys_to_store) - { - char key_id[12]; //Key#1000000\0 - char key_type[16]; //KeyType#1000000\0 - char user[13]; //User#1000000\0 - uchar key_stack[]="KEeeeeeeeEEEEEeeeeEEEEEEEEEEEEY!"; - uchar* key; - size_t key_len;//= rand() % 100; - if (generate_random_keys_data) - { - key_len= rand() % max_generated_key_length; - key= (uchar*)my_malloc(keyring::key_memory_KEYRING, key_len, MYF(0)); - assert(key != NULL); - assert(my_rand_buffer(key, key_len) == FALSE); - } - else - { - key= key_stack; - key_len= strlen(reinterpret_cast(key))+1; - } - - int key_nr= random_keys ? rand() % number_of_keys_to_store : i; - sprintf(key_id, "Key#%d", key_nr); - strcpy(key_type, "AES"); - sprintf(user, "User#%d", key_nr); - - my_bool result= FALSE; - - if((result= mysql_key_store(reinterpret_cast(key_id), - reinterpret_cast(key_type), - reinterpret_cast(user), key, key_len)) == FALSE) - my_atomic_add32(&number_of_keys_added,1); - - if (generate_random_keys_data) - my_free(key); - - if (verbose) - { - mysql_mutex_lock(&LOCK_verbose); - std::cout << "Key store " << key_id << ' ' << key_type << ' ' << user << ' '; - if(result==FALSE) - std::cout << "successfull" << std::endl; - else - std::cout << "failed" << std::endl; - mysql_mutex_unlock(&LOCK_verbose); - } - } - my_thread_end(); - return NULL; -} - -void* fetch(void *arg) -{ - my_thread_init(); - int number_of_keys_to_fetch= *((int *)arg); - - for (uint i= 0; number_of_keys_fetched < number_of_keys_to_fetch; i= (i+1) % number_of_keys_to_fetch) - { - char key_id[12]; //Key#1000000\0 - char *key_type= NULL; - char user[13]; //User#1000000\0 - char key[]="KEeeeeeeeEEEEEeeeeEEEEEEEEEEEEY!"; - - int key_nr= random_keys ? rand() % number_of_keys_to_fetch : i; - sprintf(key_id, "Key#%d", key_nr); - sprintf(user, "User#%d", key_nr); - - void *key_data= NULL; - size_t key_len= 0; - - my_bool result= TRUE; - - if((result= mysql_key_fetch(reinterpret_cast(key_id), &key_type, - reinterpret_cast(user), &key_data, - &key_len)) == FALSE && key_data != NULL) - { - my_atomic_add32(&number_of_keys_fetched,1); - if (generate_random_keys_data == FALSE && number_of_keys_to_generate == 0) - { - assert(key_len == strlen(key)+1); - assert(strcmp(reinterpret_cast(reinterpret_cast(key_data)), key) == 0); - } - my_free(key_data); - } - - if (verbose) - { - mysql_mutex_lock(&LOCK_verbose); - std::cout << "Key fetch " << key_id << ' '; - if(key_type != NULL) - std::cout << key_type << ' '; - std::cout << user << ' '; - if(result==FALSE) - std::cout << "successfull" << std::endl; - else - std::cout << "failed" << std::endl; - mysql_mutex_unlock(&LOCK_verbose); - } - if(key_type != NULL) - my_free(key_type); - } - my_thread_end(); - return NULL; -} - - -void* remove(void *arg) -{ - my_thread_init(); - int number_of_keys_to_remove= *((int *)arg); - - for (uint i= 0; number_of_keys_removed < number_of_keys_to_remove; i= (i+1) % number_of_keys_to_remove) - { - char key_id[12]; //Key#1000000\0 - char user[13]; //User#1000000\0 - - int key_nr= random_keys ? rand() % number_of_keys_to_remove : i; - sprintf(key_id, "Key#%d", key_nr); - sprintf(user, "User#%d", key_nr); - - my_bool result= TRUE; - - if((result= mysql_key_remove(reinterpret_cast(key_id), - reinterpret_cast(user))) == FALSE) - my_atomic_add32(&number_of_keys_removed,1); - - if (verbose) - { - mysql_mutex_lock(&LOCK_verbose); - std::cout << "Key remove " << key_id << ' ' << user << ' '; - if(result==FALSE) - std::cout << "successfull" << std::endl; - else - std::cout << "failed" << std::endl; - mysql_mutex_unlock(&LOCK_verbose); - } - } - my_thread_end(); - return NULL; -} - - - -int main(int argc, char **argv) -{ - my_thread_global_init(); - mysql_mutex_init(0, &LOCK_verbose, MY_MUTEX_INIT_FAST); - - keyring::system_charset_info= &my_charset_utf8_general_ci; - srand(time(NULL)); - unsigned long long threads_store_number= 0; - unsigned long long threads_remove_number= 0; - unsigned long long threads_fetch_number= 0; - unsigned long long threads_generate_key_number= 0; - int number_of_keys_to_store= 0; - int number_of_keys_to_fetch= 0; - int number_of_keys_to_remove= 0; - my_thread_handle *otid; - unsigned long long i; - void *tret; - - if (argc != 12) - { - fprintf(stderr, "Usage: keyring_test " - " " - " " - " " - " \n"); - return -1; - } - - my_init(); - - keyring_file_data_value= (char*)my_malloc(PSI_NOT_INSTRUMENTED, strlen(argv[1])+1, MYF(0)); - strcpy(keyring_file_data_value, argv[1]); - threads_store_number= atoll(argv[2]) ; - threads_remove_number= atoll(argv[3]) ; - threads_fetch_number= atoll(argv[4]); - threads_generate_key_number= atoll(argv[5]); - number_of_keys_to_store= atoi(argv[6]); - number_of_keys_to_fetch= atoi(argv[7]); - number_of_keys_to_generate= atoi(argv[8]); - max_generated_key_length= atoi(argv[9]); - random_keys= atoi(argv[10]); - verbose= atoi(argv[11]); - number_of_keys_to_remove= number_of_keys_to_store + number_of_keys_to_generate; - - remove(keyring_file_data_value);//just to be sure there are no leftovers - - unsigned long long threads_number= threads_store_number + threads_fetch_number + threads_remove_number + - threads_generate_key_number; - - if (!(otid= (my_thread_handle*) my_malloc(PSI_NOT_INSTRUMENTED, - threads_number * sizeof(*otid), MYF(0)))) - return -2; - - st_plugin_int plugin_info; - plugin_info.name.str= const_cast("keyring_plugin"); - plugin_info.name.length= strlen("keyring_plugin"); - - if (keyring_init(&plugin_info)) - return 1; - - for (i= 0; i < threads_store_number; i++) - if (mysql_thread_create(PSI_NOT_INSTRUMENTED, &otid[i], NULL, store, (void *) &number_of_keys_to_store)) - return 2; - - for (i= 0; i < threads_fetch_number; i++) - if (mysql_thread_create(PSI_NOT_INSTRUMENTED, &otid[threads_store_number + i], NULL, fetch, (void *) &number_of_keys_to_fetch)) - return 3; - - for (i= 0; i < threads_remove_number; i++) - if (mysql_thread_create(PSI_NOT_INSTRUMENTED, &otid[threads_store_number + threads_fetch_number + i], NULL, remove, (void *) &number_of_keys_to_remove)) - return 4; - - for (i= 0; i < threads_generate_key_number; i++) - if (mysql_thread_create(PSI_NOT_INSTRUMENTED, &otid[threads_store_number + threads_fetch_number + threads_remove_number + i], - NULL, generate, (void *) &number_of_keys_to_generate)) - return 6; - - for (i= 0; i < threads_number; i++) - my_thread_join(&otid[i], &tret); - - remove(keyring_file_data_value); - my_free(keyring_file_data_value); - my_free(otid); - mysql_mutex_destroy(&LOCK_verbose); - - keyring_deinit(NULL); - my_end(0); - - return 0; -} From 423c6d14e8da33c0a505a64311b2c838a7c46dbf Mon Sep 17 00:00:00 2001 From: Rahul Malik Date: Fri, 4 May 2018 18:25:50 +0530 Subject: [PATCH 0818/1221] Bug#26876594 MYSQL CRASH:INNODB_API_DISABLE_ROWLOCK=ON&DAEMON_MEMCACHED_R_BATCH_SIZE =1 PROBLEM DESCRIPTION -------------------- Start the server with innodb_api_disable_rowlock = ON and daemon_memcached_r_batch_size = 1 Initiate a read from the memcached ( get query) This read starts a transaction through API and passes auto_commit as true since daemon_memcached_r_batch_size is 1. When innodb_api_disable_rowlock=ON API proceed to create table lock lock_table_create expects trx_is_autocommit_non_locking to fail, but this transaction has auto-commit on and is a nonlocking transaction, so the assert fails. So it can be concluded that the innodb_api_disable_rowlock=ON is incompatible with auto-commit. FIX --- Pass auto-commit as false when innodb_api_disable_rowlock = ON and daemon_memcached_r_batch_size = 1 REVIEWED BY: Jimmy Yang RB: 19403 --- .../innodb_memcache/src/innodb_engine.c | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/plugin/innodb_memcached/innodb_memcache/src/innodb_engine.c b/plugin/innodb_memcached/innodb_memcache/src/innodb_engine.c index 51d005273b66..1d63224f0be0 100644 --- a/plugin/innodb_memcached/innodb_memcache/src/innodb_engine.c +++ b/plugin/innodb_memcached/innodb_memcache/src/innodb_engine.c @@ -1,6 +1,6 @@ /*********************************************************************** -Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved. +Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -1135,6 +1135,9 @@ innodb_conn_init( } } } else { + bool auto_commit = (engine->read_batch_size == 1 && + !(engine->cfg_status & IB_CFG_DISABLE_ROWLOCK)) ? true : false; + assert(conn_option == CONN_MODE_READ); if (!read_crsr) { @@ -1142,15 +1145,12 @@ innodb_conn_init( /* This is read operation, start a trx with "read_write" parameter set to false */ conn_data->crsr_trx = ib_cb_trx_begin( - engine->trx_level, false, - engine->read_batch_size == 1); + engine->trx_level, false, auto_commit); trx_updated = true; } else { ib_cb_trx_start(conn_data->crsr_trx, engine->trx_level, - false, - engine->read_batch_size == 1, - NULL); + false, auto_commit, NULL); } err = innodb_api_begin( @@ -1183,8 +1183,7 @@ innodb_conn_init( /* This is read operation, start a trx with "read_write" parameter set to false */ conn_data->crsr_trx = ib_cb_trx_begin( - engine->trx_level, false, - engine->read_batch_size == 1); + engine->trx_level, false, auto_commit); trx_updated = true; @@ -1230,8 +1229,7 @@ innodb_conn_init( with "read_write" parameter set to false */ ib_cb_trx_start(conn_data->crsr_trx, engine->trx_level, - false, - engine->read_batch_size == 1, + false, auto_commit, NULL); ib_cb_cursor_stmt_begin(conn_data->read_crsr); From 9ade582365def08326b8b619c97f346b977f5551 Mon Sep 17 00:00:00 2001 From: Marek Szymczak Date: Mon, 7 May 2018 14:07:12 +0200 Subject: [PATCH 0819/1221] Bug#27265205 CROSS_PLUGIN_TEST TEST SUITE SEEMS BROKEN Problem ======= cross_plugin_test was simply failing, when enabled on pb2. Analysis ======== cross_plugin_test suite contains tests that uses scripts from audit_log and firewall plugin test suites. Tests were passing correctly on the local machine, but failed on pb2. The reason of the failure was invalid path of the audit_log and firewall scripts. We have to consider two cases: 1. Local environment - Both test suites are placed in the following directories: in-ternal\plugin\audit_log\tests\mtr in-ternal\plugin\firewall\tests\mtr When the cross_plugin_test test uses audit log or firewall script file, it simply includes it: --source ../../../../audit_log/tests/mtr/inc/audit_log_filter_install.inc --source ../../../../firewall/tests/mtr/inc/install_fw_plugin.inc 2. pb2 case audit log and firewall suites are copied into following directories: mysql-test\suite\audit_log mysql-test\suite\firewall When the cross_plugin_test test uses audit log or firewall script file, it simply includes it: --source ../../audit_log/inc/audit_log_filter_install.inc --source ../../firewall/inc/install_fw_plugin.inc Fix === check_dir_pos.inc file has been introduced that checks, which path is in use. cross_plugin_test can then just use and variables to resolve the path: --source ../inc/check_dir_pos.inc --echo ## Install both plugins --source /../../audit_log//inc/audit_log_filter_install.inc --source /../../firewall//inc/install_fw_plugin.inc Reviewed-by =========== Pavan Naik --- mysql-test/collections/mysql-5.7-stage.push | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mysql-test/collections/mysql-5.7-stage.push b/mysql-test/collections/mysql-5.7-stage.push index 417394250c1b..c359b47e1755 100644 --- a/mysql-test/collections/mysql-5.7-stage.push +++ b/mysql-test/collections/mysql-5.7-stage.push @@ -42,3 +42,5 @@ perl mysql-test-run.pl --timer --force --comment=memcached --vardir=var-memcach perl mysql-test-run.pl --debug-server --timer --force --parallel=auto --comment=test_service_sql_api --vardir=var-test_service_sql_api --suite=test_service_sql_api --experimental=collections/default.experimental --skip-ndb # test x plugin perl mysql-test-run.pl --debug-server --timer --force --parallel=auto --comment=x --vardir=var-x --suite=x --experimental=collections/default.experimental +# cross_plugin_test +perl mysql-test-run.pl --debug-server --timer --force --parallel=auto --comment=cross_plugin_test --vardir=var-cross_plugin_test --suite=cross_plugin_test --experimental=collections/default.experimental From 94d0e8f02f2122435f447feb34247426148d1024 Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Mon, 30 Apr 2018 10:13:03 +0200 Subject: [PATCH 0820/1221] PS-3885: Revert "Merge branch 'bug1689489-5.6' into bug1689489-5.7" This reverts commit f7df43021e7d979790d4936ed7d824899ba615c4, reversing changes made to 2d7a1dd02ee0a72bd8c164e5c88678b96ee74731. 5.7 added the option to change masters with only the IO thread stopped, and keeping the slave thread running. In this case, relay_master_log_name and master_log_name could be different, which isn't an error. This assertion was originally added to catch an RPL bug failure. More details: * WL#6120: https://dev.mysql.com/worklog/task/?id=6120 * Original Percona issue: https://jira.percona.com/browse/PS-3696 --- .../suite/rpl/r/percona_bug_ps3885.result | 19 +++++++++++++++ mysql-test/suite/rpl/t/percona_bug_ps3885.cnf | 15 ++++++++++++ .../suite/rpl/t/percona_bug_ps3885.test | 24 +++++++++++++++++++ sql/rpl_slave.cc | 14 ++--------- 4 files changed, 60 insertions(+), 12 deletions(-) create mode 100644 mysql-test/suite/rpl/r/percona_bug_ps3885.result create mode 100644 mysql-test/suite/rpl/t/percona_bug_ps3885.cnf create mode 100644 mysql-test/suite/rpl/t/percona_bug_ps3885.test diff --git a/mysql-test/suite/rpl/r/percona_bug_ps3885.result b/mysql-test/suite/rpl/r/percona_bug_ps3885.result new file mode 100644 index 000000000000..98692e817c00 --- /dev/null +++ b/mysql-test/suite/rpl/r/percona_bug_ps3885.result @@ -0,0 +1,19 @@ +include/rpl_init.inc [topology=1->2->3] +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +include/stop_slave_io.inc +CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=SERVER_MYPORT_1, MASTER_LOG_FILE='mysqld-1.000001';; +Warnings: +Warning 3023 CHANGE MASTER TO with a MASTER_LOG_FILE clause but no MASTER_LOG_POS clause may not be safe. The old position value may not be valid for the new binary log file. +include/start_slave_io.inc +SHOW SLAVE STATUS; +include/stop_slave_io.inc +CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=SERVER_MYPORT_2, MASTER_LOG_FILE='mysqld-two.000001';; +Warnings: +Warning 3023 CHANGE MASTER TO with a MASTER_LOG_FILE clause but no MASTER_LOG_POS clause may not be safe. The old position value may not be valid for the new binary log file. +include/start_slave_io.inc +include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/percona_bug_ps3885.cnf b/mysql-test/suite/rpl/t/percona_bug_ps3885.cnf new file mode 100644 index 000000000000..0085565b5095 --- /dev/null +++ b/mysql-test/suite/rpl/t/percona_bug_ps3885.cnf @@ -0,0 +1,15 @@ +!include ../my.cnf + +[mysqld.1] +log_bin=mysqld-1.log + +[mysqld.2] +log_bin=mysqld-two.log + +[mysqld.3] + +[ENV] +SERVER_MYPORT_1= @mysqld.1.port +SERVER_MYPORT_2= @mysqld.2.port +SERVER_MYPORT_3= @mysqld.3.port + diff --git a/mysql-test/suite/rpl/t/percona_bug_ps3885.test b/mysql-test/suite/rpl/t/percona_bug_ps3885.test new file mode 100644 index 000000000000..5a60dcde6a7d --- /dev/null +++ b/mysql-test/suite/rpl/t/percona_bug_ps3885.test @@ -0,0 +1,24 @@ +# +# PS-3885: Assertion when switching slaves without stopping the slave thread +# + +--let $rpl_topology= 1->2->3 +--source include/rpl_init.inc + +--connection server_3 +--source include/stop_slave_io.inc +--replace_result $SERVER_MYPORT_1 SERVER_MYPORT_1 +--eval CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=$SERVER_MYPORT_1, MASTER_LOG_FILE='mysqld-1.000001'; +--source include/start_slave_io.inc +--disable_result_log +SHOW SLAVE STATUS; +--enable_result_log + +# cleanup +--connection server_3 +--source include/stop_slave_io.inc +--replace_result $SERVER_MYPORT_2 SERVER_MYPORT_2 +--eval CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=$SERVER_MYPORT_2, MASTER_LOG_FILE='mysqld-two.000001'; +--source include/start_slave_io.inc + +--source include/rpl_end.inc diff --git a/sql/rpl_slave.cc b/sql/rpl_slave.cc index 228f0437d695..f8b7409b74ce 100644 --- a/sql/rpl_slave.cc +++ b/sql/rpl_slave.cc @@ -3696,23 +3696,13 @@ bool show_slave_status_send_data(THD *thd, Master_info *mi, protocol->store(mi->get_user(), &my_charset_bin); protocol->store((uint32) mi->port); protocol->store((uint32) mi->connect_retry); - const char * const master_log_file= - mi->get_master_log_name(); - protocol->store(master_log_file, &my_charset_bin); + protocol->store(mi->get_master_log_name(), &my_charset_bin); protocol->store((ulonglong) mi->get_master_log_pos()); protocol->store(mi->rli->get_group_relay_log_name() + dirname_length(mi->rli->get_group_relay_log_name()), &my_charset_bin); protocol->store((ulonglong) mi->rli->get_group_relay_log_pos()); - const char * const relay_master_log_file= - mi->rli->get_group_master_log_name(); -#ifndef DBUG_OFF - const size_t master_log_file_len= strlen(master_log_file); - const size_t relay_master_log_file_len= strlen(relay_master_log_file); -#endif - DBUG_ASSERT((relay_master_log_file_len == master_log_file_len) - || !relay_master_log_file_len || !master_log_file_len); - protocol->store(relay_master_log_file, &my_charset_bin); + protocol->store(mi->rli->get_group_master_log_name(), &my_charset_bin); protocol->store(mi->slave_running == MYSQL_SLAVE_RUN_CONNECT ? "Yes" : (mi->slave_running == MYSQL_SLAVE_RUN_NOT_CONNECT ? "Connecting" : "No"), &my_charset_bin); From 4dc359fd79a497b102445294cdc3769225fb44da Mon Sep 17 00:00:00 2001 From: Evgeniy Patlan Date: Tue, 8 May 2018 18:36:15 +0300 Subject: [PATCH 0821/1221] Fix build. --- build-ps/debian/percona-server-client-5.5.files | 1 - build-ps/debian/percona-server-server-5.5.files | 1 - build-ps/percona-server.spec | 12 ++++++------ 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/build-ps/debian/percona-server-client-5.5.files b/build-ps/debian/percona-server-client-5.5.files index aa7638a2536e..006ec4f6f341 100644 --- a/build-ps/debian/percona-server-client-5.5.files +++ b/build-ps/debian/percona-server-client-5.5.files @@ -26,5 +26,4 @@ usr/share/man/man1/mysql_fix_extensions.1 usr/share/man/man1/mysqlimport.1 usr/share/man/man1/mysqlshow.1 usr/share/man/man1/mysql_waitpid.1 -usr/share/man/man1/mysql_client_test.1 usr/share/man/man1/mysqlslap.1 diff --git a/build-ps/debian/percona-server-server-5.5.files b/build-ps/debian/percona-server-server-5.5.files index db1f05c30d64..83343e89a79c 100644 --- a/build-ps/debian/percona-server-server-5.5.files +++ b/build-ps/debian/percona-server-server-5.5.files @@ -38,7 +38,6 @@ usr/share/man/man1/mysql_install_db.1 usr/share/man/man1/mysql_secure_installation.1 usr/share/man/man1/mysql_setpermission.1 usr/share/man/man1/mysql_upgrade.1 -usr/share/man/man1/mysqltest.1 usr/share/man/man1/mysql_zap.1 usr/share/man/man1/perror.1 usr/share/man/man1/replace.1 diff --git a/build-ps/percona-server.spec b/build-ps/percona-server.spec index bf3ee3cc3f21..f2f6dc3c3a5a 100644 --- a/build-ps/percona-server.spec +++ b/build-ps/percona-server.spec @@ -1121,7 +1121,7 @@ echo "=====" >> $STATUS_HISTORY %doc %attr(644, root, man) %{_mandir}/man1/mysqlhotcopy.1* %doc %attr(644, root, man) %{_mandir}/man1/mysqlman.1* %doc %attr(644, root, man) %{_mandir}/man1/mysql.server.1* -%doc %attr(644, root, man) %{_mandir}/man1/mysqltest.1* +#%doc %attr(644, root, man) %{_mandir}/man1/mysqltest.1* %doc %attr(644, root, man) %{_mandir}/man1/mysql_tzinfo_to_sql.1* %doc %attr(644, root, man) %{_mandir}/man1/mysql_zap.1* %doc %attr(644, root, man) %{_mandir}/man1/mysqlbug.1* @@ -1334,11 +1334,11 @@ done %attr(755, root, root) %{_bindir}/mysql_client_test #%attr(755, root, root) %{_bindir}/mysql_client_test_embedded #%attr(755, root, root) %{_bindir}/mysqltest_embedded -%doc %attr(644, root, man) %{_mandir}/man1/mysql_client_test.1* -%doc %attr(644, root, man) %{_mandir}/man1/mysql-stress-test.pl.1* -%doc %attr(644, root, man) %{_mandir}/man1/mysql-test-run.pl.1* -%doc %attr(644, root, man) %{_mandir}/man1/mysql_client_test_embedded.1* -%doc %attr(644, root, man) %{_mandir}/man1/mysqltest_embedded.1* +#%doc %attr(644, root, man) %{_mandir}/man1/mysql_client_test.1* +#%doc %attr(644, root, man) %{_mandir}/man1/mysql-stress-test.pl.1* +#%doc %attr(644, root, man) %{_mandir}/man1/mysql-test-run.pl.1* +#%doc %attr(644, root, man) %{_mandir}/man1/mysql_client_test_embedded.1* +#%doc %attr(644, root, man) %{_mandir}/man1/mysqltest_embedded.1* %changelog * Thu Sep 1 2016 Evgeniy Patlan From 58dcf0b4a4165ed59de94a9a1e7d8c954f733726 Mon Sep 17 00:00:00 2001 From: Aakanksha Verma Date: Wed, 9 May 2018 18:54:03 +0530 Subject: [PATCH 0822/1221] BUG#26225783 MYSQL CRASH ON CREATE TABLE (REPRODUCEABLE) -> INNODB: A LONG SEMAPHORE WAIT PROBLEM =========== A false upgrade(from SX to X on root page) ends up in a deadlock with another purge holding S latch on same index tree root. The S latched thread would be waiting to acquire S latch on non leaf and leaf level pages that would be X latched by the 1st purge thread and the 1st thread would be waiting on the 2nd one to release S latch on the root page to proceed with its upgrade of latch on root page from SX to X.The false upgrade happens due to a wrong estimation of merge of page of sys table index as the column would be varchar(0) and it would not consider the empty bytes while calculating max possible record size. FIX === Added the case when calculating columns whose length isn't defined to consider those extra bytes when page is being emptied out so that the estimation isn't wrong at the cursor positioning level. Also will be raising a separate bug about having a proper length for sys table columns to avoid such scenarios. Reviewed by: Debarun Banerjee RB: 18851 --- storage/innobase/btr/btr0cur.cc | 29 ++++++++++++++++++++++++++--- storage/innobase/dict/dict0dict.cc | 9 ++++++++- 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/storage/innobase/btr/btr0cur.cc b/storage/innobase/btr/btr0cur.cc index 54429a384180..a160601b3ebd 100644 --- a/storage/innobase/btr/btr0cur.cc +++ b/storage/innobase/btr/btr0cur.cc @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1994, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1994, 2018, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2008, Google Inc. Copyright (c) 2012, Facebook Inc. @@ -5214,6 +5214,8 @@ btr_cur_pessimistic_delete( ulint level; mem_heap_t* heap; ulint* offsets; + bool allow_merge;/* if true, implies we have taken appropriate page + latches needed to merge this page.*/ #ifdef UNIV_DEBUG bool parent_latched = false; #endif /* UNIV_DEBUG */ @@ -5222,6 +5224,9 @@ btr_cur_pessimistic_delete( page = buf_block_get_frame(block); index = btr_cur_get_index(cursor); + ulint rec_size_est = dict_index_node_ptr_max_size(index); + const page_size_t page_size(dict_table_page_size(index->table)); + ut_ad(flags == 0 || flags == BTR_CREATE_FLAG); ut_ad(!dict_index_is_online_ddl(index) || dict_index_is_clust(index) @@ -5361,6 +5366,12 @@ btr_cur_pessimistic_delete( btr_search_update_hash_on_delete(cursor); + if (page_is_leaf(page)) { + allow_merge = true; + } else { + allow_merge = btr_cur_will_modify_tree(index,page,BTR_INTENTION_DELETE, + rec,rec_size_est,page_size,mtr); + } page_cur_delete_rec(btr_cur_get_page_cur(cursor), index, offsets, mtr); #ifdef UNIV_ZIP_DEBUG ut_a(!page_zip || page_zip_validate(page_zip, page, index)); @@ -5374,8 +5385,20 @@ btr_cur_pessimistic_delete( mem_heap_free(heap); - if (ret == FALSE) { - ret = btr_cur_compress_if_useful(cursor, FALSE, mtr); + if(!ret) { + bool do_merge = btr_cur_compress_recommendation(cursor,mtr); + /* We are not allowed do merge because appropriate locks + are not taken while positioning the cursor. */ + if (!allow_merge && do_merge) { + ib::info() << "Ignoring merge recommendation for page" + "as we could not predict it early .Page" + "number being\n" << page_get_page_no(page) << + "Index name\n" << index->name; + ut_ad(false); + } else if (do_merge) { + + ret = btr_cur_compress_if_useful(cursor, FALSE, mtr); + } } if (!srv_read_only_mode diff --git a/storage/innobase/dict/dict0dict.cc b/storage/innobase/dict/dict0dict.cc index 43e9bd37bdf2..3e45abbfb744 100644 --- a/storage/innobase/dict/dict0dict.cc +++ b/storage/innobase/dict/dict0dict.cc @@ -2299,7 +2299,6 @@ dict_index_node_ptr_max_size( } comp = dict_table_is_comp(index->table); - /* Each record has page_no, length of page_no and header. */ rec_max_size = comp ? REC_NODE_PTR_SIZE + 1 + REC_N_NEW_EXTRA_BYTES @@ -2338,6 +2337,14 @@ dict_index_node_ptr_max_size( } field_max_size = dict_col_get_max_size(col); + /* A varchar(0) case when the max size of field + can't be estimated accurately */ + if (field_max_size == 0) { + ulint page_rec_max = srv_page_size == UNIV_PAGE_SIZE_MAX + ? REC_MAX_DATA_SIZE - 1 + : page_get_free_space_of_empty(comp) / 2; + rec_max_size += page_rec_max; + } field_ext_max_size = field_max_size < 256 ? 1 : 2; if (field->prefix_len From 000f9a01feaeea67b52eac933723cf028a085aff Mon Sep 17 00:00:00 2001 From: Pedro Figueiredo Date: Wed, 9 May 2018 12:18:47 +0100 Subject: [PATCH 0823/1221] Bug#27442477 ASSERT `THD->GET_HA_DATA...HAS_STATE(XID_STATE::XA_ACTIVE))' AT HANDLER.CC:1396 This is a post-push fix for addressing failing test-scripts. Problem ------- Test scripts executed in the same worker thread and just after `rpl.rpl_xa_with_filters_error_msg` - the original bug-fix patch provided test - fail to execute both on Jenkins and on PB2. How to reproduce ---------------- $ ./mtr --parallel=1 --big-test rpl.rpl_xa_with_filters_error_msg \ rpl.transactional_ddl_locking Analysis -------- The original bug-fix patch analysis concluded that, when using the XA transaction with replication filters, the server enters an unknown state. That is exactly the problem here, the next test-script to be executed failed with an unrelated error. Fix --- Reset the filter state, before ending the script. --- mysql-test/suite/rpl/r/rpl_xa_with_filters_error_msg.result | 4 +++- mysql-test/suite/rpl/t/rpl_xa_with_filters_error_msg.test | 6 +++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/mysql-test/suite/rpl/r/rpl_xa_with_filters_error_msg.result b/mysql-test/suite/rpl/r/rpl_xa_with_filters_error_msg.result index 0c7fb6639fd6..c1f23a8fee99 100644 --- a/mysql-test/suite/rpl/r/rpl_xa_with_filters_error_msg.result +++ b/mysql-test/suite/rpl/r/rpl_xa_with_filters_error_msg.result @@ -33,5 +33,7 @@ include/assert_grep.inc [Found error message regarding usage of replication filt [connection master] DROP TABLE t1; include/sync_slave_sql_with_master.inc -include/rpl_reset.inc +include/stop_slave_sql.inc +CHANGE REPLICATION FILTER Replicate_Do_Table=(); +include/start_slave_sql.inc include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_xa_with_filters_error_msg.test b/mysql-test/suite/rpl/t/rpl_xa_with_filters_error_msg.test index 3341aff6acea..b917d8e24343 100644 --- a/mysql-test/suite/rpl/t/rpl_xa_with_filters_error_msg.test +++ b/mysql-test/suite/rpl/t/rpl_xa_with_filters_error_msg.test @@ -58,5 +58,9 @@ DROP TABLE t1; --source include/sync_slave_sql_with_master.inc --let $slave_sql_errno= convert_error(ER_XA_REPLICATION_FILTERS) ---source include/rpl_reset.inc + +--source include/stop_slave_sql.inc +CHANGE REPLICATION FILTER Replicate_Do_Table=(); +--source include/start_slave_sql.inc + --source include/rpl_end.inc From 6d570d729682039edd6c490187a0434e7d75d486 Mon Sep 17 00:00:00 2001 From: Arun Kuruvila Date: Thu, 10 May 2018 10:14:30 +0530 Subject: [PATCH 0824/1221] Bug#27230925: HANDLE_FATAL_SIGNAL (SIG=11) IN SHOW_ROUTINE_GRANTS Description :- Server crashes in show_routine_grants(). Analysis :- When "grant_reload_procs_priv" encounters an error, the grant structures (structures with column, function and procedure privileges) are freed. Server crashes when trying to access these structures later. Fix :- Grant structures are retained even when "grant_reload_procs_priv()" encounters an error while reloading column, function and procedure privileges. --- mysql-test/r/grant.result | 1 + mysql-test/t/grant.test | 3 ++ sql/sql_acl.cc | 92 ++++++++++++++++++++++++++------------- 3 files changed, 65 insertions(+), 31 deletions(-) diff --git a/mysql-test/r/grant.result b/mysql-test/r/grant.result index e524bb5cac21..d151b58e9ce3 100644 --- a/mysql-test/r/grant.result +++ b/mysql-test/r/grant.result @@ -1692,6 +1692,7 @@ revoke create, insert on mysqltest.t6 from mysqltest@localhost; drop user mysqltest@localhost; drop database mysqltest; use test; +call mtr.add_suppression("Can't open and lock privilege tables"); FLUSH PRIVILEGES without procs_priv table. RENAME TABLE mysql.procs_priv TO mysql.procs_gone; FLUSH PRIVILEGES; diff --git a/mysql-test/t/grant.test b/mysql-test/t/grant.test index 1e1cb6c24dcb..2a1a8e34efb9 100644 --- a/mysql-test/t/grant.test +++ b/mysql-test/t/grant.test @@ -1667,6 +1667,9 @@ use test; # # Bug#16470 crash on grant if old grant tables # + +call mtr.add_suppression("Can't open and lock privilege tables"); + --echo FLUSH PRIVILEGES without procs_priv table. RENAME TABLE mysql.procs_priv TO mysql.procs_gone; --error ER_NO_SUCH_TABLE diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc index 705b4792a37d..64888f7308ae 100644 --- a/sql/sql_acl.cc +++ b/sql/sql_acl.cc @@ -4871,6 +4871,7 @@ static my_bool grant_load(THD *thd, TABLE_LIST *tables) exists. @param thd A pointer to the thread handler object. + @param table A pointer to the table list. @see grant_reload @@ -4879,31 +4880,22 @@ static my_bool grant_load(THD *thd, TABLE_LIST *tables) @retval TRUE An error has occurred. */ -static my_bool grant_reload_procs_priv(THD *thd) +static my_bool grant_reload_procs_priv(THD *thd, TABLE_LIST *table) { HASH old_proc_priv_hash, old_func_priv_hash; - TABLE_LIST table; my_bool return_val= FALSE; DBUG_ENTER("grant_reload_procs_priv"); - table.init_one_table("mysql", 5, "procs_priv", - strlen("procs_priv"), "procs_priv", - TL_READ); - table.open_type= OT_BASE_ONLY; - - if (open_and_lock_tables(thd, &table, FALSE, MYSQL_LOCK_IGNORE_TIMEOUT)) - DBUG_RETURN(TRUE); - - mysql_rwlock_wrlock(&LOCK_grant); /* 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; - if ((return_val= grant_load_procs_priv(table.table))) + if ((return_val= grant_load_procs_priv(table->table))) { /* Error; Reverting to old hash */ DBUG_PRINT("error",("Reverting to old privileges")); - grant_free(); + my_hash_free(&proc_priv_hash); + my_hash_free(&func_priv_hash); proc_priv_hash= old_proc_priv_hash; func_priv_hash= old_func_priv_hash; } @@ -4912,9 +4904,7 @@ static my_bool grant_reload_procs_priv(THD *thd) my_hash_free(&old_proc_priv_hash); my_hash_free(&old_func_priv_hash); } - mysql_rwlock_unlock(&LOCK_grant); - close_mysql_tables(thd); DBUG_RETURN(return_val); } @@ -4936,7 +4926,7 @@ static my_bool grant_reload_procs_priv(THD *thd) my_bool grant_reload(THD *thd) { - TABLE_LIST tables[2]; + TABLE_LIST tables[3]; HASH old_column_priv_hash; MEM_ROOT old_mem; my_bool return_val= 1; @@ -4952,15 +4942,57 @@ my_bool grant_reload(THD *thd) tables[1].init_one_table(C_STRING_WITH_LEN("mysql"), C_STRING_WITH_LEN("columns_priv"), "columns_priv", TL_READ); + tables[2].init_one_table(C_STRING_WITH_LEN("mysql"), + C_STRING_WITH_LEN("procs_priv"), + "procs_priv", TL_READ); + tables[0].next_local= tables[0].next_global= tables+1; - tables[0].open_type= tables[1].open_type= OT_BASE_ONLY; + tables[1].next_local= tables[1].next_global= tables+2; + tables[0].open_type= tables[1].open_type= tables[2].open_type= OT_BASE_ONLY; + + /* + Reload will work in the following manner:- + + proc_priv_hash structure + / \ + not initialized initialized + / \ | + mysql.procs_priv table Server Startup | + is missing \ | + | open_and_lock_tables() + Assume we are working on /success \failure + pre 4.1 system tables. Normal Scenario. An error is thrown. + A warning is printed Reload column privilege. Retain the old hash. + and continue with Reload function and + reloading the column procedure privileges, + privileges. if available. + */ + + if (!(my_hash_inited(&proc_priv_hash))) + tables[2].open_strategy= TABLE_LIST::OPEN_IF_EXISTS; /* To avoid deadlocks we should obtain table locks before obtaining LOCK_grant rwlock. */ if (open_and_lock_tables(thd, tables, FALSE, MYSQL_LOCK_IGNORE_TIMEOUT)) + { + if (thd->stmt_da->is_error()) + { + sql_print_error("Fatal error: Can't open and lock privilege tables: %s", + thd->stmt_da->message()); + } goto end; + } + + if (tables[2].table == NULL) + { + sql_print_warning("Table 'mysql.procs_priv' does not exist. " + "Please run mysql_upgrade."); + push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN, ER_NO_SUCH_TABLE, + ER(ER_NO_SUCH_TABLE), tables[2].db, + tables[2].table_name); + } mysql_rwlock_wrlock(&LOCK_grant); old_column_priv_hash= column_priv_hash; @@ -4972,10 +5004,18 @@ my_bool grant_reload(THD *thd) old_mem= memex; init_sql_alloc(&memex, ACL_ALLOC_BLOCK_SIZE, 0); - if ((return_val= grant_load(thd, tables))) + /* + tables[2].table i.e. procs_priv can be null if we are working with + pre 4.1 privilage tables + */ + if ((return_val= (grant_load(thd, tables) || + (tables[2].table != NULL && + grant_reload_procs_priv(thd, &tables[2]))) + )) { // Error. Revert to old hash DBUG_PRINT("error",("Reverting to old privileges")); - grant_free(); /* purecov: deadcode */ + my_hash_free(&column_priv_hash); + free_root(&memex,MYF(0)); column_priv_hash= old_column_priv_hash; /* purecov: deadcode */ memex= old_mem; /* purecov: deadcode */ } @@ -4983,22 +5023,12 @@ my_bool grant_reload(THD *thd) { my_hash_free(&old_column_priv_hash); free_root(&old_mem,MYF(0)); + grant_version++; } mysql_rwlock_unlock(&LOCK_grant); - close_mysql_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; - - mysql_rwlock_wrlock(&LOCK_grant); - grant_version++; - mysql_rwlock_unlock(&LOCK_grant); end: + close_mysql_tables(thd); DBUG_RETURN(return_val); } From 1ddd4a84ee13a8a5921cf8e3e2ccf398340f4135 Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Thu, 10 May 2018 11:10:05 -0700 Subject: [PATCH 0825/1221] PS-4469 : variable use out of scope bug in get_last_key test detected by ASAN in clang 6 PS-4470 : the cachetable-simple-pin-nonblocking-cheap test occasionally fails due to a locking conflict with the cachetable evictor - Advance PerconaFT git submodule commit pointer to pick up changes. --- storage/tokudb/PerconaFT | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage/tokudb/PerconaFT b/storage/tokudb/PerconaFT index 809c7ac31f35..8ff18ff1d135 160000 --- a/storage/tokudb/PerconaFT +++ b/storage/tokudb/PerconaFT @@ -1 +1 @@ -Subproject commit 809c7ac31f35ecc3e5b8a671d961c7a5e58f8d86 +Subproject commit 8ff18ff1d135a8a5d6e745cf2c4dbf5684fcebd9 From ff73da8b1ec4a254ab5cfc4b3f2cdb7f0a4a73fc Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Fri, 11 May 2018 10:15:31 +0200 Subject: [PATCH 0826/1221] PS-4471: gcc-4.4 error: #pragma GCC diagnostic not allowed inside functions Use separate macros for gcc-4.5 and older to disable "-Wuninitialized" warning. --- include/my_compiler.h | 12 ++++-------- sql/sql_planner.cc | 3 +++ 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/include/my_compiler.h b/include/my_compiler.h index 2f2e3b30356c..4f31e02e50d4 100644 --- a/include/my_compiler.h +++ b/include/my_compiler.h @@ -164,16 +164,12 @@ struct my_aligned_storage MY_DO_PRAGMA(STRINGIFY_ARG(GCC diagnostic ignored WMAYBE_UNINITIALIZED_OPTION)) # define MY_RESTORE_WARN_MAYBE_UNINITIALIZED \ _Pragma("GCC diagnostic pop") +# define GCC45_DISABLE_WARN_UNINITIALIZED #else -# define MY_DISABLE_WARN_MAYBE_UNINITIALIZED \ +# define MY_DISABLE_WARN_MAYBE_UNINITIALIZED +# define MY_RESTORE_WARN_MAYBE_UNINITIALIZED +# define GCC45_DISABLE_WARN_UNINITIALIZED \ MY_DO_PRAGMA(STRINGIFY_ARG(GCC diagnostic ignored WMAYBE_UNINITIALIZED_OPTION)) - /* true for gcc 4.6+ and all other compilers */ -# if defined(__clang__) || !defined(__GNUC__) || MY_GNUC_PREREQ(4,6) -# define MY_RESTORE_WARN_MAYBE_UNINITIALIZED \ - MY_DO_PRAGMA(STRINGIFY_ARG(GCC diagnostic warning WMAYBE_UNINITIALIZED_OPTION)) -# else -# define MY_RESTORE_WARN_MAYBE_UNINITIALIZED -# endif #endif #endif /* MY_COMPILER_INCLUDED */ diff --git a/sql/sql_planner.cc b/sql/sql_planner.cc index 061aec6425b9..fe467d77b320 100644 --- a/sql/sql_planner.cc +++ b/sql/sql_planner.cc @@ -36,6 +36,9 @@ using std::max; using std::min; +/* disable "-Wuninitialized" for whole file for gcc-4.5 or older */ +GCC45_DISABLE_WARN_UNINITIALIZED + static double prev_record_reads(JOIN *join, uint idx, table_map found_ref); static void trace_plan_prefix(JOIN *join, uint idx, table_map excluded_tables); From eb798ffc142e6f4f5ee5ea53a220b63d5f0ee322 Mon Sep 17 00:00:00 2001 From: Shishir Jaiswal Date: Fri, 11 May 2018 19:46:06 +0530 Subject: [PATCH 0827/1221] Bug#23706056 - AUDIT_LOG_USER TABLE HAS WRONG DEFINITION FOR USER AND HOST DESCRIPTION =========== The audit_log_user table has the wrong definitions for the 'user' and 'host' fields: - 'user' is VARCHAR(16), however MySQL 5.7 supports 32 characters long user names. - Both 'user' and 'host' are latin1 COLLATE latin1_bin, however mysql.user is utf8 COLLATE utf8_bin. ANALYSIS ======== The above mentioned fields need to be modified accordingly. There could be cases when user has upgraded the binaries but has stale table structure. In order to check this, we should have the concept of min_length and max_length. - if table's field size < min_length, implies invalid table defn. - if min_length <= table's field size < max_length, implies binaries upgraded but table definitions are not. FIX === 1) audit_log_filter_table.cc has definition for struct: - 'Table_field_def' - As stated above, min_length and max_length are introduced. - 's_audit_log_filter_user_def' - "USER" min_length is set to 16 and max_length to 32. 2) The 'user' and 'host' fields are fixed in DDL statements in the following files: - audit_log_filter_linux_install.sql - audit_log_filter_win_install.sql - audit_log_filter_install.inc (many .test include this) 3) 5.7 charset for mysql.audit_log_user and mysql.audit_log_filter is utf8mb3 while 8.0+ is utf8mb4. The same is changed everywhere. 4) mysql_system_tables_fix.sql is updated to have these changes for 'mysql_upgrade' 5) check_table_fields() has now the check to ensure the valid min_length and max_length. 6) Implemented warning() on the lines of error() --- scripts/mysql_system_tables_fix.sql | 60 ++++++++++++++++++++++++++++- 1 file changed, 59 insertions(+), 1 deletion(-) diff --git a/scripts/mysql_system_tables_fix.sql b/scripts/mysql_system_tables_fix.sql index 17537e78ff17..903d32cb65ea 100644 --- a/scripts/mysql_system_tables_fix.sql +++ b/scripts/mysql_system_tables_fix.sql @@ -1,4 +1,4 @@ --- Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved. +-- Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved. -- -- 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 @@ -982,4 +982,62 @@ INSERT IGNORE INTO mysql.tables_priv VALUES ('localhost', 'mysql', 'mysql.sessio INSERT IGNORE INTO mysql.db VALUES ('localhost', 'performance_schema', 'mysql.session','Y','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N'); +-- +-- Update column definition (size and charset) for audit log tables. +-- + +SET @had_audit_log_user = + (SELECT COUNT(table_name) FROM information_schema.tables + WHERE table_schema = 'mysql' AND table_name = 'audit_log_user' AND + table_type = 'BASE TABLE'); +SET @cmd="ALTER TABLE mysql.audit_log_user DROP FOREIGN KEY audit_log_user_ibfk_1"; +SET @str = IF(@had_audit_log_user > 0, @cmd, "SET @dummy = 0"); +PREPARE stmt FROM @str; +EXECUTE stmt; +DROP PREPARE stmt; + +SET @had_audit_log_filter = + (SELECT COUNT(table_name) FROM information_schema.tables + WHERE table_schema = 'mysql' AND table_name = 'audit_log_filter' AND + table_type = 'BASE TABLE'); +SET @cmd="ALTER TABLE mysql.audit_log_filter ENGINE=InnoDB"; +SET @str = IF(@had_audit_log_filter > 0, @cmd, "SET @dummy = 0"); +PREPARE stmt FROM @str; +EXECUTE stmt; +DROP PREPARE stmt; + +SET @cmd="ALTER TABLE mysql.audit_log_filter CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin"; +SET @str = IF(@had_audit_log_filter > 0, @cmd, "SET @dummy = 0"); +PREPARE stmt FROM @str; +EXECUTE stmt; +DROP PREPARE stmt; + +SET @had_audit_log_user = + (SELECT COUNT(table_name) FROM information_schema.tables + WHERE table_schema = 'mysql' AND table_name = 'audit_log_user' AND + table_type = 'BASE TABLE'); +SET @cmd="ALTER TABLE mysql.audit_log_user ENGINE=InnoDB"; +SET @str = IF(@had_audit_log_user > 0, @cmd, "SET @dummy = 0"); +PREPARE stmt FROM @str; +EXECUTE stmt; +DROP PREPARE stmt; + +SET @cmd="ALTER TABLE mysql.audit_log_user CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin"; +SET @str = IF(@had_audit_log_user > 0, @cmd, "SET @dummy = 0"); +PREPARE stmt FROM @str; +EXECUTE stmt; +DROP PREPARE stmt; + +SET @cmd="ALTER TABLE mysql.audit_log_user MODIFY COLUMN USER VARCHAR(32)"; +SET @str = IF(@had_audit_log_user > 0, @cmd, "SET @dummy = 0"); +PREPARE stmt FROM @str; +EXECUTE stmt; +DROP PREPARE stmt; + +SET @cmd="ALTER TABLE mysql.audit_log_user ADD FOREIGN KEY (FILTERNAME) REFERENCES mysql.audit_log_filter(NAME)"; +SET @str = IF(@had_audit_log_user > 0, @cmd, "SET @dummy = 0"); +PREPARE stmt FROM @str; +EXECUTE stmt; +DROP PREPARE stmt; + FLUSH PRIVILEGES; From c1477a3bb6abf958adc5b9bec52072dc1fd12566 Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Thu, 26 Apr 2018 16:23:28 +0200 Subject: [PATCH 0828/1221] PS-3967: Use MAP_POPULATE when NUMA interleave is turned on. --- storage/innobase/buf/buf0buf.cc | 11 ++++-- storage/innobase/include/buf0buf.h | 1 + storage/innobase/include/os0proc.h | 3 +- storage/innobase/os/os0proc.cc | 63 ++++++++++++++++++++++++++++-- storage/innobase/row/row0log.cc | 2 +- storage/innobase/row/row0merge.cc | 2 +- storage/innobase/srv/srv0start.cc | 3 +- 7 files changed, 73 insertions(+), 12 deletions(-) diff --git a/storage/innobase/buf/buf0buf.cc b/storage/innobase/buf/buf0buf.cc index b946b1dd4e4e..432825c308ff 100644 --- a/storage/innobase/buf/buf0buf.cc +++ b/storage/innobase/buf/buf0buf.cc @@ -1129,7 +1129,8 @@ buf_chunk_init( /*===========*/ buf_pool_t* buf_pool, /*!< in: buffer pool instance */ buf_chunk_t* chunk, /*!< out: chunk of buffers */ - ulint mem_size) /*!< in: requested size in bytes */ + ulint mem_size, /*!< in: requested size in bytes */ + bool populate) /*!< in: virtual page preallocation */ { buf_block_t* block; byte* frame; @@ -1145,7 +1146,7 @@ buf_chunk_init( + (UNIV_PAGE_SIZE - 1), UNIV_PAGE_SIZE); chunk->mem_size = mem_size; - chunk->mem = os_mem_alloc_large(&chunk->mem_size); + chunk->mem = os_mem_alloc_large(&chunk->mem_size, populate); if (UNIV_UNLIKELY(chunk->mem == NULL)) { @@ -1364,6 +1365,7 @@ buf_pool_init_instance( /*===================*/ buf_pool_t* buf_pool, /*!< in: buffer pool instance */ ulint buf_pool_size, /*!< in: size in bytes */ + bool populate, /*!< in: virtual page preallocation */ ulint instance_no) /*!< in: id of the instance */ { ulint i; @@ -1392,7 +1394,7 @@ buf_pool_init_instance( UT_LIST_INIT(buf_pool->free); - if (!buf_chunk_init(buf_pool, chunk, buf_pool_size)) { + if (!buf_chunk_init(buf_pool, chunk, buf_pool_size, populate)) { mem_free(chunk); mem_free(buf_pool); @@ -1518,6 +1520,7 @@ dberr_t buf_pool_init( /*==========*/ ulint total_size, /*!< in: size of the total pool in bytes */ + bool populate, /*!< in: virtual page preallocation */ ulint n_instances) /*!< in: number of instances */ { ulint i; @@ -1548,7 +1551,7 @@ buf_pool_init( for (i = 0; i < n_instances; i++) { buf_pool_t* ptr = &buf_pool_ptr[i]; - if (buf_pool_init_instance(ptr, size, i) != DB_SUCCESS) { + if (buf_pool_init_instance(ptr, size, populate, i) != DB_SUCCESS) { /* Free all the instances created so far. */ buf_pool_free(i); diff --git a/storage/innobase/include/buf0buf.h b/storage/innobase/include/buf0buf.h index 929b670ef589..9f52cfb85d9a 100644 --- a/storage/innobase/include/buf0buf.h +++ b/storage/innobase/include/buf0buf.h @@ -214,6 +214,7 @@ dberr_t buf_pool_init( /*=========*/ ulint size, /*!< in: Size of the total pool in bytes */ + bool populate, /*!< in: Force virtual page preallocation */ ulint n_instances); /*!< in: Number of instances */ /********************************************************************//** Frees the buffer pool at shutdown. This must not be invoked before diff --git a/storage/innobase/include/os0proc.h b/storage/innobase/include/os0proc.h index 613e3bd6947d..d6aafccf48e6 100644 --- a/storage/innobase/include/os0proc.h +++ b/storage/innobase/include/os0proc.h @@ -58,7 +58,8 @@ UNIV_INTERN void* os_mem_alloc_large( /*===============*/ - ulint* n); /*!< in/out: number of bytes */ + ulint* n, /*!< in/out: number of bytes */ + bool populate); /*!< in: virtual page preallocation */ /****************************************************************//** Frees large pages memory. */ UNIV_INTERN diff --git a/storage/innobase/os/os0proc.cc b/storage/innobase/os/os0proc.cc index ff6d65e4ae67..6c9116e1397d 100644 --- a/storage/innobase/os/os0proc.cc +++ b/storage/innobase/os/os0proc.cc @@ -32,6 +32,14 @@ Created 9/30/1995 Heikki Tuuri #include "ut0mem.h" #include "ut0byte.h" +/* Linux release version */ +#if defined(UNIV_LINUX) && defined(_GNU_SOURCE) +#include /* strverscmp() */ +#include /* uname() */ +#endif + +#include "ha_prototypes.h" + /* FreeBSD for example has only MAP_ANON, Linux has MAP_ANONYMOUS and MAP_ANON but MAP_ANON is marked as deprecated */ #if defined(MAP_ANONYMOUS) @@ -40,10 +48,36 @@ MAP_ANON but MAP_ANON is marked as deprecated */ #define OS_MAP_ANON MAP_ANON #endif +/* Linux's MAP_POPULATE */ +#if defined(MAP_POPULATE) +#define OS_MAP_POPULATE MAP_POPULATE +#else +#define OS_MAP_POPULATE 0 +#endif + UNIV_INTERN ibool os_use_large_pages; /* Large page size. This may be a boot-time option on some platforms */ UNIV_INTERN ulint os_large_page_size; + +/****************************************************************//** +Retrieve and compare operating system release. +@return TRUE if the OS release is equal to, or later than release. */ +UNIV_INTERN +bool +os_compare_release( +/*===============*/ + const char* release /*!< in: OS release */ + MY_ATTRIBUTE((unused))) +{ +#if defined(UNIV_LINUX) && defined(_GNU_SOURCE) + struct utsname name; + return uname(&name) == 0 && strverscmp(name.release, release) >= 0; +#else + return false; +#endif +} + /****************************************************************//** Converts the current process id to a number. It is not guaranteed that the number is unique. In Linux returns the 'process number' of the current @@ -69,7 +103,8 @@ UNIV_INTERN void* os_mem_alloc_large( /*===============*/ - ulint* n) /*!< in/out: number of bytes */ + ulint* n, /*!< in/out: number of bytes */ + bool populate) /*!< in: virtual page preallocation */ { void* ptr; ulint size; @@ -155,12 +190,13 @@ os_mem_alloc_large( ut_ad(ut_is_2pow(size)); size = *n = ut_2pow_round(*n + (size - 1), size); ptr = mmap(NULL, size, PROT_READ | PROT_WRITE, - MAP_PRIVATE | OS_MAP_ANON, -1, 0); - if (UNIV_UNLIKELY(ptr == (void*) -1)) { + MAP_PRIVATE | OS_MAP_ANON | + (populate ? OS_MAP_POPULATE : 0), -1, 0); + if (UNIV_UNLIKELY(ptr == MAP_FAILED)) { fprintf(stderr, "InnoDB: mmap(%lu bytes) failed;" " errno %lu\n", (ulong) size, (ulong) errno); - ptr = NULL; + return NULL; } else { os_fast_mutex_lock(&ut_list_mutex); ut_total_allocated_memory += size; @@ -168,6 +204,25 @@ os_mem_alloc_large( UNIV_MEM_ALLOC(ptr, size); } #endif + +#if OS_MAP_ANON && OS_MAP_POPULATE + /* MAP_POPULATE is only supported for private mappings + since Linux 2.6.23. */ + populate = populate && !os_compare_release("2.6.23"); + + if (populate) { + ib_logf(IB_LOG_LEVEL_WARN, "InnoDB: Warning: mmap(MAP_POPULATE) " + "is not supported for private mappings. " + "Forcing preallocation by faulting in pages.\n"); + } +#endif + + /* Initialize the entire buffer to force the allocation + of physical memory page frames. */ + if (populate) { + memset(ptr, '\0', size); + } + return(ptr); } diff --git a/storage/innobase/row/row0log.cc b/storage/innobase/row/row0log.cc index 4fa2ed5cf560..747cdc45da90 100644 --- a/storage/innobase/row/row0log.cc +++ b/storage/innobase/row/row0log.cc @@ -225,7 +225,7 @@ row_log_block_allocate( DBUG_ENTER("row_log_block_allocate"); if (log_buf.block == NULL) { log_buf.size = srv_sort_buf_size; - log_buf.block = (byte*) os_mem_alloc_large(&log_buf.size); + log_buf.block = (byte*) os_mem_alloc_large(&log_buf.size, false); DBUG_EXECUTE_IF("simulate_row_log_allocation_failure", if (log_buf.block) os_mem_free_large(log_buf.block, log_buf.size); diff --git a/storage/innobase/row/row0merge.cc b/storage/innobase/row/row0merge.cc index 346b1616fd05..b000f313d673 100644 --- a/storage/innobase/row/row0merge.cc +++ b/storage/innobase/row/row0merge.cc @@ -3672,7 +3672,7 @@ row_merge_build_indexes( block_size = 3 * srv_sort_buf_size; block = static_cast( - os_mem_alloc_large(&block_size)); + os_mem_alloc_large(&block_size, false)); if (block == NULL) { DBUG_RETURN(DB_OUT_OF_MEMORY); diff --git a/storage/innobase/srv/srv0start.cc b/storage/innobase/srv/srv0start.cc index ac634df06dde..a6a3c820813b 100644 --- a/storage/innobase/srv/srv0start.cc +++ b/storage/innobase/srv/srv0start.cc @@ -2059,7 +2059,8 @@ innobase_start_or_create_for_mysql(void) ib_logf(IB_LOG_LEVEL_INFO, "Initializing buffer pool, size = %.1f%c", size, unit); - err = buf_pool_init(srv_buf_pool_size, srv_buf_pool_instances); + err = buf_pool_init(srv_buf_pool_size, static_cast(srv_numa_interleave), + srv_buf_pool_instances); if (err != DB_SUCCESS) { ib_logf(IB_LOG_LEVEL_ERROR, From bbc2e37fe4e0ca3a7cfa1437a763dc43829e98e2 Mon Sep 17 00:00:00 2001 From: Arun Kuruvila Date: Mon, 14 May 2018 11:28:13 +0530 Subject: [PATCH 0829/1221] Bug#27759871: BACKRONYM ISSUE IS STILL IN MYSQL 5.7 Description:- Client applications establishes connection to server, which does not support SSL, via TCP even when SSL is enforced via MYSQL_OPT_SSL_MODE or MYSQL_OPT_SSL_ENFORCE or MYSQL_OPT_SSL_VERIFY_SERVER_CERT. Analysis:- There exist no error handling for catching client applications which enforces SSL connection to connect to a server which does not support SSL. Fix:- Error handling is done to catch above mentioned scenarios. --- include/sql_common.h | 5 ++++- libmysqld/libmysqld.c | 5 ++++- sql-common/client.c | 41 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 49 insertions(+), 2 deletions(-) diff --git a/include/sql_common.h b/include/sql_common.h index 45e90d438fb4..9571dff97783 100644 --- a/include/sql_common.h +++ b/include/sql_common.h @@ -1,7 +1,7 @@ #ifndef SQL_COMMON_INCLUDED #define SQL_COMMON_INCLUDED -/* Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -96,6 +96,9 @@ void set_stmt_error(MYSQL_STMT *stmt, int errcode, const char *sqlstate, void set_mysql_error(MYSQL *mysql, int errcode, const char *sqlstate); void set_mysql_extended_error(MYSQL *mysql, int errcode, const char *sqlstate, const char *format, ...); +#ifdef EMBEDDED_LIBRARY +int embedded_ssl_check(MYSQL *mysql); +#endif /* client side of the pluggable authentication */ struct st_plugin_vio_info; diff --git a/libmysqld/libmysqld.c b/libmysqld/libmysqld.c index 6de1e3383d23..85ca0cf4bd81 100644 --- a/libmysqld/libmysqld.c +++ b/libmysqld/libmysqld.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2001, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -173,6 +173,9 @@ mysql_real_connect(MYSQL *mysql,const char *host, const char *user, if (db) client_flag|=CLIENT_CONNECT_WITH_DB; + if (embedded_ssl_check(mysql)) + goto error; + mysql->info_buffer= my_malloc(MYSQL_ERRMSG_SIZE, MYF(0)); mysql->thd= create_embedded_thd(client_flag); diff --git a/sql-common/client.c b/sql-common/client.c index 9972ca741f25..3247fd8e339a 100644 --- a/sql-common/client.c +++ b/sql-common/client.c @@ -2020,6 +2020,34 @@ static int ssl_verify_server_cert(Vio *vio, const char* server_hostname, const c #endif /* HAVE_OPENSSL && !EMBEDDED_LIBRARY */ +/** + Checks if any SSL option is set for libmysqld embedded server. + + @param mysql the connection handle + @retval 0 success + @retval 1 failure +*/ +#ifdef EMBEDDED_LIBRARY +int embedded_ssl_check(MYSQL *mysql) +{ + if (mysql->options.ssl_key || mysql->options.ssl_cert || + mysql->options.ssl_ca || mysql->options.ssl_capath || + mysql->options.ssl_cipher || + mysql->options.client_flag & CLIENT_SSL_VERIFY_SERVER_CERT || + (mysql->options.extension && + mysql->options.extension->ssl_mode == SSL_MODE_REQUIRED)) + { + set_mysql_extended_error(mysql, CR_SSL_CONNECTION_ERROR, unknown_sqlstate, + ER(CR_SSL_CONNECTION_ERROR), + "Embedded server libmysqld library doesn't support " + "SSL connections"); + return 1; + } + return 0; +} +#endif + + /* Note that the mysql argument must be initialized with mysql_init() before calling mysql_real_connect ! @@ -3592,6 +3620,11 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user, mysql->client_flag= client_flag; +#ifdef EMBEDDED_LIBRARY + if (embedded_ssl_check(mysql)) + goto error; +#endif + /* Part 2: invoke the plugin to send the authentication data to the server */ @@ -4271,10 +4304,14 @@ mysql_options(MYSQL *mysql,enum mysql_option option, const void *arg) mysql->reconnect= *(my_bool *) arg; break; case MYSQL_OPT_SSL_VERIFY_SERVER_CERT: +#if defined(HAVE_OPENSSL) && !defined(EMBEDDED_LIBRARY) if (*(my_bool*) arg) mysql->options.client_flag|= CLIENT_SSL_VERIFY_SERVER_CERT; else mysql->options.client_flag&= ~CLIENT_SSL_VERIFY_SERVER_CERT; +#elif defined(EMBEDDED_LIBRARY) + DBUG_RETURN(1); +#endif break; case MYSQL_PLUGIN_DIR: EXTENSION_SET_STRING(&mysql->options, plugin_dir, arg); @@ -4288,11 +4325,15 @@ mysql_options(MYSQL *mysql,enum mysql_option option, const void *arg) (*(my_bool*) arg) ? TRUE : FALSE; break; case MYSQL_OPT_SSL_MODE: +#if defined(HAVE_OPENSSL) && !defined(EMBEDDED_LIBRARY) if (*(uint *) arg == SSL_MODE_REQUIRED) { ENSURE_EXTENSIONS_PRESENT(&mysql->options); mysql->options.extension->ssl_mode= SSL_MODE_REQUIRED; } +#elif defined(EMBEDDED_LIBRARY) + DBUG_RETURN(1); +#endif break; default: DBUG_RETURN(1); From a50fcc118f7bba4d5fe97ab5dac33bfd15e24da4 Mon Sep 17 00:00:00 2001 From: Venkatesh Venugopal Date: Mon, 14 May 2018 11:39:42 +0530 Subject: [PATCH 0830/1221] Bug #27399620: BINLOG AND ENGINE BECOME INCONSISTENT WHEN BINLOG CACHE FILE GETS OUT OF SPACE Problem: -------- If the transaction size is bigger than the binlog_cache_size, server uses a file in 'tmpdir' for flushing the data. If the tmpdir partition is full, flush will fail with 'No Space' error. In such scenarios, 1. Flush errors were not handled properly in the gtid_before_write_cache function. 2. After preparing the transaction, client disconnection and rollback were hitting DBUG_ASSSERT(is_binlog_empty()) in binlog_cache_data::reset() function. Description: ------------ 1. In the gtid_before_write_cache function, while flushing GTID to the cache, a. write position of the cache is set to position 0. b. Gtid_log_event is flushed to the cache. c. write position is reset to the old position. In step 'a', reset_write_pos is invoked to set the write position to 0. If the cache has swapped to a file, it reinitializes it by calling reinit_io_cache() function. While reinitializing the cache, it tries to flush the cache to the file(file in tmpdir). Since the tmpdir partition is full, flush fails with 'No Space' error and returns from that function. Since reset_write_pos() or gtid_before_write_cache functions do not to check if there was a failure in resetting the position, the functions assume that the reset has happened and continues without returning immediately and hits an assert DBUG_ASSERT(!do_checksum || remains == 0) in MYSQL_BIN_LOG::do_write_cache() function. In release builds, though asserts do not happen, on flush errors, we expected an entry in the error log saying that there was an error while writing to binary log. But no such entry was there in the error log. 2. On client disconnection/rollback, the server rolls back the transaction. While doing so, it calls the binlog_cache_data::reset() which in turn calls the truncate() function wherein it truncates the binlog cache. truncate() function tries to reinitialize the cache and reinitialization fails(my_b_flush_io() fails). As a result, binlog_cache is not cleared and hits the DBUG_ASSERT(is_binlog_empty()). Fix: ---- 1. Flush errors have been handled in the gtid_before_write_cache() function. Now, the server will decide what action to take if this situation happens. If binlog_error_action == ABORT_SERVER, then it will abort the server after informing the client with 'ER_BINLOGGING_IMPOSSIBLE' error. If binlog_error_action == 'IGNORE_ERROR', then it will ignore the error and disable the binlog further until server is restarted again. The same will be mentioned in the error log file. 2. Two new functions have been added (set_flush_error and has_flush_error) to set and check the flush errors. On rollback/client disconnection, the check for flush_error is done and the cache is cleared in case of flush_errors. --- .../r/binlog_cache_write_failure.result | 64 +++++++ .../t/binlog_cache_write_failure-master.opt | 1 + .../binlog/t/binlog_cache_write_failure.test | 157 ++++++++++++++++++ sql/binlog.cc | 117 ++++++++++++- sql/log_event.cc | 13 +- 5 files changed, 346 insertions(+), 6 deletions(-) create mode 100644 mysql-test/suite/binlog/r/binlog_cache_write_failure.result create mode 100644 mysql-test/suite/binlog/t/binlog_cache_write_failure-master.opt create mode 100644 mysql-test/suite/binlog/t/binlog_cache_write_failure.test diff --git a/mysql-test/suite/binlog/r/binlog_cache_write_failure.result b/mysql-test/suite/binlog/r/binlog_cache_write_failure.result new file mode 100644 index 000000000000..0aafa2f3da26 --- /dev/null +++ b/mysql-test/suite/binlog/r/binlog_cache_write_failure.result @@ -0,0 +1,64 @@ +call mtr.add_suppression("An error occurred during flush stage of the commit"); +call mtr.add_suppression("Attempting backtrace. You can use the following information to find out*"); +RESET MASTER; +CREATE TABLE t1(i INT); + +# Case 1 (binlog_error_action = ABORT_SERVER) + +SET GLOBAL binlog_error_action = ABORT_SERVER; + +# Case 1.1 CLIENT DISCONNECTION +BEGIN; +INSERT INTO t1 VALUES (1); +SET SESSION debug= "+d,simulate_tmpdir_partition_full"; +INSERT INTO t1 VALUES (2); +INSERT INTO t1 VALUES (3); +ERROR HY000: Error writing file (Errcode: ##) +SET SESSION debug= "-d,simulate_tmpdir_partition_full"; + +# Case 1.2 ROLLBACK +BEGIN; +INSERT INTO t1 VALUES (1); +SET SESSION debug= "+d,simulate_tmpdir_partition_full"; +INSERT INTO t1 VALUES (2); +INSERT INTO t1 VALUES (3); +ERROR HY000: Error writing file (Errcode: ##) +ROLLBACK; +SET SESSION debug= "-d,simulate_tmpdir_partition_full"; + +# Case 1.3 COMMIT +BEGIN; +INSERT INTO t1 VALUES (1); +SET SESSION debug= "+d,simulate_tmpdir_partition_full"; +INSERT INTO t1 VALUES (2); +INSERT INTO t1 VALUES (3); +ERROR HY000: Error writing file (Errcode: ##) +COMMIT; +ERROR HY000: Binary logging not possible. Message: An error occurred during flush stage of the commit. 'binlog_error_action' is set to 'ABORT_SERVER'. Hence aborting the server. +include/assert_grep.inc [An error occurred during flush stage of the commit. 'binlog_error_action' is set to 'ABORT_SERVER'.] +include/assert.inc [Count of elements in t1 should be 0.] +include/assert.inc [Query is not binlogged as expected.] +TRUNCATE TABLE t1; + +# Case 2 (binlog_error_action = IGNORE_ERROR) + +RESET MASTER; +SET GLOBAL binlog_error_action= IGNORE_ERROR; +BEGIN; +INSERT INTO t1 VALUES (1); +SET SESSION debug= "+d,simulate_tmpdir_partition_full"; +INSERT INTO t1 VALUES (2); +INSERT INTO t1 VALUES (3); +ERROR HY000: Error writing file (Errcode: ##) +COMMIT; +Warnings: +Error 3 Error writing file MYSQLTEST_VARDIR/tmp/temp_file (Errcode: ##) +Error 1026 Error writing file MYSQLTEST_VARDIR/tmp/temp_file (Errcode: ##) +SET SESSION debug= "-d,simulate_tmpdir_partition_full"; +include/assert.inc [Count of elements in t1 should be 2.] +SHOW BINARY LOGS; +ERROR HY000: You are not using binary logging +include/assert_grep.inc [An error occurred during flush stage of the commit. 'binlog_error_action' is set to 'IGNORE_ERROR'.] +include/assert.inc [Count of elements in t1 should be 2.] +DROP TABLE t1; +RESET MASTER; diff --git a/mysql-test/suite/binlog/t/binlog_cache_write_failure-master.opt b/mysql-test/suite/binlog/t/binlog_cache_write_failure-master.opt new file mode 100644 index 000000000000..f546e12ea4e8 --- /dev/null +++ b/mysql-test/suite/binlog/t/binlog_cache_write_failure-master.opt @@ -0,0 +1 @@ +--default-storage-engine=InnoDB --gtid-mode=on --enforce-gtid-consistency=on --log-slave-updates diff --git a/mysql-test/suite/binlog/t/binlog_cache_write_failure.test b/mysql-test/suite/binlog/t/binlog_cache_write_failure.test new file mode 100644 index 000000000000..1f79388f22e2 --- /dev/null +++ b/mysql-test/suite/binlog/t/binlog_cache_write_failure.test @@ -0,0 +1,157 @@ +# === Purpose === +# +# Verify that disk full/out of space errors generated during the flush +# stage of binlog commit are properly handled by the server. +# +# === Implementation === +# +# 1) Simulate the disk full scenario using dbug simulations so that +# every alternate statement fails with 'No Space Error'. +# 2) With binlog_error_action= ABORT_SERVER, prepare a transaction +# and perform the following operations. +# 2.1) Disconnect +# 2.2) Rollback +# 2.3) Commit +# 3) Repeat step 2 with binlog_error_action= IGNORE_ERROR. +# +# === References === +# +# Bug #27399620 BINLOG AND ENGINE BECOME INCONSISTENT WHEN BINLOG CACHE FILE +# GETS OUT OF SPACE + +--source include/have_gtid.inc +--source include/have_binlog_format_row.inc +--source include/have_log_bin.inc +--source include/have_debug.inc +# Don't test this under valgrind, memory leaks will occur +--source include/not_valgrind.inc +# Avoid CrashReporter popup on Mac +--source include/not_crashrep.inc + +call mtr.add_suppression("An error occurred during flush stage of the commit"); +call mtr.add_suppression("Attempting backtrace. You can use the following information to find out*"); + +RESET MASTER; +CREATE TABLE t1(i INT); + +--echo +--echo # Case 1 (binlog_error_action = ABORT_SERVER) +--echo +--let $log_pos_before = query_get_value("SHOW BINARY LOGS", File_size, 1) +SET GLOBAL binlog_error_action = ABORT_SERVER; +--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect + +--echo +--echo # Case 1.1 CLIENT DISCONNECTION +connect(con1,localhost,root,,); +--connection con1 +BEGIN; +INSERT INTO t1 VALUES (1); +SET SESSION debug= "+d,simulate_tmpdir_partition_full"; +INSERT INTO t1 VALUES (2); +--replace_regex /.*Error writing file.*/Error writing file (Errcode: ##)/ +--error ER_ERROR_ON_WRITE, +INSERT INTO t1 VALUES (3); +SET SESSION debug= "-d,simulate_tmpdir_partition_full"; +--disconnect con1 + +--echo +--echo # Case 1.2 ROLLBACK +--connection default +BEGIN; +INSERT INTO t1 VALUES (1); +SET SESSION debug= "+d,simulate_tmpdir_partition_full"; +INSERT INTO t1 VALUES (2); +--replace_regex /.*Error writing file.*/Error writing file (Errcode: ##)/ +--error ER_ERROR_ON_WRITE, +INSERT INTO t1 VALUES (3); +ROLLBACK; +SET SESSION debug= "-d,simulate_tmpdir_partition_full"; + +--echo +--echo # Case 1.3 COMMIT +BEGIN; +INSERT INTO t1 VALUES (1); +SET SESSION debug= "+d,simulate_tmpdir_partition_full"; +INSERT INTO t1 VALUES (2); +--replace_regex /.*Error writing file.*/Error writing file (Errcode: ##)/ +--error ER_ERROR_ON_WRITE, +INSERT INTO t1 VALUES (3); + +# Check that flush error causing server to abort and client gets +# ER_BINLOG_LOGGING_IMPOSSIBLE when binlog_error_action= 'ABORT_SERVER'. +--replace_result $MYSQLTEST_VARDIR/ MYSQLTEST_VARDIR/ +--error ER_BINLOG_LOGGING_IMPOSSIBLE +COMMIT; + +--exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect +--enable_reconnect +--source include/wait_until_connected_again.inc + +# Check that error is present in error log +--let $assert_file= $MYSQLTEST_VARDIR/log/mysqld.1.err +--let $assert_only_after = CURRENT_TEST: binlog.binlog_cache_write_failure +--let $assert_count = 1 +--let $assert_select = An error occurred during flush stage of the commit. 'binlog_error_action' is set to 'ABORT_SERVER'. +--let $assert_text = An error occurred during flush stage of the commit. 'binlog_error_action' is set to 'ABORT_SERVER'. +--source include/assert_grep.inc + +# Check that transaction is not committed +--let $assert_cond= COUNT(*) = 0 FROM t1; +--let $assert_text= Count of elements in t1 should be 0. +--source include/assert.inc + +# Check that transaction is not binlogged as well +--let $log_pos_after = query_get_value("SHOW BINARY LOGS", File_size, 1) +--let $assert_cond = $log_pos_before = $log_pos_after +--let $assert_text = Query is not binlogged as expected. +--source include/assert.inc +TRUNCATE TABLE t1; + +--echo +--echo # Case 2 (binlog_error_action = IGNORE_ERROR) +--echo +RESET MASTER; +SET GLOBAL binlog_error_action= IGNORE_ERROR; + +BEGIN; +INSERT INTO t1 VALUES (1); +SET SESSION debug= "+d,simulate_tmpdir_partition_full"; +INSERT INTO t1 VALUES (2); +--replace_regex /.*Error writing file.*/Error writing file (Errcode: ##)/ +--error ER_ERROR_ON_WRITE, +INSERT INTO t1 VALUES (3); +--replace_regex /.*Error writing file.*/Error writing file MYSQLTEST_VARDIR\/tmp\/temp_file (Errcode: ##)/ +COMMIT; +SET SESSION debug= "-d,simulate_tmpdir_partition_full"; + +# Check that transaction is committed +--let $assert_cond = COUNT(*) = 2 FROM t1; +--let $assert_text = Count of elements in t1 should be 2. +--source include/assert.inc + +# Test to prove that binary log is disabled +--error ER_NO_BINARY_LOGGING +SHOW BINARY LOGS; + +# Check that error is present in error log +--let $assert_file= $MYSQLTEST_VARDIR/log/mysqld.1.err +--let $assert_only_after = CURRENT_TEST: binlog.binlog_cache_write_failure +--let $assert_count = 1 +--let $assert_select = An error occurred during flush stage of the commit. 'binlog_error_action' is set to 'IGNORE_ERROR'. +--let $assert_text = An error occurred during flush stage of the commit. 'binlog_error_action' is set to 'IGNORE_ERROR'. +--source include/assert_grep.inc + +# Restart so that binary log is enabled again and we can do the below test +--source include/restart_mysqld.inc + +# Check that transaction is committed (binlog position check cannot be done +# as we would have written STOP_EVENT in the binlog while closing +# it) +--let $assert_cond = COUNT(*) = 2 FROM t1; +--let $assert_text = Count of elements in t1 should be 2. +--source include/assert.inc + +# Cleanup +DROP TABLE t1; +RESET MASTER; diff --git a/sql/binlog.cc b/sql/binlog.cc index 30413ea916ea..68e0631547c9 100644 --- a/sql/binlog.cc +++ b/sql/binlog.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2009, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2009, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -362,6 +362,36 @@ class binlog_cache_data return flags.incident; } + /** + Sets the binlog_cache_data::Flags::flush_error flag if there + is an error while flushing cache to the file. + + @param thd The client thread that is executing the transaction. + */ + void set_flush_error(THD *thd) + { + flags.flush_error= true; + if(is_trx_cache()) + { + /* + If the cache is a transactional cache and if the write + has failed due to ENOSPC, then my_write() would have + set EE_WRITE error, so clear the error and create an + equivalent server error. + */ + if (thd->is_error()) + thd->clear_error(); + char errbuf[MYSYS_STRERROR_SIZE]; + my_error(ER_ERROR_ON_WRITE, MYF(MY_WME), my_filename(cache_log.file), + errno, my_strerror(errbuf, sizeof(errbuf), errno)); + } + } + + bool get_flush_error(void) const + { + return flags.flush_error; + } + bool has_xid() const { // There should only be an XID event if we are transactional DBUG_ASSERT((flags.transactional && flags.with_xid) || !flags.with_xid); @@ -406,6 +436,7 @@ class binlog_cache_data flags.with_xid= false; flags.immediate= false; flags.finalized= false; + flags.flush_error= false; /* The truncate function calls reinit_io_cache that calls my_b_flush_io_cache which may increase disk_writes. This breaks the disk_writes use by the @@ -468,7 +499,13 @@ class binlog_cache_data { DBUG_PRINT("info", ("truncating to position %lu", (ulong) pos)); remove_pending_event(); - reinit_io_cache(&cache_log, WRITE_CACHE, pos, 0, 0); + /* + Whenever there is an error while flushing cache to file, + the local cache will not be in a normal state and the same + cache cannot be used without facing an assert. + So, clear the cache if there is a flush error. + */ + reinit_io_cache(&cache_log, WRITE_CACHE, pos, 0, get_flush_error()); cache_log.end_of_file= saved_max_binlog_cache_size; } @@ -522,6 +559,12 @@ class binlog_cache_data This indicates that the cache contain an XID event. */ bool with_xid:1; + + /* + This flag is set to 'true' when there is an error while flushing the + I/O cache to file. + */ + bool flush_error:1; } flags; private: @@ -946,6 +989,14 @@ int binlog_cache_data::write_event(THD *thd, Log_event *ev) { DBUG_EXECUTE_IF("simulate_disk_full_at_flush_pending", {DBUG_SET("+d,simulate_file_write_error");}); + + DBUG_EXECUTE_IF("simulate_tmpdir_partition_full", + { + static int count= -1; + count++; + if(count % 4 == 3 && ev->get_type_code() == WRITE_ROWS_EVENT) + DBUG_SET("+d,simulate_temp_file_write_error"); + }); if (ev->write(&cache_log) != 0) { DBUG_EXECUTE_IF("simulate_disk_full_at_flush_pending", @@ -961,6 +1012,19 @@ int binlog_cache_data::write_event(THD *thd, Log_event *ev) */ DBUG_SET("+d,simulate_do_write_cache_failure"); }); + + DBUG_EXECUTE_IF("simulate_temp_file_write_error", + { + DBUG_SET("-d,simulate_temp_file_write_error"); + }); + /* + If the flush has failed due to ENOSPC error, set the + flush_error flag. + */ + if (thd->is_error() && my_errno == ENOSPC) + { + set_flush_error(thd); + } DBUG_RETURN(1); } if (ev->get_type_code() == XID_EVENT) @@ -1096,12 +1160,41 @@ gtid_before_write_cache(THD* thd, binlog_cache_data* cache_data) Gtid_log_event gtid_ev(thd, cache_data->is_trx_cache(), &cached_group->spec); bool using_file= cache_data->cache_log.pos_in_file > 0; + + DBUG_EXECUTE_IF("simulate_tmpdir_partition_full", + { + DBUG_SET("+d,simulate_temp_file_write_error"); + }); + my_off_t saved_position= cache_data->reset_write_pos(0, using_file); - error= gtid_ev.write(&cache_data->cache_log); - cache_data->reset_write_pos(saved_position, using_file); + + if (!cache_data->cache_log.error) + { + if (gtid_ev.write(&cache_data->cache_log)) + goto err; + cache_data->reset_write_pos(saved_position, using_file); + } + + if (cache_data->cache_log.error) + goto err; } DBUG_RETURN(error); + +err: + DBUG_EXECUTE_IF("simulate_tmpdir_partition_full", + { + DBUG_SET("-d,simulate_temp_file_write_error"); + }); + /* + If the reinit_io_cache has failed, set the flush_error flag. + */ + if (cache_data->cache_log.error) + { + cache_data->set_flush_error(thd); + } + DBUG_RETURN(1); + } /** @@ -6062,6 +6155,14 @@ bool MYSQL_BIN_LOG::write_cache(THD *thd, binlog_cache_data *cache_data) sql_print_error(ER(ER_ERROR_ON_WRITE), name, errno, my_strerror(errbuf, sizeof(errbuf), errno)); } + + /* + If the flush has failed due to ENOSPC, set the flush_error flag. + */ + if (cache->error && thd->is_error() && my_errno == ENOSPC) + { + cache_data->set_flush_error(thd); + } thd->commit_error= THD::CE_FLUSH_ERROR; DBUG_RETURN(1); @@ -7099,6 +7200,14 @@ void MYSQL_BIN_LOG::handle_binlog_flush_or_sync_error(THD *thd, } close(LOG_CLOSE_INDEX|LOG_CLOSE_STOP_EVENT, false/*need_lock_log=false*/, true/*need_lock_index=true*/); + /* + If there is a write error (flush/sync stage) and if + binlog_error_action=IGNORE_ERROR, clear the error + and allow the commit to happen in storage engine. + */ + if (check_write_error(thd)) + thd->clear_error(); + if (need_lock_log) mysql_mutex_unlock(&LOCK_log); DEBUG_SYNC(thd, "after_binlog_closed_due_to_error"); diff --git a/sql/log_event.cc b/sql/log_event.cc index e0b2d89e578e..fd804a9e45ca 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -1036,10 +1036,19 @@ my_bool Log_event::need_checksum() bool Log_event::wrapper_my_b_safe_write(IO_CACHE* file, const uchar* buf, ulong size) { + DBUG_EXECUTE_IF("simulate_temp_file_write_error", + { + file->write_pos = file->write_end; + DBUG_SET("+d,simulate_file_write_error"); + }); if (need_checksum() && size != 0) crc= my_checksum(crc, buf, size); - - return my_b_safe_write(file, buf, size); + bool ret = my_b_safe_write(file, buf, size); + DBUG_EXECUTE_IF("simulate_temp_file_write_error", + { + DBUG_SET("-d,simulate_file_write_error"); + }); + return ret; } bool Log_event::write_footer(IO_CACHE* file) From 261a954885099cd512b6d13276c7ab7d30fbb1b3 Mon Sep 17 00:00:00 2001 From: Ajo Robert Date: Mon, 14 May 2018 20:33:47 +0530 Subject: [PATCH 0831/1221] Bug#27330634 ASSERTION `LENGTH > 0' FAILED Problem: Debug builds fail an assertion when trying to do ALTER TABLE on an ARCHIVE engine table with a GEOMETRY NOT NULL column containing empty strings. Release builds return an error. GEOMETRY columns should never hold empty strings as it is not a valid geometric object. This is enforced by Field_geom::store_internal(). However, in non-strict mode, it is possible to trick the server into storing empty strings in GEOMETRY NOT NULL columns by inserting NULL, which is then converted to an empty string. Later, when doing ALTER TABLE, these empty string values fail an assertion in Field_geom::store_internal(). Fix: Remove the failing assertion, as such invalid values may exist, and strengthen the check for too short geometry values in Field_geom::store_internal(). Raise an error if trying to insert a NULL value to a GEOMETRY NOT NULL column, regardless of strict mode settings. Note: This is the backport of Bug#85059 Change-Id: I8a0a5da8c46f2755d4bf6e0c6ab0fa3d7e2d5048 --- sql/field.cc | 20 ++++++++++---------- sql/field_conv.cc | 9 ++++++++- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/sql/field.cc b/sql/field.cc index 791de85f61ab..d6191fcb0c00 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -8729,17 +8729,17 @@ type_conversion_status Field_geom::store_internal(const char *from, size_t length, const CHARSET_INFO *cs) { - DBUG_ASSERT(length > 0); - // Check that the given WKB - // 1. isn't marked as bad geometry data - // 2. isn't shorter than empty geometrycollection - // 3. is a valid geometry type - // 4. is well formed - if (from == Geometry::bad_geometry_data.ptr() || // 1 - length < SRID_SIZE + WKB_HEADER_SIZE + sizeof(uint32) || // 2 - !Geometry::is_valid_geotype(uint4korr(from + SRID_SIZE + 1)) || // 3 - !Geometry::is_well_formed(from, length, // 4 + // 1. is at least 13 bytes long (length of GEOMETRYCOLLECTION EMPTY) + // 2. isn't marked as bad geometry data + // 3. isn't shorter than empty geometrycollection + // 4. is a valid geometry type + // 5. is well formed + if (length < 13 || // 1 + from == Geometry::bad_geometry_data.ptr() || // 2 + length < SRID_SIZE + WKB_HEADER_SIZE + sizeof(uint32) || // 3 + !Geometry::is_valid_geotype(uint4korr(from + SRID_SIZE + 1)) || // 4 + !Geometry::is_well_formed(from, length, // 5 geometry_type_to_wkb_type(geom_type), Geometry::wkb_ndr)) { diff --git a/sql/field_conv.cc b/sql/field_conv.cc index 8ec25a09dbdc..b8716ba20f0d 100644 --- a/sql/field_conv.cc +++ b/sql/field_conv.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -232,6 +232,13 @@ set_field_to_null_with_conversions(Field *field, bool no_conversions) switch (field->table->in_use->count_cuted_fields) { case CHECK_FIELD_WARN: + // There's no valid conversion for geometry values. + if (field->type() == MYSQL_TYPE_GEOMETRY) + { + my_error(ER_BAD_NULL_ERROR, MYF(0), field->field_name); + return TYPE_ERR_NULL_CONSTRAINT_VIOLATION; + } + field->set_warning(Sql_condition::SL_WARNING, ER_BAD_NULL_ERROR, 1); /* fall through */ case CHECK_FIELD_IGNORE: From e82258b89d12cb9fb6f00e5acad0b247921bddda Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Fri, 27 Apr 2018 15:12:33 +0200 Subject: [PATCH 0832/1221] PS-3968: Tune clang-format diff checkings for existing SQL and InnoDB coding standards Create two `.clang-format` config files: one for InnoDB and one for the rest (SQL). The files are compatible with clang-format-5.0 or newer. Moreover adding -style=file causes that a proper submodule .clang-format for RocksDB and TokuDB will be used. --- .clang-format | 111 +++++++++++++++++++++++++++++++++ .travis.yml | 2 +- storage/innobase/.clang-format | 111 +++++++++++++++++++++++++++++++++ 3 files changed, 223 insertions(+), 1 deletion(-) create mode 100644 .clang-format create mode 100644 storage/innobase/.clang-format diff --git a/.clang-format b/.clang-format new file mode 100644 index 000000000000..e208116e918f --- /dev/null +++ b/.clang-format @@ -0,0 +1,111 @@ +# generated with: +# clang-format-5.0 -style=Google --dump-config + +Language: Cpp +# BasedOnStyle: Google +AccessModifierOffset: -1 +AlignAfterOpenBracket: Align +AlignConsecutiveAssignments: false +AlignEscapedNewlines: Left +AlignOperands: true +AlignTrailingComments: true +AllowAllParametersOfDeclarationOnNextLine: true +AllowShortBlocksOnASingleLine: false +AllowShortFunctionsOnASingleLine: All +AlwaysBreakAfterDefinitionReturnType: None +AlwaysBreakAfterReturnType: None +AlwaysBreakBeforeMultilineStrings: true +AlwaysBreakTemplateDeclarations: true +BinPackArguments: true +BinPackParameters: true +BreakBeforeBinaryOperators: None +BreakBeforeInheritanceComma: false +BreakBeforeTernaryOperators: true +BreakConstructorInitializersBeforeComma: false +BreakConstructorInitializers: BeforeColon +BreakAfterJavaFieldAnnotations: false +BreakStringLiterals: true +CommentPragmas: '^ IWYU pragma:' +CompactNamespaces: false +ConstructorInitializerAllOnOneLineOrOnePerLine: true +ConstructorInitializerIndentWidth: 4 +ContinuationIndentWidth: 4 +Cpp11BracedListStyle: true +DisableFormat: false +ExperimentalAutoDetectBinPacking: false +FixNamespaceComments: true +ForEachMacros: + - foreach + - Q_FOREACH + - BOOST_FOREACH +IncludeCategories: + - Regex: '^<.*\.h>' + Priority: 1 + - Regex: '^<.*' + Priority: 2 + - Regex: '.*' + Priority: 3 +IncludeIsMainRegex: '([-_](test|unittest))?$' +IndentCaseLabels: true +IndentWidth: 2 +IndentWrappedFunctionNames: false +JavaScriptQuotes: Leave +JavaScriptWrapImports: true +KeepEmptyLinesAtTheStartOfBlocks: false +MacroBlockBegin: '' +MacroBlockEnd: '' +NamespaceIndentation: None +ObjCBlockIndentWidth: 2 +ObjCSpaceAfterProperty: false +ObjCSpaceBeforeProtocolList: false +PenaltyBreakAssignment: 2 +PenaltyBreakBeforeFirstCallParameter: 1 +PenaltyBreakComment: 300 +PenaltyBreakFirstLessLess: 120 +PenaltyBreakString: 1000 +PenaltyExcessCharacter: 1000000 +PenaltyReturnTypeOnItsOwnLine: 200 +SortUsingDeclarations: true +SpaceAfterCStyleCast: false +SpaceAfterTemplateKeyword: true +SpaceBeforeParens: ControlStatements +SpaceInEmptyParentheses: false +SpacesBeforeTrailingComments: 2 +SpacesInAngles: false +SpacesInContainerLiterals: true +SpacesInCStyleCastParentheses: false +SpacesInParentheses: false +SpacesInSquareBrackets: false +Standard: Auto +TabWidth: 8 +UseTab: Never + + +# changes for MySQL 5.x +AlignConsecutiveDeclarations: true +AllowShortCaseLabelsOnASingleLine: true +AllowShortIfStatementsOnASingleLine: false +AllowShortLoopsOnASingleLine: false +BreakBeforeBraces: Custom +BraceWrapping: + AfterClass: false + AfterControlStatement: true + AfterEnum: false + AfterFunction: true + AfterNamespace: false + AfterObjCDeclaration: false + AfterStruct: false + AfterUnion: false + BeforeCatch: false + BeforeElse: true + IndentBraces: false + SplitEmptyFunction: true + SplitEmptyRecord: true + SplitEmptyNamespace: true +ColumnLimit: 78 +DerivePointerAlignment: false +MaxEmptyLinesToKeep: 2 +PointerAlignment: Right +ReflowComments: false +SortIncludes: false +SpaceBeforeAssignmentOperators: false diff --git a/.travis.yml b/.travis.yml index d2ee51b49929..513b6a257d58 100644 --- a/.travis.yml +++ b/.travis.yml @@ -23,7 +23,7 @@ matrix: script: - wget https://llvm.org/svn/llvm-project/cfe/trunk/tools/clang-format/clang-format-diff.py - chmod a+x clang-format-diff.py - - git diff -U0 --no-color HEAD^1 | ./clang-format-diff.py -p1 >_GIT_DIFF + - git diff -U0 --no-color HEAD^1 | ./clang-format-diff.py -style=file -p1 >_GIT_DIFF - '[ ! -s _GIT_DIFF ] && { echo The last git commit is clang-formatted; travis_terminate 0; } || { cat _GIT_DIFF; travis_terminate 1; }' diff --git a/storage/innobase/.clang-format b/storage/innobase/.clang-format new file mode 100644 index 000000000000..d757d0a5a054 --- /dev/null +++ b/storage/innobase/.clang-format @@ -0,0 +1,111 @@ +# generated with: +# clang-format-5.0 -style=Google --dump-config + +Language: Cpp +# BasedOnStyle: Google +AccessModifierOffset: -1 +AlignAfterOpenBracket: Align +AlignConsecutiveAssignments: false +AlignEscapedNewlines: Left +AlignOperands: true +AlignTrailingComments: true +AllowAllParametersOfDeclarationOnNextLine: true +AllowShortBlocksOnASingleLine: false +AllowShortCaseLabelsOnASingleLine: false +AllowShortFunctionsOnASingleLine: All +AlwaysBreakAfterDefinitionReturnType: None +AlwaysBreakBeforeMultilineStrings: true +AlwaysBreakTemplateDeclarations: true +BinPackArguments: true +BinPackParameters: true +BraceWrapping: + AfterClass: false + AfterControlStatement: false + AfterEnum: false + AfterFunction: false + AfterNamespace: false + AfterObjCDeclaration: false + AfterStruct: false + AfterUnion: false + BeforeCatch: false + BeforeElse: false + IndentBraces: false + SplitEmptyFunction: true + SplitEmptyRecord: true + SplitEmptyNamespace: true +BreakBeforeBinaryOperators: None +BreakBeforeBraces: Attach +BreakBeforeInheritanceComma: false +BreakBeforeTernaryOperators: true +BreakConstructorInitializersBeforeComma: false +BreakConstructorInitializers: BeforeColon +BreakAfterJavaFieldAnnotations: false +BreakStringLiterals: true +CommentPragmas: '^ IWYU pragma:' +CompactNamespaces: false +ConstructorInitializerAllOnOneLineOrOnePerLine: true +ConstructorInitializerIndentWidth: 4 +ContinuationIndentWidth: 4 +Cpp11BracedListStyle: true +DisableFormat: false +ExperimentalAutoDetectBinPacking: false +FixNamespaceComments: true +ForEachMacros: + - foreach + - Q_FOREACH + - BOOST_FOREACH +IncludeCategories: + - Regex: '^<.*\.h>' + Priority: 1 + - Regex: '^<.*' + Priority: 2 + - Regex: '.*' + Priority: 3 +IncludeIsMainRegex: '([-_](test|unittest))?$' +IndentCaseLabels: true +IndentWrappedFunctionNames: false +JavaScriptQuotes: Leave +JavaScriptWrapImports: true +KeepEmptyLinesAtTheStartOfBlocks: false +MacroBlockBegin: '' +MacroBlockEnd: '' +NamespaceIndentation: None +ObjCBlockIndentWidth: 2 +ObjCSpaceAfterProperty: false +ObjCSpaceBeforeProtocolList: false +PenaltyBreakAssignment: 2 +PenaltyBreakBeforeFirstCallParameter: 1 +PenaltyBreakComment: 300 +PenaltyBreakFirstLessLess: 120 +PenaltyBreakString: 1000 +PenaltyExcessCharacter: 1000000 +PenaltyReturnTypeOnItsOwnLine: 200 +SortUsingDeclarations: true +SpaceAfterTemplateKeyword: true +SpaceBeforeAssignmentOperators: true +SpaceBeforeParens: ControlStatements +SpaceInEmptyParentheses: false +SpacesBeforeTrailingComments: 2 +SpacesInAngles: false +SpacesInContainerLiterals: true +SpacesInCStyleCastParentheses: false +SpacesInParentheses: false +SpacesInSquareBrackets: false +Standard: Auto +TabWidth: 8 + + +# changes for MySQL 5.x (InnoDB) +AlignConsecutiveDeclarations: true +AllowShortIfStatementsOnASingleLine: false +AllowShortLoopsOnASingleLine: false +AlwaysBreakAfterReturnType: All +ColumnLimit: 78 +DerivePointerAlignment: false +IndentWidth: 8 +MaxEmptyLinesToKeep: 2 +PointerAlignment: Right +ReflowComments: false +SortIncludes: false +SpaceAfterCStyleCast: true +UseTab: Always From 467f90e3992ce2cacc6b4b8087bd310e76609757 Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Fri, 27 Apr 2018 15:12:33 +0200 Subject: [PATCH 0833/1221] PS-3968: Tune clang-format diff checkings for existing SQL and InnoDB coding standards Create two `.clang-format` config files: one for InnoDB and one for the rest (SQL). The files are compatible with clang-format-5.0 or newer. Moreover adding -style=file causes that a proper submodule .clang-format for RocksDB and TokuDB will be used. --- .clang-format | 111 +++++++++++++++++++++++++++++++++ .travis.yml | 2 +- storage/innobase/.clang-format | 111 +++++++++++++++++++++++++++++++++ 3 files changed, 223 insertions(+), 1 deletion(-) create mode 100644 .clang-format create mode 100644 storage/innobase/.clang-format diff --git a/.clang-format b/.clang-format new file mode 100644 index 000000000000..e208116e918f --- /dev/null +++ b/.clang-format @@ -0,0 +1,111 @@ +# generated with: +# clang-format-5.0 -style=Google --dump-config + +Language: Cpp +# BasedOnStyle: Google +AccessModifierOffset: -1 +AlignAfterOpenBracket: Align +AlignConsecutiveAssignments: false +AlignEscapedNewlines: Left +AlignOperands: true +AlignTrailingComments: true +AllowAllParametersOfDeclarationOnNextLine: true +AllowShortBlocksOnASingleLine: false +AllowShortFunctionsOnASingleLine: All +AlwaysBreakAfterDefinitionReturnType: None +AlwaysBreakAfterReturnType: None +AlwaysBreakBeforeMultilineStrings: true +AlwaysBreakTemplateDeclarations: true +BinPackArguments: true +BinPackParameters: true +BreakBeforeBinaryOperators: None +BreakBeforeInheritanceComma: false +BreakBeforeTernaryOperators: true +BreakConstructorInitializersBeforeComma: false +BreakConstructorInitializers: BeforeColon +BreakAfterJavaFieldAnnotations: false +BreakStringLiterals: true +CommentPragmas: '^ IWYU pragma:' +CompactNamespaces: false +ConstructorInitializerAllOnOneLineOrOnePerLine: true +ConstructorInitializerIndentWidth: 4 +ContinuationIndentWidth: 4 +Cpp11BracedListStyle: true +DisableFormat: false +ExperimentalAutoDetectBinPacking: false +FixNamespaceComments: true +ForEachMacros: + - foreach + - Q_FOREACH + - BOOST_FOREACH +IncludeCategories: + - Regex: '^<.*\.h>' + Priority: 1 + - Regex: '^<.*' + Priority: 2 + - Regex: '.*' + Priority: 3 +IncludeIsMainRegex: '([-_](test|unittest))?$' +IndentCaseLabels: true +IndentWidth: 2 +IndentWrappedFunctionNames: false +JavaScriptQuotes: Leave +JavaScriptWrapImports: true +KeepEmptyLinesAtTheStartOfBlocks: false +MacroBlockBegin: '' +MacroBlockEnd: '' +NamespaceIndentation: None +ObjCBlockIndentWidth: 2 +ObjCSpaceAfterProperty: false +ObjCSpaceBeforeProtocolList: false +PenaltyBreakAssignment: 2 +PenaltyBreakBeforeFirstCallParameter: 1 +PenaltyBreakComment: 300 +PenaltyBreakFirstLessLess: 120 +PenaltyBreakString: 1000 +PenaltyExcessCharacter: 1000000 +PenaltyReturnTypeOnItsOwnLine: 200 +SortUsingDeclarations: true +SpaceAfterCStyleCast: false +SpaceAfterTemplateKeyword: true +SpaceBeforeParens: ControlStatements +SpaceInEmptyParentheses: false +SpacesBeforeTrailingComments: 2 +SpacesInAngles: false +SpacesInContainerLiterals: true +SpacesInCStyleCastParentheses: false +SpacesInParentheses: false +SpacesInSquareBrackets: false +Standard: Auto +TabWidth: 8 +UseTab: Never + + +# changes for MySQL 5.x +AlignConsecutiveDeclarations: true +AllowShortCaseLabelsOnASingleLine: true +AllowShortIfStatementsOnASingleLine: false +AllowShortLoopsOnASingleLine: false +BreakBeforeBraces: Custom +BraceWrapping: + AfterClass: false + AfterControlStatement: true + AfterEnum: false + AfterFunction: true + AfterNamespace: false + AfterObjCDeclaration: false + AfterStruct: false + AfterUnion: false + BeforeCatch: false + BeforeElse: true + IndentBraces: false + SplitEmptyFunction: true + SplitEmptyRecord: true + SplitEmptyNamespace: true +ColumnLimit: 78 +DerivePointerAlignment: false +MaxEmptyLinesToKeep: 2 +PointerAlignment: Right +ReflowComments: false +SortIncludes: false +SpaceBeforeAssignmentOperators: false diff --git a/.travis.yml b/.travis.yml index fd732bd6c7fb..b0689f43c9c3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -23,7 +23,7 @@ matrix: script: - wget https://llvm.org/svn/llvm-project/cfe/trunk/tools/clang-format/clang-format-diff.py - chmod a+x clang-format-diff.py - - git diff -U0 --no-color HEAD^1 | ./clang-format-diff.py -p1 >_GIT_DIFF + - git diff -U0 --no-color HEAD^1 | ./clang-format-diff.py -style=file -p1 >_GIT_DIFF - '[ ! -s _GIT_DIFF ] && { echo The last git commit is clang-formatted; travis_terminate 0; } || { cat _GIT_DIFF; travis_terminate 1; }' diff --git a/storage/innobase/.clang-format b/storage/innobase/.clang-format new file mode 100644 index 000000000000..d757d0a5a054 --- /dev/null +++ b/storage/innobase/.clang-format @@ -0,0 +1,111 @@ +# generated with: +# clang-format-5.0 -style=Google --dump-config + +Language: Cpp +# BasedOnStyle: Google +AccessModifierOffset: -1 +AlignAfterOpenBracket: Align +AlignConsecutiveAssignments: false +AlignEscapedNewlines: Left +AlignOperands: true +AlignTrailingComments: true +AllowAllParametersOfDeclarationOnNextLine: true +AllowShortBlocksOnASingleLine: false +AllowShortCaseLabelsOnASingleLine: false +AllowShortFunctionsOnASingleLine: All +AlwaysBreakAfterDefinitionReturnType: None +AlwaysBreakBeforeMultilineStrings: true +AlwaysBreakTemplateDeclarations: true +BinPackArguments: true +BinPackParameters: true +BraceWrapping: + AfterClass: false + AfterControlStatement: false + AfterEnum: false + AfterFunction: false + AfterNamespace: false + AfterObjCDeclaration: false + AfterStruct: false + AfterUnion: false + BeforeCatch: false + BeforeElse: false + IndentBraces: false + SplitEmptyFunction: true + SplitEmptyRecord: true + SplitEmptyNamespace: true +BreakBeforeBinaryOperators: None +BreakBeforeBraces: Attach +BreakBeforeInheritanceComma: false +BreakBeforeTernaryOperators: true +BreakConstructorInitializersBeforeComma: false +BreakConstructorInitializers: BeforeColon +BreakAfterJavaFieldAnnotations: false +BreakStringLiterals: true +CommentPragmas: '^ IWYU pragma:' +CompactNamespaces: false +ConstructorInitializerAllOnOneLineOrOnePerLine: true +ConstructorInitializerIndentWidth: 4 +ContinuationIndentWidth: 4 +Cpp11BracedListStyle: true +DisableFormat: false +ExperimentalAutoDetectBinPacking: false +FixNamespaceComments: true +ForEachMacros: + - foreach + - Q_FOREACH + - BOOST_FOREACH +IncludeCategories: + - Regex: '^<.*\.h>' + Priority: 1 + - Regex: '^<.*' + Priority: 2 + - Regex: '.*' + Priority: 3 +IncludeIsMainRegex: '([-_](test|unittest))?$' +IndentCaseLabels: true +IndentWrappedFunctionNames: false +JavaScriptQuotes: Leave +JavaScriptWrapImports: true +KeepEmptyLinesAtTheStartOfBlocks: false +MacroBlockBegin: '' +MacroBlockEnd: '' +NamespaceIndentation: None +ObjCBlockIndentWidth: 2 +ObjCSpaceAfterProperty: false +ObjCSpaceBeforeProtocolList: false +PenaltyBreakAssignment: 2 +PenaltyBreakBeforeFirstCallParameter: 1 +PenaltyBreakComment: 300 +PenaltyBreakFirstLessLess: 120 +PenaltyBreakString: 1000 +PenaltyExcessCharacter: 1000000 +PenaltyReturnTypeOnItsOwnLine: 200 +SortUsingDeclarations: true +SpaceAfterTemplateKeyword: true +SpaceBeforeAssignmentOperators: true +SpaceBeforeParens: ControlStatements +SpaceInEmptyParentheses: false +SpacesBeforeTrailingComments: 2 +SpacesInAngles: false +SpacesInContainerLiterals: true +SpacesInCStyleCastParentheses: false +SpacesInParentheses: false +SpacesInSquareBrackets: false +Standard: Auto +TabWidth: 8 + + +# changes for MySQL 5.x (InnoDB) +AlignConsecutiveDeclarations: true +AllowShortIfStatementsOnASingleLine: false +AllowShortLoopsOnASingleLine: false +AlwaysBreakAfterReturnType: All +ColumnLimit: 78 +DerivePointerAlignment: false +IndentWidth: 8 +MaxEmptyLinesToKeep: 2 +PointerAlignment: Right +ReflowComments: false +SortIncludes: false +SpaceAfterCStyleCast: true +UseTab: Always From bc41f7d1b8b9c6a957693af7d78724db03666d29 Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Fri, 27 Apr 2018 15:12:33 +0200 Subject: [PATCH 0834/1221] PS-3968: Tune clang-format diff checkings for existing SQL and InnoDB coding standards Create two `.clang-format` config files: one for InnoDB and one for the rest (SQL). The files are compatible with clang-format-5.0 or newer. Moreover adding -style=file causes that a proper submodule .clang-format for RocksDB and TokuDB will be used. --- .clang-format | 111 +++++++++++++++++++++++++++++++++ .travis.yml | 2 +- storage/innobase/.clang-format | 111 +++++++++++++++++++++++++++++++++ 3 files changed, 223 insertions(+), 1 deletion(-) create mode 100644 .clang-format create mode 100644 storage/innobase/.clang-format diff --git a/.clang-format b/.clang-format new file mode 100644 index 000000000000..e208116e918f --- /dev/null +++ b/.clang-format @@ -0,0 +1,111 @@ +# generated with: +# clang-format-5.0 -style=Google --dump-config + +Language: Cpp +# BasedOnStyle: Google +AccessModifierOffset: -1 +AlignAfterOpenBracket: Align +AlignConsecutiveAssignments: false +AlignEscapedNewlines: Left +AlignOperands: true +AlignTrailingComments: true +AllowAllParametersOfDeclarationOnNextLine: true +AllowShortBlocksOnASingleLine: false +AllowShortFunctionsOnASingleLine: All +AlwaysBreakAfterDefinitionReturnType: None +AlwaysBreakAfterReturnType: None +AlwaysBreakBeforeMultilineStrings: true +AlwaysBreakTemplateDeclarations: true +BinPackArguments: true +BinPackParameters: true +BreakBeforeBinaryOperators: None +BreakBeforeInheritanceComma: false +BreakBeforeTernaryOperators: true +BreakConstructorInitializersBeforeComma: false +BreakConstructorInitializers: BeforeColon +BreakAfterJavaFieldAnnotations: false +BreakStringLiterals: true +CommentPragmas: '^ IWYU pragma:' +CompactNamespaces: false +ConstructorInitializerAllOnOneLineOrOnePerLine: true +ConstructorInitializerIndentWidth: 4 +ContinuationIndentWidth: 4 +Cpp11BracedListStyle: true +DisableFormat: false +ExperimentalAutoDetectBinPacking: false +FixNamespaceComments: true +ForEachMacros: + - foreach + - Q_FOREACH + - BOOST_FOREACH +IncludeCategories: + - Regex: '^<.*\.h>' + Priority: 1 + - Regex: '^<.*' + Priority: 2 + - Regex: '.*' + Priority: 3 +IncludeIsMainRegex: '([-_](test|unittest))?$' +IndentCaseLabels: true +IndentWidth: 2 +IndentWrappedFunctionNames: false +JavaScriptQuotes: Leave +JavaScriptWrapImports: true +KeepEmptyLinesAtTheStartOfBlocks: false +MacroBlockBegin: '' +MacroBlockEnd: '' +NamespaceIndentation: None +ObjCBlockIndentWidth: 2 +ObjCSpaceAfterProperty: false +ObjCSpaceBeforeProtocolList: false +PenaltyBreakAssignment: 2 +PenaltyBreakBeforeFirstCallParameter: 1 +PenaltyBreakComment: 300 +PenaltyBreakFirstLessLess: 120 +PenaltyBreakString: 1000 +PenaltyExcessCharacter: 1000000 +PenaltyReturnTypeOnItsOwnLine: 200 +SortUsingDeclarations: true +SpaceAfterCStyleCast: false +SpaceAfterTemplateKeyword: true +SpaceBeforeParens: ControlStatements +SpaceInEmptyParentheses: false +SpacesBeforeTrailingComments: 2 +SpacesInAngles: false +SpacesInContainerLiterals: true +SpacesInCStyleCastParentheses: false +SpacesInParentheses: false +SpacesInSquareBrackets: false +Standard: Auto +TabWidth: 8 +UseTab: Never + + +# changes for MySQL 5.x +AlignConsecutiveDeclarations: true +AllowShortCaseLabelsOnASingleLine: true +AllowShortIfStatementsOnASingleLine: false +AllowShortLoopsOnASingleLine: false +BreakBeforeBraces: Custom +BraceWrapping: + AfterClass: false + AfterControlStatement: true + AfterEnum: false + AfterFunction: true + AfterNamespace: false + AfterObjCDeclaration: false + AfterStruct: false + AfterUnion: false + BeforeCatch: false + BeforeElse: true + IndentBraces: false + SplitEmptyFunction: true + SplitEmptyRecord: true + SplitEmptyNamespace: true +ColumnLimit: 78 +DerivePointerAlignment: false +MaxEmptyLinesToKeep: 2 +PointerAlignment: Right +ReflowComments: false +SortIncludes: false +SpaceBeforeAssignmentOperators: false diff --git a/.travis.yml b/.travis.yml index e2c5a26fec92..1ba6a83185ea 100644 --- a/.travis.yml +++ b/.travis.yml @@ -25,7 +25,7 @@ matrix: script: - wget https://llvm.org/svn/llvm-project/cfe/trunk/tools/clang-format/clang-format-diff.py - chmod a+x clang-format-diff.py - - git diff -U0 --no-color HEAD^1 | ./clang-format-diff.py -p1 >_GIT_DIFF + - git diff -U0 --no-color HEAD^1 | ./clang-format-diff.py -style=file -p1 >_GIT_DIFF - '[ ! -s _GIT_DIFF ] && { echo The last git commit is clang-formatted; travis_terminate 0; } || { cat _GIT_DIFF; travis_terminate 1; }' diff --git a/storage/innobase/.clang-format b/storage/innobase/.clang-format new file mode 100644 index 000000000000..d757d0a5a054 --- /dev/null +++ b/storage/innobase/.clang-format @@ -0,0 +1,111 @@ +# generated with: +# clang-format-5.0 -style=Google --dump-config + +Language: Cpp +# BasedOnStyle: Google +AccessModifierOffset: -1 +AlignAfterOpenBracket: Align +AlignConsecutiveAssignments: false +AlignEscapedNewlines: Left +AlignOperands: true +AlignTrailingComments: true +AllowAllParametersOfDeclarationOnNextLine: true +AllowShortBlocksOnASingleLine: false +AllowShortCaseLabelsOnASingleLine: false +AllowShortFunctionsOnASingleLine: All +AlwaysBreakAfterDefinitionReturnType: None +AlwaysBreakBeforeMultilineStrings: true +AlwaysBreakTemplateDeclarations: true +BinPackArguments: true +BinPackParameters: true +BraceWrapping: + AfterClass: false + AfterControlStatement: false + AfterEnum: false + AfterFunction: false + AfterNamespace: false + AfterObjCDeclaration: false + AfterStruct: false + AfterUnion: false + BeforeCatch: false + BeforeElse: false + IndentBraces: false + SplitEmptyFunction: true + SplitEmptyRecord: true + SplitEmptyNamespace: true +BreakBeforeBinaryOperators: None +BreakBeforeBraces: Attach +BreakBeforeInheritanceComma: false +BreakBeforeTernaryOperators: true +BreakConstructorInitializersBeforeComma: false +BreakConstructorInitializers: BeforeColon +BreakAfterJavaFieldAnnotations: false +BreakStringLiterals: true +CommentPragmas: '^ IWYU pragma:' +CompactNamespaces: false +ConstructorInitializerAllOnOneLineOrOnePerLine: true +ConstructorInitializerIndentWidth: 4 +ContinuationIndentWidth: 4 +Cpp11BracedListStyle: true +DisableFormat: false +ExperimentalAutoDetectBinPacking: false +FixNamespaceComments: true +ForEachMacros: + - foreach + - Q_FOREACH + - BOOST_FOREACH +IncludeCategories: + - Regex: '^<.*\.h>' + Priority: 1 + - Regex: '^<.*' + Priority: 2 + - Regex: '.*' + Priority: 3 +IncludeIsMainRegex: '([-_](test|unittest))?$' +IndentCaseLabels: true +IndentWrappedFunctionNames: false +JavaScriptQuotes: Leave +JavaScriptWrapImports: true +KeepEmptyLinesAtTheStartOfBlocks: false +MacroBlockBegin: '' +MacroBlockEnd: '' +NamespaceIndentation: None +ObjCBlockIndentWidth: 2 +ObjCSpaceAfterProperty: false +ObjCSpaceBeforeProtocolList: false +PenaltyBreakAssignment: 2 +PenaltyBreakBeforeFirstCallParameter: 1 +PenaltyBreakComment: 300 +PenaltyBreakFirstLessLess: 120 +PenaltyBreakString: 1000 +PenaltyExcessCharacter: 1000000 +PenaltyReturnTypeOnItsOwnLine: 200 +SortUsingDeclarations: true +SpaceAfterTemplateKeyword: true +SpaceBeforeAssignmentOperators: true +SpaceBeforeParens: ControlStatements +SpaceInEmptyParentheses: false +SpacesBeforeTrailingComments: 2 +SpacesInAngles: false +SpacesInContainerLiterals: true +SpacesInCStyleCastParentheses: false +SpacesInParentheses: false +SpacesInSquareBrackets: false +Standard: Auto +TabWidth: 8 + + +# changes for MySQL 5.x (InnoDB) +AlignConsecutiveDeclarations: true +AllowShortIfStatementsOnASingleLine: false +AllowShortLoopsOnASingleLine: false +AlwaysBreakAfterReturnType: All +ColumnLimit: 78 +DerivePointerAlignment: false +IndentWidth: 8 +MaxEmptyLinesToKeep: 2 +PointerAlignment: Right +ReflowComments: false +SortIncludes: false +SpaceAfterCStyleCast: true +UseTab: Always From 5ea210ce5551b413258e355c31fd18ae62766ba0 Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Tue, 15 May 2018 12:11:55 +0200 Subject: [PATCH 0835/1221] PS-4481: Introduce -DWITH_NUMA and -DWITH_SCALABILITY_METRICS for Travis CI Introduce: `-DWITH_NUMA=ON` for normal configurations `-DWITH_NUMA=OFF` for inverted configurations `-DWITH_SCALABILITY_METRICS=ON` for inverted configurations --- .travis.yml | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/.travis.yml b/.travis.yml index 513b6a257d58..e6eb7fe48698 100644 --- a/.travis.yml +++ b/.travis.yml @@ -184,14 +184,10 @@ script: PACKAGES="llvm-$VERSION-dev $PACKAGES"; curl -sSL "http://apt.llvm.org/llvm-snapshot.gpg.key" | sudo -E apt-key add -; echo "deb http://apt.llvm.org/trusty/ llvm-toolchain-trusty-$VERSION main" | sudo tee -a /etc/apt/sources.list > /dev/null; - fi; - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo -E apt-add-repository -y "ppa:ubuntu-toolchain-r/test"; - sudo -E apt-add-repository -y "ppa:jonathonf/binutils"; - sudo -E apt-add-repository -y "ppa:jonathonf/gcc-5.5"; - sudo -E apt-add-repository -y "ppa:jonathonf/gcc-6.4"; - sudo -E apt-add-repository -y "ppa:jonathonf/gcc-7.3"; - sudo -E apt-add-repository -y "ppa:jonathonf/gcc-8.0"; + fi; + if [[ "$TRAVIS_OS_NAME" == "linux" ]] && [[ "$CC" == "gcc" ]]; then + sudo -E apt-add-repository -y "ppa:jonathonf/gcc"; fi; - echo --- Update list of packages and download dependencies; @@ -245,6 +241,7 @@ script: -DWITH_FEDERATED_STORAGE_ENGINE=OFF -DWITH_INNOBASE_STORAGE_ENGINE=OFF -DWITHOUT_PARTITION_STORAGE_ENGINE=ON + -DWITH_SCALABILITY_METRICS=ON "; fi; From 6b874a491e803fc17c9cb093d142fec49a87291d Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Wed, 16 May 2018 12:33:06 +0200 Subject: [PATCH 0836/1221] PS-4482: item_geofunc_internal.h:163:60: error: 'box' may be used uninitialized Replace envelope() with return_envelope() what quiets gcc-4.7.2 on debian:wheezy --- sql/geometry_rtree.cc | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/sql/geometry_rtree.cc b/sql/geometry_rtree.cc index 1eb0d59ffd80..68b986f80946 100644 --- a/sql/geometry_rtree.cc +++ b/sql/geometry_rtree.cc @@ -66,9 +66,7 @@ struct Rtree_value_maker_bggeom template result_type operator()(T const &v) const { - BG_box box; - boost::geometry::envelope(v.value(), box); - + BG_box box = boost::geometry::return_envelope(v.value()); return result_type(box, v.index()); } }; From 165178a3af78018761fea2ffeb617b5d5df1e0fd Mon Sep 17 00:00:00 2001 From: Sreeharsha Ramanavarapu Date: Thu, 17 May 2018 08:50:20 +0530 Subject: [PATCH 0837/1221] Bug#24357244: CANNOT CREATE A STORED FUNCTION IF A DATABASE IS NOT SELECTED Issue: ------ When default database is not set, a CREATE FUNCTION DDL that calls another FUNCTION will fail if no explicit database is specified in the DDL's body. Solution: --------- As was done in 5.6, assign the database mentioned in the new FUNCTION's DDL. If that isn't present, see if default database is set and use it. --- mysql-test/r/sp-error.result | 23 +++++++++++++++++++++++ mysql-test/t/sp-error.test | 24 ++++++++++++++++++++++++ sql/item_create.cc | 8 ++++++-- sql/item_func.cc | 13 ++++--------- 4 files changed, 57 insertions(+), 11 deletions(-) diff --git a/mysql-test/r/sp-error.result b/mysql-test/r/sp-error.result index 8a58830274c4..2c22c8b91757 100644 --- a/mysql-test/r/sp-error.result +++ b/mysql-test/r/sp-error.result @@ -2910,3 +2910,26 @@ drop function test.f111111111122222222223333333333444444444455555555556666666666 ERROR 42000: Identifier name 'f111111111122222222223333333333444444444455555555556666666666777777777788888888889999999999aaaaaaaaa' is too long drop function mysqltest111111111122222222223333333333444444444455555555556666666666777777777788888888889999999999aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffffgggggggggghhhhhhhhhhiiiiiiiiiijjjj.test; ERROR 42000: Incorrect database name 'mysqltest111111111122222222223333333333444444444455555555556666666666777777777788888888889999999999a' +# +# Bug #24357244: CANNOT CREATE A STORED FUNCTION IF A DATABASE IS NOT +# SELECTED +# +CREATE DATABASE mysqltest; +USE mysqltest; +DROP DATABASE mysqltest; +SELECT DATABASE(); +DATABASE() +NULL +CREATE DATABASE mysqltest; +CREATE FUNCTION mysqltest.f1() RETURNS INT RETURN 0; +CREATE FUNCTION mysqltest.f2() RETURNS INT RETURN f1(); +USE mysqltest; +SELECT f1(); +f1() +0 +SELECT f2(); +f2() +0 +DROP FUNCTION IF EXISTS f2; +DROP FUNCTION IF EXISTS f1; +DROP DATABASE mysqltest; diff --git a/mysql-test/t/sp-error.test b/mysql-test/t/sp-error.test index d705f7f20c7e..10afff0fb31f 100644 --- a/mysql-test/t/sp-error.test +++ b/mysql-test/t/sp-error.test @@ -3838,3 +3838,27 @@ drop function test.f111111111122222222223333333333444444444455555555556666666666 --error ER_WRONG_DB_NAME drop function mysqltest111111111122222222223333333333444444444455555555556666666666777777777788888888889999999999aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffffgggggggggghhhhhhhhhhiiiiiiiiiijjjj.test; + +--echo # +--echo # Bug #24357244: CANNOT CREATE A STORED FUNCTION IF A DATABASE IS NOT +--echo # SELECTED +--echo # + +CREATE DATABASE mysqltest; +USE mysqltest; +DROP DATABASE mysqltest; + +# Should return NULL +SELECT DATABASE(); + +CREATE DATABASE mysqltest; +CREATE FUNCTION mysqltest.f1() RETURNS INT RETURN 0; +CREATE FUNCTION mysqltest.f2() RETURNS INT RETURN f1(); + +USE mysqltest; +SELECT f1(); +SELECT f2(); + +DROP FUNCTION IF EXISTS f2; +DROP FUNCTION IF EXISTS f1; +DROP DATABASE mysqltest; diff --git a/sql/item_create.cc b/sql/item_create.cc index dbba41266be1..09aac6086acc 100644 --- a/sql/item_create.cc +++ b/sql/item_create.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -4159,7 +4159,11 @@ class Create_func_year_week : public Create_native_func Item* Create_qfunc::create_func(THD *thd, LEX_STRING name, PT_item_list *item_list) { - return create(thd, NULL_STR, name, false, item_list); + LEX_STRING db= NULL_STR; + if (thd->lex->copy_db_to(&db.str, &db.length)) + return NULL; + + return create(thd, db, name, false, item_list); } diff --git a/sql/item_func.cc b/sql/item_func.cc index 38cb61d866c5..c2ac11abbb46 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -8367,16 +8367,11 @@ bool Item_func_sp::itemize(Parse_context *pc, Item **res) context= lex->current_context(); lex->safe_to_cache_query= false; - if (m_name->m_db.str == NULL) // use the default database name + if (m_name->m_db.str == NULL) { /* Cannot match the function since no database is selected */ - if (thd->db().str == NULL) - { - my_error(ER_NO_DB_ERROR, MYF(0)); - return true; - } - m_name->m_db= thd->db(); - m_name->m_db.str= thd->strmake(m_name->m_db.str, m_name->m_db.length); + my_error(ER_NO_DB_ERROR, MYF(0)); + return true; } m_name->init_qname(thd); From 7fe8596106fa1ea7edaf59ce5004283a1bab17a9 Mon Sep 17 00:00:00 2001 From: Sreeharsha Ramanavarapu Date: Thu, 17 May 2018 09:16:21 +0530 Subject: [PATCH 0838/1221] Bug #27691347: BETWEEN CLAUSE RETURNS INCOHERENT RESULTS COMPARING NEGATIVE VALUES Issue: ------ Comparing unsigned columns with negative numbers using BETWEEN clause can result in incorrect results. Solution: --------- Backport the fix for Bug#22501606. When unsigned flag is set for the column/expression, take it into account for all arguments of BETWEEN. --- mysql-test/r/bigint.result | 27 +++++++++++++++++++++++++++ mysql-test/t/bigint.test | 24 ++++++++++++++++++++++++ sql/item_cmpfunc.cc | 13 ++++++++++++- 3 files changed, 63 insertions(+), 1 deletion(-) diff --git a/mysql-test/r/bigint.result b/mysql-test/r/bigint.result index 8c1195c769f2..e12883e2daee 100644 --- a/mysql-test/r/bigint.result +++ b/mysql-test/r/bigint.result @@ -550,4 +550,31 @@ SELECT 184467440737095 >= 0; SELECT 0 <= 18446744073709551500; 0 <= 18446744073709551500 1 +# +# Bug#22501606 SELECT CAST(100 AS UNSIGNED) BETWEEN 1 AND -1 RETURNS TRUE +# Bug#79857 select cast(100 as unsigned) between 1 and -1 returns true +# +SELECT CAST(100 AS UNSIGNED) BETWEEN 1 AND -1; +CAST(100 AS UNSIGNED) BETWEEN 1 AND -1 +0 +SELECT CAST(100 AS UNSIGNED) NOT BETWEEN 1 AND -1; +CAST(100 AS UNSIGNED) NOT BETWEEN 1 AND -1 +1 +SELECT CAST(0 AS UNSIGNED) BETWEEN 0 AND -1; +CAST(0 AS UNSIGNED) BETWEEN 0 AND -1 +0 +SELECT CAST(0 AS UNSIGNED) NOT BETWEEN 0 AND -1; +CAST(0 AS UNSIGNED) NOT BETWEEN 0 AND -1 +1 +# +# Bug #27691347: BETWEEN CLAUSE RETURNS INCOHERENT RESULTS COMPARING +# NEGATIVE VALUES +CREATE TABLE Reservation (id BIGINT UNSIGNED NOT NULL, +transaction_id BIGINT UNSIGNED NOT NULL DEFAULT '0', +KEY transaction_id_idx (transaction_id)); +INSERT INTO Reservation(id, transaction_id) VALUES(1, 1); +SELECT COUNT(*) FROM Reservation WHERE transaction_id BETWEEN -2 AND -1; +COUNT(*) +0 +DROP TABLE Reservation; SET sql_mode = default; diff --git a/mysql-test/t/bigint.test b/mysql-test/t/bigint.test index 1858894efb06..ac3b68d47def 100644 --- a/mysql-test/t/bigint.test +++ b/mysql-test/t/bigint.test @@ -458,4 +458,28 @@ SELECT (184467440737095 BETWEEN 0 AND 18446744073709551500); SELECT 184467440737095 >= 0; SELECT 0 <= 18446744073709551500; + +--echo # +--echo # Bug#22501606 SELECT CAST(100 AS UNSIGNED) BETWEEN 1 AND -1 RETURNS TRUE +--echo # Bug#79857 select cast(100 as unsigned) between 1 and -1 returns true +--echo # + +SELECT CAST(100 AS UNSIGNED) BETWEEN 1 AND -1; +SELECT CAST(100 AS UNSIGNED) NOT BETWEEN 1 AND -1; + +SELECT CAST(0 AS UNSIGNED) BETWEEN 0 AND -1; +SELECT CAST(0 AS UNSIGNED) NOT BETWEEN 0 AND -1; + +--echo # +--echo # Bug #27691347: BETWEEN CLAUSE RETURNS INCOHERENT RESULTS COMPARING +--echo # NEGATIVE VALUES + +CREATE TABLE Reservation (id BIGINT UNSIGNED NOT NULL, + transaction_id BIGINT UNSIGNED NOT NULL DEFAULT '0', + KEY transaction_id_idx (transaction_id)); +INSERT INTO Reservation(id, transaction_id) VALUES(1, 1); + +SELECT COUNT(*) FROM Reservation WHERE transaction_id BETWEEN -2 AND -1; +DROP TABLE Reservation; + SET sql_mode = default; diff --git a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc index b36182e281ae..5f72fa919602 100644 --- a/sql/item_cmpfunc.cc +++ b/sql/item_cmpfunc.cc @@ -3156,8 +3156,19 @@ longlong compare_between_int_result(bool compare_as_temporal_dates, rewritten to value BETWEEN 0 AND */ - if (!args[1]->unsigned_flag && (longlong) a < 0) + if (!args[1]->unsigned_flag && static_cast(a) < 0) a = 0; + /* + Comparing as unsigned. + value BETWEEN AND + rewritten to + 1 BETWEEN AND 0 + */ + if (!args[2]->unsigned_flag && static_cast(b) < 0) + { + b= 0; + value= 1; + } } else { From bb1d250afe7aa469d3ba3acfddc2938c29ca4548 Mon Sep 17 00:00:00 2001 From: Aakanksha Verma Date: Thu, 17 May 2018 12:36:07 +0530 Subject: [PATCH 0839/1221] Bug #27155294 MAX_EXECUTION_TIME NOT INTERUPTED WITH FULLTEXT SEARCH USING MECAB Post push fix for asan failure for the added test case innodb.fts_exec_interrupt. Reviewed by: Jimmy Yang over IM. --- storage/innobase/fts/fts0que.cc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/storage/innobase/fts/fts0que.cc b/storage/innobase/fts/fts0que.cc index 3cfba3ecc84c..52b8765f7400 100644 --- a/storage/innobase/fts/fts0que.cc +++ b/storage/innobase/fts/fts0que.cc @@ -4114,6 +4114,7 @@ fts_query( &query, &will_be_ignored); if (query.error == DB_INTERRUPTED) { error = DB_INTERRUPTED; + ut_free(lc_query_str); goto func_exit; } @@ -4144,6 +4145,10 @@ fts_query( if (trx_is_interrupted(trx)) { error = DB_INTERRUPTED; + ut_free(lc_query_str); + if (result != NULL) { + fts_query_free_result(*result); + } goto func_exit; } From fdbdce701ab8145ae234c9d401109dff4e4106cb Mon Sep 17 00:00:00 2001 From: Aditya A Date: Thu, 17 May 2018 16:11:43 +0530 Subject: [PATCH 0840/1221] Bug #26390736 THE FIELD TABLE_NAME (VARCHAR(64)) FROM MYSQL.INNODB_TABLE_STATS CAN OVERFLOW. In mysql.innodb_index_stats and mysql.innodb_table_stats tables the table name column didn't take into consideration partition names which can be more than varchar(64). FIX --- 1. Changed the column length to 199 because the table name can contain (table_name)#P#(partition_name)#SP#(subpartition_name) with each identifier being 64 chars and taking the special symbolsadded to recognize it is a partitioned table ,the length comes out to be 199. 2. Returning error in few cases where the length exceeds the file system name limit. This also fixes Bug#26953573 I_MAIN.PARTITION_INNODB_CRASH FAILING IN WEEKLY-5.7 3. User need to do a mysql_upgrade to modify the length of the system tables. 4. If the user doesn't run the the mysql_upgrade the fix will not work ,but a warning message will be generated to remind the user to call mysql_upgrdae. 5. This fix is for mysql-5.7 only , since 8.0+ has already updated its system tables with this change. 6. innodb_index_stats has a primary key which is defined as PRIMARY KEY (`database_name`,`table_name`,`index_name`,`stat_name`) and the PRIMARY KEY defined on innodb_table_stats is PRIMARY KEY (`database_name`,`table_name`) Since we are increasing the length of "table_name" column the index size increases ,which will cross the limit of 768 Bytes defined for a 4k page size. Innodb can usually support key size which is half of the page size. While estimating the maximum key size supported we usually take the case of secondary indexes ( which also contains the primary key) and estimate the key_length of about 1/4 of page size. In this case there is only primary key defined on these tables and innodb can support this index size. Therefore we have defined these two tables as system tables and the server whitelists them and skips the index length check on them. 7. In server we have introduced a function ha_check_if_supported_system_table() will check if these tables are whitelisted ,and skip the key index length check. [#rb 18858 Reviewed By Deb,Dyre] --- .../suite/funcs_1/r/is_columns_mysql.result | 8 +- .../innodb_gis/r/create_spatial_index.result | 2 +- .../innodb_gis/t/create_spatial_index.test | 2 +- .../suite/parts/r/partition_names.result | 134 +++++++++++++++++ mysql-test/suite/parts/t/partition_names.test | 49 +++++++ scripts/mysql_system_tables.sql | 6 +- scripts/mysql_system_tables_fix.sql | 8 ++ sql/handler.cc | 135 +++++++++++++----- sql/handler.h | 6 +- sql/sql_class.h | 8 ++ sql/sql_table.cc | 40 ++++-- storage/innobase/dict/dict0dict.cc | 18 ++- storage/innobase/dict/dict0stats.cc | 6 +- storage/innobase/handler/ha_innodb.cc | 2 + storage/innobase/handler/ha_innopart.cc | 77 +++++++--- storage/innobase/handler/handler0alter.cc | 3 +- storage/innobase/include/dict0stats.h | 5 +- storage/innobase/os/os0file.cc | 6 +- storage/innobase/row/row0mysql.cc | 21 ++- 19 files changed, 443 insertions(+), 93 deletions(-) create mode 100644 mysql-test/suite/parts/r/partition_names.result create mode 100644 mysql-test/suite/parts/t/partition_names.test diff --git a/mysql-test/suite/funcs_1/r/is_columns_mysql.result b/mysql-test/suite/funcs_1/r/is_columns_mysql.result index cc5cadfeba46..95edbdb9f1d9 100644 --- a/mysql-test/suite/funcs_1/r/is_columns_mysql.result +++ b/mysql-test/suite/funcs_1/r/is_columns_mysql.result @@ -96,13 +96,13 @@ def mysql innodb_index_stats sample_size 7 NULL YES bigint NULL NULL 20 0 NULL N def mysql innodb_index_stats stat_description 8 NULL NO varchar 1024 3072 NULL NULL NULL utf8 utf8_bin varchar(1024) select,insert,update,references def mysql innodb_index_stats stat_name 5 NULL NO varchar 64 192 NULL NULL NULL utf8 utf8_bin varchar(64) PRI select,insert,update,references def mysql innodb_index_stats stat_value 6 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references -def mysql innodb_index_stats table_name 2 NULL NO varchar 64 192 NULL NULL NULL utf8 utf8_bin varchar(64) PRI select,insert,update,references +def mysql innodb_index_stats table_name 2 NULL NO varchar 199 597 NULL NULL NULL utf8 utf8_bin varchar(199) PRI select,insert,update,references def mysql innodb_table_stats clustered_index_size 5 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references def mysql innodb_table_stats database_name 1 NULL NO varchar 64 192 NULL NULL NULL utf8 utf8_bin varchar(64) PRI select,insert,update,references def mysql innodb_table_stats last_update 3 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL 0 NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references def mysql innodb_table_stats n_rows 4 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references def mysql innodb_table_stats sum_of_other_index_sizes 6 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned select,insert,update,references -def mysql innodb_table_stats table_name 2 NULL NO varchar 64 192 NULL NULL NULL utf8 utf8_bin varchar(64) PRI select,insert,update,references +def mysql innodb_table_stats table_name 2 NULL NO varchar 199 597 NULL NULL NULL utf8 utf8_bin varchar(199) PRI select,insert,update,references def mysql ndb_binlog_index deletes 6 NULL NO int NULL NULL 10 0 NULL NULL NULL int(10) unsigned select,insert,update,references def mysql ndb_binlog_index epoch 3 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned PRI select,insert,update,references def mysql ndb_binlog_index File 2 NULL NO varchar 255 255 NULL NULL NULL latin1 latin1_swedish_ci varchar(255) select,insert,update,references @@ -448,7 +448,7 @@ NULL mysql help_topic help_category_id smallint NULL NULL NULL NULL smallint(5) 1.0000 mysql help_topic example text 65535 65535 utf8 utf8_general_ci text 1.0000 mysql help_topic url text 65535 65535 utf8 utf8_general_ci text 3.0000 mysql innodb_index_stats database_name varchar 64 192 utf8 utf8_bin varchar(64) -3.0000 mysql innodb_index_stats table_name varchar 64 192 utf8 utf8_bin varchar(64) +3.0000 mysql innodb_index_stats table_name varchar 199 597 utf8 utf8_bin varchar(199) 3.0000 mysql innodb_index_stats index_name varchar 64 192 utf8 utf8_bin varchar(64) NULL mysql innodb_index_stats last_update timestamp NULL NULL NULL NULL timestamp 3.0000 mysql innodb_index_stats stat_name varchar 64 192 utf8 utf8_bin varchar(64) @@ -456,7 +456,7 @@ NULL mysql innodb_index_stats stat_value bigint NULL NULL NULL NULL bigint(20) u NULL mysql innodb_index_stats sample_size bigint NULL NULL NULL NULL bigint(20) unsigned 3.0000 mysql innodb_index_stats stat_description varchar 1024 3072 utf8 utf8_bin varchar(1024) 3.0000 mysql innodb_table_stats database_name varchar 64 192 utf8 utf8_bin varchar(64) -3.0000 mysql innodb_table_stats table_name varchar 64 192 utf8 utf8_bin varchar(64) +3.0000 mysql innodb_table_stats table_name varchar 199 597 utf8 utf8_bin varchar(199) NULL mysql innodb_table_stats last_update timestamp NULL NULL NULL NULL timestamp NULL mysql innodb_table_stats n_rows bigint NULL NULL NULL NULL bigint(20) unsigned NULL mysql innodb_table_stats clustered_index_size bigint NULL NULL NULL NULL bigint(20) unsigned diff --git a/mysql-test/suite/innodb_gis/r/create_spatial_index.result b/mysql-test/suite/innodb_gis/r/create_spatial_index.result index b02f61a313a5..a5bcdf39d137 100644 --- a/mysql-test/suite/innodb_gis/r/create_spatial_index.result +++ b/mysql-test/suite/innodb_gis/r/create_spatial_index.result @@ -1401,7 +1401,7 @@ CREATE SPATIAL INDEX idx2 ON t1(c1); DROP TABLE t1; CREATE TABLE mysql.innodb_table_stats ( database_name varchar(64) COLLATE utf8_bin NOT NULL, -table_name varchar(64) COLLATE utf8_bin NOT NULL, +table_name varchar(199) COLLATE utf8_bin NOT NULL, last_update timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, n_rows bigint(20) unsigned NOT NULL, clustered_index_size bigint(20) unsigned NOT NULL, diff --git a/mysql-test/suite/innodb_gis/t/create_spatial_index.test b/mysql-test/suite/innodb_gis/t/create_spatial_index.test index 986a7530a18d..410e35ebfaca 100644 --- a/mysql-test/suite/innodb_gis/t/create_spatial_index.test +++ b/mysql-test/suite/innodb_gis/t/create_spatial_index.test @@ -1165,7 +1165,7 @@ CREATE SPATIAL INDEX idx2 ON t1(c1); DROP TABLE t1; CREATE TABLE mysql.innodb_table_stats ( database_name varchar(64) COLLATE utf8_bin NOT NULL, - table_name varchar(64) COLLATE utf8_bin NOT NULL, + table_name varchar(199) COLLATE utf8_bin NOT NULL, last_update timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, n_rows bigint(20) unsigned NOT NULL, clustered_index_size bigint(20) unsigned NOT NULL, diff --git a/mysql-test/suite/parts/r/partition_names.result b/mysql-test/suite/parts/r/partition_names.result new file mode 100644 index 000000000000..91653edf7b5b --- /dev/null +++ b/mysql-test/suite/parts/r/partition_names.result @@ -0,0 +1,134 @@ +# +# Bug26390736 THE FIELD TABLE_NAME (VARCHAR(64)) FROM MYSQL.INNODB_TABLE_STATS CAN OVERFLOW +# +show create table mysql.innodb_index_stats; +Table Create Table +innodb_index_stats CREATE TABLE `innodb_index_stats` ( + `database_name` varchar(64) COLLATE utf8_bin NOT NULL, + `table_name` varchar(199) COLLATE utf8_bin NOT NULL, + `index_name` varchar(64) COLLATE utf8_bin NOT NULL, + `last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `stat_name` varchar(64) COLLATE utf8_bin NOT NULL, + `stat_value` bigint(20) unsigned NOT NULL, + `sample_size` bigint(20) unsigned DEFAULT NULL, + `stat_description` varchar(1024) COLLATE utf8_bin NOT NULL, + PRIMARY KEY (`database_name`,`table_name`,`index_name`,`stat_name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0 +show create table mysql.innodb_table_stats; +Table Create Table +innodb_table_stats CREATE TABLE `innodb_table_stats` ( + `database_name` varchar(64) COLLATE utf8_bin NOT NULL, + `table_name` varchar(199) COLLATE utf8_bin NOT NULL, + `last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `n_rows` bigint(20) unsigned NOT NULL, + `clustered_index_size` bigint(20) unsigned NOT NULL, + `sum_of_other_index_sizes` bigint(20) unsigned NOT NULL, + PRIMARY KEY (`database_name`,`table_name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0 +create table abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghij (id int) engine=innodb +partition by range (id) +subpartition by hash(id) ( +partition pbcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghij values less than (10) ( +subpartition subdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghij, +subpartition s02 +), +partition pmax VALUES LESS THAN MAXVALUE ( +subpartition pmax_sub1, +subpartition pmax_sub2 +) +); +select table_name,LENGTH(table_name) from mysql.innodb_table_stats where LENGTH(table_name) = 199; +table_name LENGTH(table_name) +abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghij#p#pbcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghij#sp#subdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghij 199 +select table_name,LENGTH(table_name) from mysql.innodb_index_stats where LENGTH(table_name) = 199; +table_name LENGTH(table_name) +abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghij#p#pbcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghij#sp#subdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghij 199 +abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghij#p#pbcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghij#sp#subdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghij 199 +abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghij#p#pbcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghij#sp#subdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghij 199 +drop table abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghij; +CALL mtr.add_suppression("Table mysql/innodb_table_stats has length mismatch in the column name table_name. Please run mysql_upgrade"); +CALL mtr.add_suppression("Table mysql/innodb_index_stats has length mismatch in the column name table_name. Please run mysql_upgrade"); +alter table mysql.innodb_table_stats modify table_name varchar(64); +alter table mysql.innodb_index_stats modify table_name varchar(64); +show create table mysql.innodb_index_stats; +Table Create Table +innodb_index_stats CREATE TABLE `innodb_index_stats` ( + `database_name` varchar(64) COLLATE utf8_bin NOT NULL, + `table_name` varchar(64) COLLATE utf8_bin NOT NULL, + `index_name` varchar(64) COLLATE utf8_bin NOT NULL, + `last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `stat_name` varchar(64) COLLATE utf8_bin NOT NULL, + `stat_value` bigint(20) unsigned NOT NULL, + `sample_size` bigint(20) unsigned DEFAULT NULL, + `stat_description` varchar(1024) COLLATE utf8_bin NOT NULL, + PRIMARY KEY (`database_name`,`table_name`,`index_name`,`stat_name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0 +show create table mysql.innodb_table_stats; +Table Create Table +innodb_table_stats CREATE TABLE `innodb_table_stats` ( + `database_name` varchar(64) COLLATE utf8_bin NOT NULL, + `table_name` varchar(64) COLLATE utf8_bin NOT NULL, + `last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `n_rows` bigint(20) unsigned NOT NULL, + `clustered_index_size` bigint(20) unsigned NOT NULL, + `sum_of_other_index_sizes` bigint(20) unsigned NOT NULL, + PRIMARY KEY (`database_name`,`table_name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0 +mysql.columns_priv OK +mysql.db OK +mysql.engine_cost OK +mysql.event OK +mysql.func OK +mysql.general_log OK +mysql.gtid_executed OK +mysql.help_category OK +mysql.help_keyword OK +mysql.help_relation OK +mysql.help_topic OK +mysql.innodb_index_stats OK +mysql.innodb_table_stats OK +mysql.ndb_binlog_index OK +mysql.plugin OK +mysql.proc OK +mysql.procs_priv OK +mysql.proxies_priv OK +mysql.server_cost OK +mysql.servers OK +mysql.slave_master_info OK +mysql.slave_relay_log_info OK +mysql.slave_worker_info OK +mysql.slow_log OK +mysql.tables_priv OK +mysql.time_zone OK +mysql.time_zone_leap_second OK +mysql.time_zone_name OK +mysql.time_zone_transition OK +mysql.time_zone_transition_type OK +mysql.user OK +mtr.global_suppressions OK +mtr.test_suppressions OK +sys.sys_config OK +show create table mysql.innodb_index_stats; +Table Create Table +innodb_index_stats CREATE TABLE `innodb_index_stats` ( + `database_name` varchar(64) COLLATE utf8_bin NOT NULL, + `table_name` varchar(199) COLLATE utf8_bin NOT NULL, + `index_name` varchar(64) COLLATE utf8_bin NOT NULL, + `last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `stat_name` varchar(64) COLLATE utf8_bin NOT NULL, + `stat_value` bigint(20) unsigned NOT NULL, + `sample_size` bigint(20) unsigned DEFAULT NULL, + `stat_description` varchar(1024) COLLATE utf8_bin NOT NULL, + PRIMARY KEY (`database_name`,`table_name`,`index_name`,`stat_name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0 +show create table mysql.innodb_table_stats; +Table Create Table +innodb_table_stats CREATE TABLE `innodb_table_stats` ( + `database_name` varchar(64) COLLATE utf8_bin NOT NULL, + `table_name` varchar(199) COLLATE utf8_bin NOT NULL, + `last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `n_rows` bigint(20) unsigned NOT NULL, + `clustered_index_size` bigint(20) unsigned NOT NULL, + `sum_of_other_index_sizes` bigint(20) unsigned NOT NULL, + PRIMARY KEY (`database_name`,`table_name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0 diff --git a/mysql-test/suite/parts/t/partition_names.test b/mysql-test/suite/parts/t/partition_names.test new file mode 100644 index 000000000000..188de1ecfa90 --- /dev/null +++ b/mysql-test/suite/parts/t/partition_names.test @@ -0,0 +1,49 @@ +-- source include/have_innodb.inc +-- source include/mysql_upgrade_preparation.inc +--echo # +--echo # Bug26390736 THE FIELD TABLE_NAME (VARCHAR(64)) FROM MYSQL.INNODB_TABLE_STATS CAN OVERFLOW +--echo # +#Test 1 Table with maximum possible name + +show create table mysql.innodb_index_stats; +show create table mysql.innodb_table_stats; + +create table abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghij (id int) engine=innodb +partition by range (id) +subpartition by hash(id) ( + +partition pbcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghij values less than (10) ( + +subpartition subdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghij, +subpartition s02 +), +partition pmax VALUES LESS THAN MAXVALUE ( +subpartition pmax_sub1, +subpartition pmax_sub2 +) +); + +--replace_regex /#P#/#p#/ /#SP#/#sp#/ +select table_name,LENGTH(table_name) from mysql.innodb_table_stats where LENGTH(table_name) = 199; +--replace_regex /#P#/#p#/ /#SP#/#sp#/ +select table_name,LENGTH(table_name) from mysql.innodb_index_stats where LENGTH(table_name) = 199; +drop table abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghij; + +#Test 2 Check mysql-upgrade + +#Manually change length +CALL mtr.add_suppression("Table mysql/innodb_table_stats has length mismatch in the column name table_name. Please run mysql_upgrade"); +CALL mtr.add_suppression("Table mysql/innodb_index_stats has length mismatch in the column name table_name. Please run mysql_upgrade"); +alter table mysql.innodb_table_stats modify table_name varchar(64); +alter table mysql.innodb_index_stats modify table_name varchar(64); + +show create table mysql.innodb_index_stats; +show create table mysql.innodb_table_stats; + +#Run upgrade to check if the length has changed. +--exec $MYSQL_UPGRADE --skip-verbose --force 2>&1 + +show create table mysql.innodb_index_stats; +show create table mysql.innodb_table_stats; + +--source include/mysql_upgrade_cleanup.inc diff --git a/scripts/mysql_system_tables.sql b/scripts/mysql_system_tables.sql index 3d3eb02c450c..d061e0ab704c 100644 --- a/scripts/mysql_system_tables.sql +++ b/scripts/mysql_system_tables.sql @@ -1,4 +1,4 @@ --- Copyright (c) 2007, 2017, Oracle and/or its affiliates. All rights reserved. +-- Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved. -- -- 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 @@ -92,7 +92,7 @@ SET SESSION sql_mode='NO_ENGINE_SUBSTITUTION'; SET @create_innodb_table_stats="CREATE TABLE IF NOT EXISTS innodb_table_stats ( database_name VARCHAR(64) NOT NULL, - table_name VARCHAR(64) NOT NULL, + table_name VARCHAR(199) NOT NULL, last_update TIMESTAMP NOT NULL NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, n_rows BIGINT UNSIGNED NOT NULL, clustered_index_size BIGINT UNSIGNED NOT NULL, @@ -102,7 +102,7 @@ SET @create_innodb_table_stats="CREATE TABLE IF NOT EXISTS innodb_table_stats ( SET @create_innodb_index_stats="CREATE TABLE IF NOT EXISTS innodb_index_stats ( database_name VARCHAR(64) NOT NULL, - table_name VARCHAR(64) NOT NULL, + table_name VARCHAR(199) NOT NULL, index_name VARCHAR(64) NOT NULL, last_update TIMESTAMP NOT NULL NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, /* there are at least: diff --git a/scripts/mysql_system_tables_fix.sql b/scripts/mysql_system_tables_fix.sql index 903d32cb65ea..0021cf968e4a 100644 --- a/scripts/mysql_system_tables_fix.sql +++ b/scripts/mysql_system_tables_fix.sql @@ -1041,3 +1041,11 @@ EXECUTE stmt; DROP PREPARE stmt; FLUSH PRIVILEGES; + +-- +-- Update the column length of 'table_name' column for stats tables. +-- + +alter table mysql.innodb_table_stats modify table_name varchar(199); +alter table mysql.innodb_index_stats modify table_name varchar(199); + diff --git a/sql/handler.cc b/sql/handler.cc index ebff62acda82..78faf46c8ce4 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -332,6 +332,8 @@ st_handler_tablename mysqld_system_tables[]= { {mysqld_system_database, "help_keyword"}, {mysqld_system_database, "help_relation"}, {mysqld_system_database, "help_topic"}, + {mysqld_system_database, "innodb_table_stats"}, + {mysqld_system_database, "innodb_index_stats"}, {(const char *)NULL, (const char *)NULL} /* This must be at the end */ }; @@ -362,20 +364,20 @@ struct st_sys_tbl_chk_params bool is_sql_layer_system_table; // IN param legacy_db_type db_type; // IN param - enum enum_sys_tbl_chk_status + enum enum_status { - // db.table_name is not a supported system table. - NOT_KNOWN_SYSTEM_TABLE, + // db.table_name is user table. + USER_TABLE, /* db.table_name is a system table, but may not be supported by SE. */ - KNOWN_SYSTEM_TABLE, + SYSTEM_TABLE, /* db.table_name is a system table, and is supported by SE. */ - SUPPORTED_SYSTEM_TABLE + SE_SUPPORTED_SYSTEM_TABLE } status; // OUT param }; @@ -5233,36 +5235,24 @@ ha_check_if_table_exists(THD* thd, const char *db, const char *name, DBUG_RETURN(FALSE); } -/** - @brief Check if a given table is a system table. - @details The primary purpose of introducing this function is to stop system - tables to be created or being moved to undesired storage engines. - - @todo There is another function called is_system_table_name() used by - get_table_category(), which is used to set TABLE_SHARE table_category. - It checks only a subset of table name like proc, event and time*. - We cannot use below function in get_table_category(), - as that affects locking mechanism. If we need to - unify these functions, we need to fix locking issues generated. +/** + @brief Check if a given table is a user table or a valid system table or + a valid system table that a SE supports. @param hton Handlerton of new engine. @param db Database name. @param table_name Table name to be checked. - @return Operation status - @retval true If the table name is a valid system table - or if its a valid user table. - - @retval false If the table name is a system table name - and does not belong to engine specified - in the command. + @retval st_sys_tbl_chk_params::enum_status */ -bool ha_check_if_supported_system_table(handlerton *hton, const char *db, - const char *table_name) +static st_sys_tbl_chk_params::enum_status +ha_get_system_table_check_status(handlerton *hton, const char *db, + const char *table_name) { - DBUG_ENTER("ha_check_if_supported_system_table"); + DBUG_ENTER("ha_get_system_table_check_status"); st_sys_tbl_chk_params check_params; + check_params.status= st_sys_tbl_chk_params::USER_TABLE; bool is_system_database= false; const char **names; st_handler_tablename *systab; @@ -5282,7 +5272,7 @@ bool ha_check_if_supported_system_table(handlerton *hton, const char *db, names++; } if (!is_system_database) - DBUG_RETURN(true); // It's a user table name. + DBUG_RETURN(st_sys_tbl_chk_params::USER_TABLE); // Check if this is SQL layer system tables. systab= mysqld_system_tables; @@ -5300,21 +5290,89 @@ bool ha_check_if_supported_system_table(handlerton *hton, const char *db, // Check if this is a system table and if some engine supports it. check_params.status= check_params.is_sql_layer_system_table ? - st_sys_tbl_chk_params::KNOWN_SYSTEM_TABLE : - st_sys_tbl_chk_params::NOT_KNOWN_SYSTEM_TABLE; + st_sys_tbl_chk_params::SYSTEM_TABLE : + st_sys_tbl_chk_params::USER_TABLE; check_params.db_type= hton->db_type; check_params.table_name= table_name; plugin_foreach(NULL, check_engine_system_table_handlerton, MYSQL_STORAGE_ENGINE_PLUGIN, &check_params); - // SE does not support this system table. - if (check_params.status == st_sys_tbl_chk_params::KNOWN_SYSTEM_TABLE) - DBUG_RETURN(false); + DBUG_RETURN(check_params.status); +} - // It's a system table or a valid user table. - DBUG_RETURN(true); + +/** + @brief Check if a given table is a system table supported by a SE. + + @todo There is another function called is_system_table_name() used by + get_table_category(), which is used to set TABLE_SHARE table_category. + It checks only a subset of table name like proc, event and time*. + We cannot use below function in get_table_category(), + as that affects locking mechanism. If we need to + unify these functions, we need to fix locking issues generated. + + @param hton Handlerton of new engine. + @param db Database name. + @param table_name Table name to be checked. + + @return Operation status + @retval true If the table name is a valid system table + that is supported by a SE. + + @retval false Not a system table. +*/ +bool ha_is_supported_system_table(handlerton *hton, const char *db, + const char *table_name) +{ + DBUG_ENTER("ha_is_supported_system_table"); + st_sys_tbl_chk_params::enum_status status= + ha_get_system_table_check_status(hton, db, table_name); + + // It's a valid SE supported system table. + DBUG_RETURN(status == st_sys_tbl_chk_params::SE_SUPPORTED_SYSTEM_TABLE); +} + + +/** + @brief Check if a given table is a system table that belongs + to some SE or a user table. + + @details The primary purpose of introducing this function is to stop system + tables to be created or being moved to undesired storage engines. + + @todo There is another function called is_system_table_name() used by + get_table_category(), which is used to set TABLE_SHARE table_category. + It checks only a subset of table name like proc, event and time*. + We cannot use below function in get_table_category(), + as that affects locking mechanism. If we need to + unify these functions, we need to fix locking issues generated. + + @param hton Handlerton of new engine. + @param db Database name. + @param table_name Table name to be checked. + + @return Operation status + @retval true If the table name is a valid system table + or if its a valid user table. + + @retval false If the table name is a system table name + and does not belong to engine specified + in the command. +*/ +bool ha_is_valid_system_or_user_table(handlerton *hton, const char *db, + const char *table_name) +{ + DBUG_ENTER("ha_is_valid_system_or_user_table"); + + st_sys_tbl_chk_params::enum_status status= + ha_get_system_table_check_status(hton, db, table_name); + + // It's a user table or a valid SE supported system table. + DBUG_RETURN(status == st_sys_tbl_chk_params::USER_TABLE || + status == st_sys_tbl_chk_params::SE_SUPPORTED_SYSTEM_TABLE); } + /** @brief Called for each SE to check if given db, tablename is a system table. @@ -5344,7 +5402,7 @@ static my_bool check_engine_system_table_handlerton(THD *unused, handlerton *hton= plugin_data(plugin); // Do we already know that the table is a system table? - if (check_params->status == st_sys_tbl_chk_params::KNOWN_SYSTEM_TABLE) + if (check_params->status == st_sys_tbl_chk_params::SYSTEM_TABLE) { /* If this is the same SE specified in the command, we can @@ -5356,7 +5414,8 @@ static my_bool check_engine_system_table_handlerton(THD *unused, hton->is_supported_system_table(check_params->db, check_params->table_name, check_params->is_sql_layer_system_table)) - check_params->status= st_sys_tbl_chk_params::SUPPORTED_SYSTEM_TABLE; + check_params->status= + st_sys_tbl_chk_params::SE_SUPPORTED_SYSTEM_TABLE; return TRUE; } /* @@ -5382,11 +5441,11 @@ static my_bool check_engine_system_table_handlerton(THD *unused, */ if (hton->db_type == check_params->db_type) { - check_params->status= st_sys_tbl_chk_params::SUPPORTED_SYSTEM_TABLE; + check_params->status= st_sys_tbl_chk_params::SE_SUPPORTED_SYSTEM_TABLE; return TRUE; } else - check_params->status= st_sys_tbl_chk_params::KNOWN_SYSTEM_TABLE; + check_params->status= st_sys_tbl_chk_params::SYSTEM_TABLE; } return FALSE; diff --git a/sql/handler.h b/sql/handler.h index 92b433239554..3cb113474d66 100644 --- a/sql/handler.h +++ b/sql/handler.h @@ -4040,8 +4040,10 @@ int ha_discover(THD* thd, const char* dbname, const char* name, int ha_find_files(THD *thd,const char *db,const char *path, const char *wild, bool dir, List* files); int ha_table_exists_in_engine(THD* thd, const char* db, const char* name); -bool ha_check_if_supported_system_table(handlerton *hton, const char* db, - const char* table_name); +bool ha_is_supported_system_table(handlerton *hton, const char *db, + const char *table_name); +bool ha_is_valid_system_or_user_table(handlerton *hton, const char *db, + const char *table_name); /* key cache */ extern "C" int ha_init_key_cache(const char *name, KEY_CACHE *key_cache); diff --git a/sql/sql_class.h b/sql/sql_class.h index a9bdb0046c18..87ee8f307a3a 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -1192,6 +1192,14 @@ class Dummy_error_handler : public Internal_error_handler } }; +class Key_length_error_handler : public Internal_error_handler { + public: + virtual bool handle_condition(THD *, uint sql_errno, const char *, + Sql_condition::enum_severity_level *, + const char *) { + return (sql_errno == ER_TOO_LONG_KEY); + } +}; /** This class is an internal error handler implementation for diff --git a/sql/sql_table.cc b/sql/sql_table.cc index c4afe359d11a..ec92483741b9 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -4481,7 +4481,8 @@ mysql_prepare_create_table(THD *thd, const char *error_schema_name, if (key_length > max_key_length && key->type != KEYTYPE_FULLTEXT) { my_error(ER_TOO_LONG_KEY,MYF(0),max_key_length); - DBUG_RETURN(TRUE); + if (thd->is_error()) // May be silenced - see Bug#20629014 + DBUG_RETURN(true); } if (validate_comment_length(thd, key->key_create_info.comment.str, &key->key_create_info.comment.length, @@ -4846,6 +4847,10 @@ bool create_table_impl(THD *thd, uint db_options; handler *file; bool error= TRUE; + bool is_whitelisted_table; + bool prepare_error; + Key_length_error_handler error_handler; + DBUG_ENTER("create_table_impl"); DBUG_PRINT("enter", ("db: '%s' table: '%s' tmp: %d", db, table_name, internal_tmp_table)); @@ -5163,13 +5168,28 @@ bool create_table_impl(THD *thd, } } - if (mysql_prepare_create_table(thd, db, error_table_name, - create_info, alter_info, - internal_tmp_table, - &db_options, file, - key_info, key_count, - select_field_count)) - goto err; + /* + System tables residing in mysql database and created + by innodb engine could be created with any supported + innodb page size ( 4k,8k,16K). We have a index size + limit depending upon the page size, but for system + tables which are whitelisted we can skip this check, + since the innodb engine ensures that the index size + will be supported. + */ + is_whitelisted_table = (file->ht->db_type == DB_TYPE_INNODB) ? + ha_is_supported_system_table(file->ht, db, error_table_name) : false; + if (is_whitelisted_table) thd->push_internal_handler(&error_handler); + + prepare_error= mysql_prepare_create_table(thd, db, error_table_name, + create_info, alter_info, + internal_tmp_table, + &db_options, file, + key_info, key_count, + select_field_count); + + if (is_whitelisted_table) thd->pop_internal_handler(); + if (prepare_error) goto err; if (create_info->options & HA_LEX_CREATE_TMP_TABLE) create_info->table_options|=HA_CREATE_DELAY_KEY_WRITE; @@ -10727,11 +10747,11 @@ static bool check_engine(THD *thd, const char *db_name, } /* - Check, if the given table name is system table, and if the storage engine + Check, if the given table name is system table, and if the storage engine does supports it. */ if ((create_info->used_fields & HA_CREATE_USED_ENGINE) && - !ha_check_if_supported_system_table(*new_engine, db_name, table_name)) + !ha_is_valid_system_or_user_table(*new_engine, db_name, table_name)) { my_error(ER_UNSUPPORTED_ENGINE, MYF(0), ha_resolve_storage_engine_name(*new_engine), db_name, table_name); diff --git a/storage/innobase/dict/dict0dict.cc b/storage/innobase/dict/dict0dict.cc index 3e45abbfb744..4ebe64708e5b 100644 --- a/storage/innobase/dict/dict0dict.cc +++ b/storage/innobase/dict/dict0dict.cc @@ -6349,9 +6349,20 @@ dict_table_schema_check( /* check length for exact match */ if (req_schema->columns[i].len != table->cols[j].len) { - CREATE_TYPES_NAMES(); + if(!strcmp(req_schema->table_name, TABLE_STATS_NAME) + || !strcmp(req_schema->table_name, INDEX_STATS_NAME)) { + ut_ad(table->cols[j].len < + req_schema->columns[i].len); + ib::warn() << "Table " << req_schema->table_name + << " has length mismatch in the" + << " column name " + << req_schema->columns[i].name + << ". Please run mysql_upgrade"; + } else { - ut_snprintf(errstr, errstr_sz, + CREATE_TYPES_NAMES(); + + ut_snprintf(errstr, errstr_sz, "Column %s in table %s is %s" " but should be %s (length mismatch).", req_schema->columns[i].name, @@ -6359,7 +6370,8 @@ dict_table_schema_check( buf, sizeof(buf)), actual_type, req_type); - return(DB_ERROR); + return(DB_ERROR); + } } /* check mtype for exact match */ diff --git a/storage/innobase/dict/dict0stats.cc b/storage/innobase/dict/dict0stats.cc index 5a9f34624c55..9cf08509834f 100644 --- a/storage/innobase/dict/dict0stats.cc +++ b/storage/innobase/dict/dict0stats.cc @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2009, 2017, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2009, 2018, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -183,7 +183,7 @@ dict_stats_persistent_storage_check( DATA_NOT_NULL, 192}, {"table_name", DATA_VARMYSQL, - DATA_NOT_NULL, 192}, + DATA_NOT_NULL, 597}, {"last_update", DATA_FIXBINARY, DATA_NOT_NULL, 4}, @@ -211,7 +211,7 @@ dict_stats_persistent_storage_check( DATA_NOT_NULL, 192}, {"table_name", DATA_VARMYSQL, - DATA_NOT_NULL, 192}, + DATA_NOT_NULL, 597}, {"index_name", DATA_VARMYSQL, DATA_NOT_NULL, 192}, diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index 34f4ecf72eed..58fcda9588e0 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -3367,6 +3367,8 @@ static bool innobase_is_supported_system_table(const char *db, "time_zone_name", "time_zone_transition", "time_zone_transition_type", + "innodb_table_stats", + "innodb_index_stats", (const char *)NULL }; if (!is_sql_layer_system_table) diff --git a/storage/innobase/handler/ha_innopart.cc b/storage/innobase/handler/ha_innopart.cc index 3a1cdcc314f3..0fb5623b070f 100644 --- a/storage/innobase/handler/ha_innopart.cc +++ b/storage/innobase/handler/ha_innopart.cc @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. +Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -52,6 +52,7 @@ Created Nov 22, 2013 Mattias Jonsson */ #include "ha_innopart.h" #include "partition_info.h" #include "key.h" +#include "dict0priv.h" #define INSIDE_HA_INNOPART_CC @@ -2721,6 +2722,8 @@ ha_innopart::create( char tablespace_name[NAME_LEN + 1]; char* table_name_end; size_t table_name_len; + size_t db_name_length; + ulint stat_table_name_length; char* partition_name_start; char table_data_file_name[FN_REFLEN]; char table_level_tablespace_name[NAME_LEN + 1]; @@ -2759,6 +2762,7 @@ ha_innopart::create( DBUG_RETURN(error); } ut_ad(temp_path[0] == '\0'); + db_name_length = strchr(table_name,'/') - table_name; strcpy(partition_name, table_name); partition_name_start = partition_name + strlen(partition_name); table_name_len = strlen(table_name); @@ -2793,6 +2797,33 @@ ha_innopart::create( row_mysql_lock_data_dictionary(info.trx()); + /* Mismatch can occur in the length of the column "table_name" in + mysql.innodb_table_stats and mysql.innodb_index_stats after the + fix to increase the column length of table_name column to accomdate + partition_names, so we first need to determine the length of the + "table_name" column and accordingly we can decide the length + of partition name .*/ + + dict_table_t *table = dict_table_get_low(TABLE_STATS_NAME); + if (table != NULL) { + ulint col_no = dict_table_has_column(table,"table_name",0); + ut_ad (col_no != table->n_def); + stat_table_name_length = table->cols[col_no].len; + if (stat_table_name_length > NAME_LEN) { + /* The maximum allowed length is 597 bytes + ,but the file name length cannot cross + FN_LEN */ + stat_table_name_length = FN_LEN; + } else { + stat_table_name_length = NAME_LEN; + } + + } else { + /* set the old length of 192 bytes in case of failure */ + stat_table_name_length = NAME_LEN; + ib::warn() << TABLE_STATS_NAME << " doesnt exist."; + } + /* TODO: use the new DD tables instead to decrease duplicate info. */ List_iterator_fast part_it(form->part_info->partitions); @@ -2808,7 +2839,18 @@ ha_innopart::create( exceeds maximum path length. */ if ((table_name_len + len + sizeof "/") >= FN_REFLEN) { error = HA_ERR_INTERNAL_ERROR; - my_error(ER_PATH_LENGTH, MYF(0), partition_name); + my_error(ER_IDENT_CAUSES_TOO_LONG_PATH, MYF(0), FN_REFLEN, + partition_name); + goto cleanup; + } + + /* Report error if table name with partition name exceeds + maximum file name length */ + if ((len + table_name_len - db_name_length - 1) + > stat_table_name_length) { + error = HA_ERR_INTERNAL_ERROR; + my_error(ER_PATH_LENGTH, MYF(0), + partition_name + db_name_length + 1 ); goto cleanup; } @@ -2850,9 +2892,22 @@ ha_innopart::create( exceeds maximum path length. */ if ((len + part_name_len + sizeof "/") >= FN_REFLEN) { error = HA_ERR_INTERNAL_ERROR; - my_error(ER_PATH_LENGTH, MYF(0), partition_name); + my_error(ER_IDENT_CAUSES_TOO_LONG_PATH, MYF(0), + FN_REFLEN, + partition_name); + goto cleanup; + } + + /* Report error if table name with partition + name exceeds maximum file name length */ + if ((len + part_name_len - db_name_length -1) + > stat_table_name_length ) { + error = HA_ERR_INTERNAL_ERROR;; + my_error(ER_PATH_LENGTH, MYF(0), + partition_name + db_name_length + 1); goto cleanup; } + /* Override part level DATA/INDEX DIRECTORY. */ set_create_info_dir(sub_elem, create_info); @@ -2907,14 +2962,6 @@ ha_innopart::create( part_sep, FN_REFLEN - table_name_len); - /* Report error if table name with partition name exceeds - maximum length */ - if ((len + table_name_len) >= NAME_LEN) { - my_error(ER_PATH_LENGTH, MYF(0), table_name); - error = HA_ERR_INTERNAL_ERROR; - goto end; - } - if (!form->part_info->is_sub_partitioned()) { error = info.create_table_update_dict(); if (error != 0) { @@ -2934,14 +2981,6 @@ ha_innopart::create( sub_sep, FN_REFLEN - table_name_len - part_name_len); - /* Report error if table name with partition - name exceeds maximum length */ - if ((len + table_name_len + - part_name_len) >= NAME_LEN) { - my_error(ER_PATH_LENGTH, MYF(0), table_name); - error = HA_ERR_INTERNAL_ERROR; - goto end; - } error = info.create_table_update_dict(); if (error != 0) { diff --git a/storage/innobase/handler/handler0alter.cc b/storage/innobase/handler/handler0alter.cc index ec6f45193ad8..8d28fa567244 100644 --- a/storage/innobase/handler/handler0alter.cc +++ b/storage/innobase/handler/handler0alter.cc @@ -8827,7 +8827,8 @@ ha_innobase::commit_inplace_alter_table( DBUG_SET("+d,innodb_report_deadlock"); ); - if (dict_stats_drop_table( + if (dict_stats_is_persistent_enabled(ctx->new_table) && + dict_stats_drop_table( ctx->new_table->name.m_name, errstr, sizeof(errstr)) != DB_SUCCESS) { diff --git a/storage/innobase/include/dict0stats.h b/storage/innobase/include/dict0stats.h index 1090273aeedb..45c00474f301 100644 --- a/storage/innobase/include/dict0stats.h +++ b/storage/innobase/include/dict0stats.h @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2009, 2017, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2009, 2018, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -31,6 +31,9 @@ Created Jan 06, 2010 Vasil Dimov #include "dict0types.h" #include "trx0types.h" +#define TABLE_STATS_NAME "mysql/innodb_table_stats" +#define INDEX_STATS_NAME "mysql/innodb_index_stats" + enum dict_stats_upd_option_t { DICT_STATS_RECALC_PERSISTENT,/* (re) calculate the statistics using a precise and slow diff --git a/storage/innobase/os/os0file.cc b/storage/innobase/os/os0file.cc index 6b3df4ebb417..b34dc6708a06 100644 --- a/storage/innobase/os/os0file.cc +++ b/storage/innobase/os/os0file.cc @@ -3120,7 +3120,8 @@ os_file_status_posix( if (!ret) { /* file exists, everything OK */ - } else if (errno == ENOENT || errno == ENOTDIR) { + } else if (errno == ENOENT || errno == ENOTDIR + || errno == ENAMETOOLONG) { /* file does not exist */ return(true); @@ -4150,7 +4151,8 @@ os_file_status_win32( if (!ret) { /* file exists, everything OK */ - } else if (errno == ENOENT || errno == ENOTDIR) { + } else if (errno == ENOENT || errno == ENOTDIR + || errno == ENAMETOOLONG) { /* file does not exist */ return(true); diff --git a/storage/innobase/row/row0mysql.cc b/storage/innobase/row/row0mysql.cc index 70258b2f0b18..af8cd89bd5df 100644 --- a/storage/innobase/row/row0mysql.cc +++ b/storage/innobase/row/row0mysql.cc @@ -4337,11 +4337,12 @@ row_drop_table_for_mysql( persistent storage if it exists and if there are stats for this table in there. This function creates its own trx and commits it. */ - char errstr[1024]; - err = dict_stats_drop_table(name, errstr, sizeof(errstr)); - - if (err != DB_SUCCESS) { - ib::warn() << errstr; + if (dict_stats_is_persistent_enabled(table)) { + char errstr[1024]; + err = dict_stats_drop_table(name, errstr, sizeof(errstr)); + if (err != DB_SUCCESS) { + ib::warn() << errstr; + } } } @@ -5255,7 +5256,17 @@ row_rename_table_for_mysql( ib::error() << "Trying to create a MySQL system table " << new_name << " of type InnoDB. MySQL system tables" " must be of the MyISAM type!"; + goto funct_exit; + } + + /* Check the table identifier length here. It is possible that when we + are renaming a temporary table back to original name (after alter) + the table identifier length can exceed the maximum file name limit */ + if (strlen(strchr(new_name,'/') + 1) > FN_LEN ) { + my_error(ER_PATH_LENGTH, MYF(0), + strchr(new_name,'/')+1); + err = DB_IDENTIFIER_TOO_LONG; goto funct_exit; } From 6dc2ddb829b9faa3266465f84f433bb25a3898d4 Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Wed, 16 May 2018 13:09:29 +0200 Subject: [PATCH 0841/1221] PS-4481: Introduce -DWITH_NUMA and -DWITH_SCALABILITY_METRICS for Travis CI Introduce: `-DWITH_NUMA=ON` for normal configurations `-DWITH_NUMA=OFF` for inverted configurations `-DWITH_SCALABILITY_METRICS=ON` for inverted configurations --- .travis.yml | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/.travis.yml b/.travis.yml index 1ba6a83185ea..529990870f9d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -186,14 +186,12 @@ script: PACKAGES="llvm-$VERSION-dev $PACKAGES"; curl -sSL "http://apt.llvm.org/llvm-snapshot.gpg.key" | sudo -E apt-key add -; echo "deb http://apt.llvm.org/trusty/ llvm-toolchain-trusty-$VERSION main" | sudo tee -a /etc/apt/sources.list > /dev/null; + sudo -E apt-add-repository -y "ppa:ubuntu-toolchain-r/test"; + fi; + if [[ "$TRAVIS_OS_NAME" == "linux" ]] && [[ "$CC" == "gcc" ]]; then + sudo -E apt-add-repository -y "ppa:jonathonf/gcc"; fi; if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then - sudo -E apt-add-repository -y "ppa:ubuntu-toolchain-r/test"; - sudo -E apt-add-repository -y "ppa:jonathonf/binutils"; - sudo -E apt-add-repository -y "ppa:jonathonf/gcc-5.5"; - sudo -E apt-add-repository -y "ppa:jonathonf/gcc-6.4"; - sudo -E apt-add-repository -y "ppa:jonathonf/gcc-7.3"; - sudo -E apt-add-repository -y "ppa:jonathonf/gcc-8.0"; sudo -E apt-add-repository -y "ppa:jonathonf/mysql"; fi; @@ -202,7 +200,7 @@ script: CC=$CC-$VERSION; CXX=$CXX-$VERSION; sudo -E apt-get -yq update >> ~/apt-get-update.log 2>&1; - sudo -E apt-get -yq --no-install-suggests --no-install-recommends install $CXX $PACKAGES cmake cmake-curses-gui bison libncurses5-dev libaio-dev libssl-dev libevent-dev libmecab-dev libprotobuf-dev protobuf-compiler liblz4-dev || travis_terminate 1; + sudo -E apt-get -yq --no-install-suggests --no-install-recommends install $CXX $PACKAGES cmake cmake-curses-gui bison libncurses5-dev libaio-dev libssl-dev libevent-dev libmecab-dev libprotobuf-dev protobuf-compiler liblz4-dev libnuma-dev || travis_terminate 1; sudo ln -s $(which ccache) /usr/lib/ccache/$CC; sudo ln -s $(which ccache) /usr/lib/ccache/$CXX || echo; else @@ -236,6 +234,11 @@ script: -DMYSQL_MAINTAINER_MODE=ON -DWITH_MECAB=system "; + if [[ "$INVERTED" == "ON" ]]; then + CMAKE_OPT+=" -DWITH_NUMA=OFF"; + else + CMAKE_OPT+=" -DWITH_NUMA=ON"; + fi; `# disable RocksDB for gcc-8 until MyRocks is warning-free`; if [[ "$CC" == "gcc-8" ]]; then NOT_GCC_8=0; else NOT_GCC_8=1; fi; if [[ "$TRAVIS_REPO_SLUG" == "percona/percona-server" ]]; then @@ -272,6 +275,7 @@ script: -DWITH_QUERY_RESPONSE_TIME=ON -DWITHOUT_PARTITION_STORAGE_ENGINE=ON -DWITHOUT_PERFSCHEMA_STORAGE_ENGINE=ON + -DWITH_SCALABILITY_METRICS=ON "; fi; From c8160bf273d463c62c5b5420c941bafcd254a867 Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Wed, 16 May 2018 12:53:01 +0200 Subject: [PATCH 0842/1221] PS-4481: Introduce -DWITH_NUMA and -DWITH_SCALABILITY_METRICS for Travis CI Introduce: `-DWITH_NUMA=ON` for normal configurations `-DWITH_NUMA=OFF` for inverted configurations `-DWITH_SCALABILITY_METRICS=ON` for inverted configurations --- .travis.yml | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/.travis.yml b/.travis.yml index b0689f43c9c3..0787e5f13818 100644 --- a/.travis.yml +++ b/.travis.yml @@ -184,14 +184,10 @@ script: PACKAGES="llvm-$VERSION-dev $PACKAGES"; curl -sSL "http://apt.llvm.org/llvm-snapshot.gpg.key" | sudo -E apt-key add -; echo "deb http://apt.llvm.org/trusty/ llvm-toolchain-trusty-$VERSION main" | sudo tee -a /etc/apt/sources.list > /dev/null; - fi; - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo -E apt-add-repository -y "ppa:ubuntu-toolchain-r/test"; - sudo -E apt-add-repository -y "ppa:jonathonf/binutils"; - sudo -E apt-add-repository -y "ppa:jonathonf/gcc-5.5"; - sudo -E apt-add-repository -y "ppa:jonathonf/gcc-6.4"; - sudo -E apt-add-repository -y "ppa:jonathonf/gcc-7.3"; - sudo -E apt-add-repository -y "ppa:jonathonf/gcc-8.0"; + fi; + if [[ "$TRAVIS_OS_NAME" == "linux" ]] && [[ "$CC" == "gcc" ]]; then + sudo -E apt-add-repository -y "ppa:jonathonf/gcc"; fi; - echo --- Update list of packages and download dependencies; @@ -199,7 +195,7 @@ script: CC=$CC-$VERSION; CXX=$CXX-$VERSION; sudo -E apt-get -yq update >> ~/apt-get-update.log 2>&1; - sudo -E apt-get -yq --no-install-suggests --no-install-recommends install $CXX $PACKAGES cmake cmake-curses-gui bison libncurses5-dev libaio-dev libssl-dev libevent-dev || travis_terminate 1; + sudo -E apt-get -yq --no-install-suggests --no-install-recommends install $CXX $PACKAGES cmake cmake-curses-gui bison libncurses5-dev libaio-dev libssl-dev libevent-dev libnuma-dev || travis_terminate 1; sudo ln -s $(which ccache) /usr/lib/ccache/$CC; sudo ln -s $(which ccache) /usr/lib/ccache/$CXX || echo; else @@ -230,6 +226,11 @@ script: -DMYSQL_MAINTAINER_MODE=ON -DWITH_TOKUDB=ON "; + if [[ "$INVERTED" == "ON" ]]; then + CMAKE_OPT+=" -DWITH_NUMA=OFF"; + else + CMAKE_OPT+=" -DWITH_NUMA=ON"; + fi; else CMAKE_OPT+=" -DMYSQL_MAINTAINER_MODE=OFF @@ -251,6 +252,7 @@ script: -DWITH_QUERY_RESPONSE_TIME=ON -DWITHOUT_PARTITION_STORAGE_ENGINE=ON -DWITHOUT_PERFSCHEMA_STORAGE_ENGINE=ON + -DWITH_SCALABILITY_METRICS=ON "; fi; From a4ea462626bcc28a20ab84f1ed3f788d6c41965d Mon Sep 17 00:00:00 2001 From: Sachin Agarwal Date: Thu, 17 May 2018 16:53:30 +0530 Subject: [PATCH 0843/1221] Bug #27326796 - MYSQL CRASH WITH INNODB ASSERTION FAILURE IN FILE PARS0PARS.CC Problem: As part of bug #24938374 fix, dict_operation_lock was not taken by fts_optimize_thread while syncing fts cache. Due to this change, alter query is able to update SYS_TABLE rows simultaneously. Now when fts_optimizer_thread goes open index table, It doesn't open index table if the record corresponding to that table is set to REC_INFO_DELETED_FLAG in SYS_TABLES and hits an assert. Fix: If fts sync is already in progress, Alter query would wait for sync to complete before renaming table. RB: #19604 Reviewed by : Jimmy.Yang@oracle.com --- storage/innobase/fts/fts0fts.cc | 67 +++++++++++---------------- storage/innobase/handler/ha_innodb.cc | 40 +++++++++++++++- 2 files changed, 66 insertions(+), 41 deletions(-) diff --git a/storage/innobase/fts/fts0fts.cc b/storage/innobase/fts/fts0fts.cc index f3fa6e52d0d4..a1f56671fc80 100644 --- a/storage/innobase/fts/fts0fts.cc +++ b/storage/innobase/fts/fts0fts.cc @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2011, 2017, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2011, 2018, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -868,37 +868,28 @@ fts_drop_index( err = fts_drop_index_tables(trx, index); - for(;;) { - bool retry = false; - if (index->index_fts_syncing) { - retry = true; - } - if (!retry){ - fts_free(table); - break; - } - DICT_BG_YIELD(trx); - } + while (index->index_fts_syncing + && !trx_is_interrupted(trx)) { + DICT_BG_YIELD(trx); + } + + fts_free(table); + return(err); } - for(;;) { - bool retry = false; - if (index->index_fts_syncing) { - retry = true; - } - if (!retry){ - current_doc_id = table->fts->cache->next_doc_id; - first_doc_id = table->fts->cache->first_doc_id; - fts_cache_clear(table->fts->cache); - fts_cache_destroy(table->fts->cache); - table->fts->cache = fts_cache_create(table); - table->fts->cache->next_doc_id = current_doc_id; - table->fts->cache->first_doc_id = first_doc_id; - break; - } - DICT_BG_YIELD(trx); - } + while (index->index_fts_syncing + && !trx_is_interrupted(trx)) { + DICT_BG_YIELD(trx); + } + + current_doc_id = table->fts->cache->next_doc_id; + first_doc_id = table->fts->cache->first_doc_id; + fts_cache_clear(table->fts->cache); + fts_cache_destroy(table->fts->cache); + table->fts->cache = fts_cache_create(table); + table->fts->cache->next_doc_id = current_doc_id; + table->fts->cache->first_doc_id = first_doc_id; } else { fts_cache_t* cache = table->fts->cache; fts_index_cache_t* index_cache; @@ -908,17 +899,13 @@ fts_drop_index( index_cache = fts_find_index_cache(cache, index); if (index_cache != NULL) { - for(;;) { - bool retry = false; - if (index->index_fts_syncing) { - retry = true; - } - if (!retry && index_cache->words) { - fts_words_free(index_cache->words); - rbt_free(index_cache->words); - break; - } - DICT_BG_YIELD(trx); + while (index->index_fts_syncing + && !trx_is_interrupted(trx)) { + DICT_BG_YIELD(trx); + } + if (index_cache->words) { + fts_words_free(index_cache->words); + rbt_free(index_cache->words); } ib_vector_remove(cache->indexes, *(void**) index_cache); diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index eb7fdaaddf48..b6bbcbde776a 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -10364,6 +10364,7 @@ static MY_ATTRIBUTE((nonnull, warn_unused_result)) dberr_t innobase_rename_table( /*==================*/ + THD* thd, /*!< Connection thread handle */ trx_t* trx, /*!< in: transaction */ const char* from, /*!< in: old name of the table */ const char* to) /*!< in: new name of the table */ @@ -10389,6 +10390,37 @@ innobase_rename_table( row_mysql_lock_data_dictionary(trx); + dict_table_t* table = NULL; + table = dict_table_open_on_name(norm_from, TRUE, FALSE, + DICT_ERR_IGNORE_NONE); + + /* Since DICT_BG_YIELD has sleep for 250 milliseconds, + Convert lock_wait_timeout unit from second to 250 milliseconds */ + long int lock_wait_timeout = thd_lock_wait_timeout(thd) * 4; + if (table != NULL) { + for (dict_index_t* index = dict_table_get_first_index(table); + index != NULL; + index = dict_table_get_next_index(index)) { + + if (index->type & DICT_FTS) { + /* Found */ + while (index->index_fts_syncing + && !trx_is_interrupted(trx) + && (lock_wait_timeout--) > 0) { + DICT_BG_YIELD(trx); + } + } + } + dict_table_close(table, TRUE, FALSE); + } + + /* FTS sync is in progress. We shall timeout this operation */ + if (lock_wait_timeout < 0) { + error = DB_LOCK_WAIT_TIMEOUT; + row_mysql_unlock_data_dictionary(trx); + DBUG_RETURN(error); + } + /* Transaction must be flagged as a locking transaction or it hasn't been started yet. */ @@ -10498,7 +10530,7 @@ ha_innobase::rename_table( ++trx->will_lock; trx_set_dict_operation(trx, TRX_DICT_OP_INDEX); - error = innobase_rename_table(trx, from, to); + error = innobase_rename_table(thd, trx, from, to); DEBUG_SYNC(thd, "after_innobase_rename_table"); @@ -10544,6 +10576,12 @@ ha_innobase::rename_table( error = DB_ERROR; } + else if (error == DB_LOCK_WAIT_TIMEOUT) { + my_error(ER_LOCK_WAIT_TIMEOUT, MYF(0), to); + + error = DB_LOCK_WAIT; + } + DBUG_RETURN(convert_error_code_to_mysql(error, 0, NULL)); } From 73aa73f23e6d5aa4602947c31ba85b9198d7ba48 Mon Sep 17 00:00:00 2001 From: Laurynas Biveinis Date: Thu, 17 May 2018 14:35:27 +0300 Subject: [PATCH 0844/1221] PS-3828 (InnoDB statistics in extended slow query log always zero) Percona Server 5.7 port had a regression where InnoDB slow query log extensions always returned zero values instead of actual data. This regression went unnoticed with existing MTR tests, which only checked for the correct slow query log format, without attempting to do any actual value validation. While 5.5 does not have the same bug, it is tested the same, thus rewrite the MTR tests to expand the testing coverage: that InnoDB_trx_id is not zero; test specifically that I/O reads are non-zero when I/O happens and zeros otherwise; likewise for record lock and InnoDB queue waits. The InnoDB queue wait was not tested at all, thus add the necessary debug sync points and a new test innodb.percona_log_slow_innodb_debug for it. At the same time do other test cleanups, including moving them to the right suites. --- .../percona_slow_log_verbosity_grep.inc | 22 ++- mysql-test/r/percona_log_slow_innodb.result | 42 ----- .../r/percona_log_slow_verbosity.result | 64 +++++-- .../innodb/r/percona_log_slow_innodb.result | 175 ++++++++++++++++++ .../r/percona_log_slow_innodb_debug.result | 52 ++++++ .../innodb/t/percona_log_slow_innodb.test | 119 ++++++++++++ .../t/percona_log_slow_innodb_debug.test | 61 ++++++ ...na_log_slow_slave_statements_innodb.result | 58 ++++++ ...ona_log_slow_slave_statements_innodb.test} | 31 ++-- mysql-test/t/percona_log_slow_innodb.test | 82 -------- storage/innobase/handler/ha_innodb.cc | 2 + storage/innobase/srv/srv0srv.c | 2 + 12 files changed, 556 insertions(+), 154 deletions(-) delete mode 100644 mysql-test/r/percona_log_slow_innodb.result create mode 100644 mysql-test/suite/innodb/r/percona_log_slow_innodb.result create mode 100644 mysql-test/suite/innodb/r/percona_log_slow_innodb_debug.result create mode 100644 mysql-test/suite/innodb/t/percona_log_slow_innodb.test create mode 100644 mysql-test/suite/innodb/t/percona_log_slow_innodb_debug.test create mode 100644 mysql-test/suite/rpl/r/percona_log_slow_slave_statements_innodb.result rename mysql-test/{t/percona_log_slow_slave_statements-innodb.test => suite/rpl/t/percona_log_slow_slave_statements_innodb.test} (62%) delete mode 100644 mysql-test/t/percona_log_slow_innodb.test diff --git a/mysql-test/include/percona_slow_log_verbosity_grep.inc b/mysql-test/include/percona_slow_log_verbosity_grep.inc index bf0e1bdfe45b..efc2210e1ff5 100644 --- a/mysql-test/include/percona_slow_log_verbosity_grep.inc +++ b/mysql-test/include/percona_slow_log_verbosity_grep.inc @@ -6,7 +6,7 @@ --let grep_pattern = ^# Bytes_sent: \d+.*\$ --source include/log_grep.inc # InnoDB ---let grep_pattern = ^# InnoDB_trx_id: \w+\$ +--let grep_pattern = ^# InnoDB_trx_id: [1-9A-F][0-9A-F]*\$ --source include/log_grep.inc # Query plan --let grep_pattern = ^# Bytes_sent: \d+ Tmp_tables: \d+ Tmp_disk_tables: \d+ Tmp_table_sizes: \d+\$ @@ -16,11 +16,27 @@ --let grep_pattern = ^# Filesort: (Yes|No) Filesort_on_disk: (Yes|No) Merge_passes: \d+\$ --source include/log_grep.inc # InnoDB ---let grep_pattern = ^# InnoDB_IO_r_ops: \d+ InnoDB_IO_r_bytes: \d+ InnoDB_IO_r_wait: \d*\.\d*\$ +# I/O read stats have two cases: all-zeros if fully-cached or all non-zeros. A third case is possible +# with InnoDB_IO_r_wait !=0 and the other two == 0, this can be added when it's tested +--let grep_pattern = ^# InnoDB_IO_r_ops: 0 InnoDB_IO_r_bytes: 0 InnoDB_IO_r_wait: 0\.0*\$ --source include/log_grep.inc +--let grep_pattern = ^# InnoDB_IO_r_ops: [1-9]\d* InnoDB_IO_r_bytes: [1-9]\d* InnoDB_IO_r_wait: (0\.\d*[1-9]\d*|[1-9]\d*\.\d+)\$ +--source include/log_grep.inc +# Rec lock wait and queue wait: check format --let grep_pattern = ^# InnoDB_rec_lock_wait: \d*\.\d* InnoDB_queue_wait: \d*\.\d*\$ --source include/log_grep.inc ---let grep_pattern = ^# InnoDB_pages_distinct: \d+\$ +# Rec lock wait: check value, either zero or non-zero +--let grep_pattern = InnoDB_rec_lock_wait: 0\.0* +--source include/log_grep.inc +--let grep_pattern = InnoDB_rec_lock_wait: (0\.\d*[1-9]\d*|[1-9]\d*\.\d+) +--source include/log_grep.inc +# Queue wait: check value, either zero or non-zero +--let grep_pattern = InnoDB_queue_wait: 0\.0* +--source include/log_grep.inc +--let grep_pattern = InnoDB_queue_wait: (0\.\d*[1-9]\d*|[1-9]\d*\.\d+) +--source include/log_grep.inc +# If present, InnoDB distinct pages are always non-zero +--let grep_pattern = ^# InnoDB_pages_distinct: [1-9]\d*\$ --source include/log_grep.inc --let grep_pattern = ^# No InnoDB statistics available for this query\$ --source include/log_grep.inc diff --git a/mysql-test/r/percona_log_slow_innodb.result b/mysql-test/r/percona_log_slow_innodb.result deleted file mode 100644 index 0e2f0a48e50b..000000000000 --- a/mysql-test/r/percona_log_slow_innodb.result +++ /dev/null @@ -1,42 +0,0 @@ -DROP TABLE IF EXISTS t1, t2; -CREATE TABLE t1(a INT) ENGINE=InnoDB; -INSERT INTO t1 VALUE(1); -CREATE TABLE t2(a INT) ENGINE=InnoDB; -INSERT INTO t2 VALUE(1); -SET SESSION min_examined_row_limit=0; -SET SESSION long_query_time=0; -SET @old_log_slow_verbosity := @@log_slow_verbosity; -SET SESSION log_slow_verbosity='microtime,innodb'; -[log_start.inc] percona.slow_extended.innodb_0 -INSERT INTO t1 VALUES(2); -INSERT INTO t2 VALUES(2); -INSERT INTO t1 VALUES(3); -SELECT 5; -5 -5 -[log_stop.inc] percona.slow_extended.innodb_0 -LOCK TABLE t1 WRITE; -[log_start.inc] percona.slow_extended.innodb_3 -LOCK TABLE t1 WRITE; -SELECT SLEEP(5); -SLEEP(5) -0 -UNLOCK TABLES; -[log_stop.inc] percona.slow_extended.innodb_3 -UNLOCK TABLES; -BEGIN; -SELECT * FROM t2 FOR UPDATE; -a -1 -2 -[log_start.inc] percona.slow_extended.innodb_4 -DELETE FROM t2 WHERE a=2; -SELECT SLEEP(5); -SLEEP(5) -0 -COMMIT; -[log_stop.inc] percona.slow_extended.innodb_4 -SET SESSION min_examined_row_limit=default; -SET SESSION long_query_time=default; -SET SESSION log_slow_verbosity=@old_log_slow_verbosity; -DROP TABLE t1, t2; diff --git a/mysql-test/r/percona_log_slow_verbosity.result b/mysql-test/r/percona_log_slow_verbosity.result index cc123ff5b45e..cc01b314cf4d 100644 --- a/mysql-test/r/percona_log_slow_verbosity.result +++ b/mysql-test/r/percona_log_slow_verbosity.result @@ -13,7 +13,7 @@ log_slow_verbosity='microtime,innodb,query_plan': [log_grep.inc] lines: 2 [log_grep.inc] file: percona.slow_extended.log_slow_verbosity_0 pattern: ^# Bytes_sent: \d+.*$ [log_grep.inc] lines: 2 -[log_grep.inc] file: percona.slow_extended.log_slow_verbosity_0 pattern: ^# InnoDB_trx_id: \w+$ +[log_grep.inc] file: percona.slow_extended.log_slow_verbosity_0 pattern: ^# InnoDB_trx_id: [1-9A-F][0-9A-F]*$ [log_grep.inc] lines: 1 [log_grep.inc] file: percona.slow_extended.log_slow_verbosity_0 pattern: ^# Bytes_sent: \d+ Tmp_tables: \d+ Tmp_disk_tables: \d+ Tmp_table_sizes: \d+$ [log_grep.inc] lines: 2 @@ -21,11 +21,21 @@ log_slow_verbosity='microtime,innodb,query_plan': [log_grep.inc] lines: 2 [log_grep.inc] file: percona.slow_extended.log_slow_verbosity_0 pattern: ^# Filesort: (Yes|No) Filesort_on_disk: (Yes|No) Merge_passes: \d+$ [log_grep.inc] lines: 2 -[log_grep.inc] file: percona.slow_extended.log_slow_verbosity_0 pattern: ^# InnoDB_IO_r_ops: \d+ InnoDB_IO_r_bytes: \d+ InnoDB_IO_r_wait: \d*\.\d*$ +[log_grep.inc] file: percona.slow_extended.log_slow_verbosity_0 pattern: ^# InnoDB_IO_r_ops: 0 InnoDB_IO_r_bytes: 0 InnoDB_IO_r_wait: 0\.0*$ [log_grep.inc] lines: 1 +[log_grep.inc] file: percona.slow_extended.log_slow_verbosity_0 pattern: ^# InnoDB_IO_r_ops: [1-9]\d* InnoDB_IO_r_bytes: [1-9]\d* InnoDB_IO_r_wait: (0\.\d*[1-9]\d*|[1-9]\d*\.\d+)$ +[log_grep.inc] lines: 0 [log_grep.inc] file: percona.slow_extended.log_slow_verbosity_0 pattern: ^# InnoDB_rec_lock_wait: \d*\.\d* InnoDB_queue_wait: \d*\.\d*$ [log_grep.inc] lines: 1 -[log_grep.inc] file: percona.slow_extended.log_slow_verbosity_0 pattern: ^# InnoDB_pages_distinct: \d+$ +[log_grep.inc] file: percona.slow_extended.log_slow_verbosity_0 pattern: InnoDB_rec_lock_wait: 0\.0* +[log_grep.inc] lines: 1 +[log_grep.inc] file: percona.slow_extended.log_slow_verbosity_0 pattern: InnoDB_rec_lock_wait: (0\.\d*[1-9]\d*|[1-9]\d*\.\d+) +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.log_slow_verbosity_0 pattern: InnoDB_queue_wait: 0\.0* +[log_grep.inc] lines: 1 +[log_grep.inc] file: percona.slow_extended.log_slow_verbosity_0 pattern: InnoDB_queue_wait: (0\.\d*[1-9]\d*|[1-9]\d*\.\d+) +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.log_slow_verbosity_0 pattern: ^# InnoDB_pages_distinct: [1-9]\d*$ [log_grep.inc] lines: 1 [log_grep.inc] file: percona.slow_extended.log_slow_verbosity_0 pattern: ^# No InnoDB statistics available for this query$ [log_grep.inc] lines: 1 @@ -42,7 +52,7 @@ log_slow_verbosity='microtime,innodb,query_plan': [log_grep.inc] lines: 2 [log_grep.inc] file: percona.slow_extended.log_slow_verbosity_1 pattern: ^# Bytes_sent: \d+.*$ [log_grep.inc] lines: 2 -[log_grep.inc] file: percona.slow_extended.log_slow_verbosity_1 pattern: ^# InnoDB_trx_id: \w+$ +[log_grep.inc] file: percona.slow_extended.log_slow_verbosity_1 pattern: ^# InnoDB_trx_id: [1-9A-F][0-9A-F]*$ [log_grep.inc] lines: 0 [log_grep.inc] file: percona.slow_extended.log_slow_verbosity_1 pattern: ^# Bytes_sent: \d+ Tmp_tables: \d+ Tmp_disk_tables: \d+ Tmp_table_sizes: \d+$ [log_grep.inc] lines: 2 @@ -50,11 +60,21 @@ log_slow_verbosity='microtime,innodb,query_plan': [log_grep.inc] lines: 2 [log_grep.inc] file: percona.slow_extended.log_slow_verbosity_1 pattern: ^# Filesort: (Yes|No) Filesort_on_disk: (Yes|No) Merge_passes: \d+$ [log_grep.inc] lines: 2 -[log_grep.inc] file: percona.slow_extended.log_slow_verbosity_1 pattern: ^# InnoDB_IO_r_ops: \d+ InnoDB_IO_r_bytes: \d+ InnoDB_IO_r_wait: \d*\.\d*$ +[log_grep.inc] file: percona.slow_extended.log_slow_verbosity_1 pattern: ^# InnoDB_IO_r_ops: 0 InnoDB_IO_r_bytes: 0 InnoDB_IO_r_wait: 0\.0*$ +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.log_slow_verbosity_1 pattern: ^# InnoDB_IO_r_ops: [1-9]\d* InnoDB_IO_r_bytes: [1-9]\d* InnoDB_IO_r_wait: (0\.\d*[1-9]\d*|[1-9]\d*\.\d+)$ [log_grep.inc] lines: 0 [log_grep.inc] file: percona.slow_extended.log_slow_verbosity_1 pattern: ^# InnoDB_rec_lock_wait: \d*\.\d* InnoDB_queue_wait: \d*\.\d*$ [log_grep.inc] lines: 0 -[log_grep.inc] file: percona.slow_extended.log_slow_verbosity_1 pattern: ^# InnoDB_pages_distinct: \d+$ +[log_grep.inc] file: percona.slow_extended.log_slow_verbosity_1 pattern: InnoDB_rec_lock_wait: 0\.0* +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.log_slow_verbosity_1 pattern: InnoDB_rec_lock_wait: (0\.\d*[1-9]\d*|[1-9]\d*\.\d+) +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.log_slow_verbosity_1 pattern: InnoDB_queue_wait: 0\.0* +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.log_slow_verbosity_1 pattern: InnoDB_queue_wait: (0\.\d*[1-9]\d*|[1-9]\d*\.\d+) +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.log_slow_verbosity_1 pattern: ^# InnoDB_pages_distinct: [1-9]\d*$ [log_grep.inc] lines: 0 [log_grep.inc] file: percona.slow_extended.log_slow_verbosity_1 pattern: ^# No InnoDB statistics available for this query$ [log_grep.inc] lines: 2 @@ -69,7 +89,7 @@ log_slow_verbosity='microtime': [log_grep.inc] lines: 2 [log_grep.inc] file: percona.slow_extended.log_slow_verbosity_2 pattern: ^# Bytes_sent: \d+.*$ [log_grep.inc] lines: 2 -[log_grep.inc] file: percona.slow_extended.log_slow_verbosity_2 pattern: ^# InnoDB_trx_id: \w+$ +[log_grep.inc] file: percona.slow_extended.log_slow_verbosity_2 pattern: ^# InnoDB_trx_id: [1-9A-F][0-9A-F]*$ [log_grep.inc] lines: 0 [log_grep.inc] file: percona.slow_extended.log_slow_verbosity_2 pattern: ^# Bytes_sent: \d+ Tmp_tables: \d+ Tmp_disk_tables: \d+ Tmp_table_sizes: \d+$ [log_grep.inc] lines: 0 @@ -77,11 +97,21 @@ log_slow_verbosity='microtime': [log_grep.inc] lines: 0 [log_grep.inc] file: percona.slow_extended.log_slow_verbosity_2 pattern: ^# Filesort: (Yes|No) Filesort_on_disk: (Yes|No) Merge_passes: \d+$ [log_grep.inc] lines: 0 -[log_grep.inc] file: percona.slow_extended.log_slow_verbosity_2 pattern: ^# InnoDB_IO_r_ops: \d+ InnoDB_IO_r_bytes: \d+ InnoDB_IO_r_wait: \d*\.\d*$ +[log_grep.inc] file: percona.slow_extended.log_slow_verbosity_2 pattern: ^# InnoDB_IO_r_ops: 0 InnoDB_IO_r_bytes: 0 InnoDB_IO_r_wait: 0\.0*$ +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.log_slow_verbosity_2 pattern: ^# InnoDB_IO_r_ops: [1-9]\d* InnoDB_IO_r_bytes: [1-9]\d* InnoDB_IO_r_wait: (0\.\d*[1-9]\d*|[1-9]\d*\.\d+)$ [log_grep.inc] lines: 0 [log_grep.inc] file: percona.slow_extended.log_slow_verbosity_2 pattern: ^# InnoDB_rec_lock_wait: \d*\.\d* InnoDB_queue_wait: \d*\.\d*$ [log_grep.inc] lines: 0 -[log_grep.inc] file: percona.slow_extended.log_slow_verbosity_2 pattern: ^# InnoDB_pages_distinct: \d+$ +[log_grep.inc] file: percona.slow_extended.log_slow_verbosity_2 pattern: InnoDB_rec_lock_wait: 0\.0* +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.log_slow_verbosity_2 pattern: InnoDB_rec_lock_wait: (0\.\d*[1-9]\d*|[1-9]\d*\.\d+) +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.log_slow_verbosity_2 pattern: InnoDB_queue_wait: 0\.0* +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.log_slow_verbosity_2 pattern: InnoDB_queue_wait: (0\.\d*[1-9]\d*|[1-9]\d*\.\d+) +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.log_slow_verbosity_2 pattern: ^# InnoDB_pages_distinct: [1-9]\d*$ [log_grep.inc] lines: 0 [log_grep.inc] file: percona.slow_extended.log_slow_verbosity_2 pattern: ^# No InnoDB statistics available for this query$ [log_grep.inc] lines: 0 @@ -96,7 +126,7 @@ log_slow_verbosity='query_plan': [log_grep.inc] lines: 2 [log_grep.inc] file: percona.slow_extended.log_slow_verbosity_3 pattern: ^# Bytes_sent: \d+.*$ [log_grep.inc] lines: 2 -[log_grep.inc] file: percona.slow_extended.log_slow_verbosity_3 pattern: ^# InnoDB_trx_id: \w+$ +[log_grep.inc] file: percona.slow_extended.log_slow_verbosity_3 pattern: ^# InnoDB_trx_id: [1-9A-F][0-9A-F]*$ [log_grep.inc] lines: 0 [log_grep.inc] file: percona.slow_extended.log_slow_verbosity_3 pattern: ^# Bytes_sent: \d+ Tmp_tables: \d+ Tmp_disk_tables: \d+ Tmp_table_sizes: \d+$ [log_grep.inc] lines: 2 @@ -104,11 +134,21 @@ log_slow_verbosity='query_plan': [log_grep.inc] lines: 2 [log_grep.inc] file: percona.slow_extended.log_slow_verbosity_3 pattern: ^# Filesort: (Yes|No) Filesort_on_disk: (Yes|No) Merge_passes: \d+$ [log_grep.inc] lines: 2 -[log_grep.inc] file: percona.slow_extended.log_slow_verbosity_3 pattern: ^# InnoDB_IO_r_ops: \d+ InnoDB_IO_r_bytes: \d+ InnoDB_IO_r_wait: \d*\.\d*$ +[log_grep.inc] file: percona.slow_extended.log_slow_verbosity_3 pattern: ^# InnoDB_IO_r_ops: 0 InnoDB_IO_r_bytes: 0 InnoDB_IO_r_wait: 0\.0*$ +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.log_slow_verbosity_3 pattern: ^# InnoDB_IO_r_ops: [1-9]\d* InnoDB_IO_r_bytes: [1-9]\d* InnoDB_IO_r_wait: (0\.\d*[1-9]\d*|[1-9]\d*\.\d+)$ [log_grep.inc] lines: 0 [log_grep.inc] file: percona.slow_extended.log_slow_verbosity_3 pattern: ^# InnoDB_rec_lock_wait: \d*\.\d* InnoDB_queue_wait: \d*\.\d*$ [log_grep.inc] lines: 0 -[log_grep.inc] file: percona.slow_extended.log_slow_verbosity_3 pattern: ^# InnoDB_pages_distinct: \d+$ +[log_grep.inc] file: percona.slow_extended.log_slow_verbosity_3 pattern: InnoDB_rec_lock_wait: 0\.0* +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.log_slow_verbosity_3 pattern: InnoDB_rec_lock_wait: (0\.\d*[1-9]\d*|[1-9]\d*\.\d+) +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.log_slow_verbosity_3 pattern: InnoDB_queue_wait: 0\.0* +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.log_slow_verbosity_3 pattern: InnoDB_queue_wait: (0\.\d*[1-9]\d*|[1-9]\d*\.\d+) +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.log_slow_verbosity_3 pattern: ^# InnoDB_pages_distinct: [1-9]\d*$ [log_grep.inc] lines: 0 [log_grep.inc] file: percona.slow_extended.log_slow_verbosity_3 pattern: ^# No InnoDB statistics available for this query$ [log_grep.inc] lines: 0 diff --git a/mysql-test/suite/innodb/r/percona_log_slow_innodb.result b/mysql-test/suite/innodb/r/percona_log_slow_innodb.result new file mode 100644 index 000000000000..a34960eea239 --- /dev/null +++ b/mysql-test/suite/innodb/r/percona_log_slow_innodb.result @@ -0,0 +1,175 @@ +SET GLOBAL innodb_file_per_table = ON; +CREATE TABLE t1(a INT AUTO_INCREMENT PRIMARY KEY) ENGINE=InnoDB; +# Inserting rows +CREATE TABLE t2(a INT) ENGINE=InnoDB; +INSERT INTO t2 VALUE(1); +SELECT @@GLOBAL.innodb_file_per_table; +@@GLOBAL.innodb_file_per_table +0 +SET SESSION long_query_time=0; +SET SESSION log_slow_verbosity='microtime,innodb'; +[log_start.inc] percona.slow_extended.innodb_0 +SELECT SUM(a) FROM t1; +SUM(a) +500500 +[log_stop.inc] percona.slow_extended.innodb_0 +[log_grep.inc] file: percona.slow_extended.innodb_0 pattern: ^# Thread_id: \d+ Schema: .+ Last_errno: \d+ Killed: \d+$ +[log_grep.inc] lines: 2 +[log_grep.inc] file: percona.slow_extended.innodb_0 pattern: ^#.*Rows_affected: \d+ Rows_read: \d+$ +[log_grep.inc] lines: 2 +[log_grep.inc] file: percona.slow_extended.innodb_0 pattern: ^# Bytes_sent: \d+.*$ +[log_grep.inc] lines: 2 +[log_grep.inc] file: percona.slow_extended.innodb_0 pattern: ^# InnoDB_trx_id: [1-9A-F][0-9A-F]*$ +[log_grep.inc] lines: 1 +[log_grep.inc] file: percona.slow_extended.innodb_0 pattern: ^# Bytes_sent: \d+ Tmp_tables: \d+ Tmp_disk_tables: \d+ Tmp_table_sizes: \d+$ +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.innodb_0 pattern: ^# QC_Hit: (Yes|No) Full_scan: (Yes|No) Full_join: (Yes|No) Tmp_table: (Yes|No) Tmp_table_on_disk: (Yes|No)$ +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.innodb_0 pattern: ^# Filesort: (Yes|No) Filesort_on_disk: (Yes|No) Merge_passes: \d+$ +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.innodb_0 pattern: ^# InnoDB_IO_r_ops: 0 InnoDB_IO_r_bytes: 0 InnoDB_IO_r_wait: 0\.0*$ +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.innodb_0 pattern: ^# InnoDB_IO_r_ops: [1-9]\d* InnoDB_IO_r_bytes: [1-9]\d* InnoDB_IO_r_wait: (0\.\d*[1-9]\d*|[1-9]\d*\.\d+)$ +[log_grep.inc] lines: 1 +[log_grep.inc] file: percona.slow_extended.innodb_0 pattern: ^# InnoDB_rec_lock_wait: \d*\.\d* InnoDB_queue_wait: \d*\.\d*$ +[log_grep.inc] lines: 1 +[log_grep.inc] file: percona.slow_extended.innodb_0 pattern: InnoDB_rec_lock_wait: 0\.0* +[log_grep.inc] lines: 1 +[log_grep.inc] file: percona.slow_extended.innodb_0 pattern: InnoDB_rec_lock_wait: (0\.\d*[1-9]\d*|[1-9]\d*\.\d+) +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.innodb_0 pattern: InnoDB_queue_wait: 0\.0* +[log_grep.inc] lines: 1 +[log_grep.inc] file: percona.slow_extended.innodb_0 pattern: InnoDB_queue_wait: (0\.\d*[1-9]\d*|[1-9]\d*\.\d+) +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.innodb_0 pattern: ^# InnoDB_pages_distinct: [1-9]\d*$ +[log_grep.inc] lines: 1 +[log_grep.inc] file: percona.slow_extended.innodb_0 pattern: ^# No InnoDB statistics available for this query$ +[log_grep.inc] lines: 1 +[log_start.inc] percona.slow_extended.innodb_2 +SELECT 5; +5 +5 +[log_stop.inc] percona.slow_extended.innodb_2 +[log_grep.inc] file: percona.slow_extended.innodb_2 pattern: ^# Thread_id: \d+ Schema: .+ Last_errno: \d+ Killed: \d+$ +[log_grep.inc] lines: 2 +[log_grep.inc] file: percona.slow_extended.innodb_2 pattern: ^#.*Rows_affected: \d+ Rows_read: \d+$ +[log_grep.inc] lines: 2 +[log_grep.inc] file: percona.slow_extended.innodb_2 pattern: ^# Bytes_sent: \d+.*$ +[log_grep.inc] lines: 2 +[log_grep.inc] file: percona.slow_extended.innodb_2 pattern: ^# InnoDB_trx_id: [1-9A-F][0-9A-F]*$ +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.innodb_2 pattern: ^# Bytes_sent: \d+ Tmp_tables: \d+ Tmp_disk_tables: \d+ Tmp_table_sizes: \d+$ +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.innodb_2 pattern: ^# QC_Hit: (Yes|No) Full_scan: (Yes|No) Full_join: (Yes|No) Tmp_table: (Yes|No) Tmp_table_on_disk: (Yes|No)$ +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.innodb_2 pattern: ^# Filesort: (Yes|No) Filesort_on_disk: (Yes|No) Merge_passes: \d+$ +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.innodb_2 pattern: ^# InnoDB_IO_r_ops: 0 InnoDB_IO_r_bytes: 0 InnoDB_IO_r_wait: 0\.0*$ +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.innodb_2 pattern: ^# InnoDB_IO_r_ops: [1-9]\d* InnoDB_IO_r_bytes: [1-9]\d* InnoDB_IO_r_wait: (0\.\d*[1-9]\d*|[1-9]\d*\.\d+)$ +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.innodb_2 pattern: ^# InnoDB_rec_lock_wait: \d*\.\d* InnoDB_queue_wait: \d*\.\d*$ +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.innodb_2 pattern: InnoDB_rec_lock_wait: 0\.0* +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.innodb_2 pattern: InnoDB_rec_lock_wait: (0\.\d*[1-9]\d*|[1-9]\d*\.\d+) +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.innodb_2 pattern: InnoDB_queue_wait: 0\.0* +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.innodb_2 pattern: InnoDB_queue_wait: (0\.\d*[1-9]\d*|[1-9]\d*\.\d+) +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.innodb_2 pattern: ^# InnoDB_pages_distinct: [1-9]\d*$ +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.innodb_2 pattern: ^# No InnoDB statistics available for this query$ +[log_grep.inc] lines: 2 +LOCK TABLE t1 WRITE; +SET SESSION long_query_time=0; +SET SESSION log_slow_verbosity='microtime,innodb'; +[log_start.inc] percona.slow_extended.innodb_3 +LOCK TABLE t1 WRITE; +SET SESSION long_query_time=5000; +SET SESSION long_query_time=0; +SELECT SLEEP(2); +SLEEP(2) +0 +UNLOCK TABLES; +[log_stop.inc] percona.slow_extended.innodb_3 +[log_grep.inc] file: percona.slow_extended.innodb_3 pattern: ^# Thread_id: \d+ Schema: .+ Last_errno: \d+ Killed: \d+$ +[log_grep.inc] lines: 5 +[log_grep.inc] file: percona.slow_extended.innodb_3 pattern: ^#.*Rows_affected: \d+ Rows_read: \d+$ +[log_grep.inc] lines: 5 +[log_grep.inc] file: percona.slow_extended.innodb_3 pattern: ^# Bytes_sent: \d+.*$ +[log_grep.inc] lines: 5 +[log_grep.inc] file: percona.slow_extended.innodb_3 pattern: ^# InnoDB_trx_id: [1-9A-F][0-9A-F]*$ +[log_grep.inc] lines: 1 +[log_grep.inc] file: percona.slow_extended.innodb_3 pattern: ^# Bytes_sent: \d+ Tmp_tables: \d+ Tmp_disk_tables: \d+ Tmp_table_sizes: \d+$ +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.innodb_3 pattern: ^# QC_Hit: (Yes|No) Full_scan: (Yes|No) Full_join: (Yes|No) Tmp_table: (Yes|No) Tmp_table_on_disk: (Yes|No)$ +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.innodb_3 pattern: ^# Filesort: (Yes|No) Filesort_on_disk: (Yes|No) Merge_passes: \d+$ +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.innodb_3 pattern: ^# InnoDB_IO_r_ops: 0 InnoDB_IO_r_bytes: 0 InnoDB_IO_r_wait: 0\.0*$ +[log_grep.inc] lines: 1 +[log_grep.inc] file: percona.slow_extended.innodb_3 pattern: ^# InnoDB_IO_r_ops: [1-9]\d* InnoDB_IO_r_bytes: [1-9]\d* InnoDB_IO_r_wait: (0\.\d*[1-9]\d*|[1-9]\d*\.\d+)$ +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.innodb_3 pattern: ^# InnoDB_rec_lock_wait: \d*\.\d* InnoDB_queue_wait: \d*\.\d*$ +[log_grep.inc] lines: 1 +[log_grep.inc] file: percona.slow_extended.innodb_3 pattern: InnoDB_rec_lock_wait: 0\.0* +[log_grep.inc] lines: 1 +[log_grep.inc] file: percona.slow_extended.innodb_3 pattern: InnoDB_rec_lock_wait: (0\.\d*[1-9]\d*|[1-9]\d*\.\d+) +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.innodb_3 pattern: InnoDB_queue_wait: 0\.0* +[log_grep.inc] lines: 1 +[log_grep.inc] file: percona.slow_extended.innodb_3 pattern: InnoDB_queue_wait: (0\.\d*[1-9]\d*|[1-9]\d*\.\d+) +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.innodb_3 pattern: ^# InnoDB_pages_distinct: [1-9]\d*$ +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.innodb_3 pattern: ^# No InnoDB statistics available for this query$ +[log_grep.inc] lines: 4 +UNLOCK TABLES; +BEGIN; +SELECT * FROM t2 FOR UPDATE; +a +1 +[log_start.inc] percona.slow_extended.innodb_4 +DELETE FROM t2 WHERE a=2; +SET SESSION long_query_time=5000; +SET SESSION long_query_time=0; +SELECT SLEEP(2); +SLEEP(2) +0 +COMMIT; +[log_stop.inc] percona.slow_extended.innodb_4 +[log_grep.inc] file: percona.slow_extended.innodb_4 pattern: ^# Thread_id: \d+ Schema: .+ Last_errno: \d+ Killed: \d+$ +[log_grep.inc] lines: 5 +[log_grep.inc] file: percona.slow_extended.innodb_4 pattern: ^#.*Rows_affected: \d+ Rows_read: \d+$ +[log_grep.inc] lines: 5 +[log_grep.inc] file: percona.slow_extended.innodb_4 pattern: ^# Bytes_sent: \d+.*$ +[log_grep.inc] lines: 5 +[log_grep.inc] file: percona.slow_extended.innodb_4 pattern: ^# InnoDB_trx_id: [1-9A-F][0-9A-F]*$ +[log_grep.inc] lines: 1 +[log_grep.inc] file: percona.slow_extended.innodb_4 pattern: ^# Bytes_sent: \d+ Tmp_tables: \d+ Tmp_disk_tables: \d+ Tmp_table_sizes: \d+$ +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.innodb_4 pattern: ^# QC_Hit: (Yes|No) Full_scan: (Yes|No) Full_join: (Yes|No) Tmp_table: (Yes|No) Tmp_table_on_disk: (Yes|No)$ +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.innodb_4 pattern: ^# Filesort: (Yes|No) Filesort_on_disk: (Yes|No) Merge_passes: \d+$ +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.innodb_4 pattern: ^# InnoDB_IO_r_ops: 0 InnoDB_IO_r_bytes: 0 InnoDB_IO_r_wait: 0\.0*$ +[log_grep.inc] lines: 1 +[log_grep.inc] file: percona.slow_extended.innodb_4 pattern: ^# InnoDB_IO_r_ops: [1-9]\d* InnoDB_IO_r_bytes: [1-9]\d* InnoDB_IO_r_wait: (0\.\d*[1-9]\d*|[1-9]\d*\.\d+)$ +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.innodb_4 pattern: ^# InnoDB_rec_lock_wait: \d*\.\d* InnoDB_queue_wait: \d*\.\d*$ +[log_grep.inc] lines: 1 +[log_grep.inc] file: percona.slow_extended.innodb_4 pattern: InnoDB_rec_lock_wait: 0\.0* +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.innodb_4 pattern: InnoDB_rec_lock_wait: (0\.\d*[1-9]\d*|[1-9]\d*\.\d+) +[log_grep.inc] lines: 1 +[log_grep.inc] file: percona.slow_extended.innodb_4 pattern: InnoDB_queue_wait: 0\.0* +[log_grep.inc] lines: 1 +[log_grep.inc] file: percona.slow_extended.innodb_4 pattern: InnoDB_queue_wait: (0\.\d*[1-9]\d*|[1-9]\d*\.\d+) +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.innodb_4 pattern: ^# InnoDB_pages_distinct: [1-9]\d*$ +[log_grep.inc] lines: 1 +[log_grep.inc] file: percona.slow_extended.innodb_4 pattern: ^# No InnoDB statistics available for this query$ +[log_grep.inc] lines: 4 +DROP TABLE t1, t2; diff --git a/mysql-test/suite/innodb/r/percona_log_slow_innodb_debug.result b/mysql-test/suite/innodb/r/percona_log_slow_innodb_debug.result new file mode 100644 index 000000000000..e749b13a94ed --- /dev/null +++ b/mysql-test/suite/innodb/r/percona_log_slow_innodb_debug.result @@ -0,0 +1,52 @@ +SET @saved_innodb_thread_sleep_delay = @@GLOBAL.innodb_thread_sleep_delay; +SET @saved_innodb_thread_concurrency = @@GLOBAL.innodb_thread_concurrency; +SET GLOBAL innodb_thread_concurrency = 1; +CREATE TABLE t1 (a INT AUTO_INCREMENT PRIMARY KEY) ENGINE=InnoDB; +SET DEBUG_SYNC = 'ib_after_row_insert SIGNAL inserted WAIT_FOR finish1'; +INSERT INTO t1 VALUES (); +SET DEBUG_SYNC = 'now WAIT_FOR inserted'; +SET DEBUG_SYNC = 'user_thread_waiting SIGNAL waiting WAIT_FOR finish2'; +SET SESSION long_query_time=0; +SET SESSION log_slow_verbosity='microtime,innodb'; +[log_start.inc] percona.slow_extended.innodb_debug +INSERT INTO t1 VALUES (); +SET DEBUG_SYNC = 'now WAIT_FOR waiting'; +SET DEBUG_SYNC = 'now SIGNAL finish2'; +SET DEBUG_SYNC = 'now SIGNAL finish1'; +SET DEBUG_SYNC = 'reset'; +[log_stop.inc] percona.slow_extended.innodb_debug +[log_grep.inc] file: percona.slow_extended.innodb_debug pattern: ^# Thread_id: \d+ Schema: .+ Last_errno: \d+ Killed: \d+$ +[log_grep.inc] lines: 2 +[log_grep.inc] file: percona.slow_extended.innodb_debug pattern: ^#.*Rows_affected: \d+ Rows_read: \d+$ +[log_grep.inc] lines: 2 +[log_grep.inc] file: percona.slow_extended.innodb_debug pattern: ^# Bytes_sent: \d+.*$ +[log_grep.inc] lines: 2 +[log_grep.inc] file: percona.slow_extended.innodb_debug pattern: ^# InnoDB_trx_id: [1-9A-F][0-9A-F]*$ +[log_grep.inc] lines: 1 +[log_grep.inc] file: percona.slow_extended.innodb_debug pattern: ^# Bytes_sent: \d+ Tmp_tables: \d+ Tmp_disk_tables: \d+ Tmp_table_sizes: \d+$ +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.innodb_debug pattern: ^# QC_Hit: (Yes|No) Full_scan: (Yes|No) Full_join: (Yes|No) Tmp_table: (Yes|No) Tmp_table_on_disk: (Yes|No)$ +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.innodb_debug pattern: ^# Filesort: (Yes|No) Filesort_on_disk: (Yes|No) Merge_passes: \d+$ +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.innodb_debug pattern: ^# InnoDB_IO_r_ops: 0 InnoDB_IO_r_bytes: 0 InnoDB_IO_r_wait: 0\.0*$ +[log_grep.inc] lines: 1 +[log_grep.inc] file: percona.slow_extended.innodb_debug pattern: ^# InnoDB_IO_r_ops: [1-9]\d* InnoDB_IO_r_bytes: [1-9]\d* InnoDB_IO_r_wait: (0\.\d*[1-9]\d*|[1-9]\d*\.\d+)$ +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.innodb_debug pattern: ^# InnoDB_rec_lock_wait: \d*\.\d* InnoDB_queue_wait: \d*\.\d*$ +[log_grep.inc] lines: 1 +[log_grep.inc] file: percona.slow_extended.innodb_debug pattern: InnoDB_rec_lock_wait: 0\.0* +[log_grep.inc] lines: 1 +[log_grep.inc] file: percona.slow_extended.innodb_debug pattern: InnoDB_rec_lock_wait: (0\.\d*[1-9]\d*|[1-9]\d*\.\d+) +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.innodb_debug pattern: InnoDB_queue_wait: 0\.0* +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.innodb_debug pattern: InnoDB_queue_wait: (0\.\d*[1-9]\d*|[1-9]\d*\.\d+) +[log_grep.inc] lines: 1 +[log_grep.inc] file: percona.slow_extended.innodb_debug pattern: ^# InnoDB_pages_distinct: [1-9]\d*$ +[log_grep.inc] lines: 1 +[log_grep.inc] file: percona.slow_extended.innodb_debug pattern: ^# No InnoDB statistics available for this query$ +[log_grep.inc] lines: 1 +SET GLOBAL innodb_thread_concurrency = @saved_innodb_thread_concurrency; +SET GLOBAL innodb_thread_sleep_delay = @saved_innodb_thread_sleep_delay; +DROP TABLE t1; diff --git a/mysql-test/suite/innodb/t/percona_log_slow_innodb.test b/mysql-test/suite/innodb/t/percona_log_slow_innodb.test new file mode 100644 index 000000000000..e02e1294390c --- /dev/null +++ b/mysql-test/suite/innodb/t/percona_log_slow_innodb.test @@ -0,0 +1,119 @@ +# +# Test that InnoDB stats for the extended slow query log are collected. +# +--source include/have_innodb.inc + +SET GLOBAL innodb_file_per_table = ON; + +CREATE TABLE t1(a INT AUTO_INCREMENT PRIMARY KEY) ENGINE=InnoDB; +# Insert enough rows to have at least two pages to workaround the issue where, +# with the slow query log stats enabled, the table is accessed for the +# statistics, before the trx slow log flag is initialized +--echo # Inserting rows +--disable_query_log +--disable_result_log +--let i= 1000 +BEGIN; +while ($i) +{ + INSERT INTO t1 VALUES (); + dec $i; +} +COMMIT; +--enable_result_log +--enable_query_log + +CREATE TABLE t2(a INT) ENGINE=InnoDB; +INSERT INTO t2 VALUE(1); + +--source include/restart_mysqld.inc + +SELECT @@GLOBAL.innodb_file_per_table; + +--source include/count_sessions.inc + +SET SESSION long_query_time=0; +SET SESSION log_slow_verbosity='microtime,innodb'; + +--let log_file=percona.slow_extended.innodb_0 +--source include/log_start.inc +SELECT SUM(a) FROM t1; +--source include/log_stop.inc +--source include/percona_slow_log_verbosity_grep.inc + +--let log_file=percona.slow_extended.innodb_2 +--source include/log_start.inc +SELECT 5; # No InnoDB pages accessed +--source include/log_stop.inc +--source include/percona_slow_log_verbosity_grep.inc + +# +# Table lock waits +# + +LOCK TABLE t1 WRITE; +--connect (con2,localhost,root,,test,,) +--connection con2 + +--let $con2_id= `SELECT CONNECTION_ID()` + +SET SESSION long_query_time=0; +SET SESSION log_slow_verbosity='microtime,innodb'; + +--let log_file=percona.slow_extended.innodb_3 +--source include/log_start.inc +send LOCK TABLE t1 WRITE; + +--connection default + +# Do not slow-log wait_condition.inc due to variable number of queries +SET SESSION long_query_time=5000; +let $wait_condition= SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST + WHERE ID=$con2_id AND STATE="Waiting for table metadata lock"; +--source include/wait_condition.inc +SET SESSION long_query_time=0; + +SELECT SLEEP(2); +UNLOCK TABLES; +--connection con2 +reap; +--source include/log_stop.inc +# Innodb_rec_lock_wait must stay at 0 +--source include/percona_slow_log_verbosity_grep.inc +UNLOCK TABLES; +--connection default + +# +# Row lock waits +# +BEGIN; +SELECT * FROM t2 FOR UPDATE; + +--connection con2 +--let log_file=percona.slow_extended.innodb_4 +--source include/log_start.inc +send DELETE FROM t2 WHERE a=2; + +--connection default + +# Do not slow-log wait_condition.inc due to variable number of queries +SET SESSION long_query_time=5000; +let $wait_condition= SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.INNODB_TRX + WHERE TRX_STATE="LOCK WAIT"; +--source include/wait_condition.inc +SET SESSION long_query_time=0; + +SELECT SLEEP(2); +COMMIT; +--connection con2 +reap; +--source include/log_stop.inc +--source include/percona_slow_log_verbosity_grep.inc + +--disconnect con2 +--connection default + +DROP TABLE t1, t2; +--source include/log_cleanup.inc + +--source include/wait_until_count_sessions.inc diff --git a/mysql-test/suite/innodb/t/percona_log_slow_innodb_debug.test b/mysql-test/suite/innodb/t/percona_log_slow_innodb_debug.test new file mode 100644 index 000000000000..782a1248c5ff --- /dev/null +++ b/mysql-test/suite/innodb/t/percona_log_slow_innodb_debug.test @@ -0,0 +1,61 @@ +# +# Debug build tests for InnoDB extensions in the slow query log +# +--source include/have_innodb.inc +--source include/have_debug_sync.inc + +--source include/count_sessions.inc + +SET @saved_innodb_thread_sleep_delay = @@GLOBAL.innodb_thread_sleep_delay; +SET @saved_innodb_thread_concurrency = @@GLOBAL.innodb_thread_concurrency; +SET GLOBAL innodb_thread_concurrency = 1; + +CREATE TABLE t1 (a INT AUTO_INCREMENT PRIMARY KEY) ENGINE=InnoDB; + +--connect con1,localhost,root +--connection con1 + +SET DEBUG_SYNC = 'ib_after_row_insert SIGNAL inserted WAIT_FOR finish1'; +send INSERT INTO t1 VALUES (); + +--connect con2,localhost,root +--connection con2 + +SET DEBUG_SYNC = 'now WAIT_FOR inserted'; +SET DEBUG_SYNC = 'user_thread_waiting SIGNAL waiting WAIT_FOR finish2'; + +SET SESSION long_query_time=0; +SET SESSION log_slow_verbosity='microtime,innodb'; +--let log_file=percona.slow_extended.innodb_debug +--source include/log_start.inc + +send INSERT INTO t1 VALUES (); + +--connection default +SET DEBUG_SYNC = 'now WAIT_FOR waiting'; +SET DEBUG_SYNC = 'now SIGNAL finish2'; +real_sleep 2; +SET DEBUG_SYNC = 'now SIGNAL finish1'; + +--connection con1 +reap; + +SET DEBUG_SYNC = 'reset'; + +--disconnect con1 + +--connection con2 +reap; +--source include/log_stop.inc +--source include/percona_slow_log_verbosity_grep.inc +--disconnect con2 + +--connection default +SET GLOBAL innodb_thread_concurrency = @saved_innodb_thread_concurrency; +SET GLOBAL innodb_thread_sleep_delay = @saved_innodb_thread_sleep_delay; + +DROP TABLE t1; + +--source include/log_cleanup.inc + +--source include/wait_until_count_sessions.inc diff --git a/mysql-test/suite/rpl/r/percona_log_slow_slave_statements_innodb.result b/mysql-test/suite/rpl/r/percona_log_slow_slave_statements_innodb.result new file mode 100644 index 000000000000..75a090e05e5e --- /dev/null +++ b/mysql-test/suite/rpl/r/percona_log_slow_slave_statements_innodb.result @@ -0,0 +1,58 @@ +include/master-slave.inc +[connection master] +CREATE TABLE t(id INT,data CHAR(30)) ENGINE=InnoDB; +INSERT INTO t VALUES +(1,"aaaaabbbbbcccccdddddeeeeefffff"), +(2,"aaaaabbbbbcccccdddddeeeeefffff"), +(3,"aaaaabbbbbcccccdddddeeeeefffff"), +(4,"aaaaabbbbbcccccdddddeeeeefffff"), +(5,"aaaaabbbbbcccccdddddeeeeefffff"); +INSERT INTO t SELECT t2.id,t2.data from t as t1, t as t2; +INSERT INTO t SELECT t2.id,t2.data from t as t1, t as t2; +SET @saved_long_query_time=@@GLOBAL.long_query_time; +SET GLOBAL long_query_time=0; +SET @saved_log_slow_slave_statements=@@GLOBAL.log_slow_slave_statements; +SET GLOBAL log_slow_slave_statements=TRUE; +SET @saved_log_slow_verbosity=@@GLOBAL.log_slow_verbosity; +SET GLOBAL log_slow_verbosity='innodb'; +include/restart_slave.inc +[log_start.inc] percona.slow_extended.log_slow_slave_statements-innodb +INSERT INTO t SELECT t.id,t.data from t; +[log_stop.inc] percona.slow_extended.log_slow_slave_statements-innodb +[log_grep.inc] file: percona.slow_extended.log_slow_slave_statements-innodb pattern: ^# Thread_id: \d+ Schema: .+ Last_errno: \d+ Killed: \d+$ +[log_grep.inc] lines: 2 +[log_grep.inc] file: percona.slow_extended.log_slow_slave_statements-innodb pattern: ^#.*Rows_affected: \d+ Rows_read: \d+$ +[log_grep.inc] lines: 2 +[log_grep.inc] file: percona.slow_extended.log_slow_slave_statements-innodb pattern: ^# Bytes_sent: \d+.*$ +[log_grep.inc] lines: 2 +[log_grep.inc] file: percona.slow_extended.log_slow_slave_statements-innodb pattern: ^# InnoDB_trx_id: [1-9A-F][0-9A-F]*$ +[log_grep.inc] lines: 1 +[log_grep.inc] file: percona.slow_extended.log_slow_slave_statements-innodb pattern: ^# Bytes_sent: \d+ Tmp_tables: \d+ Tmp_disk_tables: \d+ Tmp_table_sizes: \d+$ +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.log_slow_slave_statements-innodb pattern: ^# QC_Hit: (Yes|No) Full_scan: (Yes|No) Full_join: (Yes|No) Tmp_table: (Yes|No) Tmp_table_on_disk: (Yes|No)$ +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.log_slow_slave_statements-innodb pattern: ^# Filesort: (Yes|No) Filesort_on_disk: (Yes|No) Merge_passes: \d+$ +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.log_slow_slave_statements-innodb pattern: ^# InnoDB_IO_r_ops: 0 InnoDB_IO_r_bytes: 0 InnoDB_IO_r_wait: 0\.0*$ +[log_grep.inc] lines: 1 +[log_grep.inc] file: percona.slow_extended.log_slow_slave_statements-innodb pattern: ^# InnoDB_IO_r_ops: [1-9]\d* InnoDB_IO_r_bytes: [1-9]\d* InnoDB_IO_r_wait: (0\.\d*[1-9]\d*|[1-9]\d*\.\d+)$ +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.log_slow_slave_statements-innodb pattern: ^# InnoDB_rec_lock_wait: \d*\.\d* InnoDB_queue_wait: \d*\.\d*$ +[log_grep.inc] lines: 1 +[log_grep.inc] file: percona.slow_extended.log_slow_slave_statements-innodb pattern: InnoDB_rec_lock_wait: 0\.0* +[log_grep.inc] lines: 1 +[log_grep.inc] file: percona.slow_extended.log_slow_slave_statements-innodb pattern: InnoDB_rec_lock_wait: (0\.\d*[1-9]\d*|[1-9]\d*\.\d+) +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.log_slow_slave_statements-innodb pattern: InnoDB_queue_wait: 0\.0* +[log_grep.inc] lines: 1 +[log_grep.inc] file: percona.slow_extended.log_slow_slave_statements-innodb pattern: InnoDB_queue_wait: (0\.\d*[1-9]\d*|[1-9]\d*\.\d+) +[log_grep.inc] lines: 0 +[log_grep.inc] file: percona.slow_extended.log_slow_slave_statements-innodb pattern: ^# InnoDB_pages_distinct: [1-9]\d*$ +[log_grep.inc] lines: 1 +[log_grep.inc] file: percona.slow_extended.log_slow_slave_statements-innodb pattern: ^# No InnoDB statistics available for this query$ +[log_grep.inc] lines: 1 +DROP TABLE t; +SET GLOBAL long_query_time=@saved_long_query_time; +SET GLOBAL log_slow_slave_statements=@saved_log_slow_slave_statements; +SET GLOBAL log_slow_verbosity=@saved_log_slow_verbosity; +include/rpl_end.inc diff --git a/mysql-test/t/percona_log_slow_slave_statements-innodb.test b/mysql-test/suite/rpl/t/percona_log_slow_slave_statements_innodb.test similarity index 62% rename from mysql-test/t/percona_log_slow_slave_statements-innodb.test rename to mysql-test/suite/rpl/t/percona_log_slow_slave_statements_innodb.test index 069f284f3d60..02eda921d198 100644 --- a/mysql-test/t/percona_log_slow_slave_statements-innodb.test +++ b/mysql-test/suite/rpl/t/percona_log_slow_slave_statements_innodb.test @@ -1,11 +1,6 @@ --source include/have_binlog_format_statement.inc ---source include/master-slave.inc --source include/have_innodb.inc - -SET SESSION min_examined_row_limit=0; --- disable_warnings -DROP TABLE IF EXISTS t; --- enable_warnings +--source include/master-slave.inc CREATE TABLE t(id INT,data CHAR(30)) ENGINE=InnoDB; INSERT INTO t VALUES @@ -16,10 +11,14 @@ INSERT INTO t VALUES (5,"aaaaabbbbbcccccdddddeeeeefffff"); INSERT INTO t SELECT t2.id,t2.data from t as t1, t as t2; INSERT INTO t SELECT t2.id,t2.data from t as t1, t as t2; -sync_slave_with_master; +--sync_slave_with_master + +SET @saved_long_query_time=@@GLOBAL.long_query_time; SET GLOBAL long_query_time=0; +SET @saved_log_slow_slave_statements=@@GLOBAL.log_slow_slave_statements; SET GLOBAL log_slow_slave_statements=TRUE; +SET @saved_log_slow_verbosity=@@GLOBAL.log_slow_verbosity; SET GLOBAL log_slow_verbosity='innodb'; --source include/restart_slave_sql.inc @@ -28,20 +27,22 @@ SET GLOBAL log_slow_verbosity='innodb'; --source include/log_start.inc connection master; INSERT INTO t SELECT t.id,t.data from t; -sync_slave_with_master; + +--sync_slave_with_master + --source include/log_stop.inc ---let grep_pattern = InnoDB_IO_r_ops ---source include/log_grep.inc +--source include/percona_slow_log_verbosity_grep.inc +# --let grep_pattern = InnoDB_IO_r_ops +# --source include/log_grep.inc connection master; DROP TABLE t; -sync_slave_with_master; -SET GLOBAL long_query_time=default; -SET GLOBAL log_slow_slave_statements=default; -SET GLOBAL log_slow_verbosity=default; -SET SESSION min_examined_row_limit=default; +connection slave; +SET GLOBAL long_query_time=@saved_long_query_time; +SET GLOBAL log_slow_slave_statements=@saved_log_slow_slave_statements; +SET GLOBAL log_slow_verbosity=@saved_log_slow_verbosity; --source include/rpl_end.inc diff --git a/mysql-test/t/percona_log_slow_innodb.test b/mysql-test/t/percona_log_slow_innodb.test deleted file mode 100644 index fc42c8f32858..000000000000 --- a/mysql-test/t/percona_log_slow_innodb.test +++ /dev/null @@ -1,82 +0,0 @@ -# -# Test that InnoDB stats for the extended slow query log are collected. -# We do not parse the log to see that the values are reasonable. That should be done after log to table is implemented. -# We also do not test the stats that would require DEBUG_SYNC: InnoDB_queue_wait and InnoDB_rec_lock_wait. The latter is -# "tested" with SLEEP here, but this is not guaranteed to work. The testcase is not unstable because of this as we don't -# actually check the value. -# ---source include/have_innodb.inc - ---disable_warnings -DROP TABLE IF EXISTS t1, t2; ---enable_warnings - -let $MYSQLD_TMPDIR = `SELECT @@tmpdir`; -let $MYSQLD_DATADIR = `SELECT @@datadir`; - -CREATE TABLE t1(a INT) ENGINE=InnoDB; -INSERT INTO t1 VALUE(1); - -CREATE TABLE t2(a INT) ENGINE=InnoDB; -INSERT INTO t2 VALUE(1); - -# Force cold buffer pool ---source include/restart_mysqld.inc - -SET SESSION min_examined_row_limit=0; -SET SESSION long_query_time=0; -SET @old_log_slow_verbosity := @@log_slow_verbosity; -SET SESSION log_slow_verbosity='microtime,innodb'; - ---let log_file=percona.slow_extended.innodb_0 ---source include/log_start.inc -INSERT INTO t1 VALUES(2); -INSERT INTO t2 VALUES(2); -INSERT INTO t1 VALUES(3); # Pages in the buffer pool already -SELECT 5; # No InnoDB pages accessed ---source include/log_stop.inc - -# -# Table lock waits -# - -LOCK TABLE t1 WRITE; ---connect (con2,localhost,root,,test,,) ---connection con2 ---let log_file=percona.slow_extended.innodb_3 ---source include/log_start.inc -send LOCK TABLE t1 WRITE; ---connection default -# TODO: best-effort test for now. A bug if we check the actual lock time! -SELECT SLEEP(5); -UNLOCK TABLES; ---connection con2 -reap; ---source include/log_stop.inc -UNLOCK TABLES; ---connection default - -# -# Row lock waits -# -BEGIN; -SELECT * FROM t2 FOR UPDATE; ---connection con2 ---let log_file=percona.slow_extended.innodb_4 ---source include/log_start.inc -send DELETE FROM t2 WHERE a=2; ---connection default -SELECT SLEEP(5); -COMMIT; ---connection con2 -reap; ---source include/log_stop.inc ---disconnect con2 ---connection default - -SET SESSION min_examined_row_limit=default; -SET SESSION long_query_time=default; -SET SESSION log_slow_verbosity=@old_log_slow_verbosity; - -DROP TABLE t1, t2; ---source include/log_cleanup.inc diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index 010aec1ea0db..cf2d5a15802a 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -6198,6 +6198,8 @@ ha_innobase::write_row( innodb_srv_conc_enter_innodb(prebuilt->trx); error = row_insert_for_mysql((byte*) record, prebuilt); + DEBUG_SYNC(user_thd, "ib_after_row_insert"); + #ifdef EXTENDED_FOR_USERSTAT if (UNIV_LIKELY(error == DB_SUCCESS && !trx->fake_changes)) { diff --git a/storage/innobase/srv/srv0srv.c b/storage/innobase/srv/srv0srv.c index 3770a8804ddd..b55e9fc44cd5 100644 --- a/storage/innobase/srv/srv0srv.c +++ b/storage/innobase/srv/srv0srv.c @@ -1402,6 +1402,8 @@ srv_conc_enter_innodb( os_fast_mutex_unlock(&srv_conc_mutex); + DEBUG_SYNC_C("user_thread_waiting"); + trx->op_info = "sleeping before joining InnoDB queue"; /* Peter Zaitsev suggested that we take the sleep away From 333b4508bff37b3029b95d585ad204d8ce60b445 Mon Sep 17 00:00:00 2001 From: Dima Date: Thu, 17 May 2018 18:07:15 +0300 Subject: [PATCH 0845/1221] RN 5.7.21-21 - a restored follow-up fix --- .../response_time_distribution.rst | 16 +++- .../Percona-Server-5.7.21-21.rst | 96 +++++++++---------- doc/source/tokudb/tokudb_variables.rst | 13 ++- 3 files changed, 68 insertions(+), 57 deletions(-) diff --git a/doc/source/diagnostics/response_time_distribution.rst b/doc/source/diagnostics/response_time_distribution.rst index d9a83721d409..82dfb6713767 100644 --- a/doc/source/diagnostics/response_time_distribution.rst +++ b/doc/source/diagnostics/response_time_distribution.rst @@ -250,7 +250,21 @@ Sets up the logarithm base for the scale. :default: OFF :range: ON/OFF -This variable enables and disables collection of query times. +This global variable enables and disables collection of query times. + +.. variable:: query_response_time_session_stats + + :cli: No + :conf: No + :scope: Session + :dyn: Yes + :vartype: Text + :default: GLOBAL + :range: ON/OFF/GLOBAL + +This variable enables and disables collection of query times on session level, thus +customizing QRT behavior for individual connections. By default, its value is `GLOBAL`, +which means that its value is taken from the :variable:`query_response_time_stats` variable. INFORMATION_SCHEMA Tables ========================= diff --git a/doc/source/release-notes/Percona-Server-5.7.21-21.rst b/doc/source/release-notes/Percona-Server-5.7.21-21.rst index b656f5354d66..f63a67b8c704 100644 --- a/doc/source/release-notes/Percona-Server-5.7.21-21.rst +++ b/doc/source/release-notes/Percona-Server-5.7.21-21.rst @@ -5,15 +5,15 @@ Percona Server 5.7.21-21 ======================== Percona is glad to announce the release of Percona Server 5.7.21-21 -on April 23, 2018. Downloads are available `here -`_ -and from the :doc:`Percona Software Repositories `. +on April 24, 2018. Downloads are available `here `_ and from the :doc:`Percona Software Repositories `. -This release is based on `MySQL 5.7.21 -`_ -and includes all the bug fixes in it. +This release is based on `MySQL 5.7.21 `_ and includes all the bug fixes in it. Percona Server 5.7.21-21 is now the current GA (Generally Available) release -in the 5.7 series. All software developed by Percona is open-source and free. +in the 5.7 series. +This version of Percona Server for MySQL marks the following encryption +features, previously available as beta, as GA: `Vault keyring plugin `_, `encryption for InnoDB general tablespaces `_, and `encryption for binary log files `_. + +All software developed by Percona is open-source and free. New Features ============ @@ -24,41 +24,45 @@ New Features * A new variable :variable:`innodb_encrypt_online_alter_logs` simultaneously turns on encryption of files used by InnoDB for merge sort, online DDL logs, - and temporary tables created by InnoDB for online DDL. Bug fixed :psbug:`3819`. + and temporary tables created by InnoDB for online DDL. Bug fixed + :psbug:`3819`. * A new variable :variable:`innodb_encrypt_tables` can be set to ``ON``, making |InnoDB| tables encrypted by default, to ``FORCE``, disabling creation of unencrypted tables, or ``OFF``, restoring the like-before behavior. Bug fixed :psbug:`1525`. -* Query response time plugin now can be disabled at session level. +* Query response time plugin now can be disabled at session level with use + of a new variable :variable:`query_response_time_session_stats`. Bugs Fixed ========== -* Query response time plugin installation was able to cause server crash. - Bug fixed :psbug:`3959`. +* Attempting to use a partially-installed query response time plugin could have + caused server crash. Bug fixed :psbug:`3959`. * There was a server crash caused by a materialized temporary table from semi-join optimization with key length larger than 1000 bytes. Bug fixed :psbug:`296`. -* A regression was causing integer overflow with +* A regression in the original 5.7 port was causing integer overflow with :variable:`thread_pool_stall_limit` variable values bigger than 2 seconds. Bug fixed :psbug:`1095`. * A memory leak took place in |Percona Server| when performance schema is used in conjunction with thread pooling. Bug fixed :psbug:`1096`. -* A code clean-up was done to fix compilation with clang, as general warnings - (bug fixed :psbug:`3814`, upstream :mysqlbug:`89646`) so clang 6 specific - warnings and errors (bug fixed :psbug:`3893`, upstream :mysqlbug:`98111`). +* A code clean-up was done to fix compilation with clang, both general warnings + (bug fixed :psbug:`3814`, upstream :mysqlbug:`89646`) and clang 6 specific + warnings and errors (bug fixed :psbug:`3893`, upstream :mysqlbug:`90111`). -* Compilation warning was fixed for statically linked QRT. Bug fixed +* Compilation warning was fixed for `-DWITH_QUERY_RESPONSE_TIME=ON` CMake + compilation option, which makes QRT to be linked statically. Bug fixed :psbug:`3841`. * |Percona Server| returned empty result for ``SELECT`` query if number of - connections exceeded 65535. Bug fixed :psbug:`314`. + connections exceeded 65535. Bug fixed :psbug:`314` (upstream + :mysqlbug:`89313`). * A clean-up in |Percona Server| binlog-related code was made to avoid uninitialized memory comparison. Bug fixed :psbug:`3925` (upstream @@ -73,16 +77,11 @@ Bugs Fixed introduced in |Percona Server| :rn:`5.7.21-20`, was improved to take into account previously created configuration file. Bug fixed :psbug:`3850`. -* A fix introduced in |Percona Server| :rn:`5.7.10-2` which made busy server - not to prefer LRU flushing over flush list flushing too strongly was reverted - back because of the MT LRU flusher introduction, which removed LRU flushing - from the cleaner loop, Bug fixed :psbug:`3812`. - * The possibility of a truncated bitmap file name was fixed in |InnoDB| logging subsystem. Bug fixed :psbug:`3926`. -* Non-instrumented functions were used in cached reads and writes of files in - fixed-size units. Bug fixed :psbug:`3937` (upstream :mysqlbug:`90264`). +* Temporary file I/O was not instrumented for Performance Schema. Bug fixed + :psbug:`3937` (upstream :mysqlbug:`90264`). * A crash in the unsafe query warning checks with views took place for ``UPDATE`` statement in case of statement binlogging format. Bug fixed @@ -91,47 +90,42 @@ Bugs Fixed MyRocks Changes =============== -* A re-implemented variable :variable:`rpl_skip_tx_api` allows to turn on simple - |RocksDB| write batches functionality, increasing replication performance - by the transaction api skip. Bug fixed :jirabug:`MYR-47`. +* A re-implemented variable :variable:`rpl_skip_tx_api` allows to turn on + simple RocksDB write batches functionality, increasing replication + performance by the transaction API skip. Bug fixed :jirabug:`MYR-47`. -* Unpack info bytes indicating the trailing space length in a padded varchar - were not read/skipped for value-less fields, causing data corruption and/or - server crash. Bug fixed :jirabug:`MYR-232`. +* Decoding value-less padded varchar fields could under some circumstances + cause assertion and/or data corruption. Bug fixed :jirabug:`MYR-232`. TokuDB Changes =============== -* Two new variables introduced for the |TokuDB| fast updates feature, +* Two new variables introduced to facilitate the |TokuDB| fast updates feature, :variable:`tokudb_enable_fast_update` and - :variable:`tokudb_enable_fast_upsert` should be now used instead of the - ``NOAR`` keyword, which is now optional at compile time and off by default. - Bugs fixed :tdbbug:`63` and :tdbbug:`148`. + :variable:`tokudb_enable_fast_upsert`. Bugs fixed :tdbbug:`63` and + :tdbbug:`148`. -* A set of compilation fixes as introduced to make |TokuDB| successfully - build in 8.0. Bugs fixed :tdbbug:`84`, :tdbbug:`85`, :tdbbug:`114`, - :tdbbug:`115`, :tdbbug:`118`, :tdbbug:`128`, :tdbbug:`139`, :tdbbug:`141`, - and :tdbbug:`172`. +* A set of compilation fixes was introduced to make |TokuDB| successfully + build in |MySQL| / |Percona Server| 8.0. Bugs fixed :tdbbug:`84`, + :tdbbug:`85`, :tdbbug:`114`, :tdbbug:`115`, :tdbbug:`118`, :tdbbug:`128`, + :tdbbug:`139`, :tdbbug:`141`, and :tdbbug:`172`. * Conditional compilation code dependent on version ID in the TokuDB tree was separated and arranged to specific version branches. Bugs fixed :tdbbug:`133`, :tdbbug:`134`, :tdbbug:`135`, and :tdbbug:`136`. -* An additional code clean-up was made in bounds of 8.0 transition to remove - MariaDB-specific constructions. Bugs fixed :tdbbug:`180`, :tdbbug:`181`, - and :tdbbug:`182`. - -* Alter table comment caused |TokuDB| to rebuild the whole table, which is not - needed, as only FRM metadata should be changed. Bug fixed :tdbbug:`130`, - and :tdbbug:`137`. +* ``ALTER TABLE ... COMMENT = ...`` statement caused |TokuDB| to rebuild the + whole table, which is not needed, as only FRM metadata should be changed. + Bugs fixed :tdbbug:`130` and :tdbbug:`137`. -* Data race on the cache table pair attributes was fixed. +* Data race on the cache table pair attributes was fixed. Bug fixed + :tdbbug:`109`. -Other bugs fixed: :psbug:`3793`, :psbug:`3813`, :psbug:`3815`, :psbug:`3818`, -:psbug:`3835`, :psbug:`3875` (upstream :mysqlbug:`89916`), :psbug:`3843` -(upstream :mysqlbug:`89822`), :psbug:`3848`, :psbug:`3856`, :psbug:`3887`, -:jirabug:`MYR-160`, :jirabug:`MYR-245`, :tdbbug:`109`, :tdbbug:`111`, -and :tdbbug:`188`. +Other bugs fixed: :psbug:`3793`, :psbug:`3812`, :psbug:`3813`, :psbug:`3815`, +:psbug:`3818`, :psbug:`3835`, :psbug:`3875` (upstream :mysqlbug:`89916`), +:psbug:`3843` (upstream :mysqlbug:`89822`), :psbug:`3848`, :psbug:`3856`, +:psbug:`3887`, :jirabug:`MYR-160`, :jirabug:`MYR-245`, :tdbbug:`109`, +:tdbbug:`111`, :tdbbug:`180`, :tdbbug:`181`, :tdbbug:`182`, and :tdbbug:`188`. diff --git a/doc/source/tokudb/tokudb_variables.rst b/doc/source/tokudb/tokudb_variables.rst index 071b3ccec916..f5aaed204fb6 100644 --- a/doc/source/tokudb/tokudb_variables.rst +++ b/doc/source/tokudb/tokudb_variables.rst @@ -928,10 +928,11 @@ for bulk loader. :scope: Global/Session :dyn: Yes :vartype: Boolean - :default: Off + :default: OFF -Enables the fast updates feature, which substantially facilitates execution of -read-modify-write style queries. +Toggles the fast updates feature ON/OFF for the ``UPDATE`` statement. Fast +update involves queries optimization to avoid random reads during their +execution. .. variable:: tokudb_enable_fast_upsert @@ -940,9 +941,11 @@ read-modify-write style queries. :scope: Global/Session :dyn: Yes :vartype: Boolean - :default: Off + :default: OFF -Enables processing upsert messages for the fast updates feature. +Toggles the fast updates feature ON/OFF for the ``INSERT`` statement. Fast +update involves queries optimization to avoid random reads during their +execution. .. variable:: tokudb_enable_partial_eviction From 1f24c5aa2843fa548aa5c4b29c00f955e03e9f5b Mon Sep 17 00:00:00 2001 From: Aditya A Date: Fri, 18 May 2018 12:32:37 +0530 Subject: [PATCH 0846/1221] Bug #27208858 CONCURRENT DDL/DML ON FOREIGN KEYS CRASH IN PAGE_CUR_SEARCH_WITH_MATCH_BYTES PROBLEM ------- 1. During truncate when we are trying to flush out the pages of truncated table form the buffer pool we release the dict lock. 2. At this stage a DDL request to add a FK constraint from another connection,tries to access the stale index memory object of the parent table and asserts. FIX --- Disallow the DDL operation of adding FK when parent table is undergoing truncate . [#rb 19433 Reviewed by Jimmy ] --- storage/innobase/fil/fil0fil.cc | 1 + storage/innobase/row/row0ins.cc | 7 +++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/storage/innobase/fil/fil0fil.cc b/storage/innobase/fil/fil0fil.cc index 543cedcce07f..d00a08c4f8cd 100644 --- a/storage/innobase/fil/fil0fil.cc +++ b/storage/innobase/fil/fil0fil.cc @@ -2997,6 +2997,7 @@ fil_reinit_space_header_for_table( they won't violate the latch ordering. */ dict_table_x_unlock_indexes(table); row_mysql_unlock_data_dictionary(trx); + DEBUG_SYNC_C("trunc_table_index_dropped_release_dict_lock"); /* Lock the search latch in shared mode to prevent user from disabling AHI during the scan */ diff --git a/storage/innobase/row/row0ins.cc b/storage/innobase/row/row0ins.cc index d71c1e15a82b..06d06d53abea 100644 --- a/storage/innobase/row/row0ins.cc +++ b/storage/innobase/row/row0ins.cc @@ -1618,7 +1618,8 @@ row_ins_check_foreign_constraint( if (check_table == NULL || check_table->ibd_file_missing - || check_index == NULL) { + || check_index == NULL + || fil_space_is_being_truncated(check_table->space)) { if (!srv_read_only_mode && check_ref) { FILE* ef = dict_foreign_err_file; @@ -1640,7 +1641,8 @@ row_ins_check_foreign_constraint( ut_print_name(ef, trx, foreign->referenced_table_name); fputs("\nor its .ibd file does" - " not currently exist!\n", ef); + " not currently exist!, or" + " is undergoing truncate!\n", ef); mutex_exit(&dict_foreign_err_mutex); err = DB_NO_REFERENCED_ROW; @@ -1873,6 +1875,7 @@ row_ins_check_foreign_constraint( mem_heap_free(heap); } + DEBUG_SYNC_C("finished_scanning_index"); DBUG_RETURN(err); } From f7d0ec6747e2635a2f285683a9942082b8b1a4f7 Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Fri, 18 May 2018 15:47:15 +0530 Subject: [PATCH 0847/1221] From f63fbd324369fb981e64067cf84584363bc9664e Mon Sep 17 00:00:00 2001 From: Nuno Carvalho Date: Fri, 18 May 2018 12:16:51 +0200 Subject: [PATCH 0848/1221] BUG#27652526: REJOIN OLD PRIMARY NODE MAY DUPLICATE KEY WHEN RECOVERY Group Replication does implement conflict detection on multi-primary to avoid write errors on parallel operations. The conflict detection is also engaged in single-primary mode on the particular case of primary change and the new primary still has a backlog to apply. Until the backlog is flushed, conflict detection is enabled to prevent write errors between the backlog and incoming transactions. The conflict detection data, which we name certification info, is also used to detected dependencies between accepted transactions, dependencies which will rule the transactions schedule on the parallel applier. In order to avoid that the certification info grows forever, periodically all members exchange their GTID_EXECUTED set, which full intersection will provide the set of transactions that are applied on all members. Future transactions cannot conflict with this set since all members are operating on top of it, so we can safely remove all write-sets from the certification info that do belong to those transactions. More details at WL#6833: Group Replication: Read-set free Certification Module (DBSM Snapshot Isolation). Though a corner case was found on which the garbage collection was purging more data than it should. The scenario is: 1) Group with 2 members; 2) Member1 executes: CREATE TABLE t1(a INT, b INT, PRIMARY KEY(a)); INSERT INTO t1 VALUE(1, 1); Both members have a GTID_EXECUTED= UUID:1-4 Both members certification info has: Hash of item in Writeset snapshot version (Gtid_set) #1 UUID1:1-4 3) member1 executes TA UPDATE t1 SET b=10 WHERE a=1; and blocks immediately before send the transaction to the group. This transaction has snapshot_version: UUID:1-4 4) member2 executes TB UPDATE t1 SET b=10 WHERE a=1; This transaction has snapshot_version: UUID:1-4 It goes through the complete patch and it is committed. This transaction has GTID: UUID:1000002 Both members have a GTID_EXECUTED= UUID:1-4:1000002 Both members certification info has: Hash of item in Writeset snapshot version (Gtid_set) #1 UUID1:1-4:1000002 5) member2 becomes extremely slow in processing transactions, we simulate that by holding the transaction queue to the GR pipeline. Transaction delivery is still working, but the transaction will be block before certification. 6) member1 is able to send its TA transaction, lets recall that this transaction has snapshot_version: UUID:1-4. On conflict detection on member1, it will conflict with #1, since this snapshot_version does not contain the snapshot_version of #1, that is TA was executed on a previous version than TB. On member2 the transaction will be delivered and will be put on hold before conflict detection. 7) meanwhile the certification info garbage collection kicks in. Both members have a GTID_EXECUTED= UUID:1-4:1000002 Its intersection is UUID:1-4:1000002 Both members certification info has: Hash of item in Writeset snapshot version (Gtid_set) #1 UUID1:1-4:1000002 The condition to purge write-sets is: snapshot_version.is_subset(intersection) We have "UUID:1-4:1000002".is_subset("UUID:1-4:1000002) which is true, so we remove #1. Both members certification info has: Hash of item in Writeset snapshot version (Gtid_set) 8) member2 gets back to normal, we release transaction TA, lets recall that this transaction has snapshot_version: UUID:1-4. On conflict detection, since the certification info is empty, the transaction will be allowed to proceed, which is incorrect, it must rollback (like on member1) since it conflicts with TB. The problem it is on certification garbage collection, more precisely on the condition used to purge data, we cannot leave the certification info empty otherwise this situation can happen. The condition must be changed to snapshot_version.is_subset_not_equals(intersection) which will always leave a placeholder to detect delayed conflicting transaction. So a trace of the solution is (starting on step 7): 7) meanwhile the certification info garbage collection kicks in. Both members have a GTID_EXECUTED= UUID:1-4:1000002 Its intersection is UUID:1-4:1000002 Both members certification info has: Hash of item in Writeset snapshot version (Gtid_set) #1 UUID1:1-4:1000002 The condition to purge write-sets is: snapshot_version.is_subset_not_equals(intersection) We have "UUID:1-4:1000002".is_subset_not_equals("UUID:1-4:1000002) which is false, so we do not remove #1. Both members certification info has: Hash of item in Writeset snapshot version (Gtid_set) #1 UUID1:1-4:1000002 8) member2 gets back to normal, we release transaction TA, lets recall that this transaction has snapshot_version: UUID:1-4. On conflict detection on member2, it will conflict with #1, since this snapshot_version does not contain the snapshot_version of #1, that is TA was executed on a previous version than TB. This is the same scenario that we see on this bug, though here the pipeline is being blocked by the distributed recovery procedure, that is, while the joining member is applying the missing data through the recovery channel, the incoming data is being queued. Meanwhile the certification info garbage collection kicks in and purges more data that it should, the result it is that conflicts are not being detected. --- rapid/plugin/group_replication/src/applier.cc | 7 +- .../plugin/group_replication/src/certifier.cc | 4 +- .../r/gr_certifier_garbage_collection2.result | 74 +++++++++ .../r/gr_perfschema_group_member_stats.result | 2 +- .../tests/mtr/r/gr_set_gtid_next.result | 4 +- .../t/gr_certifier_garbage_collection2.test | 148 ++++++++++++++++++ .../t/gr_perfschema_group_member_stats.test | 4 +- .../tests/mtr/t/gr_set_gtid_next.test | 8 +- 8 files changed, 239 insertions(+), 12 deletions(-) create mode 100644 rapid/plugin/group_replication/tests/mtr/r/gr_certifier_garbage_collection2.result create mode 100644 rapid/plugin/group_replication/tests/mtr/t/gr_certifier_garbage_collection2.test diff --git a/rapid/plugin/group_replication/src/applier.cc b/rapid/plugin/group_replication/src/applier.cc index dbab2bf09748..79090c2006e7 100644 --- a/rapid/plugin/group_replication/src/applier.cc +++ b/rapid/plugin/group_replication/src/applier.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -299,6 +299,11 @@ int Applier_module::apply_data_packet(Data_packet *data_packet, uchar* payload= data_packet->payload; uchar* payload_end= data_packet->payload + data_packet->len; + DBUG_EXECUTE_IF("group_replication_before_apply_data_packet", { + const char act[] = "now wait_for continue_apply"; + DBUG_ASSERT(!debug_sync_set_action(current_thd, STRING_WITH_LEN(act))); + }); + if (check_single_primary_queue_status()) return 1; /* purecov: inspected */ diff --git a/rapid/plugin/group_replication/src/certifier.cc b/rapid/plugin/group_replication/src/certifier.cc index 7e1fd6f0c30a..c3ac7d7fc62c 100644 --- a/rapid/plugin/group_replication/src/certifier.cc +++ b/rapid/plugin/group_replication/src/certifier.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -1230,7 +1230,7 @@ void Certifier::garbage_collect() stable_gtid_set_lock->wrlock(); while (it != certification_info.end()) { - if (it->second->is_subset(stable_gtid_set)) + if (it->second->is_subset_not_equals(stable_gtid_set)) { if (it->second->unlink() == 0) delete it->second; diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_certifier_garbage_collection2.result b/rapid/plugin/group_replication/tests/mtr/r/gr_certifier_garbage_collection2.result new file mode 100644 index 000000000000..9050ec54ba59 --- /dev/null +++ b/rapid/plugin/group_replication/tests/mtr/r/gr_certifier_garbage_collection2.result @@ -0,0 +1,74 @@ +include/group_replication.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection server1] + +############################################################ +# 1. Create a table on server1. +CREATE TABLE t1(a INT, b INT, PRIMARY KEY(a)); +INSERT INTO t1 VALUE(1, 1); +include/rpl_sync.inc + +############################################################ +# 2. Set a debug sync before broadcast message to group on +# connection server_1. +# Commit a transaction that will be block before broadcast. +[connection server_1] +SET @@GLOBAL.DEBUG='+d,group_replication_before_message_broadcast'; +BEGIN; +UPDATE t1 SET b=10 WHERE a=1; +COMMIT; + +############################################################ +# 3. Wait until server_1 connection reaches the +# group_replication_before_message_broadcast debug sync point. +[connection server1] + +############################################################ +# 4. Execute a transaction on server2, that will reach first +# certification, since server_1 is blocked before broadcast. +[connection server2] +UPDATE t1 SET b=20 WHERE a=1; + +############################################################ +# 5. Suspend pipeline on server2. +SET @@GLOBAL.DEBUG='+d,group_replication_before_apply_data_packet'; + +############################################################ +# 6. Resume the transaction on server_1 +[connection server1] +SET DEBUG_SYNC='now SIGNAL waiting'; +SET @@GLOBAL.DEBUG='-d,group_replication_before_message_broadcast'; +[connection server_1] +ERROR HY000: Plugin instructed the server to rollback the current transaction. + +############################################################ +# 7. Make sure the pipeline is suspended on server2. +[connection server2] + +############################################################ +# 8. Wait until certification info garbage collector does +# its work. + +############################################################ +# 9. Resume the pipeline on server2. +SET DEBUG_SYNC='now SIGNAL continue_apply'; +SET @@GLOBAL.DEBUG='-d,group_replication_before_apply_data_packet'; + +############################################################ +# 10. Execute a new transaction in order to have a sync point +# to make the test deterministic, +# Validate that data and GTIDs are correct. +[connection server1] +INSERT INTO t1 VALUE(2, 2); +include/rpl_sync.inc +include/assert.inc [GTID_EXECUTED must contain 6 transactions] +[connection server2] +include/assert.inc [GTID_EXECUTED must contain 6 transactions] +include/diff_tables.inc [server1:t1, server2:t1] + +############################################################ +# 11. Clean up. +DROP TABLE t1; +include/group_replication_end.inc diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_perfschema_group_member_stats.result b/rapid/plugin/group_replication/tests/mtr/r/gr_perfschema_group_member_stats.result index b90552faeaaa..b8cb7e33833a 100644 --- a/rapid/plugin/group_replication/tests/mtr/r/gr_perfschema_group_member_stats.result +++ b/rapid/plugin/group_replication/tests/mtr/r/gr_perfschema_group_member_stats.result @@ -53,7 +53,7 @@ server1 include/assert.inc [The value of member_id should be equal to server UUID after starting group replication] include/assert.inc [The value of Count_Transactions_checked should be 6 after starting group replication] include/assert.inc [The value of Count_conflicts_detected should be 0 after starting group replication] -include/assert.inc [The value of Count_Transactions_rows_validating should be 4 after starting group replication] +include/assert.inc [The value of Count_Transactions_rows_validating should be 6 after starting group replication] include/assert.inc [The value of Transactions_committed_all_members should have server 1 GTIDs before server2 start] include/assert.inc [The value of Last_Conflict_free_transaction should be the gtid of the last applied transaction.] SET SESSION sql_log_bin= 0; diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_set_gtid_next.result b/rapid/plugin/group_replication/tests/mtr/r/gr_set_gtid_next.result index 6e409dc37769..3f3e4e1bc3d5 100644 --- a/rapid/plugin/group_replication/tests/mtr/r/gr_set_gtid_next.result +++ b/rapid/plugin/group_replication/tests/mtr/r/gr_set_gtid_next.result @@ -72,14 +72,14 @@ include/assert.inc ['There is a value 3 in table t2'] # 6. Check that stable set and certification info size are # properly updated after stable set propagation and # certification info garbage collection on server 1. -include/assert.inc ['Count_transactions_rows_validating must be 0'] +include/assert.inc ['Count_transactions_rows_validating must be 2'] include/assert.inc ['Transactions_committed_all_members must be equal to GTID_EXECUTED'] ############################################################ # 7. Check that stable set and certification info size are # properly updated after stable set propagation and # certification info garbage collection on server 2. -include/assert.inc ['Count_transactions_rows_validating must be 0'] +include/assert.inc ['Count_transactions_rows_validating must be 2'] include/assert.inc ['Transactions_committed_all_members must be equal to GTID_EXECUTED'] ############################################################ diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_certifier_garbage_collection2.test b/rapid/plugin/group_replication/tests/mtr/t/gr_certifier_garbage_collection2.test new file mode 100644 index 000000000000..0d8f434aea22 --- /dev/null +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_certifier_garbage_collection2.test @@ -0,0 +1,148 @@ +################################################################################ +# Validate that certification info garbage collection do not purge more data +# than it should. +# +# Test: +# 0. The test requires two servers: M1 and M2. +# 1. Create a table on server1. +# 2. Set a debug sync before broadcast message to group on +# connection server_1. +# Commit a transaction that will be block before broadcast. +# 3. Wait until server_1 connection reaches the +# group_replication_before_message_broadcast debug sync point. +# 4. Execute a transaction on server2, that will reach first +# certification, since server_1 is blocked before broadcast. +# 5. Suspend pipeline on server2. +# 6. Resume the transaction on server_1 +# 7. Make sure the pipeline is suspended on server2. +# 8. Wait until certification info garbage collector does +# its work. +# 9. Resume the pipeline on server2. +# 10. Execute a new transaction in order to have a sync point +# to make the test deterministic, +# Validate that data and GTIDs are correct. +# 11. Clean up. +################################################################################ +--source include/have_debug_sync.inc +--source include/big_test.inc +--source ../inc/have_group_replication_plugin.inc +--source ../inc/group_replication.inc + +--echo +--echo ############################################################ +--echo # 1. Create a table on server1. +CREATE TABLE t1(a INT, b INT, PRIMARY KEY(a)); +INSERT INTO t1 VALUE(1, 1); +--source include/rpl_sync.inc + +--echo +--echo ############################################################ +--echo # 2. Set a debug sync before broadcast message to group on +--echo # connection server_1. +--echo # Commit a transaction that will be block before broadcast. +--let $rpl_connection_name= server_1 +--source include/rpl_connection.inc +SET @@GLOBAL.DEBUG='+d,group_replication_before_message_broadcast'; +BEGIN; +UPDATE t1 SET b=10 WHERE a=1; +--send COMMIT + +--echo +--echo ############################################################ +--echo # 3. Wait until server_1 connection reaches the +--echo # group_replication_before_message_broadcast debug sync point. +--let $rpl_connection_name= server1 +--source include/rpl_connection.inc +--let $wait_condition=SELECT COUNT(*)=1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE State = 'debug sync point: now' +--source include/wait_condition.inc + +--echo +--echo ############################################################ +--echo # 4. Execute a transaction on server2, that will reach first +--echo # certification, since server_1 is blocked before broadcast. +--let $rpl_connection_name= server2 +--source include/rpl_connection.inc +UPDATE t1 SET b=20 WHERE a=1; + +--echo +--echo ############################################################ +--echo # 5. Suspend pipeline on server2. +SET @@GLOBAL.DEBUG='+d,group_replication_before_apply_data_packet'; + +--echo +--echo ############################################################ +--echo # 6. Resume the transaction on server_1 +--let $rpl_connection_name= server1 +--source include/rpl_connection.inc +SET DEBUG_SYNC='now SIGNAL waiting'; +SET @@GLOBAL.DEBUG='-d,group_replication_before_message_broadcast'; + +--let $rpl_connection_name= server_1 +--source include/rpl_connection.inc +--error ER_TRANSACTION_ROLLBACK_DURING_COMMIT +--reap + +--echo +--echo ############################################################ +--echo # 7. Make sure the pipeline is suspended on server2. +--let $rpl_connection_name= server2 +--source include/rpl_connection.inc +--let $wait_condition=SELECT COUNT(*)=1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE State = 'debug sync point: now' +--source include/wait_condition.inc + +--echo +--echo ############################################################ +--echo # 8. Wait until certification info garbage collector does +--echo # its work. +--let $gtid_assignment_block_size= `SELECT @@GLOBAL.group_replication_gtid_assignment_block_size;` +--let $expected_gtid_set= $group_replication_group_name:1-4:1000002 +if ($gtid_assignment_block_size == 1) +{ + --let $expected_gtid_set= $group_replication_group_name:1-5 +} +--let $wait_condition= SELECT transactions_committed_all_members = "$expected_gtid_set" from performance_schema.replication_group_member_stats; +--let $wait_timeout= 150 +--source include/wait_condition.inc + +--echo +--echo ############################################################ +--echo # 9. Resume the pipeline on server2. +SET DEBUG_SYNC='now SIGNAL continue_apply'; +SET @@GLOBAL.DEBUG='-d,group_replication_before_apply_data_packet'; + +--echo +--echo ############################################################ +--echo # 10. Execute a new transaction in order to have a sync point +--echo # to make the test deterministic, +--echo # Validate that data and GTIDs are correct. +--let $rpl_connection_name= server1 +--source include/rpl_connection.inc +INSERT INTO t1 VALUE(2, 2); +--source include/rpl_sync.inc + +--let $expected_gtid_set= $group_replication_group_name:1-5:1000002 +if ($gtid_assignment_block_size == 1) +{ + --let $expected_gtid_set= $group_replication_group_name:1-6 +} + +--let $assert_text= GTID_EXECUTED must contain 6 transactions +--let $assert_cond= "[SELECT @@GLOBAL.GTID_EXECUTED]" = "$expected_gtid_set"; +--source include/assert.inc + +--let $rpl_connection_name= server2 +--source include/rpl_connection.inc +--let $assert_text= GTID_EXECUTED must contain 6 transactions +--let $assert_cond= "[SELECT @@GLOBAL.GTID_EXECUTED]" = "$expected_gtid_set"; +--source include/assert.inc + +--let $diff_tables=server1:t1, server2:t1 +--source include/diff_tables.inc + + +--echo +--echo ############################################################ +--echo # 11. Clean up. +DROP TABLE t1; + +--source ../inc/group_replication_end.inc diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_perfschema_group_member_stats.test b/rapid/plugin/group_replication/tests/mtr/t/gr_perfschema_group_member_stats.test index 54ab4499cf1a..a1a4d864cfee 100644 --- a/rapid/plugin/group_replication/tests/mtr/t/gr_perfschema_group_member_stats.test +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_perfschema_group_member_stats.test @@ -182,8 +182,8 @@ START SLAVE SQL_THREAD FOR CHANNEL "group_replication_applier"; --source include/assert.inc --let $certification_db_size= query_get_value(SELECT Count_Transactions_rows_validating from performance_schema.replication_group_member_stats, Count_Transactions_rows_validating, 1) ---let $assert_text= The value of Count_Transactions_rows_validating should be 4 after starting group replication ---let $assert_cond= "$certification_db_size" = 4 +--let $assert_text= The value of Count_Transactions_rows_validating should be 6 after starting group replication +--let $assert_cond= "$certification_db_size" = 6 --source include/assert.inc --let $stable_set= query_get_value(SELECT Transactions_committed_all_members from performance_schema.replication_group_member_stats, Transactions_committed_all_members, 1) diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_set_gtid_next.test b/rapid/plugin/group_replication/tests/mtr/t/gr_set_gtid_next.test index 28a12c6f0f0b..67fefbadf5be 100644 --- a/rapid/plugin/group_replication/tests/mtr/t/gr_set_gtid_next.test +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_set_gtid_next.test @@ -168,8 +168,8 @@ INSERT INTO t2 VALUES (3); --connection server1 --let $count_transactions_validating= query_get_value(SELECT Count_transactions_rows_validating from performance_schema.replication_group_member_stats, Count_transactions_rows_validating, 1) ---let $assert_text= 'Count_transactions_rows_validating must be 0' ---let $assert_cond= $count_transactions_validating = 0 +--let $assert_text= 'Count_transactions_rows_validating must be 2' +--let $assert_cond= $count_transactions_validating = 2 --source include/assert.inc --let $transactions_committed_all_members= query_get_value(SELECT Transactions_committed_all_members from performance_schema.replication_group_member_stats, Transactions_committed_all_members, 1) @@ -186,8 +186,8 @@ INSERT INTO t2 VALUES (3); --connection server2 --let $count_transactions_validating= query_get_value(SELECT Count_transactions_rows_validating from performance_schema.replication_group_member_stats, Count_transactions_rows_validating, 1) ---let $assert_text= 'Count_transactions_rows_validating must be 0' ---let $assert_cond= $count_transactions_validating = 0 +--let $assert_text= 'Count_transactions_rows_validating must be 2' +--let $assert_cond= $count_transactions_validating = 2 --source include/assert.inc --let $transactions_committed_all_members= query_get_value(SELECT Transactions_committed_all_members from performance_schema.replication_group_member_stats, Transactions_committed_all_members, 1) From 3580950d5d7f92cee3a63e1e6bf250c97a915ef6 Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Fri, 18 May 2018 16:54:02 +0530 Subject: [PATCH 0849/1221] From f8157f39944b460ae2578e1f1fbe90a78779be6e Mon Sep 17 00:00:00 2001 From: Yura Sorokin Date: Fri, 6 Apr 2018 19:32:20 +0300 Subject: [PATCH 0850/1221] Implemented PS-3947 (Refactor IO_CACHE layer to allow custom read/write function) https://jira.percona.com/browse/PS-3947 This is a prerequisite for temporary file encryption. https://jira.percona.com/browse/PS-3879 Cherry-picked commit MariaDB/server@318c826 "always use my_b_pread() instead of mysql_file_pread()". Partially cherry-picked commit MariaDB/server@6309a30 "my_b_fill, inline my_b_* functions instead of hairy macros". 'my_b_fill()' function left as is. Cherry-picked commit MariaDB/server@196e852 "misc IO_CACHE cleanups" Cherry-picked commit MariaDB/server@1d21b22 "MDEV-10001 my_b_seek() may not work correctly after my_b_read() hits EOF" Cherry-picked commit MariaDB/server@58b54b7 "MDEV-9044 : Binlog corruption in Galera" Cherry-picked commit MariaDB/server@735a4a1 "MDEV-10508 Mariadb crash on out of disk space during dump import" Cherry-picked commit MariaDB/server@1841557 "myisam/aria: don't mess with IO_CACHE::file" Added 'MY_NODISCARD' attribute to the following 'IO_CACHE' functions: '_my_b_get()' '_my_b_read()' '_my_b_write()' 'my_b_inited()' 'my_b_read()' 'my_b_write()' 'my_b_get()' 'my_b_tell()' 'my_b_get_buffer_start()' 'my_b_get_bytes_in_buffer()' 'my_b_get_pos_in_file()' 'my_b_bytes_in_cache()' 'my_b_pread()' 'init_io_cache_ext()' 'init_io_cache()' 'reinit_io_cache()'. Calling sites updated correspondingly either with DEBUG_ASSERT or with propagating the error code. Various formatting and spelling fixes. --- include/my_sys.h | 127 ++++++--- mysys/mf_iocache.c | 377 ++++++++++++++----------- mysys/mf_iocache2.c | 11 +- sql/binlog.cc | 10 +- sql/filesort.cc | 11 +- sql/log_event.cc | 59 +++- sql/records.cc | 3 +- sql/rpl_info_file.cc | 21 +- sql/rpl_master.cc | 3 +- sql/uniques.cc | 7 +- storage/myisam/mi_cache.c | 4 +- storage/myisam/mi_check.c | 81 +++--- storage/myisam/mi_extra.c | 15 +- storage/myisam/mi_panic.c | 5 +- storage/myisam/myisamchk.c | 18 +- storage/myisam/myisamlog.c | 8 +- storage/myisam/sort.cc | 21 +- unittest/gunit/mysys_my_b_vprintf-t.cc | 3 +- 18 files changed, 481 insertions(+), 303 deletions(-) diff --git a/include/my_sys.h b/include/my_sys.h index febc50eae8c2..a709862dbd0f 100644 --- a/include/my_sys.h +++ b/include/my_sys.h @@ -1,4 +1,6 @@ /* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2018, Percona and/or its affiliates. All rights reserved. + Copyright (c) 2010, 2017, MariaDB Corporation. 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 @@ -273,7 +275,7 @@ enum cache_type { TYPE_NOT_SET= 0, READ_CACHE, WRITE_CACHE, SEQ_READ_APPEND /* sequential read or append */, - READ_FIFO, READ_NET,WRITE_NET}; + READ_FIFO, READ_NET}; enum flush_type { @@ -487,46 +489,101 @@ typedef void (*my_error_reporter)(enum loglevel level, const char *format, ...) extern my_error_reporter my_charset_error_reporter; -/* defines for mf_iocache */ extern PSI_file_key key_file_io_cache; +MY_NODISCARD +extern int _my_b_get(IO_CACHE *info); +MY_NODISCARD +extern int _my_b_read(IO_CACHE *info, uchar *Buffer, size_t Count); +MY_NODISCARD +extern int _my_b_write(IO_CACHE *info, const uchar *Buffer, size_t Count); + +/* inline functions for mf_iocache */ +static inline void my_b_clear(IO_CACHE *info) +{ + info->buffer= 0; +} + /* Test if buffer is inited */ -#define my_b_clear(info) (info)->buffer=0 -#define my_b_inited(info) (info)->buffer +MY_NODISCARD +static inline int my_b_inited(const IO_CACHE *info) +{ + return MY_TEST(info->buffer); +} #define my_b_EOF INT_MIN -#define my_b_read(info,Buffer,Count) \ - ((info)->read_pos + (Count) <= (info)->read_end ?\ - (memcpy(Buffer,(info)->read_pos,(size_t) (Count)), \ - ((info)->read_pos+=(Count)),0) :\ - (*(info)->read_function)((info),Buffer,Count)) +MY_NODISCARD +static inline int my_b_read(IO_CACHE *info, uchar *Buffer, size_t Count) +{ + if (info->read_pos + Count <= info->read_end) + { + memcpy(Buffer, info->read_pos, Count); + info->read_pos+= Count; + return 0; + } + return _my_b_read(info, Buffer, Count); +} + +MY_NODISCARD +static inline int my_b_write(IO_CACHE *info, const uchar *Buffer, + size_t Count) +{ + if (info->write_pos + Count <= info->write_end) + { + memcpy(info->write_pos, Buffer, Count); + info->write_pos+= Count; + return 0; + } + return _my_b_write(info, Buffer, Count); +} + +MY_NODISCARD +static inline int my_b_get(IO_CACHE *info) +{ + if (info->read_pos != info->read_end) + { + info->read_pos++; + return info->read_pos[-1]; + } + return _my_b_get(info); +} + +MY_NODISCARD +static inline my_off_t my_b_tell(const IO_CACHE *info) +{ + return info->pos_in_file + (*info->current_pos - info->request_pos); +} -#define my_b_write(info,Buffer,Count) \ - ((info)->write_pos + (Count) <=(info)->write_end ?\ - (memcpy((info)->write_pos, (Buffer), (size_t)(Count)),\ - ((info)->write_pos+=(Count)),0) : \ - (*(info)->write_function)((info),(uchar *)(Buffer),(Count))) +MY_NODISCARD +static inline uchar* my_b_get_buffer_start(const IO_CACHE *info) +{ + return info->request_pos; +} -#define my_b_get(info) \ - ((info)->read_pos != (info)->read_end ?\ - ((info)->read_pos++, (int) (uchar) (info)->read_pos[-1]) :\ - _my_b_get(info)) +MY_NODISCARD +static inline size_t my_b_get_bytes_in_buffer(const IO_CACHE *info) +{ + return info->read_end - info->request_pos; +} -#define my_b_tell(info) ((info)->pos_in_file + \ - (size_t) (*(info)->current_pos - (info)->request_pos)) +MY_NODISCARD +static inline my_off_t my_b_get_pos_in_file(const IO_CACHE *info) +{ + return info->pos_in_file; +} -#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 +MY_NODISCARD +static inline size_t my_b_bytes_in_cache(const IO_CACHE *info) +{ + return *info->current_end - *info->current_pos; +} /* 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); my_off_t my_b_safe_tell(IO_CACHE* info); /* picks the correct tell() */ - -#define my_b_bytes_in_cache(info) (size_t) (*(info)->current_end - \ - *(info)->current_pos) +MY_NODISCARD +int my_b_pread(IO_CACHE *info, uchar *Buffer, size_t Count, my_off_t pos); typedef uint32 ha_checksum; @@ -723,26 +780,24 @@ extern void my_qsort2(void *base_ptr, size_t total_elems, size_t size, qsort2_cmp cmp, const void *cmp_argument); void my_store_ptr(uchar *buff, size_t pack_length, my_off_t pos); my_off_t my_get_ptr(uchar *ptr, size_t pack_length); +MY_NODISCARD extern int init_io_cache_ext(IO_CACHE *info,File file,size_t cachesize, enum cache_type type,my_off_t seek_offset, - pbool use_async_io, myf cache_myflags, + my_bool use_async_io, myf cache_myflags, PSI_file_key file_key); +MY_NODISCARD extern int init_io_cache(IO_CACHE *info,File file,size_t cachesize, enum cache_type type,my_off_t seek_offset, - pbool use_async_io, myf cache_myflags); + my_bool use_async_io, myf cache_myflags); +MY_NODISCARD extern my_bool reinit_io_cache(IO_CACHE *info,enum cache_type type, - my_off_t seek_offset,pbool use_async_io, - pbool clear_cache); + my_off_t seek_offset, my_bool use_async_io, + my_bool clear_cache); extern void setup_io_cache(IO_CACHE* info); -extern int _my_b_read(IO_CACHE *info,uchar *Buffer,size_t Count); -extern int _my_b_read_r(IO_CACHE *info,uchar *Buffer,size_t Count); extern void init_io_cache_share(IO_CACHE *read_cache, IO_CACHE_SHARE *cshare, IO_CACHE *write_cache, uint num_threads); extern void remove_io_thread(IO_CACHE *info); -extern int _my_b_seq_read(IO_CACHE *info,uchar *Buffer,size_t Count); extern int _my_b_net_read(IO_CACHE *info,uchar *Buffer,size_t Count); -extern int _my_b_get(IO_CACHE *info); -extern int _my_b_write(IO_CACHE *info,const uchar *Buffer,size_t Count); extern int my_b_append(IO_CACHE *info,const uchar *Buffer,size_t Count); extern int my_b_safe_write(IO_CACHE *info,const uchar *Buffer,size_t Count); diff --git a/mysys/mf_iocache.c b/mysys/mf_iocache.c index bc5f1bb692b9..0ca2d625cd8b 100644 --- a/mysys/mf_iocache.c +++ b/mysys/mf_iocache.c @@ -1,4 +1,6 @@ /* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2018, Percona and/or its affiliates. All rights reserved. + Copyright (c) 2010, 2015, MariaDB 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 @@ -64,6 +66,19 @@ PSI_file_key key_file_io_cache; #define IO_ROUND_UP(X) (((X)+IO_SIZE-1) & ~(IO_SIZE-1)) #define IO_ROUND_DN(X) ( (X) & ~(IO_SIZE-1)) +MY_NODISCARD +static int _my_b_cache_read(IO_CACHE *info, uchar *Buffer, size_t Count); +MY_NODISCARD +static int _my_b_cache_read_r(IO_CACHE *info, uchar *Buffer, size_t Count); +MY_NODISCARD +static int _my_b_seq_read(IO_CACHE *info, uchar *Buffer, size_t Count); +MY_NODISCARD +static int _my_b_cache_write(IO_CACHE *info, const uchar *Buffer, + size_t Count); +MY_NODISCARD +static int _my_b_cache_write_r(IO_CACHE *info, const uchar *Buffer, + size_t Count); + /* Setup internal pointers inside IO_CACHE @@ -97,6 +112,9 @@ static void init_functions(IO_CACHE* info) { enum cache_type type= info->type; + info->read_function= NULL; /* Force a core if used */ + info->write_function= NULL; /* Force a core if used */ + switch (type) { case READ_NET: /* @@ -109,13 +127,18 @@ init_functions(IO_CACHE* info) break; case SEQ_READ_APPEND: info->read_function = _my_b_seq_read; - info->write_function = 0; /* Force a core if used */ + break; + case READ_CACHE: + case WRITE_CACHE: + case READ_FIFO: + info->read_function= + info->share ? _my_b_cache_read_r : _my_b_cache_read; + info->write_function= + info->share ? _my_b_cache_write_r : _my_b_cache_write; break; default: - info->read_function = info->share ? _my_b_read_r : _my_b_read; - info->write_function = _my_b_write; + DBUG_ASSERT(0); } - setup_io_cache(info); } @@ -146,7 +169,7 @@ init_functions(IO_CACHE* info) int init_io_cache_ext(IO_CACHE *info, File file, size_t cachesize, enum cache_type type, my_off_t seek_offset, - pbool use_async_io, myf cache_myflags, + my_bool use_async_io, myf cache_myflags, PSI_file_key file_key) { size_t min_cache; @@ -212,7 +235,7 @@ int init_io_cache_ext(IO_CACHE *info, File file, size_t cachesize, } } cache_myflags &= ~MY_DONT_CHECK_FILESIZE; - if (type != READ_NET && type != WRITE_NET) + if (type != READ_NET) { /* Retry allocating memory in smaller blocks until we get one */ cachesize= ((cachesize + min_cache-1) & ~(min_cache-1)); @@ -294,7 +317,7 @@ int init_io_cache_ext(IO_CACHE *info, File file, size_t cachesize, int init_io_cache(IO_CACHE *info, File file, size_t cachesize, enum cache_type type, my_off_t seek_offset, - pbool use_async_io, myf cache_myflags) + my_bool use_async_io, myf cache_myflags) { return init_io_cache_ext(info, file, cachesize, type, seek_offset, use_async_io, cache_myflags, key_file_io_cache); @@ -308,19 +331,17 @@ int init_io_cache(IO_CACHE *info, File file, size_t cachesize, */ my_bool reinit_io_cache(IO_CACHE *info, enum cache_type type, - my_off_t seek_offset, - pbool use_async_io MY_ATTRIBUTE((unused)), - pbool clear_cache) + my_off_t seek_offset, + my_bool use_async_io MY_ATTRIBUTE((unused)), + my_bool clear_cache) { DBUG_ENTER("reinit_io_cache"); DBUG_PRINT("enter",("cache: 0x%lx type: %d seek_offset: %lu clear_cache: %d", - (ulong) info, type, (ulong) seek_offset, - (int) clear_cache)); + (ulong) info, type, (ulong) seek_offset, + (int) clear_cache)); - /* One can't do reinit with the following types */ - DBUG_ASSERT(type != READ_NET && info->type != READ_NET && - type != WRITE_NET && info->type != WRITE_NET && - type != SEQ_READ_APPEND && info->type != SEQ_READ_APPEND); + DBUG_ASSERT(type == READ_CACHE || type == WRITE_CACHE); + DBUG_ASSERT(info->type == READ_CACHE || info->type == WRITE_CACHE); /* If the whole file is in memory, avoid flushing to disk */ if (! clear_cache && @@ -388,12 +409,73 @@ my_bool reinit_io_cache(IO_CACHE *info, enum cache_type type, } /* reinit_io_cache */ +int _my_b_read(IO_CACHE *info, uchar *Buffer, size_t Count) +{ + size_t left_length; + int res; + + /* If the buffer is not empty yet, copy what is available. */ + if ((left_length= (size_t)(info->read_end - info->read_pos))) + { + DBUG_ASSERT(Count > left_length); + memcpy(Buffer, info->read_pos, left_length); + Buffer+= left_length; + Count-= left_length; + } + res= info->read_function(info, Buffer, Count); + if (res && info->error >= 0) + info->error+= left_length; /* update number or read bytes */ + return res; +} + +int _my_b_write(IO_CACHE *info, const uchar *Buffer, size_t Count) +{ + size_t rest_length; + int res; + + /* Always use my_b_flush_io_cache() to flush write_buffer! */ + DBUG_ASSERT(Buffer != info->write_buffer); + + if (info->pos_in_file + info->buffer_length > info->end_of_file) + { + errno= EFBIG; + set_my_errno(EFBIG); + return info->error= -1; + } + + rest_length= (size_t)(info->write_end - info->write_pos); + DBUG_ASSERT(Count >= rest_length); + memcpy(info->write_pos, Buffer, (size_t)rest_length); + Buffer+= rest_length; + Count-= rest_length; + info->write_pos+= rest_length; + + if (my_b_flush_io_cache(info, 1)) + return 1; + + if (Count) + { + my_off_t old_pos_in_file= info->pos_in_file; + res= info->write_function(info, Buffer, Count); + Count-= (size_t)(info->pos_in_file - old_pos_in_file); + Buffer+= info->pos_in_file - old_pos_in_file; + } + else + res= 0; + + if (!res && Count) + { + memcpy(info->write_pos, Buffer, Count); + info->write_pos+= Count; + } + return res; +} /* Read buffered. SYNOPSIS - _my_b_read() + _my_b_cache_read() info IO_CACHE pointer Buffer Buffer to retrieve count bytes from file Count Number of bytes to read into Buffer @@ -409,8 +491,8 @@ my_bool reinit_io_cache(IO_CACHE *info, enum cache_type type, types than my_off_t unless you can be sure that their value fits. Same applies to differences of file offsets. - When changing this function, check _my_b_read_r(). It might need the - same change. + When changing this function, check _my_b_cache_read_r(). It might need + the same change. RETURN 0 we succeeded in reading all data @@ -419,20 +501,11 @@ my_bool reinit_io_cache(IO_CACHE *info, enum cache_type type, Otherwise info->error contains the number of bytes in Buffer. */ -int _my_b_read(IO_CACHE *info, uchar *Buffer, size_t Count) +static int _my_b_cache_read(IO_CACHE *info, uchar *Buffer, size_t Count) { - size_t length,diff_length,left_length, max_length; + size_t length, diff_length, left_length= 0, max_length; my_off_t pos_in_file; - DBUG_ENTER("_my_b_read"); - - /* If the buffer is not empty yet, copy what is available. */ - if ((left_length= (size_t) (info->read_end-info->read_pos))) - { - DBUG_ASSERT(Count >= left_length); /* User is not using my_b_read() */ - memcpy(Buffer,info->read_pos, left_length); - Buffer+=left_length; - Count-=left_length; - } + DBUG_ENTER("_my_b_cache_read"); /* pos_in_file always point on where info->buffer was read */ pos_in_file=info->pos_in_file+ (size_t) (info->read_end - info->buffer); @@ -481,6 +554,7 @@ int _my_b_read(IO_CACHE *info, uchar *Buffer, size_t Count) { /* End of file. Return, what we did copy from the buffer. */ info->error= (int) left_length; + info->seek_not_done= 1; DBUG_RETURN(1); } /* @@ -488,16 +562,17 @@ int _my_b_read(IO_CACHE *info, uchar *Buffer, size_t Count) what we did already read from a block. That way, the read will end aligned with a block. */ - length=(Count & (size_t) ~(IO_SIZE-1))-diff_length; + length= IO_ROUND_DN(Count) - diff_length; if ((read_length= mysql_file_read(info->file,Buffer, length, info->myflags)) - != length) + != length) { /* If we didn't get, what we wanted, we either return -1 for a read error, or (it's end of file), how much we got in total. */ info->error= (read_length == (size_t) -1 ? -1 : - (int) (read_length+left_length)); + (int) (read_length+left_length)); + info->seek_not_done= 1; DBUG_RETURN(1); } Count-=length; @@ -530,7 +605,11 @@ int _my_b_read(IO_CACHE *info, uchar *Buffer, size_t Count) info->error= (int)left_length; DBUG_RETURN(1); } - length=0; /* Didn't read any chars */ + else + { + info->error= 0; + DBUG_RETURN(0); /* EOF */ + } } else if ((length= mysql_file_read(info->file,info->buffer, max_length, info->myflags)) < Count || @@ -546,6 +625,7 @@ int _my_b_read(IO_CACHE *info, uchar *Buffer, size_t Count) /* For a read error, return -1, otherwise, what we got in total. */ info->error= length == (size_t) -1 ? -1 : (int) (length+left_length); info->read_pos=info->read_end=info->buffer; + info->seek_not_done= 1; DBUG_RETURN(1); } /* @@ -656,12 +736,15 @@ void init_io_cache_share(IO_CACHE *read_cache, IO_CACHE_SHARE *cshare, cshare->source_cache= write_cache; /* Can be NULL. */ read_cache->share= cshare; - read_cache->read_function= _my_b_read_r; + read_cache->read_function= _my_b_cache_read_r; read_cache->current_pos= NULL; read_cache->current_end= NULL; if (write_cache) + { write_cache->share= cshare; + write_cache->write_function= _my_b_cache_write_r; + } DBUG_VOID_RETURN; } @@ -929,7 +1012,7 @@ static void unlock_io_cache(IO_CACHE *cache) Read from IO_CACHE when it is shared between several threads. SYNOPSIS - _my_b_read_r() + _my_b_cache_read_r() cache IO_CACHE pointer Buffer Buffer to retrieve count bytes from file Count Number of bytes to read into Buffer @@ -954,7 +1037,7 @@ static void unlock_io_cache(IO_CACHE *cache) types than my_off_t unless you can be sure that their value fits. Same applies to differences of file offsets. (Bug #11527) - When changing this function, check _my_b_read(). It might need the + When changing this function, check _my_b_cache_read(). It might need the same change. RETURN @@ -962,20 +1045,13 @@ static void unlock_io_cache(IO_CACHE *cache) 1 Error: can't read requested characters */ -int _my_b_read_r(IO_CACHE *cache, uchar *Buffer, size_t Count) +static int _my_b_cache_read_r(IO_CACHE *cache, uchar *Buffer, size_t Count) { my_off_t pos_in_file; - size_t length, diff_length, left_length; + size_t length, diff_length, left_length= 0; IO_CACHE_SHARE *cshare= cache->share; - DBUG_ENTER("_my_b_read_r"); + DBUG_ENTER("_my_b_cache_read_r"); - if ((left_length= (size_t) (cache->read_end - cache->read_pos))) - { - DBUG_ASSERT(Count >= left_length); /* User is not using my_b_read() */ - memcpy(Buffer, cache->read_pos, left_length); - Buffer+= left_length; - Count-= left_length; - } while (Count) { size_t cnt, len; @@ -1090,21 +1166,23 @@ int _my_b_read_r(IO_CACHE *cache, uchar *Buffer, size_t Count) */ static void copy_to_read_buffer(IO_CACHE *write_cache, - const uchar *write_buffer, size_t write_length) + const uchar *write_buffer, + my_off_t pos_in_file) { + size_t write_length= write_cache->pos_in_file - pos_in_file; IO_CACHE_SHARE *cshare= write_cache->share; DBUG_ASSERT(cshare->source_cache == write_cache); /* write_length is usually less or equal to buffer_length. - It can be bigger if _my_b_write() is called with a big length. + It can be bigger if _my_b_cache_write_r() is called with a big length. */ while (write_length) { size_t copy_length= MY_MIN(write_length, write_cache->buffer_length); int MY_ATTRIBUTE((unused)) rc; - rc= lock_io_cache(write_cache, write_cache->pos_in_file); + rc= lock_io_cache(write_cache, pos_in_file); /* The writing thread does always have the lock when it awakes. */ DBUG_ASSERT(rc); @@ -1112,7 +1190,7 @@ static void copy_to_read_buffer(IO_CACHE *write_cache, cshare->error= 0; cshare->read_end= cshare->buffer + copy_length; - cshare->pos_in_file= write_cache->pos_in_file; + cshare->pos_in_file= pos_in_file; /* Mark all threads as running and wake them. */ unlock_io_cache(write_cache); @@ -1136,20 +1214,12 @@ static void copy_to_read_buffer(IO_CACHE *write_cache, 1 Failed to read */ -int _my_b_seq_read(IO_CACHE *info, uchar *Buffer, size_t Count) +static int _my_b_seq_read(IO_CACHE *info, uchar *Buffer, size_t Count) { - size_t length, diff_length, left_length, save_count, max_length; + size_t length, diff_length, left_length= 0, save_count, max_length; my_off_t pos_in_file; save_count=Count; - /* first, read the regular buffer */ - if ((left_length=(size_t) (info->read_end-info->read_pos))) - { - DBUG_ASSERT(Count > left_length); /* User is not using my_b_read() */ - memcpy(Buffer,info->read_pos, left_length); - Buffer+=left_length; - Count-=left_length; - } lock_append_buffer(info); /* pos_in_file always point on where info->buffer was read */ @@ -1177,7 +1247,7 @@ int _my_b_seq_read(IO_CACHE *info, uchar *Buffer, size_t Count) /* Fill first intern buffer */ size_t read_length; - length=(Count & (size_t) ~(IO_SIZE-1))-diff_length; + length= IO_ROUND_DN(Count) - diff_length; if ((read_length= mysql_file_read(info->file,Buffer, length, info->myflags)) == (size_t) -1) { @@ -1305,71 +1375,62 @@ int _my_b_get(IO_CACHE *info) -1 On error; my_errno contains error code. */ -int _my_b_write(IO_CACHE *info, const uchar *Buffer, size_t Count) +static int _my_b_cache_write(IO_CACHE *info, const uchar *Buffer, + size_t Count) { - size_t rest_length,length; - my_off_t pos_in_file= info->pos_in_file; - - DBUG_EXECUTE_IF("simulate_huge_load_data_file", - { - pos_in_file=(my_off_t)(5000000000ULL); - }); - if (pos_in_file+info->buffer_length > info->end_of_file) + if (Buffer != info->write_buffer) { - errno=EFBIG; - set_my_errno(EFBIG); - return info->error = -1; + Count= IO_ROUND_DN(Count); + if (!Count) + return 0; } - rest_length= (size_t) (info->write_end - info->write_pos); - memcpy(info->write_pos,Buffer,(size_t) rest_length); - Buffer+=rest_length; - Count-=rest_length; - info->write_pos+=rest_length; - - if (my_b_flush_io_cache(info,1)) - return 1; - if (Count >= IO_SIZE) - { /* Fill first intern buffer */ - length=Count & (size_t) ~(IO_SIZE-1); - if (info->seek_not_done) + if (info->seek_not_done) + { + /* + Whenever a function which operates on IO_CACHE flushes/writes + some part of the IO_CACHE to disk it will set the property + "seek_not_done" to indicate this to other functions operating + on the IO_CACHE. + */ + if (mysql_file_seek(info->file, info->pos_in_file, MY_SEEK_SET, + MYF(info->myflags & MY_WME)) == MY_FILEPOS_ERROR) { - /* - Whenever a function which operates on IO_CACHE flushes/writes - some part of the IO_CACHE to disk it will set the property - "seek_not_done" to indicate this to other functions operating - on the IO_CACHE. - */ - if (mysql_file_seek(info->file, info->pos_in_file, MY_SEEK_SET, MYF(0))) - { - info->error= -1; - return (1); - } - info->seek_not_done=0; + info->error= -1; + return 1; } - if (mysql_file_write(info->file, Buffer, length, info->myflags | MY_NABP)) - return info->error= -1; + info->seek_not_done=0; + } + if (mysql_file_write(info->file, Buffer, Count, info->myflags | MY_NABP)) + return info->error= -1; - /* - In case of a shared I/O cache with a writer we normally do direct - write cache to read cache copy. Simulate this here by direct - caller buffer to read cache copy. Do it after the write so that - the cache readers actions on the flushed part can go in parallel - with the write of the extra stuff. copy_to_read_buffer() - synchronizes writer and readers so that after this call the - readers can act on the extra stuff while the writer can go ahead - and prepare the next output. copy_to_read_buffer() relies on - info->pos_in_file. - */ - if (info->share) - copy_to_read_buffer(info, Buffer, length); + info->pos_in_file+= Count; + return 0; +} + + +/* + In case of a shared I/O cache with a writer we normally do direct + write cache to read cache copy. Simulate this here by direct + caller buffer to read cache copy. Do it after the write so that + the cache readers actions on the flushed part can go in parallel + with the write of the extra stuff. copy_to_read_buffer() + synchronizes writer and readers so that after this call the + readers can act on the extra stuff while the writer can go ahead + and prepare the next output. copy_to_read_buffer() relies on + info->pos_in_file. +*/ +static int _my_b_cache_write_r(IO_CACHE *info, const uchar *Buffer, + size_t Count) +{ + my_off_t old_pos_in_file= info->pos_in_file; + int res= _my_b_cache_write(info, Buffer, Count); + if (res) + return res; + + DBUG_ASSERT(info->share); + copy_to_read_buffer(info, Buffer, old_pos_in_file); - Count-=length; - Buffer+=length; - info->pos_in_file+=length; - } - memcpy(info->write_pos,Buffer,(size_t) Count); - info->write_pos+=Count; return 0; } @@ -1405,7 +1466,7 @@ int my_b_append(IO_CACHE *info, const uchar *Buffer, size_t Count) } if (Count >= IO_SIZE) { /* Fill first intern buffer */ - length=Count & (size_t) ~(IO_SIZE-1); + length= IO_ROUND_DN(Count); if (mysql_file_write(info->file,Buffer, length, info->myflags | MY_NABP)) { unlock_append_buffer(info); @@ -1505,11 +1566,9 @@ int my_block_write(IO_CACHE *info, const uchar *Buffer, size_t Count, #define UNLOCK_APPEND_BUFFER if (need_append_buffer_lock) \ unlock_append_buffer(info); -int my_b_flush_io_cache(IO_CACHE *info, - int need_append_buffer_lock MY_ATTRIBUTE((unused))) +int my_b_flush_io_cache(IO_CACHE *info, int need_append_buffer_lock) { size_t length; - my_off_t pos_in_file; my_bool append_cache= (info->type == SEQ_READ_APPEND); DBUG_ENTER("my_b_flush_io_cache"); DBUG_PRINT("enter", ("cache: 0x%lx", (long) info)); @@ -1526,58 +1585,39 @@ int my_b_flush_io_cache(IO_CACHE *info, if (info->file == -1) { if (real_open_cached_file(info)) - DBUG_RETURN((info->error= -1)); + DBUG_RETURN((info->error= -1)); } LOCK_APPEND_BUFFER; if ((length=(size_t) (info->write_pos - info->write_buffer))) { - /* - In case of a shared I/O cache with a writer we do direct write - cache to read cache copy. Do it before the write here so that - the readers can work in parallel with the write. - copy_to_read_buffer() relies on info->pos_in_file. - */ - if (info->share) - copy_to_read_buffer(info, info->write_buffer, length); - - pos_in_file=info->pos_in_file; - /* - If we have append cache, we always open the file with - O_APPEND which moves the pos to EOF automatically on every write - */ - if (!append_cache && info->seek_not_done) - { /* File touched, do seek */ - if (mysql_file_seek(info->file, pos_in_file, MY_SEEK_SET, MYF(0)) == - MY_FILEPOS_ERROR) - { - UNLOCK_APPEND_BUFFER; - DBUG_RETURN((info->error= -1)); - } - if (!append_cache) - info->seek_not_done=0; - } - if (!append_cache) - info->pos_in_file+=length; - info->write_end= (info->write_buffer+info->buffer_length- - ((pos_in_file+length) & (IO_SIZE-1))); - - if (mysql_file_write(info->file,info->write_buffer,length, - info->myflags | MY_NABP)) - info->error= -1; - else - info->error= 0; - if (!append_cache) + if (append_cache) { - set_if_bigger(info->end_of_file,(pos_in_file+length)); + if (mysql_file_write(info->file, info->write_buffer, length, + info->myflags | MY_NABP)) + info->error= -1; + else + info->error= 0; + + info->end_of_file+= info->write_pos - info->append_read_pos; + info->append_read_pos= info->write_buffer; + DBUG_ASSERT(info->end_of_file == + mysql_file_tell(info->file, MYF(0))); } else { - info->end_of_file+=(info->write_pos-info->append_read_pos); - DBUG_ASSERT(info->end_of_file == mysql_file_tell(info->file, MYF(0))); - } + int res= info->write_function(info, info->write_buffer, length); + if (res) + { + UNLOCK_APPEND_BUFFER; + DBUG_RETURN(res); + } - info->append_read_pos=info->write_pos=info->write_buffer; + set_if_bigger(info->end_of_file, info->pos_in_file); + } + info->write_end= (info->write_buffer + info->buffer_length - + ((info->pos_in_file + length) & (IO_SIZE - 1))); + info->write_pos= info->write_buffer; ++info->disk_writes; UNLOCK_APPEND_BUFFER; DBUG_RETURN(info->error); @@ -1598,6 +1638,8 @@ int my_b_flush_io_cache(IO_CACHE *info, It's currently safe to call this if one has called init_io_cache() on the 'info' object, even if init_io_cache() failed. This function is also safe to call twice with the same handle. + Note that info->file is not reset as the caller may still use it for + my_close() RETURN 0 ok @@ -1655,6 +1697,7 @@ void die(const char* fmt, ...) fprintf(stderr,"Error:"); vfprintf(stderr, fmt,va_args); fprintf(stderr,", errno=%d\n", errno); + va_end(va_args); exit(1); } @@ -1723,7 +1766,7 @@ int main(int argc, char** argv) /* check correctness of tests */ if (total_bytes != status.st_size) { - fprintf(stderr,"Not the same number of bytes acutally in file as bytes \ + fprintf(stderr,"Not the same number of bytes actually in file as bytes \ supposedly written\n"); error=1; } diff --git a/mysys/mf_iocache2.c b/mysys/mf_iocache2.c index 05ca701416a4..946168dce90f 100644 --- a/mysys/mf_iocache2.c +++ b/mysys/mf_iocache2.c @@ -1,4 +1,6 @@ /* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2018, Percona and/or its affiliates. All rights reserved. + Copyright (c) 2010, 2017, MariaDB 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 @@ -236,6 +238,13 @@ size_t my_b_fill(IO_CACHE *info) return length; } +int my_b_pread(IO_CACHE *info, uchar *Buffer, size_t Count, my_off_t pos) +{ + if (mysql_file_pread(info->file, Buffer, Count, pos, + info->myflags | MY_NABP)) + return info->error= -1; + return 0; +} /* Read a string ended by '\n' into a buffer of 'max_length' size. @@ -460,7 +469,7 @@ size_t my_b_vprintf(IO_CACHE *info, const char* fmt, va_list args) memset(buffz, '0', minimum_width - length2); else memset(buffz, ' ', minimum_width - length2); - if (my_b_write(info, buffz, minimum_width - length2)) + if (my_b_write(info, (uchar*)buffz, minimum_width - length2)) { goto err; } diff --git a/sql/binlog.cc b/sql/binlog.cc index c1ed67f5f52a..f368d4589560 100644 --- a/sql/binlog.cc +++ b/sql/binlog.cc @@ -491,7 +491,11 @@ class binlog_cache_data my_off_t oldpos= get_byte_position(); if (use_reinit) - reinit_io_cache(&cache_log, WRITE_CACHE, pos, 0, 0); + { + MY_ATTRIBUTE((unused)) int reinit_res= + reinit_io_cache(&cache_log, WRITE_CACHE, pos, 0, 0); + DBUG_ASSERT(reinit_res == 0); + } else my_b_seek(&cache_log, pos); @@ -602,7 +606,9 @@ class binlog_cache_data { DBUG_PRINT("info", ("truncating to position %lu", (ulong) pos)); remove_pending_event(); - reinit_io_cache(&cache_log, WRITE_CACHE, pos, 0, 0); + MY_ATTRIBUTE((unused)) int reinit_res= + reinit_io_cache(&cache_log, WRITE_CACHE, pos, 0, 0); + DBUG_ASSERT(reinit_res == 0); cache_log.end_of_file= saved_max_binlog_cache_size; } diff --git a/sql/filesort.cc b/sql/filesort.cc index 3c5b6fcf63a8..1613cbbb4133 100644 --- a/sql/filesort.cc +++ b/sql/filesort.cc @@ -1,5 +1,7 @@ /* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2018, Percona and/or its affiliates. All rights reserved. + Copyright (c) 2009, 2015, MariaDB 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 @@ -1160,7 +1162,8 @@ write_keys(Sort_param *param, Filesort_info *fs_info, uint count, DBUG_RETURN(1); /* purecov: inspected */ } - if (my_b_write(chunk_file, &merge_chunk, sizeof(merge_chunk))) + if (my_b_write(chunk_file, reinterpret_cast(&merge_chunk), + sizeof(merge_chunk))) DBUG_RETURN(1); /* purecov: inspected */ DBUG_RETURN(0); @@ -1941,10 +1944,8 @@ uint read_to_buffer(IO_CACHE *fromfile, merge_chunk, static_cast(merge_chunk->file_position()), static_cast(bytes_to_read))); - if (mysql_file_pread(fromfile->file, - merge_chunk->buffer_start(), - bytes_to_read, - merge_chunk->file_position(), MYF_RW)) + if (my_b_pread(fromfile, merge_chunk->buffer_start(), bytes_to_read, + merge_chunk->file_position())) DBUG_RETURN((uint) -1); /* purecov: inspected */ size_t num_bytes_read; diff --git a/sql/log_event.cc b/sql/log_event.cc index 68d133577d11..475bf4397011 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -1,5 +1,7 @@ /* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2018, Percona and/or its affiliates. All rights reserved. + Copyright (c) 2009, 2016, MariaDB 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 @@ -1891,6 +1893,7 @@ void Log_event::print_header(IO_CACHE* file, PRINT_EVENT_INFO* print_event_info, bool is_more MY_ATTRIBUTE((unused))) { + MY_ATTRIBUTE((unused)) int write_res; char llbuff[22]; my_off_t hexdump_from= print_event_info->hexdump_from; DBUG_ENTER("Log_event::print_header"); @@ -1942,7 +1945,8 @@ void Log_event::print_header(IO_CACHE* file, ptr[7], ptr[8], ptr[9], ptr[10], ptr[11], ptr[12], ptr[13], ptr[14], ptr[15], ptr[16], ptr[17], ptr[18]); DBUG_ASSERT(static_cast(bytes_written) < sizeof(emit_buf)); - my_b_write(file, (uchar*) emit_buf, bytes_written); + write_res= my_b_write(file, (uchar*) emit_buf, bytes_written); + DBUG_ASSERT(write_res == 0); ptr += LOG_EVENT_MINIMAL_HEADER_LEN; hexdump_from += LOG_EVENT_MINIMAL_HEADER_LEN; } @@ -1972,7 +1976,8 @@ void Log_event::print_header(IO_CACHE* file, (unsigned long) (hexdump_from + (i & 0xfffffff0)), hex_string, char_string); DBUG_ASSERT(static_cast(bytes_written) < sizeof(emit_buf)); - my_b_write(file, (uchar*) emit_buf, bytes_written); + write_res= my_b_write(file, (uchar*) emit_buf, bytes_written); + DBUG_ASSERT(write_res == 0); hex_string[0]= 0; char_string[0]= 0; c= char_string; @@ -1993,13 +1998,15 @@ void Log_event::print_header(IO_CACHE* file, (unsigned long) (hexdump_from + (i & 0xfffffff0)), hex_string, char_string); DBUG_ASSERT(static_cast(bytes_written) < sizeof(emit_buf)); - my_b_write(file, (uchar*) emit_buf, bytes_written); + write_res= my_b_write(file, (uchar*) emit_buf, bytes_written); + DBUG_ASSERT(write_res == 0); } /* need a # to prefix the rest of printouts for example those of Rows_log_event::print_helper(). */ - my_b_write(file, reinterpret_cast("# "), 2); + write_res= my_b_write(file, reinterpret_cast("# "), 2); + DBUG_ASSERT(write_res == 0); } DBUG_VOID_RETURN; } @@ -2017,17 +2024,22 @@ void Log_event::print_header(IO_CACHE* file, static void my_b_write_quoted(IO_CACHE *file, const uchar *ptr, uint length) { + MY_ATTRIBUTE((unused)) int write_res; const uchar *s; my_b_printf(file, "'"); for (s= ptr; length > 0 ; s++, length--) { if (*s > 0x1F && *s != '\'' && *s != '\\') - my_b_write(file, s, 1); + { + write_res= my_b_write(file, s, 1); + DBUG_ASSERT(write_res == 0); + } else { uchar hex[10]; size_t len= my_snprintf((char*) hex, sizeof(hex), "%s%02x", "\\x", *s); - my_b_write(file, hex, len); + write_res = my_b_write(file, hex, len); + DBUG_ASSERT(write_res == 0); } } my_b_printf(file, "'"); @@ -2048,7 +2060,9 @@ my_b_write_bit(IO_CACHE *file, const uchar *ptr, uint nbits) for (bitnum= skip_bits ; bitnum < nbits8; bitnum++) { int is_set= (ptr[(bitnum) / 8] >> (7 - bitnum % 8)) & 0x01; - my_b_write(file, (const uchar*) (is_set ? "1" : "0"), 1); + MY_ATTRIBUTE((unused)) int write_res= + my_b_write(file, (const uchar*) (is_set ? "1" : "0"), 1); + DBUG_ASSERT(write_res == 0); } my_b_printf(file, "'"); } @@ -2276,7 +2290,8 @@ log_event_print_value(IO_CACHE *file, const uchar *ptr, struct timeval tm; my_timestamp_from_binary(&tm, ptr, meta); int buflen= my_timeval_to_str(&tm, buf, meta); - my_b_write(file, buf, buflen); + if (my_b_write(file, reinterpret_cast(buf), buflen)) + return 0; return my_timestamp_binary_length(meta); } @@ -4358,7 +4373,9 @@ void Query_log_event::print_query_header(IO_CACHE* file, end= my_stpcpy(end, print_event_info->delimiter); *end++='\n'; DBUG_ASSERT(end < buff + sizeof(buff)); - my_b_write(file, (uchar*) buff, (uint) (end-buff)); + MY_ATTRIBUTE((unused)) int write_res= + my_b_write(file, (uchar*) buff, (uint) (end-buff)); + DBUG_ASSERT(write_res == 0); if ((!print_event_info->thread_id_printed || ((common_header->flags & LOG_EVENT_THREAD_SPECIFIC_F) && thread_id != print_event_info->thread_id))) @@ -4507,7 +4524,9 @@ void Query_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info) DBUG_EXECUTE_IF ("simulate_file_write_error", {head->write_pos= head->write_end- 500;}); print_query_header(head, print_event_info); - my_b_write(head, (uchar*) query, q_len); + MY_ATTRIBUTE((unused)) int write_res= + my_b_write(head, (uchar*)query, q_len); + DBUG_ASSERT(write_res == 0); my_b_printf(head, "\n%s\n", print_event_info->delimiter); } #endif /* MYSQL_CLIENT */ @@ -6691,7 +6710,11 @@ void Rotate_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info) print_header(head, print_event_info, FALSE); my_b_printf(head, "\tRotate to "); if (new_log_ident) - my_b_write(head, (uchar*) new_log_ident, (uint)ident_len); + { + MY_ATTRIBUTE((unused)) int write_res= + my_b_write(head, (uchar*) new_log_ident, (uint)ident_len); + DBUG_ASSERT(write_res == 0); + } my_b_printf(head, " pos: %s\n", llstr(pos, buf)); } #endif /* MYSQL_CLIENT */ @@ -7939,7 +7962,9 @@ void User_var_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info) quoted_len= my_strmov_quoted_identifier((char *) quoted_id, (const char *) name_id); quoted_id[quoted_len]= '\0'; - my_b_write(head, (uchar*) quoted_id, quoted_len); + MY_ATTRIBUTE((unused)) int write_res= + my_b_write(head, (uchar*) quoted_id, quoted_len); + DBUG_ASSERT(write_res == 0); if (is_null) { @@ -9146,6 +9171,7 @@ void Execute_load_query_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info, const char *local_fname) { + MY_ATTRIBUTE((unused)) int write_res; IO_CACHE *const head= &print_event_info->head_cache; print_query_header(head, print_event_info); @@ -9159,19 +9185,22 @@ void Execute_load_query_log_event::print(FILE* file, if (local_fname) { - my_b_write(head, (uchar*) query, fn_pos_start); + write_res= my_b_write(head, (uchar*) query, fn_pos_start); + DBUG_ASSERT(write_res == 0); my_b_printf(head, " LOCAL INFILE "); pretty_print_str(head, local_fname, strlen(local_fname)); if (dup_handling == binary_log::LOAD_DUP_REPLACE) my_b_printf(head, " REPLACE"); my_b_printf(head, " INTO"); - my_b_write(head, (uchar*) query + fn_pos_end, q_len-fn_pos_end); + write_res= my_b_write(head, (uchar*) query + fn_pos_end, q_len-fn_pos_end); + DBUG_ASSERT(write_res == 0); my_b_printf(head, "\n%s\n", print_event_info->delimiter); } else { - my_b_write(head, (uchar*) query, q_len); + write_res= my_b_write(head, (uchar*) query, q_len); + DBUG_ASSERT(write_res == 0); my_b_printf(head, "\n%s\n", print_event_info->delimiter); } diff --git a/sql/records.cc b/sql/records.cc index 7bfef97be88c..196743fd745c 100644 --- a/sql/records.cc +++ b/sql/records.cc @@ -245,7 +245,8 @@ bool init_read_record(READ_RECORD *info,THD *thd, } info->io_cache=tempfile; - reinit_io_cache(info->io_cache,READ_CACHE,0L,0,0); + if (reinit_io_cache(info->io_cache, READ_CACHE, 0L, 0, 0)) + goto err; info->ref_pos=table->file->ref; if (!table->file->inited && (error= table->file->ha_rnd_init(0))) diff --git a/sql/rpl_info_file.cc b/sql/rpl_info_file.cc index 07ff7a1566ad..46c1a87a4680 100644 --- a/sql/rpl_info_file.cc +++ b/sql/rpl_info_file.cc @@ -109,7 +109,14 @@ file '%s')", info_fname); else if (ret_check == REPOSITORY_EXISTS) { if (info_fd >= 0) - reinit_io_cache(&info_file, READ_CACHE, 0L,0,0); + { + if (reinit_io_cache(&info_file, READ_CACHE, 0L, 0, 0)) + { + sql_print_error("Failed to recreate a cache on info file (\ +file '%s')", info_fname); + error= 1; + } + } else { if ((info_fd = my_open(info_fname, O_RDWR|O_BINARY, MYF(MY_WME))) < 0 ) @@ -125,12 +132,12 @@ file '%s', errno %d)", info_fname, my_errno()); file '%s')", info_fname); error= 1; } - if (error) - { - if (info_fd >= 0) - my_close(info_fd, MYF(0)); - info_fd= -1; - } + } + if (error) + { + if (info_fd >= 0) + my_close(info_fd, MYF(0)); + info_fd= -1; } } else diff --git a/sql/rpl_master.cc b/sql/rpl_master.cc index 030db49d2ca4..c71ce8bb1ffc 100644 --- a/sql/rpl_master.cc +++ b/sql/rpl_master.cc @@ -723,7 +723,8 @@ bool show_binlogs(THD* thd) cur_dir_len= dirname_length(cur.log_file_name); - reinit_io_cache(index_file, READ_CACHE, (my_off_t) 0, 0, 0); + if (reinit_io_cache(index_file, READ_CACHE, (my_off_t)0, 0, 0)) + goto err; /* The file ends with EOF or empty line */ while ((length=my_b_gets(index_file, fname, sizeof(fname))) > 1) diff --git a/sql/uniques.cc b/sql/uniques.cc index 5cff3deb6cdc..a9a620dd34bf 100644 --- a/sql/uniques.cc +++ b/sql/uniques.cc @@ -1,4 +1,6 @@ /* Copyright (c) 2001, 2016, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2018, Percona and/or its affiliates. All rights reserved. + Copyright (c) 2010, 2015, MariaDB 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 @@ -391,7 +393,9 @@ Unique::reset() if (elements) { file_ptrs.clear(); - reinit_io_cache(&file, WRITE_CACHE, 0L, 0, 1); + MY_ATTRIBUTE((unused)) int reinit_res= + reinit_io_cache(&file, WRITE_CACHE, 0L, 0, 1); + DBUG_ASSERT(reinit_res == 0); } elements= 0; } @@ -680,7 +684,6 @@ bool Unique::get(TABLE *table) open_cached_file(outfile,mysql_tmpdir,TEMP_PREFIX,READ_RECORD_BUFFER, MYF(MY_WME)))) return 1; - reinit_io_cache(outfile,WRITE_CACHE,0L,0,0); Sort_param sort_param; sort_param.max_rows= elements; diff --git a/storage/myisam/mi_cache.c b/storage/myisam/mi_cache.c index 3bee18accc6b..a111797b2ee9 100644 --- a/storage/myisam/mi_cache.c +++ b/storage/myisam/mi_cache.c @@ -1,4 +1,6 @@ /* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2018, Percona and/or its affiliates. All rights reserved. + Copyright (c) 2009, 2016, MariaDB 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 @@ -81,7 +83,7 @@ int _mi_read_cache(IO_CACHE *info, uchar *buff, my_off_t pos, uint length, } else info->read_pos=info->read_end; /* All block used */ - if (!(*info->read_function)(info,buff,length)) + if (!_my_b_read(info, buff, length)) DBUG_RETURN(0); read_length=info->error; } diff --git a/storage/myisam/mi_check.c b/storage/myisam/mi_check.c index 444fdfc11e6f..a9f48e9a0f54 100644 --- a/storage/myisam/mi_check.c +++ b/storage/myisam/mi_check.c @@ -1,5 +1,7 @@ /* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2018, Percona and/or its affiliates. All rights reserved. + Copyright (c) 2009, 2016, MariaDB 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 @@ -1561,11 +1563,6 @@ int mi_repair(MI_CHECK *param, MI_INFO *info, memset(&info->rec_cache, 0, sizeof(info->rec_cache)); goto err; } - if (!rep_quick) - if (init_io_cache(&info->rec_cache,-1,(uint) param->write_buffer_length, - WRITE_CACHE, new_header_length, 1, - MYF(MY_WME | MY_WAIT_IF_FULL))) - goto err; info->opt_flag|=WRITE_CACHE_USED; if (!mi_alloc_rec_buff(info, -1, &sort_param.record) || !mi_alloc_rec_buff(info, -1, &sort_param.rec_buff)) @@ -1593,12 +1590,16 @@ int mi_repair(MI_CHECK *param, MI_INFO *info, "datafile-header")) goto err; info->s->state.dellink= HA_OFFSET_ERROR; - info->rec_cache.file=new_file; if (param->testflag & T_UNPACK) { share->options&= ~HA_OPTION_COMPRESS_RECORD; mi_int2store(share->state.header.options,share->options); } + if (init_io_cache(&info->rec_cache, new_file, + (uint)param->write_buffer_length, + WRITE_CACHE, new_header_length, 1, + MYF(MY_WME | MY_WAIT_IF_FULL))) + goto err; } sort_info.info=info; sort_info.param = param; @@ -2268,21 +2269,18 @@ int mi_repair_by_sort(MI_CHECK *param, MI_INFO *info, memset(&sort_info, 0, sizeof(sort_info)); memset(&sort_param, 0, sizeof(sort_param)); if (!(sort_info.key_block= - alloc_key_blocks(param, - (uint) param->sort_key_blocks, - share->base.max_key_block_length)) - || init_io_cache(¶m->read_cache,info->dfile, - (uint) param->read_buffer_length, - READ_CACHE,share->pack.header_length,1,MYF(MY_WME)) || - (! rep_quick && - init_io_cache(&info->rec_cache,info->dfile, - (uint) param->write_buffer_length, - WRITE_CACHE,new_header_length,1, - MYF(MY_WME | MY_WAIT_IF_FULL) & param->myf_rw))) + alloc_key_blocks(param, + (uint) param->sort_key_blocks, + share->base.max_key_block_length))) + goto err; + + if (init_io_cache(¶m->read_cache, info->dfile, + (uint)param->read_buffer_length, + READ_CACHE, share->pack.header_length, 1, MYF(MY_WME))) goto err; + sort_info.key_block_end=sort_info.key_block+param->sort_key_blocks; info->opt_flag|=WRITE_CACHE_USED; - info->rec_cache.file=info->dfile; /* for sort_delete_record */ if (!mi_alloc_rec_buff(info, -1, &sort_param.record) || !mi_alloc_rec_buff(info, -1, &sort_param.rec_buff)) @@ -2314,7 +2312,11 @@ int mi_repair_by_sort(MI_CHECK *param, MI_INFO *info, mi_int2store(share->state.header.options,share->options); } share->state.dellink= HA_OFFSET_ERROR; - info->rec_cache.file=new_file; + if (init_io_cache(&info->rec_cache, new_file, + (uint)param->write_buffer_length, + WRITE_CACHE, new_header_length, 1, + MYF((param->myf_rw & MY_WAIT_IF_FULL) | MY_WME))) + goto err; } info->update= (short) (HA_STATE_CHANGED | HA_STATE_ROW_CHANGED); @@ -2496,8 +2498,9 @@ int mi_repair_by_sort(MI_CHECK *param, MI_INFO *info, info->state->data_file_length=sort_param.max_pos; param->read_cache.file=info->dfile; /* re-init read cache */ - reinit_io_cache(¶m->read_cache,READ_CACHE,share->pack.header_length, - 1,1); + if (reinit_io_cache(¶m->read_cache, READ_CACHE, + share->pack.header_length, 1, 1)) + goto err; } if (param->testflag & T_WRITE_LOOP) @@ -2725,24 +2728,17 @@ int mi_repair_parallel(MI_CHECK *param, MI_INFO *info, param->need_print_msg_lock= 1; if (!(sort_info.key_block= - alloc_key_blocks(param, (uint) param->sort_key_blocks, - share->base.max_key_block_length)) || - init_io_cache(¶m->read_cache, info->dfile, - (uint) param->read_buffer_length, - READ_CACHE, share->pack.header_length, 1, MYF(MY_WME)) || - (!rep_quick && - (init_io_cache(&info->rec_cache, info->dfile, - (uint) param->write_buffer_length, - WRITE_CACHE, new_header_length, 1, - MYF(MY_WME | MY_WAIT_IF_FULL) & param->myf_rw) || - init_io_cache(&new_data_cache, -1, - (uint) param->write_buffer_length, - READ_CACHE, new_header_length, 1, - MYF(MY_WME | MY_DONT_CHECK_FILESIZE))))) + alloc_key_blocks(param, (uint) param->sort_key_blocks, + share->base.max_key_block_length))) + goto err; + + if (init_io_cache(¶m->read_cache, info->dfile, + (uint)param->read_buffer_length, + READ_CACHE, share->pack.header_length, 1, MYF(MY_WME))) goto err; + sort_info.key_block_end=sort_info.key_block+param->sort_key_blocks; info->opt_flag|=WRITE_CACHE_USED; - info->rec_cache.file=info->dfile; /* for sort_delete_record */ if (!rep_quick) { @@ -2768,7 +2764,18 @@ int mi_repair_parallel(MI_CHECK *param, MI_INFO *info, mi_int2store(share->state.header.options,share->options); } share->state.dellink= HA_OFFSET_ERROR; - info->rec_cache.file=new_file; + + if (init_io_cache(&info->rec_cache, new_file, + (uint)param->write_buffer_length, + WRITE_CACHE, new_header_length, 1, + MYF(MY_WME | MY_WAIT_IF_FULL) & param->myf_rw)) + goto err; + + if (init_io_cache(&new_data_cache, -1, + (uint)param->write_buffer_length, + READ_CACHE, new_header_length, 1, + MYF(MY_WME | MY_DONT_CHECK_FILESIZE))) + goto err; } info->update= (short) (HA_STATE_CHANGED | HA_STATE_ROW_CHANGED); diff --git a/storage/myisam/mi_extra.c b/storage/myisam/mi_extra.c index 591a173a9215..50e82a6cb57b 100644 --- a/storage/myisam/mi_extra.c +++ b/storage/myisam/mi_extra.c @@ -53,10 +53,10 @@ int mi_extra(MI_INFO *info, enum ha_extra_function function, void *extra_arg) /* Next/prev gives first/last */ if (info->opt_flag & READ_CACHE_USED) { - reinit_io_cache(&info->rec_cache,READ_CACHE,0, - (pbool) (info->lock_type != F_UNLCK), - (pbool) MY_TEST(info->update & HA_STATE_ROW_CHANGED) - ); + if ((error= reinit_io_cache(&info->rec_cache,READ_CACHE, 0, + (info->lock_type != F_UNLCK), + MY_TEST(info->update & HA_STATE_ROW_CHANGED)))) + break; } info->update= ((info->update & HA_STATE_CHANGED) | HA_STATE_NEXT_FOUND | HA_STATE_PREV_FOUND); @@ -114,9 +114,10 @@ int mi_extra(MI_INFO *info, enum ha_extra_function function, void *extra_arg) case HA_EXTRA_REINIT_CACHE: if (info->opt_flag & READ_CACHE_USED) { - reinit_io_cache(&info->rec_cache,READ_CACHE,info->nextpos, - (pbool) (info->lock_type != F_UNLCK), - (pbool) MY_TEST(info->update & HA_STATE_ROW_CHANGED)); + if ((error= reinit_io_cache(&info->rec_cache, READ_CACHE, + info->nextpos, (info->lock_type != F_UNLCK), + MY_TEST(info->update & HA_STATE_ROW_CHANGED)))) + break; info->update&= ~HA_STATE_ROW_CHANGED; if (share->concurrent_insert) info->rec_cache.end_of_file=info->state->data_file_length; diff --git a/storage/myisam/mi_panic.c b/storage/myisam/mi_panic.c index ab316f2db4be..dfcdeb495ab4 100644 --- a/storage/myisam/mi_panic.c +++ b/storage/myisam/mi_panic.c @@ -53,8 +53,9 @@ int mi_panic(enum ha_panic_function flag) { if (flush_io_cache(&info->rec_cache)) error=my_errno(); - reinit_io_cache(&info->rec_cache,READ_CACHE,0, - (pbool) (info->lock_type != F_UNLCK),1); + if (reinit_io_cache(&info->rec_cache, READ_CACHE, 0, + (info->lock_type != F_UNLCK), 1)) + error= my_errno(); } if (info->lock_type != F_UNLCK && ! info->was_locked) { diff --git a/storage/myisam/myisamchk.c b/storage/myisam/myisamchk.c index 57e238c8873c..da5cfadb3a38 100644 --- a/storage/myisam/myisamchk.c +++ b/storage/myisam/myisamchk.c @@ -1098,17 +1098,19 @@ static int myisamchk(MI_CHECK *param, char * filename) if ((!rep_quick && !error) || !(param->testflag & (T_FAST | T_FORCE_CREATE))) { + MY_ATTRIBUTE((unused)) int init_res; if (param->testflag & (T_EXTEND | T_MEDIUM)) (void) init_key_cache(dflt_key_cache,opt_key_cache_block_size, (size_t)param->use_buffers, 0, 0); - (void) init_io_cache(¶m->read_cache,datafile, - (uint) param->read_buffer_length, - READ_CACHE, - (param->start_check_pos ? - param->start_check_pos : - share->pack.header_length), - 1, - MYF(MY_WME)); + init_res= init_io_cache(¶m->read_cache, datafile, + (uint) param->read_buffer_length, + READ_CACHE, + (param->start_check_pos ? + param->start_check_pos : + share->pack.header_length), + 1, + MYF(MY_WME)); + DBUG_ASSERT(init_res == 0); lock_memory(param); if ((info->s->options & (HA_OPTION_PACK_RECORD | HA_OPTION_COMPRESS_RECORD)) || diff --git a/storage/myisam/myisamlog.c b/storage/myisam/myisamlog.c index 0e1ee263bfde..ea721d35b24c 100644 --- a/storage/myisam/myisamlog.c +++ b/storage/myisam/myisamlog.c @@ -338,7 +338,13 @@ static int examine_log(char * file_name, char **table_names) } } - init_io_cache(&cache,file,0,READ_CACHE,start_offset,0,MYF(0)); + if (init_io_cache(&cache, file, 0, READ_CACHE, start_offset, 0, MYF(0))) + { + if (write_file != NULL) + my_fclose(write_file, MYF(MY_WME)); + my_close(file, MYF(0)); + DBUG_RETURN(1); + } memset(com_count, 0, sizeof(com_count)); init_tree(&tree,0,0,sizeof(file_info),(qsort_cmp2) file_info_compare,1, file_info_free, NULL); diff --git a/storage/myisam/sort.cc b/storage/myisam/sort.cc index 8c19313e5141..7152970d7afc 100644 --- a/storage/myisam/sort.cc +++ b/storage/myisam/sort.cc @@ -1,4 +1,6 @@ /* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2018, Percona and/or its affiliates. All rights reserved. + Copyright (c) 2009, 2016, MariaDB 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 @@ -801,8 +803,10 @@ static int merge_many_buff(MI_SORT_PARAM *info, uint keys, from_file= t_file ; to_file= &t_file2; while (*maxbuffer >= MERGEBUFF2) { - reinit_io_cache(from_file,READ_CACHE,0L,0,0); - reinit_io_cache(to_file,WRITE_CACHE,0L,0,0); + if (reinit_io_cache(from_file, READ_CACHE, 0L, 0, 0)) + goto cleanup; + if (reinit_io_cache(to_file, WRITE_CACHE, 0L, 0, 0)) + goto cleanup; lastbuff=buffpek; for (i=0 ; i <= *maxbuffer-MERGEBUFF*3/2 ; i+=MERGEBUFF) { @@ -853,9 +857,8 @@ static uint read_to_buffer(IO_CACHE *fromfile, BUFFPEK *buffpek, if ((count=(uint) MY_MIN((ha_rows) buffpek->max_keys,buffpek->count))) { - if (mysql_file_pread(fromfile->file, (uchar*) buffpek->base, - (length= sort_length*count), - buffpek->file_pos, MYF_RW)) + if (my_b_pread(fromfile, buffpek->base, + (length= sort_length * count), buffpek->file_pos)) return((uint) -1); /* purecov: inspected */ buffpek->key=buffpek->base; buffpek->file_pos+= length; /* New filepos */ @@ -879,12 +882,12 @@ static uint read_to_buffer_varlen(IO_CACHE *fromfile, BUFFPEK *buffpek, for (idx=1;idx<=count;idx++) { - if (mysql_file_pread(fromfile->file, (uchar*)&length_of_key, - sizeof(length_of_key), buffpek->file_pos, MYF_RW)) + if (my_b_pread(fromfile, (uchar*)&length_of_key, + sizeof(length_of_key), buffpek->file_pos)) return((uint) -1); buffpek->file_pos+=sizeof(length_of_key); - if (mysql_file_pread(fromfile->file, (uchar*) buffp, - length_of_key, buffpek->file_pos, MYF_RW)) + if (my_b_pread(fromfile, buffp, length_of_key, + buffpek->file_pos)) return((uint) -1); buffpek->file_pos+=length_of_key; buffp = buffp + sort_length; diff --git a/unittest/gunit/mysys_my_b_vprintf-t.cc b/unittest/gunit/mysys_my_b_vprintf-t.cc index 10a3dc9bc20e..57a0d7020544 100644 --- a/unittest/gunit/mysys_my_b_vprintf-t.cc +++ b/unittest/gunit/mysys_my_b_vprintf-t.cc @@ -26,7 +26,8 @@ void test1(const char *res, const char *fmt, ...) IO_CACHE info; va_list args; size_t len; - init_io_cache(&info, -1, 0, WRITE_CACHE, 0 , 1 , MYF(0)); + int init_res= init_io_cache(&info, -1, 0, WRITE_CACHE, 0 , 1 , MYF(0)); + EXPECT_EQ(init_res, 0); memset(info.write_buffer, 0, 64); /* RECORD_CACHE_SIZE is 64K */ va_start(args, fmt); len= my_b_vprintf(&info, fmt, args); From b6ac18c6cf10c277ec9c2bbafb1d7ac5ed9c56de Mon Sep 17 00:00:00 2001 From: Jaideep Karande Date: Fri, 18 May 2018 15:57:56 +0200 Subject: [PATCH 0851/1221] Bug#27991334: GR 5.7.22 NOT COMPATIBLE WITH EARLIER VERSIONS DUE TO LOWER_CASE_TABLE_NAMES Problem: Upgrading a cluster from 5.7.21 to 5.7.22 by upgrading node by node is not possible When MySQL V5.7.22 or MySQL V8.0.11 tries to join a GROUP with MySQL V5.7.21 or lower it fails to join the group. Reason being MySQL V5.7.21 does not send its value of lower_case_table_names. So latest version compare its lower_case_table_names with garbage value and exit the group. Resolution: If server does not send its value of lower_case_table_names, skip the comparison. --- .../group_replication/include/member_info.h | 10 ++++ .../src/gcs_event_handlers.cc | 4 +- .../group_replication/src/member_info.cc | 6 +- rapid/plugin/group_replication/src/plugin.cc | 7 +++ ...gr_skip_send_lower_case_table_names.result | 29 ++++++++++ .../gr_skip_send_lower_case_table_names.test | 58 +++++++++++++++++++ 6 files changed, 112 insertions(+), 2 deletions(-) create mode 100644 rapid/plugin/group_replication/tests/mtr/r/gr_skip_send_lower_case_table_names.result create mode 100644 rapid/plugin/group_replication/tests/mtr/t/gr_skip_send_lower_case_table_names.test diff --git a/rapid/plugin/group_replication/include/member_info.h b/rapid/plugin/group_replication/include/member_info.h index e4d5a4f0b4a9..1113fa877d0e 100644 --- a/rapid/plugin/group_replication/include/member_info.h +++ b/rapid/plugin/group_replication/include/member_info.h @@ -49,6 +49,16 @@ */ #define CNF_SINGLE_PRIMARY_MODE_F 0x2 +/* + Valid values of lower_case_table_names are 0 - 2. + So when member has DEFAULT_NOT_RECEIVED value, it means its + lower_case_table_names value is not known. +*/ +#define DEFAULT_NOT_RECEIVED_LOWER_CASE_TABLE_NAMES 65540 +#ifndef DBUG_OFF +#define SKIP_ENCODING_LOWER_CASE_TABLE_NAMES 65541 +#endif + /* @class Group_member_info diff --git a/rapid/plugin/group_replication/src/gcs_event_handlers.cc b/rapid/plugin/group_replication/src/gcs_event_handlers.cc index 02932da10d28..7281c89cea24 100644 --- a/rapid/plugin/group_replication/src/gcs_event_handlers.cc +++ b/rapid/plugin/group_replication/src/gcs_event_handlers.cc @@ -1684,7 +1684,9 @@ Plugin_gcs_events_handler::compare_member_option_compatibility() const goto cleaning; } - if (local_member_info->get_lower_case_table_names() != + if ((*all_members_it)->get_lower_case_table_names() != + DEFAULT_NOT_RECEIVED_LOWER_CASE_TABLE_NAMES && + local_member_info->get_lower_case_table_names() != (*all_members_it)->get_lower_case_table_names()) { result= 1; diff --git a/rapid/plugin/group_replication/src/member_info.cc b/rapid/plugin/group_replication/src/member_info.cc index 439e3814fa7a..36538c55b9a5 100644 --- a/rapid/plugin/group_replication/src/member_info.cc +++ b/rapid/plugin/group_replication/src/member_info.cc @@ -83,7 +83,8 @@ Group_member_info::Group_member_info(Group_member_info& other) Group_member_info::Group_member_info(const uchar* data, uint64 len) : Plugin_gcs_message(CT_MEMBER_INFO_MESSAGE), gcs_member_id(NULL), member_version(NULL), - unreachable(false) + unreachable(false), + lower_case_table_names(DEFAULT_NOT_RECEIVED_LOWER_CASE_TABLE_NAMES) { decode(data, len); } @@ -158,6 +159,9 @@ Group_member_info::encode_payload(std::vector* buffer) const member_weight_aux); uint16 lower_case_table_names_aux= static_cast (lower_case_table_names); +#ifndef DBUG_OFF + if (lower_case_table_names != SKIP_ENCODING_LOWER_CASE_TABLE_NAMES) +#endif encode_payload_item_int2(buffer, PIT_LOWER_CASE_TABLE_NAME, lower_case_table_names_aux); diff --git a/rapid/plugin/group_replication/src/plugin.cc b/rapid/plugin/group_replication/src/plugin.cc index ce1240b270b6..637162f032ea 100644 --- a/rapid/plugin/group_replication/src/plugin.cc +++ b/rapid/plugin/group_replication/src/plugin.cc @@ -1656,6 +1656,13 @@ static int check_if_server_properly_configured() gr_lower_case_table_names= startup_pre_reqs.lower_case_table_names; DBUG_ASSERT (gr_lower_case_table_names <= 2); +#ifndef DBUG_OFF + DBUG_EXECUTE_IF("group_replication_skip_encode_lower_case_table_names", + { + gr_lower_case_table_names = SKIP_ENCODING_LOWER_CASE_TABLE_NAMES; + }); +#endif + DBUG_RETURN(0); } diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_skip_send_lower_case_table_names.result b/rapid/plugin/group_replication/tests/mtr/r/gr_skip_send_lower_case_table_names.result new file mode 100644 index 000000000000..f65b491ab710 --- /dev/null +++ b/rapid/plugin/group_replication/tests/mtr/r/gr_skip_send_lower_case_table_names.result @@ -0,0 +1,29 @@ +include/group_replication.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection server1] + +## 1. Set debug flag so server1 does not send its value of +## lower_case_table_names and bootstrap group. + +[connection server1] +SET @debug_save= @@GLOBAL.DEBUG; +SET @@GLOBAL.DEBUG='+d,group_replication_skip_encode_lower_case_table_names'; +include/start_and_bootstrap_group_replication.inc + +## 2. Start server2. + +[connection server2] +include/start_group_replication.inc + +## 3. Verify server2 joins the group. + +include/assert.inc [Assert 2 servers are ONLINE] +[connection server1] +include/assert.inc [Assert 2 servers are ONLINE] + +## 4. Cleanup. + +SET @@GLOBAL.DEBUG= @debug_save; +include/group_replication_end.inc diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_skip_send_lower_case_table_names.test b/rapid/plugin/group_replication/tests/mtr/t/gr_skip_send_lower_case_table_names.test new file mode 100644 index 000000000000..f84cb4157f2c --- /dev/null +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_skip_send_lower_case_table_names.test @@ -0,0 +1,58 @@ +################################################################################ +## This test proves that group replication allows member to join the group if +## it does not send its lower_case_table_names value. This is required so +## members with higher version can join groups which has member of lower +## version. +## +## Test: +## 0. This test requires 2 members. +## 1. Set debug flag so server1 does not send its value of +## lower_case_table_names and bootstrap group. +## 2. Start server2. +## 3. Verify server2 joins the group. +## 4. Cleanup. +################################################################################ + +--source include/have_debug.inc +--source ../inc/have_group_replication_plugin.inc +--let $rpl_skip_group_replication_start= 1 +--source ../inc/group_replication.inc + +--echo +--echo ## 1. Set debug flag so server1 does not send its value of +--echo ## lower_case_table_names and bootstrap group. +--echo +--let $rpl_connection_name= server1 +--source include/rpl_connection.inc + +SET @debug_save= @@GLOBAL.DEBUG; +SET @@GLOBAL.DEBUG='+d,group_replication_skip_encode_lower_case_table_names'; + +--source ../inc/start_and_bootstrap_group_replication.inc + +--echo +--echo ## 2. Start server2. +--echo +--let $rpl_connection_name= server2 +--source include/rpl_connection.inc + +--source include/start_group_replication.inc + +--echo +--echo ## 3. Verify server2 joins the group. +--echo +--let $assert_text= Assert 2 servers are ONLINE +--let $assert_cond= "[SELECT COUNT(*) from performance_schema.replication_group_members WHERE MEMBER_STATE=\"ONLINE\"]" = 2 +--source include/assert.inc + +--let $rpl_connection_name= server1 +--source include/rpl_connection.inc +--let $assert_text= Assert 2 servers are ONLINE +--let $assert_cond= "[SELECT COUNT(*) from performance_schema.replication_group_members WHERE MEMBER_STATE=\"ONLINE\"]" = 2 +--source include/assert.inc + +--echo +--echo ## 4. Cleanup. +--echo +SET @@GLOBAL.DEBUG= @debug_save; +--source ../inc/group_replication_end.inc From 10e496f080053d31d97aa2d367237d38a42a0c50 Mon Sep 17 00:00:00 2001 From: Yura Sorokin Date: Fri, 18 May 2018 18:29:15 +0300 Subject: [PATCH 0852/1221] Fixed PS-4499 (innodb.temp_table_encrypt_keyring_file MTR test case fails after 5.7.22 upstream merge) https://jira.percona.com/browse/PS-4499 Re-recorded 'innodb.temp_table_encrypt_keyring_file' MTR test case because the fix for PS-3958 "handle_fatal_signal (sig=11) in subselect_hash_sj_engine::cleanup" (https://jira.percona.com/browse/PS-3958) (commit 997b42a) was merged after a branch for 5.7.22 upstream merge was created. Upstream merge included the fix for Bug #22980871 "UNCLEAR ERROR MESSAGE WHILE USING ENCRYPTION IF THERE IS A PERMISSION ISSUE" (commit mysql/mysql-server@cb4b980) which changed the error message. --- .../suite/innodb/r/temp_table_encrypt_keyring_file.result | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mysql-test/suite/innodb/r/temp_table_encrypt_keyring_file.result b/mysql-test/suite/innodb/r/temp_table_encrypt_keyring_file.result index fe5fc26a57e8..e182ee2d0141 100644 --- a/mysql-test/suite/innodb/r/temp_table_encrypt_keyring_file.result +++ b/mysql-test/suite/innodb/r/temp_table_encrypt_keyring_file.result @@ -62,4 +62,4 @@ INSERT INTO t1 VALUES (11061); INSERT INTO t1 VALUES (3); SET big_tables=1; SELECT * FROM t1 WHERE a IN(SELECT MAX(a) FROM t1); -ERROR HY000: Can't find master key from keyring, please check keyring plugin is loaded. +ERROR HY000: Can't find master key from keyring, please check in the server log if a keyring plugin is loaded and initialized successfully. From 40ad0c230c1974217af8c39fdaf2e3497d980ee1 Mon Sep 17 00:00:00 2001 From: Dmitriy Kostiuk Date: Fri, 18 May 2018 20:25:33 +0300 Subject: [PATCH 0853/1221] Release notes for PS 5.5.60-38.12 (#2383) --- doc/source/conf.py | 2 +- .../Percona-Server-5.5.60-38.12.rst | 63 +++++++++++++++++++ .../release-notes/release-notes_index.rst | 1 + doc/source/upstream-bug-fixes.rst | 24 +++++++ 4 files changed, 89 insertions(+), 1 deletion(-) create mode 100644 doc/source/release-notes/Percona-Server-5.5.60-38.12.rst diff --git a/doc/source/conf.py b/doc/source/conf.py index d6a440eb00a9..6c6b6205cbfc 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -54,7 +54,7 @@ # The short X.Y version. version = '5.5' # The full version, including alpha/beta/rc tags. -release = '5.5.59-38.11' +release = '5.5.60-38.12' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/doc/source/release-notes/Percona-Server-5.5.60-38.12.rst b/doc/source/release-notes/Percona-Server-5.5.60-38.12.rst new file mode 100644 index 000000000000..a38be1aac78f --- /dev/null +++ b/doc/source/release-notes/Percona-Server-5.5.60-38.12.rst @@ -0,0 +1,63 @@ +.. rn:: 5.5.60-38.12 + +============================= +|Percona Server| 5.5.60-38.12 +============================= + +Percona is glad to announce the release of |Percona Server| 5.5.60-38.12 on +May 18th, 2018. Downloads are available `here +`_ +and from the :doc:`Percona Software Repositories `. + +Based on `MySQL 5.5.60 +`_, including +all the bug fixes in it, |Percona Server| 5.5.60-38.12 is now the current +stable release in the 5.5 series. All of |Percona|'s software is open-source +and free. + +Bugs Fixed +========== + +* ``mysqldump`` utility with ``--innodb-optimize-keys`` option was incorrectly + working with foreign keys pointing on the same table, producing invalid SQL + statements. Bugs fixed :psbug:`1125` and :psbug:`3863`. + +* A typo in ``plugin.cmake`` file prevented to compile plugins statically + into the server. Bug fixed :psbug:`3871` (upstream :mysqlbug:`89766`). + +* Using ``-DWITHOUT_=ON`` CMake variable to exclude a plugin from the + build didn't work for some plugins, including a number of storage engines. + Bug fixed :psbug:`3901`. + +* A fix was introduced to remove GCC 8 compilation warnings for the + |Percona Server| build. Bug fixed :psbug:`3950`. + +* A code clean-up was done to fix compilation warnings and errors specific + for clang 6. Bug fixed :psbug:`3893` (upstream :mysqlbug:`90111`). + +* |Percona Server| Debian packages description included reference to + ``/etc/mysql/my.cnf`` file, which is not actually present in these packages. + Bug fixed :psbug:`2046`. + +* A clean-up in |Percona Server| binlog-related code was made to avoid + uninitialized memory comparison. Bug fixed :psbug:`3925` (upstream + :mysqlbug:`90238`). + +* Some ``IO_CACHE`` file operations were not instrumented for Performance + Schema causing inaccurate statistics generated. Bug fixed :psbug:`3937` + (upstream :mysqlbug:`90264`). + +* A ``key_block_size`` value was set automatically by the Improved MEMORY + Storage Engine, which resulted in warnings when changing the engine type to + |InnoDB|, and constantly growing ``key_block_size`` during alter operations. + Bugs fixed :psbug:`3936`, :psbug:`3940`, and :psbug:`3943`. + + +Other bugs fixed: :psbug:`3767` "Fix compilation warnings/errors with clang", +:psbug:`3778` "5.5 Tree received Percona-TokuBackup submodule where it should +not", :psbug:`3794` "MTR test main.percona_show_temp_tables_stress does not +wait for events to start", :psbug:`3798` "MTR test +innodb.percona_extended_innodb_status fails if InnoDB status contains unquoted +special characters", and :psbug:`3926` "Potentially truncated bitmap file name +in log_online_open_bitmap_file_read_only() +(storage/innobase/log/log0online.cc)". diff --git a/doc/source/release-notes/release-notes_index.rst b/doc/source/release-notes/release-notes_index.rst index c79ae7315826..d4b12946b405 100644 --- a/doc/source/release-notes/release-notes_index.rst +++ b/doc/source/release-notes/release-notes_index.rst @@ -6,6 +6,7 @@ :maxdepth: 1 :glob: + Percona-Server-5.5.60-38.12 Percona-Server-5.5.59-38.11 Percona-Server-5.5.58-38.10 Percona-Server-5.5.57-38.9 diff --git a/doc/source/upstream-bug-fixes.rst b/doc/source/upstream-bug-fixes.rst index 57049c576b79..fe9b43fe51e2 100644 --- a/doc/source/upstream-bug-fixes.rst +++ b/doc/source/upstream-bug-fixes.rst @@ -4,6 +4,30 @@ List of upstream |MySQL| bugs fixed in |Percona Server| 5.5 ============================================================= ++-------------------------------------------------------------------------------------------------------------+ +|:Upstream bug: :mysqlbug:`90111` - Incorrect enum comparisons | +|:JIRA bug: :psbug:`3893` | +|:Upstream state: Verified (checked on 2018-05-17) | +|:Fix Released: :rn:`5.5.60-38.12` | +|:Upstream fix: N/A | ++-------------------------------------------------------------------------------------------------------------+ +|:Upstream bug: :mysqlbug:`90264` - Some file operations in mf_iocache2.c are not instrumented | +|:JIRA bug: :psbug:`3937` | +|:Upstream state: Verified (checked on 2018-05-17) | +|:Fix Released: :rn:`5.5.60-38.12` | +|:Upstream fix: N/A | ++-------------------------------------------------------------------------------------------------------------+ +|:Upstream bug: :mysqlbug:`90238` - Comparison of uninitailized memory in log_in_use | +|:JIRA bug: :psbug:`3925` | +|:Upstream state: No Feedback (checked on 2018-05-17) | +|:Fix Released: :rn:`5.5.60-38.12` | +|:Upstream fix: N/A | ++-------------------------------------------------------------------------------------------------------------+ +|:Upstream bug: :mysqlbug:`89776` - a typo in `cmake/plugin.cmake` prevents `MYSQL_SERVER` to be defined... | +|:JIRA bug: :psbug:`3871` | +|:Upstream state: Verified (checked on 2018-05-17) | +|:Fix Released: :rn:`5.5.60-38.12` | +|:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`53588` - Blackhole : Specified key was too long; max key length is 1000 bytes | |:JIRA bug: :psbug:`1126` | From 3f8cd4675cfae898796da6fec21af9de4121ec6a Mon Sep 17 00:00:00 2001 From: Dmitriy Kostiuk Date: Sun, 20 May 2018 01:37:46 +0300 Subject: [PATCH 0854/1221] Release notes for PS 5.5.60-38.12 (#2389) From 5c6ca84e5033473e4ec16711306ad5dc6092db70 Mon Sep 17 00:00:00 2001 From: Dmitriy Kostiuk Date: Sun, 20 May 2018 01:37:58 +0300 Subject: [PATCH 0855/1221] Release notes for PS 5.5.60-38.12 (#2390) --- doc/source/conf.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/source/conf.py b/doc/source/conf.py index d78f309d2d0e..61f70cb7fd0a 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -245,7 +245,7 @@ # (source start file, target name, title, author, documentclass [howto/manual]). latex_documents = [ ('index', 'PerconaServer-5.7.tex', u'Percona Server Documentation', - u'Percona LLC and/or its affiliates 2009-2017', 'manual'), + u'Percona LLC and/or its affiliates 2009-2018', 'manual'), ] # The name of an image file (relative to this directory) to place at the top of @@ -283,7 +283,7 @@ # (source start file, name, description, authors, manual section). man_pages = [ ('index', 'perconaserver57', u'Percona Server 5.7 Documentation', - [u'Percona LLC and/or its affiliates 2009-2017'], 1) + [u'Percona LLC and/or its affiliates 2009-2018'], 1) ] From bd5ca6acece65858591c2bf54f86ff34aeea2821 Mon Sep 17 00:00:00 2001 From: Arun Kuruvila Date: Mon, 21 May 2018 08:42:45 +0530 Subject: [PATCH 0856/1221] Bug#25541037: MYSQL BUG ON DELETE Description:- MyISAM table gets corrupted with concurrent executions of INSERT, DELETE statements in a particular sequence. Analysis:- Due to the inappropriate manipulation of w_lock and r_lock associated with a MyISAM table, there arises a scenario where the table's state information becomes invalid. Fix:- A lock is introduced to resolve this issue. --- storage/myisam/ha_myisam.cc | 6 +++++- storage/myisam/mi_check.c | 6 +++++- storage/myisam/mi_locking.c | 6 +++++- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/storage/myisam/ha_myisam.cc b/storage/myisam/ha_myisam.cc index 21cbef32188e..6eed1be1ba91 100644 --- a/storage/myisam/ha_myisam.cc +++ b/storage/myisam/ha_myisam.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -1172,10 +1172,14 @@ int ha_myisam::repair(THD *thd, MI_CHECK ¶m, bool do_optimize) if (file->s->base.auto_key) update_auto_increment_key(¶m, file, 1); if (optimize_done) + { + mysql_mutex_lock(&share->intern_lock); error = update_state_info(¶m, file, UPDATE_TIME | UPDATE_OPEN_COUNT | (local_testflag & T_STATISTICS ? UPDATE_STAT : 0)); + mysql_mutex_unlock(&share->intern_lock); + } info(HA_STATUS_NO_LOCK | HA_STATUS_TIME | HA_STATUS_VARIABLE | HA_STATUS_CONST); if (rows != file->state->records && ! (param.testflag & T_VERY_SILENT)) diff --git a/storage/myisam/mi_check.c b/storage/myisam/mi_check.c index fe0d4c9c30b4..7134cfc265a8 100644 --- a/storage/myisam/mi_check.c +++ b/storage/myisam/mi_check.c @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -4474,6 +4474,10 @@ int update_state_info(MI_CHECK *param, MI_INFO *info,uint update) int error; uint r_locks=share->r_locks,w_locks=share->w_locks; share->r_locks= share->w_locks= share->tot_locks= 0; + + DBUG_EXECUTE_IF("simulate_incorrect_share_wlock_value", + DEBUG_SYNC_C("after_share_wlock_set_to_0");); + error=_mi_writeinfo(info,WRITEINFO_NO_UNLOCK); share->r_locks=r_locks; share->w_locks=w_locks; diff --git a/storage/myisam/mi_locking.c b/storage/myisam/mi_locking.c index 4a33e838fb93..dcfeaca5b8c7 100644 --- a/storage/myisam/mi_locking.c +++ b/storage/myisam/mi_locking.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -229,6 +229,10 @@ int mi_lock_database(MI_INFO *info, int lock_type) info->invalidator=info->s->invalidator; share->w_locks++; share->tot_locks++; + + DBUG_EXECUTE_IF("simulate_incorrect_share_wlock_value", + DEBUG_SYNC_C("after_share_wlock_increment");); + info->s->in_use= list_add(info->s->in_use, &info->in_use); break; default: From a4fa326ddb1884323fe1a9c83f42489f2049675b Mon Sep 17 00:00:00 2001 From: Ivo Roylev Date: Mon, 21 May 2018 18:35:15 +0300 Subject: [PATCH 0857/1221] Bug#27980823: HEAP OVERFLOW VULNERABILITIES IN MYSQL CLIENT LIBRARY There is an ASSERT on a runtime condition that should be a dynamic check. There is also reported a weakness with buffer length. Currently cannot simulate an attack service there, but beafing up the code anyway. --- sql-common/client.c | 3 ++- sql/rpl_tblmap.h | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/sql-common/client.c b/sql-common/client.c index 53ab5a21d9e4..c81f0f002db8 100644 --- a/sql-common/client.c +++ b/sql-common/client.c @@ -2176,7 +2176,7 @@ unpack_fields(MYSQL *mysql, MYSQL_ROWS *data,MEM_ROOT *alloc,uint fields, for (row=data; row ; row = row->next,field++) { /* fields count may be wrong */ - DBUG_ASSERT((uint) (field - result) < fields); + if (field < result || field - result >= fields) DBUG_RETURN(NULL); if (unpack_field(mysql, alloc, default_value, server_capabilities, row, field)) { @@ -2288,6 +2288,7 @@ MYSQL_DATA *cli_read_rows(MYSQL *mysql,MYSQL_FIELD *mysql_fields, if ((pkt_len= cli_safe_read(mysql, &is_data_packet)) == packet_error) DBUG_RETURN(0); + if (pkt_len == 0) DBUG_RETURN(0); if (!(result=(MYSQL_DATA*) my_malloc(key_memory_MYSQL_DATA, sizeof(MYSQL_DATA), MYF(MY_WME | MY_ZEROFILL)))) diff --git a/sql/rpl_tblmap.h b/sql/rpl_tblmap.h index 9404dd6d3029..0df40d2efbb7 100644 --- a/sql/rpl_tblmap.h +++ b/sql/rpl_tblmap.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2005, 2018, Oracle and/or its affiliates. All rights reserved. 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 From 526d2734a783831a66063af016cc3c38b22f3bbe Mon Sep 17 00:00:00 2001 From: Ivo Roylev Date: Mon, 21 May 2018 22:08:45 +0300 Subject: [PATCH 0858/1221] Bug#27980823: HEAP OVERFLOW VULNERABILITIES IN MYSQL CLIENT LIBRARY There is an ASSERT on a runtime condition that should be a dynamic check. There is also reported a weakness with buffer length. Currently cannot simulate an attack service there, but beafing up the code anyway. --- sql-common/client.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql-common/client.c b/sql-common/client.c index c81f0f002db8..d17a92b6719a 100644 --- a/sql-common/client.c +++ b/sql-common/client.c @@ -2176,7 +2176,7 @@ unpack_fields(MYSQL *mysql, MYSQL_ROWS *data,MEM_ROOT *alloc,uint fields, for (row=data; row ; row = row->next,field++) { /* fields count may be wrong */ - if (field < result || field - result >= fields) DBUG_RETURN(NULL); + if (field < result || uint(field - result) >= fields) DBUG_RETURN(NULL); if (unpack_field(mysql, alloc, default_value, server_capabilities, row, field)) { From 53e0776dc4bb031b46569573069db68ddcc4300e Mon Sep 17 00:00:00 2001 From: Ivo Roylev Date: Mon, 21 May 2018 23:24:02 +0300 Subject: [PATCH 0859/1221] Bug#27980823: HEAP OVERFLOW VULNERABILITIES IN MYSQL CLIENT LIBRARY There is an ASSERT on a runtime condition that should be a dynamic check. There is also reported a weakness with buffer length. Currently cannot simulate an attack service there, but beafing up the code anyway. --- sql-common/client.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql-common/client.c b/sql-common/client.c index d17a92b6719a..e9ca661225bd 100644 --- a/sql-common/client.c +++ b/sql-common/client.c @@ -2176,7 +2176,7 @@ unpack_fields(MYSQL *mysql, MYSQL_ROWS *data,MEM_ROOT *alloc,uint fields, for (row=data; row ; row = row->next,field++) { /* fields count may be wrong */ - if (field < result || uint(field - result) >= fields) DBUG_RETURN(NULL); + if (field < result || (uint) (field - result) >= fields) DBUG_RETURN(NULL); if (unpack_field(mysql, alloc, default_value, server_capabilities, row, field)) { From ce42784c73607d9808256c656156a1e07bf2de78 Mon Sep 17 00:00:00 2001 From: Anushree Prakash B Date: Tue, 22 May 2018 15:42:38 +0530 Subject: [PATCH 0860/1221] Bug#16211011 - SSL CERTIFICATE SUBJECT ALT NAMES WITH IPS NOT RESPECTED WITH --SSL-VERIFY-SERVE DESCRIPTION =========== When connecting to a host with ssl-mode=VERIFY_IDENTITY, it does not inspect the IPs provided in the Subject Alternative Name. This can result in SSL certificate validation failure even for valid IPs. ANALYSIS ======== For openssl versions 1.0.2 and greater, an X509v3 extension is used, "Subject Alternative Name" that supports multiple hosts. However, prior to this "Subject: CN=hostname" is used which can only specify single host name. The names provided in the Subject Alternative Name field should also be inspected while establishing a connection. FIX: ==== Appropriate X509 certificate matching functions should be called while verifying the server certificate using openssl versions 1.0.2+. --- mysql-test/include/check_openssl_version.inc | 55 +++++++++++++++++++ mysql-test/include/have_openssl_support.inc | 5 ++ mysql-test/r/ssl_verify_identity.result | 17 ++++++ mysql-test/std_data/ca-cert-verify-san.pem | 22 ++++++++ .../std_data/client-cert-verify-san.pem | 20 +++++++ mysql-test/std_data/client-key-verify-san.pem | 27 +++++++++ .../std_data/server-cert-verify-san.pem | 23 ++++++++ mysql-test/std_data/server-key-verify-san.pem | 27 +++++++++ mysql-test/t/ssl_verify_identity-master.opt | 3 + mysql-test/t/ssl_verify_identity.test | 53 ++++++++++++++++++ sql-common/client.c | 35 +++++++++--- 11 files changed, 280 insertions(+), 7 deletions(-) create mode 100644 mysql-test/include/check_openssl_version.inc create mode 100644 mysql-test/include/have_openssl_support.inc create mode 100644 mysql-test/r/ssl_verify_identity.result create mode 100644 mysql-test/std_data/ca-cert-verify-san.pem create mode 100644 mysql-test/std_data/client-cert-verify-san.pem create mode 100644 mysql-test/std_data/client-key-verify-san.pem create mode 100644 mysql-test/std_data/server-cert-verify-san.pem create mode 100644 mysql-test/std_data/server-key-verify-san.pem create mode 100644 mysql-test/t/ssl_verify_identity-master.opt create mode 100644 mysql-test/t/ssl_verify_identity.test diff --git a/mysql-test/include/check_openssl_version.inc b/mysql-test/include/check_openssl_version.inc new file mode 100644 index 000000000000..0e4bafaf495c --- /dev/null +++ b/mysql-test/include/check_openssl_version.inc @@ -0,0 +1,55 @@ +--disable_query_log +--disable_result_log + +let OPENSSL_VERSION_INFO= $MYSQLTEST_VARDIR/log/openssl_version_info.txt; +let OPENSSL_CONFIG_INC= $MYSQLTEST_VARDIR/log/openssl_binary_config.inc; + +--error 0,1 +--remove_file $OPENSSL_VERSION_INFO +--error 0,1 +--remove_file $OPENSSL_CONFIG_INC + +--error 0,1, 127 +--exec openssl version > $OPENSSL_VERSION_INFO + +perl; + use strict; + my $search_file= $ENV{'OPENSSL_VERSION_INFO'}; + my $search_pattern_1= "0.9.*"; + my $search_pattern_2= "1.0.0.*"; + my $search_pattern_3= "1.0.1.*"; + my $content= ""; + my $dir= $ENV{'MYSQLTEST_VARDIR'}; + open(CONFIG_INC, ">$dir/log/openssl_binary_config.inc"); + open(FILE, "$search_file") or die("Unable to open '$search_file' : $!\n"); + read(FILE, $content, 100, 0); + close(FILE); + + if ( ($content =~ m{$search_pattern_1}) || ($content =~ m{$search_pattern_2}) || + ($content =~ m{$search_pattern_3}) ) { + print CONFIG_INC "let \$STATUS_VAR = 1;\n"; + } + else { + print CONFIG_INC "let \$STATUS_VAR = 0;\n"; + } + close(CONFIG_INC); +EOF + +--source $OPENSSL_CONFIG_INC + +if ($STATUS_VAR) +{ + --error 0,1 + --remove_file $OPENSSL_VERSION_INFO + --error 0,1 + --remove_file $OPENSSL_CONFIG_INC + --skip Test requires openssl version to be 1.0.2+ +} + +--error 0,1 +--remove_file $OPENSSL_VERSION_INFO +--error 0,1 +--remove_file $OPENSSL_CONFIG_INC + +--enable_query_log +--enable_result_log diff --git a/mysql-test/include/have_openssl_support.inc b/mysql-test/include/have_openssl_support.inc new file mode 100644 index 000000000000..1c283125d843 --- /dev/null +++ b/mysql-test/include/have_openssl_support.inc @@ -0,0 +1,5 @@ +# Only run this test if OpenSSL is supported +let $shavars= query_get_value("SHOW STATUS LIKE 'Rsa_public_key'", Variable_name, 1); +if ($shavars != 'Rsa_public_key'){ + skip Need OpenSSL support; +} diff --git a/mysql-test/r/ssl_verify_identity.result b/mysql-test/r/ssl_verify_identity.result new file mode 100644 index 000000000000..dac3d04f6fd5 --- /dev/null +++ b/mysql-test/r/ssl_verify_identity.result @@ -0,0 +1,17 @@ +### Trying to connect without ssl. This should establish an unencrypted connection. +Variable_name Value +Ssl_cipher +### Trying to connect with ssl-mode as REQUIRED. This should establish an encrypted connection. +Variable_name Value +Ssl_cipher SSL_CIPHER +### Trying to connect with ssl-verify-server-cert option. This should establish an encrypted connection. +Variable_name Value +Ssl_cipher SSL_CIPHER +### Trying to connect with ssl-verify-server-cert option and hostname as nonexistent. This should fail. +#Search for the error in the file +### Trying to connect with ssl-verify-server-cert option and hostname as localhost. This should establish an encrypted connection as localhost is present in Alternative Subject Name in the certificate. +Variable_name Value +Ssl_cipher SSL_CIPHER +### Trying to connect with ssl-verify-server-cert option and hostname as 127.0.0.1. This should establish an encrypted connection as localhost is present in Alternative Subject Name in the certificate. +Variable_name Value +Ssl_cipher SSL_CIPHER diff --git a/mysql-test/std_data/ca-cert-verify-san.pem b/mysql-test/std_data/ca-cert-verify-san.pem new file mode 100644 index 000000000000..04457ed20cf2 --- /dev/null +++ b/mysql-test/std_data/ca-cert-verify-san.pem @@ -0,0 +1,22 @@ +-----BEGIN CERTIFICATE----- +MIIDmTCCAoGgAwIBAgIJAO9Te7BEDh7eMA0GCSqGSIb3DQEBCwUAMGMxCzAJBgNV +BAYTAklOMRIwEAYDVQQIDAlLYXJuYXRha2ExEjAQBgNVBAcMCUJhbmdhbG9yZTEP +MA0GA1UECgwGT3JhY2xlMQ4wDAYDVQQLDAVNeVNRTDELMAkGA1UEAwwCQ0EwHhcN +MTgwNDExMTAyMzM0WhcNMjgwMjE4MTAyMzM0WjBjMQswCQYDVQQGEwJJTjESMBAG +A1UECAwJS2FybmF0YWthMRIwEAYDVQQHDAlCYW5nYWxvcmUxDzANBgNVBAoMBk9y +YWNsZTEOMAwGA1UECwwFTXlTUUwxCzAJBgNVBAMMAkNBMIIBIjANBgkqhkiG9w0B +AQEFAAOCAQ8AMIIBCgKCAQEAzmDykfk/Wd1aGE3IjAZkgd/dAP8rWF3Lnw7F9Ufo +pTJaPRW50F1ZjqKSf83jLHYseZrvoVB9SsKQx35cLOnYUO6qKfHdHlrJ3it6chk+ +1+xsPhygXWA6qKXn7QEJTL3xQybGvO6b2hyOOmkYCNOpV5W8kfLTpUR2RbeISu7f +9pw7EJo0uJQdhs2pzzKDVKLh7Pn7cGZGD6ByjzyOSArvpXDieErp1XOJs9qZ3llt +2xFncpZGyCrIYADUkbqZtoITj9DemdHHoEYJon55U/u2XDFS1hELeFRYI6p6dZtk +mGX8+FOjv7fg0sdqPPZgC84abxnfHloKrpv3BlBuHCGyewIDAQABo1AwTjAdBgNV +HQ4EFgQU7Q3134XYDQ00T4qITT5rvnXK0gAwHwYDVR0jBBgwFoAU7Q3134XYDQ00 +T4qITT5rvnXK0gAwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAk2mi +j0DKq5V8ac8MPk5giCnAfVtAcFHRgYl2bBHU7k/Onu4I4dIZTGV7LfMekM/NjgZ3 +c70/fZGD0aHPaDVV7OQu1+jZelJ/8YuXrOgFyJYnGPsksBhBXLgETmai2OW1xayv +4D0RALZYye5HqbL2IaPdJhyuo/gF6hzuMGt1k8sDfvb014zbX2mwe10ns50+BCT0 +5V3NXHdMrVS5Z8uUzntu7G0jJxq3P6Mkb5dnOLirZP+8SAlC/mLaz+pEA5tLQldN +Dx4AhaSr4PCUPy0QBh1Uo1NahCEcdrrQ46DIQES1kxjOTAa1KItmYkkcod8TCB37 +H6uaikrzrywKXoba+Q== +-----END CERTIFICATE----- diff --git a/mysql-test/std_data/client-cert-verify-san.pem b/mysql-test/std_data/client-cert-verify-san.pem new file mode 100644 index 000000000000..d8e0d55eb438 --- /dev/null +++ b/mysql-test/std_data/client-cert-verify-san.pem @@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDPjCCAiYCAQEwDQYJKoZIhvcNAQELBQAwYzELMAkGA1UEBhMCSU4xEjAQBgNV +BAgMCUthcm5hdGFrYTESMBAGA1UEBwwJQmFuZ2Fsb3JlMQ8wDQYDVQQKDAZPcmFj +bGUxDjAMBgNVBAsMBU15U1FMMQswCQYDVQQDDAJDQTAeFw0xODA0MTExMDI3MDha +Fw0yODAyMTgxMDI3MDhaMGcxCzAJBgNVBAYTAklOMRIwEAYDVQQIDAlLYXJuYXRh +a2ExEjAQBgNVBAcMCUJhbmdhbG9yZTEPMA0GA1UECgwGT3JhY2xlMQ4wDAYDVQQL +DAVNeVNRTDEPMA0GA1UEAwwGQ2xpZW50MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAv+FDomsx3sLX/yFM+g94YvbiO50jqf7fOC1gnzT2dsgcMxCtjlm+ +RdKpJDHaSfQ8hc76dp8hWwsahNtY2fSHvv61l6dO5NRZTn26eLpM1pDbVWz17wp0 +1zYICWtIEMrA7mxGPH+Lwy8YiSWa9/pmv0gk9BB1d6o5mBo/c0jA/n1iYujPiRHy +6QTjZuWqZZwYK4pXF9jGuw0xwFMVjN+6/BMkoz/Pa46PpcQ/t2sblZympqN2n86Q +cSlDlPu/sx0Y2PxHL0lkzxw1HDycLAX5cM7vg1AOpeq/3y55pmGPIZh3kOBcQVvF +GjkMs2I3O8N3ztwb0iE/iLk0mcWHKVCFyQIDAQABMA0GCSqGSIb3DQEBCwUAA4IB +AQA64dUgzwuBeugtTGD22YYsnZD6h1bZXxFdkUU06GJ9kqojJmUS5KEsY+42mmDG +JRDovhGNr6wazwDNUUhnDqLtGTarb+E3G/0X+J38CcGgicMML0Atof5/yk6SSHa5 +K27QMfX4VtCwefB7H/g/0/cDpoaEaeZ1pCdkyEk1fsX3dQEx7RS+fPcNmH233Xxu +No604ChGlV3Ik0VXZVjss1lwDt7D6o90O4GpIY9ngnUWMAy2JZYqMZo1Od5WBs8L +QBT8TYePJy/jcQVf+cB1DnJIDil7Pqa+owkM+DEVLsXjVdXgT9TcTC6uxteEKKY9 +PPBRX1wsgtb2b/I4ZehqH81g +-----END CERTIFICATE----- diff --git a/mysql-test/std_data/client-key-verify-san.pem b/mysql-test/std_data/client-key-verify-san.pem new file mode 100644 index 000000000000..fdffdaba2d62 --- /dev/null +++ b/mysql-test/std_data/client-key-verify-san.pem @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEowIBAAKCAQEAv+FDomsx3sLX/yFM+g94YvbiO50jqf7fOC1gnzT2dsgcMxCt +jlm+RdKpJDHaSfQ8hc76dp8hWwsahNtY2fSHvv61l6dO5NRZTn26eLpM1pDbVWz1 +7wp01zYICWtIEMrA7mxGPH+Lwy8YiSWa9/pmv0gk9BB1d6o5mBo/c0jA/n1iYujP +iRHy6QTjZuWqZZwYK4pXF9jGuw0xwFMVjN+6/BMkoz/Pa46PpcQ/t2sblZympqN2 +n86QcSlDlPu/sx0Y2PxHL0lkzxw1HDycLAX5cM7vg1AOpeq/3y55pmGPIZh3kOBc +QVvFGjkMs2I3O8N3ztwb0iE/iLk0mcWHKVCFyQIDAQABAoIBAD116jQcId04i/cs +s3tleSo56j0uGD5bZSSZZFmanVduwZmZvf3awRecYpE1ZrZJhRlXMuLMFeMTq2ri +15L4wIJtE71/2cVyPyjlHNWO1w3jWF4EiMIIl2RX6jsaIfs+9o1oIRc/w4TBkRpc +8UZ87mxWr399xiKOY+RUg/5pT2g0Mxj/ZstseJy9Z69jnV2Oa/2nXhiCBxn8b89m +lunkePcBvqjoLtZPXr0S/zQlsaUAdR0KKl+5TRD/V8rjKtW7P7VCStpdEaqa8fic +b2uCW24jsGvmwmbtrTINYQ959M6m3/Dwxl4t8QpR9rUc+WC4I0F/KvXLgINuGCxd +0DhnSAECgYEA6pXytFGOONQF7NbqxsFWoHW+lBaGWvIJoAGwvNbqmu+rbI7wqx1z +biWPAn6vc2nFvNnOk+jhMH/guxXlmjE9ZlmnucV2KoaPGy4uGo6NC+kOKhuSjvGG +GCPeMK5EFUzy9fMZcIBgVsq7Jm1kdN48+CecPRQ4Tf4rpwBDO1xYOHMCgYEA0WVS +NNdHlIGbAbk1RTA5pNTHhVkgFZcFAsViqOZnborooCUBlX6EoVlbh0fkj9h/Lh+S +dCeptOPdG+JFGeL4aVIJn8uuAf6kKty10rBgpeoa71yH3Gpw5cil59Y5hW7Yc0bw +ZIwNMk6st1ua2c7fbP/OKD4GuGIt/zppXLNRRdMCgYBzrFTtTXnP09zIGIHUV+mb +XfQHmcPOfKL6X1sDAwbUN3JUKXfLKM6Odb67ADULuBBlOxF+JctE2wm5tuZszfL0 +0Si/lfrapVdTk8XwGnK6eMUfRlFSYw44QReC8atoxXTYinL04pies4DtRevPJPbz +drS3+Yx6COcFhj+gubxWuQKBgQCRc+RKuFAMpIrcA58xVHJ2QSfnRSW4WZMtfZcu +4/1tGCjHNW2IPr46piuiKRpnoWeWzm+ZKAQGl1H8EI0XkkYkQsxUp9NTp2K6M15J +4CMCnT/gjVIClh2eQGaeSHzkZz8LtHdAINj53RS0uXkzWzRwLrEx2wQoCGsTI6wU +rKsD6QKBgBktQAc7Q+1RC94tLjteK3KYE9POvd9Q0OrCrORgiyybYnk4zfXvbafa +cPFYZwmhsN8L3KyOm5S0SsWP+vPbm6qmoryuz/MtDwCJozgtoz7fNGxcWbILF/1S +UQDuGs1mG14od7IKu/RqLpUK5vYTOObm+9TH4zsO7qDBaG1HNMY+ +-----END RSA PRIVATE KEY----- diff --git a/mysql-test/std_data/server-cert-verify-san.pem b/mysql-test/std_data/server-cert-verify-san.pem new file mode 100644 index 000000000000..fb65b76b527b --- /dev/null +++ b/mysql-test/std_data/server-cert-verify-san.pem @@ -0,0 +1,23 @@ +-----BEGIN CERTIFICATE----- +MIID5zCCAs+gAwIBAgIBATANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJJTjES +MBAGA1UECAwJS2FybmF0YWthMRIwEAYDVQQHDAlCYW5nYWxvcmUxDzANBgNVBAoM +Bk9yYWNsZTEOMAwGA1UECwwFTXlTUUwxCzAJBgNVBAMMAkNBMB4XDTE4MDQxMTEw +MjUyNFoXDTI4MDIxODEwMjUyNFowcDELMAkGA1UEBhMCSU4xEjAQBgNVBAgMCUth +cm5hdGFrYTESMBAGA1UEBwwJQmFuZ2Fsb3JlMQ8wDQYDVQQKDAZPcmFjbGUxDjAM +BgNVBAsMBU15U1FMMRgwFgYDVQQDDA9ub25leGlzdGVudC5jb20wggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQC/sSYMr3chNWCyoHGc5EZmhINxGrWwnyQW +5+kcOWgwpGgTNy3Ruvt2k26iMrBRFtFq6pR8SHzrJAAGhECY12+rWRh8uD6sQS4l +P5+F5l8bXgtoMvqpX4Bkgxj880dqBJurOpXl1VVql69uWfBsxOHSRkeMZOJNIMTY +VKljEjGaDcGAFXTJoKxe+Df63XPgwYyhH7OpUZdTkCfedU1M+C3Sw5782luW5L+E +JiwulblHBGnTDN/6G9aXS4+l0gs3z4h2aElKmVjy0tKaXTv81zkYnClUhVFEnvzN +G//gGsZm9Sn+Cv/V+BGEnS2gsK7FziCPJbitS03/rhS9xYcEDZcNAgMBAAGjgZgw +gZUwCQYDVR0TBAIwADAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQg +Q2VydGlmaWNhdGUwHQYDVR0OBBYEFI3O1OuzzKnpmZkAKgYEz2q9uRFDMB8GA1Ud +IwQYMBaAFO0N9d+F2A0NNE+KiE0+a751ytIAMBoGA1UdEQQTMBGCCWxvY2FsaG9z +dIcEfwAAATANBgkqhkiG9w0BAQsFAAOCAQEAZCgA6kj6hvo+X3TUa7kZx90KHlsH +kxSHEiEw1wjxZVwW9GzSzX/qLnK4EZjH9V5BC2k1nbBGmUJE8i5VSzIG6unRhncX +H1+bcEvlKIESWGQ1Hk+vFW8jEhoLGsuF62TTcE5urnvWix8k/VgLZ8GbkihSVPiM +98syw007eHUfauBj2QTYxnZuZFlW8p5BIWclDbSMQ8iuKQqLPzmipmWEVaxgI5XI +o/k5704aW6An7LsgPNKunXT7Ykbz4HvmH4/OVIYJSWTtuVYy3tYLyKwAFtGaCe9U +wMe/YuA2/74ir2CxbiYtVAuDa9o4Hq8oCbTfE9gQReEmHPWsw4tcwuPVZA== +-----END CERTIFICATE----- diff --git a/mysql-test/std_data/server-key-verify-san.pem b/mysql-test/std_data/server-key-verify-san.pem new file mode 100644 index 000000000000..7143d8ad7ab3 --- /dev/null +++ b/mysql-test/std_data/server-key-verify-san.pem @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpQIBAAKCAQEAv7EmDK93ITVgsqBxnORGZoSDcRq1sJ8kFufpHDloMKRoEzct +0br7dpNuojKwURbRauqUfEh86yQABoRAmNdvq1kYfLg+rEEuJT+fheZfG14LaDL6 +qV+AZIMY/PNHagSbqzqV5dVVapevblnwbMTh0kZHjGTiTSDE2FSpYxIxmg3BgBV0 +yaCsXvg3+t1z4MGMoR+zqVGXU5An3nVNTPgt0sOe/NpbluS/hCYsLpW5RwRp0wzf ++hvWl0uPpdILN8+IdmhJSplY8tLSml07/Nc5GJwpVIVRRJ78zRv/4BrGZvUp/gr/ +1fgRhJ0toLCuxc4gjyW4rUtN/64UvcWHBA2XDQIDAQABAoIBAQCivOwGnPhQMxay +z09k2M+DvUAxx3E0Twa+g4f9tCbmFM1ectvtUAan9iZYgRv625pSYHBKyudyYQ+8 +eI62sz9UgsEtMOXUK0nXyZnOfXOEsmSQw6bWIAPKURnntUmNkffueEBF7MUlRz1i +O+zHCqaEc7HOWN9eh1FWLxnWx91gYJEHXPkv8lITgsMO2eMqS7EMjmRNt0zpy+4M +gGQpZvO+wyXQqjnxqSi+lwlLF18dXHZtCzatRgjUY7armU9AMSD21Hl1p9LBcP1A +1wllqwz8xTf9iTZjlThdymZTDhlpDfNC8yBMA/vUaUc9IDSWzPpRUqUg4ViIArxA +pfqJ3DiBAoGBAOK++/X2b5IVRc8ZD+s5FlAvGBIqBiT2qV/klBmuO5/XiTD9jd7C +W9D1leubksn2yPtVSgrM/YXZuLOkazGCZlfFdvNoOPH2MQu4FME4AoYnHGysORtS +uC+MuCQlKxXwCyMtTawY3U0rvCV5BgyAHuUtnsTb2ts/igbONxhSAql9AoGBANhs +ZFqcCQRlcoPkiBfE2tMPHcubTvfkn3treK2pmXFAwc19p+2yjgTWQDFAdEUafg67 +40NYLp8YthAMQrfWTF9R1HKv4J3dIiyLAbsZZfkvh/EiiT2y53SStfFUpB4WM1Jj +3WaWyz20tEE+kt/utxOPoGBcqMmmt9fGCyV0a5jRAoGAb6UUEMa3ptk8lz1C3lIs +j2yw0HjKr7aYLTQyS/bDOu/4iBvAmBdg+CGEIQ9oFnOiAEa9f1Xx2s8aJ7HkaetI +Ex2SdUUzDMho29lWttCqRX3KfCPMtoxjTl5eaMW4UkPwZ/CtlvhjNtU6/cR6WvtW +uwdcbpfGSkAd6T3uWNZAo00CgYEAyTFy1Z0q8NBSdfR05AvYFc9+tnJKJj9+V2Eg +jekVwWgfAqZm/503U53NjTvLGxa2y4G1kzyeEr8JOb/8IiTxWMecxYVlPbx+cYRE +dqf02YNrUCr4BMiVTRS6WYCDFYkz6sr13tIeXN3pmKHQLqcfwOqLgCmDq/r1+3yb +jhU9lZECgYEAr/rWaeKuJlE5U64kxZO+TcseDSSeUt+f8mLYf/KLBoh5xcGq1qPv +4d9ljOLciJJZo1XBW9LZa5ryrIQ18wdZcj6B38GyjW4vgz5SZ+/H+KjuIdxbKNGa +93Jar7+ZhdkdV2KBN6ucYNJJJ7R+H39Av6Vv91OBGs3jss8+rfMvlv8= +-----END RSA PRIVATE KEY----- diff --git a/mysql-test/t/ssl_verify_identity-master.opt b/mysql-test/t/ssl_verify_identity-master.opt new file mode 100644 index 000000000000..4607f83ce948 --- /dev/null +++ b/mysql-test/t/ssl_verify_identity-master.opt @@ -0,0 +1,3 @@ +--ssl-ca=$MYSQL_TEST_DIR/std_data/ca-cert-verify-san.pem +--ssl-key=$MYSQL_TEST_DIR/std_data/server-key-verify-san.pem +--ssl-cert=$MYSQL_TEST_DIR/std_data/server-cert-verify-san.pem diff --git a/mysql-test/t/ssl_verify_identity.test b/mysql-test/t/ssl_verify_identity.test new file mode 100644 index 000000000000..28c96c8857f7 --- /dev/null +++ b/mysql-test/t/ssl_verify_identity.test @@ -0,0 +1,53 @@ +# === Purpose === +# This test verifies that while verifying the server certificates +# when ssl-verify-server-cert option is provided, the DNS/IPs provided +# in the Subject Alternative Names field (which can be provided as an +# extension in X509) are also checked for apart from the Common Name in +# the subject. Applicable for openssl versions 1.0.2 and greater. +# +# === Related bugs and/or worklogs === +# Bug #16211011 - SSL CERTIFICATE SUBJECT ALT NAMES WITH IPS NOT RESPECTED WITH --SSL-VERIFY-SERVER-CERT +# +# Note that these test cases are written keeping in mind that the openssl version used by the system will +# be 1.0.2+. For older versions of openssl, the test will be skipped. + +--source include/have_openssl.inc +--source include/have_openssl_support.inc +--source include/check_openssl_version.inc +--source include/not_embedded.inc + +--echo ### Trying to connect without ssl. This should establish an unencrypted connection. +--exec $MYSQL --skip-ssl test -e "SHOW STATUS LIKE 'Ssl_cipher'" 2> $MYSQLTEST_VARDIR/tmp/bug24732452_stderr +--cat_file $MYSQLTEST_VARDIR/tmp/bug24732452_stderr +--cat_file $MYSQLTEST_VARDIR/tmp/bug24732452_stderr + +--echo ### Trying to connect with ssl-mode as REQUIRED. This should establish an encrypted connection. +--replace_result ECDHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER ECDHE-RSA-AES128-SHA256 SSL_CIPHER +--exec $MYSQL --ssl-mode=REQUIRED --ssl-ca=$MYSQL_TEST_DIR/std_data/ca-cert-verify-san.pem --ssl-cert=$MYSQL_TEST_DIR/std_data/client-cert-verify-san.pem --ssl-key=$MYSQL_TEST_DIR/std_data/client-key-verify-san.pem test -e "SHOW STATUS LIKE 'Ssl_cipher'" 2> $MYSQLTEST_VARDIR/tmp/bug24732452_stderr +--cat_file $MYSQLTEST_VARDIR/tmp/bug24732452_stderr + +--echo ### Trying to connect with ssl-verify-server-cert option. This should establish an encrypted connection. +--replace_result ECDHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER ECDHE-RSA-AES128-SHA256 SSL_CIPHER +--exec $MYSQL --ssl-verify-server-cert --ssl-ca=$MYSQL_TEST_DIR/std_data/ca-cert-verify-san.pem --ssl-cert=$MYSQL_TEST_DIR/std_data/client-cert-verify-san.pem --ssl-key=$MYSQL_TEST_DIR/std_data/client-key-verify-san.pem test -e "SHOW STATUS LIKE 'Ssl_cipher'" 2> $MYSQLTEST_VARDIR/tmp/bug24732452_stderr +--cat_file $MYSQLTEST_VARDIR/tmp/bug24732452_stderr + +--echo ### Trying to connect with ssl-verify-server-cert option and hostname as nonexistent. This should fail. +--error 1 +--exec $MYSQL --host=nonexistent --ssl-verify-server-cert --ssl-ca=$MYSQL_TEST_DIR/std_data/ca-cert-verify-san.pem --ssl-cert=$MYSQL_TEST_DIR/std_data/client-cert-verify-san.pem --ssl-key=$MYSQL_TEST_DIR/std_data/client-key-verify-san.pem test -e "SHOW STATUS LIKE 'Ssl_cipher'" 2> $MYSQLTEST_VARDIR/tmp/bug24732452_stderr +let SEARCH_FILE= $MYSQLTEST_VARDIR/tmp/bug24732452_stderr; +--echo #Search for the error in the file +--let SEARCH_PATTERN= ERROR 2005 \(HY000\): Unknown MySQL server host 'nonexistent' +--source include/search_pattern_in_file.inc + +--echo ### Trying to connect with ssl-verify-server-cert option and hostname as localhost. This should establish an encrypted connection as localhost is present in Alternative Subject Name in the certificate. +--replace_result ECDHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER ECDHE-RSA-AES128-SHA256 SSL_CIPHER +--exec $MYSQL --host=localhost --ssl-verify-server-cert --ssl-ca=$MYSQL_TEST_DIR/std_data/ca-cert-verify-san.pem --ssl-cert=$MYSQL_TEST_DIR/std_data/client-cert-verify-san.pem --ssl-key=$MYSQL_TEST_DIR/std_data/client-key-verify-san.pem test -e "SHOW STATUS LIKE 'Ssl_cipher'" 2> $MYSQLTEST_VARDIR/tmp/bug24732452_stderr +--cat_file $MYSQLTEST_VARDIR/tmp/bug24732452_stderr + +--echo ### Trying to connect with ssl-verify-server-cert option and hostname as 127.0.0.1. This should establish an encrypted connection as localhost is present in Alternative Subject Name in the certificate. +--replace_result ECDHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES128-GCM-SHA256 SSL_CIPHER DHE-RSA-AES256-SHA SSL_CIPHER ECDHE-RSA-AES128-SHA256 SSL_CIPHER +--exec $MYSQL --host=127.0.0.1 --ssl-verify-server-cert --ssl-ca=$MYSQL_TEST_DIR/std_data/ca-cert-verify-san.pem --ssl-cert=$MYSQL_TEST_DIR/std_data/client-cert-verify-san.pem --ssl-key=$MYSQL_TEST_DIR/std_data/client-key-verify-san.pem test -e "SHOW STATUS LIKE 'Ssl_cipher'" 2> $MYSQLTEST_VARDIR/tmp/bug24732452_stderr +--cat_file $MYSQLTEST_VARDIR/tmp/bug24732452_stderr + +#Cleanup +--remove_file $MYSQLTEST_VARDIR/tmp/bug24732452_stderr diff --git a/sql-common/client.c b/sql-common/client.c index 34628e5b62a9..09fcdae7d9c4 100644 --- a/sql-common/client.c +++ b/sql-common/client.c @@ -97,6 +97,10 @@ my_bool net_flush(NET *net); #define SOCKET_ERROR -1 #endif +#ifdef HAVE_OPENSSL +#include +#endif + #include "client_settings.h" #include #include @@ -1872,12 +1876,15 @@ static int ssl_verify_server_cert(Vio *vio, const char* server_hostname, const c { SSL *ssl; X509 *server_cert= NULL; + int ret_validation= 1; + +#if !(OPENSSL_VERSION_NUMBER >= 0x10002000L) char *cn= NULL; int cn_loc= -1; ASN1_STRING *cn_asn1= NULL; X509_NAME_ENTRY *cn_entry= NULL; X509_NAME *subject= NULL; - int ret_validation= 1; +#endif DBUG_ENTER("ssl_verify_server_cert"); DBUG_PRINT("enter", ("server_hostname: %s", server_hostname)); @@ -1912,11 +1919,25 @@ static int ssl_verify_server_cert(Vio *vio, const char* server_hostname, const c */ /* - Some notes for future development - We should check host name in alternative name first and then if needed check in common name. - Currently yssl doesn't support alternative name. - openssl 1.0.2 support X509_check_host method for host name validation, we may need to start using - X509_check_host in the future. + Use OpenSSL certificate matching functions instead of our own if we + have OpenSSL. The X509_check_* functions return 1 on success. + */ +#if OPENSSL_VERSION_NUMBER >= 0x10002000L || defined(HAVE_WOLFSSL) + if ((X509_check_host(server_cert, server_hostname, strlen(server_hostname), + 0, 0) != 1) && + (X509_check_ip_asc(server_cert, server_hostname, 0) != 1)) { + *errptr = "Failed to verify the server certificate via X509 certificate " + "matching functions"; + goto error; + + } else { + /* Success */ + ret_validation = 0; + } +#else /* OPENSSL_VERSION_NUMBER < 0x10002000L */ + /* + OpenSSL prior to 1.0.2 do not support X509_check_host() function. + Use deprecated X509_get_subject_name() instead. */ subject= X509_get_subject_name((X509 *) server_cert); @@ -1959,7 +1980,7 @@ static int ssl_verify_server_cert(Vio *vio, const char* server_hostname, const c /* Success */ ret_validation= 0; } - +#endif /* OPENSSL_VERSION_NUMBER >= 0x10002000L */ *errptr= "SSL certificate validation failure"; error: From 9005c556d32a739646834f177e1ef7e7a4700cd1 Mon Sep 17 00:00:00 2001 From: Aakanksha Verma Date: Wed, 17 Aug 2016 14:55:38 +0530 Subject: [PATCH 0861/1221] PS-4487: `-DWITH_NUMA=ON` is silently ignored when libnuma-dev is not installed 1. cmake with `-DWITH_NUMA=ON` will return error when libnuma-dev is not installed 2. Fix `sys_vars.innodb_numa_interleave_basic` that showed `Test requires: NUMA must be enabled` even when PS was compiled with `-DWITH_NUMA=ON` Backported changes from 5.7 basing on: https://github.com/percona/percona-server/commit/b3c011f0b26bad5a1d4fc381ca241b88b07e4767 https://github.com/percona/percona-server/commit/3fc9d6d1780540e7f50d7ff6323c3c873f5038c6 https://github.com/percona/percona-server/commit/de921a8185c19f64e3d8a68fcb148c5773f567ee https://github.com/percona/percona-server/commit/36ebe7d9af9146cdb194bf7f50577ee2fe945296 --- configure.cmake | 30 +++++++++++++++++-- mysql-test/include/have_numa.inc | 11 +------ .../r/innodb_numa_interleave_basic.result | 10 +++---- .../t/innodb_numa_interleave_basic-master.opt | 1 + .../t/innodb_numa_interleave_basic.test | 6 ++-- storage/innobase/CMakeLists.txt | 10 ++++--- storage/innobase/buf/buf0buf.cc | 3 ++ storage/innobase/srv/srv0srv.cc | 1 - 8 files changed, 46 insertions(+), 26 deletions(-) create mode 100644 mysql-test/suite/sys_vars/t/innodb_numa_interleave_basic-master.opt diff --git a/configure.cmake b/configure.cmake index 31af30fa9f09..326cd9d197ac 100644 --- a/configure.cmake +++ b/configure.cmake @@ -1244,9 +1244,10 @@ CHECK_STRUCT_HAS_MEMBER("struct dirent" d_ino "dirent.h" STRUCT_DIRENT_HAS_D_IN CHECK_STRUCT_HAS_MEMBER("struct dirent" d_namlen "dirent.h" STRUCT_DIRENT_HAS_D_NAMLEN) SET(SPRINTF_RETURNS_INT 1) -CHECK_INCLUDE_FILES (numaif.h HAVE_NUMAIF_H) -OPTION(WITH_NUMA "Explicitly set NUMA memory allocation policy" ON) -IF(HAVE_NUMAIF_H AND WITH_NUMA) +CHECK_INCLUDE_FILES(numa.h HAVE_NUMA_H) +CHECK_INCLUDE_FILES(numaif.h HAVE_NUMAIF_H) + +IF(HAVE_NUMA_H AND HAVE_NUMAIF_H) SET(SAVE_CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES}) SET(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} numa) CHECK_C_SOURCE_COMPILES( @@ -1261,6 +1262,29 @@ IF(HAVE_NUMAIF_H AND WITH_NUMA) }" HAVE_LIBNUMA) SET(CMAKE_REQUIRED_LIBRARIES ${SAVE_CMAKE_REQUIRED_LIBRARIES}) +ELSE() + SET(HAVE_LIBNUMA 0) +ENDIF() + +IF(NOT HAVE_LIBNUMA) + MESSAGE(STATUS "NUMA library missing or required version not available") +ENDIF() + +IF(HAVE_LIBNUMA AND HAVE_NUMA_H AND HAVE_NUMAIF_H) + OPTION(WITH_NUMA "Explicitly set NUMA memory allocation policy" ON) +ELSE() + OPTION(WITH_NUMA "Explicitly set NUMA memory allocation policy" OFF) +ENDIF() + +IF(WITH_NUMA AND NOT HAVE_LIBNUMA) + # Forget it in cache, abort the build. + UNSET(WITH_NUMA CACHE) + MESSAGE(FATAL_ERROR "NUMA library missing or required version not available") +ENDIF() + +IF(HAVE_LIBNUMA AND NOT WITH_NUMA) + SET(HAVE_LIBNUMA 0) + MESSAGE(STATUS "Disabling NUMA on user's request") ENDIF() MY_CHECK_CXX_COMPILER_FLAG("-Wmaybe-uninitialized" HAVE_WMAYBE_UNINITIALIZED) diff --git a/mysql-test/include/have_numa.inc b/mysql-test/include/have_numa.inc index bd1c7d7a085f..18bca99e04d7 100644 --- a/mysql-test/include/have_numa.inc +++ b/mysql-test/include/have_numa.inc @@ -4,15 +4,6 @@ let $numa_support = `SELECT COUNT(VARIABLE_VALUE) = 1 FROM if ( $numa_support == 0 ) { - --skip Test requires: NUMA must be enabled -} - -if ( $numa_support == 1 ) -{ - let $numa = `SELECT @@GLOBAL.innodb_numa_interleave = 'OFF'`; - if ( $numa == 1 ) - { - --skip Test requires: NUMA must be enabled - } + --skip Test requires: Binary must be built with NUMA support. } diff --git a/mysql-test/suite/sys_vars/r/innodb_numa_interleave_basic.result b/mysql-test/suite/sys_vars/r/innodb_numa_interleave_basic.result index 6f6fb359b3db..21ed16c1dab8 100644 --- a/mysql-test/suite/sys_vars/r/innodb_numa_interleave_basic.result +++ b/mysql-test/suite/sys_vars/r/innodb_numa_interleave_basic.result @@ -3,8 +3,8 @@ SELECT @@GLOBAL.innodb_numa_interleave; 1 SET @@GLOBAL.innodb_numa_interleave=off; ERROR HY000: Variable 'innodb_numa_interleave' is a read only variable -SELECT @@GLOBAL.innodb_use_native_aio; -@@GLOBAL.innodb_use_native_aio -0 -SELECT @@SESSION.innodb_use_native_aio; -ERROR HY000: Variable 'innodb_use_native_aio' is a GLOBAL variable +SELECT @@GLOBAL.innodb_numa_interleave; +@@GLOBAL.innodb_numa_interleave +1 +SELECT @@SESSION.innodb_numa_interleave; +ERROR HY000: Variable 'innodb_numa_interleave' is a GLOBAL variable diff --git a/mysql-test/suite/sys_vars/t/innodb_numa_interleave_basic-master.opt b/mysql-test/suite/sys_vars/t/innodb_numa_interleave_basic-master.opt new file mode 100644 index 000000000000..c1c2bb26b8ac --- /dev/null +++ b/mysql-test/suite/sys_vars/t/innodb_numa_interleave_basic-master.opt @@ -0,0 +1 @@ +--loose-innodb_numa_interleave=1 diff --git a/mysql-test/suite/sys_vars/t/innodb_numa_interleave_basic.test b/mysql-test/suite/sys_vars/t/innodb_numa_interleave_basic.test index 9f41cb74da85..d0e0194ae039 100644 --- a/mysql-test/suite/sys_vars/t/innodb_numa_interleave_basic.test +++ b/mysql-test/suite/sys_vars/t/innodb_numa_interleave_basic.test @@ -1,13 +1,13 @@ --source include/have_innodb.inc --source include/have_numa.inc +--source include/have_64bit.inc SELECT @@GLOBAL.innodb_numa_interleave; --error ER_INCORRECT_GLOBAL_LOCAL_VAR SET @@GLOBAL.innodb_numa_interleave=off; -SELECT @@GLOBAL.innodb_use_native_aio; +SELECT @@GLOBAL.innodb_numa_interleave; --error ER_INCORRECT_GLOBAL_LOCAL_VAR -SELECT @@SESSION.innodb_use_native_aio; - +SELECT @@SESSION.innodb_numa_interleave; diff --git a/storage/innobase/CMakeLists.txt b/storage/innobase/CMakeLists.txt index 23fa7b342a85..5fa6f143d9dd 100644 --- a/storage/innobase/CMakeLists.txt +++ b/storage/innobase/CMakeLists.txt @@ -29,9 +29,6 @@ IF(UNIX) ADD_DEFINITIONS(-DLINUX_NATIVE_AIO=1) LINK_LIBRARIES(aio) ENDIF() - IF(HAVE_LIBNUMA) - LINK_LIBRARIES(numa) - ENDIF() ELSEIF(CMAKE_SYSTEM_NAME MATCHES "HP*") ADD_DEFINITIONS("-DUNIV_HPUX") ELSEIF(CMAKE_SYSTEM_NAME STREQUAL "AIX") @@ -448,10 +445,15 @@ IF(WITH_INNODB) SET(WITH_INNOBASE_STORAGE_ENGINE TRUE) ENDIF() +UNSET(NUMA_LIBRARY) +IF(HAVE_LIBNUMA) + SET(NUMA_LIBRARY "numa") +ENDIF() + MYSQL_ADD_PLUGIN(innobase ${INNOBASE_SOURCES} STORAGE_ENGINE DEFAULT MODULE_OUTPUT_NAME ha_innodb - LINK_LIBRARIES ${ZLIB_LIBRARY}) + LINK_LIBRARIES ${ZLIB_LIBRARY} ${NUMA_LIBRARY}) IF(WITH_INNOBASE_STORAGE_ENGINE) # Remove -DMYSQL_SERVER, it breaks embedded build diff --git a/storage/innobase/buf/buf0buf.cc b/storage/innobase/buf/buf0buf.cc index 432825c308ff..9d3e5b3db427 100644 --- a/storage/innobase/buf/buf0buf.cc +++ b/storage/innobase/buf/buf0buf.cc @@ -53,6 +53,9 @@ Created 11/5/1995 Heikki Tuuri #include "page0zip.h" #include "srv0mon.h" #include "buf0checksum.h" + +UNIV_INTERN my_bool srv_numa_interleave = FALSE; + #ifdef HAVE_LIBNUMA #include #include diff --git a/storage/innobase/srv/srv0srv.cc b/storage/innobase/srv/srv0srv.cc index e0e3f995baeb..471749e842af 100644 --- a/storage/innobase/srv/srv0srv.cc +++ b/storage/innobase/srv/srv0srv.cc @@ -157,7 +157,6 @@ use simulated aio we build below with threads. Currently we support native aio on windows and linux */ /* make srv_use_native_aio to be visible for other plugins */ my_bool srv_use_native_aio = TRUE; -UNIV_INTERN my_bool srv_numa_interleave = FALSE; #ifdef __WIN__ /* Windows native condition variables. We use runtime loading / function From b2a8ee59eccb472c03ca2e15047e74913f01f6ac Mon Sep 17 00:00:00 2001 From: Yura Sorokin Date: Tue, 22 May 2018 18:11:59 +0300 Subject: [PATCH 0862/1221] Implemented PS-3879 (Encrypted temporary files) https://jira.percona.com/browse/PS-3879 Introduced new global non-dynamic boolean variable 'encrypt_tmp_files' which, when turned on, enables encryption of temporary files created for various server needs (MyISAM 'OPTIMIZE' / 'REPAIR', filesort, etc.) For each individual file a new random key is generated using 'my_rand_buffer()' upon opening (no encryption / key storage plugin is involved in this process). File data is encrypted using AES 256-bit algorithm in CBC block mode. Cherry-picked commit MariaDB/server@d9340d6 "MDEV-8126 encryption for temp files" Cherry-picked commit MariaDB/server@47d1679 "fix encryption.tempfiles to check that encrypt_tmp_files is ON" Cherry-picked commit MariaDB/server@60dfe12 "MDEV-14868 MariaDB server crashes after using ROLLBACK TO when encrypt_tmp_files=ON" Cherry-picked commit MariaDB/server@b75d845 "MDEV-14868 MariaDB server crashes after using ROLLBACK TO when encrypt_tmp_files=ON" In contrast to MariaDB we preserve original 'my_b_fill()' implementation for non-encrypted mode and use 'return _my_b_read(info, 0, 0) ? 0 : info->read_end - info->read_pos;' only when 'MY_ENCRYPT' flag is set. Applied experimental fix for MDEV-10259 "mysqld crash with certain statement length and order with Galera and encrypt-tmp-files=1" (https://jira.mariadb.org/browse/MDEV-10259) (http://lists.askmonty.org/pipermail/commits/2018-March/012144.html) Fixed a problem in 'my_b_encr_read()' with updating 'read_end' and 'pos_in_file'. Fixed problem in group_replication plugin code: 'Transaction_Message::append_cache()' method could call 'my_b_fill()' in case when 'info->read_pos != info->read_end' which is not supported in the encrypted mode. Fixed "my_aes.h" interface to be plain C compatible. 'encryption.tempfiles' MTR test case from MariaDB renamed to 'main.percona_encrypt_tmp_files'. Emulated sequence pseudo-tables. Added new 'sys_vars.enctypt_tmp_files_basic' MTR test case for the new 'encrypt_tmp_files' system variable. Re-recorded 'main.mysqld--help-notwin' MTR test case because of the new '--encrypt-tmp-files' system variable. Fixed 'perfschema.show_sanity' MTR test case because of the new '--encrypt-tmp-files' system variable. Added 'mf_iocache-t' gunit test which tests basic 'io_cache' functionality in encrypted / unencrypted mode. Various formatting and spelling fixes. --- include/my_aes.h | 14 +- include/my_sys.h | 11 +- mysql-test/r/mysqld--help-notwin.result | 3 + mysql-test/r/percona_encrypt_tmp_files.result | 132 ++++++++ .../suite/perfschema/t/show_sanity.test | 1 + .../sys_vars/r/encrypt_tmp_files_basic.result | 29 ++ .../sys_vars/t/encrypt_tmp_files_basic.test | 24 ++ .../t/percona_encrypt_tmp_files-master.opt | 1 + mysql-test/t/percona_encrypt_tmp_files.test | 126 ++++++++ mysys/mf_iocache.c | 146 +++++++-- mysys/mf_iocache2.c | 17 +- mysys_ssl/my_aes_openssl.cc | 8 +- mysys_ssl/my_aes_yassl.cc | 8 +- .../group_replication/src/observer_trans.cc | 6 +- sql/CMakeLists.txt | 1 + sql/mf_iocache_encr.cc | 297 ++++++++++++++++++ sql/mysqld.cc | 4 + sql/mysqld.h | 1 + sql/sys_vars.cc | 7 + storage/myisam/mi_cache.c | 1 + unittest/gunit/CMakeLists.txt | 1 + unittest/gunit/mf_iocache-t.cc | 148 +++++++++ 22 files changed, 942 insertions(+), 44 deletions(-) create mode 100644 mysql-test/r/percona_encrypt_tmp_files.result create mode 100644 mysql-test/suite/sys_vars/r/encrypt_tmp_files_basic.result create mode 100644 mysql-test/suite/sys_vars/t/encrypt_tmp_files_basic.test create mode 100644 mysql-test/t/percona_encrypt_tmp_files-master.opt create mode 100644 mysql-test/t/percona_encrypt_tmp_files.test create mode 100644 sql/mf_iocache_encr.cc create mode 100644 unittest/gunit/mf_iocache-t.cc diff --git a/include/my_aes.h b/include/my_aes.h index c5f7e8574459..080b4331ec53 100644 --- a/include/my_aes.h +++ b/include/my_aes.h @@ -67,6 +67,12 @@ enum my_aes_opmode /** String representations of the supported AES modes. Keep in sync with my_aes_opmode */ extern const char *my_aes_opmode_names[]; +#ifdef __cplusplus + #define CPP_DEFAULT_PARAM(v) = v +#else + #define CPP_DEFAULT_PARAM(v) +#endif + /** Encrypt a buffer using AES @@ -83,9 +89,9 @@ extern const char *my_aes_opmode_names[]; int my_aes_encrypt(const unsigned char *source, uint32 source_length, unsigned char *dest, - const unsigned char *key, uint32 key_length, + const unsigned char *key, uint32 key_length, enum my_aes_opmode mode, const unsigned char *iv, - bool padding = true); + my_bool padding CPP_DEFAULT_PARAM(TRUE)); /** Decrypt an AES encrypted buffer @@ -106,7 +112,7 @@ int my_aes_decrypt(const unsigned char *source, uint32 source_length, unsigned char *dest, const unsigned char *key, uint32 key_length, enum my_aes_opmode mode, const unsigned char *iv, - bool padding = true); + my_bool padding CPP_DEFAULT_PARAM(TRUE)); /** Calculate the size of a buffer large enough for encrypted data @@ -129,7 +135,7 @@ int my_aes_get_size(uint32 source_length, enum my_aes_opmode mode); @retval FALSE IV not needed */ -my_bool my_aes_needs_iv(my_aes_opmode opmode); +my_bool my_aes_needs_iv(enum my_aes_opmode opmode); C_MODE_END diff --git a/include/my_sys.h b/include/my_sys.h index a709862dbd0f..06d8e13b2a53 100644 --- a/include/my_sys.h +++ b/include/my_sys.h @@ -83,7 +83,7 @@ C_MODE_START #define MY_WAIT_IF_FULL 32 /* Wait and try again if disk full error */ #define MY_IGNORE_BADFD 32 /* my_sync: ignore 'bad descriptor' errors */ #define MY_SYNC_DIR 8192 /* my_create/delete/rename: sync directory */ -#define MY_UNUSED 64 /* Unused (was support for RAID) */ +#define MY_ENCRYPT 64 /* Encrypt IO_CACHE temporary files */ #define MY_FULL_IO 512 /* For my_read - loop intil I/O is complete */ #define MY_DONT_CHECK_FILESIZE 128 /* Option to init_io_cache() */ #define MY_LINK_WARNING 32 /* my_redel() gives warning if links */ @@ -780,6 +780,15 @@ extern void my_qsort2(void *base_ptr, size_t total_elems, size_t size, qsort2_cmp cmp, const void *cmp_argument); void my_store_ptr(uchar *buff, size_t pack_length, my_off_t pos); my_off_t my_get_ptr(uchar *ptr, size_t pack_length); + +typedef int (*io_cache_encr_read_function)(IO_CACHE*, uchar*, size_t); +typedef int (*io_cache_encr_write_function)(IO_CACHE*, const uchar*, size_t); +extern void init_io_cache_encryption_ext( + io_cache_encr_read_function read_function, + io_cache_encr_write_function write_function, + size_t encr_block_size, size_t encr_header_size); +extern void init_io_cache_encryption(my_bool enable); + MY_NODISCARD extern int init_io_cache_ext(IO_CACHE *info,File file,size_t cachesize, enum cache_type type,my_off_t seek_offset, diff --git a/mysql-test/r/mysqld--help-notwin.result b/mysql-test/r/mysqld--help-notwin.result index 6feef8ca22e3..504f65bf7f67 100644 --- a/mysql-test/r/mysqld--help-notwin.result +++ b/mysql-test/r/mysqld--help-notwin.result @@ -247,6 +247,8 @@ The following options may be given as the first argument: is identified as name=library, where name is the plugin name and library is the plugin library in plugin_dir. --encrypt-binlog Encrypt binary logs (including relay logs) + --encrypt-tmp-files Encrypt temporary files (created for filesort, binary log + cache, etc) --end-markers-in-json In JSON output ("EXPLAIN FORMAT=JSON" and optimizer trace), if variable is set to 1, repeats the structure's @@ -1429,6 +1431,7 @@ disconnect-on-expired-password TRUE disconnect-slave-event-count 0 div-precision-increment 4 encrypt-binlog FALSE +encrypt-tmp-files FALSE end-markers-in-json FALSE enforce-gtid-consistency FALSE enforce-storage-engine (No default value) diff --git a/mysql-test/r/percona_encrypt_tmp_files.result b/mysql-test/r/percona_encrypt_tmp_files.result new file mode 100644 index 000000000000..bb23b961e976 --- /dev/null +++ b/mysql-test/r/percona_encrypt_tmp_files.result @@ -0,0 +1,132 @@ +SET @binlog_format_saved = @@global.binlog_format; +SET GLOBAL binlog_format='ROW'; +SET SESSION binlog_format='ROW'; +CREATE TABLE t1(a INT) ENGINE=MyISAM; +INSERT INTO t1 VALUES(1), (2); +DELETE FROM t1 WHERE a = 1; +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize status OK +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +DROP TABLE t1; +CREATE TABLE universal_seq (seq INT) ENGINE=InnoDB; +INSERT INTO universal_seq VALUES +(0), (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); +CREATE TABLE seq_0_to_26 (seq INT) ENGINE=InnoDB; +INSERT INTO seq_0_to_26 SELECT seq FROM universal_seq WHERE seq <= 26 ORDER BY seq; +CREATE TABLE seq_0_to_9 (seq INT) ENGINE=InnoDB; +INSERT INTO seq_0_to_9 SELECT seq FROM universal_seq WHERE seq <= 9 ORDER BY seq; +CREATE TABLE seq_1_to_15 (seq INT) ENGINE=InnoDB; +INSERT INTO seq_1_to_15 SELECT seq FROM universal_seq WHERE seq <= 15 AND seq >= 1 ORDER BY seq; +CREATE TABLE seq_1_to_8 (seq INT) ENGINE=InnoDB; +INSERT INTO seq_1_to_8 SELECT seq FROM universal_seq WHERE seq <= 8 AND seq >= 1 ORDER BY seq; +CREATE TABLE seq_16_to_30 (seq INT) ENGINE=InnoDB; +INSERT INTO seq_16_to_30 SELECT seq FROM universal_seq WHERE seq <= 30 AND seq >= 16 ORDER BY seq; +CREATE TABLE seq_31_to_40 (seq INT) ENGINE=InnoDB; +INSERT INTO seq_31_to_40 SELECT seq FROM universal_seq WHERE seq <= 40 AND seq >= 31 ORDER BY seq; +CREATE TABLE t1(v VARCHAR(10), c CHAR(10), t TEXT, KEY(v), KEY(c), KEY(t(10))); +INSERT INTO t1(v) SELECT CONCAT(CHAR(ASCII('a') + s2.seq), REPEAT(' ', s1.seq)) +FROM seq_0_to_9 AS s1, seq_0_to_26 AS s2; +UPDATE t1 SET c = v, t = v; +SELECT sql_big_result t, COUNT(t) FROM t1 GROUP BY t LIMIT 10; +t COUNT(t) +a 10 +b 10 +c 10 +d 10 +e 10 +f 10 +g 10 +h 10 +i 10 +j 10 +DROP TABLE t1; +RESET MASTER; +SET @saved_binlog_cache_size = @@global.binlog_cache_size; +SET GLOBAL binlog_cache_size = 8192; +CREATE TABLE t1 (a TEXT) ENGINE=InnoDB; +START TRANSACTION; +INSERT t1 SELECT REPEAT(seq, 1000) FROM seq_1_to_15; +COMMIT; +START TRANSACTION; +INSERT t1 SELECT REPEAT(seq, 1000) FROM seq_1_to_8; +COMMIT; +CREATE TABLE t2 (a TEXT) ENGINE=InnoDB; +START TRANSACTION; +INSERT t2 SELECT REPEAT(seq, 1000) FROM seq_1_to_15; +SAVEPOINT foo; +INSERT t2 SELECT REPEAT(seq, 1000) FROM seq_16_to_30; +ROLLBACK TO SAVEPOINT foo; +INSERT t2 SELECT REPEAT(seq, 1000) FROM seq_31_to_40; +COMMIT; +SHOW BINLOG EVENTS; +FLUSH BINARY LOGS; +DROP TABLE t1, t2; +SET GLOBAL binlog_cache_size = @saved_binlog_cache_size; +SELECT LEFT(a, 10) FROM t1; +LEFT(a, 10) +1111111111 +2222222222 +3333333333 +4444444444 +5555555555 +6666666666 +7777777777 +8888888888 +9999999999 +1010101010 +1111111111 +1212121212 +1313131313 +1414141414 +1515151515 +1111111111 +2222222222 +3333333333 +4444444444 +5555555555 +6666666666 +7777777777 +8888888888 +SELECT LEFT(a, 10) FROM t2; +LEFT(a, 10) +1111111111 +2222222222 +3333333333 +4444444444 +5555555555 +6666666666 +7777777777 +8888888888 +9999999999 +1010101010 +1111111111 +1212121212 +1313131313 +1414141414 +1515151515 +3131313131 +3232323232 +3333333333 +3434343434 +3535353535 +3636363636 +3737373737 +3838383838 +3939393939 +4040404040 +DROP TABLE t1, t2; +DROP TABLE seq_31_to_40; +DROP TABLE seq_16_to_30; +DROP TABLE seq_1_to_8; +DROP TABLE seq_1_to_15; +DROP TABLE seq_0_to_9; +DROP TABLE seq_0_to_26; +DROP TABLE universal_seq; +SET GLOBAL binlog_format = @binlog_format_saved; diff --git a/mysql-test/suite/perfschema/t/show_sanity.test b/mysql-test/suite/perfschema/t/show_sanity.test index c70323f7c434..ffdacc37e89b 100644 --- a/mysql-test/suite/perfschema/t/show_sanity.test +++ b/mysql-test/suite/perfschema/t/show_sanity.test @@ -347,6 +347,7 @@ insert into test.sanity values ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "DELAY_KEY_WRITE"), ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "DISABLED_STORAGE_ENGINES"), ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "DISCONNECT_ON_EXPIRED_PASSWORD"), + ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "ENCRYPT_TMP_FILES"), ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "ENFORCE_GTID_CONSISTENCY"), ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "ENFORCE_STORAGE_ENGINE"), ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "EVENT_SCHEDULER"), diff --git a/mysql-test/suite/sys_vars/r/encrypt_tmp_files_basic.result b/mysql-test/suite/sys_vars/r/encrypt_tmp_files_basic.result new file mode 100644 index 000000000000..45ef826ab825 --- /dev/null +++ b/mysql-test/suite/sys_vars/r/encrypt_tmp_files_basic.result @@ -0,0 +1,29 @@ +SELECT @@global.encrypt_tmp_files; +@@global.encrypt_tmp_files +0 +SELECT @@session.encrypt_tmp_files; +ERROR HY000: Variable 'encrypt_tmp_files' is a GLOBAL variable +SELECT @@encrypt_tmp_files; +@@encrypt_tmp_files +0 +SHOW GLOBAL VARIABLES LIKE 'encrypt_tmp_files'; +Variable_name Value +encrypt_tmp_files OFF +SHOW SESSION VARIABLES LIKE 'encrypt_tmp_files'; +Variable_name Value +encrypt_tmp_files OFF +SHOW VARIABLES LIKE 'encrypt_tmp_files'; +Variable_name Value +encrypt_tmp_files OFF +SELECT * FROM performance_schema.global_variables WHERE variable_name = 'encrypt_tmp_files'; +VARIABLE_NAME VARIABLE_VALUE +encrypt_tmp_files OFF +SELECT * FROM performance_schema.session_variables WHERE variable_name = 'encrypt_tmp_files'; +VARIABLE_NAME VARIABLE_VALUE +encrypt_tmp_files OFF +SET GLOBAL encrypt_tmp_files = 1; +ERROR HY000: Variable 'encrypt_tmp_files' is a read only variable +SET SESSION encrypt_tmp_files = 1; +ERROR HY000: Variable 'encrypt_tmp_files' is a read only variable +SET encrypt_tmp_files = 1; +ERROR HY000: Variable 'encrypt_tmp_files' is a read only variable diff --git a/mysql-test/suite/sys_vars/t/encrypt_tmp_files_basic.test b/mysql-test/suite/sys_vars/t/encrypt_tmp_files_basic.test new file mode 100644 index 000000000000..3a6d2aaddc8d --- /dev/null +++ b/mysql-test/suite/sys_vars/t/encrypt_tmp_files_basic.test @@ -0,0 +1,24 @@ +# +# show the global and session values; +# +SELECT @@global.encrypt_tmp_files; +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +SELECT @@session.encrypt_tmp_files; +SELECT @@encrypt_tmp_files; + +SHOW GLOBAL VARIABLES LIKE 'encrypt_tmp_files'; +SHOW SESSION VARIABLES LIKE 'encrypt_tmp_files'; +SHOW VARIABLES LIKE 'encrypt_tmp_files'; + +SELECT * FROM performance_schema.global_variables WHERE variable_name = 'encrypt_tmp_files'; +SELECT * FROM performance_schema.session_variables WHERE variable_name = 'encrypt_tmp_files'; + +# +# show that it's read-only +# +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +SET GLOBAL encrypt_tmp_files = 1; +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +SET SESSION encrypt_tmp_files = 1; +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +SET encrypt_tmp_files = 1; diff --git a/mysql-test/t/percona_encrypt_tmp_files-master.opt b/mysql-test/t/percona_encrypt_tmp_files-master.opt new file mode 100644 index 000000000000..2b90f4744283 --- /dev/null +++ b/mysql-test/t/percona_encrypt_tmp_files-master.opt @@ -0,0 +1 @@ +--encrypt-tmp-files diff --git a/mysql-test/t/percona_encrypt_tmp_files.test b/mysql-test/t/percona_encrypt_tmp_files.test new file mode 100644 index 000000000000..97cab0225e61 --- /dev/null +++ b/mysql-test/t/percona_encrypt_tmp_files.test @@ -0,0 +1,126 @@ +--source include/have_innodb.inc +--source include/have_myisam.inc + +# Row binlog format to fill binlog cache faster +SET @binlog_format_saved = @@global.binlog_format; +SET GLOBAL binlog_format='ROW'; +SET SESSION binlog_format='ROW'; +--source include/have_binlog_format_row.inc + +if (`SELECT @@global.encrypt_tmp_files = 0`) +{ + --die Test requires --encrypt-tmp-files +} + +--source include/count_sessions.inc + +# +# MyISAM messing around with IO_CACHE::file +# +CREATE TABLE t1(a INT) ENGINE=MyISAM; +INSERT INTO t1 VALUES(1), (2); +DELETE FROM t1 WHERE a = 1; +OPTIMIZE TABLE t1; +CHECK TABLE t1; +DROP TABLE t1; + +CREATE TABLE universal_seq (seq INT) ENGINE=InnoDB; +INSERT INTO universal_seq VALUES + (0), (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); + +CREATE TABLE seq_0_to_26 (seq INT) ENGINE=InnoDB; +INSERT INTO seq_0_to_26 SELECT seq FROM universal_seq WHERE seq <= 26 ORDER BY seq; +CREATE TABLE seq_0_to_9 (seq INT) ENGINE=InnoDB; +INSERT INTO seq_0_to_9 SELECT seq FROM universal_seq WHERE seq <= 9 ORDER BY seq; +CREATE TABLE seq_1_to_15 (seq INT) ENGINE=InnoDB; +INSERT INTO seq_1_to_15 SELECT seq FROM universal_seq WHERE seq <= 15 AND seq >= 1 ORDER BY seq; +CREATE TABLE seq_1_to_8 (seq INT) ENGINE=InnoDB; +INSERT INTO seq_1_to_8 SELECT seq FROM universal_seq WHERE seq <= 8 AND seq >= 1 ORDER BY seq; +CREATE TABLE seq_16_to_30 (seq INT) ENGINE=InnoDB; +INSERT INTO seq_16_to_30 SELECT seq FROM universal_seq WHERE seq <= 30 AND seq >= 16 ORDER BY seq; +CREATE TABLE seq_31_to_40 (seq INT) ENGINE=InnoDB; +INSERT INTO seq_31_to_40 SELECT seq FROM universal_seq WHERE seq <= 40 AND seq >= 31 ORDER BY seq; + +# +# filesort, my_b_pread, seeks in READ_CACHE +# +CREATE TABLE t1(v VARCHAR(10), c CHAR(10), t TEXT, KEY(v), KEY(c), KEY(t(10))); +INSERT INTO t1(v) SELECT CONCAT(CHAR(ASCII('a') + s2.seq), REPEAT(' ', s1.seq)) + FROM seq_0_to_9 AS s1, seq_0_to_26 AS s2; +UPDATE t1 SET c = v, t = v; +SELECT sql_big_result t, COUNT(t) FROM t1 GROUP BY t LIMIT 10; +DROP TABLE t1; + +RESET MASTER; +SET @saved_binlog_cache_size = @@global.binlog_cache_size; +SET GLOBAL binlog_cache_size = 8192; + +connect con1, localhost, root; + +# +# Test the last half-filled block: +# first write 3 blocks, then reinit the file and write one full and one +# partial block. reading the second time must stop in the middle of the +# second block, and NOT read till EOF. +# +CREATE TABLE t1 (a TEXT) ENGINE=InnoDB; +START TRANSACTION; +INSERT t1 SELECT REPEAT(seq, 1000) FROM seq_1_to_15; +COMMIT; +START TRANSACTION; +INSERT t1 SELECT REPEAT(seq, 1000) FROM seq_1_to_8; +COMMIT; + +disconnect con1; +connect con2, localhost, root; + +# +# Test reinit_io_cache(WRITE_CACHE) with non-zero seek_offset: +# Start a transaction, write until the cache goes to disk, +# create a savepoint, write more blocks to disk, rollback to savepoint. +# +CREATE TABLE t2 (a TEXT) ENGINE=InnoDB; +START TRANSACTION; +INSERT t2 SELECT REPEAT(seq, 1000) FROM seq_1_to_15; +SAVEPOINT foo; +INSERT t2 SELECT REPEAT(seq, 1000) FROM seq_16_to_30; +ROLLBACK TO SAVEPOINT foo; +INSERT t2 SELECT REPEAT(seq, 1000) FROM seq_31_to_40; +COMMIT; + +# SHOW BINLOG EVENTS must succeed without 'CORRUPTED BINLOG' error +--disable_result_log +SHOW BINLOG EVENTS; +--enable_result_log + +disconnect con2; +connection default; + +FLUSH BINARY LOGS; + +DROP TABLE t1, t2; + +SET GLOBAL binlog_cache_size = @saved_binlog_cache_size; + +let $MYSQLD_DATADIR = `SELECT @@datadir`; +exec $MYSQL_BINLOG $MYSQLD_DATADIR/master-bin.000001 | $MYSQL; + +SELECT LEFT(a, 10) FROM t1; +SELECT LEFT(a, 10) FROM t2; +DROP TABLE t1, t2; + +DROP TABLE seq_31_to_40; +DROP TABLE seq_16_to_30; +DROP TABLE seq_1_to_8; +DROP TABLE seq_1_to_15; +DROP TABLE seq_0_to_9; +DROP TABLE seq_0_to_26; +DROP TABLE universal_seq; + +--source include/wait_until_count_sessions.inc + +SET GLOBAL binlog_format = @binlog_format_saved; diff --git a/mysys/mf_iocache.c b/mysys/mf_iocache.c index 0ca2d625cd8b..4f1d6d90ae4f 100644 --- a/mysys/mf_iocache.c +++ b/mysys/mf_iocache.c @@ -79,6 +79,10 @@ MY_NODISCARD static int _my_b_cache_write_r(IO_CACHE *info, const uchar *Buffer, size_t Count); +static io_cache_encr_read_function _my_b_encr_read= NULL; +static io_cache_encr_write_function _my_b_encr_write= NULL; +static size_t io_cache_encr_block_size= 0, io_cache_encr_header_size= 0; + /* Setup internal pointers inside IO_CACHE @@ -87,7 +91,7 @@ static int _my_b_cache_write_r(IO_CACHE *info, const uchar *Buffer, info IO_CACHE handler NOTES - This is called on automaticly on init or reinit of IO_CACHE + This is called on automatically on init or reinit of IO_CACHE It must be called externally if one moves or copies an IO_CACHE object. */ @@ -115,34 +119,86 @@ init_functions(IO_CACHE* info) info->read_function= NULL; /* Force a core if used */ info->write_function= NULL; /* Force a core if used */ - switch (type) { - case READ_NET: - /* - Must be initialized by the caller. The problem is that - _my_b_net_read has to be defined in sql directory because of - the dependency on THD, and therefore cannot be visible to - programs that link against mysys but know nothing about THD, such - as myisamchk - */ - break; - case SEQ_READ_APPEND: - info->read_function = _my_b_seq_read; - break; - case READ_CACHE: - case WRITE_CACHE: - case READ_FIFO: - info->read_function= - info->share ? _my_b_cache_read_r : _my_b_cache_read; - info->write_function= - info->share ? _my_b_cache_write_r : _my_b_cache_write; - break; - default: - DBUG_ASSERT(0); + if (info->myflags & MY_ENCRYPT) + { + switch (type) + { + case READ_CACHE: + info->read_function = _my_b_encr_read; + break; + case WRITE_CACHE: + info->write_function = _my_b_encr_write; + break; + default: + DBUG_ASSERT(0); + } + } + else + { + switch (type) + { + case READ_NET: + /* + Must be initialized by the caller. The problem is that + _my_b_net_read has to be defined in sql directory because of + the dependency on THD, and therefore cannot be visible to + programs that link against mysys but know nothing about THD, such + as myisamchk + */ + break; + case SEQ_READ_APPEND: + info->read_function = _my_b_seq_read; + break; + case READ_CACHE: + case WRITE_CACHE: + case READ_FIFO: + info->read_function= + info->share ? _my_b_cache_read_r : _my_b_cache_read; + info->write_function= + info->share ? _my_b_cache_write_r : _my_b_cache_write; + break; + default: + DBUG_ASSERT(0); + } } setup_io_cache(info); } +/* + Initialize IO_CACHE encryption subsystem + + SYNOPSIS + init_io_cache_encryption_ext() + read_function pointer to a function for reading encrypted data + write_function pointer to a function for writing encrypted data + encr_block_size cipher block size + encr_header_size encyption header size + + RETURN + void + +*/ + +void init_io_cache_encryption_ext( + io_cache_encr_read_function read_function, + io_cache_encr_write_function write_function, + size_t encr_block_size, size_t encr_header_size) +{ + DBUG_ENTER("init_io_cache_encryption_ext"); + DBUG_ASSERT((read_function == NULL && write_function == NULL && + encr_block_size == 0 && encr_header_size == 0) || + (read_function != NULL && write_function != NULL && + encr_block_size > 0)); + + _my_b_encr_read= read_function; + _my_b_encr_write= write_function; + io_cache_encr_block_size= encr_block_size; + io_cache_encr_header_size= encr_header_size; + + DBUG_VOID_RETURN; +} + /* Initialize an IO_CACHE object @@ -191,6 +247,7 @@ int init_io_cache_ext(IO_CACHE *info, File file, size_t cachesize, if (file >= 0) { + DBUG_ASSERT(!(cache_myflags & MY_ENCRYPT)); pos= mysql_file_tell(file, MYF(0)); if ((pos == (my_off_t) -1) && (my_errno() == ESPIPE)) { @@ -209,6 +266,12 @@ int init_io_cache_ext(IO_CACHE *info, File file, size_t cachesize, else info->seek_not_done= MY_TEST(seek_offset != pos); } + else + if (type == WRITE_CACHE && _my_b_encr_read) + { + cache_myflags|= MY_ENCRYPT; + DBUG_ASSERT(seek_offset == 0); + } info->disk_writes= 0; info->share=0; @@ -218,6 +281,7 @@ int init_io_cache_ext(IO_CACHE *info, File file, size_t cachesize, min_cache=use_async_io ? IO_SIZE*4 : IO_SIZE*2; if (type == READ_CACHE || type == SEQ_READ_APPEND) { /* Assume file isn't growing */ + DBUG_ASSERT(!(cache_myflags & MY_ENCRYPT)); if (!(cache_myflags & MY_DONT_CHECK_FILESIZE)) { /* Calculate end of file to avoid allocating oversized buffers */ @@ -253,16 +317,21 @@ int init_io_cache_ext(IO_CACHE *info, File file, size_t cachesize, buffer_block= cachesize; if (type == SEQ_READ_APPEND) buffer_block *= 2; + else if (cache_myflags & MY_ENCRYPT) + buffer_block= 2 * (buffer_block + io_cache_encr_block_size) + + io_cache_encr_header_size; + if (cachesize == min_cache) flags|= (myf) MY_WME; if ((info->buffer= (uchar*) my_malloc(key_memory_IO_CACHE, buffer_block, flags)) != 0) { - info->write_buffer=info->buffer; if (type == SEQ_READ_APPEND) info->write_buffer = info->buffer + cachesize; - info->alloced_buffer=1; + else + info->write_buffer= info->buffer; + info->alloced_buffer= 1; break; /* Enough memory found */ } if (cachesize == min_cache) @@ -396,8 +465,22 @@ my_bool reinit_io_cache(IO_CACHE *info, enum cache_type type, } else { - info->write_end=(info->buffer + info->buffer_length - - (seek_offset & (IO_SIZE-1))); + if (info->myflags & MY_ENCRYPT) + { + info->write_end= info->write_buffer + info->buffer_length; + if (seek_offset && info->file != -1) + { + info->read_end= info->buffer; + _my_b_encr_read(info, 0, 0); /* prefill the buffer */ + info->write_pos= info->read_pos; + info->seek_not_done= 1; + } + } + else + { + info->write_end=(info->buffer + info->buffer_length - + (seek_offset & (IO_SIZE-1))); + } info->end_of_file= ~(my_off_t) 0; } } @@ -1051,6 +1134,7 @@ static int _my_b_cache_read_r(IO_CACHE *cache, uchar *Buffer, size_t Count) size_t length, diff_length, left_length= 0; IO_CACHE_SHARE *cshare= cache->share; DBUG_ENTER("_my_b_cache_read_r"); + DBUG_ASSERT(!(cache->myflags & MY_ENCRYPT)); while (Count) { @@ -1220,6 +1304,8 @@ static int _my_b_seq_read(IO_CACHE *info, uchar *Buffer, size_t Count) my_off_t pos_in_file; save_count=Count; + DBUG_ASSERT(!(info->myflags & MY_ENCRYPT)); + lock_append_buffer(info); /* pos_in_file always point on where info->buffer was read */ @@ -1428,6 +1514,7 @@ static int _my_b_cache_write_r(IO_CACHE *info, const uchar *Buffer, if (res) return res; + DBUG_ASSERT(!(info->myflags & MY_ENCRYPT)); DBUG_ASSERT(info->share); copy_to_read_buffer(info, Buffer, old_pos_in_file); @@ -1450,6 +1537,7 @@ int my_b_append(IO_CACHE *info, const uchar *Buffer, size_t Count) day, we might need to add a call to copy_to_read_buffer(). */ DBUG_ASSERT(!info->share); + DBUG_ASSERT(!(info->myflags & MY_ENCRYPT)); lock_append_buffer(info); rest_length= (size_t) (info->write_end - info->write_pos); @@ -1516,6 +1604,7 @@ int my_block_write(IO_CACHE *info, const uchar *Buffer, size_t Count, day, we might need to add a call to copy_to_read_buffer(). */ DBUG_ASSERT(!info->share); + DBUG_ASSERT(!(info->myflags & MY_ENCRYPT)); if (pos < info->pos_in_file) { @@ -1593,6 +1682,7 @@ int my_b_flush_io_cache(IO_CACHE *info, int need_append_buffer_lock) { if (append_cache) { + DBUG_ASSERT(!(info->myflags & MY_ENCRYPT)); if (mysql_file_write(info->file, info->write_buffer, length, info->myflags | MY_NABP)) info->error= -1; diff --git a/mysys/mf_iocache2.c b/mysys/mf_iocache2.c index 946168dce90f..e48bc4338ebc 100644 --- a/mysys/mf_iocache2.c +++ b/mysys/mf_iocache2.c @@ -200,10 +200,16 @@ void my_b_seek(IO_CACHE *info,my_off_t pos) size_t my_b_fill(IO_CACHE *info) { - my_off_t pos_in_file=(info->pos_in_file+ - (size_t) (info->read_end - info->buffer)); + my_off_t pos_in_file; size_t diff_length, length, max_length; + if (info->myflags & MY_ENCRYPT) + { + DBUG_ASSERT(info->read_pos == info->read_end); + return _my_b_read(info, 0, 0) ? 0 : info->read_end - info->read_pos; + } + pos_in_file= info->pos_in_file + (size_t) (info->read_end - info->buffer); + if (info->seek_not_done) { /* File touched, do seek */ if (mysql_file_seek(info->file, pos_in_file, MY_SEEK_SET,MYF(0)) == @@ -240,6 +246,13 @@ size_t my_b_fill(IO_CACHE *info) int my_b_pread(IO_CACHE *info, uchar *Buffer, size_t Count, my_off_t pos) { + if (info->myflags & MY_ENCRYPT) + { + my_b_seek(info, pos); + return my_b_read(info, Buffer, Count); + } + + /* backward compatibility behavior. XXX remove it? */ if (mysql_file_pread(info->file, Buffer, Count, pos, info->myflags | MY_NABP)) return info->error= -1; diff --git a/mysys_ssl/my_aes_openssl.cc b/mysys_ssl/my_aes_openssl.cc index 5e7048440ed6..739c51db6784 100644 --- a/mysys_ssl/my_aes_openssl.cc +++ b/mysys_ssl/my_aes_openssl.cc @@ -120,7 +120,7 @@ int my_aes_encrypt(const unsigned char *source, uint32 source_length, unsigned char *dest, const unsigned char *key, uint32 key_length, enum my_aes_opmode mode, const unsigned char *iv, - bool padding) + my_bool padding) { #if OPENSSL_VERSION_NUMBER < 0x10100000L EVP_CIPHER_CTX ctx_value; @@ -182,7 +182,7 @@ int my_aes_decrypt(const unsigned char *source, uint32 source_length, unsigned char *dest, const unsigned char *key, uint32 key_length, enum my_aes_opmode mode, const unsigned char *iv, - bool padding) + my_bool padding) { #if OPENSSL_VERSION_NUMBER < 0x10100000L EVP_CIPHER_CTX ctx_value; @@ -238,7 +238,7 @@ int my_aes_decrypt(const unsigned char *source, uint32 source_length, return MY_AES_BAD_DATA; } -int my_aes_get_size(uint32 source_length, my_aes_opmode opmode) +int my_aes_get_size(uint32 source_length, enum my_aes_opmode opmode) { const EVP_CIPHER *cipher= aes_evp_type(opmode); size_t block_size; @@ -261,7 +261,7 @@ int my_aes_get_size(uint32 source_length, my_aes_opmode opmode) @retval FALSE IV not needed */ -my_bool my_aes_needs_iv(my_aes_opmode opmode) +my_bool my_aes_needs_iv(enum my_aes_opmode opmode) { const EVP_CIPHER *cipher= aes_evp_type(opmode); int iv_length; diff --git a/mysys_ssl/my_aes_yassl.cc b/mysys_ssl/my_aes_yassl.cc index f387e34ba863..c86e7298c59a 100644 --- a/mysys_ssl/my_aes_yassl.cc +++ b/mysys_ssl/my_aes_yassl.cc @@ -108,7 +108,7 @@ int my_aes_encrypt(const unsigned char *source, uint32 source_length, unsigned char *dest, const unsigned char *key, uint32 key_length, enum my_aes_opmode mode, const unsigned char *iv, - bool padding) + my_bool padding) { MyCipherCtx enc(mode); @@ -160,7 +160,7 @@ int my_aes_decrypt(const unsigned char *source, uint32 source_length, unsigned char *dest, const unsigned char *key, uint32 key_length, enum my_aes_opmode mode, const unsigned char *iv, - bool padding) + my_bool padding) { MyCipherCtx dec(mode); /* 128 bit block used for padding */ @@ -218,7 +218,7 @@ int my_aes_decrypt(const unsigned char *source, uint32 source_length, @return Size of buffer required to store encrypted data */ -int my_aes_get_size(uint32 source_length, my_aes_opmode opmode) +int my_aes_get_size(uint32 source_length, enum my_aes_opmode opmode) { return MY_AES_BLOCK_SIZE * (source_length / MY_AES_BLOCK_SIZE) + MY_AES_BLOCK_SIZE; @@ -235,7 +235,7 @@ int my_aes_get_size(uint32 source_length, my_aes_opmode opmode) @retval FALSE IV not needed */ -my_bool my_aes_needs_iv(my_aes_opmode opmode) +my_bool my_aes_needs_iv(enum my_aes_opmode opmode) { MyCipherCtx enc(opmode); diff --git a/rapid/plugin/group_replication/src/observer_trans.cc b/rapid/plugin/group_replication/src/observer_trans.cc index 6282541f175e..236500e1ece8 100644 --- a/rapid/plugin/group_replication/src/observer_trans.cc +++ b/rapid/plugin/group_replication/src/observer_trans.cc @@ -818,12 +818,16 @@ Transaction_Message::append_cache(IO_CACHE *src) DBUG_ASSERT(src->type == READ_CACHE); uchar *buffer= src->read_pos; - size_t length= my_b_fill(src); + size_t length; if (src->file == -1) { // Read cache size directly when temporary file does not exist. length= my_b_bytes_in_cache(src); } + else + { + length= my_b_fill(src); + } while (length > 0 && !src->error) { diff --git a/sql/CMakeLists.txt b/sql/CMakeLists.txt index 33c82f656b59..78f05c9a054c 100644 --- a/sql/CMakeLists.txt +++ b/sql/CMakeLists.txt @@ -293,6 +293,7 @@ SET(SQL_SOURCE event_scheduler.cc events.cc mf_iocache.cc + mf_iocache_encr.cc mysqld.cc mysqld_thd_manager.cc protocol_callback.cc diff --git a/sql/mf_iocache_encr.cc b/sql/mf_iocache_encr.cc new file mode 100644 index 000000000000..419a48343ef3 --- /dev/null +++ b/sql/mf_iocache_encr.cc @@ -0,0 +1,297 @@ +/* + Copyright (c) 2018, Percona and/or its affiliates. All rights reserved. + Copyright (c) 2010, 2015, MariaDB + + 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 +*/ + +/************************************************************************* + Limitation of encrypted IO_CACHEs + 1. Designed to support temporary files only (open_cached_file, fd=-1) + 2. Created with WRITE_CACHE, later can be reinit_io_cache'ed to + READ_CACHE and WRITE_CACHE in any order arbitrary number of times. + 3. no seeks for writes, but reinit_io_cache(WRITE_CACHE, seek_offset) + is allowed (there's a special hack in reinit_io_cache() for that) +*/ + +#include "my_global.h" +#include "my_sys.h" +#include "my_aes.h" +#include "my_rnd.h" +#include "log.h" +#include "mysql/psi/mysql_file.h" + +/* +The following three constants must be in sync: +1. if 'io_cache_aes_mode' is defined as 'my_aes__cbc', then +'io_cache_nonce_aes_mode' must be defined as 'my_aes__ecb' with the same +. +2. if 'io_cache_aes_mode' is defined as 'my_aes__cbc', then +'io_cache_aes_key_length_bytes' must be equal to ( / 8). +*/ +#define IO_CACHE_AES_KEY_LENGTH_BITS 256 +#define PP_CAT(A, B) PP_CAT_I(A, B) +#define PP_CAT_I(A, B) A ## B + +#define IO_CACHE_AES_MODE(BITS, MODE) my_aes_ ## BITS ## MODE +static const enum my_aes_opmode io_cache_aes_mode= + PP_CAT(PP_CAT(my_aes_, IO_CACHE_AES_KEY_LENGTH_BITS), _cbc); +static const enum my_aes_opmode io_cache_nonce_aes_mode= + PP_CAT(PP_CAT(my_aes_, IO_CACHE_AES_KEY_LENGTH_BITS), _ecb); +static const size_t io_cache_aes_key_length_bytes= + IO_CACHE_AES_KEY_LENGTH_BITS / 8; + +typedef uchar io_cache_aes_key_buffer[io_cache_aes_key_length_bytes]; +typedef uchar io_cache_aes_block_buffer[MY_AES_BLOCK_SIZE]; + +struct io_cache_crypt { + ulonglong counter; + uint block_length, last_block_length; + io_cache_aes_key_buffer key; + ulonglong inbuf_counter; +}; + +static void set_iv_from_nonces(io_cache_aes_block_buffer& iv, + my_off_t position, ulonglong counter, + const io_cache_aes_key_buffer& key) +{ + compile_time_assert(sizeof(iv) == MY_AES_BLOCK_SIZE); + compile_time_assert(sizeof(iv) >= sizeof(position) + sizeof(counter)); + + io_cache_aes_block_buffer nonce_block; + compile_time_assert(sizeof(nonce_block) == MY_AES_BLOCK_SIZE); + + memset(nonce_block, 0, sizeof(nonce_block)); + memcpy(nonce_block, &position, sizeof(position)); + memcpy(&nonce_block[sizeof(position)], &counter, sizeof(counter)); + + int encryption_result MY_ATTRIBUTE((unused))= my_aes_encrypt(nonce_block, + sizeof(nonce_block), iv, key, sizeof(key), io_cache_nonce_aes_mode, + NULL, FALSE); + DBUG_ASSERT(encryption_result == sizeof(nonce_block)); +} + +static int my_b_encr_read(IO_CACHE *info, uchar *Buffer, size_t Count) +{ + my_off_t pos_in_file= info->pos_in_file + (info->read_end - info->buffer); + my_off_t old_pos_in_file= pos_in_file, pos_offset= 0; + io_cache_crypt *crypt_data= reinterpret_cast( + info->buffer + info->buffer_length + MY_AES_BLOCK_SIZE); + uchar *wbuffer= reinterpret_cast(&(crypt_data->inbuf_counter)); + uchar *ebuffer= reinterpret_cast(crypt_data + 1); + DBUG_ENTER("my_b_encr_read"); + + if (pos_in_file == info->end_of_file) + { + /* reading past EOF should not empty the cache */ + info->read_pos= info->read_end; + info->error= 0; + DBUG_RETURN(MY_TEST(Count)); + } + + if (info->seek_not_done) + { + size_t wpos; + + pos_offset= pos_in_file % info->buffer_length; + pos_in_file-= pos_offset; + + wpos= pos_in_file / info->buffer_length * crypt_data->block_length; + + if (mysql_file_seek(info->file, wpos, MY_SEEK_SET, MYF(0)) == + MY_FILEPOS_ERROR) + { + info->error= -1; + DBUG_RETURN(1); + } + info->seek_not_done= 0; + } + + do + { + size_t copied; + uint elength, wlength; + int length; + io_cache_aes_block_buffer iv= {0}; + + DBUG_ASSERT(pos_in_file % info->buffer_length == 0); + + if (info->end_of_file - pos_in_file >= info->buffer_length) + wlength= crypt_data->block_length; + else + wlength= crypt_data->last_block_length; + + if (mysql_file_read(info->file, wbuffer, wlength, + info->myflags | MY_NABP)) + { + info->error= -1; + DBUG_RETURN(1); + } + + elength= wlength - (ebuffer - wbuffer); + set_iv_from_nonces(iv, pos_in_file, crypt_data->inbuf_counter, + crypt_data->key); + + length= my_aes_decrypt(ebuffer, elength, info->buffer, + crypt_data->key, sizeof(crypt_data->key), + io_cache_aes_mode, iv, TRUE); + if (length == MY_AES_BAD_DATA) + { + set_my_errno(1); + info->error= -1; + DBUG_RETURN(1); + } + + DBUG_ASSERT(static_cast(length) <= info->buffer_length); + + copied= MY_MIN(Count, length - pos_offset); + + memcpy(Buffer, info->buffer + pos_offset, copied); + Count-= copied; + Buffer+= copied; + + info->read_pos= info->buffer + pos_offset + copied; + info->read_end= info->buffer + length; + info->pos_in_file= pos_in_file; + pos_in_file+= length; + pos_offset= 0; + + if (wlength < crypt_data->block_length && pos_in_file < info->end_of_file) + { + info->error= pos_in_file - old_pos_in_file; + DBUG_RETURN(1); + } + } while (Count); + + DBUG_RETURN(0); +} + +static int my_b_encr_write(IO_CACHE *info, const uchar *Buffer, size_t Count) +{ + io_cache_crypt *crypt_data= reinterpret_cast( + info->buffer + info->buffer_length + MY_AES_BLOCK_SIZE); + uchar *wbuffer= reinterpret_cast(&(crypt_data->inbuf_counter)); + uchar *ebuffer= reinterpret_cast(crypt_data + 1); + DBUG_ENTER("my_b_encr_write"); + + if (Buffer != info->write_buffer) + { + Count-= Count % info->buffer_length; + if (!Count) + DBUG_RETURN(0); + } + + if (info->seek_not_done) + { + DBUG_ASSERT(info->pos_in_file % info->buffer_length == 0); + size_t wpos= + info->pos_in_file / info->buffer_length * crypt_data->block_length; + + if (mysql_file_seek(info->file, wpos, MY_SEEK_SET, MYF(0)) == + MY_FILEPOS_ERROR) + { + info->error= -1; + DBUG_RETURN(1); + } + info->seek_not_done= 0; + } + + if (info->pos_in_file == 0) + { + if (my_rand_buffer(crypt_data->key, sizeof(crypt_data->key))) + { + set_my_errno(1); + info->error= -1; + DBUG_RETURN(1); + } + crypt_data->counter= 0; + +#ifndef DBUG_OFF + crypt_data->block_length= 0; +#endif + } + + do + { + size_t length= MY_MIN(info->buffer_length, Count); + int elength; + uint wlength; + io_cache_aes_block_buffer iv= {0}; + + crypt_data->inbuf_counter= crypt_data->counter; + set_iv_from_nonces(iv, info->pos_in_file, crypt_data->inbuf_counter, + crypt_data->key); + + elength= my_aes_encrypt(Buffer, length, ebuffer, + crypt_data->key, sizeof(crypt_data->key), + io_cache_aes_mode, iv, TRUE); + if (elength == MY_AES_BAD_DATA) + { + set_my_errno(1); + info->error= -1; + DBUG_RETURN(1); + } + wlength= elength + ebuffer - wbuffer; + + if (length == info->buffer_length) + { + /* + block_length should be always the same. that is, encrypting + buffer_length bytes should *always* produce block_length bytes + */ + DBUG_ASSERT(crypt_data->block_length == 0 || + crypt_data->block_length == wlength); + DBUG_ASSERT(static_cast(elength) <= length + MY_AES_BLOCK_SIZE); + crypt_data->block_length= wlength; + } + else + { + /* if we write a partial block, it *must* be the last write */ +#ifndef DBUG_OFF + info->write_function= 0; +#endif + crypt_data->last_block_length= wlength; + } + + if (mysql_file_write(info->file, wbuffer, wlength, + info->myflags | MY_NABP)) + { + info->error= -1; + DBUG_RETURN(1); + } + + Buffer+= length; + Count-= length; + info->pos_in_file+= length; + crypt_data->counter++; + } while (Count); + DBUG_RETURN(0); +} + +/** + Initialize IO_CACHE encryption subsystem +*/ +void init_io_cache_encryption(my_bool enable) +{ + if (enable) + { + sql_print_information("Using encryption for temporary files"); + init_io_cache_encryption_ext(&my_b_encr_read, &my_b_encr_write, + MY_AES_BLOCK_SIZE, sizeof(io_cache_crypt)); + } + else + { + init_io_cache_encryption_ext(NULL, NULL, 0, 0); + } +} diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 7062dc770cf8..b0c08889335f 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -610,6 +610,8 @@ char server_version_suffix[SERVER_VERSION_LENGTH]; char *mysqld_unix_port, *opt_mysql_tmpdir; my_bool encrypt_binlog; +my_bool encrypt_tmp_files; + /** name of reference on left expression in rewritten IN subquery */ const char *in_left_expr_name= ""; /** name of additional condition */ @@ -5275,6 +5277,8 @@ int mysqld_main(int argc, char **argv) if (network_init()) unireg_abort(MYSQLD_ABORT_EXIT); + init_io_cache_encryption(encrypt_tmp_files); + #ifdef _WIN32 #ifndef EMBEDDED_LIBRARY if (opt_require_secure_transport && diff --git a/sql/mysqld.h b/sql/mysqld.h index 7611f3ec45a3..dbf0ada8666d 100644 --- a/sql/mysqld.h +++ b/sql/mysqld.h @@ -332,6 +332,7 @@ extern ulong connection_errors_peer_addr; #endif extern ulong log_warnings; extern my_bool encrypt_binlog; +extern my_bool encrypt_tmp_files; extern bool opt_log_syslog_enable; extern char *opt_log_syslog_tag; #ifndef _WIN32 diff --git a/sql/sys_vars.cc b/sql/sys_vars.cc index d1b22c9909fe..46e6fd71d90d 100644 --- a/sql/sys_vars.cc +++ b/sql/sys_vars.cc @@ -5998,6 +5998,13 @@ static Sys_var_ulong Sys_sp_cache_size( GLOBAL_VAR(stored_program_cache_size), CMD_LINE(REQUIRED_ARG), VALID_RANGE(16, 512 * 1024), DEFAULT(256), BLOCK_SIZE(1)); +static Sys_var_mybool Sys_encrypt_tmp_files( + "encrypt_tmp_files", + "Encrypt temporary files " + "(created for filesort, binary log cache, etc)", + READ_ONLY GLOBAL_VAR(encrypt_tmp_files), + CMD_LINE(OPT_ARG), DEFAULT(FALSE)); + static bool check_pseudo_slave_mode(sys_var *self, THD *thd, set_var *var) { if (check_outside_trx(self, thd, var)) diff --git a/storage/myisam/mi_cache.c b/storage/myisam/mi_cache.c index a111797b2ee9..c1d34366ca1d 100644 --- a/storage/myisam/mi_cache.c +++ b/storage/myisam/mi_cache.c @@ -44,6 +44,7 @@ int _mi_read_cache(IO_CACHE *info, uchar *buff, my_off_t pos, uint length, my_off_t offset; uchar *in_buff_pos; DBUG_ENTER("_mi_read_cache"); + DBUG_ASSERT(!(info->myflags & MY_ENCRYPT)); if (pos < info->pos_in_file) { diff --git a/unittest/gunit/CMakeLists.txt b/unittest/gunit/CMakeLists.txt index f6db4b311fac..05750a942a7c 100644 --- a/unittest/gunit/CMakeLists.txt +++ b/unittest/gunit/CMakeLists.txt @@ -350,6 +350,7 @@ SET(SERVER_TESTS log_throttle make_sortkey mdl_sync + mf_iocache my_decimal opt_costmodel opt_costconstants diff --git a/unittest/gunit/mf_iocache-t.cc b/unittest/gunit/mf_iocache-t.cc new file mode 100644 index 000000000000..e90cc25537b5 --- /dev/null +++ b/unittest/gunit/mf_iocache-t.cc @@ -0,0 +1,148 @@ +/* + Copyright (c) 2018, Percona and/or its affiliates. All rights reserved. + Copyright (c) 2010, 2015, MariaDB + + 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 Street, Fifth Floor, Boston, + MA 02111-1301 USA +*/ + +#include "my_config.h" +#include + +#include "m_string.h" +#include "my_sys.h" + +namespace mf_iocache_unittest { + +static const size_t CACHE_SIZE= 16384; + +#define INFO_TAIL ", pos_in_file = " << info.pos_in_file \ + << ", pos_in_mem = " << (*info.current_pos - info.request_pos) + + +#ifdef GTEST_HAS_PARAM_TEST + +class IOCacheTest: public ::testing::TestWithParam +{ + protected: + static const char FILL= 0x5A; + + static bool data_bad(const uchar *buf, size_t len) + { + const uchar *end= buf + len; + while (buf < end) + if (*buf++ != FILL) + return true; + return false; + } +}; + +INSTANTIATE_TEST_CASE_P(IOCacheTestGroup, IOCacheTest, ::testing::Bool()); + +TEST_P(IOCacheTest, ReadWrite) +{ + IO_CACHE info; + + int res; + uchar buf[CACHE_SIZE + 200]; + memset(buf, FILL, sizeof(buf)); + + bool encryption_enabled= GetParam(); + init_io_cache_encryption(encryption_enabled); + + res= open_cached_file(&info, 0, 0, CACHE_SIZE, 0); + EXPECT_EQ(0, res) << "open_cached_file" << INFO_TAIL; + + res= my_b_write(&info, buf, 100); + EXPECT_TRUE(res == 0 && info.pos_in_file == 0) << "small write" + << INFO_TAIL; + + res= my_b_write(&info, buf, sizeof(buf)); + EXPECT_TRUE(res == 0 && info.pos_in_file == CACHE_SIZE) << "large write" + << INFO_TAIL; + + res= reinit_io_cache(&info, WRITE_CACHE, 250, 0, 0); + EXPECT_EQ(0, res) << "reinit with rewind" << INFO_TAIL; + + res= my_b_write(&info, buf, sizeof(buf)); + EXPECT_EQ(0, res) << "large write" << INFO_TAIL; + + res= my_b_flush_io_cache(&info, 1); + EXPECT_EQ(0, res) << "flush" << INFO_TAIL; + + res= reinit_io_cache(&info, READ_CACHE, 0, 0, 0); + EXPECT_EQ(0, res) << "reinit READ_CACHE" << INFO_TAIL; + + res= my_pread(info.file, buf, 50, 50, MYF(MY_NABP)); + EXPECT_TRUE(res == 0 && data_bad(buf, 50) == encryption_enabled) + << "file must be " << (encryption_enabled ? "un" : "") << "readable"; + + res= my_b_read(&info, buf, 50) || data_bad(buf, 50); + EXPECT_TRUE(res == 0 && info.pos_in_file == 0) << "small read" + << INFO_TAIL; + + res= my_b_read(&info, buf, sizeof(buf)) || data_bad(buf, sizeof(buf)); + EXPECT_TRUE(res == 0 && info.pos_in_file == CACHE_SIZE) << "large read" + << INFO_TAIL; + + close_cached_file(&info); +} + +TEST_P(IOCacheTest, MDEV9044) +{ + int res; + IO_CACHE info; + uchar buf[CACHE_SIZE + 200]; + + bool encryption_enabled= GetParam(); + init_io_cache_encryption(encryption_enabled); + + res= open_cached_file(&info, 0, 0, CACHE_SIZE, 0); + EXPECT_EQ(0, res) << "open_cached_file" << INFO_TAIL; + + res= my_b_write(&info, USTRING_WITH_LEN("first write\0")); + EXPECT_EQ(0, res) << "first write" << INFO_TAIL; + + res= my_b_flush_io_cache(&info, 1); + EXPECT_EQ(0, res) << "flush" << INFO_TAIL; + + res= reinit_io_cache(&info, WRITE_CACHE, 0, 0, 0); + EXPECT_EQ(0, res) << "reinit WRITE_CACHE" << INFO_TAIL; + + res= my_b_write(&info, USTRING_WITH_LEN("second write\0")); + EXPECT_EQ(0, res) << "second write" << INFO_TAIL; + + res= reinit_io_cache(&info, READ_CACHE, 0, 0, 0); + EXPECT_EQ(0, res) << "reinit READ_CACHE" << INFO_TAIL; + + if (encryption_enabled) + { + info.read_pos= info.read_end; + } + res= my_b_fill(&info); + EXPECT_EQ(0, res) << "fill" << INFO_TAIL; + + res= reinit_io_cache(&info, READ_CACHE, 0, 0, 0); + EXPECT_EQ(0, res) << "reinit READ_CACHE" << INFO_TAIL; + + res= my_b_read(&info, buf, sizeof(buf)); + EXPECT_TRUE(res == 1 && strcmp((char*)buf, "second write") == 0) + << "read '" << buf << "'"; + + close_cached_file(&info); +} + +#endif + +} // namespace mf_iocache_unittest From c1bc6c07e9b8926720e2b761beda0386ad7853d5 Mon Sep 17 00:00:00 2001 From: Christopher Powers Date: Wed, 25 Apr 2018 17:41:59 -0500 Subject: [PATCH 0863/1221] Bug#27440735 MEMORY LEAK IN PFS-T UNIT TEST TEST_LOCKER_DISABLED() Detected by ASAN. Destroy files that were previously created. --- storage/perfschema/unittest/pfs-t.cc | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/storage/perfschema/unittest/pfs-t.cc b/storage/perfschema/unittest/pfs-t.cc index 7861c74a401d..d50ae49435fc 100644 --- a/storage/perfschema/unittest/pfs-t.cc +++ b/storage/perfschema/unittest/pfs-t.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2008, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2008, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -899,6 +899,7 @@ void test_init_disabled() psi->create_file(file_key_A, "foo-instrumented", (File) 12); file_A1= lookup_file_by_name("foo-instrumented"); ok(file_A1 != NULL, "file_A1 instrumented"); + destroy_file(reinterpret_cast(psi->get_thread()), file_A1); /* broken key + enabled T-1: no instrumentation */ @@ -1150,6 +1151,8 @@ void test_locker_disabled() psi->create_file(file_key_A, "foo", (File) 12); file_A1= (PSI_file*) lookup_file_by_name("foo"); ok(file_A1 != NULL, "instrumented"); + destroy_file(reinterpret_cast(psi->get_thread()), + reinterpret_cast(file_A1)); socket_class_A->m_enabled= true; socket_A1= psi->init_socket(socket_key_A, NULL, NULL, 0); From 36a7d966311f747973aa6a57d99e36aaa640dff4 Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Wed, 9 May 2018 08:04:16 +0200 Subject: [PATCH 0864/1221] PS-3951: Fix decreasing status counters Status counters were cleaned in THD::release_resources, before an optional thread cleanup. The cleanup could possibly perform a rollback, or other counter-increasing operations. In this case, these additions to the thread local counters were lost during the destruction of the thread, but were visible for a short time, before the thread was removed from the global thread list. This change avoids this issue by moving the global counter update to the end of the release_resources method, ensuring that possible counter-changing operation happen before it. --- mysql-test/r/bug90351.result | 6 ++++++ mysql-test/t/bug90351.test | 26 ++++++++++++++++++++++++++ sql/sql_class.cc | 17 ++++++++++++----- 3 files changed, 44 insertions(+), 5 deletions(-) create mode 100644 mysql-test/r/bug90351.result create mode 100644 mysql-test/t/bug90351.test diff --git a/mysql-test/r/bug90351.result b/mysql-test/r/bug90351.result new file mode 100644 index 000000000000..0546793fd97c --- /dev/null +++ b/mysql-test/r/bug90351.result @@ -0,0 +1,6 @@ +CREATE TABLE t1 (i INTEGER); +INSERT INTO t1 VALUES (1); +SET AUTOCOMMIT=0; +START TRANSACTION; +DELETE FROM t1; +DROP TABLE t1; diff --git a/mysql-test/t/bug90351.test b/mysql-test/t/bug90351.test new file mode 100644 index 000000000000..80dc24a0dffe --- /dev/null +++ b/mysql-test/t/bug90351.test @@ -0,0 +1,26 @@ +# +# Bug 90351: status counters decrease on thread destruction +# +--source include/have_innodb.inc +--source include/count_sessions.inc + +connect (con1,localhost,root,,); + +connection con1; +CREATE TABLE t1 (i INTEGER); +INSERT INTO t1 VALUES (1); +let $con1_id= `SELECT connection_id()`; +SET AUTOCOMMIT=0; +START TRANSACTION; +DELETE FROM t1; + +connection default; +--disable_query_log +eval KILL $con1_id; +--enable_query_log + +connection default; +DROP TABLE t1; + +disconnect con1; +--source include/wait_until_count_sessions.inc diff --git a/sql/sql_class.cc b/sql/sql_class.cc index 4b12ef1aec63..b32c7a143b69 100644 --- a/sql/sql_class.cc +++ b/sql/sql_class.cc @@ -1773,11 +1773,6 @@ void THD::release_resources() mysql_mutex_assert_not_owner(&LOCK_thread_count); DBUG_ASSERT(m_release_resources_done == false); - mysql_mutex_lock(&LOCK_status); - add_to_status(&global_status_var, &status_var); - memset(&status_var, 0, sizeof(status_var)); - mysql_mutex_unlock(&LOCK_status); - /* Ensure that no one is using THD */ mysql_mutex_lock(&LOCK_thd_data); @@ -1802,6 +1797,10 @@ void THD::release_resources() if (m_enable_plugins) plugin_thdvar_cleanup(this); + mysql_mutex_lock(&LOCK_status); + add_to_status(&global_status_var, &status_var); + mysql_mutex_unlock(&LOCK_status); + memset(&status_var, 0, sizeof(status_var)); m_release_resources_done= true; } @@ -1816,6 +1815,14 @@ THD::~THD() if (!m_release_resources_done) release_resources(); +#ifndef DBUG_OFF + { + const char* empty_status[sizeof(status_var)] = {}; + DBUG_ASSERT(memcmp(reinterpret_cast(&status_var), + empty_status, sizeof(status_var))==0); + } +#endif // DBUG_OFF + clear_next_event_pos(); /* Ensure that no one is using THD */ From e74c4aadf2a9bbff507f35193b5c6a2731da6d8b Mon Sep 17 00:00:00 2001 From: Harin Vadodaria Date: Wed, 23 May 2018 10:51:14 +0200 Subject: [PATCH 0865/1221] WL#11645: Backport caching_sha2_password to libmysql 5.7 Description: 1. Added support for caching_sha2_password in libmysqlclient. 2. Added new option MYSQL_OPT_GET_SERVER_PUBLIC_KEY in libmysqlclient. 3. Added support to set MYSQL_OPT_GET_SERVER_PUBLIC_KEY in libmysqlclient based tools. Reviewed-By: Bharathy Satish Ramil Kalimullin --- client/base/mysql_connection_options.cc | 21 ++- client/base/mysql_connection_options.h | 4 +- client/check/mysqlcheck.cc | 8 +- client/mysql.cc | 19 +- client/mysqladmin.cc | 5 + client/mysqlbinlog.cc | 5 + client/mysqldump.c | 6 + client/mysqlimport.c | 8 +- client/mysqlshow.c | 8 +- client/mysqlslap.cc | 8 +- client/mysqltest.cc | 13 +- include/mysql.h | 5 +- include/mysql.h.pp | 6 +- include/mysql/client_authentication.h | 5 +- include/mysql_com.h | 4 + include/sql_common.h | 2 +- libmysql/CMakeLists.txt | 3 +- sql-common/client.c | 30 +++ sql-common/client_authentication.cc | 240 +++++++++++++++++++++++- sql/CMakeLists.txt | 1 + 20 files changed, 370 insertions(+), 31 deletions(-) diff --git a/client/base/mysql_connection_options.cc b/client/base/mysql_connection_options.cc index d3dccdf7565b..5f5a317fa84e 100644 --- a/client/base/mysql_connection_options.cc +++ b/client/base/mysql_connection_options.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -21,6 +21,7 @@ #include "mysql_connection_options.h" #include "abstract_program.h" #include +#include "caching_sha2_passwordopt-vars.h" using Mysql::Tools::Base::Abstract_program; using namespace Mysql::Tools::Base::Options; @@ -112,6 +113,11 @@ void Mysql_connection_options::create_options() "Directory for client-side plugins."); this->create_new_option(&this->m_default_auth, "default_auth", "Default authentication client-side plugin to use."); + this->create_new_option(&this->m_server_public_key, "server_public_key_path", + "Path to file containing server public key"); + this->create_new_option(&this->m_get_server_public_key, + "get-server-public-key", + "Get public key from server"); } MYSQL* Mysql_connection_options::create_connection() @@ -157,6 +163,19 @@ MYSQL* Mysql_connection_options::create_connection() mysql_options4(connection, MYSQL_OPT_CONNECT_ATTR_ADD, "program_name", this->m_program->get_name().c_str()); +#if !defined(HAVE_YASSL) + if (this->m_server_public_key.has_value()) + { + opt_server_public_key= + const_cast (this->m_server_public_key.value().c_str()); + } + + opt_get_server_public_key= this->m_get_server_public_key ? TRUE : FALSE; +#endif /* !HAVE_YASSL */ + + set_server_public_key(connection); + set_get_server_public_key_option(connection); + if (!mysql_real_connect(connection, this->get_null_or_string(this->m_host), this->get_null_or_string(this->m_user), diff --git a/client/base/mysql_connection_options.h b/client/base/mysql_connection_options.h index dbfbfcd9e7c3..0b238f21255f 100644 --- a/client/base/mysql_connection_options.h +++ b/client/base/mysql_connection_options.h @@ -1,5 +1,5 @@ /* - Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -137,6 +137,8 @@ class Mysql_connection_options Nullable m_user; Nullable m_password; Nullable m_default_charset; + Nullable m_server_public_key; + bool m_get_server_public_key; }; } diff --git a/client/check/mysqlcheck.cc b/client/check/mysqlcheck.cc index d534a9c26403..559c192807d0 100644 --- a/client/check/mysqlcheck.cc +++ b/client/check/mysqlcheck.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2001, 2016, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2001, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -24,6 +24,7 @@ #include #include #include +#include #include /* ORACLE_WELCOME_COPYRIGHT_NOTICE */ using namespace Mysql::Tools::Check; @@ -198,6 +199,7 @@ static struct my_option my_long_options[] = &opt_mysql_unix_port, &opt_mysql_unix_port, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, #include +#include {"tables", OPT_TABLES, "Overrides option --databases (-B).", 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}, {"use-frm", OPT_FRM, @@ -488,6 +490,10 @@ static int dbConnect(char *host, char *user, char *passwd) mysql_options(&mysql_connection, MYSQL_OPT_CONNECT_ATTR_RESET, 0); mysql_options4(&mysql_connection, MYSQL_OPT_CONNECT_ATTR_ADD, "program_name", "mysqlcheck"); + + set_server_public_key(&mysql_connection); + set_get_server_public_key_option(&mysql_connection); + if (!(sock = mysql_real_connect(&mysql_connection, host, user, passwd, NULL, opt_mysql_port, opt_mysql_unix_port, 0))) { diff --git a/client/mysql.cc b/client/mysql.cc index 55fed58861af..79a247a0e1cf 100644 --- a/client/mysql.cc +++ b/client/mysql.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -168,9 +168,6 @@ static STATUS status; static ulong select_limit,max_join_size,opt_connect_timeout=0; static char mysql_charsets_dir[FN_REFLEN+1]; static char *opt_plugin_dir= 0, *opt_default_auth= 0; -#if !defined(HAVE_YASSL) -static char *opt_server_public_key= 0; -#endif static const char *xmlmeta[] = { "&", "&", "<", "<", @@ -198,6 +195,7 @@ static char *shared_memory_base_name=0; static uint opt_protocol=0; static const CHARSET_INFO *charset_info= &my_charset_latin1; +#include "caching_sha2_passwordopt-vars.h" #include "sslopt-vars.h" const char *default_dbug_option="d:t:o,/tmp/mysql.trace"; @@ -1813,6 +1811,7 @@ static struct my_option my_long_options[] = &opt_mysql_unix_port, &opt_mysql_unix_port, 0, GET_STR_ALLOC, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, #include "sslopt-longopts.h" +#include "caching_sha2_passwordopt-longopts.h" {"table", 't', "Output in table format.", &output_tables, &output_tables, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, {"tee", OPT_TEE, @@ -1880,12 +1879,6 @@ static struct my_option my_long_options[] = "piped to mysql or loaded using the 'source' command). This is necessary " "when processing output from mysqlbinlog that may contain blobs.", &opt_binary_mode, &opt_binary_mode, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, -#if !defined(HAVE_YASSL) - {"server-public-key-path", OPT_SERVER_PUBLIC_KEY, - "File path to the server public RSA key in PEM format.", - &opt_server_public_key, &opt_server_public_key, 0, - GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, -#endif {"connect-expired-password", 0, "Notify the server that this client is prepared to handle expired " "password sandbox mode.", @@ -5160,10 +5153,8 @@ init_connection_options(MYSQL *mysql) if (opt_default_auth && *opt_default_auth) mysql_options(mysql, MYSQL_DEFAULT_AUTH, opt_default_auth); -#if !defined(HAVE_YASSL) - if (opt_server_public_key && *opt_server_public_key) - mysql_options(mysql, MYSQL_SERVER_PUBLIC_KEY, opt_server_public_key); -#endif + set_server_public_key(mysql); + set_get_server_public_key_option(mysql); if (using_opt_enable_cleartext_plugin) mysql_options(mysql, MYSQL_ENABLE_CLEARTEXT_PLUGIN, diff --git a/client/mysqladmin.cc b/client/mysqladmin.cc index d8082f7e24e1..f402dd417713 100644 --- a/client/mysqladmin.cc +++ b/client/mysqladmin.cc @@ -70,6 +70,7 @@ static my_bool ex_status_printed = 0; /* First output is not relative. */ static uint ex_var_count, max_var_length, max_val_length; #include +#include static void print_version(void); static void usage(void); @@ -210,6 +211,7 @@ static struct my_option my_long_options[] = &interval, &interval, 0, GET_INT, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, #include +#include {"user", 'u', "User for login if not current user.", &user, &user, 0, GET_STR_ALLOC, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, {"verbose", 'v', "Write more information.", &opt_verbose, @@ -416,6 +418,9 @@ int main(int argc,char *argv[]) mysql_options(&mysql, MYSQL_OPT_CAN_HANDLE_EXPIRED_PASSWORDS, &can_handle_passwords); + set_server_public_key(&mysql); + set_get_server_public_key_option(&mysql); + if (sql_connect(&mysql, option_wait)) { /* diff --git a/client/mysqlbinlog.cc b/client/mysqlbinlog.cc index b118e1138ddc..98015b1865f7 100644 --- a/client/mysqlbinlog.cc +++ b/client/mysqlbinlog.cc @@ -34,6 +34,7 @@ #include "my_default.h" #include #include +#include /* That one is necessary for defines of OPTION_NO_FOREIGN_KEY_CHECKS etc */ #include "query_options.h" #include @@ -1870,6 +1871,7 @@ static struct my_option my_long_options[] = &sock, &sock, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, #include +#include {"start-datetime", OPT_START_DATETIME, "Start reading the binlog at first event having a datetime equal or " "posterior to the argument; the argument must be a date and time " @@ -2284,6 +2286,9 @@ static Exit_status safe_connect() mysql_options4(mysql, MYSQL_OPT_CONNECT_ATTR_ADD, "_client_role", "binary_log_listener"); + set_server_public_key(mysql); + set_get_server_public_key_option(mysql); + if (!mysql_real_connect(mysql, host, user, pass, 0, port, sock, 0)) { error("Failed on connect: %s", mysql_error(mysql)); diff --git a/client/mysqldump.c b/client/mysqldump.c index baaf5c85abd3..5844ca5b17f6 100644 --- a/client/mysqldump.c +++ b/client/mysqldump.c @@ -143,6 +143,7 @@ static char * opt_mysql_unix_port=0; static char *opt_bind_addr = NULL; static int first_error=0; #include +#include FILE *md_result_file= 0; FILE *stderror_file=0; @@ -526,6 +527,7 @@ static struct my_option my_long_options[] = " uses old (pre-4.1.1) protocol. Deprecated. Always TRUE", &opt_secure_auth, &opt_secure_auth, 0, GET_BOOL, NO_ARG, 1, 0, 0, 0, 0, 0}, #include +#include {"tab",'T', "Create tab-separated textfile for each table to given path. (Create .sql " "and .txt files.) NOTE: This only works if mysqldump is run on the same " @@ -1681,6 +1683,10 @@ static int connect_to_db(char *host, char *user,char *passwd) mysql_options(&mysql_connection, MYSQL_OPT_CONNECT_ATTR_RESET, 0); mysql_options4(&mysql_connection, MYSQL_OPT_CONNECT_ATTR_ADD, "program_name", "mysqldump"); + + set_server_public_key(&mysql_connection); + set_get_server_public_key_option(&mysql_connection); + if (!(mysql= mysql_real_connect(&mysql_connection,host,user,passwd, NULL,opt_mysql_port,opt_mysql_unix_port, 0))) diff --git a/client/mysqlimport.c b/client/mysqlimport.c index 659386e0f555..c29293dd0387 100644 --- a/client/mysqlimport.c +++ b/client/mysqlimport.c @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -59,6 +59,7 @@ static char * opt_mysql_unix_port=0; static char *opt_plugin_dir= 0, *opt_default_auth= 0; static longlong opt_ignore_lines= -1; #include +#include #if defined (_WIN32) && !defined (EMBEDDED_LIBRARY) static char *shared_memory_base_name=0; @@ -187,6 +188,7 @@ static struct my_option my_long_options[] = &opt_mysql_unix_port, &opt_mysql_unix_port, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, #include +#include {"use-threads", OPT_USE_THREADS, "Load files in parallel. The argument is the number " "of threads to use for loading data.", @@ -497,6 +499,10 @@ static MYSQL *db_connect(char *host, char *database, mysql_options(mysql, MYSQL_OPT_CONNECT_ATTR_RESET, 0); mysql_options4(mysql, MYSQL_OPT_CONNECT_ATTR_ADD, "program_name", "mysqlimport"); + + set_server_public_key(mysql); + set_get_server_public_key_option(mysql); + if (!(mysql_real_connect(mysql,host,user,passwd, database,opt_mysql_port,opt_mysql_unix_port, 0))) diff --git a/client/mysqlshow.c b/client/mysqlshow.c index 055c2ea42d1a..acae757250da 100644 --- a/client/mysqlshow.c +++ b/client/mysqlshow.c @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -28,6 +28,7 @@ #include #include #include +#include #include /* ORACLE_WELCOME_COPYRIGHT_NOTICE */ static char * host=0, *opt_password=0, *user=0; @@ -145,6 +146,10 @@ int main(int argc, char **argv) mysql_options(&mysql, MYSQL_OPT_CONNECT_ATTR_RESET, 0); mysql_options4(&mysql, MYSQL_OPT_CONNECT_ATTR_ADD, "program_name", "mysqlshow"); + + set_server_public_key(&mysql); + set_get_server_public_key_option(&mysql); + if (!(mysql_real_connect(&mysql,host,user,opt_password, (first_argument_uses_wildcards) ? "" : argv[0],opt_mysql_port,opt_mysql_unix_port, @@ -264,6 +269,7 @@ static struct my_option my_long_options[] = &opt_mysql_unix_port, &opt_mysql_unix_port, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, #include +#include {"user", 'u', "User for login if not current user.", &user, &user, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, {"verbose", 'v', diff --git a/client/mysqlslap.cc b/client/mysqlslap.cc index 2c98add735e6..94dcc41bca8b 100644 --- a/client/mysqlslap.cc +++ b/client/mysqlslap.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2005, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -87,6 +87,7 @@ #include #include #include +#include #include #ifdef HAVE_SYS_WAIT_H #include @@ -359,6 +360,10 @@ int main(int argc, char **argv) if (using_opt_enable_cleartext_plugin) mysql_options(&mysql, MYSQL_ENABLE_CLEARTEXT_PLUGIN, (char*) &opt_enable_cleartext_plugin); + + set_server_public_key(&mysql); + set_get_server_public_key_option(&mysql); + if (!opt_only_print) { if (!(mysql_real_connect(&mysql, host, user, opt_password, @@ -705,6 +710,7 @@ static struct my_option my_long_options[] = {"sql_mode", 0, "Specify sql-mode to run mysqlslap tool.", &sql_mode, &sql_mode, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, #include +#include {"user", 'u', "User for login if not current user.", &user, &user, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, {"verbose", 'v', diff --git a/client/mysqltest.cc b/client/mysqltest.cc index 8f6dbf571dc2..61501c2cb1b1 100644 --- a/client/mysqltest.cc +++ b/client/mysqltest.cc @@ -165,9 +165,6 @@ static my_bool is_windows= 0; static char **default_argv; static const char *load_default_groups[]= { "mysqltest", "client", 0 }; static char line_buffer[MAX_DELIMITER_LENGTH], *line_buffer_pos= line_buffer; -#if !defined(HAVE_YASSL) -static const char *opt_server_public_key= 0; -#endif static my_bool can_handle_expired_passwords= TRUE; /* Info on properties that can be set with --enable_X and --disable_X */ @@ -299,6 +296,7 @@ typedef Prealloced_array Q_lines; Q_lines *q_lines; #include "sslopt-vars.h" +#include struct Parser { @@ -5744,6 +5742,10 @@ void safe_connect(MYSQL* mysql, const char *name, const char *host, "program_name", "mysqltest"); mysql_options(mysql, MYSQL_OPT_CAN_HANDLE_EXPIRED_PASSWORDS, &can_handle_expired_passwords); + + set_server_public_key(mysql); + set_get_server_public_key_option(mysql); + while(!mysql_real_connect(mysql, host,user, pass, db, port, sock, CLIENT_MULTI_STATEMENTS | CLIENT_REMEMBER_OPTIONS)) { @@ -5849,6 +5851,10 @@ int connect_n_handle_errors(struct st_command *command, mysql_options4(con, MYSQL_OPT_CONNECT_ATTR_ADD, "program_name", "mysqltest"); mysql_options(con, MYSQL_OPT_CAN_HANDLE_EXPIRED_PASSWORDS, &can_handle_expired_passwords); + + set_server_public_key(con); + set_get_server_public_key_option(con); + while (!mysql_real_connect(con, host, user, pass, db, port, sock ? sock: 0, CLIENT_MULTI_STATEMENTS)) { @@ -7102,6 +7108,7 @@ static struct my_option my_long_options[] = &sp_protocol, &sp_protocol, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, #include "sslopt-longopts.h" +#include {"tail-lines", OPT_TAIL_LINES, "Number of lines of the result to include in a failure report.", &opt_tail_lines, &opt_tail_lines, 0, diff --git a/include/mysql.h b/include/mysql.h index 768e541ca4b3..2bcd2b368c4f 100644 --- a/include/mysql.h +++ b/include/mysql.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -166,7 +166,8 @@ enum mysql_option MYSQL_OPT_SSL_ENFORCE, MYSQL_OPT_MAX_ALLOWED_PACKET, MYSQL_OPT_NET_BUFFER_LENGTH, MYSQL_OPT_TLS_VERSION, - MYSQL_OPT_SSL_MODE + MYSQL_OPT_SSL_MODE, + MYSQL_OPT_GET_SERVER_PUBLIC_KEY }; /** diff --git a/include/mysql.h.pp b/include/mysql.h.pp index 7583af65ac93..7db03d5dd592 100644 --- a/include/mysql.h.pp +++ b/include/mysql.h.pp @@ -180,6 +180,9 @@ void get_salt_from_password(unsigned char *res, const char *password); void make_password_from_salt(char *to, const unsigned char *hash_stage2); char *octet2hex(char *to, const char *str, unsigned int len); +my_bool generate_sha256_scramble(unsigned char *dst, size_t dst_size, + const char *src, size_t src_size, const char *rnd, + size_t rnd_size); char *get_tty_password(const char *opt_message); const char *mysql_errno_to_sqlstate(unsigned int mysql_errno); my_bool my_thread_init(void); @@ -362,7 +365,8 @@ MYSQL_OPT_SSL_ENFORCE, MYSQL_OPT_MAX_ALLOWED_PACKET, MYSQL_OPT_NET_BUFFER_LENGTH, MYSQL_OPT_TLS_VERSION, - MYSQL_OPT_SSL_MODE + MYSQL_OPT_SSL_MODE, + MYSQL_OPT_GET_SERVER_PUBLIC_KEY }; struct st_mysql_options_extention; struct st_mysql_options { diff --git a/include/mysql/client_authentication.h b/include/mysql/client_authentication.h index 894357934db2..e40929d9920d 100644 --- a/include/mysql/client_authentication.h +++ b/include/mysql/client_authentication.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -22,6 +22,9 @@ C_MODE_START int sha256_password_auth_client(MYSQL_PLUGIN_VIO *vio, MYSQL *mysql); int sha256_password_init(char *, size_t, int, va_list); int sha256_password_deinit(void); +int caching_sha2_password_auth_client(MYSQL_PLUGIN_VIO *vio, MYSQL *mysql); +int caching_sha2_password_init(char *, size_t, int, va_list); +int caching_sha2_password_deinit(void); C_MODE_END #endif diff --git a/include/mysql_com.h b/include/mysql_com.h index 4b540bf4c90c..9ce72fbaa19c 100644 --- a/include/mysql_com.h +++ b/include/mysql_com.h @@ -587,6 +587,10 @@ char *octet2hex(char *to, const char *str, unsigned int len); /* end of password.c */ +my_bool generate_sha256_scramble(unsigned char *dst, size_t dst_size, + const char *src, size_t src_size, const char *rnd, + size_t rnd_size); + char *get_tty_password(const char *opt_message); const char *mysql_errno_to_sqlstate(unsigned int mysql_errno); diff --git a/include/sql_common.h b/include/sql_common.h index 1ecd95740587..2fe33dac26ea 100644 --- a/include/sql_common.h +++ b/include/sql_common.h @@ -103,7 +103,7 @@ struct st_mysql_options_extention { char *server_public_key_path; size_t connection_attributes_length; my_bool enable_cleartext_plugin; - my_bool unused0; /* Former ssl_enforce */ + my_bool get_server_public_key; char *tls_version; /* TLS version option */ long ssl_ctx_flags; /* SSL ctx options flag */ unsigned int ssl_mode; diff --git a/libmysql/CMakeLists.txt b/libmysql/CMakeLists.txt index 79fe2f8bb3b2..6ad0b92f00e1 100644 --- a/libmysql/CMakeLists.txt +++ b/libmysql/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2006, 2017, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 2018, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -188,6 +188,7 @@ SET(CLIENT_SOURCES ../sql/net_serv.cc ../sql-common/pack.c ../sql/auth/password.c + ../sql/auth/sha2_password_common.cc ) IF (WIN32 AND OPENSSL_APPLINK_C) diff --git a/sql-common/client.c b/sql-common/client.c index 2f5deeb54ac6..67e980e4e113 100644 --- a/sql-common/client.c +++ b/sql-common/client.c @@ -108,6 +108,8 @@ my_bool net_flush(NET *net); } #define native_password_plugin_name "mysql_native_password" +#define caching_sha2_password_plugin_name "caching_sha2_password" + PSI_memory_key key_memory_mysql_options; PSI_memory_key key_memory_MYSQL_DATA; @@ -3203,6 +3205,22 @@ static auth_plugin_t sha256_password_client_plugin= NULL, sha256_password_auth_client }; + +static auth_plugin_t caching_sha2_password_client_plugin= +{ + MYSQL_CLIENT_AUTHENTICATION_PLUGIN, + MYSQL_CLIENT_AUTHENTICATION_PLUGIN_INTERFACE_VERSION, + caching_sha2_password_plugin_name, + "Oracle Inc", + "SHA2 based authentication with salt", + {1, 0, 0}, + "GPL", + NULL, + caching_sha2_password_init, + caching_sha2_password_deinit, + NULL, + caching_sha2_password_auth_client +}; #endif #ifdef AUTHENTICATION_WIN extern auth_plugin_t win_auth_client_plugin; @@ -3225,6 +3243,7 @@ struct st_mysql_client_plugin *mysql_client_builtins[]= (struct st_mysql_client_plugin *)&clear_password_client_plugin, #if defined(HAVE_OPENSSL) (struct st_mysql_client_plugin *) &sha256_password_client_plugin, + (struct st_mysql_client_plugin *) &caching_sha2_password_client_plugin, #endif #ifdef AUTHENTICATION_WIN (struct st_mysql_client_plugin *)&win_auth_client_plugin, @@ -5699,6 +5718,12 @@ mysql_options(MYSQL *mysql,enum mysql_option option, const void *arg) EXTENSION_SET_STRING(&mysql->options, server_public_key_path, arg); break; + case MYSQL_OPT_GET_SERVER_PUBLIC_KEY: + ENSURE_EXTENSIONS_PRESENT(&mysql->options); + mysql->options.extension->get_server_public_key= + (*(my_bool *)arg) ? TRUE : FALSE; + break; + case MYSQL_OPT_CONNECT_ATTR_RESET: ENSURE_EXTENSIONS_PRESENT(&mysql->options); if (my_hash_inited(&mysql->options.extension->connection_attributes)) @@ -5935,6 +5960,11 @@ mysql_get_option(MYSQL *mysql, enum mysql_option option, const void *arg) *((char **)arg)= mysql->options.extension ? mysql->options.extension->server_public_key_path : NULL; break; + case MYSQL_OPT_GET_SERVER_PUBLIC_KEY: + *((my_bool *)arg)= (mysql->options.extension && + mysql->options.extension->get_server_public_key) + ? TRUE : FALSE; + break; case MYSQL_ENABLE_CLEARTEXT_PLUGIN: *((my_bool *)arg)= (mysql->options.extension && mysql->options.extension->enable_cleartext_plugin) ? diff --git a/sql-common/client_authentication.cc b/sql-common/client_authentication.cc index 5d960d913fd4..eee7fc0ed90a 100644 --- a/sql-common/client_authentication.cc +++ b/sql-common/client_authentication.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -35,9 +35,12 @@ #endif #endif #include "mysql/plugin.h" +#include "sha2.h" #define MAX_CIPHER_LENGTH 1024 +#define SHA2_SCRAMBLE_LENGTH SHA256_DIGEST_LENGTH + #if !defined(HAVE_YASSL) mysql_mutex_t g_public_key_mutex; #endif @@ -279,4 +282,237 @@ int sha256_password_auth_client(MYSQL_PLUGIN_VIO *vio, MYSQL *mysql) DBUG_RETURN(CR_OK); } -#endif +/* caching_sha2_password */ + +int caching_sha2_password_init(char *, size_t, int, va_list) +{ + return 0; +} + +int caching_sha2_password_deinit(void) +{ + return 0; +} + +static bool is_secure_transport(MYSQL *mysql) +{ + if (!mysql || !mysql->net.vio) + return false; + switch (mysql->net.vio->type) + { + case VIO_TYPE_SSL: + { + if (mysql_get_ssl_cipher(mysql) == NULL) + return false; + } + // Fall through + case VIO_TYPE_SHARED_MEMORY: + // Fall through + case VIO_TYPE_SOCKET: + return true; + default: + return false; + } + return false; +} + +/** + Authenticate the client using the RSA or TLS and a SHA2 salted password. + + @param vio Provides plugin access to communication channel + @param mysql Client connection handler + + @return Error status + @retval CR_ERROR An error occurred. + @retval CR_OK Authentication succeeded. +*/ + +#if !defined(HAVE_YASSL) +static char request_public_key= '\2'; +#endif /* !HAVE_YASSL */ +static char fast_auth_success= '\3'; +static char perform_full_authentication= '\4'; + +int caching_sha2_password_auth_client(MYSQL_PLUGIN_VIO *vio, MYSQL *mysql) +{ + bool uses_password= mysql->passwd[0] != 0; +#if !defined(HAVE_YASSL) + unsigned char encrypted_password[MAX_CIPHER_LENGTH]; + RSA *public_key= NULL; + bool got_public_key_from_server= false; +#endif /* !HAVE_YASSL */ + bool connection_is_secure= false; + unsigned char scramble_pkt[20]; + unsigned char *pkt; + + DBUG_ENTER("caching_sha2_password_auth_client"); + + /* + Get the scramble from the server because we need it when sending encrypted + password. + */ + if (vio->read_packet(vio, &pkt) != SCRAMBLE_LENGTH + 1) + { + DBUG_PRINT("info", ("Scramble is not of correct length.")); + DBUG_RETURN(CR_ERROR); + } + + if (pkt[SCRAMBLE_LENGTH] != '\0') + { + DBUG_PRINT("info", ("Missing protocol token in scramble data.")); + DBUG_RETURN(CR_ERROR); + } + + /* + Copy the scramble to the stack or it will be lost on the next use of the + net buffer. + */ + memcpy(scramble_pkt, pkt, SCRAMBLE_LENGTH); + + connection_is_secure= is_secure_transport(mysql); + + if (!uses_password) + { + /* We're not using a password */ + static const unsigned char zero_byte= '\0'; + if (vio->write_packet(vio, &zero_byte, 1)) + DBUG_RETURN(CR_ERROR); + DBUG_RETURN(CR_OK); + } + else + { + /* Password is a 0-terminated byte array ('\0' character included) */ + unsigned int passwd_len= + static_cast(strlen(mysql->passwd) + 1); + int pkt_len= 0; + { + /* First try with SHA2 scramble */ + unsigned char sha2_scramble[SHA2_SCRAMBLE_LENGTH]; + if (generate_sha256_scramble(sha2_scramble, SHA2_SCRAMBLE_LENGTH, + mysql->passwd, passwd_len - 1, + (char *)scramble_pkt, SCRAMBLE_LENGTH)) + { + set_mysql_extended_error(mysql, CR_AUTH_PLUGIN_ERR, unknown_sqlstate, + ER(CR_AUTH_PLUGIN_ERR), + "caching_sha2_password", + "Failed to generate scramble"); + DBUG_RETURN(CR_ERROR); + } + + if (vio->write_packet(vio, sha2_scramble, SHA2_SCRAMBLE_LENGTH)) + DBUG_RETURN(CR_ERROR); + + if ((pkt_len= vio->read_packet(vio, &pkt)) == -1) + DBUG_RETURN(CR_ERROR); + + if (pkt_len == 1 && *pkt == fast_auth_success) + DBUG_RETURN(CR_OK); + + /* An OK packet would follow */ + } + + if (pkt_len != 1 || *pkt != perform_full_authentication) + { + DBUG_PRINT("info", ("Unexpected reply from server.")); + DBUG_RETURN(CR_ERROR); + } + + if (!connection_is_secure) + { +#ifndef HAVE_YASSL + /* If connection isn't secure attempt to get the RSA public key file */ + public_key= rsa_init(mysql); + + if (public_key == NULL && mysql->options.extension && + mysql->options.extension->get_server_public_key) + { + // If no public key; request one from the server. + if (vio->write_packet(vio, (const unsigned char *)&request_public_key, + 1)) + DBUG_RETURN(CR_ERROR); + + if ((pkt_len= vio->read_packet(vio, &pkt)) <= 0) + DBUG_RETURN(CR_ERROR); + BIO *bio= BIO_new_mem_buf(pkt, pkt_len); + public_key= PEM_read_bio_RSA_PUBKEY(bio, NULL, NULL, NULL); + BIO_free(bio); + if (public_key == 0) + { + ERR_clear_error(); + DBUG_PRINT("info", ("Failed to parse public key")); + DBUG_RETURN(CR_ERROR); + } + got_public_key_from_server= true; + } + + if (public_key) + { + /* + An arbitrary limitation based on the assumption that passwords + larger than e.g. 15 symbols don't contribute to security. + Note also that it's further restricted to RSA_size() - 11 down + below, so this leaves 471 bytes of possible RSA key sizes which + should be reasonably future-proof. + We avoid heap allocation for speed reasons. + */ + char passwd_scramble[512]; + + if (passwd_len > sizeof(passwd_scramble)) + { + /* password too long for the buffer */ + if (got_public_key_from_server) RSA_free(public_key); + DBUG_PRINT("info", ("Password is too long.")); + DBUG_RETURN(CR_ERROR); + } + memmove(passwd_scramble, mysql->passwd, passwd_len); + + /* Obfuscate the plain text password with the session scramble */ + xor_string(passwd_scramble, passwd_len - 1, (char *)scramble_pkt, + SCRAMBLE_LENGTH); + /* Encrypt the password and send it to the server */ + int cipher_length= RSA_size(public_key); + /* + When using RSA_PKCS1_OAEP_PADDING the password length must be less + than RSA_size(rsa) - 41. + */ + if (passwd_len + 41 >= (unsigned)cipher_length) + { + /* password message is to long */ + if (got_public_key_from_server) + RSA_free(public_key); + DBUG_PRINT("info", ("Password is too long to be encrypted using " + "given public key.")); + DBUG_RETURN(CR_ERROR); + } + RSA_public_encrypt(passwd_len, (unsigned char *)passwd_scramble, + encrypted_password, public_key, + RSA_PKCS1_OAEP_PADDING); + if (got_public_key_from_server) + RSA_free(public_key); + + if (vio->write_packet(vio, (uchar *)encrypted_password, cipher_length)) + DBUG_RETURN(CR_ERROR); + } + else + { +#endif /* !HAVE_YASSL */ + set_mysql_extended_error(mysql, CR_AUTH_PLUGIN_ERR, unknown_sqlstate, + ER(CR_AUTH_PLUGIN_ERR), + "caching_sha2_password", + "Authentication requires secure connection."); + DBUG_RETURN(CR_ERROR); +#ifndef HAVE_YASSL + } +#endif /* !HAVE_YASSL */ + } + else + { + /* The vio is encrypted already; just send the plain text passwd */ + if (vio->write_packet(vio, (uchar *)mysql->passwd, passwd_len)) + DBUG_RETURN(CR_ERROR); + } + } + DBUG_RETURN(CR_OK); +} + +#endif /* HAVE_OPENSSL */ diff --git a/sql/CMakeLists.txt b/sql/CMakeLists.txt index 0bf31070d21b..501383f65878 100644 --- a/sql/CMakeLists.txt +++ b/sql/CMakeLists.txt @@ -290,6 +290,7 @@ SET(SQL_SOURCE srv_session.cc srv_session_info_service.cc srv_session_service.cc + auth/sha2_password_common.cc ) IF(NOT WIN32) From be70f59d88026f45195901b55bd4ea6dd866ef33 Mon Sep 17 00:00:00 2001 From: Aakanksha Verma Date: Wed, 23 May 2018 16:11:42 +0530 Subject: [PATCH 0866/1221] Bug #26654685 INDEX->ID == BTR_PAGE_GET_INDEX_ID(PAGE) AT BTR_CUR_SEARCH_TO_NTH_LEVEL IN BTR/B PROBLEM During foreign key check , index id value is getting corrupted as the check for index creation being aborted is not done. FIX Add the check , backported patch from 8.0 jimmy's patch Reviewed by : Jimmy Yang RB: 19262 --- .../innodb/r/bulk_create_index_online.result | 17 ++++++++ .../innodb/t/bulk_create_index_online.test | 41 +++++++++++++++++++ storage/innobase/dict/dict0dict.cc | 7 +++- 3 files changed, 63 insertions(+), 2 deletions(-) create mode 100644 mysql-test/suite/innodb/r/bulk_create_index_online.result create mode 100644 mysql-test/suite/innodb/t/bulk_create_index_online.test diff --git a/mysql-test/suite/innodb/r/bulk_create_index_online.result b/mysql-test/suite/innodb/r/bulk_create_index_online.result new file mode 100644 index 000000000000..9a90d1ecbde5 --- /dev/null +++ b/mysql-test/suite/innodb/r/bulk_create_index_online.result @@ -0,0 +1,17 @@ +CREATE TABLE parent (a INT PRIMARY KEY, b INT NOT NULL) ENGINE = InnoDB; +INSERT INTO parent VALUES(1,2),(2,2); +CREATE TABLE child (a INT PRIMARY KEY, b INT NOT NULL) ENGINE = InnoDB; +INSERT INTO child VALUES (10, 2); +SET DEBUG_SYNC = 'innodb_inplace_alter_table_enter SIGNAL start_create +WAIT_FOR go_ahead'; +CREATE UNIQUE INDEX idx ON parent(b);; +SET DEBUG_SYNC = 'now WAIT_FOR start_create'; +INSERT INTO parent VALUES(4, 2); +SET DEBUG_SYNC = 'now SIGNAL go_ahead'; +ERROR 23000: Duplicate entry '2' for key 'idx' +SET DEBUG_SYNC = 'now SIGNAL conn_add_fk'; +SET DEBUG_SYNC = 'now WAIT_FOR conn_add_fk'; +ALTER TABLE child ADD CONSTRAINT cfx FOREIGN KEY (b) REFERENCES parent(b); +ERROR HY000: Cannot add foreign key constraint +DROP TABLE child; +DROP TABLE parent; diff --git a/mysql-test/suite/innodb/t/bulk_create_index_online.test b/mysql-test/suite/innodb/t/bulk_create_index_online.test new file mode 100644 index 000000000000..33b1e70f1c54 --- /dev/null +++ b/mysql-test/suite/innodb/t/bulk_create_index_online.test @@ -0,0 +1,41 @@ +# +## Bug #26654685 INDEX->ID == BTR_PAGE_GET_INDEX_ID(PAGE) +## AT BTR_CUR_SEARCH_TO_NTH_LEVEL IN BTR/B +# + +--source include/have_debug.inc +--source include/have_debug_sync.inc +--source include/count_sessions.inc +--source include/have_innodb_16k.inc + +CREATE TABLE parent (a INT PRIMARY KEY, b INT NOT NULL) ENGINE = InnoDB; +INSERT INTO parent VALUES(1,2),(2,2); +CREATE TABLE child (a INT PRIMARY KEY, b INT NOT NULL) ENGINE = InnoDB; +INSERT INTO child VALUES (10, 2); + +# This should rollback due to dup key +SET DEBUG_SYNC = 'innodb_inplace_alter_table_enter SIGNAL start_create +WAIT_FOR go_ahead'; +--send CREATE UNIQUE INDEX idx ON parent(b); + +# Make table ref_count > 1 +connect (con1,localhost,root,,); +connection con1; +SET DEBUG_SYNC = 'now WAIT_FOR start_create'; +INSERT INTO parent VALUES(4, 2); +SET DEBUG_SYNC = 'now SIGNAL go_ahead'; + +connection default; +--error ER_DUP_ENTRY +reap; +SET DEBUG_SYNC = 'now SIGNAL conn_add_fk'; + +connection con1; +SET DEBUG_SYNC = 'now WAIT_FOR conn_add_fk'; +--error ER_CANNOT_ADD_FOREIGN +ALTER TABLE child ADD CONSTRAINT cfx FOREIGN KEY (b) REFERENCES parent(b); + +--connection default +DROP TABLE child; +DROP TABLE parent; +--disconnect con1 diff --git a/storage/innobase/dict/dict0dict.cc b/storage/innobase/dict/dict0dict.cc index b2def1edffea..1bbf50791f28 100644 --- a/storage/innobase/dict/dict0dict.cc +++ b/storage/innobase/dict/dict0dict.cc @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2017, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2018, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2012, Facebook Inc. This program is free software; you can redistribute it and/or modify it under @@ -3378,7 +3378,10 @@ dict_foreign_find_index( && dict_foreign_qualify_index( table, col_names, columns, n_cols, index, types_idx, - check_charsets, check_null)) { + check_charsets, check_null) + && (!(index->online_status == + ONLINE_INDEX_ABORTED_DROPPED + ||index->online_status == ONLINE_INDEX_ABORTED))) { return(index); } From 57c70aac7a5cc26de21f1765996f75200ac54fd9 Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Fri, 14 Jul 2017 13:00:22 +0200 Subject: [PATCH 0867/1221] PS-4506: Backport fixes from 8.0 for InnoDB memcached Plugin The original commit is available at: https://github.com/mysql/mysql-server/commit/fb8d67315d2cb956976d838559ae3bdc88d43d60 Bug#26442367 ALWAYS ENABLE SAFE_MUTEX IN DEBUG BUILDS, MAKE MEMCACHED UBSAN CLEAN CMakeLists.txt contains this snippet: IF(NOT WITH_INNODB_MEMCACHED) FOREACH(LANG C CXX) SET(CMAKE_${LANG}_FLAGS_DEBUG "${CMAKE_${LANG}_FLAGS_DEBUG} -DSAFE_MUTEX") ENDFOREACH() ENDIF() There should be no reason to disable safe_mutex if we build the memcached plugin (it actually hides real problems, since most pushbuild trees are built with the memcached plugin) Enabling it, and running with UBSAN shows a few issues, with wrong mutex usage, and undefined behaviour. engine.h src/innodb_engine.c:312:32: runtime error: index 1 out of bounds for type 'feature_info [1]' config_parser.c config_parser.c:127:24: runtime error: signed integer overflow: 1073741824 * 1024 cannot be represented in type 'int' innodb_engine.c the double assignment to innodb_eng->info.info.features[0].feature *must* be wrong innodb_engine.c:2341:3: runtime error: null pointer passed as argument 1, which is declared to never be null sql/sql_plugin.cc ==9557== Process terminating with default action of signal 6 (SIGABRT) ==9557== at 0x78DD91F: raise (in /usr/lib64/libc-2.24.so) ==9557== by 0x78DF519: abort (in /usr/lib64/libc-2.24.so) ==9557== by 0x78D5DA6: __assert_fail_base (in /usr/lib64/libc-2.24.so) ==9557== by 0x78D5E51: __assert_fail (in /usr/lib64/libc-2.24.so) ==9557== by 0x23272A2: safe_mutex_assert_owner (thr_mutex.h:151) ==9557== by 0x2329884: plugin_del(st_plugin_int*) (sql_plugin.cc:1097) ==9557== by 0x232C1FB: memcached_shutdown() (sql_plugin.cc:1889) ==9557== by 0x21BC38F: clean_up(bool) (mysqld.cc:1925) ==9557== by 0x21C7A72: mysqld_main(int, char**) (mysqld.cc:5970) ==9557== by 0x21B9795: main (main.cc:25) Change-Id: I88bb6751ae8401d4c461a6f03dd098f016e0adf8 --- CMakeLists.txt | 10 ++++------ .../daemon_memcached/include/memcached/engine.h | 2 +- .../daemon_memcached/utilities/config_parser.c | 8 ++++---- .../innodb_memcache/src/handler_api.cc | 2 +- .../innodb_memcache/src/innodb_engine.c | 5 +++-- sql/sql_plugin.cc | 2 ++ 6 files changed, 15 insertions(+), 14 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 89fc3d94d4bc..b9c24eff4267 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -458,12 +458,10 @@ IF(NOT CMAKE_BUILD_TYPE ENDIF() # Add safemutex for debug configurations -IF(NOT WITH_INNODB_MEMCACHED) - FOREACH(LANG C CXX) - SET(CMAKE_${LANG}_FLAGS_DEBUG - "${CMAKE_${LANG}_FLAGS_DEBUG} -DSAFE_MUTEX") - ENDFOREACH() -ENDIF() +FOREACH(LANG C CXX) + SET(CMAKE_${LANG}_FLAGS_DEBUG + "${CMAKE_${LANG}_FLAGS_DEBUG} -DSAFE_MUTEX") +ENDFOREACH() # Set commonly used variables diff --git a/plugin/innodb_memcached/daemon_memcached/include/memcached/engine.h b/plugin/innodb_memcached/daemon_memcached/include/memcached/engine.h index a75ba94e29e4..4d4f833243f9 100644 --- a/plugin/innodb_memcached/daemon_memcached/include/memcached/engine.h +++ b/plugin/innodb_memcached/daemon_memcached/include/memcached/engine.h @@ -204,7 +204,7 @@ extern "C" { /** * An array containing all of the features the engine supports */ - feature_info features[1]; + feature_info features[3]; } engine_info; /** diff --git a/plugin/innodb_memcached/daemon_memcached/utilities/config_parser.c b/plugin/innodb_memcached/daemon_memcached/utilities/config_parser.c index 1332bd91a6bd..ffb54c86bafb 100644 --- a/plugin/innodb_memcached/daemon_memcached/utilities/config_parser.c +++ b/plugin/innodb_memcached/daemon_memcached/utilities/config_parser.c @@ -120,10 +120,10 @@ int parse_config(const char *str, struct config_item *items, FILE *error) { switch (items[ii].datatype) { case DT_SIZE: { - char *sfx = "kmgt"; - int multiplier = 1; - int m = 1; - for (char *p = sfx; *p != '\0'; ++p) { + const char *sfx = "kmgt"; + long int multiplier = 1; + long int m = 1; + for (const char *p = sfx; *p != '\0'; ++p) { m *= 1024; char *ptr = strchr(value, *p); if (ptr == NULL) { diff --git a/plugin/innodb_memcached/innodb_memcache/src/handler_api.cc b/plugin/innodb_memcached/innodb_memcache/src/handler_api.cc index f2dccb8629af..a6183af89b6a 100644 --- a/plugin/innodb_memcached/innodb_memcache/src/handler_api.cc +++ b/plugin/innodb_memcached/innodb_memcache/src/handler_api.cc @@ -80,7 +80,7 @@ handler_create_thd( } my_thread_init(); - thd = new THD; + thd = new (std::nothrow) THD; if (!thd) { return(NULL); diff --git a/plugin/innodb_memcached/innodb_memcache/src/innodb_engine.c b/plugin/innodb_memcached/innodb_memcache/src/innodb_engine.c index 51d005273b66..99930e2c7db7 100644 --- a/plugin/innodb_memcached/innodb_memcache/src/innodb_engine.c +++ b/plugin/innodb_memcached/innodb_memcache/src/innodb_engine.c @@ -205,7 +205,7 @@ create_instance( innodb_eng->info.info.features[0].feature = ENGINE_FEATURE_CAS; innodb_eng->info.info.features[1].feature = ENGINE_FEATURE_PERSISTENT_STORAGE; - innodb_eng->info.info.features[0].feature = ENGINE_FEATURE_LRU; + innodb_eng->info.info.features[2].feature = ENGINE_FEATURE_LRU; /* Now call create_instace() for the default engine */ err_ret = create_my_default_instance(interface, get_server_api, @@ -1979,7 +1979,8 @@ innodb_get( conn_data->mul_col_buf_len = int_len; } - memcpy(conn_data->mul_col_buf, int_buf, int_len); + if (int_len > 0) + memcpy(conn_data->mul_col_buf, int_buf, int_len); result->col_value[MCI_COL_VALUE].value_str = conn_data->mul_col_buf; diff --git a/sql/sql_plugin.cc b/sql/sql_plugin.cc index 835fb2eb75c7..3181de7c6c57 100644 --- a/sql/sql_plugin.cc +++ b/sql/sql_plugin.cc @@ -1973,10 +1973,12 @@ void memcached_shutdown(void) { plugin_deinitialize(plugin, true); + mysql_mutex_lock(&LOCK_plugin_delete); mysql_mutex_lock(&LOCK_plugin); plugin->state= PLUGIN_IS_DYING; plugin_del(plugin); mysql_mutex_unlock(&LOCK_plugin); + mysql_mutex_unlock(&LOCK_plugin_delete); } } From c5c5d3fe0797abf83929fa3c9e3450f62db6e472 Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Fri, 14 Jul 2017 13:00:22 +0200 Subject: [PATCH 0868/1221] PS-4506: Backport fixes from 8.0 for InnoDB memcached Plugin The original commit is available at: https://github.com/mysql/mysql-server/commit/fb8d67315d2cb956976d838559ae3bdc88d43d60 Bug#26442367 ALWAYS ENABLE SAFE_MUTEX IN DEBUG BUILDS, MAKE MEMCACHED UBSAN CLEAN CMakeLists.txt contains this snippet: IF(NOT WITH_INNODB_MEMCACHED) FOREACH(LANG C CXX) SET(CMAKE_${LANG}_FLAGS_DEBUG "${CMAKE_${LANG}_FLAGS_DEBUG} -DSAFE_MUTEX") ENDFOREACH() ENDIF() There should be no reason to disable safe_mutex if we build the memcached plugin (it actually hides real problems, since most pushbuild trees are built with the memcached plugin) Enabling it, and running with UBSAN shows a few issues, with wrong mutex usage, and undefined behaviour. engine.h src/innodb_engine.c:312:32: runtime error: index 1 out of bounds for type 'feature_info [1]' config_parser.c config_parser.c:127:24: runtime error: signed integer overflow: 1073741824 * 1024 cannot be represented in type 'int' innodb_engine.c the double assignment to innodb_eng->info.info.features[0].feature *must* be wrong innodb_engine.c:2341:3: runtime error: null pointer passed as argument 1, which is declared to never be null sql/sql_plugin.cc ==9557== Process terminating with default action of signal 6 (SIGABRT) ==9557== at 0x78DD91F: raise (in /usr/lib64/libc-2.24.so) ==9557== by 0x78DF519: abort (in /usr/lib64/libc-2.24.so) ==9557== by 0x78D5DA6: __assert_fail_base (in /usr/lib64/libc-2.24.so) ==9557== by 0x78D5E51: __assert_fail (in /usr/lib64/libc-2.24.so) ==9557== by 0x23272A2: safe_mutex_assert_owner (thr_mutex.h:151) ==9557== by 0x2329884: plugin_del(st_plugin_int*) (sql_plugin.cc:1097) ==9557== by 0x232C1FB: memcached_shutdown() (sql_plugin.cc:1889) ==9557== by 0x21BC38F: clean_up(bool) (mysqld.cc:1925) ==9557== by 0x21C7A72: mysqld_main(int, char**) (mysqld.cc:5970) ==9557== by 0x21B9795: main (main.cc:25) Change-Id: I88bb6751ae8401d4c461a6f03dd098f016e0adf8 --- CMakeLists.txt | 2 +- .../daemon_memcached/include/memcached/engine.h | 2 +- .../daemon_memcached/utilities/config_parser.c | 8 ++++---- .../innodb_memcached/innodb_memcache/src/handler_api.cc | 2 +- .../innodb_memcached/innodb_memcache/src/innodb_engine.c | 5 +++-- sql/sql_plugin.cc | 2 ++ 6 files changed, 12 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8764fc4fa09e..4d3c6981ef65 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -394,7 +394,7 @@ ENDIF() # Add safemutex for debug configurations, except on Windows # (safemutex has never worked on Windows) -IF(WITH_DEBUG AND NOT WIN32 AND NOT WITH_INNODB_MEMCACHED) +IF(WITH_DEBUG AND NOT WIN32) FOREACH(LANG C CXX) SET(CMAKE_${LANG}_FLAGS_DEBUG "${CMAKE_${LANG}_FLAGS_DEBUG} -DSAFE_MUTEX") diff --git a/plugin/innodb_memcached/daemon_memcached/include/memcached/engine.h b/plugin/innodb_memcached/daemon_memcached/include/memcached/engine.h index a75ba94e29e4..4d4f833243f9 100644 --- a/plugin/innodb_memcached/daemon_memcached/include/memcached/engine.h +++ b/plugin/innodb_memcached/daemon_memcached/include/memcached/engine.h @@ -204,7 +204,7 @@ extern "C" { /** * An array containing all of the features the engine supports */ - feature_info features[1]; + feature_info features[3]; } engine_info; /** diff --git a/plugin/innodb_memcached/daemon_memcached/utilities/config_parser.c b/plugin/innodb_memcached/daemon_memcached/utilities/config_parser.c index 1332bd91a6bd..ffb54c86bafb 100644 --- a/plugin/innodb_memcached/daemon_memcached/utilities/config_parser.c +++ b/plugin/innodb_memcached/daemon_memcached/utilities/config_parser.c @@ -120,10 +120,10 @@ int parse_config(const char *str, struct config_item *items, FILE *error) { switch (items[ii].datatype) { case DT_SIZE: { - char *sfx = "kmgt"; - int multiplier = 1; - int m = 1; - for (char *p = sfx; *p != '\0'; ++p) { + const char *sfx = "kmgt"; + long int multiplier = 1; + long int m = 1; + for (const char *p = sfx; *p != '\0'; ++p) { m *= 1024; char *ptr = strchr(value, *p); if (ptr == NULL) { diff --git a/plugin/innodb_memcached/innodb_memcache/src/handler_api.cc b/plugin/innodb_memcached/innodb_memcache/src/handler_api.cc index 8ca3cf92221a..fcd9a9064b11 100644 --- a/plugin/innodb_memcached/innodb_memcache/src/handler_api.cc +++ b/plugin/innodb_memcached/innodb_memcache/src/handler_api.cc @@ -80,7 +80,7 @@ handler_create_thd( } my_thread_init(); - thd = new THD; + thd = new (std::nothrow) THD; if (!thd) { return(NULL); diff --git a/plugin/innodb_memcached/innodb_memcache/src/innodb_engine.c b/plugin/innodb_memcached/innodb_memcache/src/innodb_engine.c index 51d005273b66..99930e2c7db7 100644 --- a/plugin/innodb_memcached/innodb_memcache/src/innodb_engine.c +++ b/plugin/innodb_memcached/innodb_memcache/src/innodb_engine.c @@ -205,7 +205,7 @@ create_instance( innodb_eng->info.info.features[0].feature = ENGINE_FEATURE_CAS; innodb_eng->info.info.features[1].feature = ENGINE_FEATURE_PERSISTENT_STORAGE; - innodb_eng->info.info.features[0].feature = ENGINE_FEATURE_LRU; + innodb_eng->info.info.features[2].feature = ENGINE_FEATURE_LRU; /* Now call create_instace() for the default engine */ err_ret = create_my_default_instance(interface, get_server_api, @@ -1979,7 +1979,8 @@ innodb_get( conn_data->mul_col_buf_len = int_len; } - memcpy(conn_data->mul_col_buf, int_buf, int_len); + if (int_len > 0) + memcpy(conn_data->mul_col_buf, int_buf, int_len); result->col_value[MCI_COL_VALUE].value_str = conn_data->mul_col_buf; diff --git a/sql/sql_plugin.cc b/sql/sql_plugin.cc index 8ede16d9d22d..e65fa30ac251 100644 --- a/sql/sql_plugin.cc +++ b/sql/sql_plugin.cc @@ -1725,10 +1725,12 @@ void memcached_shutdown(void) { plugin_deinitialize(plugin, true); + mysql_mutex_lock(&LOCK_plugin_delete); mysql_mutex_lock(&LOCK_plugin); plugin->state= PLUGIN_IS_DYING; plugin_del(plugin); mysql_mutex_unlock(&LOCK_plugin); + mysql_mutex_unlock(&LOCK_plugin_delete); } } From c26ec71fef299b244fabbcb462859fc0e9b6575c Mon Sep 17 00:00:00 2001 From: Erlend Dahl Date: Wed, 23 May 2018 15:09:56 +0200 Subject: [PATCH 0869/1221] Revert "WL#11645: Backport caching_sha2_password to libmysql 5.7" Broken build, missing file. --- client/base/mysql_connection_options.cc | 19 -- client/base/mysql_connection_options.h | 2 - client/check/mysqlcheck.cc | 6 - client/mysql.cc | 17 +- client/mysqladmin.cc | 5 - client/mysqlbinlog.cc | 5 - client/mysqldump.c | 6 - client/mysqlimport.c | 6 - client/mysqlshow.c | 6 - client/mysqlslap.cc | 6 - client/mysqltest.cc | 13 +- include/mysql.h | 3 +- include/mysql.h.pp | 6 +- include/mysql/client_authentication.h | 3 - include/mysql_com.h | 4 - include/sql_common.h | 2 +- libmysql/CMakeLists.txt | 1 - sql-common/client.c | 30 --- sql-common/client_authentication.cc | 238 +----------------------- sql/CMakeLists.txt | 1 - 20 files changed, 20 insertions(+), 359 deletions(-) diff --git a/client/base/mysql_connection_options.cc b/client/base/mysql_connection_options.cc index 5f5a317fa84e..ada4a8561079 100644 --- a/client/base/mysql_connection_options.cc +++ b/client/base/mysql_connection_options.cc @@ -21,7 +21,6 @@ #include "mysql_connection_options.h" #include "abstract_program.h" #include -#include "caching_sha2_passwordopt-vars.h" using Mysql::Tools::Base::Abstract_program; using namespace Mysql::Tools::Base::Options; @@ -113,11 +112,6 @@ void Mysql_connection_options::create_options() "Directory for client-side plugins."); this->create_new_option(&this->m_default_auth, "default_auth", "Default authentication client-side plugin to use."); - this->create_new_option(&this->m_server_public_key, "server_public_key_path", - "Path to file containing server public key"); - this->create_new_option(&this->m_get_server_public_key, - "get-server-public-key", - "Get public key from server"); } MYSQL* Mysql_connection_options::create_connection() @@ -163,19 +157,6 @@ MYSQL* Mysql_connection_options::create_connection() mysql_options4(connection, MYSQL_OPT_CONNECT_ATTR_ADD, "program_name", this->m_program->get_name().c_str()); -#if !defined(HAVE_YASSL) - if (this->m_server_public_key.has_value()) - { - opt_server_public_key= - const_cast (this->m_server_public_key.value().c_str()); - } - - opt_get_server_public_key= this->m_get_server_public_key ? TRUE : FALSE; -#endif /* !HAVE_YASSL */ - - set_server_public_key(connection); - set_get_server_public_key_option(connection); - if (!mysql_real_connect(connection, this->get_null_or_string(this->m_host), this->get_null_or_string(this->m_user), diff --git a/client/base/mysql_connection_options.h b/client/base/mysql_connection_options.h index 0b238f21255f..e38b8a37d879 100644 --- a/client/base/mysql_connection_options.h +++ b/client/base/mysql_connection_options.h @@ -137,8 +137,6 @@ class Mysql_connection_options Nullable m_user; Nullable m_password; Nullable m_default_charset; - Nullable m_server_public_key; - bool m_get_server_public_key; }; } diff --git a/client/check/mysqlcheck.cc b/client/check/mysqlcheck.cc index 559c192807d0..b4bf69cfc8db 100644 --- a/client/check/mysqlcheck.cc +++ b/client/check/mysqlcheck.cc @@ -24,7 +24,6 @@ #include #include #include -#include #include /* ORACLE_WELCOME_COPYRIGHT_NOTICE */ using namespace Mysql::Tools::Check; @@ -199,7 +198,6 @@ static struct my_option my_long_options[] = &opt_mysql_unix_port, &opt_mysql_unix_port, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, #include -#include {"tables", OPT_TABLES, "Overrides option --databases (-B).", 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}, {"use-frm", OPT_FRM, @@ -490,10 +488,6 @@ static int dbConnect(char *host, char *user, char *passwd) mysql_options(&mysql_connection, MYSQL_OPT_CONNECT_ATTR_RESET, 0); mysql_options4(&mysql_connection, MYSQL_OPT_CONNECT_ATTR_ADD, "program_name", "mysqlcheck"); - - set_server_public_key(&mysql_connection); - set_get_server_public_key_option(&mysql_connection); - if (!(sock = mysql_real_connect(&mysql_connection, host, user, passwd, NULL, opt_mysql_port, opt_mysql_unix_port, 0))) { diff --git a/client/mysql.cc b/client/mysql.cc index 79a247a0e1cf..dbfa4293dec7 100644 --- a/client/mysql.cc +++ b/client/mysql.cc @@ -168,6 +168,9 @@ static STATUS status; static ulong select_limit,max_join_size,opt_connect_timeout=0; static char mysql_charsets_dir[FN_REFLEN+1]; static char *opt_plugin_dir= 0, *opt_default_auth= 0; +#if !defined(HAVE_YASSL) +static char *opt_server_public_key= 0; +#endif static const char *xmlmeta[] = { "&", "&", "<", "<", @@ -195,7 +198,6 @@ static char *shared_memory_base_name=0; static uint opt_protocol=0; static const CHARSET_INFO *charset_info= &my_charset_latin1; -#include "caching_sha2_passwordopt-vars.h" #include "sslopt-vars.h" const char *default_dbug_option="d:t:o,/tmp/mysql.trace"; @@ -1811,7 +1813,6 @@ static struct my_option my_long_options[] = &opt_mysql_unix_port, &opt_mysql_unix_port, 0, GET_STR_ALLOC, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, #include "sslopt-longopts.h" -#include "caching_sha2_passwordopt-longopts.h" {"table", 't', "Output in table format.", &output_tables, &output_tables, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, {"tee", OPT_TEE, @@ -1879,6 +1880,12 @@ static struct my_option my_long_options[] = "piped to mysql or loaded using the 'source' command). This is necessary " "when processing output from mysqlbinlog that may contain blobs.", &opt_binary_mode, &opt_binary_mode, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, +#if !defined(HAVE_YASSL) + {"server-public-key-path", OPT_SERVER_PUBLIC_KEY, + "File path to the server public RSA key in PEM format.", + &opt_server_public_key, &opt_server_public_key, 0, + GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, +#endif {"connect-expired-password", 0, "Notify the server that this client is prepared to handle expired " "password sandbox mode.", @@ -5153,8 +5160,10 @@ init_connection_options(MYSQL *mysql) if (opt_default_auth && *opt_default_auth) mysql_options(mysql, MYSQL_DEFAULT_AUTH, opt_default_auth); - set_server_public_key(mysql); - set_get_server_public_key_option(mysql); +#if !defined(HAVE_YASSL) + if (opt_server_public_key && *opt_server_public_key) + mysql_options(mysql, MYSQL_SERVER_PUBLIC_KEY, opt_server_public_key); +#endif if (using_opt_enable_cleartext_plugin) mysql_options(mysql, MYSQL_ENABLE_CLEARTEXT_PLUGIN, diff --git a/client/mysqladmin.cc b/client/mysqladmin.cc index f402dd417713..d8082f7e24e1 100644 --- a/client/mysqladmin.cc +++ b/client/mysqladmin.cc @@ -70,7 +70,6 @@ static my_bool ex_status_printed = 0; /* First output is not relative. */ static uint ex_var_count, max_var_length, max_val_length; #include -#include static void print_version(void); static void usage(void); @@ -211,7 +210,6 @@ static struct my_option my_long_options[] = &interval, &interval, 0, GET_INT, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, #include -#include {"user", 'u', "User for login if not current user.", &user, &user, 0, GET_STR_ALLOC, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, {"verbose", 'v', "Write more information.", &opt_verbose, @@ -418,9 +416,6 @@ int main(int argc,char *argv[]) mysql_options(&mysql, MYSQL_OPT_CAN_HANDLE_EXPIRED_PASSWORDS, &can_handle_passwords); - set_server_public_key(&mysql); - set_get_server_public_key_option(&mysql); - if (sql_connect(&mysql, option_wait)) { /* diff --git a/client/mysqlbinlog.cc b/client/mysqlbinlog.cc index 98015b1865f7..b118e1138ddc 100644 --- a/client/mysqlbinlog.cc +++ b/client/mysqlbinlog.cc @@ -34,7 +34,6 @@ #include "my_default.h" #include #include -#include /* That one is necessary for defines of OPTION_NO_FOREIGN_KEY_CHECKS etc */ #include "query_options.h" #include @@ -1871,7 +1870,6 @@ static struct my_option my_long_options[] = &sock, &sock, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, #include -#include {"start-datetime", OPT_START_DATETIME, "Start reading the binlog at first event having a datetime equal or " "posterior to the argument; the argument must be a date and time " @@ -2286,9 +2284,6 @@ static Exit_status safe_connect() mysql_options4(mysql, MYSQL_OPT_CONNECT_ATTR_ADD, "_client_role", "binary_log_listener"); - set_server_public_key(mysql); - set_get_server_public_key_option(mysql); - if (!mysql_real_connect(mysql, host, user, pass, 0, port, sock, 0)) { error("Failed on connect: %s", mysql_error(mysql)); diff --git a/client/mysqldump.c b/client/mysqldump.c index 5844ca5b17f6..baaf5c85abd3 100644 --- a/client/mysqldump.c +++ b/client/mysqldump.c @@ -143,7 +143,6 @@ static char * opt_mysql_unix_port=0; static char *opt_bind_addr = NULL; static int first_error=0; #include -#include FILE *md_result_file= 0; FILE *stderror_file=0; @@ -527,7 +526,6 @@ static struct my_option my_long_options[] = " uses old (pre-4.1.1) protocol. Deprecated. Always TRUE", &opt_secure_auth, &opt_secure_auth, 0, GET_BOOL, NO_ARG, 1, 0, 0, 0, 0, 0}, #include -#include {"tab",'T', "Create tab-separated textfile for each table to given path. (Create .sql " "and .txt files.) NOTE: This only works if mysqldump is run on the same " @@ -1683,10 +1681,6 @@ static int connect_to_db(char *host, char *user,char *passwd) mysql_options(&mysql_connection, MYSQL_OPT_CONNECT_ATTR_RESET, 0); mysql_options4(&mysql_connection, MYSQL_OPT_CONNECT_ATTR_ADD, "program_name", "mysqldump"); - - set_server_public_key(&mysql_connection); - set_get_server_public_key_option(&mysql_connection); - if (!(mysql= mysql_real_connect(&mysql_connection,host,user,passwd, NULL,opt_mysql_port,opt_mysql_unix_port, 0))) diff --git a/client/mysqlimport.c b/client/mysqlimport.c index c29293dd0387..cb62fd167083 100644 --- a/client/mysqlimport.c +++ b/client/mysqlimport.c @@ -59,7 +59,6 @@ static char * opt_mysql_unix_port=0; static char *opt_plugin_dir= 0, *opt_default_auth= 0; static longlong opt_ignore_lines= -1; #include -#include #if defined (_WIN32) && !defined (EMBEDDED_LIBRARY) static char *shared_memory_base_name=0; @@ -188,7 +187,6 @@ static struct my_option my_long_options[] = &opt_mysql_unix_port, &opt_mysql_unix_port, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, #include -#include {"use-threads", OPT_USE_THREADS, "Load files in parallel. The argument is the number " "of threads to use for loading data.", @@ -499,10 +497,6 @@ static MYSQL *db_connect(char *host, char *database, mysql_options(mysql, MYSQL_OPT_CONNECT_ATTR_RESET, 0); mysql_options4(mysql, MYSQL_OPT_CONNECT_ATTR_ADD, "program_name", "mysqlimport"); - - set_server_public_key(mysql); - set_get_server_public_key_option(mysql); - if (!(mysql_real_connect(mysql,host,user,passwd, database,opt_mysql_port,opt_mysql_unix_port, 0))) diff --git a/client/mysqlshow.c b/client/mysqlshow.c index acae757250da..2a874a456548 100644 --- a/client/mysqlshow.c +++ b/client/mysqlshow.c @@ -28,7 +28,6 @@ #include #include #include -#include #include /* ORACLE_WELCOME_COPYRIGHT_NOTICE */ static char * host=0, *opt_password=0, *user=0; @@ -146,10 +145,6 @@ int main(int argc, char **argv) mysql_options(&mysql, MYSQL_OPT_CONNECT_ATTR_RESET, 0); mysql_options4(&mysql, MYSQL_OPT_CONNECT_ATTR_ADD, "program_name", "mysqlshow"); - - set_server_public_key(&mysql); - set_get_server_public_key_option(&mysql); - if (!(mysql_real_connect(&mysql,host,user,opt_password, (first_argument_uses_wildcards) ? "" : argv[0],opt_mysql_port,opt_mysql_unix_port, @@ -269,7 +264,6 @@ static struct my_option my_long_options[] = &opt_mysql_unix_port, &opt_mysql_unix_port, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, #include -#include {"user", 'u', "User for login if not current user.", &user, &user, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, {"verbose", 'v', diff --git a/client/mysqlslap.cc b/client/mysqlslap.cc index 94dcc41bca8b..0d52e4136dd3 100644 --- a/client/mysqlslap.cc +++ b/client/mysqlslap.cc @@ -87,7 +87,6 @@ #include #include #include -#include #include #ifdef HAVE_SYS_WAIT_H #include @@ -360,10 +359,6 @@ int main(int argc, char **argv) if (using_opt_enable_cleartext_plugin) mysql_options(&mysql, MYSQL_ENABLE_CLEARTEXT_PLUGIN, (char*) &opt_enable_cleartext_plugin); - - set_server_public_key(&mysql); - set_get_server_public_key_option(&mysql); - if (!opt_only_print) { if (!(mysql_real_connect(&mysql, host, user, opt_password, @@ -710,7 +705,6 @@ static struct my_option my_long_options[] = {"sql_mode", 0, "Specify sql-mode to run mysqlslap tool.", &sql_mode, &sql_mode, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, #include -#include {"user", 'u', "User for login if not current user.", &user, &user, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, {"verbose", 'v', diff --git a/client/mysqltest.cc b/client/mysqltest.cc index 61501c2cb1b1..8f6dbf571dc2 100644 --- a/client/mysqltest.cc +++ b/client/mysqltest.cc @@ -165,6 +165,9 @@ static my_bool is_windows= 0; static char **default_argv; static const char *load_default_groups[]= { "mysqltest", "client", 0 }; static char line_buffer[MAX_DELIMITER_LENGTH], *line_buffer_pos= line_buffer; +#if !defined(HAVE_YASSL) +static const char *opt_server_public_key= 0; +#endif static my_bool can_handle_expired_passwords= TRUE; /* Info on properties that can be set with --enable_X and --disable_X */ @@ -296,7 +299,6 @@ typedef Prealloced_array Q_lines; Q_lines *q_lines; #include "sslopt-vars.h" -#include struct Parser { @@ -5742,10 +5744,6 @@ void safe_connect(MYSQL* mysql, const char *name, const char *host, "program_name", "mysqltest"); mysql_options(mysql, MYSQL_OPT_CAN_HANDLE_EXPIRED_PASSWORDS, &can_handle_expired_passwords); - - set_server_public_key(mysql); - set_get_server_public_key_option(mysql); - while(!mysql_real_connect(mysql, host,user, pass, db, port, sock, CLIENT_MULTI_STATEMENTS | CLIENT_REMEMBER_OPTIONS)) { @@ -5851,10 +5849,6 @@ int connect_n_handle_errors(struct st_command *command, mysql_options4(con, MYSQL_OPT_CONNECT_ATTR_ADD, "program_name", "mysqltest"); mysql_options(con, MYSQL_OPT_CAN_HANDLE_EXPIRED_PASSWORDS, &can_handle_expired_passwords); - - set_server_public_key(con); - set_get_server_public_key_option(con); - while (!mysql_real_connect(con, host, user, pass, db, port, sock ? sock: 0, CLIENT_MULTI_STATEMENTS)) { @@ -7108,7 +7102,6 @@ static struct my_option my_long_options[] = &sp_protocol, &sp_protocol, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, #include "sslopt-longopts.h" -#include {"tail-lines", OPT_TAIL_LINES, "Number of lines of the result to include in a failure report.", &opt_tail_lines, &opt_tail_lines, 0, diff --git a/include/mysql.h b/include/mysql.h index 2bcd2b368c4f..43a444b6c5fa 100644 --- a/include/mysql.h +++ b/include/mysql.h @@ -166,8 +166,7 @@ enum mysql_option MYSQL_OPT_SSL_ENFORCE, MYSQL_OPT_MAX_ALLOWED_PACKET, MYSQL_OPT_NET_BUFFER_LENGTH, MYSQL_OPT_TLS_VERSION, - MYSQL_OPT_SSL_MODE, - MYSQL_OPT_GET_SERVER_PUBLIC_KEY + MYSQL_OPT_SSL_MODE }; /** diff --git a/include/mysql.h.pp b/include/mysql.h.pp index 7db03d5dd592..7583af65ac93 100644 --- a/include/mysql.h.pp +++ b/include/mysql.h.pp @@ -180,9 +180,6 @@ void get_salt_from_password(unsigned char *res, const char *password); void make_password_from_salt(char *to, const unsigned char *hash_stage2); char *octet2hex(char *to, const char *str, unsigned int len); -my_bool generate_sha256_scramble(unsigned char *dst, size_t dst_size, - const char *src, size_t src_size, const char *rnd, - size_t rnd_size); char *get_tty_password(const char *opt_message); const char *mysql_errno_to_sqlstate(unsigned int mysql_errno); my_bool my_thread_init(void); @@ -365,8 +362,7 @@ MYSQL_OPT_SSL_ENFORCE, MYSQL_OPT_MAX_ALLOWED_PACKET, MYSQL_OPT_NET_BUFFER_LENGTH, MYSQL_OPT_TLS_VERSION, - MYSQL_OPT_SSL_MODE, - MYSQL_OPT_GET_SERVER_PUBLIC_KEY + MYSQL_OPT_SSL_MODE }; struct st_mysql_options_extention; struct st_mysql_options { diff --git a/include/mysql/client_authentication.h b/include/mysql/client_authentication.h index e40929d9920d..98ed16929740 100644 --- a/include/mysql/client_authentication.h +++ b/include/mysql/client_authentication.h @@ -22,9 +22,6 @@ C_MODE_START int sha256_password_auth_client(MYSQL_PLUGIN_VIO *vio, MYSQL *mysql); int sha256_password_init(char *, size_t, int, va_list); int sha256_password_deinit(void); -int caching_sha2_password_auth_client(MYSQL_PLUGIN_VIO *vio, MYSQL *mysql); -int caching_sha2_password_init(char *, size_t, int, va_list); -int caching_sha2_password_deinit(void); C_MODE_END #endif diff --git a/include/mysql_com.h b/include/mysql_com.h index 9ce72fbaa19c..4b540bf4c90c 100644 --- a/include/mysql_com.h +++ b/include/mysql_com.h @@ -587,10 +587,6 @@ char *octet2hex(char *to, const char *str, unsigned int len); /* end of password.c */ -my_bool generate_sha256_scramble(unsigned char *dst, size_t dst_size, - const char *src, size_t src_size, const char *rnd, - size_t rnd_size); - char *get_tty_password(const char *opt_message); const char *mysql_errno_to_sqlstate(unsigned int mysql_errno); diff --git a/include/sql_common.h b/include/sql_common.h index 2fe33dac26ea..1ecd95740587 100644 --- a/include/sql_common.h +++ b/include/sql_common.h @@ -103,7 +103,7 @@ struct st_mysql_options_extention { char *server_public_key_path; size_t connection_attributes_length; my_bool enable_cleartext_plugin; - my_bool get_server_public_key; + my_bool unused0; /* Former ssl_enforce */ char *tls_version; /* TLS version option */ long ssl_ctx_flags; /* SSL ctx options flag */ unsigned int ssl_mode; diff --git a/libmysql/CMakeLists.txt b/libmysql/CMakeLists.txt index 6ad0b92f00e1..cc890b962489 100644 --- a/libmysql/CMakeLists.txt +++ b/libmysql/CMakeLists.txt @@ -188,7 +188,6 @@ SET(CLIENT_SOURCES ../sql/net_serv.cc ../sql-common/pack.c ../sql/auth/password.c - ../sql/auth/sha2_password_common.cc ) IF (WIN32 AND OPENSSL_APPLINK_C) diff --git a/sql-common/client.c b/sql-common/client.c index 67e980e4e113..2f5deeb54ac6 100644 --- a/sql-common/client.c +++ b/sql-common/client.c @@ -108,8 +108,6 @@ my_bool net_flush(NET *net); } #define native_password_plugin_name "mysql_native_password" -#define caching_sha2_password_plugin_name "caching_sha2_password" - PSI_memory_key key_memory_mysql_options; PSI_memory_key key_memory_MYSQL_DATA; @@ -3205,22 +3203,6 @@ static auth_plugin_t sha256_password_client_plugin= NULL, sha256_password_auth_client }; - -static auth_plugin_t caching_sha2_password_client_plugin= -{ - MYSQL_CLIENT_AUTHENTICATION_PLUGIN, - MYSQL_CLIENT_AUTHENTICATION_PLUGIN_INTERFACE_VERSION, - caching_sha2_password_plugin_name, - "Oracle Inc", - "SHA2 based authentication with salt", - {1, 0, 0}, - "GPL", - NULL, - caching_sha2_password_init, - caching_sha2_password_deinit, - NULL, - caching_sha2_password_auth_client -}; #endif #ifdef AUTHENTICATION_WIN extern auth_plugin_t win_auth_client_plugin; @@ -3243,7 +3225,6 @@ struct st_mysql_client_plugin *mysql_client_builtins[]= (struct st_mysql_client_plugin *)&clear_password_client_plugin, #if defined(HAVE_OPENSSL) (struct st_mysql_client_plugin *) &sha256_password_client_plugin, - (struct st_mysql_client_plugin *) &caching_sha2_password_client_plugin, #endif #ifdef AUTHENTICATION_WIN (struct st_mysql_client_plugin *)&win_auth_client_plugin, @@ -5718,12 +5699,6 @@ mysql_options(MYSQL *mysql,enum mysql_option option, const void *arg) EXTENSION_SET_STRING(&mysql->options, server_public_key_path, arg); break; - case MYSQL_OPT_GET_SERVER_PUBLIC_KEY: - ENSURE_EXTENSIONS_PRESENT(&mysql->options); - mysql->options.extension->get_server_public_key= - (*(my_bool *)arg) ? TRUE : FALSE; - break; - case MYSQL_OPT_CONNECT_ATTR_RESET: ENSURE_EXTENSIONS_PRESENT(&mysql->options); if (my_hash_inited(&mysql->options.extension->connection_attributes)) @@ -5960,11 +5935,6 @@ mysql_get_option(MYSQL *mysql, enum mysql_option option, const void *arg) *((char **)arg)= mysql->options.extension ? mysql->options.extension->server_public_key_path : NULL; break; - case MYSQL_OPT_GET_SERVER_PUBLIC_KEY: - *((my_bool *)arg)= (mysql->options.extension && - mysql->options.extension->get_server_public_key) - ? TRUE : FALSE; - break; case MYSQL_ENABLE_CLEARTEXT_PLUGIN: *((my_bool *)arg)= (mysql->options.extension && mysql->options.extension->enable_cleartext_plugin) ? diff --git a/sql-common/client_authentication.cc b/sql-common/client_authentication.cc index eee7fc0ed90a..7d4f098dfc27 100644 --- a/sql-common/client_authentication.cc +++ b/sql-common/client_authentication.cc @@ -35,12 +35,9 @@ #endif #endif #include "mysql/plugin.h" -#include "sha2.h" #define MAX_CIPHER_LENGTH 1024 -#define SHA2_SCRAMBLE_LENGTH SHA256_DIGEST_LENGTH - #if !defined(HAVE_YASSL) mysql_mutex_t g_public_key_mutex; #endif @@ -282,237 +279,4 @@ int sha256_password_auth_client(MYSQL_PLUGIN_VIO *vio, MYSQL *mysql) DBUG_RETURN(CR_OK); } -/* caching_sha2_password */ - -int caching_sha2_password_init(char *, size_t, int, va_list) -{ - return 0; -} - -int caching_sha2_password_deinit(void) -{ - return 0; -} - -static bool is_secure_transport(MYSQL *mysql) -{ - if (!mysql || !mysql->net.vio) - return false; - switch (mysql->net.vio->type) - { - case VIO_TYPE_SSL: - { - if (mysql_get_ssl_cipher(mysql) == NULL) - return false; - } - // Fall through - case VIO_TYPE_SHARED_MEMORY: - // Fall through - case VIO_TYPE_SOCKET: - return true; - default: - return false; - } - return false; -} - -/** - Authenticate the client using the RSA or TLS and a SHA2 salted password. - - @param vio Provides plugin access to communication channel - @param mysql Client connection handler - - @return Error status - @retval CR_ERROR An error occurred. - @retval CR_OK Authentication succeeded. -*/ - -#if !defined(HAVE_YASSL) -static char request_public_key= '\2'; -#endif /* !HAVE_YASSL */ -static char fast_auth_success= '\3'; -static char perform_full_authentication= '\4'; - -int caching_sha2_password_auth_client(MYSQL_PLUGIN_VIO *vio, MYSQL *mysql) -{ - bool uses_password= mysql->passwd[0] != 0; -#if !defined(HAVE_YASSL) - unsigned char encrypted_password[MAX_CIPHER_LENGTH]; - RSA *public_key= NULL; - bool got_public_key_from_server= false; -#endif /* !HAVE_YASSL */ - bool connection_is_secure= false; - unsigned char scramble_pkt[20]; - unsigned char *pkt; - - DBUG_ENTER("caching_sha2_password_auth_client"); - - /* - Get the scramble from the server because we need it when sending encrypted - password. - */ - if (vio->read_packet(vio, &pkt) != SCRAMBLE_LENGTH + 1) - { - DBUG_PRINT("info", ("Scramble is not of correct length.")); - DBUG_RETURN(CR_ERROR); - } - - if (pkt[SCRAMBLE_LENGTH] != '\0') - { - DBUG_PRINT("info", ("Missing protocol token in scramble data.")); - DBUG_RETURN(CR_ERROR); - } - - /* - Copy the scramble to the stack or it will be lost on the next use of the - net buffer. - */ - memcpy(scramble_pkt, pkt, SCRAMBLE_LENGTH); - - connection_is_secure= is_secure_transport(mysql); - - if (!uses_password) - { - /* We're not using a password */ - static const unsigned char zero_byte= '\0'; - if (vio->write_packet(vio, &zero_byte, 1)) - DBUG_RETURN(CR_ERROR); - DBUG_RETURN(CR_OK); - } - else - { - /* Password is a 0-terminated byte array ('\0' character included) */ - unsigned int passwd_len= - static_cast(strlen(mysql->passwd) + 1); - int pkt_len= 0; - { - /* First try with SHA2 scramble */ - unsigned char sha2_scramble[SHA2_SCRAMBLE_LENGTH]; - if (generate_sha256_scramble(sha2_scramble, SHA2_SCRAMBLE_LENGTH, - mysql->passwd, passwd_len - 1, - (char *)scramble_pkt, SCRAMBLE_LENGTH)) - { - set_mysql_extended_error(mysql, CR_AUTH_PLUGIN_ERR, unknown_sqlstate, - ER(CR_AUTH_PLUGIN_ERR), - "caching_sha2_password", - "Failed to generate scramble"); - DBUG_RETURN(CR_ERROR); - } - - if (vio->write_packet(vio, sha2_scramble, SHA2_SCRAMBLE_LENGTH)) - DBUG_RETURN(CR_ERROR); - - if ((pkt_len= vio->read_packet(vio, &pkt)) == -1) - DBUG_RETURN(CR_ERROR); - - if (pkt_len == 1 && *pkt == fast_auth_success) - DBUG_RETURN(CR_OK); - - /* An OK packet would follow */ - } - - if (pkt_len != 1 || *pkt != perform_full_authentication) - { - DBUG_PRINT("info", ("Unexpected reply from server.")); - DBUG_RETURN(CR_ERROR); - } - - if (!connection_is_secure) - { -#ifndef HAVE_YASSL - /* If connection isn't secure attempt to get the RSA public key file */ - public_key= rsa_init(mysql); - - if (public_key == NULL && mysql->options.extension && - mysql->options.extension->get_server_public_key) - { - // If no public key; request one from the server. - if (vio->write_packet(vio, (const unsigned char *)&request_public_key, - 1)) - DBUG_RETURN(CR_ERROR); - - if ((pkt_len= vio->read_packet(vio, &pkt)) <= 0) - DBUG_RETURN(CR_ERROR); - BIO *bio= BIO_new_mem_buf(pkt, pkt_len); - public_key= PEM_read_bio_RSA_PUBKEY(bio, NULL, NULL, NULL); - BIO_free(bio); - if (public_key == 0) - { - ERR_clear_error(); - DBUG_PRINT("info", ("Failed to parse public key")); - DBUG_RETURN(CR_ERROR); - } - got_public_key_from_server= true; - } - - if (public_key) - { - /* - An arbitrary limitation based on the assumption that passwords - larger than e.g. 15 symbols don't contribute to security. - Note also that it's further restricted to RSA_size() - 11 down - below, so this leaves 471 bytes of possible RSA key sizes which - should be reasonably future-proof. - We avoid heap allocation for speed reasons. - */ - char passwd_scramble[512]; - - if (passwd_len > sizeof(passwd_scramble)) - { - /* password too long for the buffer */ - if (got_public_key_from_server) RSA_free(public_key); - DBUG_PRINT("info", ("Password is too long.")); - DBUG_RETURN(CR_ERROR); - } - memmove(passwd_scramble, mysql->passwd, passwd_len); - - /* Obfuscate the plain text password with the session scramble */ - xor_string(passwd_scramble, passwd_len - 1, (char *)scramble_pkt, - SCRAMBLE_LENGTH); - /* Encrypt the password and send it to the server */ - int cipher_length= RSA_size(public_key); - /* - When using RSA_PKCS1_OAEP_PADDING the password length must be less - than RSA_size(rsa) - 41. - */ - if (passwd_len + 41 >= (unsigned)cipher_length) - { - /* password message is to long */ - if (got_public_key_from_server) - RSA_free(public_key); - DBUG_PRINT("info", ("Password is too long to be encrypted using " - "given public key.")); - DBUG_RETURN(CR_ERROR); - } - RSA_public_encrypt(passwd_len, (unsigned char *)passwd_scramble, - encrypted_password, public_key, - RSA_PKCS1_OAEP_PADDING); - if (got_public_key_from_server) - RSA_free(public_key); - - if (vio->write_packet(vio, (uchar *)encrypted_password, cipher_length)) - DBUG_RETURN(CR_ERROR); - } - else - { -#endif /* !HAVE_YASSL */ - set_mysql_extended_error(mysql, CR_AUTH_PLUGIN_ERR, unknown_sqlstate, - ER(CR_AUTH_PLUGIN_ERR), - "caching_sha2_password", - "Authentication requires secure connection."); - DBUG_RETURN(CR_ERROR); -#ifndef HAVE_YASSL - } -#endif /* !HAVE_YASSL */ - } - else - { - /* The vio is encrypted already; just send the plain text passwd */ - if (vio->write_packet(vio, (uchar *)mysql->passwd, passwd_len)) - DBUG_RETURN(CR_ERROR); - } - } - DBUG_RETURN(CR_OK); -} - -#endif /* HAVE_OPENSSL */ +#endif diff --git a/sql/CMakeLists.txt b/sql/CMakeLists.txt index 501383f65878..0bf31070d21b 100644 --- a/sql/CMakeLists.txt +++ b/sql/CMakeLists.txt @@ -290,7 +290,6 @@ SET(SQL_SOURCE srv_session.cc srv_session_info_service.cc srv_session_service.cc - auth/sha2_password_common.cc ) IF(NOT WIN32) From 5c61472ff4099d6ed1d005684517dee3656978f1 Mon Sep 17 00:00:00 2001 From: Manuel Ung Date: Thu, 17 May 2018 10:06:40 -0700 Subject: [PATCH 0870/1221] Prevent reusing iterator bounds between different iterators Upstream commit ID : fb-mysql-5.6-35/cd29bb9bf8fa73cd4f5f8f4cb3434d20f9109b09 PS-4495 : UPDATE with unique constraint does not work Summary: Update statements were returning incorrect results because the iterator scanning the table shared the same upper/lower bounds as the iterator locking secondary keys. To fix, the code has been restructured so that it is clearer that each iterator needs to maintain and own their upper and lower bounds, and the buffers backing them. Fixes https://github.com/facebook/mysql-5.6/issues/830 Closes https://github.com/facebook/mysql-5.6/pull/833 Differential Revision: D8037160 Pulled By: lth fbshipit-source-id: e432e33 --- mysql-test/suite/rocksdb/r/update.result | 8 ++ mysql-test/suite/rocksdb/t/update.test | 11 +++ storage/rocksdb/ha_rocksdb.cc | 102 +++++++++++++---------- storage/rocksdb/ha_rocksdb.h | 23 +++-- 4 files changed, 94 insertions(+), 50 deletions(-) diff --git a/mysql-test/suite/rocksdb/r/update.result b/mysql-test/suite/rocksdb/r/update.result index 95adac2bdd00..58ab51eb98a2 100644 --- a/mysql-test/suite/rocksdb/r/update.result +++ b/mysql-test/suite/rocksdb/r/update.result @@ -111,3 +111,11 @@ a b pk 55 NULL 11 10050 NULL 12 DROP TABLE t1; +CREATE TABLE t1 (a INT, b CHAR(8), UNIQUE INDEX(a)) ENGINE=RocksDB; +INSERT INTO t1 (a,b) VALUES (1,'foo'),(2,'bar'); +UPDATE t1 SET a=a+100; +SELECT * FROM t1; +a b +101 foo +102 bar +DROP TABLE t1; diff --git a/mysql-test/suite/rocksdb/t/update.test b/mysql-test/suite/rocksdb/t/update.test index 10936a54e145..c8e806e64fba 100644 --- a/mysql-test/suite/rocksdb/t/update.test +++ b/mysql-test/suite/rocksdb/t/update.test @@ -69,3 +69,14 @@ COMMIT; SELECT * FROM t1 ORDER BY pk; DROP TABLE t1; + + +# +# Issue #830 UPDATE with unique constraint does not work +# + +CREATE TABLE t1 (a INT, b CHAR(8), UNIQUE INDEX(a)) ENGINE=RocksDB; +INSERT INTO t1 (a,b) VALUES (1,'foo'),(2,'bar'); +UPDATE t1 SET a=a+100; +SELECT * FROM t1; +DROP TABLE t1; diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index dd4fa40bb0b8..ea2a5d74c741 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -4642,14 +4642,14 @@ ha_rocksdb::ha_rocksdb(my_core::handlerton *const hton, my_core::TABLE_SHARE *const table_arg) : handler(hton, table_arg), m_table_handler(nullptr), m_scan_it(nullptr), m_scan_it_skips_bloom(false), m_scan_it_snapshot(nullptr), + m_scan_it_lower_bound(nullptr), m_scan_it_upper_bound(nullptr), m_tbl_def(nullptr), m_pk_descr(nullptr), m_key_descr_arr(nullptr), m_pk_can_be_decoded(false), m_maybe_unpack_info(false), m_pk_tuple(nullptr), m_pk_packed_tuple(nullptr), m_sk_packed_tuple(nullptr), m_end_key_packed_tuple(nullptr), m_sk_match_prefix(nullptr), m_sk_match_prefix_buf(nullptr), m_sk_packed_tuple_old(nullptr), m_dup_sk_packed_tuple(nullptr), - m_dup_sk_packed_tuple_old(nullptr), m_eq_cond_lower_bound(nullptr), - m_eq_cond_upper_bound(nullptr), m_pack_buffer(nullptr), + m_dup_sk_packed_tuple_old(nullptr), m_pack_buffer(nullptr), m_lock_rows(RDB_LOCK_NONE), m_keyread_only(FALSE), m_encoder_arr(nullptr), m_row_checksums_checked(0), m_in_rpl_delete_rows(false), m_in_rpl_update_rows(false) {} @@ -5520,10 +5520,10 @@ int ha_rocksdb::alloc_key_buffers(const TABLE *const table_arg, my_malloc(rdb_handler_memory_key, max_packed_sk_len, MYF(0)))) || !(m_pack_buffer = static_cast( my_malloc(rdb_handler_memory_key, max_packed_sk_len, MYF(0)))) || - !(m_eq_cond_upper_bound = static_cast( + !(m_scan_it_lower_bound = static_cast( my_malloc(rdb_handler_memory_key, max_packed_sk_len, MYF(0)))) || - !(m_eq_cond_lower_bound = static_cast( - my_malloc(rdb_handler_memory_key, max_packed_sk_len, MYF(0))))) { + !(m_scan_it_upper_bound = static_cast( + my_malloc(rdb_handler_memory_key, max_packed_sk_len, MYF(0))))) { #else if (!(m_sk_packed_tuple = static_cast( my_malloc(PSI_NOT_INSTRUMENTED, max_packed_sk_len, MYF(0)))) || @@ -5535,10 +5535,10 @@ int ha_rocksdb::alloc_key_buffers(const TABLE *const table_arg, my_malloc(PSI_NOT_INSTRUMENTED, max_packed_sk_len, MYF(0)))) || !(m_pack_buffer = static_cast( my_malloc(PSI_NOT_INSTRUMENTED, max_packed_sk_len, MYF(0)))) || - !(m_eq_cond_upper_bound = static_cast( + !(m_scan_it_lower_bound = static_cast( my_malloc(PSI_NOT_INSTRUMENTED, max_packed_sk_len, MYF(0)))) || - !(m_eq_cond_lower_bound = static_cast( - my_malloc(PSI_NOT_INSTRUMENTED, max_packed_sk_len, MYF(0))))) { + !(m_scan_it_upper_bound = static_cast( + my_malloc(PSI_NOT_INSTRUMENTED, max_packed_sk_len, MYF(0))))) { #endif goto error; } @@ -5602,11 +5602,11 @@ void ha_rocksdb::free_key_buffers() { my_free(m_dup_sk_packed_tuple_old); m_dup_sk_packed_tuple_old = nullptr; - my_free(m_eq_cond_upper_bound); - m_eq_cond_upper_bound = nullptr; + my_free(m_scan_it_lower_bound); + m_scan_it_lower_bound = nullptr; - my_free(m_eq_cond_lower_bound); - m_eq_cond_lower_bound = nullptr; + my_free(m_scan_it_upper_bound); + m_scan_it_upper_bound = nullptr; } void ha_rocksdb::set_use_read_free_rpl(const char *const whitelist) { @@ -8451,8 +8451,14 @@ int ha_rocksdb::check_and_lock_sk(const uint &key_id, The bloom filter may need to be disabled for this lookup. */ + uchar lower_bound_buf[Rdb_key_def::INDEX_NUMBER_SIZE]; + uchar upper_bound_buf[Rdb_key_def::INDEX_NUMBER_SIZE]; + rocksdb::Slice lower_bound_slice; + rocksdb::Slice upper_bound_slice; + const bool total_order_seek = !check_bloom_and_set_bounds( - ha_thd(), kd, new_slice, all_parts_used); + ha_thd(), kd, new_slice, all_parts_used, Rdb_key_def::INDEX_NUMBER_SIZE, + lower_bound_buf, upper_bound_buf, &lower_bound_slice, &upper_bound_slice); const bool fill_cache = !THDVAR(ha_thd(), skip_fill_cache); const rocksdb::Status s = @@ -8462,9 +8468,8 @@ int ha_rocksdb::check_and_lock_sk(const uint &key_id, } rocksdb::Iterator *const iter = row_info.tx->get_iterator( - kd.get_cf(), total_order_seek, fill_cache, - m_eq_cond_lower_bound_slice, m_eq_cond_upper_bound_slice, - true /* read current data */, + kd.get_cf(), total_order_seek, fill_cache, lower_bound_slice, + upper_bound_slice, true /* read current data */, false /* acquire snapshot */); /* Need to scan the transaction to see if there is a duplicate key. @@ -8847,25 +8852,22 @@ int ha_rocksdb::update_write_row(const uchar *const old_data, 0x0000b3eb003f65c5e78857, and lower bound would be 0x0000b3eb003f65c5e78859. These cover given eq condition range. */ -void ha_rocksdb::setup_iterator_bounds(const Rdb_key_def &kd, - const rocksdb::Slice &eq_cond) { - uint eq_cond_len = eq_cond.size(); - DBUG_ASSERT(eq_cond_len >= Rdb_key_def::INDEX_NUMBER_SIZE); - memcpy(m_eq_cond_upper_bound, eq_cond.data(), eq_cond_len); - kd.successor(m_eq_cond_upper_bound, eq_cond_len); - memcpy(m_eq_cond_lower_bound, eq_cond.data(), eq_cond_len); - kd.predecessor(m_eq_cond_lower_bound, eq_cond_len); +void ha_rocksdb::setup_iterator_bounds( + const Rdb_key_def &kd, const rocksdb::Slice &eq_cond, size_t bound_len, + uchar *const lower_bound, uchar *const upper_bound, + rocksdb::Slice *lower_bound_slice, rocksdb::Slice *upper_bound_slice) { + uint min_len = std::min(eq_cond.size(), bound_len); + memcpy(upper_bound, eq_cond.data(), min_len); + kd.successor(upper_bound, min_len); + memcpy(lower_bound, eq_cond.data(), min_len); + kd.predecessor(lower_bound, min_len); if (kd.m_is_reverse_cf) { - m_eq_cond_upper_bound_slice = - rocksdb::Slice((const char *)m_eq_cond_lower_bound, eq_cond_len); - m_eq_cond_lower_bound_slice = - rocksdb::Slice((const char *)m_eq_cond_upper_bound, eq_cond_len); + *upper_bound_slice = rocksdb::Slice((const char *)lower_bound, min_len); + *lower_bound_slice = rocksdb::Slice((const char *)upper_bound, min_len); } else { - m_eq_cond_upper_bound_slice = - rocksdb::Slice((const char *)m_eq_cond_upper_bound, eq_cond_len); - m_eq_cond_lower_bound_slice = - rocksdb::Slice((const char *)m_eq_cond_lower_bound, eq_cond_len); + *upper_bound_slice = rocksdb::Slice((const char *)upper_bound, min_len); + *lower_bound_slice = rocksdb::Slice((const char *)lower_bound, min_len); } } @@ -8885,7 +8887,10 @@ void ha_rocksdb::setup_scan_iterator(const Rdb_key_def &kd, bool skip_bloom = true; const rocksdb::Slice eq_cond(slice->data(), eq_cond_len); - if (check_bloom_and_set_bounds(ha_thd(), kd, eq_cond, use_all_keys)) { + if (check_bloom_and_set_bounds( + ha_thd(), kd, eq_cond, use_all_keys, eq_cond_len, + m_scan_it_lower_bound, m_scan_it_upper_bound, + &m_scan_it_lower_bound_slice, &m_scan_it_upper_bound_slice)) { skip_bloom = false; } @@ -8926,8 +8931,8 @@ void ha_rocksdb::setup_scan_iterator(const Rdb_key_def &kd, m_scan_it = rdb->NewIterator(read_opts, kd.get_cf()); } else { m_scan_it = tx->get_iterator(kd.get_cf(), skip_bloom, fill_cache, - m_eq_cond_lower_bound_slice, - m_eq_cond_upper_bound_slice); + m_scan_it_lower_bound_slice, + m_scan_it_upper_bound_slice); } m_scan_it_skips_bloom = skip_bloom; } @@ -9972,6 +9977,13 @@ int ha_rocksdb::remove_rows(Rdb_tbl_def *const tbl) { char key_buf[MAX_KEY_LENGTH]; uint key_len; + ulonglong bytes_written = 0; + + uchar lower_bound_buf[Rdb_key_def::INDEX_NUMBER_SIZE]; + uchar upper_bound_buf[Rdb_key_def::INDEX_NUMBER_SIZE]; + rocksdb::Slice lower_bound_slice; + rocksdb::Slice upper_bound_slice; + /* Remove all records in each index. (This is is not crash-safe, but it doesn't matter, because bulk row @@ -9982,9 +9994,12 @@ int ha_rocksdb::remove_rows(Rdb_tbl_def *const tbl) { kd.get_infimum_key(reinterpret_cast(key_buf), &key_len); rocksdb::ColumnFamilyHandle *cf = kd.get_cf(); const rocksdb::Slice table_key(key_buf, key_len); - setup_iterator_bounds(kd, table_key); - opts.iterate_lower_bound = &m_eq_cond_lower_bound_slice; - opts.iterate_upper_bound = &m_eq_cond_upper_bound_slice; + setup_iterator_bounds(kd, table_key, Rdb_key_def::INDEX_NUMBER_SIZE, + lower_bound_buf, upper_bound_buf, &lower_bound_slice, + &upper_bound_slice); + DBUG_ASSERT(key_len == Rdb_key_def::INDEX_NUMBER_SIZE); + opts.iterate_lower_bound = &lower_bound_slice; + opts.iterate_upper_bound = &upper_bound_slice; std::unique_ptr it(rdb->NewIterator(opts, cf)); it->Seek(table_key); @@ -11793,12 +11808,15 @@ void Rdb_background_thread::run() { ddl_manager.persist_stats(); } -bool ha_rocksdb::check_bloom_and_set_bounds(THD *thd, const Rdb_key_def &kd, - const rocksdb::Slice &eq_cond, - const bool use_all_keys) { +bool ha_rocksdb::check_bloom_and_set_bounds( + THD *thd, const Rdb_key_def &kd, const rocksdb::Slice &eq_cond, + const bool use_all_keys, size_t bound_len, uchar *const lower_bound, + uchar *const upper_bound, rocksdb::Slice *lower_bound_slice, + rocksdb::Slice *upper_bound_slice) { bool can_use_bloom = can_use_bloom_filter(thd, kd, eq_cond, use_all_keys); if (!can_use_bloom) { - setup_iterator_bounds(kd, eq_cond); + setup_iterator_bounds(kd, eq_cond, bound_len, lower_bound, upper_bound, + lower_bound_slice, upper_bound_slice); } return can_use_bloom; } diff --git a/storage/rocksdb/ha_rocksdb.h b/storage/rocksdb/ha_rocksdb.h index 717cae85942c..786f4e5cb2ae 100644 --- a/storage/rocksdb/ha_rocksdb.h +++ b/storage/rocksdb/ha_rocksdb.h @@ -481,6 +481,12 @@ class ha_rocksdb : public my_core::handler { const rocksdb::Snapshot *m_scan_it_snapshot; + /* Buffers used for upper/lower bounds for m_scan_it. */ + uchar *m_scan_it_lower_bound; + uchar *m_scan_it_upper_bound; + rocksdb::Slice m_scan_it_lower_bound_slice; + rocksdb::Slice m_scan_it_upper_bound_slice; + Rdb_tbl_def *m_tbl_def; /* Primary Key encoder from KeyTupleFormat to StorageFormat */ @@ -544,12 +550,6 @@ class ha_rocksdb : public my_core::handler { uchar *m_dup_sk_packed_tuple; uchar *m_dup_sk_packed_tuple_old; - /* Buffers used for passing upper/bound eq conditions. */ - uchar *m_eq_cond_lower_bound; - uchar *m_eq_cond_upper_bound; - rocksdb::Slice m_eq_cond_lower_bound_slice; - rocksdb::Slice m_eq_cond_upper_bound_slice; - /* Temporary space for packing VARCHARs (we provide it to pack_record()/pack_index_tuple() calls). @@ -625,13 +625,20 @@ class ha_rocksdb : public my_core::handler { enum ha_rkey_function find_flag) const MY_ATTRIBUTE((__nonnull__, __warn_unused_result__)); void setup_iterator_bounds(const Rdb_key_def &kd, - const rocksdb::Slice &eq_cond); + const rocksdb::Slice &eq_cond, size_t bound_len, + uchar *const lower_bound, uchar *const upper_bound, + rocksdb::Slice *lower_bound_slice, + rocksdb::Slice *upper_bound_slice); bool can_use_bloom_filter(THD *thd, const Rdb_key_def &kd, const rocksdb::Slice &eq_cond, const bool use_all_keys); bool check_bloom_and_set_bounds(THD *thd, const Rdb_key_def &kd, const rocksdb::Slice &eq_cond, - const bool use_all_keys); + const bool use_all_keys, size_t bound_len, + uchar *const lower_bound, + uchar *const upper_bound, + rocksdb::Slice *lower_bound_slice, + rocksdb::Slice *upper_bound_slice); void setup_scan_iterator(const Rdb_key_def &kd, rocksdb::Slice *slice, const bool use_all_keys, const uint eq_cond_len); void release_scan_iterator(void); From 1ab8af8e84f50137d4e2c17e8e98a9436de191f7 Mon Sep 17 00:00:00 2001 From: Maria Couceiro Date: Tue, 22 May 2018 16:07:01 +0100 Subject: [PATCH 0871/1221] BUG#20454797 WAIT_FOR_SLAVE_PARAM.INC IS NOT CHECKING FOR ERROR WHILE WAITING THE PARAMETER Post-push fix to stabilize the test rpl.rpl_apply_binlog_with_gtid_when_gtid_mode_off. --- .../rpl/t/rpl_apply_binlog_with_gtid_when_gtid_mode_off.test | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/mysql-test/suite/rpl/t/rpl_apply_binlog_with_gtid_when_gtid_mode_off.test b/mysql-test/suite/rpl/t/rpl_apply_binlog_with_gtid_when_gtid_mode_off.test index 1d67937e5b93..40ff298886d1 100644 --- a/mysql-test/suite/rpl/t/rpl_apply_binlog_with_gtid_when_gtid_mode_off.test +++ b/mysql-test/suite/rpl/t/rpl_apply_binlog_with_gtid_when_gtid_mode_off.test @@ -58,6 +58,11 @@ call mtr.add_suppression("Slave.* @@SESSION.GTID_NEXT cannot be set to UUID:NUMB --source include/wait_for_slave_sql_error.inc # Reset slave. +# On slower machines, when the SQL thread is killed due to error +# ER_CANT_SET_GTID_NEXT_TO_GTID_WHEN_GTID_MODE_IS_OFF, it may happen that the IO +# thread is also killed while it is still reading events from the binlog. +--let $slave_io_errno= 2013 #CR_SERVER_LOST +--let $rpl_allow_error= 1 --source include/stop_slave.inc RESET MASTER; RESET SLAVE; From aff803621af0189df5f337e9b85aeccceb594561 Mon Sep 17 00:00:00 2001 From: Sreeharsha Ramanavarapu Date: Thu, 24 May 2018 12:46:50 +0530 Subject: [PATCH 0872/1221] Bug #27998526 : FORCE INDEX DOESN'T TAKE EFFECT WHEN A QUERY HAS GROUP_BY, ORDER_BY, AND LIMIT Issue: ------ FORCE INDEX is ignored when a query has GROUP_BY, ORDER_BY, AND LIMIT. This problem doesn't occur GROUP BY or ORDER BY is removed. DDL and Query: -------------- CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT, k INT, PRIMARY KEY(id), KEY idx_k (k)); SELECT * FROM t1 FORCE INDEX (idx_k) WHERE k BETWEEN 2 AND 5 GROUP BY id ORDER BY id LIMIT 0,1; Root cause: ----------- Due to the presence of GROUP BY optimizer adds clustered index to the set of possible keys (see add_group_and_distinct_keys()). test_if_order_by_key() then decides that "idx_k" can't provide ordering and that index is excluded from the list of potential indexes to be used by range optimizer for ORDER BY. Since the only other option left is the clustered index, that is chosen. Solution: --------- If FORCE INDEX is set use only those indexes to check if they are relevant for ORDER BY. In this query, range optimizer won't be called since there is no relevant index (since "idx_k" doesn't include the column "id"). In 5.7, this was fixed as part of WL#6986. --- mysql-test/r/limit.result | 59 +++++++++++++++++++++++++++++++++++++++ mysql-test/t/limit.test | 50 +++++++++++++++++++++++++++++++++ sql/sql_optimizer.cc | 5 +++- 3 files changed, 113 insertions(+), 1 deletion(-) diff --git a/mysql-test/r/limit.result b/mysql-test/r/limit.result index 990e0a64dc72..800b8ca4152b 100644 --- a/mysql-test/r/limit.result +++ b/mysql-test/r/limit.result @@ -114,3 +114,62 @@ End of 5.0 tests select 1 as a limit 4294967296,10; a End of 5.1 tests +CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT, +k INT, +payload CHAR(100), +PRIMARY KEY(id), +KEY idx_k (k)); +INSERT INTO t1(k) VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10); +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +EXPLAIN SELECT * FROM t1 FORCE INDEX (idx_k) +WHERE k BETWEEN 2 AND 5 +GROUP BY id +ORDER BY id LIMIT 0,1; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 range PRIMARY,idx_k idx_k 5 NULL 3 Using index condition; Using filesort +EXPLAIN SELECT * FROM t1 FORCE INDEX (idx_k) +WHERE k BETWEEN 2 AND 5 +GROUP BY id +LIMIT 0,1; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 range PRIMARY,idx_k idx_k 5 NULL 3 Using index condition; Using filesort +EXPLAIN SELECT * FROM t1 FORCE INDEX (idx_k) +WHERE k BETWEEN 2 AND 5 +ORDER BY id LIMIT 0,1; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 range idx_k idx_k 5 NULL 3 Using index condition; Using filesort +EXPLAIN SELECT * FROM t1 FORCE INDEX (idx_k) +WHERE k BETWEEN 2 AND 5 +GROUP BY id +ORDER BY id; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 range PRIMARY,idx_k idx_k 5 NULL 3 Using index condition; Using filesort +SELECT * FROM t1 FORCE INDEX (idx_k) +WHERE k BETWEEN 2 AND 5 +GROUP BY id +ORDER BY id LIMIT 0,1; +id k payload +2 2 NULL +SELECT * FROM t1 FORCE INDEX (idx_k) +WHERE k BETWEEN 2 AND 5 +GROUP BY id +LIMIT 0,1; +id k payload +2 2 NULL +SELECT * FROM t1 FORCE INDEX (idx_k) +WHERE k BETWEEN 2 AND 5 +ORDER BY id LIMIT 0,1; +id k payload +2 2 NULL +SELECT * FROM t1 FORCE INDEX (idx_k) +WHERE k BETWEEN 2 AND 5 +GROUP BY id +ORDER BY id; +id k payload +2 2 NULL +3 3 NULL +4 4 NULL +5 5 NULL +DROP TABLE t1; diff --git a/mysql-test/t/limit.test b/mysql-test/t/limit.test index 5847b90367ae..8ed1566baf52 100644 --- a/mysql-test/t/limit.test +++ b/mysql-test/t/limit.test @@ -103,3 +103,53 @@ execute s using @a, @a; select 1 as a limit 4294967296,10; --echo End of 5.1 tests + +# +# Bug #27998526 : FORCE INDEX DOESN'T TAKE EFFECT WHEN A QUERY HAS GROUP_BY, +# ORDER_BY, AND LIMIT +# + + +CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT, + k INT, + payload CHAR(100), + PRIMARY KEY(id), + KEY idx_k (k)); + +INSERT INTO t1(k) VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10); +ANALYZE TABLE t1; + +#problem query +let query1= SELECT * FROM t1 FORCE INDEX (idx_k) + WHERE k BETWEEN 2 AND 5 + GROUP BY id + ORDER BY id LIMIT 0,1; + +# no order by +let query2= SELECT * FROM t1 FORCE INDEX (idx_k) + WHERE k BETWEEN 2 AND 5 + GROUP BY id + LIMIT 0,1; + +#no group by +let query3= SELECT * FROM t1 FORCE INDEX (idx_k) + WHERE k BETWEEN 2 AND 5 + ORDER BY id LIMIT 0,1; + +#no limit +let query4= SELECT * FROM t1 FORCE INDEX (idx_k) + WHERE k BETWEEN 2 AND 5 + GROUP BY id + ORDER BY id; + +eval EXPLAIN $query1; +eval EXPLAIN $query2; +eval EXPLAIN $query3; +eval EXPLAIN $query4; + +eval $query1; +eval $query2; +eval $query3; +eval $query4; + +DROP TABLE t1; diff --git a/sql/sql_optimizer.cc b/sql/sql_optimizer.cc index 93a600a7f3d0..0fbfaf234b50 100644 --- a/sql/sql_optimizer.cc +++ b/sql/sql_optimizer.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -7869,6 +7869,9 @@ static bool make_join_select(JOIN *join, Item *cond) sel->cond->quick_fix_field(); key_map usable_keys= tab->keys; + if (tab->table->force_index) + usable_keys.intersect(tab->table->keys_in_use_for_order_by); + ORDER::enum_order interesting_order= ORDER::ORDER_NOT_RELEVANT; if (recheck_reason == LOW_LIMIT) From 8583bcd76fae692f6021f7d4e99e55556d6820e1 Mon Sep 17 00:00:00 2001 From: Venkatesh Duggirala Date: Thu, 24 May 2018 11:58:08 +0530 Subject: [PATCH 0873/1221] Bug#27610678 SEMI-SYNC REPLICATION DOESN'T WORK FOR MINUTES AFTER RESTART REPLICATION Problem: ======== When semisync master is busy in reading acknowledgements from one semisync slave, adding another semisync slave to the master is getting delayed. Analysis: ========= In Ack_receiver::run(), server is holding m_mutex while it is reading acknowledgements from the ack receiver socket. The same mutex is required to add/remove a semisync slave to the Master. So if server is busy in reading the acknowledgements from the ack receiver socket, then add/remove a semisync will be delayed until m_mutex is released by Ack_receiver::run(). Fix: ==== Adjust acknowledgment reading logic in Ack_receiver::run() function in such a way that m_mutex is not holded while reading for the acknowledgments from the ack receiver socket. --- .../r/rpl_semi_sync_add_remove_slaves.result | 119 +++++++++++ ...rpl_semi_sync_add_remove_slaves-master.opt | 1 + .../rpl_semi_sync_add_remove_slaves-slave.opt | 1 + .../rpl/t/rpl_semi_sync_add_remove_slaves.cnf | 59 ++++++ .../t/rpl_semi_sync_add_remove_slaves.test | 190 ++++++++++++++++++ .../semisync/semisync_master_ack_receiver.cc | 31 ++- .../semisync/semisync_master_ack_receiver.h | 7 +- .../semisync_master_socket_listener.h | 39 +++- 8 files changed, 418 insertions(+), 29 deletions(-) create mode 100644 mysql-test/suite/rpl/r/rpl_semi_sync_add_remove_slaves.result create mode 100644 mysql-test/suite/rpl/t/rpl_semi_sync_add_remove_slaves-master.opt create mode 100644 mysql-test/suite/rpl/t/rpl_semi_sync_add_remove_slaves-slave.opt create mode 100644 mysql-test/suite/rpl/t/rpl_semi_sync_add_remove_slaves.cnf create mode 100644 mysql-test/suite/rpl/t/rpl_semi_sync_add_remove_slaves.test diff --git a/mysql-test/suite/rpl/r/rpl_semi_sync_add_remove_slaves.result b/mysql-test/suite/rpl/r/rpl_semi_sync_add_remove_slaves.result new file mode 100644 index 000000000000..f82ff49835e8 --- /dev/null +++ b/mysql-test/suite/rpl/r/rpl_semi_sync_add_remove_slaves.result @@ -0,0 +1,119 @@ +include/rpl_init.inc [topology=1->2, 1->3, 1->4, 1->5, 1->6, 1->7, 1->8, 1->9] +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +# +# 1. Initial data. +# +CREATE TABLE t1(c1 INT); +include/rpl_sync.inc +# +# 2. Install semisync on all the 9 servers. +# +[connection server_1] +CALL mtr.add_suppression("Semi-sync master failed on net_flush.*"); +include/install_semisync_master.inc +[connection server_2] +CALL mtr.add_suppression("Semi-sync slave net_flush.*"); +include/install_semisync_slave.inc +[connection server_3] +CALL mtr.add_suppression("Semi-sync slave net_flush.*"); +include/install_semisync_slave.inc +[connection server_4] +CALL mtr.add_suppression("Semi-sync slave net_flush.*"); +include/install_semisync_slave.inc +[connection server_5] +CALL mtr.add_suppression("Semi-sync slave net_flush.*"); +include/install_semisync_slave.inc +[connection server_6] +CALL mtr.add_suppression("Semi-sync slave net_flush.*"); +include/install_semisync_slave.inc +[connection server_7] +CALL mtr.add_suppression("Semi-sync slave net_flush.*"); +include/install_semisync_slave.inc +[connection server_8] +CALL mtr.add_suppression("Semi-sync slave net_flush.*"); +include/install_semisync_slave.inc +[connection server_9] +CALL mtr.add_suppression("Semi-sync slave net_flush.*"); +include/install_semisync_slave.inc +# +# 3. Make Master aware of 8 semisync slaves. +# +[connection server1_1] +SET GLOBAL rpl_semi_sync_master_wait_for_slave_count = 8; +# +# 4. Insert 5000 tuples in background using 10 parallel connections. +# +# +# 5. While the insert operations are going in the background, keep +# adding/removing semisync slaves randomly. +# +# +# 6. Add all 8 semisync slaves back to Master +# (if they were disconnected, in above step). +# +# +# 7. Make sure the data is synced on Master without any issues. +# +[connection server_1] +include/rpl_sync.inc +# +# 8. Check on all servers semisync is enabled after the +# the experiment and then uninstall semisync pluging +# from it. +# +[connection server_9] +include/assert.inc [ should be 1] +include/uninstall_semisync_slave.inc +[connection server_8] +include/assert.inc [ should be 1] +include/uninstall_semisync_slave.inc +[connection server_7] +include/assert.inc [ should be 1] +include/uninstall_semisync_slave.inc +[connection server_6] +include/assert.inc [ should be 1] +include/uninstall_semisync_slave.inc +[connection server_5] +include/assert.inc [ should be 1] +include/uninstall_semisync_slave.inc +[connection server_4] +include/assert.inc [ should be 1] +include/uninstall_semisync_slave.inc +[connection server_3] +include/assert.inc [ should be 1] +include/uninstall_semisync_slave.inc +[connection server_2] +include/assert.inc [ should be 1] +include/uninstall_semisync_slave.inc +[connection server_1] +include/assert.inc [ should be 1] +include/uninstall_semisync_master.inc +# +# 9. Cleanup time. +# +[connection server_1] +DROP TABLE t1; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_semi_sync_add_remove_slaves-master.opt b/mysql-test/suite/rpl/t/rpl_semi_sync_add_remove_slaves-master.opt new file mode 100644 index 000000000000..58029d28acec --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_semi_sync_add_remove_slaves-master.opt @@ -0,0 +1 @@ +$SEMISYNC_PLUGIN_OPT diff --git a/mysql-test/suite/rpl/t/rpl_semi_sync_add_remove_slaves-slave.opt b/mysql-test/suite/rpl/t/rpl_semi_sync_add_remove_slaves-slave.opt new file mode 100644 index 000000000000..58029d28acec --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_semi_sync_add_remove_slaves-slave.opt @@ -0,0 +1 @@ +$SEMISYNC_PLUGIN_OPT diff --git a/mysql-test/suite/rpl/t/rpl_semi_sync_add_remove_slaves.cnf b/mysql-test/suite/rpl/t/rpl_semi_sync_add_remove_slaves.cnf new file mode 100644 index 000000000000..546452029ffe --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_semi_sync_add_remove_slaves.cnf @@ -0,0 +1,59 @@ +!include ../my.cnf + +[mysqld.1] +log-slave-updates +server_id=1 + +[mysqld.2] +log-slave-updates +server_id=2 + +[mysqld.3] +log-slave-updates +server_id=3 + +[mysqld.4] +log-slave-updates +server_id=4 + +[mysqld.5] +log-slave-updates +server_id=5 + +[mysqld.6] +log-slave-updates +server_id=6 + +[mysqld.7] +log-slave-updates +server_id=7 + +[mysqld.8] +log-slave-updates +server_id=8 + +[mysqld.9] +log-slave-updates +server_id=9 + +[ENV] +SERVER_MYPORT_3= @mysqld.3.port +SERVER_MYSOCK_3= @mysqld.3.socket + +SERVER_MYPORT_4= @mysqld.4.port +SERVER_MYSOCK_4= @mysqld.4.socket + +SERVER_MYPORT_5= @mysqld.5.port +SERVER_MYSOCK_5= @mysqld.5.socket + +SERVER_MYPORT_6= @mysqld.6.port +SERVER_MYSOCK_6= @mysqld.6.socket + +SERVER_MYPORT_7= @mysqld.7.port +SERVER_MYSOCK_7= @mysqld.7.socket + +SERVER_MYPORT_8= @mysqld.8.port +SERVER_MYSOCK_8= @mysqld.8.socket + +SERVER_MYPORT_9= @mysqld.9.port +SERVER_MYSOCK_9= @mysqld.9.socket diff --git a/mysql-test/suite/rpl/t/rpl_semi_sync_add_remove_slaves.test b/mysql-test/suite/rpl/t/rpl_semi_sync_add_remove_slaves.test new file mode 100644 index 000000000000..498357650864 --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_semi_sync_add_remove_slaves.test @@ -0,0 +1,190 @@ +#==== Purpose ==== +# +# This test script purpose is to check semisync replication +# behaviour when there are semisync slaves getting added and +# removed while dml changes are happening. +# +#==== Implementation ==== +# +# 1) Install semisync on one Master and 8 Slaves. +# 2) Using mysqlslap, keep inserting data in background on Master. +# 3) While the DMLs are going on, keep adding/removing semisync slaves. +# 4) At the end of the step-3, check that the data is synced without any +# issues. +# 5) Check semisync is still enabled on Master and all slaves. +# +#==== References ==== +# +# Bug#27610678 SEMI-SYNC REPLICATION DOESN'T WORK FOR MINUTES AFTER RESTART +# REPLICATION +# +#======== +# +# 9 servers + 5000 inserts involved in test. Hence marking it as big-test. +# +--source include/big_test.inc +--source include/not_group_replication_plugin.inc +--source include/have_binlog_format_statement.inc +--source include/have_debug.inc + +# +# One Master and 8 Slaves in the semi sync topology. +# +--let rpl_topology=1->2, 1->3, 1->4, 1->5, 1->6, 1->7, 1->8, 1->9 +--source include/rpl_init.inc + +--echo # +--echo # 1. Initial data. +--echo # +CREATE TABLE t1(c1 INT); +--source include/rpl_sync.inc + +--echo # +--echo # 2. Install semisync on all the 9 servers. +--echo # +--let $i= 1 +while ($i < 10) +{ + --let $rpl_connection_name= server_$i + --source include/rpl_connection.inc + if ( $i == 1) + { + --connect(server1_1, localhost,root,,,$MASTER_MYPORT) + CALL mtr.add_suppression("Semi-sync master failed on net_flush.*"); + --source include/install_semisync_master.inc + } + if ( $i != 1 ) + { + CALL mtr.add_suppression("Semi-sync slave net_flush.*"); + --source include/install_semisync_slave.inc + } + --inc $i +} + +--echo # +--echo # 3. Make Master aware of 8 semisync slaves. +--echo # +--let $rpl_connection_name= server1_1 +--source include/rpl_connection.inc +--let $slaves = 8 +--eval SET GLOBAL rpl_semi_sync_master_wait_for_slave_count = $slaves + +--echo # +--echo # 4. Insert 5000 tuples in background using 10 parallel connections. +--echo # +--exec_in_background $MYSQL_SLAP --create-schema=test --delimiter=";" --iterations=500 --query="INSERT INTO t1 values (1)" --concurrency=10 --silent 2>&1 + +--echo # +--echo # 5. While the insert operations are going in the background, keep +--echo # adding/removing semisync slaves randomly. +--echo # +--let $rpl_connection_silent = 1 +--let $include_silent= 1 +--disable_result_log +--disable_query_log +--let $rpl_debug= 0 +--let $iter= 1 +while ( $iter < 50 ) +{ + # Random server_id generator ( server_id will between [2-9] + --let $server_id=`SELECT FLOOR(2 + ((RAND() * 100) % 8))` + --let $rpl_connection_name= server_$server_id + --source include/rpl_connection.inc + --let $service_state= `SELECT service_state FROM performance_schema.replication_connection_status` + if ($service_state == 'ON') + { + # If the replication state is ON, bring it down. + --source include/stop_slave.inc + --let $rpl_connection_name= server1_1 + --source include/rpl_connection.inc + # Adjust rpl_semi_sync_master_wait_for_slave_count variable. + --dec $slaves + --eval SET GLOBAL rpl_semi_sync_master_wait_for_slave_count = $slaves + } + if ($service_state == 'OFF') + { + # If the replication state is OFF, bring it up. + --source include/start_slave.inc + --let $rpl_connection_name= server1_1 + --source include/rpl_connection.inc + # Adjust rpl_semi_sync_master_wait_for_slave_count variable. + --inc $slaves + --eval SET GLOBAL rpl_semi_sync_master_wait_for_slave_count = $slaves + } + --inc $iter + # Do it slowly while insertions on the master are happening in the background. + sleep 1; +} + +--echo # +--echo # 6. Add all 8 semisync slaves back to Master +--echo # (if they were disconnected, in above step). +--echo # +--let $iter = 2 +while ($iter <= 9) +{ + --let $rpl_connection_name= server_$iter + --source include/rpl_connection.inc + --let $service_state= `SELECT service_state FROM performance_schema.replication_connection_status` + if ($service_state == 'OFF') + { + --source include/start_slave.inc + --let $rpl_connection_name= server1_1 + --source include/rpl_connection.inc + # Adjust rpl_semi_sync_master_wait_for_slave_count variable. + --inc $slaves + --eval SET GLOBAL rpl_semi_sync_master_wait_for_slave_count = $slaves + } + --inc $iter +} +--enable_result_log +--enable_query_log +--let $rpl_connection_silent = 0 +--let $include_silent= 0 + + +--echo # +--echo # 7. Make sure the data is synced on Master without any issues. +--echo # +--let $rpl_connection_name= server_1 +--source include/rpl_connection.inc +--let $wait_timeout= 60 +--let $wait_condition= SELECT count(*) = 5000 FROM t1 +--source include/wait_condition.inc +--let $slave_timeout=600 +--source include/rpl_sync.inc + +--echo # +--echo # 8. Check on all servers semisync is enabled after the +--echo # the experiment and then uninstall semisync pluging +--echo # from it. +--echo # +--let $i= 9 +while ($i >= 1) +{ + --let $rpl_connection_name= server_$i + --source include/rpl_connection.inc + if ( $i == 1) + { + --let $assert_variable_name= rpl_semi_sync_master_enabled + --let $assert_variable_value= 1 + --source include/assert_variable.inc + --source include/uninstall_semisync_master.inc + } + if ( $i != 1 ) + { + --let $assert_variable_name= rpl_semi_sync_slave_enabled + --let $assert_variable_value= 1 + --source include/assert_variable.inc + --source include/uninstall_semisync_slave.inc + } + --dec $i +} + +--echo # +--echo # 9. Cleanup time. +--echo # +--let $rpl_connection_name= server_1 +--source include/rpl_connection.inc +DROP TABLE t1; +--source include/rpl_end.inc diff --git a/plugin/semisync/semisync_master_ack_receiver.cc b/plugin/semisync/semisync_master_ack_receiver.cc index fff2c7144f79..2233f5b2b257 100644 --- a/plugin/semisync/semisync_master_ack_receiver.cc +++ b/plugin/semisync/semisync_master_ack_receiver.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -128,7 +128,9 @@ bool Ack_receiver::add_slave(THD *thd) const char *kWho = "Ack_receiver::add_slave"; function_enter(kWho); - slave.thd= thd; + slave.thread_id= thd->thread_id(); + slave.server_id= thd->server_id; + slave.net_compress= thd->get_protocol_classic()->get_compression(); slave.vio= *thd->get_protocol_classic()->get_vio(); slave.vio.mysql_socket.m_psi= NULL; slave.vio.read_timeout= 1; @@ -163,7 +165,7 @@ void Ack_receiver::remove_slave(THD *thd) for (it= m_slaves.begin(); it != m_slaves.end(); it++) { - if (it->thd == thd) + if (it->thread_id == thd->thread_id()) { m_slaves.erase(it); m_slaves_changed= true; @@ -202,11 +204,7 @@ void Ack_receiver::run() NET net; unsigned char net_buff[REPLY_MESSAGE_MAX_LENGTH]; uint i; -#ifdef HAVE_POLL - Poll_socket_listener listener(m_slaves); -#else - Select_socket_listener listener(m_slaves); -#endif //HAVE_POLL + Socket_listener listener; sql_print_information("Starting ack receiver thread"); @@ -234,14 +232,14 @@ void Ack_receiver::run() mysql_mutex_unlock(&m_mutex); continue; } - if (!listener.init_slave_sockets()) + if (!listener.init_slave_sockets(m_slaves)) goto end; m_slaves_changed= false; } + mysql_mutex_unlock(&m_mutex); ret= listener.listen_on_sockets(); if (ret <= 0) { - mysql_mutex_unlock(&m_mutex); ret= DBUG_EVALUATE_IF("rpl_semisync_simulate_select_error", -1, ret); @@ -255,33 +253,32 @@ void Ack_receiver::run() set_stage_info(stage_reading_semi_sync_ack); i= 0; - while (i < m_slaves.size()) + while (i < listener.number_of_slave_sockets() && m_status == ST_UP) { if (listener.is_socket_active(i)) { + Slave slave_obj= listener.get_slave_obj(i); ulong len; - net.vio= &m_slaves[i].vio; + net.vio= &slave_obj.vio; /* Set compress flag. This is needed to support Slave_compress_protocol flag enabled Slaves */ - net.compress= - m_slaves[i].thd->get_protocol_classic()->get_compression(); + net.compress= slave_obj.net_compress; do { net_clear(&net, 0); len= my_net_read(&net); if (likely(len != packet_error)) - repl_semisync.reportReplyPacket(m_slaves[i].server_id(), + repl_semisync.reportReplyPacket(slave_obj.server_id, net.read_pos, len); else if (net.last_errno == ER_NET_READ_ERROR) listener.clear_socket_info(i); - } while (net.vio->has_data(net.vio)); + } while (net.vio->has_data(net.vio) && m_status == ST_UP); } i++; } - mysql_mutex_unlock(&m_mutex); } end: sql_print_information("Stopping ack receiver thread"); diff --git a/plugin/semisync/semisync_master_ack_receiver.h b/plugin/semisync/semisync_master_ack_receiver.h index 62c1be29c21b..c191336b8882 100644 --- a/plugin/semisync/semisync_master_ack_receiver.h +++ b/plugin/semisync/semisync_master_ack_receiver.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -23,11 +23,12 @@ struct Slave { - THD *thd; + uint32_t thread_id; Vio vio; + uint server_id; + bool net_compress; my_socket sock_fd() const { return vio.mysql_socket.fd; } - uint server_id() const { return thd->server_id; } }; typedef std::vector Slave_vector; diff --git a/plugin/semisync/semisync_master_socket_listener.h b/plugin/semisync/semisync_master_socket_listener.h index ceaf249999ba..9853b093d368 100644 --- a/plugin/semisync/semisync_master_socket_listener.h +++ b/plugin/semisync/semisync_master_socket_listener.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2016 Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2016, 2018 Oracle and/or its affiliates. All rights reserved. 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 @@ -24,8 +24,7 @@ class Poll_socket_listener { public: - Poll_socket_listener(const Slave_vector &slaves) - :m_slaves(slaves) + Poll_socket_listener() { } @@ -45,8 +44,9 @@ class Poll_socket_listener m_fds[index].events= 0; } - bool init_slave_sockets() + bool init_slave_sockets(Slave_vector slaves) { + m_slaves= slaves; m_fds.clear(); for (uint i= 0; i < m_slaves.size(); i++) { @@ -57,19 +57,29 @@ class Poll_socket_listener } return true; } + uint number_of_slave_sockets() + { + return m_slaves.size(); + } + + Slave get_slave_obj(int index) + { + return m_slaves[index]; + } private: - const Slave_vector &m_slaves; + Slave_vector m_slaves; std::vector m_fds; }; +typedef class Poll_socket_listener Socket_listener; #else //NO POLL class Select_socket_listener { public: - Select_socket_listener(const Slave_vector &slaves) - :m_slaves(slaves), m_max_fd(INVALID_SOCKET) + Select_socket_listener() + :m_max_fd(INVALID_SOCKET) { } @@ -92,8 +102,9 @@ class Select_socket_listener FD_CLR(m_slaves[index].sock_fd(), &m_init_fds); } - bool init_slave_sockets() + bool init_slave_sockets(Slave_vector slaves) { + m_slaves= slaves; FD_ZERO(&m_init_fds); for (uint i= 0; i < m_slaves.size(); i++) { @@ -112,13 +123,23 @@ class Select_socket_listener } return true; } + uint number_of_slave_sockets() + { + return m_slaves.size(); + } + + Slave get_slave_obj(int index) + { + return m_slaves[index]; + } private: - const Slave_vector &m_slaves; + Slave_vector m_slaves; my_socket m_max_fd; fd_set m_init_fds; fd_set m_fds; }; +typedef class Select_socket_listener Socket_listener; #endif //HAVE_POLL #endif //SEMISYNC_MASTER_SOCKET_LISTENER From 7c4b8e15d44e2de512b39d537db67d486fa253ad Mon Sep 17 00:00:00 2001 From: Aditya A Date: Thu, 24 May 2018 19:30:52 +0530 Subject: [PATCH 0874/1221] Bug #26390736 THE FIELD TABLE_NAME (VARCHAR(64)) FROM MYSQL.INNODB_TABLE_STATS CAN OVERFLOW Post push fix to change result file for embedded server test. --- .../suite/funcs_1/r/is_columns_mysql_embedded.result | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/mysql-test/suite/funcs_1/r/is_columns_mysql_embedded.result b/mysql-test/suite/funcs_1/r/is_columns_mysql_embedded.result index 71c146a1f80a..d57865a0b59f 100644 --- a/mysql-test/suite/funcs_1/r/is_columns_mysql_embedded.result +++ b/mysql-test/suite/funcs_1/r/is_columns_mysql_embedded.result @@ -96,13 +96,13 @@ def mysql innodb_index_stats sample_size 7 NULL YES bigint NULL NULL 20 0 NULL N def mysql innodb_index_stats stat_description 8 NULL NO varchar 1024 3072 NULL NULL NULL utf8 utf8_bin varchar(1024) def mysql innodb_index_stats stat_name 5 NULL NO varchar 64 192 NULL NULL NULL utf8 utf8_bin varchar(64) PRI def mysql innodb_index_stats stat_value 6 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned -def mysql innodb_index_stats table_name 2 NULL NO varchar 64 192 NULL NULL NULL utf8 utf8_bin varchar(64) PRI +def mysql innodb_index_stats table_name 2 NULL NO varchar 199 597 NULL NULL NULL utf8 utf8_bin varchar(199) PRI def mysql innodb_table_stats clustered_index_size 5 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned def mysql innodb_table_stats database_name 1 NULL NO varchar 64 192 NULL NULL NULL utf8 utf8_bin varchar(64) PRI def mysql innodb_table_stats last_update 3 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL 0 NULL NULL timestamp on update CURRENT_TIMESTAMP def mysql innodb_table_stats n_rows 4 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned def mysql innodb_table_stats sum_of_other_index_sizes 6 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned -def mysql innodb_table_stats table_name 2 NULL NO varchar 64 192 NULL NULL NULL utf8 utf8_bin varchar(64) PRI +def mysql innodb_table_stats table_name 2 NULL NO varchar 199 597 NULL NULL NULL utf8 utf8_bin varchar(199) PRI def mysql ndb_binlog_index deletes 6 NULL NO int NULL NULL 10 0 NULL NULL NULL int(10) unsigned def mysql ndb_binlog_index epoch 3 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(20) unsigned PRI def mysql ndb_binlog_index File 2 NULL NO varchar 255 255 NULL NULL NULL latin1 latin1_swedish_ci varchar(255) @@ -448,7 +448,7 @@ NULL mysql help_topic help_category_id smallint NULL NULL NULL NULL smallint(5) 1.0000 mysql help_topic example text 65535 65535 utf8 utf8_general_ci text 1.0000 mysql help_topic url text 65535 65535 utf8 utf8_general_ci text 3.0000 mysql innodb_index_stats database_name varchar 64 192 utf8 utf8_bin varchar(64) -3.0000 mysql innodb_index_stats table_name varchar 64 192 utf8 utf8_bin varchar(64) +3.0000 mysql innodb_index_stats table_name varchar 199 597 utf8 utf8_bin varchar(199) 3.0000 mysql innodb_index_stats index_name varchar 64 192 utf8 utf8_bin varchar(64) NULL mysql innodb_index_stats last_update timestamp NULL NULL NULL NULL timestamp 3.0000 mysql innodb_index_stats stat_name varchar 64 192 utf8 utf8_bin varchar(64) @@ -456,7 +456,7 @@ NULL mysql innodb_index_stats stat_value bigint NULL NULL NULL NULL bigint(20) u NULL mysql innodb_index_stats sample_size bigint NULL NULL NULL NULL bigint(20) unsigned 3.0000 mysql innodb_index_stats stat_description varchar 1024 3072 utf8 utf8_bin varchar(1024) 3.0000 mysql innodb_table_stats database_name varchar 64 192 utf8 utf8_bin varchar(64) -3.0000 mysql innodb_table_stats table_name varchar 64 192 utf8 utf8_bin varchar(64) +3.0000 mysql innodb_table_stats table_name varchar 199 597 utf8 utf8_bin varchar(199) NULL mysql innodb_table_stats last_update timestamp NULL NULL NULL NULL timestamp NULL mysql innodb_table_stats n_rows bigint NULL NULL NULL NULL bigint(20) unsigned NULL mysql innodb_table_stats clustered_index_size bigint NULL NULL NULL NULL bigint(20) unsigned From f3d3d3d880d5fc6c5bf2e7da9f61e424ea4e231b Mon Sep 17 00:00:00 2001 From: Harin Vadodaria Date: Fri, 25 May 2018 07:16:16 +0200 Subject: [PATCH 0875/1221] WL#11645: Backport caching_sha2_password to libmysql 5.7 Description: 1. Added support for caching_sha2_password in libmysqlclient. 2. Added new option MYSQL_OPT_GET_SERVER_PUBLIC_KEY in libmysqlclient. 3. Added support to set MYSQL_OPT_GET_SERVER_PUBLIC_KEY in libmysqlclient based tools. Reviewed-By: Bharathy Satish Ramil Kalimullin --- client/base/mysql_connection_options.cc | 19 + client/base/mysql_connection_options.h | 2 + client/check/mysqlcheck.cc | 6 + client/mysql.cc | 17 +- client/mysqladmin.cc | 5 + client/mysqlbinlog.cc | 5 + client/mysqldump.c | 6 + client/mysqlimport.c | 6 + client/mysqlshow.c | 6 + client/mysqlslap.cc | 6 + client/mysqltest.cc | 13 +- include/caching_sha2_passwordopt-longopts.h | 62 ++++ include/caching_sha2_passwordopt-vars.h | 51 +++ include/mysql.h | 3 +- include/mysql.h.pp | 6 +- include/mysql/client_authentication.h | 3 + include/mysql_com.h | 4 + include/sql_common.h | 2 +- libmysql/CMakeLists.txt | 1 + sql-common/client.c | 30 ++ sql-common/client_authentication.cc | 238 +++++++++++- sql/CMakeLists.txt | 1 + sql/auth/i_sha2_password_common.h | 141 +++++++ sql/auth/sha2_password_common.cc | 384 ++++++++++++++++++++ 24 files changed, 997 insertions(+), 20 deletions(-) create mode 100644 include/caching_sha2_passwordopt-longopts.h create mode 100644 include/caching_sha2_passwordopt-vars.h create mode 100644 sql/auth/i_sha2_password_common.h create mode 100644 sql/auth/sha2_password_common.cc diff --git a/client/base/mysql_connection_options.cc b/client/base/mysql_connection_options.cc index ada4a8561079..5f5a317fa84e 100644 --- a/client/base/mysql_connection_options.cc +++ b/client/base/mysql_connection_options.cc @@ -21,6 +21,7 @@ #include "mysql_connection_options.h" #include "abstract_program.h" #include +#include "caching_sha2_passwordopt-vars.h" using Mysql::Tools::Base::Abstract_program; using namespace Mysql::Tools::Base::Options; @@ -112,6 +113,11 @@ void Mysql_connection_options::create_options() "Directory for client-side plugins."); this->create_new_option(&this->m_default_auth, "default_auth", "Default authentication client-side plugin to use."); + this->create_new_option(&this->m_server_public_key, "server_public_key_path", + "Path to file containing server public key"); + this->create_new_option(&this->m_get_server_public_key, + "get-server-public-key", + "Get public key from server"); } MYSQL* Mysql_connection_options::create_connection() @@ -157,6 +163,19 @@ MYSQL* Mysql_connection_options::create_connection() mysql_options4(connection, MYSQL_OPT_CONNECT_ATTR_ADD, "program_name", this->m_program->get_name().c_str()); +#if !defined(HAVE_YASSL) + if (this->m_server_public_key.has_value()) + { + opt_server_public_key= + const_cast (this->m_server_public_key.value().c_str()); + } + + opt_get_server_public_key= this->m_get_server_public_key ? TRUE : FALSE; +#endif /* !HAVE_YASSL */ + + set_server_public_key(connection); + set_get_server_public_key_option(connection); + if (!mysql_real_connect(connection, this->get_null_or_string(this->m_host), this->get_null_or_string(this->m_user), diff --git a/client/base/mysql_connection_options.h b/client/base/mysql_connection_options.h index e38b8a37d879..0b238f21255f 100644 --- a/client/base/mysql_connection_options.h +++ b/client/base/mysql_connection_options.h @@ -137,6 +137,8 @@ class Mysql_connection_options Nullable m_user; Nullable m_password; Nullable m_default_charset; + Nullable m_server_public_key; + bool m_get_server_public_key; }; } diff --git a/client/check/mysqlcheck.cc b/client/check/mysqlcheck.cc index b4bf69cfc8db..559c192807d0 100644 --- a/client/check/mysqlcheck.cc +++ b/client/check/mysqlcheck.cc @@ -24,6 +24,7 @@ #include #include #include +#include #include /* ORACLE_WELCOME_COPYRIGHT_NOTICE */ using namespace Mysql::Tools::Check; @@ -198,6 +199,7 @@ static struct my_option my_long_options[] = &opt_mysql_unix_port, &opt_mysql_unix_port, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, #include +#include {"tables", OPT_TABLES, "Overrides option --databases (-B).", 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}, {"use-frm", OPT_FRM, @@ -488,6 +490,10 @@ static int dbConnect(char *host, char *user, char *passwd) mysql_options(&mysql_connection, MYSQL_OPT_CONNECT_ATTR_RESET, 0); mysql_options4(&mysql_connection, MYSQL_OPT_CONNECT_ATTR_ADD, "program_name", "mysqlcheck"); + + set_server_public_key(&mysql_connection); + set_get_server_public_key_option(&mysql_connection); + if (!(sock = mysql_real_connect(&mysql_connection, host, user, passwd, NULL, opt_mysql_port, opt_mysql_unix_port, 0))) { diff --git a/client/mysql.cc b/client/mysql.cc index dbfa4293dec7..79a247a0e1cf 100644 --- a/client/mysql.cc +++ b/client/mysql.cc @@ -168,9 +168,6 @@ static STATUS status; static ulong select_limit,max_join_size,opt_connect_timeout=0; static char mysql_charsets_dir[FN_REFLEN+1]; static char *opt_plugin_dir= 0, *opt_default_auth= 0; -#if !defined(HAVE_YASSL) -static char *opt_server_public_key= 0; -#endif static const char *xmlmeta[] = { "&", "&", "<", "<", @@ -198,6 +195,7 @@ static char *shared_memory_base_name=0; static uint opt_protocol=0; static const CHARSET_INFO *charset_info= &my_charset_latin1; +#include "caching_sha2_passwordopt-vars.h" #include "sslopt-vars.h" const char *default_dbug_option="d:t:o,/tmp/mysql.trace"; @@ -1813,6 +1811,7 @@ static struct my_option my_long_options[] = &opt_mysql_unix_port, &opt_mysql_unix_port, 0, GET_STR_ALLOC, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, #include "sslopt-longopts.h" +#include "caching_sha2_passwordopt-longopts.h" {"table", 't', "Output in table format.", &output_tables, &output_tables, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, {"tee", OPT_TEE, @@ -1880,12 +1879,6 @@ static struct my_option my_long_options[] = "piped to mysql or loaded using the 'source' command). This is necessary " "when processing output from mysqlbinlog that may contain blobs.", &opt_binary_mode, &opt_binary_mode, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, -#if !defined(HAVE_YASSL) - {"server-public-key-path", OPT_SERVER_PUBLIC_KEY, - "File path to the server public RSA key in PEM format.", - &opt_server_public_key, &opt_server_public_key, 0, - GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, -#endif {"connect-expired-password", 0, "Notify the server that this client is prepared to handle expired " "password sandbox mode.", @@ -5160,10 +5153,8 @@ init_connection_options(MYSQL *mysql) if (opt_default_auth && *opt_default_auth) mysql_options(mysql, MYSQL_DEFAULT_AUTH, opt_default_auth); -#if !defined(HAVE_YASSL) - if (opt_server_public_key && *opt_server_public_key) - mysql_options(mysql, MYSQL_SERVER_PUBLIC_KEY, opt_server_public_key); -#endif + set_server_public_key(mysql); + set_get_server_public_key_option(mysql); if (using_opt_enable_cleartext_plugin) mysql_options(mysql, MYSQL_ENABLE_CLEARTEXT_PLUGIN, diff --git a/client/mysqladmin.cc b/client/mysqladmin.cc index d8082f7e24e1..f402dd417713 100644 --- a/client/mysqladmin.cc +++ b/client/mysqladmin.cc @@ -70,6 +70,7 @@ static my_bool ex_status_printed = 0; /* First output is not relative. */ static uint ex_var_count, max_var_length, max_val_length; #include +#include static void print_version(void); static void usage(void); @@ -210,6 +211,7 @@ static struct my_option my_long_options[] = &interval, &interval, 0, GET_INT, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, #include +#include {"user", 'u', "User for login if not current user.", &user, &user, 0, GET_STR_ALLOC, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, {"verbose", 'v', "Write more information.", &opt_verbose, @@ -416,6 +418,9 @@ int main(int argc,char *argv[]) mysql_options(&mysql, MYSQL_OPT_CAN_HANDLE_EXPIRED_PASSWORDS, &can_handle_passwords); + set_server_public_key(&mysql); + set_get_server_public_key_option(&mysql); + if (sql_connect(&mysql, option_wait)) { /* diff --git a/client/mysqlbinlog.cc b/client/mysqlbinlog.cc index b118e1138ddc..98015b1865f7 100644 --- a/client/mysqlbinlog.cc +++ b/client/mysqlbinlog.cc @@ -34,6 +34,7 @@ #include "my_default.h" #include #include +#include /* That one is necessary for defines of OPTION_NO_FOREIGN_KEY_CHECKS etc */ #include "query_options.h" #include @@ -1870,6 +1871,7 @@ static struct my_option my_long_options[] = &sock, &sock, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, #include +#include {"start-datetime", OPT_START_DATETIME, "Start reading the binlog at first event having a datetime equal or " "posterior to the argument; the argument must be a date and time " @@ -2284,6 +2286,9 @@ static Exit_status safe_connect() mysql_options4(mysql, MYSQL_OPT_CONNECT_ATTR_ADD, "_client_role", "binary_log_listener"); + set_server_public_key(mysql); + set_get_server_public_key_option(mysql); + if (!mysql_real_connect(mysql, host, user, pass, 0, port, sock, 0)) { error("Failed on connect: %s", mysql_error(mysql)); diff --git a/client/mysqldump.c b/client/mysqldump.c index baaf5c85abd3..5844ca5b17f6 100644 --- a/client/mysqldump.c +++ b/client/mysqldump.c @@ -143,6 +143,7 @@ static char * opt_mysql_unix_port=0; static char *opt_bind_addr = NULL; static int first_error=0; #include +#include FILE *md_result_file= 0; FILE *stderror_file=0; @@ -526,6 +527,7 @@ static struct my_option my_long_options[] = " uses old (pre-4.1.1) protocol. Deprecated. Always TRUE", &opt_secure_auth, &opt_secure_auth, 0, GET_BOOL, NO_ARG, 1, 0, 0, 0, 0, 0}, #include +#include {"tab",'T', "Create tab-separated textfile for each table to given path. (Create .sql " "and .txt files.) NOTE: This only works if mysqldump is run on the same " @@ -1681,6 +1683,10 @@ static int connect_to_db(char *host, char *user,char *passwd) mysql_options(&mysql_connection, MYSQL_OPT_CONNECT_ATTR_RESET, 0); mysql_options4(&mysql_connection, MYSQL_OPT_CONNECT_ATTR_ADD, "program_name", "mysqldump"); + + set_server_public_key(&mysql_connection); + set_get_server_public_key_option(&mysql_connection); + if (!(mysql= mysql_real_connect(&mysql_connection,host,user,passwd, NULL,opt_mysql_port,opt_mysql_unix_port, 0))) diff --git a/client/mysqlimport.c b/client/mysqlimport.c index cb62fd167083..c29293dd0387 100644 --- a/client/mysqlimport.c +++ b/client/mysqlimport.c @@ -59,6 +59,7 @@ static char * opt_mysql_unix_port=0; static char *opt_plugin_dir= 0, *opt_default_auth= 0; static longlong opt_ignore_lines= -1; #include +#include #if defined (_WIN32) && !defined (EMBEDDED_LIBRARY) static char *shared_memory_base_name=0; @@ -187,6 +188,7 @@ static struct my_option my_long_options[] = &opt_mysql_unix_port, &opt_mysql_unix_port, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, #include +#include {"use-threads", OPT_USE_THREADS, "Load files in parallel. The argument is the number " "of threads to use for loading data.", @@ -497,6 +499,10 @@ static MYSQL *db_connect(char *host, char *database, mysql_options(mysql, MYSQL_OPT_CONNECT_ATTR_RESET, 0); mysql_options4(mysql, MYSQL_OPT_CONNECT_ATTR_ADD, "program_name", "mysqlimport"); + + set_server_public_key(mysql); + set_get_server_public_key_option(mysql); + if (!(mysql_real_connect(mysql,host,user,passwd, database,opt_mysql_port,opt_mysql_unix_port, 0))) diff --git a/client/mysqlshow.c b/client/mysqlshow.c index 2a874a456548..acae757250da 100644 --- a/client/mysqlshow.c +++ b/client/mysqlshow.c @@ -28,6 +28,7 @@ #include #include #include +#include #include /* ORACLE_WELCOME_COPYRIGHT_NOTICE */ static char * host=0, *opt_password=0, *user=0; @@ -145,6 +146,10 @@ int main(int argc, char **argv) mysql_options(&mysql, MYSQL_OPT_CONNECT_ATTR_RESET, 0); mysql_options4(&mysql, MYSQL_OPT_CONNECT_ATTR_ADD, "program_name", "mysqlshow"); + + set_server_public_key(&mysql); + set_get_server_public_key_option(&mysql); + if (!(mysql_real_connect(&mysql,host,user,opt_password, (first_argument_uses_wildcards) ? "" : argv[0],opt_mysql_port,opt_mysql_unix_port, @@ -264,6 +269,7 @@ static struct my_option my_long_options[] = &opt_mysql_unix_port, &opt_mysql_unix_port, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, #include +#include {"user", 'u', "User for login if not current user.", &user, &user, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, {"verbose", 'v', diff --git a/client/mysqlslap.cc b/client/mysqlslap.cc index 0d52e4136dd3..94dcc41bca8b 100644 --- a/client/mysqlslap.cc +++ b/client/mysqlslap.cc @@ -87,6 +87,7 @@ #include #include #include +#include #include #ifdef HAVE_SYS_WAIT_H #include @@ -359,6 +360,10 @@ int main(int argc, char **argv) if (using_opt_enable_cleartext_plugin) mysql_options(&mysql, MYSQL_ENABLE_CLEARTEXT_PLUGIN, (char*) &opt_enable_cleartext_plugin); + + set_server_public_key(&mysql); + set_get_server_public_key_option(&mysql); + if (!opt_only_print) { if (!(mysql_real_connect(&mysql, host, user, opt_password, @@ -705,6 +710,7 @@ static struct my_option my_long_options[] = {"sql_mode", 0, "Specify sql-mode to run mysqlslap tool.", &sql_mode, &sql_mode, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, #include +#include {"user", 'u', "User for login if not current user.", &user, &user, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, {"verbose", 'v', diff --git a/client/mysqltest.cc b/client/mysqltest.cc index 8f6dbf571dc2..61501c2cb1b1 100644 --- a/client/mysqltest.cc +++ b/client/mysqltest.cc @@ -165,9 +165,6 @@ static my_bool is_windows= 0; static char **default_argv; static const char *load_default_groups[]= { "mysqltest", "client", 0 }; static char line_buffer[MAX_DELIMITER_LENGTH], *line_buffer_pos= line_buffer; -#if !defined(HAVE_YASSL) -static const char *opt_server_public_key= 0; -#endif static my_bool can_handle_expired_passwords= TRUE; /* Info on properties that can be set with --enable_X and --disable_X */ @@ -299,6 +296,7 @@ typedef Prealloced_array Q_lines; Q_lines *q_lines; #include "sslopt-vars.h" +#include struct Parser { @@ -5744,6 +5742,10 @@ void safe_connect(MYSQL* mysql, const char *name, const char *host, "program_name", "mysqltest"); mysql_options(mysql, MYSQL_OPT_CAN_HANDLE_EXPIRED_PASSWORDS, &can_handle_expired_passwords); + + set_server_public_key(mysql); + set_get_server_public_key_option(mysql); + while(!mysql_real_connect(mysql, host,user, pass, db, port, sock, CLIENT_MULTI_STATEMENTS | CLIENT_REMEMBER_OPTIONS)) { @@ -5849,6 +5851,10 @@ int connect_n_handle_errors(struct st_command *command, mysql_options4(con, MYSQL_OPT_CONNECT_ATTR_ADD, "program_name", "mysqltest"); mysql_options(con, MYSQL_OPT_CAN_HANDLE_EXPIRED_PASSWORDS, &can_handle_expired_passwords); + + set_server_public_key(con); + set_get_server_public_key_option(con); + while (!mysql_real_connect(con, host, user, pass, db, port, sock ? sock: 0, CLIENT_MULTI_STATEMENTS)) { @@ -7102,6 +7108,7 @@ static struct my_option my_long_options[] = &sp_protocol, &sp_protocol, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, #include "sslopt-longopts.h" +#include {"tail-lines", OPT_TAIL_LINES, "Number of lines of the result to include in a failure report.", &opt_tail_lines, &opt_tail_lines, 0, diff --git a/include/caching_sha2_passwordopt-longopts.h b/include/caching_sha2_passwordopt-longopts.h new file mode 100644 index 000000000000..48d83af8623b --- /dev/null +++ b/include/caching_sha2_passwordopt-longopts.h @@ -0,0 +1,62 @@ +/* Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License, version 2.0, + as published by the Free Software Foundation. + + This program is also distributed with certain software (including + but not limited to OpenSSL) that is licensed under separate terms, + as designated in a particular file or component or in included license + documentation. The authors of MySQL hereby grant you an additional + permission to link the program and your derivative works with the + separately licensed software that they have included with MySQL. + + 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, version 2.0, 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 */ + +/** + @file include/caching_sha2_passwordopt-longopts.h +*/ + +#ifndef HAVE_YASSL + +{ + "server-public-key-path", + OPT_SERVER_PUBLIC_KEY, + "File path to the server public RSA key in PEM format.", + &opt_server_public_key, + &opt_server_public_key, + 0, + GET_STR, + REQUIRED_ARG, + 0, + 0, + 0, + 0, + 0, + 0 +}, +{ + "get-server-public-key", + 0, + "Get server public key", + &opt_get_server_public_key, + &opt_get_server_public_key, + 0, + GET_BOOL, + NO_ARG, + 0, + 0, + 0, + 0, + 0, + 0 +}, + +#endif /* HAVE_YASSL */ diff --git a/include/caching_sha2_passwordopt-vars.h b/include/caching_sha2_passwordopt-vars.h new file mode 100644 index 000000000000..773106b3f8b6 --- /dev/null +++ b/include/caching_sha2_passwordopt-vars.h @@ -0,0 +1,51 @@ +/* Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License, version 2.0, + as published by the Free Software Foundation. + + This program is also distributed with certain software (including + but not limited to OpenSSL) that is licensed under separate terms, + as designated in a particular file or component or in included license + documentation. The authors of MySQL hereby grant you an additional + permission to link the program and your derivative works with the + separately licensed software that they have included with MySQL. + + 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, version 2.0, 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 */ + +/** + @file include/caching_sha2_passwordopt-vars.h +*/ + +#ifndef HAVE_YASSL +#include "mysql.h" +static char *opt_server_public_key= 0; +static my_bool opt_get_server_public_key= FALSE; +#endif /* HAVE_YASSL */ + +inline static void set_server_public_key(MYSQL *mysql) +{ +#ifndef HAVE_YASSL + if (opt_server_public_key && *opt_server_public_key) + mysql_options(mysql, MYSQL_SERVER_PUBLIC_KEY, opt_server_public_key); +#else + (void)mysql; +#endif /* HAVE_YASSL */ +} + +inline static void set_get_server_public_key_option(MYSQL *mysql) +{ +#ifndef HAVE_YASSL + mysql_options(mysql, MYSQL_OPT_GET_SERVER_PUBLIC_KEY, + &opt_get_server_public_key); +#else + (void)mysql; +#endif /* HAVE_YASSL */ +} diff --git a/include/mysql.h b/include/mysql.h index 43a444b6c5fa..2bcd2b368c4f 100644 --- a/include/mysql.h +++ b/include/mysql.h @@ -166,7 +166,8 @@ enum mysql_option MYSQL_OPT_SSL_ENFORCE, MYSQL_OPT_MAX_ALLOWED_PACKET, MYSQL_OPT_NET_BUFFER_LENGTH, MYSQL_OPT_TLS_VERSION, - MYSQL_OPT_SSL_MODE + MYSQL_OPT_SSL_MODE, + MYSQL_OPT_GET_SERVER_PUBLIC_KEY }; /** diff --git a/include/mysql.h.pp b/include/mysql.h.pp index 7583af65ac93..7db03d5dd592 100644 --- a/include/mysql.h.pp +++ b/include/mysql.h.pp @@ -180,6 +180,9 @@ void get_salt_from_password(unsigned char *res, const char *password); void make_password_from_salt(char *to, const unsigned char *hash_stage2); char *octet2hex(char *to, const char *str, unsigned int len); +my_bool generate_sha256_scramble(unsigned char *dst, size_t dst_size, + const char *src, size_t src_size, const char *rnd, + size_t rnd_size); char *get_tty_password(const char *opt_message); const char *mysql_errno_to_sqlstate(unsigned int mysql_errno); my_bool my_thread_init(void); @@ -362,7 +365,8 @@ MYSQL_OPT_SSL_ENFORCE, MYSQL_OPT_MAX_ALLOWED_PACKET, MYSQL_OPT_NET_BUFFER_LENGTH, MYSQL_OPT_TLS_VERSION, - MYSQL_OPT_SSL_MODE + MYSQL_OPT_SSL_MODE, + MYSQL_OPT_GET_SERVER_PUBLIC_KEY }; struct st_mysql_options_extention; struct st_mysql_options { diff --git a/include/mysql/client_authentication.h b/include/mysql/client_authentication.h index 98ed16929740..e40929d9920d 100644 --- a/include/mysql/client_authentication.h +++ b/include/mysql/client_authentication.h @@ -22,6 +22,9 @@ C_MODE_START int sha256_password_auth_client(MYSQL_PLUGIN_VIO *vio, MYSQL *mysql); int sha256_password_init(char *, size_t, int, va_list); int sha256_password_deinit(void); +int caching_sha2_password_auth_client(MYSQL_PLUGIN_VIO *vio, MYSQL *mysql); +int caching_sha2_password_init(char *, size_t, int, va_list); +int caching_sha2_password_deinit(void); C_MODE_END #endif diff --git a/include/mysql_com.h b/include/mysql_com.h index 4b540bf4c90c..9ce72fbaa19c 100644 --- a/include/mysql_com.h +++ b/include/mysql_com.h @@ -587,6 +587,10 @@ char *octet2hex(char *to, const char *str, unsigned int len); /* end of password.c */ +my_bool generate_sha256_scramble(unsigned char *dst, size_t dst_size, + const char *src, size_t src_size, const char *rnd, + size_t rnd_size); + char *get_tty_password(const char *opt_message); const char *mysql_errno_to_sqlstate(unsigned int mysql_errno); diff --git a/include/sql_common.h b/include/sql_common.h index 1ecd95740587..2fe33dac26ea 100644 --- a/include/sql_common.h +++ b/include/sql_common.h @@ -103,7 +103,7 @@ struct st_mysql_options_extention { char *server_public_key_path; size_t connection_attributes_length; my_bool enable_cleartext_plugin; - my_bool unused0; /* Former ssl_enforce */ + my_bool get_server_public_key; char *tls_version; /* TLS version option */ long ssl_ctx_flags; /* SSL ctx options flag */ unsigned int ssl_mode; diff --git a/libmysql/CMakeLists.txt b/libmysql/CMakeLists.txt index cc890b962489..6ad0b92f00e1 100644 --- a/libmysql/CMakeLists.txt +++ b/libmysql/CMakeLists.txt @@ -188,6 +188,7 @@ SET(CLIENT_SOURCES ../sql/net_serv.cc ../sql-common/pack.c ../sql/auth/password.c + ../sql/auth/sha2_password_common.cc ) IF (WIN32 AND OPENSSL_APPLINK_C) diff --git a/sql-common/client.c b/sql-common/client.c index 2f5deeb54ac6..67e980e4e113 100644 --- a/sql-common/client.c +++ b/sql-common/client.c @@ -108,6 +108,8 @@ my_bool net_flush(NET *net); } #define native_password_plugin_name "mysql_native_password" +#define caching_sha2_password_plugin_name "caching_sha2_password" + PSI_memory_key key_memory_mysql_options; PSI_memory_key key_memory_MYSQL_DATA; @@ -3203,6 +3205,22 @@ static auth_plugin_t sha256_password_client_plugin= NULL, sha256_password_auth_client }; + +static auth_plugin_t caching_sha2_password_client_plugin= +{ + MYSQL_CLIENT_AUTHENTICATION_PLUGIN, + MYSQL_CLIENT_AUTHENTICATION_PLUGIN_INTERFACE_VERSION, + caching_sha2_password_plugin_name, + "Oracle Inc", + "SHA2 based authentication with salt", + {1, 0, 0}, + "GPL", + NULL, + caching_sha2_password_init, + caching_sha2_password_deinit, + NULL, + caching_sha2_password_auth_client +}; #endif #ifdef AUTHENTICATION_WIN extern auth_plugin_t win_auth_client_plugin; @@ -3225,6 +3243,7 @@ struct st_mysql_client_plugin *mysql_client_builtins[]= (struct st_mysql_client_plugin *)&clear_password_client_plugin, #if defined(HAVE_OPENSSL) (struct st_mysql_client_plugin *) &sha256_password_client_plugin, + (struct st_mysql_client_plugin *) &caching_sha2_password_client_plugin, #endif #ifdef AUTHENTICATION_WIN (struct st_mysql_client_plugin *)&win_auth_client_plugin, @@ -5699,6 +5718,12 @@ mysql_options(MYSQL *mysql,enum mysql_option option, const void *arg) EXTENSION_SET_STRING(&mysql->options, server_public_key_path, arg); break; + case MYSQL_OPT_GET_SERVER_PUBLIC_KEY: + ENSURE_EXTENSIONS_PRESENT(&mysql->options); + mysql->options.extension->get_server_public_key= + (*(my_bool *)arg) ? TRUE : FALSE; + break; + case MYSQL_OPT_CONNECT_ATTR_RESET: ENSURE_EXTENSIONS_PRESENT(&mysql->options); if (my_hash_inited(&mysql->options.extension->connection_attributes)) @@ -5935,6 +5960,11 @@ mysql_get_option(MYSQL *mysql, enum mysql_option option, const void *arg) *((char **)arg)= mysql->options.extension ? mysql->options.extension->server_public_key_path : NULL; break; + case MYSQL_OPT_GET_SERVER_PUBLIC_KEY: + *((my_bool *)arg)= (mysql->options.extension && + mysql->options.extension->get_server_public_key) + ? TRUE : FALSE; + break; case MYSQL_ENABLE_CLEARTEXT_PLUGIN: *((my_bool *)arg)= (mysql->options.extension && mysql->options.extension->enable_cleartext_plugin) ? diff --git a/sql-common/client_authentication.cc b/sql-common/client_authentication.cc index 7d4f098dfc27..eee7fc0ed90a 100644 --- a/sql-common/client_authentication.cc +++ b/sql-common/client_authentication.cc @@ -35,9 +35,12 @@ #endif #endif #include "mysql/plugin.h" +#include "sha2.h" #define MAX_CIPHER_LENGTH 1024 +#define SHA2_SCRAMBLE_LENGTH SHA256_DIGEST_LENGTH + #if !defined(HAVE_YASSL) mysql_mutex_t g_public_key_mutex; #endif @@ -279,4 +282,237 @@ int sha256_password_auth_client(MYSQL_PLUGIN_VIO *vio, MYSQL *mysql) DBUG_RETURN(CR_OK); } -#endif +/* caching_sha2_password */ + +int caching_sha2_password_init(char *, size_t, int, va_list) +{ + return 0; +} + +int caching_sha2_password_deinit(void) +{ + return 0; +} + +static bool is_secure_transport(MYSQL *mysql) +{ + if (!mysql || !mysql->net.vio) + return false; + switch (mysql->net.vio->type) + { + case VIO_TYPE_SSL: + { + if (mysql_get_ssl_cipher(mysql) == NULL) + return false; + } + // Fall through + case VIO_TYPE_SHARED_MEMORY: + // Fall through + case VIO_TYPE_SOCKET: + return true; + default: + return false; + } + return false; +} + +/** + Authenticate the client using the RSA or TLS and a SHA2 salted password. + + @param vio Provides plugin access to communication channel + @param mysql Client connection handler + + @return Error status + @retval CR_ERROR An error occurred. + @retval CR_OK Authentication succeeded. +*/ + +#if !defined(HAVE_YASSL) +static char request_public_key= '\2'; +#endif /* !HAVE_YASSL */ +static char fast_auth_success= '\3'; +static char perform_full_authentication= '\4'; + +int caching_sha2_password_auth_client(MYSQL_PLUGIN_VIO *vio, MYSQL *mysql) +{ + bool uses_password= mysql->passwd[0] != 0; +#if !defined(HAVE_YASSL) + unsigned char encrypted_password[MAX_CIPHER_LENGTH]; + RSA *public_key= NULL; + bool got_public_key_from_server= false; +#endif /* !HAVE_YASSL */ + bool connection_is_secure= false; + unsigned char scramble_pkt[20]; + unsigned char *pkt; + + DBUG_ENTER("caching_sha2_password_auth_client"); + + /* + Get the scramble from the server because we need it when sending encrypted + password. + */ + if (vio->read_packet(vio, &pkt) != SCRAMBLE_LENGTH + 1) + { + DBUG_PRINT("info", ("Scramble is not of correct length.")); + DBUG_RETURN(CR_ERROR); + } + + if (pkt[SCRAMBLE_LENGTH] != '\0') + { + DBUG_PRINT("info", ("Missing protocol token in scramble data.")); + DBUG_RETURN(CR_ERROR); + } + + /* + Copy the scramble to the stack or it will be lost on the next use of the + net buffer. + */ + memcpy(scramble_pkt, pkt, SCRAMBLE_LENGTH); + + connection_is_secure= is_secure_transport(mysql); + + if (!uses_password) + { + /* We're not using a password */ + static const unsigned char zero_byte= '\0'; + if (vio->write_packet(vio, &zero_byte, 1)) + DBUG_RETURN(CR_ERROR); + DBUG_RETURN(CR_OK); + } + else + { + /* Password is a 0-terminated byte array ('\0' character included) */ + unsigned int passwd_len= + static_cast(strlen(mysql->passwd) + 1); + int pkt_len= 0; + { + /* First try with SHA2 scramble */ + unsigned char sha2_scramble[SHA2_SCRAMBLE_LENGTH]; + if (generate_sha256_scramble(sha2_scramble, SHA2_SCRAMBLE_LENGTH, + mysql->passwd, passwd_len - 1, + (char *)scramble_pkt, SCRAMBLE_LENGTH)) + { + set_mysql_extended_error(mysql, CR_AUTH_PLUGIN_ERR, unknown_sqlstate, + ER(CR_AUTH_PLUGIN_ERR), + "caching_sha2_password", + "Failed to generate scramble"); + DBUG_RETURN(CR_ERROR); + } + + if (vio->write_packet(vio, sha2_scramble, SHA2_SCRAMBLE_LENGTH)) + DBUG_RETURN(CR_ERROR); + + if ((pkt_len= vio->read_packet(vio, &pkt)) == -1) + DBUG_RETURN(CR_ERROR); + + if (pkt_len == 1 && *pkt == fast_auth_success) + DBUG_RETURN(CR_OK); + + /* An OK packet would follow */ + } + + if (pkt_len != 1 || *pkt != perform_full_authentication) + { + DBUG_PRINT("info", ("Unexpected reply from server.")); + DBUG_RETURN(CR_ERROR); + } + + if (!connection_is_secure) + { +#ifndef HAVE_YASSL + /* If connection isn't secure attempt to get the RSA public key file */ + public_key= rsa_init(mysql); + + if (public_key == NULL && mysql->options.extension && + mysql->options.extension->get_server_public_key) + { + // If no public key; request one from the server. + if (vio->write_packet(vio, (const unsigned char *)&request_public_key, + 1)) + DBUG_RETURN(CR_ERROR); + + if ((pkt_len= vio->read_packet(vio, &pkt)) <= 0) + DBUG_RETURN(CR_ERROR); + BIO *bio= BIO_new_mem_buf(pkt, pkt_len); + public_key= PEM_read_bio_RSA_PUBKEY(bio, NULL, NULL, NULL); + BIO_free(bio); + if (public_key == 0) + { + ERR_clear_error(); + DBUG_PRINT("info", ("Failed to parse public key")); + DBUG_RETURN(CR_ERROR); + } + got_public_key_from_server= true; + } + + if (public_key) + { + /* + An arbitrary limitation based on the assumption that passwords + larger than e.g. 15 symbols don't contribute to security. + Note also that it's further restricted to RSA_size() - 11 down + below, so this leaves 471 bytes of possible RSA key sizes which + should be reasonably future-proof. + We avoid heap allocation for speed reasons. + */ + char passwd_scramble[512]; + + if (passwd_len > sizeof(passwd_scramble)) + { + /* password too long for the buffer */ + if (got_public_key_from_server) RSA_free(public_key); + DBUG_PRINT("info", ("Password is too long.")); + DBUG_RETURN(CR_ERROR); + } + memmove(passwd_scramble, mysql->passwd, passwd_len); + + /* Obfuscate the plain text password with the session scramble */ + xor_string(passwd_scramble, passwd_len - 1, (char *)scramble_pkt, + SCRAMBLE_LENGTH); + /* Encrypt the password and send it to the server */ + int cipher_length= RSA_size(public_key); + /* + When using RSA_PKCS1_OAEP_PADDING the password length must be less + than RSA_size(rsa) - 41. + */ + if (passwd_len + 41 >= (unsigned)cipher_length) + { + /* password message is to long */ + if (got_public_key_from_server) + RSA_free(public_key); + DBUG_PRINT("info", ("Password is too long to be encrypted using " + "given public key.")); + DBUG_RETURN(CR_ERROR); + } + RSA_public_encrypt(passwd_len, (unsigned char *)passwd_scramble, + encrypted_password, public_key, + RSA_PKCS1_OAEP_PADDING); + if (got_public_key_from_server) + RSA_free(public_key); + + if (vio->write_packet(vio, (uchar *)encrypted_password, cipher_length)) + DBUG_RETURN(CR_ERROR); + } + else + { +#endif /* !HAVE_YASSL */ + set_mysql_extended_error(mysql, CR_AUTH_PLUGIN_ERR, unknown_sqlstate, + ER(CR_AUTH_PLUGIN_ERR), + "caching_sha2_password", + "Authentication requires secure connection."); + DBUG_RETURN(CR_ERROR); +#ifndef HAVE_YASSL + } +#endif /* !HAVE_YASSL */ + } + else + { + /* The vio is encrypted already; just send the plain text passwd */ + if (vio->write_packet(vio, (uchar *)mysql->passwd, passwd_len)) + DBUG_RETURN(CR_ERROR); + } + } + DBUG_RETURN(CR_OK); +} + +#endif /* HAVE_OPENSSL */ diff --git a/sql/CMakeLists.txt b/sql/CMakeLists.txt index 0bf31070d21b..501383f65878 100644 --- a/sql/CMakeLists.txt +++ b/sql/CMakeLists.txt @@ -290,6 +290,7 @@ SET(SQL_SOURCE srv_session.cc srv_session_info_service.cc srv_session_service.cc + auth/sha2_password_common.cc ) IF(NOT WIN32) diff --git a/sql/auth/i_sha2_password_common.h b/sql/auth/i_sha2_password_common.h new file mode 100644 index 000000000000..0036638f3e2a --- /dev/null +++ b/sql/auth/i_sha2_password_common.h @@ -0,0 +1,141 @@ +/* Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License, version 2.0, + as published by the Free Software Foundation. + + This program is also distributed with certain software (including + but not limited to OpenSSL) that is licensed under separate terms, + as designated in a particular file or component or in included license + documentation. The authors of MySQL hereby grant you an additional + permission to link the program and your derivative works with the + separately licensed software that they have included with MySQL. + + 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, version 2.0, 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 */ + +#ifndef I_SHA2_PASSWORD_COMMON_INCLUDED +#define I_SHA2_PASSWORD_COMMON_INCLUDED + +#include +#if !defined(HAVE_YASSL) +#include +#endif /* !HAVE_YASSL */ +#include "sha2.h" /* SHA256_DIGEST_LENGTH */ + +#include + +/** + @file sql/auth/i_sha2_password_common.h + Classes for caching_sha2_authentication plugin +*/ + +/** + @defgroup auth_caching_sha2_auth caching_sha2_authentication information + @{ +*/ +namespace sha2_password { +/* Digest length for caching_sha2_authentication plugin */ +const unsigned int CACHING_SHA2_DIGEST_LENGTH= SHA256_DIGEST_LENGTH; + +/** + Supported digest information +*/ + +typedef enum Digest_info +{ + SHA256_DIGEST= 0, + DIGEST_LAST +} Digest_info; + +/** + Interface for cryptographic digest generation +*/ + +class Generate_digest +{ + public: + virtual bool update_digest(const void *src, unsigned int length)= 0; + virtual bool retrieve_digest(unsigned char *digest, unsigned int length)= 0; + virtual void scrub()= 0; + virtual ~Generate_digest() {} +}; + +#ifndef HAVE_YASSL +#define DIGEST_CTX EVP_MD_CTX +#else +#define DIGEST_CTX TaoCrypt::SHA256 +#endif /* !HAVE_YASSL */ + +/** + SHA256 digest generator + @sa Generate_digest + @sa Digest_info +*/ + +class SHA256_digest : public Generate_digest +{ + public: + SHA256_digest(); + ~SHA256_digest(); + + bool update_digest(const void *src, unsigned int length); + bool retrieve_digest(unsigned char *digest, unsigned int length); + void scrub(); + bool all_ok() { return m_ok; } + + private: + void init(); + void deinit(); + + private: + /** Digest output buffer */ + unsigned char m_digest[CACHING_SHA2_DIGEST_LENGTH]; + /** Digest context */ + DIGEST_CTX *md_context; + /** Status */ + bool m_ok; +}; + +/** + Scramble generator + Responsible for generating scramble of following format: + XOR(SHA2(m_src), SHA2(SHA2(SHA2(m_src)), m_rnd)) + @sa SHA256_digest + @sa Digest_info +*/ + +class Generate_scramble +{ +public: + Generate_scramble(const std::string source, const std::string rnd, + Digest_info digest_type= SHA256_DIGEST); + + ~Generate_scramble(); + + bool scramble(unsigned char *scramble, unsigned int scramble_length); + + private: + /** plaintext source string */ + std::string m_src; + /** random string */ + std::string m_rnd; + /** Type of digest */ + Digest_info m_digest_type; + /** Digest generator class */ + Generate_digest *m_digest_generator; + /** length of the digest */ + unsigned int m_digest_length; +}; + +} // namespace sha2_password + +/** @} (end of auth_caching_sha2_auth) */ + +#endif // !I_SHA2_PASSWORD_INCLUDED diff --git a/sql/auth/sha2_password_common.cc b/sql/auth/sha2_password_common.cc new file mode 100644 index 000000000000..0ae5a55c3ac4 --- /dev/null +++ b/sql/auth/sha2_password_common.cc @@ -0,0 +1,384 @@ +/* + Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License, version 2.0, + as published by the Free Software Foundation. + + This program is also distributed with certain software (including + but not limited to OpenSSL) that is licensed under separate terms, + as designated in a particular file or component or in included license + documentation. The authors of MySQL hereby grant you an additional + permission to link the program and your derivative works with the + separately licensed software that they have included with MySQL. + + 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, version 2.0, 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 */ + + +#include "my_config.h" + +#ifdef HAVE_ALLOCA_H +#include +#endif +#include +#include +#include +#include + +#include "my_compiler.h" +#include "my_dbug.h" /* DBUG instrumentation */ +#include "my_global.h" +#include "i_sha2_password_common.h" + +#ifdef HAVE_YASSL +void * EVP_sha256() +{ + return NULL; +} + +#define EVP_MD_CTX_create \ +new DIGEST_CTX + +int EVP_DigestInit_ex(DIGEST_CTX *ctx, + void *a MY_ATTRIBUTE((unused)), + void *b MY_ATTRIBUTE((unused))) +{ + ctx->Init(); + return 1; +} + +int EVP_DigestUpdate(DIGEST_CTX *ctx, const void *plaintext, int len) +{ + ctx->Update((const TaoCrypt::byte *)plaintext, len); + return 1; +} + +int EVP_DigestFinal_ex(DIGEST_CTX *ctx, void *txt, + unsigned int *unused MY_ATTRIBUTE((unused))) +{ + ctx->Final((TaoCrypt::byte *)txt); + return 1; +} + +#define EVP_MD_CTX_cleanup(CTX) CTX->Init() +#define EVP_MD_CTX_destroy delete + +#endif /* !HAVE_YASSL */ + +namespace sha2_password { +/** + SHA256 digest generator constructor + + Initializes digest context and sets + status of initialization. + + If m_ok is set to false at the end, + it indicates a problem in initialization. +*/ + +SHA256_digest::SHA256_digest() + : m_ok(false) +{ + init(); +} + +/** + Release acquired memory +*/ + +SHA256_digest::~SHA256_digest() +{ + deinit(); +} + +/** + Update digest with plaintext + + @param [in] src Plaintext to be added + @param [in] length Length of the plaintext + + @returns digest update status + @retval true Problem updating digest + @retval false Success +*/ + +bool SHA256_digest::update_digest(const void *src, unsigned int length) +{ + DBUG_ENTER("SHA256_digest::update_digest"); + if (!m_ok || !src) + { + DBUG_PRINT("info", ("Either digest context is not ok or " + "source is emptry string")); + DBUG_RETURN(true); + } + m_ok= EVP_DigestUpdate(md_context, src, length); + DBUG_RETURN(!m_ok); +} + +/** + Retrive generated digest + + @param [out] digest Digest text + @param [in] length Length of the digest buffer + + Assumption : memory for digest has been allocated + + @returns digest retrieval status + @retval true Error + @retval false Success +*/ + +bool SHA256_digest::retrieve_digest(unsigned char *digest, + unsigned int length) +{ + DBUG_ENTER("SHA256_digest::retrieve_digest"); + if (!m_ok || !digest || length != CACHING_SHA2_DIGEST_LENGTH) + { + DBUG_PRINT("info", ("Either digest context is not ok or " + "digest length is not as expected.")); + DBUG_RETURN(true); + } + m_ok= EVP_DigestFinal_ex(md_context, m_digest, NULL); +#if defined(HAVE_WOLFSSL) || OPENSSL_VERSION_NUMBER < 0x10100000L + EVP_MD_CTX_cleanup(md_context); +#else /* OPENSSL_VERSION_NUMBER < 0x10100000L */ + EVP_MD_CTX_reset(md_context); +#endif /* OPENSSL_VERSION_NUMBER < 0x10100000L */ + memcpy(digest, m_digest, length); + DBUG_RETURN(!m_ok); +} + +/** + Cleanup and reinit +*/ + +void SHA256_digest::scrub() +{ + deinit(); + init(); +} + +/** + Initialize digest context + + 1. Allocate memory for digest context + 2. Call initialization function(s) +*/ + +void SHA256_digest::init() +{ + DBUG_ENTER("SHA256_digest::init"); + m_ok= false; + md_context= EVP_MD_CTX_create(); + if (!md_context) + { + DBUG_PRINT("info", ("Failed to create digest context")); + DBUG_VOID_RETURN; + } + + m_ok= (bool)EVP_DigestInit_ex(md_context, EVP_sha256(), NULL); + + if (!m_ok) + { + EVP_MD_CTX_destroy(md_context); + md_context= NULL; + DBUG_PRINT("info", ("Failed to initialize digest context")); + } + DBUG_VOID_RETURN; +} + +/** + Release allocated memory for digest context +*/ + +void SHA256_digest::deinit() +{ + if (md_context) + { + EVP_MD_CTX_destroy(md_context); + md_context= NULL; + } + m_ok= false; +} + +/** + Generate_scramble constructor + + @param [in] source Plaintext source + @param [in] rnd Salt + @param [in] digest_type Digest type +*/ +Generate_scramble::Generate_scramble(const std::string source, + const std::string rnd, + Digest_info digest_type) /*= Digest_info::SHA256_DIGEST */ + : m_src(source), + m_rnd(rnd), + m_digest_type(digest_type) +{ + switch (m_digest_type) + { + case SHA256_DIGEST: + { + m_digest_generator= new SHA256_digest(); + m_digest_length= CACHING_SHA2_DIGEST_LENGTH; + break; + } + default: + DBUG_ASSERT(false); + }; +} + +/** + Generate_scramble destructor +*/ + +Generate_scramble::~Generate_scramble() +{ + if (m_digest_generator) + { + delete m_digest_generator; + m_digest_generator= 0; + } +} + +/** + Scramble generation + + @param [out] scramble Output buffer for generated scramble + @param [in] scramble_length Size of scramble buffer + + @note + SHA2(src) => digest_stage1 + SHA2(digest_stage1) => digest_stage2 + SHA2(digest_stage2, m_rnd) => scramble_stage1 + XOR(digest_stage1, scramble_stage1) => scramble + + @returns Status of scramble generation + @retval true Error generating scramble + @retval false Success +*/ + +bool Generate_scramble::scramble(unsigned char *scramble, + unsigned int scramble_length) +{ + DBUG_ENTER("Generate_scramble::scramble"); + unsigned char *digest_stage1; + unsigned char *digest_stage2; + unsigned char *scramble_stage1; + + if (!scramble || scramble_length != m_digest_length) + { + DBUG_PRINT("info", ("Unexpected scrable length" + "Expected: %d, Actual: %d", + m_digest_length, !scramble ? 0 : scramble_length)); + DBUG_RETURN(true); + } + + switch (m_digest_type) + { + case SHA256_DIGEST: + { + /* + We are using alloca only for a small amount of + memory - 48 bytes. And we do not make recursive calls + to ::scramble function. So it is relatively safe. + */ + digest_stage1= (unsigned char *)alloca(m_digest_length); + digest_stage2= (unsigned char *)alloca(m_digest_length); + scramble_stage1= (unsigned char *)alloca(m_digest_length); + break; + } + default: + { + DBUG_ASSERT(false); + DBUG_RETURN(true); + } + } + + /* SHA2(src) => digest_stage1 */ + if (m_digest_generator->update_digest(m_src.c_str(), m_src.length()) || + m_digest_generator->retrieve_digest(digest_stage1, m_digest_length)) + { + DBUG_PRINT("info", ("Failed to generate digest_stage1: SHA2(src)")); + DBUG_RETURN(true); + } + + /* SHA2(digest_stage1) => digest_stage2 */ + m_digest_generator->scrub(); + if (m_digest_generator->update_digest(digest_stage1, m_digest_length) || + m_digest_generator->retrieve_digest(digest_stage2, m_digest_length)) + { + DBUG_PRINT("info", + ("Failed to generate digest_stage2: SHA2(digest_stage1)")); + DBUG_RETURN(true); + } + + /* SHA2(digest_stage2, m_rnd) => scramble_stage1 */ + m_digest_generator->scrub(); + if (m_digest_generator->update_digest(digest_stage2, m_digest_length) || + m_digest_generator->update_digest(m_rnd.c_str(), m_rnd.length()) || + m_digest_generator->retrieve_digest(scramble_stage1, m_digest_length)) + { + DBUG_PRINT("info", ("Failed to generate scramble_stage1: " + "SHA2(digest_stage2, m_rnd)")); + DBUG_RETURN(true); + } + + /* XOR(digest_stage1, scramble_stage1) => scramble */ + for (uint i= 0; i < m_digest_length; ++i) + { + scramble[i]= (digest_stage1[i] ^ scramble_stage1[i]); + } + + DBUG_RETURN(false); +} +} // namespace sha2_password + +C_MODE_START +/* + Generate scramble from password and random number. + + @param [out] scramble Buffer to put generated scramble + @param [in] scramble_size Size of the output buffer + @param [in] src Source text buffer + @param [in] src_size Source text buffer size + @param [in] rnd Random text buffer + @param [in] rnd_size Random text buffer size + + @note + SHA2(src) => X + SHA2(X) => Y + SHA2(XOR(rnd, Y) => Z + XOR(X, Z) => scramble + + @returns Status of scramble generation + @retval true Error + @retval false Generation successful + +*/ + +my_bool generate_sha256_scramble(unsigned char *scramble, size_t scramble_size, + const char *src, size_t src_size, const char *rnd, + size_t rnd_size) +{ + DBUG_ENTER("generate_scramble"); + std::string source(src, src_size); + std::string random(rnd, rnd_size); + + sha2_password::Generate_scramble scramble_generator(source, random); + if (scramble_generator.scramble(scramble, scramble_size)) + { + DBUG_PRINT("info", ("Failed to generate SHA256 based scramble")); + DBUG_RETURN(TRUE); + } + + DBUG_RETURN(FALSE); +} +C_MODE_END From 46ea2488b20a50df8e9767cba5cfafa773b14066 Mon Sep 17 00:00:00 2001 From: Dima Date: Mon, 14 May 2018 01:36:17 +0300 Subject: [PATCH 0876/1221] Fix for DOC-734 changing launchpad links to JIRA, 5.7 version --- doc/source/upstream-bug-fixes.rst | 367 +++++++++++++++--------------- 1 file changed, 183 insertions(+), 184 deletions(-) diff --git a/doc/source/upstream-bug-fixes.rst b/doc/source/upstream-bug-fixes.rst index f040ffa943cb..e3a8ffc318e0 100644 --- a/doc/source/upstream-bug-fixes.rst +++ b/doc/source/upstream-bug-fixes.rst @@ -6,626 +6,625 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`90264` - Some file operations in mf_iocache2.c are not instrumented | -|:Launchpad bug: :jirabug:`PS-3937` | -|:Upstream state: Verified (checked on 2018-04-20) | +|:JIRA bug: :psbug:`3937` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.21-21` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`90238` - Comparison of uninitailized memory in log_in_use | -|:Launchpad bug: :jirabug:`PS-3925` | -|:Upstream state: Verified (checked on 2018-04-20) | +|:JIRA bug: :psbug:`3925` | +|:Upstream state: No Feedback (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.21-21` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`89916` - hp_test1/hp_test2 are not built unless WITH_EMBEDDED_SERVER is defined | -|:Launchpad bug: :jirabug:`PS-3845` | -|:Upstream state: Verified (checked on 2018-04-20) | +|:JIRA bug: :psbug:`3845` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.21-21` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`89822` - InnoDB retries open on EINTR error only if innodb_use_native_aio is ... | -|:Launchpad bug: :jirabug:`PS-3843` | -|:Upstream state: Verified (checked on 2018-04-20) | +|:JIRA bug: :psbug:`3843` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.21-21` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`89646` - Clang warnings in 5.7.21 | -|:Launchpad bug: :jirabug:`PS-3814` | -|:Upstream state: Verified (checked on 2018-04-20) | +|:JIRA bug: :psbug:`3814` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.21-21` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`89598` - plugin_mecab.cc:54:19: warning: unused variable 'bundle_mecab' | -|:Launchpad bug: :jirabug:`PS-3804` | -|:Upstream state: Verified (checked on 2018-02-15) | +|:JIRA bug: :psbug:`3804` | +|:Upstream state: Closed | |:Fix Released: :rn:`5.7.21-20` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`89422` - Dangerous enum-ulong casts in sql_formatter_options | -|:Launchpad bug: :jirabug:`PS-3780` | -|:Upstream state: Verified (checked on 2018-02-15) | +|:JIRA bug: :psbug:`3780` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.21-20` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`89421` - Missing mutex_unlock in Slave_reporting_capability::va_report | -|:Launchpad bug: :jirabug:`PS-3780` | -|:Upstream state: Verified (checked on 2018-02-15) | +|:JIRA bug: :psbug:`3780` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.21-20` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`89420` - Enforcing C++03 mode in non debug builds | -|:Launchpad bug: :jirabug:`PS-3780` | -|:Upstream state: Open (checked on 2018-02-15) | +|:JIRA bug: :psbug:`3780` | +|:Upstream state: Open (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.21-20` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`88057` - Intermediary slave does not log master changes with... | -|:Launchpad bug: :bug:`1722789` | -|:Upstream state: Verified (checked on 2018-01-04) | +|:JIRA bug: :psbug:`1119` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.20-19` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`87065` - Release lock on table statistics after query plan created | -|:Launchpad bug: :bug:`1689736` | -|:Upstream state: Open (checked on 2017-12-14) | +|:JIRA bug: :psbug:`2503` | +|:Upstream state: Open (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.20-18` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`86260` - Assert on KILL'ing a stored routine invocation | -|:Launchpad bug: :bug:`1689736` | -|:Upstream state: Verified (checked on 2017-12-14) | +|:JIRA bug: :psbug:`1091` | +|:Upstream state: Closed | |:Fix Released: :rn:`5.7.18-16` | -|:Upstream fix: N/A | +|:Upstream fix: 5.7.22 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`86209` - audit plugin + MB collation connection + PREPARE stmt parse error crash...| -|:Launchpad bug: :bug:`1688698` | +|:JIRA bug: :psbug:`1089` | |:Upstream state: N/A | |:Fix Released: :rn:`5.7.18-14` | -|:Upstream fix: N/A | +|:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`86164` - Fulltext search can not find word which contains punctuation marks | -|:Launchpad bug: :bug:`1689268` | -|:Upstream state: Verified (checked on 2018-02-15) | +|:JIRA bug: :psbug:`2501` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.21-20` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`86016` - Make MTR show core dump stacktraces from unit tests too | -|:Launchpad bug: :bug:`1684601` | -|:Upstream state: Verified (checked on 2017-12-14) | +|:JIRA bug: :psbug:`2499` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.18-16` | -|:Upstream fix: N/A | +|:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`85838` - rpl_diff.inc in 5.7 does not compare data from different servers | -|:Launchpad bug: :bug:`1680510` | +|:JIRA bug: :psbug:`2257` | |:Upstream state: Closed | |:Fix Released: :rn:`5.7.18-14` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`85835` - server crash n-gram full text searching | -|:Launchpad bug: :bug:`1679025` | +|:JIRA bug: :psbug:`237` | |:Upstream state: N/A | |:Fix Released: :rn:`5.7.18-15` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`85678` - field-t deletes Fake_TABLE objects through base TABLE pointer w/o ... | -|:Launchpad bug: :bug:`1677130` | +|:JIRA bug: :psbug:`2253` | |:Upstream state: Closed | |:Fix Released: :rn:`5.7.18-14` | |:Upstream fix: 5.7.19 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`85671` - segfault-t failing under recent AddressSanitizer | -|:Launchpad bug: :bug:`1676847` | +|:JIRA bug: :psbug:`2252` | |:Upstream state: Closed | |:Fix Released: :rn:`5.7.18-14` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`85258` - DROP TEMPORARY TABLE creates a transaction in binary log on read only... | -|:Launchpad bug: :bug:`1668602` | +|:JIRA bug: :psbug:`1785` | |:Upstream state: Closed | |:Fix Released: :rn:`5.7.18-14` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`85158` - heartbeats/fakerotate cause a forced sync_master_info | -|:Launchpad bug: :bug:`1708033` | -|:Upstream state: Open (checked on 2018-01-04) | +|:JIRA bug: :psbug:`1812` | +|:Upstream state: Open (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.20-19` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`85141` - Write/fsync amplification w/ duplicate GTIDs | -|:Launchpad bug: :bug:`1669928` | -|:Upstream state: Verified (checked on 2017-12-14) | +|:JIRA bug: :psbug:`1786` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.18-14` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`84736` - 5.7 range optimizer crash | -|:Launchpad bug: :bug:`1660591` | +|:JIRA bug: :psbug:`1055` | |:Upstream state: N/A | |:Fix Released: :rn:`5.7.17-12` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`84437` - super-read-only does not allow FLUSH LOGS on 5.7 | -|:Launchpad bug: :bug:`1654682` | -|:Upstream state: Verified (checked on 2017-12-14) | +|:JIRA bug: :psbug:`1772` | +|:Upstream state: Closed | |:Fix Released: :rn:`5.7.17-12` | -|:Upstream fix: N/A | +|:Upstream fix: 5.7.18 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`84420` - stopwords and ngram indexes | -|:Launchpad bug: :bug:`1679135` | -|:Upstream state: Verified (checked on 2017-12-14) | +|:JIRA bug: :psbug:`1802` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.20-18` | -|:Upstream fix: N/A | +|:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`84415` - slave don't report Seconds_Behind_Master when running ... | -|:Launchpad bug: :bug:`1654091` | -|:Upstream state: Verified (checked on 2017-12-14) | +|:JIRA bug: :psbug:`1770` | +|:Upstream state: Closed | |:Fix Released: :rn:`5.7.18-14` | -|:Upstream fix: N/A | +|:Upstream fix: 5.7.22 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`84366` - InnoDB index dives do not detect concurrent tree changes, return bogus... | -|:Launchpad bug: :bug:`1625151` | -|:Upstream state: Verified (checked on 2017-12-14) | +|:JIRA bug: :psbug:`1089` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.17-11` | -|:Upstream fix: N/A | +|:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`84350` - Error 1290 executing flush logs in read-only slave | -|:Launchpad bug: :bug:`1652852` | -|:Upstream state: Verified (checked on 2017-12-14) | +|:JIRA bug: :psbug:`1044` | +|:Upstream state: Closed | |:Fix Released: :rn:`5.7.17-12` | -|:Upstream fix: N/A | +|:Upstream fix: 5.7.18 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`83814` - Add support for OpenSSL 1.1 | -|:Launchpad bug: :bug:`1702903` | +|:JIRA bug: :psbug:`1105` | |:Upstream state: Closed | |:Fix Released: :rn:`5.7.18-16` | -|:Upstream fix: N/A | +|:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`83648` - Assertion failure in thread x in file fts0que.cc line 3659 | -|:Launchpad bug: :bug:`1634932` | +|:JIRA bug: :psbug:`1023` | |:Upstream state: N/A | |:Fix Released: :rn:`5.7.17-12` | -|:Upstream fix: N/A | +|:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`83124` - Bug 81657 fix merge to 5.6 broken | -|:Launchpad bug: :bug:`1626936` | +|:JIRA bug: :psbug:`1750` | |:Upstream state: Closed | |:Fix Released: :rn:`5.7.15-9` | -|:Upstream fix: 5.7.17 | +|:Upstream fix: 5.7.17 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`83073` - GCC 5 and 6 miscompile mach_parse_compressed | -|:Launchpad bug: :bug:`1626002` | +|:JIRA bug: :psbug:`1745` | |:Upstream state: Closed | |:Fix Released: :rn:`5.7.15-9` | |:Upstream fix: 5.7.17 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`83003` - Using temporary tables on slaves increases GTID sequence number | -|:Launchpad bug: :bug:`1539504` | +|:JIRA bug: :psbug:`964` | |:Upstream state: Closed | |:Fix Released: :rn:`5.7.17-11` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`82980` - Multi-threaded slave leaks worker threads in case of thread create ... | -|:Launchpad bug: :bug:`1619622` | +|:JIRA bug: :psbug:`2193` | |:Upstream state: Closed | |:Fix Released: :rn:`5.7.15-9` | |:Upstream fix: 5.7.20 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`82935` - Cipher ECDHE-RSA-AES128-GCM-SHA256 listed in man/Ssl_cipher_list, not... | -|:Launchpad bug: :bug:`1622034` | -|:Upstream state: Verified (checked on 2017-12-14) | +|:JIRA bug: :psbug:`1737` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.15-9` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`82886` - Server may crash due to a glibc bug in handling short-lived detached ... | -|:Launchpad bug: :bug:`1621012` | +|:JIRA bug: :psbug:`1006` | |:Upstream state: Closed | |:Fix Released: :rn:`5.7.15-9` | |:Upstream fix: 5.7.16 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`82307` - Memory leaks in unit tests | -|:Launchpad bug: :bug:`1604774` | +|:JIRA bug: :psbug:`2157` | |:Upstream state: Closed | |:Fix Released: :rn:`5.7.14-7` | |:Upstream fix: 5.7.18 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`82283` - main.mysqlbinlog_debug fails with a LeakSanitizer error | -|:Launchpad bug: :bug:`1604462` | +|:JIRA bug: :psbug:`2156` | |:Upstream state: Closed | |:Fix Released: :rn:`5.7.14-7` | |:Upstream fix: 5.7.19 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`82026` - Stack buffer overflow with --ssl-cipher= | -|:Launchpad bug: :bug:`1596845` | -|:Upstream state: Verified (checked on 2017-12-14) | +|:JIRA bug: :psbug:`2155` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.14-7` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`82019` - Is client library supposed to retry EINTR indefinitely or not | -|:Launchpad bug: :bug:`1591202` | +|:JIRA bug: :psbug:`1720` | |:Upstream state: Closed | |:Fix Released: :rn:`5.7.14-7` | |:Upstream fix: 5.7.15 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`81814` - InnoDB adaptive hash index uses a bad partitioning algorithm for the ... | -|:Launchpad bug: :bug:`1679155` | -|:Upstream state: Verified (checked on 2017-12-14) | +|:JIRA bug: :psbug:`2498` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.18-14` | -|:Upstream fix: N/A | +|:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`81810` - Inconsistent sort order for blob/text between InnoDB and filesort | -|:Launchpad bug: :bug:`1674867` | -|:Upstream state: Verified (checked on 2017-12-14) | +|:JIRA bug: :psbug:`1799` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.18-14` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`81714` - mysqldump get_view_structure does not free MYSQL_RES in one error path | -|:Launchpad bug: :bug:`1588845` | +|:JIRA bug: :psbug:`2152` | |:Upstream state: Closed | |:Fix Released: :rn:`5.7.13-6` | |:Upstream fix: 5.7.20 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`81675` - mysqlbinlog does not free the existing connection before opening new ... | -|:Launchpad bug: :bug:`1587840` | +|:JIRA bug: :psbug:`1718` | |:Upstream state: Closed | |:Fix Released: :rn:`5.7.12-6` | |:Upstream fix: 5.7.15 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`81657` - DBUG_PRINT in THD::decide_logging_format prints incorrectly, access ... | -|:Launchpad bug: :bug:`1587426` | +|:JIRA bug: :psbug:`2150` | |:Upstream state: Closed | |:Fix Released: :rn:`5.7.12-6` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`81467` - innodb_fts.sync_block test unstable due to slow query log nondeterminism | -|:Launchpad bug: :bug:`1662163` | -|:Upstream state: Verified (checked on 2017-12-14) | +|:JIRA bug: :psbug:`2232` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.17-12` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`80962` - Replication does not work when @@GLOBAL.SERVER_UUID is missing on the... | -|:Launchpad bug: :bug:`1566642` | +|:JIRA bug: :psbug:`1684` | |:Upstream state: Closed | |:Fix Released: :rn:`5.7.12-5` | |:Upstream fix: 5.7.13 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`80607` - main.log_tables-big unstable on loaded hosts | -|:Launchpad bug: :bug:`1554043` | +|:JIRA bug: :psbug:`2141` | |:Upstream state: Closed | |:Fix Released: :rn:`5.7.11-4` | |:Upstream fix: 5.7.18 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`80606` - my_write, my_pwrite no longer safe to call from THD-less server utility...| -|:Launchpad bug: :bug:`1552682` | +|:JIRA bug: :psbug:`970` | |:Upstream state: N/A | |:Fix Released: :rn:`5.7.11-4` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`80496` - buf_dblwr_init_or_load_pages now returns an error code, but caller not... | -|:Launchpad bug: :bug:`1549301` | -|:Upstream state: Verified (checked on 2017-12-14) | +|:JIRA bug: :psbug:`3384` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.11-4` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`80288` - missing innodb_numa_interleave | -|:Launchpad bug: :bug:`1561091` | +|:JIRA bug: :psbug:`974` | |:Upstream state: Closed | |:Fix Released: :rn:`5.7.12-5` | |:Upstream fix: 5.7.16 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`80053` - Assertion in binlog coordinator on slave with 2 2pc handler log_slave ... | -|:Launchpad bug: :bug:`1534249` | -|:Upstream state: Verified (checked on 2017-12-14) | +|:JIRA bug: :psbug:`3361` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.10-2` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`79894` - Page cleaner worker threads are not instrumented for performance schema | -|:Launchpad bug: :bug:`1532747` | -|:Upstream state: Verified (checked on 2017-12-14) | +|:JIRA bug: :psbug:`3356` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.10-2` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`79703` - Spin rounds per wait will be negative in InnoDB status if spin waits >... | -|:Launchpad bug: :bug:`1527160` | -|:Upstream state: Closed | +|:JIRA bug: :psbug:`1684` | |:Fix Released: :rn:`5.7.10-2` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`79610` - Failed DROP DATABASE due FK constraint on master breaks slave | -|:Launchpad bug: :bug:`1525407` | -|:Upstream state: Verified (checked on 2017-12-14) | +|:JIRA bug: :psbug:`1683` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.14-7` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`79569` - Some --big-test tests were forgotten to update in 5.7.10 | -|:Launchpad bug: :bug:`1525109` | +|:JIRA bug: :psbug:`3339` | |:Upstream state: Closed | |:Fix Released: :rn:`5.7.10-2` | |:Upstream fix: 5.7.11 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`79117` - "change_user" command should be aware of preceding "error" command | -|:Launchpad bug: :bug:`1172090` | +|:JIRA bug: :psbug:`659` | |:Upstream state: Closed | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: 5.7.12 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`78894` - buf_pool_resize can lock less in checking whether AHI is on or off | -|:Launchpad bug: :bug:`1525215` | -|:Upstream state: Verified (checked on 2017-12-14) | +|:JIRA bug: :psbug:`3340` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`77684` - DROP TABLE IF EXISTS may brake replication if slave has replication ... | -|:Launchpad bug: :bug:`1475107` | +|:JIRA bug: :psbug:`1639` | |:Upstream state: Closed | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: 5.7.12 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`77591` - ALTER TABLE does not allow to change NULL/NOT NULL if foreign key exists | -|:Launchpad bug: :bug:`1466414` | -|:Upstream state: Verified (checked on 2017-12-14) | +|:JIRA bug: :psbug:`1635` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`77399` - Deadlocks missed by INFORMATION_SCHEMA.INNODB_METRICS lock_deadlocks ... | -|:Launchpad bug: :bug:`1466414` | -|:Upstream state: Verified (checked on 2017-12-14) | +|:JIRA bug: :psbug:`1635` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`76418` - Server crashes when querying partitioning table MySQL_5.7.14 | -|:Launchpad bug: :bug:`1657941` | +|:JIRA bug: :psbug:`1050` | |:Upstream state: N/A | |:Fix Released: :rn:`5.7.18-15` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`76142` - InnoDB tablespace import fails when importing table w/ different data ... | -|:Launchpad bug: :bug:`1548597` | -|:Upstream state: Verified (checked on 2017-12-14) | +|:JIRA bug: :psbug:`1697` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.13-6` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`75534` - Solve buffer pool mutex contention by splitting it | -|:Launchpad bug: :ref:`innodb_split_buf_pool_mutex` | +|:JIRA bug: :ref:`innodb_split_buf_pool_mutex` | |:Upstream state: Closed | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`75504` - btr_search_guess_on_hash makes found block young twice? | -|:Launchpad bug: :bug:`1411694` | -|:Upstream state: Verified (checked on 2017-12-14) | +|:JIRA bug: :psbug:`2454` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`75480` - Selecting wrong pos with SHOW BINLOG EVENTS causes a potentially ... | -|:Launchpad bug: :bug:`1409652` | +|:JIRA bug: :psbug:`1600` | |:Upstream state: N/A | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`75311` - Error for SSL cipher is unhelpful | -|:Launchpad bug: :bug:`1660339` | -|:Upstream state: Verified (checked on 2017-12-14) | +|:JIRA bug: :psbug:`1779` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.17-12` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`75189` - engines suite tests depending on InnoDB implementation details | -|:Launchpad bug: :bug:`1401776` | -|:Upstream state: Verified (checked on 2017-12-14) | +|:JIRA bug: :psbug:`2103` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`74637` - make dirty page flushing more adaptive | -|:Launchpad bug: :ref:`Multi-threaded asynchronous LRU flusher ` | -|:Upstream state: Verified (checked on 2017-12-14) | +|:JIRA bug: :ref:`Multi-threaded asynchronous LRU flusher ` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.10-3` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`73418` - Add --manual-lldb option to mysql-test-run.pl | -|:Launchpad bug: :bug:`1328482` | -|:Upstream state: Verified (checked on 2017-12-14) | +|:JIRA bug: :psbug:`2448` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`72615` - MTR --mysqld=--default-storage-engine=foo incompatible w/ dynamically... | -|:Launchpad bug: :bug:`1318537` | -|:Upstream state: Verified (checked on 2017-12-14) | +|:JIRA bug: :psbug:`2071` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`72475` - Binlog events with binlog_format=MIXED are unconditionally logged in ... | -|:Launchpad bug: :bug:`1313901` | +|:JIRA bug: :psbug:`151` | |:Upstream state: Closed | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`72466` - More memory overhead per page in the InnoDB buffer pool | -|:Launchpad bug: :bug:`1536693` | -|:Upstream state: Verified (checked on 2017-12-14) | +|:JIRA bug: :psbug:`1689` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.12-5` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`72123` - Spurious lock_wait_timeout_thread wakeup in lock_wait_suspend_thread() | -|:Launchpad bug: :bug:`1704267` | -|:Upstream state: Verified (checked on 2017-12-14) | +|:JIRA bug: :psbug:`2504` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.18-16` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`72108` - Hard to read history file | -|:Launchpad bug: :bug:`1296192` | -|:Upstream state: Verified (checked on 2017-12-14) | +|:JIRA bug: :psbug:`2066` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`71761` - ANALYZE TABLE should remove its table from background stat processing... | -|:Launchpad bug: :bug:`1626441` | -|:Upstream state: Verified (checked on 2017-12-14) | +|:JIRA bug: :psbug:`1749` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.15-9` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`71759` - memory leak with string thread variable that set memalloc flag | -|:Launchpad bug: :bug:`1620152` | +|:JIRA bug: :psbug:`1004` | |:Upstream state: Closed | |:Fix Released: :rn:`5.7.15-9` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`71411` - buf_flush_LRU() does not return correct number in case of compressed ... | -|:Launchpad bug: :bug:`1262651` | -|:Upstream state: Verified (checked on 2017-12-14) | +|:JIRA bug: :psbug:`1461` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`71270` - Failures to end bulk insert for partitioned tables handled incorrectly | -|:Launchpad bug: :bug:`1204871` | -|:Upstream state: Verified (checked on 2017-12-14) | +|:JIRA bug: :psbug:`700` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`71217` - Threadpool - add thd_wait_begin/thd_wait_end to the network IO functions | -|:Launchpad bug: :bug:`1159743` | -|:Upstream state: Open (checked on 2017-12-14) | +|:JIRA bug: :psbug:`1343` | +|:Upstream state: Open (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`71183` - os_file_fsync() should handle fsync() returning EINTR | -|:Launchpad bug: :bug:`1262651` | -|:Upstream state: Verified (checked on 2017-12-14) | +|:JIRA bug: :psbug:`1461` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`71091` - CSV engine does not properly process "", in quotes | -|:Launchpad bug: :bug:`1316042` | -|:Upstream state: Verified (checked on 2017-12-14) | +|:JIRA bug: :psbug:`153` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`70500` - Page cleaner should perform LRU flushing regardless of server activity | -|:Launchpad bug: :bug:`1234562` | -|:Upstream state: Verified (checked on 2017-12-14) | +|:JIRA bug: :psbug:`1428` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`70490` - Suppression is too strict on some systems | -|:Launchpad bug: :bug:`1205196` | +|:JIRA bug: :psbug:`2038` | |:Upstream state: Closed | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: 5.7.20 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`69991` - MySQL client is broken without readline | -|:Launchpad bug: :bug:`1266386` | -|:Upstream state: Verified (checked on 2017-12-14) | +|:JIRA bug: :psbug:`1467` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`69639` - mysql failed to build with dtrace Sun D 1.11 | -|:Launchpad bug: :bug:`1196460` | -|:Upstream state: Open (checked on 2017-12-14) | +|:JIRA bug: :psbug:`1392` | +|:Upstream state: Unsupported | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`69258` - does buf_LRU_buf_pool_running_out need to lock buffer pool mutexes | -|:Launchpad bug: :bug:`1219842` | +|:JIRA bug: :psbug:`1414` | |:Upstream state: Not a Bug | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`69232` - buf_dblwr->mutex can be splited into two | -|:Launchpad bug: :ref:`parallel_doublewrite_buffer` | -|:Upstream state: No Feedback (checked on 2017-12-14) | +|:JIRA bug: :ref:`parallel_doublewrite_buffer` | +|:Upstream state: No Feedback (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.11-4` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`69170` - buf_flush_LRU is lazy | -|:Launchpad bug: :bug:`1231918` | -|:Upstream state: Verified (checked on 2017-12-14) | +|:JIRA bug: :psbug:`2430` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`69146` - Needless log flush order mutex acquisition in buf_pool_get_oldest_mod... | -|:Launchpad bug: :bug:`1176496` | -|:Upstream state: Verified (checked on 2017-12-14) | +|:JIRA bug: :psbug:`2418` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`68714` - Remove literal statement digest values from perfschema tests | -|:Launchpad bug: :bug:`1157078` | +|:JIRA bug: :psbug:`1340` | |:Upstream state: Not a Bug | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`68481` - InnoDB LRU flushing for MySQL 5.6 needs work | -|:Launchpad bug: :bug:`1232406` | -|:Upstream state: Verified (checked on 2017-12-14) | +|:JIRA bug: :psbug:`2432` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`68052` - SSL Certificate Subject ALT Names with IPs not respected with --ssl-ver...| -|:Launchpad bug: :bug:`1673656` | -|:Upstream state: Verified (checked on 2017-12-14) | +|:JIRA bug: :psbug:`1076` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.18-16` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`67808` - in innodb engine, double write and multi-buffer pool instance reduce ... | -|:Launchpad bug: :ref:`parallel_doublewrite_buffer` | -|:Upstream state: Verified (checked on 2017-12-14) | +|:JIRA bug: :ref:`parallel_doublewrite_buffer` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.11-4` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`63130` - CMake-based check for the presence of a system readline library is not... | -|:Launchpad bug: :bug:`1266386` | -|:Upstream state: Can't Repeat (checked on 2017-12-14) | +|:JIRA bug: :psbug:`1467` | +|:Upstream state: Can't Repeat (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`57583` - fast index create not used during "alter table foo engine=innodb" | -|:Launchpad bug: :bug:`1451351` | -|:Upstream state: Verified (checked on 2017-12-14) | +|:JIRA bug: :psbug:`2113` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`53645` - SHOW GRANTS not displaying all the applicable grants | -|:Launchpad bug: :bug:`1354988` | -|:Upstream state: Verified (checked on 2017-12-14) | +|:JIRA bug: :psbug:`191` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`53588` - Blackhole : Specified key was too long; max key length is 1000 bytes | -|:Launchpad bug: :bug:`1733049` | -|:Upstream state: No Feedback (checked on 2018-01-04) | +|:JIRA bug: :psbug:`1126` | +|:Upstream state: No Feedback (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.20-19` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`49120` - mysqldump should have flag to delay creating indexes for innodb plugin... | -|:Launchpad bug: :bug:`744103` | -|:Upstream state: Verified (checked on 2017-12-14) | +|:JIRA bug: :psbug:`2619` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`42415` - UPDATE/DELETE with LIMIT clause unsafe for SBL even with ORDER BY PK ... | -|:Launchpad bug: N/A | -|:Upstream state: Verified (checked on 2017-12-14) | +|:JIRA bug: :psbug:`44` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`39833` - CREATE INDEX does full table copy on TEMPORARY table | -|:Launchpad bug: N/A | -|:Upstream state: Verified (checked on 2017-12-14) | +|:JIRA bug: N/A | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`35125` - Allow the ability to set the server_id for a connection for logging to... | |:Launchpad BP: `Blueprint `_ | -|:Upstream state: Verified (checked on 2017-12-14) | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`25007` - memory tables with dynamic rows format | -|:Launchpad BP: :bug:`1148822` | -|:Upstream state: Verified (checked on 2017-12-14) | +|:JIRA bug: :psbug:`2407` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`20001` - Support for temp-tables in INFORMATION_SCHEMA | -|:Launchpad bug: :ref:`temp_tables` | -|:Upstream state: Verified (checked on 2017-12-14) | +|:JIRA bug: :ref:`temp_tables` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.7.10-1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ From e89fb7f0d3bc2a42eeb2aa29dcb3f1b7299824e3 Mon Sep 17 00:00:00 2001 From: Dmitriy Kostiuk Date: Fri, 25 May 2018 13:38:36 +0300 Subject: [PATCH 0877/1221] Fix for DOC-734 changing launchpad links to JIRA, 5.5 version (#2384) --- doc/source/upstream-bug-fixes.rst | 274 +++++++++++++++--------------- 1 file changed, 137 insertions(+), 137 deletions(-) diff --git a/doc/source/upstream-bug-fixes.rst b/doc/source/upstream-bug-fixes.rst index fe9b43fe51e2..696bd7846fb8 100644 --- a/doc/source/upstream-bug-fixes.rst +++ b/doc/source/upstream-bug-fixes.rst @@ -31,648 +31,648 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`53588` - Blackhole : Specified key was too long; max key length is 1000 bytes | |:JIRA bug: :psbug:`1126` | -|:Upstream state: Verified (checked on 2018-01-30) | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.5.59-38.11` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`83264` - uint3korr should stop reading four instead of three bytes on x86 | -|:Launchpad bug: :bug:`1628417` | +|:JIRA bug: :psbug:`3567` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.52-38.3` | |:Upstream fix: 5.5.57 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`68052` - SSL Certificate Subject ALT Names with IPs not respected with --ssl-ver...| -|:Launchpad bug: :bug:`1673656` | -|:Upstream state: Verified (checked on 2018-01-30) | +|:JIRA bug: :psbug:`1076` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.5.57-38.9` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`83814` - Add support for OpenSSL 1.1 | -|:Launchpad bug: :bug:`1702903` | +|:JIRA bug: :psbug:`1105` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.57-38.9` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`86016` - Make MTR show core dump stacktraces from unit tests too | -|:Launchpad bug: :bug:`1684601` | -|:Upstream state: Verified (checked on 2018-01-30) | +|:JIRA bug: :psbug:`2499` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.5.57-38.9` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`83073` - GCC 5 and 6 miscompile mach_parse_compressed | -|:Launchpad bug: :bug:`1626002` | +|:JIRA bug: :psbug:`1745` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.52-38.2` | |:Upstream fix: 5.5.54 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`56155` - 'You cannot 'ALTER' a log table if logging is enabled' even if I log to...| -|:Launchpad bug: :bug:`1065841` | +|:JIRA bug: :psbug:`595` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.52-38.2` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`79249` - main.group_min_max fails under Valgrind | -|:Launchpad bug: :bug:`1515591` | +|:JIRA bug: :psbug:`1668` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.51-38.1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`82019` - Is client library supposed to retry EINTR indefinitely or not | -|:Launchpad bug: :bug:`1591202` | +|:JIRA bug: :psbug:`1720` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.51-38.1` | |:Upstream fix: 5.5.52 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`79610` - Failed DROP DATABASE due FK constraint on master breaks slave | -|:Launchpad bug: :bug:`1525407` | -|:Upstream state: Verified (checked on 2018-01-30) | +|:JIRA bug: :psbug:`1683` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.5.51-38.1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`81657` - DBUG_PRINT in THD::decide_logging_format prints incorrectly, access ... | -|:Launchpad bug: :bug:`1587426` | +|:JIRA bug: :psbug:`2150` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.50-38.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`81714` - mysqldump get_view_structure does not free MYSQL_RES in one error path | -|:Launchpad bug: :bug:`1588845` | +|:JIRA bug: :psbug:`2152` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.50-38.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`78223` - memory leak in mysqlbinlog | -|:Launchpad bug: :bug:`1582761` | +|:JIRA bug: :psbug:`3440` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.50-38.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`81675` - mysqlbinlog does not free the existing connection before opening new... | -|:Launchpad bug: :bug:`1587840` | +|:JIRA bug: :psbug:`1718` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.50-38.0` | |:Upstream fix: 5.5.52 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`61619` - ssl.cmake file is broken when using custom OpenSSL build | -|:Launchpad bug: :bug:`1582639` | +|:JIRA bug: :psbug:`3437` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.50-38.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`80014` - mysql build fails, memory leak in gen_lex_hash, clang address sanitizer | -|:Launchpad bug: :bug:`1580993` | +|:JIRA bug: :psbug:`3433` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.50-38.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`75239` - Support for TLSv1.1 and TLSv1.2 | -|:Launchpad bug: :bug:`1501089` | +|:JIRA bug: :psbug:`926` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.50-38.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`81324` - "rpl.rpl_start_stop_slave" fail sporadically on 5.5 | -|:Launchpad bug: :bug:`1578303` | -|:Upstream state: Verified (checked on 2018-01-30) | +|:JIRA bug: :psbug:`2145` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.5.49-37.9` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`81295` - main.bigint/rpl.rpl_stm_user_variables fail on Ubuntu 15.10 Wily in ... | -|:Launchpad bug: :bug:`1578625` | -|:Upstream state: Verified (checked on 2018-01-30) | +|:JIRA bug: :psbug:`3427` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.5.49-37.9` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`79185` - Innodb freeze running REPLACE statements | -|:Launchpad bug: :bug:`1519094` | +|:JIRA bug: :psbug:`945` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.46-37.6` | |:Upstream fix: 5.5.49 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`77275` - Newest RHEL/CentOS openssl update breaks mysql DHE ciphers | -|:Launchpad bug: :bug:`1462856` | +|:JIRA bug: :psbug:`906` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.44-37.3` | |:Upstream fix: 5.5.45 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`66779` - innochecksum does not work with compressed tables | -|:Launchpad bug: :bug:`1100652` | +|:JIRA bug: :psbug:`1302` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.44-37.3` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`75480` - Selecting wrong pos with SHOW BINLOG EVENTS causes a potentially ... | -|:Launchpad bug: :bug:`1409652` | +|:JIRA bug: :psbug:`1600` | |:Upstream state: N/A | |:Fix Released: :rn:`5.5.44-37.3` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`69991` - MySQL client is broken without readline | -|:Launchpad bug: :bug:`1266386` | -|:Upstream state: Verified (checked on 2018-01-30) | +|:JIRA bug: :psbug:`1467` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.5.43-37.2` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`63130` - CMake-based check for the presence of a system readline library is ... | -|:Launchpad bug: :bug:`1266386` | -|:Upstream state: Can't repeat (checked on 2018-01-30) | +|:JIRA bug: :psbug:`1467` | +|:Upstream state: Can't repeat (checked on 2018-05-24) | |:Fix Released: :rn:`5.5.43-37.2` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`75868` - main.error_simulation fails on Mac OS X since 5.5.42 | -|:Launchpad bug: :bug:`1424568` | -|:Upstream state: Verified (checked on 2018-01-30) | +|:JIRA bug: :psbug:`3266` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.5.42-37.1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`75642` - Extend valid range of dummy certificates ni mysql-test/std_data | -|:Launchpad bug: :bug:`1415843` | +|:JIRA bug: :psbug:`1605` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.42-37.1` | |:Upstream fix: 5.5.42 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`53645` - SHOW GRANTS not displaying all the applicable grants | -|:Launchpad bug: :bug:`1354988` | -|:Upstream state: Verified (checked on 2018-01-30) | +|:JIRA bug: :psbug:`191` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.5.42-37.1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`74987` - mtr failure on Ubuntu Utopic, mysqlhotcopy fails with wrong error(255) | -|:Launchpad bug: :bug:`1396330` | -|:Upstream state: Verified (checked on 2018-01-30) | +|:JIRA bug: :psbug:`2102` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.5.41-37.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`73281` - openssl_1 tries to test a removed cipher on CentOS 7 | -|:Launchpad bug: :bug:`1401791` | -|:Upstream state: Verified (checked on 2018-01-30) | +|:JIRA bug: :psbug:`3242` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.5.41-37.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`74440` - mysql_install_db not handling mysqld startup failure | -|:Launchpad bug: :bug:`1382782` | +|:JIRA bug: :psbug:`1553` | |:Upstream state: Won't fix | |:Fix Released: :rn:`5.5.41-37.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`72475` - Binlog events with binlog_format=MIXED are unconditionally logged in ROW..| -|:Launchpad bug: :bug:`1313901` | +|:JIRA bug: :psbug:`151` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.41-37.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`75000` - 5.5 fails to compile with debug on Ubuntu Utopic | -|:Launchpad bug: :bug:`1396358` | +|:JIRA bug: :psbug:`3236` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.41-37.0` | |:Upstream fix: 5.5.42 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`73979` - wrong stack size calculation leads to stack overflow in pinbox allocator | -|:Launchpad bug: :bug:`1351148` | +|:JIRA bug: :psbug:`807` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.41-37.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`73126` - Numerous Valgrind errors in OpenSSL | -|:Launchpad bug: :bug:`1334743` | -|:Upstream state: Verified (checked on 2018-01-30) | +|:JIRA bug: :psbug:`3160` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.5.39-36.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`73111` - Suppression typo causing spurious MTR Valgrind failures | -|:Launchpad bug: :bug:`1334317` | -|:Upstream state: Open (checked on 2018-01-30) | +|:JIRA bug: :psbug:`3159` | +|:Upstream state: Open (checked on 2018-05-24) | |:Fix Released: :rn:`5.5.39-36.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`73418` - Add --manual-lldb option to mysql-test-run.pl | -|:Launchpad bug: :bug:`1328482` | -|:Upstream state: Verified (checked on 2018-01-30) | +|:JIRA bug: :psbug:`2448` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.5.39-36.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`60782` - Audit plugin API: no MYSQL_AUDIT_GENERAL_LOG notifications with general...| -|:Launchpad bug: :bug:`1182535` | +|:JIRA bug: :psbug:`1369` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.37-35.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`67352` - table_id is defined differently in sql/table.h vs sql/log_event.h | -|:Launchpad bug: :bug:`1070255` | +|:JIRA bug: :psbug:`142` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.37-35.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`71250` - Bison 3 breaks mysql build | -|:Launchpad bug: :bug:`1262439` | +|:JIRA bug: :psbug:`376` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.37-35.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`71375` - Slave IO thread won't attempt auto reconnect to the master/error-code 1593| -|:Launchpad bug: :bug:`1268735` | -|:Upstream state: Verified (checked on 2018-01-30) | +|:JIRA bug: :psbug:`3086` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.5.36-34.1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`71374` - Slave IO thread won't attempt auto reconnect to the master/error-code 1159| -|:Launchpad bug: :bug:`1268729` | +|:JIRA bug: :psbug:`1470` | |:Upstream state: N/A | |:Fix Released: :rn:`5.5.36-34.1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`71089` - CMake warning when generating Makefile | -|:Launchpad bug: :bug:`1274827` | +|:JIRA bug: :psbug:`2059` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.36-34.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`54430` - innodb should retry partial reads/writes where errno was 0 | -|:Launchpad bug: :bug:`1262500` | +|:JIRA bug: :psbug:`1460` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.36-34.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`62311` - segfault in mysqld during early SIGHUP handling | -|:Launchpad bug: :bug:`1249193` | +|:JIRA bug: :psbug:`3068` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.36-34.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`41975` - Support for SSL options not included in mysqlbinlog | -|:Launchpad bug: :bug:`1197524` | +|:JIRA bug: :psbug:`1393` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.35-33.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`69639` - mysql failed to build with dtrace Sun D 1.11 | -|:Launchpad bug: :bug:`1196460` | -|:Upstream state: Open (checked on 2018-01-30) | +|:JIRA bug: :psbug:`1392` | +|:Upstream state: Unsupported | |:Fix Released: :rn:`5.5.33-31.1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`68354` - Server crashes on update/join FEDERATED + local table when only 1 local...| -|:Launchpad bug: :bug:`1182572` | +|:JIRA bug: :psbug:`96` | |:Upstream state: N/A | |:Fix Released: :rn:`5.5.32-31.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`42415` - UPDATE/DELETE with LIMIT clause unsafe for SBL even with ORDER BY PK ... | -|:Launchpad bug: :bug:`1132194` | -|:Upstream state: Verified (checked on 2018-01-30) | +|:JIRA bug: :psbug:`44` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.5.32-31.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`69179` - accessing information_schema.partitions causes plans to change | -|:Launchpad bug: :bug:`1192354` | +|:JIRA bug: :psbug:`680` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.32-31.0` | |:Upstream fix: 5.5.34 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`68970` - fsp_reserve_free_extents switches from small to big tblspace handling ... | -|:Launchpad bug: :bug:`1169494` | +|:JIRA bug: :psbug:`656` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.32-31.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`79117` - "change_user" command should be aware of preceding "error" command | -|:Launchpad bug: :bug:`1172090` | +|:JIRA bug: :psbug:`659` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.31-30.3` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`65077` - internal temporary tables are contended on THR_LOCK_myisam | -|:Launchpad bug: :bug:`1179978` | +|:JIRA bug: :psbug:`1362` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.31-30.3` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`68999` - SSL_OP_NO_COMPRESSION not defined | -|:Launchpad bug: :bug:`1183610` | +|:JIRA bug: :psbug:`362` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.31-30.3` | |:Upstream fix: 5.5.44 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`68197` - InnoDB reports that it's going to wait for I/O but the I/O is async | -|:Launchpad bug: :bug:`1107539` | +|:JIRA bug: :psbug:`362` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.30-30.2` | |:Upstream fix: 5.5.31 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`68845` - Unnecessary log_sys->mutex reacquisition in mtr_log_reserve_and_write() | -|:Launchpad bug: :bug:`1163439` | -|:Upstream state: Verified (checked on 2018-01-30) | +|:JIRA bug: :psbug:`1347` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.5.30-30.2` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`62578` - mysql client aborts connection on terminal resize | -|:Launchpad bug: :bug:`925343` | +|:JIRA bug: :psbug:`84` | |:Upstream state: Won't Fix | |:Fix Released: :rn:`5.5.30-30.2` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`49169` - read_view_open_now is inefficient with many concurrent sessions | -|:Launchpad bug: :bug:`1131187` and :bug:`1131189` | +|:JIRA bug: :psbug:`636` and :psbug:`637` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.30-30.2` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`63144` - CREATE TABLE IF NOT EXISTS metadata lock is too restrictive | -|:Launchpad bug: :bug:`1127008` | +|:JIRA bug: :psbug:`40` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.30-30.2` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`68477` - Suboptimal code in skip_trailing_space() | -|:Launchpad bug: :bug:`1132351` | +|:JIRA bug: :psbug:`1321` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.30-30.1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`68476` - Suboptimal code in my_strnxfrm_simple() | -|:Launchpad bug: :bug:`1132350` | +|:JIRA bug: :psbug:`1320` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.30-30.1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`68116` - InnoDB monitor may hit an assertion error in buf_page_get_gen in debug ...| -|:Launchpad bug: :bug:`1100178` | +|:JIRA bug: :psbug:`616` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.29-30.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`67504` - Duplicate error in replication with slave triggers and auto increment | -|:Launchpad bug: :bug:`1068210` | +|:JIRA bug: :psbug:`34` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.29-30.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`67983` - Memory leak on filtered slave | -|:Launchpad bug: :bug:`1042946` | +|:JIRA bug: :psbug:`581` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.29-30.0` | |:Upstream fix: 5.5.31 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`67974` - Server crashes in add_identifier on concurrent ALTER TABLE and SHOW ENGINE| -|:Launchpad bug: :bug:`1017192` | +|:JIRA bug: :psbug:`344` | |:Upstream state: N/A | |:Fix Released: :rn:`5.5.29-30.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`68045` - security vulnerability CVE-2012-4414 | -|:Launchpad bug: :bug:`1049871` | +|:JIRA bug: :psbug:`348` | |:Upstream state: N/A | |:Fix Released: :rn:`5.5.29-29.4` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`70277` - last argument of LOAD DATA ... SET ... statement repeated twice in binlog | -|:Launchpad bug: :bug:`1223196` | +|:JIRA bug: :psbug:`3020` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.28-29.3` | |:Upstream fix: 5.5.35 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`69380` - Incomplete fix for security vulnerability CVE-2012-5611 | -|:Launchpad bug: :bug:`1186748` | +|:JIRA bug: :psbug:`666` | |:Upstream state: N/A | |:Fix Released: :rn:`5.5.28-29.3` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`66550` - security vulnerability CVE-2012-4414 | -|:Launchpad bug: :bug:`1049871` | +|:JIRA bug: :psbug:`348` | |:Upstream state: N/A | |:Fix Released: :rn:`5.5.28-29.3` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`67685` - security vulnerability CVE-2012-5611 | -|:Launchpad bug: :bug:`1083377` | +|:JIRA bug: :psbug:`350` | |:Upstream state: N/A | |:Fix Released: :rn:`5.5.28-29.3` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`66237` - Temporary files created by binary log cache are not purged after transa...| -|:Launchpad bug: :bug:`1070856` | +|:JIRA bug: :psbug:`599` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.28-29.3` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`69124` - Incorrect truncation of long SET expression in LOAD DATA can cause SQL ...| -|:Launchpad bug: :bug:`1175519` | +|:JIRA bug: :psbug:`663` | |:Upstream state: N/A | |:Fix Released: :rn:`5.5.28-29.3` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`71603` - file name is not escaped in binlog for LOAD DATA INFILE statement | -|:Launchpad bug: :bug:`1277351` | +|:JIRA bug: :psbug:`3092` | |:Upstream state: N/A | |:Fix Released: :rn:`5.5.28-29.3` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`67606` - MySQL crashes with segmentation fault when disk quota is reached | -|:Launchpad bug: :bug:`1079596` | +|:JIRA bug: :psbug:`1948` | |:Upstream state: Duplicate | |:Fix Released: :rn:`5.5.28-29.3` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`67737` - mysqldump test sometimes fails due to mixing stdout and stderr | -|:Launchpad bug: :bug:`959198` | +|:JIRA bug: :psbug:`547` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.28-29.2` | |:Upstream fix: 5.5.29 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`66890` - Slave server crash after a START SLAVE | -|:Launchpad bug: :bug:`1053342` | +|:JIRA bug: :psbug:`587` | |:Upstream state: Duplicate | |:Fix Released: :rn:`5.5.28-29.1` | |:Upstream fix: 5.5.29 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`62856` - Check for "stack overrun" doesn't work with gcc-4.6, server crashes | -|:Launchpad bug: :bug:`1042517` | +|:JIRA bug: :psbug:`2795` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.28-29.1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`61180` - korr/store macros in my_global.h assume the argument to be a char pointer | -|:Launchpad bug: :bug:`1042517` | +|:JIRA bug: :psbug:`2795` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.27-29.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`61178` - Incorrect implementation of intersect(ulonglong) in non-optimized Bitmap..| -|:Launchpad bug: :bug:`1042517` | -|:Upstream state: Verified (checked on 2018-01-30) | +|:JIRA bug: :psbug:`2795` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.5.27-29.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`54127` - mysqld segfaults when built using --with-max-indexes=128 | -|:Launchpad bug: :bug:`1042517` | +|:JIRA bug: :psbug:`2795` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.27-29.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ -|:Upstream bug: :mysqlbug:`64800` - mysqldump with --include-master-host-port putting quotes around port no. | -|:Launchpad bug: :bug:`1013432` | -|:Upstream state: Verified (checked on 2018-01-30) | +|:Upstream bug: :mysqlbug:`64800` - mysqldump with --include-master-host-port putting quotes around port no. | +|:JIRA bug: :psbug:`1923` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.5.27-28.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`66301` - INSERT ... ON DUPLICATE KEY UPDATE + innodb_autoinc_lock_mode=1 is broken | -|:Launchpad bug: :bug:`1035225` | +|:JIRA bug: :psbug:`576` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.27-28.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`60743` - typo in cmake/dtrace.cmake | -|:Launchpad bug: :bug:`1013455` | +|:JIRA bug: :psbug:`1924` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.25a-27.1` | |:Upstream fix: 5.5.33 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`64663` - Segfault when adding indexes to InnoDB temporary tables | -|:Launchpad bug: :bug:`999147` | +|:JIRA bug: :psbug:`557` | |:Upstream state: N/A | |:Fix Released: :rn:`5.5.24-26.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`64624` - Mysql is crashing during replication | -|:Launchpad bug: :bug:`915814` | +|:JIRA bug: :psbug:`535` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.24-26.0` | |:Upstream fix: 5.5.26 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`64160` - page size 1024 but the only supported page size in this release is=16384 | -|:Launchpad bug: :bug:`966844` | +|:JIRA bug: :psbug:`549` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.21-25.1` | |:Upstream fix: 5.5.22 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`64432` - Bug :mysqlbug:`54330` (Broken fast index creation) was never fixed in 5.5 | -|:Launchpad bug: :bug:`939485` | +|:JIRA bug: :psbug:`544` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.21-25.0` | |:Upstream fix: 5.5.30 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`49336` - mysqlbinlog does not accept input from stdin when stdin is a pipe | -|:Launchpad bug: :bug:`933969` | +|:JIRA bug: :psbug:`541` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.21-25.0` | |:Upstream fix: 5.5.28 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`71183` - os_file_fsync() should handle fsync() returning EINTR | -|:Launchpad bug: :bug:`1262651` | -|:Upstream state: Verified (checked on 2018-01-30) | +|:JIRA bug: :psbug:`1461` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.5.20-24.1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`63451` - atomic/x86-gcc.h:make_atomic_cas_body64 potential miscompilation bug | -|:Launchpad bug: :bug:`878022` | +|:JIRA bug: :psbug:`508` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.18-23.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`62557` - SHOW SLAVE STATUS gives wrong output with master-master and using SET... | -|:Launchpad bug: :bug:`860910` | +|:JIRA bug: :psbug:`2692` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.17-22.1` | |:Upstream fix: 5.5.28 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`45702` - Impossible to specify myisam_sort_buffer > 4GB on 64 bit machines | -|:Launchpad bug: :bug:`878404` | +|:JIRA bug: :psbug:`2700` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.17-22.1` | |:Upstream fix: 5.5.22 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`62516` - Fast index creation does not update index statistics | -|:Launchpad bug: :bug:`857590` | -|:Upstream state: Verified (checked on 2018-01-30) | +|:JIRA bug: :psbug:`2686` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.5.16-22.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`25007` - memory tables with dynamic rows format | -|:Launchpad bug: :bug:`1148822` | -|:Upstream state: Verified (checked on 2018-01-30) | +|:JIRA bug: :psbug:`2407` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.5.15-21.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`51196` - Slave SQL: Got an error writing communication packets, Error_code: 1160 | -|:Launchpad bug: :bug:`813587` | +|:JIRA bug: :psbug:`2666` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.14-20.5` | |:Upstream fix: 5.5.21 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`43593` - dump/backup/restore/upgrade tools fails because of utf8_general_ci | -|:Launchpad bug: N/A | +|:JIRA bug: N/A | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.14-20.5` | |:Upstream fix: 5.5.21 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`61595` - mysql-test/include/wait_for_slave_param.inc timeout logic is incorrect | -|:Launchpad bug: :bug:`800035` | -|:Upstream state: Verified (checked on 2018-01-30) | +|:JIRA bug: :psbug:`485` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.5.13-20.4` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`39833` - CREATE INDEX does full table copy on TEMPORARY table | -|:Launchpad bug: N/A | -|:Upstream state: Verified (checked on 2018-01-30) | +|:JIRA bug: N/A | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.5.11-20.2` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`57583` - fast index create not used during "alter table foo engine=innodb" | -|:Launchpad bug: :bug:`744103` | -|:Upstream state: Verified (checked on 2018-01-30) | +|:JIRA bug: :psbug:`2619` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.5.11-20.2` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`49120` - mysqldump should have flag to delay creating indexes for innodb plugin... | -|:Launchpad bug: :bug:`744103` | -|:Upstream state: Verified (checked on 2018-01-30) | +|:JIRA bug: :psbug:`2619` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.5.11-20.2` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`54160` - InnoDB should retry on failed read or write, not immediately panic | -|:Launchpad bug: :bug:`764395` | +|:JIRA bug: :psbug:`2628` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.11-20.2` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`51325` - Dropping an empty innodb table takes a long time with large buffer pool | -|:Launchpad bug: none | +|:JIRA bug: none | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.10-20.1` | |:Upstream fix: 5.5.20 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`56433` - Auto-extension of InnoDB files | -|:Launchpad bug: none | +|:JIRA bug: none | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.10-20.1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`20001` - Support for temp-tables in INFORMATION_SCHEMA | -|:Launchpad bug: none | +|:JIRA bug: none | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.8-20.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`69146` - Optimization in buf_pool_get_oldest_modification if srv_buf_pool_instances| -|:Launchpad bug: :bug:`1176496` | -|:Upstream state: Verified (checked on 2018-01-30) | +|:JIRA bug: :psbug:`2418` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.5.8-20.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`54814` - make BUF_READ_AHEAD_AREA a constant | -|:Launchpad bug: :bug:`606811` | +|:JIRA bug: :psbug:`1148` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.8-20.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`75534` - Solve buffer pool mutex contention by splitting it | -|:Launchpad bug: :ref:`innodb_split_buf_pool_mutex` | +|:JIRA bug: :ref:`innodb_split_buf_pool_mutex` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.8-20.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`54790` - Use of non-blocking mode for sockets limits performance | -|:Launchpad bug: :bug:`606810` | +|:JIRA bug: :psbug:`1147` | |:Upstream state: Closed | |:Fix Released: :rn:`5.5.8-20.0` | |:Upstream fix: N/A | From 4aa63f98fa49e25216ef0a61c57800542a6296e3 Mon Sep 17 00:00:00 2001 From: Venkatesh Duggirala Date: Fri, 25 May 2018 19:17:46 +0530 Subject: [PATCH 0878/1221] Revert "Bug#27610678 SEMI-SYNC REPLICATION DOESN'T WORK FOR MINUTES AFTER RESTART REPLICATION" due to valgrind issue in MySQL-8.0. But patch pushed from MySQL-5.7. Hence reverting from all the versions. This reverts commit b7de90db900eb8c992602f0aa9f44549c0e28de5. --- .../r/rpl_semi_sync_add_remove_slaves.result | 119 ----------- ...rpl_semi_sync_add_remove_slaves-master.opt | 1 - .../rpl_semi_sync_add_remove_slaves-slave.opt | 1 - .../rpl/t/rpl_semi_sync_add_remove_slaves.cnf | 59 ------ .../t/rpl_semi_sync_add_remove_slaves.test | 190 ------------------ .../semisync/semisync_master_ack_receiver.cc | 29 +-- .../semisync/semisync_master_ack_receiver.h | 5 +- .../semisync_master_socket_listener.h | 37 +--- 8 files changed, 26 insertions(+), 415 deletions(-) delete mode 100644 mysql-test/suite/rpl/r/rpl_semi_sync_add_remove_slaves.result delete mode 100644 mysql-test/suite/rpl/t/rpl_semi_sync_add_remove_slaves-master.opt delete mode 100644 mysql-test/suite/rpl/t/rpl_semi_sync_add_remove_slaves-slave.opt delete mode 100644 mysql-test/suite/rpl/t/rpl_semi_sync_add_remove_slaves.cnf delete mode 100644 mysql-test/suite/rpl/t/rpl_semi_sync_add_remove_slaves.test diff --git a/mysql-test/suite/rpl/r/rpl_semi_sync_add_remove_slaves.result b/mysql-test/suite/rpl/r/rpl_semi_sync_add_remove_slaves.result deleted file mode 100644 index f82ff49835e8..000000000000 --- a/mysql-test/suite/rpl/r/rpl_semi_sync_add_remove_slaves.result +++ /dev/null @@ -1,119 +0,0 @@ -include/rpl_init.inc [topology=1->2, 1->3, 1->4, 1->5, 1->6, 1->7, 1->8, 1->9] -Warnings: -Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. -Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. -Warnings: -Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. -Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. -Warnings: -Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. -Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. -Warnings: -Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. -Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. -Warnings: -Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. -Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. -Warnings: -Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. -Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. -Warnings: -Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. -Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. -Warnings: -Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. -Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. -# -# 1. Initial data. -# -CREATE TABLE t1(c1 INT); -include/rpl_sync.inc -# -# 2. Install semisync on all the 9 servers. -# -[connection server_1] -CALL mtr.add_suppression("Semi-sync master failed on net_flush.*"); -include/install_semisync_master.inc -[connection server_2] -CALL mtr.add_suppression("Semi-sync slave net_flush.*"); -include/install_semisync_slave.inc -[connection server_3] -CALL mtr.add_suppression("Semi-sync slave net_flush.*"); -include/install_semisync_slave.inc -[connection server_4] -CALL mtr.add_suppression("Semi-sync slave net_flush.*"); -include/install_semisync_slave.inc -[connection server_5] -CALL mtr.add_suppression("Semi-sync slave net_flush.*"); -include/install_semisync_slave.inc -[connection server_6] -CALL mtr.add_suppression("Semi-sync slave net_flush.*"); -include/install_semisync_slave.inc -[connection server_7] -CALL mtr.add_suppression("Semi-sync slave net_flush.*"); -include/install_semisync_slave.inc -[connection server_8] -CALL mtr.add_suppression("Semi-sync slave net_flush.*"); -include/install_semisync_slave.inc -[connection server_9] -CALL mtr.add_suppression("Semi-sync slave net_flush.*"); -include/install_semisync_slave.inc -# -# 3. Make Master aware of 8 semisync slaves. -# -[connection server1_1] -SET GLOBAL rpl_semi_sync_master_wait_for_slave_count = 8; -# -# 4. Insert 5000 tuples in background using 10 parallel connections. -# -# -# 5. While the insert operations are going in the background, keep -# adding/removing semisync slaves randomly. -# -# -# 6. Add all 8 semisync slaves back to Master -# (if they were disconnected, in above step). -# -# -# 7. Make sure the data is synced on Master without any issues. -# -[connection server_1] -include/rpl_sync.inc -# -# 8. Check on all servers semisync is enabled after the -# the experiment and then uninstall semisync pluging -# from it. -# -[connection server_9] -include/assert.inc [ should be 1] -include/uninstall_semisync_slave.inc -[connection server_8] -include/assert.inc [ should be 1] -include/uninstall_semisync_slave.inc -[connection server_7] -include/assert.inc [ should be 1] -include/uninstall_semisync_slave.inc -[connection server_6] -include/assert.inc [ should be 1] -include/uninstall_semisync_slave.inc -[connection server_5] -include/assert.inc [ should be 1] -include/uninstall_semisync_slave.inc -[connection server_4] -include/assert.inc [ should be 1] -include/uninstall_semisync_slave.inc -[connection server_3] -include/assert.inc [ should be 1] -include/uninstall_semisync_slave.inc -[connection server_2] -include/assert.inc [ should be 1] -include/uninstall_semisync_slave.inc -[connection server_1] -include/assert.inc [ should be 1] -include/uninstall_semisync_master.inc -# -# 9. Cleanup time. -# -[connection server_1] -DROP TABLE t1; -include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_semi_sync_add_remove_slaves-master.opt b/mysql-test/suite/rpl/t/rpl_semi_sync_add_remove_slaves-master.opt deleted file mode 100644 index 58029d28acec..000000000000 --- a/mysql-test/suite/rpl/t/rpl_semi_sync_add_remove_slaves-master.opt +++ /dev/null @@ -1 +0,0 @@ -$SEMISYNC_PLUGIN_OPT diff --git a/mysql-test/suite/rpl/t/rpl_semi_sync_add_remove_slaves-slave.opt b/mysql-test/suite/rpl/t/rpl_semi_sync_add_remove_slaves-slave.opt deleted file mode 100644 index 58029d28acec..000000000000 --- a/mysql-test/suite/rpl/t/rpl_semi_sync_add_remove_slaves-slave.opt +++ /dev/null @@ -1 +0,0 @@ -$SEMISYNC_PLUGIN_OPT diff --git a/mysql-test/suite/rpl/t/rpl_semi_sync_add_remove_slaves.cnf b/mysql-test/suite/rpl/t/rpl_semi_sync_add_remove_slaves.cnf deleted file mode 100644 index 546452029ffe..000000000000 --- a/mysql-test/suite/rpl/t/rpl_semi_sync_add_remove_slaves.cnf +++ /dev/null @@ -1,59 +0,0 @@ -!include ../my.cnf - -[mysqld.1] -log-slave-updates -server_id=1 - -[mysqld.2] -log-slave-updates -server_id=2 - -[mysqld.3] -log-slave-updates -server_id=3 - -[mysqld.4] -log-slave-updates -server_id=4 - -[mysqld.5] -log-slave-updates -server_id=5 - -[mysqld.6] -log-slave-updates -server_id=6 - -[mysqld.7] -log-slave-updates -server_id=7 - -[mysqld.8] -log-slave-updates -server_id=8 - -[mysqld.9] -log-slave-updates -server_id=9 - -[ENV] -SERVER_MYPORT_3= @mysqld.3.port -SERVER_MYSOCK_3= @mysqld.3.socket - -SERVER_MYPORT_4= @mysqld.4.port -SERVER_MYSOCK_4= @mysqld.4.socket - -SERVER_MYPORT_5= @mysqld.5.port -SERVER_MYSOCK_5= @mysqld.5.socket - -SERVER_MYPORT_6= @mysqld.6.port -SERVER_MYSOCK_6= @mysqld.6.socket - -SERVER_MYPORT_7= @mysqld.7.port -SERVER_MYSOCK_7= @mysqld.7.socket - -SERVER_MYPORT_8= @mysqld.8.port -SERVER_MYSOCK_8= @mysqld.8.socket - -SERVER_MYPORT_9= @mysqld.9.port -SERVER_MYSOCK_9= @mysqld.9.socket diff --git a/mysql-test/suite/rpl/t/rpl_semi_sync_add_remove_slaves.test b/mysql-test/suite/rpl/t/rpl_semi_sync_add_remove_slaves.test deleted file mode 100644 index 498357650864..000000000000 --- a/mysql-test/suite/rpl/t/rpl_semi_sync_add_remove_slaves.test +++ /dev/null @@ -1,190 +0,0 @@ -#==== Purpose ==== -# -# This test script purpose is to check semisync replication -# behaviour when there are semisync slaves getting added and -# removed while dml changes are happening. -# -#==== Implementation ==== -# -# 1) Install semisync on one Master and 8 Slaves. -# 2) Using mysqlslap, keep inserting data in background on Master. -# 3) While the DMLs are going on, keep adding/removing semisync slaves. -# 4) At the end of the step-3, check that the data is synced without any -# issues. -# 5) Check semisync is still enabled on Master and all slaves. -# -#==== References ==== -# -# Bug#27610678 SEMI-SYNC REPLICATION DOESN'T WORK FOR MINUTES AFTER RESTART -# REPLICATION -# -#======== -# -# 9 servers + 5000 inserts involved in test. Hence marking it as big-test. -# ---source include/big_test.inc ---source include/not_group_replication_plugin.inc ---source include/have_binlog_format_statement.inc ---source include/have_debug.inc - -# -# One Master and 8 Slaves in the semi sync topology. -# ---let rpl_topology=1->2, 1->3, 1->4, 1->5, 1->6, 1->7, 1->8, 1->9 ---source include/rpl_init.inc - ---echo # ---echo # 1. Initial data. ---echo # -CREATE TABLE t1(c1 INT); ---source include/rpl_sync.inc - ---echo # ---echo # 2. Install semisync on all the 9 servers. ---echo # ---let $i= 1 -while ($i < 10) -{ - --let $rpl_connection_name= server_$i - --source include/rpl_connection.inc - if ( $i == 1) - { - --connect(server1_1, localhost,root,,,$MASTER_MYPORT) - CALL mtr.add_suppression("Semi-sync master failed on net_flush.*"); - --source include/install_semisync_master.inc - } - if ( $i != 1 ) - { - CALL mtr.add_suppression("Semi-sync slave net_flush.*"); - --source include/install_semisync_slave.inc - } - --inc $i -} - ---echo # ---echo # 3. Make Master aware of 8 semisync slaves. ---echo # ---let $rpl_connection_name= server1_1 ---source include/rpl_connection.inc ---let $slaves = 8 ---eval SET GLOBAL rpl_semi_sync_master_wait_for_slave_count = $slaves - ---echo # ---echo # 4. Insert 5000 tuples in background using 10 parallel connections. ---echo # ---exec_in_background $MYSQL_SLAP --create-schema=test --delimiter=";" --iterations=500 --query="INSERT INTO t1 values (1)" --concurrency=10 --silent 2>&1 - ---echo # ---echo # 5. While the insert operations are going in the background, keep ---echo # adding/removing semisync slaves randomly. ---echo # ---let $rpl_connection_silent = 1 ---let $include_silent= 1 ---disable_result_log ---disable_query_log ---let $rpl_debug= 0 ---let $iter= 1 -while ( $iter < 50 ) -{ - # Random server_id generator ( server_id will between [2-9] - --let $server_id=`SELECT FLOOR(2 + ((RAND() * 100) % 8))` - --let $rpl_connection_name= server_$server_id - --source include/rpl_connection.inc - --let $service_state= `SELECT service_state FROM performance_schema.replication_connection_status` - if ($service_state == 'ON') - { - # If the replication state is ON, bring it down. - --source include/stop_slave.inc - --let $rpl_connection_name= server1_1 - --source include/rpl_connection.inc - # Adjust rpl_semi_sync_master_wait_for_slave_count variable. - --dec $slaves - --eval SET GLOBAL rpl_semi_sync_master_wait_for_slave_count = $slaves - } - if ($service_state == 'OFF') - { - # If the replication state is OFF, bring it up. - --source include/start_slave.inc - --let $rpl_connection_name= server1_1 - --source include/rpl_connection.inc - # Adjust rpl_semi_sync_master_wait_for_slave_count variable. - --inc $slaves - --eval SET GLOBAL rpl_semi_sync_master_wait_for_slave_count = $slaves - } - --inc $iter - # Do it slowly while insertions on the master are happening in the background. - sleep 1; -} - ---echo # ---echo # 6. Add all 8 semisync slaves back to Master ---echo # (if they were disconnected, in above step). ---echo # ---let $iter = 2 -while ($iter <= 9) -{ - --let $rpl_connection_name= server_$iter - --source include/rpl_connection.inc - --let $service_state= `SELECT service_state FROM performance_schema.replication_connection_status` - if ($service_state == 'OFF') - { - --source include/start_slave.inc - --let $rpl_connection_name= server1_1 - --source include/rpl_connection.inc - # Adjust rpl_semi_sync_master_wait_for_slave_count variable. - --inc $slaves - --eval SET GLOBAL rpl_semi_sync_master_wait_for_slave_count = $slaves - } - --inc $iter -} ---enable_result_log ---enable_query_log ---let $rpl_connection_silent = 0 ---let $include_silent= 0 - - ---echo # ---echo # 7. Make sure the data is synced on Master without any issues. ---echo # ---let $rpl_connection_name= server_1 ---source include/rpl_connection.inc ---let $wait_timeout= 60 ---let $wait_condition= SELECT count(*) = 5000 FROM t1 ---source include/wait_condition.inc ---let $slave_timeout=600 ---source include/rpl_sync.inc - ---echo # ---echo # 8. Check on all servers semisync is enabled after the ---echo # the experiment and then uninstall semisync pluging ---echo # from it. ---echo # ---let $i= 9 -while ($i >= 1) -{ - --let $rpl_connection_name= server_$i - --source include/rpl_connection.inc - if ( $i == 1) - { - --let $assert_variable_name= rpl_semi_sync_master_enabled - --let $assert_variable_value= 1 - --source include/assert_variable.inc - --source include/uninstall_semisync_master.inc - } - if ( $i != 1 ) - { - --let $assert_variable_name= rpl_semi_sync_slave_enabled - --let $assert_variable_value= 1 - --source include/assert_variable.inc - --source include/uninstall_semisync_slave.inc - } - --dec $i -} - ---echo # ---echo # 9. Cleanup time. ---echo # ---let $rpl_connection_name= server_1 ---source include/rpl_connection.inc -DROP TABLE t1; ---source include/rpl_end.inc diff --git a/plugin/semisync/semisync_master_ack_receiver.cc b/plugin/semisync/semisync_master_ack_receiver.cc index 2233f5b2b257..9cce7317da91 100644 --- a/plugin/semisync/semisync_master_ack_receiver.cc +++ b/plugin/semisync/semisync_master_ack_receiver.cc @@ -128,9 +128,7 @@ bool Ack_receiver::add_slave(THD *thd) const char *kWho = "Ack_receiver::add_slave"; function_enter(kWho); - slave.thread_id= thd->thread_id(); - slave.server_id= thd->server_id; - slave.net_compress= thd->get_protocol_classic()->get_compression(); + slave.thd= thd; slave.vio= *thd->get_protocol_classic()->get_vio(); slave.vio.mysql_socket.m_psi= NULL; slave.vio.read_timeout= 1; @@ -165,7 +163,7 @@ void Ack_receiver::remove_slave(THD *thd) for (it= m_slaves.begin(); it != m_slaves.end(); it++) { - if (it->thread_id == thd->thread_id()) + if (it->thd == thd) { m_slaves.erase(it); m_slaves_changed= true; @@ -204,7 +202,11 @@ void Ack_receiver::run() NET net; unsigned char net_buff[REPLY_MESSAGE_MAX_LENGTH]; uint i; - Socket_listener listener; +#ifdef HAVE_POLL + Poll_socket_listener listener(m_slaves); +#else + Select_socket_listener listener(m_slaves); +#endif //HAVE_POLL sql_print_information("Starting ack receiver thread"); @@ -232,14 +234,14 @@ void Ack_receiver::run() mysql_mutex_unlock(&m_mutex); continue; } - if (!listener.init_slave_sockets(m_slaves)) + if (!listener.init_slave_sockets()) goto end; m_slaves_changed= false; } - mysql_mutex_unlock(&m_mutex); ret= listener.listen_on_sockets(); if (ret <= 0) { + mysql_mutex_unlock(&m_mutex); ret= DBUG_EVALUATE_IF("rpl_semisync_simulate_select_error", -1, ret); @@ -253,32 +255,33 @@ void Ack_receiver::run() set_stage_info(stage_reading_semi_sync_ack); i= 0; - while (i < listener.number_of_slave_sockets() && m_status == ST_UP) + while (i < m_slaves.size()) { if (listener.is_socket_active(i)) { - Slave slave_obj= listener.get_slave_obj(i); ulong len; - net.vio= &slave_obj.vio; + net.vio= &m_slaves[i].vio; /* Set compress flag. This is needed to support Slave_compress_protocol flag enabled Slaves */ - net.compress= slave_obj.net_compress; + net.compress= + m_slaves[i].thd->get_protocol_classic()->get_compression(); do { net_clear(&net, 0); len= my_net_read(&net); if (likely(len != packet_error)) - repl_semisync.reportReplyPacket(slave_obj.server_id, + repl_semisync.reportReplyPacket(m_slaves[i].server_id(), net.read_pos, len); else if (net.last_errno == ER_NET_READ_ERROR) listener.clear_socket_info(i); - } while (net.vio->has_data(net.vio) && m_status == ST_UP); + } while (net.vio->has_data(net.vio)); } i++; } + mysql_mutex_unlock(&m_mutex); } end: sql_print_information("Stopping ack receiver thread"); diff --git a/plugin/semisync/semisync_master_ack_receiver.h b/plugin/semisync/semisync_master_ack_receiver.h index c191336b8882..925becdf152e 100644 --- a/plugin/semisync/semisync_master_ack_receiver.h +++ b/plugin/semisync/semisync_master_ack_receiver.h @@ -23,12 +23,11 @@ struct Slave { - uint32_t thread_id; + THD *thd; Vio vio; - uint server_id; - bool net_compress; my_socket sock_fd() const { return vio.mysql_socket.fd; } + uint server_id() const { return thd->server_id; } }; typedef std::vector Slave_vector; diff --git a/plugin/semisync/semisync_master_socket_listener.h b/plugin/semisync/semisync_master_socket_listener.h index 9853b093d368..b021edf926f4 100644 --- a/plugin/semisync/semisync_master_socket_listener.h +++ b/plugin/semisync/semisync_master_socket_listener.h @@ -24,7 +24,8 @@ class Poll_socket_listener { public: - Poll_socket_listener() + Poll_socket_listener(const Slave_vector &slaves) + :m_slaves(slaves) { } @@ -44,9 +45,8 @@ class Poll_socket_listener m_fds[index].events= 0; } - bool init_slave_sockets(Slave_vector slaves) + bool init_slave_sockets() { - m_slaves= slaves; m_fds.clear(); for (uint i= 0; i < m_slaves.size(); i++) { @@ -57,29 +57,19 @@ class Poll_socket_listener } return true; } - uint number_of_slave_sockets() - { - return m_slaves.size(); - } - - Slave get_slave_obj(int index) - { - return m_slaves[index]; - } private: - Slave_vector m_slaves; + const Slave_vector &m_slaves; std::vector m_fds; }; -typedef class Poll_socket_listener Socket_listener; #else //NO POLL class Select_socket_listener { public: - Select_socket_listener() - :m_max_fd(INVALID_SOCKET) + Select_socket_listener(const Slave_vector &slaves) + :m_slaves(slaves), m_max_fd(INVALID_SOCKET) { } @@ -102,9 +92,8 @@ class Select_socket_listener FD_CLR(m_slaves[index].sock_fd(), &m_init_fds); } - bool init_slave_sockets(Slave_vector slaves) + bool init_slave_sockets() { - m_slaves= slaves; FD_ZERO(&m_init_fds); for (uint i= 0; i < m_slaves.size(); i++) { @@ -123,23 +112,13 @@ class Select_socket_listener } return true; } - uint number_of_slave_sockets() - { - return m_slaves.size(); - } - - Slave get_slave_obj(int index) - { - return m_slaves[index]; - } private: - Slave_vector m_slaves; + const Slave_vector &m_slaves; my_socket m_max_fd; fd_set m_init_fds; fd_set m_fds; }; -typedef class Select_socket_listener Socket_listener; #endif //HAVE_POLL #endif //SEMISYNC_MASTER_SOCKET_LISTENER From 232b58edbb1dbcb1f4239cae141fd578abc818c3 Mon Sep 17 00:00:00 2001 From: Dmitriy Kostiuk Date: Fri, 25 May 2018 19:14:34 +0300 Subject: [PATCH 0879/1221] Fix for DOC-734 changing launchpad links to JIRA, 5.6 version (#2385) --- doc/source/upstream-bug-fixes.rst | 444 +++++++++++++++--------------- 1 file changed, 222 insertions(+), 222 deletions(-) diff --git a/doc/source/upstream-bug-fixes.rst b/doc/source/upstream-bug-fixes.rst index 21eb43843f7e..32b67f4033f6 100644 --- a/doc/source/upstream-bug-fixes.rst +++ b/doc/source/upstream-bug-fixes.rst @@ -6,344 +6,344 @@ +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`53588` - Blackhole: Specified key was too long; max key length is 1000 bytes | -|:Launchpad bug: :bug:`173049` | -|:Upstream state: Verified | +|:JIRA bug: :psbug:`1126` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.6.39-83.1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`77637` - mysql 5.6.25 compiled warning | -|:Launchpad bug: :bug:`1660628` | -|:Upstream state: Verified (checked on 2018-02-12) | +|:JIRA bug: :psbug:`3632` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.6.39-83.1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`87065` - Release lock on table statistics after query plan created | -|:Launchpad bug: :bug:`1704195` | -|:Upstream state: Open (checked on 2017-12-08) | +|:JIRA bug: :psbug:`2503` | +|:Upstream state: Open (checked on 2018-05-24) | |:Fix Released: :rn:`5.6.38-83.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ -|:Upstream bug: :mysqlbug:`68659` - InnoDB Linux native aio should submit more i/o requests at once | -|:Launchpad bug: :ref:`aio_page_requests` | -|:Upstream state: Analyzing (checked on 2017-12-08) | +|:Upstream bug: :mysqlbug:`68659` - InnoDB Linux native aio should submit more i/o requests at once | +|:JIRA bug: :ref:`aio_page_requests` | +|:Upstream state: Analyzing (checked on 2018-05-24) | |:Fix Released: :rn:`5.6.38-83.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`83814` - Add support for OpenSSL 1.1 | -|:Launchpad bug: :bug:`1702903` | -|:Upstream state: Verified (checked on 2017-12-08) | +|:JIRA bug: :psbug:`1105` | +|:Upstream state: Closed | |:Fix Released: :rn:`5.6.36-82.1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`86260` - Assert on KILL'ing a stored routine invocation | -|:Launchpad bug: :bug:`1689736` | -|:Upstream state: Verified (checked on 2017-12-08) | +|:JIRA bug: :psbug:`1091` | +|:Upstream state: Closed | |:Fix Released: :rn:`5.6.36-82.1` | -|:Upstream fix: N/A | +|:Upstream fix: 5.6.40 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`68052` - SSL Certificate Subject ALT Names with IPs not respected with --ssl-ver...| -|:Launchpad bug: :bug:`1673656` | -|:Upstream state: Verified (checked on 2017-12-08) | +|:JIRA bug: :psbug:`1076` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.6.36-82.1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`85838` - rpl_diff.inc in 5.7 does not compare data from different servers | -|:Launchpad bug: :bug:`1680510` | +|:JIRA bug: :psbug:`2257` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.36-82.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`85678` - field-t deletes Fake_TABLE objects through base TABLE pointer w/o ... | -|:Launchpad bug: :bug:`1677130` | +|:JIRA bug: :psbug:`2253` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.36-82.0` | |:Upstream fix: 5.6.37 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`85671` - segfault-t failing under recent AddressSanitizer | -|:Launchpad bug: :bug:`1676847` | +|:JIRA bug: :psbug:`2252` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.36-82.0` | |:Upstream fix: 5.6.37 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`85258` - DROP TEMPORARY TABLE creates a transaction in binary log on read only... | -|:Launchpad bug: :bug:`1668602` | +|:JIRA bug: :psbug:`1785` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.36-82.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`84415` - slave don't report Seconds_Behind_Master when running ... | -|:Launchpad bug: :bug:`1654091` | -|:Upstream state: Verified (checked on 2017-12-08) | +|:JIRA bug: :psbug:`1770` | +|:Upstream state: Closed | |:Fix Released: :rn:`5.6.36-82.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`86209` - audit plugin + MB collation connection + PREPARE stmt parse error crash...| -|:Launchpad bug: :bug:`1688698` | +|:JIRA bug: :psbug:`1089` | |:Upstream state: N/A | |:Fix Released: :rn:`5.6.36-82.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`88057` - Intermediary slave does not log master changes with... | -|:Launchpad bug: :bug:`1722789` | -|:Upstream state: Verified (checked on 2018-01-04) | +|:JIRA bug: :psbug:`1119` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.6.39-83.1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`81467` - innodb_fts.sync_block test unstable due to slow query log nondeterminism | -|:Launchpad bug: :bug:`1662163` | -|:Upstream state: Verified (checked on 2017-12-08) | +|:JIRA bug: :psbug:`2232` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.6.35-80.1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`75311` - Error for SSL cipher is unhelpful | -|:Launchpad bug: :bug:`1660339` | -|:Upstream state: Verified (checked on 2017-12-08) | +|:JIRA bug: :psbug:`1779` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.6.35-80.1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`83648` - Assertion failure in thread x in file fts0que.cc line 3659 | -|:Launchpad bug: :bug:`1634932` | +|:JIRA bug: :psbug:`1023` | |:Upstream state: N/A | |:Fix Released: :rn:`5.6.35-80.1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`84366` - InnoDB index dives do not detect concurrent tree changes, return bogus... | -|:Launchpad bug: :bug:`1625151` | -|:Upstream state: Verified (checked on 2017-12-08) | +|:JIRA bug: :psbug:`1743` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.6.35-80.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`83003` - Using temporary tables on slaves increases GTID sequence number | -|:Launchpad bug: :bug:`1539504` | +|:JIRA bug: :psbug:`964` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.35-80.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`71759` - memory leak with string thread variable that set memalloc flag | -|:Launchpad bug: :bug:`1621012` | +|:JIRA bug: :psbug:`1006` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.33-79.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`82886` - Server may crash due to a glibc bug in handling short-lived detached ... | -|:Launchpad bug: :bug:`1621012` | +|:JIRA bug: :psbug:`1006` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.33-79.0` | |:Upstream fix: 5.6.35 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`45679` - KILL QUERY not behaving consistently and will hang in some cases | -|:Launchpad bug: :bug:`1621046` | +|:JIRA bug: :psbug:`3551` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.33-79.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`82935` - Cipher ECDHE-RSA-AES128-GCM-SHA256 listed in man/Ssl_cipher_list, not ... | -|:Launchpad bug: :bug:`1622034` | -|:Upstream state: Verified (checked on 2017-12-08) | +|:JIRA bug: :psbug:`1737` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.6.33-79.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`76418` - Server crashes when querying partitioning table MySQL_5.7.14 | -|:Launchpad bug: :bug:`1657941` | +|:JIRA bug: :psbug:`1050` | |:Upstream state: N/A | |:Fix Released: :rn:`5.6.36-82.1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`69396` - Can't set query_cache_type to 0 when it is already 0 | -|:Launchpad bug: :bug:`1625501` | +|:JIRA bug: :psbug:`3563` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.33-79.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`71761` - ANALYZE TABLE should remove its table from background stat processing ... | -|:Launchpad bug: :bug:`1626441` | -|:Upstream state: Verified (checked on 2017-12-08) | +|:JIRA bug: :psbug:`1749` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.6.33-79.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`83124` - Bug 81657 fix merge to 5.6 broken | -|:Launchpad bug: :bug:`1626936` | +|:JIRA bug: :psbug:`1750` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.33-79.0` | |:Upstream fix: 5.6.35 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`82980` - Multi-threaded slave leaks worker threads in case of thread create ... | -|:Launchpad bug: :bug:`1619622` | +|:JIRA bug: :psbug:`2193` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.33-79.0` | |:Upstream fix: 5.6.38 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`75235` - Optimize ibuf merge when reading a page from disk | -|:Launchpad bug: :bug:`1618393` | +|:JIRA bug: :psbug:`2484` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.33-79.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`83073` - GCC 5 and 6 miscompile mach_parse_compressed | -|:Launchpad bug: :bug:`1626002` | +|:JIRA bug: :psbug:`1745` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.33-79.0` | |:Upstream fix: 5.6.35 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`82798` - Small buffer pools might be too small for rseg init during crash recovery | -|:Launchpad bug: :bug:`1616392` | -|:Upstream state: Verified (checked on 2017-12-08) | +|:JIRA bug: :psbug:`3525` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.6.33-79.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`81674` - LeakSanitizer-enabled build fails to bootstrap server for MTR | -|:Launchpad bug: :bug:`1603978` | -|:Upstream state: Verified (checked on 2017-12-08) | +|:JIRA bug: :psbug:`3486` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.6.32-78.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`82019` - Is client library supposed to retry EINTR indefinitely or not | -|:Launchpad bug: :bug:`1591202` | +|:JIRA bug: :psbug:`1720` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.32-78.0` | |:Upstream fix: 5.6.33 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`79610` - Failed DROP DATABASE due FK constraint on master breaks slave | -|:Launchpad bug: :bug:`1525407` | -|:Upstream state: Verified (checked on 2017-12-08) | +|:JIRA bug: :psbug:`1683` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.6.32-78.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`77399` - Deadlocks missed by INFORMATION_SCHEMA.INNODB_METRICS lock_deadlocks ... | -|:Launchpad bug: :bug:`1466414` | -|:Upstream state: Verified (checked on 2017-12-08) | +|:JIRA bug: :psbug:`1632` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.6.31-77.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`76142` - InnoDB tablespace import fails when importing table w/ different datadir | -|:Launchpad bug: :bug:`1548597` | -|:Upstream state: Verified (checked on 2017-12-08) | +|:JIRA bug: :psbug:`1697` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.6.31-77.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`81675` - mysqlbinlog does not free the existing connection before opening new ... | -|:Launchpad bug: :bug:`1587840` | +|:JIRA bug: :psbug:`1718` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.31-77.0` | |:Upstream fix: 5.6.33 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`78223` - memory leak in mysqlbinlog | -|:Launchpad bug: :bug:`1582761` | +|:JIRA bug: :psbug:`3440` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.31-77.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`81714` - mysqldump get_view_structure does not free MYSQL_RES in one error path | -|:Launchpad bug: :bug:`1588845` | +|:JIRA bug: :psbug:`2152` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.31-77.0` | |:Upstream fix: 5.6.38 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`81657` - DBUG_PRINT in THD::decide_logging_format prints incorrectly, access ... | -|:Launchpad bug: :bug:`1587426` | +|:JIRA bug: :psbug:`2150` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.31-77.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`80014` - mysql build fails, memory leak in gen_lex_hash, clang address sanitizer | -|:Launchpad bug: :bug:`1580993` | +|:JIRA bug: :psbug:`3433` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.30-76.3` | |:Upstream fix: 5.6.35 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`72466` - More memory overhead per page in the InnoDB buffer pool | -|:Launchpad bug: :bug:`1536693` | -|:Upstream state: Verified (checked on 2017-12-08) | +|:JIRA bug: :psbug:`1689` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.6.30-76.3` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`79703` - Spin rounds per wait will be negative in InnoDB status if spin waits ... | -|:Launchpad bug: :bug:`1527160` | +|:JIRA bug: :psbug:`1684` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.28-76.1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`79185` - Innodb freeze running REPLACE statements | -|:Launchpad bug: :bug:`1519094` | +|:JIRA bug: :psbug:`945` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.27-76.0` | |:Upstream fix: 5.6.30 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`77684` - DROP TABLE IF EXISTS may brake replication if slave has replication filter| -|:Launchpad bug: :bug:`1475107` | +|:JIRA bug: :psbug:`1639` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.26-74.0` | |:Upstream fix: 5.6.30 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`77591` - ALTER TABLE does not allow to change NULL/NOT NULL if foreign key exists | -|:Launchpad bug: :bug:`1470677` | -|:Upstream state: Verified (checked on 2017-12-08) | +|:JIRA bug: :psbug:`1635` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.6.26-74.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`35125` - Allow the ability to set the server_id for a connection for logging to... | |:Launchpad bug: `Blueprint `_ | -|:Upstream state: Verified (checked on 2017-12-08) | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.6.26-74.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`75480` - Selecting wrong pos with SHOW BINLOG EVENTS causes a potentially ... | -|:Launchpad bug: :bug:`1409652` | +|:JIRA bug: :psbug:`1600` | |:Upstream state: N/A | |:Fix Released: :rn:`5.6.25-73.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`76927` - Duplicate UK values in READ-COMMITTED (again) | -|:Launchpad bug: :bug:`1308016` | +|:JIRA bug: :psbug:`1494` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.25-73.0` | |:Upstream fix: 5.6.27 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`66779` - innochecksum does not work with compressed tables | -|:Launchpad bug: :bug:`1100652` | +|:JIRA bug: :psbug:`1302` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.25-73.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`73689` - Zero can be a valid InnoDB checksum, but validation will fail later | -|:Launchpad bug: :bug:`1467760` | +|:JIRA bug: :psbug:`PS-909` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.25-73.0` | |:Upstream fix: 5.6.22 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`77275` - Newest RHEL/CentOS openssl update breaks mysql DHE ciphers | -|:Launchpad bug: :bug:`1462856` | +|:JIRA bug: :psbug:`906` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.25-73.0` | |:Upstream fix: 5.6.26 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`76349` - memory leak in add_derived_key() | -|:Launchpad bug: :bug:`1380985` | +|:JIRA bug: :psbug:`826` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.24-72.2` | |:Upstream fix: 5.6.27 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`72108` - Hard to read history file | -|:Launchpad bug: :bug:`1296192` | -|:Upstream state: Verified (checked on 2017-12-08) | +|:JIRA bug: :psbug:`2066` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.6.24-72.2` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`69991` - MySQL client is broken without readline | -|:Launchpad bug: :bug:`1266386` | -|:Upstream state: Verified (checked on 2017-12-08) | +|:JIRA bug: :psbug:`1467` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.6.24-72.2` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`63130` - CMake-based check for the presence of a system readline library is not... | -|:Launchpad bug: :bug:`1266386` | -|:Upstream state: Can't repeat (checked on 2017-12-08) | +|:JIRA bug: :psbug:`1467` | +|:Upstream state: Can't repeat (checked on 2018-05-24) | |:Fix Released: :rn:`5.6.24-72.2` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`53645` - SHOW GRANTS not displaying all the applicable grants | -|:Launchpad bug: :bug:`1354988` | -|:Upstream state: Verified (checked on 2017-12-08) | +|:JIRA bug: :psbug:`1467` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.6.23-72.1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ @@ -354,91 +354,91 @@ |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`75642` - Extend valid range of dummy certificates ni mysql-test/std_data | -|:Launchpad bug: :bug:`1415843` | +|:JIRA bug: :psbug:`1605` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.22-72.0` | |:Upstream fix: 5.6.23 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`73979` - wrong stack size calculation leads to stack overflow in pinbox allocator | -|:Launchpad bug: :bug:`1351148` | +|:JIRA bug: :psbug:`807` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.22-71.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`74644` - A query on empty table with BLOBs may crash server | -|:Launchpad bug: :bug:`1384568` | +|:JIRA bug: :psbug:`176` | |:Upstream state: N/A | |:Fix Released: :rn:`5.6.22-71.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`57430` - query optimizer does not pick covering index for some "order by" queries | -|:Launchpad bug: :bug:`1394967` | +|:JIRA bug: :psbug:`1587` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.22-71.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`74987` - mtr failure on Ubuntu Utopic, mysqlhotcopy fails with wrong error(255) | -|:Launchpad bug: :bug:`1396330` | -|:Upstream state: Verified (checked on 2017-12-08) | +|:JIRA bug: :psbug:`2102` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.6.22-71.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`75189` - engines suite tests depending on InnoDB implementation details | -|:Launchpad bug: :bug:`1401776` | -|:Upstream state: Verified (checked on 2017-12-08) | +|:JIRA bug: :psbug:`2103` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.6.22-71.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`72475` - Binlog events with binlog_format=MIXED are unconditionally logged in ROW..| -|:Launchpad bug: :bug:`1313901` | +|:JIRA bug: :psbug:`151` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.21-70.1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`74842` - Incorrect attribute((nonnull)) for btr_cur_ins_lock_and_undo callees | -|:Launchpad bug: :bug:`1390695` | -|:Upstream state: Verified (checked on 2017-12-08) | +|:JIRA bug: :psbug:`385` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.6.21-70.1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`74440` - mysql_install_db not handling mysqld startup failure | -|:Launchpad bug: :bug:`1382782` | +|:JIRA bug: :psbug:`1553` | |:Upstream state: Won't Fix | |:Fix Released: :rn:`5.6.21-70.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`73066` - Replication stall with multi-threaded replication | -|:Launchpad bug: :bug:`1331586` | -|:Upstream state: Verified (checked on 2017-12-08) | +|:JIRA bug: :psbug:`1511` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.6.21-70.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`71091` - CSV engine does not properly process ``""``, in quotes | -|:Launchpad bug: :bug:`1316042` | -|:Upstream state: Verified (checked on 2017-12-08) | +|:JIRA bug: :psbug:`153` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.6.21-70.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`73736` - Missing testcase sync in rpl_err_ignoredtable | -|:Launchpad bug: :bug:`1361568` | +|:JIRA bug: :psbug:`2081` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.21-69.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`70860` - --tc-heuristic-recover option values are broken | -|:Launchpad bug: :bug:`1334330` | +|:JIRA bug: :psbug:`1514` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.20-68.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`73418` - Add --manual-lldb option to mysql-test-run.pl | -|:Launchpad bug: :bug:`1328482` | -|:Upstream state: Verified (checked on 2017-12-08) | +|:JIRA bug: :psbug:`2448` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.6.20-68.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`67806` - Multiple user level lock per connection | -|:Launchpad bug: :ref:`multiple_user_level_locks` | +|:JIRA bug: :ref:`multiple_user_level_locks` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.19-67.0` | |:Upstream fix: N/A | @@ -450,115 +450,115 @@ |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`72615` - MTR --mysqld=--default-storage-engine=foo incompatible w/ dynamically... | -|:Launchpad bug: :bug:`1318537` | -|:Upstream state: Verified (checked on 2017-12-08) | +|:JIRA bug: :psbug:`2071` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.6.17-66.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`72163` - Rev 5774 broke rpl_plugin_load | -|:Launchpad bug: :bug:`1299688` | -|:Upstream state: Verified (checked on 2017-12-08) | +|:JIRA bug: :psbug:`2068` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.6.17-65.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`60782` - Audit plugin API: no MYSQL_AUDIT_GENERAL_LOG notifications with general...| -|:Launchpad bug: :bug:`1182535` | +|:JIRA bug: :psbug:`1369` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.17-65.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`71250` - Bison 3 breaks mysql build | -|:Launchpad bug: :bug:`1262439` | +|:JIRA bug: :psbug:`376` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.17-65.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`71374` - Slave IO thread won't attempt auto reconnect to the master/error-code 1159| -|:Launchpad bug: :bug:`1268729` | +|:JIRA bug: :psbug:`1470` | |:Upstream state: N/A | |:Fix Released: :rn:`5.6.16-64.1` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`74637` - make dirty page flushing more adaptive | |:Launchpad BP: `Split LRU ... `_ | -|:Upstream state: Verified (checked on 2017-12-08) | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.6.16-64.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`71988` - page_cleaner: aggressive background flushing | -|:Launchpad bug: :bug:`1238039` | -|:Upstream state: Verified (checked on 2017-12-08) | +|:JIRA bug: :psbug:`1437` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.6.16-64.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`71624` - printf size_t results in a fatal warning in 32-bit debug builds | -|:Launchpad bug: :bug:`1277505` | -|:Upstream state: Can't repeat (checked on 2017-12-08) | +|:JIRA bug: :psbug:`760` | +|:Upstream state: Can't repeat (checked on 2018-05-24) | |:Fix Released: :rn:`5.6.16-64.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`71094` - ssl.cmake related warnings | -|:Launchpad bug: :bug:`1274411` | +|:JIRA bug: :psbug:`2058` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.16-64.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`71089` - CMake warning when generating Makefile | -|:Launchpad bug: :bug:`1274827` | +|:JIRA bug: :psbug:`2059` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.16-64.0` | |:Upstream fix: 5.6.18 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`71708` - 70768 fix perf regression: high rate of RW lock creation and destruction | -|:Launchpad bug: :bug:`1279671` | +|:JIRA bug: :psbug:`1474` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.16-64.0` | |:Upstream fix: 5.6.19 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`54430` - innodb should retry partial reads/writes where errno was 0 | -|:Launchpad bug: :bug:`1262500` | +|:JIRA bug: :psbug:`1460` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.16-64.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`70854` - Tc_log_page_size should be unflushable or server crashes if 2 XA SEs ... | -|:Launchpad bug: :bug:`1255551` | +|:JIRA bug: :psbug:`743` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.16-64.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`78050` - Crash on when XA functions activated by a storage engine | -|:Launchpad bug: :bug:`1255549` | -|:Upstream state: Verified (checked on 2017-12-08) | +|:JIRA bug: :psbug:`742` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.6.16-64.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`47134` - Crash on startup when XA support functions activated by a second engine | -|:Launchpad bug: :bug:`1255549` | +|:JIRA bug: :psbug:`742` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.16-64.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`71270` - Failures to end bulk insert for partitioned tables handled incorrectly | -|:Launchpad bug: :bug:`1204871` | -|:Upstream state: Verified (checked on 2017-12-08) | +|:JIRA bug: :psbug:`700` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.6.16-64.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`71217` - Threadpool - add thd_wait_begin/thd_wait_end to the network IO functions | -|:Launchpad bug: :bug:`1159743` | -|:Upstream state: Open (checked on 2017-12-08) | +|:JIRA bug: :psbug:`1343` | +|:Upstream state: Open (checked on 2018-05-24) | |:Fix Released: :rn:`5.6.15-63.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`41975` - Support for SSL options not included in mysqlbinlog | -|:Launchpad bug: :bug:`1258154` | +|:JIRA bug: :psbug:`1393` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.15-63.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`71092` - InnoDB FTS introduced new mutex sync level in 5.6.15, broke UNIV_SYNC ... | -|:Launchpad bug: :bug:`1258154` | +|:JIRA bug: :psbug:`1393` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.15-63.0` | |:Upstream fix: 5.6.12 | @@ -570,145 +570,145 @@ |:Upstream fix: 5.6.25 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`71411` - buf_flush_LRU() does not return correct number in case of compressed pages| -|:Launchpad bug: :bug:`1231918` | -|:Upstream state: Verified (checked on 2017-12-08) | +|:JIRA bug: :psbug:`2430` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.6.13-61.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`70417` - rw_lock_x_lock_func_nowait() calls os_thread_get_curr_id() mostly ... | -|:Launchpad bug: :bug:`1230220` | +|:JIRA bug: :psbug:`2429` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.13-61.0` | |:Upstream fix: 5.6.16 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`70490` - Suppression is too strict on some systems | -|:Launchpad bug: :bug:`1205196` | +|:JIRA bug: :psbug:`2038` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.13-61.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`64556` - Interrupting a query inside InnoDB causes an unrelated warning to be ... | -|:Launchpad bug: :bug:`1115158` | +|:JIRA bug: :psbug:`1967` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.13-61.0` | |:Upstream fix: 5.6.14 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`70500` - Page cleaner should perform LRU flushing regardless of server activity | -|:Launchpad bug: :bug:`1234562` | -|:Upstream state: Verified (checked on 2017-12-08) | +|:JIRA bug: :psbug:`1428` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.6.13-61.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`60682` - deadlock from thd_security_context | -|:Launchpad bug: :bug:`1115048` | +|:JIRA bug: :psbug:`1310` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.13-61.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`70489` - Crash when using AES_ENCRYPT on empty string | -|:Launchpad bug: :bug:`1201033` | +|:JIRA bug: :psbug:`689` | |:Upstream state: Unsupported | |:Fix Released: :rn:`5.6.13-61.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`68481` - InnoDB LRU flushing for MySQL 5.6 needs work | -|:Launchpad bug: :bug:`1232406` | -|:Upstream state: Verified (checked on 2017-12-08) | +|:JIRA bug: :psbug:`2432` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.6.13-61.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`70453` - Add hard timeouts to page cleaner flushes | -|:Launchpad bug: :bug:`1232101` | -|:Upstream state: Verified (checked on 2017-12-08) | +|:JIRA bug: :psbug:`2431` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.6.13-61.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`69170` - buf_flush_LRU is lazy | -|:Launchpad bug: :bug:`1231918` | -|:Upstream state: Verified (checked on 2017-12-08) | +|:JIRA bug: :psbug:`2430` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.6.13-61.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`68555` - thread convoys from log_checkpoint_margin with innodb_buffer_pool_inst... | -|:Launchpad bug: :bug:`1236884` | -|:Upstream state: Verified (checked on 2017-12-08) | +|:JIRA bug: :psbug:`2434` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.6.13-61.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`75534` - Solve buffer pool mutex contention by splitting it | -|:Launchpad bug: :ref:`innodb_split_buf_pool_mutex` | +|:JIRA bug: :ref:`innodb_split_buf_pool_mutex` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.13-60.6` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`70228` - Is buf_LRU_free_page() really supposed to make non-zip block sticky at ...| -|:Launchpad bug: :bug:`1220544` | +|:JIRA bug: :psbug:`1415` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.13-60.6` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`69617` - 5.6.12 removed UNIV_SYNC_DEBUG from UNIV_DEBUG | -|:Launchpad bug: :bug:`1216815` | +|:JIRA bug: :psbug:`1411` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.13-60.6` | |:Upstream fix: 5.6.16 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`69258` - does buf_LRU_buf_pool_running_out need to lock buffer pool mutexes | -|:Launchpad bug: :bug:`1219842` | +|:JIRA bug: :psbug:`1414` | |:Upstream state: Not a Bug | |:Fix Released: :rn:`5.6.13-60.6` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`70216` - Unnecessary overhead from persistent adaptive hash index latches | -|:Launchpad bug: :bug:`1218347` | +|:JIRA bug: :psbug:`715` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.13-60.6` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`62018` - innodb adaptive hash index mutex contention | -|:Launchpad bug: :bug:`1216804` | -|:Upstream state: Verified (checked on 2017-12-08) | +|:JIRA bug: :psbug:`1410` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.6.13-60.6` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`54814` - make BUF_READ_AHEAD_AREA a constant | -|:Launchpad bug: :bug:`1186974` | +|:JIRA bug: :psbug:`668` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.13-60.5` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`69179` - accessing information_schema.partitions causes plans to change | -|:Launchpad bug: :bug:`1192354` | +|:JIRA bug: :psbug:`680` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.13-60.5` | |:Upstream fix: 5.6.14 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`42415` - UPDATE/DELETE with LIMIT clause unsafe for SBL even with ORDER BY PK ... | -|:Launchpad bug: :bug:`1132194` | -|:Upstream state: Verified (checked on 2017-12-08) | +|:JIRA bug: :psbug:`44` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.6.13-60.5` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`69639` - mysql failed to build with dtrace Sun D 1.11 | -|:Launchpad bug: :bug:`1196460` | -|:Upstream state: Open (checked on 2017-12-08) | +|:JIRA bug: :psbug:`1392` | +|:Upstream state: Unsupported | |:Fix Released: :rn:`5.6.13-60.5` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`69524` - Some tests for table cache variables fail if open files limit is too low | -|:Launchpad bug: :bug:`1182572` | +|:JIRA bug: :psbug:`96` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.12-60.4` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`68354` - Server crashes on update/join FEDERATED + local table when only 1 local...| -|:Launchpad bug: :bug:`1182572` | +|:JIRA bug: :psbug:`96` | |:Upstream state: N/A | |:Fix Released: :rn:`5.6.12-60.4` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`69856` - mysql_install_db does not function properly in 5.6 for debug builds | -|:Launchpad bug: :bug:`1179359` | +|:JIRA bug: :psbug:`359` | |:Upstream state: Won't Fix | |:Fix Released: :rn:`5.6.12-60.4` | |:Upstream fix: N/A | @@ -720,7 +720,7 @@ |:Upstream fix: 5.6.23 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`79117` - "change_user" command should be aware of preceding "error" command | -|:Launchpad bug: :bug:`1172090` | +|:JIRA bug: :psbug:`659` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.11-60.3` | |:Upstream fix: N/A | @@ -732,278 +732,278 @@ |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`71603` - file name is not escaped in binlog for LOAD DATA INFILE statement | -|:Launchpad bug: :bug:`1277351` | +|:JIRA bug: :psbug:`3092` | |:Upstream state: N/A | |:Fix Released: :rn:`5.6.11-60.3` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`71183` - os_file_fsync() should handle fsync() returning EINTR | -|:Launchpad bug: :bug:`1262651` | -|:Upstream state: Verified (checked on 2017-12-08) | +|:JIRA bug: :psbug:`1461` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.6.11-60.3` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`63451` - atomic/x86-gcc.h:make_atomic_cas_body64 potential miscompilation bug | -|:Launchpad bug: :bug:`878022` | +|:JIRA bug: :psbug:`508` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.11-60.3` | |:Upstream fix: 5.6.16 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`70277` - last argument of LOAD DATA ... SET ... statement repeated twice in binlog | -|:Launchpad bug: :bug:`1223196` | +|:JIRA bug: :psbug:`3020` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.11-60.3` | |:Upstream fix: 5.6.15 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`69252` - All the parts.partition_max* tests are broken with MTR --parallel | -|:Launchpad bug: :bug:`1180481` | +|:JIRA bug: :psbug:`1364` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.11-60.3` | |:Upstream fix: 5.6.15 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`69265` - -DBUILD_CONFIG=mysql_release -DWITH_DEBUG=ON fails 4 and skips 27 MTR ... | -|:Launchpad bug: :bug:`1163135` | +|:JIRA bug: :psbug:`1345` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.11-60.3` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`68714` - Remove literal statement digest values from perfschema tests | -|:Launchpad bug: :bug:`1157078` | +|:JIRA bug: :psbug:`1340` | |:Upstream state: Not a Bug | |:Fix Released: :rn:`5.6.11-60.3` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`68635` - Doc: Multiple issues with performance_schema_max_statement_classes | -|:Launchpad bug: :bug:`1157075` | +|:JIRA bug: :psbug:`1339` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.11-60.3` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`68800` - client doesn't read plugin-dir from my.cnf set by MYSQL_READ_DEFAULT_FILE | -|:Launchpad bug: :bug:`1155859` | +|:JIRA bug: :psbug:`82` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.11-60.3` | |:Upstream fix: 5.6.12 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`69124` - Incorrect truncation of long SET expression in LOAD DATA can cause SQL ...| -|:Launchpad bug: :bug:`1175519` | +|:JIRA bug: :psbug:`663` | |:Upstream state: N/A | |:Fix Released: :rn:`5.6.11-60.3` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`68970` - fsp_reserve_free_extents switches from small to big tblspace handling ... | -|:Launchpad bug: :bug:`1169494` | +|:JIRA bug: :psbug:`656` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.11-60.3` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`68713` - create_duplicate_weedout_tmp_table() leaves key_part_flag uninitialized | -|:Launchpad bug: :bug:`1157037` | +|:JIRA bug: :psbug:`644` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.11-60.3` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`68490` - slave_max_allowed_packet Not Honored on Slave IO Connect | -|:Launchpad bug: :bug:`1135097` | +|:JIRA bug: :psbug:`49` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.11-60.3` | |:Upstream fix: 5.6.12 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`68999` - SSL_OP_NO_COMPRESSION not defined | -|:Launchpad bug: :bug:`1183610` | +|:JIRA bug: :psbug:`362` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.11-60.3` | |:Upstream fix: 5.6.25 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`68845` - Unnecessary log_sys->mutex reacquisition in mtr_log_reserve_and_write() | -|:Launchpad bug: :bug:`1163439` | -|:Upstream state: Verified (checked on 2017-12-08) | +|:JIRA bug: :psbug:`1347` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.6.11-60.3` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`62578` - mysql client aborts connection on terminal resize | -|:Launchpad bug: :bug:`925343` | +|:JIRA bug: :psbug:`84` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.11-60.3` | |:Upstream fix: 5.6.12 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`49169` - read_view_open_now is inefficient with many concurrent sessions | -|:Launchpad bug: :bug:`1131187` and :bug:`1131189` | +|:JIRA bug: :psbug:`636` and :psbug:`637` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.11-60.3` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`63144` - CREATE TABLE IF NOT EXISTS metadata lock is too restrictive | -|:Launchpad bug: :bug:`1127008` | +|:JIRA bug: :psbug:`40` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.11-60.3` | |:Upstream fix: 5.6.13 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`68477` - Suboptimal code in skip_trailing_space() | -|:Launchpad bug: :bug:`1132351` | +|:JIRA bug: :psbug:`1321` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.11-60.3` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`68476` - Suboptimal code in my_strnxfrm_simple() | -|:Launchpad bug: :bug:`1132350` | +|:JIRA bug: :psbug:`1320` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.11-60.3` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`67504` - Duplicate error in replication with slave triggers and auto increment | -|:Launchpad bug: :bug:`1068210` | +|:JIRA bug: :psbug:`34` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.11-60.3` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`67974` - Server crashes in add_identifier on concurrent ALTER TABLE and SHOW ENGINE| -|:Launchpad bug: :bug:`1017192` | +|:JIRA bug: :psbug:`344` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.11-60.3` | |:Upstream fix: 5.6.12 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`68045` - security vulnerability CVE-2012-4414 | -|:Launchpad bug: :bug:`1049871` | +|:JIRA bug: :psbug:`348` | |:Upstream state: N/A | |:Fix Released: :rn:`5.6.11-60.3` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`66550` - security vulnerability CVE-2012-4414 | -|:Launchpad bug: :bug:`1049871` | +|:JIRA bug: :psbug:`348` | |:Upstream state: N/A | |:Fix Released: :rn:`5.6.11-60.3` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`67685` - security vulnerability CVE-2012-5611 | -|:Launchpad bug: :bug:`1083377` | +|:JIRA bug: :psbug:`350` | |:Upstream state: N/A | |:Fix Released: :rn:`5.6.11-60.3` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`66237` - Temporary files created by binary log cache are not purged after transa...| -|:Launchpad bug: :bug:`1070856` | +|:JIRA bug: :psbug:`599` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.11-60.3` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`54430` - innodb should retry partial reads/writes where errno was 0 | -|:Launchpad bug: :bug:`1079596` | +|:JIRA bug: :psbug:`1948` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.11-60.3` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`62856` - Check for "stack overrun" doesn't work with gcc-4.6, server crashes | -|:Launchpad bug: :bug:`1042517` | +|:JIRA bug: :psbug:`2795` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.11-60.3` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`61180` - korr/store macros in my_global.h assume the argument to be a char pointer | -|:Launchpad bug: :bug:`1042517` | +|:JIRA bug: :psbug:`2795` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.11-60.3` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`61178` - Incorrect implementation of intersect(ulonglong) in non-optimized Bitmap..| -|:Launchpad bug: :bug:`1042517` | -|:Upstream state: Verified (checked on 2017-12-08) | +|:JIRA bug: :psbug:`2795` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.6.11-60.3` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`54127` - mysqld segfaults when built using --with-max-indexes=128 | -|:Launchpad bug: :bug:`1042517` | +|:JIRA bug: :psbug:`2795` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.11-60.3` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`64800` - mysqldump with --include-master-host-port putting quotes around port no. | -|:Launchpad bug: :bug:`1013432` | -|:Upstream state: Verified (checked on 2017-12-08) | +|:JIRA bug: :psbug:`1923` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.6.11-60.3` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`66301` - INSERT ... ON DUPLICATE KEY UPDATE + innodb_autoinc_lock_mode=1 is broken | -|:Launchpad bug: :bug:`1035225` | +|:JIRA bug: :psbug:`576` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.11-60.3` | |:Upstream fix: 5.6.12 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`60743` - typo in cmake/dtrace.cmake | -|:Launchpad bug: :bug:`1013455` | +|:JIRA bug: :psbug:`1924` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.11-60.3` | |:Upstream fix: 5.6.13 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`64663` - Segfault when adding indexes to InnoDB temporary tables | -|:Launchpad bug: :bug:`999147` | +|:JIRA bug: :psbug:`557` | |:Upstream state: N/A | |:Fix Released: :rn:`5.6.11-60.3` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`64432` - Bug :mysqlbug:`54330` (Broken fast index creation) was never fixed in 5.5 | -|:Launchpad bug: :bug:`939485` | +|:JIRA bug: :psbug:`544` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.11-60.3` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`25007` - memory tables with dynamic rows format | -|:Launchpad bug: :bug:`1148822` | -|:Upstream state: Verified (checked on 2017-12-08) | +|:JIRA bug: :psbug:`2407` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.6.11-60.3` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`61595` - mysql-test/include/wait_for_slave_param.inc timeout logic is incorrect | -|:Launchpad bug: :bug:`800035` | -|:Upstream state: Verified (checked on 2017-12-08) | +|:JIRA bug: :psbug:`485` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.6.11-60.3` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`54160` - InnoDB should retry on failed read or write, not immediately panic | -|:Launchpad bug: :bug:`764395` | +|:JIRA bug: :psbug:`2628` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.11-60.3` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`39833` - CREATE INDEX does full table copy on TEMPORARY table | -|:Launchpad bug: N/A | -|:Upstream state: Verified (checked on 2017-12-08) | +|:JIRA bug: N/A | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.6.10-60.2` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`68116` - InnoDB monitor may hit an assertion error in buf_page_get_gen in debug ...| -|:Launchpad bug: :bug:`1100178` | +|:JIRA bug: :psbug:`616` | |:Upstream state: Closed | |:Fix Released: :rn:`5.6.10-60.2` | |:Upstream fix: 5.6.22 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`65946` - Sid_map::Sid_map calls DBUG which may have unitialized THR_KEY_mysys and..| -|:Launchpad bug: :bug:`1050758` | +|:JIRA bug: :psbug:`585` | |:Upstream state: Duplicate/Closed | |:Fix Released: :rn:`5.6.5-60.0` | |:Upstream fix: 5.6.15 | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`20001` - Support for temp-tables in INFORMATION_SCHEMA | -|:Launchpad bug: :ref:`temp_tables` | -|:Upstream state: Verified (checked on 2017-12-08) | +|:JIRA bug: :ref:`temp_tables` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.6.5-60.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`49120` - mysqldump should have flag to delay creating indexes for innodb plugin | -|:Launchpad bug: :bug:`744103` | -|:Upstream state: Verified (checked on 2017-12-08) | +|:JIRA bug: :psbug:`2619` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.6.5-60.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`57583` - fast index create not used during "alter table foo engine=innodb" | -|:Launchpad bug: :bug:`744103` | -|:Upstream state: Verified (checked on 2017-12-08) | +|:JIRA bug: :psbug:`2619` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.6.5-60.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`69146` - Optimization in buf_pool_get_oldest_modification if srv_buf_pool_instances| -|:Launchpad bug: :bug:`1176496` | -|:Upstream state: Verified (checked on 2017-12-08) | +|:JIRA bug: :psbug:`2418` | +|:Upstream state: Verified (checked on 2018-05-24) | |:Fix Released: :rn:`5.6.5-60.0` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ From 2e84ef38412a9f8b7248a2d01db05c8c294c4886 Mon Sep 17 00:00:00 2001 From: Dmitriy Kostiuk Date: Sat, 26 May 2018 01:08:43 +0300 Subject: [PATCH 0880/1221] Fix for DOC-598, adding page with binlogging and replication improvements starting from 5.5 (#2309) --- .../binlogging_replication_improvements.rst | 78 +++++++++++++++++++ doc/source/index.rst | 1 + 2 files changed, 79 insertions(+) create mode 100644 doc/source/flexibility/binlogging_replication_improvements.rst diff --git a/doc/source/flexibility/binlogging_replication_improvements.rst b/doc/source/flexibility/binlogging_replication_improvements.rst new file mode 100644 index 000000000000..589306cc5954 --- /dev/null +++ b/doc/source/flexibility/binlogging_replication_improvements.rst @@ -0,0 +1,78 @@ +.. _binlogging_replication_improvements: + +======================================= +Binlogging and replication improvements +======================================= + +Due to continuous development, |Percona Server| incorporated a number of +improvements related to replication and binary logs handling. This resulted in +replication specifics, which distinguishes it from |MySQL|. + +Temporary tables and mixed logging format +========================================= + +Summary of the fix: +******************* + +As soon as some statement involving temporary table was met when using mixed +binlog format, |MySQL| was switching to row-based logging of all statements the +end of the session or until all temporary tables used in this session are +dropped. It is inconvenient in case of long lasting connections, including +replication-related ones. |Percona Server| fixes the situation by switching +between statement-based and row-based logging as and when necessary. + +Version Specific Information +**************************** + + * :rn:`5.5.41-37.0` + Fix backported from |Percona Server| 5.6.21-70.1 + +Details: +******** + +Mixed binary logging format supported by |Percona Server| means that +server runs in statement-based logging by default, but switches to row-based +logging when replication would be unpredictable - in the case of a +nondeterministic SQL statement that may cause data divergence if reproduced on +a slave server. The switch is done upon any condition from the long list, and +one of these conditions is the use of temporary tables. + +Temporary tables are **never** logged using row-based format, but any +statement, that touches a temporary table, is logged in row mode. This way all +the side effects that temporary tables may produce on non-temporary ones are +intercepted. + +There is no need to use row logging format for any other statements solely +because of the temp table presence. However |MySQL| was undertaking such an +excessive precaution: once some statement with temporary table had appeared and +the row-based logging was used, |MySQL| logged unconditionally all +subsequent statements in row format. + +Percona Server have implemented more accurate behavior: instead of switching to +row-based logging until the last temporary table is closed, the usual rules of +row vs statement format apply, and presence of currently opened temporary +tables is no longer considered. This change was introduced with the fix of a +bug :psbug:`151` (upstream :mysqlbug:`72475`). + +Safety of statements with a ``LIMIT`` clause +============================================ + +Summary of the fix: +******************* + +|MySQL| considers all ``UPDATE/DELETE/INSERT ... SELECT`` statements with +``LIMIT`` clause to be unsafe, no matter wether they are really producing +non-deterministic result or not, and switches from statement-based logging +to row-based one. |Percona Server| is more accurate, it acknowledges such +instructions as safe when they include ``ORDER BY PK`` or ``WHERE`` +condition. This fix has been ported from the upstream bug report +:mysqlbug:`42415` (:psbug:`44`). + +Version Specific Information +**************************** + + * :rn:`5.5.41-37.0` + Fix implemented in |Percona Server| 5.5 + + + diff --git a/doc/source/index.rst b/doc/source/index.rst index ced0edbe8d79..137364dacef8 100644 --- a/doc/source/index.rst +++ b/doc/source/index.rst @@ -102,6 +102,7 @@ Flexibility Improvements flexibility/slowlog_rotation flexibility/csv_engine_mode flexibility/extended_tls_support + flexibility/binlogging_replication_improvements Reliability Improvements ======================== From 3f622f843ddbabfc4bf98883eca33268e2052a4d Mon Sep 17 00:00:00 2001 From: Dmitriy Kostiuk Date: Sat, 26 May 2018 01:20:58 +0300 Subject: [PATCH 0881/1221] Fix for DOC-598, adding page with binlogging and replication improvements starting from 5.5 (#2314) --- .../binlogging_replication_improvements.rst | 117 ++++++++++++++++++ doc/source/index.rst | 1 + 2 files changed, 118 insertions(+) create mode 100644 doc/source/flexibility/binlogging_replication_improvements.rst diff --git a/doc/source/flexibility/binlogging_replication_improvements.rst b/doc/source/flexibility/binlogging_replication_improvements.rst new file mode 100644 index 000000000000..514681129d33 --- /dev/null +++ b/doc/source/flexibility/binlogging_replication_improvements.rst @@ -0,0 +1,117 @@ +.. _binlogging_replication_improvements: + +======================================= +Binlogging and replication improvements +======================================= + +Due to continuous development, |Percona Server| incorporated a number of +improvements related to replication and binary logs handling. This resulted in +replication specifics, which distinguishes it from |MySQL|. + +Temporary tables and mixed logging format +========================================= + +Summary of the fix: +******************* + +As soon as some statement involving temporary table was met when using mixed +binlog format, |MySQL| was switching to row-based logging of all statements the +end of the session or until all temporary tables used in this session are +dropped. It is inconvenient in case of long lasting connections, including +replication-related ones. |Percona Server| fixes the situation by switching +between statement-based and row-based logging as and when necessary. + +Version Specific Information +**************************** + + * :rn:`5.6.21-70.1` + Fix implemented in |Percona Server| 5.6 + +Details: +******** + +Mixed binary logging format supported by |Percona Server| means that +server runs in statement-based logging by default, but switches to row-based +logging when replication would be unpredictable - in the case of a +nondeterministic SQL statement that may cause data divergence if reproduced on +a slave server. The switch is done upon any condition from the long list, and +one of these conditions is the use of temporary tables. + +Temporary tables are **never** logged using row-based format, but any +statement, that touches a temporary table, is logged in row mode. This way all +the side effects that temporary tables may produce on non-temporary ones are +intercepted. + +There is no need to use row logging format for any other statements solely +because of the temp table presence. However |MySQL| was undertaking such an +excessive precaution: once some statement with temporary table had appeared and +the row-based logging was used, |MySQL| logged unconditionally all +subsequent statements in row format. + +Percona Server have implemented more accurate behavior: instead of switching to +row-based logging until the last temporary table is closed, the usual rules of +row vs statement format apply, and presence of currently opened temporary +tables is no longer considered. This change was introduced with the fix of a +bug :psbug:`151` (upstream :mysqlbug:`72475`). + +Temporary table drops and binloging on GTID-enabled server +========================================================== + +Summary of the fix: +******************* + +MySQL logs DROP statements for all temporary tables irrelative of the logging +mode under which these tables were created. This produces binlog writes and +errand GTIDs on slaves with row and mixed logging. |Percona Server| fixes this +by tracking the binlog format at temporary table create time and using it to +decide whether a DROP should be logged or not. + +Version Specific Information +**************************** + + * :rn:`5.6.38-83.0` + Fix implemented in |Percona Server| 5.6 + +Details: +******** + +Even with read_only mode enabled, the server permits some operations, including +ones with temporary tables. With the previous fix, temporary table operations +are not binlogged in row or mixed mode. But |MySQL| doesn’t track what was +the logging mode when temporary table was created, and therefore +unconditionally logs ``DROP`` statements for all temporary tables. These +``DROP`` statements receive ``IF EXISTS`` addition, which is intended to make +them harmless. + +|Percona Server| have fixed this with the bug fixes :psbug:`964`, upstream +:mysqlbug:`83003`, and upstream :mysqlbug:`85258`. Moreover, after all the +binlogging fixes discussed so far nothing involving temporary tables is logged +to binary log in row or mixed format, and so there is no need to consider +``CREATE/DROP TEMPORARY TABLE`` unsafe for use in stored functions, triggers, +and multi-statement transactions in row/mixed format. Therefore an additional +fix was introduced to mark creation and drop of temporary tables as unsafe +inside transactions in statement-based replication only (bug fixed +:psbug:`1816`, upstream :mysqlbug:`89467`)). + +Safety of statements with a ``LIMIT`` clause +============================================ + +Summary of the fix: +******************* + +|MySQL| considers all ``UPDATE/DELETE/INSERT ... SELECT`` statements with +``LIMIT`` clause to be unsafe, no matter wether they are really producing +non-deterministic result or not, and switches from statement-based logging +to row-based one. |Percona Server| is more accurate, it acknowledges such +instructions as safe when they include ``ORDER BY PK`` or ``WHERE`` +condition. This fix has been ported from the upstream bug report +:mysqlbug:`42415` (:psbug:`44`). + +Version Specific Information +**************************** + + * :rn:`5.6.13-60.5` + Fix ported from |Percona Server| 5.5 + + + diff --git a/doc/source/index.rst b/doc/source/index.rst index 3c8b40a08cdc..d54759e125ec 100644 --- a/doc/source/index.rst +++ b/doc/source/index.rst @@ -101,6 +101,7 @@ Flexibility Improvements flexibility/per_session_server-id flexibility/extended_tls_support flexibility/compressed_columns + flexibility/binlogging_replication_improvements Reliability Improvements ======================== From 35b20a921beb3bfb2153ba15e4463cbf980785f2 Mon Sep 17 00:00:00 2001 From: Dmitriy Kostiuk Date: Sat, 26 May 2018 01:51:58 +0300 Subject: [PATCH 0882/1221] Fix for DOC-598, adding page with binlogging and replication improvements starting from 5.5 (#2315) --- .../binlogging_replication_improvements.rst | 175 ++++++++++++++++++ doc/source/index.rst | 1 + 2 files changed, 176 insertions(+) create mode 100644 doc/source/flexibility/binlogging_replication_improvements.rst diff --git a/doc/source/flexibility/binlogging_replication_improvements.rst b/doc/source/flexibility/binlogging_replication_improvements.rst new file mode 100644 index 000000000000..bc1abd3685e7 --- /dev/null +++ b/doc/source/flexibility/binlogging_replication_improvements.rst @@ -0,0 +1,175 @@ +.. _binlogging_replication_improvements: + +======================================= +Binlogging and replication improvements +======================================= + +Due to continuous development, |Percona Server| incorporated a number of +improvements related to replication and binary logs handling. This resulted in +replication specifics, which distinguishes it from |MySQL|. + +Temporary tables and mixed logging format +========================================= + +Summary of the fix: +******************* + +As soon as some statement involving temporary table was met when using mixed +binlog format, |MySQL| was switching to row-based logging of all statements the +end of the session or until all temporary tables used in this session are +dropped. It is inconvenient in case of long lasting connections, including +replication-related ones. |Percona Server| fixes the situation by switching +between statement-based and row-based logging as and when necessary. + +Version Specific Information +**************************** + + * :rn:`5.7.10-1` + Fix ported from |Percona Server| 5.6 + +Details: +******** + +Mixed binary logging format supported by |Percona Server| means that +server runs in statement-based logging by default, but switches to row-based +logging when replication would be unpredictable - in the case of a +nondeterministic SQL statement that may cause data divergence if reproduced on +a slave server. The switch is done upon any condition from the long list, and +one of these conditions is the use of temporary tables. + +Temporary tables are **never** logged using row-based format, but any +statement, that touches a temporary table, is logged in row mode. This way all +the side effects that temporary tables may produce on non-temporary ones are +intercepted. + +There is no need to use row logging format for any other statements solely +because of the temp table presence. However |MySQL| was undertaking such an +excessive precaution: once some statement with temporary table had appeared and +the row-based logging was used, |MySQL| logged unconditionally all +subsequent statements in row format. + +Percona Server have implemented more accurate behavior: instead of switching to +row-based logging until the last temporary table is closed, the usual rules of +row vs statement format apply, and presence of currently opened temporary +tables is no longer considered. This change was introduced with the fix of a +bug :psbug:`151` (upstream :mysqlbug:`72475`). + +Temporary table drops and binloging on GTID-enabled server +========================================================== + +Summary of the fix: +******************* + +MySQL logs DROP statements for all temporary tables irrelative of the logging +mode under which these tables were created. This produces binlog writes and +errand GTIDs on slaves with row and mixed logging. |Percona Server| fixes this +by tracking the binlog format at temporary table create time and using it to +decide whether a DROP should be logged or not. + +Version Specific Information +**************************** + + * :rn:`5.7.17-11` + Fix ported from |Percona Server| 5.6 + +Details: +******** + +Even with read_only mode enabled, the server permits some operations, including +ones with temporary tables. With the previous fix, temporary table operations +are not binlogged in row or mixed mode. But |MySQL| doesn’t track what was +the logging mode when temporary table was created, and therefore +unconditionally logs ``DROP`` statements for all temporary tables. These +``DROP`` statements receive ``IF EXISTS`` addition, which is intended to make +them harmless. + +|Percona Server| have fixed this with the bug fixes :psbug:`964`, upstream +:mysqlbug:`83003`, and upstream :mysqlbug:`85258`. Moreover, after all the +binlogging fixes discussed so far nothing involving temporary tables is logged +to binary log in row or mixed format, and so there is no need to consider +``CREATE/DROP TEMPORARY TABLE`` unsafe for use in stored functions, triggers, +and multi-statement transactions in row/mixed format. Therefore an additional +fix was introduced to mark creation and drop of temporary tables as unsafe +inside transactions in statement-based replication only (bug fixed +:psbug:`1816`, upstream :mysqlbug:`89467`)). + +Safety of statements with a ``LIMIT`` clause +============================================ + +Summary of the fix: +******************* + +|MySQL| considers all ``UPDATE/DELETE/INSERT ... SELECT`` statements with +``LIMIT`` clause to be unsafe, no matter wether they are really producing +non-deterministic result or not, and switches from statement-based logging +to row-based one. |Percona Server| is more accurate, it acknowledges such +instructions as safe when they include ``ORDER BY PK`` or ``WHERE`` +condition. This fix has been ported from the upstream bug report +:mysqlbug:`42415` (:psbug:`44`). + +Version Specific Information +**************************** + + * :rn:`5.7.10.1` + Fix ported from |Percona Server| 5.6 + +Performance improvement on relay log position update +==================================================== + +Summary of the fix: +******************* + +|MySQL| always updated relay log position in multi-source replications setups +regardless of whether the committed transaction has already been executed or +not. Percona Server omitts relay log position updates for the already logged +GTIDs. + +Version Specific Information +**************************** + + * :rn:`5.7.18-14` + Fix implemented in |Percona Server| 5.7 + +Details +******* + +Particularly, such unconditional relay log position updates caused additional +fsync operations in case of ``relay-log-info-repository=TABLE``, and with the +higher number of channels transmitting such duplicate (already executed) +transactions the situation became proportionally worse. Bug fixed :psbug:`1786` +(upstream :mysqlbug:`85141`). + +Performance improvement on master and connection status updates +=============================================================== + +Summary of the fix: +******************* + +Slave nodes configured to update master status and connection information +only on log file rotation did not experience the expected reduction in load. +|MySQL| was additionaly updating this information in case of multi-source +replication when slave had to skip the already executed GTID event. + +Version Specific Information +**************************** + + * :rn:`5.7.20-19` + Fix implemented in |Percona Server| 5.7 + +Details +******* + +The configuration with ``master_info_repository=TABLE`` and +``sync_master_info=0`` makes slave to update master status and connection +information in this table on log file rotation and not after each +sync_master_info event, but it didn't work on multi-source replication setups. +Heartbeats sent to the slave to skip GTID events which it had already executed +previously, were evaluated as relay log rotation events and reacted with +``mysql.slave_master_info`` table sync. This inaccuracy could produce huge (up +to 5 times on some setups) increase in write load on the slave, before this +problem was fixed in |Percona Server|. Bug fixed :psbug:`1812` (upstream +:mysqlbug:`85158`). + + + + diff --git a/doc/source/index.rst b/doc/source/index.rst index 045eaa8324aa..c2f2c79aa147 100644 --- a/doc/source/index.rst +++ b/doc/source/index.rst @@ -93,6 +93,7 @@ Flexibility Improvements flexibility/per_session_server-id flexibility/compressed_columns flexibility/innodb_fts_improvements + flexibility/binlogging_replication_improvements Reliability Improvements ======================== From 95b3813c1ae973c674e256ac59cb4488dd22d0c1 Mon Sep 17 00:00:00 2001 From: Balasubramanian Kandasamy Date: Mon, 28 May 2018 12:49:09 +0530 Subject: [PATCH 0883/1221] Raise version number after cloning 5.5.61 --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 23e938e60e15..4acb69e9e071 100644 --- a/VERSION +++ b/VERSION @@ -1,4 +1,4 @@ MYSQL_VERSION_MAJOR=5 MYSQL_VERSION_MINOR=5 -MYSQL_VERSION_PATCH=61 +MYSQL_VERSION_PATCH=62 MYSQL_VERSION_EXTRA= From 0f796807d1c9290a9518ad1cf714e5fcd00f861f Mon Sep 17 00:00:00 2001 From: Sachin Agarwal Date: Mon, 28 May 2018 13:42:32 +0530 Subject: [PATCH 0884/1221] Bug #27325898 - INNODB: ASSERTION FAILURE IN THREAD 139686919030528 IN FILE TRX0TRX.IC LINE 213 Problem: In ha_innobase::end_stmt function, read & write operation on trx->lock.start_stmt is not protected by any mutex. Therefore if one thread is about to change trx->lock.start_stmt, other thread can see the inconsistent state of trx->lock.start_stmt. Fix: Added trx->mutex protection to make read & write on trx->lock.start_stmt a atomic operation. RB: #19697 Reviewed by : Jimmy.Yang@oracle.com --- storage/innobase/handler/ha_innodb.cc | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index 8ce8c184ef31..0a735c13d989 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -15343,11 +15343,15 @@ ha_innobase::end_stmt() /* This transaction had called ha_innobase::start_stmt() */ trx_t* trx = m_prebuilt->trx; - + trx_mutex_enter(trx); if (trx->lock.start_stmt) { - TrxInInnoDB::end_stmt(trx); - trx->lock.start_stmt = false; + trx_mutex_exit(trx); + + TrxInInnoDB::end_stmt(trx); + } + else { + trx_mutex_exit(trx); } return(0); @@ -15474,12 +15478,16 @@ ha_innobase::start_stmt( ++trx->will_lock; } + trx_mutex_enter(trx); /* Only do it once per transaction. */ if (!trx->lock.start_stmt && lock_type != TL_UNLOCK) { + trx->lock.start_stmt = true; + trx_mutex_exit(trx); TrxInInnoDB::begin_stmt(trx); - - trx->lock.start_stmt = true; + } + else { + trx_mutex_exit(trx); } DBUG_RETURN(0); From 78d7c9a06eac46cce2b2a61a6e51b7b7018c3d78 Mon Sep 17 00:00:00 2001 From: Evgeniy Patlan Date: Mon, 28 May 2018 10:20:00 +0300 Subject: [PATCH 0885/1221] Fix build --- build-ps/debian/percona-server-client-5.6.files | 1 - build-ps/debian/percona-server-server-5.6.files | 1 - build-ps/percona-server.spec | 6 ------ build-ps/rpm/mysql-5.6-sharedlib-rename.patch | 4 ++-- 4 files changed, 2 insertions(+), 10 deletions(-) diff --git a/build-ps/debian/percona-server-client-5.6.files b/build-ps/debian/percona-server-client-5.6.files index 7b125f5acd70..34e7c6c9cc80 100644 --- a/build-ps/debian/percona-server-client-5.6.files +++ b/build-ps/debian/percona-server-client-5.6.files @@ -27,6 +27,5 @@ usr/share/man/man1/mysql_fix_extensions.1 usr/share/man/man1/mysqlimport.1 usr/share/man/man1/mysqlshow.1 usr/share/man/man1/mysql_waitpid.1 -usr/share/man/man1/mysql_client_test.1 usr/share/man/man1/mysqlslap.1 usr/share/man/man1/mysql_config_editor.1 diff --git a/build-ps/debian/percona-server-server-5.6.files b/build-ps/debian/percona-server-server-5.6.files index db1f05c30d64..83343e89a79c 100644 --- a/build-ps/debian/percona-server-server-5.6.files +++ b/build-ps/debian/percona-server-server-5.6.files @@ -38,7 +38,6 @@ usr/share/man/man1/mysql_install_db.1 usr/share/man/man1/mysql_secure_installation.1 usr/share/man/man1/mysql_setpermission.1 usr/share/man/man1/mysql_upgrade.1 -usr/share/man/man1/mysqltest.1 usr/share/man/man1/mysql_zap.1 usr/share/man/man1/perror.1 usr/share/man/man1/replace.1 diff --git a/build-ps/percona-server.spec b/build-ps/percona-server.spec index cc9c550c9887..d76e6c3e6ee4 100644 --- a/build-ps/percona-server.spec +++ b/build-ps/percona-server.spec @@ -1209,7 +1209,6 @@ fi %doc %attr(644, root, man) %{_mandir}/man1/mysqlhotcopy.1* %doc %attr(644, root, man) %{_mandir}/man1/mysqlman.1* %doc %attr(644, root, man) %{_mandir}/man1/mysql.server.1* -%doc %attr(644, root, man) %{_mandir}/man1/mysqltest.1* %doc %attr(644, root, man) %{_mandir}/man1/mysql_tzinfo_to_sql.1* %doc %attr(644, root, man) %{_mandir}/man1/mysql_zap.1* %doc %attr(644, root, man) %{_mandir}/man1/mysqlbug.1* @@ -1514,11 +1513,6 @@ done %attr(755, root, root) %{_bindir}/mysql_client_test #%attr(755, root, root) %{_bindir}/mysql_client_test_embedded #%attr(755, root, root) %{_bindir}/mysqltest_embedded -%doc %attr(644, root, man) %{_mandir}/man1/mysql_client_test.1* -%doc %attr(644, root, man) %{_mandir}/man1/mysql-stress-test.pl.1* -%doc %attr(644, root, man) %{_mandir}/man1/mysql-test-run.pl.1* -%doc %attr(644, root, man) %{_mandir}/man1/mysql_client_test_embedded.1* -%doc %attr(644, root, man) %{_mandir}/man1/mysqltest_embedded.1* %changelog * Thu Sep 1 2016 Evgeniy Patlan diff --git a/build-ps/rpm/mysql-5.6-sharedlib-rename.patch b/build-ps/rpm/mysql-5.6-sharedlib-rename.patch index b6dd53adab31..c139962dfc42 100644 --- a/build-ps/rpm/mysql-5.6-sharedlib-rename.patch +++ b/build-ps/rpm/mysql-5.6-sharedlib-rename.patch @@ -1,7 +1,7 @@ diff -rup old/client/CMakeLists.txt new/client/CMakeLists.txt --- old/client/CMakeLists.txt 2016-03-03 08:29:59.000000000 +0100 +++ new/client/CMakeLists.txt 2016-03-03 14:07:22.625678083 +0100 -@@ -32,49 +32,49 @@ COPY_OPENSSL_DLLS(copy_openssl_client) +@@ -32,49 +32,49 @@ ADD_DEFINITIONS(${SSL_DEFINES}) MYSQL_ADD_EXECUTABLE(mysql completion_hash.cc mysql.cc readline.cc sql_string.cc) @@ -15,7 +15,7 @@ diff -rup old/client/CMakeLists.txt new/client/CMakeLists.txt SET_SOURCE_FILES_PROPERTIES(mysqltest.cc PROPERTIES COMPILE_FLAGS "-DTHREADS") -TARGET_LINK_LIBRARIES(mysqltest perconaserverclient regex) +TARGET_LINK_LIBRARIES(mysqltest mysqlclient regex) - + ADD_DEPENDENCIES(mysqltest GenError) MYSQL_ADD_EXECUTABLE(mysqlcheck mysqlcheck.c) -TARGET_LINK_LIBRARIES(mysqlcheck perconaserverclient) From 4812a01ab0312918365219bc0f660c4dc6ee245b Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Wed, 23 May 2018 15:59:14 +0200 Subject: [PATCH 0886/1221] PS-4488: `-Werror` is always disabled for `innodb_memcached` Add "-DWITH_INNODB_MEMCACHED=ON" to Travis config file. Changes for innodb_memcached: 1. Don 't remove "-Werror" compilation flag 2. Remove "-Wdeclaration-after-statement" and "-Wvla" flags if exist to reduce the number of warnings 3. Disable "-Wunused-parameter -Wsign-compare -Wmissing-field-initializers -Wunused-but-set-variable" flags --- .travis.yml | 1 + .../daemon_memcached/CMakeLists.txt | 16 +++++---- .../daemon_memcached/daemon/hash.c | 36 +++++++++---------- .../daemon_memcached/daemon/memcached.c | 13 ++++--- .../daemon_memcached/daemon/topkeys.c | 23 ------------ .../innodb_memcache/CMakeLists.txt | 19 ++++++---- .../cache-src/default_engine.c | 4 +-- .../innodb_memcache/include/hash_item_util.h | 1 + .../innodb_memcache/util-src/config_parser.c | 4 +-- 9 files changed, 51 insertions(+), 66 deletions(-) diff --git a/.travis.yml b/.travis.yml index 0787e5f13818..3e796e283ab8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -253,6 +253,7 @@ script: -DWITHOUT_PARTITION_STORAGE_ENGINE=ON -DWITHOUT_PERFSCHEMA_STORAGE_ENGINE=ON -DWITH_SCALABILITY_METRICS=ON + -DWITH_INNODB_MEMCACHED=ON "; fi; diff --git a/plugin/innodb_memcached/daemon_memcached/CMakeLists.txt b/plugin/innodb_memcached/daemon_memcached/CMakeLists.txt index 11a1276b955c..d8d1d04608fd 100644 --- a/plugin/innodb_memcached/daemon_memcached/CMakeLists.txt +++ b/plugin/innodb_memcached/daemon_memcached/CMakeLists.txt @@ -30,14 +30,16 @@ INCLUDE_DIRECTORIES(${LIBEVENT_INCLUDE_DIR} SET(CMAKE_CPP_FLAGS "${CMAKE_CPP_FLAGS} ${CMAKE_SHARED_LIBRARY_C_FLAGS} -I${CMAKE_SOURCE_DIR}/plugin/innodb_memcached/daemon_memcached/utilities") -# If current CMAKE_C_FLAGS is with Werror, turn it off to compile successfully -IF(CMAKE_C_FLAGS MATCHES "-Werror") - STRING(REGEX REPLACE "-Werror( |$)" "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") - # Turn -Wdeclaration-after-statement off to reduce the number of warnings - STRING(REGEX REPLACE "-Wdeclaration-after-statement" "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") -ENDIF(CMAKE_C_FLAGS MATCHES "-Werror") +# Remove "-Wdeclaration-after-statement" and "-Wvla" flags if exist to reduce the number of warnings +STRING(REGEX REPLACE "-Wdeclaration-after-statement" "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") +STRING(REGEX REPLACE "-Wvla" "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") -SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_SHARED_LIBRARY_C_FLAGS} -std=gnu99") +# Disable "-Wunused-parameter -Wsign-compare -Wmissing-field-initializers -Wunused-but-set-variable" flags +SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_SHARED_LIBRARY_C_FLAGS} -Wno-unused-parameter -Wno-sign-compare -Wno-missing-field-initializers -std=gnu99") +MY_CHECK_C_COMPILER_FLAG("-Wunused-but-set-variable" HAVE_UNUSET_BUT_SET_VARIABLE) # Requires GCC 4.5+ +IF(HAVE_UNUSET_BUT_SET_VARIABLE) + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-but-set-variable") +ENDIF() SET(LIBMEMCACHED_UTILITIES_SOURCES include/memcached/config_parser.h diff --git a/plugin/innodb_memcached/daemon_memcached/daemon/hash.c b/plugin/innodb_memcached/daemon_memcached/daemon/hash.c index 7f35088ea6c2..75599e0c4076 100644 --- a/plugin/innodb_memcached/daemon_memcached/daemon/hash.c +++ b/plugin/innodb_memcached/daemon_memcached/daemon/hash.c @@ -221,23 +221,23 @@ uint32_t hash( b+=k[2]+(((uint32_t)k[3])<<16); a+=k[0]+(((uint32_t)k[1])<<16); break; - case 11: c+=((uint32_t)k8[10])<<16; /* @fallthrough */ - case 10: c+=k[4]; /* @fallthrough@ */ + case 11: c+=((uint32_t)k8[10])<<16; /* fallthrough */ + case 10: c+=k[4]; /* fallthrough */ b+=k[2]+(((uint32_t)k[3])<<16); a+=k[0]+(((uint32_t)k[1])<<16); break; - case 9 : c+=k8[8]; /* @fallthrough */ + case 9 : c+=k8[8]; /* fallthrough */ case 8 : b+=k[2]+(((uint32_t)k[3])<<16); a+=k[0]+(((uint32_t)k[1])<<16); break; - case 7 : b+=((uint32_t)k8[6])<<16; /* @fallthrough */ + case 7 : b+=((uint32_t)k8[6])<<16; /* fallthrough */ case 6 : b+=k[2]; a+=k[0]+(((uint32_t)k[1])<<16); break; - case 5 : b+=k8[4]; /* @fallthrough */ + case 5 : b+=k8[4]; /* fallthrough */ case 4 : a+=k[0]+(((uint32_t)k[1])<<16); break; - case 3 : a+=((uint32_t)k8[2])<<16; /* @fallthrough */ + case 3 : a+=((uint32_t)k8[2])<<16; /* fallthrough */ case 2 : a+=k[0]; break; case 1 : a+=k8[0]; @@ -271,19 +271,19 @@ uint32_t hash( /*-------------------------------- last block: affect all 32 bits of (c) */ switch(length) /* all the case statements fall through */ { - case 12: c+=((uint32_t)k[11])<<24; - case 11: c+=((uint32_t)k[10])<<16; - case 10: c+=((uint32_t)k[9])<<8; - case 9 : c+=k[8]; - case 8 : b+=((uint32_t)k[7])<<24; - case 7 : b+=((uint32_t)k[6])<<16; - case 6 : b+=((uint32_t)k[5])<<8; - case 5 : b+=k[4]; - case 4 : a+=((uint32_t)k[3])<<24; - case 3 : a+=((uint32_t)k[2])<<16; - case 2 : a+=((uint32_t)k[1])<<8; + case 12: c+=((uint32_t)k[11])<<24; /* fallthrough */ + case 11: c+=((uint32_t)k[10])<<16; /* fallthrough */ + case 10: c+=((uint32_t)k[9])<<8; /* fallthrough */ + case 9 : c+=k[8]; /* fallthrough */ + case 8 : b+=((uint32_t)k[7])<<24; /* fallthrough */ + case 7 : b+=((uint32_t)k[6])<<16; /* fallthrough */ + case 6 : b+=((uint32_t)k[5])<<8; /* fallthrough */ + case 5 : b+=k[4]; /* fallthrough */ + case 4 : a+=((uint32_t)k[3])<<24; /* fallthrough */ + case 3 : a+=((uint32_t)k[2])<<16; /* fallthrough */ + case 2 : a+=((uint32_t)k[1])<<8; /* fallthrough */ case 1 : a+=k[0]; - break; + break; /* fallthrough */ case 0 : return c; /* zero length strings require no mixing */ } } diff --git a/plugin/innodb_memcached/daemon_memcached/daemon/memcached.c b/plugin/innodb_memcached/daemon_memcached/daemon/memcached.c index 4d2cf3833f23..d37529481a40 100644 --- a/plugin/innodb_memcached/daemon_memcached/daemon/memcached.c +++ b/plugin/innodb_memcached/daemon_memcached/daemon/memcached.c @@ -360,7 +360,7 @@ static int add_msghdr(conn *c) } static const char *prot_text(enum protocol prot) { - char *rv = "unknown"; + const char *rv = "unknown"; switch(prot) { case ascii_prot: rv = "ascii"; @@ -2258,7 +2258,7 @@ static void process_bin_complete_sasl_auth(conn *c) { switch(result) { case SASL_OK: - write_bin_response(c, "Authenticated", 0, 0, strlen("Authenticated")); + write_bin_response(c, (void*)"Authenticated", 0, 0, strlen("Authenticated")); auth_data_t data; get_auth_data(c, &data); perform_callbacks(ON_AUTH, (const void*)&data, c); @@ -2966,7 +2966,7 @@ static void dispatch_bin_command(conn *c) { switch (c->cmd) { case PROTOCOL_BINARY_CMD_VERSION: if (extlen == 0 && keylen == 0 && bodylen == 0) { - write_bin_response(c, VERSION, 0, 0, strlen(VERSION)); + write_bin_response(c, (void*)VERSION, 0, 0, strlen(VERSION)); } else { protocol_error = 1; } @@ -3583,10 +3583,10 @@ static size_t tokenize_command(char *command, token_t *tokens, const size_t max_ } static void detokenize(token_t *tokens, int ntokens, char **out, int *nbytes) { - int i, nb; + int i; char *buf, *p; + size_t nb = ntokens; // account for spaces, which is ntokens-1, plus the null - nb = ntokens; // account for spaces, which is ntokens-1, plus the null for (i = 0; i < ntokens; ++i) { nb += tokens[i].length; } @@ -4045,6 +4045,7 @@ static inline char* process_get_command(conn *c, token_t *tokens, size_t ntokens item *it; token_t *key_token = &tokens[KEY_TOKEN]; assert(c != NULL); + (void)ntokens; /* We temporarily block the mgets commands till wl6650 checked in. */ if ((key_token + 1)->length > 0) { @@ -4494,8 +4495,6 @@ static char *process_bind_command(conn *c, token_t *tokens, name, name_len); } - /* For some reason the SLAB_INCR tries to access this... */ - item_info info = { .nvalue = 1 }; switch (ret) { case ENGINE_SUCCESS: out_string(c, "SUCCEED"); diff --git a/plugin/innodb_memcached/daemon_memcached/daemon/topkeys.c b/plugin/innodb_memcached/daemon_memcached/daemon/topkeys.c index 3dc3e1d47005..a127c3735707 100644 --- a/plugin/innodb_memcached/daemon_memcached/daemon/topkeys.c +++ b/plugin/innodb_memcached/daemon_memcached/daemon/topkeys.c @@ -122,29 +122,6 @@ topkey_item_t *topkeys_item_get_or_create(topkeys_t *tk, const void *key, size_t return item; } -static inline void append_stat(const void *cookie, - const char *name, - size_t namelen, - const char *key, - size_t nkey, - int value, - ADD_STAT add_stats) { - char key_str[128]; - char val_str[128]; - int klen, vlen; - - klen = sizeof(key_str) - namelen - 2; - if (nkey < klen) { - klen = nkey; - } - memcpy(key_str, key, klen); - key_str[klen] = '.'; - memcpy(&key_str[klen+1], name, namelen + 1); - klen += namelen + 1; - vlen = snprintf(val_str, sizeof(val_str) - 1, "%d", value); - add_stats(key_str, klen, val_str, vlen, cookie); -} - struct tk_context { const void *cookie; ADD_STAT add_stat; diff --git a/plugin/innodb_memcached/innodb_memcache/CMakeLists.txt b/plugin/innodb_memcached/innodb_memcache/CMakeLists.txt index b2063d32741b..35be8878c00f 100644 --- a/plugin/innodb_memcached/innodb_memcache/CMakeLists.txt +++ b/plugin/innodb_memcached/innodb_memcache/CMakeLists.txt @@ -24,14 +24,19 @@ INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/plugin/innodb_memcached/innodb_memcache ${CMAKE_SOURCE_DIR}/plugin/innodb_memcached/innodb_memcache/cache-src ${CMAKE_SOURCE_DIR}/plugin/innodb_memcached/daemon_memcached/include) -# If current CMAKE_C_FLAGS is with Werror, turn it off to compile successfully -IF(CMAKE_C_FLAGS MATCHES "-Werror") - STRING(REGEX REPLACE "-Werror( |$)" "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") - # Turn -Wdeclaration-after-statement off to reduce the number of warnings - STRING(REGEX REPLACE "-Wdeclaration-after-statement" "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") -ENDIF(CMAKE_C_FLAGS MATCHES "-Werror") +# Remove "-Wdeclaration-after-statement" flag if exists to reduce the number of warnings +STRING(REGEX REPLACE "-Wdeclaration-after-statement" "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") -SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_SHARED_LIBRARY_C_FLAGS} -std=gnu99") +# Disable "-Wunused-parameter -Wsign-compare -Wunused-but-set-variable" flags +SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_SHARED_LIBRARY_C_FLAGS} -Wno-unused-parameter -Wno-sign-compare -std=gnu99") +MY_CHECK_C_COMPILER_FLAG("-Wunused-but-set-variable" HAVE_UNUSET_BUT_SET_VARIABLE) # Requires GCC 4.5+ +IF(HAVE_UNUSET_BUT_SET_VARIABLE) + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-but-set-variable") +ENDIF() +MY_CHECK_C_COMPILER_FLAG("-Wenum-conversion" HAVE_ENUM_CONVERSION) # Requires clang +IF(HAVE_ENUM_CONVERSION) + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-enum-conversion") +ENDIF() SET(MCD__UTILITITY_SOURCES util-src/config_parser.c diff --git a/plugin/innodb_memcached/innodb_memcache/cache-src/default_engine.c b/plugin/innodb_memcached/innodb_memcache/cache-src/default_engine.c index 4ce0a0570319..74fa0c5dc0fa 100644 --- a/plugin/innodb_memcached/innodb_memcache/cache-src/default_engine.c +++ b/plugin/innodb_memcached/innodb_memcache/cache-src/default_engine.c @@ -119,8 +119,8 @@ static bool handled_vbucket(struct default_engine *e, uint16_t vbid) { static bool get_item_info(ENGINE_HANDLE *handle, const void *cookie, const item* item, item_info *item_info); -static const char const * vbucket_state_name(enum vbucket_state s) { - static const char const * vbucket_states[] = { +static const char * vbucket_state_name(enum vbucket_state s) { + static const char * vbucket_states[] = { "dead", "active", "replica", "pending" }; return vbucket_states[s]; diff --git a/plugin/innodb_memcached/innodb_memcache/include/hash_item_util.h b/plugin/innodb_memcached/innodb_memcache/include/hash_item_util.h index 1634ddaf13d5..ebf42d2c251f 100644 --- a/plugin/innodb_memcached/innodb_memcache/include/hash_item_util.h +++ b/plugin/innodb_memcached/innodb_memcache/include/hash_item_util.h @@ -3,6 +3,7 @@ #include #include +#include #include diff --git a/plugin/innodb_memcached/innodb_memcache/util-src/config_parser.c b/plugin/innodb_memcached/innodb_memcache/util-src/config_parser.c index 1332bd91a6bd..8626879733fa 100644 --- a/plugin/innodb_memcached/innodb_memcache/util-src/config_parser.c +++ b/plugin/innodb_memcached/innodb_memcache/util-src/config_parser.c @@ -120,10 +120,10 @@ int parse_config(const char *str, struct config_item *items, FILE *error) { switch (items[ii].datatype) { case DT_SIZE: { - char *sfx = "kmgt"; + const char *sfx = "kmgt"; int multiplier = 1; int m = 1; - for (char *p = sfx; *p != '\0'; ++p) { + for (const char *p = sfx; *p != '\0'; ++p) { m *= 1024; char *ptr = strchr(value, *p); if (ptr == NULL) { From 7e9140b88d3cfb0fcc4d604b3d4a03f284f6a893 Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Wed, 23 May 2018 15:59:14 +0200 Subject: [PATCH 0887/1221] PS-4488: `-Werror` is always disabled for `innodb_memcached` Add "-DWITH_INNODB_MEMCACHED=ON" to Travis config file. Changes for innodb_memcached: 1. Don 't remove "-Werror" compilation flag 2. Remove "-Wdeclaration-after-statement" and "-Wvla" flags if exist to reduce the number of warnings 3. Disable "-Wunused-parameter -Wsign-compare -Wmissing-field-initializers -Wunused-but-set-variable" flags --- .travis.yml | 1 + .../daemon_memcached/CMakeLists.txt | 18 +++++----- .../daemon_memcached/daemon/hash.c | 36 +++++++++---------- .../daemon_memcached/daemon/memcached.c | 13 ++++--- .../daemon_memcached/daemon/topkeys.c | 23 ------------ .../innodb_memcache/CMakeLists.txt | 20 ++++++----- .../cache-src/default_engine.c | 4 +-- .../innodb_memcache/include/hash_item_util.h | 1 + .../innodb_memcache/util-src/config_parser.c | 4 +-- 9 files changed, 51 insertions(+), 69 deletions(-) diff --git a/.travis.yml b/.travis.yml index 529990870f9d..c473eab2d570 100644 --- a/.travis.yml +++ b/.travis.yml @@ -276,6 +276,7 @@ script: -DWITHOUT_PARTITION_STORAGE_ENGINE=ON -DWITHOUT_PERFSCHEMA_STORAGE_ENGINE=ON -DWITH_SCALABILITY_METRICS=ON + -DWITH_INNODB_MEMCACHED=ON "; fi; diff --git a/plugin/innodb_memcached/daemon_memcached/CMakeLists.txt b/plugin/innodb_memcached/daemon_memcached/CMakeLists.txt index 89a1543d9ca8..5f19069ed4c9 100644 --- a/plugin/innodb_memcached/daemon_memcached/CMakeLists.txt +++ b/plugin/innodb_memcached/daemon_memcached/CMakeLists.txt @@ -30,20 +30,20 @@ INCLUDE_DIRECTORIES(${LIBEVENT_INCLUDE_DIR} SET(CMAKE_CPP_FLAGS "${CMAKE_CPP_FLAGS} ${CMAKE_SHARED_LIBRARY_C_FLAGS} -I${CMAKE_SOURCE_DIR}/plugin/innodb_memcached/daemon_memcached/utilities") -# If current CMAKE_C_FLAGS is with Werror, turn it off to compile successfully -IF(CMAKE_C_FLAGS MATCHES "-Werror") - STRING(REGEX REPLACE "-Werror( |$)" "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") - # Turn -Wdeclaration-after-statement off to reduce the number of warnings - STRING(REGEX REPLACE "-Wdeclaration-after-statement" "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") -ENDIF(CMAKE_C_FLAGS MATCHES "-Werror") +# Remove "-Wdeclaration-after-statement" and "-Wvla" flags if exist to reduce the number of warnings +STRING(REGEX REPLACE "-Wdeclaration-after-statement" "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") +STRING(REGEX REPLACE "-Wvla" "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") # Set extra flags for the C compiler IF(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang") - SET(CMAKE_C_FLAGS - "${CMAKE_C_FLAGS} ${CMAKE_SHARED_LIBRARY_C_FLAGS} -std=gnu99") + # Disable "-Wunused-parameter -Wsign-compare -Wmissing-field-initializers -Wunused-but-set-variable" flags + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_SHARED_LIBRARY_C_FLAGS} -Wno-unused-parameter -Wno-sign-compare -Wno-missing-field-initializers -std=gnu99") + MY_CHECK_C_COMPILER_FLAG("-Wunused-but-set-variable" HAVE_UNUSET_BUT_SET_VARIABLE) # Requires GCC 4.5+ + IF(HAVE_UNUSET_BUT_SET_VARIABLE) + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-but-set-variable") + ENDIF() ENDIF() - SET(LIBMEMCACHED_UTILITIES_SOURCES include/memcached/config_parser.h include/memcached/genhash.h diff --git a/plugin/innodb_memcached/daemon_memcached/daemon/hash.c b/plugin/innodb_memcached/daemon_memcached/daemon/hash.c index 7f35088ea6c2..75599e0c4076 100644 --- a/plugin/innodb_memcached/daemon_memcached/daemon/hash.c +++ b/plugin/innodb_memcached/daemon_memcached/daemon/hash.c @@ -221,23 +221,23 @@ uint32_t hash( b+=k[2]+(((uint32_t)k[3])<<16); a+=k[0]+(((uint32_t)k[1])<<16); break; - case 11: c+=((uint32_t)k8[10])<<16; /* @fallthrough */ - case 10: c+=k[4]; /* @fallthrough@ */ + case 11: c+=((uint32_t)k8[10])<<16; /* fallthrough */ + case 10: c+=k[4]; /* fallthrough */ b+=k[2]+(((uint32_t)k[3])<<16); a+=k[0]+(((uint32_t)k[1])<<16); break; - case 9 : c+=k8[8]; /* @fallthrough */ + case 9 : c+=k8[8]; /* fallthrough */ case 8 : b+=k[2]+(((uint32_t)k[3])<<16); a+=k[0]+(((uint32_t)k[1])<<16); break; - case 7 : b+=((uint32_t)k8[6])<<16; /* @fallthrough */ + case 7 : b+=((uint32_t)k8[6])<<16; /* fallthrough */ case 6 : b+=k[2]; a+=k[0]+(((uint32_t)k[1])<<16); break; - case 5 : b+=k8[4]; /* @fallthrough */ + case 5 : b+=k8[4]; /* fallthrough */ case 4 : a+=k[0]+(((uint32_t)k[1])<<16); break; - case 3 : a+=((uint32_t)k8[2])<<16; /* @fallthrough */ + case 3 : a+=((uint32_t)k8[2])<<16; /* fallthrough */ case 2 : a+=k[0]; break; case 1 : a+=k8[0]; @@ -271,19 +271,19 @@ uint32_t hash( /*-------------------------------- last block: affect all 32 bits of (c) */ switch(length) /* all the case statements fall through */ { - case 12: c+=((uint32_t)k[11])<<24; - case 11: c+=((uint32_t)k[10])<<16; - case 10: c+=((uint32_t)k[9])<<8; - case 9 : c+=k[8]; - case 8 : b+=((uint32_t)k[7])<<24; - case 7 : b+=((uint32_t)k[6])<<16; - case 6 : b+=((uint32_t)k[5])<<8; - case 5 : b+=k[4]; - case 4 : a+=((uint32_t)k[3])<<24; - case 3 : a+=((uint32_t)k[2])<<16; - case 2 : a+=((uint32_t)k[1])<<8; + case 12: c+=((uint32_t)k[11])<<24; /* fallthrough */ + case 11: c+=((uint32_t)k[10])<<16; /* fallthrough */ + case 10: c+=((uint32_t)k[9])<<8; /* fallthrough */ + case 9 : c+=k[8]; /* fallthrough */ + case 8 : b+=((uint32_t)k[7])<<24; /* fallthrough */ + case 7 : b+=((uint32_t)k[6])<<16; /* fallthrough */ + case 6 : b+=((uint32_t)k[5])<<8; /* fallthrough */ + case 5 : b+=k[4]; /* fallthrough */ + case 4 : a+=((uint32_t)k[3])<<24; /* fallthrough */ + case 3 : a+=((uint32_t)k[2])<<16; /* fallthrough */ + case 2 : a+=((uint32_t)k[1])<<8; /* fallthrough */ case 1 : a+=k[0]; - break; + break; /* fallthrough */ case 0 : return c; /* zero length strings require no mixing */ } } diff --git a/plugin/innodb_memcached/daemon_memcached/daemon/memcached.c b/plugin/innodb_memcached/daemon_memcached/daemon/memcached.c index 91461e1d8487..729115e20d5b 100644 --- a/plugin/innodb_memcached/daemon_memcached/daemon/memcached.c +++ b/plugin/innodb_memcached/daemon_memcached/daemon/memcached.c @@ -361,7 +361,7 @@ static int add_msghdr(conn *c) } static const char *prot_text(enum protocol prot) { - char *rv = "unknown"; + const char *rv = "unknown"; switch(prot) { case ascii_prot: rv = "ascii"; @@ -2259,7 +2259,7 @@ static void process_bin_complete_sasl_auth(conn *c) { switch(result) { case SASL_OK: - write_bin_response(c, "Authenticated", 0, 0, strlen("Authenticated")); + write_bin_response(c, (void*)"Authenticated", 0, 0, strlen("Authenticated")); auth_data_t data; get_auth_data(c, &data); perform_callbacks(ON_AUTH, (const void*)&data, c); @@ -2967,7 +2967,7 @@ static void dispatch_bin_command(conn *c) { switch (c->cmd) { case PROTOCOL_BINARY_CMD_VERSION: if (extlen == 0 && keylen == 0 && bodylen == 0) { - write_bin_response(c, VERSION, 0, 0, strlen(VERSION)); + write_bin_response(c, (void*)VERSION, 0, 0, strlen(VERSION)); } else { protocol_error = 1; } @@ -3584,10 +3584,10 @@ static size_t tokenize_command(char *command, token_t *tokens, const size_t max_ } static void detokenize(token_t *tokens, int ntokens, char **out, int *nbytes) { - int i, nb; + int i; char *buf, *p; + size_t nb = ntokens; // account for spaces, which is ntokens-1, plus the null - nb = ntokens; // account for spaces, which is ntokens-1, plus the null for (i = 0; i < ntokens; ++i) { nb += tokens[i].length; } @@ -4046,6 +4046,7 @@ static inline char* process_get_command(conn *c, token_t *tokens, size_t ntokens item *it; token_t *key_token = &tokens[KEY_TOKEN]; assert(c != NULL); + (void)ntokens; /* We temporarily block the mgets commands till wl6650 checked in. */ if ((key_token + 1)->length > 0) { @@ -4495,8 +4496,6 @@ static char *process_bind_command(conn *c, token_t *tokens, name, name_len); } - /* For some reason the SLAB_INCR tries to access this... */ - item_info info = { .nvalue = 1 }; switch (ret) { case ENGINE_SUCCESS: out_string(c, "SUCCEED"); diff --git a/plugin/innodb_memcached/daemon_memcached/daemon/topkeys.c b/plugin/innodb_memcached/daemon_memcached/daemon/topkeys.c index 3dc3e1d47005..a127c3735707 100644 --- a/plugin/innodb_memcached/daemon_memcached/daemon/topkeys.c +++ b/plugin/innodb_memcached/daemon_memcached/daemon/topkeys.c @@ -122,29 +122,6 @@ topkey_item_t *topkeys_item_get_or_create(topkeys_t *tk, const void *key, size_t return item; } -static inline void append_stat(const void *cookie, - const char *name, - size_t namelen, - const char *key, - size_t nkey, - int value, - ADD_STAT add_stats) { - char key_str[128]; - char val_str[128]; - int klen, vlen; - - klen = sizeof(key_str) - namelen - 2; - if (nkey < klen) { - klen = nkey; - } - memcpy(key_str, key, klen); - key_str[klen] = '.'; - memcpy(&key_str[klen+1], name, namelen + 1); - klen += namelen + 1; - vlen = snprintf(val_str, sizeof(val_str) - 1, "%d", value); - add_stats(key_str, klen, val_str, vlen, cookie); -} - struct tk_context { const void *cookie; ADD_STAT add_stat; diff --git a/plugin/innodb_memcached/innodb_memcache/CMakeLists.txt b/plugin/innodb_memcached/innodb_memcache/CMakeLists.txt index d0b4ce6f917c..2e70ae8f3dce 100644 --- a/plugin/innodb_memcached/innodb_memcache/CMakeLists.txt +++ b/plugin/innodb_memcached/innodb_memcache/CMakeLists.txt @@ -24,17 +24,21 @@ INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/plugin/innodb_memcached/innodb_memcache ${CMAKE_SOURCE_DIR}/plugin/innodb_memcached/innodb_memcache/cache-src ${CMAKE_SOURCE_DIR}/plugin/innodb_memcached/daemon_memcached/include) -# If current CMAKE_C_FLAGS is with Werror, turn it off to compile successfully -IF(CMAKE_C_FLAGS MATCHES "-Werror") - STRING(REGEX REPLACE "-Werror( |$)" "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") - # Turn -Wdeclaration-after-statement off to reduce the number of warnings - STRING(REGEX REPLACE "-Wdeclaration-after-statement" "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") -ENDIF(CMAKE_C_FLAGS MATCHES "-Werror") +# Remove "-Wdeclaration-after-statement" flag if exists to reduce the number of warnings +STRING(REGEX REPLACE "-Wdeclaration-after-statement" "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") # Set extra flags for the C compiler IF(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang") - SET(CMAKE_C_FLAGS - "${CMAKE_C_FLAGS} ${CMAKE_SHARED_LIBRARY_C_FLAGS} -std=gnu99") + # Disable "-Wunused-parameter -Wsign-compare -Wunused-but-set-variable" flags + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_SHARED_LIBRARY_C_FLAGS} -Wno-unused-parameter -Wno-sign-compare -std=gnu99") + MY_CHECK_C_COMPILER_FLAG("-Wunused-but-set-variable" HAVE_UNUSET_BUT_SET_VARIABLE) # Requires GCC 4.5+ + IF(HAVE_UNUSET_BUT_SET_VARIABLE) + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-but-set-variable") + ENDIF() + MY_CHECK_C_COMPILER_FLAG("-Wenum-conversion" HAVE_ENUM_CONVERSION) # Requires clang + IF(HAVE_ENUM_CONVERSION) + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-enum-conversion") + ENDIF() ENDIF() SET(MCD__UTILITITY_SOURCES diff --git a/plugin/innodb_memcached/innodb_memcache/cache-src/default_engine.c b/plugin/innodb_memcached/innodb_memcache/cache-src/default_engine.c index 4ce0a0570319..74fa0c5dc0fa 100644 --- a/plugin/innodb_memcached/innodb_memcache/cache-src/default_engine.c +++ b/plugin/innodb_memcached/innodb_memcache/cache-src/default_engine.c @@ -119,8 +119,8 @@ static bool handled_vbucket(struct default_engine *e, uint16_t vbid) { static bool get_item_info(ENGINE_HANDLE *handle, const void *cookie, const item* item, item_info *item_info); -static const char const * vbucket_state_name(enum vbucket_state s) { - static const char const * vbucket_states[] = { +static const char * vbucket_state_name(enum vbucket_state s) { + static const char * vbucket_states[] = { "dead", "active", "replica", "pending" }; return vbucket_states[s]; diff --git a/plugin/innodb_memcached/innodb_memcache/include/hash_item_util.h b/plugin/innodb_memcached/innodb_memcache/include/hash_item_util.h index 1634ddaf13d5..ebf42d2c251f 100644 --- a/plugin/innodb_memcached/innodb_memcache/include/hash_item_util.h +++ b/plugin/innodb_memcached/innodb_memcache/include/hash_item_util.h @@ -3,6 +3,7 @@ #include #include +#include #include diff --git a/plugin/innodb_memcached/innodb_memcache/util-src/config_parser.c b/plugin/innodb_memcached/innodb_memcache/util-src/config_parser.c index 1332bd91a6bd..8626879733fa 100644 --- a/plugin/innodb_memcached/innodb_memcache/util-src/config_parser.c +++ b/plugin/innodb_memcached/innodb_memcache/util-src/config_parser.c @@ -120,10 +120,10 @@ int parse_config(const char *str, struct config_item *items, FILE *error) { switch (items[ii].datatype) { case DT_SIZE: { - char *sfx = "kmgt"; + const char *sfx = "kmgt"; int multiplier = 1; int m = 1; - for (char *p = sfx; *p != '\0'; ++p) { + for (const char *p = sfx; *p != '\0'; ++p) { m *= 1024; char *ptr = strchr(value, *p); if (ptr == NULL) { From a152d9fbf8dcb6ad4b821c81091e72361367775f Mon Sep 17 00:00:00 2001 From: Pavan Naik Date: Sat, 28 Apr 2018 17:05:54 +0530 Subject: [PATCH 0888/1221] BUG#27807237: MTR --MANUAL-BOOT-GDB FAILS ON MYSQL-5.7 BUILDS Description: ------------ MTR --manual-boot-gdb fails on mysql-5.7 builds. Issue: ------ When --manual-boot-gdb option is enabled, mysql and test directories are not created, causing the 'mysqld --bootstap' command to fail. Fix: ---- Create the directories for mysql and test database under datadir location before invoking gdb for mysqld bootstrap. Change-Id: I14a8560a3c16fde2f10910375a7e3bbef3d6bc0e --- mysql-test/mysql-test-run.pl | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index 3f4f0b2deeb8..50b30c4ea270 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -4040,6 +4040,10 @@ sub mysql_install_db { mtr_tofile($bootstrap_sql_file, sql_to_bootstrap(mtr_grab_file("include/mtr_check.sql"))); + # Create directories mysql and test + mkpath("$install_datadir/mysql"); + mkpath("$install_datadir/test"); + if ( $opt_manual_boot_gdb ) { # The configuration has been set up and user has been prompted for @@ -4055,10 +4059,6 @@ sub mysql_install_db { mtr_tofile($path_bootstrap_log, "$exe_mysqld_bootstrap " . join(" ", @$args) . "\n"); - # Create directories mysql and test - mkpath("$install_datadir/mysql"); - mkpath("$install_datadir/test"); - if ( My::SafeProcess->run ( name => "bootstrap", From af43dc209178dcc0720c9d72935a0863b85b5b5b Mon Sep 17 00:00:00 2001 From: Aakanksha Verma Date: Tue, 29 May 2018 18:11:37 +0530 Subject: [PATCH 0889/1221] BUG#26225783 MYSQL CRASH ON CREATE TABLE (REPRODUCEABLE) -> INNODB: A LONG SEMAPHORE WAIT Post Push fix for test case failure innodb_gis.rtree_rollback1 on weekly-5.7. Reviewed by : Debarun Banerjee over IM. --- storage/innobase/btr/btr0cur.cc | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/storage/innobase/btr/btr0cur.cc b/storage/innobase/btr/btr0cur.cc index a160601b3ebd..dbaa622e0bc2 100644 --- a/storage/innobase/btr/btr0cur.cc +++ b/storage/innobase/btr/btr0cur.cc @@ -5214,7 +5214,7 @@ btr_cur_pessimistic_delete( ulint level; mem_heap_t* heap; ulint* offsets; - bool allow_merge;/* if true, implies we have taken appropriate page + bool allow_merge = true; /* if true, implies we have taken appropriate page latches needed to merge this page.*/ #ifdef UNIV_DEBUG bool parent_latched = false; @@ -5366,7 +5366,10 @@ btr_cur_pessimistic_delete( btr_search_update_hash_on_delete(cursor); - if (page_is_leaf(page)) { + if (page_is_leaf(page) || dict_index_is_spatial(index)) { + /* Set allow merge to true for spatial indexes as the tree is X + locked incase of delete operation on spatial indexes thus avoiding + possibility of upward locking.*/ allow_merge = true; } else { allow_merge = btr_cur_will_modify_tree(index,page,BTR_INTENTION_DELETE, From 53e74a1adfc7d832250b0eb467bd9155cfce7895 Mon Sep 17 00:00:00 2001 From: Venkatesh Venugopal Date: Tue, 29 May 2018 18:21:46 +0530 Subject: [PATCH 0890/1221] Bug #22958077 ORDER BY LAST_SEEN_TRANSACTION RESULTS IN EMPTY SET (OR DEBUG ASSERTION) Problem: -------- Replication P_S tables returns empty set when ORDER BY is used. Analysis: --------- In replication P_S tables, the current position pointer to the record was being used as an iterator for fetching the records. As a result, the current position (table_replication_*::m_pos) of the record was getting incremented in table_replication_*::rnd_next() and was leading to PFS_engine_table::get_position() return the wrong value to the Optimizer and hence was returning empty set. Fix: ---- The current position pointer is made to point to the latest record and is updated only when a new record is available. --- .../rpl_tests/rpl_perfschema_order_by.test | 91 ++++++++++ .../rpl/r/rpl_perfschema_order_by.result | 169 ++++++++++++++++++ .../suite/rpl/t/rpl_perfschema_order_by.cnf | 17 ++ .../suite/rpl/t/rpl_perfschema_order_by.test | 43 +++++ ...table_replication_applier_configuration.cc | 13 +- .../table_replication_applier_configuration.h | 8 +- .../table_replication_applier_status.cc | 13 +- .../table_replication_applier_status.h | 8 +- ...plication_applier_status_by_coordinator.cc | 13 +- ...eplication_applier_status_by_coordinator.h | 8 +- ...le_replication_applier_status_by_worker.cc | 93 +++++----- ...ble_replication_applier_status_by_worker.h | 38 ++-- ...le_replication_connection_configuration.cc | 13 +- ...ble_replication_connection_configuration.h | 8 +- .../table_replication_connection_status.cc | 13 +- .../table_replication_connection_status.h | 8 +- 16 files changed, 445 insertions(+), 111 deletions(-) create mode 100644 mysql-test/extra/rpl_tests/rpl_perfschema_order_by.test create mode 100644 mysql-test/suite/rpl/r/rpl_perfschema_order_by.result create mode 100644 mysql-test/suite/rpl/t/rpl_perfschema_order_by.cnf create mode 100644 mysql-test/suite/rpl/t/rpl_perfschema_order_by.test diff --git a/mysql-test/extra/rpl_tests/rpl_perfschema_order_by.test b/mysql-test/extra/rpl_tests/rpl_perfschema_order_by.test new file mode 100644 index 000000000000..9f3977e1e1f1 --- /dev/null +++ b/mysql-test/extra/rpl_tests/rpl_perfschema_order_by.test @@ -0,0 +1,91 @@ +# The test file is invoked from rpl.rpl_perfschema_order_by.test +# +# === References === +# Bug #22958077: ORDER BY LAST_SEEN_TRANSACTION RESULTS IN EMPTY SET (OR DEBUG +# ASSERTION) + +--echo # 1) Create a database on server_1. +--let $rpl_connection_name= server_1 +--source include/rpl_connection.inc +CREATE DATABASE db1; + +--echo # 2) create database on server_3. +--let $rpl_connection_name= server_3 +--source include/rpl_connection.inc +CREATE DATABASE db3; + +--echo # 3) sync the slave (server_2) with both masters (server_1 and server_3). +#sync the slave with server_1 +--let $rpl_connection_name= server_1 +--source include/rpl_connection.inc + +--let $rpl_channel_name= channel_1 +--let $sync_slave_connection= server_2 +--source include/sync_slave_sql_with_master.inc + +# sync the slave with server_3 +--let $rpl_connection_name= server_3 +--source include/rpl_connection.inc + +--let $rpl_channel_name= channel_3 +--let $sync_slave_connection=server_2 +--source include/sync_slave_sql_with_master.inc + +# Restart slave for channel_3 so that SELECT returns unsorted data. +--let $rpl_channel_name= channel_3 +--source include/stop_slave.inc +--source include/start_slave.inc + +--echo +SELECT CHANNEL_NAME FROM performance_schema.replication_applier_configuration; +SELECT CHANNEL_NAME FROM performance_schema.replication_applier_configuration ORDER BY CHANNEL_NAME; + +--echo +SELECT CHANNEL_NAME FROM performance_schema.replication_applier_status; +SELECT CHANNEL_NAME FROM performance_schema.replication_applier_status ORDER BY CHANNEL_NAME; + +--echo +SELECT CHANNEL_NAME, LAST_ERROR_MESSAGE FROM performance_schema.replication_connection_status; +SELECT CHANNEL_NAME, LAST_ERROR_MESSAGE FROM performance_schema.replication_connection_status ORDER BY CHANNEL_NAME; + +--echo +SELECT CHANNEL_NAME, TLS_VERSION FROM performance_schema.replication_connection_configuration; +SELECT CHANNEL_NAME, TLS_VERSION FROM performance_schema.replication_connection_configuration ORDER BY CHANNEL_NAME; + +--let $is_mts= `SELECT @@global.slave_parallel_workers` +if ($is_mts) +{ + --echo + SELECT CHANNEL_NAME, LAST_ERROR_MESSAGE FROM performance_schema.replication_applier_status_by_coordinator; + SELECT CHANNEL_NAME, LAST_ERROR_MESSAGE FROM performance_schema.replication_applier_status_by_coordinator ORDER BY CHANNEL_NAME; +} + +--echo +SELECT CHANNEL_NAME, LAST_ERROR_MESSAGE FROM performance_schema.replication_applier_status_by_worker; +SELECT CHANNEL_NAME, LAST_ERROR_MESSAGE FROM performance_schema.replication_applier_status_by_worker ORDER BY CHANNEL_NAME; +--echo + +# Cleanup +--let $rpl_connection_name= server_1 +--source include/rpl_connection.inc +DROP DATABASE db1; + +--let $rpl_connection_name= server_3 +--source include/rpl_connection.inc +DROP DATABASE db3; + +#sync the slave with server_1 +--let $rpl_connection_name= server_1 +--source include/rpl_connection.inc + +--let $rpl_channel_name= channel_1 +--let $sync_slave_connection= server_2 +--source include/sync_slave_sql_with_master.inc + +# sync the slave with server_3 +--let $rpl_connection_name= server_3 +--source include/rpl_connection.inc + +--let $rpl_channel_name= channel_3 +--let $sync_slave_connection=server_2 +--source include/sync_slave_sql_with_master.inc diff --git a/mysql-test/suite/rpl/r/rpl_perfschema_order_by.result b/mysql-test/suite/rpl/r/rpl_perfschema_order_by.result new file mode 100644 index 000000000000..deb347fa2f73 --- /dev/null +++ b/mysql-test/suite/rpl/r/rpl_perfschema_order_by.result @@ -0,0 +1,169 @@ +include/rpl_init.inc [topology=3->2,1->2] +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection server_2] +SET @save.slave_parallel_workers= @@global.slave_parallel_workers; +# Test for Single Threaded Slave +SET GLOBAL slave_parallel_workers= 0; +START SLAVE; +# 1) Create a database on server_1. +[connection server_1] +CREATE DATABASE db1; +# 2) create database on server_3. +[connection server_3] +CREATE DATABASE db3; +# 3) sync the slave (server_2) with both masters (server_1 and server_3). +[connection server_1] +include/sync_slave_sql_with_master.inc +[connection server_3] +include/sync_slave_sql_with_master.inc +include/stop_slave.inc +include/start_slave.inc + +SELECT CHANNEL_NAME FROM performance_schema.replication_applier_configuration; +CHANNEL_NAME +channel_3 +channel_1 +SELECT CHANNEL_NAME FROM performance_schema.replication_applier_configuration ORDER BY CHANNEL_NAME; +CHANNEL_NAME +channel_1 +channel_3 + +SELECT CHANNEL_NAME FROM performance_schema.replication_applier_status; +CHANNEL_NAME +channel_3 +channel_1 +SELECT CHANNEL_NAME FROM performance_schema.replication_applier_status ORDER BY CHANNEL_NAME; +CHANNEL_NAME +channel_1 +channel_3 + +SELECT CHANNEL_NAME, LAST_ERROR_MESSAGE FROM performance_schema.replication_connection_status; +CHANNEL_NAME LAST_ERROR_MESSAGE +channel_3 +channel_1 +SELECT CHANNEL_NAME, LAST_ERROR_MESSAGE FROM performance_schema.replication_connection_status ORDER BY CHANNEL_NAME; +CHANNEL_NAME LAST_ERROR_MESSAGE +channel_1 +channel_3 + +SELECT CHANNEL_NAME, TLS_VERSION FROM performance_schema.replication_connection_configuration; +CHANNEL_NAME TLS_VERSION +channel_3 +channel_1 +SELECT CHANNEL_NAME, TLS_VERSION FROM performance_schema.replication_connection_configuration ORDER BY CHANNEL_NAME; +CHANNEL_NAME TLS_VERSION +channel_1 +channel_3 + +SELECT CHANNEL_NAME, LAST_ERROR_MESSAGE FROM performance_schema.replication_applier_status_by_worker; +CHANNEL_NAME LAST_ERROR_MESSAGE +channel_3 +channel_1 +SELECT CHANNEL_NAME, LAST_ERROR_MESSAGE FROM performance_schema.replication_applier_status_by_worker ORDER BY CHANNEL_NAME; +CHANNEL_NAME LAST_ERROR_MESSAGE +channel_1 +channel_3 + +[connection server_1] +DROP DATABASE db1; +[connection server_3] +DROP DATABASE db3; +[connection server_1] +include/sync_slave_sql_with_master.inc +[connection server_3] +include/sync_slave_sql_with_master.inc +# Test for Multi Threaded Slave +STOP SLAVE; +SET GLOBAL slave_parallel_workers = 2; +START SLAVE; +# 1) Create a database on server_1. +[connection server_1] +CREATE DATABASE db1; +# 2) create database on server_3. +[connection server_3] +CREATE DATABASE db3; +# 3) sync the slave (server_2) with both masters (server_1 and server_3). +[connection server_1] +include/sync_slave_sql_with_master.inc +[connection server_3] +include/sync_slave_sql_with_master.inc +include/stop_slave.inc +include/start_slave.inc + +SELECT CHANNEL_NAME FROM performance_schema.replication_applier_configuration; +CHANNEL_NAME +channel_3 +channel_1 +SELECT CHANNEL_NAME FROM performance_schema.replication_applier_configuration ORDER BY CHANNEL_NAME; +CHANNEL_NAME +channel_1 +channel_3 + +SELECT CHANNEL_NAME FROM performance_schema.replication_applier_status; +CHANNEL_NAME +channel_3 +channel_1 +SELECT CHANNEL_NAME FROM performance_schema.replication_applier_status ORDER BY CHANNEL_NAME; +CHANNEL_NAME +channel_1 +channel_3 + +SELECT CHANNEL_NAME, LAST_ERROR_MESSAGE FROM performance_schema.replication_connection_status; +CHANNEL_NAME LAST_ERROR_MESSAGE +channel_3 +channel_1 +SELECT CHANNEL_NAME, LAST_ERROR_MESSAGE FROM performance_schema.replication_connection_status ORDER BY CHANNEL_NAME; +CHANNEL_NAME LAST_ERROR_MESSAGE +channel_1 +channel_3 + +SELECT CHANNEL_NAME, TLS_VERSION FROM performance_schema.replication_connection_configuration; +CHANNEL_NAME TLS_VERSION +channel_3 +channel_1 +SELECT CHANNEL_NAME, TLS_VERSION FROM performance_schema.replication_connection_configuration ORDER BY CHANNEL_NAME; +CHANNEL_NAME TLS_VERSION +channel_1 +channel_3 + +SELECT CHANNEL_NAME, LAST_ERROR_MESSAGE FROM performance_schema.replication_applier_status_by_coordinator; +CHANNEL_NAME LAST_ERROR_MESSAGE +channel_3 +channel_1 +SELECT CHANNEL_NAME, LAST_ERROR_MESSAGE FROM performance_schema.replication_applier_status_by_coordinator ORDER BY CHANNEL_NAME; +CHANNEL_NAME LAST_ERROR_MESSAGE +channel_1 +channel_3 + +SELECT CHANNEL_NAME, LAST_ERROR_MESSAGE FROM performance_schema.replication_applier_status_by_worker; +CHANNEL_NAME LAST_ERROR_MESSAGE +channel_3 +channel_3 +channel_1 +channel_1 +SELECT CHANNEL_NAME, LAST_ERROR_MESSAGE FROM performance_schema.replication_applier_status_by_worker ORDER BY CHANNEL_NAME; +CHANNEL_NAME LAST_ERROR_MESSAGE +channel_1 +channel_1 +channel_3 +channel_3 + +[connection server_1] +DROP DATABASE db1; +[connection server_3] +DROP DATABASE db3; +[connection server_1] +include/sync_slave_sql_with_master.inc +[connection server_3] +include/sync_slave_sql_with_master.inc +STOP SLAVE; +SET @@global.slave_parallel_workers= @save.slave_parallel_workers; +START SLAVE; +include/rpl_end.inc +RESET SLAVE ALL FOR CHANNEL 'channel_3'; +RESET SLAVE ALL FOR CHANNEL 'channel_1'; diff --git a/mysql-test/suite/rpl/t/rpl_perfschema_order_by.cnf b/mysql-test/suite/rpl/t/rpl_perfschema_order_by.cnf new file mode 100644 index 000000000000..8417bf14e3df --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_perfschema_order_by.cnf @@ -0,0 +1,17 @@ +!include ../my.cnf + +[mysqld.1] +log-slave-updates + +[mysqld.2] +master-info-repository=TABLE +relay-log-info-repository=TABLE +log-slave-updates + +[mysqld.3] +log-slave-updates + +[ENV] +SERVER_MYPORT_3= @mysqld.3.port +SERVER_MYSOCK_3= @mysqld.3.socket + diff --git a/mysql-test/suite/rpl/t/rpl_perfschema_order_by.test b/mysql-test/suite/rpl/t/rpl_perfschema_order_by.test new file mode 100644 index 000000000000..0d9e0882e5c0 --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_perfschema_order_by.test @@ -0,0 +1,43 @@ +# === Purpose === +# +# This test verifies that ORDER BY on replication pfs tables returns +# the correct data set. +# +# === Implementation === +# +# 1) Setup a multi-source replication topology. +# 2) With STS, execute DDLs on both the masters and use SQL ordering +# on PFS tables on slave. +# 3) Repeat step 2 with Multi-threaded Slave. +# +# === References === +# Bug #22958077: ORDER BY LAST_SEEN_TRANSACTION RESULTS IN EMPTY SET (OR DEBUG +# ASSERTION) + +--let $rpl_topology= 3->2,1->2 +--let $rpl_multi_source= 1 +--let $rpl_skip_start_slave= 1 +--source include/rpl_init.inc + +--let $rpl_connection_name= server_2 +--source include/rpl_connection.inc +SET @save.slave_parallel_workers= @@global.slave_parallel_workers; + +--echo # Test for Single Threaded Slave +SET GLOBAL slave_parallel_workers= 0; +START SLAVE; +--source extra/rpl_tests/rpl_perfschema_order_by.test + +--echo # Test for Multi Threaded Slave +STOP SLAVE; +SET GLOBAL slave_parallel_workers = 2; +START SLAVE; +--source extra/rpl_tests/rpl_perfschema_order_by.test + +#Cleanup +STOP SLAVE; +SET @@global.slave_parallel_workers= @save.slave_parallel_workers; +START SLAVE; + +--let $rpl_skip_sync= 1 +--source include/rpl_end.inc diff --git a/storage/perfschema/table_replication_applier_configuration.cc b/storage/perfschema/table_replication_applier_configuration.cc index a88e0f82846d..cf3e9d4e97fb 100644 --- a/storage/perfschema/table_replication_applier_configuration.cc +++ b/storage/perfschema/table_replication_applier_configuration.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -65,7 +65,7 @@ table_replication_applier_configuration::m_share= NULL, /* write_row */ NULL, /* delete_all_rows */ table_replication_applier_configuration::get_row_count, - sizeof(PFS_simple_index), /* ref length */ + sizeof(pos_t), /* ref length */ &m_table_lock, &m_field_def, false, /* checked */ @@ -103,12 +103,10 @@ ha_rows table_replication_applier_configuration::get_row_count() int table_replication_applier_configuration::rnd_next(void) { Master_info *mi; - int res= HA_ERR_END_OF_FILE; - channel_map.rdlock(); for (m_pos.set_at(&m_next_pos); - m_pos.m_index < channel_map.get_max_channels() && res != 0; + m_pos.m_index < channel_map.get_max_channels(); m_pos.next()) { mi= channel_map.get_mi_at_pos(m_pos.m_index); @@ -117,12 +115,13 @@ int table_replication_applier_configuration::rnd_next(void) { make_row(mi); m_next_pos.set_after(&m_pos); - res= 0; + channel_map.unlock(); + return 0; } } channel_map.unlock(); - return res; + return HA_ERR_END_OF_FILE; } int table_replication_applier_configuration::rnd_pos(const void *pos) diff --git a/storage/perfschema/table_replication_applier_configuration.h b/storage/perfschema/table_replication_applier_configuration.h index e5ec69a64b8e..4088c346495d 100644 --- a/storage/perfschema/table_replication_applier_configuration.h +++ b/storage/perfschema/table_replication_applier_configuration.h @@ -1,5 +1,5 @@ /* - Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -48,6 +48,8 @@ struct st_row_applier_config { /** Table PERFORMANCE_SCHEMA.replication_applier_configuration */ class table_replication_applier_configuration: public PFS_engine_table { + typedef PFS_simple_index pos_t; + private: void make_row(Master_info *mi); @@ -60,9 +62,9 @@ class table_replication_applier_configuration: public PFS_engine_table /** True is the current row exists. */ bool m_row_exists; /** Current position. */ - PFS_simple_index m_pos; + pos_t m_pos; /** Next position. */ - PFS_simple_index m_next_pos; + pos_t m_next_pos; protected: /** diff --git a/storage/perfschema/table_replication_applier_status.cc b/storage/perfschema/table_replication_applier_status.cc index e0824b056feb..fc8044b5dd93 100644 --- a/storage/perfschema/table_replication_applier_status.cc +++ b/storage/perfschema/table_replication_applier_status.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -74,7 +74,7 @@ table_replication_applier_status::m_share= NULL, /* write_row */ NULL, /* delete_all_rows */ table_replication_applier_status::get_row_count, /* records */ - sizeof(PFS_simple_index), /* ref length */ + sizeof(pos_t), /* ref length */ &m_table_lock, &m_field_def, false, /* checked */ @@ -110,12 +110,10 @@ ha_rows table_replication_applier_status::get_row_count() int table_replication_applier_status::rnd_next(void) { Master_info *mi; - int res= HA_ERR_END_OF_FILE; - channel_map.rdlock(); for(m_pos.set_at(&m_next_pos); - m_pos.m_index < channel_map.get_max_channels() && res != 0; + m_pos.m_index < channel_map.get_max_channels(); m_pos.next()) { mi= channel_map.get_mi_at_pos(m_pos.m_index); @@ -124,12 +122,13 @@ int table_replication_applier_status::rnd_next(void) { make_row(mi); m_next_pos.set_after(&m_pos); - res= 0; + channel_map.unlock(); + return 0; } } channel_map.unlock(); - return res; + return HA_ERR_END_OF_FILE; } diff --git a/storage/perfschema/table_replication_applier_status.h b/storage/perfschema/table_replication_applier_status.h index 955439be6daf..5b6f0793d030 100644 --- a/storage/perfschema/table_replication_applier_status.h +++ b/storage/perfschema/table_replication_applier_status.h @@ -1,5 +1,5 @@ /* - Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -59,6 +59,8 @@ struct st_row_applier_status { /** Table PERFORMANCE_SCHEMA.replication_applier_status */ class table_replication_applier_status: public PFS_engine_table { + typedef PFS_simple_index pos_t; + private: void make_row(Master_info *mi); @@ -71,9 +73,9 @@ class table_replication_applier_status: public PFS_engine_table /** True is the current row exists. */ bool m_row_exists; /** Current position. */ - PFS_simple_index m_pos; + pos_t m_pos; /** Next position. */ - PFS_simple_index m_next_pos; + pos_t m_next_pos; protected: /** diff --git a/storage/perfschema/table_replication_applier_status_by_coordinator.cc b/storage/perfschema/table_replication_applier_status_by_coordinator.cc index 5f2427bed67f..9ed252f7ba23 100644 --- a/storage/perfschema/table_replication_applier_status_by_coordinator.cc +++ b/storage/perfschema/table_replication_applier_status_by_coordinator.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -85,7 +85,7 @@ table_replication_applier_status_by_coordinator::m_share= NULL, /* write_row */ NULL, /* delete_all_rows */ table_replication_applier_status_by_coordinator::get_row_count, - sizeof(PFS_simple_index), /* ref length */ + sizeof(pos_t), /* ref length */ &m_table_lock, &m_field_def, false, /* checked */ @@ -122,12 +122,10 @@ ha_rows table_replication_applier_status_by_coordinator::get_row_count() int table_replication_applier_status_by_coordinator::rnd_next(void) { Master_info *mi; - int res= HA_ERR_END_OF_FILE; - channel_map.rdlock(); for(m_pos.set_at(&m_next_pos); - m_pos.m_index < channel_map.get_max_channels() && res != 0; + m_pos.m_index < channel_map.get_max_channels(); m_pos.next()) { mi= channel_map.get_mi_at_pos(m_pos.m_index); @@ -144,12 +142,13 @@ int table_replication_applier_status_by_coordinator::rnd_next(void) { make_row(mi); m_next_pos.set_after(&m_pos); - res= 0; + channel_map.unlock(); + return 0; } } channel_map.unlock(); - return res; + return HA_ERR_END_OF_FILE; } int table_replication_applier_status_by_coordinator::rnd_pos(const void *pos) diff --git a/storage/perfschema/table_replication_applier_status_by_coordinator.h b/storage/perfschema/table_replication_applier_status_by_coordinator.h index 30a1f39ee466..269ea111a4be 100644 --- a/storage/perfschema/table_replication_applier_status_by_coordinator.h +++ b/storage/perfschema/table_replication_applier_status_by_coordinator.h @@ -1,5 +1,5 @@ /* - Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -65,6 +65,8 @@ struct st_row_coordinator { /** Table PERFORMANCE_SCHEMA.replication_applier_status_by_coordinator */ class table_replication_applier_status_by_coordinator: public PFS_engine_table { + typedef PFS_simple_index pos_t; + private: void make_row(Master_info *mi); @@ -77,9 +79,9 @@ class table_replication_applier_status_by_coordinator: public PFS_engine_table /** True is the current row exists. */ bool m_row_exists; /** Current position. */ - PFS_simple_index m_pos; + pos_t m_pos; /** Next position. */ - PFS_simple_index m_next_pos; + pos_t m_next_pos; protected: /** diff --git a/storage/perfschema/table_replication_applier_status_by_worker.cc b/storage/perfschema/table_replication_applier_status_by_worker.cc index e4e99dc23259..e5914b20dcad 100644 --- a/storage/perfschema/table_replication_applier_status_by_worker.cc +++ b/storage/perfschema/table_replication_applier_status_by_worker.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -94,7 +94,7 @@ table_replication_applier_status_by_worker::m_share= NULL, /* write_row */ NULL, /* delete_all_rows */ table_replication_applier_status_by_worker::get_row_count, /*records*/ - sizeof(PFS_simple_index), /* ref length */ + sizeof(pos_t), /* ref length */ &m_table_lock, &m_field_def, false, /* checked */ @@ -109,8 +109,7 @@ PFS_engine_table* table_replication_applier_status_by_worker::create(void) table_replication_applier_status_by_worker ::table_replication_applier_status_by_worker() : PFS_engine_table(&m_share, &m_pos), - m_row_exists(false), m_pos(), m_next_pos(), - m_applier_pos(0), m_applier_next_pos(0) + m_row_exists(false), m_pos(), m_next_pos() {} table_replication_applier_status_by_worker @@ -121,8 +120,6 @@ void table_replication_applier_status_by_worker::reset_position(void) { m_pos.reset(); m_next_pos.reset(); - m_applier_pos.m_index=0; - m_applier_next_pos.m_index=0; } ha_rows table_replication_applier_status_by_worker::get_row_count() @@ -138,52 +135,47 @@ int table_replication_applier_status_by_worker::rnd_next(void) { Slave_worker *worker; Master_info *mi; - int res= HA_ERR_END_OF_FILE; + size_t wc; channel_map.rdlock(); - /* - For each SQL Thread in all channels get the respective Master_info and - construct a row to display its status in - 'replication_applier_status_by_worker' table in case of single threaded - slave mode. - */ - for(m_applier_pos.set_at(&m_applier_next_pos); - m_applier_pos.m_index < channel_map.get_max_channels(); - m_applier_pos.next()) - { - mi= channel_map.get_mi_at_pos(m_applier_pos.m_index); - - if (mi && mi->host[0] && mi->rli && mi->rli->get_worker_count()==0) - { - make_row(mi); - m_applier_next_pos.set_after(&m_applier_pos); - - channel_map.unlock(); - return 0; - } - } - for (m_pos.set_at(&m_next_pos); - m_pos.has_more_channels(channel_map.get_max_channels()) && res != 0; + m_pos.has_more_channels(channel_map.get_max_channels()); m_pos.next_channel()) { mi= channel_map.get_mi_at_pos(m_pos.m_index_1); if (mi && mi->host[0]) { - worker= mi->rli->get_worker(m_pos.m_index_2); - if (worker) + wc= mi->rli->get_worker_count(); + + if (wc == 0) { - make_row(worker); - m_next_pos.set_after(&m_pos); - res= 0; + /* Single Thread Slave */ + make_row(mi); + m_next_pos.set_channel_after(&m_pos); + channel_map.unlock(); + return 0; + } + + for (; m_pos.m_index_2 < wc; m_pos.next_worker()) + { + /* Multi Thread Slave */ + + worker = mi->rli->get_worker(m_pos.m_index_2); + if (worker) + { + make_row(worker); + m_next_pos.set_after(&m_pos); + channel_map.unlock(); + return 0; + } } } } channel_map.unlock(); - return res; + return HA_ERR_END_OF_FILE; } int table_replication_applier_status_by_worker::rnd_pos(const void *pos) @@ -191,6 +183,7 @@ int table_replication_applier_status_by_worker::rnd_pos(const void *pos) Slave_worker *worker; Master_info *mi; int res= HA_ERR_RECORD_DELETED; + size_t wc; set_position(pos); @@ -201,22 +194,26 @@ int table_replication_applier_status_by_worker::rnd_pos(const void *pos) if (!mi || !mi->rli || !mi->host[0]) goto end; - DBUG_ASSERT(m_pos.m_index_1 < mi->rli->get_worker_count()); - /* - Display SQL Thread's status only in the case of single threaded mode. - */ - if (mi->rli->get_worker_count() == 0) + wc = mi->rli->get_worker_count(); + + if (wc == 0) { + /* Single Thread Slave */ make_row(mi); - res= 0; - goto end; + res=0; } - worker= mi->rli->get_worker(m_pos.m_index_2); - - if (worker != NULL) + else { - make_row(worker); - res= 0; + /* Multi Thread Slave */ + if (m_pos.m_index_2 < wc) + { + worker = mi->rli->get_worker(m_pos.m_index_2); + if (worker != NULL) + { + make_row(worker); + res=0; + } + } } end: diff --git a/storage/perfschema/table_replication_applier_status_by_worker.h b/storage/perfschema/table_replication_applier_status_by_worker.h index ed0ce7480b26..f58493d7c0cc 100644 --- a/storage/perfschema/table_replication_applier_status_by_worker.h +++ b/storage/perfschema/table_replication_applier_status_by_worker.h @@ -1,5 +1,5 @@ /* - Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -74,14 +74,16 @@ struct st_row_worker { }; /** - Index 1 for replication channel - Index 2 for worker + Position in table replication_applier_status_by_worker. + Index 1 for replication channel. + Index 2 for worker: + - position [0] is for Single Thread Slave (Master_info) + - position [1] .. [N] is for Multi Thread Slave (Slave_worker) */ -struct workers_per_channel -:public PFS_double_index +struct pos_replication_applier_status_by_worker : public PFS_double_index { - workers_per_channel() - :PFS_double_index(0,0) + + pos_replication_applier_status_by_worker() : PFS_double_index(0, 0) {} inline void reset(void) @@ -98,12 +100,26 @@ struct workers_per_channel m_index_1++; m_index_2= 0; } + + inline void next_worker() + { + m_index_2++; + } + + inline void + set_channel_after(const pos_replication_applier_status_by_worker *other) + { + m_index_1 = other->m_index_1 + 1; + m_index_2 = 0; + } }; /** Table PERFORMANCE_SCHEMA.replication_applier_status_by_worker */ class table_replication_applier_status_by_worker: public PFS_engine_table { + typedef pos_replication_applier_status_by_worker pos_t; + private: void make_row(Slave_worker *); /* @@ -121,13 +137,9 @@ class table_replication_applier_status_by_worker: public PFS_engine_table /** True is the current row exists. */ bool m_row_exists; /** Current position. */ - workers_per_channel m_pos; - /** Next position. */ - workers_per_channel m_next_pos; - /** Current position. */ - PFS_simple_index m_applier_pos; + pos_t m_pos; /** Next position. */ - PFS_simple_index m_applier_next_pos; + pos_t m_next_pos; protected: /** diff --git a/storage/perfschema/table_replication_connection_configuration.cc b/storage/perfschema/table_replication_connection_configuration.cc index 8fe04802aac2..633c9862c587 100644 --- a/storage/perfschema/table_replication_connection_configuration.cc +++ b/storage/perfschema/table_replication_connection_configuration.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -147,7 +147,7 @@ table_replication_connection_configuration::m_share= NULL, /* write_row */ NULL, /* delete_all_rows */ table_replication_connection_configuration::get_row_count, /* records */ - sizeof(PFS_simple_index), /* ref length */ + sizeof(pos_t), /* ref length */ &m_table_lock, &m_field_def, false, /* checked */ @@ -189,12 +189,10 @@ ha_rows table_replication_connection_configuration::get_row_count() int table_replication_connection_configuration::rnd_next(void) { Master_info *mi; - int res= HA_ERR_END_OF_FILE; - channel_map.rdlock(); for (m_pos.set_at(&m_next_pos); - m_pos.m_index < channel_map.get_max_channels() && res != 0; + m_pos.m_index < channel_map.get_max_channels(); m_pos.next()) { mi= channel_map.get_mi_at_pos(m_pos.m_index); @@ -203,12 +201,13 @@ int table_replication_connection_configuration::rnd_next(void) { make_row(mi); m_next_pos.set_after(&m_pos); - res= 0; + channel_map.unlock(); + return 0; } } channel_map.unlock(); - return res; + return HA_ERR_END_OF_FILE; } int table_replication_connection_configuration::rnd_pos(const void *pos) diff --git a/storage/perfschema/table_replication_connection_configuration.h b/storage/perfschema/table_replication_connection_configuration.h index f71aecefd0ef..925530cf171e 100644 --- a/storage/perfschema/table_replication_connection_configuration.h +++ b/storage/perfschema/table_replication_connection_configuration.h @@ -1,5 +1,5 @@ /* - Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -93,6 +93,8 @@ struct st_row_connect_config { /** Table PERFORMANCE_SCHEMA.TABLE_REPLICATION_CONNECTION_CONFIGURATION. */ class table_replication_connection_configuration: public PFS_engine_table { + typedef PFS_simple_index pos_t; + private: void make_row(Master_info *); @@ -105,9 +107,9 @@ class table_replication_connection_configuration: public PFS_engine_table /** Current row */ st_row_connect_config m_row; /** Current position. */ - PFS_simple_index m_pos; + pos_t m_pos; /** Next position. */ - PFS_simple_index m_next_pos; + pos_t m_next_pos; protected: /** diff --git a/storage/perfschema/table_replication_connection_status.cc b/storage/perfschema/table_replication_connection_status.cc index 72ac8c1fc920..66ce8cd1fafa 100644 --- a/storage/perfschema/table_replication_connection_status.cc +++ b/storage/perfschema/table_replication_connection_status.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -151,7 +151,7 @@ table_replication_connection_status::m_share= NULL, /* write_row */ NULL, /* delete_all_rows */ table_replication_connection_status::get_row_count, /* records */ - sizeof(PFS_simple_index), /* ref length */ + sizeof(pos_t), /* ref length */ &m_table_lock, &m_field_def, false, /* checked */ @@ -190,12 +190,10 @@ ha_rows table_replication_connection_status::get_row_count() int table_replication_connection_status::rnd_next(void) { Master_info *mi= NULL; - int res= HA_ERR_END_OF_FILE; - channel_map.rdlock(); for (m_pos.set_at(&m_next_pos); - m_pos.m_index < channel_map.get_max_channels() && res != 0; + m_pos.m_index < channel_map.get_max_channels(); m_pos.next()) { mi= channel_map.get_mi_at_pos(m_pos.m_index); @@ -204,12 +202,13 @@ int table_replication_connection_status::rnd_next(void) { make_row(mi); m_next_pos.set_after(&m_pos); - res= 0; + channel_map.unlock(); + return 0; } } channel_map.unlock(); - return res; + return HA_ERR_END_OF_FILE; } int table_replication_connection_status::rnd_pos(const void *pos) diff --git a/storage/perfschema/table_replication_connection_status.h b/storage/perfschema/table_replication_connection_status.h index 6c95da19235a..dbd70e37f987 100644 --- a/storage/perfschema/table_replication_connection_status.h +++ b/storage/perfschema/table_replication_connection_status.h @@ -1,5 +1,5 @@ /* - Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -91,6 +91,8 @@ struct st_row_connect_status { /** Table PERFORMANCE_SCHEMA.REPLICATION_CONNECTION_STATUS. */ class table_replication_connection_status: public PFS_engine_table { + typedef PFS_simple_index pos_t; + private: void make_row(Master_info *mi); @@ -103,9 +105,9 @@ class table_replication_connection_status: public PFS_engine_table /** Current row */ st_row_connect_status m_row; /** Current position. */ - PFS_simple_index m_pos; + pos_t m_pos; /** Next position. */ - PFS_simple_index m_next_pos; + pos_t m_next_pos; protected: /** From c3206a9bddb17781923890566c576a7bf972d8e8 Mon Sep 17 00:00:00 2001 From: Tiago Jorge Date: Fri, 25 May 2018 13:28:37 +0100 Subject: [PATCH 0891/1221] BUG#27882096 DNS BASED SEEDS RESOLVING TO ITSELF CAUSES GR TO NOT START Description ================= When group_replication_group_seeds contains a DNS based entry which resolves to it's on mysql daemon, group replication will be stuck. Configure a cluster with the following settings: group_replication_group_seeds = node1:33061,192.168.70.3:33061,192.168.70.4:33061 group_replication_local_address = 192.168.70.2:33061 And start it. I won't be able to start. Analysis ================= We already had that guard in place, but only if local_address matches seeds, either by both using name or both using address. If there is a mismatch, it would not work, as per the example above. Fix ================= Always resolve both local_address and seeds to address format before doing the comparision, and then skip if it matches the local address. --- .../xcom/gcs_xcom_control_interface.cc | 34 +++-- ...p_check_node_seed_skips_own_address.result | 20 +++ ...tup_check_node_seed_skips_own_address.test | 117 ++++++++++++++++++ 3 files changed, 161 insertions(+), 10 deletions(-) create mode 100644 rapid/plugin/group_replication/tests/mtr/r/gr_startup_check_node_seed_skips_own_address.result create mode 100644 rapid/plugin/group_replication/tests/mtr/t/gr_startup_check_node_seed_skips_own_address.test diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_control_interface.cc b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_control_interface.cc index bce439240108..a241caafa64a 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_control_interface.cc +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/gcs_xcom_control_interface.cc @@ -464,8 +464,17 @@ enum_gcs_error Gcs_xcom_control::retry_do_join() xcom_port port= 0; char *addr= NULL; std::vector::iterator it; - std::string *local_node_info_str= - m_local_node_info->get_member_representation(); + std::string local_node_info_str_ip; + bool resolve_error = false; + resolve_error = resolve_ip_addr_from_hostname( + m_local_node_info->get_member_ip(), local_node_info_str_ip); + + if (resolve_error) + { + MYSQL_GCS_LOG_ERROR("Error resolving local address name: " + << m_local_node_info->get_member_ip().c_str()) + goto err; + } while(con == NULL && n < Gcs_xcom_proxy::connection_attempts) { @@ -474,18 +483,27 @@ enum_gcs_error Gcs_xcom_control::retry_do_join() it++) { Gcs_xcom_group_member_information *peer= *(it); - std::string *peer_rep= peer->get_member_representation(); + std::string peer_rep_ip; - if(peer_rep->compare(*local_node_info_str) == 0) + resolve_error = + resolve_ip_addr_from_hostname(peer->get_member_ip(), peer_rep_ip); + if (resolve_error) + { + MYSQL_GCS_LOG_WARN("Unable to resolve peer address " + << peer->get_member_ip().c_str() + << ". Skipping...") + continue; + } + + if (peer_rep_ip.compare(local_node_info_str_ip) == 0 && + peer->get_member_port() == m_local_node_info->get_member_port()) { MYSQL_GCS_LOG_TRACE( "::join():: Skipping own address." ) // Skip own address if configured in the peer list - delete peer_rep; continue; } - delete peer_rep; port= peer->get_member_port(); addr= (char *)peer->get_member_ip().c_str(); @@ -506,10 +524,6 @@ enum_gcs_error Gcs_xcom_control::retry_do_join() n++; } - // Not needed anymore since it was only used in the loop - // above. As such, claim back memory. - delete local_node_info_str; - if (con != NULL) { if(m_socket_util->disable_nagle_in_socket(con->fd) < 0) diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_startup_check_node_seed_skips_own_address.result b/rapid/plugin/group_replication/tests/mtr/r/gr_startup_check_node_seed_skips_own_address.result new file mode 100644 index 000000000000..3c048a6dec24 --- /dev/null +++ b/rapid/plugin/group_replication/tests/mtr/r/gr_startup_check_node_seed_skips_own_address.result @@ -0,0 +1,20 @@ +include/group_replication.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection server1] +server1 +include/start_and_bootstrap_group_replication.inc +server2 +"1. Test local address with raw address and seeds with name" +include/start_group_replication.inc +include/gr_wait_for_member_state.inc +include/stop_group_replication.inc +"2. Test local address with name address and seeds with raw address" +include/start_group_replication.inc +include/gr_wait_for_member_state.inc +include/stop_group_replication.inc +"3. Test local address with name address and seeds with name address" +include/start_group_replication.inc +include/gr_wait_for_member_state.inc +include/group_replication_end.inc diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_startup_check_node_seed_skips_own_address.test b/rapid/plugin/group_replication/tests/mtr/t/gr_startup_check_node_seed_skips_own_address.test new file mode 100644 index 000000000000..ee0197203cdb --- /dev/null +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_startup_check_node_seed_skips_own_address.test @@ -0,0 +1,117 @@ +############################################################### +# The purpose of this test is to exercise all possible options +# that avoid a node connecting to himself as seed, if a +# misconfiguration accidentally happens, when using names. +# +# +# The following combinations (as an example) must succeed: +# +# boot_node = off +# local_address = name:12345 //name resolves to 127.0.0.1 +# peers = 127.0.0.1:12345,127.0.0.1:12346 +# +# boot_node = off +# local_address = 127.0.0.1:12345 +# peers = name:12345,127.0.0.1:12346 //name resolves to 127.0.0.1 +# +# +# For that one needs to: +# - Skip start as a whole +# - Start server 1 +# - Build scenario 1 +# - Start server 2 +# - Make sure it comes online +# - Build and run scenario 2 +# - Cleanup +# +############################################################### + +--let $group_replication_group_name= 89ab83b0-9f17-11e3-a5e2-0800200c9a66 + +--source ../inc/have_group_replication_plugin.inc +--let $rpl_skip_group_replication_start= 1 +--source ../inc/group_replication.inc + +# Start server 1 by hand +--connection server1 +--echo server1 +--source ../inc/start_and_bootstrap_group_replication.inc + +# Go to server 2 +--connection server2 +--echo server2 + +# Backup the original values +--let $original_server_2_local_address= `SELECT @@GLOBAL.group_replication_local_address` +--let $original_server_2_seeds= `SELECT @@GLOBAL.group_replication_group_seeds` + +--echo "1. Test local address with raw address and seeds with name" + +# Assemble the new values: +# - local address with raw values +# - local address first in seeds with name (which is default) +--let $localhost_address= 127.0.0.1: +--let $local_address_with_raw_address= $localhost_address$SERVER_GR_PORT_2 + +# Set values +--disable_query_log +--eval SET GLOBAL group_replication_local_address= "$local_address_with_raw_address" +--eval SET GLOBAL group_replication_group_seeds= "$original_server_2_local_address,$original_server_2_seeds" +--enable_query_log + +# Start the server and wait for successful start +--source include/start_group_replication.inc + +--let $group_replication_member_state= ONLINE +--source ../inc/gr_wait_for_member_state.inc + +# Stop the server +--source include/stop_group_replication.inc + +--echo "2. Test local address with name address and seeds with raw address" + +# Assemble the new values: +# - local address with name values +# - local address first in seeds with raw value + +--disable_query_log +--eval SET GLOBAL group_replication_local_address= "$original_server_2_local_address" +--eval SET GLOBAL group_replication_group_seeds= "$local_address_with_raw_address,$original_server_2_seeds" +--enable_query_log + +--source include/start_group_replication.inc + +# Start the server and wait for successful start + +--let $group_replication_member_state= ONLINE +--source ../inc/gr_wait_for_member_state.inc + +# Stop the server +--source include/stop_group_replication.inc + +--echo "3. Test local address with name address and seeds with name address" + +# Assemble the new values: +# - local address with name values +# - local address first in seeds with name value + +--disable_query_log +--eval SET GLOBAL group_replication_local_address= "$original_server_2_local_address" +--eval SET GLOBAL group_replication_group_seeds= "$original_server_2_local_address,$original_server_2_seeds" +--enable_query_log + +--source include/start_group_replication.inc + +# Start the server and wait for successful start + +--let $group_replication_member_state= ONLINE +--source ../inc/gr_wait_for_member_state.inc + +# Cleanup + +--disable_query_log +--eval SET GLOBAL group_replication_local_address= "$original_server_2_local_address" +--eval SET GLOBAL group_replication_group_seeds= "$original_server_2_seeds" +--enable_query_log + +--source ../inc/group_replication_end.inc From e201cea57ce031748f6d1e378f03adc3124104c9 Mon Sep 17 00:00:00 2001 From: Evgeniy Patlan Date: Tue, 29 May 2018 17:50:34 +0300 Subject: [PATCH 0892/1221] Update version --- VERSION | 2 +- storage/innobase/include/univ.i | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/VERSION b/VERSION index ad5fb4651061..8403e93d709c 100644 --- a/VERSION +++ b/VERSION @@ -1,4 +1,4 @@ MYSQL_VERSION_MAJOR=5 MYSQL_VERSION_MINOR=6 MYSQL_VERSION_PATCH=40 -MYSQL_VERSION_EXTRA=-83.2 +MYSQL_VERSION_EXTRA=-84.0 diff --git a/storage/innobase/include/univ.i b/storage/innobase/include/univ.i index 1eafad745ea4..aab1b735d912 100644 --- a/storage/innobase/include/univ.i +++ b/storage/innobase/include/univ.i @@ -47,7 +47,7 @@ Created 1/20/1994 Heikki Tuuri #define INNODB_VERSION_BUGFIX MYSQL_VERSION_PATCH #ifndef PERCONA_INNODB_VERSION -#define PERCONA_INNODB_VERSION 83.2 +#define PERCONA_INNODB_VERSION 84.0 #endif /* Enable UNIV_LOG_ARCHIVE in XtraDB */ From d016d1eb79a2c724a395e43e05dd717f9173420b Mon Sep 17 00:00:00 2001 From: Evgeniy Patlan Date: Tue, 29 May 2018 19:36:45 +0300 Subject: [PATCH 0893/1221] Fix rpm patch --- .../debian/percona-server-server-5.7.install | 1 - .../debian/percona-server-test-5.7.install | 4 -- build-ps/percona-server.spec | 7 --- build-ps/rpm/mysql-5.7-sharedlib-rename.patch | 49 ++++++++++++++++--- .../ubuntu/percona-server-server-5.7.install | 1 - .../ubuntu/percona-server-test-5.7.install | 4 -- 6 files changed, 42 insertions(+), 24 deletions(-) diff --git a/build-ps/debian/percona-server-server-5.7.install b/build-ps/debian/percona-server-server-5.7.install index 97e07b684bfa..267c3d904178 100644 --- a/build-ps/debian/percona-server-server-5.7.install +++ b/build-ps/debian/percona-server-server-5.7.install @@ -35,7 +35,6 @@ usr/share/man/man1/mysqlbinlog.1 usr/share/man/man1/mysqld_multi.1 usr/share/man/man1/mysqld_safe.1 usr/share/man/man1/mysql.server.1 -usr/share/man/man1/mysql-stress-test.pl.1 usr/share/man/man1/perror.1 usr/share/man/man1/replace.1 usr/share/man/man1/resolveip.1 diff --git a/build-ps/debian/percona-server-test-5.7.install b/build-ps/debian/percona-server-test-5.7.install index a4d69815c20b..c36eed0d60f3 100644 --- a/build-ps/debian/percona-server-test-5.7.install +++ b/build-ps/debian/percona-server-test-5.7.install @@ -2,10 +2,6 @@ usr/bin/mysql_client_test usr/bin/mysqltest usr/bin/mysqlxtest -# manpages -usr/share/man/man1/mysql_client_test.1 -usr/share/man/man1/mysql-test-run.pl.1 -usr/share/man/man1/mysqltest.1 # plugins usr/lib/mysql/plugin/auth_test_plugin.so usr/lib/mysql/plugin/daemon_example.ini diff --git a/build-ps/percona-server.spec b/build-ps/percona-server.spec index eeb4a68ead42..fd3a6183d203 100644 --- a/build-ps/percona-server.spec +++ b/build-ps/percona-server.spec @@ -984,13 +984,6 @@ fi %attr(755, root, root) %{_libdir}/mysql/plugin/debug/test_security_context.so %attr(755, root, root) %{_libdir}/mysql/plugin/debug/test_udf_services.so -%attr(644, root, root) %{_mandir}/man1/mysql_client_test.1* -%attr(644, root, root) %{_mandir}/man1/mysql-stress-test.pl.1* -%attr(644, root, root) %{_mandir}/man1/mysql-test-run.pl.1* -%attr(644, root, root) %{_mandir}/man1/mysql_client_test_embedded.1* -%attr(644, root, root) %{_mandir}/man1/mysqltest.1* -%attr(644, root, root) %{_mandir}/man1/mysqltest_embedded.1* - %if 0%{?tokudb} %files -n Percona-Server-tokudb%{product_suffix} %attr(-, root, root) diff --git a/build-ps/rpm/mysql-5.7-sharedlib-rename.patch b/build-ps/rpm/mysql-5.7-sharedlib-rename.patch index 37327ba6cf0d..442e6ac7e8f5 100644 --- a/build-ps/rpm/mysql-5.7-sharedlib-rename.patch +++ b/build-ps/rpm/mysql-5.7-sharedlib-rename.patch @@ -138,20 +138,55 @@ diff -rup old/include/mysql.h new/include/mysql.h diff -rup old/libmysql/CMakeLists.txt new/libmysql/CMakeLists.txt --- old/libmysql/CMakeLists.txt 2016-03-09 09:25:21.000000000 +0100 +++ new/libmysql/CMakeLists.txt 2016-03-09 11:41:15.159325622 +0100 -@@ -235,11 +235,11 @@ +@@ -234,12 +234,12 @@ + MESSAGE(STATUS "Creating LDAP authentication SASL client library.") ADD_SUBDIRECTORY(authentication_ldap) - # Merge several convenience libraries into one big perconaserverclient +-# Merge several convenience libraries into one big perconaserverclient -MERGE_CONVENIENCE_LIBRARIES(perconaserverclient ${LIBS} COMPONENT Development) ++# Merge several convenience libraries into one big mysqlclient +MERGE_CONVENIENCE_LIBRARIES(mysqlclient ${LIBS} COMPONENT Development) # Visual Studio users need debug static library for debug projects IF(MSVC) -- INSTALL_DEBUG_TARGET(perconaserverclient DESTINATION ${INSTALL_LIBDIR}/debug) -+ INSTALL_DEBUG_TARGET(mysqlclient DESTINATION ${INSTALL_LIBDIR}/debug) - INSTALL_DEBUG_TARGET(clientlib DESTINATION ${INSTALL_LIBDIR}/debug) +- INSTALL_DEBUG_TARGET(perconaserverclient DESTINATION ${INSTALL_LIBDIR}/debug) ++ INSTALL_DEBUG_TARGET(mysqlclient DESTINATION ${INSTALL_LIBDIR}/debug) + + INSTALL_DEBUG_TARGET(auth_win_client DESTINATION ${INSTALL_LIBDIR}/debug) + INSTALL_DEBUG_TARGET(clientlib DESTINATION ${INSTALL_LIBDIR}/debug) +@@ -280,7 +280,7 @@ ENDIF() + IF(NOT DISABLE_SHARED) +- # Merge several convenience libraries into one big perconaserverclient ++ # Merge several convenience libraries into one big mysqlclient + # and link them together into shared library. + MERGE_LIBRARIES_SHARED(libmysql ${LIBS} + EXPORTS ${CLIENT_API_FUNCTIONS} ${CLIENT_API_FUNCTIONS_UNDOCUMENTED} +@@ -293,9 +293,9 @@ + SET(OS_SHARED_LIB_VERSION + "${SHARED_LIB_MAJOR_VERSION}.${SHARED_LIB_MINOR_VERSION}.${SHARED_LIB_PATCH_VERSION}") + ENDIF() +- # Name of shared library is perconaserverclient on Unix ++ # Name of shared library is mysqlclient on Unix + SET_TARGET_PROPERTIES(libmysql PROPERTIES +- OUTPUT_NAME perconaserverclient ++ OUTPUT_NAME mysqlclient + VERSION "${OS_SHARED_LIB_VERSION}" + SOVERSION "${SHARED_LIB_MAJOR_VERSION}") + CONFIGURE_FILE(libmysql.ver.in ${CMAKE_CURRENT_BINARY_DIR}/libmysql.ver) +@@ -324,8 +324,8 @@ + PROPERTIES LINK_FLAGS "${libmysql_link_flags}") + ENDIF() + # clean direct output needs to be set several targets have the same name +- #(perconaserverclient in this case) +- SET_TARGET_PROPERTIES(perconaserverclient PROPERTIES CLEAN_DIRECT_OUTPUT 1) ++ #(mysqlclient in this case) ++ SET_TARGET_PROPERTIES(mysqlclient PROPERTIES CLEAN_DIRECT_OUTPUT 1) + SET_TARGET_PROPERTIES(libmysql PROPERTIES CLEAN_DIRECT_OUTPUT 1) + + ENDIF() + @@ -280,9 +280,9 @@ SET(OS_SHARED_LIB_VERSION "${SHARED_LIB_MAJOR_VERSION}.${SHARED_LIB_MINOR_VERSION}.${SHARED_LIB_PATCH_VERSION}") @@ -483,7 +518,7 @@ diff -rup old/testclients/CMakeLists.txt new/testclients/CMakeLists.txt diff -rup old/rapid/plugin/x/CMakeLists.txt new/rapid/plugin/x/CMakeLists.txt --- old/rapid/plugin/x/CMakeLists.txt +++ new/rapid/plugin/x/CMakeLists.txt -@@ -199,7 +199,7 @@ ELSE() +@@ -214,7 +214,7 @@ "NGS_DISABLE_LOGGING;USE_MYSQLX_FULL_PROTO") ENDIF() @@ -491,7 +526,7 @@ diff -rup old/rapid/plugin/x/CMakeLists.txt new/rapid/plugin/x/CMakeLists.txt + TARGET_LINK_LIBRARIES(mysqlxtest mysys strings mysqlclient) TARGET_LINK_LIBRARIES(mysqlxtest ${PROTOBUF_LIBRARY}) - IF( WIN32 ) + IF(INSTALL_MYSQLTESTDIR) diff -rup old/rapid/unittest/gunit/xplugin/CMakeLists.txt new/rapid/unittest/gunit/xplugin/CMakeLists.txt --- old/rapid/unittest/gunit/xplugin/CMakeLists.txt +++ new/rapid/unittest/gunit/xplugin/CMakeLists.txt diff --git a/build-ps/ubuntu/percona-server-server-5.7.install b/build-ps/ubuntu/percona-server-server-5.7.install index 97e07b684bfa..267c3d904178 100644 --- a/build-ps/ubuntu/percona-server-server-5.7.install +++ b/build-ps/ubuntu/percona-server-server-5.7.install @@ -35,7 +35,6 @@ usr/share/man/man1/mysqlbinlog.1 usr/share/man/man1/mysqld_multi.1 usr/share/man/man1/mysqld_safe.1 usr/share/man/man1/mysql.server.1 -usr/share/man/man1/mysql-stress-test.pl.1 usr/share/man/man1/perror.1 usr/share/man/man1/replace.1 usr/share/man/man1/resolveip.1 diff --git a/build-ps/ubuntu/percona-server-test-5.7.install b/build-ps/ubuntu/percona-server-test-5.7.install index a4d69815c20b..c36eed0d60f3 100644 --- a/build-ps/ubuntu/percona-server-test-5.7.install +++ b/build-ps/ubuntu/percona-server-test-5.7.install @@ -2,10 +2,6 @@ usr/bin/mysql_client_test usr/bin/mysqltest usr/bin/mysqlxtest -# manpages -usr/share/man/man1/mysql_client_test.1 -usr/share/man/man1/mysql-test-run.pl.1 -usr/share/man/man1/mysqltest.1 # plugins usr/lib/mysql/plugin/auth_test_plugin.so usr/lib/mysql/plugin/daemon_example.ini From 3e38cf4aef2b80d7a963e5228ec52d75a340e0b7 Mon Sep 17 00:00:00 2001 From: Aakanksha Verma Date: Tue, 29 May 2018 18:11:37 +0530 Subject: [PATCH 0894/1221] BUG#26225783 MYSQL CRASH ON CREATE TABLE (REPRODUCEABLE) -> INNODB: A LONG SEMAPHORE WAIT Post Push fix for test case failure innodb_gis.rtree_rollback1 on weekly-5.7. Reviewed by : Debarun Banerjee over IM. (cherry picked from commit ec6f970e5f1cdf1ea03586f2f30e3f71b133d412) --- storage/innobase/btr/btr0cur.cc | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/storage/innobase/btr/btr0cur.cc b/storage/innobase/btr/btr0cur.cc index a160601b3ebd..dbaa622e0bc2 100644 --- a/storage/innobase/btr/btr0cur.cc +++ b/storage/innobase/btr/btr0cur.cc @@ -5214,7 +5214,7 @@ btr_cur_pessimistic_delete( ulint level; mem_heap_t* heap; ulint* offsets; - bool allow_merge;/* if true, implies we have taken appropriate page + bool allow_merge = true; /* if true, implies we have taken appropriate page latches needed to merge this page.*/ #ifdef UNIV_DEBUG bool parent_latched = false; @@ -5366,7 +5366,10 @@ btr_cur_pessimistic_delete( btr_search_update_hash_on_delete(cursor); - if (page_is_leaf(page)) { + if (page_is_leaf(page) || dict_index_is_spatial(index)) { + /* Set allow merge to true for spatial indexes as the tree is X + locked incase of delete operation on spatial indexes thus avoiding + possibility of upward locking.*/ allow_merge = true; } else { allow_merge = btr_cur_will_modify_tree(index,page,BTR_INTENTION_DELETE, From 005ef9f0ed06df640503afaf65491205c422104b Mon Sep 17 00:00:00 2001 From: Nisha Gopalakrishnan Date: Wed, 30 May 2018 14:54:46 +0530 Subject: [PATCH 0895/1221] BUG#26848813: INDEXED COLUMN CAN'T BE CHANGED FROM VARCHAR(15) TO VARCHAR(40) INSTANTANEOUSLY Analysis ======== Indexed VARCHAR columns are not expanded instantaneously (without index rebuild)for InnoDB tables using INPLACE algorithm. The other problems uncovered as part of this bug are: a) Indexed VARCHAR columns when converted from unpacked keys to packed keys(key size > 8 bytes) by expanding the VARCHAR column was not instantaneous for InnoDB tables using INPLACE algorithm even though pack keys is a no-op for InnoDB tables. b) CREATE/ALTER of InnoDB tables where the index size exceeds the SE limit of 767 bytes for COMPACT or REDUNDANT row_format did not report error in STRICT mode and warning in non-strict mode. SQL layer determines if there has been a change in index definition and sets the appropriate handler flags which helps the SE to determine whether a index rebuild needs to be performed. The 'has_index_def_changed()' did not check if the change in length had a compatible packed data representation and marked it as a change in index by setting the handler flags DROP_INDEX and ADD_INDEX triggering a recreation of indexes in InnoDB. When 'PACK_KEYS' option is not specified, indexes on columns with string types are marked for packing through HA_PACK_KEY. Currently only MyISAM engine supports it. Indexes on columns with length greater than 8 bytes were marked for packing irrespective of the storage engine. Converting the indexes from non-packed to packed i.e expanding the varchar column from lesser than 8 chars to more than 8 chars using ALTER was marked as a change in index definition during the check in 'has_index_def_changed()' even though InnoDB does not support packed keys. The handler API ha_innobase::max_supported_key_part_length() returned an incorrect maximum support key part length since the row format of the table was not taken into account. Hence creation of tables using REDUNDANT/COMPACT row format with index size exceeding the SE limit were allowed. Fix: === a) A new handler flag 'Alter_inplace_info::ALTER_COLUMN_INDEX_LENGTH" is introduced. This is set in 'has_index_def_changed()' when the index length differs due to column modification and has compatible packed data representation while determining if the index definition has changed. b) Introduced a handlerton flag 'HTON_SUPPORTS_PACKED_KEYS' to check for 'PACK_KEYS' support which is currently set for MyISAM engine since it is the only engine which supports packed keys. The 'HTON_SUPPORTS_PACKED_KEYS' is checked prior to setting the index flag 'HA_BINARY_PACK_KEY' for packed keys. Hence for InnoDB the packed key flag for indexes is not set. c) The handler API max_supported_key_part_length() has been modified to take 'create_info' as a parameter from which the row_format can be fetched and appropriate index limit can be computed and returned by the InnoDB implementation of the handler API. More details on the behavior is mentioned in the table below. - Since the index limit is computed correctly and checked at the SQL layer, the error message 'ER_TOO_LONG_KEY' is reported at the SQL layer instead of 'ER_INDEX_COLUMN_TOO_LONG' (which was reported by the handler interface after mapping the error returned by SE). - For COMPACT and REDUNDANT row format, when the index size exceeds 767 bytes, a warning is reported in non-STRICT mode and the index is truncated to fit 767 bytes. In a STRICT mode, an error is reported. This table describes the behavior of INDEX limit, Type of INDEX and behavior under STRICT and NON_STRICT mode. IL===> Index Limit. -------------------------------------------------------------------------------| Row Format |INDEX LIMIT | STRICT MODE(>IL) | NON-STRICT MODE(>IL) | ----------------------|--------------------------------------------------------| Compact/Redundant | 767 bytes | Error | Index truncation(767) | (Non Unique Index) | | | and warning. | -------------------------------------------------------------------------------- Compact/Redundant | 767 bytes | Error | Error | (Unique/Primary Index)| | | | -------------------------------------------------------------------------------- Dynamic/Compressed | 3072 byes | Error | Index truncation(3072) | (Non Unique Index) | | | and warning | -------------------------------------------------------------------------------- Dynamic/Compressed | 3072 bytes| Error | Error | (Unique/Primary Index)| | | | -------------------------------------------------------------------------------- --- mysql-test/r/alter_table.result | 103 +++++++++++++++ mysql-test/r/innodb_mysql_sync.result | 19 +++ .../r/default_row_format_compatibility.result | 2 +- .../suite/innodb/r/innodb-large-prefix.result | 6 +- .../t/default_row_format_compatibility.test | 2 +- .../suite/innodb/t/innodb-large-prefix.test | 6 +- .../innodb_zip/r/index_large_prefix.result | 8 +- .../innodb_zip/r/index_large_prefix_4k.result | 6 +- .../innodb_zip/r/index_large_prefix_8k.result | 8 +- .../r/prefix_index_liftedlimit.result | 4 +- mysql-test/suite/innodb_zip/r/wl6469.result | 7 +- .../innodb_zip/t/index_large_prefix.test | 8 +- .../innodb_zip/t/index_large_prefix_4k.test | 6 +- .../innodb_zip/t/index_large_prefix_8k.test | 8 +- .../t/prefix_index_liftedlimit.test | 4 +- mysql-test/suite/innodb_zip/t/wl6469.test | 6 +- mysql-test/t/alter_table.test | 123 ++++++++++++++++++ mysql-test/t/innodb_mysql_sync.test | 28 ++++ sql/ha_ndbcluster.cc | 5 +- sql/ha_ndbcluster.h | 4 +- sql/handler.cc | 3 +- sql/handler.h | 19 ++- sql/sql_table.cc | 40 ++++-- sql/sql_tmp_table.cc | 4 +- storage/archive/ha_archive.h | 6 +- storage/blackhole/ha_blackhole.h | 6 +- storage/federated/ha_federated.h | 6 +- storage/heap/ha_heap.h | 6 +- storage/innobase/handler/ha_innodb.cc | 17 ++- storage/innobase/handler/ha_innodb.h | 4 +- storage/innobase/handler/handler0alter.cc | 3 +- storage/myisam/ha_myisam.cc | 3 +- storage/myisam/ha_myisam.h | 6 +- storage/myisammrg/ha_myisammrg.h | 6 +- storage/partition/ha_partition.cc | 21 ++- storage/partition/ha_partition.h | 6 +- 36 files changed, 432 insertions(+), 87 deletions(-) diff --git a/mysql-test/r/alter_table.result b/mysql-test/r/alter_table.result index f91e0b3bf60a..459ded4ae553 100644 --- a/mysql-test/r/alter_table.result +++ b/mysql-test/r/alter_table.result @@ -3683,3 +3683,106 @@ ERROR 22004: Invalid use of NULL value ALTER TABLE t2 MODIFY fld0 POINT NOT NULL; ERROR 22004: Invalid use of NULL value DROP TABLE t1, t2; +# +# BUG#26848813: INDEXED COLUMN CAN'T BE CHANGED FROM VARCHAR(15) +# TO VARCHAR(40) INSTANTANEOUSLY +SET @orig_sql_mode= @@sql_mode; +SET @orig_innodb_large_prefix= @@global.innodb_large_prefix; +SET GLOBAL innodb_large_prefix= ON; +Warnings: +Warning 131 Using innodb_large_prefix is deprecated and the parameter may be removed in future releases. See http://dev.mysql.com/doc/refman/5.7/en/innodb-file-format.html +# Tests where an error is reported under strict mode when the index +# limit exceeds the maximum supported length by SE. +CREATE TABLE t1 (fld1 VARCHAR(768), KEY(fld1)) CHARSET latin1 ENGINE =InnoDB +ROW_FORMAT= COMPACT; +ERROR 42000: Specified key was too long; max key length is 767 bytes +CREATE TABLE t2 (fld1 VARCHAR(3073), KEY(fld1)) CHARSET latin1 ENGINE= InnoDB; +ERROR 42000: Specified key was too long; max key length is 3072 bytes +# Test with innodb prefix indexes where the index limit is 767 bytes +CREATE TABLE t1 (fld1 VARCHAR(767), KEY(fld1)) CHARSET latin1 ENGINE=INNODB +ROW_FORMAT=COMPACT; +ALTER TABLE t1 MODIFY fld1 VARCHAR(768), ALGORITHM= INPLACE; +ERROR 42000: Specified key was too long; max key length is 767 bytes +ALTER TABLE t1 MODIFY fld1 VARCHAR(768), ALGORITHM= COPY; +ERROR 42000: Specified key was too long; max key length is 767 bytes +# Test with innodb prefix indexes where the index limit is 3072 bytes +CREATE TABLE t2 (fld1 VARCHAR(3072), KEY(fld1)) CHARSET latin1 ENGINE=INNODB +ROW_FORMAT=DYNAMIC; +ALTER TABLE t2 MODIFY fld1 VARCHAR(3073), ALGORITHM= INPLACE; +ERROR 42000: Specified key was too long; max key length is 3072 bytes +ALTER TABLE t2 MODIFY fld1 VARCHAR(3073), ALGORITHM= COPY; +ERROR 42000: Specified key was too long; max key length is 3072 bytes +# Tests with innodb_large_prefix disabled and strict mode. +SET GLOBAL innodb_large_prefix= OFF; +Warnings: +Warning 131 Using innodb_large_prefix is deprecated and the parameter may be removed in future releases. See http://dev.mysql.com/doc/refman/5.7/en/innodb-file-format.html +CREATE TABLE t3 (fld1 VARCHAR(3072), KEY(fld1)) CHARSET latin1 ENGINE= InnoDB; +ERROR 42000: Specified key was too long; max key length is 767 bytes +DROP TABLE t1, t2; +SET sql_mode= ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET GLOBAL innodb_large_prefix= ON; +Warnings: +Warning 131 Using innodb_large_prefix is deprecated and the parameter may be removed in future releases. See http://dev.mysql.com/doc/refman/5.7/en/innodb-file-format.html +# Test where the indexes are truncated to fit the index limit and +# a warning is reported under non-strict mode when the index exceeds +# the SE limit. +CREATE TABLE t1 (fld1 VARCHAR(768), KEY(fld1)) ENGINE= InnoDB +ROW_FORMAT=COMPACT; +Warnings: +Warning 1071 Specified key was too long; max key length is 767 bytes +CREATE TABLE t2 (fld1 VARCHAR(3073), KEY(fld1)) ENGINE= InnoDB; +Warnings: +Warning 1071 Specified key was too long; max key length is 3072 bytes +# Test with innodb prefix indexes where the index limit is 767 bytes. +CREATE TABLE t3 (fld1 VARCHAR(767), KEY(fld1))ENGINE=INNODB ROW_FORMAT=COMPACT; +ALTER TABLE t3 MODIFY fld1 VARCHAR(768), ALGORITHM= INPLACE; +Warnings: +Warning 1071 Specified key was too long; max key length is 767 bytes +ALTER TABLE t3 MODIFY fld1 VARCHAR(800), ALGORITHM= COPY; +# Test with innodb prefix indexes where the index limit is 3072 bytes. +CREATE TABLE t4 (fld1 VARCHAR(3072), KEY(fld1))ENGINE=INNODB +ROW_FORMAT=DYNAMIC; +ALTER TABLE t4 MODIFY fld1 VARCHAR(3073), ALGORITHM= INPLACE; +Warnings: +Warning 1071 Specified key was too long; max key length is 3072 bytes +ALTER TABLE t4 MODIFY fld1 VARCHAR(3074), ALGORITHM= COPY; +# For unique and primary keys, an error is reported even in non-strict +# mode. +CREATE TABLE t5(fld1 VARCHAR(768) PRIMARY KEY) ENGINE= InnoDB +ROW_FORMAT=COMPACT; +ERROR 42000: Specified key was too long; max key length is 767 bytes +CREATE TABLE t5(fld1 VARCHAR(3073), UNIQUE KEY(fld1)) ENGINE= InnoDB; +ERROR 42000: Specified key was too long; max key length is 3072 bytes +# Tests with innodb_large_prefix disabled and strict mode. +SET GLOBAL innodb_large_prefix= OFF; +Warnings: +Warning 131 Using innodb_large_prefix is deprecated and the parameter may be removed in future releases. See http://dev.mysql.com/doc/refman/5.7/en/innodb-file-format.html +CREATE TABLE t5 (fld1 VARCHAR(3072), KEY(fld1)) CHARSET latin1 ENGINE= InnoDB; +Warnings: +Warning 1071 Specified key was too long; max key length is 767 bytes +DROP TABLE t1, t2, t3, t4, t5; +SET sql_mode= @orig_sql_mode; +SET GLOBAL innodb_large_prefix= ON; +# Tests added for coverage. +CREATE TABLE t1(fld1 VARCHAR(3), KEY(fld1)) ENGINE=MYISAM; +# Conversion of unpacked keys to packed keys reports +# error for INPLACE Alter. +ALTER TABLE t1 MODIFY fld1 VARCHAR(10), ALGORITHM=INPLACE; +ERROR 0A000: ALGORITHM=INPLACE is not supported for this operation. Try ALGORITHM=COPY. +# Succeeds with index rebuild. +ALTER TABLE t1 MODIFY fld1 VARCHAR(10), ALGORITHM=COPY; +# Succeeds since the row format is dynamic. +CREATE TABLE t2(fld1 VARCHAR(768), KEY(fld1)) ENGINE= InnoDB ROW_FORMAT= DYNAMIC; +# An error is reported when the index exceeds the column size +# in both strict and non-strict mode. +ALTER TABLE t2 ADD INDEX idx1(fld1(769)); +ERROR HY000: Incorrect prefix key; the used key part isn't a string, the used length is longer than the key part, or the storage engine doesn't support unique prefix keys +SET sql_mode= ''; +ALTER TABLE t2 ADD INDEX idx1(fld1(769)); +ERROR HY000: Incorrect prefix key; the used key part isn't a string, the used length is longer than the key part, or the storage engine doesn't support unique prefix keys +# Cleanup. +DROP TABLE t1, t2; +SET sql_mode= @orig_sql_mode; +SET GLOBAL innodb_large_prefix= @orig_innodb_large_prefix; diff --git a/mysql-test/r/innodb_mysql_sync.result b/mysql-test/r/innodb_mysql_sync.result index 3a400e484f7c..960aec1a3d15 100644 --- a/mysql-test/r/innodb_mysql_sync.result +++ b/mysql-test/r/innodb_mysql_sync.result @@ -746,3 +746,22 @@ ALTER TABLE t1 MODIFY fld1 CHAR(20); #cleanup DROP TABLE t1; SET debug="-d,innodb_index_drop_count_zero"; +# +# BUG#26848813: INDEXED COLUMN CAN'T BE CHANGED FROM VARCHAR(15) +# TO VARCHAR(40) INSTANTANEOUSLY +CREATE TABLE t1(fld1 VARCHAR(5), KEY(fld1)) ENGINE= InnoDB; +SET DEBUG="+d,innodb_index_drop_count_zero"; +# Without patch, an error is reported. +ALTER TABLE t1 MODIFY fld1 VARCHAR(7), ALGORITHM= INPLACE; +# Scenario where non-packed keys is converted to packed keys +# before the patch, an error is reported. +ALTER TABLE t1 MODIFY fld1 VARCHAR(9), ALGORITHM= INPLACE; +SET DEBUG="-d,innodb_index_drop_count_zero"; +# Tests added for covering cases where rebuild is required. +# Reducing the size of the field. +ALTER TABLE t1 MODIFY fld1 VARCHAR(3), ALGORITHM= INPLACE; +ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY. +# Increasing the size of the field to boundary condition. +ALTER TABLE t1 MODIFY fld1 VARCHAR(256), ALGORITHM= INPLACE; +ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY. +DROP TABLE t1; diff --git a/mysql-test/suite/innodb/r/default_row_format_compatibility.result b/mysql-test/suite/innodb/r/default_row_format_compatibility.result index e98b60a9f72d..72140352b00a 100644 --- a/mysql-test/suite/innodb/r/default_row_format_compatibility.result +++ b/mysql-test/suite/innodb/r/default_row_format_compatibility.result @@ -72,7 +72,7 @@ Table Name Tablespace Table Flags Columns Row Format Zip Size Space Type test/tab test/tab 33 5 Dynamic 0 Single SET GLOBAL innodb_default_row_format=COMPACT; ALTER TABLE tab ROW_FORMAT=COMPACT; -ERROR HY000: Index column size too large. The maximum column size is 767 bytes. +ERROR 42000: Specified key was too long; max key length is 767 bytes DROP TABLE tab; SET GLOBAL innodb_default_row_format=Default; SELECT @@innodb_default_row_format; diff --git a/mysql-test/suite/innodb/r/innodb-large-prefix.result b/mysql-test/suite/innodb/r/innodb-large-prefix.result index f691d59f56f4..311c1742870a 100644 --- a/mysql-test/suite/innodb/r/innodb-large-prefix.result +++ b/mysql-test/suite/innodb/r/innodb-large-prefix.result @@ -5,14 +5,14 @@ CREATE TABLE t1(a int not null,key(a,a)) ENGINE=InnoDB DEFAULT CHARSET=latin1; ERROR 42S21: Duplicate column name 'a' CREATE TABLE t1(a int,b text,key(b(768))) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT; -ERROR HY000: Index column size too large. The maximum column size is 767 bytes. +ERROR 42000: Specified key was too long; max key length is 767 bytes CREATE TABLE t1(a int not null,b text) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT; INSERT INTO t1 VALUES (1,''),(2,''),(3,''),(4,''),(5,''),(6,''),(7,''); CREATE INDEX t1aa ON t1(a,a); ERROR 42S21: Duplicate column name 'a' CREATE INDEX t1b ON t1(b(768)); -ERROR HY000: Index column size too large. The maximum column size is 767 bytes. +ERROR 42000: Specified key was too long; max key length is 767 bytes SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( @@ -35,7 +35,7 @@ INSERT INTO t2 VALUES (1,''),(2,''),(3,''),(4,''),(5,''),(6,''),(7,''); CREATE INDEX t2aa ON t2(a,a); ERROR 42S21: Duplicate column name 'a' CREATE INDEX t2b ON t2(b(768)); -ERROR HY000: Index column size too large. The maximum column size is 767 bytes. +ERROR 42000: Specified key was too long; max key length is 767 bytes SELECT * FROM t2; a b 1 diff --git a/mysql-test/suite/innodb/t/default_row_format_compatibility.test b/mysql-test/suite/innodb/t/default_row_format_compatibility.test index 0fce0c4e5157..9753350fa27b 100644 --- a/mysql-test/suite/innodb/t/default_row_format_compatibility.test +++ b/mysql-test/suite/innodb/t/default_row_format_compatibility.test @@ -160,7 +160,7 @@ SELECT * FROM tab; SET GLOBAL innodb_default_row_format=COMPACT; # Check error ERROR 1709 (HY000): Index column size too large --- error ER_INDEX_COLUMN_TOO_LONG +--error ER_TOO_LONG_KEY ALTER TABLE tab ROW_FORMAT=COMPACT; # Cleanup diff --git a/mysql-test/suite/innodb/t/innodb-large-prefix.test b/mysql-test/suite/innodb/t/innodb-large-prefix.test index 57dc11002af0..b1e9b7c3cb5d 100644 --- a/mysql-test/suite/innodb/t/innodb-large-prefix.test +++ b/mysql-test/suite/innodb/t/innodb-large-prefix.test @@ -9,7 +9,7 @@ --error ER_DUP_FIELDNAME CREATE TABLE t1(a int not null,key(a,a)) ENGINE=InnoDB DEFAULT CHARSET=latin1; --- error ER_INDEX_COLUMN_TOO_LONG +-- error ER_TOO_LONG_KEY CREATE TABLE t1(a int,b text,key(b(768))) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT; CREATE TABLE t1(a int not null,b text) ENGINE=InnoDB DEFAULT CHARSET=latin1 @@ -17,7 +17,7 @@ ROW_FORMAT=COMPACT; INSERT INTO t1 VALUES (1,''),(2,''),(3,''),(4,''),(5,''),(6,''),(7,''); --error ER_DUP_FIELDNAME CREATE INDEX t1aa ON t1(a,a); --- error ER_INDEX_COLUMN_TOO_LONG +-- error ER_TOO_LONG_KEY CREATE INDEX t1b ON t1(b(768)); SHOW CREATE TABLE t1; SELECT * FROM t1; @@ -28,7 +28,7 @@ ROW_FORMAT=COMPACT; INSERT INTO t2 VALUES (1,''),(2,''),(3,''),(4,''),(5,''),(6,''),(7,''); --error ER_DUP_FIELDNAME CREATE INDEX t2aa ON t2(a,a); --- error ER_INDEX_COLUMN_TOO_LONG +-- error ER_TOO_LONG_KEY CREATE INDEX t2b ON t2(b(768)); SELECT * FROM t2; DROP TABLE t2; diff --git a/mysql-test/suite/innodb_zip/r/index_large_prefix.result b/mysql-test/suite/innodb_zip/r/index_large_prefix.result index 7f466e957f35..f4a43c413a01 100644 --- a/mysql-test/suite/innodb_zip/r/index_large_prefix.result +++ b/mysql-test/suite/innodb_zip/r/index_large_prefix.result @@ -494,11 +494,11 @@ drop table worklog5743; ### Test 6 ### create table worklog5743(a TEXT not null, primary key (a(1000))) row_format=compact; -ERROR HY000: Index column size too large. The maximum column size is 767 bytes. +ERROR 42000: Specified key was too long; max key length is 767 bytes create table worklog5743(a TEXT) row_format=compact; create index idx on worklog5743(a(768)); -ERROR HY000: Index column size too large. The maximum column size is 767 bytes. +ERROR 42000: Specified key was too long; max key length is 767 bytes create index idx on worklog5743(a(767)); insert into worklog5743 values(repeat("a", 20000)); begin; @@ -546,12 +546,12 @@ drop table worklog5743; SET sql_mode= default; create table worklog5743(a TEXT not null) ROW_FORMAT=REDUNDANT; create index idx on worklog5743(a(768)); -ERROR HY000: Index column size too large. The maximum column size is 767 bytes. +ERROR 42000: Specified key was too long; max key length is 767 bytes create index idx2 on worklog5743(a(767)); drop table worklog5743; create table worklog5743(a TEXT not null) ROW_FORMAT=COMPACT; create index idx on worklog5743(a(768)); -ERROR HY000: Index column size too large. The maximum column size is 767 bytes. +ERROR 42000: Specified key was too long; max key length is 767 bytes create index idx2 on worklog5743(a(767)); drop table worklog5743; SET GLOBAL innodb_file_per_table=1; diff --git a/mysql-test/suite/innodb_zip/r/index_large_prefix_4k.result b/mysql-test/suite/innodb_zip/r/index_large_prefix_4k.result index 36d232f1e614..923e77892a7a 100644 --- a/mysql-test/suite/innodb_zip/r/index_large_prefix_4k.result +++ b/mysql-test/suite/innodb_zip/r/index_large_prefix_4k.result @@ -362,7 +362,7 @@ create table worklog5743(a TEXT not null, primary key (a(1000))); ERROR 42000: Specified key was too long; max key length is 768 bytes create table worklog5743(a TEXT) ROW_FORMAT=COMPACT; create index idx on worklog5743(a(768)); -ERROR HY000: Index column size too large. The maximum column size is 767 bytes. +ERROR 42000: Specified key was too long; max key length is 767 bytes create index idx on worklog5743(a(767)); insert into worklog5743 values(repeat("a", 20000)); begin; @@ -417,12 +417,12 @@ insert into worklog5743 values(repeat("a", 768)); drop table worklog5743; create table worklog5743(a TEXT not null) ROW_FORMAT=REDUNDANT; create index idx on worklog5743(a(768)); -ERROR HY000: Index column size too large. The maximum column size is 767 bytes. +ERROR 42000: Specified key was too long; max key length is 767 bytes create index idx2 on worklog5743(a(767)); drop table worklog5743; create table worklog5743(a TEXT not null) ROW_FORMAT=COMPACT; create index idx on worklog5743(a(768)); -ERROR HY000: Index column size too large. The maximum column size is 767 bytes. +ERROR 42000: Specified key was too long; max key length is 767 bytes create index idx2 on worklog5743(a(767)); drop table worklog5743; SET GLOBAL innodb_file_per_table=1; diff --git a/mysql-test/suite/innodb_zip/r/index_large_prefix_8k.result b/mysql-test/suite/innodb_zip/r/index_large_prefix_8k.result index c9ee289123ee..f7eb850524a1 100644 --- a/mysql-test/suite/innodb_zip/r/index_large_prefix_8k.result +++ b/mysql-test/suite/innodb_zip/r/index_large_prefix_8k.result @@ -404,10 +404,10 @@ drop table worklog5743; ### Test 6 ### create table worklog5743(a TEXT not null, primary key (a(1000))) row_format=compact; -ERROR HY000: Index column size too large. The maximum column size is 767 bytes. +ERROR 42000: Specified key was too long; max key length is 767 bytes create table worklog5743(a TEXT) row_format=compact; create index idx on worklog5743(a(768)); -ERROR HY000: Index column size too large. The maximum column size is 767 bytes. +ERROR 42000: Specified key was too long; max key length is 767 bytes create index idx on worklog5743(a(767)); insert into worklog5743 values(repeat("a", 20000)); begin; @@ -455,12 +455,12 @@ worklog5743 CREATE TABLE `worklog5743` ( drop table worklog5743; create table worklog5743(a TEXT not null) ROW_FORMAT=REDUNDANT; create index idx on worklog5743(a(768)); -ERROR HY000: Index column size too large. The maximum column size is 767 bytes. +ERROR 42000: Specified key was too long; max key length is 767 bytes create index idx2 on worklog5743(a(767)); drop table worklog5743; create table worklog5743(a TEXT not null) ROW_FORMAT=COMPACT; create index idx on worklog5743(a(768)); -ERROR HY000: Index column size too large. The maximum column size is 767 bytes. +ERROR 42000: Specified key was too long; max key length is 767 bytes create index idx2 on worklog5743(a(767)); drop table worklog5743; SET GLOBAL innodb_file_per_table=1; diff --git a/mysql-test/suite/innodb_zip/r/prefix_index_liftedlimit.result b/mysql-test/suite/innodb_zip/r/prefix_index_liftedlimit.result index fd2def62c494..fd9b2ac93c5e 100644 --- a/mysql-test/suite/innodb_zip/r/prefix_index_liftedlimit.result +++ b/mysql-test/suite/innodb_zip/r/prefix_index_liftedlimit.result @@ -30,9 +30,9 @@ col_1_varchar = REPEAT("c", 4000) 0 1 ALTER TABLE worklog5743 ROW_FORMAT=REDUNDANT; -ERROR HY000: Index column size too large. The maximum column size is 767 bytes. +ERROR 42000: Specified key was too long; max key length is 767 bytes ALTER TABLE worklog5743 ROW_FORMAT=COMPACT; -ERROR HY000: Index column size too large. The maximum column size is 767 bytes. +ERROR 42000: Specified key was too long; max key length is 767 bytes ALTER TABLE worklog5743 ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=16; DROP TABLE worklog5743; CREATE TABLE worklog5743 ( diff --git a/mysql-test/suite/innodb_zip/r/wl6469.result b/mysql-test/suite/innodb_zip/r/wl6469.result index ad328188efbd..1c64e20e23a5 100644 --- a/mysql-test/suite/innodb_zip/r/wl6469.result +++ b/mysql-test/suite/innodb_zip/r/wl6469.result @@ -270,8 +270,9 @@ SET sql_mode = default; set global innodb_large_prefix = 1; Warnings: Warning 131 Using innodb_large_prefix is deprecated and the parameter may be removed in future releases. See http://dev.mysql.com/doc/refman/5.7/en/innodb-file-format.html -SET sql_mode='NO_ENGINE_SUBSTITUTION'; +SET sql_mode='NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES'; Warnings: +Warning 3135 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release. Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET innodb_strict_mode=OFF; create temporary table t ( @@ -279,7 +280,7 @@ a int not null, b blob not null, index sk (b(3021)) ) row_format = compact engine=innodb; -ERROR HY000: Index column size too large. The maximum column size is 767 bytes. +ERROR 42000: Specified key was too long; max key length is 767 bytes create temporary table t ( a int not null, b blob not null, @@ -299,7 +300,7 @@ a int not null, b blob not null, index sk (b(3021)) ) row_format = compact engine=innodb; -ERROR HY000: Index column size too large. The maximum column size is 767 bytes. +ERROR 42000: Specified key was too long; max key length is 767 bytes create temporary table t ( a int not null, b blob not null, diff --git a/mysql-test/suite/innodb_zip/t/index_large_prefix.test b/mysql-test/suite/innodb_zip/t/index_large_prefix.test index 532ffc4b60e5..694eb69bdd77 100644 --- a/mysql-test/suite/innodb_zip/t/index_large_prefix.test +++ b/mysql-test/suite/innodb_zip/t/index_large_prefix.test @@ -370,7 +370,7 @@ drop table worklog5743; -- echo ### Test 6 ### # Create a table with old format, and the limit is 768 bytes. --- error ER_INDEX_COLUMN_TOO_LONG +-- error ER_TOO_LONG_KEY create table worklog5743(a TEXT not null, primary key (a(1000))) row_format=compact; @@ -378,7 +378,7 @@ create table worklog5743(a TEXT) row_format=compact; # Excercise the column length check in ha_innobase::add_index() --- error ER_INDEX_COLUMN_TOO_LONG +-- error ER_TOO_LONG_KEY create index idx on worklog5743(a(768)); # This should be successful @@ -426,13 +426,13 @@ SET sql_mode= default; # We have a limit of 767 bytes for Antelope tables create table worklog5743(a TEXT not null) ROW_FORMAT=REDUNDANT; --- error ER_INDEX_COLUMN_TOO_LONG +-- error ER_TOO_LONG_KEY create index idx on worklog5743(a(768)); create index idx2 on worklog5743(a(767)); drop table worklog5743; create table worklog5743(a TEXT not null) ROW_FORMAT=COMPACT; --- error ER_INDEX_COLUMN_TOO_LONG +-- error ER_TOO_LONG_KEY create index idx on worklog5743(a(768)); create index idx2 on worklog5743(a(767)); drop table worklog5743; diff --git a/mysql-test/suite/innodb_zip/t/index_large_prefix_4k.test b/mysql-test/suite/innodb_zip/t/index_large_prefix_4k.test index a0229abc4f8f..0d4b86d6a4de 100644 --- a/mysql-test/suite/innodb_zip/t/index_large_prefix_4k.test +++ b/mysql-test/suite/innodb_zip/t/index_large_prefix_4k.test @@ -334,7 +334,7 @@ create table worklog5743(a TEXT not null, primary key (a(1000))); create table worklog5743(a TEXT) ROW_FORMAT=COMPACT; # Excercise the column length check in ha_innobase::add_index() --- error ER_INDEX_COLUMN_TOO_LONG +-- error ER_TOO_LONG_KEY create index idx on worklog5743(a(768)); # This should be successful @@ -385,13 +385,13 @@ drop table worklog5743; # We have a limit of 767 bytes for Antelope tables create table worklog5743(a TEXT not null) ROW_FORMAT=REDUNDANT; --- error ER_INDEX_COLUMN_TOO_LONG +-- error ER_TOO_LONG_KEY create index idx on worklog5743(a(768)); create index idx2 on worklog5743(a(767)); drop table worklog5743; create table worklog5743(a TEXT not null) ROW_FORMAT=COMPACT; --- error ER_INDEX_COLUMN_TOO_LONG +-- error ER_TOO_LONG_KEY create index idx on worklog5743(a(768)); create index idx2 on worklog5743(a(767)); drop table worklog5743; diff --git a/mysql-test/suite/innodb_zip/t/index_large_prefix_8k.test b/mysql-test/suite/innodb_zip/t/index_large_prefix_8k.test index 00a97249a957..c940915c01ca 100644 --- a/mysql-test/suite/innodb_zip/t/index_large_prefix_8k.test +++ b/mysql-test/suite/innodb_zip/t/index_large_prefix_8k.test @@ -360,14 +360,14 @@ drop table worklog5743; -- echo ### Test 6 ### # Create a table with old format, and the limit is 768 bytes. --- error ER_INDEX_COLUMN_TOO_LONG +-- error ER_TOO_LONG_KEY create table worklog5743(a TEXT not null, primary key (a(1000))) row_format=compact; create table worklog5743(a TEXT) row_format=compact; # Excercise the column length check in ha_innobase::add_index() --- error ER_INDEX_COLUMN_TOO_LONG +-- error ER_TOO_LONG_KEY create index idx on worklog5743(a(768)); # This should be successful @@ -414,13 +414,13 @@ drop table worklog5743; # We have a limit of 767 bytes for Antelope tables create table worklog5743(a TEXT not null) ROW_FORMAT=REDUNDANT; --- error ER_INDEX_COLUMN_TOO_LONG +-- error ER_TOO_LONG_KEY create index idx on worklog5743(a(768)); create index idx2 on worklog5743(a(767)); drop table worklog5743; create table worklog5743(a TEXT not null) ROW_FORMAT=COMPACT; --- error ER_INDEX_COLUMN_TOO_LONG +-- error ER_TOO_LONG_KEY create index idx on worklog5743(a(768)); create index idx2 on worklog5743(a(767)); drop table worklog5743; diff --git a/mysql-test/suite/innodb_zip/t/prefix_index_liftedlimit.test b/mysql-test/suite/innodb_zip/t/prefix_index_liftedlimit.test index dfc3777c58a0..9c21b7982984 100644 --- a/mysql-test/suite/innodb_zip/t/prefix_index_liftedlimit.test +++ b/mysql-test/suite/innodb_zip/t/prefix_index_liftedlimit.test @@ -47,9 +47,9 @@ WHERE col_1_varchar = REPEAT("c", 4000) AND col_2_varchar = REPEAT("o", 4000); INSERT INTO worklog5743 VALUES(REPEAT("a", 4000),REPEAT("o", 4000)); DELETE FROM worklog5743 WHERE col_1_varchar = REPEAT("b", 4000); SELECT col_1_varchar = REPEAT("c", 4000) FROM worklog5743; ---error ER_INDEX_COLUMN_TOO_LONG +--error ER_TOO_LONG_KEY ALTER TABLE worklog5743 ROW_FORMAT=REDUNDANT; ---error ER_INDEX_COLUMN_TOO_LONG +--error ER_TOO_LONG_KEY ALTER TABLE worklog5743 ROW_FORMAT=COMPACT; ALTER TABLE worklog5743 ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=16; DROP TABLE worklog5743; diff --git a/mysql-test/suite/innodb_zip/t/wl6469.test b/mysql-test/suite/innodb_zip/t/wl6469.test index ebd5f727009f..1c49d3b1e775 100644 --- a/mysql-test/suite/innodb_zip/t/wl6469.test +++ b/mysql-test/suite/innodb_zip/t/wl6469.test @@ -219,10 +219,10 @@ SET sql_mode = default; # set global innodb_large_prefix = 1; # -SET sql_mode='NO_ENGINE_SUBSTITUTION'; +SET sql_mode='NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES'; SET innodb_strict_mode=OFF; --disable_warnings ---error ER_INDEX_COLUMN_TOO_LONG +--error ER_TOO_LONG_KEY create temporary table t ( a int not null, b blob not null, @@ -246,7 +246,7 @@ drop table t; SET GLOBAL innodb_large_prefix=default; set global innodb_file_per_table = 0; # ---error ER_INDEX_COLUMN_TOO_LONG +--error ER_TOO_LONG_KEY create temporary table t ( a int not null, b blob not null, diff --git a/mysql-test/t/alter_table.test b/mysql-test/t/alter_table.test index 4b7a9aba0741..e5832548829c 100644 --- a/mysql-test/t/alter_table.test +++ b/mysql-test/t/alter_table.test @@ -3044,3 +3044,126 @@ ALTER TABLE t1 MODIFY fld0 DATETIME NOT NULL; ALTER TABLE t2 MODIFY fld0 POINT NOT NULL; DROP TABLE t1, t2; + + +--echo # +--echo # BUG#26848813: INDEXED COLUMN CAN'T BE CHANGED FROM VARCHAR(15) +--echo # TO VARCHAR(40) INSTANTANEOUSLY + +SET @orig_sql_mode= @@sql_mode; +SET @orig_innodb_large_prefix= @@global.innodb_large_prefix; + +SET GLOBAL innodb_large_prefix= ON; + +--echo # Tests where an error is reported under strict mode when the index +--echo # limit exceeds the maximum supported length by SE. + +--error ER_TOO_LONG_KEY +CREATE TABLE t1 (fld1 VARCHAR(768), KEY(fld1)) CHARSET latin1 ENGINE =InnoDB +ROW_FORMAT= COMPACT; + +--error ER_TOO_LONG_KEY +CREATE TABLE t2 (fld1 VARCHAR(3073), KEY(fld1)) CHARSET latin1 ENGINE= InnoDB; + +--echo # Test with innodb prefix indexes where the index limit is 767 bytes +CREATE TABLE t1 (fld1 VARCHAR(767), KEY(fld1)) CHARSET latin1 ENGINE=INNODB +ROW_FORMAT=COMPACT; + +--error ER_TOO_LONG_KEY +ALTER TABLE t1 MODIFY fld1 VARCHAR(768), ALGORITHM= INPLACE; + +--error ER_TOO_LONG_KEY +ALTER TABLE t1 MODIFY fld1 VARCHAR(768), ALGORITHM= COPY; + +--echo # Test with innodb prefix indexes where the index limit is 3072 bytes +CREATE TABLE t2 (fld1 VARCHAR(3072), KEY(fld1)) CHARSET latin1 ENGINE=INNODB +ROW_FORMAT=DYNAMIC; + +--error ER_TOO_LONG_KEY +ALTER TABLE t2 MODIFY fld1 VARCHAR(3073), ALGORITHM= INPLACE; + +--error ER_TOO_LONG_KEY +ALTER TABLE t2 MODIFY fld1 VARCHAR(3073), ALGORITHM= COPY; + +--echo # Tests with innodb_large_prefix disabled and strict mode. +SET GLOBAL innodb_large_prefix= OFF; +--error ER_TOO_LONG_KEY +CREATE TABLE t3 (fld1 VARCHAR(3072), KEY(fld1)) CHARSET latin1 ENGINE= InnoDB; + +DROP TABLE t1, t2; + +SET sql_mode= ''; +SET GLOBAL innodb_large_prefix= ON; + +--enable_warnings + +--echo # Test where the indexes are truncated to fit the index limit and +--echo # a warning is reported under non-strict mode when the index exceeds +--echo # the SE limit. +CREATE TABLE t1 (fld1 VARCHAR(768), KEY(fld1)) ENGINE= InnoDB +ROW_FORMAT=COMPACT; +CREATE TABLE t2 (fld1 VARCHAR(3073), KEY(fld1)) ENGINE= InnoDB; + +--echo # Test with innodb prefix indexes where the index limit is 767 bytes. +CREATE TABLE t3 (fld1 VARCHAR(767), KEY(fld1))ENGINE=INNODB ROW_FORMAT=COMPACT; + +ALTER TABLE t3 MODIFY fld1 VARCHAR(768), ALGORITHM= INPLACE; + +ALTER TABLE t3 MODIFY fld1 VARCHAR(800), ALGORITHM= COPY; + +--echo # Test with innodb prefix indexes where the index limit is 3072 bytes. +CREATE TABLE t4 (fld1 VARCHAR(3072), KEY(fld1))ENGINE=INNODB +ROW_FORMAT=DYNAMIC; + +ALTER TABLE t4 MODIFY fld1 VARCHAR(3073), ALGORITHM= INPLACE; + +ALTER TABLE t4 MODIFY fld1 VARCHAR(3074), ALGORITHM= COPY; + +--echo # For unique and primary keys, an error is reported even in non-strict +--echo # mode. + +--error ER_TOO_LONG_KEY +CREATE TABLE t5(fld1 VARCHAR(768) PRIMARY KEY) ENGINE= InnoDB +ROW_FORMAT=COMPACT; + +--error ER_TOO_LONG_KEY +CREATE TABLE t5(fld1 VARCHAR(3073), UNIQUE KEY(fld1)) ENGINE= InnoDB; + +--echo # Tests with innodb_large_prefix disabled and strict mode. +SET GLOBAL innodb_large_prefix= OFF; +CREATE TABLE t5 (fld1 VARCHAR(3072), KEY(fld1)) CHARSET latin1 ENGINE= InnoDB; + +--disable_warnings +DROP TABLE t1, t2, t3, t4, t5; + +SET sql_mode= @orig_sql_mode; +SET GLOBAL innodb_large_prefix= ON; + +--echo # Tests added for coverage. +CREATE TABLE t1(fld1 VARCHAR(3), KEY(fld1)) ENGINE=MYISAM; + +--echo # Conversion of unpacked keys to packed keys reports +--echo # error for INPLACE Alter. +--error ER_ALTER_OPERATION_NOT_SUPPORTED +ALTER TABLE t1 MODIFY fld1 VARCHAR(10), ALGORITHM=INPLACE; + +--echo # Succeeds with index rebuild. +ALTER TABLE t1 MODIFY fld1 VARCHAR(10), ALGORITHM=COPY; + +--echo # Succeeds since the row format is dynamic. +CREATE TABLE t2(fld1 VARCHAR(768), KEY(fld1)) ENGINE= InnoDB ROW_FORMAT= DYNAMIC; + +--echo # An error is reported when the index exceeds the column size +--echo # in both strict and non-strict mode. +--error ER_WRONG_SUB_KEY +ALTER TABLE t2 ADD INDEX idx1(fld1(769)); + +SET sql_mode= ''; + +--error ER_WRONG_SUB_KEY +ALTER TABLE t2 ADD INDEX idx1(fld1(769)); + +--echo # Cleanup. +DROP TABLE t1, t2; +SET sql_mode= @orig_sql_mode; +SET GLOBAL innodb_large_prefix= @orig_innodb_large_prefix; diff --git a/mysql-test/t/innodb_mysql_sync.test b/mysql-test/t/innodb_mysql_sync.test index 364e1ab926be..166122697cdf 100644 --- a/mysql-test/t/innodb_mysql_sync.test +++ b/mysql-test/t/innodb_mysql_sync.test @@ -1098,6 +1098,34 @@ DROP TABLE t1; SET debug="-d,innodb_index_drop_count_zero"; +--echo # +--echo # BUG#26848813: INDEXED COLUMN CAN'T BE CHANGED FROM VARCHAR(15) +--echo # TO VARCHAR(40) INSTANTANEOUSLY + +CREATE TABLE t1(fld1 VARCHAR(5), KEY(fld1)) ENGINE= InnoDB; +SET DEBUG="+d,innodb_index_drop_count_zero"; + +--echo # Without patch, an error is reported. +ALTER TABLE t1 MODIFY fld1 VARCHAR(7), ALGORITHM= INPLACE; + +--echo # Scenario where non-packed keys is converted to packed keys +--echo # before the patch, an error is reported. +ALTER TABLE t1 MODIFY fld1 VARCHAR(9), ALGORITHM= INPLACE; + +SET DEBUG="-d,innodb_index_drop_count_zero"; + +--echo # Tests added for covering cases where rebuild is required. + +--echo # Reducing the size of the field. +--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON +ALTER TABLE t1 MODIFY fld1 VARCHAR(3), ALGORITHM= INPLACE; + +--echo # Increasing the size of the field to boundary condition. +--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON +ALTER TABLE t1 MODIFY fld1 VARCHAR(256), ALGORITHM= INPLACE; + +DROP TABLE t1; + # Check that all connections opened by test cases in this file are really # gone so execution of other tests won't be affected by their presence. --source include/wait_until_count_sessions.inc diff --git a/sql/ha_ndbcluster.cc b/sql/ha_ndbcluster.cc index 61c345f5e75b..a438a7f340a0 100644 --- a/sql/ha_ndbcluster.cc +++ b/sql/ha_ndbcluster.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2004, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2004, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -13768,7 +13768,8 @@ uint ha_ndbcluster::max_supported_key_length() const { return NDB_MAX_KEY_SIZE; } -uint ha_ndbcluster::max_supported_key_part_length() const +uint ha_ndbcluster::max_supported_key_part_length(HA_CREATE_INFO + *create_info MY_ATTRIBUTE((unused))) const { return NDB_MAX_KEY_SIZE; } diff --git a/sql/ha_ndbcluster.h b/sql/ha_ndbcluster.h index 9d1c75575a1d..3f4cba5524a0 100644 --- a/sql/ha_ndbcluster.h +++ b/sql/ha_ndbcluster.h @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -238,7 +238,7 @@ class ha_ndbcluster: public handler, public Partition_handler uint max_supported_keys() const; uint max_supported_key_parts() const; uint max_supported_key_length() const; - uint max_supported_key_part_length() const; + uint max_supported_key_part_length(HA_CREATE_INFO *create_info) const; virtual bool is_fk_defined_on_table_or_index(uint index); int get_child_or_parent_fk_list(THD *thd, diff --git a/sql/handler.cc b/sql/handler.cc index 78faf46c8ce4..99818b510fb9 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -4845,7 +4845,8 @@ handler::check_if_supported_inplace_alter(TABLE *altered_table, Alter_inplace_info::CHANGE_CREATE_OPTION | Alter_inplace_info::ALTER_RENAME | Alter_inplace_info::RENAME_INDEX | - Alter_inplace_info::ALTER_INDEX_COMMENT; + Alter_inplace_info::ALTER_INDEX_COMMENT | + Alter_inplace_info::ALTER_COLUMN_INDEX_LENGTH; /* Is there at least one operation that requires copy algorithm? */ if (ha_alter_info->handler_flags & ~inplace_offline_operations) diff --git a/sql/handler.h b/sql/handler.h index 3cb113474d66..ca1ca5c3bc3d 100644 --- a/sql/handler.h +++ b/sql/handler.h @@ -1030,6 +1030,9 @@ struct handlerton #define HTON_SUPPORTS_FOREIGN_KEYS (1 << 11) +// Engine supports packed keys. +#define HTON_SUPPORTS_PACKED_KEYS (1 << 12) + enum enum_tx_isolation { ISO_READ_UNCOMMITTED, ISO_READ_COMMITTED, ISO_REPEATABLE_READ, ISO_SERIALIZABLE}; @@ -1325,6 +1328,14 @@ class Alter_inplace_info // New/changed virtual generated column require validation static const HA_ALTER_FLAGS VALIDATE_VIRTUAL_COLUMN = 1ULL << 41; + /** + Change in index length such that it does not require index rebuild. + For example, change in index length due to column expansion like + varchar(X) changed to varchar(X + N). + */ + static const HA_ALTER_FLAGS ALTER_COLUMN_INDEX_LENGTH = 1ULL << 42; + + /** Create options (like MAX_ROWS) for the new version of table. @@ -3074,16 +3085,18 @@ class handler :public Sql_alloc { return std::min(MAX_KEY_LENGTH, max_supported_key_length()); } - uint max_key_part_length() const + uint max_key_part_length(HA_CREATE_INFO *create_info) const { - return std::min(MAX_KEY_LENGTH, max_supported_key_part_length()); + return std::min(MAX_KEY_LENGTH, max_supported_key_part_length(create_info)); } virtual uint max_supported_record_length() const { return HA_MAX_REC_LENGTH; } virtual uint max_supported_keys() const { return 0; } virtual uint max_supported_key_parts() const { return MAX_REF_PARTS; } virtual uint max_supported_key_length() const { return MAX_KEY_LENGTH; } - virtual uint max_supported_key_part_length() const { return 255; } + virtual uint max_supported_key_part_length(HA_CREATE_INFO + *create_info MY_ATTRIBUTE((unused))) const + { return 255; } virtual uint min_record_length(uint options) const { return 1; } virtual bool low_byte_first() const { return 1; } diff --git a/sql/sql_table.cc b/sql/sql_table.cc index ec92483741b9..45f27278a0dc 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -4331,10 +4331,11 @@ mysql_prepare_create_table(THD *thd, const char *error_schema_name, size_t max_field_size= blob_length_by_type(sql_field->sql_type); if (key_part_length > max_field_size || key_part_length > max_key_length || - key_part_length > file->max_key_part_length()) + key_part_length > file->max_key_part_length(create_info)) { // Given prefix length is too large, adjust it. - key_part_length= min(max_key_length, file->max_key_part_length()); + key_part_length= min(max_key_length, + file->max_key_part_length(create_info)); if (max_field_size) key_part_length= min(key_part_length, max_field_size); if (key->type == KEYTYPE_MULTIPLE) @@ -4385,10 +4386,10 @@ mysql_prepare_create_table(THD *thd, const char *error_schema_name, my_error(ER_WRONG_KEY_COLUMN, MYF(0), column->field_name.str); DBUG_RETURN(TRUE); } - if (key_part_length > file->max_key_part_length() && + if (key_part_length > file->max_key_part_length(create_info) && key->type != KEYTYPE_FULLTEXT) { - key_part_length= file->max_key_part_length(); + key_part_length= file->max_key_part_length(create_info); if (key->type == KEYTYPE_MULTIPLE) { /* not a critical problem */ @@ -4412,7 +4413,8 @@ mysql_prepare_create_table(THD *thd, const char *error_schema_name, } key_part_info->length= (uint16) key_part_length; /* Use packed keys for long strings on the first column */ - if (!((*db_options) & HA_OPTION_NO_PACK_KEYS) && + if ((create_info->db_type->flags & HTON_SUPPORTS_PACKED_KEYS) && + !((*db_options) & HA_OPTION_NO_PACK_KEYS) && !((create_info->table_options & HA_OPTION_NO_PACK_KEYS)) && (key_part_length >= KEY_DEFAULT_PACK_LENGTH && (sql_field->sql_type == MYSQL_TYPE_STRING || @@ -6297,18 +6299,30 @@ static bool has_index_def_changed(Alter_inplace_info *ha_alter_info, key_part < end; key_part++, new_part++) { + + new_field= get_field_by_index(alter_info, new_part->fieldnr); + /* - Key definition has changed if we are using a different field or - if the used key part length is different. It makes sense to - check lengths first as in case when fields differ it is likely - that lengths differ too and checking fields is more expensive - in general case. + If there is a change in index length due to column expansion + like varchar(X) changed to varchar(X + N) and has a compatible + packed data representation, we mark it for fast/INPLACE change + in index definition. Some engines like InnoDB supports INPLACE + alter for such cases. + + In other cases, key definition has changed if we are using a + different field or if the used key part length is different, or + key part direction has changed. */ - if (key_part->length != new_part->length) + if (key_part->length != new_part->length && + ha_alter_info->alter_info->flags == Alter_info::ALTER_CHANGE_COLUMN && + (key_part->field->is_equal((Create_field *)new_field) == IS_EQUAL_PACK_LENGTH)) + { + ha_alter_info->handler_flags|= + Alter_inplace_info::ALTER_COLUMN_INDEX_LENGTH; + } + else if (key_part->length != new_part->length) return true; - new_field= get_field_by_index(alter_info, new_part->fieldnr); - /* For prefix keys KEY_PART_INFO::field points to cloned Field object with adjusted length. So below we have to check field diff --git a/sql/sql_tmp_table.cc b/sql/sql_tmp_table.cc index 8f5153cc8c78..39d24e852fa6 100644 --- a/sql/sql_tmp_table.cc +++ b/sql/sql_tmp_table.cc @@ -462,7 +462,7 @@ void Cache_temp_engine_properties::init(THD *thd) db_plugin= ha_lock_engine(0, heap_hton); handler= get_new_handler((TABLE_SHARE *)0, thd->mem_root, heap_hton); HEAP_MAX_KEY_LENGTH= handler->max_key_length(); - HEAP_MAX_KEY_PART_LENGTH= handler->max_key_part_length(); + HEAP_MAX_KEY_PART_LENGTH= handler->max_key_part_length(0); HEAP_MAX_KEY_PARTS= handler->max_key_parts(); delete handler; plugin_unlock(0, db_plugin); @@ -470,7 +470,7 @@ void Cache_temp_engine_properties::init(THD *thd) db_plugin= ha_lock_engine(0, myisam_hton); handler= get_new_handler((TABLE_SHARE *)0, thd->mem_root, myisam_hton); MYISAM_MAX_KEY_LENGTH= handler->max_key_length(); - MYISAM_MAX_KEY_PART_LENGTH= handler->max_key_part_length(); + MYISAM_MAX_KEY_PART_LENGTH= handler->max_key_part_length(0); MYISAM_MAX_KEY_PARTS= handler->max_key_parts(); delete handler; plugin_unlock(0, db_plugin); diff --git a/storage/archive/ha_archive.h b/storage/archive/ha_archive.h index e3b508906425..670254c58869 100644 --- a/storage/archive/ha_archive.h +++ b/storage/archive/ha_archive.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -118,7 +118,9 @@ class ha_archive: public handler ulonglong *nb_reserved_values); uint max_supported_keys() const { return 1; } uint max_supported_key_length() const { return sizeof(ulonglong); } - uint max_supported_key_part_length() const { return sizeof(ulonglong); } + uint max_supported_key_part_length(HA_CREATE_INFO + *create_info MY_ATTRIBUTE((unused))) const + { return sizeof(ulonglong); } virtual int records(ha_rows *num_rows) { *num_rows= share->rows_recorded; diff --git a/storage/blackhole/ha_blackhole.h b/storage/blackhole/ha_blackhole.h index cb8e25569478..f7a20e4ce3ed 100644 --- a/storage/blackhole/ha_blackhole.h +++ b/storage/blackhole/ha_blackhole.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2005, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -69,7 +69,9 @@ class ha_blackhole: public handler #define BLACKHOLE_MAX_KEY_LENGTH 1000 uint max_supported_keys() const { return BLACKHOLE_MAX_KEY; } uint max_supported_key_length() const { return BLACKHOLE_MAX_KEY_LENGTH; } - uint max_supported_key_part_length() const { return BLACKHOLE_MAX_KEY_LENGTH; } + uint max_supported_key_part_length(HA_CREATE_INFO + *create_info MY_ATTRIBUTE((unused))) const + { return BLACKHOLE_MAX_KEY_LENGTH; } int open(const char *name, int mode, uint test_if_locked); int close(void); int truncate(); diff --git a/storage/federated/ha_federated.h b/storage/federated/ha_federated.h index f60aa79967ca..650a19df2d3a 100644 --- a/storage/federated/ha_federated.h +++ b/storage/federated/ha_federated.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2004, 2014, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2004, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -168,7 +168,9 @@ class ha_federated: public handler uint max_supported_keys() const { return MAX_KEY; } uint max_supported_key_parts() const { return MAX_REF_PARTS; } uint max_supported_key_length() const { return FEDERATED_MAX_KEY_LENGTH; } - uint max_supported_key_part_length() const { return FEDERATED_MAX_KEY_LENGTH; } + uint max_supported_key_part_length(HA_CREATE_INFO + *create_info MY_ATTRIBUTE((unused))) const + { return FEDERATED_MAX_KEY_LENGTH; } /* Called in test_quick_select to determine if indexes should be used. Normally, we need to know number of blocks . For federated we need to diff --git a/storage/heap/ha_heap.h b/storage/heap/ha_heap.h index cb25623b58fc..9e37047c1ae4 100644 --- a/storage/heap/ha_heap.h +++ b/storage/heap/ha_heap.h @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -61,7 +61,9 @@ class ha_heap: public handler } const key_map *keys_to_use_for_scanning() { return &btree_keys; } uint max_supported_keys() const { return MAX_KEY; } - uint max_supported_key_part_length() const { return MAX_KEY_LENGTH; } + uint max_supported_key_part_length(HA_CREATE_INFO + *create_info MY_ATTRIBUTE((unused))) const + { return MAX_KEY_LENGTH; } double scan_time() { return (double) (stats.records+stats.deleted) / 20.0+10; } double read_time(uint index, uint ranges, ha_rows rows) diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index 0a735c13d989..ff82775ac7a0 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -6345,14 +6345,23 @@ ha_innobase::clone( uint -ha_innobase::max_supported_key_part_length() const +ha_innobase::max_supported_key_part_length(HA_CREATE_INFO *create_info) const /*==============================================*/ { /* A table format specific index column length check will be performed at ha_innobase::add_index() and row_create_index_for_mysql() */ - return(innobase_large_prefix - ? REC_VERSION_56_MAX_INDEX_COL_LEN - : REC_ANTELOPE_MAX_INDEX_COL_LEN - 1); + switch (create_info->row_type) { + case ROW_TYPE_REDUNDANT: + case ROW_TYPE_COMPACT: + return (REC_ANTELOPE_MAX_INDEX_COL_LEN - 1); + break; + default: + if (innobase_large_prefix) + return (REC_VERSION_56_MAX_INDEX_COL_LEN); + else + return (REC_ANTELOPE_MAX_INDEX_COL_LEN - 1); + } + } /******************************************************************//** diff --git a/storage/innobase/handler/ha_innodb.h b/storage/innobase/handler/ha_innodb.h index b83b70cb4463..9d7150a2679c 100644 --- a/storage/innobase/handler/ha_innodb.h +++ b/storage/innobase/handler/ha_innodb.h @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2000, 2017, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2000, 2018, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -91,7 +91,7 @@ class ha_innobase: public handler uint max_supported_key_length() const; - uint max_supported_key_part_length() const; + uint max_supported_key_part_length(HA_CREATE_INFO *create_info) const; const key_map* keys_to_use_for_scanning(); diff --git a/storage/innobase/handler/handler0alter.cc b/storage/innobase/handler/handler0alter.cc index 8d28fa567244..4683084e3047 100644 --- a/storage/innobase/handler/handler0alter.cc +++ b/storage/innobase/handler/handler0alter.cc @@ -110,7 +110,8 @@ static const Alter_inplace_info::HA_ALTER_FLAGS INNOBASE_ALTER_NOREBUILD | Alter_inplace_info::ALTER_INDEX_COMMENT | Alter_inplace_info::ADD_VIRTUAL_COLUMN | Alter_inplace_info::DROP_VIRTUAL_COLUMN - | Alter_inplace_info::ALTER_VIRTUAL_COLUMN_ORDER; + | Alter_inplace_info::ALTER_VIRTUAL_COLUMN_ORDER + | Alter_inplace_info::ALTER_COLUMN_INDEX_LENGTH; /* | Alter_inplace_info::ALTER_VIRTUAL_COLUMN_TYPE; */ struct ha_innobase_inplace_ctx : public inplace_alter_handler_ctx diff --git a/storage/myisam/ha_myisam.cc b/storage/myisam/ha_myisam.cc index e934a59ffec8..5f30a0c0f852 100644 --- a/storage/myisam/ha_myisam.cc +++ b/storage/myisam/ha_myisam.cc @@ -2299,7 +2299,8 @@ static int myisam_init(void *p) myisam_hton->create= myisam_create_handler; myisam_hton->panic= myisam_panic; myisam_hton->close_connection= myisam_close_connection; - myisam_hton->flags= HTON_CAN_RECREATE | HTON_SUPPORT_LOG_TABLES; + myisam_hton->flags= HTON_CAN_RECREATE | HTON_SUPPORT_LOG_TABLES | + HTON_SUPPORTS_PACKED_KEYS; myisam_hton->is_supported_system_table= myisam_is_supported_system_table; main_thread_keycache_var= st_keycache_thread_var(); diff --git a/storage/myisam/ha_myisam.h b/storage/myisam/ha_myisam.h index f7794b7c85fc..11890c26032b 100644 --- a/storage/myisam/ha_myisam.h +++ b/storage/myisam/ha_myisam.h @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -83,7 +83,9 @@ class ha_myisam: public handler } uint max_supported_keys() const { return MI_MAX_KEY; } uint max_supported_key_length() const { return MI_MAX_KEY_LENGTH; } - uint max_supported_key_part_length() const { return MI_MAX_KEY_LENGTH; } + uint max_supported_key_part_length(HA_CREATE_INFO + *create_info MY_ATTRIBUTE((unused))) const + { return MI_MAX_KEY_LENGTH; } uint checksum() const; int open(const char *name, int mode, uint test_if_locked); diff --git a/storage/myisammrg/ha_myisammrg.h b/storage/myisammrg/ha_myisammrg.h index 2f91986d1f47..9d201ddc769c 100644 --- a/storage/myisammrg/ha_myisammrg.h +++ b/storage/myisammrg/ha_myisammrg.h @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -99,7 +99,9 @@ class ha_myisammrg: public handler } uint max_supported_keys() const { return MI_MAX_KEY; } uint max_supported_key_length() const { return MI_MAX_KEY_LENGTH; } - uint max_supported_key_part_length() const { return MI_MAX_KEY_LENGTH; } + uint max_supported_key_part_length(HA_CREATE_INFO + *create_info MY_ATTRIBUTE((unused))) const + { return MI_MAX_KEY_LENGTH; } double scan_time() { return ulonglong2double(stats.data_file_length) / IO_SIZE + file->tables; } diff --git a/storage/partition/ha_partition.cc b/storage/partition/ha_partition.cc index de8348ff988d..f3258dc375d0 100644 --- a/storage/partition/ha_partition.cc +++ b/storage/partition/ha_partition.cc @@ -5551,6 +5551,21 @@ uint ha_partition::min_of_the_max_uint( } +uint ha_partition::min_of_the_max_uint(HA_CREATE_INFO *create_info, + uint (handler::*operator_func)(HA_CREATE_INFO *) const) const +{ + handler **file; + uint min_of_the_max= ((*m_file)->*operator_func)(create_info); + + for (file= m_file+1; *file; file++) + { + uint tmp= ((*file)->*operator_func)(create_info); + set_if_smaller(min_of_the_max, tmp); + } + return min_of_the_max; +} + + uint ha_partition::max_supported_key_parts() const { return min_of_the_max_uint(&handler::max_supported_key_parts); @@ -5563,9 +5578,11 @@ uint ha_partition::max_supported_key_length() const } -uint ha_partition::max_supported_key_part_length() const +uint ha_partition::max_supported_key_part_length(HA_CREATE_INFO + *create_info) const { - return min_of_the_max_uint(&handler::max_supported_key_part_length); + return + min_of_the_max_uint(create_info, &handler::max_supported_key_part_length); } diff --git a/storage/partition/ha_partition.h b/storage/partition/ha_partition.h index 2f7311e10c6e..f5be20d95004 100644 --- a/storage/partition/ha_partition.h +++ b/storage/partition/ha_partition.h @@ -2,7 +2,7 @@ #define HA_PARTITION_INCLUDED /* - Copyright (c) 2005, 2017, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2005, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -902,11 +902,13 @@ class ha_partition : The maximum supported values is the minimum of all handlers in the table */ uint min_of_the_max_uint(uint (handler::*operator_func)(void) const) const; + uint min_of_the_max_uint(HA_CREATE_INFO *create_info, + uint (handler::*operator_func)(HA_CREATE_INFO *) const) const; virtual uint max_supported_record_length() const; virtual uint max_supported_keys() const; virtual uint max_supported_key_parts() const; virtual uint max_supported_key_length() const; - virtual uint max_supported_key_part_length() const; + virtual uint max_supported_key_part_length(HA_CREATE_INFO *create_info) const; /* All handlers in a partitioned table must have the same low_byte_first From 32bdd323f160421e8dd316cd1022785cc2736e78 Mon Sep 17 00:00:00 2001 From: Shishir Jaiswal Date: Wed, 30 May 2018 21:16:29 +0530 Subject: [PATCH 0896/1221] Bug#24687073 - SET PASSWORD REPLICATES INCORRECTLY BETWEEN 5.6 AND 5.7 DESCRIPTION =========== http://dev.mysql.com/doc/refman/5.7/en/set-password.html documents that between 5.6 and 5.7, one format of "SET PASSWORD" changes its syntax from: SET PASSWORD [for user] = [hash of password] to SET PASSWORD [for user] = [password] In cross version replication scenario when the master is in 5.6 and slave is in 5.7, the above SET PASSWORD command results in a different password hash on latter than the former. ANALYSIS ======== Note that this bug can also be reproduced when both master and slave belong to 5.7 with 'log-builtin-as-identified-by-password=ON'. In such a case SET PASSWORD statements are logged as SET PASSWORD statements, rather than being rewritten as ALTER USER statements. So when the command: SET PASSWORD [for user] = [password] is fed to slave, it is hashing the already hashed input string which results in master having hash of password and slave having double hash of password. Currently the flag 'uses_identified_by_clause' is set to false in change_password() if 'log_builtin_as_identified_by_password' is true and it's a slave thread. This flag is used in set_and_validate_user_attributes() to determine if hashing is required or not. FIX === Relaxed this criteria by removing the 1st condition. So now whenever its a slave thread (or a binlog applier thread), it can be safely assumed that the input string is hash that was already computed on master. We immediately set 'uses_authentication_string_clause' to true here so that it later avoids double hash in set_and_validate_user_attributes() The fix is restricted to 5.7 since we support cross- version replication only for two consecutive versions which in this case would be 5.6 and 5.7. --- sql/auth/sql_user.cc | 18 +++++++++++------- sql/table.h | 10 ++++++++++ 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/sql/auth/sql_user.cc b/sql/auth/sql_user.cc index 18d8d09fcde3..b64be4938707 100644 --- a/sql/auth/sql_user.cc +++ b/sql/auth/sql_user.cc @@ -769,15 +769,19 @@ bool change_password(THD *thd, const char *host, const char *user, thd->lex->alter_password.account_locked= false; thd->lex->alter_password.update_password_expired_fields= false; + /* - When @@log-backward-compatible-user-definitions variable is ON - and its a slave thread, then the password is already hashed. So - do not generate another hash. - */ - if (opt_log_builtin_as_identified_by_password && - thd->slave_thread) + In case its a slave thread or a binlog applier thread, the password + is already hashed. Do not generate another hash! + */ + if (thd->slave_thread || thd->is_binlog_applier()) + { + /* Password is in hash form */ + combo->uses_authentication_string_clause= true; + /* Password is not plain text */ combo->uses_identified_by_clause= false; - + } + if (set_and_validate_user_attributes(thd, combo, what_to_set, true, "SET PASSWORD")) { diff --git a/sql/table.h b/sql/table.h index 530e937309c4..e7e967b982f1 100644 --- a/sql/table.h +++ b/sql/table.h @@ -1653,11 +1653,21 @@ typedef struct st_lex_alter { bool account_locked; } LEX_ALTER; +/* + This structure holds the specifications related to + mysql user and the associated auth details. +*/ typedef struct st_lex_user { LEX_CSTRING user; LEX_CSTRING host; LEX_CSTRING plugin; LEX_CSTRING auth; +/* + The following flags are indicators for the SQL syntax used while + parsing CREATE/ALTER user. While other members are self-explanatory, + 'uses_authentication_string_clause' signifies if the password is in + hash form (if the var was set to true) or not. +*/ bool uses_identified_by_clause; bool uses_identified_with_clause; bool uses_authentication_string_clause; From a36baedac705aa3069c0706cd2f3b9d51e702e73 Mon Sep 17 00:00:00 2001 From: Dmitriy Kostiuk Date: Thu, 31 May 2018 13:03:56 +0300 Subject: [PATCH 0897/1221] Release notes for Percona-Server 5.6.40-83.2 with description of the introduced variables (#2402) --- doc/source/conf.py | 2 +- .../performance/innodb_numa_support.rst | 6 +- doc/source/ps-variables.rst | 10 ++ .../Percona-Server-5.6.40-84.0.rst | 159 ++++++++++++++++++ .../release-notes/release-notes_index.rst | 1 + doc/source/tokudb/tokudb_variables.rst | 36 ++++ doc/source/upstream-bug-fixes.rst | 30 ++++ 7 files changed, 241 insertions(+), 3 deletions(-) create mode 100644 doc/source/release-notes/Percona-Server-5.6.40-84.0.rst diff --git a/doc/source/conf.py b/doc/source/conf.py index 2e077eca5286..5e9a9b687409 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -54,7 +54,7 @@ # The short X.Y version. version = '5.6' # The full version, including alpha/beta/rc tags. -release = '5.6.39-83.1' +release = '5.6.40-84.0' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/doc/source/performance/innodb_numa_support.rst b/doc/source/performance/innodb_numa_support.rst index e5276160f0c5..2066f0cad2e9 100644 --- a/doc/source/performance/innodb_numa_support.rst +++ b/doc/source/performance/innodb_numa_support.rst @@ -17,6 +17,8 @@ Version Specific Information Improved ``NUMA`` support implemented. This feature was ported from Twitter's |MySQL| patches. * :rn:`5.6.27-75.0` Variables :variable:`innodb_buffer_pool_populate` and :variable:`numa_interleave` have been mapped to the upstream implementation of the new `innodb_numa_interleave `_ variable. + * :rn:` 5.6.40-83.2` + Variables :variable:`innodb_buffer_pool_populate` and :variable:`numa_interleave` were reverted to their original implementation due to upstream variant being less effective in memory allocation. Now buffer pool is allocated with MAP_POPULATE, forcing NUMA interleaved allocation at the buffer pool initialization time. System Variables ================ @@ -32,7 +34,7 @@ System Variables :default: OFF :range: ON/OFF -When this variable is enabled, |InnoDB| preallocates pages in the buffer pool on startup to force ``NUMA`` allocation decisions to be made immediately while the buffer cache is clean. **NOTE:** This variable has been mapped to the upstream `innodb_numa_interleave `_ variable in :rn:`5.6.27-75.0` and it will be removed in |Percona Server| 5.7. +When this variable is enabled, |InnoDB| preallocates pages in the buffer pool on startup to force ``NUMA`` allocation decisions to be made immediately while the buffer cache is clean. Command-line Options for mysqld_safe ==================================== @@ -59,7 +61,7 @@ When enabled (set to ``1``) this will flush and purge buffers/caches before star :default: ``0`` (OFF) :range: ``0``/``1`` -When this option is enabled (set to ``1``), mysqld will run with its memory interleaved on all ``NUMA`` nodes by starting it with ``numactl --interleave=all``. In case there is just one CPU/node, allocations will be "interleaved" between that node. **NOTE:** This variable has been mapped to the upstream `innodb_numa_interleave `_ variable in :rn:`5.6.27-75.0` and it will be removed in |Percona Server| 5.7. +When this option is enabled (set to ``1``), mysqld will run with its memory interleaved on all ``NUMA`` nodes by starting it with ``numactl --interleave=all``. In case there is just one CPU/node, allocations will be "interleaved" between that node. Other Reading ============= diff --git a/doc/source/ps-variables.rst b/doc/source/ps-variables.rst index 6d17b42244c8..6f16cc1defc0 100644 --- a/doc/source/ps-variables.rst +++ b/doc/source/ps-variables.rst @@ -632,6 +632,16 @@ System Variables - Yes - Global - Yes + * - :variable:`version_comment` + - Yes + - Yes + - Global + - Yes + * - :variable:`version_suffix` + - Yes + - Yes + - Global + - Yes Status Variables ================ diff --git a/doc/source/release-notes/Percona-Server-5.6.40-84.0.rst b/doc/source/release-notes/Percona-Server-5.6.40-84.0.rst new file mode 100644 index 000000000000..9ce668de4094 --- /dev/null +++ b/doc/source/release-notes/Percona-Server-5.6.40-84.0.rst @@ -0,0 +1,159 @@ +.. rn:: 5.6.40-84.0 + +============================ +|Percona Server| 5.6.40-84.0 +============================ + +Percona is glad to announce the release of |Percona Server| 5.6.40-84.0 on +May 30, 2018 (Downloads are available `here +`_ +and from the :doc:`Percona Software Repositories `). + +Based on `MySQL 5.6.40 +`_, including +all the bug fixes in it, |Percona Server| 5.6.40-84.0 is the current GA release +in the |Percona Server| 5.6 series. All of |Percona|'s software is open-source +and free. + +New Features +============ + +* A new string variable :variable:`version_suffix` allows to change suffix + for the |Percona Server| version string returned by the read-only + :variable:`version` variable. This allows to append the version number for + the server with a custom suffix to reflect some build or configuration + specifics. Also :variable:`version_comment` (default value of which is taken + from the CMake ``COMPILATION_COMMENT`` option) is converted from a global + read-only to a global read-write variable and thereby it is now cutomizable. + +* Query response time plugin now can be disabled at session level with use + of a new variable :variable:`query_response_time_session_stats`. + +Bugs Fixed +========== + +* Compilation warning was fixed for ``-DWITH_QUERY_RESPONSE_TIME=ON`` CMake + compilation option, which makes QRT to be linked statically. Bug fixed + :psbug:`3841`. + +* A code clean-up was done to fix clang 6 specific compilation + warnings and errors (bug fixed :psbug:`3893`, upstream :mysqlbug:`90111`). + +* Using ``-DWITHOUT_=ON`` CMake variable to exclude a plugin from the + build didn't work for some plugins, including a number of storage engines. + Bug fixed :psbug:`3901`. + +* A clean-up in |Percona Server| binlog-related code was made to avoid + uninitialized memory comparison. Bug fixed :psbug:`3925` (upstream + :mysqlbug:`90238`). + +* Temporary file I/O was not instrumented for Performance Schema. Bug fixed + :psbug:`3937` (upstream :mysqlbug:`90264`). + +* A ``key_block_size`` value was set automatically by the Improved MEMORY + Storage Engine, which resulted in warnings when changing the engine type to + |InnoDB|, and constantly growing ``key_block_size`` during alter operations. + Bugs fixed :psbug:`3936`, :psbug:`3940`, and :psbug:`3943`. + +* |Percona Server| Debian packages description included reference to + ``/etc/mysql/my.cnf`` file, which is not actually present in these packages. + Bug fixed :psbug:`2046`. + +* Fixes were introduced to remove GCC 8 compilation warnings for the + |Percona Server| build, retaining compatibility with old compiler versions, + including GCC 4.4. Bugs fixed :psbug:`3950` and :psbug:`4471`. + +* A typo in ``plugin.cmake`` file prevented to compile plugins statically + into the server. Bug fixed :psbug:`3871` (upstream :mysqlbug:`89766`). + +* ``-DWITH_NUMA=ON`` build option was silently ignored by CMake when + NUMA development package was not installed, instead of exiting by error. + Bug fixed :psbug:`4487`. + +* Variables :variable:`innodb_buffer_pool_populate` and :variable:`numa_interleave` mapped to the upstream `innodb_numa_interleave `_ variable in :rn:`5.6.27-75.0` were reverted to their original implementation due to upstream variant being less effective in memory allocation. Now buffer pool is allocated with MAP_POPULATE, forcing NUMA interleaved allocation at the buffer pool initialization time. Bug fixed :psbug:`3967`. + +* :variable:`audit_log_include_accounts` variable did not take effect if + placed in ``my.cnf`` configuration file, while still working as intended if + set dynamically. Bug fixed :psbug:`3867`. + +* Synchronization between between :variable:`innodb_kill_idle_transaction` and + :variable:`kill_idle_transaction` system variables was broken because of the + regression in |Percona Server| :rn:`5.6.40-83.2`. Bug fixed :psbug:`3955`. + +* Executing the ``SHOW GLOBAL STATUS`` expression could cause "data drift" on + global status variables in case of a query rollback: the variable, being by + its nature a counter and allowing only an increase, could return to its + previous value. Bug fixed :psbug:`3951` (upstream :mysqlbug:`90351`). + +* ``ALTER TABLE ... COMMENT = ...`` statement caused |TokuDB| to rebuild the + whole table, which is not needed, as only FRM metadata should be changed. The + fix was provided as a contribution by `Fungo Wang `_. + Bugs fixed :psbug:`4280` and :psbug:`4292`. + +* A number of |Percona Server| 8.0 |TokuDB| fixes have been backported to + |Percona Server| 5.6 in preparation for using MySQL 8.0. Bugs fixed + :psbug:`4379`, :psbug:`4380`, :psbug:`4387`, :psbug:`4378`, :psbug:`4383`, + :psbug:`4384`, :psbug:`4386`, :psbug:`4382`, :psbug:`4391`, + :psbug:`4390`, :psbug:`4392`, and :psbug:`4381`. + +TokuDB Changes and Fixes +======================== + +* Two new variables, :variable:`tokudb_enable_fast_update` and + :variable:`tokudb_enable_fast_upsert`, were introduced to facilitate the + |TokuDB| fast updates feature, which involves queries optimization to avoid + random reads during their execution. Bug fixed :psbug:`4365`. + +* A data race was fixed in minicron utility of the PerconaFT, as a contribution + by Rik Prohaska. Bug fixed :psbug:`4281`. + +* Row count and cardinality decrease to zero took place after long-running + ``REPLACE`` load, ending up with full table scans for any action. Bug fixed + :psbug:`4296`. + +Other Bugs Fixed +================ + +* :psbug:`3818` "Orphaned file mysql-test/suite/innodb/r/percona_innodb_kill_idle_trx.result" + +* :psbug:`3926` "Potentially truncated bitmap file name in + log_online_open_bitmap_file_read_only() (storage/innobase/log/log0online.cc)" + +* :psbug:`2204` "Test main.audit_log_default_db is unstable" + +* :psbug:`3767` "Fix compilation warnings/errors with clang" + +* :psbug:`3773` "Incorrect key file for table frequently for tokudb" + +* :psbug:`3794` "MTR test main.percona_show_temp_tables_stress does not wait + for events to start" + +* :psbug:`3798` "MTR test innodb.percona_extended_innodb_status fails if InnoDB + status contains unquoted special characters" + +* :psbug:`3887` "TokuDB does not compile with + -DWITH_PERFSCHEMA_STORAGE_ENGINE=OFF" + +* :psbug:`4388` "5.7 code still has TOKU_INCLUDE_OPTION_STRUCTS which is a + MariaDB specific construct" + +* :psbug:`4265` "TDB-114 (Change use of MySQL HASH to unordered_map) introduces + memory leak" + +* :psbug:`4277` "memory leaks in TDB-2 and TDB-89 tests" + +* :psbug:`4276` "Data race on cache table attributes detected by the thread + sanitizer" + +* :psbug:`4451` "Implement better compression algo testing" + +* :psbug:`4469` "variable use out of scope bug in get_last_key test detected by + ASAN in clang 6" + +* :psbug:`4470` "the cachetable-simple-pin-nonblocking-cheap test occasionally + fails due to a locking conflict with the cachetable evictor" + +* :psbug:`1131` "User_var_log_event::User_var_log_event(const char*, uint, + const Format_description_log_event*): Assertion `(bytes_read == (data_written + - ((old_pre_checksum_fd || (description_event->checksum_alg == + BINLOG_CHECKSUM_ALG_OFF)) ? 0 : 4))) || ((". diff --git a/doc/source/release-notes/release-notes_index.rst b/doc/source/release-notes/release-notes_index.rst index b3ec5acd64de..eb24f8de68a2 100644 --- a/doc/source/release-notes/release-notes_index.rst +++ b/doc/source/release-notes/release-notes_index.rst @@ -6,6 +6,7 @@ :maxdepth: 1 :glob: + Percona-Server-5.6.40-84.0 Percona-Server-5.6.39-83.1 Percona-Server-5.6.38-83.0 Percona-Server-5.6.37-82.2 diff --git a/doc/source/tokudb/tokudb_variables.rst b/doc/source/tokudb/tokudb_variables.rst index 58ecd0f82780..fb88e95fe840 100644 --- a/doc/source/tokudb/tokudb_variables.rst +++ b/doc/source/tokudb/tokudb_variables.rst @@ -225,6 +225,16 @@ TokuDB Server Variables - Yes - Session, Global - Yes + * - :variable:`tokudb_enable_fast_update` + - Yes + - Yes + - Session, Global + - Yes + * - :variable:`tokudb_enable_fast_upsert` + - Yes + - Yes + - Session, Global + - Yes * - :variable:`tokudb_enable_partial_eviction` - Yes - Yes @@ -949,6 +959,32 @@ case there are bugs. Not for use in production. Defines direction to be used to perform table scan to check for empty tables for bulk loader. +.. variable:: tokudb_enable_fast_update + + :cli: Yes + :conf: Yes + :scope: Global/Session + :dyn: Yes + :vartype: Boolean + :default: OFF + +Toggles the fast updates ON/OFF for the ``UPDATE`` statement. Fast update is an +experimental feature that involves queries optimization to avoid random reads +during their execution. + +.. variable:: tokudb_enable_fast_upsert + + :cli: Yes + :conf: Yes + :scope: Global/Session + :dyn: Yes + :vartype: Boolean + :default: OFF + +Toggles the fast updates ON/OFF for the ``INSERT`` statement. Fast update is an +experimental feature that involves queries optimization to avoid random reads +during their execution. + .. variable:: tokudb_enable_partial_eviction :version 5.6.26-74.0: Implemented diff --git a/doc/source/upstream-bug-fixes.rst b/doc/source/upstream-bug-fixes.rst index 32b67f4033f6..c273c6452292 100644 --- a/doc/source/upstream-bug-fixes.rst +++ b/doc/source/upstream-bug-fixes.rst @@ -4,6 +4,36 @@ List of upstream |MySQL| bugs fixed in |Percona Server| 5.6 ============================================================= ++-------------------------------------------------------------------------------------------------------------+ +|:Upstream bug: :mysqlbug:`90351` - GLOBAL STATUS variables drift after rollback | +|:JIRA bug: :psbug:`3951` | +|:Upstream state: Verified (checked on 2018-05-29) | +|:Fix Released: :rn:`5.6.40-84.0` | +|:Upstream fix: N/A | ++-------------------------------------------------------------------------------------------------------------+ +|:Upstream bug: :mysqlbug:`90264` - Some file operations in mf_iocache2.c are not instrumented | +|:JIRA bug: :psbug:`3937` | +|:Upstream state: Verified (checked on 2018-05-29) | +|:Fix Released: :rn:`5.6.40-84.0` | +|:Upstream fix: N/A | ++-------------------------------------------------------------------------------------------------------------+ +|:Upstream bug: :mysqlbug:`90238` - Comparison of uninitailized memory in log_in_use | +|:JIRA bug: :psbug:`3925` | +|:Upstream state: No Feedback (checked on 2018-05-29) | +|:Fix Released: :rn:`5.6.40-84.0` | +|:Upstream fix: N/A | ++-------------------------------------------------------------------------------------------------------------+ +|:Upstream bug: :mysqlbug:`90111` - Incorrect enum comparisons | +|:JIRA bug: :psbug:`3893` | +|:Upstream state: Verified (checked on 2018-05-29) | +|:Fix Released: :rn:`5.6.40-84.0` | +|:Upstream fix: N/A | ++-------------------------------------------------------------------------------------------------------------+ +|:Upstream bug: :mysqlbug:`89766` - a typo in `cmake/plugin.cmake` prevents `MYSQL_SERVER` to be defined ... | +|:JIRA bug: :psbug:`3871` | +|:Upstream state: Verified (checked on 2018-05-29) | +|:Fix Released: :rn:`5.6.40-84.0` | +|:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`53588` - Blackhole: Specified key was too long; max key length is 1000 bytes | |:JIRA bug: :psbug:`1126` | From 64cfceddb1b2367b4c2d88ef1b9ee99d5647889a Mon Sep 17 00:00:00 2001 From: Dmitriy Kostiuk Date: Thu, 31 May 2018 14:06:36 +0300 Subject: [PATCH 0898/1221] DOC 756 fix, documenting temp files encryption (#2406) --- .../management/data_at_rest_encryption.rst | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/doc/source/management/data_at_rest_encryption.rst b/doc/source/management/data_at_rest_encryption.rst index a1548e2229e3..b087814590c3 100644 --- a/doc/source/management/data_at_rest_encryption.rst +++ b/doc/source/management/data_at_rest_encryption.rst @@ -190,6 +190,39 @@ System Variables The variable turns on binary and relay logs encryption. +Temporary file encryption +========================= + +A new feature, implemented since |Percona Server| :rn:`5.7.22-22`, is +encryption of temporary files, triggered by the :variable:`encrypt-tmp-files` +option. + +Temporary files are currently used in |Percona Server| for the following +purposes: + +* filesort (for example, ``SELECT`` statements with ``SQL_BIG_RESULT`` hints), + +* binary log transactional caches, + +* Group Replication caches. + +For each temporary file, an encryption key is generated locally, only kept +in memory for the lifetime of the temporary file, and discarded afterwards. + +System Variables +---------------- + +.. variable:: encrypt-tmp-files + + :version 5.7.22-22: Implemented + :cli: ``--encrypt-tmp-files`` + :dyn: No + :scope: Global + :vartype: Boolean + :default: ``OFF`` + +The option turns on encryption of temporary files created by |Percona Server|. + .. _keyring_vault_plugin: Keyring Vault plugin From f8da28193ca925fce61c441c4a7a7f6344737950 Mon Sep 17 00:00:00 2001 From: Aditya A Date: Fri, 1 Jun 2018 12:18:45 +0530 Subject: [PATCH 0899/1221] Bug #28112444 PB2 FAILURE OF PARTITION_NAMES.TEST IN WEEKLY-5.7 ON WINDOWS PROBLEM ------- This test is failing sporadically in windows because windows only supports path length of 260 characters. When we run this test with really long path and with long partition names it fails with OS error saying "too long path" . FIX --- Presently disabling this test for windows. We should enable NTFS long name feature in all pb2 machines and then enable this test for windows. --- mysql-test/suite/parts/t/partition_names.test | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mysql-test/suite/parts/t/partition_names.test b/mysql-test/suite/parts/t/partition_names.test index 188de1ecfa90..11e312c254bc 100644 --- a/mysql-test/suite/parts/t/partition_names.test +++ b/mysql-test/suite/parts/t/partition_names.test @@ -1,3 +1,5 @@ +# Becasue of Bug 28112444 disabling this test on windows +-- source include/not_windows.inc -- source include/have_innodb.inc -- source include/mysql_upgrade_preparation.inc --echo # From bfad53ee5248eeba4f11c40590e767aa9b755396 Mon Sep 17 00:00:00 2001 From: Dmitriy Kostiuk Date: Fri, 1 Jun 2018 12:09:30 +0300 Subject: [PATCH 0900/1221] Release notes for PS 5.7.22-22 with a fix for DOC-749 (documenting NUMA patch) and DOC-717 (documenting TokuDB fast updates) (#2408) --- doc/source/conf.py | 2 +- .../performance/innodb_numa_support.rst | 3 + .../Percona-Server-5.7.22-22.rst | 81 +++++++++++ .../release-notes/release-notes_index.rst | 1 + doc/source/tokudb/fast_updates.rst | 129 ++++++++++++++++++ doc/source/tokudb/tokudb_variables.rst | 4 +- doc/source/upstream-bug-fixes.rst | 6 + 7 files changed, 223 insertions(+), 3 deletions(-) create mode 100644 doc/source/release-notes/Percona-Server-5.7.22-22.rst create mode 100644 doc/source/tokudb/fast_updates.rst diff --git a/doc/source/conf.py b/doc/source/conf.py index 61f70cb7fd0a..35616a519152 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -54,7 +54,7 @@ # The short X.Y version. version = '5.7' # The full version, including alpha/beta/rc tags. -release = '5.7.21-21' +release = '5.7.22-22' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/doc/source/performance/innodb_numa_support.rst b/doc/source/performance/innodb_numa_support.rst index aeb8c4b8d98a..385ff7c190b6 100644 --- a/doc/source/performance/innodb_numa_support.rst +++ b/doc/source/performance/innodb_numa_support.rst @@ -14,6 +14,9 @@ Version Specific Information * :rn:`5.7.10-1`: Feature ported from |Percona Server| 5.6 + * :rn:`5.7.22-22`: + Feature reverted from the upstream implementation back to the one ported from |Percona Server| 5.6, in which `innodb_numa_interleave `_ variable not only enables NUMA memory interleaving at InnoDB buffer pool allocation, but allocates buffer pool with MAP_POPULATE, forcing interleaved allocation at the buffer pool initialization time. + Command-line Options for mysqld_safe ==================================== diff --git a/doc/source/release-notes/Percona-Server-5.7.22-22.rst b/doc/source/release-notes/Percona-Server-5.7.22-22.rst new file mode 100644 index 000000000000..909472230060 --- /dev/null +++ b/doc/source/release-notes/Percona-Server-5.7.22-22.rst @@ -0,0 +1,81 @@ +.. rn:: 5.7.22-22 + +======================== +Percona Server 5.7.22-22 +======================== + +Percona is glad to announce the release of Percona Server 5.7.22-22 +on May 31, 2018. Downloads are available `here `_ and from the :doc:`Percona Software Repositories `. + +This release is based on `MySQL 5.7.22 `_ and includes all the bug fixes in it. |Percona Server| 5.7.22-22 is now the current GA +(Generally Available) release in the 5.7 series. + +All software developed by Percona is open-source and free. + +New Features +============ + +* A new ``--encrypt-tmp-files`` option turns on encryption for the temporary + files which |Percona Server| may create on disk for filesort, binary log + transactional caches and Group Replication caches. +. + +Bugs Fixed +========== + +* Executing the ``SHOW GLOBAL STATUS`` expression could cause "data drift" on + global status variables in case of a query rollback: the variable, being by + its nature a counter and allowing only an increase, could return to its + previous value. Bug fixed :psbug:`3951` (upstream :mysqlbug:`90351`). + +* NUMA support was improved in |Percona Server|, reverting upstream implementation back to the original one, due to upstream variant being less effective in memory allocation. Now `innodb_numa_interleave `_ variable not only enables NUMA interleave memory policy for the InnoDB buffer pool allocation, but forces NUMA interleaved allocation at the buffer pool initialization time. Bug fixed :psbug:`3967`. + +* :variable:`audit_log_include_accounts` variable did not take effect if + placed in ``my.cnf`` configuration file, while still working as intended if + set dynamically. Bug fixed :psbug:`3867`. + +* A ``key_block_size`` value was set automatically by the Improved MEMORY + Storage Engine, which resulted in warnings when changing the engine type to + |InnoDB|, and constantly growing ``key_block_size`` during alter operations. + Bugs fixed :psbug:`3936`, :psbug:`3940`, and :psbug:`3943`. + +* Fixes were introduced to remove GCC 8 compilation warnings for the + |Percona Server| build. Bug fixed :psbug:`3950`. + +* An InnoDB Memcached Plugin code clean-up was backported from MySQL 8.0. Bug + fixed :psbug:`4506`. + +* |Percona Server| could not be built with ``-DWITH_LZ4=system`` option on + Ubuntu 14.04 (Trusty) because of too old LZ4 packages. Bug fixed + :psbug:`3842`. + +* A regression brought during |TokuDB| code clean-up in :rn:`5.7.21-21` was + causing assertion in cases when the FT layer returns an error during an alter + table operation. Bug fixed :psbug:`4294`. + +MyRocks Changes and Fixes +========================= + +* ``UPDATE`` statements were returning incorrect results because of not making + a full table scan on tables with unique secondary index. Bug fixed + :psbug:`4495` (upstream `facebook/mysql-5.6#830 `_). + + +Other Bugs Fixed +================ + +* :psbug:`4451` "Implement better compression algo testing" + +* :psbug:`4469` "variable use out of scope bug in get_last_key test detected by + ASAN in clang 6" + +* :psbug:`4470` "the cachetable-simple-pin-nonblocking-cheap test occasionally + fails due to a locking conflict with the cachetable evictor" + +* :psbug:`4488` "`-Werror` is always disabled for `innodb_memcached`" + +* :psbug:`1114` "Assertion `inited == INDEX' failed" + +* :psbug:`1130` "RBR Replication with concurrent XA in READ-COMMITTED takes + supremum pseudo-records and breaks replication" + diff --git a/doc/source/release-notes/release-notes_index.rst b/doc/source/release-notes/release-notes_index.rst index 877b2b20c7e7..05472eeb4411 100644 --- a/doc/source/release-notes/release-notes_index.rst +++ b/doc/source/release-notes/release-notes_index.rst @@ -6,6 +6,7 @@ :maxdepth: 1 :glob: + Percona-Server-5.7.22-22 Percona-Server-5.7.21-21 Percona-Server-5.7.21-20 Percona-Server-5.7.20-19 diff --git a/doc/source/tokudb/fast_updates.rst b/doc/source/tokudb/fast_updates.rst new file mode 100644 index 000000000000..89718d680c21 --- /dev/null +++ b/doc/source/tokudb/fast_updates.rst @@ -0,0 +1,129 @@ +.. _fast_updates: + +========================== + Fast Updates with TokuDB +========================== + +Introduction +============ + +Update intensive applications can have their throughput limited by the random +read capacity of the storage system. The cause of the throughput limit is the +read-modify-write algorithm that |MySQL| uses to process update statements +(read a row from the storage engine, apply the updates to it, write the new row +back to the storage engine). + +To address this throughput limit, |TokuDB| provides an experimental fast update +feature, which uses a different update algorithm. Update expressions of the SQL +statement are encoded into tiny programs that are stored in an update Fractal +Tree message. This update message is injected into the root of the Fractal Tree +index. Eventually, these update messages reach a leaf node, where the update +programs are applied to the row. Since messages are moved between Fractal Tree +levels in batches, the cost of reading in the leaf node is amortized over many +update messages. + +This feature is available for ``UPDATE`` and ``INSERT`` statements, and can be +turned ON/OFF separately for them with use of two variables. Variable +:variable:`tokudb_enable_fast_update` variable toggles fast updates for the +``UPDATE``, and :variable:`tokudb_enable_fast_upsert` does the same for +``INSERT``. + +Limitations +=========== + +Fast updates are activated instead of normal MySQL read-modify-write updates +if the executed expression meets the number of conditions. + +* fast updates can be activated for a statement or a mixed replication, + +* a primary key must be defined for the involved table, + +* both simple and compound primary keys are supported, and ``int``, ``char`` or + ``varchar`` are the allowed data types for them, + +* updated fields should have ``Integer`` or ``char`` data type, + +* fields that are part of any key should be not updated, + +* clustering keys are not allowed, + +* triggers should be not involved, + +* supported update expressions should belong to one of the following types: + + * ``x = constant`` + + * ``x = x + constant`` + + * ``x = x - constant`` + + * ``x = if (x=0,0,x-1)`` + + * ``x = x + values`` + +Usage Specifics and Examples +============================ + +Following example creates a table that associates event identifiers with their +count: + +.. code-block:: sql + + CREATE TABLE t ( + event_id bigint unsigned NOT NULL PRIMARY KEY, + event_count bigint unsigned NOT NULL + ); + +Many graph applications that map onto relational tables can use duplicate key +inserts and updates to maintain the graph. For example, one can update the +meta-data associated with a link in the graph using duplicate key insertions. +If the affected rows is not used by the application, then the insertion or +update can be marked and executed as a fast insertion or a fast update. + +Insertion example +----------------- + +If it is not known if the event identifier (represented by `event_id`) already +exists in the table, then ``INSERT ... ON DUPLICATE KEY UPDATE ...`` statement +can insert it if not existing, or increment its `event_count` otherwise. Here +is an example with duplicate key insertion statement, where ``%id`` is some +specific `event_id` value: + +.. code-block:: sql + + INSERT INTO t VALUES (%id, 1) + ON DUPLICATE KEY UPDATE event_count=event_count+1; + +Explanation +*********** +If the event id’s are random, then the throughput of this application would be +limited by the random read capacity of the storage system since each ``INSERT`` +statement has to determine if this `event_id` exists in the table. + +|TokuDB| replaces the primary key existence check with an insertion of an +“upsert” message into the Fractal Tree index. This “upsert” message contains a +copy of the row and a program that increments event_count. As the Fractal Tree +buffer’s get filled, this “upsert” message is flushed down the tree. +Eventually, the message reaches a leaf node and gets executed there. +If the key exists in the leaf node, then the event_count is incremented. +Otherwise, the new row is inserted into the leaf node. + +Update example +-------------- + +If `event_id` is known to exist in the table, then ``UPDATE`` statement can be +used to increment its `event_count` (once again, specific `event_id` value is +written here as ``%id``): + +.. code-block:: sql + + UPDATE t SET event_count=event_count+1 + WHERE event_id=%id; + +Explanation +*********** + +TokuDB generates an “update” message from the ``UPDATE`` statement and its +update expression trees, and inserts this message into the Fractal Tree index. +When the message eventually reaches the leaf node, the increment program is +extracted from the message and executed. diff --git a/doc/source/tokudb/tokudb_variables.rst b/doc/source/tokudb/tokudb_variables.rst index f5aaed204fb6..37be08a79ff9 100644 --- a/doc/source/tokudb/tokudb_variables.rst +++ b/doc/source/tokudb/tokudb_variables.rst @@ -215,12 +215,12 @@ TokuDB Server Variables - Yes - Session, Global - Yes - * - tokudb_enable_fast_update + * - :variable:`tokudb_enable_fast_update` - Yes - Yes - Session, Global - Yes - * - tokudb_enable_fast_upsert + * - :variable:`tokudb_enable_fast_upsert` - Yes - Yes - Session, Global diff --git a/doc/source/upstream-bug-fixes.rst b/doc/source/upstream-bug-fixes.rst index e3a8ffc318e0..23d1567c3a77 100644 --- a/doc/source/upstream-bug-fixes.rst +++ b/doc/source/upstream-bug-fixes.rst @@ -59,6 +59,12 @@ |:Fix Released: :rn:`5.7.21-20` | |:Upstream fix: N/A | +-------------------------------------------------------------------------------------------------------------+ +|:Upstream bug: :mysqlbug:`89205` - gap locks on READ COMMITTED cause by page split | +|:JIRA bug: :psbug:`1130` | +|:Upstream state: Closed | +|:Fix Released: :rn:`5.7.22-22` | +|:Upstream fix: 5.7.20 | ++-------------------------------------------------------------------------------------------------------------+ |:Upstream bug: :mysqlbug:`88057` - Intermediary slave does not log master changes with... | |:JIRA bug: :psbug:`1119` | |:Upstream state: Verified (checked on 2018-05-24) | From e51296ecc0abe3f84afe0146ebae1d5fe6305a3c Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Fri, 1 Jun 2018 12:50:41 +0200 Subject: [PATCH 0901/1221] PS-4511: Limit clang-format checkings to given extensions Travis CI: 1. Limit clang-format checkings to the follwing extensions: *.c *.cc *.cpp *.h *.hpp *.i *.ic *.ih 2. Refactor CMAKE_OPT --- .travis.yml | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/.travis.yml b/.travis.yml index e6eb7fe48698..0a38247073f4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -23,7 +23,7 @@ matrix: script: - wget https://llvm.org/svn/llvm-project/cfe/trunk/tools/clang-format/clang-format-diff.py - chmod a+x clang-format-diff.py - - git diff -U0 --no-color HEAD^1 | ./clang-format-diff.py -style=file -p1 >_GIT_DIFF + - git diff -U0 --no-color HEAD^1 *.c *.cc *.cpp *.h *.hpp *.i *.ic *.ih | ./clang-format-diff.py -style=file -p1 >_GIT_DIFF - '[ ! -s _GIT_DIFF ] && { echo The last git commit is clang-formatted; travis_terminate 0; } || { cat _GIT_DIFF; travis_terminate 1; }' @@ -220,29 +220,29 @@ script: -DENABLE_DTRACE=OFF -DWITH_PAM=ON "; - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then - CMAKE_OPT+=" - -DMYSQL_MAINTAINER_MODE=ON - "; - else + if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then CMAKE_OPT+=" -DMYSQL_MAINTAINER_MODE=OFF "; - fi; - if [[ "$INVERTED" == "ON" ]]; then + else CMAKE_OPT+=" - -DWITH_EMBEDDED_SERVER=OFF - -DWITH_READLINE=OFF - -DWITH_SSL=system - -DWITH_ZLIB=bundled - -DWITH_ARCHIVE_STORAGE_ENGINE=OFF - -DWITH_BLACKHOLE_STORAGE_ENGINE=OFF - -DWITH_EXAMPLE_STORAGE_ENGINE=ON - -DWITH_FEDERATED_STORAGE_ENGINE=OFF - -DWITH_INNOBASE_STORAGE_ENGINE=OFF - -DWITHOUT_PARTITION_STORAGE_ENGINE=ON - -DWITH_SCALABILITY_METRICS=ON + -DMYSQL_MAINTAINER_MODE=ON "; + if [[ "$INVERTED" == "ON" ]]; then + CMAKE_OPT+=" + -DWITH_EMBEDDED_SERVER=OFF + -DWITH_READLINE=OFF + -DWITH_SSL=system + -DWITH_ZLIB=bundled + -DWITH_ARCHIVE_STORAGE_ENGINE=OFF + -DWITH_BLACKHOLE_STORAGE_ENGINE=OFF + -DWITH_EXAMPLE_STORAGE_ENGINE=ON + -DWITH_FEDERATED_STORAGE_ENGINE=OFF + -DWITH_INNOBASE_STORAGE_ENGINE=OFF + -DWITHOUT_PARTITION_STORAGE_ENGINE=ON + -DWITH_SCALABILITY_METRICS=ON + "; + fi; fi; - echo --- Perform Debug or RelWithDebInfo compilation; From 4acb1c9daa25c126180c46ae06807fae59eaaba9 Mon Sep 17 00:00:00 2001 From: Robert Golebiowski Date: Tue, 5 Jun 2018 11:01:45 +0200 Subject: [PATCH 0902/1221] PS-4519: system_keys_container.cc:128:146: error: no matching function for call to 'make_pair...' Got rid of template specification so rvalue could be deduced by make_pair. --- plugin/keyring/common/system_keys_container.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugin/keyring/common/system_keys_container.cc b/plugin/keyring/common/system_keys_container.cc index 074b839adf30..faed203d6a5f 100644 --- a/plugin/keyring/common/system_keys_container.cc +++ b/plugin/keyring/common/system_keys_container.cc @@ -125,7 +125,7 @@ void System_keys_container::store_or_update_if_system_key_with_version(IKey *key if (is_system_key_with_version(key, system_key_id, key_version)) { if (system_key_id_to_system_key.count(system_key_id) == 0) // add a new system key - system_key_id_to_system_key.insert(std::make_pair(system_key_id, new System_key_adapter(key_version, key))); + system_key_id_to_system_key.insert(std::make_pair(system_key_id, new System_key_adapter(key_version, key))); else update_system_key(key, system_key_id, key_version); } From fdc0314fdc25407271882dcbb3733576182d8900 Mon Sep 17 00:00:00 2001 From: Joao Gramacho Date: Tue, 8 May 2018 12:26:37 +0100 Subject: [PATCH 0903/1221] BUG#27638268: GTID AUTO SKIP DOES NOT WORK FOR QUERIES WITH PARSER ERRORS Problem ======= Replicating from older to newer MySQL server versions may lead to ER_PARSE_ERROR on replication applier threads because of, for example, the workload is creating a table using a name that on the older server version is now a reserved word. One common workaround fix for this issue DBAs/operators do is to apply the offending transaction manually (changing it enough to be applied without errors) and making the replication applier thread to skip the offending transaction already present on slaves relay log. When GTID_MODE is ON, the recommended way of making the replication applier to skip a transaction is to commit its GTID with an empty transactions (or with the replacement transaction), but GTID auto skip was not working for statements leading to ER_PARSE_ERROR. Analysis ======== GTID auto skip functionality depends on MySQL parser for: - Not skip "innocent" statements. Here, "innocent" includes SET, SHOW, SELECT, DO, USE, and empty query, unless it invokes a stored function. The reason we allow innocent statements to execute even within skipped transactions is that they can be useful for testing and debugging. E.g., we want to run SELECT @@session.gtid_owned to check that there is not a bug that makes the server acquire ownership. - Keep track of transaction boundaries. When applying a workload dumped from mysqlbinlog client program, even skipping statements from already applied transactions, the client session applying the workload must known if a statement is a DDL or a DML (if it is supposed to be wrapped with "BEGIN/COMMIT" or not). Fix === This patch will make the replication applier thread to ignore ER_PARSE_ERROR when applying query events if the transaction being applied is also being GTID auto skipped. Making workloads dumped from mysqlbinlog to also work with GTID auto skip when some statements lead to ER_PARSE_ERROR is too risk, as the GTID enforcement logic could not be guaranteed without having detailed information about the offending statement. --- .../binlog_56_gtid_reserved_word.000001 | Bin 0 -> 1422 bytes .../r/rpl_gtid_skip_with_parser_error.result | 32 ++++++ .../t/rpl_gtid_skip_with_parser_error.test | 107 ++++++++++++++++++ sql/log_event.cc | 7 ++ 4 files changed, 146 insertions(+) create mode 100644 mysql-test/std_data/binlog_56_gtid_reserved_word.000001 create mode 100644 mysql-test/suite/rpl/r/rpl_gtid_skip_with_parser_error.result create mode 100644 mysql-test/suite/rpl/t/rpl_gtid_skip_with_parser_error.test diff --git a/mysql-test/std_data/binlog_56_gtid_reserved_word.000001 b/mysql-test/std_data/binlog_56_gtid_reserved_word.000001 new file mode 100644 index 0000000000000000000000000000000000000000..46d5338e005838cdad65f1c87de51248fb374e71 GIT binary patch literal 1422 zcmeyDl$p2XD_b-_BLf3N2@qERF#`h&gQ=dGo{6DuN@`MRx^7N>I#?Jl0WwC|f|r4V zL5P6`2!t3IVi;JYIDncsI5?Pq6c-nlq$C5Qi``mXkYZ(!o$^3D9f%P?)rajDNLmpj zZ2-i_!E%g(XaFP)0xf)*uR!XVKmxfyYyy^nNwY98D1wwRFn~lHKnynK;*t~=4xmdp z79(trY|AnL)Apm1i8f-tc<4%1ccu70jTKu5YL_;`8)9SL;1 zUWwtPj`NHtuKI=DRm@Op=a$X1hr7xjDCh}vF9$e)Kq^QGGACDePruonLR;X*ffCVP zu=l}kAk8>WzhKv(5Cu=a5Pt=PSHm2ALS2IuGz>L$6f}%Lgt6wIv%j6-b_M`#;RSk* zEH60w`}%r@H04wzq6DEWIIu8M9WZRb;As|93EX}UpinEi{RATx9CmeCcfvsC2!le) z1c-Nn?ezv*!pOh^P6C|puwY;WN@rhx-we_t2hyVf#1B#QFflOx|K|u4j-0H%0q#am zpnw+8^(bLP(2bD5Ib@`(1TqMoC8NN>fDt&XKs!L-dhJSZ4hLt+VxYiThX<_4-8CZkX_(5O;0OIoFmjD0& literal 0 HcmV?d00001 diff --git a/mysql-test/suite/rpl/r/rpl_gtid_skip_with_parser_error.result b/mysql-test/suite/rpl/r/rpl_gtid_skip_with_parser_error.result new file mode 100644 index 000000000000..582fd4164d31 --- /dev/null +++ b/mysql-test/suite/rpl/r/rpl_gtid_skip_with_parser_error.result @@ -0,0 +1,32 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +include/rpl_stop_server.inc [server_number=1] +include/rpl_start_server.inc [server_number=1] +include/assert.inc [All transactions are assumed as applied on master] +[connection slave] +include/start_slave_io.inc +[connection master] +include/sync_slave_io_with_master.inc +START SLAVE SQL_THREAD; +include/wait_for_slave_sql_error.inc [errno=1064] +include/assert.inc [Only 1st transaction is applied on slave] +SET GTID_NEXT='11111111-1111-1111-1111-111111111111:2'; +BEGIN; +COMMIT; +SET GTID_NEXT='11111111-1111-1111-1111-111111111111:3'; +BEGIN; +COMMIT; +SET GTID_NEXT='11111111-1111-1111-1111-111111111111:4'; +BEGIN; +COMMIT; +SET GTID_NEXT='11111111-1111-1111-1111-111111111111:6'; +BEGIN; +COMMIT; +SET GTID_NEXT=AUTOMATIC; +include/start_slave_sql.inc +include/sync_slave_sql_with_io.inc +CALL mtr.add_suppression("The slave coordinator and worker threads are stopped"); +include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_gtid_skip_with_parser_error.test b/mysql-test/suite/rpl/t/rpl_gtid_skip_with_parser_error.test new file mode 100644 index 000000000000..8b83989a9074 --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_gtid_skip_with_parser_error.test @@ -0,0 +1,107 @@ +# ==== Purpose ==== +# +# Test that GTID auto skip works even when replication applier is applying +# events that would lead to ER_PARSE_ERROR. +# +# For this test case a binary log file was generated in MySQL 5.6 creating +# a table with a name that is a reserved word in MySQL 5.7+. +# +# Replicating the binary log to a 5.7+ slave shall make the applier thread +# to stop once reaching the offending transaction. +# +# Supposing a DBA/operator fixed the issue manually and the GTID of the +# offending transaction was committed so the replicated one shall be skipped +# by GTID auto skip functionality, restarting the slave applier thread shall +# not hit errors for this transaction anymore. +# +# The binary log file generated in MySQL 5.6 has the following content: +# +#+-------------------+------+----------------+-----------+-------------+-------------------------------------------------------------------+ +#| Log_name | Pos | Event_type | Server_id | End_log_pos | Info | +#+-------------------+------+----------------+-----------+-------------+-------------------------------------------------------------------+ +#| master-bin.000001 | 4 | Format_desc | 1 | 120 | Server ver: 5.6.41-debug-log, Binlog ver: 4 | +#| master-bin.000001 | 120 | Previous_gtids | 1 | 151 | | +#| master-bin.000001 | 151 | Gtid | 1 | 199 | SET @@SESSION.GTID_NEXT= '11111111-1111-1111-1111-111111111111:1' | +#| master-bin.000001 | 199 | Query | 1 | 308 | use `test`; CREATE TABLE t1 (a int PRIMARY KEY) | +#| master-bin.000001 | 308 | Gtid | 1 | 356 | SET @@SESSION.GTID_NEXT= '11111111-1111-1111-1111-111111111111:2' | +#| master-bin.000001 | 356 | Query | 1 | 458 | use `test`; CREATE TABLE GENERATED LIKE test.t1 | +#| master-bin.000001 | 458 | Gtid | 1 | 506 | SET @@SESSION.GTID_NEXT= '11111111-1111-1111-1111-111111111111:3' | +#| master-bin.000001 | 506 | Query | 1 | 585 | BEGIN | +#| master-bin.000001 | 585 | Query | 1 | 701 | use `test`; INSERT INTO GENERATED VALUES (1), (2), (3) | +#| master-bin.000001 | 701 | Query | 1 | 781 | COMMIT | +#| master-bin.000001 | 781 | Gtid | 1 | 829 | SET @@SESSION.GTID_NEXT= '11111111-1111-1111-1111-111111111111:4' | +#| master-bin.000001 | 829 | Query | 1 | 901 | BEGIN | +#| master-bin.000001 | 901 | Table_map | 1 | 953 | table_id: 75 (test.GENERATED) | +#| master-bin.000001 | 953 | Write_rows | 1 | 993 | table_id: 75 flags: STMT_END_F | +#| master-bin.000001 | 993 | Query | 1 | 1066 | COMMIT | +#| master-bin.000001 | 1066 | Gtid | 1 | 1114 | SET @@SESSION.GTID_NEXT= '11111111-1111-1111-1111-111111111111:5' | +#| master-bin.000001 | 1114 | Query | 1 | 1229 | use `test`; DROP TABLE `t1` /* generated by server */ | +#| master-bin.000001 | 1229 | Gtid | 1 | 1277 | SET @@SESSION.GTID_NEXT= '11111111-1111-1111-1111-111111111111:6' | +#| master-bin.000001 | 1277 | Query | 1 | 1399 | use `test`; DROP TABLE `GENERATED` /* generated by server */ | +#+-------------------+------+----------------+-----------+-------------+-------------------------------------------------------------------+ +# +# ==== Related Bugs and Worklogs ==== +# +# BUG#27638268 GTID AUTO SKIP DOES NOT WORK FOR QUERIES WITH PARSER ERRORS +# + +# This test case is not compatible with SBR. +--source include/have_binlog_format_mixed_or_row.inc +--source include/have_gtid.inc +--let $rpl_skip_start_slave = 1 +--source include/master-slave.inc + +--let $MASTER_DATADIR= `select @@datadir` + +# Restart the master to make it use the 5.6 binary log file as its own. +--let $rpl_server_number= 1 +--source include/rpl_stop_server.inc +--remove_file $MASTER_DATADIR/master-bin.000001 +--copy_file std_data/binlog_56_gtid_reserved_word.000001 $MASTER_DATADIR/master-bin.000001 +--source include/rpl_start_server.inc + +# Assert that all 6 transactions are assumed as already applied. +--let $assert_text= All transactions are assumed as applied on master +--let $assert_cond= "[SELECT @@GLOBAL.gtid_executed]" = "11111111-1111-1111-1111-111111111111:1-6" +--source include/assert.inc + +# Start and sync slave's receiver thread +--source include/rpl_connection_slave.inc +--source include/start_slave_io.inc +--source include/rpl_connection_master.inc +--source include/sync_slave_io_with_master.inc + +# Start slave's applier thread. It should stop with ER_PARSE_ERROR. +START SLAVE SQL_THREAD; +--let $slave_sql_errno= convert_error(ER_PARSE_ERROR) +--source include/wait_for_slave_sql_error.inc + +# Assert that only 1st transaction is applied. +--let $assert_text= Only 1st transaction is applied on slave +--let $assert_cond= "[SELECT @@GLOBAL.gtid_executed]" = "11111111-1111-1111-1111-111111111111:1" +--source include/assert.inc + +# Prepare GTID auto skip of offending transactions. +SET GTID_NEXT='11111111-1111-1111-1111-111111111111:2'; +BEGIN; +COMMIT; + +SET GTID_NEXT='11111111-1111-1111-1111-111111111111:3'; +BEGIN; +COMMIT; + +SET GTID_NEXT='11111111-1111-1111-1111-111111111111:4'; +BEGIN; +COMMIT; + +SET GTID_NEXT='11111111-1111-1111-1111-111111111111:6'; +BEGIN; +COMMIT; + +SET GTID_NEXT=AUTOMATIC; + +# Restart applier thread that shall sync without issues. +--source include/start_slave_sql.inc +--source include/sync_slave_sql_with_io.inc +CALL mtr.add_suppression("The slave coordinator and worker threads are stopped"); +--source include/rpl_end.inc diff --git a/sql/log_event.cc b/sql/log_event.cc index 3559dfd613e9..92396760e65f 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -4867,6 +4867,13 @@ int Query_log_event::do_apply_event(Relay_log_info const *rli, } compare_errors: + /* Parser errors shall be ignored when (GTID) skipping statements */ + if (thd->is_error() && + thd->get_stmt_da()->mysql_errno() == ER_PARSE_ERROR && + gtid_pre_statement_checks(thd) == GTID_STATEMENT_SKIP) + { + thd->get_stmt_da()->reset_diagnostics_area(); + } /* In the slave thread, we may sometimes execute some DROP / * 40005 TEMPORARY * / TABLE that come from parts of binlogs (likely if we From 365111c590082984dbae42e1d1da28ac3f7fb5bd Mon Sep 17 00:00:00 2001 From: Jimmy Yang Date: Wed, 6 Jun 2018 16:23:00 -0700 Subject: [PATCH 0904/1221] Fix Bug 27577612 - CONCURRENT SERIALIZABLE TRANSACTIONS CAN INSERT INTO AN AREA SELECTED FOR UPDATE Backport fix to mysql-5.7 Reviewed-by: Allen Lai --- .../innodb_gis/r/rtree_concurrent_srch.result | 35 +++++++++++ .../innodb_gis/t/rtree_concurrent_srch.test | 58 +++++++++++++++++++ storage/innobase/gis/gis0sea.cc | 3 +- 3 files changed, 94 insertions(+), 2 deletions(-) diff --git a/mysql-test/suite/innodb_gis/r/rtree_concurrent_srch.result b/mysql-test/suite/innodb_gis/r/rtree_concurrent_srch.result index 8e42d9faab48..600bb5e9d531 100644 --- a/mysql-test/suite/innodb_gis/r/rtree_concurrent_srch.result +++ b/mysql-test/suite/innodb_gis/r/rtree_concurrent_srch.result @@ -323,4 +323,39 @@ count(*) drop procedure insert_t1; DROP TABLE t1; SET SESSION debug="-d,rtr_pcur_move_to_next_return"; +CREATE TABLE g ( +id INT PRIMARY KEY, +p GEOMETRY NOT NULL, +SPATIAL KEY p_idx(p) +) ENGINE=InnoDB; +create procedure populate_g(IN `rows` INT) +begin +declare i int default 1; +while (i <= `rows`) DO +insert into test.g (id, p) values (i, POINT(i, i)); +set i = i + 1; +end while; +end| +call populate_g(650); +start transaction; +select id from g WHERE MBRContains(ST_GeomFromText('Polygon((100 0,100 5,105 +5,105 0,100 0))'),p) for update; +id +set innodb_lock_wait_timeout = 1; +set transaction isolation level serializable; +insert into g values(1103, POINT(100, 1)); +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +start transaction; +select id from g WHERE MBRContains(ST_GeomFromText('Polygon((100 0,100 5,105 +5,105 0,100 0))'),p) for update; +id +commit; +set innodb_lock_wait_timeout = 1; +set transaction isolation level serializable; +insert into g values(1103, POINT(100, 1)); +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +commit; +DROP TABLE g; +DROP PROCEDURE populate_g; +set innodb_lock_wait_timeout = default; SET DEBUG_SYNC = 'RESET'; diff --git a/mysql-test/suite/innodb_gis/t/rtree_concurrent_srch.test b/mysql-test/suite/innodb_gis/t/rtree_concurrent_srch.test index ec6f496b5ccd..35b5a27dc875 100644 --- a/mysql-test/suite/innodb_gis/t/rtree_concurrent_srch.test +++ b/mysql-test/suite/innodb_gis/t/rtree_concurrent_srch.test @@ -448,4 +448,62 @@ disconnect b; --source include/wait_until_disconnected.inc connection default; +CREATE TABLE g ( + id INT PRIMARY KEY, + p GEOMETRY NOT NULL, + SPATIAL KEY p_idx(p) +) ENGINE=InnoDB; + +delimiter |; +create procedure populate_g(IN `rows` INT) +begin + declare i int default 1; + while (i <= `rows`) DO + insert into test.g (id, p) values (i, POINT(i, i)); + set i = i + 1; + end while; +end| +delimiter ;| + +call populate_g(650); + +start transaction; +select id from g WHERE MBRContains(ST_GeomFromText('Polygon((100 0,100 5,105 +5,105 0,100 0))'),p) for update; + +connect (a,localhost,root,,); +connection a; +set innodb_lock_wait_timeout = 1; +set transaction isolation level serializable; + +--error ER_LOCK_WAIT_TIMEOUT +insert into g values(1103, POINT(100, 1)); + +connect (b,localhost,root,,); +connection b; +start transaction; +select id from g WHERE MBRContains(ST_GeomFromText('Polygon((100 0,100 5,105 +5,105 0,100 0))'),p) for update; + +connection default; +commit; + +connection a; +set innodb_lock_wait_timeout = 1; +set transaction isolation level serializable; + +--error ER_LOCK_WAIT_TIMEOUT +insert into g values(1103, POINT(100, 1)); +disconnect a; +--source include/wait_until_disconnected.inc + +connection b; +commit; +disconnect b; +--source include/wait_until_disconnected.inc + +connection default; +DROP TABLE g; +DROP PROCEDURE populate_g; +set innodb_lock_wait_timeout = default; SET DEBUG_SYNC = 'RESET'; diff --git a/storage/innobase/gis/gis0sea.cc b/storage/innobase/gis/gis0sea.cc index ed4ec02859f1..3b1fd8cce07a 100644 --- a/storage/innobase/gis/gis0sea.cc +++ b/storage/innobase/gis/gis0sea.cc @@ -385,8 +385,7 @@ rtr_pcur_getnext_from_path( if (mode != PAGE_CUR_RTREE_INSERT && mode != PAGE_CUR_RTREE_LOCATE && mode >= PAGE_CUR_CONTAIN - && btr_cur->rtr_info->need_prdt_lock - && found) { + && btr_cur->rtr_info->need_prdt_lock) { lock_prdt_t prdt; trx_t* trx = thr_get_trx( From 70c2357469b2242de0804a9ee80a8b988bc6095f Mon Sep 17 00:00:00 2001 From: Jimmy Yang Date: Wed, 6 Jun 2018 16:24:20 -0700 Subject: [PATCH 0905/1221] Fix Bug#26375771: INNODB: ASSERTION FAILURE: MACH0DATA.IC:308:VAL > 0X7F Backport fix to mysql-5.7 Reviewed-by: Allen Lai --- .../suite/innodb/r/virtual_debug.result | 14 ++++++++++ mysql-test/suite/innodb/t/virtual_debug.test | 26 +++++++++++++++++++ storage/innobase/row/row0log.cc | 2 +- 3 files changed, 41 insertions(+), 1 deletion(-) diff --git a/mysql-test/suite/innodb/r/virtual_debug.result b/mysql-test/suite/innodb/r/virtual_debug.result index f466f0fe7f32..091ccea4aa5a 100644 --- a/mysql-test/suite/innodb/r/virtual_debug.result +++ b/mysql-test/suite/innodb/r/virtual_debug.result @@ -237,4 +237,18 @@ SELECT * FROM t; b v fubar fub DROP TABLE t; +# +# Bug#26375771 INNODB: ASSERTION FAILURE: MACH0DATA.IC:308:VAL > 0X7F +# +create table ibstd_07 (a int not null, d int not null, b blob not null, c text, vadcol int as (a+length(d)) stored, vbcol char(2) as (substr(b,2,2)) virtual, vbidxcol char(3) as (substr(b,1,3)) virtual , index(d desc), index(a desc), index(vbidxcol desc), index(vbidxcol desc,d asc), unique key (b(101) desc, a asc, d ), index(c(255) desc, b(255) asc), index(b(5) desc, c(10) asc, a ) ) engine=InnoDB default charset=latin1 row_format=redundant; +insert into ibstd_07 values (2, 2, repeat('rocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaooc','281'),repeat('ouolrculuouocououooalcoraooaulouuacrolrocooraoaooooolaccralacalooolalocoaacoorarorcurccarocucla','317'), default, default, default); +SET DEBUG_SYNC = 'innodb_inplace_alter_table_enter SIGNAL start_create WAIT_FOR go_ahead'; +alter table ibstd_07 add primary key (b(11) desc,a asc, d );; +SET DEBUG_SYNC = 'now WAIT_FOR start_create'; +update ibstd_07 set c=repeat('0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo','70'); +SET DEBUG_SYNC = 'now SIGNAL go_ahead'; +SELECT * FROM ibstd_07; +a d b c vadcol vbcol vbidxcol +2 2 rocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaoocrocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaooc 0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo 3 oc roc +DROP TABLE ibstd_07; SET DEBUG_SYNC = 'RESET'; diff --git a/mysql-test/suite/innodb/t/virtual_debug.test b/mysql-test/suite/innodb/t/virtual_debug.test index 74838c2250b3..a589cd0d497e 100644 --- a/mysql-test/suite/innodb/t/virtual_debug.test +++ b/mysql-test/suite/innodb/t/virtual_debug.test @@ -281,6 +281,32 @@ CHECK TABLE t; SELECT * FROM t; DROP TABLE t; +--echo # +--echo # Bug#26375771 INNODB: ASSERTION FAILURE: MACH0DATA.IC:308:VAL > 0X7F +--echo # +create table ibstd_07 (a int not null, d int not null, b blob not null, c text, vadcol int as (a+length(d)) stored, vbcol char(2) as (substr(b,2,2)) virtual, vbidxcol char(3) as (substr(b,1,3)) virtual , index(d desc), index(a desc), index(vbidxcol desc), index(vbidxcol desc,d asc), unique key (b(101) desc, a asc, d ), index(c(255) desc, b(255) asc), index(b(5) desc, c(10) asc, a ) ) engine=InnoDB default charset=latin1 row_format=redundant; + +insert into ibstd_07 values (2, 2, repeat('rocalrulcrcaurcuccoolrouuocacaooaucauualcucuoucucclolcllloocuarcoorlaccarocouuaoorcolloucraoaaooc','281'),repeat('ouolrculuouocououooalcoraooaulouuacrolrocooraoaooooolaccralacalooolalocoaacoorarorcurccarocucla','317'), default, default, default); + + +SET DEBUG_SYNC = 'innodb_inplace_alter_table_enter SIGNAL start_create WAIT_FOR go_ahead'; +--send alter table ibstd_07 add primary key (b(11) desc,a asc, d ); + +# Do a concurrent update +connection con1; +SET DEBUG_SYNC = 'now WAIT_FOR start_create'; + +update ibstd_07 set c=repeat('0.366710324443464crllooolarlollorlulololucrluacoorrrluroluroocouauacacruloulcurlraorcrclrolcocrrcoccolourrooclrcocruruauallo','70'); + + +SET DEBUG_SYNC = 'now SIGNAL go_ahead'; + +connection default; +reap; + +SELECT * FROM ibstd_07; +DROP TABLE ibstd_07; + disconnect con1; SET DEBUG_SYNC = 'RESET'; diff --git a/storage/innobase/row/row0log.cc b/storage/innobase/row/row0log.cc index b17515604d74..09e710a81939 100644 --- a/storage/innobase/row/row0log.cc +++ b/storage/innobase/row/row0log.cc @@ -842,7 +842,7 @@ row_log_table_low_redundant( old_pk_size = rec_get_converted_size_temp( new_index, old_pk->fields, old_pk->n_fields, - ventry, &old_pk_extra_size); + NULL, &old_pk_extra_size); ut_ad(old_pk_extra_size < 0x100); mrec_size += 1/*old_pk_extra_size*/ + old_pk_size; } From 4f9c65ee5379d42e96102a4a34d6635152143490 Mon Sep 17 00:00:00 2001 From: Tatiana Azundris Nuernberg Date: Thu, 7 Jun 2018 23:10:29 +0100 Subject: [PATCH 0906/1221] Bug#27891472: FLUSH LOGS WITH NO LOG FILE PERMISSION LEADS HANG Changing the log file acquires the log-lock. If the file cannot be changed, we try to inform the user of this. To do this, we call the error logger, which in turn waits to acquire the log-lock, and thus hangs forever. With this patch, we first release the log-lock in case of an error, then try to write the message (to the old log, if any), and finally re-acquire the lock as the caller expects to have to release it. --- sql/log.cc | 16 ++++++++++------ sql/log.h | 5 +++-- sql/mysqld.cc | 3 ++- sql/share/errmsg-utf8.txt | 3 +++ 4 files changed, 18 insertions(+), 9 deletions(-) diff --git a/sql/log.cc b/sql/log.cc index e9b43a66a252..3b7873c2c47e 100644 --- a/sql/log.cc +++ b/sql/log.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -1979,7 +1979,7 @@ void init_error_log() } -bool open_error_log(const char *filename) +bool open_error_log(const char *filename, bool get_lock) { DBUG_ASSERT(filename); int retries= 2, errors= 0; @@ -1999,9 +1999,13 @@ bool open_error_log(const char *filename) if (errors) { char errbuf[MYSYS_STRERROR_SIZE]; - sql_print_error("Could not open file '%s' for error logging: %s", - filename, my_strerror(errbuf, sizeof(errbuf), errno)); + if (get_lock) + mysql_mutex_unlock(&LOCK_error_log); + sql_print_error(ER_DEFAULT(ER_CANT_OPEN_ERROR_LOG), filename, + ": ", my_strerror(errbuf, sizeof(errbuf), errno)); flush_error_log_messages(); + if (get_lock) + mysql_mutex_lock(&LOCK_error_log); return true; } @@ -2036,10 +2040,10 @@ bool reopen_error_log() if (!error_log_file) return false; mysql_mutex_lock(&LOCK_error_log); - bool result= open_error_log(error_log_file); + bool result= open_error_log(error_log_file, true); mysql_mutex_unlock(&LOCK_error_log); if (result) - my_error(ER_UNKNOWN_ERROR, MYF(0)); + my_error(ER_CANT_OPEN_ERROR_LOG, MYF(0), error_log_file, ".", ""); return result; } diff --git a/sql/log.h b/sql/log.h index c4fe9c5c0803..0e2bb5992f0e 100644 --- a/sql/log.h +++ b/sql/log.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2005, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -902,8 +902,9 @@ void init_error_log(); have been buffered by calling flush_error_log_messages(). @param filename Name of error log file + @param get_lock Should we acquire LOCK_error_log? */ -bool open_error_log(const char *filename); +bool open_error_log(const char *filename, bool get_lock); /** Free any error log resources. diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 7bfe384faafa..96fb05af55db 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -3852,8 +3852,9 @@ static int init_server_components() */ log_error_dest= errorlog_filename_buff; - if (open_error_log(errorlog_filename_buff)) + if (open_error_log(errorlog_filename_buff, false)) unireg_abort(MYSQLD_ABORT_EXIT); + #ifdef _WIN32 FreeConsole(); // Remove window #endif diff --git a/sql/share/errmsg-utf8.txt b/sql/share/errmsg-utf8.txt index af1c8664c5ad..6d5e793e2651 100644 --- a/sql/share/errmsg-utf8.txt +++ b/sql/share/errmsg-utf8.txt @@ -7771,6 +7771,9 @@ WARN_DEPRECATED_MAXDB_SQL_MODE_FOR_TIMESTAMP ER_XA_REPLICATION_FILTERS eng "The use of replication filters with XA transactions is not supported, and can lead to an undefined state in the replication slave." +ER_CANT_OPEN_ERROR_LOG + eng "Could not open file '%s' for error logging%s%s" + # # End of 5.7 error messages. # From 913071c0b16cc03e703308250d795bc381627e37 Mon Sep 17 00:00:00 2001 From: Nisha Gopalakrishnan Date: Wed, 30 May 2018 14:54:46 +0530 Subject: [PATCH 0907/1221] BUG#26848813: INDEXED COLUMN CAN'T BE CHANGED FROM VARCHAR(15) TO VARCHAR(40) INSTANTANEOUSLY Analysis ======== Indexed VARCHAR columns are not expanded instantaneously (without index rebuild)for InnoDB tables using INPLACE algorithm. The other problems uncovered as part of this bug are: a) Indexed VARCHAR columns when converted from unpacked keys to packed keys(key size > 8 bytes) by expanding the VARCHAR column was not instantaneous for InnoDB tables using INPLACE algorithm even though pack keys is a no-op for InnoDB tables. b) CREATE/ALTER of InnoDB tables where the index size exceeds the SE limit of 767 bytes for COMPACT or REDUNDANT row_format did not report error in STRICT mode and warning in non-strict mode. SQL layer determines if there has been a change in index definition and sets the appropriate handler flags which helps the SE to determine whether a index rebuild needs to be performed. The 'has_index_def_changed()' did not check if the change in length had a compatible packed data representation and marked it as a change in index by setting the handler flags DROP_INDEX and ADD_INDEX triggering a recreation of indexes in InnoDB. When 'PACK_KEYS' option is not specified, indexes on columns with string types are marked for packing through HA_PACK_KEY. Currently only MyISAM engine supports it. Indexes on columns with length greater than 8 bytes were marked for packing irrespective of the storage engine. Converting the indexes from non-packed to packed i.e expanding the varchar column from lesser than 8 chars to more than 8 chars using ALTER was marked as a change in index definition during the check in 'has_index_def_changed()' even though InnoDB does not support packed keys. The handler API ha_innobase::max_supported_key_part_length() returned an incorrect maximum support key part length since the row format of the table was not taken into account. Hence creation of tables using REDUNDANT/COMPACT row format with index size exceeding the SE limit were allowed. Fix: === a) A new handler flag 'Alter_inplace_info::ALTER_COLUMN_INDEX_LENGTH" is introduced. This is set in 'has_index_def_changed()' when the index length differs due to column modification and has compatible packed data representation while determining if the index definition has changed. b) Introduced a handlerton flag 'HTON_SUPPORTS_PACKED_KEYS' to check for 'PACK_KEYS' support which is currently set for MyISAM engine since it is the only engine which supports packed keys. The 'HTON_SUPPORTS_PACKED_KEYS' is checked prior to setting the index flag 'HA_BINARY_PACK_KEY' for packed keys. Hence for InnoDB the packed key flag for indexes is not set. c) The handler API max_supported_key_part_length() has been modified to take 'create_info' as a parameter from which the row_format can be fetched and appropriate index limit can be computed and returned by the InnoDB implementation of the handler API. More details on the behavior is mentioned in the table below. - Since the index limit is computed correctly and checked at the SQL layer, the error message 'ER_TOO_LONG_KEY' is reported at the SQL layer instead of 'ER_INDEX_COLUMN_TOO_LONG' (which was reported by the handler interface after mapping the error returned by SE). - For COMPACT and REDUNDANT row format, when the index size exceeds 767 bytes, a warning is reported in non-STRICT mode and the index is truncated to fit 767 bytes. In a STRICT mode, an error is reported. This table describes the behavior of INDEX limit, Type of INDEX and behavior under STRICT and NON_STRICT mode. IL===> Index Limit. -------------------------------------------------------------------------------| Row Format |INDEX LIMIT | STRICT MODE(>IL) | NON-STRICT MODE(>IL) | ----------------------|--------------------------------------------------------| Compact/Redundant | 767 bytes | Error | Index truncation(767) | (Non Unique Index) | | | and warning. | -------------------------------------------------------------------------------- Compact/Redundant | 767 bytes | Error | Error | (Unique/Primary Index)| | | | -------------------------------------------------------------------------------- Dynamic/Compressed | 3072 byes | Error | Index truncation(3072) | (Non Unique Index) | | | and warning | -------------------------------------------------------------------------------- Dynamic/Compressed | 3072 bytes| Error | Error | (Unique/Primary Index)| | | | -------------------------------------------------------------------------------- (cherry picked from commit bdc97b75674ade0251bdbc3ea2dc7d36871f73cd) --- mysql-test/r/alter_table.result | 103 +++++++++++++++ mysql-test/r/innodb_mysql_sync.result | 19 +++ .../r/default_row_format_compatibility.result | 2 +- .../suite/innodb/r/innodb-large-prefix.result | 6 +- .../t/default_row_format_compatibility.test | 2 +- .../suite/innodb/t/innodb-large-prefix.test | 6 +- .../innodb_zip/r/index_large_prefix.result | 8 +- .../innodb_zip/r/index_large_prefix_4k.result | 6 +- .../innodb_zip/r/index_large_prefix_8k.result | 8 +- .../r/prefix_index_liftedlimit.result | 4 +- mysql-test/suite/innodb_zip/r/wl6469.result | 7 +- .../innodb_zip/t/index_large_prefix.test | 8 +- .../innodb_zip/t/index_large_prefix_4k.test | 6 +- .../innodb_zip/t/index_large_prefix_8k.test | 8 +- .../t/prefix_index_liftedlimit.test | 4 +- mysql-test/suite/innodb_zip/t/wl6469.test | 6 +- mysql-test/t/alter_table.test | 123 ++++++++++++++++++ mysql-test/t/innodb_mysql_sync.test | 28 ++++ sql/ha_ndbcluster.cc | 5 +- sql/ha_ndbcluster.h | 4 +- sql/handler.cc | 3 +- sql/handler.h | 19 ++- sql/sql_table.cc | 40 ++++-- sql/sql_tmp_table.cc | 4 +- storage/archive/ha_archive.h | 6 +- storage/blackhole/ha_blackhole.h | 6 +- storage/federated/ha_federated.h | 6 +- storage/heap/ha_heap.h | 6 +- storage/innobase/handler/ha_innodb.cc | 17 ++- storage/innobase/handler/ha_innodb.h | 4 +- storage/innobase/handler/handler0alter.cc | 3 +- storage/myisam/ha_myisam.cc | 3 +- storage/myisam/ha_myisam.h | 6 +- storage/myisammrg/ha_myisammrg.h | 6 +- storage/partition/ha_partition.cc | 21 ++- storage/partition/ha_partition.h | 6 +- 36 files changed, 432 insertions(+), 87 deletions(-) diff --git a/mysql-test/r/alter_table.result b/mysql-test/r/alter_table.result index f91e0b3bf60a..459ded4ae553 100644 --- a/mysql-test/r/alter_table.result +++ b/mysql-test/r/alter_table.result @@ -3683,3 +3683,106 @@ ERROR 22004: Invalid use of NULL value ALTER TABLE t2 MODIFY fld0 POINT NOT NULL; ERROR 22004: Invalid use of NULL value DROP TABLE t1, t2; +# +# BUG#26848813: INDEXED COLUMN CAN'T BE CHANGED FROM VARCHAR(15) +# TO VARCHAR(40) INSTANTANEOUSLY +SET @orig_sql_mode= @@sql_mode; +SET @orig_innodb_large_prefix= @@global.innodb_large_prefix; +SET GLOBAL innodb_large_prefix= ON; +Warnings: +Warning 131 Using innodb_large_prefix is deprecated and the parameter may be removed in future releases. See http://dev.mysql.com/doc/refman/5.7/en/innodb-file-format.html +# Tests where an error is reported under strict mode when the index +# limit exceeds the maximum supported length by SE. +CREATE TABLE t1 (fld1 VARCHAR(768), KEY(fld1)) CHARSET latin1 ENGINE =InnoDB +ROW_FORMAT= COMPACT; +ERROR 42000: Specified key was too long; max key length is 767 bytes +CREATE TABLE t2 (fld1 VARCHAR(3073), KEY(fld1)) CHARSET latin1 ENGINE= InnoDB; +ERROR 42000: Specified key was too long; max key length is 3072 bytes +# Test with innodb prefix indexes where the index limit is 767 bytes +CREATE TABLE t1 (fld1 VARCHAR(767), KEY(fld1)) CHARSET latin1 ENGINE=INNODB +ROW_FORMAT=COMPACT; +ALTER TABLE t1 MODIFY fld1 VARCHAR(768), ALGORITHM= INPLACE; +ERROR 42000: Specified key was too long; max key length is 767 bytes +ALTER TABLE t1 MODIFY fld1 VARCHAR(768), ALGORITHM= COPY; +ERROR 42000: Specified key was too long; max key length is 767 bytes +# Test with innodb prefix indexes where the index limit is 3072 bytes +CREATE TABLE t2 (fld1 VARCHAR(3072), KEY(fld1)) CHARSET latin1 ENGINE=INNODB +ROW_FORMAT=DYNAMIC; +ALTER TABLE t2 MODIFY fld1 VARCHAR(3073), ALGORITHM= INPLACE; +ERROR 42000: Specified key was too long; max key length is 3072 bytes +ALTER TABLE t2 MODIFY fld1 VARCHAR(3073), ALGORITHM= COPY; +ERROR 42000: Specified key was too long; max key length is 3072 bytes +# Tests with innodb_large_prefix disabled and strict mode. +SET GLOBAL innodb_large_prefix= OFF; +Warnings: +Warning 131 Using innodb_large_prefix is deprecated and the parameter may be removed in future releases. See http://dev.mysql.com/doc/refman/5.7/en/innodb-file-format.html +CREATE TABLE t3 (fld1 VARCHAR(3072), KEY(fld1)) CHARSET latin1 ENGINE= InnoDB; +ERROR 42000: Specified key was too long; max key length is 767 bytes +DROP TABLE t1, t2; +SET sql_mode= ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET GLOBAL innodb_large_prefix= ON; +Warnings: +Warning 131 Using innodb_large_prefix is deprecated and the parameter may be removed in future releases. See http://dev.mysql.com/doc/refman/5.7/en/innodb-file-format.html +# Test where the indexes are truncated to fit the index limit and +# a warning is reported under non-strict mode when the index exceeds +# the SE limit. +CREATE TABLE t1 (fld1 VARCHAR(768), KEY(fld1)) ENGINE= InnoDB +ROW_FORMAT=COMPACT; +Warnings: +Warning 1071 Specified key was too long; max key length is 767 bytes +CREATE TABLE t2 (fld1 VARCHAR(3073), KEY(fld1)) ENGINE= InnoDB; +Warnings: +Warning 1071 Specified key was too long; max key length is 3072 bytes +# Test with innodb prefix indexes where the index limit is 767 bytes. +CREATE TABLE t3 (fld1 VARCHAR(767), KEY(fld1))ENGINE=INNODB ROW_FORMAT=COMPACT; +ALTER TABLE t3 MODIFY fld1 VARCHAR(768), ALGORITHM= INPLACE; +Warnings: +Warning 1071 Specified key was too long; max key length is 767 bytes +ALTER TABLE t3 MODIFY fld1 VARCHAR(800), ALGORITHM= COPY; +# Test with innodb prefix indexes where the index limit is 3072 bytes. +CREATE TABLE t4 (fld1 VARCHAR(3072), KEY(fld1))ENGINE=INNODB +ROW_FORMAT=DYNAMIC; +ALTER TABLE t4 MODIFY fld1 VARCHAR(3073), ALGORITHM= INPLACE; +Warnings: +Warning 1071 Specified key was too long; max key length is 3072 bytes +ALTER TABLE t4 MODIFY fld1 VARCHAR(3074), ALGORITHM= COPY; +# For unique and primary keys, an error is reported even in non-strict +# mode. +CREATE TABLE t5(fld1 VARCHAR(768) PRIMARY KEY) ENGINE= InnoDB +ROW_FORMAT=COMPACT; +ERROR 42000: Specified key was too long; max key length is 767 bytes +CREATE TABLE t5(fld1 VARCHAR(3073), UNIQUE KEY(fld1)) ENGINE= InnoDB; +ERROR 42000: Specified key was too long; max key length is 3072 bytes +# Tests with innodb_large_prefix disabled and strict mode. +SET GLOBAL innodb_large_prefix= OFF; +Warnings: +Warning 131 Using innodb_large_prefix is deprecated and the parameter may be removed in future releases. See http://dev.mysql.com/doc/refman/5.7/en/innodb-file-format.html +CREATE TABLE t5 (fld1 VARCHAR(3072), KEY(fld1)) CHARSET latin1 ENGINE= InnoDB; +Warnings: +Warning 1071 Specified key was too long; max key length is 767 bytes +DROP TABLE t1, t2, t3, t4, t5; +SET sql_mode= @orig_sql_mode; +SET GLOBAL innodb_large_prefix= ON; +# Tests added for coverage. +CREATE TABLE t1(fld1 VARCHAR(3), KEY(fld1)) ENGINE=MYISAM; +# Conversion of unpacked keys to packed keys reports +# error for INPLACE Alter. +ALTER TABLE t1 MODIFY fld1 VARCHAR(10), ALGORITHM=INPLACE; +ERROR 0A000: ALGORITHM=INPLACE is not supported for this operation. Try ALGORITHM=COPY. +# Succeeds with index rebuild. +ALTER TABLE t1 MODIFY fld1 VARCHAR(10), ALGORITHM=COPY; +# Succeeds since the row format is dynamic. +CREATE TABLE t2(fld1 VARCHAR(768), KEY(fld1)) ENGINE= InnoDB ROW_FORMAT= DYNAMIC; +# An error is reported when the index exceeds the column size +# in both strict and non-strict mode. +ALTER TABLE t2 ADD INDEX idx1(fld1(769)); +ERROR HY000: Incorrect prefix key; the used key part isn't a string, the used length is longer than the key part, or the storage engine doesn't support unique prefix keys +SET sql_mode= ''; +ALTER TABLE t2 ADD INDEX idx1(fld1(769)); +ERROR HY000: Incorrect prefix key; the used key part isn't a string, the used length is longer than the key part, or the storage engine doesn't support unique prefix keys +# Cleanup. +DROP TABLE t1, t2; +SET sql_mode= @orig_sql_mode; +SET GLOBAL innodb_large_prefix= @orig_innodb_large_prefix; diff --git a/mysql-test/r/innodb_mysql_sync.result b/mysql-test/r/innodb_mysql_sync.result index 3a400e484f7c..960aec1a3d15 100644 --- a/mysql-test/r/innodb_mysql_sync.result +++ b/mysql-test/r/innodb_mysql_sync.result @@ -746,3 +746,22 @@ ALTER TABLE t1 MODIFY fld1 CHAR(20); #cleanup DROP TABLE t1; SET debug="-d,innodb_index_drop_count_zero"; +# +# BUG#26848813: INDEXED COLUMN CAN'T BE CHANGED FROM VARCHAR(15) +# TO VARCHAR(40) INSTANTANEOUSLY +CREATE TABLE t1(fld1 VARCHAR(5), KEY(fld1)) ENGINE= InnoDB; +SET DEBUG="+d,innodb_index_drop_count_zero"; +# Without patch, an error is reported. +ALTER TABLE t1 MODIFY fld1 VARCHAR(7), ALGORITHM= INPLACE; +# Scenario where non-packed keys is converted to packed keys +# before the patch, an error is reported. +ALTER TABLE t1 MODIFY fld1 VARCHAR(9), ALGORITHM= INPLACE; +SET DEBUG="-d,innodb_index_drop_count_zero"; +# Tests added for covering cases where rebuild is required. +# Reducing the size of the field. +ALTER TABLE t1 MODIFY fld1 VARCHAR(3), ALGORITHM= INPLACE; +ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY. +# Increasing the size of the field to boundary condition. +ALTER TABLE t1 MODIFY fld1 VARCHAR(256), ALGORITHM= INPLACE; +ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY. +DROP TABLE t1; diff --git a/mysql-test/suite/innodb/r/default_row_format_compatibility.result b/mysql-test/suite/innodb/r/default_row_format_compatibility.result index e98b60a9f72d..72140352b00a 100644 --- a/mysql-test/suite/innodb/r/default_row_format_compatibility.result +++ b/mysql-test/suite/innodb/r/default_row_format_compatibility.result @@ -72,7 +72,7 @@ Table Name Tablespace Table Flags Columns Row Format Zip Size Space Type test/tab test/tab 33 5 Dynamic 0 Single SET GLOBAL innodb_default_row_format=COMPACT; ALTER TABLE tab ROW_FORMAT=COMPACT; -ERROR HY000: Index column size too large. The maximum column size is 767 bytes. +ERROR 42000: Specified key was too long; max key length is 767 bytes DROP TABLE tab; SET GLOBAL innodb_default_row_format=Default; SELECT @@innodb_default_row_format; diff --git a/mysql-test/suite/innodb/r/innodb-large-prefix.result b/mysql-test/suite/innodb/r/innodb-large-prefix.result index f691d59f56f4..311c1742870a 100644 --- a/mysql-test/suite/innodb/r/innodb-large-prefix.result +++ b/mysql-test/suite/innodb/r/innodb-large-prefix.result @@ -5,14 +5,14 @@ CREATE TABLE t1(a int not null,key(a,a)) ENGINE=InnoDB DEFAULT CHARSET=latin1; ERROR 42S21: Duplicate column name 'a' CREATE TABLE t1(a int,b text,key(b(768))) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT; -ERROR HY000: Index column size too large. The maximum column size is 767 bytes. +ERROR 42000: Specified key was too long; max key length is 767 bytes CREATE TABLE t1(a int not null,b text) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT; INSERT INTO t1 VALUES (1,''),(2,''),(3,''),(4,''),(5,''),(6,''),(7,''); CREATE INDEX t1aa ON t1(a,a); ERROR 42S21: Duplicate column name 'a' CREATE INDEX t1b ON t1(b(768)); -ERROR HY000: Index column size too large. The maximum column size is 767 bytes. +ERROR 42000: Specified key was too long; max key length is 767 bytes SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( @@ -35,7 +35,7 @@ INSERT INTO t2 VALUES (1,''),(2,''),(3,''),(4,''),(5,''),(6,''),(7,''); CREATE INDEX t2aa ON t2(a,a); ERROR 42S21: Duplicate column name 'a' CREATE INDEX t2b ON t2(b(768)); -ERROR HY000: Index column size too large. The maximum column size is 767 bytes. +ERROR 42000: Specified key was too long; max key length is 767 bytes SELECT * FROM t2; a b 1 diff --git a/mysql-test/suite/innodb/t/default_row_format_compatibility.test b/mysql-test/suite/innodb/t/default_row_format_compatibility.test index 0fce0c4e5157..9753350fa27b 100644 --- a/mysql-test/suite/innodb/t/default_row_format_compatibility.test +++ b/mysql-test/suite/innodb/t/default_row_format_compatibility.test @@ -160,7 +160,7 @@ SELECT * FROM tab; SET GLOBAL innodb_default_row_format=COMPACT; # Check error ERROR 1709 (HY000): Index column size too large --- error ER_INDEX_COLUMN_TOO_LONG +--error ER_TOO_LONG_KEY ALTER TABLE tab ROW_FORMAT=COMPACT; # Cleanup diff --git a/mysql-test/suite/innodb/t/innodb-large-prefix.test b/mysql-test/suite/innodb/t/innodb-large-prefix.test index 57dc11002af0..b1e9b7c3cb5d 100644 --- a/mysql-test/suite/innodb/t/innodb-large-prefix.test +++ b/mysql-test/suite/innodb/t/innodb-large-prefix.test @@ -9,7 +9,7 @@ --error ER_DUP_FIELDNAME CREATE TABLE t1(a int not null,key(a,a)) ENGINE=InnoDB DEFAULT CHARSET=latin1; --- error ER_INDEX_COLUMN_TOO_LONG +-- error ER_TOO_LONG_KEY CREATE TABLE t1(a int,b text,key(b(768))) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT; CREATE TABLE t1(a int not null,b text) ENGINE=InnoDB DEFAULT CHARSET=latin1 @@ -17,7 +17,7 @@ ROW_FORMAT=COMPACT; INSERT INTO t1 VALUES (1,''),(2,''),(3,''),(4,''),(5,''),(6,''),(7,''); --error ER_DUP_FIELDNAME CREATE INDEX t1aa ON t1(a,a); --- error ER_INDEX_COLUMN_TOO_LONG +-- error ER_TOO_LONG_KEY CREATE INDEX t1b ON t1(b(768)); SHOW CREATE TABLE t1; SELECT * FROM t1; @@ -28,7 +28,7 @@ ROW_FORMAT=COMPACT; INSERT INTO t2 VALUES (1,''),(2,''),(3,''),(4,''),(5,''),(6,''),(7,''); --error ER_DUP_FIELDNAME CREATE INDEX t2aa ON t2(a,a); --- error ER_INDEX_COLUMN_TOO_LONG +-- error ER_TOO_LONG_KEY CREATE INDEX t2b ON t2(b(768)); SELECT * FROM t2; DROP TABLE t2; diff --git a/mysql-test/suite/innodb_zip/r/index_large_prefix.result b/mysql-test/suite/innodb_zip/r/index_large_prefix.result index 7f466e957f35..f4a43c413a01 100644 --- a/mysql-test/suite/innodb_zip/r/index_large_prefix.result +++ b/mysql-test/suite/innodb_zip/r/index_large_prefix.result @@ -494,11 +494,11 @@ drop table worklog5743; ### Test 6 ### create table worklog5743(a TEXT not null, primary key (a(1000))) row_format=compact; -ERROR HY000: Index column size too large. The maximum column size is 767 bytes. +ERROR 42000: Specified key was too long; max key length is 767 bytes create table worklog5743(a TEXT) row_format=compact; create index idx on worklog5743(a(768)); -ERROR HY000: Index column size too large. The maximum column size is 767 bytes. +ERROR 42000: Specified key was too long; max key length is 767 bytes create index idx on worklog5743(a(767)); insert into worklog5743 values(repeat("a", 20000)); begin; @@ -546,12 +546,12 @@ drop table worklog5743; SET sql_mode= default; create table worklog5743(a TEXT not null) ROW_FORMAT=REDUNDANT; create index idx on worklog5743(a(768)); -ERROR HY000: Index column size too large. The maximum column size is 767 bytes. +ERROR 42000: Specified key was too long; max key length is 767 bytes create index idx2 on worklog5743(a(767)); drop table worklog5743; create table worklog5743(a TEXT not null) ROW_FORMAT=COMPACT; create index idx on worklog5743(a(768)); -ERROR HY000: Index column size too large. The maximum column size is 767 bytes. +ERROR 42000: Specified key was too long; max key length is 767 bytes create index idx2 on worklog5743(a(767)); drop table worklog5743; SET GLOBAL innodb_file_per_table=1; diff --git a/mysql-test/suite/innodb_zip/r/index_large_prefix_4k.result b/mysql-test/suite/innodb_zip/r/index_large_prefix_4k.result index 36d232f1e614..923e77892a7a 100644 --- a/mysql-test/suite/innodb_zip/r/index_large_prefix_4k.result +++ b/mysql-test/suite/innodb_zip/r/index_large_prefix_4k.result @@ -362,7 +362,7 @@ create table worklog5743(a TEXT not null, primary key (a(1000))); ERROR 42000: Specified key was too long; max key length is 768 bytes create table worklog5743(a TEXT) ROW_FORMAT=COMPACT; create index idx on worklog5743(a(768)); -ERROR HY000: Index column size too large. The maximum column size is 767 bytes. +ERROR 42000: Specified key was too long; max key length is 767 bytes create index idx on worklog5743(a(767)); insert into worklog5743 values(repeat("a", 20000)); begin; @@ -417,12 +417,12 @@ insert into worklog5743 values(repeat("a", 768)); drop table worklog5743; create table worklog5743(a TEXT not null) ROW_FORMAT=REDUNDANT; create index idx on worklog5743(a(768)); -ERROR HY000: Index column size too large. The maximum column size is 767 bytes. +ERROR 42000: Specified key was too long; max key length is 767 bytes create index idx2 on worklog5743(a(767)); drop table worklog5743; create table worklog5743(a TEXT not null) ROW_FORMAT=COMPACT; create index idx on worklog5743(a(768)); -ERROR HY000: Index column size too large. The maximum column size is 767 bytes. +ERROR 42000: Specified key was too long; max key length is 767 bytes create index idx2 on worklog5743(a(767)); drop table worklog5743; SET GLOBAL innodb_file_per_table=1; diff --git a/mysql-test/suite/innodb_zip/r/index_large_prefix_8k.result b/mysql-test/suite/innodb_zip/r/index_large_prefix_8k.result index c9ee289123ee..f7eb850524a1 100644 --- a/mysql-test/suite/innodb_zip/r/index_large_prefix_8k.result +++ b/mysql-test/suite/innodb_zip/r/index_large_prefix_8k.result @@ -404,10 +404,10 @@ drop table worklog5743; ### Test 6 ### create table worklog5743(a TEXT not null, primary key (a(1000))) row_format=compact; -ERROR HY000: Index column size too large. The maximum column size is 767 bytes. +ERROR 42000: Specified key was too long; max key length is 767 bytes create table worklog5743(a TEXT) row_format=compact; create index idx on worklog5743(a(768)); -ERROR HY000: Index column size too large. The maximum column size is 767 bytes. +ERROR 42000: Specified key was too long; max key length is 767 bytes create index idx on worklog5743(a(767)); insert into worklog5743 values(repeat("a", 20000)); begin; @@ -455,12 +455,12 @@ worklog5743 CREATE TABLE `worklog5743` ( drop table worklog5743; create table worklog5743(a TEXT not null) ROW_FORMAT=REDUNDANT; create index idx on worklog5743(a(768)); -ERROR HY000: Index column size too large. The maximum column size is 767 bytes. +ERROR 42000: Specified key was too long; max key length is 767 bytes create index idx2 on worklog5743(a(767)); drop table worklog5743; create table worklog5743(a TEXT not null) ROW_FORMAT=COMPACT; create index idx on worklog5743(a(768)); -ERROR HY000: Index column size too large. The maximum column size is 767 bytes. +ERROR 42000: Specified key was too long; max key length is 767 bytes create index idx2 on worklog5743(a(767)); drop table worklog5743; SET GLOBAL innodb_file_per_table=1; diff --git a/mysql-test/suite/innodb_zip/r/prefix_index_liftedlimit.result b/mysql-test/suite/innodb_zip/r/prefix_index_liftedlimit.result index fd2def62c494..fd9b2ac93c5e 100644 --- a/mysql-test/suite/innodb_zip/r/prefix_index_liftedlimit.result +++ b/mysql-test/suite/innodb_zip/r/prefix_index_liftedlimit.result @@ -30,9 +30,9 @@ col_1_varchar = REPEAT("c", 4000) 0 1 ALTER TABLE worklog5743 ROW_FORMAT=REDUNDANT; -ERROR HY000: Index column size too large. The maximum column size is 767 bytes. +ERROR 42000: Specified key was too long; max key length is 767 bytes ALTER TABLE worklog5743 ROW_FORMAT=COMPACT; -ERROR HY000: Index column size too large. The maximum column size is 767 bytes. +ERROR 42000: Specified key was too long; max key length is 767 bytes ALTER TABLE worklog5743 ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=16; DROP TABLE worklog5743; CREATE TABLE worklog5743 ( diff --git a/mysql-test/suite/innodb_zip/r/wl6469.result b/mysql-test/suite/innodb_zip/r/wl6469.result index ad328188efbd..1c64e20e23a5 100644 --- a/mysql-test/suite/innodb_zip/r/wl6469.result +++ b/mysql-test/suite/innodb_zip/r/wl6469.result @@ -270,8 +270,9 @@ SET sql_mode = default; set global innodb_large_prefix = 1; Warnings: Warning 131 Using innodb_large_prefix is deprecated and the parameter may be removed in future releases. See http://dev.mysql.com/doc/refman/5.7/en/innodb-file-format.html -SET sql_mode='NO_ENGINE_SUBSTITUTION'; +SET sql_mode='NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES'; Warnings: +Warning 3135 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release. Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET innodb_strict_mode=OFF; create temporary table t ( @@ -279,7 +280,7 @@ a int not null, b blob not null, index sk (b(3021)) ) row_format = compact engine=innodb; -ERROR HY000: Index column size too large. The maximum column size is 767 bytes. +ERROR 42000: Specified key was too long; max key length is 767 bytes create temporary table t ( a int not null, b blob not null, @@ -299,7 +300,7 @@ a int not null, b blob not null, index sk (b(3021)) ) row_format = compact engine=innodb; -ERROR HY000: Index column size too large. The maximum column size is 767 bytes. +ERROR 42000: Specified key was too long; max key length is 767 bytes create temporary table t ( a int not null, b blob not null, diff --git a/mysql-test/suite/innodb_zip/t/index_large_prefix.test b/mysql-test/suite/innodb_zip/t/index_large_prefix.test index 532ffc4b60e5..694eb69bdd77 100644 --- a/mysql-test/suite/innodb_zip/t/index_large_prefix.test +++ b/mysql-test/suite/innodb_zip/t/index_large_prefix.test @@ -370,7 +370,7 @@ drop table worklog5743; -- echo ### Test 6 ### # Create a table with old format, and the limit is 768 bytes. --- error ER_INDEX_COLUMN_TOO_LONG +-- error ER_TOO_LONG_KEY create table worklog5743(a TEXT not null, primary key (a(1000))) row_format=compact; @@ -378,7 +378,7 @@ create table worklog5743(a TEXT) row_format=compact; # Excercise the column length check in ha_innobase::add_index() --- error ER_INDEX_COLUMN_TOO_LONG +-- error ER_TOO_LONG_KEY create index idx on worklog5743(a(768)); # This should be successful @@ -426,13 +426,13 @@ SET sql_mode= default; # We have a limit of 767 bytes for Antelope tables create table worklog5743(a TEXT not null) ROW_FORMAT=REDUNDANT; --- error ER_INDEX_COLUMN_TOO_LONG +-- error ER_TOO_LONG_KEY create index idx on worklog5743(a(768)); create index idx2 on worklog5743(a(767)); drop table worklog5743; create table worklog5743(a TEXT not null) ROW_FORMAT=COMPACT; --- error ER_INDEX_COLUMN_TOO_LONG +-- error ER_TOO_LONG_KEY create index idx on worklog5743(a(768)); create index idx2 on worklog5743(a(767)); drop table worklog5743; diff --git a/mysql-test/suite/innodb_zip/t/index_large_prefix_4k.test b/mysql-test/suite/innodb_zip/t/index_large_prefix_4k.test index a0229abc4f8f..0d4b86d6a4de 100644 --- a/mysql-test/suite/innodb_zip/t/index_large_prefix_4k.test +++ b/mysql-test/suite/innodb_zip/t/index_large_prefix_4k.test @@ -334,7 +334,7 @@ create table worklog5743(a TEXT not null, primary key (a(1000))); create table worklog5743(a TEXT) ROW_FORMAT=COMPACT; # Excercise the column length check in ha_innobase::add_index() --- error ER_INDEX_COLUMN_TOO_LONG +-- error ER_TOO_LONG_KEY create index idx on worklog5743(a(768)); # This should be successful @@ -385,13 +385,13 @@ drop table worklog5743; # We have a limit of 767 bytes for Antelope tables create table worklog5743(a TEXT not null) ROW_FORMAT=REDUNDANT; --- error ER_INDEX_COLUMN_TOO_LONG +-- error ER_TOO_LONG_KEY create index idx on worklog5743(a(768)); create index idx2 on worklog5743(a(767)); drop table worklog5743; create table worklog5743(a TEXT not null) ROW_FORMAT=COMPACT; --- error ER_INDEX_COLUMN_TOO_LONG +-- error ER_TOO_LONG_KEY create index idx on worklog5743(a(768)); create index idx2 on worklog5743(a(767)); drop table worklog5743; diff --git a/mysql-test/suite/innodb_zip/t/index_large_prefix_8k.test b/mysql-test/suite/innodb_zip/t/index_large_prefix_8k.test index 00a97249a957..c940915c01ca 100644 --- a/mysql-test/suite/innodb_zip/t/index_large_prefix_8k.test +++ b/mysql-test/suite/innodb_zip/t/index_large_prefix_8k.test @@ -360,14 +360,14 @@ drop table worklog5743; -- echo ### Test 6 ### # Create a table with old format, and the limit is 768 bytes. --- error ER_INDEX_COLUMN_TOO_LONG +-- error ER_TOO_LONG_KEY create table worklog5743(a TEXT not null, primary key (a(1000))) row_format=compact; create table worklog5743(a TEXT) row_format=compact; # Excercise the column length check in ha_innobase::add_index() --- error ER_INDEX_COLUMN_TOO_LONG +-- error ER_TOO_LONG_KEY create index idx on worklog5743(a(768)); # This should be successful @@ -414,13 +414,13 @@ drop table worklog5743; # We have a limit of 767 bytes for Antelope tables create table worklog5743(a TEXT not null) ROW_FORMAT=REDUNDANT; --- error ER_INDEX_COLUMN_TOO_LONG +-- error ER_TOO_LONG_KEY create index idx on worklog5743(a(768)); create index idx2 on worklog5743(a(767)); drop table worklog5743; create table worklog5743(a TEXT not null) ROW_FORMAT=COMPACT; --- error ER_INDEX_COLUMN_TOO_LONG +-- error ER_TOO_LONG_KEY create index idx on worklog5743(a(768)); create index idx2 on worklog5743(a(767)); drop table worklog5743; diff --git a/mysql-test/suite/innodb_zip/t/prefix_index_liftedlimit.test b/mysql-test/suite/innodb_zip/t/prefix_index_liftedlimit.test index dfc3777c58a0..9c21b7982984 100644 --- a/mysql-test/suite/innodb_zip/t/prefix_index_liftedlimit.test +++ b/mysql-test/suite/innodb_zip/t/prefix_index_liftedlimit.test @@ -47,9 +47,9 @@ WHERE col_1_varchar = REPEAT("c", 4000) AND col_2_varchar = REPEAT("o", 4000); INSERT INTO worklog5743 VALUES(REPEAT("a", 4000),REPEAT("o", 4000)); DELETE FROM worklog5743 WHERE col_1_varchar = REPEAT("b", 4000); SELECT col_1_varchar = REPEAT("c", 4000) FROM worklog5743; ---error ER_INDEX_COLUMN_TOO_LONG +--error ER_TOO_LONG_KEY ALTER TABLE worklog5743 ROW_FORMAT=REDUNDANT; ---error ER_INDEX_COLUMN_TOO_LONG +--error ER_TOO_LONG_KEY ALTER TABLE worklog5743 ROW_FORMAT=COMPACT; ALTER TABLE worklog5743 ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=16; DROP TABLE worklog5743; diff --git a/mysql-test/suite/innodb_zip/t/wl6469.test b/mysql-test/suite/innodb_zip/t/wl6469.test index ebd5f727009f..1c49d3b1e775 100644 --- a/mysql-test/suite/innodb_zip/t/wl6469.test +++ b/mysql-test/suite/innodb_zip/t/wl6469.test @@ -219,10 +219,10 @@ SET sql_mode = default; # set global innodb_large_prefix = 1; # -SET sql_mode='NO_ENGINE_SUBSTITUTION'; +SET sql_mode='NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES'; SET innodb_strict_mode=OFF; --disable_warnings ---error ER_INDEX_COLUMN_TOO_LONG +--error ER_TOO_LONG_KEY create temporary table t ( a int not null, b blob not null, @@ -246,7 +246,7 @@ drop table t; SET GLOBAL innodb_large_prefix=default; set global innodb_file_per_table = 0; # ---error ER_INDEX_COLUMN_TOO_LONG +--error ER_TOO_LONG_KEY create temporary table t ( a int not null, b blob not null, diff --git a/mysql-test/t/alter_table.test b/mysql-test/t/alter_table.test index 4b7a9aba0741..e5832548829c 100644 --- a/mysql-test/t/alter_table.test +++ b/mysql-test/t/alter_table.test @@ -3044,3 +3044,126 @@ ALTER TABLE t1 MODIFY fld0 DATETIME NOT NULL; ALTER TABLE t2 MODIFY fld0 POINT NOT NULL; DROP TABLE t1, t2; + + +--echo # +--echo # BUG#26848813: INDEXED COLUMN CAN'T BE CHANGED FROM VARCHAR(15) +--echo # TO VARCHAR(40) INSTANTANEOUSLY + +SET @orig_sql_mode= @@sql_mode; +SET @orig_innodb_large_prefix= @@global.innodb_large_prefix; + +SET GLOBAL innodb_large_prefix= ON; + +--echo # Tests where an error is reported under strict mode when the index +--echo # limit exceeds the maximum supported length by SE. + +--error ER_TOO_LONG_KEY +CREATE TABLE t1 (fld1 VARCHAR(768), KEY(fld1)) CHARSET latin1 ENGINE =InnoDB +ROW_FORMAT= COMPACT; + +--error ER_TOO_LONG_KEY +CREATE TABLE t2 (fld1 VARCHAR(3073), KEY(fld1)) CHARSET latin1 ENGINE= InnoDB; + +--echo # Test with innodb prefix indexes where the index limit is 767 bytes +CREATE TABLE t1 (fld1 VARCHAR(767), KEY(fld1)) CHARSET latin1 ENGINE=INNODB +ROW_FORMAT=COMPACT; + +--error ER_TOO_LONG_KEY +ALTER TABLE t1 MODIFY fld1 VARCHAR(768), ALGORITHM= INPLACE; + +--error ER_TOO_LONG_KEY +ALTER TABLE t1 MODIFY fld1 VARCHAR(768), ALGORITHM= COPY; + +--echo # Test with innodb prefix indexes where the index limit is 3072 bytes +CREATE TABLE t2 (fld1 VARCHAR(3072), KEY(fld1)) CHARSET latin1 ENGINE=INNODB +ROW_FORMAT=DYNAMIC; + +--error ER_TOO_LONG_KEY +ALTER TABLE t2 MODIFY fld1 VARCHAR(3073), ALGORITHM= INPLACE; + +--error ER_TOO_LONG_KEY +ALTER TABLE t2 MODIFY fld1 VARCHAR(3073), ALGORITHM= COPY; + +--echo # Tests with innodb_large_prefix disabled and strict mode. +SET GLOBAL innodb_large_prefix= OFF; +--error ER_TOO_LONG_KEY +CREATE TABLE t3 (fld1 VARCHAR(3072), KEY(fld1)) CHARSET latin1 ENGINE= InnoDB; + +DROP TABLE t1, t2; + +SET sql_mode= ''; +SET GLOBAL innodb_large_prefix= ON; + +--enable_warnings + +--echo # Test where the indexes are truncated to fit the index limit and +--echo # a warning is reported under non-strict mode when the index exceeds +--echo # the SE limit. +CREATE TABLE t1 (fld1 VARCHAR(768), KEY(fld1)) ENGINE= InnoDB +ROW_FORMAT=COMPACT; +CREATE TABLE t2 (fld1 VARCHAR(3073), KEY(fld1)) ENGINE= InnoDB; + +--echo # Test with innodb prefix indexes where the index limit is 767 bytes. +CREATE TABLE t3 (fld1 VARCHAR(767), KEY(fld1))ENGINE=INNODB ROW_FORMAT=COMPACT; + +ALTER TABLE t3 MODIFY fld1 VARCHAR(768), ALGORITHM= INPLACE; + +ALTER TABLE t3 MODIFY fld1 VARCHAR(800), ALGORITHM= COPY; + +--echo # Test with innodb prefix indexes where the index limit is 3072 bytes. +CREATE TABLE t4 (fld1 VARCHAR(3072), KEY(fld1))ENGINE=INNODB +ROW_FORMAT=DYNAMIC; + +ALTER TABLE t4 MODIFY fld1 VARCHAR(3073), ALGORITHM= INPLACE; + +ALTER TABLE t4 MODIFY fld1 VARCHAR(3074), ALGORITHM= COPY; + +--echo # For unique and primary keys, an error is reported even in non-strict +--echo # mode. + +--error ER_TOO_LONG_KEY +CREATE TABLE t5(fld1 VARCHAR(768) PRIMARY KEY) ENGINE= InnoDB +ROW_FORMAT=COMPACT; + +--error ER_TOO_LONG_KEY +CREATE TABLE t5(fld1 VARCHAR(3073), UNIQUE KEY(fld1)) ENGINE= InnoDB; + +--echo # Tests with innodb_large_prefix disabled and strict mode. +SET GLOBAL innodb_large_prefix= OFF; +CREATE TABLE t5 (fld1 VARCHAR(3072), KEY(fld1)) CHARSET latin1 ENGINE= InnoDB; + +--disable_warnings +DROP TABLE t1, t2, t3, t4, t5; + +SET sql_mode= @orig_sql_mode; +SET GLOBAL innodb_large_prefix= ON; + +--echo # Tests added for coverage. +CREATE TABLE t1(fld1 VARCHAR(3), KEY(fld1)) ENGINE=MYISAM; + +--echo # Conversion of unpacked keys to packed keys reports +--echo # error for INPLACE Alter. +--error ER_ALTER_OPERATION_NOT_SUPPORTED +ALTER TABLE t1 MODIFY fld1 VARCHAR(10), ALGORITHM=INPLACE; + +--echo # Succeeds with index rebuild. +ALTER TABLE t1 MODIFY fld1 VARCHAR(10), ALGORITHM=COPY; + +--echo # Succeeds since the row format is dynamic. +CREATE TABLE t2(fld1 VARCHAR(768), KEY(fld1)) ENGINE= InnoDB ROW_FORMAT= DYNAMIC; + +--echo # An error is reported when the index exceeds the column size +--echo # in both strict and non-strict mode. +--error ER_WRONG_SUB_KEY +ALTER TABLE t2 ADD INDEX idx1(fld1(769)); + +SET sql_mode= ''; + +--error ER_WRONG_SUB_KEY +ALTER TABLE t2 ADD INDEX idx1(fld1(769)); + +--echo # Cleanup. +DROP TABLE t1, t2; +SET sql_mode= @orig_sql_mode; +SET GLOBAL innodb_large_prefix= @orig_innodb_large_prefix; diff --git a/mysql-test/t/innodb_mysql_sync.test b/mysql-test/t/innodb_mysql_sync.test index 364e1ab926be..166122697cdf 100644 --- a/mysql-test/t/innodb_mysql_sync.test +++ b/mysql-test/t/innodb_mysql_sync.test @@ -1098,6 +1098,34 @@ DROP TABLE t1; SET debug="-d,innodb_index_drop_count_zero"; +--echo # +--echo # BUG#26848813: INDEXED COLUMN CAN'T BE CHANGED FROM VARCHAR(15) +--echo # TO VARCHAR(40) INSTANTANEOUSLY + +CREATE TABLE t1(fld1 VARCHAR(5), KEY(fld1)) ENGINE= InnoDB; +SET DEBUG="+d,innodb_index_drop_count_zero"; + +--echo # Without patch, an error is reported. +ALTER TABLE t1 MODIFY fld1 VARCHAR(7), ALGORITHM= INPLACE; + +--echo # Scenario where non-packed keys is converted to packed keys +--echo # before the patch, an error is reported. +ALTER TABLE t1 MODIFY fld1 VARCHAR(9), ALGORITHM= INPLACE; + +SET DEBUG="-d,innodb_index_drop_count_zero"; + +--echo # Tests added for covering cases where rebuild is required. + +--echo # Reducing the size of the field. +--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON +ALTER TABLE t1 MODIFY fld1 VARCHAR(3), ALGORITHM= INPLACE; + +--echo # Increasing the size of the field to boundary condition. +--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON +ALTER TABLE t1 MODIFY fld1 VARCHAR(256), ALGORITHM= INPLACE; + +DROP TABLE t1; + # Check that all connections opened by test cases in this file are really # gone so execution of other tests won't be affected by their presence. --source include/wait_until_count_sessions.inc diff --git a/sql/ha_ndbcluster.cc b/sql/ha_ndbcluster.cc index 61c345f5e75b..a438a7f340a0 100644 --- a/sql/ha_ndbcluster.cc +++ b/sql/ha_ndbcluster.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2004, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2004, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -13768,7 +13768,8 @@ uint ha_ndbcluster::max_supported_key_length() const { return NDB_MAX_KEY_SIZE; } -uint ha_ndbcluster::max_supported_key_part_length() const +uint ha_ndbcluster::max_supported_key_part_length(HA_CREATE_INFO + *create_info MY_ATTRIBUTE((unused))) const { return NDB_MAX_KEY_SIZE; } diff --git a/sql/ha_ndbcluster.h b/sql/ha_ndbcluster.h index 9d1c75575a1d..3f4cba5524a0 100644 --- a/sql/ha_ndbcluster.h +++ b/sql/ha_ndbcluster.h @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -238,7 +238,7 @@ class ha_ndbcluster: public handler, public Partition_handler uint max_supported_keys() const; uint max_supported_key_parts() const; uint max_supported_key_length() const; - uint max_supported_key_part_length() const; + uint max_supported_key_part_length(HA_CREATE_INFO *create_info) const; virtual bool is_fk_defined_on_table_or_index(uint index); int get_child_or_parent_fk_list(THD *thd, diff --git a/sql/handler.cc b/sql/handler.cc index 78faf46c8ce4..99818b510fb9 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -4845,7 +4845,8 @@ handler::check_if_supported_inplace_alter(TABLE *altered_table, Alter_inplace_info::CHANGE_CREATE_OPTION | Alter_inplace_info::ALTER_RENAME | Alter_inplace_info::RENAME_INDEX | - Alter_inplace_info::ALTER_INDEX_COMMENT; + Alter_inplace_info::ALTER_INDEX_COMMENT | + Alter_inplace_info::ALTER_COLUMN_INDEX_LENGTH; /* Is there at least one operation that requires copy algorithm? */ if (ha_alter_info->handler_flags & ~inplace_offline_operations) diff --git a/sql/handler.h b/sql/handler.h index 3cb113474d66..ca1ca5c3bc3d 100644 --- a/sql/handler.h +++ b/sql/handler.h @@ -1030,6 +1030,9 @@ struct handlerton #define HTON_SUPPORTS_FOREIGN_KEYS (1 << 11) +// Engine supports packed keys. +#define HTON_SUPPORTS_PACKED_KEYS (1 << 12) + enum enum_tx_isolation { ISO_READ_UNCOMMITTED, ISO_READ_COMMITTED, ISO_REPEATABLE_READ, ISO_SERIALIZABLE}; @@ -1325,6 +1328,14 @@ class Alter_inplace_info // New/changed virtual generated column require validation static const HA_ALTER_FLAGS VALIDATE_VIRTUAL_COLUMN = 1ULL << 41; + /** + Change in index length such that it does not require index rebuild. + For example, change in index length due to column expansion like + varchar(X) changed to varchar(X + N). + */ + static const HA_ALTER_FLAGS ALTER_COLUMN_INDEX_LENGTH = 1ULL << 42; + + /** Create options (like MAX_ROWS) for the new version of table. @@ -3074,16 +3085,18 @@ class handler :public Sql_alloc { return std::min(MAX_KEY_LENGTH, max_supported_key_length()); } - uint max_key_part_length() const + uint max_key_part_length(HA_CREATE_INFO *create_info) const { - return std::min(MAX_KEY_LENGTH, max_supported_key_part_length()); + return std::min(MAX_KEY_LENGTH, max_supported_key_part_length(create_info)); } virtual uint max_supported_record_length() const { return HA_MAX_REC_LENGTH; } virtual uint max_supported_keys() const { return 0; } virtual uint max_supported_key_parts() const { return MAX_REF_PARTS; } virtual uint max_supported_key_length() const { return MAX_KEY_LENGTH; } - virtual uint max_supported_key_part_length() const { return 255; } + virtual uint max_supported_key_part_length(HA_CREATE_INFO + *create_info MY_ATTRIBUTE((unused))) const + { return 255; } virtual uint min_record_length(uint options) const { return 1; } virtual bool low_byte_first() const { return 1; } diff --git a/sql/sql_table.cc b/sql/sql_table.cc index ec92483741b9..45f27278a0dc 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -4331,10 +4331,11 @@ mysql_prepare_create_table(THD *thd, const char *error_schema_name, size_t max_field_size= blob_length_by_type(sql_field->sql_type); if (key_part_length > max_field_size || key_part_length > max_key_length || - key_part_length > file->max_key_part_length()) + key_part_length > file->max_key_part_length(create_info)) { // Given prefix length is too large, adjust it. - key_part_length= min(max_key_length, file->max_key_part_length()); + key_part_length= min(max_key_length, + file->max_key_part_length(create_info)); if (max_field_size) key_part_length= min(key_part_length, max_field_size); if (key->type == KEYTYPE_MULTIPLE) @@ -4385,10 +4386,10 @@ mysql_prepare_create_table(THD *thd, const char *error_schema_name, my_error(ER_WRONG_KEY_COLUMN, MYF(0), column->field_name.str); DBUG_RETURN(TRUE); } - if (key_part_length > file->max_key_part_length() && + if (key_part_length > file->max_key_part_length(create_info) && key->type != KEYTYPE_FULLTEXT) { - key_part_length= file->max_key_part_length(); + key_part_length= file->max_key_part_length(create_info); if (key->type == KEYTYPE_MULTIPLE) { /* not a critical problem */ @@ -4412,7 +4413,8 @@ mysql_prepare_create_table(THD *thd, const char *error_schema_name, } key_part_info->length= (uint16) key_part_length; /* Use packed keys for long strings on the first column */ - if (!((*db_options) & HA_OPTION_NO_PACK_KEYS) && + if ((create_info->db_type->flags & HTON_SUPPORTS_PACKED_KEYS) && + !((*db_options) & HA_OPTION_NO_PACK_KEYS) && !((create_info->table_options & HA_OPTION_NO_PACK_KEYS)) && (key_part_length >= KEY_DEFAULT_PACK_LENGTH && (sql_field->sql_type == MYSQL_TYPE_STRING || @@ -6297,18 +6299,30 @@ static bool has_index_def_changed(Alter_inplace_info *ha_alter_info, key_part < end; key_part++, new_part++) { + + new_field= get_field_by_index(alter_info, new_part->fieldnr); + /* - Key definition has changed if we are using a different field or - if the used key part length is different. It makes sense to - check lengths first as in case when fields differ it is likely - that lengths differ too and checking fields is more expensive - in general case. + If there is a change in index length due to column expansion + like varchar(X) changed to varchar(X + N) and has a compatible + packed data representation, we mark it for fast/INPLACE change + in index definition. Some engines like InnoDB supports INPLACE + alter for such cases. + + In other cases, key definition has changed if we are using a + different field or if the used key part length is different, or + key part direction has changed. */ - if (key_part->length != new_part->length) + if (key_part->length != new_part->length && + ha_alter_info->alter_info->flags == Alter_info::ALTER_CHANGE_COLUMN && + (key_part->field->is_equal((Create_field *)new_field) == IS_EQUAL_PACK_LENGTH)) + { + ha_alter_info->handler_flags|= + Alter_inplace_info::ALTER_COLUMN_INDEX_LENGTH; + } + else if (key_part->length != new_part->length) return true; - new_field= get_field_by_index(alter_info, new_part->fieldnr); - /* For prefix keys KEY_PART_INFO::field points to cloned Field object with adjusted length. So below we have to check field diff --git a/sql/sql_tmp_table.cc b/sql/sql_tmp_table.cc index 8f5153cc8c78..39d24e852fa6 100644 --- a/sql/sql_tmp_table.cc +++ b/sql/sql_tmp_table.cc @@ -462,7 +462,7 @@ void Cache_temp_engine_properties::init(THD *thd) db_plugin= ha_lock_engine(0, heap_hton); handler= get_new_handler((TABLE_SHARE *)0, thd->mem_root, heap_hton); HEAP_MAX_KEY_LENGTH= handler->max_key_length(); - HEAP_MAX_KEY_PART_LENGTH= handler->max_key_part_length(); + HEAP_MAX_KEY_PART_LENGTH= handler->max_key_part_length(0); HEAP_MAX_KEY_PARTS= handler->max_key_parts(); delete handler; plugin_unlock(0, db_plugin); @@ -470,7 +470,7 @@ void Cache_temp_engine_properties::init(THD *thd) db_plugin= ha_lock_engine(0, myisam_hton); handler= get_new_handler((TABLE_SHARE *)0, thd->mem_root, myisam_hton); MYISAM_MAX_KEY_LENGTH= handler->max_key_length(); - MYISAM_MAX_KEY_PART_LENGTH= handler->max_key_part_length(); + MYISAM_MAX_KEY_PART_LENGTH= handler->max_key_part_length(0); MYISAM_MAX_KEY_PARTS= handler->max_key_parts(); delete handler; plugin_unlock(0, db_plugin); diff --git a/storage/archive/ha_archive.h b/storage/archive/ha_archive.h index e3b508906425..670254c58869 100644 --- a/storage/archive/ha_archive.h +++ b/storage/archive/ha_archive.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -118,7 +118,9 @@ class ha_archive: public handler ulonglong *nb_reserved_values); uint max_supported_keys() const { return 1; } uint max_supported_key_length() const { return sizeof(ulonglong); } - uint max_supported_key_part_length() const { return sizeof(ulonglong); } + uint max_supported_key_part_length(HA_CREATE_INFO + *create_info MY_ATTRIBUTE((unused))) const + { return sizeof(ulonglong); } virtual int records(ha_rows *num_rows) { *num_rows= share->rows_recorded; diff --git a/storage/blackhole/ha_blackhole.h b/storage/blackhole/ha_blackhole.h index cb8e25569478..f7a20e4ce3ed 100644 --- a/storage/blackhole/ha_blackhole.h +++ b/storage/blackhole/ha_blackhole.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2005, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -69,7 +69,9 @@ class ha_blackhole: public handler #define BLACKHOLE_MAX_KEY_LENGTH 1000 uint max_supported_keys() const { return BLACKHOLE_MAX_KEY; } uint max_supported_key_length() const { return BLACKHOLE_MAX_KEY_LENGTH; } - uint max_supported_key_part_length() const { return BLACKHOLE_MAX_KEY_LENGTH; } + uint max_supported_key_part_length(HA_CREATE_INFO + *create_info MY_ATTRIBUTE((unused))) const + { return BLACKHOLE_MAX_KEY_LENGTH; } int open(const char *name, int mode, uint test_if_locked); int close(void); int truncate(); diff --git a/storage/federated/ha_federated.h b/storage/federated/ha_federated.h index f60aa79967ca..650a19df2d3a 100644 --- a/storage/federated/ha_federated.h +++ b/storage/federated/ha_federated.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2004, 2014, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2004, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -168,7 +168,9 @@ class ha_federated: public handler uint max_supported_keys() const { return MAX_KEY; } uint max_supported_key_parts() const { return MAX_REF_PARTS; } uint max_supported_key_length() const { return FEDERATED_MAX_KEY_LENGTH; } - uint max_supported_key_part_length() const { return FEDERATED_MAX_KEY_LENGTH; } + uint max_supported_key_part_length(HA_CREATE_INFO + *create_info MY_ATTRIBUTE((unused))) const + { return FEDERATED_MAX_KEY_LENGTH; } /* Called in test_quick_select to determine if indexes should be used. Normally, we need to know number of blocks . For federated we need to diff --git a/storage/heap/ha_heap.h b/storage/heap/ha_heap.h index cb25623b58fc..9e37047c1ae4 100644 --- a/storage/heap/ha_heap.h +++ b/storage/heap/ha_heap.h @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -61,7 +61,9 @@ class ha_heap: public handler } const key_map *keys_to_use_for_scanning() { return &btree_keys; } uint max_supported_keys() const { return MAX_KEY; } - uint max_supported_key_part_length() const { return MAX_KEY_LENGTH; } + uint max_supported_key_part_length(HA_CREATE_INFO + *create_info MY_ATTRIBUTE((unused))) const + { return MAX_KEY_LENGTH; } double scan_time() { return (double) (stats.records+stats.deleted) / 20.0+10; } double read_time(uint index, uint ranges, ha_rows rows) diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index 8ce8c184ef31..f1cba471384b 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -6345,14 +6345,23 @@ ha_innobase::clone( uint -ha_innobase::max_supported_key_part_length() const +ha_innobase::max_supported_key_part_length(HA_CREATE_INFO *create_info) const /*==============================================*/ { /* A table format specific index column length check will be performed at ha_innobase::add_index() and row_create_index_for_mysql() */ - return(innobase_large_prefix - ? REC_VERSION_56_MAX_INDEX_COL_LEN - : REC_ANTELOPE_MAX_INDEX_COL_LEN - 1); + switch (create_info->row_type) { + case ROW_TYPE_REDUNDANT: + case ROW_TYPE_COMPACT: + return (REC_ANTELOPE_MAX_INDEX_COL_LEN - 1); + break; + default: + if (innobase_large_prefix) + return (REC_VERSION_56_MAX_INDEX_COL_LEN); + else + return (REC_ANTELOPE_MAX_INDEX_COL_LEN - 1); + } + } /******************************************************************//** diff --git a/storage/innobase/handler/ha_innodb.h b/storage/innobase/handler/ha_innodb.h index b83b70cb4463..9d7150a2679c 100644 --- a/storage/innobase/handler/ha_innodb.h +++ b/storage/innobase/handler/ha_innodb.h @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2000, 2017, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2000, 2018, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -91,7 +91,7 @@ class ha_innobase: public handler uint max_supported_key_length() const; - uint max_supported_key_part_length() const; + uint max_supported_key_part_length(HA_CREATE_INFO *create_info) const; const key_map* keys_to_use_for_scanning(); diff --git a/storage/innobase/handler/handler0alter.cc b/storage/innobase/handler/handler0alter.cc index 8d28fa567244..4683084e3047 100644 --- a/storage/innobase/handler/handler0alter.cc +++ b/storage/innobase/handler/handler0alter.cc @@ -110,7 +110,8 @@ static const Alter_inplace_info::HA_ALTER_FLAGS INNOBASE_ALTER_NOREBUILD | Alter_inplace_info::ALTER_INDEX_COMMENT | Alter_inplace_info::ADD_VIRTUAL_COLUMN | Alter_inplace_info::DROP_VIRTUAL_COLUMN - | Alter_inplace_info::ALTER_VIRTUAL_COLUMN_ORDER; + | Alter_inplace_info::ALTER_VIRTUAL_COLUMN_ORDER + | Alter_inplace_info::ALTER_COLUMN_INDEX_LENGTH; /* | Alter_inplace_info::ALTER_VIRTUAL_COLUMN_TYPE; */ struct ha_innobase_inplace_ctx : public inplace_alter_handler_ctx diff --git a/storage/myisam/ha_myisam.cc b/storage/myisam/ha_myisam.cc index e934a59ffec8..5f30a0c0f852 100644 --- a/storage/myisam/ha_myisam.cc +++ b/storage/myisam/ha_myisam.cc @@ -2299,7 +2299,8 @@ static int myisam_init(void *p) myisam_hton->create= myisam_create_handler; myisam_hton->panic= myisam_panic; myisam_hton->close_connection= myisam_close_connection; - myisam_hton->flags= HTON_CAN_RECREATE | HTON_SUPPORT_LOG_TABLES; + myisam_hton->flags= HTON_CAN_RECREATE | HTON_SUPPORT_LOG_TABLES | + HTON_SUPPORTS_PACKED_KEYS; myisam_hton->is_supported_system_table= myisam_is_supported_system_table; main_thread_keycache_var= st_keycache_thread_var(); diff --git a/storage/myisam/ha_myisam.h b/storage/myisam/ha_myisam.h index f7794b7c85fc..11890c26032b 100644 --- a/storage/myisam/ha_myisam.h +++ b/storage/myisam/ha_myisam.h @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -83,7 +83,9 @@ class ha_myisam: public handler } uint max_supported_keys() const { return MI_MAX_KEY; } uint max_supported_key_length() const { return MI_MAX_KEY_LENGTH; } - uint max_supported_key_part_length() const { return MI_MAX_KEY_LENGTH; } + uint max_supported_key_part_length(HA_CREATE_INFO + *create_info MY_ATTRIBUTE((unused))) const + { return MI_MAX_KEY_LENGTH; } uint checksum() const; int open(const char *name, int mode, uint test_if_locked); diff --git a/storage/myisammrg/ha_myisammrg.h b/storage/myisammrg/ha_myisammrg.h index 2f91986d1f47..9d201ddc769c 100644 --- a/storage/myisammrg/ha_myisammrg.h +++ b/storage/myisammrg/ha_myisammrg.h @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -99,7 +99,9 @@ class ha_myisammrg: public handler } uint max_supported_keys() const { return MI_MAX_KEY; } uint max_supported_key_length() const { return MI_MAX_KEY_LENGTH; } - uint max_supported_key_part_length() const { return MI_MAX_KEY_LENGTH; } + uint max_supported_key_part_length(HA_CREATE_INFO + *create_info MY_ATTRIBUTE((unused))) const + { return MI_MAX_KEY_LENGTH; } double scan_time() { return ulonglong2double(stats.data_file_length) / IO_SIZE + file->tables; } diff --git a/storage/partition/ha_partition.cc b/storage/partition/ha_partition.cc index de8348ff988d..f3258dc375d0 100644 --- a/storage/partition/ha_partition.cc +++ b/storage/partition/ha_partition.cc @@ -5551,6 +5551,21 @@ uint ha_partition::min_of_the_max_uint( } +uint ha_partition::min_of_the_max_uint(HA_CREATE_INFO *create_info, + uint (handler::*operator_func)(HA_CREATE_INFO *) const) const +{ + handler **file; + uint min_of_the_max= ((*m_file)->*operator_func)(create_info); + + for (file= m_file+1; *file; file++) + { + uint tmp= ((*file)->*operator_func)(create_info); + set_if_smaller(min_of_the_max, tmp); + } + return min_of_the_max; +} + + uint ha_partition::max_supported_key_parts() const { return min_of_the_max_uint(&handler::max_supported_key_parts); @@ -5563,9 +5578,11 @@ uint ha_partition::max_supported_key_length() const } -uint ha_partition::max_supported_key_part_length() const +uint ha_partition::max_supported_key_part_length(HA_CREATE_INFO + *create_info) const { - return min_of_the_max_uint(&handler::max_supported_key_part_length); + return + min_of_the_max_uint(create_info, &handler::max_supported_key_part_length); } diff --git a/storage/partition/ha_partition.h b/storage/partition/ha_partition.h index 2f7311e10c6e..f5be20d95004 100644 --- a/storage/partition/ha_partition.h +++ b/storage/partition/ha_partition.h @@ -2,7 +2,7 @@ #define HA_PARTITION_INCLUDED /* - Copyright (c) 2005, 2017, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2005, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -902,11 +902,13 @@ class ha_partition : The maximum supported values is the minimum of all handlers in the table */ uint min_of_the_max_uint(uint (handler::*operator_func)(void) const) const; + uint min_of_the_max_uint(HA_CREATE_INFO *create_info, + uint (handler::*operator_func)(HA_CREATE_INFO *) const) const; virtual uint max_supported_record_length() const; virtual uint max_supported_keys() const; virtual uint max_supported_key_parts() const; virtual uint max_supported_key_length() const; - virtual uint max_supported_key_part_length() const; + virtual uint max_supported_key_part_length(HA_CREATE_INFO *create_info) const; /* All handlers in a partitioned table must have the same low_byte_first From 7b2f4b82ea4dd8a63c2806c452b319f26493206c Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Wed, 23 May 2018 18:20:45 +0200 Subject: [PATCH 0908/1221] Fix build break with modern compilers: client/mysql.cc: In function void build_completion_hash(bool, bool): client/mysql.cc:2674:37: error: invalid conversion from char to char* [-fpermissive] field_names[i][num_fields*2]= '\0'; ^~~~ --- client/mysql.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/mysql.cc b/client/mysql.cc index 715d74f18b2f..9c54f5641922 100644 --- a/client/mysql.cc +++ b/client/mysql.cc @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -2671,7 +2671,7 @@ You can turn off this feature to get a quicker startup with -A\n\n"); mysql_free_result(fields); break; } - field_names[i][num_fields*2]= '\0'; + field_names[i][num_fields*2]= NULL; j=0; while ((sql_field=mysql_fetch_field(fields))) { From 5713e40f4cb7a7f6a4fe0378f3ab826fafab7a66 Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Mon, 11 Jun 2018 16:01:33 +0200 Subject: [PATCH 0909/1221] PS-4514: rpl.bug68490 is unstable in 5.7 The issues here was related to restart of master replication server while slave was connected to master. `stop_slave.inc` can return Last_IO_Errno=2003 that is `error reconnecting to master 'root@127.0.0.1:13001'`. To solve this `sync_slave_sql_with_master.inc` should be run before `stop_slave.inc`. --- mysql-test/suite/rpl/r/bug68490.result | 1 + mysql-test/suite/rpl/t/bug68490.test | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/mysql-test/suite/rpl/r/bug68490.result b/mysql-test/suite/rpl/r/bug68490.result index 2b9b15760d1d..f9a9e82f8d72 100644 --- a/mysql-test/suite/rpl/r/bug68490.result +++ b/mysql-test/suite/rpl/r/bug68490.result @@ -5,6 +5,7 @@ Note #### Storing MySQL user name or password information in the master info rep [connection master] CREATE TABLE t1(id INT AUTO_INCREMENT PRIMARY KEY, payload MEDIUMBLOB NOT NULL); include/rpl_restart_server.inc [server_number=1] +include/sync_slave_sql_with_master.inc include/stop_slave.inc include/start_slave.inc INSERT INTO t1(payload) VALUES(REPEAT('a',1468872)); diff --git a/mysql-test/suite/rpl/t/bug68490.test b/mysql-test/suite/rpl/t/bug68490.test index b70540f56923..e4779d111d01 100644 --- a/mysql-test/suite/rpl/t/bug68490.test +++ b/mysql-test/suite/rpl/t/bug68490.test @@ -6,7 +6,7 @@ CREATE TABLE t1(id INT AUTO_INCREMENT PRIMARY KEY, payload MEDIUMBLOB NOT NULL); --let $rpl_server_number= 1 --source include/rpl_restart_server.inc ---connection slave +--source include/sync_slave_sql_with_master.inc --source include/stop_slave.inc --source include/start_slave.inc --connection master From 0ef64b220d41196519a0d3f1a9fbeca8a8461650 Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Mon, 11 Jun 2018 16:31:27 +0200 Subject: [PATCH 0910/1221] PS-4526: Last 3 Travis jobs after merge are always ignored Add jobs 25, 26, 27 to the job list. --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index f1dc061b78d4..3477b311d4e9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -149,7 +149,7 @@ script: echo --- JOB_NUMBER=$JOB_NUMBER TRAVIS_COMMIT=$TRAVIS_COMMIT TRAVIS_COMMIT_RANGE=$TRAVIS_COMMIT_RANGE TRAVIS_REPO_SLUG=$TRAVIS_REPO_SLUG TRAVIS_BRANCH=$TRAVIS_BRANCH TRAVIS_EVENT_TYPE=$TRAVIS_EVENT_TYPE TRAVIS_PULL_REQUEST=$TRAVIS_PULL_REQUEST TRAVIS_PULL_REQUEST_BRANCH=$TRAVIS_PULL_REQUEST_BRANCH - echo --- Perform all Travis jobs or only jobs that are included in ENV_VAR_JOB_NUMBERS list if it is defined; - JOB_NUMBERS="1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24"; + JOB_NUMBERS="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"; if [[ "$ENV_VAR_JOB_NUMBERS" != "" ]]; then JOB_NUMBERS=$ENV_VAR_JOB_NUMBERS; fi; From 7738e778d45b9bba92daaa41a2c25a793a22c356 Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Mon, 11 Jun 2018 16:31:27 +0200 Subject: [PATCH 0911/1221] PS-4526: Last 3 Travis jobs after merge are always ignored Add jobs 25, 26, 27 to the job list. --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 0deadac042d6..987f822f860a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -151,7 +151,7 @@ script: echo --- JOB_NUMBER=$JOB_NUMBER TRAVIS_COMMIT=$TRAVIS_COMMIT TRAVIS_COMMIT_RANGE=$TRAVIS_COMMIT_RANGE TRAVIS_REPO_SLUG=$TRAVIS_REPO_SLUG TRAVIS_BRANCH=$TRAVIS_BRANCH TRAVIS_EVENT_TYPE=$TRAVIS_EVENT_TYPE TRAVIS_PULL_REQUEST=$TRAVIS_PULL_REQUEST TRAVIS_PULL_REQUEST_BRANCH=$TRAVIS_PULL_REQUEST_BRANCH - echo --- Perform all Travis jobs or only jobs that are included in ENV_VAR_JOB_NUMBERS list if it is defined; - JOB_NUMBERS="1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24"; + JOB_NUMBERS="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"; if [[ "$ENV_VAR_JOB_NUMBERS" != "" ]]; then JOB_NUMBERS=$ENV_VAR_JOB_NUMBERS; fi; From f9064a40fb600c6f86162605b796664b49c14869 Mon Sep 17 00:00:00 2001 From: Nisha Gopalakrishnan Date: Wed, 13 Jun 2018 14:42:11 +0530 Subject: [PATCH 0912/1221] Bug26848813: INDEXED COLUMN CAN'T BE CHANGED FROM VARCHAR(15) TO VARCHAR(40) INSTANTANEOUSLY Post push fix for test case failure. --- mysql-test/suite/innodb_zip/r/wl6469.result | 3 +++ mysql-test/suite/innodb_zip/t/wl6469.test | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/mysql-test/suite/innodb_zip/r/wl6469.result b/mysql-test/suite/innodb_zip/r/wl6469.result index 1c64e20e23a5..2842eb858e2d 100644 --- a/mysql-test/suite/innodb_zip/r/wl6469.result +++ b/mysql-test/suite/innodb_zip/r/wl6469.result @@ -281,6 +281,7 @@ b blob not null, index sk (b(3021)) ) row_format = compact engine=innodb; ERROR 42000: Specified key was too long; max key length is 767 bytes +SET sql_mode='NO_ENGINE_SUBSTITUTION'; create temporary table t ( a int not null, b blob not null, @@ -293,6 +294,7 @@ b blob not null, index sk (b(3021)) ) row_format = compressed engine=innodb; drop table t; +SET sql_mode='NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES'; SET GLOBAL innodb_large_prefix=default; set global innodb_file_per_table = 0; create temporary table t ( @@ -301,6 +303,7 @@ b blob not null, index sk (b(3021)) ) row_format = compact engine=innodb; ERROR 42000: Specified key was too long; max key length is 767 bytes +SET sql_mode='NO_ENGINE_SUBSTITUTION'; create temporary table t ( a int not null, b blob not null, diff --git a/mysql-test/suite/innodb_zip/t/wl6469.test b/mysql-test/suite/innodb_zip/t/wl6469.test index 1c49d3b1e775..8603748faa3c 100644 --- a/mysql-test/suite/innodb_zip/t/wl6469.test +++ b/mysql-test/suite/innodb_zip/t/wl6469.test @@ -228,6 +228,8 @@ create temporary table t ( b blob not null, index sk (b(3021)) ) row_format = compact engine=innodb; + +SET sql_mode='NO_ENGINE_SUBSTITUTION'; # create temporary table t ( a int not null, @@ -243,6 +245,7 @@ create temporary table t ( ) row_format = compressed engine=innodb; drop table t; # +SET sql_mode='NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES'; SET GLOBAL innodb_large_prefix=default; set global innodb_file_per_table = 0; # @@ -253,6 +256,7 @@ create temporary table t ( index sk (b(3021)) ) row_format = compact engine=innodb; # +SET sql_mode='NO_ENGINE_SUBSTITUTION'; create temporary table t ( a int not null, b blob not null, From 86e2187f88214703568643817374832a534a342a Mon Sep 17 00:00:00 2001 From: Satya Bodapati Date: Mon, 11 Jun 2018 16:54:23 +0530 Subject: [PATCH 0913/1221] PS-3840: With FIPS enabled and performance_schema=off, instance crashes on CREATE VIEW Description: ----------- MySQL Server compiled with OpenSSL (not YaSSL) and running the server under FIPS enabled environment, leads to crash. This is because MD5 algorithm is not FIPS compliant. Fix: ---- Disable FIPS mode for MySQL which allows mysqld to be run under FIPS environment. --- mysql-test/include/have_fips.inc | 30 +++++++++++++++++++++++++++++ mysql-test/include/mtr_warnings.sql | 1 + mysql-test/r/fips.result | 6 ++++++ mysql-test/t/fips.test | 15 +++++++++++++++ sql/mysqld.cc | 15 +++++++++++++++ 5 files changed, 67 insertions(+) create mode 100644 mysql-test/include/have_fips.inc create mode 100644 mysql-test/r/fips.result create mode 100644 mysql-test/t/fips.test diff --git a/mysql-test/include/have_fips.inc b/mysql-test/include/have_fips.inc new file mode 100644 index 000000000000..396ef72a85c1 --- /dev/null +++ b/mysql-test/include/have_fips.inc @@ -0,0 +1,30 @@ +# This inc file detects FIPS only on centOS/RHEL + +--source include/not_windows.inc + +--let OUTFILE= $MYSQLTEST_VARDIR/tmp/fips.out + +perl; +use strict; +# This file contents should only be either 0 or 1 +my $fips_file = "/proc/sys/crypto/fips_enabled"; +my $fips = 0; +if ((-e $fips_file) && (-r $fips_file)) +{ + local $/=undef; + open FILE, $fips_file or die "Couldn't open file: $!"; + $fips = ; + close FILE; +} + +open(FILE, ">$ENV{OUTFILE}") or die; +print FILE "let \$fips= $fips;\n"; +close(FILE); +EOF + +--source $OUTFILE +--remove_file $OUTFILE + +if (!$fips) { + --skip Test requires FIPS enabled environment like centOS/RHEL +} diff --git a/mysql-test/include/mtr_warnings.sql b/mysql-test/include/mtr_warnings.sql index 273cf5f1307a..b0de11dccc65 100644 --- a/mysql-test/include/mtr_warnings.sql +++ b/mysql-test/include/mtr_warnings.sql @@ -100,6 +100,7 @@ INSERT INTO global_suppressions VALUES ("Forcing close of thread"), ("innodb-page-size has been changed"), + ("Percona Server cannot operate under OpenSSL FIPS mode"), /* Due to timing issues, it might be that this warning diff --git a/mysql-test/r/fips.result b/mysql-test/r/fips.result new file mode 100644 index 000000000000..b3dd21cff774 --- /dev/null +++ b/mysql-test/r/fips.result @@ -0,0 +1,6 @@ +# Check for warnings in the error log +# restart: --log-error=SEARCH_FILE --no-console +SELECT MD5('mysql running under fips'); +MD5('mysql running under fips') +c9ae6499f03db3c8d8fe0ace851d87cd +# restart diff --git a/mysql-test/t/fips.test b/mysql-test/t/fips.test new file mode 100644 index 000000000000..1a9eb022494c --- /dev/null +++ b/mysql-test/t/fips.test @@ -0,0 +1,15 @@ +--source include/have_fips.inc +--echo # Check for warnings in the error log +--let SEARCH_FILE= $MYSQLTEST_VARDIR/log/fips.err + +--replace_result $SEARCH_FILE SEARCH_FILE +--let $restart_parameters=restart: --log-error=$SEARCH_FILE --no-console +--source include/restart_mysqld.inc + +--let SEARCH_PATTERN = Percona Server cannot operate under OpenSSL FIPS mode. Disabling FIPS +--source include/search_pattern_in_file.inc +SELECT MD5('mysql running under fips'); + +--let $restart_parameters= +--source include/restart_mysqld.inc +--remove_file $SEARCH_FILE diff --git a/sql/mysqld.cc b/sql/mysqld.cc index b0c08889335f..87016ee0fd1c 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -147,6 +147,10 @@ #include "item_strfunc.h" // Item_func_uuid #include "handler.h" +#if defined(HAVE_OPENSSL) && !defined(HAVE_YASSL) +#include +#endif + #ifndef EMBEDDED_LIBRARY #include "srv_session.h" #endif @@ -3664,6 +3668,17 @@ int warn_self_signed_ca() static int init_ssl() { #ifdef HAVE_OPENSSL +#ifndef HAVE_YASSL + int fips_mode= FIPS_mode(); + if (fips_mode != 0) + { + /* FIPS is enabled, Log warning and Disable it now */ + sql_print_warning( + "Percona Server cannot operate under OpenSSL FIPS mode." + " Disabling FIPS."); + FIPS_mode_set(0); + } +#endif /* HAVE_YASSL */ #if !defined(HAVE_YASSL) && (OPENSSL_VERSION_NUMBER < 0x10100000L) CRYPTO_malloc_init(); #endif From 94208bcb882860f9f21e1a0d1e600cce268e1203 Mon Sep 17 00:00:00 2001 From: Jimmy Yang Date: Wed, 13 Jun 2018 18:10:12 -0700 Subject: [PATCH 0914/1221] Fix Bug#28104394 - INNODB 5.7 PRIMARY KEY SCAN LACK DATA Reviewed-by: Sunny Bains --- storage/innobase/handler/ha_innodb.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index ff82775ac7a0..9b574c70f9af 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -3235,6 +3235,7 @@ ha_innobase::reset_template(void) m_prebuilt->keep_other_fields_on_keyread = 0; m_prebuilt->read_just_key = 0; m_prebuilt->in_fts_query = 0; + m_prebuilt->m_end_range = false; /* Reset index condition pushdown state. */ if (m_prebuilt->idx_cond) { From 9231f595ec514f6e7d20bf3a20cf78fc72dedeb6 Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Thu, 14 Jun 2018 14:34:05 +0200 Subject: [PATCH 0915/1221] PS-4521: auto_ptr deprecated in C++11/C++14 (GCC6 default) Upstream uses "-std=gnu++03" for g++-6 and newer. This commit fixes a regression in Percona Server that "-std=gnu++03" was not set with CMake older that 3.1 because CMAKE_CXX_STANDARD was introduced in CMake 3.1 --- cmake/build_configurations/compiler_options.cmake | 6 +++++- cmake/check_stdcxx11.cmake | 7 ++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/cmake/build_configurations/compiler_options.cmake b/cmake/build_configurations/compiler_options.cmake index ba9ea32be0a0..bf0494e3dea3 100644 --- a/cmake/build_configurations/compiler_options.cmake +++ b/cmake/build_configurations/compiler_options.cmake @@ -32,7 +32,11 @@ IF(UNIX) MY_CHECK_CXX_COMPILER_FLAG("-std=gnu++03" GNU03_SUPPORTED) IF(GNU03_SUPPORTED) - SET(CMAKE_CXX98_EXTENSION_COMPILE_OPTION -std=gnu++03) + IF(CMAKE_VERSION VERSION_LESS 3.1.0) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++03") + ELSE() + SET(CMAKE_CXX98_EXTENSION_COMPILE_OPTION -std=gnu++03) + ENDIF() ENDIF() # Default GCC flags diff --git a/cmake/check_stdcxx11.cmake b/cmake/check_stdcxx11.cmake index 1aa0062e3361..d94eb8dbd8b2 100644 --- a/cmake/check_stdcxx11.cmake +++ b/cmake/check_stdcxx11.cmake @@ -22,11 +22,12 @@ INCLUDE (CheckCXXCompilerFlag) check_cxx_compiler_flag (-std=c++11 HAVE_STDCXX11) IF (HAVE_STDCXX11) - IF ("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" VERSION_GREATER "3.1") - SET (CMAKE_CXX_FLAGS "-Wno-deprecated-declarations ${CMAKE_CXX_FLAGS}") - ELSE () + IF(CMAKE_VERSION VERSION_LESS 3.1.0) # CMAKE_CXX_STANDARD was introduced in CMake 3.1, it will be ignored by older CMake + STRING (REPLACE "-std=gnu++03" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) SET (CMAKE_CXX_FLAGS "--std=c++11 -Wno-deprecated-declarations ${CMAKE_CXX_FLAGS}") + ELSE () + SET (CMAKE_CXX_FLAGS "-Wno-deprecated-declarations ${CMAKE_CXX_FLAGS}") ENDIF() ENDIF () From cad692f919493e2176d52984415561496e13833d Mon Sep 17 00:00:00 2001 From: Ivo Roylev Date: Thu, 14 Jun 2018 17:27:54 +0300 Subject: [PATCH 0916/1221] Bug#27980823: HEAP OVERFLOW VULNERABILITIES IN MYSQL CLIENT LIBRARY --- sql-common/client.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sql-common/client.c b/sql-common/client.c index 3247fd8e339a..7938403db59f 100644 --- a/sql-common/client.c +++ b/sql-common/client.c @@ -1505,7 +1505,8 @@ unpack_fields(MYSQL *mysql, MYSQL_DATA *data,MEM_ROOT *alloc,uint fields, { uchar *pos; /* fields count may be wrong */ - DBUG_ASSERT((uint) (field - result) < fields); + if (field < result || (uint) (field - result) >= fields) + DBUG_RETURN(NULL); cli_fetch_lengths(&lengths[0], row->data, default_value ? 8 : 7); field->catalog= strmake_root(alloc,(char*) row->data[0], lengths[0]); field->db= strmake_root(alloc,(char*) row->data[1], lengths[1]); @@ -1612,6 +1613,7 @@ MYSQL_DATA *cli_read_rows(MYSQL *mysql,MYSQL_FIELD *mysql_fields, if ((pkt_len= cli_safe_read(mysql)) == packet_error) DBUG_RETURN(0); + if (pkt_len == 0) DBUG_RETURN(0); if (!(result=(MYSQL_DATA*) my_malloc(sizeof(MYSQL_DATA), MYF(MY_WME | MY_ZEROFILL)))) { From 9be1f53a6572de3fd66a9a6a626f947f50a95c33 Mon Sep 17 00:00:00 2001 From: Neha Kumari Date: Thu, 14 Jun 2018 23:01:28 +0530 Subject: [PATCH 0917/1221] Bug#28091735:COMMIT HANGS IF BINLOG_GROUP_COMMIT_SYNC_DELAY NOT MULTIPLE OF 1/10TH OF ITSELF Analysis: Setting binlog_group_commit_sync_no_delay_count option means that the server exits the wait procedure if the number of sessions reaches the count given before the timeout i.e is set in binlog_group_commit_sync_delay elapses. In order to check if session count has reached the given limit, the waiting time is broken into small intervals called as delta. The delta is calculated as 1/10th of total wait time. After each delta waiting time is elapsed queue size is checked to see if count has reached. If count is not reached then wait time is modified "to_wait = to_wait - delta". This process is repeated until to_wait > 0 and count has not been reached. delta is calculated like this ulong delta= DBUG_EVALUATE_IF("bgc_set_infinite_delay", 100000, max(1, (to_wait * 0.1))); When to_wait which is the value of sync_delay is a non multiple of the delta(3) like lets say 32, as this is not a multiple of to_wait time there will be a point in the waiting code where to_wait = 2, and then to_wait(2) = to_wait(2) - delta(3) = -1 now as to_wait is of type ulong so the value will be wrapped and to_wait = 18446744073709551615 [ULONG_MAX]. This will make the waiting loop continue forever. --- ...inlog_group_commit_sync_delay_error.result | 9 +++++ .../binlog_group_commit_sync_delay_error.test | 40 +++++++++++++++++++ sql/binlog.cc | 8 ++-- sql/binlog.h | 2 +- sql/mysqld.cc | 2 +- sql/mysqld.h | 4 +- sql/sys_vars.cc | 2 +- 7 files changed, 58 insertions(+), 9 deletions(-) create mode 100644 mysql-test/suite/binlog/r/binlog_group_commit_sync_delay_error.result create mode 100644 mysql-test/suite/binlog/t/binlog_group_commit_sync_delay_error.test diff --git a/mysql-test/suite/binlog/r/binlog_group_commit_sync_delay_error.result b/mysql-test/suite/binlog/r/binlog_group_commit_sync_delay_error.result new file mode 100644 index 000000000000..428279f4e04b --- /dev/null +++ b/mysql-test/suite/binlog/r/binlog_group_commit_sync_delay_error.result @@ -0,0 +1,9 @@ +CREATE TABLE t(s INT); +SET GLOBAL binlog_group_commit_sync_delay = 32; +SET GLOBAL binlog_group_commit_sync_no_delay_count = 0; +BEGIN; +INSERT INTO t VALUES(10); +COMMIT; +SET GLOBAL binlog_group_commit_sync_delay = 0; +SET GLOBAL binlog_group_commit_sync_no_delay_count = 0; +DROP TABLE t; diff --git a/mysql-test/suite/binlog/t/binlog_group_commit_sync_delay_error.test b/mysql-test/suite/binlog/t/binlog_group_commit_sync_delay_error.test new file mode 100644 index 000000000000..6a937fb4f8fa --- /dev/null +++ b/mysql-test/suite/binlog/t/binlog_group_commit_sync_delay_error.test @@ -0,0 +1,40 @@ +# ==== Purpose ==== +# +# This test will set a value for binlog_group_commit_sync_delay +# which will be a non multiple of delta(the waiting time is +# broken into smaller chunks called as delta), and execute some +# transactions after that. +# +# The test verifies that server does not hang when a non multiple of 10 +# is assigned to binlog_group_commit_sync_delay variable. +# +# Related bugs and Worklogs +# +# Bug#28091735:COMMIT WILL HANG IF BINLOG_GROUP_COMMIT_SYNC_DELAY +# IS NOT A MULTIPLE OF 10 + +# this is binlog format agnostic +--source include/have_binlog_format_row.inc + +--let $bgcd_saved = `SELECT @@GLOBAL.binlog_group_commit_sync_delay` +--let $bgcc_saved = `SELECT @@GLOBAL.binlog_group_commit_sync_no_delay_count` + +CREATE TABLE t(s INT); + +# Set the delay to a non multiple of delta, in this case +# delta will be 3, MAX(1, wait_time * .1) and so it will not be +# a multiple of the waiting time which is 32 + +SET GLOBAL binlog_group_commit_sync_delay = 32; +SET GLOBAL binlog_group_commit_sync_no_delay_count = 0; + +BEGIN; +INSERT INTO t VALUES(10); +COMMIT; # Hangs here without the fix + +#cleanup + +--eval SET GLOBAL binlog_group_commit_sync_delay = $bgcd_saved +--eval SET GLOBAL binlog_group_commit_sync_no_delay_count = $bgcc_saved +DROP TABLE t; + diff --git a/sql/binlog.cc b/sql/binlog.cc index c24949eaef42..41fbb5989d63 100644 --- a/sql/binlog.cc +++ b/sql/binlog.cc @@ -2252,9 +2252,9 @@ THD *Stage_manager::Mutex_queue::fetch_and_empty() DBUG_RETURN(result); } -void Stage_manager::wait_count_or_timeout(ulong count, ulong usec, StageID stage) +void Stage_manager::wait_count_or_timeout(ulong count, long usec, StageID stage) { - ulong to_wait= + long to_wait= DBUG_EVALUATE_IF("bgc_set_infinite_delay", LONG_MAX, usec); /* For testing purposes while waiting for inifinity @@ -2262,9 +2262,9 @@ void Stage_manager::wait_count_or_timeout(ulong count, ulong usec, StageID stage small intervals. Otherwise, waiting 0.1 * infinite is too long. */ - ulong delta= + long delta= DBUG_EVALUATE_IF("bgc_set_infinite_delay", 100000, - max(1, (to_wait * 0.1))); + max(1, (to_wait * 0.1))); while (to_wait > 0 && (count == 0 || static_cast(m_queue[stage].get_size()) < count)) { diff --git a/sql/binlog.h b/sql/binlog.h index 15491b42dfe1..02240010e67d 100644 --- a/sql/binlog.h +++ b/sql/binlog.h @@ -246,7 +246,7 @@ class Stage_manager { session is waiting on @param stage which stage queue size to compare count against. */ - void wait_count_or_timeout(ulong count, ulong usec, StageID stage); + void wait_count_or_timeout(ulong count, long usec, StageID stage); void signal_done(THD *queue); diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 96fb05af55db..2ed90162f992 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -473,7 +473,7 @@ ulonglong max_binlog_cache_size=0; ulong slave_max_allowed_packet= 0; ulong binlog_stmt_cache_size=0; int32 opt_binlog_max_flush_queue_time= 0; -ulong opt_binlog_group_commit_sync_delay= 0; +long opt_binlog_group_commit_sync_delay= 0; ulong opt_binlog_group_commit_sync_no_delay_count= 0; ulonglong max_binlog_stmt_cache_size=0; ulong query_cache_size=0; diff --git a/sql/mysqld.h b/sql/mysqld.h index 360f61eacfdf..b751133f8366 100644 --- a/sql/mysqld.h +++ b/sql/mysqld.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2010, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -246,7 +246,7 @@ extern ulong open_files_limit; extern ulong binlog_cache_size, binlog_stmt_cache_size; extern ulonglong max_binlog_cache_size, max_binlog_stmt_cache_size; extern int32 opt_binlog_max_flush_queue_time; -extern ulong opt_binlog_group_commit_sync_delay; +extern long opt_binlog_group_commit_sync_delay; extern ulong opt_binlog_group_commit_sync_no_delay_count; extern ulong max_binlog_size, max_relay_log_size; extern ulong slave_max_allowed_packet; diff --git a/sql/sys_vars.cc b/sql/sys_vars.cc index 0452ae55c2dd..9960323f96af 100644 --- a/sql/sys_vars.cc +++ b/sql/sys_vars.cc @@ -748,7 +748,7 @@ static Sys_var_int32 Sys_binlog_max_flush_queue_time( NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(0), ON_UPDATE(0), DEPRECATED("")); -static Sys_var_ulong Sys_binlog_group_commit_sync_delay( +static Sys_var_long Sys_binlog_group_commit_sync_delay( "binlog_group_commit_sync_delay", "The number of microseconds the server waits for the " "binary log group commit sync queue to fill before " From 37f7f0cd32319c3521fc05f5f8654ef441f3818f Mon Sep 17 00:00:00 2001 From: Dmitriy Kostiuk Date: Thu, 14 Jun 2018 21:49:23 +0300 Subject: [PATCH 0918/1221] Fix for DOC-751 (mentioning Ubuntu 18.04) and DOC-752 (percona-release 0.1.6), 5.5 version (#2427) --- doc/source/installation/apt_repo.rst | 5 +++-- doc/source/installation/yum_repo.rst | 8 ++++---- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/doc/source/installation/apt_repo.rst b/doc/source/installation/apt_repo.rst index fbc32652285b..86c582f288de 100644 --- a/doc/source/installation/apt_repo.rst +++ b/doc/source/installation/apt_repo.rst @@ -20,6 +20,7 @@ Supported Releases: * 16.04LTS (xenial) * 17.04 (zesty) * 17.10 (artful) + * 18.04 (bionic) Supported Platforms: @@ -52,13 +53,13 @@ Installing |Percona Server| from Percona ``apt`` repository .. code-block:: bash - wget https://repo.percona.com/apt/percona-release_0.1-4.$(lsb_release -sc)_all.deb + wget https://repo.percona.com/apt/percona-release_0.1-6.$(lsb_release -sc)_all.deb 2. Install the downloaded package with :program:`dpkg`. To do that, run the following commands as root or with :program:`sudo`: .. code-block:: bash - dpkg -i percona-release_0.1-4.$(lsb_release -sc)_all.deb + dpkg -i percona-release_0.1-6.$(lsb_release -sc)_all.deb Once you install this package the Percona repositories should be added. You can check the repository setup in the :file:`/etc/apt/sources.list.d/percona-release.list` file. diff --git a/doc/source/installation/yum_repo.rst b/doc/source/installation/yum_repo.rst index 715be80262a8..9c70020fe3eb 100644 --- a/doc/source/installation/yum_repo.rst +++ b/doc/source/installation/yum_repo.rst @@ -51,13 +51,13 @@ Installing |Percona Server| from Percona ``yum`` repository .. code-block:: bash - yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm + yum install http://www.percona.com/downloads/percona-release/redhat/0.1-6/percona-release-0.1-6.noarch.rpm You should see some output such as the following: .. code-block:: bash - Retrieving http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm + Retrieving http://www.percona.com/downloads/percona-release/redhat/0.1-6/percona-release-0.1-6.noarch.rpm Preparing... ########################################### [100%] 1:percona-release ########################################### [100%] @@ -67,8 +67,8 @@ Installing |Percona Server| from Percona ``yum`` repository .. code-block:: bash - wget http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm - rpm -ivH percona-release-0.1-4.noarch.rpm + wget http://www.percona.com/downloads/percona-release/redhat/0.1-6/percona-release-0.1-6.noarch.rpm + rpm -ivH percona-release-0.1-6.noarch.rpm 2. Testing the repository From c4d0e2d8df4612f64fe94acac5b52a1fb550b2b3 Mon Sep 17 00:00:00 2001 From: Dmitriy Kostiuk Date: Thu, 14 Jun 2018 21:49:39 +0300 Subject: [PATCH 0919/1221] Fix for DOC-751 (mentioning Ubuntu 18.04) and DOC-752 (percona-release 0.1.6), 5.5 version (#2428) --- doc/source/index.rst | 1 + doc/source/installation/apt_repo.rst | 5 +++-- doc/source/installation/yum_repo.rst | 4 ++-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/doc/source/index.rst b/doc/source/index.rst index c2f2c79aa147..5c2d9d8c9c29 100644 --- a/doc/source/index.rst +++ b/doc/source/index.rst @@ -154,6 +154,7 @@ TokuDB tokudb/tokudb_intro tokudb/tokudb_installation tokudb/using_tokudb + tokudb/fast_updates tokudb/tokudb_files_and_file_types tokudb/tokudb_file_management tokudb/tokudb_background_analyze_table diff --git a/doc/source/installation/apt_repo.rst b/doc/source/installation/apt_repo.rst index 5e345fdf186d..91ef50c34aad 100644 --- a/doc/source/installation/apt_repo.rst +++ b/doc/source/installation/apt_repo.rst @@ -20,6 +20,7 @@ Supported Releases: * 16.04LTS (xenial) * 17.04 (zesty) * 17.10 (artful) + * 18.04 (bionic) Supported Platforms: @@ -52,13 +53,13 @@ Installing |Percona Server| from Percona ``apt`` repository .. code-block:: bash - wget https://repo.percona.com/apt/percona-release_0.1-4.$(lsb_release -sc)_all.deb + wget https://repo.percona.com/apt/percona-release_0.1-6.$(lsb_release -sc)_all.deb 2. Install the downloaded package with :program:`dpkg`. To do that, run the following commands as root or with :program:`sudo`: .. code-block:: bash - dpkg -i percona-release_0.1-4.$(lsb_release -sc)_all.deb + dpkg -i percona-release_0.1-6.$(lsb_release -sc)_all.deb Once you install this package the Percona repositories should be added. You can check the repository setup in the :file:`/etc/apt/sources.list.d/percona-release.list` file. diff --git a/doc/source/installation/yum_repo.rst b/doc/source/installation/yum_repo.rst index dd0651f2a3fd..d65ce9f379a9 100644 --- a/doc/source/installation/yum_repo.rst +++ b/doc/source/installation/yum_repo.rst @@ -51,13 +51,13 @@ Installing |Percona Server| from Percona ``yum`` repository .. code-block:: bash - yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm + yum install http://www.percona.com/downloads/percona-release/redhat/0.1-6/percona-release-0.1-6.noarch.rpm You should see some output such as the following: .. code-block:: bash - Retrieving http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm + Retrieving http://www.percona.com/downloads/percona-release/redhat/0.1-6/percona-release-0.1-6.noarch.rpm Preparing... ########################################### [100%] 1:percona-release ########################################### [100%] From 109fd049379ee6fc23717cf630cf6bccb92acfab Mon Sep 17 00:00:00 2001 From: Darshan M N Date: Thu, 14 Jun 2018 21:29:27 +0530 Subject: [PATCH 0920/1221] Bug#27903881 - [MYSQL 8.0 GA RELEASE & DEBUG BUILD] FIL_SPACE_GET(TABLE->SPACE) != __NULL] Issue ===== For a partitioned table, FLUSH TABLES .... FOR EXPORT immediately after a ALTER TABLE ... DISCARD TABLESPACE results in an assertion being hit. Fix === It should not be possible to do a flush tables for export for a file-per-table after discarding its tablespace. This is handled by throwing a ER_TABLESPACE_DISCARDED error even before we start processing the request. This was fixed for non-partitioned tables as part of fix for bug#22899690. The same fix needs to be ported for partitioned RB : 19889 Reviewed-by : Allen lai --- mysql-test/suite/innodb/r/innodb_tablespace.result | 11 +++++++++++ mysql-test/suite/innodb/t/innodb_tablespace.test | 11 +++++++++++ storage/innobase/handler/ha_innopart.cc | 9 +++++++++ 3 files changed, 31 insertions(+) diff --git a/mysql-test/suite/innodb/r/innodb_tablespace.result b/mysql-test/suite/innodb/r/innodb_tablespace.result index 5cb82e45012c..b6fb5afedf5e 100644 --- a/mysql-test/suite/innodb/r/innodb_tablespace.result +++ b/mysql-test/suite/innodb/r/innodb_tablespace.result @@ -582,3 +582,14 @@ FLUSH TABLES t1 FOR EXPORT; ERROR HY000: Tablespace has been discarded for table 't1' UNLOCK TABLES; DROP TABLE t1; +# +# Bug#27903881 [MYSQL 8.0 GA RELEASE & DEBUG BUILD] +# FIL_SPACE_GET(TABLE->SPACE) != __NULL +# +call mtr.add_suppression("\\[Warning\\] InnoDB: Missing .ibd file for table `test`\.`t1` .* "); +CREATE TABLE t1(c1 INT,c2 CHAR,c3 DATE)PARTITION BY HASH(DAYOFWEEK(c3)); +ALTER TABLE t1 DISCARD TABLESPACE; +FLUSH TABLES t1 FOR EXPORT; +ERROR HY000: Tablespace has been discarded for table 't1' +UNLOCK TABLES; +DROP TABLE t1; diff --git a/mysql-test/suite/innodb/t/innodb_tablespace.test b/mysql-test/suite/innodb/t/innodb_tablespace.test index 43b69f6c9f6f..85e61dccb8b6 100644 --- a/mysql-test/suite/innodb/t/innodb_tablespace.test +++ b/mysql-test/suite/innodb/t/innodb_tablespace.test @@ -422,3 +422,14 @@ FLUSH TABLES t1 FOR EXPORT; UNLOCK TABLES; DROP TABLE t1; +--echo # +--echo # Bug#27903881 [MYSQL 8.0 GA RELEASE & DEBUG BUILD] +--echo # FIL_SPACE_GET(TABLE->SPACE) != __NULL +--echo # +call mtr.add_suppression("\\[Warning\\] InnoDB: Missing .ibd file for table `test`\.`t1` .* "); +CREATE TABLE t1(c1 INT,c2 CHAR,c3 DATE)PARTITION BY HASH(DAYOFWEEK(c3)); +ALTER TABLE t1 DISCARD TABLESPACE; +--error ER_TABLESPACE_DISCARDED +FLUSH TABLES t1 FOR EXPORT; +UNLOCK TABLES; +DROP TABLE t1; diff --git a/storage/innobase/handler/ha_innopart.cc b/storage/innobase/handler/ha_innopart.cc index 0fb5623b070f..bc9b66f40cf5 100644 --- a/storage/innobase/handler/ha_innopart.cc +++ b/storage/innobase/handler/ha_innopart.cc @@ -4237,6 +4237,15 @@ ha_innopart::external_lock( ut_ad(table->quiesce == QUIESCE_START); + if (dict_table_is_discarded(table)) { + ib_senderrf(m_prebuilt->trx->mysql_thd, + IB_LOG_LEVEL_ERROR, + ER_TABLESPACE_DISCARDED, + table->name.m_name); + + return (HA_ERR_NO_SUCH_TABLE); + } + row_quiesce_table_start(table, m_prebuilt->trx); From 06bc670db0c0e45b3ea11409382a5c315961f682 Mon Sep 17 00:00:00 2001 From: Ivo Roylev Date: Fri, 15 Jun 2018 12:23:24 +0300 Subject: [PATCH 0921/1221] Merge branch 'mysql-5.5' into mysql-5.6 (cherry picked from commit 9e9e1129faae9d0b096a51ab3fb63ce8ed4b847b) --- sql-common/client.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sql-common/client.c b/sql-common/client.c index 09fcdae7d9c4..010911ccbc30 100644 --- a/sql-common/client.c +++ b/sql-common/client.c @@ -1449,7 +1449,8 @@ unpack_fields(MYSQL *mysql, MYSQL_DATA *data,MEM_ROOT *alloc,uint fields, { uchar *pos; /* fields count may be wrong */ - DBUG_ASSERT((uint) (field - result) < fields); + if (field < result || (uint) (field - result) >= fields) + DBUG_RETURN(NULL); cli_fetch_lengths(&lengths[0], row->data, default_value ? 8 : 7); field->catalog= strmake_root(alloc,(char*) row->data[0], lengths[0]); field->db= strmake_root(alloc,(char*) row->data[1], lengths[1]); @@ -1556,6 +1557,7 @@ MYSQL_DATA *cli_read_rows(MYSQL *mysql,MYSQL_FIELD *mysql_fields, if ((pkt_len= cli_safe_read(mysql)) == packet_error) DBUG_RETURN(0); + if (pkt_len == 0) DBUG_RETURN(0); if (!(result=(MYSQL_DATA*) my_malloc(sizeof(MYSQL_DATA), MYF(MY_WME | MY_ZEROFILL)))) { From e48d775c6f066add457fa8cfb2ebc4d5ff0c7613 Mon Sep 17 00:00:00 2001 From: Ivo Roylev Date: Thu, 14 Jun 2018 17:27:54 +0300 Subject: [PATCH 0922/1221] Bug#27980823: HEAP OVERFLOW VULNERABILITIES IN MYSQL CLIENT LIBRARY (cherry picked from commit b5b986b2cbd9a7848dc3f48e5c42b6d4e1e5fb22) --- sql-common/client.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sql-common/client.c b/sql-common/client.c index 3247fd8e339a..7938403db59f 100644 --- a/sql-common/client.c +++ b/sql-common/client.c @@ -1505,7 +1505,8 @@ unpack_fields(MYSQL *mysql, MYSQL_DATA *data,MEM_ROOT *alloc,uint fields, { uchar *pos; /* fields count may be wrong */ - DBUG_ASSERT((uint) (field - result) < fields); + if (field < result || (uint) (field - result) >= fields) + DBUG_RETURN(NULL); cli_fetch_lengths(&lengths[0], row->data, default_value ? 8 : 7); field->catalog= strmake_root(alloc,(char*) row->data[0], lengths[0]); field->db= strmake_root(alloc,(char*) row->data[1], lengths[1]); @@ -1612,6 +1613,7 @@ MYSQL_DATA *cli_read_rows(MYSQL *mysql,MYSQL_FIELD *mysql_fields, if ((pkt_len= cli_safe_read(mysql)) == packet_error) DBUG_RETURN(0); + if (pkt_len == 0) DBUG_RETURN(0); if (!(result=(MYSQL_DATA*) my_malloc(sizeof(MYSQL_DATA), MYF(MY_WME | MY_ZEROFILL)))) { From 5c86204c5d4ec981f4b4cb566e25b0d1b9585916 Mon Sep 17 00:00:00 2001 From: Marek Szymczak Date: Sat, 16 Jun 2018 06:59:04 +0200 Subject: [PATCH 0923/1221] WL#11447 Refactor Audit Log synchronization to get rid of rwlock Replacement of the read-write lock with the lockless synchronization. Bug fixes ========= Bug#24353553 AUDIT PLUGIN UDF'S DEADLOCK SERVER WHEN TABLES ARE LOCKED Reviewed-by =========== Marc Alff --- mysql-test/collections/mysql-5.7-stage.push | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mysql-test/collections/mysql-5.7-stage.push b/mysql-test/collections/mysql-5.7-stage.push index c359b47e1755..18efb8ab72ac 100644 --- a/mysql-test/collections/mysql-5.7-stage.push +++ b/mysql-test/collections/mysql-5.7-stage.push @@ -44,3 +44,5 @@ perl mysql-test-run.pl --debug-server --timer --force --parallel=auto --comment= perl mysql-test-run.pl --debug-server --timer --force --parallel=auto --comment=x --vardir=var-x --suite=x --experimental=collections/default.experimental # cross_plugin_test perl mysql-test-run.pl --debug-server --timer --force --parallel=auto --comment=cross_plugin_test --vardir=var-cross_plugin_test --suite=cross_plugin_test --experimental=collections/default.experimental +# audit_log +perl mysql-test-run.pl --debug-server --timer --force --parallel=auto --comment=audit_log --vardir=var-audit_log --suite=audit_log --experimental=collections/default.experimental --force-restart From 163b32f5bbb52aea102e8d01da2abd3f2be6d4f3 Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Mon, 18 Jun 2018 09:01:56 +0530 Subject: [PATCH 0924/1221] From 57630cefd7d4b3a3ac66b0f3e1838b5c56237430 Mon Sep 17 00:00:00 2001 From: Yura Sorokin Date: Thu, 7 Jun 2018 10:20:26 +0100 Subject: [PATCH 0925/1221] Fixed PS-4513 "Inconsistent SELECT...ORDER BY results with euckr charset / euckr_bin collation" https://jira.percona.com/browse/PS-4513 Added missing reset 'end_range' statement in 'ha_innobase::reset_template()' in 'ha_innodb.cc' which is present in the fix for Bug #23481444 "OPTIMISER CALL ROW_SEARCH_MVCC() AND READ THE INDEX APPLIED BY UNCOMMITTED ROWS" (commit mysql/mysql-server@15dbdac4) in 8.0 but not in 5.6 and 5.7. Added new 'innodb.bug91091' MTR test case which simulates the problem with different results of 'SELECT' statements. --- mysql-test/suite/innodb/include/bug91091.inc | 159 ++++++++++ mysql-test/suite/innodb/r/bug91091.result | 57 ++++ mysql-test/suite/innodb/t/bug91091.test | 303 +++++++++++++++++++ storage/innobase/handler/ha_innodb.cc | 1 + 4 files changed, 520 insertions(+) create mode 100644 mysql-test/suite/innodb/include/bug91091.inc create mode 100644 mysql-test/suite/innodb/r/bug91091.result create mode 100644 mysql-test/suite/innodb/t/bug91091.test diff --git a/mysql-test/suite/innodb/include/bug91091.inc b/mysql-test/suite/innodb/include/bug91091.inc new file mode 100644 index 000000000000..c792bd5dbc87 --- /dev/null +++ b/mysql-test/suite/innodb/include/bug91091.inc @@ -0,0 +1,159 @@ +DELETE FROM t WHERE c2 = '*****12889aaTHLIN_ACQS_DT_S8' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****12889aaTHLIN_FRFT_DT_S8' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****12889aaTNM_S60' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****12889aaTTNOF_r2aaT_N5' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****12889aaTPRGP_PSSG_r2aaT_N5' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****r2889aaTHLIN_ACQS_DT_S8' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****r2889aaTHLIN_FRFT_DT_S8' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****r2889aaTBUSI_NO_S10' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****r2889aaTNM_S60' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****r2889aaTTNOF_r2aaT_N5' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****_SGI_CUR_TNOF_TRM_N5' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****_SGI_ANIN_AMT_N17' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****_ANUL_HLTH_INPM_PAYM_TOT_AMT_N17' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****_MN3_AVG_PAY_MM_AMT_N17' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****_INCM_YR_HLIN_RAT_N9' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****_INPM_NPAM_YN_S1' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = 'OCUP_CD' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = 'SINDS_CD' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****_SUSPBZ_CLBS_DIV_S1' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = 'ENCM_BIZ_OPNG_DT_S8' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = 'WRST_BZPL_TLNO_S14' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = 'CUR_WRST_FRFT_YN_S1' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = 'TNOF_INFO_BASE_DENL_TRGT_YN_S1' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****_QLFC_CFNT_ISS_NO_S64' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****_QLFC_CFNT_FLNM_S60' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****_QLFC_CFNT_RSDT_NO_S24' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****_QLFC_CFNT_SBSR_DIV_S20' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****_QLFC_CFNT_BZPL_NM_S60' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****_QLFC_CFNT_ACQS_DT_S8' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****_QLFC_CFNT_FRFT_DT_S8' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****_QLFC_CFNT_RBF_SBSR_DIV_S20' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****_QLFC_CFNT_RBF_BZPL_NM_S60' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****_QLFC_CFNT_RBF_ACQS_DT_S8' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****_QLFC_CFNT_RBF_FRFT_DT_S8' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****_QLFC_CFNT_ISS_DT_S8' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****eWioc1GieBoo3iISS_DT_S8' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****eWioc1GieBoo3iISS_NO_S64' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****eWioc1GieBoo3iBZPL_NM_S60' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****eWioc1GieBoo3iPAYR_NO_S64' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****eWioc1GieBoo3iS4' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****ieBoo3i01Ahzei9u17' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****ieBoo3i02Ahzei9u17' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****ieBoo3i03Ahzei9u17' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****ieBoo3i04Ahzei9u17' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****ieBoo3i05Ahzei9u17' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****ieBoo3i06Ahzei9u17' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****ieBoo3i07Ahzei9u17' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****ieBoo3i08Ahzei9u17' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****ieBoo3i09Ahzei9u17' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****ieBoo3i10Ahzei9u17' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****ieBoo3i11Ahzei9u17' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****ieBoo3i12Ahzei9u17' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****eWioc1G_RBYR_ISS_DT_S8' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****eWioc1G_RBYR_ISS_NO_S64' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****eWioc1G_RBYR_BZPL_NM_S60' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****eWioc1G_RBYR_PAYR_NO_S64' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****eWioc1G_RBYR_S4' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****_RBYR_01Ahzei9u17' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****_RBYR_02Ahzei9u17' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****_RBYR_03Ahzei9u17' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****_RBYR_04Ahzei9u17' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****_RBYR_05Ahzei9u17' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****_RBYR_06Ahzei9u17' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****_RBYR_07Ahzei9u17' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****_RBYR_08Ahzei9u17' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****_RBYR_09Ahzei9u17' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****_RBYR_10Ahzei9u17' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****_RBYR_11Ahzei9u17' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****_RBYR_12Ahzei9u17' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = 'HLIN_PBCR_GTH_MTCD_S2' AND c1 = 'Eid4i*******11372012******haHLIN_PBCR_*****_******00'; +DELETE FROM t WHERE c2 = '*****_CHCR2889aaTAMT_RATE_N9' AND c1 = 'Eid4i*******11372012******haequ4aiH_*****_******00'; +DELETE FROM t WHERE c2 = '*****_CHCR2889aaTAMT_N17' AND c1 = 'Eid4i*******11372012******haequ4aiH_*****_******00'; +DELETE FROM t WHERE c2 = '*****_CHCR_CSVC2889aaTAMT_RATE_N9' AND c1 = 'Eid4i*******11372012******haequ4aiH_*****_******00'; +DELETE FROM t WHERE c2 = '*****_CHCR_CSVC2889aaTAMT_N17' AND c1 = 'Eid4i*******11372012******haequ4aiH_*****_******00'; +DELETE FROM t WHERE c2 = '*****_30_TTW_EXCS_DONT_EXIS_YN_S1' AND c1 = 'Eid4i*******11372012******haequ4aiH_*****_******00'; +DELETE FROM t WHERE c2 = '*****_IDVD_PNSN_HOLD_YN_S1' AND c1 = 'Eid4i*******11372012******haequ4aiH_*****_******00'; +DELETE FROM t WHERE c2 = 'equ4aiH_GTH_MTCD_S2' AND c1 = 'Eid4i*******11372012******haequ4aiH_*****_******00'; +DELETE FROM t WHERE c2 = '*****_RIID_TRSF_roo2aaT_MCNT_N5' AND c1 = 'Eid4i*******11372012******haFNNS_*****_******00'; +DELETE FROM t WHERE c2 = '*****_RIID_MN6_PAYAM_N17' AND c1 = 'Eid4i*******11372012******haFNNS_*****_******00'; +DELETE FROM t WHERE c2 = '*****_FRDM_INDP_TRSF_roo2aaT_MCNT_N5' AND c1 = 'Eid4i*******11372012******haFNNS_*****_******00'; +DELETE FROM t WHERE c2 = '*****_FRDM_INDP_MN6_PAYAM_N17' AND c1 = 'Eid4i*******11372012******haFNNS_*****_******00'; +DELETE FROM t WHERE c2 = '*****_DEP_ACCO_TOT_AMT_N17' AND c1 = 'Eid4i*******11372012******haFNNS_*****_******00'; +DELETE FROM t WHERE c2 = 'FNNS_GTH_MTCD_S2' AND c1 = 'Eid4i*******11372012******haFNNS_*****_******00'; +DELETE FROM t WHERE c2 = '*****_CMCM_NROM_PAYM_MCNT_N5' AND c1 = 'Eid4i*******11372012******haCMCM_*****_******00'; +DELETE FROM t WHERE c2 = '*****_CMCM_USE_FARE_N17' AND c1 = 'Eid4i*******11372012******haCMCM_*****_******00'; +DELETE FROM t WHERE c2 = 'CMCM_GTH_MTCD_S2' AND c1 = 'Eid4i*******11372012******haCMCM_*****_******00'; +DELETE FROM t WHERE c2 = '*****_FMLY_RLT_****_ISS_NO_S64' AND c1 = 'Eid4i*******11372012******haFMLY_RLT_PRF_*****_******00'; +DELETE FROM t WHERE c2 = '*****_FMLY_RLT_****_FLNM_S60' AND c1 = 'Eid4i*******11372012******haFMLY_RLT_PRF_*****_******00'; +DELETE FROM t WHERE c2 = '*****_FMLY_RLT_****_RSDT_NO_S24' AND c1 = 'Eid4i*******11372012******haFMLY_RLT_PRF_*****_******00'; +DELETE FROM t WHERE c2 = '*****_FMLY_RLT_****_MRGE_YN_S1' AND c1 = 'Eid4i*******11372012******haFMLY_RLT_PRF_*****_******00'; +DELETE FROM t WHERE c2 = '*****_FMLY_RLT_****_SPOS_RSDT_NO_S24' AND c1 = 'Eid4i*******11372012******haFMLY_RLT_PRF_*****_******00'; +DELETE FROM t WHERE c2 = '*****_FMLY_RLT_****_SPOS_NTIV_YN_S1' AND c1 = 'Eid4i*******11372012******haFMLY_RLT_PRF_*****_******00'; +DELETE FROM t WHERE c2 = '*****_FMLY_RLT_****_ISS_DT_S8' AND c1 = 'Eid4i*******11372012******haFMLY_RLT_PRF_*****_******00'; +DELETE FROM t WHERE c2 = 'FMLY_RLT_PRF_GTH_MTCD_S2' AND c1 = 'Eid4i*******11372012******haFMLY_RLT_PRF_*****_******00'; +DELETE FROM t WHERE c2 = '*****_BSIC_****_ISS_NO_S64' AND c1 = 'Eid4i*******11372012******haSUPCR_BSIC_PRF_*****_******00'; +DELETE FROM t WHERE c2 = '*****_BSIC_****_FLNM_S60' AND c1 = 'Eid4i*******11372012******haSUPCR_BSIC_PRF_*****_******00'; +DELETE FROM t WHERE c2 = '*****_BSIC_****_RSDT_NO_S24' AND c1 = 'Eid4i*******11372012******haSUPCR_BSIC_PRF_*****_******00'; +DELETE FROM t WHERE c2 = '*****_BSIC_****_SELF_NTRED_YN_S1' AND c1 = 'Eid4i*******11372012******haSUPCR_BSIC_PRF_*****_******00'; +DELETE FROM t WHERE c2 = '*****_BSIC_****_ISS_DT_S8' AND c1 = 'Eid4i*******11372012******haSUPCR_BSIC_PRF_*****_******00'; +DELETE FROM t WHERE c2 = 'SUPCR_BSIC_PRF_GTH_MTCD_S2' AND c1 = 'Eid4i*******11372012******haSUPCR_BSIC_PRF_*****_******00'; +DELETE FROM t WHERE c2 = '*****_MDRLT_****_ISS_NO_S64' AND c1 = 'Eid4i*******11372012******haMRG_RLT_PRF_*****_******00'; +DELETE FROM t WHERE c2 = '*****_MDRLT_****_FLNM_S60' AND c1 = 'Eid4i*******11372012******haMRG_RLT_PRF_*****_******00'; +DELETE FROM t WHERE c2 = '*****_MDRLT_****_RSDTNO_S24' AND c1 = 'Eid4i*******11372012******haMRG_RLT_PRF_*****_******00'; +DELETE FROM t WHERE c2 = '*****_MDRLT_****_SPOS_RSDTNO_S24' AND c1 = 'Eid4i*******11372012******haMRG_RLT_PRF_*****_******00'; +DELETE FROM t WHERE c2 = '*****_MDRLT_****_YR5_WN_YN_S1' AND c1 = 'Eid4i*******11372012******haMRG_RLT_PRF_*****_******00'; +DELETE FROM t WHERE c2 = '*****_MDRLT_****_ISS_DT_S8' AND c1 = 'Eid4i*******11372012******haMRG_RLT_PRF_*****_******00'; +DELETE FROM t WHERE c2 = 'MRDT_PRF_GTH_MTCD_S2' AND c1 = 'Eid4i*******11372012******haMRG_RLT_PRF_*****_******00'; +DELETE FROM t WHERE c2 = '*****_BUSI_RGCR_ISS_NO_S64' AND c1 = 'Eid4i*******11372012******haBUSIgooN3aePRF_*****_******00'; +DELETE FROM t WHERE c2 = '*****_BUSI_RGCR_FRNM_S100' AND c1 = 'Eid4i*******11372012******haBUSIgooN3aePRF_*****_******00'; +DELETE FROM t WHERE c2 = '*****_BUSI_RGCR_BISNO_S24' AND c1 = 'Eid4i*******11372012******haBUSIgooN3aePRF_*****_******00'; +DELETE FROM t WHERE c2 = '*****_BUSI_RGCR_RPTV_S60' AND c1 = 'Eid4i*******11372012******haBUSIgooN3aePRF_*****_******00'; +DELETE FROM t WHERE c2 = '*****_BUSI_RGCR_RSDT_NO_S24' AND c1 = 'Eid4i*******11372012******haBUSIgooN3aePRF_*****_******00'; +DELETE FROM t WHERE c2 = '*****_BUSIgooN3aePRF_BZPL_LCTN_S100' AND c1 = 'Eid4i*******11372012******haBUSIgooN3aePRF_*****_******00'; +DELETE FROM t WHERE c2 = '*****_BZPL_ZPCD_S6' AND c1 = 'Eid4i*******11372012******haBUSIgooN3aePRF_*****_******00'; +DELETE FROM t WHERE c2 = '*****_BZPL_LCTN_ZADR_S200' AND c1 = 'Eid4i*******11372012******haBUSIgooN3aePRF_*****_******00'; +DELETE FROM t WHERE c2 = '*****_BZPL_LCTN_DTAD_S100' AND c1 = 'Eid4i*******11372012******haBUSIgooN3aePRF_*****_******00'; +DELETE FROM t WHERE c2 = '*****_BUSI_RGCR_NM_OPBS_DT_S8' AND c1 = 'Eid4i*******11372012******haBUSIgooN3aePRF_*****_******00'; +DELETE FROM t WHERE c2 = '*****_BUSI_RGCR_NMgooN3aeDT_S8' AND c1 = 'Eid4i*******11372012******haBUSIgooN3aePRF_*****_******00'; +DELETE FROM t WHERE c2 = '*****_BUSI_RGCR_NM_ISS_DT_S8' AND c1 = 'Eid4i*******11372012******haBUSIgooN3aePRF_*****_******00'; +DELETE FROM t WHERE c2 = 'BUSIgooN3aePRF_GTH_MTCD_S2' AND c1 = 'Eid4i*******11372012******haBUSIgooN3aePRF_*****_******00'; +DELETE FROM t WHERE c2 = '*****128890aaTPRF_ISS_NO_S64' AND c1 = 'Eid4i*******11372012******haINCM_AMT_PRF_*****_******00'; +DELETE FROM t WHERE c2 = '*****128890aaTPRF_FLNM_S60' AND c1 = 'Eid4i*******11372012******haINCM_AMT_PRF_*****_******00'; +DELETE FROM t WHERE c2 = '*****128890aaTPRF_RSDT_NO_S24' AND c1 = 'Eid4i*******11372012******haINCM_AMT_PRF_*****_******00'; +DELETE FROM t WHERE c2 = '*****128890aaTPRF_RVRS_YR_S4' AND c1 = 'Eid4i*******11372012******haINCM_AMT_PRF_*****_******00'; +DELETE FROM t WHERE c2 = '*****128890aaTPRF128890aaTN17' AND c1 = 'Eid4i*******11372012******haINCM_AMT_PRF_*****_******00'; +DELETE FROM t WHERE c2 = '*****128890aaTPRF_ISS_DT_S8' AND c1 = 'Eid4i*******11372012******haINCM_AMT_PRF_*****_******00'; +DELETE FROM t WHERE c2 = 'INCM_AMT_PRF_GTH_MTCD_S2' AND c1 = 'Eid4i*******11372012******haINCM_AMT_PRF_*****_******00'; +DELETE FROM t WHERE c2 = '*****_**********_CRCP_ISS_NO_S64' AND c1 = 'Eid4i*******11372012******ha**********_CRCP_*****_******00'; +DELETE FROM t WHERE c2 = '*****_**********_CRCP_FLNM_S60' AND c1 = 'Eid4i*******11372012******ha**********_CRCP_*****_******00'; +DELETE FROM t WHERE c2 = '*****_**********_CRCP_RSDT_NO_S24' AND c1 = 'Eid4i*******11372012******ha**********_CRCP_*****_******00'; +DELETE FROM t WHERE c2 = '*****_**********_CRCP_HHLD_RLT_S30' AND c1 = 'Eid4i*******11372012******ha**********_CRCP_*****_******00'; +DELETE FROM t WHERE c2 = '*****_**********_CRCP_CRSD_ADDR_S100' AND c1 = 'Eid4i*******11372012******ha**********_CRCP_*****_******00'; +DELETE FROM t WHERE c2 = '*****_CRSD_ZPCD_S6' AND c1 = 'Eid4i*******11372012******ha**********_CRCP_*****_******00'; +DELETE FROM t WHERE c2 = '*****_CRSD_ZADR_S200' AND c1 = 'Eid4i*******11372012******ha**********_CRCP_*****_******00'; +DELETE FROM t WHERE c2 = '*****_CRSD_DTAD_S100' AND c1 = 'Eid4i*******11372012******ha**********_CRCP_*****_******00'; +DELETE FROM t WHERE c2 = '*****_**********_CRCP_CRSD_MVIN_DT_S8' AND c1 = 'Eid4i*******11372012******ha**********_CRCP_*****_******00'; +DELETE FROM t WHERE c2 = '*****_**********_CRCP_MNRT_CHLD_CNT_N3' AND c1 = 'Eid4i*******11372012******ha**********_CRCP_*****_******00'; +DELETE FROM t WHERE c2 = '*****_**********_CRCP_HSPR_CNT_N3' AND c1 = 'Eid4i*******11372012******ha**********_CRCP_*****_******00'; +DELETE FROM t WHERE c2 = '*****_**********_CRCP_ISS_DT_S8' AND c1 = 'Eid4i*******11372012******ha**********_CRCP_*****_******00'; +DELETE FROM t WHERE c2 = '**********_CRCP_GTH_MTCD_S2' AND c1 = 'Eid4i*******11372012******ha**********_CRCP_*****_******00'; +DELETE FROM t WHERE c2 = '*****_DFRS_ISS_NO_S64' AND c1 = 'Eid4i*******11372012******haDFRS_*****_******00'; +DELETE FROM t WHERE c2 = '*****_DFRS_FLNM_S60' AND c1 = 'Eid4i*******11372012******haDFRS_*****_******00'; +DELETE FROM t WHERE c2 = '*****_DFRS_RSDT_NO_S24' AND c1 = 'Eid4i*******11372012******haDFRS_*****_******00'; +DELETE FROM t WHERE c2 = '*****_DFRS_LTLY_ADDR_S100' AND c1 = 'Eid4i*******11372012******haDFRS_*****_******00'; +DELETE FROM t WHERE c2 = '*****_LTLY_ZPCD_S6' AND c1 = 'Eid4i*******11372012******haDFRS_*****_******00'; +DELETE FROM t WHERE c2 = '*****_LTLY_ZADR_S200' AND c1 = 'Eid4i*******11372012******haDFRS_*****_******00'; +DELETE FROM t WHERE c2 = '*****_LTLY_DTAD_S100' AND c1 = 'Eid4i*******11372012******haDFRS_*****_******00'; +DELETE FROM t WHERE c2 = '*****_DFRS_LTLY_ADDR_MVIN_DT_S8' AND c1 = 'Eid4i*******11372012******haDFRS_*****_******00'; +DELETE FROM t WHERE c2 = '*****_DFRS_ISS_DT_S8' AND c1 = 'Eid4i*******11372012******haDFRS_*****_******00'; +DELETE FROM t WHERE c2 = 'DFRS_GTH_MTCD_S2' AND c1 = 'Eid4i*******11372012******haDFRS_*****_******00'; +DELETE FROM t WHERE c2 = '*****Ejae7ov****_ISS_NO_S64' AND c1 = 'Eid4i*******11372012******haPNSN_PRVS_roo2aaT_*****_******00'; +DELETE FROM t WHERE c2 = '*****Ejae7ov****_FLNM_S60' AND c1 = 'Eid4i*******11372012******haPNSN_PRVS_roo2aaT_*****_******00'; +DELETE FROM t WHERE c2 = '*****Ejae7ov****_RSDT_NO_S24' AND c1 = 'Eid4i*******11372012******haPNSN_PRVS_roo2aaT_*****_******00'; +DELETE FROM t WHERE c2 = '*****Ejae7ov****_PNSN_KIND_S60' AND c1 = 'Eid4i*******11372012******haPNSN_PRVS_roo2aaT_*****_******00'; +DELETE FROM t WHERE c2 = '*****Ejae7ov****_TOT_AMT_N17' AND c1 = 'Eid4i*******11372012******haPNSN_PRVS_roo2aaT_*****_******00'; +DELETE FROM t WHERE c2 = '*****Ejae7ov****_MM_AMT_N17' AND c1 = 'Eid4i*******11372012******haPNSN_PRVS_roo2aaT_*****_******00'; +DELETE FROM t WHERE c2 = '*****Ejae7ov****_01_PRVS_DT_S8' AND c1 = 'Eid4i*******11372012******haPNSN_PRVS_roo2aaT_*****_******00'; +DELETE FROM t WHERE c2 = '*****Ejae7ov****_01_iD1ohph_YM_S6' AND c1 = 'Eid4i*******11372012******haPNSN_PRVS_roo2aaT_*****_******00'; +DELETE FROM t WHERE c2 = '*****Ejae7ov****_01_iD1ohph_YM_AMT_N17' AND c1 = 'Eid4i*******11372012******haPNSN_PRVS_roo2aaT_*****_******00'; diff --git a/mysql-test/suite/innodb/r/bug91091.result b/mysql-test/suite/innodb/r/bug91091.result new file mode 100644 index 000000000000..394d02aea55f --- /dev/null +++ b/mysql-test/suite/innodb/r/bug91091.result @@ -0,0 +1,57 @@ +# +# Bug #91091 (https://bugs.mysql.com/bug.php?id=91091) +# Inconsistent SELECT...ORDER BY results with euckr charset / euckr_bin collation +# +SET @saved_innodb_file_format = @@global.innodb_file_format; +SET GLOBAL innodb_file_format = Barracuda; +SET NAMES euckr; +CREATE TABLE t ( +c1 VARCHAR(256) COLLATE euckr_bin NOT NULL, +c2 VARCHAR(256) COLLATE euckr_bin NOT NULL, +c3 INT(11) NOT NULL, +c4 VARCHAR(1000) COLLATE euckr_bin DEFAULT NULL, +c5 VARCHAR(1000) COLLATE euckr_bin NOT NULL, +c6 CHAR(1) COLLATE euckr_bin NOT NULL, +c7 INT(11) NOT NULL, +c8 INT(11) NOT NULL, +c9 VARCHAR(1000) COLLATE euckr_bin DEFAULT NULL, +c10 CHAR(1) COLLATE euckr_bin NOT NULL, +c11 VARCHAR(256) COLLATE euckr_bin DEFAULT NULL, +c12 CHAR(1) COLLATE euckr_bin NOT NULL, +c13 VARCHAR(256) COLLATE euckr_bin DEFAULT NULL, +c14 VARCHAR(256) COLLATE euckr_bin DEFAULT NULL, +PRIMARY KEY (c1, c2), +UNIQUE KEY igt_field_uni (c1, c3) +) ENGINE=InnoDB DEFAULT CHARSET=euckr COLLATE=euckr_bin ROW_FORMAT=DYNAMIC; +SET autocommit = 0; +SELECT c1 FROM t WHERE c1 = 'Eid4i*******11372012******haFEIouxia1Aroo2aaT_*****_******00' ORDER BY c1, c3; +c1 +Eid4i*******11372012******haFEIouxia1Aroo2aaT_*****_******00 +Eid4i*******11372012******haFEIouxia1Aroo2aaT_*****_******00 +Eid4i*******11372012******haFEIouxia1Aroo2aaT_*****_******00 +Eid4i*******11372012******haFEIouxia1Aroo2aaT_*****_******00 +Eid4i*******11372012******haFEIouxia1Aroo2aaT_*****_******00 +Eid4i*******11372012******haFEIouxia1Aroo2aaT_*****_******00 +SELECT c1 FROM t WHERE c1 = 'Eid4i*******11372012******O*****Sua9EiJ**************00' ORDER BY c1, c3; +c1 +Eid4i*******11372012******O*****Sua9EiJ**************00 +Eid4i*******11372012******O*****Sua9EiJ**************00 +Eid4i*******11372012******O*****Sua9EiJ**************00 +ROLLBACK; +SET autocommit = 0; +SELECT c1 FROM t FORCE KEY(igt_field_uni) WHERE c1 = 'Eid4i*******11372012******haFEIouxia1Aroo2aaT_*****_******00' ORDER BY c1, c3; +c1 +Eid4i*******11372012******haFEIouxia1Aroo2aaT_*****_******00 +Eid4i*******11372012******haFEIouxia1Aroo2aaT_*****_******00 +Eid4i*******11372012******haFEIouxia1Aroo2aaT_*****_******00 +Eid4i*******11372012******haFEIouxia1Aroo2aaT_*****_******00 +Eid4i*******11372012******haFEIouxia1Aroo2aaT_*****_******00 +Eid4i*******11372012******haFEIouxia1Aroo2aaT_*****_******00 +SELECT c1 FROM t FORCE KEY(igt_field_uni) WHERE c1 = 'Eid4i*******11372012******O*****Sua9EiJ**************00' ORDER BY c1, c3; +c1 +Eid4i*******11372012******O*****Sua9EiJ**************00 +Eid4i*******11372012******O*****Sua9EiJ**************00 +Eid4i*******11372012******O*****Sua9EiJ**************00 +ROLLBACK; +DROP TABLE t; +SET GLOBAL innodb_file_format = @saved_innodb_file_format; diff --git a/mysql-test/suite/innodb/t/bug91091.test b/mysql-test/suite/innodb/t/bug91091.test new file mode 100644 index 000000000000..37e20d0e8207 --- /dev/null +++ b/mysql-test/suite/innodb/t/bug91091.test @@ -0,0 +1,303 @@ +--source include/have_innodb.inc +--source include/have_euckr.inc + +--echo # +--echo # Bug #91091 (https://bugs.mysql.com/bug.php?id=91091) +--echo # Inconsistent SELECT...ORDER BY results with euckr charset / euckr_bin collation +--echo # + +SET @saved_innodb_file_format = @@global.innodb_file_format; +SET GLOBAL innodb_file_format = Barracuda; + +SET NAMES euckr; + +CREATE TABLE t ( + c1 VARCHAR(256) COLLATE euckr_bin NOT NULL, + c2 VARCHAR(256) COLLATE euckr_bin NOT NULL, + c3 INT(11) NOT NULL, + c4 VARCHAR(1000) COLLATE euckr_bin DEFAULT NULL, + c5 VARCHAR(1000) COLLATE euckr_bin NOT NULL, + c6 CHAR(1) COLLATE euckr_bin NOT NULL, + c7 INT(11) NOT NULL, + c8 INT(11) NOT NULL, + c9 VARCHAR(1000) COLLATE euckr_bin DEFAULT NULL, + c10 CHAR(1) COLLATE euckr_bin NOT NULL, + c11 VARCHAR(256) COLLATE euckr_bin DEFAULT NULL, + c12 CHAR(1) COLLATE euckr_bin NOT NULL, + c13 VARCHAR(256) COLLATE euckr_bin DEFAULT NULL, + c14 VARCHAR(256) COLLATE euckr_bin DEFAULT NULL, + PRIMARY KEY (c1, c2), + UNIQUE KEY igt_field_uni (c1, c3) +) ENGINE=InnoDB DEFAULT CHARSET=euckr COLLATE=euckr_bin ROW_FORMAT=DYNAMIC; + +--disable_query_log +INSERT INTO t VALUES + ('Eid4i*******11372012******O', 'BUSIgooN3aePRF_*****_******00', 136, '****', '*****************************************************', '*', 0, 0, NULL, '*', NULL, '*', NULL, '*****************************************************'), + ('Eid4i*******11372012******O', 'CMCM_*****_******00', 108, '****', '*********************************************', '*', 0, 0, NULL, '*', NULL, '*', NULL, '*********************************************'), + ('Eid4i*******11372012******O', 'DFRS_*****_******00', 172, '****', '*********************************************', '*', 0, 0, NULL, '*', NULL, '*', NULL, '*********************************************'), + ('Eid4i*******11372012******O', 'FEIouxia1Aroo2aaT_*****_******00', 232, '****', '*******************************************************', '*', 0, 0, NULL, '*', NULL, '*', NULL, '*******************************************************'), + ('Eid4i*******11372012******O', 'FMLY_RLT_PRF_*****_******00', 112, '****', '*****************************************************', '*', 0, 0, NULL, '*', NULL, '*', NULL, '*****************************************************'), + ('Eid4i*******11372012******O', 'FNNS_*****_******00', 101, '****', '*********************************************', '*', 0, 0, NULL, '*', NULL, '*', NULL, '*********************************************'), + ('Eid4i*******11372012******O', '******01_128890aaT2N5', 239, '****', '*****************', '*', 5, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******O', 'HLIN_PBCR_*****_******00', 19, '****', '**************************************************', '*', 0, 0, NULL, '*', NULL, '*', NULL, '**************************************************'), + ('Eid4i*******11372012******O', 'equ4aiH_*****_******00', 93, '****', '************************************************', '*', 0, 0, NULL, '*', NULL, '*', NULL, '************************************************'), + ('Eid4i*******11372012******O', 'IMG_Sua9EiJ**************00', 240, '****', '******************************************************', '*', 0, 0, NULL, '*', '******************', '*', NULL, '******************************************************'), + ('Eid4i*******11372012******O', 'INCM_AMT_PRF_*****_******00', 150, '****', '*****************************************************', '*', 0, 0, NULL, '*', NULL, '*', NULL, '*****************************************************'), + ('Eid4i*******11372012******O', 'MRG_RLT_PRF_*****_******00', 128, '****', '****************************************************', '*', 0, 0, NULL, '*', NULL, '*', NULL, '****************************************************'), + ('Eid4i*******11372012******O', 'PNSN_PRVS_roo2aaT_*****_******00', 183, '****', '*******************************************************', '*', 0, 0, NULL, '*', NULL, '*', NULL, '*******************************************************'), + ('Eid4i*******11372012******O', '**********_CRCP_*****_******00', 158, '****', '******************************************************', '*', 0, 0, NULL, '*', NULL, '*', NULL, '******************************************************'), + ('Eid4i*******11372012******O', '*****_BSIC_******00', 1, '****', '*********************************************', '*', 0, 0, NULL, '*', NULL, '*', NULL, '*********************************************'), + ('Eid4i*******11372012******O', 'SUPCR_BSIC_PRF_*****_******00', 121, '****', '*******************************************************', '*', 0, 0, NULL, '*', NULL, '*', NULL, '*******************************************************'), + ('Eid4i*******11372012******haBUSIgooN3aePRF_*****_******00', 'BUSIgooN3aePRF_GTH_MTCD_S2', 149, '****', '*****************************', '*', 2, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haBUSIgooN3aePRF_*****_******00', '*****_BUSIgooN3aePRF_BZPL_LCTN_S100', 142, '****', '***************************************', '*', 100, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haBUSIgooN3aePRF_*****_******00', '*****_BUSI_RGCR_BISNO_S24', 139, '****', '****************************************', '*', 24, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haBUSIgooN3aePRF_*****_******00', '*****_BUSI_RGCR_FRNM_S100', 138, '****', '*********************************', '*', 100, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haBUSIgooN3aePRF_*****_******00', '*****_BUSI_RGCR_ISS_NO_S64', 137, '****', '**********************************', '*', 64, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haBUSIgooN3aePRF_*****_******00', '*****_BUSI_RGCR_NM_ISS_DT_S8', 148, '****', '*********************************', '*', 8, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haBUSIgooN3aePRF_*****_******00', '*****_BUSI_RGCR_NM_OPBS_DT_S8', 146, '****', '*********************************', '*', 8, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haBUSIgooN3aePRF_*****_******00', '*****_BUSI_RGCR_NMgooN3aeDT_S8', 147, '****', '*********************************', '*', 8, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haBUSIgooN3aePRF_*****_******00', '*****_BUSI_RGCR_RPTV_S60', 140, '****', '********************************', '*', 60, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haBUSIgooN3aePRF_*****_******00', '*****_BUSI_RGCR_RSDT_NO_S24', 141, '****', '**************************************', '*', 24, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haBUSIgooN3aePRF_*****_******00', '*****_BZPL_LCTN_DTAD_S100', 145, '****', '*******************************', '*', 100, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haBUSIgooN3aePRF_*****_******00', '*****_BZPL_LCTN_ZADR_S200', 144, '****', '*******************************', '*', 200, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haBUSIgooN3aePRF_*****_******00', '*****_BZPL_ZPCD_S6', 143, '****', '***********************', '*', 6, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haCMCM_*****_******00', 'CMCM_GTH_MTCD_S2', 111, '****', '*********************', '*', 2, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haCMCM_*****_******00', '*****_CMCM_NROM_PAYM_MCNT_N5', 109, '****', '*****************************', '*', 5, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haCMCM_*****_******00', '*****_CMCM_USE_FARE_N17', 110, '****', '************************', '*', 17, 2, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haDFRS_*****_******00', 'DFRS_GTH_MTCD_S2', 182, '****', '***************************', '*', 2, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haDFRS_*****_******00', '*****_DFRS_FLNM_S60', 174, '****', '**************************', '*', 60, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haDFRS_*****_******00', '*****_DFRS_ISS_DT_S8', 181, '****', '*****************************', '*', 8, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haDFRS_*****_******00', '*****_DFRS_ISS_NO_S64', 173, '****', '******************************', '*', 64, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haDFRS_*****_******00', '*****_DFRS_LTLY_ADDR_MVIN_DT_S8', 180, '****', '*************************************', '*', 8, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haDFRS_*****_******00', '*****_DFRS_LTLY_ADDR_S100', 176, '****', '*******************************', '*', 100, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haDFRS_*****_******00', '*****_DFRS_RSDT_NO_S24', 175, '****', '**********************************', '*', 24, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haDFRS_*****_******00', '*****_LTLY_DTAD_S100', 179, '****', '***********************', '*', 100, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haDFRS_*****_******00', '*****_LTLY_ZADR_S200', 178, '****', '***********************', '*', 200, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haDFRS_*****_******00', '*****_LTLY_ZPCD_S6', 177, '****', '*********************', '*', 6, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haFEIouxia1Aroo2aaT_*****_******00', 'FEIouxia1Aroo2aaT_GTH_MTCD_S2', 238, '****', '******************************', '*', 2, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haFEIouxia1Aroo2aaT_*****_******00', '*****_FEIouxia1A****_3EAouxia1AYN_S1', 236, '****', '*****************************************', '*', 1, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haFEIouxia1Aroo2aaT_*****_******00', '*****_FEIouxia1A****_FLNM_S60', 234, '****', '*******************************', '*', 60, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haFEIouxia1Aroo2aaT_*****_******00', '*****_FEIouxia1A****_ISS_DT_S8', 237, '****', '**********************************', '*', 8, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haFEIouxia1Aroo2aaT_*****_******00', '*****_FEIouxia1A****_ISS_NO_S64', 233, '****', '***********************************', '*', 64, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haFEIouxia1Aroo2aaT_*****_******00', '*****_FEIouxia1A****_RSDT_NO_S24', 235, '****', '***************************************', '*', 24, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haFMLY_RLT_PRF_*****_******00', 'FMLY_RLT_PRF_GTH_MTCD_S2', 120, '****', '***************************', '*', 2, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haFMLY_RLT_PRF_*****_******00', '*****_FMLY_RLT_****_FLNM_S60', 114, '****', '****************************', '*', 60, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haFMLY_RLT_PRF_*****_******00', '*****_FMLY_RLT_****_ISS_DT_S8', 119, '****', '*******************************', '*', 8, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haFMLY_RLT_PRF_*****_******00', '*****_FMLY_RLT_****_ISS_NO_S64', 113, '****', '********************************', '*', 64, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haFMLY_RLT_PRF_*****_******00', '*****_FMLY_RLT_****_MRGE_YN_S1', 116, '****', '*******************************', '*', 1, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haFMLY_RLT_PRF_*****_******00', '*****_FMLY_RLT_****_RSDT_NO_S24', 115, '****', '************************************', '*', 24, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haFMLY_RLT_PRF_*****_******00', '*****_FMLY_RLT_****_SPOS_NTIV_YN_S1', 118, '****', '***************************************', '*', 1, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haFMLY_RLT_PRF_*****_******00', '*****_FMLY_RLT_****_SPOS_RSDT_NO_S24', 117, '****', '******************************************', '*', 24, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haFNNS_*****_******00', 'FNNS_GTH_MTCD_S2', 107, '****', '***********************', '*', 2, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haFNNS_*****_******00', '*****_DEP_ACCO_TOT_AMT_N17', 106, '****', '************************', '*', 17, 2, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haFNNS_*****_******00', '*****_FRDM_INDP_MN6_PAYAM_N17', 105, '****', '*****************************', '*', 17, 2, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haFNNS_*****_******00', '*****_FRDM_INDP_TRSF_roo2aaT_MCNT_N5', 104, '****', '*******************************', '*', 5, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haFNNS_*****_******00', '*****_RIID_MN6_PAYAM_N17', 103, '****', '*****************************', '*', 17, 2, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haFNNS_*****_******00', '*****_RIID_TRSF_roo2aaT_MCNT_N5', 102, '****', '*******************************', '*', 5, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', 'CUR_WRST_FRFT_YN_S1', 44, '****', '*******************', '*', 1, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', 'ENCM_BIZ_OPNG_DT_S8', 42, '****', '*******************', '*', 8, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', 'HLIN_PBCR_GTH_MTCD_S2', 92, '****', '***************************', '*', 2, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', 'OCUP_CD', 39, '****', '********', '*', 7, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****_ANIN_AMT_N17', 21, '****', '**********************', '*', 17, 2, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****_ANUL_HLTH_INPM_PAYM_TOT_AMT_N17', 35, '****', '**********************************', '*', 17, 2, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****12889aaTHLIN_ACQS_DT_S8', 23, '****', '*******************************', '*', 8, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****12889aaTHLIN_FRFT_DT_S8', 24, '****', '*******************************', '*', 8, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****12889aaTNM_S60', 25, '****', '******************', '*', 60, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****12889aaTPRGP_PSSG_r2aaT_N5', 27, '****', '***********************', '*', 5, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****12889aaTTNOF_r2aaT_N5', 26, '****', '***********************', '*', 5, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****12889aaTXN_S1', 22, '****', '*******************', '*', 1, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****ieBoo3i01Ahzei9u17', 63, '****', '******************************', '*', 17, 2, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****ieBoo3i02Ahzei9u17', 64, '****', '******************************', '*', 17, 2, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****ieBoo3i03Ahzei9u17', 65, '****', '******************************', '*', 17, 2, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****ieBoo3i04Ahzei9u17', 66, '****', '******************************', '*', 17, 2, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****ieBoo3i05Ahzei9u17', 67, '****', '******************************', '*', 17, 2, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****ieBoo3i06Ahzei9u17', 68, '****', '******************************', '*', 17, 2, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****ieBoo3i07Ahzei9u17', 69, '****', '******************************', '*', 17, 2, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****ieBoo3i08Ahzei9u17', 70, '****', '******************************', '*', 17, 2, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****ieBoo3i09Ahzei9u17', 71, '****', '******************************', '*', 17, 2, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****ieBoo3i10Ahzei9u17', 72, '****', '******************************', '*', 17, 2, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****ieBoo3i11Ahzei9u17', 73, '****', '******************************', '*', 17, 2, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****ieBoo3i12Ahzei9u17', 74, '****', '******************************', '*', 17, 2, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****r2889aaTBUSI_NO_S10', 30, '****', '****************************', '*', 10, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****r2889aaTHLIN_ACQS_DT_S8', 28, '****', '*********************************', '*', 8, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****r2889aaTHLIN_FRFT_DT_S8', 29, '****', '*********************************', '*', 8, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****r2889aaTNM_S60', 31, '****', '********************', '*', 60, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****r2889aaTTNOF_r2aaT_N5', 32, '****', '*************************', '*', 5, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****eWioc1GieBoo3iBZPL_NM_S60', 60, '****', '********************************************', '*', 60, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****eWioc1GieBoo3iISS_DT_S8', 58, '****', '*******************************************', '*', 8, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****eWioc1GieBoo3iISS_NO_S64', 59, '****', '********************************************', '*', 64, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****eWioc1GieBoo3iPAYR_NO_S64', 61, '****', '**********************************************', '*', 64, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****eWioc1GieBoo3iS4', 62, '****', '***********************************', '*', 4, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****eWioc1G_RBYR_BZPL_NM_S60', 77, '****', '********************************************', '*', 60, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****eWioc1G_RBYR_ISS_DT_S8', 75, '****', '*******************************************', '*', 8, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****eWioc1G_RBYR_ISS_NO_S64', 76, '****', '********************************************', '*', 64, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****eWioc1G_RBYR_PAYR_NO_S64', 78, '****', '**********************************************', '*', 64, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****eWioc1G_RBYR_S4', 79, '****', '***********************************', '*', 4, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****128890aaTDIV_S1', 20, '****', '*********************', '*', 1, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****_INCM_YR_HLIN_RAT_N9', 37, '****', '*****************************', '*', 9, 4, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****_INPM_NPAM_YN_S1', 38, '****', '***********************', '*', 1, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****_MN3_AVG_PAY_MM_AMT_N17', 36, '****', '*****************************', '*', 17, 2, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****_QLFC_CFNT_ACQS_DT_S8', 51, '****', '*******************************', '*', 8, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****_QLFC_CFNT_BZPL_NM_S60', 50, '****', '********************************', '*', 60, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****_QLFC_CFNT_FLNM_S60', 47, '****', '****************************', '*', 60, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****_QLFC_CFNT_FRFT_DT_S8', 52, '****', '*******************************', '*', 8, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****_QLFC_CFNT_ISS_DT_S8', 57, '****', '*******************************', '*', 8, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****_QLFC_CFNT_ISS_NO_S64', 46, '****', '********************************', '*', 64, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****_QLFC_CFNT_RBF_ACQS_DT_S8', 55, '****', '***********************************', '*', 8, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****_QLFC_CFNT_RBF_BZPL_NM_S60', 54, '****', '************************************', '*', 60, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****_QLFC_CFNT_RBF_FRFT_DT_S8', 56, '****', '***********************************', '*', 8, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****_QLFC_CFNT_RBF_SBSR_DIV_S20', 53, '****', '**************************************', '*', 20, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****_QLFC_CFNT_RSDT_NO_S24', 48, '****', '************************************', '*', 24, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****_QLFC_CFNT_SBSR_DIV_S20', 49, '****', '**********************************', '*', 20, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****_RBYR_01Ahzei9u17', 80, '****', '******************************', '*', 17, 2, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****_RBYR_02Ahzei9u17', 81, '****', '******************************', '*', 17, 2, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****_RBYR_03Ahzei9u17', 82, '****', '******************************', '*', 17, 2, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****_RBYR_04Ahzei9u17', 83, '****', '******************************', '*', 17, 2, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****_RBYR_05Ahzei9u17', 84, '****', '******************************', '*', 17, 2, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****_RBYR_06Ahzei9u17', 85, '****', '******************************', '*', 17, 2, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****_RBYR_07Ahzei9u17', 86, '****', '******************************', '*', 17, 2, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****_RBYR_08Ahzei9u17', 87, '****', '******************************', '*', 17, 2, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****_RBYR_09Ahzei9u17', 88, '****', '******************************', '*', 17, 2, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****_RBYR_10Ahzei9u17', 89, '****', '******************************', '*', 17, 2, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****_RBYR_11Ahzei9u17', 90, '****', '******************************', '*', 17, 2, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****_RBYR_12Ahzei9u17', 91, '****', '******************************', '*', 17, 2, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****_SGI_ANIN_AMT_N17', 34, '****', '**********************************', '*', 17, 2, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****_SGI_CUR_TNOF_TRM_N5', 33, '****', '*********************************', '*', 5, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', '*****_SUSPBZ_CLBS_DIV_S1', 41, '****', '*********************', '*', 1, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', 'SINDS_CD', 40, '****', '****************', '*', 6, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', 'TNOF_INFO_BASE_DENL_TRGT_YN_S1', 45, '****', '***************************', '*', 1, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haHLIN_PBCR_*****_******00', 'WRST_BZPL_TLNO_S14', 43, '****', '**********************', '*', 14, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haequ4aiH_*****_******00', 'equ4aiH_GTH_MTCD_S2', 100, '****', '*********************', '*', 2, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haequ4aiH_*****_******00', '*****_30_TTW_EXCS_DONT_EXIS_YN_S1', 98, '****', '*********************************', '*', 1, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haequ4aiH_*****_******00', '*****_CHCR_CSVC2889aaTAMT_N17', 97, '****', '************************************', '*', 17, 2, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haequ4aiH_*****_******00', '*****_CHCR_CSVC2889aaTAMT_RATE_N9', 96, '****', '***************************************', '*', 9, 4, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haequ4aiH_*****_******00', '*****_CHCR2889aaTAMT_N17', 95, '****', '**************************', '*', 17, 2, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haequ4aiH_*****_******00', '*****_CHCR2889aaTAMT_RATE_N9', 94, '****', '*****************************', '*', 9, 4, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haequ4aiH_*****_******00', '*****_IDVD_PNSN_HOLD_YN_S1', 99, '****', '*************************', '*', 1, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******O*****Sua9EiJ**************00', 'ESN_YN', 243, '****', '********', '*', 1, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******O*****Sua9EiJ**************00', 'IMG_DOC_NO', 242, '****', '**************', '*', 16, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******O*****Sua9EiJ**************00', 'IMG_Sua9EiJ', 241, '****', '**************', '*', 11, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haINCM_AMT_PRF_*****_******00', 'INCM_AMT_PRF_GTH_MTCD_S2', 157, '****', '***************************', '*', 2, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haINCM_AMT_PRF_*****_******00', '*****128890aaTPRF_FLNM_S60', 152, '****', '****************************', '*', 60, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haINCM_AMT_PRF_*****_******00', '*****128890aaTPRF128890aaTN17', 155, '****', '********************************', '*', 17, 2, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haINCM_AMT_PRF_*****_******00', '*****128890aaTPRF_ISS_DT_S8', 156, '****', '*******************************', '*', 8, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haINCM_AMT_PRF_*****_******00', '*****128890aaTPRF_ISS_NO_S64', 151, '****', '********************************', '*', 64, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haINCM_AMT_PRF_*****_******00', '*****128890aaTPRF_RSDT_NO_S24', 153, '****', '************************************', '*', 24, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haINCM_AMT_PRF_*****_******00', '*****128890aaTPRF_RVRS_YR_S4', 154, '****', '*******************************', '*', 4, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haMRG_RLT_PRF_*****_******00', 'MRDT_PRF_GTH_MTCD_S2', 135, '****', '***************************', '*', 2, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haMRG_RLT_PRF_*****_******00', '*****_MDRLT_****_FLNM_S60', 130, '****', '****************************', '*', 60, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haMRG_RLT_PRF_*****_******00', '*****_MDRLT_****_ISS_DT_S8', 134, '****', '*******************************', '*', 8, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haMRG_RLT_PRF_*****_******00', '*****_MDRLT_****_ISS_NO_S64', 129, '****', '********************************', '*', 64, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haMRG_RLT_PRF_*****_******00', '*****_MDRLT_****_RSDTNO_S24', 131, '****', '************************************', '*', 24, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haMRG_RLT_PRF_*****_******00', '*****_MDRLT_****_SPOS_RSDTNO_S24', 132, '****', '******************************************', '*', 24, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haMRG_RLT_PRF_*****_******00', '*****_MDRLT_****_YR5_WN_YN_S1', 133, '****', '****************************************', '*', 1, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haPNSN_PRVS_roo2aaT_*****_******00', 'NTNS_PRVS_roo2aaT_GTH_MTCD_S2', 231, '****', '*******************************', '*', 2, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haPNSN_PRVS_roo2aaT_*****_******00', '*****Ejae7ov****_01_PRVS_DT_S8', 190, '****', '*************************************', '*', 8, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haPNSN_PRVS_roo2aaT_*****_******00', '*****Ejae7ov****_01_iD1ohph_YM_AMT_N17', 192, '****', '**************************************', '*', 17, 2, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haPNSN_PRVS_roo2aaT_*****_******00', '*****Ejae7ov****_01_iD1ohph_YM_S6', 191, '****', '*************************************', '*', 6, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haPNSN_PRVS_roo2aaT_*****_******00', '*****Ejae7ov****_01_iD1ohph_YR_AMT_N17', 227, '****', '******************************************', '*', 17, 2, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haPNSN_PRVS_roo2aaT_*****_******00', '*****Ejae7ov****_01_iD1ohph_YR_S4', 226, '****', '*********************************************', '*', 4, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haPNSN_PRVS_roo2aaT_*****_******00', '*****Ejae7ov****_02_PRVS_DT_S8', 193, '****', '*************************************', '*', 8, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haPNSN_PRVS_roo2aaT_*****_******00', '*****Ejae7ov****_02_iD1ohph_YM_AMT_N17', 195, '****', '**************************************', '*', 17, 2, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haPNSN_PRVS_roo2aaT_*****_******00', '*****Ejae7ov****_02_iD1ohph_YM_S6', 194, '****', '*************************************', '*', 6, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haPNSN_PRVS_roo2aaT_*****_******00', '*****Ejae7ov****_02_iD1ohph_YR_AMT_N17', 229, '****', '******************************************', '*', 17, 2, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haPNSN_PRVS_roo2aaT_*****_******00', '*****Ejae7ov****_02_iD1ohph_YR_S4', 228, '****', '*********************************************', '*', 4, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haPNSN_PRVS_roo2aaT_*****_******00', '*****Ejae7ov****_03_PRVS_DT_S8', 196, '****', '*************************************', '*', 8, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haPNSN_PRVS_roo2aaT_*****_******00', '*****Ejae7ov****_03_iD1ohph_YM_AMT_N17', 198, '****', '**************************************', '*', 17, 2, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haPNSN_PRVS_roo2aaT_*****_******00', '*****Ejae7ov****_03_iD1ohph_YM_S6', 197, '****', '*************************************', '*', 6, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haPNSN_PRVS_roo2aaT_*****_******00', '*****Ejae7ov****_04_PRVS_DT_S8', 199, '****', '*************************************', '*', 8, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haPNSN_PRVS_roo2aaT_*****_******00', '*****Ejae7ov****_04_iD1ohph_YM_AMT_N17', 201, '****', '**************************************', '*', 17, 2, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haPNSN_PRVS_roo2aaT_*****_******00', '*****Ejae7ov****_04_iD1ohph_YM_S6', 200, '****', '*************************************', '*', 6, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haPNSN_PRVS_roo2aaT_*****_******00', '*****Ejae7ov****_05_PRVS_DT_S8', 202, '****', '*************************************', '*', 8, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haPNSN_PRVS_roo2aaT_*****_******00', '*****Ejae7ov****_05_iD1ohph_YM_AMT_N17', 204, '****', '**************************************', '*', 17, 2, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haPNSN_PRVS_roo2aaT_*****_******00', '*****Ejae7ov****_05_iD1ohph_YM_S6', 203, '****', '*************************************', '*', 6, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haPNSN_PRVS_roo2aaT_*****_******00', '*****Ejae7ov****_06_PRVS_DT_S8', 205, '****', '*************************************', '*', 8, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haPNSN_PRVS_roo2aaT_*****_******00', '*****Ejae7ov****_06_iD1ohph_YM_AMT_N17', 207, '****', '**************************************', '*', 17, 2, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haPNSN_PRVS_roo2aaT_*****_******00', '*****Ejae7ov****_06_iD1ohph_YM_S6', 206, '****', '*************************************', '*', 6, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haPNSN_PRVS_roo2aaT_*****_******00', '*****Ejae7ov****_07_PRVS_DT_S8', 208, '****', '*************************************', '*', 8, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haPNSN_PRVS_roo2aaT_*****_******00', '*****Ejae7ov****_07_iD1ohph_YM_AMT_N17', 210, '****', '**************************************', '*', 17, 2, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haPNSN_PRVS_roo2aaT_*****_******00', '*****Ejae7ov****_07_iD1ohph_YM_S6', 209, '****', '*************************************', '*', 6, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haPNSN_PRVS_roo2aaT_*****_******00', '*****Ejae7ov****_08_PRVS_DT_S8', 211, '****', '*************************************', '*', 8, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haPNSN_PRVS_roo2aaT_*****_******00', '*****Ejae7ov****_08_iD1ohph_YM_AMT_N17', 213, '****', '**************************************', '*', 17, 2, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haPNSN_PRVS_roo2aaT_*****_******00', '*****Ejae7ov****_08_iD1ohph_YM_S6', 212, '****', '*************************************', '*', 6, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haPNSN_PRVS_roo2aaT_*****_******00', '*****Ejae7ov****_09_PRVS_DT_S8', 214, '****', '*************************************', '*', 8, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haPNSN_PRVS_roo2aaT_*****_******00', '*****Ejae7ov****_09_iD1ohph_YM_AMT_N17', 216, '****', '**************************************', '*', 17, 2, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haPNSN_PRVS_roo2aaT_*****_******00', '*****Ejae7ov****_09_iD1ohph_YM_S6', 215, '****', '*************************************', '*', 6, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haPNSN_PRVS_roo2aaT_*****_******00', '*****Ejae7ov****_10_PRVS_DT_S8', 217, '****', '*************************************', '*', 8, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haPNSN_PRVS_roo2aaT_*****_******00', '*****Ejae7ov****_10_iD1ohph_YM_AMT_N17', 219, '****', '**************************************', '*', 17, 2, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haPNSN_PRVS_roo2aaT_*****_******00', '*****Ejae7ov****_10_iD1ohph_YM_S6', 218, '****', '*************************************', '*', 6, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haPNSN_PRVS_roo2aaT_*****_******00', '*****Ejae7ov****_11_PRVS_DT_S8', 220, '****', '*************************************', '*', 8, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haPNSN_PRVS_roo2aaT_*****_******00', '*****Ejae7ov****_11_iD1ohph_YM_AMT_N17', 222, '****', '**************************************', '*', 17, 2, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haPNSN_PRVS_roo2aaT_*****_******00', '*****Ejae7ov****_11_iD1ohph_YM_S6', 221, '****', '*************************************', '*', 6, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haPNSN_PRVS_roo2aaT_*****_******00', '*****Ejae7ov****_12_PRVS_DT_S8', 223, '****', '*************************************', '*', 8, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haPNSN_PRVS_roo2aaT_*****_******00', '*****Ejae7ov****_12_iD1ohph_YM_AMT_N17', 225, '****', '**************************************', '*', 17, 2, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haPNSN_PRVS_roo2aaT_*****_******00', '*****Ejae7ov****_12_iD1ohph_YM_S6', 224, '****', '*************************************', '*', 6, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haPNSN_PRVS_roo2aaT_*****_******00', '*****Ejae7ov****_FLNM_S60', 185, '****', '********************************', '*', 60, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haPNSN_PRVS_roo2aaT_*****_******00', '*****Ejae7ov****_ISS_DT_S8', 230, '****', '***********************************', '*', 8, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haPNSN_PRVS_roo2aaT_*****_******00', '*****Ejae7ov****_ISS_NO_S64', 184, '****', '************************************', '*', 64, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haPNSN_PRVS_roo2aaT_*****_******00', '*****Ejae7ov****_MM_AMT_N17', 189, '****', '**************************************', '*', 17, 2, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haPNSN_PRVS_roo2aaT_*****_******00', '*****Ejae7ov****_PNSN_KIND_S60', 187, '****', '************************************', '*', 60, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haPNSN_PRVS_roo2aaT_*****_******00', '*****Ejae7ov****_RSDT_NO_S24', 186, '****', '****************************************', '*', 24, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haPNSN_PRVS_roo2aaT_*****_******00', '*****Ejae7ov****_TOT_AMT_N17', 188, '****', '**************************************', '*', 17, 2, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******ha**********_CRCP_*****_******00', '**********_CRCP_GTH_MTCD_S2', 171, '****', '***************************', '*', 2, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******ha**********_CRCP_*****_******00', '*****_CRSD_DTAD_S100', 166, '****', '***************************', '*', 100, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******ha**********_CRCP_*****_******00', '*****_CRSD_ZADR_S200', 165, '****', '***************************', '*', 200, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******ha**********_CRCP_*****_******00', '*****_CRSD_ZPCD_S6', 164, '****', '*************************', '*', 6, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******ha**********_CRCP_*****_******00', '*****_**********_CRCP_CRSD_ADDR_S100', 163, '****', '***********************************', '*', 100, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******ha**********_CRCP_*****_******00', '*****_**********_CRCP_CRSD_MVIN_DT_S8', 167, '****', '*************************************', '*', 8, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******ha**********_CRCP_*****_******00', '*****_**********_CRCP_FLNM_S60', 160, '****', '**************************', '*', 60, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******ha**********_CRCP_*****_******00', '*****_**********_CRCP_HHLD_RLT_S30', 162, '****', '********************************', '*', 30, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******ha**********_CRCP_*****_******00', '*****_**********_CRCP_HSPR_CNT_N3', 169, '****', '*****************************', '*', 3, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******ha**********_CRCP_*****_******00', '*****_**********_CRCP_ISS_DT_S8', 170, '****', '*****************************', '*', 8, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******ha**********_CRCP_*****_******00', '*****_**********_CRCP_ISS_NO_S64', 159, '****', '******************************', '*', 64, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******ha**********_CRCP_*****_******00', '*****_**********_CRCP_MNRT_CHLD_CNT_N3', 168, '****', '***********************************', '*', 3, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******ha**********_CRCP_*****_******00', '*****_**********_CRCP_RSDT_NO_S24', 161, '****', '**********************************', '*', 24, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******ha*****_BSIC_******00', 'BUSIgooN3aePRF_EVDN_YN_S1', 13, '****', '*************************', '*', 1, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******ha*****_BSIC_******00', 'CHNL_LNBZ_MENU_DVCD', 4, '****', '********************', '*', 5, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******ha*****_BSIC_******00', 'CMCM_EVDN_YN_S1', 9, '****', '*****************', '*', 1, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******ha*****_BSIC_******00', 'CSTNO', 5, '****', '********', '*', 16, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******ha*****_BSIC_******00', 'DFRS_EVDN_YN_S1', 16, '****', '***********************', '*', 1, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******ha*****_BSIC_******00', 'EXTNL_INFO_GTH_MTCD', 2, '****', '********************', '*', 2, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******ha*****_BSIC_******00', 'FEIouxia1Aroo2aaT_EVDN_YN_S1', 18, '****', '**************************', '*', 1, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******ha*****_BSIC_******00', 'FMLY_RLT_PRF_EVDN_YN_S1', 10, '****', '***********************', '*', 1, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******ha*****_BSIC_******00', 'FNNS_EVDN_YN_S1', 8, '****', '*******************', '*', 1, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******ha*****_BSIC_******00', 'HLIN_PBCR_EVDN_YN_S1', 6, '****', '***********************', '*', 1, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******ha*****_BSIC_******00', 'equ4aiH_EVDN_YN_S1', 7, '****', '*****************', '*', 1, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******ha*****_BSIC_******00', 'INCM_AMT_PRF_EVDN_YN_S1', 14, '****', '***********************', '*', 1, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******ha*****_BSIC_******00', 'LNBZ_MGMT_NO', 3, '****', '************', '*', 16, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******ha*****_BSIC_******00', 'MRDT_PRF_EVDN_YN_S1', 12, '****', '***********************', '*', 1, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******ha*****_BSIC_******00', 'NTNS_PRVS_roo2aaT_EVDN_YN_S1', 17, '****', '***************************', '*', 1, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******ha*****_BSIC_******00', '**********_CRCP_EVDN_YN_S1', 15, '****', '***********************', '*', 1, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******ha*****_BSIC_******00', 'SUPCR_BSIC_PRF_EVDN_YN_S1', 11, '****', '*************************', '*', 1, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haSUPCR_BSIC_PRF_*****_******00', '*****_BSIC_****_FLNM_S60', 123, '****', '************************', '*', 60, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haSUPCR_BSIC_PRF_*****_******00', '*****_BSIC_****_ISS_DT_S8', 126, '****', '***************************', '*', 8, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haSUPCR_BSIC_PRF_*****_******00', '*****_BSIC_****_ISS_NO_S64', 122, '****', '****************************', '*', 64, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haSUPCR_BSIC_PRF_*****_******00', '*****_BSIC_****_RSDT_NO_S24', 124, '****', '********************************', '*', 24, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haSUPCR_BSIC_PRF_*****_******00', '*****_BSIC_****_SELF_NTRED_YN_S1', 125, '****', '*******************************', '*', 1, 0, NULL, '*', NULL, '*', NULL, NULL), + ('Eid4i*******11372012******haSUPCR_BSIC_PRF_*****_******00', 'SUPCR_BSIC_PRF_GTH_MTCD_S2', 127, '****', '*****************************', '*', 2, 0, NULL, '*', NULL, '*', NULL, NULL); +--enable_query_log + +SET autocommit = 0; + +--disable_query_log +--source suite/innodb/include/bug91091.inc +--enable_query_log + +SELECT c1 FROM t WHERE c1 = 'Eid4i*******11372012******haFEIouxia1Aroo2aaT_*****_******00' ORDER BY c1, c3; +SELECT c1 FROM t WHERE c1 = 'Eid4i*******11372012******O*****Sua9EiJ**************00' ORDER BY c1, c3; + +ROLLBACK; + +SET autocommit = 0; +--disable_query_log +--source suite/innodb/include/bug91091.inc +--enable_query_log + +SELECT c1 FROM t FORCE KEY(igt_field_uni) WHERE c1 = 'Eid4i*******11372012******haFEIouxia1Aroo2aaT_*****_******00' ORDER BY c1, c3; +SELECT c1 FROM t FORCE KEY(igt_field_uni) WHERE c1 = 'Eid4i*******11372012******O*****Sua9EiJ**************00' ORDER BY c1, c3; + +ROLLBACK; + +DROP TABLE t; + +SET GLOBAL innodb_file_format = @saved_innodb_file_format; diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index b45dce14123e..1310d3bc695c 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -3352,6 +3352,7 @@ ha_innobase::reset_template(void) prebuilt->keep_other_fields_on_keyread = 0; prebuilt->read_just_key = 0; prebuilt->in_fts_query = 0; + prebuilt->end_range = false; /* Reset index condition pushdown state. */ if (prebuilt->idx_cond) { prebuilt->idx_cond = NULL; From 65e2fc37bc7202d64afe69863d474ced84dcff0b Mon Sep 17 00:00:00 2001 From: Lars Tangvald Date: Thu, 30 Nov 2017 13:01:38 +0100 Subject: [PATCH 0926/1221] Bug#27990381 DEB: BACKPORT FIX FOR #24008883 TO 5.7 Deb packaging automatically strips out debug symbols from the binaries. Debian 9 automatically generates separate dbgsym packages with the symbols, so we want to do the same for the other apt platforms. --- packaging/deb-in/CMakeLists.txt | 59 +++++++++++++++++++ packaging/deb-in/control.in | 1 + .../deb-in/libmysqlclient20-dbgsym.install.in | 18 ++++++ ...sql-packagesource-client-dbgsym.install.in | 19 ++++++ ...sql-packagesource-server-dbgsym.install.in | 18 ++++++ ...mysql-packagesource-test-dbgsym.install.in | 18 ++++++ packaging/deb-in/rules.in | 2 + 7 files changed, 135 insertions(+) create mode 100644 packaging/deb-in/libmysqlclient20-dbgsym.install.in create mode 100644 packaging/deb-in/mysql-packagesource-client-dbgsym.install.in create mode 100644 packaging/deb-in/mysql-packagesource-server-dbgsym.install.in create mode 100644 packaging/deb-in/mysql-packagesource-test-dbgsym.install.in diff --git a/packaging/deb-in/CMakeLists.txt b/packaging/deb-in/CMakeLists.txt index b7b451c40b8f..831eade06928 100644 --- a/packaging/deb-in/CMakeLists.txt +++ b/packaging/deb-in/CMakeLists.txt @@ -46,6 +46,7 @@ IF (NOT DEFINED DEB_CHANGELOG_TIMESTAMP) ) SET (DEB_CHANGELOG_TIMESTAMP ${DEB_CHANGELOG_TIMESTAMP} CACHE STRING "") ENDIF() + # Commercial or community IF (DEB_PRODUCT STREQUAL "commercial") SET (DEB_COPYRIGHT_UPSTREAMNAME "MySQL Commercial Server ${MYSQL_BASE_VERSION}") @@ -127,6 +128,46 @@ ELSE() SET (DEB_REMOVEPATTERN "com.in") ENDIF() +# Generate debug symbol packages (this is done automatically in Debian9+) +SET (DEB_RULES_STRIP_DEFAULT +" +override_dh_strip: + dh_strip -pmysql-${DEB_PRODUCTNAME}-server --dbg-package=mysql-${DEB_PRODUCTNAME}-server-dbgsym + dh_strip -pmysql-${DEB_PRODUCTNAME}-client --dbg-package=mysql-${DEB_PRODUCTNAME}-client-dbgsym + dh_strip -pmysql-${DEB_PRODUCTNAME}-test --dbg-package=mysql-${DEB_PRODUCTNAME}-test-dbgsym + dh_strip -pmysql-server + dh_strip -pmysql-client + dh_strip -pmysql-testsuite + dh_strip -plibmysqlclient20 --dbg-package=libmysqlclient20-dbgsym + dh_strip -plibmysqlclient-dev +") +SET (DEB_CONTROL_DBGSYM_DEFAULT +" +Package: libmysqlclient20-dbgsym +Architecture: any +Section: debug +Depends: libmysqlclient20 (=\${binary:Version}), \${misc:Depends} +Description: Debugging symbols for client library + +Package: mysql-${DEB_PRODUCTNAME}-test-dbgsym +Architecture: any +Section: debug +Depends: mysql-${DEB_PRODUCTNAME}-test (= \${binary:Version}), \${misc:Depends} +Description: Debugging symbols for test suite + +Package: mysql-${DEB_PRODUCTNAME}-server-dbgsym +Architecture: any +Section: debug +Depends: mysql-${DEB_PRODUCTNAME}-server (= \${binary:Version}), \${misc:Depends} +Description: Debugging symbols for server + +Package: mysql-${DEB_PRODUCTNAME}-client-dbgsym +Architecture: any +Section: debug +Depends: mysql-${DEB_PRODUCTNAME}-client (= \${binary:Version}), \${misc:Depends} +Description: Debugging symbols for client +") + # Platform specifics. The differences are generally only distro version # and whether or not systemd and/or apparmor are available IF (DEB_CODENAME STREQUAL "wheezy") @@ -142,6 +183,8 @@ IF (DEB_CODENAME STREQUAL "wheezy") SET (DEB_INSTALL_SERVER_APPARMOR "") SET (DEB_SERVICE_SERVER_EXECPRE "") SET (DEB_INIT_APPARMOR "") + SET (DEB_CONTROL_DBGSYM ${DEB_CONTROL_DBGSYM_DEFAULT}) + SET (DEB_RULES_STRIP ${DEB_RULES_STRIP_DEFAULT}) ELSEIF(DEB_CODENAME STREQUAL "jessie") SET (DEB_PLATFORMRELEASE "debian8") SET (DEB_CONTROL_BDEPS "dh-systemd") @@ -157,6 +200,8 @@ ELSEIF(DEB_CODENAME STREQUAL "jessie") SET (DEB_SERVICE_SERVER_EXECPRE "ExecStartPre=/usr/share/mysql/mysql-systemd-start pre") SET (DEB_INIT_APPARMOR "") + SET (DEB_CONTROL_DBGSYM ${DEB_CONTROL_DBGSYM_DEFAULT}) + SET (DEB_RULES_STRIP ${DEB_RULES_STRIP_DEFAULT}) ELSEIF(DEB_CODENAME STREQUAL "stretch") SET (DEB_PLATFORMRELEASE "debian9") SET (DEB_CONTROL_BDEPS "dh-systemd") @@ -172,6 +217,8 @@ ELSEIF(DEB_CODENAME STREQUAL "stretch") SET (DEB_SERVICE_SERVER_EXECPRE "ExecStartPre=/usr/share/mysql/mysql-systemd-start pre") SET (DEB_INIT_APPARMOR "") + SET (DEB_CONTROL_DBGSYM "") + SET (DEB_RULES_STRIP "") ELSEIF(DEB_CODENAME STREQUAL "sid") IF (DEFINED DEB_GCC_SNAPSHOT) SET (DEB_CMAKE_EXTRAS "${DEB_CMAKE_EXTRAS} -DCMAKE_C_COMPILER=/usr/lib/gcc-snapshot/bin/gcc -DCMAKE_CXX_COMPILER=/usr/lib/gcc-snapshot/bin/g++ -DMYSQL_MAINTAINER_MODE=0 -DCMAKE_CXX_COMPILER_LAUNCHER=ccache") @@ -190,6 +237,8 @@ ELSEIF(DEB_CODENAME STREQUAL "sid") SET (DEB_SERVICE_SERVER_EXECPRE "ExecStartPre=/usr/share/mysql/mysql-systemd-start pre") SET (DEB_INIT_APPARMOR "") + SET (DEB_CONTROL_DBGSYM "") + SET (DEB_RULES_STRIP "") ELSEIF(DEB_CODENAME STREQUAL "trusty") SET (DEB_PLATFORMRELEASE "ubuntu14.04") SET (DEB_CONTROL_BDEPS "dh-apparmor") @@ -205,6 +254,8 @@ ELSEIF(DEB_CODENAME STREQUAL "trusty") SET (DEB_INSTALL_SERVER_APPARMOR "etc/apparmor.d/usr.sbin.mysqld") SET (DEB_SERVICE_SERVER_EXECPRE "") SET (DEB_INIT_APPARMOR "/lib/init/apparmor-profile-load usr.sbin.mysqld") + SET (DEB_CONTROL_DBGSYM ${DEB_CONTROL_DBGSYM_DEFAULT}) + SET (DEB_RULES_STRIP ${DEB_RULES_STRIP_DEFAULT}) ELSEIF(DEB_CODENAME STREQUAL "xenial") SET (DEB_PLATFORMRELEASE "ubuntu16.04") SET (DEB_CONTROL_BDEPS "dh-apparmor, dh-systemd (>=1.5)") @@ -222,6 +273,8 @@ ELSEIF(DEB_CODENAME STREQUAL "xenial") SET (DEB_SERVICE_SERVER_EXECPRE "ExecStartPre=/usr/share/mysql/mysql-systemd-start pre") SET (DEB_INIT_APPARMOR "/lib/apparmor/profile-load usr.sbin.mysqld") + SET (DEB_CONTROL_DBGSYM ${DEB_CONTROL_DBGSYM_DEFAULT}) + SET (DEB_RULES_STRIP ${DEB_RULES_STRIP_DEFAULT}) ELSEIF(DEB_CODENAME STREQUAL "zesty") SET (DEB_PLATFORMRELEASE "ubuntu17.04") SET (DEB_CONTROL_BDEPS "dh-apparmor, dh-systemd (>=1.5)") @@ -239,6 +292,8 @@ ELSEIF(DEB_CODENAME STREQUAL "zesty") SET (DEB_SERVICE_SERVER_EXECPRE "ExecStartPre=/usr/share/mysql/mysql-systemd-start pre") SET (DEB_INIT_APPARMOR "/lib/apparmor/profile-load usr.sbin.mysqld") + SET (DEB_CONTROL_DBGSYM ${DEB_CONTROL_DBGSYM_DEFAULT}) + SET (DEB_RULES_STRIP ${DEB_RULES_STRIP_DEFAULT}) ELSEIF(DEB_CODENAME STREQUAL "artful") SET (DEB_PLATFORMRELEASE "ubuntu17.10") SET (DEB_CONTROL_BDEPS "dh-apparmor, dh-systemd (>=1.5)") @@ -256,6 +311,8 @@ ELSEIF(DEB_CODENAME STREQUAL "artful") SET (DEB_SERVICE_SERVER_EXECPRE "ExecStartPre=/usr/share/mysql/mysql-systemd-start pre") SET (DEB_INIT_APPARMOR "/lib/apparmor/profile-load usr.sbin.mysqld") + SET (DEB_CONTROL_DBGSYM ${DEB_CONTROL_DBGSYM_DEFAULT}) + SET (DEB_RULES_STRIP ${DEB_RULES_STRIP_DEFAULT}) ELSEIF(DEB_CODENAME STREQUAL "bionic") SET (DEB_PLATFORMRELEASE "ubuntu18.04") SET (DEB_CONTROL_BDEPS "dh-apparmor, dh-systemd (>=1.5)") @@ -273,6 +330,8 @@ ELSEIF(DEB_CODENAME STREQUAL "bionic") SET (DEB_SERVICE_SERVER_EXECPRE "ExecStartPre=/usr/share/mysql/mysql-systemd-start pre") SET (DEB_INIT_APPARMOR "/lib/apparmor/profile-load usr.sbin.mysqld") + SET (DEB_CONTROL_DBGSYM "") + SET (DEB_RULES_STRIP "") ELSE() MESSAGE(STATUS "Skipping deb packaging on unsupported platform ${DEB_CODENAME}.") diff --git a/packaging/deb-in/control.in b/packaging/deb-in/control.in index 59f95fabb021..517a5e614880 100644 --- a/packaging/deb-in/control.in +++ b/packaging/deb-in/control.in @@ -227,4 +227,5 @@ Description: MySQL source as for embedding into mass-deployed software. MySQL is a trademark of Oracle. +@DEB_CONTROL_DBGSYM@ @DEB_NDB_CONTROL_EXTRAS@ diff --git a/packaging/deb-in/libmysqlclient20-dbgsym.install.in b/packaging/deb-in/libmysqlclient20-dbgsym.install.in new file mode 100644 index 000000000000..424809484a52 --- /dev/null +++ b/packaging/deb-in/libmysqlclient20-dbgsym.install.in @@ -0,0 +1,18 @@ +# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. +# +# 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 + +# legal +usr/share/mysql/@DEB_INSTALL_LICENSEFILE@ usr/share/doc/libmysqlclient20-dbgsym/ +usr/share/mysql/README usr/share/doc/libmysqlclient20-dbgsym/ diff --git a/packaging/deb-in/mysql-packagesource-client-dbgsym.install.in b/packaging/deb-in/mysql-packagesource-client-dbgsym.install.in new file mode 100644 index 000000000000..a7b21a6573e5 --- /dev/null +++ b/packaging/deb-in/mysql-packagesource-client-dbgsym.install.in @@ -0,0 +1,19 @@ +# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. +# +# 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 + +# legal +usr/share/mysql/@DEB_INSTALL_LICENSEFILE@ usr/share/doc/mysql-@DEB_PRODUCTNAME@-client-dbgsym/ +usr/share/mysql/README usr/share/doc/mysql-@DEB_PRODUCTNAME@-client-dbgsym/ + diff --git a/packaging/deb-in/mysql-packagesource-server-dbgsym.install.in b/packaging/deb-in/mysql-packagesource-server-dbgsym.install.in new file mode 100644 index 000000000000..f356c17fccf2 --- /dev/null +++ b/packaging/deb-in/mysql-packagesource-server-dbgsym.install.in @@ -0,0 +1,18 @@ +# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. +# +# 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 + +# legal +usr/share/mysql/@DEB_INSTALL_LICENSEFILE@ usr/share/doc/mysql-@DEB_PRODUCTNAME@-server-dbgsym/ +usr/share/mysql/README usr/share/doc/mysql-@DEB_PRODUCTNAME@-server-dbgsym/ diff --git a/packaging/deb-in/mysql-packagesource-test-dbgsym.install.in b/packaging/deb-in/mysql-packagesource-test-dbgsym.install.in new file mode 100644 index 000000000000..c1fb527015f4 --- /dev/null +++ b/packaging/deb-in/mysql-packagesource-test-dbgsym.install.in @@ -0,0 +1,18 @@ +# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. +# +# 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 + +# legal +usr/share/mysql/@DEB_INSTALL_LICENSEFILE@ usr/share/doc/mysql-@DEB_PRODUCTNAME@-test-dbgsym/ +usr/share/mysql/README usr/share/doc/mysql-@DEB_PRODUCTNAME@-test-dbgsym/ diff --git a/packaging/deb-in/rules.in b/packaging/deb-in/rules.in index 32ef7211b264..a4e416e7d59e 100644 --- a/packaging/deb-in/rules.in +++ b/packaging/deb-in/rules.in @@ -69,6 +69,8 @@ override_dh_auto_test: make test || true touch $@ +@DEB_RULES_STRIP@ + override_dh_auto_install: @echo "RULES.$@" From e1fdeb2468f3ee16e34e0c3af856edde128836e5 Mon Sep 17 00:00:00 2001 From: Terje Rosten Date: Wed, 20 Jun 2018 12:38:32 +0200 Subject: [PATCH 0927/1221] Bug#27919254 MYSQL USER ESCALATES ITS PRIVILEGE BY PLACING ARBITRARY PIDS INTO ITS PID FILES Shutdown server as mysql user to avoid accidentally sending signal to wrong process. --- packaging/rpm-oel/mysql.init | 2 +- packaging/rpm-sles/mysql.init | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packaging/rpm-oel/mysql.init b/packaging/rpm-oel/mysql.init index e46edd141875..4200e99dd95b 100644 --- a/packaging/rpm-oel/mysql.init +++ b/packaging/rpm-oel/mysql.init @@ -159,7 +159,7 @@ stop(){ fi MYSQLPID=`cat "$mypidfile"` if [ -n "$MYSQLPID" ]; then - /bin/kill "$MYSQLPID" >/dev/null 2>&1 + /bin/su - mysql -s /bin/bash -c "/bin/kill $MYSQLPID" >/dev/null 2>&1 ret=$? if [ $ret -eq 0 ]; then TIMEOUT="$STOPTIMEOUT" diff --git a/packaging/rpm-sles/mysql.init b/packaging/rpm-sles/mysql.init index 4c72d9765263..c89d56f5c1ad 100644 --- a/packaging/rpm-sles/mysql.init +++ b/packaging/rpm-sles/mysql.init @@ -163,7 +163,7 @@ stop () { # We use a signal to avoid having to know the root password # Send single kill command and then wait - if kill $pid >/dev/null 2>&1; then + if su - mysql -s /bin/bash -c "kill $pid" >/dev/null 2>&1; then timer=$STOPTIMEOUT while [ $timer -gt 0 ]; do kill -0 $pid >/dev/null 2>&1 || break @@ -196,7 +196,7 @@ reload () { ret=0 if chk_running && mysqladmin --no-defaults --socket="$socket" ping >/dev/null 2>&1 ; then pid=$(cat "$pidfile") - kill -HUP $pid >/dev/null 2>&1 + su - mysql -s /bin/bash -c "kill -HUP $pid" >/dev/null 2>&1 echo -n "Reloading service MySQL:" rc_reset else From 14a10ea167bada28e5660c4d9f670554122cfbcc Mon Sep 17 00:00:00 2001 From: Samantha Chan Date: Tue, 5 Dec 2017 17:32:16 -0800 Subject: [PATCH 0928/1221] Add counter for how many rows were filtered out for TTL in MyRocks Upstream commit ID : fb-mysql-5.6.35/2d0083615546e85b7c81a3e6eac09b349f597f03 PS-4476 : Merge prod201801 Summary: Added a global status counter: rocksdb_rows_filtered that tracks how many rows were filtered out for TTL in MyRocks Reviewed By: lth Differential Revision: D6479670 fbshipit-source-id: 2c40ba1 --- mysql-test/suite/rocksdb/r/rocksdb.result | 3 ++ .../r/ttl_primary_read_filtering.result | 28 +++++++++++++++++++ .../rocksdb/t/ttl_primary_read_filtering.test | 18 ++++++++++-- storage/rocksdb/ha_rocksdb.cc | 11 ++++++-- storage/rocksdb/ha_rocksdb.h | 2 ++ 5 files changed, 58 insertions(+), 4 deletions(-) diff --git a/mysql-test/suite/rocksdb/r/rocksdb.result b/mysql-test/suite/rocksdb/r/rocksdb.result index a05f8011b774..140c73405331 100644 --- a/mysql-test/suite/rocksdb/r/rocksdb.result +++ b/mysql-test/suite/rocksdb/r/rocksdb.result @@ -1505,6 +1505,7 @@ rocksdb_rows_inserted # rocksdb_rows_read # rocksdb_rows_updated # rocksdb_rows_expired # +rocksdb_rows_filtered # rocksdb_system_rows_deleted # rocksdb_system_rows_inserted # rocksdb_system_rows_read # @@ -1612,6 +1613,7 @@ rocksdb_rows_inserted rocksdb_rows_read rocksdb_rows_updated rocksdb_rows_expired +rocksdb_rows_filtered rocksdb_system_rows_deleted rocksdb_system_rows_inserted rocksdb_system_rows_read @@ -1721,6 +1723,7 @@ rocksdb_rows_inserted rocksdb_rows_read rocksdb_rows_updated rocksdb_rows_expired +rocksdb_rows_filtered rocksdb_system_rows_deleted rocksdb_system_rows_inserted rocksdb_system_rows_read diff --git a/mysql-test/suite/rocksdb/r/ttl_primary_read_filtering.result b/mysql-test/suite/rocksdb/r/ttl_primary_read_filtering.result index 8517479d90b2..93c0c4b07b38 100644 --- a/mysql-test/suite/rocksdb/r/ttl_primary_read_filtering.result +++ b/mysql-test/suite/rocksdb/r/ttl_primary_read_filtering.result @@ -52,18 +52,30 @@ INSERT INTO t1 values (3); INSERT INTO t1 values (5); INSERT INTO t1 values (7); set global rocksdb_debug_ttl_rec_ts = 0; +select variable_value into @a from performance_schema.global_status where variable_name='rocksdb_rows_filtered'; SELECT * FROM t1; a +select variable_value-@a from performance_schema.global_status where variable_name='rocksdb_rows_filtered'; +variable_value-@a +4 set global rocksdb_enable_ttl_read_filtering=0; +select variable_value into @a from performance_schema.global_status where variable_name='rocksdb_rows_filtered'; SELECT * FROM t1; a 1 3 5 7 +select variable_value-@a from performance_schema.global_status where variable_name='rocksdb_rows_filtered'; +variable_value-@a +0 set global rocksdb_enable_ttl_read_filtering=1; +select variable_value into @a from performance_schema.global_status where variable_name='rocksdb_rows_filtered'; SELECT * FROM t1; a +select variable_value-@a from performance_schema.global_status where variable_name='rocksdb_rows_filtered'; +variable_value-@a +4 DROP TABLE t1; CREATE TABLE t1 ( a int, @@ -184,19 +196,35 @@ a # Switching to connection 2 set global rocksdb_force_flush_memtable_now=1; set global rocksdb_compact_cf='default'; +select variable_value into @a from performance_schema.global_status where variable_name='rocksdb_rows_filtered'; SELECT * FROM t1; a +select variable_value-@a from performance_schema.global_status where variable_name='rocksdb_rows_filtered'; +variable_value-@a +1 # Switching to connection 1 +select variable_value into @a from performance_schema.global_status where variable_name='rocksdb_rows_filtered'; SELECT * FROM t1; a 1 +select variable_value-@a from performance_schema.global_status where variable_name='rocksdb_rows_filtered'; +variable_value-@a +0 UPDATE t1 set a = a + 1 WHERE a IN(1,2,3,4,5,6,7,8,9,10); +select variable_value into @a from performance_schema.global_status where variable_name='rocksdb_rows_filtered'; SELECT * FROM t1; a 2 +select variable_value-@a from performance_schema.global_status where variable_name='rocksdb_rows_filtered'; +variable_value-@a +0 COMMIT; +select variable_value into @a from performance_schema.global_status where variable_name='rocksdb_rows_filtered'; SELECT * FROM t1; a +select variable_value-@a from performance_schema.global_status where variable_name='rocksdb_rows_filtered'; +variable_value-@a +1 DROP TABLE t1; set global rocksdb_force_flush_memtable_now=1; set global rocksdb_compact_cf='default'; diff --git a/mysql-test/suite/rocksdb/t/ttl_primary_read_filtering.test b/mysql-test/suite/rocksdb/t/ttl_primary_read_filtering.test index 9c9025dcba79..e92d5e418d6b 100644 --- a/mysql-test/suite/rocksdb/t/ttl_primary_read_filtering.test +++ b/mysql-test/suite/rocksdb/t/ttl_primary_read_filtering.test @@ -85,22 +85,28 @@ INSERT INTO t1 values (7); set global rocksdb_debug_ttl_rec_ts = 0; # should return nothing. +select variable_value into @a from performance_schema.global_status where variable_name='rocksdb_rows_filtered'; --sorted_result SELECT * FROM t1; +select variable_value-@a from performance_schema.global_status where variable_name='rocksdb_rows_filtered'; # disable filtering set global rocksdb_enable_ttl_read_filtering=0; # should return everything +select variable_value into @a from performance_schema.global_status where variable_name='rocksdb_rows_filtered'; --sorted_result SELECT * FROM t1; +select variable_value-@a from performance_schema.global_status where variable_name='rocksdb_rows_filtered'; -# disable filtering +# enable filtering set global rocksdb_enable_ttl_read_filtering=1; # should return nothing. +select variable_value into @a from performance_schema.global_status where variable_name='rocksdb_rows_filtered'; --sorted_result SELECT * FROM t1; +select variable_value-@a from performance_schema.global_status where variable_name='rocksdb_rows_filtered'; DROP TABLE t1; @@ -306,27 +312,35 @@ set global rocksdb_compact_cf='default'; # read filtered out, because on a different connection, on # this connection the records have 'expired' already so they are filtered out # even though they have not yet been removed by compaction + +select variable_value into @a from performance_schema.global_status where variable_name='rocksdb_rows_filtered'; --sorted_result SELECT * FROM t1; +select variable_value-@a from performance_schema.global_status where variable_name='rocksdb_rows_filtered'; --echo # Switching to connection 1 connection con1; +select variable_value into @a from performance_schema.global_status where variable_name='rocksdb_rows_filtered'; --sorted_result SELECT * FROM t1; # <= shouldn't be filtered out here +select variable_value-@a from performance_schema.global_status where variable_name='rocksdb_rows_filtered'; # Percona Server does not allow this as it invokes a gap lock in REPEATABLE-READ # which we need for the purpose of this test. So we are going to do a bunch of # specific point updates to achieve the same concept. # UPDATE t1 set a = a + 1; UPDATE t1 set a = a + 1 WHERE a IN(1,2,3,4,5,6,7,8,9,10); - +select variable_value into @a from performance_schema.global_status where variable_name='rocksdb_rows_filtered'; --sorted_result SELECT * FROM t1; # <= shouldn't be filtered out here +select variable_value-@a from performance_schema.global_status where variable_name='rocksdb_rows_filtered'; COMMIT; +select variable_value into @a from performance_schema.global_status where variable_name='rocksdb_rows_filtered'; --sorted_result # <= filtered out here because time has passed. SELECT * FROM t1; +select variable_value-@a from performance_schema.global_status where variable_name='rocksdb_rows_filtered'; DROP TABLE t1; disconnect con1; diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index ea2a5d74c741..e43e33f8e740 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -4753,8 +4753,12 @@ bool ha_rocksdb::should_hide_ttl_rec(const Rdb_key_def &kd, #ifndef NDEBUG read_filter_ts += rdb_dbug_set_ttl_read_filter_ts(); #endif - return ts + kd.m_ttl_duration + read_filter_ts <= - static_cast(curr_ts); + bool is_hide_ttl = + ts + kd.m_ttl_duration + read_filter_ts <= static_cast(curr_ts); + if (is_hide_ttl) { + update_row_stats(ROWS_FILTERED); + } + return is_hide_ttl; } void ha_rocksdb::rocksdb_skip_expired_records(const Rdb_key_def &kd, @@ -11492,6 +11496,7 @@ static void myrocks_update_status() { export_stats.rows_read = global_stats.rows[ROWS_READ]; export_stats.rows_updated = global_stats.rows[ROWS_UPDATED]; export_stats.rows_expired = global_stats.rows[ROWS_EXPIRED]; + export_stats.rows_filtered = global_stats.rows[ROWS_FILTERED]; export_stats.system_rows_deleted = global_stats.system_rows[ROWS_DELETED]; export_stats.system_rows_inserted = global_stats.system_rows[ROWS_INSERTED]; @@ -11528,6 +11533,8 @@ static SHOW_VAR myrocks_status_variables[] = { SHOW_LONGLONG), DEF_STATUS_VAR_FUNC("rows_expired", &export_stats.rows_expired, SHOW_LONGLONG), + DEF_STATUS_VAR_FUNC("rows_filtered", &export_stats.rows_filtered, + SHOW_LONGLONG), DEF_STATUS_VAR_FUNC("system_rows_deleted", &export_stats.system_rows_deleted, SHOW_LONGLONG), DEF_STATUS_VAR_FUNC("system_rows_inserted", diff --git a/storage/rocksdb/ha_rocksdb.h b/storage/rocksdb/ha_rocksdb.h index 786f4e5cb2ae..664e5111fc78 100644 --- a/storage/rocksdb/ha_rocksdb.h +++ b/storage/rocksdb/ha_rocksdb.h @@ -374,6 +374,7 @@ enum operation_type : int { ROWS_READ, ROWS_UPDATED, ROWS_EXPIRED, + ROWS_FILTERED, ROWS_HIDDEN_NO_SNAPSHOT, ROWS_MAX }; @@ -406,6 +407,7 @@ struct st_export_stats { ulonglong rows_read; ulonglong rows_updated; ulonglong rows_expired; + ulonglong rows_filtered; ulonglong rows_hidden_no_snapshot; ulonglong system_rows_deleted; From 426d3f0f16dbcf39e8489297df3ea64d6877ab17 Mon Sep 17 00:00:00 2001 From: Herman Lee Date: Fri, 8 Dec 2017 13:56:32 -0800 Subject: [PATCH 0929/1221] Remove rocksdb_number_stat_computes and rocksdb_rate_limit_delay_millis Upstream commit ID : fb-mysql-5.6.35/0fbac87bac79a099551665d468b567ec66cb20eb PS-4476 : Merge prod201801 Summary: These two status variables do not appear to do anything, so remove them from the list of stats returned. Reviewed By: lth Differential Revision: D6525590 fbshipit-source-id: 4b952a2 --- mysql-test/suite/rocksdb/r/rocksdb.result | 6 ------ storage/rocksdb/ha_rocksdb.cc | 6 ------ 2 files changed, 12 deletions(-) diff --git a/mysql-test/suite/rocksdb/r/rocksdb.result b/mysql-test/suite/rocksdb/r/rocksdb.result index 140c73405331..79fa3ad8467b 100644 --- a/mysql-test/suite/rocksdb/r/rocksdb.result +++ b/mysql-test/suite/rocksdb/r/rocksdb.result @@ -1580,11 +1580,9 @@ rocksdb_number_sst_entry_merge # rocksdb_number_sst_entry_other # rocksdb_number_sst_entry_put # rocksdb_number_sst_entry_singledelete # -rocksdb_number_stat_computes # rocksdb_number_superversion_acquires # rocksdb_number_superversion_cleanups # rocksdb_number_superversion_releases # -rocksdb_rate_limit_delay_millis # rocksdb_row_lock_deadlocks # rocksdb_row_lock_wait_timeouts # rocksdb_snapshot_conflict_errors # @@ -1688,11 +1686,9 @@ rocksdb_number_sst_entry_merge rocksdb_number_sst_entry_other rocksdb_number_sst_entry_put rocksdb_number_sst_entry_singledelete -rocksdb_number_stat_computes rocksdb_number_superversion_acquires rocksdb_number_superversion_cleanups rocksdb_number_superversion_releases -rocksdb_rate_limit_delay_millis rocksdb_row_lock_deadlocks rocksdb_row_lock_wait_timeouts rocksdb_snapshot_conflict_errors @@ -1798,11 +1794,9 @@ rocksdb_number_sst_entry_merge rocksdb_number_sst_entry_other rocksdb_number_sst_entry_put rocksdb_number_sst_entry_singledelete -rocksdb_number_stat_computes rocksdb_number_superversion_acquires rocksdb_number_superversion_cleanups rocksdb_number_superversion_releases -rocksdb_rate_limit_delay_millis rocksdb_row_lock_deadlocks rocksdb_row_lock_wait_timeouts rocksdb_snapshot_conflict_errors diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index e43e33f8e740..fd372987ae7b 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -491,7 +491,6 @@ static int rocksdb_debug_ttl_snapshot_ts = 0; static int rocksdb_debug_ttl_read_filter_ts = 0; static my_bool rocksdb_debug_ttl_ignore_pk = FALSE; static my_bool rocksdb_reset_stats = FALSE; -static uint64_t rocksdb_number_stat_computes = 0; static uint32_t rocksdb_seconds_between_stat_computes = 3600; static long long rocksdb_compaction_sequential_deletes = 0l; static long long rocksdb_compaction_sequential_deletes_window = 0l; @@ -11388,7 +11387,6 @@ struct rocksdb_status_counters_t { uint64_t no_file_opens; uint64_t no_file_errors; uint64_t stall_micros; - uint64_t rate_limit_delay_millis; uint64_t num_iterators; uint64_t number_multiget_get; uint64_t number_multiget_keys_read; @@ -11463,7 +11461,6 @@ DEF_SHOW_FUNC(no_file_closes, NO_FILE_CLOSES) DEF_SHOW_FUNC(no_file_opens, NO_FILE_OPENS) DEF_SHOW_FUNC(no_file_errors, NO_FILE_ERRORS) DEF_SHOW_FUNC(stall_micros, STALL_MICROS) -DEF_SHOW_FUNC(rate_limit_delay_millis, RATE_LIMIT_DELAY_MILLIS) DEF_SHOW_FUNC(num_iterators, NO_ITERATORS) DEF_SHOW_FUNC(number_multiget_get, NUMBER_MULTIGET_CALLS) DEF_SHOW_FUNC(number_multiget_keys_read, NUMBER_MULTIGET_KEYS_READ) @@ -11695,7 +11692,6 @@ static SHOW_VAR rocksdb_status_vars[] = { DEF_STATUS_VAR(no_file_opens), DEF_STATUS_VAR(no_file_errors), DEF_STATUS_VAR(stall_micros), - DEF_STATUS_VAR(rate_limit_delay_millis), DEF_STATUS_VAR(num_iterators), DEF_STATUS_VAR(number_multiget_get), DEF_STATUS_VAR(number_multiget_keys_read), @@ -11729,8 +11725,6 @@ static SHOW_VAR rocksdb_status_vars[] = { &rocksdb_snapshot_conflict_errors, SHOW_LONGLONG), DEF_STATUS_VAR_PTR("wal_group_syncs", &rocksdb_wal_group_syncs, SHOW_LONGLONG), - DEF_STATUS_VAR_PTR("number_stat_computes", &rocksdb_number_stat_computes, - SHOW_LONGLONG), DEF_STATUS_VAR_PTR("number_sst_entry_put", &rocksdb_num_sst_entry_put, SHOW_LONGLONG), DEF_STATUS_VAR_PTR("number_sst_entry_delete", &rocksdb_num_sst_entry_delete, From cf86a8f20f42406b171493eec7f51dada53f457a Mon Sep 17 00:00:00 2001 From: Ramil Kalimullin Date: Wed, 20 Jun 2018 21:49:42 +0400 Subject: [PATCH 0930/1221] Bug#27724519: CONTRIBUTION BY FACEBOOK: AVOID A CRASH IN HA_STATISTIC_INCREMENT Additional checks added to avoid a crash when a temporary table creation fails. --- sql/handler.cc | 5 +++-- storage/myisam/ha_myisam.cc | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/sql/handler.cc b/sql/handler.cc index f7fb52bd59fc..e42f0756c490 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -2434,7 +2434,8 @@ handler *handler::clone(const char *name, MEM_ROOT *mem_root) void handler::ha_statistic_increment(ulonglong SSV::*offset) const { - status_var_increment(table->in_use->status_var.*offset); + if (table && table->in_use) + status_var_increment(table->in_use->status_var.*offset); } void **handler::ha_data(THD *thd) const diff --git a/storage/myisam/ha_myisam.cc b/storage/myisam/ha_myisam.cc index 0181a768ab32..19b395f93a0a 100644 --- a/storage/myisam/ha_myisam.cc +++ b/storage/myisam/ha_myisam.cc @@ -817,7 +817,7 @@ int ha_myisam::write_row(uchar *buf) If we have an auto_increment column and we are writing a changed row or a new row, then update the auto_increment value in the record. */ - if (table->next_number_field && buf == table->record[0]) + if (table && table->next_number_field && buf == table->record[0]) { int error; if ((error= update_auto_increment())) From f544e3f08a40e3199bdfa198c314a966b79ca1d2 Mon Sep 17 00:00:00 2001 From: Aditya A Date: Fri, 22 Jun 2018 15:37:06 +0530 Subject: [PATCH 0931/1221] Bug #27804668 CRASH DUE TO SEGMENTATION FAULT IN FIL_SPACE_IS_BEING_TRUNCATED PROBLEM A parent table is trying to check if a referenced table is being truncated,but the referenced table has been discarded. Therefore any call to find fil_space_t structure of a discarded table causes a segmentation fault. FIX If the referenced table is discarded, then skip the foreign key checks for DML. --- storage/innobase/row/row0upd.cc | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/storage/innobase/row/row0upd.cc b/storage/innobase/row/row0upd.cc index dd7206500c54..ba5eee3ab46e 100644 --- a/storage/innobase/row/row0upd.cc +++ b/storage/innobase/row/row0upd.cc @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2017, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2018, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -267,9 +267,10 @@ row_upd_check_references_constraints( if it is interrupted. So if the foreign table is undergoing a truncate, ignore the FK check. */ - if (foreign_table != NULL - && fil_space_is_being_truncated( - foreign_table->space)) { + if (foreign_table != NULL && + (dict_table_is_discarded(foreign_table) + || fil_space_is_being_truncated( + foreign_table->space))) { continue; } From 0858ec805462ab8a4121f8fab9275e81cb30fdf6 Mon Sep 17 00:00:00 2001 From: Herman Lee Date: Fri, 15 Dec 2017 11:47:22 -0800 Subject: [PATCH 0932/1221] Return error from start_bulk_load() instead of SHIP_ASSERT Upstream commit ID : fb-mysql-5.6.35/d19af910dcde5039d846c56dac745581be175f83 PS-4476 : Merge prod201801 Summary: When start_bulk_load detects the user is switching between tables, it flushes the old table data out first. However, if there are problems flushing out the data, an error is returned from RocksDB and this triggers a SHIP_ASSERT(). This error should be propagated back up instead. This fixes https://github.com/facebook/mysql-5.6/issues/770 Closes https://github.com/facebook/mysql-5.6/pull/772 Differential Revision: D6572282 fbshipit-source-id: 3e71f6b --- .../suite/rocksdb/r/bulk_load_errors.result | 11 +++++++++++ mysql-test/suite/rocksdb/t/bulk_load_errors.test | 13 +++++++++++++ storage/rocksdb/ha_rocksdb.cc | 16 ++++++++++++---- 3 files changed, 36 insertions(+), 4 deletions(-) diff --git a/mysql-test/suite/rocksdb/r/bulk_load_errors.result b/mysql-test/suite/rocksdb/r/bulk_load_errors.result index 5617636a560e..f67c02a831be 100644 --- a/mysql-test/suite/rocksdb/r/bulk_load_errors.result +++ b/mysql-test/suite/rocksdb/r/bulk_load_errors.result @@ -75,3 +75,14 @@ INSERT INTO t1 VALUES(51479+0.333333333,1); DROP TABLE t1; SET @@global.table_open_cache=@orig_table_open_cache; # restart +CREATE TABLE t1 (pk INT, PRIMARY KEY (pk)) ENGINE=ROCKSDB; +CREATE TABLE t2 (pk INT, PRIMARY KEY (pk)) ENGINE=ROCKSDB; +SET rocksdb_bulk_load=1; +INSERT INTO t1 VALUES (1), (2); +INSERT INTO t2 VALUES (1), (2); +INSERT INTO t1 VALUES (1); +INSERT INTO t2 VALUES (3); +ERROR HY000: Rows inserted during bulk load must not overlap existing rows +SET rocksdb_bulk_load=0; +DROP TABLE t1; +DROP TABLE t2; diff --git a/mysql-test/suite/rocksdb/t/bulk_load_errors.test b/mysql-test/suite/rocksdb/t/bulk_load_errors.test index 29a1b1c465ff..53fc389e7f3a 100644 --- a/mysql-test/suite/rocksdb/t/bulk_load_errors.test +++ b/mysql-test/suite/rocksdb/t/bulk_load_errors.test @@ -118,4 +118,17 @@ SET @@global.table_open_cache=@orig_table_open_cache; --remove_file $LOG3 +# Switch between tables, but also introduce duplicate key errors +CREATE TABLE t1 (pk INT, PRIMARY KEY (pk)) ENGINE=ROCKSDB; +CREATE TABLE t2 (pk INT, PRIMARY KEY (pk)) ENGINE=ROCKSDB; +SET rocksdb_bulk_load=1; +INSERT INTO t1 VALUES (1), (2); +INSERT INTO t2 VALUES (1), (2); +INSERT INTO t1 VALUES (1); +--error ER_OVERLAPPING_KEYS +INSERT INTO t2 VALUES (3); +SET rocksdb_bulk_load=0; +DROP TABLE t1; +DROP TABLE t2; + --source include/wait_until_count_sessions.inc diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index fd372987ae7b..895603b9f880 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -2059,8 +2059,8 @@ class Rdb_transaction { return rc; } - void start_bulk_load(ha_rocksdb *const bulk_load, - std::shared_ptr sst_info) { + int start_bulk_load(ha_rocksdb *const bulk_load, + std::shared_ptr sst_info) { /* If we already have an open bulk load of a table and the name doesn't match the current one, close out the currently running one. This allows @@ -2072,7 +2072,11 @@ class Rdb_transaction { if (!m_curr_bulk_load.empty() && bulk_load->get_table_basename() != m_curr_bulk_load_tablename) { const auto res = finish_bulk_load(); - SHIP_ASSERT(res == 0); + if (res != HA_EXIT_SUCCESS) { + m_curr_bulk_load.clear(); + m_curr_bulk_load_tablename.clear(); + return res; + } } /* @@ -2088,6 +2092,7 @@ class Rdb_transaction { */ m_curr_bulk_load.push_back(sst_info); m_curr_bulk_load_tablename = bulk_load->get_table_basename(); + return HA_EXIT_SUCCESS; } int num_ongoing_bulk_load() const { return m_curr_bulk_load.size(); } @@ -8574,7 +8579,10 @@ int ha_rocksdb::bulk_load_key(Rdb_transaction *const tx, const Rdb_key_def &kd, m_sst_info.reset(new Rdb_sst_info(rdb, m_table_handler->m_table_name, kd.get_name(), cf, *rocksdb_db_options, THDVAR(ha_thd(), trace_sst_api))); - tx->start_bulk_load(this, m_sst_info); + res = tx->start_bulk_load(this, m_sst_info); + if (res != HA_EXIT_SUCCESS) { + DBUG_RETURN(res); + } } DBUG_ASSERT(m_sst_info); From 9a60ad0dc78c802663f83de35f277f9d081208a1 Mon Sep 17 00:00:00 2001 From: Vegetable26 Date: Mon, 8 Jan 2018 12:35:27 -0800 Subject: [PATCH 0933/1221] Added error message when client sets an invalid rocksdb_update_cf_options Upstream commit ID : fb-mysql-5.6.35/db61edd25e95483f287286e1315728e638041fa2 PS-4476 : Merge prod201801 Summary: Modified the set_var's sql_set_variables to propagate errors set by my_error() in the update func. Added error printing for invalid rocksdb_update_cf_options and updated the corresponding unit test Reviewed By: hermanlee Differential Revision: D5970102 fbshipit-source-id: ccb8364 --- .../r/rocksdb_update_cf_options_basic.result | 16 +++- .../t/rocksdb_update_cf_options_basic.test | 15 +++- storage/rocksdb/ha_rocksdb.cc | 82 ++++++++++++------- 3 files changed, 78 insertions(+), 35 deletions(-) diff --git a/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_update_cf_options_basic.result b/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_update_cf_options_basic.result index 75483ca85a91..689659f920e8 100644 --- a/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_update_cf_options_basic.result +++ b/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_update_cf_options_basic.result @@ -30,10 +30,17 @@ SET @@global.rocksdb_update_cf_options = NULL; SELECT @@global.rocksdb_update_cf_options; @@global.rocksdb_update_cf_options NULL -SET @@global.rocksdb_update_cf_options = 'aaaaa'; +SET @@global.rocksdb_update_cf_options = NULL; SELECT @@global.rocksdb_update_cf_options; @@global.rocksdb_update_cf_options NULL +SET @@global.rocksdb_update_cf_options = ''; +SELECT @@global.rocksdb_update_cf_options; +@@global.rocksdb_update_cf_options + +SELECT @@global.rocksdb_update_cf_options; +@@global.rocksdb_update_cf_options + SELECT * FROM INFORMATION_SCHEMA.ROCKSDB_CF_OPTIONS WHERE CF_NAME='default' AND OPTION_TYPE='WRITE_BUFFER_SIZE'; CF_NAME OPTION_TYPE VALUE default WRITE_BUFFER_SIZE 67108864 @@ -98,7 +105,12 @@ cf1={target_file_size_base=24m};foo={max_bytes_for_level_multiplier=8}; SELECT * FROM INFORMATION_SCHEMA.ROCKSDB_CF_OPTIONS WHERE CF_NAME='cf1' AND OPTION_TYPE='TARGET_FILE_SIZE_BASE'; CF_NAME OPTION_TYPE VALUE cf1 TARGET_FILE_SIZE_BASE 25165824 -SET @@global.rocksdb_update_cf_options = 'default={foo=bar};'; +SET @@global.rocksdb_update_cf_options = 'default={foo=bar};';; +ERROR 42000: Variable 'rocksdb_update_cf_options' can't be set to the value of 'default={foo=bar};' +SELECT @@global.rocksdb_update_cf_options; +@@global.rocksdb_update_cf_options +cf1={target_file_size_base=24m};foo={max_bytes_for_level_multiplier=8}; +SET @@global.rocksdb_update_cf_options = NULL; SELECT @@global.rocksdb_update_cf_options; @@global.rocksdb_update_cf_options NULL diff --git a/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_update_cf_options_basic.test b/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_update_cf_options_basic.test index 3f5ae209f3dc..40b1c810fceb 100644 --- a/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_update_cf_options_basic.test +++ b/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_update_cf_options_basic.test @@ -34,8 +34,15 @@ SELECT @@global.rocksdb_update_cf_options; SET @@global.rocksdb_update_cf_options = NULL; SELECT @@global.rocksdb_update_cf_options; +# Make sure that we do not double free the NULL string +SET @@global.rocksdb_update_cf_options = NULL; +SELECT @@global.rocksdb_update_cf_options; + +# Attempt setting an empty string +SET @@global.rocksdb_update_cf_options = ''; +SELECT @@global.rocksdb_update_cf_options; + # Will fail to parse. Value not updated. -SET @@global.rocksdb_update_cf_options = 'aaaaa'; SELECT @@global.rocksdb_update_cf_options; SELECT * FROM INFORMATION_SCHEMA.ROCKSDB_CF_OPTIONS WHERE CF_NAME='default' AND OPTION_TYPE='WRITE_BUFFER_SIZE'; @@ -82,7 +89,11 @@ SELECT * FROM INFORMATION_SCHEMA.ROCKSDB_CF_OPTIONS WHERE CF_NAME='cf1' AND OPTI # Will fail to parse. No valid assignments included. Value not updated and # reset to NULL. -SET @@global.rocksdb_update_cf_options = 'default={foo=bar};'; +--Error ER_WRONG_VALUE_FOR_VAR +--eval SET @@global.rocksdb_update_cf_options = 'default={foo=bar};'; +SELECT @@global.rocksdb_update_cf_options; + +SET @@global.rocksdb_update_cf_options = NULL; SELECT @@global.rocksdb_update_cf_options; DROP TABLE t1; diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index 895603b9f880..511e31ff4685 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -402,10 +402,14 @@ static void rocksdb_set_collation_exception_list(THD *thd, void *var_ptr, const void *save); -void rocksdb_set_update_cf_options(THD *thd, - struct st_mysql_sys_var *var, - void *var_ptr, - const void *save); +static int rocksdb_validate_update_cf_options(THD *thd, + struct st_mysql_sys_var *var, + void *save, + st_mysql_value *value); + +static void rocksdb_set_update_cf_options(THD *thd, + struct st_mysql_sys_var *var, + void *var_ptr, const void *save); static int rocksdb_check_bulk_load(THD *const thd, struct st_mysql_sys_var *var @@ -1190,8 +1194,8 @@ static MYSQL_SYSVAR_STR(override_cf_options, rocksdb_override_cf_options, static MYSQL_SYSVAR_STR(update_cf_options, rocksdb_update_cf_options, PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_MEMALLOC, "Option updates per column family for RocksDB", - nullptr, rocksdb_set_update_cf_options, - nullptr); + rocksdb_validate_update_cf_options, + rocksdb_set_update_cf_options, nullptr); static MYSQL_SYSVAR_UINT(flush_log_at_trx_commit, rocksdb_flush_log_at_trx_commit, PLUGIN_VAR_RQCMDARG, @@ -12337,34 +12341,59 @@ static void rocksdb_set_wal_bytes_per_sync( RDB_MUTEX_UNLOCK_CHECK(rdb_sysvars_mutex); } -void rocksdb_set_update_cf_options(THD *const /* unused */, - struct st_mysql_sys_var *const /* unused */, - void *const var_ptr, - const void *const save) { +static int rocksdb_validate_update_cf_options( + THD *thd MY_ATTRIBUTE((__unused__)), + struct st_mysql_sys_var *var MY_ATTRIBUTE((__unused__)), void *save, + struct st_mysql_value *value) { + + char buff[STRING_BUFFER_USUAL_SIZE]; + const char *str; + int length; + length = sizeof(buff); + str = value->val_str(value, buff, &length); + *static_cast(save) = str; + + if (str == nullptr) { + return HA_EXIT_SUCCESS; + } + + Rdb_cf_options::Name_to_config_t option_map; + + // Basic sanity checking and parsing the options into a map. If this fails + // then there's no point to proceed. + if (!Rdb_cf_options::parse_cf_options(str, &option_map)) { + my_error(ER_WRONG_VALUE_FOR_VAR, MYF(0), "rocksdb_update_cf_options", str); + return HA_EXIT_FAILURE; + } + return HA_EXIT_SUCCESS; +} + +static void rocksdb_set_update_cf_options( + THD *const thd MY_ATTRIBUTE((__unused__)), + struct st_mysql_sys_var *const var MY_ATTRIBUTE((__unused__)), + void *const var_ptr, const void *const save) { const char *const val = *static_cast(save); + RDB_MUTEX_LOCK_CHECK(rdb_sysvars_mutex); + if (!val) { - // NO_LINT_DEBUG - sql_print_warning("MyRocks: NULL is not a valid option for updates to " - "column family settings."); + *reinterpret_cast(var_ptr) = nullptr; + RDB_MUTEX_UNLOCK_CHECK(rdb_sysvars_mutex); return; } - RDB_MUTEX_LOCK_CHECK(rdb_sysvars_mutex); - DBUG_ASSERT(val != nullptr); + // Reset the pointers regardless of how much success we had with updating + // the CF options. This will results in consistent behavior and avoids + // dealing with cases when only a subset of CF-s was successfully updated. + *reinterpret_cast(var_ptr) = my_strdup(0, val, MYF(0)); + // Do the real work of applying the changes. Rdb_cf_options::Name_to_config_t option_map; - // Basic sanity checking and parsing the options into a map. If this fails - // then there's no point to proceed. + // This should never fail, because of rocksdb_validate_update_cf_options if (!Rdb_cf_options::parse_cf_options(val, &option_map)) { - *reinterpret_cast(var_ptr) = nullptr; - - // NO_LINT_DEBUG - sql_print_warning("MyRocks: failed to parse the updated column family " - "options = '%s'.", val); RDB_MUTEX_UNLOCK_CHECK(rdb_sysvars_mutex); return; } @@ -12424,15 +12453,6 @@ void rocksdb_set_update_cf_options(THD *const /* unused */, } } - // Reset the pointers regardless of how much success we had with updating - // the CF options. This will results in consistent behavior and avoids - // dealing with cases when only a subset of CF-s was successfully updated. - if (val) { - *reinterpret_cast(var_ptr) = my_strdup(0, val, MYF(0)); - } else { - *reinterpret_cast(var_ptr) = nullptr; - } - // Our caller (`plugin_var_memalloc_global_update`) will call `my_free` to // free up resources used before. From b3b75b25d79427a62de8fa14ddafbf8c686936ce Mon Sep 17 00:00:00 2001 From: Aliaksei Sandryhaila Date: Fri, 12 Jan 2018 11:13:54 -0800 Subject: [PATCH 0934/1221] Re-record result for rocksdb.show_engine test Upstream commit ID : fb-mysql-5.6.35/eb5874c3bb1e9d58a07eda58650e5969782c57df PS-4476 : Merge prod201801 Percona Server: This commit needlessly advanced the rocksdb submodule commit pointer to a point where it no longer compiles due to the incomplete introduction of a new optimization of FastCRC32. That portion of this commit was dropped. Summary: Re-record result for rocksdb.show_engine test to fix MTR runs update-submodule: rocksdb Reviewed By: hermanlee Differential Revision: D6713425 fbshipit-source-id: fea98ac --- mysql-test/suite/rocksdb/r/show_engine.result | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/mysql-test/suite/rocksdb/r/show_engine.result b/mysql-test/suite/rocksdb/r/show_engine.result index e8629b35112f..cf72c3a75498 100644 --- a/mysql-test/suite/rocksdb/r/show_engine.result +++ b/mysql-test/suite/rocksdb/r/show_engine.result @@ -165,6 +165,7 @@ __system__ TABLE_FACTORY::WHOLE_KEY_FILTERING # __system__ TABLE_FACTORY::VERIFY_COMPRESSION # __system__ TABLE_FACTORY::READ_AMP_BYTES_PER_BIT # __system__ TABLE_FACTORY::FORMAT_VERSION # +__system__ TABLE_FACTORY::ENABLE_INDEX_COMPRESSION # cf_t1 COMPARATOR # cf_t1 MERGE_OPERATOR # cf_t1 COMPACTION_FILTER # @@ -235,6 +236,7 @@ cf_t1 TABLE_FACTORY::WHOLE_KEY_FILTERING # cf_t1 TABLE_FACTORY::VERIFY_COMPRESSION # cf_t1 TABLE_FACTORY::READ_AMP_BYTES_PER_BIT # cf_t1 TABLE_FACTORY::FORMAT_VERSION # +cf_t1 TABLE_FACTORY::ENABLE_INDEX_COMPRESSION # default COMPARATOR # default MERGE_OPERATOR # default COMPACTION_FILTER # @@ -305,6 +307,7 @@ default TABLE_FACTORY::WHOLE_KEY_FILTERING # default TABLE_FACTORY::VERIFY_COMPRESSION # default TABLE_FACTORY::READ_AMP_BYTES_PER_BIT # default TABLE_FACTORY::FORMAT_VERSION # +default TABLE_FACTORY::ENABLE_INDEX_COMPRESSION # rev:cf_t2 COMPARATOR # rev:cf_t2 MERGE_OPERATOR # rev:cf_t2 COMPACTION_FILTER # @@ -375,6 +378,7 @@ rev:cf_t2 TABLE_FACTORY::WHOLE_KEY_FILTERING # rev:cf_t2 TABLE_FACTORY::VERIFY_COMPRESSION # rev:cf_t2 TABLE_FACTORY::READ_AMP_BYTES_PER_BIT # rev:cf_t2 TABLE_FACTORY::FORMAT_VERSION # +rev:cf_t2 TABLE_FACTORY::ENABLE_INDEX_COMPRESSION # DROP TABLE t1; DROP TABLE t2; DROP TABLE t3; From 343fdbfd8f284878b78a377e38664872250daff2 Mon Sep 17 00:00:00 2001 From: Manuel Ung Date: Fri, 12 Jan 2018 15:53:57 -0800 Subject: [PATCH 0935/1221] Revert "Print stack traces before committing suicide" Upstream commit ID : fb-mysql-5.6.35/c58fbfc46cfe93d8d5711b507d21899bd8eccc02 PS-4476 : Merge prod201801 Summary: This reverts commit 02473a20c8f2c95c814e333d189384855dfb74d4. We have 3 stack traces every time we crash, which is too much noise. Using pstack never seemed to have worked anyway. Reviewed By: hermanlee Differential Revision: D6718182 fbshipit-source-id: 83ea751 --- storage/rocksdb/event_listener.cc | 2 +- storage/rocksdb/ha_rocksdb.cc | 12 ++++++------ storage/rocksdb/properties_collector.cc | 4 ++-- storage/rocksdb/rdb_compact_filter.h | 2 +- storage/rocksdb/rdb_datadic.cc | 8 ++++---- storage/rocksdb/rdb_datadic.h | 4 ++-- storage/rocksdb/rdb_i_s.cc | 2 +- storage/rocksdb/rdb_utils.h | 18 +++++++----------- 8 files changed, 24 insertions(+), 28 deletions(-) diff --git a/storage/rocksdb/event_listener.cc b/storage/rocksdb/event_listener.cc index 6ee6268fcf05..2da77a16f684 100644 --- a/storage/rocksdb/event_listener.cc +++ b/storage/rocksdb/event_listener.cc @@ -88,7 +88,7 @@ void Rdb_event_listener::OnBackgroundError( sql_print_error("RocksDB: BackgroundErrorReason: %d", (int)reason); if (status->IsCorruption()) { rdb_persist_corruption_marker(); - abort_with_stack_traces(); + abort(); } } } // namespace myrocks diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index 511e31ff4685..c62a40e2983f 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -4407,7 +4407,7 @@ static ulonglong rdb_get_int_col_max_value(const Field *field) { max_value = 0x20000000000000ULL; break; default: - abort_with_stack_traces(); + abort(); } return max_value; @@ -9882,7 +9882,7 @@ void Rdb_drop_index_thread::run() { "from cf id %u. MyRocks data dictionary may " "get corrupted.", d.cf_id); - abort_with_stack_traces(); + abort(); } rocksdb::ColumnFamilyHandle *cfh = cf_manager.get_cf(d.cf_id); DBUG_ASSERT(cfh); @@ -11994,7 +11994,7 @@ void rdb_handle_io_error(const rocksdb::Status status, rdb_log_status_error(status, "failed to write to WAL"); /* NO_LINT_DEBUG */ sql_print_error("MyRocks: aborting on WAL write error."); - abort_with_stack_traces(); + abort(); break; } case RDB_IO_ERROR_BG_THREAD: { @@ -12005,7 +12005,7 @@ void rdb_handle_io_error(const rocksdb::Status status, rdb_log_status_error(status, "failed on I/O"); /* NO_LINT_DEBUG */ sql_print_error("MyRocks: aborting on I/O error."); - abort_with_stack_traces(); + abort(); break; } default: @@ -12017,14 +12017,14 @@ void rdb_handle_io_error(const rocksdb::Status status, rdb_persist_corruption_marker(); /* NO_LINT_DEBUG */ sql_print_error("MyRocks: aborting because of data corruption."); - abort_with_stack_traces(); + abort(); } else if (!status.ok()) { switch (err_type) { case RDB_IO_ERROR_DICT_COMMIT: { rdb_log_status_error(status, "Failed to write to WAL (dictionary)"); /* NO_LINT_DEBUG */ sql_print_error("MyRocks: aborting on WAL write error."); - abort_with_stack_traces(); + abort(); break; } default: diff --git a/storage/rocksdb/properties_collector.cc b/storage/rocksdb/properties_collector.cc index b7628dccac4b..e5565e29bdca 100644 --- a/storage/rocksdb/properties_collector.cc +++ b/storage/rocksdb/properties_collector.cc @@ -169,7 +169,7 @@ void Rdb_tbl_prop_coll::CollectStatsForRow(const rocksdb::Slice &key, sql_print_error("RocksDB: Unexpected entry type found: %u. " "This should not happen so aborting the system.", type); - abort_with_stack_traces(); + abort(); break; } @@ -362,7 +362,7 @@ int Rdb_index_stats::unmaterialize(const std::string &s, sql_print_error("Index stats version %d was outside of supported range. " "This should not happen so aborting the system.", version); - abort_with_stack_traces(); + abort(); } size_t needed = sizeof(stats.m_gl_index_id.cf_id) + diff --git a/storage/rocksdb/rdb_compact_filter.h b/storage/rocksdb/rdb_compact_filter.h index c457fba4af26..4b1c8c732240 100644 --- a/storage/rocksdb/rdb_compact_filter.h +++ b/storage/rocksdb/rdb_compact_filter.h @@ -166,7 +166,7 @@ class Rdb_compact_filter : public rocksdb::CompactionFilter { sql_print_error("Decoding ttl from PK value failed in compaction filter, " "for index (%u,%u), val: %s", m_prev_index.cf_id, m_prev_index.index_id, buf.c_str()); - abort_with_stack_traces(); + abort(); } /* diff --git a/storage/rocksdb/rdb_datadic.cc b/storage/rocksdb/rdb_datadic.cc index 2b1eedae5cc5..3738780f2069 100644 --- a/storage/rocksdb/rdb_datadic.cc +++ b/storage/rocksdb/rdb_datadic.cc @@ -3528,7 +3528,7 @@ GL_INDEX_ID Rdb_tbl_def::get_autoincr_gl_index_id() { } // Every table must have a primary key, even if it's hidden. - abort_with_stack_traces(); + abort(); return GL_INDEX_ID(); } @@ -4586,7 +4586,7 @@ bool Rdb_dict_manager::get_index_info( "and it may be a bug.", index_info->m_index_dict_version, index_info->m_index_type, index_info->m_kv_version, index_info->m_ttl_duration); - abort_with_stack_traces(); + abort(); } return found; @@ -4849,7 +4849,7 @@ void Rdb_dict_manager::resume_drop_indexes() const { "bug.", max_index_id_in_dict, gl_index_id.cf_id, gl_index_id.index_id); - abort_with_stack_traces(); + abort(); } } } @@ -4898,7 +4898,7 @@ void Rdb_dict_manager::log_start_drop_index(GL_INDEX_ID gl_index_id, "from index id (%u,%u). MyRocks data dictionary may " "get corrupted.", gl_index_id.cf_id, gl_index_id.index_id); - abort_with_stack_traces(); + abort(); } } } diff --git a/storage/rocksdb/rdb_datadic.h b/storage/rocksdb/rdb_datadic.h index 5b79732950a0..05a8f6ead7d8 100644 --- a/storage/rocksdb/rdb_datadic.h +++ b/storage/rocksdb/rdb_datadic.h @@ -1377,7 +1377,7 @@ class Rdb_system_merge_op : public rocksdb::AssociativeMergeOperator { value.size() != RDB_SIZEOF_AUTO_INCREMENT_VERSION + ROCKSDB_SIZEOF_AUTOINC_VALUE || GetVersion(value) > Rdb_key_def::AUTO_INCREMENT_VERSION) { - abort_with_stack_traces(); + abort(); } uint64_t merged_value = Deserialize(value); @@ -1386,7 +1386,7 @@ class Rdb_system_merge_op : public rocksdb::AssociativeMergeOperator { if (existing_value->size() != RDB_SIZEOF_AUTO_INCREMENT_VERSION + ROCKSDB_SIZEOF_AUTOINC_VALUE || GetVersion(*existing_value) > Rdb_key_def::AUTO_INCREMENT_VERSION) { - abort_with_stack_traces(); + abort(); } merged_value = std::max(merged_value, Deserialize(*existing_value)); diff --git a/storage/rocksdb/rdb_i_s.cc b/storage/rocksdb/rdb_i_s.cc index 768a2a5f67e9..88e98600ba34 100644 --- a/storage/rocksdb/rdb_i_s.cc +++ b/storage/rocksdb/rdb_i_s.cc @@ -807,7 +807,7 @@ static int rdb_i_s_global_info_fill_table(my_core::THD *const thd, "from CF with id = %u. MyRocks data dictionary may " "be corrupted.", cf_handle->GetID()); - abort_with_stack_traces(); + abort(); } snprintf(cf_id_buf, INT_BUF_LEN, "%u", cf_handle->GetID()); diff --git a/storage/rocksdb/rdb_utils.h b/storage/rocksdb/rdb_utils.h index f1aecb047462..414696d8965f 100644 --- a/storage/rocksdb/rdb_utils.h +++ b/storage/rocksdb/rdb_utils.h @@ -78,17 +78,13 @@ namespace myrocks { Use the power of SHIP_ASSERT() wisely. */ -#ifndef abort_with_stack_traces -#define abort_with_stack_traces abort -#endif - #ifndef SHIP_ASSERT -#define SHIP_ASSERT(expr) \ - do { \ - if (!(expr)) { \ - my_safe_printf_stderr("\nShip assert failure: \'%s\'\n", #expr); \ - abort_with_stack_traces(); \ - } \ +#define SHIP_ASSERT(expr) \ + do { \ + if (!(expr)) { \ + my_safe_printf_stderr("\nShip assert failure: \'%s\'\n", #expr); \ + abort(); \ + } \ } while (0) #endif // SHIP_ASSERT @@ -240,7 +236,7 @@ inline void rdb_check_mutex_call_result(const char *function_name, // This will hopefully result in a meaningful stack trace which we can use // to efficiently debug the root cause. - abort_with_stack_traces(); + abort(); } } From a42c4a80b0a7773b14dfd0abb0bf124702a3f9c8 Mon Sep 17 00:00:00 2001 From: Manuel Ung Date: Wed, 17 Jan 2018 14:09:32 -0800 Subject: [PATCH 0936/1221] Stabilize rocksdb_rpl.multiclient_2pc Upstream commit ID : fb-mysql-5.6.35/b9f225611ca86d63338a4b4779f1dc31a1ffcb16 PS-4476 : Merge prod201801 Summary: The test fails sporadically because the statement to signal a crash doesn't always return before the crash actually happens, dep Closes #716 Closes https://github.com/facebook/mysql-5.6/pull/787 Reviewed By: Tema Differential Revision: D6740009 Pulled By: Tema fbshipit-source-id: 6360d9c --- mysql-test/suite/rocksdb.rpl/t/disabled.def | 1 - mysql-test/suite/rocksdb.rpl/t/multiclient_2pc.test | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/mysql-test/suite/rocksdb.rpl/t/disabled.def b/mysql-test/suite/rocksdb.rpl/t/disabled.def index 5b0c10d0636d..e69de29bb2d1 100644 --- a/mysql-test/suite/rocksdb.rpl/t/disabled.def +++ b/mysql-test/suite/rocksdb.rpl/t/disabled.def @@ -1 +0,0 @@ -multiclient_2pc : https://github.com/facebook/mysql-5.6/issues/581 & 716 diff --git a/mysql-test/suite/rocksdb.rpl/t/multiclient_2pc.test b/mysql-test/suite/rocksdb.rpl/t/multiclient_2pc.test index 733591fffc47..7082d4fb1fdf 100644 --- a/mysql-test/suite/rocksdb.rpl/t/multiclient_2pc.test +++ b/mysql-test/suite/rocksdb.rpl/t/multiclient_2pc.test @@ -59,6 +59,7 @@ set @@global.sync_binlog = 1; insert into t1 values (1000000, 1, "i_am_just_here_to_trigger_a_flush"); +--error 0,2013 set debug_sync='now SIGNAL go'; --source include/wait_until_disconnected.inc From cc89ad1938965ce5ded4552eaf05891aa66a5e18 Mon Sep 17 00:00:00 2001 From: Manuel Ung Date: Mon, 5 Feb 2018 15:05:13 -0800 Subject: [PATCH 0937/1221] Add rocksdb transaction options for write policy and commit time writebatch Upstream commit ID : fb-mysql-5.6.35/ad6a74de3dbab9db2a644debd8852b24900ae6c3 PS-4476 : Merge prod201801 Summary: This adds two sysvars for MyRocks that controls rocksdb transactions: TransactionDBOptions::write_policy - This is a read only variable that determines when data is written into the database. The default is COMMITTED which means data is written at commit time. TransactionOptions::use_only_the_last_commit_time_batch_for_recovery - This is a dynamic variable that determines whether the commit time write batch is written into the database or not. If the commit time write batch is only useful for recovery, writting to WAL is enough. Reviewed By: hermanlee Differential Revision: D6905729 fbshipit-source-id: 410bd83 --- ...ommit_time_batch_for_recovery_basic.result | 121 ++++++++++++++++++ .../r/rocksdb_write_policy_basic.result | 15 +++ ..._commit_time_batch_for_recovery_basic.test | 21 +++ .../t/rocksdb_write_policy_basic.test | 18 +++ mysql-test/suite/rocksdb/r/rocksdb.result | 2 + storage/rocksdb/ha_rocksdb.cc | 22 ++++ 6 files changed, 199 insertions(+) create mode 100644 mysql-test/suite/rocksdb.sys_vars/r/rocksdb_commit_time_batch_for_recovery_basic.result create mode 100644 mysql-test/suite/rocksdb.sys_vars/r/rocksdb_write_policy_basic.result create mode 100644 mysql-test/suite/rocksdb.sys_vars/t/rocksdb_commit_time_batch_for_recovery_basic.test create mode 100644 mysql-test/suite/rocksdb.sys_vars/t/rocksdb_write_policy_basic.test diff --git a/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_commit_time_batch_for_recovery_basic.result b/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_commit_time_batch_for_recovery_basic.result new file mode 100644 index 000000000000..92203853a8a5 --- /dev/null +++ b/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_commit_time_batch_for_recovery_basic.result @@ -0,0 +1,121 @@ +CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam; +INSERT INTO valid_values VALUES(1); +INSERT INTO valid_values VALUES(0); +INSERT INTO valid_values VALUES('on'); +INSERT INTO valid_values VALUES('off'); +CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam; +INSERT INTO invalid_values VALUES('\'aaa\''); +INSERT INTO invalid_values VALUES('\'bbb\''); +SET @start_global_value = @@global.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY; +SELECT @start_global_value; +@start_global_value +0 +SET @start_session_value = @@session.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY; +SELECT @start_session_value; +@start_session_value +0 +'# Setting to valid values in global scope#' +"Trying to set variable @@global.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY to 1" +SET @@global.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY = 1; +SELECT @@global.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY; +@@global.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY +1 +"Setting the global scope variable back to default" +SET @@global.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY = DEFAULT; +SELECT @@global.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY; +@@global.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY +0 +"Trying to set variable @@global.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY to 0" +SET @@global.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY = 0; +SELECT @@global.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY; +@@global.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY +0 +"Setting the global scope variable back to default" +SET @@global.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY = DEFAULT; +SELECT @@global.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY; +@@global.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY +0 +"Trying to set variable @@global.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY to on" +SET @@global.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY = on; +SELECT @@global.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY; +@@global.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY +1 +"Setting the global scope variable back to default" +SET @@global.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY = DEFAULT; +SELECT @@global.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY; +@@global.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY +0 +"Trying to set variable @@global.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY to off" +SET @@global.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY = off; +SELECT @@global.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY; +@@global.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY +0 +"Setting the global scope variable back to default" +SET @@global.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY = DEFAULT; +SELECT @@global.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY; +@@global.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY +0 +'# Setting to valid values in session scope#' +"Trying to set variable @@session.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY to 1" +SET @@session.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY = 1; +SELECT @@session.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY; +@@session.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY +1 +"Setting the session scope variable back to default" +SET @@session.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY = DEFAULT; +SELECT @@session.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY; +@@session.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY +0 +"Trying to set variable @@session.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY to 0" +SET @@session.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY = 0; +SELECT @@session.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY; +@@session.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY +0 +"Setting the session scope variable back to default" +SET @@session.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY = DEFAULT; +SELECT @@session.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY; +@@session.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY +0 +"Trying to set variable @@session.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY to on" +SET @@session.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY = on; +SELECT @@session.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY; +@@session.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY +1 +"Setting the session scope variable back to default" +SET @@session.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY = DEFAULT; +SELECT @@session.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY; +@@session.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY +0 +"Trying to set variable @@session.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY to off" +SET @@session.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY = off; +SELECT @@session.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY; +@@session.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY +0 +"Setting the session scope variable back to default" +SET @@session.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY = DEFAULT; +SELECT @@session.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY; +@@session.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY +0 +'# Testing with invalid values in global scope #' +"Trying to set variable @@global.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY to 'aaa'" +SET @@global.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY = 'aaa'; +Got one of the listed errors +SELECT @@global.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY; +@@global.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY +0 +"Trying to set variable @@global.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY to 'bbb'" +SET @@global.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY = 'bbb'; +Got one of the listed errors +SELECT @@global.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY; +@@global.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY +0 +SET @@global.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY = @start_global_value; +SELECT @@global.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY; +@@global.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY +0 +SET @@session.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY = @start_session_value; +SELECT @@session.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY; +@@session.ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY +0 +DROP TABLE valid_values; +DROP TABLE invalid_values; diff --git a/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_write_policy_basic.result b/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_write_policy_basic.result new file mode 100644 index 000000000000..1399ed2ee920 --- /dev/null +++ b/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_write_policy_basic.result @@ -0,0 +1,15 @@ +CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam; +INSERT INTO valid_values VALUES(2); +INSERT INTO valid_values VALUES(1); +INSERT INTO valid_values VALUES(0); +CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam; +INSERT INTO invalid_values VALUES('\'aaa\''); +SET @start_global_value = @@global.ROCKSDB_WRITE_POLICY; +SELECT @start_global_value; +@start_global_value +0 +"Trying to set variable @@global.ROCKSDB_WRITE_POLICY to 444. It should fail because it is readonly." +SET @@global.ROCKSDB_WRITE_POLICY = 444; +ERROR HY000: Variable 'rocksdb_write_policy' is a read only variable +DROP TABLE valid_values; +DROP TABLE invalid_values; diff --git a/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_commit_time_batch_for_recovery_basic.test b/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_commit_time_batch_for_recovery_basic.test new file mode 100644 index 000000000000..8899764e09d3 --- /dev/null +++ b/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_commit_time_batch_for_recovery_basic.test @@ -0,0 +1,21 @@ +--source include/have_rocksdb.inc +--source include/have_myisam.inc + +CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam; +INSERT INTO valid_values VALUES(1); +INSERT INTO valid_values VALUES(0); +INSERT INTO valid_values VALUES('on'); +INSERT INTO valid_values VALUES('off'); + +CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam; +INSERT INTO invalid_values VALUES('\'aaa\''); +INSERT INTO invalid_values VALUES('\'bbb\''); + +--let $sys_var=ROCKSDB_COMMIT_TIME_BATCH_FOR_RECOVERY +--let $read_only=0 +--let $session=1 +--let $sticky=1 +--source ../include/rocksdb_sys_var.inc + +DROP TABLE valid_values; +DROP TABLE invalid_values; diff --git a/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_write_policy_basic.test b/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_write_policy_basic.test new file mode 100644 index 000000000000..4d4c1df978a9 --- /dev/null +++ b/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_write_policy_basic.test @@ -0,0 +1,18 @@ +--source include/have_rocksdb.inc +--source include/have_myisam.inc + +CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam; +INSERT INTO valid_values VALUES(2); +INSERT INTO valid_values VALUES(1); +INSERT INTO valid_values VALUES(0); + +CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam; +INSERT INTO invalid_values VALUES('\'aaa\''); + +--let $sys_var=ROCKSDB_WRITE_POLICY +--let $read_only=1 +--let $session=0 +--source ../include/rocksdb_sys_var.inc + +DROP TABLE valid_values; +DROP TABLE invalid_values; diff --git a/mysql-test/suite/rocksdb/r/rocksdb.result b/mysql-test/suite/rocksdb/r/rocksdb.result index 79fa3ad8467b..84e75d09045d 100644 --- a/mysql-test/suite/rocksdb/r/rocksdb.result +++ b/mysql-test/suite/rocksdb/r/rocksdb.result @@ -906,6 +906,7 @@ rocksdb_cache_index_and_filter_blocks ON rocksdb_checksums_pct 100 rocksdb_collect_sst_properties ON rocksdb_commit_in_the_middle OFF +rocksdb_commit_time_batch_for_recovery OFF rocksdb_compact_cf rocksdb_compaction_readahead_size 0 rocksdb_compaction_sequential_deletes 0 @@ -1009,6 +1010,7 @@ rocksdb_whole_key_filtering ON rocksdb_write_batch_max_bytes 0 rocksdb_write_disable_wal OFF rocksdb_write_ignore_missing_column_families OFF +rocksdb_write_policy 0 create table t47 (pk int primary key, col1 varchar(12)) engine=rocksdb; insert into t47 values (1, 'row1'); insert into t47 values (2, 'row2'); diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index c62a40e2983f..7a58d2c09b0d 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -507,6 +507,8 @@ static my_bool rpl_skip_tx_api_var = FALSE; static my_bool rocksdb_print_snapshot_conflict_queries = FALSE; static my_bool rocksdb_large_prefix = FALSE; static my_bool rocksdb_allow_to_start_after_corruption = FALSE; +static uint32_t rocksdb_write_policy = + rocksdb::TxnDBWritePolicy::WRITE_COMMITTED; std::atomic rocksdb_row_lock_deadlocks(0); std::atomic rocksdb_row_lock_wait_timeouts(0); @@ -633,6 +635,11 @@ static MYSQL_THDVAR_ULONG(deadlock_detect_depth, PLUGIN_VAR_RQCMDARG, /*min*/ 2, /*max*/ ULONG_MAX, 0); +static MYSQL_THDVAR_BOOL( + commit_time_batch_for_recovery, PLUGIN_VAR_RQCMDARG, + "TransactionOptions::commit_time_batch_for_recovery for RocksDB", nullptr, + nullptr, FALSE); + static MYSQL_THDVAR_BOOL( trace_sst_api, PLUGIN_VAR_RQCMDARG, "Generate trace output in the log for each call to the SstFileWriter", @@ -770,6 +777,13 @@ static MYSQL_SYSVAR_BOOL( "DBOptions::manual_wal_flush for RocksDB", nullptr, nullptr, rocksdb_db_options->manual_wal_flush); +static MYSQL_SYSVAR_UINT(write_policy, rocksdb_write_policy, + PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY, + "DBOptions::write_policy for RocksDB", nullptr, + nullptr, rocksdb::TxnDBWritePolicy::WRITE_COMMITTED, + rocksdb::TxnDBWritePolicy::WRITE_COMMITTED, + rocksdb::TxnDBWritePolicy::WRITE_UNPREPARED, 0); + static MYSQL_SYSVAR_BOOL( create_missing_column_families, *reinterpret_cast( @@ -1485,6 +1499,7 @@ static struct st_mysql_sys_var *rocksdb_system_variables[] = { MYSQL_SYSVAR(lock_wait_timeout), MYSQL_SYSVAR(deadlock_detect), MYSQL_SYSVAR(deadlock_detect_depth), + MYSQL_SYSVAR(commit_time_batch_for_recovery), MYSQL_SYSVAR(max_row_locks), MYSQL_SYSVAR(write_batch_max_bytes), MYSQL_SYSVAR(lock_scanned_rows), @@ -1506,6 +1521,7 @@ static struct st_mysql_sys_var *rocksdb_system_variables[] = { MYSQL_SYSVAR(concurrent_prepare), MYSQL_SYSVAR(two_write_queues), MYSQL_SYSVAR(manual_wal_flush), + MYSQL_SYSVAR(write_policy), MYSQL_SYSVAR(create_missing_column_families), MYSQL_SYSVAR(error_if_exists), MYSQL_SYSVAR(paranoid_checks), @@ -2498,6 +2514,10 @@ class Rdb_transaction_impl : public Rdb_transaction { tx_opts.lock_timeout = rdb_convert_sec_to_ms(m_timeout_sec); tx_opts.deadlock_detect = THDVAR(m_thd, deadlock_detect); tx_opts.deadlock_detect_depth = THDVAR(m_thd, deadlock_detect_depth); + // If this variable is set, this will write commit time write batch + // information on recovery or memtable flush. + tx_opts.use_only_the_last_commit_time_batch_for_recovery = + THDVAR(m_thd, commit_time_batch_for_recovery); tx_opts.max_write_batch_size = THDVAR(m_thd, write_batch_max_bytes); write_opts.sync = (rocksdb_flush_log_at_trx_commit == FLUSH_LOG_SYNC); @@ -4015,6 +4035,8 @@ static int rocksdb_init_func(void *const p) { rocksdb::TransactionDBOptions tx_db_options; tx_db_options.transaction_lock_timeout = 2; // 2 seconds tx_db_options.custom_mutex_factory = std::make_shared(); + tx_db_options.write_policy = + static_cast(rocksdb_write_policy); status = check_rocksdb_options_compatibility(rocksdb_datadir, main_opts, cf_descr); From b0ddbb815a0a8d1cfc6ffc0d4e2980bd62f755f2 Mon Sep 17 00:00:00 2001 From: Manuel Ung Date: Fri, 9 Feb 2018 14:44:30 -0800 Subject: [PATCH 0938/1221] Always use TransactionDB to do writes Upstream commit ID : fb-mysql-5.6.35/484871e97bc30da05df3a6970666226c535ce580 PS-4476 : Merge prod201801 Summary: To prepare for better transactions in rocksdb, we need to make sure that all writes go through TransactionDB so that transactions can be tracked to determine key visibility. update-submodule: rocksdb Reviewed By: hermanlee Differential Revision: D6955213 fbshipit-source-id: b84e9d0 --- storage/rocksdb/ha_rocksdb.cc | 8 +++++--- storage/rocksdb/rdb_datadic.cc | 6 ++++-- storage/rocksdb/rdb_datadic.h | 5 +++-- storage/rocksdb/rocksdb | 2 +- 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index 7a58d2c09b0d..99a6ba0bd2c5 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -2599,7 +2599,7 @@ class Rdb_transaction_impl : public Rdb_transaction { /* This is a rocksdb write batch. This class doesn't hold or wait on any transaction locks (skips rocksdb transaction API) thus giving better - performance. The commit is done through rdb->GetBaseDB()->Commit(). + performance. Currently this is only used for replication threads which are guaranteed to be non-conflicting. Any further usage of this class should completely @@ -2621,6 +2621,8 @@ class Rdb_writebatch_impl : public Rdb_transaction { bool commit_no_binlog() override { bool res = false; rocksdb::Status s; + rocksdb::TransactionDBWriteOptimizations optimize; + optimize.skip_concurrency_control = true; s = merge_auto_incr_map(m_batch->GetWriteBatch()); if (!s.ok()) { @@ -2631,7 +2633,7 @@ class Rdb_writebatch_impl : public Rdb_transaction { release_snapshot(); - s = rdb->GetBaseDB()->Write(write_opts, m_batch->GetWriteBatch()); + s = rdb->Write(write_opts, optimize, m_batch->GetWriteBatch()); if (!s.ok()) { rdb_handle_io_error(s, RDB_IO_ERROR_TX_COMMIT); res = true; @@ -4060,7 +4062,7 @@ static int rocksdb_init_func(void *const p) { } cf_manager.init(std::move(cf_options_map), &cf_handles); - if (dict_manager.init(rdb->GetBaseDB(), &cf_manager)) { + if (dict_manager.init(rdb, &cf_manager)) { // NO_LINT_DEBUG sql_print_error("RocksDB: Failed to initialize data dictionary."); rdb_open_tables.free_hash(); diff --git a/storage/rocksdb/rdb_datadic.cc b/storage/rocksdb/rdb_datadic.cc index 3738780f2069..dacf40540f19 100644 --- a/storage/rocksdb/rdb_datadic.cc +++ b/storage/rocksdb/rdb_datadic.cc @@ -4328,7 +4328,7 @@ int Rdb_ddl_manager::scan_for_tables(Rdb_tables_scanner *const tables_scanner) { return ret; } -bool Rdb_dict_manager::init(rocksdb::DB *const rdb_dict, +bool Rdb_dict_manager::init(rocksdb::TransactionDB *const rdb_dict, Rdb_cf_manager *const cf_manager) { DBUG_ASSERT(rdb_dict != nullptr); DBUG_ASSERT(cf_manager != nullptr); @@ -4402,7 +4402,9 @@ int Rdb_dict_manager::commit(rocksdb::WriteBatch *const batch, int res = HA_EXIT_SUCCESS; rocksdb::WriteOptions options; options.sync = sync; - rocksdb::Status s = m_db->Write(options, batch); + rocksdb::TransactionDBWriteOptimizations optimize; + optimize.skip_concurrency_control = true; + rocksdb::Status s = m_db->Write(options, optimize, batch); res = !s.ok(); // we return true when something failed if (res) { rdb_handle_io_error(s, RDB_IO_ERROR_DICT_COMMIT); diff --git a/storage/rocksdb/rdb_datadic.h b/storage/rocksdb/rdb_datadic.h index 05a8f6ead7d8..33f43814539a 100644 --- a/storage/rocksdb/rdb_datadic.h +++ b/storage/rocksdb/rdb_datadic.h @@ -1190,7 +1190,7 @@ class Rdb_ddl_manager { class Rdb_dict_manager { private: mysql_mutex_t m_mutex; - rocksdb::DB *m_db = nullptr; + rocksdb::TransactionDB *m_db = nullptr; rocksdb::ColumnFamilyHandle *m_system_cfh = nullptr; /* Utility to put INDEX_INFO and CF_DEFINITION */ @@ -1216,7 +1216,8 @@ class Rdb_dict_manager { Rdb_dict_manager &operator=(const Rdb_dict_manager &) = delete; Rdb_dict_manager() = default; - bool init(rocksdb::DB *const rdb_dict, Rdb_cf_manager *const cf_manager); + bool init(rocksdb::TransactionDB *const rdb_dict, + Rdb_cf_manager *const cf_manager); inline void cleanup() { mysql_mutex_destroy(&m_mutex); } diff --git a/storage/rocksdb/rocksdb b/storage/rocksdb/rocksdb index 8486eab5ad1f..d62af7fa4f42 160000 --- a/storage/rocksdb/rocksdb +++ b/storage/rocksdb/rocksdb @@ -1 +1 @@ -Subproject commit 8486eab5ad1f90a41db093f23514a07cf6e6fc55 +Subproject commit d62af7fa4f42fcb89e23417ca3d3ad49a687800c From b9b592d0fae4a9a47bbce04fe8e32a1506f9d2ff Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Tue, 15 May 2018 16:00:23 -0700 Subject: [PATCH 0939/1221] PS-4476 : Merge prod201801 - As a result of previous commit, upstream merge of fb-mysql-5.6.35/484871e97bc30da05df3a6970666226c535ce580, new CPU architecture specific optimizations are introduced for a '3 way FastCRC32' within RocksDB. In order now for RocksDB files to compile within MyRocks, additional compiler check and flag is needed. --- storage/rocksdb/CMakeLists.txt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/storage/rocksdb/CMakeLists.txt b/storage/rocksdb/CMakeLists.txt index 2a0a612d9d89..cd2b1a496d86 100644 --- a/storage/rocksdb/CMakeLists.txt +++ b/storage/rocksdb/CMakeLists.txt @@ -71,14 +71,19 @@ IF(HAVE_SCHED_GETCPU) ADD_DEFINITIONS(-DHAVE_SCHED_GETCPU=1 -DROCKSDB_SCHED_GETCPU_PRESENT) ENDIF() -SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.2") +SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.2 -mpclmul") SET(CMAKE_REQUIRED_FLAGS "${CMAKE_CXX_FLAGS} --std=c++11") INCLUDE(CheckCXXSourceCompiles) CHECK_CXX_SOURCE_COMPILES(" #include #include +#include int main() { volatile uint32_t x __attribute__((unused)) = _mm_crc32_u32(0, 0); + const auto a = _mm_set_epi64x(0, 0); + const auto b = _mm_set_epi64x(0, 0); + const auto c = _mm_clmulepi64_si128(a, b, 0x00); + auto d = _mm_cvtsi128_si64(c); } " HAVE_SSE42) IF (HAVE_SSE42) From effbb379efd1e6b9c98b1f68e695b05051a2bfa1 Mon Sep 17 00:00:00 2001 From: Herman Lee Date: Thu, 15 Feb 2018 07:44:22 -0800 Subject: [PATCH 0940/1221] rocksdb_cf_options test_case should not be truncating error log Upstream commit ID : fb-mysql-5.6.35/d6724a44a6a209e73ffd418eb3df69fdc6c0e6f9 PS-4476 : Merge prod201801 Summary: Remove line from testcase that truncates the error log. Reviewed By: asandryh Differential Revision: D7003183 fbshipit-source-id: fee5993 --- mysql-test/suite/rocksdb/t/rocksdb_cf_options.test | 2 -- 1 file changed, 2 deletions(-) diff --git a/mysql-test/suite/rocksdb/t/rocksdb_cf_options.test b/mysql-test/suite/rocksdb/t/rocksdb_cf_options.test index dbf8bd9a9f9b..b9355f7b45ca 100644 --- a/mysql-test/suite/rocksdb/t/rocksdb_cf_options.test +++ b/mysql-test/suite/rocksdb/t/rocksdb_cf_options.test @@ -34,11 +34,9 @@ select cf_name, option_type, value order by cf_name, option_type; # restart with cf configs for cf1 and cf2 ---exec echo "" > $MYSQLTEST_VARDIR/log/mysqld.1.err --let $restart_parameters=restart:--rocksdb_override_cf_options=cf1={write_buffer_size=8m;target_file_size_base=2m};cf2={write_buffer_size=16m;max_bytes_for_level_multiplier=8};z={target_file_size_base=4m}; --source include/restart_mysqld.inc - # check column family options in log -- should reflect individual settings --echo From fb69c3310252fd6c70740cd4a20428af7ab3b446 Mon Sep 17 00:00:00 2001 From: Herman Lee Date: Thu, 15 Feb 2018 11:27:14 -0800 Subject: [PATCH 0941/1221] Fix rocksdb.collation and remove truncation of error log Upstream commit ID : fb-mysql-5.6.35/2376cf63b2459d0e79bd950e0886e282397004b8 PS-4476 : Merge prod201801 Summary: Remove error log truncation from collation.test Reviewed By: asandryh Differential Revision: D7003186 fbshipit-source-id: c50dc99 --- mysql-test/suite/rocksdb/r/collation.result | 1 + mysql-test/suite/rocksdb/t/collation.test | 2 ++ 2 files changed, 3 insertions(+) diff --git a/mysql-test/suite/rocksdb/r/collation.result b/mysql-test/suite/rocksdb/r/collation.result index 54e04f388b6e..bb9b855d9683 100644 --- a/mysql-test/suite/rocksdb/r/collation.result +++ b/mysql-test/suite/rocksdb/r/collation.result @@ -1,3 +1,4 @@ +call mtr.add_suppression("Invalid pattern"); CREATE TABLE t1 (id INT PRIMARY KEY, value VARCHAR(50), value2 VARBINARY(50), value3 TEXT) ENGINE=ROCKSDB CHARSET UTF8; DROP TABLE t1; CREATE TABLE t1 (id INT PRIMARY KEY, value VARCHAR(50), value2 VARBINARY(50), value3 TEXT, INDEX(value)) ENGINE=ROCKSDB CHARSET UTF8; diff --git a/mysql-test/suite/rocksdb/t/collation.test b/mysql-test/suite/rocksdb/t/collation.test index e9c39b8868c3..128d2de6f1a1 100644 --- a/mysql-test/suite/rocksdb/t/collation.test +++ b/mysql-test/suite/rocksdb/t/collation.test @@ -3,6 +3,8 @@ # rocksdb_strict_collation_exceptions --source include/have_rocksdb.inc +call mtr.add_suppression("Invalid pattern"); + # ci non-indexed column is allowed CREATE TABLE t1 (id INT PRIMARY KEY, value VARCHAR(50), value2 VARBINARY(50), value3 TEXT) ENGINE=ROCKSDB CHARSET UTF8; DROP TABLE t1; From 06608156ac9770f9434cba561943dd4e80356301 Mon Sep 17 00:00:00 2001 From: Herman Lee Date: Thu, 15 Feb 2018 11:37:59 -0800 Subject: [PATCH 0942/1221] Remove truncating error log from rocksdb.validate_datadic test Upstream commit ID : fb-mysql-5.6.35/2b40678530ae84fd71367a2109af5f3d4054e473 PS-4476 : Merge prod201801 This is a NULL cherry-pick to Percona Server 5.7 to create the commit placeholder for the corresponding upstream commit. Reason: Patch not taken into Percona Server and MyRocks affected code already applied to source tree through another patch. From 3785ae5279376161da449eb861f7272250462b20 Mon Sep 17 00:00:00 2001 From: Herman Lee Date: Thu, 15 Feb 2018 11:50:52 -0800 Subject: [PATCH 0943/1221] Remove truncating error log from rocksdb.prefix_extractor_override test Upstream commit ID : fb-mysql-5.6.35/2a10b62fdb3abf2cf08da79d62d7dfd8e12c8685 PS-4476 : Merge prod201801 This is a NULL cherry-pick to Percona Server 5.7 to create the commit placeholder for the corresponding upstream commit. Reason: Patch not taken into Percona Server and MyRocks affected code already applied to source tree through another patch. From 1c4f0dbf5c11e0bd79607f01e56ad184169ca2e2 Mon Sep 17 00:00:00 2001 From: Herman Lee Date: Thu, 15 Feb 2018 12:00:27 -0800 Subject: [PATCH 0944/1221] Remove truncate error log from rocksdb.rocksdb_checksums test Upstream commit ID : fb-mysql-5.6.35/f0cbe47e1b2dcdc8f8f9ca89f6b0fc8faab85e17 PS-4476 : Merge prod201801 Summary: Restart the test using a new error log instead of truncating the old error log. Also reduce the number of rows from 10000 to 4000 to speed up the test. Reviewed By: asandryh Differential Revision: D7003203 fbshipit-source-id: 6b830ce --- mysql-test/suite/rocksdb/r/rocksdb_checksums.result | 3 --- mysql-test/suite/rocksdb/t/rocksdb_checksums.test | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/mysql-test/suite/rocksdb/r/rocksdb_checksums.result b/mysql-test/suite/rocksdb/r/rocksdb_checksums.result index c244469fbff5..6fe3640b494d 100644 --- a/mysql-test/suite/rocksdb/r/rocksdb_checksums.result +++ b/mysql-test/suite/rocksdb/r/rocksdb_checksums.result @@ -37,9 +37,6 @@ create table t4 (pk int primary key, a int, b int, key(a), key(b)) engine=rocksd check table t4; Table Op Msg_type Msg_text rocksdb_checksums_test.t4 check status OK -10000 index entries had around 500 checksums -10000 index entries had around 500 checksums -Around 500 table records had checksums set session rocksdb_checksums_pct=100; # # Ok, table t2 has all rows with checksums. Simulate a few checksum mismatches. diff --git a/mysql-test/suite/rocksdb/t/rocksdb_checksums.test b/mysql-test/suite/rocksdb/t/rocksdb_checksums.test index 32f46516b50f..6c999f8297c3 100644 --- a/mysql-test/suite/rocksdb/t/rocksdb_checksums.test +++ b/mysql-test/suite/rocksdb/t/rocksdb_checksums.test @@ -84,7 +84,7 @@ create table t4 (pk int primary key, a int, b int, key(a), key(b)) engine=rocksd --disable_query_log let $i=0; let $x= 100000; -while ($i<10000) +while ($i<4000) { inc $i; eval insert t4(pk,a,b) values($i, $i, $i div 10); From b035789d665dac5f3cf47d16cf1fe479a7edcb11 Mon Sep 17 00:00:00 2001 From: Roberto Rodriguez Alcala Date: Tue, 20 Feb 2018 10:45:52 -0800 Subject: [PATCH 0945/1221] Abort rocksdb startup if O_DIRECT is requested but not supported Upstream commit ID : fb-mysql-5.6.35/bcd7519d0149a9dd946263b80f3a114625897420 PS-4476 : Merge prod201801 Summary: This change adds a check to see whether the filesystem backing rocksdb_datadir allows O_DIRECT when use_direct_reads is true and prevents rocksdb from coming up. This fixes https://github.com/facebook/mysql-5.6/issues/778 Closes https://github.com/facebook/mysql-5.6/pull/793 Differential Revision: D6995213 Pulled By: rralcala fbshipit-source-id: f0da21c --- .../suite/rocksdb/r/use_direct_reads.result | 20 +++++++++++ .../suite/rocksdb/t/use_direct_reads.test | 36 +++++++++++++++++++ storage/rocksdb/ha_rocksdb.cc | 30 ++++++++++++++++ 3 files changed, 86 insertions(+) create mode 100644 mysql-test/suite/rocksdb/r/use_direct_reads.result create mode 100644 mysql-test/suite/rocksdb/t/use_direct_reads.test diff --git a/mysql-test/suite/rocksdb/r/use_direct_reads.result b/mysql-test/suite/rocksdb/r/use_direct_reads.result new file mode 100644 index 000000000000..98e43a5cac36 --- /dev/null +++ b/mysql-test/suite/rocksdb/r/use_direct_reads.result @@ -0,0 +1,20 @@ +Checking direct reads +# restart:--rocksdb_use_direct_reads=1 +CREATE TABLE t1 (pk INT PRIMARY KEY DEFAULT '0', a INT(11), b CHAR(8)) ENGINE=rocksdb; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `pk` int(11) NOT NULL DEFAULT '0', + `a` int(11) DEFAULT NULL, + `b` char(8) DEFAULT NULL, + PRIMARY KEY (`pk`) +) ENGINE=ROCKSDB DEFAULT CHARSET=latin1 +INSERT INTO t1 VALUES (1, 1,'a'); +INSERT INTO t1 (a,b) VALUES (2,'b'); +set global rocksdb_force_flush_memtable_now=1; +SELECT a,b FROM t1; +a b +1 a +2 b +DROP TABLE t1; +# restart diff --git a/mysql-test/suite/rocksdb/t/use_direct_reads.test b/mysql-test/suite/rocksdb/t/use_direct_reads.test new file mode 100644 index 000000000000..af027b3912bb --- /dev/null +++ b/mysql-test/suite/rocksdb/t/use_direct_reads.test @@ -0,0 +1,36 @@ +--source include/have_rocksdb.inc + +--perl +use Cwd 'abs_path'; + +open(FILE, ">", "$ENV{MYSQL_TMP_DIR}/data_in_shm.inc") or die; +my $real_path= abs_path($ENV{'MYSQLTEST_VARDIR'}); +my $in_shm= index($real_path, "/dev/shm") != -1; +print FILE "let \$DATA_IN_SHM= $in_shm;\n"; +close FILE; +EOF + +--source $MYSQL_TMP_DIR/data_in_shm.inc +--remove_file $MYSQL_TMP_DIR/data_in_shm.inc + +if ($DATA_IN_SHM) +{ + --skip DATADIR is in /dev/shm, possibly due to --mem +} + +--echo Checking direct reads +--let $restart_parameters=restart:--rocksdb_use_direct_reads=1 +--source include/restart_mysqld.inc + +CREATE TABLE t1 (pk INT PRIMARY KEY DEFAULT '0', a INT(11), b CHAR(8)) ENGINE=rocksdb; +SHOW CREATE TABLE t1; +INSERT INTO t1 VALUES (1, 1,'a'); +INSERT INTO t1 (a,b) VALUES (2,'b'); +set global rocksdb_force_flush_memtable_now=1; +--sorted_result +SELECT a,b FROM t1; +DROP TABLE t1; + +# cleanup +--let $restart_parameters= +--source include/restart_mysqld.inc diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index 99a6ba0bd2c5..f45d33ee4db1 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -3881,6 +3881,36 @@ static int rocksdb_init_func(void *const p) { DBUG_RETURN(HA_EXIT_FAILURE); } + // Check whether the filesystem backing rocksdb_datadir allows O_DIRECT + if (rocksdb_db_options->use_direct_reads) { + rocksdb::EnvOptions soptions; + rocksdb::Status check_status; + rocksdb::Env *const env = rocksdb_db_options->env; + + std::string fname = format_string("%s/DIRECT_CHECK", rocksdb_datadir); + if (env->FileExists(fname).ok()) { + std::unique_ptr file; + soptions.use_direct_reads = true; + check_status = env->NewSequentialFile(fname, &file, soptions); + } else { + std::unique_ptr file; + soptions.use_direct_writes = true; + check_status = env->ReopenWritableFile(fname, &file, soptions); + if (file != nullptr) { + file->Close(); + } + env->DeleteFile(fname); + } + + if (!check_status.ok()) { + sql_print_error("RocksDB: Unable to use direct io in rocksdb-datadir:" + "(%s)", + check_status.getState()); + rdb_open_tables.free_hash(); + DBUG_RETURN(HA_EXIT_FAILURE); + } + } + if (rocksdb_db_options->allow_mmap_writes && rocksdb_db_options->use_direct_io_for_flush_and_compaction) { // See above comment for allow_mmap_reads. (NO_LINT_DEBUG) From d30b548c66f8fe88ac5f90833ffb541df50a03f8 Mon Sep 17 00:00:00 2001 From: Herman Lee Date: Fri, 9 Feb 2018 11:20:39 -0800 Subject: [PATCH 0946/1221] Enable bulk_load of secondary keys Upstream commit ID : fb-mysql-5.6.35/2ddebe145b6a9b25bf4f0fd84dab7c8872a03482 PS-4476 : Merge prod201801 Summary: If rocksdb_bulk_load_allow_sk is enabled, then allow secondary keys to be added using the bulk loading feature. Reviewed By: lth Differential Revision: D6953296 fbshipit-source-id: 5c60eeb --- .../r/rocksdb_bulk_load_allow_sk_basic.result | 100 ++++++++ .../t/rocksdb_bulk_load_allow_sk_basic.test | 19 ++ .../suite/rocksdb/r/add_index_inplace.result | 3 + .../suite/rocksdb/r/bulk_load_sk.result | 230 ++++++++++++++++++ mysql-test/suite/rocksdb/r/rocksdb.result | 1 + mysql-test/suite/rocksdb/t/bulk_load_sk.test | 123 ++++++++++ storage/rocksdb/ha_rocksdb.cc | 31 ++- storage/rocksdb/ha_rocksdb.h | 2 +- 8 files changed, 502 insertions(+), 7 deletions(-) create mode 100644 mysql-test/suite/rocksdb.sys_vars/r/rocksdb_bulk_load_allow_sk_basic.result create mode 100644 mysql-test/suite/rocksdb.sys_vars/t/rocksdb_bulk_load_allow_sk_basic.test create mode 100644 mysql-test/suite/rocksdb/r/bulk_load_sk.result create mode 100644 mysql-test/suite/rocksdb/t/bulk_load_sk.test diff --git a/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_bulk_load_allow_sk_basic.result b/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_bulk_load_allow_sk_basic.result new file mode 100644 index 000000000000..c0d09d89c11e --- /dev/null +++ b/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_bulk_load_allow_sk_basic.result @@ -0,0 +1,100 @@ +CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam; +INSERT INTO valid_values VALUES(1); +INSERT INTO valid_values VALUES(0); +INSERT INTO valid_values VALUES('on'); +CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam; +INSERT INTO invalid_values VALUES('\'aaa\''); +INSERT INTO invalid_values VALUES('\'bbb\''); +SET @start_global_value = @@global.ROCKSDB_BULK_LOAD_ALLOW_SK; +SELECT @start_global_value; +@start_global_value +0 +SET @start_session_value = @@session.ROCKSDB_BULK_LOAD_ALLOW_SK; +SELECT @start_session_value; +@start_session_value +0 +'# Setting to valid values in global scope#' +"Trying to set variable @@global.ROCKSDB_BULK_LOAD_ALLOW_SK to 1" +SET @@global.ROCKSDB_BULK_LOAD_ALLOW_SK = 1; +SELECT @@global.ROCKSDB_BULK_LOAD_ALLOW_SK; +@@global.ROCKSDB_BULK_LOAD_ALLOW_SK +1 +"Setting the global scope variable back to default" +SET @@global.ROCKSDB_BULK_LOAD_ALLOW_SK = DEFAULT; +SELECT @@global.ROCKSDB_BULK_LOAD_ALLOW_SK; +@@global.ROCKSDB_BULK_LOAD_ALLOW_SK +0 +"Trying to set variable @@global.ROCKSDB_BULK_LOAD_ALLOW_SK to 0" +SET @@global.ROCKSDB_BULK_LOAD_ALLOW_SK = 0; +SELECT @@global.ROCKSDB_BULK_LOAD_ALLOW_SK; +@@global.ROCKSDB_BULK_LOAD_ALLOW_SK +0 +"Setting the global scope variable back to default" +SET @@global.ROCKSDB_BULK_LOAD_ALLOW_SK = DEFAULT; +SELECT @@global.ROCKSDB_BULK_LOAD_ALLOW_SK; +@@global.ROCKSDB_BULK_LOAD_ALLOW_SK +0 +"Trying to set variable @@global.ROCKSDB_BULK_LOAD_ALLOW_SK to on" +SET @@global.ROCKSDB_BULK_LOAD_ALLOW_SK = on; +SELECT @@global.ROCKSDB_BULK_LOAD_ALLOW_SK; +@@global.ROCKSDB_BULK_LOAD_ALLOW_SK +1 +"Setting the global scope variable back to default" +SET @@global.ROCKSDB_BULK_LOAD_ALLOW_SK = DEFAULT; +SELECT @@global.ROCKSDB_BULK_LOAD_ALLOW_SK; +@@global.ROCKSDB_BULK_LOAD_ALLOW_SK +0 +'# Setting to valid values in session scope#' +"Trying to set variable @@session.ROCKSDB_BULK_LOAD_ALLOW_SK to 1" +SET @@session.ROCKSDB_BULK_LOAD_ALLOW_SK = 1; +SELECT @@session.ROCKSDB_BULK_LOAD_ALLOW_SK; +@@session.ROCKSDB_BULK_LOAD_ALLOW_SK +1 +"Setting the session scope variable back to default" +SET @@session.ROCKSDB_BULK_LOAD_ALLOW_SK = DEFAULT; +SELECT @@session.ROCKSDB_BULK_LOAD_ALLOW_SK; +@@session.ROCKSDB_BULK_LOAD_ALLOW_SK +0 +"Trying to set variable @@session.ROCKSDB_BULK_LOAD_ALLOW_SK to 0" +SET @@session.ROCKSDB_BULK_LOAD_ALLOW_SK = 0; +SELECT @@session.ROCKSDB_BULK_LOAD_ALLOW_SK; +@@session.ROCKSDB_BULK_LOAD_ALLOW_SK +0 +"Setting the session scope variable back to default" +SET @@session.ROCKSDB_BULK_LOAD_ALLOW_SK = DEFAULT; +SELECT @@session.ROCKSDB_BULK_LOAD_ALLOW_SK; +@@session.ROCKSDB_BULK_LOAD_ALLOW_SK +0 +"Trying to set variable @@session.ROCKSDB_BULK_LOAD_ALLOW_SK to on" +SET @@session.ROCKSDB_BULK_LOAD_ALLOW_SK = on; +SELECT @@session.ROCKSDB_BULK_LOAD_ALLOW_SK; +@@session.ROCKSDB_BULK_LOAD_ALLOW_SK +1 +"Setting the session scope variable back to default" +SET @@session.ROCKSDB_BULK_LOAD_ALLOW_SK = DEFAULT; +SELECT @@session.ROCKSDB_BULK_LOAD_ALLOW_SK; +@@session.ROCKSDB_BULK_LOAD_ALLOW_SK +0 +'# Testing with invalid values in global scope #' +"Trying to set variable @@global.ROCKSDB_BULK_LOAD_ALLOW_SK to 'aaa'" +SET @@global.ROCKSDB_BULK_LOAD_ALLOW_SK = 'aaa'; +Got one of the listed errors +SELECT @@global.ROCKSDB_BULK_LOAD_ALLOW_SK; +@@global.ROCKSDB_BULK_LOAD_ALLOW_SK +0 +"Trying to set variable @@global.ROCKSDB_BULK_LOAD_ALLOW_SK to 'bbb'" +SET @@global.ROCKSDB_BULK_LOAD_ALLOW_SK = 'bbb'; +Got one of the listed errors +SELECT @@global.ROCKSDB_BULK_LOAD_ALLOW_SK; +@@global.ROCKSDB_BULK_LOAD_ALLOW_SK +0 +SET @@global.ROCKSDB_BULK_LOAD_ALLOW_SK = @start_global_value; +SELECT @@global.ROCKSDB_BULK_LOAD_ALLOW_SK; +@@global.ROCKSDB_BULK_LOAD_ALLOW_SK +0 +SET @@session.ROCKSDB_BULK_LOAD_ALLOW_SK = @start_session_value; +SELECT @@session.ROCKSDB_BULK_LOAD_ALLOW_SK; +@@session.ROCKSDB_BULK_LOAD_ALLOW_SK +0 +DROP TABLE valid_values; +DROP TABLE invalid_values; diff --git a/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_bulk_load_allow_sk_basic.test b/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_bulk_load_allow_sk_basic.test new file mode 100644 index 000000000000..f5ed9682cb66 --- /dev/null +++ b/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_bulk_load_allow_sk_basic.test @@ -0,0 +1,19 @@ +--source include/have_rocksdb.inc +--source include/have_myisam.inc + +CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam; +INSERT INTO valid_values VALUES(1); +INSERT INTO valid_values VALUES(0); +INSERT INTO valid_values VALUES('on'); + +CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam; +INSERT INTO invalid_values VALUES('\'aaa\''); +INSERT INTO invalid_values VALUES('\'bbb\''); + +--let $sys_var=ROCKSDB_BULK_LOAD_ALLOW_SK +--let $read_only=0 +--let $session=1 +--source ../include/rocksdb_sys_var.inc + +DROP TABLE valid_values; +DROP TABLE invalid_values; diff --git a/mysql-test/suite/rocksdb/r/add_index_inplace.result b/mysql-test/suite/rocksdb/r/add_index_inplace.result index 8c583ec58b34..dbc4c6f5f43b 100644 --- a/mysql-test/suite/rocksdb/r/add_index_inplace.result +++ b/mysql-test/suite/rocksdb/r/add_index_inplace.result @@ -295,11 +295,13 @@ set global rocksdb_bulk_load=1; show global variables like 'rocksdb_bulk_load%'; Variable_name Value rocksdb_bulk_load ON +rocksdb_bulk_load_allow_sk OFF rocksdb_bulk_load_allow_unsorted OFF rocksdb_bulk_load_size 1000 show session variables like 'rocksdb_bulk_load%'; Variable_name Value rocksdb_bulk_load ON +rocksdb_bulk_load_allow_sk OFF rocksdb_bulk_load_allow_unsorted OFF rocksdb_bulk_load_size 1000 CREATE TABLE t1 (i INT, j INT, PRIMARY KEY (i)) ENGINE = ROCKSDB; @@ -343,6 +345,7 @@ SET session rocksdb_merge_buf_size = 340; show variables like 'rocksdb_bulk_load%'; Variable_name Value rocksdb_bulk_load OFF +rocksdb_bulk_load_allow_sk OFF rocksdb_bulk_load_allow_unsorted OFF rocksdb_bulk_load_size 1000 CREATE TABLE t1 (a VARCHAR(80)) ENGINE=RocksDB; diff --git a/mysql-test/suite/rocksdb/r/bulk_load_sk.result b/mysql-test/suite/rocksdb/r/bulk_load_sk.result new file mode 100644 index 000000000000..07b27e6a9c36 --- /dev/null +++ b/mysql-test/suite/rocksdb/r/bulk_load_sk.result @@ -0,0 +1,230 @@ +set session transaction_isolation='READ-COMMITTED'; +SET rocksdb_bulk_load_size=15; +CREATE TABLE t4 (a INT, b INT, c INT, +PRIMARY KEY (a), +KEY (b), +KEY (c) COMMENT "rev:cf") ENGINE=ROCKSDB; +CREATE TABLE t3 (a INT, b INT, c INT, +PRIMARY KEY (a), +KEY (b), +KEY (c) COMMENT "rev:cf") ENGINE=ROCKSDB; +CREATE TABLE t2 (a INT, b INT, c INT, +PRIMARY KEY (a), +KEY (b), +KEY (c) COMMENT "rev:cf") ENGINE=ROCKSDB; +CREATE TABLE t1 (a INT, b INT, c INT, +PRIMARY KEY (a), +KEY (b), +KEY (c) COMMENT "rev:cf") ENGINE=ROCKSDB; +SET rocksdb_bulk_load=1; +INSERT INTO t1 SELECT * FROM t3 FORCE INDEX (PRIMARY) ORDER BY a; +SELECT count(*) FROM t1 FORCE INDEX (PRIMARY); +count(*) +0 +SELECT count(*) FROM t1 FORCE INDEX (b); +count(*) +10 +SELECT count(*) FROM t1 FORCE INDEX (c); +count(*) +10 +SET rocksdb_bulk_load=0; +SELECT * FROM t1 FORCE INDEX (PRIMARY); +a b c +-9 11 11 +-7 9 9 +-5 7 7 +-3 5 5 +-1 3 3 +2 0 0 +4 -2 -2 +6 -4 -4 +8 -6 -6 +10 -8 -8 +SELECT b FROM t1 FORCE INDEX (b); +b +-8 +-6 +-4 +-2 +0 +3 +5 +7 +9 +11 +SELECT c FROM t1 FORCE INDEX (c); +c +-8 +-6 +-4 +-2 +0 +3 +5 +7 +9 +11 +Checksums should match +CHECKSUM TABLE t3; +Table Checksum +test.t3 3862424802 +CHECKSUM TABLE t1; +Table Checksum +test.t1 3862424802 +SET rocksdb_bulk_load_allow_sk=1; +SET rocksdb_bulk_load=1; +INSERT INTO t4 SELECT * FROM t3 FORCE INDEX (PRIMARY) ORDER BY a; +SELECT count(*) FROM t4 FORCE INDEX (PRIMARY); +count(*) +0 +SELECT count(*) FROM t4 FORCE INDEX (b); +count(*) +0 +SELECT count(*) FROM t4 FORCE INDEX (c); +count(*) +0 +SET rocksdb_bulk_load=0; +SELECT * FROM t4 FORCE INDEX (PRIMARY); +a b c +-9 11 11 +-7 9 9 +-5 7 7 +-3 5 5 +-1 3 3 +2 0 0 +4 -2 -2 +6 -4 -4 +8 -6 -6 +10 -8 -8 +SELECT b FROM t4 FORCE INDEX (b); +b +-8 +-6 +-4 +-2 +0 +3 +5 +7 +9 +11 +SELECT c FROM t4 FORCE INDEX (c); +c +-8 +-6 +-4 +-2 +0 +3 +5 +7 +9 +11 +Checksums should match +CHECKSUM TABLE t3; +Table Checksum +test.t3 3862424802 +CHECKSUM TABLE t4; +Table Checksum +test.t4 3862424802 +SET rocksdb_bulk_load_allow_unsorted=1; +SET rocksdb_bulk_load_allow_sk=1; +SET rocksdb_bulk_load=1; +INSERT INTO t2 SELECT * FROM t3 WHERE b >= 0 ORDER BY b; +INSERT INTO t2 SELECT * FROM t3 WHERE b < 0 ORDER BY b; +SELECT count(*) FROM t2 FORCE INDEX (PRIMARY); +count(*) +0 +SELECT count(*) FROM t2 FORCE INDEX (b); +count(*) +0 +SELECT count(*) FROM t2 FORCE INDEX (c); +count(*) +0 +SELECT count(*) FROM t2 FORCE INDEX (PRIMARY); +count(*) +0 +SELECT count(*) FROM t2 FORCE INDEX (b); +count(*) +0 +SELECT count(*) FROM t2 FORCE INDEX (c); +count(*) +0 +SET rocksdb_bulk_load=0; +SELECT * FROM t2 FORCE INDEX (PRIMARY); +a b c +-19 21 21 +-17 19 19 +-15 17 17 +-13 15 15 +-11 13 13 +-9 11 11 +-7 9 9 +-5 7 7 +-3 5 5 +-1 3 3 +2 0 0 +4 -2 -2 +6 -4 -4 +8 -6 -6 +10 -8 -8 +12 -10 -10 +14 -12 -12 +16 -14 -14 +18 -16 -16 +20 -18 -18 +SELECT b FROM t2 FORCE INDEX (b); +b +-18 +-16 +-14 +-12 +-10 +-8 +-6 +-4 +-2 +0 +3 +5 +7 +9 +11 +13 +15 +17 +19 +21 +SELECT c FROM t2 FORCE INDEX (c); +c +-18 +-16 +-14 +-12 +-10 +-8 +-6 +-4 +-2 +0 +3 +5 +7 +9 +11 +13 +15 +17 +19 +21 +Checksums should match +CHECKSUM TABLE t3; +Table Checksum +test.t3 1495594118 +CHECKSUM TABLE t2; +Table Checksum +test.t2 1495594118 +DROP TABLE t1; +DROP TABLE t2; +DROP TABLE t3; +DROP TABLE t4; diff --git a/mysql-test/suite/rocksdb/r/rocksdb.result b/mysql-test/suite/rocksdb/r/rocksdb.result index 84e75d09045d..c1858a6990bd 100644 --- a/mysql-test/suite/rocksdb/r/rocksdb.result +++ b/mysql-test/suite/rocksdb/r/rocksdb.result @@ -899,6 +899,7 @@ rocksdb_block_restart_interval 16 rocksdb_block_size 4096 rocksdb_block_size_deviation 10 rocksdb_bulk_load OFF +rocksdb_bulk_load_allow_sk OFF rocksdb_bulk_load_allow_unsorted OFF rocksdb_bulk_load_size 1000 rocksdb_bytes_per_sync 0 diff --git a/mysql-test/suite/rocksdb/t/bulk_load_sk.test b/mysql-test/suite/rocksdb/t/bulk_load_sk.test new file mode 100644 index 000000000000..88cf1e549432 --- /dev/null +++ b/mysql-test/suite/rocksdb/t/bulk_load_sk.test @@ -0,0 +1,123 @@ +--source include/have_rocksdb.inc + +# MyRocks does not support gap locks in REPEATABLE-READ mode, test does not +# require RR ISO to complete, so lets alter the ISO to RC +set session transaction_isolation='READ-COMMITTED'; + +SET rocksdb_bulk_load_size=15; + +CREATE TABLE t4 (a INT, b INT, c INT, + PRIMARY KEY (a), + KEY (b), + KEY (c) COMMENT "rev:cf") ENGINE=ROCKSDB; +CREATE TABLE t3 (a INT, b INT, c INT, + PRIMARY KEY (a), + KEY (b), + KEY (c) COMMENT "rev:cf") ENGINE=ROCKSDB; +CREATE TABLE t2 (a INT, b INT, c INT, + PRIMARY KEY (a), + KEY (b), + KEY (c) COMMENT "rev:cf") ENGINE=ROCKSDB; +CREATE TABLE t1 (a INT, b INT, c INT, + PRIMARY KEY (a), + KEY (b), + KEY (c) COMMENT "rev:cf") ENGINE=ROCKSDB; + +### Setup the control table ### +--disable_query_log +let $sign = 1; +let $max = 10; +let $i = 1; +while ($i <= $max) { + let $a = 1 + $sign * $i; + let $b = 1 - $sign * $i; + let $sign = -$sign; + let $insert = INSERT INTO t3 VALUES ($a, $b, $b); + eval $insert; + inc $i; +} +--enable_query_log + +### Bulk load PK only ### +SET rocksdb_bulk_load=1; +INSERT INTO t1 SELECT * FROM t3 FORCE INDEX (PRIMARY) ORDER BY a; +SELECT count(*) FROM t1 FORCE INDEX (PRIMARY); +SELECT count(*) FROM t1 FORCE INDEX (b); +SELECT count(*) FROM t1 FORCE INDEX (c); +SET rocksdb_bulk_load=0; +SELECT * FROM t1 FORCE INDEX (PRIMARY); +SELECT b FROM t1 FORCE INDEX (b); +SELECT c FROM t1 FORCE INDEX (c); +--echo Checksums should match +CHECKSUM TABLE t3; +CHECKSUM TABLE t1; + +### Bulk load PK and SK but require PK order ### +SET rocksdb_bulk_load_allow_sk=1; +SET rocksdb_bulk_load=1; +INSERT INTO t4 SELECT * FROM t3 FORCE INDEX (PRIMARY) ORDER BY a; +SELECT count(*) FROM t4 FORCE INDEX (PRIMARY); +SELECT count(*) FROM t4 FORCE INDEX (b); +SELECT count(*) FROM t4 FORCE INDEX (c); +SET rocksdb_bulk_load=0; +SELECT * FROM t4 FORCE INDEX (PRIMARY); +SELECT b FROM t4 FORCE INDEX (b); +SELECT c FROM t4 FORCE INDEX (c); +--echo Checksums should match +CHECKSUM TABLE t3; +CHECKSUM TABLE t4; + +### Bulk load both PK and SK in random order for all ### +SET rocksdb_bulk_load_allow_unsorted=1; +SET rocksdb_bulk_load_allow_sk=1; +SET rocksdb_bulk_load=1; + +INSERT INTO t2 SELECT * FROM t3 WHERE b >= 0 ORDER BY b; +INSERT INTO t2 SELECT * FROM t3 WHERE b < 0 ORDER BY b; +SELECT count(*) FROM t2 FORCE INDEX (PRIMARY); +SELECT count(*) FROM t2 FORCE INDEX (b); +SELECT count(*) FROM t2 FORCE INDEX (c); + +--disable_query_log +let $sign = 1; +let $max = 20; +let $i = 11; +while ($i <= $max) { + let $a = 1 + $sign * $i; + let $b = 1 - $sign * $i; + let $sign = -$sign; + let $insert = INSERT INTO t2 VALUES ($a, $b, $b); + eval $insert; + inc $i; +} +--enable_query_log +SELECT count(*) FROM t2 FORCE INDEX (PRIMARY); +SELECT count(*) FROM t2 FORCE INDEX (b); +SELECT count(*) FROM t2 FORCE INDEX (c); +SET rocksdb_bulk_load=0; + +--disable_query_log +let $sign = 1; +let $max = 20; +let $i = 11; +while ($i <= $max) { + let $a = 1 + $sign * $i; + let $b = 1 - $sign * $i; + let $sign = -$sign; + let $insert = INSERT INTO t3 VALUES ($a, $b, $b); + eval $insert; + inc $i; +} +--enable_query_log + +SELECT * FROM t2 FORCE INDEX (PRIMARY); +SELECT b FROM t2 FORCE INDEX (b); +SELECT c FROM t2 FORCE INDEX (c); +--echo Checksums should match +CHECKSUM TABLE t3; +CHECKSUM TABLE t2; + +DROP TABLE t1; +DROP TABLE t2; +DROP TABLE t3; +DROP TABLE t4; diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index f45d33ee4db1..fc2afb513b82 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -651,6 +651,13 @@ static MYSQL_THDVAR_BOOL( "unique_checks and enables rocksdb_commit_in_the_middle.", rocksdb_check_bulk_load, nullptr, FALSE); +static MYSQL_THDVAR_BOOL(bulk_load_allow_sk, PLUGIN_VAR_RQCMDARG, + "Allow bulk loading of sk keys during bulk-load. " + "Can be changed only when bulk load is disabled.", + /* Intentionally reuse unsorted's check function */ + rocksdb_check_bulk_load_allow_unsorted, nullptr, + FALSE); + static MYSQL_THDVAR_BOOL(bulk_load_allow_unsorted, PLUGIN_VAR_RQCMDARG, "Allow unsorted input during bulk-load. " "Can be changed only when bulk load is disabled.", @@ -1504,6 +1511,7 @@ static struct st_mysql_sys_var *rocksdb_system_variables[] = { MYSQL_SYSVAR(write_batch_max_bytes), MYSQL_SYSVAR(lock_scanned_rows), MYSQL_SYSVAR(bulk_load), + MYSQL_SYSVAR(bulk_load_allow_sk), MYSQL_SYSVAR(bulk_load_allow_unsorted), MYSQL_SYSVAR(trace_sst_api), MYSQL_SYSVAR(commit_in_the_middle), @@ -8737,9 +8745,11 @@ int ha_rocksdb::update_pk(const Rdb_key_def &kd, } int ha_rocksdb::update_sk(const TABLE *const table_arg, const Rdb_key_def &kd, - const struct update_row_info &row_info) { + const struct update_row_info &row_info, + const bool bulk_load_sk) { int new_packed_size; int old_packed_size; + int rc = HA_EXIT_SUCCESS; rocksdb::Slice new_key_slice; rocksdb::Slice new_value_slice; @@ -8812,15 +8822,20 @@ int ha_rocksdb::update_sk(const TABLE *const table_arg, const Rdb_key_def &kd, rocksdb::Slice(reinterpret_cast(m_sk_tails.ptr()), m_sk_tails.get_current_pos()); - row_info.tx->get_indexed_write_batch()->Put(kd.get_cf(), new_key_slice, - new_value_slice); + if (bulk_load_sk && row_info.old_data == nullptr) { + rc = bulk_load_key(row_info.tx, kd, new_key_slice, new_value_slice, true); + } else { + row_info.tx->get_indexed_write_batch()->Put(kd.get_cf(), new_key_slice, + new_value_slice); + } - return HA_EXIT_SUCCESS; + return rc; } int ha_rocksdb::update_indexes(const struct update_row_info &row_info, const bool &pk_changed) { int rc; + bool bulk_load_sk; // The PK must be updated first to pull out the TTL value. rc = update_pk(*m_pk_descr, row_info, pk_changed); @@ -8828,13 +8843,17 @@ int ha_rocksdb::update_indexes(const struct update_row_info &row_info, return rc; } - // Update the remaining indexes. + // Update the remaining indexes. Allow bulk loading only if + // allow_sk is enabled + bulk_load_sk = rocksdb_enable_bulk_load_api && + THDVAR(table->in_use, bulk_load) && + THDVAR(table->in_use, bulk_load_allow_sk); for (uint key_id = 0; key_id < m_tbl_def->m_key_count; key_id++) { if (is_pk(key_id, table, m_tbl_def)) { continue; } - rc = update_sk(table, *m_key_descr_arr[key_id], row_info); + rc = update_sk(table, *m_key_descr_arr[key_id], row_info, bulk_load_sk); if (rc != HA_EXIT_SUCCESS) { return rc; } diff --git a/storage/rocksdb/ha_rocksdb.h b/storage/rocksdb/ha_rocksdb.h index 664e5111fc78..ade1ae6328e8 100644 --- a/storage/rocksdb/ha_rocksdb.h +++ b/storage/rocksdb/ha_rocksdb.h @@ -1174,7 +1174,7 @@ class ha_rocksdb : public my_core::handler { int update_pk(const Rdb_key_def &kd, const struct update_row_info &row_info, const bool &pk_changed) MY_ATTRIBUTE((__warn_unused_result__)); int update_sk(const TABLE *const table_arg, const Rdb_key_def &kd, - const struct update_row_info &row_info) + const struct update_row_info &row_info, const bool bulk_load_sk) MY_ATTRIBUTE((__warn_unused_result__)); int update_indexes(const struct update_row_info &row_info, const bool &pk_changed) From 7a2073132ee1bf5da0a57f56f6c84c960bc8ac7d Mon Sep 17 00:00:00 2001 From: Manuel Ung Date: Tue, 20 Feb 2018 16:55:37 -0800 Subject: [PATCH 0947/1221] Fix rocksdb checkpoint test cases Upstream Commit ID : fb-mysql-5.6.35/191fa4e80a52a5fc7917dea63b9b7a069c0afa3c PS-4476 - Merge prod201801 Summary: There was a recent fix to setting rocksdb checkpoints. This updates our test cases to reflect that. update-submodule: rocksdb Reviewed By: hermanlee Differential Revision: D7037135 fbshipit-source-id: cfbdb13 --- .../rocksdb.sys_vars/r/rocksdb_create_checkpoint_basic.result | 2 +- storage/rocksdb/rocksdb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_create_checkpoint_basic.result b/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_create_checkpoint_basic.result index ba280a32ab28..e6cb72b98d3f 100644 --- a/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_create_checkpoint_basic.result +++ b/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_create_checkpoint_basic.result @@ -12,4 +12,4 @@ SET @@global.ROCKSDB_CREATE_CHECKPOINT = DEFAULT; SET @@session.ROCKSDB_CREATE_CHECKPOINT = 444; ERROR HY000: Variable 'rocksdb_create_checkpoint' is a GLOBAL variable and should be set with SET GLOBAL SET @@global.ROCKSDB_CREATE_CHECKPOINT = @start_value; -ERROR HY000: Status error 5 received from RocksDB: IO error: While renaming a file to : .tmp: No such file or directory +ERROR HY000: Status error 4 received from RocksDB: Invalid argument: invalid checkpoint directory name diff --git a/storage/rocksdb/rocksdb b/storage/rocksdb/rocksdb index d62af7fa4f42..1960e73e2117 160000 --- a/storage/rocksdb/rocksdb +++ b/storage/rocksdb/rocksdb @@ -1 +1 @@ -Subproject commit d62af7fa4f42fcb89e23417ca3d3ad49a687800c +Subproject commit 1960e73e2117d957709ca6f87215285c23b0728c From 105a2635a10f72c8689d55e6f60a11bad9f31539 Mon Sep 17 00:00:00 2001 From: Manuel Ung Date: Fri, 23 Feb 2018 11:16:23 -0800 Subject: [PATCH 0948/1221] Update rocksdb.check_ignore_unknown_options test Upstream commit ID : fb-mysql-5.6.35/9df52ea7eab02db584a456111b654ef07a3fd80f PS-4476 : Merge prod201801 Summary: Due to https://github.com/facebook/rocksdb/pull/3527, ignore unknown options only takes effect if the rocksdb options file is from a higher version. Update the test to change the version of the file to something large. I've also updated the sort because it wasn't actually sorting the file by its number. The restoration of the file was also doing nothing because a new option file gets created with the invalid option removed already. update-submodule: rocksdb Reviewed By: hermanlee Differential Revision: D7071639 fbshipit-source-id: 1e15bc2 --- mysql-test/suite/rocksdb/t/check_ignore_unknown_options.test | 4 ++-- storage/rocksdb/rocksdb | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/mysql-test/suite/rocksdb/t/check_ignore_unknown_options.test b/mysql-test/suite/rocksdb/t/check_ignore_unknown_options.test index 899410523095..1f1933a1539a 100644 --- a/mysql-test/suite/rocksdb/t/check_ignore_unknown_options.test +++ b/mysql-test/suite/rocksdb/t/check_ignore_unknown_options.test @@ -3,7 +3,8 @@ select variable_name, variable_value from performance_schema.global_variables where variable_name="rocksdb_ignore_unknown_options"; let $MYSQLD_DATADIR= `select @@datadir`; ---exec find $MYSQLD_DATADIR/.rocksdb/OPTIONS* | sort -n | tail -1 | xargs -0 -I {} -t sh -c "echo hello=world>>{}" +--exec find $MYSQLD_DATADIR/.rocksdb/OPTIONS* | sort -t- -k 2 -n | tail -1 | xargs -0 -I {} -t sh -c "sed -i 's/rocksdb_version=.*/rocksdb_version=99.9.9/' {}" +--exec find $MYSQLD_DATADIR/.rocksdb/OPTIONS* | sort -t- -k 2 -n | tail -1 | xargs -0 -I {} -t sh -c "echo hello=world>>{}" --let SEARCH_FILE=$MYSQLTEST_VARDIR/tmp/rocksdb.bulk_load_errors.err --let $restart_parameters=restart:--log-error=$SEARCH_FILE --rocksdb_ignore_unknown_options=0 @@ -16,5 +17,4 @@ let $MYSQLD_DATADIR= `select @@datadir`; --let $restart_parameters= --source include/restart_mysqld.inc ---exec find $MYSQLD_DATADIR/.rocksdb/OPTIONS* | sort -n | tail -1 | xargs -0 -I {} -t sh -c "sed -i '/hello=world/d' {}" select variable_name, variable_value from performance_schema.global_variables where variable_name="rocksdb_ignore_unknown_options"; diff --git a/storage/rocksdb/rocksdb b/storage/rocksdb/rocksdb index 1960e73e2117..90eca1e616d4 160000 --- a/storage/rocksdb/rocksdb +++ b/storage/rocksdb/rocksdb @@ -1 +1 @@ -Subproject commit 1960e73e2117d957709ca6f87215285c23b0728c +Subproject commit 90eca1e616d4225555ee25ce54462c5993cb79d2 From a07bc0ef43ed1a101ca59cdb1733baaa72311ff7 Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Tue, 27 Feb 2018 09:27:22 -0800 Subject: [PATCH 0949/1221] Introduce new variable 'rocksdb_error_on_suboptimal_collation'. Upstream commit ID : fb-mysql-5.6.35/0dbf18cc2158fcd796164b9afa4ac02fab069d91 PS-4476 : Merge prod201801 Summary: New variable specifies whether to raise an error or a warning if an index is created on a char field where the table has a sub-optimal collation (case insensitive). Default is TRUE. Variable is global read only. Closes https://github.com/facebook/mysql-5.6/pull/796 Differential Revision: D7092525 Pulled By: lth fbshipit-source-id: 00aea7c --- ...error_on_suboptimal_collation_basic.result | 7 ++++ ...b_error_on_suboptimal_collation_basic.test | 6 +++ mysql-test/suite/rocksdb/r/collation.result | 15 +++++++ mysql-test/suite/rocksdb/r/rocksdb.result | 1 + mysql-test/suite/rocksdb/t/collation.test | 27 +++++++++++++ storage/rocksdb/ha_rocksdb.cc | 39 +++++++++++++++---- 6 files changed, 88 insertions(+), 7 deletions(-) create mode 100644 mysql-test/suite/rocksdb.sys_vars/r/rocksdb_error_on_suboptimal_collation_basic.result create mode 100644 mysql-test/suite/rocksdb.sys_vars/t/rocksdb_error_on_suboptimal_collation_basic.test diff --git a/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_error_on_suboptimal_collation_basic.result b/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_error_on_suboptimal_collation_basic.result new file mode 100644 index 000000000000..3fbccf8f1967 --- /dev/null +++ b/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_error_on_suboptimal_collation_basic.result @@ -0,0 +1,7 @@ +SET @start_global_value = @@global.ROCKSDB_ERROR_ON_SUBOPTIMAL_COLLATION; +SELECT @start_global_value; +@start_global_value +0 +"Trying to set variable @@global.ROCKSDB_ERROR_ON_SUBOPTIMAL_COLLATION to 444. It should fail because it is readonly." +SET @@global.ROCKSDB_ERROR_ON_SUBOPTIMAL_COLLATION = 444; +ERROR HY000: Variable 'rocksdb_error_on_suboptimal_collation' is a read only variable diff --git a/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_error_on_suboptimal_collation_basic.test b/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_error_on_suboptimal_collation_basic.test new file mode 100644 index 000000000000..9278fa319333 --- /dev/null +++ b/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_error_on_suboptimal_collation_basic.test @@ -0,0 +1,6 @@ +--source include/have_rocksdb.inc + +--let $sys_var=ROCKSDB_ERROR_ON_SUBOPTIMAL_COLLATION +--let $read_only=1 +--let $session=0 +--source ../include/rocksdb_sys_var.inc diff --git a/mysql-test/suite/rocksdb/r/collation.result b/mysql-test/suite/rocksdb/r/collation.result index bb9b855d9683..2f663dba27bf 100644 --- a/mysql-test/suite/rocksdb/r/collation.result +++ b/mysql-test/suite/rocksdb/r/collation.result @@ -1,5 +1,8 @@ call mtr.add_suppression("Invalid pattern"); CREATE TABLE t1 (id INT PRIMARY KEY, value VARCHAR(50), value2 VARBINARY(50), value3 TEXT) ENGINE=ROCKSDB CHARSET UTF8; +ALTER TABLE t1 ADD INDEX (value); +Warnings: +Warning 122 Indexed column test.t1.value uses a collation that does not allow index-only access in secondary key and has reduced disk space efficiency in primary key. DROP TABLE t1; CREATE TABLE t1 (id INT PRIMARY KEY, value VARCHAR(50), value2 VARBINARY(50), value3 TEXT, INDEX(value)) ENGINE=ROCKSDB CHARSET UTF8; Warnings: @@ -16,6 +19,7 @@ SET GLOBAL rocksdb_strict_collation_check=1; CREATE TABLE t1 (id INT PRIMARY KEY, value VARCHAR(50), value2 VARBINARY(50), value3 TEXT, INDEX(value2)) ENGINE=ROCKSDB CHARSET UTF8; DROP TABLE t1; CREATE TABLE t1 (id VARCHAR(20), value VARCHAR(50), value2 VARCHAR(50), value3 TEXT, PRIMARY KEY (id), INDEX(value, value2)) ENGINE=ROCKSDB CHARSET LATIN1 COLLATE LATIN1_BIN; +ALTER TABLE t1 collate=latin1_general_ci; DROP TABLE t1; CREATE TABLE t1 (id VARCHAR(20), value VARCHAR(50), value2 VARCHAR(50), value3 TEXT, PRIMARY KEY (id), INDEX(value, value2)) ENGINE=ROCKSDB CHARSET UTF8 COLLATE UTF8_BIN; DROP TABLE t1; @@ -79,4 +83,15 @@ Warning 122 Indexed column test.c.value uses a collation that does not allow ind DROP TABLE a, b, c; SET GLOBAL rocksdb_strict_collation_exceptions="abc\\"; SET GLOBAL rocksdb_strict_collation_exceptions=null; +# restart:--rocksdb_error_on_suboptimal_collation=1 +SET GLOBAL rocksdb_strict_collation_check=1; +CREATE TABLE t1 (id INT primary key, value varchar(50), value2 varbinary(50), value3 text, index(value)) engine=rocksdb charset utf8; +ERROR HY000: Unsupported collation on string indexed column test.t1.value Use binary collation (binary, latin1_bin, utf8_bin). +CREATE TABLE t1 (id INT primary key, value varchar(50), value2 varbinary(50), value3 text) engine=rocksdb charset utf8; +ALTER TABLE t1 ADD INDEX (value); +ERROR HY000: Unsupported collation on string indexed column test.t1.value Use binary collation (binary, latin1_bin, utf8_bin). +DROP TABLE t1; +CREATE TABLE t1 (id varchar(20), value varchar(50), value2 varchar(50), value3 text, primary key (id), index(value, value2)) engine=rocksdb charset latin1 collate latin1_bin; +ALTER TABLE t1 collate=latin1_general_ci; +DROP TABLE t1; # restart diff --git a/mysql-test/suite/rocksdb/r/rocksdb.result b/mysql-test/suite/rocksdb/r/rocksdb.result index c1858a6990bd..7e1af5c901c6 100644 --- a/mysql-test/suite/rocksdb/r/rocksdb.result +++ b/mysql-test/suite/rocksdb/r/rocksdb.result @@ -936,6 +936,7 @@ rocksdb_enable_ttl ON rocksdb_enable_ttl_read_filtering ON rocksdb_enable_write_thread_adaptive_yield OFF rocksdb_error_if_exists OFF +rocksdb_error_on_suboptimal_collation OFF rocksdb_flush_log_at_trx_commit 1 rocksdb_force_compute_memtable_stats ON rocksdb_force_compute_memtable_stats_cachetime 0 diff --git a/mysql-test/suite/rocksdb/t/collation.test b/mysql-test/suite/rocksdb/t/collation.test index 128d2de6f1a1..f4bd32e68f84 100644 --- a/mysql-test/suite/rocksdb/t/collation.test +++ b/mysql-test/suite/rocksdb/t/collation.test @@ -7,6 +7,8 @@ call mtr.add_suppression("Invalid pattern"); # ci non-indexed column is allowed CREATE TABLE t1 (id INT PRIMARY KEY, value VARCHAR(50), value2 VARBINARY(50), value3 TEXT) ENGINE=ROCKSDB CHARSET UTF8; +# ci indexed column is not allowed +ALTER TABLE t1 ADD INDEX (value); DROP TABLE t1; # ci indexed column is not allowed @@ -26,6 +28,8 @@ DROP TABLE t1; # cs latin1_bin is allowed CREATE TABLE t1 (id VARCHAR(20), value VARCHAR(50), value2 VARCHAR(50), value3 TEXT, PRIMARY KEY (id), INDEX(value, value2)) ENGINE=ROCKSDB CHARSET LATIN1 COLLATE LATIN1_BIN; +# THIS SHOULD FAIL BUT IT DOES NOT +ALTER TABLE t1 collate=latin1_general_ci; DROP TABLE t1; # cs utf8_bin is allowed @@ -102,6 +106,29 @@ SET GLOBAL rocksdb_strict_collation_exceptions="abc\\"; # test bad regex (null caused a crash) - Issue 493 SET GLOBAL rocksdb_strict_collation_exceptions=null; +# test for errors instead of warnings +--let $restart_parameters=restart:--rocksdb_error_on_suboptimal_collation=1 +--source include/restart_mysqld.inc + +SET GLOBAL rocksdb_strict_collation_check=1; + +# ci indexed column is not optimal, should emit a warning +--error ER_UNSUPPORTED_COLLATION +CREATE TABLE t1 (id INT primary key, value varchar(50), value2 varbinary(50), value3 text, index(value)) engine=rocksdb charset utf8; + +# ci non-indexed column is allowed +CREATE TABLE t1 (id INT primary key, value varchar(50), value2 varbinary(50), value3 text) engine=rocksdb charset utf8; +# ci indexed column is not allowed, should emit an error +--error ER_UNSUPPORTED_COLLATION +ALTER TABLE t1 ADD INDEX (value); +DROP TABLE t1; + +# cs latin1_bin is allowed +CREATE TABLE t1 (id varchar(20), value varchar(50), value2 varchar(50), value3 text, primary key (id), index(value, value2)) engine=rocksdb charset latin1 collate latin1_bin; +# THIS SHOULD ERROR BUT IT DOES NOT +ALTER TABLE t1 collate=latin1_general_ci; +DROP TABLE t1; + # cleanup --let $restart_parameters= --source include/restart_mysqld.inc diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index fc2afb513b82..169eb582f4bc 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -509,6 +509,7 @@ static my_bool rocksdb_large_prefix = FALSE; static my_bool rocksdb_allow_to_start_after_corruption = FALSE; static uint32_t rocksdb_write_policy = rocksdb::TxnDBWritePolicy::WRITE_COMMITTED; +static my_bool rocksdb_error_on_suboptimal_collation = FALSE; std::atomic rocksdb_row_lock_deadlocks(0); std::atomic rocksdb_row_lock_wait_timeouts(0); @@ -1500,6 +1501,13 @@ static MYSQL_SYSVAR_BOOL( "Allow server to start successfully when RocksDB corruption is detected.", nullptr, nullptr, FALSE); +static MYSQL_SYSVAR_BOOL(error_on_suboptimal_collation, + rocksdb_error_on_suboptimal_collation, + PLUGIN_VAR_OPCMDARG | PLUGIN_VAR_READONLY, + "Raise an error instead of warning if a sub-optimal " + "collation is used", + nullptr, nullptr, FALSE); + static const int ROCKSDB_ASSUMED_KEY_VALUE_DISK_SIZE = 100; static struct st_mysql_sys_var *rocksdb_system_variables[] = { @@ -1641,6 +1649,7 @@ static struct st_mysql_sys_var *rocksdb_system_variables[] = { MYSQL_SYSVAR(large_prefix), MYSQL_SYSVAR(allow_to_start_after_corruption), + MYSQL_SYSVAR(error_on_suboptimal_collation), nullptr}; static rocksdb::WriteOptions @@ -6102,13 +6111,29 @@ int ha_rocksdb::create_cfs( if (!rdb_is_index_collation_supported( table_arg->key_info[i].key_part[part].field) && !rdb_collation_exceptions->match(tablename_sys)) { - push_warning_printf( - ha_thd(), Sql_condition::SL_WARNING, HA_ERR_INTERNAL_ERROR, - "Indexed column %s.%s uses a collation that does not allow " - "index-only access in secondary key and has reduced disk space " - "efficiency in primary key.", - tbl_def_arg->full_tablename().c_str(), - table_arg->key_info[i].key_part[part].field->field_name); + std::string collation_err; + for (const auto &coll : RDB_INDEX_COLLATIONS) { + if (collation_err != "") { + collation_err += ", "; + } + collation_err += coll->name; + } + + if (rocksdb_error_on_suboptimal_collation) { + my_error(ER_UNSUPPORTED_COLLATION, MYF(0), + tbl_def_arg->full_tablename().c_str(), + table_arg->key_info[i].key_part[part].field->field_name, + collation_err.c_str()); + DBUG_RETURN(HA_EXIT_FAILURE); + } else { + push_warning_printf( + ha_thd(), Sql_condition::SL_WARNING, HA_ERR_INTERNAL_ERROR, + "Indexed column %s.%s uses a collation that does not allow " + "index-only access in secondary key and has reduced disk space " + "efficiency in primary key.", + tbl_def_arg->full_tablename().c_str(), + table_arg->key_info[i].key_part[part].field->field_name); + } } } } From 80c184c7e90b7df765e7db6a0636b6267952a7ab Mon Sep 17 00:00:00 2001 From: Abhinav Sharma Date: Tue, 13 Mar 2018 11:17:37 -0700 Subject: [PATCH 0950/1221] SQL to create and manage explicit snapshots Upstream commit ID : fb-mysql-5.6.35/a2cfb5d512fed0552713c798f482825e19357d8b PS-4476 : Merge prod201801 This is a NULL cherry-pick to Percona Server 5.7 to create the commit placeholder for the corresponding upstream commit. Reason: Patch not taken into Percona Server. From baa291ccd90b45f83f3da789a090c2debc27143c Mon Sep 17 00:00:00 2001 From: Abhinav Sharma Date: Tue, 13 Mar 2018 11:19:21 -0700 Subject: [PATCH 0951/1221] Support for explicit snapshots Upstream commit ID : fb-mysql-5.6.35/28f9fa947655257cd2ef082c7eb2247a966076c5 PS-4476 : Merge prod201801 This is a NULL cherry-pick to Percona Server 5.7 to create the commit placeholder for the corresponding upstream commit. Reason: Patch not taken into Percona Server. From 82db008b50e6644d39bf2cbed81ac265ec99b738 Mon Sep 17 00:00:00 2001 From: Ahmed Salama Date: Fri, 23 Feb 2018 15:35:05 -0800 Subject: [PATCH 0952/1221] Add parameter for calculate_stats function of the indexes to recalculate only + testing Upstream commit ID : fb-mysql-5.6.35/6847413ebb9c27c8bd104807fed6454e359afe93 PS-4476 : Merge prod201801 Summary: Change calculate_stats() to recalculate statistics for certain set of indexes only; Those that changed. Differential Revision: D7075934 fbshipit-source-id: 5941e55 --- .../suite/rocksdb/r/add_index_inplace.result | 21 ++++++++++ .../suite/rocksdb/t/add_index_inplace.test | 22 ++++++++++ storage/rocksdb/ha_rocksdb.cc | 42 ++++++++++++++----- storage/rocksdb/ha_rocksdb.h | 4 +- 4 files changed, 77 insertions(+), 12 deletions(-) diff --git a/mysql-test/suite/rocksdb/r/add_index_inplace.result b/mysql-test/suite/rocksdb/r/add_index_inplace.result index dbc4c6f5f43b..59681e00eb40 100644 --- a/mysql-test/suite/rocksdb/r/add_index_inplace.result +++ b/mysql-test/suite/rocksdb/r/add_index_inplace.result @@ -455,3 +455,24 @@ t1 CREATE TABLE `t1` ( KEY `kb` (`b`(8)) ) ENGINE=ROCKSDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin DROP TABLE t1; +SET @prior_rocksdb_table_stats_sampling_pct = @@rocksdb_table_stats_sampling_pct; +set global rocksdb_table_stats_sampling_pct = 100; +CREATE TABLE t1 (a INT, b INT, PRIMARY KEY ka(a)) ENGINE=RocksDB; +INSERT INTO t1 (a, b) VALUES (1, 10); +INSERT INTO t1 (a, b) VALUES (2, 10); +INSERT INTO t1 (a, b) VALUES (3, 20); +INSERT INTO t1 (a, b) VALUES (4, 20); +set global rocksdb_force_flush_memtable_now=1; +analyze table t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +SHOW INDEX in t1; +Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment +t1 0 PRIMARY 1 a A 4 NULL NULL LSMTREE +ALTER TABLE t1 ADD INDEX kb(b), ALGORITHM=INPLACE; +SHOW INDEX in t1; +Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment +t1 0 PRIMARY 1 a A 4 NULL NULL LSMTREE +t1 1 kb 1 b A 2 NULL NULL YES LSMTREE +DROP TABLE t1; +SET global rocksdb_table_stats_sampling_pct = @prior_rocksdb_table_stats_sampling_pct; diff --git a/mysql-test/suite/rocksdb/t/add_index_inplace.test b/mysql-test/suite/rocksdb/t/add_index_inplace.test index 91a682eca67b..a84eac2fe3fd 100644 --- a/mysql-test/suite/rocksdb/t/add_index_inplace.test +++ b/mysql-test/suite/rocksdb/t/add_index_inplace.test @@ -377,3 +377,25 @@ if ($end_max_index_id <= $start_max_index_id) { SHOW CREATE TABLE t1; DROP TABLE t1; + +# Cardinality checks for indexes statistics +SET @prior_rocksdb_table_stats_sampling_pct = @@rocksdb_table_stats_sampling_pct; +set global rocksdb_table_stats_sampling_pct = 100; + +CREATE TABLE t1 (a INT, b INT, PRIMARY KEY ka(a)) ENGINE=RocksDB; + +INSERT INTO t1 (a, b) VALUES (1, 10); +INSERT INTO t1 (a, b) VALUES (2, 10); +INSERT INTO t1 (a, b) VALUES (3, 20); +INSERT INTO t1 (a, b) VALUES (4, 20); + +set global rocksdb_force_flush_memtable_now=1; +analyze table t1; + +SHOW INDEX in t1; + +ALTER TABLE t1 ADD INDEX kb(b), ALGORITHM=INPLACE; +SHOW INDEX in t1; + +DROP TABLE t1; +SET global rocksdb_table_stats_sampling_pct = @prior_rocksdb_table_stats_sampling_pct; diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index 169eb582f4bc..9bc0c82e276b 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -10404,24 +10404,34 @@ int ha_rocksdb::optimize(THD *const thd, HA_CHECK_OPT *const check_opt) { DBUG_RETURN(HA_EXIT_SUCCESS); } -int ha_rocksdb::calculate_stats(const TABLE *const table_arg, THD *const thd, - HA_CHECK_OPT *const check_opt) { +int ha_rocksdb::calculate_stats( + const TABLE *const table_arg, + const std::unordered_set &to_recalc) { DBUG_ENTER_FUNC(); // find per column family key ranges which need to be queried std::unordered_map> ranges; - std::unordered_set ids_to_check; + std::unordered_map stats; + std::vector to_recalc_indexes; std::vector buf(table_arg->s->keys * 2 * Rdb_key_def::INDEX_NUMBER_SIZE); - std::unordered_map stats; for (uint i = 0; i < table_arg->s->keys; i++) { + const Rdb_key_def &kd = *m_key_descr_arr[i]; + const GL_INDEX_ID index_id = kd.get_gl_index_id(); + if (to_recalc.find(index_id) == to_recalc.end()) { + continue; + } + + to_recalc_indexes.push_back(i); + } + + for (uint i : to_recalc_indexes) { const auto bufp = &buf[i * 2 * Rdb_key_def::INDEX_NUMBER_SIZE]; const Rdb_key_def &kd = *m_key_descr_arr[i]; const GL_INDEX_ID index_id = kd.get_gl_index_id(); ranges[kd.get_cf()].push_back(get_range(i, bufp)); - ids_to_check.insert(index_id); // Initialize the stats to 0. If there are no files that contain // this gl_index_id, then 0 should be stored for the cached stats. stats[index_id] = Rdb_index_stats(index_id); @@ -10459,8 +10469,9 @@ int ha_rocksdb::calculate_stats(const TABLE *const table_arg, THD *const thd, other SQL tables, it can be that we're only seeing a small fraction of table's entries (and so we can't update statistics based on that). */ - if (ids_to_check.find(it1.m_gl_index_id) == ids_to_check.end()) + if (to_recalc.find(it1.m_gl_index_id) == to_recalc.end()) { continue; + } auto kd = ddl_manager.safe_find(it1.m_gl_index_id); DBUG_ASSERT(kd != nullptr); @@ -10473,8 +10484,9 @@ int ha_rocksdb::calculate_stats(const TABLE *const table_arg, THD *const thd, Rdb_tbl_card_coll cardinality_collector(rocksdb_table_stats_sampling_pct); auto read_opts = rocksdb::ReadOptions(); read_opts.read_tier = rocksdb::ReadTier::kMemtableTier; - for (uint i = 0; i < table_arg->s->keys; i++) { + for (const uint i : to_recalc_indexes) { const Rdb_key_def &kd = *m_key_descr_arr[i]; + Rdb_index_stats &stat = stats[kd.get_gl_index_id()]; uchar r_buf[Rdb_key_def::INDEX_NUMBER_SIZE * 2]; @@ -10531,8 +10543,18 @@ int ha_rocksdb::calculate_stats(const TABLE *const table_arg, THD *const thd, int ha_rocksdb::analyze(THD *const thd, HA_CHECK_OPT *const check_opt) { DBUG_ENTER_FUNC(); - if (table && calculate_stats(table, thd, check_opt) != HA_EXIT_SUCCESS) { - DBUG_RETURN(HA_ADMIN_FAILED); + if (table) { + std::unordered_set ids_to_check; + for (uint i = 0; i < table->s->keys; i++) { + const Rdb_key_def &kd = *m_key_descr_arr[i]; + const GL_INDEX_ID index_id = kd.get_gl_index_id(); + ids_to_check.insert(index_id); + } + + int res = calculate_stats(table, ids_to_check); + if (res != HA_EXIT_SUCCESS) { + DBUG_RETURN(HA_ADMIN_FAILED); + } } DBUG_RETURN(HA_ADMIN_OK); @@ -11397,7 +11419,7 @@ bool ha_rocksdb::commit_inplace_alter_table( prevents us from updating the stats normally as the ddl_manager cannot find the proper gl_index_ids yet during adjust_stats calls. */ - if (calculate_stats(altered_table, nullptr, nullptr)) { + if (calculate_stats(altered_table, create_index_ids)) { /* Failed to update index statistics, should never happen */ DBUG_ASSERT(0); } diff --git a/storage/rocksdb/ha_rocksdb.h b/storage/rocksdb/ha_rocksdb.h index ade1ae6328e8..eb916de06775 100644 --- a/storage/rocksdb/ha_rocksdb.h +++ b/storage/rocksdb/ha_rocksdb.h @@ -1320,8 +1320,8 @@ class ha_rocksdb : public my_core::handler { MY_ATTRIBUTE((__warn_unused_result__)); int analyze(THD *const thd, HA_CHECK_OPT *const check_opt) override MY_ATTRIBUTE((__warn_unused_result__)); - int calculate_stats(const TABLE *const table_arg, THD *const thd, - HA_CHECK_OPT *const check_opt) + int calculate_stats(const TABLE *const table_arg, + const std::unordered_set &to_recalc) MY_ATTRIBUTE((__warn_unused_result__)); enum_alter_inplace_result check_if_supported_inplace_alter( From 7524f668488176d7f0d52968d203699c51b86b26 Mon Sep 17 00:00:00 2001 From: Ahmed Salama Date: Fri, 23 Feb 2018 15:35:05 -0800 Subject: [PATCH 0953/1221] Update valgrind suppressions and disable long running rocksdb test Upstream commit ID : fb-mysql-5.6.35/d2842d0b05ece96f513ac50db1a73b4a440cb19b PS-4476 : Merge prod201801 Summary: Update the valgrind suppressions file to include one time static allocations during initialization. Also disable certain rocksdb tests that constantly shutdown/restart since they take too long to run in the valgrind builds. Reviewed By: lth Differential Revision: D7296133 fbshipit-source-id: 23d4280 --- .../suite/rocksdb.rpl/t/rpl_rocksdb_2pc_crash_recover.test | 1 + mysql-test/suite/rocksdb/t/add_index_inplace_crash.test | 1 + mysql-test/suite/rocksdb/t/autoinc_debug.test | 1 + 3 files changed, 3 insertions(+) diff --git a/mysql-test/suite/rocksdb.rpl/t/rpl_rocksdb_2pc_crash_recover.test b/mysql-test/suite/rocksdb.rpl/t/rpl_rocksdb_2pc_crash_recover.test index ddcc234ba6d4..3cd5940a8413 100644 --- a/mysql-test/suite/rocksdb.rpl/t/rpl_rocksdb_2pc_crash_recover.test +++ b/mysql-test/suite/rocksdb.rpl/t/rpl_rocksdb_2pc_crash_recover.test @@ -2,6 +2,7 @@ --source include/have_binlog_format_row.inc --source include/have_rocksdb.inc --source include/have_debug.inc +--source include/not_valgrind.inc --disable_warnings DROP TABLE IF EXISTS t1; diff --git a/mysql-test/suite/rocksdb/t/add_index_inplace_crash.test b/mysql-test/suite/rocksdb/t/add_index_inplace_crash.test index 872a16186482..e10dc4241453 100644 --- a/mysql-test/suite/rocksdb/t/add_index_inplace_crash.test +++ b/mysql-test/suite/rocksdb/t/add_index_inplace_crash.test @@ -1,5 +1,6 @@ --source include/have_rocksdb.inc --source include/have_debug.inc +--source include/not_valgrind.inc # # test crash recovery diff --git a/mysql-test/suite/rocksdb/t/autoinc_debug.test b/mysql-test/suite/rocksdb/t/autoinc_debug.test index 614b7dda27ad..9f30f634794b 100644 --- a/mysql-test/suite/rocksdb/t/autoinc_debug.test +++ b/mysql-test/suite/rocksdb/t/autoinc_debug.test @@ -1,6 +1,7 @@ --source include/have_rocksdb.inc --source include/have_debug.inc --source include/have_log_bin.inc +--source include/not_valgrind.inc --echo # --echo # Testing upgrading from server without merges for auto_increment From d3e54b733e55033b6a2a8de5f6b2c27b7b2dedfc Mon Sep 17 00:00:00 2001 From: Ashay Verma Date: Fri, 9 Mar 2018 09:45:16 -0800 Subject: [PATCH 0954/1221] Remove redundant error code Upstream commit ID : fb-mysql-5.6.35/6f5b9faedcc8866c8f56ad76c3d6813dda44bd02 PS-4476 : Merge prod201801 Summary: Replace ER_RDB_STATUS_GENERAL with ER_GET_ERRMSG Reviewed By: lth Differential Revision: D7216274 fbshipit-source-id: be66957 --- .../r/rocksdb_create_checkpoint_basic.result | 2 +- .../r/rocksdb_write_batch_max_bytes_basic.result | 4 ++-- .../t/rocksdb_create_checkpoint_basic.test | 2 +- .../t/rocksdb_write_batch_max_bytes_basic.test | 4 ++-- mysql-test/suite/rocksdb/include/set_checkpoint.inc | 2 +- mysql-test/suite/rocksdb/r/rocksdb.result | 2 +- mysql-test/suite/rocksdb/t/rocksdb.test | 2 +- sql/share/errmsg-utf8.txt | 6 ------ storage/rocksdb/ha_rocksdb.cc | 9 ++++++--- 9 files changed, 15 insertions(+), 18 deletions(-) diff --git a/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_create_checkpoint_basic.result b/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_create_checkpoint_basic.result index e6cb72b98d3f..630fa78e933e 100644 --- a/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_create_checkpoint_basic.result +++ b/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_create_checkpoint_basic.result @@ -12,4 +12,4 @@ SET @@global.ROCKSDB_CREATE_CHECKPOINT = DEFAULT; SET @@session.ROCKSDB_CREATE_CHECKPOINT = 444; ERROR HY000: Variable 'rocksdb_create_checkpoint' is a GLOBAL variable and should be set with SET GLOBAL SET @@global.ROCKSDB_CREATE_CHECKPOINT = @start_value; -ERROR HY000: Status error 4 received from RocksDB: Invalid argument: invalid checkpoint directory name +ERROR HY000: Got error 4 'Invalid argument: invalid checkpoint directory name' from ROCKSDB diff --git a/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_write_batch_max_bytes_basic.result b/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_write_batch_max_bytes_basic.result index daee361044c5..460c44142523 100644 --- a/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_write_batch_max_bytes_basic.result +++ b/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_write_batch_max_bytes_basic.result @@ -4,12 +4,12 @@ set session rocksdb_write_batch_max_bytes = 1000; insert into t values (1), (2), (3), (4), (5); set session rocksdb_write_batch_max_bytes = 10; insert into t values (1), (2), (3), (4), (5); -ERROR HY000: Status error 10 received from RocksDB: Operation aborted: Memory limit reached +ERROR HY000: Got error 10 'Operation aborted: Memory limit reached' from ROCKSDB set session rocksdb_write_batch_max_bytes = 0; insert into t values (1), (2), (3), (4), (5); set session rocksdb_write_batch_max_bytes = 10; begin; insert into t values (1), (2), (3), (4), (5); -ERROR HY000: Status error 10 received from RocksDB: Operation aborted: Memory limit reached +ERROR HY000: Got error 10 'Operation aborted: Memory limit reached' from ROCKSDB rollback; drop table t; diff --git a/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_create_checkpoint_basic.test b/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_create_checkpoint_basic.test index a53df21524f4..9ffa9272b991 100644 --- a/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_create_checkpoint_basic.test +++ b/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_create_checkpoint_basic.test @@ -21,7 +21,7 @@ # Set back to original value # validate that DEFAULT causes failure in creating checkpoint since # DEFAULT == '' ---error ER_RDB_STATUS_GENERAL +--error ER_GET_ERRMSG --eval SET @@global.ROCKSDB_CREATE_CHECKPOINT = @start_value # clean up diff --git a/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_write_batch_max_bytes_basic.test b/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_write_batch_max_bytes_basic.test index f8413d93d4d4..f0d63f95182d 100644 --- a/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_write_batch_max_bytes_basic.test +++ b/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_write_batch_max_bytes_basic.test @@ -10,7 +10,7 @@ insert into t values (1), (2), (3), (4), (5); set session rocksdb_write_batch_max_bytes = 10; ---error ER_RDB_STATUS_GENERAL +--error ER_GET_ERRMSG insert into t values (1), (2), (3), (4), (5); set session rocksdb_write_batch_max_bytes = 0; @@ -19,7 +19,7 @@ insert into t values (1), (2), (3), (4), (5); set session rocksdb_write_batch_max_bytes = 10; begin; ---error ER_RDB_STATUS_GENERAL +--error ER_GET_ERRMSG insert into t values (1), (2), (3), (4), (5); rollback; diff --git a/mysql-test/suite/rocksdb/include/set_checkpoint.inc b/mysql-test/suite/rocksdb/include/set_checkpoint.inc index de28fb520f8c..ba921a7c7e03 100644 --- a/mysql-test/suite/rocksdb/include/set_checkpoint.inc +++ b/mysql-test/suite/rocksdb/include/set_checkpoint.inc @@ -20,7 +20,7 @@ if (!$succeeds) { --disable_result_log --disable_query_log - --error ER_RDB_STATUS_GENERAL + --error ER_GET_ERRMSG eval SET GLOBAL ROCKSDB_CREATE_CHECKPOINT = '$checkpoint'; --enable_query_log --enable_result_log diff --git a/mysql-test/suite/rocksdb/r/rocksdb.result b/mysql-test/suite/rocksdb/r/rocksdb.result index 7e1af5c901c6..f6970767c98b 100644 --- a/mysql-test/suite/rocksdb/r/rocksdb.result +++ b/mysql-test/suite/rocksdb/r/rocksdb.result @@ -1397,7 +1397,7 @@ insert into t1 select (@a:=@a+1), 1234 from performance_schema.session_variables set @tmp1= @@rocksdb_max_row_locks; set rocksdb_max_row_locks= 20; update t1 set a=a+10; -ERROR HY000: Status error 10 received from RocksDB: Operation aborted: Failed to acquire lock due to max_num_locks limit +ERROR HY000: Got error 10 'Operation aborted: Failed to acquire lock due to max_num_locks limit' from ROCKSDB DROP TABLE t1; # # Test AUTO_INCREMENT behavior problem, diff --git a/mysql-test/suite/rocksdb/t/rocksdb.test b/mysql-test/suite/rocksdb/t/rocksdb.test index 26fb57d39faa..e419938a531b 100644 --- a/mysql-test/suite/rocksdb/t/rocksdb.test +++ b/mysql-test/suite/rocksdb/t/rocksdb.test @@ -1171,7 +1171,7 @@ set @a=-1; insert into t1 select (@a:=@a+1), 1234 from performance_schema.session_variables limit 100; set @tmp1= @@rocksdb_max_row_locks; set rocksdb_max_row_locks= 20; ---error ER_RDB_STATUS_GENERAL +--error ER_GET_ERRMSG update t1 set a=a+10; DROP TABLE t1; diff --git a/sql/share/errmsg-utf8.txt b/sql/share/errmsg-utf8.txt index 3f8b815f8c85..28f458bb26d8 100644 --- a/sql/share/errmsg-utf8.txt +++ b/sql/share/errmsg-utf8.txt @@ -7845,12 +7845,6 @@ ER_SK_POPULATE_DURING_ALTER ER_CF_DIFFERENT eng "Column family ('%s') flag (%d) is different from an existing flag (%d). Assign a new CF flag, or do not change existing CF flag." -ER_RDB_STATUS_GENERAL - eng "Status error %d received from RocksDB: %s" - -ER_RDB_STATUS_MSG - eng "%s, Status error %d received from RocksDB: %s" - ER_RDB_TTL_UNSUPPORTED eng "TTL support is currently disabled when table has a hidden PK." diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index 9bc0c82e276b..6978b0061718 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -5967,10 +5967,13 @@ int ha_rocksdb::rdb_error_to_mysql(const rocksdb::Status &s, } if (opt_msg) { - my_error(ER_RDB_STATUS_MSG, MYF(0), opt_msg, s.code(), - s.ToString().c_str()); + std::string concatenated_error = + s.ToString() + " (" + std::string(opt_msg) + ")"; + my_error(ER_GET_ERRMSG, MYF(0), s.code(), concatenated_error.c_str(), + rocksdb_hton_name); } else { - my_error(ER_RDB_STATUS_GENERAL, MYF(0), s.code(), s.ToString().c_str()); + my_error(ER_GET_ERRMSG, MYF(0), s.code(), s.ToString().c_str(), + rocksdb_hton_name); } return err; From f5e31e1a990a388563f951cccb1d9948afb9d95a Mon Sep 17 00:00:00 2001 From: Manuel Ung Date: Thu, 1 Mar 2018 10:29:01 -0800 Subject: [PATCH 0955/1221] Add write_policy to rocksdb combinations file for testing Upstream commit ID : fb-mysql-5.6.35/a24e292252aaa67c44a212babe6b729f5b5338d7 PS-4476 : Merge prod201801 Summary: This will let us test both write committed and write prepared policy to ensure that both work. Because of WAL format changes, more bytes needed to be truncated for rocksdb_rpl.rpl_crash_safe_wal_corruptrocksdb_rpl.rpl_gtid_crash_safe_wal_corrupt Different query plans were given for rocksdb.index_merge_rocksdb2 because of different output for records_in_range (which calls `GetApproximateSizes`. The fix is to set rocksdb_records_in_range so that it always returns a constant value. Write prepared policy does not support vector memtables, so the rocksdb.insert_optimized_config test is disabled. update-submodule: rocksdb Reviewed By: hermanlee Differential Revision: D7383864 fbshipit-source-id: 8d2a268 --- mysql-test/suite/rocksdb.rpl/combinations | 7 +- mysql-test/suite/rocksdb.stress/combinations | 5 ++ .../r/rocksdb_write_policy_basic.result | 5 +- .../t/rocksdb_write_policy_basic.test | 3 + mysql-test/suite/rocksdb/combinations | 5 ++ .../rocksdb/include/have_write_committed.inc | 3 + .../rocksdb/r/index_merge_rocksdb2.result | 74 +++++++++---------- .../rocksdb/r/insert_optimized_config.result | 1 + mysql-test/suite/rocksdb/r/rocksdb.result | 2 +- .../rocksdb/t/index_merge_rocksdb2-master.opt | 2 +- .../t/insert_optimized_config-master.opt | 8 -- .../rocksdb/t/insert_optimized_config.test | 5 ++ mysql-test/suite/rocksdb/t/rocksdb.test | 1 + storage/rocksdb/ha_rocksdb.cc | 15 +++- 14 files changed, 83 insertions(+), 53 deletions(-) create mode 100644 mysql-test/suite/rocksdb.stress/combinations create mode 100644 mysql-test/suite/rocksdb/combinations create mode 100644 mysql-test/suite/rocksdb/include/have_write_committed.inc delete mode 100644 mysql-test/suite/rocksdb/t/insert_optimized_config-master.opt diff --git a/mysql-test/suite/rocksdb.rpl/combinations b/mysql-test/suite/rocksdb.rpl/combinations index 07042c2cbecd..f47d60f57ed1 100644 --- a/mysql-test/suite/rocksdb.rpl/combinations +++ b/mysql-test/suite/rocksdb.rpl/combinations @@ -1,5 +1,10 @@ -[row] +[row-write-committed] binlog-format=row +loose-rocksdb_write_policy=write_committed + +[row-write-prepared] +binlog-format=row +loose-rocksdb_write_policy=write_prepared [stmt] binlog-format=statement diff --git a/mysql-test/suite/rocksdb.stress/combinations b/mysql-test/suite/rocksdb.stress/combinations new file mode 100644 index 000000000000..be8080d4b9b2 --- /dev/null +++ b/mysql-test/suite/rocksdb.stress/combinations @@ -0,0 +1,5 @@ +[write_committed] +loose-rocksdb_write_policy=write_committed + +[write_prepared] +loose-rocksdb_write_policy=write_prepared diff --git a/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_write_policy_basic.result b/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_write_policy_basic.result index 1399ed2ee920..b727722eaae1 100644 --- a/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_write_policy_basic.result +++ b/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_write_policy_basic.result @@ -2,12 +2,15 @@ CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam; INSERT INTO valid_values VALUES(2); INSERT INTO valid_values VALUES(1); INSERT INTO valid_values VALUES(0); +INSERT INTO valid_values VALUES("write_committed"); +INSERT INTO valid_values VALUES("write_prepared"); +INSERT INTO valid_values VALUES("write_unprepared"); CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam; INSERT INTO invalid_values VALUES('\'aaa\''); SET @start_global_value = @@global.ROCKSDB_WRITE_POLICY; SELECT @start_global_value; @start_global_value -0 +write_committed "Trying to set variable @@global.ROCKSDB_WRITE_POLICY to 444. It should fail because it is readonly." SET @@global.ROCKSDB_WRITE_POLICY = 444; ERROR HY000: Variable 'rocksdb_write_policy' is a read only variable diff --git a/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_write_policy_basic.test b/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_write_policy_basic.test index 4d4c1df978a9..7236cc990c51 100644 --- a/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_write_policy_basic.test +++ b/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_write_policy_basic.test @@ -5,6 +5,9 @@ CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam; INSERT INTO valid_values VALUES(2); INSERT INTO valid_values VALUES(1); INSERT INTO valid_values VALUES(0); +INSERT INTO valid_values VALUES("write_committed"); +INSERT INTO valid_values VALUES("write_prepared"); +INSERT INTO valid_values VALUES("write_unprepared"); CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam; INSERT INTO invalid_values VALUES('\'aaa\''); diff --git a/mysql-test/suite/rocksdb/combinations b/mysql-test/suite/rocksdb/combinations new file mode 100644 index 000000000000..be8080d4b9b2 --- /dev/null +++ b/mysql-test/suite/rocksdb/combinations @@ -0,0 +1,5 @@ +[write_committed] +loose-rocksdb_write_policy=write_committed + +[write_prepared] +loose-rocksdb_write_policy=write_prepared diff --git a/mysql-test/suite/rocksdb/include/have_write_committed.inc b/mysql-test/suite/rocksdb/include/have_write_committed.inc new file mode 100644 index 000000000000..079128f132ab --- /dev/null +++ b/mysql-test/suite/rocksdb/include/have_write_committed.inc @@ -0,0 +1,3 @@ +if (`select count(*) = 0 from performance_schema.session_variables where variable_name = 'rocksdb_write_policy' and variable_value = 'write_committed';`) { + --skip Test requires write_committed policy +} diff --git a/mysql-test/suite/rocksdb/r/index_merge_rocksdb2.result b/mysql-test/suite/rocksdb/r/index_merge_rocksdb2.result index 72593d08707f..3b64bca0613f 100644 --- a/mysql-test/suite/rocksdb/r/index_merge_rocksdb2.result +++ b/mysql-test/suite/rocksdb/r/index_merge_rocksdb2.result @@ -30,14 +30,14 @@ test.t0 analyze status OK # 1. One index explain select * from t0 where key1 < 3 or key1 > 1020; id select_type table partitions type possible_keys key key_len ref rows filtered Extra -1 SIMPLE t0 NULL range i1 i1 4 NULL 2 100.00 Using index condition +1 SIMPLE t0 NULL range i1 i1 4 NULL 4 100.00 Using index condition Warnings: Note 1003 /* select#1 */ select `test`.`t0`.`key1` AS `key1`,`test`.`t0`.`key2` AS `key2`,`test`.`t0`.`key3` AS `key3`,`test`.`t0`.`key4` AS `key4`,`test`.`t0`.`key5` AS `key5`,`test`.`t0`.`key6` AS `key6`,`test`.`t0`.`key7` AS `key7`,`test`.`t0`.`key8` AS `key8` from `test`.`t0` where ((`test`.`t0`.`key1` < 3) or (`test`.`t0`.`key1` > 1020)) # 2. Simple cases explain select * from t0 where key1 < 3 or key2 > 1020; id select_type table partitions type possible_keys key key_len ref rows filtered Extra -1 SIMPLE t0 NULL index_merge i1,i2 i1,i2 4,4 NULL 2 100.00 Using sort_union(i1,i2); Using where +1 SIMPLE t0 NULL index_merge i1,i2 i1,i2 4,4 NULL 4 100.00 Using sort_union(i1,i2); Using where Warnings: Note 1003 /* select#1 */ select `test`.`t0`.`key1` AS `key1`,`test`.`t0`.`key2` AS `key2`,`test`.`t0`.`key3` AS `key3`,`test`.`t0`.`key4` AS `key4`,`test`.`t0`.`key5` AS `key5`,`test`.`t0`.`key6` AS `key6`,`test`.`t0`.`key7` AS `key7`,`test`.`t0`.`key8` AS `key8` from `test`.`t0` where ((`test`.`t0`.`key1` < 3) or (`test`.`t0`.`key2` > 1020)) select * from t0 where key1 < 3 or key2 > 1020; @@ -85,12 +85,12 @@ Warnings: Note 1003 /* select#1 */ select `test`.`t0`.`key1` AS `key1`,`test`.`t0`.`key2` AS `key2`,`test`.`t0`.`key3` AS `key3`,`test`.`t0`.`key4` AS `key4`,`test`.`t0`.`key5` AS `key5`,`test`.`t0`.`key6` AS `key6`,`test`.`t0`.`key7` AS `key7`,`test`.`t0`.`key8` AS `key8` from `test`.`t0` where ((`test`.`t0`.`key3` = 50) and ((`test`.`t0`.`key1` < 3) or (`test`.`t0`.`key2` < 4))) explain select * from t0 use index (i1,i2) where (key1 < 2 or key2 <3) and key3 = 50; id select_type table partitions type possible_keys key key_len ref rows filtered Extra -1 SIMPLE t0 NULL index_merge i1,i2 i1,i2 4,4 NULL # 2.50 Using sort_union(i1,i2); Using where +1 SIMPLE t0 NULL index_merge i1,i2 i1,i2 4,4 NULL # 1.25 Using sort_union(i1,i2); Using where Warnings: Note 1003 /* select#1 */ select `test`.`t0`.`key1` AS `key1`,`test`.`t0`.`key2` AS `key2`,`test`.`t0`.`key3` AS `key3`,`test`.`t0`.`key4` AS `key4`,`test`.`t0`.`key5` AS `key5`,`test`.`t0`.`key6` AS `key6`,`test`.`t0`.`key7` AS `key7`,`test`.`t0`.`key8` AS `key8` from `test`.`t0` USE INDEX (`i2`) USE INDEX (`i1`) where ((`test`.`t0`.`key3` = 50) and ((`test`.`t0`.`key1` < 2) or (`test`.`t0`.`key2` < 3))) explain select * from t0 where (key1 > 1 or key2 > 2); id select_type table partitions type possible_keys key key_len ref rows filtered Extra -1 SIMPLE t0 NULL ALL i1,i2 NULL NULL NULL # 55.55 Using where +1 SIMPLE t0 NULL index_merge i1,i2 i1,i2 4,4 NULL # 100.00 Using sort_union(i1,i2); Using where Warnings: Note 1003 /* select#1 */ select `test`.`t0`.`key1` AS `key1`,`test`.`t0`.`key2` AS `key2`,`test`.`t0`.`key3` AS `key3`,`test`.`t0`.`key4` AS `key4`,`test`.`t0`.`key5` AS `key5`,`test`.`t0`.`key6` AS `key6`,`test`.`t0`.`key7` AS `key7`,`test`.`t0`.`key8` AS `key8` from `test`.`t0` where ((`test`.`t0`.`key1` > 1) or (`test`.`t0`.`key2` > 2)) explain select * from t0 force index (i1,i2) where (key1 > 1 or key2 > 2); @@ -181,7 +181,7 @@ Note 1003 /* select#1 */ select `test`.`t0`.`key1` AS `key1`,`test`.`t0`.`key2` explain select * from t0 where (key1 < 3 or key2 < 3) and (key3 < 1000); id select_type table partitions type possible_keys key key_len ref rows filtered Extra -1 SIMPLE t0 NULL index_merge i1,i2,i3 i1,i2 4,4 NULL # 98.93 Using sort_union(i1,i2); Using where +1 SIMPLE t0 NULL range i1,i2,i3 i3 4 NULL # 55.55 Using index condition; Using where Warnings: Note 1003 /* select#1 */ select `test`.`t0`.`key1` AS `key1`,`test`.`t0`.`key2` AS `key2`,`test`.`t0`.`key3` AS `key3`,`test`.`t0`.`key4` AS `key4`,`test`.`t0`.`key5` AS `key5`,`test`.`t0`.`key6` AS `key6`,`test`.`t0`.`key7` AS `key7`,`test`.`t0`.`key8` AS `key8` from `test`.`t0` where (((`test`.`t0`.`key1` < 3) or (`test`.`t0`.`key2` < 3)) and (`test`.`t0`.`key3` < 1000)) # 7. Complex cases @@ -191,7 +191,7 @@ explain select * from t0 where or key2 > 4; id select_type table partitions type possible_keys key key_len ref rows filtered Extra -1 SIMPLE t0 NULL ALL i1,i2,i3 NULL NULL NULL # 53.90 Using where +1 SIMPLE t0 NULL index_merge i1,i2,i3 i1,i2 4,4 NULL # 100.00 Using sort_union(i1,i2); Using where Warnings: Note 1003 /* select#1 */ select `test`.`t0`.`key1` AS `key1`,`test`.`t0`.`key2` AS `key2`,`test`.`t0`.`key3` AS `key3`,`test`.`t0`.`key4` AS `key4`,`test`.`t0`.`key5` AS `key5`,`test`.`t0`.`key6` AS `key6`,`test`.`t0`.`key7` AS `key7`,`test`.`t0`.`key8` AS `key8` from `test`.`t0` where ((((`test`.`t0`.`key1` < 3) or (`test`.`t0`.`key2` < 3)) and ((`test`.`t0`.`key2` < 4) or (`test`.`t0`.`key3` < 3))) or (`test`.`t0`.`key2` > 4)) explain select * from t0 where @@ -249,7 +249,7 @@ explain select * from t0 where or ((key3 >5 or key5 < 2) and (key5 < 5 or key6 < 6)); id select_type table partitions type possible_keys key key_len ref rows filtered Extra -1 SIMPLE t0 NULL ALL i1,i2,i3,i5,i6 NULL NULL NULL # 52.20 Using where +1 SIMPLE t0 NULL index_merge i1,i2,i3,i5,i6 i3,i5 4,4 NULL # 100.00 Using sort_union(i3,i5); Using where Warnings: Note 1003 /* select#1 */ select `test`.`t0`.`key1` AS `key1`,`test`.`t0`.`key2` AS `key2`,`test`.`t0`.`key3` AS `key3`,`test`.`t0`.`key4` AS `key4`,`test`.`t0`.`key5` AS `key5`,`test`.`t0`.`key6` AS `key6`,`test`.`t0`.`key7` AS `key7`,`test`.`t0`.`key8` AS `key8` from `test`.`t0` where ((((`test`.`t0`.`key3` < 5) or (`test`.`t0`.`key5` < 4)) and ((`test`.`t0`.`key1` < 4) or (`test`.`t0`.`key2` < 4))) or (((`test`.`t0`.`key3` > 5) or (`test`.`t0`.`key5` < 2)) and ((`test`.`t0`.`key5` < 5) or (`test`.`t0`.`key6` < 6)))) explain select * from t0 force index(i1, i2, i3, i4, i5, i6 ) where @@ -331,18 +331,18 @@ key1a key1b key2 key2_1 key2_2 key3 4 4 0 4 4 4 explain select * from t4 where key1a = 3 or key1b = 4; id select_type table partitions type possible_keys key key_len ref rows filtered Extra -1 SIMPLE t4 NULL index_merge i1a,i1b i1a,i1b 4,4 NULL 2 100.00 Using sort_union(i1a,i1b); Using where +1 SIMPLE t4 NULL index_merge i1a,i1b i1a,i1b 4,4 NULL 4 100.00 Using sort_union(i1a,i1b); Using where Warnings: Note 1003 /* select#1 */ select `test`.`t4`.`key1a` AS `key1a`,`test`.`t4`.`key1b` AS `key1b`,`test`.`t4`.`key2` AS `key2`,`test`.`t4`.`key2_1` AS `key2_1`,`test`.`t4`.`key2_2` AS `key2_2`,`test`.`t4`.`key3` AS `key3` from `test`.`t4` where ((`test`.`t4`.`key1a` = 3) or (`test`.`t4`.`key1b` = 4)) # and the following will not explain select * from t4 where key2 = 1 and (key2_1 = 1 or key3 = 5); id select_type table partitions type possible_keys key key_len ref rows filtered Extra -1 SIMPLE t4 NULL ref i2_1,i2_2 i2_1 4 const 1 19.00 Using where +1 SIMPLE t4 NULL ref i2_1,i2_2 i2_1 4 const 2 19.00 Using where Warnings: Note 1003 /* select#1 */ select `test`.`t4`.`key1a` AS `key1a`,`test`.`t4`.`key1b` AS `key1b`,`test`.`t4`.`key2` AS `key2`,`test`.`t4`.`key2_1` AS `key2_1`,`test`.`t4`.`key2_2` AS `key2_2`,`test`.`t4`.`key3` AS `key3` from `test`.`t4` where ((`test`.`t4`.`key2` = 1) and ((`test`.`t4`.`key2_1` = 1) or (`test`.`t4`.`key3` = 5))) explain select * from t4 where key2 = 1 and (key2_1 = 1 or key2_2 = 5); id select_type table partitions type possible_keys key key_len ref rows filtered Extra -1 SIMPLE t4 NULL ref i2_1,i2_2 i2_1 4 const 1 19.00 Using where +1 SIMPLE t4 NULL ref i2_1,i2_2 i2_1 4 const 2 19.00 Using where Warnings: Note 1003 /* select#1 */ select `test`.`t4`.`key1a` AS `key1a`,`test`.`t4`.`key1b` AS `key1b`,`test`.`t4`.`key2` AS `key2`,`test`.`t4`.`key2_1` AS `key2_1`,`test`.`t4`.`key2_2` AS `key2_2`,`test`.`t4`.`key3` AS `key3` from `test`.`t4` where ((`test`.`t4`.`key2` = 1) and ((`test`.`t4`.`key2_1` = 1) or (`test`.`t4`.`key2_2` = 5))) explain select * from t4 where key2_1 = 1 or key2_2 = 5; @@ -357,7 +357,7 @@ insert into t1 select * from t0; explain select * from t0 left join t1 on (t0.key1=t1.key1) where t0.key1=3 or t0.key2=4; id select_type table partitions type possible_keys key key_len ref rows filtered Extra -1 SIMPLE t0 NULL index_merge i1,i2 i1,i2 4,4 NULL 2 100.00 Using union(i1,i2); Using where +1 SIMPLE t0 NULL index_merge i1,i2 i1,i2 4,4 NULL 4 100.00 Using union(i1,i2); Using where 1 SIMPLE t1 NULL ref i1 i1 4 test.t0.key1 1 100.00 NULL Warnings: Note 1003 /* select#1 */ select `test`.`t0`.`key1` AS `key1`,`test`.`t0`.`key2` AS `key2`,`test`.`t0`.`key3` AS `key3`,`test`.`t0`.`key4` AS `key4`,`test`.`t0`.`key5` AS `key5`,`test`.`t0`.`key6` AS `key6`,`test`.`t0`.`key7` AS `key7`,`test`.`t0`.`key8` AS `key8`,`test`.`t1`.`key1` AS `key1`,`test`.`t1`.`key2` AS `key2`,`test`.`t1`.`key3` AS `key3`,`test`.`t1`.`key4` AS `key4`,`test`.`t1`.`key5` AS `key5`,`test`.`t1`.`key6` AS `key6`,`test`.`t1`.`key7` AS `key7`,`test`.`t1`.`key8` AS `key8` from `test`.`t0` left join `test`.`t1` on((`test`.`t1`.`key1` = `test`.`t0`.`key1`)) where ((`test`.`t0`.`key1` = 3) or (`test`.`t0`.`key2` = 4)) @@ -369,7 +369,7 @@ key1 key2 key3 key4 key5 key6 key7 key8 key1 key2 key3 key4 key5 key6 key7 key8 explain select * from t0,t1 where (t0.key1=t1.key1) and ( t0.key1=3 or t0.key2=4); id select_type table partitions type possible_keys key key_len ref rows filtered Extra -1 SIMPLE t0 NULL index_merge i1,i2 i1,i2 4,4 NULL 2 100.00 Using union(i1,i2); Using where +1 SIMPLE t0 NULL index_merge i1,i2 i1,i2 4,4 NULL 4 100.00 Using union(i1,i2); Using where 1 SIMPLE t1 NULL ref i1 i1 4 test.t0.key1 1 100.00 NULL Warnings: Note 1003 /* select#1 */ select `test`.`t0`.`key1` AS `key1`,`test`.`t0`.`key2` AS `key2`,`test`.`t0`.`key3` AS `key3`,`test`.`t0`.`key4` AS `key4`,`test`.`t0`.`key5` AS `key5`,`test`.`t0`.`key6` AS `key6`,`test`.`t0`.`key7` AS `key7`,`test`.`t0`.`key8` AS `key8`,`test`.`t1`.`key1` AS `key1`,`test`.`t1`.`key2` AS `key2`,`test`.`t1`.`key3` AS `key3`,`test`.`t1`.`key4` AS `key4`,`test`.`t1`.`key5` AS `key5`,`test`.`t1`.`key6` AS `key6`,`test`.`t1`.`key7` AS `key7`,`test`.`t1`.`key8` AS `key8` from `test`.`t0` join `test`.`t1` where ((`test`.`t1`.`key1` = `test`.`t0`.`key1`) and ((`test`.`t0`.`key1` = 3) or (`test`.`t0`.`key2` = 4))) @@ -379,16 +379,16 @@ explain select * from t0,t1 where (t0.key1=t1.key1) and (t0.key1=3 or t0.key2<4) and t1.key1=2; id select_type table partitions type possible_keys key key_len ref rows filtered Extra -1 SIMPLE t0 NULL ref i1,i2 i1 4 const 1 5.00 Using where -1 SIMPLE t1 NULL ref i1 i1 4 const 1 100.00 NULL +1 SIMPLE t0 NULL ref i1,i2 i1 4 const 2 2.50 Using where +1 SIMPLE t1 NULL ref i1 i1 4 const 2 100.00 NULL Warnings: Note 1003 /* select#1 */ select `test`.`t0`.`key1` AS `key1`,`test`.`t0`.`key2` AS `key2`,`test`.`t0`.`key3` AS `key3`,`test`.`t0`.`key4` AS `key4`,`test`.`t0`.`key5` AS `key5`,`test`.`t0`.`key6` AS `key6`,`test`.`t0`.`key7` AS `key7`,`test`.`t0`.`key8` AS `key8`,`test`.`t1`.`key1` AS `key1`,`test`.`t1`.`key2` AS `key2`,`test`.`t1`.`key3` AS `key3`,`test`.`t1`.`key4` AS `key4`,`test`.`t1`.`key5` AS `key5`,`test`.`t1`.`key6` AS `key6`,`test`.`t1`.`key7` AS `key7`,`test`.`t1`.`key8` AS `key8` from `test`.`t0` join `test`.`t1` where ((`test`.`t0`.`key1` = 2) and (`test`.`t1`.`key1` = 2) and (`test`.`t0`.`key2` < 4)) # index_merge on second table in join explain select * from t0,t1 where t0.key1 = 5 and (t1.key1 = t0.key1 or t1.key8 = t0.key1); id select_type table partitions type possible_keys key key_len ref rows filtered Extra -1 SIMPLE t0 NULL ref i1 i1 4 const 1 100.00 NULL -1 SIMPLE t1 NULL index_merge i1,i8 i1,i8 4,4 NULL 2 100.00 Using union(i1,i8); Using where; Using join buffer (Block Nested Loop) +1 SIMPLE t0 NULL ref i1 i1 4 const 2 100.00 NULL +1 SIMPLE t1 NULL index_merge i1,i8 i1,i8 4,4 NULL 4 100.00 Using union(i1,i8); Using where; Using join buffer (Block Nested Loop) Warnings: Note 1003 /* select#1 */ select `test`.`t0`.`key1` AS `key1`,`test`.`t0`.`key2` AS `key2`,`test`.`t0`.`key3` AS `key3`,`test`.`t0`.`key4` AS `key4`,`test`.`t0`.`key5` AS `key5`,`test`.`t0`.`key6` AS `key6`,`test`.`t0`.`key7` AS `key7`,`test`.`t0`.`key8` AS `key8`,`test`.`t1`.`key1` AS `key1`,`test`.`t1`.`key2` AS `key2`,`test`.`t1`.`key3` AS `key3`,`test`.`t1`.`key4` AS `key4`,`test`.`t1`.`key5` AS `key5`,`test`.`t1`.`key6` AS `key6`,`test`.`t1`.`key7` AS `key7`,`test`.`t1`.`key8` AS `key8` from `test`.`t0` join `test`.`t1` where ((`test`.`t0`.`key1` = 5) and ((`test`.`t1`.`key1` = 5) or (`test`.`t1`.`key8` = 5))) # Fix for bug#1974 @@ -403,15 +403,15 @@ Note 1003 /* select#1 */ select `test`.`t0`.`key1` AS `key1`,`test`.`t0`.`key2` explain select * from t1 where key1=3 or key2=4 union select * from t1 where key1<4 or key3=5; id select_type table partitions type possible_keys key key_len ref rows filtered Extra -1 PRIMARY t1 NULL index_merge i1,i2 i1,i2 4,4 NULL 2 100.00 Using union(i1,i2); Using where -2 UNION t1 NULL index_merge i1,i3 i1,i3 4,4 NULL 2 100.00 Using sort_union(i1,i3); Using where +1 PRIMARY t1 NULL index_merge i1,i2 i1,i2 4,4 NULL 4 100.00 Using union(i1,i2); Using where +2 UNION t1 NULL index_merge i1,i3 i1,i3 4,4 NULL 4 100.00 Using sort_union(i1,i3); Using where NULL UNION RESULT NULL ALL NULL NULL NULL NULL NULL NULL Using temporary Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`key1` AS `key1`,`test`.`t1`.`key2` AS `key2`,`test`.`t1`.`key3` AS `key3`,`test`.`t1`.`key4` AS `key4`,`test`.`t1`.`key5` AS `key5`,`test`.`t1`.`key6` AS `key6`,`test`.`t1`.`key7` AS `key7`,`test`.`t1`.`key8` AS `key8` from `test`.`t1` where ((`test`.`t1`.`key1` = 3) or (`test`.`t1`.`key2` = 4)) union /* select#2 */ select `test`.`t1`.`key1` AS `key1`,`test`.`t1`.`key2` AS `key2`,`test`.`t1`.`key3` AS `key3`,`test`.`t1`.`key4` AS `key4`,`test`.`t1`.`key5` AS `key5`,`test`.`t1`.`key6` AS `key6`,`test`.`t1`.`key7` AS `key7`,`test`.`t1`.`key8` AS `key8` from `test`.`t1` where ((`test`.`t1`.`key1` < 4) or (`test`.`t1`.`key3` = 5)) # index merge in subselect explain select * from (select * from t1 where key1 = 3 or key2 =3) as z where key8 >5; id select_type table partitions type possible_keys key key_len ref rows filtered Extra -1 SIMPLE t1 NULL index_merge i1,i2,i8 i1,i2 4,4 NULL 2 98.93 Using union(i1,i2); Using where +1 SIMPLE t1 NULL range i1,i2,i8 i8 4 NULL 2 2.50 Using index condition; Using where Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`key1` AS `key1`,`test`.`t1`.`key2` AS `key2`,`test`.`t1`.`key3` AS `key3`,`test`.`t1`.`key4` AS `key4`,`test`.`t1`.`key5` AS `key5`,`test`.`t1`.`key6` AS `key6`,`test`.`t1`.`key7` AS `key7`,`test`.`t1`.`key8` AS `key8` from `test`.`t1` where ((`test`.`t1`.`key8` > 5) and ((`test`.`t1`.`key1` = 3) or (`test`.`t1`.`key2` = 3))) # 12. check for long index_merges. @@ -429,7 +429,7 @@ key1=1 or key2=2 or key3=3 or key4=4 or key5=5 or key6=6 or key7=7 or key8=8 or key9=9 or keyA=10 or keyB=11 or keyC=12; id select_type table partitions type possible_keys key key_len ref rows filtered Extra -1 SIMPLE t3 NULL index_merge i1,i2,i3,i4,i5,i6,i7,i8,i9,iA,iB,iC i1,i2,i3,i4,i5,i6,i7,i8,i9,iA,iB,iC 4,4,4,4,4,4,4,4,4,4,4,4 NULL 12 100.00 Using union(i1,i2,i3,i4,i5,i6,i7,i8,i9,iA,iB,iC); Using where +1 SIMPLE t3 NULL index_merge i1,i2,i3,i4,i5,i6,i7,i8,i9,iA,iB,iC i1,i2,i3,i4,i5,i6,i7,i8,i9,iA,iB,iC 4,4,4,4,4,4,4,4,4,4,4,4 NULL 24 100.00 Using union(i1,i2,i3,i4,i5,i6,i7,i8,i9,iA,iB,iC); Using where Warnings: Note 1003 /* select#1 */ select `test`.`t3`.`key1` AS `key1`,`test`.`t3`.`key2` AS `key2`,`test`.`t3`.`key3` AS `key3`,`test`.`t3`.`key4` AS `key4`,`test`.`t3`.`key5` AS `key5`,`test`.`t3`.`key6` AS `key6`,`test`.`t3`.`key7` AS `key7`,`test`.`t3`.`key8` AS `key8`,`test`.`t3`.`key9` AS `key9`,`test`.`t3`.`keyA` AS `keyA`,`test`.`t3`.`keyB` AS `keyB`,`test`.`t3`.`keyC` AS `keyC` from `test`.`t3` where ((`test`.`t3`.`key1` = 1) or (`test`.`t3`.`key2` = 2) or (`test`.`t3`.`key3` = 3) or (`test`.`t3`.`key4` = 4) or (`test`.`t3`.`key5` = 5) or (`test`.`t3`.`key6` = 6) or (`test`.`t3`.`key7` = 7) or (`test`.`t3`.`key8` = 8) or (`test`.`t3`.`key9` = 9) or (`test`.`t3`.`keyA` = 10) or (`test`.`t3`.`keyB` = 11) or (`test`.`t3`.`keyC` = 12)) select * from t3 where @@ -452,7 +452,7 @@ key1 key2 key3 key4 key5 key6 key7 key8 key9 keyA keyB keyC # Test for Bug#3183 explain select * from t0 where key1 < 3 or key2 < 4; id select_type table partitions type possible_keys key key_len ref rows filtered Extra -1 SIMPLE t0 NULL index_merge i1,i2 i1,i2 4,4 NULL 2 100.00 Using sort_union(i1,i2); Using where +1 SIMPLE t0 NULL index_merge i1,i2 i1,i2 4,4 NULL 4 100.00 Using sort_union(i1,i2); Using where Warnings: Note 1003 /* select#1 */ select `test`.`t0`.`key1` AS `key1`,`test`.`t0`.`key2` AS `key2`,`test`.`t0`.`key3` AS `key3`,`test`.`t0`.`key4` AS `key4`,`test`.`t0`.`key5` AS `key5`,`test`.`t0`.`key6` AS `key6`,`test`.`t0`.`key7` AS `key7`,`test`.`t0`.`key8` AS `key8` from `test`.`t0` where ((`test`.`t0`.`key1` < 3) or (`test`.`t0`.`key2` < 4)) # Bug#21277: InnoDB, wrong result set, index_merge strategy, @@ -940,7 +940,7 @@ INDEX i2(key2) # No primary key explain select * from t1 where key1 < 5 or key2 > 197; id select_type table partitions type possible_keys key key_len ref rows filtered Extra -1 SIMPLE t1 NULL index_merge i1,i2 i1,i2 4,4 NULL 2 100.00 Using sort_union(i1,i2); Using where +1 SIMPLE t1 NULL index_merge i1,i2 i1,i2 4,4 NULL 4 100.00 Using sort_union(i1,i2); Using where Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`key1` AS `key1`,`test`.`t1`.`key2` AS `key2` from `test`.`t1` where ((`test`.`t1`.`key1` < 5) or (`test`.`t1`.`key2` > 197)) select * from t1 where key1 < 5 or key2 > 197; @@ -952,7 +952,7 @@ key1 key2 4 196 explain select * from t1 where key1 < 3 or key2 > 195; id select_type table partitions type possible_keys key key_len ref rows filtered Extra -1 SIMPLE t1 NULL index_merge i1,i2 i1,i2 4,4 NULL 2 100.00 Using sort_union(i1,i2); Using where +1 SIMPLE t1 NULL index_merge i1,i2 i1,i2 4,4 NULL 4 100.00 Using sort_union(i1,i2); Using where Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`key1` AS `key1`,`test`.`t1`.`key2` AS `key2` from `test`.`t1` where ((`test`.`t1`.`key1` < 3) or (`test`.`t1`.`key2` > 195)) select * from t1 where key1 < 3 or key2 > 195; @@ -972,7 +972,7 @@ update t1 set str1='aaa', str2='bbb', str3=concat(key2, '-', key1 div 2, '_' ,if alter table t1 add primary key (str1, zeroval, str2, str3); explain select * from t1 where key1 < 5 or key2 > 197; id select_type table partitions type possible_keys key key_len ref rows filtered Extra -1 SIMPLE t1 NULL ALL i1,i2 NULL NULL NULL 200 55.55 Using where +1 SIMPLE t1 NULL index_merge i1,i2 i1,i2 4,4 NULL 4 100.00 Using sort_union(i1,i2); Using where Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`key1` AS `key1`,`test`.`t1`.`key2` AS `key2`,`test`.`t1`.`str1` AS `str1`,`test`.`t1`.`zeroval` AS `zeroval`,`test`.`t1`.`str2` AS `str2`,`test`.`t1`.`str3` AS `str3` from `test`.`t1` where ((`test`.`t1`.`key1` < 5) or (`test`.`t1`.`key2` > 197)) select * from t1 where key1 < 5 or key2 > 197; @@ -984,7 +984,7 @@ key1 key2 str1 zeroval str2 str3 0 200 aaa 0 bbb 200-0_a explain select * from t1 where key1 < 3 or key2 > 195; id select_type table partitions type possible_keys key key_len ref rows filtered Extra -1 SIMPLE t1 NULL ALL i1,i2 NULL NULL NULL 200 55.55 Using where +1 SIMPLE t1 NULL index_merge i1,i2 i1,i2 4,4 NULL 4 100.00 Using sort_union(i1,i2); Using where Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`key1` AS `key1`,`test`.`t1`.`key2` AS `key2`,`test`.`t1`.`str1` AS `str1`,`test`.`t1`.`zeroval` AS `zeroval`,`test`.`t1`.`str2` AS `str2`,`test`.`t1`.`str3` AS `str3` from `test`.`t1` where ((`test`.`t1`.`key1` < 3) or (`test`.`t1`.`key2` > 195)) select * from t1 where key1 < 3 or key2 > 195; @@ -1008,7 +1008,7 @@ show warnings; Level Code Message explain select pk from t1 where key1 = 1 and key2 = 1; id select_type table partitions type possible_keys key key_len ref rows filtered Extra -1 SIMPLE t1 NULL ref key1,key2 key1 5 const 1 5.00 Using where +1 SIMPLE t1 NULL ref key1,key2 key1 5 const 2 6.67 Using where Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`pk` AS `pk` from `test`.`t1` where ((`test`.`t1`.`key2` = 1) and (`test`.`t1`.`key1` = 1)) select pk from t1 where key2 = 1 and key1 = 1; @@ -1527,7 +1527,7 @@ primary key (pk1, pk2) # Column 9, rows, can change depending on innodb-page-size. explain select * from t1 where pk1 = 1 and pk2 < 80 and key1=0; id select_type table partitions type possible_keys key key_len ref rows filtered Extra -1 SIMPLE t1 NULL range PRIMARY,key1 key1 12 NULL ROWS # Using index condition +1 SIMPLE t1 NULL range PRIMARY,key1 PRIMARY 8 NULL ROWS # Using where Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`pk1` AS `pk1`,`test`.`t1`.`pk2` AS `pk2`,`test`.`t1`.`key1` AS `key1`,`test`.`t1`.`key2` AS `key2`,`test`.`t1`.`pktail1ok` AS `pktail1ok`,`test`.`t1`.`pktail2ok` AS `pktail2ok`,`test`.`t1`.`pktail3bad` AS `pktail3bad`,`test`.`t1`.`pktail4bad` AS `pktail4bad`,`test`.`t1`.`pktail5bad` AS `pktail5bad`,`test`.`t1`.`pk2copy` AS `pk2copy`,`test`.`t1`.`badkey` AS `badkey`,`test`.`t1`.`filler1` AS `filler1`,`test`.`t1`.`filler2` AS `filler2` from `test`.`t1` where ((`test`.`t1`.`key1` = 0) and (`test`.`t1`.`pk1` = 1) and (`test`.`t1`.`pk2` < 80)) # CPK scan + 1 ROR range scan is a special case @@ -1546,7 +1546,7 @@ pk1 pk2 key1 key2 pktail1ok pktail2ok pktail3bad pktail4bad pktail5bad pk2copy b # Verify that CPK fields are considered to be covered by index scans explain select pk1,pk2 from t1 where key1 = 10 and key2=10 and 2*pk1+1 < 2*96+1; id select_type table partitions type possible_keys key key_len ref rows filtered Extra -1 SIMPLE t1 NULL ref key1,key2 key1 4 const 1 5.00 Using index condition; Using where +1 SIMPLE t1 NULL index_merge key1,key2 key1,key2 4,4 NULL 1 100.00 Using intersect(key1,key2); Using where; Using index Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`pk1` AS `pk1`,`test`.`t1`.`pk2` AS `pk2` from `test`.`t1` where ((`test`.`t1`.`key2` = 10) and (`test`.`t1`.`key1` = 10) and (((2 * `test`.`t1`.`pk1`) + 1) < (((2 * 96) + 1)))) select pk1,pk2 from t1 where key1 = 10 and key2=10 and 2*pk1+1 < 2*96+1; @@ -1572,18 +1572,18 @@ Note 1003 /* select#1 */ select `test`.`t1`.`pk1` AS `pk1`,`test`.`t1`.`pk2` AS # The expected number of rows can vary depending on page size explain select * from t1 where pk1 < 7500 and key1 = 10; id select_type table partitions type possible_keys key key_len ref rows filtered Extra -1 SIMPLE t1 NULL index_merge PRIMARY,key1 key1,PRIMARY 8,4 NULL ROWS 100.00 Using intersect(key1,PRIMARY); Using where +1 SIMPLE t1 NULL range PRIMARY,key1 PRIMARY 4 NULL ROWS 2.50 Using where Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`pk1` AS `pk1`,`test`.`t1`.`pk2` AS `pk2`,`test`.`t1`.`key1` AS `key1`,`test`.`t1`.`key2` AS `key2`,`test`.`t1`.`pktail1ok` AS `pktail1ok`,`test`.`t1`.`pktail2ok` AS `pktail2ok`,`test`.`t1`.`pktail3bad` AS `pktail3bad`,`test`.`t1`.`pktail4bad` AS `pktail4bad`,`test`.`t1`.`pktail5bad` AS `pktail5bad`,`test`.`t1`.`pk2copy` AS `pk2copy`,`test`.`t1`.`badkey` AS `badkey`,`test`.`t1`.`filler1` AS `filler1`,`test`.`t1`.`filler2` AS `filler2` from `test`.`t1` where ((`test`.`t1`.`key1` = 10) and (`test`.`t1`.`pk1` < 7500)) # Verify that keys with 'tails' of PK members are ok. explain select * from t1 where pktail1ok=1 and key1=10; id select_type table partitions type possible_keys key key_len ref rows filtered Extra -1 SIMPLE t1 NULL ref key1,pktail1ok key1 4 const 1 5.00 Using where +1 SIMPLE t1 NULL index_merge key1,pktail1ok key1,pktail1ok 4,4 NULL 1 100.00 Using intersect(key1,pktail1ok); Using where Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`pk1` AS `pk1`,`test`.`t1`.`pk2` AS `pk2`,`test`.`t1`.`key1` AS `key1`,`test`.`t1`.`key2` AS `key2`,`test`.`t1`.`pktail1ok` AS `pktail1ok`,`test`.`t1`.`pktail2ok` AS `pktail2ok`,`test`.`t1`.`pktail3bad` AS `pktail3bad`,`test`.`t1`.`pktail4bad` AS `pktail4bad`,`test`.`t1`.`pktail5bad` AS `pktail5bad`,`test`.`t1`.`pk2copy` AS `pk2copy`,`test`.`t1`.`badkey` AS `badkey`,`test`.`t1`.`filler1` AS `filler1`,`test`.`t1`.`filler2` AS `filler2` from `test`.`t1` where ((`test`.`t1`.`key1` = 10) and (`test`.`t1`.`pktail1ok` = 1)) explain select * from t1 where pktail2ok=1 and key1=10; id select_type table partitions type possible_keys key key_len ref rows filtered Extra -1 SIMPLE t1 NULL ref key1,pktail2ok key1 4 const 1 5.00 Using where +1 SIMPLE t1 NULL index_merge key1,pktail2ok key1,pktail2ok 4,4 NULL 1 100.00 Using intersect(key1,pktail2ok); Using where Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`pk1` AS `pk1`,`test`.`t1`.`pk2` AS `pk2`,`test`.`t1`.`key1` AS `key1`,`test`.`t1`.`key2` AS `key2`,`test`.`t1`.`pktail1ok` AS `pktail1ok`,`test`.`t1`.`pktail2ok` AS `pktail2ok`,`test`.`t1`.`pktail3bad` AS `pktail3bad`,`test`.`t1`.`pktail4bad` AS `pktail4bad`,`test`.`t1`.`pktail5bad` AS `pktail5bad`,`test`.`t1`.`pk2copy` AS `pk2copy`,`test`.`t1`.`badkey` AS `badkey`,`test`.`t1`.`filler1` AS `filler1`,`test`.`t1`.`filler2` AS `filler2` from `test`.`t1` where ((`test`.`t1`.`key1` = 10) and (`test`.`t1`.`pktail2ok` = 1)) # Note: The following is actually a deficiency, it uses sort_union currently. @@ -1595,23 +1595,23 @@ Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`pk1` AS `pk1`,`test`.`t1`.`pk2` AS `pk2`,`test`.`t1`.`key1` AS `key1`,`test`.`t1`.`key2` AS `key2`,`test`.`t1`.`pktail1ok` AS `pktail1ok`,`test`.`t1`.`pktail2ok` AS `pktail2ok`,`test`.`t1`.`pktail3bad` AS `pktail3bad`,`test`.`t1`.`pktail4bad` AS `pktail4bad`,`test`.`t1`.`pktail5bad` AS `pktail5bad`,`test`.`t1`.`pk2copy` AS `pk2copy`,`test`.`t1`.`badkey` AS `badkey`,`test`.`t1`.`filler1` AS `filler1`,`test`.`t1`.`filler2` AS `filler2` from `test`.`t1` where (((`test`.`t1`.`pktail2ok` = 1) and (`test`.`t1`.`pk1` < 50000)) or (`test`.`t1`.`key1` = 10)) explain select * from t1 where pktail3bad=1 and key1=10; id select_type table partitions type possible_keys key key_len ref rows filtered Extra -1 SIMPLE t1 NULL ref key1,pktail3bad EITHER_KEY 4 const ROWS 5.00 Using where +1 SIMPLE t1 NULL ref key1,pktail3bad EITHER_KEY 4 const ROWS 2.50 Using where Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`pk1` AS `pk1`,`test`.`t1`.`pk2` AS `pk2`,`test`.`t1`.`key1` AS `key1`,`test`.`t1`.`key2` AS `key2`,`test`.`t1`.`pktail1ok` AS `pktail1ok`,`test`.`t1`.`pktail2ok` AS `pktail2ok`,`test`.`t1`.`pktail3bad` AS `pktail3bad`,`test`.`t1`.`pktail4bad` AS `pktail4bad`,`test`.`t1`.`pktail5bad` AS `pktail5bad`,`test`.`t1`.`pk2copy` AS `pk2copy`,`test`.`t1`.`badkey` AS `badkey`,`test`.`t1`.`filler1` AS `filler1`,`test`.`t1`.`filler2` AS `filler2` from `test`.`t1` where ((`test`.`t1`.`key1` = 10) and (`test`.`t1`.`pktail3bad` = 1)) explain select * from t1 where pktail4bad=1 and key1=10; id select_type table partitions type possible_keys key key_len ref rows filtered Extra -1 SIMPLE t1 NULL ref key1,pktail4bad key1 4 const ROWS 5.00 Using where +1 SIMPLE t1 NULL ref key1,pktail4bad key1 4 const ROWS 2.50 Using where Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`pk1` AS `pk1`,`test`.`t1`.`pk2` AS `pk2`,`test`.`t1`.`key1` AS `key1`,`test`.`t1`.`key2` AS `key2`,`test`.`t1`.`pktail1ok` AS `pktail1ok`,`test`.`t1`.`pktail2ok` AS `pktail2ok`,`test`.`t1`.`pktail3bad` AS `pktail3bad`,`test`.`t1`.`pktail4bad` AS `pktail4bad`,`test`.`t1`.`pktail5bad` AS `pktail5bad`,`test`.`t1`.`pk2copy` AS `pk2copy`,`test`.`t1`.`badkey` AS `badkey`,`test`.`t1`.`filler1` AS `filler1`,`test`.`t1`.`filler2` AS `filler2` from `test`.`t1` where ((`test`.`t1`.`key1` = 10) and (`test`.`t1`.`pktail4bad` = 1)) explain select * from t1 where pktail5bad=1 and key1=10; id select_type table partitions type possible_keys key key_len ref rows filtered Extra -1 SIMPLE t1 NULL ref key1,pktail5bad key1 4 const ROWS 5.00 Using where +1 SIMPLE t1 NULL ref key1,pktail5bad key1 4 const ROWS 2.50 Using where Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`pk1` AS `pk1`,`test`.`t1`.`pk2` AS `pk2`,`test`.`t1`.`key1` AS `key1`,`test`.`t1`.`key2` AS `key2`,`test`.`t1`.`pktail1ok` AS `pktail1ok`,`test`.`t1`.`pktail2ok` AS `pktail2ok`,`test`.`t1`.`pktail3bad` AS `pktail3bad`,`test`.`t1`.`pktail4bad` AS `pktail4bad`,`test`.`t1`.`pktail5bad` AS `pktail5bad`,`test`.`t1`.`pk2copy` AS `pk2copy`,`test`.`t1`.`badkey` AS `badkey`,`test`.`t1`.`filler1` AS `filler1`,`test`.`t1`.`filler2` AS `filler2` from `test`.`t1` where ((`test`.`t1`.`key1` = 10) and (`test`.`t1`.`pktail5bad` = 1)) # Test for problem with innodb key values prefetch buffer: explain select pk1,pk2,key1,key2 from t1 where key1 = 10 and key2=10 limit 10; id select_type table partitions type possible_keys key key_len ref rows filtered Extra -1 SIMPLE t1 NULL ref key1,key2 key1 4 const 1 5.00 Using where +1 SIMPLE t1 NULL index_merge key1,key2 key1,key2 4,4 NULL 1 100.00 Using intersect(key1,key2); Using where; Using index Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`pk1` AS `pk1`,`test`.`t1`.`pk2` AS `pk2`,`test`.`t1`.`key1` AS `key1`,`test`.`t1`.`key2` AS `key2` from `test`.`t1` where ((`test`.`t1`.`key2` = 10) and (`test`.`t1`.`key1` = 10)) limit 10 select pk1,pk2,key1,key2 from t1 where key1 = 10 and key2=10 limit 10; @@ -1665,7 +1665,7 @@ EXPLAIN SELECT t1.f1 FROM t1 WHERE (SELECT COUNT(*) FROM t2 WHERE t2.f3 = 'h' AND t2.f2 = t1.f1) = 0 AND t1.f1 = 2; id select_type table partitions type possible_keys key key_len ref rows filtered Extra 1 PRIMARY t1 NULL const PRIMARY PRIMARY 4 const 1 100.00 Using index -2 DEPENDENT SUBQUERY t2 NULL ref f2,f3 f2 5 const 1 75.00 Using where +2 DEPENDENT SUBQUERY t2 NULL ref f2,f3 f2 5 const 2 50.00 Using where Warnings: Note 1276 Field or reference 'test.t1.f1' of SELECT #2 was resolved in SELECT #1 Note 1003 /* select#1 */ select '2' AS `f1` from `test`.`t1` where (((/* select#2 */ select count(0) from `test`.`t2` where ((`test`.`t2`.`f2` = '2') and (`test`.`t2`.`f3` = 'h'))) = 0)) @@ -1844,7 +1844,7 @@ INSERT INTO t1 SELECT id + 8, id2 + 8, id3 +8 FROM t1; INSERT INTO t1 SELECT id + 16, 7, 0 FROM t1; EXPLAIN SELECT SQL_NO_CACHE count(*) FROM t1 WHERE id2=7 AND id3=0; id select_type table partitions type possible_keys key key_len ref rows filtered Extra -1 SIMPLE t1 NULL ref id2,id3,covering_index id2 4 const 1 5.00 Using where +1 SIMPLE t1 NULL ref id2,id3,covering_index covering_index 8 const,const 2 100.00 Using index Warnings: Warning 1681 'SQL_NO_CACHE' is deprecated and will be removed in a future release. Note 1003 /* select#1 */ select sql_no_cache count(0) AS `count(*)` from `test`.`t1` where ((`test`.`t1`.`id3` = 0) and (`test`.`t1`.`id2` = 7)) diff --git a/mysql-test/suite/rocksdb/r/insert_optimized_config.result b/mysql-test/suite/rocksdb/r/insert_optimized_config.result index 216b6a917628..811f6a662fdb 100644 --- a/mysql-test/suite/rocksdb/r/insert_optimized_config.result +++ b/mysql-test/suite/rocksdb/r/insert_optimized_config.result @@ -1,3 +1,4 @@ +# restart:--rocksdb_write_disable_wal=1 --rocksdb_flush_log_at_trx_commit=0 --rocksdb_default_cf_options=write_buffer_size=16k;target_file_size_base=16k;level0_file_num_compaction_trigger=4;level0_slowdown_writes_trigger=256;level0_stop_writes_trigger=256;max_write_buffer_number=16;compression_per_level=kNoCompression;memtable=vector:1024 --rocksdb_override_cf_options=__system__={memtable=skip_list:16} --rocksdb_compaction_sequential_deletes=0 --rocksdb_compaction_sequential_deletes_window=0 --rocksdb_allow_concurrent_memtable_write=0 create table t1( id bigint not null primary key, i1 bigint, #unique diff --git a/mysql-test/suite/rocksdb/r/rocksdb.result b/mysql-test/suite/rocksdb/r/rocksdb.result index f6970767c98b..a75c54bacce6 100644 --- a/mysql-test/suite/rocksdb/r/rocksdb.result +++ b/mysql-test/suite/rocksdb/r/rocksdb.result @@ -1012,7 +1012,7 @@ rocksdb_whole_key_filtering ON rocksdb_write_batch_max_bytes 0 rocksdb_write_disable_wal OFF rocksdb_write_ignore_missing_column_families OFF -rocksdb_write_policy 0 +rocksdb_write_policy write_committed create table t47 (pk int primary key, col1 varchar(12)) engine=rocksdb; insert into t47 values (1, 'row1'); insert into t47 values (2, 'row2'); diff --git a/mysql-test/suite/rocksdb/t/index_merge_rocksdb2-master.opt b/mysql-test/suite/rocksdb/t/index_merge_rocksdb2-master.opt index ce1de9a97d41..8f24d290fb27 100644 --- a/mysql-test/suite/rocksdb/t/index_merge_rocksdb2-master.opt +++ b/mysql-test/suite/rocksdb/t/index_merge_rocksdb2-master.opt @@ -1 +1 @@ ---loose-rocksdb_strict_collation_check=off --transaction-isolation='READ-COMMITTED' +--loose-rocksdb_strict_collation_check=off --transaction-isolation='READ-COMMITTED' --binlog_format=row --log-bin --loose-rocksdb_records_in_range=2 diff --git a/mysql-test/suite/rocksdb/t/insert_optimized_config-master.opt b/mysql-test/suite/rocksdb/t/insert_optimized_config-master.opt deleted file mode 100644 index fadd8c2ee1fb..000000000000 --- a/mysql-test/suite/rocksdb/t/insert_optimized_config-master.opt +++ /dev/null @@ -1,8 +0,0 @@ ---loose-rocksdb_write_disable_wal=1 ---loose-rocksdb_flush_log_at_trx_commit=0 ---loose-rocksdb_default_cf_options=write_buffer_size=16k;target_file_size_base=16k;level0_file_num_compaction_trigger=4;level0_slowdown_writes_trigger=256;level0_stop_writes_trigger=256;max_write_buffer_number=16;compression_per_level=kNoCompression;memtable=vector:1024 ---loose-rocksdb_override_cf_options=__system__={memtable=skip_list:16} ---loose-rocksdb_compaction_sequential_deletes=0 ---loose-rocksdb_compaction_sequential_deletes_window=0 ---loose-rocksdb_allow_concurrent_memtable_write=0 - diff --git a/mysql-test/suite/rocksdb/t/insert_optimized_config.test b/mysql-test/suite/rocksdb/t/insert_optimized_config.test index 543fbb99d60c..832eca089222 100644 --- a/mysql-test/suite/rocksdb/t/insert_optimized_config.test +++ b/mysql-test/suite/rocksdb/t/insert_optimized_config.test @@ -1,4 +1,9 @@ --source include/have_rocksdb.inc +--source ../include/have_write_committed.inc + +# reload with load optimized config +--let $restart_parameters=restart:--rocksdb_write_disable_wal=1 --rocksdb_flush_log_at_trx_commit=0 --rocksdb_default_cf_options=write_buffer_size=16k;target_file_size_base=16k;level0_file_num_compaction_trigger=4;level0_slowdown_writes_trigger=256;level0_stop_writes_trigger=256;max_write_buffer_number=16;compression_per_level=kNoCompression;memtable=vector:1024 --rocksdb_override_cf_options=__system__={memtable=skip_list:16} --rocksdb_compaction_sequential_deletes=0 --rocksdb_compaction_sequential_deletes_window=0 --rocksdb_allow_concurrent_memtable_write=0 +--source include/restart_mysqld.inc create table t1( id bigint not null primary key, diff --git a/mysql-test/suite/rocksdb/t/rocksdb.test b/mysql-test/suite/rocksdb/t/rocksdb.test index e419938a531b..07bf32845e2d 100644 --- a/mysql-test/suite/rocksdb/t/rocksdb.test +++ b/mysql-test/suite/rocksdb/t/rocksdb.test @@ -1,4 +1,5 @@ --source include/have_rocksdb.inc +--source ../include/have_write_committed.inc --source include/count_sessions.inc # diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index 6978b0061718..2e3d42a43d7b 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -507,7 +507,7 @@ static my_bool rpl_skip_tx_api_var = FALSE; static my_bool rocksdb_print_snapshot_conflict_queries = FALSE; static my_bool rocksdb_large_prefix = FALSE; static my_bool rocksdb_allow_to_start_after_corruption = FALSE; -static uint32_t rocksdb_write_policy = +static uint64_t rocksdb_write_policy = rocksdb::TxnDBWritePolicy::WRITE_COMMITTED; static my_bool rocksdb_error_on_suboptimal_collation = FALSE; @@ -539,6 +539,14 @@ static std::unique_ptr rocksdb_db_options = static std::shared_ptr rocksdb_rate_limiter; +/* This enum needs to be kept up to date with rocksdb::TxnDBWritePolicy */ +static const char *write_policy_names[] = {"write_committed", "write_prepared", + "write_unprepared", NullS}; + +static TYPELIB write_policy_typelib = {array_elements(write_policy_names) - 1, + "write_policy_typelib", + write_policy_names, nullptr}; + /* This enum needs to be kept up to date with rocksdb::InfoLogLevel */ static const char *info_log_level_names[] = {"debug_level", "info_level", "warn_level", "error_level", @@ -785,12 +793,11 @@ static MYSQL_SYSVAR_BOOL( "DBOptions::manual_wal_flush for RocksDB", nullptr, nullptr, rocksdb_db_options->manual_wal_flush); -static MYSQL_SYSVAR_UINT(write_policy, rocksdb_write_policy, +static MYSQL_SYSVAR_ENUM(write_policy, rocksdb_write_policy, PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY, "DBOptions::write_policy for RocksDB", nullptr, nullptr, rocksdb::TxnDBWritePolicy::WRITE_COMMITTED, - rocksdb::TxnDBWritePolicy::WRITE_COMMITTED, - rocksdb::TxnDBWritePolicy::WRITE_UNPREPARED, 0); + &write_policy_typelib); static MYSQL_SYSVAR_BOOL( create_missing_column_families, From 144c41c7a3edd17cb312f80e1e4dd4acb0178a7f Mon Sep 17 00:00:00 2001 From: Manuel Ung Date: Tue, 27 Mar 2018 13:46:43 -0700 Subject: [PATCH 0956/1221] Update rocksdb submodule Upstream commit ID : fb-mysql-5.6.35/9372bc95cf1b720dafa41df09ce7095f697c6604 PS-4476 : Merge prod201801 Summary: Update rocksdb submodule to pick up this change: https://github.com/facebook/rocksdb/commit/f9f4d40f935971d427f87141261eea52539b6bb8 Rerecord the rocksdb.show_engine which started failing. update-submodule: rocksdb Reviewed By: Tema Differential Revision: D7419577 fbshipit-source-id: 90ca69b --- mysql-test/suite/rocksdb/r/show_engine.result | 4 ++++ storage/rocksdb/rocksdb | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/mysql-test/suite/rocksdb/r/show_engine.result b/mysql-test/suite/rocksdb/r/show_engine.result index cf72c3a75498..6ad302c91d2b 100644 --- a/mysql-test/suite/rocksdb/r/show_engine.result +++ b/mysql-test/suite/rocksdb/r/show_engine.result @@ -166,6 +166,7 @@ __system__ TABLE_FACTORY::VERIFY_COMPRESSION # __system__ TABLE_FACTORY::READ_AMP_BYTES_PER_BIT # __system__ TABLE_FACTORY::FORMAT_VERSION # __system__ TABLE_FACTORY::ENABLE_INDEX_COMPRESSION # +__system__ TABLE_FACTORY::BLOCK_ALIGN # cf_t1 COMPARATOR # cf_t1 MERGE_OPERATOR # cf_t1 COMPACTION_FILTER # @@ -237,6 +238,7 @@ cf_t1 TABLE_FACTORY::VERIFY_COMPRESSION # cf_t1 TABLE_FACTORY::READ_AMP_BYTES_PER_BIT # cf_t1 TABLE_FACTORY::FORMAT_VERSION # cf_t1 TABLE_FACTORY::ENABLE_INDEX_COMPRESSION # +cf_t1 TABLE_FACTORY::BLOCK_ALIGN # default COMPARATOR # default MERGE_OPERATOR # default COMPACTION_FILTER # @@ -308,6 +310,7 @@ default TABLE_FACTORY::VERIFY_COMPRESSION # default TABLE_FACTORY::READ_AMP_BYTES_PER_BIT # default TABLE_FACTORY::FORMAT_VERSION # default TABLE_FACTORY::ENABLE_INDEX_COMPRESSION # +default TABLE_FACTORY::BLOCK_ALIGN # rev:cf_t2 COMPARATOR # rev:cf_t2 MERGE_OPERATOR # rev:cf_t2 COMPACTION_FILTER # @@ -379,6 +382,7 @@ rev:cf_t2 TABLE_FACTORY::VERIFY_COMPRESSION # rev:cf_t2 TABLE_FACTORY::READ_AMP_BYTES_PER_BIT # rev:cf_t2 TABLE_FACTORY::FORMAT_VERSION # rev:cf_t2 TABLE_FACTORY::ENABLE_INDEX_COMPRESSION # +rev:cf_t2 TABLE_FACTORY::BLOCK_ALIGN # DROP TABLE t1; DROP TABLE t2; DROP TABLE t3; diff --git a/storage/rocksdb/rocksdb b/storage/rocksdb/rocksdb index 90eca1e616d4..f9f4d40f9359 160000 --- a/storage/rocksdb/rocksdb +++ b/storage/rocksdb/rocksdb @@ -1 +1 @@ -Subproject commit 90eca1e616d4225555ee25ce54462c5993cb79d2 +Subproject commit f9f4d40f935971d427f87141261eea52539b6bb8 From eb93932c0b02a4ce80c1a747b3b60aa73c46fc83 Mon Sep 17 00:00:00 2001 From: Yoshinori Matsunobu Date: Thu, 29 Mar 2018 13:02:05 -0700 Subject: [PATCH 0957/1221] Cheking optimize_filters_for_hits cf opt for bulk loading Upstream commit ID : fb-mysql-5.6.35/684f07009ee33a21e6ef34f991110aa5d152a132 PS-4476 : Merge prod201801 Summary: SstFileWriter added a feature whether to create a bloom filter. By default, bloom filter is always created. This diff checks optimize_filters_for_hits cf option and skips bloom filter if it is turned on. Closes https://github.com/facebook/mysql-5.6/pull/788 Differential Revision: D6814218 Pulled By: yoshinorim fbshipit-source-id: 258afcf --- mysql-test/suite/rocksdb.rpl/combinations | 1 + mysql-test/suite/rocksdb/combinations | 1 + .../rocksdb/r/bloomfilter_bulk_load.result | 15 ++++++++ .../suite/rocksdb/r/information_schema.result | 1 + .../t/bloomfilter_bulk_load-master.opt | 2 ++ .../rocksdb/t/bloomfilter_bulk_load.test | 35 +++++++++++++++++++ .../suite/rocksdb/t/information_schema.test | 1 + storage/rocksdb/rdb_sst_info.cc | 4 ++- storage/rocksdb/rocksdb | 2 +- 9 files changed, 60 insertions(+), 2 deletions(-) create mode 100644 mysql-test/suite/rocksdb/r/bloomfilter_bulk_load.result create mode 100644 mysql-test/suite/rocksdb/t/bloomfilter_bulk_load-master.opt create mode 100644 mysql-test/suite/rocksdb/t/bloomfilter_bulk_load.test diff --git a/mysql-test/suite/rocksdb.rpl/combinations b/mysql-test/suite/rocksdb.rpl/combinations index f47d60f57ed1..db389a073a9f 100644 --- a/mysql-test/suite/rocksdb.rpl/combinations +++ b/mysql-test/suite/rocksdb.rpl/combinations @@ -5,6 +5,7 @@ loose-rocksdb_write_policy=write_committed [row-write-prepared] binlog-format=row loose-rocksdb_write_policy=write_prepared +loose-rocksdb_commit_time_batch_for_recovery=on [stmt] binlog-format=statement diff --git a/mysql-test/suite/rocksdb/combinations b/mysql-test/suite/rocksdb/combinations index be8080d4b9b2..d49de3d38b3c 100644 --- a/mysql-test/suite/rocksdb/combinations +++ b/mysql-test/suite/rocksdb/combinations @@ -3,3 +3,4 @@ loose-rocksdb_write_policy=write_committed [write_prepared] loose-rocksdb_write_policy=write_prepared +loose-rocksdb_commit_time_batch_for_recovery=on diff --git a/mysql-test/suite/rocksdb/r/bloomfilter_bulk_load.result b/mysql-test/suite/rocksdb/r/bloomfilter_bulk_load.result new file mode 100644 index 000000000000..53587cf5160f --- /dev/null +++ b/mysql-test/suite/rocksdb/r/bloomfilter_bulk_load.result @@ -0,0 +1,15 @@ +create table r1 (id bigint primary key, value bigint) engine=rocksdb; +create table r2 (id bigint, value bigint, primary key (id) comment 'cf2') engine=rocksdb; +set session rocksdb_bulk_load=1; +set session rocksdb_bulk_load=0; +select variable_value into @h from performance_schema.global_status where variable_name='rocksdb_block_cache_filter_hit'; +insert into r1 values (100, 100); +select variable_value-@h from performance_schema.global_status where variable_name='rocksdb_block_cache_filter_hit'; +variable_value-@h +1 +select variable_value into @h from performance_schema.global_status where variable_name='rocksdb_block_cache_filter_hit'; +insert into r2 values (100, 100); +select variable_value-@h from performance_schema.global_status where variable_name='rocksdb_block_cache_filter_hit'; +variable_value-@h +0 +DROP TABLE r1, r2; diff --git a/mysql-test/suite/rocksdb/r/information_schema.result b/mysql-test/suite/rocksdb/r/information_schema.result index 74f03f3d2a0f..9adcc28554a3 100644 --- a/mysql-test/suite/rocksdb/r/information_schema.result +++ b/mysql-test/suite/rocksdb/r/information_schema.result @@ -8,6 +8,7 @@ count(*) select VALUE into @keysIn from INFORMATION_SCHEMA.ROCKSDB_COMPACTION_STATS where CF_NAME = 'default' and LEVEL = 'Sum' and TYPE = 'KeyIn'; CREATE TABLE t1 (i1 INT, i2 INT, PRIMARY KEY (i1)) ENGINE = ROCKSDB; INSERT INTO t1 VALUES (1, 1), (2, 2), (3, 3); +set global rocksdb_force_flush_memtable_now = true; select * from INFORMATION_SCHEMA.ROCKSDB_GLOBAL_INFO; TYPE NAME VALUE MAX_INDEX_ID MAX_INDEX_ID max_index_id diff --git a/mysql-test/suite/rocksdb/t/bloomfilter_bulk_load-master.opt b/mysql-test/suite/rocksdb/t/bloomfilter_bulk_load-master.opt new file mode 100644 index 000000000000..4951ede8f311 --- /dev/null +++ b/mysql-test/suite/rocksdb/t/bloomfilter_bulk_load-master.opt @@ -0,0 +1,2 @@ +--loose-rocksdb_default_cf_options=write_buffer_size=16k;block_based_table_factory={filter_policy=bloomfilter:10:false;whole_key_filtering=0;};prefix_extractor=capped:12 +--loose-rocksdb_override_cf_options=cf2={optimize_filters_for_hits=true} diff --git a/mysql-test/suite/rocksdb/t/bloomfilter_bulk_load.test b/mysql-test/suite/rocksdb/t/bloomfilter_bulk_load.test new file mode 100644 index 000000000000..7d5a96a62944 --- /dev/null +++ b/mysql-test/suite/rocksdb/t/bloomfilter_bulk_load.test @@ -0,0 +1,35 @@ +--source include/have_rocksdb.inc + +create table r1 (id bigint primary key, value bigint) engine=rocksdb; +create table r2 (id bigint, value bigint, primary key (id) comment 'cf2') engine=rocksdb; +set session rocksdb_bulk_load=1; +--disable_query_log +let $t = 1; +let $i = 1; +while ($t <= 2) { + while ($i <= 1000) { + let $insert = INSERT INTO r$t VALUES($i, $i); + #skipping a row + if ($i != 100) { + eval $insert; + } + inc $i; + } + inc $t; +} +--enable_query_log +set session rocksdb_bulk_load=0; + +# bloom filter should be useful on insert (calling GetForUpdate) +select variable_value into @h from performance_schema.global_status where variable_name='rocksdb_block_cache_filter_hit'; +insert into r1 values (100, 100); +select variable_value-@h from performance_schema.global_status where variable_name='rocksdb_block_cache_filter_hit'; + +# cf2 has no bloo filter in the bottommost level +select variable_value into @h from performance_schema.global_status where variable_name='rocksdb_block_cache_filter_hit'; +insert into r2 values (100, 100); +select variable_value-@h from performance_schema.global_status where variable_name='rocksdb_block_cache_filter_hit'; + +DROP TABLE r1, r2; + + diff --git a/mysql-test/suite/rocksdb/t/information_schema.test b/mysql-test/suite/rocksdb/t/information_schema.test index 2414df3b8696..c130fd2e46b5 100644 --- a/mysql-test/suite/rocksdb/t/information_schema.test +++ b/mysql-test/suite/rocksdb/t/information_schema.test @@ -10,6 +10,7 @@ select VALUE into @keysIn from INFORMATION_SCHEMA.ROCKSDB_COMPACTION_STATS where CREATE TABLE t1 (i1 INT, i2 INT, PRIMARY KEY (i1)) ENGINE = ROCKSDB; INSERT INTO t1 VALUES (1, 1), (2, 2), (3, 3); +set global rocksdb_force_flush_memtable_now = true; --let $MASTER_UUID = query_get_value(SELECT @@SERVER_UUID, @@SERVER_UUID, 1) --let $max_index_id = query_get_value(SELECT * from INFORMATION_SCHEMA.ROCKSDB_GLOBAL_INFO where type = 'MAX_INDEX_ID', VALUE, 1) --replace_result $MASTER_UUID uuid $max_index_id max_index_id diff --git a/storage/rocksdb/rdb_sst_info.cc b/storage/rocksdb/rdb_sst_info.cc index b52e9c3f39a5..cc63720b5fea 100644 --- a/storage/rocksdb/rdb_sst_info.cc +++ b/storage/rocksdb/rdb_sst_info.cc @@ -76,7 +76,9 @@ rocksdb::Status Rdb_sst_file_ordered::Rdb_sst_file::open() { const rocksdb::Options options(m_db_options, cf_descr.options); m_sst_file_writer = - new rocksdb::SstFileWriter(env_options, options, m_comparator, m_cf); + new rocksdb::SstFileWriter(env_options, options, m_comparator, m_cf, true, + rocksdb::Env::IOPriority::IO_TOTAL, + cf_descr.options.optimize_filters_for_hits); s = m_sst_file_writer->Open(m_name); if (m_tracing) { diff --git a/storage/rocksdb/rocksdb b/storage/rocksdb/rocksdb index f9f4d40f9359..89d989ed75ed 160000 --- a/storage/rocksdb/rocksdb +++ b/storage/rocksdb/rocksdb @@ -1 +1 @@ -Subproject commit f9f4d40f935971d427f87141261eea52539b6bb8 +Subproject commit 89d989ed75ed89e756156d1f82e123b24591be8c From ead8f91bb0ba5f74f3f99d1a3d069d1d35033013 Mon Sep 17 00:00:00 2001 From: Yoshinori Matsunobu Date: Mon, 2 Apr 2018 21:36:00 -0700 Subject: [PATCH 0958/1221] Flushing on deleting chunks after fast index creation Upstream commit ID : fb-mysql-5.6.35/164295af96fcf8a76361f50f7b0111ec8ba203ed PS-4476 : Merge prod201801 Summary: MyRocks fast index creation process deletes a large temporary merge file in the end. The deletion was done by deleting chunks one by one, with short sleep (rocksdb_merge_tmp_file_removal_delay_ms). This was for avoiding burst TRIM stalls on Flash. The graceful delete actually did not work as expected, because all deletions were done in kernel buffer only. Burst TRIM happened when kernel BG thread flushed to storage. This diff explicitly calls fsync for each chunk deletion. Closes https://github.com/facebook/mysql-5.6/pull/803 Differential Revision: D7482938 Pulled By: yoshinorim fbshipit-source-id: 04f58a5 --- storage/rocksdb/rdb_index_merge.cc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/storage/rocksdb/rdb_index_merge.cc b/storage/rocksdb/rdb_index_merge.cc index c8849d628000..f44965f544c8 100644 --- a/storage/rocksdb/rdb_index_merge.cc +++ b/storage/rocksdb/rdb_index_merge.cc @@ -53,6 +53,11 @@ Rdb_index_merge::~Rdb_index_merge() { } my_sleep(m_merge_tmp_file_removal_delay * 1000); + // Not aborting on fsync error since the tmp file is not used anymore + if (mysql_file_sync(m_merge_file.m_fd, MYF(MY_WME))) { + // NO_LINT_DEBUG + sql_print_error("Error flushing truncated MyRocks merge buffer."); + } curr_size -= m_merge_buf_size; } } From 6ed7f227f80c786323dd5c14ea17766bc1eb6a62 Mon Sep 17 00:00:00 2001 From: Manuel Ung Date: Mon, 2 Apr 2018 18:01:49 -0700 Subject: [PATCH 0959/1221] Recalculate index statistics periodically Upstream commit ID : fb-mysql-5.6.35/ee8ca237a15c63ca98904183fd16fb79fb17e1ef PS-4476 : Merge prod201801 Summary: Persisted stats sometimes drift away from the actual sum from sst files. To mitigate this problem, recalculate stats periodically. This is controlled by the rocksdb_stats_recalc_rate global variable which configures the number of indexes to recalculate per second. Implementation details: - Refactor calculate_stats to not depend on handler. - Track indexes left to recalculate in rdb_indexes_to_recalc, and refill when it empties. - Extend existing background thread to recalculate stats on every wake-up. Removed a call to calculate_stats from alter table. This was originally added in https://github.com/facebook/mysql-5.6/commit/3442d47 because uncommitted indexes could not be found in the data dictionary yet, but a subsequent commmit https://github.com/facebook/mysql-5.6/commit/5d2b953 solved this. Also remove fake stats from Rdb_index_stats::merge. This could cause underflow if 1. during recovery, we write sst files with no index stats and 2. on compaction of these sst files, we subtract index stats. Underflow happens because the global count was not incremented during recovery, yet it is subtracted on compaction. Reviewed By: hermanlee Differential Revision: D7482233 fbshipit-source-id: 47286bd --- .../r/rocksdb_stats_recalc_rate_basic.result | 53 +++++ .../t/rocksdb_stats_recalc_rate_basic.test | 18 ++ mysql-test/suite/rocksdb/r/rocksdb.result | 1 + storage/rocksdb/ha_rocksdb.cc | 182 ++++++++++-------- storage/rocksdb/ha_rocksdb.h | 3 - storage/rocksdb/properties_collector.cc | 22 +-- 6 files changed, 173 insertions(+), 106 deletions(-) create mode 100644 mysql-test/suite/rocksdb.sys_vars/r/rocksdb_stats_recalc_rate_basic.result create mode 100644 mysql-test/suite/rocksdb.sys_vars/t/rocksdb_stats_recalc_rate_basic.test diff --git a/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_stats_recalc_rate_basic.result b/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_stats_recalc_rate_basic.result new file mode 100644 index 000000000000..4f337b84e3c9 --- /dev/null +++ b/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_stats_recalc_rate_basic.result @@ -0,0 +1,53 @@ +CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam; +INSERT INTO valid_values VALUES(100); +INSERT INTO valid_values VALUES(1); +CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam; +INSERT INTO invalid_values VALUES('\'aaa\''); +INSERT INTO invalid_values VALUES('\'123\''); +SET @start_global_value = @@global.ROCKSDB_STATS_RECALC_RATE; +SELECT @start_global_value; +@start_global_value +0 +'# Setting to valid values in global scope#' +"Trying to set variable @@global.ROCKSDB_STATS_RECALC_RATE to 100" +SET @@global.ROCKSDB_STATS_RECALC_RATE = 100; +SELECT @@global.ROCKSDB_STATS_RECALC_RATE; +@@global.ROCKSDB_STATS_RECALC_RATE +100 +"Setting the global scope variable back to default" +SET @@global.ROCKSDB_STATS_RECALC_RATE = DEFAULT; +SELECT @@global.ROCKSDB_STATS_RECALC_RATE; +@@global.ROCKSDB_STATS_RECALC_RATE +0 +"Trying to set variable @@global.ROCKSDB_STATS_RECALC_RATE to 1" +SET @@global.ROCKSDB_STATS_RECALC_RATE = 1; +SELECT @@global.ROCKSDB_STATS_RECALC_RATE; +@@global.ROCKSDB_STATS_RECALC_RATE +1 +"Setting the global scope variable back to default" +SET @@global.ROCKSDB_STATS_RECALC_RATE = DEFAULT; +SELECT @@global.ROCKSDB_STATS_RECALC_RATE; +@@global.ROCKSDB_STATS_RECALC_RATE +0 +"Trying to set variable @@session.ROCKSDB_STATS_RECALC_RATE to 444. It should fail because it is not session." +SET @@session.ROCKSDB_STATS_RECALC_RATE = 444; +ERROR HY000: Variable 'rocksdb_stats_recalc_rate' is a GLOBAL variable and should be set with SET GLOBAL +'# Testing with invalid values in global scope #' +"Trying to set variable @@global.ROCKSDB_STATS_RECALC_RATE to 'aaa'" +SET @@global.ROCKSDB_STATS_RECALC_RATE = 'aaa'; +Got one of the listed errors +SELECT @@global.ROCKSDB_STATS_RECALC_RATE; +@@global.ROCKSDB_STATS_RECALC_RATE +0 +"Trying to set variable @@global.ROCKSDB_STATS_RECALC_RATE to '123'" +SET @@global.ROCKSDB_STATS_RECALC_RATE = '123'; +Got one of the listed errors +SELECT @@global.ROCKSDB_STATS_RECALC_RATE; +@@global.ROCKSDB_STATS_RECALC_RATE +0 +SET @@global.ROCKSDB_STATS_RECALC_RATE = @start_global_value; +SELECT @@global.ROCKSDB_STATS_RECALC_RATE; +@@global.ROCKSDB_STATS_RECALC_RATE +0 +DROP TABLE valid_values; +DROP TABLE invalid_values; diff --git a/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_stats_recalc_rate_basic.test b/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_stats_recalc_rate_basic.test new file mode 100644 index 000000000000..811b70d1860d --- /dev/null +++ b/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_stats_recalc_rate_basic.test @@ -0,0 +1,18 @@ +--source include/have_rocksdb.inc +--source include/have_myisam.inc + +CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam; +INSERT INTO valid_values VALUES(100); +INSERT INTO valid_values VALUES(1); + +CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam; +INSERT INTO invalid_values VALUES('\'aaa\''); +INSERT INTO invalid_values VALUES('\'123\''); + +--let $sys_var=ROCKSDB_STATS_RECALC_RATE +--let $read_only=0 +--let $session=0 +--source ../include/rocksdb_sys_var.inc + +DROP TABLE valid_values; +DROP TABLE invalid_values; diff --git a/mysql-test/suite/rocksdb/r/rocksdb.result b/mysql-test/suite/rocksdb/r/rocksdb.result index a75c54bacce6..23445696c194 100644 --- a/mysql-test/suite/rocksdb/r/rocksdb.result +++ b/mysql-test/suite/rocksdb/r/rocksdb.result @@ -987,6 +987,7 @@ rocksdb_skip_bloom_filter_on_read OFF rocksdb_skip_fill_cache OFF rocksdb_sst_mgr_rate_bytes_per_sec 0 rocksdb_stats_dump_period_sec 600 +rocksdb_stats_recalc_rate 0 rocksdb_store_row_debug_checksums OFF rocksdb_strict_collation_check OFF rocksdb_strict_collation_exceptions diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index 2e3d42a43d7b..dac69e693752 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -101,6 +101,7 @@ static st_io_stall_stats io_stall_stats; const std::string DEFAULT_CF_NAME("default"); const std::string DEFAULT_SYSTEM_CF_NAME("__system__"); const std::string PER_INDEX_CF_NAME("$per_index_cf"); +static std::vector rdb_indexes_to_recalc; /** Updates row counters based on the table type and operation type. @@ -510,6 +511,7 @@ static my_bool rocksdb_allow_to_start_after_corruption = FALSE; static uint64_t rocksdb_write_policy = rocksdb::TxnDBWritePolicy::WRITE_COMMITTED; static my_bool rocksdb_error_on_suboptimal_collation = FALSE; +static uint32_t rocksdb_stats_recalc_rate = 0; std::atomic rocksdb_row_lock_deadlocks(0); std::atomic rocksdb_row_lock_wait_timeouts(0); @@ -1496,6 +1498,13 @@ static MYSQL_SYSVAR_UINT( RDB_DEFAULT_TBL_STATS_SAMPLE_PCT, /* everything */ 0, /* max */ RDB_TBL_STATS_SAMPLE_PCT_MAX, 0); +static MYSQL_SYSVAR_UINT( + stats_recalc_rate, rocksdb_stats_recalc_rate, PLUGIN_VAR_RQCMDARG, + "The number of indexes per second to recalculate statistics for. 0 to " + "disable background recalculation.", + nullptr, nullptr, 0 /* default value */, 0 /* min value */, + UINT_MAX /* max value */, 0); + static MYSQL_SYSVAR_BOOL( large_prefix, rocksdb_large_prefix, PLUGIN_VAR_RQCMDARG, "Support large index prefix length of 3072 bytes. If off, the maximum " @@ -1657,6 +1666,7 @@ static struct st_mysql_sys_var *rocksdb_system_variables[] = { MYSQL_SYSVAR(large_prefix), MYSQL_SYSVAR(allow_to_start_after_corruption), MYSQL_SYSVAR(error_on_suboptimal_collation), + MYSQL_SYSVAR(stats_recalc_rate), nullptr}; static rocksdb::WriteOptions @@ -10414,39 +10424,26 @@ int ha_rocksdb::optimize(THD *const thd, HA_CHECK_OPT *const check_opt) { DBUG_RETURN(HA_EXIT_SUCCESS); } -int ha_rocksdb::calculate_stats( - const TABLE *const table_arg, - const std::unordered_set &to_recalc) { +static int calculate_stats( + const std::unordered_set> &to_recalc, + bool include_memtables) { DBUG_ENTER_FUNC(); // find per column family key ranges which need to be queried std::unordered_map> ranges; std::unordered_map stats; - std::vector to_recalc_indexes; - std::vector buf(table_arg->s->keys * 2 * - Rdb_key_def::INDEX_NUMBER_SIZE); - for (uint i = 0; i < table_arg->s->keys; i++) { - const Rdb_key_def &kd = *m_key_descr_arr[i]; - const GL_INDEX_ID index_id = kd.get_gl_index_id(); - if (to_recalc.find(index_id) == to_recalc.end()) { - continue; - } + std::vector buf(to_recalc.size() * 2 * Rdb_key_def::INDEX_NUMBER_SIZE); - to_recalc_indexes.push_back(i); - } - - for (uint i : to_recalc_indexes) { - const auto bufp = &buf[i * 2 * Rdb_key_def::INDEX_NUMBER_SIZE]; - const Rdb_key_def &kd = *m_key_descr_arr[i]; - const GL_INDEX_ID index_id = kd.get_gl_index_id(); - ranges[kd.get_cf()].push_back(get_range(i, bufp)); + uchar *bufp = buf.data(); + for (const auto &kd : to_recalc) { + const GL_INDEX_ID index_id = kd->get_gl_index_id(); + ranges[kd->get_cf()].push_back(myrocks::get_range(*kd, bufp)); + bufp += 2 * Rdb_key_def::INDEX_NUMBER_SIZE; - // Initialize the stats to 0. If there are no files that contain - // this gl_index_id, then 0 should be stored for the cached stats. stats[index_id] = Rdb_index_stats(index_id); - DBUG_ASSERT(kd.get_key_parts() > 0); - stats[index_id].m_distinct_keys_per_prefix.resize(kd.get_key_parts()); + DBUG_ASSERT(kd->get_key_parts() > 0); + stats[index_id].m_distinct_keys_per_prefix.resize(kd->get_key_parts()); } // get RocksDB table properties for these ranges @@ -10457,8 +10454,8 @@ int ha_rocksdb::calculate_stats( it.first, &it.second[0], it.second.size(), &props); DBUG_ASSERT(props.size() >= old_size); if (!status.ok()) { - DBUG_RETURN( - rdb_error_to_mysql(status, "Could not access RocksDB properties")); + DBUG_RETURN(ha_rocksdb::rdb_error_to_mysql( + status, "Could not access RocksDB properties")); } } @@ -10479,7 +10476,7 @@ int ha_rocksdb::calculate_stats( other SQL tables, it can be that we're only seeing a small fraction of table's entries (and so we can't update statistics based on that). */ - if (to_recalc.find(it1.m_gl_index_id) == to_recalc.end()) { + if (stats.find(it1.m_gl_index_id) == stats.end()) { continue; } @@ -10490,52 +10487,46 @@ int ha_rocksdb::calculate_stats( num_sst++; } - // calculate memtable cardinality - Rdb_tbl_card_coll cardinality_collector(rocksdb_table_stats_sampling_pct); - auto read_opts = rocksdb::ReadOptions(); - read_opts.read_tier = rocksdb::ReadTier::kMemtableTier; - for (const uint i : to_recalc_indexes) { - const Rdb_key_def &kd = *m_key_descr_arr[i]; - - Rdb_index_stats &stat = stats[kd.get_gl_index_id()]; - - uchar r_buf[Rdb_key_def::INDEX_NUMBER_SIZE * 2]; - auto r = get_range(i, r_buf); - uint64_t memtableCount; - uint64_t memtableSize; - rdb->GetApproximateMemTableStats(kd.get_cf(), r, &memtableCount, - &memtableSize); - if (memtableCount < (uint64_t)stat.m_rows / 10) { - // skip tables that already have enough stats from SST files to reduce - // overhead and avoid degradation of big tables stats by sampling from - // relatively tiny (less than 10% of full data set) memtable dataset - continue; - } + if (include_memtables) { + // calculate memtable cardinality + Rdb_tbl_card_coll cardinality_collector(rocksdb_table_stats_sampling_pct); + auto read_opts = rocksdb::ReadOptions(); + read_opts.read_tier = rocksdb::ReadTier::kMemtableTier; + for (const auto &kd : to_recalc) { + Rdb_index_stats &stat = stats[kd->get_gl_index_id()]; + + uchar r_buf[Rdb_key_def::INDEX_NUMBER_SIZE * 2]; + auto r = myrocks::get_range(*kd, r_buf); + uint64_t memtableCount; + uint64_t memtableSize; + rdb->GetApproximateMemTableStats(kd->get_cf(), r, &memtableCount, + &memtableSize); + if (memtableCount < (uint64_t)stat.m_rows / 10) { + // skip tables that already have enough stats from SST files to reduce + // overhead and avoid degradation of big tables stats by sampling from + // relatively tiny (less than 10% of full data set) memtable dataset + continue; + } - std::unique_ptr it = std::unique_ptr( - rdb->NewIterator(read_opts, kd.get_cf())); + std::unique_ptr it = + std::unique_ptr( + rdb->NewIterator(read_opts, kd->get_cf())); - uchar *first_key; - uint key_size; - if (is_pk(i, table, m_tbl_def)) { - first_key = m_pk_packed_tuple; - } else { - first_key = m_sk_packed_tuple; - } - kd.get_first_key(first_key, &key_size); - rocksdb::Slice first_index_key((const char *)first_key, key_size); + rocksdb::Slice first_index_key((const char *)r_buf, + Rdb_key_def::INDEX_NUMBER_SIZE); - cardinality_collector.Reset(); - for (it->Seek(first_index_key); is_valid(it.get()); it->Next()) { - const rocksdb::Slice key = it->key(); - if (!kd.covers_key(key)) { - break; // end of this index - } - stat.m_rows++; + cardinality_collector.Reset(); + for (it->Seek(first_index_key); is_valid(it.get()); it->Next()) { + const rocksdb::Slice key = it->key(); + if (!kd->covers_key(key)) { + break; // end of this index + } + stat.m_rows++; - cardinality_collector.ProcessKey(key, &kd, &stat); + cardinality_collector.ProcessKey(key, kd.get(), &stat); + } + cardinality_collector.AdjustStats(&stat); } - cardinality_collector.AdjustStats(&stat); } // set and persist new stats @@ -10554,14 +10545,12 @@ int ha_rocksdb::analyze(THD *const thd, HA_CHECK_OPT *const check_opt) { DBUG_ENTER_FUNC(); if (table) { - std::unordered_set ids_to_check; + std::unordered_set> ids_to_check; for (uint i = 0; i < table->s->keys; i++) { - const Rdb_key_def &kd = *m_key_descr_arr[i]; - const GL_INDEX_ID index_id = kd.get_gl_index_id(); - ids_to_check.insert(index_id); + ids_to_check.insert(m_key_descr_arr[i]); } - int res = calculate_stats(table, ids_to_check); + int res = calculate_stats(ids_to_check, true); if (res != HA_EXIT_SUCCESS) { DBUG_RETURN(HA_ADMIN_FAILED); } @@ -11422,18 +11411,6 @@ bool ha_rocksdb::commit_inplace_alter_table( dict_manager.finish_indexes_operation( create_index_ids, Rdb_key_def::DDL_CREATE_INDEX_ONGOING); - /* - We need to recalculate the index stats here manually. The reason is that - the secondary index does not exist inside - m_index_num_to_keydef until it is committed to the data dictionary, which - prevents us from updating the stats normally as the ddl_manager cannot - find the proper gl_index_ids yet during adjust_stats calls. - */ - if (calculate_stats(altered_table, create_index_ids)) { - /* Failed to update index statistics, should never happen */ - DBUG_ASSERT(0); - } - rdb_drop_idx_thread.signal(); } @@ -11942,6 +11919,41 @@ void Rdb_background_thread::run() { } } + // Recalculate statistics for indexes. + if (rocksdb_stats_recalc_rate) { + std::unordered_set> to_recalc; + + if (rdb_indexes_to_recalc.empty()) { + struct Rdb_index_collector : public Rdb_tables_scanner { + int add_table(Rdb_tbl_def *tdef) override { + for (uint i = 0; i < tdef->m_key_count; i++) { + rdb_indexes_to_recalc.push_back( + tdef->m_key_descr_arr[i]->get_gl_index_id()); + } + return HA_EXIT_SUCCESS; + } + } collector; + ddl_manager.scan_for_tables(&collector); + } + + while (to_recalc.size() < rocksdb_stats_recalc_rate && + !rdb_indexes_to_recalc.empty()) { + const auto index_id = rdb_indexes_to_recalc.back(); + rdb_indexes_to_recalc.pop_back(); + + std::shared_ptr keydef = + ddl_manager.safe_find(index_id); + + if (keydef) { + to_recalc.insert(keydef); + } + } + + if (!to_recalc.empty()) { + calculate_stats(to_recalc, false); + } + } + // Set the next timestamp for mysql_cond_timedwait() (which ends up calling // pthread_cond_timedwait()) to wait on. ts_next_sync.tv_sec = ts.tv_sec + WAKE_UP_INTERVAL; diff --git a/storage/rocksdb/ha_rocksdb.h b/storage/rocksdb/ha_rocksdb.h index eb916de06775..1a8011dba1ab 100644 --- a/storage/rocksdb/ha_rocksdb.h +++ b/storage/rocksdb/ha_rocksdb.h @@ -1320,9 +1320,6 @@ class ha_rocksdb : public my_core::handler { MY_ATTRIBUTE((__warn_unused_result__)); int analyze(THD *const thd, HA_CHECK_OPT *const check_opt) override MY_ATTRIBUTE((__warn_unused_result__)); - int calculate_stats(const TABLE *const table_arg, - const std::unordered_set &to_recalc) - MY_ATTRIBUTE((__warn_unused_result__)); enum_alter_inplace_result check_if_supported_inplace_alter( TABLE *altered_table, diff --git a/storage/rocksdb/properties_collector.cc b/storage/rocksdb/properties_collector.cc index e5565e29bdca..925e4b1b217e 100644 --- a/storage/rocksdb/properties_collector.cc +++ b/storage/rocksdb/properties_collector.cc @@ -435,15 +435,8 @@ void Rdb_index_stats::merge(const Rdb_index_stats &s, const bool &increment, m_entry_single_deletes += s.m_entry_single_deletes; m_entry_merges += s.m_entry_merges; m_entry_others += s.m_entry_others; - if (s.m_distinct_keys_per_prefix.size() > 0) { - for (i = 0; i < s.m_distinct_keys_per_prefix.size(); i++) { - m_distinct_keys_per_prefix[i] += s.m_distinct_keys_per_prefix[i]; - } - } else { - for (i = 0; i < m_distinct_keys_per_prefix.size(); i++) { - m_distinct_keys_per_prefix[i] += - s.m_rows >> (m_distinct_keys_per_prefix.size() - i - 1); - } + for (i = 0; i < s.m_distinct_keys_per_prefix.size(); i++) { + m_distinct_keys_per_prefix[i] += s.m_distinct_keys_per_prefix[i]; } } else { m_rows -= s.m_rows; @@ -454,15 +447,8 @@ void Rdb_index_stats::merge(const Rdb_index_stats &s, const bool &increment, m_entry_single_deletes -= s.m_entry_single_deletes; m_entry_merges -= s.m_entry_merges; m_entry_others -= s.m_entry_others; - if (s.m_distinct_keys_per_prefix.size() > 0) { - for (i = 0; i < s.m_distinct_keys_per_prefix.size(); i++) { - m_distinct_keys_per_prefix[i] -= s.m_distinct_keys_per_prefix[i]; - } - } else { - for (i = 0; i < m_distinct_keys_per_prefix.size(); i++) { - m_distinct_keys_per_prefix[i] -= - s.m_rows >> (m_distinct_keys_per_prefix.size() - i - 1); - } + for (i = 0; i < s.m_distinct_keys_per_prefix.size(); i++) { + m_distinct_keys_per_prefix[i] -= s.m_distinct_keys_per_prefix[i]; } } } From d0711a46df16bcd9ec338e5a49130b4925bb22c7 Mon Sep 17 00:00:00 2001 From: Manuel Ung Date: Mon, 9 Apr 2018 15:48:44 -0700 Subject: [PATCH 0960/1221] Do not hardcode path to libraries with /lib/ Upstream commit ID : fb-mysql-5.6.35/122fcabce9934267b2a1da4bf86fac2caf6b4118 PS-4476 : Merge prod201801 This is a NULL cherry-pick to Percona Server 5.7 to create the commit placeholder for the corresponding upstream commit. Reason: Patch not taken into Percona Server. From 24dc44040e2d2ec6e24889efaa2b1fa9cfa586fd Mon Sep 17 00:00:00 2001 From: Sergei Petrunia Date: Tue, 10 Apr 2018 11:43:01 -0700 Subject: [PATCH 0961/1221] =?UTF-8?q?[mysql-5.6][PR]=20Issue=20#802:=20MyR?= =?UTF-8?q?ocks:=20Statement=20rollback=20doesnt=20work=20correctly=20for?= =?UTF-8?q?=20nes=E2=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Upstream commit ID : fb-mysql-5.6.35/6ddedd8f1e0ddcbc24e8f9a005636c5463799ab7 PS-4476 : Merge prod201801 Summary: …ted statements Variant #1: When the statement fails, we should roll back to the latest savepoint taken at the top level. Closes https://github.com/facebook/mysql-5.6/pull/804 Differential Revision: D7509380 Pulled By: hermanlee fbshipit-source-id: 9a6f414 --- mysql-test/suite/rocksdb/r/transaction.result | 25 ++++ mysql-test/suite/rocksdb/t/transaction.test | 33 +++++ storage/rocksdb/ha_rocksdb.cc | 129 ++++++++++++++---- 3 files changed, 162 insertions(+), 25 deletions(-) diff --git a/mysql-test/suite/rocksdb/r/transaction.result b/mysql-test/suite/rocksdb/r/transaction.result index 44c149a017c5..28950b46666c 100644 --- a/mysql-test/suite/rocksdb/r/transaction.result +++ b/mysql-test/suite/rocksdb/r/transaction.result @@ -1577,3 +1577,28 @@ value rollback; set session transaction_isolation=@orig_tx_iso; drop table t1; +# +# #802: MyRocks: Statement rollback doesnt work correctly for nested statements +# +set session transaction_isolation='READ-COMMITTED'; +create table t1 (a varchar(100)) engine=rocksdb; +create table t2(a int) engine=rocksdb; +insert into t2 values (1), (2); +create table t3(a varchar(100)) engine=rocksdb; +create function func() returns varchar(100) deterministic +begin +insert into t3 values ('func-called'); +set @a= (select a from t2); +return 'func-returned'; +end;// +begin; +insert into t1 values (func()); +ERROR 21000: Subquery returns more than 1 row +select * from t1; +a +# The following must not produce 'func-called': +select * from t3; +a +rollback; +drop function func; +drop table t1,t2,t3; diff --git a/mysql-test/suite/rocksdb/t/transaction.test b/mysql-test/suite/rocksdb/t/transaction.test index 188da473bab8..2c36a0828b77 100644 --- a/mysql-test/suite/rocksdb/t/transaction.test +++ b/mysql-test/suite/rocksdb/t/transaction.test @@ -221,3 +221,36 @@ rollback; set session transaction_isolation=@orig_tx_iso; drop table t1; + +--echo # +--echo # #802: MyRocks: Statement rollback doesnt work correctly for nested statements +--echo # +# MyRocks does not support gap locks in REPEATABLE-READ mode, test does not +# require RR ISO to complete, so lets alter the ISO to RC +set session transaction_isolation='READ-COMMITTED'; + +create table t1 (a varchar(100)) engine=rocksdb; +create table t2(a int) engine=rocksdb; +insert into t2 values (1), (2); + +create table t3(a varchar(100)) engine=rocksdb; + +delimiter //; +create function func() returns varchar(100) deterministic +begin + insert into t3 values ('func-called'); + set @a= (select a from t2); + return 'func-returned'; +end;// +delimiter ;// + +begin; +--error ER_SUBQUERY_NO_1_ROW +insert into t1 values (func()); +select * from t1; +--echo # The following must not produce 'func-called': +select * from t3; + +rollback; +drop function func; +drop table t1,t2,t3; diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index dac69e693752..d1732e57edff 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -1766,13 +1766,24 @@ class Rdb_snapshot_notifier : public rocksdb::TransactionNotifier { /* This is the base class for transactions when interacting with rocksdb. */ class Rdb_transaction { -protected: + protected: ulonglong m_write_count = 0; ulonglong m_lock_count = 0; std::unordered_map m_auto_incr_map; bool m_is_delayed_snapshot = false; + private: + /* Number of RockDB savepoints taken */ + int m_n_savepoints; + /* + Number of write operations this transaction had when we took the last + savepoint (the idea is not to take another savepoint if we haven't made + any changes) + */ + ulonglong m_writes_at_last_savepoint; + + protected: THD *m_thd = nullptr; rocksdb::ReadOptions m_read_opts; @@ -1823,6 +1834,14 @@ class Rdb_transaction { return s; } + protected: + /* + The following two are helper functions to be overloaded by child classes. + They should provide RocksDB's savepoint semantics. + */ + virtual void do_set_savepoint() = 0; + virtual void do_rollback_to_savepoint() = 0; + public: int64_t m_snapshot_timestamp = 0; bool m_ddl_transaction; @@ -2270,6 +2289,48 @@ class Rdb_transaction { virtual bool is_tx_started() const = 0; virtual void start_tx() = 0; virtual void start_stmt() = 0; + + void set_initial_savepoint() { + /* + Set the initial savepoint. If the first statement in the transaction + fails, we need something to roll back to, without rolling back the + entire transaction. + */ + do_set_savepoint(); + m_n_savepoints = 1; + m_writes_at_last_savepoint = m_write_count; + } + + /* + Called when a "top-level" statement inside a transaction completes + successfully and its changes become part of the transaction's changes. + */ + void make_stmt_savepoint_permanent() { + + // Take another RocksDB savepoint only if we had changes since the last + // one. This is very important for long transactions doing lots of + // SELECTs. + if (m_writes_at_last_savepoint != m_write_count) { + do_set_savepoint(); + m_writes_at_last_savepoint = m_write_count; + m_n_savepoints++; + } + } + + /* + Rollback to the savepoint we've set before the last statement + */ + void rollback_to_stmt_savepoint() { + if (m_writes_at_last_savepoint != m_write_count) { + do_rollback_to_savepoint(); + if (!--m_n_savepoints) { + do_set_savepoint(); + m_n_savepoints = 1; + } + m_writes_at_last_savepoint = m_write_count; + } + } + virtual void rollback_stmt() = 0; void set_tx_failed(bool failed_arg) { m_is_tx_failed = failed_arg; } @@ -2569,9 +2630,19 @@ class Rdb_transaction_impl : public Rdb_transaction { m_read_opts = rocksdb::ReadOptions(); + set_initial_savepoint(); + m_ddl_transaction = false; } + /* Implementations of do_*savepoint based on rocksdB::Transaction savepoints + */ + void do_set_savepoint() override { m_rocksdb_tx->SetSavePoint(); } + + void do_rollback_to_savepoint() override { + m_rocksdb_tx->RollbackToSavePoint(); + } + /* Start a statement inside a multi-statement transaction. @@ -2584,7 +2655,6 @@ class Rdb_transaction_impl : public Rdb_transaction { void start_stmt() override { // Set the snapshot to delayed acquisition (SetSnapshotOnNextOperation) acquire_snapshot(false); - m_rocksdb_tx->SetSavePoint(); } /* @@ -2595,7 +2665,7 @@ class Rdb_transaction_impl : public Rdb_transaction { /* TODO: here we must release the locks taken since the start_stmt() call */ if (m_rocksdb_tx) { const rocksdb::Snapshot *const org_snapshot = m_rocksdb_tx->GetSnapshot(); - m_rocksdb_tx->RollbackToSavePoint(); + rollback_to_stmt_savepoint(); const rocksdb::Snapshot *const cur_snapshot = m_rocksdb_tx->GetSnapshot(); if (org_snapshot != cur_snapshot) { @@ -2682,7 +2752,12 @@ class Rdb_writebatch_impl : public Rdb_transaction { return res; } -public: + /* Implementations of do_*savepoint based on rocksdB::WriteBatch savepoints */ + void do_set_savepoint() override { m_batch->SetSavePoint(); } + + void do_rollback_to_savepoint() override { m_batch->RollbackToSavePoint(); } + + public: bool is_writebatch_trx() const override { return true; } void set_lock_timeout(int timeout_sec_arg) override { @@ -2782,13 +2857,15 @@ class Rdb_writebatch_impl : public Rdb_transaction { write_opts.disableWAL = THDVAR(m_thd, write_disable_wal); write_opts.ignore_missing_column_families = THDVAR(m_thd, write_ignore_missing_column_families); + + set_initial_savepoint(); } - void start_stmt() override { m_batch->SetSavePoint(); } + void start_stmt() override {} void rollback_stmt() override { if (m_batch) - m_batch->RollbackToSavePoint(); + rollback_to_stmt_savepoint(); } explicit Rdb_writebatch_impl(THD *const thd) @@ -2996,7 +3073,8 @@ static int rocksdb_prepare(handlerton *const hton, THD *const thd, } DEBUG_SYNC(thd, "rocksdb.prepared"); - } + } else + tx->make_stmt_savepoint_permanent(); return HA_EXIT_SUCCESS; } @@ -3148,11 +3226,9 @@ static int rocksdb_commit(handlerton *const hton, THD *const thd, } else { /* We get here when committing a statement within a transaction. - - We don't need to do anything here. tx->start_stmt() will notify - Rdb_transaction_impl that another statement has started. */ tx->set_tx_failed(false); + tx->make_stmt_savepoint_permanent(); } if (my_core::thd_tx_isolation(thd) <= ISO_READ_COMMITTED) { @@ -9788,22 +9864,25 @@ int ha_rocksdb::external_lock(THD *const thd, int lock_type) { } if (lock_type == F_UNLCK) { - Rdb_transaction *const tx = get_or_create_tx(thd); - - tx->io_perf_end_and_record(&m_io_perf); - tx->m_n_mysql_tables_in_use--; - if (tx->m_n_mysql_tables_in_use == 0 && - !my_core::thd_test_options(thd, OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN)) { - /* - Do like InnoDB: when we get here, it's time to commit a - single-statement transaction. + Rdb_transaction *const tx = get_tx_from_thd(thd); + + if (tx) { + tx->io_perf_end_and_record(&m_io_perf); + tx->m_n_mysql_tables_in_use--; + if (tx->m_n_mysql_tables_in_use == 0 && + !my_core::thd_test_options(thd, + OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN)) { + /* + Do like InnoDB: when we get here, it's time to commit a + single-statement transaction. - If the statement involved multiple tables, this code will be executed - for each of them, but that's ok because non-first tx->commit() calls - will be no-ops. - */ - if (tx->commit_or_rollback()) { - res = HA_ERR_INTERNAL_ERROR; + If the statement involved multiple tables, this code will be executed + for each of them, but that's ok because non-first tx->commit() calls + will be no-ops. + */ + if (tx->commit_or_rollback()) { + res = HA_ERR_INTERNAL_ERROR; + } } } } else { From 3104be9a3a6f795b193048c02c10064f22a7fe60 Mon Sep 17 00:00:00 2001 From: Herman Lee Date: Fri, 13 Apr 2018 11:56:43 -0700 Subject: [PATCH 0962/1221] Update myrocks to latest rocksdb Upstream commit ID : fb-mysql-5.6.35/118a357a3c85563252f4ade8d7b77a3707002a39 PS-4476 : Merge prod201801 Summary: Fix a valgrind reported test by updating to the latest rocksdb. Also fix test so that write-prepared and write-committed settings generate the same results file. update-submodule: rocksdb Differential Revision: D7621166 fbshipit-source-id: 9ddeb5a --- .../suite/rocksdb/r/autoinc_debug.result | 40 ++++++++----------- mysql-test/suite/rocksdb/t/autoinc_debug.test | 16 ++++---- storage/rocksdb/rocksdb | 2 +- 3 files changed, 25 insertions(+), 33 deletions(-) diff --git a/mysql-test/suite/rocksdb/r/autoinc_debug.result b/mysql-test/suite/rocksdb/r/autoinc_debug.result index dc015e053503..c94a8f276546 100644 --- a/mysql-test/suite/rocksdb/r/autoinc_debug.result +++ b/mysql-test/suite/rocksdb/r/autoinc_debug.result @@ -61,12 +61,10 @@ insert into t values (); set debug="+d,crash_commit_before"; commit; ERROR HY000: Lost connection to MySQL server during query -select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; -table_schema table_name auto_increment -test t 4 -select max(i) from t; -max(i) -3 +select max(i) into @row_max from t; +select table_schema, table_name, auto_increment > @row_max from information_schema.tables where table_name = 't'; +table_schema table_name auto_increment > @row_max +test t 1 # After engine prepare begin; insert into t values (); @@ -74,12 +72,10 @@ insert into t values (); set debug="+d,crash_commit_after_prepare"; commit; ERROR HY000: Lost connection to MySQL server during query -select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; -table_schema table_name auto_increment -test t 4 -select max(i) from t; -max(i) -3 +select max(i) into @row_max from t; +select table_schema, table_name, auto_increment > @row_max from information_schema.tables where table_name = 't'; +table_schema table_name auto_increment > @row_max +test t 1 # After binlog begin; insert into t values (); @@ -87,12 +83,10 @@ insert into t values (); set debug="+d,crash_commit_after_log"; commit; ERROR HY000: Lost connection to MySQL server during query -select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; -table_schema table_name auto_increment -test t 6 -select max(i) from t; -max(i) -5 +select max(i) into @row_max from t; +select table_schema, table_name, auto_increment > @row_max from information_schema.tables where table_name = 't'; +table_schema table_name auto_increment > @row_max +test t 1 # After everything begin; insert into t values (); @@ -100,10 +94,8 @@ insert into t values (); set debug="+d,crash_commit_after"; commit; ERROR HY000: Lost connection to MySQL server during query -select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; -table_schema table_name auto_increment -test t 8 -select max(i) from t; -max(i) -7 +select max(i) into @row_max from t; +select table_schema, table_name, auto_increment > @row_max from information_schema.tables where table_name = 't'; +table_schema table_name auto_increment > @row_max +test t 1 drop table t; diff --git a/mysql-test/suite/rocksdb/t/autoinc_debug.test b/mysql-test/suite/rocksdb/t/autoinc_debug.test index 9f30f634794b..ae7179f7de3c 100644 --- a/mysql-test/suite/rocksdb/t/autoinc_debug.test +++ b/mysql-test/suite/rocksdb/t/autoinc_debug.test @@ -65,8 +65,8 @@ commit; --exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect --source include/wait_until_connected_again.inc --disable_reconnect -select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; -select max(i) from t; +select max(i) into @row_max from t; +select table_schema, table_name, auto_increment > @row_max from information_schema.tables where table_name = 't'; --echo # After engine prepare begin; @@ -81,8 +81,8 @@ commit; --exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect --source include/wait_until_connected_again.inc --disable_reconnect -select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; -select max(i) from t; +select max(i) into @row_max from t; +select table_schema, table_name, auto_increment > @row_max from information_schema.tables where table_name = 't'; --echo # After binlog begin; @@ -97,8 +97,8 @@ commit; --exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect --source include/wait_until_connected_again.inc --disable_reconnect -select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; -select max(i) from t; +select max(i) into @row_max from t; +select table_schema, table_name, auto_increment > @row_max from information_schema.tables where table_name = 't'; --echo # After everything begin; @@ -113,7 +113,7 @@ commit; --exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect --source include/wait_until_connected_again.inc --disable_reconnect -select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; -select max(i) from t; +select max(i) into @row_max from t; +select table_schema, table_name, auto_increment > @row_max from information_schema.tables where table_name = 't'; drop table t; diff --git a/storage/rocksdb/rocksdb b/storage/rocksdb/rocksdb index 89d989ed75ed..31ee4bf2400c 160000 --- a/storage/rocksdb/rocksdb +++ b/storage/rocksdb/rocksdb @@ -1 +1 @@ -Subproject commit 89d989ed75ed89e756156d1f82e123b24591be8c +Subproject commit 31ee4bf2400cf1807718192d352ca8bd7837ada2 From d1886797b332a61dfb3671e15889d8ee51113bb5 Mon Sep 17 00:00:00 2001 From: Abhinav Sharma Date: Fri, 13 Apr 2018 20:52:47 -0700 Subject: [PATCH 0963/1221] Lock old secondary keys in updates Upstream commit ID : fb-mysql-5.6.35/14133d3c78b846658e1650557bf931efc4455825 PS-4476 : Merge prod201801 Summary: The earlier behavior was to only lock the new secondary keys in an update and thow a duplicate key error if someone tries to access the old key. This is not standard 2PL behavior and can cause dependency errors in parallel replication Reviewed By: hermanlee Differential Revision: D7593232 fbshipit-source-id: d5e6daf --- .../r/secondary_key_update_lock.result | 11 +++++++ .../rocksdb/t/secondary_key_update_lock.test | 29 +++++++++++++++++++ storage/rocksdb/ha_rocksdb.cc | 16 +++++----- 3 files changed, 49 insertions(+), 7 deletions(-) create mode 100644 mysql-test/suite/rocksdb/r/secondary_key_update_lock.result create mode 100644 mysql-test/suite/rocksdb/t/secondary_key_update_lock.test diff --git a/mysql-test/suite/rocksdb/r/secondary_key_update_lock.result b/mysql-test/suite/rocksdb/r/secondary_key_update_lock.result new file mode 100644 index 000000000000..5c8a92989a0e --- /dev/null +++ b/mysql-test/suite/rocksdb/r/secondary_key_update_lock.result @@ -0,0 +1,11 @@ +create table t1 (a int primary key, b int unique key) engine = rocksdb; +insert into t1 values(1, 1); +begin; +update t1 set b = 2 where b = 1; +insert into t1 values(2, 1); +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +rollback; +select * from t1; +a b +1 1 +drop table t1; diff --git a/mysql-test/suite/rocksdb/t/secondary_key_update_lock.test b/mysql-test/suite/rocksdb/t/secondary_key_update_lock.test new file mode 100644 index 000000000000..cf74d5ab9590 --- /dev/null +++ b/mysql-test/suite/rocksdb/t/secondary_key_update_lock.test @@ -0,0 +1,29 @@ +--source include/have_rocksdb.inc +--source include/count_sessions.inc + +# Tests if locks are held for the secondary keys of old rows in updates + +connect (con, localhost, root,,); + +connection default; +create table t1 (a int primary key, b int unique key) engine = rocksdb; +insert into t1 values(1, 1); + +connection con; +begin; +update t1 set b = 2 where b = 1; # this should lock the row where b = 1 + +connection default; +error ER_LOCK_WAIT_TIMEOUT; +insert into t1 values(2, 1); # should error out with lock_wait_timeout + +connection con; +rollback; +select * from t1; + +# Cleanup +connection default; +drop table t1; +disconnect con; + +--source include/wait_until_count_sessions.inc diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index d1732e57edff..4d5e1ba95467 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -8603,8 +8603,7 @@ int ha_rocksdb::check_and_lock_sk(const uint &key_id, rocksdb::Slice((const char *)m_sk_packed_tuple, size); /* - For UPDATEs, if the key has changed, we need to obtain a lock. INSERTs - always require locking. + Acquire lock on the old key in case of UPDATE */ if (row_info.old_data != nullptr) { size = kd.pack_record(table, m_pack_buffer, row_info.old_data, @@ -8613,12 +8612,15 @@ int ha_rocksdb::check_and_lock_sk(const uint &key_id, const rocksdb::Slice old_slice = rocksdb::Slice((const char *)m_sk_packed_tuple_old, size); - /* - For updates, if the keys are the same, then no lock is needed + const rocksdb::Status s = + get_for_update(row_info.tx, kd.get_cf(), old_slice, nullptr); + if (!s.ok()) { + return row_info.tx->set_status_error(table->in_use, s, kd, m_tbl_def); + } - Also check to see if the key has any fields set to NULL. If it does, then - this key is unique since NULL is not equal to each other, so no lock is - needed. + /* + If the old and new keys are the same we're done since we've already taken + the lock on the old key */ if (!Rdb_pk_comparator::bytewise_compare(new_slice, old_slice)) { return HA_EXIT_SUCCESS; From d0d5635573ebc4f157e36a989d14f7ee6f87c410 Mon Sep 17 00:00:00 2001 From: Yoshinori Matsunobu Date: Mon, 23 Apr 2018 20:10:34 -0700 Subject: [PATCH 0964/1221] Aborting on Background Thread I/O errors as well Upstream commit ID : fb-mysql-5.6.35/0e662d8627a835a180e82602d8ca6b8c56cdffd9 PS-4476 : Merge prod201801 Summary: When hitting rocksdb::Status != ok, MyRocks aborted on non-background threads, but did not abort when BG threads hit it. This may result in data loss, when BG thread hit EIO on fsync but did succeeded in following attempts. This diff changes the behavior so that MyRocks aborts as well on BG errors. Closes https://github.com/facebook/mysql-5.6/pull/816 Differential Revision: D7733224 Pulled By: yoshinorim fbshipit-source-id: 4a7d3fb --- storage/rocksdb/ha_rocksdb.cc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index 4d5e1ba95467..e0f30d29b867 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -12222,6 +12222,9 @@ void rdb_handle_io_error(const rocksdb::Status status, } case RDB_IO_ERROR_BG_THREAD: { rdb_log_status_error(status, "BG thread failed to write to RocksDB"); + /* NO_LINT_DEBUG */ + sql_print_error("MyRocks: aborting on BG write error."); + abort(); break; } case RDB_IO_ERROR_GENERAL: { From bf0e434e93ff9b0b517cf9cf23c22387edac0b4d Mon Sep 17 00:00:00 2001 From: Abhinav Sharma Date: Mon, 30 Apr 2018 14:22:47 -0700 Subject: [PATCH 0965/1221] Cleanup key parsing and handle unique key conflicts Upstream commit ID : fb-mysql-5.6.35/b67891e57f1fa9bfddae6713fb4043933f273e05 PS-4476 : Merge prod201801 This is a NULL cherry-pick to Percona Server 5.7 to create the commit placeholder for the corresponding upstream commit. Reason: Patch not taken into Percona Server. From 173f84041406c503c17dbcf78a4239ff2dc05278 Mon Sep 17 00:00:00 2001 From: Zhongyi Xie Date: Tue, 1 May 2018 17:14:02 -0700 Subject: [PATCH 0966/1221] export metrics for RocksDB bloom filter false positive rates Upstream commit ID : fb-mysql-5.6.35/d2a309c2aa8612834a9c3ce8673d8a5f25997cce PS-4476 : Merge prod201801 Summary: Update rocksdb submodule to pick up this change: 65fe8d6cd6083dbef73af8ff273fb570236331f6 update-submodule: rocksdb Reviewed By: anirbanr-fb Differential Revision: D7565651 fbshipit-source-id: b20a5f8 --- mysql-test/suite/rocksdb/r/rocksdb.result | 6 ++++++ storage/rocksdb/ha_rocksdb.cc | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/mysql-test/suite/rocksdb/r/rocksdb.result b/mysql-test/suite/rocksdb/r/rocksdb.result index 23445696c194..97bc305d2eb4 100644 --- a/mysql-test/suite/rocksdb/r/rocksdb.result +++ b/mysql-test/suite/rocksdb/r/rocksdb.result @@ -1542,6 +1542,8 @@ rocksdb_block_cache_index_bytes_insert # rocksdb_block_cache_index_hit # rocksdb_block_cache_index_miss # rocksdb_block_cache_miss # +rocksdb_bloom_filter_full_positive # +rocksdb_bloom_filter_full_true_positive # rocksdb_bloom_filter_prefix_checked # rocksdb_bloom_filter_prefix_useful # rocksdb_bloom_filter_useful # @@ -1648,6 +1650,8 @@ rocksdb_block_cache_index_bytes_insert rocksdb_block_cache_index_hit rocksdb_block_cache_index_miss rocksdb_block_cache_miss +rocksdb_bloom_filter_full_positive +rocksdb_bloom_filter_full_true_positive rocksdb_bloom_filter_prefix_checked rocksdb_bloom_filter_prefix_useful rocksdb_bloom_filter_useful @@ -1756,6 +1760,8 @@ rocksdb_block_cache_index_bytes_insert rocksdb_block_cache_index_hit rocksdb_block_cache_index_miss rocksdb_block_cache_miss +rocksdb_bloom_filter_full_positive +rocksdb_bloom_filter_full_true_positive rocksdb_bloom_filter_prefix_checked rocksdb_bloom_filter_prefix_useful rocksdb_bloom_filter_useful diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index e0f30d29b867..184badc7892d 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -11563,6 +11563,8 @@ struct rocksdb_status_counters_t { uint64_t block_cache_data_hit; uint64_t block_cache_data_add; uint64_t bloom_filter_useful; + uint64_t bloom_filter_full_positive; + uint64_t bloom_filter_full_true_positive; uint64_t memtable_hit; uint64_t memtable_miss; uint64_t get_hit_l0; @@ -11637,6 +11639,8 @@ DEF_SHOW_FUNC(block_cache_data_miss, BLOCK_CACHE_DATA_MISS) DEF_SHOW_FUNC(block_cache_data_hit, BLOCK_CACHE_DATA_HIT) DEF_SHOW_FUNC(block_cache_data_add, BLOCK_CACHE_DATA_ADD) DEF_SHOW_FUNC(bloom_filter_useful, BLOOM_FILTER_USEFUL) +DEF_SHOW_FUNC(bloom_filter_full_positive, BLOOM_FILTER_FULL_POSITIVE) +DEF_SHOW_FUNC(bloom_filter_full_true_positive, BLOOM_FILTER_FULL_TRUE_POSITIVE) DEF_SHOW_FUNC(memtable_hit, MEMTABLE_HIT) DEF_SHOW_FUNC(memtable_miss, MEMTABLE_MISS) DEF_SHOW_FUNC(get_hit_l0, GET_HIT_L0) @@ -11868,6 +11872,8 @@ static SHOW_VAR rocksdb_status_vars[] = { DEF_STATUS_VAR(block_cache_data_hit), DEF_STATUS_VAR(block_cache_data_add), DEF_STATUS_VAR(bloom_filter_useful), + DEF_STATUS_VAR(bloom_filter_full_positive), + DEF_STATUS_VAR(bloom_filter_full_true_positive), DEF_STATUS_VAR(memtable_hit), DEF_STATUS_VAR(memtable_miss), DEF_STATUS_VAR(get_hit_l0), From 1a0198a3809a2cfd678a07f3a952fcfac0d549c0 Mon Sep 17 00:00:00 2001 From: Yaohui Hu Date: Thu, 3 May 2018 15:55:04 -0700 Subject: [PATCH 0967/1221] T28965157 Start server with --rocksdb-table-cache-numshardbits=100000000 segfaults Upstream commit ID : fb-mysql-5.6.35/de7f3d9c8184995f3cf6acec08680d746b0f25c6 PS-4476 : Merge prod201801 This is a NULL cherry-pick to Percona Server 5.7 to create the commit placeholder for the corresponding upstream commit. Reason: Patch not taken into Percona Server and MyRocks affected code already applied to source tree through another patch. From 08166797b59b3287ecd135e1956d840683da1eb7 Mon Sep 17 00:00:00 2001 From: Herman Lee Date: Tue, 8 May 2018 15:53:55 -0700 Subject: [PATCH 0968/1221] Fix crash in calculate_stats() when tables are modified/removed Upstream commit ID : fb-mysql-5.6.35/8cdc4019b56f56520be95cd9810788098e408db6 PS-4476 : Merge prod201801 Summary: During periodic stats recalculation, the keydefs of tables to recalculate are pulled out into the to_recalc array. This is passed into calculate_stats where it is used to find the set of sst files containing the indexes. Within calculate_stats(), there is a second call to find the keydef from the ddl_manager, but it is possible the table has been removed when the second call is made. The code does not check the contents of the keydef pointer before de-referencing it. If the table has changed, the pointer is NULL, and can cause a crash. Since the key definition is already being passed in, it can be reused instead of another lookup in the ddl_manager. To make this more efficient, change to_recalc to a map of gl_index_id -> key_def, so that lookups can be performed on to_recalc for the stored key_def. Squash with D7482233 Reviewed By: lth Differential Revision: D7920320 fbshipit-source-id: 49f767f --- storage/rocksdb/ha_rocksdb.cc | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index 184badc7892d..ed4a784a53f1 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -10506,7 +10506,8 @@ int ha_rocksdb::optimize(THD *const thd, HA_CHECK_OPT *const check_opt) { } static int calculate_stats( - const std::unordered_set> &to_recalc, + const std::unordered_map> + &to_recalc, bool include_memtables) { DBUG_ENTER_FUNC(); @@ -10517,8 +10518,9 @@ static int calculate_stats( std::vector buf(to_recalc.size() * 2 * Rdb_key_def::INDEX_NUMBER_SIZE); uchar *bufp = buf.data(); - for (const auto &kd : to_recalc) { - const GL_INDEX_ID index_id = kd->get_gl_index_id(); + for (const auto &it : to_recalc) { + const GL_INDEX_ID index_id = it.first; + auto &kd = it.second; ranges[kd->get_cf()].push_back(myrocks::get_range(*kd, bufp)); bufp += 2 * Rdb_key_def::INDEX_NUMBER_SIZE; @@ -10561,9 +10563,13 @@ static int calculate_stats( continue; } - auto kd = ddl_manager.safe_find(it1.m_gl_index_id); - DBUG_ASSERT(kd != nullptr); - stats[it1.m_gl_index_id].merge(it1, true, kd->max_storage_fmt_length()); + auto it_index = to_recalc.find(it1.m_gl_index_id); + DBUG_ASSERT(it_index != to_recalc.end()); + if (it_index == to_recalc.end()) { + continue; + } + stats[it1.m_gl_index_id].merge( + it1, true, it_index->second->max_storage_fmt_length()); } num_sst++; } @@ -10573,7 +10579,8 @@ static int calculate_stats( Rdb_tbl_card_coll cardinality_collector(rocksdb_table_stats_sampling_pct); auto read_opts = rocksdb::ReadOptions(); read_opts.read_tier = rocksdb::ReadTier::kMemtableTier; - for (const auto &kd : to_recalc) { + for (const auto &it_kd : to_recalc) { + const std::shared_ptr &kd = it_kd.second; Rdb_index_stats &stat = stats[kd->get_gl_index_id()]; uchar r_buf[Rdb_key_def::INDEX_NUMBER_SIZE * 2]; @@ -10626,9 +10633,11 @@ int ha_rocksdb::analyze(THD *const thd, HA_CHECK_OPT *const check_opt) { DBUG_ENTER_FUNC(); if (table) { - std::unordered_set> ids_to_check; + std::unordered_map> + ids_to_check; for (uint i = 0; i < table->s->keys; i++) { - ids_to_check.insert(m_key_descr_arr[i]); + ids_to_check.insert(std::make_pair(m_key_descr_arr[i]->get_gl_index_id(), + m_key_descr_arr[i])); } int res = calculate_stats(ids_to_check, true); @@ -12008,7 +12017,8 @@ void Rdb_background_thread::run() { // Recalculate statistics for indexes. if (rocksdb_stats_recalc_rate) { - std::unordered_set> to_recalc; + std::unordered_map> + to_recalc; if (rdb_indexes_to_recalc.empty()) { struct Rdb_index_collector : public Rdb_tables_scanner { @@ -12032,7 +12042,7 @@ void Rdb_background_thread::run() { ddl_manager.safe_find(index_id); if (keydef) { - to_recalc.insert(keydef); + to_recalc.insert(std::make_pair(keydef->get_gl_index_id(), keydef)); } } From 41902ac042e53a41b3d1626e87598646025de42d Mon Sep 17 00:00:00 2001 From: Sergei Petrunia Date: Wed, 9 May 2018 10:46:37 -0700 Subject: [PATCH 0969/1221] Issue #809: Wrong query result with bloom filters Upstream commit ID : fb-mysql-5.6.35/5435d3db43f8d6b0cc7c34ad3748b005fa9fa565 PS-4476 : Merge prod201801 Summary: In reverse-ordered column families, if one wants to start reading at the logical end of the index, they should Seek() to a key value that is not covered by the index. This may (and typically does) prevent use of a bloom filter. The calls to setup_scan_iterator() that are made for index and table scan didn't take this into account and passed eq_cond_len=INDEX_NUMBER_SIZE. Fixed them to compute and pass correct eq_cond_len. Also, removed an incorrect assert in ha_rocksdb::setup_iterator_bounds. Closes https://github.com/facebook/mysql-5.6/pull/825 Differential Revision: D7899467 Pulled By: hermanlee fbshipit-source-id: c0022a8 --- .../suite/rocksdb/r/bloomfilter5.result | 67 +++++++++++++++++++ .../suite/rocksdb/t/bloomfilter5-master.opt | 3 + mysql-test/suite/rocksdb/t/bloomfilter5.test | 64 ++++++++++++++++++ storage/rocksdb/ha_rocksdb.cc | 10 +-- storage/rocksdb/rdb_datadic.h | 26 +++++-- 5 files changed, 160 insertions(+), 10 deletions(-) create mode 100644 mysql-test/suite/rocksdb/r/bloomfilter5.result create mode 100644 mysql-test/suite/rocksdb/t/bloomfilter5-master.opt create mode 100644 mysql-test/suite/rocksdb/t/bloomfilter5.test diff --git a/mysql-test/suite/rocksdb/r/bloomfilter5.result b/mysql-test/suite/rocksdb/r/bloomfilter5.result new file mode 100644 index 000000000000..6509a69df349 --- /dev/null +++ b/mysql-test/suite/rocksdb/r/bloomfilter5.result @@ -0,0 +1,67 @@ +set session transaction_isolation='READ-COMMITTED'; +# +# Issue #809: Wrong query result with bloom filters +# +create table t1 ( +id1 bigint not null, +id2 bigint not null, +id3 varchar(100) not null, +id4 int not null, +id5 int not null, +value bigint, +value2 varchar(100), +primary key (id1, id2, id3, id4) COMMENT 'rev:bf5_1' +) engine=rocksdb; +create table t2(a int) engine=rocksdb; +insert into t2 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9); +create table t3(seq int) engine=rocksdb; +insert into t3 +select +1+ A.a + B.a* 10 + C.a * 100 + D.a * 1000 +from t2 A, t2 B, t2 C, t2 D; +insert t1 +select +(seq+9) div 10, (seq+4) div 5, (seq+4) div 5, seq, seq, 1000, "aaabbbccc" +from t3; +set global rocksdb_force_flush_memtable_now=1; +# Full table scan +explain +select * from t1 limit 10; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 10000 100.00 NULL +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`id1` AS `id1`,`test`.`t1`.`id2` AS `id2`,`test`.`t1`.`id3` AS `id3`,`test`.`t1`.`id4` AS `id4`,`test`.`t1`.`id5` AS `id5`,`test`.`t1`.`value` AS `value`,`test`.`t1`.`value2` AS `value2` from `test`.`t1` limit 10 +select * from t1 limit 10; +id1 id2 id3 id4 id5 value value2 +1000 2000 2000 10000 10000 1000 aaabbbccc +1000 2000 2000 9999 9999 1000 aaabbbccc +1000 2000 2000 9998 9998 1000 aaabbbccc +1000 2000 2000 9997 9997 1000 aaabbbccc +1000 2000 2000 9996 9996 1000 aaabbbccc +1000 1999 1999 9995 9995 1000 aaabbbccc +1000 1999 1999 9994 9994 1000 aaabbbccc +1000 1999 1999 9993 9993 1000 aaabbbccc +1000 1999 1999 9992 9992 1000 aaabbbccc +1000 1999 1999 9991 9991 1000 aaabbbccc +# An index scan starting from the end of the table: +explain +select * from t1 order by id1 desc,id2 desc, id3 desc, id4 desc limit 1; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 NULL index NULL PRIMARY 122 NULL 1 100.00 NULL +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`id1` AS `id1`,`test`.`t1`.`id2` AS `id2`,`test`.`t1`.`id3` AS `id3`,`test`.`t1`.`id4` AS `id4`,`test`.`t1`.`id5` AS `id5`,`test`.`t1`.`value` AS `value`,`test`.`t1`.`value2` AS `value2` from `test`.`t1` order by `test`.`t1`.`id1` desc,`test`.`t1`.`id2` desc,`test`.`t1`.`id3` desc,`test`.`t1`.`id4` desc limit 1 +select * from t1 order by id1 desc,id2 desc, id3 desc, id4 desc limit 1; +id1 id2 id3 id4 id5 value value2 +1000 2000 2000 10000 10000 1000 aaabbbccc +create table t4 ( +pk int unsigned not null primary key, +kp1 int unsigned not null, +kp2 int unsigned not null, +col1 int unsigned, +key(kp1, kp2) comment 'rev:bf5_2' +) engine=rocksdb; +insert into t4 values (1, 0xFFFF, 0xFFF, 12345); +# This must not fail an assert: +select * from t4 force index(kp1) where kp1=0xFFFFFFFF and kp2<=0xFFFFFFFF order by kp2 desc; +pk kp1 kp2 col1 +drop table t1,t2,t3,t4; diff --git a/mysql-test/suite/rocksdb/t/bloomfilter5-master.opt b/mysql-test/suite/rocksdb/t/bloomfilter5-master.opt new file mode 100644 index 000000000000..3c62bd7fec62 --- /dev/null +++ b/mysql-test/suite/rocksdb/t/bloomfilter5-master.opt @@ -0,0 +1,3 @@ +--loose-rocksdb_default_cf_options=write_buffer_size=256k;block_based_table_factory={filter_policy=bloomfilter:10:false;whole_key_filtering=0;} +--loose-rocksdb_override_cf_options=rev:bf5_1={prefix_extractor=capped:4}; + diff --git a/mysql-test/suite/rocksdb/t/bloomfilter5.test b/mysql-test/suite/rocksdb/t/bloomfilter5.test new file mode 100644 index 000000000000..0e9ca5547e76 --- /dev/null +++ b/mysql-test/suite/rocksdb/t/bloomfilter5.test @@ -0,0 +1,64 @@ +--source include/have_rocksdb.inc + +# MyRocks does not support gap locks in REPEATABLE-READ mode, test does not +# require RR ISO to complete, so lets alter the ISO to RC +set session transaction_isolation='READ-COMMITTED'; + +--echo # +--echo # Issue #809: Wrong query result with bloom filters +--echo # + +create table t1 ( + id1 bigint not null, + id2 bigint not null, + id3 varchar(100) not null, + id4 int not null, + id5 int not null, + value bigint, + value2 varchar(100), + primary key (id1, id2, id3, id4) COMMENT 'rev:bf5_1' +) engine=rocksdb; + + +create table t2(a int) engine=rocksdb; +insert into t2 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9); + +create table t3(seq int) engine=rocksdb; +insert into t3 +select + 1+ A.a + B.a* 10 + C.a * 100 + D.a * 1000 +from t2 A, t2 B, t2 C, t2 D; + +insert t1 +select + (seq+9) div 10, (seq+4) div 5, (seq+4) div 5, seq, seq, 1000, "aaabbbccc" +from t3; + +set global rocksdb_force_flush_memtable_now=1; + +--echo # Full table scan +explain +select * from t1 limit 10; +select * from t1 limit 10; + +--echo # An index scan starting from the end of the table: +explain +select * from t1 order by id1 desc,id2 desc, id3 desc, id4 desc limit 1; +select * from t1 order by id1 desc,id2 desc, id3 desc, id4 desc limit 1; + +# A testcase for an assertion that the fix is removing +# The only requirement for the used column family is that it is reverse-ordered +create table t4 ( + pk int unsigned not null primary key, + kp1 int unsigned not null, + kp2 int unsigned not null, + col1 int unsigned, + key(kp1, kp2) comment 'rev:bf5_2' +) engine=rocksdb; + +insert into t4 values (1, 0xFFFF, 0xFFF, 12345); + +--echo # This must not fail an assert: +select * from t4 force index(kp1) where kp1=0xFFFFFFFF and kp2<=0xFFFFFFFF order by kp2 desc; + +drop table t1,t2,t3,t4; diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index ed4a784a53f1..969e8db2abc5 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -8097,7 +8097,7 @@ int ha_rocksdb::index_first_intern(uchar *const buf) { DBUG_ASSERT(key != nullptr); const Rdb_key_def &kd = *m_key_descr_arr[active_index]; - kd.get_first_key(key, &key_size); + int key_start_matching_bytes = kd.get_first_key(key, &key_size); rocksdb::Slice index_key((const char *)key, key_size); @@ -8108,7 +8108,7 @@ int ha_rocksdb::index_first_intern(uchar *const buf) { // Loop as long as we get a deadlock error AND we end up creating the // snapshot here (i.e. it did not exist prior to this) for (;;) { - setup_scan_iterator(kd, &index_key, false, Rdb_key_def::INDEX_NUMBER_SIZE); + setup_scan_iterator(kd, &index_key, false, key_start_matching_bytes); m_scan_it->Seek(index_key); m_skip_scan_it_next_call = true; @@ -9162,12 +9162,12 @@ void ha_rocksdb::release_scan_iterator() { void ha_rocksdb::setup_iterator_for_rnd_scan() { uint key_size; - m_pk_descr->get_first_key(m_pk_packed_tuple, &key_size); + int key_start_matching_bytes = + m_pk_descr->get_first_key(m_pk_packed_tuple, &key_size); rocksdb::Slice table_key((const char *)m_pk_packed_tuple, key_size); - setup_scan_iterator(*m_pk_descr, &table_key, false, - Rdb_key_def::INDEX_NUMBER_SIZE); + setup_scan_iterator(*m_pk_descr, &table_key, false, key_start_matching_bytes); m_scan_it->Seek(table_key); m_skip_scan_it_next_call = true; } diff --git a/storage/rocksdb/rdb_datadic.h b/storage/rocksdb/rdb_datadic.h index 33f43814539a..aa6bd05dc2ac 100644 --- a/storage/rocksdb/rdb_datadic.h +++ b/storage/rocksdb/rdb_datadic.h @@ -233,12 +233,28 @@ class Rdb_key_def { *size = INDEX_NUMBER_SIZE; } - /* Get the first key that you need to position at to start iterating. - Returns a "supremum" or "infimum" for this index based on collation order + /* + Get the first key that you need to position at to start iterating. + + Stores into *key a "supremum" or "infimum" key value for the index. + + @return Number of bytes in the key that are usable for bloom filter use. */ - inline void get_first_key(uchar *const key, uint *const size) const { - return m_is_reverse_cf ? get_supremum_key(key, size) - : get_infimum_key(key, size); + inline int get_first_key(uchar *const key, uint *const size) const { + if (m_is_reverse_cf) + get_supremum_key(key, size); + else + get_infimum_key(key, size); + + /* Find out how many bytes of infimum are the same as m_index_number */ + uchar unmodified_key[INDEX_NUMBER_SIZE]; + rdb_netbuf_store_index(unmodified_key, m_index_number); + int i; + for (i = 0; i < INDEX_NUMBER_SIZE; i++) { + if (key[i] != unmodified_key[i]) + break; + } + return i; } /* Make a key that is right after the given key. */ From 6821d611f2e2904947a1eab5b2b97b66d238be17 Mon Sep 17 00:00:00 2001 From: Herman Lee Date: Wed, 9 May 2018 09:51:43 -0700 Subject: [PATCH 0970/1221] Fix corner case in rec_per_key/cardinality calculation Upstream commit ID : fb-mysql-5.6.35/80fc87e790c97d0294b2c852771c1915a68403e6 PS-4476 : Merge prod201801 Summary: The cardinality from show index is still off even after the correct stats is being recorded. The calculation of rec_per_key in ha_rocksdb::info() can end up with rec_per_key being 0 when the number of rows is slightly less than the number of unique prefixes found. When it's 0, the estimated cardinality calculation is used. Hence, we can end up with the cardinality that incorrectly drops in the middle of an index. Fix this by adjusting the rec_per_key to 1 for this corner case. ``` create table t2 (a int, b int, c int, d int, e int, f int, g int, primary key (a), key (c, b, a, d, e, f, g)) engine=rocksdb; mysql> show index from t2; +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | t2 | 0 | PRIMARY | 1 | a | A | 9 | NULL | NULL | | LSMTREE | | | | t2 | 1 | c | 1 | c | A | 1 | NULL | NULL | YES | LSMTREE | | | | t2 | 1 | c | 2 | b | A | 3 | NULL | NULL | YES | LSMTREE | | | | t2 | 1 | c | 3 | a | A | 9 | NULL | NULL | | LSMTREE | | | | t2 | 1 | c | 4 | d | A | 9 | NULL | NULL | YES | LSMTREE | | | | t2 | 1 | c | 5 | e | A | 2 | NULL | NULL | YES | LSMTREE | | | | t2 | 1 | c | 6 | f | A | 5 | NULL | NULL | YES | LSMTREE | | | | t2 | 1 | c | 7 | g | A | 9 | NULL | NULL | YES | LSMTREE | | | +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ ``` Reviewed By: lth Differential Revision: D7935474 fbshipit-source-id: 9bddd3a --- mysql-test/suite/rocksdb/r/cardinality.result | 17 ++++++++++++++- mysql-test/suite/rocksdb/t/cardinality.test | 21 ++++++++++++++++++- storage/rocksdb/ha_rocksdb.cc | 19 +++++++++++++---- 3 files changed, 51 insertions(+), 6 deletions(-) diff --git a/mysql-test/suite/rocksdb/r/cardinality.result b/mysql-test/suite/rocksdb/r/cardinality.result index 97ebef83ea69..c22f77f54a9b 100644 --- a/mysql-test/suite/rocksdb/r/cardinality.result +++ b/mysql-test/suite/rocksdb/r/cardinality.result @@ -83,4 +83,19 @@ t1 1 t1_5 2 c1 A 100000 NULL NULL YES LSMTREE SELECT table_name, table_rows FROM information_schema.tables WHERE table_schema = DATABASE(); table_name table_rows t1 100000 -drop table t1; +CREATE TABLE t2 (a INT, b INT, c INT, d INT, e INT, f INT, g INT, +PRIMARY KEY (a), KEY (c, b, a, d, e, f, g)) +ENGINE=ROCKSDB; +SET GLOBAL rocksdb_force_flush_memtable_now = 1; +ANALYZE TABLE t2; +Table Op Msg_type Msg_text +test.t2 analyze status OK +cardinality of the columns after 'a' must be equal to the cardinality of column 'a' +SELECT CARDINALITY INTO @c FROM information_schema.statistics WHERE TABLE_NAME='t2' AND INDEX_NAME='c' AND COLUMN_NAME='a'; +SELECT COLUMN_NAME, CARDINALITY = @c FROM information_schema.statistics WHERE TABLE_NAME='t2' AND INDEX_NAME='c' AND SEQ_IN_INDEX > 3; +COLUMN_NAME CARDINALITY = @c +d 1 +e 1 +f 1 +g 1 +drop table t1, t2; diff --git a/mysql-test/suite/rocksdb/t/cardinality.test b/mysql-test/suite/rocksdb/t/cardinality.test index 73265664d32d..8a4ea434cf53 100644 --- a/mysql-test/suite/rocksdb/t/cardinality.test +++ b/mysql-test/suite/rocksdb/t/cardinality.test @@ -77,4 +77,23 @@ SELECT table_name, table_rows FROM information_schema.tables WHERE table_schema show index in t1; SELECT table_name, table_rows FROM information_schema.tables WHERE table_schema = DATABASE(); -drop table t1; +CREATE TABLE t2 (a INT, b INT, c INT, d INT, e INT, f INT, g INT, + PRIMARY KEY (a), KEY (c, b, a, d, e, f, g)) + ENGINE=ROCKSDB; +--disable_query_log +let $i=0; +while ($i<100) +{ + inc $i; + eval insert t2 values($i, $i div 10, 1, 1, 1, 1, 1); +} +--enable_query_log + +# Cardinality of key c should be 1 for c, 10 for b, 100 for a and the other fields. +SET GLOBAL rocksdb_force_flush_memtable_now = 1; +ANALYZE TABLE t2; +--echo cardinality of the columns after 'a' must be equal to the cardinality of column 'a' +SELECT CARDINALITY INTO @c FROM information_schema.statistics WHERE TABLE_NAME='t2' AND INDEX_NAME='c' AND COLUMN_NAME='a'; +SELECT COLUMN_NAME, CARDINALITY = @c FROM information_schema.statistics WHERE TABLE_NAME='t2' AND INDEX_NAME='c' AND SEQ_IN_INDEX > 3; + +drop table t1, t2; diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index 969e8db2abc5..8e2a46489abb 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -9599,10 +9599,21 @@ int ha_rocksdb::info(uint flag) { KEY *const k = &table->key_info[i]; for (uint j = 0; j < k->actual_key_parts; j++) { const Rdb_index_stats &k_stats = m_key_descr_arr[i]->m_stats; - uint x = k_stats.m_distinct_keys_per_prefix.size() > j && - k_stats.m_distinct_keys_per_prefix[j] > 0 - ? k_stats.m_rows / k_stats.m_distinct_keys_per_prefix[j] - : 0; + uint x; + + if (k_stats.m_distinct_keys_per_prefix.size() > j && + k_stats.m_distinct_keys_per_prefix[j] > 0) { + x = k_stats.m_rows / k_stats.m_distinct_keys_per_prefix[j]; + /* + If the number of rows is less than the number of prefixes (due to + sampling), the average number of rows with the same prefix is 1. + */ + if (x == 0) { + x = 1; + } + } else { + x = 0; + } if (x > stats.records) x = stats.records; if ((x == 0 && rocksdb_debug_optimizer_no_zero_cardinality) || From 00cf006ec849070c3f91803eb7daf12398035c1b Mon Sep 17 00:00:00 2001 From: Jay Edgar Date: Tue, 15 May 2018 11:22:35 -0700 Subject: [PATCH 0971/1221] Fix "Error 1 during COMMIT" error Upstream commit ID : fb-mysql-5.6.35/54c997894164e305cc031fd883724129eb35658b PS-4476 : Merge prod201801 This is a NULL cherry-pick to Percona Server 5.7 to create the commit placeholder for the corresponding upstream commit. Reason: Patch not taken into Percona Server. From 19718e0da68ec0bc53874644d157724f054c38c6 Mon Sep 17 00:00:00 2001 From: Taewook Oh Date: Mon, 7 May 2018 16:17:48 -0700 Subject: [PATCH 0972/1221] Fix code that throws warning for clang compiler (3) Upstream commit ID : fb-mysql-5.6.35/2a51d78b345534e8b56809aec351cd88fd8aa448 PS-4476 : Merge prod201801 This is a NULL cherry-pick to Percona Server 5.7 to create the commit placeholder for the corresponding upstream commit. Reason: Patch not taken into Percona Server and MyRocks affected code already applied to source tree through another patch. From 4866ffd2022fe8f575e8206e69bce327adb20ad6 Mon Sep 17 00:00:00 2001 From: Artem Danilov Date: Tue, 22 May 2018 16:36:39 -0700 Subject: [PATCH 0973/1221] Updating RocksDB submodule with max_manifest_file_size change Upstream commit ID : fb-mysql-5.6.35/709c9c524307831b88ec0ed37134d48602aed585 PS-4476 : Merge prod201801 Summary: Rocksdb changed default value for max_manifest_file_size: D8051524. Now our tests with latest rocksdb module fail. This branch brings latest rocksdb module to our dev branch and fixes the tests. This is the tip of rocksdb branch this diff brings in: https://github.com/facebook/rocksdb/commit/6c73a4669353e57ad4b2b16cc6a9a8eb9d27a819 update-submodule: rocksdb Reviewed By: lth Differential Revision: D8107549 fbshipit-source-id: 849e3f6 --- storage/rocksdb/rocksdb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage/rocksdb/rocksdb b/storage/rocksdb/rocksdb index 31ee4bf2400c..6c73a4669353 160000 --- a/storage/rocksdb/rocksdb +++ b/storage/rocksdb/rocksdb @@ -1 +1 @@ -Subproject commit 31ee4bf2400cf1807718192d352ca8bd7837ada2 +Subproject commit 6c73a4669353e57ad4b2b16cc6a9a8eb9d27a819 From f255aeac973d7e84fe52bb05ee2b6d30abd96727 Mon Sep 17 00:00:00 2001 From: Taewook Oh Date: Tue, 22 May 2018 21:23:52 -0700 Subject: [PATCH 0974/1221] Remove nullptr check of nonnull arguments Upstream commit ID : fb-mysql-5.6.35/f285c92f269aab8a8a5b5b36d1915a23f7dbc793 PS-4476 : Merge prod201801 This is a NULL cherry-pick to Percona Server 5.7 to create the commit placeholder for the corresponding upstream commit. Reason: Patch not taken into Percona Server. We choose to remove attribute notnull as a compile time check and stick with better covering runtime checking. From 253d596d5976ecb036ee3a9e7a6d64e3f529430b Mon Sep 17 00:00:00 2001 From: Yoshinori Matsunobu Date: Thu, 7 Jun 2018 02:05:44 -0700 Subject: [PATCH 0975/1221] Making MyRocks transaction roll back on deadlock Upstream commit ID : fb-mysql-5.6.35/91c9f38968ed5bbc0949347f0a3f09642aad2966 PS-4476 : Merge prod201801 Summary: MyRocks currently does not rollback entire transaction on deadlock (just rolling back the failed statement). InnoDB always rolls back the entire transaction, regardless of innodb_rollback_on_timeout setting. In general, InnoDB behavior is more desired. When tx1 and tx2 hit deadlock, without rolling back entire transaction that locked fewer rows (tx2), tx1 has to continue to wait until tx2 ends. This diff changes MyRocks behavior to match InnoDB (rolling back transaction, not just statement). Reviewed By: lth Differential Revision: D8330156 fbshipit-source-id: db4f020 --- .../include/rocksdb_deadlock_detect.inc | 2 +- .../suite/rocksdb/r/i_s_deadlock.result | 21 ++++++++++++ .../r/rocksdb_deadlock_detect_rc.result | 3 +- .../r/rocksdb_deadlock_detect_rr.result | 3 +- mysql-test/suite/rocksdb/t/i_s_deadlock.test | 32 +++++++++++++++++++ storage/rocksdb/ha_rocksdb.cc | 2 +- 6 files changed, 57 insertions(+), 6 deletions(-) diff --git a/mysql-test/suite/rocksdb/include/rocksdb_deadlock_detect.inc b/mysql-test/suite/rocksdb/include/rocksdb_deadlock_detect.inc index f7fa53a1b2d3..1304a72c1d7d 100644 --- a/mysql-test/suite/rocksdb/include/rocksdb_deadlock_detect.inc +++ b/mysql-test/suite/rocksdb/include/rocksdb_deadlock_detect.inc @@ -68,7 +68,7 @@ let $wait_condition = select * from t; --error ER_LOCK_DEADLOCK insert into t values (4), (1); ---echo # Statement should be rolled back +--echo # Transaction should be rolled back select * from t; rollback; diff --git a/mysql-test/suite/rocksdb/r/i_s_deadlock.result b/mysql-test/suite/rocksdb/r/i_s_deadlock.result index 61b0adfd9183..ab4231d6a60d 100644 --- a/mysql-test/suite/rocksdb/r/i_s_deadlock.result +++ b/mysql-test/suite/rocksdb/r/i_s_deadlock.result @@ -161,12 +161,33 @@ select * from information_schema.rocksdb_deadlock; DEADLOCK_ID TRANSACTION_ID CF_NAME WAITING_KEY LOCK_TYPE INDEX_NAME TABLE_NAME ROLLED_BACK DEADLOCK_ID TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 0 DEADLOCK_ID TRANSACTION_ID default WAITING_KEY SHARED PRIMARY test.t 1 +Deadlock #6 +create table t1 (id int primary key, value int) engine=rocksdb; +insert into t1 values (1,1),(2,2),(3,3),(4,4),(5,5); +begin; +update t1 set value=value+100 where id=1; +update t1 set value=value+100 where id=2; +begin; +update t1 set value=value+200 where id=3; +update t1 set value=value+100 where id=3; +update t1 set value=value+200 where id=1; +ERROR 40001: Deadlock found when trying to get lock; try restarting transaction +select * from t1; +id value +1 101 +2 102 +3 103 +4 4 +5 5 +drop table t1; set global rocksdb_lock_wait_timeout = @prior_lock_wait_timeout; set global rocksdb_deadlock_detect = @prior_deadlock_detect; drop table t; select * from information_schema.rocksdb_deadlock; DEADLOCK_ID TRANSACTION_ID CF_NAME WAITING_KEY LOCK_TYPE INDEX_NAME TABLE_NAME ROLLED_BACK DEADLOCK_ID TRANSACTION_ID default WAITING_KEY EXCLUSIVE INDEX_NAME TABLE_NAME 0 +DEADLOCK_ID TRANSACTION_ID default WAITING_KEY EXCLUSIVE INDEX_NAME TABLE_NAME 1 +DEADLOCK_ID TRANSACTION_ID default WAITING_KEY EXCLUSIVE INDEX_NAME TABLE_NAME 0 DEADLOCK_ID TRANSACTION_ID default WAITING_KEY SHARED INDEX_NAME TABLE_NAME 1 set global rocksdb_max_latest_deadlocks = 0; # Clears deadlock buffer of any existent deadlocks. diff --git a/mysql-test/suite/rocksdb/r/rocksdb_deadlock_detect_rc.result b/mysql-test/suite/rocksdb/r/rocksdb_deadlock_detect_rc.result index 5fc3d6dda6c5..fefb2c3e03bc 100644 --- a/mysql-test/suite/rocksdb/r/rocksdb_deadlock_detect_rc.result +++ b/mysql-test/suite/rocksdb/r/rocksdb_deadlock_detect_rc.result @@ -31,10 +31,9 @@ i 3 insert into t values (4), (1); ERROR 40001: Deadlock found when trying to get lock; try restarting transaction -# Statement should be rolled back +# Transaction should be rolled back select * from t; i -3 rollback; i rollback; diff --git a/mysql-test/suite/rocksdb/r/rocksdb_deadlock_detect_rr.result b/mysql-test/suite/rocksdb/r/rocksdb_deadlock_detect_rr.result index 5fc3d6dda6c5..fefb2c3e03bc 100644 --- a/mysql-test/suite/rocksdb/r/rocksdb_deadlock_detect_rr.result +++ b/mysql-test/suite/rocksdb/r/rocksdb_deadlock_detect_rr.result @@ -31,10 +31,9 @@ i 3 insert into t values (4), (1); ERROR 40001: Deadlock found when trying to get lock; try restarting transaction -# Statement should be rolled back +# Transaction should be rolled back select * from t; i -3 rollback; i rollback; diff --git a/mysql-test/suite/rocksdb/t/i_s_deadlock.test b/mysql-test/suite/rocksdb/t/i_s_deadlock.test index 6e23f576df71..e63180b23a5e 100644 --- a/mysql-test/suite/rocksdb/t/i_s_deadlock.test +++ b/mysql-test/suite/rocksdb/t/i_s_deadlock.test @@ -148,6 +148,38 @@ connection default; --replace_column 1 DEADLOCK_ID 2 TRANSACTION_ID 4 WAITING_KEY select * from information_schema.rocksdb_deadlock; + +echo Deadlock #6; +connection con1; +create table t1 (id int primary key, value int) engine=rocksdb; +insert into t1 values (1,1),(2,2),(3,3),(4,4),(5,5); +begin; +update t1 set value=value+100 where id=1; +update t1 set value=value+100 where id=2; + +connection con2; +begin; +update t1 set value=value+200 where id=3; + +connection con1; +send update t1 set value=value+100 where id=3; + +connection con2; +let $wait_condition = select count(*) = 1 from information_schema.rocksdb_trx +where thread_id = $con1 and waiting_key != ""; +--source include/wait_condition.inc +--error ER_LOCK_DEADLOCK +update t1 set value=value+200 where id=1; + +# con2 tx is automatically rolled back +connection con1; +reap; +select * from t1; +drop table t1; + +connection default; + + disconnect con1; disconnect con2; disconnect con3; diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index 8e2a46489abb..6cac8c15ee6a 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -1900,7 +1900,7 @@ class Rdb_transaction { } if (s.IsDeadlock()) { - thd->mark_transaction_to_rollback(false /* just statement */); + thd->mark_transaction_to_rollback(true /* whole transaction */); rocksdb_row_lock_deadlocks++; return HA_ERR_LOCK_DEADLOCK; } else if (s.IsBusy()) { From a5698f7968f85fa14354c8793bcf19f7898ccf0a Mon Sep 17 00:00:00 2001 From: Yoshinori Matsunobu Date: Fri, 8 Jun 2018 00:15:24 -0700 Subject: [PATCH 0976/1221] Fixing a bug that MyRocks may keep retrying to hold locks on deadlocks Upstream commit ID : fb-mysql-5.6.35/41061e6ca61a5fd163fddcd1f3c494f38da674b9 PS-4476 : Merge prod201801 Summary: With Read Committed isolation level, MyRocks has a feature to refresh snapshots and retrying get_for_update on snapshot conflict errors. However, the retry happened on real deadlocks as well, on some code paths like row lookups by secondary keys. As a result, MyRocks did not return deadlock errors but kept retrying row locks until hitting lock wait timeout. This diff fixes that by utilizing HA_ERR_ROCKSDB_STATUS_BUSY code for snapshot conflicts. MyRocks retries get_for_update when getting HA_ERR_ROCKSDB_STATUS_BUSY errors but does not retry on DEADLOCK errors. This error code is not exposed to clients. Clients continue to get HA_ERR_LOCK_DEADLOCK on snapshot conflicts. Reviewed By: hermanlee Differential Revision: D8330686 fbshipit-source-id: b14546f --- .../include/rocksdb_deadlock_detect.inc | 33 +++++++++++++++++++ .../r/rocksdb_deadlock_detect_rc.result | 13 ++++++++ .../r/rocksdb_deadlock_detect_rr.result | 13 ++++++++ storage/rocksdb/ha_rocksdb.cc | 17 +++++++--- storage/rocksdb/ha_rocksdb.h | 1 + 5 files changed, 72 insertions(+), 5 deletions(-) diff --git a/mysql-test/suite/rocksdb/include/rocksdb_deadlock_detect.inc b/mysql-test/suite/rocksdb/include/rocksdb_deadlock_detect.inc index 1304a72c1d7d..51374202d0a9 100644 --- a/mysql-test/suite/rocksdb/include/rocksdb_deadlock_detect.inc +++ b/mysql-test/suite/rocksdb/include/rocksdb_deadlock_detect.inc @@ -80,6 +80,39 @@ connection con1; --reap rollback; + +connection default; +create table t1 (id int primary key, value int, value2 int, unique index(value)) engine=rocksdb; +insert into t1 values (1,1,1),(2,2,2),(3,3,3),(4,4,4),(5,5,5),(6,6,6),(7,7,7),(8,8,8),(9,9,9),(10,10,10); + +connection con1; +begin; +update t1 set value2=value2+1 where value=3; + +connection con2; +begin; +update t1 set value2=value2+1 where value=2; +update t1 set value2=value2+1 where value=4; + +connection con1; +send update t1 set value2=value2+1 where value=4; + +connection con2; +let $wait_condition = +`SELECT CONCAT('select count(*) = 1 from information_schema.rocksdb_trx where THREAD_ID = ', '$con1', ' and WAITING_KEY != ""')`; +--source include/wait_condition.inc +--error ER_LOCK_DEADLOCK +update t1 force index (value) set value2=value2+1 where value=3; + +connection con1; +--reap +rollback; + +connection con2; +rollback; +drop table t1; + + connection default; disconnect con1; disconnect con2; diff --git a/mysql-test/suite/rocksdb/r/rocksdb_deadlock_detect_rc.result b/mysql-test/suite/rocksdb/r/rocksdb_deadlock_detect_rc.result index fefb2c3e03bc..2034eb2cd863 100644 --- a/mysql-test/suite/rocksdb/r/rocksdb_deadlock_detect_rc.result +++ b/mysql-test/suite/rocksdb/r/rocksdb_deadlock_detect_rc.result @@ -39,6 +39,19 @@ i rollback; i rollback; +create table t1 (id int primary key, value int, value2 int, unique index(value)) engine=rocksdb; +insert into t1 values (1,1,1),(2,2,2),(3,3,3),(4,4,4),(5,5,5),(6,6,6),(7,7,7),(8,8,8),(9,9,9),(10,10,10); +begin; +update t1 set value2=value2+1 where value=3; +begin; +update t1 set value2=value2+1 where value=2; +update t1 set value2=value2+1 where value=4; +update t1 set value2=value2+1 where value=4; +update t1 force index (value) set value2=value2+1 where value=3; +ERROR 40001: Deadlock found when trying to get lock; try restarting transaction +rollback; +rollback; +drop table t1; set global rocksdb_lock_wait_timeout = @prior_rocksdb_lock_wait_timeout; set global rocksdb_deadlock_detect = @prior_rocksdb_deadlock_detect; drop table t,r1,r2; diff --git a/mysql-test/suite/rocksdb/r/rocksdb_deadlock_detect_rr.result b/mysql-test/suite/rocksdb/r/rocksdb_deadlock_detect_rr.result index fefb2c3e03bc..2034eb2cd863 100644 --- a/mysql-test/suite/rocksdb/r/rocksdb_deadlock_detect_rr.result +++ b/mysql-test/suite/rocksdb/r/rocksdb_deadlock_detect_rr.result @@ -39,6 +39,19 @@ i rollback; i rollback; +create table t1 (id int primary key, value int, value2 int, unique index(value)) engine=rocksdb; +insert into t1 values (1,1,1),(2,2,2),(3,3,3),(4,4,4),(5,5,5),(6,6,6),(7,7,7),(8,8,8),(9,9,9),(10,10,10); +begin; +update t1 set value2=value2+1 where value=3; +begin; +update t1 set value2=value2+1 where value=2; +update t1 set value2=value2+1 where value=4; +update t1 set value2=value2+1 where value=4; +update t1 force index (value) set value2=value2+1 where value=3; +ERROR 40001: Deadlock found when trying to get lock; try restarting transaction +rollback; +rollback; +drop table t1; set global rocksdb_lock_wait_timeout = @prior_rocksdb_lock_wait_timeout; set global rocksdb_deadlock_detect = @prior_rocksdb_deadlock_detect; drop table t,r1,r2; diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index 6cac8c15ee6a..a5a8caf3e901 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -1913,7 +1913,7 @@ class Rdb_transaction { user_host_buff, static_cast(thd->query().length), thd->query().str); } - return HA_ERR_LOCK_DEADLOCK; + return HA_ERR_ROCKSDB_STATUS_BUSY; } if (s.IsIOError() || s.IsCorruption()) { @@ -7528,7 +7528,7 @@ int ha_rocksdb::index_read_map_impl(uchar *const buf, const uchar *const key, else rc = read_row_from_secondary_key(buf, kd, move_forward); - if (rc != HA_ERR_LOCK_DEADLOCK || !is_new_snapshot) + if (rc != HA_ERR_ROCKSDB_STATUS_BUSY || !is_new_snapshot) break; /* Exit the loop */ // release the snapshot and iterator so they will be regenerated @@ -8113,7 +8113,7 @@ int ha_rocksdb::index_first_intern(uchar *const buf) { m_skip_scan_it_next_call = true; rc = index_next_with_direction(buf, true); - if (rc != HA_ERR_LOCK_DEADLOCK || !is_new_snapshot) + if (rc != HA_ERR_ROCKSDB_STATUS_BUSY || !is_new_snapshot) break; // exit the loop // release the snapshot and iterator so they will be regenerated @@ -8207,7 +8207,7 @@ int ha_rocksdb::index_last_intern(uchar *const buf) { rc = secondary_index_read(active_index, buf); } - if (rc != HA_ERR_LOCK_DEADLOCK || !is_new_snapshot) + if (rc != HA_ERR_ROCKSDB_STATUS_BUSY || !is_new_snapshot) break; /* exit the loop */ // release the snapshot and iterator so they will be regenerated @@ -9210,7 +9210,7 @@ int ha_rocksdb::rnd_next(uchar *const buf) { ha_statistic_increment(&SSV::ha_read_rnd_next_count); for (;;) { rc = rnd_next_with_direction(buf, true); - if (rc != HA_ERR_LOCK_DEADLOCK || !m_rnd_scan_is_new_snapshot) + if (rc != HA_ERR_ROCKSDB_STATUS_BUSY || !m_rnd_scan_is_new_snapshot) break; /* exit the loop */ // release the snapshot and iterator and then regenerate them @@ -12771,6 +12771,13 @@ double ha_rocksdb::read_time(uint index, uint ranges, ha_rows rows) { DBUG_RETURN((rows / 20.0) + 1); } +void ha_rocksdb::print_error(int error, myf errflag) { + if (error == HA_ERR_ROCKSDB_STATUS_BUSY) { + error = HA_ERR_LOCK_DEADLOCK; + } + handler::print_error(error, errflag); +} + std::string rdb_corruption_marker_file_name() { std::string ret(rocksdb_datadir); ret.append("/ROCKSDB_CORRUPTED"); diff --git a/storage/rocksdb/ha_rocksdb.h b/storage/rocksdb/ha_rocksdb.h index 1a8011dba1ab..f641fe134035 100644 --- a/storage/rocksdb/ha_rocksdb.h +++ b/storage/rocksdb/ha_rocksdb.h @@ -1005,6 +1005,7 @@ class ha_rocksdb : public my_core::handler { } virtual double read_time(uint, uint, ha_rows rows) override; + virtual void print_error(int error, myf errflag) override; int open(const char *const name, int mode, uint test_if_locked) override MY_ATTRIBUTE((__warn_unused_result__)); From 9cbabec04ff0526bd428c16ec7210d65b815269f Mon Sep 17 00:00:00 2001 From: Sergei Petrunia Date: Mon, 11 Jun 2018 11:56:41 -0700 Subject: [PATCH 0977/1221] Issue #834: Server crash in print_keydup_error / key_unpack or unexpected ER_DUP_KEY (#835) Upstream commit ID : fb-mysql-5.6.35/2b27c9aff5d56b38ef7e1a6b8f550096243490e7 PS-4476 : Merge prod201801 Summary: Fix two issues: 1. Rdb_ddl_manager::rename() loses the value of m_hidden_pk_val. new object used to get 0, which means "not loaded from the db yet". 2. ha_rocksdb::load_hidden_pk_value() uses current transaction (and its snapshot) when loading hidden PK value from disk. This may cause it to load an out-of-date value. Closes https://github.com/facebook/mysql-5.6/pull/835 Reviewed By: lth Differential Revision: D8066337 Pulled By: lth fbshipit-source-id: a8ac0d1 --- .../rocksdb/r/allow_no_primary_key.result | 27 ++++++++++++++++ .../suite/rocksdb/t/allow_no_primary_key.test | 31 +++++++++++++++++++ storage/rocksdb/rdb_datadic.cc | 3 ++ 3 files changed, 61 insertions(+) diff --git a/mysql-test/suite/rocksdb/r/allow_no_primary_key.result b/mysql-test/suite/rocksdb/r/allow_no_primary_key.result index 3626e6013726..a3a5ffd0465d 100644 --- a/mysql-test/suite/rocksdb/r/allow_no_primary_key.result +++ b/mysql-test/suite/rocksdb/r/allow_no_primary_key.result @@ -265,3 +265,30 @@ SELECT * FROM t1; a b 36 foo DROP TABLE t1; +# +# Issue #834/MDEV-15304 ALTER TABLE table_with_hidden_pk causes Can't +# write; duplicate key in table error and/or crash +# +CREATE TABLE t1 (a INT, KEY(a)) ENGINE=RocksDB; +INSERT INTO t1 VALUES (1),(1+1); +create table t2 (a int); +insert into t2 values (10),(20),(30); +BEGIN; +select * from t2; +a +10 +20 +30 +alter table t1 force; +select * from t1; +a +1 +2 +insert into t1 values (100); +select * from t1; +a +1 +2 +100 +rollback; +drop table t1,t2; diff --git a/mysql-test/suite/rocksdb/t/allow_no_primary_key.test b/mysql-test/suite/rocksdb/t/allow_no_primary_key.test index 63ecd76b9136..f1a97025b5ef 100644 --- a/mysql-test/suite/rocksdb/t/allow_no_primary_key.test +++ b/mysql-test/suite/rocksdb/t/allow_no_primary_key.test @@ -1,4 +1,5 @@ --source include/have_rocksdb.inc +--source include/count_sessions.inc # # This test checks some very basic capabilities @@ -88,3 +89,33 @@ DELETE FROM t1 WHERE a = 35 AND b = 'foo'; --sorted_result SELECT * FROM t1; DROP TABLE t1; + +--echo # +--echo # Issue #834/MDEV-15304 ALTER TABLE table_with_hidden_pk causes Can't +--echo # write; duplicate key in table error and/or crash +--echo # +CREATE TABLE t1 (a INT, KEY(a)) ENGINE=RocksDB; +INSERT INTO t1 VALUES (1),(1+1); +create table t2 (a int); +insert into t2 values (10),(20),(30); + +BEGIN; +select * from t2; + +connect (con1,localhost,root,,); +connection con1; +alter table t1 force; + +connection default; +select * from t1; + +connection con1; +insert into t1 values (100); +select * from t1; + +disconnect con1; +connection default; +rollback; +drop table t1,t2; + +--source include/wait_until_count_sessions.inc diff --git a/storage/rocksdb/rdb_datadic.cc b/storage/rocksdb/rdb_datadic.cc index dacf40540f19..909f8b51c8a3 100644 --- a/storage/rocksdb/rdb_datadic.cc +++ b/storage/rocksdb/rdb_datadic.cc @@ -4277,6 +4277,9 @@ bool Rdb_ddl_manager::rename(const std::string &from, const std::string &to, rec->m_auto_incr_val.load(std::memory_order_relaxed); new_rec->m_key_descr_arr = rec->m_key_descr_arr; + new_rec->m_hidden_pk_val = + rec->m_hidden_pk_val.load(std::memory_order_relaxed); + // so that it's not free'd when deleting the old rec rec->m_key_descr_arr = nullptr; From 9f5a226cc02af41273c279f64d1b1e46b755e839 Mon Sep 17 00:00:00 2001 From: Manuel Ung Date: Mon, 11 Jun 2018 18:08:31 -0700 Subject: [PATCH 0978/1221] Fix rocksdb_deadlock_detect tests Upstream commit ID : fb-mysql-5.6.35/8f43e8c79dcde3a1197b56a67b789f4d03b32fae PS-4476 : Merge prod201801 Summary: These newly added test cases were sometimes missing the deadlock condition by picking a table scan over using the `value` index. This caused tests to timeout instead. Using force index to fix these tests. Squash with: D8330686 Reviewed By: hermanlee, yoshinorim Differential Revision: D8373078 fbshipit-source-id: 1c200c6 --- .../suite/rocksdb/include/rocksdb_deadlock_detect.inc | 8 ++++---- .../suite/rocksdb/r/rocksdb_deadlock_detect_rc.result | 8 ++++---- .../suite/rocksdb/r/rocksdb_deadlock_detect_rr.result | 8 ++++---- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/mysql-test/suite/rocksdb/include/rocksdb_deadlock_detect.inc b/mysql-test/suite/rocksdb/include/rocksdb_deadlock_detect.inc index 51374202d0a9..827d75a898a1 100644 --- a/mysql-test/suite/rocksdb/include/rocksdb_deadlock_detect.inc +++ b/mysql-test/suite/rocksdb/include/rocksdb_deadlock_detect.inc @@ -87,15 +87,15 @@ insert into t1 values (1,1,1),(2,2,2),(3,3,3),(4,4,4),(5,5,5),(6,6,6),(7,7,7),(8 connection con1; begin; -update t1 set value2=value2+1 where value=3; +update t1 force index (value) set value2=value2+1 where value=3; connection con2; begin; -update t1 set value2=value2+1 where value=2; -update t1 set value2=value2+1 where value=4; +update t1 force index (value) set value2=value2+1 where value=2; +update t1 force index (value) set value2=value2+1 where value=4; connection con1; -send update t1 set value2=value2+1 where value=4; +send update t1 force index (value) set value2=value2+1 where value=4; connection con2; let $wait_condition = diff --git a/mysql-test/suite/rocksdb/r/rocksdb_deadlock_detect_rc.result b/mysql-test/suite/rocksdb/r/rocksdb_deadlock_detect_rc.result index 2034eb2cd863..63fb47c1e08f 100644 --- a/mysql-test/suite/rocksdb/r/rocksdb_deadlock_detect_rc.result +++ b/mysql-test/suite/rocksdb/r/rocksdb_deadlock_detect_rc.result @@ -42,11 +42,11 @@ rollback; create table t1 (id int primary key, value int, value2 int, unique index(value)) engine=rocksdb; insert into t1 values (1,1,1),(2,2,2),(3,3,3),(4,4,4),(5,5,5),(6,6,6),(7,7,7),(8,8,8),(9,9,9),(10,10,10); begin; -update t1 set value2=value2+1 where value=3; +update t1 force index (value) set value2=value2+1 where value=3; begin; -update t1 set value2=value2+1 where value=2; -update t1 set value2=value2+1 where value=4; -update t1 set value2=value2+1 where value=4; +update t1 force index (value) set value2=value2+1 where value=2; +update t1 force index (value) set value2=value2+1 where value=4; +update t1 force index (value) set value2=value2+1 where value=4; update t1 force index (value) set value2=value2+1 where value=3; ERROR 40001: Deadlock found when trying to get lock; try restarting transaction rollback; diff --git a/mysql-test/suite/rocksdb/r/rocksdb_deadlock_detect_rr.result b/mysql-test/suite/rocksdb/r/rocksdb_deadlock_detect_rr.result index 2034eb2cd863..63fb47c1e08f 100644 --- a/mysql-test/suite/rocksdb/r/rocksdb_deadlock_detect_rr.result +++ b/mysql-test/suite/rocksdb/r/rocksdb_deadlock_detect_rr.result @@ -42,11 +42,11 @@ rollback; create table t1 (id int primary key, value int, value2 int, unique index(value)) engine=rocksdb; insert into t1 values (1,1,1),(2,2,2),(3,3,3),(4,4,4),(5,5,5),(6,6,6),(7,7,7),(8,8,8),(9,9,9),(10,10,10); begin; -update t1 set value2=value2+1 where value=3; +update t1 force index (value) set value2=value2+1 where value=3; begin; -update t1 set value2=value2+1 where value=2; -update t1 set value2=value2+1 where value=4; -update t1 set value2=value2+1 where value=4; +update t1 force index (value) set value2=value2+1 where value=2; +update t1 force index (value) set value2=value2+1 where value=4; +update t1 force index (value) set value2=value2+1 where value=4; update t1 force index (value) set value2=value2+1 where value=3; ERROR 40001: Deadlock found when trying to get lock; try restarting transaction rollback; From 0a1eb9afdce4389eddbabeeacb7002bb593c0df0 Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Mon, 18 Jun 2018 17:23:34 -0700 Subject: [PATCH 0979/1221] PS-4476 : Merge prod201801 Based on recomendation from Facebook, use rcocksdb commit 4ac5ffa6708dae4ab70d6fe24b946cca0d20a5 in conjunction with prod201801 tag. --- storage/rocksdb/rocksdb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage/rocksdb/rocksdb b/storage/rocksdb/rocksdb index 6c73a4669353..dc4ac5ffa670 160000 --- a/storage/rocksdb/rocksdb +++ b/storage/rocksdb/rocksdb @@ -1 +1 @@ -Subproject commit 6c73a4669353e57ad4b2b16cc6a9a8eb9d27a819 +Subproject commit dc4ac5ffa6708dae4ab70d6fe24b946cca0d20a5 From f7bfaea93dbfd5d1cb4048e021ae1cdfb847b418 Mon Sep 17 00:00:00 2001 From: Aditya A Date: Sun, 24 Jun 2018 23:00:00 +0530 Subject: [PATCH 0980/1221] Bug #28068293 KILLING QUERY THAT IS WAITING FOR LOCK VIA FOREIGN KEY CAUSES MYSQL CRASH PROBLEM Child table is waiting for a lock on the parent row in the function lock_wait_suspend_thread() when we interrupt it with Ctrl+c. It comes out of lock_wait_suspend_thread() with the trx->error_state set as interrupted ,but the trx->error_state is never captured and the error is set as DB_LOCK_WAIT, because of which we again try to lock the row and again call lock_wait_suspend_thread(), but since the transaction is already interrupted it comes out of this function and again this operation continues infinitely. FIX Capture the trx->error_state error and pass it to upper layers so that it is properly handled. --- storage/innobase/row/row0ins.cc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/storage/innobase/row/row0ins.cc b/storage/innobase/row/row0ins.cc index 06d06d53abea..96071bd2efc6 100644 --- a/storage/innobase/row/row0ins.cc +++ b/storage/innobase/row/row0ins.cc @@ -1858,6 +1858,11 @@ row_ins_check_foreign_constraint( thr->lock_state = QUE_THR_LOCK_NOLOCK; + if(trx->error_state != DB_SUCCESS) { + err = trx->error_state; + goto exit_func; + } + DBUG_PRINT("to_be_dropped", ("table: %s", check_table->name.m_name)); if (check_table->to_be_dropped) { From 7c4b7b63cae57d261470d2bf557352ea7c0e9b35 Mon Sep 17 00:00:00 2001 From: Satya Bodapati Date: Sun, 24 Jun 2018 18:27:32 +0530 Subject: [PATCH 0981/1221] PS-4543: MTR: Use gnome-terminal with --gdb option instead of xterm Problem: -------- When using --gdb option with mtr, it spawns xterm as terminal window by default. xterm is really outdated. 1. Can't easily copy text from it. 2. Text sometimes appear small by deafult 3. Window buffer isn't resized properly on maximize Fix: ---- On linux systems, where gnome-termnial (/usr/bin/gnome-terminal) is available, try to use it. Introduce --gterm option. This is to be used along with --gdb option. Ex: ./mtr --mem main.1st --gdb --gterm --- mysql-test/mysql-test-run.pl | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index 3e8334da3ee6..3064215070d7 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -265,6 +265,7 @@ END our $opt_manual_debug; our $opt_debugger; our $opt_client_debugger; +our $opt_gterm; my $config; # The currently running config my $current_config_name; # The currently running config file template @@ -1205,6 +1206,8 @@ sub command_line_setup { 'debug-common' => \$opt_debug_common, 'debug-server' => \$opt_debug_server, 'gdb' => \$opt_gdb, + # For using gnome-terminal when using --gdb option + 'gterm' => \$opt_gterm, 'lldb' => \$opt_lldb, 'client-gdb' => \$opt_client_gdb, 'client-lldb' => \$opt_client_lldb, @@ -6880,9 +6883,18 @@ sub gdb_arguments { } $$args= []; - mtr_add_arg($$args, "-title"); - mtr_add_arg($$args, "$type"); - mtr_add_arg($$args, "-e"); + + + if ($opt_gterm) { + mtr_add_arg($$args, "--title"); + mtr_add_arg($$args, "$type"); + mtr_add_arg($$args, "--wait"); + mtr_add_arg($$args, "--"); + } else { + mtr_add_arg($$args, "-title"); + mtr_add_arg($$args, "$type"); + mtr_add_arg($$args, "-e"); + } if ( $exe_libtool ) { @@ -6895,7 +6907,11 @@ sub gdb_arguments { mtr_add_arg($$args, "$gdb_init_file"); mtr_add_arg($$args, "$$exe"); - $$exe= "xterm"; + if ($opt_gterm) { + $$exe= "gnome-terminal"; + } else { + $$exe= "xterm"; + } } # From 1f610f71e92082f82db227d342b422b99c7b9088 Mon Sep 17 00:00:00 2001 From: Tiago Vale Date: Mon, 25 Jun 2018 15:29:49 +0100 Subject: [PATCH 0982/1221] Bug#28099963 POSSIBLY UNUSED FUNCTIONS IN XDR_UTILS Problem ------- Clang generates warnings when compiling XCom. Analysis -------- We make use of the define_xdr_funcs macro even when we do not need all the functions it generates. Solution -------- The community contributed a patch that marked all the functions generated by define_xdr_funcs as unused. The patch's approach fixes the symptoms by telling the compiler that all the functions generated by the define_xdr_funcs are always unused. That is not true, although it does shut the compiler up. Since the contributed patch does not apply cleanly anymore, we improve on the submitted patch by only generating the functions that are needed. Reviewed-by: Luis Soares --- .../libmysqlgcs/src/bindings/xcom/xcom/app_data.c | 5 ++--- .../libmysqlgcs/src/bindings/xcom/xcom/site_def.c | 4 +++- .../libmysqlgcs/src/bindings/xcom/xcom/synode_no.c | 4 +--- .../libmysqlgcs/src/bindings/xcom/xcom/task.c | 10 ++++++++-- .../libmysqlgcs/src/bindings/xcom/xcom/xcom_base.c | 3 --- .../libmysqlgcs/src/bindings/xcom/xcom/xcom_recover.c | 5 +---- 6 files changed, 15 insertions(+), 16 deletions(-) diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/app_data.c b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/app_data.c index 31f3b4b2ce40..39b0a7190e0d 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/app_data.c +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/app_data.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -33,8 +33,7 @@ #include "node_list.h" #include "xcom_vp_str.h" -define_xdr_funcs(synode_no) -define_xdr_funcs(app_data_ptr) +clone_xdr_array(synode_no) static app_data_list nextp(app_data_list l); static unsigned long msg_count(app_data_ptr a); diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/site_def.c b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/site_def.c index a3aedf02b36a..ca8edc295cc5 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/site_def.c +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/site_def.c @@ -45,7 +45,9 @@ struct site_def_ptr_array { }; typedef struct site_def_ptr_array site_def_ptr_array; -define_xdr_funcs(site_def_ptr) +init_xdr_array(site_def_ptr) +free_xdr_array(site_def_ptr) +set_xdr_array(site_def_ptr) /* FIFO of site definitions */ static site_def_ptr_array site_defs; diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/synode_no.c b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/synode_no.c index 786b798843b0..9110034715a1 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/synode_no.c +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/synode_no.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -60,8 +60,6 @@ int synode_gt(synode_no x, synode_no y) } /* purecov: begin deadcode */ -define_xdr_funcs(synode_no) - synode_no vp_count_to_synode(u_long high, u_long low, node_no nodeid, uint32_t groupid) { diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/task.c b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/task.c index 2fceb74e8188..6d19b8f9a617 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/task.c +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/task.c @@ -87,8 +87,14 @@ typedef struct { task_env_p *task_env_p_array_val; } task_env_p_array; -define_xdr_funcs(pollfd) -define_xdr_funcs(task_env_p) +init_xdr_array(pollfd) +free_xdr_array(pollfd) +set_xdr_array(pollfd) +get_xdr_array(pollfd) +init_xdr_array(task_env_p) +free_xdr_array(task_env_p) +set_xdr_array(task_env_p) +get_xdr_array(task_env_p) struct iotasks { int nwait; diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.c b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.c index 11211acabc29..a2a56d7bb29c 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.c +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_base.c @@ -506,9 +506,6 @@ static bool_t is_dead_site(uint32_t id) return FALSE; } -define_xdr_funcs(node_no) - - extern node_set *init_node_set(node_set *set, u_int n); extern node_set *alloc_node_set(node_set *set, u_int n); diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_recover.c b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_recover.c index 620c1f61ca87..e58bc029bdc1 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_recover.c +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xcom_recover.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -45,9 +45,6 @@ int client_boot_done = 0; int netboot_ok = 0; int booting = 0; -define_xdr_funcs(synode_no) -define_xdr_funcs(app_data_ptr) - /* purecov: begin deadcode */ void init_recover_vars() { From 3c8f903c6e74c14d42ae391933ce65b708bff5c5 Mon Sep 17 00:00:00 2001 From: Dag Wanvik Date: Mon, 25 Jun 2018 17:37:57 +0200 Subject: [PATCH 0983/1221] Bug#28172538 YEAR RANGE CHECK FAILS WITH MAX YEAR FLOAT CONSTANT The maximum YEAR value is 2155. Specifying this with real constant is allowed but fails at the limit (2155.0E00) or (2.15E3). This patch fixes this bug and adds a test. --- mysql-test/r/type_year.result | 19 +++++++++++++++++++ mysql-test/t/type_year.test | 12 ++++++++++++ sql/field.cc | 2 +- 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/mysql-test/r/type_year.result b/mysql-test/r/type_year.result index 7c1b93070b8d..09edda6c3c0b 100644 --- a/mysql-test/r/type_year.result +++ b/mysql-test/r/type_year.result @@ -334,3 +334,22 @@ a 2012 DROP TABLE t1; SET timestamp=DEFAULT; +# +# Bug#28172538 YEAR RANGE CHECK FAILS WITH MAX YEAR FLOAT CONSTANT +# +CREATE TABLE t(y YEAR); +INSERT INTO t VALUES (2155), (2155.0); +SELECT * FROM t; +y +2155 +2155 +Used to fail +INSERT INTO t VALUES (2155.0E00); +INSERT INTO t VALUES (2.1550E+03); +SELECT * FROM t; +y +2155 +2155 +2155 +2155 +DROP TABLE t; diff --git a/mysql-test/t/type_year.test b/mysql-test/t/type_year.test index 8524cc7ac656..38a03a0f1f18 100644 --- a/mysql-test/t/type_year.test +++ b/mysql-test/t/type_year.test @@ -197,3 +197,15 @@ INSERT INTO t1 VALUES (TIME'25:00:00'); SELECT * FROM t1; DROP TABLE t1; SET timestamp=DEFAULT; + +--echo # +--echo # Bug#28172538 YEAR RANGE CHECK FAILS WITH MAX YEAR FLOAT CONSTANT +--echo # +CREATE TABLE t(y YEAR); +INSERT INTO t VALUES (2155), (2155.0); +SELECT * FROM t; +--echo Used to fail +INSERT INTO t VALUES (2155.0E00); +INSERT INTO t VALUES (2.1550E+03); +SELECT * FROM t; +DROP TABLE t; diff --git a/sql/field.cc b/sql/field.cc index d6191fcb0c00..e4398709efa0 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -6392,7 +6392,7 @@ Field_year::store(const char *from, size_t len,const CHARSET_INFO *cs) type_conversion_status Field_year::store(double nr) { - if (nr < 0.0 || nr >= 2155.0) + if (nr < 0.0 || nr > 2155.0) { (void) Field_year::store((longlong) -1, FALSE); return TYPE_WARN_OUT_OF_RANGE; From 12bfae0520fff9df6aa870500d5c8378df6a0e4c Mon Sep 17 00:00:00 2001 From: Sachin Agarwal Date: Tue, 26 Jun 2018 16:59:34 +0530 Subject: [PATCH 0984/1221] Bug#27912873 CRASH: SEGMENTATION FAULT IN HA_INNOBASE::INDEX_TYPE() Problem: During ALTER, when adding foreign key on spatial index and the reference table does not exist then hit explict assert case in dict_table_check_for_dup_indexes(). Fix: Since foreign key is not allowed on spatial index. Added check inside dict_foreign_qualify_index(), if index->type is DICT_SPATIAL then return false. RB: 19968 Reviewed by : jimmy.yang@oracle.com --- storage/innobase/dict/dict0dict.cc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/storage/innobase/dict/dict0dict.cc b/storage/innobase/dict/dict0dict.cc index 0e6e4ef70ec6..fba59b42158f 100644 --- a/storage/innobase/dict/dict0dict.cc +++ b/storage/innobase/dict/dict0dict.cc @@ -6728,6 +6728,11 @@ dict_foreign_qualify_index( return(false); } + if (index->type & DICT_SPATIAL) { + /* Spatial index cannot be used as foreign keys */ + return(false); + } + for (ulint i = 0; i < n_cols; i++) { dict_field_t* field; const char* col_name; From 2429c5eddd7ed1dec897dbe4a1ad5558e8ea58c3 Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Tue, 26 Jun 2018 15:27:15 +0200 Subject: [PATCH 0985/1221] From 577a4ee93cb52135958c97cd53a83b5fdf8aa9cf Mon Sep 17 00:00:00 2001 From: Evgeniy Patlan Date: Tue, 26 Jun 2018 15:35:59 +0300 Subject: [PATCH 0986/1221] [PS-4546] Set unlimited TimeoutSec for ubuntu/debian --- build-ps/debian/percona-server-server-5.7.mysql.service | 2 +- build-ps/ubuntu/percona-server-server-5.7.mysql.service | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build-ps/debian/percona-server-server-5.7.mysql.service b/build-ps/debian/percona-server-server-5.7.mysql.service index 79c73f8d4041..692885c22362 100644 --- a/build-ps/debian/percona-server-server-5.7.mysql.service +++ b/build-ps/debian/percona-server-server-5.7.mysql.service @@ -18,6 +18,6 @@ EnvironmentFile=-/etc/default/mysql ExecStartPre=/usr/share/mysql/mysql-systemd-start pre ExecStartPre=/usr/bin/ps_mysqld_helper ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS -TimeoutSec=600 +TimeoutSec=0 Restart=on-failure RestartPreventExitStatus=1 diff --git a/build-ps/ubuntu/percona-server-server-5.7.mysql.service b/build-ps/ubuntu/percona-server-server-5.7.mysql.service index 79c73f8d4041..692885c22362 100644 --- a/build-ps/ubuntu/percona-server-server-5.7.mysql.service +++ b/build-ps/ubuntu/percona-server-server-5.7.mysql.service @@ -18,6 +18,6 @@ EnvironmentFile=-/etc/default/mysql ExecStartPre=/usr/share/mysql/mysql-systemd-start pre ExecStartPre=/usr/bin/ps_mysqld_helper ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS -TimeoutSec=600 +TimeoutSec=0 Restart=on-failure RestartPreventExitStatus=1 From a6865edef9ebb304f88f0da758eb6b71487651a1 Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Tue, 26 Jun 2018 13:27:15 +0200 Subject: [PATCH 0987/1221] PS-4545: protobuf compilation issue with Travis CI Use an explicit version of the protobuf library. --- .travis.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 987f822f860a..7bb3c0bed4f7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -205,7 +205,7 @@ script: sudo ln -s $(which ccache) /usr/lib/ccache/$CXX || echo; else brew update; - brew install ccache protobuf; + brew install ccache protobuf@3.1; `# protobuf 3.6+ uses C++11 features`; brew link ccache; export PATH="/usr/local/opt/ccache/libexec:$PATH"; fi @@ -235,6 +235,10 @@ script: -DWITH_PROTOBUF=system -DWITH_TOKUDB=OFF -DWITH_ROCKSDB=OFF + -DPROTOBUF_LIBRARY=/usr/local/opt/protobuf@3.1/lib/libprotobuf.dylib + -DPROTOBUF_INCLUDE_DIR=/usr/local/opt/protobuf@3.1/include + -DPROTOBUF_PROTOC_EXECUTABLE=/usr/local/opt/protobuf@3.1/bin/protoc + -DPROTOBUF_PROTOC_LIBRARY=/usr/local/opt/protobuf@3.1/lib/libprotoc.dylib "; else CMAKE_OPT+=" From 6d352b8ca83636f33760ee3744786a79ca4e42c6 Mon Sep 17 00:00:00 2001 From: Satya Bodapati Date: Wed, 20 Jun 2018 18:40:29 +0530 Subject: [PATCH 0988/1221] PS-3851: Percona Ver 5.6.39-83.1 Failing assertion: sym_node->table != NULL Problem: -------- A DDL on table with FTS index with concurrent FTS sync leads to crash. When table rebuilding ALTERs happen on table with FTS indexes, a new copy of table is created, the rows are inserted. This copy of table is created with a temporary name and renamed to the original table name at end of ALTER. FTS sync thread stores the direct reference of intermediate table before rename (fts_table_t->parent pointing to dict_table_t->name.m_name) and later tries to acccess this intermediate table after rename. When the table is renamed, the old name is freed and new name is allocated. The inter-leaving FTS sync thread still has access to the freed location. As part of fts sync, it writes the tokenized words to FTS AUX tables. It is executed as internal SQL and as part of internal SQL, FTS sync deferences freed location, builds a wrong AUX INDEX table name. Hence the table is neither found in cache nor it can load from dictionary. The assert says table must have been found. Fix: ---- When renaming a table, wait for a running sync to finish. --- mysql-test/suite/innodb_fts/r/sync.result | 24 +++++++++++++++++++++ mysql-test/suite/innodb_fts/t/sync.test | 26 +++++++++++++++++++++++ storage/innobase/row/row0mysql.cc | 12 +++++++++++ 3 files changed, 62 insertions(+) diff --git a/mysql-test/suite/innodb_fts/r/sync.result b/mysql-test/suite/innodb_fts/r/sync.result index 627d3aa50c00..e6febdb44f4d 100644 --- a/mysql-test/suite/innodb_fts/r/sync.result +++ b/mysql-test/suite/innodb_fts/r/sync.result @@ -130,3 +130,27 @@ id title 2 database 3 good DROP TABLE t1; +# +# PS-3851: Percona Ver 5.6.39-83.1 Failing assertion: sym_node->table != NULL +# +CREATE TABLE `questions_and_answers` ( +`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique ID', +`keywords` text COMMENT 'CSV list of keywords related to this entry', +PRIMARY KEY (`id`), +FULLTEXT KEY `keywords` (`keywords`) +) ENGINE=InnoDB AUTO_INCREMENT=3620 DEFAULT CHARSET=utf8 COMMENT='Main table for Q&A module '; +INSERT INTO `questions_and_answers` (`id`,`keywords`) VALUES (1854,'support, services, essay, writing, maths, help, advice, study, advice, advise, careers, employability, graduating, graduate, student_support, academic_support, academic_help'); +INSERT INTO `questions_and_answers` (`id`,`keywords`) VALUES (1855,'accommodation, housing, halls, residence, live, living, bed, beds, acomodation, accomodation, accommidation, acomidation, hall, campus_living, uni_living, uni_halls, university_life, university_accommodation'); +INSERT INTO `questions_and_answers` (`id`,`keywords`) VALUES (1856,'interview, interviews, audition, auditions, portfolio, review, admission, interview_preparation, booking, book, change_interview'); +INSERT INTO `questions_and_answers` (`id`,`keywords`) VALUES (1857,'entry_requirements, application, admission, apply, applying, entry, criteria, requirements, mature, life, experience, A-level, A-levels, A_levels, AS, AS_Level, AS_Levels, BTEC, IB, baccalaureate, Access, diploma, course, UCAS, foundation, foundation_degree, level_2, l2'); +INSERT INTO `questions_and_answers` (`id`,`keywords`) VALUES (1858,'alumni, alumnus, FOCUS, former, old, students, graduates'); +INSERT INTO `questions_and_answers` (`id`,`keywords`) VALUES (1859,'results_day, sending_results, clearing, confirmation, results, can_I_apply_through_clearing, do_you_have_vacancies, do_you_have_spaces, do_you_have_places, confirming_your_place'); +INSERT INTO `questions_and_answers` (`id`,`keywords`) VALUES (1860,'contact, contacts, recruitment, admissions, funding, finance, registry, support, careers, disabilities, accommodation, enrol, enrolment, sport, recreation, team'); +INSERT INTO `questions_and_answers` (`id`,`keywords`) VALUES (1861,'food, eat, drink, eating, café, cafés, snacks'); +INSERT INTO `questions_and_answers` (`id`,`keywords`) VALUES (1862,'faculty, faculties, schools, department, departments, courses, subject, subjects, structure, London, campus, CULC, subject_areas'); +INSERT INTO `questions_and_answers` (`id`,`keywords`) VALUES (1863,'freshers, week, induction, students, starters, freshers_week, what\'s_on_at_freshers'); +INSERT INTO `questions_and_answers` (`id`,`keywords`) VALUES (1864,'loan, loans, financial, support, funding, scholarships, bursaries, bursary, busrarys'); +SET GLOBAL DEBUG='+d,fts_instrument_sync_request'; +ALTER TABLE `questions_and_answers` ALGORITHM=COPY; +SET GLOBAL DEBUG='-d,fts_instrument_sync_request'; +DROP TABLE `questions_and_answers`; diff --git a/mysql-test/suite/innodb_fts/t/sync.test b/mysql-test/suite/innodb_fts/t/sync.test index 9389fd72765c..4e4e2bb97fd8 100644 --- a/mysql-test/suite/innodb_fts/t/sync.test +++ b/mysql-test/suite/innodb_fts/t/sync.test @@ -167,4 +167,30 @@ SELECT * FROM t1 WHERE MATCH(title) AGAINST ('mysql database good'); DROP TABLE t1; +--echo # +--echo # PS-3851: Percona Ver 5.6.39-83.1 Failing assertion: sym_node->table != NULL +--echo # +CREATE TABLE `questions_and_answers` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique ID', + `keywords` text COMMENT 'CSV list of keywords related to this entry', + PRIMARY KEY (`id`), + FULLTEXT KEY `keywords` (`keywords`) +) ENGINE=InnoDB AUTO_INCREMENT=3620 DEFAULT CHARSET=utf8 COMMENT='Main table for Q&A module '; + +INSERT INTO `questions_and_answers` (`id`,`keywords`) VALUES (1854,'support, services, essay, writing, maths, help, advice, study, advice, advise, careers, employability, graduating, graduate, student_support, academic_support, academic_help'); +INSERT INTO `questions_and_answers` (`id`,`keywords`) VALUES (1855,'accommodation, housing, halls, residence, live, living, bed, beds, acomodation, accomodation, accommidation, acomidation, hall, campus_living, uni_living, uni_halls, university_life, university_accommodation'); +INSERT INTO `questions_and_answers` (`id`,`keywords`) VALUES (1856,'interview, interviews, audition, auditions, portfolio, review, admission, interview_preparation, booking, book, change_interview'); +INSERT INTO `questions_and_answers` (`id`,`keywords`) VALUES (1857,'entry_requirements, application, admission, apply, applying, entry, criteria, requirements, mature, life, experience, A-level, A-levels, A_levels, AS, AS_Level, AS_Levels, BTEC, IB, baccalaureate, Access, diploma, course, UCAS, foundation, foundation_degree, level_2, l2'); +INSERT INTO `questions_and_answers` (`id`,`keywords`) VALUES (1858,'alumni, alumnus, FOCUS, former, old, students, graduates'); +INSERT INTO `questions_and_answers` (`id`,`keywords`) VALUES (1859,'results_day, sending_results, clearing, confirmation, results, can_I_apply_through_clearing, do_you_have_vacancies, do_you_have_spaces, do_you_have_places, confirming_your_place'); +INSERT INTO `questions_and_answers` (`id`,`keywords`) VALUES (1860,'contact, contacts, recruitment, admissions, funding, finance, registry, support, careers, disabilities, accommodation, enrol, enrolment, sport, recreation, team'); +INSERT INTO `questions_and_answers` (`id`,`keywords`) VALUES (1861,'food, eat, drink, eating, café, cafés, snacks'); +INSERT INTO `questions_and_answers` (`id`,`keywords`) VALUES (1862,'faculty, faculties, schools, department, departments, courses, subject, subjects, structure, London, campus, CULC, subject_areas'); +INSERT INTO `questions_and_answers` (`id`,`keywords`) VALUES (1863,'freshers, week, induction, students, starters, freshers_week, what\'s_on_at_freshers'); +INSERT INTO `questions_and_answers` (`id`,`keywords`) VALUES (1864,'loan, loans, financial, support, funding, scholarships, bursaries, bursary, busrarys'); + +SET GLOBAL DEBUG='+d,fts_instrument_sync_request'; +ALTER TABLE `questions_and_answers` ALGORITHM=COPY; +SET GLOBAL DEBUG='-d,fts_instrument_sync_request'; +DROP TABLE `questions_and_answers`; --source include/wait_until_count_sessions.inc diff --git a/storage/innobase/row/row0mysql.cc b/storage/innobase/row/row0mysql.cc index 1ad0b68e0d63..ddde8b8f730f 100644 --- a/storage/innobase/row/row0mysql.cc +++ b/storage/innobase/row/row0mysql.cc @@ -5500,6 +5500,18 @@ row_rename_table_for_mysql( goto funct_exit; } + /* Wait for background fts sync to finish */ + for (retry = 1; dict_fts_index_syncing(table); ++retry) { + DICT_BG_YIELD(trx); + if (retry % 100 == 0) { + ib_logf(IB_LOG_LEVEL_INFO, + "Unable to rename table %s to new name" + " %s because FTS sync is running on table." + " Retrying\n", + old_name, new_name); + } + } + /* We use the private SQL parser of Innobase to generate the query graphs needed in updating the dictionary data from system tables. */ From 691fe23e94333432f881a9b6b66af972ac7a835c Mon Sep 17 00:00:00 2001 From: Yura Sorokin Date: Wed, 27 Jun 2018 16:03:12 +0300 Subject: [PATCH 0989/1221] Fixed PS-4539 (7.5Gb RAM should be enough to run xtradb_compressed_columns_consistency_antelope_compact test) https://jira.percona.com/browse/PS-4539 Reorganized 'main.xtradb_compressed_columns_consistency__' series of MTR test cases. Instead of testing the whole set of data types ('VARCHAR', 'NATIONAL VARCHAR', 'VARBINARY', 'TINYBLOB', 'TINYTEXT', 'BLOB', 'TEXT', 'MEDIUMBLOB', 'MEDIUMTEXT', 'LONGBLOB', 'LONGTEXT') in a single test file, we now have them split into several 'main.xtradb_compressed_columns_consistency___set' test cases: * 'set1' - ('VARCHAR', 'NATIONAL VARCHAR', 'VARBINARY'); * 'set2' - ('TINYBLOB', 'TINYTEXT', 'BLOB', 'TEXT'); * 'set3' - ('MEDIUMBLOB', 'MEDIUMTEXT', 'LONGBLOB', 'LONGTEXT'). This helped to significantly decrease the number of nested MTR file includes ('--source xxx.inc') and therefore decrease memory consumption of 'mysqltest' utility from 1.4 GB to 400 MB ('set1') and 600 MB ('set2' and 'set3'). In addition, only 'set3' tests are now marked with '--source include/big_test.inc'. 'set1' and 'set2' ones will be run without specifying '--big-test'. Additional server optimizations. * Decreased '--innodb-log-file-size' from 256M to 192M. * To save some server resources we no longer set '--max-allowed-packet' to 48M at server restart, instead we set this system variable dynamically depending on the '$field_length' (the length of the value being inserted). * In order to completely deallocate memory resources allocated for '@inserted_value' variable ("eval SET @inserted_value = REPEAT('z', $current_value_length);") we now establish / close a new connection for each 'CREATE TABLE' - 'INSERT VALUE' - 'SELECT AND ASSERT' - 'DELETE TABLE' cycle. Moreover, this connection is established with 'COMPRESS' flag which decreases the amount of data transferred via network. --- .../xtradb_compressed_columns_check_type.inc | 14 ++++ ...compressed_columns_check_type_superset.inc | 67 +++++++++++-------- ..._consistency_antelope_compact_set1.result} | 0 ...s_consistency_antelope_compact_set2.result | 10 +++ ...s_consistency_antelope_compact_set3.result | 10 +++ ...onsistency_antelope_redundant_set1.result} | 0 ...consistency_antelope_redundant_set2.result | 10 +++ ...consistency_antelope_redundant_set3.result | 10 +++ ...consistency_barracuda_compact_set1.result} | 0 ..._consistency_barracuda_compact_set2.result | 10 +++ ..._consistency_barracuda_compact_set3.result | 10 +++ ...sistency_barracuda_compressed_set1.result} | 0 ...nsistency_barracuda_compressed_set2.result | 10 +++ ...nsistency_barracuda_compressed_set3.result | 10 +++ ...consistency_barracuda_dynamic_set1.result} | 0 ..._consistency_barracuda_dynamic_set2.result | 10 +++ ..._consistency_barracuda_dynamic_set3.result | 10 +++ ...nsistency_barracuda_redundant_set1.result} | 0 ...onsistency_barracuda_redundant_set2.result | 10 +++ ...onsistency_barracuda_redundant_set3.result | 10 +++ ...mns_consistency_antelope_compact_set1.test | 7 ++ ...mns_consistency_antelope_compact_set2.test | 7 ++ ...ns_consistency_antelope_compact_set3.test} | 1 + ...s_consistency_antelope_redundant_set1.test | 7 ++ ...s_consistency_antelope_redundant_set2.test | 7 ++ ..._consistency_antelope_redundant_set3.test} | 1 + ...ns_consistency_barracuda_compact_set1.test | 7 ++ ...ns_consistency_barracuda_compact_set2.test | 7 ++ ...s_consistency_barracuda_compact_set3.test} | 1 + ...consistency_barracuda_compressed_set1.test | 7 ++ ...consistency_barracuda_compressed_set2.test | 7 ++ ...onsistency_barracuda_compressed_set3.test} | 1 + ...ns_consistency_barracuda_dynamic_set1.test | 7 ++ ...ns_consistency_barracuda_dynamic_set2.test | 7 ++ ...s_consistency_barracuda_dynamic_set3.test} | 1 + ..._consistency_barracuda_redundant_set1.test | 7 ++ ..._consistency_barracuda_redundant_set2.test | 7 ++ ...consistency_barracuda_redundant_set3.test} | 1 + 38 files changed, 264 insertions(+), 27 deletions(-) rename mysql-test/suite/innodb/r/{xtradb_compressed_columns_consistency_antelope_compact.result => xtradb_compressed_columns_consistency_antelope_compact_set1.result} (100%) create mode 100644 mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_antelope_compact_set2.result create mode 100644 mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_antelope_compact_set3.result rename mysql-test/suite/innodb/r/{xtradb_compressed_columns_consistency_antelope_redundant.result => xtradb_compressed_columns_consistency_antelope_redundant_set1.result} (100%) create mode 100644 mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_antelope_redundant_set2.result create mode 100644 mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_antelope_redundant_set3.result rename mysql-test/suite/innodb/r/{xtradb_compressed_columns_consistency_barracuda_compact.result => xtradb_compressed_columns_consistency_barracuda_compact_set1.result} (100%) create mode 100644 mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_barracuda_compact_set2.result create mode 100644 mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_barracuda_compact_set3.result rename mysql-test/suite/innodb/r/{xtradb_compressed_columns_consistency_barracuda_compressed.result => xtradb_compressed_columns_consistency_barracuda_compressed_set1.result} (100%) create mode 100644 mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_barracuda_compressed_set2.result create mode 100644 mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_barracuda_compressed_set3.result rename mysql-test/suite/innodb/r/{xtradb_compressed_columns_consistency_barracuda_dynamic.result => xtradb_compressed_columns_consistency_barracuda_dynamic_set1.result} (100%) create mode 100644 mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_barracuda_dynamic_set2.result create mode 100644 mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_barracuda_dynamic_set3.result rename mysql-test/suite/innodb/r/{xtradb_compressed_columns_consistency_barracuda_redundant.result => xtradb_compressed_columns_consistency_barracuda_redundant_set1.result} (100%) create mode 100644 mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_barracuda_redundant_set2.result create mode 100644 mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_barracuda_redundant_set3.result create mode 100644 mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_antelope_compact_set1.test create mode 100644 mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_antelope_compact_set2.test rename mysql-test/suite/innodb/t/{xtradb_compressed_columns_consistency_antelope_compact.test => xtradb_compressed_columns_consistency_antelope_compact_set3.test} (91%) create mode 100644 mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_antelope_redundant_set1.test create mode 100644 mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_antelope_redundant_set2.test rename mysql-test/suite/innodb/t/{xtradb_compressed_columns_consistency_antelope_redundant.test => xtradb_compressed_columns_consistency_antelope_redundant_set3.test} (91%) create mode 100644 mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_barracuda_compact_set1.test create mode 100644 mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_barracuda_compact_set2.test rename mysql-test/suite/innodb/t/{xtradb_compressed_columns_consistency_barracuda_compact.test => xtradb_compressed_columns_consistency_barracuda_compact_set3.test} (91%) create mode 100644 mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_barracuda_compressed_set1.test create mode 100644 mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_barracuda_compressed_set2.test rename mysql-test/suite/innodb/t/{xtradb_compressed_columns_consistency_barracuda_compressed.test => xtradb_compressed_columns_consistency_barracuda_compressed_set3.test} (91%) create mode 100644 mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_barracuda_dynamic_set1.test create mode 100644 mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_barracuda_dynamic_set2.test rename mysql-test/suite/innodb/t/{xtradb_compressed_columns_consistency_barracuda_dynamic.test => xtradb_compressed_columns_consistency_barracuda_dynamic_set3.test} (91%) create mode 100644 mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_barracuda_redundant_set1.test create mode 100644 mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_barracuda_redundant_set2.test rename mysql-test/suite/innodb/t/{xtradb_compressed_columns_consistency_barracuda_redundant.test => xtradb_compressed_columns_consistency_barracuda_redundant_set3.test} (91%) diff --git a/mysql-test/suite/innodb/include/xtradb_compressed_columns_check_type.inc b/mysql-test/suite/innodb/include/xtradb_compressed_columns_check_type.inc index 243233762742..413da66145e6 100644 --- a/mysql-test/suite/innodb/include/xtradb_compressed_columns_check_type.inc +++ b/mysql-test/suite/innodb/include/xtradb_compressed_columns_check_type.inc @@ -36,6 +36,13 @@ if($full_field_type) } --disable_query_log + +SET @saved_max_allowed_packet = @@global.max_allowed_packet; +eval SET GLOBAL max_allowed_packet = GREATEST((($field_length + 1023) DIV 1024) * 1024, 1048576); + +--source include/count_sessions.inc +--connect (comp_con,localhost,root,,,,,COMPRESS) + eval CREATE TABLE t1( a $local_full_field_type ) ROW_FORMAT = $row_format ENGINE=InnoDB; @@ -119,4 +126,11 @@ while($current_value_length <= $max_value_length) } DROP TABLE t1; + +--connection default +--disconnect comp_con +--source include/wait_until_count_sessions.inc + +SET GLOBAL max_allowed_packet = @saved_max_allowed_packet; + --enable_query_log diff --git a/mysql-test/suite/innodb/include/xtradb_compressed_columns_check_type_superset.inc b/mysql-test/suite/innodb/include/xtradb_compressed_columns_check_type_superset.inc index ab25f936f0e7..285a41ad780c 100644 --- a/mysql-test/suite/innodb/include/xtradb_compressed_columns_check_type_superset.inc +++ b/mysql-test/suite/innodb/include/xtradb_compressed_columns_check_type_superset.inc @@ -8,6 +8,10 @@ # - COMPRESSED (row level compression) # - REDUNDANT (old format) # - COMPACT (default, primary format) +# set $datatype_set to one of the following values: +# - 1 (VARCHAR, NATIONAL VARCHAR, VARBINARY) +# - 2 (TINYBLOB, TINYTEXT, BLOB, TEXT) +# - 3 (MEDIUMBLOB, MEDIUMTEXT, LONGBLOB, LONGTEXT) # suppressing warnings caused by changing 'innodb-log-file-size' call mtr.add_suppression("InnoDB: Resizing redo log"); @@ -17,7 +21,7 @@ call mtr.add_suppression("InnoDB: The log sequence numbers [0-9]+ and [0-9]+ in # restarting server with bigger 'innodb-log-file-size' and 'max-allowed-packet' # required for inserting long (~16MB) strings ---let $restart_parameters= restart:--innodb-log-file-size=256M --max-allowed-packet=48M +--let $restart_parameters= restart:--innodb-log-file-size=192M --source include/restart_mysqld.inc if($row_format == 'COMPRESSED') @@ -48,42 +52,51 @@ SET GLOBAL innodb_compressed_columns_zip_level = 0; # - LONGBLOB # - LONGTEXT ---let $base_field_type= VARCHAR ---source suite/innodb/include/xtradb_compressed_columns_check_type_set.inc +if($datatype_set == 1) +{ + --let $base_field_type= VARCHAR + --source suite/innodb/include/xtradb_compressed_columns_check_type_set.inc ---let $base_field_type= NATIONAL VARCHAR ---source suite/innodb/include/xtradb_compressed_columns_check_type_set.inc + --let $base_field_type= NATIONAL VARCHAR + --source suite/innodb/include/xtradb_compressed_columns_check_type_set.inc ---let $base_field_type= VARBINARY ---source suite/innodb/include/xtradb_compressed_columns_check_type_set.inc + --let $base_field_type= VARBINARY + --source suite/innodb/include/xtradb_compressed_columns_check_type_set.inc +} ---let $type_length_limit= 255 ---let $full_field_type= TINYTEXT ---source suite/innodb/include/xtradb_compressed_columns_check_type_set.inc +if($datatype_set == 2) +{ + --let $type_length_limit= 255 + --let $full_field_type= TINYTEXT + --source suite/innodb/include/xtradb_compressed_columns_check_type_set.inc ---let $full_field_type= TINYBLOB ---source suite/innodb/include/xtradb_compressed_columns_check_type_set.inc + --let $full_field_type= TINYBLOB + --source suite/innodb/include/xtradb_compressed_columns_check_type_set.inc ---let $type_length_limit= 65535 ---let $full_field_type= TEXT ---source suite/innodb/include/xtradb_compressed_columns_check_type_set.inc + --let $type_length_limit= 65535 + --let $full_field_type= TEXT + --source suite/innodb/include/xtradb_compressed_columns_check_type_set.inc ---let $full_field_type= BLOB ---source suite/innodb/include/xtradb_compressed_columns_check_type_set.inc + --let $full_field_type= BLOB + --source suite/innodb/include/xtradb_compressed_columns_check_type_set.inc +} ---let $type_length_limit= 16777215 ---let $full_field_type= MEDIUMTEXT ---source suite/innodb/include/xtradb_compressed_columns_check_type_set.inc +if($datatype_set == 3) +{ + --let $type_length_limit= 16777215 + --let $full_field_type= MEDIUMTEXT + --source suite/innodb/include/xtradb_compressed_columns_check_type_set.inc ---let $full_field_type= MEDIUMBLOB ---source suite/innodb/include/xtradb_compressed_columns_check_type_set.inc + --let $full_field_type= MEDIUMBLOB + --source suite/innodb/include/xtradb_compressed_columns_check_type_set.inc ---let $type_length_limit= 4294967295 ---let $full_field_type= LONGTEXT ---source suite/innodb/include/xtradb_compressed_columns_check_type_set.inc + --let $type_length_limit= 4294967295 + --let $full_field_type= LONGTEXT + --source suite/innodb/include/xtradb_compressed_columns_check_type_set.inc ---let $full_field_type= LONGBLOB ---source suite/innodb/include/xtradb_compressed_columns_check_type_set.inc + --let $full_field_type= LONGBLOB + --source suite/innodb/include/xtradb_compressed_columns_check_type_set.inc +} # restoring moddified global variables diff --git a/mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_antelope_compact.result b/mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_antelope_compact_set1.result similarity index 100% rename from mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_antelope_compact.result rename to mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_antelope_compact_set1.result diff --git a/mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_antelope_compact_set2.result b/mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_antelope_compact_set2.result new file mode 100644 index 000000000000..31ccc1f42131 --- /dev/null +++ b/mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_antelope_compact_set2.result @@ -0,0 +1,10 @@ +call mtr.add_suppression("InnoDB: Resizing redo log"); +call mtr.add_suppression("InnoDB: Starting to delete and rewrite log files"); +call mtr.add_suppression("InnoDB: New log files created"); +call mtr.add_suppression("InnoDB: The log sequence numbers [0-9]+ and [0-9]+ in ibdata files do not match the log sequence number [0-9]+ in the ib_logfiles"); +SET @saved_innodb_file_format = @@global.innodb_file_format; +SET @saved_innodb_compressed_columns_zip_level = @@global.innodb_compressed_columns_zip_level; +SET GLOBAL innodb_file_format = Antelope; +SET GLOBAL innodb_compressed_columns_zip_level = 0; +SET GLOBAL innodb_file_format = @saved_innodb_file_format; +SET GLOBAL innodb_compressed_columns_zip_level = @saved_innodb_compressed_columns_zip_level; diff --git a/mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_antelope_compact_set3.result b/mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_antelope_compact_set3.result new file mode 100644 index 000000000000..31ccc1f42131 --- /dev/null +++ b/mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_antelope_compact_set3.result @@ -0,0 +1,10 @@ +call mtr.add_suppression("InnoDB: Resizing redo log"); +call mtr.add_suppression("InnoDB: Starting to delete and rewrite log files"); +call mtr.add_suppression("InnoDB: New log files created"); +call mtr.add_suppression("InnoDB: The log sequence numbers [0-9]+ and [0-9]+ in ibdata files do not match the log sequence number [0-9]+ in the ib_logfiles"); +SET @saved_innodb_file_format = @@global.innodb_file_format; +SET @saved_innodb_compressed_columns_zip_level = @@global.innodb_compressed_columns_zip_level; +SET GLOBAL innodb_file_format = Antelope; +SET GLOBAL innodb_compressed_columns_zip_level = 0; +SET GLOBAL innodb_file_format = @saved_innodb_file_format; +SET GLOBAL innodb_compressed_columns_zip_level = @saved_innodb_compressed_columns_zip_level; diff --git a/mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_antelope_redundant.result b/mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_antelope_redundant_set1.result similarity index 100% rename from mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_antelope_redundant.result rename to mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_antelope_redundant_set1.result diff --git a/mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_antelope_redundant_set2.result b/mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_antelope_redundant_set2.result new file mode 100644 index 000000000000..31ccc1f42131 --- /dev/null +++ b/mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_antelope_redundant_set2.result @@ -0,0 +1,10 @@ +call mtr.add_suppression("InnoDB: Resizing redo log"); +call mtr.add_suppression("InnoDB: Starting to delete and rewrite log files"); +call mtr.add_suppression("InnoDB: New log files created"); +call mtr.add_suppression("InnoDB: The log sequence numbers [0-9]+ and [0-9]+ in ibdata files do not match the log sequence number [0-9]+ in the ib_logfiles"); +SET @saved_innodb_file_format = @@global.innodb_file_format; +SET @saved_innodb_compressed_columns_zip_level = @@global.innodb_compressed_columns_zip_level; +SET GLOBAL innodb_file_format = Antelope; +SET GLOBAL innodb_compressed_columns_zip_level = 0; +SET GLOBAL innodb_file_format = @saved_innodb_file_format; +SET GLOBAL innodb_compressed_columns_zip_level = @saved_innodb_compressed_columns_zip_level; diff --git a/mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_antelope_redundant_set3.result b/mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_antelope_redundant_set3.result new file mode 100644 index 000000000000..31ccc1f42131 --- /dev/null +++ b/mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_antelope_redundant_set3.result @@ -0,0 +1,10 @@ +call mtr.add_suppression("InnoDB: Resizing redo log"); +call mtr.add_suppression("InnoDB: Starting to delete and rewrite log files"); +call mtr.add_suppression("InnoDB: New log files created"); +call mtr.add_suppression("InnoDB: The log sequence numbers [0-9]+ and [0-9]+ in ibdata files do not match the log sequence number [0-9]+ in the ib_logfiles"); +SET @saved_innodb_file_format = @@global.innodb_file_format; +SET @saved_innodb_compressed_columns_zip_level = @@global.innodb_compressed_columns_zip_level; +SET GLOBAL innodb_file_format = Antelope; +SET GLOBAL innodb_compressed_columns_zip_level = 0; +SET GLOBAL innodb_file_format = @saved_innodb_file_format; +SET GLOBAL innodb_compressed_columns_zip_level = @saved_innodb_compressed_columns_zip_level; diff --git a/mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_barracuda_compact.result b/mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_barracuda_compact_set1.result similarity index 100% rename from mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_barracuda_compact.result rename to mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_barracuda_compact_set1.result diff --git a/mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_barracuda_compact_set2.result b/mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_barracuda_compact_set2.result new file mode 100644 index 000000000000..457868f54f1b --- /dev/null +++ b/mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_barracuda_compact_set2.result @@ -0,0 +1,10 @@ +call mtr.add_suppression("InnoDB: Resizing redo log"); +call mtr.add_suppression("InnoDB: Starting to delete and rewrite log files"); +call mtr.add_suppression("InnoDB: New log files created"); +call mtr.add_suppression("InnoDB: The log sequence numbers [0-9]+ and [0-9]+ in ibdata files do not match the log sequence number [0-9]+ in the ib_logfiles"); +SET @saved_innodb_file_format = @@global.innodb_file_format; +SET @saved_innodb_compressed_columns_zip_level = @@global.innodb_compressed_columns_zip_level; +SET GLOBAL innodb_file_format = Barracuda; +SET GLOBAL innodb_compressed_columns_zip_level = 0; +SET GLOBAL innodb_file_format = @saved_innodb_file_format; +SET GLOBAL innodb_compressed_columns_zip_level = @saved_innodb_compressed_columns_zip_level; diff --git a/mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_barracuda_compact_set3.result b/mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_barracuda_compact_set3.result new file mode 100644 index 000000000000..457868f54f1b --- /dev/null +++ b/mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_barracuda_compact_set3.result @@ -0,0 +1,10 @@ +call mtr.add_suppression("InnoDB: Resizing redo log"); +call mtr.add_suppression("InnoDB: Starting to delete and rewrite log files"); +call mtr.add_suppression("InnoDB: New log files created"); +call mtr.add_suppression("InnoDB: The log sequence numbers [0-9]+ and [0-9]+ in ibdata files do not match the log sequence number [0-9]+ in the ib_logfiles"); +SET @saved_innodb_file_format = @@global.innodb_file_format; +SET @saved_innodb_compressed_columns_zip_level = @@global.innodb_compressed_columns_zip_level; +SET GLOBAL innodb_file_format = Barracuda; +SET GLOBAL innodb_compressed_columns_zip_level = 0; +SET GLOBAL innodb_file_format = @saved_innodb_file_format; +SET GLOBAL innodb_compressed_columns_zip_level = @saved_innodb_compressed_columns_zip_level; diff --git a/mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_barracuda_compressed.result b/mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_barracuda_compressed_set1.result similarity index 100% rename from mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_barracuda_compressed.result rename to mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_barracuda_compressed_set1.result diff --git a/mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_barracuda_compressed_set2.result b/mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_barracuda_compressed_set2.result new file mode 100644 index 000000000000..457868f54f1b --- /dev/null +++ b/mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_barracuda_compressed_set2.result @@ -0,0 +1,10 @@ +call mtr.add_suppression("InnoDB: Resizing redo log"); +call mtr.add_suppression("InnoDB: Starting to delete and rewrite log files"); +call mtr.add_suppression("InnoDB: New log files created"); +call mtr.add_suppression("InnoDB: The log sequence numbers [0-9]+ and [0-9]+ in ibdata files do not match the log sequence number [0-9]+ in the ib_logfiles"); +SET @saved_innodb_file_format = @@global.innodb_file_format; +SET @saved_innodb_compressed_columns_zip_level = @@global.innodb_compressed_columns_zip_level; +SET GLOBAL innodb_file_format = Barracuda; +SET GLOBAL innodb_compressed_columns_zip_level = 0; +SET GLOBAL innodb_file_format = @saved_innodb_file_format; +SET GLOBAL innodb_compressed_columns_zip_level = @saved_innodb_compressed_columns_zip_level; diff --git a/mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_barracuda_compressed_set3.result b/mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_barracuda_compressed_set3.result new file mode 100644 index 000000000000..457868f54f1b --- /dev/null +++ b/mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_barracuda_compressed_set3.result @@ -0,0 +1,10 @@ +call mtr.add_suppression("InnoDB: Resizing redo log"); +call mtr.add_suppression("InnoDB: Starting to delete and rewrite log files"); +call mtr.add_suppression("InnoDB: New log files created"); +call mtr.add_suppression("InnoDB: The log sequence numbers [0-9]+ and [0-9]+ in ibdata files do not match the log sequence number [0-9]+ in the ib_logfiles"); +SET @saved_innodb_file_format = @@global.innodb_file_format; +SET @saved_innodb_compressed_columns_zip_level = @@global.innodb_compressed_columns_zip_level; +SET GLOBAL innodb_file_format = Barracuda; +SET GLOBAL innodb_compressed_columns_zip_level = 0; +SET GLOBAL innodb_file_format = @saved_innodb_file_format; +SET GLOBAL innodb_compressed_columns_zip_level = @saved_innodb_compressed_columns_zip_level; diff --git a/mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_barracuda_dynamic.result b/mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_barracuda_dynamic_set1.result similarity index 100% rename from mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_barracuda_dynamic.result rename to mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_barracuda_dynamic_set1.result diff --git a/mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_barracuda_dynamic_set2.result b/mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_barracuda_dynamic_set2.result new file mode 100644 index 000000000000..457868f54f1b --- /dev/null +++ b/mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_barracuda_dynamic_set2.result @@ -0,0 +1,10 @@ +call mtr.add_suppression("InnoDB: Resizing redo log"); +call mtr.add_suppression("InnoDB: Starting to delete and rewrite log files"); +call mtr.add_suppression("InnoDB: New log files created"); +call mtr.add_suppression("InnoDB: The log sequence numbers [0-9]+ and [0-9]+ in ibdata files do not match the log sequence number [0-9]+ in the ib_logfiles"); +SET @saved_innodb_file_format = @@global.innodb_file_format; +SET @saved_innodb_compressed_columns_zip_level = @@global.innodb_compressed_columns_zip_level; +SET GLOBAL innodb_file_format = Barracuda; +SET GLOBAL innodb_compressed_columns_zip_level = 0; +SET GLOBAL innodb_file_format = @saved_innodb_file_format; +SET GLOBAL innodb_compressed_columns_zip_level = @saved_innodb_compressed_columns_zip_level; diff --git a/mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_barracuda_dynamic_set3.result b/mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_barracuda_dynamic_set3.result new file mode 100644 index 000000000000..457868f54f1b --- /dev/null +++ b/mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_barracuda_dynamic_set3.result @@ -0,0 +1,10 @@ +call mtr.add_suppression("InnoDB: Resizing redo log"); +call mtr.add_suppression("InnoDB: Starting to delete and rewrite log files"); +call mtr.add_suppression("InnoDB: New log files created"); +call mtr.add_suppression("InnoDB: The log sequence numbers [0-9]+ and [0-9]+ in ibdata files do not match the log sequence number [0-9]+ in the ib_logfiles"); +SET @saved_innodb_file_format = @@global.innodb_file_format; +SET @saved_innodb_compressed_columns_zip_level = @@global.innodb_compressed_columns_zip_level; +SET GLOBAL innodb_file_format = Barracuda; +SET GLOBAL innodb_compressed_columns_zip_level = 0; +SET GLOBAL innodb_file_format = @saved_innodb_file_format; +SET GLOBAL innodb_compressed_columns_zip_level = @saved_innodb_compressed_columns_zip_level; diff --git a/mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_barracuda_redundant.result b/mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_barracuda_redundant_set1.result similarity index 100% rename from mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_barracuda_redundant.result rename to mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_barracuda_redundant_set1.result diff --git a/mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_barracuda_redundant_set2.result b/mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_barracuda_redundant_set2.result new file mode 100644 index 000000000000..457868f54f1b --- /dev/null +++ b/mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_barracuda_redundant_set2.result @@ -0,0 +1,10 @@ +call mtr.add_suppression("InnoDB: Resizing redo log"); +call mtr.add_suppression("InnoDB: Starting to delete and rewrite log files"); +call mtr.add_suppression("InnoDB: New log files created"); +call mtr.add_suppression("InnoDB: The log sequence numbers [0-9]+ and [0-9]+ in ibdata files do not match the log sequence number [0-9]+ in the ib_logfiles"); +SET @saved_innodb_file_format = @@global.innodb_file_format; +SET @saved_innodb_compressed_columns_zip_level = @@global.innodb_compressed_columns_zip_level; +SET GLOBAL innodb_file_format = Barracuda; +SET GLOBAL innodb_compressed_columns_zip_level = 0; +SET GLOBAL innodb_file_format = @saved_innodb_file_format; +SET GLOBAL innodb_compressed_columns_zip_level = @saved_innodb_compressed_columns_zip_level; diff --git a/mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_barracuda_redundant_set3.result b/mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_barracuda_redundant_set3.result new file mode 100644 index 000000000000..457868f54f1b --- /dev/null +++ b/mysql-test/suite/innodb/r/xtradb_compressed_columns_consistency_barracuda_redundant_set3.result @@ -0,0 +1,10 @@ +call mtr.add_suppression("InnoDB: Resizing redo log"); +call mtr.add_suppression("InnoDB: Starting to delete and rewrite log files"); +call mtr.add_suppression("InnoDB: New log files created"); +call mtr.add_suppression("InnoDB: The log sequence numbers [0-9]+ and [0-9]+ in ibdata files do not match the log sequence number [0-9]+ in the ib_logfiles"); +SET @saved_innodb_file_format = @@global.innodb_file_format; +SET @saved_innodb_compressed_columns_zip_level = @@global.innodb_compressed_columns_zip_level; +SET GLOBAL innodb_file_format = Barracuda; +SET GLOBAL innodb_compressed_columns_zip_level = 0; +SET GLOBAL innodb_file_format = @saved_innodb_file_format; +SET GLOBAL innodb_compressed_columns_zip_level = @saved_innodb_compressed_columns_zip_level; diff --git a/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_antelope_compact_set1.test b/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_antelope_compact_set1.test new file mode 100644 index 000000000000..38e5e7810ebd --- /dev/null +++ b/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_antelope_compact_set1.test @@ -0,0 +1,7 @@ +--source include/have_innodb.inc + +--let $file_format= Antelope +--let $compressed_attribute= COLUMN_FORMAT COMPRESSED +--let $row_format= COMPACT +--let $datatype_set= 1 +--source suite/innodb/include/xtradb_compressed_columns_check_type_superset.inc diff --git a/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_antelope_compact_set2.test b/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_antelope_compact_set2.test new file mode 100644 index 000000000000..c7402690b1da --- /dev/null +++ b/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_antelope_compact_set2.test @@ -0,0 +1,7 @@ +--source include/have_innodb.inc + +--let $file_format= Antelope +--let $compressed_attribute= COLUMN_FORMAT COMPRESSED +--let $row_format= COMPACT +--let $datatype_set= 2 +--source suite/innodb/include/xtradb_compressed_columns_check_type_superset.inc diff --git a/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_antelope_compact.test b/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_antelope_compact_set3.test similarity index 91% rename from mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_antelope_compact.test rename to mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_antelope_compact_set3.test index 9ff61ce8f93e..c4183f1b8dd1 100644 --- a/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_antelope_compact.test +++ b/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_antelope_compact_set3.test @@ -4,4 +4,5 @@ --let $file_format= Antelope --let $compressed_attribute= COLUMN_FORMAT COMPRESSED --let $row_format= COMPACT +--let $datatype_set= 3 --source suite/innodb/include/xtradb_compressed_columns_check_type_superset.inc diff --git a/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_antelope_redundant_set1.test b/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_antelope_redundant_set1.test new file mode 100644 index 000000000000..5515741ada9a --- /dev/null +++ b/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_antelope_redundant_set1.test @@ -0,0 +1,7 @@ +--source include/have_innodb.inc + +--let $file_format= Antelope +--let $compressed_attribute= COLUMN_FORMAT COMPRESSED +--let $row_format= REDUNDANT +--let $datatype_set= 1 +--source suite/innodb/include/xtradb_compressed_columns_check_type_superset.inc diff --git a/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_antelope_redundant_set2.test b/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_antelope_redundant_set2.test new file mode 100644 index 000000000000..65fa043bd74c --- /dev/null +++ b/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_antelope_redundant_set2.test @@ -0,0 +1,7 @@ +--source include/have_innodb.inc + +--let $file_format= Antelope +--let $compressed_attribute= COLUMN_FORMAT COMPRESSED +--let $row_format= REDUNDANT +--let $datatype_set= 2 +--source suite/innodb/include/xtradb_compressed_columns_check_type_superset.inc diff --git a/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_antelope_redundant.test b/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_antelope_redundant_set3.test similarity index 91% rename from mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_antelope_redundant.test rename to mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_antelope_redundant_set3.test index 12abe3b78712..60b4a8f41c8c 100644 --- a/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_antelope_redundant.test +++ b/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_antelope_redundant_set3.test @@ -4,4 +4,5 @@ --let $file_format= Antelope --let $compressed_attribute= COLUMN_FORMAT COMPRESSED --let $row_format= REDUNDANT +--let $datatype_set= 3 --source suite/innodb/include/xtradb_compressed_columns_check_type_superset.inc diff --git a/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_barracuda_compact_set1.test b/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_barracuda_compact_set1.test new file mode 100644 index 000000000000..177f429080ac --- /dev/null +++ b/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_barracuda_compact_set1.test @@ -0,0 +1,7 @@ +--source include/have_innodb.inc + +--let $file_format= Barracuda +--let $compressed_attribute= COLUMN_FORMAT COMPRESSED +--let $row_format= COMPACT +--let $datatype_set= 1 +--source suite/innodb/include/xtradb_compressed_columns_check_type_superset.inc diff --git a/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_barracuda_compact_set2.test b/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_barracuda_compact_set2.test new file mode 100644 index 000000000000..b27ae87493c0 --- /dev/null +++ b/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_barracuda_compact_set2.test @@ -0,0 +1,7 @@ +--source include/have_innodb.inc + +--let $file_format= Barracuda +--let $compressed_attribute= COLUMN_FORMAT COMPRESSED +--let $row_format= COMPACT +--let $datatype_set= 2 +--source suite/innodb/include/xtradb_compressed_columns_check_type_superset.inc diff --git a/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_barracuda_compact.test b/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_barracuda_compact_set3.test similarity index 91% rename from mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_barracuda_compact.test rename to mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_barracuda_compact_set3.test index a52b7166df66..ba4e94e185a7 100644 --- a/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_barracuda_compact.test +++ b/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_barracuda_compact_set3.test @@ -4,4 +4,5 @@ --let $file_format= Barracuda --let $compressed_attribute= COLUMN_FORMAT COMPRESSED --let $row_format= COMPACT +--let $datatype_set= 3 --source suite/innodb/include/xtradb_compressed_columns_check_type_superset.inc diff --git a/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_barracuda_compressed_set1.test b/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_barracuda_compressed_set1.test new file mode 100644 index 000000000000..5ddc830ff05b --- /dev/null +++ b/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_barracuda_compressed_set1.test @@ -0,0 +1,7 @@ +--source include/have_innodb.inc + +--let $file_format= Barracuda +--let $compressed_attribute= COLUMN_FORMAT COMPRESSED +--let $row_format= COMPRESSED +--let $datatype_set= 1 +--source suite/innodb/include/xtradb_compressed_columns_check_type_superset.inc diff --git a/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_barracuda_compressed_set2.test b/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_barracuda_compressed_set2.test new file mode 100644 index 000000000000..b2db91aca627 --- /dev/null +++ b/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_barracuda_compressed_set2.test @@ -0,0 +1,7 @@ +--source include/have_innodb.inc + +--let $file_format= Barracuda +--let $compressed_attribute= COLUMN_FORMAT COMPRESSED +--let $row_format= COMPRESSED +--let $datatype_set= 2 +--source suite/innodb/include/xtradb_compressed_columns_check_type_superset.inc diff --git a/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_barracuda_compressed.test b/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_barracuda_compressed_set3.test similarity index 91% rename from mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_barracuda_compressed.test rename to mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_barracuda_compressed_set3.test index de6e7e7ad3eb..9ed00882d1d0 100644 --- a/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_barracuda_compressed.test +++ b/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_barracuda_compressed_set3.test @@ -4,4 +4,5 @@ --let $file_format= Barracuda --let $compressed_attribute= COLUMN_FORMAT COMPRESSED --let $row_format= COMPRESSED +--let $datatype_set= 3 --source suite/innodb/include/xtradb_compressed_columns_check_type_superset.inc diff --git a/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_barracuda_dynamic_set1.test b/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_barracuda_dynamic_set1.test new file mode 100644 index 000000000000..85723c23d0a2 --- /dev/null +++ b/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_barracuda_dynamic_set1.test @@ -0,0 +1,7 @@ +--source include/have_innodb.inc + +--let $file_format= Barracuda +--let $compressed_attribute= COLUMN_FORMAT COMPRESSED +--let $row_format= DYNAMIC +--let $datatype_set= 1 +--source suite/innodb/include/xtradb_compressed_columns_check_type_superset.inc diff --git a/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_barracuda_dynamic_set2.test b/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_barracuda_dynamic_set2.test new file mode 100644 index 000000000000..d9a13f1f7150 --- /dev/null +++ b/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_barracuda_dynamic_set2.test @@ -0,0 +1,7 @@ +--source include/have_innodb.inc + +--let $file_format= Barracuda +--let $compressed_attribute= COLUMN_FORMAT COMPRESSED +--let $row_format= DYNAMIC +--let $datatype_set= 2 +--source suite/innodb/include/xtradb_compressed_columns_check_type_superset.inc diff --git a/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_barracuda_dynamic.test b/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_barracuda_dynamic_set3.test similarity index 91% rename from mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_barracuda_dynamic.test rename to mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_barracuda_dynamic_set3.test index e579d6d45d69..efe617793deb 100644 --- a/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_barracuda_dynamic.test +++ b/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_barracuda_dynamic_set3.test @@ -4,4 +4,5 @@ --let $file_format= Barracuda --let $compressed_attribute= COLUMN_FORMAT COMPRESSED --let $row_format= DYNAMIC +--let $datatype_set= 3 --source suite/innodb/include/xtradb_compressed_columns_check_type_superset.inc diff --git a/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_barracuda_redundant_set1.test b/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_barracuda_redundant_set1.test new file mode 100644 index 000000000000..5c0fde50d175 --- /dev/null +++ b/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_barracuda_redundant_set1.test @@ -0,0 +1,7 @@ +--source include/have_innodb.inc + +--let $file_format= Barracuda +--let $compressed_attribute= COLUMN_FORMAT COMPRESSED +--let $row_format= REDUNDANT +--let $datatype_set= 1 +--source suite/innodb/include/xtradb_compressed_columns_check_type_superset.inc diff --git a/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_barracuda_redundant_set2.test b/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_barracuda_redundant_set2.test new file mode 100644 index 000000000000..a1022325f9a7 --- /dev/null +++ b/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_barracuda_redundant_set2.test @@ -0,0 +1,7 @@ +--source include/have_innodb.inc + +--let $file_format= Barracuda +--let $compressed_attribute= COLUMN_FORMAT COMPRESSED +--let $row_format= REDUNDANT +--let $datatype_set= 2 +--source suite/innodb/include/xtradb_compressed_columns_check_type_superset.inc diff --git a/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_barracuda_redundant.test b/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_barracuda_redundant_set3.test similarity index 91% rename from mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_barracuda_redundant.test rename to mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_barracuda_redundant_set3.test index aaa55c70dace..f5a8c9fa2556 100644 --- a/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_barracuda_redundant.test +++ b/mysql-test/suite/innodb/t/xtradb_compressed_columns_consistency_barracuda_redundant_set3.test @@ -4,4 +4,5 @@ --let $file_format= Barracuda --let $compressed_attribute= COLUMN_FORMAT COMPRESSED --let $row_format= REDUNDANT +--let $datatype_set= 3 --source suite/innodb/include/xtradb_compressed_columns_check_type_superset.inc From d6723864dca3be22b30c1ecc23d655bc39327fee Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Wed, 27 Jun 2018 15:31:50 +0200 Subject: [PATCH 0990/1221] From c06e45147a945cf11f96331f7c4eea4c4925fa0b Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Tue, 10 Apr 2018 11:24:52 -0700 Subject: [PATCH 0991/1221] PS-4211 : Fix include structure to properly use "" and <> - Changed all includes of mysql headers to use "" instead of <> and a little movement of some that were commented incorrectly. --- storage/rocksdb/event_listener.cc | 4 ++-- storage/rocksdb/ha_rocksdb.cc | 18 +++++++++--------- storage/rocksdb/ha_rocksdb.h | 12 ++++++------ storage/rocksdb/ha_rocksdb_proto.h | 2 +- storage/rocksdb/logger.h | 2 +- storage/rocksdb/properties_collector.cc | 6 +++--- storage/rocksdb/rdb_cf_manager.h | 2 +- storage/rocksdb/rdb_cf_options.cc | 2 +- storage/rocksdb/rdb_comparator.h | 2 +- storage/rocksdb/rdb_datadic.cc | 14 +++++++------- storage/rocksdb/rdb_i_s.cc | 5 +++-- storage/rocksdb/rdb_index_merge.h | 6 +++--- storage/rocksdb/rdb_mutex_wrapper.h | 2 +- storage/rocksdb/rdb_perf_context.h | 6 +++--- storage/rocksdb/rdb_psi.cc | 2 +- storage/rocksdb/rdb_psi.h | 6 +++--- storage/rocksdb/rdb_threads.h | 8 ++++---- storage/rocksdb/rdb_utils.h | 8 ++++---- 18 files changed, 54 insertions(+), 53 deletions(-) diff --git a/storage/rocksdb/event_listener.cc b/storage/rocksdb/event_listener.cc index 2da77a16f684..9ea5d1e54a19 100644 --- a/storage/rocksdb/event_listener.cc +++ b/storage/rocksdb/event_listener.cc @@ -22,8 +22,8 @@ #include /* MySQL includes */ -#include -#include +#include "my_global.h" +#include "mysql/plugin.h" /* MyRocks includes */ #include "./ha_rocksdb.h" diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index a5a8caf3e901..c3675e19586f 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -33,15 +33,15 @@ #include /* MySQL includes */ -#include "./debug_sync.h" -#include "./my_bit.h" -#include "./my_stacktrace.h" -#include "./my_sys.h" -#include "./sql_audit.h" -#include "./sql_table.h" -#include -#include -#include +#include "debug_sync.h" +#include "my_bit.h" +#include "my_stacktrace.h" +#include "my_sys.h" +#include "mysql/psi/mysql_table.h" +#include "mysql/thread_pool_priv.h" +#include "mysys_err.h" +#include "sql_audit.h" +#include "sql_table.h" // Both MySQL and RocksDB define the same constant. To avoid compilation errors // till we make the fix in RocksDB, we'll temporary undefine it here. diff --git a/storage/rocksdb/ha_rocksdb.h b/storage/rocksdb/ha_rocksdb.h index f641fe134035..038a3336092b 100644 --- a/storage/rocksdb/ha_rocksdb.h +++ b/storage/rocksdb/ha_rocksdb.h @@ -28,13 +28,12 @@ #include /* MySQL header files */ -#include "./handler.h" /* handler */ -#include "./my_global.h" /* ulonglong */ -#include "./sql_string.h" -#include "./ib_ut0counter.h" -#include "sql_bitmap.h" -#include "my_icp.h" #include "field.h" +#include "handler.h" /* handler */ +#include "my_global.h" /* ulonglong */ +#include "my_icp.h" +#include "sql_bitmap.h" +#include "sql_string.h" /* RocksDB header files */ #include "rocksdb/cache.h" @@ -47,6 +46,7 @@ #include "rocksdb/utilities/write_batch_with_index.h" /* MyRocks header files */ +#include "./ib_ut0counter.h" #include "./rdb_comparator.h" #include "./rdb_index_merge.h" #include "./rdb_perf_context.h" diff --git a/storage/rocksdb/ha_rocksdb_proto.h b/storage/rocksdb/ha_rocksdb_proto.h index 9b8826a42b62..fd8bd9d216ed 100644 --- a/storage/rocksdb/ha_rocksdb_proto.h +++ b/storage/rocksdb/ha_rocksdb_proto.h @@ -20,7 +20,7 @@ #include /* MySQL header files */ -#include "./sql_string.h" +#include "sql_string.h" /* RocksDB includes */ #include "rocksdb/table.h" diff --git a/storage/rocksdb/logger.h b/storage/rocksdb/logger.h index ca75caf9df57..96f4df0e6c15 100644 --- a/storage/rocksdb/logger.h +++ b/storage/rocksdb/logger.h @@ -15,7 +15,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #pragma once -#include +#include "log.h" #include #include diff --git a/storage/rocksdb/properties_collector.cc b/storage/rocksdb/properties_collector.cc index 925e4b1b217e..88f293b79a4c 100644 --- a/storage/rocksdb/properties_collector.cc +++ b/storage/rocksdb/properties_collector.cc @@ -24,9 +24,9 @@ #include /* MySQL header files */ -#include "./log.h" -#include "./my_stacktrace.h" -#include "./sql_array.h" +#include "log.h" +#include "my_stacktrace.h" +#include "sql_array.h" /* MyRocks header files */ #include "./rdb_datadic.h" diff --git a/storage/rocksdb/rdb_cf_manager.h b/storage/rocksdb/rdb_cf_manager.h index 3f27747dce19..43e7af45481f 100644 --- a/storage/rocksdb/rdb_cf_manager.h +++ b/storage/rocksdb/rdb_cf_manager.h @@ -22,7 +22,7 @@ #include /* MySQL header files */ -#include "./sql_class.h" +#include "sql_class.h" /* RocksDB header files */ #include "rocksdb/db.h" diff --git a/storage/rocksdb/rdb_cf_options.cc b/storage/rocksdb/rdb_cf_options.cc index a63d8d2ab866..3e973d1e7c92 100644 --- a/storage/rocksdb/rdb_cf_options.cc +++ b/storage/rocksdb/rdb_cf_options.cc @@ -25,7 +25,7 @@ #include /* MySQL header files */ -#include "./log.h" +#include "log.h" /* RocksDB header files */ #include "rocksdb/utilities/convenience.h" diff --git a/storage/rocksdb/rdb_comparator.h b/storage/rocksdb/rdb_comparator.h index 47b83abc70a1..7982f8eb8ea1 100644 --- a/storage/rocksdb/rdb_comparator.h +++ b/storage/rocksdb/rdb_comparator.h @@ -19,7 +19,7 @@ #include /* MySQL includes */ -#include "./m_ctype.h" +#include "m_ctype.h" /* RocksDB header files */ #include "rocksdb/comparator.h" diff --git a/storage/rocksdb/rdb_datadic.cc b/storage/rocksdb/rdb_datadic.cc index 909f8b51c8a3..f87a9593da16 100644 --- a/storage/rocksdb/rdb_datadic.cc +++ b/storage/rocksdb/rdb_datadic.cc @@ -32,16 +32,16 @@ #include /* MySQL header files */ -#include "./field.h" -#include "./key.h" -#include "./m_ctype.h" -#include "./my_bit.h" -#include "./my_bitmap.h" -#include "./sql_table.h" +#include "field.h" +#include "key.h" +#include "m_ctype.h" +#include "my_bit.h" +#include "my_bitmap.h" +#include "my_stacktrace.h" +#include "sql_table.h" /* MyRocks header files */ #include "./ha_rocksdb_proto.h" -#include "./my_stacktrace.h" #include "./rdb_cf_manager.h" #include "./rdb_psi.h" #include "./rdb_utils.h" diff --git a/storage/rocksdb/rdb_i_s.cc b/storage/rocksdb/rdb_i_s.cc index 88e98600ba34..dd5764987592 100644 --- a/storage/rocksdb/rdb_i_s.cc +++ b/storage/rocksdb/rdb_i_s.cc @@ -22,8 +22,9 @@ #include /* MySQL header files */ -#include -#include +#include "sql_string.h" /* for now this must violate clang-format style as it */ + /* is needed before sql_show.h */ +#include "sql_show.h" /* RocksDB header files */ #include "rocksdb/compaction_filter.h" diff --git a/storage/rocksdb/rdb_index_merge.h b/storage/rocksdb/rdb_index_merge.h index 6e53663160a3..55ea2653d169 100644 --- a/storage/rocksdb/rdb_index_merge.h +++ b/storage/rocksdb/rdb_index_merge.h @@ -17,9 +17,9 @@ #pragma once /* MySQL header files */ -#include "../sql/log.h" -#include "./handler.h" /* handler */ -#include "./my_global.h" /* ulonglong */ +#include "handler.h" /* handler */ +#include "log.h" +#include "my_global.h" /* ulonglong */ /* C++ standard header files */ #include diff --git a/storage/rocksdb/rdb_mutex_wrapper.h b/storage/rocksdb/rdb_mutex_wrapper.h index ccb3355aa2b4..0bb3d26ec712 100644 --- a/storage/rocksdb/rdb_mutex_wrapper.h +++ b/storage/rocksdb/rdb_mutex_wrapper.h @@ -24,7 +24,7 @@ #include /* MySQL header files */ -#include "./my_sys.h" +#include "my_sys.h" #include "mysql/plugin.h" /* RocksDB header files */ diff --git a/storage/rocksdb/rdb_perf_context.h b/storage/rocksdb/rdb_perf_context.h index 40d83c794ea5..483e35d48bf0 100644 --- a/storage/rocksdb/rdb_perf_context.h +++ b/storage/rocksdb/rdb_perf_context.h @@ -22,9 +22,9 @@ #include /* MySQL header files */ -#include "./handler.h" -#include -#include +#include "handler.h" +#include "my_global.h" +#include "my_io_perf.h" namespace myrocks { diff --git a/storage/rocksdb/rdb_psi.cc b/storage/rocksdb/rdb_psi.cc index 94570debffa7..4f38d888ae65 100644 --- a/storage/rocksdb/rdb_psi.cc +++ b/storage/rocksdb/rdb_psi.cc @@ -23,7 +23,7 @@ #include "./rdb_psi.h" /* MySQL header files */ -#include +#include "mysql/psi/mysql_stage.h" namespace myrocks { diff --git a/storage/rocksdb/rdb_psi.h b/storage/rocksdb/rdb_psi.h index fc2f66e1ff7c..a0e5745d1653 100644 --- a/storage/rocksdb/rdb_psi.h +++ b/storage/rocksdb/rdb_psi.h @@ -18,9 +18,9 @@ #define _rdb_psi_h_ /* MySQL header files */ -#include -#include -#include +#include "my_global.h" +#include "my_thread.h" +#include "mysql/psi/psi.h" /* MyRocks header files */ #include "./rdb_utils.h" diff --git a/storage/rocksdb/rdb_threads.h b/storage/rocksdb/rdb_threads.h index a7c1aeed4a80..eb1eae1ec0b5 100644 --- a/storage/rocksdb/rdb_threads.h +++ b/storage/rocksdb/rdb_threads.h @@ -21,10 +21,10 @@ #include /* MySQL includes */ -#include "./my_global.h" -#include "./my_thread.h" -#include -#include +#include "my_global.h" +#include "my_thread.h" +#include "mysql/psi/mysql_table.h" +#include "mysql/thread_pool_priv.h" /* MyRocks header files */ #include "./rdb_utils.h" diff --git a/storage/rocksdb/rdb_utils.h b/storage/rocksdb/rdb_utils.h index 414696d8965f..3fc5195b7e0f 100644 --- a/storage/rocksdb/rdb_utils.h +++ b/storage/rocksdb/rdb_utils.h @@ -22,10 +22,10 @@ #include /* MySQL header files */ -#include "../sql/log.h" -#include "./my_stacktrace.h" -#include "./sql_string.h" -#include "./sql_regex.h" +#include "log.h" +#include "my_stacktrace.h" +#include "sql_regex.h" +#include "sql_string.h" /* RocksDB header files */ #include "rocksdb/slice.h" From 1360d72618c23ebc7da50b75082daedcb2da5353 Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Wed, 11 Apr 2018 16:27:57 -0700 Subject: [PATCH 0992/1221] PS-4215 : Convert Rdb_open_tables_map use of HASH to use std::unordered - In prep for 8.0, removed MySQL HASH and replaced with much simpler std::unordered_map. --- storage/rocksdb/ha_rocksdb.cc | 108 ++++++++-------------------------- 1 file changed, 25 insertions(+), 83 deletions(-) diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index c3675e19586f..cdbcd207c4a2 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -203,32 +203,12 @@ static int rocksdb_compact_column_family(THD *const thd, namespace // anonymous namespace = not visible outside this source file { -const ulong TABLE_HASH_SIZE = 32; - struct Rdb_open_tables_map { /* Hash table used to track the handlers of open tables */ - my_core::HASH m_hash; + std::unordered_map m_hash; /* The mutex used to protect the hash table */ mutable mysql_mutex_t m_mutex; - void init_hash(void) { -#ifdef HAVE_PSI_INTERFACE - (void)my_hash_init(&m_hash, my_core::system_charset_info, TABLE_HASH_SIZE, - 0, 0, (my_hash_get_key)Rdb_open_tables_map::get_hash_key, - nullptr, 0, rdb_open_tables_memory_key); -#else - (void)my_hash_init(&m_hash, my_core::system_charset_info, TABLE_HASH_SIZE, - 0, 0, (my_hash_get_key)Rdb_open_tables_map::get_hash_key, - nullptr, 0, PSI_NOT_INSTRUMENTED); -#endif - } - - void free_hash(void) { my_hash_free(&m_hash); } - - static uchar *get_hash_key(Rdb_table_handler *const table_handler, - size_t *const length, - my_bool not_used MY_ATTRIBUTE((__unused__))); - Rdb_table_handler *get_table_handler(const char *const table_name); void release_table_handler(Rdb_table_handler *const table_handler); @@ -1681,20 +1661,6 @@ rdb_get_rocksdb_write_options(my_core::THD *const thd) { return opt; } -/////////////////////////////////////////////////////////////////////////////////////////// - -/** - @brief - Function we use in the creation of our hash to get key. -*/ - -uchar *Rdb_open_tables_map::get_hash_key(Rdb_table_handler *const table_handler, - size_t *const length, my_bool not_used - MY_ATTRIBUTE((__unused__))) { - *length = table_handler->m_table_name_length; - return reinterpret_cast(table_handler->m_table_name); -} - /* Drop index thread's control */ @@ -3914,7 +3880,6 @@ static int rocksdb_init_func(void *const p) { mysql_mutex_init(rdb_sysvars_psi_mutex_key, &rdb_sysvars_mutex, MY_MUTEX_INIT_FAST); - rdb_open_tables.init_hash(); Rdb_transaction::init_mutex(); rocksdb_hton->state = SHOW_OPTION_YES; @@ -3987,7 +3952,6 @@ static int rocksdb_init_func(void *const p) { // mmap_reads and direct_reads are both on. (NO_LINT_DEBUG) sql_print_error("RocksDB: Can't enable both use_direct_reads " "and allow_mmap_reads\n"); - rdb_open_tables.free_hash(); DBUG_RETURN(HA_EXIT_FAILURE); } @@ -4016,7 +3980,6 @@ static int rocksdb_init_func(void *const p) { sql_print_error("RocksDB: Unable to use direct io in rocksdb-datadir:" "(%s)", check_status.getState()); - rdb_open_tables.free_hash(); DBUG_RETURN(HA_EXIT_FAILURE); } } @@ -4027,7 +3990,6 @@ static int rocksdb_init_func(void *const p) { sql_print_error("RocksDB: Can't enable both " "use_direct_io_for_flush_and_compaction and " "allow_mmap_writes\n"); - rdb_open_tables.free_hash(); DBUG_RETURN(HA_EXIT_FAILURE); } @@ -4036,7 +3998,6 @@ static int rocksdb_init_func(void *const p) { // NO_LINT_DEBUG sql_print_error("RocksDB: rocksdb_flush_log_at_trx_commit needs to be 0 " "to use allow_mmap_writes"); - rdb_open_tables.free_hash(); DBUG_RETURN(HA_EXIT_FAILURE); } @@ -4062,9 +4023,7 @@ static int rocksdb_init_func(void *const p) { sql_print_information( "RocksDB: assuming that we're creating a new database"); } else { - rdb_open_tables.free_hash(); rdb_log_status_error(status, "Error listing column families"); - rdb_open_tables.free_hash(); DBUG_RETURN(HA_EXIT_FAILURE); } } else @@ -4122,13 +4081,11 @@ static int rocksdb_init_func(void *const p) { // NO_LINT_DEBUG sql_print_error("RocksDB: Persistent cache returned error: (%s)", status.getState()); - rdb_open_tables.free_hash(); DBUG_RETURN(HA_EXIT_FAILURE); } rocksdb_tbl_options->persistent_cache = pcache; } else if (strlen(rocksdb_persistent_cache_path)) { sql_print_error("RocksDB: Must specify rocksdb_persistent_cache_size_mb"); - rdb_open_tables.free_hash(); DBUG_RETURN(HA_EXIT_FAILURE); } @@ -4138,7 +4095,6 @@ static int rocksdb_init_func(void *const p) { rocksdb_override_cf_options)) { // NO_LINT_DEBUG sql_print_error("RocksDB: Failed to initialize CF options map."); - rdb_open_tables.free_hash(); DBUG_RETURN(HA_EXIT_FAILURE); } @@ -4188,7 +4144,6 @@ static int rocksdb_init_func(void *const p) { if (!status.ok()) { rdb_log_status_error( status, "Compatibility check against existing database options failed"); - rdb_open_tables.free_hash(); DBUG_RETURN(HA_EXIT_FAILURE); } @@ -4197,7 +4152,6 @@ static int rocksdb_init_func(void *const p) { if (!status.ok()) { rdb_log_status_error(status, "Error opening instance"); - rdb_open_tables.free_hash(); DBUG_RETURN(HA_EXIT_FAILURE); } cf_manager.init(std::move(cf_options_map), &cf_handles); @@ -4205,14 +4159,12 @@ static int rocksdb_init_func(void *const p) { if (dict_manager.init(rdb, &cf_manager)) { // NO_LINT_DEBUG sql_print_error("RocksDB: Failed to initialize data dictionary."); - rdb_open_tables.free_hash(); DBUG_RETURN(HA_EXIT_FAILURE); } if (ddl_manager.init(&dict_manager, &cf_manager, rocksdb_validate_tables)) { // NO_LINT_DEBUG sql_print_error("RocksDB: Failed to initialize DDL manager."); - rdb_open_tables.free_hash(); DBUG_RETURN(HA_EXIT_FAILURE); } @@ -4243,7 +4195,6 @@ static int rocksdb_init_func(void *const p) { if (!status.ok()) { rdb_log_status_error(status, "Error enabling compaction"); - rdb_open_tables.free_hash(); DBUG_RETURN(HA_EXIT_FAILURE); } @@ -4256,7 +4207,6 @@ static int rocksdb_init_func(void *const p) { if (err != 0) { sql_print_error("RocksDB: Couldn't start the background thread: (errno=%d)", err); - rdb_open_tables.free_hash(); DBUG_RETURN(HA_EXIT_FAILURE); } @@ -4269,7 +4219,6 @@ static int rocksdb_init_func(void *const p) { if (err != 0) { sql_print_error("RocksDB: Couldn't start the drop index thread: (errno=%d)", err); - rdb_open_tables.free_hash(); DBUG_RETURN(HA_EXIT_FAILURE); } @@ -4284,7 +4233,6 @@ static int rocksdb_init_func(void *const p) { if (err != 0) { // NO_LINT_DEBUG sql_print_error("RocksDB: Couldn't initialize error messages"); - rdb_open_tables.free_hash(); DBUG_RETURN(HA_EXIT_FAILURE); } @@ -4347,13 +4295,12 @@ static int rocksdb_done_func(void *const p) { sql_print_error("RocksDB: Couldn't stop the index thread: (errno=%d)", err); } - if (rdb_open_tables.m_hash.records) { + if (rdb_open_tables.m_hash.size()) { // Looks like we are getting unloaded and yet we have some open tables // left behind. error = 1; } - rdb_open_tables.free_hash(); mysql_mutex_destroy(&rdb_open_tables.m_mutex); mysql_mutex_destroy(&rdb_sysvars_mutex); @@ -4455,27 +4402,31 @@ static inline bool is_valid(rocksdb::Iterator *scan_it) { Rdb_table_handler * Rdb_open_tables_map::get_table_handler(const char *const table_name) { - Rdb_table_handler *table_handler; - uint length; - char *tmp_name; DBUG_ASSERT(table_name != nullptr); - length = (uint)strlen(table_name); + + const std::string s_table_name(table_name); // First, look up the table in the hash map. RDB_MUTEX_LOCK_CHECK(m_mutex); - if (!(table_handler = reinterpret_cast(my_hash_search( - &m_hash, reinterpret_cast(table_name), length)))) { + Rdb_table_handler *table_handler = nullptr; + const auto &it = m_hash.find(s_table_name); + if (it != m_hash.end()) { + table_handler = it->second; + } else { // Since we did not find it in the hash map, attempt to create and add it // to the hash map. + char *tmp_name; #ifdef HAVE_PSI_INTERFACE - if (!(table_handler = static_cast(my_multi_malloc( - rdb_handler_memory_key, MYF(MY_WME | MY_ZEROFILL), &table_handler, - sizeof(*table_handler), &tmp_name, length + 1, NullS)))) { + if (!(table_handler = static_cast( + my_multi_malloc(rdb_handler_memory_key, MYF(MY_WME | MY_ZEROFILL), + &table_handler, sizeof(*table_handler), &tmp_name, + s_table_name.length() + 1, NullS)))) { #else - if (!(table_handler = static_cast(my_multi_malloc( - PSI_NOT_INSTRUMENTED, MYF(MY_WME | MY_ZEROFILL), &table_handler, - sizeof(*table_handler), &tmp_name, length + 1, NullS)))) { + if (!(table_handler = static_cast( + my_multi_malloc(PSI_NOT_INSTRUMENTED, MYF(MY_WME | MY_ZEROFILL), + &table_handler, sizeof(*table_handler), &tmp_name, + s_table_name.length() + 1, NullS)))) { #endif // Allocating a new Rdb_table_handler and a new table name failed. RDB_MUTEX_UNLOCK_CHECK(m_mutex); @@ -4483,16 +4434,11 @@ Rdb_open_tables_map::get_table_handler(const char *const table_name) { } table_handler->m_ref_count = 0; - table_handler->m_table_name_length = length; + table_handler->m_table_name_length = s_table_name.length(); table_handler->m_table_name = tmp_name; - my_stpmov(table_handler->m_table_name, table_name); + my_stpmov(table_handler->m_table_name, s_table_name.c_str()); - if (my_hash_insert(&m_hash, reinterpret_cast(table_handler))) { - // Inserting into the hash map failed. - RDB_MUTEX_UNLOCK_CHECK(m_mutex); - my_free(table_handler); - return nullptr; - } + m_hash.insert({s_table_name, table_handler}); thr_lock_init(&table_handler->m_thr_lock); table_handler->m_io_perf_read.init(); @@ -4510,18 +4456,15 @@ std::vector rdb_get_open_table_names(void) { } std::vector Rdb_open_tables_map::get_table_names(void) const { - ulong i; const Rdb_table_handler *table_handler; std::vector names; RDB_MUTEX_LOCK_CHECK(m_mutex); - for (i = 0; (table_handler = reinterpret_cast( - my_hash_const_element(&m_hash, i))); - i++) { + for (const auto &it : m_hash) { + table_handler = it.second; DBUG_ASSERT(table_handler != nullptr); names.push_back(table_handler->m_table_name); } - DBUG_ASSERT(i == m_hash.records); RDB_MUTEX_UNLOCK_CHECK(m_mutex); return names; @@ -4793,10 +4736,9 @@ void Rdb_open_tables_map::release_table_handler( DBUG_ASSERT(table_handler != nullptr); DBUG_ASSERT(table_handler->m_ref_count > 0); if (!--table_handler->m_ref_count) { - // Last rereference was released. Tear down the hash entry. const auto ret MY_ATTRIBUTE((__unused__)) = - my_hash_delete(&m_hash, reinterpret_cast(table_handler)); - DBUG_ASSERT(!ret); // the hash entry must actually be found and deleted + m_hash.erase(std::string(table_handler->m_table_name)); + DBUG_ASSERT(ret == 1); my_core::thr_lock_delete(&table_handler->m_thr_lock); my_free(table_handler); } From 80d19655b51d36a0d84938efc7b5508ec298aa1b Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Wed, 11 Apr 2018 16:28:26 -0700 Subject: [PATCH 0993/1221] PS-4216 : Convert Rdb_ddl_manager HASH to std::unordered_map - In prep for 8.0, removed MySQL HASH and replaced with much simpler std::unordered_map. --- storage/rocksdb/rdb_datadic.cc | 81 ++++++++++------------------------ storage/rocksdb/rdb_datadic.h | 3 +- 2 files changed, 26 insertions(+), 58 deletions(-) diff --git a/storage/rocksdb/rdb_datadic.cc b/storage/rocksdb/rdb_datadic.cc index f87a9593da16..b44611b69de6 100644 --- a/storage/rocksdb/rdb_datadic.cc +++ b/storage/rocksdb/rdb_datadic.cc @@ -3532,31 +3532,6 @@ GL_INDEX_ID Rdb_tbl_def::get_autoincr_gl_index_id() { return GL_INDEX_ID(); } -/* - Static function of type my_hash_get_key that gets invoked by - the m_ddl_hash object of type my_core::HASH. - It manufactures a key (db+table name in our case) from a record - (Rdb_tbl_def in our case). -*/ -const uchar *Rdb_ddl_manager::get_hash_key(Rdb_tbl_def *const rec, - size_t *const length, - my_bool not_used - MY_ATTRIBUTE((__unused__))) { - const std::string &dbname_tablename = rec->full_tablename(); - *length = dbname_tablename.size(); - return reinterpret_cast(dbname_tablename.c_str()); -} - -/* - Static function of type void (*my_hash_free_element_func_t)(void*) that gets - invoked by the m_ddl_hash object of type my_core::HASH. - It deletes a record (Rdb_tbl_def in our case). -*/ -void Rdb_ddl_manager::free_hash_elem(void *const data) { - Rdb_tbl_def *elem = reinterpret_cast(data); - delete elem; -} - void Rdb_ddl_manager::erase_index_num(const GL_INDEX_ID &gl_index_id) { m_index_num_to_keydef.erase(gl_index_id); } @@ -3858,21 +3833,8 @@ bool Rdb_ddl_manager::validate_schemas(void) { bool Rdb_ddl_manager::init(Rdb_dict_manager *const dict_arg, Rdb_cf_manager *const cf_manager, const uint32_t &validate_tables) { - const ulong TABLE_HASH_SIZE = 32; m_dict = dict_arg; mysql_rwlock_init(0, &m_rwlock); -#ifdef HAVE_PSI_INTERFACE - (void)my_hash_init(&m_ddl_hash, - /*system_charset_info*/ &my_charset_bin, TABLE_HASH_SIZE, - 0, 0, (my_hash_get_key)Rdb_ddl_manager::get_hash_key, - Rdb_ddl_manager::free_hash_elem, 0, - rdb_datadic_memory_key); -#else - (void)my_hash_init(&m_ddl_hash, - /*system_charset_info*/ &my_charset_bin, TABLE_HASH_SIZE, - 0, 0, (my_hash_get_key)Rdb_ddl_manager::get_hash_key, - Rdb_ddl_manager::free_hash_elem, 0, PSI_NOT_INSTRUMENTED); -#endif /* Read the data dictionary and populate the hash */ uchar ddl_entry[Rdb_key_def::INDEX_NUMBER_SIZE]; @@ -4027,19 +3989,21 @@ bool Rdb_ddl_manager::init(Rdb_dict_manager *const dict_arg, Rdb_tbl_def *Rdb_ddl_manager::find(const std::string &table_name, const bool &lock) { + Rdb_tbl_def *ret = nullptr; + if (lock) { mysql_rwlock_rdlock(&m_rwlock); } - Rdb_tbl_def *const rec = reinterpret_cast(my_hash_search( - &m_ddl_hash, reinterpret_cast(table_name.c_str()), - table_name.size())); + const auto &it = m_ddl_hash.find(table_name); + if (it != m_ddl_hash.end()) + ret = it->second; if (lock) { mysql_rwlock_unlock(&m_rwlock); } - return rec; + return ret; } // this is a safe version of the find() function below. It acquires a read @@ -4204,8 +4168,6 @@ int Rdb_ddl_manager::put_and_write(Rdb_tbl_def *const tbl, Tracked by https://github.com/facebook/mysql-5.6/issues/33 */ int Rdb_ddl_manager::put(Rdb_tbl_def *const tbl, const bool &lock) { - Rdb_tbl_def *rec; - my_bool result; const std::string &dbname_tablename = tbl->full_tablename(); if (lock) @@ -4213,12 +4175,12 @@ int Rdb_ddl_manager::put(Rdb_tbl_def *const tbl, const bool &lock) { // We have to do this find because 'tbl' is not yet in the list. We need // to find the one we are replacing ('rec') - rec = find(dbname_tablename, false); - if (rec) { - // this will free the old record. - my_hash_delete(&m_ddl_hash, reinterpret_cast(rec)); + const auto &it = m_ddl_hash.find(dbname_tablename); + if (it != m_ddl_hash.end()) { + delete it->second; + m_ddl_hash.erase(it); } - result = my_hash_insert(&m_ddl_hash, reinterpret_cast(tbl)); + m_ddl_hash.insert({dbname_tablename, tbl}); for (uint keyno = 0; keyno < tbl->m_key_count; keyno++) { m_index_num_to_keydef[tbl->m_key_descr_arr[keyno]->get_gl_index_id()] = @@ -4227,7 +4189,7 @@ int Rdb_ddl_manager::put(Rdb_tbl_def *const tbl, const bool &lock) { if (lock) mysql_rwlock_unlock(&m_rwlock); - return result; + return 0; } void Rdb_ddl_manager::remove(Rdb_tbl_def *const tbl, @@ -4249,8 +4211,11 @@ void Rdb_ddl_manager::remove(Rdb_tbl_def *const tbl, const rocksdb::Slice tkey((char *)buf, pos); m_dict->delete_key(batch, tkey); - /* The following will also delete the object: */ - my_hash_delete(&m_ddl_hash, reinterpret_cast(tbl)); + const auto &it = m_ddl_hash.find(dbname_tablename); + if (it != m_ddl_hash.end()) { + delete it->second; + m_ddl_hash.erase(it); + } if (lock) mysql_rwlock_unlock(&m_rwlock); @@ -4303,14 +4268,17 @@ bool Rdb_ddl_manager::rename(const std::string &from, const std::string &to, } void Rdb_ddl_manager::cleanup() { - my_hash_free(&m_ddl_hash); + for (const auto &it : m_ddl_hash) + delete it.second; + + m_ddl_hash.clear(); + mysql_rwlock_destroy(&m_rwlock); m_sequence.cleanup(); } int Rdb_ddl_manager::scan_for_tables(Rdb_tables_scanner *const tables_scanner) { int i, ret; - Rdb_tbl_def *rec; DBUG_ASSERT(tables_scanner != nullptr); @@ -4319,9 +4287,8 @@ int Rdb_ddl_manager::scan_for_tables(Rdb_tables_scanner *const tables_scanner) { ret = 0; i = 0; - while (( - rec = reinterpret_cast(my_hash_element(&m_ddl_hash, i)))) { - ret = tables_scanner->add_table(rec); + for (const auto &it : m_ddl_hash) { + ret = tables_scanner->add_table(it.second); if (ret) break; i++; diff --git a/storage/rocksdb/rdb_datadic.h b/storage/rocksdb/rdb_datadic.h index aa6bd05dc2ac..8e7c02e42b46 100644 --- a/storage/rocksdb/rdb_datadic.h +++ b/storage/rocksdb/rdb_datadic.h @@ -1071,7 +1071,8 @@ interface Rdb_tables_scanner { class Rdb_ddl_manager { Rdb_dict_manager *m_dict = nullptr; - my_core::HASH m_ddl_hash; // Contains Rdb_tbl_def elements + // Contains Rdb_tbl_def elements + std::unordered_map m_ddl_hash; // Maps index id to std::map> m_index_num_to_keydef; From b936e992afb6fe1f295ad03ffa9d96a8ba67f3bc Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Thu, 12 Apr 2018 10:34:31 -0700 Subject: [PATCH 0994/1221] PS-4217 : Make read free rpl optional at compile time - Introduced new macro flag ROCKSDB_INCLUDE_RFR that when defined, causes all RFR functionality and variables to be compiled in, otherwise it is compiled out. --- storage/rocksdb/ha_rocksdb.cc | 22 ++++++++++++++++++++-- storage/rocksdb/ha_rocksdb.h | 7 ++++--- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index cdbcd207c4a2..af0975d144b5 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -19,6 +19,7 @@ #endif #define MYSQL_SERVER 1 +#define ROCKSDB_INCLUDE_RFR 1 /* The C++ file's header */ #include "./ha_rocksdb.h" @@ -670,11 +671,13 @@ static MYSQL_THDVAR_BOOL( "update and delete", nullptr, nullptr, FALSE); +#if defined(ROCKSDB_INCLUDE_RFR) && ROCKSDB_INCLUDE_RFR static MYSQL_THDVAR_STR( read_free_rpl_tables, PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_MEMALLOC, "Regex that describes set of tables that will use read-free replication " "on the slave (i.e. not lookup a row during replication)", nullptr, nullptr, ""); +#endif // defined(ROCKSDB_INCLUDE_RFR) && ROCKSDB_INCLUDE_RFR static MYSQL_SYSVAR_BOOL( rpl_skip_tx_api, rpl_skip_tx_api_var, PLUGIN_VAR_RQCMDARG, @@ -1519,7 +1522,9 @@ static struct st_mysql_sys_var *rocksdb_system_variables[] = { MYSQL_SYSVAR(bulk_load_allow_unsorted), MYSQL_SYSVAR(trace_sst_api), MYSQL_SYSVAR(commit_in_the_middle), +#if defined(ROCKSDB_INCLUDE_RFR) && ROCKSDB_INCLUDE_RFR MYSQL_SYSVAR(read_free_rpl_tables), +#endif // defined(ROCKSDB_INCLUDE_RFR) && ROCKSDB_INCLUDE_RFR MYSQL_SYSVAR(rpl_skip_tx_api), MYSQL_SYSVAR(bulk_load_size), MYSQL_SYSVAR(merge_buf_size), @@ -4765,8 +4770,13 @@ ha_rocksdb::ha_rocksdb(my_core::handlerton *const hton, m_sk_packed_tuple_old(nullptr), m_dup_sk_packed_tuple(nullptr), m_dup_sk_packed_tuple_old(nullptr), m_pack_buffer(nullptr), m_lock_rows(RDB_LOCK_NONE), m_keyread_only(FALSE), m_encoder_arr(nullptr), - m_row_checksums_checked(0), m_in_rpl_delete_rows(false), - m_in_rpl_update_rows(false) {} + m_row_checksums_checked(0) +#if defined(ROCKSDB_INCLUDE_RFR) && ROCKSDB_INCLUDE_RFR + , + m_in_rpl_delete_rows(false), m_in_rpl_update_rows(false) +#endif // defined(ROCKSDB_INCLUDE_RFR) && ROCKSDB_INCLUDE_RFR +{ +} static const char *ha_rocksdb_exts[] = {NullS}; @@ -5727,6 +5737,7 @@ void ha_rocksdb::free_key_buffers() { m_scan_it_upper_bound = nullptr; } +#if defined(ROCKSDB_INCLUDE_RFR) && ROCKSDB_INCLUDE_RFR void ha_rocksdb::set_use_read_free_rpl(const char *const whitelist) { DBUG_ASSERT(whitelist != nullptr); @@ -5748,6 +5759,7 @@ void ha_rocksdb::set_use_read_free_rpl(const char *const whitelist) { m_use_read_free_rpl = regex_handler.match(m_tbl_def->base_tablename()); } +#endif // defined(ROCKSDB_INCLUDE_RFR) && ROCKSDB_INCLUDE_RFR /** @return @@ -5848,8 +5860,10 @@ int ha_rocksdb::open(const char *const name, int mode, uint test_if_locked) { /* Index block size in MyRocks: used by MySQL in query optimization */ stats.block_size = rocksdb_tbl_options->block_size; +#if defined(ROCKSDB_INCLUDE_RFR) && ROCKSDB_INCLUDE_RFR /* Determine at open whether we can use Read Free Replication or not */ set_use_read_free_rpl(THDVAR(ha_thd(), read_free_rpl_tables)); +#endif // defined(ROCKSDB_INCLUDE_RFR) && ROCKSDB_INCLUDE_RFR DBUG_RETURN(HA_EXIT_SUCCESS); } @@ -8391,12 +8405,14 @@ int ha_rocksdb::write_row(uchar *const buf) { for Read Free Replication. */ void ha_rocksdb::set_last_rowkey(const uchar *const old_data) { +#if defined(ROCKSDB_INCLUDE_RFR) && ROCKSDB_INCLUDE_RFR if (old_data && use_read_free_rpl()) { const int old_pk_size = m_pk_descr->pack_record( table, m_pack_buffer, old_data, m_pk_packed_tuple, nullptr, false); m_last_rowkey.copy((const char *)m_pk_packed_tuple, old_pk_size, &my_charset_bin); } +#endif // defined(ROCKSDB_INCLUDE_RFR) && ROCKSDB_INCLUDE_RFR } int ha_rocksdb::get_pk_for_update(struct update_row_info *const row_info) { @@ -12656,6 +12672,7 @@ static void rocksdb_set_update_cf_options( void rdb_queue_save_stats_request() { rdb_bg_thread.request_save_stats(); } +#if defined(ROCKSDB_INCLUDE_RFR) && ROCKSDB_INCLUDE_RFR void ha_rocksdb::rpl_before_delete_rows() { DBUG_ENTER_FUNC(); @@ -12701,6 +12718,7 @@ bool ha_rocksdb::use_read_free_rpl() { DBUG_RETURN((m_in_rpl_delete_rows || m_in_rpl_update_rows) && !has_hidden_pk(table) && m_use_read_free_rpl); } +#endif // defined(ROCKSDB_INCLUDE_RFR) && ROCKSDB_INCLUDE_RFR double ha_rocksdb::read_time(uint index, uint ranges, ha_rows rows) { DBUG_ENTER_FUNC(); diff --git a/storage/rocksdb/ha_rocksdb.h b/storage/rocksdb/ha_rocksdb.h index 038a3336092b..c7d6b7388e84 100644 --- a/storage/rocksdb/ha_rocksdb.h +++ b/storage/rocksdb/ha_rocksdb.h @@ -1341,18 +1341,19 @@ class ha_rocksdb : public my_core::handler { void set_use_read_free_rpl(const char *const whitelist); -public: +#if defined(ROCKSDB_INCLUDE_RFR) && ROCKSDB_INCLUDE_RFR + public: virtual void rpl_before_delete_rows() override; virtual void rpl_after_delete_rows() override; virtual void rpl_before_update_rows() override; virtual void rpl_after_update_rows() override; virtual bool use_read_free_rpl(); -private: + private: /* Flags tracking if we are inside different replication operation */ bool m_in_rpl_delete_rows; bool m_in_rpl_update_rows; - +#endif // defined(ROCKSDB_INCLUDE_RFR) && ROCKSDB_INCLUDE_RFR }; /* From d300489d5b5fb39799275003a6e52ad3259a1507 Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Thu, 12 Apr 2018 16:17:13 -0700 Subject: [PATCH 0995/1221] PS-4218 : Make .frm/schema validation optional at compile time - Introduced new macro flag ROCKSDB_INCLUDE_VALIDATE_TABLES that when defined, causes rocksdb_validate_tables functionality and variable to be compiled in, otherwise it is compiled out. --- storage/rocksdb/ha_rocksdb.cc | 14 ++++++++++++++ storage/rocksdb/rdb_datadic.cc | 12 ++++++++++++ storage/rocksdb/rdb_datadic.h | 10 ++++++++++ 3 files changed, 36 insertions(+) diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index af0975d144b5..696f74f5a03a 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -481,7 +481,10 @@ static uint32_t rocksdb_seconds_between_stat_computes = 3600; static long long rocksdb_compaction_sequential_deletes = 0l; static long long rocksdb_compaction_sequential_deletes_window = 0l; static long long rocksdb_compaction_sequential_deletes_file_size = 0l; +#if defined(ROCKSDB_INCLUDE_VALIDATE_TABLES) && ROCKSDB_INCLUDE_VALIDATE_TABLES static uint32_t rocksdb_validate_tables = 1; +#endif // defined(ROCKSDB_INCLUDE_VALIDATE_TABLES) && + // ROCKSDB_INCLUDE_VALIDATE_TABLES static char *rocksdb_datadir= nullptr; static uint32_t rocksdb_table_stats_sampling_pct = RDB_DEFAULT_TBL_STATS_SAMPLE_PCT; static my_bool rocksdb_enable_bulk_load_api = TRUE; @@ -1442,6 +1445,7 @@ static MYSQL_THDVAR_BOOL(verify_row_debug_checksums, PLUGIN_VAR_RQCMDARG, "Verify checksums when reading index/table records", nullptr, nullptr, false /* default value */); +#if defined(ROCKSDB_INCLUDE_VALIDATE_TABLES) && ROCKSDB_INCLUDE_VALIDATE_TABLES static MYSQL_SYSVAR_UINT( validate_tables, rocksdb_validate_tables, PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY, @@ -1449,6 +1453,8 @@ static MYSQL_SYSVAR_UINT( "1 means verify and fail on error, and 2 means verify but continue", nullptr, nullptr, 1 /* default value */, 0 /* min value */, 2 /* max value */, 0); +#endif // defined(ROCKSDB_INCLUDE_VALIDATE_TABLES) && + // ROCKSDB_INCLUDE_VALIDATE_TABLES static MYSQL_SYSVAR_STR(datadir, rocksdb_datadir, PLUGIN_VAR_OPCMDARG | PLUGIN_VAR_READONLY, @@ -1645,7 +1651,10 @@ static struct st_mysql_sys_var *rocksdb_system_variables[] = { MYSQL_SYSVAR(store_row_debug_checksums), MYSQL_SYSVAR(verify_row_debug_checksums), +#if defined(ROCKSDB_INCLUDE_VALIDATE_TABLES) && ROCKSDB_INCLUDE_VALIDATE_TABLES MYSQL_SYSVAR(validate_tables), +#endif // defined(ROCKSDB_INCLUDE_VALIDATE_TABLES) && + // ROCKSDB_INCLUDE_VALIDATE_TABLES MYSQL_SYSVAR(table_stats_sampling_pct), MYSQL_SYSVAR(large_prefix), @@ -4167,7 +4176,12 @@ static int rocksdb_init_func(void *const p) { DBUG_RETURN(HA_EXIT_FAILURE); } +#if defined(ROCKSDB_INCLUDE_VALIDATE_TABLES) && ROCKSDB_INCLUDE_VALIDATE_TABLES if (ddl_manager.init(&dict_manager, &cf_manager, rocksdb_validate_tables)) { +#else + if (ddl_manager.init(&dict_manager, &cf_manager)) { +#endif // defined(ROCKSDB_INCLUDE_VALIDATE_TABLES) && + // ROCKSDB_INCLUDE_VALIDATE_TABLES // NO_LINT_DEBUG sql_print_error("RocksDB: Failed to initialize DDL manager."); DBUG_RETURN(HA_EXIT_FAILURE); diff --git a/storage/rocksdb/rdb_datadic.cc b/storage/rocksdb/rdb_datadic.cc index b44611b69de6..6f4244459508 100644 --- a/storage/rocksdb/rdb_datadic.cc +++ b/storage/rocksdb/rdb_datadic.cc @@ -3554,6 +3554,7 @@ void Rdb_ddl_manager::remove_uncommitted_keydefs( mysql_rwlock_unlock(&m_rwlock); } +#if defined(ROCKSDB_INCLUDE_VALIDATE_TABLES) && ROCKSDB_INCLUDE_VALIDATE_TABLES namespace // anonymous namespace = not visible outside this source file { struct Rdb_validate_tbls : public Rdb_tables_scanner { @@ -3829,10 +3830,18 @@ bool Rdb_ddl_manager::validate_schemas(void) { return !has_errors; } +#endif // defined(ROCKSDB_INCLUDE_VALIDATE_TABLES) && + // ROCKSDB_INCLUDE_VALIDATE_TABLES +#if defined(ROCKSDB_INCLUDE_VALIDATE_TABLES) && ROCKSDB_INCLUDE_VALIDATE_TABLES bool Rdb_ddl_manager::init(Rdb_dict_manager *const dict_arg, Rdb_cf_manager *const cf_manager, const uint32_t &validate_tables) { +#else +bool Rdb_ddl_manager::init(Rdb_dict_manager *const dict_arg, + Rdb_cf_manager *const cf_manager) { +#endif // defined(ROCKSDB_INCLUDE_VALIDATE_TABLES) && + // ROCKSDB_INCLUDE_VALIDATE_TABLES m_dict = dict_arg; mysql_rwlock_init(0, &m_rwlock); @@ -3949,6 +3958,7 @@ bool Rdb_ddl_manager::init(Rdb_dict_manager *const dict_arg, i++; } +#if defined(ROCKSDB_INCLUDE_VALIDATE_TABLES) && ROCKSDB_INCLUDE_VALIDATE_TABLES /* If validate_tables is greater than 0 run the validation. Only fail the initialzation if the setting is 1. If the setting is 2 we continue. @@ -3968,6 +3978,8 @@ bool Rdb_ddl_manager::init(Rdb_dict_manager *const dict_arg, return true; } } +#endif // defined(ROCKSDB_INCLUDE_VALIDATE_TABLES) && + // ROCKSDB_INCLUDE_VALIDATE_TABLES // index ids used by applications should not conflict with // data dictionary index ids diff --git a/storage/rocksdb/rdb_datadic.h b/storage/rocksdb/rdb_datadic.h index 8e7c02e42b46..5c12cdbd2269 100644 --- a/storage/rocksdb/rdb_datadic.h +++ b/storage/rocksdb/rdb_datadic.h @@ -15,6 +15,8 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #pragma once +#define ROCKSDB_INCLUDE_VALIDATE_TABLES 1 + /* C++ standard header files */ #include #include @@ -1096,8 +1098,13 @@ class Rdb_ddl_manager { Rdb_ddl_manager() {} /* Load the data dictionary from on-disk storage */ +#if defined(ROCKSDB_INCLUDE_VALIDATE_TABLES) && ROCKSDB_INCLUDE_VALIDATE_TABLES bool init(Rdb_dict_manager *const dict_arg, Rdb_cf_manager *const cf_manager, const uint32_t &validate_tables); +#else + bool init(Rdb_dict_manager *const dict_arg, Rdb_cf_manager *const cf_manager); +#endif // defined(ROCKSDB_INCLUDE_VALIDATE_TABLES) && + // ROCKSDB_INCLUDE_VALIDATE_TABLES void cleanup(); @@ -1141,9 +1148,12 @@ class Rdb_ddl_manager { my_bool not_used MY_ATTRIBUTE((unused))); static void free_hash_elem(void *const data); +#if defined(ROCKSDB_INCLUDE_VALIDATE_TABLES) && ROCKSDB_INCLUDE_VALIDATE_TABLES bool validate_schemas(); bool validate_auto_incr(); +#endif // defined(ROCKSDB_INCLUDE_VALIDATE_TABLES) && + // ROCKSDB_INCLUDE_VALIDATE_TABLES }; /* From fc801cc8b766357439ca9d6c6b70e9f04875f906 Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Fri, 13 Apr 2018 07:35:23 -0700 Subject: [PATCH 0996/1221] PS-4219 : MyRocks passes O_TEMPORARY to create_temp_file - On Linux platforms, O_TEMPORARY was defined as 0 in my_global.h. create_temp_file uses mkstemp which creates a file at the os level that is removed once closed. 8.0 recognizes this and removes the re-definition of O_TEMPORARY. So, we should just remove this flag in all cases as it is useless and does not exist anymore in 8.0. See commit https://github.com/mysql/mysql-server/commit/a1dfc5db4303dc3a28b6c6d5b008158aad6026c6 --- storage/rocksdb/rdb_index_merge.cc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/storage/rocksdb/rdb_index_merge.cc b/storage/rocksdb/rdb_index_merge.cc index f44965f544c8..49d7d0f22c96 100644 --- a/storage/rocksdb/rdb_index_merge.cc +++ b/storage/rocksdb/rdb_index_merge.cc @@ -109,8 +109,7 @@ int Rdb_index_merge::merge_file_create() { } else { char filename[FN_REFLEN]; fd = create_temp_file(filename, m_tmpfile_path, "myrocks", - O_CREAT | O_EXCL | O_RDWR | O_TEMPORARY, - MYF(MY_WME)); + O_CREAT | O_EXCL | O_RDWR, MYF(MY_WME)); if (fd >= 0) { #ifndef __WIN__ /* From 6c7862451befe029cac25367dc51cca429bc508a Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Fri, 13 Apr 2018 09:45:06 -0700 Subject: [PATCH 0997/1221] PS-4220 : MyRocks uses incorrect interface for registering mutex and rwlock keys with PSI - Changed use of PSI_server->register_[mutex|rwlock] to mysq_[mutex|rwlock]_register - Corrected/cleaned psi includes --- storage/rocksdb/rdb_psi.cc | 10 ++-------- storage/rocksdb/rdb_psi.h | 4 +++- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/storage/rocksdb/rdb_psi.cc b/storage/rocksdb/rdb_psi.cc index 4f38d888ae65..018b8ca9d63d 100644 --- a/storage/rocksdb/rdb_psi.cc +++ b/storage/rocksdb/rdb_psi.cc @@ -22,9 +22,6 @@ /* The C++ file's header */ #include "./rdb_psi.h" -/* MySQL header files */ -#include "mysql/psi/mysql_stage.h" - namespace myrocks { /* @@ -96,14 +93,11 @@ void init_rocksdb_psi_keys() { const char *const category = "rocksdb"; int count; - if (PSI_server == nullptr) - return; - count = array_elements(all_rocksdb_mutexes); - PSI_server->register_mutex(category, all_rocksdb_mutexes, count); + mysql_mutex_register(category, all_rocksdb_mutexes, count); count = array_elements(all_rocksdb_rwlocks); - PSI_server->register_rwlock(category, all_rocksdb_rwlocks, count); + mysql_rwlock_register(category, all_rocksdb_rwlocks, count); count = array_elements(all_rocksdb_conds); // TODO Disabling PFS for conditions due to the bug diff --git a/storage/rocksdb/rdb_psi.h b/storage/rocksdb/rdb_psi.h index a0e5745d1653..1c8c07a9dd13 100644 --- a/storage/rocksdb/rdb_psi.h +++ b/storage/rocksdb/rdb_psi.h @@ -20,7 +20,9 @@ /* MySQL header files */ #include "my_global.h" #include "my_thread.h" -#include "mysql/psi/psi.h" +#include "mysql/psi/mysql_memory.h" +#include "mysql/psi/mysql_stage.h" +#include "mysql/psi/mysql_thread.h" /* MyRocks header files */ #include "./rdb_utils.h" From 143ffa33374475f8f88b0f2ec8faf4bf307debb8 Mon Sep 17 00:00:00 2001 From: Nuno Carvalho Date: Wed, 27 Jun 2018 19:29:21 +0200 Subject: [PATCH 0998/1221] BUG#26306357: MTR SOMETIME DOES NOT WRITE TEST NAME TO THE LOGS ON WINDOWS Workaround for BUG#26306357. --- .../group_replication/tests/mtr/t/gr_applier_error-slave.opt | 1 + .../plugin/group_replication/tests/mtr/t/gr_applier_error.test | 3 +-- 2 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 rapid/plugin/group_replication/tests/mtr/t/gr_applier_error-slave.opt diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_applier_error-slave.opt b/rapid/plugin/group_replication/tests/mtr/t/gr_applier_error-slave.opt new file mode 100644 index 000000000000..78e7e5c1b5c2 --- /dev/null +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_applier_error-slave.opt @@ -0,0 +1 @@ +--no-console --log_error=$MYSQLTEST_VARDIR/tmp/gr_applier_error.2.err diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_applier_error.test b/rapid/plugin/group_replication/tests/mtr/t/gr_applier_error.test index c7e8a4db2eec..259bdcf59870 100644 --- a/rapid/plugin/group_replication/tests/mtr/t/gr_applier_error.test +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_applier_error.test @@ -69,8 +69,7 @@ INSERT INTO t1 VALUES (1); --echo # --echo # Step-6: Grep for the expected error in server log. --echo # ---let $assert_file= $MYSQLTEST_VARDIR/log/mysqld.2.err ---let $assert_only_after = CURRENT_TEST: group_replication.gr_applier_error +--let $assert_file= $MYSQLTEST_VARDIR/tmp/gr_applier_error.2.err --let $assert_count = 1 --let $assert_select = failed executing transaction '.*'; Could not execute Write_rows event on table test.t1; Duplicate entry '1' for key 'PRIMARY', Error_code: 1062; handler error HA_ERR_FOUND_DUPP_KEY, Error_code: 1062 --let $assert_text = Found the expected error in group_replication_applier channel. From 64867604216390323f723183df66c346b3f50108 Mon Sep 17 00:00:00 2001 From: Satya Bodapati Date: Fri, 15 Jun 2018 12:08:06 +0530 Subject: [PATCH 0999/1221] PS-3702: LP#1690588: ALTER TABLE is slow in 5.7 when the number of dirty pages is high Problem: -------- ALTER TABLE ADD INDEX in 5.7 uses bottom-up index build(BulkInsert). It skips redo logging and flushes all dirty pages dirtied by ALTER. FlushObserver is used which flushes and waits until dirty pages are flushed and written to disk. There are two iterations of flush list as part of ALTER: 1. For PFS monitoring, an estimate of dirty pages is required. (buf_flush_get_dirty_pages_count()) 2. To do the actual flushing of dirty pages of ALTER When there are lot of dirty pages, this iteration takes significant amount of time. Fix: ---- 1. Remove one iteration of flush list of all buffer pool instances. i.e the iteration used for estimate. 2. Note the LSN at which Observer is created. When mtr commits with an Observer, as part of commit, dirty pages are added to flush list. Count the dirty pages that are dirted before Observer (newest_modification < observer_lsn) and also the new blocks that are dirtied. This count serves as a very good estimate 3. Make buf_flush_get_dirty_pages_count() debug only function. This is no longer required in release builds. --- storage/innobase/buf/buf0flu.cc | 21 +++++++++++++++++---- storage/innobase/include/buf0flu.h | 20 ++++++++++++++++++++ storage/innobase/include/buf0flu.ic | 4 ++++ 3 files changed, 41 insertions(+), 4 deletions(-) diff --git a/storage/innobase/buf/buf0flu.cc b/storage/innobase/buf/buf0flu.cc index 90cc4737fc80..4d7947ef54b8 100644 --- a/storage/innobase/buf/buf0flu.cc +++ b/storage/innobase/buf/buf0flu.cc @@ -3819,6 +3819,7 @@ buf_flush_validate( #endif /* UNIV_DEBUG || UNIV_BUF_DEBUG */ #endif /* !UNIV_HOTBACKUP */ +#ifdef UNIV_DEBUG /******************************************************************//** Check if there are any dirty pages that belong to a space id in the flush list in a particular buffer pool. @@ -3880,6 +3881,7 @@ buf_flush_get_dirty_pages_count( return(count); } +#endif /* UNIV_DEBUG */ /** FlushObserver constructor @param[in] space_id table space id @@ -3895,7 +3897,9 @@ FlushObserver::FlushObserver( m_space_id(space_id), m_trx(trx), m_stage(stage), - m_interrupted(false) + m_interrupted(false), + m_estimate(), + m_lsn(log_get_lsn()) { m_flushed = UT_NEW_NOKEY(std::vector(srv_buf_pool_instances)); m_removed = UT_NEW_NOKEY(std::vector(srv_buf_pool_instances)); @@ -3987,9 +3991,7 @@ FlushObserver::flush() buf_remove = BUF_REMOVE_FLUSH_WRITE; if (m_stage != NULL) { - ulint pages_to_flush = - buf_flush_get_dirty_pages_count( - m_space_id, this); + ulint pages_to_flush = get_estimate(); m_stage->begin_phase_flush(pages_to_flush); } @@ -4006,3 +4008,14 @@ FlushObserver::flush() } } } + +/** Increase the estimate of dirty pages by this observer +@param[in] block buffer pool block */ +void +FlushObserver::inc_estimate(const buf_block_t* block) +{ + if (block->page.oldest_modification == 0 + || block->page.newest_modification < m_lsn) { + os_atomic_increment_ulint(&m_estimate, 1); + } +} diff --git a/storage/innobase/include/buf0flu.h b/storage/innobase/include/buf0flu.h index 60a544b1ca9d..50a18bcc39f0 100644 --- a/storage/innobase/include/buf0flu.h +++ b/storage/innobase/include/buf0flu.h @@ -314,6 +314,7 @@ buf_flush_ready_for_flush( buf_flush_t flush_type)/*!< in: type of flush */ MY_ATTRIBUTE((warn_unused_result)); +#ifdef UNIV_DEBUG /******************************************************************//** Check if there are any dirty pages that belong to a space id in the flush list in a particular buffer pool. @@ -332,6 +333,7 @@ buf_flush_get_dirty_pages_count( /*============================*/ ulint id, /*!< in: space id to check */ FlushObserver* observer); /*!< in: flush observer to check */ +#endif /* UNIV_DEBUG */ /*******************************************************************//** Signal the page cleaner to flush and wait until it and the LRU manager clean @@ -400,6 +402,17 @@ class FlushObserver { void notify_remove( buf_pool_t* buf_pool, buf_page_t* bpage); + + /** Increase the estimate of dirty pages by this observer + @param[in] block buffer pool block */ + void inc_estimate(const buf_block_t* block); + + /** @return estimate of dirty pages to be flushed */ + ulint get_estimate() const { + os_rmb; + return(m_estimate); + } + private: /** Table space id */ ulint m_space_id; @@ -422,6 +435,13 @@ class FlushObserver { /* True if the operation was interrupted. */ bool m_interrupted; + + /* Estimate of pages to be flushed */ + ulint m_estimate; + + /** LSN at which observer started observing. This is + used to find the dirty blocks that are dirtied before Observer */ + const lsn_t m_lsn; }; #endif /* !UNIV_HOTBACKUP */ diff --git a/storage/innobase/include/buf0flu.ic b/storage/innobase/include/buf0flu.ic index d092a276f8dc..e95921fc4ec5 100644 --- a/storage/innobase/include/buf0flu.ic +++ b/storage/innobase/include/buf0flu.ic @@ -82,6 +82,10 @@ buf_flush_note_modification( mutex_enter(&block->mutex); ut_ad(block->page.newest_modification <= end_lsn); + if (observer != NULL) { + observer->inc_estimate(block); + } + block->page.newest_modification = end_lsn; /* Don't allow to set flush observer from non-null to null, From 78092b1570f2681a95984933120ce7ef048ef7e1 Mon Sep 17 00:00:00 2001 From: Pavan Naik Date: Tue, 19 Jun 2018 11:17:06 +0530 Subject: [PATCH 1000/1221] BUG#28203341: MTR: BACK-PORT THE FIX FOR BUG#28061910 TO 5.7 Fix for BUG#28061910 enables test-progress by default. Back-port this fix to 5.7 branch. Change-Id: Ia3728f83e5954021b791b7572e3d7b2833bb1df4 --- mysql-test/lib/mtr_report.pm | 17 ++++++++++------- mysql-test/mysql-test-run.pl | 14 ++++++++------ 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/mysql-test/lib/mtr_report.pm b/mysql-test/lib/mtr_report.pm index 9eca6020b31b..459d7b8d0466 100644 --- a/mysql-test/lib/mtr_report.pm +++ b/mysql-test/lib/mtr_report.pm @@ -1,5 +1,5 @@ # -*- cperl -*- -# Copyright (c) 2004, 2017, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2004, 2018, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -32,7 +32,7 @@ our @EXPORT= qw(report_option mtr_print_line mtr_print_thick_line use mtr_match; use File::Spec; use My::Platform; -use POSIX qw[ _exit ]; +use POSIX qw(_exit floor); use IO::Handle qw[ flush ]; require "mtr_io.pl"; use mtr_results; @@ -40,6 +40,7 @@ use mtr_results; my $tot_real_time= 0; my $done_percentage= 0; +my $tests_completed= 0; our $timestamp= 0; our $timediff= 0; @@ -67,9 +68,11 @@ sub _name { return $name ? $name." " : undef; } -sub _mtr_report_test_name ($) +sub _mtr_report_test_name ($$) { my $tinfo= shift; + my $done_percentage= shift; + my $tname= $tinfo->{name}; return unless defined $verbose; @@ -141,13 +144,13 @@ sub mtr_report_test ($) { { if ($tinfo->{'name'} && !$retry) { - $::remaining= $::remaining - 1; - $done_percentage = 100 - int (($::remaining * 100) / - ($::num_tests_for_report)); + $tests_completed= $tests_completed + 1; + $done_percentage= + floor(($tests_completed / $::num_tests_for_report) * 100); } } - my $test_name = _mtr_report_test_name($tinfo); + my $test_name = _mtr_report_test_name($tinfo, $done_percentage); if ($result eq 'MTR_RES_FAILED'){ diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index 50b30c4ea270..5e8bcf2d9c67 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -137,7 +137,6 @@ BEGIN my $start_only; our $num_tests_for_report; # for test-progress option -our $remaining; my $auth_plugin; # the path to the authentication test plugin @@ -284,7 +283,7 @@ END our $opt_check_testcases= 1; my $opt_mark_progress; -our $opt_test_progress; +our $opt_test_progress= 1; my $opt_max_connections; our $opt_report_times= 0; @@ -428,9 +427,7 @@ sub main { ####################################################################### my $num_tests= @$tests; - $num_tests_for_report = $num_tests * $opt_repeat; - $remaining= $num_tests_for_report; if ( $opt_parallel eq "auto" ) { # Try to find a suitable value for number of workers @@ -1159,7 +1156,7 @@ sub command_line_setup { 'record' => \$opt_record, 'check-testcases!' => \$opt_check_testcases, 'mark-progress' => \$opt_mark_progress, - 'test-progress' => \$opt_test_progress, + 'test-progress:1' => \$opt_test_progress, # Extra options used when starting mysqld 'mysqld=s' => \@opt_extra_mysqld_opt, @@ -1439,6 +1436,10 @@ sub command_line_setup { } } + if ($opt_test_progress != 0 and $opt_test_progress != 1) { + mtr_error("Invalid value '$opt_test_progress' for option 'test-progress'."); + } + # disable syslog / EventLog in normal (non-bootstrap) operation. push(@opt_extra_mysqld_opt, "--log-syslog=0"); @@ -7324,7 +7325,8 @@ ($) record TESTNAME (Re)genereate the result file for TESTNAME check-testcases Check testcases for sideeffects mark-progress Log line number and elapsed time to .progress - test-progress Print the percentage of tests completed + test-progress[={0|1}] Print the percentage of tests completed. This setting + is enabled by default. Options that pass on options (these may be repeated) From 06f91f5a03e89d897981a77d5223e9db111200e0 Mon Sep 17 00:00:00 2001 From: Venkatesh Duggirala Date: Fri, 29 Jun 2018 11:48:20 +0530 Subject: [PATCH 1001/1221] Bug#27373559 COMMIT ORDER DEADLOCK + RETRY LOGIC IS NOT CONSIDERING TRX ERROR CASES Post push fix: Test script is failing on windows pb2 run due to a known issue with MTR + PERL issue (not printing current test name in test run log file). --- ...rpl_mts_slave_preserve_commit_order_deadlock_error-slave.opt | 1 + .../t/rpl_mts_slave_preserve_commit_order_deadlock_error.test | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 mysql-test/suite/rpl/t/rpl_mts_slave_preserve_commit_order_deadlock_error-slave.opt diff --git a/mysql-test/suite/rpl/t/rpl_mts_slave_preserve_commit_order_deadlock_error-slave.opt b/mysql-test/suite/rpl/t/rpl_mts_slave_preserve_commit_order_deadlock_error-slave.opt new file mode 100644 index 000000000000..13af78657748 --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_mts_slave_preserve_commit_order_deadlock_error-slave.opt @@ -0,0 +1 @@ +--no-console --log_error=$MYSQLTEST_VARDIR/tmp/rpl_mts_slave_preserve_commit_order_deadlock_error.2.err diff --git a/mysql-test/suite/rpl/t/rpl_mts_slave_preserve_commit_order_deadlock_error.test b/mysql-test/suite/rpl/t/rpl_mts_slave_preserve_commit_order_deadlock_error.test index 8d02f7671eae..019b5f0baa5d 100644 --- a/mysql-test/suite/rpl/t/rpl_mts_slave_preserve_commit_order_deadlock_error.test +++ b/mysql-test/suite/rpl/t/rpl_mts_slave_preserve_commit_order_deadlock_error.test @@ -167,7 +167,7 @@ COMMIT; --echo # 3.13 Check that worker 2 did not *retry* transaction-2 --echo # before throwing ER_DUP_ENTRY error (non-temporary error). --echo # ---let $assert_file= $MYSQLTEST_VARDIR/log/mysqld.2.err +--let $assert_file= $MYSQLTEST_VARDIR/tmp/rpl_mts_slave_preserve_commit_order_deadlock_error.2.err --let $assert_only_after = CURRENT_TEST: rpl.rpl_mts_slave_preserve_commit_order_deadlock_error --let $assert_count = 1 --let $assert_select = Error 'Duplicate entry '1' for key 'PRIMARY'' on query From 22e99fcb34712e710c6fe086d44e3643479f9e76 Mon Sep 17 00:00:00 2001 From: Arun Kuruvila Date: Fri, 29 Jun 2018 12:09:18 +0530 Subject: [PATCH 1002/1221] Bug#27799513: POTENTIAL DOUBLE FREE OR CORRUPTION OF HEAP INFO (HP_INFO) Description:- Server crashes due to memory overflow. Analysis:- Bytes for storing key length is wrongly set for HEAP tables. Fix:- Bytes used to store the key length is properly set inside "heap_create()". --- storage/heap/hp_create.c | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/storage/heap/hp_create.c b/storage/heap/hp_create.c index 93928cd479e6..d32a69dd630e 100644 --- a/storage/heap/hp_create.c +++ b/storage/heap/hp_create.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -92,7 +92,14 @@ int heap_create(const char *name, HP_CREATE_INFO *create_info, /* fall_through */ case HA_KEYTYPE_VARTEXT1: keyinfo->flag|= HA_VAR_LENGTH_KEY; - length+= 2; + /* + For BTREE algorithm, key length, greater than or equal + to 255, is packed on 3 bytes. + */ + if (keyinfo->algorithm == HA_KEY_ALG_BTREE) + length+= size_to_store_key_length(keyinfo->seg[j].length); + else + length+= 2; /* Save number of bytes used to store length */ keyinfo->seg[j].bit_start= 1; break; @@ -101,7 +108,14 @@ int heap_create(const char *name, HP_CREATE_INFO *create_info, /* fall_through */ case HA_KEYTYPE_VARTEXT2: keyinfo->flag|= HA_VAR_LENGTH_KEY; - length+= 2; + /* + For BTREE algorithm, key length, greater than or equal + to 255, is packed on 3 bytes. + */ + if (keyinfo->algorithm == HA_KEY_ALG_BTREE) + length+= size_to_store_key_length(keyinfo->seg[j].length); + else + length+= 2; /* Save number of bytes used to store length */ keyinfo->seg[j].bit_start= 2; /* From cd3b8d41566e2a5ccc9331dc3235a97f1e16e358 Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Fri, 29 Jun 2018 14:27:44 +0530 Subject: [PATCH 1003/1221] From fadc507dd88c30c50207f528054fd1db2dac5bf4 Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Fri, 29 Jun 2018 14:56:56 +0530 Subject: [PATCH 1004/1221] From 564219fabf8ee4fdd0e971135772959c0e2fe8ed Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Fri, 29 Jun 2018 13:02:59 +0200 Subject: [PATCH 1005/1221] PS-4524: innodb-optimize-keys fails when variable name is a prefix Fixed by checking lengths of compared strings (column names). --- client/mysqldump.c | 13 ++-- ...cona_mysqldump_innodb_optimize_keys.result | 72 +++++++++++++++++++ ...ercona_mysqldump_innodb_optimize_keys.test | 40 +++++++++++ 3 files changed, 121 insertions(+), 4 deletions(-) diff --git a/client/mysqldump.c b/client/mysqldump.c index 3acaff119923..fac190fc6aea 100644 --- a/client/mysqldump.c +++ b/client/mysqldump.c @@ -2544,6 +2544,7 @@ static const char *parse_quoted_identifier(const char *str, considered indexed for such key specification. */ static my_bool contains_autoinc_column(const char *autoinc_column, + ssize_t autoinc_column_len, const char *keydef, key_type_t type) { @@ -2570,7 +2571,8 @@ static my_bool contains_autoinc_column(const char *autoinc_column, secondary key. */ if ((type == KEY_TYPE_PRIMARY || idnum != 1) && - !strncmp(autoinc_column, from + 1, to - from - 1)) + to - from - 1 == autoinc_column_len && + !strncmp(autoinc_column, from + 1, autoinc_column_len)) return TRUE; /* @@ -2612,6 +2614,7 @@ static void skip_secondary_keys(char *create_str, my_bool has_pk) char *last_comma= NULL; my_bool pk_processed= FALSE; char *autoinc_column= NULL; + ssize_t autoinc_column_len= 0; my_bool has_autoinc= FALSE; key_type_t type; my_bool keys_processed= FALSE; @@ -2645,8 +2648,9 @@ static void skip_secondary_keys(char *create_str, my_bool has_pk) else type= KEY_TYPE_NONE; - has_autoinc= (type != KEY_TYPE_NONE) ? - contains_autoinc_column(autoinc_column, ptr, type) : FALSE; + has_autoinc= (type != KEY_TYPE_NONE) + ? contains_autoinc_column(autoinc_column, autoinc_column_len, ptr, type) + : FALSE; /* Is it a secondary index definition? */ if (c == '\n' && !has_autoinc && @@ -2726,7 +2730,8 @@ static void skip_secondary_keys(char *create_str, my_bool has_pk) { DBUG_ASSERT(autoinc_column == NULL); - autoinc_column= my_strndup(ptr + 1, end - ptr - 1, MYF(MY_FAE)); + autoinc_column_len= end - ptr - 1; + autoinc_column= my_strndup(ptr + 1, autoinc_column_len, MYF(MY_FAE)); } } diff --git a/mysql-test/r/percona_mysqldump_innodb_optimize_keys.result b/mysql-test/r/percona_mysqldump_innodb_optimize_keys.result index b319afcb8b6b..4505af7110d3 100644 --- a/mysql-test/r/percona_mysqldump_innodb_optimize_keys.result +++ b/mysql-test/r/percona_mysqldump_innodb_optimize_keys.result @@ -738,3 +738,75 @@ UNLOCK TABLES; ###################################### DROP TABLE t1; +CREATE TABLE `t1` ( +`prefix` int(5) NOT NULL, +`prefix_autoinc` int(5) NOT NULL AUTO_INCREMENT, +UNIQUE KEY `prefix_autoinc` (`prefix_autoinc`), +PRIMARY KEY (`prefix`) +) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1,1), (2,2), (3,3); +INSERT INTO t1(`prefix`) VALUES (4); +CREATE TABLE `t2` ( +`prefix` int(5) NOT NULL, +`prefix_autoinc` int(5) NOT NULL AUTO_INCREMENT, +PRIMARY KEY (`prefix`), +UNIQUE KEY `prefix_autoinc` (`prefix_autoinc`) +) ENGINE=InnoDB; +INSERT INTO t2 VALUES (1,10), (2,11), (3,12); +INSERT INTO t2(`prefix`) VALUES (13); +###################################### + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; +DROP TABLE IF EXISTS `t1`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `t1` ( + `prefix` int(5) NOT NULL, + `prefix_autoinc` int(5) NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`prefix`), + UNIQUE KEY `prefix_autoinc` (`prefix_autoinc`) +) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +LOCK TABLES `t1` WRITE; +/*!40000 ALTER TABLE `t1` DISABLE KEYS */; +INSERT INTO `t1` VALUES (1,1),(2,2),(3,3),(4,4); +/*!40000 ALTER TABLE `t1` ENABLE KEYS */; +UNLOCK TABLES; +DROP TABLE IF EXISTS `t2`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `t2` ( + `prefix` int(5) NOT NULL, + `prefix_autoinc` int(5) NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`prefix`), + UNIQUE KEY `prefix_autoinc` (`prefix_autoinc`) +) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +LOCK TABLES `t2` WRITE; +/*!40000 ALTER TABLE `t2` DISABLE KEYS */; +INSERT INTO `t2` VALUES (1,10),(2,11),(3,12),(13,13); +/*!40000 ALTER TABLE `t2` ENABLE KEYS */; +UNLOCK TABLES; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + +###################################### +DROP TABLE t1, t2; diff --git a/mysql-test/t/percona_mysqldump_innodb_optimize_keys.test b/mysql-test/t/percona_mysqldump_innodb_optimize_keys.test index beffcfb50d82..43e706b1f4e9 100644 --- a/mysql-test/t/percona_mysqldump_innodb_optimize_keys.test +++ b/mysql-test/t/percona_mysqldump_innodb_optimize_keys.test @@ -392,6 +392,46 @@ INSERT INTO t1(`id`) VALUES (4); DROP TABLE t1; +############################################################################# +# Bug PS-4524: Error occurs only if a variable name is a prefix of the +# name of the second variable with AUTO_INCREMENT +############################################################################# + +CREATE TABLE `t1` ( + `prefix` int(5) NOT NULL, + `prefix_autoinc` int(5) NOT NULL AUTO_INCREMENT, + UNIQUE KEY `prefix_autoinc` (`prefix_autoinc`), + PRIMARY KEY (`prefix`) +) ENGINE=InnoDB; + +INSERT INTO t1 VALUES (1,1), (2,2), (3,3); +INSERT INTO t1(`prefix`) VALUES (4); + +CREATE TABLE `t2` ( + `prefix` int(5) NOT NULL, + `prefix_autoinc` int(5) NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`prefix`), + UNIQUE KEY `prefix_autoinc` (`prefix_autoinc`) +) ENGINE=InnoDB; + +INSERT INTO t2 VALUES (1,10), (2,11), (3,12); +INSERT INTO t2(`prefix`) VALUES (13); + + +--exec $MYSQL_DUMP --skip-comments --innodb-optimize-keys test t1 t2 >$file + +--echo ###################################### +--cat_file $file +--echo ###################################### + +# Check that the resulting dump can be imported back + +--exec $MYSQL test < $file + +--remove_file $file + +DROP TABLE t1, t2; + # Wait till we reached the initial number of concurrent sessions --source include/wait_until_count_sessions.inc From c071e8586bfb9effc6daa616954eb4aa6c5b9e79 Mon Sep 17 00:00:00 2001 From: Venkatesh Duggirala Date: Fri, 29 Jun 2018 19:01:11 +0530 Subject: [PATCH 1006/1221] Bug#27610678 SEMI-SYNC REPLICATION DOESN'T WORK FOR MINUTES AFTER RESTART REPLICATION Problem: ======== When semisync master is busy in reading acknowledgements from one semisync slave, adding another semisync slave to the master is getting delayed. Analysis: ========= In Ack_receiver::run(), server is holding m_mutex while it is reading acknowledgements from the ack receiver socket. The same mutex is required to add/remove a semisync slave to the Master. So if server is busy in reading the acknowledgements from the ack receiver socket, then add/remove a semisync will be delayed until m_mutex is released by Ack_receiver::run(). Fix: ==== Adjust acknowledgment reading logic in Ack_receiver::run() function in such a way that m_mutex is not held while reading for the acknowledgments from the ack receiver socket. --- .../r/rpl_semi_sync_add_remove_slaves.result | 119 +++++++++++ ...rpl_semi_sync_add_remove_slaves-master.opt | 1 + .../rpl_semi_sync_add_remove_slaves-slave.opt | 1 + .../rpl/t/rpl_semi_sync_add_remove_slaves.cnf | 59 ++++++ .../t/rpl_semi_sync_add_remove_slaves.test | 190 ++++++++++++++++++ .../semisync/semisync_master_ack_receiver.cc | 29 ++- .../semisync/semisync_master_ack_receiver.h | 5 +- .../semisync_master_socket_listener.h | 37 +++- 8 files changed, 415 insertions(+), 26 deletions(-) create mode 100644 mysql-test/suite/rpl/r/rpl_semi_sync_add_remove_slaves.result create mode 100644 mysql-test/suite/rpl/t/rpl_semi_sync_add_remove_slaves-master.opt create mode 100644 mysql-test/suite/rpl/t/rpl_semi_sync_add_remove_slaves-slave.opt create mode 100644 mysql-test/suite/rpl/t/rpl_semi_sync_add_remove_slaves.cnf create mode 100644 mysql-test/suite/rpl/t/rpl_semi_sync_add_remove_slaves.test diff --git a/mysql-test/suite/rpl/r/rpl_semi_sync_add_remove_slaves.result b/mysql-test/suite/rpl/r/rpl_semi_sync_add_remove_slaves.result new file mode 100644 index 000000000000..f82ff49835e8 --- /dev/null +++ b/mysql-test/suite/rpl/r/rpl_semi_sync_add_remove_slaves.result @@ -0,0 +1,119 @@ +include/rpl_init.inc [topology=1->2, 1->3, 1->4, 1->5, 1->6, 1->7, 1->8, 1->9] +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +# +# 1. Initial data. +# +CREATE TABLE t1(c1 INT); +include/rpl_sync.inc +# +# 2. Install semisync on all the 9 servers. +# +[connection server_1] +CALL mtr.add_suppression("Semi-sync master failed on net_flush.*"); +include/install_semisync_master.inc +[connection server_2] +CALL mtr.add_suppression("Semi-sync slave net_flush.*"); +include/install_semisync_slave.inc +[connection server_3] +CALL mtr.add_suppression("Semi-sync slave net_flush.*"); +include/install_semisync_slave.inc +[connection server_4] +CALL mtr.add_suppression("Semi-sync slave net_flush.*"); +include/install_semisync_slave.inc +[connection server_5] +CALL mtr.add_suppression("Semi-sync slave net_flush.*"); +include/install_semisync_slave.inc +[connection server_6] +CALL mtr.add_suppression("Semi-sync slave net_flush.*"); +include/install_semisync_slave.inc +[connection server_7] +CALL mtr.add_suppression("Semi-sync slave net_flush.*"); +include/install_semisync_slave.inc +[connection server_8] +CALL mtr.add_suppression("Semi-sync slave net_flush.*"); +include/install_semisync_slave.inc +[connection server_9] +CALL mtr.add_suppression("Semi-sync slave net_flush.*"); +include/install_semisync_slave.inc +# +# 3. Make Master aware of 8 semisync slaves. +# +[connection server1_1] +SET GLOBAL rpl_semi_sync_master_wait_for_slave_count = 8; +# +# 4. Insert 5000 tuples in background using 10 parallel connections. +# +# +# 5. While the insert operations are going in the background, keep +# adding/removing semisync slaves randomly. +# +# +# 6. Add all 8 semisync slaves back to Master +# (if they were disconnected, in above step). +# +# +# 7. Make sure the data is synced on Master without any issues. +# +[connection server_1] +include/rpl_sync.inc +# +# 8. Check on all servers semisync is enabled after the +# the experiment and then uninstall semisync pluging +# from it. +# +[connection server_9] +include/assert.inc [ should be 1] +include/uninstall_semisync_slave.inc +[connection server_8] +include/assert.inc [ should be 1] +include/uninstall_semisync_slave.inc +[connection server_7] +include/assert.inc [ should be 1] +include/uninstall_semisync_slave.inc +[connection server_6] +include/assert.inc [ should be 1] +include/uninstall_semisync_slave.inc +[connection server_5] +include/assert.inc [ should be 1] +include/uninstall_semisync_slave.inc +[connection server_4] +include/assert.inc [ should be 1] +include/uninstall_semisync_slave.inc +[connection server_3] +include/assert.inc [ should be 1] +include/uninstall_semisync_slave.inc +[connection server_2] +include/assert.inc [ should be 1] +include/uninstall_semisync_slave.inc +[connection server_1] +include/assert.inc [ should be 1] +include/uninstall_semisync_master.inc +# +# 9. Cleanup time. +# +[connection server_1] +DROP TABLE t1; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_semi_sync_add_remove_slaves-master.opt b/mysql-test/suite/rpl/t/rpl_semi_sync_add_remove_slaves-master.opt new file mode 100644 index 000000000000..58029d28acec --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_semi_sync_add_remove_slaves-master.opt @@ -0,0 +1 @@ +$SEMISYNC_PLUGIN_OPT diff --git a/mysql-test/suite/rpl/t/rpl_semi_sync_add_remove_slaves-slave.opt b/mysql-test/suite/rpl/t/rpl_semi_sync_add_remove_slaves-slave.opt new file mode 100644 index 000000000000..58029d28acec --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_semi_sync_add_remove_slaves-slave.opt @@ -0,0 +1 @@ +$SEMISYNC_PLUGIN_OPT diff --git a/mysql-test/suite/rpl/t/rpl_semi_sync_add_remove_slaves.cnf b/mysql-test/suite/rpl/t/rpl_semi_sync_add_remove_slaves.cnf new file mode 100644 index 000000000000..546452029ffe --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_semi_sync_add_remove_slaves.cnf @@ -0,0 +1,59 @@ +!include ../my.cnf + +[mysqld.1] +log-slave-updates +server_id=1 + +[mysqld.2] +log-slave-updates +server_id=2 + +[mysqld.3] +log-slave-updates +server_id=3 + +[mysqld.4] +log-slave-updates +server_id=4 + +[mysqld.5] +log-slave-updates +server_id=5 + +[mysqld.6] +log-slave-updates +server_id=6 + +[mysqld.7] +log-slave-updates +server_id=7 + +[mysqld.8] +log-slave-updates +server_id=8 + +[mysqld.9] +log-slave-updates +server_id=9 + +[ENV] +SERVER_MYPORT_3= @mysqld.3.port +SERVER_MYSOCK_3= @mysqld.3.socket + +SERVER_MYPORT_4= @mysqld.4.port +SERVER_MYSOCK_4= @mysqld.4.socket + +SERVER_MYPORT_5= @mysqld.5.port +SERVER_MYSOCK_5= @mysqld.5.socket + +SERVER_MYPORT_6= @mysqld.6.port +SERVER_MYSOCK_6= @mysqld.6.socket + +SERVER_MYPORT_7= @mysqld.7.port +SERVER_MYSOCK_7= @mysqld.7.socket + +SERVER_MYPORT_8= @mysqld.8.port +SERVER_MYSOCK_8= @mysqld.8.socket + +SERVER_MYPORT_9= @mysqld.9.port +SERVER_MYSOCK_9= @mysqld.9.socket diff --git a/mysql-test/suite/rpl/t/rpl_semi_sync_add_remove_slaves.test b/mysql-test/suite/rpl/t/rpl_semi_sync_add_remove_slaves.test new file mode 100644 index 000000000000..498357650864 --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_semi_sync_add_remove_slaves.test @@ -0,0 +1,190 @@ +#==== Purpose ==== +# +# This test script purpose is to check semisync replication +# behaviour when there are semisync slaves getting added and +# removed while dml changes are happening. +# +#==== Implementation ==== +# +# 1) Install semisync on one Master and 8 Slaves. +# 2) Using mysqlslap, keep inserting data in background on Master. +# 3) While the DMLs are going on, keep adding/removing semisync slaves. +# 4) At the end of the step-3, check that the data is synced without any +# issues. +# 5) Check semisync is still enabled on Master and all slaves. +# +#==== References ==== +# +# Bug#27610678 SEMI-SYNC REPLICATION DOESN'T WORK FOR MINUTES AFTER RESTART +# REPLICATION +# +#======== +# +# 9 servers + 5000 inserts involved in test. Hence marking it as big-test. +# +--source include/big_test.inc +--source include/not_group_replication_plugin.inc +--source include/have_binlog_format_statement.inc +--source include/have_debug.inc + +# +# One Master and 8 Slaves in the semi sync topology. +# +--let rpl_topology=1->2, 1->3, 1->4, 1->5, 1->6, 1->7, 1->8, 1->9 +--source include/rpl_init.inc + +--echo # +--echo # 1. Initial data. +--echo # +CREATE TABLE t1(c1 INT); +--source include/rpl_sync.inc + +--echo # +--echo # 2. Install semisync on all the 9 servers. +--echo # +--let $i= 1 +while ($i < 10) +{ + --let $rpl_connection_name= server_$i + --source include/rpl_connection.inc + if ( $i == 1) + { + --connect(server1_1, localhost,root,,,$MASTER_MYPORT) + CALL mtr.add_suppression("Semi-sync master failed on net_flush.*"); + --source include/install_semisync_master.inc + } + if ( $i != 1 ) + { + CALL mtr.add_suppression("Semi-sync slave net_flush.*"); + --source include/install_semisync_slave.inc + } + --inc $i +} + +--echo # +--echo # 3. Make Master aware of 8 semisync slaves. +--echo # +--let $rpl_connection_name= server1_1 +--source include/rpl_connection.inc +--let $slaves = 8 +--eval SET GLOBAL rpl_semi_sync_master_wait_for_slave_count = $slaves + +--echo # +--echo # 4. Insert 5000 tuples in background using 10 parallel connections. +--echo # +--exec_in_background $MYSQL_SLAP --create-schema=test --delimiter=";" --iterations=500 --query="INSERT INTO t1 values (1)" --concurrency=10 --silent 2>&1 + +--echo # +--echo # 5. While the insert operations are going in the background, keep +--echo # adding/removing semisync slaves randomly. +--echo # +--let $rpl_connection_silent = 1 +--let $include_silent= 1 +--disable_result_log +--disable_query_log +--let $rpl_debug= 0 +--let $iter= 1 +while ( $iter < 50 ) +{ + # Random server_id generator ( server_id will between [2-9] + --let $server_id=`SELECT FLOOR(2 + ((RAND() * 100) % 8))` + --let $rpl_connection_name= server_$server_id + --source include/rpl_connection.inc + --let $service_state= `SELECT service_state FROM performance_schema.replication_connection_status` + if ($service_state == 'ON') + { + # If the replication state is ON, bring it down. + --source include/stop_slave.inc + --let $rpl_connection_name= server1_1 + --source include/rpl_connection.inc + # Adjust rpl_semi_sync_master_wait_for_slave_count variable. + --dec $slaves + --eval SET GLOBAL rpl_semi_sync_master_wait_for_slave_count = $slaves + } + if ($service_state == 'OFF') + { + # If the replication state is OFF, bring it up. + --source include/start_slave.inc + --let $rpl_connection_name= server1_1 + --source include/rpl_connection.inc + # Adjust rpl_semi_sync_master_wait_for_slave_count variable. + --inc $slaves + --eval SET GLOBAL rpl_semi_sync_master_wait_for_slave_count = $slaves + } + --inc $iter + # Do it slowly while insertions on the master are happening in the background. + sleep 1; +} + +--echo # +--echo # 6. Add all 8 semisync slaves back to Master +--echo # (if they were disconnected, in above step). +--echo # +--let $iter = 2 +while ($iter <= 9) +{ + --let $rpl_connection_name= server_$iter + --source include/rpl_connection.inc + --let $service_state= `SELECT service_state FROM performance_schema.replication_connection_status` + if ($service_state == 'OFF') + { + --source include/start_slave.inc + --let $rpl_connection_name= server1_1 + --source include/rpl_connection.inc + # Adjust rpl_semi_sync_master_wait_for_slave_count variable. + --inc $slaves + --eval SET GLOBAL rpl_semi_sync_master_wait_for_slave_count = $slaves + } + --inc $iter +} +--enable_result_log +--enable_query_log +--let $rpl_connection_silent = 0 +--let $include_silent= 0 + + +--echo # +--echo # 7. Make sure the data is synced on Master without any issues. +--echo # +--let $rpl_connection_name= server_1 +--source include/rpl_connection.inc +--let $wait_timeout= 60 +--let $wait_condition= SELECT count(*) = 5000 FROM t1 +--source include/wait_condition.inc +--let $slave_timeout=600 +--source include/rpl_sync.inc + +--echo # +--echo # 8. Check on all servers semisync is enabled after the +--echo # the experiment and then uninstall semisync pluging +--echo # from it. +--echo # +--let $i= 9 +while ($i >= 1) +{ + --let $rpl_connection_name= server_$i + --source include/rpl_connection.inc + if ( $i == 1) + { + --let $assert_variable_name= rpl_semi_sync_master_enabled + --let $assert_variable_value= 1 + --source include/assert_variable.inc + --source include/uninstall_semisync_master.inc + } + if ( $i != 1 ) + { + --let $assert_variable_name= rpl_semi_sync_slave_enabled + --let $assert_variable_value= 1 + --source include/assert_variable.inc + --source include/uninstall_semisync_slave.inc + } + --dec $i +} + +--echo # +--echo # 9. Cleanup time. +--echo # +--let $rpl_connection_name= server_1 +--source include/rpl_connection.inc +DROP TABLE t1; +--source include/rpl_end.inc diff --git a/plugin/semisync/semisync_master_ack_receiver.cc b/plugin/semisync/semisync_master_ack_receiver.cc index 9cce7317da91..2233f5b2b257 100644 --- a/plugin/semisync/semisync_master_ack_receiver.cc +++ b/plugin/semisync/semisync_master_ack_receiver.cc @@ -128,7 +128,9 @@ bool Ack_receiver::add_slave(THD *thd) const char *kWho = "Ack_receiver::add_slave"; function_enter(kWho); - slave.thd= thd; + slave.thread_id= thd->thread_id(); + slave.server_id= thd->server_id; + slave.net_compress= thd->get_protocol_classic()->get_compression(); slave.vio= *thd->get_protocol_classic()->get_vio(); slave.vio.mysql_socket.m_psi= NULL; slave.vio.read_timeout= 1; @@ -163,7 +165,7 @@ void Ack_receiver::remove_slave(THD *thd) for (it= m_slaves.begin(); it != m_slaves.end(); it++) { - if (it->thd == thd) + if (it->thread_id == thd->thread_id()) { m_slaves.erase(it); m_slaves_changed= true; @@ -202,11 +204,7 @@ void Ack_receiver::run() NET net; unsigned char net_buff[REPLY_MESSAGE_MAX_LENGTH]; uint i; -#ifdef HAVE_POLL - Poll_socket_listener listener(m_slaves); -#else - Select_socket_listener listener(m_slaves); -#endif //HAVE_POLL + Socket_listener listener; sql_print_information("Starting ack receiver thread"); @@ -234,14 +232,14 @@ void Ack_receiver::run() mysql_mutex_unlock(&m_mutex); continue; } - if (!listener.init_slave_sockets()) + if (!listener.init_slave_sockets(m_slaves)) goto end; m_slaves_changed= false; } + mysql_mutex_unlock(&m_mutex); ret= listener.listen_on_sockets(); if (ret <= 0) { - mysql_mutex_unlock(&m_mutex); ret= DBUG_EVALUATE_IF("rpl_semisync_simulate_select_error", -1, ret); @@ -255,33 +253,32 @@ void Ack_receiver::run() set_stage_info(stage_reading_semi_sync_ack); i= 0; - while (i < m_slaves.size()) + while (i < listener.number_of_slave_sockets() && m_status == ST_UP) { if (listener.is_socket_active(i)) { + Slave slave_obj= listener.get_slave_obj(i); ulong len; - net.vio= &m_slaves[i].vio; + net.vio= &slave_obj.vio; /* Set compress flag. This is needed to support Slave_compress_protocol flag enabled Slaves */ - net.compress= - m_slaves[i].thd->get_protocol_classic()->get_compression(); + net.compress= slave_obj.net_compress; do { net_clear(&net, 0); len= my_net_read(&net); if (likely(len != packet_error)) - repl_semisync.reportReplyPacket(m_slaves[i].server_id(), + repl_semisync.reportReplyPacket(slave_obj.server_id, net.read_pos, len); else if (net.last_errno == ER_NET_READ_ERROR) listener.clear_socket_info(i); - } while (net.vio->has_data(net.vio)); + } while (net.vio->has_data(net.vio) && m_status == ST_UP); } i++; } - mysql_mutex_unlock(&m_mutex); } end: sql_print_information("Stopping ack receiver thread"); diff --git a/plugin/semisync/semisync_master_ack_receiver.h b/plugin/semisync/semisync_master_ack_receiver.h index 925becdf152e..c191336b8882 100644 --- a/plugin/semisync/semisync_master_ack_receiver.h +++ b/plugin/semisync/semisync_master_ack_receiver.h @@ -23,11 +23,12 @@ struct Slave { - THD *thd; + uint32_t thread_id; Vio vio; + uint server_id; + bool net_compress; my_socket sock_fd() const { return vio.mysql_socket.fd; } - uint server_id() const { return thd->server_id; } }; typedef std::vector Slave_vector; diff --git a/plugin/semisync/semisync_master_socket_listener.h b/plugin/semisync/semisync_master_socket_listener.h index b021edf926f4..9853b093d368 100644 --- a/plugin/semisync/semisync_master_socket_listener.h +++ b/plugin/semisync/semisync_master_socket_listener.h @@ -24,8 +24,7 @@ class Poll_socket_listener { public: - Poll_socket_listener(const Slave_vector &slaves) - :m_slaves(slaves) + Poll_socket_listener() { } @@ -45,8 +44,9 @@ class Poll_socket_listener m_fds[index].events= 0; } - bool init_slave_sockets() + bool init_slave_sockets(Slave_vector slaves) { + m_slaves= slaves; m_fds.clear(); for (uint i= 0; i < m_slaves.size(); i++) { @@ -57,19 +57,29 @@ class Poll_socket_listener } return true; } + uint number_of_slave_sockets() + { + return m_slaves.size(); + } + + Slave get_slave_obj(int index) + { + return m_slaves[index]; + } private: - const Slave_vector &m_slaves; + Slave_vector m_slaves; std::vector m_fds; }; +typedef class Poll_socket_listener Socket_listener; #else //NO POLL class Select_socket_listener { public: - Select_socket_listener(const Slave_vector &slaves) - :m_slaves(slaves), m_max_fd(INVALID_SOCKET) + Select_socket_listener() + :m_max_fd(INVALID_SOCKET) { } @@ -92,8 +102,9 @@ class Select_socket_listener FD_CLR(m_slaves[index].sock_fd(), &m_init_fds); } - bool init_slave_sockets() + bool init_slave_sockets(Slave_vector slaves) { + m_slaves= slaves; FD_ZERO(&m_init_fds); for (uint i= 0; i < m_slaves.size(); i++) { @@ -112,13 +123,23 @@ class Select_socket_listener } return true; } + uint number_of_slave_sockets() + { + return m_slaves.size(); + } + + Slave get_slave_obj(int index) + { + return m_slaves[index]; + } private: - const Slave_vector &m_slaves; + Slave_vector m_slaves; my_socket m_max_fd; fd_set m_init_fds; fd_set m_fds; }; +typedef class Select_socket_listener Socket_listener; #endif //HAVE_POLL #endif //SEMISYNC_MASTER_SOCKET_LISTENER From 96d5fbf162607b63ab764b17eaad0dee832c66f2 Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Fri, 29 Jun 2018 15:58:32 +0200 Subject: [PATCH 1007/1221] PS-4562: PS compilation with GCC 7.3.0 + ASAN failure --- storage/innobase/row/row0sel.c | 1 + 1 file changed, 1 insertion(+) diff --git a/storage/innobase/row/row0sel.c b/storage/innobase/row/row0sel.c index 140cfc61383a..d021ff1445fb 100644 --- a/storage/innobase/row/row0sel.c +++ b/storage/innobase/row/row0sel.c @@ -4298,6 +4298,7 @@ row_search_for_mysql( prebuilt->new_rec_locks = 1; } err = DB_SUCCESS; + break; case DB_SUCCESS: break; case DB_LOCK_WAIT: From b1cc93322fd5875dbd840b3bf2f9efabeb212036 Mon Sep 17 00:00:00 2001 From: Kailasnath Nagarkar Date: Sat, 30 Jun 2018 18:11:38 +0530 Subject: [PATCH 1008/1221] Bug #27714748: @@PARSER_MAX_MEM_SIZE DOES NOT WORK FOR ROUTINES ISSUE: parser_max_mem_size variable specifies the maximum amount of memory that should be used by the parser. Server should return error if parser requires more memory. This does not happen in case of routines. This is because of the following: The value of parser_max_mem_size is stored in thd's mem_root. While parsing SPs, an intermediate mem_root variable is used. This intermediate mem_root has default value of zero for maximum memory capacity and error reporting on reaching maximum memory utilization is disabled. Due to this, no error is reported. SOLUTION: Set value of maximum memory capacity and error reporting setting for intermediate mem_root to that of thd's maximum memory capacity and error reporting setting. --- mysql-test/r/parser.result | 6 ++++++ mysql-test/t/parser-master.opt | 1 + mysql-test/t/parser.test | 11 +++++++++++ sql/sp_head.cc | 2 ++ 4 files changed, 20 insertions(+) create mode 100644 mysql-test/t/parser-master.opt diff --git a/mysql-test/r/parser.result b/mysql-test/r/parser.result index 14e6d866e423..807a7fcfe9f8 100644 --- a/mysql-test/r/parser.result +++ b/mysql-test/r/parser.result @@ -1233,3 +1233,9 @@ Warnings: Warning 1287 '..' is deprecated and will be removed in a future release. Please use the table.column name without a dot prefix instead DROP TABLE t1, t2; # + +Bug #27714748: @@PARSER_MAX_MEM_SIZE DOES NOT WORK FOR ROUTINES + +SET parser_max_mem_size = 10000000; +ERROR HY000: Memory capacity of 10000000 bytes for 'parser_max_mem_size' exceeded. Parser bailed out for this query. +SET parser_max_mem_size = default; diff --git a/mysql-test/t/parser-master.opt b/mysql-test/t/parser-master.opt new file mode 100644 index 000000000000..6dee8ced3487 --- /dev/null +++ b/mysql-test/t/parser-master.opt @@ -0,0 +1 @@ +--max_allowed_packet=18000000 diff --git a/mysql-test/t/parser.test b/mysql-test/t/parser.test index 69d9e057185d..d60a33dbf339 100644 --- a/mysql-test/t/parser.test +++ b/mysql-test/t/parser.test @@ -1365,3 +1365,14 @@ DROP TABLE t1, t2; --echo # +--echo +--echo Bug #27714748: @@PARSER_MAX_MEM_SIZE DOES NOT WORK FOR ROUTINES +--echo + +SET parser_max_mem_size = 10000000; # minimum allowed value +--let $s = `SELECT REPEAT('x', @@parser_max_mem_size)` +--disable_query_log +--error ER_CAPACITY_EXCEEDED +--eval CREATE PROCEDURE p() SELECT 1 FROM (SELECT '$s') a +--enable_query_log +SET parser_max_mem_size = default; diff --git a/sql/sp_head.cc b/sql/sp_head.cc index 470b1e0c4fc3..c824499b099d 100644 --- a/sql/sp_head.cc +++ b/sql/sp_head.cc @@ -2232,6 +2232,8 @@ void sp_parser_data::start_parsing_sp_body(THD *thd, sp_head *sp) m_saved_free_list= thd->free_list; thd->mem_root= sp->get_persistent_mem_root(); + set_memroot_max_capacity(thd->mem_root, m_saved_memroot->max_capacity); + set_memroot_error_reporting(thd->mem_root, m_saved_memroot->error_for_capacity_exceeded); thd->free_list= NULL; } From f518bd9458daeb70cb6492f9559643dab34970e5 Mon Sep 17 00:00:00 2001 From: Bharathy Satish Date: Mon, 2 Jul 2018 07:21:55 +0200 Subject: [PATCH 1009/1221] Bug #27931181: RESTAURE DUMP CREATED WITH 5.7.22 ON 8.0.11 Problem: Dump taken using 5.7 server cannot be restored on 8.0. Analysis: DDLs of triggers, events or procedures have sql_mode set. NO_AUTO_CREATE_USER sql_mode is also set along with the definitions. This sql mode is removed from 8.0 thus restore of the dump file on 8.0 server fails. Fix: Fix is to parse the sql_mode, look for NO_AUTO_CREATE_USER and remove it when taking a dump of triggers, events or procedures. --- client/mysqldump.c | 36 ++++++++- mysql-test/r/ddl_i18n_koi8r.result | 80 +++++++++--------- mysql-test/r/ddl_i18n_utf8.result | 80 +++++++++--------- mysql-test/r/mysqldump.result | 125 ++++++++++++++++++++++++++--- mysql-test/r/trigger_wl3253.result | 14 ++-- mysql-test/t/mysqldump.test | 18 +++++ 6 files changed, 252 insertions(+), 101 deletions(-) diff --git a/client/mysqldump.c b/client/mysqldump.c index 5844ca5b17f6..cd3d18ea97ee 100644 --- a/client/mysqldump.c +++ b/client/mysqldump.c @@ -1372,6 +1372,37 @@ static void restore_cs_variables(FILE *sql_file, (const char *) delimiter); } +/* + This function will remove specific sql mode. + + @param[in] sql_mode Original sql mode from where input mode needs to + be removed. + @param[in] replace_mode sql mode which needs to be removed from original + sql mode. + @param[in] replace_len length of sql mode which needs to be removed. + + @retval 1 replace_mode is not present + 0 replace_mode is removed successfully +*/ +static int remove_sql_mode(char* sql_mode, const char* replace_mode, + size_t replace_len) { + char *start = strstr(sql_mode, replace_mode); + /* nothing to replace */ + if (!start) + return 1; + /* sql mode to replace is the only sql mode present or the last one */ + if (strlen(start) == replace_len) { + if (start == sql_mode) + *start = 0; + else + start[-1] = 0; + } + else { + const char *next = start + replace_len + 1; + strcpy(start, next); + } + return 0; +} static void switch_sql_mode(FILE *sql_file, const char *delimiter, @@ -2417,7 +2448,7 @@ static uint dump_events_for_db(char *db) "The following dump may be incomplete.\n" "--\n"); } - + remove_sql_mode(row[1], C_STRING_WITH_LEN("NO_AUTO_CREATE_USER")); switch_sql_mode(sql_file, delimiter, row[1]); switch_time_zone(sql_file, delimiter, row[2]); @@ -2652,7 +2683,7 @@ static uint dump_routines_for_db(char *db) "--\n"); } - + remove_sql_mode(row[1], C_STRING_WITH_LEN("NO_AUTO_CREATE_USER")); switch_sql_mode(sql_file, ";", row[1]); fprintf(sql_file, @@ -3466,6 +3497,7 @@ static int dump_trigger(FILE *sql_file, MYSQL_RES *show_create_trigger_rs, row[3], /* character_set_results */ row[4]); /* collation_connection */ + remove_sql_mode(row[1], C_STRING_WITH_LEN("NO_AUTO_CREATE_USER")); switch_sql_mode(sql_file, ";", row[1]); if (opt_drop_trigger) diff --git a/mysql-test/r/ddl_i18n_koi8r.result b/mysql-test/r/ddl_i18n_koi8r.result index 75df3c616bd1..3542bcfa0b72 100644 --- a/mysql-test/r/ddl_i18n_koi8r.result +++ b/mysql-test/r/ddl_i18n_koi8r.result @@ -732,7 +732,7 @@ ALTER DATABASE `mysqltest1` CHARACTER SET utf8 COLLATE utf8_unicode_ci ; /*!50003 SET character_set_results = koi8r */ ; /*!50003 SET collation_connection = koi8r_general_ci */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; -/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ; +/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; CREATE DEFINER=`root`@`localhost` PROCEDURE `p1`( INOUT 1 CHAR(10), @@ -766,7 +766,7 @@ ALTER DATABASE `mysqltest1` CHARACTER SET utf8 COLLATE utf8_unicode_ci ; /*!50003 SET character_set_results = koi8r */ ; /*!50003 SET collation_connection = koi8r_general_ci */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; -/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ; +/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; CREATE DEFINER=`root`@`localhost` PROCEDURE `p2`( INOUT 1 CHAR(10) CHARACTER SET utf8, @@ -808,7 +808,7 @@ ALTER DATABASE `mysqltest2` CHARACTER SET utf8 COLLATE utf8_unicode_ci ; /*!50003 SET character_set_results = koi8r */ ; /*!50003 SET collation_connection = koi8r_general_ci */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; -/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ; +/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; CREATE DEFINER=`root`@`localhost` PROCEDURE `p3`( INOUT 1 CHAR(10), @@ -842,7 +842,7 @@ ALTER DATABASE `mysqltest2` CHARACTER SET utf8 COLLATE utf8_unicode_ci ; /*!50003 SET character_set_results = koi8r */ ; /*!50003 SET collation_connection = koi8r_general_ci */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; -/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ; +/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; CREATE DEFINER=`root`@`localhost` PROCEDURE `p4`( INOUT 1 CHAR(10) CHARACTER SET utf8, @@ -908,7 +908,7 @@ set names koi8r| SHOW CREATE PROCEDURE p1| Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation -p1 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` PROCEDURE `p1`( +p1 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` PROCEDURE `p1`( INOUT 1 CHAR(10), OUT 2 CHAR(10)) BEGIN @@ -929,7 +929,7 @@ END koi8r koi8r_general_ci utf8_unicode_ci SHOW CREATE PROCEDURE p2| Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation -p2 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` PROCEDURE `p2`( +p2 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` PROCEDURE `p2`( INOUT 1 CHAR(10) CHARACTER SET utf8, OUT 2 CHAR(10) CHARACTER SET utf8) BEGIN @@ -950,7 +950,7 @@ END koi8r koi8r_general_ci utf8_unicode_ci SHOW CREATE PROCEDURE mysqltest2.p3| Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation -p3 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` PROCEDURE `p3`( +p3 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` PROCEDURE `p3`( INOUT 1 CHAR(10), OUT 2 CHAR(10)) BEGIN @@ -971,7 +971,7 @@ END koi8r koi8r_general_ci utf8_unicode_ci SHOW CREATE PROCEDURE mysqltest2.p4| Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation -p4 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` PROCEDURE `p4`( +p4 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` PROCEDURE `p4`( INOUT 1 CHAR(10) CHARACTER SET utf8, OUT 2 CHAR(10) CHARACTER SET utf8) BEGIN @@ -1024,7 +1024,7 @@ COLLATION( ' @@character_set_client AS c8; SET 1 = 'a'; SET 2 = 'b'; -END NULL NULL SQL NO CONTAINS SQL NULL DEFINER CREATED ALTERED ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION root@localhost koi8r koi8r_general_ci utf8_unicode_ci +END NULL NULL SQL NO CONTAINS SQL NULL DEFINER CREATED ALTERED ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION root@localhost koi8r koi8r_general_ci utf8_unicode_ci SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE routine_name = 'p2'| SPECIFIC_NAME ROUTINE_CATALOG ROUTINE_SCHEMA ROUTINE_NAME ROUTINE_TYPE DATA_TYPE CHARACTER_MAXIMUM_LENGTH CHARACTER_OCTET_LENGTH NUMERIC_PRECISION NUMERIC_SCALE DATETIME_PRECISION CHARACTER_SET_NAME COLLATION_NAME DTD_IDENTIFIER ROUTINE_BODY ROUTINE_DEFINITION EXTERNAL_NAME EXTERNAL_LANGUAGE PARAMETER_STYLE IS_DETERMINISTIC SQL_DATA_ACCESS SQL_PATH SECURITY_TYPE CREATED LAST_ALTERED SQL_MODE ROUTINE_COMMENT DEFINER CHARACTER_SET_CLIENT COLLATION_CONNECTION DATABASE_COLLATION @@ -1042,7 +1042,7 @@ COLLATION( ' @@character_set_client AS c8; SET 1 = 'a'; SET 2 = 'b'; -END NULL NULL SQL NO CONTAINS SQL NULL DEFINER CREATED ALTERED ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION root@localhost koi8r koi8r_general_ci utf8_unicode_ci +END NULL NULL SQL NO CONTAINS SQL NULL DEFINER CREATED ALTERED ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION root@localhost koi8r koi8r_general_ci utf8_unicode_ci SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE routine_name = 'p3'| SPECIFIC_NAME ROUTINE_CATALOG ROUTINE_SCHEMA ROUTINE_NAME ROUTINE_TYPE DATA_TYPE CHARACTER_MAXIMUM_LENGTH CHARACTER_OCTET_LENGTH NUMERIC_PRECISION NUMERIC_SCALE DATETIME_PRECISION CHARACTER_SET_NAME COLLATION_NAME DTD_IDENTIFIER ROUTINE_BODY ROUTINE_DEFINITION EXTERNAL_NAME EXTERNAL_LANGUAGE PARAMETER_STYLE IS_DETERMINISTIC SQL_DATA_ACCESS SQL_PATH SECURITY_TYPE CREATED LAST_ALTERED SQL_MODE ROUTINE_COMMENT DEFINER CHARACTER_SET_CLIENT COLLATION_CONNECTION DATABASE_COLLATION @@ -1060,7 +1060,7 @@ COLLATION( ' @@character_set_client AS c8; SET 1 = 'a'; SET 2 = 'b'; -END NULL NULL SQL NO CONTAINS SQL NULL DEFINER CREATED ALTERED ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION root@localhost koi8r koi8r_general_ci utf8_unicode_ci +END NULL NULL SQL NO CONTAINS SQL NULL DEFINER CREATED ALTERED ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION root@localhost koi8r koi8r_general_ci utf8_unicode_ci SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE routine_name = 'p4'| SPECIFIC_NAME ROUTINE_CATALOG ROUTINE_SCHEMA ROUTINE_NAME ROUTINE_TYPE DATA_TYPE CHARACTER_MAXIMUM_LENGTH CHARACTER_OCTET_LENGTH NUMERIC_PRECISION NUMERIC_SCALE DATETIME_PRECISION CHARACTER_SET_NAME COLLATION_NAME DTD_IDENTIFIER ROUTINE_BODY ROUTINE_DEFINITION EXTERNAL_NAME EXTERNAL_LANGUAGE PARAMETER_STYLE IS_DETERMINISTIC SQL_DATA_ACCESS SQL_PATH SECURITY_TYPE CREATED LAST_ALTERED SQL_MODE ROUTINE_COMMENT DEFINER CHARACTER_SET_CLIENT COLLATION_CONNECTION DATABASE_COLLATION @@ -1078,7 +1078,7 @@ COLLATION( ' @@character_set_client AS c8; SET 1 = 'a'; SET 2 = 'b'; -END NULL NULL SQL NO CONTAINS SQL NULL DEFINER CREATED ALTERED ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION root@localhost koi8r koi8r_general_ci utf8_unicode_ci +END NULL NULL SQL NO CONTAINS SQL NULL DEFINER CREATED ALTERED ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION root@localhost koi8r koi8r_general_ci utf8_unicode_ci SET @a = '1'| @@ -1750,7 +1750,7 @@ ALTER DATABASE `mysqltest1` CHARACTER SET utf8 COLLATE utf8_unicode_ci ; /*!50003 SET character_set_results = koi8r */ ; /*!50003 SET collation_connection = koi8r_general_ci */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; -/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ; +/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; /*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER trg1 BEFORE INSERT ON t1 FOR EACH ROW BEGIN @@ -1779,7 +1779,7 @@ ALTER DATABASE `mysqltest1` CHARACTER SET utf8 COLLATE utf8_unicode_ci ; /*!50003 SET character_set_results = koi8r */ ; /*!50003 SET collation_connection = koi8r_general_ci */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; -/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ; +/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; /*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER trg2 AFTER INSERT ON t1 FOR EACH ROW BEGIN @@ -1829,7 +1829,7 @@ ALTER DATABASE `mysqltest2` CHARACTER SET utf8 COLLATE utf8_unicode_ci ; /*!50003 SET character_set_results = koi8r */ ; /*!50003 SET collation_connection = koi8r_general_ci */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; -/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ; +/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; /*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER mysqltest2.trg3 BEFORE INSERT ON mysqltest2.t1 FOR EACH ROW BEGIN @@ -1858,7 +1858,7 @@ ALTER DATABASE `mysqltest2` CHARACTER SET utf8 COLLATE utf8_unicode_ci ; /*!50003 SET character_set_results = koi8r */ ; /*!50003 SET collation_connection = koi8r_general_ci */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; -/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ; +/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; /*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER mysqltest2.trg4 AFTER INSERT ON mysqltest2.t1 FOR EACH ROW BEGIN @@ -1908,7 +1908,7 @@ use mysqltest1| SHOW CREATE TRIGGER trg1| Trigger sql_mode SQL Original Statement character_set_client collation_connection Database Collation Created -trg1 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` TRIGGER trg1 BEFORE INSERT ON t1 FOR EACH ROW +trg1 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` TRIGGER trg1 BEFORE INSERT ON t1 FOR EACH ROW BEGIN DECLARE 1 CHAR(10); INSERT INTO log VALUES(COLLATION(1)); @@ -1924,7 +1924,7 @@ END koi8r koi8r_general_ci utf8_unicode_ci CREATED SHOW CREATE TRIGGER trg2| Trigger sql_mode SQL Original Statement character_set_client collation_connection Database Collation Created -trg2 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` TRIGGER trg2 AFTER INSERT ON t1 FOR EACH ROW +trg2 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` TRIGGER trg2 AFTER INSERT ON t1 FOR EACH ROW BEGIN DECLARE 1 CHAR(10) CHARACTER SET utf8; INSERT INTO log VALUES(COLLATION(1)); @@ -1940,7 +1940,7 @@ END koi8r koi8r_general_ci utf8_unicode_ci CREATED SHOW CREATE TRIGGER mysqltest2.trg3| Trigger sql_mode SQL Original Statement character_set_client collation_connection Database Collation Created -trg3 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` TRIGGER mysqltest2.trg3 BEFORE INSERT ON mysqltest2.t1 FOR EACH ROW +trg3 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` TRIGGER mysqltest2.trg3 BEFORE INSERT ON mysqltest2.t1 FOR EACH ROW BEGIN DECLARE 1 CHAR(10); INSERT INTO log VALUES(COLLATION(1)); @@ -1956,7 +1956,7 @@ END koi8r koi8r_general_ci utf8_unicode_ci CREATED SHOW CREATE TRIGGER mysqltest2.trg4| Trigger sql_mode SQL Original Statement character_set_client collation_connection Database Collation Created -trg4 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` TRIGGER mysqltest2.trg4 AFTER INSERT ON mysqltest2.t1 FOR EACH ROW +trg4 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` TRIGGER mysqltest2.trg4 AFTER INSERT ON mysqltest2.t1 FOR EACH ROW BEGIN DECLARE 1 CHAR(10) CHARACTER SET utf8; INSERT INTO log VALUES(COLLATION(1)); @@ -1984,7 +1984,7 @@ INSERT INTO log VALUES(@@character_set_client); SET @a1 = ''; SET @a1 = ''; SET @a2 = ''; -END BEFORE CREATED ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION root@localhost koi8r koi8r_general_ci utf8_unicode_ci +END BEFORE CREATED ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION root@localhost koi8r koi8r_general_ci utf8_unicode_ci trg2 INSERT t1 BEGIN DECLARE 1 CHAR(10) CHARACTER SET utf8; INSERT INTO log VALUES(COLLATION(1)); @@ -1996,7 +1996,7 @@ INSERT INTO log VALUES(@@character_set_client); SET @b1 = ''; SET @b1 = ''; SET @b2 = ''; -END AFTER CREATED ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION root@localhost koi8r koi8r_general_ci utf8_unicode_ci +END AFTER CREATED ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION root@localhost koi8r koi8r_general_ci utf8_unicode_ci use mysqltest2| @@ -2013,7 +2013,7 @@ INSERT INTO log VALUES(@@character_set_client); SET @a1 = ''; SET @a1 = ''; SET @a2 = ''; -END BEFORE CREATED ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION root@localhost koi8r koi8r_general_ci utf8_unicode_ci +END BEFORE CREATED ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION root@localhost koi8r koi8r_general_ci utf8_unicode_ci trg4 INSERT t1 BEGIN DECLARE 1 CHAR(10) CHARACTER SET utf8; INSERT INTO log VALUES(COLLATION(1)); @@ -2025,7 +2025,7 @@ INSERT INTO log VALUES(@@character_set_client); SET @b1 = ''; SET @b1 = ''; SET @b2 = ''; -END AFTER CREATED ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION root@localhost koi8r koi8r_general_ci utf8_unicode_ci +END AFTER CREATED ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION root@localhost koi8r koi8r_general_ci utf8_unicode_ci use mysqltest1| @@ -2042,7 +2042,7 @@ INSERT INTO log VALUES(@@character_set_client); SET @a1 = ''; SET @a1 = ''; SET @a2 = ''; -END ROW BEFORE NULL NULL OLD NEW CREATED ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION root@localhost koi8r koi8r_general_ci utf8_unicode_ci +END ROW BEFORE NULL NULL OLD NEW CREATED ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION root@localhost koi8r koi8r_general_ci utf8_unicode_ci SELECT * FROM INFORMATION_SCHEMA.TRIGGERS WHERE trigger_name = 'trg2'| 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 @@ -2057,7 +2057,7 @@ INSERT INTO log VALUES(@@character_set_client); SET @b1 = ''; SET @b1 = ''; SET @b2 = ''; -END ROW AFTER NULL NULL OLD NEW CREATED ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION root@localhost koi8r koi8r_general_ci utf8_unicode_ci +END ROW AFTER NULL NULL OLD NEW CREATED ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION root@localhost koi8r koi8r_general_ci utf8_unicode_ci SELECT * FROM INFORMATION_SCHEMA.TRIGGERS WHERE trigger_name = 'trg3'| 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 @@ -2072,7 +2072,7 @@ INSERT INTO log VALUES(@@character_set_client); SET @a1 = ''; SET @a1 = ''; SET @a2 = ''; -END ROW BEFORE NULL NULL OLD NEW CREATED ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION root@localhost koi8r koi8r_general_ci utf8_unicode_ci +END ROW BEFORE NULL NULL OLD NEW CREATED ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION root@localhost koi8r koi8r_general_ci utf8_unicode_ci SELECT * FROM INFORMATION_SCHEMA.TRIGGERS WHERE trigger_name = 'trg4'| 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 @@ -2087,7 +2087,7 @@ INSERT INTO log VALUES(@@character_set_client); SET @b1 = ''; SET @b1 = ''; SET @b2 = ''; -END ROW AFTER NULL NULL OLD NEW CREATED ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION root@localhost koi8r koi8r_general_ci utf8_unicode_ci +END ROW AFTER NULL NULL OLD NEW CREATED ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION root@localhost koi8r koi8r_general_ci utf8_unicode_ci SET @a1 = '1'| @@ -2494,7 +2494,7 @@ ALTER DATABASE `mysqltest1` CHARACTER SET utf8 COLLATE utf8_unicode_ci ;; /*!50003 SET character_set_results = koi8r */ ;; /*!50003 SET collation_connection = koi8r_general_ci */ ;; /*!50003 SET @saved_sql_mode = @@sql_mode */ ;; -/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ;; +/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ;; /*!50003 SET @saved_time_zone = @@time_zone */ ;; /*!50003 SET time_zone = 'SYSTEM' */ ;; /*!50106 CREATE*/ /*!50117 DEFINER=`root`@`localhost`*/ /*!50106 EVENT `ev1` ON SCHEDULE AT '2030-01-01 00:00:00' ON COMPLETION NOT PRESERVE ENABLE DO BEGIN @@ -2522,7 +2522,7 @@ ALTER DATABASE `mysqltest1` CHARACTER SET utf8 COLLATE utf8_unicode_ci ;; /*!50003 SET character_set_results = koi8r */ ;; /*!50003 SET collation_connection = koi8r_general_ci */ ;; /*!50003 SET @saved_sql_mode = @@sql_mode */ ;; -/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ;; +/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ;; /*!50003 SET @saved_time_zone = @@time_zone */ ;; /*!50003 SET time_zone = 'SYSTEM' */ ;; /*!50106 CREATE*/ /*!50117 DEFINER=`root`@`localhost`*/ /*!50106 EVENT `ev2` ON SCHEDULE AT '2030-01-01 00:00:00' ON COMPLETION NOT PRESERVE ENABLE DO BEGIN @@ -2561,7 +2561,7 @@ ALTER DATABASE `mysqltest2` CHARACTER SET utf8 COLLATE utf8_unicode_ci ;; /*!50003 SET character_set_results = koi8r */ ;; /*!50003 SET collation_connection = koi8r_general_ci */ ;; /*!50003 SET @saved_sql_mode = @@sql_mode */ ;; -/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ;; +/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ;; /*!50003 SET @saved_time_zone = @@time_zone */ ;; /*!50003 SET time_zone = 'SYSTEM' */ ;; /*!50106 CREATE*/ /*!50117 DEFINER=`root`@`localhost`*/ /*!50106 EVENT `ev3` ON SCHEDULE AT '2030-01-01 00:00:00' ON COMPLETION NOT PRESERVE ENABLE DO BEGIN @@ -2589,7 +2589,7 @@ ALTER DATABASE `mysqltest2` CHARACTER SET utf8 COLLATE utf8_unicode_ci ;; /*!50003 SET character_set_results = koi8r */ ;; /*!50003 SET collation_connection = koi8r_general_ci */ ;; /*!50003 SET @saved_sql_mode = @@sql_mode */ ;; -/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ;; +/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ;; /*!50003 SET @saved_time_zone = @@time_zone */ ;; /*!50003 SET time_zone = 'SYSTEM' */ ;; /*!50106 CREATE*/ /*!50117 DEFINER=`root`@`localhost`*/ /*!50106 EVENT `ev4` ON SCHEDULE AT '2030-01-01 00:00:00' ON COMPLETION NOT PRESERVE ENABLE DO BEGIN @@ -2634,7 +2634,7 @@ set names koi8r| SHOW CREATE EVENT ev1| Event sql_mode time_zone Create Event character_set_client collation_connection Database Collation -ev1 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION SYSTEM CREATE DEFINER=`root`@`localhost` EVENT `ev1` ON SCHEDULE AT '2030-01-01 00:00:00' ON COMPLETION NOT PRESERVE ENABLE DO BEGIN +ev1 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION SYSTEM CREATE DEFINER=`root`@`localhost` EVENT `ev1` ON SCHEDULE AT '2030-01-01 00:00:00' ON COMPLETION NOT PRESERVE ENABLE DO BEGIN DECLARE 1 CHAR(10); SELECT COLLATION(1) AS c1, @@ -2647,7 +2647,7 @@ END koi8r koi8r_general_ci utf8_unicode_ci SHOW CREATE EVENT ev2| Event sql_mode time_zone Create Event character_set_client collation_connection Database Collation -ev2 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION SYSTEM CREATE DEFINER=`root`@`localhost` EVENT `ev2` ON SCHEDULE AT '2030-01-01 00:00:00' ON COMPLETION NOT PRESERVE ENABLE DO BEGIN +ev2 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION SYSTEM CREATE DEFINER=`root`@`localhost` EVENT `ev2` ON SCHEDULE AT '2030-01-01 00:00:00' ON COMPLETION NOT PRESERVE ENABLE DO BEGIN DECLARE 1 CHAR(10) CHARACTER SET utf8; SELECT COLLATION(1) AS c1, @@ -2660,7 +2660,7 @@ END koi8r koi8r_general_ci utf8_unicode_ci SHOW CREATE EVENT mysqltest2.ev3| Event sql_mode time_zone Create Event character_set_client collation_connection Database Collation -ev3 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION SYSTEM CREATE DEFINER=`root`@`localhost` EVENT `ev3` ON SCHEDULE AT '2030-01-01 00:00:00' ON COMPLETION NOT PRESERVE ENABLE DO BEGIN +ev3 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION SYSTEM CREATE DEFINER=`root`@`localhost` EVENT `ev3` ON SCHEDULE AT '2030-01-01 00:00:00' ON COMPLETION NOT PRESERVE ENABLE DO BEGIN DECLARE 1 CHAR(10) CHARACTER SET utf8; SELECT COLLATION(1) AS c1, @@ -2673,7 +2673,7 @@ END koi8r koi8r_general_ci utf8_unicode_ci SHOW CREATE EVENT mysqltest2.ev3| Event sql_mode time_zone Create Event character_set_client collation_connection Database Collation -ev3 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION SYSTEM CREATE DEFINER=`root`@`localhost` EVENT `ev3` ON SCHEDULE AT '2030-01-01 00:00:00' ON COMPLETION NOT PRESERVE ENABLE DO BEGIN +ev3 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION SYSTEM CREATE DEFINER=`root`@`localhost` EVENT `ev3` ON SCHEDULE AT '2030-01-01 00:00:00' ON COMPLETION NOT PRESERVE ENABLE DO BEGIN DECLARE 1 CHAR(10) CHARACTER SET utf8; SELECT COLLATION(1) AS c1, @@ -2711,7 +2711,7 @@ COLLATION( ' COLLATION( '') AS c4, @@collation_connection AS c5, @@character_set_client AS c6; -END ONE TIME 2030-01-01 00:00:00 NULL NULL ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION NULL NULL ENABLED NOT PRESERVE CREATED LAST_ALTERED NULL 1 koi8r koi8r_general_ci utf8_unicode_ci +END ONE TIME 2030-01-01 00:00:00 NULL NULL ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION NULL NULL ENABLED NOT PRESERVE CREATED LAST_ALTERED NULL 1 koi8r koi8r_general_ci utf8_unicode_ci SELECT * FROM INFORMATION_SCHEMA.EVENTS WHERE event_name = 'ev2'| EVENT_CATALOG EVENT_SCHEMA EVENT_NAME DEFINER TIME_ZONE EVENT_BODY EVENT_DEFINITION EVENT_TYPE EXECUTE_AT INTERVAL_VALUE INTERVAL_FIELD SQL_MODE STARTS ENDS STATUS ON_COMPLETION CREATED LAST_ALTERED LAST_EXECUTED EVENT_COMMENT ORIGINATOR CHARACTER_SET_CLIENT COLLATION_CONNECTION DATABASE_COLLATION @@ -2724,7 +2724,7 @@ COLLATION( ' COLLATION( '') AS c4, @@collation_connection AS c5, @@character_set_client AS c6; -END ONE TIME 2030-01-01 00:00:00 NULL NULL ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION NULL NULL ENABLED NOT PRESERVE CREATED LAST_ALTERED NULL 1 koi8r koi8r_general_ci utf8_unicode_ci +END ONE TIME 2030-01-01 00:00:00 NULL NULL ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION NULL NULL ENABLED NOT PRESERVE CREATED LAST_ALTERED NULL 1 koi8r koi8r_general_ci utf8_unicode_ci SELECT * FROM INFORMATION_SCHEMA.EVENTS WHERE event_name = 'ev3'| EVENT_CATALOG EVENT_SCHEMA EVENT_NAME DEFINER TIME_ZONE EVENT_BODY EVENT_DEFINITION EVENT_TYPE EXECUTE_AT INTERVAL_VALUE INTERVAL_FIELD SQL_MODE STARTS ENDS STATUS ON_COMPLETION CREATED LAST_ALTERED LAST_EXECUTED EVENT_COMMENT ORIGINATOR CHARACTER_SET_CLIENT COLLATION_CONNECTION DATABASE_COLLATION @@ -2737,7 +2737,7 @@ COLLATION( ' COLLATION( '') AS c4, @@collation_connection AS c5, @@character_set_client AS c6; -END ONE TIME 2030-01-01 00:00:00 NULL NULL ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION NULL NULL ENABLED NOT PRESERVE CREATED LAST_ALTERED NULL 1 koi8r koi8r_general_ci utf8_unicode_ci +END ONE TIME 2030-01-01 00:00:00 NULL NULL ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION NULL NULL ENABLED NOT PRESERVE CREATED LAST_ALTERED NULL 1 koi8r koi8r_general_ci utf8_unicode_ci SELECT * FROM INFORMATION_SCHEMA.EVENTS WHERE event_name = 'ev4'| EVENT_CATALOG EVENT_SCHEMA EVENT_NAME DEFINER TIME_ZONE EVENT_BODY EVENT_DEFINITION EVENT_TYPE EXECUTE_AT INTERVAL_VALUE INTERVAL_FIELD SQL_MODE STARTS ENDS STATUS ON_COMPLETION CREATED LAST_ALTERED LAST_EXECUTED EVENT_COMMENT ORIGINATOR CHARACTER_SET_CLIENT COLLATION_CONNECTION DATABASE_COLLATION @@ -2750,7 +2750,7 @@ COLLATION( ' COLLATION( '') AS c4, @@collation_connection AS c5, @@character_set_client AS c6; -END ONE TIME 2030-01-01 00:00:00 NULL NULL ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION NULL NULL ENABLED NOT PRESERVE CREATED LAST_ALTERED NULL 1 koi8r koi8r_general_ci utf8_unicode_ci +END ONE TIME 2030-01-01 00:00:00 NULL NULL ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION NULL NULL ENABLED NOT PRESERVE CREATED LAST_ALTERED NULL 1 koi8r koi8r_general_ci utf8_unicode_ci ------------------------------------------------------------------- DDL statements within stored routine. diff --git a/mysql-test/r/ddl_i18n_utf8.result b/mysql-test/r/ddl_i18n_utf8.result index de715deacf7c..f8bc7df140cf 100644 --- a/mysql-test/r/ddl_i18n_utf8.result +++ b/mysql-test/r/ddl_i18n_utf8.result @@ -732,7 +732,7 @@ ALTER DATABASE `mysqltest1` CHARACTER SET utf8 COLLATE utf8_unicode_ci ; /*!50003 SET character_set_results = utf8 */ ; /*!50003 SET collation_connection = utf8_general_ci */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; -/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ; +/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; CREATE DEFINER=`root`@`localhost` PROCEDURE `p1`( INOUT парам1 CHAR(10), @@ -766,7 +766,7 @@ ALTER DATABASE `mysqltest1` CHARACTER SET utf8 COLLATE utf8_unicode_ci ; /*!50003 SET character_set_results = utf8 */ ; /*!50003 SET collation_connection = utf8_general_ci */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; -/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ; +/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; CREATE DEFINER=`root`@`localhost` PROCEDURE `p2`( INOUT парам1 CHAR(10) CHARACTER SET utf8, @@ -808,7 +808,7 @@ ALTER DATABASE `mysqltest2` CHARACTER SET utf8 COLLATE utf8_unicode_ci ; /*!50003 SET character_set_results = utf8 */ ; /*!50003 SET collation_connection = utf8_general_ci */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; -/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ; +/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; CREATE DEFINER=`root`@`localhost` PROCEDURE `p3`( INOUT парам1 CHAR(10), @@ -842,7 +842,7 @@ ALTER DATABASE `mysqltest2` CHARACTER SET utf8 COLLATE utf8_unicode_ci ; /*!50003 SET character_set_results = utf8 */ ; /*!50003 SET collation_connection = utf8_general_ci */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; -/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ; +/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; CREATE DEFINER=`root`@`localhost` PROCEDURE `p4`( INOUT парам1 CHAR(10) CHARACTER SET utf8, @@ -908,7 +908,7 @@ set names utf8| SHOW CREATE PROCEDURE p1| Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation -p1 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` PROCEDURE `p1`( +p1 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` PROCEDURE `p1`( INOUT парам1 CHAR(10), OUT парам2 CHAR(10)) BEGIN @@ -929,7 +929,7 @@ END utf8 utf8_general_ci utf8_unicode_ci SHOW CREATE PROCEDURE p2| Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation -p2 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` PROCEDURE `p2`( +p2 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` PROCEDURE `p2`( INOUT парам1 CHAR(10) CHARACTER SET utf8, OUT парам2 CHAR(10) CHARACTER SET utf8) BEGIN @@ -950,7 +950,7 @@ END utf8 utf8_general_ci utf8_unicode_ci SHOW CREATE PROCEDURE mysqltest2.p3| Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation -p3 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` PROCEDURE `p3`( +p3 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` PROCEDURE `p3`( INOUT парам1 CHAR(10), OUT парам2 CHAR(10)) BEGIN @@ -971,7 +971,7 @@ END utf8 utf8_general_ci utf8_unicode_ci SHOW CREATE PROCEDURE mysqltest2.p4| Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation -p4 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` PROCEDURE `p4`( +p4 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` PROCEDURE `p4`( INOUT парам1 CHAR(10) CHARACTER SET utf8, OUT парам2 CHAR(10) CHARACTER SET utf8) BEGIN @@ -1024,7 +1024,7 @@ COLLATION( 'текст') AS c6, @@character_set_client AS c8; SET парам1 = 'a'; SET парам2 = 'b'; -END NULL NULL SQL NO CONTAINS SQL NULL DEFINER CREATED ALTERED ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION root@localhost utf8 utf8_general_ci utf8_unicode_ci +END NULL NULL SQL NO CONTAINS SQL NULL DEFINER CREATED ALTERED ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION root@localhost utf8 utf8_general_ci utf8_unicode_ci SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE routine_name = 'p2'| SPECIFIC_NAME ROUTINE_CATALOG ROUTINE_SCHEMA ROUTINE_NAME ROUTINE_TYPE DATA_TYPE CHARACTER_MAXIMUM_LENGTH CHARACTER_OCTET_LENGTH NUMERIC_PRECISION NUMERIC_SCALE DATETIME_PRECISION CHARACTER_SET_NAME COLLATION_NAME DTD_IDENTIFIER ROUTINE_BODY ROUTINE_DEFINITION EXTERNAL_NAME EXTERNAL_LANGUAGE PARAMETER_STYLE IS_DETERMINISTIC SQL_DATA_ACCESS SQL_PATH SECURITY_TYPE CREATED LAST_ALTERED SQL_MODE ROUTINE_COMMENT DEFINER CHARACTER_SET_CLIENT COLLATION_CONNECTION DATABASE_COLLATION @@ -1042,7 +1042,7 @@ COLLATION( 'текст') AS c6, @@character_set_client AS c8; SET парам1 = 'a'; SET парам2 = 'b'; -END NULL NULL SQL NO CONTAINS SQL NULL DEFINER CREATED ALTERED ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION root@localhost utf8 utf8_general_ci utf8_unicode_ci +END NULL NULL SQL NO CONTAINS SQL NULL DEFINER CREATED ALTERED ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION root@localhost utf8 utf8_general_ci utf8_unicode_ci SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE routine_name = 'p3'| SPECIFIC_NAME ROUTINE_CATALOG ROUTINE_SCHEMA ROUTINE_NAME ROUTINE_TYPE DATA_TYPE CHARACTER_MAXIMUM_LENGTH CHARACTER_OCTET_LENGTH NUMERIC_PRECISION NUMERIC_SCALE DATETIME_PRECISION CHARACTER_SET_NAME COLLATION_NAME DTD_IDENTIFIER ROUTINE_BODY ROUTINE_DEFINITION EXTERNAL_NAME EXTERNAL_LANGUAGE PARAMETER_STYLE IS_DETERMINISTIC SQL_DATA_ACCESS SQL_PATH SECURITY_TYPE CREATED LAST_ALTERED SQL_MODE ROUTINE_COMMENT DEFINER CHARACTER_SET_CLIENT COLLATION_CONNECTION DATABASE_COLLATION @@ -1060,7 +1060,7 @@ COLLATION( 'текст') AS c6, @@character_set_client AS c8; SET парам1 = 'a'; SET парам2 = 'b'; -END NULL NULL SQL NO CONTAINS SQL NULL DEFINER CREATED ALTERED ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION root@localhost utf8 utf8_general_ci utf8_unicode_ci +END NULL NULL SQL NO CONTAINS SQL NULL DEFINER CREATED ALTERED ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION root@localhost utf8 utf8_general_ci utf8_unicode_ci SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE routine_name = 'p4'| SPECIFIC_NAME ROUTINE_CATALOG ROUTINE_SCHEMA ROUTINE_NAME ROUTINE_TYPE DATA_TYPE CHARACTER_MAXIMUM_LENGTH CHARACTER_OCTET_LENGTH NUMERIC_PRECISION NUMERIC_SCALE DATETIME_PRECISION CHARACTER_SET_NAME COLLATION_NAME DTD_IDENTIFIER ROUTINE_BODY ROUTINE_DEFINITION EXTERNAL_NAME EXTERNAL_LANGUAGE PARAMETER_STYLE IS_DETERMINISTIC SQL_DATA_ACCESS SQL_PATH SECURITY_TYPE CREATED LAST_ALTERED SQL_MODE ROUTINE_COMMENT DEFINER CHARACTER_SET_CLIENT COLLATION_CONNECTION DATABASE_COLLATION @@ -1078,7 +1078,7 @@ COLLATION( 'текст') AS c6, @@character_set_client AS c8; SET парам1 = 'a'; SET парам2 = 'b'; -END NULL NULL SQL NO CONTAINS SQL NULL DEFINER CREATED ALTERED ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION root@localhost utf8 utf8_general_ci utf8_unicode_ci +END NULL NULL SQL NO CONTAINS SQL NULL DEFINER CREATED ALTERED ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION root@localhost utf8 utf8_general_ci utf8_unicode_ci SET @a = '1'| @@ -1750,7 +1750,7 @@ ALTER DATABASE `mysqltest1` CHARACTER SET utf8 COLLATE utf8_unicode_ci ; /*!50003 SET character_set_results = utf8 */ ; /*!50003 SET collation_connection = utf8_general_ci */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; -/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ; +/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; /*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER trg1 BEFORE INSERT ON t1 FOR EACH ROW BEGIN @@ -1779,7 +1779,7 @@ ALTER DATABASE `mysqltest1` CHARACTER SET utf8 COLLATE utf8_unicode_ci ; /*!50003 SET character_set_results = utf8 */ ; /*!50003 SET collation_connection = utf8_general_ci */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; -/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ; +/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; /*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER trg2 AFTER INSERT ON t1 FOR EACH ROW BEGIN @@ -1829,7 +1829,7 @@ ALTER DATABASE `mysqltest2` CHARACTER SET utf8 COLLATE utf8_unicode_ci ; /*!50003 SET character_set_results = utf8 */ ; /*!50003 SET collation_connection = utf8_general_ci */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; -/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ; +/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; /*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER mysqltest2.trg3 BEFORE INSERT ON mysqltest2.t1 FOR EACH ROW BEGIN @@ -1858,7 +1858,7 @@ ALTER DATABASE `mysqltest2` CHARACTER SET utf8 COLLATE utf8_unicode_ci ; /*!50003 SET character_set_results = utf8 */ ; /*!50003 SET collation_connection = utf8_general_ci */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; -/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ; +/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; /*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER mysqltest2.trg4 AFTER INSERT ON mysqltest2.t1 FOR EACH ROW BEGIN @@ -1908,7 +1908,7 @@ use mysqltest1| SHOW CREATE TRIGGER trg1| Trigger sql_mode SQL Original Statement character_set_client collation_connection Database Collation Created -trg1 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` TRIGGER trg1 BEFORE INSERT ON t1 FOR EACH ROW +trg1 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` TRIGGER trg1 BEFORE INSERT ON t1 FOR EACH ROW BEGIN DECLARE перем1 CHAR(10); INSERT INTO log VALUES(COLLATION(перем1)); @@ -1924,7 +1924,7 @@ END utf8 utf8_general_ci utf8_unicode_ci CREATED SHOW CREATE TRIGGER trg2| Trigger sql_mode SQL Original Statement character_set_client collation_connection Database Collation Created -trg2 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` TRIGGER trg2 AFTER INSERT ON t1 FOR EACH ROW +trg2 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` TRIGGER trg2 AFTER INSERT ON t1 FOR EACH ROW BEGIN DECLARE перем1 CHAR(10) CHARACTER SET utf8; INSERT INTO log VALUES(COLLATION(перем1)); @@ -1940,7 +1940,7 @@ END utf8 utf8_general_ci utf8_unicode_ci CREATED SHOW CREATE TRIGGER mysqltest2.trg3| Trigger sql_mode SQL Original Statement character_set_client collation_connection Database Collation Created -trg3 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` TRIGGER mysqltest2.trg3 BEFORE INSERT ON mysqltest2.t1 FOR EACH ROW +trg3 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` TRIGGER mysqltest2.trg3 BEFORE INSERT ON mysqltest2.t1 FOR EACH ROW BEGIN DECLARE перем1 CHAR(10); INSERT INTO log VALUES(COLLATION(перем1)); @@ -1956,7 +1956,7 @@ END utf8 utf8_general_ci utf8_unicode_ci CREATED SHOW CREATE TRIGGER mysqltest2.trg4| Trigger sql_mode SQL Original Statement character_set_client collation_connection Database Collation Created -trg4 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` TRIGGER mysqltest2.trg4 AFTER INSERT ON mysqltest2.t1 FOR EACH ROW +trg4 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` TRIGGER mysqltest2.trg4 AFTER INSERT ON mysqltest2.t1 FOR EACH ROW BEGIN DECLARE перем1 CHAR(10) CHARACTER SET utf8; INSERT INTO log VALUES(COLLATION(перем1)); @@ -1984,7 +1984,7 @@ INSERT INTO log VALUES(@@character_set_client); SET @a1 = 'текст'; SET @a2 = 'текст'; SET @a3 = 'текст'; -END BEFORE CREATED ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION root@localhost utf8 utf8_general_ci utf8_unicode_ci +END BEFORE CREATED ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION root@localhost utf8 utf8_general_ci utf8_unicode_ci trg2 INSERT t1 BEGIN DECLARE перем1 CHAR(10) CHARACTER SET utf8; INSERT INTO log VALUES(COLLATION(перем1)); @@ -1996,7 +1996,7 @@ INSERT INTO log VALUES(@@character_set_client); SET @b1 = 'текст'; SET @b2 = 'текст'; SET @b3 = 'текст'; -END AFTER CREATED ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION root@localhost utf8 utf8_general_ci utf8_unicode_ci +END AFTER CREATED ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION root@localhost utf8 utf8_general_ci utf8_unicode_ci use mysqltest2| @@ -2013,7 +2013,7 @@ INSERT INTO log VALUES(@@character_set_client); SET @a1 = 'текст'; SET @a2 = 'текст'; SET @a3 = 'текст'; -END BEFORE CREATED ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION root@localhost utf8 utf8_general_ci utf8_unicode_ci +END BEFORE CREATED ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION root@localhost utf8 utf8_general_ci utf8_unicode_ci trg4 INSERT t1 BEGIN DECLARE перем1 CHAR(10) CHARACTER SET utf8; INSERT INTO log VALUES(COLLATION(перем1)); @@ -2025,7 +2025,7 @@ INSERT INTO log VALUES(@@character_set_client); SET @b1 = 'текст'; SET @b2 = 'текст'; SET @b3 = 'текст'; -END AFTER CREATED ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION root@localhost utf8 utf8_general_ci utf8_unicode_ci +END AFTER CREATED ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION root@localhost utf8 utf8_general_ci utf8_unicode_ci use mysqltest1| @@ -2042,7 +2042,7 @@ INSERT INTO log VALUES(@@character_set_client); SET @a1 = 'текст'; SET @a2 = 'текст'; SET @a3 = 'текст'; -END ROW BEFORE NULL NULL OLD NEW CREATED ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION root@localhost utf8 utf8_general_ci utf8_unicode_ci +END ROW BEFORE NULL NULL OLD NEW CREATED ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION root@localhost utf8 utf8_general_ci utf8_unicode_ci SELECT * FROM INFORMATION_SCHEMA.TRIGGERS WHERE trigger_name = 'trg2'| 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 @@ -2057,7 +2057,7 @@ INSERT INTO log VALUES(@@character_set_client); SET @b1 = 'текст'; SET @b2 = 'текст'; SET @b3 = 'текст'; -END ROW AFTER NULL NULL OLD NEW CREATED ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION root@localhost utf8 utf8_general_ci utf8_unicode_ci +END ROW AFTER NULL NULL OLD NEW CREATED ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION root@localhost utf8 utf8_general_ci utf8_unicode_ci SELECT * FROM INFORMATION_SCHEMA.TRIGGERS WHERE trigger_name = 'trg3'| 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 @@ -2072,7 +2072,7 @@ INSERT INTO log VALUES(@@character_set_client); SET @a1 = 'текст'; SET @a2 = 'текст'; SET @a3 = 'текст'; -END ROW BEFORE NULL NULL OLD NEW CREATED ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION root@localhost utf8 utf8_general_ci utf8_unicode_ci +END ROW BEFORE NULL NULL OLD NEW CREATED ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION root@localhost utf8 utf8_general_ci utf8_unicode_ci SELECT * FROM INFORMATION_SCHEMA.TRIGGERS WHERE trigger_name = 'trg4'| 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 @@ -2087,7 +2087,7 @@ INSERT INTO log VALUES(@@character_set_client); SET @b1 = 'текст'; SET @b2 = 'текст'; SET @b3 = 'текст'; -END ROW AFTER NULL NULL OLD NEW CREATED ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION root@localhost utf8 utf8_general_ci utf8_unicode_ci +END ROW AFTER NULL NULL OLD NEW CREATED ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION root@localhost utf8 utf8_general_ci utf8_unicode_ci SET @a1 = '1'| @@ -2494,7 +2494,7 @@ ALTER DATABASE `mysqltest1` CHARACTER SET utf8 COLLATE utf8_unicode_ci ;; /*!50003 SET character_set_results = utf8 */ ;; /*!50003 SET collation_connection = utf8_general_ci */ ;; /*!50003 SET @saved_sql_mode = @@sql_mode */ ;; -/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ;; +/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ;; /*!50003 SET @saved_time_zone = @@time_zone */ ;; /*!50003 SET time_zone = 'SYSTEM' */ ;; /*!50106 CREATE*/ /*!50117 DEFINER=`root`@`localhost`*/ /*!50106 EVENT `ev1` ON SCHEDULE AT '2030-01-01 00:00:00' ON COMPLETION NOT PRESERVE ENABLE DO BEGIN @@ -2522,7 +2522,7 @@ ALTER DATABASE `mysqltest1` CHARACTER SET utf8 COLLATE utf8_unicode_ci ;; /*!50003 SET character_set_results = utf8 */ ;; /*!50003 SET collation_connection = utf8_general_ci */ ;; /*!50003 SET @saved_sql_mode = @@sql_mode */ ;; -/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ;; +/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ;; /*!50003 SET @saved_time_zone = @@time_zone */ ;; /*!50003 SET time_zone = 'SYSTEM' */ ;; /*!50106 CREATE*/ /*!50117 DEFINER=`root`@`localhost`*/ /*!50106 EVENT `ev2` ON SCHEDULE AT '2030-01-01 00:00:00' ON COMPLETION NOT PRESERVE ENABLE DO BEGIN @@ -2561,7 +2561,7 @@ ALTER DATABASE `mysqltest2` CHARACTER SET utf8 COLLATE utf8_unicode_ci ;; /*!50003 SET character_set_results = utf8 */ ;; /*!50003 SET collation_connection = utf8_general_ci */ ;; /*!50003 SET @saved_sql_mode = @@sql_mode */ ;; -/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ;; +/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ;; /*!50003 SET @saved_time_zone = @@time_zone */ ;; /*!50003 SET time_zone = 'SYSTEM' */ ;; /*!50106 CREATE*/ /*!50117 DEFINER=`root`@`localhost`*/ /*!50106 EVENT `ev3` ON SCHEDULE AT '2030-01-01 00:00:00' ON COMPLETION NOT PRESERVE ENABLE DO BEGIN @@ -2589,7 +2589,7 @@ ALTER DATABASE `mysqltest2` CHARACTER SET utf8 COLLATE utf8_unicode_ci ;; /*!50003 SET character_set_results = utf8 */ ;; /*!50003 SET collation_connection = utf8_general_ci */ ;; /*!50003 SET @saved_sql_mode = @@sql_mode */ ;; -/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ;; +/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ;; /*!50003 SET @saved_time_zone = @@time_zone */ ;; /*!50003 SET time_zone = 'SYSTEM' */ ;; /*!50106 CREATE*/ /*!50117 DEFINER=`root`@`localhost`*/ /*!50106 EVENT `ev4` ON SCHEDULE AT '2030-01-01 00:00:00' ON COMPLETION NOT PRESERVE ENABLE DO BEGIN @@ -2634,7 +2634,7 @@ set names utf8| SHOW CREATE EVENT ev1| Event sql_mode time_zone Create Event character_set_client collation_connection Database Collation -ev1 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION SYSTEM CREATE DEFINER=`root`@`localhost` EVENT `ev1` ON SCHEDULE AT '2030-01-01 00:00:00' ON COMPLETION NOT PRESERVE ENABLE DO BEGIN +ev1 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION SYSTEM CREATE DEFINER=`root`@`localhost` EVENT `ev1` ON SCHEDULE AT '2030-01-01 00:00:00' ON COMPLETION NOT PRESERVE ENABLE DO BEGIN DECLARE перем1 CHAR(10); SELECT COLLATION(перем1) AS c1, @@ -2647,7 +2647,7 @@ END utf8 utf8_general_ci utf8_unicode_ci SHOW CREATE EVENT ev2| Event sql_mode time_zone Create Event character_set_client collation_connection Database Collation -ev2 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION SYSTEM CREATE DEFINER=`root`@`localhost` EVENT `ev2` ON SCHEDULE AT '2030-01-01 00:00:00' ON COMPLETION NOT PRESERVE ENABLE DO BEGIN +ev2 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION SYSTEM CREATE DEFINER=`root`@`localhost` EVENT `ev2` ON SCHEDULE AT '2030-01-01 00:00:00' ON COMPLETION NOT PRESERVE ENABLE DO BEGIN DECLARE перем1 CHAR(10) CHARACTER SET utf8; SELECT COLLATION(перем1) AS c1, @@ -2660,7 +2660,7 @@ END utf8 utf8_general_ci utf8_unicode_ci SHOW CREATE EVENT mysqltest2.ev3| Event sql_mode time_zone Create Event character_set_client collation_connection Database Collation -ev3 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION SYSTEM CREATE DEFINER=`root`@`localhost` EVENT `ev3` ON SCHEDULE AT '2030-01-01 00:00:00' ON COMPLETION NOT PRESERVE ENABLE DO BEGIN +ev3 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION SYSTEM CREATE DEFINER=`root`@`localhost` EVENT `ev3` ON SCHEDULE AT '2030-01-01 00:00:00' ON COMPLETION NOT PRESERVE ENABLE DO BEGIN DECLARE перем1 CHAR(10) CHARACTER SET utf8; SELECT COLLATION(перем1) AS c1, @@ -2673,7 +2673,7 @@ END utf8 utf8_general_ci utf8_unicode_ci SHOW CREATE EVENT mysqltest2.ev3| Event sql_mode time_zone Create Event character_set_client collation_connection Database Collation -ev3 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION SYSTEM CREATE DEFINER=`root`@`localhost` EVENT `ev3` ON SCHEDULE AT '2030-01-01 00:00:00' ON COMPLETION NOT PRESERVE ENABLE DO BEGIN +ev3 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION SYSTEM CREATE DEFINER=`root`@`localhost` EVENT `ev3` ON SCHEDULE AT '2030-01-01 00:00:00' ON COMPLETION NOT PRESERVE ENABLE DO BEGIN DECLARE перем1 CHAR(10) CHARACTER SET utf8; SELECT COLLATION(перем1) AS c1, @@ -2711,7 +2711,7 @@ COLLATION( 'текст') AS c3, COLLATION( 'текст') AS c4, @@collation_connection AS c5, @@character_set_client AS c6; -END ONE TIME 2030-01-01 00:00:00 NULL NULL ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION NULL NULL ENABLED NOT PRESERVE CREATED LAST_ALTERED NULL 1 utf8 utf8_general_ci utf8_unicode_ci +END ONE TIME 2030-01-01 00:00:00 NULL NULL ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION NULL NULL ENABLED NOT PRESERVE CREATED LAST_ALTERED NULL 1 utf8 utf8_general_ci utf8_unicode_ci SELECT * FROM INFORMATION_SCHEMA.EVENTS WHERE event_name = 'ev2'| EVENT_CATALOG EVENT_SCHEMA EVENT_NAME DEFINER TIME_ZONE EVENT_BODY EVENT_DEFINITION EVENT_TYPE EXECUTE_AT INTERVAL_VALUE INTERVAL_FIELD SQL_MODE STARTS ENDS STATUS ON_COMPLETION CREATED LAST_ALTERED LAST_EXECUTED EVENT_COMMENT ORIGINATOR CHARACTER_SET_CLIENT COLLATION_CONNECTION DATABASE_COLLATION @@ -2724,7 +2724,7 @@ COLLATION( 'текст') AS c3, COLLATION( 'текст') AS c4, @@collation_connection AS c5, @@character_set_client AS c6; -END ONE TIME 2030-01-01 00:00:00 NULL NULL ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION NULL NULL ENABLED NOT PRESERVE CREATED LAST_ALTERED NULL 1 utf8 utf8_general_ci utf8_unicode_ci +END ONE TIME 2030-01-01 00:00:00 NULL NULL ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION NULL NULL ENABLED NOT PRESERVE CREATED LAST_ALTERED NULL 1 utf8 utf8_general_ci utf8_unicode_ci SELECT * FROM INFORMATION_SCHEMA.EVENTS WHERE event_name = 'ev3'| EVENT_CATALOG EVENT_SCHEMA EVENT_NAME DEFINER TIME_ZONE EVENT_BODY EVENT_DEFINITION EVENT_TYPE EXECUTE_AT INTERVAL_VALUE INTERVAL_FIELD SQL_MODE STARTS ENDS STATUS ON_COMPLETION CREATED LAST_ALTERED LAST_EXECUTED EVENT_COMMENT ORIGINATOR CHARACTER_SET_CLIENT COLLATION_CONNECTION DATABASE_COLLATION @@ -2737,7 +2737,7 @@ COLLATION( 'текст') AS c3, COLLATION( 'текст') AS c4, @@collation_connection AS c5, @@character_set_client AS c6; -END ONE TIME 2030-01-01 00:00:00 NULL NULL ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION NULL NULL ENABLED NOT PRESERVE CREATED LAST_ALTERED NULL 1 utf8 utf8_general_ci utf8_unicode_ci +END ONE TIME 2030-01-01 00:00:00 NULL NULL ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION NULL NULL ENABLED NOT PRESERVE CREATED LAST_ALTERED NULL 1 utf8 utf8_general_ci utf8_unicode_ci SELECT * FROM INFORMATION_SCHEMA.EVENTS WHERE event_name = 'ev4'| EVENT_CATALOG EVENT_SCHEMA EVENT_NAME DEFINER TIME_ZONE EVENT_BODY EVENT_DEFINITION EVENT_TYPE EXECUTE_AT INTERVAL_VALUE INTERVAL_FIELD SQL_MODE STARTS ENDS STATUS ON_COMPLETION CREATED LAST_ALTERED LAST_EXECUTED EVENT_COMMENT ORIGINATOR CHARACTER_SET_CLIENT COLLATION_CONNECTION DATABASE_COLLATION @@ -2750,7 +2750,7 @@ COLLATION( 'текст') AS c3, COLLATION( 'текст') AS c4, @@collation_connection AS c5, @@character_set_client AS c6; -END ONE TIME 2030-01-01 00:00:00 NULL NULL ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION NULL NULL ENABLED NOT PRESERVE CREATED LAST_ALTERED NULL 1 utf8 utf8_general_ci utf8_unicode_ci +END ONE TIME 2030-01-01 00:00:00 NULL NULL ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION NULL NULL ENABLED NOT PRESERVE CREATED LAST_ALTERED NULL 1 utf8 utf8_general_ci utf8_unicode_ci ------------------------------------------------------------------- DDL statements within stored routine. diff --git a/mysql-test/r/mysqldump.result b/mysql-test/r/mysqldump.result index 281e3d8330c5..6c63eac173a9 100644 --- a/mysql-test/r/mysqldump.result +++ b/mysql-test/r/mysqldump.result @@ -2394,7 +2394,7 @@ UNLOCK TABLES; /*!50003 SET character_set_results = latin1 */ ; /*!50003 SET collation_connection = latin1_swedish_ci */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; -/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ; +/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; /*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 trigger trg1 before insert on t1 for each row begin @@ -2415,7 +2415,7 @@ DELIMITER ; /*!50003 SET character_set_results = latin1 */ ; /*!50003 SET collation_connection = latin1_swedish_ci */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; -/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ; +/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; /*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 trigger trg2 before update on t1 for each row begin if old.a % 2 = 0 then set new.b := 12; end if; @@ -2432,7 +2432,7 @@ DELIMITER ; /*!50003 SET character_set_results = latin1 */ ; /*!50003 SET collation_connection = latin1_swedish_ci */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; -/*!50003 SET sql_mode = 'STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ; +/*!50003 SET sql_mode = 'STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; /*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 trigger trg3 after update on t1 for each row begin @@ -2464,7 +2464,7 @@ UNLOCK TABLES; /*!50003 SET character_set_results = latin1 */ ; /*!50003 SET collation_connection = latin1_swedish_ci */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; -/*!50003 SET sql_mode = 'STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ; +/*!50003 SET sql_mode = 'STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; /*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 trigger trg4 before insert on t2 for each row begin @@ -2550,10 +2550,10 @@ if new.a > 10 then set new.a := 10; set new.a := 11; end if; -end BEFORE # ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION root@localhost latin1 latin1_swedish_ci latin1_swedish_ci +end BEFORE # ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION root@localhost latin1 latin1_swedish_ci latin1_swedish_ci trg2 UPDATE t1 begin if old.a % 2 = 0 then set new.b := 12; end if; -end BEFORE # ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION root@localhost latin1 latin1_swedish_ci latin1_swedish_ci +end BEFORE # ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION root@localhost latin1 latin1_swedish_ci latin1_swedish_ci trg3 UPDATE t1 begin if new.a = -1 then set @fired:= "Yes"; @@ -2596,7 +2596,7 @@ a2 SHOW TRIGGERS; Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation testref INSERT test1 BEGIN -INSERT INTO test2 SET a2 = NEW.a1; END BEFORE # ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION root@localhost latin1 latin1_swedish_ci latin1_swedish_ci +INSERT INTO test2 SET a2 = NEW.a1; END BEFORE # ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION root@localhost latin1 latin1_swedish_ci latin1_swedish_ci SELECT * FROM `test1`; a1 1 @@ -2670,7 +2670,7 @@ UNLOCK TABLES; /*!50003 SET character_set_results = latin1 */ ; /*!50003 SET collation_connection = latin1_swedish_ci */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; -/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ; +/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; CREATE DEFINER=`root`@`localhost` FUNCTION `bug9056_func1`(a INT, b INT) RETURNS int(11) RETURN a+b ;; @@ -2687,7 +2687,7 @@ DELIMITER ; /*!50003 SET character_set_results = latin1 */ ; /*!50003 SET collation_connection = latin1_swedish_ci */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; -/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ; +/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; CREATE DEFINER=`root`@`localhost` FUNCTION `bug9056_func2`(f1 char binary) RETURNS char(1) CHARSET latin1 begin @@ -2724,7 +2724,7 @@ DELIMITER ; /*!50003 SET character_set_results = latin1 */ ; /*!50003 SET collation_connection = latin1_swedish_ci */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; -/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ; +/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; CREATE DEFINER=`root`@`localhost` PROCEDURE `bug9056_proc1`(IN a INT, IN b INT, OUT c INT) BEGIN SELECT a+b INTO c; end ;; @@ -2741,7 +2741,7 @@ DELIMITER ; /*!50003 SET character_set_results = latin1 */ ; /*!50003 SET collation_connection = latin1_swedish_ci */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; -/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ; +/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; CREATE DEFINER=`root`@`localhost` PROCEDURE `bug9056_proc2`(OUT a INT) BEGIN @@ -3725,7 +3725,7 @@ create procedure mysqldump_test_db.sp1() select 'hello'; /*!50003 SET character_set_results = latin1 */ ; /*!50003 SET collation_connection = latin1_swedish_ci */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; -/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ; +/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; CREATE DEFINER=`user1`@`%` PROCEDURE `sp1`() select 'hello' ;; @@ -5682,3 +5682,104 @@ master_info_repository FILE SHOW VARIABLES LIKE "relay_log_info_repository"; Variable_name Value relay_log_info_repository FILE +# +# Bug#27931181: RESTAURE DUMP CREATED WITH 5.7.22 ON 8.0.11 +# +CREATE DATABASE bug27931181; +USE bug27931181; +CREATE TABLE t1 (a INT); +SET sql_mode='NO_AUTO_CREATE_USER'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +CREATE TRIGGER trig1 BEFORE INSERT ON t1 FOR EACH ROW SET NEW.a = 1; +SET sql_mode='NO_AUTO_CREATE_USER,ONLY_FULL_GROUP_BY'; +CREATE PROCEDURE p1() SELECT 1; +SET sql_mode=@@global.sql_mode; +CREATE FUNCTION f1() RETURNS INT RETURN 1; + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `bug27931181` /*!40100 DEFAULT CHARACTER SET latin1 */; + +USE `bug27931181`; +DROP TABLE IF EXISTS `t1`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +LOCK TABLES `t1` WRITE; +/*!40000 ALTER TABLE `t1` DISABLE KEYS */; +/*!40000 ALTER TABLE `t1` ENABLE KEYS */; +UNLOCK TABLES; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = latin1 */ ; +/*!50003 SET character_set_results = latin1 */ ; +/*!50003 SET collation_connection = latin1_swedish_ci */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = '' */ ; +DELIMITER ;; +/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER trig1 BEFORE INSERT ON t1 FOR EACH ROW SET NEW.a = 1 */;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 DROP FUNCTION IF EXISTS `f1` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = latin1 */ ; +/*!50003 SET character_set_results = latin1 */ ; +/*!50003 SET collation_connection = latin1_swedish_ci */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ; +DELIMITER ;; +CREATE DEFINER=`root`@`localhost` FUNCTION `f1`() RETURNS int(11) +RETURN 1 ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 DROP PROCEDURE IF EXISTS `p1` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = latin1 */ ; +/*!50003 SET character_set_results = latin1 */ ; +/*!50003 SET collation_connection = latin1_swedish_ci */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY' */ ; +DELIMITER ;; +CREATE DEFINER=`root`@`localhost` PROCEDURE `p1`() +SELECT 1 ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + +DROP DATABASE bug27931181; diff --git a/mysql-test/r/trigger_wl3253.result b/mysql-test/r/trigger_wl3253.result index 01e86763ed93..3d09bc44f847 100644 --- a/mysql-test/r/trigger_wl3253.result +++ b/mysql-test/r/trigger_wl3253.result @@ -322,7 +322,7 @@ CREATE TABLE `t1` ( /*!50003 SET character_set_results = latin1 */ ; /*!50003 SET collation_connection = latin1_swedish_ci */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; -/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ; +/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; /*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER tr1_bi BEFORE INSERT ON t1 FOR EACH ROW SET @a:=1 */;; DELIMITER ; @@ -337,7 +337,7 @@ DELIMITER ; /*!50003 SET character_set_results = latin1 */ ; /*!50003 SET collation_connection = latin1_swedish_ci */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; -/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ; +/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; /*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER tr2_bi BEFORE INSERT ON t1 FOR EACH ROW SET @a:=2 */;; DELIMITER ; @@ -352,7 +352,7 @@ DELIMITER ; /*!50003 SET character_set_results = latin1 */ ; /*!50003 SET collation_connection = latin1_swedish_ci */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; -/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ; +/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; /*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER tr1_bu BEFORE UPDATE ON t1 FOR EACH ROW SET @a:=3 */;; DELIMITER ; @@ -384,7 +384,7 @@ CREATE TABLE `t1` ( /*!50003 SET character_set_results = latin1 */ ; /*!50003 SET collation_connection = latin1_swedish_ci */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; -/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ; +/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; /*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER tr0_bi BEFORE INSERT ON t1 FOR EACH ROW SET @a:=0 */;; DELIMITER ; @@ -399,7 +399,7 @@ DELIMITER ; /*!50003 SET character_set_results = latin1 */ ; /*!50003 SET collation_connection = latin1_swedish_ci */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; -/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ; +/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; /*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER tr1_bi BEFORE INSERT ON t1 FOR EACH ROW SET @a:=1 */;; DELIMITER ; @@ -414,7 +414,7 @@ DELIMITER ; /*!50003 SET character_set_results = latin1 */ ; /*!50003 SET collation_connection = latin1_swedish_ci */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; -/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ; +/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; /*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER tr1_1_bi BEFORE INSERT ON t1 FOR EACH ROW SET @a:=0 */;; DELIMITER ; @@ -429,7 +429,7 @@ DELIMITER ; /*!50003 SET character_set_results = latin1 */ ; /*!50003 SET collation_connection = latin1_swedish_ci */ ; /*!50003 SET @saved_sql_mode = @@sql_mode */ ; -/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ; +/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' */ ; DELIMITER ;; /*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER tr2_bi BEFORE INSERT ON t1 FOR EACH ROW SET @a:=2 */;; DELIMITER ; diff --git a/mysql-test/t/mysqldump.test b/mysql-test/t/mysqldump.test index 570b4ebb471d..8bd34e5f845c 100644 --- a/mysql-test/t/mysqldump.test +++ b/mysql-test/t/mysqldump.test @@ -2719,3 +2719,21 @@ SET GLOBAL relay_log_info_repository= 'FILE'; SHOW VARIABLES LIKE "master_info_repository"; SHOW VARIABLES LIKE "relay_log_info_repository"; + +--echo # +--echo # Bug#27931181: RESTAURE DUMP CREATED WITH 5.7.22 ON 8.0.11 +--echo # + +CREATE DATABASE bug27931181; +USE bug27931181; +CREATE TABLE t1 (a INT); +SET sql_mode='NO_AUTO_CREATE_USER'; +CREATE TRIGGER trig1 BEFORE INSERT ON t1 FOR EACH ROW SET NEW.a = 1; +SET sql_mode='NO_AUTO_CREATE_USER,ONLY_FULL_GROUP_BY'; +CREATE PROCEDURE p1() SELECT 1; +SET sql_mode=@@global.sql_mode; +CREATE FUNCTION f1() RETURNS INT RETURN 1; + +--exec $MYSQL_DUMP --skip-comments --databases --events --triggers --routines bug27931181 +#cleanup +DROP DATABASE bug27931181; From 8144b1c3da5a7ab7b11ecf9defb8d0bfbf085537 Mon Sep 17 00:00:00 2001 From: Venkatesh Duggirala Date: Mon, 2 Jul 2018 19:14:21 +0530 Subject: [PATCH 1010/1221] Bug#27610678 SEMI-SYNC REPLICATION DOESN'T WORK FOR MINUTES AFTER RESTART REPLICATION Post push fix: Fixing test script for valgrind run (adding suppression) --- mysql-test/include/uninstall_semisync_master.inc | 7 +++++++ .../suite/rpl/r/rpl_semi_sync_add_remove_slaves.result | 1 + .../suite/rpl/t/rpl_semi_sync_add_remove_slaves.test | 1 + 3 files changed, 9 insertions(+) diff --git a/mysql-test/include/uninstall_semisync_master.inc b/mysql-test/include/uninstall_semisync_master.inc index 2ececc4ac49e..ffd0adf82309 100644 --- a/mysql-test/include/uninstall_semisync_master.inc +++ b/mysql-test/include/uninstall_semisync_master.inc @@ -7,6 +7,13 @@ --disable_query_log --disable_warnings + +# wait till semisync clients are '0' before uninstalling +# semisync master plugin. +--let $status_var= Rpl_semi_sync_master_clients +--let $status_var_value= 0 +--source include/wait_for_status_var.inc + UNINSTALL PLUGIN rpl_semi_sync_master; --source include/end_include_file.inc diff --git a/mysql-test/suite/rpl/r/rpl_semi_sync_add_remove_slaves.result b/mysql-test/suite/rpl/r/rpl_semi_sync_add_remove_slaves.result index f82ff49835e8..fd4789ef3929 100644 --- a/mysql-test/suite/rpl/r/rpl_semi_sync_add_remove_slaves.result +++ b/mysql-test/suite/rpl/r/rpl_semi_sync_add_remove_slaves.result @@ -26,6 +26,7 @@ Note #### Storing MySQL user name or password information in the master info rep # # 1. Initial data. # +call mtr.add_suppression("Timeout waiting for reply of binlog"); CREATE TABLE t1(c1 INT); include/rpl_sync.inc # diff --git a/mysql-test/suite/rpl/t/rpl_semi_sync_add_remove_slaves.test b/mysql-test/suite/rpl/t/rpl_semi_sync_add_remove_slaves.test index 498357650864..0692438596f0 100644 --- a/mysql-test/suite/rpl/t/rpl_semi_sync_add_remove_slaves.test +++ b/mysql-test/suite/rpl/t/rpl_semi_sync_add_remove_slaves.test @@ -36,6 +36,7 @@ --echo # --echo # 1. Initial data. --echo # +call mtr.add_suppression("Timeout waiting for reply of binlog"); CREATE TABLE t1(c1 INT); --source include/rpl_sync.inc From 42e748c0df8e7183f6fe2eeb02f8f017de745420 Mon Sep 17 00:00:00 2001 From: Rahul Malik Date: Tue, 3 Jul 2018 10:52:41 +0530 Subject: [PATCH 1011/1221] Bug#26876608 MYSQL CRASH:CACHE_POLICY=CACHING|INNODB_ONLY & SET GLOBAL INNODB_API_TRX_LEVEL=1 PROBLEM: Assert in innodb with innodb_api_trx_level=1 for the case when the transaction is not committed in SE and memcached api tries to read that. ANALYSIS: in row_search_mvcc function, there is check if mysql_handler->end_range is not null. for the memcached transaction, mysql_handler is not set. FIX: put addition check if the transaction is started from memcached or not. REVIEWED BY: Jimmy Yang RB: 19922 --- storage/innobase/row/row0sel.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/storage/innobase/row/row0sel.cc b/storage/innobase/row/row0sel.cc index 706b54369819..8c61e959a4dd 100644 --- a/storage/innobase/row/row0sel.cc +++ b/storage/innobase/row/row0sel.cc @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1997, 2017, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1997, 2018, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2008, Google Inc. Portions of this file contain modifications contributed and copyrighted by @@ -4368,7 +4368,7 @@ row_search_for_mysql( passed to InnoDB when there is no ICP and number of loops in row_search_for_mysql for rows found but not reporting due to search views etc. */ - if (prev_rec != NULL + if (prev_rec != NULL && !prebuilt->innodb_api && prebuilt->mysql_handler->end_range != NULL && prebuilt->idx_cond == NULL && end_loop >= 100) { From 28b052190e377bdfe176e1dc71d268b94c832263 Mon Sep 17 00:00:00 2001 From: Anushree Prakash B Date: Tue, 3 Jul 2018 15:20:03 +0530 Subject: [PATCH 1012/1221] Bug#28093271 - MYSQL OVERLOADS -b SHORT OPTION: --BINARY-AS-HEX, --NO-BEEP DESCRIPTION: ============ mysql uses -b as the short-option form for two different long options i.e. no-beep and binary-as-hex. This can result in unintended results if the short form -b is used instead of the specific long option name. FIX: ==== -b will now be used for one long option only i.e --no-beep. The option binary-as-hex will not have any short option and should be provided as a complete name. --- client/mysql.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/mysql.cc b/client/mysql.cc index 9c54f5641922..bc32a58f37ec 100644 --- a/client/mysql.cc +++ b/client/mysql.cc @@ -1392,7 +1392,7 @@ static struct my_option my_long_options[] = {"batch", 'B', "Don't use history file. Disable interactive behavior. (Enables --silent.)", 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}, - {"binary-as-hex", 'b', "Print binary data as hex", &opt_binhex, &opt_binhex, + {"binary-as-hex", 0, "Print binary data as hex", &opt_binhex, &opt_binhex, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, {"character-sets-dir", OPT_CHARSETS_DIR, "Directory for character set files.", &charsets_dir, From de2dc9139426f53d736d82034729fa7fda62bf62 Mon Sep 17 00:00:00 2001 From: Alexey Bychko Date: Tue, 3 Jul 2018 15:20:38 +0700 Subject: [PATCH 1013/1221] [*] PS-4533 fixed hardcoded paths in audit log tests to allow mtr from both in-tree and installed directory --- plugin/audit_log/tests/mtr/audit_log_csv.test | 2 +- plugin/audit_log/tests/mtr/audit_log_json.test | 2 +- plugin/audit_log/tests/mtr/audit_log_new.test | 2 +- plugin/audit_log/tests/mtr/audit_log_old.test | 2 +- plugin/audit_log/tests/mtr/audit_log_rotate.test | 8 ++++---- plugin/audit_log/tests/mtr/audit_log_syslog.test | 2 +- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/plugin/audit_log/tests/mtr/audit_log_csv.test b/plugin/audit_log/tests/mtr/audit_log_csv.test index 9dfe885c6cee..ef85066ccada 100644 --- a/plugin/audit_log/tests/mtr/audit_log_csv.test +++ b/plugin/audit_log/tests/mtr/audit_log_csv.test @@ -7,7 +7,7 @@ SET GLOBAL audit_log_flush=ON; --remove_file $MYSQLD_DATADIR/test_audit.log SET GLOBAL audit_log_flush=ON; ---source ../plugin/audit_log/tests/mtr/audit_log_events.inc +--source audit_log_events.inc --move_file $MYSQLD_DATADIR/test_audit.log $MYSQLD_DATADIR/test_audit_csv.log set global audit_log_flush= ON; diff --git a/plugin/audit_log/tests/mtr/audit_log_json.test b/plugin/audit_log/tests/mtr/audit_log_json.test index 54d1ee015c31..ac3ae98060d6 100644 --- a/plugin/audit_log/tests/mtr/audit_log_json.test +++ b/plugin/audit_log/tests/mtr/audit_log_json.test @@ -8,7 +8,7 @@ SET GLOBAL audit_log_flush=ON; SET GLOBAL audit_log_flush=ON; --let $test_control_chars=1; ---source ../plugin/audit_log/tests/mtr/audit_log_events.inc +--source audit_log_events.inc --move_file $MYSQLD_DATADIR/test_audit.log $MYSQLD_DATADIR/test_audit_json.log set global audit_log_flush= ON; diff --git a/plugin/audit_log/tests/mtr/audit_log_new.test b/plugin/audit_log/tests/mtr/audit_log_new.test index 423f4cf3d9aa..4a73d0ddcb79 100644 --- a/plugin/audit_log/tests/mtr/audit_log_new.test +++ b/plugin/audit_log/tests/mtr/audit_log_new.test @@ -7,7 +7,7 @@ SET GLOBAL audit_log_flush=ON; --remove_file $MYSQLD_DATADIR/test_audit.log SET GLOBAL audit_log_flush=ON; ---source ../plugin/audit_log/tests/mtr/audit_log_events.inc +--source audit_log_events.inc --move_file $MYSQLD_DATADIR/test_audit.log $MYSQLD_DATADIR/test_audit_new.log set global audit_log_flush= ON; diff --git a/plugin/audit_log/tests/mtr/audit_log_old.test b/plugin/audit_log/tests/mtr/audit_log_old.test index 71c39d45ed01..fc7ea05b950d 100644 --- a/plugin/audit_log/tests/mtr/audit_log_old.test +++ b/plugin/audit_log/tests/mtr/audit_log_old.test @@ -7,7 +7,7 @@ SET GLOBAL audit_log_flush=ON; --remove_file $MYSQLD_DATADIR/test_audit.log SET GLOBAL audit_log_flush=ON; ---source ../plugin/audit_log/tests/mtr/audit_log_events.inc +--source audit_log_events.inc --move_file $MYSQLD_DATADIR/test_audit.log $MYSQLD_DATADIR/test_audit_old.log set global audit_log_flush= ON; diff --git a/plugin/audit_log/tests/mtr/audit_log_rotate.test b/plugin/audit_log/tests/mtr/audit_log_rotate.test index 5f79ad30f769..c2543b736097 100644 --- a/plugin/audit_log/tests/mtr/audit_log_rotate.test +++ b/plugin/audit_log/tests/mtr/audit_log_rotate.test @@ -5,10 +5,10 @@ let MYSQLD_DATADIR= $MYSQLD_DATADIR; --disable_result_log --disable_query_log ---source ../plugin/audit_log/tests/mtr/audit_log_events.inc ---source ../plugin/audit_log/tests/mtr/audit_log_events.inc ---source ../plugin/audit_log/tests/mtr/audit_log_events.inc ---source ../plugin/audit_log/tests/mtr/audit_log_events.inc +--source audit_log_events.inc +--source audit_log_events.inc +--source audit_log_events.inc +--source audit_log_events.inc --enable_query_log --enable_result_log diff --git a/plugin/audit_log/tests/mtr/audit_log_syslog.test b/plugin/audit_log/tests/mtr/audit_log_syslog.test index c6dbab3f651b..8c9152ccfc02 100644 --- a/plugin/audit_log/tests/mtr/audit_log_syslog.test +++ b/plugin/audit_log/tests/mtr/audit_log_syslog.test @@ -1,3 +1,3 @@ --source include/not_embedded.inc ---source ../plugin/audit_log/tests/mtr/audit_log_events.inc +--source audit_log_events.inc From 7d6110ec44aef9b72b9925e00f381709b963cc8c Mon Sep 17 00:00:00 2001 From: Sujatha Sivakumar Date: Fri, 6 Jul 2018 12:49:14 +0530 Subject: [PATCH 1014/1221] Bug#27411175: RESET SLAVE ALL DOES NOT CLEAR MYSQL.SLAVE_RELAY_LOG_INFO Problem: ======= RESET SLAVE / RESET SLAVE ALL will not remove errant relay log entries from the mysql.slave_relay_log_info table for group replication channels. Analysis: ========= Existing code for RESET SLAVE / RESET SLAVE ALL command doesn't include group replication specific 'group_replication_applier' and 'group_replication_recovery' channels during RESET SLAVE [ALL] operation. Because of this the group replication specific channels are not affected by RESET SLAVE [ALL] command. Fix: === Implemented code changes to include group replication specific channels to be part of RESET SLAVE [ALL] command. Please note that the RESET SLAVE [ALL] command does the RESET operation only when the group member is OFFLINE. Executing RESET SLAVE [ALL] on an ONLINE group member will result in an error. Bug#20280946: RESTARTING SLAVE SERVER POST 'RESET SLAVE' COMMAND, CLEANS UP SLAVE SETTING Problem: ======== If we restart slave server post 'RESET SLAVE' command, then slave server forgets the slave configuration. We need to run CHM command again to do the replication setup. Analysis: ========= RESET SLAVE followed by a restart of the slave has the same effect as RESET SLAVE ALL command. It will clear recovery channel specific in memory credentials. In case of highly available systems like GR reset slave for cleanup followed by a server crash will prevent the member from rejoining the group as the recovery credentials are now gone. Fix: === During RESET SLAVE command identify the channel which is in initialized state and do the clean up for that channel. Preserve the channel specific connection credentials in crash safe master info repository table. This will ensure that the credentials are always available in spite of restarts or crash. BUG#27636289: RPL BREAKS WITH RESTART AFTER RESET SLAVE IF --RELAY-LOG-PURGE=0 Problem: ======== If slave server is restarted followed by reset master on both master and slave, reset slave on slave server. slave goes to an ERROR state as shown below. Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Slave has more GTIDs than the master has, using the master's SERVER_UUID. This may indicate that the end of the binary log was truncated or that the last binary log file was lost, e.g., after a power or disk failure when sync_binlog != 1. The master may or may not have rolled back transactions that were already replica' The slave fails with the above ERROR even though master and slave both has empty GLOBAL.GTID_EXECUTED. Analysis: ======== The relay log purge procedure called by RESET SLAVE is purging all existing relay log files and generating the first one before the received_gtid_set of the channel be cleared. So, the received_gtid_set being used to generate the PREVIOUS_GTIDS of the first relay log file after a RESET SLAVE contains old (garbage) information. When this first relay log file with wrong PREVIOUS_GTIDS is still present after a slave server restart, the slave will assume use its PREVIOUS_GTIDS, leading to ER_MASTER_FATAL_ERROR_READING_BINLOG with the following error message: "Slave has more GTIDs than the master has, using the master's SERVER_UUID." Fix: === During RESET SLAVE firstly cleanup the received_gtid_set and then purge the relay log files. --- .../rpl/r/rpl_multi_source_relay_log.result | 12 +- ...rpl_multi_source_relay_log_recovery.result | 2 +- .../suite/rpl/r/rpl_reset_restart.result | 19 ++++ .../rpl/t/rpl_multi_source_relay_log.test | 12 +- .../rpl_multi_source_relay_log_recovery.test | 20 ++-- .../suite/rpl/t/rpl_reset_restart-slave.opt | 2 + mysql-test/suite/rpl/t/rpl_reset_restart.test | 47 ++++++++ .../tests/mtr/r/gr_recovery_channel.result | 1 + .../tests/mtr/r/gr_reset_slave_channel.result | 21 ++++ .../tests/mtr/t/gr_recovery_channel.test | 6 +- .../tests/mtr/t/gr_reset_slave_channel.test | 107 +++++++++++++++++- sql/rpl_mi.cc | 22 +++- sql/rpl_mi.h | 5 +- sql/rpl_rli.cc | 24 ++-- sql/rpl_slave.cc | 86 +++++++++++--- 15 files changed, 330 insertions(+), 56 deletions(-) create mode 100644 mysql-test/suite/rpl/r/rpl_reset_restart.result create mode 100644 mysql-test/suite/rpl/t/rpl_reset_restart-slave.opt create mode 100644 mysql-test/suite/rpl/t/rpl_reset_restart.test diff --git a/mysql-test/suite/rpl/r/rpl_multi_source_relay_log.result b/mysql-test/suite/rpl/r/rpl_multi_source_relay_log.result index 5efbd543b05c..99be954fd295 100644 --- a/mysql-test/suite/rpl/r/rpl_multi_source_relay_log.result +++ b/mysql-test/suite/rpl/r/rpl_multi_source_relay_log.result @@ -1,7 +1,9 @@ ######################################################################### # Verify RESET SLAVE and RESET SLAVE FOR CHANNEL -# - deletes all relay log files of named channels. +# - deletes all relay log files of named channels and reintializes +# them. # - For default channel, it restart the relay log from .000001 +# - For named channel, it restart the relay log from ch.000001 ######################################################################### include/master-slave.inc Warnings: @@ -18,19 +20,21 @@ FLUSH RELAY LOGS FOR CHANNEL "ch2"; # RESET SLAVE FOR CHANNEL "ch1" deletes all relay log files of ch1. # RESET SLAVE FOR CHANNEL "ch1"; +slave-relay-bin-ch1.000001 +slave-relay-bin-ch1.index # # RESET SLAVE deletes all relay log files of ch2 # include/stop_slave.inc RESET SLAVE; +slave-relay-bin-ch2.000001 +slave-relay-bin-ch2.index # # RESET SLAVE resets relay log of default channel from .000001 # # -# Recreate channels "ch1" and "ch2" files again. +# Relay log files for all channels are recreated automatically. # -CHANGE MASTER TO MASTER_HOST="localhost", MASTER_PORT=10 FOR CHANNEL "ch1"; -CHANGE MASTER TO MASTER_HOST="localhost", MASTER_PORT=11 FOR CHANNEL "ch2"; # # RESET SLAVE ALL deletes all channels info and files. # diff --git a/mysql-test/suite/rpl/r/rpl_multi_source_relay_log_recovery.result b/mysql-test/suite/rpl/r/rpl_multi_source_relay_log_recovery.result index 3ebadab01c98..8556ef70fb1c 100644 --- a/mysql-test/suite/rpl/r/rpl_multi_source_relay_log_recovery.result +++ b/mysql-test/suite/rpl/r/rpl_multi_source_relay_log_recovery.result @@ -38,7 +38,7 @@ INSERT INTO d1_1.t VALUES (2, 'T5');; [connection server_2] # Now d1_1.t has two rows and d2_.t has one row. # -# Generate MTS gaps for channel2. +# Generate MTS gaps for channel3. # [connection server_3] [connection server_3] diff --git a/mysql-test/suite/rpl/r/rpl_reset_restart.result b/mysql-test/suite/rpl/r/rpl_reset_restart.result new file mode 100644 index 000000000000..15a62ff24d47 --- /dev/null +++ b/mysql-test/suite/rpl/r/rpl_reset_restart.result @@ -0,0 +1,19 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +CREATE TABLE t1 (c1 INT); +include/sync_slave_sql_with_master.inc +include/stop_slave.inc +[connection master] +RESET MASTER; +[connection slave] +RESET MASTER; +RESET SLAVE; +include/start_slave.inc +# Kill and restart +include/rpl_reconnect.inc +[connection master] +DROP TABLE t1; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_multi_source_relay_log.test b/mysql-test/suite/rpl/t/rpl_multi_source_relay_log.test index 1fdbf1fa28fe..9e2346d18308 100644 --- a/mysql-test/suite/rpl/t/rpl_multi_source_relay_log.test +++ b/mysql-test/suite/rpl/t/rpl_multi_source_relay_log.test @@ -1,7 +1,9 @@ --echo ######################################################################### --echo # Verify RESET SLAVE and RESET SLAVE FOR CHANNEL ---echo # - deletes all relay log files of named channels. +--echo # - deletes all relay log files of named channels and reintializes +--echo # them. --echo # - For default channel, it restart the relay log from .000001 +--echo # - For named channel, it restart the relay log from ch.000001 --echo ######################################################################### # The test doesn't relate to binlog format, so it is just tested on mixed mode. #Skip on group replication runs @@ -25,7 +27,7 @@ FLUSH RELAY LOGS FOR CHANNEL "ch2"; --echo # eval RESET SLAVE FOR CHANNEL "ch1"; -# all files of "ch1" are removed +# all files of "ch1" are deleted and recreated. --list_files $datadir *ch1* --echo # @@ -36,7 +38,7 @@ eval RESET SLAVE FOR CHANNEL "ch1"; --enable_warnings RESET SLAVE; -# all files of "ch2" are removed +# all files of "ch2" are deleted and recreated. --list_files $datadir *ch2* --echo # @@ -50,10 +52,8 @@ RESET SLAVE; --file_exists $relay_log_basename.000001 --echo # ---echo # Recreate channels "ch1" and "ch2" files again. +--echo # Relay log files for all channels are recreated automatically. --echo # -CHANGE MASTER TO MASTER_HOST="localhost", MASTER_PORT=10 FOR CHANNEL "ch1"; -CHANGE MASTER TO MASTER_HOST="localhost", MASTER_PORT=11 FOR CHANNEL "ch2"; # Check that files exist. --let $relay_log_base_name= `SELECT @@GLOBAL.relay_log_basename` diff --git a/mysql-test/suite/rpl/t/rpl_multi_source_relay_log_recovery.test b/mysql-test/suite/rpl/t/rpl_multi_source_relay_log_recovery.test index 79b3f2992d68..3f75f72bce57 100644 --- a/mysql-test/suite/rpl/t/rpl_multi_source_relay_log_recovery.test +++ b/mysql-test/suite/rpl/t/rpl_multi_source_relay_log_recovery.test @@ -4,27 +4,25 @@ # Problem: # ======== # Enable MTS along with crash-safe replication tables. Make sure that the -# server -# is busily inserting data with multiple threads in parallel. Shutdown mysqld -# uncleanly (kill -9 or power off server without notice). +# server is busily inserting data with multiple threads in parallel. Shutdown +# mysqld uncleanly (kill -9 or power off server without notice). # # Now users are restarting the server with --relay-log-recovery=1 to recover -# the -# crashed slave. +# the crashed slave. # # This results in following error: # ================================ -# 2015-06-24 13:49:03 3895 [ERROR] --relay-log-recovery cannot -# be executed when the slave was stopped with an error or -# killed in MTS mode; consider using RESET SLAVE or restart -# the server with --relay-log-recovery = 0 followed by -# START SLAVE UNTIL SQL_AFTER_MTS_GAPS. +# 2015-06-24 13:49:03 3895 [ERROR] --relay-log-recovery cannot be executed +# when the slave was stopped with an error or killed in MTS mode; consideri +# using RESET SLAVE or restart the server with --relay-log-recovery = 0 +# followed by # START SLAVE UNTIL SQL_AFTER_MTS_GAPS. # # i.e relay-log-recovery will not work in MTS mode. ############################################################################### # Following test demonstrates that when gaps are generated due to MTS crash # but not due to an error then recovery should be successful with # --relay-log-recovery=1 option. +# # In case of Multi source replication all channels will go through the relay # log recovery process and gaps will be filled. @@ -66,7 +64,7 @@ SET @save.innodb_lock_wait_timeout= @@global.innodb_lock_wait_timeout; --source extra/rpl_tests/rpl_multi_source_generate_mts_gap.test --echo # ---echo # Generate MTS gaps for channel2. +--echo # Generate MTS gaps for channel3. --echo # --let $rpl_connection_name= server_3 --source include/rpl_connection.inc diff --git a/mysql-test/suite/rpl/t/rpl_reset_restart-slave.opt b/mysql-test/suite/rpl/t/rpl_reset_restart-slave.opt new file mode 100644 index 000000000000..00a660e47c10 --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_reset_restart-slave.opt @@ -0,0 +1,2 @@ +--skip-slave-start=0 +--relay-log-purge=0 diff --git a/mysql-test/suite/rpl/t/rpl_reset_restart.test b/mysql-test/suite/rpl/t/rpl_reset_restart.test new file mode 100644 index 000000000000..45acaafdc672 --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_reset_restart.test @@ -0,0 +1,47 @@ +# ==== Purpose ==== +# +# This test will check if reset slave is generating correct Previous_gtids +# event in first relay log file after a RESET SLAVE. +# +# It will: +# 1) generate some workload at the master; +# 2) sync the slave with the master; +# 3) stop slave replication threads; +# 4) do RESET MASTER on the master; +# 5) do RESET MASTER on the slave; +# 6) do RESET SLAVE on the slave; +# 7) restart the slave. +# +# Slave shall be able to sync with master without issues. +# +# ==== Related Bugs and Worklogs ==== +# +# BUG#27636289 RPL BREAKS WITH RESTART AFTER RESET SLAVE IF --RELAY-LOG-PURGE=0 +# + +# This test case is binary log format agnostic +--source include/have_binlog_format_row.inc +--source include/have_gtid.inc +--source include/master-slave.inc + +CREATE TABLE t1 (c1 INT); +--source include/sync_slave_sql_with_master.inc +--source include/stop_slave.inc + +--source include/rpl_connection_master.inc +RESET MASTER; + +--source include/rpl_connection_slave.inc +RESET MASTER; +RESET SLAVE; +--source include/start_slave.inc + +--source include/kill_and_restart_mysqld.inc + +--let $rpl_server_number= 2 +--source include/rpl_reconnect.inc + +--source include/rpl_connection_master.inc +DROP TABLE t1; + +--source include/rpl_end.inc diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_recovery_channel.result b/rapid/plugin/group_replication/tests/mtr/r/gr_recovery_channel.result index 79ea7d1274fb..8d7831a899c4 100644 --- a/rapid/plugin/group_replication/tests/mtr/r/gr_recovery_channel.result +++ b/rapid/plugin/group_replication/tests/mtr/r/gr_recovery_channel.result @@ -26,6 +26,7 @@ Note 1759 Sending passwords in plain text without SSL/TLS is extremely insecure. Note 1760 Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. include/assert.inc ['The slave channel is present'] RESET SLAVE ALL; +ERROR HY000: RESET SLAVE ALL FOR CHANNEL cannot be performed on channel 'group_replication_applier'. include/assert.inc ['The group replication recovery channel is present'] include/assert.inc ['The group replication recovery channel is ON'] include/assert.inc ['The slave channel is not present'] diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_reset_slave_channel.result b/rapid/plugin/group_replication/tests/mtr/r/gr_reset_slave_channel.result index 11dfd57e4129..f7bc78c5dbff 100644 --- a/rapid/plugin/group_replication/tests/mtr/r/gr_reset_slave_channel.result +++ b/rapid/plugin/group_replication/tests/mtr/r/gr_reset_slave_channel.result @@ -18,6 +18,7 @@ CHANGE MASTER TO MASTER_HOST="127.0.0.1", MASTER_USER="root", MASTER_PASSWORD="" include/assert.inc ['The group replication applier channel is present'] include/assert.inc ['The slave channel is present'] RESET SLAVE ALL; +ERROR HY000: RESET SLAVE ALL FOR CHANNEL cannot be performed on channel 'group_replication_applier'. include/assert.inc ['The group replication applier channel is still present'] include/assert.inc ['The group replication applier channel is ON'] include/assert.inc ['The slave channel is not present'] @@ -33,5 +34,25 @@ include/start_group_replication.inc INSERT INTO t1 VALUES (5); include/rpl_sync.inc include/assert.inc [The table should contain 5 elements] +server2 +Vefiry that group replication channels are present +include/assert.inc ['The group replication applier channel is present'] +include/assert.inc ['The group replication recovery channel is present'] +include/stop_group_replication.inc +RESET SLAVE command clears master and slave info repositories and will flush master info +RESET SLAVE; +include/assert.inc ['mysql.slave_relay_log_info contains no group replication channel information'] +include/assert.inc ['mysql.slave_master_info contains flushed group replication channel information'] +include/start_group_replication.inc +include/assert.inc ['The group replication applier and recovery channel are present'] +include/stop_group_replication.inc +RESET SLAVE ALL; +include/assert.inc ['mysql.slave_relay_log_info does not contrain group replication channel information'] +include/assert.inc ['mysql.slave_master_info does not contrain group replication channel information'] +CHANGE MASTER TO MASTER_USER="root" FOR CHANNEL "group_replication_recovery"; +Warnings: +Note 1759 Sending passwords in plain text without SSL/TLS is extremely insecure. +Note 1760 Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +include/start_group_replication.inc DROP TABLE t1; include/group_replication_end.inc diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_recovery_channel.test b/rapid/plugin/group_replication/tests/mtr/t/gr_recovery_channel.test index 64c626cd5a7d..9885b7fa20b8 100644 --- a/rapid/plugin/group_replication/tests/mtr/t/gr_recovery_channel.test +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_recovery_channel.test @@ -9,7 +9,7 @@ # 2. Stop replication on M1. On M2 lock a table to block recovery. Start M1. # 3. Execute a STOP SLAVE command and see the recovery channel still active. # 4. Execute a RESET SLAVE ALL command and see the recovery channel is not -# affected on M1. +# affected on M1 when GR node is active. # 5. Kill the server M1. The recovery channel should still be there but it's # not started. Recreate the slave channel to test that it started # 6. Clean the created channels and tables. @@ -84,7 +84,8 @@ STOP SLAVE; --source include/assert.inc # -# Phase 4: Execute a RESET SLAVE ALL command and see the channel is not affected +# Phase 4: Execute a RESET SLAVE ALL command and see the recovery channel is +# not affected as GR node is active. # --connection server1 @@ -104,6 +105,7 @@ SET GLOBAL SUPER_READ_ONLY=0; # Bug#22097534 --let $recovery_relay_log_index= `SELECT CONCAT('$datadir_1', 'mgr-group_replication_recovery.index')` --file_exists $recovery_relay_log_index +--error ER_SLAVE_CHANNEL_OPERATION_NOT_ALLOWED RESET SLAVE ALL; --let $assert_text= 'The group replication recovery channel is present' diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_reset_slave_channel.test b/rapid/plugin/group_replication/tests/mtr/t/gr_reset_slave_channel.test index 0ab6e6039cad..a95570f39360 100644 --- a/rapid/plugin/group_replication/tests/mtr/t/gr_reset_slave_channel.test +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_reset_slave_channel.test @@ -1,7 +1,8 @@ ################################################################################ # This test verifies that group replication channels are not affect by global -# RESET SLAVE commands. -# If a command is however used directly in a group channel it should work. +# RESET SLAVE commands when the group replication is running. +# If a command is used directly in a group channel it should work. +# If a command is used when group replication is stopped it should work. # # Test: # 0. The test requires two servers: M1, M2 and M3. @@ -18,7 +19,8 @@ # c) On M2, group applier files should now be present with the channel. # b) On M2, recovery files should be present. # -# 3. Phase 3: Check that the RESET SLAVE command doesn't affect GR. +# 3. Phase 3: Check that the RESET SLAVE command doesn't affect GR specific +# channels when the GR member is ONLINE. # a) Execute RESET SLAVE ALL command on M1. # b) Validate that group applier files are still present on M1. # c) Check that slave files are removed on M1. @@ -35,6 +37,23 @@ # c) Add some data on M1 to check if all is fine. # d) Validate that both members have all the data. # +# 6. Phase 6: When GR is stopped, after global reset command all files +# should disappear. +# a) Stop GR on M2. +# b) Execute RESET SLAVE command on M2 +# c) Validate that slave_master_info and slave_relay_log_info tables are +# cleared. +# d) Start GR on M2. The node should be ONLINE. +# +# 7. Phase 7: When GR is stopped, after global RESET SLAVE ALL command all +# files should disappear including recovery channel specific credentials. +# a) Stop GR on M2. +# b) Execute RESET SLAVE ALL command on M2 +# c) Validate that slave_master_info and slave_relay_log_info tables are +# cleared. +# d) Execute CHANGE MASTER command to provide recovery channel credentials. +# f) Start GR on M2. The node should be ONLINE. +# # 6. Phase 6: Cleanup. ################################################################################ @@ -136,11 +155,15 @@ INSERT INTO t1 VALUES (3); # # Phase 3: Check that the RESET SLAVE command doesn't affect group replication -# The slave channel should not be there +# specific channels when the GR member is ONLINE. Only the slave channel should +# not be there # --connection server1 +# Global RESET SLAVE ALL command will not work on group replication channels +# when the group memeber is ONLINE. +--error ER_SLAVE_CHANNEL_OPERATION_NOT_ALLOWED RESET SLAVE ALL; --let $relay_log_file=`SELECT CONCAT('$datadir_1','mgr-group_replication_applier.000001')` @@ -216,7 +239,81 @@ INSERT INTO t1 VALUES (5); --source include/assert.inc # -# Phase 6: Cleanup +# Phase 6: After a global reset command all files should disappear +# +--connection server2 +--echo server2 + +--echo Vefiry that group replication channels are present +--let $assert_text= 'The group replication applier channel is present' +--let $assert_cond= [SELECT COUNT(*) AS count FROM mysql.slave_relay_log_info WHERE channel_name="group_replication_applier", count, 1] = 1 +--source include/assert.inc + +--let $assert_text= 'The group replication recovery channel is present' +--let $assert_cond= [SELECT COUNT(*) AS count FROM mysql.slave_relay_log_info WHERE channel_name="group_replication_recovery", count, 1] = 1 +--source include/assert.inc +--let $datadir_2= `SELECT @@GLOBAL.datadir` + +--source include/stop_group_replication.inc + +--echo RESET SLAVE command clears master and slave info repositories and will flush master info +RESET SLAVE; + +--let $assert_text= 'mysql.slave_relay_log_info contains no group replication channel information' +--let $assert_cond= [SELECT COUNT(*) AS count FROM mysql.slave_relay_log_info WHERE channel_name like "group_replication%", count, 1] = 0 +--source include/assert.inc + +--let $assert_text= 'mysql.slave_master_info contains flushed group replication channel information' +--let $assert_cond= [SELECT COUNT(*) AS count FROM mysql.slave_master_info WHERE channel_name like "group_replication%", count, 1] = 2 +--source include/assert.inc + +# Applier files are recreated +--let $relay_log_index= `SELECT CONCAT('$datadir_2', 'mgr-group_replication_applier.index')` +--file_exists $relay_log_index + +# Recovery files are recreated +--let $recovery_relay_log_index= `SELECT CONCAT('$datadir_2', 'mgr-group_replication_recovery.index')` +--file_exists $recovery_relay_log_index + +--source include/start_group_replication.inc + +--let $assert_text= 'The group replication applier and recovery channel are present' +--let $assert_cond= [SELECT COUNT(*) AS count FROM mysql.slave_relay_log_info WHERE channel_name like "group_replication%", count, 1] = 2 +--source include/assert.inc + +# +# Phase 7: After a global reset slave all command, all files should disappear +# Executed the CHANGE MASTER command to create recovery channel and enable +# group replication. +# + +--source include/stop_group_replication.inc +RESET SLAVE ALL; + +--let $assert_text= 'mysql.slave_relay_log_info does not contrain group replication channel information' +--let $assert_cond= [SELECT COUNT(*) AS count FROM mysql.slave_relay_log_info WHERE channel_name like "group_replication%", count, 1] = 0 +--source include/assert.inc + +--let $assert_text= 'mysql.slave_master_info does not contrain group replication channel information' +--let $assert_cond= [SELECT COUNT(*) AS count FROM mysql.slave_master_info WHERE channel_name like "group_replication%", count, 1] = 0 +--source include/assert.inc + +--let $relay_log_index= `SELECT CONCAT('$datadir_2', 'mgr-group_replication_applier.index')` +--error 1 +--file_exists $relay_log_index + +# Recovery files are also removed + +--let $recovery_relay_log_index= `SELECT CONCAT('$datadir_2', 'mgr-group_replication_recovery.index')` +--error 1 +--file_exists $recovery_relay_log_index + +CHANGE MASTER TO MASTER_USER="root" FOR CHANNEL "group_replication_recovery"; + +--source include/start_group_replication.inc + +# +# Phase 8: Cleanup # DROP TABLE t1; diff --git a/sql/rpl_mi.cc b/sql/rpl_mi.cc index 0328dd26e2e3..f030c63d7acf 100644 --- a/sql/rpl_mi.cc +++ b/sql/rpl_mi.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2006, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2006, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -132,7 +132,8 @@ Master_info::Master_info( checksum_alg_before_fd(binary_log::BINLOG_CHECKSUM_ALG_UNDEF), retry_count(master_retry_count), mi_description_event(NULL), - auto_position(false) + auto_position(false), + reset(false) { host[0] = 0; user[0] = 0; bind_addr[0] = 0; password[0]= 0; start_password[0]= 0; @@ -208,6 +209,7 @@ void Master_info::end_info() handler->end_info(); inited = 0; + reset = true; DBUG_VOID_RETURN; } @@ -246,16 +248,25 @@ int Master_info::flush_info(bool force) DBUG_ENTER("Master_info::flush_info"); DBUG_PRINT("enter",("master_pos: %lu", (ulong) master_log_pos)); - if (!inited) + bool skip_flushing = !inited; + /* + A Master_info of a channel that was inited and then reset must be flushed + into the repository or else its connection configuration will be lost in + case the server restarts before starting the channel again. + */ + if (force && reset) skip_flushing= false; + + if (skip_flushing) DBUG_RETURN(0); /* We update the sync_period at this point because only here we now that we are handling a master info. This needs to be update every time we call flush because the option maybe - dinamically set. + dynamically set. */ - handler->set_sync_period(sync_masterinfo_period); + if (inited) + handler->set_sync_period(sync_masterinfo_period); if (write_info(handler)) goto err; @@ -306,6 +317,7 @@ int Master_info::mi_init_info() } inited= 1; + reset= false; if (flush_info(TRUE)) goto err; diff --git a/sql/rpl_mi.h b/sql/rpl_mi.h index 26ca88675e29..97a4c424c08b 100644 --- a/sql/rpl_mi.h +++ b/sql/rpl_mi.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2006, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2006, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -501,6 +501,9 @@ friend class Rpl_info_factory; @param THD thd the THD object of current thread */ void wait_until_no_reference(THD *thd); + + /* Set true when the Master_info object was cleared by a RESET SLAVE */ + bool reset; }; int change_master_server_id_cmp(ulong *id1, ulong *id2); diff --git a/sql/rpl_rli.cc b/sql/rpl_rli.cc index ac39c098d3e8..7be93d6b78c5 100644 --- a/sql/rpl_rli.cc +++ b/sql/rpl_rli.cc @@ -1249,7 +1249,15 @@ int Relay_log_info::purge_relay_logs(THD *thd, bool just_reset, if (!inited) { DBUG_PRINT("info", ("inited == 0")); - if (error_on_rli_init_info) + if (error_on_rli_init_info || + /* + mi->reset means that the channel was reset but still exists. Channel + shall have the index and the first relay log file. + + Those files shall be remove in a following RESET SLAVE ALL (even when + channel was not inited again). + */ + (mi->reset && delete_only)) { ln_without_channel_name= relay_log.generate_name(opt_relay_logname, "-relay-bin", buffer); @@ -1321,13 +1329,6 @@ int Relay_log_info::purge_relay_logs(THD *thd, bool just_reset, cur_log_fd= -1; } - if (relay_log.reset_logs(thd, delete_only)) - { - *errmsg = "Failed during log reset"; - error=1; - goto err; - } - /** Clear the retrieved gtid set for this channel. global_sid_lock->wrlock() is needed. @@ -1336,6 +1337,13 @@ int Relay_log_info::purge_relay_logs(THD *thd, bool just_reset, (const_cast(get_gtid_set()))->clear(); global_sid_lock->unlock(); + if (relay_log.reset_logs(thd, delete_only)) + { + *errmsg = "Failed during log reset"; + error=1; + goto err; + } + /* Save name of used relay log file */ set_group_relay_log_name(relay_log.get_log_fname()); set_event_relay_log_name(relay_log.get_log_fname()); diff --git a/sql/rpl_slave.cc b/sql/rpl_slave.cc index 42e42b09e9e8..e334d7cfc283 100644 --- a/sql/rpl_slave.cc +++ b/sql/rpl_slave.cc @@ -459,7 +459,7 @@ int init_slave() mi= it->second; /* If server id is not set, start_slave_thread() will say it */ - if (mi && mi->host[0]) + if (mi && mi->host[0] && mi->rli->inited) { /* same as in start_slave() cache the global var values into rli's members */ mi->rli->opt_slave_parallel_workers= opt_mts_slave_parallel_workers; @@ -477,6 +477,11 @@ int init_slave() mi->get_channel()); } } + else + { + sql_print_information("Failed to start slave threads for channel '%s'", + mi->get_channel()); + } } } @@ -550,7 +555,9 @@ bool start_slave(THD *thd) { mi= it->second; - channel_configured= mi && mi->inited && mi->host[0]; // channel properly configured. + channel_configured= mi && // Master_info exists + (mi->inited || mi->reset) // It is inited or was reset + && mi->host[0]; // host is set if (channel_configured) { @@ -10283,7 +10290,8 @@ int reset_slave(THD *thd) Master_info *mi= 0; int result= 0; - mi_map::iterator it; + mi_map::iterator it, gr_channel_map_it; + if (thd->lex->reset_slave_info.all) { /* First do reset_slave for default channel */ @@ -10305,6 +10313,26 @@ int reset_slave(THD *thd) break; it= channel_map.begin(); } + /* RESET group replication specific channels */ + gr_channel_map_it= channel_map.begin(GROUP_REPLICATION_CHANNEL); + while (gr_channel_map_it != channel_map.end(GROUP_REPLICATION_CHANNEL)) + { + mi= gr_channel_map_it->second; + DBUG_ASSERT(mi); + /* + We cannot RESET a group replication channel while the group + replication is running. + */ + if (is_group_replication_running()) + { + my_error(ER_SLAVE_CHANNEL_OPERATION_NOT_ALLOWED, MYF(0), + "RESET SLAVE ALL FOR CHANNEL", mi->get_channel()); + DBUG_RETURN(1); + } + if ((result= reset_slave(thd, mi, thd->lex->reset_slave_info.all))) + break; + gr_channel_map_it= channel_map.begin(GROUP_REPLICATION_CHANNEL); + } } else { @@ -10317,6 +10345,27 @@ int reset_slave(THD *thd) break; it++; } + /* + RESET group replication specific channels. + + We cannot RESET a group replication channel while the group + replication is running. + */ + gr_channel_map_it= channel_map.begin(GROUP_REPLICATION_CHANNEL); + while (gr_channel_map_it != channel_map.end(GROUP_REPLICATION_CHANNEL)) + { + mi= gr_channel_map_it->second; + DBUG_ASSERT(mi); + if (is_group_replication_running()) + { + my_error(ER_SLAVE_CHANNEL_OPERATION_NOT_ALLOWED, MYF(0), + "RESET SLAVE FOR CHANNEL", mi->get_channel()); + DBUG_RETURN(1); + } + if ((result= reset_slave(thd, mi, thd->lex->reset_slave_info.all))) + break; + gr_channel_map_it++; + } } DBUG_RETURN(result); @@ -10344,7 +10393,8 @@ int reset_slave(THD *thd, Master_info* mi, bool reset_all) const char* errmsg= "Unknown error occured while reseting slave"; DBUG_ENTER("reset_slave"); - bool no_init_after_delete= false; + bool is_default_channel= strcmp(mi->get_channel(), + channel_map.get_default_channel()) == 0; /* RESET SLAVE command should ignore 'read-only' and 'super_read_only' @@ -10369,18 +10419,10 @@ int reset_slave(THD *thd, Master_info* mi, bool reset_all) // delete relay logs, clear relay log coordinates - - /* - For named channels, we have to delete the index and log files - and not init them - */ - if (strcmp(mi->get_channel(), channel_map.get_default_channel())) - no_init_after_delete= true; - if ((error= mi->rli->purge_relay_logs(thd, 1 /* just reset */, &errmsg, - no_init_after_delete))) + reset_all && !is_default_channel))) { my_error(ER_RELAY_LOG_FAIL, MYF(0), errmsg); error= ER_RELAY_LOG_FAIL; @@ -10400,7 +10442,25 @@ int reset_slave(THD *thd, Master_info* mi, bool reset_all) goto err; } if (!reset_all) + { mi->init_master_log_pos(); + mi->master_uuid[0]= 0; + /* + This shall prevent the channel to vanish if server is restarted + after this RESET SLAVE and before the channel be started. + */ + if (mi->reset && + opt_mi_repository_id == INFO_REPOSITORY_TABLE && + opt_rli_repository_id == INFO_REPOSITORY_TABLE && + mi->flush_info(true)) + { + error= ER_MASTER_INFO; + my_error(ER_MASTER_INFO, MYF(0)); + unlock_slave_threads(mi); + mi->channel_unlock(); + goto err; + } + } unlock_slave_threads(mi); From bac3ed572e999ef5509af1edd6e6bcc632ffac26 Mon Sep 17 00:00:00 2001 From: Hemant Dangi Date: Fri, 6 Jul 2018 14:14:34 +0530 Subject: [PATCH 1015/1221] Bug#28088177: STOP GROUP_REPLICATION HANG WITH SELECT REPLICATION_CONNECTION_STATUS Backporting Bug#25423650: QUICK UNINSTALL PLUGIN WHILE START GR CAN RESULT INTO DEADLOCK Issue: ====== when executing 'select * from performance_schema.replication_connection_status' concurrently with "stop group_replication", both gets stucked. Resolution: =========== Group_replication_handler class has been removed along with lock LOCK_group_replication_handler. With use of my_plugin_lock_by_name, server will have better visibility over GR operations and take decisions accordingly. --- include/mysql/group_replication_priv.h | 9 +- .../src/observer_server_state.cc | 5 +- rapid/plugin/group_replication/src/plugin.cc | 23 +- .../r/gr_concurrent_start_uninstall.result | 39 ++ .../mtr/r/gr_concurrent_stop_select.result | 33 ++ .../mtr/t/gr_concurrent_start_uninstall.test | 79 +++++ .../mtr/t/gr_concurrent_stop_select.test | 64 ++++ .../mtr/t/gr_concurrent_uninstall_stop.test | 12 +- sql/mysqld.cc | 9 +- sql/mysqld.h | 2 - sql/rpl_group_replication.cc | 332 +++++++----------- sql/rpl_group_replication.h | 33 +- 12 files changed, 379 insertions(+), 261 deletions(-) create mode 100644 rapid/plugin/group_replication/tests/mtr/r/gr_concurrent_start_uninstall.result create mode 100644 rapid/plugin/group_replication/tests/mtr/r/gr_concurrent_stop_select.result create mode 100644 rapid/plugin/group_replication/tests/mtr/t/gr_concurrent_start_uninstall.test create mode 100644 rapid/plugin/group_replication/tests/mtr/t/gr_concurrent_stop_select.test diff --git a/include/mysql/group_replication_priv.h b/include/mysql/group_replication_priv.h index ed8ef3eb0980..384efe92e31e 100644 --- a/include/mysql/group_replication_priv.h +++ b/include/mysql/group_replication_priv.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -37,12 +37,9 @@ /** - Server side initializations and cleanup. + Server side initializations. */ -int group_replication_init(const char* plugin_name); -int group_replication_cleanup(); -int group_replication_start(); -int group_replication_stop(); +int group_replication_init(); /** diff --git a/rapid/plugin/group_replication/src/observer_server_state.cc b/rapid/plugin/group_replication/src/observer_server_state.cc index 422a94cf7ec0..44a1a3e95d3f 100644 --- a/rapid/plugin/group_replication/src/observer_server_state.cc +++ b/rapid/plugin/group_replication/src/observer_server_state.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -54,8 +54,7 @@ int group_replication_before_server_shutdown(Server_state_param *param) int group_replication_after_server_shutdown(Server_state_param *param) { server_shutdown_status= true; - if (plugin_is_group_replication_running()) - group_replication_stop(); + plugin_group_replication_stop(); return 0; } diff --git a/rapid/plugin/group_replication/src/plugin.cc b/rapid/plugin/group_replication/src/plugin.cc index 637162f032ea..812ccb156076 100644 --- a/rapid/plugin/group_replication/src/plugin.cc +++ b/rapid/plugin/group_replication/src/plugin.cc @@ -352,6 +352,12 @@ int plugin_group_replication_start() Mutex_autolock auto_lock_mutex(&plugin_running_mutex); + DBUG_EXECUTE_IF("group_replication_wait_on_start", + { + const char act[]= "now signal signal.start_waiting wait_for signal.start_continue"; + DBUG_ASSERT(!debug_sync_set_action(current_thd, STRING_WITH_LEN(act))); + }); + if (plugin_is_group_replication_running()) DBUG_RETURN(GROUP_REPLICATION_ALREADY_RUNNING); if (check_if_server_properly_configured()) @@ -815,6 +821,12 @@ int plugin_group_replication_stop() Mutex_autolock auto_lock_mutex(&plugin_running_mutex); + DBUG_EXECUTE_IF("group_replication_wait_on_stop", + { + const char act[]= "now signal signal.stop_waiting wait_for signal.stop_continue"; + DBUG_ASSERT(!debug_sync_set_action(current_thd, STRING_WITH_LEN(act))); + }); + /* We delete the delayed initialization object here because: @@ -986,7 +998,7 @@ int plugin_group_replication_init(MYSQL_PLUGIN plugin_info) plugin_info_ptr= plugin_info; - if (group_replication_init(group_replication_plugin_name)) + if (group_replication_init()) { /* purecov: begin inspected */ log_message(MY_ERROR_LEVEL, @@ -1036,7 +1048,7 @@ int plugin_group_replication_init(MYSQL_PLUGIN plugin_info) init_compatibility_manager(); plugin_is_auto_starting= start_group_replication_at_boot_var; - if (start_group_replication_at_boot_var && group_replication_start()) + if (start_group_replication_at_boot_var && plugin_group_replication_start()) { log_message(MY_ERROR_LEVEL, "Unable to start Group Replication on boot"); @@ -1054,10 +1066,9 @@ int plugin_group_replication_deinit(void *p) plugin_is_being_uninstalled= true; int observer_unregister_error= 0; - //plugin_group_replication_stop will be called from this method stack - if (group_replication_cleanup()) + if (plugin_group_replication_stop()) log_message(MY_ERROR_LEVEL, - "Failure when cleaning Group Replication server state"); + "Failure when stopping Group Replication on plugin uninstall"); if (group_member_mgr != NULL) { @@ -1567,7 +1578,7 @@ static int check_if_server_properly_configured() //Struct that holds startup and runtime requirements Trans_context_info startup_pre_reqs; - get_server_startup_prerequirements(startup_pre_reqs, true); + get_server_startup_prerequirements(startup_pre_reqs, !plugin_is_auto_starting); if(!startup_pre_reqs.binlog_enabled) { diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_concurrent_start_uninstall.result b/rapid/plugin/group_replication/tests/mtr/r/gr_concurrent_start_uninstall.result new file mode 100644 index 000000000000..b17fbbb43b46 --- /dev/null +++ b/rapid/plugin/group_replication/tests/mtr/r/gr_concurrent_start_uninstall.result @@ -0,0 +1,39 @@ +include/group_replication.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection server1] + +# 1. Setup GR environment and execute START GR. + +[connection server1] +SET GLOBAL group_replication_bootstrap_group=ON; +SET GLOBAL group_replication_group_name= "GROUP_REPLICATION_GROUP_NAME"; + +# 2. Block start, so we can execute UNINSTALL. + +SET @debug_save= @@GLOBAL.DEBUG; +SET @@GLOBAL.DEBUG= '+d,group_replication_wait_on_start'; +START GROUP_REPLICATION; + +# 3. Execute UNINSTALL PLUGIN GR should fail with error +# ER_PLUGIN_CANNOT_BE_UNINSTALLED as START GR is already running. + +[connection server_1] +SET DEBUG_SYNC= "now WAIT_FOR signal.start_waiting"; +UNINSTALL PLUGIN group_replication; +ERROR HY000: Plugin 'group_replication' cannot be uninstalled now. Plugin is busy, it cannot be uninstalled. To force a stop run STOP GROUP_REPLICATION and then UNINSTALL PLUGIN group_replication. + +# 4. SIGNAL START GR to resume processing. + +SET DEBUG_SYNC= 'now SIGNAL signal.start_continue'; +[connection server1] + +# 5. Confirm GR is started + +include/gr_wait_for_member_state.inc + +# 6. Cleanup + +SET @@GLOBAL.DEBUG= @debug_save; +include/group_replication_end.inc diff --git a/rapid/plugin/group_replication/tests/mtr/r/gr_concurrent_stop_select.result b/rapid/plugin/group_replication/tests/mtr/r/gr_concurrent_stop_select.result new file mode 100644 index 000000000000..868baf72b1c9 --- /dev/null +++ b/rapid/plugin/group_replication/tests/mtr/r/gr_concurrent_stop_select.result @@ -0,0 +1,33 @@ +include/group_replication.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection server1] + +# 1. Block Stop Group Replication + +SET @debug_save= @@GLOBAL.DEBUG; +SET @@GLOBAL.DEBUG= '+d,group_replication_wait_on_stop'; +STOP GROUP_REPLICATION; + +# 2. Wait for debug sync to be reached and then execute select query + +[connection server_1] +SET DEBUG_SYNC= "now WAIT_FOR signal.stop_waiting"; +SELECT COUNT(*) FROM performance_schema.replication_connection_status; +COUNT(*) +2 + +# 3. SIGNAL STOP GR to resume processing + +SET DEBUG_SYNC= 'now SIGNAL signal.stop_continue'; +[connection server1] + +# 4. Confirm Group Replication is stopped + +include/gr_wait_for_member_state.inc + +# 5. Cleanup + +SET @@GLOBAL.DEBUG= @debug_save; +include/group_replication_end.inc diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_concurrent_start_uninstall.test b/rapid/plugin/group_replication/tests/mtr/t/gr_concurrent_start_uninstall.test new file mode 100644 index 000000000000..7d71779001c3 --- /dev/null +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_concurrent_start_uninstall.test @@ -0,0 +1,79 @@ +################################################################################ +# This test confirms that when START GR and UNINSTALL PLUGIN GR commands are +# executed concurrently, no deadlock happens. +# +# Test: +# 0. The test requires one server. +# 1. Setup GR environment and execute START GR. +# 2. Block start, so we can execute UNINSTALL. +# 3. Execute UNINSTALL PLUGIN GR should fail with error +# ER_PLUGIN_CANNOT_BE_UNINSTALLED as START GR is already running. +# 4. SIGNAL START GR to resume processing. +# 5. Confirm GR is started +# 6. Cleanup +# +################################################################################ +--source ../inc/have_group_replication_plugin.inc +--let $rpl_skip_group_replication_start= 1 +--source ../inc/group_replication.inc + +--echo +--echo # 1. Setup GR environment and execute START GR. +--echo + +--let $rpl_connection_name= server1 +--source include/rpl_connection.inc + +SET GLOBAL group_replication_bootstrap_group=ON; +--replace_result $group_replication_group_name GROUP_REPLICATION_GROUP_NAME +--eval SET GLOBAL group_replication_group_name= "$group_replication_group_name" + +--echo +--echo # 2. Block start, so we can execute UNINSTALL. +--echo + +## If START GR gets lock and UNINSTALL blocks SQL Query execution, +## GR used to deadlock. + +SET @debug_save= @@GLOBAL.DEBUG; +SET @@GLOBAL.DEBUG= '+d,group_replication_wait_on_start'; + +--send START GROUP_REPLICATION + +--echo +--echo # 3. Execute UNINSTALL PLUGIN GR should fail with error +--echo # ER_PLUGIN_CANNOT_BE_UNINSTALLED as START GR is already running. +--echo + +--let $rpl_connection_name= server_1 +--source include/rpl_connection.inc +# Wait for the debug sync to be reached. +SET DEBUG_SYNC= "now WAIT_FOR signal.start_waiting"; + +--error ER_PLUGIN_CANNOT_BE_UNINSTALLED +UNINSTALL PLUGIN group_replication; + + +--echo +--echo # 4. SIGNAL START GR to resume processing. +--echo +SET DEBUG_SYNC= 'now SIGNAL signal.start_continue'; + +--let $rpl_connection_name= server1 +--source include/rpl_connection.inc +--reap + +--echo +--echo # 5. Confirm GR is started +--echo + +--let $group_replication_member_state= ONLINE +--source ../inc/gr_wait_for_member_state.inc + + +--echo +--echo # 6. Cleanup +--echo + +SET @@GLOBAL.DEBUG= @debug_save; +--source ../inc/group_replication_end.inc diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_concurrent_stop_select.test b/rapid/plugin/group_replication/tests/mtr/t/gr_concurrent_stop_select.test new file mode 100644 index 000000000000..9c6888acc295 --- /dev/null +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_concurrent_stop_select.test @@ -0,0 +1,64 @@ +################################################################################ +# This test confirms that when STOP GR and select +# performance_schema.replication_connection_status query is executed +# concurrently, no deadlock happens. +# +# Test: +# 0. The test requires one server. +# 1. Block Stop Group Replication +# 2. Wait for debug sync to be reached and then execute select query +# 3. SIGNAL STOP GR to resume processing +# 4. Confirm Group Replication is stopped +# 5. Cleanup +# +################################################################################ +--source ../inc/have_group_replication_plugin.inc +--source ../inc/group_replication.inc + +--echo +--echo # 1. Block Stop Group Replication +--echo + +SET @debug_save= @@GLOBAL.DEBUG; +SET @@GLOBAL.DEBUG= '+d,group_replication_wait_on_stop'; + +--send STOP GROUP_REPLICATION + + +--echo +--echo # 2. Wait for debug sync to be reached and then execute select query +--echo + +--let $rpl_connection_name= server_1 +--source include/rpl_connection.inc + +SET DEBUG_SYNC= "now WAIT_FOR signal.stop_waiting"; + +SELECT COUNT(*) FROM performance_schema.replication_connection_status; + + +--echo +--echo # 3. SIGNAL STOP GR to resume processing +--echo + +SET DEBUG_SYNC= 'now SIGNAL signal.stop_continue'; + +--let $rpl_connection_name= server1 +--source include/rpl_connection.inc +--reap + + +--echo +--echo # 4. Confirm Group Replication is stopped +--echo + +--let $group_replication_member_state= OFFLINE +--source ../inc/gr_wait_for_member_state.inc + + +--echo +--echo # 5. Cleanup +--echo + +SET @@GLOBAL.DEBUG= @debug_save; +--source ../inc/group_replication_end.inc diff --git a/rapid/plugin/group_replication/tests/mtr/t/gr_concurrent_uninstall_stop.test b/rapid/plugin/group_replication/tests/mtr/t/gr_concurrent_uninstall_stop.test index e9bbd6ef74a5..59eed268fab6 100644 --- a/rapid/plugin/group_replication/tests/mtr/t/gr_concurrent_uninstall_stop.test +++ b/rapid/plugin/group_replication/tests/mtr/t/gr_concurrent_uninstall_stop.test @@ -1,7 +1,7 @@ # ==== Purpose ==== # # Verify that 'UNINSTALL PLUGIN' and 'STOP GROUP_REPLICATION' commands -# run well in parallel. +# don't run in parallel in mysql 5.7. # # ==== Implementation ==== # @@ -30,6 +30,10 @@ SET SESSION sql_log_bin= 1; --source ../inc/start_and_bootstrap_group_replication.inc +## Warnings depends upon sequence of execution of +## query "STOP GROUP_REPLICATION" and "UNINSTALL PLUGIN group_replication" +--disable_warnings + --send UNINSTALL PLUGIN group_replication --let $rpl_connection_name= server_1 @@ -37,15 +41,19 @@ SET SESSION sql_log_bin= 1; --echo # --echo # STOP GROUP_REPLICATION in parallel. --echo # +## Uninstall will fail as STOP GR is already running. --error 0, ER_GROUP_REPLICATION_CONFIGURATION STOP GROUP_REPLICATION; --let $rpl_connection_name= server1 --source include/rpl_connection.inc ---error 0, ER_OPTION_PREVENTS_STATEMENT +--error 0, ER_PLUGIN_CANNOT_BE_UNINSTALLED --reap +--enable_warnings + SET @@GLOBAL.read_only= 0; + # The previous UNINSTALL attempt may have failed due to SUPER_READ_ONLY=1, as # such we uninstall the plugin again. --error 0, ER_SP_DOES_NOT_EXIST diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 2ed90162f992..429024209568 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -686,7 +686,6 @@ mysql_cond_t COND_server_started; mysql_mutex_t LOCK_reset_gtid_table; mysql_mutex_t LOCK_compress_gtid_table; mysql_cond_t COND_compress_gtid_table; -mysql_mutex_t LOCK_group_replication_handler; #if !defined (EMBEDDED_LIBRARY) && !defined(_WIN32) mysql_mutex_t LOCK_socket_listener_active; mysql_cond_t COND_socket_listener_active; @@ -3237,8 +3236,6 @@ static int init_thread_environment() &LOCK_compress_gtid_table, MY_MUTEX_INIT_FAST); mysql_cond_init(key_COND_compress_gtid_table, &COND_compress_gtid_table); - mysql_mutex_init(key_LOCK_group_replication_handler, - &LOCK_group_replication_handler, MY_MUTEX_INIT_FAST); #ifndef EMBEDDED_LIBRARY Events::init_mutexes(); #if defined(_WIN32) @@ -8712,7 +8709,6 @@ PSI_mutex_key key_mts_gaq_LOCK; PSI_mutex_key key_thd_timer_mutex; PSI_mutex_key key_LOCK_offline_mode; PSI_mutex_key key_LOCK_default_password_lifetime; -PSI_mutex_key key_LOCK_group_replication_handler; #ifdef HAVE_REPLICATION PSI_mutex_key key_commit_order_manager_mutex; @@ -8796,7 +8792,7 @@ static PSI_mutex_info all_server_mutexes[]= { &key_gtid_ensure_index_mutex, "Gtid_state", PSI_FLAG_GLOBAL}, { &key_LOCK_query_plan, "THD::LOCK_query_plan", PSI_FLAG_VOLATILITY_SESSION}, { &key_LOCK_cost_const, "Cost_constant_cache::LOCK_cost_const", - PSI_FLAG_GLOBAL}, + PSI_FLAG_GLOBAL}, { &key_LOCK_current_cond, "THD::LOCK_current_cond", PSI_FLAG_VOLATILITY_SESSION}, { &key_mts_temp_table_LOCK, "key_mts_temp_table_LOCK", 0}, { &key_LOCK_reset_gtid_table, "LOCK_reset_gtid_table", PSI_FLAG_GLOBAL}, @@ -8808,8 +8804,7 @@ static PSI_mutex_info all_server_mutexes[]= { &key_mutex_slave_worker_hash, "Relay_log_info::slave_worker_hash_lock", 0}, #endif { &key_LOCK_offline_mode, "LOCK_offline_mode", PSI_FLAG_GLOBAL}, - { &key_LOCK_default_password_lifetime, "LOCK_default_password_lifetime", PSI_FLAG_GLOBAL}, - { &key_LOCK_group_replication_handler, "LOCK_group_replication_handler", PSI_FLAG_GLOBAL} + { &key_LOCK_default_password_lifetime, "LOCK_default_password_lifetime", PSI_FLAG_GLOBAL} }; PSI_rwlock_key key_rwlock_LOCK_grant, key_rwlock_LOCK_logger, diff --git a/sql/mysqld.h b/sql/mysqld.h index b751133f8366..ce92da197b41 100644 --- a/sql/mysqld.h +++ b/sql/mysqld.h @@ -447,7 +447,6 @@ extern PSI_mutex_key key_mts_gaq_LOCK; extern PSI_mutex_key key_thd_timer_mutex; extern PSI_mutex_key key_LOCK_offline_mode; extern PSI_mutex_key key_LOCK_default_password_lifetime; -extern PSI_mutex_key key_LOCK_group_replication_handler; #ifdef HAVE_REPLICATION extern PSI_mutex_key key_commit_order_manager_mutex; @@ -838,7 +837,6 @@ extern mysql_rwlock_t LOCK_sys_init_connect, LOCK_sys_init_slave; extern mysql_rwlock_t LOCK_system_variables_hash; extern mysql_cond_t COND_manager; extern int32 thread_running; -extern mysql_mutex_t LOCK_group_replication_handler; extern mysql_mutex_t LOCK_keyring_operations; extern char *opt_ssl_ca, *opt_ssl_capath, *opt_ssl_cert, *opt_ssl_cipher, diff --git a/sql/rpl_group_replication.cc b/sql/rpl_group_replication.cc index b005eec56d83..b87e3bd23e28 100644 --- a/sql/rpl_group_replication.cc +++ b/sql/rpl_group_replication.cc @@ -22,177 +22,50 @@ #include "log.h" -/* - Group Replication plugin handler. -*/ -Group_replication_handler:: -Group_replication_handler(const char* plugin_name_arg) - :plugin(NULL), plugin_handle(NULL) -{ - plugin_name.assign(plugin_name_arg); -} - -Group_replication_handler::~Group_replication_handler() -{ - if (plugin_handle) - plugin_handle->stop(); -} - -int Group_replication_handler::init() -{ - int error= 0; - if (!plugin_handle) - if ((error = plugin_init())) - return error; - return 0; -} - -int Group_replication_handler::start() -{ - if (plugin_handle) - return plugin_handle->start(); - return 1; -} - -int Group_replication_handler::stop() -{ - if (plugin_handle) - return plugin_handle->stop(); - return 1; -} - -bool Group_replication_handler::is_running() -{ - if (plugin_handle) - return plugin_handle->is_running(); - return false; -} - -int -Group_replication_handler:: -set_retrieved_certification_info(View_change_log_event* view_change_event) -{ - if (plugin_handle) - return plugin_handle->set_retrieved_certification_info(view_change_event); - return 1; -} - -bool -Group_replication_handler:: -get_connection_status_info( - const GROUP_REPLICATION_CONNECTION_STATUS_CALLBACKS& callbacks) -{ - if (plugin_handle) - return plugin_handle->get_connection_status_info(callbacks); - return true; -} - -bool -Group_replication_handler:: -get_group_members_info( - unsigned int index, - const GROUP_REPLICATION_GROUP_MEMBERS_CALLBACKS& callbacks) -{ - if (plugin_handle) - return plugin_handle->get_group_members_info(index, callbacks); - return true; -} - -bool -Group_replication_handler:: -get_group_member_stats_info( - const GROUP_REPLICATION_GROUP_MEMBER_STATS_CALLBACKS& callbacks) -{ - if (plugin_handle) - return plugin_handle->get_group_member_stats_info(callbacks); - return true; -} - -unsigned int Group_replication_handler::get_members_number_info() -{ - if (plugin_handle) - return plugin_handle->get_members_number_info(); - return 0; -} -int Group_replication_handler::plugin_init() -{ - plugin= my_plugin_lock_by_name(0, to_lex_cstring(plugin_name.c_str()), - MYSQL_GROUP_REPLICATION_PLUGIN); - if (plugin) - { - plugin_handle= (st_mysql_group_replication*) plugin_decl(plugin)->info; - plugin_unlock(0, plugin); - } - else - { - plugin_handle= NULL; - return 1; - } - return 0; -} - -Group_replication_handler* group_replication_handler= NULL; +/** + Static name of Group Replication plugin. +*/ +LEX_CSTRING group_replication_plugin_name= { + C_STRING_WITH_LEN("group_replication") +}; /* Group Replication plugin handler function accessors. */ #ifdef HAVE_REPLICATION -int group_replication_init(const char* plugin_name) +int group_replication_init() { - if (initialize_channel_service_interface()) - { - return 1; - } - - mysql_mutex_lock(&LOCK_group_replication_handler); - if (group_replication_handler == NULL) - { - group_replication_handler= new Group_replication_handler(plugin_name); - - if (group_replication_handler) - { - int ret= group_replication_handler->init(); - mysql_mutex_unlock(&LOCK_group_replication_handler); - return ret; - } - } - mysql_mutex_unlock(&LOCK_group_replication_handler); - - return 1; + return initialize_channel_service_interface(); } #endif -int group_replication_cleanup() + +bool is_group_replication_plugin_loaded() { - mysql_mutex_lock(&LOCK_group_replication_handler); - if (group_replication_handler != NULL) - { - delete group_replication_handler; - group_replication_handler= NULL; - } - else + bool result= false; + + plugin_ref plugin= my_plugin_lock_by_name(0, + group_replication_plugin_name, + MYSQL_GROUP_REPLICATION_PLUGIN); + if (plugin != NULL) { - mysql_mutex_unlock(&LOCK_group_replication_handler); - return 1; + plugin_unlock(0, plugin); + result= true; } - mysql_mutex_unlock(&LOCK_group_replication_handler); - return 0; -} - -bool is_group_replication_plugin_loaded() -{ - if (group_replication_handler) - return true; - return false; + return result; } int group_replication_start() { - mysql_mutex_lock(&LOCK_group_replication_handler); - if (is_group_replication_plugin_loaded()) + int result= 1; + + plugin_ref plugin= my_plugin_lock_by_name(0, + group_replication_plugin_name, + MYSQL_GROUP_REPLICATION_PLUGIN); + if (plugin != NULL) { /* We need to take global_sid_lock because @@ -208,111 +81,160 @@ int group_replication_start() gtid_mode_lock. */ gtid_mode_lock->rdlock(); - int ret= group_replication_handler->start(); + st_mysql_group_replication *plugin_handle= + (st_mysql_group_replication*) plugin_decl(plugin)->info; + result= plugin_handle->start(); gtid_mode_lock->unlock(); - mysql_mutex_unlock(&LOCK_group_replication_handler); - return ret; + + plugin_unlock(0, plugin); } - mysql_mutex_unlock(&LOCK_group_replication_handler); - sql_print_error("Group Replication plugin is not installed."); - return 1; + else + { + sql_print_error("Group Replication plugin is not installed."); + } + + return result; } int group_replication_stop() { - mysql_mutex_lock(&LOCK_group_replication_handler); - if (is_group_replication_plugin_loaded()) + int result= 1; + + plugin_ref plugin= my_plugin_lock_by_name(0, + group_replication_plugin_name, + MYSQL_GROUP_REPLICATION_PLUGIN); + if (plugin != NULL) { - int ret= group_replication_handler->stop(); - mysql_mutex_unlock(&LOCK_group_replication_handler); - return ret; + st_mysql_group_replication *plugin_handle= + (st_mysql_group_replication*) plugin_decl(plugin)->info; + result= plugin_handle->stop(); + + plugin_unlock(0, plugin); + } + else + { + sql_print_error("Group Replication plugin is not installed."); } - mysql_mutex_unlock(&LOCK_group_replication_handler); - sql_print_error("Group Replication plugin is not installed."); - return 1; + return result; } bool is_group_replication_running() { - mysql_mutex_lock(&LOCK_group_replication_handler); - if (is_group_replication_plugin_loaded()) + bool result= false; + + plugin_ref plugin= my_plugin_lock_by_name(0, + group_replication_plugin_name, + MYSQL_GROUP_REPLICATION_PLUGIN); + if (plugin != NULL) { - bool ret= group_replication_handler->is_running(); - mysql_mutex_unlock(&LOCK_group_replication_handler); - return ret; + st_mysql_group_replication *plugin_handle= + (st_mysql_group_replication*) plugin_decl(plugin)->info; + result= plugin_handle->is_running(); + + plugin_unlock(0, plugin); } - mysql_mutex_unlock(&LOCK_group_replication_handler); - return false; + return result; } int set_group_replication_retrieved_certification_info(View_change_log_event *view_change_event) { - if (is_group_replication_plugin_loaded()) - return group_replication_handler->set_retrieved_certification_info(view_change_event); - return 1; + int result= 1; + + plugin_ref plugin= my_plugin_lock_by_name(0, + group_replication_plugin_name, + MYSQL_GROUP_REPLICATION_PLUGIN); + if (plugin != NULL) + { + st_mysql_group_replication *plugin_handle= + (st_mysql_group_replication*) plugin_decl(plugin)->info; + result= plugin_handle->set_retrieved_certification_info(view_change_event); + + plugin_unlock(0, plugin); + } + + return result; } bool get_group_replication_connection_status_info( const GROUP_REPLICATION_CONNECTION_STATUS_CALLBACKS& callbacks) { - mysql_mutex_lock(&LOCK_group_replication_handler); - if (is_group_replication_plugin_loaded()) + bool result= true; + + plugin_ref plugin= my_plugin_lock_by_name(0, + group_replication_plugin_name, + MYSQL_GROUP_REPLICATION_PLUGIN); + if (plugin != NULL) { - int ret= group_replication_handler->get_connection_status_info(callbacks); - mysql_mutex_unlock(&LOCK_group_replication_handler); - return ret; + st_mysql_group_replication *plugin_handle= + (st_mysql_group_replication*) plugin_decl(plugin)->info; + result= plugin_handle->get_connection_status_info(callbacks); + + plugin_unlock(0, plugin); } - mysql_mutex_unlock(&LOCK_group_replication_handler); - return true; + return result; } bool get_group_replication_group_members_info( unsigned int index, const GROUP_REPLICATION_GROUP_MEMBERS_CALLBACKS& callbacks) { - mysql_mutex_lock(&LOCK_group_replication_handler); - if (is_group_replication_plugin_loaded()) + bool result= true; + + plugin_ref plugin= my_plugin_lock_by_name(0, + group_replication_plugin_name, + MYSQL_GROUP_REPLICATION_PLUGIN); + if (plugin != NULL) { - bool ret= - group_replication_handler->get_group_members_info(index, callbacks); - mysql_mutex_unlock(&LOCK_group_replication_handler); - return ret; + st_mysql_group_replication *plugin_handle= + (st_mysql_group_replication*) plugin_decl(plugin)->info; + result= plugin_handle->get_group_members_info(index, callbacks); + + plugin_unlock(0, plugin); } - mysql_mutex_unlock(&LOCK_group_replication_handler); - return true; + return result; } bool get_group_replication_group_member_stats_info( const GROUP_REPLICATION_GROUP_MEMBER_STATS_CALLBACKS& callbacks) { - mysql_mutex_lock(&LOCK_group_replication_handler); - if (is_group_replication_plugin_loaded()) + bool result= true; + + plugin_ref plugin= my_plugin_lock_by_name(0, + group_replication_plugin_name, + MYSQL_GROUP_REPLICATION_PLUGIN); + if (plugin != NULL) { - bool ret= group_replication_handler->get_group_member_stats_info(callbacks); - mysql_mutex_unlock(&LOCK_group_replication_handler); - return ret; + st_mysql_group_replication *plugin_handle= + (st_mysql_group_replication*) plugin_decl(plugin)->info; + result= plugin_handle->get_group_member_stats_info(callbacks); + + plugin_unlock(0, plugin); } - mysql_mutex_unlock(&LOCK_group_replication_handler); - return true; + return result; } unsigned int get_group_replication_members_number_info() { - mysql_mutex_lock(&LOCK_group_replication_handler); - if (is_group_replication_plugin_loaded()) + unsigned int result= 0; + + plugin_ref plugin= my_plugin_lock_by_name(0, + group_replication_plugin_name, + MYSQL_GROUP_REPLICATION_PLUGIN); + if (plugin != NULL) { - unsigned int ret= group_replication_handler->get_members_number_info(); - mysql_mutex_unlock(&LOCK_group_replication_handler); - return ret; + st_mysql_group_replication *plugin_handle= + (st_mysql_group_replication*) plugin_decl(plugin)->info; + result= plugin_handle->get_members_number_info(); + + plugin_unlock(0, plugin); } - mysql_mutex_unlock(&LOCK_group_replication_handler); - return 0; + return result; } diff --git a/sql/rpl_group_replication.h b/sql/rpl_group_replication.h index 9988982be85f..f169eb139a9a 100644 --- a/sql/rpl_group_replication.h +++ b/sql/rpl_group_replication.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -23,41 +23,14 @@ #include "replication.h" #include "log_event.h" +#include "mysql/plugin_group_replication.h" -/* - Group Replication plugin handler. -*/ -class Group_replication_handler -{ -public: - Group_replication_handler(const char *plugin_name_arg); - ~Group_replication_handler(); - int init(); - int start(); - int stop(); - bool is_running(); - int set_retrieved_certification_info(View_change_log_event *view_change_event); - bool get_connection_status_info( - const GROUP_REPLICATION_CONNECTION_STATUS_CALLBACKS& callbacks); - bool get_group_members_info( - unsigned int index, - const GROUP_REPLICATION_GROUP_MEMBERS_CALLBACKS& callbacks); - bool get_group_member_stats_info( - const GROUP_REPLICATION_GROUP_MEMBER_STATS_CALLBACKS& callbacks); - unsigned int get_members_number_info(); +class View_change_log_event; -private: - std::string plugin_name; - plugin_ref plugin; - st_mysql_group_replication *plugin_handle; - int plugin_init(); -}; /* Group Replication plugin handler function accessors. */ -int group_replication_init(const char* plugin_name); -int group_replication_cleanup(); bool is_group_replication_plugin_loaded(); int group_replication_start(); From e94c861629da41e4045dc7adf03a45ce76c3e077 Mon Sep 17 00:00:00 2001 From: Yura Sorokin Date: Fri, 6 Jul 2018 17:33:42 +0300 Subject: [PATCH 1016/1221] Fixed PS-4566 (stack-use-after-scope in reinit_io_cache() detected by ASan) https://jira.percona.com/browse/PS-4566 Although 'tempfile' variable of type 'IO_CACHE' declared inside an inner block in 'mysql_update()' function is copied by value to 'select->file' "select->file=tempfile;", this operation is not safe as some of the members inside 'IO_CACHE' struct were initialized with addresses of other data members. In particular, in 'setup_io_cache()', called from 'init_functions()', called from 'init_io_cache()', called from 'open_cached_file()' 'current_pos' and 'current_end' are initialized with such addresses. /* Ensure that my_b_tell() and my_b_bytes_in_cache works */ if (info->type == WRITE_CACHE) { info->current_pos= &info->write_pos; info->current_end= &info->write_end; } else { info->current_pos= &info->read_pos; info->current_end= &info->read_end; } Fixed by adding "setup_io_cache(&select->file);" call after assignment, which reassigns those pointers to the new addresses. --- sql/sql_update.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/sql/sql_update.cc b/sql/sql_update.cc index ae84bc0015a2..686f95af6408 100644 --- a/sql/sql_update.cc +++ b/sql/sql_update.cc @@ -605,6 +605,7 @@ int mysql_update(THD *thd, if (reinit_io_cache(&tempfile,READ_CACHE,0L,0,0)) error=1; /* purecov: inspected */ select->file=tempfile; // Read row ptrs from this file + setup_io_cache(&select->file); if (error >= 0) goto err; } From 4f241ffea414534af894f0f739e6d2dbe85a5dfa Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Thu, 19 Apr 2018 22:44:43 +0200 Subject: [PATCH 1017/1221] PS-3325: Prevent changes with gtid_deployment_step set Changes executed after gtid_deployment_step was set resulted in binlog damage, or assertions/crashes of the server. This commit ensures that checks are based on the correct, lock protected variable, and also enforces super_read_only while gtid_deployment_step is set. It incorporates PR#1554 by keyurdg, which implements the first part of the above changes. --- mysql-test/r/percona_bug_ps3325.result | 32 +++++++++++++++ mysql-test/t/percona_bug_ps3325-master.opt | 3 ++ mysql-test/t/percona_bug_ps3325-slave.opt | 3 ++ mysql-test/t/percona_bug_ps3325.test | 48 ++++++++++++++++++++++ sql/binlog.cc | 6 +-- sql/mysqld.cc | 2 + sql/rpl_master.cc | 4 +- sql/rpl_slave.cc | 2 +- sql/share/errmsg-utf8.txt | 3 ++ sql/sys_vars.cc | 24 +++++++---- 10 files changed, 114 insertions(+), 13 deletions(-) create mode 100644 mysql-test/r/percona_bug_ps3325.result create mode 100644 mysql-test/t/percona_bug_ps3325-master.opt create mode 100644 mysql-test/t/percona_bug_ps3325-slave.opt create mode 100644 mysql-test/t/percona_bug_ps3325.test diff --git a/mysql-test/r/percona_bug_ps3325.result b/mysql-test/r/percona_bug_ps3325.result new file mode 100644 index 000000000000..72a142491ddf --- /dev/null +++ b/mysql-test/r/percona_bug_ps3325.result @@ -0,0 +1,32 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +CREATE TABLE test_table(id INT) ENGINE=innodb; +include/sync_slave_sql_with_master.inc +INSERT INTO test_table VALUES (1); +include/sync_slave_sql_with_master.inc +SET GLOBAL gtid_deployment_step = ON; +SET GLOBAL super_read_only=1; +ERROR HY000: super_read_only cannot be changed when gtid_deployment_step is ON +SET GLOBAL super_read_only=0; +ERROR HY000: super_read_only cannot be changed when gtid_deployment_step is ON +INSERT INTO test_table VALUES (2); +ERROR HY000: The MySQL server is running with the --read-only (super) option so it cannot execute this statement +SET GLOBAL gtid_deployment_step = OFF; +SET GLOBAL super_read_only = ON; +SET GLOBAL gtid_deployment_step = ON; +SET GLOBAL gtid_deployment_step = OFF; +INSERT INTO test_table VALUES (2); +ERROR HY000: The MySQL server is running with the --read-only (super) option so it cannot execute this statement +SET GLOBAL super_read_only = OFF; +SET GLOBAL read_only = OFF; +INSERT INTO test_table VALUES (2); +include/sync_slave_sql_with_master.inc +SELECT * FROM test_table; +id +1 +2 +DROP TABLE test_table; +include/rpl_end.inc diff --git a/mysql-test/t/percona_bug_ps3325-master.opt b/mysql-test/t/percona_bug_ps3325-master.opt new file mode 100644 index 000000000000..65aa0715f217 --- /dev/null +++ b/mysql-test/t/percona_bug_ps3325-master.opt @@ -0,0 +1,3 @@ +--gtid_mode=ON +--log-slave-updates=ON +--enforce_gtid_consistency diff --git a/mysql-test/t/percona_bug_ps3325-slave.opt b/mysql-test/t/percona_bug_ps3325-slave.opt new file mode 100644 index 000000000000..0dd4daf5b2ce --- /dev/null +++ b/mysql-test/t/percona_bug_ps3325-slave.opt @@ -0,0 +1,3 @@ +--gtid_mode=ON +--log_slave_updates=ON +--enforce_gtid_consistency diff --git a/mysql-test/t/percona_bug_ps3325.test b/mysql-test/t/percona_bug_ps3325.test new file mode 100644 index 000000000000..766f7d144940 --- /dev/null +++ b/mysql-test/t/percona_bug_ps3325.test @@ -0,0 +1,48 @@ +# +# PS-3325: Queries while/after setting gtid_deployment_step cause binlog corruption and assertions +# +--source include/have_innodb.inc +--source include/master-slave.inc + +connect (mm,localhost,root,,); + +connection master; +CREATE TABLE test_table(id INT) ENGINE=innodb; +--source include/sync_slave_sql_with_master.inc + +connection master; +INSERT INTO test_table VALUES (1); +--source include/sync_slave_sql_with_master.inc + +connection master; +SET GLOBAL gtid_deployment_step = ON; +--error ER_GTID_DEPLOYMENT_STEP_ACTIVE +SET GLOBAL super_read_only=1; +--error ER_GTID_DEPLOYMENT_STEP_ACTIVE +SET GLOBAL super_read_only=0; + +connection master; +--error ER_OPTION_PREVENTS_STATEMENT +INSERT INTO test_table VALUES (2); + +SET GLOBAL gtid_deployment_step = OFF; + +SET GLOBAL super_read_only = ON; +SET GLOBAL gtid_deployment_step = ON; +SET GLOBAL gtid_deployment_step = OFF; +--error ER_OPTION_PREVENTS_STATEMENT +INSERT INTO test_table VALUES (2); +SET GLOBAL super_read_only = OFF; +SET GLOBAL read_only = OFF; + +INSERT INTO test_table VALUES (2); +--source include/sync_slave_sql_with_master.inc + + +connection slave; +SELECT * FROM test_table; + +connection master; +DROP TABLE test_table; + +--source include/rpl_end.inc diff --git a/sql/binlog.cc b/sql/binlog.cc index 29b6f27b710d..213d32a6584e 100644 --- a/sql/binlog.cc +++ b/sql/binlog.cc @@ -962,14 +962,14 @@ static bool should_write_gtids(const THD *thd) { return false; /* Return true (allow gtids to be generated) in the scenario where - gtid_deployment_step is false (Normal run after deployment procedure + opt_gtid_deployment_step is false (Normal run after deployment procedure is done). Return true in the scenario where slave sql_thread uses gtid received from master. This is necessary in the situation where deployment is done on - master, but slave still in deployment mode (gtid_deployment_step is true). + master, but slave still in deployment mode (opt_gtid_deployment_step is true). */ - return (!gtid_deployment_step || (thd->rli_slave && + return (!opt_gtid_deployment_step || (thd->rli_slave && thd->variables.gtid_next.type != AUTOMATIC_GROUP)); } diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 0e455738281d..551a912a553f 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -5781,6 +5781,8 @@ int mysqld_main(int argc, char **argv) if (init_common_variables()) unireg_abort(1); // Will do exit + opt_gtid_deployment_step= gtid_deployment_step; + my_init_signals(); size_t guardize= 0; diff --git a/sql/rpl_master.cc b/sql/rpl_master.cc index 8edb851eb8ee..337c36249da9 100644 --- a/sql/rpl_master.cc +++ b/sql/rpl_master.cc @@ -1425,9 +1425,9 @@ void mysql_binlog_send(THD* thd, char* log_ident, my_off_t pos, { /* Skip groups in the binlogs which don't have any gtid event - logged before them. When gtid_deployment_step is ON, the server + logged before them. When opt_gtid_deployment_step is ON, the server doesn't generate GTID and so no gtid_event is logged before binlog - events. But when gtid_deployment_step is OFF, the server starts + events. But when opt_gtid_deployment_step is OFF, the server starts writing gtid_events in the middle of active binlog. When slave connects with gtid_protocol, master needs to skip binlog events which don't have corresponding gtid_event. diff --git a/sql/rpl_slave.cc b/sql/rpl_slave.cc index d80a0e931882..48f7ab006f92 100644 --- a/sql/rpl_slave.cc +++ b/sql/rpl_slave.cc @@ -2745,7 +2745,7 @@ when it try to get the value of TIME_ZONE global variable from master."; } if ((mi->master_gtid_mode > gtid_mode + 1 || gtid_mode > mi->master_gtid_mode + 1) && - !gtid_deployment_step) + !opt_gtid_deployment_step) { mi->report(ERROR_LEVEL, ER_SLAVE_FATAL_ERROR, "The slave IO thread stops because the master has " diff --git a/sql/share/errmsg-utf8.txt b/sql/share/errmsg-utf8.txt index fb05b8ccba91..e0a9a9fd0552 100644 --- a/sql/share/errmsg-utf8.txt +++ b/sql/share/errmsg-utf8.txt @@ -7138,6 +7138,9 @@ ER_COMPRESSION_DICTIONARY_DATA_TOO_LONG ER_COMPRESSION_DICTIONARY_IS_REFERENCED eng "Compression dictionary '%-.192s' is in use" +ER_GTID_DEPLOYMENT_STEP_ACTIVE + eng "super_read_only cannot be changed when gtid_deployment_step is ON" + # # End of 5.6 error messages. # diff --git a/sql/sys_vars.cc b/sql/sys_vars.cc index 281c0a49eb9f..1eac549a35da 100644 --- a/sql/sys_vars.cc +++ b/sql/sys_vars.cc @@ -2404,6 +2404,11 @@ static bool check_read_only(sys_var *self, THD *thd, set_var *var) my_error(ER_LOCK_OR_ACTIVE_TRANSACTION, MYF(0)); return true; } + if (opt_gtid_deployment_step) + { + my_error(ER_GTID_DEPLOYMENT_STEP_ACTIVE, MYF(0)); + return true; + } return false; } static bool fix_read_only(sys_var *self, THD *thd, enum_var_type type) @@ -5208,10 +5213,8 @@ static bool fix_gtid_deployment_step(sys_var *self, THD *thd, enum_var_type type bool new_gtid_deployment_step= gtid_deployment_step; bool result= true; - if (gtid_deployment_step == FALSE || - gtid_deployment_step == opt_gtid_deployment_step) + if (gtid_deployment_step == opt_gtid_deployment_step) { - opt_gtid_deployment_step= gtid_deployment_step; DBUG_RETURN(false); } @@ -5227,13 +5230,20 @@ static bool fix_gtid_deployment_step(sys_var *self, THD *thd, enum_var_type type if ((result= thd->global_read_lock.make_global_read_lock_block_commit(thd))) goto end_with_read_lock; - /* - Change the opt_deployment_step system variable, - safe because the lock is held - */ opt_gtid_deployment_step= new_gtid_deployment_step; result= false; + if (opt_gtid_deployment_step) + { + opt_super_readonly= opt_gtid_deployment_step; + opt_readonly= opt_gtid_deployment_step; + } + else + { + opt_super_readonly= super_read_only; + opt_readonly= read_only; + } + end_with_read_lock: /* Release the lock */ thd->global_read_lock.unlock_global_read_lock(thd); From c54271723c6f2f4e5b77cd8faf91e89412730209 Mon Sep 17 00:00:00 2001 From: Aditya A Date: Mon, 9 Jul 2018 17:25:49 +0530 Subject: [PATCH 1018/1221] Bug #26275510 BUNDLED ZLIB DOESN'T INCLUDE FIXES FOR SOME VULNERABILITIES Upgrading the zlib lib to 1.2.11 --- CMakeLists.txt | 8 +- client/CMakeLists.txt | 3 +- client/mysql.cc | 2 +- cmake/plugin.cmake | 4 +- cmake/zlib.cmake | 17 +- extra/CMakeLists.txt | 3 +- libmysql/CMakeLists.txt | 4 +- libmysqld/CMakeLists.txt | 3 +- mysys/CMakeLists.txt | 4 +- sql/CMakeLists.txt | 3 +- zlib/CMakeLists.txt | 157 +++- zlib/ChangeLog | 666 +++++++++++++- zlib/FAQ | 267 +++--- zlib/INDEX | 41 +- zlib/README | 94 +- zlib/README.MySQL | 16 - zlib/adler32.c | 113 ++- zlib/algorithm.txt | 209 ----- zlib/amiga/Makefile.pup | 69 ++ zlib/amiga/Makefile.sas | 68 ++ zlib/compress.c | 45 +- zlib/crc32.c | 149 ++-- zlib/crc32.h | 2 +- zlib/deflate.c | 1269 +++++++++++++++++--------- zlib/deflate.h | 78 +- zlib/gzclose.c | 25 + zlib/gzguts.h | 218 +++++ zlib/gzio.c | 1031 --------------------- zlib/gzlib.c | 637 +++++++++++++ zlib/gzread.c | 654 ++++++++++++++ zlib/gzwrite.c | 665 ++++++++++++++ zlib/infback.c | 107 ++- zlib/inffast.c | 159 ++-- zlib/inffast.h | 4 +- zlib/inffixed.h | 6 +- zlib/inflate.c | 507 +++++++---- zlib/inflate.h | 38 +- zlib/inftrees.c | 109 +-- zlib/inftrees.h | 27 +- zlib/make_vms.com | 867 ++++++++++++++++++ zlib/msdos/Makefile.bor | 115 +++ zlib/msdos/Makefile.dj2 | 104 +++ zlib/msdos/Makefile.emx | 69 ++ zlib/msdos/Makefile.msc | 112 +++ zlib/msdos/Makefile.tc | 100 +++ zlib/nintendods/README | 5 + zlib/old/Makefile.emx | 69 ++ zlib/old/Makefile.riscos | 151 ++++ zlib/old/README | 3 + zlib/old/descrip.mms | 48 + zlib/old/os2/Makefile.os2 | 136 +++ zlib/old/os2/zlib.def | 51 ++ zlib/old/visual-basic.txt | 160 ++++ zlib/os400/README400 | 48 + zlib/os400/bndsrc | 119 +++ zlib/os400/make.sh | 366 ++++++++ zlib/os400/zlib.inc | 527 +++++++++++ zlib/qnx/package.qpg | 141 +++ zlib/test/example.c | 602 +++++++++++++ zlib/test/infcover.c | 671 ++++++++++++++ zlib/test/minigzip.c | 651 ++++++++++++++ zlib/treebuild.xml | 116 +++ zlib/trees.c | 246 +++-- zlib/trees.h | 4 +- zlib/uncompr.c | 100 ++- zlib/watcom/watcom_f.mak | 43 + zlib/watcom/watcom_l.mak | 43 + zlib/win32/DLL_FAQ.txt | 397 ++++++++ zlib/win32/Makefile.bor | 110 +++ zlib/win32/Makefile.gcc | 182 ++++ zlib/win32/Makefile.msc | 163 ++++ zlib/win32/README-WIN32.txt | 103 +++ zlib/win32/VisualC.txt | 3 + zlib/win32/zlib.def | 94 ++ zlib/win32/zlib1.rc | 40 + zlib/zconf.h.cmakein | 536 +++++++++++ zlib/{zconf.h => zconf.h.in} | 324 +++++-- zlib/zlib.3 | 122 ++- zlib/zlib.h | 1639 +++++++++++++++++++++++----------- zlib/zlib.pc.cmakein | 13 + zlib/zlib.pc.in | 13 + zlib/zlib2ansi | 152 ++++ zlib/zutil.c | 101 ++- zlib/zutil.h | 192 ++-- 84 files changed, 13915 insertions(+), 3417 deletions(-) delete mode 100644 zlib/README.MySQL delete mode 100644 zlib/algorithm.txt create mode 100644 zlib/amiga/Makefile.pup create mode 100644 zlib/amiga/Makefile.sas create mode 100644 zlib/gzclose.c create mode 100644 zlib/gzguts.h delete mode 100644 zlib/gzio.c create mode 100644 zlib/gzlib.c create mode 100644 zlib/gzread.c create mode 100644 zlib/gzwrite.c create mode 100644 zlib/make_vms.com create mode 100644 zlib/msdos/Makefile.bor create mode 100644 zlib/msdos/Makefile.dj2 create mode 100644 zlib/msdos/Makefile.emx create mode 100644 zlib/msdos/Makefile.msc create mode 100644 zlib/msdos/Makefile.tc create mode 100644 zlib/nintendods/README create mode 100644 zlib/old/Makefile.emx create mode 100644 zlib/old/Makefile.riscos create mode 100644 zlib/old/README create mode 100644 zlib/old/descrip.mms create mode 100644 zlib/old/os2/Makefile.os2 create mode 100644 zlib/old/os2/zlib.def create mode 100644 zlib/old/visual-basic.txt create mode 100644 zlib/os400/README400 create mode 100644 zlib/os400/bndsrc create mode 100644 zlib/os400/make.sh create mode 100644 zlib/os400/zlib.inc create mode 100644 zlib/qnx/package.qpg create mode 100644 zlib/test/example.c create mode 100644 zlib/test/infcover.c create mode 100644 zlib/test/minigzip.c create mode 100644 zlib/treebuild.xml create mode 100644 zlib/watcom/watcom_f.mak create mode 100644 zlib/watcom/watcom_l.mak create mode 100644 zlib/win32/DLL_FAQ.txt create mode 100644 zlib/win32/Makefile.bor create mode 100644 zlib/win32/Makefile.gcc create mode 100644 zlib/win32/Makefile.msc create mode 100644 zlib/win32/README-WIN32.txt create mode 100644 zlib/win32/VisualC.txt create mode 100644 zlib/win32/zlib.def create mode 100644 zlib/win32/zlib1.rc create mode 100644 zlib/zconf.h.cmakein rename zlib/{zconf.h => zconf.h.in} (50%) create mode 100644 zlib/zlib.pc.cmakein create mode 100644 zlib/zlib.pc.in create mode 100755 zlib/zlib2ansi diff --git a/CMakeLists.txt b/CMakeLists.txt index 154273576d70..89f71fa85808 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2006, 2017, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 2018, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -382,6 +382,12 @@ INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/include) # Add bundled or system zlib. MYSQL_CHECK_ZLIB_WITH_COMPRESS() +IF(BUILD_BUNDLED_ZLIB) + INCLUDE_DIRECTORIES(SYSTEM + ${CMAKE_CURRENT_SOURCE_DIR}/zlib + ${CMAKE_CURRENT_BINARY_DIR}/zlib + ) +ENDIF() # Optionally add bundled yassl/taocrypt or system openssl. MYSQL_CHECK_SSL() # Add readline or libedit. diff --git a/client/CMakeLists.txt b/client/CMakeLists.txt index 21b1e084409f..ea72e9ce1e8e 100644 --- a/client/CMakeLists.txt +++ b/client/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2006, 2015, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 2018, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -15,7 +15,6 @@ INCLUDE_DIRECTORIES( ${CMAKE_SOURCE_DIR}/include - ${ZLIB_INCLUDE_DIR} ${SSL_INCLUDE_DIRS} ${CMAKE_SOURCE_DIR}/libmysql ${CMAKE_SOURCE_DIR}/regex diff --git a/client/mysql.cc b/client/mysql.cc index bc32a58f37ec..8510361a54ef 100644 --- a/client/mysql.cc +++ b/client/mysql.cc @@ -2671,7 +2671,7 @@ You can turn off this feature to get a quicker startup with -A\n\n"); mysql_free_result(fields); break; } - field_names[i][num_fields*2]= NULL; + field_names[i][num_fields*2]= '\0'; j=0; while ((sql_field=mysql_fetch_field(fields))) { diff --git a/cmake/plugin.cmake b/cmake/plugin.cmake index e946f0ff8635..77001edfd340 100644 --- a/cmake/plugin.cmake +++ b/cmake/plugin.cmake @@ -1,4 +1,4 @@ -# Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2009, 2018, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -56,7 +56,7 @@ MACRO(MYSQL_ADD_PLUGIN) ${CMAKE_SOURCE_DIR}/sql ${CMAKE_SOURCE_DIR}/regex ${SSL_INCLUDE_DIRS} - ${ZLIB_INCLUDE_DIR}) + ) LIST(GET ARG_DEFAULT_ARGS 0 plugin) SET(SOURCES ${ARG_DEFAULT_ARGS}) diff --git a/cmake/zlib.cmake b/cmake/zlib.cmake index c70d0e29ecf2..495571e4dc72 100644 --- a/cmake/zlib.cmake +++ b/cmake/zlib.cmake @@ -1,4 +1,4 @@ -# Copyright (c) 2009, 2013, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2009, 2018, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -14,15 +14,11 @@ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA MACRO (MYSQL_USE_BUNDLED_ZLIB) - SET(ZLIB_LIBRARY zlib) - SET(ZLIB_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/zlib) + SET(BUILD_BUNDLED_ZLIB 1) + SET(ZLIB_LIBRARY zlib CACHE INTERNAL "Bundled zlib library") SET(ZLIB_FOUND TRUE) SET(WITH_ZLIB "bundled" CACHE STRING "Use bundled zlib") ADD_SUBDIRECTORY(zlib) - GET_TARGET_PROPERTY(src zlib SOURCES) - FOREACH(file ${src}) - SET(ZLIB_SOURCES ${ZLIB_SOURCES} ${CMAKE_SOURCE_DIR}/zlib/${file}) - ENDFOREACH() ENDMACRO() # MYSQL_CHECK_ZLIB_WITH_COMPRESS @@ -37,15 +33,10 @@ ENDMACRO() MACRO (MYSQL_CHECK_ZLIB_WITH_COMPRESS) - IF(CMAKE_SYSTEM_NAME STREQUAL "OS400" OR - CMAKE_SYSTEM_NAME STREQUAL "AIX" OR - CMAKE_SYSTEM_NAME STREQUAL "Windows") - # Use bundled zlib on some platforms by default (system one is too - # old or not existent) + # For NDBCLUSTER: Use bundled zlib by default IF (NOT WITH_ZLIB) SET(WITH_ZLIB "bundled" CACHE STRING "By default use bundled zlib on this platform") ENDIF() - ENDIF() IF(WITH_ZLIB STREQUAL "bundled") MYSQL_USE_BUNDLED_ZLIB() diff --git a/extra/CMakeLists.txt b/extra/CMakeLists.txt index a569641a1986..bea704875a69 100644 --- a/extra/CMakeLists.txt +++ b/extra/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 2018, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -15,7 +15,6 @@ INCLUDE_DIRECTORIES( ${CMAKE_SOURCE_DIR}/include -${ZLIB_INCLUDE_DIR} # Following is for perror, in case NDB is compiled in. ${CMAKE_SOURCE_DIR}/storage/ndb/include ${CMAKE_SOURCE_DIR}/storage/ndb/include/util diff --git a/libmysql/CMakeLists.txt b/libmysql/CMakeLists.txt index 374b38131d24..9650c7edff56 100644 --- a/libmysql/CMakeLists.txt +++ b/libmysql/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2006, 2014, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 2018, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -21,7 +21,7 @@ INCLUDE_DIRECTORIES( ${CMAKE_SOURCE_DIR}/strings ${SSL_INCLUDE_DIRS} ${SSL_INTERNAL_INCLUDE_DIRS} - ${ZLIB_INCLUDE_DIR}) + ) ADD_DEFINITIONS(${SSL_DEFINES}) SET(CLIENT_API_FUNCTIONS diff --git a/libmysqld/CMakeLists.txt b/libmysqld/CMakeLists.txt index abbf887e1e62..b1ed62ce1411 100644 --- a/libmysqld/CMakeLists.txt +++ b/libmysqld/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2006, 2014, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 2018, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -23,7 +23,6 @@ ${CMAKE_SOURCE_DIR}/libmysqld ${CMAKE_SOURCE_DIR}/sql ${CMAKE_BINARY_DIR}/sql ${CMAKE_SOURCE_DIR}/regex -${ZLIB_INCLUDE_DIR} ${SSL_INCLUDE_DIRS} ${SSL_INTERNAL_INCLUDE_DIRS} ${CMAKE_SOURCE_DIR}/sql/backup diff --git a/mysys/CMakeLists.txt b/mysys/CMakeLists.txt index 6969acd8d043..e0745957c205 100644 --- a/mysys/CMakeLists.txt +++ b/mysys/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2006, 2014, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 2018, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -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 -INCLUDE_DIRECTORIES(${ZLIB_INCLUDE_DIR} ${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/mysys) +INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/mysys) SET(MYSYS_SOURCES array.c charset-def.c charset.c checksum.c default.c errors.c hash.c list.c md5.c mf_cache.c mf_dirname.c mf_fn_ext.c diff --git a/sql/CMakeLists.txt b/sql/CMakeLists.txt index aa7e0312e055..044cc8fac785 100644 --- a/sql/CMakeLists.txt +++ b/sql/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2006, 2017, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 2018, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -17,7 +17,6 @@ INCLUDE_DIRECTORIES( ${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/sql ${CMAKE_SOURCE_DIR}/regex -${ZLIB_INCLUDE_DIR} ${SSL_INCLUDE_DIRS} ${CMAKE_BINARY_DIR}/sql ) diff --git a/zlib/CMakeLists.txt b/zlib/CMakeLists.txt index 7668ce723b85..0c224e7ce226 100644 --- a/zlib/CMakeLists.txt +++ b/zlib/CMakeLists.txt @@ -1,29 +1,148 @@ -# Copyright (c) 2006, 2014, Oracle and/or its affiliates. All rights reserved. -# + +# Copyright (c) 2006, 2018, Oracle and/or its affiliates. All rights reserved. +# # 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. -# +# it under the terms of the GNU General Public License, version 2.0, +# as published by the Free Software Foundation. +# # 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. -# +# GNU General Public License, version 2.0, 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 +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +cmake_minimum_required(VERSION 2.4.4) +set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS ON) + +project(zlib C) + +set(VERSION "1.2.11") + +include(CheckTypeSize) +include(CheckFunctionExists) +include(CheckIncludeFile) +include(CheckCSourceCompiles) + +check_include_file(sys/types.h HAVE_SYS_TYPES_H) +check_include_file(stdint.h HAVE_STDINT_H) +check_include_file(stddef.h HAVE_STDDEF_H) + +# +# Check to see if we have large file support +# +set(CMAKE_REQUIRED_DEFINITIONS -D_LARGEFILE64_SOURCE=1) +# We add these other definitions here because CheckTypeSize.cmake +# in CMake 2.4.x does not automatically do so and we want +# compatibility with CMake 2.4.x. +if(HAVE_SYS_TYPES_H) + list(APPEND CMAKE_REQUIRED_DEFINITIONS -DHAVE_SYS_TYPES_H) +endif() +if(HAVE_STDINT_H) + list(APPEND CMAKE_REQUIRED_DEFINITIONS -DHAVE_STDINT_H) +endif() +if(HAVE_STDDEF_H) + list(APPEND CMAKE_REQUIRED_DEFINITIONS -DHAVE_STDDEF_H) +endif() +check_type_size(off64_t OFF64_T) +if(HAVE_OFF64_T) + add_definitions(-D_LARGEFILE64_SOURCE=1) +endif() +set(CMAKE_REQUIRED_DEFINITIONS) # clear variable + +# +# Check for fseeko +# +check_function_exists(fseeko HAVE_FSEEKO) +if(NOT HAVE_FSEEKO) + add_definitions(-DNO_FSEEKO) +endif() + +# +# Check for unistd.h +# +check_include_file(unistd.h Z_HAVE_UNISTD_H) -INCLUDE_DIRECTORIES( -${CMAKE_SOURCE_DIR}/include -${CMAKE_SOURCE_DIR}/zlib + +configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h.cmakein + ${CMAKE_CURRENT_BINARY_DIR}/zconf.h @ONLY + ) +include_directories( + SYSTEM ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} + ) + +#============================================================================ +# zlib +#============================================================================ + +set(ZLIB_PUBLIC_HDRS + ${CMAKE_CURRENT_BINARY_DIR}/zconf.h + zlib.h +) +set(ZLIB_PRIVATE_HDRS + crc32.h + deflate.h + gzguts.h + inffast.h + inffixed.h + inflate.h + inftrees.h + trees.h + zutil.h ) -SET(ZLIB_SOURCES adler32.c compress.c crc32.c crc32.h deflate.c deflate.h gzio.c infback.c inffast.c inffast.h - inffixed.h inflate.c inflate.h inftrees.c inftrees.h trees.c trees.h uncompr.c zconf.h zlib.h - zutil.c zutil.h) -ADD_CONVENIENCE_LIBRARY(zlib ${ZLIB_SOURCES}) -RESTRICT_SYMBOL_EXPORTS(zlib) +set(ZLIB_SRCS + adler32.c + compress.c + crc32.c + deflate.c + gzclose.c + gzlib.c + gzread.c + gzwrite.c + inflate.c + infback.c + inftrees.c + inffast.c + trees.c + uncompr.c + zutil.c +) + +if(NOT MINGW) + set(ZLIB_DLL_SRCS + win32/zlib1.rc # If present will override custom build rule below. + ) +endif() + +# parse the full version number from zlib.h and include in ZLIB_FULL_VERSION +file(READ ${CMAKE_CURRENT_SOURCE_DIR}/zlib.h _zlib_h_contents) +string(REGEX REPLACE ".*#define[ \t]+ZLIB_VERSION[ \t]+\"([-0-9A-Za-z.]+)\".*" + "\\1" ZLIB_FULL_VERSION ${_zlib_h_contents}) + +ADD_CONVENIENCE_LIBRARY(zlib STATIC + ${ZLIB_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS}) -IF(MSVC) - INSTALL_DEBUG_TARGET(zlib DESTINATION ${INSTALL_LIBDIR}/debug) -ENDIF() +if(NOT CYGWIN) + # This property causes shared libraries on Linux to have the full version + # encoded into their final filename. We disable this on Cygwin because + # it causes cygz-${ZLIB_FULL_VERSION}.dll to be created when cygz.dll + # seems to be the default. + # + # This has no effect with MSVC, on that platform the version info for + # the DLL comes from the resource file win32/zlib1.rc + set_target_properties(zlib PROPERTIES VERSION ${ZLIB_FULL_VERSION}) +endif() +if(CMAKE_SYSTEM_NAME MATCHES "SunOS") + # On unix-like platforms the library is almost always called libz + set_target_properties(zlib PROPERTIES OUTPUT_NAME z) +elseif(UNIX) + # On unix-like platforms the library is almost always called libz + set_target_properties(zlib PROPERTIES OUTPUT_NAME z) + if(NOT APPLE) + set_target_properties(zlib PROPERTIES LINK_FLAGS "-Wl,--version-script,\"${CMAKE_CURRENT_SOURCE_DIR}/zlib.map\"") + endif() +endif() diff --git a/zlib/ChangeLog b/zlib/ChangeLog index 7f6869d3235e..30199a65a03d 100644 --- a/zlib/ChangeLog +++ b/zlib/ChangeLog @@ -1,6 +1,666 @@ ChangeLog file for zlib +Changes in 1.2.11 (15 Jan 2017) +- Fix deflate stored bug when pulling last block from window +- Permit immediate deflateParams changes before any deflate input + +Changes in 1.2.10 (2 Jan 2017) +- Avoid warnings on snprintf() return value +- Fix bug in deflate_stored() for zero-length input +- Fix bug in gzwrite.c that produced corrupt gzip files +- Remove files to be installed before copying them in Makefile.in +- Add warnings when compiling with assembler code + +Changes in 1.2.9 (31 Dec 2016) +- Fix contrib/minizip to permit unzipping with desktop API [Zouzou] +- Improve contrib/blast to return unused bytes +- Assure that gzoffset() is correct when appending +- Improve compress() and uncompress() to support large lengths +- Fix bug in test/example.c where error code not saved +- Remedy Coverity warning [Randers-Pehrson] +- Improve speed of gzprintf() in transparent mode +- Fix inflateInit2() bug when windowBits is 16 or 32 +- Change DEBUG macro to ZLIB_DEBUG +- Avoid uninitialized access by gzclose_w() +- Allow building zlib outside of the source directory +- Fix bug that accepted invalid zlib header when windowBits is zero +- Fix gzseek() problem on MinGW due to buggy _lseeki64 there +- Loop on write() calls in gzwrite.c in case of non-blocking I/O +- Add --warn (-w) option to ./configure for more compiler warnings +- Reject a window size of 256 bytes if not using the zlib wrapper +- Fix bug when level 0 used with Z_HUFFMAN or Z_RLE +- Add --debug (-d) option to ./configure to define ZLIB_DEBUG +- Fix bugs in creating a very large gzip header +- Add uncompress2() function, which returns the input size used +- Assure that deflateParams() will not switch functions mid-block +- Dramatically speed up deflation for level 0 (storing) +- Add gzfread(), duplicating the interface of fread() +- Add gzfwrite(), duplicating the interface of fwrite() +- Add deflateGetDictionary() function +- Use snprintf() for later versions of Microsoft C +- Fix *Init macros to use z_ prefix when requested +- Replace as400 with os400 for OS/400 support [Monnerat] +- Add crc32_z() and adler32_z() functions with size_t lengths +- Update Visual Studio project files [AraHaan] + +Changes in 1.2.8 (28 Apr 2013) +- Update contrib/minizip/iowin32.c for Windows RT [Vollant] +- Do not force Z_CONST for C++ +- Clean up contrib/vstudio [Roß] +- Correct spelling error in zlib.h +- Fix mixed line endings in contrib/vstudio + +Changes in 1.2.7.3 (13 Apr 2013) +- Fix version numbers and DLL names in contrib/vstudio/*/zlib.rc + +Changes in 1.2.7.2 (13 Apr 2013) +- Change check for a four-byte type back to hexadecimal +- Fix typo in win32/Makefile.msc +- Add casts in gzwrite.c for pointer differences + +Changes in 1.2.7.1 (24 Mar 2013) +- Replace use of unsafe string functions with snprintf if available +- Avoid including stddef.h on Windows for Z_SOLO compile [Niessink] +- Fix gzgetc undefine when Z_PREFIX set [Turk] +- Eliminate use of mktemp in Makefile (not always available) +- Fix bug in 'F' mode for gzopen() +- Add inflateGetDictionary() function +- Correct comment in deflate.h +- Use _snprintf for snprintf in Microsoft C +- On Darwin, only use /usr/bin/libtool if libtool is not Apple +- Delete "--version" file if created by "ar --version" [Richard G.] +- Fix configure check for veracity of compiler error return codes +- Fix CMake compilation of static lib for MSVC2010 x64 +- Remove unused variable in infback9.c +- Fix argument checks in gzlog_compress() and gzlog_write() +- Clean up the usage of z_const and respect const usage within zlib +- Clean up examples/gzlog.[ch] comparisons of different types +- Avoid shift equal to bits in type (caused endless loop) +- Fix uninitialized value bug in gzputc() introduced by const patches +- Fix memory allocation error in examples/zran.c [Nor] +- Fix bug where gzopen(), gzclose() would write an empty file +- Fix bug in gzclose() when gzwrite() runs out of memory +- Check for input buffer malloc failure in examples/gzappend.c +- Add note to contrib/blast to use binary mode in stdio +- Fix comparisons of differently signed integers in contrib/blast +- Check for invalid code length codes in contrib/puff +- Fix serious but very rare decompression bug in inftrees.c +- Update inflateBack() comments, since inflate() can be faster +- Use underscored I/O function names for WINAPI_FAMILY +- Add _tr_flush_bits to the external symbols prefixed by --zprefix +- Add contrib/vstudio/vc10 pre-build step for static only +- Quote --version-script argument in CMakeLists.txt +- Don't specify --version-script on Apple platforms in CMakeLists.txt +- Fix casting error in contrib/testzlib/testzlib.c +- Fix types in contrib/minizip to match result of get_crc_table() +- Simplify contrib/vstudio/vc10 with 'd' suffix +- Add TOP support to win32/Makefile.msc +- Suport i686 and amd64 assembler builds in CMakeLists.txt +- Fix typos in the use of _LARGEFILE64_SOURCE in zconf.h +- Add vc11 and vc12 build files to contrib/vstudio +- Add gzvprintf() as an undocumented function in zlib +- Fix configure for Sun shell +- Remove runtime check in configure for four-byte integer type +- Add casts and consts to ease user conversion to C++ +- Add man pages for minizip and miniunzip +- In Makefile uninstall, don't rm if preceding cd fails +- Do not return Z_BUF_ERROR if deflateParam() has nothing to write + +Changes in 1.2.7 (2 May 2012) +- Replace use of memmove() with a simple copy for portability +- Test for existence of strerror +- Restore gzgetc_ for backward compatibility with 1.2.6 +- Fix build with non-GNU make on Solaris +- Require gcc 4.0 or later on Mac OS X to use the hidden attribute +- Include unistd.h for Watcom C +- Use __WATCOMC__ instead of __WATCOM__ +- Do not use the visibility attribute if NO_VIZ defined +- Improve the detection of no hidden visibility attribute +- Avoid using __int64 for gcc or solo compilation +- Cast to char * in gzprintf to avoid warnings [Zinser] +- Fix make_vms.com for VAX [Zinser] +- Don't use library or built-in byte swaps +- Simplify test and use of gcc hidden attribute +- Fix bug in gzclose_w() when gzwrite() fails to allocate memory +- Add "x" (O_EXCL) and "e" (O_CLOEXEC) modes support to gzopen() +- Fix bug in test/minigzip.c for configure --solo +- Fix contrib/vstudio project link errors [Mohanathas] +- Add ability to choose the builder in make_vms.com [Schweda] +- Add DESTDIR support to mingw32 win32/Makefile.gcc +- Fix comments in win32/Makefile.gcc for proper usage +- Allow overriding the default install locations for cmake +- Generate and install the pkg-config file with cmake +- Build both a static and a shared version of zlib with cmake +- Include version symbols for cmake builds +- If using cmake with MSVC, add the source directory to the includes +- Remove unneeded EXTRA_CFLAGS from win32/Makefile.gcc [Truta] +- Move obsolete emx makefile to old [Truta] +- Allow the use of -Wundef when compiling or using zlib +- Avoid the use of the -u option with mktemp +- Improve inflate() documentation on the use of Z_FINISH +- Recognize clang as gcc +- Add gzopen_w() in Windows for wide character path names +- Rename zconf.h in CMakeLists.txt to move it out of the way +- Add source directory in CMakeLists.txt for building examples +- Look in build directory for zlib.pc in CMakeLists.txt +- Remove gzflags from zlibvc.def in vc9 and vc10 +- Fix contrib/minizip compilation in the MinGW environment +- Update ./configure for Solaris, support --64 [Mooney] +- Remove -R. from Solaris shared build (possible security issue) +- Avoid race condition for parallel make (-j) running example +- Fix type mismatch between get_crc_table() and crc_table +- Fix parsing of version with "-" in CMakeLists.txt [Snider, Ziegler] +- Fix the path to zlib.map in CMakeLists.txt +- Force the native libtool in Mac OS X to avoid GNU libtool [Beebe] +- Add instructions to win32/Makefile.gcc for shared install [Torri] + +Changes in 1.2.6.1 (12 Feb 2012) +- Avoid the use of the Objective-C reserved name "id" +- Include io.h in gzguts.h for Microsoft compilers +- Fix problem with ./configure --prefix and gzgetc macro +- Include gz_header definition when compiling zlib solo +- Put gzflags() functionality back in zutil.c +- Avoid library header include in crc32.c for Z_SOLO +- Use name in GCC_CLASSIC as C compiler for coverage testing, if set +- Minor cleanup in contrib/minizip/zip.c [Vollant] +- Update make_vms.com [Zinser] +- Remove unnecessary gzgetc_ function +- Use optimized byte swap operations for Microsoft and GNU [Snyder] +- Fix minor typo in zlib.h comments [Rzesniowiecki] + +Changes in 1.2.6 (29 Jan 2012) +- Update the Pascal interface in contrib/pascal +- Fix function numbers for gzgetc_ in zlibvc.def files +- Fix configure.ac for contrib/minizip [Schiffer] +- Fix large-entry detection in minizip on 64-bit systems [Schiffer] +- Have ./configure use the compiler return code for error indication +- Fix CMakeLists.txt for cross compilation [McClure] +- Fix contrib/minizip/zip.c for 64-bit architectures [Dalsnes] +- Fix compilation of contrib/minizip on FreeBSD [Marquez] +- Correct suggested usages in win32/Makefile.msc [Shachar, Horvath] +- Include io.h for Turbo C / Borland C on all platforms [Truta] +- Make version explicit in contrib/minizip/configure.ac [Bosmans] +- Avoid warning for no encryption in contrib/minizip/zip.c [Vollant] +- Minor cleanup up contrib/minizip/unzip.c [Vollant] +- Fix bug when compiling minizip with C++ [Vollant] +- Protect for long name and extra fields in contrib/minizip [Vollant] +- Avoid some warnings in contrib/minizip [Vollant] +- Add -I../.. -L../.. to CFLAGS for minizip and miniunzip +- Add missing libs to minizip linker command +- Add support for VPATH builds in contrib/minizip +- Add an --enable-demos option to contrib/minizip/configure +- Add the generation of configure.log by ./configure +- Exit when required parameters not provided to win32/Makefile.gcc +- Have gzputc return the character written instead of the argument +- Use the -m option on ldconfig for BSD systems [Tobias] +- Correct in zlib.map when deflateResetKeep was added + +Changes in 1.2.5.3 (15 Jan 2012) +- Restore gzgetc function for binary compatibility +- Do not use _lseeki64 under Borland C++ [Truta] +- Update win32/Makefile.msc to build test/*.c [Truta] +- Remove old/visualc6 given CMakefile and other alternatives +- Update AS400 build files and documentation [Monnerat] +- Update win32/Makefile.gcc to build test/*.c [Truta] +- Permit stronger flushes after Z_BLOCK flushes +- Avoid extraneous empty blocks when doing empty flushes +- Permit Z_NULL arguments to deflatePending +- Allow deflatePrime() to insert bits in the middle of a stream +- Remove second empty static block for Z_PARTIAL_FLUSH +- Write out all of the available bits when using Z_BLOCK +- Insert the first two strings in the hash table after a flush + +Changes in 1.2.5.2 (17 Dec 2011) +- fix ld error: unable to find version dependency 'ZLIB_1.2.5' +- use relative symlinks for shared libs +- Avoid searching past window for Z_RLE strategy +- Assure that high-water mark initialization is always applied in deflate +- Add assertions to fill_window() in deflate.c to match comments +- Update python link in README +- Correct spelling error in gzread.c +- Fix bug in gzgets() for a concatenated empty gzip stream +- Correct error in comment for gz_make() +- Change gzread() and related to ignore junk after gzip streams +- Allow gzread() and related to continue after gzclearerr() +- Allow gzrewind() and gzseek() after a premature end-of-file +- Simplify gzseek() now that raw after gzip is ignored +- Change gzgetc() to a macro for speed (~40% speedup in testing) +- Fix gzclose() to return the actual error last encountered +- Always add large file support for windows +- Include zconf.h for windows large file support +- Include zconf.h.cmakein for windows large file support +- Update zconf.h.cmakein on make distclean +- Merge vestigial vsnprintf determination from zutil.h to gzguts.h +- Clarify how gzopen() appends in zlib.h comments +- Correct documentation of gzdirect() since junk at end now ignored +- Add a transparent write mode to gzopen() when 'T' is in the mode +- Update python link in zlib man page +- Get inffixed.h and MAKEFIXED result to match +- Add a ./config --solo option to make zlib subset with no library use +- Add undocumented inflateResetKeep() function for CAB file decoding +- Add --cover option to ./configure for gcc coverage testing +- Add #define ZLIB_CONST option to use const in the z_stream interface +- Add comment to gzdopen() in zlib.h to use dup() when using fileno() +- Note behavior of uncompress() to provide as much data as it can +- Add files in contrib/minizip to aid in building libminizip +- Split off AR options in Makefile.in and configure +- Change ON macro to Z_ARG to avoid application conflicts +- Facilitate compilation with Borland C++ for pragmas and vsnprintf +- Include io.h for Turbo C / Borland C++ +- Move example.c and minigzip.c to test/ +- Simplify incomplete code table filling in inflate_table() +- Remove code from inflate.c and infback.c that is impossible to execute +- Test the inflate code with full coverage +- Allow deflateSetDictionary, inflateSetDictionary at any time (in raw) +- Add deflateResetKeep and fix inflateResetKeep to retain dictionary +- Fix gzwrite.c to accommodate reduced memory zlib compilation +- Have inflate() with Z_FINISH avoid the allocation of a window +- Do not set strm->adler when doing raw inflate +- Fix gzeof() to behave just like feof() when read is not past end of file +- Fix bug in gzread.c when end-of-file is reached +- Avoid use of Z_BUF_ERROR in gz* functions except for premature EOF +- Document gzread() capability to read concurrently written files +- Remove hard-coding of resource compiler in CMakeLists.txt [Blammo] + +Changes in 1.2.5.1 (10 Sep 2011) +- Update FAQ entry on shared builds (#13) +- Avoid symbolic argument to chmod in Makefile.in +- Fix bug and add consts in contrib/puff [Oberhumer] +- Update contrib/puff/zeros.raw test file to have all block types +- Add full coverage test for puff in contrib/puff/Makefile +- Fix static-only-build install in Makefile.in +- Fix bug in unzGetCurrentFileInfo() in contrib/minizip [Kuno] +- Add libz.a dependency to shared in Makefile.in for parallel builds +- Spell out "number" (instead of "nb") in zlib.h for total_in, total_out +- Replace $(...) with `...` in configure for non-bash sh [Bowler] +- Add darwin* to Darwin* and solaris* to SunOS\ 5* in configure [Groffen] +- Add solaris* to Linux* in configure to allow gcc use [Groffen] +- Add *bsd* to Linux* case in configure [Bar-Lev] +- Add inffast.obj to dependencies in win32/Makefile.msc +- Correct spelling error in deflate.h [Kohler] +- Change libzdll.a again to libz.dll.a (!) in win32/Makefile.gcc +- Add test to configure for GNU C looking for gcc in output of $cc -v +- Add zlib.pc generation to win32/Makefile.gcc [Weigelt] +- Fix bug in zlib.h for _FILE_OFFSET_BITS set and _LARGEFILE64_SOURCE not +- Add comment in zlib.h that adler32_combine with len2 < 0 makes no sense +- Make NO_DIVIDE option in adler32.c much faster (thanks to John Reiser) +- Make stronger test in zconf.h to include unistd.h for LFS +- Apply Darwin patches for 64-bit file offsets to contrib/minizip [Slack] +- Fix zlib.h LFS support when Z_PREFIX used +- Add updated as400 support (removed from old) [Monnerat] +- Avoid deflate sensitivity to volatile input data +- Avoid division in adler32_combine for NO_DIVIDE +- Clarify the use of Z_FINISH with deflateBound() amount of space +- Set binary for output file in puff.c +- Use u4 type for crc_table to avoid conversion warnings +- Apply casts in zlib.h to avoid conversion warnings +- Add OF to prototypes for adler32_combine_ and crc32_combine_ [Miller] +- Improve inflateSync() documentation to note indeterminancy +- Add deflatePending() function to return the amount of pending output +- Correct the spelling of "specification" in FAQ [Randers-Pehrson] +- Add a check in configure for stdarg.h, use for gzprintf() +- Check that pointers fit in ints when gzprint() compiled old style +- Add dummy name before $(SHAREDLIBV) in Makefile [Bar-Lev, Bowler] +- Delete line in configure that adds -L. libz.a to LDFLAGS [Weigelt] +- Add debug records in assmebler code [Londer] +- Update RFC references to use http://tools.ietf.org/html/... [Li] +- Add --archs option, use of libtool to configure for Mac OS X [Borstel] + +Changes in 1.2.5 (19 Apr 2010) +- Disable visibility attribute in win32/Makefile.gcc [Bar-Lev] +- Default to libdir as sharedlibdir in configure [Nieder] +- Update copyright dates on modified source files +- Update trees.c to be able to generate modified trees.h +- Exit configure for MinGW, suggesting win32/Makefile.gcc +- Check for NULL path in gz_open [Homurlu] + +Changes in 1.2.4.5 (18 Apr 2010) +- Set sharedlibdir in configure [Torok] +- Set LDFLAGS in Makefile.in [Bar-Lev] +- Avoid mkdir objs race condition in Makefile.in [Bowler] +- Add ZLIB_INTERNAL in front of internal inter-module functions and arrays +- Define ZLIB_INTERNAL to hide internal functions and arrays for GNU C +- Don't use hidden attribute when it is a warning generator (e.g. Solaris) + +Changes in 1.2.4.4 (18 Apr 2010) +- Fix CROSS_PREFIX executable testing, CHOST extract, mingw* [Torok] +- Undefine _LARGEFILE64_SOURCE in zconf.h if it is zero, but not if empty +- Try to use bash or ksh regardless of functionality of /bin/sh +- Fix configure incompatibility with NetBSD sh +- Remove attempt to run under bash or ksh since have better NetBSD fix +- Fix win32/Makefile.gcc for MinGW [Bar-Lev] +- Add diagnostic messages when using CROSS_PREFIX in configure +- Added --sharedlibdir option to configure [Weigelt] +- Use hidden visibility attribute when available [Frysinger] + +Changes in 1.2.4.3 (10 Apr 2010) +- Only use CROSS_PREFIX in configure for ar and ranlib if they exist +- Use CROSS_PREFIX for nm [Bar-Lev] +- Assume _LARGEFILE64_SOURCE defined is equivalent to true +- Avoid use of undefined symbols in #if with && and || +- Make *64 prototypes in gzguts.h consistent with functions +- Add -shared load option for MinGW in configure [Bowler] +- Move z_off64_t to public interface, use instead of off64_t +- Remove ! from shell test in configure (not portable to Solaris) +- Change +0 macro tests to -0 for possibly increased portability + +Changes in 1.2.4.2 (9 Apr 2010) +- Add consistent carriage returns to readme.txt's in masmx86 and masmx64 +- Really provide prototypes for *64 functions when building without LFS +- Only define unlink() in minigzip.c if unistd.h not included +- Update README to point to contrib/vstudio project files +- Move projects/vc6 to old/ and remove projects/ +- Include stdlib.h in minigzip.c for setmode() definition under WinCE +- Clean up assembler builds in win32/Makefile.msc [Rowe] +- Include sys/types.h for Microsoft for off_t definition +- Fix memory leak on error in gz_open() +- Symbolize nm as $NM in configure [Weigelt] +- Use TEST_LDSHARED instead of LDSHARED to link test programs [Weigelt] +- Add +0 to _FILE_OFFSET_BITS and _LFS64_LARGEFILE in case not defined +- Fix bug in gzeof() to take into account unused input data +- Avoid initialization of structures with variables in puff.c +- Updated win32/README-WIN32.txt [Rowe] + +Changes in 1.2.4.1 (28 Mar 2010) +- Remove the use of [a-z] constructs for sed in configure [gentoo 310225] +- Remove $(SHAREDLIB) from LIBS in Makefile.in [Creech] +- Restore "for debugging" comment on sprintf() in gzlib.c +- Remove fdopen for MVS from gzguts.h +- Put new README-WIN32.txt in win32 [Rowe] +- Add check for shell to configure and invoke another shell if needed +- Fix big fat stinking bug in gzseek() on uncompressed files +- Remove vestigial F_OPEN64 define in zutil.h +- Set and check the value of _LARGEFILE_SOURCE and _LARGEFILE64_SOURCE +- Avoid errors on non-LFS systems when applications define LFS macros +- Set EXE to ".exe" in configure for MINGW [Kahle] +- Match crc32() in crc32.c exactly to the prototype in zlib.h [Sherrill] +- Add prefix for cross-compilation in win32/makefile.gcc [Bar-Lev] +- Add DLL install in win32/makefile.gcc [Bar-Lev] +- Allow Linux* or linux* from uname in configure [Bar-Lev] +- Allow ldconfig to be redefined in configure and Makefile.in [Bar-Lev] +- Add cross-compilation prefixes to configure [Bar-Lev] +- Match type exactly in gz_load() invocation in gzread.c +- Match type exactly of zcalloc() in zutil.c to zlib.h alloc_func +- Provide prototypes for *64 functions when building zlib without LFS +- Don't use -lc when linking shared library on MinGW +- Remove errno.h check in configure and vestigial errno code in zutil.h + +Changes in 1.2.4 (14 Mar 2010) +- Fix VER3 extraction in configure for no fourth subversion +- Update zlib.3, add docs to Makefile.in to make .pdf out of it +- Add zlib.3.pdf to distribution +- Don't set error code in gzerror() if passed pointer is NULL +- Apply destination directory fixes to CMakeLists.txt [Lowman] +- Move #cmakedefine's to a new zconf.in.cmakein +- Restore zconf.h for builds that don't use configure or cmake +- Add distclean to dummy Makefile for convenience +- Update and improve INDEX, README, and FAQ +- Update CMakeLists.txt for the return of zconf.h [Lowman] +- Update contrib/vstudio/vc9 and vc10 [Vollant] +- Change libz.dll.a back to libzdll.a in win32/Makefile.gcc +- Apply license and readme changes to contrib/asm686 [Raiter] +- Check file name lengths and add -c option in minigzip.c [Li] +- Update contrib/amd64 and contrib/masmx86/ [Vollant] +- Avoid use of "eof" parameter in trees.c to not shadow library variable +- Update make_vms.com for removal of zlibdefs.h [Zinser] +- Update assembler code and vstudio projects in contrib [Vollant] +- Remove outdated assembler code contrib/masm686 and contrib/asm586 +- Remove old vc7 and vc8 from contrib/vstudio +- Update win32/Makefile.msc, add ZLIB_VER_SUBREVISION [Rowe] +- Fix memory leaks in gzclose_r() and gzclose_w(), file leak in gz_open() +- Add contrib/gcc_gvmat64 for longest_match and inflate_fast [Vollant] +- Remove *64 functions from win32/zlib.def (they're not 64-bit yet) +- Fix bug in void-returning vsprintf() case in gzwrite.c +- Fix name change from inflate.h in contrib/inflate86/inffas86.c +- Check if temporary file exists before removing in make_vms.com [Zinser] +- Fix make install and uninstall for --static option +- Fix usage of _MSC_VER in gzguts.h and zutil.h [Truta] +- Update readme.txt in contrib/masmx64 and masmx86 to assemble + +Changes in 1.2.3.9 (21 Feb 2010) +- Expunge gzio.c +- Move as400 build information to old +- Fix updates in contrib/minizip and contrib/vstudio +- Add const to vsnprintf test in configure to avoid warnings [Weigelt] +- Delete zconf.h (made by configure) [Weigelt] +- Change zconf.in.h to zconf.h.in per convention [Weigelt] +- Check for NULL buf in gzgets() +- Return empty string for gzgets() with len == 1 (like fgets()) +- Fix description of gzgets() in zlib.h for end-of-file, NULL return +- Update minizip to 1.1 [Vollant] +- Avoid MSVC loss of data warnings in gzread.c, gzwrite.c +- Note in zlib.h that gzerror() should be used to distinguish from EOF +- Remove use of snprintf() from gzlib.c +- Fix bug in gzseek() +- Update contrib/vstudio, adding vc9 and vc10 [Kuno, Vollant] +- Fix zconf.h generation in CMakeLists.txt [Lowman] +- Improve comments in zconf.h where modified by configure + +Changes in 1.2.3.8 (13 Feb 2010) +- Clean up text files (tabs, trailing whitespace, etc.) [Oberhumer] +- Use z_off64_t in gz_zero() and gz_skip() to match state->skip +- Avoid comparison problem when sizeof(int) == sizeof(z_off64_t) +- Revert to Makefile.in from 1.2.3.6 (live with the clutter) +- Fix missing error return in gzflush(), add zlib.h note +- Add *64 functions to zlib.map [Levin] +- Fix signed/unsigned comparison in gz_comp() +- Use SFLAGS when testing shared linking in configure +- Add --64 option to ./configure to use -m64 with gcc +- Fix ./configure --help to correctly name options +- Have make fail if a test fails [Levin] +- Avoid buffer overrun in contrib/masmx64/gvmat64.asm [Simpson] +- Remove assembler object files from contrib + +Changes in 1.2.3.7 (24 Jan 2010) +- Always gzopen() with O_LARGEFILE if available +- Fix gzdirect() to work immediately after gzopen() or gzdopen() +- Make gzdirect() more precise when the state changes while reading +- Improve zlib.h documentation in many places +- Catch memory allocation failure in gz_open() +- Complete close operation if seek forward in gzclose_w() fails +- Return Z_ERRNO from gzclose_r() if close() fails +- Return Z_STREAM_ERROR instead of EOF for gzclose() being passed NULL +- Return zero for gzwrite() errors to match zlib.h description +- Return -1 on gzputs() error to match zlib.h description +- Add zconf.in.h to allow recovery from configure modification [Weigelt] +- Fix static library permissions in Makefile.in [Weigelt] +- Avoid warnings in configure tests that hide functionality [Weigelt] +- Add *BSD and DragonFly to Linux case in configure [gentoo 123571] +- Change libzdll.a to libz.dll.a in win32/Makefile.gcc [gentoo 288212] +- Avoid access of uninitialized data for first inflateReset2 call [Gomes] +- Keep object files in subdirectories to reduce the clutter somewhat +- Remove default Makefile and zlibdefs.h, add dummy Makefile +- Add new external functions to Z_PREFIX, remove duplicates, z_z_ -> z_ +- Remove zlibdefs.h completely -- modify zconf.h instead + +Changes in 1.2.3.6 (17 Jan 2010) +- Avoid void * arithmetic in gzread.c and gzwrite.c +- Make compilers happier with const char * for gz_error message +- Avoid unused parameter warning in inflate.c +- Avoid signed-unsigned comparison warning in inflate.c +- Indent #pragma's for traditional C +- Fix usage of strwinerror() in glib.c, change to gz_strwinerror() +- Correct email address in configure for system options +- Update make_vms.com and add make_vms.com to contrib/minizip [Zinser] +- Update zlib.map [Brown] +- Fix Makefile.in for Solaris 10 make of example64 and minizip64 [Torok] +- Apply various fixes to CMakeLists.txt [Lowman] +- Add checks on len in gzread() and gzwrite() +- Add error message for no more room for gzungetc() +- Remove zlib version check in gzwrite() +- Defer compression of gzprintf() result until need to +- Use snprintf() in gzdopen() if available +- Remove USE_MMAP configuration determination (only used by minigzip) +- Remove examples/pigz.c (available separately) +- Update examples/gun.c to 1.6 + +Changes in 1.2.3.5 (8 Jan 2010) +- Add space after #if in zutil.h for some compilers +- Fix relatively harmless bug in deflate_fast() [Exarevsky] +- Fix same problem in deflate_slow() +- Add $(SHAREDLIBV) to LIBS in Makefile.in [Brown] +- Add deflate_rle() for faster Z_RLE strategy run-length encoding +- Add deflate_huff() for faster Z_HUFFMAN_ONLY encoding +- Change name of "write" variable in inffast.c to avoid library collisions +- Fix premature EOF from gzread() in gzio.c [Brown] +- Use zlib header window size if windowBits is 0 in inflateInit2() +- Remove compressBound() call in deflate.c to avoid linking compress.o +- Replace use of errno in gz* with functions, support WinCE [Alves] +- Provide alternative to perror() in minigzip.c for WinCE [Alves] +- Don't use _vsnprintf on later versions of MSVC [Lowman] +- Add CMake build script and input file [Lowman] +- Update contrib/minizip to 1.1 [Svensson, Vollant] +- Moved nintendods directory from contrib to . +- Replace gzio.c with a new set of routines with the same functionality +- Add gzbuffer(), gzoffset(), gzclose_r(), gzclose_w() as part of above +- Update contrib/minizip to 1.1b +- Change gzeof() to return 0 on error instead of -1 to agree with zlib.h + +Changes in 1.2.3.4 (21 Dec 2009) +- Use old school .SUFFIXES in Makefile.in for FreeBSD compatibility +- Update comments in configure and Makefile.in for default --shared +- Fix test -z's in configure [Marquess] +- Build examplesh and minigzipsh when not testing +- Change NULL's to Z_NULL's in deflate.c and in comments in zlib.h +- Import LDFLAGS from the environment in configure +- Fix configure to populate SFLAGS with discovered CFLAGS options +- Adapt make_vms.com to the new Makefile.in [Zinser] +- Add zlib2ansi script for C++ compilation [Marquess] +- Add _FILE_OFFSET_BITS=64 test to make test (when applicable) +- Add AMD64 assembler code for longest match to contrib [Teterin] +- Include options from $SFLAGS when doing $LDSHARED +- Simplify 64-bit file support by introducing z_off64_t type +- Make shared object files in objs directory to work around old Sun cc +- Use only three-part version number for Darwin shared compiles +- Add rc option to ar in Makefile.in for when ./configure not run +- Add -WI,-rpath,. to LDFLAGS for OSF 1 V4* +- Set LD_LIBRARYN32_PATH for SGI IRIX shared compile +- Protect against _FILE_OFFSET_BITS being defined when compiling zlib +- Rename Makefile.in targets allstatic to static and allshared to shared +- Fix static and shared Makefile.in targets to be independent +- Correct error return bug in gz_open() by setting state [Brown] +- Put spaces before ;;'s in configure for better sh compatibility +- Add pigz.c (parallel implementation of gzip) to examples/ +- Correct constant in crc32.c to UL [Leventhal] +- Reject negative lengths in crc32_combine() +- Add inflateReset2() function to work like inflateEnd()/inflateInit2() +- Include sys/types.h for _LARGEFILE64_SOURCE [Brown] +- Correct typo in doc/algorithm.txt [Janik] +- Fix bug in adler32_combine() [Zhu] +- Catch missing-end-of-block-code error in all inflates and in puff + Assures that random input to inflate eventually results in an error +- Added enough.c (calculation of ENOUGH for inftrees.h) to examples/ +- Update ENOUGH and its usage to reflect discovered bounds +- Fix gzerror() error report on empty input file [Brown] +- Add ush casts in trees.c to avoid pedantic runtime errors +- Fix typo in zlib.h uncompress() description [Reiss] +- Correct inflate() comments with regard to automatic header detection +- Remove deprecation comment on Z_PARTIAL_FLUSH (it stays) +- Put new version of gzlog (2.0) in examples with interruption recovery +- Add puff compile option to permit invalid distance-too-far streams +- Add puff TEST command options, ability to read piped input +- Prototype the *64 functions in zlib.h when _FILE_OFFSET_BITS == 64, but + _LARGEFILE64_SOURCE not defined +- Fix Z_FULL_FLUSH to truly erase the past by resetting s->strstart +- Fix deflateSetDictionary() to use all 32K for output consistency +- Remove extraneous #define MIN_LOOKAHEAD in deflate.c (in deflate.h) +- Clear bytes after deflate lookahead to avoid use of uninitialized data +- Change a limit in inftrees.c to be more transparent to Coverity Prevent +- Update win32/zlib.def with exported symbols from zlib.h +- Correct spelling errors in zlib.h [Willem, Sobrado] +- Allow Z_BLOCK for deflate() to force a new block +- Allow negative bits in inflatePrime() to delete existing bit buffer +- Add Z_TREES flush option to inflate() to return at end of trees +- Add inflateMark() to return current state information for random access +- Add Makefile for NintendoDS to contrib [Costa] +- Add -w in configure compile tests to avoid spurious warnings [Beucler] +- Fix typos in zlib.h comments for deflateSetDictionary() +- Fix EOF detection in transparent gzread() [Maier] + +Changes in 1.2.3.3 (2 October 2006) +- Make --shared the default for configure, add a --static option +- Add compile option to permit invalid distance-too-far streams +- Add inflateUndermine() function which is required to enable above +- Remove use of "this" variable name for C++ compatibility [Marquess] +- Add testing of shared library in make test, if shared library built +- Use ftello() and fseeko() if available instead of ftell() and fseek() +- Provide two versions of all functions that use the z_off_t type for + binary compatibility -- a normal version and a 64-bit offset version, + per the Large File Support Extension when _LARGEFILE64_SOURCE is + defined; use the 64-bit versions by default when _FILE_OFFSET_BITS + is defined to be 64 +- Add a --uname= option to configure to perhaps help with cross-compiling + +Changes in 1.2.3.2 (3 September 2006) +- Turn off silly Borland warnings [Hay] +- Use off64_t and define _LARGEFILE64_SOURCE when present +- Fix missing dependency on inffixed.h in Makefile.in +- Rig configure --shared to build both shared and static [Teredesai, Truta] +- Remove zconf.in.h and instead create a new zlibdefs.h file +- Fix contrib/minizip/unzip.c non-encrypted after encrypted [Vollant] +- Add treebuild.xml (see http://treebuild.metux.de/) [Weigelt] + +Changes in 1.2.3.1 (16 August 2006) +- Add watcom directory with OpenWatcom make files [Daniel] +- Remove #undef of FAR in zconf.in.h for MVS [Fedtke] +- Update make_vms.com [Zinser] +- Use -fPIC for shared build in configure [Teredesai, Nicholson] +- Use only major version number for libz.so on IRIX and OSF1 [Reinholdtsen] +- Use fdopen() (not _fdopen()) for Interix in zutil.h [Bäck] +- Add some FAQ entries about the contrib directory +- Update the MVS question in the FAQ +- Avoid extraneous reads after EOF in gzio.c [Brown] +- Correct spelling of "successfully" in gzio.c [Randers-Pehrson] +- Add comments to zlib.h about gzerror() usage [Brown] +- Set extra flags in gzip header in gzopen() like deflate() does +- Make configure options more compatible with double-dash conventions + [Weigelt] +- Clean up compilation under Solaris SunStudio cc [Rowe, Reinholdtsen] +- Fix uninstall target in Makefile.in [Truta] +- Add pkgconfig support [Weigelt] +- Use $(DESTDIR) macro in Makefile.in [Reinholdtsen, Weigelt] +- Replace set_data_type() with a more accurate detect_data_type() in + trees.c, according to the txtvsbin.txt document [Truta] +- Swap the order of #include and #include "zlib.h" in + gzio.c, example.c and minigzip.c [Truta] +- Shut up annoying VS2005 warnings about standard C deprecation [Rowe, + Truta] (where?) +- Fix target "clean" from win32/Makefile.bor [Truta] +- Create .pdb and .manifest files in win32/makefile.msc [Ziegler, Rowe] +- Update zlib www home address in win32/DLL_FAQ.txt [Truta] +- Update contrib/masmx86/inffas32.asm for VS2005 [Vollant, Van Wassenhove] +- Enable browse info in the "Debug" and "ASM Debug" configurations in + the Visual C++ 6 project, and set (non-ASM) "Debug" as default [Truta] +- Add pkgconfig support [Weigelt] +- Add ZLIB_VER_MAJOR, ZLIB_VER_MINOR and ZLIB_VER_REVISION in zlib.h, + for use in win32/zlib1.rc [Polushin, Rowe, Truta] +- Add a document that explains the new text detection scheme to + doc/txtvsbin.txt [Truta] +- Add rfc1950.txt, rfc1951.txt and rfc1952.txt to doc/ [Truta] +- Move algorithm.txt into doc/ [Truta] +- Synchronize FAQ with website +- Fix compressBound(), was low for some pathological cases [Fearnley] +- Take into account wrapper variations in deflateBound() +- Set examples/zpipe.c input and output to binary mode for Windows +- Update examples/zlib_how.html with new zpipe.c (also web site) +- Fix some warnings in examples/gzlog.c and examples/zran.c (it seems + that gcc became pickier in 4.0) +- Add zlib.map for Linux: "All symbols from zlib-1.1.4 remain + un-versioned, the patch adds versioning only for symbols introduced in + zlib-1.2.0 or later. It also declares as local those symbols which are + not designed to be exported." [Levin] +- Update Z_PREFIX list in zconf.in.h, add --zprefix option to configure +- Do not initialize global static by default in trees.c, add a response + NO_INIT_GLOBAL_POINTERS to initialize them if needed [Marquess] +- Don't use strerror() in gzio.c under WinCE [Yakimov] +- Don't use errno.h in zutil.h under WinCE [Yakimov] +- Move arguments for AR to its usage to allow replacing ar [Marot] +- Add HAVE_VISIBILITY_PRAGMA in zconf.in.h for Mozilla [Randers-Pehrson] +- Improve inflateInit() and inflateInit2() documentation +- Fix structure size comment in inflate.h +- Change configure help option from --h* to --help [Santos] + Changes in 1.2.3 (18 July 2005) - Apply security vulnerability fixes to contrib/infback9 as well - Clean up some text files (carriage returns, trailing space) @@ -13,7 +673,7 @@ Changes in 1.2.2.4 (11 July 2005) compile - Fix some spelling errors in comments [Betts] - Correct inflateInit2() error return documentation in zlib.h -- Added zran.c example of compressed data random access to examples +- Add zran.c example of compressed data random access to examples directory, shows use of inflatePrime() - Fix cast for assignments to strm->state in inflate.c and infback.c - Fix zlibCompileFlags() in zutil.c to use 1L for long shifts [Oberhumer] @@ -561,7 +1221,7 @@ Changes in 1.0.6 (19 Jan 1998) 386 asm code replacing longest_match(). contrib/iostream/ by Kevin Ruland A C++ I/O streams interface to the zlib gz* functions - contrib/iostream2/ by Tyge Lvset + contrib/iostream2/ by Tyge Løvset Another C++ I/O streams interface contrib/untgz/ by "Pedro A. Aranda Guti\irrez" A very simple tar.gz file extractor using zlib @@ -650,7 +1310,7 @@ Changes in 1.0.1 (20 May 96) [1.0 skipped to avoid confusion] - fix array overlay in deflate.c which sometimes caused bad compressed data - fix inflate bug with empty stored block - fix MSDOS medium model which was broken in 0.99 -- fix deflateParams() which could generated bad compressed data. +- fix deflateParams() which could generate bad compressed data. - Bytef is define'd instead of typedef'ed (work around Borland bug) - added an INDEX file - new makefiles for DJGPP (Makefile.dj2), 32-bit Borland (Makefile.b32), diff --git a/zlib/FAQ b/zlib/FAQ index 441d910daa18..99b7cf92e454 100644 --- a/zlib/FAQ +++ b/zlib/FAQ @@ -3,8 +3,8 @@ If your question is not there, please check the zlib home page -http://www.zlib.org which may have more recent information. -The lastest zlib FAQ is at http://www.gzip.org/zlib/zlib_faq.html +http://zlib.net/ which may have more recent information. +The lastest zlib FAQ is at http://zlib.net/zlib_faq.html 1. Is zlib Y2K-compliant? @@ -13,54 +13,51 @@ The lastest zlib FAQ is at http://www.gzip.org/zlib/zlib_faq.html 2. Where can I get a Windows DLL version? - The zlib sources can be compiled without change to produce a DLL. - See the file win32/DLL_FAQ.txt in the zlib distribution. - Pointers to the precompiled DLL are found in the zlib web site at - http://www.zlib.org. + The zlib sources can be compiled without change to produce a DLL. See the + file win32/DLL_FAQ.txt in the zlib distribution. Pointers to the + precompiled DLL are found in the zlib web site at http://zlib.net/ . 3. Where can I get a Visual Basic interface to zlib? See - * http://www.dogma.net/markn/articles/zlibtool/zlibtool.htm - * contrib/visual-basic.txt in the zlib distribution + * http://marknelson.us/1997/01/01/zlib-engine/ * win32/DLL_FAQ.txt in the zlib distribution 4. compress() returns Z_BUF_ERROR. - Make sure that before the call of compress, the length of the compressed - buffer is equal to the total size of the compressed buffer and not - zero. For Visual Basic, check that this parameter is passed by reference + Make sure that before the call of compress(), the length of the compressed + buffer is equal to the available size of the compressed buffer and not + zero. For Visual Basic, check that this parameter is passed by reference ("as any"), not by value ("as long"). 5. deflate() or inflate() returns Z_BUF_ERROR. - Before making the call, make sure that avail_in and avail_out are not - zero. When setting the parameter flush equal to Z_FINISH, also make sure - that avail_out is big enough to allow processing all pending input. - Note that a Z_BUF_ERROR is not fatal--another call to deflate() or - inflate() can be made with more input or output space. A Z_BUF_ERROR - may in fact be unavoidable depending on how the functions are used, since - it is not possible to tell whether or not there is more output pending - when strm.avail_out returns with zero. + Before making the call, make sure that avail_in and avail_out are not zero. + When setting the parameter flush equal to Z_FINISH, also make sure that + avail_out is big enough to allow processing all pending input. Note that a + Z_BUF_ERROR is not fatal--another call to deflate() or inflate() can be + made with more input or output space. A Z_BUF_ERROR may in fact be + unavoidable depending on how the functions are used, since it is not + possible to tell whether or not there is more output pending when + strm.avail_out returns with zero. See http://zlib.net/zlib_how.html for a + heavily annotated example. 6. Where's the zlib documentation (man pages, etc.)? - It's in zlib.h for the moment, and Francis S. Lin has converted it to a - web page zlib.html. Volunteers to transform this to Unix-style man pages, - please contact us (zlib@gzip.org). Examples of zlib usage are in the files - example.c and minigzip.c. + It's in zlib.h . Examples of zlib usage are in the files test/example.c + and test/minigzip.c, with more in examples/ . 7. Why don't you use GNU autoconf or libtool or ...? - Because we would like to keep zlib as a very small and simple - package. zlib is rather portable and doesn't need much configuration. + Because we would like to keep zlib as a very small and simple package. + zlib is rather portable and doesn't need much configuration. 8. I found a bug in zlib. - Most of the time, such problems are due to an incorrect usage of - zlib. Please try to reproduce the problem with a small program and send - the corresponding source to us at zlib@gzip.org . Do not send - multi-megabyte data files without prior agreement. + Most of the time, such problems are due to an incorrect usage of zlib. + Please try to reproduce the problem with a small program and send the + corresponding source to us at zlib@gzip.org . Do not send multi-megabyte + data files without prior agreement. 9. Why do I get "undefined reference to gzputc"? @@ -82,13 +79,15 @@ The lastest zlib FAQ is at http://www.gzip.org/zlib/zlib_faq.html 12. Can zlib handle .Z files? - No, sorry. You have to spawn an uncompress or gunzip subprocess, or adapt + No, sorry. You have to spawn an uncompress or gunzip subprocess, or adapt the code of uncompress on your own. 13. How can I make a Unix shared library? - make clean - ./configure -s + By default a shared (and a static) library is built for Unix. So: + + make distclean + ./configure make 14. How do I install a shared zlib library on Unix? @@ -99,8 +98,10 @@ The lastest zlib FAQ is at http://www.gzip.org/zlib/zlib_faq.html However, many flavors of Unix come with a shared zlib already installed. Before going to the trouble of compiling a shared version of zlib and - trying to install it, you may want to check if it's already there! If you - can #include , it's there. The -lz option will probably link to it. + trying to install it, you may want to check if it's already there! If you + can #include , it's there. The -lz option will probably link to + it. You can check the version at the top of zlib.h or with the + ZLIB_VERSION symbol defined in zlib.h . 15. I have a question about OttoPDF. @@ -109,8 +110,8 @@ The lastest zlib FAQ is at http://www.gzip.org/zlib/zlib_faq.html 16. Can zlib decode Flate data in an Adobe PDF file? - Yes. See http://www.fastio.com/ (ClibPDF), or http://www.pdflib.com/ . - To modify PDF forms, see http://sourceforge.net/projects/acroformtool/ . + Yes. See http://www.pdflib.com/ . To modify PDF forms, see + http://sourceforge.net/projects/acroformtool/ . 17. Why am I getting this "register_frame_info not found" error on Solaris? @@ -121,67 +122,67 @@ The lastest zlib FAQ is at http://www.gzip.org/zlib/zlib_faq.html symbol __register_frame_info: referenced symbol not found The symbol __register_frame_info is not part of zlib, it is generated by - the C compiler (cc or gcc). You must recompile applications using zlib - which have this problem. This problem is specific to Solaris. See + the C compiler (cc or gcc). You must recompile applications using zlib + which have this problem. This problem is specific to Solaris. See http://www.sunfreeware.com for Solaris versions of zlib and applications using zlib. 18. Why does gzip give an error on a file I make with compress/deflate? The compress and deflate functions produce data in the zlib format, which - is different and incompatible with the gzip format. The gz* functions in - zlib on the other hand use the gzip format. Both the zlib and gzip - formats use the same compressed data format internally, but have different - headers and trailers around the compressed data. + is different and incompatible with the gzip format. The gz* functions in + zlib on the other hand use the gzip format. Both the zlib and gzip formats + use the same compressed data format internally, but have different headers + and trailers around the compressed data. 19. Ok, so why are there two different formats? - The gzip format was designed to retain the directory information about - a single file, such as the name and last modification date. The zlib - format on the other hand was designed for in-memory and communication - channel applications, and has a much more compact header and trailer and - uses a faster integrity check than gzip. + The gzip format was designed to retain the directory information about a + single file, such as the name and last modification date. The zlib format + on the other hand was designed for in-memory and communication channel + applications, and has a much more compact header and trailer and uses a + faster integrity check than gzip. 20. Well that's nice, but how do I make a gzip file in memory? You can request that deflate write the gzip format instead of the zlib - format using deflateInit2(). You can also request that inflate decode - the gzip format using inflateInit2(). Read zlib.h for more details. + format using deflateInit2(). You can also request that inflate decode the + gzip format using inflateInit2(). Read zlib.h for more details. 21. Is zlib thread-safe? - Yes. However any library routines that zlib uses and any application- - provided memory allocation routines must also be thread-safe. zlib's gz* + Yes. However any library routines that zlib uses and any application- + provided memory allocation routines must also be thread-safe. zlib's gz* functions use stdio library routines, and most of zlib's functions use the - library memory allocation routines by default. zlib's Init functions allow - for the application to provide custom memory allocation routines. + library memory allocation routines by default. zlib's *Init* functions + allow for the application to provide custom memory allocation routines. Of course, you should only operate on any given zlib or gzip stream from a single thread at a time. 22. Can I use zlib in my commercial application? - Yes. Please read the license in zlib.h. + Yes. Please read the license in zlib.h. 23. Is zlib under the GNU license? - No. Please read the license in zlib.h. + No. Please read the license in zlib.h. 24. The license says that altered source versions must be "plainly marked". So what exactly do I need to do to meet that requirement? - You need to change the ZLIB_VERSION and ZLIB_VERNUM #defines in zlib.h. In + You need to change the ZLIB_VERSION and ZLIB_VERNUM #defines in zlib.h. In particular, the final version number needs to be changed to "f", and an - identification string should be appended to ZLIB_VERSION. Version numbers + identification string should be appended to ZLIB_VERSION. Version numbers x.x.x.f are reserved for modifications to zlib by others than the zlib - maintainers. For example, if the version of the base zlib you are altering + maintainers. For example, if the version of the base zlib you are altering is "1.2.3.4", then in zlib.h you should change ZLIB_VERNUM to 0x123f, and - ZLIB_VERSION to something like "1.2.3.f-zachary-mods-v3". You can also + ZLIB_VERSION to something like "1.2.3.f-zachary-mods-v3". You can also update the version strings in deflate.c and inftrees.c. For altered source distributions, you should also note the origin and nature of the changes in zlib.h, as well as in ChangeLog and README, along - with the dates of the alterations. The origin should include at least your + with the dates of the alterations. The origin should include at least your name (or your company's name), and an email address to contact for help or issues with the library. @@ -197,105 +198,112 @@ The lastest zlib FAQ is at http://www.gzip.org/zlib/zlib_faq.html 26. Will zlib work on a 64-bit machine? - It should. It has been tested on 64-bit machines, and has no dependence - on any data types being limited to 32-bits in length. If you have any + Yes. It has been tested on 64-bit machines, and has no dependence on any + data types being limited to 32-bits in length. If you have any difficulties, please provide a complete problem report to zlib@gzip.org 27. Will zlib decompress data from the PKWare Data Compression Library? - No. The PKWare DCL uses a completely different compressed data format - than does PKZIP and zlib. However, you can look in zlib's contrib/blast + No. The PKWare DCL uses a completely different compressed data format than + does PKZIP and zlib. However, you can look in zlib's contrib/blast directory for a possible solution to your problem. 28. Can I access data randomly in a compressed stream? - No, not without some preparation. If when compressing you periodically - use Z_FULL_FLUSH, carefully write all the pending data at those points, - and keep an index of those locations, then you can start decompression - at those points. You have to be careful to not use Z_FULL_FLUSH too - often, since it can significantly degrade compression. + No, not without some preparation. If when compressing you periodically use + Z_FULL_FLUSH, carefully write all the pending data at those points, and + keep an index of those locations, then you can start decompression at those + points. You have to be careful to not use Z_FULL_FLUSH too often, since it + can significantly degrade compression. Alternatively, you can scan a + deflate stream once to generate an index, and then use that index for + random access. See examples/zran.c . 29. Does zlib work on MVS, OS/390, CICS, etc.? - We don't know for sure. We have heard occasional reports of success on - these systems. If you do use it on one of these, please provide us with - a report, instructions, and patches that we can reference when we get - these questions. Thanks. + It has in the past, but we have not heard of any recent evidence. There + were working ports of zlib 1.1.4 to MVS, but those links no longer work. + If you know of recent, successful applications of zlib on these operating + systems, please let us know. Thanks. -30. Is there some simpler, easier to read version of inflate I can look at - to understand the deflate format? +30. Is there some simpler, easier to read version of inflate I can look at to + understand the deflate format? - First off, you should read RFC 1951. Second, yes. Look in zlib's + First off, you should read RFC 1951. Second, yes. Look in zlib's contrib/puff directory. 31. Does zlib infringe on any patents? - As far as we know, no. In fact, that was originally the whole point behind - zlib. Look here for some more information: + As far as we know, no. In fact, that was originally the whole point behind + zlib. Look here for some more information: http://www.gzip.org/#faq11 32. Can zlib work with greater than 4 GB of data? - Yes. inflate() and deflate() will process any amount of data correctly. + Yes. inflate() and deflate() will process any amount of data correctly. Each call of inflate() or deflate() is limited to input and output chunks of the maximum value that can be stored in the compiler's "unsigned int" - type, but there is no limit to the number of chunks. Note however that the - strm.total_in and strm_total_out counters may be limited to 4 GB. These + type, but there is no limit to the number of chunks. Note however that the + strm.total_in and strm_total_out counters may be limited to 4 GB. These counters are provided as a convenience and are not used internally by - inflate() or deflate(). The application can easily set up its own counters + inflate() or deflate(). The application can easily set up its own counters updated after each call of inflate() or deflate() to count beyond 4 GB. compress() and uncompress() may be limited to 4 GB, since they operate in a - single call. gzseek() and gztell() may be limited to 4 GB depending on how - zlib is compiled. See the zlibCompileFlags() function in zlib.h. + single call. gzseek() and gztell() may be limited to 4 GB depending on how + zlib is compiled. See the zlibCompileFlags() function in zlib.h. - The word "may" appears several times above since there is a 4 GB limit - only if the compiler's "long" type is 32 bits. If the compiler's "long" - type is 64 bits, then the limit is 16 exabytes. + The word "may" appears several times above since there is a 4 GB limit only + if the compiler's "long" type is 32 bits. If the compiler's "long" type is + 64 bits, then the limit is 16 exabytes. 33. Does zlib have any security vulnerabilities? - The only one that we are aware of is potentially in gzprintf(). If zlib - is compiled to use sprintf() or vsprintf(), then there is no protection - against a buffer overflow of a 4K string space, other than the caller of - gzprintf() assuring that the output will not exceed 4K. On the other - hand, if zlib is compiled to use snprintf() or vsnprintf(), which should - normally be the case, then there is no vulnerability. The ./configure - script will display warnings if an insecure variation of sprintf() will - be used by gzprintf(). Also the zlibCompileFlags() function will return - information on what variant of sprintf() is used by gzprintf(). + The only one that we are aware of is potentially in gzprintf(). If zlib is + compiled to use sprintf() or vsprintf(), then there is no protection + against a buffer overflow of an 8K string space (or other value as set by + gzbuffer()), other than the caller of gzprintf() assuring that the output + will not exceed 8K. On the other hand, if zlib is compiled to use + snprintf() or vsnprintf(), which should normally be the case, then there is + no vulnerability. The ./configure script will display warnings if an + insecure variation of sprintf() will be used by gzprintf(). Also the + zlibCompileFlags() function will return information on what variant of + sprintf() is used by gzprintf(). If you don't have snprintf() or vsnprintf() and would like one, you can find a portable implementation here: http://www.ijs.si/software/snprintf/ - Note that you should be using the most recent version of zlib. Versions - 1.1.3 and before were subject to a double-free vulnerability. + Note that you should be using the most recent version of zlib. Versions + 1.1.3 and before were subject to a double-free vulnerability, and versions + 1.2.1 and 1.2.2 were subject to an access exception when decompressing + invalid compressed data. 34. Is there a Java version of zlib? Probably what you want is to use zlib in Java. zlib is already included as part of the Java SDK in the java.util.zip package. If you really want a version of zlib written in the Java language, look on the zlib home - page for links: http://www.zlib.org/ + page for links: http://zlib.net/ . 35. I get this or that compiler or source-code scanner warning when I crank it up to maximally-pedantic. Can't you guys write proper code? Many years ago, we gave up attempting to avoid warnings on every compiler - in the universe. It just got to be a waste of time, and some compilers - were downright silly. So now, we simply make sure that the code always - works. + in the universe. It just got to be a waste of time, and some compilers + were downright silly as well as contradicted each other. So now, we simply + make sure that the code always works. 36. Valgrind (or some similar memory access checker) says that deflate is performing a conditional jump that depends on an uninitialized value. Isn't that a bug? - No. That is intentional for performance reasons, and the output of - deflate is not affected. This only started showing up recently since - zlib 1.2.x uses malloc() by default for allocations, whereas earlier - versions used calloc(), which zeros out the allocated memory. + No. That is intentional for performance reasons, and the output of deflate + is not affected. This only started showing up recently since zlib 1.2.x + uses malloc() by default for allocations, whereas earlier versions used + calloc(), which zeros out the allocated memory. Even though the code was + correct, versions 1.2.4 and later was changed to not stimulate these + checkers. 37. Will zlib read the (insert any ancient or arcane format here) compressed data format? @@ -305,20 +313,21 @@ The lastest zlib FAQ is at http://www.gzip.org/zlib/zlib_faq.html 38. How can I encrypt/decrypt zip files with zlib? - zlib doesn't support encryption. The original PKZIP encryption is very weak - and can be broken with freely available programs. To get strong encryption, - use GnuPG, http://www.gnupg.org/ , which already includes zlib compression. - For PKZIP compatible "encryption", look at http://www.info-zip.org/ + zlib doesn't support encryption. The original PKZIP encryption is very + weak and can be broken with freely available programs. To get strong + encryption, use GnuPG, http://www.gnupg.org/ , which already includes zlib + compression. For PKZIP compatible "encryption", look at + http://www.info-zip.org/ 39. What's the difference between the "gzip" and "deflate" HTTP 1.1 encodings? - "gzip" is the gzip format, and "deflate" is the zlib format. They should - probably have called the second one "zlib" instead to avoid confusion - with the raw deflate compressed data format. While the HTTP 1.1 RFC 2616 + "gzip" is the gzip format, and "deflate" is the zlib format. They should + probably have called the second one "zlib" instead to avoid confusion with + the raw deflate compressed data format. While the HTTP 1.1 RFC 2616 correctly points to the zlib specification in RFC 1950 for the "deflate" transfer encoding, there have been reports of servers and browsers that incorrectly produce or expect raw deflate data per the deflate - specficiation in RFC 1951, most notably Microsoft. So even though the + specification in RFC 1951, most notably Microsoft. So even though the "deflate" transfer encoding using the zlib format would be the more efficient approach (and in fact exactly what the zlib format was designed for), using the "gzip" transfer encoding is probably more reliable due to @@ -328,12 +337,32 @@ The lastest zlib FAQ is at http://www.gzip.org/zlib/zlib_faq.html 40. Does zlib support the new "Deflate64" format introduced by PKWare? - No. PKWare has apparently decided to keep that format proprietary, since - they have not documented it as they have previous compression formats. - In any case, the compression improvements are so modest compared to other - more modern approaches, that it's not worth the effort to implement. + No. PKWare has apparently decided to keep that format proprietary, since + they have not documented it as they have previous compression formats. In + any case, the compression improvements are so modest compared to other more + modern approaches, that it's not worth the effort to implement. + +41. I'm having a problem with the zip functions in zlib, can you help? + + There are no zip functions in zlib. You are probably using minizip by + Giles Vollant, which is found in the contrib directory of zlib. It is not + part of zlib. In fact none of the stuff in contrib is part of zlib. The + files in there are not supported by the zlib authors. You need to contact + the authors of the respective contribution for help. + +42. The match.asm code in contrib is under the GNU General Public License. + Since it's part of zlib, doesn't that mean that all of zlib falls under the + GNU GPL? + + No. The files in contrib are not part of zlib. They were contributed by + other authors and are provided as a convenience to the user within the zlib + distribution. Each item in contrib has its own license. + +43. Is zlib subject to export controls? What is its ECCN? + + zlib is not subject to export controls, and so is classified as EAR99. -41. Can you please sign these lengthy legal documents and fax them back to us +44. Can you please sign these lengthy legal documents and fax them back to us so that we can use your software in our product? No. Go away. Shoo. diff --git a/zlib/INDEX b/zlib/INDEX index 0587e5902bd1..2ba064120486 100644 --- a/zlib/INDEX +++ b/zlib/INDEX @@ -1,23 +1,37 @@ +CMakeLists.txt cmake build file ChangeLog history of changes FAQ Frequently Asked Questions about zlib INDEX this file -Makefile makefile for Unix (generated by configure) -Makefile.in makefile for Unix (template for configure) +Makefile dummy Makefile that tells you to ./configure +Makefile.in template for Unix Makefile README guess what -algorithm.txt description of the (de)compression algorithm configure configure script for Unix -zconf.in.h template for zconf.h (used by configure) +make_vms.com makefile for VMS +test/example.c zlib usages examples for build testing +test/minigzip.c minimal gzip-like functionality for build testing +test/infcover.c inf*.c code coverage for build coverage testing +treebuild.xml XML description of source file dependencies +zconf.h.cmakein zconf.h template for cmake +zconf.h.in zconf.h template for configure +zlib.3 Man page for zlib +zlib.3.pdf Man page in PDF format +zlib.map Linux symbol information +zlib.pc.in Template for pkg-config descriptor +zlib.pc.cmakein zlib.pc template for cmake +zlib2ansi perl script to convert source files for C++ compilation amiga/ makefiles for Amiga SAS C -as400/ makefiles for IBM AS/400 +as400/ makefiles for AS/400 +doc/ documentation for formats and algorithms msdos/ makefiles for MSDOS +nintendods/ makefile for Nintendo DS old/ makefiles for various architectures and zlib documentation files that have not yet been updated for zlib 1.2.x -projects/ projects for various Integrated Development Environments qnx/ makefiles for QNX +watcom/ makefiles for OpenWatcom win32/ makefiles for Windows - zlib public header files (must be kept): + zlib public header files (required for library use): zconf.h zlib.h @@ -28,7 +42,11 @@ crc32.c crc32.h deflate.c deflate.h -gzio.c +gzclose.c +gzguts.h +gzlib.c +gzread.c +gzwrite.c infback.c inffast.c inffast.h @@ -43,9 +61,8 @@ uncompr.c zutil.c zutil.h - source files for sample programs: -example.c -minigzip.c + source files for sample programs +See examples/README.examples - unsupported contribution by third parties + unsupported contributions by third parties See contrib/README.contrib diff --git a/zlib/README b/zlib/README index 758cc50020df..51106de47532 100644 --- a/zlib/README +++ b/zlib/README @@ -1,56 +1,52 @@ ZLIB DATA COMPRESSION LIBRARY -zlib 1.2.3 is a general purpose data compression library. All the code is +zlib 1.2.11 is a general purpose data compression library. All the code is thread safe. The data format used by the zlib library is described by RFCs (Request for Comments) 1950 to 1952 in the files -http://www.ietf.org/rfc/rfc1950.txt (zlib format), rfc1951.txt (deflate format) -and rfc1952.txt (gzip format). These documents are also available in other -formats from ftp://ftp.uu.net/graphics/png/documents/zlib/zdoc-index.html +http://tools.ietf.org/html/rfc1950 (zlib format), rfc1951 (deflate format) and +rfc1952 (gzip format). All functions of the compression library are documented in the file zlib.h -(volunteer to write man pages welcome, contact zlib@gzip.org). A usage example -of the library is given in the file example.c which also tests that the library -is working correctly. Another example is given in the file minigzip.c. The -compression library itself is composed of all source files except example.c and -minigzip.c. +(volunteer to write man pages welcome, contact zlib@gzip.org). A usage example +of the library is given in the file test/example.c which also tests that +the library is working correctly. Another example is given in the file +test/minigzip.c. The compression library itself is composed of all source +files in the root directory. To compile all files and run the test program, follow the instructions given at -the top of Makefile. In short "make test; make install" should work for most -machines. For Unix: "./configure; make test; make install". For MSDOS, use one -of the special makefiles such as Makefile.msc. For VMS, use make_vms.com. +the top of Makefile.in. In short "./configure; make test", and if that goes +well, "make install" should work for most flavors of Unix. For Windows, use +one of the special makefiles in win32/ or contrib/vstudio/ . For VMS, use +make_vms.com. Questions about zlib should be sent to , or to Gilles Vollant - for the Windows DLL version. The zlib home page is -http://www.zlib.org or http://www.gzip.org/zlib/ Before reporting a problem, -please check this site to verify that you have the latest version of zlib; -otherwise get the latest version and check whether the problem still exists or -not. + for the Windows DLL version. The zlib home page is +http://zlib.net/ . Before reporting a problem, please check this site to +verify that you have the latest version of zlib; otherwise get the latest +version and check whether the problem still exists or not. -PLEASE read the zlib FAQ http://www.gzip.org/zlib/zlib_faq.html before asking -for help. +PLEASE read the zlib FAQ http://zlib.net/zlib_faq.html before asking for help. -Mark Nelson wrote an article about zlib for the Jan. 1997 -issue of Dr. Dobb's Journal; a copy of the article is available in -http://dogma.net/markn/articles/zlibtool/zlibtool.htm +Mark Nelson wrote an article about zlib for the Jan. 1997 +issue of Dr. Dobb's Journal; a copy of the article is available at +http://marknelson.us/1997/01/01/zlib-engine/ . -The changes made in version 1.2.3 are documented in the file ChangeLog. +The changes made in version 1.2.11 are documented in the file ChangeLog. -Unsupported third party contributions are provided in directory "contrib". +Unsupported third party contributions are provided in directory contrib/ . -A Java implementation of zlib is available in the Java Development Kit -http://java.sun.com/j2se/1.4.2/docs/api/java/util/zip/package-summary.html -See the zlib home page http://www.zlib.org for details. +zlib is available in Java using the java.util.zip package, documented at +http://java.sun.com/developer/technicalArticles/Programming/compression/ . -A Perl interface to zlib written by Paul Marquess is in the -CPAN (Comprehensive Perl Archive Network) sites -http://www.cpan.org/modules/by-module/Compress/ +A Perl interface to zlib written by Paul Marquess is available +at CPAN (Comprehensive Perl Archive Network) sites, including +http://search.cpan.org/~pmqs/IO-Compress-Zlib/ . A Python interface to zlib written by A.M. Kuchling is available in Python 1.5 and later versions, see -http://www.python.org/doc/lib/module-zlib.html +http://docs.python.org/library/zlib.html . -A zlib binding for TCL written by Andreas Kupries is -availlable at http://www.oche.de/~akupries/soft/trf/trf_zip.html +zlib is built into tcl: http://wiki.tcl.tk/4610 . An experimental package to read and write files in .zip format, written on top of zlib by Gilles Vollant , is available in the @@ -74,25 +70,21 @@ Notes for some targets: - zlib doesn't work on HP-UX 9.05 with some versions of /bin/cc. It works with other compilers. Use "make test" to check your compiler. -- gzdopen is not supported on RISCOS, BEOS and by some Mac compilers. +- gzdopen is not supported on RISCOS or BEOS. - For PalmOs, see http://palmzlib.sourceforge.net/ -- When building a shared, i.e. dynamic library on Mac OS X, the library must be - installed before testing (do "make install" before "make test"), since the - library location is specified in the library. - Acknowledgments: - The deflate format used by zlib was defined by Phil Katz. The deflate - and zlib specifications were written by L. Peter Deutsch. Thanks to all the - people who reported problems and suggested various improvements in zlib; - they are too numerous to cite here. + The deflate format used by zlib was defined by Phil Katz. The deflate and + zlib specifications were written by L. Peter Deutsch. Thanks to all the + people who reported problems and suggested various improvements in zlib; they + are too numerous to cite here. Copyright notice: - (C) 1995-2004 Jean-loup Gailly and Mark Adler + (C) 1995-2017 Jean-loup Gailly and Mark Adler This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -113,13 +105,11 @@ Copyright notice: Jean-loup Gailly Mark Adler jloup@gzip.org madler@alumni.caltech.edu -If you use the zlib library in a product, we would appreciate *not* -receiving lengthy legal documents to sign. The sources are provided -for free but without warranty of any kind. The library has been -entirely written by Jean-loup Gailly and Mark Adler; it does not -include third-party code. +If you use the zlib library in a product, we would appreciate *not* receiving +lengthy legal documents to sign. The sources are provided for free but without +warranty of any kind. The library has been entirely written by Jean-loup +Gailly and Mark Adler; it does not include third-party code. -If you redistribute modified sources, we would appreciate that you include -in the file ChangeLog history information documenting your changes. Please -read the FAQ for more information on the distribution of modified source -versions. +If you redistribute modified sources, we would appreciate that you include in +the file ChangeLog history information documenting your changes. Please read +the FAQ for more information on the distribution of modified source versions. diff --git a/zlib/README.MySQL b/zlib/README.MySQL deleted file mode 100644 index c17d3eeb6f99..000000000000 --- a/zlib/README.MySQL +++ /dev/null @@ -1,16 +0,0 @@ -This an incomplete version of the zlib library -- it excludes some of the -platform-specific project files, contributed code, and examples from the -original zlib distribution. You can find the original distribution at - - http://www.gzip.org/zlib/ - or - http://www.zlib.net/ - -Revision history: - -20.01.2006. The following files were changed as part of #15787 fix: - makefile.am - gzio.c - zconf.h - README.mysql - diff --git a/zlib/adler32.c b/zlib/adler32.c index 007ba26277c8..e82e8eedd132 100644 --- a/zlib/adler32.c +++ b/zlib/adler32.c @@ -1,14 +1,15 @@ /* adler32.c -- compute the Adler-32 checksum of a data stream - * Copyright (C) 1995-2004 Mark Adler + * Copyright (C) 1995-2011, 2017 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ /* @(#) $Id$ */ -#define ZLIB_INTERNAL -#include "zlib.h" +#include "zutil.h" -#define BASE 65521UL /* largest prime smaller than 65536 */ +local uLong adler32_combine_ OF((uLong adler1, uLong adler2, z_off64_t len2)); + +#define BASE 65521U /* largest prime smaller than 65536 */ #define NMAX 5552 /* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */ @@ -18,46 +19,51 @@ #define DO8(buf,i) DO4(buf,i); DO4(buf,i+4); #define DO16(buf) DO8(buf,0); DO8(buf,8); -/* use NO_DIVIDE if your processor does not do division in hardware */ +/* use NO_DIVIDE if your processor does not do division in hardware -- + try it both ways to see which is faster */ #ifdef NO_DIVIDE -# define MOD(a) \ +/* note that this assumes BASE is 65521, where 65536 % 65521 == 15 + (thank you to John Reiser for pointing this out) */ +# define CHOP(a) \ + do { \ + unsigned long tmp = a >> 16; \ + a &= 0xffffUL; \ + a += (tmp << 4) - tmp; \ + } while (0) +# define MOD28(a) \ do { \ - if (a >= (BASE << 16)) a -= (BASE << 16); \ - if (a >= (BASE << 15)) a -= (BASE << 15); \ - if (a >= (BASE << 14)) a -= (BASE << 14); \ - if (a >= (BASE << 13)) a -= (BASE << 13); \ - if (a >= (BASE << 12)) a -= (BASE << 12); \ - if (a >= (BASE << 11)) a -= (BASE << 11); \ - if (a >= (BASE << 10)) a -= (BASE << 10); \ - if (a >= (BASE << 9)) a -= (BASE << 9); \ - if (a >= (BASE << 8)) a -= (BASE << 8); \ - if (a >= (BASE << 7)) a -= (BASE << 7); \ - if (a >= (BASE << 6)) a -= (BASE << 6); \ - if (a >= (BASE << 5)) a -= (BASE << 5); \ - if (a >= (BASE << 4)) a -= (BASE << 4); \ - if (a >= (BASE << 3)) a -= (BASE << 3); \ - if (a >= (BASE << 2)) a -= (BASE << 2); \ - if (a >= (BASE << 1)) a -= (BASE << 1); \ + CHOP(a); \ if (a >= BASE) a -= BASE; \ } while (0) -# define MOD4(a) \ +# define MOD(a) \ do { \ - if (a >= (BASE << 4)) a -= (BASE << 4); \ - if (a >= (BASE << 3)) a -= (BASE << 3); \ - if (a >= (BASE << 2)) a -= (BASE << 2); \ - if (a >= (BASE << 1)) a -= (BASE << 1); \ + CHOP(a); \ + MOD28(a); \ + } while (0) +# define MOD63(a) \ + do { /* this assumes a is not negative */ \ + z_off64_t tmp = a >> 32; \ + a &= 0xffffffffL; \ + a += (tmp << 8) - (tmp << 5) + tmp; \ + tmp = a >> 16; \ + a &= 0xffffL; \ + a += (tmp << 4) - tmp; \ + tmp = a >> 16; \ + a &= 0xffffL; \ + a += (tmp << 4) - tmp; \ if (a >= BASE) a -= BASE; \ } while (0) #else # define MOD(a) a %= BASE -# define MOD4(a) a %= BASE +# define MOD28(a) a %= BASE +# define MOD63(a) a %= BASE #endif /* ========================================================================= */ -uLong ZEXPORT adler32(adler, buf, len) +uLong ZEXPORT adler32_z(adler, buf, len) uLong adler; const Bytef *buf; - uInt len; + z_size_t len; { unsigned long sum2; unsigned n; @@ -89,7 +95,7 @@ uLong ZEXPORT adler32(adler, buf, len) } if (adler >= BASE) adler -= BASE; - MOD4(sum2); /* only added so many BASE's */ + MOD28(sum2); /* only added so many BASE's */ return adler | (sum2 << 16); } @@ -125,25 +131,56 @@ uLong ZEXPORT adler32(adler, buf, len) } /* ========================================================================= */ -uLong ZEXPORT adler32_combine(adler1, adler2, len2) +uLong ZEXPORT adler32(adler, buf, len) + uLong adler; + const Bytef *buf; + uInt len; +{ + return adler32_z(adler, buf, len); +} + +/* ========================================================================= */ +local uLong adler32_combine_(adler1, adler2, len2) uLong adler1; uLong adler2; - z_off_t len2; + z_off64_t len2; { unsigned long sum1; unsigned long sum2; unsigned rem; + /* for negative len, return invalid adler32 as a clue for debugging */ + if (len2 < 0) + return 0xffffffffUL; + /* the derivation of this formula is left as an exercise for the reader */ - rem = (unsigned)(len2 % BASE); + MOD63(len2); /* assumes len2 >= 0 */ + rem = (unsigned)len2; sum1 = adler1 & 0xffff; sum2 = rem * sum1; MOD(sum2); sum1 += (adler2 & 0xffff) + BASE - 1; sum2 += ((adler1 >> 16) & 0xffff) + ((adler2 >> 16) & 0xffff) + BASE - rem; - if (sum1 > BASE) sum1 -= BASE; - if (sum1 > BASE) sum1 -= BASE; - if (sum2 > (BASE << 1)) sum2 -= (BASE << 1); - if (sum2 > BASE) sum2 -= BASE; + if (sum1 >= BASE) sum1 -= BASE; + if (sum1 >= BASE) sum1 -= BASE; + if (sum2 >= ((unsigned long)BASE << 1)) sum2 -= ((unsigned long)BASE << 1); + if (sum2 >= BASE) sum2 -= BASE; return sum1 | (sum2 << 16); } + +/* ========================================================================= */ +uLong ZEXPORT adler32_combine(adler1, adler2, len2) + uLong adler1; + uLong adler2; + z_off_t len2; +{ + return adler32_combine_(adler1, adler2, len2); +} + +uLong ZEXPORT adler32_combine64(adler1, adler2, len2) + uLong adler1; + uLong adler2; + z_off64_t len2; +{ + return adler32_combine_(adler1, adler2, len2); +} diff --git a/zlib/algorithm.txt b/zlib/algorithm.txt deleted file mode 100644 index b022dde312a1..000000000000 --- a/zlib/algorithm.txt +++ /dev/null @@ -1,209 +0,0 @@ -1. Compression algorithm (deflate) - -The deflation algorithm used by gzip (also zip and zlib) is a variation of -LZ77 (Lempel-Ziv 1977, see reference below). It finds duplicated strings in -the input data. The second occurrence of a string is replaced by a -pointer to the previous string, in the form of a pair (distance, -length). Distances are limited to 32K bytes, and lengths are limited -to 258 bytes. When a string does not occur anywhere in the previous -32K bytes, it is emitted as a sequence of literal bytes. (In this -description, `string' must be taken as an arbitrary sequence of bytes, -and is not restricted to printable characters.) - -Literals or match lengths are compressed with one Huffman tree, and -match distances are compressed with another tree. The trees are stored -in a compact form at the start of each block. The blocks can have any -size (except that the compressed data for one block must fit in -available memory). A block is terminated when deflate() determines that -it would be useful to start another block with fresh trees. (This is -somewhat similar to the behavior of LZW-based _compress_.) - -Duplicated strings are found using a hash table. All input strings of -length 3 are inserted in the hash table. A hash index is computed for -the next 3 bytes. If the hash chain for this index is not empty, all -strings in the chain are compared with the current input string, and -the longest match is selected. - -The hash chains are searched starting with the most recent strings, to -favor small distances and thus take advantage of the Huffman encoding. -The hash chains are singly linked. There are no deletions from the -hash chains, the algorithm simply discards matches that are too old. - -To avoid a worst-case situation, very long hash chains are arbitrarily -truncated at a certain length, determined by a runtime option (level -parameter of deflateInit). So deflate() does not always find the longest -possible match but generally finds a match which is long enough. - -deflate() also defers the selection of matches with a lazy evaluation -mechanism. After a match of length N has been found, deflate() searches for -a longer match at the next input byte. If a longer match is found, the -previous match is truncated to a length of one (thus producing a single -literal byte) and the process of lazy evaluation begins again. Otherwise, -the original match is kept, and the next match search is attempted only N -steps later. - -The lazy match evaluation is also subject to a runtime parameter. If -the current match is long enough, deflate() reduces the search for a longer -match, thus speeding up the whole process. If compression ratio is more -important than speed, deflate() attempts a complete second search even if -the first match is already long enough. - -The lazy match evaluation is not performed for the fastest compression -modes (level parameter 1 to 3). For these fast modes, new strings -are inserted in the hash table only when no match was found, or -when the match is not too long. This degrades the compression ratio -but saves time since there are both fewer insertions and fewer searches. - - -2. Decompression algorithm (inflate) - -2.1 Introduction - -The key question is how to represent a Huffman code (or any prefix code) so -that you can decode fast. The most important characteristic is that shorter -codes are much more common than longer codes, so pay attention to decoding the -short codes fast, and let the long codes take longer to decode. - -inflate() sets up a first level table that covers some number of bits of -input less than the length of longest code. It gets that many bits from the -stream, and looks it up in the table. The table will tell if the next -code is that many bits or less and how many, and if it is, it will tell -the value, else it will point to the next level table for which inflate() -grabs more bits and tries to decode a longer code. - -How many bits to make the first lookup is a tradeoff between the time it -takes to decode and the time it takes to build the table. If building the -table took no time (and if you had infinite memory), then there would only -be a first level table to cover all the way to the longest code. However, -building the table ends up taking a lot longer for more bits since short -codes are replicated many times in such a table. What inflate() does is -simply to make the number of bits in the first table a variable, and then -to set that variable for the maximum speed. - -For inflate, which has 286 possible codes for the literal/length tree, the size -of the first table is nine bits. Also the distance trees have 30 possible -values, and the size of the first table is six bits. Note that for each of -those cases, the table ended up one bit longer than the ``average'' code -length, i.e. the code length of an approximately flat code which would be a -little more than eight bits for 286 symbols and a little less than five bits -for 30 symbols. - - -2.2 More details on the inflate table lookup - -Ok, you want to know what this cleverly obfuscated inflate tree actually -looks like. You are correct that it's not a Huffman tree. It is simply a -lookup table for the first, let's say, nine bits of a Huffman symbol. The -symbol could be as short as one bit or as long as 15 bits. If a particular -symbol is shorter than nine bits, then that symbol's translation is duplicated -in all those entries that start with that symbol's bits. For example, if the -symbol is four bits, then it's duplicated 32 times in a nine-bit table. If a -symbol is nine bits long, it appears in the table once. - -If the symbol is longer than nine bits, then that entry in the table points -to another similar table for the remaining bits. Again, there are duplicated -entries as needed. The idea is that most of the time the symbol will be short -and there will only be one table look up. (That's whole idea behind data -compression in the first place.) For the less frequent long symbols, there -will be two lookups. If you had a compression method with really long -symbols, you could have as many levels of lookups as is efficient. For -inflate, two is enough. - -So a table entry either points to another table (in which case nine bits in -the above example are gobbled), or it contains the translation for the symbol -and the number of bits to gobble. Then you start again with the next -ungobbled bit. - -You may wonder: why not just have one lookup table for how ever many bits the -longest symbol is? The reason is that if you do that, you end up spending -more time filling in duplicate symbol entries than you do actually decoding. -At least for deflate's output that generates new trees every several 10's of -kbytes. You can imagine that filling in a 2^15 entry table for a 15-bit code -would take too long if you're only decoding several thousand symbols. At the -other extreme, you could make a new table for every bit in the code. In fact, -that's essentially a Huffman tree. But then you spend two much time -traversing the tree while decoding, even for short symbols. - -So the number of bits for the first lookup table is a trade of the time to -fill out the table vs. the time spent looking at the second level and above of -the table. - -Here is an example, scaled down: - -The code being decoded, with 10 symbols, from 1 to 6 bits long: - -A: 0 -B: 10 -C: 1100 -D: 11010 -E: 11011 -F: 11100 -G: 11101 -H: 11110 -I: 111110 -J: 111111 - -Let's make the first table three bits long (eight entries): - -000: A,1 -001: A,1 -010: A,1 -011: A,1 -100: B,2 -101: B,2 -110: -> table X (gobble 3 bits) -111: -> table Y (gobble 3 bits) - -Each entry is what the bits decode as and how many bits that is, i.e. how -many bits to gobble. Or the entry points to another table, with the number of -bits to gobble implicit in the size of the table. - -Table X is two bits long since the longest code starting with 110 is five bits -long: - -00: C,1 -01: C,1 -10: D,2 -11: E,2 - -Table Y is three bits long since the longest code starting with 111 is six -bits long: - -000: F,2 -001: F,2 -010: G,2 -011: G,2 -100: H,2 -101: H,2 -110: I,3 -111: J,3 - -So what we have here are three tables with a total of 20 entries that had to -be constructed. That's compared to 64 entries for a single table. Or -compared to 16 entries for a Huffman tree (six two entry tables and one four -entry table). Assuming that the code ideally represents the probability of -the symbols, it takes on the average 1.25 lookups per symbol. That's compared -to one lookup for the single table, or 1.66 lookups per symbol for the -Huffman tree. - -There, I think that gives you a picture of what's going on. For inflate, the -meaning of a particular symbol is often more than just a letter. It can be a -byte (a "literal"), or it can be either a length or a distance which -indicates a base value and a number of bits to fetch after the code that is -added to the base value. Or it might be the special end-of-block code. The -data structures created in inftrees.c try to encode all that information -compactly in the tables. - - -Jean-loup Gailly Mark Adler -jloup@gzip.org madler@alumni.caltech.edu - - -References: - -[LZ77] Ziv J., Lempel A., ``A Universal Algorithm for Sequential Data -Compression,'' IEEE Transactions on Information Theory, Vol. 23, No. 3, -pp. 337-343. - -``DEFLATE Compressed Data Format Specification'' available in -http://www.ietf.org/rfc/rfc1951.txt diff --git a/zlib/amiga/Makefile.pup b/zlib/amiga/Makefile.pup new file mode 100644 index 000000000000..8940c120fbb9 --- /dev/null +++ b/zlib/amiga/Makefile.pup @@ -0,0 +1,69 @@ +# Amiga powerUP (TM) Makefile +# makefile for libpng and SAS C V6.58/7.00 PPC compiler +# Copyright (C) 1998 by Andreas R. Kleinert + +LIBNAME = libzip.a + +CC = scppc +CFLAGS = NOSTKCHK NOSINT OPTIMIZE OPTGO OPTPEEP OPTINLOCAL OPTINL \ + OPTLOOP OPTRDEP=8 OPTDEP=8 OPTCOMP=8 NOVER +AR = ppc-amigaos-ar cr +RANLIB = ppc-amigaos-ranlib +LD = ppc-amigaos-ld -r +LDFLAGS = -o +LDLIBS = LIB:scppc.a LIB:end.o +RM = delete quiet + +OBJS = adler32.o compress.o crc32.o gzclose.o gzlib.o gzread.o gzwrite.o \ + uncompr.o deflate.o trees.o zutil.o inflate.o infback.o inftrees.o inffast.o + +TEST_OBJS = example.o minigzip.o + +all: example minigzip + +check: test +test: all + example + echo hello world | minigzip | minigzip -d + +$(LIBNAME): $(OBJS) + $(AR) $@ $(OBJS) + -$(RANLIB) $@ + +example: example.o $(LIBNAME) + $(LD) $(LDFLAGS) $@ LIB:c_ppc.o $@.o $(LIBNAME) $(LDLIBS) + +minigzip: minigzip.o $(LIBNAME) + $(LD) $(LDFLAGS) $@ LIB:c_ppc.o $@.o $(LIBNAME) $(LDLIBS) + +mostlyclean: clean +clean: + $(RM) *.o example minigzip $(LIBNAME) foo.gz + +zip: + zip -ul9 zlib README ChangeLog Makefile Make????.??? Makefile.?? \ + descrip.mms *.[ch] + +tgz: + cd ..; tar cfz zlib/zlib.tgz zlib/README zlib/ChangeLog zlib/Makefile \ + zlib/Make????.??? zlib/Makefile.?? zlib/descrip.mms zlib/*.[ch] + +# DO NOT DELETE THIS LINE -- make depend depends on it. + +adler32.o: zlib.h zconf.h +compress.o: zlib.h zconf.h +crc32.o: crc32.h zlib.h zconf.h +deflate.o: deflate.h zutil.h zlib.h zconf.h +example.o: zlib.h zconf.h +gzclose.o: zlib.h zconf.h gzguts.h +gzlib.o: zlib.h zconf.h gzguts.h +gzread.o: zlib.h zconf.h gzguts.h +gzwrite.o: zlib.h zconf.h gzguts.h +inffast.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h +inflate.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h +infback.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h +inftrees.o: zutil.h zlib.h zconf.h inftrees.h +minigzip.o: zlib.h zconf.h +trees.o: deflate.h zutil.h zlib.h zconf.h trees.h +uncompr.o: zlib.h zconf.h +zutil.o: zutil.h zlib.h zconf.h diff --git a/zlib/amiga/Makefile.sas b/zlib/amiga/Makefile.sas new file mode 100644 index 000000000000..749e2915271d --- /dev/null +++ b/zlib/amiga/Makefile.sas @@ -0,0 +1,68 @@ +# SMakefile for zlib +# Modified from the standard UNIX Makefile Copyright Jean-loup Gailly +# Osma Ahvenlampi +# Amiga, SAS/C 6.56 & Smake + +CC=sc +CFLAGS=OPT +#CFLAGS=OPT CPU=68030 +#CFLAGS=DEBUG=LINE +LDFLAGS=LIB z.lib + +SCOPTIONS=OPTSCHED OPTINLINE OPTALIAS OPTTIME OPTINLOCAL STRMERGE \ + NOICONS PARMS=BOTH NOSTACKCHECK UTILLIB NOVERSION ERRORREXX \ + DEF=POSTINC + +OBJS = adler32.o compress.o crc32.o gzclose.o gzlib.o gzread.o gzwrite.o \ + uncompr.o deflate.o trees.o zutil.o inflate.o infback.o inftrees.o inffast.o + +TEST_OBJS = example.o minigzip.o + +all: SCOPTIONS example minigzip + +check: test +test: all + example + echo hello world | minigzip | minigzip -d + +install: z.lib + copy clone zlib.h zconf.h INCLUDE: + copy clone z.lib LIB: + +z.lib: $(OBJS) + oml z.lib r $(OBJS) + +example: example.o z.lib + $(CC) $(CFLAGS) LINK TO $@ example.o $(LDFLAGS) + +minigzip: minigzip.o z.lib + $(CC) $(CFLAGS) LINK TO $@ minigzip.o $(LDFLAGS) + +mostlyclean: clean +clean: + -delete force quiet example minigzip *.o z.lib foo.gz *.lnk SCOPTIONS + +SCOPTIONS: Makefile.sas + copy to $@ 64K on 16-bit machine: */ - if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR; -#endif - stream.next_out = dest; - stream.avail_out = (uInt)*destLen; - if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR; + left = *destLen; + *destLen = 0; stream.zalloc = (alloc_func)0; stream.zfree = (free_func)0; @@ -46,15 +41,26 @@ int ZEXPORT compress2 (dest, destLen, source, sourceLen, level) err = deflateInit(&stream, level); if (err != Z_OK) return err; - err = deflate(&stream, Z_FINISH); - if (err != Z_STREAM_END) { - deflateEnd(&stream); - return err == Z_OK ? Z_BUF_ERROR : err; - } - *destLen = stream.total_out; + stream.next_out = dest; + stream.avail_out = 0; + stream.next_in = (z_const Bytef *)source; + stream.avail_in = 0; - err = deflateEnd(&stream); - return err; + do { + if (stream.avail_out == 0) { + stream.avail_out = left > (uLong)max ? max : (uInt)left; + left -= stream.avail_out; + } + if (stream.avail_in == 0) { + stream.avail_in = sourceLen > (uLong)max ? max : (uInt)sourceLen; + sourceLen -= stream.avail_in; + } + err = deflate(&stream, sourceLen ? Z_NO_FLUSH : Z_FINISH); + } while (err == Z_OK); + + *destLen = stream.total_out; + deflateEnd(&stream); + return err == Z_STREAM_END ? Z_OK : err; } /* =========================================================================== @@ -75,5 +81,6 @@ int ZEXPORT compress (dest, destLen, source, sourceLen) uLong ZEXPORT compressBound (sourceLen) uLong sourceLen; { - return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) + 11; + return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) + + (sourceLen >> 25) + 13; } diff --git a/zlib/crc32.c b/zlib/crc32.c index f658a9ef55ee..9580440c0e6b 100644 --- a/zlib/crc32.c +++ b/zlib/crc32.c @@ -1,5 +1,5 @@ /* crc32.c -- compute the CRC-32 of a data stream - * Copyright (C) 1995-2005 Mark Adler + * Copyright (C) 1995-2006, 2010, 2011, 2012, 2016 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h * * Thanks to Rodney Brown for his contribution of faster @@ -17,6 +17,8 @@ of the crc tables. Therefore, if you #define DYNAMIC_CRC_TABLE, you should first call get_crc_table() to initialize the tables before allowing more than one thread to use crc32(). + + DYNAMIC_CRC_TABLE and MAKECRCH can be #defined to write out crc32.h. */ #ifdef MAKECRCH @@ -28,37 +30,15 @@ #include "zutil.h" /* for STDC and FAR definitions */ -#define local static - -/* Find a four-byte integer type for crc32_little() and crc32_big(). */ -#ifndef NOBYFOUR -# ifdef STDC /* need ANSI C limits.h to determine sizes */ -# include -# define BYFOUR -# if (UINT_MAX == 0xffffffffUL) - typedef unsigned int u4; -# else -# if (ULONG_MAX == 0xffffffffUL) - typedef unsigned long u4; -# else -# if (USHRT_MAX == 0xffffffffUL) - typedef unsigned short u4; -# else -# undef BYFOUR /* can't find a four-byte integer type! */ -# endif -# endif -# endif -# endif /* STDC */ -#endif /* !NOBYFOUR */ - /* Definitions for doing the crc four data bytes at a time. */ +#if !defined(NOBYFOUR) && defined(Z_U4) +# define BYFOUR +#endif #ifdef BYFOUR -# define REV(w) (((w)>>24)+(((w)>>8)&0xff00)+ \ - (((w)&0xff00)<<8)+(((w)&0xff)<<24)) local unsigned long crc32_little OF((unsigned long, - const unsigned char FAR *, unsigned)); + const unsigned char FAR *, z_size_t)); local unsigned long crc32_big OF((unsigned long, - const unsigned char FAR *, unsigned)); + const unsigned char FAR *, z_size_t)); # define TBLS 8 #else # define TBLS 1 @@ -68,14 +48,16 @@ local unsigned long gf2_matrix_times OF((unsigned long *mat, unsigned long vec)); local void gf2_matrix_square OF((unsigned long *square, unsigned long *mat)); +local uLong crc32_combine_ OF((uLong crc1, uLong crc2, z_off64_t len2)); + #ifdef DYNAMIC_CRC_TABLE local volatile int crc_table_empty = 1; -local unsigned long FAR crc_table[TBLS][256]; +local z_crc_t FAR crc_table[TBLS][256]; local void make_crc_table OF((void)); #ifdef MAKECRCH - local void write_table OF((FILE *, const unsigned long FAR *)); + local void write_table OF((FILE *, const z_crc_t FAR *)); #endif /* MAKECRCH */ /* Generate tables for a byte-wise 32-bit CRC calculation on the polynomial: @@ -105,9 +87,9 @@ local void make_crc_table OF((void)); */ local void make_crc_table() { - unsigned long c; + z_crc_t c; int n, k; - unsigned long poly; /* polynomial exclusive-or pattern */ + z_crc_t poly; /* polynomial exclusive-or pattern */ /* terms of polynomial defining this crc (except x^32): */ static volatile int first = 1; /* flag to limit concurrent making */ static const unsigned char p[] = {0,1,2,4,5,7,8,10,11,12,16,22,23,26}; @@ -119,13 +101,13 @@ local void make_crc_table() first = 0; /* make exclusive-or pattern from polynomial (0xedb88320UL) */ - poly = 0UL; - for (n = 0; n < sizeof(p)/sizeof(unsigned char); n++) - poly |= 1UL << (31 - p[n]); + poly = 0; + for (n = 0; n < (int)(sizeof(p)/sizeof(unsigned char)); n++) + poly |= (z_crc_t)1 << (31 - p[n]); /* generate a crc for every 8-bit value */ for (n = 0; n < 256; n++) { - c = (unsigned long)n; + c = (z_crc_t)n; for (k = 0; k < 8; k++) c = c & 1 ? poly ^ (c >> 1) : c >> 1; crc_table[0][n] = c; @@ -136,11 +118,11 @@ local void make_crc_table() and then the byte reversal of those as well as the first table */ for (n = 0; n < 256; n++) { c = crc_table[0][n]; - crc_table[4][n] = REV(c); + crc_table[4][n] = ZSWAP32(c); for (k = 1; k < 4; k++) { c = crc_table[0][c & 0xff] ^ (c >> 8); crc_table[k][n] = c; - crc_table[k + 4][n] = REV(c); + crc_table[k + 4][n] = ZSWAP32(c); } } #endif /* BYFOUR */ @@ -162,7 +144,7 @@ local void make_crc_table() if (out == NULL) return; fprintf(out, "/* crc32.h -- tables for rapid CRC calculation\n"); fprintf(out, " * Generated automatically by crc32.c\n */\n\n"); - fprintf(out, "local const unsigned long FAR "); + fprintf(out, "local const z_crc_t FAR "); fprintf(out, "crc_table[TBLS][256] =\n{\n {\n"); write_table(out, crc_table[0]); # ifdef BYFOUR @@ -182,12 +164,13 @@ local void make_crc_table() #ifdef MAKECRCH local void write_table(out, table) FILE *out; - const unsigned long FAR *table; + const z_crc_t FAR *table; { int n; for (n = 0; n < 256; n++) - fprintf(out, "%s0x%08lxUL%s", n % 5 ? "" : " ", table[n], + fprintf(out, "%s0x%08lxUL%s", n % 5 ? "" : " ", + (unsigned long)(table[n]), n == 255 ? "\n" : (n % 5 == 4 ? ",\n" : ", ")); } #endif /* MAKECRCH */ @@ -202,13 +185,13 @@ local void write_table(out, table) /* ========================================================================= * This function can be used by asm versions of crc32() */ -const unsigned long FAR * ZEXPORT get_crc_table() +const z_crc_t FAR * ZEXPORT get_crc_table() { #ifdef DYNAMIC_CRC_TABLE if (crc_table_empty) make_crc_table(); #endif /* DYNAMIC_CRC_TABLE */ - return (const unsigned long FAR *)crc_table; + return (const z_crc_t FAR *)crc_table; } /* ========================================================================= */ @@ -216,10 +199,10 @@ const unsigned long FAR * ZEXPORT get_crc_table() #define DO8 DO1; DO1; DO1; DO1; DO1; DO1; DO1; DO1 /* ========================================================================= */ -unsigned long ZEXPORT crc32(crc, buf, len) +unsigned long ZEXPORT crc32_z(crc, buf, len) unsigned long crc; const unsigned char FAR *buf; - unsigned len; + z_size_t len; { if (buf == Z_NULL) return 0UL; @@ -230,7 +213,7 @@ unsigned long ZEXPORT crc32(crc, buf, len) #ifdef BYFOUR if (sizeof(void *) == sizeof(ptrdiff_t)) { - u4 endian; + z_crc_t endian; endian = 1; if (*((unsigned char *)(&endian))) @@ -250,8 +233,29 @@ unsigned long ZEXPORT crc32(crc, buf, len) return crc ^ 0xffffffffUL; } +/* ========================================================================= */ +unsigned long ZEXPORT crc32(crc, buf, len) + unsigned long crc; + const unsigned char FAR *buf; + uInt len; +{ + return crc32_z(crc, buf, len); +} + #ifdef BYFOUR +/* + This BYFOUR code accesses the passed unsigned char * buffer with a 32-bit + integer pointer type. This violates the strict aliasing rule, where a + compiler can assume, for optimization purposes, that two pointers to + fundamentally different types won't ever point to the same memory. This can + manifest as a problem only if one of the pointers is written to. This code + only reads from those pointers. So long as this code remains isolated in + this compilation unit, there won't be a problem. For this reason, this code + should not be copied and pasted into a compilation unit in which other code + writes to the buffer that is passed to these routines. + */ + /* ========================================================================= */ #define DOLIT4 c ^= *buf4++; \ c = crc_table[3][c & 0xff] ^ crc_table[2][(c >> 8) & 0xff] ^ \ @@ -262,19 +266,19 @@ unsigned long ZEXPORT crc32(crc, buf, len) local unsigned long crc32_little(crc, buf, len) unsigned long crc; const unsigned char FAR *buf; - unsigned len; + z_size_t len; { - register u4 c; - register const u4 FAR *buf4; + register z_crc_t c; + register const z_crc_t FAR *buf4; - c = (u4)crc; + c = (z_crc_t)crc; c = ~c; while (len && ((ptrdiff_t)buf & 3)) { c = crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8); len--; } - buf4 = (const u4 FAR *)(const void FAR *)buf; + buf4 = (const z_crc_t FAR *)(const void FAR *)buf; while (len >= 32) { DOLIT32; len -= 32; @@ -293,7 +297,7 @@ local unsigned long crc32_little(crc, buf, len) } /* ========================================================================= */ -#define DOBIG4 c ^= *++buf4; \ +#define DOBIG4 c ^= *buf4++; \ c = crc_table[4][c & 0xff] ^ crc_table[5][(c >> 8) & 0xff] ^ \ crc_table[6][(c >> 16) & 0xff] ^ crc_table[7][c >> 24] #define DOBIG32 DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4 @@ -302,20 +306,19 @@ local unsigned long crc32_little(crc, buf, len) local unsigned long crc32_big(crc, buf, len) unsigned long crc; const unsigned char FAR *buf; - unsigned len; + z_size_t len; { - register u4 c; - register const u4 FAR *buf4; + register z_crc_t c; + register const z_crc_t FAR *buf4; - c = REV((u4)crc); + c = ZSWAP32((z_crc_t)crc); c = ~c; while (len && ((ptrdiff_t)buf & 3)) { c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8); len--; } - buf4 = (const u4 FAR *)(const void FAR *)buf; - buf4--; + buf4 = (const z_crc_t FAR *)(const void FAR *)buf; while (len >= 32) { DOBIG32; len -= 32; @@ -324,14 +327,13 @@ local unsigned long crc32_big(crc, buf, len) DOBIG4; len -= 4; } - buf4++; buf = (const unsigned char FAR *)buf4; if (len) do { c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8); } while (--len); c = ~c; - return (unsigned long)(REV(c)); + return (unsigned long)(ZSWAP32(c)); } #endif /* BYFOUR */ @@ -367,22 +369,22 @@ local void gf2_matrix_square(square, mat) } /* ========================================================================= */ -uLong ZEXPORT crc32_combine(crc1, crc2, len2) +local uLong crc32_combine_(crc1, crc2, len2) uLong crc1; uLong crc2; - z_off_t len2; + z_off64_t len2; { int n; unsigned long row; unsigned long even[GF2_DIM]; /* even-power-of-two zeros operator */ unsigned long odd[GF2_DIM]; /* odd-power-of-two zeros operator */ - /* degenerate case */ - if (len2 == 0) + /* degenerate case (also disallow negative lengths) */ + if (len2 <= 0) return crc1; /* put operator for one zero bit in odd */ - odd[0] = 0xedb88320L; /* CRC-32 polynomial */ + odd[0] = 0xedb88320UL; /* CRC-32 polynomial */ row = 1; for (n = 1; n < GF2_DIM; n++) { odd[n] = row; @@ -421,3 +423,20 @@ uLong ZEXPORT crc32_combine(crc1, crc2, len2) crc1 ^= crc2; return crc1; } + +/* ========================================================================= */ +uLong ZEXPORT crc32_combine(crc1, crc2, len2) + uLong crc1; + uLong crc2; + z_off_t len2; +{ + return crc32_combine_(crc1, crc2, len2); +} + +uLong ZEXPORT crc32_combine64(crc1, crc2, len2) + uLong crc1; + uLong crc2; + z_off64_t len2; +{ + return crc32_combine_(crc1, crc2, len2); +} diff --git a/zlib/crc32.h b/zlib/crc32.h index 8053b6117c02..9e0c77810251 100644 --- a/zlib/crc32.h +++ b/zlib/crc32.h @@ -2,7 +2,7 @@ * Generated automatically by crc32.c */ -local const unsigned long FAR crc_table[TBLS][256] = +local const z_crc_t FAR crc_table[TBLS][256] = { { 0x00000000UL, 0x77073096UL, 0xee0e612cUL, 0x990951baUL, 0x076dc419UL, diff --git a/zlib/deflate.c b/zlib/deflate.c index 29ce1f64a57a..1ec761448de9 100644 --- a/zlib/deflate.c +++ b/zlib/deflate.c @@ -1,5 +1,5 @@ /* deflate.c -- compress data using the deflation algorithm - * Copyright (C) 1995-2005 Jean-loup Gailly. + * Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -37,7 +37,7 @@ * REFERENCES * * Deutsch, L.P.,"DEFLATE Compressed Data Format Specification". - * Available in http://www.ietf.org/rfc/rfc1951.txt + * Available in http://tools.ietf.org/html/rfc1951 * * A description of the Rabin and Karp algorithm is given in the book * "Algorithms" by R. Sedgewick, Addison-Wesley, p252. @@ -52,7 +52,7 @@ #include "deflate.h" const char deflate_copyright[] = - " deflate 1.2.3 Copyright 1995-2005 Jean-loup Gailly "; + " deflate 1.2.11 Copyright 1995-2017 Jean-loup Gailly and Mark Adler "; /* If you use the zlib library in a product, an acknowledgment is welcome in the documentation of your product. If for some reason you cannot @@ -73,27 +73,29 @@ typedef enum { typedef block_state (*compress_func) OF((deflate_state *s, int flush)); /* Compression function. Returns the block state after the call. */ +local int deflateStateCheck OF((z_streamp strm)); +local void slide_hash OF((deflate_state *s)); local void fill_window OF((deflate_state *s)); local block_state deflate_stored OF((deflate_state *s, int flush)); local block_state deflate_fast OF((deflate_state *s, int flush)); #ifndef FASTEST local block_state deflate_slow OF((deflate_state *s, int flush)); #endif +local block_state deflate_rle OF((deflate_state *s, int flush)); +local block_state deflate_huff OF((deflate_state *s, int flush)); local void lm_init OF((deflate_state *s)); local void putShortMSB OF((deflate_state *s, uInt b)); local void flush_pending OF((z_streamp strm)); -local int read_buf OF((z_streamp strm, Bytef *buf, unsigned size)); -#ifndef FASTEST +local unsigned read_buf OF((z_streamp strm, Bytef *buf, unsigned size)); #ifdef ASMV +# pragma message("Assembler code may have bugs -- use at your own risk") void match_init OF((void)); /* asm code initialization */ uInt longest_match OF((deflate_state *s, IPos cur_match)); #else local uInt longest_match OF((deflate_state *s, IPos cur_match)); #endif -#endif -local uInt longest_match_fast OF((deflate_state *s, IPos cur_match)); -#ifdef DEBUG +#ifdef ZLIB_DEBUG local void check_match OF((deflate_state *s, IPos start, IPos match, int length)); #endif @@ -110,11 +112,6 @@ local void check_match OF((deflate_state *s, IPos start, IPos match, #endif /* Matches of length 3 are discarded if their distance exceeds TOO_FAR */ -#define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1) -/* Minimum amount of lookahead, except at the end of the input file. - * See deflate.c for comments about the MIN_MATCH+1. - */ - /* Values for max_lazy_match, good_match and max_chain_length, depending on * the desired pack level (0..9). The values given below have been tuned to * exclude worst case performance for pathological files. Better values may be @@ -154,18 +151,14 @@ local const config configuration_table[10] = { * meaning. */ -#define EQUAL 0 -/* result of memcmp for equal strings */ - -#ifndef NO_DUMMY_DECL -struct static_tree_desc_s {int dummy;}; /* for buggy compilers */ -#endif +/* rank Z_BLOCK between Z_NO_FLUSH and Z_PARTIAL_FLUSH */ +#define RANK(f) (((f) * 2) - ((f) > 4 ? 9 : 0)) /* =========================================================================== * Update a hash value with the given input byte - * IN assertion: all calls to to UPDATE_HASH are made with consecutive - * input characters, so that a running hash key can be computed from the - * previous key instead of complete recalculation each time. + * IN assertion: all calls to UPDATE_HASH are made with consecutive input + * characters, so that a running hash key can be computed from the previous + * key instead of complete recalculation each time. */ #define UPDATE_HASH(s,h,c) (h = (((h)<hash_shift) ^ (c)) & s->hash_mask) @@ -176,9 +169,9 @@ struct static_tree_desc_s {int dummy;}; /* for buggy compilers */ * the previous length of the hash chain. * If this file is compiled with -DFASTEST, the compression level is forced * to 1, and no hash chains are maintained. - * IN assertion: all calls to to INSERT_STRING are made with consecutive - * input characters and the first MIN_MATCH bytes of str are valid - * (except for the last MIN_MATCH-1 bytes of the input file). + * IN assertion: all calls to INSERT_STRING are made with consecutive input + * characters and the first MIN_MATCH bytes of str are valid (except for + * the last MIN_MATCH-1 bytes of the input file). */ #ifdef FASTEST #define INSERT_STRING(s, str, match_head) \ @@ -200,6 +193,37 @@ struct static_tree_desc_s {int dummy;}; /* for buggy compilers */ s->head[s->hash_size-1] = NIL; \ zmemzero((Bytef *)s->head, (unsigned)(s->hash_size-1)*sizeof(*s->head)); +/* =========================================================================== + * Slide the hash table when sliding the window down (could be avoided with 32 + * bit values at the expense of memory usage). We slide even when level == 0 to + * keep the hash table consistent if we switch back to level > 0 later. + */ +local void slide_hash(s) + deflate_state *s; +{ + unsigned n, m; + Posf *p; + uInt wsize = s->w_size; + + n = s->hash_size; + p = &s->head[n]; + do { + m = *--p; + *p = (Pos)(m >= wsize ? m - wsize : NIL); + } while (--n); + n = wsize; +#ifndef FASTEST + p = &s->prev[n]; + do { + m = *--p; + *p = (Pos)(m >= wsize ? m - wsize : NIL); + /* If n is not on any hash chain, prev[n] is garbage but + * its value will never be used. + */ + } while (--n); +#endif +} + /* ========================================================================= */ int ZEXPORT deflateInit_(strm, level, version, stream_size) z_streamp strm; @@ -241,10 +265,19 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, strm->msg = Z_NULL; if (strm->zalloc == (alloc_func)0) { +#ifdef Z_SOLO + return Z_STREAM_ERROR; +#else strm->zalloc = zcalloc; strm->opaque = (voidpf)0; +#endif } - if (strm->zfree == (free_func)0) strm->zfree = zcfree; + if (strm->zfree == (free_func)0) +#ifdef Z_SOLO + return Z_STREAM_ERROR; +#else + strm->zfree = zcfree; +#endif #ifdef FASTEST if (level != 0) level = 1; @@ -264,7 +297,7 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, #endif if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method != Z_DEFLATED || windowBits < 8 || windowBits > 15 || level < 0 || level > 9 || - strategy < 0 || strategy > Z_FIXED) { + strategy < 0 || strategy > Z_FIXED || (windowBits == 8 && wrap != 1)) { return Z_STREAM_ERROR; } if (windowBits == 8) windowBits = 9; /* until 256-byte window bug fixed */ @@ -272,14 +305,15 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, if (s == Z_NULL) return Z_MEM_ERROR; strm->state = (struct internal_state FAR *)s; s->strm = strm; + s->status = INIT_STATE; /* to pass state test in deflateReset() */ s->wrap = wrap; s->gzhead = Z_NULL; - s->w_bits = windowBits; + s->w_bits = (uInt)windowBits; s->w_size = 1 << s->w_bits; s->w_mask = s->w_size - 1; - s->hash_bits = memLevel + 7; + s->hash_bits = (uInt)memLevel + 7; s->hash_size = 1 << s->hash_bits; s->hash_mask = s->hash_size - 1; s->hash_shift = ((s->hash_bits+MIN_MATCH-1)/MIN_MATCH); @@ -288,6 +322,8 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, s->prev = (Posf *) ZALLOC(strm, s->w_size, sizeof(Pos)); s->head = (Posf *) ZALLOC(strm, s->hash_size, sizeof(Pos)); + s->high_water = 0; /* nothing written to s->window yet */ + s->lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */ overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2); @@ -297,7 +333,7 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, if (s->window == Z_NULL || s->prev == Z_NULL || s->head == Z_NULL || s->pending_buf == Z_NULL) { s->status = FINISH_STATE; - strm->msg = (char*)ERR_MSG(Z_MEM_ERROR); + strm->msg = ERR_MSG(Z_MEM_ERROR); deflateEnd (strm); return Z_MEM_ERROR; } @@ -311,6 +347,31 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, return deflateReset(strm); } +/* ========================================================================= + * Check for a valid deflate stream state. Return 0 if ok, 1 if not. + */ +local int deflateStateCheck (strm) + z_streamp strm; +{ + deflate_state *s; + if (strm == Z_NULL || + strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0) + return 1; + s = strm->state; + if (s == Z_NULL || s->strm != strm || (s->status != INIT_STATE && +#ifdef GZIP + s->status != GZIP_STATE && +#endif + s->status != EXTRA_STATE && + s->status != NAME_STATE && + s->status != COMMENT_STATE && + s->status != HCRC_STATE && + s->status != BUSY_STATE && + s->status != FINISH_STATE)) + return 1; + return 0; +} + /* ========================================================================= */ int ZEXPORT deflateSetDictionary (strm, dictionary, dictLength) z_streamp strm; @@ -318,49 +379,97 @@ int ZEXPORT deflateSetDictionary (strm, dictionary, dictLength) uInt dictLength; { deflate_state *s; - uInt length = dictLength; - uInt n; - IPos hash_head = 0; + uInt str, n; + int wrap; + unsigned avail; + z_const unsigned char *next; - if (strm == Z_NULL || strm->state == Z_NULL || dictionary == Z_NULL || - strm->state->wrap == 2 || - (strm->state->wrap == 1 && strm->state->status != INIT_STATE)) + if (deflateStateCheck(strm) || dictionary == Z_NULL) return Z_STREAM_ERROR; - s = strm->state; - if (s->wrap) - strm->adler = adler32(strm->adler, dictionary, dictLength); + wrap = s->wrap; + if (wrap == 2 || (wrap == 1 && s->status != INIT_STATE) || s->lookahead) + return Z_STREAM_ERROR; - if (length < MIN_MATCH) return Z_OK; - if (length > MAX_DIST(s)) { - length = MAX_DIST(s); - dictionary += dictLength - length; /* use the tail of the dictionary */ + /* when using zlib wrappers, compute Adler-32 for provided dictionary */ + if (wrap == 1) + strm->adler = adler32(strm->adler, dictionary, dictLength); + s->wrap = 0; /* avoid computing Adler-32 in read_buf */ + + /* if dictionary would fill window, just replace the history */ + if (dictLength >= s->w_size) { + if (wrap == 0) { /* already empty otherwise */ + CLEAR_HASH(s); + s->strstart = 0; + s->block_start = 0L; + s->insert = 0; + } + dictionary += dictLength - s->w_size; /* use the tail */ + dictLength = s->w_size; } - zmemcpy(s->window, dictionary, length); - s->strstart = length; - s->block_start = (long)length; - /* Insert all strings in the hash table (except for the last two bytes). - * s->lookahead stays null, so s->ins_h will be recomputed at the next - * call of fill_window. - */ - s->ins_h = s->window[0]; - UPDATE_HASH(s, s->ins_h, s->window[1]); - for (n = 0; n <= length - MIN_MATCH; n++) { - INSERT_STRING(s, n, hash_head); + /* insert dictionary into window and hash */ + avail = strm->avail_in; + next = strm->next_in; + strm->avail_in = dictLength; + strm->next_in = (z_const Bytef *)dictionary; + fill_window(s); + while (s->lookahead >= MIN_MATCH) { + str = s->strstart; + n = s->lookahead - (MIN_MATCH-1); + do { + UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); +#ifndef FASTEST + s->prev[str & s->w_mask] = s->head[s->ins_h]; +#endif + s->head[s->ins_h] = (Pos)str; + str++; + } while (--n); + s->strstart = str; + s->lookahead = MIN_MATCH-1; + fill_window(s); } - if (hash_head) hash_head = 0; /* to make compiler happy */ + s->strstart += s->lookahead; + s->block_start = (long)s->strstart; + s->insert = s->lookahead; + s->lookahead = 0; + s->match_length = s->prev_length = MIN_MATCH-1; + s->match_available = 0; + strm->next_in = next; + strm->avail_in = avail; + s->wrap = wrap; return Z_OK; } /* ========================================================================= */ -int ZEXPORT deflateReset (strm) +int ZEXPORT deflateGetDictionary (strm, dictionary, dictLength) z_streamp strm; + Bytef *dictionary; + uInt *dictLength; { deflate_state *s; + uInt len; - if (strm == Z_NULL || strm->state == Z_NULL || - strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0) { + if (deflateStateCheck(strm)) + return Z_STREAM_ERROR; + s = strm->state; + len = s->strstart + s->lookahead; + if (len > s->w_size) + len = s->w_size; + if (dictionary != Z_NULL && len) + zmemcpy(dictionary, s->window + s->strstart + s->lookahead - len, len); + if (dictLength != Z_NULL) + *dictLength = len; + return Z_OK; +} + +/* ========================================================================= */ +int ZEXPORT deflateResetKeep (strm) + z_streamp strm; +{ + deflate_state *s; + + if (deflateStateCheck(strm)) { return Z_STREAM_ERROR; } @@ -375,7 +484,11 @@ int ZEXPORT deflateReset (strm) if (s->wrap < 0) { s->wrap = -s->wrap; /* was made negative by deflate(..., Z_FINISH); */ } - s->status = s->wrap ? INIT_STATE : BUSY_STATE; + s->status = +#ifdef GZIP + s->wrap == 2 ? GZIP_STATE : +#endif + s->wrap ? INIT_STATE : BUSY_STATE; strm->adler = #ifdef GZIP s->wrap == 2 ? crc32(0L, Z_NULL, 0) : @@ -384,31 +497,70 @@ int ZEXPORT deflateReset (strm) s->last_flush = Z_NO_FLUSH; _tr_init(s); - lm_init(s); return Z_OK; } +/* ========================================================================= */ +int ZEXPORT deflateReset (strm) + z_streamp strm; +{ + int ret; + + ret = deflateResetKeep(strm); + if (ret == Z_OK) + lm_init(strm->state); + return ret; +} + /* ========================================================================= */ int ZEXPORT deflateSetHeader (strm, head) z_streamp strm; gz_headerp head; { - if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; - if (strm->state->wrap != 2) return Z_STREAM_ERROR; + if (deflateStateCheck(strm) || strm->state->wrap != 2) + return Z_STREAM_ERROR; strm->state->gzhead = head; return Z_OK; } +/* ========================================================================= */ +int ZEXPORT deflatePending (strm, pending, bits) + unsigned *pending; + int *bits; + z_streamp strm; +{ + if (deflateStateCheck(strm)) return Z_STREAM_ERROR; + if (pending != Z_NULL) + *pending = strm->state->pending; + if (bits != Z_NULL) + *bits = strm->state->bi_valid; + return Z_OK; +} + /* ========================================================================= */ int ZEXPORT deflatePrime (strm, bits, value) z_streamp strm; int bits; int value; { - if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; - strm->state->bi_valid = bits; - strm->state->bi_buf = (ush)(value & ((1 << bits) - 1)); + deflate_state *s; + int put; + + if (deflateStateCheck(strm)) return Z_STREAM_ERROR; + s = strm->state; + if ((Bytef *)(s->d_buf) < s->pending_out + ((Buf_size + 7) >> 3)) + return Z_BUF_ERROR; + do { + put = Buf_size - s->bi_valid; + if (put > bits) + put = bits; + s->bi_buf |= (ush)((value & ((1 << put) - 1)) << s->bi_valid); + s->bi_valid += put; + _tr_flush_bits(s); + value >>= put; + bits -= put; + } while (bits); return Z_OK; } @@ -420,9 +572,8 @@ int ZEXPORT deflateParams(strm, level, strategy) { deflate_state *s; compress_func func; - int err = Z_OK; - if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + if (deflateStateCheck(strm)) return Z_STREAM_ERROR; s = strm->state; #ifdef FASTEST @@ -435,11 +586,23 @@ int ZEXPORT deflateParams(strm, level, strategy) } func = configuration_table[s->level].func; - if (func != configuration_table[level].func && strm->total_in != 0) { + if ((strategy != s->strategy || func != configuration_table[level].func) && + s->high_water) { /* Flush the last buffer: */ - err = deflate(strm, Z_PARTIAL_FLUSH); + int err = deflate(strm, Z_BLOCK); + if (err == Z_STREAM_ERROR) + return err; + if (strm->avail_out == 0) + return Z_BUF_ERROR; } if (s->level != level) { + if (s->level == 0 && s->matches != 0) { + if (s->matches == 1) + slide_hash(s); + else + CLEAR_HASH(s); + s->matches = 0; + } s->level = level; s->max_lazy_match = configuration_table[level].max_lazy; s->good_match = configuration_table[level].good_length; @@ -447,7 +610,7 @@ int ZEXPORT deflateParams(strm, level, strategy) s->max_chain_length = configuration_table[level].max_chain; } s->strategy = strategy; - return err; + return Z_OK; } /* ========================================================================= */ @@ -460,12 +623,12 @@ int ZEXPORT deflateTune(strm, good_length, max_lazy, nice_length, max_chain) { deflate_state *s; - if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + if (deflateStateCheck(strm)) return Z_STREAM_ERROR; s = strm->state; - s->good_match = good_length; - s->max_lazy_match = max_lazy; + s->good_match = (uInt)good_length; + s->max_lazy_match = (uInt)max_lazy; s->nice_match = nice_length; - s->max_chain_length = max_chain; + s->max_chain_length = (uInt)max_chain; return Z_OK; } @@ -481,33 +644,68 @@ int ZEXPORT deflateTune(strm, good_length, max_lazy, nice_length, max_chain) * resulting from using fixed blocks instead of stored blocks, which deflate * can emit on compressed data for some combinations of the parameters. * - * This function could be more sophisticated to provide closer upper bounds - * for every combination of windowBits and memLevel, as well as wrap. - * But even the conservative upper bound of about 14% expansion does not - * seem onerous for output buffer allocation. + * This function could be more sophisticated to provide closer upper bounds for + * every combination of windowBits and memLevel. But even the conservative + * upper bound of about 14% expansion does not seem onerous for output buffer + * allocation. */ uLong ZEXPORT deflateBound(strm, sourceLen) z_streamp strm; uLong sourceLen; { deflate_state *s; - uLong destLen; + uLong complen, wraplen; - /* conservative upper bound */ - destLen = sourceLen + - ((sourceLen + 7) >> 3) + ((sourceLen + 63) >> 6) + 11; + /* conservative upper bound for compressed data */ + complen = sourceLen + + ((sourceLen + 7) >> 3) + ((sourceLen + 63) >> 6) + 5; - /* if can't get parameters, return conservative bound */ - if (strm == Z_NULL || strm->state == Z_NULL) - return destLen; + /* if can't get parameters, return conservative bound plus zlib wrapper */ + if (deflateStateCheck(strm)) + return complen + 6; - /* if not default parameters, return conservative bound */ + /* compute wrapper length */ s = strm->state; + switch (s->wrap) { + case 0: /* raw deflate */ + wraplen = 0; + break; + case 1: /* zlib wrapper */ + wraplen = 6 + (s->strstart ? 4 : 0); + break; +#ifdef GZIP + case 2: /* gzip wrapper */ + wraplen = 18; + if (s->gzhead != Z_NULL) { /* user-supplied gzip header */ + Bytef *str; + if (s->gzhead->extra != Z_NULL) + wraplen += 2 + s->gzhead->extra_len; + str = s->gzhead->name; + if (str != Z_NULL) + do { + wraplen++; + } while (*str++); + str = s->gzhead->comment; + if (str != Z_NULL) + do { + wraplen++; + } while (*str++); + if (s->gzhead->hcrc) + wraplen += 2; + } + break; +#endif + default: /* for compiler happiness */ + wraplen = 6; + } + + /* if not default parameters, return conservative bound */ if (s->w_bits != 15 || s->hash_bits != 8 + 7) - return destLen; + return complen + wraplen; /* default settings: return tight bound for that case */ - return compressBound(sourceLen); + return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) + + (sourceLen >> 25) + 13 - 6 + wraplen; } /* ========================================================================= @@ -524,30 +722,43 @@ local void putShortMSB (s, b) } /* ========================================================================= - * Flush as much pending output as possible. All deflate() output goes - * through this function so some applications may wish to modify it - * to avoid allocating a large strm->next_out buffer and copying into it. - * (See also read_buf()). + * Flush as much pending output as possible. All deflate() output, except for + * some deflate_stored() output, goes through this function so some + * applications may wish to modify it to avoid allocating a large + * strm->next_out buffer and copying into it. (See also read_buf()). */ local void flush_pending(strm) z_streamp strm; { - unsigned len = strm->state->pending; + unsigned len; + deflate_state *s = strm->state; + _tr_flush_bits(s); + len = s->pending; if (len > strm->avail_out) len = strm->avail_out; if (len == 0) return; - zmemcpy(strm->next_out, strm->state->pending_out, len); + zmemcpy(strm->next_out, s->pending_out, len); strm->next_out += len; - strm->state->pending_out += len; + s->pending_out += len; strm->total_out += len; - strm->avail_out -= len; - strm->state->pending -= len; - if (strm->state->pending == 0) { - strm->state->pending_out = strm->state->pending_buf; + strm->avail_out -= len; + s->pending -= len; + if (s->pending == 0) { + s->pending_out = s->pending_buf; } } +/* =========================================================================== + * Update the header CRC with the bytes s->pending_buf[beg..s->pending - 1]. + */ +#define HCRC_UPDATE(beg) \ + do { \ + if (s->gzhead->hcrc && s->pending > (beg)) \ + strm->adler = crc32(strm->adler, s->pending_buf + (beg), \ + s->pending - (beg)); \ + } while (0) + /* ========================================================================= */ int ZEXPORT deflate (strm, flush) z_streamp strm; @@ -556,230 +767,229 @@ int ZEXPORT deflate (strm, flush) int old_flush; /* value of flush param for previous deflate call */ deflate_state *s; - if (strm == Z_NULL || strm->state == Z_NULL || - flush > Z_FINISH || flush < 0) { + if (deflateStateCheck(strm) || flush > Z_BLOCK || flush < 0) { return Z_STREAM_ERROR; } s = strm->state; if (strm->next_out == Z_NULL || - (strm->next_in == Z_NULL && strm->avail_in != 0) || + (strm->avail_in != 0 && strm->next_in == Z_NULL) || (s->status == FINISH_STATE && flush != Z_FINISH)) { ERR_RETURN(strm, Z_STREAM_ERROR); } if (strm->avail_out == 0) ERR_RETURN(strm, Z_BUF_ERROR); - s->strm = strm; /* just in case */ old_flush = s->last_flush; s->last_flush = flush; + /* Flush as much pending output as possible */ + if (s->pending != 0) { + flush_pending(strm); + if (strm->avail_out == 0) { + /* Since avail_out is 0, deflate will be called again with + * more output space, but possibly with both pending and + * avail_in equal to zero. There won't be anything to do, + * but this is not an error situation so make sure we + * return OK instead of BUF_ERROR at next call of deflate: + */ + s->last_flush = -1; + return Z_OK; + } + + /* Make sure there is something to do and avoid duplicate consecutive + * flushes. For repeated and useless calls with Z_FINISH, we keep + * returning Z_STREAM_END instead of Z_BUF_ERROR. + */ + } else if (strm->avail_in == 0 && RANK(flush) <= RANK(old_flush) && + flush != Z_FINISH) { + ERR_RETURN(strm, Z_BUF_ERROR); + } + + /* User must not provide more input after the first FINISH: */ + if (s->status == FINISH_STATE && strm->avail_in != 0) { + ERR_RETURN(strm, Z_BUF_ERROR); + } + /* Write the header */ if (s->status == INIT_STATE) { -#ifdef GZIP - if (s->wrap == 2) { - strm->adler = crc32(0L, Z_NULL, 0); - put_byte(s, 31); - put_byte(s, 139); - put_byte(s, 8); - if (s->gzhead == NULL) { - put_byte(s, 0); - put_byte(s, 0); - put_byte(s, 0); - put_byte(s, 0); - put_byte(s, 0); - put_byte(s, s->level == 9 ? 2 : - (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ? - 4 : 0)); - put_byte(s, OS_CODE); - s->status = BUSY_STATE; - } - else { - put_byte(s, (s->gzhead->text ? 1 : 0) + - (s->gzhead->hcrc ? 2 : 0) + - (s->gzhead->extra == Z_NULL ? 0 : 4) + - (s->gzhead->name == Z_NULL ? 0 : 8) + - (s->gzhead->comment == Z_NULL ? 0 : 16) - ); - put_byte(s, (Byte)(s->gzhead->time & 0xff)); - put_byte(s, (Byte)((s->gzhead->time >> 8) & 0xff)); - put_byte(s, (Byte)((s->gzhead->time >> 16) & 0xff)); - put_byte(s, (Byte)((s->gzhead->time >> 24) & 0xff)); - put_byte(s, s->level == 9 ? 2 : - (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ? - 4 : 0)); - put_byte(s, s->gzhead->os & 0xff); - if (s->gzhead->extra != NULL) { - put_byte(s, s->gzhead->extra_len & 0xff); - put_byte(s, (s->gzhead->extra_len >> 8) & 0xff); - } - if (s->gzhead->hcrc) - strm->adler = crc32(strm->adler, s->pending_buf, - s->pending); - s->gzindex = 0; - s->status = EXTRA_STATE; - } - } + /* zlib header */ + uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8; + uInt level_flags; + + if (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2) + level_flags = 0; + else if (s->level < 6) + level_flags = 1; + else if (s->level == 6) + level_flags = 2; else -#endif - { - uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8; - uInt level_flags; - - if (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2) - level_flags = 0; - else if (s->level < 6) - level_flags = 1; - else if (s->level == 6) - level_flags = 2; - else - level_flags = 3; - header |= (level_flags << 6); - if (s->strstart != 0) header |= PRESET_DICT; - header += 31 - (header % 31); + level_flags = 3; + header |= (level_flags << 6); + if (s->strstart != 0) header |= PRESET_DICT; + header += 31 - (header % 31); + putShortMSB(s, header); + + /* Save the adler32 of the preset dictionary: */ + if (s->strstart != 0) { + putShortMSB(s, (uInt)(strm->adler >> 16)); + putShortMSB(s, (uInt)(strm->adler & 0xffff)); + } + strm->adler = adler32(0L, Z_NULL, 0); + s->status = BUSY_STATE; + + /* Compression must start with an empty pending buffer */ + flush_pending(strm); + if (s->pending != 0) { + s->last_flush = -1; + return Z_OK; + } + } +#ifdef GZIP + if (s->status == GZIP_STATE) { + /* gzip header */ + strm->adler = crc32(0L, Z_NULL, 0); + put_byte(s, 31); + put_byte(s, 139); + put_byte(s, 8); + if (s->gzhead == Z_NULL) { + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, s->level == 9 ? 2 : + (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ? + 4 : 0)); + put_byte(s, OS_CODE); s->status = BUSY_STATE; - putShortMSB(s, header); - /* Save the adler32 of the preset dictionary: */ - if (s->strstart != 0) { - putShortMSB(s, (uInt)(strm->adler >> 16)); - putShortMSB(s, (uInt)(strm->adler & 0xffff)); + /* Compression must start with an empty pending buffer */ + flush_pending(strm); + if (s->pending != 0) { + s->last_flush = -1; + return Z_OK; } - strm->adler = adler32(0L, Z_NULL, 0); + } + else { + put_byte(s, (s->gzhead->text ? 1 : 0) + + (s->gzhead->hcrc ? 2 : 0) + + (s->gzhead->extra == Z_NULL ? 0 : 4) + + (s->gzhead->name == Z_NULL ? 0 : 8) + + (s->gzhead->comment == Z_NULL ? 0 : 16) + ); + put_byte(s, (Byte)(s->gzhead->time & 0xff)); + put_byte(s, (Byte)((s->gzhead->time >> 8) & 0xff)); + put_byte(s, (Byte)((s->gzhead->time >> 16) & 0xff)); + put_byte(s, (Byte)((s->gzhead->time >> 24) & 0xff)); + put_byte(s, s->level == 9 ? 2 : + (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ? + 4 : 0)); + put_byte(s, s->gzhead->os & 0xff); + if (s->gzhead->extra != Z_NULL) { + put_byte(s, s->gzhead->extra_len & 0xff); + put_byte(s, (s->gzhead->extra_len >> 8) & 0xff); + } + if (s->gzhead->hcrc) + strm->adler = crc32(strm->adler, s->pending_buf, + s->pending); + s->gzindex = 0; + s->status = EXTRA_STATE; } } -#ifdef GZIP if (s->status == EXTRA_STATE) { - if (s->gzhead->extra != NULL) { - uInt beg = s->pending; /* start of bytes to update crc */ - - while (s->gzindex < (s->gzhead->extra_len & 0xffff)) { - if (s->pending == s->pending_buf_size) { - if (s->gzhead->hcrc && s->pending > beg) - strm->adler = crc32(strm->adler, s->pending_buf + beg, - s->pending - beg); - flush_pending(strm); - beg = s->pending; - if (s->pending == s->pending_buf_size) - break; + if (s->gzhead->extra != Z_NULL) { + ulg beg = s->pending; /* start of bytes to update crc */ + uInt left = (s->gzhead->extra_len & 0xffff) - s->gzindex; + while (s->pending + left > s->pending_buf_size) { + uInt copy = s->pending_buf_size - s->pending; + zmemcpy(s->pending_buf + s->pending, + s->gzhead->extra + s->gzindex, copy); + s->pending = s->pending_buf_size; + HCRC_UPDATE(beg); + s->gzindex += copy; + flush_pending(strm); + if (s->pending != 0) { + s->last_flush = -1; + return Z_OK; } - put_byte(s, s->gzhead->extra[s->gzindex]); - s->gzindex++; - } - if (s->gzhead->hcrc && s->pending > beg) - strm->adler = crc32(strm->adler, s->pending_buf + beg, - s->pending - beg); - if (s->gzindex == s->gzhead->extra_len) { - s->gzindex = 0; - s->status = NAME_STATE; + beg = 0; + left -= copy; } + zmemcpy(s->pending_buf + s->pending, + s->gzhead->extra + s->gzindex, left); + s->pending += left; + HCRC_UPDATE(beg); + s->gzindex = 0; } - else - s->status = NAME_STATE; + s->status = NAME_STATE; } if (s->status == NAME_STATE) { - if (s->gzhead->name != NULL) { - uInt beg = s->pending; /* start of bytes to update crc */ + if (s->gzhead->name != Z_NULL) { + ulg beg = s->pending; /* start of bytes to update crc */ int val; - do { if (s->pending == s->pending_buf_size) { - if (s->gzhead->hcrc && s->pending > beg) - strm->adler = crc32(strm->adler, s->pending_buf + beg, - s->pending - beg); + HCRC_UPDATE(beg); flush_pending(strm); - beg = s->pending; - if (s->pending == s->pending_buf_size) { - val = 1; - break; + if (s->pending != 0) { + s->last_flush = -1; + return Z_OK; } + beg = 0; } val = s->gzhead->name[s->gzindex++]; put_byte(s, val); } while (val != 0); - if (s->gzhead->hcrc && s->pending > beg) - strm->adler = crc32(strm->adler, s->pending_buf + beg, - s->pending - beg); - if (val == 0) { - s->gzindex = 0; - s->status = COMMENT_STATE; - } + HCRC_UPDATE(beg); + s->gzindex = 0; } - else - s->status = COMMENT_STATE; + s->status = COMMENT_STATE; } if (s->status == COMMENT_STATE) { - if (s->gzhead->comment != NULL) { - uInt beg = s->pending; /* start of bytes to update crc */ + if (s->gzhead->comment != Z_NULL) { + ulg beg = s->pending; /* start of bytes to update crc */ int val; - do { if (s->pending == s->pending_buf_size) { - if (s->gzhead->hcrc && s->pending > beg) - strm->adler = crc32(strm->adler, s->pending_buf + beg, - s->pending - beg); + HCRC_UPDATE(beg); flush_pending(strm); - beg = s->pending; - if (s->pending == s->pending_buf_size) { - val = 1; - break; + if (s->pending != 0) { + s->last_flush = -1; + return Z_OK; } + beg = 0; } val = s->gzhead->comment[s->gzindex++]; put_byte(s, val); } while (val != 0); - if (s->gzhead->hcrc && s->pending > beg) - strm->adler = crc32(strm->adler, s->pending_buf + beg, - s->pending - beg); - if (val == 0) - s->status = HCRC_STATE; + HCRC_UPDATE(beg); } - else - s->status = HCRC_STATE; + s->status = HCRC_STATE; } if (s->status == HCRC_STATE) { if (s->gzhead->hcrc) { - if (s->pending + 2 > s->pending_buf_size) + if (s->pending + 2 > s->pending_buf_size) { flush_pending(strm); - if (s->pending + 2 <= s->pending_buf_size) { - put_byte(s, (Byte)(strm->adler & 0xff)); - put_byte(s, (Byte)((strm->adler >> 8) & 0xff)); - strm->adler = crc32(0L, Z_NULL, 0); - s->status = BUSY_STATE; + if (s->pending != 0) { + s->last_flush = -1; + return Z_OK; + } } + put_byte(s, (Byte)(strm->adler & 0xff)); + put_byte(s, (Byte)((strm->adler >> 8) & 0xff)); + strm->adler = crc32(0L, Z_NULL, 0); } - else - s->status = BUSY_STATE; - } -#endif + s->status = BUSY_STATE; - /* Flush as much pending output as possible */ - if (s->pending != 0) { + /* Compression must start with an empty pending buffer */ flush_pending(strm); - if (strm->avail_out == 0) { - /* Since avail_out is 0, deflate will be called again with - * more output space, but possibly with both pending and - * avail_in equal to zero. There won't be anything to do, - * but this is not an error situation so make sure we - * return OK instead of BUF_ERROR at next call of deflate: - */ + if (s->pending != 0) { s->last_flush = -1; return Z_OK; } - - /* Make sure there is something to do and avoid duplicate consecutive - * flushes. For repeated and useless calls with Z_FINISH, we keep - * returning Z_STREAM_END instead of Z_BUF_ERROR. - */ - } else if (strm->avail_in == 0 && flush <= old_flush && - flush != Z_FINISH) { - ERR_RETURN(strm, Z_BUF_ERROR); - } - - /* User must not provide more input after the first FINISH: */ - if (s->status == FINISH_STATE && strm->avail_in != 0) { - ERR_RETURN(strm, Z_BUF_ERROR); } +#endif /* Start a new block or continue the current one. */ @@ -787,7 +997,10 @@ int ZEXPORT deflate (strm, flush) (flush != Z_NO_FLUSH && s->status != FINISH_STATE)) { block_state bstate; - bstate = (*(configuration_table[s->level].func))(s, flush); + bstate = s->level == 0 ? deflate_stored(s, flush) : + s->strategy == Z_HUFFMAN_ONLY ? deflate_huff(s, flush) : + s->strategy == Z_RLE ? deflate_rle(s, flush) : + (*(configuration_table[s->level].func))(s, flush); if (bstate == finish_started || bstate == finish_done) { s->status = FINISH_STATE; @@ -808,13 +1021,18 @@ int ZEXPORT deflate (strm, flush) if (bstate == block_done) { if (flush == Z_PARTIAL_FLUSH) { _tr_align(s); - } else { /* FULL_FLUSH or SYNC_FLUSH */ + } else if (flush != Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */ _tr_stored_block(s, (char*)0, 0L, 0); /* For a full flush, this empty block will be recognized * as a special marker by inflate_sync(). */ if (flush == Z_FULL_FLUSH) { CLEAR_HASH(s); /* forget history */ + if (s->lookahead == 0) { + s->strstart = 0; + s->block_start = 0L; + s->insert = 0; + } } } flush_pending(strm); @@ -824,7 +1042,6 @@ int ZEXPORT deflate (strm, flush) } } } - Assert(strm->avail_out > 0, "bug2"); if (flush != Z_FINISH) return Z_OK; if (s->wrap <= 0) return Z_STREAM_END; @@ -861,18 +1078,9 @@ int ZEXPORT deflateEnd (strm) { int status; - if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + if (deflateStateCheck(strm)) return Z_STREAM_ERROR; status = strm->state->status; - if (status != INIT_STATE && - status != EXTRA_STATE && - status != NAME_STATE && - status != COMMENT_STATE && - status != HCRC_STATE && - status != BUSY_STATE && - status != FINISH_STATE) { - return Z_STREAM_ERROR; - } /* Deallocate in reverse order of allocations: */ TRY_FREE(strm, strm->state->pending_buf); @@ -903,18 +1111,18 @@ int ZEXPORT deflateCopy (dest, source) ushf *overlay; - if (source == Z_NULL || dest == Z_NULL || source->state == Z_NULL) { + if (deflateStateCheck(source) || dest == Z_NULL) { return Z_STREAM_ERROR; } ss = source->state; - zmemcpy(dest, source, sizeof(z_stream)); + zmemcpy((voidpf)dest, (voidpf)source, sizeof(z_stream)); ds = (deflate_state *) ZALLOC(dest, 1, sizeof(deflate_state)); if (ds == Z_NULL) return Z_MEM_ERROR; dest->state = (struct internal_state FAR *) ds; - zmemcpy(ds, ss, sizeof(deflate_state)); + zmemcpy((voidpf)ds, (voidpf)ss, sizeof(deflate_state)); ds->strm = dest; ds->window = (Bytef *) ZALLOC(dest, ds->w_size, 2*sizeof(Byte)); @@ -930,8 +1138,8 @@ int ZEXPORT deflateCopy (dest, source) } /* following zmemcpy do not work for 16-bit MSDOS */ zmemcpy(ds->window, ss->window, ds->w_size * 2 * sizeof(Byte)); - zmemcpy(ds->prev, ss->prev, ds->w_size * sizeof(Pos)); - zmemcpy(ds->head, ss->head, ds->hash_size * sizeof(Pos)); + zmemcpy((voidpf)ds->prev, (voidpf)ss->prev, ds->w_size * sizeof(Pos)); + zmemcpy((voidpf)ds->head, (voidpf)ss->head, ds->hash_size * sizeof(Pos)); zmemcpy(ds->pending_buf, ss->pending_buf, (uInt)ds->pending_buf_size); ds->pending_out = ds->pending_buf + (ss->pending_out - ss->pending_buf); @@ -953,7 +1161,7 @@ int ZEXPORT deflateCopy (dest, source) * allocating a large strm->next_in buffer and copying from it. * (See also flush_pending()). */ -local int read_buf(strm, buf, size) +local unsigned read_buf(strm, buf, size) z_streamp strm; Bytef *buf; unsigned size; @@ -965,19 +1173,19 @@ local int read_buf(strm, buf, size) strm->avail_in -= len; + zmemcpy(buf, strm->next_in, len); if (strm->state->wrap == 1) { - strm->adler = adler32(strm->adler, strm->next_in, len); + strm->adler = adler32(strm->adler, buf, len); } #ifdef GZIP else if (strm->state->wrap == 2) { - strm->adler = crc32(strm->adler, strm->next_in, len); + strm->adler = crc32(strm->adler, buf, len); } #endif - zmemcpy(buf, strm->next_in, len); strm->next_in += len; strm->total_in += len; - return (int)len; + return len; } /* =========================================================================== @@ -1000,6 +1208,7 @@ local void lm_init (s) s->strstart = 0; s->block_start = 0L; s->lookahead = 0; + s->insert = 0; s->match_length = s->prev_length = MIN_MATCH-1; s->match_available = 0; s->ins_h = 0; @@ -1030,9 +1239,9 @@ local uInt longest_match(s, cur_match) { unsigned chain_length = s->max_chain_length;/* max hash chain length */ register Bytef *scan = s->window + s->strstart; /* current string */ - register Bytef *match; /* matched string */ + register Bytef *match; /* matched string */ register int len; /* length of current match */ - int best_len = s->prev_length; /* best match length so far */ + int best_len = (int)s->prev_length; /* best match length so far */ int nice_match = s->nice_match; /* stop if match long enough */ IPos limit = s->strstart > (IPos)MAX_DIST(s) ? s->strstart - (IPos)MAX_DIST(s) : NIL; @@ -1067,7 +1276,7 @@ local uInt longest_match(s, cur_match) /* Do not look for matches beyond the end of the input. This is necessary * to make deflate deterministic. */ - if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead; + if ((uInt)nice_match > s->lookahead) nice_match = (int)s->lookahead; Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead"); @@ -1167,12 +1376,13 @@ local uInt longest_match(s, cur_match) return s->lookahead; } #endif /* ASMV */ -#endif /* FASTEST */ + +#else /* FASTEST */ /* --------------------------------------------------------------------------- - * Optimized version for level == 1 or strategy == Z_RLE only + * Optimized version for FASTEST only */ -local uInt longest_match_fast(s, cur_match) +local uInt longest_match(s, cur_match) deflate_state *s; IPos cur_match; /* current match */ { @@ -1225,7 +1435,13 @@ local uInt longest_match_fast(s, cur_match) return (uInt)len <= s->lookahead ? (uInt)len : s->lookahead; } -#ifdef DEBUG +#endif /* FASTEST */ + +#ifdef ZLIB_DEBUG + +#define EQUAL 0 +/* result of memcmp for equal strings */ + /* =========================================================================== * Check that the match at match_start is indeed a match. */ @@ -1251,7 +1467,7 @@ local void check_match(s, start, match, length) } #else # define check_match(s, start, match, length) -#endif /* DEBUG */ +#endif /* ZLIB_DEBUG */ /* =========================================================================== * Fill the window when the lookahead becomes insufficient. @@ -1266,11 +1482,12 @@ local void check_match(s, start, match, length) local void fill_window(s) deflate_state *s; { - register unsigned n, m; - register Posf *p; + unsigned n; unsigned more; /* Amount of free space at the end of the window. */ uInt wsize = s->w_size; + Assert(s->lookahead < MIN_LOOKAHEAD, "already enough lookahead"); + do { more = (unsigned)(s->window_size -(ulg)s->lookahead -(ulg)s->strstart); @@ -1292,39 +1509,14 @@ local void fill_window(s) */ if (s->strstart >= wsize+MAX_DIST(s)) { - zmemcpy(s->window, s->window+wsize, (unsigned)wsize); + zmemcpy(s->window, s->window+wsize, (unsigned)wsize - more); s->match_start -= wsize; s->strstart -= wsize; /* we now have strstart >= MAX_DIST */ s->block_start -= (long) wsize; - - /* Slide the hash table (could be avoided with 32 bit values - at the expense of memory usage). We slide even when level == 0 - to keep the hash table consistent if we switch back to level > 0 - later. (Using level 0 permanently is not an optimal usage of - zlib, so we don't care about this pathological case.) - */ - /* %%% avoid this when Z_RLE */ - n = s->hash_size; - p = &s->head[n]; - do { - m = *--p; - *p = (Pos)(m >= wsize ? m-wsize : NIL); - } while (--n); - - n = wsize; -#ifndef FASTEST - p = &s->prev[n]; - do { - m = *--p; - *p = (Pos)(m >= wsize ? m-wsize : NIL); - /* If n is not on any hash chain, prev[n] is garbage but - * its value will never be used. - */ - } while (--n); -#endif + slide_hash(s); more += wsize; } - if (s->strm->avail_in == 0) return; + if (s->strm->avail_in == 0) break; /* If there was no sliding: * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 && @@ -1343,99 +1535,283 @@ local void fill_window(s) s->lookahead += n; /* Initialize the hash value now that we have some input: */ - if (s->lookahead >= MIN_MATCH) { - s->ins_h = s->window[s->strstart]; - UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]); + if (s->lookahead + s->insert >= MIN_MATCH) { + uInt str = s->strstart - s->insert; + s->ins_h = s->window[str]; + UPDATE_HASH(s, s->ins_h, s->window[str + 1]); #if MIN_MATCH != 3 Call UPDATE_HASH() MIN_MATCH-3 more times #endif + while (s->insert) { + UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); +#ifndef FASTEST + s->prev[str & s->w_mask] = s->head[s->ins_h]; +#endif + s->head[s->ins_h] = (Pos)str; + str++; + s->insert--; + if (s->lookahead + s->insert < MIN_MATCH) + break; + } } /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage, * but this is not important since only literal bytes will be emitted. */ } while (s->lookahead < MIN_LOOKAHEAD && s->strm->avail_in != 0); + + /* If the WIN_INIT bytes after the end of the current data have never been + * written, then zero those bytes in order to avoid memory check reports of + * the use of uninitialized (or uninitialised as Julian writes) bytes by + * the longest match routines. Update the high water mark for the next + * time through here. WIN_INIT is set to MAX_MATCH since the longest match + * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead. + */ + if (s->high_water < s->window_size) { + ulg curr = s->strstart + (ulg)(s->lookahead); + ulg init; + + if (s->high_water < curr) { + /* Previous high water mark below current data -- zero WIN_INIT + * bytes or up to end of window, whichever is less. + */ + init = s->window_size - curr; + if (init > WIN_INIT) + init = WIN_INIT; + zmemzero(s->window + curr, (unsigned)init); + s->high_water = curr + init; + } + else if (s->high_water < (ulg)curr + WIN_INIT) { + /* High water mark at or above current data, but below current data + * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up + * to end of window, whichever is less. + */ + init = (ulg)curr + WIN_INIT - s->high_water; + if (init > s->window_size - s->high_water) + init = s->window_size - s->high_water; + zmemzero(s->window + s->high_water, (unsigned)init); + s->high_water += init; + } + } + + Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD, + "not enough room for search"); } /* =========================================================================== * Flush the current block, with given end-of-file flag. * IN assertion: strstart is set to the end of the current match. */ -#define FLUSH_BLOCK_ONLY(s, eof) { \ +#define FLUSH_BLOCK_ONLY(s, last) { \ _tr_flush_block(s, (s->block_start >= 0L ? \ (charf *)&s->window[(unsigned)s->block_start] : \ (charf *)Z_NULL), \ (ulg)((long)s->strstart - s->block_start), \ - (eof)); \ + (last)); \ s->block_start = s->strstart; \ flush_pending(s->strm); \ Tracev((stderr,"[FLUSH]")); \ } /* Same but force premature exit if necessary. */ -#define FLUSH_BLOCK(s, eof) { \ - FLUSH_BLOCK_ONLY(s, eof); \ - if (s->strm->avail_out == 0) return (eof) ? finish_started : need_more; \ +#define FLUSH_BLOCK(s, last) { \ + FLUSH_BLOCK_ONLY(s, last); \ + if (s->strm->avail_out == 0) return (last) ? finish_started : need_more; \ } +/* Maximum stored block length in deflate format (not including header). */ +#define MAX_STORED 65535 + +/* Minimum of a and b. */ +#define MIN(a, b) ((a) > (b) ? (b) : (a)) + /* =========================================================================== * Copy without compression as much as possible from the input stream, return * the current block state. - * This function does not insert new strings in the dictionary since - * uncompressible data is probably not useful. This function is used - * only for the level=0 compression option. - * NOTE: this function should be optimized to avoid extra copying from - * window to pending_buf. + * + * In case deflateParams() is used to later switch to a non-zero compression + * level, s->matches (otherwise unused when storing) keeps track of the number + * of hash table slides to perform. If s->matches is 1, then one hash table + * slide will be done when switching. If s->matches is 2, the maximum value + * allowed here, then the hash table will be cleared, since two or more slides + * is the same as a clear. + * + * deflate_stored() is written to minimize the number of times an input byte is + * copied. It is most efficient with large input and output buffers, which + * maximizes the opportunites to have a single copy from next_in to next_out. */ local block_state deflate_stored(s, flush) deflate_state *s; int flush; { - /* Stored blocks are limited to 0xffff bytes, pending_buf is limited - * to pending_buf_size, and each stored block has a 5 byte header: + /* Smallest worthy block size when not flushing or finishing. By default + * this is 32K. This can be as small as 507 bytes for memLevel == 1. For + * large input and output buffers, the stored block size will be larger. */ - ulg max_block_size = 0xffff; - ulg max_start; - - if (max_block_size > s->pending_buf_size - 5) { - max_block_size = s->pending_buf_size - 5; - } + unsigned min_block = MIN(s->pending_buf_size - 5, s->w_size); - /* Copy as much as possible from input to output: */ - for (;;) { - /* Fill the window as much as possible: */ - if (s->lookahead <= 1) { - - Assert(s->strstart < s->w_size+MAX_DIST(s) || - s->block_start >= (long)s->w_size, "slide too late"); + /* Copy as many min_block or larger stored blocks directly to next_out as + * possible. If flushing, copy the remaining available input to next_out as + * stored blocks, if there is enough space. + */ + unsigned len, left, have, last = 0; + unsigned used = s->strm->avail_in; + do { + /* Set len to the maximum size block that we can copy directly with the + * available input data and output space. Set left to how much of that + * would be copied from what's left in the window. + */ + len = MAX_STORED; /* maximum deflate stored block length */ + have = (s->bi_valid + 42) >> 3; /* number of header bytes */ + if (s->strm->avail_out < have) /* need room for header */ + break; + /* maximum stored block length that will fit in avail_out: */ + have = s->strm->avail_out - have; + left = s->strstart - s->block_start; /* bytes left in window */ + if (len > (ulg)left + s->strm->avail_in) + len = left + s->strm->avail_in; /* limit len to the input */ + if (len > have) + len = have; /* limit len to the output */ + + /* If the stored block would be less than min_block in length, or if + * unable to copy all of the available input when flushing, then try + * copying to the window and the pending buffer instead. Also don't + * write an empty block when flushing -- deflate() does that. + */ + if (len < min_block && ((len == 0 && flush != Z_FINISH) || + flush == Z_NO_FLUSH || + len != left + s->strm->avail_in)) + break; - fill_window(s); - if (s->lookahead == 0 && flush == Z_NO_FLUSH) return need_more; + /* Make a dummy stored block in pending to get the header bytes, + * including any pending bits. This also updates the debugging counts. + */ + last = flush == Z_FINISH && len == left + s->strm->avail_in ? 1 : 0; + _tr_stored_block(s, (char *)0, 0L, last); + + /* Replace the lengths in the dummy stored block with len. */ + s->pending_buf[s->pending - 4] = len; + s->pending_buf[s->pending - 3] = len >> 8; + s->pending_buf[s->pending - 2] = ~len; + s->pending_buf[s->pending - 1] = ~len >> 8; + + /* Write the stored block header bytes. */ + flush_pending(s->strm); + +#ifdef ZLIB_DEBUG + /* Update debugging counts for the data about to be copied. */ + s->compressed_len += len << 3; + s->bits_sent += len << 3; +#endif - if (s->lookahead == 0) break; /* flush the current block */ + /* Copy uncompressed bytes from the window to next_out. */ + if (left) { + if (left > len) + left = len; + zmemcpy(s->strm->next_out, s->window + s->block_start, left); + s->strm->next_out += left; + s->strm->avail_out -= left; + s->strm->total_out += left; + s->block_start += left; + len -= left; } - Assert(s->block_start >= 0L, "block gone"); - - s->strstart += s->lookahead; - s->lookahead = 0; - - /* Emit a stored block if pending_buf will be full: */ - max_start = s->block_start + max_block_size; - if (s->strstart == 0 || (ulg)s->strstart >= max_start) { - /* strstart == 0 is possible when wraparound on 16-bit machine */ - s->lookahead = (uInt)(s->strstart - max_start); - s->strstart = (uInt)max_start; - FLUSH_BLOCK(s, 0); + + /* Copy uncompressed bytes directly from next_in to next_out, updating + * the check value. + */ + if (len) { + read_buf(s->strm, s->strm->next_out, len); + s->strm->next_out += len; + s->strm->avail_out -= len; + s->strm->total_out += len; } - /* Flush if we may have to slide, otherwise block_start may become - * negative and the data will be gone: + } while (last == 0); + + /* Update the sliding window with the last s->w_size bytes of the copied + * data, or append all of the copied data to the existing window if less + * than s->w_size bytes were copied. Also update the number of bytes to + * insert in the hash tables, in the event that deflateParams() switches to + * a non-zero compression level. + */ + used -= s->strm->avail_in; /* number of input bytes directly copied */ + if (used) { + /* If any input was used, then no unused input remains in the window, + * therefore s->block_start == s->strstart. */ - if (s->strstart - (uInt)s->block_start >= MAX_DIST(s)) { - FLUSH_BLOCK(s, 0); + if (used >= s->w_size) { /* supplant the previous history */ + s->matches = 2; /* clear hash */ + zmemcpy(s->window, s->strm->next_in - s->w_size, s->w_size); + s->strstart = s->w_size; + } + else { + if (s->window_size - s->strstart <= used) { + /* Slide the window down. */ + s->strstart -= s->w_size; + zmemcpy(s->window, s->window + s->w_size, s->strstart); + if (s->matches < 2) + s->matches++; /* add a pending slide_hash() */ + } + zmemcpy(s->window + s->strstart, s->strm->next_in - used, used); + s->strstart += used; } + s->block_start = s->strstart; + s->insert += MIN(used, s->w_size - s->insert); + } + if (s->high_water < s->strstart) + s->high_water = s->strstart; + + /* If the last block was written to next_out, then done. */ + if (last) + return finish_done; + + /* If flushing and all input has been consumed, then done. */ + if (flush != Z_NO_FLUSH && flush != Z_FINISH && + s->strm->avail_in == 0 && (long)s->strstart == s->block_start) + return block_done; + + /* Fill the window with any remaining input. */ + have = s->window_size - s->strstart - 1; + if (s->strm->avail_in > have && s->block_start >= (long)s->w_size) { + /* Slide the window down. */ + s->block_start -= s->w_size; + s->strstart -= s->w_size; + zmemcpy(s->window, s->window + s->w_size, s->strstart); + if (s->matches < 2) + s->matches++; /* add a pending slide_hash() */ + have += s->w_size; /* more space now */ + } + if (have > s->strm->avail_in) + have = s->strm->avail_in; + if (have) { + read_buf(s->strm, s->window + s->strstart, have); + s->strstart += have; + } + if (s->high_water < s->strstart) + s->high_water = s->strstart; + + /* There was not enough avail_out to write a complete worthy or flushed + * stored block to next_out. Write a stored block to pending instead, if we + * have enough input for a worthy block, or if flushing and there is enough + * room for the remaining input as a stored block in the pending buffer. + */ + have = (s->bi_valid + 42) >> 3; /* number of header bytes */ + /* maximum stored block length that will fit in pending: */ + have = MIN(s->pending_buf_size - have, MAX_STORED); + min_block = MIN(have, s->w_size); + left = s->strstart - s->block_start; + if (left >= min_block || + ((left || flush == Z_FINISH) && flush != Z_NO_FLUSH && + s->strm->avail_in == 0 && left <= have)) { + len = MIN(left, have); + last = flush == Z_FINISH && s->strm->avail_in == 0 && + len == left ? 1 : 0; + _tr_stored_block(s, (charf *)s->window + s->block_start, len, last); + s->block_start += len; + flush_pending(s->strm); } - FLUSH_BLOCK(s, flush == Z_FINISH); - return flush == Z_FINISH ? finish_done : block_done; + + /* We've done all we can with the available input and output. */ + return last ? finish_started : need_more; } /* =========================================================================== @@ -1449,7 +1825,7 @@ local block_state deflate_fast(s, flush) deflate_state *s; int flush; { - IPos hash_head = NIL; /* head of the hash chain */ + IPos hash_head; /* head of the hash chain */ int bflush; /* set if current block must be flushed */ for (;;) { @@ -1469,6 +1845,7 @@ local block_state deflate_fast(s, flush) /* Insert the string window[strstart .. strstart+2] in the * dictionary, and set hash_head to the head of the hash chain: */ + hash_head = NIL; if (s->lookahead >= MIN_MATCH) { INSERT_STRING(s, s->strstart, hash_head); } @@ -1481,19 +1858,8 @@ local block_state deflate_fast(s, flush) * of window index 0 (in particular we have to avoid a match * of the string with itself at the start of the input file). */ -#ifdef FASTEST - if ((s->strategy != Z_HUFFMAN_ONLY && s->strategy != Z_RLE) || - (s->strategy == Z_RLE && s->strstart - hash_head == 1)) { - s->match_length = longest_match_fast (s, hash_head); - } -#else - if (s->strategy != Z_HUFFMAN_ONLY && s->strategy != Z_RLE) { - s->match_length = longest_match (s, hash_head); - } else if (s->strategy == Z_RLE && s->strstart - hash_head == 1) { - s->match_length = longest_match_fast (s, hash_head); - } -#endif - /* longest_match() or longest_match_fast() sets match_start */ + s->match_length = longest_match (s, hash_head); + /* longest_match() sets match_start */ } if (s->match_length >= MIN_MATCH) { check_match(s, s->strstart, s->match_start, s->match_length); @@ -1541,8 +1907,14 @@ local block_state deflate_fast(s, flush) } if (bflush) FLUSH_BLOCK(s, 0); } - FLUSH_BLOCK(s, flush == Z_FINISH); - return flush == Z_FINISH ? finish_done : block_done; + s->insert = s->strstart < MIN_MATCH-1 ? s->strstart : MIN_MATCH-1; + if (flush == Z_FINISH) { + FLUSH_BLOCK(s, 1); + return finish_done; + } + if (s->last_lit) + FLUSH_BLOCK(s, 0); + return block_done; } #ifndef FASTEST @@ -1555,7 +1927,7 @@ local block_state deflate_slow(s, flush) deflate_state *s; int flush; { - IPos hash_head = NIL; /* head of hash chain */ + IPos hash_head; /* head of hash chain */ int bflush; /* set if current block must be flushed */ /* Process the input block. */ @@ -1576,6 +1948,7 @@ local block_state deflate_slow(s, flush) /* Insert the string window[strstart .. strstart+2] in the * dictionary, and set hash_head to the head of the hash chain: */ + hash_head = NIL; if (s->lookahead >= MIN_MATCH) { INSERT_STRING(s, s->strstart, hash_head); } @@ -1591,12 +1964,8 @@ local block_state deflate_slow(s, flush) * of window index 0 (in particular we have to avoid a match * of the string with itself at the start of the input file). */ - if (s->strategy != Z_HUFFMAN_ONLY && s->strategy != Z_RLE) { - s->match_length = longest_match (s, hash_head); - } else if (s->strategy == Z_RLE && s->strstart - hash_head == 1) { - s->match_length = longest_match_fast (s, hash_head); - } - /* longest_match() or longest_match_fast() sets match_start */ + s->match_length = longest_match (s, hash_head); + /* longest_match() sets match_start */ if (s->match_length <= 5 && (s->strategy == Z_FILTERED #if TOO_FAR <= 32767 @@ -1669,12 +2038,17 @@ local block_state deflate_slow(s, flush) _tr_tally_lit(s, s->window[s->strstart-1], bflush); s->match_available = 0; } - FLUSH_BLOCK(s, flush == Z_FINISH); - return flush == Z_FINISH ? finish_done : block_done; + s->insert = s->strstart < MIN_MATCH-1 ? s->strstart : MIN_MATCH-1; + if (flush == Z_FINISH) { + FLUSH_BLOCK(s, 1); + return finish_done; + } + if (s->last_lit) + FLUSH_BLOCK(s, 0); + return block_done; } #endif /* FASTEST */ -#if 0 /* =========================================================================== * For Z_RLE, simply look for runs of bytes, generate matches only of distance * one. Do not maintain a hash table. (It will be regenerated if this run of @@ -1684,43 +2058,52 @@ local block_state deflate_rle(s, flush) deflate_state *s; int flush; { - int bflush; /* set if current block must be flushed */ - uInt run; /* length of run */ - uInt max; /* maximum length of run */ - uInt prev; /* byte at distance one to match */ - Bytef *scan; /* scan for end of run */ + int bflush; /* set if current block must be flushed */ + uInt prev; /* byte at distance one to match */ + Bytef *scan, *strend; /* scan goes up to strend for length of run */ for (;;) { /* Make sure that we always have enough lookahead, except * at the end of the input file. We need MAX_MATCH bytes - * for the longest encodable run. + * for the longest run, plus one for the unrolled loop. */ - if (s->lookahead < MAX_MATCH) { + if (s->lookahead <= MAX_MATCH) { fill_window(s); - if (s->lookahead < MAX_MATCH && flush == Z_NO_FLUSH) { + if (s->lookahead <= MAX_MATCH && flush == Z_NO_FLUSH) { return need_more; } if (s->lookahead == 0) break; /* flush the current block */ } /* See how many times the previous byte repeats */ - run = 0; - if (s->strstart > 0) { /* if there is a previous byte, that is */ - max = s->lookahead < MAX_MATCH ? s->lookahead : MAX_MATCH; + s->match_length = 0; + if (s->lookahead >= MIN_MATCH && s->strstart > 0) { scan = s->window + s->strstart - 1; - prev = *scan++; - do { - if (*scan++ != prev) - break; - } while (++run < max); + prev = *scan; + if (prev == *++scan && prev == *++scan && prev == *++scan) { + strend = s->window + s->strstart + MAX_MATCH; + do { + } while (prev == *++scan && prev == *++scan && + prev == *++scan && prev == *++scan && + prev == *++scan && prev == *++scan && + prev == *++scan && prev == *++scan && + scan < strend); + s->match_length = MAX_MATCH - (uInt)(strend - scan); + if (s->match_length > s->lookahead) + s->match_length = s->lookahead; + } + Assert(scan <= s->window+(uInt)(s->window_size-1), "wild scan"); } /* Emit match if have run of MIN_MATCH or longer, else emit literal */ - if (run >= MIN_MATCH) { - check_match(s, s->strstart, s->strstart - 1, run); - _tr_tally_dist(s, 1, run - MIN_MATCH, bflush); - s->lookahead -= run; - s->strstart += run; + if (s->match_length >= MIN_MATCH) { + check_match(s, s->strstart, s->strstart - 1, s->match_length); + + _tr_tally_dist(s, 1, s->match_length - MIN_MATCH, bflush); + + s->lookahead -= s->match_length; + s->strstart += s->match_length; + s->match_length = 0; } else { /* No match, output a literal byte */ Tracevv((stderr,"%c", s->window[s->strstart])); @@ -1730,7 +2113,51 @@ local block_state deflate_rle(s, flush) } if (bflush) FLUSH_BLOCK(s, 0); } - FLUSH_BLOCK(s, flush == Z_FINISH); - return flush == Z_FINISH ? finish_done : block_done; + s->insert = 0; + if (flush == Z_FINISH) { + FLUSH_BLOCK(s, 1); + return finish_done; + } + if (s->last_lit) + FLUSH_BLOCK(s, 0); + return block_done; +} + +/* =========================================================================== + * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table. + * (It will be regenerated if this run of deflate switches away from Huffman.) + */ +local block_state deflate_huff(s, flush) + deflate_state *s; + int flush; +{ + int bflush; /* set if current block must be flushed */ + + for (;;) { + /* Make sure that we have a literal to write. */ + if (s->lookahead == 0) { + fill_window(s); + if (s->lookahead == 0) { + if (flush == Z_NO_FLUSH) + return need_more; + break; /* flush the current block */ + } + } + + /* Output a literal byte */ + s->match_length = 0; + Tracevv((stderr,"%c", s->window[s->strstart])); + _tr_tally_lit (s, s->window[s->strstart], bflush); + s->lookahead--; + s->strstart++; + if (bflush) FLUSH_BLOCK(s, 0); + } + s->insert = 0; + if (flush == Z_FINISH) { + FLUSH_BLOCK(s, 1); + return finish_done; + } + if (s->last_lit) + FLUSH_BLOCK(s, 0); + return block_done; } -#endif diff --git a/zlib/deflate.h b/zlib/deflate.h index 05a5ab3a2c12..23ecdd312bc0 100644 --- a/zlib/deflate.h +++ b/zlib/deflate.h @@ -1,5 +1,5 @@ /* deflate.h -- internal compression state - * Copyright (C) 1995-2004 Jean-loup Gailly + * Copyright (C) 1995-2016 Jean-loup Gailly * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -48,13 +48,19 @@ #define MAX_BITS 15 /* All codes must not exceed MAX_BITS bits */ -#define INIT_STATE 42 -#define EXTRA_STATE 69 -#define NAME_STATE 73 -#define COMMENT_STATE 91 -#define HCRC_STATE 103 -#define BUSY_STATE 113 -#define FINISH_STATE 666 +#define Buf_size 16 +/* size of bit buffer in bi_buf */ + +#define INIT_STATE 42 /* zlib header -> BUSY_STATE */ +#ifdef GZIP +# define GZIP_STATE 57 /* gzip header -> BUSY_STATE | EXTRA_STATE */ +#endif +#define EXTRA_STATE 69 /* gzip extra block -> NAME_STATE */ +#define NAME_STATE 73 /* gzip file name -> COMMENT_STATE */ +#define COMMENT_STATE 91 /* gzip comment -> HCRC_STATE */ +#define HCRC_STATE 103 /* gzip header CRC -> BUSY_STATE */ +#define BUSY_STATE 113 /* deflate -> FINISH_STATE */ +#define FINISH_STATE 666 /* stream complete */ /* Stream status */ @@ -80,7 +86,7 @@ typedef struct static_tree_desc_s static_tree_desc; typedef struct tree_desc_s { ct_data *dyn_tree; /* the dynamic tree */ int max_code; /* largest code with non zero frequency */ - static_tree_desc *stat_desc; /* the corresponding static tree */ + const static_tree_desc *stat_desc; /* the corresponding static tree */ } FAR tree_desc; typedef ush Pos; @@ -97,11 +103,11 @@ typedef struct internal_state { Bytef *pending_buf; /* output still pending */ ulg pending_buf_size; /* size of pending_buf */ Bytef *pending_out; /* next pending byte to output to the stream */ - uInt pending; /* nb of bytes in the pending buffer */ + ulg pending; /* nb of bytes in the pending buffer */ int wrap; /* bit 0 true for zlib, bit 1 true for gzip */ gz_headerp gzhead; /* gzip header information to write */ - uInt gzindex; /* where in extra, name, or comment */ - Byte method; /* STORED (for zip only) or DEFLATED */ + ulg gzindex; /* where in extra, name, or comment */ + Byte method; /* can only be DEFLATED */ int last_flush; /* value of flush param for previous deflate call */ /* used by deflate.c: */ @@ -188,7 +194,7 @@ typedef struct internal_state { int nice_match; /* Stop searching when current match exceeds this */ /* used by trees.c: */ - /* Didn't use ct_data typedef below to supress compiler warning */ + /* Didn't use ct_data typedef below to suppress compiler warning */ struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */ struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */ struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */ @@ -244,9 +250,9 @@ typedef struct internal_state { ulg opt_len; /* bit length of current block with optimal trees */ ulg static_len; /* bit length of current block with static trees */ uInt matches; /* number of string matches in current block */ - int last_eob_len; /* bit length of EOB code for last block */ + uInt insert; /* bytes at end of window left to insert */ -#ifdef DEBUG +#ifdef ZLIB_DEBUG ulg compressed_len; /* total bit length of compressed file mod 2^32 */ ulg bits_sent; /* bit length of compressed data sent mod 2^32 */ #endif @@ -260,12 +266,19 @@ typedef struct internal_state { * are always zero. */ + ulg high_water; + /* High water mark offset in window for initialized bytes -- bytes above + * this are set to zero in order to avoid memory check warnings when + * longest match routines access bytes past the input. This is then + * updated to the new high water mark. + */ + } FAR deflate_state; /* Output a byte on the stream. * IN assertion: there is enough room in pending_buf. */ -#define put_byte(s, c) {s->pending_buf[s->pending++] = (c);} +#define put_byte(s, c) {s->pending_buf[s->pending++] = (Bytef)(c);} #define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1) @@ -278,14 +291,19 @@ typedef struct internal_state { * distances are limited to MAX_DIST instead of WSIZE. */ +#define WIN_INIT MAX_MATCH +/* Number of bytes after end of data in window to initialize in order to avoid + memory checker errors from longest match routines */ + /* in trees.c */ -void _tr_init OF((deflate_state *s)); -int _tr_tally OF((deflate_state *s, unsigned dist, unsigned lc)); -void _tr_flush_block OF((deflate_state *s, charf *buf, ulg stored_len, - int eof)); -void _tr_align OF((deflate_state *s)); -void _tr_stored_block OF((deflate_state *s, charf *buf, ulg stored_len, - int eof)); +void ZLIB_INTERNAL _tr_init OF((deflate_state *s)); +int ZLIB_INTERNAL _tr_tally OF((deflate_state *s, unsigned dist, unsigned lc)); +void ZLIB_INTERNAL _tr_flush_block OF((deflate_state *s, charf *buf, + ulg stored_len, int last)); +void ZLIB_INTERNAL _tr_flush_bits OF((deflate_state *s)); +void ZLIB_INTERNAL _tr_align OF((deflate_state *s)); +void ZLIB_INTERNAL _tr_stored_block OF((deflate_state *s, charf *buf, + ulg stored_len, int last)); #define d_code(dist) \ ((dist) < 256 ? _dist_code[dist] : _dist_code[256+((dist)>>7)]) @@ -294,15 +312,15 @@ void _tr_stored_block OF((deflate_state *s, charf *buf, ulg stored_len, * used. */ -#ifndef DEBUG +#ifndef ZLIB_DEBUG /* Inline versions of _tr_tally for speed: */ #if defined(GEN_TREES_H) || !defined(STDC) - extern uch _length_code[]; - extern uch _dist_code[]; + extern uch ZLIB_INTERNAL _length_code[]; + extern uch ZLIB_INTERNAL _dist_code[]; #else - extern const uch _length_code[]; - extern const uch _dist_code[]; + extern const uch ZLIB_INTERNAL _length_code[]; + extern const uch ZLIB_INTERNAL _dist_code[]; #endif # define _tr_tally_lit(s, c, flush) \ @@ -313,8 +331,8 @@ void _tr_stored_block OF((deflate_state *s, charf *buf, ulg stored_len, flush = (s->last_lit == s->lit_bufsize-1); \ } # define _tr_tally_dist(s, distance, length, flush) \ - { uch len = (length); \ - ush dist = (distance); \ + { uch len = (uch)(length); \ + ush dist = (ush)(distance); \ s->d_buf[s->last_lit] = dist; \ s->l_buf[s->last_lit++] = len; \ dist--; \ diff --git a/zlib/gzclose.c b/zlib/gzclose.c new file mode 100644 index 000000000000..caeb99a3177f --- /dev/null +++ b/zlib/gzclose.c @@ -0,0 +1,25 @@ +/* gzclose.c -- zlib gzclose() function + * Copyright (C) 2004, 2010 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +#include "gzguts.h" + +/* gzclose() is in a separate file so that it is linked in only if it is used. + That way the other gzclose functions can be used instead to avoid linking in + unneeded compression or decompression routines. */ +int ZEXPORT gzclose(file) + gzFile file; +{ +#ifndef NO_GZCOMPRESS + gz_statep state; + + if (file == NULL) + return Z_STREAM_ERROR; + state = (gz_statep)file; + + return state->mode == GZ_READ ? gzclose_r(file) : gzclose_w(file); +#else + return gzclose_r(file); +#endif +} diff --git a/zlib/gzguts.h b/zlib/gzguts.h new file mode 100644 index 000000000000..990a4d251493 --- /dev/null +++ b/zlib/gzguts.h @@ -0,0 +1,218 @@ +/* gzguts.h -- zlib internal header definitions for gz* operations + * Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013, 2016 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +#ifdef _LARGEFILE64_SOURCE +# ifndef _LARGEFILE_SOURCE +# define _LARGEFILE_SOURCE 1 +# endif +# ifdef _FILE_OFFSET_BITS +# undef _FILE_OFFSET_BITS +# endif +#endif + +#ifdef HAVE_HIDDEN +# define ZLIB_INTERNAL __attribute__((visibility ("hidden"))) +#else +# define ZLIB_INTERNAL +#endif + +#include +#include "zlib.h" +#ifdef STDC +# include +# include +# include +#endif + +#ifndef _POSIX_SOURCE +# define _POSIX_SOURCE +#endif +#include + +#ifdef _WIN32 +# include +#endif + +#if defined(__TURBOC__) || defined(_MSC_VER) || defined(_WIN32) +# include +#endif + +#if defined(_WIN32) || defined(__CYGWIN__) +# define WIDECHAR +#endif + +#ifdef WINAPI_FAMILY +# define open _open +# define read _read +# define write _write +# define close _close +#endif + +#ifdef NO_DEFLATE /* for compatibility with old definition */ +# define NO_GZCOMPRESS +#endif + +#if defined(STDC99) || (defined(__TURBOC__) && __TURBOC__ >= 0x550) +# ifndef HAVE_VSNPRINTF +# define HAVE_VSNPRINTF +# endif +#endif + +#if defined(__CYGWIN__) +# ifndef HAVE_VSNPRINTF +# define HAVE_VSNPRINTF +# endif +#endif + +#if defined(MSDOS) && defined(__BORLANDC__) && (BORLANDC > 0x410) +# ifndef HAVE_VSNPRINTF +# define HAVE_VSNPRINTF +# endif +#endif + +#ifndef HAVE_VSNPRINTF +# ifdef MSDOS +/* vsnprintf may exist on some MS-DOS compilers (DJGPP?), + but for now we just assume it doesn't. */ +# define NO_vsnprintf +# endif +# ifdef __TURBOC__ +# define NO_vsnprintf +# endif +# ifdef WIN32 +/* In Win32, vsnprintf is available as the "non-ANSI" _vsnprintf. */ +# if !defined(vsnprintf) && !defined(NO_vsnprintf) +# if !defined(_MSC_VER) || ( defined(_MSC_VER) && _MSC_VER < 1500 ) +# define vsnprintf _vsnprintf +# endif +# endif +# endif +# ifdef __SASC +# define NO_vsnprintf +# endif +# ifdef VMS +# define NO_vsnprintf +# endif +# ifdef __OS400__ +# define NO_vsnprintf +# endif +# ifdef __MVS__ +# define NO_vsnprintf +# endif +#endif + +/* unlike snprintf (which is required in C99), _snprintf does not guarantee + null termination of the result -- however this is only used in gzlib.c where + the result is assured to fit in the space provided */ +#if defined(_MSC_VER) && _MSC_VER < 1900 +# define snprintf _snprintf +#endif + +#ifndef local +# define local static +#endif +/* since "static" is used to mean two completely different things in C, we + define "local" for the non-static meaning of "static", for readability + (compile with -Dlocal if your debugger can't find static symbols) */ + +/* gz* functions always use library allocation functions */ +#ifndef STDC + extern voidp malloc OF((uInt size)); + extern void free OF((voidpf ptr)); +#endif + +/* get errno and strerror definition */ +#if defined UNDER_CE +# include +# define zstrerror() gz_strwinerror((DWORD)GetLastError()) +#else +# ifndef NO_STRERROR +# include +# define zstrerror() strerror(errno) +# else +# define zstrerror() "stdio error (consult errno)" +# endif +#endif + +/* provide prototypes for these when building zlib without LFS */ +#if !defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0 + ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *)); + ZEXTERN z_off64_t ZEXPORT gzseek64 OF((gzFile, z_off64_t, int)); + ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzFile)); + ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile)); +#endif + +/* default memLevel */ +#if MAX_MEM_LEVEL >= 8 +# define DEF_MEM_LEVEL 8 +#else +# define DEF_MEM_LEVEL MAX_MEM_LEVEL +#endif + +/* default i/o buffer size -- double this for output when reading (this and + twice this must be able to fit in an unsigned type) */ +#define GZBUFSIZE 8192 + +/* gzip modes, also provide a little integrity check on the passed structure */ +#define GZ_NONE 0 +#define GZ_READ 7247 +#define GZ_WRITE 31153 +#define GZ_APPEND 1 /* mode set to GZ_WRITE after the file is opened */ + +/* values for gz_state how */ +#define LOOK 0 /* look for a gzip header */ +#define COPY 1 /* copy input directly */ +#define GZIP 2 /* decompress a gzip stream */ + +/* internal gzip file state data structure */ +typedef struct { + /* exposed contents for gzgetc() macro */ + struct gzFile_s x; /* "x" for exposed */ + /* x.have: number of bytes available at x.next */ + /* x.next: next output data to deliver or write */ + /* x.pos: current position in uncompressed data */ + /* used for both reading and writing */ + int mode; /* see gzip modes above */ + int fd; /* file descriptor */ + char *path; /* path or fd for error messages */ + unsigned size; /* buffer size, zero if not allocated yet */ + unsigned want; /* requested buffer size, default is GZBUFSIZE */ + unsigned char *in; /* input buffer (double-sized when writing) */ + unsigned char *out; /* output buffer (double-sized when reading) */ + int direct; /* 0 if processing gzip, 1 if transparent */ + /* just for reading */ + int how; /* 0: get header, 1: copy, 2: decompress */ + z_off64_t start; /* where the gzip data started, for rewinding */ + int eof; /* true if end of input file reached */ + int past; /* true if read requested past end */ + /* just for writing */ + int level; /* compression level */ + int strategy; /* compression strategy */ + /* seek request */ + z_off64_t skip; /* amount to skip (already rewound if backwards) */ + int seek; /* true if seek request pending */ + /* error information */ + int err; /* error code */ + char *msg; /* error message */ + /* zlib inflate or deflate stream */ + z_stream strm; /* stream structure in-place (not a pointer) */ +} gz_state; +typedef gz_state FAR *gz_statep; + +/* shared functions */ +void ZLIB_INTERNAL gz_error OF((gz_statep, int, const char *)); +#if defined UNDER_CE +char ZLIB_INTERNAL *gz_strwinerror OF((DWORD error)); +#endif + +/* GT_OFF(x), where x is an unsigned value, is true if x > maximum z_off64_t + value -- needed when comparing unsigned to z_off64_t, which is signed + (possible z_off64_t types off_t, off64_t, and long are all signed) */ +#ifdef INT_MAX +# define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > INT_MAX) +#else +unsigned ZLIB_INTERNAL gz_intmax OF((void)); +# define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > gz_intmax()) +#endif diff --git a/zlib/gzio.c b/zlib/gzio.c deleted file mode 100644 index ed4e77ca7e9d..000000000000 --- a/zlib/gzio.c +++ /dev/null @@ -1,1031 +0,0 @@ -/* gzio.c -- IO on .gz files - * Copyright (C) 1995-2005 Jean-loup Gailly. - * For conditions of distribution and use, see copyright notice in zlib.h - * - * Compile this file with -DNO_GZCOMPRESS to avoid the compression code. - */ - -/* @(#) $Id$ */ - -/* Need to be included "early" to control other headers */ -#ifdef HAVE_CONFIG_H -#include -#endif - -#include - -#include "zutil.h" - -#ifdef NO_DEFLATE /* for compatibility with old definition */ -# define NO_GZCOMPRESS -#endif - -#ifndef NO_DUMMY_DECL -struct internal_state {int dummy;}; /* for buggy compilers */ -#endif - -#ifndef Z_BUFSIZE -# ifdef MAXSEG_64K -# define Z_BUFSIZE 4096 /* minimize memory usage for 16-bit DOS */ -# else -# define Z_BUFSIZE 16384 -# endif -#endif -#ifndef Z_PRINTF_BUFSIZE -# define Z_PRINTF_BUFSIZE 4096 -#endif - -#ifdef __MVS__ -# pragma map (fdopen , "\174\174FDOPEN") - FILE *fdopen(int, const char *); -#endif - -#ifndef STDC -extern voidp malloc OF((uInt size)); -extern void free OF((voidpf ptr)); -#endif - -#define ALLOC(size) malloc(size) -#define TRYFREE(p) {if (p) free(p);} - -static int const gz_magic[2] = {0x1f, 0x8b}; /* gzip magic header */ - -/* gzip flag byte */ -#define ASCII_FLAG 0x01 /* bit 0 set: file probably ascii text */ -#define HEAD_CRC 0x02 /* bit 1 set: header CRC present */ -#define EXTRA_FIELD 0x04 /* bit 2 set: extra field present */ -#define ORIG_NAME 0x08 /* bit 3 set: original file name present */ -#define COMMENT 0x10 /* bit 4 set: file comment present */ -#define RESERVED 0xE0 /* bits 5..7: reserved */ - -typedef struct gz_stream { - z_stream stream; - int z_err; /* error code for last stream operation */ - int z_eof; /* set if end of input file */ - FILE *file; /* .gz file */ - Byte *inbuf; /* input buffer */ - Byte *outbuf; /* output buffer */ - uLong crc; /* crc32 of uncompressed data */ - char *msg; /* error message */ - char *path; /* path name for debugging only */ - int transparent; /* 1 if input file is not a .gz file */ - char mode; /* 'w' or 'r' */ - z_off_t start; /* start of compressed data in file (header skipped) */ - z_off_t in; /* bytes into deflate or inflate */ - z_off_t out; /* bytes out of deflate or inflate */ - int back; /* one character push-back */ - int last; /* true if push-back is last character */ -} gz_stream; - - -local gzFile gz_open OF((const char *path, const char *mode, int fd)); -local int do_flush OF((gzFile file, int flush)); -local int get_byte OF((gz_stream *s)); -local void check_header OF((gz_stream *s)); -local int destroy OF((gz_stream *s)); -local void putLong OF((FILE *file, uLong x)); -local uLong getLong OF((gz_stream *s)); - -/* =========================================================================== - Opens a gzip (.gz) file for reading or writing. The mode parameter - is as in fopen ("rb" or "wb"). The file is given either by file descriptor - or path name (if fd == -1). - gz_open returns NULL if the file could not be opened or if there was - insufficient memory to allocate the (de)compression state; errno - can be checked to distinguish the two cases (if errno is zero, the - zlib error is Z_MEM_ERROR). -*/ -local gzFile gz_open (path, mode, fd) - const char *path; - const char *mode; - int fd; -{ - int err; - int level = Z_DEFAULT_COMPRESSION; /* compression level */ - int strategy = Z_DEFAULT_STRATEGY; /* compression strategy */ - char *p = (char*)mode; - gz_stream *s; - char fmode[80]; /* copy of mode, without the compression level */ - char *m = fmode; - - if (!path || !mode) return Z_NULL; - - s = (gz_stream *)ALLOC(sizeof(gz_stream)); - if (!s) return Z_NULL; - - s->stream.zalloc = (alloc_func)0; - s->stream.zfree = (free_func)0; - s->stream.opaque = (voidpf)0; - s->stream.next_in = s->inbuf = Z_NULL; - s->stream.next_out = s->outbuf = Z_NULL; - s->stream.avail_in = s->stream.avail_out = 0; - s->file = NULL; - s->z_err = Z_OK; - s->z_eof = 0; - s->in = 0; - s->out = 0; - s->back = EOF; - s->crc = crc32(0L, Z_NULL, 0); - s->msg = NULL; - s->transparent = 0; - - s->path = (char*)ALLOC(strlen(path)+1); - if (s->path == NULL) { - return destroy(s), (gzFile)Z_NULL; - } - strcpy(s->path, path); /* do this early for debugging */ - - s->mode = '\0'; - do { - if (*p == 'r') s->mode = 'r'; - if (*p == 'w' || *p == 'a') s->mode = 'w'; - if (*p >= '0' && *p <= '9') { - level = *p - '0'; - } else if (*p == 'f') { - strategy = Z_FILTERED; - } else if (*p == 'h') { - strategy = Z_HUFFMAN_ONLY; - } else if (*p == 'R') { - strategy = Z_RLE; - } else { - *m++ = *p; /* copy the mode */ - } - } while (*p++ && m != fmode + sizeof(fmode)); - if (s->mode == '\0') return destroy(s), (gzFile)Z_NULL; - - if (s->mode == 'w') { -#ifdef NO_GZCOMPRESS - err = Z_STREAM_ERROR; -#else - err = deflateInit2(&(s->stream), level, - Z_DEFLATED, -MAX_WBITS, DEF_MEM_LEVEL, strategy); - /* windowBits is passed < 0 to suppress zlib header */ - - s->stream.next_out = s->outbuf = (Byte*)ALLOC(Z_BUFSIZE); -#endif - if (err != Z_OK || s->outbuf == Z_NULL) { - return destroy(s), (gzFile)Z_NULL; - } - } else { - s->stream.next_in = s->inbuf = (Byte*)ALLOC(Z_BUFSIZE); - - err = inflateInit2(&(s->stream), -MAX_WBITS); - /* windowBits is passed < 0 to tell that there is no zlib header. - * Note that in this case inflate *requires* an extra "dummy" byte - * after the compressed stream in order to complete decompression and - * return Z_STREAM_END. Here the gzip CRC32 ensures that 4 bytes are - * present after the compressed stream. - */ - if (err != Z_OK || s->inbuf == Z_NULL) { - return destroy(s), (gzFile)Z_NULL; - } - } - s->stream.avail_out = Z_BUFSIZE; - - errno = 0; - s->file = fd < 0 ? F_OPEN(path, fmode) : (FILE*)fdopen(fd, fmode); - - if (s->file == NULL) { - return destroy(s), (gzFile)Z_NULL; - } - if (s->mode == 'w') { - /* Write a very simple .gz header: - */ - fprintf(s->file, "%c%c%c%c%c%c%c%c%c%c", gz_magic[0], gz_magic[1], - Z_DEFLATED, 0 /*flags*/, 0,0,0,0 /*time*/, 0 /*xflags*/, OS_CODE); - s->start = 10L; - /* We use 10L instead of ftell(s->file) to because ftell causes an - * fflush on some systems. This version of the library doesn't use - * start anyway in write mode, so this initialization is not - * necessary. - */ - } else { - check_header(s); /* skip the .gz header */ - s->start = ftell(s->file) - s->stream.avail_in; - } - - return (gzFile)s; -} - -/* =========================================================================== - Opens a gzip (.gz) file for reading or writing. -*/ -gzFile ZEXPORT gzopen (path, mode) - const char *path; - const char *mode; -{ - return gz_open (path, mode, -1); -} - -/* =========================================================================== - Associate a gzFile with the file descriptor fd. fd is not dup'ed here - to mimic the behavio(u)r of fdopen. -*/ -gzFile ZEXPORT gzdopen (fd, mode) - int fd; - const char *mode; -{ - char name[46]; /* allow for up to 128-bit integers */ - - if (fd < 0) return (gzFile)Z_NULL; - sprintf(name, "", fd); /* for debugging */ - - return gz_open (name, mode, fd); -} - -/* =========================================================================== - * Update the compression level and strategy - */ -int ZEXPORT gzsetparams (file, level, strategy) - gzFile file; - int level; - int strategy; -{ - gz_stream *s = (gz_stream*)file; - - if (s == NULL || s->mode != 'w') return Z_STREAM_ERROR; - - /* Make room to allow flushing */ - if (s->stream.avail_out == 0) { - - s->stream.next_out = s->outbuf; - if (fwrite(s->outbuf, 1, Z_BUFSIZE, s->file) != Z_BUFSIZE) { - s->z_err = Z_ERRNO; - } - s->stream.avail_out = Z_BUFSIZE; - } - - return deflateParams (&(s->stream), level, strategy); -} - -/* =========================================================================== - Read a byte from a gz_stream; update next_in and avail_in. Return EOF - for end of file. - IN assertion: the stream s has been sucessfully opened for reading. -*/ -local int get_byte(s) - gz_stream *s; -{ - if (s->z_eof) return EOF; - if (s->stream.avail_in == 0) { - errno = 0; - s->stream.avail_in = (uInt)fread(s->inbuf, 1, Z_BUFSIZE, s->file); - if (s->stream.avail_in == 0) { - s->z_eof = 1; - if (ferror(s->file)) s->z_err = Z_ERRNO; - return EOF; - } - s->stream.next_in = s->inbuf; - } - s->stream.avail_in--; - return *(s->stream.next_in)++; -} - -/* =========================================================================== - Check the gzip header of a gz_stream opened for reading. Set the stream - mode to transparent if the gzip magic header is not present; set s->err - to Z_DATA_ERROR if the magic header is present but the rest of the header - is incorrect. - IN assertion: the stream s has already been created sucessfully; - s->stream.avail_in is zero for the first time, but may be non-zero - for concatenated .gz files. -*/ -local void check_header(s) - gz_stream *s; -{ - int method; /* method byte */ - int flags; /* flags byte */ - uInt len; - int c; - - /* Assure two bytes in the buffer so we can peek ahead -- handle case - where first byte of header is at the end of the buffer after the last - gzip segment */ - len = s->stream.avail_in; - if (len < 2) { - if (len) s->inbuf[0] = s->stream.next_in[0]; - errno = 0; - len = (uInt)fread(s->inbuf + len, 1, Z_BUFSIZE >> len, s->file); - if (len == 0 && ferror(s->file)) s->z_err = Z_ERRNO; - s->stream.avail_in += len; - s->stream.next_in = s->inbuf; - if (s->stream.avail_in < 2) { - s->transparent = s->stream.avail_in; - return; - } - } - - /* Peek ahead to check the gzip magic header */ - if (s->stream.next_in[0] != gz_magic[0] || - s->stream.next_in[1] != gz_magic[1]) { - s->transparent = 1; - return; - } - s->stream.avail_in -= 2; - s->stream.next_in += 2; - - /* Check the rest of the gzip header */ - method = get_byte(s); - flags = get_byte(s); - if (method != Z_DEFLATED || (flags & RESERVED) != 0) { - s->z_err = Z_DATA_ERROR; - return; - } - - /* Discard time, xflags and OS code: */ - for (len = 0; len < 6; len++) (void)get_byte(s); - - if ((flags & EXTRA_FIELD) != 0) { /* skip the extra field */ - len = (uInt)get_byte(s); - len += ((uInt)get_byte(s))<<8; - /* len is garbage if EOF but the loop below will quit anyway */ - while (len-- != 0 && get_byte(s) != EOF) ; - } - if ((flags & ORIG_NAME) != 0) { /* skip the original file name */ - while ((c = get_byte(s)) != 0 && c != EOF) ; - } - if ((flags & COMMENT) != 0) { /* skip the .gz file comment */ - while ((c = get_byte(s)) != 0 && c != EOF) ; - } - if ((flags & HEAD_CRC) != 0) { /* skip the header crc */ - for (len = 0; len < 2; len++) (void)get_byte(s); - } - s->z_err = s->z_eof ? Z_DATA_ERROR : Z_OK; -} - - /* =========================================================================== - * Cleanup then free the given gz_stream. Return a zlib error code. - Try freeing in the reverse order of allocations. - */ -local int destroy (s) - gz_stream *s; -{ - int err = Z_OK; - - if (!s) return Z_STREAM_ERROR; - - TRYFREE(s->msg); - - if (s->stream.state != NULL) { - if (s->mode == 'w') { -#ifdef NO_GZCOMPRESS - err = Z_STREAM_ERROR; -#else - err = deflateEnd(&(s->stream)); -#endif - } else if (s->mode == 'r') { - err = inflateEnd(&(s->stream)); - } - } - if (s->file != NULL && fclose(s->file)) { -#ifdef ESPIPE - if (errno != ESPIPE) /* fclose is broken for pipes in HP/UX */ -#endif - err = Z_ERRNO; - } - if (s->z_err < 0) err = s->z_err; - - TRYFREE(s->inbuf); - TRYFREE(s->outbuf); - TRYFREE(s->path); - TRYFREE(s); - return err; -} - -/* =========================================================================== - Reads the given number of uncompressed bytes from the compressed file. - gzread returns the number of bytes actually read (0 for end of file). -*/ -int ZEXPORT gzread (file, buf, len) - gzFile file; - voidp buf; - unsigned len; -{ - gz_stream *s = (gz_stream*)file; - Bytef *start = (Bytef*)buf; /* starting point for crc computation */ - Byte *next_out; /* == stream.next_out but not forced far (for MSDOS) */ - - if (s == NULL || s->mode != 'r') return Z_STREAM_ERROR; - - if (s->z_err == Z_DATA_ERROR || s->z_err == Z_ERRNO) return -1; - if (s->z_err == Z_STREAM_END) return 0; /* EOF */ - - next_out = (Byte*)buf; - s->stream.next_out = (Bytef*)buf; - s->stream.avail_out = len; - - if (s->stream.avail_out && s->back != EOF) { - *next_out++ = s->back; - s->stream.next_out++; - s->stream.avail_out--; - s->back = EOF; - s->out++; - start++; - if (s->last) { - s->z_err = Z_STREAM_END; - return 1; - } - } - - while (s->stream.avail_out != 0) { - - if (s->transparent) { - /* Copy first the lookahead bytes: */ - uInt n = s->stream.avail_in; - if (n > s->stream.avail_out) n = s->stream.avail_out; - if (n > 0) { - zmemcpy(s->stream.next_out, s->stream.next_in, n); - next_out += n; - s->stream.next_out = next_out; - s->stream.next_in += n; - s->stream.avail_out -= n; - s->stream.avail_in -= n; - } - if (s->stream.avail_out > 0) { - s->stream.avail_out -= - (uInt)fread(next_out, 1, s->stream.avail_out, s->file); - } - len -= s->stream.avail_out; - s->in += len; - s->out += len; - if (len == 0) s->z_eof = 1; - return (int)len; - } - if (s->stream.avail_in == 0 && !s->z_eof) { - - errno = 0; - s->stream.avail_in = (uInt)fread(s->inbuf, 1, Z_BUFSIZE, s->file); - if (s->stream.avail_in == 0) { - s->z_eof = 1; - if (ferror(s->file)) { - s->z_err = Z_ERRNO; - break; - } - } - s->stream.next_in = s->inbuf; - } - s->in += s->stream.avail_in; - s->out += s->stream.avail_out; - s->z_err = inflate(&(s->stream), Z_NO_FLUSH); - s->in -= s->stream.avail_in; - s->out -= s->stream.avail_out; - - if (s->z_err == Z_STREAM_END) { - /* Check CRC and original size */ - s->crc = crc32(s->crc, start, (uInt)(s->stream.next_out - start)); - start = s->stream.next_out; - - if (getLong(s) != s->crc) { - s->z_err = Z_DATA_ERROR; - } else { - (void)getLong(s); - /* The uncompressed length returned by above getlong() may be - * different from s->out in case of concatenated .gz files. - * Check for such files: - */ - check_header(s); - if (s->z_err == Z_OK) { - inflateReset(&(s->stream)); - s->crc = crc32(0L, Z_NULL, 0); - } - } - } - if (s->z_err != Z_OK || s->z_eof) break; - } - s->crc = crc32(s->crc, start, (uInt)(s->stream.next_out - start)); - - if (len == s->stream.avail_out && - (s->z_err == Z_DATA_ERROR || s->z_err == Z_ERRNO)) - return -1; - return (int)(len - s->stream.avail_out); -} - - -/* =========================================================================== - Reads one byte from the compressed file. gzgetc returns this byte - or -1 in case of end of file or error. -*/ -int ZEXPORT gzgetc(file) - gzFile file; -{ - unsigned char c; - - return gzread(file, &c, 1) == 1 ? c : -1; -} - - -/* =========================================================================== - Push one byte back onto the stream. -*/ -int ZEXPORT gzungetc(c, file) - int c; - gzFile file; -{ - gz_stream *s = (gz_stream*)file; - - if (s == NULL || s->mode != 'r' || c == EOF || s->back != EOF) return EOF; - s->back = c; - s->out--; - s->last = (s->z_err == Z_STREAM_END); - if (s->last) s->z_err = Z_OK; - s->z_eof = 0; - return c; -} - - -/* =========================================================================== - Reads bytes from the compressed file until len-1 characters are - read, or a newline character is read and transferred to buf, or an - end-of-file condition is encountered. The string is then terminated - with a null character. - gzgets returns buf, or Z_NULL in case of error. - - The current implementation is not optimized at all. -*/ -char * ZEXPORT gzgets(file, buf, len) - gzFile file; - char *buf; - int len; -{ - char *b = buf; - if (buf == Z_NULL || len <= 0) return Z_NULL; - - while (--len > 0 && gzread(file, buf, 1) == 1 && *buf++ != '\n') ; - *buf = '\0'; - return b == buf && len > 0 ? Z_NULL : b; -} - - -#ifndef NO_GZCOMPRESS -/* =========================================================================== - Writes the given number of uncompressed bytes into the compressed file. - gzwrite returns the number of bytes actually written (0 in case of error). -*/ -int ZEXPORT gzwrite (file, buf, len) - gzFile file; - voidpc buf; - unsigned len; -{ - gz_stream *s = (gz_stream*)file; - - if (s == NULL || s->mode != 'w') return Z_STREAM_ERROR; - - s->stream.next_in = (Bytef*)buf; - s->stream.avail_in = len; - - while (s->stream.avail_in != 0) { - - if (s->stream.avail_out == 0) { - - s->stream.next_out = s->outbuf; - if (fwrite(s->outbuf, 1, Z_BUFSIZE, s->file) != Z_BUFSIZE) { - s->z_err = Z_ERRNO; - break; - } - s->stream.avail_out = Z_BUFSIZE; - } - s->in += s->stream.avail_in; - s->out += s->stream.avail_out; - s->z_err = deflate(&(s->stream), Z_NO_FLUSH); - s->in -= s->stream.avail_in; - s->out -= s->stream.avail_out; - if (s->z_err != Z_OK) break; - } - s->crc = crc32(s->crc, (const Bytef *)buf, len); - - return (int)(len - s->stream.avail_in); -} - - -/* =========================================================================== - Converts, formats, and writes the args to the compressed file under - control of the format string, as in fprintf. gzprintf returns the number of - uncompressed bytes actually written (0 in case of error). -*/ -#ifdef STDC -#include - -int ZEXPORTVA gzprintf (gzFile file, const char *format, /* args */ ...) -{ - char buf[Z_PRINTF_BUFSIZE]; - va_list va; - int len; - - buf[sizeof(buf) - 1] = 0; - va_start(va, format); -#ifdef NO_vsnprintf -# ifdef HAS_vsprintf_void - (void)vsprintf(buf, format, va); - va_end(va); - for (len = 0; len < sizeof(buf); len++) - if (buf[len] == 0) break; -# else - len = vsprintf(buf, format, va); - va_end(va); -# endif -#else -# ifdef HAS_vsnprintf_void - (void)vsnprintf(buf, sizeof(buf), format, va); - va_end(va); - len = strlen(buf); -# else - len = vsnprintf(buf, sizeof(buf), format, va); - va_end(va); -# endif -#endif - if (len <= 0 || len >= (int)sizeof(buf) || buf[sizeof(buf) - 1] != 0) - return 0; - return gzwrite(file, buf, (unsigned)len); -} -#else /* not ANSI C */ - -int ZEXPORTVA gzprintf (file, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, - a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) - gzFile file; - const char *format; - int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, - a11, a12, a13, a14, a15, a16, a17, a18, a19, a20; -{ - char buf[Z_PRINTF_BUFSIZE]; - int len; - - buf[sizeof(buf) - 1] = 0; -#ifdef NO_snprintf -# ifdef HAS_sprintf_void - sprintf(buf, format, a1, a2, a3, a4, a5, a6, a7, a8, - a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20); - for (len = 0; len < sizeof(buf); len++) - if (buf[len] == 0) break; -# else - len = sprintf(buf, format, a1, a2, a3, a4, a5, a6, a7, a8, - a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20); -# endif -#else -# ifdef HAS_snprintf_void - snprintf(buf, sizeof(buf), format, a1, a2, a3, a4, a5, a6, a7, a8, - a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20); - len = strlen(buf); -# else - len = snprintf(buf, sizeof(buf), format, a1, a2, a3, a4, a5, a6, a7, a8, - a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20); -# endif -#endif - if (len <= 0 || len >= sizeof(buf) || buf[sizeof(buf) - 1] != 0) - return 0; - return gzwrite(file, buf, len); -} -#endif - -/* =========================================================================== - Writes c, converted to an unsigned char, into the compressed file. - gzputc returns the value that was written, or -1 in case of error. -*/ -int ZEXPORT gzputc(file, c) - gzFile file; - int c; -{ - unsigned char cc = (unsigned char) c; /* required for big endian systems */ - - return gzwrite(file, &cc, 1) == 1 ? (int)cc : -1; -} - - -/* =========================================================================== - Writes the given null-terminated string to the compressed file, excluding - the terminating null character. - gzputs returns the number of characters written, or -1 in case of error. -*/ -int ZEXPORT gzputs(file, s) - gzFile file; - const char *s; -{ - return gzwrite(file, (char*)s, (unsigned)strlen(s)); -} - - -/* =========================================================================== - Flushes all pending output into the compressed file. The parameter - flush is as in the deflate() function. -*/ -local int do_flush (file, flush) - gzFile file; - int flush; -{ - uInt len; - int done = 0; - gz_stream *s = (gz_stream*)file; - - if (s == NULL || s->mode != 'w') return Z_STREAM_ERROR; - - s->stream.avail_in = 0; /* should be zero already anyway */ - - for (;;) { - len = Z_BUFSIZE - s->stream.avail_out; - - if (len != 0) { - if ((uInt)fwrite(s->outbuf, 1, len, s->file) != len) { - s->z_err = Z_ERRNO; - return Z_ERRNO; - } - s->stream.next_out = s->outbuf; - s->stream.avail_out = Z_BUFSIZE; - } - if (done) break; - s->out += s->stream.avail_out; - s->z_err = deflate(&(s->stream), flush); - s->out -= s->stream.avail_out; - - /* Ignore the second of two consecutive flushes: */ - if (len == 0 && s->z_err == Z_BUF_ERROR) s->z_err = Z_OK; - - /* deflate has finished flushing only when it hasn't used up - * all the available space in the output buffer: - */ - done = (s->stream.avail_out != 0 || s->z_err == Z_STREAM_END); - - if (s->z_err != Z_OK && s->z_err != Z_STREAM_END) break; - } - return s->z_err == Z_STREAM_END ? Z_OK : s->z_err; -} - -int ZEXPORT gzflush (file, flush) - gzFile file; - int flush; -{ - gz_stream *s = (gz_stream*)file; - int err = do_flush (file, flush); - - if (err) return err; - fflush(s->file); - return s->z_err == Z_STREAM_END ? Z_OK : s->z_err; -} -#endif /* NO_GZCOMPRESS */ - -/* =========================================================================== - Sets the starting position for the next gzread or gzwrite on the given - compressed file. The offset represents a number of bytes in the - gzseek returns the resulting offset location as measured in bytes from - the beginning of the uncompressed stream, or -1 in case of error. - SEEK_END is not implemented, returns error. - In this version of the library, gzseek can be extremely slow. -*/ -z_off_t ZEXPORT gzseek (file, offset, whence) - gzFile file; - z_off_t offset; - int whence; -{ - gz_stream *s = (gz_stream*)file; - - if (s == NULL || whence == SEEK_END || - s->z_err == Z_ERRNO || s->z_err == Z_DATA_ERROR) { - return -1L; - } - - if (s->mode == 'w') { -#ifdef NO_GZCOMPRESS - return -1L; -#else - if (whence == SEEK_SET) { - offset -= s->in; - } - if (offset < 0) return -1L; - - /* At this point, offset is the number of zero bytes to write. */ - if (s->inbuf == Z_NULL) { - s->inbuf = (Byte*)ALLOC(Z_BUFSIZE); /* for seeking */ - if (s->inbuf == Z_NULL) return -1L; - zmemzero(s->inbuf, Z_BUFSIZE); - } - while (offset > 0) { - uInt size = Z_BUFSIZE; - if (offset < Z_BUFSIZE) size = (uInt)offset; - - size = gzwrite(file, s->inbuf, size); - if (size == 0) return -1L; - - offset -= size; - } - return s->in; -#endif - } - /* Rest of function is for reading only */ - - /* compute absolute position */ - if (whence == SEEK_CUR) { - offset += s->out; - } - if (offset < 0) return -1L; - - if (s->transparent) { - /* map to fseek */ - s->back = EOF; - s->stream.avail_in = 0; - s->stream.next_in = s->inbuf; - if (fseek(s->file, offset, SEEK_SET) < 0) return -1L; - - s->in = s->out = offset; - return offset; - } - - /* For a negative seek, rewind and use positive seek */ - if (offset >= s->out) { - offset -= s->out; - } else if (gzrewind(file) < 0) { - return -1L; - } - /* offset is now the number of bytes to skip. */ - - if (offset != 0 && s->outbuf == Z_NULL) { - s->outbuf = (Byte*)ALLOC(Z_BUFSIZE); - if (s->outbuf == Z_NULL) return -1L; - } - if (offset && s->back != EOF) { - s->back = EOF; - s->out++; - offset--; - if (s->last) s->z_err = Z_STREAM_END; - } - while (offset > 0) { - int size = Z_BUFSIZE; - if (offset < Z_BUFSIZE) size = (int)offset; - - size = gzread(file, s->outbuf, (uInt)size); - if (size <= 0) return -1L; - offset -= size; - } - return s->out; -} - -/* =========================================================================== - Rewinds input file. -*/ -int ZEXPORT gzrewind (file) - gzFile file; -{ - gz_stream *s = (gz_stream*)file; - - if (s == NULL || s->mode != 'r') return -1; - - s->z_err = Z_OK; - s->z_eof = 0; - s->back = EOF; - s->stream.avail_in = 0; - s->stream.next_in = s->inbuf; - s->crc = crc32(0L, Z_NULL, 0); - if (!s->transparent) (void)inflateReset(&s->stream); - s->in = 0; - s->out = 0; - return fseek(s->file, s->start, SEEK_SET); -} - -/* =========================================================================== - Returns the starting position for the next gzread or gzwrite on the - given compressed file. This position represents a number of bytes in the - uncompressed data stream. -*/ -z_off_t ZEXPORT gztell (file) - gzFile file; -{ - return gzseek(file, 0L, SEEK_CUR); -} - -/* =========================================================================== - Returns 1 when EOF has previously been detected reading the given - input stream, otherwise zero. -*/ -int ZEXPORT gzeof (file) - gzFile file; -{ - gz_stream *s = (gz_stream*)file; - - /* With concatenated compressed files that can have embedded - * crc trailers, z_eof is no longer the only/best indicator of EOF - * on a gz_stream. Handle end-of-stream error explicitly here. - */ - if (s == NULL || s->mode != 'r') return 0; - if (s->z_eof) return 1; - return s->z_err == Z_STREAM_END; -} - -/* =========================================================================== - Returns 1 if reading and doing so transparently, otherwise zero. -*/ -int ZEXPORT gzdirect (file) - gzFile file; -{ - gz_stream *s = (gz_stream*)file; - - if (s == NULL || s->mode != 'r') return 0; - return s->transparent; -} - -/* =========================================================================== - Outputs a long in LSB order to the given file -*/ -local void putLong (file, x) - FILE *file; - uLong x; -{ - int n; - for (n = 0; n < 4; n++) { - fputc((int)(x & 0xff), file); - x >>= 8; - } -} - -/* =========================================================================== - Reads a long in LSB order from the given gz_stream. Sets z_err in case - of error. -*/ -local uLong getLong (s) - gz_stream *s; -{ - uLong x = (uLong)get_byte(s); - int c; - - x += ((uLong)get_byte(s))<<8; - x += ((uLong)get_byte(s))<<16; - c = get_byte(s); - if (c == EOF) s->z_err = Z_DATA_ERROR; - x += ((uLong)c)<<24; - return x; -} - -/* =========================================================================== - Flushes all pending output if necessary, closes the compressed file - and deallocates all the (de)compression state. -*/ -int ZEXPORT gzclose (file) - gzFile file; -{ - gz_stream *s = (gz_stream*)file; - - if (s == NULL) return Z_STREAM_ERROR; - - if (s->mode == 'w') { -#ifdef NO_GZCOMPRESS - return Z_STREAM_ERROR; -#else - if (do_flush (file, Z_FINISH) != Z_OK) - return destroy((gz_stream*)file); - - putLong (s->file, s->crc); - putLong (s->file, (uLong)(s->in & 0xffffffff)); -#endif - } - return destroy((gz_stream*)file); -} - -#ifdef STDC -# define zstrerror(errnum) strerror(errnum) -#else -# define zstrerror(errnum) "" -#endif - -/* =========================================================================== - Returns the error message for the last error which occurred on the - given compressed file. errnum is set to zlib error number. If an - error occurred in the file system and not in the compression library, - errnum is set to Z_ERRNO and the application may consult errno - to get the exact error code. -*/ -const char * ZEXPORT gzerror (file, errnum) - gzFile file; - int *errnum; -{ - char *m; - gz_stream *s = (gz_stream*)file; - - if (s == NULL) { - *errnum = Z_STREAM_ERROR; - return (const char*)ERR_MSG(Z_STREAM_ERROR); - } - *errnum = s->z_err; - if (*errnum == Z_OK) return (const char*)""; - - m = (char*)(*errnum == Z_ERRNO ? zstrerror(errno) : s->stream.msg); - - if (m == NULL || *m == '\0') m = (char*)ERR_MSG(s->z_err); - - TRYFREE(s->msg); - s->msg = (char*)ALLOC(strlen(s->path) + strlen(m) + 3); - if (s->msg == Z_NULL) return (const char*)ERR_MSG(Z_MEM_ERROR); - strcpy(s->msg, s->path); - strcat(s->msg, ": "); - strcat(s->msg, m); - return (const char*)s->msg; -} - -/* =========================================================================== - Clear the error and end-of-file flags, and do the same for the real file. -*/ -void ZEXPORT gzclearerr (file) - gzFile file; -{ - gz_stream *s = (gz_stream*)file; - - if (s == NULL) return; - if (s->z_err != Z_STREAM_END) s->z_err = Z_OK; - s->z_eof = 0; - clearerr(s->file); -} diff --git a/zlib/gzlib.c b/zlib/gzlib.c new file mode 100644 index 000000000000..4105e6aff925 --- /dev/null +++ b/zlib/gzlib.c @@ -0,0 +1,637 @@ +/* gzlib.c -- zlib functions common to reading and writing gzip files + * Copyright (C) 2004-2017 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +#include "gzguts.h" + +#if defined(_WIN32) && !defined(__BORLANDC__) && !defined(__MINGW32__) +# define LSEEK _lseeki64 +#else +#if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0 +# define LSEEK lseek64 +#else +# define LSEEK lseek +#endif +#endif + +/* Local functions */ +local void gz_reset OF((gz_statep)); +local gzFile gz_open OF((const void *, int, const char *)); + +#if defined UNDER_CE + +/* Map the Windows error number in ERROR to a locale-dependent error message + string and return a pointer to it. Typically, the values for ERROR come + from GetLastError. + + The string pointed to shall not be modified by the application, but may be + overwritten by a subsequent call to gz_strwinerror + + The gz_strwinerror function does not change the current setting of + GetLastError. */ +char ZLIB_INTERNAL *gz_strwinerror (error) + DWORD error; +{ + static char buf[1024]; + + wchar_t *msgbuf; + DWORD lasterr = GetLastError(); + DWORD chars = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM + | FORMAT_MESSAGE_ALLOCATE_BUFFER, + NULL, + error, + 0, /* Default language */ + (LPVOID)&msgbuf, + 0, + NULL); + if (chars != 0) { + /* If there is an \r\n appended, zap it. */ + if (chars >= 2 + && msgbuf[chars - 2] == '\r' && msgbuf[chars - 1] == '\n') { + chars -= 2; + msgbuf[chars] = 0; + } + + if (chars > sizeof (buf) - 1) { + chars = sizeof (buf) - 1; + msgbuf[chars] = 0; + } + + wcstombs(buf, msgbuf, chars + 1); + LocalFree(msgbuf); + } + else { + sprintf(buf, "unknown win32 error (%ld)", error); + } + + SetLastError(lasterr); + return buf; +} + +#endif /* UNDER_CE */ + +/* Reset gzip file state */ +local void gz_reset(state) + gz_statep state; +{ + state->x.have = 0; /* no output data available */ + if (state->mode == GZ_READ) { /* for reading ... */ + state->eof = 0; /* not at end of file */ + state->past = 0; /* have not read past end yet */ + state->how = LOOK; /* look for gzip header */ + } + state->seek = 0; /* no seek request pending */ + gz_error(state, Z_OK, NULL); /* clear error */ + state->x.pos = 0; /* no uncompressed data yet */ + state->strm.avail_in = 0; /* no input data yet */ +} + +/* Open a gzip file either by name or file descriptor. */ +local gzFile gz_open(path, fd, mode) + const void *path; + int fd; + const char *mode; +{ + gz_statep state; + z_size_t len; + int oflag; +#ifdef O_CLOEXEC + int cloexec = 0; +#endif +#ifdef O_EXCL + int exclusive = 0; +#endif + + /* check input */ + if (path == NULL) + return NULL; + + /* allocate gzFile structure to return */ + state = (gz_statep)malloc(sizeof(gz_state)); + if (state == NULL) + return NULL; + state->size = 0; /* no buffers allocated yet */ + state->want = GZBUFSIZE; /* requested buffer size */ + state->msg = NULL; /* no error message yet */ + + /* interpret mode */ + state->mode = GZ_NONE; + state->level = Z_DEFAULT_COMPRESSION; + state->strategy = Z_DEFAULT_STRATEGY; + state->direct = 0; + while (*mode) { + if (*mode >= '0' && *mode <= '9') + state->level = *mode - '0'; + else + switch (*mode) { + case 'r': + state->mode = GZ_READ; + break; +#ifndef NO_GZCOMPRESS + case 'w': + state->mode = GZ_WRITE; + break; + case 'a': + state->mode = GZ_APPEND; + break; +#endif + case '+': /* can't read and write at the same time */ + free(state); + return NULL; + case 'b': /* ignore -- will request binary anyway */ + break; +#ifdef O_CLOEXEC + case 'e': + cloexec = 1; + break; +#endif +#ifdef O_EXCL + case 'x': + exclusive = 1; + break; +#endif + case 'f': + state->strategy = Z_FILTERED; + break; + case 'h': + state->strategy = Z_HUFFMAN_ONLY; + break; + case 'R': + state->strategy = Z_RLE; + break; + case 'F': + state->strategy = Z_FIXED; + break; + case 'T': + state->direct = 1; + break; + default: /* could consider as an error, but just ignore */ + ; + } + mode++; + } + + /* must provide an "r", "w", or "a" */ + if (state->mode == GZ_NONE) { + free(state); + return NULL; + } + + /* can't force transparent read */ + if (state->mode == GZ_READ) { + if (state->direct) { + free(state); + return NULL; + } + state->direct = 1; /* for empty file */ + } + + /* save the path name for error messages */ +#ifdef WIDECHAR + if (fd == -2) { + len = wcstombs(NULL, path, 0); + if (len == (z_size_t)-1) + len = 0; + } + else +#endif + len = strlen((const char *)path); + state->path = (char *)malloc(len + 1); + if (state->path == NULL) { + free(state); + return NULL; + } +#ifdef WIDECHAR + if (fd == -2) + if (len) + wcstombs(state->path, path, len + 1); + else + *(state->path) = 0; + else +#endif +#if !defined(NO_snprintf) && !defined(NO_vsnprintf) + (void)snprintf(state->path, len + 1, "%s", (const char *)path); +#else + strcpy(state->path, path); +#endif + + /* compute the flags for open() */ + oflag = +#ifdef O_LARGEFILE + O_LARGEFILE | +#endif +#ifdef O_BINARY + O_BINARY | +#endif +#ifdef O_CLOEXEC + (cloexec ? O_CLOEXEC : 0) | +#endif + (state->mode == GZ_READ ? + O_RDONLY : + (O_WRONLY | O_CREAT | +#ifdef O_EXCL + (exclusive ? O_EXCL : 0) | +#endif + (state->mode == GZ_WRITE ? + O_TRUNC : + O_APPEND))); + + /* open the file with the appropriate flags (or just use fd) */ + state->fd = fd > -1 ? fd : ( +#ifdef WIDECHAR + fd == -2 ? _wopen(path, oflag, 0666) : +#endif + open((const char *)path, oflag, 0666)); + if (state->fd == -1) { + free(state->path); + free(state); + return NULL; + } + if (state->mode == GZ_APPEND) { + LSEEK(state->fd, 0, SEEK_END); /* so gzoffset() is correct */ + state->mode = GZ_WRITE; /* simplify later checks */ + } + + /* save the current position for rewinding (only if reading) */ + if (state->mode == GZ_READ) { + state->start = LSEEK(state->fd, 0, SEEK_CUR); + if (state->start == -1) state->start = 0; + } + + /* initialize stream */ + gz_reset(state); + + /* return stream */ + return (gzFile)state; +} + +/* -- see zlib.h -- */ +gzFile ZEXPORT gzopen(path, mode) + const char *path; + const char *mode; +{ + return gz_open(path, -1, mode); +} + +/* -- see zlib.h -- */ +gzFile ZEXPORT gzopen64(path, mode) + const char *path; + const char *mode; +{ + return gz_open(path, -1, mode); +} + +/* -- see zlib.h -- */ +gzFile ZEXPORT gzdopen(fd, mode) + int fd; + const char *mode; +{ + char *path; /* identifier for error messages */ + gzFile gz; + + if (fd == -1 || (path = (char *)malloc(7 + 3 * sizeof(int))) == NULL) + return NULL; +#if !defined(NO_snprintf) && !defined(NO_vsnprintf) + (void)snprintf(path, 7 + 3 * sizeof(int), "", fd); +#else + sprintf(path, "", fd); /* for debugging */ +#endif + gz = gz_open(path, fd, mode); + free(path); + return gz; +} + +/* -- see zlib.h -- */ +#ifdef WIDECHAR +gzFile ZEXPORT gzopen_w(path, mode) + const wchar_t *path; + const char *mode; +{ + return gz_open(path, -2, mode); +} +#endif + +/* -- see zlib.h -- */ +int ZEXPORT gzbuffer(file, size) + gzFile file; + unsigned size; +{ + gz_statep state; + + /* get internal structure and check integrity */ + if (file == NULL) + return -1; + state = (gz_statep)file; + if (state->mode != GZ_READ && state->mode != GZ_WRITE) + return -1; + + /* make sure we haven't already allocated memory */ + if (state->size != 0) + return -1; + + /* check and set requested size */ + if ((size << 1) < size) + return -1; /* need to be able to double it */ + if (size < 2) + size = 2; /* need two bytes to check magic header */ + state->want = size; + return 0; +} + +/* -- see zlib.h -- */ +int ZEXPORT gzrewind(file) + gzFile file; +{ + gz_statep state; + + /* get internal structure */ + if (file == NULL) + return -1; + state = (gz_statep)file; + + /* check that we're reading and that there's no error */ + if (state->mode != GZ_READ || + (state->err != Z_OK && state->err != Z_BUF_ERROR)) + return -1; + + /* back up and start over */ + if (LSEEK(state->fd, state->start, SEEK_SET) == -1) + return -1; + gz_reset(state); + return 0; +} + +/* -- see zlib.h -- */ +z_off64_t ZEXPORT gzseek64(file, offset, whence) + gzFile file; + z_off64_t offset; + int whence; +{ + unsigned n; + z_off64_t ret; + gz_statep state; + + /* get internal structure and check integrity */ + if (file == NULL) + return -1; + state = (gz_statep)file; + if (state->mode != GZ_READ && state->mode != GZ_WRITE) + return -1; + + /* check that there's no error */ + if (state->err != Z_OK && state->err != Z_BUF_ERROR) + return -1; + + /* can only seek from start or relative to current position */ + if (whence != SEEK_SET && whence != SEEK_CUR) + return -1; + + /* normalize offset to a SEEK_CUR specification */ + if (whence == SEEK_SET) + offset -= state->x.pos; + else if (state->seek) + offset += state->skip; + state->seek = 0; + + /* if within raw area while reading, just go there */ + if (state->mode == GZ_READ && state->how == COPY && + state->x.pos + offset >= 0) { + ret = LSEEK(state->fd, offset - state->x.have, SEEK_CUR); + if (ret == -1) + return -1; + state->x.have = 0; + state->eof = 0; + state->past = 0; + state->seek = 0; + gz_error(state, Z_OK, NULL); + state->strm.avail_in = 0; + state->x.pos += offset; + return state->x.pos; + } + + /* calculate skip amount, rewinding if needed for back seek when reading */ + if (offset < 0) { + if (state->mode != GZ_READ) /* writing -- can't go backwards */ + return -1; + offset += state->x.pos; + if (offset < 0) /* before start of file! */ + return -1; + if (gzrewind(file) == -1) /* rewind, then skip to offset */ + return -1; + } + + /* if reading, skip what's in output buffer (one less gzgetc() check) */ + if (state->mode == GZ_READ) { + n = GT_OFF(state->x.have) || (z_off64_t)state->x.have > offset ? + (unsigned)offset : state->x.have; + state->x.have -= n; + state->x.next += n; + state->x.pos += n; + offset -= n; + } + + /* request skip (if not zero) */ + if (offset) { + state->seek = 1; + state->skip = offset; + } + return state->x.pos + offset; +} + +/* -- see zlib.h -- */ +z_off_t ZEXPORT gzseek(file, offset, whence) + gzFile file; + z_off_t offset; + int whence; +{ + z_off64_t ret; + + ret = gzseek64(file, (z_off64_t)offset, whence); + return ret == (z_off_t)ret ? (z_off_t)ret : -1; +} + +/* -- see zlib.h -- */ +z_off64_t ZEXPORT gztell64(file) + gzFile file; +{ + gz_statep state; + + /* get internal structure and check integrity */ + if (file == NULL) + return -1; + state = (gz_statep)file; + if (state->mode != GZ_READ && state->mode != GZ_WRITE) + return -1; + + /* return position */ + return state->x.pos + (state->seek ? state->skip : 0); +} + +/* -- see zlib.h -- */ +z_off_t ZEXPORT gztell(file) + gzFile file; +{ + z_off64_t ret; + + ret = gztell64(file); + return ret == (z_off_t)ret ? (z_off_t)ret : -1; +} + +/* -- see zlib.h -- */ +z_off64_t ZEXPORT gzoffset64(file) + gzFile file; +{ + z_off64_t offset; + gz_statep state; + + /* get internal structure and check integrity */ + if (file == NULL) + return -1; + state = (gz_statep)file; + if (state->mode != GZ_READ && state->mode != GZ_WRITE) + return -1; + + /* compute and return effective offset in file */ + offset = LSEEK(state->fd, 0, SEEK_CUR); + if (offset == -1) + return -1; + if (state->mode == GZ_READ) /* reading */ + offset -= state->strm.avail_in; /* don't count buffered input */ + return offset; +} + +/* -- see zlib.h -- */ +z_off_t ZEXPORT gzoffset(file) + gzFile file; +{ + z_off64_t ret; + + ret = gzoffset64(file); + return ret == (z_off_t)ret ? (z_off_t)ret : -1; +} + +/* -- see zlib.h -- */ +int ZEXPORT gzeof(file) + gzFile file; +{ + gz_statep state; + + /* get internal structure and check integrity */ + if (file == NULL) + return 0; + state = (gz_statep)file; + if (state->mode != GZ_READ && state->mode != GZ_WRITE) + return 0; + + /* return end-of-file state */ + return state->mode == GZ_READ ? state->past : 0; +} + +/* -- see zlib.h -- */ +const char * ZEXPORT gzerror(file, errnum) + gzFile file; + int *errnum; +{ + gz_statep state; + + /* get internal structure and check integrity */ + if (file == NULL) + return NULL; + state = (gz_statep)file; + if (state->mode != GZ_READ && state->mode != GZ_WRITE) + return NULL; + + /* return error information */ + if (errnum != NULL) + *errnum = state->err; + return state->err == Z_MEM_ERROR ? "out of memory" : + (state->msg == NULL ? "" : state->msg); +} + +/* -- see zlib.h -- */ +void ZEXPORT gzclearerr(file) + gzFile file; +{ + gz_statep state; + + /* get internal structure and check integrity */ + if (file == NULL) + return; + state = (gz_statep)file; + if (state->mode != GZ_READ && state->mode != GZ_WRITE) + return; + + /* clear error and end-of-file */ + if (state->mode == GZ_READ) { + state->eof = 0; + state->past = 0; + } + gz_error(state, Z_OK, NULL); +} + +/* Create an error message in allocated memory and set state->err and + state->msg accordingly. Free any previous error message already there. Do + not try to free or allocate space if the error is Z_MEM_ERROR (out of + memory). Simply save the error message as a static string. If there is an + allocation failure constructing the error message, then convert the error to + out of memory. */ +void ZLIB_INTERNAL gz_error(state, err, msg) + gz_statep state; + int err; + const char *msg; +{ + /* free previously allocated message and clear */ + if (state->msg != NULL) { + if (state->err != Z_MEM_ERROR) + free(state->msg); + state->msg = NULL; + } + + /* if fatal, set state->x.have to 0 so that the gzgetc() macro fails */ + if (err != Z_OK && err != Z_BUF_ERROR) + state->x.have = 0; + + /* set error code, and if no message, then done */ + state->err = err; + if (msg == NULL) + return; + + /* for an out of memory error, return literal string when requested */ + if (err == Z_MEM_ERROR) + return; + + /* construct error message with path */ + if ((state->msg = (char *)malloc(strlen(state->path) + strlen(msg) + 3)) == + NULL) { + state->err = Z_MEM_ERROR; + return; + } +#if !defined(NO_snprintf) && !defined(NO_vsnprintf) + (void)snprintf(state->msg, strlen(state->path) + strlen(msg) + 3, + "%s%s%s", state->path, ": ", msg); +#else + strcpy(state->msg, state->path); + strcat(state->msg, ": "); + strcat(state->msg, msg); +#endif +} + +#ifndef INT_MAX +/* portably return maximum value for an int (when limits.h presumed not + available) -- we need to do this to cover cases where 2's complement not + used, since C standard permits 1's complement and sign-bit representations, + otherwise we could just use ((unsigned)-1) >> 1 */ +unsigned ZLIB_INTERNAL gz_intmax() +{ + unsigned p, q; + + p = 1; + do { + q = p; + p <<= 1; + p++; + } while (p > q); + return q >> 1; +} +#endif diff --git a/zlib/gzread.c b/zlib/gzread.c new file mode 100644 index 000000000000..956b91ea7d9e --- /dev/null +++ b/zlib/gzread.c @@ -0,0 +1,654 @@ +/* gzread.c -- zlib functions for reading gzip files + * Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013, 2016 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +#include "gzguts.h" + +/* Local functions */ +local int gz_load OF((gz_statep, unsigned char *, unsigned, unsigned *)); +local int gz_avail OF((gz_statep)); +local int gz_look OF((gz_statep)); +local int gz_decomp OF((gz_statep)); +local int gz_fetch OF((gz_statep)); +local int gz_skip OF((gz_statep, z_off64_t)); +local z_size_t gz_read OF((gz_statep, voidp, z_size_t)); + +/* Use read() to load a buffer -- return -1 on error, otherwise 0. Read from + state->fd, and update state->eof, state->err, and state->msg as appropriate. + This function needs to loop on read(), since read() is not guaranteed to + read the number of bytes requested, depending on the type of descriptor. */ +local int gz_load(state, buf, len, have) + gz_statep state; + unsigned char *buf; + unsigned len; + unsigned *have; +{ + int ret; + unsigned get, max = ((unsigned)-1 >> 2) + 1; + + *have = 0; + do { + get = len - *have; + if (get > max) + get = max; + ret = read(state->fd, buf + *have, get); + if (ret <= 0) + break; + *have += (unsigned)ret; + } while (*have < len); + if (ret < 0) { + gz_error(state, Z_ERRNO, zstrerror()); + return -1; + } + if (ret == 0) + state->eof = 1; + return 0; +} + +/* Load up input buffer and set eof flag if last data loaded -- return -1 on + error, 0 otherwise. Note that the eof flag is set when the end of the input + file is reached, even though there may be unused data in the buffer. Once + that data has been used, no more attempts will be made to read the file. + If strm->avail_in != 0, then the current data is moved to the beginning of + the input buffer, and then the remainder of the buffer is loaded with the + available data from the input file. */ +local int gz_avail(state) + gz_statep state; +{ + unsigned got; + z_streamp strm = &(state->strm); + + if (state->err != Z_OK && state->err != Z_BUF_ERROR) + return -1; + if (state->eof == 0) { + if (strm->avail_in) { /* copy what's there to the start */ + unsigned char *p = state->in; + unsigned const char *q = strm->next_in; + unsigned n = strm->avail_in; + do { + *p++ = *q++; + } while (--n); + } + if (gz_load(state, state->in + strm->avail_in, + state->size - strm->avail_in, &got) == -1) + return -1; + strm->avail_in += got; + strm->next_in = state->in; + } + return 0; +} + +/* Look for gzip header, set up for inflate or copy. state->x.have must be 0. + If this is the first time in, allocate required memory. state->how will be + left unchanged if there is no more input data available, will be set to COPY + if there is no gzip header and direct copying will be performed, or it will + be set to GZIP for decompression. If direct copying, then leftover input + data from the input buffer will be copied to the output buffer. In that + case, all further file reads will be directly to either the output buffer or + a user buffer. If decompressing, the inflate state will be initialized. + gz_look() will return 0 on success or -1 on failure. */ +local int gz_look(state) + gz_statep state; +{ + z_streamp strm = &(state->strm); + + /* allocate read buffers and inflate memory */ + if (state->size == 0) { + /* allocate buffers */ + state->in = (unsigned char *)malloc(state->want); + state->out = (unsigned char *)malloc(state->want << 1); + if (state->in == NULL || state->out == NULL) { + free(state->out); + free(state->in); + gz_error(state, Z_MEM_ERROR, "out of memory"); + return -1; + } + state->size = state->want; + + /* allocate inflate memory */ + state->strm.zalloc = Z_NULL; + state->strm.zfree = Z_NULL; + state->strm.opaque = Z_NULL; + state->strm.avail_in = 0; + state->strm.next_in = Z_NULL; + if (inflateInit2(&(state->strm), 15 + 16) != Z_OK) { /* gunzip */ + free(state->out); + free(state->in); + state->size = 0; + gz_error(state, Z_MEM_ERROR, "out of memory"); + return -1; + } + } + + /* get at least the magic bytes in the input buffer */ + if (strm->avail_in < 2) { + if (gz_avail(state) == -1) + return -1; + if (strm->avail_in == 0) + return 0; + } + + /* look for gzip magic bytes -- if there, do gzip decoding (note: there is + a logical dilemma here when considering the case of a partially written + gzip file, to wit, if a single 31 byte is written, then we cannot tell + whether this is a single-byte file, or just a partially written gzip + file -- for here we assume that if a gzip file is being written, then + the header will be written in a single operation, so that reading a + single byte is sufficient indication that it is not a gzip file) */ + if (strm->avail_in > 1 && + strm->next_in[0] == 31 && strm->next_in[1] == 139) { + inflateReset(strm); + state->how = GZIP; + state->direct = 0; + return 0; + } + + /* no gzip header -- if we were decoding gzip before, then this is trailing + garbage. Ignore the trailing garbage and finish. */ + if (state->direct == 0) { + strm->avail_in = 0; + state->eof = 1; + state->x.have = 0; + return 0; + } + + /* doing raw i/o, copy any leftover input to output -- this assumes that + the output buffer is larger than the input buffer, which also assures + space for gzungetc() */ + state->x.next = state->out; + if (strm->avail_in) { + memcpy(state->x.next, strm->next_in, strm->avail_in); + state->x.have = strm->avail_in; + strm->avail_in = 0; + } + state->how = COPY; + state->direct = 1; + return 0; +} + +/* Decompress from input to the provided next_out and avail_out in the state. + On return, state->x.have and state->x.next point to the just decompressed + data. If the gzip stream completes, state->how is reset to LOOK to look for + the next gzip stream or raw data, once state->x.have is depleted. Returns 0 + on success, -1 on failure. */ +local int gz_decomp(state) + gz_statep state; +{ + int ret = Z_OK; + unsigned had; + z_streamp strm = &(state->strm); + + /* fill output buffer up to end of deflate stream */ + had = strm->avail_out; + do { + /* get more input for inflate() */ + if (strm->avail_in == 0 && gz_avail(state) == -1) + return -1; + if (strm->avail_in == 0) { + gz_error(state, Z_BUF_ERROR, "unexpected end of file"); + break; + } + + /* decompress and handle errors */ + ret = inflate(strm, Z_NO_FLUSH); + if (ret == Z_STREAM_ERROR || ret == Z_NEED_DICT) { + gz_error(state, Z_STREAM_ERROR, + "internal error: inflate stream corrupt"); + return -1; + } + if (ret == Z_MEM_ERROR) { + gz_error(state, Z_MEM_ERROR, "out of memory"); + return -1; + } + if (ret == Z_DATA_ERROR) { /* deflate stream invalid */ + gz_error(state, Z_DATA_ERROR, + strm->msg == NULL ? "compressed data error" : strm->msg); + return -1; + } + } while (strm->avail_out && ret != Z_STREAM_END); + + /* update available output */ + state->x.have = had - strm->avail_out; + state->x.next = strm->next_out - state->x.have; + + /* if the gzip stream completed successfully, look for another */ + if (ret == Z_STREAM_END) + state->how = LOOK; + + /* good decompression */ + return 0; +} + +/* Fetch data and put it in the output buffer. Assumes state->x.have is 0. + Data is either copied from the input file or decompressed from the input + file depending on state->how. If state->how is LOOK, then a gzip header is + looked for to determine whether to copy or decompress. Returns -1 on error, + otherwise 0. gz_fetch() will leave state->how as COPY or GZIP unless the + end of the input file has been reached and all data has been processed. */ +local int gz_fetch(state) + gz_statep state; +{ + z_streamp strm = &(state->strm); + + do { + switch(state->how) { + case LOOK: /* -> LOOK, COPY (only if never GZIP), or GZIP */ + if (gz_look(state) == -1) + return -1; + if (state->how == LOOK) + return 0; + break; + case COPY: /* -> COPY */ + if (gz_load(state, state->out, state->size << 1, &(state->x.have)) + == -1) + return -1; + state->x.next = state->out; + return 0; + case GZIP: /* -> GZIP or LOOK (if end of gzip stream) */ + strm->avail_out = state->size << 1; + strm->next_out = state->out; + if (gz_decomp(state) == -1) + return -1; + } + } while (state->x.have == 0 && (!state->eof || strm->avail_in)); + return 0; +} + +/* Skip len uncompressed bytes of output. Return -1 on error, 0 on success. */ +local int gz_skip(state, len) + gz_statep state; + z_off64_t len; +{ + unsigned n; + + /* skip over len bytes or reach end-of-file, whichever comes first */ + while (len) + /* skip over whatever is in output buffer */ + if (state->x.have) { + n = GT_OFF(state->x.have) || (z_off64_t)state->x.have > len ? + (unsigned)len : state->x.have; + state->x.have -= n; + state->x.next += n; + state->x.pos += n; + len -= n; + } + + /* output buffer empty -- return if we're at the end of the input */ + else if (state->eof && state->strm.avail_in == 0) + break; + + /* need more data to skip -- load up output buffer */ + else { + /* get more output, looking for header if required */ + if (gz_fetch(state) == -1) + return -1; + } + return 0; +} + +/* Read len bytes into buf from file, or less than len up to the end of the + input. Return the number of bytes read. If zero is returned, either the + end of file was reached, or there was an error. state->err must be + consulted in that case to determine which. */ +local z_size_t gz_read(state, buf, len) + gz_statep state; + voidp buf; + z_size_t len; +{ + z_size_t got; + unsigned n; + + /* if len is zero, avoid unnecessary operations */ + if (len == 0) + return 0; + + /* process a skip request */ + if (state->seek) { + state->seek = 0; + if (gz_skip(state, state->skip) == -1) + return 0; + } + + /* get len bytes to buf, or less than len if at the end */ + got = 0; + do { + /* set n to the maximum amount of len that fits in an unsigned int */ + n = -1; + if (n > len) + n = len; + + /* first just try copying data from the output buffer */ + if (state->x.have) { + if (state->x.have < n) + n = state->x.have; + memcpy(buf, state->x.next, n); + state->x.next += n; + state->x.have -= n; + } + + /* output buffer empty -- return if we're at the end of the input */ + else if (state->eof && state->strm.avail_in == 0) { + state->past = 1; /* tried to read past end */ + break; + } + + /* need output data -- for small len or new stream load up our output + buffer */ + else if (state->how == LOOK || n < (state->size << 1)) { + /* get more output, looking for header if required */ + if (gz_fetch(state) == -1) + return 0; + continue; /* no progress yet -- go back to copy above */ + /* the copy above assures that we will leave with space in the + output buffer, allowing at least one gzungetc() to succeed */ + } + + /* large len -- read directly into user buffer */ + else if (state->how == COPY) { /* read directly */ + if (gz_load(state, (unsigned char *)buf, n, &n) == -1) + return 0; + } + + /* large len -- decompress directly into user buffer */ + else { /* state->how == GZIP */ + state->strm.avail_out = n; + state->strm.next_out = (unsigned char *)buf; + if (gz_decomp(state) == -1) + return 0; + n = state->x.have; + state->x.have = 0; + } + + /* update progress */ + len -= n; + buf = (char *)buf + n; + got += n; + state->x.pos += n; + } while (len); + + /* return number of bytes read into user buffer */ + return got; +} + +/* -- see zlib.h -- */ +int ZEXPORT gzread(file, buf, len) + gzFile file; + voidp buf; + unsigned len; +{ + gz_statep state; + + /* get internal structure */ + if (file == NULL) + return -1; + state = (gz_statep)file; + + /* check that we're reading and that there's no (serious) error */ + if (state->mode != GZ_READ || + (state->err != Z_OK && state->err != Z_BUF_ERROR)) + return -1; + + /* since an int is returned, make sure len fits in one, otherwise return + with an error (this avoids a flaw in the interface) */ + if ((int)len < 0) { + gz_error(state, Z_STREAM_ERROR, "request does not fit in an int"); + return -1; + } + + /* read len or fewer bytes to buf */ + len = gz_read(state, buf, len); + + /* check for an error */ + if (len == 0 && state->err != Z_OK && state->err != Z_BUF_ERROR) + return -1; + + /* return the number of bytes read (this is assured to fit in an int) */ + return (int)len; +} + +/* -- see zlib.h -- */ +z_size_t ZEXPORT gzfread(buf, size, nitems, file) + voidp buf; + z_size_t size; + z_size_t nitems; + gzFile file; +{ + z_size_t len; + gz_statep state; + + /* get internal structure */ + if (file == NULL) + return 0; + state = (gz_statep)file; + + /* check that we're reading and that there's no (serious) error */ + if (state->mode != GZ_READ || + (state->err != Z_OK && state->err != Z_BUF_ERROR)) + return 0; + + /* compute bytes to read -- error on overflow */ + len = nitems * size; + if (size && len / size != nitems) { + gz_error(state, Z_STREAM_ERROR, "request does not fit in a size_t"); + return 0; + } + + /* read len or fewer bytes to buf, return the number of full items read */ + return len ? gz_read(state, buf, len) / size : 0; +} + +/* -- see zlib.h -- */ +#ifdef Z_PREFIX_SET +# undef z_gzgetc +#else +# undef gzgetc +#endif +int ZEXPORT gzgetc(file) + gzFile file; +{ + int ret; + unsigned char buf[1]; + gz_statep state; + + /* get internal structure */ + if (file == NULL) + return -1; + state = (gz_statep)file; + + /* check that we're reading and that there's no (serious) error */ + if (state->mode != GZ_READ || + (state->err != Z_OK && state->err != Z_BUF_ERROR)) + return -1; + + /* try output buffer (no need to check for skip request) */ + if (state->x.have) { + state->x.have--; + state->x.pos++; + return *(state->x.next)++; + } + + /* nothing there -- try gz_read() */ + ret = gz_read(state, buf, 1); + return ret < 1 ? -1 : buf[0]; +} + +int ZEXPORT gzgetc_(file) +gzFile file; +{ + return gzgetc(file); +} + +/* -- see zlib.h -- */ +int ZEXPORT gzungetc(c, file) + int c; + gzFile file; +{ + gz_statep state; + + /* get internal structure */ + if (file == NULL) + return -1; + state = (gz_statep)file; + + /* check that we're reading and that there's no (serious) error */ + if (state->mode != GZ_READ || + (state->err != Z_OK && state->err != Z_BUF_ERROR)) + return -1; + + /* process a skip request */ + if (state->seek) { + state->seek = 0; + if (gz_skip(state, state->skip) == -1) + return -1; + } + + /* can't push EOF */ + if (c < 0) + return -1; + + /* if output buffer empty, put byte at end (allows more pushing) */ + if (state->x.have == 0) { + state->x.have = 1; + state->x.next = state->out + (state->size << 1) - 1; + state->x.next[0] = (unsigned char)c; + state->x.pos--; + state->past = 0; + return c; + } + + /* if no room, give up (must have already done a gzungetc()) */ + if (state->x.have == (state->size << 1)) { + gz_error(state, Z_DATA_ERROR, "out of room to push characters"); + return -1; + } + + /* slide output data if needed and insert byte before existing data */ + if (state->x.next == state->out) { + unsigned char *src = state->out + state->x.have; + unsigned char *dest = state->out + (state->size << 1); + while (src > state->out) + *--dest = *--src; + state->x.next = dest; + } + state->x.have++; + state->x.next--; + state->x.next[0] = (unsigned char)c; + state->x.pos--; + state->past = 0; + return c; +} + +/* -- see zlib.h -- */ +char * ZEXPORT gzgets(file, buf, len) + gzFile file; + char *buf; + int len; +{ + unsigned left, n; + char *str; + unsigned char *eol; + gz_statep state; + + /* check parameters and get internal structure */ + if (file == NULL || buf == NULL || len < 1) + return NULL; + state = (gz_statep)file; + + /* check that we're reading and that there's no (serious) error */ + if (state->mode != GZ_READ || + (state->err != Z_OK && state->err != Z_BUF_ERROR)) + return NULL; + + /* process a skip request */ + if (state->seek) { + state->seek = 0; + if (gz_skip(state, state->skip) == -1) + return NULL; + } + + /* copy output bytes up to new line or len - 1, whichever comes first -- + append a terminating zero to the string (we don't check for a zero in + the contents, let the user worry about that) */ + str = buf; + left = (unsigned)len - 1; + if (left) do { + /* assure that something is in the output buffer */ + if (state->x.have == 0 && gz_fetch(state) == -1) + return NULL; /* error */ + if (state->x.have == 0) { /* end of file */ + state->past = 1; /* read past end */ + break; /* return what we have */ + } + + /* look for end-of-line in current output buffer */ + n = state->x.have > left ? left : state->x.have; + eol = (unsigned char *)memchr(state->x.next, '\n', n); + if (eol != NULL) + n = (unsigned)(eol - state->x.next) + 1; + + /* copy through end-of-line, or remainder if not found */ + memcpy(buf, state->x.next, n); + state->x.have -= n; + state->x.next += n; + state->x.pos += n; + left -= n; + buf += n; + } while (left && eol == NULL); + + /* return terminated string, or if nothing, end of file */ + if (buf == str) + return NULL; + buf[0] = 0; + return str; +} + +/* -- see zlib.h -- */ +int ZEXPORT gzdirect(file) + gzFile file; +{ + gz_statep state; + + /* get internal structure */ + if (file == NULL) + return 0; + state = (gz_statep)file; + + /* if the state is not known, but we can find out, then do so (this is + mainly for right after a gzopen() or gzdopen()) */ + if (state->mode == GZ_READ && state->how == LOOK && state->x.have == 0) + (void)gz_look(state); + + /* return 1 if transparent, 0 if processing a gzip stream */ + return state->direct; +} + +/* -- see zlib.h -- */ +int ZEXPORT gzclose_r(file) + gzFile file; +{ + int ret, err; + gz_statep state; + + /* get internal structure */ + if (file == NULL) + return Z_STREAM_ERROR; + state = (gz_statep)file; + + /* check that we're reading */ + if (state->mode != GZ_READ) + return Z_STREAM_ERROR; + + /* free memory and close file */ + if (state->size) { + inflateEnd(&(state->strm)); + free(state->out); + free(state->in); + } + err = state->err == Z_BUF_ERROR ? Z_BUF_ERROR : Z_OK; + gz_error(state, Z_OK, NULL); + free(state->path); + ret = close(state->fd); + free(state); + return ret ? Z_ERRNO : err; +} diff --git a/zlib/gzwrite.c b/zlib/gzwrite.c new file mode 100644 index 000000000000..c7b5651d70b9 --- /dev/null +++ b/zlib/gzwrite.c @@ -0,0 +1,665 @@ +/* gzwrite.c -- zlib functions for writing gzip files + * Copyright (C) 2004-2017 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +#include "gzguts.h" + +/* Local functions */ +local int gz_init OF((gz_statep)); +local int gz_comp OF((gz_statep, int)); +local int gz_zero OF((gz_statep, z_off64_t)); +local z_size_t gz_write OF((gz_statep, voidpc, z_size_t)); + +/* Initialize state for writing a gzip file. Mark initialization by setting + state->size to non-zero. Return -1 on a memory allocation failure, or 0 on + success. */ +local int gz_init(state) + gz_statep state; +{ + int ret; + z_streamp strm = &(state->strm); + + /* allocate input buffer (double size for gzprintf) */ + state->in = (unsigned char *)malloc(state->want << 1); + if (state->in == NULL) { + gz_error(state, Z_MEM_ERROR, "out of memory"); + return -1; + } + + /* only need output buffer and deflate state if compressing */ + if (!state->direct) { + /* allocate output buffer */ + state->out = (unsigned char *)malloc(state->want); + if (state->out == NULL) { + free(state->in); + gz_error(state, Z_MEM_ERROR, "out of memory"); + return -1; + } + + /* allocate deflate memory, set up for gzip compression */ + strm->zalloc = Z_NULL; + strm->zfree = Z_NULL; + strm->opaque = Z_NULL; + ret = deflateInit2(strm, state->level, Z_DEFLATED, + MAX_WBITS + 16, DEF_MEM_LEVEL, state->strategy); + if (ret != Z_OK) { + free(state->out); + free(state->in); + gz_error(state, Z_MEM_ERROR, "out of memory"); + return -1; + } + strm->next_in = NULL; + } + + /* mark state as initialized */ + state->size = state->want; + + /* initialize write buffer if compressing */ + if (!state->direct) { + strm->avail_out = state->size; + strm->next_out = state->out; + state->x.next = strm->next_out; + } + return 0; +} + +/* Compress whatever is at avail_in and next_in and write to the output file. + Return -1 if there is an error writing to the output file or if gz_init() + fails to allocate memory, otherwise 0. flush is assumed to be a valid + deflate() flush value. If flush is Z_FINISH, then the deflate() state is + reset to start a new gzip stream. If gz->direct is true, then simply write + to the output file without compressing, and ignore flush. */ +local int gz_comp(state, flush) + gz_statep state; + int flush; +{ + int ret, writ; + unsigned have, put, max = ((unsigned)-1 >> 2) + 1; + z_streamp strm = &(state->strm); + + /* allocate memory if this is the first time through */ + if (state->size == 0 && gz_init(state) == -1) + return -1; + + /* write directly if requested */ + if (state->direct) { + while (strm->avail_in) { + put = strm->avail_in > max ? max : strm->avail_in; + writ = write(state->fd, strm->next_in, put); + if (writ < 0) { + gz_error(state, Z_ERRNO, zstrerror()); + return -1; + } + strm->avail_in -= (unsigned)writ; + strm->next_in += writ; + } + return 0; + } + + /* run deflate() on provided input until it produces no more output */ + ret = Z_OK; + do { + /* write out current buffer contents if full, or if flushing, but if + doing Z_FINISH then don't write until we get to Z_STREAM_END */ + if (strm->avail_out == 0 || (flush != Z_NO_FLUSH && + (flush != Z_FINISH || ret == Z_STREAM_END))) { + while (strm->next_out > state->x.next) { + put = strm->next_out - state->x.next > (int)max ? max : + (unsigned)(strm->next_out - state->x.next); + writ = write(state->fd, state->x.next, put); + if (writ < 0) { + gz_error(state, Z_ERRNO, zstrerror()); + return -1; + } + state->x.next += writ; + } + if (strm->avail_out == 0) { + strm->avail_out = state->size; + strm->next_out = state->out; + state->x.next = state->out; + } + } + + /* compress */ + have = strm->avail_out; + ret = deflate(strm, flush); + if (ret == Z_STREAM_ERROR) { + gz_error(state, Z_STREAM_ERROR, + "internal error: deflate stream corrupt"); + return -1; + } + have -= strm->avail_out; + } while (have); + + /* if that completed a deflate stream, allow another to start */ + if (flush == Z_FINISH) + deflateReset(strm); + + /* all done, no errors */ + return 0; +} + +/* Compress len zeros to output. Return -1 on a write error or memory + allocation failure by gz_comp(), or 0 on success. */ +local int gz_zero(state, len) + gz_statep state; + z_off64_t len; +{ + int first; + unsigned n; + z_streamp strm = &(state->strm); + + /* consume whatever's left in the input buffer */ + if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1) + return -1; + + /* compress len zeros (len guaranteed > 0) */ + first = 1; + while (len) { + n = GT_OFF(state->size) || (z_off64_t)state->size > len ? + (unsigned)len : state->size; + if (first) { + memset(state->in, 0, n); + first = 0; + } + strm->avail_in = n; + strm->next_in = state->in; + state->x.pos += n; + if (gz_comp(state, Z_NO_FLUSH) == -1) + return -1; + len -= n; + } + return 0; +} + +/* Write len bytes from buf to file. Return the number of bytes written. If + the returned value is less than len, then there was an error. */ +local z_size_t gz_write(state, buf, len) + gz_statep state; + voidpc buf; + z_size_t len; +{ + z_size_t put = len; + + /* if len is zero, avoid unnecessary operations */ + if (len == 0) + return 0; + + /* allocate memory if this is the first time through */ + if (state->size == 0 && gz_init(state) == -1) + return 0; + + /* check for seek request */ + if (state->seek) { + state->seek = 0; + if (gz_zero(state, state->skip) == -1) + return 0; + } + + /* for small len, copy to input buffer, otherwise compress directly */ + if (len < state->size) { + /* copy to input buffer, compress when full */ + do { + unsigned have, copy; + + if (state->strm.avail_in == 0) + state->strm.next_in = state->in; + have = (unsigned)((state->strm.next_in + state->strm.avail_in) - + state->in); + copy = state->size - have; + if (copy > len) + copy = len; + memcpy(state->in + have, buf, copy); + state->strm.avail_in += copy; + state->x.pos += copy; + buf = (const char *)buf + copy; + len -= copy; + if (len && gz_comp(state, Z_NO_FLUSH) == -1) + return 0; + } while (len); + } + else { + /* consume whatever's left in the input buffer */ + if (state->strm.avail_in && gz_comp(state, Z_NO_FLUSH) == -1) + return 0; + + /* directly compress user buffer to file */ + state->strm.next_in = (z_const Bytef *)buf; + do { + unsigned n = (unsigned)-1; + if (n > len) + n = len; + state->strm.avail_in = n; + state->x.pos += n; + if (gz_comp(state, Z_NO_FLUSH) == -1) + return 0; + len -= n; + } while (len); + } + + /* input was all buffered or compressed */ + return put; +} + +/* -- see zlib.h -- */ +int ZEXPORT gzwrite(file, buf, len) + gzFile file; + voidpc buf; + unsigned len; +{ + gz_statep state; + + /* get internal structure */ + if (file == NULL) + return 0; + state = (gz_statep)file; + + /* check that we're writing and that there's no error */ + if (state->mode != GZ_WRITE || state->err != Z_OK) + return 0; + + /* since an int is returned, make sure len fits in one, otherwise return + with an error (this avoids a flaw in the interface) */ + if ((int)len < 0) { + gz_error(state, Z_DATA_ERROR, "requested length does not fit in int"); + return 0; + } + + /* write len bytes from buf (the return value will fit in an int) */ + return (int)gz_write(state, buf, len); +} + +/* -- see zlib.h -- */ +z_size_t ZEXPORT gzfwrite(buf, size, nitems, file) + voidpc buf; + z_size_t size; + z_size_t nitems; + gzFile file; +{ + z_size_t len; + gz_statep state; + + /* get internal structure */ + if (file == NULL) + return 0; + state = (gz_statep)file; + + /* check that we're writing and that there's no error */ + if (state->mode != GZ_WRITE || state->err != Z_OK) + return 0; + + /* compute bytes to read -- error on overflow */ + len = nitems * size; + if (size && len / size != nitems) { + gz_error(state, Z_STREAM_ERROR, "request does not fit in a size_t"); + return 0; + } + + /* write len bytes to buf, return the number of full items written */ + return len ? gz_write(state, buf, len) / size : 0; +} + +/* -- see zlib.h -- */ +int ZEXPORT gzputc(file, c) + gzFile file; + int c; +{ + unsigned have; + unsigned char buf[1]; + gz_statep state; + z_streamp strm; + + /* get internal structure */ + if (file == NULL) + return -1; + state = (gz_statep)file; + strm = &(state->strm); + + /* check that we're writing and that there's no error */ + if (state->mode != GZ_WRITE || state->err != Z_OK) + return -1; + + /* check for seek request */ + if (state->seek) { + state->seek = 0; + if (gz_zero(state, state->skip) == -1) + return -1; + } + + /* try writing to input buffer for speed (state->size == 0 if buffer not + initialized) */ + if (state->size) { + if (strm->avail_in == 0) + strm->next_in = state->in; + have = (unsigned)((strm->next_in + strm->avail_in) - state->in); + if (have < state->size) { + state->in[have] = (unsigned char)c; + strm->avail_in++; + state->x.pos++; + return c & 0xff; + } + } + + /* no room in buffer or not initialized, use gz_write() */ + buf[0] = (unsigned char)c; + if (gz_write(state, buf, 1) != 1) + return -1; + return c & 0xff; +} + +/* -- see zlib.h -- */ +int ZEXPORT gzputs(file, str) + gzFile file; + const char *str; +{ + int ret; + z_size_t len; + gz_statep state; + + /* get internal structure */ + if (file == NULL) + return -1; + state = (gz_statep)file; + + /* check that we're writing and that there's no error */ + if (state->mode != GZ_WRITE || state->err != Z_OK) + return -1; + + /* write string */ + len = strlen(str); + ret = gz_write(state, str, len); + return ret == 0 && len != 0 ? -1 : ret; +} + +#if defined(STDC) || defined(Z_HAVE_STDARG_H) +#include + +/* -- see zlib.h -- */ +int ZEXPORTVA gzvprintf(gzFile file, const char *format, va_list va) +{ + int len; + unsigned left; + char *next; + gz_statep state; + z_streamp strm; + + /* get internal structure */ + if (file == NULL) + return Z_STREAM_ERROR; + state = (gz_statep)file; + strm = &(state->strm); + + /* check that we're writing and that there's no error */ + if (state->mode != GZ_WRITE || state->err != Z_OK) + return Z_STREAM_ERROR; + + /* make sure we have some buffer space */ + if (state->size == 0 && gz_init(state) == -1) + return state->err; + + /* check for seek request */ + if (state->seek) { + state->seek = 0; + if (gz_zero(state, state->skip) == -1) + return state->err; + } + + /* do the printf() into the input buffer, put length in len -- the input + buffer is double-sized just for this function, so there is guaranteed to + be state->size bytes available after the current contents */ + if (strm->avail_in == 0) + strm->next_in = state->in; + next = (char *)(state->in + (strm->next_in - state->in) + strm->avail_in); + next[state->size - 1] = 0; +#ifdef NO_vsnprintf +# ifdef HAS_vsprintf_void + (void)vsprintf(next, format, va); + for (len = 0; len < state->size; len++) + if (next[len] == 0) break; +# else + len = vsprintf(next, format, va); +# endif +#else +# ifdef HAS_vsnprintf_void + (void)vsnprintf(next, state->size, format, va); + len = strlen(next); +# else + len = vsnprintf(next, state->size, format, va); +# endif +#endif + + /* check that printf() results fit in buffer */ + if (len == 0 || (unsigned)len >= state->size || next[state->size - 1] != 0) + return 0; + + /* update buffer and position, compress first half if past that */ + strm->avail_in += (unsigned)len; + state->x.pos += len; + if (strm->avail_in >= state->size) { + left = strm->avail_in - state->size; + strm->avail_in = state->size; + if (gz_comp(state, Z_NO_FLUSH) == -1) + return state->err; + memcpy(state->in, state->in + state->size, left); + strm->next_in = state->in; + strm->avail_in = left; + } + return len; +} + +int ZEXPORTVA gzprintf(gzFile file, const char *format, ...) +{ + va_list va; + int ret; + + va_start(va, format); + ret = gzvprintf(file, format, va); + va_end(va); + return ret; +} + +#else /* !STDC && !Z_HAVE_STDARG_H */ + +/* -- see zlib.h -- */ +int ZEXPORTVA gzprintf (file, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, + a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) + gzFile file; + const char *format; + int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, + a11, a12, a13, a14, a15, a16, a17, a18, a19, a20; +{ + unsigned len, left; + char *next; + gz_statep state; + z_streamp strm; + + /* get internal structure */ + if (file == NULL) + return Z_STREAM_ERROR; + state = (gz_statep)file; + strm = &(state->strm); + + /* check that can really pass pointer in ints */ + if (sizeof(int) != sizeof(void *)) + return Z_STREAM_ERROR; + + /* check that we're writing and that there's no error */ + if (state->mode != GZ_WRITE || state->err != Z_OK) + return Z_STREAM_ERROR; + + /* make sure we have some buffer space */ + if (state->size == 0 && gz_init(state) == -1) + return state->error; + + /* check for seek request */ + if (state->seek) { + state->seek = 0; + if (gz_zero(state, state->skip) == -1) + return state->error; + } + + /* do the printf() into the input buffer, put length in len -- the input + buffer is double-sized just for this function, so there is guaranteed to + be state->size bytes available after the current contents */ + if (strm->avail_in == 0) + strm->next_in = state->in; + next = (char *)(strm->next_in + strm->avail_in); + next[state->size - 1] = 0; +#ifdef NO_snprintf +# ifdef HAS_sprintf_void + sprintf(next, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, + a13, a14, a15, a16, a17, a18, a19, a20); + for (len = 0; len < size; len++) + if (next[len] == 0) + break; +# else + len = sprintf(next, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, + a12, a13, a14, a15, a16, a17, a18, a19, a20); +# endif +#else +# ifdef HAS_snprintf_void + snprintf(next, state->size, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, + a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20); + len = strlen(next); +# else + len = snprintf(next, state->size, format, a1, a2, a3, a4, a5, a6, a7, a8, + a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20); +# endif +#endif + + /* check that printf() results fit in buffer */ + if (len == 0 || len >= state->size || next[state->size - 1] != 0) + return 0; + + /* update buffer and position, compress first half if past that */ + strm->avail_in += len; + state->x.pos += len; + if (strm->avail_in >= state->size) { + left = strm->avail_in - state->size; + strm->avail_in = state->size; + if (gz_comp(state, Z_NO_FLUSH) == -1) + return state->err; + memcpy(state->in, state->in + state->size, left); + strm->next_in = state->in; + strm->avail_in = left; + } + return (int)len; +} + +#endif + +/* -- see zlib.h -- */ +int ZEXPORT gzflush(file, flush) + gzFile file; + int flush; +{ + gz_statep state; + + /* get internal structure */ + if (file == NULL) + return Z_STREAM_ERROR; + state = (gz_statep)file; + + /* check that we're writing and that there's no error */ + if (state->mode != GZ_WRITE || state->err != Z_OK) + return Z_STREAM_ERROR; + + /* check flush parameter */ + if (flush < 0 || flush > Z_FINISH) + return Z_STREAM_ERROR; + + /* check for seek request */ + if (state->seek) { + state->seek = 0; + if (gz_zero(state, state->skip) == -1) + return state->err; + } + + /* compress remaining data with requested flush */ + (void)gz_comp(state, flush); + return state->err; +} + +/* -- see zlib.h -- */ +int ZEXPORT gzsetparams(file, level, strategy) + gzFile file; + int level; + int strategy; +{ + gz_statep state; + z_streamp strm; + + /* get internal structure */ + if (file == NULL) + return Z_STREAM_ERROR; + state = (gz_statep)file; + strm = &(state->strm); + + /* check that we're writing and that there's no error */ + if (state->mode != GZ_WRITE || state->err != Z_OK) + return Z_STREAM_ERROR; + + /* if no change is requested, then do nothing */ + if (level == state->level && strategy == state->strategy) + return Z_OK; + + /* check for seek request */ + if (state->seek) { + state->seek = 0; + if (gz_zero(state, state->skip) == -1) + return state->err; + } + + /* change compression parameters for subsequent input */ + if (state->size) { + /* flush previous input with previous parameters before changing */ + if (strm->avail_in && gz_comp(state, Z_BLOCK) == -1) + return state->err; + deflateParams(strm, level, strategy); + } + state->level = level; + state->strategy = strategy; + return Z_OK; +} + +/* -- see zlib.h -- */ +int ZEXPORT gzclose_w(file) + gzFile file; +{ + int ret = Z_OK; + gz_statep state; + + /* get internal structure */ + if (file == NULL) + return Z_STREAM_ERROR; + state = (gz_statep)file; + + /* check that we're writing */ + if (state->mode != GZ_WRITE) + return Z_STREAM_ERROR; + + /* check for seek request */ + if (state->seek) { + state->seek = 0; + if (gz_zero(state, state->skip) == -1) + ret = state->err; + } + + /* flush, free memory, and close file */ + if (gz_comp(state, Z_FINISH) == -1) + ret = state->err; + if (state->size) { + if (!state->direct) { + (void)deflateEnd(&(state->strm)); + free(state->out); + } + free(state->in); + } + gz_error(state, Z_OK, NULL); + free(state->path); + if (close(state->fd) == -1) + ret = Z_ERRNO; + free(state); + return ret; +} diff --git a/zlib/infback.c b/zlib/infback.c index 455dbc9ee843..59679ecbfc5d 100644 --- a/zlib/infback.c +++ b/zlib/infback.c @@ -1,5 +1,5 @@ /* infback.c -- inflate using a call-back interface - * Copyright (C) 1995-2005 Mark Adler + * Copyright (C) 1995-2016 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -42,20 +42,29 @@ int stream_size; return Z_STREAM_ERROR; strm->msg = Z_NULL; /* in case we return an error */ if (strm->zalloc == (alloc_func)0) { +#ifdef Z_SOLO + return Z_STREAM_ERROR; +#else strm->zalloc = zcalloc; strm->opaque = (voidpf)0; +#endif } - if (strm->zfree == (free_func)0) strm->zfree = zcfree; + if (strm->zfree == (free_func)0) +#ifdef Z_SOLO + return Z_STREAM_ERROR; +#else + strm->zfree = zcfree; +#endif state = (struct inflate_state FAR *)ZALLOC(strm, 1, sizeof(struct inflate_state)); if (state == Z_NULL) return Z_MEM_ERROR; Tracev((stderr, "inflate: allocated\n")); strm->state = (struct internal_state FAR *)state; state->dmax = 32768U; - state->wbits = windowBits; + state->wbits = (uInt)windowBits; state->wsize = 1U << windowBits; state->window = window; - state->write = 0; + state->wnext = 0; state->whave = 0; return Z_OK; } @@ -246,14 +255,14 @@ out_func out; void FAR *out_desc; { struct inflate_state FAR *state; - unsigned char FAR *next; /* next input */ + z_const unsigned char FAR *next; /* next input */ unsigned char FAR *put; /* next output */ unsigned have, left; /* available input and output */ unsigned long hold; /* bit buffer */ unsigned bits; /* bits in bit buffer */ unsigned copy; /* number of stored or match bytes to copy */ unsigned char FAR *from; /* where to copy match bytes from */ - code this; /* current decoding table entry */ + code here; /* current decoding table entry */ code last; /* parent table entry */ unsigned len; /* length to copy for repeats, bits to drop */ int ret; /* return code */ @@ -389,19 +398,18 @@ void FAR *out_desc; state->have = 0; while (state->have < state->nlen + state->ndist) { for (;;) { - this = state->lencode[BITS(state->lenbits)]; - if ((unsigned)(this.bits) <= bits) break; + here = state->lencode[BITS(state->lenbits)]; + if ((unsigned)(here.bits) <= bits) break; PULLBYTE(); } - if (this.val < 16) { - NEEDBITS(this.bits); - DROPBITS(this.bits); - state->lens[state->have++] = this.val; + if (here.val < 16) { + DROPBITS(here.bits); + state->lens[state->have++] = here.val; } else { - if (this.val == 16) { - NEEDBITS(this.bits + 2); - DROPBITS(this.bits); + if (here.val == 16) { + NEEDBITS(here.bits + 2); + DROPBITS(here.bits); if (state->have == 0) { strm->msg = (char *)"invalid bit length repeat"; state->mode = BAD; @@ -411,16 +419,16 @@ void FAR *out_desc; copy = 3 + BITS(2); DROPBITS(2); } - else if (this.val == 17) { - NEEDBITS(this.bits + 3); - DROPBITS(this.bits); + else if (here.val == 17) { + NEEDBITS(here.bits + 3); + DROPBITS(here.bits); len = 0; copy = 3 + BITS(3); DROPBITS(3); } else { - NEEDBITS(this.bits + 7); - DROPBITS(this.bits); + NEEDBITS(here.bits + 7); + DROPBITS(here.bits); len = 0; copy = 11 + BITS(7); DROPBITS(7); @@ -438,7 +446,16 @@ void FAR *out_desc; /* handle error breaks in while */ if (state->mode == BAD) break; - /* build code tables */ + /* check for end-of-block code (better have one) */ + if (state->lens[256] == 0) { + strm->msg = (char *)"invalid code -- missing end-of-block"; + state->mode = BAD; + break; + } + + /* build code tables -- note: do not change the lenbits or distbits + values here (9 and 6) without reading the comments in inftrees.h + concerning the ENOUGH constants, which depend on those values */ state->next = state->codes; state->lencode = (code const FAR *)(state->next); state->lenbits = 9; @@ -474,28 +491,28 @@ void FAR *out_desc; /* get a literal, length, or end-of-block code */ for (;;) { - this = state->lencode[BITS(state->lenbits)]; - if ((unsigned)(this.bits) <= bits) break; + here = state->lencode[BITS(state->lenbits)]; + if ((unsigned)(here.bits) <= bits) break; PULLBYTE(); } - if (this.op && (this.op & 0xf0) == 0) { - last = this; + if (here.op && (here.op & 0xf0) == 0) { + last = here; for (;;) { - this = state->lencode[last.val + + here = state->lencode[last.val + (BITS(last.bits + last.op) >> last.bits)]; - if ((unsigned)(last.bits + this.bits) <= bits) break; + if ((unsigned)(last.bits + here.bits) <= bits) break; PULLBYTE(); } DROPBITS(last.bits); } - DROPBITS(this.bits); - state->length = (unsigned)this.val; + DROPBITS(here.bits); + state->length = (unsigned)here.val; /* process literal */ - if (this.op == 0) { - Tracevv((stderr, this.val >= 0x20 && this.val < 0x7f ? + if (here.op == 0) { + Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? "inflate: literal '%c'\n" : - "inflate: literal 0x%02x\n", this.val)); + "inflate: literal 0x%02x\n", here.val)); ROOM(); *put++ = (unsigned char)(state->length); left--; @@ -504,21 +521,21 @@ void FAR *out_desc; } /* process end of block */ - if (this.op & 32) { + if (here.op & 32) { Tracevv((stderr, "inflate: end of block\n")); state->mode = TYPE; break; } /* invalid code */ - if (this.op & 64) { + if (here.op & 64) { strm->msg = (char *)"invalid literal/length code"; state->mode = BAD; break; } /* length code -- get extra bits, if any */ - state->extra = (unsigned)(this.op) & 15; + state->extra = (unsigned)(here.op) & 15; if (state->extra != 0) { NEEDBITS(state->extra); state->length += BITS(state->extra); @@ -528,30 +545,30 @@ void FAR *out_desc; /* get distance code */ for (;;) { - this = state->distcode[BITS(state->distbits)]; - if ((unsigned)(this.bits) <= bits) break; + here = state->distcode[BITS(state->distbits)]; + if ((unsigned)(here.bits) <= bits) break; PULLBYTE(); } - if ((this.op & 0xf0) == 0) { - last = this; + if ((here.op & 0xf0) == 0) { + last = here; for (;;) { - this = state->distcode[last.val + + here = state->distcode[last.val + (BITS(last.bits + last.op) >> last.bits)]; - if ((unsigned)(last.bits + this.bits) <= bits) break; + if ((unsigned)(last.bits + here.bits) <= bits) break; PULLBYTE(); } DROPBITS(last.bits); } - DROPBITS(this.bits); - if (this.op & 64) { + DROPBITS(here.bits); + if (here.op & 64) { strm->msg = (char *)"invalid distance code"; state->mode = BAD; break; } - state->offset = (unsigned)this.val; + state->offset = (unsigned)here.val; /* get distance extra bits, if any */ - state->extra = (unsigned)(this.op) & 15; + state->extra = (unsigned)(here.op) & 15; if (state->extra != 0) { NEEDBITS(state->extra); state->offset += BITS(state->extra); diff --git a/zlib/inffast.c b/zlib/inffast.c index bbee92ed1e6b..0dbd1dbc09f2 100644 --- a/zlib/inffast.c +++ b/zlib/inffast.c @@ -1,5 +1,5 @@ /* inffast.c -- fast decoding - * Copyright (C) 1995-2004 Mark Adler + * Copyright (C) 1995-2017 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -8,26 +8,9 @@ #include "inflate.h" #include "inffast.h" -#ifndef ASMINF - -/* Allow machine dependent optimization for post-increment or pre-increment. - Based on testing to date, - Pre-increment preferred for: - - PowerPC G3 (Adler) - - MIPS R5000 (Randers-Pehrson) - Post-increment preferred for: - - none - No measurable difference: - - Pentium III (Anderson) - - M68060 (Nikl) - */ -#ifdef POSTINC -# define OFF 0 -# define PUP(a) *(a)++ +#ifdef ASMINF +# pragma message("Assembler code may have bugs -- use at your own risk") #else -# define OFF 1 -# define PUP(a) *++(a) -#endif /* Decode literal, length, and distance codes and write out the resulting @@ -64,13 +47,13 @@ requires strm->avail_out >= 258 for each loop to avoid checking for output space. */ -void inflate_fast(strm, start) +void ZLIB_INTERNAL inflate_fast(strm, start) z_streamp strm; unsigned start; /* inflate()'s starting value for strm->avail_out */ { struct inflate_state FAR *state; - unsigned char FAR *in; /* local strm->next_in */ - unsigned char FAR *last; /* while in < last, enough input available */ + z_const unsigned char FAR *in; /* local strm->next_in */ + z_const unsigned char FAR *last; /* have enough input while in < last */ unsigned char FAR *out; /* local strm->next_out */ unsigned char FAR *beg; /* inflate()'s initial strm->next_out */ unsigned char FAR *end; /* while out < end, enough space available */ @@ -79,7 +62,7 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */ #endif unsigned wsize; /* window size or zero if not using window */ unsigned whave; /* valid bytes in the window */ - unsigned write; /* window write index */ + unsigned wnext; /* window write index */ unsigned char FAR *window; /* allocated sliding window, if wsize != 0 */ unsigned long hold; /* local strm->hold */ unsigned bits; /* local strm->bits */ @@ -87,7 +70,7 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */ code const FAR *dcode; /* local strm->distcode */ unsigned lmask; /* mask for first level of length codes */ unsigned dmask; /* mask for first level of distance codes */ - code this; /* retrieved table entry */ + code here; /* retrieved table entry */ unsigned op; /* code bits, operation, extra bits, or */ /* window position, window bytes to copy */ unsigned len; /* match length, unused bytes */ @@ -96,9 +79,9 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */ /* copy state to local variables */ state = (struct inflate_state FAR *)strm->state; - in = strm->next_in - OFF; + in = strm->next_in; last = in + (strm->avail_in - 5); - out = strm->next_out - OFF; + out = strm->next_out; beg = out - (start - strm->avail_out); end = out + (strm->avail_out - 257); #ifdef INFLATE_STRICT @@ -106,7 +89,7 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */ #endif wsize = state->wsize; whave = state->whave; - write = state->write; + wnext = state->wnext; window = state->window; hold = state->hold; bits = state->bits; @@ -119,29 +102,29 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */ input data or output space */ do { if (bits < 15) { - hold += (unsigned long)(PUP(in)) << bits; + hold += (unsigned long)(*in++) << bits; bits += 8; - hold += (unsigned long)(PUP(in)) << bits; + hold += (unsigned long)(*in++) << bits; bits += 8; } - this = lcode[hold & lmask]; + here = lcode[hold & lmask]; dolen: - op = (unsigned)(this.bits); + op = (unsigned)(here.bits); hold >>= op; bits -= op; - op = (unsigned)(this.op); + op = (unsigned)(here.op); if (op == 0) { /* literal */ - Tracevv((stderr, this.val >= 0x20 && this.val < 0x7f ? + Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? "inflate: literal '%c'\n" : - "inflate: literal 0x%02x\n", this.val)); - PUP(out) = (unsigned char)(this.val); + "inflate: literal 0x%02x\n", here.val)); + *out++ = (unsigned char)(here.val); } else if (op & 16) { /* length base */ - len = (unsigned)(this.val); + len = (unsigned)(here.val); op &= 15; /* number of extra bits */ if (op) { if (bits < op) { - hold += (unsigned long)(PUP(in)) << bits; + hold += (unsigned long)(*in++) << bits; bits += 8; } len += (unsigned)hold & ((1U << op) - 1); @@ -150,25 +133,25 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */ } Tracevv((stderr, "inflate: length %u\n", len)); if (bits < 15) { - hold += (unsigned long)(PUP(in)) << bits; + hold += (unsigned long)(*in++) << bits; bits += 8; - hold += (unsigned long)(PUP(in)) << bits; + hold += (unsigned long)(*in++) << bits; bits += 8; } - this = dcode[hold & dmask]; + here = dcode[hold & dmask]; dodist: - op = (unsigned)(this.bits); + op = (unsigned)(here.bits); hold >>= op; bits -= op; - op = (unsigned)(this.op); + op = (unsigned)(here.op); if (op & 16) { /* distance base */ - dist = (unsigned)(this.val); + dist = (unsigned)(here.val); op &= 15; /* number of extra bits */ if (bits < op) { - hold += (unsigned long)(PUP(in)) << bits; + hold += (unsigned long)(*in++) << bits; bits += 8; if (bits < op) { - hold += (unsigned long)(PUP(in)) << bits; + hold += (unsigned long)(*in++) << bits; bits += 8; } } @@ -187,79 +170,101 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */ if (dist > op) { /* see if copy from window */ op = dist - op; /* distance back in window */ if (op > whave) { - strm->msg = (char *)"invalid distance too far back"; - state->mode = BAD; - break; + if (state->sane) { + strm->msg = + (char *)"invalid distance too far back"; + state->mode = BAD; + break; + } +#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR + if (len <= op - whave) { + do { + *out++ = 0; + } while (--len); + continue; + } + len -= op - whave; + do { + *out++ = 0; + } while (--op > whave); + if (op == 0) { + from = out - dist; + do { + *out++ = *from++; + } while (--len); + continue; + } +#endif } - from = window - OFF; - if (write == 0) { /* very common case */ + from = window; + if (wnext == 0) { /* very common case */ from += wsize - op; if (op < len) { /* some from window */ len -= op; do { - PUP(out) = PUP(from); + *out++ = *from++; } while (--op); from = out - dist; /* rest from output */ } } - else if (write < op) { /* wrap around window */ - from += wsize + write - op; - op -= write; + else if (wnext < op) { /* wrap around window */ + from += wsize + wnext - op; + op -= wnext; if (op < len) { /* some from end of window */ len -= op; do { - PUP(out) = PUP(from); + *out++ = *from++; } while (--op); - from = window - OFF; - if (write < len) { /* some from start of window */ - op = write; + from = window; + if (wnext < len) { /* some from start of window */ + op = wnext; len -= op; do { - PUP(out) = PUP(from); + *out++ = *from++; } while (--op); from = out - dist; /* rest from output */ } } } else { /* contiguous in window */ - from += write - op; + from += wnext - op; if (op < len) { /* some from window */ len -= op; do { - PUP(out) = PUP(from); + *out++ = *from++; } while (--op); from = out - dist; /* rest from output */ } } while (len > 2) { - PUP(out) = PUP(from); - PUP(out) = PUP(from); - PUP(out) = PUP(from); + *out++ = *from++; + *out++ = *from++; + *out++ = *from++; len -= 3; } if (len) { - PUP(out) = PUP(from); + *out++ = *from++; if (len > 1) - PUP(out) = PUP(from); + *out++ = *from++; } } else { from = out - dist; /* copy direct from output */ do { /* minimum length is three */ - PUP(out) = PUP(from); - PUP(out) = PUP(from); - PUP(out) = PUP(from); + *out++ = *from++; + *out++ = *from++; + *out++ = *from++; len -= 3; } while (len > 2); if (len) { - PUP(out) = PUP(from); + *out++ = *from++; if (len > 1) - PUP(out) = PUP(from); + *out++ = *from++; } } } else if ((op & 64) == 0) { /* 2nd level distance code */ - this = dcode[this.val + (hold & ((1U << op) - 1))]; + here = dcode[here.val + (hold & ((1U << op) - 1))]; goto dodist; } else { @@ -269,7 +274,7 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */ } } else if ((op & 64) == 0) { /* 2nd level length code */ - this = lcode[this.val + (hold & ((1U << op) - 1))]; + here = lcode[here.val + (hold & ((1U << op) - 1))]; goto dolen; } else if (op & 32) { /* end-of-block */ @@ -291,8 +296,8 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */ hold &= (1U << bits) - 1; /* update state and return */ - strm->next_in = in + OFF; - strm->next_out = out + OFF; + strm->next_in = in; + strm->next_out = out; strm->avail_in = (unsigned)(in < last ? 5 + (last - in) : 5 - (in - last)); strm->avail_out = (unsigned)(out < end ? 257 + (end - out) : 257 - (out - end)); @@ -305,7 +310,7 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */ inflate_fast() speedups that turned out slower (on a PowerPC G3 750CXe): - Using bit fields for code structure - Different op definition to avoid & for extra bits (do & for table bits) - - Three separate decoding do-loops for direct, window, and write == 0 + - Three separate decoding do-loops for direct, window, and wnext == 0 - Special case for distance > 1 copies to do overlapped load and store copy - Explicit branch predictions (based on measured branch probabilities) - Deferring match copy and interspersed it with decoding subsequent codes diff --git a/zlib/inffast.h b/zlib/inffast.h index 1e88d2d97b56..e5c1aa4ca8cd 100644 --- a/zlib/inffast.h +++ b/zlib/inffast.h @@ -1,5 +1,5 @@ /* inffast.h -- header to use inffast.c - * Copyright (C) 1995-2003 Mark Adler + * Copyright (C) 1995-2003, 2010 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -8,4 +8,4 @@ subject to change. Applications should only use zlib.h. */ -void inflate_fast OF((z_streamp strm, unsigned start)); +void ZLIB_INTERNAL inflate_fast OF((z_streamp strm, unsigned start)); diff --git a/zlib/inffixed.h b/zlib/inffixed.h index 75ed4b5978de..d62832776948 100644 --- a/zlib/inffixed.h +++ b/zlib/inffixed.h @@ -2,9 +2,9 @@ * Generated automatically by makefixed(). */ - /* WARNING: this file should *not* be used by applications. It - is part of the implementation of the compression library and - is subject to change. Applications should only use zlib.h. + /* WARNING: this file should *not* be used by applications. + It is part of the implementation of this library and is + subject to change. Applications should only use zlib.h. */ static const code lenfix[512] = { diff --git a/zlib/inflate.c b/zlib/inflate.c index 792fdee8e9c7..ac333e8c2eda 100644 --- a/zlib/inflate.c +++ b/zlib/inflate.c @@ -1,5 +1,5 @@ /* inflate.c -- zlib decompression - * Copyright (C) 1995-2005 Mark Adler + * Copyright (C) 1995-2016 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -45,7 +45,7 @@ * - Rearrange window copies in inflate_fast() for speed and simplification * - Unroll last copy for window match in inflate_fast() * - Use local copies of window variables in inflate_fast() for speed - * - Pull out common write == 0 case for speed in inflate_fast() + * - Pull out common wnext == 0 case for speed in inflate_fast() * - Make op and len in inflate_fast() unsigned for consistency * - Add FAR to lcode and dcode declarations in inflate_fast() * - Simplified bad distance check in inflate_fast() @@ -92,53 +92,104 @@ #endif /* function prototypes */ +local int inflateStateCheck OF((z_streamp strm)); local void fixedtables OF((struct inflate_state FAR *state)); -local int updatewindow OF((z_streamp strm, unsigned out)); +local int updatewindow OF((z_streamp strm, const unsigned char FAR *end, + unsigned copy)); #ifdef BUILDFIXED void makefixed OF((void)); #endif -local unsigned syncsearch OF((unsigned FAR *have, unsigned char FAR *buf, +local unsigned syncsearch OF((unsigned FAR *have, const unsigned char FAR *buf, unsigned len)); -int ZEXPORT inflateReset(strm) +local int inflateStateCheck(strm) z_streamp strm; { struct inflate_state FAR *state; + if (strm == Z_NULL || + strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0) + return 1; + state = (struct inflate_state FAR *)strm->state; + if (state == Z_NULL || state->strm != strm || + state->mode < HEAD || state->mode > SYNC) + return 1; + return 0; +} - if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; +int ZEXPORT inflateResetKeep(strm) +z_streamp strm; +{ + struct inflate_state FAR *state; + + if (inflateStateCheck(strm)) return Z_STREAM_ERROR; state = (struct inflate_state FAR *)strm->state; strm->total_in = strm->total_out = state->total = 0; strm->msg = Z_NULL; - strm->adler = 1; /* to support ill-conceived Java test suite */ + if (state->wrap) /* to support ill-conceived Java test suite */ + strm->adler = state->wrap & 1; state->mode = HEAD; state->last = 0; state->havedict = 0; state->dmax = 32768U; state->head = Z_NULL; - state->wsize = 0; - state->whave = 0; - state->write = 0; state->hold = 0; state->bits = 0; state->lencode = state->distcode = state->next = state->codes; + state->sane = 1; + state->back = -1; Tracev((stderr, "inflate: reset\n")); return Z_OK; } -int ZEXPORT inflatePrime(strm, bits, value) +int ZEXPORT inflateReset(strm) z_streamp strm; -int bits; -int value; { struct inflate_state FAR *state; - if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + if (inflateStateCheck(strm)) return Z_STREAM_ERROR; state = (struct inflate_state FAR *)strm->state; - if (bits > 16 || state->bits + bits > 32) return Z_STREAM_ERROR; - value &= (1L << bits) - 1; - state->hold += value << state->bits; - state->bits += bits; - return Z_OK; + state->wsize = 0; + state->whave = 0; + state->wnext = 0; + return inflateResetKeep(strm); +} + +int ZEXPORT inflateReset2(strm, windowBits) +z_streamp strm; +int windowBits; +{ + int wrap; + struct inflate_state FAR *state; + + /* get the state */ + if (inflateStateCheck(strm)) return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + + /* extract wrap request from windowBits parameter */ + if (windowBits < 0) { + wrap = 0; + windowBits = -windowBits; + } + else { + wrap = (windowBits >> 4) + 5; +#ifdef GUNZIP + if (windowBits < 48) + windowBits &= 15; +#endif + } + + /* set number of window bits, free window if different */ + if (windowBits && (windowBits < 8 || windowBits > 15)) + return Z_STREAM_ERROR; + if (state->window != Z_NULL && state->wbits != (unsigned)windowBits) { + ZFREE(strm, state->window); + state->window = Z_NULL; + } + + /* update state and reset the rest of it */ + state->wrap = wrap; + state->wbits = (unsigned)windowBits; + return inflateReset(strm); } int ZEXPORT inflateInit2_(strm, windowBits, version, stream_size) @@ -147,6 +198,7 @@ int windowBits; const char *version; int stream_size; { + int ret; struct inflate_state FAR *state; if (version == Z_NULL || version[0] != ZLIB_VERSION[0] || @@ -155,33 +207,33 @@ int stream_size; if (strm == Z_NULL) return Z_STREAM_ERROR; strm->msg = Z_NULL; /* in case we return an error */ if (strm->zalloc == (alloc_func)0) { +#ifdef Z_SOLO + return Z_STREAM_ERROR; +#else strm->zalloc = zcalloc; strm->opaque = (voidpf)0; +#endif } - if (strm->zfree == (free_func)0) strm->zfree = zcfree; + if (strm->zfree == (free_func)0) +#ifdef Z_SOLO + return Z_STREAM_ERROR; +#else + strm->zfree = zcfree; +#endif state = (struct inflate_state FAR *) ZALLOC(strm, 1, sizeof(struct inflate_state)); if (state == Z_NULL) return Z_MEM_ERROR; Tracev((stderr, "inflate: allocated\n")); strm->state = (struct internal_state FAR *)state; - if (windowBits < 0) { - state->wrap = 0; - windowBits = -windowBits; - } - else { - state->wrap = (windowBits >> 4) + 1; -#ifdef GUNZIP - if (windowBits < 48) windowBits &= 15; -#endif - } - if (windowBits < 8 || windowBits > 15) { + state->strm = strm; + state->window = Z_NULL; + state->mode = HEAD; /* to pass state test in inflateReset2() */ + ret = inflateReset2(strm, windowBits); + if (ret != Z_OK) { ZFREE(strm, state); strm->state = Z_NULL; - return Z_STREAM_ERROR; } - state->wbits = (unsigned)windowBits; - state->window = Z_NULL; - return inflateReset(strm); + return ret; } int ZEXPORT inflateInit_(strm, version, stream_size) @@ -192,6 +244,27 @@ int stream_size; return inflateInit2_(strm, DEF_WBITS, version, stream_size); } +int ZEXPORT inflatePrime(strm, bits, value) +z_streamp strm; +int bits; +int value; +{ + struct inflate_state FAR *state; + + if (inflateStateCheck(strm)) return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + if (bits < 0) { + state->hold = 0; + state->bits = 0; + return Z_OK; + } + if (bits > 16 || state->bits + (uInt)bits > 32) return Z_STREAM_ERROR; + value &= (1L << bits) - 1; + state->hold += (unsigned)value << state->bits; + state->bits += (uInt)bits; + return Z_OK; +} + /* Return state with length and distance decoding tables and index sizes set to fixed code decoding. Normally this returns fixed tables from inffixed.h. @@ -286,8 +359,8 @@ void makefixed() low = 0; for (;;) { if ((low % 7) == 0) printf("\n "); - printf("{%u,%u,%d}", state.lencode[low].op, state.lencode[low].bits, - state.lencode[low].val); + printf("{%u,%u,%d}", (low & 127) == 99 ? 64 : state.lencode[low].op, + state.lencode[low].bits, state.lencode[low].val); if (++low == size) break; putchar(','); } @@ -320,12 +393,13 @@ void makefixed() output will fall in the output data, making match copies simpler and faster. The advantage may be dependent on the size of the processor's data caches. */ -local int updatewindow(strm, out) +local int updatewindow(strm, end, copy) z_streamp strm; -unsigned out; +const Bytef *end; +unsigned copy; { struct inflate_state FAR *state; - unsigned copy, dist; + unsigned dist; state = (struct inflate_state FAR *)strm->state; @@ -340,30 +414,29 @@ unsigned out; /* if window not in use yet, initialize */ if (state->wsize == 0) { state->wsize = 1U << state->wbits; - state->write = 0; + state->wnext = 0; state->whave = 0; } /* copy state->wsize or less output bytes into the circular window */ - copy = out - strm->avail_out; if (copy >= state->wsize) { - zmemcpy(state->window, strm->next_out - state->wsize, state->wsize); - state->write = 0; + zmemcpy(state->window, end - state->wsize, state->wsize); + state->wnext = 0; state->whave = state->wsize; } else { - dist = state->wsize - state->write; + dist = state->wsize - state->wnext; if (dist > copy) dist = copy; - zmemcpy(state->window + state->write, strm->next_out - copy, dist); + zmemcpy(state->window + state->wnext, end - copy, dist); copy -= dist; if (copy) { - zmemcpy(state->window, strm->next_out - copy, copy); - state->write = copy; + zmemcpy(state->window, end - copy, copy); + state->wnext = copy; state->whave = state->wsize; } else { - state->write += dist; - if (state->write == state->wsize) state->write = 0; + state->wnext += dist; + if (state->wnext == state->wsize) state->wnext = 0; if (state->whave < state->wsize) state->whave += dist; } } @@ -464,11 +537,6 @@ unsigned out; bits -= bits & 7; \ } while (0) -/* Reverse the bytes in a 32-bit value */ -#define REVERSE(q) \ - ((((q) >> 24) & 0xff) + (((q) >> 8) & 0xff00) + \ - (((q) & 0xff00) << 8) + (((q) & 0xff) << 24)) - /* inflate() uses a state machine to process as much input data and generate as much output data as possible before returning. The state machine is @@ -556,7 +624,7 @@ z_streamp strm; int flush; { struct inflate_state FAR *state; - unsigned char FAR *next; /* next input */ + z_const unsigned char FAR *next; /* next input */ unsigned char FAR *put; /* next output */ unsigned have, left; /* available input and output */ unsigned long hold; /* bit buffer */ @@ -564,7 +632,7 @@ int flush; unsigned in, out; /* save starting available input and output */ unsigned copy; /* number of stored or match bytes to copy */ unsigned char FAR *from; /* where to copy match bytes from */ - code this; /* current decoding table entry */ + code here; /* current decoding table entry */ code last; /* parent table entry */ unsigned len; /* length to copy for repeats, bits to drop */ int ret; /* return code */ @@ -574,7 +642,7 @@ int flush; static const unsigned short order[19] = /* permutation of code lengths */ {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15}; - if (strm == Z_NULL || strm->state == Z_NULL || strm->next_out == Z_NULL || + if (inflateStateCheck(strm) || strm->next_out == Z_NULL || (strm->next_in == Z_NULL && strm->avail_in != 0)) return Z_STREAM_ERROR; @@ -594,6 +662,8 @@ int flush; NEEDBITS(16); #ifdef GUNZIP if ((state->wrap & 2) && hold == 0x8b1f) { /* gzip header */ + if (state->wbits == 0) + state->wbits = 15; state->check = crc32(0L, Z_NULL, 0); CRC2(state->check, hold); INITBITS(); @@ -619,7 +689,9 @@ int flush; } DROPBITS(4); len = BITS(4) + 8; - if (len > state->wbits) { + if (state->wbits == 0) + state->wbits = len; + if (len > 15 || len > state->wbits) { strm->msg = (char *)"invalid window size"; state->mode = BAD; break; @@ -646,14 +718,16 @@ int flush; } if (state->head != Z_NULL) state->head->text = (int)((hold >> 8) & 1); - if (state->flags & 0x0200) CRC2(state->check, hold); + if ((state->flags & 0x0200) && (state->wrap & 4)) + CRC2(state->check, hold); INITBITS(); state->mode = TIME; case TIME: NEEDBITS(32); if (state->head != Z_NULL) state->head->time = hold; - if (state->flags & 0x0200) CRC4(state->check, hold); + if ((state->flags & 0x0200) && (state->wrap & 4)) + CRC4(state->check, hold); INITBITS(); state->mode = OS; case OS: @@ -662,7 +736,8 @@ int flush; state->head->xflags = (int)(hold & 0xff); state->head->os = (int)(hold >> 8); } - if (state->flags & 0x0200) CRC2(state->check, hold); + if ((state->flags & 0x0200) && (state->wrap & 4)) + CRC2(state->check, hold); INITBITS(); state->mode = EXLEN; case EXLEN: @@ -671,7 +746,8 @@ int flush; state->length = (unsigned)(hold); if (state->head != Z_NULL) state->head->extra_len = (unsigned)hold; - if (state->flags & 0x0200) CRC2(state->check, hold); + if ((state->flags & 0x0200) && (state->wrap & 4)) + CRC2(state->check, hold); INITBITS(); } else if (state->head != Z_NULL) @@ -689,7 +765,7 @@ int flush; len + copy > state->head->extra_max ? state->head->extra_max - len : copy); } - if (state->flags & 0x0200) + if ((state->flags & 0x0200) && (state->wrap & 4)) state->check = crc32(state->check, next, copy); have -= copy; next += copy; @@ -708,9 +784,9 @@ int flush; if (state->head != Z_NULL && state->head->name != Z_NULL && state->length < state->head->name_max) - state->head->name[state->length++] = len; + state->head->name[state->length++] = (Bytef)len; } while (len && copy < have); - if (state->flags & 0x0200) + if ((state->flags & 0x0200) && (state->wrap & 4)) state->check = crc32(state->check, next, copy); have -= copy; next += copy; @@ -729,9 +805,9 @@ int flush; if (state->head != Z_NULL && state->head->comment != Z_NULL && state->length < state->head->comm_max) - state->head->comment[state->length++] = len; + state->head->comment[state->length++] = (Bytef)len; } while (len && copy < have); - if (state->flags & 0x0200) + if ((state->flags & 0x0200) && (state->wrap & 4)) state->check = crc32(state->check, next, copy); have -= copy; next += copy; @@ -743,7 +819,7 @@ int flush; case HCRC: if (state->flags & 0x0200) { NEEDBITS(16); - if (hold != (state->check & 0xffff)) { + if ((state->wrap & 4) && hold != (state->check & 0xffff)) { strm->msg = (char *)"header crc mismatch"; state->mode = BAD; break; @@ -760,7 +836,7 @@ int flush; #endif case DICTID: NEEDBITS(32); - strm->adler = state->check = REVERSE(hold); + strm->adler = state->check = ZSWAP32(hold); INITBITS(); state->mode = DICT; case DICT: @@ -771,7 +847,7 @@ int flush; strm->adler = state->check = adler32(0L, Z_NULL, 0); state->mode = TYPE; case TYPE: - if (flush == Z_BLOCK) goto inf_leave; + if (flush == Z_BLOCK || flush == Z_TREES) goto inf_leave; case TYPEDO: if (state->last) { BYTEBITS(); @@ -791,7 +867,11 @@ int flush; fixedtables(state); Tracev((stderr, "inflate: fixed codes block%s\n", state->last ? " (last)" : "")); - state->mode = LEN; /* decode codes */ + state->mode = LEN_; /* decode codes */ + if (flush == Z_TREES) { + DROPBITS(2); + goto inf_leave; + } break; case 2: /* dynamic block */ Tracev((stderr, "inflate: dynamic codes block%s\n", @@ -816,6 +896,9 @@ int flush; Tracev((stderr, "inflate: stored length %u\n", state->length)); INITBITS(); + state->mode = COPY_; + if (flush == Z_TREES) goto inf_leave; + case COPY_: state->mode = COPY; case COPY: copy = state->length; @@ -861,7 +944,7 @@ int flush; while (state->have < 19) state->lens[order[state->have++]] = 0; state->next = state->codes; - state->lencode = (code const FAR *)(state->next); + state->lencode = (const code FAR *)(state->next); state->lenbits = 7; ret = inflate_table(CODES, state->lens, 19, &(state->next), &(state->lenbits), state->work); @@ -876,19 +959,18 @@ int flush; case CODELENS: while (state->have < state->nlen + state->ndist) { for (;;) { - this = state->lencode[BITS(state->lenbits)]; - if ((unsigned)(this.bits) <= bits) break; + here = state->lencode[BITS(state->lenbits)]; + if ((unsigned)(here.bits) <= bits) break; PULLBYTE(); } - if (this.val < 16) { - NEEDBITS(this.bits); - DROPBITS(this.bits); - state->lens[state->have++] = this.val; + if (here.val < 16) { + DROPBITS(here.bits); + state->lens[state->have++] = here.val; } else { - if (this.val == 16) { - NEEDBITS(this.bits + 2); - DROPBITS(this.bits); + if (here.val == 16) { + NEEDBITS(here.bits + 2); + DROPBITS(here.bits); if (state->have == 0) { strm->msg = (char *)"invalid bit length repeat"; state->mode = BAD; @@ -898,16 +980,16 @@ int flush; copy = 3 + BITS(2); DROPBITS(2); } - else if (this.val == 17) { - NEEDBITS(this.bits + 3); - DROPBITS(this.bits); + else if (here.val == 17) { + NEEDBITS(here.bits + 3); + DROPBITS(here.bits); len = 0; copy = 3 + BITS(3); DROPBITS(3); } else { - NEEDBITS(this.bits + 7); - DROPBITS(this.bits); + NEEDBITS(here.bits + 7); + DROPBITS(here.bits); len = 0; copy = 11 + BITS(7); DROPBITS(7); @@ -925,9 +1007,18 @@ int flush; /* handle error breaks in while */ if (state->mode == BAD) break; - /* build code tables */ + /* check for end-of-block code (better have one) */ + if (state->lens[256] == 0) { + strm->msg = (char *)"invalid code -- missing end-of-block"; + state->mode = BAD; + break; + } + + /* build code tables -- note: do not change the lenbits or distbits + values here (9 and 6) without reading the comments in inftrees.h + concerning the ENOUGH constants, which depend on those values */ state->next = state->codes; - state->lencode = (code const FAR *)(state->next); + state->lencode = (const code FAR *)(state->next); state->lenbits = 9; ret = inflate_table(LENS, state->lens, state->nlen, &(state->next), &(state->lenbits), state->work); @@ -936,7 +1027,7 @@ int flush; state->mode = BAD; break; } - state->distcode = (code const FAR *)(state->next); + state->distcode = (const code FAR *)(state->next); state->distbits = 6; ret = inflate_table(DISTS, state->lens + state->nlen, state->ndist, &(state->next), &(state->distbits), state->work); @@ -946,88 +1037,102 @@ int flush; break; } Tracev((stderr, "inflate: codes ok\n")); + state->mode = LEN_; + if (flush == Z_TREES) goto inf_leave; + case LEN_: state->mode = LEN; case LEN: if (have >= 6 && left >= 258) { RESTORE(); inflate_fast(strm, out); LOAD(); + if (state->mode == TYPE) + state->back = -1; break; } + state->back = 0; for (;;) { - this = state->lencode[BITS(state->lenbits)]; - if ((unsigned)(this.bits) <= bits) break; + here = state->lencode[BITS(state->lenbits)]; + if ((unsigned)(here.bits) <= bits) break; PULLBYTE(); } - if (this.op && (this.op & 0xf0) == 0) { - last = this; + if (here.op && (here.op & 0xf0) == 0) { + last = here; for (;;) { - this = state->lencode[last.val + + here = state->lencode[last.val + (BITS(last.bits + last.op) >> last.bits)]; - if ((unsigned)(last.bits + this.bits) <= bits) break; + if ((unsigned)(last.bits + here.bits) <= bits) break; PULLBYTE(); } DROPBITS(last.bits); + state->back += last.bits; } - DROPBITS(this.bits); - state->length = (unsigned)this.val; - if ((int)(this.op) == 0) { - Tracevv((stderr, this.val >= 0x20 && this.val < 0x7f ? + DROPBITS(here.bits); + state->back += here.bits; + state->length = (unsigned)here.val; + if ((int)(here.op) == 0) { + Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? "inflate: literal '%c'\n" : - "inflate: literal 0x%02x\n", this.val)); + "inflate: literal 0x%02x\n", here.val)); state->mode = LIT; break; } - if (this.op & 32) { + if (here.op & 32) { Tracevv((stderr, "inflate: end of block\n")); + state->back = -1; state->mode = TYPE; break; } - if (this.op & 64) { + if (here.op & 64) { strm->msg = (char *)"invalid literal/length code"; state->mode = BAD; break; } - state->extra = (unsigned)(this.op) & 15; + state->extra = (unsigned)(here.op) & 15; state->mode = LENEXT; case LENEXT: if (state->extra) { NEEDBITS(state->extra); state->length += BITS(state->extra); DROPBITS(state->extra); + state->back += state->extra; } Tracevv((stderr, "inflate: length %u\n", state->length)); + state->was = state->length; state->mode = DIST; case DIST: for (;;) { - this = state->distcode[BITS(state->distbits)]; - if ((unsigned)(this.bits) <= bits) break; + here = state->distcode[BITS(state->distbits)]; + if ((unsigned)(here.bits) <= bits) break; PULLBYTE(); } - if ((this.op & 0xf0) == 0) { - last = this; + if ((here.op & 0xf0) == 0) { + last = here; for (;;) { - this = state->distcode[last.val + + here = state->distcode[last.val + (BITS(last.bits + last.op) >> last.bits)]; - if ((unsigned)(last.bits + this.bits) <= bits) break; + if ((unsigned)(last.bits + here.bits) <= bits) break; PULLBYTE(); } DROPBITS(last.bits); + state->back += last.bits; } - DROPBITS(this.bits); - if (this.op & 64) { + DROPBITS(here.bits); + state->back += here.bits; + if (here.op & 64) { strm->msg = (char *)"invalid distance code"; state->mode = BAD; break; } - state->offset = (unsigned)this.val; - state->extra = (unsigned)(this.op) & 15; + state->offset = (unsigned)here.val; + state->extra = (unsigned)(here.op) & 15; state->mode = DISTEXT; case DISTEXT: if (state->extra) { NEEDBITS(state->extra); state->offset += BITS(state->extra); DROPBITS(state->extra); + state->back += state->extra; } #ifdef INFLATE_STRICT if (state->offset > state->dmax) { @@ -1036,11 +1141,6 @@ int flush; break; } #endif - if (state->offset > state->whave + out - left) { - strm->msg = (char *)"invalid distance too far back"; - state->mode = BAD; - break; - } Tracevv((stderr, "inflate: distance %u\n", state->offset)); state->mode = MATCH; case MATCH: @@ -1048,12 +1148,32 @@ int flush; copy = out - left; if (state->offset > copy) { /* copy from window */ copy = state->offset - copy; - if (copy > state->write) { - copy -= state->write; + if (copy > state->whave) { + if (state->sane) { + strm->msg = (char *)"invalid distance too far back"; + state->mode = BAD; + break; + } +#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR + Trace((stderr, "inflate.c too far\n")); + copy -= state->whave; + if (copy > state->length) copy = state->length; + if (copy > left) copy = left; + left -= copy; + state->length -= copy; + do { + *put++ = 0; + } while (--copy); + if (state->length == 0) state->mode = LEN; + break; +#endif + } + if (copy > state->wnext) { + copy -= state->wnext; from = state->window + (state->wsize - copy); } else - from = state->window + (state->write - copy); + from = state->window + (state->wnext - copy); if (copy > state->length) copy = state->length; } else { /* copy from output */ @@ -1080,15 +1200,15 @@ int flush; out -= left; strm->total_out += out; state->total += out; - if (out) + if ((state->wrap & 4) && out) strm->adler = state->check = UPDATE(state->check, put - out, out); out = left; - if (( + if ((state->wrap & 4) && ( #ifdef GUNZIP state->flags ? hold : #endif - REVERSE(hold)) != state->check) { + ZSWAP32(hold)) != state->check) { strm->msg = (char *)"incorrect data check"; state->mode = BAD; break; @@ -1132,8 +1252,9 @@ int flush; */ inf_leave: RESTORE(); - if (state->wsize || (state->mode < CHECK && out != strm->avail_out)) - if (updatewindow(strm, out)) { + if (state->wsize || (out != strm->avail_out && state->mode < BAD && + (state->mode < CHECK || flush != Z_FINISH))) + if (updatewindow(strm, strm->next_out, out - strm->avail_out)) { state->mode = MEM; return Z_MEM_ERROR; } @@ -1142,11 +1263,12 @@ int flush; strm->total_in += in; strm->total_out += out; state->total += out; - if (state->wrap && out) + if ((state->wrap & 4) && out) strm->adler = state->check = UPDATE(state->check, strm->next_out - out, out); - strm->data_type = state->bits + (state->last ? 64 : 0) + - (state->mode == TYPE ? 128 : 0); + strm->data_type = (int)state->bits + (state->last ? 64 : 0) + + (state->mode == TYPE ? 128 : 0) + + (state->mode == LEN_ || state->mode == COPY_ ? 256 : 0); if (((in == 0 && out == 0) || flush == Z_FINISH) && ret == Z_OK) ret = Z_BUF_ERROR; return ret; @@ -1156,7 +1278,7 @@ int ZEXPORT inflateEnd(strm) z_streamp strm; { struct inflate_state FAR *state; - if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0) + if (inflateStateCheck(strm)) return Z_STREAM_ERROR; state = (struct inflate_state FAR *)strm->state; if (state->window != Z_NULL) ZFREE(strm, state->window); @@ -1166,43 +1288,59 @@ z_streamp strm; return Z_OK; } +int ZEXPORT inflateGetDictionary(strm, dictionary, dictLength) +z_streamp strm; +Bytef *dictionary; +uInt *dictLength; +{ + struct inflate_state FAR *state; + + /* check state */ + if (inflateStateCheck(strm)) return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + + /* copy dictionary */ + if (state->whave && dictionary != Z_NULL) { + zmemcpy(dictionary, state->window + state->wnext, + state->whave - state->wnext); + zmemcpy(dictionary + state->whave - state->wnext, + state->window, state->wnext); + } + if (dictLength != Z_NULL) + *dictLength = state->whave; + return Z_OK; +} + int ZEXPORT inflateSetDictionary(strm, dictionary, dictLength) z_streamp strm; const Bytef *dictionary; uInt dictLength; { struct inflate_state FAR *state; - unsigned long id; + unsigned long dictid; + int ret; /* check state */ - if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + if (inflateStateCheck(strm)) return Z_STREAM_ERROR; state = (struct inflate_state FAR *)strm->state; if (state->wrap != 0 && state->mode != DICT) return Z_STREAM_ERROR; - /* check for correct dictionary id */ + /* check for correct dictionary identifier */ if (state->mode == DICT) { - id = adler32(0L, Z_NULL, 0); - id = adler32(id, dictionary, dictLength); - if (id != state->check) + dictid = adler32(0L, Z_NULL, 0); + dictid = adler32(dictid, dictionary, dictLength); + if (dictid != state->check) return Z_DATA_ERROR; } - /* copy dictionary to window */ - if (updatewindow(strm, strm->avail_out)) { + /* copy dictionary to window using updatewindow(), which will amend the + existing dictionary if appropriate */ + ret = updatewindow(strm, dictionary + dictLength, dictLength); + if (ret) { state->mode = MEM; return Z_MEM_ERROR; } - if (dictLength > state->wsize) { - zmemcpy(state->window, dictionary + dictLength - state->wsize, - state->wsize); - state->whave = state->wsize; - } - else { - zmemcpy(state->window + state->wsize - dictLength, dictionary, - dictLength); - state->whave = dictLength; - } state->havedict = 1; Tracev((stderr, "inflate: dictionary set\n")); return Z_OK; @@ -1215,7 +1353,7 @@ gz_headerp head; struct inflate_state FAR *state; /* check state */ - if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + if (inflateStateCheck(strm)) return Z_STREAM_ERROR; state = (struct inflate_state FAR *)strm->state; if ((state->wrap & 2) == 0) return Z_STREAM_ERROR; @@ -1238,7 +1376,7 @@ gz_headerp head; */ local unsigned syncsearch(have, buf, len) unsigned FAR *have; -unsigned char FAR *buf; +const unsigned char FAR *buf; unsigned len; { unsigned got; @@ -1268,7 +1406,7 @@ z_streamp strm; struct inflate_state FAR *state; /* check parameters */ - if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + if (inflateStateCheck(strm)) return Z_STREAM_ERROR; state = (struct inflate_state FAR *)strm->state; if (strm->avail_in == 0 && state->bits < 8) return Z_BUF_ERROR; @@ -1315,7 +1453,7 @@ z_streamp strm; { struct inflate_state FAR *state; - if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + if (inflateStateCheck(strm)) return Z_STREAM_ERROR; state = (struct inflate_state FAR *)strm->state; return state->mode == STORED && state->bits == 0; } @@ -1330,8 +1468,7 @@ z_streamp source; unsigned wsize; /* check input */ - if (dest == Z_NULL || source == Z_NULL || source->state == Z_NULL || - source->zalloc == (alloc_func)0 || source->zfree == (free_func)0) + if (inflateStateCheck(source) || dest == Z_NULL) return Z_STREAM_ERROR; state = (struct inflate_state FAR *)source->state; @@ -1350,8 +1487,9 @@ z_streamp source; } /* copy state */ - zmemcpy(dest, source, sizeof(z_stream)); - zmemcpy(copy, state, sizeof(struct inflate_state)); + zmemcpy((voidpf)dest, (voidpf)source, sizeof(z_stream)); + zmemcpy((voidpf)copy, (voidpf)state, sizeof(struct inflate_state)); + copy->strm = dest; if (state->lencode >= state->codes && state->lencode <= state->codes + ENOUGH - 1) { copy->lencode = copy->codes + (state->lencode - state->codes); @@ -1366,3 +1504,58 @@ z_streamp source; dest->state = (struct internal_state FAR *)copy; return Z_OK; } + +int ZEXPORT inflateUndermine(strm, subvert) +z_streamp strm; +int subvert; +{ + struct inflate_state FAR *state; + + if (inflateStateCheck(strm)) return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; +#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR + state->sane = !subvert; + return Z_OK; +#else + (void)subvert; + state->sane = 1; + return Z_DATA_ERROR; +#endif +} + +int ZEXPORT inflateValidate(strm, check) +z_streamp strm; +int check; +{ + struct inflate_state FAR *state; + + if (inflateStateCheck(strm)) return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + if (check) + state->wrap |= 4; + else + state->wrap &= ~4; + return Z_OK; +} + +long ZEXPORT inflateMark(strm) +z_streamp strm; +{ + struct inflate_state FAR *state; + + if (inflateStateCheck(strm)) + return -(1L << 16); + state = (struct inflate_state FAR *)strm->state; + return (long)(((unsigned long)((long)state->back)) << 16) + + (state->mode == COPY ? state->length : + (state->mode == MATCH ? state->was - state->length : 0)); +} + +unsigned long ZEXPORT inflateCodesUsed(strm) +z_streamp strm; +{ + struct inflate_state FAR *state; + if (inflateStateCheck(strm)) return (unsigned long)-1; + state = (struct inflate_state FAR *)strm->state; + return (unsigned long)(state->next - state->codes); +} diff --git a/zlib/inflate.h b/zlib/inflate.h index 07bd3e78a7c7..a46cce6b6d05 100644 --- a/zlib/inflate.h +++ b/zlib/inflate.h @@ -1,5 +1,5 @@ /* inflate.h -- internal inflate state definition - * Copyright (C) 1995-2004 Mark Adler + * Copyright (C) 1995-2016 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -18,7 +18,7 @@ /* Possible inflate modes between inflate() calls */ typedef enum { - HEAD, /* i: waiting for magic header */ + HEAD = 16180, /* i: waiting for magic header */ FLAGS, /* i: waiting for method and flags (gzip) */ TIME, /* i: waiting for modification time (gzip) */ OS, /* i: waiting for extra flags and operating system (gzip) */ @@ -32,11 +32,13 @@ typedef enum { TYPE, /* i: waiting for type bits, including last-flag bit */ TYPEDO, /* i: same, but skip check to exit inflate on new block */ STORED, /* i: waiting for stored size (length and complement) */ + COPY_, /* i/o: same as COPY below, but only first time in */ COPY, /* i/o: waiting for input or output to copy stored block */ TABLE, /* i: waiting for dynamic block table lengths */ LENLENS, /* i: waiting for code length code lengths */ CODELENS, /* i: waiting for length/lit and distance code lengths */ - LEN, /* i: waiting for length/lit code */ + LEN_, /* i: same as LEN below, but only first time in */ + LEN, /* i: waiting for length/lit/eob code */ LENEXT, /* i: waiting for length extra bits */ DIST, /* i: waiting for distance code */ DISTEXT, /* i: waiting for distance extra bits */ @@ -53,19 +55,21 @@ typedef enum { /* State transitions between above modes - - (most modes can go to the BAD or MEM mode -- not shown for clarity) + (most modes can go to BAD or MEM on error -- not shown for clarity) Process header: - HEAD -> (gzip) or (zlib) - (gzip) -> FLAGS -> TIME -> OS -> EXLEN -> EXTRA -> NAME - NAME -> COMMENT -> HCRC -> TYPE + HEAD -> (gzip) or (zlib) or (raw) + (gzip) -> FLAGS -> TIME -> OS -> EXLEN -> EXTRA -> NAME -> COMMENT -> + HCRC -> TYPE (zlib) -> DICTID or TYPE DICTID -> DICT -> TYPE + (raw) -> TYPEDO Read deflate blocks: - TYPE -> STORED or TABLE or LEN or CHECK - STORED -> COPY -> TYPE - TABLE -> LENLENS -> CODELENS -> LEN - Read deflate codes: + TYPE -> TYPEDO -> STORED or TABLE or LEN_ or CHECK + STORED -> COPY_ -> COPY -> TYPE + TABLE -> LENLENS -> CODELENS -> LEN_ + LEN_ -> LEN + Read deflate codes in fixed or dynamic block: LEN -> LENEXT or LIT or TYPE LENEXT -> DIST -> DISTEXT -> MATCH -> LEN LIT -> LEN @@ -73,11 +77,14 @@ typedef enum { CHECK -> LENGTH -> DONE */ -/* state maintained between inflate() calls. Approximately 7K bytes. */ +/* State maintained between inflate() calls -- approximately 7K bytes, not + including the allocated sliding window, which is up to 32K bytes. */ struct inflate_state { + z_streamp strm; /* pointer back to this zlib stream */ inflate_mode mode; /* current inflate mode */ int last; /* true if processing last block */ - int wrap; /* bit 0 true for zlib, bit 1 true for gzip */ + int wrap; /* bit 0 true for zlib, bit 1 true for gzip, + bit 2 true to validate check value */ int havedict; /* true if dictionary provided */ int flags; /* gzip header method and flags (0 if zlib) */ unsigned dmax; /* zlib header max distance (INFLATE_STRICT) */ @@ -88,7 +95,7 @@ struct inflate_state { unsigned wbits; /* log base 2 of requested window size */ unsigned wsize; /* window size or zero if not using window */ unsigned whave; /* valid bytes in the window */ - unsigned write; /* window write index */ + unsigned wnext; /* window write index */ unsigned char FAR *window; /* allocated sliding window, if needed */ /* bit accumulator */ unsigned long hold; /* input bit accumulator */ @@ -112,4 +119,7 @@ struct inflate_state { unsigned short lens[320]; /* temporary storage for code lengths */ unsigned short work[288]; /* work area for code table building */ code codes[ENOUGH]; /* space for code tables */ + int sane; /* if false, allow invalid distance too far */ + int back; /* bits back of last unprocessed length/lit */ + unsigned was; /* initial length of match */ }; diff --git a/zlib/inftrees.c b/zlib/inftrees.c index 8a9c13ff03d8..2ea08fc13ea8 100644 --- a/zlib/inftrees.c +++ b/zlib/inftrees.c @@ -1,5 +1,5 @@ /* inftrees.c -- generate Huffman trees for efficient decoding - * Copyright (C) 1995-2005 Mark Adler + * Copyright (C) 1995-2017 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -9,7 +9,7 @@ #define MAXBITS 15 const char inflate_copyright[] = - " inflate 1.2.3 Copyright 1995-2005 Mark Adler "; + " inflate 1.2.11 Copyright 1995-2017 Mark Adler "; /* If you use the zlib library in a product, an acknowledgment is welcome in the documentation of your product. If for some reason you cannot @@ -29,7 +29,7 @@ const char inflate_copyright[] = table index bits. It will differ if the request is greater than the longest code or if it is less than the shortest code. */ -int inflate_table(type, lens, codes, table, bits, work) +int ZLIB_INTERNAL inflate_table(type, lens, codes, table, bits, work) codetype type; unsigned short FAR *lens; unsigned codes; @@ -50,11 +50,11 @@ unsigned short FAR *work; unsigned fill; /* index for replicating entries */ unsigned low; /* low bits for current root entry */ unsigned mask; /* mask for low root bits */ - code this; /* table entry for duplication */ + code here; /* table entry for duplication */ code FAR *next; /* next available space in table */ const unsigned short FAR *base; /* base value table to use */ const unsigned short FAR *extra; /* extra bits table to use */ - int end; /* use base and extra for symbol > end */ + unsigned match; /* use base and extra for symbol >= match */ unsigned short count[MAXBITS+1]; /* number of codes of each length */ unsigned short offs[MAXBITS+1]; /* offsets in table for each length */ static const unsigned short lbase[31] = { /* Length codes 257..285 base */ @@ -62,7 +62,7 @@ unsigned short FAR *work; 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0}; static const unsigned short lext[31] = { /* Length codes 257..285 extra */ 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, - 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 201, 196}; + 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 77, 202}; static const unsigned short dbase[32] = { /* Distance codes 0..29 base */ 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, @@ -115,15 +115,15 @@ unsigned short FAR *work; if (count[max] != 0) break; if (root > max) root = max; if (max == 0) { /* no symbols to code at all */ - this.op = (unsigned char)64; /* invalid code marker */ - this.bits = (unsigned char)1; - this.val = (unsigned short)0; - *(*table)++ = this; /* make a table to force an error */ - *(*table)++ = this; + here.op = (unsigned char)64; /* invalid code marker */ + here.bits = (unsigned char)1; + here.val = (unsigned short)0; + *(*table)++ = here; /* make a table to force an error */ + *(*table)++ = here; *bits = 1; return 0; /* no symbols, but wait for decoding to report error */ } - for (min = 1; min <= MAXBITS; min++) + for (min = 1; min < max; min++) if (count[min] != 0) break; if (root < min) root = min; @@ -166,11 +166,10 @@ unsigned short FAR *work; entered in the tables. used keeps track of how many table entries have been allocated from the - provided *table space. It is checked when a LENS table is being made - against the space in *table, ENOUGH, minus the maximum space needed by - the worst case distance code, MAXD. This should never happen, but the - sufficiency of ENOUGH has not been proven exhaustively, hence the check. - This assumes that when type == LENS, bits == 9. + provided *table space. It is checked for LENS and DIST tables against + the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in + the initial root table size constants. See the comments in inftrees.h + for more information. sym increments through all symbols, and the loop terminates when all codes of length max, i.e. all codes, have been processed. This @@ -182,19 +181,17 @@ unsigned short FAR *work; switch (type) { case CODES: base = extra = work; /* dummy value--not used */ - end = 19; + match = 20; break; case LENS: base = lbase; - base -= 257; extra = lext; - extra -= 257; - end = 256; + match = 257; break; - default: /* DISTS */ + default: /* DISTS */ base = dbase; extra = dext; - end = -1; + match = 0; } /* initialize state for loop */ @@ -209,24 +206,25 @@ unsigned short FAR *work; mask = used - 1; /* mask for comparing low */ /* check available table space */ - if (type == LENS && used >= ENOUGH - MAXD) + if ((type == LENS && used > ENOUGH_LENS) || + (type == DISTS && used > ENOUGH_DISTS)) return 1; /* process all codes and make table entries */ for (;;) { /* create table entry */ - this.bits = (unsigned char)(len - drop); - if ((int)(work[sym]) < end) { - this.op = (unsigned char)0; - this.val = work[sym]; + here.bits = (unsigned char)(len - drop); + if (work[sym] + 1U < match) { + here.op = (unsigned char)0; + here.val = work[sym]; } - else if ((int)(work[sym]) > end) { - this.op = (unsigned char)(extra[work[sym]]); - this.val = base[work[sym]]; + else if (work[sym] >= match) { + here.op = (unsigned char)(extra[work[sym] - match]); + here.val = base[work[sym] - match]; } else { - this.op = (unsigned char)(32 + 64); /* end of block */ - this.val = 0; + here.op = (unsigned char)(32 + 64); /* end of block */ + here.val = 0; } /* replicate for those indices with low len bits equal to huff */ @@ -235,7 +233,7 @@ unsigned short FAR *work; min = fill; /* save offset to next table */ do { fill -= incr; - next[(huff >> drop) + fill] = this; + next[(huff >> drop) + fill] = here; } while (fill != 0); /* backwards increment the len-bit code huff */ @@ -277,7 +275,8 @@ unsigned short FAR *work; /* check for enough space */ used += 1U << curr; - if (type == LENS && used >= ENOUGH - MAXD) + if ((type == LENS && used > ENOUGH_LENS) || + (type == DISTS && used > ENOUGH_DISTS)) return 1; /* point entry in root table to sub-table */ @@ -288,38 +287,14 @@ unsigned short FAR *work; } } - /* - Fill in rest of table for incomplete codes. This loop is similar to the - loop above in incrementing huff for table indices. It is assumed that - len is equal to curr + drop, so there is no loop needed to increment - through high index bits. When the current sub-table is filled, the loop - drops back to the root table to fill in any remaining entries there. - */ - this.op = (unsigned char)64; /* invalid code marker */ - this.bits = (unsigned char)(len - drop); - this.val = (unsigned short)0; - while (huff != 0) { - /* when done with sub-table, drop back to root table */ - if (drop != 0 && (huff & mask) != low) { - drop = 0; - len = root; - next = *table; - this.bits = (unsigned char)len; - } - - /* put invalid code marker in table */ - next[huff >> drop] = this; - - /* backwards increment the len-bit code huff */ - incr = 1U << (len - 1); - while (huff & incr) - incr >>= 1; - if (incr != 0) { - huff &= incr - 1; - huff += incr; - } - else - huff = 0; + /* fill in remaining table entry if code is incomplete (guaranteed to have + at most one remaining entry, since if the code is incomplete, the + maximum code length that was allowed to get this far is one bit) */ + if (huff != 0) { + here.op = (unsigned char)64; /* invalid code marker */ + here.bits = (unsigned char)(len - drop); + here.val = (unsigned short)0; + next[huff] = here; } /* set return parameters */ diff --git a/zlib/inftrees.h b/zlib/inftrees.h index b1104c87e769..baa53a0b1a19 100644 --- a/zlib/inftrees.h +++ b/zlib/inftrees.h @@ -1,5 +1,5 @@ /* inftrees.h -- header to use inftrees.c - * Copyright (C) 1995-2005 Mark Adler + * Copyright (C) 1995-2005, 2010 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -35,21 +35,28 @@ typedef struct { 01000000 - invalid code */ -/* Maximum size of dynamic tree. The maximum found in a long but non- - exhaustive search was 1444 code structures (852 for length/literals - and 592 for distances, the latter actually the result of an - exhaustive search). The true maximum is not known, but the value - below is more than safe. */ -#define ENOUGH 2048 -#define MAXD 592 +/* Maximum size of the dynamic table. The maximum number of code structures is + 1444, which is the sum of 852 for literal/length codes and 592 for distance + codes. These values were found by exhaustive searches using the program + examples/enough.c found in the zlib distribtution. The arguments to that + program are the number of symbols, the initial root table size, and the + maximum bit length of a code. "enough 286 9 15" for literal/length codes + returns returns 852, and "enough 30 6 15" for distance codes returns 592. + The initial root table size (9 or 6) is found in the fifth argument of the + inflate_table() calls in inflate.c and infback.c. If the root table size is + changed, then these maximum sizes would be need to be recalculated and + updated. */ +#define ENOUGH_LENS 852 +#define ENOUGH_DISTS 592 +#define ENOUGH (ENOUGH_LENS+ENOUGH_DISTS) -/* Type of code to build for inftable() */ +/* Type of code to build for inflate_table() */ typedef enum { CODES, LENS, DISTS } codetype; -extern int inflate_table OF((codetype type, unsigned short FAR *lens, +int ZLIB_INTERNAL inflate_table OF((codetype type, unsigned short FAR *lens, unsigned codes, code FAR * FAR *table, unsigned FAR *bits, unsigned short FAR *work)); diff --git a/zlib/make_vms.com b/zlib/make_vms.com new file mode 100644 index 000000000000..65e9d0cbc8e1 --- /dev/null +++ b/zlib/make_vms.com @@ -0,0 +1,867 @@ +$! make libz under VMS written by +$! Martin P.J. Zinser +$! +$! In case of problems with the install you might contact me at +$! zinser@zinser.no-ip.info(preferred) or +$! martin.zinser@eurexchange.com (work) +$! +$! Make procedure history for Zlib +$! +$!------------------------------------------------------------------------------ +$! Version history +$! 0.01 20060120 First version to receive a number +$! 0.02 20061008 Adapt to new Makefile.in +$! 0.03 20091224 Add support for large file check +$! 0.04 20100110 Add new gzclose, gzlib, gzread, gzwrite +$! 0.05 20100221 Exchange zlibdefs.h by zconf.h.in +$! 0.06 20120111 Fix missing amiss_err, update zconf_h.in, fix new exmples +$! subdir path, update module search in makefile.in +$! 0.07 20120115 Triggered by work done by Alexey Chupahin completly redesigned +$! shared image creation +$! 0.08 20120219 Make it work on VAX again, pre-load missing symbols to shared +$! image +$! 0.09 20120305 SMS. P1 sets builder ("MMK", "MMS", " " (built-in)). +$! "" -> automatic, preference: MMK, MMS, built-in. +$! +$ on error then goto err_exit +$! +$ true = 1 +$ false = 0 +$ tmpnam = "temp_" + f$getjpi("","pid") +$ tt = tmpnam + ".txt" +$ tc = tmpnam + ".c" +$ th = tmpnam + ".h" +$ define/nolog tconfig 'th' +$ its_decc = false +$ its_vaxc = false +$ its_gnuc = false +$ s_case = False +$! +$! Setup variables holding "config" information +$! +$ Make = "''p1'" +$ name = "Zlib" +$ version = "?.?.?" +$ v_string = "ZLIB_VERSION" +$ v_file = "zlib.h" +$ ccopt = "/include = []" +$ lopts = "" +$ dnsrl = "" +$ aconf_in_file = "zconf.h.in#zconf.h_in#zconf_h.in" +$ conf_check_string = "" +$ linkonly = false +$ optfile = name + ".opt" +$ mapfile = name + ".map" +$ libdefs = "" +$ vax = f$getsyi("HW_MODEL").lt.1024 +$ axp = f$getsyi("HW_MODEL").ge.1024 .and. f$getsyi("HW_MODEL").lt.4096 +$ ia64 = f$getsyi("HW_MODEL").ge.4096 +$! +$! 2012-03-05 SMS. +$! Why is this needed? And if it is needed, why not simply ".not. vax"? +$! +$!!! if axp .or. ia64 then set proc/parse=extended +$! +$ whoami = f$parse(f$environment("Procedure"),,,,"NO_CONCEAL") +$ mydef = F$parse(whoami,,,"DEVICE") +$ mydir = f$parse(whoami,,,"DIRECTORY") - "][" +$ myproc = f$parse(whoami,,,"Name") + f$parse(whoami,,,"type") +$! +$! Check for MMK/MMS +$! +$ if (Make .eqs. "") +$ then +$ If F$Search ("Sys$System:MMS.EXE") .nes. "" Then Make = "MMS" +$ If F$Type (MMK) .eqs. "STRING" Then Make = "MMK" +$ else +$ Make = f$edit( Make, "trim") +$ endif +$! +$ gosub find_version +$! +$ open/write topt tmp.opt +$ open/write optf 'optfile' +$! +$ gosub check_opts +$! +$! Look for the compiler used +$! +$ gosub check_compiler +$ close topt +$ close optf +$! +$ if its_decc +$ then +$ ccopt = "/prefix=all" + ccopt +$ if f$trnlnm("SYS") .eqs. "" +$ then +$ if axp +$ then +$ define sys sys$library: +$ else +$ ccopt = "/decc" + ccopt +$ define sys decc$library_include: +$ endif +$ endif +$! +$! 2012-03-05 SMS. +$! Why /NAMES = AS_IS? Why not simply ".not. vax"? And why not on VAX? +$! +$ if axp .or. ia64 +$ then +$ ccopt = ccopt + "/name=as_is/opt=(inline=speed)" +$ s_case = true +$ endif +$ endif +$ if its_vaxc .or. its_gnuc +$ then +$ if f$trnlnm("SYS").eqs."" then define sys sys$library: +$ endif +$! +$! Build a fake configure input header +$! +$ open/write conf_hin config.hin +$ write conf_hin "#undef _LARGEFILE64_SOURCE" +$ close conf_hin +$! +$! +$ i = 0 +$FIND_ACONF: +$ fname = f$element(i,"#",aconf_in_file) +$ if fname .eqs. "#" then goto AMISS_ERR +$ if f$search(fname) .eqs. "" +$ then +$ i = i + 1 +$ goto find_aconf +$ endif +$ open/read/err=aconf_err aconf_in 'fname' +$ open/write aconf zconf.h +$ACONF_LOOP: +$ read/end_of_file=aconf_exit aconf_in line +$ work = f$edit(line, "compress,trim") +$ if f$extract(0,6,work) .nes. "#undef" +$ then +$ if f$extract(0,12,work) .nes. "#cmakedefine" +$ then +$ write aconf line +$ endif +$ else +$ cdef = f$element(1," ",work) +$ gosub check_config +$ endif +$ goto aconf_loop +$ACONF_EXIT: +$ write aconf "" +$ write aconf "/* VMS specifics added by make_vms.com: */" +$ write aconf "#define VMS 1" +$ write aconf "#include " +$ write aconf "#include " +$ write aconf "#ifdef _LARGEFILE" +$ write aconf "# define off64_t __off64_t" +$ write aconf "# define fopen64 fopen" +$ write aconf "# define fseeko64 fseeko" +$ write aconf "# define lseek64 lseek" +$ write aconf "# define ftello64 ftell" +$ write aconf "#endif" +$ write aconf "#if !defined( __VAX) && (__CRTL_VER >= 70312000)" +$ write aconf "# define HAVE_VSNPRINTF" +$ write aconf "#endif" +$ close aconf_in +$ close aconf +$ if f$search("''th'") .nes. "" then delete 'th';* +$! Build the thing plain or with mms +$! +$ write sys$output "Compiling Zlib sources ..." +$ if make.eqs."" +$ then +$ if (f$search( "example.obj;*") .nes. "") then delete example.obj;* +$ if (f$search( "minigzip.obj;*") .nes. "") then delete minigzip.obj;* +$ CALL MAKE adler32.OBJ "CC ''CCOPT' adler32" - + adler32.c zlib.h zconf.h +$ CALL MAKE compress.OBJ "CC ''CCOPT' compress" - + compress.c zlib.h zconf.h +$ CALL MAKE crc32.OBJ "CC ''CCOPT' crc32" - + crc32.c zlib.h zconf.h +$ CALL MAKE deflate.OBJ "CC ''CCOPT' deflate" - + deflate.c deflate.h zutil.h zlib.h zconf.h +$ CALL MAKE gzclose.OBJ "CC ''CCOPT' gzclose" - + gzclose.c zutil.h zlib.h zconf.h +$ CALL MAKE gzlib.OBJ "CC ''CCOPT' gzlib" - + gzlib.c zutil.h zlib.h zconf.h +$ CALL MAKE gzread.OBJ "CC ''CCOPT' gzread" - + gzread.c zutil.h zlib.h zconf.h +$ CALL MAKE gzwrite.OBJ "CC ''CCOPT' gzwrite" - + gzwrite.c zutil.h zlib.h zconf.h +$ CALL MAKE infback.OBJ "CC ''CCOPT' infback" - + infback.c zutil.h inftrees.h inflate.h inffast.h inffixed.h +$ CALL MAKE inffast.OBJ "CC ''CCOPT' inffast" - + inffast.c zutil.h zlib.h zconf.h inffast.h +$ CALL MAKE inflate.OBJ "CC ''CCOPT' inflate" - + inflate.c zutil.h zlib.h zconf.h infblock.h +$ CALL MAKE inftrees.OBJ "CC ''CCOPT' inftrees" - + inftrees.c zutil.h zlib.h zconf.h inftrees.h +$ CALL MAKE trees.OBJ "CC ''CCOPT' trees" - + trees.c deflate.h zutil.h zlib.h zconf.h +$ CALL MAKE uncompr.OBJ "CC ''CCOPT' uncompr" - + uncompr.c zlib.h zconf.h +$ CALL MAKE zutil.OBJ "CC ''CCOPT' zutil" - + zutil.c zutil.h zlib.h zconf.h +$ write sys$output "Building Zlib ..." +$ CALL MAKE libz.OLB "lib/crea libz.olb *.obj" *.OBJ +$ write sys$output "Building example..." +$ CALL MAKE example.OBJ "CC ''CCOPT' [.test]example" - + [.test]example.c zlib.h zconf.h +$ call make example.exe "LINK example,libz.olb/lib" example.obj libz.olb +$ write sys$output "Building minigzip..." +$ CALL MAKE minigzip.OBJ "CC ''CCOPT' [.test]minigzip" - + [.test]minigzip.c zlib.h zconf.h +$ call make minigzip.exe - + "LINK minigzip,libz.olb/lib" - + minigzip.obj libz.olb +$ else +$ gosub crea_mms +$ write sys$output "Make ''name' ''version' with ''Make' " +$ 'make' +$ endif +$! +$! Create shareable image +$! +$ gosub crea_olist +$ write sys$output "Creating libzshr.exe" +$ call map_2_shopt 'mapfile' 'optfile' +$ LINK_'lopts'/SHARE=libzshr.exe modules.opt/opt,'optfile'/opt +$ write sys$output "Zlib build completed" +$ delete/nolog tmp.opt;* +$ exit +$AMISS_ERR: +$ write sys$output "No source for config.hin found." +$ write sys$output "Tried any of ''aconf_in_file'" +$ goto err_exit +$CC_ERR: +$ write sys$output "C compiler required to build ''name'" +$ goto err_exit +$ERR_EXIT: +$ set message/facil/ident/sever/text +$ close/nolog optf +$ close/nolog topt +$ close/nolog aconf_in +$ close/nolog aconf +$ close/nolog out +$ close/nolog min +$ close/nolog mod +$ close/nolog h_in +$ write sys$output "Exiting..." +$ exit 2 +$! +$! +$MAKE: SUBROUTINE !SUBROUTINE TO CHECK DEPENDENCIES +$ V = 'F$Verify(0) +$! P1 = What we are trying to make +$! P2 = Command to make it +$! P3 - P8 What it depends on +$ +$ If F$Search(P1) .Eqs. "" Then Goto Makeit +$ Time = F$CvTime(F$File(P1,"RDT")) +$arg=3 +$Loop: +$ Argument = P'arg +$ If Argument .Eqs. "" Then Goto Exit +$ El=0 +$Loop2: +$ File = F$Element(El," ",Argument) +$ If File .Eqs. " " Then Goto Endl +$ AFile = "" +$Loop3: +$ OFile = AFile +$ AFile = F$Search(File) +$ If AFile .Eqs. "" .Or. AFile .Eqs. OFile Then Goto NextEl +$ If F$CvTime(F$File(AFile,"RDT")) .Ges. Time Then Goto Makeit +$ Goto Loop3 +$NextEL: +$ El = El + 1 +$ Goto Loop2 +$EndL: +$ arg=arg+1 +$ If arg .Le. 8 Then Goto Loop +$ Goto Exit +$ +$Makeit: +$ VV=F$VERIFY(0) +$ write sys$output P2 +$ 'P2 +$ VV='F$Verify(VV) +$Exit: +$ If V Then Set Verify +$ENDSUBROUTINE +$!------------------------------------------------------------------------------ +$! +$! Check command line options and set symbols accordingly +$! +$!------------------------------------------------------------------------------ +$! Version history +$! 0.01 20041206 First version to receive a number +$! 0.02 20060126 Add new "HELP" target +$ CHECK_OPTS: +$ i = 1 +$ OPT_LOOP: +$ if i .lt. 9 +$ then +$ cparm = f$edit(p'i',"upcase") +$! +$! Check if parameter actually contains something +$! +$ if f$edit(cparm,"trim") .nes. "" +$ then +$ if cparm .eqs. "DEBUG" +$ then +$ ccopt = ccopt + "/noopt/deb" +$ lopts = lopts + "/deb" +$ endif +$ if f$locate("CCOPT=",cparm) .lt. f$length(cparm) +$ then +$ start = f$locate("=",cparm) + 1 +$ len = f$length(cparm) - start +$ ccopt = ccopt + f$extract(start,len,cparm) +$ if f$locate("AS_IS",f$edit(ccopt,"UPCASE")) .lt. f$length(ccopt) - + then s_case = true +$ endif +$ if cparm .eqs. "LINK" then linkonly = true +$ if f$locate("LOPTS=",cparm) .lt. f$length(cparm) +$ then +$ start = f$locate("=",cparm) + 1 +$ len = f$length(cparm) - start +$ lopts = lopts + f$extract(start,len,cparm) +$ endif +$ if f$locate("CC=",cparm) .lt. f$length(cparm) +$ then +$ start = f$locate("=",cparm) + 1 +$ len = f$length(cparm) - start +$ cc_com = f$extract(start,len,cparm) + if (cc_com .nes. "DECC") .and. - + (cc_com .nes. "VAXC") .and. - + (cc_com .nes. "GNUC") +$ then +$ write sys$output "Unsupported compiler choice ''cc_com' ignored" +$ write sys$output "Use DECC, VAXC, or GNUC instead" +$ else +$ if cc_com .eqs. "DECC" then its_decc = true +$ if cc_com .eqs. "VAXC" then its_vaxc = true +$ if cc_com .eqs. "GNUC" then its_gnuc = true +$ endif +$ endif +$ if f$locate("MAKE=",cparm) .lt. f$length(cparm) +$ then +$ start = f$locate("=",cparm) + 1 +$ len = f$length(cparm) - start +$ mmks = f$extract(start,len,cparm) +$ if (mmks .eqs. "MMK") .or. (mmks .eqs. "MMS") +$ then +$ make = mmks +$ else +$ write sys$output "Unsupported make choice ''mmks' ignored" +$ write sys$output "Use MMK or MMS instead" +$ endif +$ endif +$ if cparm .eqs. "HELP" then gosub bhelp +$ endif +$ i = i + 1 +$ goto opt_loop +$ endif +$ return +$!------------------------------------------------------------------------------ +$! +$! Look for the compiler used +$! +$! Version history +$! 0.01 20040223 First version to receive a number +$! 0.02 20040229 Save/set value of decc$no_rooted_search_lists +$! 0.03 20060202 Extend handling of GNU C +$! 0.04 20090402 Compaq -> hp +$CHECK_COMPILER: +$ if (.not. (its_decc .or. its_vaxc .or. its_gnuc)) +$ then +$ its_decc = (f$search("SYS$SYSTEM:DECC$COMPILER.EXE") .nes. "") +$ its_vaxc = .not. its_decc .and. (F$Search("SYS$System:VAXC.Exe") .nes. "") +$ its_gnuc = .not. (its_decc .or. its_vaxc) .and. (f$trnlnm("gnu_cc") .nes. "") +$ endif +$! +$! Exit if no compiler available +$! +$ if (.not. (its_decc .or. its_vaxc .or. its_gnuc)) +$ then goto CC_ERR +$ else +$ if its_decc +$ then +$ write sys$output "CC compiler check ... hp C" +$ if f$trnlnm("decc$no_rooted_search_lists") .nes. "" +$ then +$ dnrsl = f$trnlnm("decc$no_rooted_search_lists") +$ endif +$ define/nolog decc$no_rooted_search_lists 1 +$ else +$ if its_vaxc then write sys$output "CC compiler check ... VAX C" +$ if its_gnuc +$ then +$ write sys$output "CC compiler check ... GNU C" +$ if f$trnlnm(topt) then write topt "gnu_cc:[000000]gcclib.olb/lib" +$ if f$trnlnm(optf) then write optf "gnu_cc:[000000]gcclib.olb/lib" +$ cc = "gcc" +$ endif +$ if f$trnlnm(topt) then write topt "sys$share:vaxcrtl.exe/share" +$ if f$trnlnm(optf) then write optf "sys$share:vaxcrtl.exe/share" +$ endif +$ endif +$ return +$!------------------------------------------------------------------------------ +$! +$! If MMS/MMK are available dump out the descrip.mms if required +$! +$CREA_MMS: +$ write sys$output "Creating descrip.mms..." +$ create descrip.mms +$ open/append out descrip.mms +$ copy sys$input: out +$ deck +# descrip.mms: MMS description file for building zlib on VMS +# written by Martin P.J. Zinser +# + +OBJS = adler32.obj, compress.obj, crc32.obj, gzclose.obj, gzlib.obj\ + gzread.obj, gzwrite.obj, uncompr.obj, infback.obj\ + deflate.obj, trees.obj, zutil.obj, inflate.obj, \ + inftrees.obj, inffast.obj + +$ eod +$ write out "CFLAGS=", ccopt +$ write out "LOPTS=", lopts +$ write out "all : example.exe minigzip.exe libz.olb" +$ copy sys$input: out +$ deck + @ write sys$output " Example applications available" + +libz.olb : libz.olb($(OBJS)) + @ write sys$output " libz available" + +example.exe : example.obj libz.olb + link $(LOPTS) example,libz.olb/lib + +minigzip.exe : minigzip.obj libz.olb + link $(LOPTS) minigzip,libz.olb/lib + +clean : + delete *.obj;*,libz.olb;*,*.opt;*,*.exe;* + + +# Other dependencies. +adler32.obj : adler32.c zutil.h zlib.h zconf.h +compress.obj : compress.c zlib.h zconf.h +crc32.obj : crc32.c zutil.h zlib.h zconf.h +deflate.obj : deflate.c deflate.h zutil.h zlib.h zconf.h +example.obj : [.test]example.c zlib.h zconf.h +gzclose.obj : gzclose.c zutil.h zlib.h zconf.h +gzlib.obj : gzlib.c zutil.h zlib.h zconf.h +gzread.obj : gzread.c zutil.h zlib.h zconf.h +gzwrite.obj : gzwrite.c zutil.h zlib.h zconf.h +inffast.obj : inffast.c zutil.h zlib.h zconf.h inftrees.h inffast.h +inflate.obj : inflate.c zutil.h zlib.h zconf.h +inftrees.obj : inftrees.c zutil.h zlib.h zconf.h inftrees.h +minigzip.obj : [.test]minigzip.c zlib.h zconf.h +trees.obj : trees.c deflate.h zutil.h zlib.h zconf.h +uncompr.obj : uncompr.c zlib.h zconf.h +zutil.obj : zutil.c zutil.h zlib.h zconf.h +infback.obj : infback.c zutil.h inftrees.h inflate.h inffast.h inffixed.h +$ eod +$ close out +$ return +$!------------------------------------------------------------------------------ +$! +$! Read list of core library sources from makefile.in and create options +$! needed to build shareable image +$! +$CREA_OLIST: +$ open/read min makefile.in +$ open/write mod modules.opt +$ src_check_list = "OBJZ =#OBJG =" +$MRLOOP: +$ read/end=mrdone min rec +$ i = 0 +$SRC_CHECK_LOOP: +$ src_check = f$element(i, "#", src_check_list) +$ i = i+1 +$ if src_check .eqs. "#" then goto mrloop +$ if (f$extract(0,6,rec) .nes. src_check) then goto src_check_loop +$ rec = rec - src_check +$ gosub extra_filnam +$ if (f$element(1,"\",rec) .eqs. "\") then goto mrloop +$MRSLOOP: +$ read/end=mrdone min rec +$ gosub extra_filnam +$ if (f$element(1,"\",rec) .nes. "\") then goto mrsloop +$MRDONE: +$ close min +$ close mod +$ return +$!------------------------------------------------------------------------------ +$! +$! Take record extracted in crea_olist and split it into single filenames +$! +$EXTRA_FILNAM: +$ myrec = f$edit(rec - "\", "trim,compress") +$ i = 0 +$FELOOP: +$ srcfil = f$element(i," ", myrec) +$ if (srcfil .nes. " ") +$ then +$ write mod f$parse(srcfil,,,"NAME"), ".obj" +$ i = i + 1 +$ goto feloop +$ endif +$ return +$!------------------------------------------------------------------------------ +$! +$! Find current Zlib version number +$! +$FIND_VERSION: +$ open/read h_in 'v_file' +$hloop: +$ read/end=hdone h_in rec +$ rec = f$edit(rec,"TRIM") +$ if (f$extract(0,1,rec) .nes. "#") then goto hloop +$ rec = f$edit(rec - "#", "TRIM") +$ if f$element(0," ",rec) .nes. "define" then goto hloop +$ if f$element(1," ",rec) .eqs. v_string +$ then +$ version = 'f$element(2," ",rec)' +$ goto hdone +$ endif +$ goto hloop +$hdone: +$ close h_in +$ return +$!------------------------------------------------------------------------------ +$! +$CHECK_CONFIG: +$! +$ in_ldef = f$locate(cdef,libdefs) +$ if (in_ldef .lt. f$length(libdefs)) +$ then +$ write aconf "#define ''cdef' 1" +$ libdefs = f$extract(0,in_ldef,libdefs) + - + f$extract(in_ldef + f$length(cdef) + 1, - + f$length(libdefs) - in_ldef - f$length(cdef) - 1, - + libdefs) +$ else +$ if (f$type('cdef') .eqs. "INTEGER") +$ then +$ write aconf "#define ''cdef' ", 'cdef' +$ else +$ if (f$type('cdef') .eqs. "STRING") +$ then +$ write aconf "#define ''cdef' ", """", '''cdef'', """" +$ else +$ gosub check_cc_def +$ endif +$ endif +$ endif +$ return +$!------------------------------------------------------------------------------ +$! +$! Check if this is a define relating to the properties of the C/C++ +$! compiler +$! +$ CHECK_CC_DEF: +$ if (cdef .eqs. "_LARGEFILE64_SOURCE") +$ then +$ copy sys$input: 'tc' +$ deck +#include "tconfig" +#define _LARGEFILE +#include + +int main(){ +FILE *fp; + fp = fopen("temp.txt","r"); + fseeko(fp,1,SEEK_SET); + fclose(fp); +} + +$ eod +$ test_inv = false +$ comm_h = false +$ gosub cc_prop_check +$ return +$ endif +$ write aconf "/* ", line, " */" +$ return +$!------------------------------------------------------------------------------ +$! +$! Check for properties of C/C++ compiler +$! +$! Version history +$! 0.01 20031020 First version to receive a number +$! 0.02 20031022 Added logic for defines with value +$! 0.03 20040309 Make sure local config file gets not deleted +$! 0.04 20041230 Also write include for configure run +$! 0.05 20050103 Add processing of "comment defines" +$CC_PROP_CHECK: +$ cc_prop = true +$ is_need = false +$ is_need = (f$extract(0,4,cdef) .eqs. "NEED") .or. (test_inv .eq. true) +$ if f$search(th) .eqs. "" then create 'th' +$ set message/nofac/noident/nosever/notext +$ on error then continue +$ cc 'tmpnam' +$ if .not. ($status) then cc_prop = false +$ on error then continue +$! The headers might lie about the capabilities of the RTL +$ link 'tmpnam',tmp.opt/opt +$ if .not. ($status) then cc_prop = false +$ set message/fac/ident/sever/text +$ on error then goto err_exit +$ delete/nolog 'tmpnam'.*;*/exclude='th' +$ if (cc_prop .and. .not. is_need) .or. - + (.not. cc_prop .and. is_need) +$ then +$ write sys$output "Checking for ''cdef'... yes" +$ if f$type('cdef_val'_yes) .nes. "" +$ then +$ if f$type('cdef_val'_yes) .eqs. "INTEGER" - + then call write_config f$fao("#define !AS !UL",cdef,'cdef_val'_yes) +$ if f$type('cdef_val'_yes) .eqs. "STRING" - + then call write_config f$fao("#define !AS !AS",cdef,'cdef_val'_yes) +$ else +$ call write_config f$fao("#define !AS 1",cdef) +$ endif +$ if (cdef .eqs. "HAVE_FSEEKO") .or. (cdef .eqs. "_LARGE_FILES") .or. - + (cdef .eqs. "_LARGEFILE64_SOURCE") then - + call write_config f$string("#define _LARGEFILE 1") +$ else +$ write sys$output "Checking for ''cdef'... no" +$ if (comm_h) +$ then + call write_config f$fao("/* !AS */",line) +$ else +$ if f$type('cdef_val'_no) .nes. "" +$ then +$ if f$type('cdef_val'_no) .eqs. "INTEGER" - + then call write_config f$fao("#define !AS !UL",cdef,'cdef_val'_no) +$ if f$type('cdef_val'_no) .eqs. "STRING" - + then call write_config f$fao("#define !AS !AS",cdef,'cdef_val'_no) +$ else +$ call write_config f$fao("#undef !AS",cdef) +$ endif +$ endif +$ endif +$ return +$!------------------------------------------------------------------------------ +$! +$! Check for properties of C/C++ compiler with multiple result values +$! +$! Version history +$! 0.01 20040127 First version +$! 0.02 20050103 Reconcile changes from cc_prop up to version 0.05 +$CC_MPROP_CHECK: +$ cc_prop = true +$ i = 1 +$ idel = 1 +$ MT_LOOP: +$ if f$type(result_'i') .eqs. "STRING" +$ then +$ set message/nofac/noident/nosever/notext +$ on error then continue +$ cc 'tmpnam'_'i' +$ if .not. ($status) then cc_prop = false +$ on error then continue +$! The headers might lie about the capabilities of the RTL +$ link 'tmpnam'_'i',tmp.opt/opt +$ if .not. ($status) then cc_prop = false +$ set message/fac/ident/sever/text +$ on error then goto err_exit +$ delete/nolog 'tmpnam'_'i'.*;* +$ if (cc_prop) +$ then +$ write sys$output "Checking for ''cdef'... ", mdef_'i' +$ if f$type(mdef_'i') .eqs. "INTEGER" - + then call write_config f$fao("#define !AS !UL",cdef,mdef_'i') +$ if f$type('cdef_val'_yes) .eqs. "STRING" - + then call write_config f$fao("#define !AS !AS",cdef,mdef_'i') +$ goto msym_clean +$ else +$ i = i + 1 +$ goto mt_loop +$ endif +$ endif +$ write sys$output "Checking for ''cdef'... no" +$ call write_config f$fao("#undef !AS",cdef) +$ MSYM_CLEAN: +$ if (idel .le. msym_max) +$ then +$ delete/sym mdef_'idel' +$ idel = idel + 1 +$ goto msym_clean +$ endif +$ return +$!------------------------------------------------------------------------------ +$! +$! Write configuration to both permanent and temporary config file +$! +$! Version history +$! 0.01 20031029 First version to receive a number +$! +$WRITE_CONFIG: SUBROUTINE +$ write aconf 'p1' +$ open/append confh 'th' +$ write confh 'p1' +$ close confh +$ENDSUBROUTINE +$!------------------------------------------------------------------------------ +$! +$! Analyze the project map file and create the symbol vector for a shareable +$! image from it +$! +$! Version history +$! 0.01 20120128 First version +$! 0.02 20120226 Add pre-load logic +$! +$ MAP_2_SHOPT: Subroutine +$! +$ SAY := "WRITE_ SYS$OUTPUT" +$! +$ IF F$SEARCH("''P1'") .EQS. "" +$ THEN +$ SAY "MAP_2_SHOPT-E-NOSUCHFILE: Error, inputfile ''p1' not available" +$ goto exit_m2s +$ ENDIF +$ IF "''P2'" .EQS. "" +$ THEN +$ SAY "MAP_2_SHOPT: Error, no output file provided" +$ goto exit_m2s +$ ENDIF +$! +$ module1 = "deflate#deflateEnd#deflateInit_#deflateParams#deflateSetDictionary" +$ module2 = "gzclose#gzerror#gzgetc#gzgets#gzopen#gzprintf#gzputc#gzputs#gzread" +$ module3 = "gzseek#gztell#inflate#inflateEnd#inflateInit_#inflateSetDictionary" +$ module4 = "inflateSync#uncompress#zlibVersion#compress" +$ open/read map 'p1 +$ if axp .or. ia64 +$ then +$ open/write aopt a.opt +$ open/write bopt b.opt +$ write aopt " CASE_SENSITIVE=YES" +$ write bopt "SYMBOL_VECTOR= (-" +$ mod_sym_num = 1 +$ MOD_SYM_LOOP: +$ if f$type(module'mod_sym_num') .nes. "" +$ then +$ mod_in = 0 +$ MOD_SYM_IN: +$ shared_proc = f$element(mod_in, "#", module'mod_sym_num') +$ if shared_proc .nes. "#" +$ then +$ write aopt f$fao(" symbol_vector=(!AS/!AS=PROCEDURE)",- + f$edit(shared_proc,"upcase"),shared_proc) +$ write bopt f$fao("!AS=PROCEDURE,-",shared_proc) +$ mod_in = mod_in + 1 +$ goto mod_sym_in +$ endif +$ mod_sym_num = mod_sym_num + 1 +$ goto mod_sym_loop +$ endif +$MAP_LOOP: +$ read/end=map_end map line +$ if (f$locate("{",line).lt. f$length(line)) .or. - + (f$locate("global:", line) .lt. f$length(line)) +$ then +$ proc = true +$ goto map_loop +$ endif +$ if f$locate("}",line).lt. f$length(line) then proc = false +$ if f$locate("local:", line) .lt. f$length(line) then proc = false +$ if proc +$ then +$ shared_proc = f$edit(line,"collapse") +$ chop_semi = f$locate(";", shared_proc) +$ if chop_semi .lt. f$length(shared_proc) then - + shared_proc = f$extract(0, chop_semi, shared_proc) +$ write aopt f$fao(" symbol_vector=(!AS/!AS=PROCEDURE)",- + f$edit(shared_proc,"upcase"),shared_proc) +$ write bopt f$fao("!AS=PROCEDURE,-",shared_proc) +$ endif +$ goto map_loop +$MAP_END: +$ close/nolog aopt +$ close/nolog bopt +$ open/append libopt 'p2' +$ open/read aopt a.opt +$ open/read bopt b.opt +$ALOOP: +$ read/end=aloop_end aopt line +$ write libopt line +$ goto aloop +$ALOOP_END: +$ close/nolog aopt +$ sv = "" +$BLOOP: +$ read/end=bloop_end bopt svn +$ if (svn.nes."") +$ then +$ if (sv.nes."") then write libopt sv +$ sv = svn +$ endif +$ goto bloop +$BLOOP_END: +$ write libopt f$extract(0,f$length(sv)-2,sv), "-" +$ write libopt ")" +$ close/nolog bopt +$ delete/nolog/noconf a.opt;*,b.opt;* +$ else +$ if vax +$ then +$ open/append libopt 'p2' +$ mod_sym_num = 1 +$ VMOD_SYM_LOOP: +$ if f$type(module'mod_sym_num') .nes. "" +$ then +$ mod_in = 0 +$ VMOD_SYM_IN: +$ shared_proc = f$element(mod_in, "#", module'mod_sym_num') +$ if shared_proc .nes. "#" +$ then +$ write libopt f$fao("UNIVERSAL=!AS",- + f$edit(shared_proc,"upcase")) +$ mod_in = mod_in + 1 +$ goto vmod_sym_in +$ endif +$ mod_sym_num = mod_sym_num + 1 +$ goto vmod_sym_loop +$ endif +$VMAP_LOOP: +$ read/end=vmap_end map line +$ if (f$locate("{",line).lt. f$length(line)) .or. - + (f$locate("global:", line) .lt. f$length(line)) +$ then +$ proc = true +$ goto vmap_loop +$ endif +$ if f$locate("}",line).lt. f$length(line) then proc = false +$ if f$locate("local:", line) .lt. f$length(line) then proc = false +$ if proc +$ then +$ shared_proc = f$edit(line,"collapse") +$ chop_semi = f$locate(";", shared_proc) +$ if chop_semi .lt. f$length(shared_proc) then - + shared_proc = f$extract(0, chop_semi, shared_proc) +$ write libopt f$fao("UNIVERSAL=!AS",- + f$edit(shared_proc,"upcase")) +$ endif +$ goto vmap_loop +$VMAP_END: +$ else +$ write sys$output "Unknown Architecture (Not VAX, AXP, or IA64)" +$ write sys$output "No options file created" +$ endif +$ endif +$ EXIT_M2S: +$ close/nolog map +$ close/nolog libopt +$ endsubroutine diff --git a/zlib/msdos/Makefile.bor b/zlib/msdos/Makefile.bor new file mode 100644 index 000000000000..3d12a2c25270 --- /dev/null +++ b/zlib/msdos/Makefile.bor @@ -0,0 +1,115 @@ +# Makefile for zlib +# Borland C++ +# Last updated: 15-Mar-2003 + +# To use, do "make -fmakefile.bor" +# To compile in small model, set below: MODEL=s + +# WARNING: the small model is supported but only for small values of +# MAX_WBITS and MAX_MEM_LEVEL. For example: +# -DMAX_WBITS=11 -DDEF_WBITS=11 -DMAX_MEM_LEVEL=3 +# If you wish to reduce the memory requirements (default 256K for big +# objects plus a few K), you can add to the LOC macro below: +# -DMAX_MEM_LEVEL=7 -DMAX_WBITS=14 +# See zconf.h for details about the memory requirements. + +# ------------ Turbo C++, Borland C++ ------------ + +# Optional nonstandard preprocessor flags (e.g. -DMAX_MEM_LEVEL=7) +# should be added to the environment via "set LOCAL_ZLIB=-DFOO" or added +# to the declaration of LOC here: +LOC = $(LOCAL_ZLIB) + +# type for CPU required: 0: 8086, 1: 80186, 2: 80286, 3: 80386, etc. +CPU_TYP = 0 + +# memory model: one of s, m, c, l (small, medium, compact, large) +MODEL=l + +# replace bcc with tcc for Turbo C++ 1.0, with bcc32 for the 32 bit version +CC=bcc +LD=bcc +AR=tlib + +# compiler flags +# replace "-O2" by "-O -G -a -d" for Turbo C++ 1.0 +CFLAGS=-O2 -Z -m$(MODEL) $(LOC) + +LDFLAGS=-m$(MODEL) -f- + + +# variables +ZLIB_LIB = zlib_$(MODEL).lib + +OBJ1 = adler32.obj compress.obj crc32.obj deflate.obj gzclose.obj gzlib.obj gzread.obj +OBJ2 = gzwrite.obj infback.obj inffast.obj inflate.obj inftrees.obj trees.obj uncompr.obj zutil.obj +OBJP1 = +adler32.obj+compress.obj+crc32.obj+deflate.obj+gzclose.obj+gzlib.obj+gzread.obj +OBJP2 = +gzwrite.obj+infback.obj+inffast.obj+inflate.obj+inftrees.obj+trees.obj+uncompr.obj+zutil.obj + + +# targets +all: $(ZLIB_LIB) example.exe minigzip.exe + +.c.obj: + $(CC) -c $(CFLAGS) $*.c + +adler32.obj: adler32.c zlib.h zconf.h + +compress.obj: compress.c zlib.h zconf.h + +crc32.obj: crc32.c zlib.h zconf.h crc32.h + +deflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h + +gzclose.obj: gzclose.c zlib.h zconf.h gzguts.h + +gzlib.obj: gzlib.c zlib.h zconf.h gzguts.h + +gzread.obj: gzread.c zlib.h zconf.h gzguts.h + +gzwrite.obj: gzwrite.c zlib.h zconf.h gzguts.h + +infback.obj: infback.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ + inffast.h inffixed.h + +inffast.obj: inffast.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ + inffast.h + +inflate.obj: inflate.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ + inffast.h inffixed.h + +inftrees.obj: inftrees.c zutil.h zlib.h zconf.h inftrees.h + +trees.obj: trees.c zutil.h zlib.h zconf.h deflate.h trees.h + +uncompr.obj: uncompr.c zlib.h zconf.h + +zutil.obj: zutil.c zutil.h zlib.h zconf.h + +example.obj: test/example.c zlib.h zconf.h + +minigzip.obj: test/minigzip.c zlib.h zconf.h + + +# the command line is cut to fit in the MS-DOS 128 byte limit: +$(ZLIB_LIB): $(OBJ1) $(OBJ2) + -del $(ZLIB_LIB) + $(AR) $(ZLIB_LIB) $(OBJP1) + $(AR) $(ZLIB_LIB) $(OBJP2) + +example.exe: example.obj $(ZLIB_LIB) + $(LD) $(LDFLAGS) example.obj $(ZLIB_LIB) + +minigzip.exe: minigzip.obj $(ZLIB_LIB) + $(LD) $(LDFLAGS) minigzip.obj $(ZLIB_LIB) + +test: example.exe minigzip.exe + example + echo hello world | minigzip | minigzip -d + +clean: + -del *.obj + -del *.lib + -del *.exe + -del zlib_*.bak + -del foo.gz diff --git a/zlib/msdos/Makefile.dj2 b/zlib/msdos/Makefile.dj2 new file mode 100644 index 000000000000..59d2037d69c4 --- /dev/null +++ b/zlib/msdos/Makefile.dj2 @@ -0,0 +1,104 @@ +# Makefile for zlib. Modified for djgpp v2.0 by F. J. Donahoe, 3/15/96. +# Copyright (C) 1995-1998 Jean-loup Gailly. +# For conditions of distribution and use, see copyright notice in zlib.h + +# To compile, or to compile and test, type: +# +# make -fmakefile.dj2; make test -fmakefile.dj2 +# +# To install libz.a, zconf.h and zlib.h in the djgpp directories, type: +# +# make install -fmakefile.dj2 +# +# after first defining LIBRARY_PATH and INCLUDE_PATH in djgpp.env as +# in the sample below if the pattern of the DJGPP distribution is to +# be followed. Remember that, while 'es around <=> are ignored in +# makefiles, they are *not* in batch files or in djgpp.env. +# - - - - - +# [make] +# INCLUDE_PATH=%\>;INCLUDE_PATH%%\DJDIR%\include +# LIBRARY_PATH=%\>;LIBRARY_PATH%%\DJDIR%\lib +# BUTT=-m486 +# - - - - - +# Alternately, these variables may be defined below, overriding the values +# in djgpp.env, as +# INCLUDE_PATH=c:\usr\include +# LIBRARY_PATH=c:\usr\lib + +CC=gcc + +#CFLAGS=-MMD -O +#CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7 +#CFLAGS=-MMD -g -DZLIB_DEBUG +CFLAGS=-MMD -O3 $(BUTT) -Wall -Wwrite-strings -Wpointer-arith -Wconversion \ + -Wstrict-prototypes -Wmissing-prototypes + +# If cp.exe is available, replace "copy /Y" with "cp -fp" . +CP=copy /Y +# If gnu install.exe is available, replace $(CP) with ginstall. +INSTALL=$(CP) +# The default value of RM is "rm -f." If "rm.exe" is found, comment out: +RM=del +LDLIBS=-L. -lz +LD=$(CC) -s -o +LDSHARED=$(CC) + +INCL=zlib.h zconf.h +LIBS=libz.a + +AR=ar rcs + +prefix=/usr/local +exec_prefix = $(prefix) + +OBJS = adler32.o compress.o crc32.o gzclose.o gzlib.o gzread.o gzwrite.o \ + uncompr.o deflate.o trees.o zutil.o inflate.o infback.o inftrees.o inffast.o + +OBJA = +# to use the asm code: make OBJA=match.o + +TEST_OBJS = example.o minigzip.o + +all: example.exe minigzip.exe + +check: test +test: all + ./example + echo hello world | .\minigzip | .\minigzip -d + +%.o : %.c + $(CC) $(CFLAGS) -c $< -o $@ + +libz.a: $(OBJS) $(OBJA) + $(AR) $@ $(OBJS) $(OBJA) + +%.exe : %.o $(LIBS) + $(LD) $@ $< $(LDLIBS) + +# INCLUDE_PATH and LIBRARY_PATH were set for [make] in djgpp.env . + +.PHONY : uninstall clean + +install: $(INCL) $(LIBS) + -@if not exist $(INCLUDE_PATH)\nul mkdir $(INCLUDE_PATH) + -@if not exist $(LIBRARY_PATH)\nul mkdir $(LIBRARY_PATH) + $(INSTALL) zlib.h $(INCLUDE_PATH) + $(INSTALL) zconf.h $(INCLUDE_PATH) + $(INSTALL) libz.a $(LIBRARY_PATH) + +uninstall: + $(RM) $(INCLUDE_PATH)\zlib.h + $(RM) $(INCLUDE_PATH)\zconf.h + $(RM) $(LIBRARY_PATH)\libz.a + +clean: + $(RM) *.d + $(RM) *.o + $(RM) *.exe + $(RM) libz.a + $(RM) foo.gz + +DEPS := $(wildcard *.d) +ifneq ($(DEPS),) +include $(DEPS) +endif diff --git a/zlib/msdos/Makefile.emx b/zlib/msdos/Makefile.emx new file mode 100644 index 000000000000..e30f67bed68e --- /dev/null +++ b/zlib/msdos/Makefile.emx @@ -0,0 +1,69 @@ +# Makefile for zlib. Modified for emx 0.9c by Chr. Spieler, 6/17/98. +# Copyright (C) 1995-1998 Jean-loup Gailly. +# For conditions of distribution and use, see copyright notice in zlib.h + +# To compile, or to compile and test, type: +# +# make -fmakefile.emx; make test -fmakefile.emx +# + +CC=gcc + +#CFLAGS=-MMD -O +#CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7 +#CFLAGS=-MMD -g -DZLIB_DEBUG +CFLAGS=-MMD -O3 $(BUTT) -Wall -Wwrite-strings -Wpointer-arith -Wconversion \ + -Wstrict-prototypes -Wmissing-prototypes + +# If cp.exe is available, replace "copy /Y" with "cp -fp" . +CP=copy /Y +# If gnu install.exe is available, replace $(CP) with ginstall. +INSTALL=$(CP) +# The default value of RM is "rm -f." If "rm.exe" is found, comment out: +RM=del +LDLIBS=-L. -lzlib +LD=$(CC) -s -o +LDSHARED=$(CC) + +INCL=zlib.h zconf.h +LIBS=zlib.a + +AR=ar rcs + +prefix=/usr/local +exec_prefix = $(prefix) + +OBJS = adler32.o compress.o crc32.o gzclose.o gzlib.o gzread.o gzwrite.o \ + uncompr.o deflate.o trees.o zutil.o inflate.o infback.o inftrees.o inffast.o + +TEST_OBJS = example.o minigzip.o + +all: example.exe minigzip.exe + +test: all + ./example + echo hello world | .\minigzip | .\minigzip -d + +%.o : %.c + $(CC) $(CFLAGS) -c $< -o $@ + +zlib.a: $(OBJS) + $(AR) $@ $(OBJS) + +%.exe : %.o $(LIBS) + $(LD) $@ $< $(LDLIBS) + + +.PHONY : clean + +clean: + $(RM) *.d + $(RM) *.o + $(RM) *.exe + $(RM) zlib.a + $(RM) foo.gz + +DEPS := $(wildcard *.d) +ifneq ($(DEPS),) +include $(DEPS) +endif diff --git a/zlib/msdos/Makefile.msc b/zlib/msdos/Makefile.msc new file mode 100644 index 000000000000..ae8378615ec6 --- /dev/null +++ b/zlib/msdos/Makefile.msc @@ -0,0 +1,112 @@ +# Makefile for zlib +# Microsoft C 5.1 or later +# Last updated: 19-Mar-2003 + +# To use, do "make makefile.msc" +# To compile in small model, set below: MODEL=S + +# If you wish to reduce the memory requirements (default 256K for big +# objects plus a few K), you can add to the LOC macro below: +# -DMAX_MEM_LEVEL=7 -DMAX_WBITS=14 +# See zconf.h for details about the memory requirements. + +# ------------- Microsoft C 5.1 and later ------------- + +# Optional nonstandard preprocessor flags (e.g. -DMAX_MEM_LEVEL=7) +# should be added to the environment via "set LOCAL_ZLIB=-DFOO" or added +# to the declaration of LOC here: +LOC = $(LOCAL_ZLIB) + +# Type for CPU required: 0: 8086, 1: 80186, 2: 80286, 3: 80386, etc. +CPU_TYP = 0 + +# Memory model: one of S, M, C, L (small, medium, compact, large) +MODEL=L + +CC=cl +CFLAGS=-nologo -A$(MODEL) -G$(CPU_TYP) -W3 -Oait -Gs $(LOC) +#-Ox generates bad code with MSC 5.1 +LIB_CFLAGS=-Zl $(CFLAGS) + +LD=link +LDFLAGS=/noi/e/st:0x1500/noe/farcall/packcode +# "/farcall/packcode" are only useful for `large code' memory models +# but should be a "no-op" for small code models. + + +# variables +ZLIB_LIB = zlib_$(MODEL).lib + +OBJ1 = adler32.obj compress.obj crc32.obj deflate.obj gzclose.obj gzlib.obj gzread.obj +OBJ2 = gzwrite.obj infback.obj inffast.obj inflate.obj inftrees.obj trees.obj uncompr.obj zutil.obj + + +# targets +all: $(ZLIB_LIB) example.exe minigzip.exe + +.c.obj: + $(CC) -c $(LIB_CFLAGS) $*.c + +adler32.obj: adler32.c zlib.h zconf.h + +compress.obj: compress.c zlib.h zconf.h + +crc32.obj: crc32.c zlib.h zconf.h crc32.h + +deflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h + +gzclose.obj: gzclose.c zlib.h zconf.h gzguts.h + +gzlib.obj: gzlib.c zlib.h zconf.h gzguts.h + +gzread.obj: gzread.c zlib.h zconf.h gzguts.h + +gzwrite.obj: gzwrite.c zlib.h zconf.h gzguts.h + +infback.obj: infback.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ + inffast.h inffixed.h + +inffast.obj: inffast.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ + inffast.h + +inflate.obj: inflate.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ + inffast.h inffixed.h + +inftrees.obj: inftrees.c zutil.h zlib.h zconf.h inftrees.h + +trees.obj: trees.c zutil.h zlib.h zconf.h deflate.h trees.h + +uncompr.obj: uncompr.c zlib.h zconf.h + +zutil.obj: zutil.c zutil.h zlib.h zconf.h + +example.obj: test/example.c zlib.h zconf.h + $(CC) -c $(CFLAGS) $*.c + +minigzip.obj: test/minigzip.c zlib.h zconf.h + $(CC) -c $(CFLAGS) $*.c + + +# the command line is cut to fit in the MS-DOS 128 byte limit: +$(ZLIB_LIB): $(OBJ1) $(OBJ2) + if exist $(ZLIB_LIB) del $(ZLIB_LIB) + lib $(ZLIB_LIB) $(OBJ1); + lib $(ZLIB_LIB) $(OBJ2); + +example.exe: example.obj $(ZLIB_LIB) + $(LD) $(LDFLAGS) example.obj,,,$(ZLIB_LIB); + +minigzip.exe: minigzip.obj $(ZLIB_LIB) + $(LD) $(LDFLAGS) minigzip.obj,,,$(ZLIB_LIB); + +test: example.exe minigzip.exe + example + echo hello world | minigzip | minigzip -d + +clean: + -del *.obj + -del *.lib + -del *.exe + -del *.map + -del zlib_*.bak + -del foo.gz diff --git a/zlib/msdos/Makefile.tc b/zlib/msdos/Makefile.tc new file mode 100644 index 000000000000..5aec82a9d58c --- /dev/null +++ b/zlib/msdos/Makefile.tc @@ -0,0 +1,100 @@ +# Makefile for zlib +# Turbo C 2.01, Turbo C++ 1.01 +# Last updated: 15-Mar-2003 + +# To use, do "make -fmakefile.tc" +# To compile in small model, set below: MODEL=s + +# WARNING: the small model is supported but only for small values of +# MAX_WBITS and MAX_MEM_LEVEL. For example: +# -DMAX_WBITS=11 -DMAX_MEM_LEVEL=3 +# If you wish to reduce the memory requirements (default 256K for big +# objects plus a few K), you can add to CFLAGS below: +# -DMAX_MEM_LEVEL=7 -DMAX_WBITS=14 +# See zconf.h for details about the memory requirements. + +# ------------ Turbo C 2.01, Turbo C++ 1.01 ------------ +MODEL=l +CC=tcc +LD=tcc +AR=tlib +# CFLAGS=-O2 -G -Z -m$(MODEL) -DMAX_WBITS=11 -DMAX_MEM_LEVEL=3 +CFLAGS=-O2 -G -Z -m$(MODEL) +LDFLAGS=-m$(MODEL) -f- + + +# variables +ZLIB_LIB = zlib_$(MODEL).lib + +OBJ1 = adler32.obj compress.obj crc32.obj deflate.obj gzclose.obj gzlib.obj gzread.obj +OBJ2 = gzwrite.obj infback.obj inffast.obj inflate.obj inftrees.obj trees.obj uncompr.obj zutil.obj +OBJP1 = +adler32.obj+compress.obj+crc32.obj+deflate.obj+gzclose.obj+gzlib.obj+gzread.obj +OBJP2 = +gzwrite.obj+infback.obj+inffast.obj+inflate.obj+inftrees.obj+trees.obj+uncompr.obj+zutil.obj + + +# targets +all: $(ZLIB_LIB) example.exe minigzip.exe + +.c.obj: + $(CC) -c $(CFLAGS) $*.c + +adler32.obj: adler32.c zlib.h zconf.h + +compress.obj: compress.c zlib.h zconf.h + +crc32.obj: crc32.c zlib.h zconf.h crc32.h + +deflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h + +gzclose.obj: gzclose.c zlib.h zconf.h gzguts.h + +gzlib.obj: gzlib.c zlib.h zconf.h gzguts.h + +gzread.obj: gzread.c zlib.h zconf.h gzguts.h + +gzwrite.obj: gzwrite.c zlib.h zconf.h gzguts.h + +infback.obj: infback.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ + inffast.h inffixed.h + +inffast.obj: inffast.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ + inffast.h + +inflate.obj: inflate.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ + inffast.h inffixed.h + +inftrees.obj: inftrees.c zutil.h zlib.h zconf.h inftrees.h + +trees.obj: trees.c zutil.h zlib.h zconf.h deflate.h trees.h + +uncompr.obj: uncompr.c zlib.h zconf.h + +zutil.obj: zutil.c zutil.h zlib.h zconf.h + +example.obj: test/example.c zlib.h zconf.h + +minigzip.obj: test/minigzip.c zlib.h zconf.h + + +# the command line is cut to fit in the MS-DOS 128 byte limit: +$(ZLIB_LIB): $(OBJ1) $(OBJ2) + -del $(ZLIB_LIB) + $(AR) $(ZLIB_LIB) $(OBJP1) + $(AR) $(ZLIB_LIB) $(OBJP2) + +example.exe: example.obj $(ZLIB_LIB) + $(LD) $(LDFLAGS) example.obj $(ZLIB_LIB) + +minigzip.exe: minigzip.obj $(ZLIB_LIB) + $(LD) $(LDFLAGS) minigzip.obj $(ZLIB_LIB) + +test: example.exe minigzip.exe + example + echo hello world | minigzip | minigzip -d + +clean: + -del *.obj + -del *.lib + -del *.exe + -del zlib_*.bak + -del foo.gz diff --git a/zlib/nintendods/README b/zlib/nintendods/README new file mode 100644 index 000000000000..ba7a37dbe8e9 --- /dev/null +++ b/zlib/nintendods/README @@ -0,0 +1,5 @@ +This Makefile requires devkitARM (http://www.devkitpro.org/category/devkitarm/) and works inside "contrib/nds". It is based on a devkitARM template. + +Eduardo Costa +January 3, 2009 + diff --git a/zlib/old/Makefile.emx b/zlib/old/Makefile.emx new file mode 100644 index 000000000000..612b03791583 --- /dev/null +++ b/zlib/old/Makefile.emx @@ -0,0 +1,69 @@ +# Makefile for zlib. Modified for emx/rsxnt by Chr. Spieler, 6/16/98. +# Copyright (C) 1995-1998 Jean-loup Gailly. +# For conditions of distribution and use, see copyright notice in zlib.h + +# To compile, or to compile and test, type: +# +# make -fmakefile.emx; make test -fmakefile.emx +# + +CC=gcc -Zwin32 + +#CFLAGS=-MMD -O +#CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7 +#CFLAGS=-MMD -g -DZLIB_DEBUG +CFLAGS=-MMD -O3 $(BUTT) -Wall -Wwrite-strings -Wpointer-arith -Wconversion \ + -Wstrict-prototypes -Wmissing-prototypes + +# If cp.exe is available, replace "copy /Y" with "cp -fp" . +CP=copy /Y +# If gnu install.exe is available, replace $(CP) with ginstall. +INSTALL=$(CP) +# The default value of RM is "rm -f." If "rm.exe" is found, comment out: +RM=del +LDLIBS=-L. -lzlib +LD=$(CC) -s -o +LDSHARED=$(CC) + +INCL=zlib.h zconf.h +LIBS=zlib.a + +AR=ar rcs + +prefix=/usr/local +exec_prefix = $(prefix) + +OBJS = adler32.o compress.o crc32.o deflate.o gzclose.o gzlib.o gzread.o \ + gzwrite.o infback.o inffast.o inflate.o inftrees.o trees.o uncompr.o zutil.o + +TEST_OBJS = example.o minigzip.o + +all: example.exe minigzip.exe + +test: all + ./example + echo hello world | .\minigzip | .\minigzip -d + +%.o : %.c + $(CC) $(CFLAGS) -c $< -o $@ + +zlib.a: $(OBJS) + $(AR) $@ $(OBJS) + +%.exe : %.o $(LIBS) + $(LD) $@ $< $(LDLIBS) + + +.PHONY : clean + +clean: + $(RM) *.d + $(RM) *.o + $(RM) *.exe + $(RM) zlib.a + $(RM) foo.gz + +DEPS := $(wildcard *.d) +ifneq ($(DEPS),) +include $(DEPS) +endif diff --git a/zlib/old/Makefile.riscos b/zlib/old/Makefile.riscos new file mode 100644 index 000000000000..57e29d3fba91 --- /dev/null +++ b/zlib/old/Makefile.riscos @@ -0,0 +1,151 @@ +# Project: zlib_1_03 +# Patched for zlib 1.1.2 rw@shadow.org.uk 19980430 +# test works out-of-the-box, installs `somewhere' on demand + +# Toolflags: +CCflags = -c -depend !Depend -IC: -g -throwback -DRISCOS -fah +C++flags = -c -depend !Depend -IC: -throwback +Linkflags = -aif -c++ -o $@ +ObjAsmflags = -throwback -NoCache -depend !Depend +CMHGflags = +LibFileflags = -c -l -o $@ +Squeezeflags = -o $@ + +# change the line below to where _you_ want the library installed. +libdest = lib:zlib + +# Final targets: +@.lib: @.o.adler32 @.o.compress @.o.crc32 @.o.deflate @.o.gzio \ + @.o.infblock @.o.infcodes @.o.inffast @.o.inflate @.o.inftrees @.o.infutil @.o.trees \ + @.o.uncompr @.o.zutil + LibFile $(LibFileflags) @.o.adler32 @.o.compress @.o.crc32 @.o.deflate \ + @.o.gzio @.o.infblock @.o.infcodes @.o.inffast @.o.inflate @.o.inftrees @.o.infutil \ + @.o.trees @.o.uncompr @.o.zutil +test: @.minigzip @.example @.lib + @copy @.lib @.libc A~C~DF~L~N~P~Q~RS~TV + @echo running tests: hang on. + @/@.minigzip -f -9 libc + @/@.minigzip -d libc-gz + @/@.minigzip -f -1 libc + @/@.minigzip -d libc-gz + @/@.minigzip -h -9 libc + @/@.minigzip -d libc-gz + @/@.minigzip -h -1 libc + @/@.minigzip -d libc-gz + @/@.minigzip -9 libc + @/@.minigzip -d libc-gz + @/@.minigzip -1 libc + @/@.minigzip -d libc-gz + @diff @.lib @.libc + @echo that should have reported '@.lib and @.libc identical' if you have diff. + @/@.example @.fred @.fred + @echo that will have given lots of hello!'s. + +@.minigzip: @.o.minigzip @.lib C:o.Stubs + Link $(Linkflags) @.o.minigzip @.lib C:o.Stubs +@.example: @.o.example @.lib C:o.Stubs + Link $(Linkflags) @.o.example @.lib C:o.Stubs + +install: @.lib + cdir $(libdest) + cdir $(libdest).h + @copy @.h.zlib $(libdest).h.zlib A~C~DF~L~N~P~Q~RS~TV + @copy @.h.zconf $(libdest).h.zconf A~C~DF~L~N~P~Q~RS~TV + @copy @.lib $(libdest).lib A~C~DF~L~N~P~Q~RS~TV + @echo okay, installed zlib in $(libdest) + +clean:; remove @.minigzip + remove @.example + remove @.libc + -wipe @.o.* F~r~cV + remove @.fred + +# User-editable dependencies: +.c.o: + cc $(ccflags) -o $@ $< + +# Static dependencies: + +# Dynamic dependencies: +o.example: c.example +o.example: h.zlib +o.example: h.zconf +o.minigzip: c.minigzip +o.minigzip: h.zlib +o.minigzip: h.zconf +o.adler32: c.adler32 +o.adler32: h.zlib +o.adler32: h.zconf +o.compress: c.compress +o.compress: h.zlib +o.compress: h.zconf +o.crc32: c.crc32 +o.crc32: h.zlib +o.crc32: h.zconf +o.deflate: c.deflate +o.deflate: h.deflate +o.deflate: h.zutil +o.deflate: h.zlib +o.deflate: h.zconf +o.gzio: c.gzio +o.gzio: h.zutil +o.gzio: h.zlib +o.gzio: h.zconf +o.infblock: c.infblock +o.infblock: h.zutil +o.infblock: h.zlib +o.infblock: h.zconf +o.infblock: h.infblock +o.infblock: h.inftrees +o.infblock: h.infcodes +o.infblock: h.infutil +o.infcodes: c.infcodes +o.infcodes: h.zutil +o.infcodes: h.zlib +o.infcodes: h.zconf +o.infcodes: h.inftrees +o.infcodes: h.infblock +o.infcodes: h.infcodes +o.infcodes: h.infutil +o.infcodes: h.inffast +o.inffast: c.inffast +o.inffast: h.zutil +o.inffast: h.zlib +o.inffast: h.zconf +o.inffast: h.inftrees +o.inffast: h.infblock +o.inffast: h.infcodes +o.inffast: h.infutil +o.inffast: h.inffast +o.inflate: c.inflate +o.inflate: h.zutil +o.inflate: h.zlib +o.inflate: h.zconf +o.inflate: h.infblock +o.inftrees: c.inftrees +o.inftrees: h.zutil +o.inftrees: h.zlib +o.inftrees: h.zconf +o.inftrees: h.inftrees +o.inftrees: h.inffixed +o.infutil: c.infutil +o.infutil: h.zutil +o.infutil: h.zlib +o.infutil: h.zconf +o.infutil: h.infblock +o.infutil: h.inftrees +o.infutil: h.infcodes +o.infutil: h.infutil +o.trees: c.trees +o.trees: h.deflate +o.trees: h.zutil +o.trees: h.zlib +o.trees: h.zconf +o.trees: h.trees +o.uncompr: c.uncompr +o.uncompr: h.zlib +o.uncompr: h.zconf +o.zutil: c.zutil +o.zutil: h.zutil +o.zutil: h.zlib +o.zutil: h.zconf diff --git a/zlib/old/README b/zlib/old/README new file mode 100644 index 000000000000..800bf079827b --- /dev/null +++ b/zlib/old/README @@ -0,0 +1,3 @@ +This directory contains files that have not been updated for zlib 1.2.x + +(Volunteers are encouraged to help clean this up. Thanks.) diff --git a/zlib/old/descrip.mms b/zlib/old/descrip.mms new file mode 100644 index 000000000000..7066da5b557e --- /dev/null +++ b/zlib/old/descrip.mms @@ -0,0 +1,48 @@ +# descrip.mms: MMS description file for building zlib on VMS +# written by Martin P.J. Zinser + +cc_defs = +c_deb = + +.ifdef __DECC__ +pref = /prefix=all +.endif + +OBJS = adler32.obj, compress.obj, crc32.obj, gzio.obj, uncompr.obj,\ + deflate.obj, trees.obj, zutil.obj, inflate.obj, infblock.obj,\ + inftrees.obj, infcodes.obj, infutil.obj, inffast.obj + +CFLAGS= $(C_DEB) $(CC_DEFS) $(PREF) + +all : example.exe minigzip.exe + @ write sys$output " Example applications available" +libz.olb : libz.olb($(OBJS)) + @ write sys$output " libz available" + +example.exe : example.obj libz.olb + link example,libz.olb/lib + +minigzip.exe : minigzip.obj libz.olb + link minigzip,libz.olb/lib,x11vms:xvmsutils.olb/lib + +clean : + delete *.obj;*,libz.olb;* + + +# Other dependencies. +adler32.obj : zutil.h zlib.h zconf.h +compress.obj : zlib.h zconf.h +crc32.obj : zutil.h zlib.h zconf.h +deflate.obj : deflate.h zutil.h zlib.h zconf.h +example.obj : zlib.h zconf.h +gzio.obj : zutil.h zlib.h zconf.h +infblock.obj : zutil.h zlib.h zconf.h infblock.h inftrees.h infcodes.h infutil.h +infcodes.obj : zutil.h zlib.h zconf.h inftrees.h infutil.h infcodes.h inffast.h +inffast.obj : zutil.h zlib.h zconf.h inftrees.h infutil.h inffast.h +inflate.obj : zutil.h zlib.h zconf.h infblock.h +inftrees.obj : zutil.h zlib.h zconf.h inftrees.h +infutil.obj : zutil.h zlib.h zconf.h inftrees.h infutil.h +minigzip.obj : zlib.h zconf.h +trees.obj : deflate.h zutil.h zlib.h zconf.h +uncompr.obj : zlib.h zconf.h +zutil.obj : zutil.h zlib.h zconf.h diff --git a/zlib/old/os2/Makefile.os2 b/zlib/old/os2/Makefile.os2 new file mode 100644 index 000000000000..bb426c0d8e68 --- /dev/null +++ b/zlib/old/os2/Makefile.os2 @@ -0,0 +1,136 @@ +# Makefile for zlib under OS/2 using GCC (PGCC) +# For conditions of distribution and use, see copyright notice in zlib.h + +# To compile and test, type: +# cp Makefile.os2 .. +# cd .. +# make -f Makefile.os2 test + +# This makefile will build a static library z.lib, a shared library +# z.dll and a import library zdll.lib. You can use either z.lib or +# zdll.lib by specifying either -lz or -lzdll on gcc's command line + +CC=gcc -Zomf -s + +CFLAGS=-O6 -Wall +#CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7 +#CFLAGS=-g -DZLIB_DEBUG +#CFLAGS=-O3 -Wall -Wwrite-strings -Wpointer-arith -Wconversion \ +# -Wstrict-prototypes -Wmissing-prototypes + +#################### BUG WARNING: ##################### +## infcodes.c hits a bug in pgcc-1.0, so you have to use either +## -O# where # <= 4 or one of (-fno-ommit-frame-pointer or -fno-force-mem) +## This bug is reportedly fixed in pgcc >1.0, but this was not tested +CFLAGS+=-fno-force-mem + +LDFLAGS=-s -L. -lzdll -Zcrtdll +LDSHARED=$(CC) -s -Zomf -Zdll -Zcrtdll + +VER=1.1.0 +ZLIB=z.lib +SHAREDLIB=z.dll +SHAREDLIBIMP=zdll.lib +LIBS=$(ZLIB) $(SHAREDLIB) $(SHAREDLIBIMP) + +AR=emxomfar cr +IMPLIB=emximp +RANLIB=echo +TAR=tar +SHELL=bash + +prefix=/usr/local +exec_prefix = $(prefix) + +OBJS = adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o trees.o \ + zutil.o inflate.o infblock.o inftrees.o infcodes.o infutil.o inffast.o + +TEST_OBJS = example.o minigzip.o + +DISTFILES = README INDEX ChangeLog configure Make*[a-z0-9] *.[ch] descrip.mms \ + algorithm.txt zlib.3 msdos/Make*[a-z0-9] msdos/zlib.def msdos/zlib.rc \ + nt/Makefile.nt nt/zlib.dnt contrib/README.contrib contrib/*.txt \ + contrib/asm386/*.asm contrib/asm386/*.c \ + contrib/asm386/*.bat contrib/asm386/zlibvc.d?? contrib/iostream/*.cpp \ + contrib/iostream/*.h contrib/iostream2/*.h contrib/iostream2/*.cpp \ + contrib/untgz/Makefile contrib/untgz/*.c contrib/untgz/*.w32 + +all: example.exe minigzip.exe + +test: all + @LD_LIBRARY_PATH=.:$(LD_LIBRARY_PATH) ; export LD_LIBRARY_PATH; \ + echo hello world | ./minigzip | ./minigzip -d || \ + echo ' *** minigzip test FAILED ***' ; \ + if ./example; then \ + echo ' *** zlib test OK ***'; \ + else \ + echo ' *** zlib test FAILED ***'; \ + fi + +$(ZLIB): $(OBJS) + $(AR) $@ $(OBJS) + -@ ($(RANLIB) $@ || true) >/dev/null 2>&1 + +$(SHAREDLIB): $(OBJS) os2/z.def + $(LDSHARED) -o $@ $^ + +$(SHAREDLIBIMP): os2/z.def + $(IMPLIB) -o $@ $^ + +example.exe: example.o $(LIBS) + $(CC) $(CFLAGS) -o $@ example.o $(LDFLAGS) + +minigzip.exe: minigzip.o $(LIBS) + $(CC) $(CFLAGS) -o $@ minigzip.o $(LDFLAGS) + +clean: + rm -f *.o *~ example minigzip libz.a libz.so* foo.gz + +distclean: clean + +zip: + mv Makefile Makefile~; cp -p Makefile.in Makefile + rm -f test.c ztest*.c + v=`sed -n -e 's/\.//g' -e '/VERSION "/s/.*"\(.*\)".*/\1/p' < zlib.h`;\ + zip -ul9 zlib$$v $(DISTFILES) + mv Makefile~ Makefile + +dist: + mv Makefile Makefile~; cp -p Makefile.in Makefile + rm -f test.c ztest*.c + d=zlib-`sed -n '/VERSION "/s/.*"\(.*\)".*/\1/p' < zlib.h`;\ + rm -f $$d.tar.gz; \ + if test ! -d ../$$d; then rm -f ../$$d; ln -s `pwd` ../$$d; fi; \ + files=""; \ + for f in $(DISTFILES); do files="$$files $$d/$$f"; done; \ + cd ..; \ + GZIP=-9 $(TAR) chofz $$d/$$d.tar.gz $$files; \ + if test ! -d $$d; then rm -f $$d; fi + mv Makefile~ Makefile + +tags: + etags *.[ch] + +depend: + makedepend -- $(CFLAGS) -- *.[ch] + +# DO NOT DELETE THIS LINE -- make depend depends on it. + +adler32.o: zlib.h zconf.h +compress.o: zlib.h zconf.h +crc32.o: zlib.h zconf.h +deflate.o: deflate.h zutil.h zlib.h zconf.h +example.o: zlib.h zconf.h +gzio.o: zutil.h zlib.h zconf.h +infblock.o: infblock.h inftrees.h infcodes.h infutil.h zutil.h zlib.h zconf.h +infcodes.o: zutil.h zlib.h zconf.h +infcodes.o: inftrees.h infblock.h infcodes.h infutil.h inffast.h +inffast.o: zutil.h zlib.h zconf.h inftrees.h +inffast.o: infblock.h infcodes.h infutil.h inffast.h +inflate.o: zutil.h zlib.h zconf.h infblock.h +inftrees.o: zutil.h zlib.h zconf.h inftrees.h +infutil.o: zutil.h zlib.h zconf.h infblock.h inftrees.h infcodes.h infutil.h +minigzip.o: zlib.h zconf.h +trees.o: deflate.h zutil.h zlib.h zconf.h trees.h +uncompr.o: zlib.h zconf.h +zutil.o: zutil.h zlib.h zconf.h diff --git a/zlib/old/os2/zlib.def b/zlib/old/os2/zlib.def new file mode 100644 index 000000000000..4c753f1a3b99 --- /dev/null +++ b/zlib/old/os2/zlib.def @@ -0,0 +1,51 @@ +; +; Slightly modified version of ../nt/zlib.dnt :-) +; + +LIBRARY Z +DESCRIPTION "Zlib compression library for OS/2" +CODE PRELOAD MOVEABLE DISCARDABLE +DATA PRELOAD MOVEABLE MULTIPLE + +EXPORTS + adler32 + compress + crc32 + deflate + deflateCopy + deflateEnd + deflateInit2_ + deflateInit_ + deflateParams + deflateReset + deflateSetDictionary + gzclose + gzdopen + gzerror + gzflush + gzopen + gzread + gzwrite + inflate + inflateEnd + inflateInit2_ + inflateInit_ + inflateReset + inflateSetDictionary + inflateSync + uncompress + zlibVersion + gzprintf + gzputc + gzgetc + gzseek + gzrewind + gztell + gzeof + gzsetparams + zError + inflateSyncPoint + get_crc_table + compress2 + gzputs + gzgets diff --git a/zlib/old/visual-basic.txt b/zlib/old/visual-basic.txt new file mode 100644 index 000000000000..57efe58124ee --- /dev/null +++ b/zlib/old/visual-basic.txt @@ -0,0 +1,160 @@ +See below some functions declarations for Visual Basic. + +Frequently Asked Question: + +Q: Each time I use the compress function I get the -5 error (not enough + room in the output buffer). + +A: Make sure that the length of the compressed buffer is passed by + reference ("as any"), not by value ("as long"). Also check that + before the call of compress this length is equal to the total size of + the compressed buffer and not zero. + + +From: "Jon Caruana" +Subject: Re: How to port zlib declares to vb? +Date: Mon, 28 Oct 1996 18:33:03 -0600 + +Got the answer! (I haven't had time to check this but it's what I got, and +looks correct): + +He has the following routines working: + compress + uncompress + gzopen + gzwrite + gzread + gzclose + +Declares follow: (Quoted from Carlos Rios , in Vb4 form) + +#If Win16 Then 'Use Win16 calls. +Declare Function compress Lib "ZLIB.DLL" (ByVal compr As + String, comprLen As Any, ByVal buf As String, ByVal buflen + As Long) As Integer +Declare Function uncompress Lib "ZLIB.DLL" (ByVal uncompr + As String, uncomprLen As Any, ByVal compr As String, ByVal + lcompr As Long) As Integer +Declare Function gzopen Lib "ZLIB.DLL" (ByVal filePath As + String, ByVal mode As String) As Long +Declare Function gzread Lib "ZLIB.DLL" (ByVal file As + Long, ByVal uncompr As String, ByVal uncomprLen As Integer) + As Integer +Declare Function gzwrite Lib "ZLIB.DLL" (ByVal file As + Long, ByVal uncompr As String, ByVal uncomprLen As Integer) + As Integer +Declare Function gzclose Lib "ZLIB.DLL" (ByVal file As + Long) As Integer +#Else +Declare Function compress Lib "ZLIB32.DLL" + (ByVal compr As String, comprLen As Any, ByVal buf As + String, ByVal buflen As Long) As Integer +Declare Function uncompress Lib "ZLIB32.DLL" + (ByVal uncompr As String, uncomprLen As Any, ByVal compr As + String, ByVal lcompr As Long) As Long +Declare Function gzopen Lib "ZLIB32.DLL" + (ByVal file As String, ByVal mode As String) As Long +Declare Function gzread Lib "ZLIB32.DLL" + (ByVal file As Long, ByVal uncompr As String, ByVal + uncomprLen As Long) As Long +Declare Function gzwrite Lib "ZLIB32.DLL" + (ByVal file As Long, ByVal uncompr As String, ByVal + uncomprLen As Long) As Long +Declare Function gzclose Lib "ZLIB32.DLL" + (ByVal file As Long) As Long +#End If + +-Jon Caruana +jon-net@usa.net +Microsoft Sitebuilder Network Level 1 Member - HTML Writer's Guild Member + + +Here is another example from Michael that he +says conforms to the VB guidelines, and that solves the problem of not +knowing the uncompressed size by storing it at the end of the file: + +'Calling the functions: +'bracket meaning: [optional] {Range of possible values} +'Call subCompressFile( [, , [level of compression {1..9}]]) +'Call subUncompressFile() + +Option Explicit +Private lngpvtPcnSml As Long 'Stores value for 'lngPercentSmaller' +Private Const SUCCESS As Long = 0 +Private Const strFilExt As String = ".cpr" +Private Declare Function lngfncCpr Lib "zlib.dll" Alias "compress2" (ByRef +dest As Any, ByRef destLen As Any, ByRef src As Any, ByVal srcLen As Long, +ByVal level As Integer) As Long +Private Declare Function lngfncUcp Lib "zlib.dll" Alias "uncompress" (ByRef +dest As Any, ByRef destLen As Any, ByRef src As Any, ByVal srcLen As Long) +As Long + +Public Sub subCompressFile(ByVal strargOriFilPth As String, Optional ByVal +strargCprFilPth As String, Optional ByVal intLvl As Integer = 9) + Dim strCprPth As String + Dim lngOriSiz As Long + Dim lngCprSiz As Long + Dim bytaryOri() As Byte + Dim bytaryCpr() As Byte + lngOriSiz = FileLen(strargOriFilPth) + ReDim bytaryOri(lngOriSiz - 1) + Open strargOriFilPth For Binary Access Read As #1 + Get #1, , bytaryOri() + Close #1 + strCprPth = IIf(strargCprFilPth = "", strargOriFilPth, strargCprFilPth) +'Select file path and name + strCprPth = strCprPth & IIf(Right(strCprPth, Len(strFilExt)) = +strFilExt, "", strFilExt) 'Add file extension if not exists + lngCprSiz = (lngOriSiz * 1.01) + 12 'Compression needs temporary a bit +more space then original file size + ReDim bytaryCpr(lngCprSiz - 1) + If lngfncCpr(bytaryCpr(0), lngCprSiz, bytaryOri(0), lngOriSiz, intLvl) = +SUCCESS Then + lngpvtPcnSml = (1# - (lngCprSiz / lngOriSiz)) * 100 + ReDim Preserve bytaryCpr(lngCprSiz - 1) + Open strCprPth For Binary Access Write As #1 + Put #1, , bytaryCpr() + Put #1, , lngOriSiz 'Add the the original size value to the end +(last 4 bytes) + Close #1 + Else + MsgBox "Compression error" + End If + Erase bytaryCpr + Erase bytaryOri +End Sub + +Public Sub subUncompressFile(ByVal strargFilPth As String) + Dim bytaryCpr() As Byte + Dim bytaryOri() As Byte + Dim lngOriSiz As Long + Dim lngCprSiz As Long + Dim strOriPth As String + lngCprSiz = FileLen(strargFilPth) + ReDim bytaryCpr(lngCprSiz - 1) + Open strargFilPth For Binary Access Read As #1 + Get #1, , bytaryCpr() + Close #1 + 'Read the original file size value: + lngOriSiz = bytaryCpr(lngCprSiz - 1) * (2 ^ 24) _ + + bytaryCpr(lngCprSiz - 2) * (2 ^ 16) _ + + bytaryCpr(lngCprSiz - 3) * (2 ^ 8) _ + + bytaryCpr(lngCprSiz - 4) + ReDim Preserve bytaryCpr(lngCprSiz - 5) 'Cut of the original size value + ReDim bytaryOri(lngOriSiz - 1) + If lngfncUcp(bytaryOri(0), lngOriSiz, bytaryCpr(0), lngCprSiz) = SUCCESS +Then + strOriPth = Left(strargFilPth, Len(strargFilPth) - Len(strFilExt)) + Open strOriPth For Binary Access Write As #1 + Put #1, , bytaryOri() + Close #1 + Else + MsgBox "Uncompression error" + End If + Erase bytaryCpr + Erase bytaryOri +End Sub +Public Property Get lngPercentSmaller() As Long + lngPercentSmaller = lngpvtPcnSml +End Property diff --git a/zlib/os400/README400 b/zlib/os400/README400 new file mode 100644 index 000000000000..4f98334f5ac5 --- /dev/null +++ b/zlib/os400/README400 @@ -0,0 +1,48 @@ + ZLIB version 1.2.11 for OS/400 installation instructions + +1) Download and unpack the zlib tarball to some IFS directory. + (i.e.: /path/to/the/zlib/ifs/source/directory) + + If the installed IFS command suppors gzip format, this is straightforward, +else you have to unpack first to some directory on a system supporting it, +then move the whole directory to the IFS via the network (via SMB or FTP). + +2) Edit the configuration parameters in the compilation script. + + EDTF STMF('/path/to/the/zlib/ifs/source/directory/os400/make.sh') + +Tune the parameters according to your needs if not matching the defaults. +Save the file and exit after edition. + +3) Enter qshell, then work in the zlib OS/400 specific directory. + + QSH + cd /path/to/the/zlib/ifs/source/directory/os400 + +4) Compile and install + + sh make.sh + +The script will: +- create the libraries, objects and IFS directories for the zlib environment, +- compile all modules, +- create a service program, +- create a static and a dynamic binding directory, +- install header files for C/C++ and for ILE/RPG, both for compilation in + DB2 and IFS environments. + +That's all. + + +Notes: For OS/400 ILE RPG programmers, a /copy member defining the ZLIB + API prototypes for ILE RPG can be found in ZLIB/H(ZLIB.INC). + In the ILE environment, the same definitions are available from + file zlib.inc located in the same IFS include directory as the + C/C++ header files. + Please read comments in this member for more information. + + Remember that most foreign textual data are ASCII coded: this + implementation does not handle conversion from/to ASCII, so + text data code conversions must be done explicitely. + + Mainly for the reason above, always open zipped files in binary mode. diff --git a/zlib/os400/bndsrc b/zlib/os400/bndsrc new file mode 100644 index 000000000000..5e6e0a2f0af3 --- /dev/null +++ b/zlib/os400/bndsrc @@ -0,0 +1,119 @@ +STRPGMEXP PGMLVL(*CURRENT) SIGNATURE('ZLIB') + +/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ +/* Version 1.1.3 entry points. */ +/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ + + EXPORT SYMBOL("adler32") + EXPORT SYMBOL("compress") + EXPORT SYMBOL("compress2") + EXPORT SYMBOL("crc32") + EXPORT SYMBOL("get_crc_table") + EXPORT SYMBOL("deflate") + EXPORT SYMBOL("deflateEnd") + EXPORT SYMBOL("deflateSetDictionary") + EXPORT SYMBOL("deflateCopy") + EXPORT SYMBOL("deflateReset") + EXPORT SYMBOL("deflateParams") + EXPORT SYMBOL("deflatePrime") + EXPORT SYMBOL("deflateInit_") + EXPORT SYMBOL("deflateInit2_") + EXPORT SYMBOL("gzopen") + EXPORT SYMBOL("gzdopen") + EXPORT SYMBOL("gzsetparams") + EXPORT SYMBOL("gzread") + EXPORT SYMBOL("gzwrite") + EXPORT SYMBOL("gzprintf") + EXPORT SYMBOL("gzputs") + EXPORT SYMBOL("gzgets") + EXPORT SYMBOL("gzputc") + EXPORT SYMBOL("gzgetc") + EXPORT SYMBOL("gzflush") + EXPORT SYMBOL("gzseek") + EXPORT SYMBOL("gzrewind") + EXPORT SYMBOL("gztell") + EXPORT SYMBOL("gzeof") + EXPORT SYMBOL("gzclose") + EXPORT SYMBOL("gzerror") + EXPORT SYMBOL("inflate") + EXPORT SYMBOL("inflateEnd") + EXPORT SYMBOL("inflateSetDictionary") + EXPORT SYMBOL("inflateSync") + EXPORT SYMBOL("inflateReset") + EXPORT SYMBOL("inflateInit_") + EXPORT SYMBOL("inflateInit2_") + EXPORT SYMBOL("inflateSyncPoint") + EXPORT SYMBOL("uncompress") + EXPORT SYMBOL("zlibVersion") + EXPORT SYMBOL("zError") + EXPORT SYMBOL("z_errmsg") + +/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ +/* Version 1.2.1 additional entry points. */ +/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ + + EXPORT SYMBOL("compressBound") + EXPORT SYMBOL("deflateBound") + EXPORT SYMBOL("deflatePending") + EXPORT SYMBOL("gzungetc") + EXPORT SYMBOL("gzclearerr") + EXPORT SYMBOL("inflateBack") + EXPORT SYMBOL("inflateBackEnd") + EXPORT SYMBOL("inflateBackInit_") + EXPORT SYMBOL("inflateCopy") + EXPORT SYMBOL("zlibCompileFlags") + +/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ +/* Version 1.2.4 additional entry points. */ +/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ + + EXPORT SYMBOL("adler32_combine") + EXPORT SYMBOL("adler32_combine64") + EXPORT SYMBOL("crc32_combine") + EXPORT SYMBOL("crc32_combine64") + EXPORT SYMBOL("deflateSetHeader") + EXPORT SYMBOL("deflateTune") + EXPORT SYMBOL("gzbuffer") + EXPORT SYMBOL("gzclose_r") + EXPORT SYMBOL("gzclose_w") + EXPORT SYMBOL("gzdirect") + EXPORT SYMBOL("gzoffset") + EXPORT SYMBOL("gzoffset64") + EXPORT SYMBOL("gzopen64") + EXPORT SYMBOL("gzseek64") + EXPORT SYMBOL("gztell64") + EXPORT SYMBOL("inflateGetHeader") + EXPORT SYMBOL("inflateMark") + EXPORT SYMBOL("inflatePrime") + EXPORT SYMBOL("inflateReset2") + EXPORT SYMBOL("inflateUndermine") + +/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ +/* Version 1.2.6 additional entry points. */ +/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ + + EXPORT SYMBOL("deflateResetKeep") + EXPORT SYMBOL("gzgetc_") + EXPORT SYMBOL("inflateResetKeep") + +/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ +/* Version 1.2.8 additional entry points. */ +/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ + + EXPORT SYMBOL("gzvprintf") + EXPORT SYMBOL("inflateGetDictionary") + +/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ +/* Version 1.2.9 additional entry points. */ +/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ + + EXPORT SYMBOL("adler32_z") + EXPORT SYMBOL("crc32_z") + EXPORT SYMBOL("deflateGetDictionary") + EXPORT SYMBOL("gzfread") + EXPORT SYMBOL("gzfwrite") + EXPORT SYMBOL("inflateCodesUsed") + EXPORT SYMBOL("inflateValidate") + EXPORT SYMBOL("uncompress2") + +ENDPGMEXP diff --git a/zlib/os400/make.sh b/zlib/os400/make.sh new file mode 100644 index 000000000000..19eec117a678 --- /dev/null +++ b/zlib/os400/make.sh @@ -0,0 +1,366 @@ +#!/bin/sh +# +# ZLIB compilation script for the OS/400. +# +# +# This is a shell script since make is not a standard component of OS/400. + + +################################################################################ +# +# Tunable configuration parameters. +# +################################################################################ + +TARGETLIB='ZLIB' # Target OS/400 program library +STATBNDDIR='ZLIB_A' # Static binding directory. +DYNBNDDIR='ZLIB' # Dynamic binding directory. +SRVPGM="ZLIB" # Service program. +IFSDIR='/zlib' # IFS support base directory. +TGTCCSID='500' # Target CCSID of objects +DEBUG='*NONE' # Debug level +OPTIMIZE='40' # Optimisation level +OUTPUT='*NONE' # Compilation output option. +TGTRLS='V6R1M0' # Target OS release + +export TARGETLIB STATBNDDIR DYNBNDDIR SRVPGM IFSDIR +export TGTCCSID DEBUG OPTIMIZE OUTPUT TGTRLS + + +################################################################################ +# +# OS/400 specific definitions. +# +################################################################################ + +LIBIFSNAME="/QSYS.LIB/${TARGETLIB}.LIB" + + +################################################################################ +# +# Procedures. +# +################################################################################ + +# action_needed dest [src] +# +# dest is an object to build +# if specified, src is an object on which dest depends. +# +# exit 0 (succeeds) if some action has to be taken, else 1. + +action_needed() + +{ + [ ! -e "${1}" ] && return 0 + [ "${2}" ] || return 1 + [ "${1}" -ot "${2}" ] && return 0 + return 1 +} + + +# make_module module_name source_name [additional_definitions] +# +# Compile source name into module if needed. +# As side effect, append the module name to variable MODULES. +# Set LINK to "YES" if the module has been compiled. + +make_module() + +{ + MODULES="${MODULES} ${1}" + MODIFSNAME="${LIBIFSNAME}/${1}.MODULE" + CSRC="`basename \"${2}\"`" + + if action_needed "${MODIFSNAME}" "${2}" + then : + elif [ ! "`sed -e \"//,/<\\\\/source>/!d\" \ + -e '/ tmphdrfile + + # Need to translate to target CCSID. + + CMD="CPY OBJ('`pwd`/tmphdrfile') TOOBJ('${DEST}')" + CMD="${CMD} TOCCSID(${TGTCCSID}) DTAFMT(*TEXT) REPLACE(*YES)" + system "${CMD}" + # touch -r "${HFILE}" "${DEST}" + rm -f tmphdrfile + fi + + IFSFILE="${IFSDIR}/include/`basename \"${HFILE}\"`" + + if action_needed "${IFSFILE}" "${DEST}" + then rm -f "${IFSFILE}" + ln -s "${DEST}" "${IFSFILE}" + fi +done + + +# Install the ILE/RPG header file. + + +HFILE="${SCRIPTDIR}/zlib.inc" +DEST="${SRCPF}/ZLIB.INC.MBR" + +if action_needed "${DEST}" "${HFILE}" +then CMD="CPY OBJ('${HFILE}') TOOBJ('${DEST}')" + CMD="${CMD} TOCCSID(${TGTCCSID}) DTAFMT(*TEXT) REPLACE(*YES)" + system "${CMD}" + # touch -r "${HFILE}" "${DEST}" +fi + +IFSFILE="${IFSDIR}/include/`basename \"${HFILE}\"`" + +if action_needed "${IFSFILE}" "${DEST}" +then rm -f "${IFSFILE}" + ln -s "${DEST}" "${IFSFILE}" +fi + + +# Create and compile the identification source file. + +echo '#pragma comment(user, "ZLIB version '"${VERSION}"'")' > os400.c +echo '#pragma comment(user, __DATE__)' >> os400.c +echo '#pragma comment(user, __TIME__)' >> os400.c +echo '#pragma comment(copyright, "Copyright (C) 1995-2017 Jean-Loup Gailly, Mark Adler. OS/400 version by P. Monnerat.")' >> os400.c +make_module OS400 os400.c +LINK= # No need to rebuild service program yet. +MODULES= + + +# Get source list. + +CSOURCES=`sed -e '/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Library + + Medium + + 2.0 + + + + zlib + zlib + alain.bonnefoy@icbt.com + Public + public + www.gzip.org/zlib + + + Jean-Loup Gailly,Mark Adler + www.gzip.org/zlib + + zlib@gzip.org + + + A massively spiffy yet delicately unobtrusive compression library. + zlib is designed to be a free, general-purpose, legally unencumbered, lossless data compression library for use on virtually any computer hardware and operating system. + http://www.gzip.org/zlib + + + + + 1.2.11 + Medium + Stable + + + + + + + No License + + + + Software Development/Libraries and Extensions/C Libraries + zlib,compression + qnx6 + qnx6 + None + Developer + + + + + + + + + + + + + + Install + Post + No + Ignore + + No + Optional + + + + + + + + + + + + + InstallOver + zlib + + + + + + + + + + + + + InstallOver + zlib-dev + + + + + + + + + diff --git a/zlib/test/example.c b/zlib/test/example.c new file mode 100644 index 000000000000..eee17ce7c159 --- /dev/null +++ b/zlib/test/example.c @@ -0,0 +1,602 @@ +/* example.c -- usage example of the zlib compression library + * Copyright (C) 1995-2006, 2011, 2016 Jean-loup Gailly + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* @(#) $Id$ */ + +#include "zlib.h" +#include + +#ifdef STDC +# include +# include +#endif + +#if defined(VMS) || defined(RISCOS) +# define TESTFILE "foo-gz" +#else +# define TESTFILE "foo.gz" +#endif + +#define CHECK_ERR(err, msg) { \ + if (err != Z_OK) { \ + fprintf(stderr, "%s error: %d\n", msg, err); \ + exit(1); \ + } \ +} + +static z_const char hello[] = "hello, hello!"; +/* "hello world" would be more standard, but the repeated "hello" + * stresses the compression code better, sorry... + */ + +static const char dictionary[] = "hello"; +static uLong dictId; /* Adler32 value of the dictionary */ + +void test_deflate OF((Byte *compr, uLong comprLen)); +void test_inflate OF((Byte *compr, uLong comprLen, + Byte *uncompr, uLong uncomprLen)); +void test_large_deflate OF((Byte *compr, uLong comprLen, + Byte *uncompr, uLong uncomprLen)); +void test_large_inflate OF((Byte *compr, uLong comprLen, + Byte *uncompr, uLong uncomprLen)); +void test_flush OF((Byte *compr, uLong *comprLen)); +void test_sync OF((Byte *compr, uLong comprLen, + Byte *uncompr, uLong uncomprLen)); +void test_dict_deflate OF((Byte *compr, uLong comprLen)); +void test_dict_inflate OF((Byte *compr, uLong comprLen, + Byte *uncompr, uLong uncomprLen)); +int main OF((int argc, char *argv[])); + + +#ifdef Z_SOLO + +void *myalloc OF((void *, unsigned, unsigned)); +void myfree OF((void *, void *)); + +void *myalloc(q, n, m) + void *q; + unsigned n, m; +{ + (void)q; + return calloc(n, m); +} + +void myfree(void *q, void *p) +{ + (void)q; + free(p); +} + +static alloc_func zalloc = myalloc; +static free_func zfree = myfree; + +#else /* !Z_SOLO */ + +static alloc_func zalloc = (alloc_func)0; +static free_func zfree = (free_func)0; + +void test_compress OF((Byte *compr, uLong comprLen, + Byte *uncompr, uLong uncomprLen)); +void test_gzio OF((const char *fname, + Byte *uncompr, uLong uncomprLen)); + +/* =========================================================================== + * Test compress() and uncompress() + */ +void test_compress(compr, comprLen, uncompr, uncomprLen) + Byte *compr, *uncompr; + uLong comprLen, uncomprLen; +{ + int err; + uLong len = (uLong)strlen(hello)+1; + + err = compress(compr, &comprLen, (const Bytef*)hello, len); + CHECK_ERR(err, "compress"); + + strcpy((char*)uncompr, "garbage"); + + err = uncompress(uncompr, &uncomprLen, compr, comprLen); + CHECK_ERR(err, "uncompress"); + + if (strcmp((char*)uncompr, hello)) { + fprintf(stderr, "bad uncompress\n"); + exit(1); + } else { + printf("uncompress(): %s\n", (char *)uncompr); + } +} + +/* =========================================================================== + * Test read/write of .gz files + */ +void test_gzio(fname, uncompr, uncomprLen) + const char *fname; /* compressed file name */ + Byte *uncompr; + uLong uncomprLen; +{ +#ifdef NO_GZCOMPRESS + fprintf(stderr, "NO_GZCOMPRESS -- gz* functions cannot compress\n"); +#else + int err; + int len = (int)strlen(hello)+1; + gzFile file; + z_off_t pos; + + file = gzopen(fname, "wb"); + if (file == NULL) { + fprintf(stderr, "gzopen error\n"); + exit(1); + } + gzputc(file, 'h'); + if (gzputs(file, "ello") != 4) { + fprintf(stderr, "gzputs err: %s\n", gzerror(file, &err)); + exit(1); + } + if (gzprintf(file, ", %s!", "hello") != 8) { + fprintf(stderr, "gzprintf err: %s\n", gzerror(file, &err)); + exit(1); + } + gzseek(file, 1L, SEEK_CUR); /* add one zero byte */ + gzclose(file); + + file = gzopen(fname, "rb"); + if (file == NULL) { + fprintf(stderr, "gzopen error\n"); + exit(1); + } + strcpy((char*)uncompr, "garbage"); + + if (gzread(file, uncompr, (unsigned)uncomprLen) != len) { + fprintf(stderr, "gzread err: %s\n", gzerror(file, &err)); + exit(1); + } + if (strcmp((char*)uncompr, hello)) { + fprintf(stderr, "bad gzread: %s\n", (char*)uncompr); + exit(1); + } else { + printf("gzread(): %s\n", (char*)uncompr); + } + + pos = gzseek(file, -8L, SEEK_CUR); + if (pos != 6 || gztell(file) != pos) { + fprintf(stderr, "gzseek error, pos=%ld, gztell=%ld\n", + (long)pos, (long)gztell(file)); + exit(1); + } + + if (gzgetc(file) != ' ') { + fprintf(stderr, "gzgetc error\n"); + exit(1); + } + + if (gzungetc(' ', file) != ' ') { + fprintf(stderr, "gzungetc error\n"); + exit(1); + } + + gzgets(file, (char*)uncompr, (int)uncomprLen); + if (strlen((char*)uncompr) != 7) { /* " hello!" */ + fprintf(stderr, "gzgets err after gzseek: %s\n", gzerror(file, &err)); + exit(1); + } + if (strcmp((char*)uncompr, hello + 6)) { + fprintf(stderr, "bad gzgets after gzseek\n"); + exit(1); + } else { + printf("gzgets() after gzseek: %s\n", (char*)uncompr); + } + + gzclose(file); +#endif +} + +#endif /* Z_SOLO */ + +/* =========================================================================== + * Test deflate() with small buffers + */ +void test_deflate(compr, comprLen) + Byte *compr; + uLong comprLen; +{ + z_stream c_stream; /* compression stream */ + int err; + uLong len = (uLong)strlen(hello)+1; + + c_stream.zalloc = zalloc; + c_stream.zfree = zfree; + c_stream.opaque = (voidpf)0; + + err = deflateInit(&c_stream, Z_DEFAULT_COMPRESSION); + CHECK_ERR(err, "deflateInit"); + + c_stream.next_in = (z_const unsigned char *)hello; + c_stream.next_out = compr; + + while (c_stream.total_in != len && c_stream.total_out < comprLen) { + c_stream.avail_in = c_stream.avail_out = 1; /* force small buffers */ + err = deflate(&c_stream, Z_NO_FLUSH); + CHECK_ERR(err, "deflate"); + } + /* Finish the stream, still forcing small buffers: */ + for (;;) { + c_stream.avail_out = 1; + err = deflate(&c_stream, Z_FINISH); + if (err == Z_STREAM_END) break; + CHECK_ERR(err, "deflate"); + } + + err = deflateEnd(&c_stream); + CHECK_ERR(err, "deflateEnd"); +} + +/* =========================================================================== + * Test inflate() with small buffers + */ +void test_inflate(compr, comprLen, uncompr, uncomprLen) + Byte *compr, *uncompr; + uLong comprLen, uncomprLen; +{ + int err; + z_stream d_stream; /* decompression stream */ + + strcpy((char*)uncompr, "garbage"); + + d_stream.zalloc = zalloc; + d_stream.zfree = zfree; + d_stream.opaque = (voidpf)0; + + d_stream.next_in = compr; + d_stream.avail_in = 0; + d_stream.next_out = uncompr; + + err = inflateInit(&d_stream); + CHECK_ERR(err, "inflateInit"); + + while (d_stream.total_out < uncomprLen && d_stream.total_in < comprLen) { + d_stream.avail_in = d_stream.avail_out = 1; /* force small buffers */ + err = inflate(&d_stream, Z_NO_FLUSH); + if (err == Z_STREAM_END) break; + CHECK_ERR(err, "inflate"); + } + + err = inflateEnd(&d_stream); + CHECK_ERR(err, "inflateEnd"); + + if (strcmp((char*)uncompr, hello)) { + fprintf(stderr, "bad inflate\n"); + exit(1); + } else { + printf("inflate(): %s\n", (char *)uncompr); + } +} + +/* =========================================================================== + * Test deflate() with large buffers and dynamic change of compression level + */ +void test_large_deflate(compr, comprLen, uncompr, uncomprLen) + Byte *compr, *uncompr; + uLong comprLen, uncomprLen; +{ + z_stream c_stream; /* compression stream */ + int err; + + c_stream.zalloc = zalloc; + c_stream.zfree = zfree; + c_stream.opaque = (voidpf)0; + + err = deflateInit(&c_stream, Z_BEST_SPEED); + CHECK_ERR(err, "deflateInit"); + + c_stream.next_out = compr; + c_stream.avail_out = (uInt)comprLen; + + /* At this point, uncompr is still mostly zeroes, so it should compress + * very well: + */ + c_stream.next_in = uncompr; + c_stream.avail_in = (uInt)uncomprLen; + err = deflate(&c_stream, Z_NO_FLUSH); + CHECK_ERR(err, "deflate"); + if (c_stream.avail_in != 0) { + fprintf(stderr, "deflate not greedy\n"); + exit(1); + } + + /* Feed in already compressed data and switch to no compression: */ + deflateParams(&c_stream, Z_NO_COMPRESSION, Z_DEFAULT_STRATEGY); + c_stream.next_in = compr; + c_stream.avail_in = (uInt)comprLen/2; + err = deflate(&c_stream, Z_NO_FLUSH); + CHECK_ERR(err, "deflate"); + + /* Switch back to compressing mode: */ + deflateParams(&c_stream, Z_BEST_COMPRESSION, Z_FILTERED); + c_stream.next_in = uncompr; + c_stream.avail_in = (uInt)uncomprLen; + err = deflate(&c_stream, Z_NO_FLUSH); + CHECK_ERR(err, "deflate"); + + err = deflate(&c_stream, Z_FINISH); + if (err != Z_STREAM_END) { + fprintf(stderr, "deflate should report Z_STREAM_END\n"); + exit(1); + } + err = deflateEnd(&c_stream); + CHECK_ERR(err, "deflateEnd"); +} + +/* =========================================================================== + * Test inflate() with large buffers + */ +void test_large_inflate(compr, comprLen, uncompr, uncomprLen) + Byte *compr, *uncompr; + uLong comprLen, uncomprLen; +{ + int err; + z_stream d_stream; /* decompression stream */ + + strcpy((char*)uncompr, "garbage"); + + d_stream.zalloc = zalloc; + d_stream.zfree = zfree; + d_stream.opaque = (voidpf)0; + + d_stream.next_in = compr; + d_stream.avail_in = (uInt)comprLen; + + err = inflateInit(&d_stream); + CHECK_ERR(err, "inflateInit"); + + for (;;) { + d_stream.next_out = uncompr; /* discard the output */ + d_stream.avail_out = (uInt)uncomprLen; + err = inflate(&d_stream, Z_NO_FLUSH); + if (err == Z_STREAM_END) break; + CHECK_ERR(err, "large inflate"); + } + + err = inflateEnd(&d_stream); + CHECK_ERR(err, "inflateEnd"); + + if (d_stream.total_out != 2*uncomprLen + comprLen/2) { + fprintf(stderr, "bad large inflate: %ld\n", d_stream.total_out); + exit(1); + } else { + printf("large_inflate(): OK\n"); + } +} + +/* =========================================================================== + * Test deflate() with full flush + */ +void test_flush(compr, comprLen) + Byte *compr; + uLong *comprLen; +{ + z_stream c_stream; /* compression stream */ + int err; + uInt len = (uInt)strlen(hello)+1; + + c_stream.zalloc = zalloc; + c_stream.zfree = zfree; + c_stream.opaque = (voidpf)0; + + err = deflateInit(&c_stream, Z_DEFAULT_COMPRESSION); + CHECK_ERR(err, "deflateInit"); + + c_stream.next_in = (z_const unsigned char *)hello; + c_stream.next_out = compr; + c_stream.avail_in = 3; + c_stream.avail_out = (uInt)*comprLen; + err = deflate(&c_stream, Z_FULL_FLUSH); + CHECK_ERR(err, "deflate"); + + compr[3]++; /* force an error in first compressed block */ + c_stream.avail_in = len - 3; + + err = deflate(&c_stream, Z_FINISH); + if (err != Z_STREAM_END) { + CHECK_ERR(err, "deflate"); + } + err = deflateEnd(&c_stream); + CHECK_ERR(err, "deflateEnd"); + + *comprLen = c_stream.total_out; +} + +/* =========================================================================== + * Test inflateSync() + */ +void test_sync(compr, comprLen, uncompr, uncomprLen) + Byte *compr, *uncompr; + uLong comprLen, uncomprLen; +{ + int err; + z_stream d_stream; /* decompression stream */ + + strcpy((char*)uncompr, "garbage"); + + d_stream.zalloc = zalloc; + d_stream.zfree = zfree; + d_stream.opaque = (voidpf)0; + + d_stream.next_in = compr; + d_stream.avail_in = 2; /* just read the zlib header */ + + err = inflateInit(&d_stream); + CHECK_ERR(err, "inflateInit"); + + d_stream.next_out = uncompr; + d_stream.avail_out = (uInt)uncomprLen; + + err = inflate(&d_stream, Z_NO_FLUSH); + CHECK_ERR(err, "inflate"); + + d_stream.avail_in = (uInt)comprLen-2; /* read all compressed data */ + err = inflateSync(&d_stream); /* but skip the damaged part */ + CHECK_ERR(err, "inflateSync"); + + err = inflate(&d_stream, Z_FINISH); + if (err != Z_DATA_ERROR) { + fprintf(stderr, "inflate should report DATA_ERROR\n"); + /* Because of incorrect adler32 */ + exit(1); + } + err = inflateEnd(&d_stream); + CHECK_ERR(err, "inflateEnd"); + + printf("after inflateSync(): hel%s\n", (char *)uncompr); +} + +/* =========================================================================== + * Test deflate() with preset dictionary + */ +void test_dict_deflate(compr, comprLen) + Byte *compr; + uLong comprLen; +{ + z_stream c_stream; /* compression stream */ + int err; + + c_stream.zalloc = zalloc; + c_stream.zfree = zfree; + c_stream.opaque = (voidpf)0; + + err = deflateInit(&c_stream, Z_BEST_COMPRESSION); + CHECK_ERR(err, "deflateInit"); + + err = deflateSetDictionary(&c_stream, + (const Bytef*)dictionary, (int)sizeof(dictionary)); + CHECK_ERR(err, "deflateSetDictionary"); + + dictId = c_stream.adler; + c_stream.next_out = compr; + c_stream.avail_out = (uInt)comprLen; + + c_stream.next_in = (z_const unsigned char *)hello; + c_stream.avail_in = (uInt)strlen(hello)+1; + + err = deflate(&c_stream, Z_FINISH); + if (err != Z_STREAM_END) { + fprintf(stderr, "deflate should report Z_STREAM_END\n"); + exit(1); + } + err = deflateEnd(&c_stream); + CHECK_ERR(err, "deflateEnd"); +} + +/* =========================================================================== + * Test inflate() with a preset dictionary + */ +void test_dict_inflate(compr, comprLen, uncompr, uncomprLen) + Byte *compr, *uncompr; + uLong comprLen, uncomprLen; +{ + int err; + z_stream d_stream; /* decompression stream */ + + strcpy((char*)uncompr, "garbage"); + + d_stream.zalloc = zalloc; + d_stream.zfree = zfree; + d_stream.opaque = (voidpf)0; + + d_stream.next_in = compr; + d_stream.avail_in = (uInt)comprLen; + + err = inflateInit(&d_stream); + CHECK_ERR(err, "inflateInit"); + + d_stream.next_out = uncompr; + d_stream.avail_out = (uInt)uncomprLen; + + for (;;) { + err = inflate(&d_stream, Z_NO_FLUSH); + if (err == Z_STREAM_END) break; + if (err == Z_NEED_DICT) { + if (d_stream.adler != dictId) { + fprintf(stderr, "unexpected dictionary"); + exit(1); + } + err = inflateSetDictionary(&d_stream, (const Bytef*)dictionary, + (int)sizeof(dictionary)); + } + CHECK_ERR(err, "inflate with dict"); + } + + err = inflateEnd(&d_stream); + CHECK_ERR(err, "inflateEnd"); + + if (strcmp((char*)uncompr, hello)) { + fprintf(stderr, "bad inflate with dict\n"); + exit(1); + } else { + printf("inflate with dictionary: %s\n", (char *)uncompr); + } +} + +/* =========================================================================== + * Usage: example [output.gz [input.gz]] + */ + +int main(argc, argv) + int argc; + char *argv[]; +{ + Byte *compr, *uncompr; + uLong comprLen = 10000*sizeof(int); /* don't overflow on MSDOS */ + uLong uncomprLen = comprLen; + static const char* myVersion = ZLIB_VERSION; + + if (zlibVersion()[0] != myVersion[0]) { + fprintf(stderr, "incompatible zlib version\n"); + exit(1); + + } else if (strcmp(zlibVersion(), ZLIB_VERSION) != 0) { + fprintf(stderr, "warning: different zlib version\n"); + } + + printf("zlib version %s = 0x%04x, compile flags = 0x%lx\n", + ZLIB_VERSION, ZLIB_VERNUM, zlibCompileFlags()); + + compr = (Byte*)calloc((uInt)comprLen, 1); + uncompr = (Byte*)calloc((uInt)uncomprLen, 1); + /* compr and uncompr are cleared to avoid reading uninitialized + * data and to ensure that uncompr compresses well. + */ + if (compr == Z_NULL || uncompr == Z_NULL) { + printf("out of memory\n"); + exit(1); + } + +#ifdef Z_SOLO + (void)argc; + (void)argv; +#else + test_compress(compr, comprLen, uncompr, uncomprLen); + + test_gzio((argc > 1 ? argv[1] : TESTFILE), + uncompr, uncomprLen); +#endif + + test_deflate(compr, comprLen); + test_inflate(compr, comprLen, uncompr, uncomprLen); + + test_large_deflate(compr, comprLen, uncompr, uncomprLen); + test_large_inflate(compr, comprLen, uncompr, uncomprLen); + + test_flush(compr, &comprLen); + test_sync(compr, comprLen, uncompr, uncomprLen); + comprLen = uncomprLen; + + test_dict_deflate(compr, comprLen); + test_dict_inflate(compr, comprLen, uncompr, uncomprLen); + + free(compr); + free(uncompr); + + return 0; +} diff --git a/zlib/test/infcover.c b/zlib/test/infcover.c new file mode 100644 index 000000000000..2be01646cec3 --- /dev/null +++ b/zlib/test/infcover.c @@ -0,0 +1,671 @@ +/* infcover.c -- test zlib's inflate routines with full code coverage + * Copyright (C) 2011, 2016 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* to use, do: ./configure --cover && make cover */ + +#include +#include +#include +#include +#include "zlib.h" + +/* get definition of internal structure so we can mess with it (see pull()), + and so we can call inflate_trees() (see cover5()) */ +#define ZLIB_INTERNAL +#include "inftrees.h" +#include "inflate.h" + +#define local static + +/* -- memory tracking routines -- */ + +/* + These memory tracking routines are provided to zlib and track all of zlib's + allocations and deallocations, check for LIFO operations, keep a current + and high water mark of total bytes requested, optionally set a limit on the + total memory that can be allocated, and when done check for memory leaks. + + They are used as follows: + + z_stream strm; + mem_setup(&strm) initializes the memory tracking and sets the + zalloc, zfree, and opaque members of strm to use + memory tracking for all zlib operations on strm + mem_limit(&strm, limit) sets a limit on the total bytes requested -- a + request that exceeds this limit will result in an + allocation failure (returns NULL) -- setting the + limit to zero means no limit, which is the default + after mem_setup() + mem_used(&strm, "msg") prints to stderr "msg" and the total bytes used + mem_high(&strm, "msg") prints to stderr "msg" and the high water mark + mem_done(&strm, "msg") ends memory tracking, releases all allocations + for the tracking as well as leaked zlib blocks, if + any. If there was anything unusual, such as leaked + blocks, non-FIFO frees, or frees of addresses not + allocated, then "msg" and information about the + problem is printed to stderr. If everything is + normal, nothing is printed. mem_done resets the + strm members to Z_NULL to use the default memory + allocation routines on the next zlib initialization + using strm. + */ + +/* these items are strung together in a linked list, one for each allocation */ +struct mem_item { + void *ptr; /* pointer to allocated memory */ + size_t size; /* requested size of allocation */ + struct mem_item *next; /* pointer to next item in list, or NULL */ +}; + +/* this structure is at the root of the linked list, and tracks statistics */ +struct mem_zone { + struct mem_item *first; /* pointer to first item in list, or NULL */ + size_t total, highwater; /* total allocations, and largest total */ + size_t limit; /* memory allocation limit, or 0 if no limit */ + int notlifo, rogue; /* counts of non-LIFO frees and rogue frees */ +}; + +/* memory allocation routine to pass to zlib */ +local void *mem_alloc(void *mem, unsigned count, unsigned size) +{ + void *ptr; + struct mem_item *item; + struct mem_zone *zone = mem; + size_t len = count * (size_t)size; + + /* induced allocation failure */ + if (zone == NULL || (zone->limit && zone->total + len > zone->limit)) + return NULL; + + /* perform allocation using the standard library, fill memory with a + non-zero value to make sure that the code isn't depending on zeros */ + ptr = malloc(len); + if (ptr == NULL) + return NULL; + memset(ptr, 0xa5, len); + + /* create a new item for the list */ + item = malloc(sizeof(struct mem_item)); + if (item == NULL) { + free(ptr); + return NULL; + } + item->ptr = ptr; + item->size = len; + + /* insert item at the beginning of the list */ + item->next = zone->first; + zone->first = item; + + /* update the statistics */ + zone->total += item->size; + if (zone->total > zone->highwater) + zone->highwater = zone->total; + + /* return the allocated memory */ + return ptr; +} + +/* memory free routine to pass to zlib */ +local void mem_free(void *mem, void *ptr) +{ + struct mem_item *item, *next; + struct mem_zone *zone = mem; + + /* if no zone, just do a free */ + if (zone == NULL) { + free(ptr); + return; + } + + /* point next to the item that matches ptr, or NULL if not found -- remove + the item from the linked list if found */ + next = zone->first; + if (next) { + if (next->ptr == ptr) + zone->first = next->next; /* first one is it, remove from list */ + else { + do { /* search the linked list */ + item = next; + next = item->next; + } while (next != NULL && next->ptr != ptr); + if (next) { /* if found, remove from linked list */ + item->next = next->next; + zone->notlifo++; /* not a LIFO free */ + } + + } + } + + /* if found, update the statistics and free the item */ + if (next) { + zone->total -= next->size; + free(next); + } + + /* if not found, update the rogue count */ + else + zone->rogue++; + + /* in any case, do the requested free with the standard library function */ + free(ptr); +} + +/* set up a controlled memory allocation space for monitoring, set the stream + parameters to the controlled routines, with opaque pointing to the space */ +local void mem_setup(z_stream *strm) +{ + struct mem_zone *zone; + + zone = malloc(sizeof(struct mem_zone)); + assert(zone != NULL); + zone->first = NULL; + zone->total = 0; + zone->highwater = 0; + zone->limit = 0; + zone->notlifo = 0; + zone->rogue = 0; + strm->opaque = zone; + strm->zalloc = mem_alloc; + strm->zfree = mem_free; +} + +/* set a limit on the total memory allocation, or 0 to remove the limit */ +local void mem_limit(z_stream *strm, size_t limit) +{ + struct mem_zone *zone = strm->opaque; + + zone->limit = limit; +} + +/* show the current total requested allocations in bytes */ +local void mem_used(z_stream *strm, char *prefix) +{ + struct mem_zone *zone = strm->opaque; + + fprintf(stderr, "%s: %lu allocated\n", prefix, zone->total); +} + +/* show the high water allocation in bytes */ +local void mem_high(z_stream *strm, char *prefix) +{ + struct mem_zone *zone = strm->opaque; + + fprintf(stderr, "%s: %lu high water mark\n", prefix, zone->highwater); +} + +/* release the memory allocation zone -- if there are any surprises, notify */ +local void mem_done(z_stream *strm, char *prefix) +{ + int count = 0; + struct mem_item *item, *next; + struct mem_zone *zone = strm->opaque; + + /* show high water mark */ + mem_high(strm, prefix); + + /* free leftover allocations and item structures, if any */ + item = zone->first; + while (item != NULL) { + free(item->ptr); + next = item->next; + free(item); + item = next; + count++; + } + + /* issue alerts about anything unexpected */ + if (count || zone->total) + fprintf(stderr, "** %s: %lu bytes in %d blocks not freed\n", + prefix, zone->total, count); + if (zone->notlifo) + fprintf(stderr, "** %s: %d frees not LIFO\n", prefix, zone->notlifo); + if (zone->rogue) + fprintf(stderr, "** %s: %d frees not recognized\n", + prefix, zone->rogue); + + /* free the zone and delete from the stream */ + free(zone); + strm->opaque = Z_NULL; + strm->zalloc = Z_NULL; + strm->zfree = Z_NULL; +} + +/* -- inflate test routines -- */ + +/* Decode a hexadecimal string, set *len to length, in[] to the bytes. This + decodes liberally, in that hex digits can be adjacent, in which case two in + a row writes a byte. Or they can be delimited by any non-hex character, + where the delimiters are ignored except when a single hex digit is followed + by a delimiter, where that single digit writes a byte. The returned data is + allocated and must eventually be freed. NULL is returned if out of memory. + If the length is not needed, then len can be NULL. */ +local unsigned char *h2b(const char *hex, unsigned *len) +{ + unsigned char *in, *re; + unsigned next, val; + + in = malloc((strlen(hex) + 1) >> 1); + if (in == NULL) + return NULL; + next = 0; + val = 1; + do { + if (*hex >= '0' && *hex <= '9') + val = (val << 4) + *hex - '0'; + else if (*hex >= 'A' && *hex <= 'F') + val = (val << 4) + *hex - 'A' + 10; + else if (*hex >= 'a' && *hex <= 'f') + val = (val << 4) + *hex - 'a' + 10; + else if (val != 1 && val < 32) /* one digit followed by delimiter */ + val += 240; /* make it look like two digits */ + if (val > 255) { /* have two digits */ + in[next++] = val & 0xff; /* save the decoded byte */ + val = 1; /* start over */ + } + } while (*hex++); /* go through the loop with the terminating null */ + if (len != NULL) + *len = next; + re = realloc(in, next); + return re == NULL ? in : re; +} + +/* generic inflate() run, where hex is the hexadecimal input data, what is the + text to include in an error message, step is how much input data to feed + inflate() on each call, or zero to feed it all, win is the window bits + parameter to inflateInit2(), len is the size of the output buffer, and err + is the error code expected from the first inflate() call (the second + inflate() call is expected to return Z_STREAM_END). If win is 47, then + header information is collected with inflateGetHeader(). If a zlib stream + is looking for a dictionary, then an empty dictionary is provided. + inflate() is run until all of the input data is consumed. */ +local void inf(char *hex, char *what, unsigned step, int win, unsigned len, + int err) +{ + int ret; + unsigned have; + unsigned char *in, *out; + z_stream strm, copy; + gz_header head; + + mem_setup(&strm); + strm.avail_in = 0; + strm.next_in = Z_NULL; + ret = inflateInit2(&strm, win); + if (ret != Z_OK) { + mem_done(&strm, what); + return; + } + out = malloc(len); assert(out != NULL); + if (win == 47) { + head.extra = out; + head.extra_max = len; + head.name = out; + head.name_max = len; + head.comment = out; + head.comm_max = len; + ret = inflateGetHeader(&strm, &head); assert(ret == Z_OK); + } + in = h2b(hex, &have); assert(in != NULL); + if (step == 0 || step > have) + step = have; + strm.avail_in = step; + have -= step; + strm.next_in = in; + do { + strm.avail_out = len; + strm.next_out = out; + ret = inflate(&strm, Z_NO_FLUSH); assert(err == 9 || ret == err); + if (ret != Z_OK && ret != Z_BUF_ERROR && ret != Z_NEED_DICT) + break; + if (ret == Z_NEED_DICT) { + ret = inflateSetDictionary(&strm, in, 1); + assert(ret == Z_DATA_ERROR); + mem_limit(&strm, 1); + ret = inflateSetDictionary(&strm, out, 0); + assert(ret == Z_MEM_ERROR); + mem_limit(&strm, 0); + ((struct inflate_state *)strm.state)->mode = DICT; + ret = inflateSetDictionary(&strm, out, 0); + assert(ret == Z_OK); + ret = inflate(&strm, Z_NO_FLUSH); assert(ret == Z_BUF_ERROR); + } + ret = inflateCopy(©, &strm); assert(ret == Z_OK); + ret = inflateEnd(©); assert(ret == Z_OK); + err = 9; /* don't care next time around */ + have += strm.avail_in; + strm.avail_in = step > have ? have : step; + have -= strm.avail_in; + } while (strm.avail_in); + free(in); + free(out); + ret = inflateReset2(&strm, -8); assert(ret == Z_OK); + ret = inflateEnd(&strm); assert(ret == Z_OK); + mem_done(&strm, what); +} + +/* cover all of the lines in inflate.c up to inflate() */ +local void cover_support(void) +{ + int ret; + z_stream strm; + + mem_setup(&strm); + strm.avail_in = 0; + strm.next_in = Z_NULL; + ret = inflateInit(&strm); assert(ret == Z_OK); + mem_used(&strm, "inflate init"); + ret = inflatePrime(&strm, 5, 31); assert(ret == Z_OK); + ret = inflatePrime(&strm, -1, 0); assert(ret == Z_OK); + ret = inflateSetDictionary(&strm, Z_NULL, 0); + assert(ret == Z_STREAM_ERROR); + ret = inflateEnd(&strm); assert(ret == Z_OK); + mem_done(&strm, "prime"); + + inf("63 0", "force window allocation", 0, -15, 1, Z_OK); + inf("63 18 5", "force window replacement", 0, -8, 259, Z_OK); + inf("63 18 68 30 d0 0 0", "force split window update", 4, -8, 259, Z_OK); + inf("3 0", "use fixed blocks", 0, -15, 1, Z_STREAM_END); + inf("", "bad window size", 0, 1, 0, Z_STREAM_ERROR); + + mem_setup(&strm); + strm.avail_in = 0; + strm.next_in = Z_NULL; + ret = inflateInit_(&strm, ZLIB_VERSION - 1, (int)sizeof(z_stream)); + assert(ret == Z_VERSION_ERROR); + mem_done(&strm, "wrong version"); + + strm.avail_in = 0; + strm.next_in = Z_NULL; + ret = inflateInit(&strm); assert(ret == Z_OK); + ret = inflateEnd(&strm); assert(ret == Z_OK); + fputs("inflate built-in memory routines\n", stderr); +} + +/* cover all inflate() header and trailer cases and code after inflate() */ +local void cover_wrap(void) +{ + int ret; + z_stream strm, copy; + unsigned char dict[257]; + + ret = inflate(Z_NULL, 0); assert(ret == Z_STREAM_ERROR); + ret = inflateEnd(Z_NULL); assert(ret == Z_STREAM_ERROR); + ret = inflateCopy(Z_NULL, Z_NULL); assert(ret == Z_STREAM_ERROR); + fputs("inflate bad parameters\n", stderr); + + inf("1f 8b 0 0", "bad gzip method", 0, 31, 0, Z_DATA_ERROR); + inf("1f 8b 8 80", "bad gzip flags", 0, 31, 0, Z_DATA_ERROR); + inf("77 85", "bad zlib method", 0, 15, 0, Z_DATA_ERROR); + inf("8 99", "set window size from header", 0, 0, 0, Z_OK); + inf("78 9c", "bad zlib window size", 0, 8, 0, Z_DATA_ERROR); + inf("78 9c 63 0 0 0 1 0 1", "check adler32", 0, 15, 1, Z_STREAM_END); + inf("1f 8b 8 1e 0 0 0 0 0 0 1 0 0 0 0 0 0", "bad header crc", 0, 47, 1, + Z_DATA_ERROR); + inf("1f 8b 8 2 0 0 0 0 0 0 1d 26 3 0 0 0 0 0 0 0 0 0", "check gzip length", + 0, 47, 0, Z_STREAM_END); + inf("78 90", "bad zlib header check", 0, 47, 0, Z_DATA_ERROR); + inf("8 b8 0 0 0 1", "need dictionary", 0, 8, 0, Z_NEED_DICT); + inf("78 9c 63 0", "compute adler32", 0, 15, 1, Z_OK); + + mem_setup(&strm); + strm.avail_in = 0; + strm.next_in = Z_NULL; + ret = inflateInit2(&strm, -8); + strm.avail_in = 2; + strm.next_in = (void *)"\x63"; + strm.avail_out = 1; + strm.next_out = (void *)&ret; + mem_limit(&strm, 1); + ret = inflate(&strm, Z_NO_FLUSH); assert(ret == Z_MEM_ERROR); + ret = inflate(&strm, Z_NO_FLUSH); assert(ret == Z_MEM_ERROR); + mem_limit(&strm, 0); + memset(dict, 0, 257); + ret = inflateSetDictionary(&strm, dict, 257); + assert(ret == Z_OK); + mem_limit(&strm, (sizeof(struct inflate_state) << 1) + 256); + ret = inflatePrime(&strm, 16, 0); assert(ret == Z_OK); + strm.avail_in = 2; + strm.next_in = (void *)"\x80"; + ret = inflateSync(&strm); assert(ret == Z_DATA_ERROR); + ret = inflate(&strm, Z_NO_FLUSH); assert(ret == Z_STREAM_ERROR); + strm.avail_in = 4; + strm.next_in = (void *)"\0\0\xff\xff"; + ret = inflateSync(&strm); assert(ret == Z_OK); + (void)inflateSyncPoint(&strm); + ret = inflateCopy(©, &strm); assert(ret == Z_MEM_ERROR); + mem_limit(&strm, 0); + ret = inflateUndermine(&strm, 1); assert(ret == Z_DATA_ERROR); + (void)inflateMark(&strm); + ret = inflateEnd(&strm); assert(ret == Z_OK); + mem_done(&strm, "miscellaneous, force memory errors"); +} + +/* input and output functions for inflateBack() */ +local unsigned pull(void *desc, unsigned char **buf) +{ + static unsigned int next = 0; + static unsigned char dat[] = {0x63, 0, 2, 0}; + struct inflate_state *state; + + if (desc == Z_NULL) { + next = 0; + return 0; /* no input (already provided at next_in) */ + } + state = (void *)((z_stream *)desc)->state; + if (state != Z_NULL) + state->mode = SYNC; /* force an otherwise impossible situation */ + return next < sizeof(dat) ? (*buf = dat + next++, 1) : 0; +} + +local int push(void *desc, unsigned char *buf, unsigned len) +{ + buf += len; + return desc != Z_NULL; /* force error if desc not null */ +} + +/* cover inflateBack() up to common deflate data cases and after those */ +local void cover_back(void) +{ + int ret; + z_stream strm; + unsigned char win[32768]; + + ret = inflateBackInit_(Z_NULL, 0, win, 0, 0); + assert(ret == Z_VERSION_ERROR); + ret = inflateBackInit(Z_NULL, 0, win); assert(ret == Z_STREAM_ERROR); + ret = inflateBack(Z_NULL, Z_NULL, Z_NULL, Z_NULL, Z_NULL); + assert(ret == Z_STREAM_ERROR); + ret = inflateBackEnd(Z_NULL); assert(ret == Z_STREAM_ERROR); + fputs("inflateBack bad parameters\n", stderr); + + mem_setup(&strm); + ret = inflateBackInit(&strm, 15, win); assert(ret == Z_OK); + strm.avail_in = 2; + strm.next_in = (void *)"\x03"; + ret = inflateBack(&strm, pull, Z_NULL, push, Z_NULL); + assert(ret == Z_STREAM_END); + /* force output error */ + strm.avail_in = 3; + strm.next_in = (void *)"\x63\x00"; + ret = inflateBack(&strm, pull, Z_NULL, push, &strm); + assert(ret == Z_BUF_ERROR); + /* force mode error by mucking with state */ + ret = inflateBack(&strm, pull, &strm, push, Z_NULL); + assert(ret == Z_STREAM_ERROR); + ret = inflateBackEnd(&strm); assert(ret == Z_OK); + mem_done(&strm, "inflateBack bad state"); + + ret = inflateBackInit(&strm, 15, win); assert(ret == Z_OK); + ret = inflateBackEnd(&strm); assert(ret == Z_OK); + fputs("inflateBack built-in memory routines\n", stderr); +} + +/* do a raw inflate of data in hexadecimal with both inflate and inflateBack */ +local int try(char *hex, char *id, int err) +{ + int ret; + unsigned len, size; + unsigned char *in, *out, *win; + char *prefix; + z_stream strm; + + /* convert to hex */ + in = h2b(hex, &len); + assert(in != NULL); + + /* allocate work areas */ + size = len << 3; + out = malloc(size); + assert(out != NULL); + win = malloc(32768); + assert(win != NULL); + prefix = malloc(strlen(id) + 6); + assert(prefix != NULL); + + /* first with inflate */ + strcpy(prefix, id); + strcat(prefix, "-late"); + mem_setup(&strm); + strm.avail_in = 0; + strm.next_in = Z_NULL; + ret = inflateInit2(&strm, err < 0 ? 47 : -15); + assert(ret == Z_OK); + strm.avail_in = len; + strm.next_in = in; + do { + strm.avail_out = size; + strm.next_out = out; + ret = inflate(&strm, Z_TREES); + assert(ret != Z_STREAM_ERROR && ret != Z_MEM_ERROR); + if (ret == Z_DATA_ERROR || ret == Z_NEED_DICT) + break; + } while (strm.avail_in || strm.avail_out == 0); + if (err) { + assert(ret == Z_DATA_ERROR); + assert(strcmp(id, strm.msg) == 0); + } + inflateEnd(&strm); + mem_done(&strm, prefix); + + /* then with inflateBack */ + if (err >= 0) { + strcpy(prefix, id); + strcat(prefix, "-back"); + mem_setup(&strm); + ret = inflateBackInit(&strm, 15, win); + assert(ret == Z_OK); + strm.avail_in = len; + strm.next_in = in; + ret = inflateBack(&strm, pull, Z_NULL, push, Z_NULL); + assert(ret != Z_STREAM_ERROR); + if (err) { + assert(ret == Z_DATA_ERROR); + assert(strcmp(id, strm.msg) == 0); + } + inflateBackEnd(&strm); + mem_done(&strm, prefix); + } + + /* clean up */ + free(prefix); + free(win); + free(out); + free(in); + return ret; +} + +/* cover deflate data cases in both inflate() and inflateBack() */ +local void cover_inflate(void) +{ + try("0 0 0 0 0", "invalid stored block lengths", 1); + try("3 0", "fixed", 0); + try("6", "invalid block type", 1); + try("1 1 0 fe ff 0", "stored", 0); + try("fc 0 0", "too many length or distance symbols", 1); + try("4 0 fe ff", "invalid code lengths set", 1); + try("4 0 24 49 0", "invalid bit length repeat", 1); + try("4 0 24 e9 ff ff", "invalid bit length repeat", 1); + try("4 0 24 e9 ff 6d", "invalid code -- missing end-of-block", 1); + try("4 80 49 92 24 49 92 24 71 ff ff 93 11 0", + "invalid literal/lengths set", 1); + try("4 80 49 92 24 49 92 24 f b4 ff ff c3 84", "invalid distances set", 1); + try("4 c0 81 8 0 0 0 0 20 7f eb b 0 0", "invalid literal/length code", 1); + try("2 7e ff ff", "invalid distance code", 1); + try("c c0 81 0 0 0 0 0 90 ff 6b 4 0", "invalid distance too far back", 1); + + /* also trailer mismatch just in inflate() */ + try("1f 8b 8 0 0 0 0 0 0 0 3 0 0 0 0 1", "incorrect data check", -1); + try("1f 8b 8 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 1", + "incorrect length check", -1); + try("5 c0 21 d 0 0 0 80 b0 fe 6d 2f 91 6c", "pull 17", 0); + try("5 e0 81 91 24 cb b2 2c 49 e2 f 2e 8b 9a 47 56 9f fb fe ec d2 ff 1f", + "long code", 0); + try("ed c0 1 1 0 0 0 40 20 ff 57 1b 42 2c 4f", "length extra", 0); + try("ed cf c1 b1 2c 47 10 c4 30 fa 6f 35 1d 1 82 59 3d fb be 2e 2a fc f c", + "long distance and extra", 0); + try("ed c0 81 0 0 0 0 80 a0 fd a9 17 a9 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 6", "window end", 0); + inf("2 8 20 80 0 3 0", "inflate_fast TYPE return", 0, -15, 258, + Z_STREAM_END); + inf("63 18 5 40 c 0", "window wrap", 3, -8, 300, Z_OK); +} + +/* cover remaining lines in inftrees.c */ +local void cover_trees(void) +{ + int ret; + unsigned bits; + unsigned short lens[16], work[16]; + code *next, table[ENOUGH_DISTS]; + + /* we need to call inflate_table() directly in order to manifest not- + enough errors, since zlib insures that enough is always enough */ + for (bits = 0; bits < 15; bits++) + lens[bits] = (unsigned short)(bits + 1); + lens[15] = 15; + next = table; + bits = 15; + ret = inflate_table(DISTS, lens, 16, &next, &bits, work); + assert(ret == 1); + next = table; + bits = 1; + ret = inflate_table(DISTS, lens, 16, &next, &bits, work); + assert(ret == 1); + fputs("inflate_table not enough errors\n", stderr); +} + +/* cover remaining inffast.c decoding and window copying */ +local void cover_fast(void) +{ + inf("e5 e0 81 ad 6d cb b2 2c c9 01 1e 59 63 ae 7d ee fb 4d fd b5 35 41 68" + " ff 7f 0f 0 0 0", "fast length extra bits", 0, -8, 258, Z_DATA_ERROR); + inf("25 fd 81 b5 6d 59 b6 6a 49 ea af 35 6 34 eb 8c b9 f6 b9 1e ef 67 49" + " 50 fe ff ff 3f 0 0", "fast distance extra bits", 0, -8, 258, + Z_DATA_ERROR); + inf("3 7e 0 0 0 0 0", "fast invalid distance code", 0, -8, 258, + Z_DATA_ERROR); + inf("1b 7 0 0 0 0 0", "fast invalid literal/length code", 0, -8, 258, + Z_DATA_ERROR); + inf("d c7 1 ae eb 38 c 4 41 a0 87 72 de df fb 1f b8 36 b1 38 5d ff ff 0", + "fast 2nd level codes and too far back", 0, -8, 258, Z_DATA_ERROR); + inf("63 18 5 8c 10 8 0 0 0 0", "very common case", 0, -8, 259, Z_OK); + inf("63 60 60 18 c9 0 8 18 18 18 26 c0 28 0 29 0 0 0", + "contiguous and wrap around window", 6, -8, 259, Z_OK); + inf("63 0 3 0 0 0 0 0", "copy direct from output", 0, -8, 259, + Z_STREAM_END); +} + +int main(void) +{ + fprintf(stderr, "%s\n", zlibVersion()); + cover_support(); + cover_wrap(); + cover_back(); + cover_inflate(); + cover_trees(); + cover_fast(); + return 0; +} diff --git a/zlib/test/minigzip.c b/zlib/test/minigzip.c new file mode 100644 index 000000000000..e22fb08c0a29 --- /dev/null +++ b/zlib/test/minigzip.c @@ -0,0 +1,651 @@ +/* minigzip.c -- simulate gzip using the zlib compression library + * Copyright (C) 1995-2006, 2010, 2011, 2016 Jean-loup Gailly + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* + * minigzip is a minimal implementation of the gzip utility. This is + * only an example of using zlib and isn't meant to replace the + * full-featured gzip. No attempt is made to deal with file systems + * limiting names to 14 or 8+3 characters, etc... Error checking is + * very limited. So use minigzip only for testing; use gzip for the + * real thing. On MSDOS, use only on file names without extension + * or in pipe mode. + */ + +/* @(#) $Id$ */ + +#include "zlib.h" +#include + +#ifdef STDC +# include +# include +#endif + +#ifdef USE_MMAP +# include +# include +# include +#endif + +#if defined(MSDOS) || defined(OS2) || defined(WIN32) || defined(__CYGWIN__) +# include +# include +# ifdef UNDER_CE +# include +# endif +# define SET_BINARY_MODE(file) setmode(fileno(file), O_BINARY) +#else +# define SET_BINARY_MODE(file) +#endif + +#if defined(_MSC_VER) && _MSC_VER < 1900 +# define snprintf _snprintf +#endif + +#ifdef VMS +# define unlink delete +# define GZ_SUFFIX "-gz" +#endif +#ifdef RISCOS +# define unlink remove +# define GZ_SUFFIX "-gz" +# define fileno(file) file->__file +#endif +#if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os +# include /* for fileno */ +#endif + +#if !defined(Z_HAVE_UNISTD_H) && !defined(_LARGEFILE64_SOURCE) +#ifndef WIN32 /* unlink already in stdio.h for WIN32 */ + extern int unlink OF((const char *)); +#endif +#endif + +#if defined(UNDER_CE) +# include +# define perror(s) pwinerror(s) + +/* Map the Windows error number in ERROR to a locale-dependent error + message string and return a pointer to it. Typically, the values + for ERROR come from GetLastError. + + The string pointed to shall not be modified by the application, + but may be overwritten by a subsequent call to strwinerror + + The strwinerror function does not change the current setting + of GetLastError. */ + +static char *strwinerror (error) + DWORD error; +{ + static char buf[1024]; + + wchar_t *msgbuf; + DWORD lasterr = GetLastError(); + DWORD chars = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM + | FORMAT_MESSAGE_ALLOCATE_BUFFER, + NULL, + error, + 0, /* Default language */ + (LPVOID)&msgbuf, + 0, + NULL); + if (chars != 0) { + /* If there is an \r\n appended, zap it. */ + if (chars >= 2 + && msgbuf[chars - 2] == '\r' && msgbuf[chars - 1] == '\n') { + chars -= 2; + msgbuf[chars] = 0; + } + + if (chars > sizeof (buf) - 1) { + chars = sizeof (buf) - 1; + msgbuf[chars] = 0; + } + + wcstombs(buf, msgbuf, chars + 1); + LocalFree(msgbuf); + } + else { + sprintf(buf, "unknown win32 error (%ld)", error); + } + + SetLastError(lasterr); + return buf; +} + +static void pwinerror (s) + const char *s; +{ + if (s && *s) + fprintf(stderr, "%s: %s\n", s, strwinerror(GetLastError ())); + else + fprintf(stderr, "%s\n", strwinerror(GetLastError ())); +} + +#endif /* UNDER_CE */ + +#ifndef GZ_SUFFIX +# define GZ_SUFFIX ".gz" +#endif +#define SUFFIX_LEN (sizeof(GZ_SUFFIX)-1) + +#define BUFLEN 16384 +#define MAX_NAME_LEN 1024 + +#ifdef MAXSEG_64K +# define local static + /* Needed for systems with limitation on stack size. */ +#else +# define local +#endif + +#ifdef Z_SOLO +/* for Z_SOLO, create simplified gz* functions using deflate and inflate */ + +#if defined(Z_HAVE_UNISTD_H) || defined(Z_LARGE) +# include /* for unlink() */ +#endif + +void *myalloc OF((void *, unsigned, unsigned)); +void myfree OF((void *, void *)); + +void *myalloc(q, n, m) + void *q; + unsigned n, m; +{ + (void)q; + return calloc(n, m); +} + +void myfree(q, p) + void *q, *p; +{ + (void)q; + free(p); +} + +typedef struct gzFile_s { + FILE *file; + int write; + int err; + char *msg; + z_stream strm; +} *gzFile; + +gzFile gzopen OF((const char *, const char *)); +gzFile gzdopen OF((int, const char *)); +gzFile gz_open OF((const char *, int, const char *)); + +gzFile gzopen(path, mode) +const char *path; +const char *mode; +{ + return gz_open(path, -1, mode); +} + +gzFile gzdopen(fd, mode) +int fd; +const char *mode; +{ + return gz_open(NULL, fd, mode); +} + +gzFile gz_open(path, fd, mode) + const char *path; + int fd; + const char *mode; +{ + gzFile gz; + int ret; + + gz = malloc(sizeof(struct gzFile_s)); + if (gz == NULL) + return NULL; + gz->write = strchr(mode, 'w') != NULL; + gz->strm.zalloc = myalloc; + gz->strm.zfree = myfree; + gz->strm.opaque = Z_NULL; + if (gz->write) + ret = deflateInit2(&(gz->strm), -1, 8, 15 + 16, 8, 0); + else { + gz->strm.next_in = 0; + gz->strm.avail_in = Z_NULL; + ret = inflateInit2(&(gz->strm), 15 + 16); + } + if (ret != Z_OK) { + free(gz); + return NULL; + } + gz->file = path == NULL ? fdopen(fd, gz->write ? "wb" : "rb") : + fopen(path, gz->write ? "wb" : "rb"); + if (gz->file == NULL) { + gz->write ? deflateEnd(&(gz->strm)) : inflateEnd(&(gz->strm)); + free(gz); + return NULL; + } + gz->err = 0; + gz->msg = ""; + return gz; +} + +int gzwrite OF((gzFile, const void *, unsigned)); + +int gzwrite(gz, buf, len) + gzFile gz; + const void *buf; + unsigned len; +{ + z_stream *strm; + unsigned char out[BUFLEN]; + + if (gz == NULL || !gz->write) + return 0; + strm = &(gz->strm); + strm->next_in = (void *)buf; + strm->avail_in = len; + do { + strm->next_out = out; + strm->avail_out = BUFLEN; + (void)deflate(strm, Z_NO_FLUSH); + fwrite(out, 1, BUFLEN - strm->avail_out, gz->file); + } while (strm->avail_out == 0); + return len; +} + +int gzread OF((gzFile, void *, unsigned)); + +int gzread(gz, buf, len) + gzFile gz; + void *buf; + unsigned len; +{ + int ret; + unsigned got; + unsigned char in[1]; + z_stream *strm; + + if (gz == NULL || gz->write) + return 0; + if (gz->err) + return 0; + strm = &(gz->strm); + strm->next_out = (void *)buf; + strm->avail_out = len; + do { + got = fread(in, 1, 1, gz->file); + if (got == 0) + break; + strm->next_in = in; + strm->avail_in = 1; + ret = inflate(strm, Z_NO_FLUSH); + if (ret == Z_DATA_ERROR) { + gz->err = Z_DATA_ERROR; + gz->msg = strm->msg; + return 0; + } + if (ret == Z_STREAM_END) + inflateReset(strm); + } while (strm->avail_out); + return len - strm->avail_out; +} + +int gzclose OF((gzFile)); + +int gzclose(gz) + gzFile gz; +{ + z_stream *strm; + unsigned char out[BUFLEN]; + + if (gz == NULL) + return Z_STREAM_ERROR; + strm = &(gz->strm); + if (gz->write) { + strm->next_in = Z_NULL; + strm->avail_in = 0; + do { + strm->next_out = out; + strm->avail_out = BUFLEN; + (void)deflate(strm, Z_FINISH); + fwrite(out, 1, BUFLEN - strm->avail_out, gz->file); + } while (strm->avail_out == 0); + deflateEnd(strm); + } + else + inflateEnd(strm); + fclose(gz->file); + free(gz); + return Z_OK; +} + +const char *gzerror OF((gzFile, int *)); + +const char *gzerror(gz, err) + gzFile gz; + int *err; +{ + *err = gz->err; + return gz->msg; +} + +#endif + +static char *prog; + +void error OF((const char *msg)); +void gz_compress OF((FILE *in, gzFile out)); +#ifdef USE_MMAP +int gz_compress_mmap OF((FILE *in, gzFile out)); +#endif +void gz_uncompress OF((gzFile in, FILE *out)); +void file_compress OF((char *file, char *mode)); +void file_uncompress OF((char *file)); +int main OF((int argc, char *argv[])); + +/* =========================================================================== + * Display error message and exit + */ +void error(msg) + const char *msg; +{ + fprintf(stderr, "%s: %s\n", prog, msg); + exit(1); +} + +/* =========================================================================== + * Compress input to output then close both files. + */ + +void gz_compress(in, out) + FILE *in; + gzFile out; +{ + local char buf[BUFLEN]; + int len; + int err; + +#ifdef USE_MMAP + /* Try first compressing with mmap. If mmap fails (minigzip used in a + * pipe), use the normal fread loop. + */ + if (gz_compress_mmap(in, out) == Z_OK) return; +#endif + for (;;) { + len = (int)fread(buf, 1, sizeof(buf), in); + if (ferror(in)) { + perror("fread"); + exit(1); + } + if (len == 0) break; + + if (gzwrite(out, buf, (unsigned)len) != len) error(gzerror(out, &err)); + } + fclose(in); + if (gzclose(out) != Z_OK) error("failed gzclose"); +} + +#ifdef USE_MMAP /* MMAP version, Miguel Albrecht */ + +/* Try compressing the input file at once using mmap. Return Z_OK if + * if success, Z_ERRNO otherwise. + */ +int gz_compress_mmap(in, out) + FILE *in; + gzFile out; +{ + int len; + int err; + int ifd = fileno(in); + caddr_t buf; /* mmap'ed buffer for the entire input file */ + off_t buf_len; /* length of the input file */ + struct stat sb; + + /* Determine the size of the file, needed for mmap: */ + if (fstat(ifd, &sb) < 0) return Z_ERRNO; + buf_len = sb.st_size; + if (buf_len <= 0) return Z_ERRNO; + + /* Now do the actual mmap: */ + buf = mmap((caddr_t) 0, buf_len, PROT_READ, MAP_SHARED, ifd, (off_t)0); + if (buf == (caddr_t)(-1)) return Z_ERRNO; + + /* Compress the whole file at once: */ + len = gzwrite(out, (char *)buf, (unsigned)buf_len); + + if (len != (int)buf_len) error(gzerror(out, &err)); + + munmap(buf, buf_len); + fclose(in); + if (gzclose(out) != Z_OK) error("failed gzclose"); + return Z_OK; +} +#endif /* USE_MMAP */ + +/* =========================================================================== + * Uncompress input to output then close both files. + */ +void gz_uncompress(in, out) + gzFile in; + FILE *out; +{ + local char buf[BUFLEN]; + int len; + int err; + + for (;;) { + len = gzread(in, buf, sizeof(buf)); + if (len < 0) error (gzerror(in, &err)); + if (len == 0) break; + + if ((int)fwrite(buf, 1, (unsigned)len, out) != len) { + error("failed fwrite"); + } + } + if (fclose(out)) error("failed fclose"); + + if (gzclose(in) != Z_OK) error("failed gzclose"); +} + + +/* =========================================================================== + * Compress the given file: create a corresponding .gz file and remove the + * original. + */ +void file_compress(file, mode) + char *file; + char *mode; +{ + local char outfile[MAX_NAME_LEN]; + FILE *in; + gzFile out; + + if (strlen(file) + strlen(GZ_SUFFIX) >= sizeof(outfile)) { + fprintf(stderr, "%s: filename too long\n", prog); + exit(1); + } + +#if !defined(NO_snprintf) && !defined(NO_vsnprintf) + snprintf(outfile, sizeof(outfile), "%s%s", file, GZ_SUFFIX); +#else + strcpy(outfile, file); + strcat(outfile, GZ_SUFFIX); +#endif + + in = fopen(file, "rb"); + if (in == NULL) { + perror(file); + exit(1); + } + out = gzopen(outfile, mode); + if (out == NULL) { + fprintf(stderr, "%s: can't gzopen %s\n", prog, outfile); + exit(1); + } + gz_compress(in, out); + + unlink(file); +} + + +/* =========================================================================== + * Uncompress the given file and remove the original. + */ +void file_uncompress(file) + char *file; +{ + local char buf[MAX_NAME_LEN]; + char *infile, *outfile; + FILE *out; + gzFile in; + unsigned len = strlen(file); + + if (len + strlen(GZ_SUFFIX) >= sizeof(buf)) { + fprintf(stderr, "%s: filename too long\n", prog); + exit(1); + } + +#if !defined(NO_snprintf) && !defined(NO_vsnprintf) + snprintf(buf, sizeof(buf), "%s", file); +#else + strcpy(buf, file); +#endif + + if (len > SUFFIX_LEN && strcmp(file+len-SUFFIX_LEN, GZ_SUFFIX) == 0) { + infile = file; + outfile = buf; + outfile[len-3] = '\0'; + } else { + outfile = file; + infile = buf; +#if !defined(NO_snprintf) && !defined(NO_vsnprintf) + snprintf(buf + len, sizeof(buf) - len, "%s", GZ_SUFFIX); +#else + strcat(infile, GZ_SUFFIX); +#endif + } + in = gzopen(infile, "rb"); + if (in == NULL) { + fprintf(stderr, "%s: can't gzopen %s\n", prog, infile); + exit(1); + } + out = fopen(outfile, "wb"); + if (out == NULL) { + perror(file); + exit(1); + } + + gz_uncompress(in, out); + + unlink(infile); +} + + +/* =========================================================================== + * Usage: minigzip [-c] [-d] [-f] [-h] [-r] [-1 to -9] [files...] + * -c : write to standard output + * -d : decompress + * -f : compress with Z_FILTERED + * -h : compress with Z_HUFFMAN_ONLY + * -r : compress with Z_RLE + * -1 to -9 : compression level + */ + +int main(argc, argv) + int argc; + char *argv[]; +{ + int copyout = 0; + int uncompr = 0; + gzFile file; + char *bname, outmode[20]; + +#if !defined(NO_snprintf) && !defined(NO_vsnprintf) + snprintf(outmode, sizeof(outmode), "%s", "wb6 "); +#else + strcpy(outmode, "wb6 "); +#endif + + prog = argv[0]; + bname = strrchr(argv[0], '/'); + if (bname) + bname++; + else + bname = argv[0]; + argc--, argv++; + + if (!strcmp(bname, "gunzip")) + uncompr = 1; + else if (!strcmp(bname, "zcat")) + copyout = uncompr = 1; + + while (argc > 0) { + if (strcmp(*argv, "-c") == 0) + copyout = 1; + else if (strcmp(*argv, "-d") == 0) + uncompr = 1; + else if (strcmp(*argv, "-f") == 0) + outmode[3] = 'f'; + else if (strcmp(*argv, "-h") == 0) + outmode[3] = 'h'; + else if (strcmp(*argv, "-r") == 0) + outmode[3] = 'R'; + else if ((*argv)[0] == '-' && (*argv)[1] >= '1' && (*argv)[1] <= '9' && + (*argv)[2] == 0) + outmode[2] = (*argv)[1]; + else + break; + argc--, argv++; + } + if (outmode[3] == ' ') + outmode[3] = 0; + if (argc == 0) { + SET_BINARY_MODE(stdin); + SET_BINARY_MODE(stdout); + if (uncompr) { + file = gzdopen(fileno(stdin), "rb"); + if (file == NULL) error("can't gzdopen stdin"); + gz_uncompress(file, stdout); + } else { + file = gzdopen(fileno(stdout), outmode); + if (file == NULL) error("can't gzdopen stdout"); + gz_compress(stdin, file); + } + } else { + if (copyout) { + SET_BINARY_MODE(stdout); + } + do { + if (uncompr) { + if (copyout) { + file = gzopen(*argv, "rb"); + if (file == NULL) + fprintf(stderr, "%s: can't gzopen %s\n", prog, *argv); + else + gz_uncompress(file, stdout); + } else { + file_uncompress(*argv); + } + } else { + if (copyout) { + FILE * in = fopen(*argv, "rb"); + + if (in == NULL) { + perror(*argv); + } else { + file = gzdopen(fileno(stdout), outmode); + if (file == NULL) error("can't gzdopen stdout"); + + gz_compress(in, file); + } + + } else { + file_compress(*argv, outmode); + } + } + } while (argv++, --argc); + } + return 0; +} diff --git a/zlib/treebuild.xml b/zlib/treebuild.xml new file mode 100644 index 000000000000..fd75525f9959 --- /dev/null +++ b/zlib/treebuild.xml @@ -0,0 +1,116 @@ + + + + zip compression library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/zlib/trees.c b/zlib/trees.c index 395e4e16814e..1f64ae3ec670 100644 --- a/zlib/trees.c +++ b/zlib/trees.c @@ -1,5 +1,6 @@ /* trees.c -- output deflated data using Huffman coding - * Copyright (C) 1995-2005 Jean-loup Gailly + * Copyright (C) 1995-2017 Jean-loup Gailly + * detect_data_type() function provided freely by Cosmin Truta, 2006 * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -35,7 +36,7 @@ #include "deflate.h" -#ifdef DEBUG +#ifdef ZLIB_DEBUG # include #endif @@ -73,11 +74,6 @@ local const uch bl_order[BL_CODES] * probability, to avoid transmitting the lengths for unused bit length codes. */ -#define Buf_size (8 * 2*sizeof(char)) -/* Number of bits used within bi_buf. (bi_buf might be implemented on - * more than 16 bits on some systems.) - */ - /* =========================================================================== * Local data. These are initialized only once. */ @@ -126,13 +122,13 @@ struct static_tree_desc_s { int max_length; /* max bit length for the codes */ }; -local static_tree_desc static_l_desc = +local const static_tree_desc static_l_desc = {static_ltree, extra_lbits, LITERALS+1, L_CODES, MAX_BITS}; -local static_tree_desc static_d_desc = +local const static_tree_desc static_d_desc = {static_dtree, extra_dbits, 0, D_CODES, MAX_BITS}; -local static_tree_desc static_bl_desc = +local const static_tree_desc static_bl_desc = {(const ct_data *)0, extra_blbits, 0, BL_CODES, MAX_BL_BITS}; /* =========================================================================== @@ -150,24 +146,22 @@ local void send_tree OF((deflate_state *s, ct_data *tree, int max_code)); local int build_bl_tree OF((deflate_state *s)); local void send_all_trees OF((deflate_state *s, int lcodes, int dcodes, int blcodes)); -local void compress_block OF((deflate_state *s, ct_data *ltree, - ct_data *dtree)); -local void set_data_type OF((deflate_state *s)); +local void compress_block OF((deflate_state *s, const ct_data *ltree, + const ct_data *dtree)); +local int detect_data_type OF((deflate_state *s)); local unsigned bi_reverse OF((unsigned value, int length)); local void bi_windup OF((deflate_state *s)); local void bi_flush OF((deflate_state *s)); -local void copy_block OF((deflate_state *s, charf *buf, unsigned len, - int header)); #ifdef GEN_TREES_H local void gen_trees_header OF((void)); #endif -#ifndef DEBUG +#ifndef ZLIB_DEBUG # define send_code(s, c, tree) send_bits(s, tree[c].Code, tree[c].Len) /* Send a code of the given tree. c and tree must not have side effects */ -#else /* DEBUG */ +#else /* !ZLIB_DEBUG */ # define send_code(s, c, tree) \ { if (z_verbose>2) fprintf(stderr,"\ncd %3d ",(c)); \ send_bits(s, tree[c].Code, tree[c].Len); } @@ -186,7 +180,7 @@ local void gen_trees_header OF((void)); * Send a value on a given number of bits. * IN assertion: length <= 16 and value fits in length bits. */ -#ifdef DEBUG +#ifdef ZLIB_DEBUG local void send_bits OF((deflate_state *s, int value, int length)); local void send_bits(s, value, length) @@ -203,31 +197,31 @@ local void send_bits(s, value, length) * unused bits in value. */ if (s->bi_valid > (int)Buf_size - length) { - s->bi_buf |= (value << s->bi_valid); + s->bi_buf |= (ush)value << s->bi_valid; put_short(s, s->bi_buf); s->bi_buf = (ush)value >> (Buf_size - s->bi_valid); s->bi_valid += length - Buf_size; } else { - s->bi_buf |= value << s->bi_valid; + s->bi_buf |= (ush)value << s->bi_valid; s->bi_valid += length; } } -#else /* !DEBUG */ +#else /* !ZLIB_DEBUG */ #define send_bits(s, value, length) \ { int len = length;\ if (s->bi_valid > (int)Buf_size - len) {\ - int val = value;\ - s->bi_buf |= (val << s->bi_valid);\ + int val = (int)value;\ + s->bi_buf |= (ush)val << s->bi_valid;\ put_short(s, s->bi_buf);\ s->bi_buf = (ush)val >> (Buf_size - s->bi_valid);\ s->bi_valid += len - Buf_size;\ } else {\ - s->bi_buf |= (value) << s->bi_valid;\ + s->bi_buf |= (ush)(value) << s->bi_valid;\ s->bi_valid += len;\ }\ } -#endif /* DEBUG */ +#endif /* ZLIB_DEBUG */ /* the arguments must not have side effects */ @@ -250,11 +244,13 @@ local void tr_static_init() if (static_init_done) return; /* For some embedded targets, global variables are not initialized: */ +#ifdef NO_INIT_GLOBAL_POINTERS static_l_desc.static_tree = static_ltree; static_l_desc.extra_bits = extra_lbits; static_d_desc.static_tree = static_dtree; static_d_desc.extra_bits = extra_dbits; static_bl_desc.extra_bits = extra_blbits; +#endif /* Initialize the mapping length (0..255) -> length code (0..28) */ length = 0; @@ -319,7 +315,7 @@ local void tr_static_init() * Genererate the file trees.h describing the static trees. */ #ifdef GEN_TREES_H -# ifndef DEBUG +# ifndef ZLIB_DEBUG # include # endif @@ -348,13 +344,14 @@ void gen_trees_header() static_dtree[i].Len, SEPARATOR(i, D_CODES-1, 5)); } - fprintf(header, "const uch _dist_code[DIST_CODE_LEN] = {\n"); + fprintf(header, "const uch ZLIB_INTERNAL _dist_code[DIST_CODE_LEN] = {\n"); for (i = 0; i < DIST_CODE_LEN; i++) { fprintf(header, "%2u%s", _dist_code[i], SEPARATOR(i, DIST_CODE_LEN-1, 20)); } - fprintf(header, "const uch _length_code[MAX_MATCH-MIN_MATCH+1]= {\n"); + fprintf(header, + "const uch ZLIB_INTERNAL _length_code[MAX_MATCH-MIN_MATCH+1]= {\n"); for (i = 0; i < MAX_MATCH-MIN_MATCH+1; i++) { fprintf(header, "%2u%s", _length_code[i], SEPARATOR(i, MAX_MATCH-MIN_MATCH, 20)); @@ -379,7 +376,7 @@ void gen_trees_header() /* =========================================================================== * Initialize the tree data structures for a new zlib stream. */ -void _tr_init(s) +void ZLIB_INTERNAL _tr_init(s) deflate_state *s; { tr_static_init(); @@ -395,8 +392,7 @@ void _tr_init(s) s->bi_buf = 0; s->bi_valid = 0; - s->last_eob_len = 8; /* enough lookahead for inflate */ -#ifdef DEBUG +#ifdef ZLIB_DEBUG s->compressed_len = 0L; s->bits_sent = 0L; #endif @@ -524,12 +520,12 @@ local void gen_bitlen(s, desc) xbits = 0; if (n >= base) xbits = extra[n-base]; f = tree[n].Freq; - s->opt_len += (ulg)f * (bits + xbits); - if (stree) s->static_len += (ulg)f * (stree[n].Len + xbits); + s->opt_len += (ulg)f * (unsigned)(bits + xbits); + if (stree) s->static_len += (ulg)f * (unsigned)(stree[n].Len + xbits); } if (overflow == 0) return; - Trace((stderr,"\nbit length overflow\n")); + Tracev((stderr,"\nbit length overflow\n")); /* This happens for example on obj2 and pic of the Calgary corpus */ /* Find the first bit length which could increase: */ @@ -556,9 +552,8 @@ local void gen_bitlen(s, desc) m = s->heap[--h]; if (m > max_code) continue; if ((unsigned) tree[m].Len != (unsigned) bits) { - Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits)); - s->opt_len += ((long)bits - (long)tree[m].Len) - *(long)tree[m].Freq; + Tracev((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits)); + s->opt_len += ((ulg)bits - tree[m].Len) * tree[m].Freq; tree[m].Len = (ush)bits; } n--; @@ -580,7 +575,7 @@ local void gen_codes (tree, max_code, bl_count) ushf *bl_count; /* number of codes at each bit length */ { ush next_code[MAX_BITS+1]; /* next code value for each bit length */ - ush code = 0; /* running code value */ + unsigned code = 0; /* running code value */ int bits; /* bit index */ int n; /* code index */ @@ -588,7 +583,8 @@ local void gen_codes (tree, max_code, bl_count) * without bit reversal. */ for (bits = 1; bits <= MAX_BITS; bits++) { - next_code[bits] = code = (code + bl_count[bits-1]) << 1; + code = (code + bl_count[bits-1]) << 1; + next_code[bits] = (ush)code; } /* Check that the bit counts in bl_count are consistent. The last code * must be all ones. @@ -601,7 +597,7 @@ local void gen_codes (tree, max_code, bl_count) int len = tree[n].Len; if (len == 0) continue; /* Now reverse the bits */ - tree[n].Code = bi_reverse(next_code[len]++, len); + tree[n].Code = (ush)bi_reverse(next_code[len]++, len); Tracecv(tree != static_ltree, (stderr,"\nn %3d %c l %2d c %4x (%x) ", n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1)); @@ -823,7 +819,7 @@ local int build_bl_tree(s) if (s->bl_tree[bl_order[max_blindex]].Len != 0) break; } /* Update opt_len to include the bit length tree and counts */ - s->opt_len += 3*(max_blindex+1) + 5+5+4; + s->opt_len += 3*((ulg)max_blindex+1) + 5+5+4; Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld", s->opt_len, s->static_len)); @@ -864,65 +860,63 @@ local void send_all_trees(s, lcodes, dcodes, blcodes) /* =========================================================================== * Send a stored block */ -void _tr_stored_block(s, buf, stored_len, eof) +void ZLIB_INTERNAL _tr_stored_block(s, buf, stored_len, last) deflate_state *s; charf *buf; /* input block */ ulg stored_len; /* length of input block */ - int eof; /* true if this is the last block for a file */ + int last; /* one if this is the last block for a file */ { - send_bits(s, (STORED_BLOCK<<1)+eof, 3); /* send block type */ -#ifdef DEBUG + send_bits(s, (STORED_BLOCK<<1)+last, 3); /* send block type */ + bi_windup(s); /* align on byte boundary */ + put_short(s, (ush)stored_len); + put_short(s, (ush)~stored_len); + if (stored_len != 0) { + /* Avoid calling memcpy when stored_len equals to zero to + avoid UBSAN errors */ + zmemcpy(s->pending_buf + s->pending, (Bytef *)buf, stored_len); + } + s->pending += stored_len; +#ifdef ZLIB_DEBUG s->compressed_len = (s->compressed_len + 3 + 7) & (ulg)~7L; s->compressed_len += (stored_len + 4) << 3; + s->bits_sent += 2*16; + s->bits_sent += stored_len<<3; #endif - copy_block(s, buf, (unsigned)stored_len, 1); /* with header */ +} + +/* =========================================================================== + * Flush the bits in the bit buffer to pending output (leaves at most 7 bits) + */ +void ZLIB_INTERNAL _tr_flush_bits(s) + deflate_state *s; +{ + bi_flush(s); } /* =========================================================================== * Send one empty static block to give enough lookahead for inflate. * This takes 10 bits, of which 7 may remain in the bit buffer. - * The current inflate code requires 9 bits of lookahead. If the - * last two codes for the previous block (real code plus EOB) were coded - * on 5 bits or less, inflate may have only 5+3 bits of lookahead to decode - * the last real code. In this case we send two empty static blocks instead - * of one. (There are no problems if the previous block is stored or fixed.) - * To simplify the code, we assume the worst case of last real code encoded - * on one bit only. */ -void _tr_align(s) +void ZLIB_INTERNAL _tr_align(s) deflate_state *s; { send_bits(s, STATIC_TREES<<1, 3); send_code(s, END_BLOCK, static_ltree); -#ifdef DEBUG +#ifdef ZLIB_DEBUG s->compressed_len += 10L; /* 3 for block type, 7 for EOB */ #endif bi_flush(s); - /* Of the 10 bits for the empty block, we have already sent - * (10 - bi_valid) bits. The lookahead for the last real code (before - * the EOB of the previous block) was thus at least one plus the length - * of the EOB plus what we have just sent of the empty static block. - */ - if (1 + s->last_eob_len + 10 - s->bi_valid < 9) { - send_bits(s, STATIC_TREES<<1, 3); - send_code(s, END_BLOCK, static_ltree); -#ifdef DEBUG - s->compressed_len += 10L; -#endif - bi_flush(s); - } - s->last_eob_len = 7; } /* =========================================================================== * Determine the best encoding for the current block: dynamic trees, static - * trees or store, and output the encoded block to the zip file. + * trees or store, and write out the encoded block. */ -void _tr_flush_block(s, buf, stored_len, eof) +void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last) deflate_state *s; charf *buf; /* input block, or NULL if too old */ ulg stored_len; /* length of input block */ - int eof; /* true if this is the last block for a file */ + int last; /* one if this is the last block for a file */ { ulg opt_lenb, static_lenb; /* opt_len and static_len in bytes */ int max_blindex = 0; /* index of last bit length code of non zero freq */ @@ -931,8 +925,8 @@ void _tr_flush_block(s, buf, stored_len, eof) if (s->level > 0) { /* Check if the file is binary or text */ - if (stored_len > 0 && s->strm->data_type == Z_UNKNOWN) - set_data_type(s); + if (s->strm->data_type == Z_UNKNOWN) + s->strm->data_type = detect_data_type(s); /* Construct the literal and distance trees */ build_tree(s, (tree_desc *)(&(s->l_desc))); @@ -978,24 +972,26 @@ void _tr_flush_block(s, buf, stored_len, eof) * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to * transform a block into a stored block. */ - _tr_stored_block(s, buf, stored_len, eof); + _tr_stored_block(s, buf, stored_len, last); #ifdef FORCE_STATIC } else if (static_lenb >= 0) { /* force static trees */ #else } else if (s->strategy == Z_FIXED || static_lenb == opt_lenb) { #endif - send_bits(s, (STATIC_TREES<<1)+eof, 3); - compress_block(s, (ct_data *)static_ltree, (ct_data *)static_dtree); -#ifdef DEBUG + send_bits(s, (STATIC_TREES<<1)+last, 3); + compress_block(s, (const ct_data *)static_ltree, + (const ct_data *)static_dtree); +#ifdef ZLIB_DEBUG s->compressed_len += 3 + s->static_len; #endif } else { - send_bits(s, (DYN_TREES<<1)+eof, 3); + send_bits(s, (DYN_TREES<<1)+last, 3); send_all_trees(s, s->l_desc.max_code+1, s->d_desc.max_code+1, max_blindex+1); - compress_block(s, (ct_data *)s->dyn_ltree, (ct_data *)s->dyn_dtree); -#ifdef DEBUG + compress_block(s, (const ct_data *)s->dyn_ltree, + (const ct_data *)s->dyn_dtree); +#ifdef ZLIB_DEBUG s->compressed_len += 3 + s->opt_len; #endif } @@ -1005,21 +1001,21 @@ void _tr_flush_block(s, buf, stored_len, eof) */ init_block(s); - if (eof) { + if (last) { bi_windup(s); -#ifdef DEBUG +#ifdef ZLIB_DEBUG s->compressed_len += 7; /* align on byte boundary */ #endif } Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3, - s->compressed_len-7*eof)); + s->compressed_len-7*last)); } /* =========================================================================== * Save the match info and tally the frequency counts. Return true if * the current block must be flushed. */ -int _tr_tally (s, dist, lc) +int ZLIB_INTERNAL _tr_tally (s, dist, lc) deflate_state *s; unsigned dist; /* distance of matched string */ unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */ @@ -1071,8 +1067,8 @@ int _tr_tally (s, dist, lc) */ local void compress_block(s, ltree, dtree) deflate_state *s; - ct_data *ltree; /* literal tree */ - ct_data *dtree; /* distance tree */ + const ct_data *ltree; /* literal tree */ + const ct_data *dtree; /* distance tree */ { unsigned dist; /* distance of matched string */ int lc; /* match length or unmatched char (if dist == 0) */ @@ -1102,7 +1098,7 @@ local void compress_block(s, ltree, dtree) send_code(s, code, dtree); /* send the distance code */ extra = extra_dbits[code]; if (extra != 0) { - dist -= base_dist[code]; + dist -= (unsigned)base_dist[code]; send_bits(s, dist, extra); /* send the extra distance bits */ } } /* literal or match pair ? */ @@ -1114,28 +1110,48 @@ local void compress_block(s, ltree, dtree) } while (lx < s->last_lit); send_code(s, END_BLOCK, ltree); - s->last_eob_len = ltree[END_BLOCK].Len; } /* =========================================================================== - * Set the data type to BINARY or TEXT, using a crude approximation: - * set it to Z_TEXT if all symbols are either printable characters (33 to 255) - * or white spaces (9 to 13, or 32); or set it to Z_BINARY otherwise. + * Check if the data type is TEXT or BINARY, using the following algorithm: + * - TEXT if the two conditions below are satisfied: + * a) There are no non-portable control characters belonging to the + * "black list" (0..6, 14..25, 28..31). + * b) There is at least one printable character belonging to the + * "white list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255). + * - BINARY otherwise. + * - The following partially-portable control characters form a + * "gray list" that is ignored in this detection algorithm: + * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}). * IN assertion: the fields Freq of dyn_ltree are set. */ -local void set_data_type(s) +local int detect_data_type(s) deflate_state *s; { + /* black_mask is the bit mask of black-listed bytes + * set bits 0..6, 14..25, and 28..31 + * 0xf3ffc07f = binary 11110011111111111100000001111111 + */ + unsigned long black_mask = 0xf3ffc07fUL; int n; - for (n = 0; n < 9; n++) + /* Check for non-textual ("black-listed") bytes. */ + for (n = 0; n <= 31; n++, black_mask >>= 1) + if ((black_mask & 1) && (s->dyn_ltree[n].Freq != 0)) + return Z_BINARY; + + /* Check for textual ("white-listed") bytes. */ + if (s->dyn_ltree[9].Freq != 0 || s->dyn_ltree[10].Freq != 0 + || s->dyn_ltree[13].Freq != 0) + return Z_TEXT; + for (n = 32; n < LITERALS; n++) if (s->dyn_ltree[n].Freq != 0) - break; - if (n == 9) - for (n = 14; n < 32; n++) - if (s->dyn_ltree[n].Freq != 0) - break; - s->strm->data_type = (n == 32) ? Z_TEXT : Z_BINARY; + return Z_TEXT; + + /* There are no "black-listed" or "white-listed" bytes: + * this stream either is empty or has tolerated ("gray-listed") bytes only. + */ + return Z_BINARY; } /* =========================================================================== @@ -1185,35 +1201,7 @@ local void bi_windup(s) } s->bi_buf = 0; s->bi_valid = 0; -#ifdef DEBUG +#ifdef ZLIB_DEBUG s->bits_sent = (s->bits_sent+7) & ~7; #endif } - -/* =========================================================================== - * Copy a stored block, storing first the length and its - * one's complement if requested. - */ -local void copy_block(s, buf, len, header) - deflate_state *s; - charf *buf; /* the input data */ - unsigned len; /* its length */ - int header; /* true if block header must be written */ -{ - bi_windup(s); /* align on byte boundary */ - s->last_eob_len = 8; /* enough lookahead for inflate */ - - if (header) { - put_short(s, (ush)len); - put_short(s, (ush)~len); -#ifdef DEBUG - s->bits_sent += 2*16; -#endif - } -#ifdef DEBUG - s->bits_sent += (ulg)len<<3; -#endif - while (len--) { - put_byte(s, *buf++); - } -} diff --git a/zlib/trees.h b/zlib/trees.h index 72facf900f77..d35639d82a27 100644 --- a/zlib/trees.h +++ b/zlib/trees.h @@ -70,7 +70,7 @@ local const ct_data static_dtree[D_CODES] = { {{19},{ 5}}, {{11},{ 5}}, {{27},{ 5}}, {{ 7},{ 5}}, {{23},{ 5}} }; -const uch _dist_code[DIST_CODE_LEN] = { +const uch ZLIB_INTERNAL _dist_code[DIST_CODE_LEN] = { 0, 1, 2, 3, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, @@ -99,7 +99,7 @@ const uch _dist_code[DIST_CODE_LEN] = { 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29 }; -const uch _length_code[MAX_MATCH-MIN_MATCH+1]= { +const uch ZLIB_INTERNAL _length_code[MAX_MATCH-MIN_MATCH+1]= { 0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, diff --git a/zlib/uncompr.c b/zlib/uncompr.c index b59e3d0defb2..f03a1a865e34 100644 --- a/zlib/uncompr.c +++ b/zlib/uncompr.c @@ -1,5 +1,5 @@ /* uncompr.c -- decompress a memory buffer - * Copyright (C) 1995-2003 Jean-loup Gailly. + * Copyright (C) 1995-2003, 2010, 2014, 2016 Jean-loup Gailly, Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -9,53 +9,85 @@ #include "zlib.h" /* =========================================================================== - Decompresses the source buffer into the destination buffer. sourceLen is - the byte length of the source buffer. Upon entry, destLen is the total - size of the destination buffer, which must be large enough to hold the - entire uncompressed data. (The size of the uncompressed data must have - been saved previously by the compressor and transmitted to the decompressor - by some mechanism outside the scope of this compression library.) - Upon exit, destLen is the actual size of the compressed buffer. - This function can be used to decompress a whole file at once if the - input file is mmap'ed. - - uncompress returns Z_OK if success, Z_MEM_ERROR if there was not - enough memory, Z_BUF_ERROR if there was not enough room in the output - buffer, or Z_DATA_ERROR if the input data was corrupted. + Decompresses the source buffer into the destination buffer. *sourceLen is + the byte length of the source buffer. Upon entry, *destLen is the total size + of the destination buffer, which must be large enough to hold the entire + uncompressed data. (The size of the uncompressed data must have been saved + previously by the compressor and transmitted to the decompressor by some + mechanism outside the scope of this compression library.) Upon exit, + *destLen is the size of the decompressed data and *sourceLen is the number + of source bytes consumed. Upon return, source + *sourceLen points to the + first unused input byte. + + uncompress returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_BUF_ERROR if there was not enough room in the output buffer, or + Z_DATA_ERROR if the input data was corrupted, including if the input data is + an incomplete zlib stream. */ -int ZEXPORT uncompress (dest, destLen, source, sourceLen) +int ZEXPORT uncompress2 (dest, destLen, source, sourceLen) Bytef *dest; uLongf *destLen; const Bytef *source; - uLong sourceLen; + uLong *sourceLen; { z_stream stream; int err; + const uInt max = (uInt)-1; + uLong len, left; + Byte buf[1]; /* for detection of incomplete stream when *destLen == 0 */ - stream.next_in = (Bytef*)source; - stream.avail_in = (uInt)sourceLen; - /* Check for source > 64K on 16-bit machine: */ - if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR; - - stream.next_out = dest; - stream.avail_out = (uInt)*destLen; - if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR; + len = *sourceLen; + if (*destLen) { + left = *destLen; + *destLen = 0; + } + else { + left = 1; + dest = buf; + } + stream.next_in = (z_const Bytef *)source; + stream.avail_in = 0; stream.zalloc = (alloc_func)0; stream.zfree = (free_func)0; + stream.opaque = (voidpf)0; err = inflateInit(&stream); if (err != Z_OK) return err; - err = inflate(&stream, Z_FINISH); - if (err != Z_STREAM_END) { - inflateEnd(&stream); - if (err == Z_NEED_DICT || (err == Z_BUF_ERROR && stream.avail_in == 0)) - return Z_DATA_ERROR; - return err; - } - *destLen = stream.total_out; + stream.next_out = dest; + stream.avail_out = 0; + + do { + if (stream.avail_out == 0) { + stream.avail_out = left > (uLong)max ? max : (uInt)left; + left -= stream.avail_out; + } + if (stream.avail_in == 0) { + stream.avail_in = len > (uLong)max ? max : (uInt)len; + len -= stream.avail_in; + } + err = inflate(&stream, Z_NO_FLUSH); + } while (err == Z_OK); - err = inflateEnd(&stream); - return err; + *sourceLen -= len + stream.avail_in; + if (dest != buf) + *destLen = stream.total_out; + else if (stream.total_out && err == Z_BUF_ERROR) + left = 1; + + inflateEnd(&stream); + return err == Z_STREAM_END ? Z_OK : + err == Z_NEED_DICT ? Z_DATA_ERROR : + err == Z_BUF_ERROR && left + stream.avail_out ? Z_DATA_ERROR : + err; +} + +int ZEXPORT uncompress (dest, destLen, source, sourceLen) + Bytef *dest; + uLongf *destLen; + const Bytef *source; + uLong sourceLen; +{ + return uncompress2(dest, destLen, source, &sourceLen); } diff --git a/zlib/watcom/watcom_f.mak b/zlib/watcom/watcom_f.mak new file mode 100644 index 000000000000..37f4d74c19c0 --- /dev/null +++ b/zlib/watcom/watcom_f.mak @@ -0,0 +1,43 @@ +# Makefile for zlib +# OpenWatcom flat model +# Last updated: 28-Dec-2005 + +# To use, do "wmake -f watcom_f.mak" + +C_SOURCE = adler32.c compress.c crc32.c deflate.c & + gzclose.c gzlib.c gzread.c gzwrite.c & + infback.c inffast.c inflate.c inftrees.c & + trees.c uncompr.c zutil.c + +OBJS = adler32.obj compress.obj crc32.obj deflate.obj & + gzclose.obj gzlib.obj gzread.obj gzwrite.obj & + infback.obj inffast.obj inflate.obj inftrees.obj & + trees.obj uncompr.obj zutil.obj + +CC = wcc386 +LINKER = wcl386 +CFLAGS = -zq -mf -3r -fp3 -s -bt=dos -oilrtfm -fr=nul -wx +ZLIB_LIB = zlib_f.lib + +.C.OBJ: + $(CC) $(CFLAGS) $[@ + +all: $(ZLIB_LIB) example.exe minigzip.exe + +$(ZLIB_LIB): $(OBJS) + wlib -b -c $(ZLIB_LIB) -+adler32.obj -+compress.obj -+crc32.obj + wlib -b -c $(ZLIB_LIB) -+gzclose.obj -+gzlib.obj -+gzread.obj -+gzwrite.obj + wlib -b -c $(ZLIB_LIB) -+deflate.obj -+infback.obj + wlib -b -c $(ZLIB_LIB) -+inffast.obj -+inflate.obj -+inftrees.obj + wlib -b -c $(ZLIB_LIB) -+trees.obj -+uncompr.obj -+zutil.obj + +example.exe: $(ZLIB_LIB) example.obj + $(LINKER) -ldos32a -fe=example.exe example.obj $(ZLIB_LIB) + +minigzip.exe: $(ZLIB_LIB) minigzip.obj + $(LINKER) -ldos32a -fe=minigzip.exe minigzip.obj $(ZLIB_LIB) + +clean: .SYMBOLIC + del *.obj + del $(ZLIB_LIB) + @echo Cleaning done diff --git a/zlib/watcom/watcom_l.mak b/zlib/watcom/watcom_l.mak new file mode 100644 index 000000000000..193eed7b318a --- /dev/null +++ b/zlib/watcom/watcom_l.mak @@ -0,0 +1,43 @@ +# Makefile for zlib +# OpenWatcom large model +# Last updated: 28-Dec-2005 + +# To use, do "wmake -f watcom_l.mak" + +C_SOURCE = adler32.c compress.c crc32.c deflate.c & + gzclose.c gzlib.c gzread.c gzwrite.c & + infback.c inffast.c inflate.c inftrees.c & + trees.c uncompr.c zutil.c + +OBJS = adler32.obj compress.obj crc32.obj deflate.obj & + gzclose.obj gzlib.obj gzread.obj gzwrite.obj & + infback.obj inffast.obj inflate.obj inftrees.obj & + trees.obj uncompr.obj zutil.obj + +CC = wcc +LINKER = wcl +CFLAGS = -zq -ml -s -bt=dos -oilrtfm -fr=nul -wx +ZLIB_LIB = zlib_l.lib + +.C.OBJ: + $(CC) $(CFLAGS) $[@ + +all: $(ZLIB_LIB) example.exe minigzip.exe + +$(ZLIB_LIB): $(OBJS) + wlib -b -c $(ZLIB_LIB) -+adler32.obj -+compress.obj -+crc32.obj + wlib -b -c $(ZLIB_LIB) -+gzclose.obj -+gzlib.obj -+gzread.obj -+gzwrite.obj + wlib -b -c $(ZLIB_LIB) -+deflate.obj -+infback.obj + wlib -b -c $(ZLIB_LIB) -+inffast.obj -+inflate.obj -+inftrees.obj + wlib -b -c $(ZLIB_LIB) -+trees.obj -+uncompr.obj -+zutil.obj + +example.exe: $(ZLIB_LIB) example.obj + $(LINKER) -fe=example.exe example.obj $(ZLIB_LIB) + +minigzip.exe: $(ZLIB_LIB) minigzip.obj + $(LINKER) -fe=minigzip.exe minigzip.obj $(ZLIB_LIB) + +clean: .SYMBOLIC + del *.obj + del $(ZLIB_LIB) + @echo Cleaning done diff --git a/zlib/win32/DLL_FAQ.txt b/zlib/win32/DLL_FAQ.txt new file mode 100644 index 000000000000..12c009018c37 --- /dev/null +++ b/zlib/win32/DLL_FAQ.txt @@ -0,0 +1,397 @@ + + Frequently Asked Questions about ZLIB1.DLL + + +This document describes the design, the rationale, and the usage +of the official DLL build of zlib, named ZLIB1.DLL. If you have +general questions about zlib, you should see the file "FAQ" found +in the zlib distribution, or at the following location: + http://www.gzip.org/zlib/zlib_faq.html + + + 1. What is ZLIB1.DLL, and how can I get it? + + - ZLIB1.DLL is the official build of zlib as a DLL. + (Please remark the character '1' in the name.) + + Pointers to a precompiled ZLIB1.DLL can be found in the zlib + web site at: + http://www.zlib.net/ + + Applications that link to ZLIB1.DLL can rely on the following + specification: + + * The exported symbols are exclusively defined in the source + files "zlib.h" and "zlib.def", found in an official zlib + source distribution. + * The symbols are exported by name, not by ordinal. + * The exported names are undecorated. + * The calling convention of functions is "C" (CDECL). + * The ZLIB1.DLL binary is linked to MSVCRT.DLL. + + The archive in which ZLIB1.DLL is bundled contains compiled + test programs that must run with a valid build of ZLIB1.DLL. + It is recommended to download the prebuilt DLL from the zlib + web site, instead of building it yourself, to avoid potential + incompatibilities that could be introduced by your compiler + and build settings. If you do build the DLL yourself, please + make sure that it complies with all the above requirements, + and it runs with the precompiled test programs, bundled with + the original ZLIB1.DLL distribution. + + If, for any reason, you need to build an incompatible DLL, + please use a different file name. + + + 2. Why did you change the name of the DLL to ZLIB1.DLL? + What happened to the old ZLIB.DLL? + + - The old ZLIB.DLL, built from zlib-1.1.4 or earlier, required + compilation settings that were incompatible to those used by + a static build. The DLL settings were supposed to be enabled + by defining the macro ZLIB_DLL, before including "zlib.h". + Incorrect handling of this macro was silently accepted at + build time, resulting in two major problems: + + * ZLIB_DLL was missing from the old makefile. When building + the DLL, not all people added it to the build options. In + consequence, incompatible incarnations of ZLIB.DLL started + to circulate around the net. + + * When switching from using the static library to using the + DLL, applications had to define the ZLIB_DLL macro and + to recompile all the sources that contained calls to zlib + functions. Failure to do so resulted in creating binaries + that were unable to run with the official ZLIB.DLL build. + + The only possible solution that we could foresee was to make + a binary-incompatible change in the DLL interface, in order to + remove the dependency on the ZLIB_DLL macro, and to release + the new DLL under a different name. + + We chose the name ZLIB1.DLL, where '1' indicates the major + zlib version number. We hope that we will not have to break + the binary compatibility again, at least not as long as the + zlib-1.x series will last. + + There is still a ZLIB_DLL macro, that can trigger a more + efficient build and use of the DLL, but compatibility no + longer dependents on it. + + + 3. Can I build ZLIB.DLL from the new zlib sources, and replace + an old ZLIB.DLL, that was built from zlib-1.1.4 or earlier? + + - In principle, you can do it by assigning calling convention + keywords to the macros ZEXPORT and ZEXPORTVA. In practice, + it depends on what you mean by "an old ZLIB.DLL", because the + old DLL exists in several mutually-incompatible versions. + You have to find out first what kind of calling convention is + being used in your particular ZLIB.DLL build, and to use the + same one in the new build. If you don't know what this is all + about, you might be better off if you would just leave the old + DLL intact. + + + 4. Can I compile my application using the new zlib interface, and + link it to an old ZLIB.DLL, that was built from zlib-1.1.4 or + earlier? + + - The official answer is "no"; the real answer depends again on + what kind of ZLIB.DLL you have. Even if you are lucky, this + course of action is unreliable. + + If you rebuild your application and you intend to use a newer + version of zlib (post- 1.1.4), it is strongly recommended to + link it to the new ZLIB1.DLL. + + + 5. Why are the zlib symbols exported by name, and not by ordinal? + + - Although exporting symbols by ordinal is a little faster, it + is risky. Any single glitch in the maintenance or use of the + DEF file that contains the ordinals can result in incompatible + builds and frustrating crashes. Simply put, the benefits of + exporting symbols by ordinal do not justify the risks. + + Technically, it should be possible to maintain ordinals in + the DEF file, and still export the symbols by name. Ordinals + exist in every DLL, and even if the dynamic linking performed + at the DLL startup is searching for names, ordinals serve as + hints, for a faster name lookup. However, if the DEF file + contains ordinals, the Microsoft linker automatically builds + an implib that will cause the executables linked to it to use + those ordinals, and not the names. It is interesting to + notice that the GNU linker for Win32 does not suffer from this + problem. + + It is possible to avoid the DEF file if the exported symbols + are accompanied by a "__declspec(dllexport)" attribute in the + source files. You can do this in zlib by predefining the + ZLIB_DLL macro. + + + 6. I see that the ZLIB1.DLL functions use the "C" (CDECL) calling + convention. Why not use the STDCALL convention? + STDCALL is the standard convention in Win32, and I need it in + my Visual Basic project! + + (For readability, we use CDECL to refer to the convention + triggered by the "__cdecl" keyword, STDCALL to refer to + the convention triggered by "__stdcall", and FASTCALL to + refer to the convention triggered by "__fastcall".) + + - Most of the native Windows API functions (without varargs) use + indeed the WINAPI convention (which translates to STDCALL in + Win32), but the standard C functions use CDECL. If a user + application is intrinsically tied to the Windows API (e.g. + it calls native Windows API functions such as CreateFile()), + sometimes it makes sense to decorate its own functions with + WINAPI. But if ANSI C or POSIX portability is a goal (e.g. + it calls standard C functions such as fopen()), it is not a + sound decision to request the inclusion of , or to + use non-ANSI constructs, for the sole purpose to make the user + functions STDCALL-able. + + The functionality offered by zlib is not in the category of + "Windows functionality", but is more like "C functionality". + + Technically, STDCALL is not bad; in fact, it is slightly + faster than CDECL, and it works with variable-argument + functions, just like CDECL. It is unfortunate that, in spite + of using STDCALL in the Windows API, it is not the default + convention used by the C compilers that run under Windows. + The roots of the problem reside deep inside the unsafety of + the K&R-style function prototypes, where the argument types + are not specified; but that is another story for another day. + + The remaining fact is that CDECL is the default convention. + Even if an explicit convention is hard-coded into the function + prototypes inside C headers, problems may appear. The + necessity to expose the convention in users' callbacks is one + of these problems. + + The calling convention issues are also important when using + zlib in other programming languages. Some of them, like Ada + (GNAT) and Fortran (GNU G77), have C bindings implemented + initially on Unix, and relying on the C calling convention. + On the other hand, the pre- .NET versions of Microsoft Visual + Basic require STDCALL, while Borland Delphi prefers, although + it does not require, FASTCALL. + + In fairness to all possible uses of zlib outside the C + programming language, we choose the default "C" convention. + Anyone interested in different bindings or conventions is + encouraged to maintain specialized projects. The "contrib/" + directory from the zlib distribution already holds a couple + of foreign bindings, such as Ada, C++, and Delphi. + + + 7. I need a DLL for my Visual Basic project. What can I do? + + - Define the ZLIB_WINAPI macro before including "zlib.h", when + building both the DLL and the user application (except that + you don't need to define anything when using the DLL in Visual + Basic). The ZLIB_WINAPI macro will switch on the WINAPI + (STDCALL) convention. The name of this DLL must be different + than the official ZLIB1.DLL. + + Gilles Vollant has contributed a build named ZLIBWAPI.DLL, + with the ZLIB_WINAPI macro turned on, and with the minizip + functionality built in. For more information, please read + the notes inside "contrib/vstudio/readme.txt", found in the + zlib distribution. + + + 8. I need to use zlib in my Microsoft .NET project. What can I + do? + + - Henrik Ravn has contributed a .NET wrapper around zlib. Look + into contrib/dotzlib/, inside the zlib distribution. + + + 9. If my application uses ZLIB1.DLL, should I link it to + MSVCRT.DLL? Why? + + - It is not required, but it is recommended to link your + application to MSVCRT.DLL, if it uses ZLIB1.DLL. + + The executables (.EXE, .DLL, etc.) that are involved in the + same process and are using the C run-time library (i.e. they + are calling standard C functions), must link to the same + library. There are several libraries in the Win32 system: + CRTDLL.DLL, MSVCRT.DLL, the static C libraries, etc. + Since ZLIB1.DLL is linked to MSVCRT.DLL, the executables that + depend on it should also be linked to MSVCRT.DLL. + + +10. Why are you saying that ZLIB1.DLL and my application should + be linked to the same C run-time (CRT) library? I linked my + application and my DLLs to different C libraries (e.g. my + application to a static library, and my DLLs to MSVCRT.DLL), + and everything works fine. + + - If a user library invokes only pure Win32 API (accessible via + and the related headers), its DLL build will work + in any context. But if this library invokes standard C API, + things get more complicated. + + There is a single Win32 library in a Win32 system. Every + function in this library resides in a single DLL module, that + is safe to call from anywhere. On the other hand, there are + multiple versions of the C library, and each of them has its + own separate internal state. Standalone executables and user + DLLs that call standard C functions must link to a C run-time + (CRT) library, be it static or shared (DLL). Intermixing + occurs when an executable (not necessarily standalone) and a + DLL are linked to different CRTs, and both are running in the + same process. + + Intermixing multiple CRTs is possible, as long as their + internal states are kept intact. The Microsoft Knowledge Base + articles KB94248 "HOWTO: Use the C Run-Time" and KB140584 + "HOWTO: Link with the Correct C Run-Time (CRT) Library" + mention the potential problems raised by intermixing. + + If intermixing works for you, it's because your application + and DLLs are avoiding the corruption of each of the CRTs' + internal states, maybe by careful design, or maybe by fortune. + + Also note that linking ZLIB1.DLL to non-Microsoft CRTs, such + as those provided by Borland, raises similar problems. + + +11. Why are you linking ZLIB1.DLL to MSVCRT.DLL? + + - MSVCRT.DLL exists on every Windows 95 with a new service pack + installed, or with Microsoft Internet Explorer 4 or later, and + on all other Windows 4.x or later (Windows 98, Windows NT 4, + or later). It is freely distributable; if not present in the + system, it can be downloaded from Microsoft or from other + software provider for free. + + The fact that MSVCRT.DLL does not exist on a virgin Windows 95 + is not so problematic. Windows 95 is scarcely found nowadays, + Microsoft ended its support a long time ago, and many recent + applications from various vendors, including Microsoft, do not + even run on it. Furthermore, no serious user should run + Windows 95 without a proper update installed. + + +12. Why are you not linking ZLIB1.DLL to + <> ? + + - We considered and abandoned the following alternatives: + + * Linking ZLIB1.DLL to a static C library (LIBC.LIB, or + LIBCMT.LIB) is not a good option. People are using the DLL + mainly to save disk space. If you are linking your program + to a static C library, you may as well consider linking zlib + in statically, too. + + * Linking ZLIB1.DLL to CRTDLL.DLL looks appealing, because + CRTDLL.DLL is present on every Win32 installation. + Unfortunately, it has a series of problems: it does not + work properly with Microsoft's C++ libraries, it does not + provide support for 64-bit file offsets, (and so on...), + and Microsoft discontinued its support a long time ago. + + * Linking ZLIB1.DLL to MSVCR70.DLL or MSVCR71.DLL, supplied + with the Microsoft .NET platform, and Visual C++ 7.0/7.1, + raises problems related to the status of ZLIB1.DLL as a + system component. According to the Microsoft Knowledge Base + article KB326922 "INFO: Redistribution of the Shared C + Runtime Component in Visual C++ .NET", MSVCR70.DLL and + MSVCR71.DLL are not supposed to function as system DLLs, + because they may clash with MSVCRT.DLL. Instead, the + application's installer is supposed to put these DLLs + (if needed) in the application's private directory. + If ZLIB1.DLL depends on a non-system runtime, it cannot + function as a redistributable system component. + + * Linking ZLIB1.DLL to non-Microsoft runtimes, such as + Borland's, or Cygwin's, raises problems related to the + reliable presence of these runtimes on Win32 systems. + It's easier to let the DLL build of zlib up to the people + who distribute these runtimes, and who may proceed as + explained in the answer to Question 14. + + +13. If ZLIB1.DLL cannot be linked to MSVCR70.DLL or MSVCR71.DLL, + how can I build/use ZLIB1.DLL in Microsoft Visual C++ 7.0 + (Visual Studio .NET) or newer? + + - Due to the problems explained in the Microsoft Knowledge Base + article KB326922 (see the previous answer), the C runtime that + comes with the VC7 environment is no longer considered a + system component. That is, it should not be assumed that this + runtime exists, or may be installed in a system directory. + Since ZLIB1.DLL is supposed to be a system component, it may + not depend on a non-system component. + + In order to link ZLIB1.DLL and your application to MSVCRT.DLL + in VC7, you need the library of Visual C++ 6.0 or older. If + you don't have this library at hand, it's probably best not to + use ZLIB1.DLL. + + We are hoping that, in the future, Microsoft will provide a + way to build applications linked to a proper system runtime, + from the Visual C++ environment. Until then, you have a + couple of alternatives, such as linking zlib in statically. + If your application requires dynamic linking, you may proceed + as explained in the answer to Question 14. + + +14. I need to link my own DLL build to a CRT different than + MSVCRT.DLL. What can I do? + + - Feel free to rebuild the DLL from the zlib sources, and link + it the way you want. You should, however, clearly state that + your build is unofficial. You should give it a different file + name, and/or install it in a private directory that can be + accessed by your application only, and is not visible to the + others (i.e. it's neither in the PATH, nor in the SYSTEM or + SYSTEM32 directories). Otherwise, your build may clash with + applications that link to the official build. + + For example, in Cygwin, zlib is linked to the Cygwin runtime + CYGWIN1.DLL, and it is distributed under the name CYGZ.DLL. + + +15. May I include additional pieces of code that I find useful, + link them in ZLIB1.DLL, and export them? + + - No. A legitimate build of ZLIB1.DLL must not include code + that does not originate from the official zlib source code. + But you can make your own private DLL build, under a different + file name, as suggested in the previous answer. + + For example, zlib is a part of the VCL library, distributed + with Borland Delphi and C++ Builder. The DLL build of VCL + is a redistributable file, named VCLxx.DLL. + + +16. May I remove some functionality out of ZLIB1.DLL, by enabling + macros like NO_GZCOMPRESS or NO_GZIP at compile time? + + - No. A legitimate build of ZLIB1.DLL must provide the complete + zlib functionality, as implemented in the official zlib source + code. But you can make your own private DLL build, under a + different file name, as suggested in the previous answer. + + +17. I made my own ZLIB1.DLL build. Can I test it for compliance? + + - We prefer that you download the official DLL from the zlib + web site. If you need something peculiar from this DLL, you + can send your suggestion to the zlib mailing list. + + However, in case you do rebuild the DLL yourself, you can run + it with the test programs found in the DLL distribution. + Running these test programs is not a guarantee of compliance, + but a failure can imply a detected problem. + +** + +This document is written and maintained by +Cosmin Truta diff --git a/zlib/win32/Makefile.bor b/zlib/win32/Makefile.bor new file mode 100644 index 000000000000..d152bbb7ffd9 --- /dev/null +++ b/zlib/win32/Makefile.bor @@ -0,0 +1,110 @@ +# Makefile for zlib +# Borland C++ for Win32 +# +# Usage: +# make -f win32/Makefile.bor +# make -f win32/Makefile.bor LOCAL_ZLIB=-DASMV OBJA=match.obj OBJPA=+match.obj + +# ------------ Borland C++ ------------ + +# Optional nonstandard preprocessor flags (e.g. -DMAX_MEM_LEVEL=7) +# should be added to the environment via "set LOCAL_ZLIB=-DFOO" or +# added to the declaration of LOC here: +LOC = $(LOCAL_ZLIB) + +CC = bcc32 +AS = bcc32 +LD = bcc32 +AR = tlib +CFLAGS = -a -d -k- -O2 $(LOC) +ASFLAGS = $(LOC) +LDFLAGS = $(LOC) + + +# variables +ZLIB_LIB = zlib.lib + +OBJ1 = adler32.obj compress.obj crc32.obj deflate.obj gzclose.obj gzlib.obj gzread.obj +OBJ2 = gzwrite.obj infback.obj inffast.obj inflate.obj inftrees.obj trees.obj uncompr.obj zutil.obj +#OBJA = +OBJP1 = +adler32.obj+compress.obj+crc32.obj+deflate.obj+gzclose.obj+gzlib.obj+gzread.obj +OBJP2 = +gzwrite.obj+infback.obj+inffast.obj+inflate.obj+inftrees.obj+trees.obj+uncompr.obj+zutil.obj +#OBJPA= + + +# targets +all: $(ZLIB_LIB) example.exe minigzip.exe + +.c.obj: + $(CC) -c $(CFLAGS) $< + +.asm.obj: + $(AS) -c $(ASFLAGS) $< + +adler32.obj: adler32.c zlib.h zconf.h + +compress.obj: compress.c zlib.h zconf.h + +crc32.obj: crc32.c zlib.h zconf.h crc32.h + +deflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h + +gzclose.obj: gzclose.c zlib.h zconf.h gzguts.h + +gzlib.obj: gzlib.c zlib.h zconf.h gzguts.h + +gzread.obj: gzread.c zlib.h zconf.h gzguts.h + +gzwrite.obj: gzwrite.c zlib.h zconf.h gzguts.h + +infback.obj: infback.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ + inffast.h inffixed.h + +inffast.obj: inffast.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ + inffast.h + +inflate.obj: inflate.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ + inffast.h inffixed.h + +inftrees.obj: inftrees.c zutil.h zlib.h zconf.h inftrees.h + +trees.obj: trees.c zutil.h zlib.h zconf.h deflate.h trees.h + +uncompr.obj: uncompr.c zlib.h zconf.h + +zutil.obj: zutil.c zutil.h zlib.h zconf.h + +example.obj: test/example.c zlib.h zconf.h + +minigzip.obj: test/minigzip.c zlib.h zconf.h + + +# For the sake of the old Borland make, +# the command line is cut to fit in the MS-DOS 128 byte limit: +$(ZLIB_LIB): $(OBJ1) $(OBJ2) $(OBJA) + -del $(ZLIB_LIB) + $(AR) $(ZLIB_LIB) $(OBJP1) + $(AR) $(ZLIB_LIB) $(OBJP2) + $(AR) $(ZLIB_LIB) $(OBJPA) + + +# testing +test: example.exe minigzip.exe + example + echo hello world | minigzip | minigzip -d + +example.exe: example.obj $(ZLIB_LIB) + $(LD) $(LDFLAGS) example.obj $(ZLIB_LIB) + +minigzip.exe: minigzip.obj $(ZLIB_LIB) + $(LD) $(LDFLAGS) minigzip.obj $(ZLIB_LIB) + + +# cleanup +clean: + -del $(ZLIB_LIB) + -del *.obj + -del *.exe + -del *.tds + -del zlib.bak + -del foo.gz diff --git a/zlib/win32/Makefile.gcc b/zlib/win32/Makefile.gcc new file mode 100644 index 000000000000..305be50afef6 --- /dev/null +++ b/zlib/win32/Makefile.gcc @@ -0,0 +1,182 @@ +# Makefile for zlib, derived from Makefile.dj2. +# Modified for mingw32 by C. Spieler, 6/16/98. +# Updated for zlib 1.2.x by Christian Spieler and Cosmin Truta, Mar-2003. +# Last updated: Mar 2012. +# Tested under Cygwin and MinGW. + +# Copyright (C) 1995-2003 Jean-loup Gailly. +# For conditions of distribution and use, see copyright notice in zlib.h + +# To compile, or to compile and test, type from the top level zlib directory: +# +# make -fwin32/Makefile.gcc; make test testdll -fwin32/Makefile.gcc +# +# To use the asm code, type: +# cp contrib/asm?86/match.S ./match.S +# make LOC=-DASMV OBJA=match.o -fwin32/Makefile.gcc +# +# To install libz.a, zconf.h and zlib.h in the system directories, type: +# +# make install -fwin32/Makefile.gcc +# +# BINARY_PATH, INCLUDE_PATH and LIBRARY_PATH must be set. +# +# To install the shared lib, append SHARED_MODE=1 to the make command : +# +# make install -fwin32/Makefile.gcc SHARED_MODE=1 + +# Note: +# If the platform is *not* MinGW (e.g. it is Cygwin or UWIN), +# the DLL name should be changed from "zlib1.dll". + +STATICLIB = libz.a +SHAREDLIB = zlib1.dll +IMPLIB = libz.dll.a + +# +# Set to 1 if shared object needs to be installed +# +SHARED_MODE=0 + +#LOC = -DASMV +#LOC = -DZLIB_DEBUG -g + +PREFIX = +CC = $(PREFIX)gcc +CFLAGS = $(LOC) -O3 -Wall + +AS = $(CC) +ASFLAGS = $(LOC) -Wall + +LD = $(CC) +LDFLAGS = $(LOC) + +AR = $(PREFIX)ar +ARFLAGS = rcs + +RC = $(PREFIX)windres +RCFLAGS = --define GCC_WINDRES + +STRIP = $(PREFIX)strip + +CP = cp -fp +# If GNU install is available, replace $(CP) with install. +INSTALL = $(CP) +RM = rm -f + +prefix ?= /usr/local +exec_prefix = $(prefix) + +OBJS = adler32.o compress.o crc32.o deflate.o gzclose.o gzlib.o gzread.o \ + gzwrite.o infback.o inffast.o inflate.o inftrees.o trees.o uncompr.o zutil.o +OBJA = + +all: $(STATICLIB) $(SHAREDLIB) $(IMPLIB) example.exe minigzip.exe example_d.exe minigzip_d.exe + +test: example.exe minigzip.exe + ./example + echo hello world | ./minigzip | ./minigzip -d + +testdll: example_d.exe minigzip_d.exe + ./example_d + echo hello world | ./minigzip_d | ./minigzip_d -d + +.c.o: + $(CC) $(CFLAGS) -c -o $@ $< + +.S.o: + $(AS) $(ASFLAGS) -c -o $@ $< + +$(STATICLIB): $(OBJS) $(OBJA) + $(AR) $(ARFLAGS) $@ $(OBJS) $(OBJA) + +$(IMPLIB): $(SHAREDLIB) + +$(SHAREDLIB): win32/zlib.def $(OBJS) $(OBJA) zlibrc.o + $(CC) -shared -Wl,--out-implib,$(IMPLIB) $(LDFLAGS) \ + -o $@ win32/zlib.def $(OBJS) $(OBJA) zlibrc.o + $(STRIP) $@ + +example.exe: example.o $(STATICLIB) + $(LD) $(LDFLAGS) -o $@ example.o $(STATICLIB) + $(STRIP) $@ + +minigzip.exe: minigzip.o $(STATICLIB) + $(LD) $(LDFLAGS) -o $@ minigzip.o $(STATICLIB) + $(STRIP) $@ + +example_d.exe: example.o $(IMPLIB) + $(LD) $(LDFLAGS) -o $@ example.o $(IMPLIB) + $(STRIP) $@ + +minigzip_d.exe: minigzip.o $(IMPLIB) + $(LD) $(LDFLAGS) -o $@ minigzip.o $(IMPLIB) + $(STRIP) $@ + +example.o: test/example.c zlib.h zconf.h + $(CC) $(CFLAGS) -I. -c -o $@ test/example.c + +minigzip.o: test/minigzip.c zlib.h zconf.h + $(CC) $(CFLAGS) -I. -c -o $@ test/minigzip.c + +zlibrc.o: win32/zlib1.rc + $(RC) $(RCFLAGS) -o $@ win32/zlib1.rc + +.PHONY: install uninstall clean + +install: zlib.h zconf.h $(STATICLIB) $(IMPLIB) + @if test -z "$(DESTDIR)$(INCLUDE_PATH)" -o -z "$(DESTDIR)$(LIBRARY_PATH)" -o -z "$(DESTDIR)$(BINARY_PATH)"; then \ + echo INCLUDE_PATH, LIBRARY_PATH, and BINARY_PATH must be specified; \ + exit 1; \ + fi + -@mkdir -p '$(DESTDIR)$(INCLUDE_PATH)' + -@mkdir -p '$(DESTDIR)$(LIBRARY_PATH)' '$(DESTDIR)$(LIBRARY_PATH)'/pkgconfig + -if [ "$(SHARED_MODE)" = "1" ]; then \ + mkdir -p '$(DESTDIR)$(BINARY_PATH)'; \ + $(INSTALL) $(SHAREDLIB) '$(DESTDIR)$(BINARY_PATH)'; \ + $(INSTALL) $(IMPLIB) '$(DESTDIR)$(LIBRARY_PATH)'; \ + fi + -$(INSTALL) zlib.h '$(DESTDIR)$(INCLUDE_PATH)' + -$(INSTALL) zconf.h '$(DESTDIR)$(INCLUDE_PATH)' + -$(INSTALL) $(STATICLIB) '$(DESTDIR)$(LIBRARY_PATH)' + sed \ + -e 's|@prefix@|${prefix}|g' \ + -e 's|@exec_prefix@|${exec_prefix}|g' \ + -e 's|@libdir@|$(LIBRARY_PATH)|g' \ + -e 's|@sharedlibdir@|$(LIBRARY_PATH)|g' \ + -e 's|@includedir@|$(INCLUDE_PATH)|g' \ + -e 's|@VERSION@|'`sed -n -e '/VERSION "/s/.*"\(.*\)".*/\1/p' zlib.h`'|g' \ + zlib.pc.in > '$(DESTDIR)$(LIBRARY_PATH)'/pkgconfig/zlib.pc + +uninstall: + -if [ "$(SHARED_MODE)" = "1" ]; then \ + $(RM) '$(DESTDIR)$(BINARY_PATH)'/$(SHAREDLIB); \ + $(RM) '$(DESTDIR)$(LIBRARY_PATH)'/$(IMPLIB); \ + fi + -$(RM) '$(DESTDIR)$(INCLUDE_PATH)'/zlib.h + -$(RM) '$(DESTDIR)$(INCLUDE_PATH)'/zconf.h + -$(RM) '$(DESTDIR)$(LIBRARY_PATH)'/$(STATICLIB) + +clean: + -$(RM) $(STATICLIB) + -$(RM) $(SHAREDLIB) + -$(RM) $(IMPLIB) + -$(RM) *.o + -$(RM) *.exe + -$(RM) foo.gz + +adler32.o: zlib.h zconf.h +compress.o: zlib.h zconf.h +crc32.o: crc32.h zlib.h zconf.h +deflate.o: deflate.h zutil.h zlib.h zconf.h +gzclose.o: zlib.h zconf.h gzguts.h +gzlib.o: zlib.h zconf.h gzguts.h +gzread.o: zlib.h zconf.h gzguts.h +gzwrite.o: zlib.h zconf.h gzguts.h +inffast.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h +inflate.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h +infback.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h +inftrees.o: zutil.h zlib.h zconf.h inftrees.h +trees.o: deflate.h zutil.h zlib.h zconf.h trees.h +uncompr.o: zlib.h zconf.h +zutil.o: zutil.h zlib.h zconf.h diff --git a/zlib/win32/Makefile.msc b/zlib/win32/Makefile.msc new file mode 100644 index 000000000000..6831882de43e --- /dev/null +++ b/zlib/win32/Makefile.msc @@ -0,0 +1,163 @@ +# Makefile for zlib using Microsoft (Visual) C +# zlib is copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler +# +# Usage: +# nmake -f win32/Makefile.msc (standard build) +# nmake -f win32/Makefile.msc LOC=-DFOO (nonstandard build) +# nmake -f win32/Makefile.msc LOC="-DASMV -DASMINF" \ +# OBJA="inffas32.obj match686.obj" (use ASM code, x86) +# nmake -f win32/Makefile.msc AS=ml64 LOC="-DASMV -DASMINF -I." \ +# OBJA="inffasx64.obj gvmat64.obj inffas8664.obj" (use ASM code, x64) + +# The toplevel directory of the source tree. +# +TOP = . + +# optional build flags +LOC = + +# variables +STATICLIB = zlib.lib +SHAREDLIB = zlib1.dll +IMPLIB = zdll.lib + +CC = cl +AS = ml +LD = link +AR = lib +RC = rc +CFLAGS = -nologo -MD -W3 -O2 -Oy- -Zi -Fd"zlib" $(LOC) +WFLAGS = -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE +ASFLAGS = -coff -Zi $(LOC) +LDFLAGS = -nologo -debug -incremental:no -opt:ref +ARFLAGS = -nologo +RCFLAGS = /dWIN32 /r + +OBJS = adler32.obj compress.obj crc32.obj deflate.obj gzclose.obj gzlib.obj gzread.obj \ + gzwrite.obj infback.obj inflate.obj inftrees.obj inffast.obj trees.obj uncompr.obj zutil.obj +OBJA = + + +# targets +all: $(STATICLIB) $(SHAREDLIB) $(IMPLIB) \ + example.exe minigzip.exe example_d.exe minigzip_d.exe + +$(STATICLIB): $(OBJS) $(OBJA) + $(AR) $(ARFLAGS) -out:$@ $(OBJS) $(OBJA) + +$(IMPLIB): $(SHAREDLIB) + +$(SHAREDLIB): $(TOP)/win32/zlib.def $(OBJS) $(OBJA) zlib1.res + $(LD) $(LDFLAGS) -def:$(TOP)/win32/zlib.def -dll -implib:$(IMPLIB) \ + -out:$@ -base:0x5A4C0000 $(OBJS) $(OBJA) zlib1.res + if exist $@.manifest \ + mt -nologo -manifest $@.manifest -outputresource:$@;2 + +example.exe: example.obj $(STATICLIB) + $(LD) $(LDFLAGS) example.obj $(STATICLIB) + if exist $@.manifest \ + mt -nologo -manifest $@.manifest -outputresource:$@;1 + +minigzip.exe: minigzip.obj $(STATICLIB) + $(LD) $(LDFLAGS) minigzip.obj $(STATICLIB) + if exist $@.manifest \ + mt -nologo -manifest $@.manifest -outputresource:$@;1 + +example_d.exe: example.obj $(IMPLIB) + $(LD) $(LDFLAGS) -out:$@ example.obj $(IMPLIB) + if exist $@.manifest \ + mt -nologo -manifest $@.manifest -outputresource:$@;1 + +minigzip_d.exe: minigzip.obj $(IMPLIB) + $(LD) $(LDFLAGS) -out:$@ minigzip.obj $(IMPLIB) + if exist $@.manifest \ + mt -nologo -manifest $@.manifest -outputresource:$@;1 + +{$(TOP)}.c.obj: + $(CC) -c $(WFLAGS) $(CFLAGS) $< + +{$(TOP)/test}.c.obj: + $(CC) -c -I$(TOP) $(WFLAGS) $(CFLAGS) $< + +{$(TOP)/contrib/masmx64}.c.obj: + $(CC) -c $(WFLAGS) $(CFLAGS) $< + +{$(TOP)/contrib/masmx64}.asm.obj: + $(AS) -c $(ASFLAGS) $< + +{$(TOP)/contrib/masmx86}.asm.obj: + $(AS) -c $(ASFLAGS) $< + +adler32.obj: $(TOP)/adler32.c $(TOP)/zlib.h $(TOP)/zconf.h + +compress.obj: $(TOP)/compress.c $(TOP)/zlib.h $(TOP)/zconf.h + +crc32.obj: $(TOP)/crc32.c $(TOP)/zlib.h $(TOP)/zconf.h $(TOP)/crc32.h + +deflate.obj: $(TOP)/deflate.c $(TOP)/deflate.h $(TOP)/zutil.h $(TOP)/zlib.h $(TOP)/zconf.h + +gzclose.obj: $(TOP)/gzclose.c $(TOP)/zlib.h $(TOP)/zconf.h $(TOP)/gzguts.h + +gzlib.obj: $(TOP)/gzlib.c $(TOP)/zlib.h $(TOP)/zconf.h $(TOP)/gzguts.h + +gzread.obj: $(TOP)/gzread.c $(TOP)/zlib.h $(TOP)/zconf.h $(TOP)/gzguts.h + +gzwrite.obj: $(TOP)/gzwrite.c $(TOP)/zlib.h $(TOP)/zconf.h $(TOP)/gzguts.h + +infback.obj: $(TOP)/infback.c $(TOP)/zutil.h $(TOP)/zlib.h $(TOP)/zconf.h $(TOP)/inftrees.h $(TOP)/inflate.h \ + $(TOP)/inffast.h $(TOP)/inffixed.h + +inffast.obj: $(TOP)/inffast.c $(TOP)/zutil.h $(TOP)/zlib.h $(TOP)/zconf.h $(TOP)/inftrees.h $(TOP)/inflate.h \ + $(TOP)/inffast.h + +inflate.obj: $(TOP)/inflate.c $(TOP)/zutil.h $(TOP)/zlib.h $(TOP)/zconf.h $(TOP)/inftrees.h $(TOP)/inflate.h \ + $(TOP)/inffast.h $(TOP)/inffixed.h + +inftrees.obj: $(TOP)/inftrees.c $(TOP)/zutil.h $(TOP)/zlib.h $(TOP)/zconf.h $(TOP)/inftrees.h + +trees.obj: $(TOP)/trees.c $(TOP)/zutil.h $(TOP)/zlib.h $(TOP)/zconf.h $(TOP)/deflate.h $(TOP)/trees.h + +uncompr.obj: $(TOP)/uncompr.c $(TOP)/zlib.h $(TOP)/zconf.h + +zutil.obj: $(TOP)/zutil.c $(TOP)/zutil.h $(TOP)/zlib.h $(TOP)/zconf.h + +gvmat64.obj: $(TOP)/contrib\masmx64\gvmat64.asm + +inffasx64.obj: $(TOP)/contrib\masmx64\inffasx64.asm + +inffas8664.obj: $(TOP)/contrib\masmx64\inffas8664.c $(TOP)/zutil.h $(TOP)/zlib.h $(TOP)/zconf.h \ + $(TOP)/inftrees.h $(TOP)/inflate.h $(TOP)/inffast.h + +inffas32.obj: $(TOP)/contrib\masmx86\inffas32.asm + +match686.obj: $(TOP)/contrib\masmx86\match686.asm + +example.obj: $(TOP)/test/example.c $(TOP)/zlib.h $(TOP)/zconf.h + +minigzip.obj: $(TOP)/test/minigzip.c $(TOP)/zlib.h $(TOP)/zconf.h + +zlib1.res: $(TOP)/win32/zlib1.rc + $(RC) $(RCFLAGS) /fo$@ $(TOP)/win32/zlib1.rc + +# testing +test: example.exe minigzip.exe + example + echo hello world | minigzip | minigzip -d + +testdll: example_d.exe minigzip_d.exe + example_d + echo hello world | minigzip_d | minigzip_d -d + + +# cleanup +clean: + -del $(STATICLIB) + -del $(SHAREDLIB) + -del $(IMPLIB) + -del *.obj + -del *.res + -del *.exp + -del *.exe + -del *.pdb + -del *.manifest + -del foo.gz diff --git a/zlib/win32/README-WIN32.txt b/zlib/win32/README-WIN32.txt new file mode 100644 index 000000000000..df7ab7f4b34f --- /dev/null +++ b/zlib/win32/README-WIN32.txt @@ -0,0 +1,103 @@ +ZLIB DATA COMPRESSION LIBRARY + +zlib 1.2.11 is a general purpose data compression library. All the code is +thread safe. The data format used by the zlib library is described by RFCs +(Request for Comments) 1950 to 1952 in the files +http://www.ietf.org/rfc/rfc1950.txt (zlib format), rfc1951.txt (deflate format) +and rfc1952.txt (gzip format). + +All functions of the compression library are documented in the file zlib.h +(volunteer to write man pages welcome, contact zlib@gzip.org). Two compiled +examples are distributed in this package, example and minigzip. The example_d +and minigzip_d flavors validate that the zlib1.dll file is working correctly. + +Questions about zlib should be sent to . The zlib home page +is http://zlib.net/ . Before reporting a problem, please check this site to +verify that you have the latest version of zlib; otherwise get the latest +version and check whether the problem still exists or not. + +PLEASE read DLL_FAQ.txt, and the the zlib FAQ http://zlib.net/zlib_faq.html +before asking for help. + + +Manifest: + +The package zlib-1.2.11-win32-x86.zip will contain the following files: + + README-WIN32.txt This document + ChangeLog Changes since previous zlib packages + DLL_FAQ.txt Frequently asked questions about zlib1.dll + zlib.3.pdf Documentation of this library in Adobe Acrobat format + + example.exe A statically-bound example (using zlib.lib, not the dll) + example.pdb Symbolic information for debugging example.exe + + example_d.exe A zlib1.dll bound example (using zdll.lib) + example_d.pdb Symbolic information for debugging example_d.exe + + minigzip.exe A statically-bound test program (using zlib.lib, not the dll) + minigzip.pdb Symbolic information for debugging minigzip.exe + + minigzip_d.exe A zlib1.dll bound test program (using zdll.lib) + minigzip_d.pdb Symbolic information for debugging minigzip_d.exe + + zlib.h Install these files into the compilers' INCLUDE path to + zconf.h compile programs which use zlib.lib or zdll.lib + + zdll.lib Install these files into the compilers' LIB path if linking + zdll.exp a compiled program to the zlib1.dll binary + + zlib.lib Install these files into the compilers' LIB path to link zlib + zlib.pdb into compiled programs, without zlib1.dll runtime dependency + (zlib.pdb provides debugging info to the compile time linker) + + zlib1.dll Install this binary shared library into the system PATH, or + the program's runtime directory (where the .exe resides) + zlib1.pdb Install in the same directory as zlib1.dll, in order to debug + an application crash using WinDbg or similar tools. + +All .pdb files above are entirely optional, but are very useful to a developer +attempting to diagnose program misbehavior or a crash. Many additional +important files for developers can be found in the zlib127.zip source package +available from http://zlib.net/ - review that package's README file for details. + + +Acknowledgments: + +The deflate format used by zlib was defined by Phil Katz. The deflate and +zlib specifications were written by L. Peter Deutsch. Thanks to all the +people who reported problems and suggested various improvements in zlib; they +are too numerous to cite here. + + +Copyright notice: + + (C) 1995-2017 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + +If you use the zlib library in a product, we would appreciate *not* receiving +lengthy legal documents to sign. The sources are provided for free but without +warranty of any kind. The library has been entirely written by Jean-loup +Gailly and Mark Adler; it does not include third-party code. + +If you redistribute modified sources, we would appreciate that you include in +the file ChangeLog history information documenting your changes. Please read +the FAQ for more information on the distribution of modified source versions. diff --git a/zlib/win32/VisualC.txt b/zlib/win32/VisualC.txt new file mode 100644 index 000000000000..1005b219410c --- /dev/null +++ b/zlib/win32/VisualC.txt @@ -0,0 +1,3 @@ + +To build zlib using the Microsoft Visual C++ environment, +use the appropriate project from the contrib/vstudio/ directory. diff --git a/zlib/win32/zlib.def b/zlib/win32/zlib.def new file mode 100644 index 000000000000..a2188b000621 --- /dev/null +++ b/zlib/win32/zlib.def @@ -0,0 +1,94 @@ +; zlib data compression library +EXPORTS +; basic functions + zlibVersion + deflate + deflateEnd + inflate + inflateEnd +; advanced functions + deflateSetDictionary + deflateGetDictionary + deflateCopy + deflateReset + deflateParams + deflateTune + deflateBound + deflatePending + deflatePrime + deflateSetHeader + inflateSetDictionary + inflateGetDictionary + inflateSync + inflateCopy + inflateReset + inflateReset2 + inflatePrime + inflateMark + inflateGetHeader + inflateBack + inflateBackEnd + zlibCompileFlags +; utility functions + compress + compress2 + compressBound + uncompress + uncompress2 + gzopen + gzdopen + gzbuffer + gzsetparams + gzread + gzfread + gzwrite + gzfwrite + gzprintf + gzvprintf + gzputs + gzgets + gzputc + gzgetc + gzungetc + gzflush + gzseek + gzrewind + gztell + gzoffset + gzeof + gzdirect + gzclose + gzclose_r + gzclose_w + gzerror + gzclearerr +; large file functions + gzopen64 + gzseek64 + gztell64 + gzoffset64 + adler32_combine64 + crc32_combine64 +; checksum functions + adler32 + adler32_z + crc32 + crc32_z + adler32_combine + crc32_combine +; various hacks, don't look :) + deflateInit_ + deflateInit2_ + inflateInit_ + inflateInit2_ + inflateBackInit_ + gzgetc_ + zError + inflateSyncPoint + get_crc_table + inflateUndermine + inflateValidate + inflateCodesUsed + inflateResetKeep + deflateResetKeep + gzopen_w diff --git a/zlib/win32/zlib1.rc b/zlib/win32/zlib1.rc new file mode 100644 index 000000000000..234e641c3294 --- /dev/null +++ b/zlib/win32/zlib1.rc @@ -0,0 +1,40 @@ +#include +#include "../zlib.h" + +#ifdef GCC_WINDRES +VS_VERSION_INFO VERSIONINFO +#else +VS_VERSION_INFO VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE +#endif + FILEVERSION ZLIB_VER_MAJOR,ZLIB_VER_MINOR,ZLIB_VER_REVISION,0 + PRODUCTVERSION ZLIB_VER_MAJOR,ZLIB_VER_MINOR,ZLIB_VER_REVISION,0 + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK +#ifdef _DEBUG + FILEFLAGS 1 +#else + FILEFLAGS 0 +#endif + FILEOS VOS__WINDOWS32 + FILETYPE VFT_DLL + FILESUBTYPE 0 // not used +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904E4" + //language ID = U.S. English, char set = Windows, Multilingual + BEGIN + VALUE "FileDescription", "zlib data compression library\0" + VALUE "FileVersion", ZLIB_VERSION "\0" + VALUE "InternalName", "zlib1.dll\0" + VALUE "LegalCopyright", "(C) 1995-2017 Jean-loup Gailly & Mark Adler\0" + VALUE "OriginalFilename", "zlib1.dll\0" + VALUE "ProductName", "zlib\0" + VALUE "ProductVersion", ZLIB_VERSION "\0" + VALUE "Comments", "For more information visit http://www.zlib.net/\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0409, 1252 + END +END diff --git a/zlib/zconf.h.cmakein b/zlib/zconf.h.cmakein new file mode 100644 index 000000000000..a7f24cce60ff --- /dev/null +++ b/zlib/zconf.h.cmakein @@ -0,0 +1,536 @@ +/* zconf.h -- configuration of the zlib compression library + * Copyright (C) 1995-2016 Jean-loup Gailly, Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* @(#) $Id$ */ + +#ifndef ZCONF_H +#define ZCONF_H +#cmakedefine Z_PREFIX +#cmakedefine Z_HAVE_UNISTD_H + +/* + * If you *really* need a unique prefix for all types and library functions, + * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it. + * Even better than compiling with -DZ_PREFIX would be to use configure to set + * this permanently in zconf.h using "./configure --zprefix". + */ +#ifdef Z_PREFIX /* may be set to #if 1 by ./configure */ +# define Z_PREFIX_SET + +/* all linked symbols and init macros */ +# define _dist_code z__dist_code +# define _length_code z__length_code +# define _tr_align z__tr_align +# define _tr_flush_bits z__tr_flush_bits +# define _tr_flush_block z__tr_flush_block +# define _tr_init z__tr_init +# define _tr_stored_block z__tr_stored_block +# define _tr_tally z__tr_tally +# define adler32 z_adler32 +# define adler32_combine z_adler32_combine +# define adler32_combine64 z_adler32_combine64 +# define adler32_z z_adler32_z +# ifndef Z_SOLO +# define compress z_compress +# define compress2 z_compress2 +# define compressBound z_compressBound +# endif +# define crc32 z_crc32 +# define crc32_combine z_crc32_combine +# define crc32_combine64 z_crc32_combine64 +# define crc32_z z_crc32_z +# define deflate z_deflate +# define deflateBound z_deflateBound +# define deflateCopy z_deflateCopy +# define deflateEnd z_deflateEnd +# define deflateGetDictionary z_deflateGetDictionary +# define deflateInit z_deflateInit +# define deflateInit2 z_deflateInit2 +# define deflateInit2_ z_deflateInit2_ +# define deflateInit_ z_deflateInit_ +# define deflateParams z_deflateParams +# define deflatePending z_deflatePending +# define deflatePrime z_deflatePrime +# define deflateReset z_deflateReset +# define deflateResetKeep z_deflateResetKeep +# define deflateSetDictionary z_deflateSetDictionary +# define deflateSetHeader z_deflateSetHeader +# define deflateTune z_deflateTune +# define deflate_copyright z_deflate_copyright +# define get_crc_table z_get_crc_table +# ifndef Z_SOLO +# define gz_error z_gz_error +# define gz_intmax z_gz_intmax +# define gz_strwinerror z_gz_strwinerror +# define gzbuffer z_gzbuffer +# define gzclearerr z_gzclearerr +# define gzclose z_gzclose +# define gzclose_r z_gzclose_r +# define gzclose_w z_gzclose_w +# define gzdirect z_gzdirect +# define gzdopen z_gzdopen +# define gzeof z_gzeof +# define gzerror z_gzerror +# define gzflush z_gzflush +# define gzfread z_gzfread +# define gzfwrite z_gzfwrite +# define gzgetc z_gzgetc +# define gzgetc_ z_gzgetc_ +# define gzgets z_gzgets +# define gzoffset z_gzoffset +# define gzoffset64 z_gzoffset64 +# define gzopen z_gzopen +# define gzopen64 z_gzopen64 +# ifdef _WIN32 +# define gzopen_w z_gzopen_w +# endif +# define gzprintf z_gzprintf +# define gzputc z_gzputc +# define gzputs z_gzputs +# define gzread z_gzread +# define gzrewind z_gzrewind +# define gzseek z_gzseek +# define gzseek64 z_gzseek64 +# define gzsetparams z_gzsetparams +# define gztell z_gztell +# define gztell64 z_gztell64 +# define gzungetc z_gzungetc +# define gzvprintf z_gzvprintf +# define gzwrite z_gzwrite +# endif +# define inflate z_inflate +# define inflateBack z_inflateBack +# define inflateBackEnd z_inflateBackEnd +# define inflateBackInit z_inflateBackInit +# define inflateBackInit_ z_inflateBackInit_ +# define inflateCodesUsed z_inflateCodesUsed +# define inflateCopy z_inflateCopy +# define inflateEnd z_inflateEnd +# define inflateGetDictionary z_inflateGetDictionary +# define inflateGetHeader z_inflateGetHeader +# define inflateInit z_inflateInit +# define inflateInit2 z_inflateInit2 +# define inflateInit2_ z_inflateInit2_ +# define inflateInit_ z_inflateInit_ +# define inflateMark z_inflateMark +# define inflatePrime z_inflatePrime +# define inflateReset z_inflateReset +# define inflateReset2 z_inflateReset2 +# define inflateResetKeep z_inflateResetKeep +# define inflateSetDictionary z_inflateSetDictionary +# define inflateSync z_inflateSync +# define inflateSyncPoint z_inflateSyncPoint +# define inflateUndermine z_inflateUndermine +# define inflateValidate z_inflateValidate +# define inflate_copyright z_inflate_copyright +# define inflate_fast z_inflate_fast +# define inflate_table z_inflate_table +# ifndef Z_SOLO +# define uncompress z_uncompress +# define uncompress2 z_uncompress2 +# endif +# define zError z_zError +# ifndef Z_SOLO +# define zcalloc z_zcalloc +# define zcfree z_zcfree +# endif +# define zlibCompileFlags z_zlibCompileFlags +# define zlibVersion z_zlibVersion + +/* all zlib typedefs in zlib.h and zconf.h */ +# define Byte z_Byte +# define Bytef z_Bytef +# define alloc_func z_alloc_func +# define charf z_charf +# define free_func z_free_func +# ifndef Z_SOLO +# define gzFile z_gzFile +# endif +# define gz_header z_gz_header +# define gz_headerp z_gz_headerp +# define in_func z_in_func +# define intf z_intf +# define out_func z_out_func +# define uInt z_uInt +# define uIntf z_uIntf +# define uLong z_uLong +# define uLongf z_uLongf +# define voidp z_voidp +# define voidpc z_voidpc +# define voidpf z_voidpf + +/* all zlib structs in zlib.h and zconf.h */ +# define gz_header_s z_gz_header_s +# define internal_state z_internal_state + +#endif + +#if defined(__MSDOS__) && !defined(MSDOS) +# define MSDOS +#endif +#if (defined(OS_2) || defined(__OS2__)) && !defined(OS2) +# define OS2 +#endif +#if defined(_WINDOWS) && !defined(WINDOWS) +# define WINDOWS +#endif +#if defined(_WIN32) || defined(_WIN32_WCE) || defined(__WIN32__) +# ifndef WIN32 +# define WIN32 +# endif +#endif +#if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32) +# if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__) +# ifndef SYS16BIT +# define SYS16BIT +# endif +# endif +#endif + +/* + * Compile with -DMAXSEG_64K if the alloc function cannot allocate more + * than 64k bytes at a time (needed on systems with 16-bit int). + */ +#ifdef SYS16BIT +# define MAXSEG_64K +#endif +#ifdef MSDOS +# define UNALIGNED_OK +#endif + +#ifdef __STDC_VERSION__ +# ifndef STDC +# define STDC +# endif +# if __STDC_VERSION__ >= 199901L +# ifndef STDC99 +# define STDC99 +# endif +# endif +#endif +#if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus)) +# define STDC +#endif +#if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__)) +# define STDC +#endif +#if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32)) +# define STDC +#endif +#if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__)) +# define STDC +#endif + +#if defined(__OS400__) && !defined(STDC) /* iSeries (formerly AS/400). */ +# define STDC +#endif + +#ifndef STDC +# ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */ +# define const /* note: need a more gentle solution here */ +# endif +#endif + +#if defined(ZLIB_CONST) && !defined(z_const) +# define z_const const +#else +# define z_const +#endif + +#ifdef Z_SOLO + typedef unsigned long z_size_t; +#else +# define z_longlong long long +# if defined(NO_SIZE_T) + typedef unsigned NO_SIZE_T z_size_t; +# elif defined(STDC) +# include + typedef size_t z_size_t; +# else + typedef unsigned long z_size_t; +# endif +# undef z_longlong +#endif + +/* Maximum value for memLevel in deflateInit2 */ +#ifndef MAX_MEM_LEVEL +# ifdef MAXSEG_64K +# define MAX_MEM_LEVEL 8 +# else +# define MAX_MEM_LEVEL 9 +# endif +#endif + +/* Maximum value for windowBits in deflateInit2 and inflateInit2. + * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files + * created by gzip. (Files created by minigzip can still be extracted by + * gzip.) + */ +#ifndef MAX_WBITS +# define MAX_WBITS 15 /* 32K LZ77 window */ +#endif + +/* The memory requirements for deflate are (in bytes): + (1 << (windowBits+2)) + (1 << (memLevel+9)) + that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values) + plus a few kilobytes for small objects. For example, if you want to reduce + the default memory requirements from 256K to 128K, compile with + make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7" + Of course this will generally degrade compression (there's no free lunch). + + The memory requirements for inflate are (in bytes) 1 << windowBits + that is, 32K for windowBits=15 (default value) plus about 7 kilobytes + for small objects. +*/ + + /* Type declarations */ + +#ifndef OF /* function prototypes */ +# ifdef STDC +# define OF(args) args +# else +# define OF(args) () +# endif +#endif + +#ifndef Z_ARG /* function prototypes for stdarg */ +# if defined(STDC) || defined(Z_HAVE_STDARG_H) +# define Z_ARG(args) args +# else +# define Z_ARG(args) () +# endif +#endif + +/* The following definitions for FAR are needed only for MSDOS mixed + * model programming (small or medium model with some far allocations). + * This was tested only with MSC; for other MSDOS compilers you may have + * to define NO_MEMCPY in zutil.h. If you don't need the mixed model, + * just define FAR to be empty. + */ +#ifdef SYS16BIT +# if defined(M_I86SM) || defined(M_I86MM) + /* MSC small or medium model */ +# define SMALL_MEDIUM +# ifdef _MSC_VER +# define FAR _far +# else +# define FAR far +# endif +# endif +# if (defined(__SMALL__) || defined(__MEDIUM__)) + /* Turbo C small or medium model */ +# define SMALL_MEDIUM +# ifdef __BORLANDC__ +# define FAR _far +# else +# define FAR far +# endif +# endif +#endif + +#if defined(WINDOWS) || defined(WIN32) + /* If building or using zlib as a DLL, define ZLIB_DLL. + * This is not mandatory, but it offers a little performance increase. + */ +# ifdef ZLIB_DLL +# if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500)) +# ifdef ZLIB_INTERNAL +# define ZEXTERN extern __declspec(dllexport) +# else +# define ZEXTERN extern __declspec(dllimport) +# endif +# endif +# endif /* ZLIB_DLL */ + /* If building or using zlib with the WINAPI/WINAPIV calling convention, + * define ZLIB_WINAPI. + * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI. + */ +# ifdef ZLIB_WINAPI +# ifdef FAR +# undef FAR +# endif +# include + /* No need for _export, use ZLIB.DEF instead. */ + /* For complete Windows compatibility, use WINAPI, not __stdcall. */ +# define ZEXPORT WINAPI +# ifdef WIN32 +# define ZEXPORTVA WINAPIV +# else +# define ZEXPORTVA FAR CDECL +# endif +# endif +#endif + +#if defined (__BEOS__) +# ifdef ZLIB_DLL +# ifdef ZLIB_INTERNAL +# define ZEXPORT __declspec(dllexport) +# define ZEXPORTVA __declspec(dllexport) +# else +# define ZEXPORT __declspec(dllimport) +# define ZEXPORTVA __declspec(dllimport) +# endif +# endif +#endif + +#ifndef ZEXTERN +# define ZEXTERN extern +#endif +#ifndef ZEXPORT +# define ZEXPORT +#endif +#ifndef ZEXPORTVA +# define ZEXPORTVA +#endif + +#ifndef FAR +# define FAR +#endif + +#if !defined(__MACTYPES__) +typedef unsigned char Byte; /* 8 bits */ +#endif +typedef unsigned int uInt; /* 16 bits or more */ +typedef unsigned long uLong; /* 32 bits or more */ + +#ifdef SMALL_MEDIUM + /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */ +# define Bytef Byte FAR +#else + typedef Byte FAR Bytef; +#endif +typedef char FAR charf; +typedef int FAR intf; +typedef uInt FAR uIntf; +typedef uLong FAR uLongf; + +#ifdef STDC + typedef void const *voidpc; + typedef void FAR *voidpf; + typedef void *voidp; +#else + typedef Byte const *voidpc; + typedef Byte FAR *voidpf; + typedef Byte *voidp; +#endif + +#if !defined(Z_U4) && !defined(Z_SOLO) && defined(STDC) +# include +# if (UINT_MAX == 0xffffffffUL) +# define Z_U4 unsigned +# elif (ULONG_MAX == 0xffffffffUL) +# define Z_U4 unsigned long +# elif (USHRT_MAX == 0xffffffffUL) +# define Z_U4 unsigned short +# endif +#endif + +#ifdef Z_U4 + typedef Z_U4 z_crc_t; +#else + typedef unsigned long z_crc_t; +#endif + +#ifdef HAVE_UNISTD_H /* may be set to #if 1 by ./configure */ +# define Z_HAVE_UNISTD_H +#endif + +#ifdef HAVE_STDARG_H /* may be set to #if 1 by ./configure */ +# define Z_HAVE_STDARG_H +#endif + +#ifdef STDC +# ifndef Z_SOLO +# include /* for off_t */ +# endif +#endif + +#if defined(STDC) || defined(Z_HAVE_STDARG_H) +# ifndef Z_SOLO +# include /* for va_list */ +# endif +#endif + +#ifdef _WIN32 +# ifndef Z_SOLO +# include /* for wchar_t */ +# endif +#endif + +/* a little trick to accommodate both "#define _LARGEFILE64_SOURCE" and + * "#define _LARGEFILE64_SOURCE 1" as requesting 64-bit operations, (even + * though the former does not conform to the LFS document), but considering + * both "#undef _LARGEFILE64_SOURCE" and "#define _LARGEFILE64_SOURCE 0" as + * equivalently requesting no 64-bit operations + */ +#if defined(_LARGEFILE64_SOURCE) && -_LARGEFILE64_SOURCE - -1 == 1 +# undef _LARGEFILE64_SOURCE +#endif + +#if defined(__WATCOMC__) && !defined(Z_HAVE_UNISTD_H) +# define Z_HAVE_UNISTD_H +#endif +#ifndef Z_SOLO +# if defined(Z_HAVE_UNISTD_H) || defined(_LARGEFILE64_SOURCE) +# include /* for SEEK_*, off_t, and _LFS64_LARGEFILE */ +# ifdef VMS +# include /* for off_t */ +# endif +# ifndef z_off_t +# define z_off_t off_t +# endif +# endif +#endif + +#if defined(_LFS64_LARGEFILE) && _LFS64_LARGEFILE-0 +# define Z_LFS64 +#endif + +#if defined(_LARGEFILE64_SOURCE) && defined(Z_LFS64) +# define Z_LARGE64 +#endif + +#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS-0 == 64 && defined(Z_LFS64) +# define Z_WANT64 +#endif + +#if !defined(SEEK_SET) && !defined(Z_SOLO) +# define SEEK_SET 0 /* Seek from beginning of file. */ +# define SEEK_CUR 1 /* Seek from current position. */ +# define SEEK_END 2 /* Set file pointer to EOF plus "offset" */ +#endif + +#ifndef z_off_t +# define z_off_t long +#endif + +#if !defined(_WIN32) && defined(Z_LARGE64) +# define z_off64_t off64_t +#else +# if defined(_WIN32) && !defined(__GNUC__) && !defined(Z_SOLO) +# define z_off64_t __int64 +# else +# define z_off64_t z_off_t +# endif +#endif + +/* MVS linker does not support external names larger than 8 bytes */ +#if defined(__MVS__) + #pragma map(deflateInit_,"DEIN") + #pragma map(deflateInit2_,"DEIN2") + #pragma map(deflateEnd,"DEEND") + #pragma map(deflateBound,"DEBND") + #pragma map(inflateInit_,"ININ") + #pragma map(inflateInit2_,"ININ2") + #pragma map(inflateEnd,"INEND") + #pragma map(inflateSync,"INSY") + #pragma map(inflateSetDictionary,"INSEDI") + #pragma map(compressBound,"CMBND") + #pragma map(inflate_table,"INTABL") + #pragma map(inflate_fast,"INFA") + #pragma map(inflate_copyright,"INCOPY") +#endif + +#endif /* ZCONF_H */ diff --git a/zlib/zconf.h b/zlib/zconf.h.in similarity index 50% rename from zlib/zconf.h rename to zlib/zconf.h.in index d983fa3eed4d..5e1d68a004e9 100644 --- a/zlib/zconf.h +++ b/zlib/zconf.h.in @@ -1,5 +1,5 @@ /* zconf.h -- configuration of the zlib compression library - * Copyright (C) 1995-2005 Jean-loup Gailly. + * Copyright (C) 1995-2016 Jean-loup Gailly, Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -8,59 +8,161 @@ #ifndef ZCONF_H #define ZCONF_H -#ifdef HAVE_CONFIG_H -#include -#endif - /* * If you *really* need a unique prefix for all types and library functions, * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it. + * Even better than compiling with -DZ_PREFIX would be to use configure to set + * this permanently in zconf.h using "./configure --zprefix". */ -#ifdef Z_PREFIX -# define deflateInit_ z_deflateInit_ +#ifdef Z_PREFIX /* may be set to #if 1 by ./configure */ +# define Z_PREFIX_SET + +/* all linked symbols and init macros */ +# define _dist_code z__dist_code +# define _length_code z__length_code +# define _tr_align z__tr_align +# define _tr_flush_bits z__tr_flush_bits +# define _tr_flush_block z__tr_flush_block +# define _tr_init z__tr_init +# define _tr_stored_block z__tr_stored_block +# define _tr_tally z__tr_tally +# define adler32 z_adler32 +# define adler32_combine z_adler32_combine +# define adler32_combine64 z_adler32_combine64 +# define adler32_z z_adler32_z +# ifndef Z_SOLO +# define compress z_compress +# define compress2 z_compress2 +# define compressBound z_compressBound +# endif +# define crc32 z_crc32 +# define crc32_combine z_crc32_combine +# define crc32_combine64 z_crc32_combine64 +# define crc32_z z_crc32_z # define deflate z_deflate +# define deflateBound z_deflateBound +# define deflateCopy z_deflateCopy # define deflateEnd z_deflateEnd -# define inflateInit_ z_inflateInit_ -# define inflate z_inflate -# define inflateEnd z_inflateEnd +# define deflateGetDictionary z_deflateGetDictionary +# define deflateInit z_deflateInit +# define deflateInit2 z_deflateInit2 # define deflateInit2_ z_deflateInit2_ -# define deflateSetDictionary z_deflateSetDictionary -# define deflateCopy z_deflateCopy -# define deflateReset z_deflateReset +# define deflateInit_ z_deflateInit_ # define deflateParams z_deflateParams -# define deflateBound z_deflateBound +# define deflatePending z_deflatePending # define deflatePrime z_deflatePrime +# define deflateReset z_deflateReset +# define deflateResetKeep z_deflateResetKeep +# define deflateSetDictionary z_deflateSetDictionary +# define deflateSetHeader z_deflateSetHeader +# define deflateTune z_deflateTune +# define deflate_copyright z_deflate_copyright +# define get_crc_table z_get_crc_table +# ifndef Z_SOLO +# define gz_error z_gz_error +# define gz_intmax z_gz_intmax +# define gz_strwinerror z_gz_strwinerror +# define gzbuffer z_gzbuffer +# define gzclearerr z_gzclearerr +# define gzclose z_gzclose +# define gzclose_r z_gzclose_r +# define gzclose_w z_gzclose_w +# define gzdirect z_gzdirect +# define gzdopen z_gzdopen +# define gzeof z_gzeof +# define gzerror z_gzerror +# define gzflush z_gzflush +# define gzfread z_gzfread +# define gzfwrite z_gzfwrite +# define gzgetc z_gzgetc +# define gzgetc_ z_gzgetc_ +# define gzgets z_gzgets +# define gzoffset z_gzoffset +# define gzoffset64 z_gzoffset64 +# define gzopen z_gzopen +# define gzopen64 z_gzopen64 +# ifdef _WIN32 +# define gzopen_w z_gzopen_w +# endif +# define gzprintf z_gzprintf +# define gzputc z_gzputc +# define gzputs z_gzputs +# define gzread z_gzread +# define gzrewind z_gzrewind +# define gzseek z_gzseek +# define gzseek64 z_gzseek64 +# define gzsetparams z_gzsetparams +# define gztell z_gztell +# define gztell64 z_gztell64 +# define gzungetc z_gzungetc +# define gzvprintf z_gzvprintf +# define gzwrite z_gzwrite +# endif +# define inflate z_inflate +# define inflateBack z_inflateBack +# define inflateBackEnd z_inflateBackEnd +# define inflateBackInit z_inflateBackInit +# define inflateBackInit_ z_inflateBackInit_ +# define inflateCodesUsed z_inflateCodesUsed +# define inflateCopy z_inflateCopy +# define inflateEnd z_inflateEnd +# define inflateGetDictionary z_inflateGetDictionary +# define inflateGetHeader z_inflateGetHeader +# define inflateInit z_inflateInit +# define inflateInit2 z_inflateInit2 # define inflateInit2_ z_inflateInit2_ +# define inflateInit_ z_inflateInit_ +# define inflateMark z_inflateMark +# define inflatePrime z_inflatePrime +# define inflateReset z_inflateReset +# define inflateReset2 z_inflateReset2 +# define inflateResetKeep z_inflateResetKeep # define inflateSetDictionary z_inflateSetDictionary # define inflateSync z_inflateSync # define inflateSyncPoint z_inflateSyncPoint -# define inflateCopy z_inflateCopy -# define inflateReset z_inflateReset -# define inflateBack z_inflateBack -# define inflateBackEnd z_inflateBackEnd -# define compress z_compress -# define compress2 z_compress2 -# define compressBound z_compressBound -# define uncompress z_uncompress -# define adler32 z_adler32 -# define crc32 z_crc32 -# define get_crc_table z_get_crc_table +# define inflateUndermine z_inflateUndermine +# define inflateValidate z_inflateValidate +# define inflate_copyright z_inflate_copyright +# define inflate_fast z_inflate_fast +# define inflate_table z_inflate_table +# ifndef Z_SOLO +# define uncompress z_uncompress +# define uncompress2 z_uncompress2 +# endif # define zError z_zError +# ifndef Z_SOLO +# define zcalloc z_zcalloc +# define zcfree z_zcfree +# endif +# define zlibCompileFlags z_zlibCompileFlags +# define zlibVersion z_zlibVersion +/* all zlib typedefs in zlib.h and zconf.h */ +# define Byte z_Byte +# define Bytef z_Bytef # define alloc_func z_alloc_func +# define charf z_charf # define free_func z_free_func +# ifndef Z_SOLO +# define gzFile z_gzFile +# endif +# define gz_header z_gz_header +# define gz_headerp z_gz_headerp # define in_func z_in_func +# define intf z_intf # define out_func z_out_func -# define Byte z_Byte # define uInt z_uInt -# define uLong z_uLong -# define Bytef z_Bytef -# define charf z_charf -# define intf z_intf # define uIntf z_uIntf +# define uLong z_uLong # define uLongf z_uLongf -# define voidpf z_voidpf # define voidp z_voidp +# define voidpc z_voidpc +# define voidpf z_voidpf + +/* all zlib structs in zlib.h and zconf.h */ +# define gz_header_s z_gz_header_s +# define internal_state z_internal_state + #endif #if defined(__MSDOS__) && !defined(MSDOS) @@ -129,9 +231,25 @@ # endif #endif -/* Some Mac compilers merge all .h files incorrectly: */ -#if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__) -# define NO_DUMMY_DECL +#if defined(ZLIB_CONST) && !defined(z_const) +# define z_const const +#else +# define z_const +#endif + +#ifdef Z_SOLO + typedef unsigned long z_size_t; +#else +# define z_longlong long long +# if defined(NO_SIZE_T) + typedef unsigned NO_SIZE_T z_size_t; +# elif defined(STDC) +# include + typedef size_t z_size_t; +# else + typedef unsigned long z_size_t; +# endif +# undef z_longlong #endif /* Maximum value for memLevel in deflateInit2 */ @@ -161,7 +279,7 @@ Of course this will generally degrade compression (there's no free lunch). The memory requirements for inflate are (in bytes) 1 << windowBits - that is, 32K for windowBits=15 (default value) plus a few kilobytes + that is, 32K for windowBits=15 (default value) plus about 7 kilobytes for small objects. */ @@ -175,6 +293,14 @@ # endif #endif +#ifndef Z_ARG /* function prototypes for stdarg */ +# if defined(STDC) || defined(Z_HAVE_STDARG_H) +# define Z_ARG(args) args +# else +# define Z_ARG(args) () +# endif +#endif + /* The following definitions for FAR are needed only for MSDOS mixed * model programming (small or medium model with some far allocations). * This was tested only with MSC; for other MSDOS compilers you may have @@ -288,49 +414,121 @@ typedef uLong FAR uLongf; typedef Byte *voidp; #endif -#ifdef HAVE_UNISTD_H -# include /* for off_t */ -# include /* for SEEK_* and off_t */ -# ifdef VMS -# include /* for off_t */ +#if !defined(Z_U4) && !defined(Z_SOLO) && defined(STDC) +# include +# if (UINT_MAX == 0xffffffffUL) +# define Z_U4 unsigned +# elif (ULONG_MAX == 0xffffffffUL) +# define Z_U4 unsigned long +# elif (USHRT_MAX == 0xffffffffUL) +# define Z_U4 unsigned short +# endif +#endif + +#ifdef Z_U4 + typedef Z_U4 z_crc_t; +#else + typedef unsigned long z_crc_t; +#endif + +#ifdef HAVE_UNISTD_H /* may be set to #if 1 by ./configure */ +# define Z_HAVE_UNISTD_H +#endif + +#ifdef HAVE_STDARG_H /* may be set to #if 1 by ./configure */ +# define Z_HAVE_STDARG_H +#endif + +#ifdef STDC +# ifndef Z_SOLO +# include /* for off_t */ +# endif +#endif + +#if defined(STDC) || defined(Z_HAVE_STDARG_H) +# ifndef Z_SOLO +# include /* for va_list */ +# endif +#endif + +#ifdef _WIN32 +# ifndef Z_SOLO +# include /* for wchar_t */ # endif -# define z_off_t off_t #endif -#ifndef SEEK_SET + +/* a little trick to accommodate both "#define _LARGEFILE64_SOURCE" and + * "#define _LARGEFILE64_SOURCE 1" as requesting 64-bit operations, (even + * though the former does not conform to the LFS document), but considering + * both "#undef _LARGEFILE64_SOURCE" and "#define _LARGEFILE64_SOURCE 0" as + * equivalently requesting no 64-bit operations + */ +#if defined(_LARGEFILE64_SOURCE) && -_LARGEFILE64_SOURCE - -1 == 1 +# undef _LARGEFILE64_SOURCE +#endif + +#if defined(__WATCOMC__) && !defined(Z_HAVE_UNISTD_H) +# define Z_HAVE_UNISTD_H +#endif +#ifndef Z_SOLO +# if defined(Z_HAVE_UNISTD_H) || defined(_LARGEFILE64_SOURCE) +# include /* for SEEK_*, off_t, and _LFS64_LARGEFILE */ +# ifdef VMS +# include /* for off_t */ +# endif +# ifndef z_off_t +# define z_off_t off_t +# endif +# endif +#endif + +#if defined(_LFS64_LARGEFILE) && _LFS64_LARGEFILE-0 +# define Z_LFS64 +#endif + +#if defined(_LARGEFILE64_SOURCE) && defined(Z_LFS64) +# define Z_LARGE64 +#endif + +#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS-0 == 64 && defined(Z_LFS64) +# define Z_WANT64 +#endif + +#if !defined(SEEK_SET) && !defined(Z_SOLO) # define SEEK_SET 0 /* Seek from beginning of file. */ # define SEEK_CUR 1 /* Seek from current position. */ # define SEEK_END 2 /* Set file pointer to EOF plus "offset" */ #endif + #ifndef z_off_t # define z_off_t long #endif -#if defined(__OS400__) -# define NO_vsnprintf -#endif - -#if defined(__MVS__) -# define NO_vsnprintf -# ifdef FAR -# undef FAR +#if !defined(_WIN32) && defined(Z_LARGE64) +# define z_off64_t off64_t +#else +# if defined(_WIN32) && !defined(__GNUC__) && !defined(Z_SOLO) +# define z_off64_t __int64 +# else +# define z_off64_t z_off_t # endif #endif /* MVS linker does not support external names larger than 8 bytes */ #if defined(__MVS__) -# pragma map(deflateInit_,"DEIN") -# pragma map(deflateInit2_,"DEIN2") -# pragma map(deflateEnd,"DEEND") -# pragma map(deflateBound,"DEBND") -# pragma map(inflateInit_,"ININ") -# pragma map(inflateInit2_,"ININ2") -# pragma map(inflateEnd,"INEND") -# pragma map(inflateSync,"INSY") -# pragma map(inflateSetDictionary,"INSEDI") -# pragma map(compressBound,"CMBND") -# pragma map(inflate_table,"INTABL") -# pragma map(inflate_fast,"INFA") -# pragma map(inflate_copyright,"INCOPY") + #pragma map(deflateInit_,"DEIN") + #pragma map(deflateInit2_,"DEIN2") + #pragma map(deflateEnd,"DEEND") + #pragma map(deflateBound,"DEBND") + #pragma map(inflateInit_,"ININ") + #pragma map(inflateInit2_,"ININ2") + #pragma map(inflateEnd,"INEND") + #pragma map(inflateSync,"INSY") + #pragma map(inflateSetDictionary,"INSEDI") + #pragma map(compressBound,"CMBND") + #pragma map(inflate_table,"INTABL") + #pragma map(inflate_fast,"INFA") + #pragma map(inflate_copyright,"INCOPY") #endif #endif /* ZCONF_H */ diff --git a/zlib/zlib.3 b/zlib/zlib.3 index 90b8162870fd..bda4eb073709 100644 --- a/zlib/zlib.3 +++ b/zlib/zlib.3 @@ -1,4 +1,4 @@ -.TH ZLIB 3 "18 July 2005" +.TH ZLIB 3 "15 Jan 2017" .SH NAME zlib \- compression/decompression library .SH SYNOPSIS @@ -9,15 +9,15 @@ for full description] The .I zlib library is a general purpose data compression library. -The code is thread safe. +The code is thread safe, assuming that the standard library functions +used are thread safe, such as memory allocation routines. It provides in-memory compression and decompression functions, including integrity checks of the uncompressed data. This version of the library supports only one compression method (deflation) -but other algorithms will be added later -and will have the same stream interface. +but other algorithms may be added later +with the same stream interface. .LP Compression can be done in a single step if the buffers are large enough -(for example if an input file is mmap'ed), or can be done by repeated calls of the compression function. In the latter case, the application must provide more input and/or consume the output @@ -30,91 +30,63 @@ with an interface similar to that of stdio. .LP The library does not install any signal handler. The decoder checks the consistency of the compressed data, -so the library should never crash even in case of corrupted input. +so the library should never crash even in the case of corrupted input. .LP All functions of the compression library are documented in the file .IR zlib.h . The distribution source includes examples of use of the library in the files -.I example.c +.I test/example.c and -.IR minigzip.c . +.IR test/minigzip.c, +as well as other examples in the +.IR examples/ +directory. .LP Changes to this version are documented in the file .I ChangeLog -that accompanies the source, -and are concerned primarily with bug fixes and portability enhancements. +that accompanies the source. .LP -A Java implementation of .I zlib -is available in the Java Development Kit 1.1: -.IP -http://www.javasoft.com/products/JDK/1.1/docs/api/Package-java.util.zip.html -.LP -A Perl interface to -.IR zlib , -written by Paul Marquess (pmqs@cpan.org), -is available at CPAN (Comprehensive Perl Archive Network) sites, -including: -.IP -http://www.cpan.org/modules/by-module/Compress/ -.LP -A Python interface to -.IR zlib , -written by A.M. Kuchling (amk@magnet.com), -is available in Python 1.5 and later versions: -.IP -http://www.python.org/doc/lib/module-zlib.html +is built in to many languages and operating systems, including but not limited to +Java, Python, .NET, PHP, Perl, Ruby, Swift, and Go. .LP -A -.I zlib -binding for -.IR tcl (1), -written by Andreas Kupries (a.kupries@westend.com), -is availlable at: -.IP -http://www.westend.com/~kupries/doc/trf/man/man.html -.LP -An experimental package to read and write files in .zip format, +An experimental package to read and write files in the .zip format, written on top of .I zlib by Gilles Vollant (info@winimage.com), is available at: .IP -http://www.winimage.com/zLibDll/unzip.html +http://www.winimage.com/zLibDll/minizip.html and also in the .I contrib/minizip directory of the main .I zlib -web site. +source distribution. .SH "SEE ALSO" The .I zlib -web site can be found at either of these locations: +web site can be found at: .IP -http://www.zlib.org -.br -http://www.gzip.org/zlib/ +http://zlib.net/ .LP -The data format used by the zlib library is described by RFC +The data format used by the +.I zlib +library is described by RFC (Request for Comments) 1950 to 1952 in the files: .IP -http://www.ietf.org/rfc/rfc1950.txt (concerning zlib format) +http://tools.ietf.org/html/rfc1950 (for the zlib header and trailer format) .br -http://www.ietf.org/rfc/rfc1951.txt (concerning deflate format) +http://tools.ietf.org/html/rfc1951 (for the deflate compressed data format) .br -http://www.ietf.org/rfc/rfc1952.txt (concerning gzip format) -.LP -These documents are also available in other formats from: -.IP -ftp://ftp.uu.net/graphics/png/documents/zlib/zdoc-index.html +http://tools.ietf.org/html/rfc1952 (for the gzip header and trailer format) .LP -Mark Nelson (markn@ieee.org) wrote an article about +Mark Nelson wrote an article about .I zlib for the Jan. 1997 issue of Dr. Dobb's Journal; a copy of the article is available at: .IP -http://dogma.net/markn/articles/zlibtool/zlibtool.htm +http://marknelson.us/1997/01/01/zlib-engine/ .SH "REPORTING PROBLEMS" Before reporting a problem, please check the @@ -127,22 +99,40 @@ Please read the .I zlib FAQ at: .IP -http://www.gzip.org/zlib/zlib_faq.html +http://zlib.net/zlib_faq.html .LP before asking for help. Send questions and/or comments to zlib@gzip.org, or (for the Windows DLL version) to Gilles Vollant (info@winimage.com). -.SH AUTHORS -Version 1.2.3 -Copyright (C) 1995-2005 Jean-loup Gailly (jloup@gzip.org) -and Mark Adler (madler@alumni.caltech.edu). -.LP -This software is provided "as-is," -without any express or implied warranty. -In no event will the authors be held liable for any damages +.SH AUTHORS AND LICENSE +Version 1.2.11 +.LP +Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler +.LP +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages arising from the use of this software. -See the distribution directory with respect to requirements -governing redistribution. +.LP +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: +.LP +.nr step 1 1 +.IP \n[step]. 3 +The origin of this software must not be misrepresented; you must not +claim that you wrote the original software. If you use this software +in a product, an acknowledgment in the product documentation would be +appreciated but is not required. +.IP \n+[step]. +Altered source versions must be plainly marked as such, and must not be +misrepresented as being the original software. +.IP \n+[step]. +This notice may not be removed or altered from any source distribution. +.LP +Jean-loup Gailly Mark Adler +.br +jloup@gzip.org madler@alumni.caltech.edu +.LP The deflate format used by .I zlib was defined by Phil Katz. diff --git a/zlib/zlib.h b/zlib/zlib.h index 022817927ce3..08f491999c40 100644 --- a/zlib/zlib.h +++ b/zlib/zlib.h @@ -1,7 +1,7 @@ /* zlib.h -- interface of the 'zlib' general purpose compression library - version 1.2.3, July 18th, 2005 + version 1.2.11, January 15th, 2017 - Copyright (C) 1995-2005 Jean-loup Gailly and Mark Adler + Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -24,54 +24,58 @@ The data format used by the zlib library is described by RFCs (Request for - Comments) 1950 to 1952 in the files http://www.ietf.org/rfc/rfc1950.txt - (zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format). + Comments) 1950 to 1952 in the files http://tools.ietf.org/html/rfc1950 + (zlib format), rfc1951 (deflate format) and rfc1952 (gzip format). */ #ifndef ZLIB_H #define ZLIB_H -#include "zconf.h" +#include #ifdef __cplusplus extern "C" { #endif -#define ZLIB_VERSION "1.2.3" -#define ZLIB_VERNUM 0x1230 +#define ZLIB_VERSION "1.2.11" +#define ZLIB_VERNUM 0x12b0 +#define ZLIB_VER_MAJOR 1 +#define ZLIB_VER_MINOR 2 +#define ZLIB_VER_REVISION 11 +#define ZLIB_VER_SUBREVISION 0 /* - The 'zlib' compression library provides in-memory compression and - decompression functions, including integrity checks of the uncompressed - data. This version of the library supports only one compression method - (deflation) but other algorithms will be added later and will have the same - stream interface. - - Compression can be done in a single step if the buffers are large - enough (for example if an input file is mmap'ed), or can be done by - repeated calls of the compression function. In the latter case, the - application must provide more input and/or consume the output + The 'zlib' compression library provides in-memory compression and + decompression functions, including integrity checks of the uncompressed data. + This version of the library supports only one compression method (deflation) + but other algorithms will be added later and will have the same stream + interface. + + Compression can be done in a single step if the buffers are large enough, + or can be done by repeated calls of the compression function. In the latter + case, the application must provide more input and/or consume the output (providing more output space) before each call. - The compressed data format used by default by the in-memory functions is + The compressed data format used by default by the in-memory functions is the zlib format, which is a zlib wrapper documented in RFC 1950, wrapped around a deflate stream, which is itself documented in RFC 1951. - The library also supports reading and writing files in gzip (.gz) format + The library also supports reading and writing files in gzip (.gz) format with an interface similar to that of stdio using the functions that start with "gz". The gzip format is different from the zlib format. gzip is a gzip wrapper, documented in RFC 1952, wrapped around a deflate stream. - This library can optionally read and write gzip streams in memory as well. + This library can optionally read and write gzip and raw deflate streams in + memory as well. - The zlib format was designed to be compact and fast for use in memory + The zlib format was designed to be compact and fast for use in memory and on communications channels. The gzip format was designed for single- file compression on file systems, has a larger header than zlib to maintain directory information, and uses a different, slower check method than zlib. - The library does not install any signal handler. The decoder checks - the consistency of the compressed data, so the library should never - crash even in case of corrupted input. + The library does not install any signal handler. The decoder checks + the consistency of the compressed data, so the library should never crash + even in the case of corrupted input. */ typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size)); @@ -80,23 +84,24 @@ typedef void (*free_func) OF((voidpf opaque, voidpf address)); struct internal_state; typedef struct z_stream_s { - Bytef *next_in; /* next input byte */ + z_const Bytef *next_in; /* next input byte */ uInt avail_in; /* number of bytes available at next_in */ - uLong total_in; /* total nb of input bytes read so far */ + uLong total_in; /* total number of input bytes read so far */ - Bytef *next_out; /* next output byte should be put there */ + Bytef *next_out; /* next output byte will go here */ uInt avail_out; /* remaining free space at next_out */ - uLong total_out; /* total nb of bytes output so far */ + uLong total_out; /* total number of bytes output so far */ - char *msg; /* last error message, NULL if no error */ + z_const char *msg; /* last error message, NULL if no error */ struct internal_state FAR *state; /* not visible by applications */ alloc_func zalloc; /* used to allocate the internal state */ free_func zfree; /* used to free the internal state */ voidpf opaque; /* private data object passed to zalloc and zfree */ - int data_type; /* best guess about the data type: binary or text */ - uLong adler; /* adler32 value of the uncompressed data */ + int data_type; /* best guess about the data type: binary or text + for deflate, or the decoding state for inflate */ + uLong adler; /* Adler-32 or CRC-32 value of the uncompressed data */ uLong reserved; /* reserved for future use */ } z_stream; @@ -126,45 +131,47 @@ typedef struct gz_header_s { typedef gz_header FAR *gz_headerp; /* - The application must update next_in and avail_in when avail_in has - dropped to zero. It must update next_out and avail_out when avail_out - has dropped to zero. The application must initialize zalloc, zfree and - opaque before calling the init function. All other fields are set by the - compression library and must not be updated by the application. - - The opaque value provided by the application will be passed as the first - parameter for calls of zalloc and zfree. This can be useful for custom - memory management. The compression library attaches no meaning to the + The application must update next_in and avail_in when avail_in has dropped + to zero. It must update next_out and avail_out when avail_out has dropped + to zero. The application must initialize zalloc, zfree and opaque before + calling the init function. All other fields are set by the compression + library and must not be updated by the application. + + The opaque value provided by the application will be passed as the first + parameter for calls of zalloc and zfree. This can be useful for custom + memory management. The compression library attaches no meaning to the opaque value. - zalloc must return Z_NULL if there is not enough memory for the object. + zalloc must return Z_NULL if there is not enough memory for the object. If zlib is used in a multi-threaded application, zalloc and zfree must be - thread safe. - - On 16-bit systems, the functions zalloc and zfree must be able to allocate - exactly 65536 bytes, but will not be required to allocate more than this - if the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS, - pointers returned by zalloc for objects of exactly 65536 bytes *must* - have their offset normalized to zero. The default allocation function - provided by this library ensures this (see zutil.c). To reduce memory - requirements and avoid any allocation of 64K objects, at the expense of - compression ratio, compile the library with -DMAX_WBITS=14 (see zconf.h). - - The fields total_in and total_out can be used for statistics or - progress reports. After compression, total_in holds the total size of - the uncompressed data and may be saved for use in the decompressor - (particularly if the decompressor wants to decompress everything in - a single step). + thread safe. In that case, zlib is thread-safe. When zalloc and zfree are + Z_NULL on entry to the initialization function, they are set to internal + routines that use the standard library functions malloc() and free(). + + On 16-bit systems, the functions zalloc and zfree must be able to allocate + exactly 65536 bytes, but will not be required to allocate more than this if + the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS, pointers + returned by zalloc for objects of exactly 65536 bytes *must* have their + offset normalized to zero. The default allocation function provided by this + library ensures this (see zutil.c). To reduce memory requirements and avoid + any allocation of 64K objects, at the expense of compression ratio, compile + the library with -DMAX_WBITS=14 (see zconf.h). + + The fields total_in and total_out can be used for statistics or progress + reports. After compression, total_in holds the total size of the + uncompressed data and may be saved for use by the decompressor (particularly + if the decompressor wants to decompress everything in a single step). */ /* constants */ #define Z_NO_FLUSH 0 -#define Z_PARTIAL_FLUSH 1 /* will be removed, use Z_SYNC_FLUSH instead */ +#define Z_PARTIAL_FLUSH 1 #define Z_SYNC_FLUSH 2 #define Z_FULL_FLUSH 3 #define Z_FINISH 4 #define Z_BLOCK 5 +#define Z_TREES 6 /* Allowed flush values; see deflate() and inflate() below for details */ #define Z_OK 0 @@ -176,8 +183,8 @@ typedef gz_header FAR *gz_headerp; #define Z_MEM_ERROR (-4) #define Z_BUF_ERROR (-5) #define Z_VERSION_ERROR (-6) -/* Return codes for the compression/decompression functions. Negative - * values are errors, positive values are used for special but normal events. +/* Return codes for the compression/decompression functions. Negative values + * are errors, positive values are used for special but normal events. */ #define Z_NO_COMPRESSION 0 @@ -197,7 +204,7 @@ typedef gz_header FAR *gz_headerp; #define Z_TEXT 1 #define Z_ASCII Z_TEXT /* for compatibility with 1.2.2 and earlier */ #define Z_UNKNOWN 2 -/* Possible values of the data_type field (though see inflate()) */ +/* Possible values of the data_type field for deflate() */ #define Z_DEFLATED 8 /* The deflate compression method (the only one supported in this version) */ @@ -207,134 +214,162 @@ typedef gz_header FAR *gz_headerp; #define zlib_version zlibVersion() /* for compatibility with versions < 1.0.2 */ + /* basic functions */ ZEXTERN const char * ZEXPORT zlibVersion OF((void)); /* The application can compare zlibVersion and ZLIB_VERSION for consistency. - If the first character differs, the library code actually used is - not compatible with the zlib.h header file used by the application. - This check is automatically made by deflateInit and inflateInit. + If the first character differs, the library code actually used is not + compatible with the zlib.h header file used by the application. This check + is automatically made by deflateInit and inflateInit. */ /* ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level)); - Initializes the internal stream state for compression. The fields - zalloc, zfree and opaque must be initialized before by the caller. - If zalloc and zfree are set to Z_NULL, deflateInit updates them to - use default allocation functions. + Initializes the internal stream state for compression. The fields + zalloc, zfree and opaque must be initialized before by the caller. If + zalloc and zfree are set to Z_NULL, deflateInit updates them to use default + allocation functions. The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9: - 1 gives best speed, 9 gives best compression, 0 gives no compression at - all (the input data is simply copied a block at a time). - Z_DEFAULT_COMPRESSION requests a default compromise between speed and - compression (currently equivalent to level 6). + 1 gives best speed, 9 gives best compression, 0 gives no compression at all + (the input data is simply copied a block at a time). Z_DEFAULT_COMPRESSION + requests a default compromise between speed and compression (currently + equivalent to level 6). - deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not - enough memory, Z_STREAM_ERROR if level is not a valid compression level, + deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_STREAM_ERROR if level is not a valid compression level, or Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible - with the version assumed by the caller (ZLIB_VERSION). - msg is set to null if there is no error message. deflateInit does not - perform any compression: this will be done by deflate(). + with the version assumed by the caller (ZLIB_VERSION). msg is set to null + if there is no error message. deflateInit does not perform any compression: + this will be done by deflate(). */ ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush)); /* deflate compresses as much data as possible, and stops when the input - buffer becomes empty or the output buffer becomes full. It may introduce some - output latency (reading input without producing any output) except when + buffer becomes empty or the output buffer becomes full. It may introduce + some output latency (reading input without producing any output) except when forced to flush. - The detailed semantics are as follows. deflate performs one or both of the + The detailed semantics are as follows. deflate performs one or both of the following actions: - Compress more input starting at next_in and update next_in and avail_in - accordingly. If not all input can be processed (because there is not + accordingly. If not all input can be processed (because there is not enough room in the output buffer), next_in and avail_in are updated and processing will resume at this point for the next call of deflate(). - - Provide more output starting at next_out and update next_out and avail_out - accordingly. This action is forced if the parameter flush is non zero. + - Generate more output starting at next_out and update next_out and avail_out + accordingly. This action is forced if the parameter flush is non zero. Forcing flush frequently degrades the compression ratio, so this parameter - should be set only when necessary (in interactive applications). - Some output may be provided even if flush is not set. - - Before the call of deflate(), the application should ensure that at least - one of the actions is possible, by providing more input and/or consuming - more output, and updating avail_in or avail_out accordingly; avail_out - should never be zero before the call. The application can consume the - compressed output when it wants, for example when the output buffer is full - (avail_out == 0), or after each call of deflate(). If deflate returns Z_OK - and with zero avail_out, it must be called again after making room in the - output buffer because there might be more output pending. + should be set only when necessary. Some output may be provided even if + flush is zero. + + Before the call of deflate(), the application should ensure that at least + one of the actions is possible, by providing more input and/or consuming more + output, and updating avail_in or avail_out accordingly; avail_out should + never be zero before the call. The application can consume the compressed + output when it wants, for example when the output buffer is full (avail_out + == 0), or after each call of deflate(). If deflate returns Z_OK and with + zero avail_out, it must be called again after making room in the output + buffer because there might be more output pending. See deflatePending(), + which can be used if desired to determine whether or not there is more ouput + in that case. Normally the parameter flush is set to Z_NO_FLUSH, which allows deflate to - decide how much data to accumualte before producing output, in order to + decide how much data to accumulate before producing output, in order to maximize compression. If the parameter flush is set to Z_SYNC_FLUSH, all pending output is flushed to the output buffer and the output is aligned on a byte boundary, so - that the decompressor can get all input data available so far. (In particular - avail_in is zero after the call if enough output space has been provided - before the call.) Flushing may degrade compression for some compression - algorithms and so it should be used only when necessary. + that the decompressor can get all input data available so far. (In + particular avail_in is zero after the call if enough output space has been + provided before the call.) Flushing may degrade compression for some + compression algorithms and so it should be used only when necessary. This + completes the current deflate block and follows it with an empty stored block + that is three bits plus filler bits to the next byte, followed by four bytes + (00 00 ff ff). + + If flush is set to Z_PARTIAL_FLUSH, all pending output is flushed to the + output buffer, but the output is not aligned to a byte boundary. All of the + input data so far will be available to the decompressor, as for Z_SYNC_FLUSH. + This completes the current deflate block and follows it with an empty fixed + codes block that is 10 bits long. This assures that enough bytes are output + in order for the decompressor to finish the block before the empty fixed + codes block. + + If flush is set to Z_BLOCK, a deflate block is completed and emitted, as + for Z_SYNC_FLUSH, but the output is not aligned on a byte boundary, and up to + seven bits of the current block are held to be written as the next byte after + the next deflate block is completed. In this case, the decompressor may not + be provided enough bits at this point in order to complete decompression of + the data provided so far to the compressor. It may need to wait for the next + block to be emitted. This is for advanced applications that need to control + the emission of deflate blocks. If flush is set to Z_FULL_FLUSH, all output is flushed as with Z_SYNC_FLUSH, and the compression state is reset so that decompression can restart from this point if previous compressed data has been damaged or if - random access is desired. Using Z_FULL_FLUSH too often can seriously degrade + random access is desired. Using Z_FULL_FLUSH too often can seriously degrade compression. If deflate returns with avail_out == 0, this function must be called again with the same value of the flush parameter and more output space (updated avail_out), until the flush is complete (deflate returns with non-zero - avail_out). In the case of a Z_FULL_FLUSH or Z_SYNC_FLUSH, make sure that + avail_out). In the case of a Z_FULL_FLUSH or Z_SYNC_FLUSH, make sure that avail_out is greater than six to avoid repeated flush markers due to avail_out == 0 on return. If the parameter flush is set to Z_FINISH, pending input is processed, - pending output is flushed and deflate returns with Z_STREAM_END if there - was enough output space; if deflate returns with Z_OK, this function must be - called again with Z_FINISH and more output space (updated avail_out) but no - more input data, until it returns with Z_STREAM_END or an error. After - deflate has returned Z_STREAM_END, the only possible operations on the - stream are deflateReset or deflateEnd. - - Z_FINISH can be used immediately after deflateInit if all the compression - is to be done in a single step. In this case, avail_out must be at least - the value returned by deflateBound (see below). If deflate does not return - Z_STREAM_END, then it must be called again as described above. - - deflate() sets strm->adler to the adler32 checksum of all input read - so far (that is, total_in bytes). + pending output is flushed and deflate returns with Z_STREAM_END if there was + enough output space. If deflate returns with Z_OK or Z_BUF_ERROR, this + function must be called again with Z_FINISH and more output space (updated + avail_out) but no more input data, until it returns with Z_STREAM_END or an + error. After deflate has returned Z_STREAM_END, the only possible operations + on the stream are deflateReset or deflateEnd. + + Z_FINISH can be used in the first deflate call after deflateInit if all the + compression is to be done in a single step. In order to complete in one + call, avail_out must be at least the value returned by deflateBound (see + below). Then deflate is guaranteed to return Z_STREAM_END. If not enough + output space is provided, deflate will not return Z_STREAM_END, and it must + be called again as described above. + + deflate() sets strm->adler to the Adler-32 checksum of all input read + so far (that is, total_in bytes). If a gzip stream is being generated, then + strm->adler will be the CRC-32 checksum of the input read so far. (See + deflateInit2 below.) deflate() may update strm->data_type if it can make a good guess about - the input data type (Z_BINARY or Z_TEXT). In doubt, the data is considered - binary. This field is only for information purposes and does not affect - the compression algorithm in any manner. + the input data type (Z_BINARY or Z_TEXT). If in doubt, the data is + considered binary. This field is only for information purposes and does not + affect the compression algorithm in any manner. deflate() returns Z_OK if some progress has been made (more input processed or more output produced), Z_STREAM_END if all input has been consumed and all output has been produced (only when flush is set to Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example - if next_in or next_out was NULL), Z_BUF_ERROR if no progress is possible - (for example avail_in or avail_out was zero). Note that Z_BUF_ERROR is not - fatal, and deflate() can be called again with more input and more output - space to continue compressing. + if next_in or next_out was Z_NULL or the state was inadvertently written over + by the application), or Z_BUF_ERROR if no progress is possible (for example + avail_in or avail_out was zero). Note that Z_BUF_ERROR is not fatal, and + deflate() can be called again with more input and more output space to + continue compressing. */ ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm)); /* All dynamically allocated data structures for this stream are freed. - This function discards any unprocessed input and does not flush any - pending output. + This function discards any unprocessed input and does not flush any pending + output. deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state was inconsistent, Z_DATA_ERROR if the stream was freed - prematurely (some input or output was discarded). In the error case, - msg may be set but then points to a static string (which must not be + prematurely (some input or output was discarded). In the error case, msg + may be set but then points to a static string (which must not be deallocated). */ @@ -342,134 +377,157 @@ ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm)); /* ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm)); - Initializes the internal stream state for decompression. The fields + Initializes the internal stream state for decompression. The fields next_in, avail_in, zalloc, zfree and opaque must be initialized before by - the caller. If next_in is not Z_NULL and avail_in is large enough (the exact - value depends on the compression method), inflateInit determines the - compression method from the zlib header and allocates all data structures - accordingly; otherwise the allocation will be deferred to the first call of - inflate. If zalloc and zfree are set to Z_NULL, inflateInit updates them to - use default allocation functions. + the caller. In the current version of inflate, the provided input is not + read or consumed. The allocation of a sliding window will be deferred to + the first call of inflate (if the decompression does not complete on the + first call). If zalloc and zfree are set to Z_NULL, inflateInit updates + them to use default allocation functions. inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_VERSION_ERROR if the zlib library version is incompatible with the - version assumed by the caller. msg is set to null if there is no error - message. inflateInit does not perform any decompression apart from reading - the zlib header if present: this will be done by inflate(). (So next_in and - avail_in may be modified, but next_out and avail_out are unchanged.) + version assumed by the caller, or Z_STREAM_ERROR if the parameters are + invalid, such as a null pointer to the structure. msg is set to null if + there is no error message. inflateInit does not perform any decompression. + Actual decompression will be done by inflate(). So next_in, and avail_in, + next_out, and avail_out are unused and unchanged. The current + implementation of inflateInit() does not process any header information -- + that is deferred until inflate() is called. */ ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush)); /* inflate decompresses as much data as possible, and stops when the input - buffer becomes empty or the output buffer becomes full. It may introduce + buffer becomes empty or the output buffer becomes full. It may introduce some output latency (reading input without producing any output) except when forced to flush. - The detailed semantics are as follows. inflate performs one or both of the + The detailed semantics are as follows. inflate performs one or both of the following actions: - Decompress more input starting at next_in and update next_in and avail_in - accordingly. If not all input can be processed (because there is not - enough room in the output buffer), next_in is updated and processing - will resume at this point for the next call of inflate(). - - - Provide more output starting at next_out and update next_out and avail_out - accordingly. inflate() provides as much output as possible, until there - is no more input data or no more space in the output buffer (see below - about the flush parameter). - - Before the call of inflate(), the application should ensure that at least - one of the actions is possible, by providing more input and/or consuming - more output, and updating the next_* and avail_* values accordingly. - The application can consume the uncompressed output when it wants, for - example when the output buffer is full (avail_out == 0), or after each - call of inflate(). If inflate returns Z_OK and with zero avail_out, it - must be called again after making room in the output buffer because there - might be more output pending. - - The flush parameter of inflate() can be Z_NO_FLUSH, Z_SYNC_FLUSH, - Z_FINISH, or Z_BLOCK. Z_SYNC_FLUSH requests that inflate() flush as much - output as possible to the output buffer. Z_BLOCK requests that inflate() stop - if and when it gets to the next deflate block boundary. When decoding the - zlib or gzip format, this will cause inflate() to return immediately after - the header and before the first block. When doing a raw inflate, inflate() - will go ahead and process the first block, and will return when it gets to - the end of that block, or when it runs out of data. + accordingly. If not all input can be processed (because there is not + enough room in the output buffer), then next_in and avail_in are updated + accordingly, and processing will resume at this point for the next call of + inflate(). + + - Generate more output starting at next_out and update next_out and avail_out + accordingly. inflate() provides as much output as possible, until there is + no more input data or no more space in the output buffer (see below about + the flush parameter). + + Before the call of inflate(), the application should ensure that at least + one of the actions is possible, by providing more input and/or consuming more + output, and updating the next_* and avail_* values accordingly. If the + caller of inflate() does not provide both available input and available + output space, it is possible that there will be no progress made. The + application can consume the uncompressed output when it wants, for example + when the output buffer is full (avail_out == 0), or after each call of + inflate(). If inflate returns Z_OK and with zero avail_out, it must be + called again after making room in the output buffer because there might be + more output pending. + + The flush parameter of inflate() can be Z_NO_FLUSH, Z_SYNC_FLUSH, Z_FINISH, + Z_BLOCK, or Z_TREES. Z_SYNC_FLUSH requests that inflate() flush as much + output as possible to the output buffer. Z_BLOCK requests that inflate() + stop if and when it gets to the next deflate block boundary. When decoding + the zlib or gzip format, this will cause inflate() to return immediately + after the header and before the first block. When doing a raw inflate, + inflate() will go ahead and process the first block, and will return when it + gets to the end of that block, or when it runs out of data. The Z_BLOCK option assists in appending to or combining deflate streams. - Also to assist in this, on return inflate() will set strm->data_type to the - number of unused bits in the last byte taken from strm->next_in, plus 64 - if inflate() is currently decoding the last block in the deflate stream, - plus 128 if inflate() returned immediately after decoding an end-of-block - code or decoding the complete header up to just before the first byte of the - deflate stream. The end-of-block will not be indicated until all of the - uncompressed data from that block has been written to strm->next_out. The - number of unused bits may in general be greater than seven, except when - bit 7 of data_type is set, in which case the number of unused bits will be - less than eight. + To assist in this, on return inflate() always sets strm->data_type to the + number of unused bits in the last byte taken from strm->next_in, plus 64 if + inflate() is currently decoding the last block in the deflate stream, plus + 128 if inflate() returned immediately after decoding an end-of-block code or + decoding the complete header up to just before the first byte of the deflate + stream. The end-of-block will not be indicated until all of the uncompressed + data from that block has been written to strm->next_out. The number of + unused bits may in general be greater than seven, except when bit 7 of + data_type is set, in which case the number of unused bits will be less than + eight. data_type is set as noted here every time inflate() returns for all + flush options, and so can be used to determine the amount of currently + consumed input in bits. + + The Z_TREES option behaves as Z_BLOCK does, but it also returns when the + end of each deflate block header is reached, before any actual data in that + block is decoded. This allows the caller to determine the length of the + deflate block header for later use in random access within a deflate block. + 256 is added to the value of strm->data_type when inflate() returns + immediately after reaching the end of the deflate block header. inflate() should normally be called until it returns Z_STREAM_END or an - error. However if all decompression is to be performed in a single step - (a single call of inflate), the parameter flush should be set to - Z_FINISH. In this case all pending input is processed and all pending - output is flushed; avail_out must be large enough to hold all the - uncompressed data. (The size of the uncompressed data may have been saved - by the compressor for this purpose.) The next operation on this stream must - be inflateEnd to deallocate the decompression state. The use of Z_FINISH - is never required, but can be used to inform inflate that a faster approach - may be used for the single inflate() call. + error. However if all decompression is to be performed in a single step (a + single call of inflate), the parameter flush should be set to Z_FINISH. In + this case all pending input is processed and all pending output is flushed; + avail_out must be large enough to hold all of the uncompressed data for the + operation to complete. (The size of the uncompressed data may have been + saved by the compressor for this purpose.) The use of Z_FINISH is not + required to perform an inflation in one step. However it may be used to + inform inflate that a faster approach can be used for the single inflate() + call. Z_FINISH also informs inflate to not maintain a sliding window if the + stream completes, which reduces inflate's memory footprint. If the stream + does not complete, either because not all of the stream is provided or not + enough output space is provided, then a sliding window will be allocated and + inflate() can be called again to continue the operation as if Z_NO_FLUSH had + been used. In this implementation, inflate() always flushes as much output as possible to the output buffer, and always uses the faster approach on the - first call. So the only effect of the flush parameter in this implementation - is on the return value of inflate(), as noted below, or when it returns early - because Z_BLOCK is used. + first call. So the effects of the flush parameter in this implementation are + on the return value of inflate() as noted below, when inflate() returns early + when Z_BLOCK or Z_TREES is used, and when inflate() avoids the allocation of + memory for a sliding window when Z_FINISH is used. If a preset dictionary is needed after this call (see inflateSetDictionary - below), inflate sets strm->adler to the adler32 checksum of the dictionary + below), inflate sets strm->adler to the Adler-32 checksum of the dictionary chosen by the compressor and returns Z_NEED_DICT; otherwise it sets - strm->adler to the adler32 checksum of all output produced so far (that is, + strm->adler to the Adler-32 checksum of all output produced so far (that is, total_out bytes) and returns Z_OK, Z_STREAM_END or an error code as described - below. At the end of the stream, inflate() checks that its computed adler32 + below. At the end of the stream, inflate() checks that its computed Adler-32 checksum is equal to that saved by the compressor and returns Z_STREAM_END only if the checksum is correct. - inflate() will decompress and check either zlib-wrapped or gzip-wrapped - deflate data. The header type is detected automatically. Any information - contained in the gzip header is not retained, so applications that need that - information should instead use raw inflate, see inflateInit2() below, or - inflateBack() and perform their own processing of the gzip header and - trailer. + inflate() can decompress and check either zlib-wrapped or gzip-wrapped + deflate data. The header type is detected automatically, if requested when + initializing with inflateInit2(). Any information contained in the gzip + header is not retained unless inflateGetHeader() is used. When processing + gzip-wrapped deflate data, strm->adler32 is set to the CRC-32 of the output + produced so far. The CRC-32 is checked against the gzip trailer, as is the + uncompressed length, modulo 2^32. inflate() returns Z_OK if some progress has been made (more input processed or more output produced), Z_STREAM_END if the end of the compressed data has been reached and all uncompressed output has been produced, Z_NEED_DICT if a preset dictionary is needed at this point, Z_DATA_ERROR if the input data was corrupted (input stream not conforming to the zlib format or incorrect check - value), Z_STREAM_ERROR if the stream structure was inconsistent (for example - if next_in or next_out was NULL), Z_MEM_ERROR if there was not enough memory, - Z_BUF_ERROR if no progress is possible or if there was not enough room in the - output buffer when Z_FINISH is used. Note that Z_BUF_ERROR is not fatal, and + value, in which case strm->msg points to a string with a more specific + error), Z_STREAM_ERROR if the stream structure was inconsistent (for example + next_in or next_out was Z_NULL, or the state was inadvertently written over + by the application), Z_MEM_ERROR if there was not enough memory, Z_BUF_ERROR + if no progress was possible or if there was not enough room in the output + buffer when Z_FINISH is used. Note that Z_BUF_ERROR is not fatal, and inflate() can be called again with more input and more output space to - continue decompressing. If Z_DATA_ERROR is returned, the application may then - call inflateSync() to look for a good compression block if a partial recovery - of the data is desired. + continue decompressing. If Z_DATA_ERROR is returned, the application may + then call inflateSync() to look for a good compression block if a partial + recovery of the data is to be attempted. */ ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm)); /* All dynamically allocated data structures for this stream are freed. - This function discards any unprocessed input and does not flush any - pending output. + This function discards any unprocessed input and does not flush any pending + output. - inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state - was inconsistent. In the error case, msg may be set but then points to a - static string (which must not be deallocated). + inflateEnd returns Z_OK if success, or Z_STREAM_ERROR if the stream state + was inconsistent. */ + /* Advanced functions */ /* @@ -484,55 +542,70 @@ ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm, int memLevel, int strategy)); - This is another version of deflateInit with more compression options. The - fields next_in, zalloc, zfree and opaque must be initialized before by - the caller. + This is another version of deflateInit with more compression options. The + fields next_in, zalloc, zfree and opaque must be initialized before by the + caller. - The method parameter is the compression method. It must be Z_DEFLATED in + The method parameter is the compression method. It must be Z_DEFLATED in this version of the library. The windowBits parameter is the base two logarithm of the window size - (the size of the history buffer). It should be in the range 8..15 for this - version of the library. Larger values of this parameter result in better - compression at the expense of memory usage. The default value is 15 if + (the size of the history buffer). It should be in the range 8..15 for this + version of the library. Larger values of this parameter result in better + compression at the expense of memory usage. The default value is 15 if deflateInit is used instead. - windowBits can also be -8..-15 for raw deflate. In this case, -windowBits - determines the window size. deflate() will then generate raw deflate data - with no zlib header or trailer, and will not compute an adler32 check value. + For the current implementation of deflate(), a windowBits value of 8 (a + window size of 256 bytes) is not supported. As a result, a request for 8 + will result in 9 (a 512-byte window). In that case, providing 8 to + inflateInit2() will result in an error when the zlib header with 9 is + checked against the initialization of inflate(). The remedy is to not use 8 + with deflateInit2() with this initialization, or at least in that case use 9 + with inflateInit2(). - windowBits can also be greater than 15 for optional gzip encoding. Add + windowBits can also be -8..-15 for raw deflate. In this case, -windowBits + determines the window size. deflate() will then generate raw deflate data + with no zlib header or trailer, and will not compute a check value. + + windowBits can also be greater than 15 for optional gzip encoding. Add 16 to windowBits to write a simple gzip header and trailer around the - compressed data instead of a zlib wrapper. The gzip header will have no - file name, no extra data, no comment, no modification time (set to zero), - no header crc, and the operating system will be set to 255 (unknown). If a - gzip stream is being written, strm->adler is a crc32 instead of an adler32. + compressed data instead of a zlib wrapper. The gzip header will have no + file name, no extra data, no comment, no modification time (set to zero), no + header crc, and the operating system will be set to the appropriate value, + if the operating system was determined at compile time. If a gzip stream is + being written, strm->adler is a CRC-32 instead of an Adler-32. + + For raw deflate or gzip encoding, a request for a 256-byte window is + rejected as invalid, since only the zlib header provides a means of + transmitting the window size to the decompressor. The memLevel parameter specifies how much memory should be allocated - for the internal compression state. memLevel=1 uses minimum memory but - is slow and reduces compression ratio; memLevel=9 uses maximum memory - for optimal speed. The default value is 8. See zconf.h for total memory - usage as a function of windowBits and memLevel. + for the internal compression state. memLevel=1 uses minimum memory but is + slow and reduces compression ratio; memLevel=9 uses maximum memory for + optimal speed. The default value is 8. See zconf.h for total memory usage + as a function of windowBits and memLevel. - The strategy parameter is used to tune the compression algorithm. Use the + The strategy parameter is used to tune the compression algorithm. Use the value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a filter (or predictor), Z_HUFFMAN_ONLY to force Huffman encoding only (no string match), or Z_RLE to limit match distances to one (run-length - encoding). Filtered data consists mostly of small values with a somewhat - random distribution. In this case, the compression algorithm is tuned to - compress them better. The effect of Z_FILTERED is to force more Huffman + encoding). Filtered data consists mostly of small values with a somewhat + random distribution. In this case, the compression algorithm is tuned to + compress them better. The effect of Z_FILTERED is to force more Huffman coding and less string matching; it is somewhat intermediate between - Z_DEFAULT and Z_HUFFMAN_ONLY. Z_RLE is designed to be almost as fast as - Z_HUFFMAN_ONLY, but give better compression for PNG image data. The strategy - parameter only affects the compression ratio but not the correctness of the - compressed output even if it is not set appropriately. Z_FIXED prevents the - use of dynamic Huffman codes, allowing for a simpler decoder for special - applications. - - deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough - memory, Z_STREAM_ERROR if a parameter is invalid (such as an invalid - method). msg is set to null if there is no error message. deflateInit2 does - not perform any compression: this will be done by deflate(). + Z_DEFAULT_STRATEGY and Z_HUFFMAN_ONLY. Z_RLE is designed to be almost as + fast as Z_HUFFMAN_ONLY, but give better compression for PNG image data. The + strategy parameter only affects the compression ratio but not the + correctness of the compressed output even if it is not set appropriately. + Z_FIXED prevents the use of dynamic Huffman codes, allowing for a simpler + decoder for special applications. + + deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_STREAM_ERROR if any parameter is invalid (such as an invalid + method), or Z_VERSION_ERROR if the zlib library version (zlib_version) is + incompatible with the version assumed by the caller (ZLIB_VERSION). msg is + set to null if there is no error message. deflateInit2 does not perform any + compression: this will be done by deflate(). */ ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm, @@ -540,38 +613,65 @@ ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm, uInt dictLength)); /* Initializes the compression dictionary from the given byte sequence - without producing any compressed output. This function must be called - immediately after deflateInit, deflateInit2 or deflateReset, before any - call of deflate. The compressor and decompressor must use exactly the same - dictionary (see inflateSetDictionary). + without producing any compressed output. When using the zlib format, this + function must be called immediately after deflateInit, deflateInit2 or + deflateReset, and before any call of deflate. When doing raw deflate, this + function must be called either before any call of deflate, or immediately + after the completion of a deflate block, i.e. after all input has been + consumed and all output has been delivered when using any of the flush + options Z_BLOCK, Z_PARTIAL_FLUSH, Z_SYNC_FLUSH, or Z_FULL_FLUSH. The + compressor and decompressor must use exactly the same dictionary (see + inflateSetDictionary). The dictionary should consist of strings (byte sequences) that are likely to be encountered later in the data to be compressed, with the most commonly - used strings preferably put towards the end of the dictionary. Using a + used strings preferably put towards the end of the dictionary. Using a dictionary is most useful when the data to be compressed is short and can be predicted with good accuracy; the data can then be compressed better than with the default empty dictionary. Depending on the size of the compression data structures selected by deflateInit or deflateInit2, a part of the dictionary may in effect be - discarded, for example if the dictionary is larger than the window size in - deflate or deflate2. Thus the strings most likely to be useful should be - put at the end of the dictionary, not at the front. In addition, the - current implementation of deflate will use at most the window size minus - 262 bytes of the provided dictionary. + discarded, for example if the dictionary is larger than the window size + provided in deflateInit or deflateInit2. Thus the strings most likely to be + useful should be put at the end of the dictionary, not at the front. In + addition, the current implementation of deflate will use at most the window + size minus 262 bytes of the provided dictionary. - Upon return of this function, strm->adler is set to the adler32 value + Upon return of this function, strm->adler is set to the Adler-32 value of the dictionary; the decompressor may later use this value to determine - which dictionary has been used by the compressor. (The adler32 value + which dictionary has been used by the compressor. (The Adler-32 value applies to the whole dictionary even if only a subset of the dictionary is actually used by the compressor.) If a raw deflate was requested, then the - adler32 value is not computed and strm->adler is not set. + Adler-32 value is not computed and strm->adler is not set. deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a - parameter is invalid (such as NULL dictionary) or the stream state is + parameter is invalid (e.g. dictionary being Z_NULL) or the stream state is inconsistent (for example if deflate has already been called for this stream - or if the compression method is bsort). deflateSetDictionary does not - perform any compression: this will be done by deflate(). + or if not at a block boundary for raw deflate). deflateSetDictionary does + not perform any compression: this will be done by deflate(). +*/ + +ZEXTERN int ZEXPORT deflateGetDictionary OF((z_streamp strm, + Bytef *dictionary, + uInt *dictLength)); +/* + Returns the sliding dictionary being maintained by deflate. dictLength is + set to the number of bytes in the dictionary, and that many bytes are copied + to dictionary. dictionary must have enough space, where 32768 bytes is + always enough. If deflateGetDictionary() is called with dictionary equal to + Z_NULL, then only the dictionary length is returned, and nothing is copied. + Similary, if dictLength is Z_NULL, then it is not set. + + deflateGetDictionary() may return a length less than the window size, even + when more than the window size in input has been provided. It may return up + to 258 bytes less in that case, due to how zlib's implementation of deflate + manages the sliding window and lookahead for matches, where matches can be + up to 258 bytes long. If the application needs the last window-size bytes of + input, then that would need to be saved by the application outside of zlib. + + deflateGetDictionary returns Z_OK on success, or Z_STREAM_ERROR if the + stream state is inconsistent. */ ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest, @@ -581,26 +681,26 @@ ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest, This function can be useful when several compression strategies will be tried, for example when there are several ways of pre-processing the input - data with a filter. The streams that will be discarded should then be freed + data with a filter. The streams that will be discarded should then be freed by calling deflateEnd. Note that deflateCopy duplicates the internal - compression state which can be quite large, so this strategy is slow and - can consume lots of memory. + compression state which can be quite large, so this strategy is slow and can + consume lots of memory. deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_STREAM_ERROR if the source stream state was inconsistent - (such as zalloc being NULL). msg is left unchanged in both source and + (such as zalloc being Z_NULL). msg is left unchanged in both source and destination. */ ZEXTERN int ZEXPORT deflateReset OF((z_streamp strm)); /* - This function is equivalent to deflateEnd followed by deflateInit, - but does not free and reallocate all the internal compression state. - The stream will keep the same compression level and any other attributes - that may have been set by deflateInit2. + This function is equivalent to deflateEnd followed by deflateInit, but + does not free and reallocate the internal compression state. The stream + will leave the compression level and any other attributes that may have been + set unchanged. - deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source - stream state was inconsistent (such as zalloc or state being NULL). + deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent (such as zalloc or state being Z_NULL). */ ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm, @@ -608,20 +708,36 @@ ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm, int strategy)); /* Dynamically update the compression level and compression strategy. The - interpretation of level and strategy is as in deflateInit2. This can be + interpretation of level and strategy is as in deflateInit2(). This can be used to switch between compression and straight copy of the input data, or - to switch to a different kind of input data requiring a different - strategy. If the compression level is changed, the input available so far - is compressed with the old level (and may be flushed); the new level will - take effect only at the next call of deflate(). - - Before the call of deflateParams, the stream state must be set as for - a call of deflate(), since the currently available input may have to - be compressed and flushed. In particular, strm->avail_out must be non-zero. - - deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source - stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR - if strm->avail_out was zero. + to switch to a different kind of input data requiring a different strategy. + If the compression approach (which is a function of the level) or the + strategy is changed, and if any input has been consumed in a previous + deflate() call, then the input available so far is compressed with the old + level and strategy using deflate(strm, Z_BLOCK). There are three approaches + for the compression levels 0, 1..3, and 4..9 respectively. The new level + and strategy will take effect at the next call of deflate(). + + If a deflate(strm, Z_BLOCK) is performed by deflateParams(), and it does + not have enough output space to complete, then the parameter change will not + take effect. In this case, deflateParams() can be called again with the + same parameters and more output space to try again. + + In order to assure a change in the parameters on the first try, the + deflate stream should be flushed using deflate() with Z_BLOCK or other flush + request until strm.avail_out is not zero, before calling deflateParams(). + Then no more input data should be provided before the deflateParams() call. + If this is done, the old level and strategy will be applied to the data + compressed before deflateParams(), and the new level and strategy will be + applied to the the data compressed after deflateParams(). + + deflateParams returns Z_OK on success, Z_STREAM_ERROR if the source stream + state was inconsistent or if a parameter was invalid, or Z_BUF_ERROR if + there was not enough output space to complete the compression of the + available input data before a change in the strategy or approach. Note that + in the case of a Z_BUF_ERROR, the parameters are not changed. A return + value of Z_BUF_ERROR is not fatal, in which case deflateParams() can be + retried with more output space. */ ZEXTERN int ZEXPORT deflateTune OF((z_streamp strm, @@ -645,31 +761,53 @@ ZEXTERN uLong ZEXPORT deflateBound OF((z_streamp strm, uLong sourceLen)); /* deflateBound() returns an upper bound on the compressed size after - deflation of sourceLen bytes. It must be called after deflateInit() - or deflateInit2(). This would be used to allocate an output buffer - for deflation in a single pass, and so would be called before deflate(). + deflation of sourceLen bytes. It must be called after deflateInit() or + deflateInit2(), and after deflateSetHeader(), if used. This would be used + to allocate an output buffer for deflation in a single pass, and so would be + called before deflate(). If that first deflate() call is provided the + sourceLen input bytes, an output buffer allocated to the size returned by + deflateBound(), and the flush value Z_FINISH, then deflate() is guaranteed + to return Z_STREAM_END. Note that it is possible for the compressed size to + be larger than the value returned by deflateBound() if flush options other + than Z_FINISH or Z_NO_FLUSH are used. */ +ZEXTERN int ZEXPORT deflatePending OF((z_streamp strm, + unsigned *pending, + int *bits)); +/* + deflatePending() returns the number of bytes and bits of output that have + been generated, but not yet provided in the available output. The bytes not + provided would be due to the available output space having being consumed. + The number of bits of output not provided are between 0 and 7, where they + await more bits to join them in order to fill out a full byte. If pending + or bits are Z_NULL, then those values are not set. + + deflatePending returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. + */ + ZEXTERN int ZEXPORT deflatePrime OF((z_streamp strm, int bits, int value)); /* deflatePrime() inserts bits in the deflate output stream. The intent - is that this function is used to start off the deflate output with the - bits leftover from a previous deflate stream when appending to it. As such, - this function can only be used for raw deflate, and must be used before the - first deflate() call after a deflateInit2() or deflateReset(). bits must be - less than or equal to 16, and that many of the least significant bits of - value will be inserted in the output. - - deflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source - stream state was inconsistent. + is that this function is used to start off the deflate output with the bits + leftover from a previous deflate stream when appending to it. As such, this + function can only be used for raw deflate, and must be used before the first + deflate() call after a deflateInit2() or deflateReset(). bits must be less + than or equal to 16, and that many of the least significant bits of value + will be inserted in the output. + + deflatePrime returns Z_OK if success, Z_BUF_ERROR if there was not enough + room in the internal buffer to insert the bits, or Z_STREAM_ERROR if the + source stream state was inconsistent. */ ZEXTERN int ZEXPORT deflateSetHeader OF((z_streamp strm, gz_headerp head)); /* - deflateSetHeader() provides gzip header information for when a gzip + deflateSetHeader() provides gzip header information for when a gzip stream is requested by deflateInit2(). deflateSetHeader() may be called after deflateInit2() or deflateReset() and before the first call of deflate(). The text, time, os, extra field, name, and comment information @@ -682,11 +820,11 @@ ZEXTERN int ZEXPORT deflateSetHeader OF((z_streamp strm, 1.3.x) do not support header crc's, and will report that it is a "multi-part gzip file" and give up. - If deflateSetHeader is not used, the default gzip header has text false, + If deflateSetHeader is not used, the default gzip header has text false, the time set to zero, and os set to 255, with no extra, name, or comment fields. The gzip header is returned to the default state by deflateReset(). - deflateSetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source + deflateSetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source stream state was inconsistent. */ @@ -694,43 +832,53 @@ ZEXTERN int ZEXPORT deflateSetHeader OF((z_streamp strm, ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm, int windowBits)); - This is another version of inflateInit with an extra parameter. The + This is another version of inflateInit with an extra parameter. The fields next_in, avail_in, zalloc, zfree and opaque must be initialized before by the caller. The windowBits parameter is the base two logarithm of the maximum window size (the size of the history buffer). It should be in the range 8..15 for - this version of the library. The default value is 15 if inflateInit is used - instead. windowBits must be greater than or equal to the windowBits value + this version of the library. The default value is 15 if inflateInit is used + instead. windowBits must be greater than or equal to the windowBits value provided to deflateInit2() while compressing, or it must be equal to 15 if - deflateInit2() was not used. If a compressed stream with a larger window + deflateInit2() was not used. If a compressed stream with a larger window size is given as input, inflate() will return with the error code Z_DATA_ERROR instead of trying to allocate a larger window. - windowBits can also be -8..-15 for raw inflate. In this case, -windowBits - determines the window size. inflate() will then process raw deflate data, + windowBits can also be zero to request that inflate use the window size in + the zlib header of the compressed stream. + + windowBits can also be -8..-15 for raw inflate. In this case, -windowBits + determines the window size. inflate() will then process raw deflate data, not looking for a zlib or gzip header, not generating a check value, and not - looking for any check values for comparison at the end of the stream. This + looking for any check values for comparison at the end of the stream. This is for use with other formats that use the deflate compressed data format - such as zip. Those formats provide their own check values. If a custom + such as zip. Those formats provide their own check values. If a custom format is developed using the raw deflate format for compressed data, it is - recommended that a check value such as an adler32 or a crc32 be applied to + recommended that a check value such as an Adler-32 or a CRC-32 be applied to the uncompressed data as is done in the zlib, gzip, and zip formats. For - most applications, the zlib format should be used as is. Note that comments + most applications, the zlib format should be used as is. Note that comments above on the use in deflateInit2() applies to the magnitude of windowBits. - windowBits can also be greater than 15 for optional gzip decoding. Add + windowBits can also be greater than 15 for optional gzip decoding. Add 32 to windowBits to enable zlib and gzip decoding with automatic header detection, or add 16 to decode only the gzip format (the zlib format will - return a Z_DATA_ERROR). If a gzip stream is being decoded, strm->adler is - a crc32 instead of an adler32. + return a Z_DATA_ERROR). If a gzip stream is being decoded, strm->adler is a + CRC-32 instead of an Adler-32. Unlike the gunzip utility and gzread() (see + below), inflate() will not automatically decode concatenated gzip streams. + inflate() will return Z_STREAM_END at the end of the gzip stream. The state + would need to be reset to continue decoding a subsequent gzip stream. inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough - memory, Z_STREAM_ERROR if a parameter is invalid (such as a null strm). msg - is set to null if there is no error message. inflateInit2 does not perform - any decompression apart from reading the zlib header if present: this will - be done by inflate(). (So next_in and avail_in may be modified, but next_out - and avail_out are unchanged.) + memory, Z_VERSION_ERROR if the zlib library version is incompatible with the + version assumed by the caller, or Z_STREAM_ERROR if the parameters are + invalid, such as a null pointer to the structure. msg is set to null if + there is no error message. inflateInit2 does not perform any decompression + apart from possibly reading the zlib header if present: actual decompression + will be done by inflate(). (So next_in and avail_in may be modified, but + next_out and avail_out are unused and unchanged.) The current implementation + of inflateInit2() does not process any header information -- that is + deferred until inflate() is called. */ ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm, @@ -738,36 +886,56 @@ ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm, uInt dictLength)); /* Initializes the decompression dictionary from the given uncompressed byte - sequence. This function must be called immediately after a call of inflate, - if that call returned Z_NEED_DICT. The dictionary chosen by the compressor - can be determined from the adler32 value returned by that call of inflate. + sequence. This function must be called immediately after a call of inflate, + if that call returned Z_NEED_DICT. The dictionary chosen by the compressor + can be determined from the Adler-32 value returned by that call of inflate. The compressor and decompressor must use exactly the same dictionary (see - deflateSetDictionary). For raw inflate, this function can be called - immediately after inflateInit2() or inflateReset() and before any call of - inflate() to set the dictionary. The application must insure that the - dictionary that was used for compression is provided. + deflateSetDictionary). For raw inflate, this function can be called at any + time to set the dictionary. If the provided dictionary is smaller than the + window and there is already data in the window, then the provided dictionary + will amend what's there. The application must insure that the dictionary + that was used for compression is provided. inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a - parameter is invalid (such as NULL dictionary) or the stream state is + parameter is invalid (e.g. dictionary being Z_NULL) or the stream state is inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the - expected one (incorrect adler32 value). inflateSetDictionary does not + expected one (incorrect Adler-32 value). inflateSetDictionary does not perform any decompression: this will be done by subsequent calls of inflate(). */ -ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm)); +ZEXTERN int ZEXPORT inflateGetDictionary OF((z_streamp strm, + Bytef *dictionary, + uInt *dictLength)); /* - Skips invalid compressed data until a full flush point (see above the - description of deflate with Z_FULL_FLUSH) can be found, or until all - available input is skipped. No output is provided. + Returns the sliding dictionary being maintained by inflate. dictLength is + set to the number of bytes in the dictionary, and that many bytes are copied + to dictionary. dictionary must have enough space, where 32768 bytes is + always enough. If inflateGetDictionary() is called with dictionary equal to + Z_NULL, then only the dictionary length is returned, and nothing is copied. + Similary, if dictLength is Z_NULL, then it is not set. + + inflateGetDictionary returns Z_OK on success, or Z_STREAM_ERROR if the + stream state is inconsistent. +*/ - inflateSync returns Z_OK if a full flush point has been found, Z_BUF_ERROR - if no more input was provided, Z_DATA_ERROR if no flush point has been found, - or Z_STREAM_ERROR if the stream structure was inconsistent. In the success - case, the application may save the current current value of total_in which - indicates where valid compressed data was found. In the error case, the - application may repeatedly call inflateSync, providing more input each time, - until success or end of the input data. +ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm)); +/* + Skips invalid compressed data until a possible full flush point (see above + for the description of deflate with Z_FULL_FLUSH) can be found, or until all + available input is skipped. No output is provided. + + inflateSync searches for a 00 00 FF FF pattern in the compressed data. + All full flush points have this pattern, but not all occurrences of this + pattern are full flush points. + + inflateSync returns Z_OK if a possible full flush point has been found, + Z_BUF_ERROR if no more input was provided, Z_DATA_ERROR if no flush point + has been found, or Z_STREAM_ERROR if the stream structure was inconsistent. + In the success case, the application may save the current current value of + total_in which indicates where valid compressed data was found. In the + error case, the application may repeatedly call inflateSync, providing more + input each time, until success or end of the input data. */ ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest, @@ -782,18 +950,32 @@ ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest, inflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_STREAM_ERROR if the source stream state was inconsistent - (such as zalloc being NULL). msg is left unchanged in both source and + (such as zalloc being Z_NULL). msg is left unchanged in both source and destination. */ ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm)); /* This function is equivalent to inflateEnd followed by inflateInit, - but does not free and reallocate all the internal decompression state. - The stream will keep attributes that may have been set by inflateInit2. + but does not free and reallocate the internal decompression state. The + stream will keep attributes that may have been set by inflateInit2. + + inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent (such as zalloc or state being Z_NULL). +*/ - inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source - stream state was inconsistent (such as zalloc or state being NULL). +ZEXTERN int ZEXPORT inflateReset2 OF((z_streamp strm, + int windowBits)); +/* + This function is the same as inflateReset, but it also permits changing + the wrap and window size requests. The windowBits parameter is interpreted + the same as it is for inflateInit2. If the window size is changed, then the + memory allocated for the window is freed, and the window will be reallocated + by inflate() if needed. + + inflateReset2 returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent (such as zalloc or state being Z_NULL), or if + the windowBits parameter is invalid. */ ZEXTERN int ZEXPORT inflatePrime OF((z_streamp strm, @@ -801,54 +983,87 @@ ZEXTERN int ZEXPORT inflatePrime OF((z_streamp strm, int value)); /* This function inserts bits in the inflate input stream. The intent is - that this function is used to start inflating at a bit position in the - middle of a byte. The provided bits will be used before any bytes are used - from next_in. This function should only be used with raw inflate, and - should be used before the first inflate() call after inflateInit2() or - inflateReset(). bits must be less than or equal to 16, and that many of the - least significant bits of value will be inserted in the input. - - inflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source + that this function is used to start inflating at a bit position in the + middle of a byte. The provided bits will be used before any bytes are used + from next_in. This function should only be used with raw inflate, and + should be used before the first inflate() call after inflateInit2() or + inflateReset(). bits must be less than or equal to 16, and that many of the + least significant bits of value will be inserted in the input. + + If bits is negative, then the input stream bit buffer is emptied. Then + inflatePrime() can be called again to put bits in the buffer. This is used + to clear out bits leftover after feeding inflate a block description prior + to feeding inflate codes. + + inflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source stream state was inconsistent. */ +ZEXTERN long ZEXPORT inflateMark OF((z_streamp strm)); +/* + This function returns two values, one in the lower 16 bits of the return + value, and the other in the remaining upper bits, obtained by shifting the + return value down 16 bits. If the upper value is -1 and the lower value is + zero, then inflate() is currently decoding information outside of a block. + If the upper value is -1 and the lower value is non-zero, then inflate is in + the middle of a stored block, with the lower value equaling the number of + bytes from the input remaining to copy. If the upper value is not -1, then + it is the number of bits back from the current bit position in the input of + the code (literal or length/distance pair) currently being processed. In + that case the lower value is the number of bytes already emitted for that + code. + + A code is being processed if inflate is waiting for more input to complete + decoding of the code, or if it has completed decoding but is waiting for + more output space to write the literal or match data. + + inflateMark() is used to mark locations in the input data for random + access, which may be at bit positions, and to note those cases where the + output of a code may span boundaries of random access blocks. The current + location in the input stream can be determined from avail_in and data_type + as noted in the description for the Z_BLOCK flush parameter for inflate. + + inflateMark returns the value noted above, or -65536 if the provided + source stream state was inconsistent. +*/ + ZEXTERN int ZEXPORT inflateGetHeader OF((z_streamp strm, gz_headerp head)); /* - inflateGetHeader() requests that gzip header information be stored in the + inflateGetHeader() requests that gzip header information be stored in the provided gz_header structure. inflateGetHeader() may be called after inflateInit2() or inflateReset(), and before the first call of inflate(). As inflate() processes the gzip stream, head->done is zero until the header is completed, at which time head->done is set to one. If a zlib stream is being decoded, then head->done is set to -1 to indicate that there will be - no gzip header information forthcoming. Note that Z_BLOCK can be used to - force inflate() to return immediately after header processing is complete - and before any actual data is decompressed. + no gzip header information forthcoming. Note that Z_BLOCK or Z_TREES can be + used to force inflate() to return immediately after header processing is + complete and before any actual data is decompressed. - The text, time, xflags, and os fields are filled in with the gzip header + The text, time, xflags, and os fields are filled in with the gzip header contents. hcrc is set to true if there is a header CRC. (The header CRC - was valid if done is set to one.) If extra is not Z_NULL, then extra_max + was valid if done is set to one.) If extra is not Z_NULL, then extra_max contains the maximum number of bytes to write to extra. Once done is true, extra_len contains the actual extra field length, and extra contains the extra field, or that field truncated if extra_max is less than extra_len. If name is not Z_NULL, then up to name_max characters are written there, terminated with a zero unless the length is greater than name_max. If comment is not Z_NULL, then up to comm_max characters are written there, - terminated with a zero unless the length is greater than comm_max. When - any of extra, name, or comment are not Z_NULL and the respective field is - not present in the header, then that field is set to Z_NULL to signal its + terminated with a zero unless the length is greater than comm_max. When any + of extra, name, or comment are not Z_NULL and the respective field is not + present in the header, then that field is set to Z_NULL to signal its absence. This allows the use of deflateSetHeader() with the returned structure to duplicate the header. However if those fields are set to allocated memory, then the application will need to save those pointers elsewhere so that they can be eventually freed. - If inflateGetHeader is not used, then the header information is simply + If inflateGetHeader is not used, then the header information is simply discarded. The header is always checked for validity, including the header CRC if present. inflateReset() will reset the process to discard the header information. The application would need to call inflateGetHeader() again to retrieve the header from the next gzip stream. - inflateGetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source + inflateGetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source stream state was inconsistent. */ @@ -869,12 +1084,13 @@ ZEXTERN int ZEXPORT inflateBackInit OF((z_streamp strm, int windowBits, See inflateBack() for the usage of these routines. inflateBackInit will return Z_OK on success, Z_STREAM_ERROR if any of - the paramaters are invalid, Z_MEM_ERROR if the internal state could not - be allocated, or Z_VERSION_ERROR if the version of the library does not - match the version of the header file. + the parameters are invalid, Z_MEM_ERROR if the internal state could not be + allocated, or Z_VERSION_ERROR if the version of the library does not match + the version of the header file. */ -typedef unsigned (*in_func) OF((void FAR *, unsigned char FAR * FAR *)); +typedef unsigned (*in_func) OF((void FAR *, + z_const unsigned char FAR * FAR *)); typedef int (*out_func) OF((void FAR *, unsigned char FAR *, unsigned)); ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm, @@ -882,25 +1098,26 @@ ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm, out_func out, void FAR *out_desc)); /* inflateBack() does a raw inflate with a single call using a call-back - interface for input and output. This is more efficient than inflate() for - file i/o applications in that it avoids copying between the output and the - sliding window by simply making the window itself the output buffer. This - function trusts the application to not change the output buffer passed by - the output function, at least until inflateBack() returns. + interface for input and output. This is potentially more efficient than + inflate() for file i/o applications, in that it avoids copying between the + output and the sliding window by simply making the window itself the output + buffer. inflate() can be faster on modern CPUs when used with large + buffers. inflateBack() trusts the application to not change the output + buffer passed by the output function, at least until inflateBack() returns. inflateBackInit() must be called first to allocate the internal state and to initialize the state with the user-provided window buffer. inflateBack() may then be used multiple times to inflate a complete, raw - deflate stream with each call. inflateBackEnd() is then called to free - the allocated state. + deflate stream with each call. inflateBackEnd() is then called to free the + allocated state. A raw deflate stream is one with no zlib or gzip header or trailer. This routine would normally be used in a utility that reads zip or gzip files and writes out uncompressed files. The utility would decode the - header and process the trailer on its own, hence this routine expects - only the raw deflate stream to decompress. This is different from the - normal behavior of inflate(), which expects either a zlib or gzip header and - trailer around the deflate stream. + header and process the trailer on its own, hence this routine expects only + the raw deflate stream to decompress. This is different from the default + behavior of inflate(), which expects a zlib header and trailer around the + deflate stream. inflateBack() uses two subroutines supplied by the caller that are then called by inflateBack() for input and output. inflateBack() calls those @@ -909,12 +1126,12 @@ ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm, parameters and return types are defined above in the in_func and out_func typedefs. inflateBack() will call in(in_desc, &buf) which should return the number of bytes of provided input, and a pointer to that input in buf. If - there is no input available, in() must return zero--buf is ignored in that - case--and inflateBack() will return a buffer error. inflateBack() will call - out(out_desc, buf, len) to write the uncompressed data buf[0..len-1]. out() - should return zero on success, or non-zero on failure. If out() returns - non-zero, inflateBack() will return with an error. Neither in() nor out() - are permitted to change the contents of the window provided to + there is no input available, in() must return zero -- buf is ignored in that + case -- and inflateBack() will return a buffer error. inflateBack() will + call out(out_desc, buf, len) to write the uncompressed data buf[0..len-1]. + out() should return zero on success, or non-zero on failure. If out() + returns non-zero, inflateBack() will return with an error. Neither in() nor + out() are permitted to change the contents of the window provided to inflateBackInit(), which is also the buffer that out() uses to write from. The length written by out() will be at most the window size. Any non-zero amount of input may be provided by in(). @@ -925,7 +1142,7 @@ ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm, calling inflateBack(). If strm->next_in is Z_NULL, then in() will be called immediately for input. If strm->next_in is not Z_NULL, then strm->avail_in must also be initialized, and then if strm->avail_in is not zero, input will - initially be taken from strm->next_in[0 .. strm->avail_in - 1]. + initially be taken from strm->next_in[0 .. strm->avail_in - 1]. The in_desc and out_desc parameters of inflateBack() is passed as the first parameter of in() and out() respectively when they are called. These @@ -935,15 +1152,15 @@ ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm, On return, inflateBack() will set strm->next_in and strm->avail_in to pass back any unused input that was provided by the last in() call. The return values of inflateBack() can be Z_STREAM_END on success, Z_BUF_ERROR - if in() or out() returned an error, Z_DATA_ERROR if there was a format - error in the deflate stream (in which case strm->msg is set to indicate the - nature of the error), or Z_STREAM_ERROR if the stream was not properly - initialized. In the case of Z_BUF_ERROR, an input or output error can be - distinguished using strm->next_in which will be Z_NULL only if in() returned - an error. If strm->next is not Z_NULL, then the Z_BUF_ERROR was due to - out() returning non-zero. (in() will always be called before out(), so - strm->next_in is assured to be defined if out() returns non-zero.) Note - that inflateBack() cannot return Z_OK. + if in() or out() returned an error, Z_DATA_ERROR if there was a format error + in the deflate stream (in which case strm->msg is set to indicate the nature + of the error), or Z_STREAM_ERROR if the stream was not properly initialized. + In the case of Z_BUF_ERROR, an input or output error can be distinguished + using strm->next_in which will be Z_NULL only if in() returned an error. If + strm->next_in is not Z_NULL, then the Z_BUF_ERROR was due to out() returning + non-zero. (in() will always be called before out(), so strm->next_in is + assured to be defined if out() returns non-zero.) Note that inflateBack() + cannot return Z_OK. */ ZEXTERN int ZEXPORT inflateBackEnd OF((z_streamp strm)); @@ -964,7 +1181,7 @@ ZEXTERN uLong ZEXPORT zlibCompileFlags OF((void)); 7.6: size of z_off_t Compiler, assembler, and debug options: - 8: DEBUG + 8: ZLIB_DEBUG 9: ASMV or ASMINF -- use ASM code 10: ZLIB_WINAPI -- exported functions use the WINAPI calling convention 11: 0 (reserved) @@ -995,27 +1212,28 @@ ZEXTERN uLong ZEXPORT zlibCompileFlags OF((void)); 27-31: 0 (reserved) */ +#ifndef Z_SOLO /* utility functions */ /* - The following utility functions are implemented on top of the - basic stream-oriented functions. To simplify the interface, some - default options are assumed (compression level and memory usage, - standard memory allocation functions). The source code of these - utility functions can easily be modified if you need special options. + The following utility functions are implemented on top of the basic + stream-oriented functions. To simplify the interface, some default options + are assumed (compression level and memory usage, standard memory allocation + functions). The source code of these utility functions can be modified if + you need special options. */ ZEXTERN int ZEXPORT compress OF((Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen)); /* Compresses the source buffer into the destination buffer. sourceLen is - the byte length of the source buffer. Upon entry, destLen is the total - size of the destination buffer, which must be at least the value returned - by compressBound(sourceLen). Upon exit, destLen is the actual size of the - compressed buffer. - This function can be used to compress a whole file at once if the - input file is mmap'ed. + the byte length of the source buffer. Upon entry, destLen is the total size + of the destination buffer, which must be at least the value returned by + compressBound(sourceLen). Upon exit, destLen is the actual size of the + compressed data. compress() is equivalent to compress2() with a level + parameter of Z_DEFAULT_COMPRESSION. + compress returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_BUF_ERROR if there was not enough room in the output buffer. @@ -1025,12 +1243,12 @@ ZEXTERN int ZEXPORT compress2 OF((Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen, int level)); /* - Compresses the source buffer into the destination buffer. The level + Compresses the source buffer into the destination buffer. The level parameter has the same meaning as in deflateInit. sourceLen is the byte - length of the source buffer. Upon entry, destLen is the total size of the + length of the source buffer. Upon entry, destLen is the total size of the destination buffer, which must be at least the value returned by - compressBound(sourceLen). Upon exit, destLen is the actual size of the - compressed buffer. + compressBound(sourceLen). Upon exit, destLen is the actual size of the + compressed data. compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_BUF_ERROR if there was not enough room in the output buffer, @@ -1040,159 +1258,306 @@ ZEXTERN int ZEXPORT compress2 OF((Bytef *dest, uLongf *destLen, ZEXTERN uLong ZEXPORT compressBound OF((uLong sourceLen)); /* compressBound() returns an upper bound on the compressed size after - compress() or compress2() on sourceLen bytes. It would be used before - a compress() or compress2() call to allocate the destination buffer. + compress() or compress2() on sourceLen bytes. It would be used before a + compress() or compress2() call to allocate the destination buffer. */ ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen)); /* Decompresses the source buffer into the destination buffer. sourceLen is - the byte length of the source buffer. Upon entry, destLen is the total - size of the destination buffer, which must be large enough to hold the - entire uncompressed data. (The size of the uncompressed data must have - been saved previously by the compressor and transmitted to the decompressor - by some mechanism outside the scope of this compression library.) - Upon exit, destLen is the actual size of the compressed buffer. - This function can be used to decompress a whole file at once if the - input file is mmap'ed. + the byte length of the source buffer. Upon entry, destLen is the total size + of the destination buffer, which must be large enough to hold the entire + uncompressed data. (The size of the uncompressed data must have been saved + previously by the compressor and transmitted to the decompressor by some + mechanism outside the scope of this compression library.) Upon exit, destLen + is the actual size of the uncompressed data. uncompress returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_BUF_ERROR if there was not enough room in the output - buffer, or Z_DATA_ERROR if the input data was corrupted or incomplete. + buffer, or Z_DATA_ERROR if the input data was corrupted or incomplete. In + the case where there is not enough room, uncompress() will fill the output + buffer with the uncompressed data up to that point. */ +ZEXTERN int ZEXPORT uncompress2 OF((Bytef *dest, uLongf *destLen, + const Bytef *source, uLong *sourceLen)); +/* + Same as uncompress, except that sourceLen is a pointer, where the + length of the source is *sourceLen. On return, *sourceLen is the number of + source bytes consumed. +*/ + + /* gzip file access functions */ + +/* + This library supports reading and writing files in gzip (.gz) format with + an interface similar to that of stdio, using the functions that start with + "gz". The gzip format is different from the zlib format. gzip is a gzip + wrapper, documented in RFC 1952, wrapped around a deflate stream. +*/ -typedef voidp gzFile; +typedef struct gzFile_s *gzFile; /* semi-opaque gzip file descriptor */ -ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode)); /* - Opens a gzip (.gz) file for reading or writing. The mode parameter - is as in fopen ("rb" or "wb") but can also include a compression level - ("wb9") or a strategy: 'f' for filtered data as in "wb6f", 'h' for - Huffman only compression as in "wb1h", or 'R' for run-length encoding - as in "wb1R". (See the description of deflateInit2 for more information - about the strategy parameter.) +ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode)); + + Opens a gzip (.gz) file for reading or writing. The mode parameter is as + in fopen ("rb" or "wb") but can also include a compression level ("wb9") or + a strategy: 'f' for filtered data as in "wb6f", 'h' for Huffman-only + compression as in "wb1h", 'R' for run-length encoding as in "wb1R", or 'F' + for fixed code compression as in "wb9F". (See the description of + deflateInit2 for more information about the strategy parameter.) 'T' will + request transparent writing or appending with no compression and not using + the gzip format. + + "a" can be used instead of "w" to request that the gzip stream that will + be written be appended to the file. "+" will result in an error, since + reading and writing to the same gzip file is not supported. The addition of + "x" when writing will create the file exclusively, which fails if the file + already exists. On systems that support it, the addition of "e" when + reading or writing will set the flag to close the file on an execve() call. + + These functions, as well as gzip, will read and decode a sequence of gzip + streams in a file. The append function of gzopen() can be used to create + such a file. (Also see gzflush() for another way to do this.) When + appending, gzopen does not test whether the file begins with a gzip stream, + nor does it look for the end of the gzip streams to begin appending. gzopen + will simply append a gzip stream to the existing file. gzopen can be used to read a file which is not in gzip format; in this - case gzread will directly read from the file without decompression. + case gzread will directly read from the file without decompression. When + reading, this will be detected automatically by looking for the magic two- + byte gzip header. + + gzopen returns NULL if the file could not be opened, if there was + insufficient memory to allocate the gzFile state, or if an invalid mode was + specified (an 'r', 'w', or 'a' was not provided, or '+' was provided). + errno can be checked to determine if the reason gzopen failed was that the + file could not be opened. +*/ - gzopen returns NULL if the file could not be opened or if there was - insufficient memory to allocate the (de)compression state; errno - can be checked to distinguish the two cases (if errno is zero, the - zlib error is Z_MEM_ERROR). */ +ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode)); +/* + gzdopen associates a gzFile with the file descriptor fd. File descriptors + are obtained from calls like open, dup, creat, pipe or fileno (if the file + has been previously opened with fopen). The mode parameter is as in gzopen. + + The next call of gzclose on the returned gzFile will also close the file + descriptor fd, just like fclose(fdopen(fd, mode)) closes the file descriptor + fd. If you want to keep fd open, use fd = dup(fd_keep); gz = gzdopen(fd, + mode);. The duplicated descriptor should be saved to avoid a leak, since + gzdopen does not close fd if it fails. If you are using fileno() to get the + file descriptor from a FILE *, then you will have to use dup() to avoid + double-close()ing the file descriptor. Both gzclose() and fclose() will + close the associated file descriptor, so they need to have different file + descriptors. + + gzdopen returns NULL if there was insufficient memory to allocate the + gzFile state, if an invalid mode was specified (an 'r', 'w', or 'a' was not + provided, or '+' was provided), or if fd is -1. The file descriptor is not + used until the next gz* read, write, seek, or close operation, so gzdopen + will not detect if fd is invalid (unless fd is -1). +*/ -ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode)); +ZEXTERN int ZEXPORT gzbuffer OF((gzFile file, unsigned size)); /* - gzdopen() associates a gzFile with the file descriptor fd. File - descriptors are obtained from calls like open, dup, creat, pipe or - fileno (in the file has been previously opened with fopen). - The mode parameter is as in gzopen. - The next call of gzclose on the returned gzFile will also close the - file descriptor fd, just like fclose(fdopen(fd), mode) closes the file - descriptor fd. If you want to keep fd open, use gzdopen(dup(fd), mode). - gzdopen returns NULL if there was insufficient memory to allocate - the (de)compression state. + Set the internal buffer size used by this library's functions. The + default buffer size is 8192 bytes. This function must be called after + gzopen() or gzdopen(), and before any other calls that read or write the + file. The buffer memory allocation is always deferred to the first read or + write. Three times that size in buffer space is allocated. A larger buffer + size of, for example, 64K or 128K bytes will noticeably increase the speed + of decompression (reading). + + The new buffer size also affects the maximum length for gzprintf(). + + gzbuffer() returns 0 on success, or -1 on failure, such as being called + too late. */ ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy)); /* - Dynamically update the compression level or strategy. See the description - of deflateInit2 for the meaning of these parameters. - gzsetparams returns Z_OK if success, or Z_STREAM_ERROR if the file was not - opened for writing. + Dynamically update the compression level or strategy. See the description + of deflateInit2 for the meaning of these parameters. Previously provided + data is flushed before the parameter change. + + gzsetparams returns Z_OK if success, Z_STREAM_ERROR if the file was not + opened for writing, Z_ERRNO if there is an error writing the flushed data, + or Z_MEM_ERROR if there is a memory allocation error. +*/ + +ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len)); +/* + Reads the given number of uncompressed bytes from the compressed file. If + the input file is not in gzip format, gzread copies the given number of + bytes into the buffer directly from the file. + + After reaching the end of a gzip stream in the input, gzread will continue + to read, looking for another gzip stream. Any number of gzip streams may be + concatenated in the input file, and will all be decompressed by gzread(). + If something other than a gzip stream is encountered after a gzip stream, + that remaining trailing garbage is ignored (and no error is returned). + + gzread can be used to read a gzip file that is being concurrently written. + Upon reaching the end of the input, gzread will return with the available + data. If the error code returned by gzerror is Z_OK or Z_BUF_ERROR, then + gzclearerr can be used to clear the end of file indicator in order to permit + gzread to be tried again. Z_OK indicates that a gzip stream was completed + on the last gzread. Z_BUF_ERROR indicates that the input file ended in the + middle of a gzip stream. Note that gzread does not return -1 in the event + of an incomplete gzip stream. This error is deferred until gzclose(), which + will return Z_BUF_ERROR if the last gzread ended in the middle of a gzip + stream. Alternatively, gzerror can be used before gzclose to detect this + case. + + gzread returns the number of uncompressed bytes actually read, less than + len for end of file, or -1 for error. If len is too large to fit in an int, + then nothing is read, -1 is returned, and the error state is set to + Z_STREAM_ERROR. */ -ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len)); +ZEXTERN z_size_t ZEXPORT gzfread OF((voidp buf, z_size_t size, z_size_t nitems, + gzFile file)); /* - Reads the given number of uncompressed bytes from the compressed file. - If the input file was not in gzip format, gzread copies the given number - of bytes into the buffer. - gzread returns the number of uncompressed bytes actually read (0 for - end of file, -1 for error). */ + Read up to nitems items of size size from file to buf, otherwise operating + as gzread() does. This duplicates the interface of stdio's fread(), with + size_t request and return types. If the library defines size_t, then + z_size_t is identical to size_t. If not, then z_size_t is an unsigned + integer type that can contain a pointer. + + gzfread() returns the number of full items read of size size, or zero if + the end of the file was reached and a full item could not be read, or if + there was an error. gzerror() must be consulted if zero is returned in + order to determine if there was an error. If the multiplication of size and + nitems overflows, i.e. the product does not fit in a z_size_t, then nothing + is read, zero is returned, and the error state is set to Z_STREAM_ERROR. + + In the event that the end of file is reached and only a partial item is + available at the end, i.e. the remaining uncompressed data length is not a + multiple of size, then the final partial item is nevetheless read into buf + and the end-of-file flag is set. The length of the partial item read is not + provided, but could be inferred from the result of gztell(). This behavior + is the same as the behavior of fread() implementations in common libraries, + but it prevents the direct use of gzfread() to read a concurrently written + file, reseting and retrying on end-of-file, when size is not 1. +*/ -ZEXTERN int ZEXPORT gzwrite OF((gzFile file, - voidpc buf, unsigned len)); +ZEXTERN int ZEXPORT gzwrite OF((gzFile file, + voidpc buf, unsigned len)); /* Writes the given number of uncompressed bytes into the compressed file. - gzwrite returns the number of uncompressed bytes actually written - (0 in case of error). + gzwrite returns the number of uncompressed bytes written or 0 in case of + error. +*/ + +ZEXTERN z_size_t ZEXPORT gzfwrite OF((voidpc buf, z_size_t size, + z_size_t nitems, gzFile file)); +/* + gzfwrite() writes nitems items of size size from buf to file, duplicating + the interface of stdio's fwrite(), with size_t request and return types. If + the library defines size_t, then z_size_t is identical to size_t. If not, + then z_size_t is an unsigned integer type that can contain a pointer. + + gzfwrite() returns the number of full items written of size size, or zero + if there was an error. If the multiplication of size and nitems overflows, + i.e. the product does not fit in a z_size_t, then nothing is written, zero + is returned, and the error state is set to Z_STREAM_ERROR. */ -ZEXTERN int ZEXPORTVA gzprintf OF((gzFile file, const char *format, ...)); +ZEXTERN int ZEXPORTVA gzprintf Z_ARG((gzFile file, const char *format, ...)); /* - Converts, formats, and writes the args to the compressed file under - control of the format string, as in fprintf. gzprintf returns the number of - uncompressed bytes actually written (0 in case of error). The number of - uncompressed bytes written is limited to 4095. The caller should assure that - this limit is not exceeded. If it is exceeded, then gzprintf() will return - return an error (0) with nothing written. In this case, there may also be a + Converts, formats, and writes the arguments to the compressed file under + control of the format string, as in fprintf. gzprintf returns the number of + uncompressed bytes actually written, or a negative zlib error code in case + of error. The number of uncompressed bytes written is limited to 8191, or + one less than the buffer size given to gzbuffer(). The caller should assure + that this limit is not exceeded. If it is exceeded, then gzprintf() will + return an error (0) with nothing written. In this case, there may also be a buffer overflow with unpredictable consequences, which is possible only if zlib was compiled with the insecure functions sprintf() or vsprintf() because the secure snprintf() or vsnprintf() functions were not available. + This can be determined using zlibCompileFlags(). */ ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s)); /* - Writes the given null-terminated string to the compressed file, excluding + Writes the given null-terminated string to the compressed file, excluding the terminating null character. - gzputs returns the number of characters written, or -1 in case of error. + + gzputs returns the number of characters written, or -1 in case of error. */ ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len)); /* - Reads bytes from the compressed file until len-1 characters are read, or - a newline character is read and transferred to buf, or an end-of-file - condition is encountered. The string is then terminated with a null - character. - gzgets returns buf, or Z_NULL in case of error. + Reads bytes from the compressed file until len-1 characters are read, or a + newline character is read and transferred to buf, or an end-of-file + condition is encountered. If any characters are read or if len == 1, the + string is terminated with a null character. If no characters are read due + to an end-of-file or len < 1, then the buffer is left untouched. + + gzgets returns buf which is a null-terminated string, or it returns NULL + for end-of-file or in case of error. If there was an error, the contents at + buf are indeterminate. */ -ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c)); +ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c)); /* - Writes c, converted to an unsigned char, into the compressed file. - gzputc returns the value that was written, or -1 in case of error. + Writes c, converted to an unsigned char, into the compressed file. gzputc + returns the value that was written, or -1 in case of error. */ -ZEXTERN int ZEXPORT gzgetc OF((gzFile file)); +ZEXTERN int ZEXPORT gzgetc OF((gzFile file)); /* - Reads one byte from the compressed file. gzgetc returns this byte - or -1 in case of end of file or error. + Reads one byte from the compressed file. gzgetc returns this byte or -1 + in case of end of file or error. This is implemented as a macro for speed. + As such, it does not do all of the checking the other functions do. I.e. + it does not check to see if file is NULL, nor whether the structure file + points to has been clobbered or not. */ -ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file)); +ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file)); /* - Push one character back onto the stream to be read again later. - Only one character of push-back is allowed. gzungetc() returns the - character pushed, or -1 on failure. gzungetc() will fail if a - character has been pushed but not read yet, or if c is -1. The pushed - character will be discarded if the stream is repositioned with gzseek() - or gzrewind(). + Push one character back onto the stream to be read as the first character + on the next read. At least one character of push-back is allowed. + gzungetc() returns the character pushed, or -1 on failure. gzungetc() will + fail if c is -1, and may fail if a character has been pushed but not read + yet. If gzungetc is used immediately after gzopen or gzdopen, at least the + output buffer size of pushed characters is allowed. (See gzbuffer above.) + The pushed character will be discarded if the stream is repositioned with + gzseek() or gzrewind(). */ -ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush)); +ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush)); /* - Flushes all pending output into the compressed file. The parameter - flush is as in the deflate() function. The return value is the zlib - error number (see function gzerror below). gzflush returns Z_OK if - the flush parameter is Z_FINISH and all output could be flushed. - gzflush should be called only when strictly necessary because it can - degrade compression. + Flushes all pending output into the compressed file. The parameter flush + is as in the deflate() function. The return value is the zlib error number + (see function gzerror below). gzflush is only permitted when writing. + + If the flush parameter is Z_FINISH, the remaining data is written and the + gzip stream is completed in the output. If gzwrite() is called again, a new + gzip stream will be started in the output. gzread() is able to read such + concatenated gzip streams. + + gzflush should be called only when strictly necessary because it will + degrade compression if called too often. */ -ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file, - z_off_t offset, int whence)); /* - Sets the starting position for the next gzread or gzwrite on the - given compressed file. The offset represents a number of bytes in the - uncompressed data stream. The whence parameter is defined as in lseek(2); +ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file, + z_off_t offset, int whence)); + + Sets the starting position for the next gzread or gzwrite on the given + compressed file. The offset represents a number of bytes in the + uncompressed data stream. The whence parameter is defined as in lseek(2); the value SEEK_END is not supported. + If the file is opened for reading, this function is emulated but can be - extremely slow. If the file is opened for writing, only forward seeks are + extremely slow. If the file is opened for writing, only forward seeks are supported; gzseek then compresses a sequence of zeroes up to the new starting position. - gzseek returns the resulting offset location as measured in bytes from + gzseek returns the resulting offset location as measured in bytes from the beginning of the uncompressed stream, or -1 in case of error, in particular if the file is opened for writing and the new starting position would be before the current position. @@ -1202,68 +1567,134 @@ ZEXTERN int ZEXPORT gzrewind OF((gzFile file)); /* Rewinds the given file. This function is supported only for reading. - gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET) + gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET) */ +/* ZEXTERN z_off_t ZEXPORT gztell OF((gzFile file)); + + Returns the starting position for the next gzread or gzwrite on the given + compressed file. This position represents a number of bytes in the + uncompressed data stream, and is zero when starting, even if appending or + reading a gzip stream from the middle of a file using gzdopen(). + + gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR) +*/ + /* - Returns the starting position for the next gzread or gzwrite on the - given compressed file. This position represents a number of bytes in the - uncompressed data stream. +ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile file)); - gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR) + Returns the current offset in the file being read or written. This offset + includes the count of bytes that precede the gzip stream, for example when + appending or when using gzdopen() for reading. When reading, the offset + does not include as yet unused buffered input. This information can be used + for a progress indicator. On error, gzoffset() returns -1. */ ZEXTERN int ZEXPORT gzeof OF((gzFile file)); /* - Returns 1 when EOF has previously been detected reading the given - input stream, otherwise zero. + Returns true (1) if the end-of-file indicator has been set while reading, + false (0) otherwise. Note that the end-of-file indicator is set only if the + read tried to go past the end of the input, but came up short. Therefore, + just like feof(), gzeof() may return false even if there is no more data to + read, in the event that the last read request was for the exact number of + bytes remaining in the input file. This will happen if the input file size + is an exact multiple of the buffer size. + + If gzeof() returns true, then the read functions will return no more data, + unless the end-of-file indicator is reset by gzclearerr() and the input file + has grown since the previous end of file was detected. */ ZEXTERN int ZEXPORT gzdirect OF((gzFile file)); /* - Returns 1 if file is being read directly without decompression, otherwise - zero. + Returns true (1) if file is being copied directly while reading, or false + (0) if file is a gzip stream being decompressed. + + If the input file is empty, gzdirect() will return true, since the input + does not contain a gzip stream. + + If gzdirect() is used immediately after gzopen() or gzdopen() it will + cause buffers to be allocated to allow reading the file to determine if it + is a gzip file. Therefore if gzbuffer() is used, it should be called before + gzdirect(). + + When writing, gzdirect() returns true (1) if transparent writing was + requested ("wT" for the gzopen() mode), or false (0) otherwise. (Note: + gzdirect() is not needed when writing. Transparent writing must be + explicitly requested, so the application already knows the answer. When + linking statically, using gzdirect() will include all of the zlib code for + gzip file reading and decompression, which may not be desired.) */ ZEXTERN int ZEXPORT gzclose OF((gzFile file)); /* - Flushes all pending output if necessary, closes the compressed file - and deallocates all the (de)compression state. The return value is the zlib - error number (see function gzerror below). + Flushes all pending output if necessary, closes the compressed file and + deallocates the (de)compression state. Note that once file is closed, you + cannot call gzerror with file, since its structures have been deallocated. + gzclose must not be called more than once on the same file, just as free + must not be called more than once on the same allocation. + + gzclose will return Z_STREAM_ERROR if file is not valid, Z_ERRNO on a + file operation error, Z_MEM_ERROR if out of memory, Z_BUF_ERROR if the + last read ended in the middle of a gzip stream, or Z_OK on success. +*/ + +ZEXTERN int ZEXPORT gzclose_r OF((gzFile file)); +ZEXTERN int ZEXPORT gzclose_w OF((gzFile file)); +/* + Same as gzclose(), but gzclose_r() is only for use when reading, and + gzclose_w() is only for use when writing or appending. The advantage to + using these instead of gzclose() is that they avoid linking in zlib + compression or decompression code that is not used when only reading or only + writing respectively. If gzclose() is used, then both compression and + decompression code will be included the application when linking to a static + zlib library. */ ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum)); /* - Returns the error message for the last error which occurred on the - given compressed file. errnum is set to zlib error number. If an - error occurred in the file system and not in the compression library, - errnum is set to Z_ERRNO and the application may consult errno - to get the exact error code. + Returns the error message for the last error which occurred on the given + compressed file. errnum is set to zlib error number. If an error occurred + in the file system and not in the compression library, errnum is set to + Z_ERRNO and the application may consult errno to get the exact error code. + + The application must not modify the returned string. Future calls to + this function may invalidate the previously returned string. If file is + closed, then the string previously returned by gzerror will no longer be + available. + + gzerror() should be used to distinguish errors from end-of-file for those + functions above that do not distinguish those cases in their return values. */ ZEXTERN void ZEXPORT gzclearerr OF((gzFile file)); /* - Clears the error and end-of-file flags for file. This is analogous to the - clearerr() function in stdio. This is useful for continuing to read a gzip + Clears the error and end-of-file flags for file. This is analogous to the + clearerr() function in stdio. This is useful for continuing to read a gzip file that is being written concurrently. */ +#endif /* !Z_SOLO */ + /* checksum functions */ /* These functions are not related to compression but are exported - anyway because they might be useful in applications using the - compression library. + anyway because they might be useful in applications using the compression + library. */ ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len)); /* Update a running Adler-32 checksum with the bytes buf[0..len-1] and - return the updated checksum. If buf is NULL, this function returns - the required initial value for the checksum. - An Adler-32 checksum is almost as reliable as a CRC32 but can be computed - much faster. Usage example: + return the updated checksum. If buf is Z_NULL, this function returns the + required initial value for the checksum. + + An Adler-32 checksum is almost as reliable as a CRC-32 but can be computed + much faster. + + Usage example: uLong adler = adler32(0L, Z_NULL, 0); @@ -1273,21 +1704,31 @@ ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len)); if (adler != original_adler) error(); */ +ZEXTERN uLong ZEXPORT adler32_z OF((uLong adler, const Bytef *buf, + z_size_t len)); +/* + Same as adler32(), but with a size_t length. +*/ + +/* ZEXTERN uLong ZEXPORT adler32_combine OF((uLong adler1, uLong adler2, z_off_t len2)); -/* + Combine two Adler-32 checksums into one. For two sequences of bytes, seq1 and seq2 with lengths len1 and len2, Adler-32 checksums were calculated for each, adler1 and adler2. adler32_combine() returns the Adler-32 checksum of - seq1 and seq2 concatenated, requiring only adler1, adler2, and len2. + seq1 and seq2 concatenated, requiring only adler1, adler2, and len2. Note + that the z_off_t type (like off_t) is a signed integer. If len2 is + negative, the result has no meaning or utility. */ ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len)); /* Update a running CRC-32 with the bytes buf[0..len-1] and return the - updated CRC-32. If buf is NULL, this function returns the required initial - value for the for the crc. Pre- and post-conditioning (one's complement) is + updated CRC-32. If buf is Z_NULL, this function returns the required + initial value for the crc. Pre- and post-conditioning (one's complement) is performed within this function so it shouldn't be done by the application. + Usage example: uLong crc = crc32(0L, Z_NULL, 0); @@ -1298,9 +1739,15 @@ ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len)); if (crc != original_crc) error(); */ -ZEXTERN uLong ZEXPORT crc32_combine OF((uLong crc1, uLong crc2, z_off_t len2)); +ZEXTERN uLong ZEXPORT crc32_z OF((uLong adler, const Bytef *buf, + z_size_t len)); +/* + Same as crc32(), but with a size_t length. +*/ /* +ZEXTERN uLong ZEXPORT crc32_combine OF((uLong crc1, uLong crc2, z_off_t len2)); + Combine two CRC-32 check values into one. For two sequences of bytes, seq1 and seq2 with lengths len1 and len2, CRC-32 check values were calculated for each, crc1 and crc2. crc32_combine() returns the CRC-32 @@ -1328,27 +1775,135 @@ ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits, unsigned char FAR *window, const char *version, int stream_size)); -#define deflateInit(strm, level) \ - deflateInit_((strm), (level), ZLIB_VERSION, sizeof(z_stream)) -#define inflateInit(strm) \ - inflateInit_((strm), ZLIB_VERSION, sizeof(z_stream)) -#define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \ - deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\ - (strategy), ZLIB_VERSION, sizeof(z_stream)) -#define inflateInit2(strm, windowBits) \ - inflateInit2_((strm), (windowBits), ZLIB_VERSION, sizeof(z_stream)) -#define inflateBackInit(strm, windowBits, window) \ - inflateBackInit_((strm), (windowBits), (window), \ - ZLIB_VERSION, sizeof(z_stream)) - - -#if !defined(ZUTIL_H) && !defined(NO_DUMMY_DECL) - struct internal_state {int dummy;}; /* hack for buggy compilers */ +#ifdef Z_PREFIX_SET +# define z_deflateInit(strm, level) \ + deflateInit_((strm), (level), ZLIB_VERSION, (int)sizeof(z_stream)) +# define z_inflateInit(strm) \ + inflateInit_((strm), ZLIB_VERSION, (int)sizeof(z_stream)) +# define z_deflateInit2(strm, level, method, windowBits, memLevel, strategy) \ + deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\ + (strategy), ZLIB_VERSION, (int)sizeof(z_stream)) +# define z_inflateInit2(strm, windowBits) \ + inflateInit2_((strm), (windowBits), ZLIB_VERSION, \ + (int)sizeof(z_stream)) +# define z_inflateBackInit(strm, windowBits, window) \ + inflateBackInit_((strm), (windowBits), (window), \ + ZLIB_VERSION, (int)sizeof(z_stream)) +#else +# define deflateInit(strm, level) \ + deflateInit_((strm), (level), ZLIB_VERSION, (int)sizeof(z_stream)) +# define inflateInit(strm) \ + inflateInit_((strm), ZLIB_VERSION, (int)sizeof(z_stream)) +# define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \ + deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\ + (strategy), ZLIB_VERSION, (int)sizeof(z_stream)) +# define inflateInit2(strm, windowBits) \ + inflateInit2_((strm), (windowBits), ZLIB_VERSION, \ + (int)sizeof(z_stream)) +# define inflateBackInit(strm, windowBits, window) \ + inflateBackInit_((strm), (windowBits), (window), \ + ZLIB_VERSION, (int)sizeof(z_stream)) +#endif + +#ifndef Z_SOLO + +/* gzgetc() macro and its supporting function and exposed data structure. Note + * that the real internal state is much larger than the exposed structure. + * This abbreviated structure exposes just enough for the gzgetc() macro. The + * user should not mess with these exposed elements, since their names or + * behavior could change in the future, perhaps even capriciously. They can + * only be used by the gzgetc() macro. You have been warned. + */ +struct gzFile_s { + unsigned have; + unsigned char *next; + z_off64_t pos; +}; +ZEXTERN int ZEXPORT gzgetc_ OF((gzFile file)); /* backward compatibility */ +#ifdef Z_PREFIX_SET +# undef z_gzgetc +# define z_gzgetc(g) \ + ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : (gzgetc)(g)) +#else +# define gzgetc(g) \ + ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : (gzgetc)(g)) +#endif + +/* provide 64-bit offset functions if _LARGEFILE64_SOURCE defined, and/or + * change the regular functions to 64 bits if _FILE_OFFSET_BITS is 64 (if + * both are true, the application gets the *64 functions, and the regular + * functions are changed to 64 bits) -- in case these are set on systems + * without large file support, _LFS64_LARGEFILE must also be true + */ +#ifdef Z_LARGE64 + ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *)); + ZEXTERN z_off64_t ZEXPORT gzseek64 OF((gzFile, z_off64_t, int)); + ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzFile)); + ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile)); + ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off64_t)); + ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off64_t)); +#endif + +#if !defined(ZLIB_INTERNAL) && defined(Z_WANT64) +# ifdef Z_PREFIX_SET +# define z_gzopen z_gzopen64 +# define z_gzseek z_gzseek64 +# define z_gztell z_gztell64 +# define z_gzoffset z_gzoffset64 +# define z_adler32_combine z_adler32_combine64 +# define z_crc32_combine z_crc32_combine64 +# else +# define gzopen gzopen64 +# define gzseek gzseek64 +# define gztell gztell64 +# define gzoffset gzoffset64 +# define adler32_combine adler32_combine64 +# define crc32_combine crc32_combine64 +# endif +# ifndef Z_LARGE64 + ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *)); + ZEXTERN z_off_t ZEXPORT gzseek64 OF((gzFile, z_off_t, int)); + ZEXTERN z_off_t ZEXPORT gztell64 OF((gzFile)); + ZEXTERN z_off_t ZEXPORT gzoffset64 OF((gzFile)); + ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t)); + ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t)); +# endif +#else + ZEXTERN gzFile ZEXPORT gzopen OF((const char *, const char *)); + ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile, z_off_t, int)); + ZEXTERN z_off_t ZEXPORT gztell OF((gzFile)); + ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile)); + ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t)); + ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t)); #endif +#else /* Z_SOLO */ + + ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t)); + ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t)); + +#endif /* !Z_SOLO */ + +/* undocumented functions */ ZEXTERN const char * ZEXPORT zError OF((int)); -ZEXTERN int ZEXPORT inflateSyncPoint OF((z_streamp z)); -ZEXTERN const uLongf * ZEXPORT get_crc_table OF((void)); +ZEXTERN int ZEXPORT inflateSyncPoint OF((z_streamp)); +ZEXTERN const z_crc_t FAR * ZEXPORT get_crc_table OF((void)); +ZEXTERN int ZEXPORT inflateUndermine OF((z_streamp, int)); +ZEXTERN int ZEXPORT inflateValidate OF((z_streamp, int)); +ZEXTERN unsigned long ZEXPORT inflateCodesUsed OF ((z_streamp)); +ZEXTERN int ZEXPORT inflateResetKeep OF((z_streamp)); +ZEXTERN int ZEXPORT deflateResetKeep OF((z_streamp)); +#if (defined(_WIN32) || defined(__CYGWIN__)) && !defined(Z_SOLO) +ZEXTERN gzFile ZEXPORT gzopen_w OF((const wchar_t *path, + const char *mode)); +#endif +#if defined(STDC) || defined(Z_HAVE_STDARG_H) +# ifndef Z_SOLO +ZEXTERN int ZEXPORTVA gzvprintf Z_ARG((gzFile file, + const char *format, + va_list va)); +# endif +#endif #ifdef __cplusplus } diff --git a/zlib/zlib.pc.cmakein b/zlib/zlib.pc.cmakein new file mode 100644 index 000000000000..a5e642938c69 --- /dev/null +++ b/zlib/zlib.pc.cmakein @@ -0,0 +1,13 @@ +prefix=@CMAKE_INSTALL_PREFIX@ +exec_prefix=@CMAKE_INSTALL_PREFIX@ +libdir=@INSTALL_LIB_DIR@ +sharedlibdir=@INSTALL_LIB_DIR@ +includedir=@INSTALL_INC_DIR@ + +Name: zlib +Description: zlib compression library +Version: @VERSION@ + +Requires: +Libs: -L${libdir} -L${sharedlibdir} -lz +Cflags: -I${includedir} diff --git a/zlib/zlib.pc.in b/zlib/zlib.pc.in new file mode 100644 index 000000000000..7e5acf9c77e7 --- /dev/null +++ b/zlib/zlib.pc.in @@ -0,0 +1,13 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +sharedlibdir=@sharedlibdir@ +includedir=@includedir@ + +Name: zlib +Description: zlib compression library +Version: @VERSION@ + +Requires: +Libs: -L${libdir} -L${sharedlibdir} -lz +Cflags: -I${includedir} diff --git a/zlib/zlib2ansi b/zlib/zlib2ansi new file mode 100755 index 000000000000..15e3e165f37d --- /dev/null +++ b/zlib/zlib2ansi @@ -0,0 +1,152 @@ +#!/usr/bin/perl + +# Transform K&R C function definitions into ANSI equivalent. +# +# Author: Paul Marquess +# Version: 1.0 +# Date: 3 October 2006 + +# TODO +# +# Asumes no function pointer parameters. unless they are typedefed. +# Assumes no literal strings that look like function definitions +# Assumes functions start at the beginning of a line + +use strict; +use warnings; + +local $/; +$_ = <>; + +my $sp = qr{ \s* (?: /\* .*? \*/ )? \s* }x; # assume no nested comments + +my $d1 = qr{ $sp (?: [\w\*\s]+ $sp)* $sp \w+ $sp [\[\]\s]* $sp }x ; +my $decl = qr{ $sp (?: \w+ $sp )+ $d1 }xo ; +my $dList = qr{ $sp $decl (?: $sp , $d1 )* $sp ; $sp }xo ; + + +while (s/^ + ( # Start $1 + ( # Start $2 + .*? # Minimal eat content + ( ^ \w [\w\s\*]+ ) # $3 -- function name + \s* # optional whitespace + ) # $2 - Matched up to before parameter list + + \( \s* # Literal "(" + optional whitespace + ( [^\)]+ ) # $4 - one or more anythings except ")" + \s* \) # optional whitespace surrounding a Literal ")" + + ( (?: $dList )+ ) # $5 + + $sp ^ { # literal "{" at start of line + ) # Remember to $1 + //xsom + ) +{ + my $all = $1 ; + my $prefix = $2; + my $param_list = $4 ; + my $params = $5; + + StripComments($params); + StripComments($param_list); + $param_list =~ s/^\s+//; + $param_list =~ s/\s+$//; + + my $i = 0 ; + my %pList = map { $_ => $i++ } + split /\s*,\s*/, $param_list; + my $pMatch = '(\b' . join('|', keys %pList) . '\b)\W*$' ; + + my @params = split /\s*;\s*/, $params; + my @outParams = (); + foreach my $p (@params) + { + if ($p =~ /,/) + { + my @bits = split /\s*,\s*/, $p; + my $first = shift @bits; + $first =~ s/^\s*//; + push @outParams, $first; + $first =~ /^(\w+\s*)/; + my $type = $1 ; + push @outParams, map { $type . $_ } @bits; + } + else + { + $p =~ s/^\s+//; + push @outParams, $p; + } + } + + + my %tmp = map { /$pMatch/; $_ => $pList{$1} } + @outParams ; + + @outParams = map { " $_" } + sort { $tmp{$a} <=> $tmp{$b} } + @outParams ; + + print $prefix ; + print "(\n" . join(",\n", @outParams) . ")\n"; + print "{" ; + +} + +# Output any trailing code. +print ; +exit 0; + + +sub StripComments +{ + + no warnings; + + # Strip C & C++ coments + # From the perlfaq + $_[0] =~ + + s{ + /\* ## Start of /* ... */ comment + [^*]*\*+ ## Non-* followed by 1-or-more *'s + ( + [^/*][^*]*\*+ + )* ## 0-or-more things which don't start with / + ## but do end with '*' + / ## End of /* ... */ comment + + | ## OR C++ Comment + // ## Start of C++ comment // + [^\n]* ## followed by 0-or-more non end of line characters + + | ## OR various things which aren't comments: + + ( + " ## Start of " ... " string + ( + \\. ## Escaped char + | ## OR + [^"\\] ## Non "\ + )* + " ## End of " ... " string + + | ## OR + + ' ## Start of ' ... ' string + ( + \\. ## Escaped char + | ## OR + [^'\\] ## Non '\ + )* + ' ## End of ' ... ' string + + | ## OR + + . ## Anything other char + [^/"'\\]* ## Chars which doesn't start a comment, string or escape + ) + }{$2}gxs; + +} diff --git a/zlib/zutil.c b/zlib/zutil.c index d55f5948a37f..a76c6b0c7e55 100644 --- a/zlib/zutil.c +++ b/zlib/zutil.c @@ -1,27 +1,27 @@ /* zutil.c -- target dependent utility functions for the compression library - * Copyright (C) 1995-2005 Jean-loup Gailly. + * Copyright (C) 1995-2017 Jean-loup Gailly * For conditions of distribution and use, see copyright notice in zlib.h */ /* @(#) $Id$ */ #include "zutil.h" - -#ifndef NO_DUMMY_DECL -struct internal_state {int dummy;}; /* for buggy compilers */ +#ifndef Z_SOLO +# include "gzguts.h" #endif -const char * const z_errmsg[10] = { -"need dictionary", /* Z_NEED_DICT 2 */ -"stream end", /* Z_STREAM_END 1 */ -"", /* Z_OK 0 */ -"file error", /* Z_ERRNO (-1) */ -"stream error", /* Z_STREAM_ERROR (-2) */ -"data error", /* Z_DATA_ERROR (-3) */ -"insufficient memory", /* Z_MEM_ERROR (-4) */ -"buffer error", /* Z_BUF_ERROR (-5) */ -"incompatible version",/* Z_VERSION_ERROR (-6) */ -""}; +z_const char * const z_errmsg[10] = { + (z_const char *)"need dictionary", /* Z_NEED_DICT 2 */ + (z_const char *)"stream end", /* Z_STREAM_END 1 */ + (z_const char *)"", /* Z_OK 0 */ + (z_const char *)"file error", /* Z_ERRNO (-1) */ + (z_const char *)"stream error", /* Z_STREAM_ERROR (-2) */ + (z_const char *)"data error", /* Z_DATA_ERROR (-3) */ + (z_const char *)"insufficient memory", /* Z_MEM_ERROR (-4) */ + (z_const char *)"buffer error", /* Z_BUF_ERROR (-5) */ + (z_const char *)"incompatible version",/* Z_VERSION_ERROR (-6) */ + (z_const char *)"" +}; const char * ZEXPORT zlibVersion() @@ -34,31 +34,31 @@ uLong ZEXPORT zlibCompileFlags() uLong flags; flags = 0; - switch (sizeof(uInt)) { + switch ((int)(sizeof(uInt))) { case 2: break; case 4: flags += 1; break; case 8: flags += 2; break; default: flags += 3; } - switch (sizeof(uLong)) { + switch ((int)(sizeof(uLong))) { case 2: break; case 4: flags += 1 << 2; break; case 8: flags += 2 << 2; break; default: flags += 3 << 2; } - switch (sizeof(voidpf)) { + switch ((int)(sizeof(voidpf))) { case 2: break; case 4: flags += 1 << 4; break; case 8: flags += 2 << 4; break; default: flags += 3 << 4; } - switch (sizeof(z_off_t)) { + switch ((int)(sizeof(z_off_t))) { case 2: break; case 4: flags += 1 << 6; break; case 8: flags += 2 << 6; break; default: flags += 3 << 6; } -#ifdef DEBUG +#ifdef ZLIB_DEBUG flags += 1 << 8; #endif #if defined(ASMV) || defined(ASMINF) @@ -85,41 +85,41 @@ uLong ZEXPORT zlibCompileFlags() #ifdef FASTEST flags += 1L << 21; #endif -#ifdef STDC +#if defined(STDC) || defined(Z_HAVE_STDARG_H) # ifdef NO_vsnprintf - flags += 1L << 25; + flags += 1L << 25; # ifdef HAS_vsprintf_void - flags += 1L << 26; + flags += 1L << 26; # endif # else # ifdef HAS_vsnprintf_void - flags += 1L << 26; + flags += 1L << 26; # endif # endif #else - flags += 1L << 24; + flags += 1L << 24; # ifdef NO_snprintf - flags += 1L << 25; + flags += 1L << 25; # ifdef HAS_sprintf_void - flags += 1L << 26; + flags += 1L << 26; # endif # else # ifdef HAS_snprintf_void - flags += 1L << 26; + flags += 1L << 26; # endif # endif #endif return flags; } -#ifdef DEBUG - +#ifdef ZLIB_DEBUG +#include # ifndef verbose # define verbose 0 # endif -int z_verbose = verbose; +int ZLIB_INTERNAL z_verbose = verbose; -void z_error (m) +void ZLIB_INTERNAL z_error (m) char *m; { fprintf(stderr, "%s\n", m); @@ -146,7 +146,7 @@ const char * ZEXPORT zError(err) #ifndef HAVE_MEMCPY -void zmemcpy(dest, source, len) +void ZLIB_INTERNAL zmemcpy(dest, source, len) Bytef* dest; const Bytef* source; uInt len; @@ -157,7 +157,7 @@ void zmemcpy(dest, source, len) } while (--len != 0); } -int zmemcmp(s1, s2, len) +int ZLIB_INTERNAL zmemcmp(s1, s2, len) const Bytef* s1; const Bytef* s2; uInt len; @@ -170,7 +170,7 @@ int zmemcmp(s1, s2, len) return 0; } -void zmemzero(dest, len) +void ZLIB_INTERNAL zmemzero(dest, len) Bytef* dest; uInt len; { @@ -181,6 +181,7 @@ void zmemzero(dest, len) } #endif +#ifndef Z_SOLO #ifdef SYS16BIT @@ -213,11 +214,13 @@ local ptr_table table[MAX_PTR]; * a protected system like OS/2. Use Microsoft C instead. */ -voidpf zcalloc (voidpf opaque, unsigned items, unsigned size) +voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, unsigned items, unsigned size) { - voidpf buf = opaque; /* just to make some compilers happy */ + voidpf buf; ulg bsize = (ulg)items*size; + (void)opaque; + /* If we allocate less than 65520 bytes, we assume that farmalloc * will return a usable pointer which doesn't have to be normalized. */ @@ -237,9 +240,12 @@ voidpf zcalloc (voidpf opaque, unsigned items, unsigned size) return buf; } -void zcfree (voidpf opaque, voidpf ptr) +void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr) { int n; + + (void)opaque; + if (*(ush*)&ptr != 0) { /* object < 64K */ farfree(ptr); return; @@ -255,7 +261,6 @@ void zcfree (voidpf opaque, voidpf ptr) next_ptr--; return; } - ptr = opaque; /* just to make some compilers happy */ Assert(0, "zcfree: ptr not found"); } @@ -272,15 +277,15 @@ void zcfree (voidpf opaque, voidpf ptr) # define _hfree hfree #endif -voidpf zcalloc (voidpf opaque, unsigned items, unsigned size) +voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, uInt items, uInt size) { - if (opaque) opaque = 0; /* to make compiler happy */ + (void)opaque; return _halloc((long)items, size); } -void zcfree (voidpf opaque, voidpf ptr) +void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr) { - if (opaque) opaque = 0; /* to make compiler happy */ + (void)opaque; _hfree(ptr); } @@ -297,22 +302,24 @@ extern voidp calloc OF((uInt items, uInt size)); extern void free OF((voidpf ptr)); #endif -voidpf zcalloc (opaque, items, size) +voidpf ZLIB_INTERNAL zcalloc (opaque, items, size) voidpf opaque; unsigned items; unsigned size; { - if (opaque) items += size - size; /* make compiler happy */ + (void)opaque; return sizeof(uInt) > 2 ? (voidpf)malloc(items * size) : (voidpf)calloc(items, size); } -void zcfree (opaque, ptr) +void ZLIB_INTERNAL zcfree (opaque, ptr) voidpf opaque; voidpf ptr; { + (void)opaque; free(ptr); - if (opaque) return; /* make compiler happy */ } #endif /* MY_ZCALLOC */ + +#endif /* !Z_SOLO */ diff --git a/zlib/zutil.h b/zlib/zutil.h index 4482957d6ac9..b079ea6a80f5 100644 --- a/zlib/zutil.h +++ b/zlib/zutil.h @@ -1,5 +1,5 @@ /* zutil.h -- internal interface and configuration of the compression library - * Copyright (C) 1995-2005 Jean-loup Gailly. + * Copyright (C) 1995-2016 Jean-loup Gailly, Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -13,36 +13,32 @@ #ifndef ZUTIL_H #define ZUTIL_H -#define ZLIB_INTERNAL +#ifdef HAVE_HIDDEN +# define ZLIB_INTERNAL __attribute__((visibility ("hidden"))) +#else +# define ZLIB_INTERNAL +#endif + #include "zlib.h" -#ifdef STDC -# ifndef _WIN32_WCE +#if defined(STDC) && !defined(Z_SOLO) +# if !(defined(_WIN32_WCE) && defined(_MSC_VER)) # include # endif # include # include #endif -#ifdef NO_ERRNO_H -# ifdef _WIN32_WCE - /* The Microsoft C Run-Time Library for Windows CE doesn't have - * errno. We define it as a global variable to simplify porting. - * Its value is always 0 and should not be used. We rename it to - * avoid conflict with other libraries that use the same workaround. - */ -# define errno z_errno -# endif - extern int errno; -#else -# ifndef _WIN32_WCE -# include -# endif + +#ifdef Z_SOLO + typedef long ptrdiff_t; /* guess -- will be caught if guess is wrong */ #endif #ifndef local # define local static #endif -/* compile with -Dlocal if your debugger can't find static symbols */ +/* since "static" is used to mean two completely different things in C, we + define "local" for the non-static meaning of "static", for readability + (compile with -Dlocal if your debugger can't find static symbols) */ typedef unsigned char uch; typedef uch FAR uchf; @@ -50,13 +46,13 @@ typedef unsigned short ush; typedef ush FAR ushf; typedef unsigned long ulg; -extern const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ +extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ /* (size given to avoid silly warnings with Visual C++) */ #define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)] #define ERR_RETURN(strm,err) \ - return (strm->msg = (char*)ERR_MSG(err), (err)) + return (strm->msg = ERR_MSG(err), (err)) /* To be used only when the state is known to be valid */ /* common constants */ @@ -88,70 +84,90 @@ extern const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ #if defined(MSDOS) || (defined(WINDOWS) && !defined(WIN32)) # define OS_CODE 0x00 -# if defined(__TURBOC__) || defined(__BORLANDC__) -# if(__STDC__ == 1) && (defined(__LARGE__) || defined(__COMPACT__)) - /* Allow compilation with ANSI keywords only enabled */ - void _Cdecl farfree( void *block ); - void *_Cdecl farmalloc( unsigned long nbytes ); -# else -# include +# ifndef Z_SOLO +# if defined(__TURBOC__) || defined(__BORLANDC__) +# if (__STDC__ == 1) && (defined(__LARGE__) || defined(__COMPACT__)) + /* Allow compilation with ANSI keywords only enabled */ + void _Cdecl farfree( void *block ); + void *_Cdecl farmalloc( unsigned long nbytes ); +# else +# include +# endif +# else /* MSC or DJGPP */ +# include # endif -# else /* MSC or DJGPP */ -# include # endif #endif #ifdef AMIGA -# define OS_CODE 0x01 +# define OS_CODE 1 #endif #if defined(VAXC) || defined(VMS) -# define OS_CODE 0x02 +# define OS_CODE 2 # define F_OPEN(name, mode) \ fopen((name), (mode), "mbc=60", "ctx=stm", "rfm=fix", "mrs=512") #endif +#ifdef __370__ +# if __TARGET_LIB__ < 0x20000000 +# define OS_CODE 4 +# elif __TARGET_LIB__ < 0x40000000 +# define OS_CODE 11 +# else +# define OS_CODE 8 +# endif +#endif + #if defined(ATARI) || defined(atarist) -# define OS_CODE 0x05 +# define OS_CODE 5 #endif #ifdef OS2 -# define OS_CODE 0x06 -# ifdef M_I86 - #include +# define OS_CODE 6 +# if defined(M_I86) && !defined(Z_SOLO) +# include # endif #endif #if defined(MACOS) || defined(TARGET_OS_MAC) -# define OS_CODE 0x07 -# if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os -# include /* for fdopen */ -# else -# ifndef fdopen -# define fdopen(fd,mode) NULL /* No fdopen() */ +# define OS_CODE 7 +# ifndef Z_SOLO +# if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os +# include /* for fdopen */ +# else +# ifndef fdopen +# define fdopen(fd,mode) NULL /* No fdopen() */ +# endif # endif # endif #endif -#ifdef TOPS20 -# define OS_CODE 0x0a +#ifdef __acorn +# define OS_CODE 13 #endif -#ifdef WIN32 -# ifndef __CYGWIN__ /* Cygwin is Unix, not Win32 */ -# define OS_CODE 0x0b -# endif +#if defined(WIN32) && !defined(__CYGWIN__) +# define OS_CODE 10 +#endif + +#ifdef _BEOS_ +# define OS_CODE 16 +#endif + +#ifdef __TOS_OS400__ +# define OS_CODE 18 #endif -#ifdef __50SERIES /* Prime/PRIMOS */ -# define OS_CODE 0x0f +#ifdef __APPLE__ +# define OS_CODE 19 #endif #if defined(_BEOS_) || defined(RISCOS) # define fdopen(fd,mode) NULL /* No fdopen() */ #endif -#if (defined(_MSC_VER) && (_MSC_VER > 600)) +#if (defined(_MSC_VER) && (_MSC_VER > 600)) && !defined __INTERIX # if defined(_WIN32_WCE) # define fdopen(fd,mode) NULL /* No fdopen() */ # ifndef _PTRDIFF_T_DEFINED @@ -163,10 +179,23 @@ extern const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ # endif #endif +#if defined(__BORLANDC__) && !defined(MSDOS) + #pragma warn -8004 + #pragma warn -8008 + #pragma warn -8066 +#endif + +/* provide prototypes for these when building zlib without LFS */ +#if !defined(_WIN32) && \ + (!defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0) + ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t)); + ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t)); +#endif + /* common defaults */ #ifndef OS_CODE -# define OS_CODE 0x03 /* assume Unix */ +# define OS_CODE 3 /* assume Unix */ #endif #ifndef F_OPEN @@ -175,40 +204,7 @@ extern const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ /* functions */ -#if defined(STDC99) || (defined(__TURBOC__) && __TURBOC__ >= 0x550) -# ifndef HAVE_VSNPRINTF -# define HAVE_VSNPRINTF -# endif -#endif -#if defined(__CYGWIN__) -# ifndef HAVE_VSNPRINTF -# define HAVE_VSNPRINTF -# endif -#endif -#ifndef HAVE_VSNPRINTF -# ifdef MSDOS - /* vsnprintf may exist on some MS-DOS compilers (DJGPP?), - but for now we just assume it doesn't. */ -# define NO_vsnprintf -# endif -# ifdef __TURBOC__ -# define NO_vsnprintf -# endif -# if defined(WIN32) && (!defined(_MSC_VER) || _MSC_VER < 1500) - /* In Win32, vsnprintf is available as the "non-ANSI" _vsnprintf. */ -# if !defined(vsnprintf) && !defined(NO_vsnprintf) -# define vsnprintf _vsnprintf -# endif -# endif -# ifdef __SASC -# define NO_vsnprintf -# endif -#endif -#ifdef VMS -# define NO_vsnprintf -#endif - -#if defined(pyr) +#if defined(pyr) || defined(Z_SOLO) # define NO_MEMCPY #endif #if defined(SMALL_MEDIUM) && !defined(_MSC_VER) && !defined(__SC__) @@ -232,16 +228,16 @@ extern const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ # define zmemzero(dest, len) memset(dest, 0, len) # endif #else - extern void zmemcpy OF((Bytef* dest, const Bytef* source, uInt len)); - extern int zmemcmp OF((const Bytef* s1, const Bytef* s2, uInt len)); - extern void zmemzero OF((Bytef* dest, uInt len)); + void ZLIB_INTERNAL zmemcpy OF((Bytef* dest, const Bytef* source, uInt len)); + int ZLIB_INTERNAL zmemcmp OF((const Bytef* s1, const Bytef* s2, uInt len)); + void ZLIB_INTERNAL zmemzero OF((Bytef* dest, uInt len)); #endif /* Diagnostic functions */ -#ifdef DEBUG +#ifdef ZLIB_DEBUG # include - extern int z_verbose; - extern void z_error OF((char *m)); + extern int ZLIB_INTERNAL z_verbose; + extern void ZLIB_INTERNAL z_error OF((char *m)); # define Assert(cond,msg) {if(!(cond)) z_error(msg);} # define Trace(x) {if (z_verbose>=0) fprintf x ;} # define Tracev(x) {if (z_verbose>0) fprintf x ;} @@ -257,13 +253,19 @@ extern const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ # define Tracecv(c,x) #endif - -voidpf zcalloc OF((voidpf opaque, unsigned items, unsigned size)); -void zcfree OF((voidpf opaque, voidpf ptr)); +#ifndef Z_SOLO + voidpf ZLIB_INTERNAL zcalloc OF((voidpf opaque, unsigned items, + unsigned size)); + void ZLIB_INTERNAL zcfree OF((voidpf opaque, voidpf ptr)); +#endif #define ZALLOC(strm, items, size) \ (*((strm)->zalloc))((strm)->opaque, (items), (size)) #define ZFREE(strm, addr) (*((strm)->zfree))((strm)->opaque, (voidpf)(addr)) #define TRY_FREE(s, p) {if (p) ZFREE(s, p);} +/* Reverse the bytes in a 32-bit value */ +#define ZSWAP32(q) ((((q) >> 24) & 0xff) + (((q) >> 8) & 0xff00) + \ + (((q) & 0xff00) << 8) + (((q) & 0xff) << 24)) + #endif /* ZUTIL_H */ From 817fed5114f2d6cb932f44d452f1c48020e2e99f Mon Sep 17 00:00:00 2001 From: Yura Sorokin Date: Mon, 9 Jul 2018 17:33:55 +0300 Subject: [PATCH 1019/1221] Fixed PS-4574 (stack-use-after-scope in innobase_convert_identifier() detected by ASan) https://jira.percona.com/browse/PS-4574 Fixed problem with 'nz' and 'nz2' buffers inside 'innobase_convert_identifier()' used after they run out of scope. --- storage/innobase/handler/ha_innodb.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index b45dce14123e..1f8a7c719f69 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -3162,10 +3162,10 @@ innobase_convert_identifier( const char* s = id; int q; - if (file_id) { + char nz[MAX_TABLE_NAME_LEN + 1]; + char nz2[MAX_TABLE_NAME_LEN + 1]; - char nz[MAX_TABLE_NAME_LEN + 1]; - char nz2[MAX_TABLE_NAME_LEN + 1]; + if (file_id) { /* Decode the table name. The MySQL function expects a NUL-terminated string. The input and output strings From fe31a7fe479c36ec6344de2cd909f89c7b59baf1 Mon Sep 17 00:00:00 2001 From: Yura Sorokin Date: Mon, 9 Jul 2018 23:53:23 +0300 Subject: [PATCH 1020/1221] Fixed PS-4581 (stack-use-after-scope in _db_enter_() / mysql_select_db() detected by ASan) https://jira.percona.com/browse/PS-4581 Function 'dbConnect()' in 'client/mysqlcheck.c' has 'DBUG_ENTER("dbConnect")' at the beginning but ends with plain 'return' which causes stack corruption in Debug mode. Fixed by changing plain 'return's to 'DBUG_RETURN()'s. --- client/mysqlcheck.c | 4 ++-- mysys/default.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/client/mysqlcheck.c b/client/mysqlcheck.c index 194931fda90b..f9de8a1e6239 100644 --- a/client/mysqlcheck.c +++ b/client/mysqlcheck.c @@ -914,10 +914,10 @@ static int dbConnect(char *host, char *user, char *passwd) opt_ssl_mode == SSL_MODE_REQUIRED))) { DBerror(&mysql_connection, "when trying to connect"); - return 1; + DBUG_RETURN(1); } mysql_connection.reconnect= 1; - return 0; + DBUG_RETURN(0); } /* dbConnect */ diff --git a/mysys/default.c b/mysys/default.c index ea02d94daa72..00b0dda56057 100644 --- a/mysys/default.c +++ b/mysys/default.c @@ -646,7 +646,7 @@ int my_load_defaults(const char *conf_file, const char **groups, err: fprintf(stderr,"Fatal error in defaults handling. Program aborted\n"); exit(1); - return 0; /* Keep compiler happy */ + DBUG_RETURN(0); /* Keep compiler happy */ } From d88ec73ec40f03ab7fbb3d78fd5700b0f368e363 Mon Sep 17 00:00:00 2001 From: Robert Golebiowski Date: Tue, 22 May 2018 13:24:30 +0200 Subject: [PATCH 1021/1221] PS-4473: core-file directive is setting 'Max core file size' to unlimited on Ubuntu 17.10 Moved all variables (core-file, gdb, skip-stack-trace) on which my_init_signals depends to early variables. --- sql/mysqld.cc | 37 ++++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 87016ee0fd1c..b875e5a8865d 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -339,6 +339,7 @@ char *opt_keyring_migration_source= NULL; char *opt_keyring_migration_destination= NULL; ulong opt_keyring_migration_port= 0; bool migrate_connect_options= 0; +uint test_flags= 0; #ifndef _WIN32 bool opt_log_syslog_include_pid; char *opt_log_syslog_facility; @@ -452,7 +453,7 @@ volatile sig_atomic_t calling_initgroups= 0; /**< Used in SIGSEGV handler. */ #endif const char *timestamp_type_names[]= {"UTC", "SYSTEM", NullS}; ulong opt_log_timestamps; -uint mysqld_port, test_flags, select_errors, dropping_tables, ha_open_options; +uint mysqld_port, select_errors, dropping_tables, ha_open_options; uint mysqld_extra_port; uint mysqld_port_timeout; ulong delay_key_write_options; @@ -5868,6 +5869,13 @@ int handle_early_options() } opt_bootstrap= TRUE; } + + if (opt_debugging) + { + /* Allow break with SIGINT, no core or stack trace */ + test_flags|= TEST_SIGINT | TEST_NO_STACKTRACE; + test_flags&= ~TEST_CORE_ON_SIGNAL; + } } // Swap with an empty vector, i.e. delete elements and free allocated space. @@ -6054,6 +6062,16 @@ struct my_option my_long_early_options[]= "Port number to use for connection.", &opt_keyring_migration_port, &opt_keyring_migration_port, 0, GET_ULONG, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, + {"core-file", OPT_WANT_CORE, + "Write core on errors.", + 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}, + {"skip-stack-trace", OPT_SKIP_STACK_TRACE, + "Don't print a stack trace on failure.", 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, + 0, 0, 0, 0}, + {"gdb", 0, + "Set up signals usable for debugging.", + &opt_debugging, &opt_debugging, + 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, { 0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0 } }; @@ -6127,8 +6145,6 @@ struct my_option my_long_options[]= {"console", OPT_CONSOLE, "Write error output on screen; don't remove the console window on windows.", &opt_console, &opt_console, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, - {"core-file", OPT_WANT_CORE, "Write core on errors.", 0, 0, 0, GET_NO_ARG, - NO_ARG, 0, 0, 0, 0, 0, 0}, /* default-storage-engine should have "MyISAM" as def_value. Instead of initializing it here it is done in init_common_variables() due to a compiler bug in Sun Studio compiler. */ @@ -6164,10 +6180,6 @@ struct my_option my_long_options[]= 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, /* We must always support the next option to make scripts like mysqltest easier to do */ - {"gdb", 0, - "Set up signals usable for debugging.", - &opt_debugging, &opt_debugging, - 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, #if defined(HAVE_LINUX_LARGE_PAGES) || defined (HAVE_SOLARIS_LARGE_PAGES) {"super-large-pages", 0, "Enable support for super large pages.", &opt_super_large_pages, &opt_super_large_pages, 0, @@ -6323,9 +6335,6 @@ struct my_option my_long_options[]= {"skip-slave-start", 0, "If set, slave is not autostarted.", &opt_skip_slave_start, &opt_skip_slave_start, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, - {"skip-stack-trace", OPT_SKIP_STACK_TRACE, - "Don't print a stack trace on failure.", 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, - 0, 0, 0, 0}, #if defined(_WIN32) && !defined(EMBEDDED_LIBRARY) {"slow-start-timeout", 0, "Maximum number of milliseconds that the service control manager should wait " @@ -7516,7 +7525,7 @@ static int mysql_init_variables(void) kill_in_progress= 0; cleanup_done= 0; server_id_supplied= false; - test_flags= select_errors= dropping_tables= ha_open_options=0; + select_errors= dropping_tables= ha_open_options=0; slave_open_temp_tables.atomic_set(0); opt_endinfo= using_udf_functions= 0; opt_using_transactions= 0; @@ -8344,12 +8353,6 @@ static int get_options(int *argc_ptr, char ***argv_ptr) if (!my_enable_symlinks) have_symlink= SHOW_OPTION_DISABLED; - if (opt_debugging) - { - /* Allow break with SIGINT, no core or stack trace */ - test_flags|= TEST_SIGINT | TEST_NO_STACKTRACE; - test_flags&= ~TEST_CORE_ON_SIGNAL; - } /* Set global MyISAM variables from delay_key_write_options */ fix_delay_key_write(0, 0, OPT_GLOBAL); From 393b1ecedcf8f2264e61f1b1027d7666b6d7adc6 Mon Sep 17 00:00:00 2001 From: Sujatha Sivakumar Date: Tue, 10 Jul 2018 17:58:58 +0530 Subject: [PATCH 1022/1221] Bug#27411175: RESET SLAVE ALL DOES NOT CLEAR MYSQL.SLAVE_RELAY_LOG_INFO Post push fix to address a test design issue. Test case: rpl.rpl_perfschema_applier_status_by_coordinator Analysis: --------- Prior to bug fix, if a RESET SLAVE command is followed by slave server restart, then channel specific information will be lost. Test generates a set of GTIDs and they are replicated to slave. RESET MASTER command is executed on master server which clears all master specific information including GTIDs. On slave server only RESET SLAVE command is issued to clear slave specific information. If START SLAVE is executed at this state, the command will fail as SLAVE SERVER has more GTIDs than the master. The same behavior should apply even if slave server is restarted post RESET SLAVE command. Ideally RESET MASTER command should be issued on slave server so that GTID specific information is cleared on slave as well. This command was not needed earlier as test was depending on buggy server behavior, that existed prior to bug fix and it was passing earlier. Now it fails. Fix: ---- Added RESET MASTER command on slave server. --- .../rpl/r/rpl_perfschema_applier_status_by_coordinator.result | 1 + .../rpl/t/rpl_perfschema_applier_status_by_coordinator.test | 1 + 2 files changed, 2 insertions(+) diff --git a/mysql-test/suite/rpl/r/rpl_perfschema_applier_status_by_coordinator.result b/mysql-test/suite/rpl/r/rpl_perfschema_applier_status_by_coordinator.result index bf9c6bab4a97..b27f8fcc0c0e 100644 --- a/mysql-test/suite/rpl/r/rpl_perfschema_applier_status_by_coordinator.result +++ b/mysql-test/suite/rpl/r/rpl_perfschema_applier_status_by_coordinator.result @@ -55,6 +55,7 @@ include/stop_slave.inc drop table t; reset master; reset slave; +reset master; # Restarting servers and setting up MTS now. Since, SQL thread and # coordinator are the same and follow same code path, we can skip diff --git a/mysql-test/suite/rpl/t/rpl_perfschema_applier_status_by_coordinator.test b/mysql-test/suite/rpl/t/rpl_perfschema_applier_status_by_coordinator.test index 878dba9b5876..77ccb3becc60 100644 --- a/mysql-test/suite/rpl/t/rpl_perfschema_applier_status_by_coordinator.test +++ b/mysql-test/suite/rpl/t/rpl_perfschema_applier_status_by_coordinator.test @@ -353,6 +353,7 @@ reset master; --connection slave reset slave; +reset master; --echo --echo # Restarting servers and setting up MTS now. Since, SQL thread and From 499e3e9594b6756aa64aaa89230f02ac5bd0c3fe Mon Sep 17 00:00:00 2001 From: Vlad Lesin Date: Wed, 11 Jul 2018 02:30:19 +0300 Subject: [PATCH 1023/1221] PS-4587: ROCKSDB_INCLUDE_RFR macros in wrong file ROCKSDB_INCLUDE_RFR is defined in ha_rocksdb.cc file. There is conditional compilation in both .h and .cc files where the condition is the macro definition. If ha_rocksdb.h is included somewhere outside from ha_rocksdb.cc where ROCKSDB_INCLUDE_RFR is not defined then the objects of ha_rocksdb class will have not the same content as expected in the class member-functions in ha_rocksdb.cc, what can cause memory corruption. Move ROCKSDB_INCLUDE_RFR macro definition from .cc to .h file. --- storage/rocksdb/ha_rocksdb.cc | 1 - storage/rocksdb/ha_rocksdb.h | 2 ++ 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index 696f74f5a03a..58d7466eb455 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -19,7 +19,6 @@ #endif #define MYSQL_SERVER 1 -#define ROCKSDB_INCLUDE_RFR 1 /* The C++ file's header */ #include "./ha_rocksdb.h" diff --git a/storage/rocksdb/ha_rocksdb.h b/storage/rocksdb/ha_rocksdb.h index c7d6b7388e84..65724e6e58b1 100644 --- a/storage/rocksdb/ha_rocksdb.h +++ b/storage/rocksdb/ha_rocksdb.h @@ -19,6 +19,8 @@ #pragma interface /* gcc class implementation */ #endif +#define ROCKSDB_INCLUDE_RFR 1 + /* C++ standard header files */ #include #include From cdc1d6e636b4b9030305c8443a8b069d09dc58da Mon Sep 17 00:00:00 2001 From: Aakanksha Verma Date: Wed, 11 Jul 2018 12:14:45 +0530 Subject: [PATCH 1024/1221] Bug #27545888 MYSQLD CRASHES WHEN RENAMING AN INNODB TABLE WITH FOREIGN KEY AND FULLTEXT KEY PROBLEM When renaming a table, foreign key constraint name is duplicated and is not handled therefore crashes later during query execution. FIX Handle the particulary duplicate key error case by exiting function and return error to server. NOTE: For 8.0+, Added to this issue fixed another issue that we are writing rename log in case of rollback also so made the call to row_rename_table_for_mysql based on the replay hint coming from fts_rename_aux_tables. Also added crash injection test incase of rename table crash/recovery rollback. Reviewd by: Jimmy Yang< Jimmy.Yang@oracle.com> Bin su RB: 19785 & 19828 --- storage/innobase/row/row0mysql.cc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/storage/innobase/row/row0mysql.cc b/storage/innobase/row/row0mysql.cc index cfd640ed4d5d..3782d815e9ed 100644 --- a/storage/innobase/row/row0mysql.cc +++ b/storage/innobase/row/row0mysql.cc @@ -5066,6 +5066,9 @@ row_rename_table_for_mysql( " = TO_BINARY(:old_table_name);\n" "END;\n" , FALSE, trx); + if (err != DB_SUCCESS) { + goto end; + } } else if (n_constraints_to_drop > 0) { /* Drop some constraints of tmp tables. */ From 1faf94c26c8b92078397b6ba34a1b7d591f90c3c Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Wed, 11 Jul 2018 15:20:39 +0530 Subject: [PATCH 1025/1221] From eaf6b467c2b1d91a5f8328808f77c1d0cce0980c Mon Sep 17 00:00:00 2001 From: Pavan Naik Date: Wed, 11 Jul 2018 14:28:42 +0530 Subject: [PATCH 1026/1221] BUG#28316456: BACKPORT MYSQLTEST_VARDIR_ABS TO 5.7 Back-port the environment variable $MYSQLTEST_VARDIR_ABS to mysql-5.7. Change-Id: I7f7a0f48939be6bf3b47e5c565ea848689ffca20 --- mysql-test/mysql-test-run.pl | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index 5e8bcf2d9c67..c5c90a0f042a 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -78,6 +78,7 @@ BEGIN use lib "lib"; use Cwd; +use Cwd 'abs_path'; use Getopt::Long; use My::File::Path; # Patched version of File::Path use File::Basename; @@ -2611,14 +2612,14 @@ sub environment_setup { if (IS_WINDOWS) { $ENV{'SECURE_LOAD_PATH'}= $glob_mysql_test_dir."\\std_data"; - $ENV{'MYSQL_TEST_LOGIN_FILE'}= - $opt_tmpdir . "\\.mylogin.cnf"; + $ENV{'MYSQL_TEST_LOGIN_FILE'}= $opt_tmpdir . "\\.mylogin.cnf"; + $ENV{'MYSQLTEST_VARDIR_ABS'}= $opt_vardir; } else { $ENV{'SECURE_LOAD_PATH'}= $glob_mysql_test_dir."/std_data"; - $ENV{'MYSQL_TEST_LOGIN_FILE'}= - $opt_tmpdir . "/.mylogin.cnf"; + $ENV{'MYSQL_TEST_LOGIN_FILE'}= $opt_tmpdir . "/.mylogin.cnf"; + $ENV{'MYSQLTEST_VARDIR_ABS'}= abs_path("$opt_vardir"); } From e08dee47c930fb4860f0931348140f005ad75f92 Mon Sep 17 00:00:00 2001 From: Mayank Prasad Date: Thu, 12 Jul 2018 12:51:21 +0530 Subject: [PATCH 1027/1221] wl#11571 : Deprecate Shared tablespaces in partitioned table - Added a deprecation warning to be thrown when a (sub)partition of a partitioned table is created in a shared tablespace. - Added an internal error handler to make sure this warning is thrown only once if there are more then one (sub)partitions are being created in shared tablespaces. RB : 19932 Reviewed by : Allen Lai Kevin Lewis Dyre Tjeldvoll --- mysql-test/r/mdl_tablespace.result | 8 ++ mysql-test/r/partition.result | 10 ++ mysql-test/r/partition_hash.result | 4 + mysql-test/r/partition_innodb.result | 6 + .../r/partition_innodb_tablespace.result | 4 + mysql-test/r/partition_list.result | 2 + mysql-test/r/partition_range.result | 14 ++ .../r/create_tablespace_partition.result | 20 +++ .../r/deprecate_part_in_shared_ts.result | 130 ++++++++++++++++++ mysql-test/suite/innodb/r/partition.result | 32 +++++ .../innodb/t/deprecate_part_in_shared_ts.test | 119 ++++++++++++++++ sql/sql_alter.cc | 3 + sql/sql_base.cc | 22 +++ sql/sql_base.h | 24 +++- sql/sql_parse.cc | 7 + storage/innobase/handler/ha_innodb.cc | 3 + storage/innobase/handler/ha_innodb.h | 15 ++ storage/innobase/handler/ha_innopart.cc | 21 +++ storage/innobase/handler/handler0alter.cc | 6 + 19 files changed, 449 insertions(+), 1 deletion(-) create mode 100644 mysql-test/suite/innodb/r/deprecate_part_in_shared_ts.result create mode 100644 mysql-test/suite/innodb/t/deprecate_part_in_shared_ts.test diff --git a/mysql-test/r/mdl_tablespace.result b/mysql-test/r/mdl_tablespace.result index 37d422df8fce..47d8b4126037 100644 --- a/mysql-test/r/mdl_tablespace.result +++ b/mysql-test/r/mdl_tablespace.result @@ -865,6 +865,8 @@ ENGINE=InnoDB PARTITION BY RANGE (a) PARTITIONS 1 (PARTITION P1 VALUES LESS THAN (2) TABLESPACE ts1); +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. ############################################# # Case1: Checking TRUNCATE TABLE # Sending 'TRUNCATE TABLE t1;' @@ -900,6 +902,8 @@ CREATE TABLE t3 ( a INT NOT NULL, PRIMARY KEY (a)) ENGINE=InnoDB PARTITION BY RA SET DEBUG_SYNC= 'now WAIT_FOR got_lock'; SET DEBUG_SYNC= 'now SIGNAL cont'; # Reaping 'CREATE TABLE' +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. ############################################# # Case5: Checking CREATE TABLE LIKE SET DEBUG_SYNC= 'RESET'; @@ -911,6 +915,8 @@ CREATE TABLE t4 LIKE t3;; SET DEBUG_SYNC= 'now WAIT_FOR got_lock'; SET DEBUG_SYNC= 'now SIGNAL cont'; # Reaping 'CREATE TABLE LIKE' +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. ############################################# # Case6: Checking ALTER TABLE ... PARTITION CREATE TABLESPACE ts2 ADD DATAFILE 'ts2.ibd'; @@ -923,6 +929,8 @@ ALTER TABLE t2 ADD PARTITION (partition p2 values less than (4) tablespace ts2); SET DEBUG_SYNC= 'now WAIT_FOR got_lock'; SET DEBUG_SYNC= 'now SIGNAL cont'; # Reaping 'ALTER TABLE' +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. ############################################# # Case7: Checking LOCK TABLE t2 WRITE SET DEBUG_SYNC= 'RESET'; diff --git a/mysql-test/r/partition.result b/mysql-test/r/partition.result index 8de9269b2ebd..70ebc3df1212 100644 --- a/mysql-test/r/partition.result +++ b/mysql-test/r/partition.result @@ -916,7 +916,11 @@ partitions 3 (partition x1 tablespace ts1, partition x2 tablespace ts2, partition x3 tablespace ts3); +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. CREATE TABLE t2 LIKE t1; +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( @@ -953,6 +957,8 @@ partitions 3 (partition x1 values in (1,2,9,4) tablespace ts1, partition x2 values in (3, 11, 5, 7) tablespace ts2, partition x3 values in (16, 8, 5+19, 70-43) tablespace ts3); +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( @@ -976,6 +982,8 @@ partitions 3 (partition x1 values in (1,2,9,4) tablespace ts1, partition x2 values in (3, 11, 5, 7) tablespace ts2, partition x3 values in (16, 8, 5+19, 70-43) tablespace ts3); +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( @@ -998,6 +1006,8 @@ partition by list (b*a) (partition x1 values in (1) tablespace ts1, partition x2 values in (3, 11, 5, 7) tablespace ts2, partition x3 values in (16, 8, 5+19, 70-43) tablespace ts3); +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( diff --git a/mysql-test/r/partition_hash.result b/mysql-test/r/partition_hash.result index eb2338d8da70..3f79b8698e01 100644 --- a/mysql-test/r/partition_hash.result +++ b/mysql-test/r/partition_hash.result @@ -207,6 +207,8 @@ partitions 3 (partition x1 tablespace ts1, partition x2 tablespace ts2, partition x3 tablespace ts3); +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. insert into t1 values (1,1,1); SHOW CREATE TABLE t1; Table Create Table @@ -255,6 +257,8 @@ partitions 3 (partition x1 tablespace ts1, partition x2 tablespace ts2, partition x3 tablespace ts3); +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. select * from t1; a b c SHOW CREATE TABLE t1; diff --git a/mysql-test/r/partition_innodb.result b/mysql-test/r/partition_innodb.result index bc4b84c08763..024859410230 100644 --- a/mysql-test/r/partition_innodb.result +++ b/mysql-test/r/partition_innodb.result @@ -1061,6 +1061,8 @@ PRIMARY KEY (`f1`,`f4`) PARTITION BY LIST (`f4`) (PARTITION p0 VALUES IN (0) ENGINE = InnoDB, PARTITION p1 VALUES IN (1) DATA DIRECTORY = 'MYSQL_TMP_DIR/temp_tblspc' ENGINE = InnoDB); +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( @@ -1133,6 +1135,8 @@ PRIMARY KEY (`f1`,`f4`) PARTITION BY LIST (`f4`) (PARTITION p0 VALUES IN (0) TABLESPACE ts1 ENGINE = InnoDB, PARTITION p1 VALUES IN (1) TABLESPACE ts2 ENGINE = InnoDB); +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( @@ -1171,6 +1175,8 @@ PARTITION BY LIST (`f4`) PARTITION p1 VALUES IN (1) TABLESPACE innodb_file_per_table DATA DIRECTORY='MYSQL_TMP_DIR/temp_dir' ENGINE = InnoDB, PARTITION p2 VALUES IN (2) TABLESPACE innodb_file_per_table ENGINE = InnoDB, PARTITION p3 VALUES IN (3) TABLESPACE innodb_system ENGINE = InnoDB); +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( diff --git a/mysql-test/r/partition_innodb_tablespace.result b/mysql-test/r/partition_innodb_tablespace.result index 3079710ed246..742413a0f952 100644 --- a/mysql-test/r/partition_innodb_tablespace.result +++ b/mysql-test/r/partition_innodb_tablespace.result @@ -391,6 +391,8 @@ PARTITION p3 VALUES LESS THAN (300) TABLESPACE innodb_file_per_table (SUBPARTITION sp9 TABLESPACE ts_part4, SUBPARTITION sp10, SUBPARTITION sp11)); +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. SHOW CREATE TABLE t2; Table Create Table t2 CREATE TABLE `t2` ( @@ -444,6 +446,8 @@ PARTITION p3 VALUES LESS THAN (300) TABLESPACE innodb_file_per_table (SUBPARTITION sp9 TABLESPACE ts_part4, SUBPARTITION sp10, SUBPARTITION sp11)); +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. SHOW CREATE TABLE t3; Table Create Table t3 CREATE TABLE `t3` ( diff --git a/mysql-test/r/partition_list.result b/mysql-test/r/partition_list.result index 9e7fa9fbd8d9..af110c91d220 100644 --- a/mysql-test/r/partition_list.result +++ b/mysql-test/r/partition_list.result @@ -426,6 +426,8 @@ c int not null, primary key(a,b)) partition by list (a) (partition x1 values in (1,2,9,4) tablespace ts1); +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( diff --git a/mysql-test/r/partition_range.result b/mysql-test/r/partition_range.result index 21ff94250e32..5aba1b6a4c0a 100644 --- a/mysql-test/r/partition_range.result +++ b/mysql-test/r/partition_range.result @@ -346,6 +346,8 @@ partitions 3 (partition x1 values less than (5) tablespace ts1, partition x2 values less than (10) tablespace ts2, partition x3 values less than maxvalue tablespace ts3); +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. INSERT into t1 values (1, 1, 1); INSERT into t1 values (6, 1, 1); INSERT into t1 values (10, 1, 1); @@ -374,6 +376,8 @@ partitions 3 (partition x1 values less than (5) tablespace ts1, partition x2 values less than (10) tablespace ts2, partition x3 values less than maxvalue tablespace ts3); +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. select * from t1; a b c 1 1 1 @@ -402,6 +406,8 @@ partitions 3 (partition x1 values less than (5) tablespace ts1, partition x2 values less than (10) tablespace ts2, partition x3 values less than maxvalue tablespace ts3); +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. INSERT into t1 values (1, 1, 1); INSERT into t1 values (6, 1, 1); INSERT into t1 values (10, 1, 1); @@ -429,6 +435,8 @@ partitions 3 (partition x1 values less than (5) tablespace ts1, partition x2 values less than (10) tablespace ts2, partition x3 values less than maxvalue tablespace ts3); +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. select * from t1; a b c 1 1 1 @@ -457,6 +465,8 @@ partitions 3 (partition x1 values less than (5) tablespace ts1, partition x2 values less than (10) tablespace ts2, partition x3 values less than (15) tablespace ts3); +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. INSERT into t1 values (1, 1, 1); INSERT into t1 values (6, 1, 1); INSERT into t1 values (10, 1, 1); @@ -485,6 +495,8 @@ partitions 3 (partition x1 values less than (5) tablespace ts1, partition x2 values less than (10) tablespace ts2, partition x3 values less than (15) tablespace ts3); +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. select * from t1; a b c 1 1 1 @@ -597,6 +609,8 @@ partition x2 values less than (5) ( subpartition x21 tablespace ts1 nodegroup 0, subpartition x22 tablespace ts2 nodegroup 1) ); +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. SELECT * from t1; a b c SHOW CREATE TABLE t1; diff --git a/mysql-test/suite/innodb/r/create_tablespace_partition.result b/mysql-test/suite/innodb/r/create_tablespace_partition.result index 50d1cf34c8fd..eb2f724a93b1 100644 --- a/mysql-test/suite/innodb/r/create_tablespace_partition.result +++ b/mysql-test/suite/innodb/r/create_tablespace_partition.result @@ -22,6 +22,8 @@ SUBPARTITION subpart24), PARTITION thousands VALUES LESS THAN (10000) (SUBPARTITION subpart31, SUBPARTITION subpart32)); +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. SET GLOBAL innodb_file_per_table = ON; CREATE TABLE t2 (a INT, b INT) ENGINE = InnoDB @@ -35,11 +37,15 @@ SUBPARTITION subpart22 TABLESPACE=`s``1`), PARTITION thousands VALUES LESS THAN (10000) (SUBPARTITION subpart31 DATA DIRECTORY 'MYSQL_TMP_DIR', SUBPARTITION subpart32 DATA DIRECTORY 'MYSQL_TMP_DIR' TABLESPACE `innodb_file_per_table`)); +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. ALTER TABLE t1 ALGORITHM=COPY, ADD PARTITION (PARTITION tenthousands VALUES LESS THAN (20000)); ERROR 0A000: ALGORITHM=COPY/INPLACE is not supported. Reason: Partition specific operations do not yet support LOCK/ALGORITHM. Try ALGORITHM=DEFAULT. ALTER TABLE t1 ALGORITHM=DEFAULT, ADD PARTITION (PARTITION tenthousands VALUES LESS THAN (20000)); +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. # Only allow tablespace name as ident, not text. I.e. no 'single' quotes. ALTER TABLE t1 ALGORITHM=COPY, ADD PARTITION (PARTITION twentythousands VALUES LESS THAN (30000) @@ -60,6 +66,8 @@ ERROR 42000: You have an error in your SQL syntax; check the manual that corresp ALTER TABLE t1 ALGORITHM=DEFAULT, ADD PARTITION (PARTITION twentythousands VALUES LESS THAN (30000) TABLESPACE = "innodb_system"); +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. ALTER TABLE t1 ALGORITHM=DEFAULT, ADD PARTITION (PARTITION thirtythousands VALUES LESS THAN (40000) TABLESPACE = `innodb_file_per_table`); @@ -99,9 +107,13 @@ SUBPARTITION p40k_2 TABLESPACE = innodb_file_per_table DATA DIRECTORY = 'MYSQL_T SET GLOBAL innodb_file_per_table = OFF; ALTER TABLE t1 ALGORITHM=DEFAULT, ADD PARTITION (PARTITION fiftythousands VALUES LESS THAN (60000)); +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. ALTER TABLE t1 ALGORITHM=DEFAULT, ADD PARTITION (PARTITION sixtythousands VALUES LESS THAN (70000) TABLESPACE = `innodb_system`); +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. ALTER TABLE t1 ALGORITHM=DEFAULT, ADD PARTITION (PARTITION seventythousands VALUES LESS THAN (80000) TABLESPACE = `innodb_file_per_table`); @@ -121,6 +133,8 @@ ALTER TABLE t1 ALGORITHM=DEFAULT, ADD PARTITION (PARTITION ninetythousands VALUES LESS THAN (100000) (SUBPARTITION p90k_1 TABLESPACE = `innodb_file_per_table`, SUBPARTITION p90k_2 TABLESPACE = `innodb_system`)); +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. FLUSH TABLES; === information_schema.innodb_sys_tables and innodb_sys_tablespaces === Table Name Tablespace Table Flags Columns Row Format Zip Size Space Type @@ -388,6 +402,8 @@ SUBPARTITION seventythousandssp1 ENGINE = InnoDB), PARTITION ninetythousands VALUES LESS THAN (100000) (SUBPARTITION p90k_1 ENGINE = InnoDB, SUBPARTITION p90k_2 TABLESPACE = innodb_system ENGINE = InnoDB)) */; +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. CREATE TABLE `t2` ( `a` int(11) DEFAULT NULL, `b` int(11) DEFAULT NULL @@ -403,6 +419,8 @@ SUBPARTITION subpart22 TABLESPACE = `s``1` ENGINE = InnoDB), PARTITION thousands VALUES LESS THAN (10000) (SUBPARTITION subpart31 ENGINE = InnoDB, SUBPARTITION subpart32 ENGINE = InnoDB)) */; +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. === information_schema.innodb_sys_tables and innodb_sys_tablespaces === Table Name Tablespace Table Flags Columns Row Format Zip Size Space Type test/t1#p#fiftythousands#sp#fiftythousandssp0 s1 161 5 Dynamic 0 General @@ -531,6 +549,8 @@ CREATE TABLE ti ENGINE=INNODB PARTITION BY HASH( MONTH(tr_date) ) PARTITIONS 6; +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. DROP TABLE t1,ti; DROP TABLESPACE ts1; # diff --git a/mysql-test/suite/innodb/r/deprecate_part_in_shared_ts.result b/mysql-test/suite/innodb/r/deprecate_part_in_shared_ts.result new file mode 100644 index 000000000000..9818b99a586a --- /dev/null +++ b/mysql-test/suite/innodb/r/deprecate_part_in_shared_ts.result @@ -0,0 +1,130 @@ +CREATE TABLESPACE ts add datafile 'ts.ibd'; +######################################################################### +# Partitioned Table # +######################################################################### + +DROP TABLE IF EXISTS t1; +# Create table without explicit tablespace name +CREATE TABLE t1 (id INT, name VARCHAR(50)) +PARTITION BY RANGE(id) ( +PARTITION p0 VALUES LESS THAN (10), +PARTITION p1 VALUES LESS THAN (20), +PARTITION p2 VALUES LESS THAN (30)); +# Try to ALTER TABLE to have general tablespace at table level +ALTER TABLE t1 TABLESPACE=ts; +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. +DROP TABLE t1; +# Create table with general tablespace at table level +CREATE TABLE t1 (id INT, name VARCHAR(50)) +TABLESPACE=ts +PARTITION BY RANGE(id) ( +PARTITION p0 VALUES LESS THAN (10), +PARTITION p1 VALUES LESS THAN (20), +PARTITION p2 VALUES LESS THAN (30)); +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. +DROP TABLE t1; +# Create table with system tablespace at table level +CREATE TABLE t1 (id INT, name VARCHAR(50)) +TABLESPACE=innodb_system +PARTITION BY RANGE(id) ( +PARTITION p0 VALUES LESS THAN (10), +PARTITION p1 VALUES LESS THAN (20), +PARTITION p2 VALUES LESS THAN (30)); +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. +DROP TABLE t1; +# Create table with innodb_file_per_table tablespace at table level +CREATE TABLE t1 (id INT, name VARCHAR(50)) +TABLESPACE=innodb_file_per_table +PARTITION BY RANGE(id) ( +PARTITION p0 VALUES LESS THAN (10), +PARTITION p1 VALUES LESS THAN (20), +PARTITION p2 VALUES LESS THAN (30)); +DROP TABLE t1; +# Create table with general tablespace at partition level +CREATE TABLE t1 (id INT, name VARCHAR(50)) +PARTITION BY RANGE(id) ( +PARTITION p0 VALUES LESS THAN (10), +PARTITION p1 VALUES LESS THAN (20), +PARTITION p2 VALUES LESS THAN (30) TABLESPACE=ts); +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. +DROP TABLE t1; +# Create table with system tablespace at partition level +CREATE TABLE t1 (id INT, name VARCHAR(50)) +PARTITION BY RANGE(id) ( +PARTITION p0 VALUES LESS THAN (10), +PARTITION p1 VALUES LESS THAN (20), +PARTITION p2 VALUES LESS THAN (30) TABLESPACE=innodb_system); +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. +DROP TABLE t1; +# Create table with innodb_file_per_table tablespace at partition level +CREATE TABLE t1 (id INT, name VARCHAR(50)) +PARTITION BY RANGE(id) ( +PARTITION p0 VALUES LESS THAN (10), +PARTITION p1 VALUES LESS THAN (20), +PARTITION p2 VALUES LESS THAN (30), +PARTITION p3 VALUES LESS THAN (40) TABLESPACE=innodb_file_per_table); +# Alter table to move a partition to general tablespace. +ALTER TABLE t1 REORGANIZE PARTITION P0 INTO ( +PARTITION P0 VALUES LESS THAN (10) TABLESPACE=ts); +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. +# Alter table to move a partition to system tablespace. +ALTER TABLE t1 REORGANIZE PARTITION P1 INTO ( +PARTITION P1 VALUES LESS THAN (20) TABLESPACE=innodb_system); +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. +# Alter table to move a partition to file_per_table tablespace. +ALTER TABLE t1 REORGANIZE PARTITION P2 INTO ( +PARTITION P2 VALUES LESS THAN (30) TABLESPACE=innodb_file_per_table); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int(11) DEFAULT NULL, + `name` varchar(50) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (id) +(PARTITION P0 VALUES LESS THAN (10) TABLESPACE = `ts` ENGINE = InnoDB, + PARTITION P1 VALUES LESS THAN (20) TABLESPACE = `innodb_system` ENGINE = InnoDB, + PARTITION P2 VALUES LESS THAN (30) TABLESPACE = `innodb_file_per_table` ENGINE = InnoDB, + PARTITION p3 VALUES LESS THAN (40) TABLESPACE = `innodb_file_per_table` ENGINE = InnoDB) */ +# Alter table to add a new partition in general tablespace +ALTER TABLE t1 ADD PARTITION ( +PARTITION p4 VALUES LESS THAN (50) tablespace=ts); +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. +# Alter table to add a new partition in innodb_system tablespace +ALTER TABLE t1 ADD PARTITION ( +PARTITION p5 VALUES LESS THAN (60) tablespace=innodb_system); +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. +# Alter table to add a new partition in innodb_file_per_table tablespace +ALTER TABLE t1 ADD PARTITION ( +PARTITION p6 VALUES LESS THAN (70) tablespace=innodb_file_per_table); +# Alter table to add a new partition without giving tablespace +ALTER TABLE t1 ADD PARTITION ( +PARTITION p7 VALUES LESS THAN (80)); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int(11) DEFAULT NULL, + `name` varchar(50) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (id) +(PARTITION P0 VALUES LESS THAN (10) TABLESPACE = `ts` ENGINE = InnoDB, + PARTITION P1 VALUES LESS THAN (20) TABLESPACE = `innodb_system` ENGINE = InnoDB, + PARTITION P2 VALUES LESS THAN (30) TABLESPACE = `innodb_file_per_table` ENGINE = InnoDB, + PARTITION p3 VALUES LESS THAN (40) TABLESPACE = `innodb_file_per_table` ENGINE = InnoDB, + PARTITION p4 VALUES LESS THAN (50) TABLESPACE = `ts` ENGINE = InnoDB, + PARTITION p5 VALUES LESS THAN (60) TABLESPACE = `innodb_system` ENGINE = InnoDB, + PARTITION p6 VALUES LESS THAN (70) TABLESPACE = `innodb_file_per_table` ENGINE = InnoDB, + PARTITION p7 VALUES LESS THAN (80) ENGINE = InnoDB) */ +########### +# Cleanup # +########### +DROP TABLE t1; +DROP TABLESPACE ts; diff --git a/mysql-test/suite/innodb/r/partition.result b/mysql-test/suite/innodb/r/partition.result index eaee4a7d6872..4c1b1a12a2ea 100644 --- a/mysql-test/suite/innodb/r/partition.result +++ b/mysql-test/suite/innodb/r/partition.result @@ -237,7 +237,11 @@ INDEX (b(5), c(10), a)) ENGINE=InnoDB stats_persistent=DEFAULT PARTITION BY LINEAR HASH(d) PARTITIONS 2; ALTER TABLE t1 TABLESPACE ts1; +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. ALTER TABLE t1 DROP PRIMARY KEY, ALGORITHM=DEFAULT; +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. DROP TABLE t1; DROP TABLESPACE ts1; # @@ -449,6 +453,8 @@ PARTITION BY RANGE (a) PARTITIONS 3 ( PARTITION P1 VALUES LESS THAN (2) TABLESPACE ts1, PARTITION P2 VALUES LESS THAN (4) TABLESPACE `innodb_system`, PARTITION P3 VALUES LESS THAN (6)); +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. ALTER TABLE t1 ADD COLUMN f int; DROP TABLE t1; DROP TABLESPACE ts1; @@ -462,6 +468,8 @@ PARTITION p1 VALUES LESS THAN (100) TABLESPACE innodb_system, PARTITION p2 VALUES LESS THAN (200), PARTITION p3 VALUES LESS THAN (300) TABLESPACE ts1, PARTITION p4 VALUES LESS THAN (400) TABLESPACE innodb_system); +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. FLUSH table t1 FOR EXPORT; Warnings: Warning 1809 InnoDB: Table '`test`.`t1` /* Partition `p1` */' in system tablespace @@ -558,6 +566,8 @@ PARTITIONS 4 PARTITION p2 VALUES LESS THAN (4) TABLESPACE innodb_system, PARTITION p3 VALUES LESS THAN (6), PARTITION p4 VALUES LESS THAN (8) TABLESPACE innodb_file_per_table); +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( @@ -605,6 +615,8 @@ test/t1#p#p2 System NULL test/t1#p#p3 General ts2 test/t1#p#p4 Single test/t1#p#p4 ALTER TABLE t1 ADD COLUMN c int, TABLESPACE ts1; +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( @@ -630,6 +642,8 @@ test/t1#p#p2 System NULL test/t1#p#p3 General ts2 test/t1#p#p4 Single test/t1#p#p4 ALTER TABLE t1 ADD PARTITION (PARTITION p5 VALUES LESS THAN (10) TABLESPACE ts2); +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( @@ -657,6 +671,8 @@ test/t1#p#p3 General ts2 test/t1#p#p4 Single test/t1#p#p4 test/t1#p#p5 General ts2 ALTER TABLE t1 ADD PARTITION (PARTITION p6 VALUES LESS THAN (12)); +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( @@ -686,6 +702,8 @@ test/t1#p#p4 Single test/t1#p#p4 test/t1#p#p5 General ts2 test/t1#p#p6 General ts1 ALTER TABLE t1 REORGANIZE PARTITION p4 INTO (PARTITION p4 VALUES LESS THAN (8)); +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( @@ -715,6 +733,8 @@ test/t1#p#p4 General ts1 test/t1#p#p5 General ts2 test/t1#p#p6 General ts1 ALTER TABLE t1 REORGANIZE PARTITION p3 INTO (PARTITION p3 VALUES LESS THAN (6) TABLESPACE innodb_system); +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( @@ -752,6 +772,8 @@ PARTITIONS 4 PARTITION p2 VALUES LESS THAN (4) TABLESPACE innodb_system, PARTITION p3 VALUES LESS THAN (6), PARTITION p4 VALUES LESS THAN (8) TABLESPACE innodb_file_per_table); +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( @@ -799,6 +821,8 @@ test/t1#p#p2 System NULL test/t1#p#p3 Single test/t1#p#p3 test/t1#p#p4 Single test/t1#p#p4 ALTER TABLE t1 ADD COLUMN c int, TABLESPACE ts1; +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( @@ -824,6 +848,8 @@ test/t1#p#p2 System NULL test/t1#p#p3 Single test/t1#p#p3 test/t1#p#p4 Single test/t1#p#p4 ALTER TABLE t1 ADD PARTITION (PARTITION p5 VALUES LESS THAN (10) TABLESPACE ts2); +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( @@ -851,6 +877,8 @@ test/t1#p#p3 Single test/t1#p#p3 test/t1#p#p4 Single test/t1#p#p4 test/t1#p#p5 General ts2 ALTER TABLE t1 ADD PARTITION (PARTITION p6 VALUES LESS THAN (12)); +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( @@ -880,6 +908,8 @@ test/t1#p#p4 Single test/t1#p#p4 test/t1#p#p5 General ts2 test/t1#p#p6 General ts1 ALTER TABLE t1 REORGANIZE PARTITION p4 INTO (PARTITION p4 VALUES LESS THAN (8)); +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( @@ -909,6 +939,8 @@ test/t1#p#p4 General ts1 test/t1#p#p5 General ts2 test/t1#p#p6 General ts1 ALTER TABLE t1 REORGANIZE PARTITION p3 INTO (PARTITION p3 VALUES LESS THAN (6) TABLESPACE innodb_system); +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( diff --git a/mysql-test/suite/innodb/t/deprecate_part_in_shared_ts.test b/mysql-test/suite/innodb/t/deprecate_part_in_shared_ts.test new file mode 100644 index 000000000000..4deb332b2f8b --- /dev/null +++ b/mysql-test/suite/innodb/t/deprecate_part_in_shared_ts.test @@ -0,0 +1,119 @@ +################################################################################ +# Test case to test deprecation warning message to be thrown when a partition # +# of a partitioned table is found in a shared tablespace. # +# # +# This test case will test # +# - Partitioned Table create/alter with different combination of tablespace # +# at table level and partition level. # +################################################################################ + +--source include/no_valgrind_without_big.inc +CREATE TABLESPACE ts add datafile 'ts.ibd'; + +--echo ######################################################################### +--echo # Partitioned Table # +--echo ######################################################################### +--echo +--disable_warnings +DROP TABLE IF EXISTS t1; +--enable_warnings + +--echo # Create table without explicit tablespace name +CREATE TABLE t1 (id INT, name VARCHAR(50)) + PARTITION BY RANGE(id) ( + PARTITION p0 VALUES LESS THAN (10), + PARTITION p1 VALUES LESS THAN (20), + PARTITION p2 VALUES LESS THAN (30)); + +--echo # Try to ALTER TABLE to have general tablespace at table level +ALTER TABLE t1 TABLESPACE=ts; +DROP TABLE t1; + +--echo # Create table with general tablespace at table level +CREATE TABLE t1 (id INT, name VARCHAR(50)) + TABLESPACE=ts + PARTITION BY RANGE(id) ( + PARTITION p0 VALUES LESS THAN (10), + PARTITION p1 VALUES LESS THAN (20), + PARTITION p2 VALUES LESS THAN (30)); +DROP TABLE t1; + +--echo # Create table with system tablespace at table level +CREATE TABLE t1 (id INT, name VARCHAR(50)) + TABLESPACE=innodb_system + PARTITION BY RANGE(id) ( + PARTITION p0 VALUES LESS THAN (10), + PARTITION p1 VALUES LESS THAN (20), + PARTITION p2 VALUES LESS THAN (30)); +DROP TABLE t1; + +--echo # Create table with innodb_file_per_table tablespace at table level +CREATE TABLE t1 (id INT, name VARCHAR(50)) + TABLESPACE=innodb_file_per_table + PARTITION BY RANGE(id) ( + PARTITION p0 VALUES LESS THAN (10), + PARTITION p1 VALUES LESS THAN (20), + PARTITION p2 VALUES LESS THAN (30)); +DROP TABLE t1; + +--echo # Create table with general tablespace at partition level +CREATE TABLE t1 (id INT, name VARCHAR(50)) + PARTITION BY RANGE(id) ( + PARTITION p0 VALUES LESS THAN (10), + PARTITION p1 VALUES LESS THAN (20), + PARTITION p2 VALUES LESS THAN (30) TABLESPACE=ts); +DROP TABLE t1; + +--echo # Create table with system tablespace at partition level +CREATE TABLE t1 (id INT, name VARCHAR(50)) + PARTITION BY RANGE(id) ( + PARTITION p0 VALUES LESS THAN (10), + PARTITION p1 VALUES LESS THAN (20), + PARTITION p2 VALUES LESS THAN (30) TABLESPACE=innodb_system); +DROP TABLE t1; + +--echo # Create table with innodb_file_per_table tablespace at partition level +CREATE TABLE t1 (id INT, name VARCHAR(50)) + PARTITION BY RANGE(id) ( + PARTITION p0 VALUES LESS THAN (10), + PARTITION p1 VALUES LESS THAN (20), + PARTITION p2 VALUES LESS THAN (30), + PARTITION p3 VALUES LESS THAN (40) TABLESPACE=innodb_file_per_table); + +--echo # Alter table to move a partition to general tablespace. +ALTER TABLE t1 REORGANIZE PARTITION P0 INTO ( + PARTITION P0 VALUES LESS THAN (10) TABLESPACE=ts); + +--echo # Alter table to move a partition to system tablespace. +ALTER TABLE t1 REORGANIZE PARTITION P1 INTO ( + PARTITION P1 VALUES LESS THAN (20) TABLESPACE=innodb_system); + +--echo # Alter table to move a partition to file_per_table tablespace. +ALTER TABLE t1 REORGANIZE PARTITION P2 INTO ( + PARTITION P2 VALUES LESS THAN (30) TABLESPACE=innodb_file_per_table); + +SHOW CREATE TABLE t1; + +--echo # Alter table to add a new partition in general tablespace +ALTER TABLE t1 ADD PARTITION ( + PARTITION p4 VALUES LESS THAN (50) tablespace=ts); + +--echo # Alter table to add a new partition in innodb_system tablespace +ALTER TABLE t1 ADD PARTITION ( + PARTITION p5 VALUES LESS THAN (60) tablespace=innodb_system); + +--echo # Alter table to add a new partition in innodb_file_per_table tablespace +ALTER TABLE t1 ADD PARTITION ( + PARTITION p6 VALUES LESS THAN (70) tablespace=innodb_file_per_table); + +--echo # Alter table to add a new partition without giving tablespace +ALTER TABLE t1 ADD PARTITION ( + PARTITION p7 VALUES LESS THAN (80)); + +SHOW CREATE TABLE t1; + +--echo ########### +--echo # Cleanup # +--echo ########### +DROP TABLE t1; +DROP TABLESPACE ts; diff --git a/sql/sql_alter.cc b/sql/sql_alter.cc index c896eaa0e2f1..5f67927bc0f4 100644 --- a/sql/sql_alter.cc +++ b/sql/sql_alter.cc @@ -321,8 +321,11 @@ bool Sql_cmd_alter_table::execute(THD *thd) if (!thd->lex->is_ignore() && thd->is_strict_mode()) thd->push_internal_handler(&strict_handler); + Partition_in_shared_ts_error_handler partition_in_shared_ts_handler; + thd->push_internal_handler(&partition_in_shared_ts_handler); result= mysql_alter_table(thd, select_lex->db, lex->name.str, &create_info, first_table, &alter_info); + thd->pop_internal_handler(); if (!thd->lex->is_ignore() && thd->is_strict_mode()) thd->pop_internal_handler(); diff --git a/sql/sql_base.cc b/sql/sql_base.cc index f6eed77d5242..8cdd317ad91e 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -246,6 +246,28 @@ bool Strict_error_handler::handle_condition(THD *thd, return false; } +/** + Implementation of Partition_in_shared_ts error handler. + This internal handler is to make sure that deprecation warning is not + displayed again if already displayed once. +*/ +bool Partition_in_shared_ts_error_handler::handle_condition( + THD *thd, + uint sql_errno, + const char *sqlstate, + Sql_condition::enum_severity_level *level, + const char *msg) +{ + if (sql_errno == ER_WARN_DEPRECATED_SYNTAX_NO_REPLACEMENT && + strstr(msg, "InnoDB : A table partition in a shared tablespace") != NULL) { + if (m_is_already_reported == false) { + m_is_already_reported= true; + thd->get_stmt_da()->push_warning(thd, sql_errno, sqlstate, *level, msg); + } + return true; + } + return false; +} /** This internal handler is used to trap ER_NO_SUCH_TABLE and diff --git a/sql/sql_base.h b/sql/sql_base.h index 7789a6271e1a..50f51ca513e3 100644 --- a/sql/sql_base.h +++ b/sql/sql_base.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2010, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved. 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 @@ -764,6 +764,28 @@ class Strict_error_handler : public Internal_error_handler enum_set_select_behavior m_set_select_behavior; }; +/** + This internal handler is to make sure that deprecation warning is not + displayed again if already displayed once. +*/ + +class Partition_in_shared_ts_error_handler : public Internal_error_handler +{ +public: + Partition_in_shared_ts_error_handler() + : m_is_already_reported(false) + {} + + virtual bool handle_condition(THD *thd, + uint sql_errno, + const char* sqlstate, + Sql_condition::enum_severity_level *level, + const char* msg); + +private: + bool m_is_already_reported; +}; + void update_indexed_column_map(TABLE *table, MY_BITMAP *read_set); #endif /* SQL_BASE_INCLUDED */ diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 03687b247890..373eef00bed5 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -3257,6 +3257,10 @@ case SQLCOM_PREPARE: /* Push Strict_error_handler */ if (!thd->lex->is_ignore() && thd->is_strict_mode()) thd->push_internal_handler(&strict_handler); + + Partition_in_shared_ts_error_handler partition_in_shared_ts_handler; + thd->push_internal_handler(&partition_in_shared_ts_handler); + /* regular create */ if (create_info.options & HA_LEX_CREATE_TABLE_LIKE) { @@ -3270,6 +3274,9 @@ case SQLCOM_PREPARE: res= mysql_create_table(thd, create_table, &create_info, &alter_info); } + + thd->pop_internal_handler(); + /* Pop Strict_error_handler */ if (!thd->lex->is_ignore() && thd->is_strict_mode()) thd->pop_internal_handler(); diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index 9b574c70f9af..3324c27fc1ba 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -320,6 +320,9 @@ static const char* innobase_change_buffering_values[IBUF_USE_COUNT] = { "all" /* IBUF_USE_ALL */ }; +/* Deprecation warning text */ +const char PARTITION_IN_SHARED_TABLESPACE_WARNING[] = + "InnoDB : A table partition in a shared tablespace"; /* This tablespace name is reserved by InnoDB in order to explicitly create a file_per_table tablespace for the table. */ diff --git a/storage/innobase/handler/ha_innodb.h b/storage/innobase/handler/ha_innodb.h index 9d7150a2679c..e99e7859acfc 100644 --- a/storage/innobase/handler/ha_innodb.h +++ b/storage/innobase/handler/ha_innodb.h @@ -22,6 +22,9 @@ this program; if not, write to the Free Software Foundation, Inc., system clustered index when there is no primary key. */ extern const char innobase_index_reserve_name[]; +/* Deprecation warning text */ +extern const char PARTITION_IN_SHARED_TABLESPACE_WARNING[]; + /* "innodb_file_per_table" tablespace name is reserved by InnoDB in order to explicitly create a file_per_table tablespace for the table. */ extern const char reserved_file_per_table_space_name[]; @@ -670,6 +673,18 @@ const HA_CREATE_INFO* create_info) reserved_system_space_name))); } +/** Check if tablespace is shared tablespace. +@param[in] tablespace_name Name of the tablespace +@return true if tablespace is a shared tablespace. */ +UNIV_INLINE +bool is_shared_tablespace(const char *tablespace_name) { + if (tablespace_name != NULL && tablespace_name[0] != '\0' && + (strcmp(tablespace_name, reserved_file_per_table_space_name) != 0)) { + return true; + } + return false; +} + /** Parse hint for table and its indexes, and update the information in dictionary. @param[in] thd Connection thread diff --git a/storage/innobase/handler/ha_innopart.cc b/storage/innobase/handler/ha_innopart.cc index bc9b66f40cf5..c42e3f9d7a31 100644 --- a/storage/innobase/handler/ha_innopart.cc +++ b/storage/innobase/handler/ha_innopart.cc @@ -2739,6 +2739,12 @@ ha_innopart::create( tablespace_name); DBUG_ENTER("ha_innopart::create"); + + if (is_shared_tablespace(create_info->tablespace)) { + push_deprecated_warn_no_replacement( + ha_thd(), PARTITION_IN_SHARED_TABLESPACE_WARNING); + } + ut_ad(create_info != NULL); ut_ad(m_part_info == form->part_info); ut_ad(table_share != NULL); @@ -2858,6 +2864,11 @@ ha_innopart::create( set_create_info_dir(part_elem, create_info); if (!form->part_info->is_sub_partitioned()) { + if (is_shared_tablespace(part_elem->tablespace_name)) { + push_deprecated_warn_no_replacement( + ha_thd(), PARTITION_IN_SHARED_TABLESPACE_WARNING); + } + error = info.prepare_create_table(partition_name); if (error != 0) { goto cleanup; @@ -2878,6 +2889,11 @@ ha_innopart::create( while ((sub_elem = sub_it++)) { ut_ad(sub_elem->partition_name != NULL); + if (is_shared_tablespace(sub_elem->tablespace_name)) { + push_deprecated_warn_no_replacement( + ha_thd(), PARTITION_IN_SHARED_TABLESPACE_WARNING); + } + /* 'table' will be #P##SP#. Append the sub-partition name to @@ -4413,6 +4429,11 @@ ha_innopart::create_new_partition( DBUG_RETURN(HA_WRONG_CREATE_OPTION); } + if (tablespace_is_shared_space(create_info)) { + push_deprecated_warn_no_replacement( + ha_thd(), PARTITION_IN_SHARED_TABLESPACE_WARNING); + } + error = ha_innobase::create(norm_name, table, create_info); create_info->tablespace = tablespace_name_backup; create_info->data_file_name = data_file_name_backup; diff --git a/storage/innobase/handler/handler0alter.cc b/storage/innobase/handler/handler0alter.cc index 4683084e3047..02816ee7675d 100644 --- a/storage/innobase/handler/handler0alter.cc +++ b/storage/innobase/handler/handler0alter.cc @@ -9096,6 +9096,12 @@ ha_innopart::prepare_inplace_alter_table( thd = ha_thd(); + if (ha_alter_info->create_info->used_fields & HA_CREATE_USED_TABLESPACE + && tablespace_is_shared_space(ha_alter_info->create_info)) { + push_deprecated_warn_no_replacement( + ha_thd(), PARTITION_IN_SHARED_TABLESPACE_WARNING); + } + /* Clean up all ins/upd nodes. */ clear_ins_upd_nodes(); /* Based on Sql_alloc class, return NULL for new on failure. */ From 496e61332928c64c4759bccaea405141f6bda1af Mon Sep 17 00:00:00 2001 From: "mysql-builder@oracle.com" <> Date: Thu, 12 Jul 2018 14:49:29 +0530 Subject: [PATCH 1028/1221] From 3858e7995980c6c23b092f615d9aae3b5c0f6641 Mon Sep 17 00:00:00 2001 From: Bharathy Satish Date: Thu, 12 Jul 2018 12:19:50 +0200 Subject: [PATCH 1029/1221] Bug #27931181: RESTAURE DUMP CREATED WITH 5.7.22 ON 8.0.11 Post push fix to address warning reported by gcc8. The fix is to use memmove() rather than strcpy(). --- client/mysqldump.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/mysqldump.c b/client/mysqldump.c index cd3d18ea97ee..4c610e655aa3 100644 --- a/client/mysqldump.c +++ b/client/mysqldump.c @@ -1399,7 +1399,7 @@ static int remove_sql_mode(char* sql_mode, const char* replace_mode, } else { const char *next = start + replace_len + 1; - strcpy(start, next); + memmove(start, next, strlen(next) + 1); } return 0; } From aee91b1e0bd20603552ce6e48eaa7c7fb48c7e0f Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Tue, 22 May 2018 12:18:23 +0200 Subject: [PATCH 1030/1221] Bug#28061409 WITH_GMOCK HANDLE WINDOWS PATHS PROPERLY Convert input argument WITH_GMOCK to cmake path. Change-Id: I713c0e35d286b70988adc1e7178204fb0f438b97 --- unittest/gunit/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/unittest/gunit/CMakeLists.txt b/unittest/gunit/CMakeLists.txt index 1880404c23ec..e2b587b1449e 100644 --- a/unittest/gunit/CMakeLists.txt +++ b/unittest/gunit/CMakeLists.txt @@ -45,6 +45,7 @@ IF(LOCAL_GMOCK_ZIP ENDIF() IF (WITH_GMOCK) + FILE(TO_CMAKE_PATH "${WITH_GMOCK}" WITH_GMOCK) ## Did we get a full path name, including file name? IF (${WITH_GMOCK} MATCHES ".*\\.zip") GET_FILENAME_COMPONENT(GMOCK_DIR ${WITH_GMOCK} PATH) From b15b4aca22f5e01cd7d7f869ef45efbc44a65fb9 Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Thu, 5 Jul 2018 13:16:42 +0200 Subject: [PATCH 1031/1221] Bug #27493633: REGRESSION IN FEDERATED STORAGE ENGINE AFTER GCC 7 FIXES Fix a regression after Bug#25943754: FIX GCC 7 COMPILE WARNINGS. The federated storage engine had a few fall-throughs that were intentional, but that we assumed were not. The test case is a contribution from Percona. Change-Id: Iefffdd7d8d0f578d00a626da01a487543f2034a6 (cherry picked from commit 96faee6db07d4421697cd04f5934a88a574a2f85) --- .../federated/r/percona_bug1739734.result | 44 ++++++++++++++++ .../suite/federated/t/percona_bug1739734.test | 50 +++++++++++++++++++ storage/federated/ha_federated.cc | 6 ++- 3 files changed, 98 insertions(+), 2 deletions(-) create mode 100644 mysql-test/suite/federated/r/percona_bug1739734.result create mode 100644 mysql-test/suite/federated/t/percona_bug1739734.test diff --git a/mysql-test/suite/federated/r/percona_bug1739734.result b/mysql-test/suite/federated/r/percona_bug1739734.result new file mode 100644 index 000000000000..5f4bdd9a1318 --- /dev/null +++ b/mysql-test/suite/federated/r/percona_bug1739734.result @@ -0,0 +1,44 @@ +# +# Bug lp1739734 "Federated table returns error 1430 from storage engine" +# +# This is a bug introduced in the artful/gcc7 compilation fixes, caused by +# a moved break statement. +CREATE DATABASE federated; +CREATE DATABASE federated; +CREATE DATABASE lp1739734; +use lp1739734; +CREATE SERVER local_server +FOREIGN DATA WRAPPER mysql +OPTIONS ( +HOST '127.0.0.1', +PORT MASTER_PORT, +USER 'root', +PASSWORD '', +DATABASE 'lp1739734' +); +CREATE TABLE remote_table ( +a INT, +b INT, +KEY ab (a,b), +KEY ba (b,a) +); +CREATE TABLE local_table ( +a INT, +b INT, +KEY ab (a,b), +KEY ba (b,a) +) ENGINE=federated CONNECTION='local_server/remote_table'; +SELECT * FROM local_table; +a b +SELECT * FROM local_table USE INDEX (ab) +WHERE a<1 AND b=0; +a b +SELECT * FROM local_table USE INDEX (ba) +WHERE a<1 AND b=0; +a b +DROP DATABASE lp1739734; +DROP SERVER local_server; +DROP TABLE IF EXISTS federated.t1; +DROP DATABASE federated; +DROP TABLE IF EXISTS federated.t1; +DROP DATABASE federated; diff --git a/mysql-test/suite/federated/t/percona_bug1739734.test b/mysql-test/suite/federated/t/percona_bug1739734.test new file mode 100644 index 000000000000..cbb4c90dd756 --- /dev/null +++ b/mysql-test/suite/federated/t/percona_bug1739734.test @@ -0,0 +1,50 @@ +--echo # +--echo # Bug lp1739734 "Federated table returns error 1430 from storage engine" +--echo # +--echo # This is a bug introduced in the artful/gcc7 compilation fixes, caused by +--echo # a moved break statement. + +--source suite/federated/include/federated.inc + +connection master; +CREATE DATABASE lp1739734; +use lp1739734; + +--replace_result $MASTER_MYPORT MASTER_PORT +eval CREATE SERVER local_server +FOREIGN DATA WRAPPER mysql +OPTIONS ( + HOST '127.0.0.1', + PORT $MASTER_MYPORT, + USER 'root', + PASSWORD '', + DATABASE 'lp1739734' +); + +CREATE TABLE remote_table ( + a INT, + b INT, + KEY ab (a,b), + KEY ba (b,a) +); + + +CREATE TABLE local_table ( + a INT, + b INT, + KEY ab (a,b), + KEY ba (b,a) +) ENGINE=federated CONNECTION='local_server/remote_table'; + +SELECT * FROM local_table; + +SELECT * FROM local_table USE INDEX (ab) +WHERE a<1 AND b=0; + +SELECT * FROM local_table USE INDEX (ba) +WHERE a<1 AND b=0; + +DROP DATABASE lp1739734; +DROP SERVER local_server; + +--source suite/federated/include/federated_cleanup.inc diff --git a/storage/federated/ha_federated.cc b/storage/federated/ha_federated.cc index ed73783cdebf..01e269a48caa 100644 --- a/storage/federated/ha_federated.cc +++ b/storage/federated/ha_federated.cc @@ -1425,8 +1425,9 @@ bool ha_federated::create_where_from_key(String *to, { goto err; } + break; } - break; + // Fall through case HA_READ_KEY_OR_NEXT: DBUG_PRINT("info", ("federated HA_READ_KEY_OR_NEXT %d", i)); if (emit_key_part_name(&tmp, key_part) || @@ -1444,8 +1445,9 @@ bool ha_federated::create_where_from_key(String *to, emit_key_part_element(&tmp, key_part, needs_quotes, 0, ptr, part_length)) goto err; + break; } - break; + // Fall through case HA_READ_KEY_OR_PREV: DBUG_PRINT("info", ("federated HA_READ_KEY_OR_PREV %d", i)); if (emit_key_part_name(&tmp, key_part) || From 78aa2f357a26330f034544a34654c533c8e24f1f Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Tue, 22 May 2018 16:13:13 +0200 Subject: [PATCH 1032/1221] Bug#28332722 TURN OFF INCREMENTAL LINKING ON WINDOWS Backport parts of Bug#22382884: RAISE MINIMUM REQUIRED VERSION OF VISUAL STUDIO TO 2015 The patch turns off incremental linking on Windows to fix 64 bit linking issues with Visual Studio. Building mysql_client_test_embedded.exe may hang forever with incremental link. Change-Id: I112853eff70a255c756f4a690f5168e704295740 --- cmake/os/Windows.cmake | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/cmake/os/Windows.cmake b/cmake/os/Windows.cmake index f1498816d497..9d8b5d7f3ab3 100644 --- a/cmake/os/Windows.cmake +++ b/cmake/os/Windows.cmake @@ -1,4 +1,4 @@ -# Copyright (c) 2010, 2017, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -114,10 +114,11 @@ IF(MSVC) SET("${flag}" "${${flag}} /EHsc") ENDFOREACH() - # Fix CMake's predefined huge stack size FOREACH(type EXE SHARED MODULE) - STRING(REGEX REPLACE "/STACK:([^ ]+)" "" CMAKE_${type}_LINKER_FLAGS "${CMAKE_${type}_LINKER_FLAGS}") - STRING(REGEX REPLACE "/INCREMENTAL:([^ ]+)" "" CMAKE_${type}_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_${type}_LINKER_FLAGS_RELWITHDEBINFO}") + SET(CMAKE_${type}_LINKER_FLAGS_DEBUG + "${CMAKE_${type}_LINKER_FLAGS_DEBUG} /INCREMENTAL:NO") + SET(CMAKE_${type}_LINKER_FLAGS_RELWITHDEBINFO + "${CMAKE_${type}_LINKER_FLAGS_RELWITHDEBINFO} /INCREMENTAL:NO") ENDFOREACH() # Mark 32 bit executables large address aware so they can From c95a5bbfd1e2388488cfe6f7573ab7b7b705a9fb Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Tue, 3 Jul 2018 12:30:19 +0200 Subject: [PATCH 1033/1221] Bug#28200422 USE CTAGS RATHER THAN ETAGS FOR GENERATING TAGS FILE Switch to Exuberant Ctags when generating TAGS, since it is much better at parsing modern C++ Change-Id: I9652012708df7e7edf93161097a547f60fb0cf79 --- cmake/tags.cmake | 35 +++++++++++++++++++++++++--------- support-files/build-tags | 41 ++++++++++++++++++++++++++++++++++------ 2 files changed, 61 insertions(+), 15 deletions(-) diff --git a/cmake/tags.cmake b/cmake/tags.cmake index 07c1411a1d65..fdbe61694a39 100644 --- a/cmake/tags.cmake +++ b/cmake/tags.cmake @@ -1,4 +1,4 @@ -# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -15,12 +15,29 @@ # Generate tag files IF(UNIX) - ADD_CUSTOM_TARGET (tags - COMMAND support-files/build-tags - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - ) - ADD_CUSTOM_TARGET (ctags - COMMAND ctags -R -f CTAGS - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - ) + FIND_PROGRAM(CTAGS_EXECUTABLE ctags) + IF(NOT CTAGS_EXECUTABLE) + RETURN() + ENDIF() + EXEC_PROGRAM(${CTAGS_EXECUTABLE} ARGS --version OUTPUT_VARIABLE CTAGS_VERSION) + + IF(CTAGS_VERSION MATCHES "Exuberant") + ADD_CUSTOM_TARGET(tags + COMMAND support-files/build-tags + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + ) + ADD_CUSTOM_TARGET(ctags + COMMAND support-files/build-tags ctags + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + ) + ELSE() + ADD_CUSTOM_TARGET (tags + COMMAND exit 1 + COMMENT "Please install Exuberant Ctags" + ) + ADD_CUSTOM_TARGET (ctags + COMMAND exit 1 + COMMENT "Please install Exuberant Ctags" + ) + ENDIF() ENDIF() diff --git a/support-files/build-tags b/support-files/build-tags index c37485e32f9a..14af22b3ef1e 100755 --- a/support-files/build-tags +++ b/support-files/build-tags @@ -1,12 +1,41 @@ -#! /bin/sh +#! /bin/bash -rm -f TAGS +# Copyright (c) 2002, 2018, Oracle and/or its affiliates. All rights reserved. +# +# 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 + +tagstyle=${1:-etags} + +common_opts="--langmap=C++:+.ic,YACC:+.yy -I MY_ATTRIBUTE+" +case $tagstyle in + "etags") tagfile=TAGS + tagopt="-e $common_opts" + ;; + "ctags") tagfile=tags + tagopt="--fields=+l $common_opts" + ;; + *) echo "$0 [etags|ctags]" + exit 1 + ;; +esac + +rm -f $tagfile filter='\.cpp$\|\.cc$\|\.c$\|\.h$\|sql_yacc\.yy$\|\.hpp$\|\.ic$' list="find . -type f" git rev-parse >/dev/null 2>/dev/null && list="git ls-files" -$list |grep $filter |while read f; -do - etags -o TAGS --append $f -done +ctags $tagopt -o $tagfile $( $list | grep $filter ) + +echo "wrote file `pwd`/$tagfile" From 1e52a82e8a5c5f8ad0b6ac8613d716888a2476ef Mon Sep 17 00:00:00 2001 From: Yura Sorokin Date: Thu, 12 Jul 2018 15:33:47 +0300 Subject: [PATCH 1034/1221] Fixed PS-4600 (stack-use-after-scope in _db_enter_() / get_upgrade_info_file_name() detected by ASan) https://jira.percona.com/browse/PS-4600 Function 'run_sql_fix_privilege_tables()' in 'client/mysql_upgrade.c' has 'DBUG_ENTER("run_sql_fix_privilege_tables")'at the beginning but ends with plain 'return' which causes stack corruption in Debug mode. Fixed by changing plain 'return' to 'DBUG_RETURN()'. --- client/mysql_upgrade.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/mysql_upgrade.c b/client/mysql_upgrade.c index d385f6062195..eba4ab53be76 100644 --- a/client/mysql_upgrade.c +++ b/client/mysql_upgrade.c @@ -831,7 +831,7 @@ static int run_sql_fix_privilege_tables(void) } dynstr_free(&ds_result); - return found_real_errors; + DBUG_RETURN(found_real_errors); } From 00985f495bdd9a0c6346f48644cc956f7bc40be9 Mon Sep 17 00:00:00 2001 From: Deepthi ES Date: Thu, 12 Jul 2018 18:25:14 +0530 Subject: [PATCH 1035/1221] Bug#27301317 : RPL.RPL_MULTI_SOURCE_CORRUPT_REPOSITORY FAILS WITH RESULT CONTENT MISMATCH Problem: Test expects the 'Slave_SQL_Running_State' and 'Slave_IO_Running_State' to be 'Slave has read all relay log; waiting for more updates' and 'Waiting for master to send event'. But, test fails with Result content mismatch when slave has still not caught up with master. Fix: Included 'wait_for_slave_param.inc' to wait until 'Slave_SQL_Running_State' and 'Slave_IO_Running_State' is 'Slave has read all relay log; waiting for more updates' and 'Waiting for master to send event' respectively. i.e.,wait until slave has synced with master. --- .../rpl_multi_source_corrupt_repository.inc | 17 +++++++++++++ ...rpl_multi_source_corrupt_repository.result | 24 +++++++++---------- 2 files changed, 29 insertions(+), 12 deletions(-) diff --git a/mysql-test/extra/rpl_tests/rpl_multi_source_corrupt_repository.inc b/mysql-test/extra/rpl_tests/rpl_multi_source_corrupt_repository.inc index 28275306547a..a9d7c33335bd 100644 --- a/mysql-test/extra/rpl_tests/rpl_multi_source_corrupt_repository.inc +++ b/mysql-test/extra/rpl_tests/rpl_multi_source_corrupt_repository.inc @@ -304,8 +304,25 @@ while ($i <= $number_of_channels) ############################################################################# --echo ===== Executing SHOW SLAVE FOR CHANNEL on channel '$channel_name'. + --let $status_items=Slave_IO_State,Slave_SQL_Running_State,Last_IO_Errno,Last_IO_Error,Last_SQL_Errno,Last_SQL_Error,Channel_Name --let $rpl_channel_name=$channel_name + + if ($channel_name != $rpl_corrupt_channel_name) + { + --let $slave_timeout= 60 + + --let $slave_param= Slave_IO_State + --let $slave_param_value= Waiting for master to send event + --source include/wait_for_slave_param.inc + + --let $slave_param= Slave_SQL_Running_State + --let $slave_param_value= Slave has read all relay log; waiting for more updates + --source include/wait_for_slave_param.inc + + --let $status_items=Last_IO_Errno,Last_IO_Error,Last_SQL_Errno,Last_SQL_Error,Channel_Name + } + --source include/show_slave_status.inc ############################################################################# diff --git a/mysql-test/suite/rpl/r/rpl_multi_source_corrupt_repository.result b/mysql-test/suite/rpl/r/rpl_multi_source_corrupt_repository.result index fe17f3e45408..0139c06b8db1 100644 --- a/mysql-test/suite/rpl/r/rpl_multi_source_corrupt_repository.result +++ b/mysql-test/suite/rpl/r/rpl_multi_source_corrupt_repository.result @@ -147,10 +147,10 @@ FLUSH RELAY LOGS FOR CHANNEL 'channel_2'; ===== Executing SHOW RELAYLOG EVENTS FOR CHANNEL on channel 'channel_2'. SHOW RELAYLOG EVENTS FOR CHANNEL 'channel_2'; ===== Executing SHOW SLAVE FOR CHANNEL on channel 'channel_2'. +include/wait_for_slave_param.inc [Slave_IO_State channel=channel_2] +include/wait_for_slave_param.inc [Slave_SQL_Running_State channel=channel_2] Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. -Slave_IO_State = 'Waiting for master to send event' -Slave_SQL_Running_State = 'Slave has read all relay log; waiting for more updates' Last_IO_Errno = '0' Last_IO_Error = '' Last_SQL_Errno = '0' @@ -194,10 +194,10 @@ FLUSH RELAY LOGS FOR CHANNEL 'channel_3'; ===== Executing SHOW RELAYLOG EVENTS FOR CHANNEL on channel 'channel_3'. SHOW RELAYLOG EVENTS FOR CHANNEL 'channel_3'; ===== Executing SHOW SLAVE FOR CHANNEL on channel 'channel_3'. +include/wait_for_slave_param.inc [Slave_IO_State channel=channel_3] +include/wait_for_slave_param.inc [Slave_SQL_Running_State channel=channel_3] Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. -Slave_IO_State = 'Waiting for master to send event' -Slave_SQL_Running_State = 'Slave has read all relay log; waiting for more updates' Last_IO_Errno = '0' Last_IO_Error = '' Last_SQL_Errno = '0' @@ -325,10 +325,10 @@ FLUSH RELAY LOGS FOR CHANNEL ''; ===== Executing SHOW RELAYLOG EVENTS FOR CHANNEL on channel ''. SHOW RELAYLOG EVENTS FOR CHANNEL ''; ===== Executing SHOW SLAVE FOR CHANNEL on channel ''. +include/wait_for_slave_param.inc [Slave_IO_State] +include/wait_for_slave_param.inc [Slave_SQL_Running_State] Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. -Slave_IO_State = 'Waiting for master to send event' -Slave_SQL_Running_State = 'Slave has read all relay log; waiting for more updates' Last_IO_Errno = '0' Last_IO_Error = '' Last_SQL_Errno = '0' @@ -415,10 +415,10 @@ FLUSH RELAY LOGS FOR CHANNEL 'channel_3'; ===== Executing SHOW RELAYLOG EVENTS FOR CHANNEL on channel 'channel_3'. SHOW RELAYLOG EVENTS FOR CHANNEL 'channel_3'; ===== Executing SHOW SLAVE FOR CHANNEL on channel 'channel_3'. +include/wait_for_slave_param.inc [Slave_IO_State channel=channel_3] +include/wait_for_slave_param.inc [Slave_SQL_Running_State channel=channel_3] Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. -Slave_IO_State = 'Waiting for master to send event' -Slave_SQL_Running_State = 'Slave has read all relay log; waiting for more updates' Last_IO_Errno = '0' Last_IO_Error = '' Last_SQL_Errno = '0' @@ -546,10 +546,10 @@ FLUSH RELAY LOGS FOR CHANNEL ''; ===== Executing SHOW RELAYLOG EVENTS FOR CHANNEL on channel ''. SHOW RELAYLOG EVENTS FOR CHANNEL ''; ===== Executing SHOW SLAVE FOR CHANNEL on channel ''. +include/wait_for_slave_param.inc [Slave_IO_State] +include/wait_for_slave_param.inc [Slave_SQL_Running_State] Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. -Slave_IO_State = 'Waiting for master to send event' -Slave_SQL_Running_State = 'Slave has read all relay log; waiting for more updates' Last_IO_Errno = '0' Last_IO_Error = '' Last_SQL_Errno = '0' @@ -593,10 +593,10 @@ FLUSH RELAY LOGS FOR CHANNEL 'channel_2'; ===== Executing SHOW RELAYLOG EVENTS FOR CHANNEL on channel 'channel_2'. SHOW RELAYLOG EVENTS FOR CHANNEL 'channel_2'; ===== Executing SHOW SLAVE FOR CHANNEL on channel 'channel_2'. +include/wait_for_slave_param.inc [Slave_IO_State channel=channel_2] +include/wait_for_slave_param.inc [Slave_SQL_Running_State channel=channel_2] Warnings: Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. -Slave_IO_State = 'Waiting for master to send event' -Slave_SQL_Running_State = 'Slave has read all relay log; waiting for more updates' Last_IO_Errno = '0' Last_IO_Error = '' Last_SQL_Errno = '0' From e535f5563be9da5231977a922af73550c9ed650d Mon Sep 17 00:00:00 2001 From: Dmitriy Kostiuk Date: Fri, 13 Jul 2018 00:37:43 +0300 Subject: [PATCH 1036/1221] DOC-715 fix, clarification of STWCS behavior with MyRocks (#2410) --- doc/source/myrocks/differences.rst | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/doc/source/myrocks/differences.rst b/doc/source/myrocks/differences.rst index 8536d98e24bc..0e34d9e735ca 100644 --- a/doc/source/myrocks/differences.rst +++ b/doc/source/myrocks/differences.rst @@ -21,8 +21,13 @@ and includes the following differences from the original implementation: | InnoDB | Success | Success | +------------------+--------------------+---------------------------------+ | Facebook MyRocks | Fail | Success | + | | | (MyRocks engine only; read-only,| + | | | as all MyRocks engine snapshots)| +------------------+--------------------+---------------------------------+ - | Percona MyRocks | Fail | Success for read-only snapshots | + | Percona MyRocks | Fail with any DML | Success | + | | which would violate| (read-only snapshots independent| + | | the read-only | of the engines in use) | + | | snapshot constraint| | +------------------+--------------------+---------------------------------+ * Percona MyRocks includes the ``lz4`` and ``zstd`` From e52921d38fb15fca7b1a1bb8e1837b587a0ff101 Mon Sep 17 00:00:00 2001 From: Sreeharsha Ramanavarapu Date: Fri, 13 Jul 2018 07:13:23 +0530 Subject: [PATCH 1037/1221] Bug #27973409:GCOL: INCORRECT BEHAVIOR WITH STRING FUNCTION Issue: ------ 1) Create table with a string function to populate an integer virtual generated column with an index on it. 2) INSERT IGNORE INTO t1(c1) VALUES (''); The string function returns empty string because length (last input parameter) is zero. It does this by manipulating a length of the constant string input parameter and setting it to zero. It is important to remember that for generated columns, Item_func_xxxx (the generated column's function) object is created on the table's memroot and thus has a lifetime beyond this statement (i.e. until the table is flushed). So effectively this statement has corrupted the constant string parameter and its length is now set to zero. And will return incorrect results for subsequent statements. This problem isn't restricted to generated columns and can be seen in simple calls to the string functions also. Solution: --------- String functions shouldn't manipulate the lengths of input parameters to return results. Create a new string, copy to that location and manipulate the length there. --- sql/item_strfunc.cc | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc index 2e813f5a4bc0..5c0c423e1c84 100644 --- a/sql/item_strfunc.cc +++ b/sql/item_strfunc.cc @@ -3708,6 +3708,7 @@ String *Item_func_rpad::val_str(String *str) char *to; /* must be longlong to avoid truncation */ longlong count= args[1]->val_int(); + /* Avoid modifying this string as it may affect args[0] */ String *res= args[0]->val_str(str); String *rpad= args[2]->val_str(&rpad_str); @@ -3751,10 +3752,15 @@ String *Item_func_rpad::val_str(String *str) const size_t res_char_length= res->numchars(); + // String to pad is big enough if (count <= static_cast(res_char_length)) - { // String to pad is big enough - res->length(res->charpos((int) count)); // Shorten result if longer - return (res); + { + int res_charpos= res->charpos((int)count); + if (tmp_value.alloc(res_charpos)) + return NULL; + (void)tmp_value.copy(*res); + tmp_value.length(res_charpos); // Shorten result if longer + return &tmp_value; } const size_t pad_char_length= rpad->numchars(); @@ -3776,6 +3782,10 @@ String *Item_func_rpad::val_str(String *str) } /* Must be done before alloc_buffer */ const size_t res_byte_length= res->length(); + /* + alloc_buffer() doesn't modify 'res' because 'res' is guaranteed too short + at this stage. + */ if (!(res= alloc_buffer(res, str, &tmp_value, static_cast(byte_count)))) { @@ -3836,6 +3846,7 @@ String *Item_func_lpad::val_str(String *str) /* must be longlong to avoid truncation */ longlong count= args[1]->val_int(); size_t byte_count; + /* Avoid modifying this string as it may affect args[0] */ String *res= args[0]->val_str(&tmp_value); String *pad= args[2]->val_str(&lpad_str); @@ -3876,8 +3887,12 @@ String *Item_func_lpad::val_str(String *str) if (count <= static_cast(res_char_length)) { - res->length(res->charpos((int) count)); - return res; + int res_charpos= res->charpos((int)count); + if (tmp_value.alloc(res_charpos)) + return NULL; + (void)tmp_value.copy(*res); + tmp_value.length(res_charpos); // Shorten result if longer + return &tmp_value; } pad_char_length= pad->numchars(); From 66d3c8fcdf057b1faaedfbfc7fbfc15fedb9db1f Mon Sep 17 00:00:00 2001 From: Allen Lai Date: Fri, 13 Jul 2018 17:34:56 +0800 Subject: [PATCH 1038/1221] Bug 27577612 - CONCURRENT SERIALIZABLE TRANSACTIONS CAN INSERT INTO AN AREA SELECTED FOR UPDATE Followup patch for this bug. Move the new added test out from rtree_concurrent_srch, since the new test is only for 16k page size. --- .../innodb_gis/r/rtree_concurrent_srch.result | 35 ---------- .../r/rtree_concurrent_srch_2.result | 35 ++++++++++ .../innodb_gis/t/rtree_concurrent_srch.test | 58 ---------------- .../innodb_gis/t/rtree_concurrent_srch_2.test | 66 +++++++++++++++++++ 4 files changed, 101 insertions(+), 93 deletions(-) create mode 100644 mysql-test/suite/innodb_gis/r/rtree_concurrent_srch_2.result create mode 100644 mysql-test/suite/innodb_gis/t/rtree_concurrent_srch_2.test diff --git a/mysql-test/suite/innodb_gis/r/rtree_concurrent_srch.result b/mysql-test/suite/innodb_gis/r/rtree_concurrent_srch.result index 600bb5e9d531..8e42d9faab48 100644 --- a/mysql-test/suite/innodb_gis/r/rtree_concurrent_srch.result +++ b/mysql-test/suite/innodb_gis/r/rtree_concurrent_srch.result @@ -323,39 +323,4 @@ count(*) drop procedure insert_t1; DROP TABLE t1; SET SESSION debug="-d,rtr_pcur_move_to_next_return"; -CREATE TABLE g ( -id INT PRIMARY KEY, -p GEOMETRY NOT NULL, -SPATIAL KEY p_idx(p) -) ENGINE=InnoDB; -create procedure populate_g(IN `rows` INT) -begin -declare i int default 1; -while (i <= `rows`) DO -insert into test.g (id, p) values (i, POINT(i, i)); -set i = i + 1; -end while; -end| -call populate_g(650); -start transaction; -select id from g WHERE MBRContains(ST_GeomFromText('Polygon((100 0,100 5,105 -5,105 0,100 0))'),p) for update; -id -set innodb_lock_wait_timeout = 1; -set transaction isolation level serializable; -insert into g values(1103, POINT(100, 1)); -ERROR HY000: Lock wait timeout exceeded; try restarting transaction -start transaction; -select id from g WHERE MBRContains(ST_GeomFromText('Polygon((100 0,100 5,105 -5,105 0,100 0))'),p) for update; -id -commit; -set innodb_lock_wait_timeout = 1; -set transaction isolation level serializable; -insert into g values(1103, POINT(100, 1)); -ERROR HY000: Lock wait timeout exceeded; try restarting transaction -commit; -DROP TABLE g; -DROP PROCEDURE populate_g; -set innodb_lock_wait_timeout = default; SET DEBUG_SYNC = 'RESET'; diff --git a/mysql-test/suite/innodb_gis/r/rtree_concurrent_srch_2.result b/mysql-test/suite/innodb_gis/r/rtree_concurrent_srch_2.result new file mode 100644 index 000000000000..b9345e572643 --- /dev/null +++ b/mysql-test/suite/innodb_gis/r/rtree_concurrent_srch_2.result @@ -0,0 +1,35 @@ +CREATE TABLE g ( +id INT PRIMARY KEY, +p GEOMETRY NOT NULL, +SPATIAL KEY p_idx(p) +) ENGINE=InnoDB; +create procedure populate_g(IN `rows` INT) +begin +declare i int default 1; +while (i <= `rows`) DO +insert into test.g (id, p) values (i, POINT(i, i)); +set i = i + 1; +end while; +end| +call populate_g(650); +start transaction; +select id from g WHERE MBRContains(ST_GeomFromText('Polygon((100 0,100 5,105 +5,105 0,100 0))'),p) for update; +id +set innodb_lock_wait_timeout = 1; +set transaction isolation level serializable; +insert into g values(1103, POINT(100, 1)); +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +start transaction; +select id from g WHERE MBRContains(ST_GeomFromText('Polygon((100 0,100 5,105 +5,105 0,100 0))'),p) for update; +id +commit; +set innodb_lock_wait_timeout = 1; +set transaction isolation level serializable; +insert into g values(1103, POINT(100, 1)); +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +commit; +DROP TABLE g; +DROP PROCEDURE populate_g; +set innodb_lock_wait_timeout = default; diff --git a/mysql-test/suite/innodb_gis/t/rtree_concurrent_srch.test b/mysql-test/suite/innodb_gis/t/rtree_concurrent_srch.test index 35b5a27dc875..ec6f496b5ccd 100644 --- a/mysql-test/suite/innodb_gis/t/rtree_concurrent_srch.test +++ b/mysql-test/suite/innodb_gis/t/rtree_concurrent_srch.test @@ -448,62 +448,4 @@ disconnect b; --source include/wait_until_disconnected.inc connection default; -CREATE TABLE g ( - id INT PRIMARY KEY, - p GEOMETRY NOT NULL, - SPATIAL KEY p_idx(p) -) ENGINE=InnoDB; - -delimiter |; -create procedure populate_g(IN `rows` INT) -begin - declare i int default 1; - while (i <= `rows`) DO - insert into test.g (id, p) values (i, POINT(i, i)); - set i = i + 1; - end while; -end| -delimiter ;| - -call populate_g(650); - -start transaction; -select id from g WHERE MBRContains(ST_GeomFromText('Polygon((100 0,100 5,105 -5,105 0,100 0))'),p) for update; - -connect (a,localhost,root,,); -connection a; -set innodb_lock_wait_timeout = 1; -set transaction isolation level serializable; - ---error ER_LOCK_WAIT_TIMEOUT -insert into g values(1103, POINT(100, 1)); - -connect (b,localhost,root,,); -connection b; -start transaction; -select id from g WHERE MBRContains(ST_GeomFromText('Polygon((100 0,100 5,105 -5,105 0,100 0))'),p) for update; - -connection default; -commit; - -connection a; -set innodb_lock_wait_timeout = 1; -set transaction isolation level serializable; - ---error ER_LOCK_WAIT_TIMEOUT -insert into g values(1103, POINT(100, 1)); -disconnect a; ---source include/wait_until_disconnected.inc - -connection b; -commit; -disconnect b; ---source include/wait_until_disconnected.inc - -connection default; -DROP TABLE g; -DROP PROCEDURE populate_g; -set innodb_lock_wait_timeout = default; SET DEBUG_SYNC = 'RESET'; diff --git a/mysql-test/suite/innodb_gis/t/rtree_concurrent_srch_2.test b/mysql-test/suite/innodb_gis/t/rtree_concurrent_srch_2.test new file mode 100644 index 000000000000..7f3f639474b5 --- /dev/null +++ b/mysql-test/suite/innodb_gis/t/rtree_concurrent_srch_2.test @@ -0,0 +1,66 @@ +# This test case will test concurrent search on R-tree. +# Not supported in embedded +--source include/not_embedded.inc + +--source include/have_innodb.inc +--source include/have_debug.inc +--source include/have_innodb_16k.inc + +CREATE TABLE g ( + id INT PRIMARY KEY, + p GEOMETRY NOT NULL, + SPATIAL KEY p_idx(p) +) ENGINE=InnoDB; + +delimiter |; +create procedure populate_g(IN `rows` INT) +begin + declare i int default 1; + while (i <= `rows`) DO + insert into test.g (id, p) values (i, POINT(i, i)); + set i = i + 1; + end while; +end| +delimiter ;| + +call populate_g(650); + +start transaction; +select id from g WHERE MBRContains(ST_GeomFromText('Polygon((100 0,100 5,105 +5,105 0,100 0))'),p) for update; + +connect (a,localhost,root,,); +connection a; +set innodb_lock_wait_timeout = 1; +set transaction isolation level serializable; + +--error ER_LOCK_WAIT_TIMEOUT +insert into g values(1103, POINT(100, 1)); + +connect (b,localhost,root,,); +connection b; +start transaction; +select id from g WHERE MBRContains(ST_GeomFromText('Polygon((100 0,100 5,105 +5,105 0,100 0))'),p) for update; + +connection default; +commit; + +connection a; +set innodb_lock_wait_timeout = 1; +set transaction isolation level serializable; + +--error ER_LOCK_WAIT_TIMEOUT +insert into g values(1103, POINT(100, 1)); +disconnect a; +--source include/wait_until_disconnected.inc + +connection b; +commit; +disconnect b; +--source include/wait_until_disconnected.inc + +connection default; +DROP TABLE g; +DROP PROCEDURE populate_g; +set innodb_lock_wait_timeout = default; From bcf14509fc590326058f029c9bb1115bac91fea3 Mon Sep 17 00:00:00 2001 From: Yura Sorokin Date: Fri, 13 Jul 2018 16:21:43 +0300 Subject: [PATCH 1039/1221] Fixed PS-3976 (Errors in MTR tests main.variables-big, main.information_schema-big, innodb.innodb_bug14676111) https://jira.percona.com/browse/PS-3976 Fixed and re-recorded 'main.variables-big' MTR test case to take into account Percona-specific 'SHOW PROCESSLIST' extensions. Re-recorded 'main.information_schema-big' MTR test case to take into account Percona-specific 'INFORMATION_SCHEMA' tables. Cherry-picked the fix for MDEV-4396 "Fix innodb.innodb_bug14676111 test" (https://jira.mariadb.org/browse/MDEV-4396) (commit MariaDB/server@b54e585) "Fix sporadic failure of test innodb.innodb_bug14676111" --- mysql-test/r/information_schema-big.result | 18 +++++++++++++++++ mysql-test/r/variables-big.result | 20 +++++++++---------- .../innodb/t/innodb_bug14676111-master.opt | 1 + .../suite/innodb/t/innodb_bug14676111.test | 5 +++++ mysql-test/t/variables-big.test | 10 +++++----- 5 files changed, 39 insertions(+), 15 deletions(-) create mode 100644 mysql-test/suite/innodb/t/innodb_bug14676111-master.opt diff --git a/mysql-test/r/information_schema-big.result b/mysql-test/r/information_schema-big.result index 92408c439a58..c3d4c66d591c 100644 --- a/mysql-test/r/information_schema-big.result +++ b/mysql-test/r/information_schema-big.result @@ -20,14 +20,17 @@ c2.column_name LIKE '%SCHEMA%' AND t.table_name NOT LIKE 'innodb%'; table_name column_name CHARACTER_SETS CHARACTER_SET_NAME +CLIENT_STATISTICS CLIENT COLLATIONS COLLATION_NAME COLLATION_CHARACTER_SET_APPLICABILITY COLLATION_NAME COLUMNS TABLE_SCHEMA COLUMN_PRIVILEGES TABLE_SCHEMA +INDEX_STATISTICS TABLE_SCHEMA ENGINES ENGINE EVENTS EVENT_SCHEMA FILES TABLE_SCHEMA GLOBAL_STATUS VARIABLE_NAME +GLOBAL_TEMPORARY_TABLES TABLE_SCHEMA GLOBAL_VARIABLES VARIABLE_NAME KEY_COLUMN_USAGE CONSTRAINT_SCHEMA PARAMETERS SPECIFIC_SCHEMA @@ -37,6 +40,7 @@ PROCESSLIST ID PROFILING QUERY_ID REFERENTIAL_CONSTRAINTS CONSTRAINT_SCHEMA ROUTINES ROUTINE_SCHEMA +QUERY_RESPONSE_TIME time SCHEMATA SCHEMA_NAME SCHEMA_PRIVILEGES TABLE_SCHEMA SESSION_STATUS VARIABLE_NAME @@ -46,9 +50,14 @@ TABLES TABLE_SCHEMA TABLESPACES TABLESPACE_NAME TABLE_CONSTRAINTS CONSTRAINT_SCHEMA TABLE_PRIVILEGES TABLE_SCHEMA +TABLE_STATISTICS TABLE_SCHEMA +TEMPORARY_TABLES TABLE_SCHEMA +THREAD_STATISTICS THREAD_ID TRIGGERS TRIGGER_SCHEMA USER_PRIVILEGES GRANTEE +USER_STATISTICS USER VIEWS TABLE_SCHEMA +XTRADB_ADMIN_COMMAND result_message SELECT t.table_name, c1.column_name FROM information_schema.tables t INNER JOIN @@ -66,14 +75,17 @@ c2.column_name LIKE '%SCHEMA%' AND t.table_name NOT LIKE 'innodb%'; table_name column_name CHARACTER_SETS CHARACTER_SET_NAME +CLIENT_STATISTICS CLIENT COLLATIONS COLLATION_NAME COLLATION_CHARACTER_SET_APPLICABILITY COLLATION_NAME COLUMNS TABLE_SCHEMA COLUMN_PRIVILEGES TABLE_SCHEMA +INDEX_STATISTICS TABLE_SCHEMA ENGINES ENGINE EVENTS EVENT_SCHEMA FILES TABLE_SCHEMA GLOBAL_STATUS VARIABLE_NAME +GLOBAL_TEMPORARY_TABLES TABLE_SCHEMA GLOBAL_VARIABLES VARIABLE_NAME KEY_COLUMN_USAGE CONSTRAINT_SCHEMA PARAMETERS SPECIFIC_SCHEMA @@ -83,6 +95,7 @@ PROCESSLIST ID PROFILING QUERY_ID REFERENTIAL_CONSTRAINTS CONSTRAINT_SCHEMA ROUTINES ROUTINE_SCHEMA +QUERY_RESPONSE_TIME time SCHEMATA SCHEMA_NAME SCHEMA_PRIVILEGES TABLE_SCHEMA SESSION_STATUS VARIABLE_NAME @@ -92,6 +105,11 @@ TABLES TABLE_SCHEMA TABLESPACES TABLESPACE_NAME TABLE_CONSTRAINTS CONSTRAINT_SCHEMA TABLE_PRIVILEGES TABLE_SCHEMA +TABLE_STATISTICS TABLE_SCHEMA +TEMPORARY_TABLES TABLE_SCHEMA +THREAD_STATISTICS THREAD_ID TRIGGERS TRIGGER_SCHEMA USER_PRIVILEGES GRANTEE +USER_STATISTICS USER VIEWS TABLE_SCHEMA +XTRADB_ADMIN_COMMAND result_message diff --git a/mysql-test/r/variables-big.result b/mysql-test/r/variables-big.result index 02908502c8b0..4d0aaa8cd98f 100644 --- a/mysql-test/r/variables-big.result +++ b/mysql-test/r/variables-big.result @@ -1,22 +1,22 @@ SET @def_var= @@session.transaction_prealloc_size; SET SESSION transaction_prealloc_size=1024*1024*1024*1; SHOW PROCESSLIST; -Id User Host db Command Time State Info - root test Query
=Y{y_^+QEk>-`T={NqZC#6=XO z4xnHSfKoHb|FqKnkE^Vz^hk*m#vw;*?$@m#F!7>p9gMdK-Q;iDdB`Icqi*2PY-LIy9hBhz)nd*#+i4SHH(fyW* zI04H138|f8T%-ko?`(>3irW&_`n;>rt!j41lQ0AqQQItJ&v*Y1dv_TWNwXjd8+UiN zVQ_bM7~I`uaCdi`0R|Y{9cFNMcXxMpcZbWoyLZp-`)!e88cts37_HA6$LI1WZC@lRu%N;^+222^t=Q{ec)E%i*O-O7j9)`9*IJ^7^$vdil zNu%|WT%Aa8)t9Um6|l0zyl@S4d5MZ!-#OF8aQJGOo2%HR0VR=1VFv{Yx~Jr*dC63I zlKm7h_hh}cFcsW@xW%#LCg*fFoI&{~ZQ}g5)j@yvv?gv`Hl2dChgB7y!;!>vth(U6 z;2re z9cWErE&jgkh#`okXUjcsV{{mazi>R?KU{IMoGw`Qu@zI7w6%9fIp4AT+> z30c5wJjftx8V;Q< zv4z9IYiOaS7wRR)H<`-aEMj$Vk>-E_g@o*7yN z`$a@41e}zG8cN6BPt-WUmu?gi_)50sTbKK^h{tQ@u*g^)KDa`C(|Lt5D$W}Jvs81p z{0~BVziEqpJM3-M3*1^xgcV3;m!}TAe#^U?Xl!;i?T!=0L&Yey3_?bm5h^pS{R^sf z!wLADjUr+0KqbXa5YCV2H<>c?MqN>|WpWMjok}V)s|Xg7F3V z^X1T1c`OF{73MRHty6H)jocn5Cq5hnInPfjm{BuI(Bj*u(7(>*+jc&kzrM-5x?_gX zzTXGG-2U|?3NRl%Paq(_j|=v%U;ceV^v^F?r;pEqr2p$5qSrrqL|)?jfA1Cjqlatv z5wm~raWv~k%z__*>|coat0A4Oozq|O_k6_vC;Y9~B_$yvMKek{DKjQcBPmTMK|4h& zOItZAK{GhQyd&u^vA6Fha&?`Ba@o6ENSWM=eL0w{4fKyp{W)Ctv`v2ej|>t0i8e@fi@Bk?eHEq<(z zTSp7xe@)~g@&ElV=xZMd|55*&$mznz+CBM??`wHiOsSE^{}wns2^}F}Zute({ByiI zB{0k3z_&n@X~>I1FJjkA3`=LC!dTY5cdUl{p!c1S3cNMtc^hC}a5sVMr3I$Q3E(54 z{c6>N{YX6^tx{KVfp$cwe_ypyLe6Vgj^#jI9!}eO5()~<6CTV!nF!LZ{ziTy&%;!k<91jt55b28T*n* zqg@oyjuIHt$2SfR7T%U>2snn_tCa@ARyEvg7T?lYdsm{)fBakeKJ%?Yw(F(~F8X*oqn9j2FsYqR$L=7~qG6UdcsW&75y8GS%Gv)AykLX_WeCgjXlqKF&B0 z5a|D*B$^w3EX*_gvlxZ(uai#rVg4ul&Hbbk_~SeR`9;5#pF#cG#q?M7fDJ$ZAOH{m z2mk~C0ssMk06+jB01yBO00aO600DpiKmZ^B5C8}O1ONg60e}EN03ZMm00;mC00RFr z1^gBRLH{fU03v#y7n4^3JOBa!0e}EN03ZMm00;mC00IC3fB--MAOH{m2mk~C0ssMk z06+jB01yBO00aO600DpiKmZ^B5cr=iV1S75@yRzIpA7J#hb#C${a^t32M7QJ00IC3 zfB--MAOH{m2mk~C0ssMk06+jB01yBO00aO600DpiKmZ^B5C8}O1ONg60e}ENKqZ)$ z1L@CN0H7;hYcPNZKmZ^B5C8}O1ONg60e}EN03ZMm00;mC00IC3fB--MAOH{m2mk~C z0ssMk06+jB01yBO00aO6|KkPF?=}SfS_?4nUW=^!KmKq42LKQN2mk~C0ssMk06+jB z01yBO00aO600DpiKmZ^B5C8}O1ONg60e}EN03ZMm00;mC00IC3fWT59D9E410L1Tl z?4*CK3IJ>X0ssMk06+jB01yBO00aO600DpiKmZ^B5C8}O1ONg60e}EN03ZMm00;mC z00IC3fB--MAn^Y{phHw%3KR_OBPJ*yETlc@w~4nWYhWOto{vBYga`E1z{x<*&cWD4 z&&Ak5&(6TXNzcL7$kOqvA-$cmp_RFjo~5xnot?3@iZV11C{Zq-R^dl*c7p{120H)+ z0{UxX{BttkB;q zX}a057H1fEM%9iXE?Y{bgLeX3#tvN^*bvuOd1JNldwVUcFvkfBx*i45s3FmZ+cR;U zb6!g!T2Vtlu}seK@Dk_LR!}Ox;={FCkNZyBlcp;wkH192-o^1kV=-3W)1p5iF}5qP z$h}SdH&HsE0%p7w4HW)y#+C4Q6MEf_gJpUpB!8f!1w123>CBAW0Su!Tq^6Y?(#*ir_u z5RxzZ?GHM<=WaEj%PQM4;=<22<1M;>cB%b5x;?_)fLut+51B$wHiOk zapcg;h9a0;q`PR<;gf~om_PNI#y;=ZX{)T^`ItUMAH{@71k(}NUI6ljcB>xeHGAms zJEtTDzF`eB5TS*iBICDnVAK#LWSGgc`bj+c&5e<*2x^-?SMa?`_C9T&_L3#Jx@*GO zm`tqgHKxNsjbT`G4GVOLwCpFjZgzTHk(%0jB%sNlZvlj_Ku^wmV7x~sl8LWgWI{`f zo%1J{&dKdccZY0R<4LoqC)Ki8S$X%0X)7*;SAr*V>ug^6{C>y2FM%q}ZNt~@xy(fg ziSD#@`S)WcbteR3T0vf0nYr^?MS~K(TWg8@+27ccN72(2>6Lheiqx^}=V?t6SdLII zGSU=i=5I2MnsH56AqbOr!^*qjO2cUuH=3qHE-Qc2*Wm{p(zfL6^0{5EFeR_eKUMkS z@xEz>bqmD3$zT4`HdyxKFkM!CjSOi7H4u`qNz=Pz`0mg8h2AkY_%<1uAb(Wz*X);} z9XjR27~J-)60-*pwa1}%xR7iq!mE_k3Leg``8@-aKz^|_YH~;mCO38}jplfP@5Df2 zrNkSC0=_Qkmdb%NpQ#}HNMh7O->la9Mu0`CiGj^l;lBE{#eZf;Alm8KPPG0nmZ_fJb^%^$l&HewuFrByKwXDD z6-|r_*U?QR8nE+)Xvs(<)_c-_RW1L%A^qnUFWvucD*mcc#>M%y#4Y&$e%bz`YB2h!uk;e2zal^a0kvTR z0WtlHvCGLTOUTJ8(K38Im>B;`>rW%}-!w$0YEn_lY)EbA$KrJ_7FohBvEVRP zDTeIg{t)1TQgNdxC@L{kr5La0>BN+pS2i(Hlfsqmq0BoiZMG&iOivBlTmgD4O^J`X z?X8htjT%aFV_?}DJ=|}Zn&PRblCtgO7q)-L73Gjk!4J2G<8=Nu`DyrB>F3X%iWgH6KV?M*Z%O?fU3HqD zTN!{SXZP#p3Dc0y)oN@CiM~AOgsGla#lVaT2n0ue={lyJ4zXH@obT0eiEgob$}>Z! zKyI~^A&$D8cS0Nf+%N@>ubUVH)%ZC8KWV_{xGi<`? zx>XHYsR4U5c^Q21H67{aMCUcC-j3=pl@J@E-Z?R-h}pY}O?cE6liuJ4uo5KQ7=@on zii+UqP*Y~&+OyFilysf;b}pM+z^?4+1~{T3uFe^~b#df|d6%;@FLEYPuw-WQ%>roP z{4u=_jcH`C(J8q%G5nfyO!#ehD+#SC}AY(O_z@FwTy19lHC~WWyo3~Zl9^k9= zhTx{tdRct!#!Gi%OYisYDv?1W7Qh#AGGPv!yL2XT>xFms#gA#pe)K8+s^#g`9llOJ z#tsK6>|5dvQ86#pXv5xpy>nT+z6Gz(fwzY9<=Fwa-9 z+JrYhFAh{it=JPVsC$wKL`_us%I5`~Mg}$WCiMdImNeS!Tdxe77|yBDC$Jzx@{OZK zI;6CT0FYq>KQ;a9!bs9wy8~GN6u|*~Xrcf6o2efbt91V{|r8rQ;SdR#zDsk5eBrGuj!S7>!2uI79M4_USW0TwXPqLuO_7`deDXCD;at?~5md6n%z-)<;!#Q-O)48m*Q2BY~ACC*-6<$zwftAoivsbO1A zVP$UUnrDQ&u;b?ok0d?1P>36R7URyq=-3aROePnhFdVFCXKE26ReYNYXbxy5g zmJM*b7K+WEdWhf+BzBE2&3U3VJyLgD^P!8FdG-P8~31K zsE9wt$QI9}t1Uv=37p?k*Z?tCywK|$M00dQvgK;fw@ZOrcJ-#Vdjk-k}$x$)Wooweg)=yI>^lg=KSd@T%m!Fn*tQ zN=d-TXI~~W9m}tTa!^7gQADu<&xRFw1 zHsC;z1C^&={a$7l?CRQ|Sz9^Z--nGWAF?~#AFQQne)bI%#W0AqU+N>CwwWPr%;DFh zXx+ct^J>GwHr-box*Y}|6k39A+~zS?HIlBJfPnniT6}8~F4ri{#>GUG*TW;vq%C?8 zaCZi-8wL&xL{TldHbHo{u1hJOJJ#URlher!MjXFr4gJ!Of8zgjoQtqiU+Qv`P4S`y zR|I0-eep*OK^qLnxPBR7L+M8q_(>w6?>HD2It0;yeIeEAK2+4$*U^_bb+7KR%LZgU z=|sdM463vA)JLmE$P{9wD@vdN=$ruQS7%^9$xVL3TfwUUha7E3*>QOil=cq@RTh%v z!+Xo@*QN{IIZ@wn%jfLcRfE?2E?JKZTL@J=<|8FODLrpTyyin3to!+vf+A0S+ZS_chbEX>W*M(ZBTQ-Pf!$ zTvOk#ZLZDMc*@zwk4M{^)?PsW(enOj*Abx?_xnB;C+C9$0nz=7E$?3~E(@Kbqtk!1 z@PAtQzje&>m1WFO1<`z}Q%y$i*sW!REq}&r3EGKUW%uhBvLlzW`>K;IN;JFpcAex| zqw!FRcLuUYy=4(~R_oqu^v0qIB88J*9*K$wQa+eeuY#G=_WIl2pL(sgCEu^LxR-b{ z6WM|Q{p5*LPJr2mxg}xr>!9GH4#ch&838^R>~szwB$wdV#L;B_N&y+(lrd_N%OK~M zC!_Ai;?INxuWm~wC0>9DK`uybnP-a zJP-~JI634wk5(wJZVyHU%k8&D!uGNkZ=7^U0=VV~_3ui&b|t%uY%jA)+V|-wg5@t; z^>v{x{QP28sXC63xYLx#%4$N*Lez9PHC;kBN`q8%zZ9qnt>)ZGd1dbs=D^E2k8AcC zVqp9AsJg!U{+>?&^(wnC*$+k8i6t!ZU%v3tG|Jd!D>OpIVt3v5+Or>qNzL9NNbq#~ z{ptEhngRQpC~Gx?tqzBE>DYuKve=Ey&kchEu(#y!YP$w!&K3!Qf2z|zY=5mX@#l=jaQD_Q1FsFe& zxVu{yOR5U3p{@y88Hq|xZvCZ;M+S%6$&2)%39Te-_)G5Z50xV>Pmay+T<-862E=DXy2N!z zZjhafBG~rW#7MZ`AipJkL;O|_1)Ay%VUN*?%#KXkgW1DIQjRgu`dSIxUDzJb6;wNL zE-Ycnm%2@#CCAFYW?&D>M+~jA(%=zQGg9cf_we?kxGW+wb={Vi|Mu~Y@E=#ppMEMn zNdY$MM?bao|7Smyk@Np~KUKDO4}UEB`l&5>a`<37@)*iz@<4ab^YxA^=Er7Lq$J(K z&e87d@PTU4Z~c%iL4&AV#iFnjadw(_Vhga`6w$DFX;CpTlYSDH9F@SZEO`2hCjQBC zv=mCVo@Cl2k09!018*(B<{gxK#$+x|pVmf>&LKu{kPPA~$8M!8~(%(+V_+ z8P zSaWoo_MCe$8t6EcDt41UnieiGgX(g32)pz}3OeQ%N`;V{gqWzIqy)M$k$5h#y^1hS zK?7KS=VEX;a07)vSP-!pM7dd*X_x?bV*q{=O7AbFX9-(yACNd0v3@| zQg0R-!%lV^(4fCfx2xWA8fCN+e*4$OaOjLC!k+7Os<64UUS0$V(^R*bx`F$O=j0*X zE%F+{LvJ;eR#;IyoQ~o%is|oE(ba^TY_H;{i1}aB{CXT~%XU>p$F*^)yD0n#@8~qO z=tOW2UCpKt1muh~nLG-o*+2h%1D$>6)mi*1Wbe5&#`^RUp8hR~W1RsG?zM6cyF(Xu zw`mn_Jhp%SEe`hr^SkV^kZRBL*6?7c1G9LP$jcVLRS$0nRR%Tm`DY-~d(iBN(&ytYH-V7w82$J!72F*f@NSd$ct#~SB7T#j#fXf-9oT15YIT%MG(u( z9n#4DG-SYRgF(J&uerf>-8Dx=0arP2fcn~#xv&mSTD5{i2Q5vy9)375!5Qc1+Z!>F zej3l)2oc2@67gC{wZx%`U{RK20&{f+R7lUvZ!wfDUdITjA|ePy!?A6Zz*k-}-qR6Z z8O6$tGLL_OhZQ)8)iZotfbSQA0a;e5pxNfXa@B$Bf9dXc+;4i5qyO1D*xdk<(K0VU zqOsR0YLhSoY$tC=K%02ecv%Y#0EWyPF zg6ZLQqSJC#U?(NFL#R1L6V63?v&PAulzg9{N_M+EH0W@U%w{CNsJ#~T_%*|M9>|xg zYl>E7DC{j(zrN^C?A+{6-a`w}lot8|bEQZ>6uilZ{Ot~0nXfJ)@l0ZSTv#=_tW_~1 zJBX#(=dI+%F^WG&+c&C@RXA?-Jk0$#WYVEcJa(&;{n-gVKWDwvC4f8S`fX$QSJwkR z4SBb2n>yL0MXmTVNw5Dx_pgYpWm=_00eCgsl};Y?z#$fb0=Ib^;O|b{`f;G7QxbO5 zi@D`Hty{Nl5P_z+53q{zjJ3ut5gHpgT3lL7hj0Oc7jZux6}*)R#l#@6caPIh?2G5tO*`F5G$5NhNWe6Lq$`=QpG;k;k8b zt%?0fFRTP@e}$`XrT)6^P0HW@TpqW`{|dor(@}nUhT%fJis+2xXkL|4P;LM}v^D?k z)A_=X9H<+hiUt9tyFs#FcVgQHyxOpFfQzniHN9b)$p%quXw5;F+<*>*N7P>z3w)(! z)V=t2c7LbRnfVX{`SKaR`(A`<^1v*GL1WEPE zu~g2J`bCR2&2rO2FJ9*#7<@e4_XGs^t`(3myvJT(fwaA$%i^8aHb~go`^M~&9uHJd zJb{fq8+CgcC{d&uIOUi&q*#0dtNON8tArTwucNP{Rw>JSu+7k3MpdYXlq6vFb2sKAT6E(X%L76;S-6PPpNmHn>@8Z&1LO|BzCMg>XYBBeyx`W-yL^(YGA(d zmY;^sxrE*(z;GYBw_&T>kNlQai9FrQ#H)Q_DbL_XI}SB?`?l#JqE>`hC{2}}KzwLgQ~|IGmRAA)~N;ZF}_cd80 ziEd&rgV35to1pnaL4}#GO*ef7o+XE#BCm|o0@=xnnb|^VMG@Ww+64g>bNS{#KxAUN z6KIzN?uP*Kw=&!bD?wuPal?iDe|y8l{C~RPD*g8xuGqYSPW7ognecp~97ynfRd8Nt z$yWCX7{R!vF%!M1&(+NaE-_>oEl^Y>P#zaW89a9+A5}oB8Dhqbs;%x1A~cb8s~DNM zA}IWanBCU%SMO@uQkel@pido)Y%+)>>He`L4Y+f}jgTl`*9~JiD+XTzcdIXgN+iM> z`e1l1lVyxI$!@Ci2-qWmI%y%UWd@^sanP2SLMb^BSX!ZY`goC4yQ?O~4 zg_MP~?Aa~qgoPaybo8@Pq`gQDI80bCiznM1HQpSKh|tp`(ZJ!9aMSa5(Lf*<)h4%c zOVV1Ou+RfM<*{a`G~OY5%Non%ZID%-?Y58}HDt4*H!i%EE1aun>H z9U&gR0?5tL*IrZOGImbfX#m) zWwel!ebNu1+!o zH4aq{Rb3$9;r+t26Wcy2;t|iaefgH&e5E&Oa`D8+B#P;oEBVpa zwrKIv7FW-Yh$e9gnpKKG+7?9ZB>@~Iz_K)|}dJZ_td z^H)F3$BP9D5fIab;^!bHU4@!KocC@-6LH85gdQ_I9ZUgG>k-wK$c{;Sr_XIT%sXDj)iX;aZ;j zF;QgMIwvA|0h3@h1DY`z)a7pTtDKS@&2l<@gg#e8lne(SbdHGdt%3|r*3aHAx18KN zRC&5TMx+gAm@R>rQE64P8La$&g(y~x~%7u@!AShUUdbtz) zmDaHhW>QU~z>lZ0CoARIh*J{uQvvu0WW+=!EI(?gfy64cPA3&(2=eM7sv}z=M|ilo zI_yc2OswNg%Zvx17g8J++2J1RE~N2qYCVuSLb>%KBa7g5 ze7?4Vtq)ol_sGcenQw>-8y{`*Y*vbXND&+57>^z<*DcGfwB&Fcj1 ztqu1#f13_RC;`{~{Ly~>2{iv=`z0ar(PT;}Yy7jO*@V%Ak)551lh)|t2Q7;UGb1gh z5hn{RtC6uG3p*nx0~Z}0PC@-|*nW`uwkl}k zl|Wm`XBo+Dj5Dl9+7>5@)p}-6@g~~lbHO&)DV2oP7px4P?+i^et~PJ>?8>)ysi3@>?wK-Qyzx;CQN2_V^x1&@rc?F!yxiPh zQ*VBLCysa=zP%kM+l|s1?O$*8mur81(R%cHY{u&_2k~-yyj)$*w50+W zTGumsFp6b)K-4ZskkPef;*Z}{{J~~#3o{T0hTPcDLQxPs61bD*70FCbN;oeiz&FnC zB5KD|q?czdwv!7r^~?&bU!=SCyq4AybSARl+d&G(EeECMuAV$a>0K9grod6OzfR?2$2{$`|W+3Yv>MYO0blNt|kjvcWj`vXk@WMFI z(_eTg1H<|C4&nIuSxt$2W`aH~8eh)nRnoH9wa}mI zWG2~MB|{~jV6*S!JD2}9#U-eETj`9?Gdp&ZUTn4 z0$t32O|@ddu@-zD_SsxshlJKS{jm zGCmOPO4YABoJ$5Mp&X+r&1f%pvImxBxFHl-0RfhN5 z9_|?6n~sz%izK&0{&YIMhNrt7N^mNx=tF&KO|5&nboiQt46~PknN};tJZc_dCW$Te zj3|1s?h%_N&<8h>`r{`t^+2sKsyYr3{v4H$b~=y|xq>sY=C z+Co&5_NjnaVe(&fHeK=kpizg3ZPJe4wre#n?syi_&&is|cL}$uwke$O-1DQpN$H;a zX;yu2-)$#*?}u^6lfW#HZ?GBcwy6Ube(sYTvS*am3Qt0R0&P$)aO0&M zJ*P!KI&geEk3=+^(N6g;sZW=QhdZ#mMprf%GSM3|ojCmLcBseK!3UKy?7Z`(`fD{v z)^I<^qlY`@*TjmIj{a+1JI^HT0*y33S8t6x?V|VY%$zDnZnoy6(K4rg2Ae@=n;pR~ zv7#vS64)7-qGZ{9q@PyMjB;X8bjJg&qn%eU0VVa1d7u*r>)poX_2i7*C$w( zRoc-IObj4I0+if%GZS$cl^Js&qxaqU3f2G22Heww=TnH-so z`;wB%IR~_#@L#ex5}P25c+W&eHALxuS$W<#ThsBcgedMxcNbC>+zHWqH1MMPLO~GN zEIJb)yi;E_Iy6q$cJJ3{*hA6>*G*)Lvq5^v^|?H!!&X5XDn~#hXb*g20fG~jePuwa zYxRD*C_V>ER@wuS z5rsB*IE14{V4Y@s>3}Wlv`W~*+VVSiK73>FHj|;ZS4NTZ^!3uk$pgthe_S#i?GmJ; zE%!zoej@|%6_P*5dGt=S=oV-ZDUucIY_7jYWJl17ucA$(s({vN_ zRF&9GYC6)dz{1P}tcDM-COc#<%8zY!q7Qi@0cVK^WJy)H-ey!xFXa84wP6-`PnMXX z2Me4!Mi<#hg4?&0pfv5)-omqHA^u}pzswo+5RJ|2rGoi1OEkmg45&UqbYb@_o!46 zKJD?d%sOCVhu}?JYdZmcNx?ivY36}`!_(9z2o131GcFhgf$J_<8>jFIbvo8c%2G_0 zrZsn=6UHRddl=UR6s_r}&Fz$;?bIi*5$b93DOnY%6S-qvq(s!97J~|?Ffnpz&j12p zMA^2u-m+R<&^cZmK0DU973TULn+l)lC|#rFp-43^=j%j>xMJB8G$puZC=7dDo?=N~ zbCnAt2m6P2X+_Dg!dkNqzO6oziAs_47(7qo)7Gcnd4kA2*%!(o3Yl z36E|l=;$sLMt4b!SW?C~Xekh=JfC#Zo0VH^DZTkdpr&IKHh0ioWa+Ci|5jA?Lrcd9 z<;%slqb0hX%~@8m+uOU+GDdgQc0V@(=O4A)u8?Z;3uVIWA5RLkn_G)4rKjY51CDSk zEr0XNIR6;LIa*Gf_nBoaIPz3OoYeS;yv`NfF6sy;wzic}PsgZ~_nf@2tX8RDpVsg;I*xFTXW@M1KO%nG3YPKEceXbDhN?23R0ID0^&=;DqnTw*eLZz| z(;t6ZnD=Qq!a>Ddk^9KMA@}oPk!8Oi^+!}EvHUt8`D7o=%xUWLU>PL*I3C0LmYw~L zkKLa)L>cxU3z6IBG&k0)9?9J8!@H|1&se_q1fh5nOrF3(5)xR!Ati^~|D?~S|< zT8k~y7rv;@CzZ5TefRNl{&9Nuim$6kel!^}^=Wn6m zCPSi=&z@*qHNCF#U7f7r=J4)o$KVJ%4BgsFyO+icegDPXqg1$3Xg22a_MXY__%NND`PC+e5!i}*P6MSL#Yn~!RGVwWYs+Y6jc z!u}lb5T>NS}KX z4}CWoU1BdW(Bv*Rf)gav(}s|D*)|RKcE7`0UrK0E@RAM7{k@|cMKqgcv7IoGdmfBg za0(2H)Ht2RkN5MWuAmB6sB9!XZK%^q23cHt48vGjp=464aJ#{lGLD%cY49iGMh#1MnVUy@6re3???!JrQ|pX|FnuL{!>{Li;LtU@`r9&D@;>v+bArn~!yUXEQWt0D4J zDbsSZh>v$2CCJ+x(8dv>G&&xU8!6e=$mSQk7td;puq0S3HrAyN zi9M)p<~&*P>imv?IM%Tc8Ib=S4sSxBi;{3zp<-#|H2ak@EwBQjSlp~jSEmg6N20eBmdnr&)pD$UN_=%sU#(?77AdvU zU0747kz!tDinUjYY%kx*s;$(IgwHxG;TJLzX`i?~y(t=r??jX1p5^r&vHE*g8Hpb( z>|N(AGJe&!I(APv!BXUN>F^jj!J44Ib9uEj?)L+(9N+UL_}% z3tS=L@=7MzpTC#x%cbKB6NrtMWN>lc(I#=o{I!>EIt4dG9-Kb|fZNHU_kJs@ctR3W1@r4ok=2C@?`>mF-%XW<>{$!_);NSMs^3M1x zwG1g<5^k{{)Ui6rec%tasFyl7f=x>en9-qXO{(X1PY3*}3dDo$YtFJ4pS{O6Ge0IDaKDv4J+in}z>F&q`})4$gb6_TR)05H zzLSy?qN%!Ph3=ksswX|D!vhkkRcxcMF=XDyT&)sH(n`L*S)3#oC-bkOS}@dYe( z{PLG`ou;YnrRDJ>m?Sp{Cm!%Vo7DIF4RGR2Rr$VU;^nhBLMg$-k$K{h_`3c&SJuLT zYey6aO~OZLp7#FfmdV=5X|*zVI^MNMO*&sX))TezQg59^hm8p`$ko+~idJh-LgSjF z5Z0sB3eMHqI}^C{qF2?Mu`SjIFO&;v7yJB&9L|QEPINaiS++ASaNy3*-%#G;t~Vpt zP*Iz$$sU%Y>1z!AcO5TdZM1(1A)Ur?vpLsvn*b5iD%fOAT_zF7c?r&FJh#lW&HOkP zS3i0fT(X3}pj@S(&z_I?bcE`n%h%$q1AF#j-xsw{$+u5L`&h`=i{3qwT}8sFGh(sD zdxh#6CWYGEu-8edPgm{|m2gkcVs{!&v#%o2V z>kZM-WX#|G6qtEIfh;*UeH|8hx_3$iipWw+;gq)!Ax0-t`rrWWm<#n_uct56ugbYB zzU!{Ow)#2CP7a2)Swjn<47O>;PRaE&i6sH>eM%!#y75h@$s^ZKp3D-gqxLtQ$!QgQ z(z@2x_i}L~!GQ>=Cz_#E+><5y-n6iip_ayl*5$g6ovw*fpAoIR-p-~tsW$pDwOC;D zmsjmTYwkw-v5g^_EuxNwQs&0cVx3yGJ=~;83aqYJ$g;5_FjEus%1}60M5Ws0bFAMt z525S?wtGSkL~LCj1!eo}ZqY>-RLV0DQQUz|MP09esr^#O*B6DsnSZcF+7gUs%{W`G zxD~X;HLNm6!I?*Ye|bi{clmv(VDvmy;Qm!SupH90p9L+VT^U}pj?qSbnhpQd=38N; zCB^K>i%!bxFaIs-l+gwgsdN zVPIT5(7&K^4`Fj^6Ly=lEU+hR0DU)Qu1y$2$c?j zyaoy+mWc5rG7Mjuz*{L&O69ClW-R>RmeBWDJ-xPZ?9HRh1)L-z9tjA(n9iQ~dP~=E zP?;@o=)h1eKf3Q#PL^?1_^$La3+?Rp$8fkm%LYcmP52O#h-?B5{~8~22K)Ibf`oXE zt>?O}-P92Bgu@!evI3`)=b(G{dfONHzfSjDP}|<^qXGflx&Z<4{Od#4bhcJs=@?m= z89103**RF5SQ!}ESpFK%{xk9O-%NO)>S#G`vsL-X`hX9)Cl_8Vw0zI=$}k~IEZyxL}tj^;_st5>Y#>Ps`a z5Y@@rY10_@d{T1?(h>)WaWBrOsDF)VZ`1*2<=21I*oUX{@9{iL(=5%e1E;6>8UYgl zB9x6yZ74FI4dV1-noDksuH0i+kWOQKPeKN=_pJ}sub`GLT|{4_y+#NYuB|Cy7<4QH z2YuQ~qz)Fg!uH$~JSV4e#}yO;Qd00V2|;y$AvuH31a?TN!YI5Oh^v6XCi+-P=Y7t8 zX`p#@h6RYmP3&+4~lP!D@d?eR}%?5U{?=^X3E(8jzD%^#;#s@?$+6A9#6rfB)>W|HQ=9su+t4QgzQAQs5w z6C8!CFQkfL0xe{8mK{VO3xPv7Xh=fyDM2a)acp6)VtpQAu_svfg3xSC5!<_L95fi} zyW`v*6o@9;8kM9JOW&9~k9hKxqA^zSaT>abWG2tqDORtb9$Y>A4uy{G4D<_uQ@IRI zG{r!_^FY=pZQ=TSH6I~P7t_dV>T0270=MH1<1o(l%cwatOK3Z9*GMJhVYTA@C3TRF zk>utphpukE!iy%t`gW!>h)#Z(;fei5F9r&b?T@h%QrP(9 zNunE@A3c4fdPZ)>2#ntPmF&1jLkKrqn$sMT<^$b+LqyCHYIV~zNeBTl8A^6zL1Zhx zLb9K?+`cFg$Ocg!0XO_G!=uVZM{dC{1Y_|)6uxD%3OWeu@gh4P&^-a6odILtoq(i0 za5w=TQL`D?r^$D?5uRel+uo2Lp`ASlyD1`|jZ!z0|eNkX($ z(w@bjK=DPqo^Ku!x=~or5zChN$6*JIA)M}G+;`yDa`;tw<0VsS?WUhQR#~pKW zla~#IZ^&Q5_j0c|Hk`Z;LtWn^=RW1T5WYSjTINl-tF13LXY!lwhEm*a+ar}Nf-+uB zM%MB@h)S&adLvri_FdP{mV-TAE!GOQu3Fp6kO`e*=(p>XR|V*$5YNWJ>r^@qnek9ZwZLD|4{HPT;DW`)nD3|T@jebYA}QM?n-0oKMZmM~OfQeO`#kL4oxz9O zzUn}RaW9<&g|QDiX(_Kx30||GW>U!`sSl#Ofo;k~+Y;+Mr8cyj-#ZkvR|(8%j&{Yx z3kp%F%bed~o=>(+J+~rf?~-cbN14BMKw$vWjYeHh!6P z7qQ&SEG?QMp~D`}{(tdy9dJz~UHm)i-6^7?qEe!waw>udh_u9lU_r6bM2Lup3WC%C zX;z8|u~I~cf`Wn)5d=d?R7wPdh%_l7N()620)&vd-{ReQ0@1tkg1=eE&70YIQ{J@y zym_3!KPWi1-=yz3{jJ&jO^cRn5=_Xj=3Ys5rS-G9=#%z#U^_CH(6+*Ex%*(kCw>bA*( z#_X2^sgE`<^8EGIb-(H<(?c~ge@k1q=%y9zgZagk57%YcMjndh%;()|dV}!%pVBJS zA=i#XQ`phFF4c?Q;-0I{KES^N=iB4<2On~(>g_nIdn-*tJJ5NNrSqNNa%L_m`WaHB zd+6alQ zz#Z836Wj8(SU0&TYXFWTZhrOxi4wp`o1Mbqz34%~ks;7Q2c1$$i5HymERG-D0@+%4(WB8>!R9Mo}g_|9z>Sv%N+iC6NXl<%#njI`LgeF4lP<2u^q zHkC4PrD#p6lHOjxZ2u~mS&x%it}JlA_Eas@>CMI2kB)56JP2`}03=VT4eqmboOI~& zq@dHse$u>I>F4fUczOQH=i9cd@!Ao(aJsDx=GuhKw+DCd7p=am+40lh5!pF{MFm6D zmzRId&Kk6IkA80A!ihV#+BJUHYf(haYyDp94TVp_7xf|D1a3N6eK9W-eze=j zH61G|csw=oV~+PU;oUSuq3woLoh9>e4{CZGR4>y^yVq~(X-jxx$%;QVm-%kag}d{$ zuJ3MoY*%{AM(YAvzns1n;dSY}?JM{A+h-w)7uQm)R?wdOT6*Y+&dTL4d#vojKJpx_ zi|851dmk948@ji5xH+AiJqDrFpr@vcy|~xL*kmFIN6a@3d@O3iA;`la3qcB6j|K@n-xi2DR#PRJ!ikL^SP3z-eo$u)KnyM#7@O`iDt)fgSrE@+L_j-0x^l?9cl%QzqYlo zEXi^}VS+>3ugy&-_bl2uZO!purzu3WZNHt^aIr8mYn#f!+dTH%81KTj)^1OUOXsY( zqseKXoR;*PnpLv5A5-xx&M`T}eSw#Yn?X@7R%Nx^(&&X#Cu)I-LuH`|pMTzAqpA=yYAc^z>oNH*YO`22^Cu-i>X!=@fF+?ad+rjGa9&1YZN zu;a@gl-SyFJaBny&)?U7-Ws#aUMpN?*()aI0ZJD2^vts-gODoKpXR^okW==F4my5G zpy#-Ua^tY9d$X(iE2oBzcZ2JuUrN3ZY;Y8-_O>! zh^=+#CU?CFpJ18CO*%VSW};eGV(w`LSIP!lgH`N4@7eC`(+Uj>@(KToMaUmcTKdz@ zlgyf>i(~}rpVJ2Wx@RbCefR3lVi}DFXA3`zP~*uJ8r!zxx#}^IO9wwx8a|Ny&A#&e zfx$OJmwkUB@jHAp`j+Os`1wicUKiim&8klmQ|q{`Xc%v+y@;<>VV`b!)#MysN7pAS zXSx0gt4I0#c4ex1s+P&JUUcbASLfj43j=EH%(q+SH{ZwYh*WcSEn~Xf0H}xW8WG-Y zy1vcO++_P^IsQ5Ub82MgUF}UfHb1&_y(nW-$3fcF1g>f0x%DT`cjKO@zQ4aQ>XNVC z)dZ6x{_&pEO=VuuR4T*pFuktdA1}|U%yw`2KqU?Q>pdz*bf+kn?3ozhy=7fkg2~;q zB#q@>RX;bCPEvZcN2SUBI?5w_;k`@m$VO)qB2<*h_NaJMSGvtMU0tT8Sh$3_HGJWV zpl}bxl07Pe9ji}Qu0L@)La6{2kzmpRg=2mSUwFr<9Ia*=_HLyzZ+`f~w5dB*nR-F6f=OUJ;{2o@5&KzU#byRD$IO^KN>=`V%vg>O=LGo|)o%g4i@MH$WZ6mSAcF!c^=t8dSGDh!S0`l)pj~|3 zaN^Fg8{SL>*MQPj9Fs}J2vwDo!U2CJwUp@ny`9{*r}S?8?~u&;y40CA6B|iW%XN zd@)wrYL5Jnxl5#-c>!L}Dx$rf79ieMKL4@WX$`{k`R$LgY0mup8q>Ee>OwsO!j-PQ z*SI6tR!ewA*!JWDJ{cNr=ef)!y0mizc2;>TF(LN8Q`sZNGv}Mt4<3hLMSbC?;f-#U z|D&!tWQ*zY=W2HSn!X+zRJ^O!3ckqUFyUYU!8JQ{_Vy!XRk5`Umz!?y@3Nb4j;?bW zmWe}_ySnr32A%e$>b6Z4Vph~(`wsUkqoZ~$%3nRL8OGo9T7TY>zFjBiw06hIldhkV z%RknMbVX!QTrO1eVpf`KZyFlpV~Kn3a8a_ln2%OkqBsbT+ z09A9mKm+J6Wf-tpBFTO@eV*tn8ZV38*E9M3YqK&PA7uOcgb3el>Kiscb9nB)#wT%^ z5c9&q**5dI-%p5BzgQU1CdX{8194jAv{ix6mNd;nzaS-loDf&s_b6+{bCXlW)fuq6 zJ&&oi3qY0a1+Mw|3OlE3H7UV5i)3bHc33qDxJNr-E(} z#??wc^^2o2tZx0GptYB}X1Blb`>F42Y1ap(71IzH@}ZdCLWY_=w2;dTU6ojPXZxPy zdFU8{xhovaS+V(G|D9EjpVU4}YG`gsfVlfE^uZsaJx%$^0y6WmY;Fw`sK0z{4i56u z2iE?<-mX=r*TCt*@)>RiXIo;mZho{CeBGDR%kJZ-e}} zhrORINj}qSYnj^ncmnh^+$mzp%!|*f&PSeff0ZSG?Iy5b=|TDAiq-3yH#y3~7QdD^ zJar?mxeqcs=**dxI8Tg=-lgNu_9;yXQgAq~$Lq@yFSpM2gYX89Q?;KX?EUIfLMt`B z6iCLAK?1x%=ZXp=UZ4BIfuT`1r|AI9CXt8?T zjFV|83ItP%`Ove(l;vqo*G&p9QV)Avd2FVfkgw~vy<146ys}yr{fM_~-ARYdWt$cB zYwfdLZbZlEbay-Lb-h|ZQNda#zQ1P>-!fsppGM9>d5xhg9HufPQxLTJ#bSDi=dYd5 zD$+NG#cXF#+;`o&tTnmr%)zq8!Us919VKRyJo*|MaLo;tn%Qy+`ViTha)Y#=I5gT$ z4@(2vtLpA6(A@fM$eJ4M?T99D8sQhoYh=cQ%S6IR@tFhdXa8sb=%&x1X@z~ZM40Ex&Hku0FDjB@UVMsxiU}|!=X$Fz+!sVLV&)D zA-~;J)X({O=hOS5-b0!TAEYnQ@zTDyaO%VmnT9*}>&kER^gh}f_R9B;t9+@iS!PR+ z`T4iG-oy;6H}=bVs-M{9C%D|p3m*(P?tZz)M47gct*(%ij#Y(YFvc! z<)UQYmQH3W#*bRjKFNK%;I?d#Kh<#t^D z$lZ!0yZ4ez6ZXNX7S}z{o{^#8*aJf%uO$Zhaf!zH#wy0=%9N|C+R;_o{t%tK98;a{ zDkC@iN{Hz~(}pn3$|lE3)(IUJG4R;x3eynF5@pH}TuUFcYwh5(=95UpYdDqY^t-dd z>M|p0@8Zjj-SzPcc)rx30ovmhuR`0}(`gd0Lw9ZKf<86>a6|JrRgD?`LCh5z(;roK zVEvbW@L56F;cr(YV6@H!-Hld@)@sl_eHCNebfjmt+6|r z{9DVGxvTrLRNR&QD`zA_&UXyB0aS)hzdvma!2n-tx1nirtKHV7pZ(>pAZGc?U&}h3 zd!cppQr7Igc~=lC{3EYsMdj}4i@2P1K9_q<*QDvKZ=6v37|&+@Rs7@-){M09Kz&Mj z1RSbVmVn+U2-?EVzoX}AagAu*M>%3po)WPGIl0H;t^Mi-9m8zP`tDErW~ga5vbU{LvpU2m-gxN)haCGPcA-y5_hHNQ(}``v4?51?IG~-k{mJrcIu`X4Gm>^716`;3dvC30yp2=s`7mP(=I+x2TQj1L zT{?E_m|n&9_-bR9;F{U!>>mn8fciu9c&0Ew~fEe*c`Hi}fZ2ckZm$o)Z+<{ARb} z!i$?XdmQ_1hD_lf#QMp3?pf3o@`8$2#oSKsA&tzyxX^jK6w~f3tSIwce^s@4riK#k z=y|_moiFZJ=Edr7)vHja-Xb}|{SMu3095(+l1d_Cl61%yod*SE-O{&MK{x$Z5%duq z$g{y<>dGLpB8(*&K&BfGHH%@>L{Jfy2J9gV^&`50V|A*VIdS{Mq9l00eKld;4eZS1 z1tKx4tnXSLH&v$kH3r}w<;BP_&>H*G`67BuTVkoI(;fYs;l$?&E75>r@{3P#B4aXh z=OlX#$8oAnF}ItYTsNGKXB&8KO=?qT7(F%G|0#Z(0>0i8 zeZRbii*=8Pj)CPF>}PO>i*gg*Bk0*(_KDsAeOo^#nfr-O7xju^GS#`mjH3}KIyvYB zX1IVtrVrjNRiMlqPKbif#%k|paEB90!#$mGzU%C8e1F$=uZB%N4xi%J4w|F%_NxqM zbS<`*9kkhJ&oKQU_bzbgzWS$RsMrs3jPoZp4%0uvT8N@M2i^_mUyIa2pI*J}QyI$| zDbD9lfS+Q^rs+;dYg~~`+!7M7$t|Cau4A^eE1K^>0w3g%R66Yz01qhP;LG}{CH=6g zJsa&gxf$@=qN^G3h@Mr3{NxO*iNNPLq^s%Y)}M8=hUQji#xwH@Gir?Eep5*fUM{zD z*-aDebH^?p3qGb^v1XR;%8JJO#$E}t%fhy6|AQasmKC}aj?>lEl*4jSczaWOw@J+j zZ4KOayTiJVHZ&q$WwGqNb3@v17!qHoGxe63ulRst;mv<~A!^#^PjI*4D zj_NoN?_=B@lB&XAUvV^EAsD)4U_pFLu=xD3vmNW=8$w812bRU>gfN%!^()ZEva^lM z27aq>i)YP5M|NzB&ojpE$iR2l#7{J)&dS>`FuTG$7_)sqE50^lhFso8@9Q0p-0m(} zf*dM{G2qTPkAWDq4Y|i{d$l6?fN|0+nVCCPZ*I|!={OkgZ!AC4&MYJN*e?}p<4c2k z@Bc?P)Zs{7R|~A}93;O?`kE_B$~5+?`tPopP4E>`V1XDcjDqc-4%PX(Q`Y&4lTrTX zt}L6*V?S(2Xm?AA6*Cr~7JkhY?Ko%pJucMrOV_~mYt5b*8H9nC@bFnf8DDpoBIn`$ zyIbei=u>8TlSeLX!ib&O$3MHy-VtuThLW;0T#{NzQXmG{kOe3~zu{W$;+?D;L4MI#9s+1!jfAVcvBL>y2! zbcwy7MXSj95_LXa6Y7X6`il_7UOVd3F=_o%!m}2S?sr_M9AEV08Uy9wL8%M~`rLq|Av1P#vsR(=Md}><3g|vm;s`>E)3@1u z(9CxXq)f*xP}VX$>i4=g>Z^okzgyz=_c!j)3F|pRjeO@o>U8`9s21wz(Cgml4_YG$ zUr*-m8R;o|8MgbqW=FMXQXHYZq3|yEKn$E+-cMG<>p{Ix?L)8G(JfjO=Wyy51TFi| z--J^XaU&A>mjr~Nn;j5YCL&{6T6yphT!z`6p-#Y0hE7Ax8&d1FSz|xXPp#MbecE%! zGn5Iq$;#6Vzn3rxcP;ZE)}@1c!yN{!>a}^F{(K~_&x97IF}y-3vvJFmcNj+asj;n_ z(+V8_DWTR4)}I76>c>HB2z54o8FU9KVn~f`)0|%5Jc6*+{$Hj&S9z78rQgF|>knx! z9WPLR#eF7(P&CLo9$PxN7D;h{#n8iEn-A$Poi9*-#m|MVLRpR=d^M3Vss0@y9Mc_v zGn&H}C4-|9$dzr=l3wH-MqP;4fx4h-{vzCDKPhqyqb$VfD7zTe_&sD>x1@b1A-jd$ zRXY#0YCv#8>48E$13QY-ITu*41Uo->h6*zqqI2ICf7xqGV8AS#&Xjbx-7ToOQitq9Ols1|%`h zrva9$JSe`yWCQmN$thYkR_Tipj&3w5JA3Ko-y7SW$ldcH-*Nu!S~mRS)%qXWR|f zFUu9@C#3?FM~eFrjw%tZwwZ>h!A@9Xs$TUa#1?M=&1yk(Xl(g8b zMtboDYLjWNXXrkeasP_XhSlAt570V8oiAo<5mz%=zW+N-*psLTPvDK)}Cv^l#5g|CaN$Vsx9u>trb(4?sN~ z5R@F-zI6G`r-!c{JDC00KVGmZ%9sW(T7Mw!^iqc#y&(pqLGGOcl|8`G>rXt(f^WE( zsMTJwCLX=3)qnqZsm>D1)LCf=m>8a9Z85>m}Ui zuHSB)Q3#Xqs_(U1!95xttEVR*}In3s)FJNAuV6{0{3#JQTvnh zj4mlPXud3Q% zRxoMF@|#gxe_nWf<)Jx`76-q(92ix9*ml;AlQU!VXD`z^jvhR~KvCVcynO|!bnelj zVxs+PcxC#?Cd|Tw;>L<2%76NXCfA4w#ee!&cmZ>w6>7Zl1Kg~sGTlT6Bi)CLKu+W1 zI0?i(N8G68J#|DQgDhtkWM<~qJkkkHL!AW$`yrfNfGZ^8Ud%G`XdqE9iK!_y4A_)y zksH@Su+92gv$tK&jZfcJqV~jsGHLCgjgs6}@adVfmojOu!I>(}Pmg#iwL5D43Dt1@ z<-<>XNJ4l>f^YME$L9OBa;7H(Y7-HE>+Mo}y7OQ|!M8mhZFUL)4Lofdus8A-r(2k- zUKU1{1-7j}8$qXIQo2;O^1C8(N+-QFy*yC)%aQrW=GGG@XvvNf9ym@oerv?$gs!P*G4&vHnv?cSwTfLxue8zx7nZi{egxtoy3BJYeuc z3W9FGtE;_}r#pDcQC7G6m%D^;I@;5a?dZXDyliZK=|zR}se)kgqc)0dgIPJN4 zHw4T(OLe3@S5drC!0rkzO(`>VN;oD$ztJizA)=RO!m_U zwx7L*&Pi7xDEU&u_t)|*b&O9E5C(RT?*+(@!GQek-BKYf( zoTOnHb7?Daz7gBP8M+% zQpxE-2FPclJX`Zcn|*{vh)b#%wQ}_I@Qx78^?}pF_Z7+4ywEf|+cI?M+DEmWZwm|3 z9CMLoigsp-v2v#Ja;A)eio#Eio`<)lhxe}GkWqn;RKv>$m}ac6dm#y0j|?iay_!2* zo6DCoU7MNvrqaCy>jBaGX>owN&pIFHeF({3R`h!DDb8z0%G$lRa~#twRxepUuX;6W zwH#&1Sw~Hoa63oyf`T-!#@U~8%POd#6jT^^3}}9Ob}6FG6!YXvA)lTv13_`teTdA@ z9_1mLJ7gG5r z7AQ8ffHG|j)^>a0PdP^romZhI;dU)Oj;$Twqol{5uNPn%4${D<=}H3bN&@0j$jCs9 zk>@}W!X3pO_GF8=hfuQNisw9x=GXq^Z4T*f5I0w`$p9ytfd(iw!;u!9vom^E{kL8& zn$uuF{?K9M^e~Ek>WGVwed>n8Rq94x^%nC`acg+)O~?t~)hZf%pfTFY>u_D(Yq8(a zT0aiX(j&v!rYGF7F4n4_l%$?wEV)LG zHnGYSzX1C(0n^UXx!_9N74SP}^^`o1Tx37^-9smzql%p9mTIIG*9d77JC}m79FA;j z>1;afR;(2{8!g%l$swq@uV4UuD@FM3avMuQywPAAwSkDbb1P_ zKLVV|y#?>cb@Fi=cun-z!TvNgqT0U##%Qa~WxsIpSro8>*{hnOfG0nkVFFiro#IcQ z7E#TsaAYv5b6FQkyUuoGO&cyyypxZ^K+}bmY8-)yWIxINjo%xedy|`Y#Kun1$ln9Z zqkZ;6^$>CHQbIdg!`3p=gkZ04FDmFFMQWs!#=C2jf=RE6sBWvsj~q_=Mrqf@4#ukC zq~AQrUK=1NVRxxoah+_GE<$16haS2=EJAecRE=90nq-*=w@^(`#pU#fYT1((=~-4TKvFVPo|{7#z%D!JAvGPMukbGn zZIW%bLjQKrRG3WfOF?1QiTMyktZ3Oi=aw8^VnPd!f@_~fEtqC&gVMRU@5#`qISr0% zZi=X1&C@(~3-kDsS4KV7h8gvhPFIk8HBaj0ElitBh50E)24ILm`YWRx@c*2IV)C>4 z4Asy^?-TQgof&GL`;O$p9uD5RvV~a}vxTXr71}7r5|~;d%gdK=KbC_3(7n#;tJ`EF z>0*`=6}W}cWTj!%l-apPYLhekKo8Ln{Iz8skx>HX@lM)MQnfOeFDo$9q}5=EkMJxhw|=0< zrZtfTrj!SMI}q#0rluHalr7<+tiTU%f**cJ^Fuvl)Prw6Hmz|^AoZ0s%IPU12P|i; z^A)7qt0i1TTHNckbZ!w{5fI^PBm1!peqx~3^_tw9$QHEFnDhXDso6z?xl?3qOu<`L z&J+;)l5BJua>UW;=mm#uTX0n4U?Vnp)5izLgVB{Uh1nckG5rpwN;|{8%BuKHfbYTs zg!LYWg_JVYU9CH=y#ooh)Lo9<#N)0;x?ztPiD{h1rI|;omu7BH3wgBH^>E6Zn0GhJ zERjvUud$ctK)*_xRo`2-5YZYMGk;a#@}ljUA!&6rON+qhX<+n+b7JPl#IF7PJ{;v} z!?oX|UO|=@AC|LC=Y5g-wRbnGuf1DYxcpCsE;VMKnEpw!G5DO1VbW3B$d5UHd^{_L zso%#G8(Yv0h=nlnEx@wC+TTOYG2LOd}Ivj1Y zVX-3Ws$Rjh*DrqmQ3FPWOpt+2TG+SvjhKLXZ&eDELF~|C1#ICt^L2lOp?=mLnt7~u z@tgOXZ@&oIa8CBjl;1xZ4mje~o4|f=+VTQdbPf_GkI}Xts_^?@+HyhCkELE8Og|L1 zH)KPJ3t5B%mIW*g+qvw^7rPSS*^W6vNA39`?sc2aU0E~#mvggZOkN%|_PVl0z5@Jj zR@oNqkuO)e1`X(J+ZH+iyyFYeZLz7C`f9t>UC;RbRxA%rX)30yT5vFrUOm-Ll$k>J z;Via-cyRVuakKg7Q(#`4$W&-gS9&TF!8x5m_TpSlF+GSbu5L+<^XBMSndk7cQ{0~& zz{;*#c0slGY-v}&8w!5saLt|eBHME%yT6ILlKhrEvh;HXf5*L_GO=X$=w zdlgjgvC{Bz!k${^N^!JTbU^$<5GXV_q(`Hz#l#`N^J4_k(yWNlN_w z%I*^<*oiSrKW9Tx92twa;RUccJeR+|kya)=FN*Get=xBsLnI|~AHA)S-YUSN3dL22 zjE5ygdwzvfUNU=3#|YeK5xml41!ea|UJ~b<=bjQ*N`>JU8L!KP=!_Kgzc@c74iRec z>)L@B-G00@L~B&DNs_TYnmd6w)EjQgQfG)G7*yQBIR`1HN0>q}kdqOFZ+;d?Zn7e$P zxr-M&n*wxuwa^c^w!_Au%14dmp9LIzG4W#Gq+(icdNN@=Ap3E!)6)tVY#^NWl?&f4-eAEA9byeQ0* zi5QRZ%;p{LYs1Q``h%$cpe8=6t&!FETKaK6HsUshfA`hnwd=iHfZ};j?Gv z(V8tw8KPMe-3N;{)XeOpZ`u9xEbqBD_#s|&x+fDT%VEHD=bO8&iEBJ$NPOYv zd5+yWrKMP=2uxD-9|dH4onx2UBYV0iwXsas^O)+;R6E!~-(o`M(2PjCzI>-h;h{+3 zsk&ukolEw4q>oo2>N%}bb6SH+)p?Kh40Lh82w*7e-Lm1Y+-2ge2pV8$0~iTO1mjIb zKKt4eRI1F3u@|!d4{<*XRm%W4=kgl=cxZhSEm6-e%KDbd&S(Fm0zFhP_0rJkS&%i& z6HQRhgTEl2a*h<5yY)2myl}B=qNl>UUwY>ZzL6u4Si;J=l|3)L^SyJ{(A3Rz&9bId z%KT2q2ZRuG;LNI~ z?58F}@9?j8=~X9L;P;>{IeOJH)vyPo+kD;Xoz>W6v8j)s^k9_R*Iax>zUN4nQ|L+O zC%HcZ8o78<3otUD|NWPQl5!&HD2_R_Z!Uub^QJT>SaJIvDI2w;1+!-jzwFQoH z%%UI?3oIg$2CSh;*BK`Sjbi5OK*aj>OtTUL&McG|jxOjAk(9~rrY&D+q^3K|X;__q_9yqN-9*3BPLrNGk|xF9oc5Nt!Tv-rOY z=BN}#^@@B?2&QWlVGst<0lr5vzx7RsiEOFN2-ow{6M~{og<+WjM~$c-P@9AC5WzVJ zkO>a!zCTD@@WN~ex{b&ppQ;rGeYfOG?ChOm`$Lun*`vP!CUgc)F$Ee;T2gPsk=pp%c&K0tCAT=DjM4r zCu03xW93-6(Ule}^VM4XyIdin)W_8F$q2y<1uPH=js$@Oa6$a7R{Fd2ztYlQ6!&v| zTd8r|r`q$2z&V+B_RrFeF6uV~=AUGR7&l6!lp=C;a|IkMiYdrJ0kz;dRmvP4vL%(3 zn%-zi`ruB-fNWWD;DYDxdc$|bkko-hbYWGb^3WM@TLu0c*8Ce%b0onE-$BFI8DFE!R z4QkvS0H-1aa7MF!j5u)tVs^vs2D#+$mfD6RiO+aN-&u^LRSgi_KUg?p+Ui{?o#_ijSwoXjn_;O(OiX|Nx zToM=6-sIm;cj-Z|cO7J5XSm=+Jc5=r^AOSNFp=KRM#K%0h3rS*TFfAdc_{l_=L~7T zg!d57wathy80Pu;#jD||yFm|tZgUck6I-wxnT*kF&$X5NLYbrQblP#OgtMBu#m8biD<(hR(|X$amO1s-hadPQ?>rnILR zE_TGDK1K=9kvs#Krc|MB3GAknqTlBOegaJ{Irq5KQQ35(ktnyWT9$?&(nUkisA1&& zS|npGeXMkJmw4Rh4nzQkXffAB>Yz|e&zR9H)`oeGE2K~%Uf9ajKZ2nV=L%Ka+7M18 z^VVV+s!|2LB$SVKh^QgB<4hJt2}HVOKVSqM%*Z+@NRr2NJq5db*Dq49($P}{2<)}3 zBK0OaGTk+$4$DfMk)QycC432XK$6ps=z#fN7*3A8-)qsMRA3-js&kU$8A+bpGAOU) zg>Bd=^~RGRpmxF+Pt6-SvF_la?0NMnbAD}%^x@}EM|W8<)=V7UhB+<))bT@#|g-+(CKyUMJcWq9_?nCeA zXjUgA1D5FR7d{_yYpiLWc4=sW3h8;Uq}ONV!G!ciDwtt}p`auVPR$E&qN*VXhFqqB zyFt?}Yi67c^Dq&4lqk5HV=uf|sp}!4C@~1xN3xMevqL+X(VgmvIZ@2R;JXxGtU;ck zZR!y@pI;)?xPw$wekXt>Zx&0H*NDu!Ajfb9tH7FR3hkTbuHP;$w-o~aq^tokPe!C0 z+L;PNYK*R_J!+#VBg*`H;h9JhvmDTC7wbmy9Hm>$Uu3a9?ytK3oiAAXwKhyyVJ(e} zeJ#2ZlM2|IAv9@)-tv`pQh#aik}tJWL!>npdVYT4W)ga0#DlFs6X$$4c|5rOQH-&i zueLz}TpU+{(nuE#fh$TWiuMzhG(+sI^7eCo{P5QA5w?XXXF=$ zJ%8Z1(4K1$Bv(M{Tgz3o_Zy$nh~JM}J_E-NMC2<^7(o_W=)@!sHHyXsCNCcxi&)dr z8sWlLU?{n?5!=b*jt`96AmM}yhiz#?zyP2>9~?LT3r74E;JHr1vCC97t~p&WsPXKz zsMwS>KJYw3(7{IR{7n zz-PN7BRZReVDO+omwu0AipKL*yYR_b_puMeH~5P=?p3&C{BG86)?Q$vLxJvmwu}kt z+${Q`Z@%`Qo&`IUjSX*M{3}ywYfHd6r zLT}KQg(r7SV+m`gDwhM@=vJSun5wK~-TSQF^amtcG$9}%;95X>KuSOiewMPs8y=f`4F$sDoaMC zo^VkXQ0WYB7sKO_fce*v$?pppi)RkTC*l1+mO}eWHM{`Ox+Q@4zLcZfs3MePjgpbt zt;4@y;<*rBIXI{Ee-Mt+`je=W@^9iuK&V!gil$=w-VtAm&f!RafwWbZ8oWlA5XsJJ z6jM~ee*Y+_pUeMBwR~q$B^1zkcr+Jx+xtfg++m(l*BF+-(Hz|utxM`b4XowT{a=6! z5^1VSfoY9U#vJ~I?nH=Uu^!QapvE5o+Lm~dKNb?6|Lh5b+ z7*0%xe=E3lldSsty;KQjHF$Qrb5ma*A*UaP?L8|Pe-%(ckU45d9_)qprOr$evT4Jt z&258|JJ)hys3xfoqLRQ{l87$C=Wwx@kK#P}JfWM|{yP+hacgMqd24C91B#XCI;Bcc z!Q78cE6QQyC3OIT>nC`=i%zbBKZ}ESi3hrQ8gK}#GF>At4o2a55g6nEv=BuVKkeob z41ln1-dyUF#)df20Tx}nnzNm=l5?-igL5M?pbfyV81~{d*nti@Ajl%H^#~U5MW|Vl#CL&YKxCf(|FTANYI+g!;1*vOj=Z1g2i$gwcJlCeI#yv!wT54p?eBmh@ zfsDh{tzy36L687l0bL$b6;o|n-B2Z)46$^#f~8`%=j{_^1Z43SaFjV-UFfb~IClfc z{L}o~{L2B`(Z*;qqesxxxINfJ=mTYO6sT46VmKdva6FVfwbCe)F^c1GCgQ-oYLLAs zoB}S|u9-FgUSED8A(8(|a;5%R-Y=_w3llvuCk=+Gdtv#LSpf78E<&vjV@mO^ZVc() z=V@fkf2xNdH7?-ggSeB)@KK`RoDH4hZbkbB5B+b}61$(b_4-dsL@c2MKYko~b;7wh z%O+juieIsE@y3uhwoj+IuiU=z=Cp}nYzNot4p)DhGnpM9x;5tG{o`%j7Bn)lCosaAKJ`c;7vJwCACUiGSDj~bjwL^m;C3}J4pgGpli*X2IY5%f*SGJ z=x-ttR&I9qRMYROiu$ow6Qb>bm0^D$Rml^e8jKUfHAZF7D?(6@=M7YEX3}$?g3FU} zfVhrJP*=awM(SWRp$7oK$K#t-{AWY`Yk97e0IX$^T9xq7Rt$}S&4y}9U$aMP z5`mXM*SCrvHH=fEO6oS;Vsnxhuiq-}`H`Zuii+)m&mdwMHRFS*N$Req5rSHrxG5jp zj|rN899uZAItV9%(T%8}YMyj2J`DH4T@nC)PzNh3PZUN0!I7pOa9t?*cF2Fi6k{b| z??$~>==@?z6Y7-+%N*V=jl(GM*G-l`#{P2f)KJ_NW(ol0tikbt`z3T6gC~txVHI8c zaxoXkdG_OmLnHEl0$i_EEZQtKSM2{My735wN;Cyj1}%5fq%r7TLl(+uj2ld_YlmG@>qE>S)PQ!=o(vNRRu)wWp{BBIKw3q^2f z{zdBJX03-q(^vienvU0XC~%(7USNU>oQ415m3FAWG*J)&!+;nRT%5ck)}F2o?<(-l z@$Nz63URk$LhD0ve3dL92W~i$C1IckTij=onzH6b#0gl-7HIaY(#4vQ6~lKoh+8g>CS_d>Z+S27)|@rmiEhG04u1I~3)$MQ19YU~~+ zvQUg2amZId-vy~}vL!U36^y5g9m?J;M#M5$QU-q|wBODML7)p94S>~2&y+gSb$qNs zD-%W*tKzWlCkF`$jcHQnIQme;fk^i6nMMYiFZoBbo@#_3m6|t{1~wo3-H#AYP@jCz z8Rqv2P!{JS4t@t5^YsIp`Y|UHImMn3UeHvS=PRJ80i58a3~Y~8pQQm)YvF@wx_SJ| z02=X8>iVT4Z&ic8n2rQq4i(Zzrb`{6lrTBSmF9^DHSCO9fm_q04;hY~{gnNh@Zx59 zSsv`v51Nh8?!4D{r9NzL=8x!ovLZgmg~b!O1PLM8j^GycpEv*?nltUG(cOv#l$tC4wv^VEi^m4 zGIaNX6B9yiFG{~{wQcK)#2EFv@lR{@7+&^n;%LiA<@paE?I>ia=m zH3>=i$yJI9wJJsTT4WLh4|CM*NS@%;Bm1H9TD#kIt7PMFR`Sp7p%(7?T=yEFo``MW z4P8!Wt>?0;U??U;4+8NS%wveNIFR*RNN$lgLD=+^#p$~N+bv4#Qc0#*nBRw{@^@6j zQ$Q<5$ZA-!*n)Gs+Ic_l;AJr3P=VE&=2au?FU>HA4uw#d&^ByaO)b#&yOAbq_D`#z zhYG>FN4?EnJ~uisOz`H>+a0k4_ec$&quF-Z+#c|lFyPst;Y&wR;I*T_E**U$e0>BP z8#21XgL;mz++Jt6R|)W5jQ{$&_4`63T(CIXCg!0bV)i~U+%pvT&nKS=KaX5ejyd`4 zp(|s$Q+DyNogCqRyFDVTQyg)dAO@R%Wb6vm%7!V2N41i7@n9{9(qDl}ILJy8_QUfS zKohzID0Rz`{sH|6yG-DXm2NdI4%5tPLV*0-UrT*T8mnaC`@)khuHXV)D*)#veW|aQ zB%IaJ2rv@wI*^{qz>WVg9Vjuf;<|g}^=-h%81TZTlou6aPs;^DoDsiX9^HE#@N&aT zeUUbLi<_F>D4WNYSBC;vW*BHLK$=@XnMw)Abn4bjXF7uJV$Q=B4&SzxuH_pECy{xg zXh56^j%fZy*zs?^oDxvYsi3q89I{hBU90}SvH5FXNf@)IHF5mO!lI)2XrY&ot=dCvwPg=oGb2>#{;OcA0jX!rdJdH!#**U90wbJ@w9US zZ-i&zNv!KYZIj`T7(eCnKDdL{HO;{m%x;kWkS1Y9+D8WpE&xM(uucuBSo6FV8Rta7 zD%zoJDyjQzTfUL=W8?<|vS>n?vb`_V-tK=$-hLXAN!|e%F~mqJ1#)UIh$_N$u)uQ% zUnuEq9cX0)UqR+K0z#ccN4!yaC04SkN zo+ZGAEIufo<8Yk!r^%@=4rw*8ABjm>XASIIxv+6Lm5>D0r#DUo27KrqC4hn(2|#}L zLE*QmNRl#jxhYgYhJi~qg*-rT5xf^Gd5gzBx+ zy!hy{k>w-J!-Y%sdR9E=Kh&9hh7gX=!}dZ?O*P#_S1CwIiyG1h@Rl^@u#y)4|uzkCK3Bn~(k&mw#o= zMv`G5Bhp#fMxO>vfcT0o0?oro+XmC81mDGtw88YrFc7%WlgG3xVf|l|yNB!dUlrwF zM3!inr_deKt_s1@aEkqOd2rW0J_e}3!jG^$^@l;ENc6|za31|6c%OfKEI_THr5TO3 z00o*P0#7@M5LAa8MF>adg8K(@t2OclrqMyt%JP&?hhARNT`QydYr5-a%&a2)jO{z znu_H+!LVX6Ro9No1%&DL0sJAWq2va0ky283sgdB~K0t=_pgZAVd z;4G}pOBPtT?=`v|u$%L^YgRS)0SV5T0p7i*>>mMijx{v@r}d?0ATqj!#*K|)HhDd$ zhd4~M%LekOq>iCe<(>v-v3k2^-#DOGW8aTE77(H(oT}kAOuJvBG+Se||TPM;@Hazz&<;m*C33LYEYGByE&A z@SHK?8}$D zNcg^x(FXBHvxr0XPrzIcF*&Vuw~^S6k< zugbpul>|)tLR*udHi!%92Qs^*kC2S*e}Z^bad$gGFrW$Ol1@q8u+Hc^eBc0s6Nv~I zVH6OP`XlTj`IdXK1ikb;K@^bnW8}q=CG4WZ+5shb@RI$wOXu7O!3{`&z#SBr@*g5F zNH&hiR;&+!uLBzT4dcPS#xGrpG=NSwolC7%<-&VwV!@Jd*6i-3X@;xPL6)9 z1JTiPZ&+_S6|}BN;~uQ9UT89bACFPeUJiON(YSZ106zF#O0@(&UD%?U!9zjU4#U82gXvWorK4t_uE2ODH+8W@d?BTs$RAG%R@IIX) zr2Dq;SmR@k>62lkzbr9*Hp#>a_?RRXMFHGl6OH4=`XqIy=* z0i3wU%N*2GBMCjtU0fk5K!)>Ro>$0%PaSd`OfpI2OnA~*iuI=K16vzI0~ehCSki~> zDa|_}IuPM8)SVu7$f@Gyg{eI%!S^SIJi`*+Z+xh|ME~ay?WbW!GpjA{Io&&YWXbXh zlVt_l)vWeR*|NuE??$CL-n-{GEZ)DnYGZ2f#k03HDOn_!le?POhS=rTUOc0mc3w*W zwEhiH9V_7|KoAuP?R(!%9`Y3_5ixG;@D}CLb&k!IQ_){33otB-TjMkbS9RcE#M)shoyh61mcTh{@O-@8h0X$ z10!RLfo_QI55%dBhF%fSAIOHD#ehQGIHAT8j?q912(rM3Wq|uQv6OKBkh7{3-LZne zPuU^X@E^=k+m++O7h+@IHXt{cl^>D7=%@ zQsPY~QlgkiP)<2*s&e*Onk}7o(^gyX+=al%oBSA|QLR7_#SFL;2i?J&^_^V}sUm{` zR_-7xJC5ZG{y}(AJ|CVp$U`t`{f~;sPo_n+k1p7H{O3Cu1!{F~6?DyeEUG=)}LZwZxszHUf18trC%OK1to( z4KxG0Xg5S$f2AzCwe3U1u#F{$Y>;FH>WchnbV zw-&>A1oJ2c8X$=8xApWjplB>iGWS^|#(dDy;9(h# zKSK42_M|b$p0@?~KXKOr*Tj|ezg@qUZmk9%Eo~9vqt>;qM(ehy5K^_4?rKF>Ep`=B zr7hdKB`RnjA(>iKR9dpu2lYYX8x?du7Ov`pe zc?++p?M*RoGO8w?1<=QaNppgdti(76YA`;FN08mxfD%9W0P7DROGdwY;JpE9 za9ZLeSeW9oBLOb_H|;=l4-WE+wiBs{S*AvB0rJ^M3}0p=IM5D%$M%#c-~9+-5AB1~ z($~PeFC4b7kA!}I?jCfgo@+HkxX4x;hpO2^zgD{!8z%l@E9MwAJQNTq@UhTUKV<*O zI_VH$ia10_1EWvNtYyJ`o;2~f{2ZmJYTu1rF2V05l2xkJ+Ceqdc>T_fy^NQ^%ecM<~y1 z;Ek{I|IXeRI6|q42bPQRGRv`Gozp4J=a+2LOM}&p9Wmlg<4-!Kl>K8{-rHKpxdaJ~ zppiKK&S~!`fO=*?3j3rDSJdR?0Dx$tZD7bOTPIyo?=JcHpQ?<5WKVaKA1#FZPwKEF zYy{$}LhUDKQgUP;;5`0?AM3u|mELzBi0FbWl>7lOFg1AmKA>b-FnI1=dGVys*=cVo z&rJHu^IUR9+#m4-Pl;7{zGUbb%U)FtC zv-!uNiFIqjroHsx4xi}3Z=_8h`1*!r$8|SkH`H+}aSRFg+PaEmZ&h$?r+T~i>WOOv zIvRhwiz_ak0CKou$~!)%J&?%QW^(f#n=!aQotEm-Le#&vZRquSz6Vqd21fu#y-h2; z1TxZ}9R)|eUJ{sC%&U%r+`N&RR_`Ed_xYSIY~xUB4L+$6#6CM>6`0XSBITR#0288q z=h;=uHol`ytiJ#XY{NVKsOSb?dZMn${<$hg+`N7s&=BLiG^Ra0HwXMU9d;pzR=Ggk zX&5%#OW^gf9{<%lmu;MSsuTxE;^k*Yf)p<9=mTuWqA47` z?E*@75BJ341tUIw39fcoRw%!-Kgz ztD!bYS?>5mXOi!hqmAV{sahQ;rW~$svu4?r6Xm$&x5Cs}6BT9Vw@b&&LZbx-^|p_Y zPo2@Fa6W%q`?Wx!@Au|+_AcMfUpGLq&_9d_{j}(Iq*JFCsQouK=%|XOkX1%XwTaOg z?Y?-)xriUz{M55-Beho?y2|f^;=eepZQmpbb=vFG2bH#7f{qX{5UK>a9Og`f&|GK1 z{i~rzmGnUP0v&0twB}SLUIP2mrQlD$gZ-X9G_?mp8wqjC)|OB1g*_n3c>0LPeZukgO$ z?B|Nfi-kZa06-f}du=@v))APfrVKcDJR4zY{aT$=J^`qsZqd#C&;tR|n7`N}nM&DtBW)B^{G-cnof>##_Gfr}KyJ5^5&O09W z=}FEq+@y^`DVgZkm5haLwVxv*lAq>4iJLbfB~gtMec*U)pF_f5;~77;{h^c%;j3A; zZ@f^rhi&_&A@HZFKHG)xMsiM6F<@fI6h_X%wv)1zt6STIv){A*F9X4j3Ht2(-v;nf{ zBHgRT$qzq;*^WjQlSMdt_0qiH-K(4lt6Pr^DsF8#$W!Pxs)Ewp!A7kuc^anUHwid5 z0icT3W)PjO4gqFY-*C;CLzNrdnU3g65zzxFV9`pM`D{d#6WFT6^ye-5z1X@pee;`1 z4#7!>fVv`r_T(2mwC~MgvSMNz*ap|!`Id*Pot!Ai<7=h+TPQqREJy46u^cxi0LY$2 z|7QKY0WvW8Z76;!odbwp7f?NTXFOGiKo4D7w36Fi5P|A`1U~q)U|O__Sax#|w(1g? z{)|LMq>Dp4{8cVI@9Sq_mTo~hoZ+bRpc*39d`Ttkz6kg7BK=e)!H9VbxQzMfS#SeF zX3jdSAfe?)5Z3lg^Gwgr;&rz5S~AkZbKd=})D z%!Hd32D>>uaB?Gp)zfd>+_O##`im_~E~reEIDq0A$;)?Yw4nolHng`?lHJR`N1gSs zEM$mr4lsWL$8YsER5OZJ_pu%p7O_89NnBSaVldXFJ_lmnG+V+w%t+20IZ~rRZq>q- zc0v{HB6>ejw2}(oiKq#{Cp$xH@yVo3YFghtB*ZrA#RZFI*(Qfi&RRrQ$S{jS9Cx$YfzEiQ#=H~Yr~i$eIV{~mQH|75zdbyawXGVim~khlFy zwRU4eThYptyZ*TI&E}8UPV6LvO+SKBS}>9Bji*lE<(_sjKg+YRjbqYD1SF_P&SNNir)Nbf$+>*beLE&xx);0`tZ!(0zL>m)hScZUw3Z{4Z6J_t zdLs9ha*tUeYELl*#Sti6FUkV>z~+_Riu=+;WG`&11h&1YP!A}dVfq@l29hs}aWDNR z^5NR}S?!QCuwd4lGzVgR3+cUN-Xk^-+e7N<**UY4YdIvLR1n9}D!mhf(Nlt;EnK5X z=Dgm31DC7bOL=qd4e5c}DIXKqUxtCR%a=X7jm4SUi5qfomI09+owt(p^f0nSy#`RF zP(8)dpq_dN8|g_&Xg`G>i)vY9H6YJbdTCT|H3SN5*=J&-!?pa0o+>eDmRPX2kp_|%~XKltg3 zVdDG-{|9KRuo7l^cMOaog{uM=CkVD`>5lPRSJKVMZn|aYCuAcMtQO z@ycR4A*j0CTMbzGBj@mbOQDkE!17&-PP_-^TLs0k$Ol6 zs5-c1SFFO#oA(q0t{Jc8OnO_Z(#<$T+)S4)o}y@dVYOPMTU4^SxB3Pmej#M;X2f0*RG@>>ZXv&E+GT+P?LioUd*HS*0jAUgf!z@wd>LcPP%NYWx zzv0v00b2V3kUpDp!1tVhgz*XYCX(1wHUZ)Pw##&qQ`Qt5Ul{VkVt(NiPlFH ziwGNuHTQQQ)J+}ws3r8{zTboAczROP7AD8W<>q!eLj9fr>gitfK*$6M1oX}7z~Ebe zp?Ma(@zzxsRh5rBZ-&EXUF8o$CuycuzaOCq=bCOgnh~x$7M9+l2g0Jw4b_&a2sG(D zkY(?p9j?6J?Vs)XZzW?L+b<0Rqb}2q zR^A_Zy85%c9Fg4*hq;+>&9kV`dQk;j`eLYE>YtT%5fo;D_Wyu+DK1%V@A8U77RG~? z^YI*Q>MYwT-7K49#C3MWZq|^iEt(Sb$uZTIYkQr}Xz&lRSVE3T(`7|Mw<_c)sE7t% zt4yb|m9^KgeIPp;{07}CTYkwxn-880%BtS?cT1n6#W3l)_J|+u=gW5Q z-eTC2^>1qdN?gYhLztoqjzs)|!$MSp_C!;5wCUGvjY}}gd1EsY3E71Z^+zgM!b;*o z;2`bHQNp!ngex7_fXMTTDy+uZ* zjS3}Iu!ogr5Z0dythRBl7JS-O7FBw zH{O2ImSoIlIDlrA8jSmM!JY><`T48&cAny=ynDJx9(3`({$<@)(lrL6@;<077`7ZP zDhEf+Nod6*?;D!?2aApp#UGQwt#vYobULMuG(Gcv4?^odk`%PU+JUIv=VU9jyA9%DS|$#s(-t46_7+#T>8(N;}O@7Xd!g3J)Joj8qvIOj^JH;4Mg0B+CWSqj#m_g5{jGwgj z%&?dGFIoOV^7L1SoUQTgDw-{|ooM`t;^r+xrq%ksm_pdrKk&0XeEn&QcALiAbsWpa z%)knemCgkNUQC%YsR|8xz}-G=b$7SC`&#kgi5d}$y0nBut>-n!+OxHkqQ}na{)(sn zXerVSe~Hq?AckBD)HiefU&bN&Rabc>WeH<6155Lrad@VK;QPGJ#v!-!11bQ*s*uf@ z^#3pnAumz;^YIqg2Ui;0axiRge;eNK{)dK^LGSsQEWI(46JNR?-op1`N@~QjzX87` z?bbSV01hl4{Xad9LkeqnN}bgPRl*_->h6QR_o*!}j(}V0OSr&!k~irX$oc;hMRCnZ zo~yRdiRe21pLBxdj4n!4XA1;3ILAQpZSDM6^F!X?=Mgjf4OxFif@cqg-fn+iD|uO` z&75TuWlD58yV<|xGeaV=VoOT6hB;Z}dKG3uj3@t=jdLOqr`h<2K(b2jG%ZGIWW zC>OpVgf7)SNdr3I0kv+^L{ZC@}`GQgR6)#Uj28`q8bsU>_O<0*FP0YQ{ zHq~-0WAbA%23E%e4yxAHZ<_blBP21$-w@wK+6(;=sTZSx_IGKO6UKc$$$sT_Uz8?2;O`-jODNLF~ z>G!=9`W+{pI$xS}>ouKZaZ7fJF(yD(Z%<8AuS!zZe<>l;S)d~;?S|%{g%e`=BWmcc z@|#SpuP+{g$GgU=mZiy8Cw*VPECBp!lmuWk_BT~%yvtveGf8>b*qVkfPs*tm2H-1P z-_$G8n5$if>s0|9eF9pKOcGZZO=;ZaNmqm|X|f&EIpvsy3A#53T@p$Vbi z399vpnYs)q|M5V{e5A2|FrYPMx&JtI?=(y zI+9gP!nFYh0n%&ya|V?l2(fAEYb}^BKR(%JF^bgnP zm-DmmkFn#*MIv}vi`LLnL9PzH)Vp~&WJvuK<1 zHGDZ9g(;LmTXU3JAr-Q1f;LN4bDkznuIo*KpT%KPnwNoug;vWo0)-d4@5((Cv}t;* ziXjLzhcqQ#G40V!RVPb**!L9tt(`pz5@MCxz;u>A}VpA)jt97Z`ZJ2877iA11)TWu*`NCpNrj7aFrC4nGWmbs`pF7 z*b+gYCB%@}y8?ojYtg2Bj+C8qKCFVfYCO%oQ^7UU0o~u!Tco4d;R2~SM4$Mm0xk9J zE~pv9xW`cCC{egmYG&(&*K7yyzhPS*RM3mdc2^w3Rtuz-kmkft;Sw>9GK#54fRorK z*hyuKNbQtb*v-NU+cCW7g03%Dn2zZ_QJ<80uJ-T(PJ2xjFR`i^)~1yt0sez4fVU83 zRx}B(+VrvOI;y)}AbT4yh38T@P*>r36p1asvXl`bxiiY5FbK)iCI`z zQI%Y6PCBHU$d>6Hv()MR8A%=S2{qI*TY{j5I6dYZH8L~qe^o86msQ&laIsWn3SQ!u zqUX=n$ZMUaGMhCSp-O2OxD`)6pN++zhHk#9AX5`2&Bo4JDrajzd%J!O8OZ=&q>{lq z+P)AlONkw!_8Pu2UWWt{@?G*ukV>Z5cS^>KzS9qy1%5MsdC2F-P?ecGi~CvKe+#9h z{e`oGTPC+I-&Wc`qQ`&C;v)U}tlhD>7vVo$rhmzPDrNRu#0V|gUrL$nr;bnhPB#~< zZuligd0>h-bOu?OScbl4;kgR~ExZrzdi_P`8y}Fn=7QU&Rd!;$@>iqVd<_h`%nPYq z!;hLAI6AKY!0&lJ^$bp{M!LpV-?G1|S`-kztFe{!7s`Cm$hvV52VXyf+CLycSOvLG z@NN34A>5c%yU&*I8oP=6)xjH_v6a;I(|P~=W!bkM{(WrJ)~z2b+_dJv`GF@^&E0%r z>W(>cx6Y{fc~<1$CB8<=cW(U4e`#I+{_~5zC71k^J$x@VIR-j|fOzcbNmWMLp zY8*Gj&Z(L$AAYu z&cUqH$i0Y5vA~G0`PD>j7 z6-niH2B*XqFvSKANAMllkb{BeXzH)7Ugv*wr{6M0P(sXRzd>cnPm8F&-l`^YDCLLc zihlvRmtk_>y)+B8^1VB)(Z26u5%nwq6zd3V3Rve%ru87Eb?LQ@c3|5`Q07+&4NT!n zcRlc~?d~IZ7$tF$`0mRf_~D%IJe;_cL(j5=^62%!}4(P{gu7n&kmBVOOx8e$6q z+VQ|>;4F60EdhI|wyWyf>eCiNZb$6)3D$_HMmb7%MR!$W*$V`Qd2q(DfJT(=sen~> zr#URwI)B8rhCd|j1X7q`;?k|C{kjzO#3H~#ou|WxKu3pQFEr@dod)SPfKslDh&h2e zFGi~KDtj&1_$y^VA6EuiqNkGb+|`lx7-Y z!pqeeN4X&jB(kI2$qSglFdd#Thb{V!+;s_L4-wa!W5mRKk!wDA=7^wfek5l>X4nfU zr6blB>Ia;yHNQ~1T(EYzJ!{@7LHzPb>?xCW2L=q8E$QDsGt4KYbboT8{_2@pb5qT7 z_;zkW{PHzUjxf!Mi)*q~tEoQXe@CP>JZHe5(cLIgvk5_(lfTC4W5NIE{$Uuf=M2m; zv~L;bFfs?422;so_$C9Ebr$@)ky*sqfcOG9c`V{|{F0J(0^<`X_}z!@`_>Z{oZJB` z8cI!d1&6tKc9lQ68ukz`ANW7u=AN*c+xITJ>`J!#7#Vfgb9JcgDk5lkmB^_QfS?}x z;dWIqf1dD=cRRc7{hq(?>BrdNRC>~diL#L2sN*?RpkG%wc$auRc5S!iBiYW4 zBS)1`Accos>Pc)L`?@`Jjc3S0?H8EDuILsUw~^8PWYAGX*EPBa%up+#I(X0$w02sy zPctlC7r*BkF%vrx)%K8B#e$T}orMhoi>QwkcDQNlf#EyCme4=YB94zlD;gNMH z<%c^oP*Wuq!}VC>X+ZSmhClK4`l$ToNQHpI2S2*Rw1EP_pC)HFqIDa~4&ex`&)9UL#D}Ceb zzs>*nSi@AG*S`*V;l&At_musPl6U8Q@`>O|2aZJ@eB;{#F~{G*$;6nDJdFiOV7$_7E9hHc0gE+#EX+CJ z50Couu8HXj{$PZEjMrI8)7Pw|j)6oyvjRTUjKkm?@BaB|2l&R$*Z}`XB#8|QuJcHQ z_}WM-D`_?GGjR4$eZ2dp@C&L>9cQTfPpmIcvB7gl+(t5W9E>>YLvnlBdWp{*Amq&j zgmlUtD!pnC#i;6_{5wcAr-+&!q|VCcCNQ{1!(!DEsZNJUnfW4di^DLgO3E>YaJ5oy zJmK1ED)+;r97_oDTdU(>_=QHbHo}PHYyb<8_5$YVBI;sHRnPSVJUQs(sfWJ-jAA;dU6eX2 zu;3y1Z}`075AUF!-|gx);p;|FgNWN3O(@#3hJIM?-;HjR8RE>Lbx83b8F?KFEg$%m zG3h>vnDD?h+Bqfy5vE_~is+XC2my9t^FBrtAInVAjkL;hWwb-tbC7pUx9hQuL8v1C zad4#}rszgV?yBW{Ge-Gyp&A^6>u}m}W{*HKEydx=MipWkNJOxSuC0cirSnNjJrZp$ zw?$d^VXn;ELJ}n@@FVhf;WwNk-O=v}!`L0Nn_%r{kc;$rn3C9H>Dz z##m{GfIUxWePTFxfk5vD)4lz4mQg1js#HVo9?-5{q;!?QCbZ^lN zrP@YNL1+ucM2o0Z3^VQBw&zYYvx~rHnUN(EZzP*7UaMs&#jbg1pe2UX|2Bj0BkYrw8f++y59)eyS5RAK62Ni_CjdE^dAIGTrM{8fY*3eK_fl@-5md+Vl-2tv_;M(*j$yg_2XpXSQI@V+48+TujHpc@Nc%K)|P4bXmv7 z2NF4K?_gBOe=mE`(pQXVyCvL(jkNNR-$<(^WE^S5Lv@@2xaat!_x=!l;*rHrgNC|Q zkFDNF3fnp@U7FywyCFjlU}|d$0#3fGHV)eF#zJULc|&J;ATcJn!X`GfV#0~Qb|}UM z?GU;<5`YW2wmFfdZWwEIyYCMl%pZ8k@Xgv!kkKE0W=~l&a>f@|*IfMTpufG9b@f=; zp%oV|T>79i2_eJWY28ZY~?RDL`;E$I$zMYk-N7jLxnMvBX*`I^FX19qC zw=NCL!^j@GPrCaxvRRT_M#5gR`_w@J>R*JY zxtR6vyc=BiLc<#!dS`@g3#(5ZXk+HrPssckxK4OcR{K~a7jDa{FGys-fPnssGbsTWE+?fwmw)bUq0GF)iI7B*kk`e@ zP7boh35bd{PLvuJv^Y=S*tZ(VKEsWl-NHNFP$!tYn7TMxD?TB1oDeshbEc&>FH4Ky zA}7T4Cnz%2lHsQbV#=#UC#e0=WTszpPF0GNCukONTDI+~79ZdT>UnAAoUofC$imH( z{zE+YnopW}?+CJTbEx0|!nrm|VwQzX+1Wq#uHTZhL&+!i>uXx}>1%%RODc{D{~R1# z77DnNgLnFtq`kTJ_%t)`*8Ubxet1V!S^2rCwlV^&crX|7C5isq1(tA5zRnH>A$WE zEX(cl=H1TbXs$lizV(D02zJokd4lSb3O(+uME#T=@vcx3^C>lCQy)vHG(+06@tA zU_$kba7I*w*x@vxbbCOxTeXao%kzIN4H#8^#6&%pCjI3dQoeFxx9-vDm#oY(V! zbK5dC`1YYN|0DXUhwo18+87{wfsd3}pT3(%aN{Vt0b$vNJ0M-;3>RknHNS+^%%s21 zx&UGRP%1(}3W0IHwK9!<3Fv~F+{;9Dj#m5@A&)x#SWkNIq`yla*s63|d(FHXNb6T5 z-ClruD33f3V>)(bVxqT*;_M2He%!fBo*AODm^Rl%NybGn0V-*C)AR^*inzU+mFTRG zii6{WA@l>AcPX5&xz-ag(2nXL+*2XF@Y#+o`0TklL?x@TxS$}^JL!kdJgWMA7bB@O z8QA7qBNn?Y{4P&xdj5O#nr#@RVmD=3=UcG?_hxg?Amx*mdZvTy;ZzRU9*x$)=0u&O zy*YQOoETB#5=QVgGN*-h8GsUXM}Kl%r)AX1c{lJ$^zS^}r3*^sB1d8P=SX?ElWsV8 zD(R8v5!IFpF-jbcjLZP~=q&uZu;)xXPOLCi?4eX4x7Lq|ktk|N-RrJh>W$=$L9Fcb z!Up;7Yguh-u8m2HS8a}pJD_3e`I30u=IW#a`4Y1#Oi;YJ%UJx^6lf3j z_t=j2y!@*4Og(aIKZ^}VUQUtsnUc3{M_B>19mUXgY&*xYSFqV1wv9Ak{?a5}G%o}Q z);MhgEvzy${V>9s3#CW6(dlQvW|l#eVj9`k{mx^bEPESFbM-Z{icoI6X(pEN7O^Z% z2lxbcgfc8io*=P{jmdQ>=Oi1Lew<snYLry){Tdj)xURe{`oyq4}H9~cJJ^v-gxWp0fRrB-+%XC zH%#34_wlbUG}kTqp!tB?f=&3KL>o+H2Uv@55%yWTR@Dg{uYX3 zC*Mq6#a?zY7m*R-o^kjm@w4p4ApfThq~eZSL9(UbGR!mbbeR4FZqQR3zps%)H8As? zBpB;ukQ(h{1RaIE#TI}Nx!!S{hsd`(AYdr;Z&V}2`EnpuCR0is9ksX>5oy!ioAGqR)5sj)!TAG? z26aenHJ@r3ZPjr8>jvWJceL#m`*n8AHj(2r&TBzU|AFo%9Qp^YJBs5qBdXUR`mZR0 z&#dyc8}^O2GC3N{F(iZDR-Mv|vcA5*b)&b>C z0LV%&?aj>T3P2c2rK2^*@X6;WA1_x09n)(6Bu_Mswgv^l1si-O9-y-y(^vj?536U- zNll)yi7;4KMh9|p0d&QVolf$lbHNDwwKDL1#9=^9#L?lHj5CN}MX_1gyFLt>U0$fx z1xrjL)ViAX< z)T%j*E`#1>*gJ4BiNF4I3)e2sLh}qfp>ecT$ZMe8MY7D}x+ZGiyX?EdPoNDSd(E>@ z_k-M@<6tnIS@T+WifyPZ$ZL*xc5^8&q~Ybv>zMV57hPD3xnPIPxduh?!9*o@N*0_LJKQ#+7V@s ztGSOa(247}@Ft%VV_(}4dQq{dq{ppnEcEzeC21wQmx2-WSJMT(1V9)bF>TEvnMl$D z+{|fFIEYz?CzOn~awgO7@_CnEVU9YfQl7CC(H-|f1iQzDH9Ml9*-!4mWYrfjFZwSU zEAlx4JazU7w0S1|z2?U3fBAL1YCAH<5jU+U!58qufqJbnj&jrDCVMxS|hS z+_-RGP}=6oiBMW9!%raXb`o8&0^4EZZpLl9H|X(46jbfO?)Y!Dg?T+22S@0lI%_11+B-+(M>gt z(1J8Qv#ZPLK=CCJ za@kza@Qwjp>txCAJ{wtvB!2H??WJZO1_L|a?%gT4a9T4bvNNu5_1WdC|Mc38zM0ld zFHHFM!#{l%^<6;Id%goci~mpchu;p|@J7-9PMC4wL!W<4ndDpesn7EpH#NOCV@C7^ zTg*G#b~Y?5{cFRmS-!!^?+Hs!R@@}07KO-ktht)u{|dpE$FL}k?sVIuMB%p6eg7g* zEf-&Pm{2CiN&6JsH8)OmalrMN*y>HBD9H4rJ2nsb-W_%qycV|~B4(ce4x`J@TjuMR z9jh8<$erJErXVeqmt9({cYC$H|5TS=w4KES&Uzc_f?nz+RIeQ(dRtLfHGG?YHplr} zn6hyB5n{DhqQ=2QY_s=FWaxCU zN@j93LseK);l;t}V?+)8fURk?6)iaEy@iFFO)6163T+!qaP_qJ+Ff&&3bmR7gU?Yg zqo+4!tJ_Kqh|X+5R%{|S*7urmr}x6`5$I~89tRiZwIFd55&9gWx~|k^P6&-MrDF{@ z-)QYRZ0upsmo*0zGhZ@*O=@NH#Zx&^ z?NnSp>etCfQ0oXkd3rH)4>+2`UCfCmB}mg%6Aa5YR$xGlfg`Clq_NHtsluG=Qk(fq z4I00KJb$iPn8qPbr8cY5nz?8$^}YXLaFd7G8|8}$#eQeue&?3`0@vYcWIl7!(NSrJ zP)vf;{^ zkp^IX&VU$2e0FXsa>a-5%+o>_fk>>qX%QX@T?Fj>jkmd#-1JKJc^qQrycVWn2ZWTN zuPKb@dY^8D-UBSd;lx4Xq7oazKH{Yyp2K&x_JVyuvDm?%&3rQ=bhX(#8>A3yzs(Nh z3v43ebb07GDqN+5&e~4^(0{b~cUXK60Ka>~vXd06nlElnhZvP^m%|-*_cV}y57oFg z7Cd}C!rF}4YaJz&*>L#CHTf(!u*G8QQQdqaez?r3?gusN780G-d%YlH9Qj|;X!zUw@2Cc64&c1f{R^oGY;ApzIAswP}jlX!iBgYK@ zj1cqJZqPJm5#gN>Hjg~!ud!p6oty-Gv=u=QdP#+NLfCd~03tcz95wp{;@a*t_MP=x}chUf&*Tow-@=A?doN=iSB8{Gjm38 zR*)ICYN2|x6%@b-@<+Noz!k@7)OVT2lwFUDw`3ezowM_UbIJb*F8#;8?bko(cWT|? zKg=8Oryr7s4}ATf|2qD9@_~b8Lr)L*Q`4Gn>#+F~_Pv}unEmIef3|0a*=#9$^mF@f zy3%LB@vpzzS+sDTCio<#JBhVkIGHW%*C*A%K3TE6Gq?{%@A()wbHExWqYQzJPZs9k zUKMR|Fp6MIU>~C_W&_Zn=DxDrb5tttx|_G^u`blR>O7yCumeUt`P6ZILE?KZw3g}0 zj{(4eDsmwh+sj+`TMkoD>gWSYGcPw*azbr{w-F-OIyaJ<^`DbJ zItnLloXion=n;e@XbfHJ>vb_-|A#DgR${kCAkep&rzsUNAKF)eKk+i61hvARNE)#I=b9~ z$T-Vh_E!-q2O810mh?W+&n=Z(qR* z$M;^W=_Mm#V3D`n^|;p4F9%&xAbigSD2#G&l?`CKAN_6sp6O=*q@LtC%wuv~s6oFa zoid+#D)$E4lroU!QwF}4KW_onn8U!tC;+cHsE$5Iz{QizWIc0fIInzBU0!s23<~N2~de4D@IB zxF7l0di|2~Za~OBDxAHCick_4vV`_E%F~%S9Rn=*1tQep2;vBn-Xo#)nCyghB>aJ# zS_7b)J2t`qjfgv}L4E2#G^&f?h>JlMHvxEs%cr}x5p^IEu@<6&VxTFYT;8GKhb$Dg zu~hjmis=Z)s2z(auIaRi7GUniXZNIFfb;zwFm-YrILl2^pF}~_3aTsj!9JQ%)!PtH zzAp$uteHyPcA$yUc?T(jH{M0|6i(_`R4VL6TL|z1Z0p8^CUzyfAdEIp%0wH$GPxRo z4i!&=fIkA~>6XW0oJtE9IkyA3u+zBpg7|mKM+4Up3@kY!)mV_DFnU|~c@CXSSec^) zCa5~8eqIt1&#(#C+fidBqQmnWfYnd!on4Zcx9`MD*uJr2WHpN{8Vk6f?kVGG2;?&@ zcSDcN~m*!7yXh=Yt1s{$$R8SH2jw6sel?nctFO zM@A3a`|^OL%ZIYc{!;WtB;K%Y&xRda*Zl2z?Hu1*>nxWh#(*dxlP5l@R9`wbUKaDb z)v2tw`5;m%$>lDlp2fo`AilIqtltWPpl1wBq2MJ(q7yqHOy;IQlKBh(`^DB|=Hv!o zuY{I~H;A)3*?}Med7B+5uCEazD>(Uy7lA*o8HVwAi#!WbfVs)Ke8G?nAesdlWSj=@ zkvqP|3*2B`ZRi?F|0v5rBHY2LZSraZqbGJzk})0EB%oRFZavp_syaTOU2n~COS*p8{L^&g* zy@Kn~%%j2u|MDV3nCgozN;0?)wgq#9apEq53kgjB+Bia zv!mXXXL6WyI={3CG$9nxPeL3?O7Kb@ko%xFn!`!ie&@xx3i1?7e0?ccPx;rAQ-0cE^I4{d##9E{p zU47ETuz#TmZ+O{&-<*l9!U|a&>0BfNqJQX^GVEn{gx8A@R^)d>BOc$NnMGiqkV|zy z$z83(;6@p}hsW3HJ3BB(qtr1tkcxWm5vb=+bE(Cq5#w-VTrBz!$o7$$2R4lB332s! zqWKz;nwRCS{CQMRZ2m*)>Af%A-JkUM)x{2@WcFPWHog_)&|gg#NQ1*gb5d&|3g^8q zRV3}+wOxRdFUXWye-_SmAgbf8haqlH_MS(iQK~XR?A!|Y?g{7aZl&YgGc=`s1$8On zmaU*vLU3gr)OuQBM^9tITqI0I=vR$g1g|j^-jlRI$1+Bh?U!Z%g&;rBoAH6esTk^F zFa<5iiOg%Xqo|&an^=cjP=udufefuB-piu^qa7KpVt?e;R&Ww`TU7M8qIO-y;SAsTUnY&^tv!o7&jNJefIUNsAEc7IL%_GnGVgn}bn3w62#knYAE6pJt9`9PM z$TSf({>aGa07|*r#_JMAdj5L^I$CD>wJ%0mcyM`F<<0oOfzSgWl1Uaq0|y~*7D^Kq zJ(k4b@0Njri3a4%+8b}|QBRp9i~nYe*40j(Mr`C7PDwwfRzStkm!Q2U)%=8EixLk07h zoTK3(?T9?llFl+A)d3`E_LGGu8%x71H}*SSb49g>l?n5~iusU0V8U9+5HJif1iauT z4EP@U(EbLUX6s?d7c>*ACc%g>NFERbU2OgDefypG0QLe3^FHG(0MG~uBT_jduR5La0-SFlqX}p=agMMpUxse;m;!^)B4Wx-KWm~?vG2dwrm={ zcl(C}2k6CZF*@7M*TThdkwJ0e)k)%)s<7r&qAxT9fPbj#dh=`tr^ZWI=Uwb6;gp@j ztp*8KyODRg{h4ng@5y#fN4N|$&!bpMsdxMx_fTJUrJ4>kRcfS@8o+Ul$(<6#3lv3} zUAVjOH%?NUC|!rJ@}#KE|B+sSPjD~co_xEi;85#s82$&BTUvouql zUg3%JNPWJE#aXH5?e0L%SzHRtD_-Xwsm~8|ZOliF8PG0pJm+nxkCY`Ec13k;kw`m0 z_B;xRdMo;<{~VAC$*9h#d@LBh^_NOkTd;|m*^l~m=2FD?t0Qs2IE47pawQS8pFkXm z;G)S?uF8~8#<{{4CL8A>;?UJe&O;_jl}0WqA#y??*Fd$^%(PllW$ceR$gyhiF|mH3 z!nBZdo^W1{wn(Eb!777DW!PvkWO9thiX9lApb+95A;C;xDnlQYAzV_v;!m}8xzL1O zJS}(9IA}(v`;JSS2~FvdYg5z8SLkc%av=lP;wkV=$ikK0AHE5Rxeg|$X3g}0)L4IM&#g-d@?fD4rq8Z8|4Jfuk z7Y^yj%8x@bh`XFX={V2qVy(5&!4`^@Kh7+V#t>1O_h}k)|xP_Gh3YVnb+$;XHB>K7v9O zy64<*!cPAZ+L-}LyBy3`6@dbYxGpi%g+4}tiQdCbzMW2nK6OZkmQ}DDD6I55w8AIq z4%Y>8PJ`++(4b$*rhNlr5B1lsjJ9boZe!+b2l(~&R6@sd*?kSq6B! zgd0tAE^4G5AKiH;1q?K7{am3nV!~g@$rcy2>LLhB zqcu+dc0dNSTW`~LC=JD+=IcxsVitJ8ow-Y#^P9II#+Ddq2U6N;vC_P&;HieVDFpS^ z#S|I@_b;xy7ikYx18$SC5bn}Zd`@534aaP9r;ec;=NQ()IKUD#JYab z>7-GG=1uRY1N{5Mq%IElw8 z6qi*Gr8e8YFpjOOEXqm6VX`e{M8QV|)00s9A6C?*6iGJlH}N+z2XV$#kF6dd{)ek< z74PbRherZ=9IJoh0ZfNc%6X(L5hkai*BzldYX?UgggYu(4jf^ZgHLR|k0Mh~k9~w0 z^npezb2rx0q(2%l*GJrybAjwM?!9;$NO=JqBcVKTcd^P=X}GJFBeKs2 zvV1_lPl6|H+)&D&M^>c3Y2~apb8NxHukABq*_?6!y{n%p`lWjr)P3d=gNO~lf>?hV zB{hJ31pVovJZep`0c;Ku>(A)`H&^^vd&E6sJHIdWh(Y!+$`9?>?`Pt2leDx80W>3v z+y}PC&LMBw3JmiB*PTS7yI*NK>!N(uH^-ts0x(nMg{F8yibbnVJr=L9W zH==DyIT)GgMBDcDta8xiIe^dIM~%`BECWqG)yqq71dmGu&pE{Ekta|~hvlnW*K-93 z*5D*n&OYhQXkHRoW7IOZ*_@Tf@PfsNxx>Ou!>P&!XT8eVR%}6FfWIu)mZH$NplN3P z2vOTVr=a=|xyuju1n5)K%vVN;ZfsV%KIE=AAP>3b*c`axKv;kt=GEfBG+UBG$tIYh z)n&9*#S_ayY5?3*2{381A3Ce9~ku#;f`X-ejIeWJJh6~T2Q)cwgqgf zcYv{!rkCd9)`Y6}d%YvErE6cvp9fPkhSb3aK=Co6@p8bHxO0nvOOL#WnLmM72A?tQU69yJi26Mvmi@EI${Z2C+MI>{MuO+WrHTTUI zhYzzd-ul(z;k-y@s|maS=VX zJh6IJfxvbUx^iQy^|&Gg4~|lRYbeo#A$m@`uK~48XNXQ{V#)ToqL#y<;`xYpzAWS@ z8hSK5pggb~63;Tz3^Iu!F3hrSzq4+x$l+$7T?CURbp4h>585f~`_G0Rv-(%3Op09J zUrH3Dqqg0E9Ym5yYy3;YcBc(nTMB(|r>ys#t@1sqe|6fV$bQ2h_$psK2Ly%awg=}Y zCF3nF+l+|A=pq<^l%`q?5~g}U*EqhN1A;sUj9uC|-2`+a#Doj0+tBJDuF+n+e@)VoBm}D!GFcVVe*BSuO9CnBI zqR)ip=0H~&A9YCMD3sjb#dKa%>OhA{Z2VH^!bNuaL$*BeAX8nq_~t~Zpairs=np{i z1XE@E0t9Hcpt{`vukvEjF!owV40;A9iY5boRlFB-2)ySCM=DB{)NUYZquq-G#*x_F zN3bu5t9C|%gc9gVN52qsZLInN4%^BBt#E7t;f(y)fc~St(IsrQbYzvvVnVU}%^aG^ z;~_m=m#2W}@)j{ghELHU;Cq*Xc7D3ss*O>HFT>(-lROdyhz10EFU(EF0cX^pRqkqm zBF*Wb-B+Od5gkD>sh0gwD@y=dGRb=l>RX4l&fp}FE}&p=yjRVbB7_ie6E9B&Hg=2m zdM$98ixJ{j)E1%x)Gjr&pr2&AeDHTX()N5ELTEYUbvW-JrCxAM@Sw_E`(_omHW@JJ z7lAIdmTX7rcc_!vCIikS-T(3SEpSa-Y5V_gT}xZrqP1PNRfv~bzOJim*L6|3Oud!1 z)}~flY8CQrZ)|I8M8p6gnN_P`t)x~hRgh?{f;X~VYmr-~RxB!&sDKf^iI)?x}Ld=8(9%WQp0*I|nhl@nd_?rV4wMCR(JaAfJY#J<{3>-tWD)7dCZ693=9-38jv6(Y4c%HT$A$NxM1 z3`s}xkS!D?RHCuq`u;aiaHXK^ZQFzB)&x#c>gMF4%w&MqMm}tXnH&vM>V$a94yn7v zuhNaT@BLLs<1b7HVNhXJ?TI*Kb@i@%_U-x?pZ@BB(UE}{-+27talL;z`uW#=hX+wll%3GB0uw%ZgX*=u#6`pyj&eEV%o*sK?ULAC z8*V}-4cB{|MSe2TXKgSr{Y;?Lh6%{Ov`C!W`iA9d4aF7(fI(h4;3b6ntt`YHy<=1# zGpJ%TS5VR%NG_{Dxl7%IV>Akl^n4ptjS6IsSEF(XXohJ@(5h6N-gFUfZL)W^VV@Y5 z)|kU{Fy}PFm87;en-}Hh%DR%&)>xe-vPQR+EIBR#rP`gK0seOKo|9i7|e}!L5Gb@8eqMD68#q7 z|9mJT(lea$e4fV2QAaWd8`>R}5B~b6c#^Q=#mJ&bZQX^O3A%yE$nLD0e0Lhb4RB{R zx*X*43Upj2Vwg4vLV?`JA?|aFI7u?-hW}P%?{;73BZ28IjO)PLB@Nw((iI90x8sK{ zXDE`TdU84U1XKz;@~_Y7oxQ?a0&F5=n!2rcsoS|<#H;`?Jrhv$K?03+$$rtQ{$S(K zak(=0o&pA?iBR@;E!HF{L-J0pDYL#CxetiY7hbkhqI3_(5-QMc18`Z~2}RRDpW*47 z44xdP%5EmR(OR=xNr)B*JQ2e5gqETuuvD8U5&4@oNZeOEq=$-3szA72FZcxU)8h|} z3v!y19Bn~!`utd7Q=WXn6DZ(~ch~MMb)DLn8uQ|stbEIvXvgOV=+y`4HPMdQ(T;bb9WBw0 zN249DMkj*jD4Xf$1kaHL&k?`n%c`@-23gSQ%t(7WjiC=iN>&8nJ41HF6?ETc(*`s; zIEniBabr{&4!cHj(}y_4QYAnKZ?J=(o;-s!-{$~DwQ#S(m^Qc?YAl3R8iVh?_#@QF z46;emQORnTR@GCEegK|vyoM!jOPcNWf3L6mRpc^Us680y)L~hE(23uX7Tzrht3h}B zr1pkhlaT{Ix0j^LvS3+jO+<brY|NF~t z?!SLV#My5fu_5z5zWBw3CoU|gEBhwie(1=5IOC5!R~AwD1;xL=@GP3tRbouIq3GAg z--L6a$nEKSA`y#&87@wy|>HyeK;(c4HA57v;$* zRy($!&7t0etO&El-)2xg8K!k#E(g*Gk66@HKT!j(3Q@NK4Him=44VkCMYyT2kwr~s z$Zn}WI`JSX?M5wy@SZ>6T5$s1{NmAon87%G zi41E&TJ2xOi9Pf8Gl+9bT-iEc$B-3>ZS){tS4U9W{Idb-|Do8-RD*%#*%|5Hn#*8n ztG9Mnc*F1KV_WaSTyrSY3>@|{qIY$HMA+UH-{(MA2V0QM?;Zz!d_#T=VJjNai02=} z+q0`l*QpK0isf!=Zk1tiI0AopNPvMzvZeGkV&NoGwOX9$!SZ5thsh%k&%v!Gw_;)} zxq@kY^YPl-@xM=sCK*aJMW=YeLn?eY&_1Lwe>1G59?_{G6fwF6(aoClo(R0e&j z&y*>5ZXnM36{)8IQ9*vG$v;+6?lumoCdXNTEhaOanB#>ljx$l0GSye#0s3L;07Eo} zbrPxNHqAe8H$vp9-~F?$lajkV$KkL#CBdMKN-atQd}D- zSgo*Vw?KH+pCDj)swJgXMTUVtMM09-AR5zBXXu9kph0l8ResO{^tOGW*a|dW>LxCO*DG{h!*|;#GF(L4JI)C8X+(p+D{Rzf zI?Gcn0aU2_Y8uhC1?4t~Aba2=^Z`D+HCi@DGOYzKpD-W+&K+eVe2W0Mx40+JzaE%Z zE4|FCkk=CO!5iBQMyhWOi-gHp8+r!3XrZm(T6XK9GW05mTr$`VRtP_4*SR@B7`s-- z{*VUteDwAwUH>h_Q0Nl8@x{I z?F|~y$6r2yteBP|iPEHu{`|f76T4-5zAa!6Z(je|mMzbJv~|_U@1GcA8v5lsLx(+* zi|{Fl^PbrHe-~$0fBoe|%l_3nvqp{C@8HhHJQ4fIBg;$v_s{!}7$fb zRomEwhyO2!vL@eS!KSmpdFb~J?M`lZHNKjbzKrg>*^{T<<%XBxt6kEesBN_iF`Lp* zPd2hs;a#6-Yv8!?YoEL6m)+8nMSc!!<#ZNvT)fYMS0zY}COGIJ6mjmdyr?jzG^L^? zxp*;GS(sAS!t^#XXEN0&MvLY~=zhegT%SfLOMGSh0XeT_BmZpPaH^GqOe= zSRFD0wk;G!7g8VV+6p|kOB+>3LAZ?ahM-I0#wsAML9yPA!LPR`4m|ks`Mb2Tbg4>*}3H1 znDk8y8hEUH+|Gt%XRwy3Cb0NQl%QQHBI;}uhtp+I5&)YdONCc&;!~xAZB!vff0@Af zH<03GN*9%(BNDDo26w32=@8t<EF z5Fs)DlND#ICY(0FO}b0)gfBRG*Lk1tI*rPl21C{@s{S%g@oRG(uYv1Lo zHqusTQmxHqhPb?xYb1qk$JdIJi6UB>hidKU z%Uq{;H_kma!lb}$?{fAUMNrZY#dl%V4Qpt;b2Tl&|D1=;gyx}B;5UvYwfawKRG1t~ zs;@RqjW+1BwaRR*Vk(BZnS;$W0kX=Fh)VyMN-wYrB(^LS?jz;y#7ui;IU_`v|FwnwhM{B?}}n5Lt$uw*u?y!@dw+sz;9)UcUa#frta01xbr!#9@em3eJ z8^%Z^t_HBqRK$|MolCxhcL2*rSziiiA{6P$x+Y67GoDC_-PqD$C^VH0QFmt}N9n-n z#qAIOW(Ie~P2bT!jf=h_(J_fU9;^cSyg*WXJ zZ*bSk#Yb^Q)~PE6K8(yDkvayyht0na;es%keUKr{jNVb$Mab#&^$oPN`&uJNW)o3j zLozjZwc?as0NKp7Ze`mjtmk`}uK3VCP@)J^#&^qHLcJwXUTH-riLIg#aIgrU9_wGO z>Z4P;*Xul82H18^_iZ~OWY+l=1WwnBWbR`l5bCND2`Ay3GaOFX**LeE0Bd~J>D^C7 z?btA6kL6B;dN6XCOn90s58(FxKFjmX!Dd&f;`2oz^_I1t&YJ!Fvy~Gb-@8@n{w8AI z!q;BgJ~(2=u3e)>zda)T^=)6g{@e?1uf2EQ)~zSs81wL-#{A*iIUh*pUc|*N(UoMTAuA*i5Owp*T_-WLtU5XM{1GLzk z!ZwiN4Jq)smGzlULPhQ2M%Ryvqz=3~pyR({suLuIc3kf1k^sl?)dSH>Q%-KYQ-clN z$z{rRa?y={2WD5fez{|nTz{E0U-9$~c@y<+u(m97CrDBL28S}k;hA`WB95vrC-tle zux2>YCSH)}kE(l;dYS{Q(vena>_IFs(1FwW@?Ogz+ zd6Mt$130^u!0CM)sWOl+LLQw-VnPT&Xb8OEQ@491!lfSy;!%?a|a{_l;0emhruJF^%Gdv``%%ww4B8dABQtsN4QpLx7RmveqY$c2!p z7eY#3C)!Q)$Ia)kqpuT|*NN6Q*{A>`HZ@4qaDsM}(+>t%LmSr8hQ?H5sM66sA*zUd zPL7=q)AZzzEp&%T-rg^Z1oa5!8f@;*#S?mx8HO@9RQqY3XyR>s_zdT1?|lM6cHkL$5QFY!1_iGU5^R zZ0Z4*!W3494<*OyrA)Bxp{H##O;Kf<_1dA>Q;kolpJfgvg}*oPW^`Cj+C$3vSe}$s zGx3&QG7@LedSwopaI-fL$QE_;{``_ntG|bhJ?p~|TdRw}kmr;#`}W$@Vaxj{h6W}t z`fKkxbDWn|X!5o`9wOi*ODIE?VO-B)IO;Wbn(>=W!Y_a6J9%cwU$0Y=5dnZLl_jEF zSet(=-f?^Vyseh|$2N8h2SmYV%m_8-f{?6;v{IYh0j55dr&1s$GO#!T;SKx(NCEse zM%FkC1v63v?xcCxYi6S1W#a)%)U(-ACNu@5bhG>SZo%73}=*2!dw(;XsL{!{pP|8?`e zW*{$>At*#z;~#559bV^Mggge^FxS@*{FsKLjbg7)xTaT^*zCz98!AL(4qj0 zr?b4_d+N2UTTN82W`SGK9?7m?#dOfi?DtFs~#_aVhm z4)19VsMNWyZmWFqqpZXCHMM>)dyPp{133*JODw^=+4f z9O%TO4#G7)D7nNsf=SBUP}?~V*OZttW9jafgJOy5J+6hg%G+p|!WH=tf9Ca-+1(%V-P?pPMl6;J2 zGFx2bChdBBBDcr2#r2*|US`i605it7mQAUwD5Vzm9`{ZTeLn}bpWh5r+|E0EK@DXk zncDNJtoy-Cny}Y8AzYgyYzrpv;vZCp@npN_|ztcK)9YHx|b-r{}QfkVkL?m9OG(2jG2?I}A(N zhm@7#H8Y)&s!cT#uxe!x6i*5M@R_v|N!Y`outicq)snl!YX02R{4Kn(<)GdGmKze{ zz^P=`JkBgE{E%19j6g<$3yJM+oWl~%Ny10$_~27QkkSHTKLuFoK48>W!j}Kb&fm>5 z{J?>i8>V)L5X>te8FEm>I5cSWsX8`LG!}%n-f|#KGT@@#|0+L04P!Z-=U`^(l~-Wc zyjlFa8Khr+mLIm9XBi2)7)m;D0yT*@YT(ae9$7@M9@d=WGsO!-2b)kX*?nFC_bDs9 zRrklCbJdmyiKKnVKU<8x__jEwQLC=o3}^exub^OR08MS@PzyTwr~|Vly$mvXyEvk# zn+xk^aa|clQ5gl!5eqf3=i_3GhA<<#T%kzYy39U5($f-`QoAiyy;m1mHNLWE|D;m-Mcve@C5E24aVZVkV)4D9JK8>s zODW$5eqbH=fnUp1&18%PtpRYe-0K_(f-e~XzT~f8vW1g&%=Ig9&h>NVp@956 zG(>OORIULh(iLAgV`?W*uAdyQZqwx`ok_FV@(2sIlWPugNZ{T7qBY8D{F&=d4)VTo zYd?T9%Y=Ds{n zb#CU1G;2zX@tIrjJg)&lv`@-Hxn@6!+c}@Z6g{}=r2WC00%GnIBFY14LK|@^OmFH& zL`iF}@P3o8f?iQxp=C}fV;$pi8Jzo8#D;)Sq`R9cX-7ow1reKhmeD0&*6IP`Ze7|Y zd})Ob=LBp=X`Og`@k?%kYZb3M;69_vcCE`apYtcHg+C7X5c~PVP#AutDHzC`Rtw)7 zpSTv(4Aw@guQ+lUa#@eSWjuZKk$rU{AgM!dlc*Y>Lb7m+2)SY3t>X-Fsy!_fl9yD9 z;5++fCej>&TIb7vd>}L5?gUCXVN>_lmNg)wiNQEb3)100snuf06TC!#Z>PbDxn0NQ z1jAC%OLgM4GtNXf6Y!oBU~4NDv4XprzUiqiTZ3{xl_CpSt&_^{NOtcuJwHDXg zFM~~&?h%}UfZueaW4Qpv>`bM%AYH>^@!*b2%FwCI)Z<#pd(cgRp@5`|?`D5+kdM|QVErg289^;mp8wo;FblP$>OpbzI}?SC7!l4_e?Ht(>H^b*W!^g{Q>~p zbppU%@z*cO-YX<#wNXIMwy1z(@n+K>XB?ffZsyMz5H6kNA&1x z@(rUPN>yuZTz(oAXecB?9;+`s;KSpX3NhPpSU8sNfZAD669?oF%=RM&gnwa1w@AVK z>j0|vx;uW@fVa;j<4+@nu5Tw1VHkOllm^?`69FZb#`&OjTPhMaDG&Y$Be+xMdUv}Y zxG#+#vf_}F@?DD=!)a4`k|p6S$WzcOGSo=%EF<$=!aZl7LfFwgVh`l_G7zFnWkvu! zP)93AiemgctO=qtx>Ra}1gKDZvuJVjs`}A`&oWxadH=KV`xK9?3k zAYvvs9^xSSt|d8viCpCv-?;KL(qzzL@u2dzSrkd@!9T>!PopNcz?C1@uz~&4Wv#*; z3~C(d$;ar^CIY*xmTP? z>+c$P!DykK{exA~t<*fcp| z-V>qok3ak@^Yj~!uYc^_m2pc$+bb9A4bd-ddo63vtUr%5Cv$4DoGN1M5slhr-EKSE zpkt7cIG6vp#u|HR8$Ay`=1Q#QGW+P-{T-! zn+92Mx;ZGRtI{q{LPzewk4^rXuz#6l{qQKWCexB8zkn^z$C-CoQunEC!zk}P;Btxzh--j47>=i+kHG?zs6^x@V61RNov#B5EegT z9Q!!so1}J_MN7v{XONwhDlhB-DIguX{m97FNA4Rq2W9f_dr;9B zyPiyKLy~N}q*LI!i9GC7AAi<#M&oJYobD4Nb19d`Ky}ZA{-9M(H`V4 zQE~ydn8)kS=necotq*+^L>v6o-FCt?4LOczrV1Xu#5AetD%|yz`k{-IhbGl+;u)EbkP{mb6+Nh zY{1zkcq_p^&}%g78fz%+L1&z_@PHj(E2#Ui$j)YMQXA5Wy5wl^tE|lCFIfodKQr~eN6~xlG zxf7ZqRe2~eG!M=7_jBNoW>4y}OuFVdTEKIpv%zz`==B^Q3$=z!H5y75;eiV?U1&eyRzK$!xQ}-i_4~}nBLtkHLvrZv z&EVP^oe@X`G3hmQFkgV5=EA$1ke*}BL_7yQ8{oWm=SSRY#r|Q#(C{2)mz5<7z;nG} zv_2T~n_nLBoA0=G2KR}}Q0ys^-Uj!BS|?Umn;%8bMgNE<+9@OBbx4!}d>K9A6W#J> zE5;J3ZdvCpMPr{UD?%7d`d2inFFoKKrcp8kDwBdS=9lN72gL}w{iHRW`*Ji+8VT2V zM5umrixVg1hZ3CIju6-7M2;+$s6;Y;9t`!M3GdET^*SiTH0-VvC%DZUWHD4byPhVK zb|Cvn_GkB+P_gIDKAA7zBqh6Ru&(p4Wpf;OAYv>c{5VFGp%BtepcQQ>o`mh^?gN+z z*sMYpI7{|7yKGk;_vYgyy0|C>4bso}p*9yWQwNB_v%`BCUUddoM= zoc?y}?CF>GJefFe`a6mLcpe}1!RqH{Jn_Wx(&*jWTK?Jm&+YT)MkuMNgmIg#RdK;t zYku>vF@bA$s16x|ZpN-Oid*IKGie9e2=|9E43nwx3J45x_>0B;_gwb36E4>8Wlc*f~rMPSweI4wT9uvQlYh7}5LBW~!A+(&mR28ZCQS4?5 zMsa@7(KVs1&oBfFWRfRw)GZ2!{GyHWGwb-fhFkG0tIf!a1UhiIFESG2fuf?r0p?%`U-aafM+r>5+urtPO9 z_j@udN{!{wC49=NU$adjcY1MI{6f0n(0MbYqy9Kf11WQK=1v z#qBs(>{Ct}b?%q_ztd-U)tuovwRJXkJXqsvgk*Ao)lPfF; z4|i~aL-TwQp9XdFrp)l(Rg!5Av?;e<@RDDC*oKs$Za;PJ3m%Gg7~p881$OgA!i#kI?wn#+ zZRmELs=XSa65%zPd}08KQCymuJGQ~2HDn1Mjq`yFr!zWNj)Af4Lo%=Atl;YnKW5IU zROw0N(q*w}u%!w6*zBWH3&b5+A%$I-tfbb<0xd9>(YFdjSfg{?2{P5wNYy?^_(Agx znX-3|#9b*-oilb6C?esh$4;|9fSq-URpy8`!3 zsk-Ame2Jh-fntaSdFE83T_c`v#od$gV=$#*w&OoTy4l>!uQ)@9HoB=h;4H@mm@&Fs z8kuTA&7p|VMl4HZj#ZFoRfXA46OEd>nWkn&nrSXfja*Se+bZnA8TR9uW+^#~)kNA( z$uJKyFJk2a4SBFqC#mU(a)7tkzB{FJUPJN%L)iX+ku@<1JhQ6GmT27Pv|n!aotd$ zTvD!eIWI*R)lC|TaJh9zQNbv7aiv~d)O8x9T<9HIS^)9V*Rb6M% z%8qZBNQ=azUFzov8_hXOud1}L2ftU)C;++C(1x2+dFkHf*1Gz*p0v*}I9n8gSL{PZ zIqQ)KG^oZ;Km7UB@V#uD#ZXDEC1j!nWfqD#u6aJ5ut7EwnPha!e56&^3oxt$kf(XA zc8D#c3|%NdXVP9`iH>(6Q!9q0ULRk6Sk|K2-jPFLQyugrVx;TcPJt^UuwPd_;KzS`G6`167nzJK|Z=Z^pR%!|rh_l}>i z^#%X%^erc?VYAmg-#J|RO+nn5b_Y6G8j;+}MI8U`FGl>HR!-IF*@6Zwy&@LT6E88s z;k{K7b<QT06eqObU!4iN?o|xyoXyZ^AhRIst0Xxb2)cWLZBIMRICW&+W)%h$~;9E&%@Bkct#0J;Gxe zBCd=LDQq^s$(Yp$OtH)0mF^R@XYHRCV-CF(!CD;ESI#Qt zQmhEH;hm34lB%CVA;3$kmY3{<5+Pw)B4LH6|>eBKA8aHDq8-n#M9V%AtvJe7&2_ z+&vB3k7N6#K{a@wS7x^3k3dliaI&y<4^?LDT66fVtC!pVIBm+nm&H)#FpJfeKErB~ zPj3w?cCBixt(l*^o-SVQDUMxM;m`!+5py8$L5{Of%e}zs%ycZBm{Ue>%_Z6D5Z75L z;0L=s4Eswekh^;ZmgsA7zx=UWZiKBs&u&4{^&a74SUkM*8K!_czlKaajmA@n!pDAn zO4e}N16NC@>V^I^qz=%IcJHi#;|@b(ZuYtl8m;g*5mp6N)B){~BE+zK{b_iHktRE{ zaIkCRQNhbT`MN?lX*fdho=;$-Rtg_r^u?C^Y=r$)%=0O&KxF#&0 zMB$ce`^xQ?O%L=5AJ7|r;p#bpt)I_n^qUB?-~tD}J2c4kBjqmB;pi!dW>O+bLR$|h zFscgC2cbuW!q>3=bjb-0_W;k#7W5Xh=gl<<`8e#WE`?||jp>`E;L98@6~2IxUkTQ` zaCd_u)wKmRcY3ARh3w2v^o^B6(VR}a0_Ak0AH43Zz(G^KJA-WKyShd$6Wp@4y@FRT zLS22C_d%|5NqSDkMYe50p~7n$_s5wjc9XxJf~nDn(3O5Q;ND6@#MLcmxcA)stHsrK z_zKTm;9p9A;~zsH^!W(4QZIB?i(fqdp-HlkT;&F-o9s;%zK+@F5hySEQQXxyj-nBg zmVhT2QgV02=8EAKa12)8q4G;$EDpV?7UK2USppqEg807G1BWhg5Q`O zIMXi1fg2(Ot$Y? z{(mDa7%_`A|J|;g$(Vwp_kFr>Yx1=VGErj_HT?a z#;1-rbmosE9N%Gush^G+_U5-Qz4peO+%x!lN4CHA;t)yMz4uLj@8RhO9=PYJ_a1v} z_C@Wgh0mV7{~u$YXqPQfCjG?siEGmdmi#Kc$8(l=t#YH-- z2VY)$^X}YvXZrP~6sufBFD9R|1NC-@r=AryhVyS&=EO(Rc$-ald{iC=CqVB5l^Rr) z#7G)tY~Y0TD7@ds%UU6}EKbTA6tO)bY+ODxUTD3uB{Q}6EKW;A-?xD3Mp0lV!%-N|*N5|?qRh_#KRSE%sfzhwG{VLDE zI&ml(kz;!hDXyYNGld5f`8?RbVd!upx-vYClf5T+XMD$he-qm7-^iWag~Bp~KUwsz z(9UQ@z1=nw>58t3z$fP`|67`T+3gJ6PjEE>tWqU3ogBXkOwf8f3eKtxq>+^c2wW?fy!RnYz)La zKOS}*)>s!AE*Qd;%n!|RvZQahz0LIOIBNj5(Is7~q|-_}uk0!B`Hy`?vnQv>d=~8} zcOv7CdNq?1meE%ERto!cY1_`nXlpj6i2j$Jz2QxWE&{DH@tdV;1K!p-$bMRb!9CDl3Xt% zUQp(xVd#J))e;Cx3Em;64Yx7^p;gKk^HEMk&BXU0gY!A#tN(^P1$NR*_E7;8cmX3}|Z zCc>75i!+LFJNR&c!1$$2?LLeAV|(D{7uP_@cvTW^P5aq6a$bQf@5L*D11|-3Jl&t-Ydha z>a^}na8IYWMXJEyceKGK0!fBafiiQhFQwIhkT6@>KQ-%ZMy-kvihD#XEywr+X zj4+uZ^^qUK7hC&!>tBXPQgfYloGaVx<+|rz7iEac-@ew(g_6U}rQ)0(;!E4e7jh^;(? zo761lvHIzvaEqF4TEcGfIHD*Wri`EyoK{VYRYU49+wUESsR-#kHv&1gMkel&rF^zD zD5h;ve$T?_lnMnh6ubTLZVM{Pac7TbE#uju@ul1gMAHlMqvrz_w-v;+y+7k<;r5|R z^{yA9tB#$iS+Oi(a$x=9xqhJoU;5AWQ{?h5(sZ~!08aQ=lOcV*WH>fa|G)Yt zxYbGQ`3G(|VDpFP990A1sU(vYAzjidh_vh@N9*S?V{CIykYm-`t_q;y&PP$=@Kz%A z2hbV#mc!|qTM61uE$iIpdF+N?e4t_rzEdD&lSa6ljTg{(*{uhmwf=Jmm&t?<8A?pThdOzQCV=a)X%bZv%usKeoe;VzfDd%N zQ-%sLcYPsPxl#mbE51LgT^Jik(p9i2*~JS)7X!K}r77QGts+!4BcEI=*I5@3*wkJQikVgVaI^u+H2#9=>J>V~N=z zr!N+Oe*h$e!pGEnDIDiQ{OXC2)T+8p;7<}Y8XZ=K_UTf3mvWS`Cicw^#fO`IVtv{v~DwtZupzuNywl8h`t*@g0fBI>>Z2b{wyp2$`>_F;rF}lL1jBsb7 zggy&|>L3h+;UsFhr6oamzXN?AVL>O%YiP0?yvd?uPXt9&T_#sVwafJ_9Q~KY+_?|w zI;T|;YgIJpP$TQ8(?tOA~{Qd~1_c(}@#~fq{)e_*j+DgW@ z`RRIQM$^)0`rLTdwY3r7;~(3Wo8MCvO<&!BobZKL%=KWnr6vkRgy0<%i&9 zKaB+beHrC~X4eQkIF$-?4@T4(rhwC^Y(0ZoJG3jEjvxnklMuHZfK0BAX@Ek zcW*ShHM#Yq2$3va?>vf9AwPZdQVxZd(zh0R9Qh{Y^=5A)4Ano5|G{We9NwJ@K?ZA!j*!=1qH*4TYXmb?fNwvX-NC@Szn88M0rNui7k zI5>Dkl}LeHKE$Ma%trLo7*d@dvY@OadTXm)s3lB&r4wNoCDOFLe4PhPF`CmUdxOz2 z=-Gutk*LD*@M}DIAhT69B$QOcLQ;CG(N&~5=o#XesIyFo4Bx#s^+v z%899MTh;~~-}%(vfYoZ;AI6NHzu=GewY&(*uSL zfB1)#kmn!X%;kOB8%9hrsLy;7>N!YJmSvHi+O)&HOAf`|2~8B}9GHNrXcXtJ9wb4X z^EqP0kN8pG#}JFf=L4PrDxU1Bm9PiqbIyhzNg)0Zi&N{ZNj?fF4f@(YqBQ|2Kv#@7 z=*6gr!~)gdWI=>`l0S2K5DuuYS2f-W6tT#|F8&CSxo4O`Hp8PPymx}kGc%WwvFY9b zuUJf1XP~t{{;=#}NS4YO@_Pw%`ZyeIL}L&GIMp@2vV@IrqOL;rFXwZ*AA7vq2 z`}~O75dk6C{^*f4A@C=t=0Jw!NR*>!cS`fT(w4l&l?$lw{mzj!9*u?DO@CLI(z>x+ z)eVB13`fMrKQJ0Z#_kO$ANu`?r#}Lbv0uF`*H{2HHf7yI69F=|!MbbBl4?Z7Rin8D z&F^w|QyhBp&t7ZAJWdvx z<0^?`9Z#Xq#=dRow`%tl&7++Kw-X%pp?H?6+U9F*dx}AKs%;Y`xH9NrALu12qGb|J z@6qC&&?n3!B3x*#i}ElXI?xEq^2Y}N+6}Cv@N2K~(25k`9_Qr2 z6~IATiS%Z;$>k9};tiW~lnH4lSC$sE2rs0S2#)CEQC3UGaJcG3gLX;_suOVus6)a1D9!H1Jzh}y-Npca{(1i90i4}@94sJgX{!j; z&^}>h4caW_s_LX}RC$JJAcY<@eg&r7h=IxRoE2|!8fG!b)9WAO){x5QL<-|#ELro7jJ zw?F2gK-Rb`iH(Qj*yy>&E$xFYNBG%iZ^x?ZXX5U1X%{yqmew z%xtl{tp=k!JW^$GGv72bhs^eZh;%wc%UuptHg}uya)5Aa+Wt66O<I>mJH+exlJkw;+$4^AO=6J*yf0Q3XiP zc7qb_0GBEEHa+ejL9 zcRs)H)l0QsOly04=7P6BawHGgo3=WA)4?OgNM&i|)JCS#e(=C?j=A`O-e7ef{7IsK z7qjdLN$qSfL?BKZN~VYu0_<-LE$>Jq?c0j|-9*dhB87?HYwasz9*Qc5A&tJL*%{Q0 zO0x{&XcOf6Bu4l5`2x4ATsk#pHL$2|sYtcOTArG0nhB9w zyuCJ!!O=Rg=WOCIWRL8!dWUh>2;k)uC%rZ5no9T#hAMQ%tw*lZnSxkNOr&7r^PhZgu4yub_J}$_ExXbfq>?I-L(6ckKfr)r7@iDoe4GkUfyUC z?2%uDi!)p@N85P$lq)DVRO~6sOh+u)BQcZ65tqhL#gX7X-+&Hj_!mvM(rMy~Wha*z z;rMoZi2CYDkKvRvOjE`+HQT>j%#Ca$sH1q#H|TOax@dE|+Ny#9Gl+Gdwxh`0Y?n#3 zoF|@q51ne}<^xp$rbBVM5*Hyo5G*}lh|RCe&wfpj{hBoFkiP4il-Bng?NydJ(gSAg zYqIz^8WP`7Io@*|$*pNSf2?+(zXgkxU5`noF^smm>kN)$Q^R6rOu5!#2|KW3;~aQ&cQo`JZA2qb;Hi%T}C3 z5xF;(WB7@)&$cs!`0AyYfKl$4RWU#>Tl?xHy6+rg|`Ti=P`kJ=xp_kxIZOgA-HmEx{ zW6DajD@)Dkc4UnHs0wNaiXNYFbOx&hl2}>qCt;n|?h&anV`a;u7AixDx=v^claxRf zdtHbt-|M4BgS-ea{tnk(KB)?+6uH}$t7o$z*Tu0yujKvh0M@mqx;*Abu$H;P3kucx ze3S>vkls)2c*o2@rM2u@M(xvo3YS^CmWK2*;cXQ;?ou;DCf`Vsn!A4F9Zty&L*KUn zO3F|zz5+>e>?m!72+lB{@y2?-4c7N$BP>XVa!BC@>)JQ*X-IRl`dkdAszfp6R>D77 zEi54mZvs2;uF0~l?jeZntP`=mqFjGO&Dt8rJg`b3~g71T5``L~LiA z3BP){6R(+yob}7aE8~C_Cl_G2mpH}|~gKZSq zwZ*KpBjX6Su#14#OXDqIc#g*s8j)Iw$fZ{(x8P)RzSEG_Hb`sdNG>OV1N4y4ry+g^ zjj(|n*V)6dwhA+&Pzs({=gWnF&TM#4QhivZ8+kqy-qd`guf?+%16`>rO=6K|k?^oc ze$!d&k}#%#5=S=jt90X>gQIq6d)God@+s$F2j;1wj;>6(G>#(9UX~K0dUJL9)RH&; zj(03>P$qM9GqW+%94Cv6bS6>ui3S7E#jZ@|GAhcc$VSii74{7oc4tfufu>ooQWtHE z@92S?f75RI-0qaxd8JIA+LG6a?bl-aW#Ri}Q}_F2Sd1FWt5J?cQI74qeJn-=6?)V30iYGiFfTn39CDNrz2^Yj3}$d!g-Cr>z5O#bvHq^z zV?rSEWjKLw_rE>j;E-T6U0#wWFY7is7mX!VqOs+7JBq)agt?wT#M?sZSsU1D=_YZK zqC2@-K7q)L!@6_L47PGCe$&alJB#u5l~;FBs4Y`N+^q>5N*s$D!0vCWR5M3QAUV(KtrNthBz9rO&WFY))27At7!ZbJ+EQD}~E$Ri)OAd4Y7y!qr zvO`{Y#SJUMuiNtNB)<7c8()TgBviKXu=jL-4$grX=}Nvt1zg@xU24x;W=2x#Wl$Gk zCGKDJ2ib6A1KHz&J1ud(7l|WA->xsi50#;M(zQ)H#f%6jE*57EL7U?7T^IJg6If0r z2gX&ecya#xNfRngE&r=$=GDgDw2wxA^~(KYp7_(>#!S2VzklBJX1nAcXPQY+8Bi#R1xx#ahox1Ma}`8Xzk3F$o{l<|s znvpe2G?w5DOD_D;SpEr!s_lTN+Ph}M?zYROTfRK7cg^@}v{lIn9L_nM+AOfyH0NcNjlPf zQuy>B-_9p4lEw(;2axqqmWfEezt$Df*!67zpfsRp8vpgoN$r+<2PRwja>z|y=LuDU zo@FGSlS}kwuiVO1;Q=%}jWj5UrI-nh0-?L*f{PMrOFi-bp=TqA7( z;jPQXvL1RqCoK{Kwa3#D?ea$#Jz&s@J$<-xVeS~;x9}F7;gKOO7!YCIVgP7-ol%%8 zLYzi5*jWHZi${M}Y+vQqnQV(vgMQHbpj#)7yCHKhK=y$r;D_~_P}|CKcXZ>H-6HA< zzzI{5S{!j4hK>koK6-t!crOk~Hk-rI+n~-D&6=B_is^q_h zH@Wjtfl0oyF+g5K2ZdqDr_o~t!fRK+YU~3EkKo!OBv=dDBfJUhyk43#ijylZDP=28 zqiyAahejpUyhW>8LvZWvTt=HX35UF>zz-jvU$HfdOh6ksO&obk7~$Ut?EfrPz*A8v zRNSEuR2Qf1M*j)9D0ra&Z)m~DHV9;YIt+k7&9)ksD$R$43&a*c-DvhaR8SvKjV$Fc z#cEr|B#M}>Csj{6aJ4@6!A#D1?7~+b;9$MM2RMFUD12~ zb;mpA{F32OIb&yQRiL5zE-H)vK8y3dcfc=DNz_3l(GTj3$;UR8^!rco!O;&@&%_F7kpyU=V1Y6yf;)0@fpD;PZTm4fHaYeyf5%FC-)7u1MJF7Y7DmY)H z#~>2xZy`ia2RwSR>+@uIYgf8`LU0f4BN|FrOG{LvMv&1i$Bj`Y++xgt{?ml-N3VreaO)OzTRA5evso zx+*wOQOa1YJ{s}ckF!G~J~1Wkzw+zC!nUkg|fF zPJ{cMynJTk@0(STaCz8u_tO`%mh z)8rhw*TQAXVkQ0|RL2L>_9jca+OXV5flFeE-TEx1Ad2kJTl{?#%r$zG653Mo&{&cJ zCp^M{lv>W@>j`TaYUnC8$o)21aMBu1X*oD~;bWjZ=`1pcf`TIvG__AbsHf#_H(E**@+eWlJ1WVDTgVytBkH`#1pAhbZqnj=DHP zb~tFgAul-lIO;1l1qJ!3Eviwi`17{FSV@+=h0y1xMhG21v8naWFyUp~FdbXa@(slz zKc(Q20_+rQBD!3V%{#?Q=Sc~H`5E)u=6{<1$2-Bxp(N2)fN2mi>)-oaDEw49S8dL~qUeFy~3$b;N+z3q0MEdkXW zL7RmDXm_(^(7hXbO>1uxpxd-j!72rf$tU3=@KG}4$$#r@I4E^~VG+)t_8STzt7vSv z=e0;jk#dbcG>NQ+TIZvM)sz0(E8P4yL8xSu5w%rERcBxgwm9(m1CnVRqD3l7gqF@q zcx2h(!KZUy>;NO1TPO}K1?*1--SP>I^M8PhnZ|H|kqp*@V^M?NInJ%U-9uK$fl5JX z_BqoKM(+O1W4tPt8Q5^>q~glhHatvjJ8tkvdFtN%_{1CF_X#(E&TEr}r8lMLrMN0P zsnw&XJ*)qVm~&H$?i4oSVU<%NGEuFBYD(1v*Z9erh&Jr}c?$0L`?51pO_P>eCKuqP z22GhpfrTL0jIBU-v2rZvm;vgi!bblw5dkRITo5kXo|nRyqbUuSHlEB*H|)$(#@i)*b(%S>976og9 zMqFJ~CKHARQ$25BECXwjEXgZwAalv0sjbYOLOTOvX%iD3x>gS_sus+0L}Nw7b1;Bp zGYy}Z=a}Qnq;8aMhi-{(k@-XOdh-vw6yiN|gxSNqSC`RXZK%+NH##;rHYPR%HUu^n zHHfdUQqYOaiOiRoQ<;+y)>37PXdm*DoN>_c1~Tgah&MTJg_q_-cKbvZoZzq?<&xZ@u_pO5)><+QgpTV20D^y4>#EUHPOxE3AN z1UyzvPqQY>_5+&p54iBDQ>y!Gin$+k=4~QK(A3U`_RjM5!Eq^m$St`ynoj5>ifc2H z!N|^?5To?aje}8epV&l7jmNcfgP>=&h9;NM-Vis?PCZ4|xSI)^aZ`3R-7%|nKm%FJ zQMDZ5-k_;s(0qB~Ot94Em+* zWyipsglud!{iGPA1rb!f0yx#vX(k5c6cVcmEFCX zpP~11skc?54l<)9a2JhE?{7~^jDl>?^#e#|*y423+lU~xk{=GtV|_Z}s>l>814fy7 zVv6XBWnhK(dtj*i*;d4~-NNJ+TjdSbsFaHoC}VkNZu#10X$E(ih_%KKx!$Nx2@#OL ztMXU^GjUL5p5iTHA!dUN7I4kPx+47qZxO2fCp@j7DHYtB;EKhiDWlVrytK?WM~6`x zoI%|Q*a=n>0GBVV*oo?;MJ)xYuJSc;U938QmHx?piD^ov!j2-p~ZtxIZsL?%HRa>k*YBsyYv&QJ*gxWKSL2`nM;z55N9=9#FxU%3}TCA0yct zZKH&$-zyhdnF8G$Izv49S-r$oV-% zgCB4JTJL&15P!mnuF0@#x^o8I{twL=e@GiZu&B$iK(F38=)rKH2VxIHQ)Y&&o&%RY z>)MbQ7)x|;E#|#^hHDu7(vh&qC_2SWm^mK^TD5x02*bS%dg!g5XjO5S zkt_=8D-Vz3ft2*hfEo3Oexx&{cm=Q|E9oNxMa>y3u5LyK!Hl%h*J#iUP0K;*mqRi! zcjzMn*Vi>cMA<9dTtUmtK_581!v=0QB8cv&HxxCEw%Drr3{aZ;B zzxG}3`=j@lUw^&o*qDW5KJ$DjX6uOE+b26MT;%le{*Py)%pL!mv^w*A89d8;b`7C^ zA?j4pr5EKE@obTL#$~^Gq}OraU=SUm#@;|ST7s5=;jPT4D!hnnGzGbU;q?ePg=$%& zwt$9H)&P8X3dDmw9R=ed$~6R9Oz||B37}*vO3{=?npb-PYB9B8 zGALP0l{Z@IR8^>~0f}lrIK|Ak^MbaRZdD2~Hjomh5X(95feZ%q8QWjY+}VuoY>wg_ zJ+UIND`#?C{TP4qR$0SVnL1d=X-C7>8*xywQ_QzgCjy)iMweTh@B-1i9d-n9Y1<{TWI2?1ay`u;Qb>p3}ZlX8jv{K!`1au%Lf(df#9 z(Mx3!%MhbK;Nvo2(QdTl**27F4pFdl8R7%ACUipIFp6HFj{ZP6ui!l8&FlbAz8Uq{ zC;r&E#WG?ur)u8Y-;27UIK`3Z zQEW{n2*OT*J00dd<(4fEgiOr)l0UFWFb8_JU{{897H3O3W~wb{{q;wo&mP+i59~qu zUxsGwd)SV9?(=|H8ytfK@e3-%7$C15EgN*-k6t%@xT-H>b4v_rM5f#QG!^o{+57Q* z!Bct(jf8;%gQbSUQ6$T-l|~riGg@Y&6vU8bL@YD@1x|$)eT)rs66k?#8DFah76nO#58AkKX8NITh7k*N+kYIw{K0L*F%6S%Tsw^}OJM$ZpgzGcGYWjdd^Psw1 z9fTS~fXG(~1~w@B8e+WzwFqgmvesq-Id+QK+ob))vOVs;-mdZ2e$DEt4NB91+j)j; zxK%c|ig_;*aS@BS?2KGD5OM{H!kKrF4I4dv65QWK#&Zly>uO-M+y$EV)x=L<*4sHV z>*0_g>*VPguqCkl5h~Nu(dwl$Obco;su1Fjz)0xWHrPkH^~yHr_whe9v%N@e0G9#> zfAI9yr*JEHMZ|A$hV6ElJNQS2^|ITvdT>QVl&psJ`H4#(eh&uT5IK`p0|`xbI9SNpXhHQ_V@+4$#Bc>$UyKRP%k(kb+1_T{&5W~j%$OGpEUC4Q(S5U$yR%su*i}1*Y#Ad3TdDf3 z9&?U3Gp@53*8_Jp9}Vm}GuaXYtmQtS(p#tj#{wl3y3SCn;s&hyivpRQ{LjsIpibF- zba-7i)GMuD&ClV#;a(j8kzNewdFu%#Afzq$=kB+@tw{3Q(47Xr`YFLAori)lt3MGu$mOkD1U^`S{Wg2Sdl45 zlyTYA&4K%i$V+y$PwueK!zltYWoyC^7uz)^qg{) z=Sey9Yj8dW*#x<0#_o+p<1FYa^#rwi94G&$Cv;qd3n&RN9);Qfx(4r|)}Q9-vyD-C zwy=*=e0n?1f4d1aIt#7BC=y#EA27MTJH5AV9h2bMh2#>2o*~c+ZDD8b^KPGC-}mc! zgyG*ka!-!fTBfj}^-oknBBCaD)EKRN zC}vWsLj;uCJM0dOiucz$`*?UDMWSnWsU~klJWL9p+r1(z_7-%CMm1>fw+-a=fB*FX z2avaj$@Ppez^^$mz#>!-m$Dh%Af+Rg41S%gHGD?1?=Cuq@!RgD9cVj9xSB5)f(~tBjN8&tQ)=}!7bp6um68+=o4c=u!J-N z9%QaCM;Q4RU<4VFa|qYLDLBZvaqiKc)zn13rTOkw@GZh)lc_&m%yMU8pj%6 zm!oTEu8{dr+f-WjB5}4dGPdcrqR>n>GZX1NEvvi1XRR_9wOO}J5peMk(1N%j?=UxeMV>*%THx898h?yTT`MnRjE~Kw`38Qu$)t8$$dQ#mD!YxiXSjYXbx=T2r3*!iJ=jP%@!9QmfOq-qg4Lrf>Z~UFoi_JRv`!@Cf#yLa4HfE2P1y;BD40D<+~FryMu(*zF1$2;PDon+{z;UdnDK4Stb#3L z-AszfZZTI&gClU$NSU;dG2d%e`MwoOeg%IT%BY*`HOpmI`S8)v8;5QfnqE7%_HKa- zEPOb@+lU+P-lp2m02WPZ5YKt{QpYn7-#d_!@(*T3sD)u0^gHzIE=R#k)gxwdy=F5Luu{dIgy@^N}sK>wO(H-d{*Z{D^qhgkp!iB zE4smd@z- z)~cX6ZGatWn@D$g-b-e>GV@1vcOwG67|5<8#`;MMIUHh1H_R6XjE zBjr(}sL$UHjdhE;F@@5mLV=LS$)iTnCJ+*avdQx0jJ3Bwb|^x+(#8wVIC|(QSDE!R zV51!t?{{2!QXgXX=|yQdoWtriF?HFH;}SJ!kG%Gr*O!zUKw17&79f({x8>nba62ak_-UjTB~J z(I(&u7(_FN-;oRyaNdrR-|wM8@1K|5OeZkvd@QskEq;Njnl*a%urdYGA7(hDsm)&uMdMG|#w*KlzWR)jx{xZarWihM zRNh*Zlo4rezhz?0p62U~uT#Xv7M7Hia8sq(Ro4Adah3IeR8(b6<;PbgPq$8A#k|=z zv^3yK+oo#)x7vyh@V8ba?k7!oRO867t_@Icxo);#=NSGsRx+B-IO}gES~&p)ZC(e- zx3WZEbnh)ye%1YUmgw{D<)wmyRY5bXPFbRe?itqvTdD#N@_(obOy!@gD%#IKStWnN zdSDf^q)l~A@LQGqO>0b+Xl3{CRiaP3qe=zBDzAh5BUN4pNM2UZo7OL~Sf6$uO9_p| zIQ$wCs^vur90FH`^=E>#x4gSrboD8*LTWl;3u@tb)W#t_2jf z6|3DE%T9QM0+*0c`+A$GrUEQoc?RRhon3W|e)HMh?Y6Y?a@DCx!O>nzq zx_lO&dn{48c8>mAc=q=keRV~)*sw{RUdB5*1LMunZ>-2>8#cL$$|M&LqzKDG_RUSK zoH-);BU!cX!;(AyW_=l36l*R>4&lk+K;SAtaBAGC#^jHw|1}1!kd^5SKeA6tDs)SJ zb2;Vq!H~cUuS#0diHoZ{PoCu?veRPBc|H^d?3Sx zr~U54rDmN4vu1Ju`}*O9iO;)#Vs!iX{jc6TyfESUai0u!=Jx9Mo2?Pt>R`y&q!O%% z{>n!5rhgy}wEp<`?*Al2NcE>!aP`WZ4Sm|1%a1Hb8hwhp^WT4Ij)xoQ2}@2bHugRt z>QpD2eu5*Vl;41Qf9yH_|UO$JDz#_y|>o?z9`{&^0R_Z?!1~h=ewz?O~-0tQQ@?=KSDKB zdoIJs=XUY+6uESo65E6sD1is2Sa$gE`~?YHMvNNw;;Uyh@CcHdiE<_Ax^+$twu~O- z{^FcB4ovR({f+m(I$r+Z0|P0r=32e|x@(OhDKIcHV=15LubRut4;Q;EG2-C`duP8sm<)fPGn)^r2q3%?%?P2Rxe2$7Xm_PLb~6000Tw(s zH3z*8>$M<}7T$ogniMj%%+XnowDPD9_Pqg3OLrZf&ut7M3PQ!q?bMbaUMbDZ*!_zl z#H3H`@a2LcFL4bxVr#?EOPa0>mN2}}8&JZQ9WS>A5I+|=>%ongRydK;DHmUUwd*#U zC_exYODpMZ6CKUvU+jDq&IW@xy6*8n`#TAO_EVf1{(g`lzD;u@h8>&F0%zDV&1*oO z7RJ#nQ9p4@1}{4-Lf=XdXgBanzI2Raj_K;w$gigCEb2t#TGp;5N_p!8K*N@m>bKKj z9PMm3Z*h0QsiLyg(Gkq`9kaqZx(YNq)7cfVg=eA^=ZDTZZzY1x$LQW}Ox=fNNCIQ= zgbX&7?gQrtv4WuTVsr~+h7TL>{9t?qJIqVbNw13Dr?%_VKe!bRFN(Y{JuUKCuY1|4 zX^|tnsxJ)Bj=b=vtXs{6>vodpVmpa;s=~i~%@F74{r?GcEMI374%_CI8R%3##@@j` zdh-zXiE};Y20FRiD{z2?Jt=y;y@b*RmX!f!R4hn+cK6(PdJ@WO&6amF0c^o9w)RjT z?0>s%afs_5Q-xV-eagh=V14OGri-~HY^&O0PWO**Gbfu5OZCPj3yK$&MgS7dEF0Af2@N%re+ z+1t^Pavkib*6c8%rjTHADk-1wlQs;YBe_q^Ph!TXlHi<9U8S!&apUbncwN6`sZkJn z$&Ar8a-v7uMevM{N~n3crhz3}-tmO;V(?SS#QZ>+6=$y55A@wAT`XX47ZFDV3gEbL zorWV{(kE=XSV;3G$N*X%MPFS;V^X7!ka-O(R>N@1n`mL?4MS?Wm_h!Xu0bA6fW^uJ z!)O_s_I9~uXK!Aih_8jJ4jS1`1=Gc8;V!i+lZoG}%pxFL1*R-`>0uc?2qlLWyVQnb zpsmV^pgaS8wFz|U3=I-=x+j`hl5gm%4IG|qstcFuUjw1%!9JQM(DK<1rk{gJ>QW(* z_c?u)DRHS4;{4{H3JG*=TupJdhw%voPOiPZ1b@!K)aYn$C-{%Y6;c5MWX1UVeO9&s!7U3JS!^^BsDtbmw~TV_ew$fB~8X$#`LMc@_J zAlVV#B6DR)V@nm&8pP`eMjD}n5?e@)w(A)zcTsGTuJY=Nec7+z%alL!(sg(CabB6X zW%;hUe|#}(*!ZRMwp4KU)n0fdCvwEJw2dP({*-MQGtF&czU#Dk@px^O1F(+0ln5J2Y1>W^ur|3|Ji2Pb@s$tbC9Po$XK z767LBYcej1#<5;jPNgKK#r4CqhWZJYxR)>&Y?AB)Nf6<#O|Q?pXoSZb%7Tco+Mr90 zmzb_#KJOi3we~YDehGOFEaAORoHdE+SJscM55Ke+d^Pj|A(q=z#pbs9CsM$A60Gox zJ`s~@8dV>4i9Jr_EnCLhZECMix`eybU;~}>6n@bPeVDcsQc|~?+5LH4N{zg)+m!DN ze}u}{+;Cwf)0`mkC8;7H{f3%Ai>eD346iuEbhR_JV%SrhM#5);{ezu2c==o>y9ho$ zVW}F3(0T*%ro&(_4eq@Uu7$|Dq4=yWfTYNgtciW-?t?KecumZ&Q44CLDPuxO6I$g$ z$1()=&3K2LmhZB8mg@7GvIAh%0vc2{8)v3?=KJ`Ye7u=mNa;^<8tKf7X9$`cN0Xv7 zgJ_f;9csJno&Ltlfr74bV9uhxbNahw(Ll>*5f-W=FknqHxSd4}T&(mZAZ%qm)m9yb zGz2@7NU>`vGLNRkyHHnOB#dfL23?1Nw=|AgO&6pLo-s;h zECX58DYb%@#Xyua8@h zvbjO2Di$-m*}8nTN073$L8dBZGraN6d>sDS*x+BZ*C?D9zt<`k{7@9+;evTnRhLZp zB@u#p*x0OY3$ESk9CtJEqH_{s9P^)o5F${^x`?Jd!p}a!_T_w5WIwH~{Mt^JPt{?T z60xkiD{k`;-}&(yY!_%onft(H!;qnN&)7ff@PgCnC}#H*F;5@pOk&Xng5wGAyZ`HJ zE}sr&!TQn)MxN?=N;R(;OvyY5%C^u)>lypDf7lZ@1BKw&0>FxGBsgz6*eX28Rl3)T z@TIO3^L=5=IgHZ`PGs(X;;ONE&QJ1jus^dUO=6FLF3?q?MzbakYCrW>>R#t_pR=zP z6!Ni{X3$gu{blLxwP)>lwZ1H)b0US_rn}Ri#wF*OcH+z~uzj%}t8$@>JMJ|kBd=*@ zh90aavp}`0X9Uth@-)V6+>}A74unHdNDGDDm*#bpF>_nKPNYQZZlcx+Pr}7dENC*( z_6DJIx+Pg`K4SK!Z7kb*D-?9DM69dD7qd58$9OV1DkS;zM_rHO{d>tUl?dtGWBna1tG?iRHD zu7*Y@vGEQuRe88c1!ote>hWC$15-&8K0$x{(k*Oe_>1FiZ#lB5d2Y$IZ?kXj&;0e& zl)cN!zkjoS!~1U~>^?j0hY#L6i!J}(nB6Y_7_)Hqy3gI;n((jfp5M=X^+?&I>$POf zn49~tPHQIn)K1D-j$GSR;J<(6wQ!jtW^VjYdpDQb_#uuCvpn_$69K6#O|XMV82 z8YnUD0a-S6`sv^FgrAVjGzMd9ib0ig6Z)pZfa}p;>ahwgrQVT3Fgpa)|0mg|DO9&J z22Zt7;cDD4YTzB$zY5CZ4Vs3l-BZfxG$g!b>zKJIdcwgj1@oq*Uj)Sg%4 z?vNAPB^;h3ox+O7-Kf$eaf-(02IgLl#uB$lR2)o?*@pI!dZ3b3bK~HKP zZO?;89~IYFL6pc3lx~4H(UCgl#dD~#m5lYpV65m3`sif3)K)T$;}AhHh=oGsDNJ^Z z?GIXlA2wO8-8I?Ph{k#GLDq{tl=Wp06!#UCO4mBNCUFQJQ|hcVg4rmb=rVOeW9Lzvpq$S)fS--}Y?|yskP9-TEgvwt z+M(2KFR-F3!Unt{(6{9-$V&Qvs%-KK>>i}mjL|VdZSNFPOYpc$i zWbuSzN75dQ)K|imQ@x^R(Zz4Mj&@)UyU$`V6-u2KCM#ZbFqr6kP3Hz{J*>&h5J zV+KnH>K*%SrF&-lQ?CAr#vney3Dto;Rx`b}&SxENF;K&5O1lRvwh2DSLOr&OM>ptS z47B~LXj}J;uch250bIMjBo?nHAoc;dYieW1& zJLS7xSw3R@4fX(!S3JsmxCV88N zFa#shmtVF{lYLiR2UnhXXCPn`VZDI$fCQ zIvO2S3@YWZZF?!prl;Q4=yq|4DdIbImU%haOFEvn_oI~7f7WX6=rY9WP7INTK&Jx` zPkD#ELYeauy0JtWZ%^)dc{ylZZ`Dt}+_n=Wdf_cDP{=lv==*F68_E0IHAuZ|z- zQ+r`lPUO&Of1eG`iA)%RavAoLhL@9T_Qc;AB5d39pJ1o*l|e+3F+jkT&hIgnLfa{H zMenhm+FSq+`8stjmrI(5L6*NspOa(U5W6tqpihkeSbgDM0)57^&Med*L)H}oT-i8? zo^<1{4eJGt*%tO)GuY;~J4V2-357cpe_rZ0eEN0YrmrV2m6H<~F|A2Z(soZnu11P<_ zQTkw22Q%O0$TG26ykanlV}4S9y8fHIBDZzAqg@4yDQs;Ds-Dohzt*$QHaPz_2ch~D zto!F|93gKqr_%c!7%Fa|clajli#vIo_w{N(M z#_aSL5i1}aRTX_>2dW7O@e^oBfOPa9(?`c9bEYt28{s6Ut)sEo=EY;y%gO$5>d6!8 zZ+Y<>y`I)e-{s<9s)M3GQ1q-r3^^6Kq^VFulsK1xBmWPv(eQRW=xjjvVJD9VyGM8i2ftHU$Dlq;eT%owp@5c}jt8U)>`o z(m5o@aa#3I*NzP%jrj@O+6(><6zAEjr!jJ<-@fb}+g2Pks6Q3*Dmm0+8{%Dt@3*C5RDz6gOWi0hdDkB%AUbFQR?36*E(4qf)d z0Xoz4;WF_zMbpq5&L|0YL^0l7K?vLBDIIt`^Vcl1^w$SSJsTrG2;yIA#{eE1O>z70 zFO-%jgz(Qk=@c>l`*_zQIXN;2ZA$_g3{GXvj03=9g8d_(B9LD@e7Y>qTxB{pU9jRr z#AcuE5nsIgE@$(LJ3QCi*b#!XiDzy(b!_>CcfZ-+vTAkclGKs|Ew5L6xq9o?tzFK; zjz+xn?mrw#sqrt*ik$z}jmYOOXbwaR6jgX!h@$Zno+LkS@D)dmPBh}ySp#4C--3uP z6ZEGrEsbmU4y8zlwd${V*gK4*~2Wl+`nrZ2S zYm|JbjoQ9;>f9~oHJpGR>g$T>_6UX?eTR{UUta(?d4PVG@pV2_@y`GuFIj0eBR^x$ zBUqr#buGCm^@;+*&?Hiry4D<<4B#0RNdkbwa#vW0F# zIj1w6BCW4D%sOAUad=MC8-k()YiCfzoUonfG9+#jRXj4;3sW^LEZWQP3lrQJn(Y=8 zv2N`hZ9~S+6kos2ilV*2b7CvC4Qi%Q&eSguTbsO`NwlSnMC_hPlUUkNOBd zZ@p-})HF})e2F=(AYp7|okPehJJ+T8f1hn|a$Pzxe}@{4 zwzHSin$=|--UT`5t7A6g|41CIJ6NF^V~aMm!4_|-H`>(Qf(=8`xi>M9AB5^`$fA&2 z3z+{@zN-AE?0sH>>0Rvy_38DiFXmn3UerU_zvIR1t?aSbMA>3qvgx=fKs&TP@gnni z=D!8+6C<_Wmx8t;Q>jy?{ifu4bgSrjhO5X0gc3p8McR?|u9uP+XEzK9T~}(5^Se6d zt!rn8%%(4P(l5yY=AV<9+Vn&U<6Rm|!*Onde*6PAhvt9S`YgtW z_1+7EYz!?Q=G2*mb^RLdW6P!46;RZ;_&%R znlQ3>0dP(?(C1q>S5af)0DWj8g;-D8yh~_`_@D_`(}9S<4k!q;U+P(OkrC%;irJ=Y zc?}e#oXj-(%y_RjVm%D788kZC)-LzK zs2hiYF@!#ThWLT+Fk=+9z8M(h7W(i5wUL%RMqoM&0y6_RmF*cMm;YeMHj?=<$Mu`< z!cx`{*DrtUduGftzs}>mGIq+0q$5t)#$CfFZS>o^>$$zB7yUeAOx%WTS2lZYEo+;b z_3N2m|5G}hwd&m^{--azHuLnZ?@#Y}QMm1YpCR6#aK%+}b?mXD)*_^RuT(sY+m6YY z#$onpn}(=8^JhCnj(*~-4}|uF&5t)$bD>ke?m7Dq^bNc0(Cx`-9feq9W8`gVSoI+! zhm2m^)UYUHukX?nUuowL6~&=Th3n_UUT)F-+uKhat=q9w$Z0%_ol_i z0kZBvwBlfxgf7glquz|8Q59;Gw(c2bCopG(5!EXxbTvq&3ojQjH$D$X1zJLpU32Sc zTCJZdMeP*KvTA;$)Q#@fvlm2hPmbbIOS)AKG9b~f_ zadH$*4jIv=-9D5)b(#lYiAhsN|CYwRQN+bFrU7^(Chp^+Y za8}$kC~~tvB~ATP{<4E9e=$%QiU@3th6<(&9+NyjUM@AJ!bZD3)ykrarTs_P30mAy zs-}nlrY2HMml(+O%y*X7eJ2WN0%fV)^zi`Pq>NU7=So?F+K`zvO>7SKe%1*cvBv3u z14Y_5G|g*p>L!Cg{ZPne{Cy~0{W3Sc!_=h@uzm;0MD0V3w0W8B#p4>om2q_l=mPEZ z1#BaV6J;G83Te}Rz-1uqYmC*B0Z4-KB`&r66qnjf#%Jsa(=dlw63y=p)$6CrKy)}Y zG^3`jXAAj}#j_Zkpb z(Gs!g_m(M?{uzfHf#H-t&%{tozFhNy+=DHtF}xw^IEVz?|X!nCn!DcQDHU8Al zh{tbb-5M+FVxih2)}0V&0Cgc6Nx@ihcQ9RfHdQSaQ2PPPuZhCGrggV%nrHr47Nu3V z>p|x!BUnl=4hzaSy#=26vmXRT)WBKz@s0oVcPw?OEeNVHcthTgD}gE>oxs5Ee>s@8 z1taDvC>(WnHL^ZN{$TM<+X#DJ5y>VlP6x>~XW>lwxLxq4Z^OCqHSt4W&<8#fD(EVk z3OHyx^I-QnaQN4Zb#_JaYdm$dV{laA|Nissws*2zX3SW=;@iCoKi}&zCTYo=W3z7k zH)Yr9T{Z7q|L^eO)2A0R4s3mA>;H}?BpkT?&9POhR;3<9Ycg*!-qXhVM6HrT_kJ*2 zZx*PlrD=R6r{lb{evY%#Yo7V>Lx$Qv`=`u4Bd@H^3XGw*!Mgc<{QmG011uqQ?b+@E zN^g}bu;F%p{hR^5ysyV$%=NGa4b`>u)Z3hug3=PWgMh}A?P^h+@S!t>}%la z@Pf;ybK~voo}n$%<l&A_i&Xi097xc-Tu-dYuot&_>yqKT8!q!XlYdK-D68$f#!qt9S%U*Mbh^Qki zfNW#}uya&nmOQ3HtB{!8>_cKo%qiVFMj{csM6LG@~kXRLT+ss=^Oc(@=e&@A6 zav9UYIP0}rRF@Kk#?yrs#Ka>-k^pOakVouVy%v$LhzQtRetlx}+V+tVpNvipOoV@2 zoERPL)i>;tx?#7%=15F)~j$*0d&S)H16H6$f2$K108WcKZH3c<7!yz@U z0F%3c%BB9HwAOQ8^?*}~Qq8H93hINpHQ@SUD_G<7aI#acaU6JZj@9qOYs8>v8fi^l zuyw%|*{5!>Z|l;ia9BJ51g(`;1GpGUBeywnBC|Qtu1*R=WO@pD zuvdEWgTV#O*W9aP;?P1$?uBBm@G-yTcRH$+d(B;fLlGJmRbAliQC-k6(b{r} zX{nGy?b&r&JMjNIgw3 z`UX|uazE`^ReDBVluBDBPS4v^vqa6h?XzC~Wv&wq+Q&(_tu){e3yP+w5V;?Hg~Txs+ZP3T$o4JkHpCWpLPXE;!qUc(7-DW zTAJxU)*)FM&9A94REBreW|W=HSIOrVjAfsDpAXb7_YOs<6pK9xD!N)(0U3fjiJ zc5-x6-I_#^DQ>N9Yvtsih}qMuOS0R*l|xU|?5emVO^EP|J!t+{M` z0SlK@nm$t%Z5O>JxEhnHjk@gpBKnQwE5ciaOaS=rF~i|!T#6}(Nze)}bH}5FF)Y;w zm+_ea`OpKxaRTETUXJ#?%YhRZD{tuEl~3^(cS(NNw;q%$K?;;Bje3K^_%1euFYc25 z{`d@hwD%qT$$TPT?JqV+Zt5*UXb1$n?@)?$zJ!ufukghN=}qG&*y=}T_#gMYq4!n& z&R|hmHiGZ9;#Rcr1c$OB;0Kw)5~ksv!q4@YQ8sgr;yYwM7G;c7*&KURy+h~|_k2>4V*aZHgGuk-mb^Y7&3I6OZN#B_yp{u`lTv(T+Irh5# zh>J%OK+J(N*sP6@N)l&!HR)K8ef=Q_#-?N&UC1(K8? z8+jL7!Dkz!mBtSrlaYq84U$Uzhw>Hve`GS^0xI=C3xf>2U)0O}MXl!d<$V<04Po9P zQxA1x;n=rwoUoGN+rJwsZ+$5vWZCkNS)tpPZ(TO}yl2R)%(WlB6teruuKx@_ zKWWwv*mCx$pUpFqqTpyFsN@UIEBkClfcifX^rq3~5kRv!F%m^+VB{9^e zm3zZ@9DffxDhuQ%TRaT@eHJvw`nSg3&>vU7CqF6-^iPiSF!=SOz&w3U4)|Q8`%Xck zR;?U7p3vPp)Q1157s>Yuz5IjXgk63uvA^s4SHLtIjVPWA5acXagzc4i@q;YFF8>zp z@5cY(eHX|z{iP(26B_(9u{ZT6)gQ~VgldNA`)s~^9RS*|fJJEV*KltdPvReAS+a1x z{O=0>csSf2z6}N2u&GCdck>Uvxvv6*x-daW)WSoe^`Hin{mtwDI^zE%D*iH*`w%97 z+@TvPN3>B){YnK16eT#)FM(nS^ZQ$o(i&T-|3&?Q{Dd&rUmO=^kUUtxoa-pIo+@#K z9Eo}7fl!0Am0M~21^)m$Aq(bn|7^t` zdT-waa!oHGgG3Xn&}XVc<#|GmKOU!iM1l9=O$_3?JVvt);Cvm$Q5ZAvP%KZz;o}yi zL8{^QSx}>o>o0+xPvAA1%WbktifVmDYinSf#WjH2Y%Mn)#us3TGG{)+641r(v!E`P zZ+rN#dVxGq=QiVHCC zTFp1~KdYC^`%}O;y2&b+>MKQ2HNfft2$3bgz;CtQF#e1$zxU!k3*y2aPYG)=FO_rR zWEJ{!A>PHyQ2YAdEyAKDdUmE2={(Tp`1+?g6~=TK-o?+refe06btx9)xtWPreCWwk9d3<-?-NIK-#z2dsW@KSJ{4C-`E{{opaN9 zSK1p3CEEA0_a?8`t;yc&<2T>2#7owtL3fJ2CEielzsM|ss<-+@rrfmfvd?(*nrYu< z@pOSyJ7EX*`R13Nf9LZJw#)g6+p?L~pY&30h13fLpKbW(^Iv`5*X8`-Z4+QPgauBo z@hnnn&GV6{hOsDjUVMjC8wdeM1)5Rz(Ka9E8hF|uL>rac-0A(MEfA54{N)&b8X39DMDU^Wrah7KuI6C*? z0~4OMByPC9#MmyfEQdQv!W_^({!hN~Pr^=*zSn=_5VWgRL8;b(qgG6KogQDV@|8}V zmGS`KuONexafHjHsWuyiFbEZ9IIJM$$=%pOnpoO%F17~uLdjgvc%Aa5i2>~GUKAk; z4O5*94A&`mw9H_+*#G%GZ}8i*sVlftl?&RT^0g5PFFI1GIF>pk23L~N4g@ii_(^)e zWrrMHYF#nIg-vRp{nd(nOcMh*Ps|qw7#HDr9l)k&(KTpB!KlGLNCyTjiriMH&(SnC z7rWG6!igXCxgang|T&;O<{Z-9`)&dPo9{c0_0+nf~q18 zHAQ+F4W5ab$OPXp;rjLj0|Oqk2?5LZ$<~uNoNb1Bw1c~IXMbm^C%LcO?2Hg2S&=m$ zE4iCK;AdWPOk*CCC{QB-ow)$#wNkEs(gK=cY-a@=Tv&~>gDKb1c3>DsepXs_D#SABdnD7xGa-f?-UEDG54k zVQ|TIum}U@j&WanG;hn_T-flWDm$gY#a>chf!CnBH@kK?E6~(ueVksa=Bkp(?itQu zFbYx5ym&i@7a|_W46)k+qntp`l&86P%!Q{frOK%a4aKr{k$CL{d!gy=r+e4ad_o;m zwK~LcmEsU1$j#_L95I*IpqGo&lU_jJO)}y3LB%>Zri3|TZ}j@*^Irb^r^X-Be=q)> z@|aQjibKM`@`fkPKasleg~_Mw*Vr%k=HL50H(#T+EnKv0-jB<}UU2&69fxt(K7D8F z?s@-t@1yt1v*dHQX!q=}Q{M92sy2Dnt<{KGDhzrONdob4l$_Aw0Xn3ql4L(Q@I-fM z)}v7|j&*x2RA-sVb0S@y>%Kbm3b( z^Ht7*u7b%RJhVYXAH2cCnk9-W+zqn4=|pVtjRL9yX}SUyPt$Rr3o#vf7hH-OSq#F2 zq*;@_rB(tTH^@OSdS;pOaEbM2uK+wR!p+Q7XX@#LZo1hMc&UOk?gm3S?GUdM^7WtQ zkb$frAAGj?c?VM=VihGO!xJLP=mR-HH{o@Nbv6@e0F4~_@JG=T?EUa!qfC7ToDZfI zPZtzGPDKO_U|cYbkgd%_5bf^OD6au2qz_H!na}q@bjzVki#YOv4Gm8b{}T_UhQT^47)*Urfq=!Mc_1#a4_AP>eQ(Xw6_y9K!;O=oH{mA z^Oh+Ho0Eu;J2Fx##%kow%`9-fVqbQSuDRu^w=m2@e_5QCDJk8TEy|Rrx^yd)F^ZO} zc&@IaVjnXneux4zcgvCO$mh^qm4Dedf%z%1OFQ{8I-N?_4p%W>0M|{!RbD&5Hx90u zn?@>NFjsMmTAxg?BDH38^y_IGo(=ab9DgP9nLe}YH$DsX9B#H}zQ2#y|JUV1l25J- zm=_;v-N}j}{ncVGr_*EMA>i<|@dxor5q%@}lQdqQt?r|37)Oj-5 zU$t#AV9WFb%^*xDp4dE{h!xv_=y&RA24O;RHG>(aq9y}Z>jXj5uRrpb{UnxUm_(ChCGi`xLcb2aDDOe-tQP@s@$BtX?D`VF3_Kqqrp z#r}pYZ$X1&GQr5@J{fy-gD+}Ak7veyT%`T10}uMQ;#H@sTTeTEul#qXCvW(S;^G@` zc)15=Ey_4};Kr7BQ=7+m9o_$2X~CS=u3Qbf_O0iLllfWAbGJIZ>h$X7=7g;;zBK9C zli}^*-BeqZJL#Qi{h|P0r9HWtWXgxxyTO?4Pjd-&sXdTP{vU5w0uSZ({%u`LiIR}5 zl7ynD?4}S!s3etTDk6!o?_(^XvK2yEBPna8>}Es=G1g=q*~U79!I&{K@Biig?)}}R zd+Xj`^XGidJn!?K_pI+(-se2$`F>Q(qCj1n*6hYIvnYaw*#CdL{Nw%z_+qoD>KLLv z1`A>d|Jzdho5DMVfXC6WXul>&0H!(ye27>xWXsCt2%44uy;l#KMu4tm)n|o)5r+z7 z;6s;LGvyDkA#iVfR`}2mQ7r5^sw@rRR9{NCmK>j~A`21q@OJDjbt!I{Mko8U)K`l1 zd*D>l2yrghchlTM!>lPQB*QVyM$xmh+Y1s8A$gQbW96|?Qi!u8^)Xp#ggz;;kxNq4 zC~za+P<5>+f(k({)qqXp+k{1Rh~59fWL3f-Aag8a<5$Trd8?8@h62ykEHKw<_@Yo1 z);Y)G)G2wEi6WIjQf__=NNob8dCHppEuhpdO@7UK)*9pc{>wHq;wo3;^Kk$ohD1N? z9A>6|Y9rtcNCNTw3G_1{y0a=smKtmb83Wn{0YI#Z`8#XjTXiLuu<>^yo{1V+PjtBf zh+J4lM0kQD3CdLIF(86#qAxTy28HKj}_d z04<&o=!R`iZmP$ua;B16B>|IuIiQ(dvQyAx&j7*&=rbfCn!s_0UZ`!YN7&|EpmPs$ z@POA?4E@mIS_ME;!bDjgvLv7aLjs9(v#10v(#SIq-<4RPc+eG~8(J4Q-uNxO(xHvU z0yz$k>1Pp@lg-h0sD&?O0r8f8_&fm&L`1C)K#c{=75o7Dpd7xQFZ! z#CDAG7%*!{#}3NFJ=Bc%{DMebKw-z}*G0`k8ANICAk-+Zd7K)7w!Z+-a^+$1r0if> zL5DIkij@4ssP5FvVphIHZ6K&o49!)*Z?1eZ^H!8^V=3W$a+nKNzNOyAYfcH55>Oitcz^3?}H6WNOyPR3zUy(K+977mVD}G{3 zS*Yj}8C3EQ_3*a$2w^Cnjr8zK&mnALbPoY-0)d{2rhmY1yzl)?^&AwX(h5=+5F<+z z`ht`H#5ALXr>%6SETD+qAT;S$WpzJHHs=5o@>Kx&;QQb;0-!{^zV>}9pvnabpZ_k& z@$|*-k>C!{SP@G}qU8&s7`JJP$M;J?|HWspyXxFZ)F92sga|>c#*y&1=xSUDTxa2Z zN0EHV3n+X80n4F<@G-45?_K(z(e%vq{k90H{}uB%pvP0q6@Qc94506tS8i3Qk&a zg8viH%is0+U;8AKW*B8QivR|vK}gf@dg5Pq{M9!$gR3oo(ikwbM5)C5tgw_44=OAT ztKx0mm}N!peqVMcmS%h8$rhgTEZc8WgE-3O8^buHC7O3gEZu0n7!mVG*+@6|h* zQaT!Zk}L483$%{0AP3(G*M+MRqH4*$Gp?lDf}rhL-^PZTtQZ}zpoUNyDQX^4i@pbV z91*Fo0q(DO&hPZQyK;Rv=6%67l&){~ira8UErAuoRZOX|ucsltJjNsHO?TEXS}FQ( zV!i)`K~Csc2=fO=27%3gVAin9CGD)z#ByJORXV;fVvKKLIVQo@8f;TJMN4eS2TAs| zb5el}$!m(55^D#i))?RO@A_pKUqYN&1!OHIfwv9=63DX@_HFe)FdpC{#b};! z9$ky##z-R#DgGNPw~5H&NLp#z6uO@T+|V z#9PSIQI>klpEZ^Gfd?E9KGLx?9E|D1!<}c{nXr0 z)CDfT=~sY>*(8QuLYia#4zzp3!TADk6eQ^aestR#5b+==AjXaG;BrYiRe^4R_ul=? zQOLQCP;#s#;4!F3H~6Bp0cXIFRFD`6q5#*>QHZvy3Q#4zMXM|Wjniwh==aPd|2zyh zVIfHQqLg7v0Oh^D?)u+ke}DBfxY&~LLlcu{0oq$TIu>UGlP?LP=DkeALQ&TA!!a}2 zRb`2o@ksHS0UYRu`^ChF{E~{m7es=m&8F!0svYz9TX|FrA$NoICFY$j!Am4)Xgwc-I+cMyC4 zbQ>6#S=QWkmd`va7rCz(a$i|vZeOFnK`dA2h{ADPzGS^9DlpDTz`Wh{tw+8m+P@9+ zS)R=iUzjqF0@orgREmc^+qd)iw-J8(@nsBm?=JjDH*a+gbSb;}#(dTo5b< zuf7bF*^Q&@G=C}K_viYbX2WD>Rk14JuFWdM0`|vxrAw+lyiC3TD{UNU2@oxQOtsDc zF>W4DK8;@&u9tw06U}2<22WhH-N*LmlohAdq39FucJ98Wc{BFT#T#S$GP$oWFYxp7 zM_6si9FLW?ym|BbW9ysZ$5}+S9oIR&$h1YHM(eo9NjvxB!qfqk{{ao;+uKpoBreKmC~CQ|o`P{Ftj(nVgEITy@9Ka%QB0t9 z4NKaWhuY*?z8=afD^JjB^OoSdc$Mx5_7yW2 zJT=9VhObZuKZ)pBiOh`4;XV+THE=NVF&JHuLcl(@yowm70m|b5E{CE9f--#1PU^pG zRQKg!6oT9V_4)|VWFLdtCjYv#erx0a4=IsI%u$}T(|!~X#w(J97^?f5@#8ZmcN(ay zo?yq!XyL`k*n%rL%os0GjjvD*MJ(rbj4f_l;=}f!amsEfd4zr=tXEdkfJ4PxCrLe- zFI5>_M_Y{7H5n$0ek#RwdM)v?DEc&O762DP9aOi*RAc0El3t^N6y6wl2~QIL2 zQ(Zp-a8Q6+_)kz*e^rI@!5n(<@)*Dv2G?NO#G6no1J^d>w z!f4vLHQDyR`S0FU<%1e+8g%;zFn7~Wr4qDgf`BY+jDm~QM#O2>3|fuB^QJ`2Z>fT76R^!lw%{qOFB z;MJZj9Wr?DSr?)Z0q77Mr=MU` zn8|mEM}$-i)*2lJf#4{OD_MRBCgKODpSW@7G1)T0lA+o-U}FO6i~KU@{pjCTOB9U{ zy6ORz#_8eOx90DA@Q=Ehc*RvgI07uVfk1DRuyNGCnNYsxnPSv*08l#Xh6ksEhD18P z(M}&poM`VZ5Ac=l)Tf^~xa>9qKoSf!0h3t-Ve9@*v$mC!dx)}?$+!0HF@GPKT~$Hx zdxsV}iC9DI9Lmv42?Bp=F4PJ^Ep?v49?EK&&1#A-pD!`O=C~rqJH3V{7pxRgoTpTc zv4RH4u!=witcU6%IciKk)1VtWo;l2%h2(+JyZpl0;Rg@Ec>70e9B1vb(D6(G_F8U$#}ftr3e{VrLR^ zD4o{lQlA?34rB=BVNvv7_rb7?EQ-JN!6RDSLkvtp;6XJuM+U~t>jD1E{IZM95rd(8 zhJs7iCUE3o6=eE)P|&(EB_U17F$xpk zi=yy7vygz*Uo9nn=8q1Uf2AK+saVjO>O-HGiy%Kjm{kA4qWPc9uW5pa1s?=_6!>tR z_RsBO{eCn3udm8LfGyuyohS;#^AQ~f)Rs_DAA)>6kycKdTqeQ3QmOxH)&9qLFv~*` z7;0Y@)MFHQ(l<^|^GLoxxgP})NdZWoNdLlq*Q8-i%RjtNPuJ7`~d=#Uc)mCQ5%uEl346J{{eW_hXqk{f7^3^9IYJ6 zz%@X8CaSgojM@`G8w}t7!Sqi;njiDeLXJFG1>ZFA6o(1DbcaCgF+sfN2$wJk;@3pK zWYDRBKqpr}z^X$_1#LgBHjxVcZt!#nWRR`&XTZ3qaSt5FljZt!1QgrMRnGVcR-dbPVDROXgQ>vGVRIs zKpoESkyQ>=_pGl;O=Ndgy*0r&!Lu0h@f+&NER62;XcVc^BLxa>-Ak;U?)k5gsdY5@zusr@1lUBC9}#r5Tm{wx%xl>ms=R<0mP7n$zf0+& z@{ioztCuYwIf7ALKrG1p)gI+f=pQ4aU#^C(b{Ik&sUHBBVl;vkG$Zz{7XJ4kJO<$- zWFK|PGcf>-ISM4xcasvdKuIe=t*li0cJnzT(;Ks%am`L_C~Eox@WOPQ{zi~Y)R&t< z3oR&50)@^t+pxQ;;0T%t8Z;OR?;z2+LxUgkh8Sw83qZoR(7VMpfcn9mXzJVpKz{rO zLe_t^`wY!SQ9hAYQ<1J~i!gfbDhDw5)O4%+;7}=*%D^lrQvdZp){oypd`WHBj7kPg z){JF`yWoT8MmJomU?`$?ckQs-oBHXSxz^!wBAc*Jm}r>)K+?OpcN)dy)O`~WF@78uOet5~g zk|?+%uEsW}iE;v=#K?$x<~70WkE_bBCitJ|lUBKh!jKE~e&lulC|?Acy1%Q;Nvvzu zMuS24mk*4L7VaAvaTSz&_L5bt74WNWGteTPA3v?oiBV5OU>|nJfXb~?(+$PuvIR~f zX3*PkK?00Q7u=RuJz~c@W2a3s<(!cfZGM zLzqz1=Iw_Mn6H#UeEVjxkSMhk8s2#tP3cSx!*d@GQQ27|eE-Yl501=o{r;O2cGhtI zk@UU8Cev^BrJ9$i0w=@r*+sVoL$_eDhZt(tkMaMyt^v?QQ{?+=oVBNTc5;sNML(lV4!f#UAXq_Q8GO|d!}Qa;DBH-WK4D*ggws}G;Lt@s<4@o@ zaKA}r+Cn>kQB$N}IwGMAz?TOm6*Mp%2p!9VJMLdV3*j520eDe5>XCpWo+Xshh(Rp^ zQA9fKxgYb#qL#u^-6nxl90JIpm$)W?0lsWA;5C^EAduZC`lX^aE52%oaGnI9xFtN@ z@Ua#bbr4tyD3GlO;K?5Jli3l5>yh*N(1kcX03eUjPg7w)!#`@Zr=YBpwiudnn0|^E z<=jI&gJdrh__j$JCehE*7^o>@CEU#04kvLCFXrD;>APxtJ>E z+W0C+?SPSJ0{vUrHkOrKQBPc<3`# z5SrFEJH`-|Lg}6!lOOP;Esbt4u<%s#YFk_0 zP-&zFW$*mM;hgs{9;ldK@k-?|5fg!+mZk!6*KmUYxPC>_*If*xy7u6k{_v$W`X8Ej%_G#8pTUz!G zW+>MH74$*Rd>8m}`CspE6nI~TiqN`k{95tgQlAVOZTvCvzrXlWewpR_(Gu-Nh=TWK z0)(gZwz&f?vC3)K?usw%2yhf?p|4y}hGiwTyAm|&y@-$AyArsN|42rf&pm{w zm=wd{+W~nIx);rfZH~eP5YWg)V36w{m+c?QRNT3keEVxesY+mHp}V~)aP?(^t5`My z2Prg_-ml{^|M-e|W+b?9P4=Op>H9XSiF!h)_Y7B;^#BDTcs7;32N-04&7etpdjMV5 zjRL>@=qZR)n=O^~UM@xswF9fPa+2&1N^A(jrm}jmp|LzN^-*Q{%)n};$9PK;F}^&u zJ6NW#@A{>pZ5$h$;%diU51KzXYFd1u_{GDmx?Ts);O`e5+kI{9#O0e^pR@(V5NA4c zGu|iMp=utweB}1|9DUu+`_IzrV)sU%z5HxiY{m!8IoMssljPA#9x0e6B2k6#Wy?-~ z21XXPoyQm$nb^3G`7Z3nk{_OfrJyX@0#?+6fEs89q>ZT1KaO5sO)-s~`$|s`gO7GE&CyZ&Wlqs_ zX=qUMJ1+-IqtB?I)p+wOugrHk~3C*TGEDrok3Y!81L#jA6heCEa)^L|xW$QoqD;s)+ zC*dmF$Ac`^{5w8gajX&)*?iH{=HTOEcK+t_=o^DW{-mKQScSR~%3|ybNH6Skmla0L zR3}pO^b<*j!Lx`WH49xWOndQp!++xoc zY_?e{@BKh+6V5;mTq2O4oJAR-XwEivRA)W4FI-4Zpu>TN86HQxBS8C7pGPf?2e$OL z5rx#8=IXlaxGH_dwqTD+bgT0$2Eh>(HeU5gHqXLbj<-eys_Zr3pk#LU^C@8_6V*20 za?@xADvW@cF<@hNP;iDIn&1YcRCLbrD|gSpHskmauGemq=hT)OcucR{P`f#I^5p?V zFPqklgWj~BzOY+q-gkCshRZ4;^9s3yZ#Y<6`#u*aRZ(-!5+Rv%YdcI7LtWpM!d^Y; zn0%rVqltGZ_P%x<;OtHrXG(k~+nOgkH~a-R%B_%V;WO79lJH36T8v!;$!eSz>cuIJOF7X8#d)9ki(9@aPhxhQnZR zNLv7n>z}kCc7tWeSk;-HQ1{IrtY|J@P}pCBydsM@-U)A8_Ki_P*!x(#jz?juAU!GZ zJp}tcg6#5w`R0n7KD1=Df}Rw7aa;0{^C7uUMq_rqhUFEU3P40iQM?okQ0%DO+ZEjn4_wb4m;jy2}KJ%Yhj8TW5( zi;mEEeb#eY%M~yb9q^GUll{yRzTNDK*~;l7pL04GU0#v)7 zc*4ys%kq9B)V;97u2h}>rwBFku}$@rW&>J>ihCNzgRks= zh7E)WAGigx%zJ#%r>^c|j`An`-rg%)A##aw-by36|7HL~68cdrO0?f&eL?6q)P z#+`u3Cjb>G!181JIrxg2!-^A4Y~?0=4t_NW(8f7qYTVQ>lpBl+^!HIcZftU}+T_3z zBq$IhXkIU3=_m#|{{9dA{S(&9{Ojy@L)vvi+M?H@4wam38q)sI$@XZ+E+a9ko3~F# z+<&n}?uf>-uP_5kBOI65Orn1Ax+5=l(<%|>D-Z<$8!-YPbV|H$=ls!&*_3~vuFE5! z#D?eKlv4fVrJcA9^{Kf6{T4iTd}0DtHpBFhH&zpX=e+h0c{+HLl)c-P!-Zx(~0E{C5AJ7jxk?}56fwFz(dW42qiU;8t2#Oc9uUtynLb2C7a zp~3R87~yKcYZbfdzTpkq)CZLC<*Jj)ilZOaUH091)Mo)KMZiVc6~Q|`EW<4ypX=;Q zfica`)E!fWvJN9ICZ}%l!DJs zPbko*-%$6=$};xWE#0Hq>!i`^L%K(giVLDB9#O*Nz(hdU2n7&q5?)8>_tfp{`y6W@ zzE0-7j%XM=RI0i+zJ7G!wpq&kCLU)m4H?4^W9+4>yW%DO%M6UxckE$_|F$Py-b*pu zwB4LxwvP{|M?r3A^>d`WxZJRu$k3a*Db1tnQ>>@BPuA*0YUKh_Tmj&FGY>g*Ju%_6 z{+Xh?l6@@enRKqRT)t5 zd6EbuG658nXfADhcJStf9nHM zdCnF;6fyUyWABqrLDY-$nLFki745y%ovO5DU-^ilsa~tma-0aeb&%n#hh^4V>&%R& zOBqKQFAG}Xi(1~fnP-lDvCV`jsMwp>`gxC*<#dup2OO-jhSB@&N8ue}hDRTkl}Gj~ zcI7|f_rB^qQI^{2b#-=&!m_wqePbQ+ruR&PgAwuZ<(HvQU>s6TLgc788^8lsFAU}~ zcO@d9Up3ckv={Nap8obt(3JI6>NW(qHNZOd-Qqq6-L4+z48hDtEn|~spFJZ8C?wnO zL6%3pe<2%=Tad90K6^9xtnSs=%U5I1@n>FGciXgI@M=r0-}(6_x%$QuO2)4s5lFVD z7)r*Tla6gKI-~m_M6&(hi5<^Q)@-v)*v)D5^y07kmMsV zahIo7k+B~ie1%zkv{q`=-}hedEwYIN1#*E* zl(3TCG?Iu~tj+oq*kkTM^EmRvJa)2B$Tm)_+4~iWO%i}=?gA9Z zE2$%LN-{D3^$fR5eR38p^FR8Mou4y_ar6E(&OqkWyp0c!6OOrE;X2PMjQ9vSBm9}U zD?sgx@Z8Tl)is8(hk*+xaI7o2wL;Ar=HX0xos3FU^GOVIvknXkoYoG?^}{X{4?F-L zI}FCt{BsOoL?rUrv7P)a8aya7i`tbt z6${Un^GJ9%w35t;8#ec{z92+ASE2@W8c=sGdE~pQY{f>~?DoNSbHY4sa2dhMsV++Z zaJ5ItuXhD;EcKcx@!o1uTEE*DFPj68%9H}ro(8n_Pm%mqu4I@ApH_n=i%NgNO;{*+ zQeEG^eg{htsgPG%8Ou7G8T3LYhhQn$55GDPfkJrC;6^_~;B#{{4_IqY-i29Gla`Bo z-i2gQ*y7DRa+n=rbbN8B3tx5%@6eIm)D{AJq2Tq7D?jl8&j<{6-tfdU%F#ty*~fCS zx5umVZp(Nh&zQP0}eSO*>uAxCr z>C&^EP1~#<1@1Sxf1Ts?>Em&dALKUtmw7R+bS%@*x3L+(%~MP}i)g+R>C3HquN-z| zgxxsn!!HDw4eaDUD(9*wsfo|Y%b7dTTu;58`&<%q`)+bb-{iRWxO&|Mraya`{w!_% z&d)b}dX3J!-*(~sHv26`J4ZOI%mTut?>lXf%Rg4f`=NwMz~s-&z}?TP$QyG}fAHo$ z0g;bHsj-Pb*Z>8gbdc5rPX8PgPpW?PR%nV@n}fP++qcHR0o%x|pu_2?%YdAzzv zKR&-Hx|q|j?aGax5MMsfEW0;k*_ACOYSm>#1cSNXfpf6CVM^13_M8+V~ME_UtCb<^IsiRG;W7U_L@ zu0D4iWZP!N%PO^s<711&l`FNf;wKijCR?O;=(&1dnqG{@02?t*1VqCgV0!ZwF}-V6 zr^5H&eIS15^&aiG_aCD9FKzuZQ`AAkUgVCJjAigq#*Eez39WJ$_=OP9WP)q>8JAb%o-*q`%LU&Q?Zpywk z9$xQs4a4&jcRAF~DiIJ9k9NB*0Tw0z_13|0U|`qciD2aORz6;Gx(4+8MA$v4qG~~@ ziYMRlvQ6s+q&HoF07*Zu4(sH676hcx6j|X&#~p)E)A(Yp1~8(xrKStGc;V!--+aCJG<+h zwAr)j>r!i8oZ};LGi&zvOCWiFNU!9>R+-ng!}fpK{WJN-Znys>tb#k^{@1d;+mwRB z_WPfB7l6qY_vk#VyW1{S3mo4S)`?I1?%s&i`o(v`hNtVnNDuTT3RlbCo}Qy($jmCU z%*_Xc3X4@pl-F=S1)t@keE5%wmMDj9*Oye{-`O9tOVZLG*>iJ;#DgOSyX}$|r;4=R z%c5b*Z@g!0mPOrP=ev9gfu_hR=*Nujk=vTwiM;%HPsy(>0 zH>9ZiF=dQY!h|WBj9fx-p=>ilOvhrQxEc;z7f>77nhuZ(V-+vfg`av}3ggl?y37KMLT=TSCs z$>Y4O=MUSS$T+MY^Cr9fD3$k=k=A8N4c^&Gi~>H%t9<&sMolHGrCc6{^T2zwloBgv z&p>QnmmSMkWzwKpq!gZ4>=-~oVL)|oJcmv>h66z)?OJedT}T)?QxLvWSNb#chxZK`d01-2~(>Q%*%*)wDACrgF1`#0|@);!m6|GeCuhnr4` ze}j}P*0e6W|47E_*~Ukc8h=lgT9*{R{+xK!C47=ORk$!_Cc!%L5DZ|KK-Ei4sa(iH z%EJf8MJ>ETW`T%BKx4}Vu9HSmxf;9|wgekLt(HoEdGGwi6H>XmIdV=08*5$VeX-8i zcHsd>&Yfzhb60tfUp(wx|V=Hz zsE?6KQmU7;s++h23mr7VwBXGj-WtPCWFvQH7o6-e(OTktLB4k$e&RgzL3Y8NDd}_T zjOWPR#?UQYCQqlN1IhPJii@3VxN}}^_rvg0;+E$c63)x*{VMsa_nwm0wapI_H1~{i z-z`oez1K+wd|q`SxV*r_A8NI`cw9cb7m_;^divuZNi+F=(^B+^yN2CO){jT+tB$y7 z*m;{m@ST?m)2sC}tM#ER?7R+A>n@r@;UR~@so+H2-~-RfLe4-pKF{vBY<`Neqqbm7 zdOADo(o}ixIn4O&oSr=nqq*lW)+gYJyi4{{YtDT9q;&`UZFBsAn+mru@GH~HP0xgh zaO1n}@iK}gj~;nDy2T#+iI4<$)xVFqK8O}W)jhxf=0J^tgA)oUYKR0LMgyxATd;%& zn`CpKdaySwAu4qP#~hcFgk20D9BXgO!O7!WuUvH!&hMQ`f7hgZSaIdE5bL7Lz=74J zxNeu^Rxah#vYUOb#j~D{j?Q)&v}H*fi(c<2iV2lDM>slUD%br|*1^$>vq$97pH;S^ zTr*$y+Gh|%s?Sipi@Q>Bj5A_MdJc)^qwZ{@%UN${?TYW8+T08uBz7YONNI`AmQJG9 zK|wkNWS%}CzH!1a?(+ayUDC~YFxFu)Zbwu3hinueW{eEiQxr$wL6T2qEP&cLi z-cj_L^Xr79{d*c?f2NaNWkZx5>&M8x9y_zFAtxAsS5mlEF&sPMW~9JlT_dW~=c&c0L9k<2~%Wr_%53IeQ}d%!57IC$~yPYw@09IuU(8 zMtszYUFnjBLEPVwyr(oyL?0ycXd|j84Ed?-8IY@s65+JlZK)*_K#+t8$r7x-UK-+E z5RmG4c#jY#yN+gc+x?%(?F{vmYUtdD`yOSdpHO^S7vuQBY3#nH^Hw3}in?7Wd6gE~ ziA^Rkj(Ex`&(HeR64nO2r5D^SbK6gO5%B42b2TO*k#Q zE%gvtUK>$2f&Mcyq$`&lhAu2P84C`WyE_W%I;`<+FiLrI7d4UvI@CZ$!M*g3l=tj@ zHo|UDKmM_Y9aqnv`)ouV@zQQb9ui}@O7WP@EuVbLIej5-U(I-$awQ>c$#x;)X0Onq z!INtuL^5^!`q3$gB&XAPa=_;7Q{|{b-TWeKG~0Y1V0exR=jf(~nRdrx8{z`$%!)nJ zu;GtFXE%&W@AnRf59NCqp0kmXRoQ3fuHSY()#Gk$M5)2TF|I&5O8_9^BB$PB9PEQu!UEvnk08@5b|L*UuY1%Fa67Wu(0n z`@*~Nd5WCz8Y6s4(r796tlIVL6uIYF;gmySh>x+576$~?z7H_z1ZW=G>W>~6T93vE zkgP!Rtp4@UC;^hCHZ9=+#QJCQ$iqX&txj_b@MzVsJdi&=dYW5_N2}%Q13wz_ki)YT-h?WVo097diVzY=1rzN$e%9CCG%MA5?ytu52x{z*_ zeQ*0I%nrl!l)XpHqduH^I^A%&OkG`NQfS3`AV5^vK`(Jf4&n_y8s9sQ%6szY?JmNx zVa|ff)OkbU)%RbzbT$LkI=C_rO^Fpo>=$_uY!P+zDCI&8Adr>WGmoqiX$n!vpX+xr z9*VTftdMc4=R7yKr(Wul{UpZ=m?k`{Gi$VjwZKAp3H}@(Pi}Try<>vEPfmU=8b_{l zrX04QhIiVWfygZBjIOX)z|Tz?KA~NzcXt(9U1&I3ZprIiw8)_g)t)>OYq0Kn7s8eKNWmo7bDXP7NWpSRzBJ~24EndxTX zPK?Zl;*ATlfxhM6Aa529-M;9kv0ri5_9X6&26r|{ybt8L_KyA4*Vt`m6N6w8YctJ_q0 z5IBa$Vsr0RC{_3a&;b)aVxA~uv=r7NfgB;h%3|_oIZZ4M-dqK0maWAm0W!x&?x!D# z*xXs)%GJw$)XUQ_NUq6_Hzo@<$|eis?TIbjh1Q{!n$;LIzYyD8Vq}E3w2_O5)48`> zl0Mm5zE^S0P#C)2s|8T@IwYhgR~P>IvfUjIav{0(Ls zOO86)Fz_*f|BQUh@eJTUQ#@llb3C&Ng9%fyP{~+TGJF3eol3wVX=EHQzX){5OV1&B zJuy9=7~MCB&5l@xVvdrosys#qPDdI9IMVLro}?+nm7w`6)$RDbjXM)zhxWo`lRUoR{;;E zRYre$2a6urUNQZRZo7up3yn#xv)&srWiu9c=oVxw8pqN$WulHv3hsk%%*3ZHdhCOX zW{RdQ!uC}LoqMZb_-rcPDtq(Mqv5KCmRNJ0j2S1Ow@QR~q~GcC4O+GZOUOGd8Q}$_ zYac6aLP0qhOVq98S`t48(T~*hbUQsY^1L`xq_J&bF0~(kK;Mu7DR8T3$hOY;`MH+V zyB>M5Hg%({tZdIQ^e_st%&<;YaqXCBthxo;r6{dg?y*ks1Ofrzb4 z-8w^LHZ#$HX)#AQOMX<<(v}kSKQnXe-HK|6A1knAxUM%sC*#J+D;JeuQR(A419x>l z_HBJj>8m?MiaSY4(Hn#lOEC~~CTaja5>!813d;|!5Z&$tyAYQ6*i%e+uj@=}n-7<; z+B5IL6d_V?l_BzaJ%9^w?yA$Mx{)z&TE|C`Z1Gv%n_OL7-(HfDyc)jGSBwL5r&=L> zE@GcAb1+Qni{LM;Gb`HLkOBYb*0C>wXIFmWz<|HM#Advr&5PW!9x+I6L!J$WrTsUp zvn$U`zd&%?kj?@1TF6O`D^H~TH<&PNEM{8C*a(xo1wfmrs5OQ;<9^o-FNb~&@RjSA zOcz^+4&0dAe%N#4jtX(k!RVi0r-F)~zB6qfI$%2&ci2gNh%O+~2LMx(L`3i4 zrx=IYm*$d`A}LCdELQ7FvGKZlG1r$p*LQx!-gsrZk-5<}+_DN05SBQGut< z;goDetp#@=JnPgIVaPg#))h5_5kn6o1ev%4QIa#?Qh9dN!#!@(qCt!5&41@+%-f=M@IGmFUa~Oh(A|TS4juwU?L!aF07&!h`W{(DnkT zb4`&?Bz$38x7Kh_USIP`WVBB?u8 zXApIkQn`Pb$SMh8j9EJhDy$1LXJO(n;NLi`1p9QaGN z3~2`lZgALCve$8>DuP*ov44-_fuYM)Zv#}AOSr**wi5ml7R4h87QHLM@nFB&2-K&X znn!NJH_ao3X8EcfRvlncZ_3&q>R--XvQ(AF>cH$M7*Nhu66RmdU!q^-wrQ`}Pcd798t%Na zdVfXkU_v7RaKTsbJfe_DGzM8La6B8p72F9Hgt7g1Z*YvP)sz@fFu5DSS3_+s_m zQ4VDA8)&cB&S9-^Fly$YhN`tlH~nBTV?BrbUMcR6dH<93*Y&n-qdDGN_@Bu;WvKwu zZhgS&L7HHGGBGnz-LXD$J%b06!hgx&oiA2b*7Cp3$eQXpH)WHKJU5k-T{W>@0|D=> z){75T#*ZS8tX1xENzFEGCdACoUG-~e;KPY)6DBTG=&Dr7kugE(}gMv{L^ z&5K#{&x#IqBX1J4-(Tanun}{z!a8)N-)my-0dr~v_JeuxizX{{>Xg}=LvyA9fXhw? zqsN4}nOB?o+YEdHJoSF-7%MW5Rb(;@p4++Z7+{jzFiHR7ZFkmPl_|%2Q;wkn8-~~2 zTpZJU9Mdlm{Pxjbp97x&gZ~_GDUJzr;1i(xnONsE<`nc<)dQSG0J@9j;cqiGm{MO^ z`5b*3mxDW^_N8L4J}oM2GA&V5Z-8>qnPB+>q#XSAyZx4GXpYMKnfD*6l=P~zIZFH} zB(5K4>|AcrFl!-R?DOz@E)-Pa7OQo=uZmZ`jJEjf?0vOqGWb9iUs2Mp7peVo3rjdW zWZ?6hFY#?XU^6oqG@FfMio_S9$%`R|EKNmBa4h*blBR>9t{7)ak~EMwq%3r`w*^g zGA0h@FPZuvx|N87cYv8(cnb{ghPz}3@k^a~+wxhYFv7T}F8h|HanUO&2*uM@-u(## zx_|i`^Zw<=GX{oHi}yB0)`F%LBMvM@A6QaePU$%(`?Kp?C)WKtwo?a9IT)L#-n}VP ztH&G6`z%PWK5ndbD$FWze5D}RUA;jL-fN{-Sr_O1b41Yx@}m4Yq(2p~+fKE+T=WjK zn&dJwJ8G_8cDOyi(R;sdu-a`~szzg9JV%UX!eNe%2g_M9GELQQ{3dA~p+Y))eQ2Z! z%K~5dH^A6+l>-hRk(kQ4V<%C>S$1|$T~xgv@i64dfbVDJ?s=r0SjcU|nfiC>3hxYN zjkGKT%pN*i*mNurO}qA`DExd#Jh)~ z4r;zj`a1Xz2(6x7h=6n)CEqh1!m++mLZY zH7cim>VAXrZdHBi%2qoio7Wr)7PaP~Fo{tXGG z>BgmRpxmj1c&#i@fcwHFQt4NleIajN;wYkOxNMjZdhbZBt?6m~kh{D0sxQ6bjSM-^ z>~|r#6K4aTCrNAa8uvDLE)1v^F6gt+m{pXQHese4p)d+Y@6u#NBtWw*MRC6hc4=7z|;)5x&1 zmjc@D<*QQ5ONErk>y{;!PJK1WXSCpGqQ5r7qDTs(4yMEN?WE|X zY8!hJFL}J%o+_9Nv6)8qEtpo21M^Vt$&g-hQ;~153CeC7V@W+?3c`D1A!)OICnq^| zVMUp*pFWMfV5EGv{j#p$KKt~}ELV=qyx5|%y{GPuyc|{Bue4b&vL^a>;d}FozRIpfU&WDHeD{gqdlFhEX2_M(s+@K5 z>2~NlDJi@9>*_e0R4i2xE{-;9Y>kWZNc+on<1r=xlnoGjF= zrww1zbc$%D&un7Nyme*N#N$(<^$Z&_vqsyEoF^qq7r)AeW@(`hOqPnP6+gwgPnMc{ zJH)5>5Qu(LO&e=Fjh*H$-U4LQO7#qJ?J?zxqrV{?2r3y*@?=Y~H*PHuFHhIYr!R$j zYP(K`mmEU2rED4aEHLk3et5#dvejhfZW9K*Rn30uf%5(G1Ltl%{=n4tM*XTQ8woNf z@=?#mKp7@%9D8k#aGa^QObtAZ|5Vt6H~;ZA?m3{{&h#_mduY+}FR4iGNTB8k6}6)e zy7T6t^zC;phdNm~Ft*+LM>V zpI(oCDtc#6vUB=s^WF}&DXECG{Dt5Bw1ZbsY5BkTX@(e&ZRs%Hamf5XKZmZBH8Qj0 zs2+Ry9X~f&+5F~9QND6-0NIdL6pU|~V)Kx7(*>`pD-U(fm^|vtIXz{(cS$P7`{Aj| z#-|q7&lSkM_$qs0Q)&Fsk$F}^?KQ}es%xlCV_NOh;XsLDwrM}jb}D!gS!uIpz;NB6 z|LY51d#oJ(RP$J&_rW{|^nAGyC56(6eD>N=X~5L17=@7-M;g|tH4;MBSyi^O_7F>DFUEEiZ;Y$Z^d$%&7RW^rdKV? z-3W%aWsA7Z8_MpvYs%5ZbbghsOB7-FDmx*}a#HTRVZoUb+#(|wgkRc&Blaq5M*Dm5l%$+d1;2~boWNFAD-jLR~CR?OL5#S-SR5gjeE ziTz$mNP=FJkh1qmooPHEP_~G6j4?iuWHow$L>%KiO^Ku&SZ0^p> zEvH`V+M)Ey>$#JY`8?Vr)HTfj{r(8*$^MaY(%3_vwm54O?{nojOSRJ7A(x9X)$|Ww zI+*J#rD6^>_gZ9id&)hVEIKGC|I9R=bH*&e;!}Wiy)@ia3D8x&5Ei?qR@RUARQvu@ z?eFYrilfOl=2etVJvQ&vNww(J=@^?gE`RCvf4sc~SXA5hH*R1c5`u)%NS8>5gn}Zi zbcZ5cBb_6ngp^203kryIHzVEMEjjccHPp=cpFwW@e)oRwz2Eo!zmNM_YwgckYwxw! zn&+IeH_jY*DtqIfz4TK4<*?VfhA?nBaww`^VAR+=7q?#4*?qLF^kkua(A>Q9(Rs z4;yg($q7r}lyNj9+@BEf7l|xW2@nY`%WhBu{|z<-`;R}I;GeZQtOSmaz-$$-Lxsn! zO)Dv_N`2Oy2ulOYCL7inH?Gd^5tK%kRW~HaOlUQ%-?E{Gm=ZbTL5>2(l_ts?I*FWL zmYr`%ke(0;u)Lrt{}No~2_Z1NgL%#8seJDz4!-%52z-g>iOrwO+8C$zXS!>Smo6lu z#3j(ShzXevKbA?!Wqnzsirc%sTM=S1%L2@z50@db&CDp;)b1y4zI{o`hlHu7ES_)r zhFLtr`?e!$z%xYI>Es>mR1Id&=)TN|*l{_TbL@=Y`ic>yI&ZP_KAZ`}w$r34l7gi7 z-KmIgX)l{3ACk9idd~LkDdyFi7(MtR&Oein_G)3+>rl@!AQa}?LZkFIZ!-PIZwNh! z&&V|_o^j|-7ryC-hc8X%$b+3*%FY1eAI{iXY?!7+O?O+pMe-QvGJZpHz>-FdQQ74) z`(tHiruSPA2^3?1FE@bR?u&~%hK|RTm6uz}zf9^75QvL~W~@FZ`dO2c(wx@eKgm(* z|L|3p%~FCcfuc zb^UT<{Pfp(|6M)g*#4Urh;BYZPW~VQ?|=%=d4SSCdkN@!%tyAKJMmh!X#>yGTi@bl z$=7c{W6$_4s0X*(QGa3lW^pd-l)OEYiJeFH6Zl)1A_|G#3-d#>Q2^5SkD!xXz>mSB z0JokY@!G>&lFaL8)rkxryd*xWj-`3cknije{kK>wO@)_(SeoIOX&5mI1&p2uqm?;} z{(zk~sVQnW5uH|)*%#sDnAn%2s4_O_DqAV6V6KtQvc7URRWAWlZiC9$KPcg#k~dYa z6I4)1=)=#>{}Z+%;XLixy`7A*#X~}GU++B5b)IxjdT&gOKz(lf2iDKs3`%3Eb0 zaU@w2#&JrxQ2BfKZlhj8V@20fJvjE@ZR@lm@-EUqpMf)hKHL%EXYk+RB>Jn2;odw; zMSqscVNI0i`#r*wM)Dga=pQgTM{zE8(8t`-J!Cpz7CEo6#~10S3o(Jr%o_6Nj23a_ zzr%9rxxD%D+NnQo@8e7DSY@KYo<*92s2)e7?5c%64e=20`!ZuyGA{je7MZ}d)( z_T2Nct&9L*}an=+gOUY6wIq0A-F zLjnQgtsrYEz%DqU@R3%n;Zx2^p@LWGxUb^MyX@7uN{fgQdRr*|%AN4aAQgLOgPZRD zdpO~h@n!|n@gDx_M9E*Tef1S_x~2N&G4Xx1%WAa03C~9g?x$UeVKx5xF5_n{Sh zyqlOc-o!u;LCr5R!B71D7YmH(iOrwN7IK*3>ZATiBquh(@-Y62#f%R&{%yI@9WdgboV8d|AdC>#T z;q$gHj_CD*I(77nF}xGIO2}J)X>$>4D*oHtuOyDhCH~tl#Qt0;k;^Fo-(Eb>2tmWg zC68cKVzluS*T z{S7XBpu&~QF5%Mo;h!vYt7q~F)z!OgKHk!K!>LaCspwP2f=I=z%W%4j!d*l& zo(ChiC5tpyKk9pFRH(*{ca_K5$R5krd3(WzDtGB{0bllDL@n_1#d>VMk%_O~Iy`9? zp^+-bopR%dTXJK!^(gd<``w(UqEk!hr^Dyn-+L&%N62i6%G5BmBIyqj{~OSivn_nU z{k@yP#zE~a+;4|7;n7$D+Th5`@EHgso|m4RlYS25l?)R_uc|HGnm-Xl0#kx}#Ra+sz5 zT)Ny=HN)wGe-S}584Nmgk`~YdkQ*Is(pHbWrX7wZxRtFo-cS^r zQ4(7;6g410-gmJNZ7w5Ou~)h0IwXX|yNW7AOgZNk4waj(=fcYoM^rT8g7cUBj?er` zxZYqoG~#Ct&bHu7c%9ig|Bm|Qe})#i|)>Th&Y`O?*K&4{7S&kPU8DN4RZJF z7ktqHpc_ADbp;CL>I8@);lPEzUgM1|A4xB5{hNDO;#`FDepFlCOHMoQs7+`ACDYl@ zPJ7+#Mkt>4u8o+54M&JFeqv1yW3!_8)FC|h(jw3EVbS)8kBEf3?G&*Afrt98QKO^4 zXN34(*_ZE-C*EaWBy?3bf02J8Ag!HCIrlsIs`@SPzs`hMO%ZUdk-nM0@FAk~L zuV$3*4otXN*og9#CdTS?^ZvzBIavuviTzKeoyBDCXI^PIS?5nuYd)%X7S*zp^U_my zpv$It=L&cZTx{Mum*Rws-4@Z)9Y}j@4CjwdDCoYe>SJLp`wCILH`yFA_KK>m z_gl8dkPEELzmgn@3l~^VNh9%>j}pHSmoE_??>0uJpOCVx>k;YygM7SuVS$BN39`VV z^EYoqHFt5n*~UL8_30c+m39 zX~8ApB^tJ#+E)ns3&Jf|9NrNxePr&rr~c6=MdFf{cN#y6EJs4c$7}o1RD8tVk^PZ< zn=Rgs4~NyG%xDT~D?|x+DsnKDC2^_x9Ocf5J2;wkf;5H0^yNIev4EUsdL?V&nFjJo zp`<{oC8sR@J0HsQ1z|QOi}h~XJ+nizOJ?2HnM^~8ul9-*-OAh%h#oz z%?sRR6Dy?^ORA`fFj}5&nvYhrqOasEId+&aHAjnUo6e{YZ|gbj*>4-}cC8E?FU9Y| zt99TOHS8UDPCu?qtzZ+cp220!xi^h4fA2n_U&ASWr`-ywQPbjgcj>5&PF43cddM+S z&3Z$2*x7M6a60{)zuwe(*5L%d-sqrFL+Eg$y6B6;igSXMCeqbj)x?n-OWE8qR~NIE zI3LaWw&oOXyGRR!9-uda3`R-uoeXN0hg9+sU+rGcN;ed}u*za1iZ6cH+XYOC#Q`ju zk859DAyLiy`04^N`xnD|7jRhrA*596cIA%)YyLwh1K7)jxju^pMD_vdTuT?d`c-Xx zf#gZ8B9TBR(|#N3^}T)@@pXNLN_#VB&h@U;N!KEgB&SPe&M%!vdp7Qm=}A=vnjyD~ zL>^U27Kunz4)<)3nh6vq&JL+exV_a;f~>M={z_~xYd-0oNT;MR8%)M8qzsdr6EaY$ zzjwGJu+l6DOfMW2{@a}VlFa*N;U}s7V@8ZIxqsd(-rcBu8fHwCbbL_PRD*YZ%bThV zePoqVJI>?_i$4hrjIK1%+_hd{L*&Cg(6w_sObPx3(6aXWE=s(4uc5Si13xI^Uxxdd zANwy07-0nlVXCdq>fV4K)NtIV)2%ldl6dgE$<3ysLo)7S%z=R36EkRKf6c~fO$4W? zWzCDpImL@dMU`t6vu)c5c{pG@EaY04Xj$R$m^8}42u*CMqgpIHmA;_A9<>~s9)etP z$vq`krZVTMU;PCBo&3F8c#6#>_dDo);%HJe9Q1RX*dO|o2)@%{F=pTtU2`Z=$|?BK z-ei|+`JP(1r2${+PZoU_8J6noLDLE7@%%_Ce~|NLa9&$eA>$7W1S3H3H})7OlO;w< zp_Sf3mhp)ScR=iWnSluTlr&>PK8Elwf29JaRB@2{7tO*zZ*;ikCPO^+BL49{SJ)=k z+;N`U{+z8MS0=U6Hef6O_))K07~#5CQJYjzbGqm>9~m{BwA$b3KpJ)b4>7(afzbI* z8FQF;sd)PFqJ+3+-4PDq6n?3*&hiGCr!D9fimazX_}##?Qs<((StX2B;*OmR?BOU= z!X8Suf% zi&yjYDnAvpjfln9?>)~$c>!rYXm^!%@iWoGT{C_raIWd=i9gy8X76QNI;LrS&^K~> zvrLQ;0*sZ(^o?BJ%nhbkfS>tKSRRZ4t8r44|0RRPF$GIActbz^ zYHru2xSRV?bO0b8vk&Zj?FN*8SH}OoK75#*r7xsbNTa?zlFt?GzwIpImNu-F21M|n z@=OnpaQYE;X{Da}?)HyyhX9BGY7`6YfLF-XsO1zhJk(;3?J2pq6DJ8f`xE$gvII!EGUh=CmDz;`dIS$LNNo!7Y_4#)-pI2a@vn|`dV%XRxgL}!oq zN-}gn5@0@QAt8qk2XnAcBKpS`QTxz(zD#JuJ`gbH==tNxa1FO$#lJF|XIDOFX*t-Rv-;6hbHWjnMki+IGF*u`QUHcvh3_KMB} zHGUV);8Dw=v3@Kci+L!aKDxJha8Cqk*QRA@`NhN9tLM$=y=j-%;`3(6;RT3*Q?*++ zN-%JH&S5ZLsodP!ajhBNoMGDRdbB18bDaxh4ttV*eM0_2TtE`~Vcm|Wkm~nnp0shR zT!HHOvs_E=6J^iG=FD-#-JvTpgXNNX(=*mgm6@|_PVVsZW`+H?l>L#D3Arxt!G7#1 zQIT&6t8yip&iB2XboOV7&KgcsRfeIB(hifhf!Nc`%N(FlJ1DYVXI zIuiyL***f18B0UVQL>wR83I`imMc}*i!1n(`BDZCtZ-7Ia}6Ncnvpt$JB{+o)OW-x4s%4JCnI84fn6npIar~?Tj|J|p9 zeH`EZC@d;^jB5M*oa6G_{_)Vs$&e|pku21Hza%P&nZrK!dp)JC!Fq7 zf5QDSMxgx(|7pxA{&cs2$nc)Yr1zUCXwcREPRWUzetHh!xYfz0H>TU4%JBz=0hRkxf5-lpNoty$ z4k6aqdzzjoEbkKf%kr|XzJ2}=%vuBO2_EN}u3F6aO&%-B)`8Yn1-Jv zOv%5kin;E}!?IwYghJV!Tmj(qjop9ajNifWKLSUEcK7P z_Y2K!;0FI79~5MxsM#KPWf>pjE6-y(;C0xyJ#^sX^xgLYOsOdJ1Uh~z?mWs6hx}{c zSGkZ}%ocxg`}%Yo=z3dR-R+k_yz69#{(p%kjGNpHlur#{XtK-!@R)03YyFFJDXWp>frINf@Sd|slfO?^RQCN?9al5 zILRE^#>@2e3oyH(VEN2hK1iEtVQoZ z`n=w?8$^B5jOnM9Q=u$aAhngdwQku>!2u6Ln|OV8bNZZ_Q??iz7g{ZVtbte~$QRua zHPmY?2YVdg2||*aQ0b~wdv!E>m(zZYz@*2{W-it8^u~R)SE3bo0$t8!$?lcY21h@{ zg#a&s4kzevqlN)0@fo7hNt?zwHl-l=9=**ATOtu#6vqmUkez4Sr0|HC6m`Nl|Jwav}y1qXm2ef~Kp4 z?7PREO&6;V_NTTf%$mKOej!FQf#(+lABUV@D3cHx_Ha0$tO1~fYQXSsCjW1wcsyf> ztdJs0GYcjhl{QG6*KrHuG@vxHA9}V#sd@bMb%P_G_;PbImWe6mb-|txl`+Ui%JibS z2+U$wP7zrVykC*B*k70Vf4GK=1t%#2iGFO7SkYWCZVdoC2S8*+Y^0{A!#cp(Q!$}L zSMKDLQq+6jd4=Ojvga;cxjdPdW&WqZfex3(zyVIe)m6Z7iT^WlUWmY;*4ObKFf_EdQBMB<&)eMg6t zYAP4=#Tvh@s9b&O`PO?dovh*Tx{qekQ^Q@B-zn~8Dc#BYgW?RR=chF`B)b1E8R*xf zo9<>h81lXsezSeN9SP_QYG-=yS6d-~=#;5y)On6ZT>!sxCiY-@B za-ii3!D=dpR~SDjs7=uVNXE(ITG+{mt89*Jj$-~LP#HF zUMsx`u_P!Zfe`t}Nlehsc0HI7ZpfCLaBHxZn7BThMlgI&mlPt}uuCv3J>lvh|{EIb2~ zgj4i0CMzI12&U$p1(*}i*5bd<&PQ1yG5hZdP$FQH+A)%@c zmX73nOu>BrD>iQm0`chKS8Qk*Zz0-jXTroze znE}?NlvS>XjZf}-R39ci=a&*cNz*axmm%NA#LqbJrJLS}HO}(?9<7Hb2R(T9083rU z@RVGn%cDDY{+i}BZ{llY{@>nSzIv*nImbrFMF66p%KI|L*`6BR((Zh)4XoAxyGVn4 zl-ML%OV8_Ux7f#3{HLg1<7?-MHJ^CjVSMe483i+dofK9GX3#AEZ`Uvb-TFD?$wVM# zE#*Q_bN_hBOB2EPOf85`y^%SK_2IS5r`JW+V>B;(@>k=!lKJXM11s4ZwOZz<#Gpkj zbJi8m!tlEKPqk_-v(+mZBO>`LafZqxSmAYyAFlJ)e$K;Ye51g{@|()zpfRD6a~B0< z!2l=@DmTum4)jvI5@)BZsTNd6@RE=<1iu=M_G8>!beU&pUstGIU3d@qAqJxLJ8qE=aWEVX%da3!ZqIB$QM3^tlL zs?8uL9Ufy0|FQ8kZ&94te)8tEWF6Z3r{hSyE}n6!jLU+^R1~;!95w1B9ehRrL|Vt< z$ShZD9N1nVWFy8{W~+9X6Sh{T@WAxxbLO~2QKyQ`WG^@P^rkI@)FaPH(KbqH_WVWa zd2jqgz!h5RWy9QVq zsvK5s)n7tAKf7DZMu>>K<$SY~2{=egSo-=uEgCRY9XMyd<2%jM4qLC11yxy6QQy_S2CG zzQ9((VXn?R$=97c*=|<gdpyw80pukWZX-l3@L4L5_uO*uXkRHyygT{fs_O462)&{?+x2LmQFtIZ}#+w?Bg&O0Kb@s zp6n{#&z`kLiE(k)Yc;JrxO)4k%eDGIGW~{4I$zQ|RsJ*o1{&6Pm~BtqY2V-8MI}ua zP#k4{^J2@JR!T-8X>Ay0)#+@AXQx8T2K{w{%lQ0t0?V))6liP+A#gey%Gn`W8_`*Q z8k;K+75`P5oWL@wSvUXHTN`&9tfeL%HY9|Wot?dcxp!O>kec9~O}kc#4T-x}dI6$C z;CyzLQ))uJ!TQ0(1OG}g$T&X}a99YtRs#SwmdE(@p=4eSo40(a?>zj(b-JWoI`!L6 zPl(I4Ow2+D12wCEuJ%vREKEL59DGUh-M|EawwC`kRVhFd}NCyHdB1x-_^?8%^>FYP+($hCnR&YLo-z5l=*nY-nO0UPUtmVrX^M&-_ zxkg=|0a~j1(LmrYAXn;+`_*7RAK2mtOiHFIe<-XA%Pi24ynnM zaimf1`3kQ}PDE27EM?VR6Q(pQp4oo;`{*SH)V(b6Saw2}urH+8RgbJIS`{Q)_ryX05C?y%lod2o9rwL+o# z3+YKS)gK7dAK<~jTX)p(cIl`eXK%dCJRg`8@*{3NCR?q*VE`79(CnUB7YlsUP0{&8 zx;qd!6^n8p19smdfE+LI{e9BnD-SR&_VRq6$Y^NnaEXe0uL@h!yo38vI`TdISZBhA zRH36$XZ--IV+uoUAlhWRVOcx)c5#N}Znp)yzII1{a+WQtp?KMo>d(l5WPLe5Mhi;q z!}e`Qvx)=;YZIYDyj^W!-Y2U)ed1NZmi#XykB_>0TFffLzKO$wx`=bp)dn}9qXJIW zW^PnM*0!*XFq1YPQ^s_C9B)PoEMfTDa(B;=p0lgZLK4;~K6O$c-{6V%8}JQv5zNEm zySt&tTpLr(o{r5jlQPe4?`P?CsqdZ|i8N|H`hhy&clHD&p2mP%?lz*=gD$@0;}>sE zaSC}O*32ENkt0xBL?4`Ly~Yd^O346+aQh^g?b&<@v)fIB@ z)uugHT*05o+CxF_DPL0>oHt0E$Br_SHJhRdvC?Dv($obnrN@4u zmcNi*;cV-vugDh%1e6b$IU38Bp&5Ep>*8b$KWB`kHVyIWTBP3TQ{AL;oPKSm*kJQEZKC|L z!x00o(uft4V%k1x*&67C+dF%}{b~S%S`@%=i|76G6lKPD+};t`pXF(upJO3<6eH1w z^{=3Z>e$BeG|$f6AZqy_(S*g#`0kE((BDAxaffhQuO%f90MMTVMr^MfIp!IV9)TMP zNnL6P9QrLy4=UsEAAePbL*Pt1TS8~UHp_W` zqS1fcx6InV5(~oPUwIu8O}D|_;CTj892C&@;mc0~2BeA!j`dl}&j?RczoA~Pz5Udl zBS^q`1r3u;s=oMyx_5UqAALs;c+H8N9o2F0q#nXwa*O!ax%y983BUxzoq~Wr`WYDO zGjR97ko@x?#`)wRW&u2idA=4&eXLQ225Mjc5K6$vim6m2_Y+LHzF*6*a2 zPgugW|9J_?v>5)jUQ#!RBJaSel!a3+H90}wWEfkqT75B=kLBK*W_?yYpD~=f->b`w z)`Oz`Y;Cn73IHCKI8~N*znMVi!ZSa@&b!+rO?tZQeM_u#q88kj0d_Z{e0tlq=Gjvi zO}88z6B8Zn-Y={?_Zsc2?=!e=zgwVN&8~5~eX#w-ZUKdURA%(T<|#DuyxdI-?{})u zh0T0jPj(IJ_L*nphnjfQ?SsuPcJnF3qB2iaexVC1&xAbKLB4s4_cm`WVXSk+qNFhn zV9&K6sNgZMjlVJt%{iI;WTqVbsM6}Sz}og%zuix7Z{;s4-mu(=P`6JH;&YbGELUlY z6?vXjuA<$Uz&$jj3DtVW>drikQrRkG_;UWJ6$kJbmP9sq157dSk+Z4~~C4evC0 zECM%sv1?bYGhy50{TyoKZ1YhJl%hH-X-)8&#l{ZX?N#a9tLfnFB8&Q@+3F94>JJHE z;BCz9g8P5pE_ln?M_sF6tXT)4-KiCPZd$OL27|dCS=63jv*P}!0@JeFSJf!o_mSMj z!4ofix|7?p!hf;7G^9xhxYMlNSV{0rFWVP(VEyk@)O5xSjq^eNDgX##JEe(Z5 zH6|Um#>UJg4LB6Fj`c=)x=dZowo00LjT%wdEf6qpTpOw`^s7G;cmBw>{$uRoPKK9U zAETv=&fdsG?!n#U4#nGxLIap{8jq!$RrbU;I3DFF08AMcKh(`1j+wto<8ZeZ!P!^g8cx6~`W4xytay{E^&c$~2DGGK^e4Ki*xHjCoyF^w^I#;{N`VK0?{;%*3Kj z2jQ6OH~ZYXCs9+?Y}h}#S912&L~W5Zlb(p}QBj15?FR20P&E2&*Gc4(Z0W*QSGB8x zk#_s!SSWGpl%CPpg@evYM4Qi%^LnueckBVzq{Pd~3ZAtgbbE$4-;J*Pxq0phauc&Q zQ^Cb)M}gqrX|B6s!$&zn9mX>{%`txRbneu;(Q*#Z4`xPUy*#Ad>RqjS6NGycR_=+c z1JbNejD^TwByMmB9-@2dY-7?URo+#_cZr0bk(s)Bt8tW9ln>D8OqWF0@0~|U z+;f1yC_?-qJYkAga`ipCq51h&dyF$ z%k2!zx8n~wk_+HJS|Bj*GyS{XN7XBV^pRa#L0Pv^fgA2yA`_lL!YtG-tUh0L)n7GU z&--wWMCIGlE1L3W16d63TwqUo`L|%?U{j5=)A%&>aQql0UVycFZKz)}v{(FA4lZQf ze^o;F(rgr64iTiCp!6!F{hIU5*$RT;H)X{BIss*B{yJ~UY#MfHa!4W7n4JzjjScSX z5KRs~1cll26#J7)=n_Nt8U_h8q%kLE(kCZoy5}KxW}h}NV9v?ON;GZ&;izC ztd5DfV$LzDd^5iCLH=wwiy`*~`Lvg<*Z((&70yy?EXx%`h|x!!*quN>{Z3TiIIl3S zpvnA2ZZH>En4BU?> z!J@G;t0VvPipX^|2U&8pztSnzh#L$JoUHcO;J|_s{ucL%inabfmN$P2VSTixIYpgWBkMJLHdA6+6pAU;Bpja1q{o zc)$LU8JRbxBWpgA??>g)M*%Q(?AwOVO>@FjqoA5;8iv`K&%Kxy#W}Z=B9?8Ak=ilS zeg`OSP?b~%1tb>JxuBUH(~SM%U{7-qQFlD~gvUE1tmn=-%3G&|Q21d;NZ6-m^bSF< zPdNqUtqDWwhZF@b3ptJ z=n+GSuA@WN%ChEQZ~oVw{Oy$W{=o&OE?qvYC}ClBg=I~?)Mska&0j-8b~PhZgDbQ@ zDZ?q!`Td%x-ZGCld9*L`%sN`CJ3Z_rqEt}o$bY3=eIlVB zvQ{%atJ(C1h>W6S#oCwl^0ARUHyF*^m|W+# z@_)1nO-XbbO-GqHPU%gY8|c^GWD+kvMj$#Rl2)6>8FfA=?d=TZ_x8?+hF3QEF*S#F zgcUP%SjcF=aT??1y{_3P+l#ell7@_tf8N`O{V;-f!QP@lUMfWLMo3#eS=OX^VK zG_%(9{ews%@P2k9_L;nP{S@iwlrzZ&eU_9FGVsM@v|P^7dCBmj#YYf}4=ICbWu_Km zpYwS0hEvV(REic=*dwpkbMF;0Xi_i=4l=rAm*GYz*{$xE!>pb9k>7#7*r(=o74#HB zdA2SdArW$Q5rGPA3+-ahxW|kTkQ>o&;)(>5i~>9D>NmrLDm09ca#l#{ghTs&;Gkr` zW);S?29>D+GOYkVzh>zi(Sml0n6$|CZ=+LBucxW-PbLv7az%P`CA6hidL3={?9Xq^ zB+DQ-bZFoix)&);XyRtlXOay9>aik}He+xeK7WLyk zejq)(8v;#GazZu^2ZxL@<@JjS6gWQ(8L&38D9J#Q@LS52X~lQ%^r-ngTpY{V%R}&w zBYW%0Qwv1bsyL<(R5V6-hI2%p`8_NwH2Lv$@YRKJphWh zJl?gMdWY%anlfyWdbG$E3SeIcM7uZ>j6zcRo6#9Z@*&$Q8~0_LF@6LZ%0i2(DZ$jU+K;uB@1O#CP^$P7e`UM)!eaToR7y2;7NWF(-1=t zk6rsOi46mzAmOW9wEvvQQp#+H?p0eg0n{i2lIzWsiO~++8hMX?%5rP`eUyc=dRb^qruS#%AH@g6Y!Gx*C1cwLT>-zAKHfdfEsq#8Uj#K^_1*~*fo67$^q6=+ zB!GwZH-sCb!TL)gecz5A>)((x$DKM6F-Rx))PX8U{r&}z?!pAXQ~mnz(G;0Z#|Dyqag3*ffQFi};x@4+Ob1A0LotbpI{*;7~D;Du=ku&1wl@ zG#SfXABe{(79`^6k_zPMos};VB*HaKX^b(OxR=!!W(J|Z86p*UtJjWRn<9WjI%Vcj zksu+ibjp8L2@-OINY#g#2@)mXyHDi}&$<6>jg_~l<_`=5vhgHj^AXpa^p@MJs~4;j4@Ts#mn5YLklX&fUM9&69Y2bZ^) zIze1bmF>G48a@j(#C&+^;N%yl2cLUJ3hM<-RbsOoWF5SUJS$2jx?(boA*43cUD-6GD zOauxJ#D=#lMm@=u#4l=^rp(BXW$}~?ZzS9baG!LQe2?OvNg>v$8)s%KAGbguh|+H7 z-C4DcDE<~;43jN0Yvi~P{v_r~CFerr6h9)kwpilBj!B(yW9gOosu%7b(&Cl2!wzh& z=3MalEU=SOaYz>N}~v9M|p2xord8;`&XhjS1v@(&9IrZ z!d@l8^=lh8YkTv}_I#@O~u#n4&e#!==(ILZ+Ae$lZ!>y5pIog!{m zMy(K^VERS)!1wr@@hU!l339~SFW*jrHU|OtFObkUhQRzO!mRYX#QVT&!C=9M6#p;w zyhn9~(0y|rG!S%%uZeKTauyyEIlt;j0Er_2|H@}dx53_!5L{Mx%^7d@;O$|pe>kAf=Ns9NqYXL zs_Q=`YYftrCUUrr0MLOjV4U*+r@`Y!c5ccpm-av1^X}lJI-LYcJPL~}0OL5B-=spa zr^lDE>JF=5SoFG^Z97-BW%>>HKpm!bKaK1ZIZnzqgNYw3=PxRrzo>9~5*i(NTj2qR z?FR$^AF=KzOTUO5_?~!kLdD13!cGYnlOr%!{|JQGmN{Xv#|yr2GAT-+iNxMlMhLE5 zNwW|y+%054*rg>W1kX&g&mrk*#Vz5f?lm9v`@G61y|;0*#?_@expiiT$y%YsoqdC9 zUYRs{G4yR4yH&sZ(WqkQLC72Hf;u5kW)>*{x%}_;EkKjsv6KMQ!hg|n87p|Q87pkKVsqLH zg8O$1%tcDHLQ5zM2c=e7#B*yVEP0q(qSa-&XR;ZXPUX)$w$<5b+PHerEvocEZ$LuQfg?p8PteeTRoXIHev z12-6VX<+9nA8zFSM;`fAL?C%NKnNx&9%^Be+WP zs`fsYCdMA@T&y*uC1XEb#hYJ|tFMf-qZ5x2)Ul4*UTX;8=}Btt^O8yVyfMooz`fXO zc!B`kqve-IA*!awVh=+HwF?H)cQv!w*DW+c^`@&s6aAjcFmp3=M!$dYZR*7+-93iv z9IAYMhSrPWhPm;EZLd?#xf+tMJ*K}Vn88ha9#62Voj_$lT*8~6@*C~-NC^VSQySU; zna>VMJlhH7m3?C}84j87E`k0+=d|>r;~E}Od0zQ@yjT5w&-QZB+`K4N|I&<%0QY=~ zk;Ez3GQmwlb`h)or6C!?)$^~6B)G0#_B~t6_4nXwLo!CPv@V!wwaEvJ=!@+O#Lu6} z6QU-4NGY(PJ+h%D#z9(dTD;e`Cs4J^07b)8ywKB0RVPy$r5Js{gi?PJ65~zZ08EJT zn5aP2mEQvVW7PjRx<6gVNyupX(ow_xx{+lBmr(5pg*y0aPZ5_NP8)hoN*d@LtvRG3 zDi3_bi;wELp2^|Ptk%U3Qe?Kwdr`(r@9LAXeUj5$>~rqufN$lK@4wg2V$5WdS1knVq|&l zo8li-4ll&hXNvnb$IM;Ud8?dm>Wkp!Cio63)?5A_zMPBDaYsX-Xdpu!8~H(YU0Si; zI(??3zZJF7!i0?5oUxQt{5I-~zjKqYhM%<(%`Cq$+)_X6`#Lw6HFs{am=-js8}{|h z#lBY7VT+yt_a3F`L-N%PSNDLo$#lZ z;WsYCcQAiMd8#E1Hnm3D<*G7vsCQz8m|V^#di7 zB%w|*`&iFK&?|k^M6s|l-Xu<_lixnpdXaa$!@MM>--_oqMFKbayyfUzUblX@vU+Yulvdj>KsNMYc z+G-~JnopBLrJwb+R0GNqqQ)$qCx>>Yr-{R#Euu3?UN5eUueKMCTh_F1QI%uoy0j&E z2eb>!Ou2|s*zP(~=f!V%pJy(zA&}aY^EAi!K z2&@+eXG=VNPaE3RyCG(9P$N0nZ;uj!ilg`d_*FmgW`l0YX#TDr@Fl8tXjf}rl1gL@ zv9BTp#g$oF5`0P_F^5GvXaDJswbJ5a21(mXpWZR@Hb2pDRssUVSNOsxb{7M?b$@)> zetnB#UHUe(s1Sb#ZTHcNc{f`{()=|pgT)WY?D|NxmWtLSQ!&V4(1?t_U1Q{G$rHzS zUwL?^_nX#dPzJzSH()3T6qaDKc-LxgC6Tju97;rtXw#KM`DZgcwG05o&z(d%GFWT@ zBeHZQ?=Pzp=0{59z4yz>Tft~)7P8dIRCLhs1ZoS?8lQFLCDM={}__YY?^zaQsfV z`i)`8TkbCuyays%ya!R#mw6X1iI4B-nW$Vm*V&e%^oIAqM2x_!P2!{0g5zBRmu*jj zvZZbSHbC!_Hx%K0Po-&5f$}o%bDEw3Zwb%`^T9rU_I3*?)ARh~!;+;0ukeM)H{Rdi zD2b0k1SF_ndxqR7ZwVf7B73$B7IkHntj}Rwyk_cANR6-UCX)xR!gi9ErP<`zL=vZB z`I-fC^vbi8gjq2D!)2fJ}a)Tfy>jB}?+;0fx7-uk!aHs#`B%ov%qq)F3xE zR=@Bf{y9;Gi{4>MGTgN5&Xd??sp*(R>PgL!xSH$MW$;w9PAZ%X7wBQi3d*WDxy-yuAfnTwAg)9Gn2bU4s+cf?JS4&=3;b zJ-ADd4(<@#AvgqgcMGn;-5Ph7?yupTGiPS*cjnH0Z|?h1tgfnmt+i`a)!utGbg$hT z?&yky2rgt|Y9%ZtAkOK&*~c^~08zBkSO{uJqXp%NZfZ5}*~O38v}E1L1e46(IyZXq zkYgbVOme#kqiJW<`m?=`(^){)l?}u8E7z6v003-VLu0S*G%Cq1^G3Jn^<`hLQh97= zvE12yT4n%g7SYM~;fMY>id|xKQccY%PgL2!s-wt(X=>9_@gVwT)4jk1&bA= zOMxLv8j1M7qr{;ZR~Sw^12!KaNPx+vbQ>LKtPtm47=SxRivz4+8x*(SX3RfZ ze7nu{ruKQm&}i5jZq!8{hiTF2uU60v&$p9CtG}CzP5YO?r1~)XLw>xN{g{22eGd7y zYebv{9j3)^;zGPQ+br|J*rc;Ugh3gPl@Pf9^PTUN@J0uZI_)#*c{&zasAAf6a;|RYNVi zsCZ0)?U+_an(XIwNYuWVa1UBL?{Bmy+3(*mc`nQBd6Big-#!9OfN)wKz;!f7q6Ikf z@r8t9pTr)jBVYG6^vb6+m>eY@mPen;uNNpS)`PMYh);f%6d(-W_0`ufskp-YXv%FB zVrMn4Jf6@jXgO1AX@SyN-jZo`=zcK}>!>(82QoFh@S@B+a(@6Uew?1JnVX(!ak%Z* zh%0n^_Upyv2$34EK^8Bl!mMF>x_W%NdUO1R%1n{w7_F$pRX}jfWLuPEBK17(h&GRA z{YhT>F`msb;Q9=lYXkD~Z|sFE5SEzAjWpJJI8;jJjSGEhZq<{dhuCE<(}^sv&({?P z7-!jKY6hd2Dh(m5H?@XwAMPJ2)e56Hi}wE!q}vy#Rskndqx(3@(`d@76*zGgiH`$A zSjd2W)EZ@fI~K(Hz^E_6e|V;s4RAF}MDuV19vMGNCtKw&-*Bah0!EsqNm96y25mhF zQfZQz5CMWD0V5&8pU7`!&rby~Uw_8>gOpx>{%>gLOv;fpa#xq)SG)KRpP-KjSOusw zA4p`g`4avDh+iYqJ{kc7Zb0d00L~Eug*4#UNvgdD?WvV`8zIpZGw(e#&gEPCPWwfH_bM&+ zR%pHw0DfY~@|3ssY`8wPa-*i~k;X=~Y6lqW9q`rzFg;zTrrmob1OYr6YSkx zvQ`%DVF=LNptbGoqQyRpm{%vJZ-N5A#x(DlN?R@Am&3WPNL`CH zdyDN)4xG>sNtr~BZv#wD51g!DT-dz`0B+14q|GY54VhJ%0(fkVwC2aPk~mG-pR{V4eYiO+ z*#_hHp|N6%EMVpJ_sS_N zP*^MC2pH@<2ENj36tbvAoWC$=Ed1Vx)X+W3?J9x}=b%06Nma;4z>uqfI>=b8XuuZruWOyvB+hvZj^S z0MoyzB#77O*^INTH+t%{{@D2@5qaSESwmjgAEOX=@)!+BRMsB@LGT!me}*joAw19# zcjG{vxibR*hy@o2hAMJpkv@{#@u7R*dVB~kzBHNG4zV=g>o^vjV9>Y{onY8_dd4}U z^hn0JfV7V24g=i-leCWHPBNVb5#$NH4p2G7@fz)qjuxLCX_Tt!;Wo)`VN*7OODPeXRE693*Q`M!)%e3^D$j-%n7@@41~PjsRcW^j$&j!}o{{gtS6z9Umhv*i)$1Uj&-t0gc$(@(dt%2jVF*f8Xwtr8n%C>(=xFedX?T_Aq z7c99|TUecL`DMdb~ zrJDUFWV_}iZKX;lIsae@m!U4^kF7d9H&{LdpC0J>SE$`A7yQj2nDgjkWzL78IO*3K z^uH_${w)F0=eg()Sn^Na-{{}`jCpA&jm}Pun26~s`&={^mR!mE+pE7*=ei#CO*ExO zwDF(%q#s<*R8wNOx*4jj`2Ux3^1T!+}I0I9HBt2hR&Kph13*B z8yK#6ZJVk6G{S^Bky-N(k_xhm^;aLAm!ZO$af!D{7o4ZZIL4}$N9so_=pE%J!}?_} znZXy{II?3p_4l5qi?RboM-khf!9LCjKT3fH_&cTHNtCo8zy%rd1rg1`$k0+R&h8TK zZj10_bBR^~t8wlJICkve>A#p0tUXcg{pW_%|$ zO!b0yf^$Q5{2PbdlMoFNCcbgJ;~(Zc;EAqUmmLr1kmDbwI^dc3O~@uO*$pxNXYw)L z{R>KRO8G3A^smX|?79z+`TCOV=49D%^?r~3K$YV+k`r5s&Li(_$+CkiC;0#}&f|*p z{Uv##gcSq)^t2?gg(rN6`6&(`<@xCINMfVI`(M#JjkCGRX(KqxYJX$-`#M7=nZWbt z-GJ}N1fL6K4z27ReOeb=VOzl5{k=qifdhryC-rl3-l;M6jJSaB3QD)_`}Al z6FmS3cyl(AeekkWIP^l&^~MV1PTSHPAD>r#U)Xg24A6qN+>#y-AQ@;?Q^Rk^3z@+S zSqYIi?xwib$8awX^eC5de#%QS71lAN|bp53zISuJuq&=<|tEu z6`TV@h6das{Wkn}jTehA9ehTMy$%Vtr$lRU8yrVpyx~S!WOdlfAo8-phP*-L5~;;# zkQ=r1w&HLw7!4DHyg{uVef>T8@eL}C1Jm~0Xm!S(2=IGIMo5OtcbV!Xi5@fnE)(4_ z!2f{V!kMII-us{=;PA_KjcDzQhJ#T{uujYH>zF-6V8(#!*rvcA3bFXJ(aomqM+>w+VTgkC$sPh{{%Ie;43vmJ zD}EZ|$pWH)43}N}W!r|7FC_pKn9=F_53IIh-8A^PquLe}Uwc+6+44M@cFc{i*<|bv z_sdAe720;H_>tST2U#;&<`u;kVbP=B?Ph=NB^#Gtk50AFrdy9dynXVoeunfIF^DwI zCVuI}Uv{)$vL-kMPhwas@+|YGtKx3KO zrm`S54;tLCnAh3+6@h7E?Rbwypf6D=v) z4Yt%`f}{lnbR>aU}LYXp37W2jEdrKHP6FS{q)dV2pg(6Z2V(69N&*1sx^V1?*tk%z3R(0C7CzW7v^CA3Lodil zHIpRHG=O^U57yakwle^&_eKZf2<#j-BphcEKs~S5=cHOe@&_v{iN>~%-ii9y2zJ?^ zu`P(9Ts^VYOkVoqMr9Khve}$9ogpbWwq3Q=^@Vyxv?=uv!Y3 zW34V-TXAH>kMcJ8U>BMt=Ct3V+t6J%-)B06a^T2cliY>?jhAsozK}i|ir+5Nvq@YOUGc z6>f(u(S=rF^YV(bU7cR3^7h7%9{oUP+ghp< z(zjA%as*mY82PDZvB0*?65d|l5i4dQXO2x0D}d`5 z_s1La-UkOQ;bb;0eX?rv7nLIdhi5|uLRWFu3wyWj(jH6c9@;{O_WgznY|T7F$NskI zZd&Q3O((g_pktESCC|DC(Ys=UWsZSSIjS`@#Pc1*j=K;2c#-a{BS$<2!OqUUxl_lbLV9Wb5bEG5oGT1&xNQ9;32 zVFdq*b5s5Bx-vpiAv!C0a$>$$FsCHX88l21AirnSd}`Uu#**%*WND(MIXI})^hKu} zddX8!e$zRm)?B%0Uud_|RXYB@8Et6A#3_ZprD|>&2nJR}n}qYI^@uek%aaYum#Xic-)@{Q_f}iQf^bfXlc!76wPW_C8P)cuoJ)Zx zO}g13wm16Yt-NX$44d$=(bcZZeV`NY7zTl|Yu!;G-M!=-wMWUduNf%4O68D#gURjV zFR+N6?!@^?UDmvZ0O+kd`)i>WXn9KybM7g z*rd7@ti~>0W*FEXMNTi{pU+5;S@G9`U2uPmMXcp4{d~oz8lyss0p;1a;tD1WBaNEB z05-7@>~FeQtz6+D=Zz1(6U^c%O7H-PK2`zcG|uF^Mw(Z&LB%G)_HVqUD}2Ky!OW9j z8a+a;k!JcW0KuVde*fyn!$MkV`bD}eNTv5iShea-xEy~oI*(~IXl)VM=f!7yIj#Y{ zMd%l&xTfD~MPMMD19DXl{_H+S%yg6`_mEP3WPfeHG`j3tKgxE)^3rP&H(h7){mTw3 zmVIXLMdJP2vb|2LXN~0hZ_9|(g*wcbaqI_mUVd<`5ro{eMW${b5zhQ!r)vkVp zirWP8A4LTzu-|L^|J2>?CH3>%(RuGBu5;tDdA}vnbMyh!^8J6=EaKo27s+ zRKXguZ-XDtF4r6PW=Pzg%D%g%G7Y`PZHMXk|BZv)q<^fG{%+BvTA}f`v+^&`hN|09 zofZrrKr98UVFYpuTqV`7>;By}u3}nDtj~gd2^RE_#Zv?-O_rc{AAI*OCYtql(g>nR zrp+I<>08bsK3e9%#oarMgCe@KE!UOsNCR9~LQ7som0yjL;o>})+S!H2JkORH;0KHq z>~U=gnu;86+*91x$TTK44R)hr0M=+DRChN8RK~su$%puF$^;AOBmnO z|AkNlG4tK%$Bbf-kt%@*?B#`zWcx^5{~gsxr~A~8n{etdqFlh};5W>ul$)w*UQQQ` zn`;^`}mTE zo42;{10@62{y*XUf2wl>JO<@zyX2-F&(ePl8O#nDty?v?g-Ax+_oJ=dTif{|twawT z3Ek?Ry9s&B=6g;`_C7diwI-h<^jh&Zop);2Tz77r6kc!7d^(TQlqj{w8Q%NU^sQ9? z=K2$rDVM!z%4UpPZ|b3AYRl<4qsjY82HGzM+90+RGkzjIRl^r$KjFJ6b}gCmP8EV6 zixXL=bn)5yCH?M=VEpmIU}>Io{Yd*M#-N=STCLWa!LIqNgVFaoY=_|5_-o!Jdhm>Xp5&lGeGke>v zWO+kgy%{hWNA^L(Qwkzn2{10~WJ+ zoynTkd`p1hJSel~LBjGbWbP90F94)8)GhBk^z>=U)USSuC^eBnrIOu73OU|+ik{jL z=dOZwcCu;Hlparf1@J-&V(IoMkXWAbZrl+6^D2Jl<~|j&_{e(kIl-#C_3kLz7L>Ps zKS1iLK6v3O*gvxO`>^A{3qBuy{&c+;>6KT_=4k_Ank|lz+vfs!;eH2QPH{?&g;EEk zJ0tG^Rj;eV&RHV4mOnFE1hhM;&Y&XC>y?q<)^zIfLo|K|tbb}cobdnDKz4tx>HG&x z843JjS4gABUt|#wdrAoF9Dh6BV)&S>pD&8d?J$`7X-Oq#`$- z>DD4UHR?JG?K^cILeFSDYZNSNM0ax2tHpD|Yqvsm@|d~Mvaq4EZJ@9HXV(e2)NIs8g`VTgcbm{RkMmtE3KvDv! zg$^fux33tOf{e4w&Fe1`zbO@1s>wG|gLM~6yKj~cgHJEcSHCH$4JC zT=;z|e^JDLxcTIGozY`?>;4BD-Xg{Tzs<7vkqLfzMj)7U-i>h>jB<_k6zcMWB3j=A z?OTkXzeVf6#_x|4^eLiNv;Vn#Kb9NhBw!f0>AMrYv`Ycc@_^$99#|}BYd#A`;=kK_ zXUv~G;pHT_Qgy-`6oo3K$1U)UE}cvLJCaneIip+WfUkt(EC-O!;S(xpHxS!vMgo~RfPw1 z-^|j$_f!fCEFtvY{S>NkgdN!3-QEQo;fB>ai|X6Dn8*Hd9i zq?Rv_nx;wu1kj$7@fxaChZ+6iiu*LLs%&ZSF9jUY*EA0QK+1@}63YIPR97e3HLpJo z;UT}F)g`Z+QOTggju(tYN*Bcq_C}J(h%unRhQoPe+kG>?iz>2a(B;3!hFsXi>4M>1 zT|@#JhdixM&Yi7gE&#xu8}N65{fPm4W43-;l~q%)=*%~NH9Dlf5k0n_GToP#7md0m zCdf`Smt@VYJW8Kza$Z~|*tBwh$rLVYPbyIe_BV*G&vV{WuJauTK7^OMHE7x?#4ozt zo_$dOOFGR)G%{)e`y@1hKWrlgN_wq(9N$VbM}0A{BK20WG*OZ))Ipdkdspr1c$L1P z>7cowg@v~^JeM$ZB!`0%q9$g`X@1tUc@3^~dMLNm>~%eodXW>&I8Y%j6GvTKq?0X| zN;Q`o(P;iDMqIk;MvO+GTuV(c&ROPkZJor!Ii^e6N%;qKUf623*E*6Dp{Ak+(}z5| zZ*7**oN!5#B_y0uUZQeml0;QOU_|J~cTjlG-#4CZHK*1(YtA+_62IKNbaGyDw_Zwi zwQiYhWN3-p?qTLP{do_zvJ!&rQtuaZz)x~Rci}TTX{v)A*^&}S7IRs99t2G4sC0jo zHUvGg%(zM@RO#7QHcLDOs0cSlYzb+O_qUWbHV!g(nb^h&`gEUO=g%D$!$(z;pE0Ff8yFJDrb2eN>}&&C{?rN9IJL!;5tfIT zzhm@F=^96A%pq`+;nN+bmkSpc4>bslp;zSHVk_AGjXf7q66{kVpE3fm`6D_1_bls0(wSTpSo`5V;whPs3|1+EYr4JY5MK5}1=_W>eqJFT z>tPmPKD>TSu3Jv5XohEQ$AyT{u;v!)&{K$i}jXQ z*WB}~cJ5H=m}uQN+xWG7jq*i!uPjaTytcX-LmIMeeUuFm^>e_>DBto@_|0W-akQ@% zM)9})6l#=@Tc=0Ew~TrwJTi2Sr-t+9u9eQ8EH1NI0Dj6375DRTo69xK;2NWw+Twv$ zOEr+?z^S!HJYXIIO+g^We}JlPe+rj)q8+sAi~t0vA@-1-j;?XV1C zS2AI%klRh;(q*1gIYrQ7DVN)WUF9@cmVMRiUVL)1XZ`Hn^zScf9iH{|o#x_1!;Rdf zVs{}rjBamdbQVS_t>4pUZ|X&~0MeUUpDt*Sj*%e`MBN#4`xk{n+O5C8EbLz(BsT-Q z?`-1A7=B{Xkd}ZOvPbq(G~#c`i0-&9jlhxstq;;bL>~f=GUKH21)>`C&Rg%5n2aZ#^oW8~{|3?XQuolIZMe5!^-_yI&y_@NWN-V6w&c_qUq#yV*hNz~1ac58rThn|A#FPH zq6u~Sj4x@+hI44uG^ulpGa&0Ts^kQ5crGuooIMW&*nrmiRoHqhFbsBEf4gt#a|(8m zo*)g+6(p8(<4L--;XGJqo1;S=^PJzQ za;S^5t5ZH6;ERJ|2-7m%Egaa02oaV zE#0PzsD3yqt1X&I%F?#Y-54I(VmDS|@gc>}Hk!TEx@NZO^5~2($O3!~Cc%~iRcvzU zLv7*fhno))W*w=l>uJ`Kv25X)1jE_4d`!8Lj!jXqDjPab5i?D@WT|CjEn)4#5Yxc+ z2b>jJ>Y?!W;BGZxI?auWl2cBVkfjQd80gHPDxYc+%T>4yO(WD6DiIgHK zW%ZB9=|0k}=U!41z8fY3As(b7O#x&+&M0!*5?bm8wQV9z*mYG=AWbxSI!fSA(1x#` z&JbVFTTK<$4RO|I4Kp(#Yi6((iJ$}_qFDCcn^A=_d+nPtE@3=|Nkkx+aA^Z%W%xDYBEQ?iK0nL<_p!gILvuu_9G8WTZ>feImRW>{2%CqHlt-q~4cbr6s5a zw;iS>DJQ3{wJSJy{c`7qVOneNz#j@vl^GBVF*=4Y(BqiS3b_Nw-9KmZL=V)tDmf%* zyow{#X7(emdf*=p$K6~kdbtpaen`ro`Q~okRx!(0x-`i9+_trW24&~RA$RS!*ODQ# z3l76#61gGNXX3LQBU|*9TVp{dSiM7H5fTOHm&TSX*YO&-b#L|5eG;sKI*wI5FXCAJ zTZx&!AM@7k5UBH4*f>=&LO$EHirZDj1r1YlQfS_Z-@+EOC7EZ9I$p}fMH&%CQv1Mo z!BExebBTvqUd%jKyU?cY_nAq*;Wd)daOo0Z&-tQQz4Qb>vRQ?3!&gAPkykA}N-c%I zqar?Nsk8*y;2N~Lw$P-}A8Sj+`C7)DmCyBAxws?Ysr)O z@>3NUstVkhiKAIxwa{jXG+`O|SqwIJv+;h{pEdWY>$pe4Vk)Jm4oAI{Ys%?hrokzL zT8${?mgxOMnBp#=ztjq)fQ&o*OE+)n2X#&k(|hU95HA7DL0DtpDui;ACuzj8@=uLMQ5?0 zjJiEr8(vuiJHpJ?Ymx^%(5%~Zmd?dKzm8Xrt$p`q#uxoC(EIq#^CFzpmx&W>!yTWj z^OJkRY!Oxk>y{6i_R5nv;8GZ$J3oq+9$Z`H#gCoKk3O+QCkx(G;SOMPOwHdot?$?O zkt*?dp8FtE+&^FR(&8QO4We!mYsCqLjt@9yf7%|5N* z`spF-&k*{phIl%f=w+HJv`aJ_{JRrFuS(_`{ zf={l_^oY(Bz6Xlvo|`JQ0px~aDHGp-%7j*p%)eAk<$pTmTscj;N%}4o(%kQcmo33X zGFiLiP->^PUPre|+>wQcu*^+fa)%zDyNp~VW0M8WXP_U5i1TNmKh*0i61;T?*ZLIw zx$VpJWKlw@^jT{DO$p+Vwb@l+V@HzC2ZD;++LY?#R`O+Q#RXx2^KT3N@M8uOx~*!TScgUNy`i(A8Ck!uC;OP+jUpCNl>-LTrL>O-;neQ(z#Vn7+l z_hu5axdS>^tK2-RQCMvd$55l4YV0Tp@ zu3H>Ui$J50Xe9)UQ%Iz>_bYNfJhv!$&zsuI)c?v%p+-?V;fr0n*inJ?_e!k`ku)M( zaga4#8DMr_o~mj%vROZkn3RYpMZ`9Mwue?x=tU4K&ly!v8;M2SSKm()`ZN<*FrAVS zISMTGt?dJH`>(AAhSD#Gha^LIgxPswT3E@m1&q>&g(FE*^2fAw)CvLFW#wMyK|x*^ zXNED8f%1wE{h~(8+6os~(VYg8LnX3ot*k09?=tmv8JVfK(YjZrCC!@l&^9({X%L3a zASUo+&BvoF2ES-&MzS6v;4cBvVb#%M>sVW^UaK9~T^O8~8NJM~H&>7-YMC96)$P&v z1w@30Dfmh(=hHF0L+ThntEH#SK~Ts$H%{iGpH%y>Dy8n$bIU2S#j!bWj~w)tI#bGX(g%vqEPe~?UeN- zXSgpmN5ZDzn~=4&8eUYod{5laTZF4|_-@4)jU9%Tv z$6~g!97vOb%9!dF^&CrK#sNy9c@@J4zi)<@9Vez^q!HSHu6$pFp2m1di2Pb2t3FY* ze8VVu3w?<*z}i;RH0muZ@dZrGjFHiZ%%C#;+0;_A+L3G&DZG?^{Lv6Dhuc_^y_MdP zM<3*2l77t#TyrK7urv(@HSF=dZ^-#1x+TY6=?VKaucdazIw|}Hbf6YlksAa^uK)nDca63c1|Hf9izy4S$NT@wKdvxov$`)jikb$Wv-G_+gr5Y z13o<1de&EJ+wgKH32jB|dbw=|qlt%?IwEi5q`5CtU>Gq%F>gk)hB+(!^z3Sq_`#Ty zP?<72Ap6o+eLJI^A&a$IibFP(mpCX9J=`u6nJKIU-mQLP2&h$sq=uI2qp~ZXwEQ3q z6(1Xf0CQ)MyxKl(Fn%B^fLiQ}n}Sjsu2uW~?L4MT2vbl(obyRm*>L-(=VrGSCHvIR z*Fpn&oX-STZQtF>pWNeQ6%F6S!5jrCvA(f?gGM0{`3^`9#ILv09>o=~<6Bd2(m(B? zZE3QNsI!f*aj>snw(V2`sCMBfb*cNmPrG9G9vmK5jc>85af!Q+nUs4jx(QsMZL)*r zezqiw{OemI#XC1ChJt)vQqDvd&>r{;`~mp=LZBAbWqd=(7&W%xFZuYf z8Xk-OkQpfZEdmE+cB${`h6-mzjdYo*Hf1+(Ne_f7f|>ANQv7_+^Tq&K(AjIEvxFhB zFwvl8w+c=9f%nC-OWI*R>6gZ(2m`o|>ojKdB>egSl= zkp@0>zDNL5RD~o1+P81_iMj{)n5}`(dzZTFb5@4;EOuVi?++K9$+}7G^ zxp#{ZyQhN&rnA*#=SA;uBuh-lXc~JCa^|L`yt;ixd_fR-oygzd&6GOT4v&e(jaG(za5H_98gy` z2Zs0&oQ&-Aak@LWFfKABrJhQ^)BZkLLV+3);ZbB>WCCtUd+=E7Bl2fi9Uro@SvjD~ zZhX`GlKgO$-Ds0)I}YXz=Em5f$KBnRyTe(gM)O+!*x4|j50{mo?D?(g&NLVrk12zG zezy(1R83p+Baf>Lx}G-ynD2_KGRU$0O=gpuu7g;fgPa+!L3zeswZl$Xh=g2n8KiknO}gs?sgwaYc;03_@-4Na`# zm{wYZu!~cb;NU$WQvWJKtGm(sUC&Ict4p)GMzGPlBITJ5o>Q|cv#YhmX8ofQLkuEA zqEN4d_jKg2QtYzH{$CJ_CwN2%*rUhMb0>N%JJF4ka{YuvzmmW3fc64`0mJpBi?P)V zY87K<0;Hd>mh6WG!2r+|c(F={YK>9)h9ir2IPS81m{9E#+WAqy!7Yl_%t8-y-}C-} zUSQJ$=8?~5E46ni?{)mK;#zH2_@kQkc}~5qn9jmzywTFgLeCvOH6p72%;E9oe!f8# z8a{dydcHP28%ZLOzE9D}tL;anVCJ7bKkAvbkw70MZq)n5e!#6+1Pt{Z{Hab6C&H5U zhG`-I*wl`BglcAW0{I43|NC15ezc|MCLpr{N8!90K8x^qF_P)xe#YV%F#?KZH?Gp*{jtB|1 z$&S5E0~XUqF-7^K)?X$I@qQsS801_jA*{pHy~uR+fx=Js@XW{_`+@RPxCMNz_Z?g< z0(R>Imj+(gebHMGR)=aF+Vv!o`L)RE;WF$H<5HYNNr%F-$N@r7XrHn?!nqhPtWQgq1IU|0C-bG%6l^m0>+H zD#<#>CEGR<$Ex8e>Ycwtn}u^U4s4Av>R^d23LA$N`WyDQ2|99jEU>qdZD7jpNKUQo z244w#?#9hX#Y_#I6N3m?fo-6UL9X!EJe5&5$+{IYV|-NfzJX?i_kRC5{kr8r9NSoM$o?mja9=?_9Uuf|Fo9|2&?=~S)zq-=M_1;#1`p&vI#;gI zw&~-*s3Z@NyY#zYY+>L}OrwB7L8%^?Od5={E2_1hL?UNea%O6w(B<1oZX!^MQmbaG zX{NGMufBvAG1)8M!L0}tB%a*I+%Unl)D>+Mj`|K3i3(P}S>N)Bou16KB>Tig#fHEA zY6+L+wWjNQ?4@%0ujuuI_k8aCW=4+Yg(l4dlFz(h!|3QxN_{we#;otJLZ+WRWZ8hO z$RBnF*xZYK9Mcf86sto|MVzxo?zc4$0zII#&*cG7f z9vyUxsB~W#kLU5sMn*)QvwAz*U2UV51=_3Y)8g}T(Ud1F+7=8l$8LV33x8{$U$jDp zPlwN0hZw&XETW5!G4v^|!mAYNvy8eaqmb8?*BV9T6qDkQZ?MPcpNM3rty%hna7MR7 zBwIs|0QDsfU>0^LlRPf{ye;;9hxSha%w1oXrgH(l_Z-K&o=r17!WWp=Uo%#SlMai& zk`g^P_;Mh0UD}C<2&;MP*L$go6oqJBmO`nDaa}UbSoX}LH0fiv<{JxX`EHsvtC1hU z$BP!rS;p`3iWTb0Q%QbRu)U|V_~7#~z@l8KXd9ETkBxie>PL3{Om&3^Pq$Etd6BNI zczB`=V-FqBkq@fICDBq)rR8=IP6TXe11bOq91ta`v@N=4r3%5Mg?_lb_~<)$4K1LN zCm__#5eU|r-?Qzm`bl7i&`s>Tb}GFXoF3m&`f%E2HqCh*X)>i2pw`<5FSMO>*7wat z$-`cTKXqJ(!Csoh{Z0xQ@xf{*-6|ll7R<@=Zq^{Z?Kb^@29(!)(E_r_2#q-;WgVu> zIQ%da&%tz{Um31sKx@xwoS#6#c`WdJo`EZv1a}4Tm__v(H+4;5GqJ46s|9)w&3$($ z?zto_3>W`!)(&?e@8VG>%)ZIz%=_#^1yh18y58}QHlK;ih^73VvnKgBi$1&-VVT>P zd+mU6`xQRD`g%6f5FZsBSPWgA6eGo8>a_~YrdNZbiIgys3NpucYx`{aCHy-rO+qDk zY5~@S!qa0=r{jdLJ884-F~n$@qE!RYX7paj2qWRkC75mg2)lHzv@iKM*v1}=Ra$Be zbBl(28zL!U9abcpj!FL&3#PyR8&QZ}7}TLzdCx(NQR<@Jj+#$oXUl{81dPk;7Z$CA z1oX+K3Yyh{`Fz&G6yBvqZ+4 zm;1#NxE)2;<%%tn;+pl$socdv-+|Q5chN`hz3I#)LZifIsUOAC?H_HRKdZlG5F)pm zF`kIGuPm!pzLb@a!I5M%{;9@zR-WqA@&WUM(!J=9xIRNx`1}vAum_XJvHSzaOnDn& zI|*hzM>CA>dwpE9CZ}OTfa0|i$wy74uoE}?DHQQ**tF?oJF5k#+7tIA-@&Ng!L^Z~ z!@Q!U*^3EuPz-$bV7HP|tVSb8xFNSYfDLjN36@^_&OF3Kk}bB$&iBz3JWRDc%5af| z@Fw8!_GBIt;L|jk$RN7d9$4`?pG6$bBNjY^qJ`f#AFx$i;q%K!p9WtwG?qD&$XBJR zLJUeDdq_Z*PoqGM@ALj7)h}W;@7Nqa7?&$RbHow2@l6U~aPmWS+#7iIk?}dq(RVzD zYLS%TKKXhjaqY}-megnUE56_Af41fh{O{Sz7N#P=OTY_K0&&xOZx(E7@Khj^@=2 z$7k;d@eB-SYgpIz?@)blu%|&UxwV)Z14)!<4C;&OI$4qMuV3W8SPYOy;y`|tk*D+LIX5G^3n z^Z7yI@&gpLvU049eJ7X^Sz<%SF7Q4Bk2;lF-10`W1`8_##83m9@}Je4}B+5`Ewg*nTiZCAbs23}&?$Nv5()yhbt5N6jb{ zXT0KdDVoe;cU=rBQ)up3ZNDNHVl&O2TB6-} zSj*Cr<5`juJ)ONI3nUBP&*jUmn)~n8lIA4+T;l-VL*EHIK|QcY-i|mOM|F^2te)_u zO9lDVzOL1j?^xYu?`U_vX-^j6(WKP+3e|gp#Uh2${u3M3(r58u9y{&c2hMUyQ}2h| zZ8kb;&Rb}B8JZ!1Vh-LP_^-xHRvQKye2GbVK0D+L5(^0x@h|@1886o7 zMiE1};$Rs@eeHPcrR9EkO-+;~0-j-aUz}vzZCz=lPJfK5MEK)icL;5W8HKtUV z%V)0fL3Ol3uy>}hlLyo|OOZ{`=Na8pJ%Ry$gRK31Do9Y+MPc9l&0m- z{*_<0!1WNLZ9_*?M-SY;?`zLqx$4(il@pvvYuopnWWt^X_IwQGOzglxH&DrjhHQKK zD_DuzfxsMlTmCFRQK&fq*=Nt}%b*E^$tDp6g^UfeSm-kvQRtFD0L_<-ST;GibuYQR zlbauGZ!AsBH3v5;#1@HNT0y73M8I|5g>9(=C>gcElz7t~Djn*z_Q#xK9;iG>5}T#C+J9ksh`>BR~1Qdyozi&xf8c2uyGfjz>vspJg&n1FBP{)bvOlMT4l3=Sc z2c9VNhZDJ`n$c9GYe2}j{gQmp`V?1f5p_Sv|NDMM9&;W3Hso1aWQALMS~1#pr(Sqp z#}#+*KinQ8tE@LWNlPMRQNDcH8Tsa0;;%_(8N5}*ZCm^V>+=3R3BFbmMygQbz|vXTSU3`(%f7Y779U~D?GnVA6BJ?=x%yxTn~RP zuioi!z5!1V6lVL&v4dx*SbCa|o;_G|o}|kg6h#qo_1zmpyRTR1c&)`bBmaG0n%gDm z?|?af@c##wKxn^K)e08^tE7faGXK~le|6$WAJ9Kz*8iQxSS2-VlKICb8F=dVzXkNq z3i>Y&R*4f0r2gwt4Gm<0&_Ir?eGT)!x>^5K0v@A=2J+EG135N5jqiUO7xZ_cgH-dN z4k(T~e9e6giepw#9CI5>;9fLH-nyOAtZ^^C_a_&}f&Mo+?Z1-~;iHCwQSn#~^ohFX zr85+LBLB)en}Pm0lm3f}MsYfzPdG3jmcizHq%j~K-EsRJK!3xm|AXzSVL+TB3NDy$P1(YEP?Ej^Je_NhQzQ)NDPaEyzqZFb|d~rLC}8*BQY>Q1Oz~6kh<%R zNlO9%;pSKR5dUdH(Ep4FL~!B|)MF`U4TqpS4#E5X_VFJ8{U-(ePZwN*8V$J6P5whKme8s2*9K7{Vxz(p0eKmV%y~!2*5`k1YqAEWDKDH%~t-G z7wXqQ0G0#@z!T@K!us#eS^eK7p7OK>0dTb9H+)Mvqg(M8rS<-&kL~*c?Al&I|5_{l zqP5~LO6&b|kL-IA=)cdz|F5;;^PdH8#kV`LX5V{*l&UXCr>^fk(!J>=p#Lp`{!6tF zeyR4oKO5cf$3XvEt@pnz%|7_q4(4b&uX|cL)0@u!V<6oD^q&^=Uz8^F#cDctwthFE zoLxe#-_%*S{nqxof&Tl=`mb8+_fl#7CJu~m*?m3G|9~m~Ypvf)rS+Q#cy!ke^#2bE z`qx^&PtVqGN5gg94r#s`u5W#JI1BW@&0YVs)Els^w&#YAbldYUpL_6Lp#SZr{9oiY z=t~>wmo?N&8|oV1f6;hc&l`^~EAuwV`10kAjqCxWM%L>5b82-yYkfl#wmM(YbZJA= zvW6yVZEoVN&E-bh*HYKmj5*^bYJP_Qo22GO{Qqp;{@hf${rQ3)I+D-lo(ak4FBw}N z1^OQ{>wjvX_)9AJ{8aJ{#Q(WN(0@^r(JN}n=Y>u_tCy@m{O`kN{nw%+($|vD3z>Z0 z9eMgip#Pn={+~rgq^~8P7c%+$XKy|6=Rp6vtoJ`GHX{8QnS55x)a3KEKdD~<3%}d6 z{}wYDT}wVMc=CDmAHIAK(Esxe|9`QP(Y55W*xv<9KHqWCBRxR>BUb#-6K7aQ5qwfO!?-%s1I2pZR9+T1Hrd@1=~vy|Og0 z^@VR=RyyVT$?xBVU`JO zSaOWV?a(&lV#^yJZ|_*sp=<+ruY?QOWFO0-UFD2mum|y6I~44S1fxBnU~liRJBD#n zA(lXNE=oCpW5@1kRlE#`djS7vf#DLqPv83i{75ZBfu~w)2X| zM(XZWvhddw|Eu&*b@Pz-Z>mm;Ll0#&icCA$*bqD1s@S+mnS>?T4+c93VgysaDnT>& z;2jDDTNTbB+!3&JH~9xXj+&68Y@eRx$sV{-xjfJoXv43wx;2I&Q`!z8IGNfqbruF> zM+$5;BWpU^K(Eu14aKo$7+GEu=m@m=7zAO=aNb#T*N5kRvlZz7AkhCc%K!3F*!n7h z!{j*$KcCBwdtHs-eRzg}8HT-f@62Q);d^!}Zo zA-4bICA`+IA<}c`6<|v-;iT9|Bu94$KlCc)bIe=atAvIkk#JvhWM~jR-^XzJqmehh zo51+bm&Exm5!%5E#RqvUV+K-2)CmNE!mrWF7jFkZB=m4F)U8DNx3R^D>w)3a+)l@M zqk3XWmhGc=!iqPBHz8d6UM09Gii@?bpegZ^o<4YtC}PjEw=(P%Z)&hzO!MKzoBDf! z;)8I}KqL&#TX;~}$DmYT39SZBrL4iWGn7P5iuTI<5WWNpv6;4 zW>4VWuLAua678Jo_}jlh>8ZG>5+X2HBE2=&-k;@@hA-M4rbEP;~qvrycj_S z$17ei3=>&$mZFP4o1c%$MW<`Z*@ZzBcNkPI3WGAJ_L~pvM*N2_oAsZ9_cI9W%dn~W zl%-JKd~!ksuZ7f)&WI>P4~3+B3c>QT?Mt93!Ju#Rw(Z5Zm&}c*w4O}zJf4}Ob8P@y zSkanfYfa8Mwe0Lw2L=t%*G=YP8N<&PW5>>S#rF~_JWmE}P=U_}=TytHw<34; z^aA}K7W7BC3oOJ0FF|H=e~(U}drT&_MhSwL4*3|ajYTKXk>X~%+TTr zdrt_DS<;pmOvK@S=p=cHx59^YY*Ttc=F$hZpX&)B6Ic}y+3BL%0Jv%#;l6Str$khg zFCafPj@4~E5y$QbxO9yxWd+1bpk-;H2fIW#r66o4%y6kodl>`@R}H+41XZpvjn?T9 z>rU06B7`E-MTFsqk7qFCXmGsAV3qj`an|z+9&SD6Q#rkmOz}C;01kF3pf`iQ$Nu!T z2Z8>NnE4-6OOfzEZ!mo>l37><-l-73o3f25>3NY`Ru3R_>|_G zJ5I6-ws$)5C$%p?Az036aAPlS0A3W03}F;6%s#ZgFp7&j0cgqKEcrs|e9ES&<3k-C z<7FvR;$r-pEeGbc;4;mZco0e^4B{A=uV1jek7q0@G_#p;bNq=9fEX5lGX= zLT%z^Ec?VlE<^FO!H=K*dGH!fM_b!E@i$2!G-Tu$ReSO!ARo=l7OC%M5&!WkK>u%2 z{HF-R6bTEbz>mt~BxNmZL-@iv{B7>ql#W>gr_L~`jjJ}8M5=Jhngo&~cnvzztN#Ieg&%qo?k`zG|9m|Ts zj}hCIuO7ZnX>Z5lB;$(^jB1K%O4Opr&RP^@eri#ox){?W3%*9iV9AOZpdUaMl&np` zAY~5Rya|(2~QvR>Z z%+4+V5=Fjmet*T0NMLq$X5O1OZ(jL4I-J$IKPOlm7Ml1}cL+?m)LB)W#oXe8DHQjH&~Ox1p7Y^(kVbq>$qXvAI>J5*cBkPIY~ zU#U^@yR_}MxmNI!cvlDRF1Q*^?=z=LSRHPrcu*SxccntwHk&sTZM6TrbXDLa^j_4$ zf046rM-ZZ^*Pf9YcGZO3xt^FA(Fm$0)bIp&K~5mIX$RBEuP?QB0KkbN4x?-7FuI`5 zVbt~Kdv6CdXJeoP^QIO)c^|gb&!VT3D_-bZ%lHW2aU_iOKVPm>mliI#miC(1gndVO@d=!`l^=YV+J%9qEY5FRFY9y2CLz zJVk#?yBlUCxn3#tX{C_2N#@cB#kF0A9d~k&nV|=nu@)!OCAlCV>tfWQs6WL6z%SU2 zh8I(1N2;>Qu&srbLe?J3&6pzTD5RZ4+?i{zqbn^HPcVacNS1Zm8T&8jP9a@^5}3bS zl(9hWQu5`u=!olz$Z`ALLJH%*UM}g+r_tqwfIyUjg#}RkZ)vZ3(Npng6-kOeJ=AS@Zrbu>agVdOU?0#``5l++_RASR~pV zj;s$yHp0=_*S)c?yQgd8y4t}yW@;Fu|Mp}mF_{_Lni)-wj$w3;x90&OIV{P%y(M3q zw(`K!gUTJ?p#^4*ZqTMg*at4@BH%A z0?_}JtN5CHGMze)#N_#|(>as=wUkMJ+NRZ~VkUjxsaLE%b=B%qDU<%x6*B3cY&;Ua zK9y4E;qOxer=5a-pCOX@PpzHIfB466vJC}3ffx95{{9ObkAAW}kj(TC4rdaz>lrmN z{WFtJKV`87^9~mT zzj|KNk1ZWBRQLo{?5Z zq6gNXDq@Q6Ku-yo`~k^y_+1Zz5+xACrH9(l;cUyKky&=ysY;-xa_1W&Q%-0?{HBQM z)*Gb@G)Ep&$9QeB)U{b&rE3;J;jxl0QmgDF<|HoM^1b3nr*JqtY9I6C_wNMyze>e_ zWot}>k4aHCSSdYNm9~{L9{Pu_iNh}ApQXo(iWSL`7HsHMSO&0+Z<%xqX>RZYN94*{ zMN_ffmSzso2qLvd;e>$IxhhpG+gHKSzE#*~InZ5cRsAMxYimKxp9?o)M3EWvn3r!N z9Z4mVbCkP%0Qa36fzqi(lV^(+E@r)G-ozF>{E8IRf&o7&wsg@pkQ=L*%q=Oa(jL8m zTcjtdz!WaFEG9Af%Ih8t^nbO||FwScF-Z*Vs^Tu7B1Wv1587doUQwE=`NXWV2L3RUE^<7BN}66~~{9Tv6``>u>0qGpG=) zyFoqmioAxfkZ)diesGF-*1+P~pkIU?%%Gr%wHeEqqm_1i!D>w&7uuHc+hjY2V5?eo z{?ZP~O&wiVb*K=sS6uUKwEw?G(!X{DSM5%gE8c@o)%+7({wd$!VgFopQ{gJyL+-2L z!<%lpstf*4pEq72iKfy>mrax^c-v|X=t)Awx}H?5i|VLYC;iW{45(N`_g!kB{pWRZ|4-a?DP|X%zsE?m zi*%LiUqPRx>Rzpe_6N?y9uN;A6-4Ji&B}C)-y$4lgGyx;I!_*SaE1l(l%6x1DLuz- zks77vjEA@MTqEkd9y*+Nu;iRpR4!^pLs(c2>&h)(R!%H(Rk1g??u26A_~FwA)_oA@ z|9aT}1GVLUo$b@i3!AU<=9ZF!88=c&u7x+8P}=GH_zO#i+uJCx^Ta0JLYw&FI-A&d z;XOsTD|ZD#=#dQm<_*|Z-?Q&aZUaKaM-xMdRBcoAQ%8RH7oh(e8m#~8X68W8j*Va_ zlgjL8j_ydLT=Ur^+H=_ooEXd`8hl{F?CR=rpYnfeBvJ!ravNW2uuEmELtWfWC#483 zlk)R~B8He#6ns=raeC9ThMs;67?t7L6#E7;A-PSfdoBYfSygpZ$cbkxni7hgH5Wx) zM2w<*cqU&w;NvmAA9*IN;umoxLnf{mN0y2eXG5;QP0Ep!-JFL)=VI(m4%=fhbvZ0&+9mNpud2Te%CRKaX@I9a7LbWPht4Zmfn`zEkBij3| zFDq^3m8HtXLaM|`s$7Cn<-?!9<`+Q!e*yac80lX_%AEPZBlm!m*%G*ta0h5!D&7(@R4<)g(hw{|RmyY9NzdQP^R{{Os1oD3nN!k_}fiDDyZ6ywSRGo9{ z+}jR+5jg6Gzz5OByW!{E*jDGLuk22a?nt(gLmD`BHwA*bsftJo=YL(oKS~h3p9ufxI)p!e^KmS) zyCLuZDlA)m`f+Tl6aIVTSQ{A}+n!9d;@a@LsYOqQ=eK2nBe+ocLcRhw3cPL54~E`Q zsRsM4T%Jp$^K~Ve+BTdXilfVFGSj~!F%<8TZxq=RSdhFys)`YW`AOjkO|Y$zybJn- z*n{bFPl_*>_ekbS_gx6|e~Z%p8uL)5EX>rI$`$g(S%ch(6{pXP_m3ubkt1+)aRI*1 zj1H&c+Y=`H^o+sWRLLqW_A$ilU~bwjIM8bQ$l$U*(^wND>d)+YxQEl-#BhcZL&NF4 z5BG?Ani%`p!lDbM~G^B^UhJZ(VF*->Q8!IqwR!z6ygS0cBqydrQj%3|~Ay9@%FD^1}2?_X8@R|KSW@T$OhSRq5bHH2u7 zB0{C;CW(0>PdLMe6(#ZFtl8^pA;Hd^o>sOF@kdB;tdE!x(li=kIa) zI89|%!8gLk6qch3Ya#z^;Dmn;+GZ}QsGhiItt7_Ga2c-2})11l+B zN`=hp(aUo2x4xAF`oB%#ze(Hx4ZF#57={Luos4;_v`^&P=vWYlSZkFnJ-vmKp9uL` z^2x0gyR;}Wn8=TW4lltGz;is^>vjAB*y@$M@&kfqOa632r1{-iDT-S5I4sPBz}rEN zVU$q0FGwH&f|s1fUql3|NcS;E1eRj=7@EZskk1m0jdiNhc((@mbr-WB3bY z|Gg=4YSQsrdM9Xl%pN3eY2CE~E{tTfqR zC>Q1p!LH;5V|OAYU&U*^K|GJ@9a;_Kn}jvMRsVpg$d8ZtQrw2qn08Y-uX+xc(FrNs zlmhCLh?#=xI3<4zQB?vZIrRiATs#cPrT_t0CAM)_%Ed57g;QXYCvB2!G86{|-H0*6 z|H(VHxv;Mbq5iHwCpY)kV+JI~%@rzSu%aY1wCQlFA_uB-vzc50CSuDY zip&Yj;3Rs)xdk17w(aDyw&!6!_jrg^XK$8+2C4>ya$W2nb({+1I@86(Lk^KwI#&>r zQ=H=8)XCy_Q_N4g>Z7&`_x|_|e+Byg`>Mc6Wu$+W16&V~)I}*+aQXaz z&5}iDOCjaesm`*!#tL)#c zcn|2UBj0%R2VQ{o-*?FU|1bEguE+ibl(3yGkISRSQcsja$zkIPGGcr@o|ypZ<}7Cd zd3xU@hLo@qAhc35b{H7ycZPgRC*lLRxef8LGB9K-44=-vr)H~fUjtaL^d_=>A z6#PzE&<28<5&nbk5wtc^YV9J$*6?USR8X3QUCJTuzrd1^hmV2{un$h>D-H&q&|7cm zz4a8J|9>d`U#M#Hgv2QxMiD4yUMv|xQ5Vx!A@Ynz*<}uEXQhOS5D)Vcm&IAB|}m4SNP59d8l zbh02f{EC1YF!a45p3F@^(8r|1A_$Om;WDOgKK}S`y#na}PDy_SB7sT#3d@9KJdTTe zAKS#c=@W{1(qCw0@eD!mP;Imo$HhveM}fOpd*h1_x6Gbs1IWx(xVks%}sB>E3v0u4)$DQkLPWxJzxASw$)UR)u)je zTSRyb4sUPTqUUo4Xg%=^nVZRe{{rP{cm2oL*}*|+P8AI*)@V|{C%+}pbH@iqP-kTw?5Xhu^WE& zeY;M4+uhx>p;lO-x98>!%1k`O?rFuS?0;I@E2n&I>3G`=2^=o=#&+5pkFT>guDavM z+o&#HFYb+-KR<(Q^}TVy$nfCa?Jd<65<|I!Dlh%V`~K@9p#OV;{zn6Z{~gRbsCDNZ zQmnDIkc^VS`L@g1Ahm7xrtD%Cjd*@a|`@~l?QV-8Vm=lxl!LEhVt(#`3 za&v5YkyYr(szyOR+M7FThV2GI z(y6Zo`o9n8e;3978Hc}t_$htQLf8D<=bnPk>WpU&B~xgzZ+&PkehT#z#KX`Jppq+8 zBwiCCV0jQ!2#C0MW0S;e3dn>?k8&x>hc#|v>xdHfkxv$&(-P=yFCYe`&Y9f!)rl!lfIuE=yb2Zsznzj zF_#t%?U^|)RtJwt6itEgXwA#8EOBvE_yF>8gnehzv~VJbI4$XgfIE+GoLFB>FWgi2`VH$E z4tlKnN^N(o`t;J_<@tH#t+iHct(~;BE~8Xu15=&fwDdPhbv}L5>eDdQ`MT4tSbf^6 z)u&Oa^Jy!jIzQLA48A^%(wpJ$(*mcRihs*g=hJGZI=?6i+cy?C{i$1Is`F*~_8kyN zZ!P}`JVtI;(G!W(fgv{xz`SGp8$kaLDf~}Ulnb9PVm(uWdJtNkWULH1p2KXc;{FZU zzt74#e&blOe<%E#+@2avCniK46JgM01Mf&YJ({E<96<$pC+xi;)B6c)qykxlkt)bH z>qZQV?}pO@aIf3C7uzc!lA+`%&S#R)5GEv^Ck@-Z%rTUpK5=D!_ScAGtrvHs#2>_m z2&aiaEwx6buTjXHCL_h1ZKPqrxa5l)WZsg+ss086nhjYXzWO;BoM$eUEOlq!wLt$5 zyY+t@Dd|+{Ob;fA@M_CQ5L%~l(csx}r~!H^^=Cq4gQ1pO*_IXpM&%=(D8;R1pmJes zf4sS}PYRGxW6JGRRP%l@vf^Tbf*sf?xuXOc%Z-rXIH~8jNLL;N5Gcy z)QaZ50&c)%#2mvRF?_1wgHPqdXvT6V8i*~eoPVbl2Y~=Bv3`axa>OTOy3DacKDSS< zcF2#~s^U}(RnC%P1vG~dnk>BLT{0)@Ag`MJ*zmq!g3brF?x6{FLI$yr(@8Cio~(~9 zEOI-bpNFcLu!1@R!zq>=qZM!keoGi-_k8X)dXd7fMnpoVQW6np7RBA1f9Tfl0sTLw z>VMTZ5~Xd1?AYaE(VRz1H(kt0uO+XkGHjT>lU52gWLMd@kbex9JZ~M$%~$3%9ukL& zN4g0ST-}IU7*vO*G^@i$k_5#f@e8(ycBz^hj4zk>o#u)Z^akvgoU^i5o*rEg2nliu zgW7U((+f5e#MU(@HdZl$mdYCAONR_1x3ES##mM0Xl&TMmWR#s8QrI~RKk2%jHNaqg z1ODWKfGQQsC@$zpY(UVzyn3w-^#8cR|KOv?QD$tcDsP1y3V6gt;mAmDB9)&^=i z|MwG;{)CRM>0?;DPo6>;Mj!?y$$$%~h~-6PS$-A8xXf$KUa!v0;RL`bhG*g~)Lz+D zUNOLcdcc8#Vz^0-56?x8$kDAf?d+!|0Ks7w1!0qlUgfBi6+xRZ1mRO{_C58 z{+|T;Kab@9HEO}o&ZVSDD?w7?PSBKnO?yU%pL)dH(($%0!*IJ6cmF}U`(OTGoqPG= zw{ODQyhG1?GX_ar{A)x;zg)kVkKB+!YfmDc?r#ly+C_TSdJ5j+z(p65n)5;5;NzQMe;M>0NB7DxU|-M;wcbSMhU!kn ztIlAcV3!#e0mp_Ygp>0Q#Dns{{vn2e7IWlRa0m#F!>HF@4AO*c@b`%jF28PlB zA9m2RHIld;Qfj$XC~MsbS)%o+#=*iz1~lU;;JtOGn9qYeqX1=kFIPkm4OAYtqs6k$ z+($+a*&dX{3+-1iDRd(uD)7@(T1a40tOtRss0@qsV3K8!wr|4RWYy9#lfD}058 z8Y<=Dff7dK)199(giF>U->~WWE%}!|H*E4J zwY&ub<6N1BC80I$ObFe-Sn7i(Byb!urK{9xJp_3b@NI$cxK2V|ZVi zbA#_{=5$Ekhemvlu*QoIRrln(jb&c%2E>QN!6(ys*oDK@qNZ#^aZc5sLna!-q~!Ka zwn>c#Poyw!oMo|nZb4|D@wL{}^xBX)e*4;eYx~T#(a736Lgrf7Kx-#L=Iv__uI-~1 zci=CJ@XOS6cI_Pq{pIt)=xe;?mJpv62)#8m-BDF6)c5DS*hi;;{-4$G-!PtM*)AIZ z+rd88UOpa~SX)m6YNU^q=E+BJL-VXRFTINf=QYj~3*iJ~6I}<_PCQKWnw`tFJ1^>D zxiMWhd-U5t|IhjG|EO#$s(y9Zx3<1-2g z+}4iE8=+yt^VGX-3iPVZ?6*F*8}q;aYgzw)bMI+ojmEE1)tX$n7W!|I!)QFsub-S#ldowWk}ll* z+O@KN{2sA}Pk#UFJ`eQ&g4+L0t!eb(+_lmFKiRcBnpXI(nYE%shQ z^S^lxY@Yv`((JTZ##&g#m9#!z_pM4hQUo84-P-V4U143(g0?vOjgu|_`hQ8%zq-qR zG_ClGsaED$-9@YOqMy1ax)yPUCwN{OGqxfzR+_V~dmR0yhfaSz(ErQz@xNDi-}1M- z|0~}2PVPj@i5lJie^^dn3N>+#0FA|9;y@^T! zwKOO(G=(V5J)wiISmO9#!XzjOfjUw1l6m_O! z86BV?*6BQfH#J%18{fH%3;yi?zWB31|NjR1cOqGr?Lvpyn_4>7F6Duh1XHGnDX*;K zkH6~eNB$Snl5RX7nK1Zy1S-5zXTmvI#(mpZijo7G9*Rm!5-N~4|Mz`JD+z%%_;^^;=l^gP!&S89O27k_iRvPPQ5n2=0iaLZ@~F~1n1G| zJ~6|ge2#r zUy*2pITBZOay;4mB1K7Uf)%?=L=uYNX?Uhfd@K5hwa`aQ_0g2Htt=~RmwCX4%-uE@ z0b2@&9wCMf)?w(bUH8BKX+ZyP%JctqPkw1&Ooy1~)vC zNXJKq)2)o{6m{TZPwb}MjpYKy*+*_q(q|J~LqL>|AFta&7MRB=J=BI51!T zM!o*E&`57rTwy_bQ?Z0T@r7-_$NS&6B>lC>PgU7LyoaNVXdyIQ$B>NP5DHR>Lb2gh z)DVLSeZ@88OoULN#nV!LyrnZ#oed|Cj(iy!N>g(IQw0UIB(5sJ4R4Ey5P?u}sXaof z^HmPvrT29!V!JsvpuiI(9AuT|B#UgA-Xa@ZRD*hxSa&dZ_)LU^38(^9N3Uv81O-H< zsx>=XvS+Dt@rXeQR@_Jcn>Hx8&VAjFfb_<5 z9}a%}Ltn3Pa5qCiI%{f=RpNp6h60-IDPb!0HvPYK*+|6nqa8a3R??Fw_>2d?iK_z5oh zjles7V)%$iL%=zanA>Qi=;XLQb+kLOo6oXbvT>~f#korp%a#e3F=*GK!~;b=4w4R1_z zcZd5oMB?#{J+Y0w>tcP;aIX=iIU>%f4ccV{#*8OdlNeWo!6PQlG;aaJr}}v>JbXLc z3)?|#tTb(`tLkj5b(`KQH|np)_`Uw1kcIo%FoX;mJ&*e>gSJ5>UO4qvG}y z#52RKl7l)rCF$V57|up#N=R2yf*%+|`hOSX{~yTz>&Bw8;^ANd=``cMF2ZfojBq7X ztWoR>pRRfv9YyZzT0r1w2DC+6hK;?E-bmDY0bLi{xNaSMzAh4}{~#j1Yy>tB$2R)z zuj{&dV(ZqehwmGE9JXd(Pj_E;tX4nkW6_>ytbRXcYIt|B)2#Dk?}ifxI&=Gt7d;B- z|2^3Mdy)R?3eq-v0>6u`lA*0~H6bmmVWfpW6VigQY4z!dw6OK`D^{PrYW3-av~cXnTYrCbo+$5!pDvwzfXxvnQTQ);%QdKS* zM?y$>9g#>M{nsI;Rj?5V7fy55zj5sprmj$LgKpU_iYMmm7GX@I2V}r7_W`FkL1Ytd zKPmm(#&(nVRDQI`Xp^}q-mq^RgCcEwU_irbcsPZchna?kQ=>aVC}p|{mMYpIf9b_v zyz-)Z*{=2`;%RvJ523IB9q9i9p#OhS{1bwn!!)BYgwpEm z_4OK!ZP>8kgy3mC-e*o}dvAlV5VCBPWLfCJI&$X7y$3*l9tb?@ZV)pU{{^koAzjS8 zDKi3!X1rlfX7x}mLk~w1E}{clX;X4R9|auEhCoa*WK?`pR0qRi9ri&2zePMfaR+yD z*KMBtFwp;p3jZO8#pNk;%;LRA{ovj$iOTb$Ck~reNydhpnJ9qKW%dhP0@Mk8gOCXw z(y0OG-KbCx$gDz%PuQ`{XoQyY1Vbn*^uY*gPmr>u2!*6Solx2N@TvYQRroc7v*z~1 z@K9nD?tyXuAydvHnHos!3C?1@VK4>Ozl8=RJ~@Cf86v%Gp`X1Jsq2~ zCfsVoQ}_<=x6`Fd9$J?H`u|Af|8PQC!AyriklVbf>{de)i8YHB-B~P$EAUD=72PNR zb#y{dTF;Ckj=-o036n5(An1pu#8!HjA>I`izjH^Jbu4=kQk=6$W-56Gg2CjcFnwj@ zi$w(KW!98cSr|0Xfj!~W%L_t_mmGD~kR62>%qwir+D&kN6((c*SujLac%AA9eUKg= zQ8cZ|PgQK%l4xCp|&j@Ygf9%aUl+xF*<0% zbq<=UsQY^58{fXY?i){e@|k@=|DUXk{}(vN zld>#(4g%>gpH`7Js%>tSp45mZ=j@+E;Nhheemlut!1e!G)W3aRy%KRv|YYWM%p9Q~q`62B7~> zRsE+!)SY?A?GJwD4i7EclR>!7F=!3z3~PXY4w)z;Oag%xU(Q%lrQ9@s>E!bJ)R*19 zCxMSZvDdzI<}j;KJb7ycgwP5D>QQhIew$RS_49JInti7k&$w&hn5?m0Cs)_po*o_> zK}<00rRG|DV~+f*>$p3t=5)MIi$xq?ODl!3sJxzQC-jxlzNSU-s-i-yfp%wRuodp2qlnuLSXJ9f!S3@U>c_!{y4^vT=M|hNjpqxr7#|O>Z%R z=+!=(XvBEQy7kuq{eJ=Ur}|&DpSvdFyQ(+t^QtpKU2l5&($O|40i+d7v4@xsQG;M=0W#OO8g2pA)eMvC^UqGAe8mRni%*sEbwnWKZo^S zeksrYhLG&@c>m+AzEDECmX}dcM$IjG2lL(CIR&Gz1!86_)NOWmc5L!7E39AK8MP0V zgWi>d-?qc-wv~$W^euGT+1W}qA0DL5y`+^KJA4Z<5ze-=A>L`}ElpG)s6n@zHgsMN z^#9c=F2sIvec65LmvwufCP2aI;fiAy}^gK^3mTg1A+klLllOTkJ zVnH-KxZ-@SOvO!yWY8VmT%t`L zA(fp!{R7bd*FgVSy8knK;8ep!P(ZL)S4#-_)jjxv9NMNKFoj^JClEWu>af!Vciw$6 zuv3KV4DI+y4BP7L^vA7(!&}XP_-Nc5-8<5PZW6dCZc-nFXe#3o5RFn=Fce_#Trr;| zhp8wAZOs!#CfpG*o{}%SGsQ}Y`@=i@ZfN2JN`xn zR7b{5F`AyZjY^zN!A*S9eDkKuF9rJlW>w&%19blvHa0?5k^`1jSs2!6V$Y~=Sol%M z=0q8nI>zlrZ z_`koE=YL@2hi}4%wf*sk)%|1XbRso6IhIMZ5{{%-jnH}unfh=35)xE1UE!|J6&)_h zjuDKw!N{~DBOlr6VNDa>tc!!h^}1AvNUH)L7Rn4ZCQ>=HGK`|Gm+VE=-f|ESSk>rM zkwL;R<=3z*dB+pTjg|7u23`8wWlvoS*o59ipgkuxuY!6~ZMjX8EV^tlhkLUQ?0e&P zu>Y~_>&YHXj9=%y4rZ3@n5E5~dkw~Y9(`Gc%)6-|hc^R`< zV2^FRMCgu=Egf!`1Sl`V&^xHBsu(`cs(FW~5AH-(pLoRF(y?}T0&Fd@OK+lG+EZtj zUi`kpnZW6REmzFJnYHJ8uf?YNo;>H;&8@s&8wuZDpZT~aJP+vqd)WV9Apd`#aqVWq z7*vqQ=wZ3FV&(fDrmJbBD{8`AVh`W_GBCaL?7%6YPM-9p-(A`EvH=|g0Vjxny>$rq z=#ShT2CZXbAb=4kH-C2t+v*g2jI02&Es2FLTNsKrlv4J@;>Fv!RyMO-oaF-aWPr+i z=H9=50_gt-DgU*{LZ&Ew;}~#Tn91c?thrt@zQY!>BvH{|<$$1^M$v5vczQQy#84H& zMV(?+Z!0CPlB|nkRn%0v>J06rx;svv zW-4XGN2l{dmO1V+$3#v|jiNguoO@FyaH(`gmX+`m%P)DXqvkoo&(bxR-b#UGr z{{!?tkMw{4?m2DnP#Y`?JTG?36KS`stFv1k^Q#v=jY{EcxDR&A+_!&%ZS~y}92*&k zpO{iOqNl1-I6_OO!rD0rN1aop8r;e^?9FsUcd|c!1qxa6##cmw#2i{hEa39l0={<= zHQ5#YfxCHv`WQ9Cr4kWh4#|B65FbwyV+ybtbXFu+Di2wXYx&Jw9Y%{AI`V%xr ze$4$43uw5%iAwB4UL5Qe*U4#Vp~$^Yx?eS^*d!)Kp_Kr@Qs7waU4*N^Rg7?oDda_i zJ7+*{?vM*m*au{?1*w8KR?Y-5T%jni)@6x~qNv-h;_3A37VOIkmSq-@&0R(UYutzw zAqIHoXgAAOCx`3BLvJGXMv|Oi_REHHeQI^4;j0`-#(N*SA_?^Wlgj@Q34FrwIjRbU z$Q+m43=bk?c&a$Kc}F5Jq;{PkvD&Imkg-giAa3fGeyFa#W7Mm@BOdis-!W@f-!Yo0 zzGGHZ-;slKId8re`-ddoNp6#zMP-aM#CHRS?Ar+<(gw~yXJ*m2*j*+uiGsAHAbiJ= z3s8jTL*$1>!sW^eGFbLf{?J?Q1N#42(qE8JK`mo+9RvFtbtb0BLic@MOj&D%?p|VT zs%kS}m`+hR!NhhI0Rq^Q?`@O{&2a&q6cG`BB(IE|K2-(R4;x07X0}8yidtTA?-MPt z#))16L#uLOda7I)b*fxoT&<|scrP}kdAOWgOfz|Gz5!123)qx?IpRbfjxoqSg*^5nj?L8J%MR z-Nom$_=1^C!EI?&rrN~&wUl3+rsfOdJOZ&*5D&raOwSTFG%#|fLN`i`29s=1lI@!f1&*EA(rlheTY_`+N?VvRiczfM1XcrNjlUosF;wv^Yq|`#U3f|@pL)ZJ zrMQf$Qe0H`R0bmo%`z)2KvkNED(h4B#K4NjN?K?uxd=5iO0@}T*w*4&<*K_`n<|+S z+&!k}!#*jV{y`J-|Ng4zj{-teP*pRK02Um+&vmfaSSIQg;L1R^H6uhxD$~m0gW){v z(mWN`!d`<^4Zw0l7;^|Z8A=Qdr}wh_8%m_NCpx=4^JaZfn=y%gB37-URn`<94?;9R z_Y{ZaFj9wp7nO=hn#!=LYBQ=lK^Sx^16Ah2417?QJy2kos7?zlWZ_s*X-4r7^(uaY zUSQWM#SfO~0O@_xq=BH_3*UmlA4o+pUR|qU%Q+5)@NmjPY|7|ZzLL7vXVZUuh9}il z`|#D@e;3gIZ$SU|BmGy{dbj4ou<(poa2c0h3Zubux*VRyY7WvG)2tVY7r!~^1os*3 zx_ZXTmX5c5RfM~zxV28wt#y5!TkGSG-G2#rmj3BD+*%htkHuTp>$lb(%H+jNLk@Fo zekd1vz!LDRWy}D&1yOb~9=!rbfRdEe9`N3l>NNbt@9u}88h=;u|MEe%79wLGc)Oi2 zWJbGT443*CWx*YjsGH#m{^dv3Nb|u3ZeboGT!g%R&{eFhJXZ`T zRi^y_1|>H1V=!}7roN1jmaqj%YI+A`cu@|T@?0&GM$Q+S22l(6%JaiFf9chMz?y)H z|F4Z=V61>*ATK|RK_N8^mtCv$7;%8eFAV{Rq1=KRvudh~yf6{hh$|bPWu&LiAS}i_ zzKcxOaLYus6yE^eKq0@2zv_MF9Ih=C5*H!qmBiebQLS??mx;qwc;Mmq^!7+^p&kud z<>mVbDZmVT7RKKt^WQl)$9svQbwOD_BMtJo@*->4M9e9hj}HPQ*en8-VUh@oupE0m zC-#y9K>w3e{a-)3VIdpTRPj~eLM5Mo__c6DG($;G2<%vxiAM{@8sN0{vG>`g?D@=vH;j=$llSnc?eC+%y+Z zUXn0qJJNy-cQ`}kXu~&edik^e6X<_3(EkCXe@cC; zpiZRJ$KS+J>pd57g+X$R?I{q#5(T&>q=udqo9JuXk;+Ct+g1bz^T{+Dml5C#o%lR!)PY6Ijn&+ZFizCgTDH9@`G;&`ma{@ zKeB$wC{nG4>_D+Ho41_sh+Uc9hbiFs*&^(Qxp_~WIm>XkU%cO|umu&$gCRa7k8!X2 z<5=~ORl^^$ihEa$ic{066ZIJf=UMsk91L`>){qT%$k+j04&`MZv_gtYz?l0*G0eEz zIo#`IRoxtUL$NVSt=SwUw)4?659bnTlqf`}xFDNQXym#~lk9QF5>l=JiKu0|33qhu zTfpj61}1<2EKnH~WvpFFwgShVWhI*HH4ArYm$?ht<EzK<&#?R_bOow9mNL;mx*HF>WY`7uT7WljeTSu=zogZ z|I@S|4%m6PVH8XAE;}w77<{Vg0rK*0Pi7{Qsa^5G;HOx?6PWtyh` zr?Gxc7_&XzAN$_cX$;4^&^|2EJ~lpBM>9Bb?5_bM&>i>%h7Dc($7f($T`?F;>`C;G zjka!83Y;cQO4!q1-}~D~1N~2v`+tlq((`4;oyGR!V;LZcxn;k_sNCrDSHDbfFoF>$ zY)G!?$dwu03kh9PN79KA&}~B)Oerr^1Z~YeB16u~7mPvXdPkn2H7Z8pAk-mI<9l_L z;^M!uIOM!l0*%1o;Sd@Hm6ilSY4CK#Er14*r>hdhDayEQN57EhetarqKSg&lIcWJ( zhYH*4)hQk6MOJk!$xuGENG~(g%iQzBGdLPIkwg}NweUh!Sk#6oV1Hc?wr>q?`Qaz- z0{Wj0`yW#*PA)08nOZ~PWSJ)W4HM21fe1Ag-0L~!GYYLLvV>__8yv+T@Qt}#c2`pS zT7L=`%$Txg@M20<2IcB#@}Lp3XzoU$Kcq>9lYX^yyzLzcTU-c-DH0BSb%evI-@5yY zARN{OcB61Ge}6u<)rG?z4G*HRKQH>;%gzM)8+G#k13@V)w4Mq7fMvmO$}CUiHDRIj z+DYM1KSaJB@tcSc@;BnJqWIu;bY|@sGRHShn751j@1bOhe8z|Rhe!6_VHjF({Mg`d z|4#1{so_-OP-X{+n}I`#J^h2QX?7*<@PK6?Y= zbQ%@(f(P|OlVt)ZM7^-f$fz(z?GYVR1gjk6<}s6GpDoh)+_AC+`hd0QfMiV$#nE9V z3U)KJj^S~$TIQ{lA_c^7R8EfS9HYhX>O*@j0s5~2`u_*ne`S9hABV|EB@Bg>Zc6Nf(>I6bg6 zc{^;w;BOGuag)9cv+=DhqUOnwoGiB;^c39VOO3FmoMOIG*75@OG${e+F-Z+Qg40+0 z@JiJG&j9*kjQPo+5-p!PjsuE$1MdAmhS((B?Q7H>Ym~|2AJG3yp#Oj4d>SH9&Y6b$p;fSp6=wx@ zk+bQDM!Mhz)U~mrGgS3qtaqIs3l7HHFuyD_96iVCf~BKv(g=ty*u^Gx*<6QR&VJ32 z31FAafeSF>aKkULV$NorT@H;55AMZ0ncX|Lwl^U{|r+xuGeY)tjq`&xM}^5OLOWem=Z_J3%7po6+r)UK>q)b z?tcX>hf%l*1(sh5aqgydjGBi7nudqB&X>~1Kb^ReK?K#--hu*!1a0Stwp;4Z_JSwg z{Z+)&FFu5a!N^ZOgl%=&zGNugqQWYNqLA63r{MTNGBcV?^^Z=NJ{3Yw0+*`eu^q{STk%GO?pha+6>{w964v`PhWEG2RT!epK$KAx6#1cH)7EOcY8cmSO~A$CwKl#1EPw5`cCS^UId z#08v<9D}m6mt@4BCk`LcSZNvCz&~#g0nRB`@M1?-RCsGL6~q98NoN`k;7%Tf_JQ14 zc%01?=Jx~r&jb43O7s_9$ueFZVx2e6URx^P5~0MG>c3+UJ-Q z`43-P=yEfIQv*FT)!LEDXkX_F zzDN}Gc;yQFiy{R<;c%0PkZUOeIaDqdnR7&qow5cI*&(YLNjW7JoL5W(5Emto#0v-t z#t>Pn`9<}V;&s`pE(AF)-kslp5(dl^3|dqszS{vTR1G@I<)Z9(`an7#sjVs6QZW=- zPD2^NIoK^LRvBG2Z=Da^2lT%{#sAGK@EPx_Qg70@gbDUqe$_(0GMhu#f|5O5E;4#M zd3(k0RXFV&!YYQ%PftQ?xIQ>QVPyhdE{3_$DBYEJN2u6?n9zW~sRX6#R%t zT=B;F)8RtpQzS%zm@c|jC4Rk%$MXvmxTHHWt%t+7dGt68IelSrWd8^Hr@iz5c4av) zLLLwf#Y=hR6u~KFi>8YIq%)4X=jl3gFMiGXKLY(93Hm>>z{$jyrAoma+GJ&6wq#`q zd1KyUzlK=7T)BlaU3Aw<&NIJO9VTHQZVOPpH9F7@`sXbjYxfX0Dr=!|JE6yY2R)))&9qO;44yM-BK*sKE5(t<8)cOiEw zNlK0h%|Ux%wvVV0DUSdT$dkYe&8Q?E8_Nws9hU<@(cghf7N-B)H?vKD?QM3cxYoZ& zTz^>Mg8}7a$RtZ#CJ_xOg2P-VW1?8hV%{%V0T+!KysL39awdp_kmDfi_!oLC(Qkqq2ge!V=zW!R?#xN#Q+mV6Y;~Cn+s=9-)4N*`!#|R7LN`>m)*kZyZ&RtC( z_h=%(azyr=!nGRaBsP+ z3JaOC7hK?RcpI~ek6YrB04A}cmCxPgCgoCIn26}BKUSDJ=E%Bi!I7@@cOO2v-1e*5 zBI5qxbeUThr8v}B&Zv5Hjt@hJq686~lPWG)j$ZA)P^5Ii9l~f~)FhI|yTUr6@vl^F zF?SqZ6EiMC`_H4K|BqkWRzagSup?LMNO$KvQLF3Is&)kGmQd98k)qaLM^Ss+ZFj#D z6t$g!UJSgL`|4w`t*)qji1qx*cxLYq*1bsfPmYXjo!psdG+Zojs@HH(qo<%2GmKY~ z$$j>ss7pU!!|xQiy-=9~X+o)}N@0<)I-u5+IZM?I>t1@)w+Dg#kCywN+WMoDb;}+; zZfP)=F5KNnV#wr68mR-AFPpXLrG(XIWo1C_$=WJo8^Y+#!-pIj~<1~mvu$~hb zq%Q-KU<~dr^nSd`d0&bhxu1xqydO-!CmgZKS+f1P@Bj9VK>x=o{5QFtZtxPH>5kNf zLb!@b$lHvQLyK7C8k- z@1v1TD^#etVwnl-RteU5Q+87BMs84z^#JRdq0Lv<{?RyOjuI`f63XyG6xr~{157C&2O;$cbj4jjD&o54eA)=#n_TCGD*w$M3aJIt9fXa;QhYEHfJjd^q&-!Fl-vd% zbeY563uF}nFo$K5YD4+>vPTM&X1}`dSr)Xf==EbMwJOc)2X&PKudi@0k=j1GBPd?9 z?^6%p`ESDhC;Z1uFr63yr6t&5b%dgkNQ6o(Na|s*pTG8}x4%rVqodPbWMqX0EdLWx zf9X>HBl;NE`9~OSxQ1vWy3U%&(y?}V9yXEKj|JL~+v@DcuHWB%FC~A_HDl@1PsXs2Gr zZwK_S>D$fCAcwETzpkU7@CWk_Gf3Mb8lrzt?`Z#3zW$r)vAWCt!C?thBENGr61bJ`&t+}tK9j)XsCh8% zo(E*fpuE8uL@ku6m$e_RS`sv`ZmC!yUhaC|#$!PLwLt$0(Z9j1!&bLabLXD^khaB6 zzIf?)+l&o6MeMO6?Xm53_E_`>cg+S)hX%W0iyi;uN3f~B#eRn|`IBt`2n9|jqurdH zU+@6N9e@L5)-Ip{4t?`d&*UQs7RXFXXfkuiDpahzQ7rVCu}E}77%L}t8`_Fp@E=RZ z+8rj$8x}0M_OsUk{VxOhQ~n<=-~uh+4$6-|lk?+WOZo97$T&)9&X@Rj3%)sXj~y&jJ< z=Yilx#ViZMtu&zA&c#v=_PmvsE?jIY9L)Hm-(Ai1&MC6OKA=F184Xa_Ey^GLr+%K~iK!2S+D6&Um%!T%Jh!it1e>abfFM=YC9RUsqqjcrjMm^Jwh71n_ zs%9}yvsk@m-JWLMI2{})#b!#YzQ7A$d~u8iuxDr;OPFnr%4h{Ga7EKOU@e&C14W~3 zJ^1vIhk*W9Ncu~XL&I#5;{}3n?W)YP!BDFrtc><_0>SHYGW5VG&o2lnxG;Qq1QJ{{ z30k>xSq@Q8`<6mY9vi7Ae2v^!`*@9@p!DQZFE=c*J48duTBO7^1y+lYujunc>v_p4 zIF`)R7r=y8*#!?%@TwA*m{`hCbRu6C3IwZMoM$)ECPHHrhzbmjgv=-oe;4xAknA|e z(LJ(r>@rtibTfE@U26DPExbd^o%}7k`ga2Tuaxws#qgwmvgMWpOrdB@&!Oj;8EqcJ zINan=bfSBxN@&;nT~R`39!^`;_8>%j;q&S-#~t zLoWdOcS!ncOJch5O=)}9DrL!kCu7ZA{B#G|oRgCb!Hn)IF|;MURm-NNrI(YJ!DMKz z*V2S3;EcWRf+HE}SB{`qDKi>}gQ(qQ6nV-XX&|@y0tc`@bSb~62~0Eua)1DCLC3pB zYOk4GVSzW4m;kxzfQqw}LvEGJ2uMXbx>x{rt^&EmWi&N!+*i`-Fv^`F2OcODabR3u zLRO9T>lna5OPAGMuLRbwag}9zrSD=$O{|M2z*)*S#I@|3Mf3vAQ$g>p2P( zUyFV@$IIXJk%nEz>%nGQqb74&R)!oQ(718(xlmI(FGHnt1K*)EA!(^zW4P zSHm#d=uO1x4$#C4i66|;;B|f!9%$SdkC4LA6YTT zt!pUr7+Ja|Q+uh7D~1}n0dg3)hYab0(HjD8GgU0mms-4|hFFi#mVH%uvfF}@klBIX zp{JQT>R1kf2mLU$A6gD52cM#5awWd=J{#$Obv6FOvb|J~KHAFYYdo~l=n3t<`cIRi zjkPk`8V@}zqut@ABq?B-(exN!^0&niq>|Kc;3f7)@Xr)8F}fo0T|vzk?5V7Q*GOinUx z-7Xp!)XFn!q>ma*-NL+%=bm%{&_68c@0(}+E*qSuN7$UedA7}+%XHExcP>A-2DuZR z0C@`(i1LA=p5Y{F?`e)sxrt@KdQ2f08k#)s zBabWI#kig!Ly$N~mtP~ipG z-fs?+7%hrRxLKu=wHWf0DKoqP=L$p)*Pky@oT5zGC-Zfp5nT9Ox>vGE$}=JML1B%-|Hr%Gub#-n1j^mZ$DOWa!9y;jG{KyrowmqDt_4=VD|1tiOC{c%YRbxMNWmZO~IN6&mUc znJM!Ma|r*z&W8+R2t;+hsHNSQX;1vxyoE6=B}P}t<}mJqPNt!j@!VF#Z^OaHx_fXB zV%XHoC*JWTpno^e|Kr;IKYX3p<9jgH+YPf@@2k^Yqw|fSjmzW1#WvFVZ1gocq4030 zzXue{HVF(IBbcpB%r;nu*&Z`_EDp?e!{)m-Vc2Bkp%^ySnJt1i)rnz@m)|?Occgjq zS>OtRbd5mVqo7d-XEoKaIvIn~A!Lq+juGI&%ZCrAZ@S@4K>r>o{|&aMdYWRjAHrRq zW&7*AjoG>cwk}o4vKN@nP|=V4a#yDzCkYqp5zb@myUgjCa)MZ#aT+c~PScr42<63= z>3mpZQLTiX;$PS*Nb!+jGX9y-&W^@Fv1@P6)I-16AMHC9N|FFoUbbG zS-GAmDowb=>DF=lB^ONs{nsh{4D4vXhnG-z<@K4!_$W?v<7U#EMxJ1{rFf#or5~Fbv#9bsDDJ2R`guUBDR6}eF)(jS zbg$}uyaTy>cG^O0Dut8=CnpYMl3wJ%DoKbD!kC)3Ev{@NY7U`8xl{-%Fexp-#|`d5 zO3+P{5bC%Idbm9CUCetWd*O->w?>O9ZVV*sdh>UW1O3+n{qGA<{Rf9@p-$Nd=|bd& z$D0(xNSr1^L**0IQI2ixLfFnsR#fCw~Phd`Hq=ExAj=mplGjb>^H7^` zu7OL3>I3i&p*?UV6y6~pq%M9`<2mfE2Ka8xrmZ0GW}flVwLt$qp#N)dfiy(kp?_pZ z-bcJ;=~%lo1f~$|v`Fl9V;y$tIDYuKl$P^Ov?c8MatF56*(r}D{@N)y?3VeJJ>{(_ z8=jXtZdHE>OvE%(d`UiFLtzvAAG9 zH}g)s|7`;LA13?%ENC%ZYnvl>u1ujo&5>AtNF(gIUs^iW?rH*g1YvI@!lvsGwljJB z`9RpN!26E?VQ>E8*Ricm*nY@_RNVqf{DjTmt z{e-Il9V4=|Cx#*+xQul6J0TOg%aNO~RK{Ez(j>$+m(Wh}r370j!A8t`%P)hw&zftM z|0la2uH)9M%~~M)LYzDXkYf~{Ng3!qsp!i=1Fy z4JDCYL<%w921EodOh)2IreOl0WK3eA50XO()^7V49Y;Z+sst*6UEyg`_^SeSwWRV7 z$8%K#PG&HX7zy@zZ}@a~7hia9<@k;G6Y+l&C49eJfpBz!yh8cOG6JSe#i-#$i$hgI!cqi-oy$$-%DV4b_fu&z zaF``XfGMumIGz&Nd}WVu6!|8UA4vc57q4b>RaLzJWFdo>38qwV6o{nvC!$0v+ z;|9?GI-vhok^WNh9qr!{Pfv2*ZEHhQ_Z_V#aqH2I;CZ_+3*tb9m6sTw0b~^%SWczH zJfLBYn{k62u2hXseQuJT?Qk-PHea^=dzU74CZ&l!rs0?mWbiI zSkCC$A$9}-rBBdp(fhF9-I}?pojkR)REwN9J@t|T(Es{XTz}SI|7khS%LvXpM4UHT zhx59=edGXPTwa8nxA2)aV_W@;7j69T!2$IW)6U3J=X?NX1=oFv&JvP=^=>aT7nHj|l?H0#!sawo)mM>*-XZOxg^0xG2sYndF z(c)iZK)mZLVea74c8&?px=5g+@~;oYLI@$HG$pIc{P?RQyI>RSXQ_U~@DzDnrl@P= z`G{&V{m#y6D@v3Z@ zZOCC$Rm8NalSU%~wGyWKkR^LH)XNE6R2|m%Cb(AB*c`t&=Od2?`fpvuCCnO@|GaU> z#KygoHtsIU7(WX$#^1d3H_8}4bJOZGFk?J*#ucm2She~L${0Umg^ck}8oS`@Gbl?O z{yqadKKpX^vnC7nAnzEYHS=8;Ub&VU}$VJy!D2J8{bi@O^v`D z>eCZHv*i|ymg%w@_quuqSg*52y{p(;Je`iO0BqNAZ%s{_;;fqRHa9SJ?$S5jzx?IZ znEyZEkN>Xs4pEq5g}u_a|GL>_iJtgniPl(_mHKQf0jZfjHL2pQ7*nh6AAVkCz;HXj zuWK%ncR8@xTMo@X6X>6i^sl`T_#BO8g~?q_u;n#kfR_*bB_X)Xe4;R!L^?g3HoK!e z>&##*7U_<4_L)g>ucy#y60CTy<7i_12#p8wy-`EYwIjiePi&HcSV(L6JoQGH?&Lzx zc1hsR0-Um}kKs=|Ro2}?KD-L@va*?dip_h53M#H9w!|DYjG{SGq0AmN5d73Mi$bvW z@fUnXIQ$LCDe(oJ7~*rmr+suO;{Gu4glvP9z3|DQp8o*)Z^e0zlt?H0-S$Ou)Sid?A!bf!L&uv8LJF%s z#P8IJi#6n?uOl6;JaIsMawO zMgnHbt^m*k@I71EQK-LX>)`NK@s=|`j-@BoY?t_N(y!=!+ty@?N({sM#}a0+WF3IFl@aZ)ncD<~nJSF%R_!Ir_M+##8b7$R9iH1%h1s`~Shlx&r&J;^2Zi*;s4&x5^@yI9Nue z+65Bl-~arbexUyj75@`FIG>-KDOs~2^B`s&Oo}3M+A}r?tukTKbIy{dG92O|nE1Rb zYOrT$kV?&077W=nu_x%Zdq%uz9NHVrAerv>6;Q(^qaG!n6iaXv_-f4&x@oWgQq zj>tZ8`lf*Oj@VYs+2eD$d={-Vq?=6kF!3m!I1|$$;HDP2y5LrAukm=uC=bacIvu}wJ(>quDxdJx@)ho zuEP-XYpiRgIy%WwywU?_Z|KSc{gcZ7qdE{{fPSPUU&bpLx~)PbzwokgrprvRQV`fT zXk69GTQFgm28ujb&cn8_c)5&tl61+*B3kIq(9>ijl{!U{W3u>$xI$$(Yv*(Gxv~P> z>9RQ?aau*hyD85sOWa4=#(<@0XQtEokTV4f}T zGNWIxU^5Cw)<$S33}!qqXA>XmM3B87up|v~1y@GE!mK90UWg#VTLGw77ri#jI;n=$KOL=N}4ORW^WsI{Au*|Qs=3joPV?T5Un(7qjfnm6V1;;p^Hdp%f3; zM{saQWyGd?!xx7^v$1h-#4VqbLKnI4b?{de-KVFgL4(U?vtE4<=pN6|C_~LX{Iv~x zt_S+3;QserqQ8`U++D26?%;9l>F(yAb|3C({NbtVY}>9kh~7X+R24G#`Xj>I#W z-NWgYviIEj0(ws(?!@y^Cm)bmOu3|hHcCgs{X8#ywJ0OJ?F|VY2eN=o9z9)Aa`w(6 zZZ~FzOjk;|@?w|idzq3Zc#}{VQk2_YvcuTRvhTLsItVNdaWLq8E@WBN7KPGKDImN! zl(`F*g{r`Q^|3Q{Y?HvSTfk5Yq*lkHnSd`t9 z!Dp#LuWkd zvq1kFS24i$$t~|Y*vL`_+(j~AZygzM@y*9K2i63x{pHfLQ3wRT_d0B>3xQ8<8%__! zTaDo`bxRlb6xpVB5YTGiB--# zQzc{a+Lsm4-3~S@je+q~8q+s+6V<7(wvD$q>*#E%iSf5id!H;~f(Y zx>#{6s?KZUi_66lXCutQ(k$RElC}l)z0+lmpkNYi4>2?i6Gi2~S&qTsfU4TMo7b10 zraGXL3?w>>~ zde?=_9&aXnM>G}^U-xz_`+TV0lUTc1d-9iGd_xrIp8@*673p8qQ!Esz+0(MGkA-5P zj;uX7km#s-xC~l<$A-=Rp5mK>zRItlG&X z)Hu!a%73ub!ILjuT55}6zyXqZ?k47$sKY#K|LvY(tfzO{T_>TcyW{JpVPlPZPCaRB zVsv*Rkuu|{*1&247s%6sd`z;tc{l~I%X#adEUu0YD07yOsY`T4BB$p^U;phjK>yuR z{}XVM)B(yL`Jlky7EfU-jHiL_L+YI>H6rBJST{9aZNzmMxn5FPQB(K2;k&Qh%&*2t z&=2qdyseXP3$d(&7E|OH$gJ`tB>4Ts1zUs0<7fsqOjdZWNq5H*8(czN4y9B<(!kb(=^3F!g1i{~oyicaZ-VXdd-qJcX(%_(fF*G46BOdVd{L9jbkY)j>~mOm{2` zBo*_$p`*LW_6NhhCn60O=d8D~diL>OmX5c*b3qhHF>;K=$P?>`k;~@}e+tf^9f9|w zMl$jhOw@m(E=A578XFuIWDQ<4*1wIC&cE~*Y^xLf(SwO?ZCrW8MdRb||KHny{!ak< zN3nA{O0Z|Va)dxaS6w@1%9wPF_YWQ4MgbJ*8GIT*m{nLb{1L1V$1R$M-Z4`wPFW@R zuOnpk`fi}~-HE$>K4Iy2+k^nhN~SnYOmTA^rsym`Wf2sLp(97mLWSbyFYd?2I#*!& zN-{$QCL0n<3&;QEB%uFzUH@O;OzhF=r;w9i-szNqux@&e*ztLX6j0SxOO`|q$kWNs zp({p^v&-QL%#wnqG6+jBf_5fx@xkj#AuB(rVKM6Ls+TIo2*M(SMJ75elRqVAL{jVo zO$%Sv(zM9(Ou+Ot#31ej)OBcub5-mAi?RP-{+a->r@?PjrJZpn}Qr}K^<-3Q;!QU zwwhwrtw=*ks%|l}AaD`%5bWTZ>K!5eA=W`<)y;9t2#NP&r9XTR>gaF@Bj4Esd^tQg zh-eAZ#e5#Ect0+j)d%#yS)Kpf5YZG6bHH>w!vy6VgCg14)Y_YHC5p$yS;|o z2MMssMO-c-%(Ll+sCnw8!>TTTTto~pbnM}RF|rmXDyerDpqHAj|HK~+ApM$YNq;%X zpg>=vag!j$bD@(XSIn9NRRzI?0T2m^M?tQzA5*u4bBNa%#x`8waJ!uQ9c5Ha*&usy zE;$XWiOXCm639Y3)LE+26L~|IXdVK+9wSFMKBqiaaWpVE1J=&ASmZnK0z?DDQHc5S zJ17OKX4J1JH>y1-&M8%(XKImW+uf-u@!;4fbA;oD5Q(fMNR>tkKJ=#(n2;*U{hF}l zlBrQYVB9Z%eA>SQ{j-w(UI4jBS5M3v<(^Ds66sOwX&CyX5YkLA3fHa}{J-1Nd$%8s z&W)K*+vsy~`k;+DP+=ah;n#?1?zT#Z#D%~3uWz}K6d8=|w#ldpk@eiEaws1U$!FX@ z{&?FOcQK3sj&!YyZjAPHZ`iOtvTj3c13X9H#pt_@-5Yv(qw6+wN1#nie%DRkZRqaV z5L>r?L(j$yy&Iz|yiY9Ciirhs_T8;azq_-}^v5s$9oGM{>*W7w9}Q zu3r~f=UtBO_1%&6&|pKfJJQ|jU5;qahRB9>k>2i}-u2OqCwMvj&zPaRcf$`ipdm~X;yLJC)%&__=Pk%Dde+KCP2c&<) z%klq+8AJ+6`(jeh@jmT2OUK*R!$7fOr4I#jEn#9T5PN9 zgg2!};_Zz^g^*!S(vuTfu(DNgWUos7`cFXr*;Rp)o=p0m?!PHvQcZY4#K_CzU9{ld zIBb@K(J+nI>lUKWN(xHjj93|YfTO8pk2eUq)-JH8+}GE`;4Px%>6puPgnC0A*ZX4? z=W^Fyf4x7>(S0OZ>yZ=YSc1#Yv3A)2_)46-!Q(fAVLb{~XZ&2S|Tr(bGS2 zEUh3 z!NG};MDD27&d}R!OYTVwtkByEMZN`Kh%k#`f2tk>!UpWOa(UDg4Qxvx0_EIPE}tt4 zIAhMzS5;FuM!8v@{lBWZdhth=jtTmG{-1CBF3>+G>HCyu9Q;FAR>WIHJpE&v| zjQ_uTsRx-W_?xd_W1YG7CkET{r|L)-gQLMz2=-bO|BB&X-60NOz^}YFhZN#GNI-}g zkCjTGb@t&8$yYRmP`ybpJk$po}GVu$Av)uTY&ywA^U$lQHi6#a_#mlXrtR<-(umvbNuT} zvFMkC@I{RtdYb3~KRQv;^rT-c9dDbffK4TfKaE&?whoJ*`Mi6uAY9_{cYTuz!u{%Q zY^<~Rk<94i;Baa?DsS5p!#m=cCgYj|r(zFqq@vGhyItI2Idj2TyNLNrlQp8np=GXI z$*Q;<(bRmzr(gM3p#MIp|2vxNJH+>Yfw?3xPYu`DGXBu<`=cAMp67ar zeyBrRUubr3NXQ-jjHsfRZZSwsOrn{|ng#Nk8`VhQhH(C>m+NpXogIa*SKa@F zo3pW3HCeQ-QN#rJ)6?5@-zQ|%HTm(F>y{3;w_ia3Na68x5*~APgvZ%GJ(dIAYhB=_ z=sw!;GgQmwblLIr_#irWb|n+Ln;U}~OHdw<@xkBT`;!}h{_}GGL(e3H$K!+BhttW? z9Yb)k-9DBYNNh`jLIqbi(8#tY;NQ{2&uAoI4{!ZpPT(B1Ns+${y!%DPl#22RgEq~ z|>@c5Yyl+3yzbN!%5v9dV$C33+ zJjvm6Mcf+rup!=FUE$8#HQ&2vaMO7#(h)+XSvY$`h5%8vB{G(}XmLttS)fXBFFXV8 zMwSVo(vTS8&+>xpN{q!uu2)f;6rD6#cIJ}ylg&BP6~}2R3&1|eS@~gvdy?K)j4r{= z&$|VE;o1^1h#1Zb)AzX)4({N6Fl~a7liMa_R0?#5Q0+)V$rq|BXn01y9FyKyeCq=YZ*DT?J1<09YhEsmy}f=%7;U%Pr8{ z!-`6rwM>vjhA8mDzB!NhWneM0))c*SYgvwXM%7AbJMXi4QqdpoY-js|JdmQ~ei9|O z)Da~YzUS!sL6r38N2v_r4^G0ix+r-q9Icb1!;=Izy7HfYd)#y2b!%>|kN*=em1uE$ z4mvjO6vubX5T9yZP0ofXvq5jJSixc{^SJ_+{t?$@egw`f6c99Og^4cj8R9Z766SLp zNKq~^%#S>3xsgFVC_rEg>Nvn2rFwwGzS`8HxPwuwl&KsQ^-aTQt3JmH`nhS-gig&*ktw#?oy_jk{e)lEVSl<9|M^&$#k|eJ6hv5GGIuXMbp^Al^;YQ|GaRp67fI`BU5KzN;$jWc`V^jRPH^WCud_5j#GC%=6A1K3vId>^8Nx|QOt za%^5j)~&v4j^9q6PP``GVLH?3*Auad^sP^?_35#`i=L|Uq(|Iw0mB4Vtu=?Nf`#5H zQNz|uV#PS^N=D=I-LQ1En9WD5)0N$tzgEdM1TG6gfucrLpm0Hlz@HqtFwTceeHB^f zM#V^MZBPARgEx3ttVk7LqkaRY3~^G&gUT@UgXev|1oW@e@c;XY9eR6G_ljUm!;kOT zTZ)A(vvav@v1B2!4xw^M<6ZID6;T)6mAYxWaaH|4X0(gCTBeCn&5i?8eQK;#U#Eck z`b>K=YvuBb-fsu^BHX9XTyHT7N2+;Su>j9!_GU&CLsgxRg7(s9rqNDa^8vZ}`sE|F+8Luox`~NxG{cp3MDnND zMsDaJ$sE2)dSes$F6rrpvbu2-`#Y%paFT(WtTDM@M?k(8V zZ^1LsYySfDKLGUqCDMPzTd{E>Z^cdD-CC|mUb`6i#Abt1p9J8XCAnu_O^<@w#~x{tjoufm}X2ZI!aZ#e@%q*-^D%fg(-O z0ychN;Y}8Epb2CV!(&)6S7VaFpT^Xpe1h(t1?~z<&=%)~5>c=Z2zMA&-3GzoDhvfg zGN&gHEbbC$=trAXGrZ*{LlmVlVI z*<`1`mAr85+w@SBmfi`f#bg2b;D*c*H zj10#669Tk|Kf}zYPRfTNN3=MKa#|_Ql1I0{ssG{Xd2DwZN$)wjnTxAG9^2~5-8YFV#!@$q4Yy{u@hNwrC%ydWSmD-65w8VqLA_-$ zX=RbpBk%d|UjzN`@W%frJZ5>Oa>MH8p$i&uk0)HVIU>eWIL3tG@IL zF<%r?)wi{d89CLCwKv^VzUih)B+?yQ+rY7{j)yuOtSn&N(Z-e$77cXcPV3C;pK}_} z|DRO+kG@#IOR3?>t?~YynZbBw$7CYYA0J6%YU?=vZ@h(9C7}P6bpLDQV7=rCceZnw!RaUu*5}f}TC8)hUUTE!FCrv` zD2BoIdsjF(%Jn(!8m$T%>wv2sgoWt&s{Rfu0tTRR=iTR>qjRAk96Y*v6jF z#&zrA-(Ivj^laa124ldmnE4#-H1wnyyeaZ!32PPjI+J1Kp0ifkGz==oH?>%{&Bi+X z^@~z>0R8V;6*%cmTv#5hS`>j?!11nGdw~ve5%B}>oXO2r@RBEcT(GA1fmY`bG>T|N z*4%42WW-n~70X5FlrPvasX{=gbeRdly^=3imtLn#S4lQZT1HQpCMebeZu>L2gY2hw zt)t#(dTg&EhUNXe1<&Kd41jRjx0jB#$^kd;)sOm1`U0T;VJZL5TDAHtfFDSp`KC=RfXDdW%dqJ%8msq@G~grcxl!lb}-`V(^y<8RLz9waHx8 zFcKUYDSZoMMn^(|@?0qp*I2Tk0i(8BSvRC=UoH>KZ1BgffrZ}geUTnZX^e7vt%Ymu z0zF!o>s4hpEgU^LAZ3jxVVX=a`h5~jALNqj8c7fLCo-AAWM-5hO*jHSnROrK;JlIa z+dsXq3Fv=B(%*fsSSc@5$})4_HnmPC^+E8LT<8?RcZ>{s_IODg9sr9V7Z`vfgYaC6 zwbM&|PA$^ZTvVrUeH_b}cMUk2ORD3lcQ4g7cyV{zrTMA(Eq5UKiSATq*4Lq;Gz@7wCUX)_+kQx0t^K{O7wogy*M9O{z*O z_oWwTe_-iYyNeD~lnn3!Vt`T|1~}#ZqlC&lO}YE#A2Il;q%**IgC{I^e{iMTeNV1F zIwf03)xYbT2HgAB+ynam_5js?dw5d!ABH$Tm5ARH>bSlt6aV__;j6ljL~A{A;*$3t z@wgL_ykC+$`9k7Jrw&h^wptfT!9QT4siX7ciwjz>tT4_Qd*zqTc$+>ZV~Ba~J@dFfdFMQ@Y=9LWF=5CfF!Fo1FT(QaUX zp+J$cjeqxhY^yUs2n`zB2Zy)DL7TX7a56I(-<6om>`abK?)l)$PX+ov3F!YTe4>AN zEQKbJ6~=a&n-idVMzf)l2bFFTGe9P(Dltfn&1R}9{t_F=7>I+2s3xPRs#SnAK#Ra@Q5g6OlBGum0FI}ENTKD%>b>HLV*-;P2tRyH8e5d32Bx??Q)pYcfwSI0N>3CG-COhWYUJZ)AL&Azj?#C zK>sJh`9F;G|F5N`+Kkd5V*uw#rhO4HZKV#=uDSj2pGazbk;-iS=Ihv2XWEUh^Ak6Y z#amYG0;ggR2ps21skDM_2TqDm;Z|WX(u=2Kh6>rUrm*BAavCsQ*(%KDDe#2ERQW(r zV#{NM%50Qm-fYYR=KhZ_um1Z3(VqbQ?_I@Z>`s;?LjSgOtli}YdP-LKXJUo@by(rd zXWe%u)!6zOnuWIf`etmav%)sITMmq+6J|UWAKaU18oYO{%6R7IgX8no!ASx3;f#my zH#R~}AbzI0r&Ya}kvOslLpx2^eT(iuZY9|01~!@G^h&V?f4`wCf)QM*Cvj8scxMGZ z10yx-9$dVg7OecDlT$n>@tw)`=~QNCZ44DhQwUb=R7p@yRRSB-P884p#JQS2gcBF--bz~T=a zwu(Phuf2z8p>ZG4wCG&7Z2o}2(FcZAClmSWEm^g9_ zdYaZUt{L%Bvs=-}L_E&KMig~S_7o;64_#bK7+cxJaVLy_b3h7t=1tGpTxFRo87lUQ zCgV_@6*4O!o@S9#b}+&VU&NM5B(<#STn4_%=4NJWGQMqJiar4Jzfbx9?J_>^PEi5T zAg~SbO%YsTQw{f_fS;LqWXywUxs!p>{5`)G+(1cg|9iYlb+N4Z1- zqFyb~hUmr^uh5@=yASa{o(lTkX1f2mD`w53&VYjzkK-~y&+gR4jI2DC&V?h?T`-Jf z#Tvw=MdH(x4OZDTz^|EIzJ|Jd^Pzrg9V2T&||(xxyAobv?Ax}QRwh-TU*Spz4^kX69K zftZ&Oi$phsBi-yY7*&pAAa_MpIXs5IM;zkzLaGTf}Z$}N_!b?rg^oxdN*ex4pPLSo~iur6B%54AxEpsZwyml0FkR);Ar`oLWibQQVaeZUkq|8Om~)tTZp9aTFs67O$X z#0LX4{xn*fl6)~?*83JLQR#$z`>!S6{yCdgpN+o#C!D=%_1S@ojmN>?UDtm?$q@hO z@0fZO$gDN@yZHaAZ;Eg+3``&_6bH7F9+n!|+Q-OC0|SJ|u?N3#ky z9>-RbTL*{xcTQ%KPe_=X`Rt#-)+tZZF*q{^hqqI=+tb5iBWAuhOWjkk4DJpKaHmGO ztMSbfoZwKN#H)(P22Q4uqsjQ7+e84>>uus=qr=qGfZGfcDL7q1Z#fj-<2FHkO8YJ~ zJdogl;+KVD)~10@=CY!}?s#%k{MbJ{G=zD>*s_BqVaG(h6&?rqmrRKX7G~j|C_|2_ z?O3Fhq9Q7Mbs7~}F5q=FN4TVf9Dp&ojtz`ezWir@$NFE-l=R2j4a*8CDlquQnzh9k z=v4%YkHrMCRw?Tq$VLgYRRl)~@g)(Dq5J_%vj$~WOi>>gKZx}2&sWgiXRhz+e?^?*)>h4FbY`I$G zDJPg(jIn3+2~LLXRbx`O%n!fdX0-o5OVVFXnbhsPtlPjwr2UkTPIFgbxDM_k zTqRlz&`z;1h#Dh>t_YqaLx4!v^U+7i1|3DO%Zv+&An)NcYqW+S>(}dQYSC~djmAsN zJT4W2E|{Oc)kLQr>=B1uS#$A3wxPpf!3{&AbZ$*_%-dGMF-ZR-E1tgtQx@6c`c(Nv z>LF_eamDZ&E#gA(VZ;0I6SqYF0Q7&3+W%#?)`?8<#Rc16lV{NlUE#V~hPHM@B0RF0 zcyttM?r1qVHd&e82SIqcWUqdP>;%4^VW`a6yfepA1H-C`qgKUooZPH}in8_bG8l(s zF!j=EEkr;77#?lJeS?G~lut*%m%x4I(g-4)G}bOQNokNP9131Bl+ z78ayTDcH~xWpx)Z##z!3#@rp-Nwzu9Ftk3h6s*=jFPq4ENqUIHMr&dm@bDw{KLzXm zJWtYJpHz^I${6`2*Pv5^Fv~T$r9vg}&}BcxC84rN7yBSOWpibu7s~{R!bY@nDx4wj zY7QdEjcmje4vFQb)LR&E6pvk0KGguA6RkF&jNMaac$B&O>{7wb6YEV|`RNMbfy^2; zf@X2YWxU0oXy}aWzfdWm9Uqjb9mNAS3>Ax$8P@({4$mbJyf9-fbHtQ@L)g}g;UKwj z2MKi;cP$aaki>8VJt;4eut*lg38c^y9l3vN>Y+4m+JD-$0Tv)sL(ICds#$B(>wmus z=>L34e<^=)L8a(|txLy_Jikav<4s3}K^y3hpILNG6xwNfz}C8=1!X@{74#CiwC0g^ zjmO zsC+Kv3ZPrsg`g3q{jW;W~q0?3=nyd=I#?6E5 z&C}P=4=FO6OrP2*?;c74vkD&l$bCD`O=0I?oGITVfMcc>WjaV<86B+)FV{*BGpk$X zq}Pfj$)ZDD7ftkfQlU04Px~%M5-GCkCPcmtaThX!_zC>l8FC4OjPHQJDcf2@0#qRN zh_Fjcb@`IwyyjI)hE!*ZJRz1LqLYvaSl7rZ)#|st=8;E${x4Mi->giNsr{Nb29xKd zY7YHs7sh%|NvU3guRUGVT}aQBlBmLh7c-FHm??|gVy-5LhmPtJ#~FsBgSWDWv*GsR z-b-uTM@8aCWy+lg9yukkmNh5pXD3)MIFv%X0PfqMiyH51VEP<+seVOop@JfJD?q9j zRo!7tIy;rM4p{MNue*N{=>LGK|BI|CpCwidN|g^dSL(ZzzRl+i7K3DA1TWXJyTw(O zYBj(O0{Mkes)7_$j;=+K`T#wwMG3Xm6;YaLhD8QP6uJw|T`Bb&-I8c}Dw9%3*2aC&@3uG%%)Z_Qi2?ag4(-M&v zD$_=(`JGG|Lo%bF*r{R z`Gk^1EN0akah?2>lDktYl`C_}{7pHC93Oywa6^m8Ozl1H0_UVXvZ(GzeqMlHBv2K} z-*RnI2}$dp4Kn4<#9nQHooX`7d*v#La7{E4>+vB3ni$&QAKK>Vx}Cfbz8*Gj*vSL+ zz8ZQF!{m4@Igky@#ZjA$>bbLhpMCd#0{vgC&i}eL%3`%uq|Z!Cp&$%|?(N*G3`^4l zo_u7SSU|HtvEpcFwa3ctc~6&_(j_u!g(W3l4^Z$-u58X&xx7#Xv~XO{McpH~{Q^7X zO6w}EP&sKtOD;|8(Blfc`I$^vB2GiP&~{AYY!N_zK!R zn94!hM}`Mc=bBp?wHi0bYR1B2mCGm3W4_rmJBFyliqtQ7_M#^dL5935?-C&WoJxt< zp0n5SJqvECsVh+YOF?QgCgm~k8Cjn4dBU5apfDU!rBHEjGdsC*#gaE{lQ3;~T;#E- z6mn$|HMUO}!$rIkU8RN#w$>a-mv=GUEYwg$u?j8?js{$AtQ+U2>>1p}R)I|osypaM zdE1C`p#QN|XI*cox4YL2uIt&^sdz}(1G5x{jTfTQ=WJV5^bnzDd~Fm}JxmbkrLuS?SC*&Wl&!oZ1Rx*=#__c(0#bi^llC&v ziT_DAI*%b8#gn`x<$)dIfLlHXnCu>VfYd+q6%*2tFYz9`U{Eu!`D>Bq;GRqIKC#|) zxRhw$k)8PLlhN3QAwuFKlO2Yy<4m9bFVPgx|7A-5FFUG?p}3}tMMOp4zl>$xN!Xbi zQc638!yaktszu`cwO32i#n{?;-06}hu(%sca;9X9`xpBmT$Un9+=PKhO$KgmIT9+DX~QFM)DX(z!orNLdF0a;!xA9Qq25RC`OK(k9lc98%0{7 z7@Zd7VCX4i(!ppjJ{lDbrNH#;ntOd@tcLv&#c?{ z_%h-%*2{bGCK_7xVcgvli>_ZE0~rci4>l)XX@(0R1jAFgvaAss@`Ne7By_!RrkXz4TiWzN5T^(4E(CNxu{$^Gv)?f4|n{}qz{d{!-YQ^gVAdLut<8oCxR=D&=2JN#PtH=hOiKPc&sk9E0= z7Lo&F9r|VRE?~WQ3Zub-fHzpaavlc&t^~i#f_w-tN_T!=iUm3~W*i zOhi)cw@NwEL!_4shz&gmH<>`ua?e-Sq?RL!p!0xyKHG#P<+IxOlcqRO@a*{9`jg82Y&K; z5mRfIN+`2cpHG5zgv%mx)5t(jz>a4? z3{Z8eT5j>;f{du^a*f{JQMid~GCdA$dO;)jvb$*CvBF$(k9Sl z4(9gRoJ3x2Xm#H}`FAp?mBKZIeYZFxqB4}hx;jMF7c5zQeA3uL2PSR-`oBifUv#HN zs?iSvmZ!^%3@TI37(|FRM6uRX=w9rq+w)Xbi7VWa7^P4f>KDV)(2O}ve6He4;bWS3 z^%%(ISxt0xRpHKa1*-3drlS&dL#XrRoB~BtOd@VaRVQ`Lm&*m}GASfOUUjv40(E4{ z%7pUEH24-5(IsRZdMNcq*tqm?QPc=j`3lR??9zuHeD86f|7&&pXRTAY70CPxCkB-s z*2aqAQIzHEi#dYwU?<89SB^@7FZRFp zgwum5>c&{p+{wu-EE}^^FW!jtA71CR|9g(Nobn0dzC0-0PFn|uw~{M`tvcH{wlC$5 zM+>_2Mki|}a7E%XYqXm4m0y$<;(^#2HYl!+2q&8^S11Ni#y@(d=+YC_CwIuQSNT?H z6;^|maby^g1O4o?7f9n5=%h%3j3-#%tP0i#nNq40rbW@0lE%K$-6^KS#;s~68=E_X z`ANnhU`acguBiD|Gkk!8e6#>s6`DiqEmbI-bHP5KwE5gMA;f=uz4HHY(s)J&i4gV) ztM4FMtm%Dn>OyW}q&P1Eij^|QG~r9?>PwC&ol+~}LYyi-FhxA-+)~0NQC^F?@d`?F zAerfprw8=?ij?;?OAd_;r$;?fwc78mJ95d2rF5%0qFpJmA~TOKXzJ^5-rjHLftkt{ zQ3?J11Y(0u<$*!z?ob$)R|9FS_G9^>^voj}z6u(E?di%*aZE zi7Ypm*ohg8h-Ilclr0au`+T7PzbO5`!J&1Zn4yVinnqX2%e$@cs%aU1E>)S+)GHi5 z724U#qVJF3zza!q-A;bYAISm?kKh`nRxQ?&aJ;@K6Lxd^!ab;i6?R8V+a3PB5%cYh z>dadlp8I|OWvPdN{%=z8|0irG^{l`l9{$iqR5KjR{o1=+n>RGdIw@BO8b$^WdB=7G z^WiQ&r>D~u>LhGwdM2k>%`cYat-(@$TvL8Ws(iEy{!u~KS`XgPZ?@7_9ACtYOe4Y! zK~cxflk{X%3fZEY^wcHnl~hsQ*a7+$Lsw{q42Rh13eH z+}#!1DA@$gDCtBL%jI(!YLQE>V_qc;8ntV^*4@s?KlRT#or63Rt4>fuYPB%+_x{h@ zG5_-|s{$t>8vn_$u8kYSQbj?=9k}wnpTK{vqS_0qSD$ss8v^+EoAKkbE_vx{{QH$>T?i7;)&-_uji~oD=AJ#MgOT^-g*chdOavV997# zk33kCT)31_&8z}t`%-b-VmXLc?d zGV;9W_yVT4?4NA~d1+R_{8WtpDIhar6qb?`BL2VOye*?<-j?af+gdJ93w`eObG1xQ zu2y+}>}H_WR?OReWmdHEKg|GxqK_mcmwao8clSPe(Qm3My~|EW5A z-j{e#uhVe;j@w#?ObP^UlkiP1C-|n@>%cc%k~;G9fU)X{REP5ih=F}OakT(%x+gO_ zxjivFgkqtkDocUY*n?f1-v(#PC~U>xfqmt1pjRoEo#;eCMBm!w(qhdPjPy}1RWN7G zlK8=kZa4#)I!O+&UWML?-8)ASDz(+ZwLB+nc~0gtRXui&$bAVz}HoEUb7GYmj-PPIczrPgkhap z1(mD)xW;`K?!T>dngbI_?t2As-=TWk_m^Y2z?#6dUs?J9GT_4ZkogYj4EQWjk9ONw zii;05Js5=sC~6F2?FYEZQjLg$ePH<-5iY1kWlDVh$~})j{I`Es^?y|G2S{kQx_Qwd zrt_9{;9DT#uUpe@*1hPM2crtf(%q<7%0cfKHp*>)x1eWf)5OsUx0G8q&+QSrqBl7b z`?&0Fzp$T;Ns4#DuDYil(i6a?YOaGWzoTcC8N7TW>3iM z*bN$+zh=da75o&NHPBBuTGi2)u0Q7zp#M97{x1(m{7>#!KG)a)qmjt6Lp))%HBK!o z9cyx@UMLQ2Z4JbGF>l z(34>d7H28V27ak#LOVwpBIJAHuy3xzyp5!MA&kEn;#*K7q|cvXoTALdW-*)9@^t>^ zw#pxY{{I2@|2=g6i-&p76mGLi#gIXHDHyH-mo=?STa)ac=b44sb670Z=KmCly zC{nXc#M35PvkfkYrx~qK%{SI~Z?sXKtvxjzzH-&l@wOQSI8SozgT%FW*5TU6cfKGI zFapuQvz`J>yYwwYvAk1f+Ba@b$GKe6$Y-s$1O4CW=6|*}HbXKo^-PP1V4i%b84vQE zc@lw1J14{vgH}|x$%F`dF-_RsasyF;QmCP#OexAXE1kBGvOaDEgkrDRpj2F$H{%?@fIfHY}T+V`}U)L?gP-_NIa9-J)9o!HH39?`Ag0%lNqEQ_Vh+J(hvQ~ksXP&*)g440QoDr z&t%5%Gr~|3pJm3j-hhIvLx5IM|304NmmH#$3alNOOk^fU;6DA{AD=o1^nbUc|Bm6Y zG@~=9=3^sho8;y-zIID#)@?Ed$F<&0e0>LFNin~>PJvlCfXa>s`Bw zjH1&7*c`p**yn=R0R7*i{C^W&q9U$*m<&)V*+9gH>M4nh9+K62+>kJQ2#;pnE%LPio!WOOq%dLhxo3G36Kw zmg5{Kma-vLKO!ey>DbelLgSX*6uFuC9F@IAv(Yq`B}I~pARxKzWq}Clhu0OODc#|T zvAt>P&kI2R_p1C4+!kHR+_&rs+z(^iWdRT6LKnNKUWT^e>qqe@FHEHaZ_Hv3j2$>X?vNc+(oD}Iyw*h@|2|CMo>*%_)i&nquII@1XQ7@Pf~zP zn(X%ANQ5j0hM_EiTPkdL^i<20a6BmyG*-+t78^~0WtDS;a4X>IRH#I*;Mnha+*ua_ z{okkXKPx3$m#}IUNxD4fLP5l6`Ng-2sJHScB^Q|ygfJw25?cqk908R?bVMO55*b|C zqCvUYdcv(Jf0P=YB!3=HpH3O9T4svqaFHEEQVzzR-Kc>dL1l>$c4f}%-z`|6`L{G(jHI@LOih=l{o0%=1)3NJdR>#IQj z_rv|~7V`hkbApjkww!&AH(H$*SVgDfZwQO5O7@}X$9hL_T+Yk04`#YhEJ!}B>-00o zLB?gNZN#&t6`QGmaHi5zst`K+g|&lPtD0qa!ufeYsm=loC8HmG+Q$>knkrElXwp2X z9?@=ukG^o}n7o9wdg+2&oxBjfiY|ozROdo?Y3lG_so36^(TZ{Wzi_Mn6U+PCp8IT| z{|A8n2eb>~JBPNWlUVOB12VIf5|&haFNu-Mh`{LlpH|?@$=Cklm){f2uy$nWaC^%Q z^pvddYGQ?@I;_yOaO75Cg)L8bKeEEp&)@Po%>Vfy(EnXX|IZ%AXLVb_$C4R}OKAB| z-~wf{=ANdC#k_45Cdp#}dK^`)vxEb|n#D*XbXbUH{JBIi@H{IKDn`>|iIA}^KA1_6 z&tfdKGc~+B)g<}du<8{}RAM6HJt)rnpOD4Q`=Qsg6vF=^jj~hSv1v?n`L3m7O_S;@ z>)5Y>{vU$#|8dp!ALIqeR<9wpx~mRbUGs}06M;2>txHQ!MZS98r#~Lxib9HyzL>c& z-Hx;~11GC;I?z*akKfU8YXvWBrD9P)m>2Lso@MAvVes73Bul_m2U88mX|{shp2pPU zHGRiwwTVT%je5Fz*2kjVy&HRbHg4RwuGS;r=(^5oD`xw10Ot9(@4X!Je?JWLA4g(I zW;%1-(y?~w1q>jW=e5KCePOR0xqp8T@VL-4@9DX-&}FxIifY_U+Qk58(2Er9*KbFl3iX$>~f?I zyL6A<^HN}!4S`KZfL&hwNi5KGL}!;@3Wb#-=b9b}jwR?Tm^40?O2Reo&^90hdXW!h zM&gLcG9lhUF<{a-YMSHxI~lB{6I!A-}t70bFuvgVN-G1;`~O=Fp4YP)&+*3onV&G9?p znH_f+hJW&+^wi+?;WWH$hz4}~Kw?{bY;g2YGBq+7?@t`+A0F8Y&uXj0kKsJLPoVAp zP-aIwoftTj*n<&9$z6#%lwm?p7J=0$ZIyE?^;9zV((B&WM2=*ak*QT3WTMOT^j-~B zrXp=cY^ni7*hF_3{mnVP#MQ=t6d`$HB+Ew=9oqQ&p8@?p2K0Xw(!XYOk(|@=p+w7t z4p9%yY0y*}#QvGesGYZI^|=@VJ9X|AtIu7v`rN>l zz-jRJR@@^OUAg+?T4E{i8{;T^4bPnwI0ODZH*nfn`1ctU8g(W9UgM$Z2TlfA))%mT^zFtF8{2nf~<`{L7Dk{vTKN|HM%I4s%?1 zcUTBndALtaN&qirF_b&C`s3%tFvxclLd>P(RvQvYxDdyytuJK2dXmiKJ4VVno zWk9`slO}Tc{AvFL^#6p5|D?vo!Oncc5>|A#yek{VxttuPh^u^KG#z=+2ei_yI#Q<^ zvtgtx5fC{DB&Z-#NxyedS!MDvf~XVBWOHhEtzqH-yL53Uf zS}bkH@C<}hLDjcP)YNei$;#z<$nicUqR;nRxxAZ(5kjXQRw02KPhMcflcmeMa-@mU z$FLR;ZhO@xp#LW&{V7bk3eG^YntA$~V1I=EHLWjtt{DWAQk1l_i9;4C!^Yika^=0t zR4i$$#0aC3G$BK5G2wj{4m*hk;BGJJ^O2~@5`qF_*^=@vEZ$;j7*n1tFn;A$RooK zJ?0|r`_ueAizF=dxIT7ay2$Vo=te=V^g7BV0#nY8iX?D{eeh>8jl#Bm?ZhN)l!rd#bry~7DBm)vtT6sMnlsE-X zE3FR~7NM$s;nX5~4W{Sp>3wDp{h@{Z#eLd0le{i=rzpUvavCv~&7Ggd4G{tlRim}S zQ{m~5`rS~YM-AE{tOLQAVJy+&%yqi+A@DWTZ>Y}6t-MU^6B92~>HUl?h3*WH6&NpI z&0vxsBae_yAaFoEZ)00Fkv`-Cd3ld!U^`l4cJo+UB9T~jivA{W*o9ItTfx*J{Vm~w zT`6O7v>g83f#3cF=>KU+|3yR8+7q}&JRn*uDU^_UOqHx&kKNC#R>2^CmE0QApeo>G zT*y;lSe}Y>tM~-D-pFNQt@UUQ#?Mfd&p38L=4Pq~1%_Q0 zVHzzb%w!p=#)N?L)>;-U^WS#v%nTrRm_EplOVxzBwyr~Tg2stO%F}WnvBrlWH>=k z;A>dsfnsT&MdjrPIkPC49dv*9dC!LMYytu1?#golJ)tW)%o4?`fYWL6B271?u+o~F zx=Po0R_5k>_f?g#5!fDhljKCmXx zfAw9TLC3+xzy29E)^5P3pMFDTI5inhr{jB@9|#TRRCxn-dkT*4xANm5v}chK4eh%L z6)tU=K@l^sXxj4&<;6}D<5H2)w90@b;eD`7>=%@^lC>xg7~Xk^F~AQrN$p$E(<9?I zR`5J%lZuASwbs=1+K@=kA;*~6Kb9U%4kdz}otylbZsARzdh}y}{-1;We@(!j|5u&% zW*lnfb=8@5EBwL!$K75Fm3*EMwcx;C8;$mLNBUwtT@m`TcEYTYxwm5fCt&?GJ5=D# zrDN?fCvdymDQ~2ma;(lyIqT?=ivmVqEbvv_DCRHI*jC>t7h-N(Vl=(CiHwMoe)AVR z|NjfTtxlk2~^f;E0Wv zU5|dV;LksbZFP>g?AmKrc-f{`zxowG|IY*cKUVGktsdL?Qj}hME%3rzZibv;mP8 z^joayS_;W4ii1Pq_+or?mTveZf+&-fn@|%xkjrxVSB*jN&}D9;94%(TG|7|D*$SdN zY65{`UUzV#tXbW=E|{j5o*g(PuqCj1$B$Mm#{{q0c?U4unlHfl-_rp7C4=508T3uW zpvUVl=y|WX`#y5)h7JRRMt=GkY^yV9gp5Y))8H)rMh2jd<51)L#D zBh$QCy~b@}2sd;{1zO3vt@!frJ>U2=(Ep3D|JSqqSK3WX82j`bcgZUwZKh-rHbjMZ z3~EHN$N_ykS`zsZhRZd65a5F}iZ&BDPSs)Hx*5jVx8jAu=Qw>`tXz}9Ts0rpw%ggC zy|W!2hD{;&)0=5OJ*m!qy5OZpuYvt^?ZHz};BWZx>DX4^Pn+YJ{$#R=cc1dR>_(vf zmw^6XskQ&zgk$PCSe;-D;?geVroE8-DDb)Lmojd8b9FH{SalOY=?$OAQU#=P*UiKg z4LK%)N7X4dC)!mukPvr`QV&OxF2A)S=1X<$^(QKFyI4c5IYVB;7LZE?UjS|zx+)>1?c}f zqQ5K*WfrHWD^2encaSUWpk5Pc9t)Xa^%MUPc0UVyH6#2&{6E&P<)hwsw7qd@aOr59 z><9cTx58U#E8JUWD_nBt^R6d_=5RdVK-?OnZfw36QdA$dK%w0oJI#; zDwP-{|69Sn^=~i5{NJxi`)__iplrI65 zwB68Rb||HQ(!5HR7>q?;K6^d~mp!)Z3B)U9!n3jj-bot|^Yrr;yh4Nct6Ft<=T-Ip zn9(l6#a*U};iGT{7j-f@Jek3%^qIS@Tv=i}&s&Urk6IaK2<~Tpj{naPHJjW~be^!` zwi|)|Uz7AN_n9iiss4jwnB+^Lw)NYL6id)qv^xT)n7>Is=gLf`@m}3$uJgALT?`gy zC$VyPpO_b%>;*Re#Iy&}n2V`BF;aBsz3ct2P1`^$tyAJoiqKzld+x3ptos=E+#A_o zc)x3ExH<*X6~bESGxyq#QQabQ<6!+JCgGuwLO(fBoE+HNXVm&CNo65?U%TIb;|*&O z|M|aF{2z2hK-{W%Rac&`-EVj2@>$Q*zOQOM?fEl^2#1MMsZi`Qt64^CP%PDWKC>^k zFxijyeq>Gk`NTncx)J_x=}hSN&}KvL249;okaT%?jkwbEnW|DQ>75tNT3- z#WPni&P---GLAr^b{5}Jr$v9f`VHQ%M?kRo2cWmG-&lO|WkCP0EBx28x4GV!($K4> zqqW#+FS=i6Y`pn7lUwaMxOfTz;B2)Ab`cceWQIIwFdCE?-r3S0B0OxDy3C<9sKFfc zE$*dy&+85N`6{LtLri8JU-xo0^7}qBx{TZ$OAhpz-F7rOWA&^Lua8b!;b_#3hBw;X z-QnpC5zE@x6WiFkE>`m;NjQ0hgt=zFRpRK(Y**|WbnRTjLZ=Il=UTf5QzIt_kjM2E zxPRk~X94}c;o^Ug(4iuzAa>*flyD%r@rx#T4xt>zbBGQdSJ5WV}Cdq=>JW)|Nq*1 z|LZ6HP!B2huFmLSW>Uly^_lR?{%BW>O}ry+g>ExLwK`lKQZJ}sA0!a&k{BN%+v$;F zT=^EYJa5qzk6}$kz$t!110G4|8>r zur{l3+2AU7ty->FQEAz7RrR=b`T6Z7kHh*O--7+0Li(Tm**n|0e86o+UWERYE<#VK za}j#<{~qmxi_n0XL7TwHS9W1r{UVf=&a5Vf;Ev@ocFJp(Syh_yfQ4nn+)Q|pt?8)@ zB;7s+h4FbxdWTl5L`W5M^ezo@jCpFy3@s)z@u83^)2ymFBc5~;NFZt>Qk)-IhVhn< z_{WYgD9d5Xx=b8%CZaJ#g31c~_SnN;hxK3cZJ_^)arJ9P;iG9uCbWwA2sZRA0j`)C zoHZroIyW^H>tF9J8n-@b!_x7#`2rYC^61-$NAIh{qrpcV{wH*=U2zm0u6w?O(fzOm{R=p=YD-OQ zqj@Dok-+brxUGHq7{KVpa;9~(0BnJT7H)HR(;2Z|JS=7bC# zZAZi=A1qS?G`Y-{tc5u=)a_<`ON*kswL@<+J5g2hrpK<&QYqP? zhv_NLx3{xS*HI`q$C$?~)P;OC^T?1<4=YePC{~hW21V{C-$(qn@4ERP>=b9vFE1C- z8DvrVtCxw&h9vkVPsC)%oRjD#=#p_+iN(8!nAJGRSeBC*5JzJq<$_dX4jF1W(V#E< zmM*potuY?OI$V^PD}D?oJ}t6=i#!jUYc{mP!ZWHbo#9(`91imrMu@@wt+6k)%5G}n z%^Kjqt3cOA9kD|qqJ(Ke3>ICtck^>#Y5o<_Nd7jQ1(Pbe4h{7tLR!(7Cf z^R8HZ-m2B-Q7+!r$iwPCFO>mbr-M$%j61-gSLI|L@EF@6Ano zu0^?tm!PwPa}%GYACvd?52tn|+CT|#z00DfAWGE`YTTV6Q~yk42$xG%!QpsmQ2<3` zb#cp1Q|cOY?2wew%8VI;Dq(Ty zX212vGu+sSXG}3g73q#{5qLR^3)wSPwB&hXj=0GV55B?R&4ypb5gHg)!c9q|D9#w} zn!t0z16%uLdqex`z~Qfc;6H)>Kaljtdkyy^yo;hduB?RUR`c_wr(rx6$47^BBFQp| zCEFF4mOKMW0v!t5soo4sf)ZsDJsBT9hmRVb7F5t-O-*;G9Lt(XWis`}^KuDC&QiTn zp4s3XPoH53*&fsil_IE2UDFBSeSQ2@wl9(O18q58;uJLp#Kjg{o!7va@U$HWjvKD zSf#}KBWgxI&xjW>N46Qm_xA5GM=uieC) zkN~hVy|1scUre*;Pb}85%lnq27}0>SHoSSp)F}n^^qCo4DAH!_) z`-cY-%Rf<>c4E{X6-vxdr~9EU0%h`>l75~HTF<&cH;%pWjSrQ9{y$dtKjL9hV7>fG zDl#piYJpMyHCo}vdP|O984nJPhXy99gpv$z;RmYNeuxC*fKEQSEEBvhv_zT9QR`(Yq+Qk2t>0G_?Ze&Rjg0aUi=6fmWa;2ZUE0v;nWW%HqxcNv{ubP`% zsDxx=L`f6;1|sxr|<8JNUMOsz+F-Z_UW( z@4hL_6*vMKO?Wtb|I0gp{yzo!M{3%CtNYT+I-PXh(&6@Q0C1&{H=uu~8_?4qbZ;l# zM6u(S1=a*&ci;6FbQxUyyUo~Gzm7aFoft{PN6o?E;gQw`bFsXRj8h$)$-FgX=ldp1 z?wDk~(m<(FfiadEO@bzFTczo_No8m-5~%_4kU4G_vfR;x$f{R5Eaj9PkXAd<-iQ0W zz~+Gp#te|m^1n-0COKJx6vYZ9Gm1V%rCGZmvb1d@Uo0*lR`7lA+lBaFKU48vHtG+> z!ZdW^ovJKB>-Y-LYG4r|gF@V8U=`+w{`3<1|FXaB8XK)k* z7m(Px{J?&EONc}D{aq78NzLxDoE-Z+uuY8~mBzPRZ8^hRTTUe$au>PsBBznhQ2AF; zhHQ9yzv;o15Fr|(#g{QekoQ-w?s^)~|Cb8?oo;%n;8TkT%A~~>ayG_8)QtlNv5HM$AYkOxr&af`80NCniaF`-nBr2aqA^eU#xu|@|HYkVNlnl0axx$TQU|6c+9ss2~vDbg#`T9dqwx$e$( z1RY3DDRuvYr0)H7r0zKbhd&-L0`b5{&}AR|sfBHIq5GB$Ts8-jt>dl-E|NXKjTVhO zQmKa@pO8pnMf$-B)MuP|E)K0_v!618_6qxp_&m&`nulU z?%pQ1qe#sP<25misCN5v_5tsG;I&`s`UKGb*FgVmxJ<2gsZslsZA-`6U1p%0B>6ju z7uB0v5sw$us!-htsU3{DwIC;F3_7ODjXF7o#PgbxkWBYg-I zGO~8~nix8FxOQB}lQB0QK5&#J>t7dm&JjVYE_ zevDEqe}q|a&(ay{Ke3!wJAYiK7xW|&DwB<;O)_=KEsb_)w<*H^xoMdMLo_48IJ8Ef zh2$}1UZ6QzUw`85K>y#a3Y_#h(*LS+Ivt}pLjfCj0W9ar71T4>Ixe$r821duWRXcV z7jiS@I+6=}DS@#q3Dl^u*jy~@$RecU;8lf83UlXBD)?Nh@S5>KBhH^W}ARFpb zrj5!2>)}We#c|Y15j{aEovWX`bgW%Y3HCLEiCH6t4)!imLB(1#b&2$V-Rh*Y2f;fZ=C5zp^)rs9tk>GGp?zrISpc+KmjO zB1B*P!*SSiK3M>|ulWPe{}LqPG75Yv;lo#V++N)*vQ7{0Y)W&MR5*cOl++23Op z>@wcpvBD!-U@3;nV7VP~(ZLGJm@hb0bXOlf!H^y13hEtn$`wn<@WH9vENFb$oK@)T zGTm9YHV47LMoufoM#13}KSGDO;OqDgHhdZA|35(gFH8SlQx#Hj&a|D+TLrsVaaJsC zE=SrCg}Z!LZ`VdY;=#K0>(_Vp^lWUnxXCiF_ty+>lWl+xB@4fgSonE$SopDj*U!d1 z-$p;h^E4JV0?AA!IW#iZ#@U#3GK7XJ&qnn-pN;yj%b$&#Ui&i4|M(-&|ML|8v;0}< zcKi<~$?DPmtP3zoudU?<`bpBipGg1wI;1zd4{r*b9@ui}%|Q8^zxg?As#E^Vu!ve| zc_<3#A`En|OqB&3G{K1WPW7 z^#LN*3+fQ-(ib0oB_1__x8OdV`v&T;FVLy=sQ$5ZI*}TkBsXp=V=+~Dqt+84B&y$n z<1@|zRTt7Vnt@Q424gaN3H0>l4-s6DFrQs592-?nYrJ{ds-2Q0z0L&#B^TWiL zFJi_#<*DzC1O5Lh{eM-AdgWv9yA*_IEO62>;M1kA?7(MrK8=fd^{tQ1kf$W~MEV8d z{!o1|b3Dk|LKKA3IU%%<@lgFHTonyl!5$uG_T^e^{7l~7Z|CWI!iJ>0wsEQ#ToMJ< z#FQ}pVSFT=+?5&okap z8MVnRn~gC{SrL*%rP5@+lXxntmu*%VjfQfw%dktg&NqxZf$>Co(Q#7+I*Za2dTwOH zx~M3S&S?e|ROqWsFD9H!WiYr6=yz4uRZO}%)#8bM_%n}EPcPGlPdK%rm{Q2C1Ow~U zaYcuyap8*%C2n;vR*REGv{e+9)hW0YW3IT$xuG^jNaJ@-E!Q>!AK{Pv)j`C6{JW&T z6OzHPGM5F`SijEvWn}ZV0YAGOD%*I%3@iLTY3VLDZ-*@%mzkAgt(-H)iw2DGTd3$*Mz~ zkslK2i##+@3rHW3JU%JC(V)G~MPW)#pGUU1qQxs&>I(_Es<1g%Tu>gqUc6mjR(ZsK z=VNgGp8*F=;Co1akqhZ=YdIN)Rnw|=AqJRRou0%_6@yaVPm#+vaA6l3BJpk0p?TOr za~hxajCPow`H7{&?HyQf0?NbmBXpSla~&-&7`*#jEN<|prC(6t_0PQ>8|$ZMYA_BO z%0R2=@%kN8_7uds7@EyF1J0ykKt-xaW#jEkdcvrJ!4uX!`#V7YlR*Fb6WRYX2cn)L zwO=ZRWEje0kZ6`cG>AEhh4NfAQma3%OPJi-xv#FECaN{)h(#jZ;YchT>Gjzd)i<#X z9m_r4Q}=25Cbn^@bhP$K7b^`b0Ch)r4Cm*GK^5Q!Cr0X4re@J0FU!S2Yr9gx|%%6!<#-R6ej*9qU*(7j>9x(EgE@Q)nAW2h*8ZwL=rw`0+VA&RH< zE=J$7e*@6}5{oR0&;Lz7$gjwYIgCE~H1p{^NPPgoqe%EjmwcHvA$8GQlL4w@rXvvAsR2m~9V z%XHAIoK0>Za*ITZqKf6nWCqQAZmNVm2hos&AAn?CwBU!%F2v6gsgOK=|5t(Zt5yCl;$674ZKTW7*NX_v zS2!kYb`t1ZIkfWRZez38eyV&WwFo1g$V?6-`qO(yMun>aKS`wIC$4;=c~u-yGSw=( zunDjfhOFlZpL51SbX}J@2xpC5s+sA>`AST&T!EmF9g1s-uA_!ILix*9&s1M8K~~`> zW@Trd4q1XTp+sGy00*Yc84y&wvF)8HmY=ZnlJ})vVOH55|KM#F}B{OFa-q z#Vf1BrEyJARYKZRc2>ZPOv44r?yBWOXXG?z_yV~9pYaHw|7!!3|AA&6Sx}3T*?O9k zS9W2#w75{Sa8bKG=phh~Sz2mK9Dsb0qUqx#nqFE*G{xR}_)};`UiVx)oL=(r_h4IH zG*!~0>Euu=gOFoU5nP^Efiuc(vOD9wI)`(FI{cvK>$Y4C#syi9R@>ogq+htdW%z;FvKb_o~5I^2Q>sg*+6h?C#E}s0; zAz*`i7W9>so*l=;Xe(D>`xkw5yZ8w2vXd8n;r(v_`k$)q|K<5IbU;Ai!>JUI8SkUh zjMt2{v~$@z3`6g<&%B+wP3##>qy`e0eRRkiiKj=&hMu8cp}V2@sJU4fZMYye^rQVM zyBST#2k6Q8AU%p1uZH_d8Z-`4wimppq$E8w03Yh;Mf9OC=6F9u$nki;zo{Sn2nT=~ zpju)IKocvkNp!EX9V--(e|DPT{|)u{K6?=@Cn$%>8(*9$OUx@5a=f~L44EG=z@##b z^$!Uus|3fN8j6N3rf|#o91!&&p(|L%f)V7JzD_9m(RXEm{-*)`|0N*t|8c1c%58;E z4SX6LC|2@W(UmQ`Zq|t-2-)O`pgp9CgmeD5bhOP~2-{jpgin%0csU{PJdzQ3UP}l( z7i?O6J|ghka{d*o&tJ9rd_v$ke|ZF+lg=<+4qu;7s5|iY`GM2U!@ng0&-pcTT&It8 zfYjMK{(L-Y7;)$2y3~2vKw^73(b|c}^K~m_P)|>|Zxh;oPKWz{FTN)e+~YfX)CGP| zNGn-ES}0byv|4Cf;g?W#xK`^$iFQegaUpse}Vv#_a7+1Kns zVAy!N^`Treo{IC)I$?^=-u#x!XMp}|Q>NLme1ENg8m&1dD2oIu=MMOx1LgB~SNhrj_8&2t4q1Ck+=3txHhI-(^)g)kF}zP2g#IJe*Jk-Ng1oh7G8 z$*&c5Vhi{u*&1_<(a>WCxmUg+y0Bb^1LMJr*m*2&NQf&8OsgP7eCQH*`ucFI5FSdK zm#Do=E-|yRz#{_DDK4iAc1h1=Km;*44@0b$yf!*D(5h$<;&z_3r}H#=w!m9**0?ya zXlO%E4?MT~1AQBT{%5%OKXUmqjYoFyz{2cQqilJJ)WLcKT}&NC4|zeyJ9RWH0$a@( z|0H;U3rd5sQgNu}I@8mb1dB4zNmcM^DMX2i)8ciuN~*;FLXmZzqxy&j52rYfZc1C`Z2LfBcv*--#NL#&1Fx<1gh5ZV2Pl)OyFUKOx0WZ=hUKl|7qPu+b*U`^oK|600|YS8}A zBeAi5Z2j9s@JqlqaPSZ|$%2(b8KDbg zAt+QAB$wtueoOEtAz8@SCQ%0wV5msGFcKU(aDV_H5OGm_jFCRAo>x|7VYWxTW4sKb?kY>yMF`pKO5-(eI%N%mpyt1wVto}R(dm!vcspW%a47} z;S*xS(b&56RZr1}C(4j?k+F2FU7iFcmmB0Wv_W1~XM>zRe)m^FVc!tgjfSMi?~YMA`OYq4@jD3^8>{&C;H7TL_h& z0BKk+qzW43r7GA5{I5clbGKE(Voj)ZjyZ1m#8-amo^3$?^A!H0?ZU`RTNN42XBV6b za2at`k@!82rF-1>7&I)>)D6!XFlSEZZHtk|G@m8~DPiTKg-U7G&dMl9d5eVIOE^L@ zXIsQGc_5nUabb|G>c9+6RnQ?V@D$(Z zDN}3)J32bayO|Jsz3343qDb%=c$rbv z;Bk|e{T=9k{whw5IGH{T%OP;l>t-#y#Jyorj;zUmE#H%xs91B`($O|IDeQVFE zL{|;5RDzRYGBjM1a}NBpXp>vPu?Zj;z24ewio!7~u%%QK{~w=rdlBe=0o?yC3lRQW z&fO&jY0m{j>w5SMyEuQ3ve(@e?TPko?5@%7>Im1<^!%yyaBLmutQ$72-`E|Et~&wd zUcFrKyOxf(O?_Y|$%+3(ocP*0oOs^82X<4E+P(JyC+_&!ngBcM6({~Ap4vOPD?T{Z zT0rAp-t%eDNY8krTmLU`mg+GGccNPP_rOcQMWlmlPY;icm|ORfF9?&04v0u|V>mUq zcXHd<;NT>+nS?eq5o-wb7IBREQRdc?eG8$2%PJ`<#&=%q8tLsdgFP`sitIBJE-vY1G0Gq2o(W7;EDh*B z)RO@{i6ScEnvLE|Y*VmiXA$eOtY&R?%r9oAy2@Q*a2;%}HAI(^2!t`1wHNFH774;= zdRg5~zSLAN-NeT;g{Tq$av1~ZSqp+inncoU#;l1+l%A8brDA1aa%z#C!noe390`>4 zDSMjdA#?Zz>8j@;G!Ua8YGHFZ9JV#P0~CWU;B}mfq*cZtY}s;=QRu}ML=9;gH4iryiK-LC z^JQDRpWYkO5o)<<)mk9de zQ9S~UGl+>@jZk}v-%raeIwk`TU8E7|h(=Mir{{Q_#6eW^W15p_W;hsH#;d7-G`2F4 z6hjnp1yI!0NkGw522M)hPR{h1;lkcxaBfWs-l>|<<_4WBZd$^T|Fsk0asMbMZ_XC|t1K^(z75laXvii%v~Sji#oIm&tmp#~P^g<~3d zjvX^fL8`N{at@*Y!wrRD?`bSFj4sczN*t+zsrpcCf&lXsMj2PCfI@W1j19r#Xg?nw zON|CQskFTqE)~ea0_>Fql7FJm0$k3@G#Kv^GDLpPA#SM_*KQG1w?GV6cR+cs%|$Hy zG7>+81Fxzi*YWH(J`U)AiKIW8Kyt+j8aQnnoNu}4+M?*B?J2dNrfoKbD9n08N-$R! z^`Fo1GS+eZN0~h64JA}LoVvb@r%NGHnvma_9pIsGlul{G^ZqhkE?G=a#4D>DiaF~o zsNo)=Vh7@={9BA(x`|SD>dHla59cFk3+;BSZR%RvSiVCik{+6i>?ZXxfjuLIh~)Qs zqwg*N{U4>|zhZWonP*KoL{-{uzH_tBugtS7^2r^g9z=U0u6mHvc3oCmaSU{luL)`3 z=Eh}FzY@`ynt)^KX!(TST{WaKoq&w72waxeC0tJAxk%PViNe~6E8^*>oGYUJL|Q9r z$R=b?$Imo|Vwze!LItsEtiA!lNr+hFf{>ZzL7*4T?0E8(D_KcIUF*euOyd&9Yv@?z*sb>dCqO3f0`6?U_YB2`v6i4dtG8q@AKr-AJC{wsMS0{K-@&H(MfrcOX>kZ@D9U7W4VHr2Pll3~fp=B{+PTIHv=ixC z*KpWcBY{oV{9x%gF36vpdw&S@e=N{{uy*`cQ?z=Wq}3OQRIJ~{-O61BQ&pq8P`#K~Ih<8x891(4f4x1hMBG(k` zfHqqb+lH~KgGia2q!NT82w1ns(;;9}syEy8RjNwu2ws$=2Anl2ssokZtSx=UB3#BU z?U$Z5e2ZRqL%z=NdlNzwE5m4W%1yAc?YQHVx4r=A|2P%@<1gn1FHl%5IG}36cnW$b zZ%5g?Qo6@OY8F192HgEb#o#%;_M&{6FB2k(%tfQ0;Y#bv8Z{)u=!-g=3U)W;xSc&W>}OeeP7O&s8Xjvqk2} zGQr^9XPXZsSg4e?_gwY>(Ess3|9?gLgGT8R zUW%q_n&W<y_PFA*L@DNp9?lr@6;Yf>`c-+ecmw^f!V2 zA1C==R`wkXef$5h_a@+NRafG;65Ilhw1qZ6SXv%|U>PJM*;yT6BHM~BVoOGnvoxg2 zvnAUivLv*`aR?dV1lQd+XrarLnYOgQ?)yxaq02x^x9LI)w6sG@JEes}J7v1iPRswC zbC-ADlVnRz?hN1m!!3^Wbnm(M-E;1_=bqIljZfiC3e`p)U7e6M*<`cne}rV?Gy`Dm z{;Fa5>dJhphyctAqPUlc;)8XFqW#M^-Uvhycb$gz<*ED7lJY^7C|(qcC*qOOzCoux z;;!=$LasbMl`6U?;W9hfg^Kx^oUEyWSz=g%Evki%iVDVE(go%OmBy4YT$e%*iok(9 zueu|85b%G#l>hOTOuRc+MzWff)tM&~pMFsh3Z1gQ`XE#Z|D?*o((7_$-My25{|f;BolDFA zxbOmJ_Y=-OTnA^K=gs|@lHlG;>Fw^pB)A_|akhE5H%fKWokq>LPDBWBxMdWM7+so= zkheuTOaA}Ftmu3LLN`#CQ{=uLE3bd_iTmMSBS9ICy} zZ@l&RF981+0{*)iyZ<2~1r2}I^>xqRpvT>19rv8_r2!C|b@glei? zJ9-__!1=>N>1+zCJ^=*x%z?4JAgmYC$$h8?L&l3=$H+scRwK%tYyr`MQcj{yR|INn zj7H<sAXNK*vXQu4U^`4iYTFn=Z*=R=aO_C*Xe_;C~BZrYUd=ft`FuWxiEp0(A(& z`T-HvN9zz)=Z6AR$WLu<(&?LrjxE{Tv^)Vd9jsCu90`T7s z_Hgw=iq3Iw^mSk| z-N5J&Yl~lwL_@=PN8b_Lqq`Aeht{D7!vnxME)Qk1x&B_+1p``Q!T9B@N_xX2RC96F zvN_xGj`#sE7{Qz#Am;S3I?Ty;-SILdOno1odawQ3uduDkn-cvX^)xxWbuQ=b;n@yN zcLFr$@Ji?ep4~2J?r6c>h_ZSyT`DupqlVc7R=r@=g@AweO4kZZxOD07CEb=Ha4Q(^bgMkfi`Bn|5V}r}rA=fLh6q$|fu-zxC{H3~xh;kveazw^}-0RJ7Z|0(_({`+_x!d`#;_*Tq= zbIsXE*tdKI58RKdgq;b6V{zx<$!eq*LBa?wPq92!oel?3o)(glsd#098iKM|M+%Lk zzc9SmOrv8uR@i<1K=AiUjew~BIuz*xjtByumO8|(_go#!O0wjv$qtLGnCwB+k2Fm! zjYM~`^=Y5T<#>`E52f3&#dxi+-RltVfV~sR4Qast#eo04bpG36EL**@3wKuLTB8mi zH$k~SA{P9KI+VKcj=51X1s(uGz3t0bp6U}Sq0U}$c?FRX|P zBfOM0X&5A*ghILq7deqpp*H5bbeOy~)KYYY+Fr9R#q>OWaTXFlkoLw zN~{9ESG!Jn0sa*4G4cW>zK-q5wVyQ_QSMt_Yiz7A(wq`{Oglz6B$5&@bMd*VUb6aRdB z9eO=><20$#o`;v+HGlaAwpGdX4ODT@S&gF?xQ_lK;NNTd|Ld{>pHgC~s6({Ki@I*;q=Wr_4ldsEg3t-hJ%B=f4*4 z-wF6Xg82VGEYx+$5017_rwccQ*iS#E{q!$&_S4FD%smMEY1nlavVZ;0XJT7*Kix(J z8=dDA(_POYdr#P%DSGrU(=zfWEOCtap(PEW0OLS6m`P_-D6zf%TaUj9@P8@bzfAU@ z$z{R10AC-Rf_VS#%6zLU4k#4Z{|RCLQ+2TatUbpj@fOqm1XYNC661hBrDFdBkv_*& z%h_Da`p$iEcUa+`GF?S=Z78}*jF;5-)-ccSr&C@(L(Amg1jpDAcW-C_ma9WaF;UA$ zye|^o=?;7RKF{V3nVVe`+%e2p;7)2~C^w8!Lqj3*qmw=X6-VY#AM% ze@$hfWwZeu2oidTNa)jbNa)#jzy5rR$;&SQ3Hknj+UHNJB=qUno){&NbUYWC)Sp9= zRpL}RlHGPoEWtm;v8CBH))1LSvU>X-`0)-8d;9zK!NH#4;htEmT?0OY&xeQm-}L6E zP6GV<#rfYqI5<2Ui}6IA9`5T($*;2(6Phg^kjk$}`o=H^Ue}bTZ8qz9!;4ssWp=PC z`YS`9;8hJ_H?R^Nl=_E7rm_MzEEAZgI!I5RtF@u9vMd@MuG3heCYhd0Q-vI{(5A3K z$^cqXQF^+QaSi`iYSLg1U~DFxx_cLkxG{vPTc8Hf%=0dI*j%dL&3*LFO91~}Qva`x zDsgNALTBkkCevZx`FsgtL%|>l{(K(ws&-vc^G{n{F7_tYpCfVvy-tHxM(pzWHlqKU zzf1Rb_pIO4)4frb^}&34od(WFwAVfpq^Yi>eAv=j#%}a}1n>Xd0{?Os)LGkDtp>}w zw(Hj~v9{}5TicLXr;70pOe%oIC}VN-6jN+z*(1Qx%pGlKwg7Vf zstqeyne`Kvt1Qp*mW}nku`=JPNCh&Q5bu6U;@xNJh<7JlH-7<@jXi|=md%f2UbN4s z;@y`=!>CE83SL8_1I=fjc0EgocU6$`nKDo?cQ3H{jx)b??&A-S$+eODj-b6S&NPl@Di!qZBwQ9!@S8E9p%`B`zQJ!oKNpOUHFP4K3B6Eq0a zIyG}mD`z>$c=-(YHofn@pJV->O@RLaSHtmNHKD0?%EOi8Ep8Fmb7H&xjJE4%>ulH4 zUUBR^*seQV4^yt5N56}0)$RJ-K&-`*;^zm7y>vRcCqeQG6wx7TlBsp%H_UO2eMgPV z=TzpVSjQzytE=$Qs}(*bR0k>_HiDO>uq<+y!B79-u@vBcGvGgoYvxqpQxkX{bWPSDf~c|s$~m?kT>fOX9Lzm~6SXOk&=WBh4fS)O!c0M<>cg=ga6D|sF5$1}efzTj z|64@z^<@apV_R@AwXt zXdWjgE%GCB=DuumFWid>2KI4)tZvJ7ou<)Z3?N>dZ0}HOTXJc;mt0kw_GG9ry1+ok3gs$>V_k9%=tEBfhE5r@n_t&Kk*| zlc^FjG*ZNzS@4Vyi>_BuVt<+fpyBBshs4~kUn34c8wjVaRvVi!UjYn~UhEe5!!_ z&&>TxDB_bvEs;G#1-}LgU-Jx_brTqmo}d*-uobYSGpr6KB%ClLqb`e_Jw^DTiNUzM zn7~>fq45Az^p!GR_r%}-4Di2orE5hN@lR>uR2ssZIxMjq#hy~Z++4YoFPGFnd(F)1 zh(QtDbl*gKMf_OC(cVAl(U4xm%82~JE2c78NDTO7XxpH1al=6v@ z6sNuf+Ewf%>cnfaWcs5v?#X5ActhI?*Zvg>V{8BSl0zl}TuCsrhl!zmt`0*x^Pc0M z!#cD-uiTG9((a#4U}N0yhkkws#{XR=_P^k8e;y9(2)1(JGF8|Dl6y8~6g){|HaCHP zS?nTs5A^U2jbE}{_r|O@H{qqvJe9pJyNfG@HmQ2w_(WY}>+$zDtT-#*uFL25d%FFU zfWz|0Zuh{ay!5L_eCmP+_MF%@FdH}6K(D7~HDLR@OxWxBr+Tn^jxAvP*X4l!Da1dG z<@=kJo0Ulv3zdbIDGW$hkpC};{6AlZ{Lj^Hycx*9=RK8|qZGLRp%byOa-gp|iOZvr zkzh0sk2LS5W*YrCBs`9pB*q_@g>pm=c}g;3CdtDbCDwwYShfNW(i~G@eIf0vjh|du9IrS-~GQ7%s!1VB#T`KFy<62UjF* z90gk%)x~Ylf`?xvQ#1o4NlH=dsV%50Z^^=YloyqD1eX38p|U}UZI1+px!(#Ue4dr9 zSv*)$S&aTckV+LSLD7J@Vn+jSX70@)LOnzqXs5j!s2Y~04h$U^ZHaSlSC|5Z#PE7m|7;8j54q zx53cBp!~c~-y0eTN1{QlQVoUUk$q-dH$9UjtaUfKjiqI&OC647>yv$YXJ=;zhvk+< zy7ywi+)Pyq{*Lf~b$}82M@NQ27-2?%vAp^;x_3`z@!(CMj&GmFlx#h+hH>CelevmCT0{-}yW7D~jYxP(E&!IaPei73{TJ>u}G*8Wc_DfWg)A zItdJ|?rMp#JKW?B`rco=I|2XOVgH|P-T$~n#qNHLcK2O%c6Z0kH|!;ciPfKn-Mw(n z&Dd7m-60-OJ`#=e1^Y*%O{;udZdZ+;=7RY1h1_^5SuU`Ma29#?CyG2fV{6;#7$+o!pqQyMh zgzmjKeggOgd;(s**8{s}-@Xn8R_a)o{||lzy9SFAr4nPg1Jrq=)T~8qJV=M?r z!n5c)T_6w_WM^atqD<4&rDW6INpDEyP}p}SZ=|bSF{Q@FbE$~?0P`Ne8hd9&=^zhQ zhv1OXMOGZ|hOgg@=l`Ii)(2%-iD63A`oQidl^H*BUvk96>s zPC%HDo*QF0jcQZ_h7J?wsIC?61B8~DQW4+q$hJ`V+Q^l973c0+l!hTcZye( zkCl>9M^gz(&~daX4grh)!4PC69m6AS(x5z|26<|s<*-0L=vL=!7}xrMd--TAWgl4p zQANrY6JMdJnF^?0IAL=cs^dnJrFuJLbS#unjr8RCTQL7qNZ_9r2*7*N6s7r=-d0K_ zRhbE)$jpP>-Bde}Mko86Sr>pbUpaDQJ&-aT)FmtS$a_H_x(b;%#l*F|1|oj5ucNaT z99gSDb!#LAURF`8^U?ysDcB%wxu)4?X! zq)C&e0e8~$PBWfK>Yv2XpOE3+ZwXK)~)tFmS2-5j%tpDC<3YK= zUZ9gGBp(>U%)flC2{pmpz-Qyix)(*xBEkBIv*bkBlnmJ5P6cp&WG9)6caq9-2$g}H zLjrh}0^M$RBiC+FU%K>7fD2eQkn`w6}6?vPe%L*7^0GuJ>!OO2sQMv zaynD;0w5}jE-SH6=0%XjcvV(jXsMjdVAg-3T`*V)bWwIhIc2zF!7MHUk_9jsI6%|9 z=olRf0?}f+lx+$a4pXhNm+Yh@RP>sx?ij4Z!CYEZEivB>O2LaF2s~9^h8!C-m@~Y_ zOt$K@W(a3@(?o0}&=)j|rcvrr9{wxVNrLr|JpvCsf~cA2e~6!uRHca$22r{kssJ%% zd~Bfd3c&x6z&|D&W0pB%g8bEO0C|NEcF1LT)dgX*u*}*4B&rQ%Ktj6 zt1eCfkFv(R&@f>|m2yI1&1{6R7q$h;vj}=KDv>k+=6#ILXZewxJIqIE)(pNetL&-i z^F^2n7GvNvO`hrK8(+{wEkXr2Km9>w%hIyfou!QEGy9Gi;|HuG;O;647jLt?J9%81 z@iv+w@30~q~x3pdT3ybp!sx zQvQ>(MD+?g3@s%J%;kV9M5B|J%g)Oi;-0b)y|OtF4_Nq371w1&U%sF=X^{uSpm12U z4J>^2g?=hG#ws(EicFif*kpC?orYwOuVz|OL`$k5z!A+2Bvmr5t`zPw^<*RfvR9R? z)x;-s$>d;2c^1h9Fa-Y*OJ{C9EWB)oB;tegF*Sb~<$+_XH}QtwJ^=WS$og+3inT>% zEI6~K9Ew|;sb6Ci^YA8ux_Cvq%?}3iVCE`3a_eLDm3WGK+maGWN%S#j8*7T{Ksa3_ zQV^3{p?3WEm$;u1pMhveGaO4nk_0*9PG)#$AJ1 z87$&2xTP&sM0iW$!CSH6rI(^IIFqVkK|t6@IGj;*YL=>y*m$b~PiP3NKv3br9gpY? zNCLqFxlc~XS|mKk#}Fp1EFV=~i5XL6?+dIYm6_<&n!g6f`;ZVv)k}cT$8oP>UeC)c zlVTq3%Gr&dMd-Rlg%-0(y!*^Du@LT;fpr^R5BR@I;9mxzi(pbw@wTMgp*^NdEj(Ii z5lL(l#cvEgWq#C2{PKuS@kW{&-)6m;)0MysX2qF!lxSQm;gw4j#wk6P#&McQ3_(MC z>V5}4~Yt@){mOP3kS-JPBpkZnBP*W!meKA)K zQ66|aSHQAmId=P}=}o6Z&2L_82(7d1VX-a~mBW;b10>j}hb;402RW{93)cUNn)QFU z-yW(;cW|uNjNK2-_YpUh%SDVg2Wr zz`u|{a1Rv;)Aq92>>I8vNv2?T6j*{fR=jyuW0wu7l4s(5Uu0;AjG84NcGyWWh=cKD ziV1<8ETvNokrL=b?GDnq>?WL;6lJ-sKGwndT63=Q;qtH|UI==U^<5d7NX9}_qK6eD zMo(3A#Z&a~GX>1Qo8|X^5*3&lD%{_x_f@rLgLAsp*y+~| z7#+Vznw4;PAS|gxG|oA!_JDLly1BP}=xy%;{Kp0UtIwuuGhQ}~SG>MgnZ}gHV_`^7 z$MO*ur9Oksczz!A_bVbhyr)=ezF#qXtv?zW5t(_JfXw091;C>27A}}JRdBIGQ^q7i zK*7is4bJ$LRKjBT$nbC|UagI%#KEKy;INdwBz|%hstdaZ>5HcM-zekIBM|O08N4{c z2;3Y|4_itaVtGeH+mtBqB<$hTi%)`XQvJQdG5ugFo5U~|1GN$3>7?RGn$y@iB1H0b zQr_hHTi@^y;D1!$pXCUkjV?-w6W368>x?zujCw=nNSUdVk%n(T=rENYV?16Y?5UCM znck3BEFy<2y7_>#4Y#2LD*$VjjHfN5)j%-D0eLVdN~j6wBa~tF>e>lorlWChOb`j>_m!v^>kwQ7U_!M(@eh%wD?UeGrc{N%`%&NVL9yFXbmywu>PpFzL>RCSb-atRY zEQKt`Ea~||ktF#40GtU{aRyuzYUUWI8`h*f;qF#gZc`YB7|tdP?M~C^{86-O{B( z9nWrfH5HgT`kXVFUls^7@+kTi$R;a$aGjy87Oky-!rAlx{RhDRE`k4YsfxO)(7`fk zTX5D?UE4 zYz}>v7!#xf>1Q%GwMWQJ?aZxhXP}$f!82C2ok4DDXSh1`3E`%OZ?Kp9fuYM$JkYlz z*uPJGEA2YE)Jg`QNN0B?&h7#HzgX;l$#D~Kt)6BcTpmjgYm0r{kM#&%ko%dxtcx*j{k>0M{MTNAf2~!SeSYhizE<&c(i)VF!)|i;*D)p|3@<6gY zjsbjPk6C03cAd-R%Nd!0Q`wCu{}@azv@;1)aUe9#yu2t+;hodcS=2T1q#4SXow|FE zY6+rTeweUeS0EY=g$F2Q0Y110{{44{NNYXX~9!?@;SOm6w;}KmaIjle8A<8I!h>ka`v=1P}5JG zC!Vmw6jx%j${#e+8I~vl?>;PyO%uY9xS^zZ{#CY!AOvQU%#1ssXL$^#n4w5b>(Nw4 zNEUc4l$J6Bul-%w3f89=1T&lG{!GFwVTk$2`?F@sxhT*|XAUm6QdW|pBw_Ugu=4$M zQIXz3N+_a!fCfvx`ehw}|9vw5V?lKsB3~gMr!M?|C>Cs1XeNYW&8}@n2}Kc2ET$m- zHqscXQS?f+PJ~z3f#%cslBwWDEs>~<23Lp9Y%YO!eU>_9E88%--?zc9yVrNcd|e$q z`e^n*7Ts-FCXx2)ZZbcD9cAXJ<~L1%+wvHXRmF2L5D3GiRJOa-Zi35GNKu!m^R1nz zw1%b^M@1fqgDmlLq+#fn^%q?rM6%lVF`;@G-7OzxpC&OJ1hdx!*vbQvHO0@^?fbxaFg z(QQm@cY2d?bU3o8P{ifko(PWkQ57d_;sUO8KII#ieHrkdkoc!HW^T>Bz>p_0vmPxi zwV*``ij;o73a^I!nbTt?gR>;Go0Q$C2C z-X|G&-C@`|j+5UU(8M&FpeEUE%+M4Om=)MTk2APwqA@^C7DcBv&lzrCbpS%d#qRyLLjh~>fwgZ3{O_0X zzl3BZ#T1nSt+CvCCQZCOO(C$g@Qz{{+MNh*@Hd8w2^X0f&2^M}izMmySyxj8tJxm= znH;EKdV*zF;f?&t*Bt*fTbT2z{i5c)s;1Dj#1t&w*PcUHt8?gHVh-JlPGQyfZmj=m z$oLQ0qwy(e_Cr%~wBkaQiSb+=cpgpW(#Dj@N~UVFGx3;sPQb27Mjlg=WO7@Pq+g{i z&Kus4+z|OS&nz{|YiaOWJGc|=FUJ%!?3$n}?93EE6~-pgJtG72O2aVi2vO5ZXE9uI z3Utn6KRD-ms@Imu9_&6T1P*zn+-hB*+6!%Q7ysxDN52I4ACvwcvI~DRw9DzW*Hi&d zw6MsE(t0J*8=Ige;#=2PrIc!@;f?HoD!SS>iv;tV3 z4J}Wm3keHHWf=#h*1*&cmcF^oQ3R=4PLo zwlEoP*{U)$Dn6AKCvfY1i91nB649i)0;x#*gMCARXpoHiHQh~%a^7}Tgyjt^ldSFd zsWm=Hz4j!v+B5Xntq?_eoeVm~7#Z{yHWPSh{3#iUx!v`x4~_Z(|4C{8GxP*@U^c!I z6DSG@X2vK`hy+*Yiwm}$UvL?i^X~%r_t7=pFSczB2@vb+8bx84u_^)VenkjE%moGV zWYVmUSS2yx5~AT~Jd-jwg<%jovnHBzXYb^(7X=nNA++JzxgF+W%1vg4zqO6s*dx-L zyIpPo4x%W|kSlG3N2czq`c}Dt8kz2$>a}qLyESf9T{*?~mtOsvEZ{#S@Xt$c9I@Ra zWqT~2AsiBrReLxg@R*D`Vzj8xYa*O-aG0@KHl}a-%!%~uh19_`Ru!~p_BwGktg1WL zura(%mJJLMOQGdBF0$65&t#h0*QM$KTPJfG7h@MekG>5$W^;Hpm^#$0xE!$ijHFHK zFlmJy_4M|%5G<2lx}+35(s-H!`%a>)V5B~*B?gSsWSAVVb&;7=V~@Sc+`Ke5-~fXu z<~>Y-qRd^=^eL~BPAD2eXO*87wV`JEE|^ST(VkI22@`5y9mjJ#$}P*2V`$RRQo6+Q ztQj)~xv!w#(WZCtJxr26y)GB(r4}U0Gqi8o>oYa|YXg(tyMJQ~2#$0Vg zQ)P-(#6+wP^J0-MnCQcVg9!*i;nAQz7zp6 zOmfN8V`DdA{)Z{K|7%Lc_`Y_j7$F41{lG@(#YVV0oJq#;+>(gJue(8_NQ~z)9s16| z&}cBm(AdG3rjL}(YW~BT+X2CDXPCNN;6{%R2HBh2-@x!J$}iNiYnR9)9u0{y1e%yGPz)@EI&D0~zjzx8e&C1MzHzi9&f0 z!$~8?4|+D*R*fyZC2d*B-^rJkGdAvvF4A-h4W$$>VO7JChoAiU{{a5e(*8pQBJCl0 zied?M^deOzadGa5#g8k*J0_c_5I9+lm-%ntAxY;M6=mwN#H^%DY#t;Tg#R~_-+IPjnAvO^p!Q7GtlSd4A(`sP2fMK&&$K)^YSP@UhRE=d|nB{rU|6i}PXo0BZ+?x9Fz#G^%nBOqmZ^j(9YppkD>!_F$nT_1}l z27-~nKy1+Aw9Ps~tWA>lLQn&M0 zT%y8)vVDte3V0DdHz3znH|x6 z)*tg5C!;i(J-;>zl(XclQ!8_gGwa}kpM4VWpNIW_fva}@Upx)O$?{t|S-x85Wbu3F z4uI^k&2MATDHZT!mITL6iJuJ<4k z|K;ui_EnMirrpk`#pZU(Zg-xQ&)khAG2ukmU8^*v-cV^wjg`jS?WiUui5Fg$H=s1z zN{NC+A*rQ|hbjv#FCbtUqM^KV$XpOFult?Tz81-3SxjJw{1&!aMbE0v9Z_U6j* z7Res=k=XXXqiz3<+v{w>xns|QEf{xw8+rJezu@lshPnkm(ie@yV!@d1{?}h%{r3{! z|3IDdzp=TU*H_4)y~`}k1WZ{xV@zK8)Htixs;eMNIL(%DtY3hLh30yTQ%1h&`i{*& zRp{XbKdc;QIB>k?fK)*bzbAV5_d4`&LjK0Tz?FY{_J&^}LFj+J9vdS;oO;n01_A$N zTm8pXcfdN2hS6T+baH1SgeQIYMNs&z<7>wn=o*V;7NWEantX9V)ro&6-VazYYu1t#@}|>K9ATt|fbR zV^6=er?_+liqt`_`!-y70NSyL`Qf_w6|VvOAB6pnMG;S^ebuTDS)jXN1wBF>9vzB@ zuw+v#9u0*D+_WONARc-{e8EMoY%O1*>R?gXn_XY6%(X`Su)W0A`~z*xZ`RqGZBHC4 z0;|5l^&*s(+<&ZKTa{IRtv3YHt%H)3axSNur6~y#-Gumd9J}F!;CbV5%LKTwR}yB|AkyR?;Ue4^w;jMp7?W> zN=t|XN)SZ!MfxicyT=?c3P?7KV7~K3Vm5T27UU5aOF)F7Hy&3R- zNZS7!o}4UH#_Y=gAGX(&dH-g4ISRRhs5vZWuPx_FEIV1Lz_am~1wy6kv`F8t!6JA1 zyM?w8JrH*xy>L$w5bI=TO5!vt;L7ZA#QQaTYuOSb>UbgyKB1H-!b*KHpM{yqjQPG} zC}7dUtr&)WWsKsR$ymtS3v6fI+@G?JIj)sF{ z_^Q!JJm_Yhg1h6G7t77Y_0SL$vU)5*0x`r7Wb9(^rddhkQ90oTacwbwHz&TfEcHe7FMm@1WS z-)zhP{tpZMV?Wk$eKS+(5=EY5iaCGH#CPM~E7~vY#0j+Pftaq|)9`2MHO99l@Aay+ z!f(X8(>v4q!Qb{~)pM<#q|dsY%!zk6nYl9WBi5&E$~0q|u&qI(vxNydS=yg{@&h*k z{;w1G|6iCeckAO3yw~`BaG29#d-O4K>02VFV%J71Jd2YVf@98Q>dU*^_jY^yKF(}pV2QeDN&Dw4Jn>>5Fx;$%V*LpT?+=p#_mN|9R$n&_K%_*81#{;7W+UWgd zmJ1*SAAP#Mi}|eM2RrTz?-gq=+}phmHYfXY{l2~aeQUWs;~G>}s5{ZND-kCWf_}sb z;>Z#`?|jWASpV~gJpW;VBts(KEyFkjj!RD_~m!_;LHfPI7J&pC5SiH<$~(kA;RuhJvygMTPg!yzrSUl?arN%V~mRy_uampJN{8 z2`Z|pr(1-~ABl#+Ln zh-1l>>e2l&)T9>CstG%qTlU(^JOmO}2Hpe&Q=DR7E}5b!cWcAUQ?5t9^kTmD7x?vy zFXex0D90qYNb9B#T%>jHzXl`r_jm3`bihC3`#tg;!-MRrZ+PX80slt<|F_Zp-;dwz zXPND-ow@nH3gqN|B)g8fS!P?7#gr@6r9ZFC*S^R!{DU_majSZgZdKo|bE`V}y{~_O zT(KTpfJ@cpNA_b|^-}ep+lNM-y2P-#oFfex1Zi(LlGqgu#e<1>B+(lR4@CyBQeC7k zFtkr+$(trJ<>FL=tLOK6ET7F}Osp;@e~g)v)Mh;#6bukJ`@+D5fd9W2`#-t|h8u_x zkp5r{i~J_GhlW^oo?v(Y%Ph$TEY*hmI1mg6qk$pw!C)j7XMf2@SbP}34FuW8$Vfai z9C~pun&^{luNn=)Ecya{gF&9#XehvDrSC<*_rAeEI2;_J2jA6=&uosQ_%bUf8G8vHwzQ&lkIi};{0kyMfsuk4~ zyXH(Gz3bO|j|2X1koh0rmR_|?-0sP0$-%o#!Yi^wh9xX%S4eR|mzh*$1}wdp0SaI= zg0&b?;i2JZMdic*RT*(^8uvIl@R7=4=JY2`Yy zY>*l)UuW&@&QsK?$!}TC>85BWJ^kBPUN8pupA-0Ju)G|WQh$QL7|CgPt8yuw!3uMz z+)F1@EdL4B^zdd_-c6oPm4Y16LQcEfjCU(~c)oPr%}mxz4ZTx2)C2Jku#`m)JHNat z8(>dxMao<=#GZ(f&`m6Z`EKHkV?6rZ0O59EaCAhcXzz@zA_zx-*KL+^! zA>v<|AkBqlz%$}f_kFB_Xm#M9Spm;J3~f1uFEpv7qh)PQH*a=P9pm0vS!h{c0|`(F zkAEWJ@jG>d$1_fS+3P@f+~C@H9E8VhKYjw+s>0)MnTI-hr#qaB^yA-4seBXUR^PKv zi38kgrioxB+b6O&1$I$*ze*fWIG!+7{KqKYz9^1swEXeTwMx|BI0Ow5~`@YWbucTcG43#r~z2hRzoZ`D|BC^Ji=3{J@whW> zE%Q2Ho`UcGnfUHKb@=Xi*S~xZnnHhg!$;5*I{3qjv9Zc{pCY}D8CA|Mi_J_%-r8$I zVw{(v+uHL+3GY+waK~dRI<))ks})>TmD7_F9SZZewW>X@Cj$n)O|_FzwlO!qhiS-UB__5!9!%An z&tSIuY9WFr`Y~@sN+IxCz_2hli8i#{qEZ(tCsa%^zsDp~!t=wac6uI`bE(7~5g1oy z2;Rd=UeafZT9-Qb^nH*t}Q*?o2(%FSkTU* zEn~dyHrI*sn%y=ya57OEJGqY%u#Xb#Z0n)0sH|U;5o!rDkWGAC6~2-e#wo1|Ca&&eJ-m1wlw*WYpYA)@E069?3|ebcNU!ee~7bxw+?5& zaQm?jk*CyU=qWXF?^D=TVeHRY6^r-x2X`h$B2J@prKgk$Np+SI&QUy%O**IKLW1Q@ z%TO%}HF48T@!B$F;m+kyden9Xq6D-9WZCKj;PHNU2POWd(cK+Fpr(W&Ab1@#GMHK0 zEPZ9>VOrX!N_i#Itt$MNw|{IB@c(ka|IN6R&HG0F?fs}$TwR%O6|+Dpg3A6vRQA0( zRMv6r%O+jg%Cqs-w)=Z-Y^l=NS#%0ni_AwZm*T5Bh#&QDJ5Z*y|iPRCYb9oga&6J6J?+L{-4 zg{k$e#c86C=hQm_=acErZvVk=S)O@$2w>F);}Gn7i+Q=l*|0+b$2)P;hfw~1<$u>@3cVWX&ETV7TykU#COYZ|BLXk*9 z6YUZl<+Z_Vuz=a3$IFESFs8aztX-nSzNrmnlLd^wTkkb8SpUHeW>cNnEYp%VFSyBF z<^{58G9saNe}$u-89&O&{*R}f0~e%KuY&#GkN9`Q(tt+_=K5D+uJ_hqu9pnHd>vfQ zuK4`iC-Ds5|1AtIyjSI~7m?Rhr1#2TUpz1{(A-35GV%ipz<7YMcqNLT*Se630?3B;R3;?7v;|b>|EdkuotO*Jb*hjA3kM$p3 zZPx#trMDng6CNxf(y=SKj%8geZfi?nQ99)AUCSjsSRI3M2}-aas=#tYa<8Cnd)iCO z-^lN^|I{%`|@?b`fWPC3iJQI2KfIw=>CW6X}Z-SoSLh< zI5RYty#5rB!m7hZni_+z|8;9=kYt>D#90k0lZXEfT z4fgWI6Hbp6mMw}Ya;LkAn4 zw{S9?;l9sSK8*_2{8xUCja5R}hMAR|O^Z*io@EOG+e+Axr3MwtG^oY4MNg>2H?Joo z3VvHtL3vp9F1jhF@+>`zTJA`*Mq1;5($b|=9$(Bbq}dEZdb5V1qQ)(0EC~!upVju_ z(`6}UgDs8a?=h(yC2=bE0KYEL{VaEBXghwqO!xcDtf%l4*a42iV94yOJgKP8(P@4w zcFeC|@W=N7{@(!j-$VYNW)liYJw&7Pgrm*Ay?SchR5{)vQvfc*Pp%tQ5Qq9cCA~Ns zlU{th@>fcFan{zhHJJ3`=$dtHYgV?cp`;gU>`5oVrnvC6h`HM%^$j;&I|?!7|qs@Jl6eW%aU4gYO` z|2A#h)M@KTkLq=9?``+A2jIWHc55$q&~n-zH81Fek5rDgNHRc!Vvnq(J@SLw>(KA9 zSNK7i>pA(Q7oH3Fzgg!0TXEwy%oy>n*jFXz7YBw=M-~dl;(>6VgG_}kw;*R5q-caP z|A)fiNPn+B473B^?g;MDYz;kTL5idd6xAtE)bHWdpNqP|4TroECr`v8tgGB{OVpy_ z#={0DR684HA%{;jR$!n=Rj#w+g;^$J;#FF@&V;hr8~|hvYI*dJGh4#tT!Y4x5-y)9 zPm(JOOYMjLx@;)sL8w}e*=eRGGiP>GE2u^C>fig}*F*sSZxr~iLAx9lSETMhhtC|# zN~bCAASpdIIs)rtI{Di1x5&C;9_vDhyhKEj`2OLcPEESrrb|jj;6gd8w9L#hk;M{L z#ylqaqI+0&bXX%cms;QIs$U`n9Fv!fLG^qNkkVSi`V+ho-~^CWNqAM0Cns)fUgSi1 z0ZYY9rY52 zlsn(H^m11~2aCt*&F)*T1N^^9N9V z#qTcV_tJ>d6lgNgsWw$c8cEQPFZSaGLuYSoI}7BYl^;E8UE5hJ+s-0+=qx4=fv9tqYt2o)Cjm>Ti3xDzB$>rK|QsrjXvt20foN(wOr-zhzR=ujS;H4;(=$;m!+=_XXS^$AC-nlGc zMU{n1TY^DQ-d9<;?6Q`jytFcZc_U5t-8A$N;Q!X8^FP41>njUaGz4`~D4(b-1bUrk zJ>pQdR_2Mb^ap^a2VzbH5|``vk)5I7F2{42s?3M?Bq-e284LvS-pYKer^beU|5o5fhM1a*Gdcp!vk@r$-rH%7q^}m2eyBtmv+A%-!tND`*&65BN4c*I?uBT zKth!Tid6)era$N`vnN35hs_q$>*J{r81AD~u4gzHZk*)5`_&cb|NYh~{KJP$mHELy z)O5LYG%2l8A@2%@Bm)o*RVuB}8$gI5u{b#*R3PhsScXTU!Ij0Hfft<1#(Ad~C*SKoSa8u0(Nrt?49L9VRK?Zh-3PJaNzYbx{X4ksyY zw10cEKmvyy??dQ)?69e*ZNB$ihgs0zNT6v23G_aEC>k0V2s+sO(D}3@i9k#qwIidw z7`fd**W1gt6#@VMpyD6??OTrAl$H6>XcU-HA|4ucwD|zYn-5_Cx5Liem4$w!rxtzy zO1v^3>}v%E0!dYl4@85lE$BNc$A^Ngybi#)00fHIl~mw?em-#5O&Z|;?auc<^t!fk ze5dnSF&Hlg_SzB*1QLa-AS!r(P4|Uj4$drq@dn^Rk&zZoa|F_J6sUHmGs4CG&pH}+ z$_%LgyJ7D&B(xuX>qjvE|7}a+--VgQ7lK1AoLvmc1YDYS28SX}WHt%p=F0r;VBct* zIh;2q@<pZzQHD;K;M%O zIi)h_JYT7xuiUO3y|(Wj-~L1b@c&QE@qcJ}^>Wm(16CVodgt1J99<5hS!F>~R&4>w zb`TUWPR$`lVnBxBw$p;p0uTm{!okz%;rG6iUVS3q{~h)456@;Q$6G5{0Weln7DC%w zSs8+|29AzkJOMZ47Pi8h@TLtH701_FfN|t7HxfIV!JTmXa!zOj;^WKV|5cff>EAu` zi+>OJf2Y7d)}3i(VwKAAKD=u?)te!V)8UeA$-CzO#-*sd#I$rRz__JyJP{h%xxSTo zTvnOqo;fW5xvH{&BD-S{42lcz9SJ7_(P+Rtea7!Q_&dP=yBx{?(Ba0CBR5p+>OIOc z2RrDF{jWUAGk-elKi#SyEy(zIlsg^&!lTXAd^)M^Px3_d%0T>AoK>J$KApnpAmAM@)&f|r^69=&H zdJ8aeHC*sM=N-WOZ|`=x|L?CH-_?TDL@-XR%#Q>d9~c}+p|UU>*b!_+-vdxSw+yn* zw#s~O)UnZw11TSJsw#rcAFj+b>Wlx6;m>RV{J&>W{KFT2Uzv-5SUD6JaW*di@den^ z{h`s}kYkA-fV{mj??~xw0dhVH7%lE;y)us#Olse%8U^wZ;4Uq{%?@}Qr?xo#zb0OS z`9J@kP5=9R*piWIMv_n&t*;QxKi;vd?c z3*rPfl?B3qp*>9-SOLaCv=I#ig%cPh`E44=`zs4kr#==Yl<`U>GMwn$6L)5$0SLFj z0q2}Ua3E&@HxCR8KUQZj1}n$0sJ-4m9M;vpzy9lh|MxGBfB5FLsOatsI#!zih>KA3 z5*JRN4t@Z}dn(6KyVcTlx)Wp>=Vt+dc-wM_tjWrJJQ^Bq4ah%M7Giya!Qp^22&=yM zp7R0!AF!SOA3~caCgF8zx=IDOMb?N;8K`~?Ffw|`XZy@ zrO5~&lq&O>=EFIMK_D+WgsF&wJA>h76>iWuakUU~2Rd3v?Ei|Rj1-;rUnn^yf;)~d z;&lQ5y05Ox4+n;ZoZnp$$m{Xca1uME0{OejTs-7lw}2o#mHDf<-t-S6e?a}uhg+2Y zq3aDGW43lR$MKgX)7RlxVAxrA=>37p@dUC9$Er4fFS{lvp)s$N=3yZ0-_j{*KavIzd+@v{q#PH^ZsbQs^j(P~2P>l#;N)dTUoN+s5U zMG7G7KN=h!i96J0L;p7(ZNU-+{r~ys&cKk&AteC zrSJekbVTL=VX`te+=~7TK>TZ^(u$4>Ak0)sRoB-t0 zl?A-TfXw0WP#`G12m3?YoAXANeJ`oZM-srpBH@1L=K6~(3!{CG0-aPS;mUk?P;qSB zyZh*6fd7xTr^4D>Hc)9DmM&?Inn|$^urvsf&`A{p0oD0sMcWIsSikWqwDTcP_W@{rTUqcVUR)JiPL9v_h{V!P8*0!>(&9!Ys8~hg0ux&gV_98P`gKNC< zw$q;N+IFhzw5NW%9I>!SGc0uX5enTsXKUNp7`pq(v)8qqy|V3W3f(=MhwiEqIa+z$ zif2E2DB{RI{DkKtuL1mjvR3?04l#|Pz^mZ**{+k$!r!ZSSn%0qSn#>CGA!72rNenx z#$Aq7G0)hg?J#QErSHGyk`Ds@|JkYi|9{I)T@S=Fc4-@oChgKE9(x$`fB(zk_rL#p zJ2i*#j9uCep+&oN?7TN2|NoTC|MN7pQ@1daXYA57fC#(v>mOc!1>pbF0{>4}J9QI4 zp0P{YAS`B=e*LvN>VH4ebo|HvvYomvjA!i9Du|}-()T>}?ppx=pRJ33*VDsJ&7nMF zm$m|F*)Dz8O_@If{{L0r|LJO{UaaFYc4=qhqh0#@ckjr;O57pv|8%ueFW&hXyR_50 z>xZwJIS=svIg|gpo|blM=RlsZOPesN?b1If7v2K+|GYE(zw3X^PF=hAGj{1#?b2V! zKW6~&{{?~nr>mX1F%Zw#r3Hva?b7Gm{H{v@|6g2c|GWN=?bHIqGj?eklosvMKCQe9 z@c(bJ{_E4!PVETDGj{1}C^ozF<~`5-KH&e(mhAuk3wG+pp#1;PE`2t)OJ8CpV%A+3 znIBGAbEJiw{H~weJ(~gi-v#(T2gh;!U^|^dLSHwaxq6SlODxJrg7BDm`ezTkvqFCWS zFI63DvSMyiP;WOa^{0m`b9OBJ_d~b-1n~bQ!2jh^@ie!R+Qyt-A4|oR^jHcbZG{2_2WQT#xRq?M^s4&TeFHM<3?s& zly?RK$)^gKGd{&DBW+yog)X|gH#C67d$3IIcpA$^E?t3HOsqpG0+~&fsX8hvN9cwb zX*46O9tY&?ZXAa7(BIS`cLPEFz;H)ghyk ze?0ePAfvuZZ$d`n`){m2_al{zZeY@jMnQE{_i zWG7RM4Q<%cB;Jz1v%E$&=|zZ36vN~*Yxnzld>eXv-L|qc-Hq}Q9CLg26a9eyy8-_f z;yTuwgTh9hvk{f>t*tVkOtoqvn#6xWrnzu^VQIW|90#KtPhUp?F# zZS8D15g|A^Td3wsI*Zkm^s!tyn`AZQ#!Em58LI6u>DT0u(?Dx}DCyOQl4d`YV9v{N zDE;P*!FuH2PNM}oKKd?PZd!l+3NiYQufavfj%K)F@nZH9V+HI}PS+9&} zEy((j8lWxppc{i-IH2|u1grp)VS z?{1R6g48#a!Wu&$NG@@b+$XNcW&6!wQ*DTdf&$GEt@vg=whp0mn)aNxd|^5 zKd8WW!<1lL@#oNOfd8)p{_)m!Lfxq=65lC4G@!S%`hZSB2qzOE{G<*coOahMz5wU{ z<@X#b;Q2rDSSL1CN#PSQG^6wCUu2MNb~5Kkk*^98RsBj(F?20%sl28q)5Uzom}LZG z>14Larc%6gTOs8gFJQ4&&Cn;)0F{C6)I(U$RH>rIK*%a;Ov=Q{#YV{(GkBdbja61P z%e;|de&*wEy$SID4XOWOb@Y;=j6Ifg zEu{*q;vOrBN~^>y-}^dxnv^|YdVC?gYyqs>q6z^h33c+hUOk{)T>nS+cT(x?MVe?f z%m;A>Jvs+(`4*;=n9e0rJ?c}GixY=|Yxn4}J+XLjSbo_@uOt9k-e5lmzu!K({E38h zbdBjB9il$bJs=JA2lmu$A44^KOz%^&>oXw+&=mB zBY^*Z7x*Ww89KINr3*}9UKd0#j3)ECUjul`^x7UX4kBp-M};$0o{jwUB%06G1tNaN z;Rr3T{Xr$(sHie*iP`qLUHc=tsH*t=ta*|K9}se+=xpK9Yhb+If!1+dtWxbdz*TXarR2dsj13$`|Ms`-? zt??POJ)A1!SdmMgPGuv9{qt!5|JF*^itpjepn8ne`qmAdvhZ>MwgEIh7iJk4z1}bk z1U6xiLlf4Q(C{T{y#PLIy6QG9*AnG}{ji*(mNx!?0OhaM#J6Y@Uv(3E0by!_uVHD0 z4{8lp)zIH~x$Ro7t?ZB!FRaYhqs_phFU0uYZ^QoI)P(*QiC^rSQ)u7(w9dXcYwb&) zgiGCJdrvwB`)2>oK7no3ee=zsNT5G~&R>mh73*9s68lC%a!-KpL}D8W_C}J|pNFUR z`x<+QN*Y$=x=0o7sjR0SH%snnvfRDd$t=*zYM|z_Ts=rNhNp7Hl1HD-m07!DJ~f`6 zn58G$5;OiW);Y8jTKakpg(FZ+%|L=(NAArq*%tafO>pIJYRD#wM$JdLq zMG$WFgGM1u%k$P&=38Y4z+VJwT1BksXLVT9IiH#PDX^x?UH75B zY3j$H!nP`F`XTwcICd0+xwMf+Qz|%T4wUwK^kN~M+y{&)7Ef5e?x1a3^$h5w0D3@$ zzc>qfYj(QGZg$hTLUpNRc1uhZ#|!DaC_7y}f}OD5@!rmF0sg-$@V}IKDP8o!OE}d$ z)$XnwRVS@v!A-5KIUrHs|2c&J|Ez=m^ZxmzUe_tEzN_Zmi3E^;Z~z;t1n^68w%G2x z1dVA!5ARvXpE2N3dFg@`9ST&;j~QVr7yg72J=6DPxAk2 zfk~Ztdza6*#q0NZee3nEuAZ*$9-pt>qqncyrLP;-*X^;HqS|BSEZoxc2(WX!_+jt% zCBSd01%9w+UAkvo(GFg=Sq!Fsi_cdDQ{y1)Kke)K^>wrQIzwNV)Ynbx>&EnT*Vu<$ z4=12xN)foZSmgom+RgE_`etMkCNF5KEK!JrzPL5uiI%K5xQ*FH*_t9!i`@1 zKf_$o4g;~Z3`SAq(0K0ZN~NVu3cFr#jOP-^_<0?Uael|K6VO7@^&w;!haUJSwpAI% z@Am{-Nco|w3)ci>^363A=uC`wXgn7Vf_v+p1VTH88|t=A4#%bh!nVt&rGNlGz`y zU1S9HvoYPBVx=3&R1p)27bqa%vYBjq^M_Ug{=dJ{wc;9l zqif(!hBAkdofTIoHbPMcL`5b0u;1+8qw}A>(FldEjPalXm`CU@N%Ht*WUXsY^%`jw{Q9Z zNW80lAmqR2zAze$g$BYc6faq0+Soayz4GpzAZE3XhP~!cFW~y>=h1P?RzGc2ShCsPHI$++QHzQVLIiWCUVb?##+ z_&Y@}i!)A_;Dr?kz#z%Jhnbq$LytaIhWE`DOQ;!xH_O2k(piIXclnmyAO123`2V56 zKPjUa1P%3V9&;2NVz$VXZx)4`Zc#<#b1=!V%&cxq0Qb|TbIJ6?ESq(wg1Bkp0N@SY zgtuq9K{O4pWrq`pqtjH_nmAUqADwzc*cUvg{^aV5nF$y`taER zf(s=^g~fEKY)E}`mQc@KQ^cyTE$8V;CY?>Kh1JuHEVIRMz_8lk9Md}+8S{{2b|Zd_ zCLjI%n?DQq|BT({qZ2y|N9St|3W##DMb2OX+w;q_)cWUGJW9@4ko(UPWabqgi2sNGe#kc+HhihMAaPw*k4K z8ecLs1kj^tIb{Vi=s;p}!mXBXDaIh1n&DVf-%RPFFCscEB{o^d>o*>K1K|HbkpE9- z_FuC6nq0+diz#vZF2|bl&8W-L~s9Z>317U?MpOYy#_)CRZ;m$x}i_p-(KHxfXP>Tr+l@1>Q(VL6-|%bH z1mAY|o!D62sGDMNj~X2&3!<|GJZia4Ze1e&|L+@gUZp?#7`l$9hj+eaqc||DOW> z>HM#yQa|g(mATeP8TN+QSF34X{R&fDcfOG2yM8a_yFPbo+c|A*D_6{&v##x&m2Kxx zzUy;XzUwnDYCECUHe9hy`xSf*{nofv!S8ciC#}KXt9Z8Vb82;RjUT%Y&AzX#d>Z%e zsZTwI6H@nXKV_G5no&?!tvCotM4|={mC%WV`?02{&HJ8wz|A`JH}>K&Cio|b>%uh! z?#-&Fl5=D5V_TDeo>e~s{Qs8h|4SHj=zY+}*X{LpdAt3(&)?(gst!VIm(Lpo(CPE} z{9Se7h_9E!Ty&m7+~@3PX*gO!H_(ru@6(CCAG^H{?Hzm7FI}gs7(MGcfbyh-XFNLLaD9K;OF7SHrE4m10jp9?(_A~|Lq%HfzTh= z10a>5+v`EI1HrF0@UH*~OV4V(@^17lwOkc&Q($ACy>VTCjH-d{t{6U=<6`Tfj_h|d zGAv`&uzoRY1262a@xm9M{1f#5epujt$!WCvdjJ)~Axu=CsJ#|`%UbyBtp)NK1;6IP zExi`)ApZ5xL|{$o%tFwD4_#t5Y+iI}$VI66S$JU@J~ju8wy`_QY~Hek&%nQa5t^WN zK+hVQL07xS9HF}w(wQSs7dBnwg|>9raE%A355ZgB>$I0XrwI7}1>pa7m-PQu7P@l_ z{j_tsPYj3pqLG>_4r6v(7tzng^#4s9ep)#r;m{T5^%-NM84Rc$WEVs$mrO5BMXU)DcLh9#veJ zH6Ey8*IUpj^RdB4Ujq35rP%+CpE}o|cZN}dLvyTLTI$$QUakGQwZ_^W-G6=iVz)57 zE7k6_*!`&P4Qr9`dhAtyvQw!{Cf5$4lKOBhJzZP>1?mlDe=81MKT;cf-AOM7zxu~l zE8zfNl-`>!dN1Jr5#j&a?0CyTEXvM);h$PeBKf%3*Jskc{&k&wee(D#FCjf^_D0y& z?kB#5ZPjgk0B-uh@Xp{+#8HNDn9DkZkUf~nz;)X_X;a=Tq78Kq_eMKp*soOhv28x- z(clZx(bU`3BzT)~RP4rxPBkdw@+2J^mzJlD&p!2rYXSd{n(-fG-efVrBI7|002K5* zsX)YaRnB}Y2dqou#Z=sGkPLRCc(BK#4+nNz{|xNLKdFK8Cp75jsLF8@PXvmjVo{f| zDq%>qMyR8`qha;VVn1B<)50VgRpcx+3%RrmIMaLi=|4Y=veeJwvzYzpKl=dxzY_Rw za8_D?2w`{@?d!0|J2!f25v0M0hV+U0!Bl}%+B)VZ$Q9CuG3QE#%-4D`HHm#Zy1LLE zmN+d5N!YwK-U%riuUN2e^n$^S6NU)m;eG(=EIS_aYy3AXCC;}63LHjugoHA%k5K7(!56YNk!g{7|DeeR0^|Bp9P|6RselFo#{ z=Z%uSHyG;+!27nRisME;mB3iJ_I+?9znvPP@p4{5Y13~UOefE8XKT(rCE6E_PquYg*T3%II(rYC?Nx98-Nym{ zzXtqAT#fnvFEx8xIA06p&G?S^jo1-q(T@19Iy>U|pO||$?1(|v2l1-5`O!gatL}&! zhgsP-$Hfv{XAJ|PrCFA;dD5U(ZK+S*zPtz;t?b zK&DK}7L1b|LMR}YXaHG-poicW^5gqsMpZ=@?{QocDe;B8# zCd!(|yJ(Xvrq}qa0-Gd>cQcw{fn;whj(AU7j@p=SKjck*Ftglp<64jYwGLE zl~TvudaGf?k7cHbo7p@Z&EY>A_EUIYMQUC#GjpsY6pyWqK$nzr7*YayM8JmPCGSjH z0F5fk9i%3gl;N8@y9fa^Xhw77AIcyYX;B@oEbJ4goid-WW(XOB^kVuGWzcNgBV#U; zqL`&>o#4K+?!4~FFTV)<{{`^>Ns9kcy~li^IzD1ra(K-r?>_=^81`*E19CX<)AQI?m&1qm_mB2ARq9d&(KDrqiCF*b zqmu;nGKqneR-SV>7`^6XLi`3AN&ZY~sRFfXIt`n#$ezf-Y4TTFZvHCp|5dgBBZQJP zJ_Xb4rxTWyPi81tpBy73kZP~wZkc{|bja*}I5XusINUFhI+@5N#oM{HLC1Pr5m5|# z#kW&{u_bcysk{npvtJN7#sH2ptFiAydqyN z70M-*;%{jq7JXnI=@GIp7{vd@pl!tdrGBfx^8iAt{0w};SK z(N2IAsdOowEDCbc0V1mG%_79E4`snc&zMH-p z`2U*1|3q>kmX#cD;%rn$yec!+l3}X*VB~WN85b;LlsT=7<2B0|REcU<@PuB?&1hx= z6e2I;t7VX`9G@1i44f?{GET5FHAN&~nUaA~O=*xpD^Z-shf^HQUd~v@gojRbji`x8 zaBZp!*+epJaEO|0DFVyU49(Bw7nY2`%ruY6 zRO&Ns;E^?J!>54%uLJ+DME(mBnr6LnVBx-|)fwnVsao4ewZ875TCXiFUXO4wzH@kp z8-DpVY^$r*KS3kGB|@LXJ-v{oFmujG zqc~@JUI2QCFz2}qk&T(MthDyQtO$4_!MrbX92RP@Qz^ z3amZZAyp;?fhND2{9HA9jEy7I(KR<#i7w_NpBK5 zQ2)ZhndK&?<=SVy1^hn;{0}a3|Hn*wQ!;HcG3_l6rfpqy8e!k|`d%b#rGM(hwmQ?E z)3II~iM^{1+p8$ytW*c?#a}YBa1^J*qyDg6xE6CKDO;Xw4a1&d$~Mq&aNSQ%)_WDG z!CT6=)EOY}MM0B|N73wwNw%4hlH&3 z!e3)so&7KMMH?+zB>J+sFM}trWZK@OVf#=YGM1M9YgHJniqtWqI*gW0=>KC0Aa$5u z_tAyZj%ok+H>REj{=WnK-@E+!uPPGfq)2Qbk$BrfByRZXZ=?y`|Dm(+rc*zTU|U@z z{v$p*f~CD1uC}JtZm}u(ty0m(+9Fku;j>gGhxtDeDbN98)S&`g380(P1f?Iqfd7f4 zR0kxN_zhHq_IAD24}L(Q#+(!{Q)=bLfT+q{u0R#eAxq zq`4Hio#N6|fR$KaM_EJ^y*IOkl7K(sYZ)<9c=i?`Bm9XWhYUuT7`AfsDBwm)cU6-u zZgAk!sq{=HhdtpNt!+W`Q01eUoP3gQwYWRt6)?N-HFO~;klb|YRUb@LvO|(Uy=3UO zYDG&XrIUe4ndyqCjr->iUbS86daS|%WmY}&o#+7Y|GeZsv#vc94s-{$hr&DB1MS;V zfo-#aN^Cd$x|5;F< zJ60Ww#uasI@LX_oN$4g!IDbV`T5ia-@j2>%*s)S_dGc}dO*@k~B;N&oL z7ym9f)4OqcW~)EEyQYULXO)9oceh{2X#EQdhIV!9!kMM_)GHzZ*o4<$B1)*1{U0}N zx!-T4{r(+~{r<*}oc;p2V;{jI;KFn3u&ut|ztdC|UhK=I*f*R=C)v7>`lTv9at9)JZXYzHK6Ss{; zdk>m-oBg+s_Q(4A`z8(d!^LzVPdf^11?l7ot30cmT?zu6@K-3hBWRAZTg8wt;5v3h z9wXW^)AJhOi9!+A@iPQ?52o)CBo0uYN+eH|3jwp3&t~ywI%&BaBMPtx{bM;%My60M z83HGksW9;Ni5&V3sBe`nKPO@ut2c!PQ~t}%KSS1o{{IoJe>ojI0o9CWg3c}%a3a%O z1@UAiJ;w)1bVC)(Inz1qMq&n!qL|u_P1&{AD;c2N;EC)U0t|6r4U~Z+*WT+v=*~s@T{dC7eWuMli~-?i6ERORPK_MK5wD zUmQWe7(a%2^3G846>k*PK5hzUyOLl-+X!8EU!aX-Nm^nni45Jf1^C|r{6B&`p^C2i z7tS`z65z2Ek8LC#?|F#F_C1T2`iz#BP&hvKHwaJoo-Q0)^lmhio7tn z&aYT9Dn4sUEL_z7&&k9Oetyr>!2gxN|MfWSUhy^S?^rm~BqM;cQY3C9k@%&DNbGp_ zUOZg%4t)t-e82bXCTyzyV)KaN z6~xY!GusCSdIkr3;_-Ie$Oi@n2jg*RqZ_GoA46uh008aeMK7fD%cd$jmxtj zJ4r*}r)kwNtb!xVp7G>Ld6^uIH&bZmGB_5OE4J)P)dpSNkP~y~EycCp1pc?e{!jkj zYA7GMWVW25OPgv`8N$Gz)5o9L})#GUo-`o@0)ziJB zJz$1!4(;mR!Rd&h3v6U`X3ix_#E*6q9x+L?V_np$`aOsPKZjD#a(I6j1HgNiJABq zGL7eM_&uP6>5k7-K-%!a z%%rdfT^y!dA}lt&M*&#?i^@_N?xvzu+OkXVP+xm`GKG^}N5$9m76x6ic&jUW-Z|CU z1hn_`ghRnlusgWBy`y8vAn+xLOv9g^u=UXD9^n5f;Quk?zX#=-*UVC5)V7li*W6W` zd{$p9@5{yF$HlV3M`$ve5KZQZg03>|{pP zT%(jNbjT6`j^8o#_#FWV#7|;cnmWhuGq8+?@t6q))5%PVue%I+PRL|4rFp&z8iIo{ zU6(~=g?BE_X(zv77Ea1yc39| zz@&+Rg`X=OBS7B*TJI@y*z}8#P2px7A0He4Ycm+tjT0O*T)%wMC7+}8Z>nL8KbN69eUA*odi5?hero6qKCrgwl041Bwxl|XW zjLqh)k_q4Gj%f|3tjH%VE*l^~9}G0Ht3tUnR4($74X@z+&l=$WXPoQbEi62k_UU|n zDp7>LU{!ayJfie*lcgY)Sgg5y;cT;<0M<&W=p?DQ$U`bt|LhCstlZ=4egLH6=C@X0 zTU{#dr{gzWp2vqH4TP=PC4StL=*HeEB$8>n(9cAF>;RZ+=ENg0Rx@#72#UH$><`waN1HagO(aPU7(l#8-^hN{c{u zv@a4fX)$;n6Jn{`-WVEe058;vX+xVM8Qw)d=clVs3!1%rotG7$wj8*i`)_c3bnz=E zfV^Ae`AV0xhw$bLjFv<>TRJLUa#VC#*kvN`NNRTF6-+qBDF&b{Ip$ZzU`x^t)WpZG zMM9x4(mj@w4A7rP2J-JRJ?~8KA07byU#9MV$RN}35)DnV3V4&v9!GaCl)p?>4%VK_ zSQL#zc*22-M^%8FDEJX1bP<(bD25>l?K)5wZhlanWDvd%19@Yl#`6cp8X180dnar zO)k)-PqKng=2#Gz3Yq}3@HS!89<(@W!#mO#k_6|eaw(6O3}pWW&4@l3LhM1w$_W7z zA)85NKpBXRxa3po#J)(p-#nH;UYhCY>2wlHDwDVn(9#U(w*Zy*k+!An%olpvUVl?* zOep90Mxf$cF?3-PalP0krsiGHBJIcod36dwN4oaVsUA>C*39PTkA*(gdII==xgGzh zGqLJe#N0VXJ#;Z zS?x)u##lyS00~`Xm<^~5(hn$%HE0O&u6|1GU3J+-Md1GxivQw-ArgOKP0iBP4b8)` z{G7UGv^SW_;d6>)m1!wiVeFzjjff};WVq~Q(A>xRMKa5%wg>XCWQMsAB0FePJKqTL zxf9-erw)9HmWI?TW;=X~9BbEG@QLJ>Xe>6=w{MSeTRB~vH-`?QFu9z< zt9Zj98Ixf>jx!L(VOdsrRvacp3{f)8fnVAD46j+bCQ)z6&gjLTn7_uMp#vm82S$d* zh9^6g5`2tA|`Y1dgJ zh%WRsomIa#!1b{14tVsQW=ut}J*C+iB(rsuhuL~b{(ele+U0w7aW4YmbYWZFZ2c@n z#4Qnn`JY=p^mCdIW~M?B+|#_A}M~8 ze%c?2ixQXpebKQ&`cX!8a%IVZNbCUo{3*lH5e|cs_OOEK;$4x;ig64N2k41!xpdiy zG=aXCGOA9SU65ATsixyyAovVQfiLACNGdZ_DCU9ctYt%6=%*yEzBdi42y~8u5W%Ol z;%ppF0mn={Q4#hT^opz6@!JwI-;h8%5yvy>e4?6@0r^PT{uYJ&& z$$=@7nsN=taZN$fkDy67iD*iTF5m#9#e%WCntmfOWrD+zkfr=?3$Q5C* zil#l|z<7tywBID}IW^9JdI?^R%_b=L7ZVR9oQh-Ul&xZc@Dxjk{UpO%ZM+;Mad?!> z=FmGe1H)bG3)g{P0H?XYm5K z<8{0M9{ATsv8}E%|6pIkN$sL9>H-)j`D5C}uZr$+xj7}KE(gJ=Y@3+4-ZEqCx$=S` z6EG2Yu=+$f1CNXN^xmP^VSg+T4h6Q`9tuOE2NTife?QO${QofU9}y&1Hg}useS3^E z5#H`bj1ObtO>_6fN`@{vzi_r$#(^YAAqtTYUF;!58~);pGrmiG`vyMq>}imq;eUAx z8|zZ^7$JJcM~6nRWOF=vN4;|GTU|lHk1*Ot85`aibycid7z~TV+0h|n>}qmmpb-A_ zD;w_x{$H!k{|=!{5H7h1%qVkZ_aj(*wG!o*TCvUv7$q&omXGk2J#dkg<5DIadC>%# zy=upquVMw+CiN6)W{bD!JYMfcxsM3EWAFmv%QG2W<_Nyjr!Fx|xO$Wj$T!B)>Nixc z#UgdBV418TP1~t?>XgEw;!YDvihz$(&(l zacx{Rnc@b)&ZpoHIy*b_MR^VM{Ea964fwxa@*lxZ%Spt?nl9rdhniV<$}J7`sR@FB zFPF$^?xidocJpyQ!}*VcV9}d9mN7WHT;^{y7VjS!WrRFIj4Hy%b?ZWv76^qx0dwmV z{J3@Q)cjpr;g=--G7%1#I|62Rz}z*tm5LVFod^?Pox|wua`u7MpZ-D|j-v)gm1Pc1 zI?PDijA!mj%cdCQA%;;u-1JR0=nPG#`t$htBQF8}udDU^e>e510Z?bH2X#$2A>wrH zYUYj1r3{1PA&){%9*qrCdL+-S{1E>jFcD4HEvAr?u3&d}^-eRC7h!mznA9dEBPhZY zA_A5(v@?6D4m|&SL{vZSLHMr^N}R5J>ha$J{%?@{Z%n+r2VUlwzaUzpVK$oO=gIUnEy*n7{o@`(4BCUcp9jW#n4^(0H-s6hZ zwea!1CmuWo{BP6n|FwCA5nNdQX|$K07hd|^b>p2je%B=Mf1~6-j@_FVH5Mmro)g!`aCi+5*hb{6=QCP z|8|5r{#TjPAfK97c~!V4xHVzV&16-^c`LhL9K2*F@PE^?^*`$1se6m6oby_gB5@_M z%+^-r@RsmAxgo)Q^%Gq3G>9~Nm!nw+yO?61kVN-C!1@Tv&px^W#ee!#fsHC{QFoeM zUHA_ipfoA4|2cQpjwtYdGw^@bC+k0XGr9S*zFzEU`tByoW3acStsW*@{SpsbedGM; zza=1wr|`n(_J8chwz{eQEvgG(mpQ4kC#o)hR+lAf;Z=Cn@~#a~QJlwha%&Lh7Oqhhx_X+ZtcP!bW!3czG%#B&*o>yAJRU_pV7g)khjFIhoXbg zQF9_cJ&loNleq4V61upx_Q@3DFT?u+E&JV~e& z!qtG7ar5No%uk!&_{vWZ`eRFrZw2N5BBlX`Vu+ynY~o~E0XwAfczs~VBvX52;zou1 zt~PZnB$lxX@GC~aIpY=$M-+{j7jU=<3@B^_L6P1HFYV-^Hh`d5je;h;S3G}DGqM80 zC*^hr$?c^ca@+af;scc16F|8=_IHnCTU~B{#C6ykPWdo>t%Fo}V8-= z3=ke9>=2eDFHRq1-AJRdt>E}r z^?~=nhW?Mm?dOHW>}%P{10bSX@00GEz5?Nz$O#^V9i5=xTOAG;UJ znv&!Puw#tB|2rT0DbWAg&D#Ig?b}nQGD*BXO%6}vb~HW}9_gC4r|{3@Al`@Kc@IM! zV5<`!fvLgK;bHWpnJX7Ll1n+dCt*W5ozF#q*b4|8R~3*RwzCUX5Jgc$mpS1(1I)2c zsHDO1!0DtKvXHaeU$;HtS@8wtfvzxA*+R+k;xZ(!CYt9c^C5PEAQTdPeY8W;H{~Tv z0FdJiQB~twabUyi(RcOwJ(e|5aX>Lf-#yQLmHl;c+&!Ex1*XRjRqm2nsff|^II^+i z&bVf11z-2t!t^(9!= zTpK?h9G%Qe*a%Xb&J4CAoOSdf)fCn>VMJnNisBNxyQh73!*lBL$$yJS<_+TQTw$L4 zM$j{)6s5}{tcWAd+>N6T{av9T#1EhP_X|M(>wx|r#qo2#>5CPS=(oQFWEQq4yv|-Tz@cV?NeksK-6p zL<>KfP91BxFAd?&sU}=bjiJt6eFQMe8yI$rpZ@-9Q2uuU{ohRbe^q-u8`+g`y|#~Q z-iE+v^tQ2)KK5^x+nPflilXNL(erUl=(+2LdnZGW4()&M+ELs+U-p-HzyCOspqCRc z)zRc|tDVrDd6I@zk($DpNG2Z1BqEuf2%8PO1n}gqag&|FlrZ{3f^K!)vdtMOqjBxl z!I_|w#iD03U{FH2o_1VGMR)wK-U3JCOT(c5{Vk3TH@dVWjwaZ^9B;XqI5!BtdhDAl z^qGP`OAFo!(?X7ilC$x$8%Zr-WPEoumh@F_Iv&ci9NRlUtf zM#;YMDgjj;u8NxLL=Pp`iTA;OyU-LDv3q;bEEn@Tsq{3f0F8K90sa%?Ux8N>P1{aD zLp|#>x@owTrsFoDyMFzy=4|@W-5}!guZeWqp$oYp|4!I zcgGcozVgB=cJ8=h`;IFJedUS`&{v*qJsuukL4Ygp`-;#d&&1yfeC3M9;45^p8QlE< z%3TIudAzwycjD$UGn72hGK8HPuMQU1HIYl#A;R23hxApoS7#ytu=j^NfZOZRuAW$b z|L!_aZG<=86^->Y^|E@!W%nZeuLt_?#%XJ%HzoiILIiAerh#;dv-S{YJ>kJ7R6lqB zeH5+xR&;y5{O1_M{RETh33k8q@_Dq}7agq|tZBJYo)ceZeK;VGVYKwJdCvHf&2xjJ zBO@u$L^@d!?j#T9;bi8}Wb#l7HFo;q4EpO$B-5EJDe-6R%&7bUd-o83iSF{~6+JqX zKA27!-`z=7P-tyxaB@67aRTZaN*zpRp!a7%^c)>M0)O2ZR1seFkN?&K^uIx$|4g8H z@`9xk4`ZX6BNLolNsxlGlF!vDc{o(Dj~B%{<<9Q3Z+VS}YnuS-FYM<}sRvUBK*5zy94%0{TZ_|9=Mif5~)^3tO(>!UG?gHea^!6OXo&QRf-+w%l=5!Wt5!KYw<0^8B5*|1o4%Hm&PFer$BEF{ zEyxoPP)fG#CE51GCbDhYKixBlaAJd>#2wB4PdrIH(Ufh^I*^{2;p1t0KVFVwsOiuD zYX2jF{!yTR1{>j;eNM{(pVC6ra4W~_!9u_zG((7fC96s9V-w7x&Xu$c_v4L|4(kaE zCw6y5jE}RO@fiLufb0(%*`_g0)=f%m-?Fy0B}xJ571!KET=S$RT=R$<&V84z4L(Pp zIsfrGENgPjFhPQey&10+dEf-OCX9`zCMI;|fYFCP{da->H@0Q}6&H1`(R5B9 zW4J7WAgNYYQL2}!lDLI@h{d|;ni1S+*u|*OB?S{|jU65%j)0wrAqa}FGu51hJSX$P zc)?l6RgvGWnN=M_f{LJMSlXl9XqX+z*~7ePK!*83w?+A52-Ffi&#M}G0J>4iuM~0b zvZV%%2*7R8u3su!{;N(-DlK`InY*cY6X$e3&!^`t4|zmEMfshw6|$Wd=r8}6Uh)=b zX423z|Nh5U0{vr({;FY4tHS}>9xewbI8v1K#-SohO*?>-LrbKx#Di{AES6W$i=k30 z=3T;=Od%eGQ>lP*m}k0E9t28YW-sMw%W;;M^A2ixgpHg>y$`f8obU*NFXWh8kVQ&_ z+gcES;v%SzMcj(`jLhmRiXHqw-s{oE4hy zE9F3M$zc$dZ#-_@fY1;E9j6t6{pLVA+GClIcqOQj3g8WN#HbP8m&&L=$n_Y!NQuG> zWE!MgU@~dT=9+2FoG*6&D&GIbJ^jC2B!~y5mz0t)h;Zi~yR(bupu})4ssUtU8hF9g zV`GwWaDS0-cQR!aP~o40>PlYXN-$eIMM_|VM6pbJ#cV}EVr23BP?wrZ0cC;q>qwq2 zoDR;+j6=@Dqh*iwG8G-G)Axi4ORFy0hy!hisq{Y`S#%MZV*8&vbLG>zn`B@osW%T&IY&@j%tj z24gjTnhp1Khgp`tTdg1Q9$E$16}1>RhF*H5I|5(cNvt3o0iE#|hAvQ5+}iU#a>D_j ze=pGgrF8$pU9-&IoDO_m?Vyj-x~bc^sYHi0eUUvxpLv&GU2W+H^qoxJShU`>?B@%@*?m%CO9OefU_m<$+NNL?LnskI!l2Pah5BfIH9s8_90L@ zIP-;5vRE}(W-JlUurKSLOm!YCpoPbX`?VdMgy!k++M@1rd8ijl!1rwKnul5Eg4mb1R|(F}8w^FVg9 z5jY2E!MHB10<5}>lOYF29Kaz=wvaiR98M3-kVW1cL7O?FDMYwbK%kK3I^=}CA8EV~ z7sMeLsdjnnB*Q~EX2-hFz~z4-Auk;Lo9%xJ^xw5TwCzr$e}f9*cHCcqB*>gex>PL4 z2m6Uru?-B=*|ds-+Rf%FZAEdyS`iBW&}b%%QxS>NfAL6+{)<6v>ZhezFB&BcW6|Xw zT06J3Jq9){wc$OBHoT`c+3=qDj(cvP{Oo&v>**N(GXV7eRiyvd(0;i88_&mg&Hc{> zf*eav9Bvz7A#@ei0L#Bn@)EX>>ohK~RLGkS57KkE5>=w41wxFIc`P#AI-L0y5`3Fs zfxs8%z4G!hoENL?;7${~SXf4x2MrHOHthd@rf=6A^7N0co!c4}fUJr`_9KUMJnbIz z|Jkka|1WRCF;Dx!Jzqrg;<>etF>cDYpsveJ7FkOUj<$RE%bk0ezI26}!p8%OkyDui zQSIWU2m<SAA@^Q6gsBj3nQ;f!u`{J!;^g)$IF5Wgc z<0HUBZeJW6B z%?t1e(;Lrl3bq5bQqm&0z=q1<0>VvV(zY>sB%0 zvI(yhm_&6&V45q*?#gz4H*WTO0R3T{~vgov59VmkzHLQc{QR2nR!+|lql z-os$712*I92CmH_m+Lw&2ZzkxI_IC)FIOriv}w#Dd*ez4wl0gXT%25#U}C9cNCDzk_}nu(tztiipvi8|;N*c@{VHh?jtwLD?-A=99*XK(_L%1UjKv9Ua(? zDTr_xtc)XKe6p=Soi&QE6f%w0*Sr^VM#KYVwP&I{Edt^|SuNVrjq$13_eQnG1 zZqzu!G8c26$NNA-Ue#+~zl0U)qF2-_ynH0f5GFk+(2*Q#J(UkE4y7whB*%SC)d45`#Tg8Kxb$Xy z{$CeRIN0&vCS~ptd#%*?_~^JD@9Q71!-+mrYWDbKM{veKY;@8^rFbA&JXj|n(2*j` zmGS~+U?fCLCHIAC#9yjT^wX^xrJW!a$NcM@);(`Uqec@^{o+2^GnSQOGfhKI-Qm)1 zRLZfPrd+Yur%g&D;%>Knls7Tp8m>yaOG_#2K+bVtI}`JmMV@nf*%(3B?keXAS}FjK zB7&6>7lb=?)Yz#b7JcJ=Hk5!UK8i4Fc{J*_ht{TE3iN-LqCeh83p#UzAlveiaK6c; zLXm)`p=Z@)3zmvIwx)RYrje!eCA)9FfN@nJt06(`eZe8Y_DD7$IQsGYc*vcVAY+iT zysUMj`r!WWBBxYpCCc+VyJ|=*Q)lyDV)Le@+~4-#`ewY5{k)*N8@?BT=M5k1CHWw- zpkax9oq<{CuVKg*yk=p;-8{?9XVvRsvsu+8 za8~nGjcG1SO>E9Q?HMl{@@d1#xjFnzy#Gz={2#^DdK^*LXtrLVwoFQrf!E+)bGIPj z<8i6+sGFi9HEX1G8^g39Ii*c~^3Zh@{nlWI3!vBMW*ct;QK-*?3Y9;q+0i7Ad;~_$ zX7gqYUUxFk^JLC~&)e6(?eW2BxhM&0Jies*BV6BX8Ghj-*P=8`_}n#=2h^h&iCU!_ zuYUV)b7=oLpy=-(gLn+9Ay~d4)aC4O{9^`2^p2`t0?%esRB+X@(kI%8a?SR7Zs9V8 z-G8w#Tc~PW37lRIb`7L@aMUbnUZEM4ce(EQX^xd zWGI+$ToO%Z!XUoOKrorsBSu!GD_uXI30R4y5 z{ZE@6vrX$Q)Ldu0HO#h*$V+C}g@T;0Do(Bd^Y+l0U$IYP>2NS%dUqnx+aK%i>FXJQ zzw*&|e=zIe=wxOntlw@oEBbmCRc+k>kU($0f5Oi%27>j|6@v^CgFJ(x^K6dJ`)7*I zyK3)_D=|9nC0Fj;QQQ4vjQ>w5`G4j19amDc-jy3f>n&IqFLEVC=)vzRLzi5Ezg4u} zm5rnIUibXaqeBO;J^$nT_hY!;cS9U@qPgA0lLrr`+64j#JsoSPVVrz;A!6sy zBb~ArEv&|kzZ1saJ=4?vIDCCyOk0Bi5rGyQxe(@yhFk&j8p4*Wv*qb`Ss5b~B*AQO zC`gxF3OGxbejC(qH42e;y&vd* zQ0xEA+&9Sk82i;Q0rzIF;PJNH+Qe=7dda>eji5O)Gld{N)nxFh(vyw29gW{^*rEli zRX}-zm+mdxxz}HrOY2Zg#Exy^qP*^UJW#>L*VlX%uDU1d<)3$a;|8Grp+^4yo2b!h z$X})Wfxs7m{SRyVFIt??M5=ERl$bP-1hg-|e`Tox z-FBAWDUk7J9y(Q`{Das$WlyhF9d*3mqqm7sfL=Pvr(3LDpswd?bJ|1O(Rhzht^RgXxWWiv3mTghQ&7MRW@91f+s^M+3M2(126jG$f{`R`MT8Hp& zK(sBi-#Q(e^g%ODAJHt1#Dibap6G8?mf;R(;QwI)Z(9dRqroQNo0II6mi?q?SjHS7LJ%(BBk?&i(uvJO`X%$zbh%2sW!WEY#@5LzV!6)9` zjlf{`_uq_#O}6+`3LY9ga7(Hk$T^!LMZ}P1)D)gNnFsL$`Yg18^GZ6x{00 zIR^$no7(2ZosRR{xZ0M)C}*-M9XS^$k8j~Li^IbE(*aS0xC3RN4gtBY*! z=Id+k~>6|GLbV}MPn7HZB}jvlnP(mV3S&ha-BV?c>G|pcUN>*d@vb}$5Zj>?o>}t zbZ{V+Oz!SY?C$GN?1@MFI@`LN`ot$*kN$t-K>w@h{NJd%h5~-&OV;k+vXlj}tt9>- zlK59Ok@!z|%RT7!zd!v)sDsD;={%M-CH`mATM9t%p|ED{*>bsC$h7KJRTI9%8 zje3aIGY;xSb3Gtt^K>rDx*EoZkUQGPa>mFRYuvIDn*%ikeCXTV2aLiM`bN<7q zpTBGEiKw3seB(=4*kqZ1I+P;r9Z9wc%jF@0dNqa5Al~QMiS$V7EdGUm+!?XYbfzZ9 zJI{7bW|Q#ymUI?=r?aE@8?j(B$>GjBeOHexro{R!&MkVo;JAeOS`l|Mn0W-zr3c#g z1DjSo>eBmDc7jmi@u6WRXA9z~mwk2+=s&SNwCxa1(nEt&YW53JNqeI47^0F!j2Xl- z5t^^SEqiCIr#l|&#@9OQ3`gF`I-yKYoQu`hixddft2)vX-*gh{^#*OQ{FA@3c5Z7t z2286MK1~dNbrXhv+RI+J3JibC6VKg!4j6v_*Un;Lli~jj;~!I*iSbd;9fCiTfBm^H z1N|pk!T$R^ugJ1d(iF;EPAcX)EYyijup?vlN& zK)Q+>wpkt7+fn%o-ky^~Y48%zggUT;PzV0CN3f8ti(w>@Ri>7^%d;3CgQnRSQ~oZEn#r-Xlzc(*$9F2MSo<+M^lyI*^gpWTPaRbR^Ig?7nAo}rH9EiU+_nnQCy)jR&I!BBdWcGR z`+%&pPo?B*aBX2mgUc^vZpGV-2$^7a(SN%lee_>nSL6HqLo)D*Rf zuKQ+vWT@8qbMe^CP=~L-a_wAG*}6$Vf3*_yw~(OkXd>vJ@uPdYt;B#Ua61UcdevE-aCEY+4&q8pHE ziM~ENoEWgba{nvrco$veV?><;Vodi=3j@Jw7Uy9*9;KUqscad@QaCNf4T)EDEx#F& zs#kKe9jx_-G_{SF_UT7!=Ub;tfJ-_QmmDE3xuyx1Tz%s`j{+`9_WllX$=K(A3(J~Z z^4Q6&X(>PQcQ3{K&nJNX3+?%Th90lfVXQeE&;(SBAp4@w!JkaSxOXjYlG-vk>Z5Nu2OZCWY9tTT6#Y;e$8 z#X_K5G0VY1OlOlL(my->{YO*&rzx%f(HknbU^Wj-o;PN%JYUVDYKP9TWoy15C(KIT zamytMc_sg=e6g^^?xP&O%}P6Zq?$u)$*w$Caa>GhMT?2unl|fxy$Z9q6s1AorVjrs zX;Yq$btrVu^(e^EPaYZ#XuP%Mg^Hu1!#G6_c_q1JirA1i6RtzbMgksl2JR?GzQMz( z!6V#0<<-Fqhm&K6#*;%lKlaq&)bN;DY?}EuXxhXibLk~?!GvSd_2kxu7)ofd0(QWl zIX0uly(|F9o#Fx z(zsw0`O9*!Q8zZkWzeNujos0F{OXO3Xid&#cq%O6RkiKR<3a@yfwpJ{IcNO^mwaJq zDW5CAg20PezFh%sB4jhm_BY}!Zl5&KG&5*a5@c+s!jDu@fFpF86{D3h=H%;zO8@%|4gMj6cu&+b9+`)!MF+)cB#cdZ9Y=1hhDDE&dq72nVN~ zER|PEgy@3h#t+TNPO1tauNscq1Sn1yxM%}2cU`$HGZXDNxMo3J=t!$KI_xD_gz93g zSX8glvi0hf^BAogJcH2vnng?3w=>u$yev9P`3j6pdh}l}`2Gmce@5T`aWkM5@uj6$ zq@WQFy+mgcN#A3nqaI%Lf9P=X=%JbM(PNTOHe!z?kK^Yoqsb-*kIWoNoycO{=moB7Zz*mM zIWQ`#EXoVWe=?JFm2xnM+hJwSgC7SI>Digl2{!B|C*f3)&cGX#V{2?YJ%Yin(8q}J z63n%WOBz$=h7%Ys1EWi4Qu~-)_BL)f@jutF93`NIQ5vwk*JU3~4o{}CcDNI-BQbke zS0vm?ROi3qhGEiINn$gV{K>n%hWJko(Eq2T|M8QAQK^4Q%7|UN=~-ECCL-|SQ0jQt z>FP2{so5bxJef(4X7+`v@d%>n^5|wpQWJ+qhxQF8vlE-n7Tc8Lj1BE!vuo$KxQD=| zq&Bn+ZD`ju+0Y_`7kVgP>>6I$EPnjaSk~On`pqn_ev{26`_eF9EY*Zo7t}!{x?eoQ`I*dBnJ`DCM8v zeS!vwW+aPRT!!<3+OCwJ3qBzDXq`e_+=@tL?A+O@^0J~bVwrdV3U^>|a(oaRVmb+0`?_wJt|{!>oh|8Dgfl&jU2j>R%Y z6jv=TNN}l)hp}SO^k8t+YVhBYRt1Dx$3<$tVFd(EN#!bXvL?VlI#kKUv4jn}2-M9v zpLFOZUm`@ThYq}ZlZe6Q&E*2Zc+D z4n6n1A4dPbJkbBo$p1fB#X2`|SO@&XyL;okiFi+6f1+nsPi%KzeBE~*Vu)lLw$!by zMOfTQFpQC42or?D)eNEV7J^W)_wKj~ArxM5)y^GPZQpSfK_*LS088X zaNU<(n6E-p@g!>KQ|{{0Y`Hi+ZJt!@%f2!HH$eXd zMgJ)}I?muZecBH52i1s2N0uo#`I3Co=N zArsCQe4G;go3>4g1#@H@4~8d4GRm9o%)#{W)X>?X6Pe^ldho3D)pmBsDTRexklqqq&-<$uh=$D3wW#!@3@_lf%c7Ct&#|vpkKw?lonPrpG5H87v%H zr<=*(oT;L1PKBkr#nd^Fo|p==qeK_?8@(%lhrDmGtt{{mb?4cs@zH~6?g#X8Bsn}R zg-=}f>|;Rxg0}x}^zuk*C_Oo{*```3mpYUh-&ENH=|h{X7Uc4JhulrhNawIjL9&GhBbb%Ev8G*6QyUUtudQU(8 zXF&hk6#Yk1pgN6=nT3=;v-#bLRB~K|OLE-Dip;_AZE_HkoTKWBUL0<|s>CrY=waM0 z@!&wJ9Y3JzjwZ*+JR}uvxxNGG3@op}T7gFRd!rd%LFDU1@4+8|x0vyDiQ&=AA^id0 z#VumX{l!Wy;&gJK*X!ARPgofR`k&PH-_2HypZJ-*$u?dmax z=Ao;dqGa(8Ij)e5wk-et98lFv$(76wk~GK;POG;(DL=|wP_ zfq5EEO{5G>N383WwEtrM#Byb| zQ})^6;6Ta=tbgIXA89|Tu&cGYI?=pg4MrHwRAU&Q% zcEbA!o2yxOfvW4Z;MeI)qp!XDH*Y93PS$XxOg4LLbbP3uFvv-wNYm>>sR!3i?2?^8NshmE)Np%mIwygS`Q@EAoK$zI!dPFC!Iu%tsI2*^&O z+nmlL5@G*U{yntRd0nYeepwdG}75CUGkp9x!75y&;m8_tJRHl|M zD$vE%w!>L;9))#Kz?>X-frJ+{wGv}5$Zc?!Hm!Hgb|$d~BK>sqC9 zgJw8Wt@4k=?}C@;O%o(w@|eX{mwd%Ekg=ou(_kLov+vikK>rHR{}XinBk%YYAQI$e zmVK+yb+avu1hbabu7~U1yvm5feavNdY{feR2b%V|yO-{T`gdrSWj-u1VRr_Ci0O((BCH~vrx8QZ5 z)XeVm-qxwEG-%5^Hl7@VQ-Hlvah8|OQln$6|Ao~lI$|5AXW(`3;C#kDJer;GLd2rQ z0{nK0%4V57kj$oX_ynr8`AT6HwfWcorPxG0)}ET^IkgyvgCs zTGAmI=?VRbEERr{f)nt$P$4Eix=HdE-EMo7 z+>ive8#&e2nu_faf3hNUn=#`xTob`9%i>>Enw%P&a&j`_Le)xwS7mWo@>RE&n^cwJ z`JJ3N7#)ZxwE8Ag^AQE6Kx2F%FU%I5(n&ik_=*awMZl`fwyb(uVhui~=(aQ5aqmr) z#=#LcB}@5y#i%d1?`roz&tWTu@n0Dr5r%#tp;;WsWFqsZS?6>O1n`x7Qutj!{}n}l z0a-(KMv!gF1u3yGR(Yia{l%o}W@23b3bVz6N9%@x>69KV?68&plp8ZYl0tDHMykDWKwVdAWw| zTSkn;I-Ta)S%_*Ue_)ZUCq*Lm;j#;7kfGU#Jqa)KcVmw0a!%JV;#VL~wmf&T<$!3> zltqrR#x)q*_G`Zb^gj*se;3lU+W#Y6a4{E>1w;%eg$7?GVN$p*DI|mOIp2L(T!y!%UpJo))c zu&}9Ctr#AlGug4jsqq%i9HB=V4tz7&WjqjyBPc3Cm>;R;PS+{>OC-2lEKX;U9uC81EQVe~N0BL3B7rsd&1mO_b!RZ*HzRhl+C@@2Tr5L85__BQf)7u#}P%{{#m0zgjDOS23@Org@V$paTSU3f0xXSDwpJ6an#Sg`*Om5(%VBdp&7s`=|fI#uJX zW}rwke*qY-S$?LV1jd#rEyQ}h)OAkP%`4dqZnL;m>z_m{7VnGoCb|dWJ-ZS;y@{U9 z)v_sCeE;j?=>KyT=uh}ho1u+i+=!Ga?QM6kf2zHAg7)4>lfCzv#d~fHS)qNQpAiJ; zrxErjVs5?XVa5?@>fre3$gv}BKA-r;O7OxRN&P;bv;v@l6YxErU zIhYpE?&k<9)Q@V%_F)9~#f}B+ucXI~r-x*t@UZUGPK(kA-@_zSnDwnLAzbS?YS8ll zEgyC6a~}cv-wE_Tf|I&wyKCd>4A!{rIhFRv0rXX@F-fcuZNeJY-+0eUfi(sPzK5(a z@V9TlvLnwkM-;nc7VM-KQUyYmG6L`O!VLqnY?74YN8$k31k zD@H)sUCwh9IfB9pWQ`ATyx^sNX27l7rB6cqhv#n(ZF?g7|C**0M4X3>^C2|y>shFS zW*vye`lInW$XES>eS;nIy@cYM{Q3r+;y?5>B z6jF5c-W@iE6urjYxx?PR!={iTdxMaoyR94Hu}xt_@Y@buauxnoAw_oMkfJx-Lm@?P zd+GkrrPsdWDM0@5Y>#b+h!cYO@4U>8{j`ZF z(^MtDR6eDa_k0bcN?yuV^3YKa3!)i$8ewo1%YbxDy!FX5Dj$q7LV!0DlHIfc4a zEi0T%1M#J~M}W=_0-M3x=D+-_K>u?({sZTSdq+TX#_7{A^5QHAgyRaOq%R}JY>{A( zTJRlELybax3kunddTzOer9#nZGy@7m;GhQv=7=cZWd`5wI6mn?>;4$yr7C$R?{gfsw?Hue39lX{k<_#^wu0@!6figs znLEe>WKUoS*iz?h`T6-uezkLdrw3yhT-))z-@O&+e~+U7UftbNx$XW!Pfe_aVCVML zEmGS~mR8kbT3IZsTLjmC`KO^`OQ8Kyp0hGq<9JfAQKuw0TaCJfKuRLf?Fj|zhtsHp z68Bu1!X7fp5(-|t2XIJKohqN?+5_+kN`IiiDow>G0He(2s~R8N*Efd=tUD53@%V+O zzDwVz(rtryxo-rFftRI?o3s$+(ajg@R-phxW6NYgj?_VM*n~^yA%R#X63Av1;RZ+`mVYm+U$nF3Sy-?;yQNHbxw25V zX!o*aw~)$t!5n}`_H>6gT+ik=6~DjS|B*{shOpGrh(ji##= zp`@B+ao~H8Fdjgo5NRXLIezs^87r|K1Pw!ZAi~2~%7kH2tSun(G{8C0@|8~J2v3cM z=&EO)VRQ?fh+5U@V08HU@)IXxFkj@=4L$AF(_gM z9No4LpjKKD)dk-9=pSa1K>zy`{f#;n9TP~?k5VUWDV?-z>83EG*TqdQJx{susr$-1 zR!^!H%dAkB2+d{2AQ3kaX)q^}X+*AwVj_M0W%i*>Ve9OgZbTDqp8@lFPtrF3$8 zyYZ|=^o$!kDU}*x$l^8cml!3qXZ)prEJ z3Ry?`7~DTe4V$w%w>KHpj_g6ML|UHRaq3 zK7r1^pS-(v4xN9$_qGtH($MCU_ff9UTPH``wIBr&!ct9P7DXUjZ$+;x13%wU*;|D- zfZpVTC4j`V;Bw^}vcm1P@{RX@679b)(D-lppyw0lJr2K&+i(HaCi#KUGr5q|FA$HG zEI$U6Y@O6EMD<^q?bSY0%JOO6c_`s-H3OkSp})E;*O}TIhq0d6URucU47fg*EXq7d z#sHb?W9GiV?2ZwIFw(k8e4NDgejIHjy6R&>a5upEzfc{fRf3u#8kd4`}qj!G%uC2&G5UNTb zpCEx8Zz7N%_rdeu#tbNtw^D-cf5t4qaZ?`ug?2@2^T*40qG}3W;wZ19u$V!*yvUs< z`A$eOTK;?|qDD|;klipc$ZKEeuH=T*O%@!v@`C$7D>?9nwR;dS zJ^W8&SlC#zn<~#+bsbPk zLkh4V7+8#SB`>&A90s(bBWK)GFHwzQF&8_l0zl55&=?Cbee||}1^U0li~nGWVM$Iw z800b>bTQuxo*ue52thkGIIg5NVS7-zZt$L3rVKR3&G-E?_81 zphEqm(h|BrF}7l^-}2JhXJh;**z z-Ofm7sT>HIqwniq$xe(9j*Nv_mPY8GIB13VK35f}1-{>W+To^SHbm}I|7q=hmU3H= zY9Kb1$ekjQ+tWnkUT&ZJEIF$EKXO$2>PxV!DRI9@-iK|wsiC79IgU1VLnAje<0+^A z4St2;MXO}jmuuC%+aL9}K>wEk{Xc?z#hgM`FkQOr&?pX1Sa$L z@rY7=BZh%>WwDGpu@nRH9&eeL>k!W`ovD}T(rnLNcvpE|6(9?cRaQ$ z-aD`>zH8U+-gu)Lq6xnUj|Shl7%Zd3`NJ32E^L)fKzPM7&n2GeZ^AQIExzR#D9{5R zzW<{y+K=g0XR)xsG*5U0f#!uJ+ zc{Vki9!XE&MZ*kR$EQXQ9wejo{5%{Wr>8B;Lz7Dm4_g9lIC#WPk23z&=fC$~zXbGu zrPBXKGYINuXOE>P1`iYd4HO!iWXP+rL58LxOeOKXI+U^rS}7~x(UaqYj5V1(mK@89 z3zj)P@_RPE$a=c8tI{{1zBFIJ6QD1VgFhK8Do^EFWe)FZ9k~NHs*)sYIZHCRvF8ik zdTX%xx~vA~`N7Sbwc*Zb-g0fm>B>@0SKj3r=RTtdt?V4~JO=Yt^GWRHn`H99zcJM3NrNYE#j;zx?yj(k}x2U!~};i_4_wDIdU$Ni?2QA@UI8cY^ z>5+{>vn1h#3Lq!<>cSnG4XBz%vt#L=D95cCdT-sSv4c}%#rwET6=tjhb}=~8=b^z* zpt~`B`LN^ z1|fE^&zzxDXId;&BNqB9(gg@k6gsZemi?XPs{(@4@y(QGxm>>L(0tZ=r8yE2?{%`< zIwlSg*n%Ouecn{?e7QzhL-EQ%`#T{!Tg=X0zDQ#d$u?-#S%VNHUtdXZhMh*F) zp&Bzq7N)VrS7k#r35l2ZZVqFW0$#`=+5y6h25#Th^}5y z(-{>vBRrdos)%0Faa7PI)5`NR^3phYs2j@F3j`tO5XAI~UJGP>0u9I59)Ofa0g7A| z&BrT5JjLFvv&Hh}ls09b*H93@ z{{CP8G|>MSwf|oM1u^mlzh)?SjT?1tD|3gL1(!(^BR4a0H79-0ds8{H68*HM?^$3) zp_?mX*mJeKKp`yXucSP*bn^Hj-a`mNm2Bj+@AxuTYFn@Wv8(IV60zgz54Kx`HGO;S^KYKd1N~p;;lHmM@5K2XN(hcGfyNwc z8wRn-`P$VADGlW|zOlO{cD-e^Wi} zZD}e|hw!E|;hWAUpSu_3|1T^0H*2!tpPO7w*nt^RZ1_)6Z8pU<>$JP!>XScvP!`&1 zf)krtmGWo8d^a($xz)fM;}ZoIb{Q}Vkvf9S%e zfc~!s`u{ua|FY`UbnQ0lifv9Bs6Tsx^S%{&Hc2%<>FtL|7T7V*cO zS4=-o!ozV~%NHlm+XY&+(&;+VCHCUfj{bPo(B0_3#w&RZ9QY93k_^ioiTp%whN1QE z?uqyAiVwv4`gZT`tA8PQC4vLKxYr;ZuU)&aRYn2M6Q(`$huS#;3pb>YY2T-oE2%ici0KgZT89Sit6?t0^WOeqSBB#Kzw$ zKK<&(@#**7M;GZ`=(@!5=mX|LA;s38@ubD^Kf{biKjW{8b6UY)4B~&L)6AsOY3AAp zVz(|i%WQWLUll%xYa})=j1d=raRFhez(+rv`4T&AcQ+WWL|(#%pbnx|AmYQ_ZCx2y6MQ*F*oM9|wa-p}&~fA%D>Q3}(Luww~s<5&y-oY#epLu0FUu1t2Fm2%}I z$;vvOX(A^7@M%TF|9&IT{|==8deIi1pE-J`wj8Wc|GF8maqSz{&Tny5gP2fTu|ra9 z_k&F&%(?TQ011-_eFnGU%YS+UmNg|zbUZaNIlcuc8@gOc7^w-}z?k{u3r}otSQp)B zvZ3Dtd}apJyC|@WWyYxS(jvfiZNZkJ=s+u%T@^3r3AhDsB&!yBDpE(>`6pfr^#3*3 z|I0W5X2(niVpXxOk(U^{3yB6$$}5yaGs4YgxJgcTP!*)Z?mE#aW=VxjBaKqF@m#Hf z_zWOY7Zwy4W&RXHCDFA)DtXidc{QW==?17!^@ag8E>xT)eSyWsb|Rh>Gy_yjB!f#PdwyM0GYjDPYiWsJkSA)avAGt7$bFp5k^M@ zL^#C2w}?HOD=W0~I#lGi9R}GbZ+B7Tzd!`28r986z#SlBLJ4?RzB=Tx;OgGWowDr2 zbkg-@AgPO8ua;@Y2~?7muPi+abQR12`Kkvve(}jg=X$;iHs^!J1e-)LZ!I}=KIUS!}=%xAG|wNdx^t$=b&g8$>Ty_q!%3z-;`n38`6-JbSKBY z(WENqO^$<`a6>jLA;9(k;!R7A7M7LPvc$x9$I0HmU)k`@&gvkrY6Uh_23E5Xf21}` z$K*D`83kS>3e~s1Nd{jwghljAYinCtj6pJGcGgV}Sm@q1Jyx(ea44 z-P;4AV}IzUxL=0jtD3T8;SWpwmTZFLhB>jQpu`=#h%6wcX5kLDh;je*;WlC$ql%Ez!zrgwB&73T zIDK!oopf0M!Df!=;@m0kMwcFd4D!t+yZ+XI!{_~uQvVV8*o{E{2Z8>dB>g{%N_kE% zdWBS}m#!r{sd!GXEosh~TgEZOmiMBeUW6#W*Fd8_BBdGFq!e9By zTw%6QM2ra^W&phPq2D@o3DEz|Aph^eeo_Rn@a01mb>-`Nr!za(sZ)(&pG)x>cO?%y z+v3bzAz*-6uOApRc^0tpO%~ftC z5sQ1tDMrc9PQ}BB$KC=095AFeh{$Ln-n*-Jpr^lg0C#x(X&0*$AnF1yP|~X2#O~hR z{ksyo`&wjfmAMDc3sKNQDyIthmDa>n^C}D$c-ph^7`&xf2C^v*m?sXnxd{hc_QQKt zUj3X~VnF}j0{T<@2W;~rp~vGkzyJFdzH4$o>5!x$Zo6-n9vY@3E8(IG@=AT^;%J5v zA}RAeEV=yBRm1U2E3l)>`O=|u7DHZi1>X5I?8W|-7#s~{8t$K3Ptb4SUTNuYHWr*- z78nU2V>cy4!D%(V1$|Vw61;gpAHUVD#Jg-B@32Kes)ra^`Z-MwNrDOp&ERj2!f$uh>o&pCC+R3rB$NjCk z8P!hS{nIZ4{oe}oA13_|>uvGaBE1QoSDx_mwewpfGH{JzxJ6>P{Y@C|30L2LD`;Ma zKEL)LS~teNa}o=i9CtrqDU7E^Mvt}^e;q(!;hMq-elP=b5}^#_Q~ZxgRyR%uRymH4 zk6Qq2qz-k8jqiS36ic$M)ZxE3OE0SWD?tS1&p#R%6{wL*O#pWoZ zdVMkpt^prfUJNp&D0S^?@n5vukSnueUyq-!za9_pxjCnz%To(D_Eg6#{O4A+0}BF&nyk6!;fcWp&zfD}>^tUwYh*+hap>EZW179?2eMR%XTJ@fcK z4Ps$ag1s8_on-bG{H?tHFkOSHsoRL!mAU}EJ!{zelE(?qT@=wG<{F#zlCD}GC8|? z>1~3-PleAD*nu|ovRIT?6jp*|zFT0&f{3@kx0JvJ21~rO{(09o?ah+X#Jl78W5*NS z3H<5m?22qE>&&`8l9Hxr^M5^@1Ma%?o!dEB{b3t)XET{+Htf%t4m<*N?6Es2f*hB* zkxvS~pQ6?y-1hXHn_d2!YyYB9*idtJ_O6}Z;<|)|u7t#GBqRK4Xg+s``dT^A<+L_&GP?-o{lxvFs@`K zTgA1%u!`0u`UBM+y3m`!44(+7Ud-29Wh**4ih9pB(o6Z%+3Lo^U8p=4O7lfRGP7st zTg-j6T&oJg`6fhz)mSt%lL*byz*$;Ir0XKTWKe~?>$BYAUF(4|y8f3d3szXTZe?Yq zdscm`%*2wPP4&sk{;3h7DB_i&uk{?NOvqN54AqQ5;&mp%Zjp%mYla?mQaPbjr|o>_ zzkm8)K>y$N@ZT+46>@K{!7H8Js)^gmbTzwC3s`KXQm&P9opfVu%U4T?!speNCy3pR zDuYr+UHo|-Hiu5$8mjfv2So4>GUDq}#Mc|VO}30iL`e%Wbv<#|9fsUARK`C`3_Jn^ zM5xc)H($~`u-J3@g57ayrhFH@{dc^q{ z+W&qB+7H_)b?kXyai(hXLI#}r&c0W8Z^bE6?V+R>Y4|^FjCBjoXhF52m zg!&j4ePxY(uy5wvSP1(%7r(9 z=62JryU{+i{J9jCH5csr52iCiGwDp*-SHNvQ4^|axH>Vc-M2UuzWj?O3%LLPu3rDd z!E|Q=>n)Bvol!OrS;O!T>rLzoq9Ar%(mv>4|Dw$pOTF7p+U6UCq^4!V5^SaDusPpc zIQSB$n|qt@lt)R0@h(B1JC)0=!CQsE9>>!`G% z&|shRe6=vA?RHiS=S(IFWdw^42CS&aGc^HZUc#iwK~!W*p(3li_jLxqfct|oE0Gr{ zUl9~nwO5{B0}x64&TmYA2xf7X<%teB7 zBC*BAt}Qv&bgy05>KcPZtJeDxt@l)u^?vOQ_x=N{_nXUK!43NKXMTib&Gr7_kv3d- ze0_PG-jLIo@DyerPiF=vrpX_)E>U>NfF2Qu%5EE8oT~J_8R-9eYW)Mlqibi?IcXd~ z6w{zV)1stSXwYc#~b(^)72X%yP<}f}>G=&3R=@zKdK%%)~Gv3JvVm5sY^?7I(p+uHdpaz895wGvCT5)U?6iJfPE z@c~$gJ)!p^kk{I$5&i9;xe`A;o*ElY4sId6<1;;HZ?0)-c=XuJ*m!z$9NjoDWMnvb zA~htaUFpok=(Js(Ez-2|cVo%%i8P^9hB28BVO?-A1KlZ^-|+2{)D?zJOqWxCnG?b{;Bbah=PmaP(ZYpVI~s=0zn`$WPwl^RU|QWsv(E2 z-mow`E(4`TlH(`rBdHT)6tE{V>02jL7D;)Xr-f@r*WY5EbUm_R=$kxwS}3`Biuv=v zm@OCtbb8ttDJges7|EZmBJ8h@Mj}5D??=m}Xs#xn*edEtSYJ26*U8I82RE~oydSg9 z@L%YMq4THT{`SBpfc}4|=s#>hs}WmQ%nGGjTb5u;@pPxqCQOgHPy%(>r97a(c4hIY z&>fTgIs&{>$`$kKlAC%c%mV6oo?(yVdpd(#3*J=|n~{>^nVI3#q2%C+ne2(oMDqB| z;ArM3kRF01%H6d zQ@Zc}0nq=Cw}-a92}fzEsv za1gIvV93}Cc1$0qblkCJPGYrjWQHUSFm4hypN3c}NArOulGzZ8bE|d&xK> zJvz2_ZfnO9IOnJ%QkjlOhw6_=?>YVOUkCdC3DBS7f9c3{{o*;iW*!Xv8M=bs|KUHw zcg-WyS5!y1gKggLuvFUNM%}QMRFd5<8EsLbmjUI5EaT!bnR5+5#odbTCy36oC4?ilC^y zXP*t-vuh<3CeTNt9eO}+y{<@b8p9|?YnA*#*C@dhBxSSF!_EtjjPK#oBsQxGMDTgq zXiq)pYR4gJJ*FQ&m*@ie|0%5hKSa{Eaf50)7{WB|uzP ztuNLe{?a9H1p5COtpBI`?|)G`D9Lg=NtQH$!d%OsF#k-TFxTwe(Se{aztXXDN5}RZ z9Rv!~u>mN|>#Q_9?jRr-_}vk@gTlP<-5|a8{QW)ujC<1K{`YWO=i%Et=i0=>U#rICY9ZHr&Bp)!-~S5e|L6Mr zkBibAe`ilB9zU4u-4)#xA52E$@l-szJJr(@9UO=yle>EpyZibRdlEgJ5i&+aZ>G82 z%NC=Nz)GZ~g-Z5Yi0SDPnD*!!7l6j~(9x8fx2f7)|v3Pfz1dU-bvD?l1kI zqW_ks)f>bAp_z^SFU;N6IOvakdWWC6E;XU)O1N#33&>vIcJZ!Tf{vQD3S~m;idYe5p*}J{%x})-DgTng9*qX$>)>@*CeP>h4^`%f-t= ze~9=09|HPM;v}{anYiI?-<2;}JGV880ErcMxWpYtnsCR%KYQO>fjbU`;)oq*|Afk# z-0{?*eX zJ@kJD%8YfQ0j6^|{6yo4XiwZu^z7-|4gc@nO+TI8V#iky=9V6l=d9Lw0)C<+BhjHD z`|#mCBO`mV*{SaN3hOA-oi^J|B8hKZ`v*Y(ztr~MSkmE3F)iNP81|dDjUW~Up21bzr6!LQi z+Cl3kQ2ZG@(>TwlST^b9(TqJghA+xX79D8WD8{KYT)h3Wy|ks9NjQG(Z+E{J=>Jzh z|Gz}~O9}_fHBbc!7xfRb9h;cn{;`Gl`HdF_pi9ho_v3f5xGc-CgbO4U!;oR)c@Biow(Er0~{qwy)CGhgfrw?UD$5Z;9 zhGn2mhJ1%2c>BIiJsXxgmL4ARRfqwkGwYTPR=w^Ux?-Du2K!F3(Dxf z>t5Ki@adz7|Mn3@e|i@s@l0+OGjPB^);f&G$6!o*ECzWKH;9>!^p{#O?^+5N6XC;@ z=qKNS6_EB0h3;2$E-WrZ@__F|tj1MKc%r^~i$*nGSu|IU=4NppGQY&>kMdnL-|BSR zlO>&zhf)RW`w6+|mNw8k)Q2#j9WDh=fG|VNG4SiS9iTrQXYh(xbdRNTs`Ef`Kj*|b zv=3Cv%gcHf$WDxo+1X))IYj)giNoWmON+|D%q?eyjvPkev!(q7=}c8}K43wphG5<0!IW_n|o6G_B&z zxxmbs1iL;!1`2r!2(vwQnzLUi7YmzVtk5e~rJH9+k(9m<1y&EVMEuh2uU^Z(J$CB! zrka3yQ@%@Avk76mx@MHLTW28bCa|eds5{mM1CdtLSbq7`i}C*dql*6PwYr&sHEP)> z&es{Bf(fuizCnB5Rba!x2RlJ)yUFz?B^ysJd)C>7n`(D>0n<#2!>br8?OyWa?_&J-#})nEn%=y0Z^^HQ zyHW_c8`baGma%8E+lGkxI!U`P7jG;Z_vI2^cqfDB_~swG;jz0$7^YK8#Fp(fZx<2i znDhem5*+(#PO-R3-cNzlljNJ?PmbqJzeSEN%6U?EOLlbA*-GLpg5=;Ha0)^$;R8SB zq37D7@@yP6&4iEE#?u~r+Kbd~RQ2Poeej1s|4%6TZ_rdvMC!VJ&>^5|PL>NJn9ai! z6?76p?N;UJ6s`U}ohhoA!&;%^xg7H~Kar5*C{RC@ZJKXEI;31KjKZl)N%g$mEi0qE zW=ImV+Trcm<*FH&h_|cM5vOQG8-d)-=PU_v6*PHUeBa2Ij`-b}Ti$T^K!Og9b&q^U z7V=l%un7-V2cx1H#dg&)IvAGTb$L6c*H0b6s3MhBUy(}aEhP(?)$jS2%w78ep#R?} z`fE*2)`hVgT42t)100-T;@#z9Zf9pRMr>M5@MK3-!6vw~la59S{u`@pN)6wMPdgac zcmN`%P@G_qbJbou?|{r8!NK+RyKtCu>^XVzUhP#vOq^>DcDDs() zE{5g^gHnEfyk(=Crtvgko2RGsNYV71>q!cnEb)ImSb6?Of&QP=`5)>;zQ%JhuRV>? zM+o|zr$#MYoLO^X*=sGLqwv^`+V>9BP%Ts>Z!ib8VPsCevgj=H(K7G2hn0HQ*uv+zi4A(ng*Gdfao!d+Ci6y#Krrgb>gmF>u=g~>ddQRtK zf&QP;^p`yhU+9$duNFD}8Sa=8u85=}lcOP03a+=KGAYXiRDlXp)eg+rFL)3*ph9b_2-+Mu0>4733M=bHg}5kjYep)jXn0 zRg4=JsZh0LIqds)Nu@i<;#X*Zl>C&OU1{m~a*R+KRL?IPhE*)D)=NYY(eJn+`Zb{c z|Jxqg_I0xV)o)mh>0r%`lj0&tDs5%v+Lnh^hMMROKbu9bP-db8a{_6 zc%AB)rUa(Bgd;4YTe^bd)as?{DVTHRS`h){98UaDsQ@v`HCKZ9Tq}H_wqRcqABgSl z>+Rj$CEybc5x%!}wrJ5p&Wko`*2QeuntgozY7Fc6C9he#pw`nryz%dPf&PCB>mNNl zAJ(psI<#$A8O&>BFdu1RFn@IN+_8`qN`@XFi0m)!!?LEqJf6->qz-Mm5a{jl`fg|r*JGZsDfyq{MI)!xl{I9Il9r3YSkD5j?hFL`nNO6_o}Ub-kEHBQWju!>#}22)Q>1TCTb8f;Iy-cIIDr?f z;qtj(HdHq8q^s=1#nE<@4jkwRD&oe~)47$SBtXg3ZD1X|lVa2bokJ->yJ>`#=oSjn z2nt~evnruXg;6^QRHW`FvBY=Z_oG(<{XebopYRQwK}+hvl>tPdfH79vFiL^l8{E1R zGhumZ1HqoatP*9GR@s6kA9AyM8y3pVc1y{SAps;C#)Lzm}d zNTef!#r(&WD3g+R?Fdf0qs;Af`V~Y(2iV7;H_`LovXR-CU1Quf5Pc%et+^5 z=KuS95C1Eli=sZKHZn7ztdB&4h3aZu?(w=mZwP!}=OByTwFe9NqRNPR)}BD2%ztKT zK$^4mkv!(m9g<7=vv%rqwc>b!qb_54d%Z{x8CBZk!W{3SUX0Q=W8-Q3fZRu)om#a# z1FTkIWgSzaqM5;~0uSZkp1v-x3S0m7|D^|V)*i%6^p(}YGVrge!tBM!8?X zGJ27SHR;9QJnfZV0Q!H%!+&a6uC%k~dRYK6B(nGag8}Bpz!}2LFWb?Mi_hS6l zKj{45X!@v13NEal0S0k_TCj^w_(K)xN(0wx;F+E+Dln*IuTe^v3A+G_mt?QfKtK|v zhhaOo+^`hwJ(jH=iito6I><=#IUQH4A~Xrn$JjEcODI^dH-j=3_~>wk6sDf8_e3g- zl~Ffj+LW)3%7cS9aC+zwToLdBoNTBe5M9{LF}dw9LOtm|1A$J^>TBC&bV5QwS8(|# z8Zis2P;!MPMDGdewtONThf{4a`WkW|&Z=q;broeFjjG;emtGJ7`v0Sr|K(DxRJfgd zvnb{`&@~W(k-#YGf|d*75-@M-O4PkZeK6myYi=@A*PLfT_wbt>f1tD-PEvE`m&&Ql zGb9@{jgZ^hs%TMFR0!mLis~^splYF)XIH%>14VkjE1|{00%(uuUsu3nTdNUeNPzW8b53kV#D{sKz9#+D6bC_X z**nCW65%S5-eS6BAU|6VfsK$lD&FK?>4wPh`Zl2!X%ZX6y%@2)5K71?ni~5O!)OsS zXx>)~Vq0nZhS+qJw`gF=VE>pEB5abDnTF9pC2kcl2o@1LV^dr~;z)ETC5UtRkAL>h zW`X{nQ}j2pCrV;O#WC6_t6<3tZYJ;o?3E6CRxXs~c?nPRu=Ld?;rTC$!cNYaw)T2t z#hCg{8XvI%hQ8%^XQjky-uX!~mzxm0bYS!IX}1hrOL$mshUqWwvJa3eLOG!1%~OH{ zrj8$gGC4UhI+MZI8C-{sAi+hdXP_Riu`hTQ%s{%(bch4pkZ(AZca;3hiW>{muE?mG%yDkx)NV{ zTItNe(eV+!>B|ltPK_iZ`Yfn(V<;7^s&apB9+80C5~mVT`&4Ji0ZSCoPFMF!OJ1rN z&v#-cxNz=`uLSykVS8xXt4aU!tSMq_mhf0-6O;@tp4i0& zR2DePp9L<__kS$?n+G2K)3voN%_xvaQTsGedyIm1cXH6~TPSGv+Pyoj!Jyq=yJqK( z z!hVe5{TJ+?$x+8glG%yW_{`X7cIH?z-TFL)F7r^TeKmzK;V%It;vb-wO-1m44@-Y~ zDuPGoQodN9x}ZSb1oO3`Z2Xjy8dVy;qrZ{8@7&eW++w9%Qb7`Sx@yf9%X24DeFH7c zaPvhyiJW{v)q75ptBl3EJC^E>xIF~ZJeb;Hoo_QAU@dW1j(CMS zT{SFIHtX}Q1fj?)mOptEC<2J=jgDB1I`4y+=X`J6w`g2?W(o0$AhYOEfS7mr96HLR zoAjOY$#G`wAa_v)!xe`-1$a~q=fz(+dgCm^p#Af!$=#%$0%$+E0x(MvlT(lC6Lplk z2^CP~fw!@5iXA~mFH{7_=Wnih_mhDBU(xm-&>-O4XyFz0?5fw-89L~4UImKyBgmiN z6F77h$~j3@pwpN~$YjPknl5WIqJdBukuwBUnbl~hMCL0BnH(#uc3h7hbl zHW4ObPGM7`sz3#_v8!RxStcJv^;9RGAfsc2&*-te(1APhl`;j}24y7q61&Qwh75F}yCCJ!p>LQi5uJW!^Na*-JL*ck ztP9btSn!^{#T|U9;LhcXMTcAh+Qsr&uac{bZ9MkDwewrt$Y5tw8~G}2OlaqJMH2%bJ^N{<-V4^O-N7{WqZh*MR;YSMwKiXrYGh8SNJ zAj4UEFqs`p4y8c%_v%y5SZ1)9T&(^E-mMkT4p6JnYf>$xy!76^pv!ZTYxKcs^lD^%HbJR2H-oT#il6RMvu_DLr5U zzCBegSz`eCkE`T*Birap^ByfQj$G-(w(B`tgBr)6a_3} zUYh!m*~w~osW4{`;f2_cXYkBwKFTsSfF0gQ(7@PH&^T0KG?y!qlu5!E-HIh1AiW)T2{>Bk~~Tq{&d6@r|^n_NO>=8%b2qtRh$Mcary_q}F#WIgUb z?qWgOu23IWLj4R0^=uQNe#viLcxUL*p}{|2`&UHo3;*zSSlE>6&p(z*9cj4-zx?J) zF#q2_HIV-vMkCf7Mzwq@vQ*Bklj08r!%9AXQXM~$5%4`eDpps@Q7v6?ouFz@b$11| zO$h|iQDVAcIysU*Y_?X)IjgAnj+E&yWD2vq?^x_El5?o%vKqvk=v#;#EoXlp=>IKP{~dJy zv#yp!#Oh4MVgu1wBASQ=Qnl>bsCXpS>I?C%fIimr1;R?HdjZILQE)mv3*F+{g?1L2 zxv*g6s#SlMR{cbiRe$NzzPel2H@;UR6%WO`4EPVb+OuE`D$WpX?&gV z)A>mdUz#+!0G_ly?h{EZ6`bK+QYwcY|1h*mKPM;<nn)wcLCgdsN-)#$I*p8;W%dQvRJ6eFy0O zZIJ)*P3iy0fr@$WB<7uL!n}{a;iYefEi3)RbI-gNU53AVITkj#_m{F0Ge?udX}ZX4 z=Z7*{AI0>oz=`37E{b|6m+u{wj&_ed zHadLb&}b$cj#;43$L!!Q#DXzP({|{K94kt+S_e+xG zn$}%&OQc8+vjxkXu(EbtYEY>>6(}?Rkm~Y0anLAco8Wo!28trU3mvhXD!E`N?VLMTiCs_`amv*cn~11S#qjq zmn9UT_Uwh10{y?M=uh1vH@M&+yuPEvWbW73%DN41))<;HI+irK+1tXbSBGSJ2XXSD zDO2tlDsOqKvs_d#`YOR#!&QJjCCD3#cD)<<0^u=gQdEe>mEfnWM?v~c^F&MLfYhX+QVPn!QxZF140fM*CQrUb(NT7OL!Ad+4+U*f&M=P`X6KZ z2b*o1p$!p##r)YVNK_EfO1wXx#QU)(;{6%juYG063hfI0?u$XXAO6y%Sk{#8?;cN~ zp2E<0ZT006FV&}4(^L{8Rj1_6dWJ99r!C9>1>-Uv933Z!s7z|umgknQGR_g_d7yyu zi6RNzH%#n@fK!mgS16sXEwMD>9pp39zz6gRsM=l%xS<#P`EH>9ziRo$Vn z_Mig|ey+Ht_YvN7NWMYzhDR?W`U?7pJp-wVDcN)?#bQy;392xn6ezG7w&_ZqIbR9# zrJ_4AJRtB*O-yR?=7JIk8txkUSR(!xl)cXqAR(wh&?NY&Ju%vCn*`9n4RXb$jlAen zZy^>s>^}LqT9psB^u=-wh?JvSDNdB8t22C@e2x?Bt>bFH4uO26EN*l=R;iT;?T25* zS`8dXKFV1Im+`uc_RK3m+_(ZWZZi-Y-ORyx^VHwJ=>87?{ePtI|4MSYUuD}H10Iq0 zJm2TR$zG4%bPzH;rMm5~vcfrD92}(_Mer=SyR>+e1{nnybl!6$$MNCm*c`gY&a~-U zUJsx>3@pLyre$=5>h20g4%e?eb)nVN+rm5%u|)3 z7?skkr?OEs>O?pC#m@?4)p|oytHA;(rO>q0x~zWX{FS3X|9?~T_qjdkmRK88^%m3( zGA`ay8TbLiah1nT!|QT0Zm7EG0c@)lth8{loi_n5gdBXfb7%L1A7qPuqM%u^+ z(Bz-=jL-Z7(Er~x{*Qi$ia06Os<7j_oXeHn8rZaiMl!bAEajp9tFq^?>lvL1Of*_C z=gG2GRv9*%F!h6?*&x3czv>rvgAK>+FdQ$tF$Q=F1eEcO#TBzWa}=1aZMq#Q9Afs) zDAU3%xF}!Dngxpht#(Ti1%)vbg{l~`%B6)e8KJ#oK`n8Qsx`{Bs>{D-{;KG!s62)X zxm=MhDK*1jKk`e<@h6X9{_h`a{5QP3ummNK))G6bc>5DWHF={ZL67uQkPx2hhJ`Iq zjT(2)+kJe1W-yG#P(fx(H2dVayr`fTc}U6y6q8=key|AIN_7?%t}Py^;VikT>hHx< zwTsMl+3fJl(bRbQ;E9=RY8?KW8Kj)CvWdCu);V7|?N6c%{iDf1%wjmQDs-V;yLJui z-W{>^$AR8~zOK!T52anMkmEIu3KvOj!CjJ`rH8Ttvdo-augawBdT3D(gA$olx~@Oo ze>c$oKg{#LV6dqH4aEBgcJJyk^a^qZsi~0qlARekU=J2+Bqr)NbnHv1oXh(LYnd7) z@q8&aJA=E#>J0n+s>mqx?vm5?$$Wm9L`{LO`b(Bdr0P?1N$k{Br*T5Cw-~(bEa0{e zXaBq31DAPU3W34j=X-gJ3I|-jt6bTUtwTJr9jvtCMYJ}A;=DgQ*dZ_ z^gwdh+P@!rNi*T=>%P&02RSyDwIx)y0&-8Ju!U3NJ1yXqCTgQ9Cb{vna@sMF;$P~2 z6vlu41nB<)I{#tpW6N1jff=K`j$6!p>VMJ9e)_?)TR5e`u}_^C*XYD}yvd2tp1c2x zp+|>OH{ShvGzgA;>d&#Td1U-Rc4CGS{~_qfq15Q%WcF}toxwXwN`Qz4@k9CYVaHtz zFXYRM@GlSr7N!dv<4cK24ayCp0sP78$6Ohm{G|de6cL-CW2vtNN0v8KLq|107HXwDyqO>1aJ1a_z^ zYh&5nP;_@}8k6Cniixi36vEJYLQA{;6?NAdsf+&*s7sh)UlXQpa!(@Qo6K&^Xi?Q$ zD90o&E6XR)blCAx6mOmu9Jywu1NrH~Qf9wt@=VFXyGa(FFlFJ|2cGp3 zp#M*S{>hL({xkaabB8Ee?;Z>+IR5cTeAg6>9~(-ZXsIuCebXL>P!l;Af)vC*yXryt z;Oo(YBcqv#!~dt#IA0xJJHN$Afmv1rJ4Xb2c9YF3@r;*#GGuK#yzM@q&+|T(z@jF7 z{&8~B#I$Po^OcAH?8iX=pKZ$j-;1uqn!~;=YqC^87XYV-e<6BF8j=3dj!?0~SiH+{ z5cWCbj2|4ddgF;i#O_FX)quoP6%7R|njFs%)E2CwxqOGET&Gu7R=NxM>U?*(vT$Q% zeh&Y`io2_)tH?7@J5C7Yf)>e7P&p!@)eRP>bVZPO1;b)fL!?S0_2Fc&Ql^kKvS;vI zF!UWEPqCJ$MoSQRDwTBAQh+n)oh_y|f}Ft01h+*w&8SSXlqdjqpi_l8HUU_2*5{Te zw1FH2(D--Esi3mJ_CLWHkuE9#6f!eZF&9Jbm#>M90sVjO>HlmR7T6Io1adaQss$~= zp5;^uG&c)1{D8V7tj=0#8Pw*&oapSZKO5f=t`hFi;vWH5)P_Qmf7nD5a`A zZ_Q(z-D3W<1L{~|37B3o-4Vi({6uHrCprf|(H#6l^Tv?S-s@3RVv#lWbINOk%}rgyr@K5c9j8t zPL?R^M0tfh-bAkk-7&X9DWY>Zyb~9j5+$XdN9j~nKxEXMgxcW!0r@9&kzqi4J4Mta z*bn~n0|@;J`~Np-{Tmcy6eXw?mu3xw5VVDt92s=>f|iOKn4953sdl>C z9#!b1!GS{$*&M>QIUzFP&UlNf*IfJ;HL%pL7PA!dIjDE`&&}m_4aDZ6Fhx!@9!vB` zclY)8M*C(5=KA~kV~O6}Z0E%YP&Ks5>z=T7fpvqOACEj0=)Votf4c4XKT%trt<;u# zNNt%So8x^Na9%!3J3@H5icyWrRSIY9 zB9k=i6}36K)%40KTrCvkj&U#?3NAtp1_x!qJTqJV zGjkKBe)}U1J`w1@9q9j3oStS$ehY4t%170eRJ(fghBcX)r8{1`c7BUw0=g@*|8-DuJs>3x*h2MFc1IP%ZY0RoxI6C z5)nHEX&_?rK)O)E=W6V+w!-?SU~yO~I971}$)t(_Ro!Anc5&po!zEOUQ1=e2%Rbr_ zDm5~^bdle*9^9Uwc;((;X5~8D0$C8e$MuM`mI+!LYw(=As|H+9sD^Yah-Wrq)+h;637cn!|>TQB6_D@;H!3Nh&a7!HY{=5_t; z+Jz1FtmDrr6@mVbfb}2SjQ)q4qS{aIrTuie$$q;1y5IaJ?5F!fpMK?jgrWF-ENkqi zPueDEe#4`O4yK1w_M!37$(FWP4|bwqO~vv8x;!yl5vknCp&@%RGc-ztI%{wcn86aA z3_y|2q$kqJ;hAju*(rN!-?W0AnsEzvs1y?T_RN9Fg9lUNUOB30wuTlSv+Q`PLD@>a zVcE>+P>Oqvh4AP~y`CxLqyU1*$e)9wBLp#uB|F(9(aDcenM0t}(gVKOY#gnrTw2iK z?ghX5+UElOAF1U3igp#V8Rm&SeSC9?Dg@@`(cbAeEBp?ZHl`NO)eWiREh{_{BdQ0d z+@dpH-cKq4f~7z%$-jyBton-6L9v0s?9Ev51)XnUm&tM)n4nU~x{1@|OlI+SN` zqm-z0Z_M|w=sH$X)=ASJ#v)-)*1BK?+6|D8-^Ep#$uPTEA(m4Gza>{vFuAfxU145zzk~OGa8yHF^$yz9p=kfjDa&c11I4r>j=CjjM34#gOeL zc9(}?>@ue0z=$12fXOA$erH!<0d=uI4K|7D4-E%Pd}jUBrzZRzT^ z4}dNq{!wl|=yc_|4 zzFkmPT)K#_%bu+LZiU1m4Sa4$hFd;QH=1|K3zjDeBD^k)%^hAawn5D+{)*A|YiXx2 zVSCOY41$aSY2I+djU(0bk%NHSe<^R+Xp;1 zve)9X%;*us1)zLU4mn5SE*4kz7&{#6hPC77=eo?KPJj2ow~PV(AEW5+K{9zKVqc1$ zhwz62R`aLwnDR;TAC2H0<3iqkhumESX@?WtyLZX(=?>GG z6PMLyLdgW$QQV-!kXVR3uQ&49rYthidPi3sy1`(BurW_&SFQy5U*^SsfTmR^`67Ht z&Nq|n5zRpWD|p?woM*gfzRbfLaBIF+t&szMF^_k^m;}UA=qawjzsqCVBsl>`Y&`4o z)wVk78qjapZ-IV`D8F5aR8l_SJ|AsVo{b!_rtbskIMUPn>18;fanOb5-b}l#ajJ$v zMCwmRbYybf@?3!~6G@}j`!+Vn%auGj==7%!Hd<3+4H=I`c&wdY)%;-T6AR`kG^(P* za?_j?nE4DgU9utK(U?@Vx~vr4z+%7i+qZuP=>J$n|CG*1VH_drtZ~AgGeoeNOmYMW z82D~-nwh8=-8cGdkQ}QsC8PaavhJ*Q{q=BV6 zDLJ%brfE}mp{=qK=Z%QY!vS&w2N9XAco4>rGMF_fn&=9kTDQ`z)AQBKfc{Sa`V;T#r5}oHuUJwfrsCHm;eyJd;=CXFA<&rt0uFN zlk2*jd6&yCSyy6&XTSMfebA0(}*J9QB~e+8$t#mg)QRSkzA-!|ZEp3`W&JJI9k*Ju!iU6cfdZlB*#nq^6qK6Ad19c~2o8GvZPo%N-I`^zy*ebij z`cZ4|epq{t==g&?(EmxW{vV6<4{dv1leKtN>Wy=-iS&oAeA#|X0RJqg>Uri;3>!iE z?e$HAYZx_6aWv};<=&mPEb}8HYM3R^4a@jQ{#dsEtvz;nbY|i(C@4dqBEd01KC}SW zk*$_}L3e`X&~3sLXe>A~-A;~yHfdyRAJ20ZyBxvtQ6@}6PGsLl74zqVd@#dh75)PS z;|5M7>L@Qv4>s(WlR(h2@V4HBA(G|D3Qo? z!XhXJJS!U^*-p_49GY=1IdZgI&2zY~h7NQ&@*F2(xNtIWM!QFXaj60o>76X;Sf-hg zLXnMe%ZXK?QIH=sM|P8Q7{iCK$ykE33Byp&;ikgT!}nJ~?qBv4?f-Sr!_zTJ%QlS9 zgqKpvpZ4xN@$dlSzzmvrE*w-ql`3Kur_nIXN?dY(tUu8o8|Z4#gi7SA5_X|4H3l)7 z9L5Qeq$PGdvGD8+$7XfMLF~L-M0@q}4Cgx1xqAG@YSBpfUei)&rJSE22Xx|OV6*w^ z3PPzEy`W<}JLafZX>X*iEGr#6V$T%|^p8e7aDDN}8mQmPZ>60;C2J9zzSYdm6^FNf z>nA|}r)vK%tiLX|#S)ug+1_GiFk(9ri8yai1#y05q_rhVcnRx;tux)$C}kB33QvhL zAv(cy%+_4VfZY)K1sFo3&?p}|k$>1d9lYK@(AU4K2gC2PsPZ&Nm*Do*9S;Gy8kJ(~ z3d8Y4>|9*}sw#)l24NVmU+Ei1_3mIDhPqE-AU>1T7+8Z?@4Bu^#I{8d+7z8Y34rxI zmzi53`0_MER5w`2|ME*u|02-;a*hAH0cwd`E|LqB8+Ad1%`M_8w~XB(fM4Rfo&UcH zztfPvHi5pgE+&rc$HcMP!Nj2`XLE~eUxK zPxIkFc(-S2angNzv8XExLW^1AS5UXTu^W>yfinoFPO%~XBLF&vcA`5g`iW839>&yB zLSGPXSPB%xLunZ$YY@+bki0RyNkJk8U1#0^q4)d>fQK9x<@L(q>Uuq);tg8CK%9!F zG%YUb|OJR9i$bWML>LVN9h!0;(J2QygX3|F?- zU^r`?K}Adt6ffK_rnX-#^{fVPCi5GP2q|M~i4l#9wl1C!C;Ib>)~Qa2zm53J$??q0 z=vXQn-AoW>+Vpe$S~`9YZ)=)T+~ z3$O|Ln^pmI%1v`}^nCbcNju?qlY?$aVi3VRq9vEp6}2su=JO6-D7jIiVJm7>Jy(#t zEloE~3HZT8O{|T1(t&eSDKAV6pv6uKhAlz)Nvd3|bbTSvHLW5y<(!)yHiz>6N>~8+KnK77 zHKhM~NEv?9r=A>4zZBaOi^KnI`~&~r88KZW%%4W3yJPqh4`h?-j0T^t*8@oaWhZ*} z^zDZKt9RDz2)`7wsXOq0ekl>`NN@k1zJWb`ySjJN&!(esHOFT-KB;R_CLI3AlS7~TY}c!S{#OD0|Ag(ov!;wVfMK$DZ9kDZ-d0xn z&<+fL)u|v>PFANF?`j%Y*^7*ASb#Ee_+Iad*z#52HL1+}jDn(3Np@0ZWEpq8)Qwfj z=T?XMJX)ZIJ(Vqxc_WCdFGXBHo&7!dv}Q z=ih`I&WG2&i80q>e{~cKo6Izt92z1S+3t_G!AMPk{Y8D-h0aK>>?qZ;w{!S_|5@Ox zeWjqb8%ws6z)r#rN&14?u>;R9DkhO%&Z%Lc#M%`Ub0U%=c4ypmmtG&Fp9EWQ-QFEL5w_qhJ9qBbxqZh@f-Ts&0c^paSvh#Tlb{OV z_s-BI*WzylTd=b+Y{9)B1NnSYXyn{}1zV6am(X)2$M7bp{U0Me3Dy*T^L<3VH1(tn}94I9z6!H zaj3oNLPr-v8h4NFb23?7{&0$11J^r&Z4neFi6)^rpJ*GmdE4rGL?Ar#B&8him7z$oR05)IxuN7JB}{CX4VKVTbGw zJrb3q%YSwWmNge)0oBgQ5u{I>eR--^1HzI~O>^a9ZKeLvnG*|lp| zBoXhk!-+&MotffY5@BVf(67|!m%jJGyG$Jw?$|w1d_h&aT$-KXR37o*^||7#8ln>=$0m9iN;&9%8*dAg6Urf{uPI6b5BwLtG(?{S2M zgCXJHe_&@8=)Y6Rf5(G9^X$=!6qjn$*aX*}!)`zNKBWIcqQLrDGTz&}tG6dMFc7a(QR98lcsv^KvE!gM4(zGdMVr=S-(bfAzE|3VG&#B{s|L~I5G z6p2nXByKc?(Vl@`R-o`hUpyhP-G0Ach5AE??I?GYL?SO7ye3?v zBtUc*fyQ&=P2X;c_@e|fU#J>8Jm1=&WKgT!%Yp59cX8Bt?6^&xhR)JWO3V%`5n-Y4 z8I+fsY$(eioML!1hja30AO0%PKdj`xf_SPDvoAP{3~d<+Tf2UHc$RlpJ~)$)Uw2a_CW0=O2ZR;_qJj zZ8Sc`{uLd?7fnI*vh=}qv%7BG86DEVH3e)>>3PqPge!$1?4@YnzGJTu+2Fx}@wLW7 z7h52GiAPMI=Kj~e>M=n7>w*4Xp!lD9A7^=w1{4qaL&usla$~HevYo4WH@Ju5S1rXd zG>cu(yX57GwewqK0^lmekuN8XEHvTBOH=2*4m;z`p}$9l9QZ*P%bE=N`t0G+WA?$x z4Bv?kjt;fBb%&ne?TmFb;T$wZ|G^I)M8@-e@>DqAUUq|`KUFn0K025hnjBAYU3i0r zx+EVZJqv{Can|6y=~mB$iw5nYXrgHGRM`0ayLW60o!n*!rpM*(+RCg085IY-f;ix| zCLHkC!}q_OvQfV09=w44-g~jE$pLSnNuyBaY-^op%mGr<)NpzvJz-Ck=jRcnVH#bs zX9z-fn#&E2PG%;;*LUFy-|s((@gEVj|3d|quQuBJas_9hRCcRy;tHhM@pBWsr~m{a zmM@(>rek-Pi_WU+Gg9dU>vU-kT13SWhY*KgUM%&!_}EC!NZRvdv*z)NYo9NK%cbeT z^O15i5YeMY(UPBso5#%a%CUKZl+D0=;*=SFdTPXe6ABNBe7MkY&Xxq12&8dJG6zXv z?XW_xFcr1e@gA$5p3weYO9r`rzwy>yKUwKA1D^iN-@oEXK>sM5|2{Ez`C0a}c#N%Ku9?9(D8o=?*xP$KJq%Llg>Ot?M0;=tGFqApS1ThP>-qf%5H0Jz4zBhgLJwX3%SpU~Fy8mN|cbk%UuOx|gvWdid+#lS35+q(<=uIf`4u89ZWlf3q zdzeNB1FqYXcRq=yYdX`3DmaKb+V46QNZ#-;Mj&@0I5|6>($i`CtUZ)En4BD*xU+6+ z)F@pH#4lKxL1%y0(klN9w#rWV5j*g$J|XZ`wErm|e6;H?Bbxb75+Il;3?bN>ck-x` z`>`H5ixC=wH)yZ86?8MEGA}s(l1BjjZ`A((0(rx7o%Roro7a?;EFyXwaw5N zjP4-^;q!8%GpeP_xb?%M$S-3WK~DI&Ms@G@T3M3* z)=K=h3`@i*AMa?0^q8nPyeQh{;+icN~He{?2z3{XqX1(Em5+{!c?stlGIU3;c5BBu$!La;=Iu zU~n+UWgZ-2qd;aIuE6ej+NN9dnKgyH0mkvIKHS$TMR2=Eb~M}v#l*?3tR7SOUN zRg>$|_~2}u@&M$W-@f8gKL`59)%r(Q;qub5JTun=lLpzt_H1Xj)(xWW4Uq-F_xAqAXZ#) zNUyICb`CBW)djUXpJ%~BeV}PW4%9J}8cdHQhgD|2hCTO{(fzObXoKY|1&UByDx5}< zp)U~VO2l0Y_=d}yPJ@TT+L?-r9b%OXTAjVPw4xf%BmgK(xS^&w-5fVHE51% zGp@9`;S!OSl|u?#YEYA}p1Mj5Yn%$2=Y^s%*qwz1%)CdgnNosx1;uZg`{{YBH``u4 zQO+&mX=(vb9O_mg5-@uNtsY#gr?)#6>4E?H;J;n{ySf8!!J~%nbsp%9bSB}y!JxS$ z*@Cge8_~trmNljBC--fkAJms8?X#@Z?KP*k=ON+-1R#m6%LtvZ&bl%|+goR>dy}Q& z^~LHMRHfiwRq*P!{P0CU|6ZVfmi7PEAViwXhQT@8_pIH&WpV-i73;i)Sf|v4b*}jD z`_K@)@40us2)#F+_octU!Y1#00TWoJMn_NsZOgMYw1ZP%E)Bx2*u=9{O2CnR6-%)q z>@RBt%IezcykLFVWa_IGm6CUBjOsXcWFmNrPqF3W=^-z=WP$5>;#)qw4D|0)^1psV zr|Wh^oMUUs9AQ)-d{e$yjB=_vODbEXizqoSV{@$}b-g&Aw7ztu!0R0&pkt@KWIy3> zJZ8r+X>A<-53?WMZSRIp_+?jD$GUk;>uA1zp_L@28UbwMN;R)-KJ}=sy~%)Oyfj=H zE!OU=4So#h-w*U(3AKp-xan-C&HR?Vz?fe=yM^@#3tS0@Um)R7ZXz76dh5MA(M{*2 zYqKaE7C)cF!lrQeb~-zg9y{7QGm;z|OSJ*C;^p}9*F?8PU1D+2_n(;MjI-8_o$A*J zie~b`LP`6&kV7FJ>MWmm34G>f5VsvzR3%U_^@?*v~#J_MScS@Uy3|e5!Xw$~=TQ z)&lcx%tq&)J#pCky8F6!cXq9>q^(;Cjiy;mo8CLu&*AYj&yVeN+q?+Otro^F(!yA- zTNrg|owyQ>!itFwZoC{M3I-SU)QB#;ud-@sxcgGnzqc$7<1) zQufqTGBY%7d_%9@sj_UOCl2G;wOp&r<@GCpFX#<ccE(Ask4B z!Gs7%284jo?LGDxdXyeYWhT-G(?I6~C+totA-O#)M0hlwQzxmwaYn1bXstyoF%_Zgu!r0SvDmycl8lO2l zIyr8WZJs)gk0-~_DX!^bFIKgA4ZyEvIe84d3h;#Lm7by0@iAadswnWCvI#bPmPs8= zjW>Lf&P=4nk0yuh3}(s3E*MOxnokbWHIY3$I(UR?;V;g7@-dkIVUME!ggu#|B6sr9 z+gzRX8DvWN6~Wz+B%Lm8ID+Oue2&-%3IzZtf8)e(HlmkUlwvB`hN-3vc9W8`z^D?- z=<{Ex3P{Fm-bSa)*&d!TP1X-^;&K*UM#AbV^=D5D!UzHqQK6h5d7 zJf*pauT|Jg3p$}jJ>ZyS0FGHn6&78do2wz*03&2wxxH{F(0?!N|GUZmr?P5b+T-1% zWM7rA2<#-L%__K@nv%zAN^ND*_j|m0yi=blkgs{sfn6X}nm6gc9#)~=?LoVuTy6`| zRljI#(~tSJJKEn1VRKdc^e@pqeR~rHcIOAqouIU)_n}kC>HqfuENkq`Pk#8=C`f}A z+J5H0z6AY0Z-Vvz-A4C+p{G$k((q|m2*IN$r!Do)opWV!V0Nl4+t~gG(~BCXj!U+$ zU1)K-8j$XGMY`7#=_*Y~7kSsYouNmCZVKH2lw14MtFfp_xhD)0fbAB#q9ePgrZ7ix z@!wtI!^lyuB#I>b>9>xBG5_m6p#Mv-H~;%#KLMlTR%ZpKSrO=UL?E{bfuf(i@9nU* zj&wc}uX^tPe7kXD4kdi zU031oM)ZwT7{$DMNLOzqso*021j;9A_#>Ue}XO5&!gxQT)dZl`VH^!I?C2;d&m1;%2_RZ=< zJTg$Z^w>jJQ98R0Y~3p63CF^2#}sFT&b}6I-th=#aKw`FSR@vUDQtfz9~C!c(kIld z0*Wf9KzWjvmJ$BOg46Nna=rw52;OPa-KvwrE?`MCUefGvX=8U))s{63R4zk?U zCA8N8-@J9g#q-~@VE=y@(jUg<>hSkq$fUs%L!e$CO|={V-*|XI@j=$R+~Tsm&u+M4 z;xTf8zKCs_JNb9+Xn%!+$WYSemr2@Gn@F4Pe>wMgyyCcZ4R`XFee7*m)|57pbe5E= zw*6JTi)EuGP;o(p*2=N%OpX5Q4}kvrVg3Jv_J3`ZRZh$g)pc3iHu{BDCErIHw(*VM z#uCB*ZyH>AGq)5^`NScX4|5FpKT`~O=iVLHVGQ{@uG_iey6roz zqZsn*Hi#krgoU6i*HPR!{Jt)9$xi&OV#u#+97FzwBcVr!_P+JpmtVXegUG)dVr&=9 zTDwP*6N88CCI8#H;qz1vt~oqcF2*D9iyauaC8(K zGlE@J!7C0vM56DeN^^t~YaVuxD8<u+l~n}Ib#i!|my|-F z^ORLb6n89=lSXi;&TriCs%HTG2Q~g5Im4FBq;^tLkk%Z6F?EoVs^Pjey%tGL0qqJ0 z>~9+N7|mCDMN@z+V<%__B$6p`gh42GB}v$^yW3LFT}oIgH~g~TtA?v^+|G9lp^aEuX68i5&@&2s{YE3f>EKL+{_ zY5iXv5qKGUrkP54Md$D3RLAHdOAa+S!ubF##Yrp)^A2h#s?bhpp@wjLG8YBb%5+{_ z{#Hg#u8Yfy6@;!Jp`mJ7tiihW>IxgB?0M=Cbb(_xrJp77CIwR2w%-0D9zrb#DTszE zj$-88X@@(y45Slw)U*lu677`CTY?eN7)QzrIrQF;q||K)FR4Xmr?&0j0?G@DcH=3} zyXtB_ov|~?iOKQgu=S2tz4Gxu|CGjmwTF|LLz79wOvTt3&ECqKCpY{st#yyQNr1iu z;k4Qqv5X_C#=&Z&ZHv^NEtiY9p>2ktjQj+=KIX|)PdG!?l5U3=C%-ANsIG!VWz2m~ zBH)!%nwJduUrTw9)ns!Pk7lvbvhy3E3b2(EY9SU;LO^bSY3rDEIf57t$W@k-n070| zVY(bzqd|4C9!dZW!fz4&<=o1MQ7AUknp<;<-S%Lht4zHrE=5m1?GYdw#c7zjij1NL!kZ_~xk(tFYT(BMqoc#AWG29L3W%Dt zASSo2VIAnUHh4{HH?;y0uqrX29x8T*d+0$nJ9UfB=;uToJ8BdM4=HG)8Wc_R%rBMQ zDkWGvg_{B;Vl%w}JmLuHSOZb%0#tV%cI>_xp#LH5|ErX2lep+Wi;k`fz%fb;^6dEV z)UXQ%V^9FRIR}Q=35prIa%8;N)bX)oCX2y&K;DMmEA~(eSQw-+y)G`BP#aM%S!5fD z^exudt&V2?#1cIHGX ziD_YPorI<-LF~wA2DYfP=y?IZ$x#HpOlKy6Th3~uCI1{trH-I4OKNa5gUQFRvKga- z8F?N5Y*Gb2((hw&U64QNXZ*E%t`Buo9vrXx?;C#%^gp8GKXA_$B2kn`euXK>TR6k9 zuVCUC%18kMOwiwP&ri|Qth`<^{1$i@t~(l8I@?6>RqSbvBVDKpzGJ47M}7`NdePZ< zlR3`l5&-LWqy9)b*}Z*h+vi5XU)B3?;0!IH&BKFc6nOlC@>CJy5Bb9^p+c^rys3K6 zNyBg*vFcI_Dfu9wM6gNljm)gJB?a=3Nx+P{Rr8%TD2I!9cj_U3_klnC51{|B&i|Y- zg5z0lbS)15;uAeqe=@(y%BXMVmWwqu_|Qb4JW?=5wNe2Tr{XFe3v=iYG_R8H$fTj! zOnJn}LA)ERnG#Pd@H+2Uec1iboCA4vk7O2(h@LQ1aL0JLBON z>PrMPoAi6Y9Q)aa} z#l=-KEsgk7`A15>J6(%Msq9^=pb_!n@b*i?8ARvM#mTF`QTug^4;(sQB` znKAGxC^v9WV0czo{gMR$MJIcct(3Vtu75s>mq%7pr@WK109x=+?R3fF>)c|*uxczI z7$!|)KF}Xs0ik1*2@$qp!SnbpA1MI+GuuPkK8o~b+lYiMSIU@OrNtX;Z}zmMDyf(T zSBmSF=L%$;mC4m(BCC=Tt**AE>Z~<5?;i0YzG(KaKs5_y3tZj(<`C<4-8iwdwO# zO7ZSQef^y5R6A@=j=6;+_czM$iadnY!4J+Gh1RT~zzOUgpqGC7u*>r6e zXYP%~WQW$yZH;?jIjE)dMp{a%O_tI#|LFVzc?rJ+qugR&`gbgAuB0W5e@#t{pBNnd z+%v!b9iacXw*L)Fj;_}F_O$x2)bIkv=`7HJdecFy+I+0nlZFa_Rnedk4_Og`256O% zIZRc62Mtm0H9WHA!4Kr=UVon95OgY4uXVzECK1rAdD0C)Z}IBnD{Q$aaoEq@aH_|w zg88N8>Z)$#f74m|cOU%g1kgVV^uM0$e;YVYYwhC6J5FQ7W?S3>?5H^T*NBtvXu`=? z-Ej~4+9+78|Y2+?}Gmi z^u+u6V~JSbuKq+{e;t~Hs`2mKKlu{Se*)-#AI|GKZTeb-lR>mRALS%y6oj!^rfWJ+ z26Kh(TDyPClm%8%T=pj7vNKJ%?CQ6lN7%9>R~IQ$-sjL^?u^N0_u)R3<-8p2_2p{X z=?;)Lc6fn<{*&&pBM0CE$woN1RZS>;4Mp$CB0-V|LBc`)2LeId)hUpQ$2*SwV9*I;q=hVP;w$E+{0l> zZHPjimZ+CrrGY!Kr@3en@NE`$Zqts$n`zD1@ptyFo!=tc03RwA{&iyEvrSm|ntSe@ z!^AC+m*AiahM5Om#vwDZ7~?g zyANDjyU>`2TUk$M)q463T2FU2Sx-CP_rhmU4xn@AVLgp~=8;&|Tu*NtN@Zt;QiJ0s z#@dS?^YR)PHH9fW0i&mQ>Q)ytHdQZzMY+l3Jkc4A=JIaz668sCb7cyk z@fxGXY(FbGb##e{%bVZV$#E?`6_{d?N38^%8n~DJTCD_++_`dIrsOLTq>VZ zxr^p&m=@et9Ygp)@yi$Ay;9jKmO-1YsQ80!8_&#zoaZrK*Tg*Mwp!v@Sv4&a}sYB~Pe)*LrQW$GX-ZbPLWlt?LNGOJKl}p}rwr6*p(?%KI z|Lg`&$RPoT60s#p6z_>F?KbJ)Fj_x>Ajubi*#)g)bzK827Pj{(ZK-pN-wlUjb}SOJ zdm=sbZ>%eVhRjIZPDB#)Z@jCkvym+pc}`%&JP0vj!c7@szZDvd0sWt&=&!7@>r}fb zBPuz&t^3ov$$EUVw`5EoDw<@m(Q{}_V&jQ4CbNavT-y9}M%SIcr4}Y|6EkQJY__K6 z%zX5&Tj88|*)-7qCffg7WbV52?v|t|h-D?x-%KL?`AtN6^aba>1^W3&=p%Sp^t_Lu zVet8;ME}E7W~fyx41ZrPO_g$d4N`PD6}kR`H(&GP=2D7V4PvT&^|m2=FtSdLPEF;{ zI@O){z>Whz|K|ezZ^r3sy?SF)fBcKrE^Kw$fsTp=ev?>WjbdrL==Xm5y+&Up_@7Tx zEG+)@kNU4K=)b9wC@<^Q>D?~eUDckJK3 zV?V_#@82M1`E%A9Jl;=n%J3UrxekA;nC1PAW0qh2C$O9op|Kb4S9!13%;o%70;kmW zPw1IC8lG#K8Xi4{z!sz9>4_7R6k<4eB1K-6=|hM0lWBV@eJC?JuH0OKwMVDz>TJ<- zxSbkHj!*FYc$m_cczFY+BDVhI&O|L_0EtRsv?3&cgDDw=(V19+2GGE2#0Hbko{AEpcQA^9*`Mw;jBk-O za9?%RIl;(nMh$TrXlBM(d?Rs)VFyvT{(%;SBxI6Sy~f%sPW_}J-<%Rd+Oxx9S^hvk zG_Hyr#>jcqM^Q^CDiCRcljltXb)3x_wdEYy7wB@j!q6_Wd5b%Rh8!{)a1bvXGHZNo znfES`9L!97>tssdA5?5$`jO=L2@5)+P-Jp$^b19x|E!|FhP@E zjz%?N1sA;w2_?C64$wWBs`enTv&#Ue{1Z@XdR ztEKP=DBj#lZsEf@U{7CoNXd`n_+hkEu2}x2!%%1zgxI70;zvOC%W~U8+kPME-=$j6 zd`Zr0@}(i4lpsP(Ek~@Y!sJH&J2M#A%**6;gcFxXOw3I0eZmzpLiOoJ;~@HNicr+G ziy6)0j_CS1lUC!{d<-pNpMAHbP!e4^9*THhXfqU)=dd;7s`1WMW@^*3Yv#i&A+hr1iXE|{NFCa!lwHEcZ@yT z{!i#}I(&|j9SWMdXJuu?&~h+U9~{Y}WP|j~h$INar=GTUm3Wb(I~rt&^cyK1`#|~- zo^Yv3ePQ9jO$4I!xx=2HTFVy3O1ZWion6PODE+OW<9)aM%P#UNGo&&%lFx&bh`^Lp z+{|D8`Y!_g=YjseO!gmDl*4<2wH9*w=(W7@je6tI_~_&qVnLf-*t~N^<6#;sZog{n z{1&+g*iy0dTZpC4HDT#T&%W~i0ZSix#)U3KgS3B$5uxWymj22u+0o2Qa(p~_Vg~Wq zGpz!&haRa|x~``1ZJ>S3z#QTEqPj?$`;_sw@~KQNbGA5PZi(%Ouhc>?LMSQ~%tMNz zlypOE(}EVP^MCY3p#Or}|JiaM^du4&B3rFD<>k=GuerMs)G$_}2Gzg~gQIV-Pq1ao z(L;+s4p(W=P2Zr0xS%CdBWWKJ%jMYD`nbn{z5ESs%W{dBq4ZlW+6{M+f8T z^7G`TLiz+Re$^+1T}+#vLf)ZhJ+2B-b;=562zPaEg>VzxsuwE=&rVk@dV`{-q-mBV z4v&gA7P|7Eb1;D_&L=^idx^!Is*$0-RxPhoI1z)Qa*4^V@f^G^;R}QZ@uvB6BS8N} z5C2o?ZSW$3df^0NtdQ4v>Yl!fm2jU`B9=aUU^yQ-2?|WK?iK|g@=eqP+*tR1J=67r-t4%ebvI?S4$eURd+^>D8rWk`C3GWu?A|+RIehS&Y1kGoyG_x5 zGn3ani@sf_J6nnL*s!h^Vl&R#4aNn3pYHGmxB1#O$1vS<*w58Xk9mVptJ+#2aI=xC zK~MFxrthDj-;AR-!@OFj>0V5 zVXU84*3qWpem2^Z47K%{H&@$K5JBTq+Ui?LTfL`=wtDHC?|D}9MsSRBoVP0MfgR+j7r^|!Kt#x7ERx{H-D?P34EcA*(fH_u=9yz1re`97Zimel!Q z`0Z`PZ|9rv+f!e9&mV@Y?I{W``{v`Yq{(eRHPb6%oI=YzyV}f(hfxwMCua@*YMfdz zSdKU>SkZd98Tq-@;1yJ$*LkO&)2ybP*5LlXuEDl=ZMH35yYb)&-2Y2J|DAOHZ&sZl z(c;I~?%y(rfoGI(dpj}Py-k?yY0o>KCRgnHklhBp9>=lvefu{NR;5J@(Q_!XxL`IWZPh}75Mj~-at5|04W zDSmwi@#}>q{Q8V%z3E@kboBBU{y8Sk+yB+aU}2MCpF%3nNNW60YGzCTj9crB-*jZw zOiY)q!3 zxK6yWTy#oxw+Om10|0$CUtP)POaA)lLffRAV6Nd#)51N(hIWx_xCG8|bQz7(QS%F) zRW^1QcmqCN)~v(Ck_iv?^EFBEZJg@N=95u=V`4XSAvMnd;WKuNdOEq@(Qe-G7!c4P?TU4NcuOEKmEADB~Rbx=v_XB-Be*X8*{1DLJRrC+~ezYu+Nc6DeDPbkW z!W~W zz5aFPYWZ)z{C%K*RneaZccuds+m1bGQ@az#c&4L}L%Z6pJ6oSWHOBfmT(_B)$En)U zl|*c_{);xB+|Gvl7sml1SvNCdjpxUxViUc@IUj^_Z+q=F*Oq^@o9c$w^x#MS^ix3p zQ+of`U1@7w`1^83j}ML23C}pc;m=mvZihAv=+Tf~eRM&yr+@48YTWmhY3OygQ5V;r z%jdrT&wd5yztUv=Z@$lGbi+Pcb4Tp{P0;+}(Z6vYH|7Z(f|_F4kKj+#=GrB7vwd&9 zhT0pvaXGa4xjt(>@GED(0rWq;J+$o$NdLB4-rUTdfn9h{{7xA!eX)w;Z+{uBGrQ|F z)-H2-Gfb7!Vq8UDzjNIQZ@aaJ;411NY8>wj+x_doc9W-VnBdncL1 z?rUNayCQebzK|6f?E5fA>mB~&ld!C55xYjB7g}gN(3i_RG!3dr2VWRof+k+9mloBZ z7^~aX-b?B{##UELjJuLY%~wy0XPc#hJC`pOol?GBbDN!OloL1Ep$qmt72pvrblnga z@4Q0JzR8ZqVw-ldt8e*-e|}RZ(Ekpg|5M2Sr(v-EbJxyqkv>3h#VhY3Ub&w``947Z z+#TY7IKJ<04*9#ApPl1p=k{|<+J90^+V;IWk~?=Kx9><&Oj>e-n6z(M_rv2P#i7CP zWayIp_*=!KB^$@2y>0}Uc2DTB59pY*`%R{ejgC#EN7B!hRDf+v%99n->YAo9qcg|G z(-Wx~MA%7ZhDQ(CXYJw9!Q?Q<3~^H`Kna6x)ZY?v6X;YWU#=`TrNSLzxL;mebrGbC zE&`l|{EhCBMWFu~t^c8Ug4P3N^}`ER1F>21Bf^sixya?w8%|Y)$OLnFvX~T>Fnwj- zPTx3+w;F}HLcTP&DlqMHh~KZQ8Ajkw{UW0(5rC$q_mVCZDsUM+A?r{QXs{ z`O*TywoqKetXO)uR#=s8-VRI%TSeSF!E?J2yAE?-7g6B}R;w6rzFrh?G@&rDS&(W^;_#q7w5J7;#4B6h+&P zWs6g1shpdg!O}C(&Wr>h@r|O+w=kh5mkA>2O*tW_#}v7r=O6e>p#ND#f3|q#3hqfE zry$5w@^eL}u*7g(lw(>zl4Yo5&J!Sti!f)FT^~k*e)o*7A4p=!u8!seBVak%Jup2Q~0?c_uwC=^7IZ6LDaM(A#SY zl-SSqW}Z^lt^q9=EY_1R~888r^0&-!XnN13XwCEdc=_oxjqH6@^)v+aZ_25F1ywr!gKG7UDG@5$55g;A0<{d-bv<^55m5dtkqWMzsoC zXkktZ9T;>0Z_1X+l~p^V#0my@RxR!NjQ!v|)rHgfTy&+7t1dRKL8Xf>VN>{ep=#;3 zhfvrKAxTvuft~`871*D_Vhxl3TCxH}N>^(oeYqcvmOKf^-U_g4omDgGNu~U- z7vG%&`afUMzsT^5p3ef3l|aaxLRDX90+*;wd=@Vj`C5a+ZdU^{zMkjRm`XHa49QNr zF5Z)j=iPGg6s*sJZ^ZVl?j9?=vA)|+`YwSP&+(hlBFqFsrMl4y)^0)dr0aIcoru|v zqFI3XWTpw8wNhJ_q%dL1lgszOUG~XBv8WUr3`@maxlT@zR6X%Xs$>ZC;=rmpTGX{% z&v%OWq9ce?M`_jK=;VNgWL~~I>N@gSmwp}3e`{X;Zv&MI{Z5>@lL&C8ApNu`15sWl z%XG&YwU4ZUd0jY;QqtZTaCGj;!g3TN6a;e)7B_ccj*!yom+@_ggSSKx56GZKKJ9wB zwghrv%+zFl75-h=x+40ufD4 zVx@r){Z=Xkbl6d&e#f)Fauv}3?(Ly%y`=y1EEvjyL=`cZuvIKCU?LmVvKRA+F04E< zXeZO?*|uAR4cR3f3MUjpbZmHgf$;g1uEQFngq$}x`>6PBoNv5TFBU*2rsGhHXKtl$ zMR`wY$-k(Y9Uz!=l{FP^23f57wdj)|uJy1tpE2;)g zON2|ob&=lPMoFF8*h4?nfNccEkjik|K}bjSy`VYDho(S|1s{k2VmMlDU^vc~lZQ<0NAQX_KGn{OPHik!5)08t~8VsNG+Vz4%xtvoL(jUYoi z_^luQ&f9_h_v-wgRaJ>Tzk*h>SeUOW-O_VS^M@VFEU(`|RVPaNsu``UN<>TtreJ5y z*k+3(RR4!UNzZV&6?r7w8L_8&B6jcex&fskIm|fF_Cw~HRMtw!9FL>pbYL(qe&Vio z0R1m0`g?;r_>{RP>u;DcLs%`1Q z@rKLa_}1SC`roJXe+DLp7$(5>vSGH=&Ss}5F)i%fN~q=f(_>cILZ{c|laAF6Zz@`; zbCc7csJVqX+1vzuYH9lifd2Qx`R{Vl|JQ4LD>vuNN$UvHdX4OV`{w-a9os^;Jg z`~IWSo@xoYs?u}cO?vK&n&`QYJAdypK+oO(!nHhwa(?~eSlHBakKMHI<`$a|bmmD) z&xM+-_rBrFsQj{k3UY{mlFzGv!Q|lK6n)MPCy%DAJDG2}5d+Lp z!2U3EV3G1&DBM0&f$>U=QgoA9&+_h}*hK3~5&~5Zk0yr*}mKdOuQ0)rU z*0N2@yHR)#{4#W z5X=>8IlQL|cH9^auWzh`FdS(Cqgfp70t>)^Xwx=r=IVH?rhUnwt0;4tVSOj@{?edA z1+VpJHfL9joB7hJ0W7PEKqWZkeE%?;U-C`&JkoYww2z{y2@~c;@Pf5mtK#aXY_+g<%Cl%GL;r*F+({M2M*dz5Zz--f zVhzVi)ZL#YwW*t1{F4K~kZ*vf3l0UCt7oVF@XEXK{{JO<{iES!Desif_A*~66{>kv zCtJ{{OQ=dPiNGa0EB+a7jr_>SK?PJJopTR_;}Ry*LSH2dhlp3RDnvJ;-K!LW^IWlj(i45L zmgO?KxJu3CDJIY&A5wB3@ocT8RTZP@HBN1%#>+=2Ah-YJ3Za|IEijG(FNjsxDy0%K@w+}hnK(|IyCT;5IV*^`$Dw$2GS5OsR(k00eZ?#;j z*su7=XRinPzf|KtiNTh$p^?lE=Lyn@J}muHMn|8zp}CF5X7*3395O_xq;8Dlqr%4MJZ&g$0o|zB z)0xGGrg7P_&-}s5{s!p(GJXFiZ8NF_MzwR#luM4cO6^g;mnX(J88Hui2MLzn8Xt=6MkP$sJKxYb1J#yWWyaZyl%3f zGb}lp@H1SM=dcR(j2^fJ4q`JCC&p3={KG|<&B<(P+#XIHO%2<$W2gXQDW6G>sPg0; zXd-LSobd$XKF{`W%~6EJ>`mN~$4%V30{Zme#fGShM1K8Z4&)Ej?<|$^HWp;x^UvIS zGtmF#9{#_J0$m^rpx#BCppxtJA(&e%muZ2~iq2Pfe4fN8kfRv36s5k3QiIN4dAF)> zcT(dsI8j82nW0p2h~|o9E9=`(2}@ed_$<7uaO!s*xyHo{o-!)44lVEr9|8l?l}Bv! zV>XXy66H#r3fLzL5H>7tm-X~<*+k%cf(|0CxbY(HH;dgodlq}A2Gqditgbn(6T1`d zjKpJIdmBGY_#gTNxfEFMX&j&W4?unTIHJf%(d*c({V{74=>G~uf3+&+#81yrg|TWf z$B?Neu)81|xGKk6oc2T9oMCSe*=|Z)E6|0Y*!JSuiE?^W!7%+mA1daRXc&>hYn6PL z-temg(M;Erw$z9MP+A4XF{cY#qWQA(=;bp<6A{GoDS2y^_^7|v2f#C?)rkoC1)%d8 z?J!a$UJ?$|qHVg*GoW)dF*qD|Nlzw z{;wbdb1APynYSsJ3z(`obj6WPCPTx<9*VM5W)EZ(5a(kR{ox!Im67c^AVjV;0yHXi0&D|9=|NK%fMg zkU;ngKhp-%%ycHnz;xQC$G@%*N^KszmqI^23V_w>{pQ&DimKJeXtjTCh0aI9IpmOt6v>F3$ zML2zN1|KfWFUw-IOKjaTw6j9<$6ikR__LP+|3AN>1R^PF~Gzp}Ef!zG+nD0j`l@*dV3>% zRv&8d+K+pgz*5Oe!ouYk>g(x=_V)Bxz1_W5elDiFbx z{QGC^#RHz~Pdcxc*gL>pZ3UI%8y$^}kH^w!A8L)!(ed$g+T;k|fZ<9KgH2dmM-^O< zVYJ1PTSGWzfR11d1wX+dPy+&D9|{FXIc`?h_%3Jnn*`Ld7i$Zj>uEz-(A8`eV0It- zd`wk!*dRqti$5yysBm8H|Na}V0{?FV`KS7iYC?o}vp!W$_Thb$QhD;lIWYQLT>2O+ z7laKeh_AZ_zK`T;r|V+N7w(QltXMeeYt-D_Vp^_8!rc)o9PP5`r&$SGZKRrvo%WrT zW9wVRAQn=hzCjZ87Y!sTeAn?WV@>PqRl886cE5f)Hr7Sz_ViR{7zP7cYa-RK$JcLv z=Q-g2?G599wZWZ-6lF0xJLy=8-a4!ALuG7g*JPG6Jdh#N&?s18>?8aM;^e+S6_h2;NlegN%*bTm=gxZY1_ zJw2X0=4lrc{fk$wC19%w6iBR;_HUB3-^4lYKcyV^Q@3s$Ja6ORhK+-i<36}Xj{7f+ zo8ap~%4>(;gB>4;<8PVcK3G4;{lxh1f!+V%JEi-B?I5fvX!{G(pN`tzsfGu`5aCV+4%;~?B6*y zF$l&W$VwuO96q3S5q9@BdTwA~ZoWK&kuyikfdO$$1RNRLkJ#T?`$CIqGR?CY&sDM@#$1DHZkHmBju zg89NMd4$@XVHAd%mqErc{4?cm<}sJ$w68vh^02N17&>d zvjiMHaO^Bf?)qOe>2B7w?~@MLQJaIQ0git1%2(pR|9hnT?@TlYAw7=xwe~7l&s}&R zLqL2|WOdPww;B!7ue!ovnQl+OrsQN=C?6vH2qzEA@!kIaAd8+9Oi?#x)ycsTrTAK; z6EN4n5v`$l^asNj|9vmW|Cc&e!++aigb3B3NHsMv(C~1UQ*y&6iDz?4x z$y746Gkx(+9V+JwF*6kI>xH#w+u1qz%jZn2 z&l~MSSw-j}ub>i5`CEzK&%sW(r$Ne6$KI0g0iBqq)tSY^KL!5ZFZI9k6wyDx z7pjUEdc0vaZwn+6E{RSJDEv<^gUwgviZ3eulF#N@E^JIF*}`omp^IoHg=5T6IpTGu zUDU=V!el7crEV~FHe^%~=u)ME)r3XuSBf~9sbq7PVrZRz8@1hm5jkoCWIQb2pQy_; zM86QRKNKv2VlHobiZnAAi?p~z^{)%2U)=r#Oa+KQ1o;6C6ydUkd66IAiJ9~UW$){= zE&-*=Is=?y)Wy=FG6&?l#$>22e*Nw(i2v|_ga3(L;(G^WX1*3|DGXryU}1iqOm6!i zqF15g2hIib@ea`u69OVWv5#KB)n^x$^E03ZY1lq<2M2&&hTHB`nJb0!{V#F?u_yGk z#P+q~1q*$bsUaQE-SRe2!#h+OBO*wM9BjSx+h=?VIW2&}Q*LSbPxPjM9DK4&&W7_dWppe^BLr)D8heu|el71PDAKqi}4JTsevz zpm?^4k?i1sY`akY?R*#J@51uC@D5|!h4gsMXe!#RtTr{!`8Lv$JE;4Bb|w>$XWCHh z#$zQKM18wYjMJwE&K=Zm7WS!k5Y6Npn0y6YwABqI!zXd9BwZx1-AiRw0;UWlWPp^V zg++`9oSzp9M=TZBt-b^W!#R-}U@N<17jV(RQpS+Lf`KJs5wIjjQG9tg*yXCj_r?DM z`2UcK|I>#_k&{?Q2v-!t$bl{eo2p6(MwDQjL!2jbiq;4rXdxU>9xwk33aSsLnXY2h zT4nxmIEMt*6tP|I5O|g+n_*kZi zfNvdJg1-f0f}^+DY(R)9+QMli>Lvjlrtu$@?cnruAV59WR-7l47+!he#o&b-7ytp< z-nrm7B?6R1&XXXFfgjnRUBELsqL?w~ffB`SAQk;wJ|%^QRGs$iu95d6{^MUN{3o%f zIO48o8;eU7igj9Gw4JKVdsoC*7}OTw>_J>TN(S8xxKYp?5u*42u6E3^pZS7Kv3mSA zUE~lk9AA)F`UTi~%ge0M$&nyLT+eyuPJ|vngeDEYtx^a|O>Mj{5`BMR0+!@qpfohrlg_G`3 zxrAXiwpblbsV8S|7i$6^upP(_c|B}Y3RHthgsMu1t9U4dmOAwyVQ!F&sYXJJimVkL zQIoaVNfD?|Q)cnTbN=ghf&ULH{ck88FUn+XO?Q-n#ndYrMa~xzDGNL?0UR`j8qQ@adC|KJ6X6yjF!^v1v3anu zQ5E=TSzE<}beY83PJtyz=5VwpI8&@TSLUro3t^I~*k0GV%*MWbSzjO&4TL>6+94}s z)!b%N`)C3l=nM3DALtF&Z66Hv20~UK81g<49M#&-o^QPc{Qna0|7wc=RL_U3Eif1# z|GLO$;czXEOx3CNz-ZS$Lz*@*-d;JjKJf*8Aa%)eq)WcgK$o2LF6a`hoBL4&6|(;A z6>O`kk~gsq?CyzVYO2jTs~sDOLK(!PL9JX_@wRar(lsDbOLX)!oz~($oev}!EWdXb zCaJo#3JP0#GCAx7lBnBwQUkHiUHpFF|6i&6Pe)l${0d?E(2Z118jgqIlov#+2CNQA zj4tFw3J!Kxqj~h06DI&hWNpViaoGITQPg-|ArK`5>MS6tuuM(WCP)wCCd?uk^)Hi?Vq9O@JyE{#>9MIKt!I;N^3CwQ zXU*Ra{QolW|9cewffdEg?oMClTF)Z^SigRZ27rI?A$;n$s!H<5H?6F!OMF2eNLBJY zsghe8sFII;<+?i%xMBRNAE8;&_YjWSVVuXlwkgirRLc2U`oO8*kY2g1OQvT^uSb`^@Wr{GLWv#j^1(9Rg zsspOUpNmHHx#9F7>;=cmN38=YCrk|yjd)Hy6)i9l7;Kn%*y`tXEHTcy;G+)cCXkwJ zMLxrEYtli(2|@-PQ#cXWkNC#LJmvNgq!cJ2rH$OgI@N*2kip+7C(5~ww_V3?S4y^X z;1SOoYd-Hh3vyHi1UVeK`H4TWvL9k%|1E+K@YbP+E2wlJY<3D)^ z`2VPi|1T{I2shL~3JiXh=Devj&L90CWI44F3tc zj1mp(qRtce=5-$nHGZbO=GYVcT?6LPLLZ^JuN~VyG%=l;@?X%&Zq=&0kDhwZcv=uU z&aM0g<3GOw{NIWEUk7_M8*bzEm$$FxKyON&`vU3Q+ZyQHPh5Qb3^3oeb(B%%4*YWx z+v+O!1l>bU>`tWkwkO^4Se$4j4<){Kxq{~Yh?z_sHN{1exR4o3?n;=xMNCJolzh;H zE4H8-J7CmMBM*-N8!VTCQwcCSC*za*Oda4J-D@I17&AQ<3nil{{cBXfhAwi7Aq2rVvvi~Q@bSMUc)H?yZX?lH-s6Z# zQqFenfhMb74^C>N08u2sWaTv?cNCN0=~dpDl5+{eUB&ZJE64dUy!6~6+{p*)p>RVN0f`52aZPiuD2rpK>rAO%mEw+;gT9|!sG zX*T{J#Y{@*izK19H;~YCeAoUbSVco4S8bxe|9>37#+rzp-2p}!dR1GMOlL4E@Ly2! zFO|S>C&9$9ZGoyHzjOeAO=T)^x#J>6wu7lak4yIkVv5@6l}lve!^50MPk*JS2eDi? zdPIQt6}lG0uz2mVj4F0$&{c+p|4!e*_EZG^(}jlBPoL~kqq9^KnBmXt|iFut*7EHx% zM8b~4LEi1FG#pMhubLRuQ>BPCCr#H7zybnFKt>3$uQWM}iMwvF z|NlbzKRp@`zZW><9#Iw3;=_=EvPax}doEiViGS*%J@LuOiCoj}#bzMO&-k;IPtToQ4NIMfd1J74Ih}OfFo7YvLjKRluu+I6H*Z8t489iKpBMyeGiva(&};i~dn{BO$*< zO@}qrU~b?bf}l$7bev)p=6BWuZ5E%QqD2`Yur{NXRSBplJ2!_{rd*1Jy1+bf5Yi9# zM4kZte@)51ly`}(!+PJ<6VMx6h9!~#8>Ub^B%-VNBYcZa0s5idQPj*8Gr+D|5tAih zJd_b7W>Zuf6daJuYKjG(8CFbCC{i-Z+IiCk0~Ujm6aqSj>kOFVhlD3tOMVceXY?_$ zDdl@$TP2FTS8-Y4qOCneHZHDCCm_qaii!%bGh1zGTRCz0UH!oSuS@a~PtaUC~30f`_Ploe7b#f1Dg1g%Ht+Ktm#N!kUC}6mw@Xh}UELX;)$SJYR!+k1cw>#1V6k%vL0y z7yaOexNyvd@a7&G&|QX+a55B_MKnS^{gDXM;1(D-n-M5EHn!+TB#gdrud9XaSdKs= z8n$|@^Z)Q?M}YrN1OI<6{6F#uiZynK9x;0(ef_=RK2HlJIfsn|rs`{bRf| z+i;C(4{BbqGtDFGFulQ+m&bsY=@@WVgJZx2ryMV0s{YZdPDdx$C9k6s>@NKr;7dNfftYxiX2V+Kc7+Weza#d}H%hl)nGL|9<6e;Qu#N z{U4dmFXE7>j3qy6;%QplSM3H8b4qa|K~kdi()qb!5W@kRPQ<_}0RgSvAusY^nn<^w zG6%4+xm|jOeBwp?e#^81mf0QXrvLE&te=`kPBlQRI)*3%AAS#Yd|(iN%WV9i`q}t5 z^n#*@_Z@o$U3Hs&^K%@8t|)pa_iR^UUwb;MCINI;;+Z#0#D9B6%KyH!U(5Q$I!;~; zol6VLnv=U)UJTA-a-QQ45Y^AhoV%Ho<KJ?@VH2eHV!*Q;Df)CO!pP`mqfUVf}~a zn!tZrWpE1F-l6PAg#}y3PR_(EnaSOUqLfsz`%n+)jw+?}Wb=6{44if1;scE?d-$xT zd?m_EMSwN8H(F8!Q&n~}vs^70eQjyo}F^B%))o%m;p9lH>48?zO?5TV*U}_w7W9*(( zFip3r8ckf}*ZTF%=4T7BSR@;X#B$l$+1PAhHXG}=`uYh5ORhpR=0}D{5|;K8iAN$s z@sW{{#7LYTSfi(q)n#=>x@rkqainJTHy`ZY9PVf6!Ik5VG`6c6?vbkDHBt@tHc$<} z^GCNNDPZbD*MVj*fAPbPj$it2`&;1u3+n#&UR_h9*!_W3Ow7@V^wfF-s5DB3F)W=m zPJ&x){ctVfsZy9j7ng)_C%c3Tq$tO)Hc+Q*v;gOJAr#Bla8caI&^s11`D(e=wN#tY z$0Q}JaD{U8sPqzn9SbibU-j0$V1QpnrCBnJoiyLv`D|Dkq$EqoaIdvl*e=JFGa;TW zT>kOng}3qi|Du!st-jk*r+E{ba+=1K0Ucr{-?Of(wq3HHwRcLzhE zf)$(z=d56^&&p=|d&2#ZXqfzBiY7jV!9S%ezkVH}R&RE;r@!9{&h~_6foOg>;I_x7WhbuD&Ni!UM&hJ2!hJzAfyA`A&(gtW{lEFf5|kHbcgQFJQ&BO)7_Ia z)9DWVbzm|K@gsy7FRr3jTvuJ6E4Yh~Ra{-g^}3>hf*{HYK3HGtqjR2^>}~3JG+LYyXw^AoH})?>YV?nE!1U+2N)3;N?r*PL1C7#)(Z$H&AAyuA@SZ> z$PJ2%U+60e5_f9`MM{RB);2|}L4~G?R;U0_)^HVI9fCB5h!*!v_(|hC7Dw zo7h2t4pKW}!||D?WES*5+#{j9xYMpal50MPK;tuY!|pmN&TzU*6=ipmN;L^&35D6p zs0AEVO&8&X{emkZpOkz>g1Jh*ZsJqG|IaG_{|rSOYE#7*sMx1aX1+QTLj5N@K~K0D z%K{TC*I=M?;;SQ#Q}j-aQ`Ku}toTaCqir(Q^^Fb5XrqJv@W?2XzU<1&1^U=Y?(G`6 ze2+mykRZ#<5%{c)o*I%}FpRKqC|@bFpgD|Xhkg;oAc;}cfQu4kwE-$<>|vrU9F$VQ zTaDF!o*x1J-vjpFeHqK5&I6-U+MxH64f>8IHt30e_u(hN2JQDvzZq=Mz!L*lR<}9#CR5==%19-` zv1E8S)jGDS?*wIY)>2|WC@q0TTDbyZ3Z*OpBsKq5A|f>}!C0ibqN(i|Lz|2yQ-}+n zjD;saqEnReGhv1!#;!y(WjcSxV`F>#{vmTT8Z-9piYIpL^AE?z$D=9nm$5e-ix_)j z@qGwF5skqI^oPiRvd^E0kBtq5hj*;EJZ1I-0nL{0zU&2e0slWQ^*?1388og(lc*oMzA`!w$8ExytHf(v%?l<+u^3RODYYzm4;5<&_6VR4Fu#d zoY77AA6VVSGhh0|CxQQ8Q1M?9X^A@HCu9u~P)LKYH~ zW3J?9=?-5^M^5BMBNhs598Ex3CdASxSCniEOoy7O#Dj-{DPJm>?}kG*Wr9PVpB|c< zKmO*bUBLf)mH(%ECOHfm9T~4Bzb)ywA_Pw=0j-;Uw?;(l87D`93V>8}&`pyeY_Q9- zcr`|c0!ul}HPfb!6Ah^n4u33JWOXq-omhA%!%ml*Rjo*xs~|J{Qtp|& za3HB-w!l(3GSnlo$>te3xuC_3WGt03IMYBBIm}z&%OSKe%bxIaT@dsoR9;Jte+8(T zn+iFD4&k5`aPj))?z{0%p#SH6lK)PoHD1M<)A6LjNmhb@2iU) zRw*+Fc1g9yMwj}qh89jRUUU$rqzLNtfDDb52FV0#C^W6gl0muU66S;%W*A7^hS_}> zBMvw+xrU^8-l~~WWT~7~;R=bC?sN&EjeCq*-|2pI#+1OR1Gsg)Wlj1$VK8< z6=abrt3q3_l<<1Sl|0YLWG|gN{siFv7bX8OZ5#9jbqLMwfL?#uPgNiT|w89w<5GkQ1(m&*m(Y`B| z`?Up5g^9Ol9F(P*E8FTifj0r5!HPxI6WI;NnN2ze`&FK3X%A3P7@gu~3x@>I1ny}V zhR*uMwe&6GzOWM9tIRl15)qXY5|YVx7fyhahaHoss{KvmMr^Vcn??E?n3GmbHg%R-m-c~5;#w^$wJfmE1hSEKiQ>c# zAILAzB?`M=M|AX7n1o?o!^d~7{4MbRe)ax0o5_hwiAZEj2d=kNIzl!0ph1WL8DXy~ zJ5XO1q*HV3>`nOHb$EC#eWbXlVL6~~Bq?x8iqV&w zcq{P#0j2*z>je-_2i?yxhS3r)Dcu_0B!!0I#%77ESPd*6$5eMNQh6XPg{X^L`Etby zW#$Tem!bUHr56p06ONQ}TEkp6Mqpg~^x-hyIa@d=J+3o_>pVEv3+8@!KVFS7X_}E5 z;$Z&42CR^NwXc;Rf+oR>zMyM+br=@1GW*rSSL|mm8hY^M?F3BTSY*h_9ZKujS($~| z*?g`*$sq}!)`?sMQ87y3aR{2jg1~3XGuN@M4CT zBA|c;WD6!4WB}VnX9rC037UX!QZsJ5s=hqmahGzLia>9nYp@_e;E@W%F;mQpOxHxt&u7# zcPymoSEoAu4iPZTScD*M=)P6M*-4QXMwM2eJikokr!j8U@18TYOE6I&xKEGR-NoQu zcm{CiI>8lJlRAa{F4V(5UK|#tr}0QjX_DEr?G6g}zKTT#XCA?O^@~0UqfFfudCcUP z{c_CY|BtRJG$glus9psq!JxJ~`CX!+!g=Y$B*US0#WO!BUJd+zNS*(8C@!ElDOuf5 zV7a6b$fyyEo-W4`u?)vRca6g4p^HX^a@*)D4Z#=%U9%BfSBox_oB-FIV}y;WPYv4WilM z0nHY|4MG~g-A02B;Mupqc~O@i9c@=WKGFW8LQ}OV62_9;WHPib%eEBIe*OJ#k3Z_d z4vWRrLcmoZT&!wQk4X2?BhovYJR&`3 zaCsc_$?m!cBWijd8N{;sBhn0};Y^Rj6XRiTk^T;>j7BMd262$h$!>x1FB88KSR1mM z;9*302lauWV%Vf42Sef0IGb6J&fMx72YZGNEU0?H1joBl5Mso;56VoeqzC-7g>0oP zJ`w1*IuU^l3F?O2D|i4wcztC%_GUAn~14}+crg^38@L#SC=?n^+SRx_pR6{*8Ua(KHr9=^fY z8y%ta)#mPKGL_tCDQEoX=0MZp2+oTENf7UwuHfR(k# zxlu~_Jnx@^wmO}wAYligjEner3hSeLYkJqJLZ-2VRBJ80^f#)k`Iesla(m@SLN)fb zbMXG}5m^5ht;7EtrB(|3mq_5>-9+Gf_AC#8z`xYDhys7vL!Za8y1*~(3@6eP@rjlN zUG?P@De!`lbUD|fmFCKG^TGyFXCvBm5pe=6N322@dlDAM;;>=PA^}@^xu_Efa$pY0 zfC#(iXAfz2IboAJnOwe9CIbYGONk09ttid_85=ecP>lUw@J`A}PXjxLU)($D=Q{=I zjJLXU+UG!K+*YvhpdsgF4ae>9u89kP|NjB}zuC7g{Kx4^d44W5RUc!y-mt#L^);>h z!q?hM?MViRnv~M}NlM?-L`r+_Tp9K~!}pSh?T>M0`a7|(E~c-;6d~bMdY9+Ojq|l^ z0!%3&-aN~dAeaGt_@h6_c@>>9-OOyh!5c1@F#Zh9WyVBEN(vlFPXdX`7$LI}Y8C{L zNd>yuq^2|#F86;jr+**&=#{|#uPgsgNmlAXe6W#6ELmG56j7s~_HzV(Es`J*?J5Th z)1d~9965qqZFONXI}somcEntx{it*u)4HJJj9UUl!9%11cjCwp{(?_kLHNHBnq5jf z7wk$hF1Pq=3{l5o_u-`qzOI%u>NFkq{rYrZ`?DSe{tvHj{WqK* zbT7Nw&{6yohuc^(um;!C$+S$+Aw%>(MUyDw)T zg}s6C?tN=!1%xk!3F9_j_WAu`gE}D`H`%pEWxoIoKh3D{7jF)39@uOI`ui@%RQE<- zw+2+#<9GZIFdIfqb@YFvh$mhaY~!mSQF6PW2q=x9L4Y2M7Zk4m{y(;XBaM%to+_V8 zap%P^NExF)ghXVUoZp8p>m1l1_a?}pQUwh^9O3>oKpsJB+zlWkvk#G5jack_*2KRtsg2{!he1p6P?CYnI>ylD({Nk*gHtZOjv(eDmy1l?BI55_ z#Jf~wzaoNp{P1kd(DU1R9LY4&Q{lLlOn41JJPQD>bakGi{Ki`!5zZ=Ei6h9meeGx(~fS(cH3B&kPq8LOPqZq9G3==e+wDd)k z6h<+)U6+)Pg_BW_v2J3}DnS!c3hb`2`7@O)dJd9(zdLBCT$_$&ypChfu?)!4ZUrRZ zmp}r$@3MHtp-hZyDhgbUwZs` z=VkVC{jz)0pQ2|1|Gy3E|0U}<|GSqVtZS)z9wOay$L&pY!cA{D8<9=!yYcoF&-sZu8>N&(ah&L3J_IctH8CEoYhSv?ZbJ!H1RvU9tH z(tD|LhLI2O;`)c(2+7|xl7OQt{Y~z9ZpRzxdWON{ynZBJk8jdJ`Oky63IGp)&`#K3xb zX5nfdj<6BKLw#Jiwmc^Sk58s>98gzFA0BK-sKE^ny6RN(BI5zxYKnLtn3L#eEL%5`sc+PK8fLqwT{)OqTWXLjy@UtKX}tMe4UBplbsT*f<2>6Av-oMTZlmP(Jn zcp_;^WVyeX!GPl4-@hLg;IsZy<^Ls3gJ^L@2_%VG@@AYsW)X+h1rnTN^1> zYU4I%Q&tIMxuZI$sF*C7jCDP;MF|Fl1mdeDd_}R{nJl4H8esI}XF*sK4Evzo&k0T& z-&b*ayAHj&OBQEeq$fna#+zpktUMLS<%^hkNA!}H9=R#RV@70hVk|n0Jli(xH6Ff<;Z;4>KZmDWMI2sgY5;A(bn{}wJ0}?`&PXPL=bdITo*#hQm5)j4wxx$QM ziI)9IV}GFXFuI932psY~opWc;%ZM5Li0b>ryRw1-Xy6$p0&fZ}r;gNI)S4NHLcB;} zRSin6lMM8A2Lt`^zX34(uAux@@g11HjrD@uM>NYUkq2`n2a0F_wkZg`9}z8pA$ec8yU6#E)$aG@>=FfV~V zN~P&cLx1yW_-l=)zlHI%EgITEa`Ol6WslaA`Nm^U2mXH#*8drr{fFk6H0{1ZrrrCR zn0CiJbqn60U;e43LA-)9etQ55>!#gT#)lHa@twe^$j}~7rrq&K0k1{!xuJ!?bYIYz z?$^$Iee{}5YC~K@;f5vbEG+{qZat)GKp-*{SO(kDbf2Hxr--`Tg^p0AUs#6KyvW+* zFVD@DtpetI$@ATxHB*>FMJ;;{DhHH;YaHE_i4VOwDMm%!ZP%Kmpm*~H8jN>bO)yKu zMR+Z}4?p$FilZR2ob;-sv8{>{Nhf&V|y@n2eKt?nPfnl$=X zf0b}V>doh@ANt={KWF@Ln{&oQ>gP;;-a7S0bJ1{)nqsLor{4Cu7g?RG;genGb#`s&?4rBGF1|}V^L!{G_95Q`_N{d3Gm(hy zgd^2x>lyc8=kYDT|De6Id?&%rF5d}f;ZMGE48d=*G2ipgvTySp=fg`z-{nW6-9zzV zGcpMVMawB!p!U}e;wiG_cByj5#dBWX%AnQFiwScqyk{&vYM4907;lLTH2nTM@3{o{ z|3h{DTWkmI%h&Ptil=lo(DW^Bf^jeM6@}O4SF2u|_I>(rB04&1COoq6G<$h66^ZZi zd?gN}f0@1F?Mgj)}%6W5c!lj+TyH0-64Bv7N=z8wOFjde@GjmK#0(keN#C@yJ5oah22_4|4`J#}2v2 z`G?OKi2wUj5B!JX*V{{!a3KjNG>_KL$)M(j$KpxT>!S2swP=n{q`YZKtpBFPWORJO zo9T}AKfXv89iH2Ny}bnHk%@e1S&{^a&!S!$MGCDhhOa&2AHE0t|Cx*b@XNHlG#=hz zdS0HeFrI7M?TiaL@o%<05eEVDv^1#?w;dka(?$oDjzUh6!!!g>8wT{?XZDhs0xyaV zda!$LjnO}H#%Iv~|L5!3|4%#U^@swL&sbzmcrqcN@s5he#nBP8muP`UN4#26zAd(m z);4j%8--rm-ZSof=Z9fzhvQ3pa(KIkyA9ci586wUF}LBc{SR+G75M*zr~Mx)JZLYG z_VaEmcYs-lh)14X!hpmX_L4{aFG={`X0J>Rfo<6ik&ct>l|4z%b0K>2$)n@uX|F`b zO=Dy-w&vmRfuFqLM&SQ1*1>=H`scQdGTcVDGO*pJyq@r=4@1{_>;lxiu>Ej9dpWje zXe{nQ6)74UZM%)@5Tp<`YYxX_ z5$`JM0(&Jf31S-_^AG|liTuu9ogDTOL+PRtvsYr<&E4%0xgDMEK;p;7jES+y(bkn5 z(74-PnP^L?Ad!m??;dY(_x0;|6jGF|AEyz?d1v22YEpwXRoxyBN|tiz0^)O zupj5zE2-f$hA6kuk3Yly(eABY$CdV~+)dLH;bd}GJQ2YQ4>LBJTBqFyU3s3poWMwx z^%Vc7*!772{_8dQ4_~|&PI_T)R~C{)=TV62gWbdX=7AJ0w^w(Cqv*4gNSnLO;mMR4 zNsp$YFwN#V^(jz!p}k_7JG^#75J|!g-Gd=UeU7cGRBe+WoM_w6!#m$PM;tTb3PD`6KXaed}QjB0sWMU(t3~I<7c6F(3H; zx&;|_?uCvY(5XY`JAW8&TwI6G&97hj`Zojre+&HIyq5k)r=AYPkUs{0UekMy^bUHM zyo3I+iFeR5kG<&*pWioh%{>?k5_sZ%EK7nWoP!=mFWI&xL&bt1rMg%U3=vXk!KD98 z23>-KMlX3G!!Nn~oB*;zd_Unjw3}kCF==`MlK?O@8=|11qYr%a*NXz7frJKXqCi4@ zjf(Zwgo-pO(?77uU8>LV8+gy&TW$gV{|@+XB3nEU;&$g{{+RcJW^0qHASP16zDg4I zPfaB3+3#J=gM@{BZ@dX4toLV6VOd?memXK1_h|2nzMMf6_6Ej-5ex#IjNz=B5%~2= zGZ7z&j*U@}Cj}iE0mdv3%~kT*0zwdV8~cl8f*uOZp-+%-iS98b5R^zDd$NzKAH(=V z13jC1`?mnoF22~ja9|7iwT1e6`YzeL>C#ODoBPbrz!s8SbXl$W95DoIs#C1B#Rvfe zE<2MiSMtO`qga^jo-H8$*YBnNFQ9WWf=Q?}B~jBf{StRTfQ^&Oxd@7yElkfabYBsF zL+DJ3zO1;H6~YJlXMn_YB12Y#j5*`d#l2dt0)5AKJXe?|A2}Ft#HjNu7vCz6TmiX| zEkHjEnsf4A9vAhgeFBR|XyVWumfSK%5chtOk$japXMaM~}rh%qGS z`9>h;Wenx0ln+AZ5QNdV#OWz|sZ$zMAz+k_sT^4ob2u9Mf z$98!ZbGqaY&WY5yl`@FjtVKTXQ|Yf?2mJp(8+;wlMgF5tJT&45@yH6y3yR-mBvPCv zjKJj}=3IFmWmgTqCET=9IV904$VFTNrnRC|WzNPn0&km>&_bs|Z?ad~RU)93q(b`| zDYQGAD74cK-t-}imAb=zJ?@!XevHT|cj_ALNi^=)ZLT)zjEa>S{cA32jp29LO@mwo(RAZq=H{o;2l5N_hhLPy^$HTY6BaKfGI2S4qs^BA$;~?; zYZzlBa386@=C7RdSB~sQel4{l6F1Ihv-v#2oghw1rck6HAgAkchjKN=AVUJ=KxLDH zO$B|cans^J!gM4$Y9Aj3hG?9o#im$#&qQVj+uQijo~td0_Ou1YeSAE-}K9_HRVw!jWJ-%m>Fi zb6uPGp=;EN`7&#;jxH=Ss%xEry=}rA7ub6}&YadjTI5UF%EFvLzpR;d0Z2yWfHEdl zaWH;WVcx2@8eNHG7=iC1@E^UT&TdsUxjo$9zX^-uZ<{X`zYT1WpKb2z?`lo!f}YM- zV0Nv12nJ=Jb|d0H|55T^46;riheEKqSDQ}-&ax0V905UOUxr^BgFNDG{1KGlAr7j+ zZ6oT#Jcokq7im&6mnl@ZGJXja#Y)j+0sVe4)p&rK3>tmC{dnZzO7l~V>r4*mRfu>u z_hnQHlo%0(lCiv~Q8+Zkid91c#-NdW&3qwyz?iBa82kS6!LC}`j+VkuR=K2M8cEkI zXy0e15yhn{%5V=X>Ot*tkYj<8Vnjh_%H@Or{r#%$-EZHA@BjY|{9i@>>w4Ku&0?DK zQ*M%;q^_})X?x+ZGZk;!4D4HS5Bv|>13%DY4?Jt>RmUQPsPFqru;p$4&O5NIzU7^o zoE&QJDNjL&3Q7SC$PAJ3#JItZi?XSZtq|0Ua9=Dj0^741K9|Qbf{Z1!Fp}u}BT6?`AhUt}> zKjlmw&8MEuO~8|9N-DFv2rR|r3M}fuv>g~F@5kU_OC}5{u%zcjq;AboRphb2MK5PfUY!`?kY9i!MqDNseMsw!n9%oT8M_JR?dsm|={MqngqmP{>(usJki zgzYNr)rZ5iVN{QH6nU|Nc~EZ)6Q_7XVAfLTGn(2ChGDTo2f!St3P;?|KmWioL~ zS9&6x+75;@rvy0n8$T}r|No-$zlk_|C%nBfj|wrD-;ZcXqI)6_3fSY?lvr6zq-ZG7 zDsh%6B}Vf5{bc315>qd5KECoSqB+WxAox-Kn)ytz$4FgQmesWjJEuHQ;rU)LW-u#n zRU+Wi$kA68PYPhLfRj8l}cuz`Mij)UDJZ;BPy78D_>-20f9s15!v*LzeC~wG`fR>L&Md0V7q=}X5&_TFxxl<|LuqWX5qirZ_L5Z zO*h=o<&KNK8snn7`nqbPpWS=iWmgBWC>)wz+>_~Q7QI^&QoAOJW>K_93d`00HI2k| z(OB=WrrICY)KM8$gCOj)|JSYG0{(Ak8vlKvzX4Mv%m07mZPQ3}7mf7}E8G6Cvi}c7 zwoXg*CpvEh{vRXp-`1x!8lKrNxq7i3TNsRMX_!AshWUq@80IfdEnx=v;mz+NB+`dp zfn{~O{6aYN#Ygsd_xNy5?urtf-D{pi;4mlmwFQ_PaWJe>>Ou`Ql0YK|F21-$P2Ea* z4X2xY!s~?--aySm$v{KU(%h*}Wq|*klK-ur&J_PI`jNfV-n0WBr3gGmBJj^mMBt)l z-*h9vKA(%I?N>eY6D+HXz?Sno_CfVUxs}9>^NjJJ5i`c)5o6r%A1~+Ti)HzIjjx`% zOmNQ59G~{#NKnAEjC5^2&KPu=c`g{c?a3;aJ8 z`2T9(y70dn^u{k;VFCY-1O9)A>_57+Yei2@7pxGshpEUBMWxaE!BHfJ z$Rz)Y_{Kip*6wYc0YoPGbl|+sz=qBMA(I3eAd@WGukSeSID+OpQb@$wB7~F!2u^YW z{CuA8B={Ndo$x&TdD2-S_^IGY&Yn{6B>tz5M$5&?NUL!VP%X6>jYXQevCsUbzZ>{} z{5t)=p~%+7q?y?1(f1qbAIm@;Nl$gvSe_uzWBXU&Sv+U(buP6e7 zhVS9SS4^6TJ;rc&czdhD57jg1G4C}vO%mAyuhR)e>Y?v7>KM&tz#T@Vy}ueo-6)J%jE!`oZN zAn~1e5W8=BumYg#3+=>Tuh@2@S*s3>z6$vNj8@}+q3p{+s~M4Kcr+GIrlP~1AlJTN zFSQepiL+wZ_E>z_b1)82_#4EzT7QI9VLc%D4c0> zXgwM=|6O|m_d!9jFxxp(zHM>bOpJO5 z`+P$c-JyojAF9==D~s`=%f0RGRR0APPof8t_VvYygqiY)cn2+?zIerCTrA-q-|@n~ z0RNxu75@?G^)4pN@wi9GRj7X%?B#fz_E_Kd;=`$UB0OrQlhG?%zjf(2VbK$qqH2EU z;$+O3(AMjh+Qbk1g}u5X>UF!kXY!82!2jpC`47L%*{fsWWD4(myiq19Z?{+42IA?c zAbNxMGcgk>+Dl$RfdvWQefIK5yWr1hdnLM~Ezlbv@+&ZqOwV9?M5AL0fw&UUv!3o- z1pc2U`S0z1nkeptQ=hlW8j(xv70fT!5UXh2ME)nje0c=pCknnFfEn8^;?emMJx5#;0QUi?`(MnQdi zlOD}K(&W*+fBS28`24;>-z_&^2I}L1cVStQDe-8Yh?v7;;e?5a%p+dFYJ6uZw;VwU z12+mP)wV`>B%aW|f1?PGTB23*G4}BHdBNuh$Un<~6M0FrtR@ z>kiA5Q{wQJoal=%v*_iZKBb@=<&mqo^Qvk%i#>i3@>NhPla5t zGbKs_<(4h>2FXBoEb_gsZNVbP5U9U;8Jo&agZLAhyLx-OwCOBcd8dJV z&4jLVI)Okkn0sqeg z{=b{_f1RYX>bA&QFXYT!Yms0Lt7|S{&w2&E$G5YKz_uiJv~SUlb{A(%|088gKWr9`s&3cKf$a>vd`7Tb{o5G^U~ z-zI7Q=;mcjw3}QW>ppAC^|6MU2aiXY|1gWPPMizPRnRB6y3mgA zy0poPf6V$ zzpZm*L+6O^O#chvXV1&Nq>zznyIp1h+8Y$V?IXiHpUH|W<8;^%MKI$U76A*TTK_F#5aG9=bSw4WN~~BcfnX`ul`A=Sfp`Lm zqqQrax6CyPeL)R)Lhxp%Y-LWaV*5v z!k}?|@8P~1r~u{8bG3yT5*KQka!PSaPMMm9lF2a_dFSKwa2Tm)GifKqe0>p&%oW9Q z1xz_xt}HYuYZ5=ZvY;8(BAFPYQk7z}LQlNv$t!{XFOdA_N~$AJ@d!P^{N_*+L4Vfh zM-&qT5yisX3~~t!>AF&k_>pG!VmZXR*-VWk)6#zf#l2FlmO))=B*7q#Crn8v8bO`~ z*v3v5a#RpD8uz;8)r!{!xbS1zq=+E+^arBg`oamod7DJPJ6H-5{O7}?g1^I zuUJl!ajS@N%S;F@D~qCA!I~=JHUQ@!k=vZ5ToeqF`Blkh2xL+Fda6(YQ^Wufl?Yc( z5pIcO7z%vu)K{Ya=L;qO8TN@HoH>EKCC|xKI$KD?klLZ`mbPa}Zkpgj;7>wHE#vlz zQ@?IhKLOo)LE|I5C!jhq9{Wxw(8U=$|Jv#bin)lPl~ufDw3J!wk#fW}{$P^E|7VgI=D$ z2o{7I_fz9EKSlTw*oAP6c)x%(^G2PJXlFPCS28N|B?NcybIIFA14o@839`nX@*^2t2;~%JTW6k||l4thf%sg-2KcQ~5lCtK_ru z5{iWmG)kg_ATraL3MT5Nd37PpF=H~86dl^jO4tNt%!VagmQmh422BdhBleNe8iGoS z>ZAdYUJImv#aF4R!w~6%uukP!@`1D=%RoSXpL@jWi`*yP<$c3>_49=o(*Z zVxxY2?a4|?Xc?KA;6rdoJ;nqH8HVs`H6klJMk@_Lh=VQvvWlZ>2E{;q4R*a__Kd&gN;J71_#j;>;Y!|$*| z9HjPVU@fZ=yVg0aau~YNU~Vmfvdz@-$FJR%ORN@>7u8XvM4Ag+(4TQ*wzPyptMxV{ zdrNx{ZNRgn=bb|(!ZysY2Eo26a9%{>$*|5T2#k`T02o0KD0$r|K^*+fy|ROyg-d+*_pV1Gk}nn=wdl`G;ci9vSFi+R(`(4QJjD!lL4|=V zOetamY6~K$pN4|9)p!Bx2OhCa>9+z>lv#6g7iY@XITJ!7LF8v1IoE-)B0Q^5!;eUfja-XO> zpiu}yn&pi{lC{Zzk?M27;;30$Kmpi3KbzMqU6%!mat#V~KZtlq;4BK`Dv(F~s)C$5 zak^H}CJgLI(kh80;U7u?qGA zCe;Fg!pnGAjm2^apL|G3W^vxZG$~`3amvJMlq=P!JJ@Q1B#)Mbl6yN0)>j+s`oHY` z31DMabw7?f!vvC-Kmr632qZ5<5=)8XNb>HZ?C_9vWD}~=#?!E86C&{+t$+!Le{{JD& z*wTIX-Fwfu=bn3(&*^ONxKcs544APpc9l*m{d|GGUiQa3z5?{W zT+%J--}!5bh(=mxKdV90;gH*higm%`L7*8jhpUL|Bt7 z_|z%SkIJ*hmvxz;J+%e%35kLJ!M-pq@&V>9Wf>0&4pw-Zn3i10WQg!3Iw(3Ndme>; z=w|Y4#*W33VGoPj-N|Ad1dY^k36Rj#nh36PC8{jXPVAuSr#^P#eL(*!B>gpUj#H%N zgziv*ULRR z*CO*K5`%++d3(Bhx(CCONLA353H(#u!PmK3pvIOj*65}p>Ufwsk2Ko_5gD}M+IC6G ze$YpjYy4_HZ{)$2**AHUIW;{woXTXz(jZSXgF}czC{Wd_>SHGXhO(bUn9eL@;W_HK z-+cY^e+TsMROi1?AA+yz3iAa}GuItEc1%ewp=tTRV_CTprj*Q>auv!Q%o?w~s-b_& zEgg-zZZWFAfPFY~q(N^UbC`gJ?LyRhWmI&CD!##YzIJX3@8qo&ZQl#FSSCA6z`?>*N)q!ycY01e7~menT1GR%uI8V`rg6#Z4UD zE`(RE;n)1)1wj9hivL8JNp=zKtp;D|(Fl-qy>JrTvE30}DTHTs#gV=6L}H&C)=nbK z%K~s4jET)42Emi+b~$hH0&^n8mI6I86!qX|Ay6c$DB7j9WDjePVrUpV0#9kp9j&B` zfvbaK6DCEnd^u!uvPu>xgP=Fa!Q|l{T&hM<`!knptK{L>8^o-*{g%+1izl|A_)fD0 z%jd?-+U47Ux*1$3$MQB>hgdId zUPYJi1Z7ZaV!sv3K{ckjg2#ls)>YVd%?l&#GC-8RnD-LhODD=1RefmG6+8dQ^B;T@ z(Eln)|GJGuRhJCi7vKx%7-z5BG&-$w!=$XhylYGK2bw`g3LixnhBTA$4_@(AqQ|_- z?Cy)jKrtKW>xsdP8cawaZOdB@3TG>C%bT8Efo&ZW_V^7aPenZL0#pN7%omw?i{IAnekJXD>PeUsXsM&rU!>zGy8l{_;^&Qh+&a=cs0q zSBD(mDwW9|Ru(QQAcjDHcdN>qtlnGnya%`i_&E*TUfdtZ(5~&ISR*WGuXhFIT*56Q z%5jM(P{W7+N8_imGKuc^H|~FS+>2K+gYhcu=pqI5RKVdSB+OoXojRZ+4Xm!3CTM^5 zuFsZ%{t+ermy6|9>08k$D+Q~Nx@z@xN0s!4AUFHmPr}m%i)IK%iN`k-8sV@>h9LJ# zJ`1wYjuz=^<{6nwAP>uxBZdm7aCtWu(671#XRs?A9l9s1)0NMe-g7vpJcfmqHo9M; zv=UZ5Y&P#K)G8jjFHAv-6$UDAq~9AtUhcu2AOxitp%9eBEe%Aau*9K)$SSq)7y~J5 zE?KUs>~;~JZv3VqLq9!ngbWw;G{jxopLF)if&NiRf5PSpM>Ii?lc3vzoCy~-kTaR9 zp9wQAJM=_U26=^PfN~w@oT5`DQwsH9)f3(CvZ<$>A+Is6s-Xi)&BVwabGTR&Bx@FQ z0z#b+GjBhaG(kmYtNVI0T6L;jhAwg}RV|Q-BesPnY)H=ZBnEp1`});{2u&TPqq`B8 zoFeF7_7@h;!~EYa4gb3!tV&$Q5v|(g5>`L;PUu)yEEexF_Ng`D3keDop;ih}Es?s} zhk=bsWwNZG=s8M`Zn)0j13?Qc+eO3@2}3K3aIqRqUHydjuP)@x7=TTD^{xmy!d+46 z$fJfBNGL;0tv=83=V8O|AY)O)ZRIiMJw!@fOqn4D;sd=sgRwBV@5C0zby(oaWweg^ z1t#FjpiLiX%ILZXvKr`bcV7C6643t|Nq(&hFg{#qyjbN3K6X(uI2@*FJF<=|!dq2wGU6QFr(Adb)jcW+2WEN9qr%Ydlax4YXdBSbtz%JQ9w^H#Rdcwt$PvcF0DL zMh^e_8lFW@j9SI>XpWxXRN*1tOuLNDzRzs(K0NY_z)PD1I>ybAXE*bO>KGzaC;Xc| zcm5U7KQ8G{>rrZ9P{^!ajatK_m2xr^ExP7=gbfBKNs6%NuU;mj@!8u}C=^8SioD54 z|G0t9^fFurN;T9i9G@l`F*T23{maS14Z}0Iu!m<_a|2sK+}4m3OEz7tRxEZ=uwf7M zcx#mxLU*^ra5(Ycqt<9?NCOL8r2;FeDdK7!XdU@* zs0$~QDhe&2pEK%$L z;wkC^@3YaWR+YgQSR=}*nmjHPbbQ!(=j1}wDdZFz_^X@nE`~Zh9y*3 z=wWz=)C8K{OtOMZD#r)+J55rUS+xnX*#?y}j)kdzn<{O@r{jFBSPXU`7l~gj&6Kn- zBCknB*Fc9uSWp{yG^BI^->O6!j3L}mx9p85j%+qnowigDYlFG!5-IQ~t%CuQsOnHC zq4t)Dq9nav8A@nm6pUC`T8_Cz>74z8J>Btvfv}m~|CFy|{%?=U|E#%wt2`}h;j}EP z8KnVxDlrb2{7O7L5;ZcG$lEnAAzTKz=1$4MC82C$chNdxvlB;q0Q$gNoRvRJM>~m#U3`6Yn6q1vz70L7%}UHOD21A9ecj^ zeaTF2YG!&gHIkc7-8hq;h97XvGQP7ZA|kN8%PKl{Xey-RNGa7&l-~Z(UwsDX->d4s zko1NMUg@TmY#cwG(;j z3A%XEaN>R;0!kX4R{?iDEYTqmnvF?gGQ?M3Q*&}wCA$@PA5U*bN1=$}c^5Wm${qYH)f4|EA zkrUU`7S!80M2SQ|2C}DO!=ni(Ns3ebHto04;HF zG#e~48KmXq1vntk9C?%?+F9VBA#{#xXym8F;gHpz3oYUtDfFZ&!{2aIi0CFa$bf3^ zC*o}TsmobH3<{T^KpJ>WVQMkuD-{M`*jimiimhtpinD+s+jlAU;w<*GR@_6A|+)q5TV0A~-x;X^m#9zf~>Mtrh(|Sa(|v$LIBuClUv@7raO! zqg=|{G74M2NAS%CR8dsp8jY3pRpvRSKMhsJ-qAC>4=eUknN(LQ{4N1LP%@ArVX5wY z)@RtgwPhwokL)`ljlUlGu{2*IVs6$T#Ls~KgL?e` zg0+lSC6Z%Q0aP0a>64<%1czqQ&pnz{XPvik8eVr;dO|i5_}CpE5VQdN78Pdh$e=)P zFd`CIg~E{bK-NOB0$t_^rA}e>PCoys7lXN7Cmc{l#!IN5LM>z@+ zJ*!0rJ0)@TPd7?{@CRkFkweA(;JfP<(eQlNn$wqrf{42z(ag8SBI5ASML`G+v9S%s zLr=^6;ORjBAr=3{!d=%%vliz zRGG{r7~R0PHVPe-2Uf5&LFD@_NJQWC;T|E_Jx^@Td&3 z=6j>>qEWet>?ocM0`ev56y&lB6))n2kP0KSaF}TkUS4|Ts(Sf4YNkqq&>2ArsGq#U zege>cr!W7@V%Vk%YYT#Bns}`-R%Wxn30`(*l>L_Evt}{HP*Zh-pQQuhX!%G(eOC)* zUKWAgdW658IwI9QOjL*jPvc0Vn+um|U#Z}oTLz^W91p;WwYbBX#2nXMAN;6$o@u9Z z04`eeRTx57qikVyJ#m&e=AP65rz#54!;3iy)Vo7<8JW!!LiQTXf4T6uX9NAO-PUo& zMHK&oZ;_z{z76Kn2>Jd{aq=p7PDYK3OSP6fYsjEub#Fn@wT>hVk@w6CzBlL!v0_yU zVc!v&_C&ld54Ju-lj07xZ{OQ-<-dLi|GA3bdA4s)Z9mz8f8UQEr?wy4j(;EDi+`_O zc`4&Wyqa(#&f2+sl%5>jwtbY)B1Sv9&J7FglsuR=p2w_zG`KS?(=8vfUIROC{>x+fZyc&9*5V;R_$iLww_>&+jPk~q5`bsxGb4*AH8ykZyXuMwD*6R^N*;)CO$!~!;QI(US`OapZR z>M|$FLXb#9#uDhrzU2<&+(|1bCTe*uJFQD?z5ET-dOf%6caH}8Unl9`()!8B6){{H zgQ;(2^pHYJxt7|BhcWAhGb97c8(dsZlGECXHPt5X=LNN%S+y5z-;(;ccr#15NBRaD zTxqqZ0x$vrYYnd1hE@)?ytz%CESjN;tW12n5RPg-Vd^9Yj#PJGFa^a)d-vI^xc{%0 z^w+FYhH+ZM)Vz>+7kD|psDhfcum=&@B-f;YS&5b%R;f&}ydwGmo#d$emR*`;w z@9Hv>WXLR*Db&Ewzr)B4-C2y+;?+`qu~IHMx7&EjR2KmrjXI|c5Ht1bRhRRr@Q5M- zC3TlXA=3F#%Mhg1jR#IF|yxk=7&3$M${(Rp+ zd;sb{wu^hpaTom$Xc1xh1jw2dhzl`jtgZ|L@zOXv5s&LF{q$%H1^&|4OIcfNZ3qqS zwO)=PC(v@kM3vA%{$z~a48SR{kKra zlwj>MU%J7rcx)#Vu4ErO`KizC0{ZU({r_8>|1W6>Y_LLC5LM|~=}2U1ov)~TSm`e! z{9NC%duxn0`k(<<*?EXEY>bhLhqZus3M3NBOSq*imlDRxm|4x>HyX1LFan?J$g;qH z7?ws-lfELSG8!`K_8KYFcwG-1@J2{a|3w^??7rz#awOcCEBq?Vu1>z{(u4((`a0|M z#$7$JMDNblzy}*5+8M@nxQ|@@t1n!w!`~=W{820~O zivMj7qp#zPf0B5CUm?7}H#NZv+?E?Blv0Pzg~ikN%RQ7z*ATu64rja z-FnF$_^IkCWFK3ugd?W^gLnl0PJ|8PCcev{_EE$*)rH!U2-n5HbXk49qCuxp-i5$L z#pA-ju57~bz&v^KT3hN{5wmB~d#WpC^$OBmFsNKuv9WESr-VXZ3A{4cFfO3J^kVdA zL25V@$#gI2{vNFUc_Xm@`)U85cJx$l%@IAdI~q?!yW>IhRPP%z78|1fIycjg8Bd7T zkxunvecwINSRDS-`aTUHt*_eNDYw+4Bh@x}6_{UcoUhWx`R8UE=hOFop~L7H>^N`& z_D$?J-^aH4zIhIn7#~T3df7t7jW7SjEw2XpryA6M=?E#feeC%T)%9^RGrTV~p1jjM zoZf4u4yH5N%&b|MBNfFk{NpH8%FFC46`HefiNMNQ8O`32^3nxHbkH65-7 zs2?`C0$+v)0?KvYOCyM2BfxSN#diuLPO9$Sd+2+f635sJU|9-A_H_)~=BhN_1gdag zAxaB5Q!H;XXu+t6tF?L~LYP?;G9i;0$bBXAp}m!mj;UI;jF&BLCi)YZzw(YLKE({H z8a89|9~)6eu@EU4P9=48SSvJ?l68jc%pZN-hcN$hFVO$ZWdEzMhDG-d0>cot3pq+d z0X32Hp;g#r7xd~3+yb&qOi+WC*g3dOCnzke(Kv)qbbqpkSnCR_0#r=EQ_Y{mYL z<@;eP4*c>D*jC?)FQdyfk)gfXRvj11t*7^N7%{LAGGkW8OnK;8j=K!1hBSpM##82e z&@i2ak^nXnS5@rlOPwG7DbRmZ?SBC|5s~{8FaCHJqA}FD!X!JYP%6;i3N>Ao_VyhQ zfgZ+vB!P}lqvO$IqKVgBx2BUZpUkFWcyMk?w-m0BF+7cRb4`L;(0~!VJwfZJwZiS8 zudN?dl206OEDA0N`BQC$i13Qzn#w6?YcC&?<{4aW4x^!%0Q^egdtg&-G~VPWj)2zz zk8vq70>s!!UnsDz&Rgwy(9TyocXtv}Is#604teLYHtoG1c=Q`E{%fD4KX6#X$9Ec6 zN4NavYU8*$ilUHbBHpuGy=7B-y~CC zk)1HZL`*J*7cpn1s6sLHdP`w0e#?42pQh>1eU8=;!xt$9u`HuSMdAp>TX$a3DT-MX zsJ_B=^SKWK{nIM`k5b{(&J!SR!kRz^Gr_Wym*0{xP&^ssjDF!_(sqA9bjdSQ0x)R1 z$PDS52hMuKGalB*l(Xd_?D+-=OvW=`EAxeC|HDEr+BVtg6BUF+I5Rz+n#j@xfBkRC z>7AZ8*K0$NaoUJb7J-^hHeEUgY!@wrh6sy9f;uHm3q!D%h%mfy$R3ydsS@1Ba;2QN z3$=>CX%JFcg!WM{`FHgk1p42g{67_6DHI1?ukedU7m*uE)Nu_#I}9$bi0UeG5^|6# ztb$^9sk?yeRT@PDA?h7qM=hr)!R@dw!hJ9#6G)&FjcY6oSxz*oM@6)N#Yx#i*Rkx3 zG#g=H5Ez=`nF=G6t*CWqD~d8pw5HSrAJnQE z^xt~dRx~J3$)q;-b<*bE(nOmxD$jgg$2lFzzdCu=J)q9*{^4)2v98X&<_0V@D+{mY z2pqk&!8}B&bM-xiZgtD09IQ+P z;tPO_@?>4`;#N>)A%83b?@+(k&GHjJ{LjAx`j2_|Z;P0(CtgKmm^qtWnJn-wfuDQu z2!;obfUGDdg#5hz*inGLd+xjw z^isc-sKEx?eQSi54*t2k%i@1*v=X(Zd7;kOLia6ecG&;s|HRwqzrj+CPkj4(K>rCz z{|0kIPI&;Au0i(?@Y2Oj&(f{O2KlZ+ORKag-l9%h8T%%d<-J!O?00}t~~bV z*Iy6xp91>79_fG2^;E<4Omxod`_}96SzQ%+YbKi;pPEchWU>74P5bw>HZmC7Wz++P zgJIAF^blG(GKV!(Do$Y*E*JPUg8VdXLIo1tYNbZe|EAYi9Hx8?#7J-)o=RBr!bdXG z=@E6Vy8`V=YC3qx;d5w^na1GWpw`oRsW2G)R!V}^Kdw0*&ih2E9U=f#1%v$jd56CZ z^uH10{{=|ryT3^c^Dj*p=HhprtO0}US?opznfm6#v8~P^?;oBX?oPBiAbo5PQWdzc zC-&SS%|(8%W#(7&MNs45ep@RQtWsVi+)2HTav@oLwajjGkrS9NSw9WohigvzdM!8W z{}dg4c3xaD@ggWeqw&Qd=tV{$QA|&jYL^sD%ICESK#V#8g|$UaTEbho@Ct0;apQ&S zB!g+d8P=WX9qb=xk?4)Z2V(=h-2HtdF|9znFqL0O1^IqBfqT)BR@WO;V^lu_Bm{;GxBH1{ZFE<&9OW* zgJA_EnnFdFOB-q*aa}|I2MvoF)`#1(c_moXQ15Ef%$3^py1xYaXMq0q;p{!RgFvRt z+NY(m;l|x*V(rY|-?f#M2U1Ed_z&WOw>RN}OaJUCNfc)tcb^0gqClI+EI(oEgiqIBVePkyXXXhOC0~)Wy%U z{4G>0WTR}^km$@-0BjT3>i1VY>kOcO*7N_UE+fhaWtnnNY-tUU+K4Gya+%OFMP)xxT0ps??G)wq_lG^*-9Nn_=zjp{eq$H7`Ea zw&(;|EXDY@NsPavi5S1^QTIHHt}Rqhd-01qv8^t~e++k)u|s%e$)*mrbEdDM6q)E+Nok@Nc=&A|adhpwaTo#kKplyo5j#NzU&Q zIp5iYoSpxDZyCrrJn&VN5yw8)gKaf(KIW`LspK>aWPe)&G4;4p*;5F^2VwL2evcr$ zi{{Q*MeP8UjuqRMz6xx|ryG5%KojW3%2{DXplnt((3pY2<-JwLqRcxLQGAS&fi1Ud zYVAUx|DkOiXS|W(KMfj&@Zn;IGXEGsX;goR#Eb3$P&kUKvJybB5gfoY>o7?rJ}xQ3 zHmaJidm9sG=uwrd5|a^YUFJ-Qy62u4S5Gw)>TC|joD*R(nhSNl$i+X^`nM|1T8VR2 zFX@aA4)k-tY2fAzU-b1RPIK((r90Nv+GpF3of(e;{htW?{}F8e#eE^S)c0shy{pNV z3SWEA5^SmKIxfa7wf31iv8}$P9)cM)hP2&y5#Jg^D|GKV%chcQca$;Cv&E!n zEK&|R>cL-JTiX)VfDI%EeV;h!-Ay>?>YtxH(s545o>Ob*Aq(CAsrO-HorQLcO^(K6 z?T`0f`z3mgyY8X2>)t!OOA2?fKZ*S@&K>wS8{_n$O=S52R61_uXw`}(>E2LgTYGx1m~U?*(YELztN*Xy)c5|!KJlFzT5+#=Ti8%h@b0kQCV zny_&6)u(<0LNM9!d5p_{<|m$wZFLU5W+XM79#4+7Kb8wc4~IkJha)4i;aT(W%tR(V zI*}TIA2EM)Z+dKO)-aOhvPGo>chJea1CIM+b|K2i_gwa+%N&=gWVKwiiaYyu+zj-e z_3A&V>M#Xo0VA729G53VB3ms-WFNuS0_{!QuL-E0-p;+aKs7roVZXJndAlJ0t5O== zvm2(qq9)q!4P^$wSS${O8>gL0=GlXNIihsdgd{|Pd z%oW)~r6p8}Os?wW+V5Ci$OHXzp#RU{2rE&J+tizeW=8h9VG2RoTW$n%L+{|seg9k7 z@SvMbLGb$wryF*O@xJwA(mKXckAa1N@wOVl$jhXTlooHh4Ib85ulr}Ww@+zc9m#b+ zBCdOH6Rzvdo*3*nyJPo`CjryF?8Db!Q=RG3*EZ^Z_lqiD2m0Rv`~SCI{Kw{orpy=D z8pfDZlZIMc_vWSszxI$YuQd~Xt>iQqBNUC!c-7kd4Hu|2TD@1&>c>Q@_cftaZ}Q$z zv@MOj6(z*qeCQF_Rwveh@sZxGjpbZP9Ox_Ah#6KfT;Tz(Khduwd3qXHMp8o@M z6(YBX3+J1(8?fijUjR^~nhKYXbc4fD(48?AcFCPmOwb{tiZXjZ{=W6!_M&_+j z#Gl(Daa-t>iIRjMz^*RymE~jXzWPOPM9T1$6%_fWhdt1^LeW`-aFVcX!jO+ zd*#e`qe)^1M@%Tfd1E#|F^}_Y4*I!53HTqD%Zj`kUQuiT5{!V@&WShqa?(YM!5Y>kY-7m}rZ zLM-(G#C7}p+8+ql?d+Y~_g%4l-?r`hI(B!Q1%K~BCc5y-?GI|ib=$5oJ^)|u+YU^5 zF8sZ(j{jp%Cy*ZN|4mS|(4#OLA!9)(H_ay*uo`N`j)E9O6F_x*_>BMjhPJz>JZiJdx z-#r7Ga96IcFGEgEY%*A{;L>6@w1x@`&u4QNr8$(KFnmZ%YAlv(`c~0wx{9JgrO&P} z5aKLMd`?B^ZyX^_-s2}eu;@ceTv-u_`Ou;9@$bI(mFEKeZAt$TxLV@pBP09vjgMzC z_#6LDkIP^9OOct{B{1eR`gu!Am=hu=k;ltWY?RyHh>HG|=Mo=`9Ypo9;L=%j#Y(%X zf|optMUo&Pa@>wrRg0<pvO459mJ+^#1|Uzj-ep^W(kIcsv^K zHsi6OL~JNN81!$5uH%F252#UBU9otgX?OVL={Q&})%+%pdE(lMtqEO_;__tqDV;1I zd{vVZ;GR>Ra02YD-Tgb%RxbM8pJ8MD1h_Mk&7~)@sp(9r&3ocwu?J*pq2q=YK-E}C zXv&IZF4*NIEJtjLvcRyHQh#>{>pw3j{CAPtZwsRtm1WVomBsN?SHk4B5a-$+2~{p7 z7)je8?+NY@ZNyZ&%N9n1sk_{|NklNNT^MLF3gcB#4V`07$^Y62P{)<5W zKd1YDBD@ZlweW`1LriVIp8LbK6Ij4ZXMXOfzb1f>g?nMUn!mme z+v?l(DbuNmHl0xe`MB#99tP1G8I&+8WY=d3tb}e zN-DE~&}!@tJq^4|JV?rs)ZX+2GEo)IiMd+UHh2^2uYjGW6+wh$M)N6I0^|sn2nV5D zsO3?K6}a{U|E+~9=?W`fAQ%U|9xaz#~H&&e?pVk ze1Ix1NmMRLRCdlB8)jbfwyMGfwT{@bxC55$5P9saY!KCHRCL;oQqA%)N)&0y;vala zGlLo5zPiJwyb%EwTn4E^*^v8{eYy$KR5YTgMa+K;> zjZRO_1TH##|33N`K>wu%_OSCDU2{F*Pv?@|3=}OA9~>fioCLj3E$BxVYo% zxQ0AKw`gw_w|}o{PIEYoEs%8Vlz_<}4* zvd)U3A_#PJG<4oijO;Ooi!}ne9dX|s>araU0Pbk@ve}qz zFeoIBmjno+GnEQug%RulXRFDv87t7vpock&r^$0dQI^&x)5m-&GYBudd{iqw>U32C z67nZn&gNFDw!4$9mQ_6tL(f*i#y&kM-rbXk_xC3T%uqZrV2tkxGeU8|D8_hH{J1bI zqV1??R|({NZVoHmC|o>)BGU>SgtBBUz{^2d0nzF#IasBP(2`KOlHgHGt6llhe3v#J z>@!0>=I9(|Q7^L=Y#}g(aw-wTNW;d^M%X-$IM9Rf-^+0Rk0AX$aVU!a zX(AV-f`o#nUxg{i|E?}`SWZ<`@GDWNKFqC>YtI_9-ZPeR+yQcKcx(nSwRh06;0HU{ z0*si+;!%`#9za@)%7Ilx)NCQ>qb%rKQU{uKpt-Efj^pbbxEmk-ACZUuFX{0AXp_VL z{F_g_20fr1Z$b@l;Jcr|w))}!hOx?aLtexC=T{ocdMAI+5uQM}y_*wER8gX5NUrTzkjO*BEF$Fq(QFx%f(W@8i)} zqBG*XpgWFk^m>5u0dl4%f|%!WN!snL2|bWlf)+cbZ^io0F6{pvlK+iq!*)Z;twuMR zVfnnbTI4KY5Hm1Fp}-M{l!o!ZIlCIKQFnZuWjVbe3ZaYEPHlA?!oHRg;nyS)KHfwk zT=c7x_kq;kKV&gN&x5h8E)qV>*3;ZbdKBc-hHw7H&2L5jPqq2|&jT;?^&BcV3vemU zp_(5tMSvOE&8XS{ed%SU@s&UXP6?n^^|5HoJq2qRh%d?4D@wx1V6^nS{C0tKSyqX$ z$}MRgh9BVt0XMxEZEx^GuNX2rGy9T>L=VDA;ZMDN;-~Hb`B`rq_f%_9UF5O`y)e2? zfEW3jU`XaJ)4#^@r4f>Pp!DRAm~$1ZJ33!JhHj@V596}Juf7TNuL1oZP4~Y>9Nzt; zW1HiqhMfIz$=Sal&i+Ib&VJmjFZeLxaQ^9&DJXL4>+iwC6c7LZEswW~Xpz5Du-Z$73T4U)f|`2*?uU{5XUOwyO`to@_FmiUOWl( zKdSb>1V~0>v{uxF66%(Vcuxm0FZ$7N9&nl!QMSxp$k6o?eGx$)C@1Y*wLkaz%o1Eg3B_2xn9!j)3$8O5X zq{4VMaD1#Q7DH7g+<;ruvTn>D9t9e41b<7D`hO!2eC#)`eLT?rn4~|E^Z(O4z&2ef z!brp>i|z2_*v$BZSwh`Hy&-0rBeLWL z|9TUrc;YYWwZd&pZ^ZMyv@2f6U%PPW^w-Dn^}e^qdc@mtSd@%x7Z4KI940Rq|J>;P zjafhP$G5%pR-pf?m;ZMfrRA3QhR3+AZxJA7+dIX3Z$qKE?grr`hxYaf{u6I=yU6#p zHsAR(`ullc|KoE1kEbTG zW+&gU(Mx;W97|4&&R~rkRORu5J4}hgOyx3x6(+?GSRa!=#5!E?!T96|)~?V#yOX-W zUo)xUndx-)5cDS_W{$)0dth=u{B&oXdsm>lskBx)?l|b%H#3)gkQ|s|sFX}|yv$Wl zO61iNkBjhm54@1dm7D&hHMD|KDi%reWNJgv00!Y!I9D!EYLI0F@?w<*M4#bKoYoQs z#&A_cV; z?BM#p*eS2T^yEyIJWh47cHX*%vRGM0E8FE&?(v6aiLxzfxHN@wr7Mhf9JcHj#qz=e zrPgV2dERguBsz0F7OUu%Wtbk_#VJZpj~#3?az7Z}B*xcHs1ZAk+RHC)@T?}`9(2+1 z_T|a9A9Txefc|&E{y!h-j{-}|y5Etk`&1KIch$4+eI=p)^rLg)mQVgUw$)|b&qh+o zG4%HkSY~Pp!B1P0b!SOgcZb&1abod1RhMpcsVXBv5b^=Nyi^p001B27C{kk>5mG0N zF`^GH0b&^q2CS8Y=a~6<+}whf>-(orKNZ|3>QSkZ#*GHVfEjAoj9o5Fm#&aU6#U0o zHf59%STLooC-#iyCE#?aU{J{+wI1a6wVmpsz~|t}-u;GGe-7yXC$Rr7McOr)yx8_O zM!HBBfhfj8@`<*gU1DGkZd+Sk#&YS-l7ruX;K)nYvu!L{$8vH8IU*p(nTo>m3QV$9 zluJ3+sOY>!2VmppwXL=*v36>!Obxq4Zm|EN4fg3K8?5W!?s+>oc&{T=%a45!+v*$a zkLgTq?{q4agYmQl|JCuZ%&vFei|79u(Em@dYq8<ufL0C)$p{6>U|YKo?o#O}ahV8Cy~t-nr7|O>yPBH-TZAKAbw~bgP|yUvh+`+Wh&;bvm z4(`KMZ|hITV}~&<@7TUtu^3w5a8m6PjwkhhuqAYKy{prmaCEwIU6h?AeY_BH539_%3`_C;MZvlQYBnQtgJe z!q_g&mSIEMu9u$%#F3vd)wSQY0&VN{+9tgz%E0HZi*lG_)Lpce?KY{usb00brwjjL z?bKEm9jGW7;t#|SpOp;piJz@u{l|Oc{V%{EJwH3SgaCcNUVABW#M%e{3m?`w;>zSq zb~2ZqfLjLL9a|sVh3MN1^rCVng7-e*=|yFV15||*s=8{-i%cXmDzu0~BLY;Tcw>pe zDN*6;9@AH(BeBKUDhX^aHYqs;b38SYo*Bnt1qfzK$B=(A5pGI%^WlBT=}>nptlEk% zr>4{6$>~Gp{?s8ee=j!HnYbJ7Pm|-I z&t=-&WFFj(*HehCD7k7m2RpsIM6OhjcQfi2TSJpkpQ#in)lXQvZr5en%TkHj^W@%@ z>9)QQ2#!gWy}>QxwkyB%NFe=r_k#R?8ZHQDx`}X~GDm68*>;KgcQmX6`92i4MQ5%; zff=l78Mng+UFLcf4>3xsxPrk#Z6pA18Y)Mlh5DfrZ%@L$6%NAZcwaT|$=5;KK$hzO z>L|&7(fig;ZIv&9(Zwb?(LtN!^NfD-J3>D(cFw%-SGNKEPbvAIzG8cN+x9e}p`BeX%_xzTy`sZ*jp8v-mFf2i#Vo4&R|dD* zQ{MlKmjeCo1Nz^MMEIY;_rFxT^qjSA?fxw@0C1FK`ZI{>zwoLi%y{Cyhr-El!&~mY z0=e;`|Nbd9*12(90yCs1r>D~sqb-}*I=0D-eWzTR2B9$#S}tR3{6qjpY9b19)e#L% zIuoR|Rn&YCvJ)St3$5XS5p$*>QP#=+F!=f7<8aUU%O8a{m(` zgUGN!6V|E%jc6>z+pLMV%rk19ou?x)(1dr9q(vz$RwEROnXyRB?2dHP|MBM-=r#!G z5H}N%1pOa>j)%i_bzo?G(FhBo?Oh4mT#AToBqF}pL_}=+ljoj8_|6MY z1_@#Qu83`Q3Gu|SB*_TW)pO~QR!0J3dALfe@b!e}L*Nque}7XQL|5=h4YP|;?M;as zY=#)_KFoMjKYi$JnE(G275||MW=i9mC>i1N<;Yu@%%uXw4>Q>3Yw)Gvlw6yFZ0A{w z1g>@>c8~&kg?g&s^IWvB=Q$lxSj`KjxCUunI1hyqo@_AnB@BWzfO$A3MilGjNS=y+ zw5A+wmsnN}Cv3fCEvcH4G78>b04gF3``kU%horyI#IDYT0UdIH~jX}o}T6@(yBeFJ0iCryt2dN_hIz@~nEQW*^OoI^doLIxVs5DiCP zZSNjvTa}{2Z6rIPNHjyr84di+UYKJBtr`|RaT_ijrC{kFe)b!C(Et0V3jd8|3?KFa zp#k#-O9FzqD=cebpbP4#Q?9u_ycvlIE3EL5^_hmu{HkkGZ>trn>?TS5@Z0f0!EB5e?Q_5#$qIYC#8Ft_ADL=+-I z-jSaJ<=ea=Kd1Bv2Ytz2VZhf!|KtSF|7nu`D>mIOOiEi9$-MoE?w;=cn9SZC9O#RS zLrAc^3Umk-Tnxccp0^8_%t~pkJYdQjwhT~Q7Z&V|Xysvs$YkynYgLpm)FR7GbzH!! zT`YE~4-9?=!F0qySV8zzq|P&-qG0ky!zXs6L7KH?5qaO7mt{1*i{_F!na9nr=xUe+ zd)cN@P;Ukf312PVNEqvBZ6x0MiTSyDXY@ub{6vk-tXsy243(h+QK|3l3rin;1JM8J z+d9rzrTZU`J@^uy3-rqyUk(bj0R`gT2x4BYUz4%wvgw&n-m%H86a&%<@K8^61$c^}Zeb3WOeSP* zKeM`V@7js2tt}8s(tSJ8 z{Yy>ge*W1f{;tC~qw|?a_Slbqk4=%xH$4BHi2w9Vp#Kz7U6Q>zJlVd#$xn9ZsgCIR zvgh*P|J1pG!)kPHbR`l!eX+jo-tGbT$&SYRnml-Q0GS}()!W#0$Z4lF!}=ZL9SxAj2e1%QRGUI$?p#0|K5_jY%gTKD3l zqN+kwXU-`in5H_KR8F>nD8hP?UiIJZ2eJmOHcAC}k%$H4(tyrlm)`g43ef*~K!3u2 zIt>MBA3wjgwk4VZlSuwLoA~SNP5A4=S3Eh1xavpleip`{AN=;Ov9Zoz|Adi$TZvR8 zT=hVt;<|w99)LQP9XMt#!ef%-WP4EyVxf^ot~pq`)J=Rr9K?q;M%|Fzce=ipqb-7r z_*B*jYmdqxUZ)y+N$($l{?AwV?2X`rCo%H}Rp+isp;fadBxCZ5tEj~fRiq}cRt0f1@ zAzFu4q`qw*0HRi8#Q!a$taf;SCLpORw8xBZ@ zxF0(-Iyn*YtwN$V0zZZ8QSRG$$7u(-Kl>fWw;-!P_({QOkl_4A6T$hI)stVvl0+X| zyFY#k>%Y8E?*B9K?s&^LZo-FkLHh2@%pQb1YhzeqaO$KMJ&~RtkKo@F1uQ=GZesMk z`HlOZO+O{1hA;1VzQQkP7&Zjlx+Na%5FDzJA2->|V zv+z@(|DOTk4=sy+8&4*C_$cRT!B2%S^;vC3y>StMhEid3Xq#r zfc$fR{j?g;|3x7GFTgn$or3W{T9BNUsIRxTyDxA}3f`xv;s1?l;+GcJPHc_-z)+GG z&m~^`Ruf({@4M$FtP8sTJ(PCygs5r+FuR+_rU0NVaK~X_L3qlrQ&5Kq+`a=ml*6^A<@KL|sL{#+dbZRP< z%!WFx&PaDG9Js}IZ@Q%HX2N%Oyr|kHjezKqUmi;Q@*hq3Wyh&!&jP>nb^Q7Lz%R$X zbUn7!`Q>|*4$i3y4gXyKsW)T%$BQ?K|E}Q=P|t_6sqv}F>E!gGS@D*`>Ahy^U^mkYgO&iGWUVN{F!c=l%gl6Dy^zgK7}r4|0uI-W#h{I1(GXu) zRf_`$EV4~f8;k?MZ>iiJ=zG949C1_EvEg+bp<4{biKu?uhd7oKn76&Epz+10B3`7(^@l|@^3mz!M0S?F4wxyx z%qp^Eg|?~=*di8C(yJ*&q|-yBlWXy2q5=$;NpyXf&PEt-T#r}WCsF>&~ZgXRiSLkicT}GZK|z~ontraJ^t=?pG@!B`QRj>5^NuEsBNkf_N-UlOkYtFW^w^X*pqBChB*m2=m|?&?0ZF z;JC|0YgO`OX5ZvZ=1s}ziS)#1Mk5=2VaP9td}?laf_ikzA`K0N2bK6mCeT+KLjr3q zFocnJD*4(Hx~?z|3xkZb`al&~`?PDmvc$y-kRqkBU}0b?Yk{J_jA|W{yQu1;f(%7r z)438}eTuSBCagwF2`CtD|8lE`A)tC*@qpa~$ zx6ujbp43wnqrs6jE(N({bvCE9bQvk$>qvpTC}7P12AUFXhgXpAYYKxqk-Y7vTx$}q-<$EKqUoS(dDA7+`dXnfM*gF z@j|=w(uL3c@q2*&F9ZGWdZa(%&!BK6dRZ>U9r8XVd!ekQB?~tAPY4kY=hbcCR53i+ zN~LmPE=M2`xr&{KQwr0?>?*zodTHTIz&@}L4|f@rowZd`6;?OOtJxY(g#S71s&K~5 zcdesqZ9?z+52^P(jP$;5H_`hpkDvG@-dQJ}Mp?O^emJ((^}b(Cft=gSpQTs6^yxtV zmv2=6$-Bcs&!K~nLxG!sir+hERxHPr(U8bYD+~>O=z+U4;*b)NgkPEOY1k+lXcg;9 z^q!XMqN@LN*4NffZf@<@;e&5WJ~)r~;5$wDAey`PljvYu{yZhNe)0v_R^x+omwh4?b6$sKLzMH4FhnbDG~|*NJtcqvPYzkr8v>zM=8) zp-iUJXjWf3BBCZyCNZG0LLgDL55fy!Y$ugcTP9?ByW-@%qIh0Zx8rIS#b))RRrH7n zGi_8ryexFe)rOVGQ7Othcy<^hMPv9tUnA#EqZ;I;#W@Q6nB?xEh;P@*qraipirtIe42NqjJ#i1#MCdt-?{ zHfwJB=DofF@v&NH-PU*EcjPWSpLXGQo9x1_FPwZ9?81SLH{vdQ=Eq)#ZS`GvKB=8t zzNf8du#StB@f>?PoXLVJFq)c`eHw=E4MOSVt8LBomAv30kgU~!vUu%v<4*$mzXIg{ zOX>dC=}Ps_VD--xE;~ouEAzFYRRR4-Q-!5pQEg2t&RVSD*jbySBnbz?PDuA5I+oy;r@pe`OTt|4N|$Pdh08yAg-S-*wNk zC~3P3IsAnm!6@PH=^Xy}Og2Xz$M%!9u?KX_Hp#^vhD~0r)G#2-GIb9w!$hI&u z&j)WQgH2{SJ>to6<*E(3-08R=Cgn2QhqOYJ=TAD70CZlr04m+S#C4s`g@YK9zm@2{U*Y)=j?lb-f>RH`0U+3Mcwsf zANmVytn<=UzzL~|5n`uS$H9YnDE3e)5SMVRQe8n|=83=@QyjsLMw>+$B z8?OI4&;JH5Xx%CAmA1#(Zh~3bc*AL~9IN)C@$Iz}TVs6KNpcrHl6K(_n(V^fPu=rT z3hFI=^qubl`u`2k|0fjxj{^R0-jA{4KhQU2e>#&(PaWuMYg{z8hh;o$LF_3QFRt(a zeGxV$)$umdQ%C!-qEvrbQAVD{2$tPJa~yQoBRiyANn_4#@GiUM zNYZry0{z;tT!_v%mS*qm8te>5ybp(l;sLLFEMjgxJz;YggBLtD+F0A=9s8#>NP zTEnRHaRi6XKZp$+jG27_Fx!ElX?;f?E)7`RxcH< zQ8-b0B8kDC$Y5VT{M(DiMbGFSGnD8~P;5&)Y*6h~zM8U$6t0#H`cXsY7uMwx0&mYd z3$+S4CivlHD}ThUaw%DP#VtCpx2_SE;^i;IFTWh<|7wZp@4S!90vD@((bi+#`>oJ@TVhHR0tG_r8&^7(*D_deMKs0o&@l zd?TEhlLu1MW67!ZQj9t-&166G@Rx!zf8O6o`%i8X=3caxHGIbGN?9s44(6Y7FdLS; z=B7e!uQGUzOYo|k#P3uL^%)1Kc&NsnA}#@i(U(<#OFgCS2%kumBVI5HTR<1fNLn(# zc*Cj-i>;_*1$G?ST_p3VTk1l*elo7HkZ9T$0np;DK-so2=fGN~^lIEEDuz{^VN_ub zI1T~M8Nto(zo|Cu+|bq>D=Rwll-XbP*2rbub2V^cl0voF{qv)g`5mDD-vj-hkM#dv z34wY3Yu8R}jniT4$X)kn+I2r}vg@|}>#1(ob)y|M+;!&fK96nnUH2pkY^PcV*+Wxp zSo%9I#2yZZdcw1Kgsj>YB_7O|Yn3RO^@P>4OT=v{V-CGo6hVdu&{Qf7qz3L5cI=R! z-&rUvi98wc0PsIOFV7B^)wXli=ifXH^nZ=2|Bf4jWua@7Wob`1oepq6Vl=3E#Rp?? z>^Bkb?d4zvwBzZ;>+wXRWQ0VRgBWNxICOGV?7Rdjm!=`IB{_`kK#>e&&h?_#df|*L zb7VU-mL1C(i5bGWG9uch6{Up=`O~A-aukWtBh5V&*ik4r!Wdg`M56_j3nGJ0OAH88 zfeEq=0s+&V(sE7MD_lmb-Q?(SKyA6Ud{)wRjz#y4k4^&pUn}*$t#+*K+DmubwUuoG z`%Z4z3u(*#XOk^^<_qt64&}X)aVqp{+^7GkZ`mW6neo;KppV7NbDbFv9Ue(%vgwK8 z?5x=!<<+e%d5NvU<|GUOSmlPRzst;1=uO2t8xo<@HsuSv>hXRMTzUuksL66lK_7X^ zUWR=6#(A&!_V@39(PcpY*8%;>{`5BBl{YbUozO5hF2Ru>Ul{iF$7o%M$2t#q8z zG5YwEzr7duD)!4?cJLip@zpV^IE6Nsb_b*Ck;%I6N4@keUjg-d%4M+uxcz0_q zonT;~G9Bh!W-@@qFE03Uj%GcIE#JU#0*0D^P;#jJX|pHjODzSsT*2#5m9cirtFVu& zu0mXpLf)zrMDPSY6cw0?mQ&#f5mif-5rSa1QTPaNOf@E1M#R7bC4PdvliU?-R$y^? z&9PU+RY_K7Rk1+u-La}cPv~V_yHGI*j83AdsURG;ue>ql+kZCvqLk~1-I0iT~^_Tz=2cW(dP)_`)EFdcaJS9>Oo-3}W zy->tZ5^te+UqreKBfqSVBF7^c4{0S@qe?6)k&9>^Zp6`*^&ycSxw`nR%Vn2iDVHr# zSl2G8I5qiVt5UI6`MvZbdzY)w5_rUH)VVwxR2S+tO?+MAej=<7K^GX8xKgnw?ogB; z<_1-af0XZPJPi$r*$PnA`2KT#0QCO{75~XpHaDa)`sNl&bnnNN6z3Y-FU0;*LM<$+ z^D@GXz`f;EfSaZTIMpeur1Aj*6F5X6;*L3RFRW2_-!JbmE&U6<-ZzF#53 ziHC8~P@&`ANilBLg*RR`6gr9PA85JI@lv@!v8n5axM$7Xx1xRj4s(aKV+c`ccFe)Q zhZ7OAd-l#coKv-SyKjw{otJl6oe@j~#2@pR=kvmcd=v5C-ze#SxLQG2rg^LA+OwT) zA)cZMexuh0UegxBC>KGbMTq%U0e;D20Yl$Qu#jPUNTydeT2jGEo10#nxUp&>TY6b* zb3FO0SNs;}|Bt@JbZ{{f_bD^f`_j6UWSx3{kagIXKNnCsV@6mNU z@PnNl9JQb{@_RYGr+qM*jw_``E)s>@Y9&Io$$WYLs%AsUm70ezV)7SQ4GYc(TVOHP zL`WHXk@jQ-X+5l1Fx5^ewuQ8KK`oKvk>6$g|gd`|K8A%Sp=A^e${Jp!dXEWB9~ z8k$P}RLRRLfWZ92gP9Q4W63HmFIsap7QEF)inWDdzo14bv{in9Omu9Kht+BPtPUia zj6RWJVJJ_iDvKzpfMkX^QG*<*w zGWAfLG4FwLA~33s3gU@t04&=|xpIVpm*oA!$2=CpyjDN)cQdaB`oCGyABK`DEfgJh z(JaDzYnTRt3T~H~5s$-DGHjd?!`d8B2{pdE}yQtnaG1`tpezYgVBm^U;D&-q_vOo#@$$qh>8s|t;TbAk|?C$usM`X7W*_kgNEL{ddSsl zv3k!{s2^1ZM07wKt{oRAKD^|VC>VfVf)X8(p<(A@(ptIp$oKpT=>Jxr|HnxGZWe!Y<3H939d^p@r-r_F;X`_eRr2VJywVrv`&EGW76am2m9Xu`c0f9~EpC=>fC z^czlnV-efx-23;GD3vcG6%uSS|$=Rs*bNV9} z{w>h|UzGnZ#}$mTs;#pGZP7+nTs88xh0#)!$!}T|sKT}!^63?AR(J7G!scFVHbD!_hs>GMky3f3Wbm_{-fTP7A)|B(G=o<7 z>~`2T#HoT+ABMcYoS=lopfZA9ZYhryH!dfr@}ZvIYw)sn)vdLtL(a?1RI0C^?&dL* zh>mG#3lZNL5;fGaCiO7r>5Ts^nV-BKScK5b^6f&D9?ZGU0Y#g z*c)@K8AT)xX2G`nGz@f#md_^aSQbwmFsyRS%(Yk<9A# zDIL}>C}l;fB8}P504q7t*Q^Lr2$U=9*poUUHI<4bL@_WXFcvq_l@+Ozj|ULs3>n5H zBFsc6m{a0-snZf7b@>yvKM&~tcA)=_wEs^>$dsl+T>R>_lUpPZP+T(0CB!VhYQik$ zd+)!RWbg^RzTNVbbFrT?b!;gm5L?!v+QNshAS1?YwM z2}55P{tt%?4=00RF{YB!*)&~tLki4+dpvF?$Hu~pt#SA;jo|qH)S+23#Qk9(hf(*H zzp%?tJdhrpn4C_TW2xkURA$yNmcRD?>vKT=cS!l~d)W{@?WJ^K=Qz$ z_};tUI}G&y*KHjbs@w4(S2{H2u*kZr4lEE{MccwUN(J)F2{jdI$0wE=7M}9H*R{AN zEs8aKX_N-inkE@|PP1h`{`GL{*`k~P!6RkXr6jX{-9%>XDBSx&kXiAL1E@DHegP3o zf33@`PtQ!Whw`k(@;GI3;;SVJAnx>Va_p^dI^(H8|98s$KL!HEi*M1MIIJFN)&wK~ zw~@Q1S{9Lywr)i>bRvXi-y z~%_cn}SD;*j5mwFZtnB ze**M>x6J?E2(eO5VX!yW8w((r_a_GW`v;pmAkxKS(O7@Liq+rU-JRHUV#_80Brp8# z+KH`E4cI_(&}GCyziq-n;n|lgk=pr$rvnEa`?n`yTb+Y`M9JBwMeU@X?%=MDbC+==znLBAw@1Uyf_}!fWol^g%Fvq%^@gMu2vIpq@9v%PT@J;(taC~Dp)vU-Y=QpY_ zGN0z=Sxy-rnge0+9j+IuSQh6t@4PDmY2Cz$G%obDRf!jArGsO-w6`MX_QE<9*1t zPPEWVtGrC&m%`l622BccU83DiKHhlg^F=aO2#wE!njrDb^$gh#LB?w~ViYmrt)Q^u zC{#ON6X+IAcbD_JgP-DhfZIaE@I7*bRWYYH=}3jWVvbhTn} z$i&~%bnn6gc*xw7old1hqv7%r@(ncN7J2pidh3-qE$bBzuGcX7j+om-L`*Itwu{LKRu+A*Jw;9_ z2AZ0Mnkc^r+mDi25s%C&Q9p9+8@-J$Au=9NNL5iksp2f5u?X(0tQ*pE91mDrK|MgQ zKD|VzoP3c|{9p>GG59N8IHj`Ddj#nJK1qLgG=gG|5x_*nrs zs5a1iAjgo&s3p+oqbQ3oY6=lW&m=tt`dF=GCMS|(hn|=cAZIX^P@N?p45Hit)jPj< z#Ee>9hJPdA9HpweL|;&GBU}n z@HabnD!i_lr6vsq}3y}a_*yvI4dF|)rs1@^&O#=I-lFjr)M1{m~P;S+!=%a0R=;w29O(Z6Nq_Mb^ov=pVW65NN=}Ok%6SevBCJ;deZ^V7{&nJ5akG9Jf09(Sva(`N@iXZvJOp) z1e3%Vlaf6hnXbS`3LI}FAY^{RA+(Xr>%tPFDded_ooGSMot<3HoICSQNdKN&va5^b z0^2@9baY0{z0eafOT^rl%P$U&>H(zn) zc>Ca%!jjrNj|f&;Uj!~kQ32v{uE@36eaD>qLYq$BdwY@;{Uw=m!DarW;YP?J&buF; z9H;W#Ru%YcuEsv_l8_^!CC1Kh=#F+%AloFvNi_n>@~%3<-elARO+|#IT1z>}WT8PO zn;y=X9{SYg9V_x|@B>iEA(JCO7|=UiH98ghPkp1tZbpyDTab4d#PtMDVxz%Fj_-dH z(Emd~|Kmvi)&Q>Bu)7AH)4cT$|Lk2`Gr9g&-q&}~ef@U~KJjV-pE!5t_Wf6E-@k49 zegdD^zXABfjmGcb>-_{c0e|oBIO_)dTY^vQZwx+h-)$Y|bnJfP-3yF9ft3<}ryBx( zN7|{7DVQ6%Cz)v}H8Nlb5IxOyiDH5JSuK|Q?`H?O*8`Oia$|Mih=9cOgX{jbqf z#hU-WdZI1Kr$$V0sV1rteaE-3i9sqzN%aJhRR8s=CKBbIlb3=-+4aV?ccF3mqTlyo zV@;ww?je`8^5zDA_EgV559t3NNG=VBX;EcBRbv70LqAY_^bYT;zeNs#?u}OS5L&k3Sk~(8S*&-k=4J zu)flazujeKC?2fu8GPGiCNv4WZA&xO!g4zDYtQR=Fow&7!Y|ttYkcwS*ZdIZ|1psN zS4;bElRwCNl5a03zWsd@zTLj_Ro4LD?p!!=;WKw5ipG`LSm)adMpDCL$>|iRq7x%y zsn#n+c3h;Q;Y3exXDt-%N{-QUWyiG6ps$(AIGW=d_2EeHBd;onSAW6q_sRhg!;=%) z^u!EWqmJW=mZcwNCPpR=BhV*5Ks3!!Xd5WEWH>ucrtmDvki!R(V>78)6LmIxF+WLd zyxxQvpB@us3g}nl%)J<+E5A$~98OK4Zp!v#xjHa4wbq*VaQVLfeBA4S{vTKQzj;o_ zwd8v8;a{*pP3916y%LLOaVGnfFNfFrPNaWxMMMw0%^L=2ulX8bV0oVj+c!Fb(KV_M z8k7SARCyHdN39BLx4Za`#32w|4-&H@yr(cLx~hWm_oPPC69!76)WnDxa#bA&`T{?k z#hcJRu?7VjRFMh?<#QDfOvJU|Ra9L8M#0hUh=nVsZRigP=XHQbCHAwtM-m#YCF{uA z9tq$M?((|~UMq*or|XT>RLQm}d34B31s{+g*KnU&sC?;PXa5h-{}U?yXNhhxPDy6H zB7f_hR1sySWK}f>IUm%GAHy31S)30zxQ$AjW&iKo=g^t@%A*)w`jTK?$`LcD(QAqJuK!( zwRwP*jVhZ_e3odqYO*0ZC?AH5shAYv4X7w~u zeN$(N&dt;7)EQ5IBGCU+lKvX~`~wzTK4&jD0_(6d7VFd~ibbi^ob3QjH%U?GAn?}H zOHu!MiUjobHXS2a#KkmUgi2+m?q4>q>-FoHY?duXaGYd+~zB|w4PB+$*1PzlL=v+z;-@Ji|eO$vWa*A_CHA-AmOo5&GWu&e0gCzHE+oO1_}vk*k8wyf!A^TbUK;p8xOhgxrKpEV=vRb7v` z2k8G9W&dF^>uTjDB?)ch64wb*@ocSG=uNDMByp_JC#I*W=rW@b<{MrePLLQ0Ig@y7C0_f0PPUW#uHnyjTa zLO{Ic7t3YzvxtX1UZ?eZ+ed%+MWFw`N%|9Dolw_Xz^N0RN8LQ!O{KiW3V8K909RF( ztW!*^0=%U{$d?7F3xo1h3c%fJ9TR;>k=o1hR4t^bhs1DxKDk;+^#xT|Q)amig<%HG zp0b*e{zeL~aU{Ch3PG%upNFXC?i`3JMutw|;U!>W(1pZUn$h zi$dC)w=5pB%XN`-Y9OWDNS)G8%O+^RMed5La+NHVNGxAMi_T>ayz#xCJSd*6|R|a6i^Wvw1H83_#p!6-&n(nXp{R9#+;87 zLQ+EaU92k>!%{$D)p@}t_cajwnrnh@oSL2-PL0fX29bijR5n9lLl~Ph!Ezn^)j9Em zw*dV=r}V$gshNpxJg*pz=vV@7-@>9ree$P)4;jOT1+-WX(yB9NNE*!i4=1+raJTx9 zB&GNnR;#6T9>!pIZ5c!1R(lXf)9z#NAP(Yc3CV)L9LKRDu1kY&y3NMl#L2$yupXej zuw9K^X0wVuQvnO8j;$v+a=sM2$y|flyLDs_mZelHb@D2A3cNiVXjt61d zR_HtDV_V%=c-hG0Oxs2EXe<|U4~IkJk&*DMd3a_5dEoS;9mK zFFjN!*Fc+#suEsdbG}$+s93HR!toYe<`kYHE|rcnq^BNaUo_s;KiJlMU5P|*tiOApcL4rL#Ns`vD0~+|13F@_H~F5-?v1;ZajFDR0n!cr z4@V2be{i%*#EU*c8JkX}K$E%RV;KMS1%>}8U^WDnUA~I-<_Y=2TtXZ~ER*0C@h7|@ zp*SY3h1oFyaicAYR1-#(}Ss}m)hK#CnF+Qe7 z3B?#Ivkb@OF$zb6#ftZOLnYuiJZ=OZ(z&NDoDm9&z&T<`(FKlFZVOjVl)qaC0QeDq ze{Kxu|3z8%8qT-T4Ck9V4B~uOHC%5~!}Y%LjnBsVkN>`{}^@<_lmQn>n;Q)hau-Bm~%E47c#G~E|2LG{_ zL2hY1tJB+>=!ATr(6Ub>I`*R`)=q7eFM-kJ9_ge#^2a87m*iT37eFU8LwJ%~@ z+9Q9MIrKiD|CfONmuP!tXXa2Qn;Or}WZF3TX>1Qykt$wKpoRK>tqsc>!%m};`k?Po6$Z>KW_6IpWd{7vOTH>Yg zbg94syw3%?0L?%$zx4wySmp?5(b>9yBnBJ-Ian+TM02u!sZe*2En0DEEijiq(6SuO zY}v5#i)0wWsA&|j#17C6A@I(vE?ce)fgTwjlkt_Pli(-_V%e%%T}F1X=0-&1KN`~K z&_c+Uek*^3z6q2spPZ2M1L?eg(cfsNoQHK2&?qi->uQ>eOmBH1u8KcUc5?N=E%sH zmYV9b{L`wb?}$6NqKQc26-&U!jNv)SFv)?FH7c+xDX^c_N%XsMd33@z7a==d`i6|j zbkJd&NAvN#rLq_X#@sB^Cz8)8gkX46Mi&o{!rB1_so|GzJ|8tDI3MgMZKK)8LT!1ob5TX|Un z>@jaSMOR{z>-OOHY8Prf_bR{(||WRcXeg1SRP((<2Aq zZ7L&1Wa!`qWX6mryEEGnJ;LJVmFI?Z%J60vK#tOhR}afkcX$zkPvxjU;Md?&fMs?H z&$qCql1qsz#(2wvH&hA#gq8qPBLdB!$Wl)Ai#o7V5}^p8F8DmmWT!l_T1oPkz+kj} z1MVMq^ff^LuLJ$xg7nu9M(?C@N=M5_8XZ+FDr!|BI<>I&O>1Zkp4C*di;l0I*qS;7 zJxSFpOsd%#O;j`UUrzivA_jC2V!*!7eh1s?s@cr&%=9!cZ*By~)5aeUF+lGrV(P!4 zF70~{DLB3cZ0um=nq@S6&tECJ9jpBH%|QQe0R5js`+v(x_-$U6f=aitC0w<*c4BL* z3FMKKy^1Ki4KoA2u=WSa40!0y?PFJLAKSKlj4}hpHpmQk(z)AER*q3R0Q^1Han^qP zTc!q#HBJq9>)F6E{T<6M-Yx1kC}JCPj_I$Jt(_p+$=yhyRZ!GuUiwax}L$4KiYv*;y(s8iRk@{(tK+@<-YPKl; zL>v4i|A5>P>lKR*Mv~FJFcH}we^ELdMgGMfLnZUNU08e7w_WInFO_xv6}B*;a)4f0 z=3=a*Ocp_t5sWQ#y!17b;%SpUmFSTQsA!2VA;LFLmjgl$L{s*Xva;D&Q4W}gJH@D> zbvsqQF>45)faTcF|VU8sJdz-S5cJJ^f9 z%xT#w^27^Fvr*AAP>q4Z2l1>4mx}h9#QzXf;n1G~shA>b6&9833IsyJx02;b85EGE zuzzWlu7o(E6s;q(B^?1wigClRv+Vp4Z_zqk5fKOPp%a>alL2fBpHz7zd^|@ZlRffk zt<(Er;i{&NN)P5rob`ZQ@#-3B*Z zQ4tC5A!YK+RIHNAw%e9cADi58NzP!gERMcLClucX@VbDxn8WbdJRy0zZjJd;N0SkO zz{;@QK$uC;6}!Z@P9!0`fI|A{-e6$GA5jTIJ;XsJ3U7>}Ezp3|WlmALDu?T8uQLL# zQ;*<|)Hj@}Th*3Y;7q4$B7uB&4nuj!m&REDGis?od6= zS3zwkBE1-GNm|-4l^M)w>j*#R(M-SU&94QH)jEo*ks#YrWL^VwdEQwfM%^{>C|;oZ zG#=$qJj$u&qg6uzSCzEpy{oOb%JxO|AYw|5AY$rD0P%o#@XON-V|5J5+af#^L={%lqbn)4b>`KW zWq>9p*ozN`%qg)H^szpxA#+0Dr?4KgQ!yxX#LFx2o&1Z){j1d&GRMl&+9SL2vaDqo zbd^tFsjTt}*5eGr^isIHp7%XTf1Od&^PFbkfp41+yQ;2%7kF2CxAw+y}~sEvhyT^e+R zROE2-NLQ}0T`bSRciL&?)g-LAW(cnoZkQ5;+K~r%Y_Tu^Z6SsDkc^y)Y{fY}v~6Uy z06~@Y2c>jwRR&O$#B6JjpMJv!-wgEszNEh#G@QSsyuDoI(Lceco0V!nzec&@Mx%Nf zXlo!VT0pTzIqyY0=(J=y2CsUCP(3__Q`3vNbOT$2yfKo?s=+w%nW7aKS6~P#RMrrkv2IBB z5_J_xiyAE^ZLbEaYsl5@I{RY8|Nnuczq(j&a{QVl%kDdMy~rRMDu-7T0-7S#wHicSQtE2-OwW+%7SO6G1ht!#NlXj<#8K zOT?6cI=cl;H83%Hm8^x1Hy`cTAuD#^kicV{y?BeVEP-kvwSy(Ys}>Zj(TP#GH>Do? z6`=nQRsN^EKk0PP#?g3hn!AkdR6M>n+0!5Gj}IrK@pvj89ZYq1M~4Su$>d;9Vz9R_ zF%*wSd;8X7EyK@R{!Idxm<5d1R&}wos~ge4;4>$Oh65zUX2#@+2t{DJjQc1Isw`cn z0w`+n_)dI~E~0n^Rh2~L-c%P6-*qUsJL{#vGHX%=LuXt6khr8%a6mC)W+fTAjFb$| zZbH!IyS_dJ^#75%|2N)qtqY}eU??KRyx1(_LhzKYkA`XEz5sqD17BH3x%?eT*(MSp!kD+N6`l|vSo^_Z= z1`Wc7Sdk^c8Xf@ic9o7T-2#9sC#(Rlk*BCu5DZvd+Pk_Vbu=tE1-h5ftYlC5IF{2m z@5gHYn`P-^m8pCMKi^>*g9!5|a6sCM1zyH>QHYpB1IO1?V2B#*J2}-X@*GUpu(1H`etzf}(-UwKV&910(N@o1R^cHJX z^e?Z#0+j4y%jBmkt{TRSym+j08Y<(l&r~2H5sXF)+35y`Vpf0sFXbxG|38)f$4GmK zd&u;Zd2YDchJI4|SFe8K)B*Zp_8Mxv1}DS%&oZx^ARkYj$6f;jUIOu8)Jn(#3z##W zuKLe3DR_8`Xtvl8mjIGiRlK`+_vhfTiaePXRwRA>%cUm#$+B2uM{kb@*>OGoleRwB zD@KH8g(1L@T&G&Ic&X?WHDM!^C*qwyh-dwpE22oEz1a#)yIxmqq{bj_sLH8WrfvmQ7{?SQm^y zfdy?y7-U7NBjA0pgxT_F+%u3Lc^&-Q9+U`&tIvBOVi8GM*!yU2UW6?>WUPA|kSo3u znqgYX?$NQyJ;|{y8X3Z5V(fe|#~ac$cOe9g(fE*tFBF1hnv5LFWzILi8DexP?;M7} zlo_y=G6M%L%6f&A$2{n|7XbZ#x~=1kCz1WfJ4=D=6zGUn3u&kkQO3A|yd_}(FSyx~ zX_*p`;Od^vWWCr7vSkpogS5icj}i@}qbY;^aAtPW)Q0IFmW-CJqN%A^Ugb-@aNvnC zi+*x)=q*=E0u??=v}zIGF7V)`T9Cq-|FCvytA5^&ZQG9We9k9Myo>57 zzJ;)(zVUr*tNWbGN#L#TkIx|f)6anZ;~nec|7<+AZAsWb<;+f9KlFQOQr}}G=k_(O-#UU+#jU!s-zt&;u!Y1;<(_l@SHA zF7Q{TPSoW-8`VW0@KA`fF$DDG^VE$9r$`ksn>iFu-6mBgD_0v=c5?!M7Ao0PV15FaGO`ruDk<1u@gs z^6-a+n~Mn`+(C;XEYS5z8elg<4*%+PxBm;!{}+n>!2&j|0hdz#v2@zi6BSPZG8}uS zZR+6ESTa39uyKO0e3*&K1BOmypF31M+0p>9U>GPeQQ3Rrp*CkQGr(Ye7ODqlqT1Ye z_rY{Qe5?Ua`#H=|9G0%{LRW_I#cZKew~j)MDt3cz;gZY6KPy)ue|n?Nzwgkm&IJ1Z z(zE}nRP2hqU{wm_qJXnq+k(l@NB4i%d$ZwtGtQQh2oU+T0SN`WQR!B=W-zzWWs(tZbg_(@+cAOlx}pTB zlFY&q?4t(vYplmHW{_iaFdc1hvt7n0Xyha5AoQ9$B^wt)N)8OyB?W9LDS% zbqY0Ku@(I-fqrM(L7+he9+uo!GmA?nKQH|@`Q68o_~sB=dC<^F6o;^IiFd z`!5CN>+QG`aRp+Z`#84MneX|O9@cg;AB@HDmE@+L^oraV&_S_~@UJNRniZLF+}LN_ zDj&67pC6d5xuW8ND-CQ;#mk~|MVcKy>($7jyb^iSmL(hL7(@&CLd60-gVPu8y5OJw z9_asD4gV|4)+9Ab#-5_MD^+GtxTu9LN^?^z5f!B$1plT*pmV)+kaikVU{=ZeBw z#1-W~ON=3}*loE`%j*U`iU}e=ABSiWhctLsq#^ZJzi+KpX$FxGQXZ+-@tq2E@Hd0VsLxSod zO$1fw-hOuAF7CEm|3w5oixllrIASz@fWjWJ0W$;Poho;lh2MDRno6#7YjXlf zljN278U8U;$T2XvEWC<8cx4A&iL}_TYs2drzt`&RQ1)Elby^iH?R`ezeX@)V&zZqR z7(j)5o3er+8*TB1V(6Az^3((%KDan?nS(eO1kjSD5(r_Atnkt~qGrT4VP6p;dFv4f zhAf&m7Eb`J!sy@dsGENQ^#8re|M0&Eks1Qy6Mzrm8c$>8OX#Y2i@{4nzre7hDj)(5 z@BmT`JiZAFd@)H^FR$;6PADzx29gHb(+u zxgzbRFc3Giz{Ys_E8FAcZ)be!hj{=01ML5wU0@^aXr4QO;f={+(FOl6xageok%qER`(5k)k-&$;g5I|YU6bWJqqX|=V=TCeP znBv;r=Oa^0eRvhy>P+#WF_4Aht-L%q7Nz}BPpG7UOqfQ!=wR1{hdVmXM{t?n5&d0F zQNVv#r7FV3j6PVl^0uyJ@ZGcUK%AyL)=mVuZVoc&1xO^gl!SfAahcT*b&1OQ}cHRw2kJYz+*sr+croTPX-H>2vbj zJVFjTBA|)}f{%L-Qm&@Uk*UQdpQ|ypt^rLZf?1)dK6>%XU8zO2Y73LJpoRaiWb{!?{M-n%Gz3GoV_AS_!od$aT|-9?pEjl{azar?rYzqM<$(qXjbPuQw-= z;42Q?^$a!l2Y$&vlKpHA=>H%%|A&0>-~TftXz37P@)Tp~?E!(Xs z1g-R{T^ueycWrG;0vk>Md3f~D;c+gbRQ!%mDjv3T`}h^x$G2@CCzOiu4NxkM80W&* z;{;3re~)*ZHHLpnkcx5j&`00&=3$`!cDet3pcVK0fSfmnxtt|}R-CIJQs06jW_)UL z>`=SLd~)85BgZuN-snuV8UKxs3IBh=gR?b{&6D48{wILAX9E2%N76RwPLEo@GsnKh@$m5G08-CI#xBw+pq3z%sxvc##BcXmw^t zdiHsz`LQQcn zPv8$;W6cfZEu1)lB5+{ji;k*Vh7||`rJM0N&;RcSW*2@Z1J)klXoGd<3VI2dN*QCo zur?4!ZJ-&qXdktU5t=3SGd+1zjsp|I>S*5S8C-|W_3d}nI1`JZkS9@wC*3Ku{;EOaNJu_tMG0=(;MsCL@uX97lb)XbRdjK zpqqtJlre(1LmY^$-ygKIF_f%!y(`N*S!)rFw^C@+5X+KH|0Xb=%nx(twX zIlqZ?dC17AI9cHDKSFOP7mM6T_1uTd7=du9Pm^6T8YmamumTReT!8eB;XM zGNGAzsuMSpP_7aoLlhfO(6N>w;HiY2R!6r5oo%5?k>c>Bs3=D-(n5bJBnj)0O%6Qk z|NI8%e~wrGhg>%*-3Z^SMoeWjQsNgyO+NJSR>j$(jt@L)#VHmILXsszFj%tAvQ;fhC%5e&ZQF-8*|z7Lc`At^GA~{G4jLl{em0Gb^?iGV@)_sS6C=JAnKxF9*1BoS=Ica09%4BnO_t!bYjIG$QTYW zy3UoA6|YyU>evN;1tSntqo$Dz>vk6n_UE-YU4aeZ-A5a3jAthbKLYwc4EBHbChvc^ z^W?4_qFwulCcE}wmz;bI?Am>AStF?A-T#@u#`>;JWU{%|x2isvbFhcda$r*)jH)z! zI{?xy49{fCMPmn^rgin5L}{;fG7X{k<`E15=D?xTctX8>cv$v!cXjt*IY3eKt>oeWbjYz4R`+;(EmK3|8Yrw>~f=?PS=v?p*L5qo!A;L0CP#k+)0f2$R>>W z@as=IC@QAxLu+gJ`W4j&;Kd?`Mf5{a%O8B(H(m$y zKVRy9=>8NyBlLtcGe!)(HUa7}6sbNRaP#uTb;uk~qxU+6m8*@=l7s#;E&_!{efl^8 zZ6;Fbh;fu)$M9aHzCOMtO@bhxTIFw3Gi|Bb8mM;|1LxyB6 zT8s=Xp^PqvsxT((lTDsr-z-GwpLdRlqQ1FoCY=koAYnWTqzS*q-w9+3wcR2dk*!|m z*2hfu3kDy{h;@obIuo&2cQh7{#uC9`2=5y+78{DihhnkdN#yI378-ke{bT>;vq1lc z1O2N=|Bc@;xalKleSmk*pYYtH?d~zyv~t5=OB?=zCL8{dH{AO@*zkLH+?_!Eaq4>? z#>V=FA5&Ek+Wgb;AhqE|Poaa6k-)hmEYt@hrYvVbx0sP&X+Tua2u&=;rE101PoSOn zN*+?(?_im<5$P3B!Mkwr;bg%PSw@kx$nW0#vvYy|j{yDe$7KH#l{@@znAZ$K2RXEs z%6HsuSIVtgH8AveiK9|C+68hQ<6VhFcO>rTNcgaM`@zA%`u2nCw~qzdH)|bj*nM=p z{u7CauHs?uu~^gAv983xRnR~m5j~O^*tFrL`6~O1X6!fa{~^%-k+AzrA-8&EKn;rc2=drE69}iK0;1>RLTueRSmRZ8!bS+?CfT}h~ z@0K}92;ar!T?|n{h*7{PKCnqzID^kg*dq}rB(rf4Qw~uA)ln(ajqli#p1@kr#|3`L zo#xo&XokOouizImbs#m7&6tPN6I!u>S@W>WvzXlkbaEJR0uYPlaM3wp=gO7b z%HsDgcriL8i0_?R)pAM&+wJr3Y@0@+7| zBGX5cQ>h82L}pV=!|=%&BM?1I^9zu9N$PTxP-68io)f)OeUQ_%r5QtL-(*HoTcAdX$u>Z^mphk%sIYWO zDswdb!e0UXA1&#h0d|>Pcg1+$sMl;vGqI#CP+9E1O?IzOhlhV4Ih_`7YxKmXkZKIy zlUzVV51cP`8m2E)Ud0ayj1@ws7XhX8T0K%kU>{h)E>U}nc)yGKsBBUcbuzG~T}g#J zpaJ~~x~SyP)LzJ2m4e~LXY<`pbSGfD(Ni{0r7oc3(AO_t2KrwJ`rl1t|I2fwZZ%ec z?gi>2+2XuQ9wCw+#UzWs^aRd}l}C7J7(OqNbarazuS=OF#(dE}=FB-or%KK{4OE@4 zoD|F9p~JL@_rf?YQM>@Qd{R!tH-?XMK)EA z{qsKs&FYq~T#IdW&1#;=CHBZ$ruX9g?;?f&*M=7^kaM!$hOAFOsZTgjzNaKv$~{ce zzKGv1O`C0zw(Jr{H!u(7di(0K$1Q;=$)*)ec{^%3MJ|^}$?>Ivm#yx~gmS8*8p!PS zlB`iWu<4*+SFsqT%8oMq*-`90_Y&GSk(@0-l~AvY@|>cw1J?&#G z-M9o8|D(Hp`fZ^9Vqf(^N>L#ieFRecBw!MD|^na|RKXhajmYkBtCRm9F2Grtv={xF5 zz7qF{pIIaF0OZ4gumD7GZbZdqx#Ad*12PDd09kT^0233Se$VprlrnSe&Zoa&18%yN^)qEf} zy@^xX#Y6I|AmoHXMG^=dflcofH%0oxY8f9ipAPiDSk?a)i2WMSCkM(o7(M3PZVLpo z3Xo~JO!0Bhr>rLIF%61L^n-gvLtF(=Ey@R}$+A@ob7gqU^zH~6x>Q`Wn3gCJBbGw0 z+J>5T&gE_zze;8;;fgGkx zwxzduka7VKr*Hy)*;D^3BE4bh+6Me@R9C<@@9B29$W5F{Q!rm5=l z-daZtLPlm28)bak6hP=P|@GksQXg2aI za1d9>A&WDjX(OPRd{h62p6~&n|0Qt$TS5AJnY}tBp1}7|=p0(Syu4e&1#wQyj)FYk z&YH)fBS0AI2!W1Bw89+UYSnB#Qd42URf8eBy;a}{Tj6;Go!Y|cK~(QzTE!$SBkm*jX?nkmU$$SXpf++uXkyTFW!{KkLWm^N7{X-SE-!Zg@T2 z4KHkRH{8*45@9D29bZH**y1PQn)uyY(f)I(-2d>bephsb3A*h+-rZ32)ah0$ore6) z;Zl<5k_L?^T66tT&2+le)xe~6o^wiA@KmOQ$biWT^hL*9Ak7QInC%J)4pBW7e)4L3 z8dQ6|%M2kvK`Rybg*!VSSNk#z^ zVhDgzIQlIKckk8Y5NqMn#CU3TWf1Fu(Y(9Y$F@4xuVu2itz|o4_I+Ck zD4b2~Wge?!61u#G@FH#ab4oBNx&5?~XFU3*BGCUbp#MFj|NW0A(i+ouZ7t8_BFP0w z;)2IC;ezY!u%{eDS$OQDS72M63!awDCMObYjY5n?MFe0^p+k{_;fP6{($D_L z0IQNWG0VvI{Oy=!mTgvPW1H;_6(jD=eiPTS3h%YZA;t(>?k>T z4{`Ein{aaX{*&d7b2@gtbL~qg(AGZmZEUQw@{5uaO#*Db`p>@vxqto>TEzeFI8U)Q zhH_nbrD2Sf7jQvL_@K*7;rU0#8{itkQ=rmZ%QnWvyW+-H!tfCZ`^-tvSpSXS26P-$ z-(#_emz5(h7_{Kx)_AYTLypo5st6d}i0$GyB{RNma0s`F`Pu{nJh%-G+1Cs|2(*kf zZW-*5X5Z+&ElmGEUibNb1o~eN^uGk@U%woBL5sPyQ_UD@vy20rDY<%>xccHIT;2PW zlhsU%{vW}$Z7EEVmaQ`$8;bP~#kvC#gYh7{ za_dBYVyJfz{tGmR&reTWp-NDBXy4kYt#SykoaELK;?~D8D985+l;gae+b6ErKCx~4 z1c7o)Yyiq}%y=ApJwZSm@b^T=S>yP(1m&1$h=P!RzC|~-mp^5<1mSp`z6<_QtZtis z{^G^k{|@@S(v$xlDgyV+E;~d3IBtScoJ~)_+q@sACvP%m1tAabOONi$O--jKr_eEbiItgE7bEwvNpWZl@%Zx+6x#?79W-L3)AMHtx20obCyEip0KhvKcP7d!&p_>tY zo|xocXXRI8!@0eaGZP~@7+{7UV^09ZL?bG<{wv}<@I*O`1y!ybW#v-Fj(qD>aypx) zh#GX%lPx5N)*kUJ`ynV`AgBBa;=9r5$(bp0&mr>;nNABMr*|J$c9lEjdy<)9T;fz_ zcs4>=$cJxAXZM-YlVf8uQ?sJSeaQm|RoVD;lhY$`&D;2O9q;%Eu+#aS`uSh?`dR6= z#b}8;8iY$gYwu?f3&XAM6wmsju?XCO(Ke)_N$VIEttp*#awbb5H=SgAr3e`%Fb?|z z+R#)4FB8E=vJp(TT&dmql9`oi)N!EAu1HO1xr_CM>brKn^=6=dNa6pg>zmiHu^mPmc)`w80nRxB=PDVL3o-wL{1WF{pv#LUqut)A8`c~62{SbG=U zt;k4(C%f=hX;8x6JK<$WEWC5MGOh_7vlS1T^tVP^h$G$uckA}aawbX za^iRZel$uLGG?)yKjLyZ(&}Q()p&xw3DZBcoPu)e(Vj~P2t%MZUY2(>pQh-&YRMk+ zhs(-9|EnbZTU$c%)LCrQ!I5K>LutVuW1u_d$-^&7CHVKFI=^t5o=;w`C5cSh_b$B7 zonICB-jV~mg2y0RmWfkT1{L*W>o-$Xk&-;6=uHZC3o}3$t+J)^H(Z>Y2E`a(T%EX7 z_RW?^kY+cD7vaQ%@uP-#;OTl=J#o6ajPdYAD31^>%Bn+7u!RLI*;Tb+57(BKtja2) zJ@~$b}C&Ub8}|JB<%&Y=1~>s3w@L)YDao8EbTExk*fj|#>~tG?tvDAB8{K$xRtaL~cAaJ(>bdJe5gJA3(H*W`7=RzT%fa|44KD zPsc;#eV|d#x4NJL!%{^|`O{(VN2+-PSL$)Qg7I`{&y)fQ`!b9Y^6pXBdTej z%Fq~ff_9U&h4_`aoJ23Zng3p9Z*3}I-Znbl_;n}I8EtW{{w7o zZ}P)i#9jMgo z7&3Pp+i@q(_l_M-0ex$D5mh-{%ft4F-y zA72Lak4gIL+r!*p!BAjaJLcfugb90uO(fUhU-J8I_&$$AHrwB#{-tQVSsRQdFa#Pw zyF1B0ggdBTq)GRze50J_y8Czwds!dBrex*DD?&tRM6_P`9{H?qa&^zgf&Ou&|D6sZ zHl9=agym_}js5hHyV+nh7KoU=bzC3^u^~5{KDKB)(yb{wZ@u>&D?tAQ(4XqRG;*X| z_}%4=FB0{C@Ma=!HGAn+b4in1%{gzp_az-h$92o^L06yoT?A*iM8DL0jI8H5hGJ`B z2;NxEmzNm5r;vbMX^gS267K}~f(o>X@CDxlk$BmPKNV|L(%p z0``Ebr&Uf}mP`P}qGoNRV(obAz;qSg@DEET%&aM#8h&Sn`lGo6Y9$Q(unRecnE8j@ zgEs*EyW##nj|-0efq=*0PNQx)bq@i&RXsp(*@0JQQd7z4WOfp(omO%%PlRl5304W0 zGCH>rn37wq6=a@x#2bTe!K$`f&AD);v%|6l`Fq5(hW-q$mfq*4K`)z(SKCnM+`e{l zi~I~5MDDFo+FO@4*;^OB@)RPUBp2>3Q4Qw*_&qjOo9mI|Z#)I`?~(E!Hrv1NNlgsz z8&6K}Z)apUxQDBlPuUYg!$s77vrX?S4IftkaI3>mRHQ%YEJ$Lv}dasd7fNRF4ge5_n~WgSKZM{>%&pqbzkl_yK>uFY|HqL2og1K!t#c3^Z}HWg8{w6$`>t01#M*vW++-kP zO6>^sboKWjx<`2PXu!=Vr$yGB`44L+x47wGS4)Yok0gTGL?S%4dh!ccZ|vY5AP{Q* zc-<3${(UO`JNAtyuGOn3R+X^NmL=rTC!#WowYJZS{=3+JspMj z$}h<5#yfp()yPiD-okY@L=LEyMnq2j@xkV@b>BnP)lTSjYJaftP!3Da{XqW{Nb-oOlPK6afC+ZP zO*h<%mtXvDi#V0)YNVmVbeO8$Jqm*BtQ8VK|h zEd8SapnH%O2~uC-YXb`c;i1N-7^s_-GQyMx+7EP5i3;t5h*(!|E%E*)<4Z7Vqg|BZy#XDkaor zWiFz~r4`GYcjdsj`P*$g3FhEmE>Mf=YlE1mS34 zMiQ$;yoJtLN=Lw%Q3w+bhcL-Z8nymjilCxm2C_ZFGO?`VSTe#J#1+k|mxvn0>n}4u zC>B}?Vprfb2~(8=lY4r4G6eL$R-OMCXqp>I?U@~cyij-SSac5>ohJSeP3Pz1en#6VwOw;X$?@Q5g(90%A1 zykJK)Ht=(RBsfQs4k7Q9*@$9adH*EPf0v@a7nX$v6hh7_S zNl9E0M-W&;q~Fvb8f{sT1^8MpX;5qh#BOWCOr7aUG=Lih1D6&+S2RQfteE26ImPEn)daCaUdK8d3Ycd0qjLp;fU9>^~O{jZbsZ!~G9 z9;j1`$kt}HvMK^%cx3c4p3DNQtyx>9nt=3F(ZL`Z7y-S~t{%lw{S1=IOm;wFVmNH)s$1U^oPF12A@G5Idfh&{a3HoVnEpgcnp1v8v zZRm#aq#yu4CUz5U&^0uCoKAJuJGlA$5*$-+aHO-f{;;W&>-que-y<#>z-cgiSfa{@ zdaz$XfulY8!dEZ966k-uq(6tL)=f-ELF$$S9tG-pXEMq!7cU_&0M-X03YJBkhTcA3 ze}}uG<@#GuZXaB6A<%G^?Fg`@>XCcIS=Js@w~;6de@vEz!vw~&TrL-lIr=mru?Rd4 z62e{ZAlw2fARmfLj8!j|SfHO+obaXh3sNpCBTO;U-MdHOZ}KjMzy=t^8t>b0Xb+n- zD5Ww9&r@G-q_?{dzw7?lSKkWs->vpPOlukQ(47TqZnbK6g-MS!8m$iLunO9ZqSbM= zWqwHD zX)yhAAl2Xkvf71EGX_hmA+x`4-C_0A59@RdgB?Y39ORW)cPPCN+)$R_{$E+u)`SML z5y^V{Ps@nvzY^n_ecdY&|7(xJf0W}(^!4-(_K6V&@f=By77j6Ba}Z|B#K|Ljk|ros zp!rti9nDtIn;-!S&OF6#R~zxXur}~kgx$ddl;|ZCCk!K@3#8CzK|gjyjtmBYVrqgb zoo{p()39ZvM5Rm=x&PsQQE}!#UPRFLfLqmptxoVk@D%7FRrwgBQu$o*6xtf>p7jlu zh?sxoiilX5f+Mpw*mcO6FkYGFlt^nCGDFMrE@d<1@98(>)C}4bV2G)F46wIwM-j*yp-E>Y(1w};O({ms&tN2=% zcdm#+W)+FC-j4F zqs$OE8C)U8*SKBTfE7_HHpY`n_Z5F9wI~i6$7~akPNer@NhhQrUKf8OH-c3{hV$Uz zXyH^XIltoM8_XRac{0}j9g+0M>ao57_-kt8Wm+2pzrh=X4p3KTl@$bnE~H6PoPxaX zX~+~!FBwXL$qP!znJklKly*I>fu(M7__#0}t;-mZ=HwPHAu24qUkKneENZ~ zq3E@Yj7A$ThcJp=`G0yuasud|lJqBndZ1DSM^(RAxu!i58lF~<*qgiIo2|p(-vYDo zSfKdQI%m0mYz+w6cx=QeA&;RAStNd0T_?lR&f>6dxk1;6`NxetNo9tD*JZw(h65Li z3D46cf#MnXOB!1z>bykKI_y`5CmOh{^2M54wHp;EF&b}X0cmP~=!?$PK>xjx{so2` zDiHm%jLc4N zXQfo+n{S3!h^#4c#L9*s-ri+oh->66OZe%6`U(L*nvCV&NU!!*H4y*OENG;SU=oa5 zK~+uohL5u~yzb9&dClMapX2S0`7>wyGvdFDt{eX!oI|NFCrN)?1IP8xLA1yrE9IQR zuKoy1ekNjWvFuiN#RmtvdgEQ7m&5Q<+(aa>2Eo~P}664WkVGj9%wfnL!$|0w$pE>WYNlgm!VSwJ^@isiYcJxhM~_&d=O7upUUM2&jxX?ryo2(zvk zy1g(?nU2z3@!sB^zW#{(u!@36e$_J&PxM9DQHEbuc$|eC_bi&l)We{e7mEI`cisEt z7|{O)b^n9rUWa_!3ij7QoodB~0s4=t`#*u}3j?Jwn#ywj;V#nyFBT!v z^a6IJ(QDzF8ms%RRIVCulE5|AaTn!K$i_mxWOS>ty_SMJ)T53p7sNe>`M#+KX!Fc` zu66quT=qqL4}C6OQ}hKs=u{2%pyOe#ri#b|GCFf=?M?IXSKsPW9jvXYCHACH(^tKGd&KgSYuu8cK>()prWS` zLQ4iD`-*KJK@3j^FF728GZoEgv(K5 zaqfX=ED?=$n~B6wq8rP9`(yR{nmqch>CgTi=syYcKY~k(UG+!f@o20si065l%YHw8 zer;__!~<@Sd^ApcbVU<2z7zX18@;OBpfO?5sBBLHhIJDJO*hPTK^T2GDe zWGR$H9^4TY5*1<6a&2_?w5rXuT2)>Su2b;IXAXYvy+Hpdp#O_;NrHSc5bGVNt5mJ` z6N?RX4-Rz?1mRq}`!`*zdXo(E=y%?=6&eB2CA&-zyIk3XT{>4zo!xOx$MCz?UXHru zEuWjl#yZ3FfhutzHJ#06pV-z|G=}kd3Kgmmv|Z+^w@0dF_#1df`!+1Oh5QGwV#G^) z4JcGS@ICtYc8pwLg>i1x5WUI^jIYJ(9{P5~|GQD)|CH#6#`o7HRI&bw;blV4&B~q_ zTu4OGvXfEANZc$V5dE>gr~o+Q__Ox^gK}o}WJ)acy+KRm+vb5zhjREoNsmd9P9$$pJ$OHz5sD4Krv> z_ds#u=WR?cAzZ)(yJ}bz%`E!Bt>}Lm_1a($>R~D~I6rU5JjXqbEO;Y!2zuH`_x;b0 z??nG^M(%%-BNb<1k@VK0Jzq6L^ce;VmMaCDDo!jy1MwSn8RmLVr3LQXDrk|O;?m1~ zV0Rd^iTy_mv5wjWMJ}wIc8F6dxzOF5Eu&(|Fyd7?HX~uy`aSm+O;k-1iwFr}X!c>e=+@kr!B8^ z`%~6VY)vkJppimqiiA|CiI9ryxaWCPfw>#?hviRuRxz`$O;TCLI9+^r6ZlPKXefhP6mwp%Me-rHgIoki#MOTF)E!!2RTyV{)ILU*lM3?uYW_8xw z7NF!DIy63xrn5tb@TV>l(|S!+b&9*xjMu6|l`lZ%6^V!RfNAjhBBA*tmWZI~Bi0?T zdYmS+hq9bq`IFn*Co%AhWVZ~l+tp3jt^3N8k3vMPCq0~s=X^MiZFP2ANgkkDd&WdaT;+R zUtUEc%3cj49l+e8a-jsWQC=XjFWJJ>&zAxB%#X2;~0( zq(5-z6S~$;9oRx4MrPEjC8K7EQ6o(lwfCX-qONr9EuTb2edY%bVOyP1Pu@5)nQc!x zi?OIfjCvBTk{fH~s*XF;$Wcc^OJ_j3BtSC|VxaPKC0Y?MC$hM(J^`yKUKP`<=X%jf zl_Bs;5hJn?@#+DI>bic9kN8F<2E}Eg6!x2M!-Zn#> zSY|LYoK7P*bL!7<836@~S3eQ`79U0Wb+PevqQy#^CamO+;EBy1jG%KxpSmky1BD@SmNZDqB!Q9f^VuBc8SlU7*DI!$o=o8URTG+p553mMPp0W>;1*UH}tB(I`uC^M(gi zMeW%JO34N;j@+TD@v97QCyk)+Id4dumm!j4U@1yfhw5H)*sll>FemX)Tb*vkm6!vuA>xjRej@%}X^gF2 z{mM(rR>eW|)Ah?dCWx_Ok?u%uq(8iF;l<7sdwylUlOBMd?aqk!1pi%V*KgKzq?c-D zjE7yYc518J3HGNHAqTF1+gs57Hw*j!5lDX$DP6B>vei$V_zqrT5--Oa=taN(D{QN8 z^}o1rCOM5ox!N9^=^fV8QzMToZ0$-_#@gHFDxxJwzidQqZ?3KwM;2<;O4iCXLJm{7 zVA1Lx^n{(}3k07cTU=(K8?(S4(s%zm(Emvi|M#2|HxUb5(}V>c^wH;j6ssn8y#L9- z0_K0ku&vGle@CUGh9}3zo7SA&U~H;lyjW?mgp%m z6qgDS0nbU{RSrV|8bT0z`X5L(+jT|gUzDj6sj%M5{!J)%q zp0z|Xkn2lNH!7}qL>DR#ltf?Gi2l($LLYkB7c_Fj3z{fb={`1( zfE>mY#nm9ngoJnK6tv{k@8n`fsyZ4T5KKCU;GS?PT+Y+>J;y$FTYJ)D6WDnRWvq1< z7@d69I0VdQxkm&<4}Hh6pZfEwL*|ZQ@x%_JaqTTST6sd(;@N*)XGFji@vkz;U*xH4 z08H8#VV5NHoO=g62bbU_aa~LnmViNE={fZWJ{iHw$p|9xIKGeIIcK?61Rd$jp8@@E zk@WX9!dw*ssn{!pk?$AMZN>>w9IelTzOuMmm7^Mzq|&-i;|11)t<2H^jez)MV99WSwInjv;H33V z-$>!@oyLggFBtM8UTV$wgYjerk4PT%7-_;dCM{PDvBGfKv}8P?XZu3=#MR%x^m4ht zs)%Wz7UXiRvS3H~9Z{UhY=o!HJOqDXh4TXDZlY^a#6Ds}X=tDx3SIsjHEnYB=*;@> z7@a#-USPye`g5Ex$T!bXnJggK|yH%aVuFM*hVXoK(`2eKe9Y{wdm8N1ZU!m0oP=^R@Fh0d8-<;(iwDy=> zJ^#N(E*MfS6xY6Z80en|`hQQ@f2UJZ$@H|DP3{?^%@4n)l38=_%)~I(m()HQo1B~y zzm6q`Q`(PS>()YA@w;eH|7bBRym=qmJ?h+tt)1Gcq6(U?yhj}*r8(9_X+CrJQy+;{ z`|iCvcMoXIp`UyZ8|zy0o2fL4T)cJ$udeX}C!FE{0LdM0z+RwA*Q{U_&{%b+* ze`!*o%f8F(h?~c=oml?Dc}=3kwotPVJCWly^e37Y?<1H!=pN@~);(eH6ZEC-{jNxH zgWLHk{Qat{l++Pn-S|*c%e4uZetZEftoW-j33D>pcf}J7_{3d-tOx#;s8;rhFx^-S zIH0PAVpy_|RSkLq&06x+Fur7PbgUScJfhK*g*f%r3gM>^h>%|Wn!h$*0ra;O{)>88 zJ-{zefb43lK)l8yFiJ4Vb;p1{W3KW`?6XLT0wT->X2vKGo;?J`7qNAEB17Q;5!1)z zVK#EpXBcJ@W}IW;7RuLDxP#Z?fh!f5HFw`??lOaQjSeTUmeie{I~$dDk`vi|YsBol zyvxGeoEZI>KRuNN)qx&--IqW8TCD#uzpdkp%Sirj{Q9;F8F^Keuy=h`)|YMVzwb0r zS35Tz^TgZRm(d{f<$-aC4vct{1LM5EKCwcf9)F33w%8An*j7I;-a9p!;cCxq{*hj> zyFT#8TY>%yu>Ze>{SO(k=a5^Q!&IR()|^L|S(7gq(ZpSaO~1NC0$^-%IEjunY8JsZ z{~JO+lmYFmudSWj;^F}{Bq5(jgiJIc+=Qc`Hya?T!1K)ozw$%ywsdOeclSz%7 zhJ-M^C*kEBUbGSX4m85*q5x~s(!!94sn?wU4WR!b?EkCS{*S^M^OZsZIVz$+Gto2R zmLrB!^&R+HimZeFX)*^$jgu?lfH>Ala4(jN1=o;+k)8@c;f#rq!lVbaM|0| zPHc^EzzLFx4igh~H({bj-+IpxV4__e7gMh5cQNLR^k(Xv6;& ze>c$I0s0rc_>Ye5Q|037-b#5X3))9$w{dfjyfZF)Y_D=N(H{f#-Z^8`S5j1l%$g2pfOB z5UQx5*BC z%;%qmjp?vd_+Zv6UwL>L_B}=w$+pKyVbB{I>&+EEgd-$9 zlA6e-_oh=L7(~}evtk{w(=c$RWF04unF*3goAr=+2Yt0(4`^Z4zNa}-gJp7LZ1jE0 z9b%k+CtR4l2ktZsZ^6ZoGnp|1`Z?Ge8^nKy(^LCkfjaZfGN@Xe_)$8OnSqanM-KfP z(0@tNzteHunrM=l*>eMhJAfvSAZ_%j0J-E6jVBN0ZiEigsZ4GvHJ#fxIWsNFG~$Ht z>zSz$xE3`1dU$eTB1JaC<~;yG^>*TG7*&8%H0^7YB#;mMf^w380+r(Wa-GZXaDoor;% zSlDws@O9L71rnac{yr{u$*_Pfu_`Lud7%ga)vw8pWg=>mMF~2Fts`=YqD!93aJh2+ z((};&TT=KBC@=-UDiv8OaEb>dpGljJ91M3XMk7C^g^)RGwUYP^?P-jI;LVoP)s|{* zRYN%`mghhT7@kf6ukf0v%3*N8)2)FSN&8&7p8f7}fy2T!Nefs5al=`sFsRg+0OVC5 ziy9rQLc!spXT??1SI;an1I%f7)yxcI&#Fuui;(p#V9vxj3THO0CWc*-e5JdP#HcU? zc!h9JDoF+xC`*(ar4+VcH5DyKXT_?N*o|J{fKk5X)xV1g30z`T7Y}|iJP-6Q1O1v5(ACekq+1nhTg+{485R*L4(nH?1Ou3RD-Dx`M^6vHXZAz2jhgiHE&>>`tKn zvfTeDYtS4^0R39&FnTk{7gNT9P{qqlQrG6G*oCNPD^T_0Py&huI6$0}Kup1CnZ>e; zd7D(dM|o-yC_xYS@vSIaC1GZ0W=E(OS}2eNIQ&vs!(JeFm{S4SgKwmAzW5QY9(~}j za6sp;c-%4tnF76dv=Gp;p%~6!FziJRZP+WCVtlyo3`Hxf(y^1JrZvcS;s$QWjv6Nm)uHzcR`;yb4 zcwzv~J+W|XLJG*pi0PwV(Efwtz)tY(GOw6iqYlV1%XKIrnV_r}N{j|=Dt5#7QXo6Z z;2H%kh=Icw5k*euI-ckk?-C7)c4?vN1vPm^VpSqBMRTDQqE@tq45MVP~0j$R1Hk{Mtm$%Uw@6w9q=AGXdq@zaE|Cre#7@+ zI#%a!%Kidr92ZHPiEO&(!_VCT^slJ;PlH`1ULVm6XfR=6Jfglfr8lgal=$7Hk3eMr ziVzTiIWMzzB)`%bjkSwJ6;QP8s4OyH)eU#q%G)Xr4flgAnkLE$5M{HzJ?zM`znsKP zf30rQCnU z-m#g?KI(dZ>QHWPdMxEn5^-F=qA{Hsn@o;C>_zXAHYs{RXFj1}9HqF{@h6K`8FIvt~cxC;0m-y_c= zyQCBk+k+D**pd&*u9o7bDt~5qA85h=$&H_kq~s^_Ui2A7-(WtAOsOx=8(zhvz6jTa znzQxNn-+9{p=N@N0>z6JS;32?vVlnERHa5pYOL4hAld<+w#m9NCVgW>4=ylAi@K9{ z2yS3z%EQ(!FWHqG2t@Q|bJm#pl#4rX2=aC2O>pr`nSye;Je=iDHAitZyKrUS`{0k9 z2lTH3{mK68RcqIp=6Lg==W(lZ(KNfBPpqwNNudG_O)7UeQttYjD0ffzs}qAAXLs!B zxC?ZCDYj)T%yxsIoQFu>^`_Ej^vVi;qI0j&89~(8;wOp%52zEXrby9av)s~ zM+h|ugxu`m2o|^~*+taRH|~J}3=}c~Ke2amI+r?_8lK6fMyMUfB=8Z3>wpf71I!`VCpsc?e?m z5~PfuwTsp=!ag#F3S%nrwU-X%E^}Xb1wV~!OtVnf&?>uFdcd1HwM?<_LReSJ%i*VeIY-W%&t~;1zN&FeBwn^gBO>)tUOWYPjcS=L0dNIE_fF-CEbcl`oJ6D?_P|Y6zAXFgmhv2aE8tBPFamQMX9OdW&S@ zBDGMoT-_xJAu`X5vGKX1;uX12#BaN^BuWV7K$ZnW$X z4hzJfJW<#~lVMh+f@&)c7VG7Rx?v584~$KEx1}?GM3^kOHVA8emQyT~l!8T}TphYM zQX-}6RBJLtL#GI;{aDb5;6Evg!e-M6Xo*rNqJ+0W+|9@ZYA)YNFXSt{iwO@@%_fhs zxKt=oc;LKWRPe3MwY>o%U9eAlr?}bB9b;3ZsStZ(y>zVFX;|(hfBVA)p#Q46|G5&# zi)tUU{G+_`g1kXeur*#EIM90CBaL15n;2Tes7ouCmk>n@$K^z?IR};qXtrF2MRATw zKoh#@V|P(D7wN1bV?hZ;OABprw9H_6#?k?~R4&-2ZY7@FyO--tm-yzdQr~MORU;dO z?PjRpvv8ujNLgwz_&69ZOA&X7_DDRaS5n+>?U#_5!YiZA!v$DOB$W zra-u4u0^cB)hd?XOY*^nziEhhq9&8&zCQBDgFyc~wso9w9noJMgW`ED?_6ORN;8@v z6iYHt;l@ft@hL51BVvkKcwCRMpQPVdY$D9nwdj2yP$9%yI;-}vY9K?m=X7DrJ?{Rs zlUt-du#@D(IpV}2hIjZK!8<%+=k^<~*nZ=-?KcvP>KZvgM`!V4)Bwer;665e4*=lG$UQt8os*<2<&4fonDalEf5 zWPI~*GGpF>TymUKpzaJ!glEmeW2pnFF_Y@@y723K(OPivKE|I6nG^Wn@bQrp{56d} z+)Rq%8XA2r;t2e1l8O%ioa|R(pDEym5*8bi0GruG2_d1?^9~rxY5SOkRZdwg;~`SFcm%yx_h~|&V%Wmm72kH{ejw|e`uU$Q>2cU1 ze9@{T6bc3!!4SI!(KW*By!hIUUVN?pMJ^RGpR?yF+X)*R0d5ecl!851TUa1MD78RV zqD9iE;+8dZ0H>?2F=wNl6tg|7k~kKX#S#unN3%1tO;Es5u&bT@DF&%oM0#7ez+q*) zu@JIGQIt1~m{jh?A>XlZ0K@tj=u;+hE!vD#^Oh8S?jq_vtbAy&IFyk#S8?ol^mEsi zmVmKtm(}bQdWJb(Cc9}Bld(%ZQm>OV<;mN5To`4d`F=^|r{P{~f9)(~0Z z^&O!l+Heh5>Bt^3Czsi=z7tD6RO|K^HfG`t6DLP$@$1C;y+-H+~EA|JM}#TYFFQ zb+zXHzqzi~9QE55?^}0Wx4MpmeoM>=qLa5@_<>lpFaF>|=L7xkZj%4~Kg^w{XBCkZ zAJ|p=zqD#~yeEHZf7J%3-46i$PXPU&N%U{AlGg)}s&%P$uYbb3*G_Knb^+HFd85kH zjcVts=;qS^-Rj=ij&nM)<9EM~;H`fC4Q#Ambw)GUTZDyvUFM?M|WFEhJjKD{~)FS&aMZfBBv{p#ME^|NjWl zU(q7Um6@aNqP1){%5q)6sz+00(6~eKNE|lL?uCTdEXF>#fHXD4JXr8;;yzlxyakJ5_ISKp! zYA^q*G4sN1kUObBJL%dcJL%k~KY3?|(b3;=_DR@C=1+UEt-g`69BK=S{6w3+|Bx@& zfzt&>QhU=A(Cses4)z2bH-~4Yr{NtGIc|zP1b!=3i6@*Cet2@i%na{Kjm%(NPJYoY z)Qa}3`f7M`d}=I3IirUsCbP5V)N~5EJdm1|IT2W5(9BNavhk$2jjo)_56P-%9~!OuF9PH&lcrErMxU~AGivx=}4SgqKctHkj0w?Wg@1w%Jhr3 zt`SpAJz|R0y2cP|#13Cr0>1N6Y?FNqW)diev7*Xul0$@J$PHScE;FP`?aAPB`eGL0 zE|SV`ivEQnS9cZjm&SeeLrEky-Ct}~>0v_#?J-5XxGfGt7tSgBn4PZ)@-r-)05L?yf@x&hV~tb#bV(h zbEd>zQtrLe_p;7*0?>IS+K52+9@GM09(2+1El4U5eNt-LBsF(6k(%f2JW-=uajNeS z`XQ!h?$V{Eg=r7D%*>v)24d>ynzEnT8%$2Ch;13Ctd|$+>xp8?D3N&UBhytEo%Lp*|NTJ! zm*FrsUUBGY16NC85YD%Fug}NQy=fTS`u;VY=F;NY{aao^Ac>^r0#Wn&Ce(b?BkucG zpyvLLeuQlr_&z>*y-v+Ll9@wrXu;iNIG0I}whk!a1)~Le3aJ#1h*@wJs8RqLA@Nv| zQP=7lQTHbU)FvA_eJZVK9I|TBlXz5nDFt}0*2bn@3G{!mJpX-IP6qN10XDKl&}XJ& zI0$G!#(1Cse%LJG85tE-Z) zW3_fF0$q08;Pr-~uc;hj{c6dq6qI>#+FoylHW@GUo{^{YB#x3fl^Pe({9WEa4gWl} ze3-hqm_p@}QSd-_PRYRt1l5>>tB1_a=}Zzad`93Oy`@~k{!i_GG0^`haQPYxg(r>8K|M(CJ=F5Cfsrc}AdhQD z*NK=ujh$)7$eD|k_O?054JmRKN#yKqB61!*MSwB8IxZosk8dOL&u(4h+&`L{9N!XX z#C9Dl;J4p9j`shj0{su;TLM@gqXJ~1IoO8}d4TWpbq|S-f@mN0?Y0Q_;eW~h4!92$ z9B_7ZZEcHSAG;+FImAQBCOq`mYwo`n70E#dkF9;*dNQ`vdFXjFGZ>(?Z*n^Ow(aMk z{r69m{lBe09te@wbI4ZF; zKEq4R2rX1mSV5VJVJ(*F6r_Q{IB4&nb^-U>N>%mhl#Z5<*#4zM3W(xP^Y)4i0gm^X zOAcrR7?tMWT^NXfkpr9!Dp#QHHQB{L??HzpmBc^*Y9tf-(O0Zhpa20v$mPEh*EDQi zd#%~qXI!nmp?B1lb2y%yQ_9KccxadC2}45%&J?=K+l8DACcOIUou?Dk%CCCsGxh1; zgNg3J-u{8^f$n&`cc6bj#ym~ldhv6B{!a(`r%C_c8a$R#)GxkeZH))grbGdeC8gc1 zB<=Pzk#-k<=j1oBT=#R=uEisB>T7$ku`cfZ60fLj7hN-h_hu>?N3{(jT+q<)KK5MD zTru$*_dlB}CCZ2aSw%|Kiz-;FoHl5n#g1yOjNv3w_n2x zO2G0iC1D+-wuoJ=>K15~ZEC-HR>xlh{htBn|6W`&SH<}npnvCUBF^N2E1;p44l8K% zN8^cTcic>L5A_bhf1MHU(_oS7_&OcMW6^jV9`SdCpJMlcj-s2tn{LwDaILYnwk3W8 z2A0f!gqVN03Gl<}m5hG8VZ-KOff~mSD-<~Y1B&J2TJ+d~7L}+ckd09;wgVA6Km-V>^AJi7g z5RJRc%q!jZBL3gAVE;b@>A(3{G$vM5^y)^vH4#y1q7rc`dn6B7!vj4y45#s6EMgAEW>pcJP1ZN`rD|x8 z7@)tRji(OzN7!TQ=NQH;_;SG)!HP%%TuG-)a2n88Pj|PW6+TeAT3aGD4j~!?p~baj zRFDY(%A_b+F9A#>^56|?<(r8fp#O7J{AY=>qC`)sbWy%cMc+W$h^+rEbJ!c*vJB*e zQCA8i+XTFKgnT+;<5J-~Lran?g1CU!X|=}N#T}A9a%~!#U40KAtG{O zT~k`e&^$I}Rb0KuEH+hpi>>ma7n377e8m(jLqeRgv}#m9VFPJ}kCe)#C{;1lpH*V( zsk@$!^&g%G=l`#8sp`d8o7<2u)z<~d$D{|w$wy26jv;dgg%0hAm^(ai<043WJeKGJ zxgG0@H2}~Dk|bTS_%$F7y`_bXEH?3m9d3S`VUJUj>4|IzW?{y{O_{5O9#0E3c#~dS z_$k_dpD*`67f1Qa+uPqGu<7J}Ezy46+ho69b<6Xvp}R}RQ((U?f9f~bR^P9mO;2R9 z$+0nWYHVh-og%UwXDV!Te@_gh$yJhIh8Vij>B4zt7ji{s4wFmiyUzMM3zknU7HLnj znd|>y?@izvtE%|%%)-p@hHcn)9>dafNJ`u3?0{t2Oeaj6lq8*nVJvBzPQ$cGY0{bL zOc@@XQmZKLxDW&pK|p0u6j2e`MHEFu#eKyE1r;~ke&?LKy!&2~HhC}pe)|8@j}C3} z-nr-8bJw$c4kM6D7xkj|TXxm%(MRw^Qk!0XPYBfH2e{ zeJrn1x>rej_rU?MdvKHw(rm`3tAFez!{PdD2eQ_EV!pa#)t#KFPkDE8>_v;h~?g6 zO&azUo)Xfu&kfABa%5(VcXr69xIu&6_$hkMIx?)z z4a(h@gF!O~gJxgE2QqkTB1eZTifYj&P8(7aVM{|^LU`S!I5yPN= zB!|_(ccrPLMGPTJ&`XwJ$;5%>EekL_>^H3bfoe&7{dN0Rfd1bv>wjtrul;nP#*y1Y z9VysG>0tlCHG3eLNW%avP!7i_*pB#d!xpVTm&!~?0zjnFdDi%cA#?B0*o6oh%n);koBnSowq z%T+x|8C_{txps%M1r%F zfAb@Nf&#-EWlOAyjx{J#KxI@gXPrn?c$eXf`}satkyWqAyNXrs&`D$5-MJPH%HoWj zp)++CEdSG%U~^j_8pMeFSi}LGv*%b7KABO%`)OvF z9j`dmb?|>U1;FOgWey+v8NN5!Gmsdj5yeQ*Y9LFDP=#<7E6uN%W=OWk;fL#dawlJ_ zhOw|KLq*9Aqu)Af9&Q+YSSd1EUoyuF`q2xpHzF_^n-c4S@#ghbG*AI*!&A#g2Gdzh zv@6N;8?XWzk7p!Sjyq=|kr~MijpXERnw9>O)4e~&`cK!J@qc{5v-8C5nf4Yr;tcs! zV0nOht_ahIH=0@ZvJU6Sqr_rjXegN&7TX`&G;Pn3P7prL#A?TnWT=GYXP~G|bp&Ey z+G@?iO0Iu6GqRn#Dx?Oo;_Nk);T6zf4;v(;pG20SaAmrw6YzElM=f@Z6%Bmgxi7sP z^#1|S{})*PNB5`<8Rh-K69-_6hxyeWKo4IR#{9Pjb;~?QJ_t+Qv44L*KC3QuFB5KWOCTPooDIgy ziJl@qW%dvr6X;4#ox`?;+i6=ka?RY>?71<|vD(S-Z{6v~4Gz6H~%B4M6Ug&-`E=0MvvnDT^WT!UvbZZ$z6wu)l5V|u7H9EtJ- zCt4t=w6LD*9#HbHIs(x+E6V4^U&F&fzv6XkZiuy0UD zbipo(Swt9uWH#c%eWmLQOP>gW{%@4|U$*BheN8>giJrTcl0(Ks{glgncG5+k;^lp4 zGcm^*A4BH0!aQQMQ*w_V;x=*o{4_y?(9)yPv73(1{V7-*VOzrsQ~~9b3AZ!ATEK`= zwwWRP4-LymXB;19xngA-S?RdpN2b^kUJJXuP6c);T}%`Fvo#z!M=99WZ*rhpIf!$3 zabe@pDCAC+oDr}Ks%GJd8#N#QXvSj0L`kE|{pq3I$AJDnDD*E5&Ukt3&g7J1I2`fU z;s@ew^5t>x6t;)*hG>&SSngymmQ}|V;bua_62nU5h61ckw?$mJsLPl^&fJLP{VO$y z(d# zP*1~fM;2&;0;v}fzaNJk0d?~hFmXFc!I7A1$Zyqn$<_#-GCPpjrKgiQmb;g-6w;*d zOn$p%!TfSyv+yzub;xC4{t>XyjC=AIE^0^o*PDd?)gtOlc=cdX0418}7P+CxzP?ls zu-G$-L4j_s#1c=P=UT!{pRv7Tgl;^ANzKY8$s0CBBsqim@Cf!-BK4wNR{6|;b zs}u0K%wvx5%Uv{#n8ni`Lqr(EnSm?^@Szlir0I;e7=A%Yv-kLrpynG3%}Lfe5%@b7i0$ zCev2J+@R|+BX|)(eh8V9E?1)a*g#UdI9EJrfroE0G$QDg@^1%{IEJ)K6{>SmK7mdV zcDZ8;#`_SZ_DBq1>*}Ht(F0B7_v(WzzQW}GRY99^70_{F!c5)RA z4UeQ5ny4u|-j4)aB-*7k!do30;t_4rF~&@%oHOWXKS6hiI$}NvNfm;|Th>mK7E-q3 zO6^o~D6y-cpEs$g>jz(LX-~+hvzXc8x!qFw1+0@?CXCysIH7#-iOqv?)c71(dZmtz zwdkRY$=WBve}JX|OKW_OV3GP7%L~^F*AD{G;?YdA-|M*z^#5U@f42Bg5K%^j+@cvs z)(Xwq0j#nZS>}{YQ5Hl?@i@;BiftUC;;wXX!`dUtCTS(AE^?M*faSEWaYKV1D12R{ zD)PfdR$q+B;+ZrD_p4j1E}P*V4qLrw@N3kT8ko(D^lYrNgp(qQWXmGgmrs+`^cc9bZq^dW(t#8nGnY4xJbm`g z+ZKTSZ;|o87I~AuO1*^pgg?qW z3MkvZ5?ihHCI=FuSpSa-IKb#GmWkXQPaUSq4cE~-I#ZM%xr9&C>wrXa3r?ZIeku-24XtPG~TL7YU`+u}Bbt!805 zWNC_%s-=ApZ!qweNS0z}hOCPHt+?Bvd-{f9S0*!GR`{3)Q@t>iYkjg30lSvs0bkf+ zxwsJms&qR=)w4(GEoF7nEO4p3oShtkML^iCWC`co zBt0~Y7_BggLmN%}fEwT4&73}?Lt%SZLCAZ_gFO6oJx$~2O z3v;ZoY^qe1tX4o#5B4KD9rWc3|mEWqDQu zV_lx{P=<;?Y-MM&YqxsVD&FI2l|i0iAuC4ETHc3;bb*7+XrxRRN3YNFF3lO?pJAOV zTn4N@jHZjvDTR^UxQkj2EF~9}TV>zKzyMH@H$`1J?4)uWyhx58I*BQ7Tf!@V3=6Q3 z(L)rWz)u1+!K`5xNxSP_>UYJW^{H#W9teZtCl^{hwg#Q z(5PkbD=8@{(Uq*bYG8>=qB#K%WlB^It%ZCiwQ}DJ(!r=^S-L>S8YnV2gfSv`$HP?B zE*w%_>_cXX!qT=peur6z@Kmq!L0y~~AJ3U(acUx_hdETt02Uw;;{(7O9~}}oJN;%Z zY$0VNdNy!}TPKF1Cg^M+`y9K z#SyXehR%<2L!*pIynD%3$z3l(-;`4VQzu`j6XV;D1^wS4?Y~q{Rj12voqa}`brY?# z${q)nQKMIYn4Cvq`Y|S<EV$9=F(yhOp6b%7}A}E z6L-!MuavX31j}b4OBQTaF?Je)MdF{>!r$+T86T>}dGm?c) zQdE7&GM|ZnoI`ZjFsF}XGNG`zi>B zywIBCOx$yLeI(AhZZp?ZrsLa}H1#1I-0K_lfrkGxiQ_TVVpf^)lb za`4!)`wF^6mX|QC=YpU<9l4oBGb@YRx7ptA27CQc@i3n!Vhn4=j_d4PDf^mEBFN)3 zyb;D8G|SJ02-3H`-)7MgRzR3&EbK|qCK}GPTw?#LPYr|qKPKzHDXQ*nlST*A9_#{|g|jo<=&){CB1?uux=dJz zQRp=rMRl&|Voywtt4V(tQ-eiTF$5Q-_SzB358OFs*-c8s}`V!qZEC9)@J}quQ zss)9&?^6lm6&O#DNbzf@biWGvze~pdiWaEYC5?LM2;$dgvSlu>)N^LNHiDTO#M3Xb zMdd@0Ng#ps^LEn(Cv6dhxhWYiD`$3FT@gW8=czoHU1K9j05T@@jqD%>osr67Nn>GK zE$&Cq%T9Q^Y`~9|*JxijjU~NeE=;N?=kLLDv?%YRie#%mo=njwViqB`n#!6ry~&{@ zBFdmEj$wiGGr#qwtloB+AqL&D^h`l!GBbK&|6m7Bedg}dLH~Ep_RPwX{ijEu-pQ4p zZr46Jkr7%)OhP3n1Lq4*`mGZS3^lKwiKJX*&bu{omKH7*Gc6Rj4$QDrSeC^~LfEW9 zR+=_q59lBB`{&@hYB1YBNsIANy94|I z#+$^>k(9Uz34ir&?aK~fs;t=zjx+OnDrfDiLDPbRL+sY+d*RDBPA+h3BzN3fEToE z=IBzCe1o6+8}x?d^@IV~)1U0wksTSd)wHr%(o<UPg5qbsJA&NlL zWJn#w7-H|&vc?JF6z#u5aE&A0R*#%;G3ftZnEwfO{^PDQ(a=yLo2BDl9qN(SvuDe3 zW+W@XbFc|H8SP~dP3&8KM-vw>yU(*S7}%27uQq%DWUeOB-D89Os!6O`wQ6Z{>GGx( z^~+Z_EKhVNmL?mQt!P-Wa#?*(+v;tv z-G&(%_y>=65dK?A_J)~l*05c^%(ramGTqzQu$1w_7+@f+i%3>MtKI6>k@Fe%CT^l(2h-k6I_cxS0p|RW z1^Q5IZiUPaVh$V}oJkzo;09nlK?gds+hqv(lY{F(>x|EV3;|R-D9D6O_|e#bAXn4u zR=*s+>~*03PlNtfdI?Y`;yV z`=E={J;`hVEs^uhDDe_BRF(*bM{6{oR`KB$4q+ikm^$SvUs?~f1jF&rx)93|ktuhT zZlMboUo`>x{|xBA$3ytpC-T~*|XH2=Cp)lpeTCtPXig1aw;^05*{}x_&+y0Fg z-u1tG8J|^Gi}O0;&0UBc>X;XK!4;Hzy7 zpZI5cdrOPP%u_yY4x-bcGzc*hhce>?zKMCl9mWkXISfZWGLY|9&RTc29J2`Ye?RE| z2Xy|cHomLb6>7KWXX*9U(^zAD{ZfDZN`C{^7QjF1S2mPgn0@-2xx8i_|CBN5R@*Rq z#K_x4BQH{7N^wF`k!PZdta(#EISKoR;BorQt24kJ=K^P41OfcNS zzKM0lI`EIJh>g%5f`djpxQ#v25e;@2TaGtC|DTuszi1HOqwldG9}H0<6A1_Pj`e{U zCm)TpwXF>_Z;;PMgUykRaG2TJ90_m4)UVBPQnJWM}rKO2+tELk&uZSp7 zQzzd>_URZ|OcVuG*#0`fh-_BlEXcZ|Q0}(7cB0szxVp40j$%Y<%B4KLq-Jz>NPxHzK^ZTHg+*hh9wP?WSt8@C(}* zLM=KDAoexgCbkb`y0IQ@(XJ5hGgm)60zH8rurJA!E9tTz2eweLYrG)CegCYchk70- zHi!yqM!?esvIV(0JTF!-WNBH=X0@()3R&c@riR5}=Xju)`m83&$;TV4Pm69d`IXTL z?5xHU60<&rrGo%c8GU&Zw+DDJ=D>snu4M)S-AfepA^2`rVl-=72}d6O z@JUC5{=XpfPk1DkjbyObI7?JO8%}Ti$=&j!%{5qh8cu5UyYZJ=mfDxfaXd3`cTF08 zYVc@aQEs|OeHXf=*+o!hfEw*e_)$FF*Nn-OfnbE%HZY1TZkE}Q0{9%nUZ2^8-QZ&p z`eb;<*G)7NmJh(MSevaG70{*3AUd2C(U1JLN@3g@ttwdze&8M7V^5}uQ*cf;(FdC> zOQNxhoycltH)F_%vKr)MxG90h+b4fqnSJevbOQTUXSH)Q%flF^7;onTZ^zGSu>RwN zX8xCnvPA0zZ`?|O9MSQ1oMzlWCJ92X@@$ylWKU*$I<+TBUL36NsR%>&6U@TYV7c8{ zSmB4S&SG0pacI;%g-9}>tRm~NT;~~&<|;0?2KDJ8;4bnFA4@V4z65%d<|4b$QN)v6 zmJ(?eEo7x%r+1n)gvc9^WeMA6@<#DVfZ=8XN)W6%EM<_UR!kVn8eldnVnFK=CGOVR4Oy`iV#cS$-9+&Vx2!r1yV?Fe4j}~wsK`!7JuO2M zFyn@)QQqqDbL9ZBPMDHeFr!ab9?wdYOV-f9s2GVN$1O*>5Omnl6NBBU?IRc$$$UfX zl)>Iq`%H3gKd!(nAbkI|e*^tLB=KLUpV+R(2BFe*=4vFzm$F(2{I?>Lko8~zV;DnE z=1DqenE+dsEx^(U&Ku3l*tJ*0Vh12#ASG}<64F2?^7WWF8XweRsb zChD@uhhyG0ZnR9g;6%nloQLJ0!1Fhpw_8{vmBEheM#x<}TT0LoG<7nRFNqM#($=M7 zC}`HEovB-w{R{N}u+YCH`c_S6#dVquFdio<(uq>ICM!M0voIOTSthdsR(XQog#IUF zS_;;p$Z2y{U^Hfy&vzx2A5L57xAW;WaKNfzNAwl7W`%0ARSUqk4M)4wpNPyY4<}=6 z8g_B_&lnqn=ART|ZUgDApdJ3RLbo9KFD?8NNIi1{!FYQ-USPc7 z#ozzP)u8`Jr2St#u9-(}_*-2<)e%HDz>Kx~_`BjSacJXjvjtD3$7xvle0mxMYm=Zs zijr_YX*~a@Eo+5+leLt_V%J%5fX`Y$lm=~ zrR$GLO0lz^++s|+HF$VtUnq<(d&u|_En$2)de!(h$)qY}yEWE(YhN4XA2Bnl`G@oRr3y`lRTo(5km`H!4|dN0us8O@bzcYl zKL+~8%GPrn&{jg<=6uwcblcgWJ)!u$r1)3~#h-cW_zykWY%;G8eY*>vRMmb(b1)o_ zMncY=OtYJl=p0P-dIyIx1Eb8sE+?X z-qjWix5g{2Im384QLS41vSA7uOumg`^D3bBbr|?--UGGERAcoAsEwjDDiMlLq zSV@UF9p#@g-gtViEZ##?gVVTYwe{;)x3{m3#Vmf>_3PW)V==vKZ>?6`TdNm(Yegbz zcE}QQ!LD^mb~!>(uyYxLn(=b97@Crzka)7_)RRe(R}MPh#&-;X{=YQaGwTAf|EQ57 z<~^bqRe6z0Am(s-l*di}2Wy2|RatA-?X+HHy}x*Z z=-rNoGRzGzt@hEh+K4!=-!=Y4IIc&nnHxW2ZhZFKIKg|zr-S$Y_rGU?-7H$|@n>R5Hy}4mQTW;G=?IO=ZP23H!z4#PGt%EV{(sI~S(*CQKqJ`%e#tM?f@HS?E zGvU-RVS_`XCu9YE40=+&AI>G=9KBsx=Vw#14BIa#E8R?2q znOoIXQ!N&>E>Ko}PTLr0>%_IJ!KY5Q8XSr>zW40E?oQDESA_mM!|Q{ay*2BWHa4yb z)URE-q9NGQ*s`jrsbTHPrS&b14S}Vr>YJC=)M8ORED-`c4fPKrG=Z{QFoav?F+#%! zE>+kMpi2>2NjVepWfv0YjOEz+K%=*&9Z`UL5L3~lUE^EU&{)eDZpm;XFsVkyXcCO3 z6hxwvkZ$;Z^0AZ)=>ERcFhc!y@D*PGU}a^-2Amm2r0p4o{PyihDkUS#X-QZmhTuAt z=;@bLqL@V=-MPtO@|+Cwt542-?6qz&ObUxCd~4a+%wEy z8`ZZbhPxBnleHq2m?bC+2F2=X)~dwqqHs%_=@7u7u|%phH~h0DOF0%`4lg_QW34FF zRHqy|?8Tqhr*bw^`gL4T?=q=(5%p;!kLd}9=%cQj>cK@WqUg=Y%JYF4)Sb-wam`5f zbR!fyv(=-oorO;*q(t@v_U{ctcjEg0w8Z}^Sl^g|t9dOZGgBoxwiwzh7-X`izQ&Qx zjg?|Tm^INVORgp-gr9YsU)C-WfMKk&iz&)nU^#9FSzn84kKl!diw_9y2Nl>NDdBuB z@?CBwPH5H$r&+^tjT^Iv#gzBT#FXUj9*!Ogdy`U1xt1b&EScP?K22>4t5IR@Gv$of z809(VQWo*r&96J;OQ8R+ndd(-zj?E)5R1Tbz;lTi3IH>gJ*#562gC*@^Xs_fp2K;H zoWA0diErDoUVAsND+q*7wvQbMAs;K6yLn|Lbu7 zf1cKVdoNqxHP2V)>P7Zq!IMvIq}E=sS6!h^iX~sJpq{n#w^h_cWi_*98+4X0`^QNe zZbz6}8pn6KVHCNaU-im$=>K^J=KrdS?0;wg5JrkC$Vjp2mJ-H;{o_kL2YSxex1I0t z9Q*Q}_^4_+_{3S|_hNBY<_OclS+M-{GW^%omCe!w?X5|;e9T~jT6)$pi-~DvxmqgO zf}*6RNn^@&Z$S47#TcZR%_S6b=ohcP?ZmIW8|%M(L*{=k^sMfk_%@+Kyo4d^n^jdk z*cuPDbj3Q?#u0_v33Ky>sw|Yem|T_}>4yKnZL5`8HFsq&YL0foB4Ib77Q9X38yumN zz_;1;7$K-M7MFp|@W@w*RxUz~F)ETMRO)fbrFv%=C06NbmIfOd)&-hY_*XPE2mB2U z!3O`T;L@f3=9Tq{lJ ze!uMDZJ_^Wh5qFinp+Xd=Y6%lG}+M5m!L;`67Xme9!E8Of`g+{;YX9FVpdPkp=Q{Ym-sg;6>h_Pl{qbLb{=X^oUxpf%|JSNvslT!5e@G3C z-Ev2NgTE2}T~@U78(8N%Sid%WCi)xD|8t=KBT)Z^a5f7c+3k3>hwVdbMOV^Rw57yW zblCSM5XYu@^#;PR`PCQkS#{_6N+=wRcZK5-#~4Y6h@D4L@?vc=x!)wD+bz_wvq{un zLK`TRZo&W{{t;mgWQKcLfSfe-YP}h}{Q55&Nl2ry6}LuQlm$%{hD4MqD20xpn{3xw z?7;jMCSqwdih(CL1I1m73uuWw?%w;dr-1&yCF(zx8Z&UQ>`4v`B+|*uNOp$J&*ZdW z`HB@QmNqr5vO#Y&z?iLDR=28bXpQNbSH|igAKB+-h`^W=!*!g7>qRAo>(O`a-{sL} zHT@FLN%b$}@lkcOKHn195?Qw?7~J5L73s~El)UJ8w0W*~C6haP6Qdklj}T$e;_7X{ zOCbz|#Hdeigx}jU?Dx95I-kBmKUa$(@I8D~`@)YqZw38-8}5H|Q2;WiV>%U4l^*`OKm_dE2`tUm51l)qVioVo zo)b(|E}*n^#}$FAK>yE+^WQqyQMRcKXj(y&=z_?yN1Qk}@NNUS(E7BwUQ` z$(+UjbJXB@0bNq0uCUr13%KQJE~L#w?;sZ98_uAmlxovaF}ifG%t?_^&zz76%}emT zl>3Hpm{{kDvtOr2&=11(uMEoX32fpIyh_QH= z`Z5DlEPRPmQvRgsu7%Id7?gV2RhJEvF&F}3 z^i0y|d3}k|bMnu}|4zZ?&k?A{51++n)zNbZf^7!l(Jk>U9gaXoJZA{}%=qX~Qs8=6 zK4X4P`$t6;trd$rSABPp5A`hv{eNGa|GA>A#Q)m?KI9lUFt^)rzk?#h7V=S7)FEKG#=-{gqI(YP& zxt+7;c2WuWPETFqj@Z}#b=OOv{~w6`Uz`_70#@}q5|zN*?1MmCE7qc0-wrp6y`ABf z;5t|_F@=iCxWRw1iVanR5T(f3BT;-_Cz!4=omT?uA_y$;9B!7eAbf@8=J)F2wJ|s% zY>aF$AEcf|33-KhFUxl7!aao-D-XnY#oI2qEwVN?0q6SG=0L1D&_Z1EI`(kzXx^Z+ zdhfhIxvEDcNt~nnCG>Q17jZ$^?;KU#0&uS3w<5s7>_-K&f`bT%nh*H6%!(x{KCTP( zbz;Z{p{?**NKRv<^g>c6J$c)qp#L8V{S#>^igbAw)_g`7aD+K$kuPc1)<`y4Q6W}* z$*)qf7GAZgkHwzxk?ge3vf2&M|Z z`^+Fe&E6tUwk%+eofq*#MxN@m@WQv5VU6X4V|!UHAXATI7Uf$EZ|+H^7b6@jjWfau zp-^gngxS+L*7AlP`R6-C7SZR(b-NK~8 ztVL1x5^FIG^(J^A24&|WdSdX0+518NKbHC5G+e1nZ!+CuhF{8_z{V8F9$QQ>Lu4$d zf>C@SI3O{*$6f-KI$@31}_|<{bW&=z)lNL zq+ZkFA?asJjZK<_G#*r#9O4E|wn_o2!p^~7|7T5bA?W|768~ivFK^pND6E>?zu3-& zY_N??kRd1@-Y3=~v?~9a>>rAJh2erakyXv8vssN=(ur9+P2EIs`ZF%F{fS|v{tWdH z7DXhOmV{=$#G}`U4_>_9TDpd}+{_mQQP$VCe(2U+9&uGD55t@TS=m`)aiK#YdYF<~ z79K2XB+KiIkFC>)Sj#N!K8;l*p#nv0wZp|A*Kf`d6QzbDgYboqjS^A(Pu9i(I+x-b z1j3;944+oJE{vo9?`J~)e43%?jH0b(xxIr5PDk9f#e?YNBvHAfX~~WgayDwLwIc6e zwKrvNl~I<;kza1-S&e}TQ7QnM1pV1095UD%ArZ;4Y%?_h5ycGCRGK0nP(5VlEU%T_ zC#LrJ=n?A{9a1QF4wlSb>TLVF6z0N9+g9V~VAV9B4QVRmUIg`L+KhI0Zl5W!&) zMhx)EdjQ({&@cY*9?<{Kh5oT^Dr!a-5L_8$vs9XcTD2`}JG*ij^g?;*KefvGCN6o1 zxVnZN1xy$UfdaxtLRL&uhJ4IU<};RFQThSsa+*H;eF-BE z-!u1$*aWN|4!$|;lo603fKdKd8$)V3++i8PF-~u6x;J!*JF=`^AM3i{b6L>;FJ%0` zt~cQ4r74J^Y`wVHsvRmNTb0|LjF2z3swR?cdeHw168{mIp!$Is zy7aL-n2#0|<)+3jU|IDB#!g#!{Nqy@ON^N<;nEKM3=9pLnE|-$`J~f>nPAv#R2R>T z09h2Y?A@IplT#!bh;9+rQC>iuKZ^CQMV6KMD8CwJgtLk+*TRcK`B3=P3u-AVXWZLL=w|{kmM2lt`2@j< zdN3_hGvQ=qAIro`%qeXN#p0oGGwgGjQ*u*Xp#NXV`H$9(u2?%f*M$hZZE@mKV+*=E zx-G!DXmSvS5Z)4Qls+AydOJG^6(4K7ZGew4T_GCO+aoPO_A>csTRNjbOF1v-k?tHX zw5bd>L}cntnl>;tEV=QEl!`~3QDMlTgGPF1YB-Z-2*9K4QOYg0Z88Pt0=|!X2S;Ig zs^=PlC0nCiNG(M+`1E>aQIT9JL3wKa1pFcsJ7#>pctqu5VrH@ZY(QH(eWhd?6#vW; zJ$O;>_gMeu*FyhgFdhiULR}YjM&iNP|0Nlqw{^X=3~ED)txhj#tHZ2Ftd5)HQ_AM0 z&yWp(?1|GD>MU0kR#Vdg7poW3NLD9HS@|>(e$k82qhjF-(Y(ryp1A|L zhlJbcG=Y6=Zu%lSTa{sOS-dZcFv&9}Jd?`XyovV(8brv;V@`cytgy9!e95B-5Wnn|HKAEU4 z*1oXV3v*;}9Ud95jM|(SHkx?V>}pFDU~XVea!|HzYy-FADwl^LQ6FDlHm> z(}s+K;hOOY00UD)9Kd>js{g_eqFoPORePaMJ#ewK3~>z{mH@EqjKCXG%jcGsMn>&O z#Mx11xa$$10y-B=j4U$$2-B_j(B^jejMF9 zp$GkfWI>M#z%kCWBoLw_)<Up!uiY00{l8?M|5a~VN}vJLbw*fLaZ}VSQ&ZFiw|m73+;dik z8A zEy@{F+?GsCd&Tdf2zuE4-#Huf|FY13F2i;sN_l~!HP$9B9 zb=`J0SN2(;#y60H<1n3Fq_k`xbAJF`NKEw;qEeADUc|x53L#3UeRQ90x^H1udBD z6ltSq3-VYk-8Z^8QB2bbSYC*u73sn=N3)alG>eR}>yfXM%9^6Fm-rgRj=a|0I%_jX zS*`1|7qYjrg$?R`-dek_#^!xq_QPXN1pWU(*8gqSbNZ(B!Dvv=)xkmeT%eJw!(%eS zC&jR$N|v7>fVjH%ns;Ae0pfdUXdQErhhi*WEr$^>a3Ki5??VkKyx6?B}&@5K7d?{Q2G2#l`tcrr5}2eZX# zH_^z1jm5O_zl|7nT@YtsUC0$~up#I=&2sx@w{5wQ<#3d;Q-;`4<=RdUvG)cM66wW1U-&N2|DS~Z@dVDVk1@O} zn3I#D2U+AuTz@z5*12adl985zZ5FGqSr73V>Mlw)H!ok^Shh^}-KOv}7-nIU#m76lr|HBr2V z!Lw|fla*ODI3==(_eQHjPQ~l%6IW@`Mwa(_uXfJB>4^XMXBqz`?UU@NL3b+~up2+f z1v=Z}B}^QeU98G18$5-94OL0X&q>wwYi5wR84;^b6A{bn&X|43M-ajGvTIq%C|Sf~ z8_Mwrl0FJFW=W4pc23g7vZLOWtx@YR8VH>cRa=tbqC7GsP=*3U@W`|U?tQacg|j`G zAu@b0KRgB;l8wn`MU=Mu)WAM$E$?Qg+ zF`Hzi^Q4Paiox$c>?luG8QklY3CGqSHrJCl`e;z`<*$xiE7RNvEf@p&NbNq$J_C9X z%}#IIv}zzLmxKb%Nw;sM%Q+_~|^yFK{t7=9dIJTMpk9qPn?b7!hxV~tPlai09- zncXE4v8E^y>yi?QSc{LFT)y2y7zAT_TQJaqDdA&!JQ|=x^vm_F!^uII5!=YExeakW;DW$jW8Y}z7q%>X6YH9J z2`Iw>UqMe$UuriCfXa^avEMl~GUX1VKS72*a4*boR!2U4f=$|S1*6gz=fj8I;Mx6d z(Es0NduBb09k-rPp|jbML8Q-_z+%thxRtK|q51CYbY@;z*avGe!Vci=+|F6RQU+yUz{}1Pxn4@o`IhrUnM<04q z2IgpU_mxfiVUG4ce;Yom&e3HE7qi?2w2u|pXL&JbpEP3nET?m4F>D`+(!;`|1P%~x z3=~?bSzzTYpg-jU{b&}TAAK62AO5Za5>A0>+~vz@`gBEFDVjdp}zsaYX9A$C?D zfnruM^cA&rI)@7EC&QmSbD1_T z5!q`Rz3gKIzv^jNqrv-e8G9s;`uZ-4N#Ncckp(9JChg(FJq`NCK(u*%AnIMZs#eEe z0?l!_+hPdKNUm?CI5v}-(4baKb~+Iaz~Ozk2Lrtak~s|>*MxfoQ*N-M1t#ZbC& z>`KIc{0FT6_j^qIuVRo+yw}*Tfp{eBt?BFSORiqMEU|3a>K?dFukM4h*6LODD_7Oj z+E%pEPnOq`M2xZ%Hld_S6B3~IE$f2y%FnXEvSrPIb?erFQmV!@Z>v6l4b)G^Zh{BOfZI9g|9+hYnplC!7-GKJre~I{n&oJS5S92g9Xp6MkKW5lH_D{os_8|L=y=8vDo;UxdbyRsi($?7?R{rjc z#v)Pnw`T2g-!z@Z`oxRa7pC8&7bevRrHUZF1{+q~^vJ7sEM|-HVkNwtKPPj|>0=dP zgE{t?6&oSOGgL`n1b22UM6VtUm^GPM12Zhs4i5!X{1Xd)XEPKNC)<(*40dwQ9W`E) zwYjCTnwNzSu`DH@IevNK=OFAHSaqR}GA1%3NB(K^02XwT_J1xVk3QDmjDl|rkFuf; zSr7w%!{bw8I5UDtOTyjLn;b}Wlc@%am{2kU?W35Hr$#;HM1go_#!8rRDQ4LS(dU{L z=EcphQmfS|BYi>Fs{;Fh^0FUaRsj=i3m7vc+IvG6k)dp~ zfA<3)Im_c&_Uv5J`R-l0C9x4yO17%5a zI9BsmKbF6_7>~kzIL=uOFIN18rKMQ_xOhk=^*SerLH(>ddj=ACV8^6uw(ih9qwM<~ zZ6~DY)7bBR*++gDVwxCZe%uGLuuh@jo;@iM99fNFGxLCKhVa(UKG-}6`k!Ui|6Ws3 zG+!ZaET=+XT-bV?jGTpIl8641O##b_Gc!m{eSM84tlhNA$RfzRi{V3xRG}Ufvd|5> z)z&6@O^(!nP_~$H0IsU`WgdI1rfC_RL2G>6V2#f0tiE_8&AqG|<|&R2b#@v z+L`{W#GD~4g;vvoEC_9SdOWwpR6N!mzPi(3BmBT16}gc{ zYH1M=H~~8g)4^rlx#W!nR-5ULJ;`1yK9*6c$(bpKK3iU-%xwJh$Buwnu#;Mf>auczvrtzR!CQD9Q;%2Y(8+H|GMx23RSXq`@k&eiMn`1)X&U1r!EHlMF=c<<_2J3#+);r{;&>R-H%Avq?EhG}T9 zHu)VF=Lf%8&`pB!g)AZMFs6z$&{)ub6xI>tQsU0Us*LoP6n*MN2)hDEtf^X06rtWg zGVu5(`0pAA<5sc$>K?{O1y6lse)Ey=Y9iRvnB5F^t|! z!>E@575_cc za*=1Dr?c})4~|b()3{e1pBKmCUE$7lj_4T*#wr%_c%(2g$k8-Y$*gyKkInaI!ij8` zPYEA^K;dl83=D8z0Xr;i?;+ox-AzE@l`M=PIXDFS1SiR3IfgC8z1icTz-j~ZKVR(s zj-WnSBR!JK(x{(mEwSxAxF#0L=&4MGX8vicjH(-5EjZzUPSF1X(Epia|1YJxQq1m6jrNk`V|K>F?OIzNy|2H^GkNwBb@nLnArY?v@!d)%Fj`;dY z+2G8`np7qw@1^}^+-pM`AVOS0r^ogTH7=D=HneU28Z=s!#-6w<{r=N^-$Z!K5#nBdr&ujSdg67a9=>I^8|Ed98BTvk=#t>CX@kCv-k3vTA$^Ut=sIMpcSE}_`*`&M{H5BH>-~ov}^l_HC%j| zsHA26o#%gU1L$8<@PCw_2EAa#D)JG1=#G=pYS`LP@6#LW3%Y*m)@?q0@8#P{bpJH1 z3E7LcV()v|%yet=wCxoAX)M-_{0m3z%+P~-7bh041_|vQ_Sl1`{tNWK5cK~t>c4{S zQc0GvVa>GrEiH>iHD)fS0#5G5-i%GSZ}rhPdY><9+p#a{0W$3t+NN+yPT`n#m5g{ZQZ zrlq@SeF)*AY;Wr=ky4zp7c3;(@W0HfWX3w<4U9UE91Zv;73pQxW|8rYV*5CoKFX-! z{3!T+L|v(UoKa2jS?-nOAvzjmyijzGBBqRLXV0=E9}4HruryHhSxe;eF7oo_bSW*F zo#kKp%Ke8w3i>}-#{Zk(6PTS_90pNojaoO!aZHDT=Iw8Y4$ql%(>zw0Wk-ud*MO#j0ScB{OMiqvP zB6SMU3wivqO{cjG8n1zKylLe`6cuWpJ6>3a4rDSztBaTcdo%2%q<5&nY6~RR8&;cB z5wB81Snmt|IZJO~rYSV6HR$K)4b1o_#bR%-k>({`f9CeP@%(?tY|pGUZ2xC+^C!6} ziYB-Ch-^{}pdvXz{0v@zv+5rxDMqIZ)__h<}FRl2kh6%H};0YEy2xW8-iOd*SAvnMM;vk$v(`D4kdvs z`$G^XQsN0F81;_IkBG>EbKvM;cV=K4)_J>oTgxv%|BHnFL+uER2~7M4o0X(H!=Vd1 z;V330-}WDn94o1j17^l%Dy1Cj2*g8yw(1j}zSq`8qQOvW7?oscu4pszEr~v19nPye zHar3PKV0a4Ov!iMdhRxTFOOIr3x%nu!B}&oW6R}?Q<}nsvt}J9bU4tq<)X6Xq{Pqi zp2hUg_E6cRqrtVEp|&zq&Y$iGgra3X+#cDe@DU2LsO`><)@YywzIb|Y)>EMWqlEs| z2Q}+{BI4IY_j*}cPAzPDfmkyRT^I-3#9O#ovo~N>2)F8c*T$nkEDpCm5L^YdNU2AcX>55_B;Ywr1*qcP@PtrF?g_v_gxCRfKbG13r-X4UVvxWts)@YjLyjOSx z)VFT+ZL@sB78J{S?6p8=Jkk{k!-buiu<{t#*xD71Z0c$YhFh`5oaM`McO!GK#X9*G zTo0c#TyCdQa?i4K0)8z!f`8Ew4aQx96^%|bR)}>P43ll6bMyv1Tu#`pN`3USi^n9W_3u`~Zk0CNnF2lnr zGsC0o-IicmU`rQ{f=zJ#2o}g5gl^x`A=}?uv!w<;tqIqNuUkW5_Er+{os(u~FtCZP z_8_bTE$n4I9Kp?v?>KD%_zxp9?I>&yY(@>o>>r21#Xg25b_2>2Q$!&-l`~LBAQsyM zn_Hoxa3rz1$kt7_WeaRoq2{r5q0O-E3U$J-unTvFTLR%YeF!6rwSd7%u`U|8ppHOW zvxVILliqSR=>HhG{@0H+sPA{J8EoC3YbQD5mBpq3eBYZnF~njqymu4EYE zDk?=?+Xz zv2y;KEoFu^^A8NsmFb!c&Qj?@)+vOyMW2dFlRgejO;|5hgg;F;n?kQSNX+2zS$ncJ z9BT#1(BX*#F2SLW7kU6XrJLkWW63Z9xsm~83LCB|9#0}t>I{+bAR&`oyV3XG%dmpc z^$pFU^@%6atD{L+Kl@W;ie?#}ynGniKdIag&lpf6S=9zH`aCt5LKi*(GTKTUSjMzs zp)NRE%NOAv-r-rLni;Tj`1xL(|Hn!F<5?Dake|2`Eb&xrQK>Gh7uwpGrB;1@o9qP& zY-2Y9JEnjz>Svhqg+W4PiPrOfluX7tww0AasljNjP!tIsH$cC%!qR=3xGlB zSu;aGfRO8@QKUp@J!>{A!o`!KBD;u$AEMK6Q6}u@eiQDo@N2%J5O zNv)Ah7v9-DKFgoIYd9ojLZ5%ZJ?{hkA8+EnTb2oF%ICq4=p#u$2M-SA#9U`B0&hH9 zoNx|h94$t9vz+QWJ%-DXNUsqJ?@eWg1`?y(4FF_f>m!@=O@SyLL1XZe98;DrwiO}| z(Nz)_+!5Sl`ZF0?RxOJZ27&A48hB|wattC-w?<@JWlA7Bmw-KT)Mg>>5z$fFAIXxY z*w}H{)J^k_c@gw~!fem1)gE5|(=SMx;%*YanM9Ie?Y*^nvmWRODe#tJXN2Xa7xNwo zS&h~^L{b9Yb|Gw5Pi82^rktW2Qgr#;({~t*pK$_yqjYm+R(t!43gpeHpBr;w7x&EW z7dHF1lg&O=!e+l{{`ea`n&*7atyqA5<+p!_&#E^1>+yP_uiX+akCQhq*!^|T|B0ag z`NjP|o@3$!?vnur)#mN! zr)qz3{dWfRe=_KQ1?r!M zrT4M%*Le=~oWD2$qjLQ>@4{ErQTgffG+kvtRBIDf=@M9^n_WUm5u{=1PU({F?oyZT zT9A?s>25)~1t|rjLAqOd&$r%tzrXBq&b#N#JM%m<^FG76**`W9@4@%UE^1_5%PMD+ z;_4+va}r8#FeXvqp!hXcl2gp5AHcsif(~Y%4vX?`T1<0WVxAb5Fgj-N#QUiGIz{+; z0I$Zb;*3i0@$Ih9AIIy8vK-kETlX#M-RX;k^;|$BY7nNd9GCdPK*iUdzh{)k=v0oB z{nin#y~Tjpz@?hJM7E#Q>AwCcS@tPYi2ZQf221FJ+5wHha}Y|w+%uf7`NA^VX@h48 zzXEiztJvSM>@BYQmcHkChSP8!{|@){P|%MEZxvla7IDE|WDon~GsAShTko9@P_8;= z`O@z`(rgtLW8ntF2GwrcjaQE(SY1NgQd~BE^j_mn)w!rdUjH_!B1|A|?`Q3rAAaMg zBG`7Gz-!B%=X5(^EIRx2cGmL2d5_|=4}%f)bU7M&FY%`_tow+4c*< zUPA^;n<9#Ue0_Lk;D@JR&cUj+XTMo>iA^H0&Bawhn2PW$n!p|Pk17WI6Nl)TAh?kP z`PLX9A>TQRpN!&B-3z*XW5vWAafTLNQGKr#Xgm}(#`zz{_#mr*GyStUp7g{pTv)|*8Msc=x0KdFMuZr%$vSay-eIRoPS9`6^*lZIkSJ+;rG7O`S}Aa zth)NrR3WWe-1*}56mWVK_Iu7Gkeyoh@WCjdTN=BBg?p4{@~y9V@`l%(LGQW=dt5=a z4L&iYCwIf2;?Q|!F`zgQ5w0)@=%iWl_7bR#wIFE8!^#EFk~Ec0>}`XJ6_rkIhld|9 zN&G8oZK#;88CBnt(P}ea(vdVv%y)v?Fa zDM9SfL|p=^Y2~(S@it;7=ybV6X!9_P60rkD~cGHqDKnWr;q_^c(3-sEWQ{b4Wyk2rZ2H?Cg38qRN`-5XGe%&@g(!@${2#;fL|6xB<4-7#;*DD|XSQ|5$2S+%vtCYRapf6=}ZqLQJfT8bnW^KXH z_zFN>^{*Ii1N>v;n>DbvO43%2^KP}BCMN?S$evi#$33Hh@yWcbTbENf8&vib9hHP&7_KMpORI&hb zYf#|*+E5CyXc$tvmwGsyd#+-of>HW29zg*MT+s&WR(sjSCqF8;|D5_HfPENo9&Id0 zd;u%c1Kdq8vz4Eo?oSfXggw}dFecFuL+Hr(Qt$)$3wNo4>Yvk8h0K>&@!E0Z;l=B{ zukY;_fuuod!R4jXH&Gb%tgdi&CZE<{az^N~GQs;nlgNX3WZcf>jNs?ZJzC*fwQ5gT zeMckS1thnzoCR0`Hm|oIU0rPPn?gVmBDd4QxQrwp@MJF@MYoyIx?_9+cX@9atlpj; z%Po6d#zXOMtKm1DdTcy+omoT>Rh6qc0y??|5pLnAK!YyB%ojtYZ}%}S*bQO+H4tU@ z5|J+GnH7`mES1k(q^+WMv8FElyeE zN1jY?7W96mhUd5%E3%btoD(oBFf_V-u`eR z`r@hnvE29ZQoKSIfvu!(*#BNs?@%3H3~WP?dSzL}D|VIEYRU zCoG7^L7!z7ebArr_C(EpoW|U3Q}Me^+%^3`2hEB$aJMk0JT?3Bt*8>^euj2WZFW1) zl+k_GSmPd>)Vmv5z%~Fe{^Y?pKp|iJ) zeqH?Dks~^(j}C%X^^wt)dvBB=*R+yf+eTc~!yA0$BH@=z(3_zWR^x%o)D%nrZpU@a z#Mr65aCQvozTFEhKGvAMU`x9w10}oI4b6lvj*{3YZrir>(T5}G&XxT{y za_t;_?r_rHbL9;1H2WeO+PUk2D#oi|Ef->t1`uf zaq$dHt2Lf_?PFHXjIgra`4DwU6$E zbD!8|=*y$=?7bmneEZ}fhvOX3%)(5Hu_8~m=kCAIdHK}kDd~G`*eZQD{>hgeF?B?}*K{&(s!vfzWCX$Ul#*MbLGAx`JD_Nl~iyJP& zO8p48cEsGl0=y~{K9#+n2~Crwzx!v+URaXt@E7XhaeZX@HTj)Gdf3wu|<{&y;_pzr2ObT<7v-E*NguuxZudmr-Vq2p6HKQTiTKSII z`zeW>IJt@;?uJ85q*=D*U_+L%Py_zO3f;wV%Vpr9k)k8>Cf9+JrYiNlB)Nsd8_!TM zN4GoS@kqD5GIz&}+_Bc8{^aZ@g&S4tqeK}!Nix&#?U$aHil<(Yx-7#MUv#7?W)*y- zvb25nO%%mfh8`L0keRdz$3`*|rBZHQL|nlZYmP+EmzQz@nF-)W1JL%X%P`EWzJI}1 zxap?JZCCiH#?;zdxP>R`ZtHHhL%{HNN2v(ZSES#3C3czq_{HmY+U?FXG`QZaY~p^n zZ%$?=I;Pdu%{zH!T%JWv1)wfK7y_+iA#{(_S>1gkeshfi#;jXVkx-Vr#cu=n=M^a^ z4p<)AslJ?F=cVwMVN;)k^G|Q_%*vB1_7lAqC*Hjhlb+!WMX^$jE&7=&zW91aR3$>| zLEZj!(Cu6nXSdhP;fA5i>5jM7_=%e#K`Ar@DCSMI@zRQP;lFm zhDI_Dv!MP=nVFrHJjRgn%Cvd(=YyaHcgd9H2#=R1s6lU><>t`O>}9WHVWjDzynH|X#Db|hmX337BC@; zEt5jAEtz96Z7gE>6ERF^3?lm(V}a|2%UfL8wE6G)={{x}5@%eGnqDdZc;gfI#!Oq# znCZv!4MQ=R->ppE{MH;X+mbQsx-fYKRL|*`QUyH2?;?<`V^s&20)}z7(iinj*D7B|kQO2V@I3Bo%1c!KE zeNAyX^Ub(mT6y(e?^LbhP5#rA1xxPBIg`08ZQP!w(yH20S6_{Xvt%|33hmcbhHp7P zm&GYC=2sm(?kzDvYxTWcaYB2j4!D8YOoCsnE48?Ek`!@oc;R5x3zZG zawfZvEFAh?^#7jR`t#IU5zGY!ACNJ!t}U$g!YHvU5=42*>1U&r=xFMT%Kxb6961xL zXz20bsQ7ykj1fQa$n+0;Ws`ESJB)k9>OD$hR@n!W{$`ogkz_^Ur6nbd6fV=i1ghajCk9pFgE zR3}%P&I^gX>cajg_qmb!xtrmYD|hq}u@4cuYW~dNBbJ?`8l3O?SZ`N925!AVyym2C zY!FE=$ebFD>npK6-JBy9LsP81u~?&OF)kQ&>7bGSV>in5Nul?Lk4YXnhdd1~T)Xk! z%I6Xqdg?1riB-@&{{wq0LP~|;&jF;(@ zaHgUG%6EfSGlQPft}V`|wxq)KTZ*zl2p#0GvrDMH#a4%Rt*5XZ1dpEGJWw@5$&KJh z!NOPinu=S5n>E^A4>d%YN8i@}HmMzq^3Da18G~DwDCP<3m-ilIabb~Bsp>P}56j}o zMj}yP%V*{hy)@fDsAuqNFWv>DWM?s^WcTmds{}n>1Wj_1VSm)nmE21&g% zEyw_KB&Q1sGrzMxyQH50D7b)4gnq~?5_0wfZ~=j1E!(+jFqN2^Es5N#%W5!po)dOC-h3ht)O#+aJfj40 z$GF;J9isS&wlCPregX3DVkV!!K3x3TmA}~dGpHf7u!MmFV`@#s@3XDPd}-Hyx{>V` z%xZ*&EmcW(UZ|FdaYVr4v)WB*2%gh3^&-l!pP~d(AI@k0bOs^D)lXJFcf1=lH7QF+ zyHn33jV_t0lUKu?o+<3-uaq&!ni;Kb4u}VPkc!a`uPWdu$L}QbjLh#Zo{qy-Jc_xb{wxP(q!mqitiFkX|!*L0w zk^Y+Bmsq$n=T$1Lxxu|6!}?nhTP9Y|CosUV*>oN)BZ7jz5sJNiFK%-R@^t(p4#p48 zMo#x-9X$7k2~vvHgz`J~t#dd;+1PpKa{Zfs-esdcEb)28I${$nIf^ZQP{pJz0~~tjRtf`;x%JB;|46?>ic9&&(CT-Xw1JwW z`LuHJ4kz8ubJ!2D+*(cFNxV0DFVfr?jbdNBS@F1}rcGa(@v8|xLs6!{ry>K>!OVu- z{Rral^Kik9d%v9xTm3Fl0$t7w%F*5Oi+&PDcFt1?u>acVdzc{F1&n3~kgfyvM=tt* z*jaNi*F3{C6nw>x`qApvbplHnZJDS_J(XMPi;T~oL)Q-19u;=4Q%W1s6)iJTD7PS- z4x?M>^v&XFtn_t7Yvka3Fh`z>EGB+ts`)c)%NvwuT|+DH_cpjDfc@2bZ|+T)D-fXa z^ZNJjd4A~OBG2t>_Nz+W+Md~8HA+{!yu7>6bieRrweoZ{0iP7i?@GFqhma6ukdSUS4 zJD(pLB3ouPT{}c5S2AQRIUQCEk8Yu~TR>h3Z2Vw}5xuT+f3JE%nLmgzh8K1?C}!6z znD8P`It7nQcuR9^0W0N4abe$Yx&;Z!AiwVf`SEzggf~e7bCZASD_6y$KBQC#jB4Sc z(!A)2%k^wc{H7{n`ztkkl}C1=U74$0-M?$jU8#&(WTs!mZ}X;3+5s}y7PcInQr9bH<5?<1xM|H$ov zo^*#AG$gh}&ny3$JgKsqb16EYT&eR~+RB9`lTm@mJcn5Ysi{J_{Xe64RL zBzRY;lZCc0InOb>{$($b8HgJ%TbQH^%5J&gilrADZX@UPyIyJR_}=J|DueloFd+O& zKLkXrv^8|z@=LRP)rIrvXT9foyX#$#h60t=b>3nJAq-aUQ@h629XN^-HX(ec zT-+Ymv3`0qT~*jSj0WZNv{;WdS@nBI{pQ~WXG}uDZ!1sUp|zRAK(U+?Gq|FJnpy?l ziPf9mO;3dt5#zD#r*arH+Uddh?wfRK+(+W}IKF3^2@2mV41|oBVyzo0!82^44xV#K zr^FsW394y`Wbl>X2z~y2Qira`dAU*+WDgmlrEkmjn1h#K3G{&bJT$lz2 zPGQ({l|@w@c{0##;r1dLSjLPo8vaM0x@8qlRWq9ic>hY+fk$}+wRhiD%&@zWm(Y$D zZY2I>!mnr+tQBsAGz->XWqR99%$E%7@g*e|tPHJ>Al(qXI6)0~6pw2jkdX`ytP!&pkbLuF$42!L z;j6}=3@gjm@^1-vGN_c))zy~Tie}y!?km3$Bb_5hA;DU{KIM*k{LtKU52c+hfFzu< zrXQrKdKs}RWB2sXh(A4ftUmj*IK9Y8o2qtdD#nFA@t3J|nd#K*+j{Jx8kr-9nokU~ zCcFYf_#HvE96!hQP-^Ycg=+Pg?$>86-z)ls>NHiPt!ros7ud(jH=|HmMWv1M{ji{E z``ibi%n_p+(jHIdAC7z2c15D6;brO987S1$Eas;^m@#9UwV<7RK#wn0L@` zHexg(DOz^0Ci!Dnd-KW>*Ip6_w^qrTW_0*)ZP=rF_p9mE`djT8QTs6g2W6tq{t4iyA3)`M{zni0I-doss*Nwuax!E5xJp$|GGS zR>ilQ-&*~cr}r?p+v`m7G(6_gF(bjlSTDYdJied}x`cr%fq}(>Es7-WxD4{alQgnk z+9IxZzL8wQ);|nruGlXc*q30Kf&!O1Km>ky@O5w@4yk%_llTbBu=t4V9xo+(D#fpe z>Rq#oyteRBK`iY-nOJhOX*!<$yCPGKQg^mNw=&XG_uDr`rr4#Qe!cbhIyf`cZwl|H z+)4$Je@q&9AGjb_={UO^*nlWU!v`ad(aZqr+S&B%Y`Cdy3bB!8WW1Tr=z)sqZticx zNIsrF=$QpdOOU3VKpD(^6SyyE!V6C9CrxW^dp#mj?n zLp=2t43afx(u{C(-7oU{5;c$${|msG;PwT-ak+bum3^=(vieVF$fQ(w~5{Jq{ucSN)$!W zZk>_CjP>Iqft`xzcYfb@J(rR%HT$WVC|rXI^gdjj=DcZYCD$+Q>C=owAMCsOG6$GQ z5@(!pG>{*2^O=vgrLN%II+LES)CthK+@Mkre473F27anD;r&H*DFeC;`o)lllXY4Y z-JY&-_NV9OTNA0q2hJ7we>HB{qcCYVZ80M+{t%A3C2>XhJmg=!c@~#KIhNoVbzJKJ zeI|!1V)W&wNg}DLMZ_aerObIs=|~{%0f&5Ngti2pb`(zV+4UOxuB?|;jdSEtnQcY2 z@mjU>#q5hl>E)Tei5blITHH%6Ur+sCAc!t#(I5Eo%tkh4xlA%2aFFB9=mOLk(RV6& z#Hv|b^@U69p});5jS!eYJhQ->2~ve7Atx4HUn0B?>Vk5dX8wb z8#mybLK&U_#UJ|1HWevTt97Rv%2>lxcS&@qd5a9$Fd8_}zscIit}muMS+$KW8XSLt6b0 z?1L|OIByPT!^8n(^Uu}fO^!c}y+YzX#qeb%y9^Oj=bifxPNB`=LiSf34P0w)jK$<| zvlnbm4E4-TsBXt2%_p3)g%iro?vK=wPeEwqqjY@MnOmWN7a8LV#m^jl;a1%VwmX!q zXL?R_L!o`iv=oO<_SVc|Sq1F= zwQtDKV-VFU10&_Q8~z2+e}|NTvOrjXXY4CY;@({+*(2xc6nx(6Oe?1!CyVFpT~_z&YRfzcLqdE)q~%Y^(ViAyYe{6 zY;c_T^RZD5z3izI=`E%AL?el>OUh<7uT30w?JYfkK=os-B z@p4{9Q{^b=ECqi+7&QQW$ZDb5y>+dY?x$wecLQk^E&;^k2kT}vE9%^&7)u=I+df;L zf|q`nFYcyq(|1nN3g64(o}_X{gk$_J!cxN1rR@#JTjp71@aRxstaS|IHc??Vcq)}iwwuq z!wi`ZO$-aR7z06*YPlR9@E>OpWe#^S&zmD3 zM_*H98HV5TIa(N7?+Bu|HE%iRys=$Ymnoxl+Bc35yX|Vs1ym+}?Ni+X#B)~EPD*7z zv*dYnq@zO^4cX1e5yd84m8-6v;G;)9rhN>oS8ipj< z?Rp%EH>jqN4?P^fS>|DU+Ao1^Ecg*Ud}~4a)2p*{EjVWc`g)c+>8xmmoYOGBIE13o4D1cjC*0spHDXg^$f7nA`dJLa=q_&&E0gzS6joYAG;j2|ah@Dbs9X*c z{Apbzk9RB_Do4C)C-nb zv6fC{${B6(Cxbr|Ea|(g<$@#+K=jYBSjIPUn}N-_aR=K|&lIv=;)A>#~f!kye_(VD*5 z*aM$XkW<97e%iX#a&4wiov~}4`GVG5GBD4BWDqV|A;+kE=)G~b)oLLqx3Ti6|NI0L zNH?Ju)|m_fQ!B{0p%<^``8?UZ@O>q>I$$6UVEnjmK8j2_Dk+eX#fUFcUnaV0Xw$zER>3^@O zLym!pLrV9h=MR=0z-$5rVkBUAKQTmG8Rg-kXf10{LXN_16djVZ#3AreJmP{N(j&%* z4fgtMu!MmMf8SXaRa?0jr&DlFm3P2sQX&iuz$XF*=dX1r=F%YRo1YX51QQDOr-ioC*_wZB{<1BMJqH(~mXt|-PE=_hE zkQb1Sp@pnzsw~3KS*pTbBw@BHhlHNTeyxf+(H;T$>g;qR=K_jl=76+hLK|_K)KsXP zDqOC3UfQo64%H%lPU}_QvE#+|tx(Z!s4iiZ4bpAahI&PD(_e<#+^wEpssLiQ;b!{A zG;=x&6~(?)MV1>`N?{+xFfX(~J3JX;7}ORUsv2mwnzDtCisd-ay!ZJnkiT0tn~6}R zIeNl;LsduGr$yx1k;gl+>BFu5|BQ21E{OX8wCKDsuEuz+kE@d^Cj4f;>_%cS1MLCX z#G5)Q3}{7aQzmi0$x+Ye4v{iujvQ-{_c&ny!-`lZuY7OR2BClKBNW|+>Iv4!L3sn5 z5}ojBb?NKZp#p;@LQY;y^#-#G^4>q+R(5WT|AFhW;R4Ru^#_^stMqyfyI>v?cc3W+)S?;y?&84|1KJ_JGc$Xxl zYes5{^nB{lx>CGB3Y7Zym-w`3Wyi#SI&G!gB$ipHK=f1YkSRScI1SgCbtwaK0B>@> zBXyv{c+XzPhl2zn?4hF7TZ6vF@qx=cW-{NLZ!ShwmVbO*HZ#^(6Vm-SZH#L(MhtK|?CURlaiUfVw|N;hHx|dpe=TqR zM(wWNbr;z;{yrDbb{M1gd?qe;VU$?1%sI&kHm+9qX=$~AuAe1l_G}KrNKG;&6mVWtP#+AZ%|JcR<}3Qw|F19;QaCcO3-%82l`+J0T#6JMKe}Ccdh6Uf zZr;5$X2Wvyi`fxM-&zpHfEoEg48+l>$YZsUS_V=^7hH$0A|?$WBS|7PQ`ds(6^!t8Yra)i$8m=OD-c-NAB1n09(-6eZ+>IRnqne zqs)hN*6~;?0cnh$oj>bqEo}NjHLJj2AK)eg=uq5jvI4Z=&c{Yj>YL-r+h5y31a54| zSu$LmJ!ALHvG>@?H+Ks`l)*m^G>`GxKcMVD(QdC&3t(Dlq48uI+zBsa3yCEPa}wp) z92uxxo8ZQ!Q5VPN#y#FzuuVSD~^VC&4Ff5L>dqrq|F?x1KCwNFGu<=6Q}; z754z9gD8NL4SjDAU`z;X&s{_9lHpL*O@O6m-0QU9$Y0%jk(k3m_XM#24S4p!j=8Fj z&>rvu5O*RZ_tgcl+pdTYCdam!sEjj;V+S{&Q>I5b=7WAkx@(^{m|kJ|!ZU zgARj?r9X*=3;&I#Qa+JVHnov1O7(DOal)rQANH@r0ow@}vjRkFFR=d=$P*6aMl{$| z{{8x2x1TPBjdY=%aQrfTa=W**4$B1YZ>cqxprTIyg~AW23`mvW6Mt~03h~<6^=%ni z`&1Vz-BsQls5ltGoeP|Q69g8d^_it^Q6hiZ5$*oEl?aoO87apSBGC=a0ThFoYnH*xXRKCZUrPmcwoo8WKP5 z1V#YDsJDZcCUKHod?SW8+oFl-lo3yE>_&po%szo|A5HbGA6j6XFk>8mh z<>(cOaN1bVjOf*s3Vmps8@8Ug~ykIGIz)Nq(D^H$ya9g)=w{B zT!~FizmJ9ra3u<1Nph}jayc*0T(t^6?+Y%>XX@~=^6URaw(f*~{N+MaGBBBKWjZv7 z*Y3CE{M&+u4$T;-Jcwf0y#Lt^y3bR)=5U-EAksiUD`-}ae^A#WfkR>4(0Isf}`)pPacj@AJ#X0S^jU}!*E=g`7BIa_Fjr z?n_)T4xVYA*M)A%fjhM!& zkk((ElSp)4%R1>fxf+_4w->T8u1ZOC6hS{I5r78i;%$3`Pk!TA_J}rb)AmQ0-GT4m z(%0%&5(A|x2%a4n-wsgt`H(izd`e{F@nq=pdPYhFC)T8 z!d&tql!E!|<3J3rpDOX6-CZ|e%L!(s)H8<4c zc@`-nIc8PrS@bV+`Anq%x|oOPzWW3})`FajiLc8g3x66EwffKRJOvXbdJ+C1yD4Pt zF=c;v7QDQ=I74M)UsW+I$%zo%0**LRfEPd1sWoIH6D9JcA?i6s`PGy+qFVV$H5hCT z17`(tEcux%*5Q4kE>-U zP6+-T816-UQpQ?mj#nuBFI<@q?`hP0$zInZ-Uop0_kqMxHCg4nEV zjI^ZqPsw{-B(ZOZ4``(ijP1+;k4|`}rX?VO8t;mNVv6?SC2HySB>Ngf?`99Mu9m47 z$}gM5FLdx*iR^~DjK5koDM(VI!-(qD^On3&TpUC^Jp$w49yU9KUvhtJgQea2EM)^I zxiZUaVEf16=q8#>Fm;p1%6w2uHn|dvdTopx+in8YLw2)tj+G*CAcDJ6f>*7?wn$n^ z75T9#`a%Yrqb=QPr$I*%_CxY@f_a>-^M8*!j+yY47vTqs4em0`;{e+@K9)t4HJ(~g z0{84wk8ft??_~6^297&vE?{UoD||@^b>t4kf{Z69XLIY2-Oy`gQ>xKij1QjbZm&96 zqz>Z!4W%%KQ&@TyU>|dDi9{!sv076K@`y=~oj5W#c2xdIRI(-xvBkSQH}%3YRRNoN zErj|G4;^cVlxC^+c!a$;h~dw8nNmI|N*a=2(0#w#cV7~FGw&($wo=^KAHqa6D`;Dh za6>fC{T~9gu9*mx6`jGlU3qZ?_#ZGBId4pVT5BwJ!fgB^f2}SpSUL7Lgz6GCR$t}F zGaNQXpG3iR>{VxH8bi!T`9~}3qXV*G|4?ahJo%SaNhZVS;A)aTl}1E^WQSynev1@R zL@$q68&1o*ZtWt1pO9wPS^wCmO;$4BnlIBI`*i zb9S%9eAUOTZsLCCwb9SU)D5@p8SbNgZJ{Su69Q@JVd~bSmJx+*s8j%M$t8eiD66{n zoxVqvz_>><{VEdHBSG^RLnLmSR5OLIWHOzkcwXGg85{`z9`l_cfrJy zH=HdJbE3fQFH32SYgu;QzAcdX(E07MQ8)%vof-E8s_9?VG{{B1p;hyNw^r2DdrFWcc<3a& zh(FbPh0uVdaveqSV$*Ht$((&1W*VQvpuFKLJ-c6)3Mp+7ppWN?DT#PF_D||y6Vg5H zh26OZU?s8CJ_FwcVLd8+fa>c`w-!B`RwNTP2Y*3POaqPT7ikL z%gWbLb_r+X8viErUPF2o92j`0%r{nwqE1@>aHJ{H#K`oHJpr`1J)-~1V)2JVeA9#r;c&e4j;n*z} zov~hGm+FTp`Rw0lxDCfVZit-l$%n&=StX3!Aym<_C@yh3ZklRF->H7Zbg6RxnD-r> zM)J|-0EB&U7QhmauCmnkkX%Mh;T{C~P=n+P~=ItL2ju;y=_ zlXYmVoEwX;onz-R{&jh%azXZvAa;@IA>(p|6Ot&3IWikIy`(1mqv^6asZ}!^7SB3*M@+!kJnO=7yhnkc>GtEUMZ6W-SEanUDyvwb z2#K5^aecca_geD%>;EX4@s0i;-HE@MHeDSX6&$P!(F`$VYl@qz(kJf|(Y0&Zd!IMu zc+!2L3t7ZA4eGnUI~+B3+E}T61@vDA#!kEK(GsIOws`J!8e`VPp|*^1cGb%u1hoRH zL4`Td+RBfQzIt+HCX=?~UBpNFxcf{Lv+W^?V@WdP+X6)2D+NAY4tmdr4HjHw5O1aH zS)l%#{;J8AYC*CIB%*msyq20rMz5r09yjiv!L{~JY{7&-qOHL>p#}qwRd?#~AIL8N zuL)>T=67|}TcWTBvsdOrYgGmjg}Y%C$V5tO0Hn2>Y4Xeu3=7UrthefA)vDb46s|(C zUiA-O#OniMy$~xV8_t?HP#%g!vN^TS*r-G`YQ!MQhra5!j~_aF(;omCdNoR{3-LBF z=*u%&O*BC+3e0Ay`L-FSNTFbdT2=SI2#H=oDAFZKIfQs5=3coBv$6X-wc}$_OX~wY z{C`t+FXd0@+fbc(&uHH;>Mm0)u&hAOBG%1v0dHhCQMDS-4-vG_;wn}1W|<5Rks?go zv1*fozCPnC2fdaRT(8RfTt_%iM_!R3pz)B3j}yoV33RH(xj@pXXx0f{?=kymvFH_NrGN2dKBTMC z>+uKM4QDO179N7-DKyf|F;=Nvj%@4yGSOy`ZdnIVg4e9BX|o)pEr1<1r(DLne`otLpVxb16tUVfdT8=cxo%TI4r@=NmdT zEAj^`PS!xP48kk?eY`vY(tBY|$n!UqT`)#p-b7*VUmJQ$ zW*f(9n>S)YVdgp*)98;A4gZoK8D2OlZKI+Ka$zN`-PGDP$KSp`X3TA8V@6u+79Y_$ zZ9O-D0S35`ITC%tzA4PDPMGq8u{dx{cna;&_<`A$EA-bSZE)l-PW8@3vV~%GwtHaO z;|AP7z?XCDaXaDFm>Z1IY}g|zC`ngm2(I66qGS4({00%))!l)7i0aEd7ppW zaCHxj>+Bj4;0*{B5PKIZI0q^?6UD!aYVOYrEg-)^(ei7zgCr+8jt<$&9UnAXPa!Xh z^?-Am8k#YSvDlYQeiO>tdB?EEt21j2h9xK*+o8>mO$zg!VU%AikLVA7Lm2WUkW^sR2E zIjY_snr%;4@w`2(Td^ZNvU|4VrTh2};q8FH+JQm~5amYMt@Dj}8e}(!%yX3AMJJO zXZVW)v^814BB@lRg6A8Y_PrGJO0UT=yVTJNFSHTRB}8YMCiWWO!+a2`dZBl?7dKti zX!GLTPSb>GFexDBR8TQKn7#GbB|=WyvE6h{G!Z&r)r*fvCIhi-Bh4{ zHs?-{Y%p3>ci?9HeJvMT`yR<%nb&Eh9cgEo7h@Ugbg19C7~Txfp9nbE7r z*%zP-!&x@u*K+N2&Pu(=k&1^~cgnJ651sgPW3VIp#gFX#>l69vhjuTftJ>cjeq)~I zlzEfSGc*;RkAzCjB)2(5nnOw##uxyo2|hRW zET_?I+Y)QEf22v7*g5ZW{gi$$KIX$&c`jh^jUP~s1|J8k?B%!UP-?c%w`@&^k$VT; zR3b({{fN8lbmnkFlyjnbH=fp%?{Iv$NR82~u!g*a9VzB+FTy^Uz$x}jR z?GIaD@PiP?tn2qWMvo%w%wK6zGUUxaLYtPs>DqW7n*GD#;o{2RGP%CojajHVj7{ic}z+PdNUV-Trj;V`DIdPm?}90y8lK01l1P`Z^$pyt8~da1K45%nVz$rx^_jw*oFA8FK-D z>R$k$DDnxreO5S)Tc2Ac?OY0F2hgzG0bqRvH=i)-LHJt+U#~>*ZUGO%2O!>$$7tdX z$ip~yrxo(2-2p`N0N{PR723tya}%%jd!+-sTwomY0XX*ODbBk>{(o2SP4n=t;9TI2 zItxIsA#Wuj`T6e$zsBb>Xe1wCO%>-WK#1)5YkVt4*}&QFIS2!Q0p5aUR4iSw&jm0>1c3)tA0Fd#6K#o&KPX3n_!mHbKJv2i@mqkkNSd|Y zV>MOL3#D@4r0_20esG$Ec9X<~fAZr&%Ar3LMgQ#u!47OVW*>NNN56nimc*Tu^9N)8 zu0<@OJ%YgO_-jAw)NnY(jgS^RyEbYAyQW#}iEK%`H#SyNBC7Ws;|}+kcPZ#TA+V31 z&wv$_N&Oe|ol_yYMv!GfDDExvV-|1>dSayXWXX|q=UfKiq?JpWQ2#-NvjVjBN>#a~M=E>nR zx8Fe;YabhS2q%EGt$Q6*eYZNU&CIXQc8MekIYGNg$a2%Gvm8xn!621w&Zi%vFgx!4 z`~xqyUeIqHH*!_eT5lX{rO%r08yzHRZ&@Sz1^z9DgCO0-g{ZXex6`4>^<&@4B4@F2 zPA0&CkF4+&;-+G){2yMFNt~s5$aJq$;?57REMcb&Xr)4p;7^J;sbC{i{bz?|RBp0x zlS%#m3at~842#x8Ysh@q{rfV^%0&q!&Z{`N3N!0Z3=;3#xk5MW;%vU4UjSrC3a7Z$ zLLZOhJ$~|qZQdBlz*HbK2?sxb*E;g6GlGCz;3tY3_nU6|3(Pd|*RkcOh_?+~$K~@(o|{W;>^~k^ueHp~lSNlLsi)Ep)Q# zZ^`*16PyN_<1zvRHLO$a!YsqJSl6*gtL1 z{G3Ro6oKX4mtaocMSyiuVidqfaU-ks_-!2e!V?1)If^(JZa&wsQg0sQlx^gODBZc& z`HqJZGyJWDG-*eje$o;$Y3>z?%$w0_Fy1nwi??+v=sJylZjkQY=UqSF-}~2I7rQ)h=A4;( zX6~6G+!!a4gSx$ggUl0S2@NSWW7O?Xv4@=|0z=4v!3OY_lVc6>5j@%ih?!^XlhXs? ztW(_Vb)}bZgLId_-+T{QNG{w)2i zzomg?%-&fVD%9tc-p8t9xO5ML-=#>q^!l$C*Ty~-fUm6O-{yc~#XMjP0a%Uzb}-}= zOKV}-rrH#ssw&gc!-j8C)ay>1A@fcdFF~7gP5ZZAJnZ+>^iYWN zKJbYi@Ja^+)8hJ&7aMwkUrEOvQfO^Nm*nV3@h~@2bO%Y-hq5oy54C2p;jR;(jj{T>v-^A+^#2`p~pi2eey5Y<0A3|3Cxc=%%WO_=A1GG851zI}f9Yym3R zT`b@u2_js2y0Ws`cyO1w{3cT1qL|-T)yN2o>=5<^E7hlHljm|NRk1eBZiF+uCN|y zFusEvL$Y+1wDyhS)8c_?9dyd0>>9V=gbPbBf;6~S4)%|KIj2cs;hW#|NCeHU={{*2 z@C<8q@uFWFYEm=9h>b|>XeGCdb%fQnk`q?l{!pl)ynx5}p@MOp9{w#6uP2Q)gz+Bm z92rjS8{t!Qbhw^KwVmTy;nFj?H)~u8rqRgK%Ib)JyuLsf1P69Vzx0(L4u*F;3l&}v z|9fbiLN{xEXFAxs?l{pjv|tPxE+XW*)5OS{KWDrK@%Z&^4#7YO?|0~CToM`KyQ3(* z-o+W%uU`q!Tsp%n-8syK6u=UkW|O2vX8z=JPbkUYpwe2sg~InC0iDFpEyd3z@@S=a zpXj9zyoN~;-{D>@Sqe{lwHJI9AWqjXoVkLg+!hz@O5@(jeMm5YAHA|8GQYOnhMB0v zftMdFtxiPuH=c!1X(!}9M*{ihv$4+;sI!eQ!`;S3nY`uwz%;5ur6>&z4UcVn$LMbq zf(6p;nvLmTSrTiR*4};uy1>j`t#8*9FO>d34i|LaKmC9@KW>UtUmquZO0RFeYuPT8 zyYqQ(mBX1qk0LS$K~u7b@Qm1k6kszt#Jnw>6j+J4nSG4>BTlZexX?^3oPDBeW;xX}?D9&8OM7q3-^JVi>3L zWsL>JXG`hGFF+m7)A|i;=`X)Z?nql;)EXr!aSMnpC0_=bE9@D_m=TuBipT_taYA`c^5T40#2{%`Q`a#fgznaan+JZ+5l zXls@Bwr(!E3i9mv0G+^(Ay306Hdsrv^70o3+srPAcO2}|D_ii~K zT*X$zQ8}9eS7AL~`N!!K#yyS2XrtdEaO4@JX*h6pwf3NLqH7@T<6{)0w!e^4Z{ZV- zJMW)!VE!b@n&wCa>xp~ALG*k$B|<^;$x=eNbkO@<#|Z)Y2bOH7JKNa+6nC~`mL%dPLmR)=B+c2Y|BvUK~dwJvq498T;&KL zlQZw-7U}j?>z#Px8+v`?-Yh?!HidE@puPa3bD(E`Zb$h%&3#QZ1&c23O&lsh+Z8lS zC&T4G!5%V*cm@tCv~rTl6<4ZQmE*ivf{Rg-n?JbqULL$N7LiC1<_v71 z&in4Jk&5+=qljYzuO~JA#pi|b^r+S9#VJZIH}whGe$50QK9B4*X~%sl;MW}NsCztlIGQo7bl(JTxy4P_mL7? z0IYdHEq;-xR(5{b16%xuzGYNwQFqGj9CN*>`Il2CmngDG3eanfR?h-V8h2kHPz@ia z;OBlUtYdM@-{&YG$Q|}~Uti!4t7OZuo6!=+8Wj(gVDpb)>2eHx$H>h=71UR2Xc@GE zKB_cs<6Vbb@ykgMJFxCy>*;MkA3e2~^`;??4-aLr+C+uqmQi0fc4eP=E{BF~=;{#m z4qtNXPmII;!B)fSS?tN_e8=}xe@Ofr4soM_o78E@mAm%&Eop9_(Q@xRSz6Jp89SA& zkGZ8|4Mux5_ir+1kKH{a)}fxZU&d5$cm@_K?Qwo`bP^WD8yg)Kw|k zm_R`i3&e*EDE_>TxG-)S%mOL+;5zt>+_=wK_<0>!Y*)|9vf$#@;A+o+txVX1vJW89 z;NgDmfcww~erIrsY%OvTbC!JApO0BJa|+Jtdn|ix>IY+b;W}>tVgTpsMb?-F%6Vj2 zYj=IfRrxxs0s|Owzd3tw@i2qz)p_sM1^KPXM1?_3Q!YS&1J1FXV&`5RN2$4&et`g+ zEBXPT&anUhJ~)mPDX{Cjt5n&pGr50)wZVFByL?^;2vBbwa2!?>`b7MGZ}mw6V3s+^ zKDaN$SRfttb6xUr^T6I1=9^F`z8geVi=fS`&Hx&T7falj#`^S{cc`Ci0}rAB`5JDW)kb3`J<@Y8U)^eWDb6ttY%M zyx&bN?9R{vhIARf{Qji82Lz7-;1z^hx6oXpx|#&Hapa?T!_yCMufSYuP;l>=75vjq zXmbMI4DwM)1TU;N6v)yOD!2)_!FTN4sdMNr8`hb)Ud$zr1Dl^N3(l$Qg9EqLL2YJ% zxyVON@6NU#&gijS0CY$#@^KpG{0xl%@wdjPHEyXr;K1!K2--#Rulu-rkI3E>DqawE zEmT#-wMjkt6nM;gYgRGOZg!WT`)N{fI0;&|q|3fx^FHCjAkZ5^^c8h$sxhto>z_4z z)~J^qWo4yJQhJ|I`cd*fuX!4a zdB+wTH?}_FsnFWF+_;xW@yY6G99`S0ZeBn8EtTNPZWaAYcBG7TnJXfT<1Zo;xcV5jdnNWp z`+b$7lTVdAn34TT8*&8q9|+&r!f!cnaP_%-UD{?D!KGBqcu-G$@Yw?O@T%}LmXoi6 zEWVdo?LD{wB0OvnISS^DHC&ke)-_x$rC5Aip7q~zv#~hN5bcF7_7XXJW$WNdvsSfu<;DrdVU6t zG5X_R*Rc8?R0XP9LUSnhp;LdR3?9SqVmLnq${D85I9XojS@TsQMxV9LSm+N>FsBC6 zf>ZL`xLjD&WftEMBd|f2W579+VEkyOTwuUGH%y>?y5kGT2H|}cvdl-uIwK5U>ajqr zJ&4^kbn2viniX%kZF>33s@6`kbaMhy?I!oy_77w9mlU1`8A8%r?2o7<`V?rouSRHN zPNbpi^jVz$cN@`Yz&{Vr!dv%%CNS-8@I&(*^t#xu3h1t=yEANm5-cpm7ng+cw5P=f zO((1&ULXoScD0W0V2 zor!8NToo`~fdtkrs72l|N-2Skl=MRGv)FEU7rz;nyvozo*Z=u_g65yJ{71}Moa=D< zot?R2sS#W=G6q-uZ4?i^djdr9@w7G9<>&nQ{+b6$9dFJJv@Q#2?BzP@AThO%?QV1K zl%@3kSkTKDc@|82pe9#`8c^}%BUW;HQi}M0o_s02imM?+xxidNfAtveU3kU7U^PP9 zs>#KmivXqzG4%?Wl6oFRw%+Qj%#yUf)_yNOVb7*^m2>7uf3*Fh&9;JYPs6@BKh zc2G%pj13!swyVJ})RD4%LJbdx!=rMMN0fX_LQ{B*_9N*(&6;MJTnTFr5~5&>oQ41ShcrMeoIqZMK+j90wl}t^x@Nqc)5W42KeT!3tXvCvgE*v`LznUndj@S9Z<* zQ_$L$$=@iBQBuaS+oKRB3DP);C2qw2|68b{s25S%M)8CTor3V&8BO!Bx$CgbA3QOqn@bh}eULwJ4?hMn^A>)k2Yr?c#uX-`%uzFmy% z9o_{(k8YvK!0>uwbuRRXP7J`HSAFIJgp$&G!8|-O8?#;?1r8K22kP07+yseIL& z{yR~e$&wy0P>C14XH?kGPOZ1;zMPx1xegm9d^{wjKLDkxuQ)nZmMZnQrEt~d)c@OZ zOr>a)(qO;J^nje7!g2+|reA2kRzT%KPk2_^cPX8fUUzXuS z4%0{bc5g}t{X!1@<%;)K80cF|j$-S7QM9HmD>t3Xy{x0a3?Tx>`q!2AA?UKz9p5Wp z71=G?5Bm~Ra(C#zj}K!SD-o}HB1{_1YzxCpXp83Cr(0+~c!Vs7Pktr3&viEpiFF?{ z)%=S&@LR-!q`qoAl(wG0Hy!DZEy9R}WYZ>sgC&XV>+ZVd{+X?4C@ZPn z1~*VPkz=OZ7rzDesIM%cjh0Z4qX`h}n-am1$}sD>IfR)I3Rs79V~C5A1$#+u16DV~ zt4r4B7BrCZ5D86#P!Ok0)=9Pu|9x{o<%-_LylW#JS0X#(xd6K79P(}O!7y^T#=*+j zz{q^UZP@UhTt)S^c7iK=Y4wr&Q-u`e(&&!y=sS`GvEQi0n9Kzh$g#P*x16)P1tnjS z*tvxrb`FXc0mWluuUjITcK6$Ngx~FmB7A>LO`-~ZF~&LhQsp{=*z(MDwQjHnd1X53 z>D%$Jh{Ja!5LWg5p<{|=&j z|GMF}x;pAi&ed7kb3$|Xa$6uGiEmQhy5S{|E#VP94i@x+#s$o$OtG|23Dc;VON6C4 zwC@O@e++mW?`iO5f;|=Ejs?L%31%l&F)oSiHqQNME=q*5fkQHN<^MpX1Z_xHwq%?D z&7*rr&AesfyH+CP*Scf%x^ju*z#(bojjPWXPRu5Psp;+&%ft0-;9l^-P~hWetxuQ- zg_kZ|{6A3v@%K+h&$VF(QxEc^#3sfM;{xFE5xSCp3J1gtg(nA(-PRrTs;_^3n9_M5 zL2OO3LP{n~OFBi|Irz;^4m(Ah!vBk|MaUV0U((N zIN>1*gOSC%10x98b2!JS7dJ;mLQWw9)CGVa4^Xn51HAjh*qCpLV#o7cB#gA*iUZ9r zE`TaYl(b10t+w&q3OgkXV`GFepkedN+>?JazkNsv}*k~g%&L$f1#mJ6jW?gI$> z@o=c!77qO)O`CLwpM8=*K(@-fS#+k#iyj5GrkrWYjK)Nz7fy81%7M4osGVO}P{G7R z>oFn!20t3bfV9~FB<4Qq@Hr!dbnpS#xyhPOjpiU*w=en9Uqvy0`dCVrqgElw_DlJkE8=87ES&^tQU=4gDQ4XX^^13ng-DWA5xkh1d4 zWCNA}84P-_2u2z?_XwX{6Pu-`$n<6MjC(_cJ;*-#9^jCEX(L&>Ig@0?r$rX1ELY-L zk|Y_wC3j?`3#W{#vlz&nCDr)-e~1W-d66`K&-)lmI`IJcGQ}dSi?jHXmdBdyxDk%2 z2v1?t<>ZEJC5QQ{fb%Lz6gO4FCceglKbqUfMh|X`{EzWpYjP~lhS`L*lyFdfvEBcU;xbxLF3S23xPBoN5W{a{$NhAnfRhS4s|6{} z;paQ8ecaX-A<7`QMK9PVTmA??%C^a0}_Y zOor5Z$5yDPBQpMH9=e#rF0!TeH1M{|Br8I%^hTcVU>YM{qFD}E-+KVANNtHIO&{jd z1<_DfoO&RlF;5NaJ5+VlV)FIn=sFR`{6dR$?2iaTL6IleKXe-M>*C6jR^ME$ ztM9EVKh&;ywK#`Nu-+%4D_L;bsm$>Qp>U@-bnXr9;Q`76_U|q3AYs{IQvWvelR}{i z;V>(*<{&ck-5n=?qGXF0JGuF*e;_o7=llTWF6{hGSmIcIr_vq-G7d0|LiipX8p0CMEJG4^1oD1_t(9n@Ri{zz{S~a?6oD20sPF*;D1mf1y7j`ER z_-Y`Y<-*Yo_e2dBdA+M&x7gqHJYUhHbtE_nA*PofdB%MYvoVCcApttlcGfh_L#Hy+gvVn2u1`q*V4$s9aQEEd6UqEvEfBWwA z#*!`NO^B!6+T#g{5TqG=(W0L0s_hsDXkdkH+$RNK(=uJtT3fxS@bWiB36m%@?oZ!~3twb_|t8+4}{6PvoLWniGHHi@F#5@i_V9&My-<|csg;(}VotM1 zD{^qK|6x%D`Vd~PkR_VQ9fT>85ge8^Hb);+K@jSB_;Uk41}tn-NQVCY00E4usrk0f ze!I^X>Qeau_)7eVa6wKrF{gjt0wqmjxYjc}ZBj+G!jLICON^TORYwK+c+9{Cu0GoT zfIw+lw?TWi7@mz=$W8MT8XJNXn6T25XF3_>SV6=k&A-DRe6LHJv zboRrKsBXTbF=Hc-P`b4R%jdjan4(YC+ianIULp^2*28NQ4kG!(IV0o~*8KK6Upw(Q zw_%SB%`^OhHdPjY-@Ff+nzbSh5lR}n{#r9U8ke^Cg)CK($lzosRd%1H;K%29VG)2F z&qD}6TZz-QURtlLJsIHs=XHV7&iC!_{Z^&MckgTdR(-k!AwJU_Br+BdU%#mAflEbT zQ`rVOENa~C__IP^k=3OZDJV;iJeUbJ04yfc8UeD(P zroEFO`6~fnZ%LneJXqRf&AhJiI-TRej2c%eqGvHGWeY&qqN{QJ&THoS^^=+k1|^$i zoX`vedlN4YiomHA)b;=NR(?Ve~v!q zi~$764c#WNcUQ2j)7fKR{rq`|^yWF~d&<3lYwp)v|%C2>K6MB=rHE&W&Jyzk;1_fnUPY%2|p+}}AgEFNP z@3Y$S!!FsAjqjSW{kp_$mi78Atz`Wlo$DJb=VJG@&P2fa2&qFdM40o}f9Hju6wFtq zp2ZhHeFQOEkr+X{3dtXYEglZf!bM+x{zv4TS<>pS87yI^mac8q(+=#>V_7}tpQZb@ zs>e4zU*K`aM-Gn`qLLXEQLMm1mCnhEPf;eLkA6|(z*ioiRr&2#>vuX5aLRch_ttw! zI@LXD?5{K=#7Fi4eNn>m%2>ywbtDE_bTl_440aa((R*nj_hg~)HB22Y)< zz}qO=yA_~z>U(>0u1JN_?gO!Y`nboJvApTGxd4%IyXrF|FCsNTT zrvzh-V?j|h-&g`kz#w;Yk4Ut0EqHl*jz#^w3#)@=0v?hkSdCAe_U{R*fI5?JpyyWo zJvP3lF&4gz1A_sc(J;FG`_P1Ld&^MVW6dAlZ8vYERyR)yXo~fZW`VoY10diU;L3ZT zrbR1;&$aE6o~uBvd*GSTtcCCyTuik6wDbARb?(^(M>-5oTnT3p@-`VBDw^HBhD5WM zYNAZ@(KdkrGgKzW@CYQwc} zPiun^RbpLlBB zi+jzWk3MO})5A~@K3ZX%(DX+lTZ*~?9u2`NLixm`-`hRa9mtlMd zb-l5~J&)!AJg3Ts&3W0vL?uj*78wWULID$1VCY&Euy_DSo5a+F+$Mp}P|TBNHIFHC zd~v>HCcF;_Bv)M@8BS9?FiPb*QI;EKmR$+b>(bT|_f?~+J2;j_kQKu*Udv^1443bBYh9C2KE)OclACE&GuDx-i$3Tl} zW3kzyY9z{yPId^l!cow-B-yY3Ns99WKsK{-n*_OXBGA%1C`iq)*E?EWc_fq;G1O{^ z(W_Q|!zX)mOlz`M9{Z!4e>pr|=aix(z3z{@&Tm7FPmgPPV>7@&%pEYF`v=2I=Z;lr-ciOn}zKQF8u6B5CZ9szcqNbLvKFn7|Rue zkBw5j=DPcM4URd7@P|FdNv{SP{^Au!&-x9o(na*Dp0Jxi80ACey5wLf5)Xq;_U9-5 zVTCkFjhhf6(|{zX55EMU+*XxcVvD^veSD^fhMHMqcvYkY9{T;)w>UcneWmkf5LG(s z1R<}{-QZD<-}-9)O34BE4*fX^5Ji*j^!Fq_Aoi={=pn;X6K{RGVaMVE)rRmQw@~kg z{D~0!hK+aGaV>Z@(!Z>TMyV`4gNioN_1rpU0Dld(D?S5{lzO>nd3)1XQtoHQ|AecY z8Rq?_U+<0jv+R$2>G|W|QUQMBclePX7~V1fH?-~K}N{e#AvEw;vQoD98D>bcdf zEjQch2jE(7fSQ>tH&=!iZ|_jM4m^D{sX2n5o11;TZQE=9K8J_JZmQ6_sc-ui3t(b1 zkUg)zD4hhl1w}yb7{d9YtmAY zOjl*N)`d+8t zQCqS_x*lmT#{xw5Hwbx=zyPo^F%3?vi{T%YD^Kn?Z9OG@1iyL&jw4?nHIw3GLsdBz zEmB_?Lw7$;HoUj;BVW|YDr@c5bkuO9lOR%LuH@#28Ma%q~|Zo@=;k*h%%)n-8&wc9Xgpg!K-ik9B+s_OeW+?FC-vML&r%M8ohS^GJy7RRl61ej!?T)Zh}1G|ghl940AqltD>1)&Y)V z0@jsFeyOPsE)8>ySJT=%d@Ph73U$+9;RSGQ6J*TQDj>8I}bQAy?}vBZENE-jA)nN!z{+0eQa z{#14&t#R~IZ8Vfy1n&YBSGgB<>KKB#*V5}4=Dhz5{b$$UC!Jutx+kmPEBgw+8{Tw2 zkB^ZY2Rx@Do4XpHIJmp*P%R{{ikO7xU$>4HdJaR`v30d9*n9J?AJ{t`yyzP zB?v1zF!>Jfm(FP_NLeu1seJriqRtINeE6X>! zkP_UvYw!(5_eMzf{21KArL2&ET8Gn5AxHGW0fu10Ec^9_u>#oi^x~TW1xWXWdv4VG z+;`nnscz0cj349(B@SamI&_?5V`}~Zx2INUl+KHMusHh>E=h-R1j;t-Q_9s5P82$;m29T}+#t&Cu^onhAH2<88&(-FI z*a)_-P(R5cf514#C$mkEqbrJp`&BNrI8Mq!3|AuDEl0HBU`AmTEbq(e5;e3kFY+IY9vKF?ZI6amRSphNqciRD96^ zpa?6ex>*MQB+nE{!_GS3mb%tcYcilE&&G9ZRJk^Yp@vAj7!ERWaP-=xrEqJp!wtFx z59tK|?xxCs?@GHf_tZT-Qsq(kcX!u!P3JRrQ79zSkv5RW!{c5tMYQI%e0cLnY0oc z7($}m{@`OR76KYvcX6`Xv?)(t%a$l%26b$&@0jLeCH>BSd4?1muKl|6)T|EZ=q~cQ z{(d`^<(@a>iI!tP@3)nMaqeP&BvNcpSDyM8qWTpASRjWurN^kvh?v9lZjMQEy9ClDFMaeVe<2r(So5=+zs7yl#+(T;DOybkkKyjZyR;WJ08Jp>EysGR~zD+*>+vB|@5L9eO9%M+YHy+4DbnJ-de$O7s z=*xz_jTC3z{%_A_j>CIb!l8zoB*SC4S?}GDg%6DIHqIWje*bq$(aK#zD_(`p1$F1A zq6bhdJCszjtpz-zUIXv1A>a9-we+!Vr6)3cxLlNSAjaUD9Z6B0LUJ=vtHPM3&JC_% zL>B&p9z$A7%Qz&=7wtA^h0aR>y#I%Jkdx3mHHzQ4(TAYwTxr{Es|l|c;wm6WNBal} zr-`oFlAU@Z`xXV>UydnzAmdosF+-2{_MJV0jW{76m#lrneRbQtjm||2yuU87sl_ea zP>ecRl=0{P_D0PnT*v$1l5X!2IJW!h;*snlZBfgh7$}7NW&P*HEvL9?p0rfh$5WWD zHX1X}*EajGhv2Uk*|vUo^QbEQ#CTEh6N{GKkU{?dl6V9*`3=EZylQ|BRqFa3BYhqW z*Z7qE2dW~!e65;dLJK^4;Hr#D<}EEmKPH7=g~ncC*O6G}+8j9T3Rc+=^w~8db@#tI zBoY#Ibvf4EDd59ebT)uGsAY_C!RxGMXCz%Vkx_{(y@e}x3ntMC77h9N29a`uzmbs2 zbrf#P>gO%!WbYmJZL&PwId=Im9k z)5BT224}nq))lDBunaCx5{n2)&+Kc!Xx42~!`Nyew~&7T z98CjM5&(TMD3A*EbpXF_*GG<`^iTBvOz)`h6dUUlB={$tpQWuFyIrmI5S?G?S$@`^ z3KVS<{9c!>UQ?a$3S*pO9RuH?$L4f`j<)N8mK>fkvIT2rQ57hJ>Sf))4@fgBf`lG{ zReyu2>lQ3u_Rpn;(EQ__qo_c`T>l9a;&xG6y#+?RZD;Q??Mko+^2xuIjXyi<-~F~W z;K7iy$gmk|!L;uyv#H>N=r6O^I(LY}Cwiz+`r;Ee4G6+oHj$G9BViR#JjL!$h_Wtd z#W}(=Ijl1xW-g<$^p`5c=-aT#WPF@W*X7fuBR7z;zX0K)VFR>5jM++5F&6p-)79C= z`k%{oGM3~d1*ppa1=6v=WXvtA?DxR#+fiA)y*6Ws3T2=)qw~lcCpd=X7n^HUE3BC8 zSw8qAZ8w8L4AOj=E_)D3)~L|Vh}I(qJIO_E59x3Th;+Ub^zdC+!(c_cPrk!#xhn+K)kiC<7XPYR}Hg%|ea5JaVzfaIV2Gtleqd zw_|Wq%CvzWasn=gJDNJ}2=AOYMM+-37TXV|cbM^p!h`V0^lX@m@MPO>MY?6%%Fc3V+p<`_9jA_JS9?p!16_J)VeFV$>%|nF;2xKp;I(%%cchd}{cvge8Q5oPyaH@J5c0Cz?jsM#qRH#K!s<)~ z-xk!>7vQ8*WNyegEA(E-=Gq8h-rx?G#14E`oOqKviJ^f!BnKM}6(txD2CcR20xnw0 znaZ}vgQc9+Q#X|dG0E*QU`>{}mFCREbK<)x;byN8wFy);ZGJ8U`B{Olf%R~JkX`q~ zSBj0uyAPJBnNGC9w{CwcBUtuw+~@Zf50`4BSHsa(6h`&)u}2&`RHoVj~hrRuK%io&&r}rx01)C?QJwKrV?W2 zMp^TM;egb4(V-g1k|*jPJ{67ws+zo4B(-OTYo&lc^iv_`Bcwg%QJorDS^S4O@00}V zArU=# ziRqGAdgzSQ84SD~BRztjn*mAeA6RKR3Xi(&(*1Vr@s>JLs@z@rs@9pdR%GFP)HRtg zdNf96BBGt-`=dWb1VaT-wp&Dsm)LW9{q0_u7iFJ7`SJEma7^^1unN)-=k3yhML`$? zKS|SVOI^58A@9N>@SH6=A5z?emM7SNeizd&krP7uy6PsNQx6si^_jc z3DzFMW(JE8zSb#Df34%^oPlYY4UhY_g2~q_%K-nZ>Z6ajq{E-2J1WD(VRTakSZrs& zz{`6XSFHIX;v=<|TaER*Z4g^kr^$o_+S_MM{NdS=)R2rH`9*|_;UrM8z7kqePOKT{ zG6i`pWr?!pJW@!Wn&zot@zw-&jCT>EL!u#!7tp2{3A~=wa@TO2O3hMl^Q+@D47T!88 ztpF|ffpSBe$PBkm-6}YQ1FYz@lcZg(mhkG+@4qyhZVQx#-%(fPA3*zjLC`ojq$z~S ztE^rRcN?>U5wX740}*`WZ+^YiqPa7w-J-Yp&p<`wZg`{@QZDZEg!q4+Rnt|{45FJI zCs!m!iWBM~VeN6~?n*`<^gGs~9O2VN-ORlqoOW6=zXng0FGF%wEex820+9(g^_{ob zqlmtE3wPs;u`l$$<3(0_9pingMdG!$G|PvTtVH{XnJjl+u-FBWbgNpnPH|PI$ZBCDE~ZAk{b|yeB1V$ z0F7)3W`G*QuL8ab6$J{KnT|eY_^M(g@AeCCmcISxI_pN8jt)?359lF^GQ~kEWIuEB zsVmL-lZXFZ68Vv{1)~4(06~*HXWtex{VH|_|D?3Hq~XI(wjU?3UZI-IJRcA6lt@pZ zpcA#9ZL~vlJ#FrgZkxaPcdYO7S1Hko%T~0MoZ$QyMP}cJTd#y`L3olwSxj@;7gql3 z6mhd?r1%1eT?2*v&(sC^Or8kK=obO>zPhgYE;{+RA%SdHo!g$f%U10~FYa4ZrQ@vk z;Q2{WiBVRE?h%G$ICREe4z@)RI7Q(CS)Ga~OuXAFkx1|4k?`w_is>k}X%q45>tl=E zi8T5n-w;c5C*F9hdg;9PbgDk8Q6e&Gue;0LQJY+$8R;Z}M)y+-`{fI}{M^lD{U4{8 zG3<4A4_TPh@dnEJaE?qwv2ryYAkGT9eDz!sd}*L2A?j7Y ziYMAOl}KmU9NnhQN3Xg^flGY){{9Xh%JCX-!0Ql#7X77iX1bptES{l+`!Dr&#{9fW z9(06HU0t{iS&B1)&`LMZG40J4;#Qo=cJQYoec>BzE znp@WrEWd$EA?$gCi%HI?o$pf&|ES?a{Sduf?ck3Zz)Yn$Vt9j1?mF*K?x%jJ~O z+`8R!QxzO0Lf!-nDOK|POB`*`@+{U;JfrppIco&}4mMWPOL@VVZRW4QfqNgt8gPGe z$OE*DK9ej`15!a{jj5hNvz~v{;4UZ@&~b9jX6dW6MJ2czt*hm?)I0972H*MaHpCi1 zt2=9tDFRwzY-J50#Uh1pS(mon1}P zA5$}+^@+347tpDY*Gtqv+e(>-Ot#X3jputZaXGmm&k{tMM7NR*BZ;&3)!&A1%S$rJ z*NIRz7GXHV>&%<9Gi2soB$O1&IpoZ^3!0UyG z`Cy^R2njE84%ywQ-6Qp(hWYK$14X3~^wo_w(S$1-{(e4j;`JvalnP*Q(FxaZ)pUWh zr+jGS8aEuS4(Ei%vA?Zb`0^2k{=k>Kkm1F{+5Mc1;Z7U&bVzCDAXruU-!7Mzh-sf9 zq#qT>Zyc zTOb6dPMTuS#az@1b-vyQpzL|D;+~B$#HyVag5j%9{r!Fr_v;=n5N5EqTh39#L}ZoA{c4v84+NSh`e}B4f2Qa znx;NL4EG?WKhFT}m+(EneEd;ND}4xaXGZoe6TTSzE>maYg3Re~zgqiNx=iyQ?~aoI ztepoYj4sawVzpX&a5l#mQO}n&tp1~p51K5C8qr=sRQ5oKDI=9x)^p9s(bg-Kbow9L z*}r?6Jds4h#J^=L&P$*$i)B9j6NtkU9a(Fy^h=vl&RfCBh1Z378x z-22rc{+{d~3+0-Jtoc_wk7%&%K;uQo`nND%@R#g56uSQyot@GMWdDd9WJVj9*&6}` zmApO1chs*xJv%?R7t|Z=fmMFqfhXR`ko{DWvpJAE3l$2ZcoAJ^b zt$$ef%!U&CdxwD!qouD3f36A8^_qJJn=3{K-t^&LtRHg=H~`|Bm%WpZuO{UaL_g$E z57mL|M|AX%>f_s7UKrev6F`l$(>%>(DBAjdd*3r|FVAm3f=IWBv-gRl0lKJO>y_u z%@?&L{$ZO$-D|Z4uAK&xYUMUB{%QvZl&I!`IqCR z@G!)(=?5E!KO_WHUj8XOrZO>KT8iEyWDT5CUxyB64L96^@*K^3KzDpX1{HP0mj267 zut+}SjGRZW>`s*blB;qH2|VbFN4^5HGf5*aS{MtlCupX2&)c&`3ZRHyy-v>sBvM;R zq9qdl(wc0Rb_@0wZsk*BNnM44&n2M;%J(E0%S2}6b7&z%*P=3#%WXD5H}Tkx8-vcs zm91PnMHX&0ZIQaCfoO^Upmqx$myhY>r+A+0V&I-?YStPChx#Qf(dy8fuZ;tZ9D?8jH9p0dw;#nNWnG2}a0-_3>D)mqiiM>NDn5G? zDYP#VdEcDdyv~2%sQ6i%KgH+Kf03Tmk|MvwDtd%&}@nQ%Rc)x(a`+`L1CREC^qd{JE#|5t#>*c+ox7t zx~jmLJnVxJ*Wd4>3SsICG9njXgelDsbG8ncj&B2M76>Ri;kkiXBinq8aSMUZJt?1d ztuwOz{`lqKHtL@o?W(_`XFS0lv9b5z75VlRFS8Z?`tk5~0peHcg8|3sFOq!8{=(jx z;?5%*OhvK590emUHLm88TT6g^L9bH6$t?L51+1)U{2(nLe&TAfsf!|2JKqtM=A0=f z=yIfJc2JgKMDxq7RGPR(g+q&LhBYJe=xM4v(qungb{RqHVTx;1yUV39z5e&1P!FrD z5a_j@i#ypCyU$QQx_)mrs&7wI=_tR33cvfw`OJHIo^FpCkm%DJz0_Su-l-6hU|+H8 z$BDo!1H!wI0!gCTX&>QP9@->G#OpaTb8%g=5^?ZB#K~_^^8Q!CQs(3!w?hg9V%MAlPt}5p_Sr|7;hWA^ zL}8m($Wj;9r8dGc`tLFPZ!f_slPybz{9Nbg_6TwFl4m?82b(C=9;MF4hkcDE*jwj) zt{Wy34XLxz&t~lPxyI9@gSZL{Iu98nEd$Z*OL8PrF@LJi{-&Dc{R|+0`FNyPp7VQLl^lrIS-e|?S#k{F=9Rg;vKd%v}um5oef zC#1H=mfV5J|9B1x!Zk|}zidB7NR!5XJ}}#y%Vh(u6UiX)*z8rGN_Q)DI*YR1y@)2Ht@G|BapyXLkDZkH=q6ANVt?>b#b;Rzq%N)S%aDHmz3 ze|eK=94cJ$VRt%U!c~l<+lL=k_D^J_50{+C^KuKxKMqc6KM4dXQ1H#u+FOXJs-so~+rUn%Uo zz7C`|{3IebwKf%{qmzHRKEzChNBCS@TvbxruMzn&c9bNjSXc`Z{A$J6wP=JPaqacV zoRZy6V)nD<6Mnt=ZN&J6@as1`S3~)BE_ceSV2QUo=}~jV67L1&tmDzqUOkrqE>T)=%SXZOr4Jt!j`w@Z9fUl0PB!#c_V?;81y^`K>w4iOX2e4irFf6$QzL@W0 zMm=Ba;OZCFzuL1O@EftL|F!p!qg7I|o^kGn-KclPVde^4Zpl~hO^>;*D>9~UP@k9^ ziL~**?z>g)l5`4HttJ@>zK|XMYpRkRBFT(Q1gnbKZ-`mFmrfcOJUFd^<)}}D&s2Ve zxpN+gGo0^s-upG}5%K=I+mWA%$OM}Jm<>+Gpd}e~kuocdy9Oo=(qy@&o8@rG(c zNP2(VN_~fm3(gdm%@mbBlTfz_Z44kfil|d`<^*b{cj^H zYuHV7BrE6%R)W^_3#84#nkL9bV!t&~|4-;89)ti`JYF={qG zyYcOQNMq(>eX7XD39=+9lQ26XXaK*QuB-q3*K)A^j~$qb1+Rw~U>AG|p?#~V#JH){ z5Qa#%$Ech#ty0c_{R_xOu&FO}Km5zD+rCbuWg}W~2rd3K3sab)KWFLRyt4pS`8M%1 z0+x8XK-+T$145qj;ZdF^iD662nhusiTdRT%0%agI!6C zd?w>@^{*#sVTjNWZmycJ?n&~8#bR42^-3J@_8p~Z<8EuKw#E8XF_JJqpa5rmrGhz* zD$HHMFcs7n9BDP_?Zc`M8U+_AMNNsrhA;2lHRGsS!dp0}=|}FV?b@}Da#-I1Ov}e0 z+VpCQ>$mqCA49F4gggmKU<%0|eg)A&h?-i}14_3Gc((#bnAg&8dTBgEz4W$9qTgxU zQc~5?R_%W$-CsFZsz$EpbB7@!C@^Lr?}cA|^A+*BDnJUzG4LHxbz%MVV5R)HXD8ZU&Lfd=s zwl}*xJ;V5`W&iR<)>N)eIbJPQxIG04izzpYPnmYP-U}->@>{`m-dL>?PCkVKsgq7~ zc+M90b!{OEue9$Rcihv+Pj{?0CAQgJr|AEu{%jL|>!Y><% zU_?!q^I8hqIc|^gohV$fs`?3fbV(1jxT_yVyv5e;l#0I91GNNnVqoolUK+(FlTSvA z`-g?JztvN?JTi!UkCo}4BPPSqm6Tlg)Bm|D2$4voW!H`W^nRXBr7*wKjz2{-yL|kg zd-N>n=dGrnjN7HeO%^edbU?Ditu6|(*?I{qEfe=M-{HxFa_K{dws8=JFN=y&sA&FDdr zQ5FHp7L)wzF>TrS2Nbzp--ot+18wP~jI*^Q_WA*l%EITRC)a35aWbSB4i^l*Il3~? zXYFA8Pv1*^cB#RO+#)8et29F#g13~zSy&;a^NH`P--P_A3dimwo)q4`5t#o&(M z>kkAF@?Rop?|MBmnN<})P73RlkI{ocO|q4*ruUl2#_-pUesw$hlaq$Elj;z}hh=P8DEBSDmjQqOloW}P zT=SZURtI0oIx@+FS*K?%0B|VTt8H)|MHmQEajgos8aFjh5zQ1SY zwWs+6-QV}rgq4GdN+yPI56z{|v@6Bvt^Ky;09ujb7sy~(+q2vHyEnJl_L9&O3`fkL z2kdw`vA>ZWiyS!!jR7m&K4fNhGHy=32aEVOnmD726^Z)PWdo?u*Y z5>G}F6clD&6*M1kkS?EJxDP|Y!^LlHkKKL70X#%CVono>FOC4G@uy3a_(w|aof=qj zD+(>`+U+%B0zd}@qxEy!j+T^jmo8#Obi{7r_MZGp$H6or1f1}X>B|%AWHu4PW`9IZ7uX1S!gyinZV{{pX_x7R zndIk13gxO#tmhv@$MQt~re8UDe2Jp)eQ8AFdkPcSu4SH{Xh~bGNlN?aFcf|aW#Q{3 z=DZ_fBqY$UL@AzW>C)FdkM`>jVRRRDDj&Fe;%`;E-*q1QJ9sE$_~92u4TScy>kVRq zvxso}Yt#0ZB`SREs9&6GR-bT6wFR7wq#EHHOmMDCFhyw{8UF&eE-@TO>&ywL@NCnNk6$Ap18xI9`t-PM}O3_qa{gGM%wmOYxNY| z6guKx{C{&#E_mNu`2Lu3Ur6ZB!dJdc`>dbq%s+pmb0j4ke|mi)dfl=h@`;M(YZ9sQ zfB@&(prrq95*eNAkRFp!^3D0A|JJcJf8mq?o1u~~{~7L_~)cQwjt^3^GWv?^M2Opt0F=kpL3zQx4kN&2i ztCf$_G>)-MtNJ^^yE6O-(9zE8Z7~P-lycmc40-?Dd-O-Vqvaz-i4gy=E|RK^G^2{E zKK}kxCPvNkKK|F4=+&Fger51FWZZr+JtUF_dD2mS)o8-Zr{?GR$R4%4Rjul3TWmOcQ`;f8$ve0)G;7ke{S4BFhkuSz4=lfFL8 z;Pe@?~AHa5zyN(I_*P2PE#b5oOW3q(##Joj27K5Zu?YIFofHj`An zv>Wq8J4E?+w&xFnfV+*>&lTY$r;+Zn%01u#-A|wW=?}ire;X8GUk&xH8(zCBF^1_8 z(#}G2(EZ_Ql)o|;tlUJXd#%tuH~*31?N?F)Dd|ZibJ=1K{fXvI-iMuP+8xlnSLx-j zCPn`xa<_wHs!jcvZFUSk+`Wwd>XFkQnR^S18;FaE9zT4;8}0WZ+V6)5yIsvQ>RS~! zkG7<9eEey*7PR|^4Xp?zc||H2jA`|)5C^+rz`4f}x!_w8%WkT7R+D=i11SgTgKx;} zq*N1i3Qy<$9?=*P6Lq{c;dcLqXcZ@jka;;zz5O@uqUfW=*Bybenhs{76+dS^)Nh>1 z$1=A$hjd^_*MT=V{vsWJh)lVYWT%Xb4@tVzkki%G*Zf3RQVlL|?(r+(43ag$hwr6k zH0p`UW?}x9h(;JcUv+im#?%_UT+=CMf!mDL5lZbCPG&2O66q{n+)3j5QMBE~*u zLu}t|o;vkaJo>xH|B967lfAEak4F&uCG}8AQ*KCP%0m!qWOP{03ch~lXW3m(olBbn zVzW>Dr_&_eGU#KK$#tKR17bvH{tx9X$&nh4ZLbx&xGKsj znPqBSwYT5bUagkiZ+JwhSp37v9V*a7`sNAEeyuPxw=mv~?bZmCknA?0f3`cbV=_%z zm**!w#T}Cl9|MyqvTV@LGQ7{za*q2bj94JuhQT??<$&RNk~1RyOhS?$i+ty4Q@zAJnFT(+@R&o@&a&} z?}#o{xk;a**;Yhx*z-r6(1b=Qky?Ip`i1`P)z$C6J^TW>U>a9>^ZwIOW zLDzN8MVeCz(w35(uH;+74t>AWd=s>fpq31G&^SkIiw~;l^tukVb1W;8YQoSCc|XvnPvJb21c`<{wgQH6{<6%>Qfq1wgi-Ai+tg> zgl2{o&B<^Nc3K}6_n{HLK0;yUHQI$QGw6oSITw$gY@wP1!nbx_JvaLFSw$*&T(S7O z*Kxe5Ug*x_H70~}+Ve)4tI^=8XoM`Aj#Oj;tLtr3i^%4I)kIZ8V;V>E7E)pj{vGP5H&s(yrLbJD*7H<7pdeo@PZ??B7go!TW zj^(iLOi$Sd-|o6Qw;SjiZ9+C5HFj*600QQ|wDY8jtJ~6TU61@6Erms2T}r(VZ#m02 zpwft{|8&R)Iesv8b4R@tb5?2uQ1CdanYwZLeb&Rq{Rs$Ac8zRaSS1sb2crk3R)g=m zG!FfSteu&!sq+)r&2ZO*y6S-}U54bXK(W35?mEW#Xcz@ohHBd~U|-%o=5T*EjqX^i zFOjmYN|;MPFi53I1ZlZNK|2j^H;k4FudfE*!-Av&ctxpyYmK&W6Vmjj3c1f8gx*sv z5j3}5NY<;EQ4+;gaqZA#X})D(CUni^Y5wAa*PbVRmWD#O0+>bPXSDQ_hNe9~)E9Ro z=qg27!INuth=KuZ%%*XwGmBwDaRNpnKF(c@j8SIGZthyyHS?0(sNj$3J)gkyPBW=B z+HAtb?|uhFnZ=j~Aj~-%Tg&7Dc^83fvQ~WuO=UvBzdPl3-1bJ~`f+OFaAwG6!sdTz z<>XVmC7;<>XTvbr&(L&KJORb3l8|}+m1LT_pRZH7#Wg8{Dc{vEkxCh$OtrX`h-{f! zT%pZVn7ANIU~Gmskg3?4{a+djmq$WqYxjxI1lS;I*49Iv+NmIJ=c73GO=zytnsT+! zw-Ilz2lO5;Hz2y4KD1>?XwXesYc}bIOvF%c&K5)DpaeO*wK){W3K{0`iJpoZbguei z;x#pd)lzuE&W8DW+RXfeE6c1&2vI+I;UERhj;jic_ZhFJP=vMgdFTI z9iHmEvO&!kJR>34H@A;L7@5mcmhPZZ6u<%9o$~SKX)odrKMkJ0V63^97$64`=9pqo zD^8rP`178Bo(6mLa7X2%W;9l|Dk8<~>7XXnzJpkYm3psyUV0ka8%wbc#l(Rer9u8) z&;1RMIMQ%V8JQs)gD`$4R4T0LHk~u4a8RXUgja+glitbtB<3Isa>iP&s+h_%u-+ZK zrqW1F*FfI5V@YtGTq$d2LStOGcO*Y1y*uUYnRVZhTB@HhAH~T2Y~)^OWT!iB8X}ho za1TLc%RWO(Vf=l&xSU`c_m>jWl+Y|vY4mAVuy@~J7-)~V-Q{tY64BH*ueMu&r!o-@ zpEk)42?B_%Nj{HVs!hGPz$Xi&gHT{sX-df1hOzxlF!O%Doa1K+UGknb*O#jsK#yg$ zc-)v-f59D=A^!k%IRg}x-jJ{!=c6uWTs9xlNyQ@t%0c*il4WB}jye8KT|V|D-J^l# zSjgS(&oWtGYe_$#NvUZYC>j-h^c@awQ5)vH4)l}s8S+Ms@D9>uKO>9 zU?`bB|ID&){WcO!x))DWbOkY={uh@V)}woq6a3ncsw-ReG1?`I;sA#s!&A<;SVf&* zbGLs#mXcWh-2SoX@?J-0(3+e3)+dkePA-`XiRtm5O5YFA^r4IYJe%Uo-c&~SNTrQ) ztyXx)&+nhp97NsXl07L4a7$9m{;W&05hI@;u3-3Ut;x-W43Y;nPyBcTf6VP z6DYGrg=n#~cNLFpo~*Y<%XaeLGc3(9xjR8$-l)?ZRuXKjB0y4DI+`|j%j020_cR`M z21S{3xshniT~f-ztx><3yITR>@KoLH60sxIm52HGzVXV0=&EJ)pRWeT}DZ26KYZ6Rx)_k;t=Vzm;JUKAcPebHy^*ddc+^~C!1`?7=)L*zC;b?ii3G0Q*H2;)n?${rdT?+ehQPnJb9XZQ zQBlcQ0(cGkYvXtieAh=&}gB62PKkP+@2b6mNluI@nZ=Mwa}?oc}S6hVX`5mZrx02spw+ zk_M<87>+u;Y3YjyB`AE1ojuzq0w{)KBB}9Cl~DXb`8_`kcC;^&p^gTtHL9|yx;!+; zSbLrLNzz^bRM?)l(3@j2?R*>Vl6Penpz~oe=A%Q}ZdF;Dz>iON0;{`eiRwA7pwugj zMF;sp$}ZogdgVrqe!dThA1p|IJ+4B<0|mp}@jaXx%&Hc#Xr@4GF5{|KWWBntWA!8S z(l~rBDLe_)WOEOdY>L}zSXvpSG1MyvgjZq zkl}!L3(asKS`#AGsD7O<++ay|9Pg32yRsBllu$jV{Ai%W?1A__sF-al8-2EA*RX%A zp0yr7MkqXHuvnSh;N+7Vj5el;!JYA^3QD)YjJ{=J5DOOt)^qt&GZR$o;c;W=eu6Kh zO|r>&WkS}UiJSSzk{kI9oxF`Dvm78A1S2^kzY!gvd6TWi-z7A6mf!ExF-nV!xLttH zcd_?Szjc2y?{52XjXYb$32AJO)Wf?_67R#8mb76)lFoa6QJkICdIf`bTxv76j@6HC z3hU_Gc~C!{G8?Psub21dgeT156nm4Si19EA6_-E}T*IPaQ63};a7|KnbOg6?=kQ0E zo~2&i*7Zck57Yj}FTZ?pk3OS^=k{>b38Ih>_zDB_ch;^aR!T@sPH0d(N-NRT7Fj;N zLdj2Dc$vSL^OL^%(u>z{X?8gVeHT3+_l*>O<`0sPwrIU)jmmS(8JexR{p~ChMb?HT zpZ21fVmgZaJxa3+fKH>)5Ao`WXnpcW*MoB{?-$W~fiOa00~Cp~Rj*nO$*{adCAv>{ z+!4LT*%U}Ux5u}kU5%ggqnl*ilUkQ7lZ&~ZieA(S-~e$=*i?QiY0P{u2_OhS9{6;1 zS{}blg7x|c5Y>Yjy$p<>As=;>1boTiUwptQ7QI1V@eKDNR!QU0#(b~E${{PgMSd0S z@DrLM`onc#t1;j~aO_sb0KE@npC#^$X+whJqj_^m&N;*x*xmb_jogZFDy~#Sjz%@H zHX{FA=5O?&XSHnCW#rFK&R4kHSiZQIifJ?atMkJwyWm@X)#IJJfv?DovrAv)4q~sV zB)=RFnk|Ig3v!EKAccMDl&usYBJZ%ja)cL!s?Y`hFr+EE>!nyhlJQh>2h5D;Kd~DZ zZBnEdHOgEa9D5C!R~WofZjp~AetC8GBX4QRu;<%E&RKj(d+=2)Yd38ty5Vy3kYr7jb+OpL0?+8-4ln_0>RSGp%)H`RUcf zvkKaTI|9Y#`Bh$gNsTj!wbH|5cMSOSroaq+ztUpeDs$;CO0uzm@jt9jWUq83tBybY zl(9Gwk~(N0-g#45w20==w0G`0W23(5UVbRU{kE5;T8_%{^o<#o9V>~{6N5iSpq+Ym z^{71%F8rfuB(JQ)bJo+4HWFkOOuq}a=jfd5$$G@e2Xqnjr+R^ z-?<`9BKdNB zy9#0uSm7;1E~d9KX_$H{iB+$Nu3B2WCvK2jVELuTrTCK3C}X)|Sd7*F>T;&lKJ22L zZKybmK!W#TkJN@}425vf?(Ityqy0-Nch%;-_Q+e0RG8IXGIJ2^gDWX!QVkos_)&eEyK`S;cc_LCd}+R2jb7+=(Va=$ zSeB^aJ)r-+B??CG!ZldSo4pVBRT?V#IV~Zq(xR^wi_&4E}MlmkVQQeL#@uJLdf5_Ujb`LAc(U~fp*xyM+GG7~y9P$maFxo+E)=Cw`U z?W5f$utg55aQ`2=md+zgJ_~&>Y8w3@zY_k@wRS0GU417Og4MFj2u8=2U)0=ZAT{~c zithYQD!mJ-8$3*aV{{YXgn_@V#7_&i`s-{d`X9ws^X3Mcqc*t>F8z7)eVwzMb(vvB zqTAS;4HXA<+e=w2YvnA@1~36&UTpg?sNJ67;^t<8p$yN@kOHr0T6Vf^s8c1b(Q^(It!z#|tT z(-YT1ZG`?s+^Lh}VIJ^{b=~nFt2{ZwWOZb@`00qH8Za&-=GwL_*>?%^EQ~r?^&^0K zSa)sEHWL}`|8AMzN&H&Vd zCM_-Dn+$D|ph*BT50rLItsoNQy_u(GY~qLEcc4(rVFM+Iz+QgJer~C!^QMJ+u5o-@&T6X-g%FjY3jv%o@Z>-LDo#eu7!Z({>Clu6@no})zDN~zAwDgA$+ zVDF0Zy9eWjz;7^P))N6U_Sr@kb9cf8brA)x&Pima@D#0#=p}l3h+TZ#= zR`h0cx%V%fk7?t@Ef3*+FX}2z;VlpB?+iG`OcgH(SiWvN``hO<7M}$H*ZCesd}vVE z8LR8qCN0G6BcWM$jzSRG+ezzpci+gDFo4HQP_`{DuX{?XCw%f+gtE_GCM3nI*mhHU zcISXkLzvR&Vpqbusf)9ydk}El;!s_7m+qA-HsFuAr|YW`OvllEFC5n+-k1YC?7>v6 zJ1m}?W<_Z0+x$2DhzZID@7B~P+8q=uCf~yXU^E4QTJFzvx-OSPr89DE_GeF`vt0$S zqQSNR60m}^B=#F{8E$U3VPr$Ei{74>$OA ziX<4sgT}LD?+I0z{?_Qy#z-uyZKV4ey&EE!+2eTJqieFi`!2V`=uzoKXItVu31^+0iGA{PUB8!DlRaYcO2e#kzDQcVn_zyKVGskF(A_!b zbohd+f?Z;42Gw}ZhG;GL zJydb~htW&;*;B#u{5G}ub4z_-+=JIO$9giZ7`{i69*irt2F_pI;yW-h3 zT$q(*jo#%p7}N%M&rHBxV1E3t&D7^FMtjj3Z3sr1=;-5}{d24z1kM%r4Ij;n6&S7H zt-Y+fewT&~x+p16R}qjm0HTMZ zppX@+e|enPCtP@;zk+MBOHR5x>8LHITAlWE8QCQz(ZsN~#9hXK?HDa1Y@iL;2e%u; zLzA|@-bcUx;f*;8lsd+Ue1RVo-Dyr*e|)qLU~MG;7Y=UR_ai~}25^3>z(5u_e#Zc! zO{5vpbC3U@Q~`B>f4HJ!?0u(PbMPN6&nb5|E*kO&f8Tr+M6lo)yX3n6D#!~ZO#BQO z@?TF8Z|*t+C4g+m)cI@hE`&HYGW9~4KI(=JLxy&-P~U!vJUKLxqU=mDZsl8Bbv5cy z5BthWEUQm7vN#CcDuZQ#npewNT1X*lS10V$R`5%@8wg!kg)=^BC_UQ@A1}il{D9gf zGp|=|1-+!ZX~mc8X$JM!ES%K?*1Jw-m99WE&!HQWy)?Xuy#psv=9zh%4eNpPPGbD! zflceMp&lO0nvxWStT3iWt_>pptoY<$k$)=Vb&D8gr%3lwl46i$#`lI%g(;w66l;oj z46;^ZfQo+AETYyQb%>!Mm^ z$7F%~&R-udE&Q8SNSE)v*`XfT>%{8N<9x1HSc2HBI+&R)g%4`Ym8N;uv9dhm=iubt z|CjpEf9c75H~I3=c7n#4%F1|R-q=@MqK z36?pHJ6L{Wp2D3iWX~R4x5Ep#5^ z;Z?_&k!Bv!Bi83trK90v6z=G?{lHh})=83vFt?`cu#@d?we~{U^ZQwgM^<>nK$7fP zXrC+m_0Y zG^8TwiZ}>Ji>O&mAo$m6&|LtLS(A*_aFHt#-JvEc9=;I5L4ti{P{4BT0+=pLR-n57kPCW>y z;NdKxw|TL775Wil*CzO59(A0iNE$>W8TJE2`FIjmg{;yx)+Tb`y|j%Ub*#JJTcU2J z+Lj7(+WXjg^kvRAMGTO#3-~>=%|)8SA1ac>6EUIyY){0e{|?cQC`HJZS_5 zsJgKTEd-fle-9j-#y}5d>QblvfzK9o$A<79sC%@lS%L|7X9Eg}B+(wNVlR+zxQUsz zTDB0JlUOlL=s8^Q+q3_-8fpONspI`>%;F$$U7{QT!EC$&B+EHQBA+2$~suM-EJCl(eMJe>FEK9p2b%{1A!yJ zt~i>QHGm|wWD9=OCCc1#5`t^6>7*sml007bsC+c5*CpB`*4!*o__Bp~xQNA@Y{-?J zB;<|VlmB)1@np8@a*m+A4pEBrQ)RjShYLPlD9UTkB0zt&Je61G5d;Gry*uD zD?18!eDxG#{Axq4{JdPEl@%8SFm`l3^WZm~`iy zV4X%w)*z@6jWA&^@HguLS^R*tV)!S`u)U>j)yA4!~Ca74bmCm9xgS=l}D`P36T=EoEudzDl zIei|RC3LndF)Q<~L@aWw>tR>$M!dK?m{bocBuZBfoPu63cdpL@$A!xiVpU$Bo4)jO z=qvon%2`d#&*_x?lsfh=WO z0Fs(DNZqNQJxA9Vhu&viV+WqmUOKSwKtIb2IH#L2R&fEmB4b_3UBM$GJSf<2V)por z5=q%NPgC>(Qu7@d8001R{heJ%%se?@{|zY6=&>pGzwuB-z`T7i1zq42w)Z5kzZ;HQ zcwWQ|kBN#Q^fIJgyWzU@1QU@HMW1KA&3r13N68(%Fo3vq`bcZgYjP{0>TnRL=Eu^R-F` zAz4B0%82FH+nnujhAxn%^y+Cv#B@#f=h@99q&&nRp8Tw>30 zRagpzWpq7_ub#I@5U2;INZN{DEp;kd<&fELwpZc|+kk$0rrG(uw?ua~#tY#Kf&0!C zdog2Oa^1miN5>R-x`SjT*VpsL02%uKP;vc9x1L@7q+BEBjyS_$poivZU2T8WDp$0h z+uKotvZXRSFePYBUgkk;VCh2RBgu8gpwb1C6-GFF>awaro%eiAP_&Cpig~sWxA2j{ z$J~UB5m{Z$oS>IU1@TphF=OyaNX^;rK=Zo)W=5PW&q8~4&yyFA6idoT(#UKz%*p}v zy15SN)2e%!?ec*mxaxQag_s8c(&!F3OYlPX#=Pj3w1O9uW0nrqz0C0g=+ikPyR(Aw z&ZUEbjdT+$Pb|DA>$?gtR`i(tc(q!~yeGE#R4fargH(#CK)-0IN^}!Ug5!W`#A^uPKgeNjsO- z#*C$55DCamKp}(xjXINO1$ilKY4!rsD(CanpEi>4IEZU89Dy4x zuh%q=U0_CBvYKkvoQoAs;_HdSzXM#B$jTwZQOMak*ah>nG}eht$OWa|W9kfrd*s!DdDzC#oloQOCvIPCK2DyK_T0FH z?0q)Ajl0(0M`tH}>M{pt)yo_FdB^|N+xO#q)2(3a{g}pRLP0Z3!pGv%%bVX}5+H1g zjVP!FS-L4~H|0EXujDkX7K~+!X^bL_SHVemrsLv&pQ>n4@UF?A_7=NAU}PtPMZYyR>RIR5W)H$XZE#!_MK^SG|V{$OcZ31Y_^ zEfo0982x$A9dDLzN>+nPf>U-g{YM0tx|mB z!g5#vddTv#Sk)ofyFS0(w5iRQw4@vaq{UD2cWSmzOD!x)_Wf(E{dlM*3QY83qf;!^ zX$d+{dJ7cW@~NU3-{$$g-Bj8Z1Y=DGb+;Jh?QBd6SxTFYA8hb4F0vWDQcZRIZY8JVmkkj9}{O6KlV-2 zgq^Bo<~@r+=ISgqti}ow^<-ohW_W~&Hfmw#u=zu_ck8k;UAp10eKzey*|S!kZ|=Km zqw^!rf?7_!e{agy*!im+@58!R+2jXgXA(XV7iw_6TaV^P&YBC#ebfrJe?1L&aIj0Y zUAub@%OZIo2x*41irS*QQ6n^&fT|=2_3he7@=A zUKdQ4ZF=YhJqLuwJ`L^d;_-1 zOp#U0+x9!5dfUNccI0P$L7(#$qbyD4l=ruY?X~&4Srt0rRbRhAoYVp)eqE82`hPTi zcU)7+_x9Iy6)T8{fDl+KO~FV{C@YFss6s@#5Gm3^XrTn+DvGpVqevB4S`b1f)TltB z^d35rNGO5C7<@+j1(BD&?@8Z7lVtjyJmH*t$$1JRUoVESMpR0ROO34HcldAHxfZvQa9Av`^~{MkGrRjagxe24>^iL&xnVtZDbtM`$OIk z|7ElZAz(lo*G;3#F`&e4Ncj8t7+rbC$yl`ss~HReEke?}rq>pw`RY@A+Q&~!57%#jy`5Rdkm>mc8M4DV%) zr4+5Zv42RrVm|ge6b)zeb28FOQ?y(dAY=OH`SgM!Qs znTi_T`zN+v@?4OjLR2oLc_n#i3*k1yA8B(w-g40J=+pk4vmvIEh}QQp`l@Sx9V*)g z!EM%4Q?th{i-`GuVvK`%*st3l4K}oM5@lV^Qcy7vjT?@E{03d5LUBaYsSsB2_>5&# zOMX@OCyea9jHG&RoVosLeGZ1@--a#23HUcGIoR;|%2Q#+$?Wf4;gyd^LG#%bl?v9cmy1n@ zEf0D&JDMt-+Wm0IC=TMq{aK~AZH!nd{yb#qP?YayW_xnsnVi$LsfDDn)iD7cXy5e= z>{m^YhBu^hzy$jsWl7=8kflgr{_s6x@l@;|S3nxpc4Xz!SxWJ9Oa5ZSDnhGwud$yBZoF!xUC>PFmd+N3|CD~Qr0c0 zth7!bcVq6Y1^2>fmZU*hLj@jX9l5Bmc*08~=)KEgaYetSZf?Gc;pMP?%a)J%SFaoQ z{DTen1C;y+B<_Df-7HpG<1E-VvRMyc5;U0*;jn0@wz0M=AhBWNg=`jKW4o=TV{FHZ zD`*OxIk9jief(uPc1IeRewueDh1yJ|vC=-8XTIm${cmw<;l8m0whM}7E z>b1?JnQ8w{f(3POC13L8aqQs=P@p}uu#6;C0(xf(rN1%b=WY_5R|TKvHfCRM3S2rp z$t!)>*ep<>CbSS{7QOVr<)9n+0{H~{->W&5-d?WcPi@%4FF=6@poRNFx_>d!nkisd zS*_4aznP8in3()vV!ix&u!##JEo&6azTB(GNK?_gCblAxWS~5c(R?t8X+u#j;IZ5G zAggMKyJN6PLR?_>rLWPY*dekbs&Ktvpod1( z{h0)Mrv#zj3o?0es9FYc>1t57>8qh*5cd;74nGY;o6B2ixOME&L1;NI`w-=|d9?QcRE5hV1~B&}KtLO9bWk^lIRHA>mn z2G|<~6?2_K{%kLTLk;b2KQ>;Mww?h>bq#TF8%OSQBiFv^!19;+qPFh=Ba3sJkLb!F zP1+cRI5ZJL*w4OD5423KNeClK87CyVonr{)k!(0C!A+>X+|c2n)BIKpRf*iuB%ylO zMn{(Dxk@#9-Vq;HDkIV3JTIBLR#VB(yEqc|&8S1;b=#y-%f+KZt5F=A>ndK(2XsOP zc44p09%-6Cnwg^#rI`9;Y)O)UpOn*oS+M#iJtyoBjx=jRM;Co&^1iP?z>!za`kX1) z%t8IZDa=YT#R%+6R}Bny1kA%d^rXzsyO`|Hx;`uLwxqgBU(fG0Jf0aQBWehIF_)r}?)_3183~ z&hHbj#nR0l@iCBpwuhcaUE7V)4)Nh_3oyIU?woo5Khy-=y`NsFF$GV79d>!-t^l*O zC!J%k!!diLAKsyCCgmrf3AIF}caP}u1;jAJYW`*p@{d5Pi1M{KtupT%O$TrW9kGs5 zfBs-$#{yAO{*eauS7RlcfyVAet@BUnx}mEFaryKIa)(6(3C!&zE8jp~Ar zb@ZKHRxvzV()E(rlNOPB`b0156TDoS$4i%=tD`sevO2*fcK4xl#;SQvSwlIeiSe-m zbiF5%GwLwBt+!qsvAc*E-i1!3AB9LHI&q7Q{IRGlXv22VP&uV|xqU*CfwK z(OO|95c z*9&|bK61DWLf=b5vJe(iC-p8~$2kLjtL{hVWPSaQI>3Pu!T3lxU}X__)UT@`6JMI+ zI0f)@QKp_v21qT43@e`r`c&NTd?LkLdr!Z5Q!N4Lx!DyuQZorwKM(0OqEYy(gPpPx zH2n{kB7|ir30-a(@pL?IvM9r5b?oY{zD|fMOb~X%p%*pyzHhV@Wv@bWP=C5Qdv^L$ z5|U`n`J3BwXJD_eynQ|b?9r~O&N2cF{v^bc0qv@DAT@aYF-f$Fn^Yx%-W9$Q-tZ>P zU+XnGKgQ3B{~?K5a4q!Yc#m&5khbB$Q*L19+JhbU2$eZB94qB;5}pkKdq!DKWHYoR zK##bnI~XE9_PVMvy+pIGz^89LBVM?I*HoBc3TEm(`R#?VQd3FwQGtBkU}-jQ(_`eK zCj7ZM>Iz-3%ZmtXSA$|tsBh2QO!htP|D@%p3I?%Ur}Wd4J2JC-k&chJn`x>vAkr%R z^5o9ry+}+W)_xR3(H)%Fd$>eie-K2fJsCC`cz7Wrz(GlRD9%1Ilxy9;;qbL#@z5l3 z0qvU+(*NPf1cHHo0#w8y=*8-+^0ZGp(%d}oA8yam#$MJuH6Ou@BeZ=4e_QOOJ-2ytepU2 zF<^2cdJH((6UhKI#BpXRNOlFIIEqo>ZCw6iw*W#H0lSAWPO-5LE!$neCc4d%By|zh zke}2Z=kMT>8W%Eac*m^vyaYn!Oxp%4!%qc^G%(@R+QaHYtb1IFi0QQZC4`MYv^#h5 zJJz9O+gqo2v(0#V)2fZ-54Us2(D~of6E`!|ibH;O_857L@%In*JWk-=NmrTa+{gNsoDtt!!4p!s>|I(% z9ld-vkYqo*g8ILt&j%T6DZsgN&jCc%>Df2&S`t|7h8!bmEO8C%fcSpLF#~4OuA$S&8aOwr~$TgYPjkuOf z&P0(+2pv$%evE%(sD~-J_EMeILTr*sRo0U5b>U(xWmqHvBmO&E90z%qrd*LhHu*~?n3SNwaF<>}bcoH5Z&;**Iqrvkiu#?oT zIEsAdJt)JAQWLLNvk6d{__`tYM)PaF>r}S-8)EY7nGf+gf~(|$88r~Hta<@j`bV!; z)Gu0_9(U|}1AmrC>Dsp53`oCIkkwEeIB>cSV;2{3HzDHJ&nGP#u}}Ytl&TW|9xrUk z%@pfrA2p8h$AF1S9yq&%e@OD?SIT4%Yb2&!xJ42|y#SS> z&fP&}*`X$3)gZ*h_8bwk$+rHQ3){b^|8~8O-&)vdm(zXs)F>6M@b7=vvg}g)`0dh&?=K(N%Fz?|lPS7^80T(!Ms}5t<80%a! z+VXF4@xX3*utWJW`W^tB`Q5;DT)n)8Z1^{Dz_e;QDOXz39qK~1 zY$;lhYCFwjY?6brmng{ds-1H7!9mzk;A)CfdXKpa!I1%pdW8rBp>{}Fy;N}n_p=<3gPx7dq#9d5+_x%sloUY?kQ_tNT17{RySIZqtey3><} z^W${q26w~2bYq&0hHD5+Bi$oqw6ARE7We1SXp}dBhcHlx|4YTwXNj&gC1)%J6tFf@Hq}?yfKMt`316 z0G=1p-Xvnym>Z}8N7xtohdfgs!5zmKJ7a^Z;&3mJ*DB6Sv+omN1dg!-I+g_^8t2aG zevD;wu>N#&z;9>$h{jp1bWemwo>%>rF>!cJ4A(u^-MEt)5qhlgW3UnRFpTbBxOj3B z6F^D*C!d&o*K*xPz)qDH<>*R#!SO=Kd8St;gLZ2M1~ge>uxql;e_3vs>GE`MzJKfz5GSeYT@Ij}<={9=55C1XuxW&AfN2g|m z`8{)OSur1e@6Vxd4vwIN(N;^Q-D-W}!;g$;9FB$k_IEdLsUoOO>~cqseG)5epX>e( zfXh;}>1i8Li|tC@+JSdLr--RCYNI<&0r!)^nGL2`sqrG2!0?D1;Q3l+gD>b*{Uq4j zcU8^|ckQKGeJPyk4xzi1^#t8dzLMDxDax@~qMO6I6XkY!Nx+f1%JV9(g=bz;EX8HM z20mT4q*Jzc>a42A&wIX7l%4w#d$|;)TlHHw9Sw@&qCP}@Se<{N&sMl?W7xw4?$A%S z|48Ga2Uqc69fj9XuDy3su`xW_i_1HMc&Ba-(MFDD4vdkhB{L z=q(KZ^fGJ+up1>-GH<(OX&3$ST2WwdnT*qecaCadi?%T+X+Od9c%lFc|53JS zHm_n&{@hghm})Y<5!~pFav;?TA4l1IZ~Gv$K;X0BQ{HyTVJMr}whuAGj5y<$_IPiQ z6tn#8OEr-)IMt(jG^a*|JiDiK=L5VN(4j>Uy!%Qk;}E0fy~^rdCMRZ|Q=!=vy+YX> z27~~s&Xw9g}BFa-6cAOo726)>*<`zy=Rm0@!-0h^E<<|(Q;WoL6b=5t$mf^ zT%WD{bR5v}-HIp;<$b%pLq@hkPHN?y61}?DfJN=a@r{?UqwBs_uquE08UQ%`Ub(un zL0+~_R?G~uZYkW_&KeD}RV%(L)|+W5uw!4TTRmP@KW3eLE;B5Mw?bXmti#vo6N_+b zKTO7duInt(Kb@$KG*#L+iRgWnjT?Nf=9W)c2myWfnSHn1UMK8c2&C+`HJaiKnku9C zWb$UOjGrLlSm%t)(bE#9Jvpf_HBzk#j(W)2tIB8ZPfPL!f;}-Fz$`s|696)sn!uL6 ze5hJraI743MO%4?OQ^oe(2AnFB6~f{xjz_P!^^LLQy1cvUkbxUvE+u%4_NS#&W^md#Y; zwzmGu=tGcq^8V+?=|lYgIQ0&3n>gmq!1?=vq6pzm#j{7#yBd5gPuGXdFJ|M`8Qo&P z0}gt$uN(Nd_OG0&EV?V&>yY;RmT=I0gEhKkZ?=*FFrFeKZ9V!g8o_2BI3&wuHW08) z#wZ7l>$)B+%Afugn0I=|k-^;Vp=>1`ZL1J;WLRVD!U_rv9XZU@>KkX3yalQ^S!Aitx78@=H+jr)!Y~qo1*oOQmK&E(&DdE z&FOPL0W^+PT~wrLTzrvaNK~W3$dqn}e?YHTN}02BhF`V}t<`=wFe*SzW#MqwC?3y1 z>j@s7iu7yA*0I@2ILBN+8i8r_!1?Hhu&y%&o1}_Nc++lx`vO9S6^Y#su|!6|+lV@-u;hRUW_{x8a^F$}<6=NHokGm|0$dL;k_W;30N zcmQzeJ~DOm@{UzNuRq}RkZGyE(Yf)n*DBzv|0SVy5vk)|Ju%RW9!EVG9$Vkvd>pmr zS_KsPmq&%LLpfvKcJD5keYgF(Fbq~KsSWH=8wE@yk-#bet|}uqo;uKt%(|};krn30 zb0D6iaCvOJIy~Uzudv|mZ-FgUJcq!SzqZ!{6JsLV7DjcKfntQZ4&o7awAfWo;RsWW z2)on+nQz6S-JVnG3p2Lne-pZ_*nm-1d+UAXh0D^-PPG-ZX9Aj2veH^j`L@A4J@q*4 zzD8bA-{NA2g=$uOJ=rV{au0m-$pjccu&VjgOR3BM;fc5Ugk*JT2*JZ zTeCV~CgWxspruP@E!t5wN|<4cgBr63Hl@5w*xyJK_9XFq#Wy=;v>r;*dOvuEn15J~ zEIguQ-`T1*tqY*e$`!t?B{VtkR_4Aejqz|CV$VFf+Rkj;b;EJ#QuhB0_|Hq?tT=ye zS+fjqgsQHUrlB4+_>|54k|KAv_>!3`Fo$v2hF*v9y#($POA#D0dDB|(QHdE0_(mO? zt+nAqtXT_+mFVj_g%bEn3Y3xNBQ7|MkND=xa7XsDXLF6Mvk47W;v5p>l9P0W_vXz& z+>*86EUZ5RSVPgKg0BaXbw)4_;v71Vpiv(kkl4;2R?V(Z9uc%)vIXqak!v$=Q^5f# zew5`=-O>_1r}Sez;2FShIbt_;EId*?2*&fFZ8yvzwzk~6BTCZ({Aja5kylxbXGes* zqcqLe4J+7tUilq=$5HpG_ z+YcO?wg!orr)2qC;-W^ozndJdgLNq`Kw9w(k&WombgOHH2kT2+`Gwfn7&?bB(Vr0U zw>Ziagu0Q?gxr1U-VMj4ZPL@;n9vRrpP0T&JEPlhB-~l}%$>Gm^NJ5IGtP9wkSu)8 zqun28S|w98;7*Pm4)z9Lw#X^jk2p!bznDsk2!?n^{13A&Q_eX;$rmy%jj^0YMXZhm z_eBEdRR&iVFm~p3+x1#o0ksJt!{(Y%H}u)V?#w4%zYs7JoenlH3oKNa7xw(Y6rz+6 z5J#&8K%(2)>~|$qP8{8l;b#|NQ|o(+A4@69uB&?Ok8euMw)Gu%*C|x`I;HTmPr0k# zH}Lbo8{K!{V$TCJuFKn8pLZY;O|=5Si)q$!6$X@qCUbF{Ubp6Q#^LOsg}hgf7 zaomSkZ{Mdy{ONmxyE#I~>oK^ql^-AWE|m?*SRGXyNDQfJ;8Erk%b z4U6LKMLpiXxE1&?DqPOVR*z^-U!X+Tvv)UCa%Lyv7wR8xQdG!GxzRanFh)U>%k*;D|*1J~gM!!Sld6^-JOoBLBdB_|GAT zQXvU!Lpq5=e%1hKz-Vb1(6~<|@T>^ThDNJ@dF|62n_u-XRYQ18>PRh#%#u>7Cz1Q& z3LI!pyP#f8BrtwiVdD(hVbYSPf!%gh5aJdF`fYLNHZZpx1y9g63EP%Fq2dRRosNE1 z$!3e^KJ!7NZ7wTH3r*GMlYC?X&5Q@ewdvy^m?td_Fdr5q!u7{2i!`y@ca7&JwCP2l zWS_RQ0}&mAb;!@lSi5>;Hxo;(??_Wa1X6$*Uy!@aB4WcHeZophgkM)km6pp%To0r@ z)e1f}oCx=OB_2Y1ibuVl0_$Lv2V%hS!Yc}L zGGw1)>(M}4i5z%IqZN_j+K`{$86Ku?ZN(d!0wL7!4G_xT7y&}mt(~eD`-mdJiEXra zvSBW5YYUwF8@ayKfZ8dVlXy`XGcrk(!7N}0zac*q#n^pkvx`X7@5s+x5S$_z%sM=u zOrvSN2=8LESug(RX0r`m#C6ZHTZEG?rqiCT=DG)>cbU1bfUw(QL`R>$Wwkg4CIuI$n(6bYpq9w5Ax0s^0ONB$bB*xzf^1iB0Eqlt036z`^Lu^+H`r4QCVABi$t(>0~Y=uqzBkH%u+5dt z*8cI)P~-pcf;wG}Mc`3^v;w_1-B7-a2U+uZP`+ z8zVQax(fj6Ve%&O~-gfey^j(u#tu(Mj;~6@`6rWQV|syz?=t?6LEu ztFxBpfn%Skf%R+H?I`1sEp7TJ_S$ck?tNX5isInLuCT^&M?`JZOG}mL?ZGTrUC_b~tflhD^2@7XO8*m}Q9oJAol-9%hup zQ4?Ywx%eA++s8FHG}=P+xg9p!gN)ljer6bc;B9RQL6@0iu=A2ayBvA9CjS~nGO*tX zRIo!!8v)gFX=&4-4uGUuD8za*39j;Lo=aum1*mnswwZra!|qW{B`v z8Up#V9qi2VlsZA)t;&!2TQcxhE6DT!HLVupc#xWA1(^_T2aBvO-Z(*aI3*2S*VV^Z zvN7hNU0e8-R@O3Yx#YjrsNuX!XR`0Fm*r0lBl- zhDe{Z6GEA1APVi|oZ*4{XR%?HE0rgNn$K%G9!kPgl^(qzvzCReJBI9LL3h-n!EiVz zQJR_thd^}N!6>HZ>Irh@%)lpLBAWh()#^^*$vOH8ibB*eufVEDr~jhTScg~7QfXQp zQKHDtn}+*ix3+R1kh{^~7}=Qt*K^qMnSsD_*oFunLs6m3@qy%X*syTpj5uw&cqPI} z=2t8B)@fw-0u*B34mR+qYb5;S6I=WUyuMF$7%8#7?aQmEwXd(>DP+1N@-wp1{+5hC z3%enO>>da4)TwD6FAqwy*_5E5saNoFhUXViGP)#R-dKk74tojY((MutX$)xxE5oIe zw12c?N$tpP-VJzCa6FNnk186(CzaG;B6h=aImQk%L7oRr%3*FS9zO}(*R6guHVLB< zA`-hlN_HYPnk+I4U6Y7S!p9yrrasln-G2wY`z7}x5FXAo20|T>={;&%eNYfM77k#r zMlWEuZyD#jn>E?xG692W=>#84r{s#>4c&dkgF^D#!3?NfK|8oUvBiq|G$vTxDi*G? zv{-(U-27LaeeC{n<|6SV8Lg}NICg(42wKy=kI3*GKS{a_)!y)r-LLtgP=(Egk~Bw< zpP#(LPeqPd0UvRIyPGq+1-&8{*?xl zu;Rs?of=rXL_!+`eThw)Ju^v--q)2Hy!Jg79ulJ78w+QS58RQ*>Xhc!n#lx)E!K+3 zVPHP3VnPnmjqG+Zacm%49=mO6Ow7LOj=t{mLrmz?p)22Mv?jxQIl*$=dXHuRmM3T9 zE4a#U&0R2en9<2SY=Pb#2RZ&j1wM*3hvVS-lH7wG`<$0NFPz#Nh1C|4)vkE#gB!^1 zW$X+PGRG1WghL-Knw^p(e$02Ylo=Y?mB)rzc@B!n3dY{`%C^Euy(M*mIO$7Dq;*My8TOgn;s*U zD|T1%>frhXec7gDby-0wn=EXj9}>mcWm%G6U=@&In*b2fk@~b6+W4{^+?RPs&y@O< z($2q#{2UC@y9HDt>Kq`R_4;aIwfSwJ<;5;wmzD*hGHSMc79Lp^^}pDvA6oEKKe z2%K7#-Mlj^Q2EBo$pEwCGI~ieKwh;(ZTf;(?mc74s|_e)k3>Mx_*;OaN?_Xf722eB z3m9=?x%0PVer0|i3a@N20)BgY4!gY=+B9N>-jxQeDgtUeIOSqey4t>fmc4}nHpH|^ zo^w*-fW%wh z
  • WpKH^baz9*0?Nly5Us0I>0(=~ASX8~rA#F6+mu02 z=97|g#P8C`WK}tYmg=h{qSE`)q$FqQGZMg1lMMe~I~j8-T{4=irSb~4LVGG+W~W3Z zTiupMy@=ajv$=IA50lC70;Kzviv8rsLDv6b+J-QCyBB1eiYNH&?k*Cg!)p!sSxDZ{ zcUSv|GN@pQmR4THaWV0T-PXR8@-8VU={+`Se`9AI87$F$auxY`CA7&2jovjC%RLb( zH0})< z?D*m{ElvK#;3#{ok1mmDKK+{y1BTw6THa)GH*E{mu0%!t{prMB{)4jQ_H#3HY&gmF z3sd_?+UNnmgC!6`o&qRout`a$ma+R?Ety-Pmp_B#SW0g})JXiO_%=`vNC93;My2ycvIlfdUSf@n|gxw_2+b9a9fBmv8|a1Eu8#zEOm+u)Bd!W4{lNG(m`36GZEb39yeDnvTq`UM_j%~&;Wh?nb;Jh{$=1Lw z;h1ND>;Z{z*Rp}FEsfk!FZ3?mVpd(B&wKboLztkEl6ZVS*8a3o28oP%iTlK6N4)IB zv)R?@Fblcxnf)&(JyuG}I0i-SLuyC_-%MMx9Nyi2Df_i7posPy7STiTn!EMRk2 z`N~tKLizNu#Qn@k%L+BDjz_cOA)u(0hs|ojX{y8HGMpYjxkDa+a{htS)UKl0-yL%s zg05Z$272_-%X#L6^6Bz~{SRVJV%hBJ+*fYs-G9pdc*c89rAgErvD*+_)7O{AAxY%f zQ%cWCWW=jrW#DaU^+8S6bL8X%ZpM0@SKa^Jc#Li??R^XsVs#B0Tkw~J^LAm-uAs(? zYu^4eo;10BiAL*V6h}*v9W+F}bV&QOG>L}5p-BgsD6S+*B4fllm0ps~b*~P8Oh`f; z3qHTMxf?mPx4Ao+xVO2pZ3i}Yq)8108jZE6@J15o@EQs5)*+=!8nutU8%zg{Y5~gz z{6PQ~HYZAal(WUP;9S+!x0}5xyohrHl8;Q!zt5N8wW%B|BDv7d?bF9HCE`HnaOe;<$(nDO+DbUSDN# z9dVl>@N($wF)}K~Yo=D`+V%Ey>{vMnjKF@O+G~04{dZvf3(Fq^A_Q+O@x|4Al0OYy)=w1b4c2hV$0FTMd^+>;so*yDJxB`bH^n zB`;LVp0!%z7o)MWi_z}=_N5sr{)z{9$rs_iu4da=4MahO2Dkk34DMWTI+r z!(8s~j&%c`jYfo-`ITLt+5}87h5L!Ab(<6TXwCqJbS|Sr+M?Z3YD1=vVjgs$%c3;o zq~R)vRa1#|TpFGNz6Y)Qn#!b!6uj@2<@3-d_T=HID1v zQbp-V&Kha1@bwyS#HArdh$9Eix>w|_H&iaF;?gj+fUKW6B z7pJ_WX3Hs1+0@F?ZIGMSfHMp%a1cb+<`ItU)Sp{~FVWq=o+w-j1!JqmB$g6b5=gC(7M?_RVYpuz z@o9(9zXXJ?8*KyFf06vTNfKPaTtJkCst1cXzcTI6i}T_ce4;%d6SQiv2nklPD_@Vi zmOa!^J`e^lH0_3Vpm=(CRcyVQA3! zg>l?4(M|R{l7TjQ0jpO%Ex9r1l8b3Nmag+(%)k{ zSDk);Q}V-~V|F=m>pL)ajSky$>n}MSILtIF!Z?p`;iVN0k=I}=PrEY?{CbR+nb4n*52%+MGJl~agz_fAKrQYf%GA~rKdQvfi+v^?*X(ECY?h~o_sBZ6N9whF zM5;Fa)G!MBN_Prk;VLOBqDE5&g&8O^fpP!)SAG-V#|y`gyBSSs4en&0q_tYVS47`c zEB9K_hZ);&w&{j0$U_WCdD?{K$_CY!njDI1O7=^(s~CNXe)W6?+s01JKqrdhGM z(=`ufrp8ws0n4_d<>j9ljuCY&5(TdDWqOk{FdO`Mtc+Hb$0V1(n!IXNyO!=~`)6cn zpxZ(LF0pJc2FL|#=K&_Z2*BZ8NvE|%%4RRlu{{zx?I1>*u{ecj2HfgvH`4WRueb|A z9KIwfQfYAvgHbDAW@#)8YW%tk7dM~a< zgo)@TFNia@2T#?Gi94td(cET-wp(qu<7Q5v;~k^lLGcwq0ekfEa^&E1|}v$%a@E0ybwOufeP2rW47 z;G=5t2pEZ}WsT5!B1c+b0{l3Qk+zUT(j`h+tplQA?Yjy*GmpYF8;6Ejf3o^UCYC6O zMA*MSqgUOKi4z)IIlK8>KFxrr);NkQiRo7oR{kyt18KX6#?~89<-me+a1Q_{!5k!NR z$uQH;?g-~UdAif>tO2g7sgbq)Z2o3x`qQ47TxwLs3_b`tNmkBT~!wsAOsnQN`Q&CwY11-YWL?U{GR_B&}K{>|+utN2)sTgA5qQ5b8qj^ezh|-~)TDQkcI+!JEWwzJ@{8op#JcM7* ziL?pg-IKjDEr)j2zhZs9@@LIoJj#$LGh20@KkUJ>Z0C72ZgVA3-b%ugJ{YxH48R=H z;vu@35hPX}C3N}T0l2;1<4t_ki|S1rjk<3EcyUhy1xj%32o~V^Dy>YjYpCRvewtf} z1SaHtKlVWaa z5YL#9-0Ywi6j^Zr;Lf=_*Pe61Rzd(EZk(tBBxUYPqr??R}MV?{dMI)m`+dIul=}Y>Pj0Y;MVUrH;3v>&hS2%3UXsu zMoarLNiV|H{~>_Cxzwwl7c~fu3HVV>&QN^6ANQEL^2DfHZZOU)5$t^DVzN+?CJh%& zT{$05Fer4soc%@L6Q9=|z&WKfV#Q|~ENh;L16i%7?fV392#h<`))}G?OQ&hRK z@XUIm!TL&3C%8A;R#je>C8rLZ(H%AT^;C%t1|WizoVY}-O|H;`@9pE&%O6AI1RtgC zB&I+QFN%4{0lpPxLn1cA5L3*fS?1I9{0$+)996OwMLv z@&V=)agRP_>gga*itKKGpKx#UfMsrufA0^vnMjDFNhq{n$HlHI* zE>_w*Pm6rI7GEs^n8)!<06AF7{Rifb+{lBdLoxi!FeSryqfji5vzZR^ft5u zthwBxj1tMsVe3CzbgU4|KQiy3-LVXVO0{wwBY)u04E>;`_07U~dM7m4-%MV=>6Ol3 zzH1D4x2cin2Ec8qlND+tih2}|olQi}Dj%uF)Jvrf#SR%wU4IhEMt69T3jCh&4tF_=<{(-M)~(D=+_JH_#O-20eDSUz5pzt%{zy))vNMG zgI^0RJf?COY0&nx&BWPUsdr+rs>N{EPIp4Kdn5gI=54eKkGrc+YR=Pn60*GaY}t}c z(1NUS%321_D!$p8%uqQaOHF9;vADD-ajGj6*-}Z9YtKa?c-Lj#ip8rcx{@0Co~g2_ z%d7Q#Pm%8p?WsWbGnfE45{x5m_sX|^dIb$~Ayd8izJu^Kea5>Fp!Q7_=?n`z8W6{Zh3TA^ zlbH{&GnR_^d5TsVPdIPo(A-O{FfuyJr3asm`S}T8z9r0e)aOZ}TrH?%*2AsIPbK%FC`j-=upGtY?}Yhws`N4; z?Wy+4@v=YLADSt(R$^mgqg_nY-ds%)i$mbxuIJ_|@W5FsT=B!!j|jo!JK#j5b97da z!EkGD|LQN*)Bg3L+2z)PS05H3ccDHIjsJOq3KHjUQtjgj$&MIu4A4S+EdiDsaE^^T z=Lhqc${rT_2uc-;MJQ7rph$Y!$$SJENIzmUWvR%dfSHF&(l7!Fz*Tq~9U)qOsYQj| z__QrY?L%*aI{ql2e>(~Q8#De8#@ypJKCR3&LVJKt85CGqaL(`aUwc7Vh!?DrfWs&T zY2BHHlQ^kL)7zCU>k1X=S!zcCK=LHUT%5feC5ApV7qR?ts|R{OgBT*0E*68aB4)FT z`M>IGu*)JnciOy{XBC(n5kWA6v(le=6^#&88{d|WtnvJ(f2SZ|@K>ac-(yE(he7?E z2+v;0R^lPMrV84z@1m-=TTa=@-x2PyZS#&N1TWnomA=Fh8W*ws%>j%3nL4|ZGMk?_ zor8V@Q>!cBCUKqdY(SpJ{`GI561&m$EThRO_k62kjiYCaAwV7Y&pE#v3##0v;kaC0 z7kzk62*B=&Hv{wKk(nETJHKwM?_4sRs(PMrv7j&o_<6nKSK<8%c zY>-I{7Ys;IynDT!(yd~&hLPYa5a8`6s`QMvC7nVVtFCOdHm=m?RGE7rC*N>>j8apKk{sf{M z`8;&Eex*t5IsNSHo}8w0i)lgCe;wq3*V`m7djdSNRB}AwieuA{^QnchQe}?61~dQO zy@_Rz1HT*lWi4u%Ur+^fG9SI36Mr4$8={j!Ax?5zS{k4hx`7w4_5ty!kZ)J##m$I}h(aU{Fw{Im4}Sd&UMqdmB4TNOafU0bTQ zO6t%a46D@&;Ei)3^sIa^%ZK!{-32`D@9)s4DE7;_wJTQ*06i=NZr9ekJW3bA!|V27 z=XbdjvDl7d?O)hS?sptEOYiq3eR&J;?aG|4J|Wc9sIQjdoU!w?Mqf?1>wB9keeOr} zS`#VoQy1}J4c{{x4%9{@{zJ@jv8MmW-g}2N6|4)tC@LZdDj*pVB>$qKAl zQ-3q_u9?Z2_f?5Zpj<1bwGXV|iD!A&veDF_0f=@TXn?B2*#SrL9$z}(3Z%2;RqFcQ z^ut65WECo8- zO`f-Rkbr)+JB#6TQL?cyp{T_<>^d7rtkvvSUaZF*ZC)~ zUn!gHds$F#RC{hCY#6anXW8wP&pkVIR$d2(QFv~y{tHk{s(p@}0lZn;_&O{ixsD+_ zs-3@2PSzmomkf?5#$1Zy00PE{v)(2^g@N?rMjqP~?T`L4w9f5W-jSQ}kmk;*P5EnDRE_ceFWz_eNL7u@1SG9XBWJa7=RJ^U@wo^*Dw%Ky2b!T~rP2GUAzWT~utUqogWq%G(*`6Y6*v-y8^~?v8W+;ZR zuOcCh(kPt1h51{lHP(A3eU+VCJ)5x!QgTYoSt<`hWrOpEX3Qjv-Q3!|Jnt|nls>QY zz5{GZ*y>@!9H)akkX3Iz)YpC9OdXihFe0bOK#w)52h@0V@fq9Tm&30I2PLXjmgw?UU!wgNM%Q-zjfWetE$2r((ZCWIJM zi!9=D_-b%4`~}Zr?qQwH4ioUl1jFlyYG90QonXSXnWg>ZGqLUL)OhB1OCYo-M464RyWMbM8$|bH%c< z>!9Xvb;t8;)4!7SqvH+n_0>Bb@-2$|tp!eC#`;>I&e?QN(qXk_iyw9;v*?+aJ!=k^SUjh{Cu3VLCctji4 z@mmD1U5^!U2MAkvXdA$Dr1r~jkF!H<=U>y%RCRySlDr;aU{?gJEpj5NWdKBgOHqZO z{(D0V9V#3j983@oSkxuU_fUc~1BtR9Z(3k5Luv)yr`&2E5PAyIz}ln2rp@KxaiLAw zN->}gkEWUpsvMWISOTh{BRH7Oi^olS%Us&sk=HZIP##fz8rXWPAc>!~EsDzB5kksV z0)s!h5kc6mnsZLIoqIhz=55VZSskddsJPaACFImMZmHdVQ?hnJ^vsUXuxzC~up7qY zVSN_KzBnUURL-#bJh#$~0w=Qcgia-NCkI&1S#RH?#3JwWpiQ!e4fIy)t1b6uXH{2i zP0jE{y6m+L6@WJ2ofKhP1}5IAy|1HNFolJ37$olZUz|R=ylAc3%Qc;OY6qAkA@;D9 z9;aj0LZHJWwkmQd=ICZ1G%;oJaa#*yZz42O7TGVH*9_FXsoOUD>hc(er^Z@}tXu`4 zD~-GyKK?p5G|RhXsBeOuweELvE{sio%XO;?m~I{v*7?=qJK!0egdR4j6LicvvKYf^ z#DW@x4E!(vmMI~P1}T-#a!D8Yfgfi9Q318BJ6N;elwFS0cE4FTyox^2HJ zWX>-~Xciop@EQDvqnk<1IM4hDkCLwmV0EDI0SQQjjxKs*0$McrNny8qAIYMB;OYVa zRAEAk;8y+=<;OsVzpcf!ICT>{lgAUogs`%P54pHgXZA9_D;7M*j|M!xnl}Zc=;^kd zQ&vxCu1ffN^JN`Ddf~6GZufl62=Sxom>r-JCV_n`(No8t$pa&}<2R!{1^;-8b=zJk zTv+giX>T5#bO%@zCMwCvNddEDzin@%r~=K+B05;k0MxT(v7y0gKuhUv%~o`-@Y8iK z?43AritsWsQ}2U5sUTGogtYgm4H?8`ExlEs*OF&vi&vL#O1L<#@yb#Z8zI7mFf`SOoJCpQ0#x3K zJr-H;>*-=OG~oPM4M$b=qkKFS$BRoIPykU$M~C_<$eG<)fGA(_7)uqZ{G0QO&7(I( zG$T)&`oD?;s-rLwBqt|6-R!6)yYaB@6deQ*NZp)5C zvjtnknXv8eA1ZqNOXTz|qa_>=X9w_@(23HL2eiFxo+s(p&x5-F11=FKd?2oW@yRqd zo6#GI&m3Ycs*}izdQ$(3jm%)k9#Q0U2@sVuiW+H2r2$X zbuqZgF&7)T^1Q=N5=%$N4ykJaw)@J^JJod===%Z{vO7Eb@%MZ)ix3wm@dDj`vY_5y z+yP=?t1V%x-y*@+lj(2jYUcy(Z^|BcJ`tN+VHHxi{6C%cmD~2$vJxL2e7}Fzx7VcQ z^2NWoFS24u9F+>?_;uO*(W1PMK$|?)*pPKy?EDjXKS+O0p?t8XJ|GE%ubyE_|L8J+ zjbxyF$)S*X=L}T7jZuKr{E85Ld6zxT{B zP}Rabixw4L{U$g&JB83vRm5H}n*7$?!0>uQwWY$G+w->2`F=!dtw_MN!oq>qp3#7< z2k4`eeP?J@LE-Le&n3OaF7_9xl4E5z_uL)RB#q3MPM~^w+_BIu_9rAHWC?>PUa_uD zwJ2R#ToaO&gIEBo%MtL^Py4x{!@wT3!c=wK``=%!TCE4~#^#EfNja9(bTaqGVNSx5 z=FcB$oV0N7>3yu5pU*mHCLg_Ryt+)5*vjj$%Q{@Dlm6p2ZmzhiCHpPJr63T$256v$ zJOgA=LW29BOLI90p!ak~iTHi3qJ;B?Vd8t4=VQzkN zZ7QSz!_$=%I9D5#`Bc|Dcn)D}wBkY$c=uha>gJi!b+=c=2kJ`N&r@P2@|ttf%W*eKiUcfMpE zT5B-E%@@+Xw$c_qD3D=3IkL!YC11RKrDe1MShX7pc6KuWcI|N<2HjM+D7S2rD{i`; z_*AP`MnxESbTf-A9Q1g;cJ!#<8Q(j&XVHf(V=5e3^g4{g#@>8qYDEGmTvH{}7g?D5 zBuWQ2t{z&18AIyrK~di@9)6Ar34>0vvgKE^`R&%Ke0V*(<_f$}$*Cc!JrV+Kz+2n7 zq%$6!pP#M1y5ktddRqkZT{1ZY*6#Jb1I?-=z;)k>0*i&xv@4Zqq3*4Ykz=tvC^L7gXi*M!k6nI>eP z2nt?S#anCNjK?s5`^$Bv{mj-nMklhhm#r5xffbPNWWY*NK2%bW3vAE^Xm0{6e`L1` zdX^NYf^nT*o)+)nkTnK5xgubG8M#DkGz6CDdzwc^zgoO1P*IGPAIFV)n@t&Zx0P3b z|B^=FW_}TO5Q4+sRf@un)G#ed3Gl|fOzp;ijO&N;%#QI%lnfdu3ohLkQhFD|9{z+Uy#O>9P+>F-!4`cI{l}t0uZk?rqknIC^gF^z6k(8QyY% z*LxpdoJh43$!4zy%i7dhL@KOBqz6&jVwQ0m|XwtlQg?eS1HC~mLe5- zsG=&x>czAdMGKg5kn-1alRaE`5Lz&ay)y#X zijmnnn4bZ*6_0$Fs7W;wu{&Qc4;W)2D)PoFBvyze8yy-i>TawQ*}$pPEPNaqEZqzA zGS|LQ4*~|NeADh7S!lne?TDqZ@@lfqn#m+Fs76eXyQl})FdtO2u(ppK^p;;R>Xi;~ ztO?6TLTWF{u<=OiAd0#;TRlAH^zChSyl_#j+4nL@%d6Yo@=dr`+@ld1DUyYd6hQg# zji4KCr*8uCM2qpJOt6O^U_>aEh`;{}*T*HX?&+{|0L(9w$9%W%|z#R7|^Iz%HtIW?_*Yx${Tg?;#DuJtOTk4`Fu#_>*py@F(O zlF|a3jv{D!ZKpy7bq-|F*37UID$&ERGm2807xd_EM-qxPCk^ix0IM{>0^E+<_87cE z?29>!<=v8WWBy=lMA)KL-?ikmn=Bpc5y$4s1rg|qCM~FWCS}k}zF-?L-zC1_ksf~m z&6FGo8AYX90**YZ%k~mmokK#9?Xr7QA*t#j*=OrZ9qGI`WO514j-h4zsIy)6Z_p1A zuBl7z8$EZ`rq_m?>RS0+fKCtQ=LkHWi~Aw)DQy5zu(xUi6^Hb#n4b z_Bq7I1wT4SD;v_$!%X`MS&avx|DG_9(+3Q|+!L{5sjtMyTcjkTD_~aI0zm~)5u0u*clkwoGgVAJE7iSBA#oHXY8AW;EU^#i2kyVjS4&-e&{D<;X)f8tU*(U9X5#i`Ti5CSfT5V&Ax)De~t;U;0b7m*4`!k7y?ZlBP72D-I{uv z7*v;D8CjS;-i=*JRRLN;(2sTJYR8*ope1KGfJaAx~2}t2i^9%(BMng1J z?2ZQL13w3vDaVoTDhenj=%%u1qOE8rj99C@?!Dm4voNd|6+|}XJB@&A9 zNYr^skfl4}6LAnBL=H42V@t!K;Kx(FKnMg5%YZ?ECrl-4l|gk;qC{-_T3*}*VYv9G>vZw4@F7sO zIzHAvj#3RK{S5AeDSah(G#Fp<(%Z@;hCdfelKIoMKP zgF_9GB)vdv>E5*XCrFV|Ikp0LDgW6o;k6`@`^!x6iEP-T47b@cxAVVPepdcI4Tr9~9 zEtUW)6Cp|QTxMf-ts;Kj&F!IJixc>UbSTQ%h|8pGTvUaGOe`oD(q7->O4u|Xb8_v- zKvZpX&ZyQ+k8Vy>+mn))LYWW*O4qJ{}ak*3;P8dd$j3`jl!>vfeB)( zo70M4PL9DVv5o#4tD>tsH;EAe8yO`c{->P91D6DY2M zS;mZ$E6lqRzOg&=s&2E*$qeo{&QB0s-Q!a<5U=pNFsy5iZ5|X?BK%fQOF36X*fZb@ zcf1EUTYF~LVw`s{$-f#Lb%hE0%(jo{^O`O(IB28&7vj;sg!@b^bq_dx6 zX6g%?Tc6bAlTHYNMfBF<$|Cwy(B1PomK_;&eoG7%1y7&(A7>cok|LDN?N&0$E_Qn0 zT^+@ts-AeeZ%d%Hf!=I{HS%sQtF!B>6MDD!t#0=I{$_!(uUp-{!9Qy-B|$yuBJk&Ax_4uBD+_tGotkZQorY(M4rZ=muyD5M+lUGx0% z@gBtbzUl6AC=>W4UUsUx9)D$;73qe~nQ>dno{Em>%RCNGU^<~mS0`{@gmWf7RCINw zD9_)9A<@g#?U}c$DsSb*Xw$?t(aweQDEA0VRo!mY72m0uKOYre;D_9)pg$k7@6-|B zsaJnKs=iYVzEk{vK1RHd=ki;d%p`q3Lz~v3yD+9o-*;+F$;F!&qQ_f#H9Dnx;VP!8+;^%*$t94t zQYCsarp>u~A*%QAb92c(1yg0Ud-xIcof=VcG3Bikjh;+z+iYKWvFxr0+{9EZ>{cxR z-_W!2rKPr|NmBMM@(eJA zH;sF@%sIJJvYH6NGd1|8HdXhZDmf}4q1cKzx@JNMLzK;~r_B=BBnhReX^dJ%VuZIFm0U^FaaUvjnB<^c3{ z{0w->zpouz*p6M^twW*w#e1<9>F7F1q`z}Lwlx4$FlyK?m|92_E&>@&I%Seg=f{rzE3E7m)<_dReHR(MBH9 zVk3`z%cAD9Par#Eyx4v9H%*hFXd}7W!1jyNDxYydl{W4{RwC_+yQ<*?wc;cfjY^Vg z`OZN^1XR3(GE;=Z9%~|UQfq;*k>T_KT3KGC#xT;~ub`tU47E0Cw^q+1al_|So zE7O2dl&sC5BFlB8^Xf!a3)jNUCgtweGn)gp$WOdut|}frpKemptdMtg%zl(8$xF&* zKzxM;%b#vuoW9OH#+(Ft3cAemBfANsHZX?|Ki-s?7PuymUbzJ_vvhSccEurD5;ncZ z8@uAaQuflxLvzo5sWeS5o~^96lT+Z%E(&aNll8t&`5c-?{8nC95#){Hw2y4j6&9;9 zlf4h=%&zbv=ZY4jPYlc)1p2egs0O}aFoZ(Altt^OTe{mDVDKZRr*H(JTwqe|^N4&0jdmdtn zZJiS@E+atlqw1Dn9u%l=Co0|dz%4f$=DmEE(xuDG9WdUr`a@iKX^sKXC`zcXSSPZs zzm`JR;r8@AHvWP)&=iM~%pDY7t zP`aPQ%)tglw5qz-4oT34bmp7aqZ=bbWd-_FDDOSReSarqoBQ~Uq9>36p@yJ?$tDCv z=k#dOi#&$j4bfFT6=GY3DH;zF`BuG^pR#UIht7x;<^=_WN7rq45ArDoz?JZ2rG3!u zfcl&ykksO}`V-K?BHxeFpvlPU=Y}N5eBKP zkwY7Cv)2~Lb^H$9Ekla7K=&DU@jsO#x?m!?&=N2{mbR0^{RHG@gpUXCld>oJm08Zxcws64t@YdnE{-6IgNnqBm^(r#` zm!qqesTQj}1%i{D#1aV9#{~Sw!?1(04RW`_L z7`HK8$w(oCq=*E~E7IqQ%%RGphV7<21YC}``l%JV)$*+%8VN4W!!;nfK^F|hz z2==XHy%b&L-rTZC7A~7zQLx|HFT-3z3|g4i>Z<6GH-o+s`;f!XA(#+!H|anSCJfzu zy9)vr^5IPIvC!|(U7aNzay79JF~UszOzc36g7DG1f}k$NXz;M>4iXpvKSI`BK`Q$` zLYkW)r?cz*e~L2&EIfAQbV*IgLqqXj)Ycw{0=uQZqqT=1(Rt{?d^E2)a{39f01_lP zs)&ePPeXR>^`aO3P!NwgjAHc+KFthG)Gqv|+v>xR^|Wcg=hh+y)4MR#6>gCrxXHPt z^sV!>8-D2Gl4C?#n;x1;wifd2z_l8aCxizj4n1@k?Q)Tr z5mp@2MuPTM#?15!K$n6YW?zrA=aW&iYZlOFYi2rBq=K} z%$o!MVgJt{LbW*wp;U>_2GrW?t`7?v$x&)fPZUjVfl&FsDC^b30+iIzP54r*VyVyV z=qacw!JFW+P9L~6MWDD>0h-}sc4u0!h%G@J3e-fw=F3(!5m`3k3>BvdFW+vCZb(oj z4U10T43gZGgmOb)Lo>nu1ZC>XRLgIgf7+)v7$)4k874r${>Xcy^l&St5_R zTIeKhC)?a>c^l{*@=g>BR~wm)4NMIczZyLTEw$Flhtl@`?BVrMbN;j!HwBWUh6CttuH`rA+4 zK&`h1x1kPuu^ii{wD2*aFO?G48iG{Doa?RK4r>~d3PHZ=q+@ngk|RFw*x#1P<>L-| z$ZesF8BG= z*4|i3XR++Cm8($Oj5KJ!bZ@LL-U?(IO>&aoFSXwQ1i>f>#!0SO4+r~^)r&ZYlxY-Y z8X1_agQcM!R0322R0322R0322R0322R0322R0322|9>GcOKIcfKKZA#c*M=udDMeS zfJ%T$fJ%T$fJ%T$fJ%T$fJ%T$fJ%T$fJ%T$fJ%T$fJ%T$fJ%T$fJ%T$fJ%T$fJ%T$ zfJ%T$fJ)$hJAqUFZWsT&3$RF;IQhT5Fx3202~Y`82~Y`82~Y`82~Y`82~Y`82~Y`8 z2~Y`82~Y`82~Y`82~Y`82~Y`82~Y`82~Y`82~Y`82~Y{-32ijI`tvS848>6(hYEyB zfJ%T$fJ%T$fJ%T$fJ%T$fJ%T$fJ%T$fJ%T$fJ%T$fJ%T$fJ%T$fJ%T$fJ%T$fJ%T$ zfJ%T$fJ)$hJ%Jx|bVm_YdC%xVS=b)ZsYt=d}Rp7nJ~&0F?lh0F}W10s{ArJkq2+#tP*0 zBn`)z<%cg%Z-`pZ($G9TMnfY+!%buT%QrybP z-p0jC)XK)gOU%v2SznKyhW28nis|9$?ZZHGoN8i_HKbjvY<*zEl(J)&~8cxqVj0`(-%$4@y#TX-N6~zqclV@&!foRvoM4T4w z%@ruB^7&BW&gJiJ<^LsvU;o<+`Xw)u@*2s(_;6mc{xse>DFmeFLkN%h=i86pv%S{t zj@V>Yz4bdXXlVn)ZBJe>+LpMe>d$hY{>1z15}TG{8bM-Vsba&*<|~3pwRer%wao5k zH-v{svE>(>j5=pEf?3tQ_1F4oy$|D!K0 z)tY}61<{ZcU^H=fn=y%J9GBmFySNku-Fs?URG9LfoiF^){bvXuvOEJ0`W{>zdLjNy`nS^6mfO;6cT#$PRqWZr zLaOu2MLO+4daJ2?VHmRVe62lfxJtA=%8Vt?$yoCAn%pY{N*#%aFJWH{+{5T(PvF z!&K0fDjCBrD|;B;kBYDCX^6W;(|tlO9WY=LyO_YeD+V&$@n^&gZTWkFX9#;3v1hed6dAeDVRgN=RtCuP};TNB+ zraYg@+1H=P)X#7;d?Xcu@sO>kI+t$i#0r1ZtI*$g;AY~7F+(pT znWp-E9;rsJ5se8T|M(W&Y!}J(442a@yd#qw3;XIdK|bVdy>7BVxAsF#nbR?%-L7Jv zCj;wlit`CE{uIw9C z72GXYw7=ZakDao+35C6=6I;^b9oL~P@qD7D>^$>Y!RcU$bXia8J6{W@`tJO8oM6_A zhzoPY3;NFl;B7CHaC}>R@SnT~6bAe{_^=0``Xg&D06q90g%1D!xd%J@db&G_|LM4w zflizI|L(Yd7Y>I}!}vzj-T=egrt7C-8@`<>}@;&0b>6`%+}*CGU70)!}FhH z#O9c?W8*Cjx^0U2`>^n*j*bS`c@8AUiay^pIj&mvM1k{*DsB0LkMT7&9;>5gK`+(l zK%Yi6--~DR-1*YydJ;mhu0maO!-^PP`a;8bV(N&LMSSc@S5>;9r(jvwC(8gK|px`Sf8B7uL0! zk@4zU%`sA(>_`JY!lK<_Tnj~`*Gdnr&(jGWJj6zZ{bmha-;fL#3(yT8pY zB6Y9Vv~X!Lw0G9=GHgGaWa}*of#y$wPMo%qX8Zhos%TKbqyIUh`GVc3A}q`55g%P4 z9h<`s!(F4a!miDdg3%Y^?d3g00iPm)JtzOV7qTm97mp}AWLykejGeADD;ngx^vyu< zq^Z&Lgbm_H1^NX{V@T0}Xmpr#Mcf2wT)EEblU82bTimT|-DmWz%1v))^ZuaDBaKv=jtxVzg1 z@t*D$7u6Qccvb90tAWQ~Vd}v9`sQ|AN%CDir6%G#aOwul5dqpJ%9li&2;m6233}Ee z&*QU_#9v-*qty*Cu~mo^`7CkmsLlA7#2fYu8Jp+xkCuwi{JnsO?YU1iPV&X!wC&{) z8u@>zfcDNdU_VzE8?cwhGZ#;LFMC%PF?&nvKP43aO8H-Oq0K4P2Lg}J(ENJP_O97| znD~~r9XW-vIEgMH_2h%&gj0a zoO5Y!9dd2Od#`6XT3kY0ywk{WXj((hKsP|MIL$IkfkSXGwQMb5=M(B6ZeO_1X2(0; zsv&K|gE$q@@lSKoS%in~CJA-7`i1}gnZW{5ZtZBacIMWJf0P-(|J%$%{uJLLsLFwF zT<3K3PhgBNMcP=FQkww0sf(7^?8j1(ij(Nx>x5=L>}ER?0;ZyYbs zXU;Z%6J7j36(64e)R;HNBs6IyI9hk09?H4dEle#9EvYHGq?1BS1)o37&+8p?t@<+B z(9@waZzumo0r%wsi(`ZpPnkhFpP3IP=GNBq$E5KYtP7!4*Rt$$1=L1wG zjZGEr-Z?xL{nJlx4jZDUKP@yWYv(oULl)-eP`!JmjPbm#Uy=umztQf4@_EC`(-z{y zJ5CR*|KfaNQf!zxmjBpSN1*OI-p7m{DH2*1XH)xAmGR>lTvZ=*deN8e@BQcy@8~iK zDg!jN`@nPIUlJ5{HZC?E&z!(cu6F+;+wo%U##`Jcwu_E;?wwS<^!#=3?D8Ae&lzD= zNr_cABh6mEd42tD^M~;Sk6rmx-(z%rplfj-j=ST6GzKYw3Gg6)5RZ8;jX#syRq^f* z9&7;@D>=CGopjP;Wk1)SO71B?e)ca1$y98kP#x)+@;AjOtFAe2 zRv}lJ==K_N;C0&2j#r_a0d$EAl3HlDZK<9Z>{O?Hpjvyz({Hwk$235a?W#JhSDE}W z-7oPCXo%l@Cb$BL35}1;-RQXe1t%At;WkG95hX~=7sLS({4f>l^u-`H-e-sDRmo8g zlk4)Y_Pvkep3|fk8Wb~^iG3~lc(JIw_3R_lW1RGQ#e3ma#v-pj9;+9J)Y4XVDfS*A zm`;3)bT%3NX1?k7817)dbNuhs!vj=L4qArG<*#B+<=<=le;0FLFJCvCzsb7m|DCJ@ zJ)l)(rJL<&eRt;j{xK6HjZ?=>?_Qc|WL4$AefioEO`Z88wZT4gXH9o#ZdzRI{f;kf zea`=Y6~VmxK~~C`*NHT_mkkfSA?jMu_$0T8*|3CTRNGA0UG!_Ds&wAttek{c1@Ck{ z5Dt8Pq*bQ7D%Sk;jGwIhKS=}P_4Vsmmx;qK`aj7+8XP^~$@OMM zp<$&}LY=%O@_0`C!NJ8-bLC8t2#y{vW&JM4fii4c6ncR@tgYbg!#5zdpmnU?~($^C|1xedm_OHyP(HGnYRe z2n$o6zwRUQ-u(Fo1@BoMxB4ri>QUa_l}5g2Qzq$S7-l(cWJFvszBG8>%2-U2WuHfh zmJsoIlvet$y>3O8WiB{KSV`(#mEWgZl*_?1{N`Jaq8){p1cCiCd2(lsH;;(%O*ABYCuqdlqm=ecp`4kGE<(fR}I(=~W*je+Z_8`;|R zF=;M@!tuaQAoJfv1f`#D3_n#BHSQHm1|S=->{l)w9vPIC#yhL)@OWM1x`v6%OQut7RsM$#7!(8#%$Q+9A7P* zk2u&~J{IxQTU3*e6Ni!2eZ{UPBxhFJ`S7?$UFww6Rg8%w`tm4)M!-Le0S^~Ec%FE+ zOaYxM9OyQ}|4O%UbMm&cclldC`EOP{Hpl7?C1J=M#8&FIK?|#8in(yXJlioXr%UvU z*(I!(N`AN;EB>LmsULP%tjj&rI@sm{3oTNY5fzX+UuIXY6~L<6^pnl{n`7?SC%@MW zHYPU4@{szMwrpi4F&F=^zI2I_be;JikwHb`OG;>^6VYvoYwA6k6gA57p`6z5t^|Bj z1l}|)Ch*6%|8mo>v48`gZ57VF*aYI{bzuvNOa7*W(S(`l%7jlElf0?E^Cd?e@z~Rk zo7kB9qUAE|wR@&TK?bj5S+9~?AvT^$F1{FpXa@P(RktI@;s7;%xh`Wg!(s+9{HQ3 z(JlGK*U)e-@BR4_vM~L|)3NBrxwL6)05s$@6ZgLIPpBZ@^V9vcpi`Me!rmoFF0DUZ zgl<`_0a;(;ttd5kQDQ+vR^vuc2VeNcb=am$ZJO@(nYo!Ge!aPO#CoqN-dZOF9@~_+ zOPJhxKA?r#$$S+eEAv*w$wg9?rzR1^<#XT{*28zc_=2jR@LR)KAF1%m4qH99>qt2{ z>n}|2sR{i4qN4axbkcOyIW|lbZZfuZ(JA$tZfxt@%cFmnM2C-hxk7g7{liDanSZe| zygh9^#I%ex{>)(ho2NPf8=dyyRgyht(}@t)5C+DFjEwIY8*Y7k)vybqJ$6It^U-C> zBbvEWx88E9ah!Z@7^gHuQ7#Cp3{6&m~bgR+U+K-BKGs7RIJ=jYsLn~HAaz# z@wZHlz1zEW&dKRkW+I1?90!NQhP9>jEM2&!gxihI8z+L_CURE%bP5f>A$ggmqo94u z@|f`J&WqfNPS?(#5PKNT+5Ypcge3RNJnK7&M;X1Y{y2B_yfxRohHD(hGoP|PVwbz& zw!A1PxNN=1p0K@aaGrg6g)RF$yWKMCRTk|94!JKGaV<|j2%lyYxeLrMX;)Vs-#GQR z&`1BFl^=rr?Y6pg!TnM%nztYN|+c>#_J#3tw{iiwNe?xd96`II4?AwNr!cHL} zThlg>ar1Z*NwKvi#N^_envq8d7Zyy)pNbxT5Ozk*NG*)R!C0-pF^uiObtBE6kAxh) zb2z@_$Um0*$m)pb5ywal$Ch&pZ#ekh3?%uYQVHo2o1nmhMGY7>zm&NYmR4=oo75+7 zXS-FWh)}r_=2O#aaItAbxBuMbb#W4TU`>1unTpMX9=JEcz+#m5I~T(!wu3zct33Mk;=dQu ze{2cP3B!90xE1xFCpK8{{J)`~CC>e}>s7dA zHz6W+WIGn!d4r@(bNX{%6CC#nKdR16X-mYzNJGTq5$w3hrB`<&LRDl(!TGncC}4Rq z(|Z3hWkILrPAwrV z`6D>Q<9<8JAU|amMad5OT`j&Z>*BC+8&~b0ji)6z;q1k&1Igf>J_;=xM-xT5e+!Wz zb-kP`XRw*4tAqdZmCI2SN~oN#`WL~=g$R?r4&%?_m+3P?zA8VxeP8d+>7D2T(B+0# zLFus(Y$tAi43AxZrK&X*?d~CeL;14mutjT!*3a)T*2G~!`D(3a7WYfsOD;XHeYr@~ zkB;5@`7vhE$~$I;o{_8MRcssUJ!$u%xka0&Huq0?J+#?9|3mC@x{A59FW(r)N6QUw zN#nPo{MXNl#)ix?T#?4>YZK?4Mw^YhI^O;)O|FtjHOu=Uc$uxA_jD5N2D8R?8jGNu zF(Wrq$2DkmaxCGcKuADHtU7Cy!~CLLweXn#tvuqAxpw*q?a;3iV6i!Cu-k3AuUAbN zebwZXV&3l?hRVwy4<+VCp4TeTkXzJALlBP$mb;lqyQ?&46nV76W^3&it>w@6+pD0) z zg%a(f9ol0A=VCxS#WlUk%%Q~9-9xL>ENQxFJI;$OPI5CS z?7#F<&$=;LCX_&=$2NDcRd#rUV-|Z{oVIo{ZldM|o z6UTLVXuG_HKW53FIRycdsJ^zWGZ$2~s003O5~6epaFDZjZ8!T7#23cbcVy`!Xu+~v z*M~(6kBR7a+W`lH@L{nx zf8Ni1a%G>R@w8a^VOe$(N>j~VH$T%7fj%(2=zfRA-&Gb!ho#JfM-Y3-z445rYo&nu zM9fa=6t~&!V~eMtd)EYYuEq5?C&NGSzPtoI@f16nrS`}>Sq?O3Ez63Rl3CVS<;ena zl{qRDTl#3RFODn(n>LVE)4E|TA;`;$$AmqP4l(=AiuYu5HoTgkcG_XS?>45E!(GoY#s~jt(2?gyS|G$KL!zW z-SDE_YJUn|I>U?M@=n^V44aj=37oP;Pjs zuK7&Rl8HavKvT%}M6P+xz+xY})rrxLEn>!akH|$!(iu zd&|9my-I#HGSS{C=n;aKbJxzh)=6AI%ITecMVgRQMwod;8;~rSao<~mWZM3Huz9J# zoT4JR*q1!!d*f<8@DEH~-SIvx@Q(@9bwRHB3=jto(6Pnth7ha8Co=g*a~Sa$_Tm|v zZf@{N*znb^`E1A@{|wn{*Nq`yZ$c-9^$q(%Lf#&&dGyLeE5=KFg`dJN`^7l}^rG??rQrbE?-R z_&^Mw=aaV^3R)tSTu}m=YWHQq(#lk=K7jslUWla}bUhp=tY_5z5;tzw-k~=ME~De<3FSSF>N#jNEbgU6d>7ZKeH! z^kO?7^xNDn92|+!k0R1zxYg(3oCW7_~P_z;9r zPlp(AC;N<2uGQj2k42py*=eb@k=%Hejj-s*NIN~i7kuphA>^&2qKvw};oC$-rBpz= zOF&9QV(9LaR#I9(1SCf3?gr^jX~_|(p;fv?Vw4VvVTQTBGd|C~*88sak8kL276#|Afx^;o(Y~EjUIpVpO%+0UR;8UHEv8H)N5;uYx?#UjT+-7 zYg3e8eL9QV;^$x8K8wReJSxIDP z7%he-%hGBmvYU+(Lm#yxwpXmE4%amH=R2~t^}r&R_P1to*;q8ej0TC(5}>>p%$kmn ziLm7u^te&k;o4YagK2sLlLiiJxvj3W#R8@vNj85~*~vu_DABDGb73 zQTx5+`5mx?m&vRD3e)LzmxNnLSXcI)CW+izYZ~9054IAf7TI+vzG9Z9*fiSA855+f}uf`_1JBqHXzYBIj+u8rT%6 zMImS<%r?TVD!g{btVu;H%^HcxveJ8*&8kkmJg_ z{+%8LU(oWhUE7^ta4whJ-?_tHDG(G(QDv(&^9t$i>oQ&O^?}TpJ(y<JWSobK9=#xbdvpzJNZ!&uxy<{0FsJYM4g1U$xY**}Lf z4pwtsn3|{nJjAg~N$hA8yfy;O9425~jJ^h4f%SEO%XqJic@`81t=$tlL>hPF!K;@F7rdeo2 zlZ0Q~KwRH`e#J$TY-{vwKlgqy)mQF6&+odVuOS_da}^Pe|As|15!(4WeH=Fzz1tVi#gzZ2sm+D6saLH0Cj zprZFdWIAl~+&SAp|0eqW-?dZw<;FI3m`@d}<%=v=Yc2q7-Uz zxeiw%)-+x>8Mq&Q=DhpL;@HKsO_Ld}-kr_mNh1p+k~LN^xD){Pr~ZYux?q5c%fpiv zFtcg3J^T>{H1OCP$nXH=XpI?-r>!-5y`aTd{nL577r=(L$%hAM^bRucv33)Vpc1M* zeOtll%omhXuy|TPaZa}M?CHQj0ec88$n(Cs>*4K)JXj1BP)VT6_qSiEXRZOGc25RQ zeP6VuZCQrzFPj&m#j%CB9T*G1Euycp9hXy_uU_4Qp^nP4<=C?y2O0kmpy~xxCcDPg zZD0Q&?790)c7+~?6LOEKx(m__uNq&=kY5G zQ{fY_VC~-;uZ8^EW!4yIclBN+>?ghfL(& zJ6}z*D6nx6#%qwPRP(9PE%MHI?x(kRJ1Io4_FdspID0VeY4WE%t79Hnj=%jkmz>6y zcV^m*lI3r&2<$D1YTmkVEzduih#SE#^dI}RFg)-iNg7VQOtaOY-Qfe&_ESc)XS7F< zqIIaKgnX9e?Ak!P)Pd4sgySMR>Y=&{&b_nK_Jva)RJP33%a;;}6}raQ$3#Bv#FqZ;G^El|ok2#NGFI}mI6^H|+i>C{~C5!FMWJ7VjD2o6|RjXrUEHJ zdoDKB>+`>C%)ku+(TIH<#Q_`HZg0$zRYjK_(=C}lEEEb(I~-Sb^2yGM1cW@dS9axX z%Rvp%ZN0Lo3S!S!7S+m)OJSe$!#tLZLWybtlDAVV_Kac<@@(V!n`6`H>jJA4SSMuvY9zDu(ttMDvi{9 zz~gMq9{U3)1IFx$9&Gj#qJt#X4I!s31+l8|mb!0m?I^~8{-!1;NmVq7(B+Na3vanB z24g>C&V!UBg1r!opunE|0k(uqx^K;7%Y#)XfwTS1emD8nZR1!fcBsNQU|$!76;Mrk zOcK>$LNa!kJHN;>(oWr-T$oah9@PxKD|~DC+jGO?-@hVrw7fjFw+5 zPPOJ*YYb&<6pR>W5~^tk->DL7cRL!)b@jA7jR@p=!VT;2oj%-9G4FiS&BDez>pf6s z&CAoa`>UCE$@L(=$S1Yh_^>a*N#((#rFyRsIR)OicUqT>d8k`|?qAE~z42hjY{C!M zbtL@J^Ss>@CB*CNy%OTCk==H*V2x_`8uhS6_?^VmlXp1mwM}t*S#~vDBOIM`pUOCU z)h@&%tDzvX-n~Aup8L{M#`Dh$JDr0!t_HO&`))5~a8~}d{)W4~3m&u0^`do={5}F( zKU@l%i^vO43a5e;x~pC?cs-*yB*J7~e3>_;I=^d?Scx(Bf7ZIqw1=TWYI_yM2;z1~%Lox%M)|Aw&f zH+H3t*~@Pfe?2zV{2r9f{k-a?fbl1N5}T&~6l6FG58Qpx!8+{NB`^1RHh@oQb0o#6 zJEiAk(+d;uRcpXb!qedgs_b8fAH2{evuS#vOy=&l8ZcLN(!jXj*cHWmY(w~%E4eRv|$4lyXD_$#;I5&BH1E!eat@skj z?3%{CBn|Zc((F=Ip6PKICcPbD3mZOq;xlY5^@4QS$> z0B+z&@wN;98x<9NX%lIVk2B65zo14BkoyWkU=(2nB6voHCpGXc{?x&H3#$e;V0Z9x zb2Ra5Ibe6|drR>C<>3AE#rt>pf63Tx$AkZ!p8zKO|17=94n(o!V!_fI|H$X1K-c9# zAm!#mArPCZG(as&DR4LCMI-A5Mf+dws}BDr3h)!pYryh=XgouZivYw*Nc)9`Cd?``3|_xPNO4@oVD_kDhJfKiqG7*r+JtqerX_q6bKT z4+cCwg8t!Sr4%o8nhUVMF2Ixh_g>l%N)L|3YTAM&bfL4P|I3FLp>7YHc&!Y!C1@P) zW!87Rm!tnia{$0^p5p!azwE#p_b-4PFo6C4k|50200t5U@fc8)!+R`;w~Pb7R7uN! zbL2tcKTrRkQTh8THYyQ#pSAJUCFEnV8PE@NhW~3Ja5UmyFoeoLLTl^bZIwf(%Y2+o z$j}0qQ5>B0DA^|D|mt^Og~>R+^F z@JcB0doZAh-vcXokbEj3_-OP0i#DYW(1FzSe*nq_Sdx+pJ{%433h-GMFkA>gFrW(R zSITX?kybW%H1XqW2TQ#MsAB(B1HcrQhX?8~2_6O_#UKp)pn>=aR{vALUp%Fa7`W;p6jv=wQ1CAbFC6XU5lK6&|kBCzQn}0vah1 z=TJYHMfUd-XDw(sk@!eN9<*=$oH98JTlYX*FVMb}Q8 zka`;uY3=>0`WTsfoVj0yclCUZtn7O86P5_34NHFg-&r|BopZYf`#22IV(8Jo3%_<>UoI0U#MiZ z$kA|rJ6}sBG8j8kf5gO!7IRC=5vnxx^t~@KIJPGp^Pi(NQ6y+oZBO}WT=6IytzBOlU5IyMU%z4#D{@#+7j4!(r*1&M3H7o?*NK=<&*tOc zQDKw6+VtrGFZ-5h>-B_lxYDrCmue4W><|-$_3Z9D*x|hOW^Z-YhHuH1B~k~W$Rgl*gERnlf9jDj>9CnTAjicw>hCuFxHWKARE8?v7LXP$evBB#LUi$I{kP6^Jx%`%?s0 zGVc|1+GdLdUtULDOq>oUb^s8ZUOKtjj7i3CxC2WCM(-XwEC5@tv?TrE(4A?!wiELP z;7k8T<>Cz=W%kMxg^u`-TiLzrmC0+YNPpMtH~ErB&2uC^kX3>Z`!}rGwt-#s=7~w{ z<&k9xQdHtuFF`oM1W zuZs|Cbc{^RV<>JV<-j%+J}H0&?r*sqraO39j-i0(JGrOx>^AFR{#*_R9WYtG1O@t~ z`bB0otwIc))NqNuAIH5^qz2~IPR<|YTD(PCr zv0*32>IKi_QV8NF8C$6OyeEHeI>MGPA#IHB+?nhcGGOb;@;KR%bnOtcKcLyDtluNi zf@(VZ8OQRUvKlATZ}>LsapmKngSFD>v^DyO)w+)G)3l@SopiaMP3gLFmHa~(*A?Py z@BG-ydx{=~SaNJ)Y%T~j3$ZsYCz?e3YIqkbRKK;S;3^;UzPa|nGMpu%esAJjXiww$ z*3L4(zTDR0VBa~;SZjedR&x9N)yeclj&%HC{r!_ixzIQ}ZGtUI!;tU~{Gr^S2De^z z3*t4Ds#%E6oJk))7hje<_{?gvi9y8vx+%A9e*RV)+FKlbmx^1yL75vGHrb{-$Zox^ z73s$|V%Ac3kL4lU*;YaGkGx%;qiAzIsw;U&?gC;6LmXM04kn-GPq2@b&QMLfk>Y9& zJBPB@#HUUjWynol{2?ts>vcVw_ebB=NBH{iW;E$J1u<%%Hr_qDHuxMj@M%*Z

    G!uUeJbYv|G<;)c=5IParUXi z`GkX>{4osl|Nqjy{{M@KhrfCuk$CjsZ-=Kg@L9c;zO|k$S8}E5MzLJInavNsrA~Zd z$h9All*Aaj#FUF44qL%i3Kjlv)VQ;iLX~>cZ}f&Xsgs4`D>DQbn?pdE*|#9 z)-Lt5R&m zqZ*qUU>mL6kdoD}p>bw@K;AhLAqT6D_a+K9iM3a6?s2L5)=N}4T7Vuxp`-O{nsF(#>JFK@gO`Y4QAJm~me6n;md8?A*n?s0@ zGcz&R#eX@3qg$({LYJ6G;3>KyV;zrq)@1@C)v8F0rFiLCt){KoyMd<8x4=l)JApNKS{`yy^k}Q!bf0fde&a0{I3{U)uUFaH|SOBD;(!~y@P}> z?yX`;HK1aj=isv@>hGnCX^iKfH9y1E7QA^1eN4vv3O93NBxrnMI`Tv&{scZU8+l~@ ztWD9I!@0y?z^G^LLn)~BlHCC9rBZRjy^+t|9JK+Gx&cB-Tlr--cPn46l-V2%^-_kL z-2B0u-}w7hDOawP@=)yi?qasQm|e=SikHIpmlyZ6<aA4%aN4^+Lm2y;o6et+?75%i}X>a~tNyvZL#uuAFvpVf&F0Oz7cYYzcLZ zJ6636G}d*qoz_8p$6Z2;j-~L1uWb5FnMp(3U&m1g|{A$+l0Y)F#SbG&Le-d-fX}mbL6z(ROr*=FJ)W8#_Jz!3Y!@-`1)?VEc>$X7WvGX1iElz?FeRZ*Yk?_c?T`Y zBS()3Ui(wZrwUzbf_)F|@*4H+Hd?=_(hWW3>J-x5+U^KbZ_n%bH+=N%Uj?0I{#8E- zJ!I4FEPtU~sou!0<;nhIq$wCfW#7Okw$Krhdz0jlRIjN}*oOPs+u5PG#)b&0xU#5E zt2;_Hl?@+9Go)>0&ktqUphiSZwwYs(w{ubkQR8#4lriY>WZJ^%52gM_lOD z<#-*kOw)ThI+=6Z26_}ReGTpQG&zLw;v!uf8n~!*+~J@(Q90~r zqA?81^Kxd-iM+vc-$BG}SKrdVGx^nlUlOKguec_=wSjunM ztNORILFcXY!Bv0Cs%}EyZjw$MBqi@1G^%j4*+aVNdyu>RDg~@Wcjzko*5|~fVv`w) z8$7EkQ)F#OyW95mG?^wO;v9JG=emb(n3fKygHG329`k}q){qNCj(Co8h{sp>WM`#q z3Db6u9N(RjAprUomV?*1K3o7(_>#F&hhO zl{Rr6sVDm0y09^OeXov+bgM9S^-MY0MuTpP!c9Y99WixO;o+t{NbKa}SjdnZ_M3_K zc~8A>`>CCso%cPl{nYzvPrdI6{KtC=i94R~@ZazApW5Bsecu!QQxlVJwv4MzCN;dQ z?E$i8Mvyg7*z5?xyeDb{q+J{=P01KR=$w}M{uO6j;%RJ(t8SPGelY`I3@9%CJj*|u zS7JY3jK3W|sGgYPCr+q4 zt-Ql3VmPoWXE${{A349nA9!ikajg)79Mp5C0pIgI`Bl8Z#=qNvecg|mTNRHI-B<8h zpT2@TVNPJO!jOI@)MlfhcC`9oq_WTqMXWtjaS9_(knsZP^l>Z8n&)XHDJ(k$oV4yw z%?4Ush*GpiN3lnN1VuT*zq*y;lxtVGVfRofd!tT6Cm08L&S6sbce))ua?uxuU1*dV zY1ujOo)Kpm8ANV2`MNwX7p;nylcE5Uw!htN62%k0ic&4IPCjHfbw$c%rDtDh;Cc|N zahKWk=%yh>h8XIcdCW=|X0;-B7ru{xGo~r6eM4`VCQP|Wt$y)B$5RS9i;QUMuEpU} zSF6|&3M0(rbGL_Wv^pNO82s|*?c!nRR=;0Dugg1E5(r- zwpt&+2X=1l_*82(cjyovoxT?PmeXSnWVREE^&yymtZy6^%=49}8H`=qu1AwU^KEg9 z21Y%=`NNj1$U9I!bfDZ4(dnt)Q7V*HbFW3}%`i~UP`yPl<3no{cW<;(L|uB2S^=lsR_xyiGX z4`;Jly~bl0H%v4OE3z$>v;0z7Fe^ z-#?_Oq|TS1O-BdPjch|{TImsIh;uNv$bR7M;j#@!VBb-^mPBDm*DpBIVV>7n573L1 z%;t>!C>3po3vD?-qRUsiPGmebb17=0)ry5xu(DRXo?UYm7BH7o6Op`LD=sgy^EvN! zaJv+n*VHWQV3kC6^LQ79yGQNh-@jTpq!+q`qI2=kQE#EMrFonV8TmH)V(y8L{1sF` zZ9Le7HJ(}^0-6~DFW1^dZ8zqJqlg}Q+L zA3#GzBDGS2>PpBWMdej|r-jC-N&r8UQW_}F(O)YH5be>9yT@BJDcrV{(Scq&*pieY zqvNQ9`M=)j)}oj9&eqSr^i7$0)X&aO-!U|pNI=r_tc%ZHfk&@Q-@$lpxHChON;0h- zKCY_U`-;8{OZC_#D;iL!(nu1viQnu@%*2na0a0IPRwDMrJ=A(OXu~xx(t>z(u;;0J zKsuM+LlgYaBHSj{J#4pje4>dmLEWt$U^2=lLK-FHNZhC63>(*2>t0oICkL6`H|lvx z>*8E0Ju{ukOrNZb@5v(wN==UyU3QSjA*0K3VA+dvZW@W12H_QqF5AD>7ZV>tlh<44 z-UU<4ZF{!)(WUI|k@PiYwlP*jAc>5KU}C|Klf9IN@O5!{y;!KMe*Q(vUR*u*HBdz# z_|X}tmoK-g=%+U~Z3eLss>t}RprmAE;@xc4@n#Z^*qh8HlSi(8JXE&bBtAZAS-VB- z07}b?&c)2kOv=5G4aLAX)`FJef;LM9A~J)%vg2QHwB6s)(a}`h@9a*s+Ivs5cX#j~ z6g<_r*TH52=~w|2Xj{!^L{y~a9eoSHu{M$RU6bOtlo0K^u)<**dDJ3@0Xp1rT`-X# z@qFAC5(amiz4k79vQS=972bmn9xJ+0?cBrv4);V^a`2U38U*K60QF7~?k2W~uI0Cby& zu*a(Js0|*hGS)Z5VudS>x~7GthALhqA6`F%9fF)66j`H(OP$KGF$q@d8nuz4i#3&x zv;%a{lIe-^1%1nJ#10?!4X#w050c^lI4m?|HC^s2@Nl zSMl43UrHgp4M^_*(ltQZx8U#zpQy|#hJ=YPX0#};ZP$od?cm&+Ql~pUsiA_4LW#6H zii5`lDdS?|1N5_w^Qx$DP?}v|82E$Io-)~L;k~`C6snRo8cC@`UqkhiCiDa>IfXAm zsU`!O1Ia~Z^uRr6K|g9W@kD#{H(=)WGj|^QyE~1tY$V-@Av@3!QR;_hli8GN~n?CYHwQG2}gNn)y(=9#Mq&N|+BQ~s2yFu9T)Q%`NZ>@&+hDxD; z4jh%iWEL?=r$l39kzuf> zvs1e~KfRNND)Q2q>6uIED|44FrsuZjcP`Ccnx45>+n#ti+<%60suc(Xg3o&#zV=@y zcF6Dl?Mt6JclcB)!G8b90q`Dr;_aXOy14)U)epQ#KL7J?O`K0Wl6ZBG)YJX{AGZDf zR}=pOkC~62`!;xL3!l|zs9z2ZzeYSmeKD+XewlWb$-@r1?j3f>XK#}3IbhG(-Jz@R z@Hx$%h+9I>Qj=`38*|%5GidrF^g}mxrQzeD1rRLAxY)A`FB~##4U!YpAPpI%x*nwI z_q4vZ964U~X_6KbzlqlDk3Ec`#NThX(QlR4a=DS?h)2%3Bq>=_!8Xv)yFuF8g$GOt7;W95LIayjFZ zxK*ol+5GN^4~B}8z|k(2Dnth<%F%&nN?i^FSW=V0CZ1pLP@L3Pvb4QxcS+ATNp{ty zFjwRIB+d;6^6pV>kpe6HxtEyRvAMga`~1$?)dj9=GFZC1#lcf=-fcanul`^!+&(r( zeNzTFqdHazGDb>;0ik1f z_%QKfXkwJlGdhNa#83WNSdiQ|2CxdMHOYsHo2{94XkDHS(|TAxBTfWDF% ztv$5lVpzm8Vxl;HX3EJ+WF4KOtloxTN(v+x=i^X-K zKE@{}SQ$6LKjjK5un(gj`2M%QH=?%WVLL)?@#Zpp3>!2>>JHajj7eo|)v*@%9e&!X zO4KOzZH=(sqB01{6*!z6X*>LA(PCFl2^mt!&OCSx9aia#I4@NP+&xoCAgyc}!vFxa{-4DW~B=!?(;D1rpN+4~M( ze6~#p9Mib5)DEFW?b@xw_MRxL&`GX&?5L8}wZza)F)~Dr%@appBt5R~m=l2>y)KTj zCmjy`U~>S4-01<6?#{2fNo3$XfbHV;F$|DN-hS%Tou0wpCkL1sTac(dE@g=ayb1yp zua74OP{Q{l2mK23=%Z%X33K@*D>&8dKDRqB2J9AjzXG z&(kx(qf+lk!Uz|GdhMl|E18RPm!_xPB>rpt`Xn==DZ2@y!tPj71Ewzlso{u-4F7uI zT%5Ub@yeykGgmIT$&2m^h*h>-kly?yW#kMEKmt8w>o`!Ho0+~iKX(~qWmFdNb+x7% z^I+AaYP3hJt!(cAs%}&$wDz2EsHb=wSc@~fU@dE=Z$t&-Erw%k-BdT%D+tb{$rjD1 zi)))`9XCl@4wZ534DEMPN<^ov?2q+LjmmvE(6=K7zEzc(s!H&vTFpAhuC91P$(uU0emMBsn?iu~I6;8yknhoz-XaGjjAMqUNaOKPa1iz|q zQ1(RZsMhi9c;(@yzyJ1fFB7^a_1jxc!9bdbcCu^G$JU>8c(Y%81|8)oE}Ta;p13My zv_is7PEWyD3H+VOXfQX;bQ2y4BcZuoL6C>1f7i#*ZYs{%I^KTo`R*%(`+qED%#jZ0 zzMHvtc^>21QTL7w^@%*JvrE?}LSu9_VNt)*5yyDan4s7S<&ErO4*PYa8%_MNlrclD zZK&n)JN-Huk%IJecRi(C!=d@4-A?)lJ~wkEJkl=1fMZh%;xCDg+gE02*>6QMJ9x;s z$(gAumsRoUcHP@imbQZ?9h=xix4xcclu9JDA|%stiYArrwa+ykB+SVM3oVAa>Yd3_ zY@We)wM zYqC*=K5ANwS(s17n3dAz#mXT{o2o}l$8mFO#Vd|j+29^U<7j+3E0(7LP4>%-lUT?eCZq1;!V( zMA6}OVC))j>AQZc^Q^N)1#kWY?j=V&849U&nR~`Ss6pxKhgd;HqEIjl7(UKtrfHN7FuEKtN%alT*_(T}=S#{yh6u&{_ger) zPQ9^LosBOmeU_R`23IxSZ&YzGT$`ncnj^n{as15B@Kj~Z)0fml)puG7S+D8jO@k-Y z9q5^7m$z1qo(zU@#Nn$aB6~?gxPCQ^d z+)+~U)?~_6pHfTMH;}c0Yu#K@-ok}@$<^kQ%n72%;qh^D4Q%XTtj7HVr$!Xpf%Yde z!CZ+SWQyd3`mAX;uJXbs6n9uiN!@Z44V+u6@1d)F!{0S7fF@sjqrPkDFm5??*hO6k z5nT^!PKG-jTr+pPQ&=-p9i}r=GqceSk&e?CnP@X?cy0*4GW2gC%K; z-7l*Yeff^#*ncvGgZ%`Wcvydut%n#CbCRx7Kp)Gfi{3L8rG#}NDw%@8f8@#@3Ok%|#>7(SrYMvBFNy_7?jT+|OK*IC+o6BhuUnk=7Tui?awPgr;C z`q=9D?4N2_)dF^n#)??0Kj+)-*r~WOzeYD6OBX!`fU+bG;-LcTG^DxMe?HAkOz@x*GgRBp32lYNrVp`3LH7PRk1cR;&GamWjm65qKyc#47pl-5>L_dRT&Ci1Y#(Jf4L zhNv1+?V}(1DI^5VUh|SkgcZBjd2*?lkK3ALD`_ zL>y=h({&iZ#2ApNI2Eka)HSQ*^^m%~6&9kd4CR;+>wrR{!g%0w z`IJ+nI5F|bPU_XvaO z4LE(RohQypODOuwFuzO6t@VT$>DW%Ep;I>IEB{2%%=XSI$i9o7;oOW?!TLBO_hePM z6g%WnOdb*x0@~bA*kt7Km+vt7?Fh6OL90R59YH#PDQRaPN3mng_A!Et$UW)jC!b5- z{&WU9mlH`>+$iaaGYaVn`2*WaULOS?Rg_7G)q32U49AMjLn=N`2H`Hm+;ix`M>n4h z6Z9pBb5A+yMz?2qVgnJY!m3EbO#Uc;B#bQ9?!shN?Jq1@SDB!jn!@%3M=&QpUUg$Gkfb;Ls{_#mUp~w5Ag3dqfaFZ9R0?7#pXKu@a zvCRra+O5Q85m%Mj_8o`Bwvn4(=I6jNS5ZQhUw+c+P|gX3NZEJ&q08X3UOvq%=Jesq z*gdrb*b?@xE@gxk!4w%eXeQGxfoL*tJh_~-z(!@Vfn zX9ccV-3Xj;D8`nNsR!*t`Hh>uV=iu2>d&l_rB zq%Q$3qZm+ckyhK_}TeR>qyl-PTV&PVX$D{3!19_))K| zqSmPhDu$N8BESuJ3r}`Z`T(YuG^3}DMiw*t?6A66`Nd|#;D8~C50j?oJvA=i__%U4 zpK`NETi^7UK_xt-(e_Z;Z*iY83MG0UPSEQcDoxycZ5Hyks^*6zOtRYMOUI`p6||y7 z8J3J^m_R3{GBCEt^wsGM{NKe7`2UHNeJyOG-_ujmh)gV0%0xQ;`$;)a(M{Z$*{gF` z;Q#ua6EnguO}msG_&>ii6VJ%SOIPRSug+bbxs& zPMbDjWbCs9XDlCk-bO%Tl0ndioSe+B0gT`U}z zm*az34ZM^)k#RFu;eP{0D#u02q^DhOOlsKPwH1WC~sYCkzzb~==(S=0f(ese{xf(vJ_Zjcs+`wzo(P70@K}pG=)3(fM zSee^qRbyNElCaKH6C&!ECKRds&~Kxz-suUfrWFI`MY{1i@JM|#74gHtLls_4W}M{C zVPX)K$y_74gJPUe6b@rQ0d@Mz*9s zUSBI-=j`#Rj{JE{ltOLM$yZF|WKZ$hdU8apSi7x8OK*h3;`eANAP z-?tYMufoI7W9R-FbZy`6<#jybZLVX5jM&TH5=ubgJ(9H3YIF~p+CfUYzcl>j9-pN% zmr|E6UrxrWamE?2`ki^m*v2_u=`6Nr6}CL3RB3QJ)3;2yqcXEVG;>vlh+taIgpejdTyd==9w5xxxL0t zw_zq=cq~2R?s^BvFA8%6v2TZ~ZIXVUxtQVy=PspCaC&zBA}_r7$6RJcxh_Y|do>FT z@v`IS*5jT`mGCZhpF;D{g%I9oSZ_ua2_%XoGWmMPTB!J{49A}yQ(=f=FT4Py%wxt~ z$~0t_uCu1yq#lS48sx$A$~*v`WsgRso9;*P(;==%s40~l5Q3NHmLG8FrK-7RJ8>&% zLl0im_SvcEoEgq8o*R;-_cE$;?U<$1fqDwqNQ9Qy7LhNo@y@otSLg6Wl+Vy^O>LWS z8OL8SImMET<~;QsG#4WJ^B!Yw=4IxV)zfqsDI~Jp8gi=gn>+2}L%ys#ah{^SKH+We zOr)^A<70Yu`pV_n%*^b?>ABkc%*_0yi!GB;GB6j<9iFOcA#`=3@ z3!{Sn(XyfDdoG_cv5PqOP|)*xxN+4618Q)YQVeCE5%?JFS{o2oXn)dMf3`!cE^+iQ z$weaDDl}+wRir|sBDkwU%BY8pp$Waht!AuyuR49(?@31$a$&)G>&a-d(q)n*lcQoV zBVNn21y0Sn-eF_maIGVQ0bARs*du{O3O}ef&<&)L#c7fpv>K}8j<20^?ffY_KUINt zk8zB(3w4nL?_Sj|h_c>L-NgO{YdU0tam*GhE}ln`B7#S)d7Z|POKN_ z694PRV4J@B;3b$mp0nqX{~g1PpkwK1vq)qfF_NC2z`YVoAT(=FX!5PKHT1lkKssE+{I1T1IO&ms+cO9gs0rtw`MEHSKQHGd53BY zU71NKy5)o6Pe%3e)WR)dhm37a$$79+8Nxz`k2`UrTKx>oK(?TvW*+roI!wr(g^Z=M zZVxpV+KwFPi$dnM$BMn32NUd~$TY?lm}tX>EP1u@Zgwdg5KhhUy@aAFdC!1 zL}%|q-Ij`p+HLY@RV-bHN+Yd_v@kMXOGWR}3OzHJRj;FSo1+E9Tm_ZyO@z+}lI-pT zaQNzWb~BfF@_>)CGj7b{m^4w^-@)!mI#ibx^N=RRT8pRAR{J@sBr~Ljoj9QRiCAsO zX(RI5!Y5z+i@5vPc<`UWRMD_!jUQUeWy>R3wdh&nje6D~Nl9vxOp5+9lVbAXn`Ezj z)Y3MFA>VK+VjB@4ku2UYBo$#%n#9y54LL5K%tN|jGDdA39D1Rim$h3uS|m~D5hdp- zA+q$TmQTNhmJ(YJSWnm_UdbsfsL_aJLK%3e3|lLs$(9M2(nnH6PLB{v^`QNbc_0|VVQ+5_qneRvqI!a7THU`)@21~}z5WU1q&Xr+ zxW|YQXi&Ch;z!%~36vk3y*M?UnuUMn;GfHvE>FeYf}i@nH*tL;HIapX7UM_P><|an z0VP`a2QQWuFviz+!Q6FVPh&rRZHy_5r?G2}llxHDYg~PWsvlVkrcbQ-iRp=+XX1*7 ziRq~`K9%WxtS3SJ6#REoo`C_SzxEX$`8vEp{J;YrhX!ieZS}Jl4KG(*$8F0jr2+3q-+Rb2u%MAPj&rQ)j64ljK?qu6hFaT`fs_RnJ=gqA%9e=T3G<~MF!tgdG_HgY3SeuRM#qLN7C zJE=~8=F$LTJaLS!jk}i&OP3v5t==@(u4Ju&8*V4E*b+0LZT$~5Ub$4wR*D6*2FcqT z{fb{Px`CkBrkI0^X*^r_wMcG|6wPRyr|icZ^#qh)pIwIe`qaI8br*28et7p{RXy_x zMwE)xvsLVD5>AW=og{7Lm)%0K;^uDU%at-Sgkx-bcgyQ`_7!)=9pvHY{g&uBG>!SQ zoB2}CeZEjEAaPfx5vZr!t*vZf>5lacz4n5pEYDX~@o>@Vws(B#yE_& zqz4Wg-MxDAwBLso=w{3AgbvKx?*$OJku8^R7E4R92VZcUuxeG=%H=f&-oG_BeFgu! znBQ21rk>cTAHwjRz_0S<@+N*o4rcsSdGq?ywC4%BL?BM0V-2C}4x<{NJ6b+hu5RQ? z)z#u=$tATPWgLIr+(5&Jfj@`tYl9_}G4_1;ocbAZ73%{!SEhz?w>F?NlAzdkS`pIs zw?ghluGIIJe4&yn-GJj=0pr(V7OYOElg}=a#@SsfEE^v4XsR-xIIEWGun ztsc{3+f`%Ob#Mo#xDny|O8A4hyr9XJn6A(jI%L&wi6n@W_pC*A3=c7^cU+~lR3uec zrRs*QyqELGu{eL6Y%~VACau98Ye*oB*BB~jqcYaSOkog@dccvUxNP<;to4*ptEI57 z^adv48zHpvQ>+JrlZ@UZY46U_c=>Ri9f^+5yttb98oXz{ckaEg$bHCK@80wfhoc`I zi7%$GUdemV;o?UWj{X&%N37`dpTAMN-k10=RMm^;-T?K}wyWy(YefGyMpYTZYLcW3 ztNC-E5Z=lf`H$ZU_nC=Tq1N`L2YwRjA+W3DOL}KO^z||Y(7P1zi71N;4+X&VWc8_5>9s0)6<&L7oJZmb1Pbz zw89VvqgSVZdIyKdmEgdErFiH!VMW6$Ai9e1YM2Fl64fSD8~n62PiwKQrqi28n;yz< z-mSM=O`1W?ZQ4+`O?VJ%lLj|!84q>wUX?pDa$9kX3Qg01x07U<#isU}Oh2M-i1rvK zI6gql1^1J{c$vms0<12u1RJp%xuFMS|Kh~QC+RI}`-ko|x9^C^Oq1!>%b4cEvoGSB z@W~%VC1%GS)v0`$mdTNAu)@0-OA>5SU=w7vH=#v!XoK}iX`C~zl@B~%NB*Q@THi#E zn<@PNnJFL#X6a;?B7s045C{YUfk5zih{Jb1@uu^y-b(C{-~ZeH+28%OFMj&>672Vn z8~_XS)H}{yjQRgRaPciKz7{{u{Efu^F%0zoceVfjBewtllYjlA|KSsm+M|!Y z8y@T8!}|DkWj$M2Ty?W6*?eInle$n(#gdXctwtsV|6)5jBbn}4-L1g)+B^GIMdH^+ zLj_i?qcOaW#D%Bt-EO0iCSSLDv*zDps&Ull;QR0wna5@0kA)$OwEHT4iN;H4#Iy_t zHZ## z#*3;*zngX(MfHoKnDmH$*~6C83H78Ara&sSdO(W2Xi}(iGyTYnSaKC-UJGOQN^?eX zl43~cnSwoGrX2m7vcn*zeGl3dX=8Dyp@TQ)hKz=_B{&W*XjqWtv7YQf&Ji8pf!rd6^QMRyRo)Y zw#Zqi=T5hc>Rqq7*G1k@RrWe-5KSm${#KQgtk4hl+ejlqlY*AA--U4-%1T;Kxx17h z$O8LAt9&+l&3=Dx}tCFD|8xRrbhar|%{&Oj@inY;*4tr!U^da$iz>E&Ztl zL$}`W4HdV1gvm)sF#*h7H$Gr|MepCg%Kbna(B%tmAzRrjW!FH+TDGvVnMJZ^bUrlQ zS6^BxyE~}Ho}a=(gP1s@;s_;F`A+M6v#Ql~)hxW-YBg{{I!gz#0-ogCQo*X5;cn3N8dL6~-==Kh zgorF5RIsG!Q>l~qPDe3mAt|m+!i_#PoGs8Iyx#Yc`L1pE$($oD6zevc+beaU+ zCZ^^OT0w_mdfvrJo?-*qMuB1DsHWo`gpNxRolbS=4pYJ!`A6(QkI>T^*G7cE6O*($ z0+B@6WjIqJR6myxoG*NQd!AM~H10+dcNZ zAF5-_*H-N~<*EZur`~}@7{4;79kz3uDEm9Go_CH_v>@ev23=4^M$uM9&>LE<4m&D_ z4H0dINwh}`c6fqzIYKBoq~eswp+Ns=^P^0f&t@Ck`xF`>*K6*5s>{<3nfJNm_BZ3F z?q0-D(Nk^#Bg|kGu+dUYmw(EgnWBv;J~cO!xiWJ(lbN5L&RnGUqV6U5fy|n;cODE` zHswNYZmvrG`fMh1ar(;Km6=O3^K;{8zBj(8iUU1HKc7$h?EkcoNId2QiNv|PwvJ#~ zomO%;a-&)QB$81xSGF2m$}Q&$a4fp!KF@}%_ua+KQVG%^GecLIqf)B;MjyLaBF|@b z2K*CdAPkkew7HgpE(2TtZi9c=A~uKhjkO#RJ8XfRJMKm)2MOKCDKpkw0S{>C4-Du0 z=qHqmK?Lq-XJQVoJfSQ;`Rk>k$_{qvCmly;fX!aB6*uJ2+Inwjzet-O*y?N3-TPQ% zm{j%moFqj-E1yM#Db3OuA9wWMoY4<;VUfaF;`!UTEQa=db`z4OAiwLy0?hgM(clvP zP4=PiWxlWpz2m;Q31{5Q<(@$k*4$#TfMEbpSk)3xRj=d60V41x^FBUq9^}8wZ~V3T zyVs3d8*-8YNi_<2=lMt6V!Q@&Aci9h5k;|OU`9}JA8^sk(XVCodfPHrHGDAccq>KmYsF$!>{vu;HVm--U^_p&C4ISX2Kje*6 zfiddZKviiw$PD%XcdVKhg2acmnU=+<(-Q%ST!i_nd#syS2z`hm9_4IH=$_zi4i(ZnF+Mjm9yalWJ)9 zyQ{-wsY*h(=p6{ zdU`iZbFMWhWoS&RiBwGlY_N{&GFRilF)KRI0P5g)r`3SPga7+pH}fQS4>-i!t+%@U z$G_E{HJwvM%F4OcwF{ke$A`5R_tyKUYzw`!$v71yqM1}W4YjDZPar=MeNgL-c62Z8 z*a4-KnRK*d^zVtl;ZkXZ&M|BuxOCxqXX%u<+bg}d?vw5Q%%l#aeCc9D7m_n|qC*NY z>nrRIU?^+|nq{Wy0wJW48x8!oDwZ#ryS*GO5%`aL8H zrE2tJ`7r{BFQ-Lxv~7of=O|9N^=h{;F4BHTs(U~zewLlOV@)aA0$IJ2!gacVYKd^_;h2DS zMs;8^`h&?XtRAE_t)tkP^UxW^&^&zesjEMVR)y}l{}uL`NA{MpynemJ3q+pwYr}6j zUzLY`iBdEz0~|C|VD2_7Cva|WV01B5qc-pQ4cNAaG3tolPd#mUtt!p6IL1>HLjQ3 zLLA&24?y8Hl%}&ZFDmB6J&tLzH#2n_rAEZ(*crjlG&uCo`No)Zp6q;#4)*L5kx8MW z@xtDW`DP|HGkKz`u~m5sSbOmDnO%*0T#Wk)JFD|AN+aixWCl5|2jR@pUY@#MP5c>j z=bt`53qAJO?z{)+%b%;1ZlgcH3fVSX=l$Ydm-^%$`eg3Wsp`xQ_(mz$<64h9ygrG9 zl#|E;LIZ)64q5>2M%5nB&>uS?H;7NSo4d?SVj|&&sS}?wjj}<>(*gsFUnr9=_LREW zV;?BX;R=ID`Ui(_qBL{M=dDA}!cV@qvw$R%=)Uq{yUTp|@e$^@NSAp)Ye61&oOO;p ztAni$S07#*ngA-YPd!9ui`mELq6X@7abx%S>CDC1EAw;HS1!(HuFPM2yyu&#C>_V_ z%*DCP{M_8^rMdZwGnX#I|L12jbC;%PrspnSnwh)Q!?ALPG$JX$J}%wbO>-zb@`O8U z>kh1!XWrSM_=M-@pediXTlH&j4lHxXgwa~{oivMHCr6>=9y4=fgPYG>hd*c%fNgEZ z=7cw#>fxYMl;|*Gn2F#q?wmbAn)0pCZl~t+*WqR_z*Dq zZ>{C4iSY2yXBOdY;ueTEU`koI+UvLCchyoMp~nlYj{o>o*78M02sK%>3q^xC)o`z1 zluxZ)Ct^}c_Zh@RdeFM7^ zJ$cMV@`%=@80PwAi&QYKgr`6B(bs$w=EqwPp%wI3+VkVz#0^C$mmP6Ahxze5N`N7i zJZv?NBRY&8wo5f^mBvtaIcP{vYlThMbuivJv<*#QxN}6qBR=y&t7)AF6KU|M3=d^! z0arip$ri$yMnzX9P8&MicX97It*JdlbQ9VCU0T6UAa9GV_q5099)!jAJ*}{5F<&XV z$hMl{4Ns`p*)c~_UP0VGzt9~W7A55>FLzY6I>z+I!(t4-O~oeOgYKnxTaHiE@ZiJl zHND_ZZ1B6uBGVhkvqchM*ju1zaBWkUsiELITZ;60)apv5C{Z<&s!Y6{U0WF$nXCh=PoXN>7$>4 z?A?~4)QduB$aY&+1qQy6*g)ej;1nk&H+jDN)q`ExU0qTa8i_{ zZ&^T|2wT$7wat;E&-WM$9dApK{|euL`i=G#@(mi`~GqTa>Fy-h?35I0P^%>n5R;; zQmm2(!H9YKZy@QXP|}#ULy2==36eg;lE$(&N}PKh`qO8Xq?KIp>GCM%(IhDgdHS4^ zG;};8TT)^ZB>gT)y1t1P!6QpL_qGMt$5@i8(2CH2D??TnNV>l8;JHUg(ju(jrQ(PK z86>?E^7QCi3n-~rsGvjbh>{XN1Ck!2JdI~Loj7+7B)RW=i6pJ(*!OxgNuOMJ)w!g~ z6HHR0<%lFrK%S5?m+{mpJH%1=8{|O{5Q0ZW-tY*ur zBMCxDKMeJ>swIsP2P|=}33=M+k%U%%!{+H#AnBHog!arM_JYL2An5}ab}dPj+auIE zNLpKX=-j@MG*TTYNzX4}yd5kZIf<2Xi^FfBS<)9Rpz{JrDle`T%cBI3Vo9*JoO@A8 z%B^oyMw`Y_(w~R^^pcWP&ZB4YsFMD7$kQj?50E4>#vD0M-w2XEMR~%|U?cTPCFuu2 z(zmjtVqpa(jWqs1(jL^)cTj&?&pwkIc|L$~_h!fw?Vqaa;}j3_^bbMO_r2~5Q4(E= zj@Zi~Pk#<1{lGh)Vo7Va$H>!17alqHX)0Y|bDaiEzE~ynmvj%cxiXAZZ%%^e9WZ zy*~QJ2THdJl6e1ADQ+&Vjv6%{^7J=Bl1q{{3nT8Gl%#*L@ZfpgKhfMf`f1}F?4r+4 zzxfj&38{5P)*65$=$Yr|zu>1q(unJmmX!F*&#z|YN7A|1fTY#e|48|E zdE`1$dHQ=$x{cRg8so^K^Ym>X3HDFukM1sS7DhRjt33TWNcsRv!X7?Gp1g%uo!@u% zLm&B3B_*yyo(?%rBx%Hqfh5?EpTGB}zloBn%f-@qc0?<3*b{)H7cozT+t=5MBg}C| z(gmoemsrv`L8(Ae5%Tm&=X+4nIDHBveHBRh)EAY;b`MFMyAP7S^|5aPNla=o`b_sY z)YEso{zodMP3YsQd1$nEQe#KtFs;gyoobYTKL{EWNuaRCh$brQyQkjZ;{EHmXWaJx&iI_sOtSQ$= zbl)R^F!xO_9YCH*zY4PVy!f)1fw|V-rYJ_qcb}z#-{-WlevjSqt$pot2{5m&5{kbA!$~uKERviJ53h^oz2Xrc zll$gzufk!Iy%WUWjY#pj5EN2pfF!|3sMRm8_LhObOg zG#eu+iw$_Bx;<~3NND^|%a;JkX2EZS(QeYgi2=|zdmlpp2FE{f$ylI&SdYF@oevgNOfg+yWyE+@0#&!U|+Bw-2$%c3qgF-Rr_X%@7tQ`gc}ekQ3J3W zV~X-4^=?ymcIXmd`Rvi2s9PKB_w}vNLDt zfPCjcOMC!O2&bxXHkR~FbAFNdp3OnX_ZGKl3ZjT9ClUmImFn zXz+$S(Npqs+?BM}^APxntou&(-^0X&6)Wf&Vl5OudS#ss*6~f5C8Z5v5(Vxz1N!Gx z*#&2_KP4K#L-ba&he(EVF$kKhn~=U_X7=`$_6TD@ZIm60QNlkf-eF^KqhIN+W! zsU`KtuOb;AG^v-0JRjZ~dUH>D@c2mM7#U=aCtyu8=7Wl(h>sidd})u7IFM4_beiAJ zbejK1ncB*geZ-sZ>NjOHa>BEGQZMVGhTg1chT4O=f4*5_#=HF>d%p;&?d=|G%z{`M zcxEXd7m{nG9Zo^#O53aB#N5x)ac`SxN|YL5u>zIiWKv_n#gasA5w~6*d%SvyO)!as zua7{hmGEe@UbsXT;?Z};O*3iS>!G{1Ib!N(TOtYiJuXR`c(qT`bHHnYRtZjw`NUjU z>02O24SP}126RxdJY?EU^APDD{_QuvT?IiFFo;`o!U!OWPONXKhA1qt^{!z6W;2Ot z`fFjaeZ1T0p+SEt;+PY);F}z3q79_QJnPc%N_Ai{T5$0@;MLNJq3uU*NW_oOL{y>K zZAb8@*v{=KlW)>cQXP-zKq%Gqoudw&#Ca%)Y99gOyaVY>veQY(L9o({?UqX8`2b%^`Hw~cpagp!%SOTA ztmla9H!!*)W6JL$gPW?`nf8Itr36V$?QGTR)KZm!WRLuUvWXI^Dzws(RY+*$i5FSY z-^Fk7?l~x~r$0Y~lgJ(&YSkEqF>v5DVT&3 zU~tKVvl~Nl84$&L)d|Sj%8~laF0-mn3&30WRN5X0DfhFxk;d|WHS-yQ0W zD>^!u*n&9%CL&8|h%&toR-}&y0~5utY)B7|DWqN&J;6Eq_~G*e1jNU{d@x|=*gSo| z^0{vX1=p7>NB6(QQCG0JO9OxAV?*j?5;7D+gEjmG5)EmYw_GoVN411xqR82%15|8y!eYe}d}E^Q^l zQHb+dYBkLHab;l6v>mmP3>ou^J2ey)NNOf2E#qeb8E;JSg5RG|k10{#b4r7W53p&3 zrA#(2go%vrho;;TuDLz9?_h34QbV@-;>SiX7;zj*_W4YvK%Ow zq}Rs<3&MLqa+8K0{;zv-); z_;KDRdZ@AaL2sARPp8>sUZCl-E~>M%Iv0n_@q}bk^Cn zO7Tsf->nU$ad&0l$OsA`f+fhD8~0V3XZQpByze|IIPbxF21ZL9Dt8>4Go8*e@QKPY zWQex-gnM93^bX!k9m8@-kzKGepQmMtztfxsgKN+VijCj)uMomhFVzzpud=6K0fF)FZ*k4PoECm&V zAw~ad_2&{78}aapnuzCBk;v$Ua*dW_j+?=B^K&Ozf$B9)Qp%7U;~ zr9^8?M3Cwb=;sCTQ6!had1NsMHpRDYA^#C-VZ6r!FD+kQHbo=7TOacd_W}mYkWN7` zx_`tMi^kt|qUr1XD zsO>)UfXhde{FvYfeCelXRvR33IPDj7_`&c3&U=N2YDaedp0s;@p>d%-a-#K2u;B}PBYvz%l?~%9vu@dl7U;jlz zdzKXP0N2e-TIBQmuW5G>IUBF_1KT*e$^|6eI*LLD^TP5Ptu&UfJ*G4a6Cdh&a2U|u z{vXKDR&hJmD*aa}k%R2b_pssW{QaUYBGM3cfY)me9PBZSMR3|3gNq^34o(>!M$QdP zgk*_hu_4OPkN6_(X@*m($sKzmh1p4T%pV@iB z5CVF54@&T4I)XpIz^i4grU^Q0D9AWFgk6P?$k~1ui$gj%%Oi>d#gNe#fd#8Qx#qrk z_FH|Du7Y&Oo5%hdJVU-e0|r|Lc+iz8r>cp7!G=!^{=D3kzv0M0|6S>n^5%<_a7plk zAjWx<2R}+ClN%0+5>r z_swVb>*?J_SP;Sv00xtXi$mLxFpxZ?ZN=ulA48;6P}260i$U0uGu^&6nWE#uDNhJZ ztv$#^EHN2nrjUCnmzD&lR6aVS$NxQY6)mBdxzs5BPDJFtpx6J3ef^J*x9jaI*?<$- z)OgrW+@IK>|7yR1M=!yBoZvnpPpJQ`>Hq%6|9ka+aPt2$}w(ps$9f|n6&)A zpn7Uq8$nZ>_GYpve&mL9ZKI;KpbF2E8jANbhm!RpPS5przE31qt+$w>XM+PA~Llx%QgjTKJJc8 zP#9oJcm(Zg7=ZEyYi@ikJ>fW-ErnMk@-&V5eCwDC3e#7bb#OZ!ecO8#^)rGJ=B8r z#NN8#mM?;PpW{>Jd7H>&e|5z4F^7NM0J zg1zGZ$ysJzxw|oLKdLpqNXMyc+Z}rIKI=|L3nkgPJkx&joN$p(uD0jY=ZPP1?o_(< zTBOmc?CL2Md$`!4CE+F9?9h#1=zw_xDF(FVIsuHx2vz9Gr3ZNslTLH|yNc1QQntLu zy~4m;?FZ^Pb}pPl@+h=KF_0919~mytL@!G=4)&sg6PKIP1u&MtIS91c06IJPV!qe; zs$ghd;dCof$M!I?1?aoQo|m50@fN!27c86Uz&=;%r23i@0_Rax+8Ll1;4u*7i2`F#BKga3-27@&f5#+9aXhP+ab_`nbiz+)S?(dS3ZDBC zEZM4_E7S8b(X5AP#7HhXS0O>?h8u<0=sy-R)tgO&f}H#AFQ|J_-JpTzoSt`8(4^l3{p)*>l#LL*v?6Eo+(%L7CF2u~Sno+T9NP?5h)fvPsc zY?O1j&Ul+sW$n-0^FdU!bi*>(vfE24vFu;^9zDB#NVitL0Up=vM-E)7WI=e8+@v{} zu-FyZ-$;pu%p-hB7KF@ZKa+g$Uv7Q1P{RdU=2%5LNwH4c^1T%tW=_nms(Y4GM{T%; zXB`~nl=VChE&*U3TH|u2dP^TjA3h!o88JDLOzj*&14TXn*~COHJqm)dJqtv`Cs-p$Iy zqxMkK$aL_hGf$aV0k<=YbxR*=;H)ZxrPp^dCxfyGyOeH^D&O=C0fkGCtof!O8xo)6 z3ML>3_dw%4%_0S(?ER^@sM5JzO>arDG=FS0s20%Co=Lm!Q#^0G^u&CM_dX<3(bm3g z06brn7Vut-WzE;3b$mS;jT5GHF?`oP;wEb5otYBUXTYpnQK9zj%mgiu{74Ny7ptAk zDVJ2a38@RzAW3V3y*QgYaQXK#{;D@TN=W!Jp_AWKAHz@(@<~pw1e+3 zpYF5=+?*S67=t`H*SdS$QThk_{t2OcPRnFt&eFzi+R58{a*}=JXjyY3bWI3a;aB}% zBY0et-s#&uF*jQ$d|YidL0)uwe>smN@mU0_<(cGXJ|m`Rl_@`RO|HiYqK4VcdvtlA zba;dv%uNPldb&gy5ZpwN_75|bTi|{;K&s@YiV+%=8lbM#=y*mPI^V;gl4n;dW60f4 z=ggnPA)%M;oEwMpbd^_ZUby4?KqHzZ9?YCLS9tvyFoEGU=(jap(ODx3z0|V#-TK8w z5^>6%x2C8Coq_e@HyN=_3|L+d3XTO+ zIu40TYnOTO&zc})sr7KM!$i8+pAIZTF4xDr)$m05^(-!1^&B--iNy@0@Y$DSXo1bn zub2mCvy)l}1mlO-8UOrbDw>;&aov_Z#$DQ4O$eeLbfV;xyAdN+(`hqr616A6gSPuyH}cxYfx%`Oewki{MA+Y~ zCs1ITvcsFR8YYTgZi`qibGBkETJVRY$l}fxb;AKX?>P@at8?B;R;zIw#yv60;JNnw zu+O{B&xkVMv8y0_&69JdFxZG(Q_qm@PmOUFq?Gu}70S!x51@P9vJG3^2r(3{?V63s z+YeOd;U^d(z$?FG3@+Bd1drBVv$5k_M2ANOud-I>oS>M~2M!0tU{dzW2d@b{fIrDK z`*PRq;U={Gi@L^b&+|fx-}b{V(Uh!5dWpWp9h;V9{pvj#HsHmXuhYX>c~v<5nP~Ax z@Yr>qE+SWI`yGevR`Lt(Fs$1TdQ$KuebCp%6`AKRbC3V}HG!_tWXMD}bs9H141vm?2Q=S;mjgu% zlEJpGt)A~4GjO>ul% z1-vaxOJf>5c22YQtX_~gmWtc)YwC=ub2g+5F6`~a=aBh$wUUQfdcIrJzLhIp;8kl$ z@R#Z87`QP`8MNXy_7_szS7ngGaWgtN%2J4qd_DAq(GrNV^N zWZJ>%wpw#uGsUGc>SC$f>`eP3rj~N6GJ}&`j_9!ux1134u$Z)&!FbnH${6>ciEC4MBjf~c6SvCbGH&c9ZE5%XmCBF6c5pLqSMg!MCwU( znH;g|(9MtY%~EVcGee8#OO#a_1qxlC2z|l}Dncz2DG;sa1?7SbxSMsn_?pTJBWsXP z9Iy0R7p#lmT$XHMK5|GVr>{+SR|fLl-)xB}?QzPgH~RkxHvh>524)FzO&PR#Zo|^e z-C~`v&ztE57(cztn&Yx$6#OfhV;0$>au@}yoW#v>H>0v@5!($l&TD~R>cz52(x{+` z2+PW{3-pX7iP}}OIf5lF;SwH**7r!+-n1oRY^(Y$^p0lz@*XkXb-@Dva2uj7ewkA1 ztg@OH8P1a4zgn$M;T4pBWFai%l$oqINm@qjM&{#??qgw;b=C``&%rwGo1zbnyzSQ4OMTEah7Dtb#P0zKD zTZP~+W9*+>G#~y-NElS;63z#OKOaH>oVm(`fW#rMzT5gr&N?lEY*!b#we$QOC04fQ zZ7*Ke$M5bkCae`?yxABL{=bwe$ZPe-!1fjWX8eEHxt@9fcUW=Y2P`tk<}lPpyMkiZ zt`+SCSP-1UxZ@hh&FCy}Ew!`2ucG(}1}r~-ftgQ*wGl8x{^zazs*Kx>I*ae( zw}!c{v@55!?cbWn9A|aDlUi3PRd3Mk)3)1`Xm#f@R{zjkf4$IgX6_vNSj|rMK$V2I zde?3j9A;T~&^_m`)dtr!Nb{@BnPZ6}re!W&kG#zw1urV(5Co0JU;(5P zE+gU`2oDyvrbB>Ng&hG-%MhamdP5gy8>zgUe?OS4_YDn*J&MPMdHKHL((!QV%}da9 zXmcTafZCNAXZ^G>*;C}QN0gWp+o7OQ@iNivGiOP(VDH{LsX}1MdIi#gy)tL>1Mb2e z6%UK7@Q1m&`C%{isSjJXuYh7VJ#6XysE!=q32Ij==Iq%!CQ6bmZ4m7vZ36l)|DHw! ztf?9#SouK9r#N!x$}XvcR4A0y)rV~#ib{FaH~+MEx<6U3SprUchWUfxJyr!4_zWs| z|J*3pwAiev`*k25tEE75;Sn|PddAo$0}9}J!*7p&6BUQ%k=^&&x*58U(4`4mE^ZE1akaOc!KQfxog!uH z4T=_MWbonV25IJ}Hp=ed00N=SO{{ z&DJ#nKkJnK2JR*q$iYdehOtU}M0bRFqLu{;q2US1N_GzyfpaJQ5{*-1a$Z-pS1o`{0kf&d?-YB$+6iY7jG2?_AS@ z`+ej%0x=^op5a9C^LyuO^o&xK{ zp~Mq>5QV(@w%H1aJNvk~*|WHgQ?`$@pJK&9VD1U$46@`B^@GyxeV$2G_w?ZNr<@gB z;eX@(V_cJ}{^V!4^K%6*%)1sm;eVnvX58IoL=8PUn5;Z-hxc%>rAN7L9vfJ(v0jOX zc&8gFgn@uqq8;WOm7K6npW;p-{nIo8_B?n!HLW}}-2s`PV4LAOm_^U=;?H4!iiEd? ztNhO}@0x!R%VA$^?bc-S@ooeS4$t?sqK3Q@TM#8*;-d;U&&xkfcbV&d7;%DAKZ2Wsh?8=>(a( z#F}zO_GFLodCdC%*|0i7K~(W`dx$g;VK4ZAP|q(Z#PEmcw6iQX+4nWW!LE6T*7xS1 zzJHvdo*>pf=?urvqlM{^uOPCs^%lRWq$pgJi@kS#os}~q`c4+DGZ>mQhnu>boX&UA zjmPUxK)Qscw!w@M74@m{x>m^x@*J8-rx3^VJtnW22MPg9Th#qH?M%lGd*KBUY+nezYSKS9XjOaTv1E-}hy{VimP5AGo8e{@_&`HqkrG8&Am$Cy_Af-+xd|*bXTDLH6I!m+}*A)aoLNwE!pi z%XGFt4xux|IPtKSH7$jDu2508&j|>esf8%;hH<<;8PCoDEKIecnd%s|6PXxm8GiX+)$f7?|tuwYp4^a&C9T%6X zG`Mw-Y;1S=!J^U8t*p%5??~)^R+2B;&Vh16<5KxjAAItCla#U_Jy*R z*6`X8)hd#o9#m@sxnudLGjr(c1t+HIG#Twh9hXd9KPWXL=v{uv|)QjOmQ2#oPmVjo$+QE{LZ5Ulufe1Fm?#Q$qj-Hzs=?{2|nwP&o7DitA-`ej#wJiXznYmXd0{<5?kEMHz}p?Cpo5R{#K_-Us{y`v60k&GCWlV zR4d()aj<&G!dLvi7I=E^)k`rFhv8nJU!`F{Jipf-;fskk5vc$PU+U_wNrvnH{K|DB z%roZm>E&@&tG69c(6FCb@P%nFRC@GAvGNZ|(Zh;1iCj`pX@Ay`-#uRbQ(`FCRCc~% zP0{p^%gdYB^Kr-|37UE-r%vGJ{vhIgdBQY<2L;3Dl9+DBvnU&08>rFaK3|8j2ce zKx>gkC!y8l_6Asf#o`)ncw<1;d_416TH@#&;^+*x0JV6MPsr#<-yc<;96MK4&4X4e zmQvMN=Nwv_TZ?toJ#|ZTt7zTb&+o1>^zpQaznXq|Ad<4Xb^DBsZt_>*QwTaT2lMt1 z;`qRK&%mwtt0!m#MlhiEwoOx0o!p%ho9cWrTIO+m)BAmr8+hyM2T**Qw4z!NnQQln z3q1JQ<8fPqIU*VS9Mp7CeaUgTQl2CayL~!c6j5?_!4%8zXMXEfP$7apyAdK*_;s>p z)Qtn8iZcTCnGv?znpebD(DLny%a4v`(Bh&*&4O0g=7aPmo;YdAPgfJIOr{T}oPOcI zTre*I+XO_93Z|JMDnA@`_`R@Ftu7vp{=N^5nRwTCXc^G7-5lPJ^{IGkf9UBkOfl|x zXOHs-%CSW^G?d9LeSGqX4EA;5vR5!Yy8eaSuBYIInjTFrR^D#r}!@z?thy38T9#ThTDwj7Gfn|0&HW)*3~jKN;aWr^h_$$By4ek6N~c-j`QLK zfQD@iPp|i%-}*31VSm#|cI6R%>M!V-UX-k~&BA>kjhlaZVCsLVDX1CF41>xPvSNEw zpsyldcRc}N8FE|A3~9Rh(Bg6BZ*alMAzdXqhToib~oaY-KCWuf&av8(sr#0EMWJTnKaJCRKeYZe~ zuR|n%%0z*Z6u20qKQ+!VmW{SY^2`|eL6jRruy8@|y$UIE<;vm}1#P=+_zwdN_%S1b zVaU5q@m0Zuc5HRU6{7m^ouL$@VdW~*4tR(uz&Ru*N)e(sQ|82bg$kZLVnTexfS--c zGkGhSEHK!!%X=Z;8Y`pQv`G4)Nc5uI5q*QgX~TF#{Epn?jD)T%=i!#jjMNM(vMmz% z7y&9f9{RMVP?c3jLSkzI_-Xe#jeiV;d(WlP$l&wloY<6D_fegbF6KVcZlN>TB`k%M z?t@OxD}XoTo&B;@#F%T`RT?8n*bX`L2DP^FZ2PoXgQci6e$Rx0ZO+tB=|z(3EU z3AIDEtv#msp6{73UJ&JSKy>fK)RFO1J3-nhLa=HQkr0-N;6fBqsQx= zGrc~{Pg8%gH7;6g|JCfGPat+Kvba`w{^6tgpYF`@n8C=-vdPDr)gqozF)`Q8w#s#_ zq$-%Rv1Wc+ZTRO>v!B>irC=0f@jJcF8{YI=Eix3$0fD`(l(N-pZ#{%U&cKGDujlEx zL&Tdc)vxkgj&XeaGxikb_@Kba#dF2K&H11XpuVP;<+mNV%f6IV{aT=bq31D-k{6Ro zKx0e6SW;R73WJ2{5OlO9*(n!0{I}H}oHo*a{`HPe{_slN^o2j zW;QUl;pl%U3mtxiFD4qaOUvnJDuxxKT_kb>jK_YBhelLkP+1fEBvkfY5Z5Ng&%Z1N zT9kCtplWH+%Fe3ROdI3Z)no-u7UwR>Iyb3ewQhMbn)39m6;!LqCoQfxNUcHwUx8rn zun=ZvYhg@me4&G6wuVZ4MB>gOW1jDxg5#k4iywPIR%ABG3j3wy+;mYB6=p~&E*}yv z{WfpLcBZMHE%|G<=AQPAgriPua1r!I4qjrPUcF985)1zcQp0^OgI4e*LxkmWb9HI! zGhp;>?hfHORzI;{{);>#cWgkWob=rud)cBA-vWS*^429#7ZLiRSW2czwG&R!{JChk zKZJeesZGEK-OY+P@oSiWBW9!{=AmhN@R|-jRlGMwj?U4**F>uk?J{xh>+A!3SW#E4 zxprIE&VEgyY{jf&dR!N=a^0p4@DXB}nac*g6FSOsdQeaQwA=I^W5fW3JGw4epZrK} zWE)gIQc9e3e6UnBM^j3O(%x68%q|klk@P^zW;ex$osWtQoCgI0a-?$BKs1WiycqmjHUN@RCUPB9jb?^gj^t`>hNXxQx8eBljZ3{b)f~WoKI#=x0LDjXrOO6$n zb|CBOTJ%{O-uptd*&x9!By1m_p9ADCX**{>(yA8P+fNs6)^}$6-tJG4WcSI}afSgs zlQ0tRWRWZlLgv;10oN~Ye$OxK_cu3vBIflCN`1EuWy-o(`N9u)edKiSn&%W@jOXj+ z**2UUnh=lGohHzGurz!5<7k8kCdV>JK1a@E0nD5|@2d%B8{Y%iD4x{ngFx2o92Sq< zV{JUnsH$W9%W<(p6m_gev&)CHG*#5>Zw3z=-6=6KDHg0zvb!7IF)I+MzrG7VAtj7oP>Kuk|@JxiUwC7wHI5dlqQe34ii0=6 zd&37L@xm+X3ZYsX6auq=qMbjS*9!ZZ$Pz?R0?VsrE9xwHiQx8HH&9T8SaK3ur%y}2 zblQFE^hCAD&m8oVd(5kutf5QRtc+Tb9t6d;?=RCXw1>I4*Q=FIiEBSqrv~)BuG@|b zt_j`?7=bRE+Mj$gYaVdfpfwH_59IXTz7>CRe{i03fk${id7+9dxGbY7YS9r3RFMB{el?d+GSRYp!p-%5RZ z-4KpIie<(1v;3l5eQa9Zzp4Gh8`tOdH@$!-*Ee<`|6D;ExK_~ns((fB{sMXUofPgb zP0G^?(FdOCHTZG!ndPlRX;N>3D}xcI$S2?p?0fzME|J^ibueeS1YlW=Jfmo7AdCP{ zSNLq~@^FibO-$CV-wvn+qX6<_Nk7`@{+`=Uhab}9@N7&R&8T*Lcu7(NANyjLvaTjW zI!|?5w{K8gjJhM2f+Aj2`Y5WUFF_sd(@2lgn&%b1r>W%^PjRl&)A?d-LdDcdpypd3 z?K$qrD)UfKE;f;iB=uVa#y%0XAqnl+a?u^LM{#F+#4mN|T|_Ne35{V2ymK}Jj}>Re z?9njxlJ(=lf<7#G&uG4?Z~GDn9WMF*HiUq#mWOs z@5+AdoPQ6)uf*|gL(*|y?P|S;8?xnOa;dSFEZwYA$sU&FA5co228HGR==>0{?zJQ^ zHv6cb+!}DkB>Ek8Zi0=@VQ|W4rTL!q5obO!h57pjK7Nj#Tyqgtm3G! zF0MOKgtnwqs{eRZ9Ho_N^v4jOxI#qVwLlgDdo)P%rSW}tUf(@T;tj@cOi<|Mr}P|P zW21$s_^RaMeiy@k&GkU1$&m7|yy{<8L0`^J%<80t>8-=9?j;YS;zwJ`_Zj}8FLW#J z;QCEn=glpeYkVD)&X3=^6%6|D8&N+mKYfg428~mIj;Z{RC+v=|6MlQHJG!sidpPz^ zFo!7$=89ElT*uWzHAwDrGw=8v&<4;~`##DBV9`BnTGhS^3SZPaI#f@!oEU=uIXaJ- zvmy62ocU8RH8~Qe0{Gx6-K?rkUf%nOMNz--BMAr7TLshZ3k!rpIK?zN=`Uy=Cu^t8 z3p`y5ZJq7Ss+PS4^((81%SZ5I-|v)!Nv@+T%}UV6bRF41L%2hT~dT!g1Z_6sPW_PRJc(_ zvLUE20Wng_6M$qyLK(7anPiLCPq`a;8uy5bTkmTBG|3QQE|D@Sw}GpX6{C5`8YrcqP?SbJ@HyAx(a5#H!UCkZ;`od}XiyWME~Urn zwD&Eb?|=Xk`hNMgkf9xO8LHjC>vPsx6%P%DFd3Olb~pM%8(72di|{vU+J>zVs2DuN z;NSsMxPSHCmlQV}TrgqzGGcp%)_!5(eBx%jyGVa&c%33Y;TKdhtuGdZ>sJ0(*!mc+#1Yoa`(Xv6OF{O~KM%cf?oEcMV?m@&GrB%7D z(z~W5(gb8#st0JOPgU0P)cR!`5ZO-rbxE%a|4ai2^XS&BcnNk_|Ek7PRWY;I@*Slx zfR*-q{3P5J_IR*T8w5{X>a*40DfQLb^0S1PNvkPKL_?Dl0tM2an=x~_QL` zKB_)kW_Y}?-7wQajVF{A9|DpjsMA8vnoF-D<6qe11TOLCeeXrA(d<##vCOp8F36;v zy^u7ik$9nBR39B7O7ad-Uco}OU$@Jm0=Rl4rb3L#84)I;_zcgaOA@Jnt(ozC4_T5O z7@@P;BF}H#s5mBhi7?`wh>iNg@j-pCH3zI+&|%jRU{?N=i>n=&7tHim7}oEMR0e~f zcfk80LBW&fEe^GVnVp|bX+j!*oZpi4Kp-Lr@ZI;uXTg=d-9G5UI|!|>ht~;oZK5!`A2Q-J`R{qnmHU4TjVwN4daE^SA65UGtiJaxmmTh?s_yyUDNGPm575W$ST zajuBG}MvdR>-qz^i+Lgj2E5taOt)UhPvAzy7?O(}KSpz@Z(R0r4N~v)? zUdMj?CN*My__Pw{Kb>f9wdrOj{YZ6`1W(2Oy|Tt8O>G~qGIyLlk+k?C5#32IJ@ns| z5Jq`I9Up3!u%?aXg|?nZ_L1V}(6s_W6j;&ms3szf(UOXBq#nZ2sHoe)ZX+u`%hLPk z{wo9SyvbYV-i}6t7A0*uHS}196qgddgFTUbtkbJL6=Uk>zIz*+XOn%O0u=@f+EJ|E zk1GE($B0748sBO;8_n$uGP=vpTMrA|rv!d-vKoeQ3Gb%`d`Ue5Skx{8H|&}@TUxg! zf8X3AYcH{0{zN2kDt_qT@@5O|G-CVGfp!b)Hl6=9Vbt7;8yYL_h-WWzcE_S$gmp-z z>l%0HaR`&)#?!T|-a@afDM`WQJ)sP{_b&dXrzkWFz0Dirnk+m?rCTn5`@3`4-teyy zZ_nfS8=XFRKzkrn7L2H^(4XWh4uQZusSC0k?Hd!UBe%C*5>#DEzWeOC@Qc-1TM5SFb1Dy+I6KcmV{4|cq7VYyH^LG&MwGkLVJh7a@j;+0 z$qR^?ZGV|{6`w|b+Ss#0n(EAXuR2-i(4NZ&atPqw?h6B|pYb>BMM0-hPNmB_&C-r^ zSGiQt9lBxq!>=72M=EV(B&@w6OSA$CbhWU$lFx^yOl+nE(I!iES_5t0qWAp|*B>W3 z|91L+o@*QJoEw|KE*IaFT+>t8sf*`A4u#zm<(7GvPn-|>X>5>(IE(Ygu&8{*_z6GA zR-{0ywXn+^_8wW)%ZH|n4?JO%9g^vcL=)%_1y+s8sln_JAH!Ron_r?y+RUioS`-7s z6?n=iOOiLQ(Q<0GdT{Etr`=Wy;0>LoEBaC@?`W6prpW!$U8zay!G5T{Y-w!(h%6@6 zoWD@m{>xHzG#`>C5sq9~bX3mE>xh|X)mI*f67lW6)&Wfrnv&h;=Y{>uCjZtN6)}m; z-eHV{X|T-Laze~>KJRhS$w9$Y$vIGiA7T*u-h)o{4o4nCW)*79#CFvE6DV1#waS5D z9bW4Xo2~t=g?@z_t@Z!^a5+qo!*Q*UD+uhDkX$_*fFV>19#jqgezElBAyI^~QpFddm_2SFxOgrwc=DCRLN9sO9&J@#QPR8)qOF zTj^C)R>RzeLHBL@qpQ-8AoK;8(3ZrH7+Qt%B(`)P(D>C&DO_nR=7sp=+iOu&w@`X{ z1f12v0z5wfS={Gnk-(5R15Hl_nAB(`EM>=~#YL{^+z*?JjmiDzOhi%vVpF(qCM_C( z41o~|GdHFaJAcRo!0XqS%N#81y?mYkpuyU<@~FnY{e6>XpL)533XA^!%_*jd zLm%8z{#WmA5(DZ}e_>vZ_@R-6&i5?@Qfz3-C~?GEY6LmgUY~k(TB+sr&nYvCk|fT* zo~Ff%UgGh^da&2A_M zKkP}o7-xb~I%l8|MWE^par?+-&fkbCAL%?yT$@7Ylp!~gMq`Y{nC~H&Fy$+0z>-2Y z2?9??EZhzg_Uo$n*L&!3WqrVxdFi4&q`UrSoH6=Jgigj}5;a&2X)Qq3x z#I-2*b8_biV<7p8R1tm%*zzb@WJ`n>1$f2KDnyCsA>zYy6#78W&B5A30#Sy-gxu=+jE^y0 z2PkP_>YT*SB+cuw?AW+4uDTL}46kf5g4a(o;LC%cOg7R+Bnjbiby`{;!3P|uoQ z)GFa?=}VCLy~=K51YhWt=Pf2e*htLKkDsILK@v`P;ZwWmfjXyz=JLMy9wyUkyh zkF-WVlCkJI;SUuEg=VC*mDRY#?dL4L&Bd8fJ`n-N9}fLbdj9k&ORWhLy?w(O%sIl# z&WBoP#`!3bXZR*o!~*Q9`^(k_(~;i{i%Ze>{ofb)dbMss+HW}0XjXI@|8C8r;Jo*7 zeky_>(VBltRkD%a6U0p&Dp(*}v|U<;rAwhqw3GQT^#*SPYk9szCxQa^s#mqNzy-{- z#t98ySFDS^8Xlg_vwYTjx1AgHVkRCN;xzbeBl!OAxc&`lT_SYFp8*(X&sd#;B^tYh z3>zm+h5mR3+|#cl-}Aev>G$$jLz&JhZO0=mwUEl#xd>cM8NMcNx;PpeKbEQ>nw5~Y z>#fjZja}#&$A0u)?)wGVS^a4J9dvVr7Err)YZ^&33&(C^hcd(^LCc?Iky2fdkOYI^|B6uD777jzms6zx!l-z08E#rSOx9d-;Z4HlvebP?Y(gww>=wI0Eb-Q0 zDVjd|_*&xtyDQ6clo%U2rR8SFfxfOV5NB-vZm}8l&G*mS!y2nNTb`s#DV@F$Ieok~ zAeUKoiQ9f?UAv?k=f+jvO-T)QZnyCItNSEj&WeQ0($#o%>x=Iu_3q+ZZ`wxi`;%a6 z>w%7GwdH^=DPh{RxI^P0RBExYQxEFa2FpHT z#3Z|o>V!F5#~O0s^oh0!C1sSCj>7J_g3C~7Ht@kiF!Z=7j+cMmszteNm_7~a_`FVm zDP5S|Zy}vxB8)@T&?s_v(bzztJB;Sdfww;QpF7>E;ZTdI*P;j#5EJd%Ssxjzhw(Wo zSz|n|eas}cDRr4^m<^S^v~;?Qfz^>G-{aqPOxAn8`e?B2gb_aBTl)^o@DjNDC5yXi z<1D~)(@W=QL-Km$Y&q8fsVYPPW z&Yk+58oh8%O_g$~Tv{lN6E4?~T6y{6u?}bS_m#|-{AyTw?ic?~Sa1J@z4SI&i;UTT z+5FQqTUoAF7MIGEGBhQSd8wi`V6MD~h6Qqo zv3T9Qu zk*nn0q#zoODDOgm(DR&!rC1buUC_NL_AzK1G7dNE5LrmY$0n;HZr7oGQVSIT$`+~u ztTW)gBGKZuiGx0x^Eu+t+`Nup?O_82ZY0@b8&C`r*N`7fNkLq3qhoEP7!Z!hMsJ+d z=9(?cHO-|LRdbtq>k;S*4Ta4x2^{84_QGIaW<~O@DPwxX_!icNiK9<;CTv5|8x0SO zxSy#?$y3FPB9KYCDIGhON9XlRTBG}=-=zF025H(iX<s4tE%Njh9tHx`P=GI``gVMu^fb|x>+67Q+p=(x+-4#ll0${Q#os@x%{42krl z!nmJ6e;=^};UgcD1(`9X4T?uf<+ z#9r{N04H)FQW<<-~V51dB1LP;_Lfri0$v zj5&i%JVMVNWuvp*o+$7=q&vm-pE4M}6-Y&hcSF zhE@Apf))-aUhHXR6wBH4fDHAGI>iJN6ehmPoIrUNck0{q8sjYDG0IT`=qbw~;t7&s zlt>IAPN5n^@sLKz@Su;7xFt6kGEqgJY=s9JSaKMNihe(>inA(Ei^50+B*AH^z*?Y` z82vDoNRm9KBOD6c6KFI~70d>Ons>fDkL{u%y6zI=(CIg|;n4Z|!^ zPiF(U&9*7oVH$(5IDEn}3z)?`1%peRQtj$| z*9nP-q26`{oJ^3AEG2>o9)IMYk`jTVF4k-~R2YO+S+hr8S1#deYwI>(d8AWs>dqEi zf?n`Mp44)i&GxiMb~&blV5P?Z=*IRJ)nf&cfqNbK^oRB-W6x#50#k1^x7KTTc0N>W zp?J4V!A&asnJLCl_I9VJE5`FH>kb#v{u$%{+t*Q~_g=*aH|ln9l9 zUMP$hyDO5v!Y_1aD6OW@t<1U?5TXu=5j?m0{%ZA&BVKeQkBZ*3A&Y$r$5SW4XkmJa z^jXq{@gi>mb0RXc7cFSFmm{xhEsQrpfl0x)xSC zYYM%%Tr^&ub+-MkHxL*cQacq00*|&h>@$VFsWi2s1c8mUTRaRqaeV|u%d*7lB<^M0 zB_-R7ACK0nXp0`20W1$JrKQnj)ro^N9evB8XfulvrB<(EskO2{ZUUV8qQ(HK<>vO_Z5{^L0@j70%Bp&KxshubxKPJpJLP5Kdg6F z-}pF&z?H9lG?TgVeYVx(5VPvG?`-XC)Mf)jF%Uo&r5s9-1(v_^f-0{PC=*N^jx9m? zNO=Pv!mvIpgOQ7tc!eE#r^?4vKQTB#B+=vE1~Mxu1A%K0alN229MeK`j)Kl0lwSls z)+QpzkFcJ}dslX)fm?oo2toFsWh-Tb#ex5$m*Pk6xgUAte&o>oNW=X|F9|6EMP2-- zJdgjMzp($(S#7(K`BCJOrK>x@8sBeo$!HZe1K1T17y33XpQ*Vdr=gXZ(p#F;Q@6Q# zuf9=x+kMcuL%GiDZ#J5(=0gRY#>O+g(za!~`1&JB-_jnjMeKoO0eKilNp~OId>Bi9 zLMAb*Fr13mNGb+50iwtSo#aSx<&l+%!I-WY?0^vDQG3mo3y{*Zh{G8!`o7PHfY8=g zL>-`RaMHMl!$US6S)OR!w7U%TrKoG0Zo5f&`PIxXM~=F6^=p8Qe!I<4pMSl!)85|N zo@vh^j(Wf1D50c0QSHcpfjW{1WUFIcQfdAd0(WDeug=~}2 zn&q!`ggx8D?@6y={Z7GpqhQKkyh`f%g=(^>Kg)33$`sL!fBWiB!lL+{_WJm3Ghn61 z*T)Bt!h_sK{^6Mk!Qi2sgYh%)q2ttCYJ|94u@iyD`G;NWfWf&J7YYk=3vRAjS#*E) z3*Y5d@)k5*$uX8t#Qjgaj-E{9+|PW-!k7*+A_Fiv`&$HELMWk@X>TaG-LtOSbE`#s zN!7urL0BzeaE;;{IY$8m7Nj(ytXqgdLTe+AaHJBKkO5y-6AQszxcn(M2qir5Rf7go z-TRKbUJq9$b%*XA6o3HN#&C3Sh-)4Wr>??S->?RjVDe^Ll2}g>uj`Kk|71#Ut4S1= zzwrz204Kls6Mque_jlQx{9pd^XJKRHNp0jr?xF2hJDxsk z&6406z0Rx47_-(IjQT1ex@3-Y*S2=ixsUj1#iikW)|#K4pK5>RbHDpn!lL`&7sL9! z@_Xz>_v1TTZ?q}l#;l9(%hjUOlybQ6%pX>?HZLWy_1wb9)@J|0^!gVb6aD8XqZe?fpHTs%IM5SuopIl zL^ta@Epjqh1LDxGoK6^($6zHiO!P73D5~z#Y1P*8D$V^tJ&{hnsj~jEn?E-lwj70i zVdbM%!z?!!TAHFN()~m~R#Y%vQ~kY$lmdg@oXD2Nprdv^<6#ARls3V|3cs8z&*{at zc3apFc-KlwUPvXBq7X%YrlBu+K~U>1K|wGkjk}w*BnvSzv3SYbF8Xv5NY{%*nVHhq z*Ob1E8{lY-Y-c#4ASdzWqnkPE;FYHyso~cf_03lM4)kZOP3boGdmcs&^Ja)hnmq-g zi>U<uQl; zw$~xVUN`K~x+wt9GgyLlLLe-DG+N_%ae}Vu{fJXklAV^d+#_~N^Ql1B?_r)NX(cZ$ z^7Yu-bk}yb*Bh%ir?1uTUub$I2f;C?HpPzUr6Yfv1}S?y^`y!eJdXbaqX<|vPL@at zI_a|gz08H&WFfKaQk0IkvMaRa3vXZ2`H;w_j9$s#Emm znOWfz|J~vb5KwcGb+5{BM`6i|ohcW!5EI)2yKt@>_#r+v54Y&SMx-8a_SBwX3BXH=_|8aSnWlud0G!xd*zEvivB zOj$hI8>B!WA5`3%ZW2KFY$W77-t=NLs_8U>{*dyB#>&%@HcS8wC;)+c!8NR~cdCCr zAH;lYy^qs&pQaPP03`SsyNP@d?IZ0oew#g)`s6XHLVGLYW5ho{;}|iK@i9`rKZh|Y zPZ*<#5Ym&WKfiTw`!hfO4#wGE`Ae`V|Cjdu{J)~8Kg+(X_h+pkLP}#AB1-fbCSb5U zyw?<9iQy&&U%LLWgfL(vhwR>OlAnd-AuqV>l#lUjxYxo@FHSc^9VyNwbVJ2t9!@Hj zNYq_UD^s1DPb5`)9tw!eZ=zh@@0x>o{IBdO{rh*|p8G5|>C6X+!h_sKVGXU)yPMdJ z`Wk%wmio>X+&I_C>P%KqH^<@IMV-Mt52AKRUZO=xEv+-eZ=?UH1WB>v?4YkqajrC9 zt}ekSEiTqSHn)UlIb3@y*B9oO=jRqG_2S$TF$)U9iQn-Wn0TGMEh2Wqp}4$5KOFcp zgl;cDzk0Y*d67XlY1Hd=M>+FIoHbocMHhL5Nr@>+qKDrw3W?0YgE-$}q=s_{Bu)e@ zD+OF&1_$6CA1Z-E;@qkoT#66$>UNX^Meh z>$_a{c`U3LIT3$U7cdDqrw(vxKKT#e0XS;2DHZpm7-A;$Al`#k(!xdJ01k zlByL9h|wk_`{;FVZdkkIGr+9PGlHglzV~73ol)O^axB=dgAiEkDAG4)AnL&Mcf@gw z90)jw3x@?=0N87y8;+1Sb$6$7S?`BM4OZQTsjb{06iWEM57l zuuuG6d&~Ie=y-zi&CFYdR#^%qOv0Er3baoI-9Hq{4*L_Uqv84APL(&2G%M@vb&~!< z$QAv{nE#QyvAVSh*B5!y-EB5D@4BPm{!$XW5PzFQV;647x%3yFxu>sv@#p^wJPB@n z(H6|*@3W@$gYT*}?{93>TRV-_HuRx!XWAQ>fqx#Ol=FHAA!TjFb&FV>ZJ5gf9{Bv_ zc(m7k};I23_MVmCFE6gU4Y`z4p-E&kK5_4>L_y+it8Xc1IOgB8|2LJ0)I{a3^M+d3&vKx85XYL#wB5+>1#F z>v3ZTd^o@q;gsqfN5)foEG9!t37f|<3W5f!er)fm{Yx9b}cYEUv`m~a#`Njk@e zS$xB(98gAJ6cZDu3-fui;%0Z6HT3&mga6ni?djEJF{^2H9*g6*g+=)`x1@ess8qAl z<~oIq5=J-ji)W-gEf(Q~8cyyyj;b&ewwOX@Z{cIO#8MA$@J~>NyL3}`<_1yc>|bh{ zKW=f!u@?;ZWqb%P%1W^2etW0!Is!oFsLFy{DOXVt=9fl$>F?~`wqGIQd2Y*H#X!;{ z(xNhd=w29_vLbcYU?Nbm`^+flJaYF27>vCiKFKC&oArfO8nt9$7-=s#wVrzi==(U7 zGTefQT99Oa)fXr!Jt~+XR|5j{_v7!%J{x~KVj82pIEm-TRjZkw{XE4$Lei=;$P<aCLfiix*UR$RC07^QJ3A>~O{#NLErxBbRZ=h`lbKX6& z0TT7=xH}m1K5{Wua)qIncgDgrOcrytwb^J0>W-l5z}7j2st$MNjF>6_-egHHB?S>( z8Rp<#;vC%Bf~jDx0!8j8Lz~raW2`D-$4G1qU7qm27!+maHK6#A zvCI1S0JxQ^4&0inOzgZV_B;d1o&%BEkAM3^^exzS{y40=AGDX?HxQ^kh@`DrV{?{} zj6^~YMJYE#cjh6%;dKLSoR!_9q0iX8Q&HaHnJj{r61F_?wbm3k&4)sVa3p-%BQTm1 z2?2Mx-gr?|^AwB4lq4Vs5{hx8h=l_sZ1K@lix}?|yY3BDSO^G#OiAj+`!Cmg(HtST zE$mB_xz!>^N5ThP_!CbEgj(p>DLJK!s&{FbL8LJ*2Zxw`B=dsAhRANvc-oSQxk21> za)Th8iw|cc1##-hg+U>7d@_nguGk+r9SVlp#<;1yU2ENorFn0~P&@`B++n)@KDvcT za|F}_ghy)#q7I_=xiQwU*+xCzrz1Ls8hpxNaG1kF@MyG8_9~XHX8y3V$7$8WL-(!=oINZe;E=G>@Dynph znaA1#hv^JWQuvt9qXi~YO?v(6d3;PPTwWAv$A*L>`bc8H=X#=v69^33z^6$+#agfY zvZAmPX!NH9b*j>8F!EggoVTSKzQH66YlgCATN}m)ByC4}0hx9{qWv`9CgPc2s_@?q zWq|3zzvth6I~%vIeHyK6*~(a=(fC<)>(d1+O1WdaizKJf*=Qz_xIl84^Ad($Bt>Xy z3ZB$9T`1?y+1mRVC*N?$nWb4lTdTr;-c25473#6t*SIC5>8SWVBv^a$p%6(->=yjHpIr*5+ zEiS%5Knc@KzIc@3;xU)dKhIq_8ttr_Z)Lub@@ilCF&OF}vPXUCBQuV+9(8Tv-E=?V zZWP>2cVlbK-Ef?ZusiC7%F=}f6MGsM8L`XvK9F4l1j8fcV zr-e*{Njsk1iaO=gd!$xFW8$p$zKIlG%ls`|HHTMz6-?S6wCAs0Yd%|$apuFdi2PIz z@&&gRz42NLz9BAjTYl&K==_9=s9#Z-k)PRu$Xb(Vn&~5uHC@vTY0jBGA|j&~N17V+ zITE{>`L(|Srs4R{eLsx-e{E004#?~4wVgT!rmr<-$w=@)y?F^G)Vc&ZlG`GDXKTlL z$X?1$;s?f5VGmNePPRK?m$6ftpImRY2r`AdF(0~6hFn1vDZGxUMxYz8so4UO^E+@k zVn8hqy}q&Tz zMtc!l*swizd+*gY*Vf@0rCaOd4AiJ9D1{y(&#mePaks<{Ocn?4_!tif4lO{}-UzSe z198wBIQAQIl}$_q>-EF6K=+_9w#u3}k(0h~w z%0xbA7s4cmtf2lu>GOKQkPzUdnLLw%i7eCI^$D?cEu^~yssxkIL0(dpcJ`ImeI}b5 z^lgAUFsDQCC@*1xmjtw1XG}}hK+sWB;1$!G#Ul=5iX=6Y+VI2k)(4D`yHK>u)og>3 zv7$?w8Lhsdrtk=2gB5=&NRA9gN7I@um$TOJg^_P6@Dl@g!Qn$R^LVY#bNE(cJQyX{ ztb~q)oE~JSJ{C$si_X~_zuk_t8HaF;6Q&i`co!?0v6@azoBI02f&JA zAL!@U{R_YJcV#*h_x}w)`SYLoihuY|G934h7y$RE%!j`8bBXx>FIxFy?@)yQGKTbj zW#+5K=uV9P|4?fD|LV;W-u&Nx6@I(&hp?==va~n0He2^LYa6qg?2W!fQ%cjf?2mfA zSaQpwunz~iQoAVV=>EY7qsld&{!mH(q61eMq)sgrxDf1h+Nkqrv&fOaeRXmdJk5Jy z$Lsk;!C$7MeA)}?G|C?{W@4O9QT}A__L5XF1`UFWUqa+Gw#^og z2dK0f&W@xw71>uZU-@G&FK*@sVKRQ$o|n^AxTfB%yBnzF*>PK2Q_stLX;;Z)?!Z4E z<-Ovye{xZjP>Q=Qath7jFl7Dh?|dix97c;=h0Wy3AGTZjD-j?Ug!GMV_s;I-3~3qT z_{2nskwOb@{D(>b|BZouZ?H;1lEfL;n|Lz!K}`J{_aSi-J|rBKtUXNl+Qzt&!;{bi zm$*X?qYUz#^cRmJt5=eAObxvUNi6k1wSUM#*bk1_5@bLa;%S4r+j=83BjkS{{V za=Xduuj91m$w|ki{Tw>FoO%88w-8eM{{%k$BR0$aM#8X|87kQZOD0N_ppug?$xgi9 zE^G`D!Qn~n5V1sPm|}9(q%eJEHv=+!+eha^^ynQB7`kYKg2-H|KdbD#ODdazU zEaO?IcsCtK7$=6%yjO78uSoJWP#3JRRxc?~3LIW`(CvECS^3 zX_8K2GH!6*ABAI+{j|ToKk!epx3VNzV_xU%N*tt0x{Vx^TKs&=_ys;__`ZvK3%6YA zxut8l5bvLF8^35vXwY_>H4y7SK6<(IGKzJdl2(1{)~9s4J~gQ&iU>1^0YegW7NGj6 z?q20nXHkAm-63-ajp4C37*fEV4lNXLA2L>CKawq-kyXy&ta6dbeyCWIZgi}lzNiV6 z-z?IbIwOo(8i}n)9XcYZ*{j6O*^2`XONvKjbYct`QHfDPaVbYNc%HKapxK2&3;WvD zz=UU7xJj|qf5SWyb2nd20^JkTDbK$^lk%e2&S*bAha}YTy?=n_#mFP+2s14! zV(c7SFxBWMI)+%agaDmjAWV}v)ykRuLpO%R7{IDJ9vP%DNzdrJjWuA3#+^oe&Aol! z-L5s8Z*1+Xnbc9c5oec5o>$h{uDo~8Io+m$>^KZhip&C2;#ntNto@GfcrOJ#zPACA z&yUzb(C;62MV?X!N_UZGr)G3}YD4=7fU6x2+8}kZr@V5QcR7=R(vOu1;~+IW(Tn?Z z8^>(&v_}4Q*rlGFxDomQ{u^D)W8HX}JKD>f_)>Ks1pp@1&m4(Q<6%yo>1J$H=`8$| zMNq*k{Ft@<%q0iBat;vB*P;0SvxpM+j7vI}C-GzmL98E|$a2+2a$Pqe0G0#nSqL>8 zt_mb1E;mW##6L4Il$G4U(b-716{qjR_=T1b#7i z^Nu@3@&ZD)Mj9&d*QEdW7jcmsm$arJKeaq`o-<|qa}n3dB>jsG6>`E09I6!ZFL_pW>| zNDn`13lcxtY_&JGw;G!*MEHB-wcArLIeju8CJKm@f>2>VA$Rg<59EYs5Og21)8z)H zPMKJQyltZ4VAP=;t){RXO?*{B7#D2bz{f*aXJSSHy1CO>8_T_+PJX9|8nNLf5^SyGuLz1ph_%X7=u7Zw)N-=QB9?^GAc zmF4o%!ranxaP8j6{6!8!cna+D-`Sk=mnm~Et?U^&=gXRyHkncXdJ!8!t)JKm8vh~H z1Zt~D3eIE`s7-2yRoTP*yqpo}dDuPACwDvZx$l6n|J1u(81O%4kNwXmH(5%whrry^ zj{TSy^IB+08bMTM>WoJo16oeH$9o=8zmY0=>ijAcMofdE_^ zKVVOjDCpa`=c+~sTr_z;OBOA5eKwaBFJkmzb)&k0E19e~oN=4|s}Zn_V87@ZA19Cd z0U@pR1@V~knfJ^UNw)X(M3+e!BO3{2hLz3_!qG6Gs|*Z*Pid`4^@DIQuthnjn8rIR z4LHSDBAi7J0gG|NBwuf%MGytT_RiL7eQkHAj#`A*O+x8s^v{m>Nt{%bO$l)dKn~~& zgkTJk&dS+^#@f$}!l4OPR%mjZrkVB3jDIhI-ftAL`^eEr{lTep6T^lnct2w#_^SJhRORA_B{SeOr3nY z-g={6pAB9$^OfqHBbODM+!3tO8m#vt?}^FgZEsFkn8ew%SEd~}MkNUF0>yED;b6+K zn@C}G>2INM|K#c)fie3rYxutUy%;kIEq`sMv2$%lBSncF7YlCe@4`{owY?cBToezm z6W>>=N#nvuPXnE(70>-6?-bL$8jFF#_Ky`7%mxwdmBChW(h6We&x?i*RcnQ=%0Ymw zv`|pO!6VcL!eP}rH5uIFgsf(~psDQ~r@m1|`Syp}$C3m+^6JRQ}5I-Cdu{fU-{1a z@X-Cj)p?k!KV?tbwe_vLmGbPfW~ma0(ijRhdT|t?hF*BU0l<_njX-`OSx38mkZ)yo$zxcO#&$byvRh%!3dP*;ha^u!<=i4K3i#Gn~!eBHLQH#Gq&N2 zQxou@jOALJD_6?Z<>lpt#l^YhrPOySYz_rhTmUeRN7NIe^&xV?& zL_(sBuwbT{3c@D&l2<+Um>Ci|Oyf5*rrn33my$ zpm-f{nC;^|jeSheD}`I4GFFfECAX1R0lG9{P{-l|=er(%Co)K%Tr0f4MhdpMvT37o zfsuQW&T&;19B!+Kn6kLYs7ZXzTjm+zKz<$q_e*jDEzqeQ2E22A?&HEfzT@L3xNyTz{h?01*q5{$T z0$p&>d#K2sD)yt??%JIwPv+nxkR&@m5lzm_6sO7;A6q{HyID*_axTgAHd%y$VzT4V z-f4X}cv$p4IptL#<>gz~z6~b(`>uRF%<%tUPj=&#nKxINY<-7%#c|fv8N2e_?mzLP zsOrArRukDEp0$o!>pzMs;Rmk%4j7R?Z4b`t8*2;CHaK6ZW4qQC1g?Emb{3yhkXS>d zxG7h`k-oer`03W6K^v0*2bK5D07=hP-9tFL)JD!b4ta{CSwtL6S!YZlF=vd9 z*Du7qQ1>LFjH*2JB0_RwJfx(cR(+#a)K_!Q~?=&R&P*dG5)noSZ(JW57GwUYSpg5jgM+h^cM zJ&!wWTFB|;=kjy;x%^yy#y`i!|LUU)U;AV4`b(J(#r=QiOF#GKCx0-?a2&4re8ac@ zT*k5fepe>*%|8kMy=&#miO2tjZ1Z?fkZ)|ten2^r`+l!2&mY2#fW9#f7{A}X-Pl}1 zM@@oY-}gF_5}HuKq{zLkW($j8P{;UF@&SjZc$pY~s{P2J1g85q2?yPHfvp`Rj#ub5 z-0$p1t6Q6!aHh3)>aCsoP==cLnDCTz8G0tU({HkVz<#_|U$0Gi^js$3G#s2xC|jrb z%XWO2z%xkhtW&8$@9aXlVkme{&6s=|N@7}?Ge|bJ?=gRNg5yJ+l^`09mEy!1ZQ$hB zk?*)mW24tvZ(_+N&t3L-5Dvpm*t1AB?rv`F)D@k^8qQIUqk!5$mkNR)8ef;Z8YwUb z7WQU+U9DTkiNDDOALt)(!RtSG&BGEO+Z{M!U*au|H-^p#9raK`WkPr_B2NV;o)4Ym zWa4Tm$Tupuno}-2>+xRD_Xek^FIG91OcAb$coqv#h9H75=WO1Qx(W>`ic^W_M3;~s z#D7j+C&dP-qN4yWVeo!#3cEiwrU-N*LG^HBBj>=##Un3wVV5xRLLkC#4}y@=bX%JA zLad`4ZOWjAI1rJJN`-49#X39ekJ)TtAoY6f^*RM2_=w=oZMp$P=7}kYr0E~B#c}9q`D6ELuas;OLs{E$9dE|7|z}>C^B(h z)t7^p*wF?Ln~3|=M%M53VAY{56c<2%fquR>Q~_w^e1WGW&aOC!1hwZ}JMfO9YwCW; zAd?*qLW9d<zi;A?bqaUQ!3AKE18>kJTMm$kDq@FK-3bT;)_huu3x zowkYJaA{Cz9I=fY_EFGWGdBB}%PeA#vMB701RPgJIv9?W6_EUUh=IueQ8*Ni+QzyA zQ{ArJ!EJG))okCbZ8zD0$o2ctXy98L3^j>TCG^6`S0OmO`FXvxoliNXsmwCS%tHxI zW-ldsZK;w%K3p^D7o9jRLn9~bxxu>{mS84D~1F9G%jaKOBe;$(hGatE?GTK zbX&=hrAx^_`VLJOwoaZVVh2+RAjAO>mp`j3DI32fz1>97tx~XMuA6h^ay2&iSw$>M zHr;+``36dCA_Z7N%Yflk)tcL4!|#~kkC`)64`b_?RxxzdO&QCGV<*Sv!?D~kl?MUw zhi;hOBqlRh!SUjWRi;YcX|=YfT1#gM9iT}+CCt5W%sT|O)i`esd<@~kQ3@oni1w57 zA{_##GBG#?u+?Oc!lgWlNOg6Df!C5-X{b_Bz??Crhl+4Jm79R_zGLuFmK4S#S6Omk z**zZRjBp_e|3CzQLufP;>K0`4h@V=-5`M2|wmAv)CfzHrxT@+5o>sStn^|~at^-4e z+2<^VFW9$}Lh?0Up!NksjvX6dN(XV%PRva_3{Mha-e@l5o|6s7zA+{1P!6FK8&AB7 z!Pkv#T;1rno0qc`#5^^Yp?LdXEv?n}E+v zKmn$CbYveCF$t5rP~$#QA`ImahDG=i;~@EVt99$PTN{p>3g74Oiag3p#E`g1xItmB zYZC8hK#in4OG7Ao3`_|p6-VJ|fUQ9PYG9xN`CLQsK4K-)CfH%eZV+<=9x_>NY9+d3 z7fp+C)KxF&$M@I5_-i+_*_1bL&a)3?&?9>UxkmT9;=0R>)bxjR`q<|M(8@6~GnoUq z0FEXPv;PD;79c@9o%)y&=jeE-l5gf!46i*G)aUW4C~&t2CxYwV*0vV1N-ME?0cL4% zDmM{y5whQ=>bY{DAXXKUZv0}H4VR5_7iDm0-90Suwo$4xxp7lep0UGEf4e? zf?|Q;Tr8DRnmyNcQfDrTl#2lOE=mYa(j~V2yDkcN-1f%ioh{YTO6B^((!vsm6!hmp zd8u52?t(SU{w(cFCX`ttm8p4!*4&rr=3 z3OU{0z~#J={u8DKvx)9yTpUGbFigzOYkIDlm~dG42gAb~cyp!ODpJw+)rIl%9j_d` zeI-OXlMb11CvcAXrzELFkzMDBZ|^rlxLK0?VlJy(Gie80bzLS3l0ZX&F6(bX3+S53|E!j5u^2_YqFuo((Jx|J z_Pa$>Wl;#C2=4G5Y!*pgU5KNisl@7-MB8BZB477GrdQ-%mjo2Glnt_sgA<2Y#I=G2 z2Tx(k@`%x44R3W5!Wa&}qm^B!1r0+J9Q4UAD6sV~`btE42&)!{uhe)6uO+-d=L)tE z2k+dhAp78n!eJGUeFoU~y1-4)239*T;E1jFvYZ*>eIUV;G8{As?mx~lAP5X`t5({H z+br!#(=cm7bKRzmZNpeB^qF&TG_Y-=vLj6sM>%+X4}>?w+);2&J#@_|qO|57`JVCZ z@Eu}KTwX_L^TrcbX86W55k==SXDPPgY_+lov+8y@mZMzhoXJ6(`>xQBWsq?#Cg&lF zJKd-N0B`6hX?NI*+LGQTiIt4GEoexJk&j9=j`WK(_za$#=qspVb5s*Kj*e^A&E~Zr z%Y~H++=L*KE2$_Nm6j1Fy%+2aPzcvT6DN4oo)yI_`(rC zLra$)1H|57tJDtS54TrIxL|+Ju>*cw;pmRp;H8-MPhb83d`N#rZPy zAf*G6-&x%{aI^I~zPfq&16XzfCyYaLT4cdTZh`9JC>pgsUcgz-l@P=uAGT8BB1cJU zbiJct;|nk4aP0%xfp;J=vD6M!qxRElhao{#gk0dX7iWRR!qM@;fXy0|g<2L)=fk}CbzVxzfFxFX`{O!nocpEuiHbQBkY=p!eDO;gvzEGfJ z5m+p!Fm^?Y6tx8_5(+aTu8Zh7k*#n3US$2H+%1M~6li+G)FvR{uN}@OPiiW1KLMoq|wj zlz{%hHA+{*0Z!z6Yi}u@4l3cvk!4^u6WT}St8n9AyskS$Da4^WwwdiH=z;vi1z2kn z9icS`wZdVa97PQ%ESq~vY zB8p2vRlX**)Fpk3k?PolW_5~wh3!p_^n8?`n7UQMJUwRIm>DH`L z&uV7GK2h8cZ8BD8z1}c9AQN(myhftF&Cn`nFy2yb2dsF?o4^1S5|aqSN&|q#B=#Xd7kf0o06k^o-l-$# zAn(*7KBSOmn>O=ZFibF$PNr}Hg}l;ZcEWG~?C(j)0H1W&$E5Fr8^Mjg*Of$m$}J`- zLFw&?k~<(B^){X%h~ydf6T_Cpox;)^=IDlvivnji%=p`2YhrD46KzYFg#3VX+^A%T zkEdfaX3}cyuVNWSl3j(DVm&Q67p>2oP#+#)PNLEYj(Qb0XY^Dt*Az!wQ}WdR{uGTs zW;Bs}j+q;+l*a)7*hD6sZPW~~Wo&$pMP;s8Hn`{$&Kb%+jPS~MpAY&YlnsKI3 zCEJzlR~4W(GjhBh59SnnRTTi<} z*oYnAJEXWl0fPzyO?8q_x+%0|T69h_T+h@gQCnIaWHkwaf03`pcx^lZ`bvi>)RF|$ zpm5bn4Jhb@^pf@-0fHFTxCuO&(`R{X6bdPA$fwGJ3kA)Ale%ipCGHr`IeoQvoW!d% z4i3gq1>_26)l!IIqZma6wTztUMteiDAF=YnQQV+ zsewjh#RldT(40?qkVyH;m{kECz;3HCRv2vvYZe`Pk9;rOsU59e6QAQ zZ}0Bht*^Cr>YvPos$r^HS273LGo|>-9DQu$+9t?p&N1P)^T-*(t zT{zEjEyXpd6}6K(R3_BG6ZE0;qBwGVs@&I?3uPd7eWEI(h2?<=bi&d*pqFzb)}&x4qo zysnL1ZfJ=Q9a z&$kSwLMniFc%2RWqmV?+CMtm=HYn4|mymZwKBmou)j2xm$(UEP3rd-4rW-RxR15AL zGv7Q5Hu88*c?i&1zBdTE2kOW<@Q(57Li-XSkXbd8yeA~8>`F-A=dE2@rNT)I+>mD0K$JlZ$BPcC;@iU>V zmv3)9#6l!NUN!|;$d2Y22CCJuQp$IXmKrm=KGw;jlSAmnCogrfF?Ck@MaR}N*4Eca ze8!jvQAn!bAYo(&tesPLCSkX(W81dTNjkP|Cmp+E+qP}Iv2EKnJGSke?^|oEU$D=r zPHT*+QFA``eO;Eaj^4_U3JG}5JUBZn(I}o}^{tIw*~zQ>)+^ZlGR*azfkfIpT$Qcv zZtxA($`6$qDv`qsd%AiD{X=;bA*v$v0ru`_MO6VgECkXNJl87fJ|P;VTQ`^C>bP;! zGvw<=Dq@WCS-~-U&Mf-zmu|)lht?xf#wP43cR_|Jbt>+Q4pqDuBSsqon+U23d)Qp# zm7;#x6*r(XDI)sq+PrkB`J0 zhJP$OSvIJM>8i!Wf zA+@9BGBTTpcOK*L&##EU&4?cn~|L;h?YH)DP7ciwuK>c2aG z;xAL*AYLN6WVku8loZlX)JoiDx&0iYgL(EUCSO@da?epn( zMk1m36R5ox(|fn`24K?r_10(rvmDN(t4M7`e2CY922PHqdE8i-F272*T;b=T6aSd03W}?p}{ZBY*$x@Tw+rX*mxTOQ(7JxN66Z^u`3mtgi#D zCW=Ea%F^3Xz<94cq8A?6gw&%`sR9omX$@qD%`16`!96mG(M1-r>fVAhM5o?$#T`-C z2zW9T$ReSxjIC;tW{tGM$D~WcnK>{{ZA%+b8~t@=<9qh__>-~nxr#L0`a~k^qGdj# z{40K0D_r0<=nHh@LYo)lyuKjZ6iWJWK+-~@8*_m!7utv$w0TkO_8uo2`<_sd=>lZ4{pEaQ7xaMpon^DzJ$Ye;@9iu4M}EUIem)8lCl1vanG z4MneGiM)KVgCVBeI>mmlwrFyjGp&i;f;;o_hty@-p}MnblbEQ`&{el#)nvP}0ri@} ze%In?_+ez%5uc{UIJ1vu_L()P&5XS`!le{NdD^&xf{kCuBCXlJo}8H{fqS;3rkHdtY;K!8H+RmCYL% zB48K!U*A6o19Duf(CxG*h{^?jhg3L|I45u7l!15>V=v&pW51EC9w~N)ueg@mJ5+72S7tC@5CBUjl&)aVv)d#zku1{4q@vkAu`ZYkv*5@jHd}+HgvBIgG z(f1SOKWnflh6M;!?HD3lveO>o^4K4o<{!Z&o+ixBXaJgJgvZA|{bRyZFp?4$u!cj| zqNumi6KUkDIP=r>A45>^Izgl2O2`Qbb`u^+V3=T-Qc`v$>5ghq2#F&>dh$upF9ROJ zCQHi@mdI}Qf;sF3xH-9j(Bc{XJiDAVHFAU=w3;cf&p8vrF|9`vv7`gpn4copv<-Rvxe*-pdj(J~75WZPX zc0)4=%fF#3ZaRKnch|j4GYr*8_pm#%-gi&Fk3jhlRi)4>U;%6c0dtB+Tj>mA#szb? zy`ep7-*?=;=Nq>F0TH{xMtow^eay29Wvi=ozqz?K+?sYQt(LNDHAP#yp2-he=RAdO zC!$lzQKvGrhU+1fWZTP-WzviCJqfSi;ze=nEcX(|K%{vFCTbeiny@^?#2{jwJO|!!HBpZ)OG$%K_C58{kY1dq+szCz9RwsY(MXl|fYtE$*z$7`v76~*_=uK`rPfimR({Qr-v`yr_?Yv?Dglfw z**okAnH=D$5Ip55ZW{;b;}(P+r9DPQW>*v-D1t>DL}wYV==SlZDoDju%BXFwO4_~t zzH)T+<{?;nZP-yBC|`Wgbh0W8w?P7l5gIslvFu+M=FhTf^wgV zdY~BXsoh$NZev|YLg`Je;!BYDaZNZNy2#EoGs^$Y51$}$6}ypZSUKUKGJZ_>P=bIa zN-;FU33_F^Mo#7CFJRHI4h4oOJ%SO0UaVBB$`A`GAXsq~14iD>xdb7Uq2<#Ji3h=h zFW{6k0~2k1YZ$P`!-!pNZ+h!?k3=K-56xZEbBj%MjJZ`DPFEGsvqpO4+~Ln>4jvN8 zo^$j=S{Rv27G60c0P&UZ(CSB8k}&rgo^iT??jxbZKfudYBX~!r9Hv^6e}8`m{buo` z-GCL0>lZoKJb?26>QO6Skv4hJBd4{4qA>4(kFa(POppzR3Ds7LKyvVXB3)DJ{KDeO zf`c!1I6bwB85J3YY(#g4fZ$pW0g`4%p`cPM7M4tOOU?ISQ8bAb$!ag+sdgsXzG>!RS8^z8Ky zf?0)B4m?fHfzZW$5X&DtqKzJj82M>CA+rN@IPMltY*-p23#KtFG_N!yuQZHFT&h^7 z0gV+S;(1gZDFF&%{TgL^lm%7*l^$kJlZ=1+I)Vk%>tp(5Pwc290Npt zuH_01^maA9eC5>gE+dEEW}f7+3%u9bhzPNJk~Y1$zK#QRY^kL}C5;H35{7s%YzkN^ zt!l}Pwk_*GwBZZFJu&+X{kVw!0~pdf&vZ4Y$UFA=2J(<6Q^^4Xg;*_8u~fmQWZhq^ zSF3WsWv*@5^%o{D>$^Q#sLNTFRNf~p%FpA@6{aNrLO!=I3H9UwzOK5ovZf@Qh1Ug6 z=i-VbxLKXZ+@1BsMyUK#V|KjgxDs#@-vQClv<(UnPQDCRXfwy z%3=b+F}7Jm|7wp~FybfVw*8?kU?Hv>^fFozmJFQ> zcWup*6)d!>w=-9=NhCR*m~b^ybW#4!ZvX6HG8JyTCCxP`IdCa_rNBKc#2Jk(EnDTr zf186}MuD&Ll6@%9;cz)nKRT*NKL26!*;Fg(II!6qWBXC%C+R!U`RJf=y18Dz3infO zYzUud_}7FeXV(7i$kII<<@Ouj-3;EM<$ysN&a@j+kc%TjA=*vm`ut4rTnR-*qBUl; z8|-LcyliV8-Li8O|MC~dpWYwcadw3Ce-i{nno*^RgiU@881Vh2Hh#Y{0Slh`rCs@p zo~|#abIJ7>$=`yCq)_ayN5HxStu5IOzM?>wEDDQ~617??=GJDX=X0}-pmSS&BbE3m z@+1(7N?IK1SljGmQSiAy#hwk-AB5RIt$evH82DGbVB(kXc1TP$t%8?}ZUc>-Kis^e zg7JUI%ovSiB@3L9&UZ#u%U@8{lWF>ASj!Yf7l!=C0Orng<@CvW$rlwgrcO{jHj(%W z{m#Ghk{oa(4W)mDQ6D@lVUv?Q$Rs>)dZ)t|ezjGUTY?zuP*!>juBjMJ^=HdsJ7Q`F zdRsbsV-nX@&oTZ(T+tX{U7UV}uSVW-U%YAA_JZj*CIC&+XuSea@(+IAS=$PfXFudMphD`O zZE&?~1PGaq7iiF3v;XYlITd9FokS^PGumZ@ZjQrVxqF^@@6N^zPl+`WZ^G$PYwy+z zTaPpbwAqD@TTY_U62uM0i`W+5MY=h1eoi7Cu1K~b+Sr;w3q{$$Qf&Q_gM0YH_mWkg z3ZuF|$@4yp3iY3%0%!*d3DY7r13tU@=^R+KX*kFvI94n!-O1^JVaR|JF)6Pah_U#4 zbQ1nf0ao|7v`N)ztdQf`h!wTYnLhf9ZPiZr4|mV0Pqg!>b<60E+StkZqiw*lc9c>z zZts%gs#tif-!P$uZbcz|9^ClDY@xNmX}m3q8inweCJZxqQUiTpiid4d8RXdPIKG3u7Z34$7j;pOf5de0D^c$g zkQ?aj`7Z5)fOYI!?|xDPJi@mya)WfNNY@?l8iJz#Jt0}^TdI1Rx%Njq-H}Sw;~(`u zyPa1NN6Q8s--ae-E$cpn3id5jIpH$b6jURd;lalQg{|?4;-`(A9{z*K$jC-&_5=?$ zClgFm0T=rzqV3Nqugqm_8S3Z?d{S+y7YhACa7O5NxFQtapP}y*39r zP_6Xua#HEH}zPL7K zIZYoZxaoQ&dYt1ZXxi6I=>)ncSM0`aZ0B9)>U!dq4uI;=dL89a+|PSm zkhj+Ea=-js6uquWtG*Yp2W-bvGN>9csG40aWN`~<{PUw<<(yQF4RzoP=6+zznL#ui zT;TA_RVw*){DHZj)vz69cV_M&N!#4s)ZI~c`lJZcx$EU{FyP+x_@|GanKky;WT`t% zDn@GBHo|WG0I;^pR#QBX-F>btBOl*aeg!%$=294>*|(`lRIbh5?Anrg?VHBsp?evA zCitDp@$7ZA0HpL&=HSTbh4|MOrR40l|*8&4n!n~Qp4k<7exS{%qoPfF<5i1S@;X1%k{((*D zW_Dpl>dMfFk`}(Ul>fnS=seU*3WJ}CPhCdA;{@_?+?CQc`3&+zS2tN%N9)!A?rIe& zi;CkBR`YM%7PL?=SPo#s&NdyLlViWwt9W#fuN7+ZD}mEp$rq;fdSJWPsf{12?frDQJ8pGL$;W7zpMnR%SSwgKmc@Y4{Qx?(y{ zIe9sPS>j(qU*<66&E;XC2&Yqah>ZJ!Y$THJliM6-PHJkYv1&F&PUPM}be?-IJ@Rr2 zLbgs`QR%TDGSH`h<#xcNQn%v)uXzPVi+TU5x0HhfHG6~kV{N;wC^28r63OT1(qu&` z4{zsP4>0aGc_zR&f6i)Wt!!n3(WXY$mkdPw8)ayYtthKhnh8@2O&TA%%9E_wohq)?^tM!3-8xv@+O4 zFeDIX^;n9B&@pRPTIDKIrc$@^BPlw*O&BV zV(HRzBrWLS*7bG7dvPq2JGoM6h}N6v3D9M5?M0AUX1K^l``-1!BsW^dc2umF&m9O^Vj=IsSgM6>h((0&qK5KXj=+pNtMF-h`jkgaEC06XY)zI?QnZ%4@ ztGM-Fb~42?`3*Fzav}OuL@gG&UB|zlrWba0>H9VPyoc85=!`u4>DyfL50HdaUk7c7 z1--H$-v>Dh7oS&<&7Bxfhh=huW!yrlXoM)A?QI`DY&kuign{nDO;Zr29&{Pn05stj z;mdMf*y&>jc9)*HFKs>R%zkDWy%i0?;^9~^^sd#(4E{?hHF?RiDSK0!vu0v^;4*ty z%=)iu-t{W#0$vI@@iOwfvI`WWysqcc^LWbOS zJ5m&QRJdN_C!eOiij4Fm&uBGYLdS$O`H z?nA+$CCN^oRUIa-VFJL^=HJOU3&2ZEA`b`}nN)x}tDaW1#6=xznz-v#zoAM^9X_ zK-JgL!k+Q|7hIh-yeBWdsr%jE7ofp2!C7yp)QJuh%Lq}9Go~h@@LQw8f8MX|AkcAX z3D>ul=7kEJ4j5HtaQN6Y4k1t|SczugSlGUwsQh|eqAGSv^!cGL+jU>tTwQP|@#NbM^FI?2< zc&HUx4)HAKZL4K7sZonbtl5P%5ee@Xqb3pZDRCf+6WM2Jr%tby5Ph&CA8DS9oO>e( zGQ|knPDx(mT{DN{Hf;(n$1si$h&~K~tFgCJ=q-Or=lNf{5@yV15H*$;;^F*@-|mCQ z(U2$i*(w&}j$l>XZ^I52xmIv9A5CGgS)H{hZcZ8&Uq90FQaE3hYN2$Fw`%XcFg=ld zCOo23h_~@JqMOW9iRk(nR``yXq+0jMeFVRMKll;^>PU8*@78YGYz|f2U70r6yEb$m z9bp_ZO_MTUk>a=toT5Dk3MNGfsd53K*8sPWz};*T_6bv-i1WD{UENE`Qeg}}NAvI> zR#TLplETg5zu+U3p;&vaBulrNkO?~ni-|~{o*{Exax&^&-1pV-@0I-yYgtyUq90@Y zqrqSXPddyZ+9#M>$$yXw2WEJyY=xwM$B{yS{Uy0n5yF5&`15wu8-4{ATzHLcU4qAY z)t^<7UHgxv4EOy`!Q_w{5^29VG3kYzlBs!nPIbzbKYddhkeWkeVn1hR!<%+le zYbIXQRGp|gFYI(mmI$XiIs$)^7@gm`=dmO)k|4IYo)VW?~vp<^9 zVq0Ldx+ku1iV!x^Vp&n6;|DX1Xr*MOLur{G3Y_|$A7uTftF13hw((g3?q!y@PuAuH z>jPu$L#IF01@%)hUu>(ZSuc|L)KU)AS*P-4rx zx02h=)Jdu!KsD;eN5|Evs)IXs^M;}b$Oh(@>Ul`O5X4vL-I;+4wfnA2KruqQt^R11 zC!9nZ_;@eJQ_;}r>cF{_1d?G`gyz_Sk57oI;({x&tZ>}}!}nAICzLPB{pQ#QQfXXO zuY*2|60S~kIXj8&>h6K!rMR2QbvbqPsM$a<-WK4Bjxl@xepBW z;fm2IEul7<+-yvOYjn%QHAsP%NNyk+c+m$P|V`MfpUYLPoJRoD& zwyQ$_`m!IZs@CG{MWDPSq5VaupH25bmO+WZg^gA0&}M*R)_~m+;8xL3r_86C2}nX} zvs`12(l=D8Rge9!Ut>u=(J^^pY;OB+ez0^t-0#_czi5`EUq!4c-|c36n~Y7G!NZGb|1BXR#)ExC}U&K_XW&KRiZO?iQqqoh=SK*1e; zTg09nXH;QV|9UFz){CZ5P{Ks_)Q=t5N5yQ)*n^Mh+#M`Qel#+c6Ry5E}s#0e>3I1oVKCnGUizcN|e)Wm)rIrV6BrZblD|W9hjP^EP z!pVb~)x@`f6R}4+8@-^}bi4Ok4XjSVXLOn48MBpEF@Q34rEc1OYh|*8|Pa ztBOjjsAn9QWY?_E70%&#)@W`HBO^>(<5h%s2}>b@9nseIhV+T^;{6U*w-zoQ z!Wy(mIOzVz8iZ2dqk^QNhsWbG9*t)?t7K+6+4*mM$pP+-SqrBaRLJ78$j2}V-L-|yu})VV6Xu4V z--bM`DCU^iq{8x2{;xLYekTeD*Tw?=0q`j*zveM z%y+3RIoRaI*F2qXO{jTKP3@m=(Qlswj`^dddabHzI=a5^*QIkwNNOEiskE@l>I%CC zD*KGwl!RooU4u&18Bq{xAME#*Z;;y6@0Fuw{+@2<7B1$Bwq~%1q+t;S5nOsTWWYEs z*nlvIlY63z63S0>;c+Zp0W?WcVFtJTP^nG#7so&&AmpNbRE#s$#RCABJp=ljZP!`t zS=CosGK`5-6VQ&mB4K%9Nz{!=_BkI%_ls_lo+4cunO`NeT36KaI3&PrPNf0oQgsdlS9!-+bIw{=?)XP^r}@j(E-f^bH(Lf(ujUJfg`-& zcv0fCk@B&k)lt|37O`Wz{4U6LP%AeyI9R(?l7bzq-w3k{7kRx1(l+;d`lICqB@{rH zI^Ga1bf6Kw+Km3cntx?xU zB{9RlIYqs~ODyeo3XG|@BZlo5AzeU=9nn5454`oN*nsj-L1eIIb3C4h3|0I=1LAh} zK{!a2PYKa*r@)ie<7^rNtL+Vs0dGKa!`f=+Mq_a}0mm7zZ0eO(XkK1{LV%o|W3Sk3 z;RYb`7Zv~ttM?QvaQXylsqZhOIG_exoloI4KxD+reVymv@ScDx4 z0i>dzUK#NypctpV)kdrs z=mfWD3TI>bUb5XzT$rozrC~uES49wBDB9f!WI=|%gako?G^w=$2bkNi0s`=2pJFSo zO$rOYZjcXtr<^1MAnzT0)W&NB^BXjV7=LUOe+y0STM(Ix*H1N$j@MZO84ijqMj#gj2_zCQ|%Y3_bm4gY~Lx&Y{s2tH96S z!>*5z(~>T%Z96DKSkern+%B}R{I;+CGmMo|lR~s~?vFSw#MIaQkP*K!=-9QX`*uRVh92<_+Dpsg%#dOoYM zv8iQDRWehrXb5&P+g&o*3rW zpIvA?u+JYADk;-Exv{$jYo+9B)JnPy9%3=E|MSJUG93|eMcN37vMIpM0aYA=oFzss zJUeuXgQ2oM^*`!j$t9SsL!U|dk?lcD+NE(JXPbO&9plfbUwj#V*R zDq6;{&mjcuo7naxb?#=CW`K~V6BoxvU2j0Kc%Z9y0xW~qSaG%1@ld13^T17EDTH0S z-{nCjJ2UwK;JVMsUi}L(Gq$^X%_6bb=ZO)o&<`RSdXBZCcXFT)O7m4nyL(l?~(_4Nko>u(uhZ^!5(hm_CWDKBiL6Ib&Hj-6=lv)f5((5tw* zKZer<6gFa<{(umJ9Z6=&?w8fHNV35?c=awQdi8KPU#vqx$**Y^jZ;C~2J$|tY5f`; zX7z04zK0aD#4$uqSKyvui& z`^M--=1soVbBmc>)2J5^HP7hOG2vdb+nMJ&i8$Hp*3lYWpa4&i#wMESC5n<0ImIiqHhyQMT>{n&ZxcU#=tN;5B6fgK2P zzqC0ZsASEk8a}c(&(B1;MURe=(M~NT6r~ULd&%-r2G<2$ z2c4QIY^U&zipfwBSM~8(P1Sj4D5$OJ(EG;!zOM13ufF)8lG)*JG`oW?@)gM5sAMin zbf=c$l;M~S8Ahj4R|5{c^?%IX97bXgu)`FBtGG&F5y6GVpTDitjQVA(5isKz=xo&+ zzJNZj&5oA0(4mjU8}%&%?Q*J}hc?UPWi-cD#@Dv*mQab%55e8u=fI~_T`OrjD@?mb zkC#`TQH2vWPi8D?D6lS468w3F2c+;e)2 z2+4ePF4!5Eq7+r=tU13!!Xi56QZ@Mxr3nIiu_x2Y`A7h5Uro7{rOTc1AcOzs@82cA z+GZASLj3A^rW-UA(84+_VhvfcaH*r`6UhqERxrkzWUB-BzkHUF?5ai#24ez7a*VU@ z-`6FjRWINnwy9U7_14IyI3uV%e7w9&T9(KjWJ6zCXPjWXszITh`nj>)4vZ<=UR!&S zvOiUHPPb|q6}uiZooBLDSr{D3O>sCmv0tvJ&c$t&+$D8J{y~Ajj__YDwyaoIIK#@O zq@P~fDNVj7h^oIxwH!Xt@qC!LO$CntQVz)i2(37nR7{d|Vd{XGXHw^Y z$n7vfeN%*0S8reqoN#_jt&P`f4Lel3=1T%OHrM0<4(b^aYZTac7%7hiu&8>WYb#s; zj7dH$r)jAihtb^iksc<3h;-FQ@|V2+dY#twn|a!(uhq<{E9;LJcIC`gjyHARktT_( zErK<0g!AW?x@TtiZtT&G6-C4dScp@1{GJp+rAZGN|^9Z(EBA2f0n;2THKB&}n3bY;(1Z5j5E; zr#hJyo)m5%adfkIBsc*rQg;0qgV@DOh}xh@4^L&yE-6f6ehXWOVIWExCHB_AMxtKz zLLa3g0E{P`+yqsadoy?~dOAl^IWj*m@Hg}~VcNncnEBWq%hhF4LfD^T?M-@kT9bp{ zHz6mra?=+li(=4rBF4c6+|ZD*qmhzh<4mTv5bFsF*MtuNC$pD=-(n{8IV zq6km|V##4tySO{pCovEWOMoN^DMuX~%eI7me<0B@J5ul#u}d|$?vZv|`>fa|9QR-( zlre?;W0*&puxfGLf+T=FkI8Ja#Dg_W-kww~TXUJMb1U(V+hM zXyUN0RO@k=Qe4+H4g^EG@}%&-#% z$lz{6n%K=DAWvS6s~oIFW{@tZX#SoQ9~+f0Fc3zk8KIm9VrB-yzLDL{CIwQ|lIi~U zI&O2#7t_Cl@7yWIp4bA8vznQtm{2SVg5|NKN(H%8!yc9PPB#*1gs1#-KJYO6lT3F( zxVi^AjsUaL#FK0;{2k#Hs)$i%-rw_gIvG~LytzXpn;Lbk=u;voYWs@gNlm8H5fw(> z+TLbAT+AvumFkW*&*zCl2cMy>Oa8M^O7GB}sf=OM$KkRWQ59zRmk;O{n`wKg0W812 zJj(GAL?v*d6miiT5te~~-4}g}O?$UAX(OYGg^}4;frj5X6Ti>&{lM{ArB*2LaYI~Q z_Hts6zZSP&u;_&kOvCD#uD8auMKJ@|p?l79*C*deYgSxr*x8uSEX0mJ{fgr@;$B#V zmD5v6IHoBc%|~pesnxP!0ixkb+EvT{!W=oo zcmy=-W%El>sBL_9e_T6X`w>O~6Pzht9nA|Cv(djwNb}P7lv|p+bB_HUAQ4N!<@G9d zd{2(j2i))434p zi~+SuT{g!3S(399Vde*0;(Ql5y2rEZmVEl27>CJ*8^1t#5((4;sM~PLSL%@JsK+&^ z>&ah0EbQ7K_V3RMXL1qDNtTGOBymfkO|6APPubrf^gva+5lqS>glK2&a%Jc#0{Fys zA*lO@j%X5thMT_JX1fqzQ;^Z-6@cI?d#`n4-y)el)PQ(rq^vS@)aZNHQ#jntwg@O% zqaKD~wFGCLkuJKVQ9>kGIMh4u&rJWBqm%LKBPxj5=)y?{!HXIiqnP)O_Jx zfPHUnqkYX^9a;U2^-zA{^4>9R!&T=%^;Q^|Jg#QC{6kKVr3IFPm8xhJ-qtjhIn+|q zKqgBS<@(qT4nt>m<;HhDfwpZEq;AYTQiP8^7Bn}TFnAKdjzUzJ@3R)48l1XlEiIU{ zUsN{2aXFq2?27B+OT=+?!f~J>Y%)kpoN9PHlA%vam~@^1=we7vJT7LKpOIh{CE7pD zcVu(tb5ost!CuT#_>f-w2Z(mXu_1g6G)Gm+R98dv@THnpPahWjF* zo=)QfWWG+%Hic-XSILE&@Y{{ z)uBo|txY;?*HP|#XJu(;BLW_OF0gqf_!W8!$e~&|ZK1YN^!A{a$zUF>4Sb{(Squ==v#`z<9}q=DGBC+;8|l>}QW^+8-T)dmIF$v{#qQa$UcI)dolp zP^kvVx!$fDhAZB*hbt2BYE)V3^toEAeXr7n#=i=1I~TX8ijg7RTUXFcIQ*%AWwkXL z3#?DDfvpq=LJpl`+_u;CUnM*7-ss!5;tO&74@Lbw!anyN!((vH8`m||RIe!NEn&9b zi8%VTxU@|)3i6* zW#yobfs*v*N0uWBZ;mFc+lo-=yc*qyiiUo`31b9wYi(3k?R;Y-bK$Nh;C3J#8CW6+ z2wdRtIYjD?g){THuPttBid0FJi_lesm2Vc*bSq)~(G z3+8MF-4Fm?3m)XT(P_bDF1)NzvoOuCpq?*&Fnkab)CyQDvBZM2dP-1Yd0A(|eL{<2 zAs)cY?HBLHj0SU!VNnYJx-MfKW}vFVm@Z1@?)ta9to4Zh2x)+GYqV`rNvdaMdO$3z zYoco$9k}E>R~i8$7xkkrNfi#(6*PZhMCT$Qwo@uME`>{wEb99+5THmzf*-X!HbCc| zfFN7%?Y!D8$KeK2(+|vZYj3b3V-n?fJY0N5e9Mw6xY`&JBh8i61;;7@hSvY09f1#eI5jT*gSu%1rg~m_FU47F zVHakxD_0H()8KPhqbpfAGCUfLtf?dQb;ELbg~$N_YX5BmOO4`zKkHVx*ZjNsH&ZWv z=RevdB`j`G-a2Flv%;%O&}z)Mh1=4R$K29EMYpH65S{BMSV*Wbb)B|uNft&(jj1h1 zTd)XTzhW1*dA1BulyV=^tL{nK9Pwz98<+66+SIa*d@KQd-_|eq~6otYi zV4di&a^mVzWHnt4c(+woqoqiKcv~wXdIP#+MmYRWkO^O<%7gW6R0S^XF+6A&HEeNb z0}RFB4$VdH$n)ogBUlKNm(7Q0OQma=cxSaT*5#V9asJ>TzQZW{;Ss&B8?QE{Umcc@ z+)Z1LDUmDf>onU`Oio~rl%EmrcO%Lj6hPcKwHPY7r@wx#WTfGnOlp0R)Npn@w%G+`>adotw zvQPH+4wl8q+5s^Lm)(3nH{r7~`24x=yy&U_zmtoQ>NC^O{vtVS6JrC}IAP;d$ovW=wcy)FWVO`SCXiBXVFtR5z#SATZ zq+$rMHLX&SAe>scGbj+khjfCj&yFI;HWK-_#^VD1CBj?TavmP{K`L@NqonsCya;Edl^*4GG2=dA+Eo$vm+myxqt=lm&xWdN96MegHCq|5o>~-}1P89Mf?Z$DX4(w{DQ?vzRsD_55?Z>r+@&8zp~w9gVtj`lYUl;p)L*b0 zC~TB(NNS~rTj$C|TUIR?U49)w{Q&e&EUX3)ldcA4{UDm{rt1ODKOnOsQ1uU|;{X87 zy+*+y^Xzq)i3b`Pkm7IzCJ!Ppny6}aH%nSkzZRDudpz`;Ri;9@m_1VbZz$&tpuo*0 zQjCGeb|hHS9y3CcL5r2Ya($6`k$usaRB0hGyM}Ed*=ikbS3>)542w01+SD|Q-YoyuS5S;+mIobLI3@XV1zK3tw@N$V#R57-ZVk9uvwODU;aDygr07{A=8vaE?Cxm%I-;r_gc-)~S0N1s{sT2axl17J!r{$L@FbENh2lj!@ zV$mt$;r>GH>Y9~A;>abh@zoZY3=frX6`_?2I=*2!JjNvpHI9>n4k$w3KgUL|7P+mI zL>K78k+b{ORTYlKOBnCJTA62sE*tIvE?rsE#v{su6Y+GqF3gj&b?Koau@7+TS}C8c zieUiwf#0JEX6cbF)q+6t{z6hpuwv3p3k`*2Ar6UJdj89Z&~byM#|&hofAs8Tuj6Vw z=ckKgQb2ZBIpKs^hQ}vDTAH*A2T!RPJAyQr&U%w&E_2g+zSTG;BON?_O>cNTv;-(5{9(uGS8WsoJN`a+9K6w8|DK|nv+cGRGZooKMIV`x8P=78G%#@!MA~~GZ z5b!9sRO-gntF9^(IO)E-D9zYBHM}*2v#WKv`1;NPo>ghS6`9T&S#HEc9(jo=bk;DB zRPBwv=?6283aevzD-O2teE_8_W8D?fdhR8HgoC(#Gg0J#?KpkFdRr~eN6Xkp`0Z9d ze3@Of^tN8DDB<)8n4LPrpDWYA9jUmffsOEA;^eW#>OYc1xA_rc5#xMV?uicz?!v3T z$t&3|Oi}YHd>o!Nbn=w=7G}$L51h!bR##w|8Nh4(;-?4aw6Njz$E-spRAwZ68Bw;P zH4HA~Nq1bxRguudz2US`eSzcoGtv2Q38nrr|7`YK{i~@8{rzTr`D(IENs{&nxcG*s zMNwmd--+9O227 zrfs8@S3K!pTG5B8b_|WS==_KEoO(>-crP8f)HdG#_%?DhF5NnYUQuM>obTmrV{QQb zrA)7WbS~IM5mPK%|-w>gRP=%F*94OOdQ z7UrG_z23(wgv2G2hV*!YyNz#`OUfIUtbdO7(?xMvHTehuK94))8hyRg|6W(P${VnQ zdZ^Ne8J7{Azs#Uveo{F{z(a^R2TKc%Kk{=~hIh|BJErpjU&(;t>|90NM(*KCtd%b? zSHZkFOU!y3oa7#dWEHw@Ko-RXP_8p&3CoYBqe4{F>t{%n>bAzh?#%fY*cyU62=?D_cs5TKGr_I`zh?>ZTFjjogdHeq{c22>S1X|mUZQFLT z<4kPZwlT47+cqY)ZBA_4nb=>>slV#n{=52eUvzb??&@A^z0YH@ZQpW^d$n~8=Za=D z!MH;4TNs)w^(F7%$@t4>0=V&7xUq0lj-o!XJvL*^zWcchkWq#06@T6A>dK)WBfAm# zle+bxImYD(G>Q_pB~U?$*{gkl8&4EGqD6rBh=9iA1>x9*;BS(Mr(PSY)VIMXmjI%- z3hdQj8?A$5ji=QfUdEiF4`7u=f?;CE+2@9|wiP!QJ$h27&=C zA^llAFS`t&sDIrnCXS9P%gfdIOX(yjVv_u%b_O4w&^IXz_seHkSs)OJ4gym^Sb2fe z8c>1&@UnMuC?n?CpIScRz|H5a3R-XXVZ^C?I@Kfr#+~*g`pHjw(cP0E(0KFQ8jq(a zYq3x_vdC+q#me$mn)?H_adyGYRMXmcB;>r=1Ds-!ReId zNLc+HU`mKc657n55yHc|Hx_NRN2OyB%6q8P6fktsi_~bcj}g{Q7>@c&jo|kKnz33Z zmc&omW-x}}`3D~RlPZSRW^7-)h$o3|$ETr32KS+U544pCS$9rO5aHbeF&3k;$H3cx1lYNZ+? z>O$;TCR0H4?25ANplSv8sh>KQy7kH}%P_hU^BI=szV|BZr;gYS`Z~B(Tvr5?*Z`8N z9a8D`sBdb_plEluzdzgrGuw@%0i9KyJUo4jS8SInbR>BrFm=@EI`53hK*o>p(MYs? zt#TO99=O3jlA(4Z@L!N50M8*k-~XTRz8}?(9rjD*Ki@ppUcF~0z3+s6#Q$9quM;HS z+Rf*Ig!4**bkaon!+^CX0Aj%_~tL(|K2ek{r;)h?-uQhsrTM5-Ha*Kh6CE+ zXT3(%4a@fF$MuWG*FBT%Dj$40Da6n)(47mEOy!3;AEtA}AiXRf&D~kK)tg4b+K*6E zq>SpD3#C}&h21v!EV}-wEPm?M#hBhG0b(~SB3Bp+8)(GiqyB3^_Ywg=B zdOG*cSoYzkEj8n6>YL^3rgNT;$&G8-X9FzfjRgKCp`pA1e%xjX4DFqcjh+RKTI0~6 zAA0yJHO$k(RW-$rFmTi`nW#ZozjiB6WboIos9?)Gv8uJ7c7t8V^#+&Ws<=0~(0^h+aHPpfrjwHHU@X!l>iIgXn@H`}&0Eh{)YZ;BjP zCWdy|FL<@52Kzrjh3VnGz@-vx|_#%TTj8RnlHB)DSV zGgomj!J-bIRskZ;|Dl~#6-M9vRUB{T!Mg9VytZ3$)7f||ttX_FEpYHvZ-|8cD!p!F zjo8vs5wlN0N2mWpV^R}Zl$C+bml+8hT)888Dj=p*X%eIrXQvd?wdq@}C0@7iA_$`j z9gX&=AoY|H$cw|!hrG%X*CV|5LT2TyCI?TYYwROd(QROZH6el{;etap0(6q%Ar5rs z`X$F9marEZA>c%MD$ThBkTv(eSZYZ6o+My5*^ng!DzX*h$4vjOa!44mv8i}0H+H5l0(=RYC^CA{PVQNT-X_M5?$R&WQ99mpi8Xgyd(@h zEa$m>L*~Je3*q7DcL{kymeHA3JULC8vI9D$^cQfiy4~P2Wr-?8zAu1prU(AJ4ht}C zR0?18&D)Z8n8*i#@gWNXhHSi-N|pXZfxI|H14SDS%+(-w%c=w6vRSK~kyI(u??*Rh zWZ)@DFb`}{#t~%5uA_$*b-pK4zz5lcW46EVQ#K`^{N10ic$*Get{Y&^F)Mk8K@^6d zi`+??KNu|eS%%76K4Jhc3O{X#(lR_nTNsk|$x{wJZCyJVw2Cy~DpXDn`RmREB|d6v zy}9cJ=_4U8`(3)L5T&5l3bvL^f~DMWb|;m%`Y|?K^x%(YeoMu$ujq|}(2?%_9>1XI z=#5-0Ydyr)L_%-_uAXxWzQQ+TIWyf~Ek_w0;Aq5@aTo6`mmj17BH%T=6~hG1eFUey z)MMDN+jNiU!8vGCHwv)jP4CY2maVg?tKBFEQOB-U@zwd=T5|EwxD|!&rrcMedEHik zjRJM&0Mq82OP&moL?Jh>Q!Fbfrv28q=M`_rwZT>WcLH zEs<@xHCVlXFdx*a7?p1yOQt_4Gb}O!n5a#|Tu5tlgl|w>#Ni8I5iu6WU6&5p@m>a^ zTi8AtY|7o%JK3ODN{l zqtosDS{V3o=8JhpDQsQyOCzuTzr)Ge^{L8D0ASB>AXBllQI@|S0<)kz^s{{VGYZ41 zo#S^+PAe!NVQih3IPLNZJc9bQxq(x_4x_f)iiDc>?w4{f|sR;#CztMB!R40vDt@tW)!YIAb~Gx zb#)dcblH)p<8x5;nND6%W87%jC7Er+y_V0yT&wp={-a=DoXu0ndMwSD4UBv~l-o2Yt5=xq+3>@PM%wMa17 zc$_8x-MiJQErzy+5j6TuH{Mr6vuEW4u~42arvXGsL+)`N+H-?=hSgxd%jxI{8y3$`$-a$u=*~9IaL=<(N%%Q1uL1>7lZkPNRm%ahAKKG=MpNl z7jS-%Oh}}rYmCL8v^X*lZGFb>l%1=oi+^WlcwIYgjO14b$*U{s-`nau_BOWfI7C_S#j6WF2; zD9k~ZOA(JM?fj3o@FIc@gn7rmAhiFTPs)O62ZxM7tTcfe!G27N*jj`1jQ_#z0I zIu^Z)yb66~5X*0TY0yE% zouZ-VO5-e#wVPV}nkYPSwHQ=mjp!cl{b&01CqMu*zd2j;MU|=N+RGPaCJHE7M+ajEr^V+uD6GItHSB=C% z`Wja#!F_D?H&l|#AWV2Hs}V&JJo@IAErQTss=~Fs2zywWi9)C&C13d3?T&^{GchWx zKBXS}THg@E04mW_kT5h>j7*>cSrL1tiPFK@JPh(}TEls?Jc*rkaRlqA=;!p+qn2@! z!GtM^2S@6!+*sZU=J)h2E>%!wX`bvMQBmIRiX`j_StgZi(-Fm}IDbP)PH|3RZ~Bn1 z1H2=PSgYuyx)P2*>8b`=bl0&83qj|x;m%KYdZOHZL6*%i0qnPkU4m)O>kgcn)^JM! zTvcb;xHBK|nC#N}Q)jU1h<6GF5L^(Lr_rhtEvh-H(x8<4Z2F3G1NmLESuy$OmT1-~ zx2}KsIaC@Rv|Ek9?1&uT2hrzr!%yfNOso(TFc$t;tf6?NC2e-HUJ4@yv{(+T;mB~y zJpmbTVi_MIgd!y1OAE|sWGl{*H)~|?IY3pg>n5RAL3@ciAf?xmnob1gob&K#^AJ6= zaQwXrEik;Y#So35Oe{DMv5)pFLtiqodB~`7!U$`VM5tFZuO8v0<8l);(Xn3qkzV`` zWd&|ktvFYl4y`!9dhDJBzU)89=ZP#KX|a}^^Wl`-FPBRR4lb>ZPAz#izM>+Ml8?mO}<%ul2K{TxryA9i<>nH&ULRmZ9I@NA6&vWT0_uPThp4HPW39FgFW@ z*Fm*}L_eA&jscV^V+;)Z{YV5M_T6MFodYKn3L_@Kq~3YX2@rQd;8=c~j+S@bx~-9a z!^evbH6LbxDDgg6a%nt{lLTHI#Z}$atBPs*x4K`OIf8@;z~@55R^s4RiDG(6cVr~2?b(S?Vme4 zd&M~Se+I>FB-aRG&fSK@CW2nri&XRQADY-(D|6Hgh;3lsH$CfgtPPhddvne;FeCqy%yVm3LvI z6hhy~=3|LtW~)ucz#5avXQU+UmQKjdmAS&&XQNfe-Lp-i_BJqWeH?ilZKlyIGf~46 zn$Q*LWB4{&R#Q;cQsR3gC(Dz&JH-FoN1D2;2{jOn-b3{D@Fn&IraDA34IojhlUjs2 zRu#3}~Ht%0ehUd1!~S3l&5IM{yD zSc?~Min6S5f-Lyqo}iqewG$FNI`hnlS9>P+ltfw^)u%+3Z2}8>m#m_BZ^07ri6mD8 z{J}rD$(ol>jL5hhI$&f)JCi^6Kmg9msO=Et6rp~164lkJ;E+^1(0H$Z#DIBXIa^La zMHFD3(JF89g?5f-uM2HJ>QmdD@TE|s`9pHt%KMEQ67xVBQy%-}+zz_TRmrb;W%2na zlPNB14#Ab;LeqUx=>02fxq6D9(xi;G7aHO%>MG#N*x9GEv9n#u{q?fq*OI_!N*uHl z9#-A9d-b(h953ep8PW*NqIV9Y;DYdiwz|(#eqRWjQ&^? ztR{B5WSCQn>i{fSempPy9lq)pGbR_YyQs_g%@#Tm=6MKiLv5c_8tshUPkg2k`>#Xw zek{KT-Vr}^jGOZrwMNZ6(Sumy58`4bDC96!HwEf8NY#WgrV22GL#BLbv9L-1Ln&^o ze_UneIG`#;l!cTOy0DAWnxOEsTlI=N6Hk_Fr zQ=+js1@noz39Y8V_t#8E^3xXnS~w3%~ndWYZxnxp>(icZNd80RtBGIuqRlty(+ybHJ~$Xg%-j#LpO%PimgRDUMBe{R z3w#BA;`u!wn*B(PZ?0$j7JA=C?M*qa37LV|D}vv}d-##Rzpsya|NV#PxZ+3m|A>y| zxjz8`JDwl9z%ekzuKRb2AB+(RF)S7H-HE{1#_G0KFMpM27#ufl+o*iY>FQ{os10|$ z@xgp0;NaqD3elH<;xmYG%U|-F#cTc>`6$FQRQ~vab)8u$GM4&@{~0Lf#NhO!KS-!T z#S;qEn%^&elK&7F?Az*hED*&p732s`(l8lnwA+{vTf#1Txd;(~>pEcU%cOtRw%V=9~FW(4Sy(x+EDj%Q24sg>3%HFjXNLj~H}PhFF{Qlj*rSve#)k zF=u;KJEl(-n_%=|quYJnfPD#ioL;JKHkX`#DX{_ukhdTY0&kji*L`G;3iS1#F&}+1 zi8Em;kISi0bri=hjH~_j|(X#6&iAZWZ*P|{EqO_e6|XfqHpv638*#O?ER zhNZ?YK%0LLK70_!NE_@3#G06poV(ykwhm!k`*XEPXh;@@HYl@aGD)sMGyxF=i%~sW zCmtS?5@NpDRYm9 zQx3X%7t2XYrs^7V1lml#o;_iJcISO&XSj21UYda}nz0pgM7*iF;m06X)ywrcfaTU= zAk`#9b!Hdvp^!L|Bw2$*vzV2mZeo7p=8X<^oG#My5YsfHll}F#iVV3uT{z_?bxe!9NJvL9I zr8vt#nKjw#_;GzI%;##Cx3;}WUp*??wyZBO!g%?3Lo1EpQ?7nb7b2iPqGGp;h|5~( zcYW{mGo}7hZFrwSsRmu7%$h`92$U^*I>f-Z!_!Eoot`#6w;gZIetJ#6cixY>Ubx?u zc_)gv-}crMu6xVty?=CvZF`;v-3_U&^VrK`ZnXMor?1vjS5FVYat9>IQgfU`4h9On z)9$VXRK%}atc@m>ZF)R!p%+p}iIZwH+j~u&Lo{F9NDo&&K)z@;o>JPuN@=J`J0`WOxdIQ8mnAg}0JsZ9k<0y)-Ck<$lhg9Lr$ z?*{+QDz+zOB|vPg9b1937EPL;DBHKUB!99`lg^mOHT2u`8$gch>*Pes#SDpO){oBdYIj>!(cl*o&wACjC`zp(xoscRNb z+|FW~>JR8ZrvT*y{N=af>yI(?Cv0P$#z;9KPopbCuKz2_w^^%>9K2YML7q;RK{ZV; z6vQ>^H069gZGN*|ArC? zP|7pEP^^QUg!p_6iz8LLnrt|pi9a6r5fLBd#0~y$d!%-WJWv{;tLlxI>Gc_(=ZYbl z-m4n>E!%$pcQC)U$CZn$>eBc8dP`uWpP@RH{zVvO_&~S%Mn$#JDb>gZ|0#IfhbyN= z9ua#u!lJHzZGyJ$`2nPx>&gnDQN>owG)1RPC0X%&@-@NdqXURf3yQ(V#g$fLjnpWC zk~}tu+ed-xyD$chpUvj20xADj_7BHg?_#wmXJo6Bi9M0TsjKfI<_$NP+<;dJ-?G%L zwa25iUeoRKOK|SlBY7KTRw&(yvwGWG8=_@xeZ69!>LbJSSb|e5k%f|3 zM)G@dQEg|dg1D-HlwpMAHqQH=*LtKqJ0Cq9-WJ1Bl=NhWqVK&Jm@Kz_!B3mYd!R* z{{spk@(=42ve?%aT|{?JT%yvhNUeV34nlYIW#Zqk$Qbkk<@we#^feB&Tj(DuC0kSx zl=wOcSR*^4V68VS-VW5Q1O?yPAf%)@9Rd_nocfvB@Xghn&)jdaRanpdc$IIATbiA) zu`Wv>pi;QA6NN95Z8LSsb4Ibw}N zLz{-xt87e(4H=v>eD`{d-kC)jUN*H%M_uObQu{HHx2658;Y7PBeB`&53sc%)!bU z`KUXnn}`k>htk&&1b#yLM0EABz*-P{Amw*dcS`KIndr9OXZMm~p5i1Q=hb24;;Gs; z=DBtASSX7`+CA41_~oZE$v;*EE_ zL<$~Y8Y-rrxwm)#&B=Bri-!5K3m8udsKUr&T?9t|lu-igZ7-bg{LTs_@wywKwjR=1 z&+v`-MiTM*CITq>x1%lOgBCP}}QUwyci*1m_9|tFWv;f!{~aB53Y4o7x?X zQKU56F3s>C)%z@C=Hwt9!S*eNyzfqI1X*Id>nx z^z!42;5#zD)R1nnNaT)Kq`zWx#-?`<$mGMYT;{TKa-%#g-G29kYn+1}R4zg}(x$<; zT^txEvt={9(V$|aYVh-d!&~20n9>>jgLAW`6P@M49w{~aRn>`U#(9yWc3d_`y!SGp zY|w)|=a z;HqCU?^AEha;2@Bx&A?F3JUenHRkpdrVfeJ&cU*j{oL=rH|reif)AbS;`3R~l3lf_ zz0fai+?N^!KOI) z62=)Z$s)Bs7%091!;WWf^8=gzluUoy*}cAf2u)ZoZT_&I2mw5)7&U3NjEpm?n6-?v zjQo&6JJW<-C-(dEJ}2iSb+aq0m-pIMS%CH!tS65=GeYOwms4?kbKYNlVr{p=oCPmpg7sQR?2eh@Y*>h z&|r}u8Lg|R*Zm9(Wk{LRs7EKr;JbAovhZj_`N^bG7o;hmm2MW!eM+xueK*2>FT4)q zy%O(c);6~vKj+&|0e;6kaSKUtb?KA2;vg+R&`m?8tHpFBo}n#GaufK7jS9QODlCo7 zl5R4(b}Lt#&uId}*vXyw6w`ho-HSPg=DYE3X5g*1A>77Lk?9kmm|j^4b_BdHD+o5K zp6KPDz{4xIDCto%{z*PTkz-CF<99eae>|TUVEN!z#Pjtdr~#aa`u}eyg}-I?ZuGf# zAN59a(wXXd=aY2jJILPqjT`-s|+UQeWF6ygj|bAK#wo;deYaO7$PW zfT-(-AKU$B@39)i{TE|}KiIvChMFYPcT9G2qcjsYS~hk4IM!f(UWWsw9UFT<$7@I9 zW9YjA!XD%^j@wOhs~e6sPt3Bt89By*Piz<&yM4o z!gsaXsjR2Sw{b_Wx_Y~+CL|%zCy7Ff%v|ts#f!bjdUsD^iF71(aWpaozzwFBB;p%2??Y7bFv*RNj zqAxUAab2cm|I$)fwyZNuT*IMGh(RUw*pC~t%=_~{A0M~(0);MhFMLDog{qBp&8nLz ztu5gr3jZ%g`x4GR0n2;cu8g+DjemBVez7F$*h&Ih&Xzy5n>m2r>Z*OnnnJD({K{#$ zcP+Sigru6MkkJ-ZAvD+Rz+@vGDf;?KJ*rf5WoILw&p^Ig$v9&H{;3Pk)*&t_aHP!2 z-VIUPCTpRzwY92MCCqI40Tmr1Pl-qL$?KFg!Ed_rImDJc1(r-5@#(j@C2P_o!fDOA z{yr5xPq8)@pz=VR)K;E4f`n3qie3JfHOLi><(GoIM#4;fRRkGG0*ifOA@AX@wxKL>Qy=gLtt?66xixLzL!ok|X#E?YmU+CuP{% zrA6qJy~BJZN~K&)3(cl`<9n!uWl{7hL51;fW_hUN3J&eSCiLDIk`ilZ(6hNM$ zBq6=5NSJ83-)YS>$j;o6J<2pl)lIcb6e>RODuA{v{IBeEE43>rKvnwhXo z5fPYbXOLDdPfy2ivyGhn@Ti~m?`<-zvI-bKJatHw=1;Ola_g0fhY-0RNan^^u%->3 z3Jp&cq&ys>Gv`$d=S6ilkqo!nH$De;zJEbY5q>24!GYYbY=GS7ef$T}-L1IOt_}IO zdHc^zS8V;8GSt+KB8U@CiM%)wsn7;Y&D&F-cL^A_$LQKE_7p- z#CC|IV;v%1qJsVGx-6@RZyHr_Ag->rt^U;)ok~v>s6pL3=)Zg$jntuYu{2W1{P0yU193o^+>O)@#fZgKYLx+j@y%u z$5wM3!KL0a+N_eeN_N?@-F4MpC&)+Z3@nxCmv}Q*;G+)v;hMn=%SOZ6FEb*s9YiH( zYCDZgGvLcxfcnVheYhL|#^%EVW7G1cHGvBJRa*<>cXdY{ga+j;&6hN9UeF1?O(D-a zO0?VOK(!=mfELq*R0PK!ePNUn)3d@-`J2Zvw@+xZRja}Bt7KMklccu)$(VZ7tm*vx zJJY*}W25rM+hq_>Mg4Lz=4ME}rg{vg+fyDPZgJ}a7c^}x!8a$)>sFN?0oj**9r;%t zg|1DOVkN_-_C=CM?@ypbimM+D`K+LcL6QUzcwo!Kf0rT<#E0; zzOB`_O1T}-KKC0ltG8=!X62&20#J<+m6?xM>vGl2As(QRwx^gzu=3!8LBi^rJc!10ejuZf1MBpQJ(=t`S(y0jj6$OkO{?KPH?YS$$9M&k8-!`>c?ecaae#u zscRvj?}p6=E?!d53k(&Didh`p#i+av3PC`#*N@qvv8MgRAs2g9DuXXXt9vb!(Cym3 z)p1Rj5Q8=w9nx@hiwC^jX=DLT-oK(M^LJDp7`@AK*)Jzu^t1p`YG*PI{SLl3ckI`w zA}_hj3iWMoSo!#WO9XUWD|(K8h$}w0cQ_a)=Gu-pW3z>1nsHjWfitD|LR=OXprE|1 zQ3|!50-hLp(q3h9*3ycTanv!Z8QPXHoY|D2f#YvVpox|_EapJ9jV%&v(o|g2i&Q!* zb~`;0>&@}<<@(9=^*b)*<6>D4AbpQAK@Hn_lv#{zPswC?6ara%cO#U1F|EYjPcr51 zD**jh<34NY3_>8i_qu88??nipjEI$*wzU!}Z!dt&2vWe*~|3rm(H*p>mzAql_r4K9rP zDRSI+a^>i%{v;Koe5YCULEI)3`ZVDOjfYY%h7o+INj0RXDn6YiUrvL!ve@5jx5@q^ z^}12cGB@S>x^No8@%`~l00@b8d#e1vUUqS9`P_F9;DG2d*w@DMA`oq)xXJN|cm5S8 z{H8Z!YmAq5DFlx7OTtH6=mvCmjbErJdf_1txq%t9YBOadJOEZ7@Z!O`yY-OpD=V4p zPl+L@JGeL_G;#&rD?Qj0kY8oE^c@_$THG|Qq0z4)ba|+qq>&@c6-F?F3WQ@wEOfS1 z7x7_X{7y3&q`#v4_m=)l!Fu)VxT!3tOk7vH#|rPdXdop=2q*-fNkqyjZU2*USZ*nm z)qB}rdpZr{4A~wm4V3xboqU`yG%4r3Sm&FDPRUmUR zeJ<@pe%eE}LAmV)U*UKIm0gLtmM!BN2wO0ElRpTr)`}4bmL7I&*2s0LT1q*`6T%&d z>mCN^b?g06i98xECVjrYoz#Qx#ihKNrtO8KxFLNyJo>xU4R7w!*z*>hWUeT6zg<=p zIdXc)#*AbkEV$|2&y-U6dks3NQAJM!2Xwb_hc-?9IQ8d9oVj;eVT|r~JEr@raO)uy z4VLc)V;NnFTVH5`I@!B;%u(xnq@V2=fh*B*)9BmK^?F$wU<&p#{zrVzT6-KmFHBRe z*2Cr+HZmUK`$gx8LoK5wUQRQ4><*oFj{8F%xfCFSM3&b&mu+Fjc~N1^q)y?D;hv|B zBn>ETj5{%wP(*LP<7~{AFMNkJ(Xb|Qa7w52Ux?JMs3Eel!e+>FOAC0N3Tf`5>jO8z1!$zQQGB@ap&tVWPhelK1-o$YE z=~P(s7yY%boyM(mbrvUgGy?rs$yEr)C-%B-t*pn~>`jPxlr@4)tt6$MV^z79(wq|M zP1mlT>T>us&~TJtmN%TO9ApW~Qhikm`?tdZ4j9*Ur?sd%i2N?JQE#952f<_B(F6=Y zGWJ*}s1PXT!SLdbj3Hy;rljj#>bN!k^7U{6Z^~plcRWlM4uCZE0%7cY5P?q!>uZGvj?JEYBiX1>x%#m$0ey4%zw%(7L8ms=&K4Qch6P8crN(y&gAu zvI8q>xtXR38_QmcpWXllO>HeX=v3raNs>U2V1&GNbJViO;P}l$xr@w)1X6Y)3A60T z;OK-RL?dpY7|BILgsdp3>M@~_40Yg`Sy^$=y9*SE8U0q0&0n2Oia*P2z5dy^Iet%k z4nqCM!8b35*UOh@5ISCQWKxB2ABR+U>!pdTN3|ovssOn}^b=BGu86(F4mfkt77;0A z3CK9$PfP5hLhup)mPkD)75w9YS92J5s=Rb(JRi`vG)59Wy_?|Xly3jR|qFhY; zj&}QLOuP%9o#_JN!et#>)_5PzT_beYI>8_Eerx`5&4F7=uKa=^D=*~_oi%qQ6-_B! z>;fmXy>y|(vFy|;e!T>f`0%dDY-Ql9)hvuqZhK*Iwt~^{;QqiJb#}f3dhdTJ^w+ot zC!MyZ7)GCIriCA0BBK81%;#tCDyje%Htt7bST-8s-Z7z-KlIR3x%X)O;kTp2GxK z`dyM$oS5)8^aiaQ)o#)VxII_Sn4F-rWw5dC6_9{s*bJySaVHP;*fnPJ4$D&E zIUReU`#$(!xdd^W9NhiqCUbl;y3NuGw2Q1-5Y3s;UVYH9LkDp@FQtGX?hQ)BKWXv_ z61z`@_}^^C5!YliVA=F1@BRHykd;wi1W=L?ZiuLOc7exWUH$`S+QfAfA&OC9kt7l8 z(IPS6A^-}wX%tXbFS}`UEj9Eib0w3u z8%Y_1-_?Vlf^L+jp#AJ}STyM+bf)KtBda%@N$XLJy8eWwam}TANKyloNGQM=<$L{N}8AbQLsN<%2uzPryI>qRL~Oj7;3Bp=|A+R`H2h-BxO%pio% ze(1aMHMHS;)KaV^unTAwH!koY2->Ja`oq2eN48y7)>ky*Td?LVK{&8czKq{sp2hRZ z67x{$fR*JJD=h$72GMaqsLMCz|PEqbb@Y6w@U&yr8=HkTOnVKiq z!k5e-i-?5s&V!J(pe~C3&@zmX-=gQjH9z*+?1u4CBhqg+GB>$uX z!BBz@HO-_caG?am3oq9OE~))v8-3AXS1!Ml2&Eg;KScusbH&2b^>4n5TCX1fYADkC zwbbI(g;Hv@NJ;bMc}if(Fdd^}UReW=#j-o`^kZX#dZyMh(CYAVw!#R)cH-XH!2^%w z2MVy*+I+JnQ#P|7F{l+gfF~HbRx&8g=ww@RlehQvjInrH1f8~vA;KRb*U9C81%`(` zfG^T^ou%sVFKQhl2jReMBH4l>dX0&DCw;IiS*<_08}#}D{lz%Tw!)8i;OYDqPNe%@mq!!(ZAd$RjM2f z^G@T>fSYr~|7@!nkk@&Zb52%lCQ4vI{5|p_;(xb7RG*Fz^5vhCQYKKXy5K~yy*B82 z-$pi1IJr(DJyc8{&B?<6m%k2PYbB@g)d*Mi^;9)j9$W_rPs%m{uPr}e$i?&w+M00rGl|L=?#tOK2xkSg4 z9B)j^)FS9tNGa2sZV;43GcOeHuYWA;p-1xoh_i9vAM!ob;&fKTnFc+x%f+B(xAyHVsodbEm2IJ zOxgkcz$JRzvuPHOq-cXh3caSY%@w7-mui5I6&(LQfk7OUE$||{W5UfyL0d~^14NyV z1zaB-GiLiaV2)QRP#77&IT%>PhI1a8n@9>LtgaTlwoCHpbD>+NLc_%<|JCM19!bDm z1SJ(p6jR%#)>F^E!@GwJvq78K6>w4o--)IJB`2NEJG8fDKHS~oZU#8k*8y-o$u$Ro z^v>8!3`AK^AaC|UmMy0%7|&!ChFr{+h#tfxUR5y6Fw!wfMI}-{O3b9B3q_;cd5sQL zShrd;KnW6MAS~sKudE>$hPVa!1oGpQ-ZgDLc~lg5#NZSw8ONgnHw7~|lh_;eMf8mj zPr(*?h|>5bT#KpgqcjVnXk=;a5Pc&C@~$GnxIgo&`RcfX3~CdJ!!227Yfxb@%Iva9 z{-a|ouM0j8??DYja0TW1_K5$U^+nf%_V&DqQNrW4YM(7s_;@|yr;5xuM zI&|-3Y&E6fE-6WJr1+t^6pWEN6PO8VFmG05**>RfgVcuzbI*!61OU6sV)t+$1erN=R9b!Ot~E=C6v?2^{W%<3unJbjf~_a`XxtTf%KE8fZoI3d_IBqswN2s?4{` zGi~%9hR93+b^()zX9)_WQrp6I%4W1`VnRTq zJ!%B9j5h&;H8Zq#!3iU#_4?Bw7c00)(be22nz*ah=?V$zP{16V5XP}QP``;r& z?E?-lBxqUu2&;|G>ZOPsgNM)2q!AzSi#^U{^n}^8W??dmlhagXVN><*Jr}_6(85_v zA#vHq;Cm+d5cgS>dV>VbNesjwUk}@t&mPLx%3*joRIW_9!gHmkvYE~B?FH045mDrnK za~_cwbQM!GGL*WK#W;cv5@k6|WYWMLMJm)-Ost$J|HYtCisjf;V2FzuG2)ID#yP_8 zRR(3IR-0;S?`X=;l+{Q7Jd7_^tigwz-US*?Wu35sxrI?04PBfZu8#cMIq$lMxvd9%=vaM+g7*!2)7sWq0GqNzirT z!*=J%w%2v{Nv_v5*N)RSXL8(~?Mzhh$2uPWs=@`1%^YrP4 z8RPC@g@(6r|OT#m5YDw-L-oG$%7%EJ(>ai_qY3;z+#Xg@fa7t&vhR*OZMWlu>4Qz z<&F^n@n=0Tk1zN2E`y&H0O023CJ6THzCZ2W@i8|$Ht%`;%*e2(8`@beNd4+>eoXV# z%$)kL;lR_)KJ{jRyqWqxj?TlM?fv`X_udXwE!{R=RD6jua{M3YOm>VIxMZ~ z8>C>*s$!e)R~!B}l=d=QCnY`ydH%3iADNmQDswqB8A%>Q9^wje*p*6C=^}hhL+lPU z)x}ruLNna?v%Wh=yxUcLq};14u$u-IS1CS>5Bx+h+Q_?!yVcupsnWz7S#bUyN0;xZ z2?t~tIM}^l1}j|nw~s^3gwNcOjEYOUR-JV zrXjsukusQ5X0=(6Ypw#MZCmQU>3)4{b|S;*Z+cPT?ttuGNT;#g4@oa#M6sNht}a!a zk8JIX{|jeD)_Pcaoici~!m4H<(+qv{F4^iFQht6b=kpr-W04*^!`d-AVk{1xzZFBx z0=cqz6uy#&vDc(*+o#bP$2ct9J0dtLl(7ORtx9psvdp`6P1jiyCl%T{sL#C5Yh8P$ zdw42)IB?@{kvdescY?47Q~RGY>v%bZpB{e8{nCrBhTs2#dLQ$}K)&x(?LT_SLWVRR z#bilVVKIU0lRNAI6HgXk+yS&FcX|AKHq)GTA@9q6@1H%P8L7%2z}z{u@*Pdq)JuW& zYOaz=#=&uy7)=^z%lf8&*19sa1X7Fvsd38n4DoU6#pP*?K8ZZdSK;eZWLi>@u|D zn`1R9xaU4)WBaiwSWc1^2d?SS?vA{eIi1={TP4Hxi@5?FKedp3XGaCtFF0HGpE$y< z;KcU9g%NpE1;wq4s8@ro7 z!^f9)>TO8{RJ8Rwz z2Q$Z}Yn6{~!>7YC@p_tKx-bFNuex@);Q?4*{9sk0;1veknxCg3c&tJP7-=T`0|qwB zzjv6xXNY!c$jdm+wKR@McX!XY+Uhx*O$zID)J>Ig(^Sd3BDCVo_&oZ4__(p$h)yXt zl3IR-PE?>Ty`S9iX3}QaJFA8h_!MC$yf8?)h<^o0?W|T(eiA&(Q~t~TNo{*nNaRsK{rgiLRp<%{M%siC z-k$8bwfG&@lP`=&7L=M_<|_4jyswn_!+TTJAjm z*vQy4lSdrB03{bI^CNA29IK|X>pCM?uc^;wIeX1Jn=6BMBzqWm0KKWSW;DN`scQJn zM00*&F6C-#UIn|Dnr->vYdZMD;+-$K6|%UE@3G@M;k{(4bgzbn{j0jZRgh*C*ZjEB zoHb$vjhS>4k!Df_936Jzb+}QI@XH1-Ht5j&?5goCPnL^Rj>>vQ7 zzwO*0o#g!R1mr@hBXu;wqoe#i(2Nm$O3K_ykyW6@4BXBT0+X!^2wm206-=A>ryo{LN8H`k=F)*d6MO%TlF^;NHHwh^UsjE^oO5 zca>$K%lhU_}iO5r*W>2WsKV)`f>eL`~35#VEtbUcZO74xj zrOA0GRmjAxu6zh6zv6S8U9ki;N8B{9>-qE-v!;0khvy4=gZC@Mx5UM&M5mx* z>#c^Jy*F^2t=kjPOOzey-fo%hAKit^S1UHp1jzA?`gF8lGRr_Y$UednkH)R1Y&k++ z;2oT_cK_88C=gM3Z`L)Rk-Hla422e&v{pmmjgcLB`8FJyWj^Y7aHh4)?7l1gyB1c% z6@Q$V#8GD~mF`Xv)g9J|&x0Z$@O0dK6rh0aN`n>lw|c|xn57>MV6UXk zt5)3c$`1;kwHjP5PA4E zI_lKWD0;^^YXg; z4aUuDM(lL<8&O4hV@MaAPHXTP#G-@R@UUvD0Qi^5#Auwl;MCHfxqlHP1<=rr43X7E z*7u2XY7frwj`=D%ofJG*CLV8}sOK-+bx5&Jyjfm;_qg}pWW!bz#+184EZaNwK+WvM z*~z_0^zPj|^NOj}9h|XrLoE%{0rZ0#7T$Vhd?r4L9f<1Fbl?PX9`LW&Q0>_!^=RzTSY)57Uo9ZCbW1COd_YoiC zOSL5bVqo;3Zvq`rGh3!3@>`zBDX;LE<=R>V`aL1R4uBRs>BNK`a^CAVc61j93>T(| z*ZTVt6U8qZ7LV~i6DSS%rSW=Dx*)Hiti=huwkUlvu!pZ@ zt$uNQb}x=`#-rc~PukqnrP3=8wrebh4$#`MFY@G@;5D^&h1VbWBK6F)K*NfWkQ%7PPmTB@x@Jd zroL!~>bW0AZv2dBRJNC~^fnYIJwXvbk4-+(Sgm1R3(Ilk=q$?bFNz=K z24qLo24^4kio0@4^ibJMd>R-#e>Pu9&tYLjQ>J&Vtbl1JIpGq_`+%Ek96j`@8`ux)_-sEAKguq zsj7NZ^5{zeH`i!hm#5PN(lg3wv5xU3SMxhUciQPy5i!p}%Ke)q{EC`1t=kB5o18>7 zOej|W=Kt<0sna@fgwsx+#RWam_I|6AcsX3*z;7TY;9DxBwenv}lC`=# zIdc;$BRG8@1UhI^s!=Wf-t{;<-0^~*^D{lUJFPp>pGqvf!hG$f!(KgDa}uq?zI4&D z+YT7-I6mH4onIOiUfi=#e4y6_yrILGm>$W49jDG+y`JcclyWwQD0CIGKb?}S+&rs4 zF$r86eJ&IEpg^?GPP=_mK^gR&XLmP01HZ^)1dvCACT-yLdg|ffqkB@)jmM$h_U58e zOZO-g_=zJD`sg4;O3oTBdhukjdv}U%8w|1LnQ&%&1K2>`mdDaeH-F$_r951M`^^6f5bH_3 zwcVwW7&sRsm_ukd2EDdROUhQ0#or`~w6ob%G?YP@Jd~l(k?%I^8UKMRvMf1Ntc#TOn^1vkM!nP+H~iQ z?X5nbt?fEctVvX7G>NV*<*Ac>uow#xPT(}NMEsABKWY6A)VqHrDm0@zO#2y9IhcdY zkK#%|3#2LZ_Q^{?@>kph$|HuMgDXmNZQ3m<+b%$LL4w0MAIR%rpT+6R*|bISw{3Ij zt)(cW_QY$353dFyYMAqysUI%pSUd1xZszj->SDinWG`pW9yA<=neFGdgBfnyv~q~K zSf%jxdAskH3`Y@K+ywh z?D`~oiO0t#YE!y8DZWZrp~HK+?AREMmjq$rP^GRtXpY3qXYH#7?eb}Fv+{>n z3RcwhaFsB?)LmI?u-14;Ota$g1bNQPS?bF*Byb&aiUaUCvCG}h1qN%XA57UVTe0J!FW5V*p^AOwg%^1x42A)(T4AHl?5z?_ zAZOQ#*PFilXu_J07g5ywt%Gk*vnVak=Q*2;IQtATTQxAY(WEjd`nISceD({W>4}wM zam^=i%`cVELa*y=&sg$YU3gp;>6W;7&-;3B#mfB}(<*n#0*_;~c{>mDR=K-kAr9Sd zr@h@&)RIP|_H@K5r}QK_S4@oaggUAYuYmv!!$ye>b28~{9IgR;Q%yd;O#aS6x!6X) zQrUnTHY#X1d$m%eOwG=YeHz59FUFZZi*6q4HWd<36e`T0bP4M)ygg~=v9Wa!CbeHB zy1d4G-dxFpws+@y92izk_*9-fRjHU>bkDHC!0+OHwD90$ESfWZxbiLB;=Q=U)7Y>x za>Q1pgEM`8zB zoQKs}fVQletX|LhEl@Kracws&cKGdhTDk4?jy-0B&(Z=!8Yq`)?tHgcF?B!YqttEV z2ywMmF!`Zc1_R@MNqBD*5Hc)(h^Aw%x_%Sql*Y(fQ%M`P)LY=Xx`k=@iR^ed0wkqT zI_mR9tEybtB!h5yWm{`cHc`~Zu+kGO;3Q?fbaZu)6?XMx!q>^m_{t8voE*W5_6~8> zRAXF8P;4)?##%c4r5&ApYss?U^g^_mq3+GU6Mbh{`>Dt&HjHqzM4cMr_c~%#)_Cr{ z+?wg{Q7@Ktt(+T5;#)rZH-F%++DT^7ak+QcSlh|}SRhjSAmP+2IPgT_{C{3-eCtUU zR!!shBt?9Xe8R7L7}<9c16e)5?h}TFhL4tk@dNnggSqyg;LX^HW??#n?&lAwt6exS z&O|h1xQmvzcXZlBi^*PaT~>JJN~m>hvm>HW?AQr}P2Tl@8^^2{*pq-8!ZkZmQ&r5i zpG<(QZFh{SM?ymF#5l!!cC9oWe=tY@14e;dl{Y)AEAu{ZxB~BH9=S!H{1A@P%-J!P zo5;_@<+dlh9y8Rn9rn2Yk5@=vxQjgVqckMuDf4e)y0+x*Bm9DPZbTA)RqHUk-C9qw z$MvmvPg>P3L$M%~{fRf}3Ibz*SBP_J+e*F}O^=XelMdcJ^|2g3jOFravp5QbEd9#v zn@4}+j3w|{^{EXzFl)lMpDSO76!ej<`AQX&IQlT*YlgAAd;`Hx8HIPXqc3Se(svMl zUqjyBH|U2viK1wzh*I?_fNMcz#H<^y-LR&3W!KUl``zOsUv{%Du%?nkAB~#i9(Yx- zSSZJ*LDzUTyYPsu_ZmLWra9!rpZXg&g4hRv>L1`8g@Ucz$mc{&Q;3QA(y!GJXGYY( zjwMnF^F_&+VZp2Tq3k-3;hJM4c2b9|bq2Bn3kn6K`A+m%&_Z`?^KsPWq2`Zs4m+wP zi!Zl3kppBCV_DaE@AT@qngM1Gl1Ye~-lLlImpuO5aYWINEKQ&LqXVH_RFu9m7^~D_ zr}z7s#8TSQK~9j*unJIvKhL{P5o(Qnw=xN1#;)Lxvg0xfBcPY2?SJT4664GO#B*EU1EO7!_sr~(lBIfr+a!W$M+=snNm)9NuB6KOk z+I74#3tM2;vYC7Mh9ZwejH17WOPCdpANzN)Mx!Hj_vj~TO5%t6R_(}#n7w;=-1?x? zTrlP3r6(SkdHJKu`MxJA1<@K)OO^Wz|2k_0*GZvwelHchJXX%3i$zTSeM`zCP+MEl;(K7$}eM8+bV|kpavu)V;ex@hNJyH#^)N zMU5R>h(;b%J*i5*(eGOGImlURLNtyhHOj zhi5p7Aqy9-Z^lWHuI1kb8rWSPyuz{2yofFv3wN;6xW=%NvK!Nzh2IilcPGdmzz&>h^4{2hr*^9aV~ec zDz5TFqQR6eFA;{=v;Ql$^9c@b^-M2?nPzq-FczV29HFG?(rZdu~7ADAm7vOgzd-Cn*&{(X&=e7S{-k% zIEf+#DTso9ZVv#7M!7|>;_g`#nw=afAx}Wx(P|i$_}lqIt#;HtYiH8%^Iw-TN$Xlp zzG?(K{g(m6~2+W`%W=tsrGy+4f!&XdD9KKKNW4U_e_%k;vttQIBbYKY%8E zhkt7Ay1^AA%>ZIWH^>iL|4CLcU9SIqk*hL7p(Sm?>^Ad`{3h?_s;bLihw!+Mdd-gg zw4%{IxFV@fZ5g$(;NZ~F(4HAt5VH5Raxhh5e%WR$7-JrO`ZJ)xVv~q)RVZ~taeJT+ z+F@2ZHIp0m@1Lp7W1`MM&xs(k%~MflKeZ+`jCetyruSZ{>AksK5+6>3@8-J#>pbx_ z^QEb(8GP-Ez{E?5qY;j$8XsZ-jK+30g-9H0A8%59S0LF76?z@*ZOTqu6&j+YKIHX! zr(&777Zt`K=HvjRLlnI@m_NROF&d~YQv9t;DKau9B@wN|XkB@6Md4qZ7IE-!c;24a z#+-PgpPUjZ&UZerxaVwmr1HNFag1(4Zk+Ms^u^nRW14JVtbl7jJt6$c)PhLgfg3$$ zJyIP!NF?vA(dQGRCrJy_FqC1Y`BtWCDGL1JU+Tn2aey0IsQT=7%Cm47t;f_T&KuRQ zqJ~}t@5gE{OJsMTey!J)?k4yp^o-*#QlxtooE3S!mS4=H6@P^^ zUz+1Mm4ALOlA;N~?VNec(De7KUV2|Uw)N=R-d%o^Z8Xrhga)1BhD3(HHylf~OwQRQ z_;+y6wOxPry}>T5qa26RXfqYkR1;A_=F69wxwc2Da5R!f{v6aiOylc*XBmP~e76>e z&3&r@#SZqTEDh*UlU*-jF$)VEb#H&(*{i;${!Q4gf@!=~m4&MJYt#ygw!wlAPH<9Y zRo$^bUOlm7Z=0d*_mAb|#V_gBMyUWWwmM?*TFx6eYRP;T?~IW<(Aw0mB(hTV3|#pG zds#N&Mz40?ig2~q&;1! zb&#;|&;@k`u71hWEAofn#^yLj3VTRw#SmWUl5JXPg{cz@B{)rqNvwxhn4-rj0R z=W!no^v|ftS>%a<-VsQS4T&L3-?&2$OL`xpZM$kWNs6McTzuaz^)6@B85VD!pLUY6 z8G^@cCLwlXsmSA8z3k%_YpmU1Yzv!tNAJRL8*t}63go9aZPFY&PuB@G#@b&q_F!5) z_PJnxhqF&zOTr?`pj9LxFwx?`&e2EA5w$hR#>g9tCS||2l0`B(+y7#ym9yU z)xLtwW~R?oapNlfYShlt)|kkkocNT@w;Uh1URBawWuUlau^A$)29Qaku`*-Y2RCiZ zMk_yb7H)suu&v50mn>8K(b9-T^%dgUdgQdJw8P~$1+*@v6Ts1@AY7&2b>cpmLq|Z7(-MqkXp6pq4VO4r5)&;G>axQ3IjRH;uKIr0| zbkk?tkp})#bgA3rD{tJDd(tuWohVET++)4-iSc)IoL4bnCNd~&W&+EC9*@)GtC?yT zCS&on3k6hrVq9@$!I_krc7E~dB4?$Rv1iLS%()YHY*b^BkjFgaj1;31V!JhyhhIXN z0oMxiX_u)V9<5|E4ZJ96?`cZbZv9y{8}yV64Mo2p8+vTNA-DO_bI!#2x|)Nj7`W#D^u8Nj;nrBZe`%`I<5!nxaXW3QJQ*`Z<>YFJR8 ziHoZ2kzRCJvkLY>X^#%6qY2UtoB)gXiPGoVEXDAd+j30Vf{&uZe7mZFH+IO*?DfoQ z29HVhDnFn=sog2UfA2AO5uk3ChYP~fU!=Bzl!&o|91)N`j^tuUUyxg~ll+me!Wm

    !30yqeu?+ze!_q>a9cy5qUyS34g4gY#*O;t}-*^SLD z+pSgG&6z~rIKz+!IkpQ7beZr2%(yK@c)#sPHwT+)2>3i)YqKAS+nGP>dSsm{Ln7Hb zEfn%ZS-7-sji*yYWZ(}C$+JU4F>22Ih9`s=!MddV_NiX%X?Lp`4P$tP9G_tfI*kav)nav3+{8lI^PDS zzjH>{l{ejZbAk$u{@HQ7wbU^hC&{tUk$7I%Tbg{3+S+Q5nA=P{&r@t~l3Xlra_Dx_ zxJV8#G2wg##_uN_cBe}*n7Yd=bAPH(yz+}=vs&wrwKj*b>DoX2AqN5WT-izY9;F#} zEQZZ?xb{g*sg14nGa@sK=T?mL9|s;tpUyGh%xljZ**MYQKZ9t(*8WbRcN7yeY5x2jrR|wu$H)^G;#)? z2V{EuVD3nXZvs&JZY6_v!Ccqb<-3+f!&lOn?X^_qi<56K&00&Y>C^7s>RghIR3`}8 zNMJv~zkE%3D+BQ=^M}%ZkrUho-LHktH#?71x9Z~C`MI{UaUUX^HaY4GKaE6pTBnp9 z!dfa9lpV9mni5e)?j9bOh$Bt&yWO>`OSEsXAqPliBs4f`0ZmB7aAX6o{o|^kA!kQH zDtAnb&zAceN9GMi!*u(V)JmLl03+N>a`9ZHGc7Eeh!Xtp-<4xM2f2?(rikzPpwEEx99p8^3yain;%sl-Xk!?Is*j0(C&#KJUAN(56*ZO^o8+2nkEW zl--vR*NUDDWV3!vwwAF*x$j@@N?V!H*Q_ZwWPRQAv%biDE?HE`<<#W;g!`eLUei

    oclZDpQLs?wH<#%>)}Ih%@U{!aab0c!-!0$n@$% zbML3wpQrP&xfaiA2R|CP%}7vqJh44(alv6ax&7Il@li+If~i>Z{+kE@_?TEVw{K(Cf>^c9~^)fE$aSW;FN zrwDj)U8!DUZGE0*jvY@{9mdKacQjp4V%dY8GutdpuZ5o#MWA=UWqql9$BTbY9d*oi zY2DErFb@7O6Mr{y{*s!HW>lsb&?vu=;HnDyJU>O4NLBKj;TO@o@Y~U4>M#D|bUn76 z*Z%{Xleidq(FxZ{FBU49c9^E{Tgw;(#Hn;G6gk0eA@q*!Z6g<0QeGGZhLw_Dv?OsY z?c^kpc5vdWbh3U>xbKa*IeCyGyxkgVG9ASyXH#Y<6J&CC@bJ1r!^TPlakETJuA^kVfe~YrK?Fx2DZ~P#Qr` zLyT8f26zz{NEjD+L0wkgixF%#QZpy&IC&5U!~#bqWF z)5x*L$A@9M+Gg733gyGvvKxiOFU|=-gAX`NE%_wtH=+-yVNWy~OZz*M%A|}G$NUgp zzsY{1!t5NCbmm0KXzL$l)%jmkj|hQfvq$(Bf7f)@Yt8aVODs@-zcd*%Rufe>HKL)#KhPh8 znHurVMr$$}PaLJK;PBO=i=G3AM8%bp4}XA=au7ffR=wYIKpfcnb7;u+-~_PNwFx|W z2xzO^_EB%XpRFL|qxg-Q3GKG63vJyw;g{O#K%v9dOT9vB+jXk)GFGcsk-<>$cMl_Frv1y+awSDNeq6IhE=$3DGV+o9)9Ben)g7{Q-1K6 zbE89Z{yw=?CU-P9aO>x{0JZZ!=3_p#e_`%ScUg$-e+W8x42lraxB@{Mrp0%VH`_wH zm>b56g(7^myvza~ME95l5hWw3p)2!D>NiU*ulp0ZvlR8YPw5IbHq)dX;j?Ws#~fl} zU0NeYZ2`vE`MKk32g2^o3MV0%^nCzdRviX&z!tUxY|5is4p(WUQnVUr9>E#V-&)9J z8IFZiDTw`21BW52^sb&k!b+>DYwj1JYhaf){&iCslygzddK<;lt1WEy$0wvq0XCBL zTBWt=z>%8K5&k)KOAuicC6ltcmFZ~jQY!7HW8(h#H`t@2nkEKxZYs)uLRrE^{7CcB z@Q%LEP2Oxfqjg)Q@CPzU~H=9(Sq7v2)@}(>$gpSEm9y9pxunTjmp2BI&tSS+?FmcXjgPh(^(yV!P1w z)+gvh3-F3YT_=Dt)RPfhEaQZ@rj}YOjTUBbr^ml2ZsAQg%{;BRN~#ocHS^bEr4=i~Ad#;g&>=WRmL`%Shv4yIhc7^5wt=u! z#3Q4uQlfrI*Hsqf9_Z`-E3|y+n)q&4%OvN=n9D1L)Gqj@F=l1_x?eB%(rC!P+mM8` z1SzSt)W@!MwMfgP@W^Wr!citx?;V525ICM^q3rSyT4gD#wE7{$<@#bNO+dX0m*eV}m5M-sIb*75rK6WY+vA5nyI0JW zd?Rawn~9QL*^7dYNSA`eF}T3@UPP|XyR*qxgLJELIiQ*>1~%xzyZWPD)Q3_3PL1v; zi2&2Ja#mnFsg5@P5Z@kD*duDpV9v*k4u&>pdl-GsYY5=-AFhs69uM;Fuu3Zmk%)7I z0VeWNxjaol6~XZfF4d<9g8dnDoN$lLk7wu1}mxY{yg-k8P z;`&T7&A$d7dU-Q0$xAUsN(&bD@|N?80I4VKgqEFR7C0F?p#>3R>!&;iqn7!LMDbUu2*oa4-e@9kn0Kq|Pm&8{;U5rg9 z$O(FQhX9I38Y6Tw$sDP`>*Uaa)AYG#u0qMkUZ>nB^A^Olv8mB>xf<%1v&7K{MR}o$U9)MYy)X3$M+aS{iNIj|T_(vi}VoA??*FYZ!sKe%*h+ zkQX8qoC5tNfUj)at|SOWO)?*Ev-)S=pDk^wguAkZT0lLD zfh3&{?Gg?Fc1w;1KxPTaF67PEmRzWo3VOB_Cc`KcNs)}zLK;j3wQX2S_OM=(qX7i= z)J)!Cc>!gheLsDh``g&Kb#bvk#O-`(ija?cYINItfiYzEx55a0*RQ}?w@|TQKh28fEaN@c_IE~@%vXd|$3aB-A6p>e<6CRPiCW_vbSXpDu!R;sT0TZNv#>GK(63Y@%9t=cgZBY$4nF{NNmcl-Ueyw`w zQkHo>RBc#>-+|DeBz%hO2hDUV-N!K~aoJIv?Z>-e&_UOxoU5_XJDpo!hxX$F-Ak@$oo^D|E^JO9(Z4hm-Pj)t6NMb;&VlqzbfYz^Br zetxWssQ!U;eMRPJ@f8(bP*q6Y@Ht67GnO~d%g<7rlc}9_T@J3}c*8uL&5|v&aFOq( za2}N)-NWH}tedNAkPdq9(-az*_xxOe@Z*gLv1%@vA7-tQ6Sj%n*p4Ue`FB8Z! zDk6xon#z}%rNO^XnjuRRvT(!ZWYZa|@(;X2^>CYjE9+}q9-iNp&4T32pTRq8WT%T8 zNYbaw!|=0E=9&vwwx440q9*f*3hU&aSUVZ{d9eM+4v+`EQ;;ypj`%8H&zQ&n|An^S z>V*myTz(fTGYidH^NX(FiPHvcIM?!e^K+VWPyGD`B6bHLgdvzm?Mvc%WTFwBvyUXUhx+^a zZb%Fq(ihsBn{Cir)fuE+JDG_YI~mUlFQ*S0_}_cJ%kL)mHge%u=Y_%ip)VQ_Kw$!> zPe~cke1ePdcYGV$@<#1pW?B4P8rt;q7NxOv?!iaK#M*h%aXYz4SXHlDoy*0Ob%QTgR3or1tl<(gjH%(mcqd@g|{nuUC0e zD~*EHa!rW|Lbiu*FU3XfecR7I9d^fkq9~ky4XaiaN;Z3Wz>4y%RaI%bV^rTnj+2F!Sm#ca}N`lM$=_^(b2}VG{`;WZ02#ee1BI4J| z>tER^x|$urk9;MBX2?Bz23WodU$1D*?wm}NGVDOQB@9;|;%x~gEld)XM|n!-vqV%Yvdz0w zwC1*PYwP?Ux{c*}QeH9R%gxX#Y*{d1Pl z)k1~4OY6;WimS#0`g8WMX1cLDrX3jgy^z%P_|hTDl~icg5pmM)t1UCLFw;)3|9YT{ z<}dH=zpmONN{x?lvj4Z-A^%AU$ROV+{JrFGqRzv?>2iVgdT7p@-)Z7-N6|~>J3ZN+ z$_|vX>1A{og)=6Q5%ymMtIs_$XU%!LnOR(aV1LOy+9ZUXF*n6TJ>;}639Wzo)=^pH zlKQ&{pmT&$fj{i56(+vI=NP3H8DvMRGlzFz3gHlXIOqx71r`ce56v zOVvV3p+QO$q&|J-x2+d|3|R(K!6bX~l^(C8Df&*{^Upq?LchNQ9^!m1mhQ$1+*;mJ zHb+>5W_9GWlu)`Fu0u2^P5oy!3RMVoQ@dhf>(-+i6TP6dV<+=}l$8i@brGq}g8H7; z#28=XmsLr}y7@>y$i`Y;7dAvwzAWGyPpD}R`r|o;ir46OBQQuvB$hE;bwkKZ=`ja(3>EHZ6FzS*OQ<4O_1TgJ75ow3hl|r$i3;34 z=6x-L{ABbUM4T_xP)fwD}lOr9ho1r;|&P`fMtZp_$w39I?%VG}6ZW0pWGn z7xIH&H85EFq|N$!lB~_e#pmI@J>TJdMRjq@2-VRutxUPSsrzn?Rx9P}G}yYTW#`(z zQ%oLA)lF z8nN$y)&@ylpCjZJ$9)|DwZf!Jy&sT)?RGw?Pqh`6zo@~lsx?XhL0vvVtf0lRmpJe7 zUlUVXz1Ejg0;gMp*8XXFA{A=bv)!Djs5d+`IhcOm&U-Ln@!KgBQaX7?y%_LgPu*l; zb?07aGA)H3K-Q&EQu^NFMvRFOdEDDEVfsx!s#a)bzuqJ}}v%c^f2{ zU^ND* zM}XFH;)A|UDHO+bsT7Uth+0uH%=bW!cF;@Dcy02BH|M!u4g53M3(^2F&{9l4U~KFN zC6Mw_cPLQb{hZ=a%|nbOACs8ge^uBm+P|sNjmB3bTf}ME`)Jkwxfv)fZo@NIxeUL? z%lxH0@hK8mnV4#J<-Ju75PdMVCzhq;=k_^Yj|V^bu!NjPKNkw@84V1Xrn%_&&K?Lx zPA9v(T75fk^F;D)$ZU~P=z{sBH|G26nuP=XGeX`v4iS#M6xu5p>nfm_97c7)B&J6$ z#jO=6<_yxj9$ccd_v!GtwyWVH7_w3@2lcKuhd}BVVy-3Vi@c@!Z4Hv=@P`Gg>ZPFGnbw>*dpmBY$&7ri|SxdgOjGGg|s!fnlgn7g;F(u=f^H>hgt| z?c1qzlf}uWOo8{f?$iCUz6R&gZfm${^35&H^B|2*55X)htI&Zo^?e6XS@g1(hK)(t z>VTmWFfBn*o@A1QOZ)_!MWy5!WVcFX7lr1gt9?3a3q1FHL+(bgQ+3L9;F=Fux-kls4Ki(q1+CoHxO1Ee(l%$`qq3WPGK+qL-5+%^mPdGktm z;v)x7^P7$KW9y}_-gp=5l>U~)Z!*hDly$j>+VJzzN}=?`><{Q@=n%^4X#3=*66O$h z1Uq&9o))jQKoRYBNiGi&BsV(TqYVUp)>3$}dOUNnj}&0-wKj;D9q(UKE%JTbDH+W0 zfV6^@brST<3}EfO;Pf?=AN-2!NM-QJZ0yIr`si9X;m~|%|^K`$FcMsMc-&QJDhq9n>>Ute(+=_tqJq@5BBfqmvQg7v#@&Go#` zrHdQf!|@H*CUUi2cJ%1JlOh~U(&EtE-u_}lfl(jawLTSH-FHe(J>GTdpq1&)_4Q+K!&CEv;-CcIG9`oBQd!UcYDdu$)b8_>bar8pK_Tx|`)tWdLv4Y8w z;jYT-_ZV-NYG0aY@^}FD9?jm$(tg|?6LaHr zkCaDaRlaGB%#8$&#p|nexDR?N-((t_mXkiuX*Lv9KbGm8KDdc7Q2=VKi(Y2qI@0n! zMR=-QpYk>Sgz~cV{ET+aOWA;`D)<|>;j$n8szFn{b@brjRmyVy?pgyzB<<%dYZjb& zi}+>S%DQW>kUdDAAd@|e5Fn`3KDz%g%~b?!)5mU}6ZP0qTKzd_Hs+V8I0Ha+wVeig|L7HTFs$|1e=jp-m@v>7rKIdTuat76aQCV7HXTu)v*{?hk5MWf5i8uLe9;#vQ&{1{(z%JZzLJa&Z6+ zJJ>iry&Wzv3~(Qnbd~%3jxqSTtfk1&f4v=66%2p0xfrAC63KJjU*4ySGPaZ4 zc!i46K!7dE$``nUMZAMZyim9B1mFY zdtM8`wCF^BI2luZ&$d4T!J%jr;{cgv%ql1nlb-F<2(MeXS+TONM z;n|v;XNq1=^=g6?4J;Le3uU2)I5Ve}-LL~{oZ%nGlgC|T^=c2fwg2PkJ)@dR+xKl9 zXT-699hIgcAR@hlo)HUDBONITf)MGwC6J6FAktJyqy$8o^iBv6GJt?|={1RzfCNYg zAp}SWZ=T5!=W!hEYHtQ+KL~7s*H#Oy+Lp(HO6BsY)DhubbnpTs`>p zTD7t+VF(~dp*xN9Tli|-`o5lL92i+6r!Y!s4*u*01aCFN%CM)0ul_YGb80b|oBh?P z{Ik~Z&sO^9T^#Z3|HCtEO_|(a9c^-dL%5-$-Jzk1e|Vp*=0xp~%Y=X}2ZCBa?&JW5 zcmP1`DbuT_xO)QtH}2K|2yNmwYX|-tm_+-uRG+7ebXpM@97r%tPU2gD&^QA$E*8lC zznJz;74J4JUeU-;I{?X6`D~U~LP(t7yZt6p6Q)mR45Yj9=%cW$mr|VYP(+x5_RRjB z;Dxvg;1+!U@wg=^nKGu7$^D~J^r(C&{hG>=cEkr*T`=rGtcaU`c=*{?71PQx5LU0Y zsc1CtLce`<&;x&gW(FlQa33Dzo)rM;^XhBK0*l#q4$YX9l`TN0JRe&SV&bUo@;<-T z?-ExlwML3Q!d212ES7m?m;Xp^w<(kGdIT#NM(yT( z;vdpF&50$eznT`3huYuC$Usu-ZYCmuK9T|zJy~fQ59i#27e^%yr=QE5d)};$c(c~HW&P*CjHcJiSoPH5<+T6VdLAgQOzljlqZ};)-g7cLbA94O4a(? ze$KBsjoeX#c^@$PN#L=icRwTE1+ZfCxnRn+rZDrMSSq$A_GtzQ>MJjB@?G!u5?#il z>k~_Ui|3L9kWmQH)=R^yqjP>$p+^SX>a(Wqa#3c=PgGt8tu+uUTW{EhSLH}F1{n$A zL+0F{F6m+d1u<|mtAR)BYSc9@q4oGr$8sCMzVrr)*2H|T|5IN%u~?YsYe>meNc`~_ zLHXt5Er-++k*cIZz^Lm-0fWqsvY~&KxA=VDH|jSpv%?LNYdbTsn7F|~ z^VS2v?5s%I_ULFLE?Lcc(=DY zEJ&C=9r8X(_~7R7_+_od?_Z^;q3R*b`da^^xoCXHRh#e>3=sm(%)(vie7Mowj`g0c zW7r6y6+9dn0A+PU09vC#WuTs~+5a%Yhju;?1bC>AlixSZ-%N?uJQ++~ zhsW{`BiRZImyvsZ3YyX)x5sucd6(5SHFY;=x_zDZVqB-4GbLpmsQ%rhJ-4E9^K8v4 z0N3$wRoG?P)tcfE`Q3Fx5$tw&de3GeM9{xUe*>hUeM+jkI^j)%ND4pYbs-sMw6tYN zAL$>v21xlt9`t--+0E~}ZTsL!Uv!J{;w zcje^xuwRR5WU)!4R3UfZdHR_A_OlcpUbj0;CHiHy)vIwHzrbfGYDDk;rIRfzm$NzZ zCwQ4S6rXwMr&1}GTrij%u26{=f^T-oMOw+tOS(DU6&Gi`EM%Vgeekx5MQ_EOvf#r+ zXPcb~zMT&%up63p=PQy`Fp6c2;{qrnhD+e2;@o3}4_yh;h_KPO4>cHsUPj{`M~Pq* zrE3c2`YB`S;8Tw0N`qKLqkRlI7H*PRC><)*`oXPDc)eCV;^%s$%yJNA2UV1vJNx?r9)?F48bpZ z*EEzt&>{}G=w!Ja&ZcE8TA=RMz8^_|+JwX`f72eJ4dEto>OpKq)A z5p(bw(b&5BFjZ+`(?bp1n0FFa4M&FVR!}d}#v5K^%2o;e-Kh1P+rGKI6LeA|GY?ZH z%^HOXt+d32q&yw@qglcyYtce5=d%q3yVz>IYS*<_ZY|%MWI2U+AzznN1$%UUvQp=o-*i|58}^7QP=o;_q5SR^ZT zDN%6nb8+RuEHRfWok@j>K{hp<<#K|Aj0p+)wR;Dc=z+2%7{^RX%=U34pz~uZR-&6 z69gn|#^&;OfcO@QTYMcTtgKwQ=Rgme~vnW}_5K@KO* z3l8p1AxLg)a&(~#@`Nk=|DJS37jBWtER>OoP;Ng8G*uOO6iVEm9GC|nq%W_D1;_6k zEzKTKc83mjySMuZ8>Jb!rSUtGym$1aUit@n@T|Qj28cE1b4}QEl+JOT-KIn zhet^%dS}vM@K}2Ls|AcH+a&52{bsj^*X;4Whn8qJk9ui*`O>Wh7kQ};orbK)7v+gn z zcKHQ3w8H3vGlDvRoQ8vS8!nCBhFnWSN@U+b*1|t=;4=MU-mR>53WWvPz2m+T?`fVH zZxLxSaE`U+v_%IW8C;)6JxS?#Qi<)d^%dABA(bGq(Rh;P020p|q((4d%n)ChleoXd z9G`lp=07mV(>6>Vek5X3U$aeR7VRJDs~6j~VEk+Arv&9>WgVKewGihaN17{7;4D6* zoM;OGybtfFX_?arIqLmik5rL=yWgX%PNEPiAjLoTn^){lczCdQp1Ai<&YYREh$m1W zFKMhXm!%iC@XYWGGcW*4tn7+6LiI30)}-+c>g=)TF2S~#oHkcd7WSZJL7|nAcx0h| z7Fi0v#)a6^d?TI_i1STt%?-hU-s|%Xs~M1Q0uK$>sPMdZ%~K}TQ(ATJr*ky==<9}; z(ZUnA{?gOZQGe>I*Zs#Spm6ric33a<>`d^FSl%>RP0d%f=XbG|{S*m;YtU|N7H-ZP zu*wan#j(uT)-~Xw7t>D#LSBAW`5WQ=# zxYLYlVs#`Lef;T#VrOL^T%Gg{JKxVlkyL_MB7bP?VaK5u#;#?l15tQ zp4@j?YH-Z#q`1M7|2MwDA=I>=`+u*RY%JsRh~qew zFW7}bQJp^+$W(AR~rFSKDhC#lR~otxxyBiE$sakp*flj#1deG zvT-(9j=!fJUMNIIO%Rsam!4VRZMsI6!R7U_XH@0W@oNnb<8jSd)6>}1$4w8HADbr- z7NAiV7Y-h9;o&{#K6=z;J{h3O_$ECsB56(o;_G(W($4pll$_OU#@+!!<+Q-DTe#X$ z$wgNr-cZrrT)4mH)l2Eqb|SGVzJpUrMmu2=Qe>i+6@exe8>MJAmwhgG$khIeu6kYW zV3ErO?)D6Hp=SYa@#$TzsgZ>1P`rd<@V+D-3WRUZ1>cj7+ZvY6qIU@BjzNF49ckGh z!_Xv*z5c^;2)j|FI^fICRB>;o^^u6vuLA52j*(CGGJTRt^AEWOcDHrKyPw_N zzom=6AX_!tUnN!;^S0-3*qPNbv`*;vwGOl?9WDiw(yXguGhevZAX3GX$J1J>l?#8! zr_e3??Fss9s>TKUtYd`Clm7lJ#rFh+vrUq)H)|^hSyd?`Fm`5rr&JDS^Vzm{p6dL+ zPT@7l2Bc#N zk`V{KXS!AneQNfple3AuJ(#@B%OYpSYF5vDw)v$^m{h~P`Z~!j>NSl?U&q+_>)o$H z*7z78c5}{s_uDg`?loJdni@o^3R_BSEWZVFCK1iqS;5GWnH-fGYnt>r*1E%E5}3o$ z9d2QUOb<*m?-t`NN>6JP`Gg7;%b{)jd5O)*$syi8j+bVse{CO1)M3n2Y`w%qxCBGt z%+5_tyZ#GEs5JmE1sKIw`Ih^3!D$D(Lrn4}IZFs22^<<`r{s1&zqSnxFWHUauy;u% zVHA$8$>qs?7J9HEagakJhKUXX#Zv-A3qH?!pPIauysq+>-}_;yeU*D7UkyXsZ33UO zJTCp9I9nm6f?&NDs#*qbx_|w4`Khehv*PDgiv$T%U{IKL2vUdgrzq&ce{k<={6(yy znk-=517?}_^mRD7E`L{4Sp4H=5-bpV#wh2LSDOyRVral7`QdBfme&pR=527A&pn)< zXEI(L@d=)m*w<=YGdTiGy45^unh%dUTsRyLme~E2U}0U*qIY`ay63Q>n%!wfTM*%+ zi)Yt!C+D+!4=^M!4%InFl<=Qnswd+fPY6}oe6 zqj~5;6RvJc&!I_3KjQ1Z@2}KzGv;5d*j;ZZHgS(UCq+0s$jQlpna;}fUXn6ZovNyo z3!=cWC!a~entvKaPIg!IHm^R*+`i*@O(Vx!3-F-$5~8%?>@I9g(c4uu)ikTj-7ewT zhw{|F|DM~ZLjH^hm)G5v&z<>A7>Br5J(9bBL2&)^hqY$7>f}v}-`M#zAWP0f=S;T{ z*);PXg2|gs$!9B61aQ)mt$6I!Jsb02PIRu;=;p1S?S3TW)%L4f+2*)|Y`b^lgS)8@ z73*EOt_<#NM?3WIDTyIBTS^5Z+sC5O^@Gcs^gy56v4J~X%B%Cg%}NuCpmWzEc@xKB zaI?x>*~5)O^8&BPl){D1aV`1aPdv^_!0=4d*VYFm%H#)CslCD9m?=wR4@AlpP^XuK zW;d;-b`|6-PNHYHL9!qXmq2M${Fm*?YT1z44^6Jog;L&U?;ZIds|a6xq&gjJ)1qdE z(Z@S4&A+S>3G~|Sn|KzSg_f6PDsp$e!I(QYNxr)<|Lq^q0k;Z$lCW?>8Tmi-OwZ`W zkF_sCk5qz}2F60EsGIK&Lwr7fm4AHk^3)Vu4OBBRb+(q&go8JiXM(f*45C%Z8W-TW z3B)vcwUE_xbSHY;n?K0I6PRETmzqC8B~Ht{K{Sj$D)dU;onAJlmnf08vQDs~g4}c? z1)a5A2g*~feQZoE-)t-lJ&99~HqPW*_6w~R)Rz$siOKrTi4caKeOFVEB~}!7F5ncY zXv{}gxQ+y@gxIA1p@ar(YK(ATh}zJgduQQ=Dq@MCD^{QtRud`v?k#*spKujD8ccP7 zIl#Jd&_5J{9prFRxq+twG0YLH&&O3+;P6b&WD!wYzgW;rCbUE3_qR-~(^|sxuG6(I^;-{kjx5Jqx!o{JlvrZ#d*qV2J4-Q(kPgQ9P4oB-ULlrxCs1GYEWXpRe4C z!?ZPKfBtmfJR8eQ^ZP-hL<32%IK~cTK)x%TIm~6vEv$uM*g>r|4VX`)Fp`1Z#5A#>QNkxRN+Ao!$sr5Agt%t>z5_XA>W*y>qI*bh{Ia2b7ig2=&awL^jLAb{oT2lZVN+DY+H87xojaAqz_Q1obu&*F&tU zQ~=Gyt!IYN}3@*=#k)SOL0s45kFL%g3GxI`0K>) zv@58%Z)0a~7BZe^9G5VibqMA+;8%PmRT~-+7IgVjMm9F^v!>y9!GyKr_{yur8p2P; zl3(@yYIM3MXsc5=klzV15@;TcEzj22*N%%%|0;P-Kv*U^z%aii<3m<&`slJ|E;<9> zh+)6_Q0yR^vJ)hf0y0bzi!cYdWfbw5*njLRvOLcWcwkBUG5zN|Dfi4}zYEM*zQKZ0 z|HY5_IK=hrjH0t~=ZyD*j7{{Tq6lhl_3Bm?>9z6hl^^KpqS%j=fmFG%Gu@+4a_Sn{ zDIpiXC^^+n<($h8`kKI7L1fu4J~!tNYa#59Z>UA!P?8yg#g>|XL>-RY9ELvEJZB94 ziM4SPzBB9D9GXrFa%;DPKPhp9$u7%%aj$o$pl1sjYq9?94KT`>wlc7^(5WB301j=U zPon1*+@{t%GU0y|K!;mF%!(S7k*-OSvc6A%QjW^eOL#j*sw)C&pJjnbc&IBhR~V{B zCTIUXd>~ABxG_JML7F|K%0OqWq?X7^t-d}Z_3F}veCbv#<@&;1e1wULMNe1y4-Xom z^qPZL*{OWXnmGGi`{KjH13lBf8!fnn&h>Z3`>Pb-g#0UVl_~MLLCppcQmkW|;WF9+ zqRVex*6qednhcOT^?{0xL2G-VP+=4MOFe%Ex#??VX-G^l9DWF#+w zxX8{N?0Kqm2yS_HJr7K?X+%4sokR zXDF)uZtTu0$#EZ;;J|7C2Kh`+F<}LcWq@Fq6r;MZnp|yvKt`yAhc}M6;*a(aALCG zGpp9vOMY`+D62cgG_4gYk_Q^5!e;2ddD4M3S~}_drXXD3yU_ zgnpZkR=(rq+55V-QY9Y@yZKJSu`aXedARJQu5l?XsaStroA_W!ueh~Ttl7H5m(+*Z zZnW1cxtcBxES2xn?u1t=u7;*a*t@K}JuuHWr31k&B#6GH*z2r5k5sfm|1>IGys8gG zrBegN9+$Pduu~ur^#df15m?8Syx!6osDBSTJi&oG~BH{p|DCQq}vF zT)Vr;6_p%Kli!Z`;J)LQ-Cz~Rh=ol7DWVxne1cnGq9IY|0MQwYq;2r{2cpG`k~&X% zN?$aA#j;hD#|pb#paa@w5pvoq>-xoRf2|p2K2-}fd$%TB6kE+PP97%v*cNjxZ2rl5T$k+};SL~txvawe+KMr?KsAF$Px@Y0gKgb6 zI}E!oj~P1kSegc;kwnkx9T3O_?TWBnt*ahB7Zh;Za*4>^I%Qtlbc zQuCqjt243mE87Mdmch`OPsVf5-3A$gsbC;;V~t5;`(M(#vH6GMW#^Vh8z*XOuopd+ zX^7OE^O<1=okc?gw^x828<8yN=abpYX4%t+&1n)newnXM#7Q}9oV=(HohXwV1YnJa zFpELACX&OTL+e4Wb$c6rYIZjaB5?m&H-E&YGaj)!6YU z!t|Luo3?~-t5u6j0}9=)4$tRi!S?tzbZIL69C5N@Ykz2kV!bhu-OVQd(G1^JbJ;lv z7xo+5dd5TDH}CJ9W({qI9pxkkt|EXD!Vgb+S6XA#tgRUxgF=hj^23iS=deKobWWsWyiUwf_)Lcft}y~K z+6*3kbxH`H`r}f4h!%gh+WPol0Ih^tS!<)nqO4GClkKP`AV}@bKC;DwrnRbUeH(f58T12`ojo4tfEkgN#e~q+CYp4%Ye(~ObdM; z|ErkY?!a&LvtBcy0Wd)mr8ri=zpwaRvk>CbLX$OzJ<08gIX4GozSa!>uHRjD(99Ba z+4PqxdBE5ULT=pGDFLN`aj&u_Tr8fTR@NJ>{AxwybQZc1j{D_8TF!YPKhIL-^qt%I z7w1Gjj^?`qO|FQTX3SqIyPEPHM|Nkfm#?R9*5!lcxJko17V;UW%CB7a4HdzmJP?DwcvH*9G(AoJd)pBNyvpDur@MuD%5(~6t*F<$??=U(+h1Zy&w``Mz* zW&vm+%4_4PrnO=0X|`?2=sH;_xLG=R`<@n{ZhZM#?nR5Zrig$dJ5iFwU})yiBH3Pl z&g(QWrol_E8@FY^!osY#+3WR zEPOmJ4$cX>%&FP$Wn)ap^l#eWaoIF_k#(XYEErVNi+KXQD2%*yWi>fB;+Uu5R7uN3 zc3H4ckg(S5pY-3tt!l-Lu5|m?l(yF3Iyb}})6m`N$x%6?rB6rN&-<$M_W`_rNq4nj z;9RbX>c5_AH%LOdPYbsUq!RrsXOkJjfqj2lrDt2z;{IccQVm_v{PWU)~Pg!*^vjRMkp<17%>?&e0_0tlb zH6>!@C?57i^1B(o#2?5*up%T<0~!eW(7R;a*KV3I(tjpR>8_1g53Mmj?&KHxBqhkV z-za&gvKpok`eNI$ClymO!AGm&WxAyVA3omQtRCp?vQ11p(Tj0TUVsG|JS~UQHqPF> zCo4w=H|>HEk6RnlmZ<3OqM~^nZNgkcy}ID2EV_>&Wwe$u`dCW`1d@S{CEkWyk$(C# zFcVd$<>LUOr8KASP-<^lg)W5#hui0r1vK`UX;`g^sj9&gNg}Wk19dO|Ooo$mjIicd zl~bz|)yu@e>_;;(wU|`&MKccSS}8Fe`lG1a6qwX-^lY9fX*#ozS{K53xp@*T-$jtZ z!9)mSON(dJUTD86{ZA2jGBzwh79SLA~_b=`k zC29X-vw`*8G0`P^%=U^GTbP&F`fY zcduBQ*fP-~f zZFSG}K*JL-^?HB}CNRCe0XH9C8C3cdI-kl-#nrB8L!Ka7Q0!xq_Gwfv|4-@WPj@>T z0JiEH4yTYiNqlUqDd$z#_&{`8?scFycy#%_lk}1%WJj_kxTybb+keuIaixT3j++1- zWB{anZ0A7NZG1^((?Az0z%MWxkx-RB_xG(?{jZJvw#N4ye$Y=&-nX8J@?c!!`kVlX zKF+A*rckq$1StA*Fp>OE>u_8nu4-&rO>zHeNm$o;MUcDsZxd?wzTHJbh1!UFY6h~Y z1#-HS26XzIXx4->%&X{QA0Jv<25OvnS`H|w(;x^HHMWNtYd;lv5m-L(pmKGG;#|ny z&?LrdCV`R$i|NmFgQJRlTy#&B#70o^MuW2Ceaj^6pX;~8>X$6s!lRNzR?M@89?3Y4 zsfhwK@8?ujH_I5z)#pyx3;b6KS4x--oeGwp;XI0%u3Y5a{A>0bL_;mhF-JeZN~__` zcX;sXn?ABpTRI=z%Sg&hdPr`ir!{Kyo4v2?bnZoX1)OwhA6&IN;~l%Cq3a>HudH7h zehx-l#FoEkf?#A;s83c6Zj&eV+Daz=+76HT&!n5R{(r`pJEQ{79u8Gp+(3E_UL^B>9noz|PT5!exX`!&b;22E|jl*zlKI zd%u?r&@bKd@A==!YAm^Ea=@uOw)`kGs{(fL_81{tM~vDHE`+k&sUZnG&4;Zl__J?u z+GqRH^p&#y3Gx|1H!1z5?A{3_?1OAwXE+a%>0mn*%^09u*UD|P{kodrQkRe!-d4yc zJP_BgmO1*5c34c;+}jsBT3XP&7E~3rQ047iPAe}b5)ntOHveGxGuQ6TrLG_XgTksW zHNqBQ-}sa^&LwT{MI){VdPv^K+j^TC%U#XNl&X5;&bVxof-;h#!tC^`p6kC)$&k{GjQcmzMPten$x>(t=&Iz)`(~>Ny?$O`Uhn9R z!yOg~lmiH~S^aky!6k1*@7I8+#4OGowd2F4_#ntee#DGPW#hr(08C1^PbLR(D+fAw z>1vta{@uvEiAm0m7rrITz0IyUNV1GZ!~r0YTr#fsB};kInzp{vV7wAsmkCV^7|NZFEJ`i^P0Qbp@ZKhPL|@~$SuFH>N*l0IF0AE+fO{Uo*=A9nB6dolxNyuwbZBk z@wllhhnftC=&#T zkoZnPsq{)~wVcMn@YgkWe7k`RPx7v#OT?{oC7G@_Nk&C+1jd=n=Gegb&HdU8Mv1=R zOwQ2WRw~R2@6s>7t?64BNGn#Fc`DDmX`th$)iTricnCj;emS~6);TX*%bu$NBq2jl#-di&rm#cjhVBy7F~+sqrP z(vQoGJ?TNQVlVY(@P{l+=9kVX>2GbPeRX%Ik2@9-d zszuW6;A>s?j?A+CR5+_G6V6F$H(UzktVv~8138m!nC($t)e8@od>M#zUqh9VAo`?O zVf9yy+ct-4m|W1|r@F!a-f7yJYE~!%h{8-fhFCxYacyYM0idB&6l-;vhZpgjN6x*DzSI+4KwU z52Q#?(I#HhwUWWuLHy7A^nG5qoDvI(Kr-{?%Uaw^mn3^@hd2wpDfthcsvYHNb3V|IHDh8zI5H?dQ@9N0L8cwV|ryFZ; z5%znva-~(;mjEV$?c4U5Qk)G3xUWlK@Mbqm`>9J=R&%CXiJMdV-WvOH@%j=0L$k_7 z>ArxJR}_bNLmWs=ha)I*EPY%TZWSR)D`I-N1efp22kbR&`j+YGSQ?r2Xv4O(Vz;~O5`Nbly2|ZzV1sl(pHjCsjpZMwU~)s=qm5XZ_~5lk*)12R&QsU16qo&%_%Y$V%$Cz1pxGZe~3cK?eoxwl!9 z+mp;NkC-Jy75E;}i*a$G6oNO4U!!sZv{o&U{2ye732% z;|?A7ykv4@+yn6P5~jj0_m3~_+O_^q6z0*y7+jGqb%Wz-4rXTV*$1OqU8@a96UFwEl9pGp=ZHr|4a(L2an@9I&ZXU$exz0|Z zeLQkw&%D}?x6DLbe_u4X#ZL62J;l>VV$rqQNt}eJ&!+tS1xB$wpzT_jG5`uV8>fF5 z^$cmNQ&&}XD+}0+Bl!H*uUidd$Y|UR{+{i@ z^`&0N1Lqoc%UoHOy{G*gvt+wI*ISm<92pqAy1Sh?!GqfR3QC-JPLQ^H|E|JM?d@Z8 zG?@*VKOH^1q7ND0|7b+G9Ihy#VS^eEU0uf$jI4eVGh%Co5|Ug-PWMl}_()|qUCP%= zG<$CXa?dQ}3-)S?YyZI9OXCv3@~R&<1WYyaXN~?#*fDv!xn&@i<^1!f8rb5BQK|ZI zYmv8z`~SIr)5ln$RfsobKQ-qHfSyDh@|kRX6i#ovqpdjR0!>)HnK-%;OIr4Pq22UK z=Ibm4{XhEGJv+=- z8@|6ZcP&ncK9g2`v6IJX*s)57^!)B(zRKwI+oG(rhp_rmzo0*STU*dcW=V^m5oNIg zY}599l=!E0MaRc5p~E@Nd7C4=gUreZP2!XPz^}_0^$8}Fp}+~p7YSgs2<-%#<=8YU z?v;lH5r2pA z_jLKQ{#swiIRCBkB}FTc*e@GU0m??JR4U%c^&$VwkNRZc!rArl#LvP{BR_xDw;pr| zXR7M90nw4uTII3o$*M18$^H2+cX=3NAd7e}|B#)6iX6M=P~`f4aQ*N@UUIT2#Z#l| zR?;Z&-YOIj_Dnc9^WlVJd80Gk9F+cC>=$m~_bdESLH*s>myJZy-j@TXaAoW3m=3)` z4VB$4TwT=n(R|0d|A3ZEmPQs{+>`7%ou~f22sYB#AB0O=a1Q=42>URwVDW~i?fQ1s zsDiO^z9H2VdRUwvRIrWRwz9U88le*Tg3rE5eU$m!m#PW94t6Ji{t^0nItn6Tc{yi@z!(riNXLEy_n%_&L;Bn3sh+ zVqCfi_QFQ*T=-}G7%Kt2&D)lsp~FcD>pOzZqi6iz{2n@ARh8K>r+hdaOhMal%Ra>7 zX9hcu+#^VS%9b5VY}EK87*U&JZFuXlg9)%61k_z?{kH^CRIjsI#8rs->Kik)TNd}& z5Kts6cJnGjECQ)D)R;nQN?-itRE254HjZ{<%Ct}>n^B*&Y!V-P8@XH(bUv;;z24w> z$)(2P_Lu18;XAtxyN+j{Z%+{Cjd_HtvO~XR60-2LK6i=w@kkKKl&H#F`ElfRxVT~i z#|feN?Wcw`zAA#X@-!pDs(%{)q0mq^Y0fO07_~RCU+k!|MuEd_ZjVjUR|Y^wYaf6Z zJQEbnnW3!=%|8rR`&GN@z!v<6To9pZQlsgN7}tGqb8B4zAuU z!PjCsC9Jl4oxIeZveO4-CiU7pL>~3N`mFW5U`t-(+wycW<*V%QhxtEes003&?>Tuc zwAVzaeJf+k zDgKz$1N_@L&n8da?9AKCr(10{5M@q!CmnHB=nj7}zy-gX-+3r?DKdwT%)W;fC&#fu z_6VItJxGUpCN^dbp_}+5mt#rW-8kExqxwx>R-cJ$? zOX~mbcX_xYqz{4INdJTL|B}s0$;K3e&XJ74_TAezLl-tW!tdt5ZJbf;?$K6 z*$`b0QjrUl=B@@HE&xN!3MG5)Ir!vrb``)j3&kd!k4+J27r&XGUMs52z5RQ#*TL|X z)1nf#>sR~2T01!IjY!nVw0^lOrQ!XCq=KOEZusWH4n> zQo#e$nnH%0lD&TI*;{T$l)=qF7UrISB552!{FYJG(El@H#I6ZK zdybIngTTYi-1o@Hd;lYnXTxQrK+Pk$dq-mHNk@=FC?a&Hg*Gt28Av`XTfmYPxJ?M3 zeUMh7!*I3GjXEDquI%~vJKOWZAS2L z7~YGK9>~oWp>>IJkK(zIwV6rI%^nDPJBqlhKh<~j`|9p`4cqeXl523j3ZK>3Z}QH3 zW#oDL`$&i8{Z`Aj9h}TM;oRsjy)>!(8kY;AlPuFvP$_m^QStuX)|UF9)eSYb7VTsF ztZv{_{Gf7FWjPqq(%_&=34-U8rMx$S{O)=ZH$St%V=*%m(?Us^(@BJ}kzSqy$$#cU ziRZ>0v81{90=r$G)vd59gM(jw_t)a6@0e|5a?xtfG^ohO9S4Boby7flv4Y!5B`2Iz z0a(iZP-ZuB=6P@QCqGR5ex1d=3ZvRgiyajuzbm?#aPmbRs4bz&acre0W^Qj%Lan^#kCw#mIX(Gmy#-%&xLH=?<54O7WJD+>XRmYoZgv*KsMF$pifR4O6KeA%UJ6jgjT4Kw|DDw`~K-SPz4Q3sWyCX6r*y9g~FQilY~4@eEXY z<+3}N(jkC%^VNOs|c8-wPdN3!J0QlHL7c@@S!quR~bb{U8|fKq-{CDfj6jeyij0 zXuKDb<;KlLs$Djo5aZV6IUQ7(w(n4qgFW=I7F!x7BBL4&aQ}O$KnVEx{_WjFcI|t| z5mJ077b`;v@F~d5~9{x*mgaoLt}sfvF>oglRQ4IKlNq!k-=R&iPAklRoz^UM^)XI zZQ~w{3Qf#A?+sUk$}ju$)+9R}-VWl`L2_~}hGkc9*Ia>?hc3lQ+(ULx6e#AfX!xJ$ zZim9Zc{>DdXZ59Gcukeh7*I`MgI0K!-+phew~G+PCs-y_@|HBLxE4q%8MRVAM*(>X zSz$`CJyEfT_4fYn(};;4)P-v9&6hi&lLDZVq&R{si?zh&QVtMJX|aRPuP5nNS}#5* zEsi#HHIlN{6E;rax5=Qo{sg|O`?doLfR6P3ndx`Bn6HzhDe^YE&rxEVie$)FnSlg$`IpM5oR(>+ zFK}nm=L)7ZkbDd1lHvRF-#S{3|$cSy>vlM9WEAh}-NN&9WgzY%&W0kg}CZ zOTc1=DvQb+z4=05f%L>Fy+LQ^*XsUeVbe2NRn38yjMwI~4d2%%DvD`7_X}~`3xgU- zc?$u>S#>11Oh|(9*qt5CsN(^o_mW*jmO;7qTlYla3@F-#La`Gp$v zuYRmz3XI-Tx47D^CqZh;JVy!c!-ZH=O{K@sKUD+`Ctl`_>%?ce`^JRJC9}gTM|a{e zrEYHVDks`G-;2hJ5eOqO(aQl+8!6*~k+cqM=}D~onopat;BH5B?RlH}XL4ilxbZU* zrWY)soQT<IBw966f`6}%pW>7U1-(akV1a46Yx}>)EoM!HPJA-@sr1o;rP73e39lXrWf8

    9d>5h<~s^vnq?r%SmGrB~5kVnJj6?p|J$@ zg)aqv6UOeSEu1f}Sp5j`6ymu;{;&8Gp-AnX9H$#dx!m$M*TjwFt9XVt6$YzOxHq4y z7z{f@P1ho1PBYU|hR)K-vUHx?+J93Epa!7M6XQp7q`_wC!BbI7K^@UN2W#{p-`{;Ld{Jx}VL`tUKWACx9rLo# zs^?bv!pyHPQw4_b z>@O7=7j2*LdY%`n!qy`geywy~f9%Awv?sjDzsh;Er&2-dkB+FNo-_1qL`KCbuEh@Qvq(FoYL3N^EaK z1q61@#mJ*Mc9^V{rvK2l=iP1y5rP*2Kh)plA#a^FQoR|TCc&I+&tve(?o&tDj^$iyECa7nq zxhCHyVN9nY*+(N4+T0uC!qyWBFrv*tB^Y{W$naZp$L786Q6ZajFvOvG`yg%VDyenn zcDtpErprEE9s1*Yh5{g6ma(vQ*vFZmPhYg!66Cm5L_E~cXzkOU0(9coHNg4=A3!n@6Y?=%f7CztE#(dSJl1uTKBzH z?cUWdJ6G8SND?0E%jg26h>txR)Tym;G}@`8jn{EsJMZXVjbC&*5LUd=7-}Va+(rd) z;jr6ytToE5r#ObDTo)Y->^;qK_t90+i4%A0DMBb8fBLiG9Yg_9FM+3FxB*zJ6rn=9 z04%UZn)awHRRcZhxo~mdhf49d5gmp*O&^T5d*Km&cV3GvNzI8|xVyqngO8AP%X|Bt zmz2H=H5>rs-9{dFbB>t(F;`B#LKLFxf3-C#1e)^iFrlkZ0x*{imw$2XrPw-9y&X?& zU~yn4XxqvBR{~gIeqKVAKUynQdD`aiq?G`ZAHLnjZ`^=8!dgx15WwT)Qd`PC=i!er&gT zgeOMrCYbT`vvHohw^k3~kF2g%y`U<3JG4fW&qaEfUQuLj#HAqiTBdz|u!1hXpcK)hiHtQxoq(=BJY2HzY->8*M^lr%jPrvHRG`FoLuoVz zUdw#J+Lk83$}@zOD5oNQI&hQnwj!OX=bm!wrbnN>utcXDU`Xx!I!?Pj0?s|>cH<)l z2^SA?T*UlsP6a=4Afoi+{By;@PyW&5TLs@`)Gr`cOLvEltCy|ii?^U<)If{7m_z0V zosgH9pzH?r0sTb`N539O_g+o>w%#wH3(*ty3;zImG2x=!y_z}Hr-Hn3$BDI!KoxZ z`)Dz=ZGUae#PxI>p*QNsawF$nEw5t#r)y&vHZ z?DiqGKTV~E6li?~DP!Mkdo|PZKH@>DX!3k}YGL85#$`Idy9N(fhJRHzIpE6?b$FaO z6qbIVKfrCSFcm%@{2e##pzW3YoifcjN*yts0j6wCUm%E>xbqpCrMQPN$Vp9PBT&k< zGL5aiu*vTtd?IKNdAu4mna7L$vp_zFpRYz*pn}*blZ6dm zB=dA#3U2#2wq3W{j^w99bt9~1Cps^;1U;E5DK5s4e6J4AMmr?qB{&VVCz4dO-UTSx zOFw8~68Mh+0wOGi(oEtKbQ}5!@@WG6L#HHrBZ2h(QeK?|tIs|J%x|wBi=P{x?@sf( zoWDh)n?TYk((&9JajB$3BS9@#;_~#s`r?rmKfOb1qT$nreix$J%*puZdo}HNOBmle za5Q!}V7oWD+dG>Yk0>5JaHmD>k88fgh1p(Rt(BD}`AtcrY0ApSO0jR%;^Ywj*(_`q-adfCD(2-NBZ?-E@5J$6&$`Tvt@e6~7@8Q&+l|#impS5uA{IAGeyy zZKhRo^ zJ+h?$(w&Clm&A<3c%qN#Js(bu8cxPDW9#u2v~C~FnccD0Y>7$R@xEMps(HKs1G9Os zldVJ#X2xGq$?I%v5{!4`W4hoB@q-Q`Y zg0if{DEs{RKm}a_XGc4sPA=L3PjAoq0xcx3i%KAvI04SCxJrvM)|<4{r~w<_mQ%{{}Rq@cD*$&rfbvcY`Cw3XA)D*C*lcbnS3aanesv zPU_b{w}-KSI?@393%3|EY5m#4ck_-H2D!r?Tx+;1A3%7dVokYKts@cKvN_e#sUXf1 z>jOX0+(@%f&ic0e2Rdu{8Z(cPndXSrk$0d0oYUm?l+Nujel~%K!OUY3lb)@tGF%!N z_TVxmoS|}JSKTjE)oUlK)h8;fD(8wcfq0*>Fc3S?jJiRvoIa5f=iRw5=K< z=EPa)wE@~8*|j~ku0h=vE5ulbFXtxlo|hRQx=BQ@H9`eXzyjXY zzB~IRtMj!P%i7axPOaq#)a+j^y=Te$ED_&#h%%7%rRebCa!)MYY4?MvK%Hcf7v5a* zp74-5=L^q(AmPHrSFH}hyfToMhjSkupK$G3h?gZ;n1BX$tf3UEDag#0U zryQGkPS8zY{Ys|CSv-kf%t>`U^@a`T_MpU3#+f3|6Y}&fA{+3+UJ+^9I^%{Ywxrd? zYF5Y0t~*#`Kqmy`Zj9t|)uQO-YQ`|JbVy3P@o{Y_oNDYo-`%cwBpK?6A>7OLbc?kA zzf)z`yzIF78D{g3@St~MVAu2XtB&B~$ECaEhXT@zRo%yJ@cWhUYEhcT)Irg$P5GpkBwJgpthY^lRHiL@Kp{VB!i z!OPi8N!PUg)4|c}oeX_U4f|f9+?~Bz=V#+L*e%qdYY_OwkhSd7L%$M%)MB1~*QO#a z`CV$e@8d`5{`rZ!Oz#w^*tsupmJ+U0T@)VgSiRU&#&sQKcR_EYB^o_$owd3oQ^yB# zw`C+8>@K!bONCF(sFJUzi(RWvFWuQC1Z}S0L~Os~7VDGz+R~zP8^BQgy~Ctt_P$O+rvbv#hr%eRL2rJ~*) z*FMKv)_trVqan?mHM4L3c!hcauvFu+ld`3q6m(QJ|vS~l^^MPBb% z)LCb|P4YFT!wn1dkS!p9!}Y!8T&Q8b)pXZ57uuBbd+rL?Mxk3H%OrV22a}E*KV%CXGS?}5uV;jtPK;uRWSH8 zHIo0{BRzNQe7$oZ%|$J+0nr)2jXrOWIg5jRBuak3g|(uHW&V!ojlZu@q2jgouSU3Jv-?)!w?CtcJGh2 zwn`2=r5nyR;sI3!vI`qI)b7RJHA6!_v!m=|o{4mcCB~2K9k*M3i4G=mjnVN4M0cw* z%3MV~ckC9|9P|x)Hriri-$84dD=3#hXNc|Ne(#CsIazf)gW?3RCVF&UCl^O*eq^*} z*q-;s@%@!cNxHjBNBS4&=l8yWId*5tK$agm8rBJQ+o?pP*(_`JIlaI*H=)PF!Jebz zul@RoqDibR!fp-#j@kA1vD3c(b=2zp)u#c+LAT{-`Fu!r4rz*46Ejb57~L7&LyG@` zL$95-4dJZE*1Qwc8ED!TKPo&2-_C+beCu`HHb@b+nwKWH;U6{zHsUIu{<;v)3!hX? z{Kp(2GTxhucPkz_U?aDu_qDpXaCOHmuRSc5k}ka;>gYzwyXAvC-nHGV%_|UF=h$fF zdQxU7eT$G(K!v#6QI)_XD&xUN7H0^np*?z`U~DXF~z6PTLNn zt|fK9W$^PbfHH#@lya~#0%VC&FNp8;t0h4WT~wu8sG?N0+~Ji|9KW-S)rgb1|#% zY|I}w1J>78@{sU&D8YZu6Ujj}02S*KvSz5x()AMbGK!^*0YqOA9FU+!)cH%?k9mL& zCoZ=f9H)BRDbMyDY?=HMl{6^q60>2UXjlgdNek1T3f&aG% z96j2gqP+Nd4Ssi^g~eFi|7QrGLd!|Qz+ye!^$RFsv`r~+`y&hj{L^MLG!z3A5!6S0M}1vedn0FEXCr%E zTYY;+U3(it3x|&e04rAqJ4=A6k)^G!p}wP$iH*H0y_vyBWhDeCn70``n&eL(Cl@3r zXxMESD5yUc2Mf}sL|gdH$G{6g(l4)Qd#Iu|rtw9?jUsL6*wJe4 zGM1O`O_Aa`FXD6^J$}L|s(9Et=d3SZYkLJg8FXJ#2GWMP=gZdXO7R*rp2&ZRxIZYd z3cV;Qjh>6JURpf&Jon~}SA^%R-sOqtxwp2sMY${_`uF|8TeO$I4|J==%=>Qz~IU|tG=V&Eadp$rM`&;)4WdS6-6`oitu zyQ`dgKTyea%)^Zja>wkz2FwLyJMY!Bq0U8T-={hqISF6-iVq+s*?yX$Et)47>nioagmV(;- zD%KCUy+YcgQv@f?`y+>VN!@<0*dysR7hnaNn@IVYtcJQSNh&wbyOmV8E8h$+W-Y6B z&6ES?XdYSu3@<6vlGGy)AQd7v=z>D^H`BoQ5tx78T*@PK|Om(X5!9A2qEn_sj)OnNI$w z7~^iDT4{8<8t&;Xa2+wflx$@55Ny3YJ1U?i0_EYS(-}vs7F#m{rLPimqcf{csrt2X8c^%lsls6X(w-zi?xD*Vp%jdw(A@pY+X|D z*FaT{p^(qGf;%K#Q(aFDFFP6<*AJ1|DW_=SAsK7qWpo8gwifxap2v;d1Zs2Mg|2Hw zHTb$D4hj?r!u^X`dc&LV-`zJKKY-3Wr|WaBwpyhQbth$&nGN^$)MY;(Ff71 zb=la#;(6xBC05%q=11P6jE_lNsgFYu&LoWANAn)FrXTumGF}5g3u%v#v8~5GVdinL zHP@j{TpYonYUkK}t$oCgiMr$WAe~7EQ}=ckXE0f+-JZ{Ju9rLq=KWr0%r*DuTTRx_ z@W<|1jB#LNF5nV%szk9Rm+=xHRnfn%Q}LWLlM!Um;S%J<$C2aC`q^X?_+>5l+G!2_ zx+}BX{xtts=wR($KbQ=1FMz1hr`WG(Yr%c)7G13Rw`mkAFYsATB$ zw9{~-KFh(#q17eCLx@9n@#$1dO`;sC)hwS)+SB6(nfq8s5SD0D36n89F_&+9dlfVZ zJ7JcF#B(6Lr=6z@RgM8oO$J0XDA^l4;LN#X;$a5LL#HkvG=LT)p z7U%cOgLd|N+jMaLb>IK>nge)NgSG|>g0_<_2+ykh+|CZ@VEf{Ov}EZA(OF~^0bV}sJ1F|q z)n&35qa6dN%ggKA%aQ!^5iUR~v!whW4TY6U&c#6Y!~3?jg*&Zdw*$q5cpO(Y&KQ$5 zd3MF{ZR6R#h66}exw=_$wF)DD%&B2 z+1&Dq1Aw+00Hm)oo)g3qKbqZ#=G_c~uWo*+CsF@Ez6;RSSE`uo<-^*{hDH*G`m}uopg-=dB{7M*YOYfJ;zi1Ob)9X*^H!%`# zT|c+SYdJr6Sb4~LbFe9rF)=r@U~0nxKUeR*RvuI7i}t->WOspZh`uBR0MsFB+&lAf zm^wF~LTC{9<*KeYT}>xEAJr?s+X}z@^y}s_(-qu5Iu8DmTC;y^tfT(aaRex!pa6fR zP!@3B4Q!kLbBU z=I!GsUcO3+j`ny-+|qvCu8D=QWz1=p=e@t3k|%F&>=rOF^^of4@py*&AR45P)gU*> z;uMehS41v>6^Oc5bFrdgwCm}vxo4k3mDY2vVj z{fIyTyRD7SqOXo5*@W|LQ5r5vLv!HszD678ws0iEP3;mG##AW^j_7X+2G99=`|Qpn z15k{y+8q>D(Wj?AeI<+fLB|C%BSGSl(@f!_j$|3*GgZlFrNqU%a;;UML96sGUrFhE zEBrsVAap8=6X2-@@5rJ4zv%7%)QHpEvVSzV zdfk*;P`Od_W}J2vf#sl6-xF00;WRcD*}OsjS?(19h!X?lwABxK>sqdckH&buT1!4T#2-IQ-ukI`-xscJ?CX)~kH=K}?aF>RJgIswo;;DT(Q#FsF%lADSP(;SF`f zb-*0JhCnf;nQbEVn;JiZ`q`5Z|8NpNeZil-#a|*36C-OQdwok?OB)kAn2C9?jNbC_9M+k7<8HM9O`3UT7#W)4YkKz1b#7RZetioXut~V5oLGQ?|sdmOaEvTZx zaNT!7%gV6dzJk2r0gKN8Bxj5DxBw)H8J?JdVnY^-EH#ytQ}WY~X|8D=AXLWnE2)hL zcwk$uIf%O->!!Tz6)SecwM&18AqBV;-KtXFYo-{8 z3hvM4-kzDTen(@O`*y$z_c^?=i1(Vw69b^kaxrW>v+-E>(5QZH0a@GmrLLoIKdZW! z%1Ltq__c=LwJaYevwFFxC2$e;#Ds+_^ZqLjsS@X?CW)rUQkV?|xHVA-O^Ip3=j zHRQXh*p53uz%{0(Q!z7#*;=mwL%d1na}Z|qapEhW5o7tCC;4gWVei-OyCqOK?GI1E zfR&QYKuG_>hVHMxrWFPFw=_MjvD)mP|3|_XJVO14S^PBe^G-pnrl0-eX*kXQmFbE9 zw|P_it6MsVG3Qil=0*n;E&dkjk=rje7_{$-S2 zD;d6LNXnQBT$GQ%Uw{lGI`Vn;A{?0A`ND~hf>VX1xfm~LjC#>#iWN6}JhbcU5?5k1 z9bNdzVYKR+{1$t}s2q;t0q||>=Tj54y5Y_oCXxaF>Sdo8s?*Q!tY|`7#zmF7y+1eL zU0;9ni07x(G7#RRC^)2!iA@+pTFS+miKn1OUk#JaWh0Lgqr?EU|A|n4Iu32b$hUAm zwKOFZ)Q7*~IBe~0T+ECdo|0T<&QCt-Z$SObU;R5VJtb@2%7+Da1POc0Qp5cskhl81 zfS$%tnRT@jvnJMu1zR%`xuRAcu-r=W9k_!~_g*GCn2o=T5Pki&MT!AnLuF$eSE%y( zQ#3E#QHU-Ul)pZT2&<65a`do70FWhxaQW+&#hBB))1I?SsBMJfMeb##tGcmA_aw>g zZ8_11R}~>ac3cK^hffG2{nxY~@o7?%v_aIw{&x^p@$fC7Jg1Zed^tnvE5f3)*P<}W?4*H{PTh4!Fm|Fb!kj?9R7dY9HheYwS ze9tiZc5KjebDMT?pNHFUTkd>DYrFg7>5y%g$$xaopMcwOxYPiD0{-Nw|5C=##L?`d zu91t8p_8N0$N%i4!4j|Z(V&icI*H(mVSmWlhH2?0z#v()P!Hna|%*x7o#>RuglN&vj;M|I^a`RIZfjCKf^RoAIhh)E{PN zN#CMGWIWAS@$=^YTpE1cAYeAGhicFfYut>lvHa$U^>`ychFyGMr!I2BexnkQ{$^_@ zmpkG6%JhuIR{G%h<>KnWubx7F-2G8FG2Q91IHN2|mv!v=M1IX4@MHR(c{TyUbsf00 z=RToxKX5f=K$}(jaAOX#a(}1sfv~KyvFy4$|IZinw7v|gMyEahdGTW;&wu&t*G(QD z&3`oUPbE~Gt==5{w3pJ;oxc4mHs$1CWdGlM|37FUL*pa;E5Jh_BQ-Dk2kKYg8o#VJ zykI{BQa!AJB0Bp1;2}x69y-Y|fEXP;{SZJx|8tdQVQY8)aPyHaUJsW}sX^oF`08r^ z9hZnwvtMtAbt#pvN>HFlsYz)%D9A7&BO*uA+tAjw1{5h76lfS!o{=77VOm-c8fXzo z+x;?Msvns-*LvBn?%R(9bimi>`#<#5-!kDpT`gQ2AG0Vd6cjS`U%crjNAjPeDh){+ zLS-x-#tSCK!3<|iRwZnO-f(47XasU{M{b7$Wc(qv(;(Z|j(eY}jVO6rU4C@a^Wln> z8n>Y8r#iO)^jZMWlydZ2;Rjs#5?C~1vK2odSGVAF<_DB+H;S)HR-(-t$><{zbt-!%_ez6m}*Hxecwixcn6HT=atic$*{47*gSRuxO#cX zQ{xgd@hSQJ{j2ud-r4-Ri$h6}KD}Tb7@oj1WAS~9i-wnDWb?B^DU@io1zAHCt>G5D zGm!{X_Xy1QUpcM~nr|8#y4>tiq^RURX*|7AhEn#2K8FOgD?uAYr`T#6-9UsIx+4M( zs++n^H{3Q<-&YfHuY@qF(r2@aH6Yk2ehBsL&YPa2&*yBCZmy$&1bA(Bq>?S?FW(E9 zS753M#~<4!e6}YN=YAj(>`F+Nj!x2%(|p%+PJn=*HliJ#bqvV`jY08^@vwg~DL>_C^t~jXJ(!cbqf>sq!Agmv(v9Fz zl;XY}pzodMQ>?^~O(NptfLZuf9z!TAfW%QE_IX*2LW!V*gsG33#<-Jdo?Q7P)WaQ~ zp1P=ksK2HWV{HwKl%hU@|?4`S(e@ zrc1HQ?<(P@yt*n1DEfd|>KdQRR34AeJ#?RKxZqUK2k8RPSmOyJ^r}5%VrlW#x)|o& z7-&CVUe*i~BEXLfIKtPcf8@|N&$d9B2>@-0Ttl@l#s!lij`U9o_?%5seUl!L;1`;&j>%5W&`#jcu(P<<#g3#p|H zE@Xk01I?Nek-JJVYgi$UMv>VZi85w;DA8GO;w9(-R- z;TI#JuQ?Lu{67g&g~j4(*|Yx@CUCIScQ(?sH?q`s{TXOJ#b?Gg|HS$KF7-73 zU!1>5;UgAufJ@h~NDIqJnCuSiE==wZl6w{y7q`&l;#c;99I} z_V~p5JTeXq_SE&H12;zh!umPL1&xmlbR=H;MC~6fKosD*P??OwUo-tjxKDh2J+Uxw zpdQt0nVlFfTtVmrj1{`;Hyi`N^m)+9s9|tV1{mS~Kbh|&# zmBwQO3hfl}T9Ddu*CmXvkLrlu>*@5^n&6!;gebe8M~vyFYrHMGl!KQWc@EKjQ?Q$pTaJ$5qa*vgdN9UX=_I_DsW}M;+?ak1wHw|}JqbLWSkCylwgk%q+4cMSZKhqF zUj-82>*DRuEl_uAs6MaXILTFBq+b3~M7-UTB-!hOUel%0LM_3axah$MMp)Ni8t0>Z zw$~BwBF`_?ln6IorsHnxKqgX6E!U?89GjRewGM@GctO%Eo193GM~a>$vjyPPrwJz| zcGi|{LAJIYXhqv1cWgX2O{&Vj)ONH;+)?cY;RW;>Mf}X0{BNbCMfV>~{Zs3(n<;-p zdot@oaww?3WY+&^YDas0YX>t&GaKvwm{FeQlxgEbgIfkoq2l-Pha0@fWl`e8Y)5F# z5J!I-GAgGomO1UiOkw@CcZUr{R8O7IKs}N|+9l|bc7Ntrj4^5Omc|(aRqVMfqUngR zU>cdii~Le>ubC?F3OQHV;JqpF-$I(8ZB-16pasrPg))+tTzEH;eP}gABBe1qrXD+W0Re~WlP8^UA@4Q@8skj>q^_YTTD^9la+PWm`=$=0{9 zT&6^|xuNA$oGlNcnJexLoGOGq5i*q-4YTsaHt1xj%*nlymp%6vm$P|Yw{^pi_7A&r zxKk5*F#JhIxiF{Bsj{#7sQ=)Yo25sr>(&gqNef zfu+&k6JGx@8w{3t#*YSfWFuR{`2hRgJ0RRNgXQXlfax2l7fMuA$%>OM2=n+CL7lCU zYENYrEzMtU`bMPK{h1q8lA7tDf!D--wPJs4J%BD%8wL@18eWTKq9eL2Pzk%IbibHE zRo8|adamHB3QRtkADX}m@~1^Ns1unijQDfgGt0uI%Y8jKLoQvc`~@@ONlsCkLw|dKaO}ozJ9rY_okg&FeSn3O8ThZ`z@!J?A)}P3Z`1N{A|$!8bm4h}B)FjBW9w~)V*eUWjc*kJ@ui&5w@gPpXhgMK zjC;8xis>JWFsOE~Bhd_s@m&0FX)a~1X33R^)#;1cuca@7*Vfe}KBlu8&%s3+HDesL zk}6ZTpz1+qTdVLG0En)x5&J!1ad1Bo{k@;~p)vHj5G25My_|yg#K}A5Zo_mrDzp?oQTKP-JNCmI=s62~>$Cj#-@WJug|;3W z=W+E)ZNvPrj!a#a@!Ecbd^vtq>-BPOb?h{KaVcBRx`KmT3eVrLa)`Nr7(G{=(W`)P zGI_OB-QvZ0zZY+VIns1#bP@s)n_Cp>`Hcb5piUz>hkntBNbkIdfL6NvB8|71<@pg8 znpkqOXwV+BxE@{ksGwH$$S3vY-u`~F;-!x*54q@78+CNWOO(}Y;nkt;FgWQ@j|JBF z!0hZJz1%q436%u}c;FW!%6+@-y)Kn&i^F|=>Cc%c*+AjjT`$%D*n~~kXM_3 z5&`m9aLX}?0~FmXuPmwiSz4=Dsw|>Rj-Z9e{jJpy=rpaiV5W0$3S50X1K*uI3yn(! zph5bL4KRHD-^kzb)C8u~vc|(GK9*12I-&K2R-hu9-rFIUB<}_WtJ^5+6Y;@40lleu5_eNva&0)=Bb)$`TwxNk^Du`Qg$vwOp z^`B4GY%#L_5Sl+v;`xZ{5PWCM$PKwq{XHTKb!SqSM@9Ul->d=XcMlnb2%7$marUzultf}PGRTWth<^)j=Mk_0&Ey>Ma>UodpjHXGk z2W0&vn>PFejV<&aluki$(-RA;w~RcDA&;GZBA+by61UGEhllo<0>5g)g`8vI!l}{y z)y2XMq;*O7Z_hCwbr7wF2w4gH@=KSD|E?z9nA)X=<#qd74~pikU}&4RZ|oB+~B!)=1huV8D{2p zvZlc@#8H*9pf4e~M9|NPhr=d`j=3Wy2=U96e7=1{e_n@-EC~nC@Iv*II#i*dmAjBf zlCEVS?p#mD;Isi_`7{chb2hfFDE8H#Na3eB+pgz)aDHm>pQ&5gzhcg|mQGItPyRc8 z`yZ|OgUp=V)6fBcjBg}bXcoy=j9#TLY2N;rw%$qtMOe!GK{N_oDc*!N@OsDSYKe@t za3bwchBub0de08LLonJQCXKQWi{(Wot`GG~_`2;s8r~R|Pnev_&xjcU!eq@na;c2P z6=P(yLA>Kx=MtBIOQR9pahJ`ceanmKnABhFv^jaS#QxD$eo-5;C=xSkv!3I-U3o+I zi$Qp+%56QIj};vYTx|*CFQ}vsLzcP zOMw~3Z#c@Zj~zTbPKtJaxuU0ORKwdieufD7)&EJ+?=Ao7LDA3P?aSl4OuRfOsG~U8 zzm~H7BYXK@kFS3|{-ApL{POsEpIh7Jm8kt{ud_iabeG*BJ=`Hmsx*sWE0egqMv+SR zkk%MS88w&NeHjw!9@a z+by#S8#i3|nx7YDsxNUKCa`kwnqhKY@kBnO{x)~y-J(uWe0K@p-Mdt?i)E$q(5E+S z_%Jsbr%TPR4PfThFL_Lx$5@wxhOJ`mH+{XzfVSW%NYyOrgo=B~wfKJRoJZZ#v=vTS z34=V(z0xPJa#s7pmmYVgYb)#~zIaHCu{-2o#Q(Hb{*(S8-XtHR%)74poUdZUa{-t5>>3Jy$s-D&n=m=o$& z31lnY+zl^4O<`yg0S}89`u>n{rmm8fo~j{ZVRj^2V8EB}O5qsrFRPhFNA~+>EXXnS z(w9hH#LpUIe;9x4lULywISl70k@u7phwZytA1rm4G5elcBi^lw2=0e4#! zmq4Pa=SRo^T;oG$D?*IjIvGoHml_M3*5ENu6@zx(2}?Z!+m04$DuIr#$Z=JA0=Dll zx0jM%u7h##24i>hxSjGi%cLj6_Mu>5Nt06&uj0gexkoJyVWMCuv!mZ$3uhsoXfvN> z&{(KH-+5n%BtZ<(6y_zM$+}eSu7_x^Y%O4)Y+y%=HZ`E!G%R*!@lNqA(UcWApvkVv z#ba5-X}oND$w#Kce||>wATOJX04ex}a<+YX9G6?dHEUsJb{+Q^=XL{c-!!v_Gto9v zd1|_|)WFCzJ2$M0%I$`3?_z(S(^Lt?-jHMg0MTr=ZFYc3)&Bi)C@JY;0EO3-;9Ub;)8?k}>a zYZomoHn?9}TNyeuHp%OvGS3`T01596svU+GX-}vo)Iu5bL(;e=AhcP2DCR)OqK@`L z?ozFT$t(B^vKpZUSwT;egTb3!WBPnGteLp2Q@ zo)@GL3ilOVm~>+M1)Fjlyl%LGr$zD*Qo_U~)ohLcq?4-oWWx z;(#8}rh$GUCn>Dz8bMQAbOemjs$d#|hONAiQs`#X7_gcq=gtmr{ML;VLYLd!EYoya zBH1eACEERAc0phpx^VsS3*YwmmBDgqvw=4@?7=2)k(k|_#o-}qowPlU=&{#Vdjphr zPPua=P~kXaTxga>9FE9I!_NVUZLwc(_}BEn5hTx`U=)GQGRS*kj5J?0iRIdMn+d{3 z4$6ssEV<27_SRZ2DzMc@&A(W+s=7IH^=I3-a=qQ1o*ZI|SMgPAKdO4dQ7HKbYJ^NE ztJyb}XDq{SOD+#`{pgh) z0wfjI;I0%=8d$bq*hez9VnF8s#_THMbM*z$4;Z#_$je$XTs^CR>!;vF5^OB z3WHq3voW4}p5lKaS35RHz~BGSSrIgnnmB!(g#ol?_&8kP)q=5gzE>`Rl_fETr7)&O z+4ydyJLOtOZIa_Lz1*QK?H4e2(ADY54Gip>qC0bT-%A6T0K#|&xI)Cnz&z-=SVWX&F#WkX5 zzE3l%kXjzEW~%p!pd5`0iS8hzS1R`S&GmE@Tpab#1s2Ylo{c0`%V!uVSYs12mv9PL zDI3DIo>{t;XwaQVi7sy6RL6-^nTIyrFRPCxeN!7#xArz$s(wQeW+IM4($#2yTKPA3 zvlz!|JzhEYksCrDKr^$R(*77Vo%VF>XLG@vHQ2kAD%$P_D9ilJx%d|~rA|0UEX9f~ zNWhjI=7{r{@6pJ)SJxzIF`?smx6)*H@*@_?6qgK~$Ty$t1v)Cq+ObR26R{YNl=fby zMTyeHAwuug6$M5ZTZRqrc0|2xKmC!B`5Y}k?{tIu?zo_=rUQlw0k8I`^@SkDws2%H zI_$#hn-8~pP>QUR2-bIIFv!o*u+Z%t`2)_>lJPt|m#SZ+w+BnBe|#q5*6J{}zU&HD zOzkAMw)Q5b$K{PaN(?@*Mqqu^TT})`-ovFNkYXS#r*)^R3yU#b*bCMSkFPrKSWg1~ zlOEG1LdUTui`}$9B1oMacd~sGzu!0b+e~SQqpda^EC=5VQ`F)t6?o0tij0bTt8t0* z^CoKRv%YnCf(Tp|W+qiiwbP0=KSu$TrdBrC&~|i@P~-)vUZOK}+>LteSqd&C%p~u1 zs4&YI*5GzQb)sGBap*7J58hdq?w5KK=~dGiCd19gbFEVd$h}Q+5%fyofri_Tmr2@K z*tx3OotN~H$iXIq8 z%|YX?$XwUC9aw17y{KX^v8~@cxRt0}1CLg{nsa;n;auFh&wx2YPA-W=J~wQX*eag* zOwFU}BYKR;{?kV{Bi}+?nF2F~Bs^vvGW65h;RON?d0z!;dFvTik)0x%?6P#Gr_`Q0 zd6m5{ozl}&J(-(|qde8P8cY{aFqZQ`{048E?d25w`TW!KF{{M3!n09cHI#n)(w=cX zWwfhBmYLiln@NH6Gmr0jW99;qiH43OV#*p7$$ z=7z=LEEx6pS-^4*SwMk!Dw``uVk5i_^4RfEkd{H3R0|i9M(~)Ug8k|c=q&|>g{({ zgJ19RdRK_)#w$81&)t^6bL=S5?@?)xgi+wVS8^w+%&V&>_Z;fnYfnCxi=?nmp2-_W zL{!4$_ReyMi9dYMHfPFvB~BuI^8)rf?uOuv4^gZxN0ys@18%3gegoKft?|xHJMHqu zNHCDOmW2rC&gSU)<(HQ5*Zobg#|ZgX-`UzYAKNv3R|s{GD={E0;)V4ZsB>YSS}qqi zHP4jI&)tf$OV6icj7z3mrj^ur=Y(9LkTB0E)wKAdYq7J%Sx4^NTHbAqC*cViH%7eK z!^NSNP2&fem(N)NUyzKb%^{aeh1mBi5IfZg(JcwR>`b!A8vgh^FGw_Dj>Z7YD|M*x;XH658%<|CFM{IdH? z8GNb*KWxe?9R&L56lBP_if)~x>1(+l0_j+G63raJ^vIU@F8>iVRF)I?@{`2RqoSA+h4-L)9NP-r5q$G|v z10+X5+HJ5HSe->kxrK9wBRCN8thlonmWfh1e#V;eDq8$ z4`klKjDK&)a6uFt-WP1heO(LteVmj|)*cxu@?#K}*A#eY7kJEBd{iJUI*ES{BeI0T zi=4Rq60eKuJ?zJKGq{E?xs4mz57mSW0fk$vt!^@Q8*(?TO{@k|xQCF{R|x?&}l5qpe(aeC#-r(i2+RgK&(dxfR{-K(0y>tmO0xxBIm9NptgP zRI!bZ$dq+o-pM*(p^`ee-3!J>Ya$MQp^VEiKkCJhGWsa76VvP$CH z&L8{YB>H9GvWwWJza2R2(TfD!Z-SZ{6lLur=;$TUQtBYumZsO~-I+PZ(HTnDfvlIE zlHgZJT=$XsHHW&r;LE<539Di38=N12FRdc*L$tKwF*J9WbZMh(>*-8$@UkJ$O)X0~ zVb#pXh3VjKi zz4i?^Pc2NJBUM7yYh?`$_S`yPLVgT0rHkfTN)1Abyq4y zCUhGrik2rgXhlS`HYWi#aujjX(ss2H%fn!wP)Jg+kk;RAW$Vt`lja9ioVTftC;-N* zpfnnc3oIU-SsdOdvp0)nN7*^i%O;$HLp(AK3PNQwjsHSQ75c1m~IBK*gy2Rptl#kSVo@NI;D)V4qRN` z$-Y5#NHh;~c?08IyKO%7VZAvXSd9#rg2aC`ZQ$;^Q9a- zy=oi|w`nAIO#=>l34VBf@AuUlP2X@i*%nPB6XPwNQDJ2JLzFFD*fJ7*?4#8${_!&S z>S_u8{!fee(N;Qaom<)!XN=-j56XPD*md@#G4f{YduRt?PrOI-pc`Wpo3j$6W7;>F zGa-r4kiq8&pH%6w+7?3RUNJ2c?W$ngnB=(?d(z->3dccjW%Zjhf8Ktf8av__ZiuqakEfX4%&~~osZiQ15ug5qkz925`PmnOiFm`Iee(bzjcnO zj8+>~$p=rG?LLqU^mhVXr>%84Qyd}|pijG<-Da=1-|F?%)}FUs^yv{~`iK+h^M(~Z z*buhsQw||AMgM+W(eI*e_4PbIH)x&dL&{Dc3Q`HMPIpLfvS;0i49`O`A`^0J5vu$c zrtEx%eML_Ia$17~DaIZ6HbAvHZJ4xT=_>XW^K|pF?&d-9}{K%z4U#^#R`L);NxyZMCZi_^jLP8N}svj{;mz^?2-ZLk{xg2{LqMe=#XBq|M$#np*ol5dll&`RbtJ1apVH~-OrQ#@vH&3|3Q45!dOd}? z%_kwsf1b#mVT8d4#hWX{Oam0fJ2B0n68!CXvpJAC<-)MtHF0nE{insBq_1cDtsS_3)gcus^@Ps7bDhFud9m6PFQ;jkt?pP zPBQ@ssz13cwC1OMo)T z0+h*+9!*Zj{Z41U*=UpRCtVO~;Ej>1fB&YJNiLTZpE+Q%tfS8;{PPl(AC|0BxJ6e4F_{kT^o?Cvl>xBI3^9X$4=vK$zo@a7h|$!~*= z*2skkAgBREv>G@0Zz`oA?g&o#7zKn!|E@%U#Y@!Kl?;AqHE_)XUTPR@E6|$97V8J= zyo42A$MTr)lD|+4PX5S1+E4!aZOg%*Hs?P8{waK9PDoZKEFQ?iYnfn0#h0y1~V0tH)|P~I7~Jw=fWJER!0-iRfsGRRRAUr zGQ5?95te}rVe;Uz&oRs_g)ze zZ2}rzDIff5oN(4}K=ET4+e8TJ{jxG~M4QlwK-LaRR9WI9XMhfn?*lpf63rk0g~f<& z1~JJJAJE(R;NutoQ=upP?FiKsCxC;XL*03v29I^IM$&~HXeMjGpH+O00Ub{agM4P` zAxJD#u`n6jW|v4OHeyxDO<7g20V_xb;{o*;u*!@fuf%oGE=M^%%o~I%mSn?iDqWGyg%k+E}{KMvUGCBgLSjVdWv*qF{ zY2OP*6cNC(|I60`TbRfszsHv~0nhcl;A(Q$(4fPhm@tMK0G>){ETWe6A40}kBIrXAP-C$5>RWtk!NS zfdv^`MXSOV2^YTI`M4+?@c<+Xtf(UKMnHbl?BWtN6&iyG0(AGF+ikY{?1*^+JRdl~ z{=|Rjf=*1C&*1NhgLq#l*;j2|}y;+Q7$(9&a z%hU2wGa5nCXtk}FnpeJLH*r& zK5R(xmjO!<1i|{0A^X!GhT-Mg{;}a70}^0(`7vO?3m|{WUq0u=awFo#-I&bkta?nK zyLj)7IB_E4#EBCp&cX-A*5Vehf(%rGrQ2P+@5eFXA$wD=ZfH^ps}D{r(MDMc1fDY|4gCH6U-@njO7id!%I!-S`aYw!@}DeJZwuAi%&Ipo1>GFI zo5E+IbXzFh7D~5;((OYj-Qsm_$tt%QG;UcHZfW|qtm?Mx+O}DgZCP|}`BZJQYud6Y z+Vbn!a;w?Wv~1~0wlp2vl~inV(y%QQYzqZjih?b#e(g6}y|&PhL~B( zD1&zD?LHPwD#b?^1Sr^H0B_?H9QipylrfNZEG$s_rru;P;S{zD^z|G>#KtdnUu_-j z!@049ziZ!Y*A6L~Chz47==V;2>&5;-qgmf>;Dqhe>3dc0(WViivSgvSsfU^5z5{lF z>dHn%PYbP$!)8eG>>de?NK(!5ds6hN^tXI(4RJyeW4~5eP%?sz0})9M9YUh7!Xx6D zsUDOhR~DKX%-Cy1{gf#tlPmFXw05@1#5&NEjrH}_bt~^=78HMP6ZtX^7hQH~m~`Za z{cg)uhNS^{D(1wZ*v(8RE;H;{nkEc@+3*dAnP#|pH^UG!k}fn>WGKrdK2a{MZ8XTK zP#G-C^3#@-RL1XnWldb+FT#DsXinmwZQ+dlN+hg?KhlPox*09UF6H{-?Wuh()Txv- zFeEyfaHt-=ch-Xcwg^Sewd%rW~NNdD_iBd1{CPs>3;)SLGWq-^8;?yyEpe#)cPw}{I zbEj9EnhXMx=k-KsSC?h@ycv_Bk1QWAYXH)unF)v&L7SW<0vR1C#b}nR{07~KVptwM zZcc}Ul$K@%%;d!M7-rq&0ht`Vh{})Y>l**Gwap1oC{be9c$i09rQX$zow&vqb-vDp zpOuFsvk#6bjjahsP)T^ma91^SD)+=WnE=?@7OL;8E>%0x>YCCgzB+1sqE&@1$XPAa z?HKi(s-IW@nzknvim4HDf>PQK1Bk8@iLa(BSEAJ|)r+R!;4pqIPK_}fjPt_WdJC}% zB_$g<&yl6X@*7%Yh(*Fu!jG~tI#GBH0XDSeZCs>9JDh4rY`#0ei@i}mG zgGu+`c$rHZBuz$35s_lSx#V6hE~PqqUHmjQmWr@!;0HT0Rp5gBaG<$+$=g!7$7p=I z1hCN9fy@{b*5W5r7*w`z2;7z4C%%eS7H_-(O1%6g2$=RU;(UP1b%{3Rc;c4fbwSy6pM+T#V8Y(^+IW5w z=e82#B(Rj_;71;M5*W-549jRV9**F}BqkxxmHi&IMZhQ2;Q;BhhLIg8tUW5u!}28_ zI>_HZd`qF+^6+t`{ICMUMRqOfD6@UAw^wgAYdhTBMVwdAeVDyEsyA!&I&vP_KcM&W zpn>^E_O_b!ZF*}QCqUk+ZBeEYhCsu{qvr*VuP)2g_ZzjNCcl}ZasGO1_qf(zg=z`? zK8IeB;K?qoJ*<{1E2@i1)PixLH?{;-Q7<*QsH$EHX@^P~a*TRo3MTYg7c#;ZmiSOv zV!tj$yUXXo=+esiT6yiNU8;PbE-kS?4m+kMWo4th@~P0>3eeq2du-8NweqmMy83C+ zU3C=`n}1AnNB@s_-LB^Gy8VBCYoWVd=&l#K>xJ$*QFpy`jjHP<2JCq*it7+cM!j`d zA&=TRtTl_)I;@>ZX&n}yNoQ>h$(2>s1aFBH)=LY0^+I3mSj?oZUNRMmSJPH=WwoKI zHsQ~xskV^Jp{O=%=G9X>YUfZ>J8EapQd2Tr$j?f46dmG=5zPWSz_Fue(0fp5oI>$JpwAJhgMv^JM2C|cU z&42|Ih~K=|uZbF8d+8C=ei;n{DKdx;*mOYnWB40LqLCduk^?cph`^k_4v_sX#r|8xciuS}5yo*cikxQp__3R9k zMFFnDGMo=M!&*_v*G3DkV@u|W@aXEtYkbVw3s)yxn8_}@R?yu&xN_XCxl#SCTepAu z--xC8=gp(xZTtD|?b~0Hxt>&mbMsFpl{(uhv*QV=8Jb3kSkOpe4TH0#~rfYNvXk+L?djNynC{PJ0u<`pSM^5Zrj z6(9uy?nN9gEHL&*BwrJa$jG3)H#m$mBf~-e62wQp8&1nd3NzgHEJT$KI0i#w&s@sTp}fdGU6Lf9QDXY!g^SyFfA@gPalb9YFK~ zyU1atzW=RmUXi%uHKcL!jKL}7$gSZn#(9Bkf+hU@;A%ccE{ufsF?h)1Wmq`=cr@+> z{xZeo7_$-uwq$K@V@@3i^QLdiU<% zx@|A65yqLiZ9T>>uKl^K_bhAZUnlQ6ge;Rw=mYLP)bNkDc0}_ZbnQI8iEC&6)OhRe zUp>6_O5`iyw=}KbaxffRUbMO=ccQOu|K!f?hqo|GAIg6xrjBi6joh#4o2a6HWB>5a zM5SCh`JN1ieI?vdTm#+SM>NBuKT z$(2e*eJ!3^okacmK72+qz=Qo(WBX-oZ>vmY8ZuiKufabF@tq^5H4FFwzc{WL=2LhP z^Bg0ohywu4*e1g;6k(V!4woY&vWc0~7KbGNr@1At)Zti2l1Y^bRGd%rCY=Adz?M7yVVCrUHWNi~R5lyRhZQ~%;lY1QW5~+i+-5z}B zO++Ladq@NjU=vTnPn>$aIgJw>wgp>(0(hy)o@mG&)e!CuTCHLXFR$djBMDJ00$PVh z7|W=}EVwk*R%3w5H?{5Krd=4)B+&qRd{l3K3+;V<@N-z# zU)O7|vW%_RE}X>#+GO#w)sPF|Gd}7Gu;r@D0-HrAH|(o1z3O#jg0(O4Q>+z|dJbb_ z*o?gSoK^X3;N(7K+q(yi$YfdOb}%QRGTC4n@Ng9I1(_@q?8bg?lcBYL;7PLusl&}S zhiWN{xF*5$;-WpiOpH8R!2d3z_deokSq3>#OoAi<)TT>5#IKZv3)VmkG?!$TR3TNJ zZj`Ch{K{iA>~ZBj-sMO)6n-zkJ)gLW-ok>U-{ZhPo%TsHPK}aUn%x@(_f)g^?OxQ1 z1FgF8OAm@-@J)1jfwu2yp<-1@uA1kPv|D{G#iN2IdMMqpF>KUhy3wFuxc%N6(l-kh z-PY0OF>d9HM9}&~#HC7ndGJax+eVy#PlEG~1e-1pQ~Bta@!VR}azwEH!C_Ow-veDb z1o0mj(9$IOJ`SJt^h{gZz#C{WMTFjh7ex+N;wZ?K@SNx3;!7{-^poqT!J$gN@^DS8 zA;BJAkAl}BLF9vKo>d-|*B`18OHjlcR+IQ=3;2hlyRoFmt5NjHE2OuNVj~i+WygeLL!yf|6Bu-qQbpsOW(5`nV}_QK zHo#W|BTWEvg2^6p`X4M#)Qc1K;za%9pQslH>cxS2aiCrtsOjG6r!S>W{da|5RckcH z^dWwihUAX>HAb8)O5OVRBw`!ECAYSlKxsIb$Ia)D*x?25pwMwjRgQ?%{crkaG@58D;p3DM$wx zTBA+oZ`9m9d)X#~*i-|mJBZ5h@DBDpHC9AjDd1qfy&W2`5DiKFIIzx|VsRxx4p&+% z80V5pD4lJ1xIIydF6jS@W+CFbAY3+_K*SnS_M1HR3bjj-cZ7)`lQ@KddCH`^h`vV? z#IBFYNyq`Zw8TWP9Lj*wosNAhaRIc^zeF=ksrccoVr$6#ho`5kdkH+GhZd5TGKxB3 z-SYz#@+E%u9GH>j1{%k(+{*rzkAtvpMMLNwRzl;z$&hdR)R;qC#A_B3R=ia3@R9_N zP!$lj4V%{k9`9y}@%Si2>=gBf+sF>3O*Bs}eMTciE-_`CWp4NgT_A=~W(}V@fJ+7c z?eTOxm-=171 z9(D6z5o1)StS{M0rMkXc*;rn!VAiF|#*+#rxF<%NtO&}EMS@XhHk-;!htb7`wAhg5 zy&?VN_7~;bLYVq<-Cp}_06S8z6Wq}sP;d&Q;DkPZu+V5-;}wE5K&LHKhN$X_sm{T`3h7Jk&=n7Uo*Kpcma=FZOEtO`rm)1c|QUSod`qNRvd10MzdAlaitgJUIMNbV7`$Fhz(3hf+Gw*FqxA7Kfh0)Y6T0jW2@I0`WHF}&%eEU z7C73gcradx5EZOg05;!+glxoZL-QWp;L)AthTV3TU8KJo7BXUaKkNA zw#Zhm6^KX6f(zuE>~+Wd9-Ys0xvZbhUI^ti~?I+?;*XxthNhke+P@Ir4goB$`lLV7v; z)(U!m;)h@Q?O?(sd>EZz;`{)6+@uF5r%}H>2*MKIchEzaH`Nk*k@^_)+izi15y-g@ z^-o~gYF`65hfUsN`kme>3PYpGdF)pVHDrDiq0Cww0kcE+JsxZvLt?W5qgBjp1jX(%~RPCryI!gW@6n2 zVeYQYdzD;&hxg45Ky*9>19FOD$H(=Z7&N$h;B-n^apNHgnj(@~SuN_Y6y+si!kx6f z7W<)IKXi#o?#g8#Ilc=@Aq*NIcim9EE?%UxAi%P1PU!9dvsOc9h)C(|ppgnxtet#t z_xK9R23#z+>z(f7<~D2gtfdDpHMW>C8@qS`7llD-7n5sZ9rm|}apOUv%%2QXMgZvz zqi~D>E3ytieWs>?HP2{sYHok$t8EZxCm8h0YSJ>-oLiHJwIec{ z+TWJyI!Dun9(j`+QwXG_*noPy+BYCBG$cmV*))X?J8N5M2&FWHTI~`1=Gyhilqbav zbUk+JYuF;;!1V+4}l!0+%b6H-O?C94>C@nE{oo?WzY zx+xGY;xG()WG)IQP=}L{5Eu1y9Mr(Xw>9?r?Mpf|U$r?ClCwo`Z|mEyYF@EOS?JA+ z0*#2Hlyq>!3a-c#n{1s3!R1rG$u^2M0>)KE*d)K^(3yuUvdKqDaLE^$iYOv{ZcRh9c$r3}-uodm(Ro36Fy5=*&ib(inus801&&VAyI%7X=eLRkYP; zp}l!a>Oca|o+MdRJbN+hz=LuU;!*hCb1gdwQZHxe8I2Jkb&R;JP@|rt#^YCq9$C^0 z9>+(Mp-%J|r$t>*PA(>*9kEEY>re}(6UUHbb7B-_xiQ#{g4r+|%xUP5+IEi{WPsvC z5E|-ma?FEhT=Qs0AoOA&PmKC#N{bj-_I~mO>RQaO)7xm>`U-m(y1^I1eFM&wlt_B_ zcyFIx6#3Ot!Si~<7GL(Qlgk!nOvitDj&;)X2)z+hw+mBxZ%5&l3W12>gymI;P~~_* z7>JrG7O=Xq8{GdBnlv z%2v(7EoIils}%}y71u>Q)LtYvAqN4k2VoeJ3vXzJed;}4vbhUa;dEUjC7wq+W6SgA zH?NewLwiHZMO_ubkNW=BZtL)%!Cf61xC*zL&@&GcHHzKMBXP&0{GjUo5u0)?2VP>8 zDzxtZ>fpF}c-;K8C(K#7Q4n1tI@c<{f{zvPcu(SFJRB#_A=dpt7%Dn^?`2~d{Bm_h ze(}7%ztgJkx1b$!&au7n=#84^aDJ#BeKsZ2L|#H&)}depevdusOd{)5$oNNi^;@V` zD$9jJ!7oex((W#+Bn{!a5~~!8oDn_1k0{S&tMs`lCYFv}QoN?ZMf(3|fK-vk-9b~a z1m;n&hU%s=V!!NIvf)5DKGHzs=9<7v)_Au)57n6*V~}TCDO@NwlXvzg0b!dw@pdL_ zTZ)221-8sA8WJBIR4S@Qs$kLC#(259BE~9bA55014+!zQDj8+ys#qN*Y_+6KklvxW z0(Oq!Tv`a`j&pE@S)2>O+day+i1l9cHA{DvB#V^98WAFd{z&3SD$9|Y9JzKpehPQ3 z!?4BhSJ;rrs^$R9NnvElHVa%og5s4yNvfKWvKEqS&W&*9RV2h)(b&9!&r?*6$SE+! zK02}Rlt>^ZLpzihDX9j(4Gq|F115tNRI$+;+I?q{vR$@>SRShHOOz5M@eU@4>6pT* znvnNDb9AIAq<2}#DZfW0U`>d(K6=Uelbxf3L)NVA9UdHQ9f=bFmgj0^SO1?f;gD(9 za*b6%KWoSw4`_HS)68JH<*q+Q&kyc?bFhbZR)U})?#}vRUU=onkVzO?eSA#;--VeP_w1k$J8gE481Fq)+d@12 z-bIh+RWc0X!{$UP?B2!nf(@n@C;k{i;!uUq6G(MJcwCO&Ff);cgmxTg*|Ck2S24_| z9q>-!4P%=H=p8`bT78TYfOUsc`1c$*UodKS@aE|7sJ@5u|MS|ntf13yF`FjVI~t=n@kOHHi(>Zq#+J6?`VfDzarC3a^JkIOhOg zL2yq)I3%naJ_ibA-XmBO&<|m{55K~JcT?4mGzFNErW9tFBd6aWz>NSNRZrrSM)5s~ zAhYa3B^Sok3f_Vu0tt9o!~A28a3a2@J}rSF!dy=gjMb;8&QW}roi1#S;za%i4R#FL zTuN{C23`L>F_j)k|Mn^@grWf*2_zz)hkNY+7K-Ej6wQYH=zEY*{P4Zj859!CHhden zZ$tHMaGFSB!U}9yfekCLU|C}g=!rb0eR5KEVMhfx*sgr!K)V`dCK&O|VTI2UN?<^V zt|IQtB{ITlzK(oiBl9ha$Ikb4l4+(&8TuCOP|!lzyoE;6vWFdXY|uMI!$>9Y+rVTS zk&o7F>7OE<%U@aVyv~uUj36lND7rK7hcLp-VSWUXLfDG)X}fD zutx%ROivy#p~pABOC7pG*1nU-(oqFFxu=n~@{3P23W=j)2!1z!Fr9b@h$$T`-N&yR zex9U0S-qiUm)@HjxY{DUi6N#Nc9Z~eVw!E8QfD%@>HcF@l&JV}T<7V9zCp9HdT} z8J8>8H?d97!r&80EpJOd$gGXi4Gk2P6-(0fu_S#}dx7$e%4=tt$MhJA9wuTZ@wqBn#j`s?%nMS-mtHcT(NaK73tH#IS zurqOi;l84&K+rpfK%@+w?whKv`;z;s=sU4kw#hi4b@SW9 z+G{M#D>gy=EQPKW1cZ#*9Fyj9(2bwFkeE`YQ2GFe#+HDhzKMjK#&U~6&kB>{><^h{ z&9C+rzstu*|JLCCIVPKxSI}-CPk2<v$5n_RFpP{n{?S?vB|-a(8ZvyINgm&!jh3hHlv*YEqr4 z68pACm4VNn5=qO-Gj)}1pQD zj<)=F)SjG+-#*r)U%k;e?v42Sjep61h$tMwrI{CgDWimx*jK#)2D&>N3@O?kFV*V? zfZVhPUycwH8LW&N8TZu>jzqJsoQp%0DM|tjnesV~@lMlbQX3+hKr{KOCC=s%)@QrJ zvw6>Dm%9~V3k;2c2UL_{EoBU&*B#9+`K1?R(wI^E?40F;)3Oz!!K^%6U(9qw*z z*P_7OUR-ommi{I1!0{?Z;$u0?w*yG$7LSNREt9yT6spAENa1hO}gf0s|jGA zTGWtWy-LR2%CZte%_)0JiP?9WfQRQG!Cqt~P1ojym68VCBL^ianku3+@0}%X*~fFpN_e@r8oHgrxgoNKAIfcpJ!hJr!UY&&h$0+0lYBJLEazyF*Gv zKzNL&qluSFTssG>v0JMh>LI#{_Wl+k9UJ>A)UJr&E{f_WA{ws{sIdn^`E3VM_VBG& zOvPCoB3zLpMPwUvbKl$2ecMx|bjG9f^XUEGlKG_BXT+BsfRQ3$2S zb?GMfQq%NmIvP@$a2+_9F=67=2N}>JjSg%?y+Io!n(IUoZ<;z`Q&+?J6&*;g8(n_v zbz@p$uMUoWUOQ^lcdkWGgGc*(l*231L7WQ<+6%xTQEhRJ`iXp<(EPMeA5%C|cqmE1 zd{xq(M`(GIdl<~F#!#Rnxt!gpcT3mbrDzk|nBkA|OKZJTt;K#Vxj#`8+LsF(9rri8 zTHt>_7#eSQq5zC6TVgM3-xMOBPI{Az_Q*zB|HewDo+&cBd<|QwDNE;7@5Tyh&XWep z!Xj)C7t!@yJo|Agb=$;Ip^#+ZX#^fYiiPrLQVgSy=-~2k(5; zyOou7y{1s1isTuzb)$|1OQYZs3qVI|YsiEfk(H1XJ?V!Vk6NHXh#$g{DD zc{aiWrxE)pT?3?|Yv?Xej^T5O>fr&;95wEa$$R}B{0&5y0=pFNZ%t2UfJn+XRTN*G z-!NSjeHjQXqb-2ymSGc+wOgL|g6tF|2PGED`zpu+U(`~vI0#z@A@>xu0E`9udfmdF z?h{>zh2cmzA?=9(VarU02KW|);=N*sFPyo#oJyxEaY4^Vz@YD9q(=@ziTeKj!OmB$ zy;}3AzTL3nH}m8nj!50Sm4pc2NzuKnZ)6a}Kj<;V`8}}nwe)aseCFX^627BF+v(W% zV<5NBl`FjaTg!jj>r8w{89NBNB_F!0>m zJb9nvi*lWhd>PxLh8R1hkX{>L$o_aRy=VvW3zTMV8Izpg^ZgfoRh?Cq++0A=k8MB8+5JV5iu0X zlp`ciib=BtpSUVn(@xtdMo3G|GmAuJUL05oUYY?9XyHZen?o4azw<|x<;Q>gc>%?S zGXGutgP(bt{?FsFB{;oj0scTQ!vpAhJb;(yJ-|$lBC-l!_;jawz|Uf#hajcP8tA_ ztj?Poaao8iSBtX{*mck0~EGTYr*J<3$qlDdI4fwQyW2>L+=D}I$dVXaeEN7=>j6}twQ|qvw8H*jIoxZeUHXf&ei`& z)MZU2D~-4GgqInI00z~^2n$REIGYd+MB;*>%?+(`{86I+^Miz=ES)r|u<&8wo-d+! zXzolvAMn!3oSEVT-S>-)&Jh=WBg; zW3NSPugkCFEKH&|{c5z**TeJrZmkjRxr1qHp*phCpjM^qhLmoBnBXEJT&DPmTBaF; zsT`bn#h823Xt&U!EtrI!)43Q-6oAE5oH;ZyxnXFEF`m?nuayV)MRE?)k0ipM9D5$I z0nJ5G}P-HS@zK24+T#q|@X4@Nq)Sf=%eOI45Lc0LI=2h3VR2 zEL>oNeyhw|;5<{`#nmjUeQqR(`*PFD0>@)LavPm&9&y zv$w{DOpJl#Kry?>5(m^FcjWLp6?WRfQ>PwoENL~AWp}vA+P+iLaA<+wrzde|a>`mD1Gwkpb{-E0(b3~v|*z_Vf(XwxX zqC)IeXqODH==xn@bqqU1r#&H^P2WdnlxNQZKfq`KWmf@iB9dGNfUH#39(`=CwCSwf zY{t#Z1zK}w>3VXBIL69Zpl4*F&{(sT;v&o5U{?7k*u2f>Is5ydT>eT@)VyS;T);Kg z>MUDRCLR#aWwPvTvZ+`OA4x6aIM#l|<^q|l=2A?QxK%(|5E(Ybl=- z$_sX$2_KCJqUF`Po}BjrdH*Nwi7nk#bWV6VQ48r~A69VvV82!0DMZXULl6cS=_eQ8tU1CdYo2=qlo1rt}m=5VERSF7Y z!X-q!<*}c5)~ImI*l0Q)4S^At*-jg#uLC@X!sE*>Stss zF4ms#=E*sqK0slzsOV0|KA_pe7h+G5=M$=dE2qr?hY-kuEZ_&2Xx=gc7sX9b50KGm zbe%?(BW2k~J*!%VK4PA}v>pm5dgriOrf%8jwEOScmtpS|+F?c6T(^hLB|gR~B*SQY zcjBM*1_KelLEuql`$IYnLXQxQiykLykaPr!OIY-hh$rX)%eAhmjJG-6Myo~_Xk4bI1VP%`97>OF?|6o zt0QCu&>t$-I6ed^V>Ir)g*AP~HJA6I9JccG9@YI?GOA!YLN@7lpWw9d<-T6tc!K{c zS1Y1rvH0cZhxqwn`LX_Wi5<4bKu+)w;FD>xzzT3UVaNN8`iuSA4st|2ogS5d>3@UK zI|R2yia;+UK=(NC`K1o23MOLoPTSKyrN8T(<0x)aWRwr!7EogRt{33E6K@i8c1C*x zPDp#eD&-}^%p!u}%i%kQR#9PK5jinkZCAii%!=dcj5zAzQh~e3N{Ok27EayX^a6ij zZVxzaEU_)9fD9O@3TTUO)UHsWy5$tkrHTfOWPH%9J>k;?^vxF|t~Xzr(@x|kSb%L1 zM~0kYHC+=xX-N8#yahlIsmTp_nNl1YTeR4`h>`HlK`GG*+INi-*lG10xlup-&UqfO z^K;mmV31E>2n~Ffbc6xU32sNQ{-=FFjO+bzjgG`_RzHP-qPdf;5bkO|aGE0KFxIlg3|1^Qlg^;Fv`mu%oN4<`;KZl$zT3x4^mOs|IH-WlEDh4zEs=xwiyya~RXh39A&zAGo(>lpB_WPv`!C@6|tBQ0r%MyOFPmsK@n zTs3(26ZGx>9sFO5E0{4_to{5i|M9I`U)5gJ(co))7d0lrF0T}t@s*6wPAaez)~N4o z?G^x|m7k7!^sfLgYf4la0YgEMl_O<6EKS`4_?5qFRESiCD$8v9O*R3 zn1?_t~)`LGc5#mqYVo9R$A6g>I<{0@B~w zWpKDaE4v!=*48VPibtch2ff&OQETBEN6aj67gN{}Pb{&St4UykrcFz==9zZD7Nkwg z#&j*{RH6;5Q^(A$DhR1fW;F5@ri@7@84kl>l4oFrfM_I6CW~bW z>BWV9GYvDXib{|biy7T-$KgRAWBy|Bpo{33DhYVFCC50#VoE0==C0x?#5UH9s1Cd> zsa|+O_uQer;c0fwZzbYFVQul@1x6rUz{_R`24&2tMev9V`$88vjyNCUJ*rxSLcW8! zucNPFbHfurYt$E+J@NbZoi?yy-b5?h5AhR^GDZN-Wg-Ig4HFAY-pi~7U4Jw=kNI{n z?E3mAaaq{n4eMP9!ZZjGfHA;?0$IKiV|Uu02IsAQFd(~6w9;@E7{L|~JCX=wlT-pg zS>NNPCnjuB{8tQI6gRaVc~%!Q-$CWDA3VnFxOkLuXjsey9(b54SsER;&0uub#k;RU zC8h(LN)04XJU-mPO(Z?<6D>E(EzS-v#Xafne2;>PCqUlEUSt z@OAB|0UawKg8KVs&$vroSuib_(hHoA48=z1aXJjLmb?Jg+8g+B#RFhIer&U-eFBb1 zfh#uFn1}|%Egdi&4z~fo^}o-fcdMG`;wydp8ud(`770ov=o*eE?)s#JNvzu-%-ywl zuafKU@V>bLh>oXVz;9oVkLx=zXzQL6M%!be0tNv`X73UZk`jz_M*l=pDO1Ke3q{&ghuBFMSpSGiEE9O0g4>MiQc-RA1JcYbE zK!=Z_tqz1z@v+hg{ZPBiiVod3A3?nzuBiTGEL%`gxNtF?DJnl@6E^VTrnu?h*%Oe6 z37;O{R)#q08Jja9Ia~Dhw!ZzUhK}w#50gCibSMDpy5_AiIy0>%tk=b_T{ zZ@q!|wo$YZFq0vxCiw-1&OE|=$uvrmtDVE45BCe0(vx1lH@R%BZ*bt!hySS?ij?m& zob3$mg}m)0JPM|xGaLCyV-Ol+kYBZfVXGnCdrj}yAgQyB*~)Ez&3^* zcu-D4)XcU#*Rqo!^>VWZx{CF(G=pF9P*o!M#M6W*5Lq&eCHviG!zey9#?zR{5;-wT zkCT-R(P-?frzue?G9en*yxTz4Gu0sK89GHy(k=O68~xN@VgCv$>v196H82z{`Z(+! z@9m4I;&i1{@Oncn@(M)?I=K{~T=1%gbVZb_-Y7_+qay`ntYE)Oz7qUuL#h<*Fc6-B z4{DBRg;-cpm%<(yHI^SyEG6kE?Zq~T!r469d&t}4H)X`D<4RVIqAk?WcPNlFG5A7U zwRK*LB1k8J7af-Ym6M8YghhSfb{|u;3g_n{sp)9zYkBjTL2^CN-q2D|7ku!ezQ48G zIy`99QN04|16J5p6ME#8mc+irqdqRN@WRk5F&CNh0!Zp!EA$=bu_Av#K5yClcN}6H z??Ig0hA|DIg4!QgAtUI$myHSVi_n=k!1Mb4POHA(f>z8KCi9Qc8#S-toKQXbY)YC5 z+=05Q!+_%ax_N{t!41+8;<}2%w_GR`{IcX3?e4ND5NPix_c*ea2lxpEvuss9SH;Bg zuuF>9RJch0{|rzPfku4YV~lNGwa_DA8 ztL#)OQiuiRyz(Ucr4PtrM2$e*>}33~c{KgZFI3=6_I_m|9Np%VbZgyKHx0cRmjr?j zHwF!zQ53}33Pv^bC?T!uRl_48PfjXlE1{;RIq7AA5|1e^-CxH0kL@Fs1ryKq8wb;# z-ZEkxhA@DrJ!boT`Tb*;dsj>kD73Ecwl2d7-%|6#xL572;q)orH3{Hr0Abq(5JK?X z2FvJ8gVge2GJ~_{2i8tmNh9AVjDW($^=w_@K96`*e7w9;Kx7}L3xc!U*sojloLjJ# z1^ebopi|ibZbAEYsjH{4Scm6O>&DU+D7D!L1M}~i+>A;LpkhfV|vYf{j~cpe;f zw^W{pWdXrB=pkvmx03z_VBz6fVMzZ$-AIODnxIp0GSsQv<=v+Y#fbhrfpv`U9D;nu zx}*t-Qi!6X_zx~O%Ks-W6N#|Kmqb%HizoH`6Y4gA1 zk)ZJV{Bi{g1!;oa0lVH%@Wsv{OUkGR!d5dFf}+t_)&TaR@QgA}+;RQ?(DEsX5SO)I zfMJA*aj)pz>RYcI)07IO@JMA=QfIw>Dbi1N%Jb4kz`*+wJU}-(_%(4Z0aKPI&g+<2eoPw$V+=XOtnTms{ z8zt7dgcf?FMi-R}E=kv|^i6%yoygyfvS9MCZ0uIY=61zjIUTn#||%sf61uZ)q#9B_e${4j8={cSw+uYIu~@*Pc16 zGT((HJS3Ig7{^CGLElNzNh$%VlJ82#2ezSr5}vUz7K>i%6w)G;LJVTz=u5WF&o!4G_696_`J)hkw3;KDQJ=hDQ=1skzn)!Sss+a+E1r4qK=ff zpgFnAkQ1r*%^fN_aD-}w|1nIuYi9o6eYD<4%%U2LF$a2A`&4zEapWYi}2F~ z=TMf{ZP94}*T70Mz7Qu&5Q?}=fgv@)Ngu}B>(uwKD-WtCrrZQkvTqXZ!;kxxF@;kM ziJWI-VQyHOly0)H`CkgHi+aBPheElj7i%MSDgL2QxmtwszZCjp8;dE?P1T^^FTsU(Vd1l*{WYY|jnA@#_h%*S z9TxF6B~SJ>CRUk5O%p5ir5TMZdQWyW1!=V2MTx0*SjiN6cNplrvh_iK2QlivEsa)p z?qs+gRZFR=El2TSmU*=`HrB16KrKpWLB8@sOisO{jd5!^E=*8nQ6v8ikKxLSz$IZO zjMzlZ&hRGUvFKb#9kKFLL4n?S`orizN65>wmU$4Gm%h4p(~IqKjN0`&$*r|u{DIw} z9DOczR^>6VYKTeyqv{Vs9I*K9K|e+yXr9&`O@yI4bZOl!8k}GsrByH(=P}~Q!SZ+&SLVWl`bOkYR8aGu3-<_6Q`5CEtt~>EfsdU$upG_S6K1L>y zS0x}p@ZP{<5i8CcFcW^+{7?Y+0(p1K{{9!G*z7WNRCnPWzQsPUoVqz7>zr^1+2Y@y z=faIn@-O#;_LaoI$YE>x&h%b!ahsWj_q(C0Y;wyvrDTqzF2Re*8=Guxc8+G?>WZ2! zDm6*Wl6O!oY)GJU*#z z1b5w|@|5@w1kVHTb9Eee@u*oO8!}l$nSQv=Hf=(fpl z+0iUyO+?&YlDVY9RFR47>=zlVKt`jV9Ed4lrw;8gX_e;!nTw6uFiL;EVnwEA!o0v3 zXp&_pjrniQVc%?Kg(&c1+H=lee+37I0Mid#(*1)=Ib+z6zYpob)$J^q<5lAkeXdRM zsplLHMj}c;_VL6fy1?CubRkr{G*wm=|2!=OZ*5W98!xUHo2P)2MsKR+VJ z_`F~O6tq6#wINYdxY=)zM?m`8$uLU18Q&R}@A>!A*WiUPQ56rYZx_v)v6AdHSXCDT zuyUrl$*nYN=UxGK_Ghi;=gv>A=_F#W@;WhUUtXSHH_KRadE6OgXh_7=uvV($b`oc4 zevow-gRGJGk)}d5XvdK+QH<;4#p}Z^%6_?@N)R?!TfIfFfZt+bi ziJZPwXCk`IpX8{B^F#-SNJzA9C~n=P`Y()ty$Vc z^9*fF^LoQ7gy?L=ao=P;xiiH8S>RK(Tg{Kc~EC-3t^m^t+SuK8>bhMvOX2zc0e5?$N^kK+^cANa=SjpR9nmh2PZ@Gpk09 zI?{?677G&?y`mnI>^{?|QGvXq96hM<;Uxh2;|i0Q?r={D@Uq1^WB{3TgOfmB^b{s2 zv~Upe=pp0!WMrf>ge2SX%LI=cC?3#3>(4+{4-eHJJ}1 zGpN~SsmEF?-^P@5jZ=z73k@E9H939=Z33Hed6@>5?F{O43CBX5VuxuL%&H0T3EdSx zdEn{^9Kit;Vt7GD3f5h-9Kd(xcTP+Ws)OZu2WOv90yn$o`Y}QH?U6nZ_LxLu`o!=t zIbC#i@G)U_>&?qM0)&N;dxkH!olJgU!JFe9P-a;sPh692yle!Yjco^Q<#oXMZ^C!3 zF^cEBgwWC_ol$?FQBV!rg}D8>4XWEgUGAypcUecCUw!m-dG~mxxdndwL*E7Ea1ejU z1YlCy_XNdsT>9UswbHb3sFRx`h}O%HuT|Aemha?qS_qi-jN7xNxZMdz|-GX znSIL<8WJ2k-^*qQKfN#PF8X@6yzYNp3mv@7yDGRdrF8hdOka)M|CbdIM+MxBC46)N z8k>rw$%6Mp`aEDp89b6D{PM%stG!oOdC=_h-G5m_ZrOi@?w-3JUAL~#sc_hVHSBx7 zG+FmNkRP+dfgaDczw@-e$Od{g!`l75r{}BBXQ-jC$=M&Z1nVa)7=Xg<_tT_EFzjxu z(#b$|u>B`RsLoMi72D${EkKnD1u>)VH~Tgy=-AU3NSeL?+8AHUZA>fCdEL24Ary^d zNtlc4BeRL|-M^2TenL08VQTbWww&_PfC?-0%rJAy$}B^GzcOt1=d#OxQak#h5H! zixQVtLFapPj$j`w%-{3?#vBOEB(^oGV`)j)7hKZv+pwx<;wtaVI#PW%hE12{V98EH z3b114Ehd1kmM|cZA;ENb^{6KsOA46D*0I%3whHxfT_zw{qu_kP*bGgN%yFJBUu(_I z&S*pFBU%O3sjI0%x^6XS)(tw57OY581ZuG|e0)T?kz&f0^odI9{Jc`3gc7C8OQ0>= zFjld%`a~^tzEO*vSyHvu&{jQ|i&%wyB38OTD3z|Xsah-Oi(bqXtU~^gi=B6rN*7*K zEp{{&Pi6|%A>T-qPkZGOwb+%5?+${s?7>>ZkLeP%@qD6Iz8O-r@o4|&lkcy}CClP} zmwEj6vZe8IiMn{@KP_6CvlmkZD-@t)$Tm;PB&$}WxklB{Q9Xnx*n|TnQC}c8O%4e2 zlx~jIuF4c_J1uHY$=xeeW%@R%=L+!`5R72<q9}zS@B53@?c!mCnhT(wk-GVYKakiyUFJ>3<6!VYJ?V3msv!IzoKJ4muuTv^+w5^Z_~?VYE0x zeAEHDPa!nFe~V2aG`oL`ZXq;&CNu1SreM`7@YHPcGvnBY#w=ERg{g#SMAGbLxq!C@{q>M1;!`IC^)@OjhX?z{dW ztXv?nl@SkqRPd446S-yg!eA^Nqbx575Qn3Gq5S!*awqc@&g87=r`LB5yPeP7z@b17 znt3T=^B~gH;C*`-4F^V>Nx#0DmKK+dy26sNEYSS)j}V{&PKGiQgapXDeh>4p^)oAVniyxokj>@op?D8EiH1g%X-D(v> z=5bSR9`(+a0*_~lZcN|#ePyGuZCTh|;i5%3T_|SK{!QK@&NxE<01trmUCd|)*f+x@ zEQjN4>Xl*zqrt2jFc9=p++5l(Lwj*?oY1(oa2{&MW%ay@IztRvHKRx&jmg~gGMar= z*2E@ets9Z9MUk&0*R#B&>w#u_ASh>#o5sfrU?`tD8|bw$1lT%*oz{wywC{9)5zQE} zt98?u1(8dQY51EIkQpyKzgzbF;j9*cu-{lBMD3YnafyfX5>YDrMpmEo?skxuS9s^q zr}P7@G5W{<*2UVw&PVqR58k%qn&k-<;(Pzs-QUlpGeFdS4U zNiCE_GdxsCs9e}CWVNzH?n7gez?sUC>uQLz3phtMCy_N$HZDib(h6k*u$Wmpj4`BW zzJ=RHIAI-{BN*2RNx&9fJra;sg1~~kwdHJ^chw)TdB9+FbM&yBTg3N<;FhnEa|#%wGv!@;-iHCl+ssZecrlltiGijb8+t9JYHh4h85KLwCa zE^)lX8rVOXXUWhJ@+M8hIGt8{+g|CQ#t~*CZJR1rsiu#82U=2J&2@T-OJ)!nO;;D-^Rd~D~LqXf|4Op(f7?V1b@-Mz|trj9KFw$%I4gV$xA40$KVGU9M0Ferm@}4$6hl~O!o>M56iRgPH=fUch z3fMO_@MFbQ`g7z-FCO6?Jv0kv4a1y+WFz(L*G-88Y6(t|Dcp}Tz3Q@Caczy3ABPk62($fiM&9R?F7^&XoN}!C=x@4pFzP8TJ}MNF)09`3dxP@u+HF)15`J)BEe3q_=JH$Ejmm zml9{C3sp7t1vM_mfjTv*8l}2)N!RfYJ)f>oK0Wt0pS}@){V5^1asOnsPwF5BA}IhO zKb?BD1hVL5lj6}sP9O2iF)$HU-o!Al`tWxFrK$gHO7-8HGmp>Wh=tc29J{q;-LLyy ztFmVZD}F^}fDvY1s#7_(bN{R8E6sHipL!+Udl^#x`(yK69X7_TM*90B5TD$!Gn8P) z=!}INP6rhX`Wf)jGMBv__~EN^Aq;(Z?~OUu#})Y7x4ltK&v&d$gog`6cGuxWNJv9} zgMwerQ2=1%lo*P47Zr{GXOK9gUTI)0Lg>^GB%>rTq|cRTI5zgaI4VG(us&ws^usnu zt*rR9j(}*X>NGMoLZbnI$dti=Vi~gEr>yxsVYyeXg*vk$ZH!ROHX&>?)mnUcJq-Dx zqs~!?t6M#r+`Pq`$GSet)uo!RVW#D_JTZ^XHy+PDJLjcP9|p;3lLs(7A7(3K%x1d*?z;9ly3& z>X^Nd)S5_eFk%umc`SsddmOL4Gu_y}>pZV)eX;?Xhss_Bbz#Z6*Xkw0G8`L!2O<$$ zVXEb6>3;m2hI{6mie@U@2B9*u^P#RbjoR8NIr37qGW*!76h>#TLA>I!wu*B8{y+#gKC4wei=T)d_H*y>F4oADX(@>u9FX?( z+~;lRw87}m8G>V89d!Fj7s+Kq96l?XwfH&yY{S|Rm<#k~JvcwOaxp&G@f?r|UZf+Y z-#0oKcC;{UXkpsWL$#rM%YzQqhV3m3n_Bo&#c3K^;OX}ewYbH(v6GSF8u3X`12=>m5fE(kAk z4<@&Bz58=7h)yNw5Phx)#}n8MK0Yg)+fdWv(!d895f~;pmZBWp2%qe|nu1Nm7I^tN zK^6K}@x#F`Pk2W0mot##@a>t+3H3ZgoN0qLo23_bs~r>< zunXP*qzMV;%6dG4+LexakVvSkQ7Fyex@NTq7}YGC!zj@50eMF;nFclD*POb)DFuWh`yZ1SNO ziaY)1FWJ{k@;jqd{5bYezZK~~@p&<`0CVFV{F1;FE%6vcqtrF6~i`G$lpg!4Ly(s{PPdL&6k%S?~lkRjLN*uLY zKGfxkt(TqWFkgS6ha8ZFkW?PRWVcHg>~+xI$|zUFKu@Mi_rMZl3NDakOg)N#JY;fT zG9I;HSkP1ntQqeB%!WmML}4l(VL3Ut&vYSzB?wAo-!QX7*?Kk)G*nRmSnW@E)-1$I+Cw#<4x?BL2uI z(9|a>Zr#xA^yxL%rMN=yD7(0%RuDdj*TdVE_=niVfw(GIv{B zYxgXvKM9~70uZdqB^Gv0J0;SQs8CqhW&bd5R_yLcOV3gjUBk=at}ylx-Xz2X$j5N$ zjWZrt@xN2B2HY=nJ!9PLzKOpf_>m0(iv$bD@eZe(fFA58Q)!la6dMpYF3Ww10eWu2 zLx(~EXd=XY4lZU$b)=+tDXJ)qq_U%A;u@h%E7@ZX z_@NL&DSA)*A?12%mn+HZfK(LZv6+XzGC<}f%{)m=FcN*+`$Nx}O=ym9zM!xdAcZK2 zjY_efvWqo9h?!Nq=b5Nnq41nsnyLx-Bswd-~D05!Pu@U7rG3u z*&@?slE9XKN{M@Gk+?ijJj`oOG~cZQG3&Cx=Fh;e)@6vOOE9jsEVk3A!iv{CejdsC z_E@%)&X5+fzWo*63RaB*q^4~fIQiaO$DvrC(At%38~gSquh%%3LlN}noLQ+(Ezgnn zQZV@G4~#enp~wTu!*JCLydG)<|3r{?daV9sW1GPEsR1t9XQ$g@fan!f%=bn!eZ}BR z-XHh5`9pu2rq$^AS30ev8~I5J$`_h08i+7sQ{*UjX% zi%D-uWC= z5Oo=iaMNDWaD~P83*mRaup2y9OMP@xR+tGp_@B^^6IBhAzUPv)9p-BZ1h8LA^hKPE z76imV2=cPA5fcKWbi$dL1c7%_Ai(z;apxO3`{ zjw`&!)50$SW9EV7+|fn_Eb*Z^ckST8`<*Cd2KS~PR?z~eOWOcKm9$p<_kM34TyPt} zbzF^XYmkRxy)F3DAz7K2dok`OigmVAmxQ2WTHHw#$m6WdBf&B5SZHE<=qEes;-Kwq zu*pHi^D9}qPh(1$EPR9DqK@#r&lDSPcz6ibeNmx6Ku=S)4@AnZBO>mUFpKzmSwsNL z@S+HNFi>f{JTpB5(hmr0X&_=yol@A1Ua_Q4G2d5lW7u{#zAc#&{I{5mj)@v^!Ukf+ffb$N|}kF$m7u;rU$@X6?3H! z7Y#X(9aiXFDQZKQ2e&G}{TAT0g2Dzw5-c;NE_!iPgGjWC-7lo%mOx)f2*kJh*>8}N zP7@u0(Z1gmd5Ny1l9SuMs z#6QsU7~)>q9NlgXfS^aPod3$H%4_}x)@NQ3iKj)ch>+67tOUCmpfC){V=O40H%g|r zt3{Vu!Vv52SDTDiJd*iN2p zscA=NL${KzlJBEQZBz<(`0|wEZ|6TUy+eO+S$>z}8)m@T><!PrlGbh9kZGA-^bEY8v`PMyg)CpqP*O^`&qltynRwNa&rQm20fLraN<;tSd=VwVHJP6q z$voJLnXw+exF_)u9elEz@CbGA!7jh~o8j?mtDD9VtUQ`w%^;*!$5=#6=d7Nc%kQsM zZohOes@O_7H7?ed8C30~q^B0o`^Icn+SHKLC`4>t`$*_@*-eh}c-m(0WU{uw<1fMs zo(ql^2l9KeeI|p2e5_n{5?&U(Py;oFulwUMGVdZaL_!mbepQ#En2eAndgQ(?aul8pRCcq zEbP@vWY=?#zj58nF{eB&X`-Ju_@XUoNznd0QWG#S9OdIoLMk1sX%9wop3SK%gGDD5 z3o+PB)s-wK{d>&S%qIhTw)5RkihdYGlchH@%MK*)igYcf_891WAIU#@=b}GR8$9Q7 zlOGo=QC352!C9n35mVBE0^Zww_)Aexpo8`WN{cM@(F>7&^%&HxT#NAJWWU&0e!JX? z-<*Ii1#fqwdcFMmBv*oe?~?nNH5G5v& zzp(*$Z~#0AV`G_GXJ0>AXMZZ&TUmPjZFiM@wN9v%JvJPPNYLhX2VI(b#I`!=ty8H| zg*UZ|SF>4*-hwtbg1Ld^FlxtkiE!jTm&xtmA%@C0n-3)u;RvJ(Fv)*w5;aZDnanzC zX;j|gUH|nEgf7^xOxgD&sA4G?oA}ie@sN?W&%!iWc*n^!Eisg$g?_*TH9gyB(vKJ@ zQ%LyBWDl6zbr7e9J$$lkMM%|+g6eB-&@c^eO%ZFw?6 z)@bWJ_)JtrqdcyRC<4qu=%zWziMmNa3H8_IF~$LO5o-Z&yN}QyAB56joR}4e5wDO; z#X88$`35>%=kZP(C4-Y^utn~nG;2JIc6f`+FmiqPLlHWMok7(FkdY#ZOj7`D_?Dwk z>W=hUL8x4WoyFspoaU#RbAJoYnF|#AbB731dY5s^Sn7<@pS?SgKyr_z3nFJwy)T!< z_F;X`2P$=VXA~nz-M=SgXOX*2Y6Iin{VX9mBlKK3V-J&gU0wGuzuslgT^bA@fei9e zeDvsKi?=6&#hQj~Bz`Bk$TWO}-Ch{tgx?0s(*5RGnWs>erz~S$KTKM0l%l8>)2|C4 zel@RFoM<0%hNSv^LUx7l+$RceC{A(&THz=pI8$mHlE`tDE9==EK92+)W{7bm=iR^l z70I9Gm{?Biv|bY7Y+fOPBRg757|N$WdR!(%A>EEUR8MbHb+XDm(t1TGw-0q2b6P=xUc@B&2M zej&fkD>Bsz`ZpKy!W@*q#X;zBlEFKgLo6 z^I0(3L|2o!uksa*-_`d(*R}k7fx-~TYZ|NmPuxl%EQ59)oNQ))3JryzB|tT{x^6sC zCPT+0{T)HB#?eLTVQvTzl$~N6fgKK`MVRF?wwXeclQVTVu01gOU2^#&))xe{%bAeC z@kwJw_u>u_{oKLsXZf{-$$zK(H4_DfXU56{hIzBK;pm` z7L$E{dS;$vt?M_qgN@rDdMlTqAn4RJsHz^=ov)c1%<-5Pc4xr#zX)BrmOh^qruDC^ z5kOuec=@->fl2*~YJE;#D@O1wH<0<`&*}9R;|e~8=Rjo$3!UX=fITDWW3SR%dT8Ip ztl&QDehf8f-3X>|{3p_@z0`+4QQ<1)5D~JcQVWbY_m9tU)3oXe)AF zX5{9A{!TsQJy~NW)eO%rD=@_QqXd&^*+nTE{|+ca3^gFC@J7%cL5>fCUN}4f0z#zkedw-!m99fln9 z-w)&+EBH)PSHwAYGgrDLk9hjF6njQ&V~I=bSn#OBm=RJOl% zV7(W?rQLG#=nMe!8}7mr8gZj)zZfrReF_*x?WakB6AxrS;rbvKlQ`kf*MZD9uC^m} zf1FX#+`lsHB4YR5a~_H%ou@Xd=kWYKn-Y|CVjq4(_?h*btvD&jka@yMNvzBZ2GZ$b zTUM^7GyjS4;(Rw>oS5S;){Fbb%pno~&yM49Mm}Hcf3L~=hRnRfW#`E5$SkesUN7M8U}lpC#rt4`De zV!Ws0Hda?S4Izi^%r5fqnGadUxX-qjz+1LqJ>tAl&hzFGgzE9zHnNX5=ef&IN^+k2q%QZLr5H34k!i>$iisrDA|RcN%&<}*Pz^1OTz z4~)J8L$Pn#Cl5DBOWTNw*`wdUzJG1yiw!6=$3-om?hOU9!nZ2+Z=eN0B>-veYe3N{ z^*a+l+?8Mc$ObQuvs)6=i*8)Ek6@Mq29-w4srtZnu5s0`J5t?9n6+Dz`7k2nxh*EJ za;#T#hBA9$40J#50K-N(@8E5bp6Qdc7M&im(Hhd$Pg1CIXzp~jZ5Z2I! zSL{j}U9K;`x;t?rIl~;wO)5Njk2CJRpSQT%`Vz|Z-;3nq8Pq7wc8(mR`yzhM>^w+i zkZ&(FT~h8g@qMwmCPaxaeZ$E(Ijl&*`ts+9#|s`$6Y&Jy0CDL8d7L+SwIvHxlvI$5 z!cf)kn;C{%#t&$=L4{JD#sdmH!h^61DN=+<*NQg(Jm@S96I$<*RE2b*a$24TqtqS5 zOt4>QSYGIoQm>p2FJdp{qeC>wdd7<gE82a-nYVfrlV6DtOE*SW|M zIkyDVRpz1$0yQ8NN7KI&*`ZJdc(z{tX&s;BW$K*C%$(fPGC#%;Et8|pj171s&2dD7 zg{v+Vk>djYzUjl|1qsAmewn5cpIQS!a@(B6}O`GU$VU-08m5Dy{OIaCN z;cKxtS%48dDu?@ z`W1WtfXL$5I=PMl)uDIfX2bRxKcmktV%ep>;A727?8bTDdK`N6b2W?g!N7WXGPt&r zZ!)%4lNr9%Y>H>~{$QLY#o(W|CNp~Lr9<2J*$=3sN3_CrtZmk!sX@+kkzda zv1M=k5jUKM~^6ai>Z1))HvLlgmaTfN%o zdpnuh4G2j6xr<0`H`~2mFLs*U`{IO4C|k??@npYbW^G-ECXE>d1Q?{9}2m@AH?*cHs_d7q!8b zW1kpQ=Q`|eUrzLG`VWx8;uP_>sCfFO{ooy|0bh^hJw9Q!GC&G%7H~9kc054u-hKY? z3)V3IOTUidXR^WZgzRR;wA0tiiyt*Ia=NW~=XcjWX^zbW*7YvQsb<}7N&X$VH}Ghw zcrY$E)~>qUiyEeJ)RT_8bw}L-(^kP2dK&^igNFVH{ivyul;Hy%d1<|8 zYLeP&`yUCK9BY=M6;wy$V}gj&@5e}d%|?swn!S}#Nhj)$8*pR%i4uL6W+5s$mdd!d zk3ip+mahkNaTGVL7$lWM*&!pWHn1Vd8VhNf z5-}&#IGs8*vx<8=7;ov4X`Skrb#nsBr>|!K<{PV}{b~?nLwB0XWYv~KszasOP7F9N z0*(o;KdLo@nh0GM;K7CI_8sv!S-UG+f-1njyC0}@;U`HcFVg)ewq{eV?d#B&5v`i_q`${;6`txn zho`?yK9C^V2dzB+;lvO$gpJXQRpY$6dD>#oRfbPopESDMlrE)mq`Q_1^Os5 zG4A2gEzjuRzP=#Xt0!sQEm3Q&atLEM3{1&CfFNo%@n zdnG$($n6Xcj45rdq{8gu(k7-52WJkfede-&7igQa!>Zp_R7DCY;f_lr=E_Cvde?~P z+v$=Qex)^PfN^>ul68<%M?2X#OJ%56s?v<*r{)+6x@UJBx~_Y796ybE=ZpUPid(4v zy$$8W>MVE%ulXb0e?R`F#HY{qWBSUwEwul)u6{w_K~E65CQTJ(n7w1e%boekjXcGt z5xAV1hkqc)`3yR7)aayev4@L3Bd#HWB%`Uc==sD(-cOu3DUCF`9h`1v_RUG;42|Uoa2Jx42Fl~ zBtRj5Xs9`1TaA}5`%yF;3leXNiVs)}j}BC^b}qe*mQRl{4Jr4_Qa0Zzhy3m> z1jSO$df2?dP)$OLwFc!fZEZoX2vQM)O$;)UsuQhvku@a-_gWDOOvO|$-lypyobHU@ zvJigSH&hLXsfYM8=>PRn1{ayeQE|f()-@o0*SN`7gP*fF%a6Ev&jkd0nN#@E!NiUHlq`?YI8*nzBX$qU>6K(_ws71$YB0kKuy- zz`RDg2hDn>*R1HtesqOks@dspEAw==i}Z`tC9id%kZlZ4>&rVD8s>O2e3Kcc<9*k* zYv+RL^(Q6#Jt5a`u$0(2`p&~c*oo;f%Fp=06i16YDY>l`4}C~dSPUESH|djacS5t^ z8E7=(a{^17nJx`hU^<_zp{Z;J!-&q#Yk`j7?^bRu4n7-5lSTfnQSXnG1;87WGr(UZ zQHAI5ev5|xi?gqQk0Z(Twqs^yJ7#8PX2#f#nVFemW@dKG%%*@Qp{5gAfZ};}y zcenTISJTro(_P(DCFw7zRO)c`Ag~AyD^&mO1{1$?GgxO=*i!uKbizao2966mhHjx7 z5x#-G@;J$q7e5pn_veU{x`s0XP3FWe@}o`kaoQdjhbBh~xp-+zM0{qq`yg?rhsR|D zZ3a;)v#m8MG=!osUkh6)l5kZ*h25+5NKiu^11~4nA|?l0j}`f3m|ipb-Rj?AfRd+E z1T4k|if1@?VwU(0&!=H=iCwSAda*er#u!D#d2Qke3Sn^ES)V6a#r;4?ad_;mbI{pB zX?yFp_vDucBD8cRHy>lKMw=p&Qo&>RyQ)-i`C-PT_Npm7pF5d5^^05C#J>yya=e*e8;+u&!SmjDuzw`4>=HKLJlIcfn(b#Nv2r9l?y*&mVHac3vkl2! ziigBm@<3GPwO|Ys@EwIc!b61hb#!Ml^9HX>N5pL|#A5>chyN^_2{R2=L#o$Pu9guoSeQ{-s3YJq{ zoS%PUK(E69+f&u{IRI;RGLsVERNtXTs^&~0PVaMjw0P6@kV{CN%n?Iss4Ikhr4m`W zn8jZ#4#@3j=CZqb)h@1nV{Yg3W|jE##yoIb+5BBJM9Mmi@Ct|x5b=cid+Lnbd+YQ?ER zWX-Q{vBhJ+k$vNz1E4%F&oX<-|Lc#C_}rF#%;r z_eLALX)cH7{2bY2Lr20;cy?x(BGvC1b zL^O7eXBR3!rpp7I`O4pR^>Wl301;!~Q$&~;Jbh!o*IQ`GptFjGaqr?JZXYeZGytHX z!LqwqX%~%X*NjfwES^M9$-a>7jZe1EtTpAVofIJ`L+(L6#uUT)0-oDCCqp-UyU&Ij zFfTTGdfD@$riW5dbla8W@&#Q_@3Rf|L>b~oaDyMvg`UIuNsR6DCV9m@0Tf z%3`4CTYn5wlz~xU**4mF{3QcJ-R2`@0j(~ez0T}2xR|Y2m=9@NYRAJcIFVyum`{FN z+QiN=IM;PD8qf@tfdETebLVsl9Rw4Kjd$<8RrJwDGO#j=op<6o!N#^s3O!6O3Ts+8 zdBTFros(i(xGA+=ON1$zKT zXzJkD%hQWbw&jyPtj!n{TmDhnIo^b#&ukYlzRHAm&d!R1_6UhK08uGm`7C0St-Mz*C??v)%-pLdzTW}poC>Dl1F3pn0GHXFJ#>kz^b6tGaFN=34Bsf?thp= zhngba^&A^hzC~rcwok`O$4j>{DrK}VWs_rKDmKxbN1EcPaA5y4wAl?WWE z^Q!uE{9RE&>TCdUJEE#${ZO;+IUvETSYd|8yqWl`Pm=Ia$!R+PgkdcYI<#}!Q2wMi z-1qit;z8C5(ii4=jNddgX z@H@TZ8s!2ox~#$`x$LpiUNPRcbc%IzhEbM8?amA^I@HxiJ;mcRf{TmU;quB&x%^x( zsn!=4ZYGf#p3`5c@|8zx>2AbhCE6~6uqAGUO;2ZZ6!F~qRgpxg(DXM<77^1L(o->6 z9V_|MWX>Ixh@qdgLGv$;$#CHLuuJZFu|SHEL)>cSiSZO;EqF%6dW0z+<0wxK==ydb}Y(Px70?>)fQoN@bI>dq{z^iZCt zH9$)rYEa0yktz|i0*|1$4DVic*#d7s)qu39eGT9c@M#t!+_^|Py7gtPb>8hw z+_UCS{VVpOFGvlc0Up_M~2#FKn_U#CKm0HpIR~K!768 z_@W}#ReW2@ydxdh1K0xLn+YAjh^da`|A#f1l&UML&<2|$4iP~hfhK>yW8i0{(gOr0Dh!{JbI^@{tGu3Dj+mF zQvqQ$YRDDa2G6F*1tJ7Sb%?Uw?Q}30a0SM~m{K+|Nq2C)?z4M;3}6rYs#Er6ARODR zpDubY0KdUrG}DtuK+V9xa6YBde5})DhJesE;M-2d`87G_b0H7BwJ3-C9q7^qp)XQ| z!O+MdUK#r{ra8O_lMO;*Rb@o%JXfHYF|yQtw(-Ps^?@PX=_Rfha1;2zvW7PH1E8pR zcq769W3EmfUBA*|OPwa}#t7U38!lA6ZbY>IUKKvjB9C@gT*) z{x|Fm>X3S9sR|%-SB6X{l4<%ev@$452vtge#RP)4@x0@bj_ZMTbV#Xke8{SGO-#^S z++Y~TA5>0Akv9Br3S{>H{H@!Jp<-B{paaoj*>pcNP>^vD@da0zl3nrHZlt83_bqk{ zw%#M;3nv?hk@9P!spFpzs+*3sA$&Q2NFFq~^-|Ws?2yC4OZJlq9CGea$pKbaa^_%q zhQ&5wK1;QOW-t}z!6=FYO zm*z1p6hZB(w zCb9rskUh3nhkVi$+pDAM<9nf&WI9<5-eXw_Tv3Pg>CT4f9Q=4#_Nxjd?L*zwdO8-lH{h^G zAB#7Syngvrl*Z1Zi1tH(bq#;?24X1)ya*pJF8C7<$w0e@nPL>4|Z%GKYj*>xaO*Sv~Ruy=1?9?v6GM#geR*?!5p~ z=IdK-9wDhKR7SgkqI7~A9}VyrXIjboHPCj$28yUr7l$Fgeoj)pY8v8jEcj57`oOMU zf!w$&tM3$j-;053TmE`hi(FJ}L?eTd_j4^mBdfuoOC(M`C!XF_ApNFPl=^XSF;nJ7sVq@=C^3xaomFIh1q89YqABYEIQlCN#hL1X`{@M3NmCOTe!3H0j7 zTN!)c4B=94Y!U>V@Ez_x6l*(mSQ{*a96e4tnJB%kCeoIeE}aL|!1&1^M#SR-)cmq( zwt&DdTc~c;=J7#9G>BLoMl8_6u-S+TjBl+?-3YmQNH}6uIQU-&q7Q3_&5u++@|P&8 z{ruuIi6uoU1b_$DJ*G(AkLzaxM&b$On~h<9U$3|qT5|N(rUnbgai`+AQ7w~XQ9hzo zuUkQ%$J1XwGRKT99|@7RKsJnwPTvAk`_Nst>Z41r0j<6wxE zw2HL-6Gl29NiXCpv5;N=3%bb?7lJLVq&a1614-RCl|$2B3-^6*W+(Id?k*AHW(s+Z zuuo0df+!`*uKI^tl;2~iWyuWbbb0Acec8kdykj3XjBaEGAy{L7cxi@PG;?(iDIOi6 zD`-GBa<7y=*&L@W@n!6dLczH+#<^##1d?w}0!hC*Kx z4_$jVu+e_~coZ0^$%yY7z>9BE#jy=fACKvj!53eUD>5bI8shmL1@EJ~Jo`uvDkV33 zs~>V(t$ppyNOPSrKg~!fKZ!^^Z7CpGPj;C;O70E-oBItv=*IY>j`>07^lXBgh47AY zBDd$#i$2ibJmq;rO>8S0vk4des0yE>f)(lvPvVcbDiiDyBr2}JfD(K>V>h$QYM)S~ zgl_KmOt)E%qDSjl4Nh>CuFO}G)@Xc4XIK_sVdKemaRchbie-V}N`PfCNNTy@5ovn& zfDy#go9{VjC-w=A(G%Az#_cpBd#c!Vq%!O4Q2 zCysNBC!9NIg-E9~H`dB5OJj-VZAy_dj-w9l1UFK}4pRT2z8(zjoM_m&QLu}WGz$~_ zy<*KC{%t?*f4=(Ic?eM_iv9Oh5?&51WC!)Pnl4x^M%4IQy-&*!lNlytO=7ZBMs1EK zvQvg_PD>UT8^TM9(^v=Opjr=iVWG#aoygFW*Hm7WbMzh zolLi#PiLSZ*I%h83J)7ZWBphNJ7!@!pGrl8ud=eD&@0T)t0|e&l+0yoFM(ui9P%TO z$o34|)?OUJ*f2Ov(3g#ocLjT@J7sZmFBzLA73)k*p}W^0P@U*M)g7v@|2XFPQrsd2 z-RckZY?`P_Sg+}S*C;0Xm2!3G_buM`>!ZQ;7O3*~#4(67blFDh_2$<-)TQfAD>&p* z;V$x!Mx&9>Pc}9yJssP%!1zya-w-2wge1c1@C4|TMxWknBU=5x)T?vqeJnIpt*_CV zT#%Rh2OJlykkE8=(?-N#cNYMy~CeZ?g zE#>TOw*IDNKPe4`ozu(UIttlJv(|Fp%qskolnq$KhcM88oq?fTPDLN#lihPcgXfCF zOpmEIh)q?5NnckI)`$3F0p8>CXUe;5qRQP-G9`_YH(+bo-ZV+<1V8SD3(z8&vJ|&Y z*P=`AsfW+(mSGv5;HaFpgSFharw3DAstV+J=1A#@AO|}_myHY0>BNn_GJVVC#TqPJ zBua~OX5jTBB*(Nd;d$UHD#Ii2i9*)&rAu2uL=t4i{(&PpnC1bkK8RlVYWOMgasf`H zn?K1e+{83wY&niNK>}i0DFJ=2E0=6Re;sOJ5FQr5jWXC6s}fQ7IB!Q4SS$l+%nc8O zik^nGE6j%{uY@=xi_?@eT!epF#vqhAVKCf)aHP|pUtFmG8Iy5kY;;7jm0#+P1*V2k z8!5<2kVL1}(lUpB&6$T$7P}6=D0N>k{}8Adl~D{@mOQAaFz8rqjv|%jHG3mWNno3V zEC|Y$?5(B7^5~VWV;XOe%hQJ+2;Tt*9>xb~92`#qL+}fef_MdDuZOr1b!V25n2{@h z!D`&mG%+uQIOyEpFZ~zSWJt@@fA=dYgPe1Vi z0B8WP0St5Se{Wou;jntD zqw(c-^j7rlA)5H_C%j)$i8-(1?C<(b$~qdRz9xJ;iga{`9r2-4n9000L9008>G(#`tT7LJxy_8&uG>hvFbdSO_miw_xe z4IQPm0!R1Qn_j!!LVt8Oqt?A2!P}J z!~fcxFpwO(BSDsws2nh=#DGbCZ&IwJ_dAMAwqSy{+aHNCISboj6)H}rH5!`NTeg2d z6N-hu%JsE2hwCl$AXe14(_4P(f%vVlMaRgijQ3rahIQAIyI8+$<{FL{pXK(X#dRHU z{cshOqEh3ULVV&}Vr<}T{R3UY_nl!7aquPKb*CNA84XEP61CAi!N+j1`o*J*Wv$xb zY{C|ee#7~Xv=S{VPN}PaBe%(oec+}65HH*qrt*MHw|0StB092^OdIEuz&TpNvOV%SbVO=d?cOF5*cP4<@P4ufYe>2*hK9rO1_ zAqaN4BnaMtm!I$p;@;Wdmy`W`Lj=VR>i!|2jhrHoIJMoP-p-ts|d)aRD09lA7~a!eet zb9?0nW0r8Ngu?PhB7?0Lm8it`^e+K^1|n4)Wh5+L^dcFJTQ}W1&3bBpU_JKX?L%e{ zAA;u0rSvhUllyMyCwj8v6g`=@iG9sGm3TvQy#`(aU*Rr-taT!2T`5Bo5;JSMc3XVD zP9kZc!8ssKZiZZ>Ol3D5wSPumpmF2a%rqJ@4~wofLJTS+2kIpF9D1TM($Roj;0okO zD2H?pEycV|w3EvGq((-m>51Dtl!sHXtjtzxpu>Sg5i#gbFr|F`s0TRDQ2R2Q=QGGh zG1_#lJ~){LQ&xk>8^WpV@X2z_2{|s*c0BAyj1hr^em)W@EyjcYj23pW6UXo^%b|`)XM*YP5TujaMqP(24I{LjjAAcgKC9sJ0?wQxNkelD zovrrez>F8Qeho?Wqm_eNDCwm7_{-G`>g&G9R@5f*l0f#>J_B(eCqHy`<^lMM+bN4) zxq;FGs}qvjUb;FGb$jH*wAa7yDbeKzM^Y(Ri)RJn^_fw$;fZ;U#8bwB?@0B#N>c4G ziBvlQh)1bi!hsD(e&KA3M)RlAUKLcN7vLR;g|r=x4^tLKT|~SaySC#%O@m4Pvc77r zvoCfVJsz|SJrV^9`@>_$cyqTg;xYgg>Vo*{sVst(+=`e>s`^ZqYDmhMu71(7259*m z<=iDZmZ@(w0(1^d;bt?VHZ&{>#)1r)<4{*;bm7SAo1nC0V<=hg?r@@9gX!65JL3;j zg%Q8!9BIpLWJ22204{J7die%fn@Z`d^S+`O9?S%3a>V0X^2`-^w&UO)nl$j!>tL|g z^V(w1hQSUFjfS#-TK_NBLy6q)&}c`<<$ROfC11bYW<_p0Q0u50U{^btb<#-~1+3eur)i8eSN%4=yMCc+ve8Ha9l3GPKjR(EboB zG=hrK|4yJh_Yd%a0|5LkS1>>1ihaK7vEv7b0eA!cx4MF%aqS)M_LpPZ6sD2_ruN_*i{zagfZ)VcO{ItV3r=kixtMUtDH(e}c6f@T*&!)ehYq zkV(z1TfkojbAEVxHiTu$+M5oenA;V`;LLDq`iMYBwpKtU&zu4KGPRdCzf+s`bFT9C z{Xzq^GLikPDbBN8c{LULR2)mcpooXS|-iq@_IdwYxn3 zsTqqfqjO%`q47f6`<&XCb*AaZW$TRL?t!g`ywzmfmB%33RQFr0*YVxTS1pP0e$k-q zK?}rI7t~8rme+^uia)isQJvQJ{9A+4QJ?2`OU=MI0@SmY*3|0Bc*jVi4 zM)h@q8`R4H3>k7Rs{uu(RyudWLotNBlTnDe`-Z?74?hJGheN;cUFt)hK=)(#bqb6? zgTXg+9{>$-^?@Qc%hN%EV*QO^|26K?{uK`S1%!Xsx&AWZ{?ekGv!Rf4J~#vOgBSmA z0RJDAX<5l_K6KCvQd0%eXp9K4S4|F2m$VeFMt?6C4hq21&ofB%S1V(jRY_oA zU>&G`)9pSKyi3;WhfVEkW1ydWrkJiKtSB=M%iSW3d`znuq%*B-$8|InCX1w~TkQ%W z`@1JKvnk)y)z5VQe)@Yw1fp`1XQ1JgTrZZE=SB}M%@mE7Q7P+8iI@II=1X|IBa-5b z1%qJtO>1}S2fzvo5%G6eN;#+G)JviOUpH)+3Q`hbU}n1eK5Ax%rFKTR`9U&a5Lpa$>#)xd=&WL5sU`&`c@wzk*MhQS&7n!qf zI5zwv{LLdsweviSJ)u*Wyer4Juo6Q7*kvfb10cr%e2f;Tz7ivyPWVO2E=j9hH1*!3 zcTh;T9J1IbBzmu5Hb>gvzeMGSxF-E8lxLv#PYT$-kdc4qrNM;XcnJs;6%>>tP=^E*uj*wS08k3L z$or5NnXidJPInIq8koO~EqX$jISFV8Mdu+3RHr596qT}rihp|>C>)#w%<4;#n$~x{ zs(n5yBOQH1-&9~!QNWSk7)%{HJ=__?FZ*oelRco4f6OL8^hzi}EC7*2r<4dNkIqCP zeHCL~x3u>#!AlK@0FJjD1eqO>WQ6Yr3yO4-q3d;o`7o05veT0iwl@hC;nkB-x0A8b z)3P(Sv9S{}v&OJC)-=(HR~>Bp{X;O7w_;>gYTLU*Ck(F0h3qg0f2r$r__Yi+COVggMr#81Dn9 zg8X4yBn+j(U2JHS* zHj*v27%k+#)~mYu;iH(n@Ta^U=-dIY2@eA_7J-5dHu z`+e^1gpnsFXzuV+PMGRkoR`Z@_m+LiS}AqD-<`*VVES&#zyXEvJ>tfZ$S-g9p0q^&ynZ#Uo9RIU8uHkH67hewq^s}xe= zhofexg~=LS_tyvPs&QszsB4%N=2GZeZwsqPGKger)gYtL0{3Y_& zrkw^vKhBc-u;>~73Wpmzm>Ossx)|y^Iv5)KXOn(h@*^Px*v0wtlV78YFdU*I7Ct}X zQtuCCU|%1XVyg za__W`_IgaU+&OP)c#{xnRWVn4AzCT*cMrhMJNi@6=`-x}PBuWK50>M^$TWVWMy2L9 z8S2Z^BTdx(381zRx@bsdux;!BxkQnKp}*JWwXH=H%Nf7+AX0V#Szv_7-A9^bOOzYA zlDXpnFKrEYU{W#_jfo*Y{e^O*ll?2F9}U7SzQR!>Bf#p`dSNLO1W@676njX7guSR- zMlp%93YU*B5g{t{;^D~+R{4=Iii6jF6QMRa8Y=)n5S@_E3#ekq(yDyqG=;Gi z!4-$3IxG;VXg;Xu`r-6_zczR4DA~Lzt;4Gr`r*~I=nE^n2T2j_+z`M0KKzy0?fvju zT=O}Y3N%+cV{_ma z3?Se?wEF2Tnq;(jr5OEUeJ?e1B$oS#=n%j_UwcXv=;EOA_@756@nFr67ns%PX=_k+ zU7`Xs|5DTUZ%A$u-N-euqKWtFtxI>{&37V=;~P*YTG;L zI@teb2x&K0l>dN`xSv8o5Xb_Zo%v$azJ6>FzG8gX>74BGsU*ZYX3Q|E8XB6AG_bIm zD>ZB(xev5#O}kkW{5B!?+;L11yrA+5o6iH>E7xbu=b8f^XM5MX-N`D}aN9RhT3Asl z#Y|QO)v+SP-{>Sr=*dwoFUZEq_iMCIDEoU&!?R}M!E(2~*x3Ih(Oy(ouG`+-++9u= z=Q-&Qm$Hf~S#vnz=KpLrJb;C^y+65a?=DlyDyZ=^s9M7jrVX0s5^cF-r>&vWwcq{t z`BZ(4&pjjp#l++EC_CPstcd%F_0IFB3z7;?-fLUK@wPWLA~E7T_HHe8Zp{5i*;0$& z{&=_z{kN>W{O0FRc4(n3KP%s+9h{hHxz-m=om*b53~X6)=GQ%EB)*noRwGB8d7W>* zp00h1cJgI&~(03H5(hyyG^oekY_~as|8RtoQWetmh9X z_)AL2Zxr+weY?q{X3KoY0psCiLNzruM+%m+0zjJil{ywCIA-99ng=;db_|XnH3mez zrcO%%6PAbS4)TaKEMIRBuBZY83UYBd*N|&Wr(>Tj9nL3b!^gaPMp}&uiUDCjxxi>1 zQzR%J;6cCdXaAU>VZYenyl}v`um*w!_r?21eMs6o@^}Zp&T^GDq*B~>5468HA%NSP zsKHR|{A{*}LW!~vUaZFb+?Ali*t~pxr}oNvC43TKiagBOAhbf6CkWs3-f@+yDR|y= z+~8)|;L7?9_P5r9p9f?k`%X)-fUJ?hjWM4YdExbAUYgOKCF#)FgeAeo>R8xP+2oIC zK7YBF)x~_-tW~$RF`v*D5r@Q4GtO&hexgI5pVLL5yr;P#5g0X5Do0E%f_n)OQ?OH@8bb=qiVszc_p?>lljI3~8&w-ZrncyD|t zx|SS6DMOS;`KdZ<$f_t%Y}dwZBVWKNzKG^j75OW+^f11m_D{5G@O$B$Og4C2LrSsP z8N=-BB{b2gS9l!uS}x322u>Imi|D&RjDrr6aL0_`5JbHze0w{dGqsbseP->8R+7hgZWF=Dsou7mw zxy41KjMR8BheETIAwslgh)bFqLZ<7|YKkC_JQPIcMw^Y#R;mdj60Sq*m4MVxHbC$w zjLC{Qs?hgpC5;i0^4zbGTsR;sEC8TE{W^8%(EtASW=P@iy-~iG{NU5v{XCOZ2Epoa z(+_Kotf}RSbD8cpdvA~?iNlOjJ?_%RCF$SKY?^*a6+C`Add8t?MY@xLOD=ulz;>;k zINB@u;Yv|;0VD&$*4@a^5(LIXqr|_ys9fLbbc#eMHgkX)=)9y zS8*khF4IdnJ&+w)6+Bmg)*JuD?8rn5+>ik3?k(m7^ec%)nan=M@dXqdA(Nav5S8xZ z>4akFaF=O?;qu~ghNya7L8`s?qfu+-YvuNuOq!MVtFfx8Y2zet1EcV&Ye+9D`RByY z@gi37&G=B2suK|)^N#H<2dF!W(W{^7ASN?pRbN3_s_TAwhQ7QadX8m8iP1VzWLPS4 zOy}Mx_)RUI6VKB~D=f$@*!fii__(}xb9QrkxmqE$MDr>j^zl2LRi%47zd0V?V ztA`1fm&A{j^DZ(SbyyMT%L9K6!j;(EZ&z;z{AX53S|a1V z`fyC8Qvd+4{B>5a)U|i`F!ufuAE-)OV+o^s%|&cSv4zAnk$?B?6BY{rhvA;+0-W(s ziooY5w(1S?FS~Waj%rz~cQQhHoCEsi&B;qbdWO9@lmZ0CmJNG;;x?Z)SHvHTTH;BQ z;<^8tYP@C~H>zK%@B?^;dP9>>l@(G<&LpQxj%nCP4{68w)P2K9Z(#)(-ELmbAE#ZXQXsta+r#sI!slt#7z&msOL|@K%mb$5Qf(`(NR_5lt!*yK$EzR zMLgwO(I`syO*lm~jVPF8R#25e!>Xn@u3kD4{cSm^Pn?=?*$2}kdwTGe`qH|m!i z#*-7>1gWyXgeX~R&FRcGs*$h>yGz$RS$G{Srl<#eO-Oyo=N}2&2_8yB*4ftKja_B4*UW-`+nLOglJO zPC7r>s~nT%aEdf06L4Iks7^)@va8L|s312Jdi3Pxq>L zGdOjqM<(ODDx}ds(QMuH^?pifia(O^3)g0^admJFwBdL?<<3OCXrTBebP>_zawE=| zzrl;k!4u(DsOsI+)a7il16b~z@$+_`JZrI7Ux3<=sRt)=^|EOgj_~8B!uVROMgvZY zx>YGY5m0@7G2b>Ggbf2Si~J&CV%D*!eh~&S(XAc_ELd8b+n|>o=bZNXg*Ln|<)_$Z zm4!)}f!vHl6ogryCw|<+U`&=dlg2X9iu1cgGE*0}A*Da$_Y_Hah$026#cpZJjTUE9OANc4ytIUj^J>AE#mU;a3i{bvdL$H}Ds&NlvUXOe!IUapq$hOEEz z><`uEzt))lI8ptt+;;Qr5DYQ+~bsLoX8r;6l_qwVPOxSWN?JbGA+4_oEPf4 zE!+IV{KCR=bylAd+XBWXQh)5sAWNw9o`YST-%ARd6&P^90OujQbfWNV03lMtEp0*v z`b&;cF|O2aehGlQ@q4ypvazy< z{SEWL{^J)E9~hi(d|!A%6SJ)g;l;cKvqZaF%5GEyv1Fu zy|z@Fk`$P}WA9FfZKsHE90&ha4shA{7i4q8-W*E;-=qtyo{xoF3ppfuO%*VT$2z21 z{R$aSmK+L7TGB;Lry|^iGsndVK1z=E89>A^6VB&jcaN!%K-($vJz2oCa+s@?d7$jz z%T!q*p__isPrsAHuK{vwid1#_yKVe`1l&J*SN~Ob&`P@mp)NeY#b94Bo`6nPM;};K z^=uanYNIvYn-6lR3wYw)7NN^*bwGl(&8)8Vrl0C!uk}1pMY9P$sr<{UPT&aZdZ16a zvGp6zOR%`>*B*h~GuT{)EIsaCyU^w%o#=48sgmo;eXhyMI&D{)umsyka_5@TPRVyE z*gx5K+C$Ry_gP88*7tUVBI?hCkG+l#n2xM}I?5YP?)-HhZN7be%)NL-i|M*1*y-bv zvB8C0OmBJ}2Iu81_Vex1qNknEF#Tg|obMI|UU$4}e>Q}(gg@pNlX_=2@06KXu8xg3 z)?cQZRwAfm#znBMGm5`8DXf>?9i8{LE31=J-@@HLgOP$whV}+$k&5=ae*yW^O|7rW zpUk+wyM7&U`!zHC@5%%8=Rc`cPwt`#3Lm2^^;Zp7Ln~ubE5pBe&;OH8Y@t=6TMiv` z<38_wkX)I9qp8kmve=hZt{fI5U~073{|?WGg*q8^1=11Tp-N@r>V9mxd-KxAMWNEf}t{y@h-4TxgHuWKV*wdV&&MHZm56mp;b7S@IE zYS`uRvdq@EUBjnWL)X8At*2KGX?_KWJr_GMs=U4T)3H<^_C@=$`ESSfl0*ca!_m+x zugd(?)w8qAhIbBRgSbZhctQ=B(c_cTQV&mARVqPT!<~#oyFXFh)j5}Ty=P-(wC_nt z^}PJ)hHlYF>&e&#k7~wn2Si%+G8VZ3zI(-?NOuJm*-rE+^pocFJrw~bLu9-QV$shO{we618r7b#4n|n-RjO!4$u>xxnl>R(y<;(> zR+zGHQ%7P-tz*TPzj?3z_1xxvE3lRS-PHf@g5cM*ut_gexBrI`YDN6lC$j!Q8NVil zf4%-37??aP^WoA6e6QY)?vdG!hA%FiI%~;M$O2$4g7Jlnso_h2#FsLiVG6-UI*1Gs z5L?AZ_4F;de@B4j+lGz>B+^L--Tn7Ek`u-?1!1l)3D=-&edCWw z)uqhq$!ddVV${IE&BG~cuZc17wbJiVJ6nD)OAs4OOz%lIpMwX-^B&3=i}NE(;IH}! zWy*dbyRJz#-?gMrPASUCpF3|dgtGYRcz(xOCD%n5Q}3;5tA)d0;Wz|f6d%z<9STzF z@>sWzO0=%wG1a^PMgoS5;p_^n zrpx>%*Ne&^DRvX*90I6&H#zg(>vTU}%JU(X;M~pqmpDp!dm?;Eq|f(QzUnN1hpVh#-Q+t zwo$L%K&>SgiWmg$*0V5PelMe7UcHM|a5yS0^rqS66ug#5h)Uo%UOL^To~%>KFS+iCc* zE&B8DdEK(R`3DLU16&wBq=csiLK)%d)BFRb(KZ~2)|duqpq&LsiqfKl(xTT=LETcM zL?7u_lSibc@S+V0V)$51GcSOCC-PqoJop`6R_YHTkN;3d{tL8owzf0>tL9~@tTiG( zdSBMAEL6N!0I48BYXRQeeq^2amm(TyD@D$fnzaUIl7Ni*gzEv@4pQMPcw zR0W3bXSM8~Jk1*2STX)i-nwssJce>@&Cg?$DCt9dbuaoT&?f_5-p-eoa67$2Jh$@! zEzq^Um4L+o9Uw$_<{A`~q_Oh!8%0~)MhDEsWWHt}7spjt!x7FtF57x_-2nv z@=@tjA}reQ+Y*jZra7R9%N*JO#xMR?z0YmOH^M@C2aD%b@aGYXDi^>_65Xt^T4Z%W(51t{q) zCSSa8n}&x8A)KSA?hA|@xxEKE@WW62+1-02!YRA@s8}1S-XYym$J?h3$4 z>f6Yabb*rvXsGj#=QA*8pf%keziG^9AQSjx?+*t1fCqpc0wx{uSt4vO(X#>ePJW)f zz3BDFDRsk?`L5u15!lm3_ZA>ZW)e5zi)Oo#j{7^BtSY%%r~;4tp1ZVJoCQdHmFwZ+ zJTneu1}mMT^`VKgsFnIfSLEJMNexZ0V{zcgFb62)_6qfAs%XIT*EH7DDgSCYRS!w|l_=OZ{Z^ zU|}jI;f+DVS0En3m=_m9F39$s;%*LsES7Tcv1zx%MmMlMK(J7S?UL43_vxy_aM4-= zZhB;b9QqmC;#9VD_N@T~ecBr-U29XqSAKnKGs^GO&?b$Z+ZhruS{fM(_(Qc18> z`R3@>_zi&-rcW8ZSH~N_HAmYB{-Eyy^ z1t)Y<6Uh!scS0HyRn@%<3a!x(i5Jj5dL70uF*qkr(|ZMHsW49-`1*R{ z5-g64-&U3jKKr8B-FHZb<)wj5S`CG6zE#y43NoVX* zem*k8?|N;GORr2PmMe3%5ZPDzUxV-{))wwBl*F;r8|}FY@aEwF9jR+PHA1C8MzmY58K&Br(3>t!OE+?u%Mv?HDRrfXrld@_pr*|(l5s93x zOnDHK{}~75h{e)^_mk%Z++ZAux30x{P(SpDs-mLYG+r(W|MNCxM;R~_v;mPzh))?X zEn{@t1|*PCWCsCI;)!j7&kMGX3VQM|l1qY*FZMPwXefyf2T(qNk2!R_VH7ba1>(;! zzAtUNFra&eQLGq6v*15_I~+nfmZ8z@!ky8RW3HRVsN{L zRq-!AH_Am;cTvYHYU4Cspf=k0bUd$gooo@55%Zm^n;0=%_<-g|P;_Kv#Rj1I$f6hR zKv>YrWiU!FOm9fEV@^P%HiCQf@|BBiV1X9wLwF2()Bm`|!ZtZUo;#qH@b$l_+&aE&M9bnk)tn397f8Daz^fRL<-=z=4|h<^)n6IBJT_+V7vNn2fT=&uCXPqu#pGS59*|&cd%u) zvC+F-7O(V%Wruk?+h+0DzMk=TN!Rx8o$a0WW%TWVc4_~P48J@g53Wy9&i}nfba^fK=ZB_ko`( zxP-9t8C{O>Qm)A$AQ~W92V*q(NOKRQKK>ay0ass9KB0QK_}Z1pNg+MYC1Fe0UXC;@ z{btFdb_nZLagv!5Cb-}pQgA^BKbM=L`yUbaLa6m+Rc*;$gsIYdd#hIDf1;<{ z?97iVBWHX~qUIaXlu1fT@jZZsE{B1S#Jun7%*%2uau^w@wW#!~G9|YcU4P8j^OdRv z!5x;F}jRg0ia$SYq%`Yq~2z8m_*U8lFtgyQ09@QQzV-zYn}*eRyyy*rC}@^fi)v3pqU zd8B}&9}zYA8xm5PY3nBsys!Lrn|zYR_PH}*BUhuAoDA}B)6MeW%GIQ$;Tr+fHqs%h zb7Rh3-DA@>d-HjV%c$NWo=c%}R872LHvHy>|TY1@+8?MB-{};Rb zHygHrmPflN*R}ak-w!*2ekycD4CcPz{LiYpl@*VlW!(NPfirto`d@Yy zYyivtdfss;<`)@;3rgVGU*qcAv+Kx4{cz$*E6S7k?C3~^G8`dO5(=mJ6mn&~IcJD% z+Ht2a)@UUnL#g%ng-gcWE6H_d6T@N-0aqhs&@8UkX#uO)v>eAEHc2Z~&R_1^J%djD z`9i4oOPM;SHc`fw`>KCo?|c8Naru{TGpG;DY*eoQ3Qt~#x&gI*evRuuhg{!OOn}Z|?LaU$fbw|-G*+Detxt(Q=}E1R`Jit^-aNVg zxAkd!tliy&>@}AXx!lssMrtqySSr~6w>xO*xtb)gkF8AiGfxU9cHc`wr3 zX;-m3v;Vt!!4lYIM9?Z)1;uQ_{+?jq<*yF1 ziFS&R;T()D7Dpxs;++T@RA%+_N~YJC%*GwJ@_G?qm*Kq~pQED(wWJclIL4 zegXX9Tk{b+hhCu*W!*qhr`Ni;Cn@$EFsYK2)yT&0i*uGzAq4}zYDg6v{>(5}s21}I z`2ePEj0<*{Ko_%&XM=lKB80EU@ATbfwl2v2qCt@7#C8sbIk+SilY zxw=eX!zQ?0*V#XktX1MprCFFij8r-AZ778_{heb^e$=1DUvoK)AMn*fHtcjdv=7;M zskSxh;X)Ws=N^04r}zb*%AR$!`;lOdc|sym?5A7`qBU2{^{9;an-q<4$iZigB}huGuwzmngko`HR1JLfQk5C5wb`aQW#3F|l%C?=_T+I>dwMz#Pm=q-r{bjj`uaOQ2+dH6L%!8c1 zCq4U-bg+r#U65JCHyxf+HSBX!4l$qa_%e3=5P7ZSb)O}}o44t>@!ToF6BIK<3ir;( zA^+&1mut+uc)l<1sv*7pvCZ@U@=M>$i5qNK!WhveUB2I0(K^rI0-7tH(mfX^lS~+a z)Pjf>!S;Mx>?dcf^+`e5CB{<$c8B|a$0_yYbt|YqAWw~PrSsjA)`~}?;;A4~@{FgR zAM!06Gn_yWju9BzPxHMhD7`565$IbKc$}M|Cu3EDJ<;|Xv(pcV!S(V_V+f4TKR@=( zg>y0H^yfR#jEZV+s66=}wAmhZc%&2yR{BfvH)Nk=7uTPEAq5rk4elF;VC?O~ z?_k8gnc%GSb_&@nYj_9?N`obCAHo(amd$QlB435E*r_ZEHgCKKs_-(yx!SZ;l^?J> zgUxo{V!ReatE?yT*)A1^nBv42l*WU_dwaPJD8Dv z@BH3ivF=z<)C~8&ZYEbh9fUU)#*h6#W&{35Ke(GGtY~;G-HsaMl;mKgltbCuCJHE$ zt;C*oKrBU+$daXK-cMQc5>_9%!Cl&_1nVQA3=(rN#`g!KZ$H#c+K#c_&-D!K0+lSN zBZoiNXklCHFUe(ubfm2f{urr=+nh}|;GI~G&V!*yRT@+4&q#AXh|bvuqnA6@bA9UT zM?w6?&2YA1JVBwJZ)k#_KH*SBsst-pxjHXp7)+O;>Wy(e^5f#0KMJ0MF%f%}Vo%U9~Xg9E1gNW87F`vstr@ z?B_C&N-qUM#D~9l$bOnCL+v0ib@x8u-Y|oVz9|?|@?N+;@HNBbAaZ7mh<&di6#l&$ zY?5S#bGE6SQQvX_*#jnF^qU!)ih**JayAS#=R**C)3FtbFbm%FLunwF6S)fVM+R+( zH~hP9O?{MeNV*7-7<3S6f^}Qb2d4F{5?%ITg3HLVvP&dw+Vp#Ej5C0hxqCf?IDtIk zG(d*hH0*K!3WpuT#<)9f_xJ3=(k$R6Nf&tQl&B%moAc6^Xp)zw9gdY4tAO@30dIjL zmrLCl6_{g$OY7n%(;qf*m-zBxYN+Y$LN;=h+kTRR%xE;m&HO5vG)E}Zf+h@`;S7u0 zD_W97FWtSy*rhi^qrkXFtpNsAISaP&YQWHmNa{nU&4ZXzixi*ZPLXAam#jMqf`=WB z6`1B7A<Ax8lJ_CZn8$=31Dw;)!d0(kK35uKU@WQu0YX>f}2#6gRKSv)uf zlnY>}HY~LbxwlZ_1)ecQS^NhH{cAQvt~f|UJR4(#hy3@>^{b$zex|t2i;!a9g%QhU z2ZZ^gr93zk#Huikj5zNZHaZlhyf-moguO}}wC#$L*;(!Lfk04+l)zl0qNAHGm@%iHVnw5zyO zBs-{39>&S1U3}U1Ygh#P=+~{U&X)wXGR2iS74>EoJt47r*zy)#n)x6mf@YAD8Y5<5 zcM}|CC3?uwW@Te|ea|W>sQEwufBnPyjwHu)>Xpk(YQY$B9~)-eomYmkH$Ylh-)&8= zTKYu|264Fp!?p^sPAvDNx(-5AVuVC_%5@#)MO+4E&kT3oe5y%$9mJ-7RB8oEU7D*W7&5N^9g%t+ zylO<;8g%;@pyO3@nXpyhnDUiis}xw54N`&zq`r6+W_-K;%PIymFdl|_+^NizKRCKo zBy_atH*1RXZ+P9d-(zLz_blywsgAL=Jbz_OwnO`22HVj7Wb<74vlynZaE^=ay zHf>zomYVfkwH8~2Lw4Wn&#&g@;60-Qe(5mq$u4%UI1l~WX;^NL_(9QV|TCB`L{*d(p$N0E5tfaso@)#$g2;)dgTG0y^ujqJFA-+>3d5> zws7yE3tZ0{0`-&O0Pyc9dUgW5Uohx9i}||4XL6yk9+D#f zaD{g1QQ%!201IzVvH=i?3Yr{{ON6|4-ud z21ON%JYW91>J?wPYya+A{(?dIzq_^@l5-b8rNUeu%jt+<*#9@~{(my(KLL}+!~1^$ zb9m90e*M3LCDBo&@$bR-vBNiVxc>MO!~akWu%@JyUB=-53FH5W3mEe3O}`Z%xtevL zu?(Zw&qn5y$H-O0v_1E@S0koTus)kVBX1&HAo zyinh`PIWoblzR=iR=*7Y+QLnPTw)Ul5%$QFZopy%0KhE8hjLzqk1Q^2ACNP}U9V4~ zaRDb~F_5Nbsu-T?fav8s^s){qffYDBpw0q;T z#Q`8^hKqw0J#hEc*FFL41n{4K-%$H)WVH}z2!1a$!(B_1b@XbK;Q-B7LkjQbd7apf z_g+5$P;g9Ox386y;LUZw4}sCs?P=D00cHR>W1P`I1ld2@l@BGr1a^@Ei%Gw)<`XQ2 zG`Rp|Q_h2Z*m6s)!KAVvh)4deENeD{f{GLc@E=ldJ^EUgj-oyQLQQeoO+Ta}9{JtS zmlnbZ05LZQqj|!EgG$tj)AxZ;23+dxbk}z()i=PY!Co0g;{BS#sgFxMczNXy6OD!7@G!D_{DSBMz*XJLj5-A%w7d%td8TAx18C2x9`7d^I#j} zR`EByUje96812ZbbJePYOG&P`7~Xc_N-|L}k5dTZdG7g+HfU*ED|`V|z_~%*h2=(B z3h0`1%K1|2hrrw{XD|+2Wth1X`f0(l=i}fF2|yoN)oSx=sm2oY zA9#RtF9`3}JU;R+-K|Yv&^c0+N%G_mg4*jq?V*DBr@tjnlvwC4XYI!Vc=P<;pWF>CYn&iD zYRHXG1DknN`zj%L#WZtno(1&xU-Pv?6im3qU=kTeC2--Y^#o z;Elm0QkU9k3sW$7Ik1=wjKcA$D+utZ0Di9A%rf#xB$M!YeWYjr)2S`sbI-Nzu;Ut` zbFF}DU1X73_$$DlO}3!G(%@?AclvT4xU8B1Z&daUsU^&$T=9(Zd3Oqsm?I^^DoOG!l_7lO~UbFt_$LD@S94u1`%#{~}q; z6N1=h`QEL>bvN$rghCd{WZHHE3U?P}Ad9)of6i%&GsB@IimvcD_+0We_)DiZ^V;oO zJ*9NeE;WO}#q^0NAI?m-{y)+vkJjC;%-E@GGNPD$hegY1NO6I$H1oIns>kVfGk0SP zna34Oj~ys7ImyxJIls*iA|emc%)Fi8#@&d|v5$K1)w4`gpEmG9!i*i}N7%<*;e^yFU$bCB>p!F>vhns1?CXykSB{L0GYG6;bA{(JVhJzrjS5 zO|ooipc9$kFdOxbER%-9)NDnuQ%w<4oW=PnU-DqCea*;AfnF-Wu=#^7t*QWcCkU@ z)uLY;BFWu8q>v_6f060EOK(Jk?VY+ik?iCp{fq>w1M%@LA(~a}dMhzUjMaoFOGR-N z%RGUGlS9Qn5{9mKf1^_ir-C*b*>c;i1nFPNT)KjeSYW@tt$26UcIB`ED%TEXR`fCOz*S*1vfnt*?I*_BItI;g>gEVFp1qsGIx$iGSu!Oh zRWfz^-gUEDoUY(@IU9$0Ua<8eQU1|thFjV<{3&lRa%dX+K7aY*?PK4E`TJacUM|2w=T|^!^O|9QN_Tn`QjhR$ zTYlhC8j`t{Yu;u#ug(G2t2W%}))vYk#flq78@h}=Y;l<43ns6jlBw40h8JH|vsInL zy1SazQ$g)&q|Z;k2(3Dey!Xj1u^rwc_AmhoOeH8_;ichd<%q+A{Aa6dYS*xT3`~8< zVT8QrssKz>vE_*RFnMO+Y(pMkrM!+rbF zh(OX``H|C*HqK?9`pKcmHj|AoTSV(~R=E1Bkmz8jZ2}cq;+^~{S8m>7{2>#xD_}@Z z*hfvl@SEE>yp@s}-iUPL6txz7+9Wb^N|RfVn1+@#nn{Z{fAUyb>Qq%f`!t-Y8inIb zeqo4Xs>#eAB~1{vH;KBtoYz&;{Nw1YLd(tKjMMd4^Q~e1?2?8s3WX0B&Fb4h_e;|G zNo5+o$x}lU1WR$dlgC%H_liSVm~xV4>{ku_svp7J!=8|t-hh_*h&MeSQh*qkc785V z4C7)?aj*0EyTfcsi7lz{+APNnV>LKhd3~zTb9F{Sl(goCzkHY}L}zwT!l@>w`LlKLidxPX0{>*Y z5U(q=keHZ4{Dm5|)aU>1I>u_kX`tVnWjE#hQMR2RlNk|w=FO2>dumpFfy~s6a6iky z9|SV>EZ8fWkklMVCE0Ymd|<*)9)}O_kG_!5S^5BR)s&` zxOsb_+$3|U3cmN3JTl=<1AO=U0+gu~RWv5W8_crgr6#0VlKk~PM>{SKq0>@5z0j%E z-RoIj+y7+l&GWzOW+lgNFF)rP3Q{@9JG>x@#BhXe6;w@4>mb9Q9Z{-Qy9TE#~5K-A*~%riQQO@^L?Zuy_9 z&|3W1_!7Ua17aG6tYkwd{}^$H)iJ5YoN=StY+{JO5lKx#BdeOeS;N zSV!k0`GP~MOlCi)Vry2a;ztyR3Q#@ALeVGup8QeN=zaByFxw*f!$eZ7A4H}jZ~Ke$ zh#clPFw-*3vx+?1dBp9@${#XS+wGcMLR)+gDO41qV;lS!%mnq2!5s8fGAG36a7wr6 zbNoQThrt!+g^K3_l~rp|Z#TM9PAU&J3=B%;d{a=c1^MyZWtFh?IWzvFqNXYwq9re_ zG|FvYGKg@b*<0$(DI4^;Y{KYiVYn|&KKM&g&V2Zx@W^(1)wZ5%2a{Nl()-bu_HI_* z!Y@`clSyluP38(_SNropt=E*9)|BCkztzHf zO$aeHE_a|*62HnEI&=c&L_Bz4x)8oHS1NZ|=+Rn4c`;@WP=O0TrRZ{+1n)r`O##PF zho&E`IRx&?%0ES#VmXDco;-f=P*^5_7;BT%-qdDVbt|)^H_}$xqkU?M6YfPf`AdRJ z=bT>6_Bt9pfiN{=&TLBfEpj|H^lWzU;TrP3OakMpLq-$$&leukf4@O2G$jSMx1%%p z5?b5GuhbkcLNR_3w$Hz2u_h!039mEk)0%`e^W`dduhE!l1U;cNwaRQ~Y)I!P%ce2d zx`s}7KKKdu_$5VYS- zuFjP;|1RO#$K{3E1>2g@8&I!m;CPBsG1SV{%)VbFjL0{@f`vAMt%3s zAwFdnG5Va)$OPU!dzCF9iCOoXm>L0`S}b5XN~Z`{;IC@{u868BDJHlp*vWEE(8@@m z>Q~EfDB7s)0##8HiMHtYNL_sTF+rMfrL`KwXHXG(Yzi#j$a&lUT@_@7!B0co0C^%b z*j}nKh)=My^muip+lv#;9UMyTA%6t)-{f7%g1UaX=wpHFCWUOZiA++uY4EFsO#xon z19c2=ehI_+9iE97Kpp`&-$o2MLC(dGfGF7)V!@0fr{GiXyDZUa(#C$`95ZlNX;l@; zqylS39!e+g236JYR|MeAktYYOTix=_OiN=xg`4H&c6QeDppU)lm9%gbV*oJFIi0k5 zu7Qp*1NKJEw%`9Vb_1?r0;qVG+z)H=DP!VKG!AKCDnbup$L~<1d}{blf5F z5kPSzrfalAgq6sH|6i_%L@)+tMs|CsEJchTW4;6lt&w4+w}1>o+~2|lA12lEX^+PP zr25#t^5Swop(7yTX(yj29XXnO3g9Zp`8L2K!Mn-1bgtHoV#pG!yg==(J;W*y4iMJN zlQo`!nWmuFL+&^EJkyiRAO8v-)D61dw}{Mcz5kfnw8 z-U1{_4}H}i*s7k#WFSrCSlaj0-a%1sFM!rl7ysma<19;s5BJxN9t=Nuq%2$msN_Bh z9CG8zFcs%Dd1S&jlQ|06jHqLH&BSs?)pfRl_#y@BIdC|PWDuq z09qNGy;h&5b5#)_{QiV^@H3VGa3Kf~ad$1CK*jJ#&Ctc9@v^!KJ6v=B?L~~AeDh-~ z)4vJIeV!jh4^U4vw$zjJ+f9I&Cq+}?^zfZ2V6RwQ#+D3Ax&;_r&n<++ABJuLU1_fr zuEm2H35cdbtj9s39{6qcO4K+)pj}P(>p6_sM>Q7V)poUe*Dpt03O$qNeshPuSEFQ2 z8)u0xNNt}%Q#s{Kya@nIxYfjQLQnrJ?QEKf$#jrn1GfO$G|Lv%CYym5EfnK%jRTcW zUSRL~6lRR&5I)5PJtF|(Av*QTs)Tp~AXbF%^@DIAE&%YcV>wz4Z@%z)i&J%OH6BZaJ);ikY| zR9uzU*?FJuhS5y(<q!~b{ZIcTUdJrkcWq}cErK&I%I^9de2*ryr3w{s7v8`Ad_At{ zX-NLaeZu9<*^g%0s)1jU3vvU}1z?;biVqiT*mdH~4Yiki<^G`(v6qqqxq0_+r)O~f z;FIF?pAEkIZ@82B^*V{}jGcC+wq0!~4!V7rv+Rt(2cp%_RbZwC`I~&dXTjWj%%oz^ zbOhM5N6Q~!t9@oxRu&|IQHO~~1_`TaYWm`40Ls;Z`&PQHH`$FzSSEAny*%j9cH+s? z7lfGg0t*q>+<^hPrzgF`LS{1xqnnGj`gG)DwZQ-2KB*usjHUjUQEA@(|k+{m0y z^NZq!RQ!|l40kfiA#LnYyz9C{c3Hn5Z9Ve*ZaZOrM6s|sBevxR=)g8yg0}{U*=CCS zUS9kP>?Ehnx|H=@4!%?{6FmjQd}J*Rh-AbS(Z{|jy8sgSVRI|CYWkBP^=9kFExhGZ z%(c&fiR6jv0S*y#Iao|~GXYR-JVKF)e-_Tu34oP&MvAh{$62s6uy#OBUXO6=2xxqDD?(7D|EDK`ov#Wh zy`OaA9v^h)2q@*VaTEWsrebs+Gxpbfs7KKyFNg}v2jkB7YwmZozwU!9>YfAqa@A*o z(-TtNEmg<)M*?kgl!0czA6NHF~WDOOwhFrhG1^}CpL1LPxs81d zQq>49dCj9?U-*)dkOL7Dcoo=bn|#TQ)2KC50GPG8>E4IF@I~Q+)=MiV^-|*dEveZQ z+8=)|yDg<;(Cucp*-JyDOt28aw!3fLVc6>Gkv=KtbG&*B6aF!#6 zbroV15wlt>3z>Z(Qb<5UIaJ|MOwMZ4I1zHu0B3q2JF?zF;oaSbzl+S!+pA#@fk4`; zlI=yiTl+AwLf+yGr`lL*=5ilX%n~2I&3oeA(eQ$E1qtjl9}@}>wWH}`rdyaD*wsfQ zsOfyTHWZT8hnGT9AUYgggdqFya!m|M`SuKC=CId7I1j$|u0ywP&Q+u^ihN8j+DkUo zr=^cZ8tDSRPyQk#w~s~=>8{tfA8TLRlwjbkx|K-e{j!fn0x5wFzCF}#;ha>6(L;nL z(VX(pDSjQ0)%9VIT`X_XUn=l97vura?Zuoayq_q;BRH9KNvE zI*pbbvJQ~;fdP=0k0x=;6clstzVy3DFZgUnI@jDy6Etilb&C{SD-inhAxwE zT3aJax!T<6)}e{RDk3}d#=+NTDhZ+Gj2U?$@*r7W1_3tZvj zYZlhU%jq)6?*5wh)h&We3Ml3N0cM?V`ghwEP#o^C@lUVn>5OmHkNJ&DBbok=Xc+Q; z+BysQm>i7Q6$Jmoi!cSsmykK&AJAv%7b&!yh(#9&*rShsQ8I_@J0~Oj%QUva+7-N&MsB zXtujZGsF-SbgLab@O)vM#b?$&WW*RF#Gq(k>$&nbN&!V(h!MU~znPzPF2y(_gEUZb zcsa=Sj>O{js7!Cw!Gb44g!b@B{UW)PqL+YoT5`9Mr*|T9`o!n+z>{#`c+kiz@$*Zoye!ec34^vXY}rY}ub(wiy_>(6kjCxX(e!CWEwt zyQ+K7mo-T+oFb?8QaO|uWqn}_aD)zvUGXxXK2FZmNCuBL#=NA)%`L*$jJyxansgWx zp|(_m4P2B(lE?}~qRFLfr2&q|BbV_sPQZI;KmnaCC`)02@!*pcsxO6A(IwVPAzwpZ z*8B@~Ipi#q;|!y&;apXOnKM;Xk!3W&=;`AYWp2n>-q~FFy30)&QIi}6Vfq43_@l5r zF$l5@FUfG)G^JvE#Bm$XrSC0uUm?ysjg5ba9t_5)0gemKnTUgyH&OG2D2Lw54s=ch zx#gaZk$cyF6u+vj2}+d~VtkfMrlr4k$?VL4%e6~hSmk3D(UdCFgU>L+2Dlp@A4*ro zCr)@RPbm~;J zH#*Yz@a#2Kd=cdWxHdjn0huu}u=^H$+@R@A1CX#0#mP)J4PYRjBf68j(^V|fAdPCR z3aImf`3_)@we*`8bUV&HOgjSSo`6#ZCi*eGc)H1|Pi+Wz++g3gvL?$RPm^g0v2Lz*#U`U9L1B=(XU zEJ<(sMI6ZX9lnr{Qvu8_pj;RqUa1BUDF;hA_+)uR>d={FBcXh-hG_ESR=zFakN&J61OPg)kCSk&hm=uAO_O#ZwX;5KWlP6@_ z#>V~+$R=W2%d6A43HbY6B#Nf6%&|S?5FQrRXB1yr11*rQEKybG+ugy_AHm> zSBB8%o;u4HB`zwjWCvVg(}ou-Raf;0A$-Hpw8ziN;$i+iI?GF+n)(- zrVm|Yx!gf#&9l6!K*s#SB%>qc^uJAD=GaeP7Fs{}J>NK+cewM7J;Fw}&hsPO5BQ3l zL{#)jJk)ma`-xG3RVdXsXOigeeDp=}vOV7{AX! zvrKf7Jbq1|7>z+a!PSKGJKmjj2#W%{T(d?6#a~+|^}spG%kECWLaLmO`}ebY>^~vh zSGYfQo5X`wa}7JZ?TG!s8nii8`5^Acj*0^pb|H~naXRga2JO{q5Rm12_<5*^t?+v~ zIz0kDI{p04S;Tp(J&J2MyT^V28LIod?Qz|#HX%e}SPZ@4YRLUl|LeU!?~4w0ZoK1- zIwcwwdu{7P3^r9ukFwlK8G6Q@cCI+wvp$og@7ux-hWOfWkGR42PdM(hs247w{@=W3 zw)TqfI3g#}HH_ct$b5b2jM4T6c=piU0Nih%Du>W7pK@lYyK!*z?Tq65TMzI4?qL|R zh?aE<0e(g;V*`Wt?lXC%cQ;v8animvy65INXOFn>-xYyZ!=UgtGK--^@Mjiq!%jFzNe}RaMvuMJ>-{CA_ z<14man<|Wl^1nmFIcxqhUjVQFXR3I5)B#^2Xu`1*kXb(A=oXX}P!yqbYJ|jVJ5gb>v)AS48&~exwxLcdj`n^JJxlpA5@* zW;>BmdUkR&R3*+8YM_|M#TmnwvtH@Cy$KS!GMlrUys7|@dJ^O_^ZKJ6=KS*IzSc;0 zW%#b@77cv5n@=Z!<)4M%xNV(r$DCVwaY0H`tSj_>=qLI&_k7L#N~Yt=S-|%*xk|S4g{oKr#rg-WxvOg`DW5@oK3f~&af#P~wXPe<@0vr0o)F)4bltdf^dBDkO4 z*HLTvxQa$EXE)aTDt!8!Wu$J63o6rO=ykMcHT9eZ4m>NI+4g!U4ZUJ{#s=}(>amzV zyDDQ}^PQR_k8hBuM*M8IkS6-Pd$Z^3{F)CU{OF??_{wA4t*8E!FFU z<$J*PG)*}x>+HxaUkC0>+Vxry5d@7|>hz=qxpJ0AKPnzbxiq~k*EVzDBVuAQZ;wzk zn%u1Y()iivU3BjYrEhH=lv5_+tF8@E{=}PAXZn6ZMCUx%-I19?Nn4AI=sPMcOq8lB zYwq;Ey^N4GccBpVq^sGI!N_WlRI<$Q@|{+kk!ccXWEb0nN9Vzvno}ZZOYD^ON9%bn zT6ocf(fk^fhr4|HyNbltCmpQ?>|K)+GFxnXJ6yxhgQQdD{XIIQ+Z`+9TAd18b8gvH zOwi1KaF};Z^%>nHTD-40Z=G8FMb-AS{|DvDfZUdQC_48F-q~r0n?kch!XWtM9*o;b4?--(N2+2C4US} zKzc0=+$zreL-)b`L%~k2ZpA+(9zQrW z;L56n%`qdlXLFMK{<12kJIdLZ% z-C}JQoA$KmK|fs@e8V&%yTJB6PXHfNg{Hp|-LhRk{R*9_T@Y`NU4eeGZFA-n4U}r< z16CkBj(z1T4J24&&$%~wDoJ9gp0 zoY7Dw@WUjus<`d(|Kcr_-6JK+3??` zll(m2J^2gM(gQ!Q*lGWqtA(%KgywwrJYGw=6B=|D)O!uyGGTA^lyNC)9IANZpx8t) z;dy6Yi-5*AI(2y9g!=K&hq(*=ir60_*axlO;`&~k4C^>B#|7QUtlaA_Ns-28by_xz?{QT?fmTbO0q#i<(fW>tbr=1jPl@&kSgLt$F@GLgr5`slW+EQH6N9B#19nyq7!$&wvS0T(S5 zgQuUv6TW2@yf-V_He-ZJ#Z9%Y1VmEhtrihuuRwO9x3%V}CAeB?;6<^mq1)9#jJrSA zd2eGaU72kCWcPd2)$1iGpo47Be=(FTwHBm91LMs1&*WE)M{j-7IfylHuf6j^e$uDk z4IK%wkX|fTR=sTP3$cif?tk{yDUT+LnW$!~`>Ae#v<}Z3Rb|*gt2fv4XNPo|Q|&usAIHCTXZ{8 zeI%^da2wNh-Vie0TI(4x>@U3V(1BfWYx{Jp3+aSBPl>8`kJ}LOYQ~=*+qJG7NHu=S zO1&4sQ8l<-vz|}&rmG#TH7%#5S;ifv`98ogC?DWzvF02?y{0y} zWyA8si~WvYAfD9vi@WU*(jHz_AB%{rjCta%DV;abEnZ-L-O>IZYCi3{+49Ir?Rz12 zN9iOfRpLDbOR*;D9Mf;&^X{a%2$p)t56|e1mlErp=mVoj!KYYy4(|SW)BBT@>E{LB z!;V&9MTS3aa2m5KN?Fq^Q0l=ud|?~TO$+J`f8)Z27(Qrfe>HwcHhf{@*byHVY%IDa zRsRbU@nGbUtt`(>`PsxY`)R0$JF$~s%%M)Yy`Ya&Y#ZWiqUs+0#8_IW*u?0h!YB~O z7OrbIc3jVF{e>&)xl4zRA`g+?NyT^oZnsmzr_vWDfMp3;2an&o*bHRva-2^ryGu%p z^kNAyUm(5pd#I&H^b42$C=!7-r2PcS9I!7~0Z)fNFc^s2TibzM#<>_#zJJn@R!|C4 zZF{9c;2uuDHmGrp>jh}Z>w6(@9O*Gym#Pa~w$E=L_EI%DyxiAz{D~>8I8tGh@uRfL zZ;QnQvq#i8*%TpPsdSdOG(Ojpr8XV8x3A+&NeXjZ!?3}3biZtuolVT%!^>979+Upa zo6hc8{Dh<;@{r_6bkSM%UBx7Mp-lpF=)mPl&ls{6LH)3)9qzaM59akmBqR$$Nzrl# zZ;&3vc5!Yb>qZYQBlyzKt(RHI1=%PkIq6QBhoiA%k9dK=1y)fXGx92EV4(`3FK?I_@FyV196aUXV=0niPouKRdF}j73n!Y zKFIRR=~?VY%Ano+I4a{X;_|ZcPgCKRY2a#%X}IKNu{3>#Y@H}}p-~?H8ht;w_(L2f z#vd26QkP#XTxeoM03Y3Ruu?X8w4@<|UGTeyU!RB8*`jTUK)~^K>D_jW`kI$~7)H|S zQWGn*k|M!XzDs%KlRmI;9O;FqBuzc|j@gsP2W#&?zKqSqC!`%>=nBUnvGu|)%y`iJ zV}UKB_rY2#^LLNbU6k2Ri$C|uV~{?|Q!-?sV#| zqd%G6O(pe5qDnEhLgJ^)Dke4Q7M{C|Cs=u`d=5xEnzvn^_mRib*Z65~q(j;{h8=jp zqYmll2ii9<1>yFt)?hz0?27z!x+&!uK}y$PiUBxB#KoOri+GG7dzZPV7P^=Bh3HR= zg{eDzW&UGt_w*=1u|U3ma5iAeihFp`a|ga&SkEBp0+Lt919g^nuLxxZ(aRN2Y!NmLG6+EThF$hHa+?FuBoQVyAX1uE4!lV zmIG-WC?LVE`1Q{yAGCMgGs-J;!&-YQ(=5Lt9uttBrn?gmJ589`?M1q8i9&iU?>m9L zLtml4B4`N;gP%cg&1}bV)ZO-3%}=#MFQA+(UqdNPOYA8TpS?323KN}`Je zy4}P23-LfTRlNZp%gEE{Aw|?s3V&V=o7>(?(f7%@k52XD@2U+C5$>MGf#~~d^ggD= zM%grBH-FSOW~eJ|1LCj&fWEt?Zdv)Og%TvIqXtG+DZ}bk-*H7M(US2VG2xYilWfjV z{55@FxXV`w68(Edh)^U^O>XgdclCX$aYsRK<{oFyU8}mjs~wYc>d{2`$bArUX7&~ zTp65imWB-&6g|UVS$WLuqr1iFB#dalS0l7B&2m$v?jfJLf+dO$@m?_HTBnzw@b?P1nbL1%-dsAg<47 zuRer)cg1oMN0Hw#82&0|8lW^7%z9+zLBBig*VEz&!*)T&wJT#-(VfMduG>junf* zez!4WbmMW6FpWy#i=fV-=T$K$`|qNGdJwY1&m*qr>(+Pd_HIT8vVX0NP+2?skSylwdgmUO?eu0t_V?EnNc0P`FQa0*o=UfciXnBd?L_t=VgojrM$w0N**y-6HII z>p}!07)d7)FkdpA$$z-!CCe*O;@NA-W_^q5ZaXyCEis!oWfAZW;&W-d*rwii6rsnkf`LA3w!V}^uA0+Yee;q)g?*GJK&y=~Q9!VZuy-jK z8RJ!&_PF|H1wY9<+?eIGueA5og1|3w24uMAYFWpwV|Q3nBJy7e4U_TDmxsC}e@H9! zlhz|EO}=aQe5~a;jfNZ8dm-}c*K(6P^oZp&#W~LmXMt@m9Y_2R%=X4(%XS} zDwMKj?^K*Cy34jSZ6BpMYj1%RG&7l$MeF(JTp8u>TMdsgXG|~QF|S5XSjX9vzA(aW z6AkLV)>6)im*zU&|Pe6G6N=I@~DluDqOrSyDmA~4z+nKNQlbksdYwRC=5|M|}cW-%NT{)u8Y5>nQR&&7<14Pf{-AV2jxODZ+dj zf$L@4o*|}3e3E^Zak|crOsak{WU*LntxLxvZa+Hrj=8RsXm-C;U@69#75}&29R|ew zYwbdV51xrHAU>kxQJ?23-q)+;OiFMKm3^Q9DCe}%Dm}YFbiJy?_(D=knKQDZ-f+rO zW@6%(RgU1xJBpm|1&JM$2?Y|Q7RkjMI>*j$JOUC_{2BIpGNG~7H?MCK?u!<>P?eFS3tQrq+?nDy2kd7$MQX28 z^gsuPLAl@WP$p2>X>rk5k~vgsj4idb`S@6;W>RksSGNU=Yj8PE>Kc~3{z-W+fvVxf zeQwPhP~~+>d_%zo)hIiq@p?w)(Zc$tjd$?%3KTy*IYDOISfA-5tg_;}c{ee>umORQ zB?*s%z+ntPTHd|&n{77QF`z3cVIT~@=io2H@r!O{Mp7j%AW6X;&w<-rssf?=_AW*){Yhbsfq3D5~{wc5s_t00;((@9D^#F zq7T}FWFN4i{J{cCCQlkvvWpRsCdrBdH}4aLdQ#K14oPiKcy5bzaI|K@qi2}yRYdY< z?yPq13lbdX3U#GLo;G@H*+Nq5Z#vIk4!oSjOY-~zxhFHzOd}FLZ~v5e#Lr%0+@Nos zO}4dv#+F!#@8`qp1H#n|mN?Iya-Z*2Wp=gEY-@MjO88nOaYA!digZ& zwm2q~HhyCrW3c?P&lTSfG&u3sDR%DpJaL1{alB7C`8G<8!m#7pdxk1)3Lf6MBdegm zp@bhoVn&CysshVi73p1y^{P6bp6A+>r16qg_U*-}#4!i9UUZKdJ{BXro+}jiJpb(~ z=&@$WWS4?mzWl1u{u*=gp!O5`5S`Oggct|(knl_WV6)b=3XIXN$Lz5t99DAT*JZY2!}6C6YZ` zW{XdV1^;?+Cl($gsE~&L!Ikh_QhhLCL-5i0wW;B}qWocB{iEfLNSB1Uk!2gUu^+Nj z$|j@L2DBp^ekCw6UCkN68rIa2``t>S0x@RHr;j=&6!Swnd6iKg_~<$S)ag$eZgyDS z9$2UCDX^w$w)tHv`RtKbQ2nLc9iamT02I6Rn+T5oi|0iBwR@nOjZm` zV)iGAKKrq%54#>H_T^*lXHQPYD5$iKudol4|4Y@!_@k4}r--#n{s_ggFZIX2ss)2)gqT) zad;oyz>~V8sB9{A&yKD96XMpKmhWhRQvRYV5lCPtX#9(!^`j)^0?iWbr-}dl=M?a( zolt@`lF?^xK_&y%JJV%(C%a{9?`JW}X5SvJ(EMF9| zhHTOXYE%k(LkS+WyNF%^Jox-wBdt#1 zAKQM1_nq)lxI{T_`dYBhAhM1_~}fr4NPIvV=rVD?%gM9Up}=F6O?Sp zJMh{19&Py$BQVu+z9T?7ooao5JRxbsh)- zT?d!~xTj`%{!1Rd4cntPPUx*C(IzuVJ9n(c@g&n_{D^ugzc0y~{3UMEA9g?SiH;>% z))1q~V9oB+Xa1ET#1&Z5*eA>B1w;3xKT^F%N%uJK-j8~SCu|K<0DP|*3C~5mSN-XT z-g*#?a!OAHUB{^UNUy(!qz2qFPj=r^;eHcVe4{T|2(K;D(rh5rS1dQSu@MA}vVsqwgh?6ELO11-ddr>#=PSmfm1~&tZ4I zP0ZVkeDF4Y-5Oh}HlaD7x29}MflX`gDP~o3@(l5(KST85*MXweg|eG)1W4HrY8Un>hCOsQW$A5Ft^_@V>M_4f%JhcR^JAp|9letIyo`2FBzi$@H)7 z-HJxF)pL&I>)~Oad4u!@$>j`sSo^QfAjIJ0_IzJt$XY0GAuK~H=tIvvBo!@&H5~Z& zN*lfTA5(qD?snCD7C)d4mnreao{?I?uO@ZfTYC?p#O`)Jqjr2^y*sZ;=im2>Rn#Ij zZ)AOy;*@=LBM3#^V|owXYjI)g;uP5S$+Bo8#OXmAg&R>2u}VY+X^%6*xF6goZ#weQ0;a-5 z75UI-qiQ5YsvP9zAlrCg)^NsB`58>pHk9rZfQfHnMAuVQ{7W$Zf05%L+z&(lsg&@K zk~mih>Hl{g;QuHgy|tIKC6B6s+@EqdI16XrI!q}S4Zffx?H|y?ebuC_d zg!=A|)oc`2RyQ9I1%ERN!lR|EHve&pBlkfJK2Z=p5oIyw*J3}hX$G(yRmIJG?X!4C z2yD@x;VeUaYUZr|73(!FhwoP3N)}ZuZlb8)zE3bVedwkt?sFtz?jdK~dNU*J$Y~kB>8J^rR?3aLeCjeY^ zoFVL>PvTrh#=IcDa_y+AJaXf8tKEgXovqZVdSJ;@_W!yhxq{Mrjz48*S&DRcPaw|v zFGg}!?@IqN6#MObOvQZkBxv#jf6eR<^h+lv9W(#S57~b4ih}Ui7o{c=ceiUq8X$HH zKPAVa4!_Nkv?(%Cf#|1Va=%VLd0RcXxw%d<&o3ua+)m4+-g(W^~bj*4FwU*~Q;wY0mUKM2fs@-n>yV zG0@XYPkOY3A7}kEv)i9$IMv~MHt#jqb`a7E>c0Dbn!7tzdH{3EB2$@KBt6#41IJ7uY zGO`^0)HS~J^L8L=df+C*K9G7!Rk^x(vp#4qF5zcgA7QLvuUSt8hXs!ccYFNLma|pL z@NUpoaZ2}lPjstOdi4hF^#IDEOnN~_lQu0FwmFL>2%U>45m+=S5Sf&ZRgYC4tqKzJpyFa}~R>kM7dS3opoK*vV zBx-srF~;Ql`%4}Rk(NmH{)+oj`Z0M*_HT&;*^Vr$2=6my7ltwlkl*x(Y#(BOgxX`^ z3Yed<1X=M*7e0D5!W~iD6R@%WtX9f;X5sLnai8V`yOGs~O1uSSuP_~CrHw+w98?`1 zy{j>6mG?b(^;Y|emfUnrSwNe`eEU{QBL9eu`ME zNE}*TX&LxL+iNM$;(C$wMz42vx$4>~ah~vnM8*aFrvo13_qsdRigM`zDUO5G zo_#5g^{8JgbtQ;U&)(>CXOFQWxogHZ;vof6W}^3nyfn4Lg+PFLms~BEYxDwK;r*11YSj1 z8RwGgSBdaLu|?y!{*w^+k0jw9{}Tjp1ls*+pjyXO!MG-wB7o{v_`ah z@On!wK_1h+=v`7aTQM1V4yXN=Lw)m2MXMw^iMJ2KeQf772+aVyGpKC>y|q-I;rH+Y zwfTMfaZ}=mN$2PNc`q6XlM*C`X2s6pIDKH=l30Lr}G{e z6vOeu+S43N)mW|d=*AnKYZ=m+X)nbj;gHzt* zkt)$OX#|Z^YsGbv_Z*^L8tP5>J>h&>oAjiDJqh)*G(%sI?EKb0jZ1?yu37%`R)4H< z@!ns<6ZlVz>uKj?W#;FCEeh!T#>tB3zf+JiVe8-gA1TQ97oItgxsl@?CP&16T5+Wl zy~7iPcXY$^{(?jpN$%IjnoqA0;7hbwlOgfwp+ug0%n2lwC=wI8Rm`xl`Hjux+GX;pq~jIsS<0cFVP^@9ccE!(MAP4jC48^6g`)>@ z#le2aC*rghssfo{$z9`NrU=sP`KXH@-7*1V3uR|JRaD@tGfh81zcX*atjIhn|NBsE z z_Zn}T3LDir#yH^{JP=^Atb3WLc)wqpaw=UJA4y8|OuOdh=OgUXy|kZn*JQ7YK7Oxs zJB68u*$6^)Bz-h8V@|EH^BASw5X9t#0l~JXrKBv2r^k<$)5rD2b9l+? z-urp7%XlSnP%SBextahO$;?4>oU1ZC?m;w1;3Y~-;Dgge*?H>n*$X=iI{lpKG@hj{ z(-f8^Xj`|k=DkPXa$f61g}Df>^J?5DZxWlg@?Sa$6d4mn*e>*9%ftOA7l-Ez3@vNM z4!W2PlF2hbkXTJe@ek1Q{wIC$@P5b31uOw(z4D-0l71z~Nks#Lcb!Iq6PT}XsWV~8 z`PMH%O{R3`AY^>zz6A7szEksIQ~NXQd*Rz15NK4($NE4Xq{p8d>m4$`uWq0)MgW)c z_^;m45l17Z-Nt{-eTca@-)wz|k#rfP$j>}`#)t`^TFw5`n@D=$`r{`Dx3mM3n~P z!oC7|o(A`lcom>A&Dt1yGHZ+A01I<6Wy`DNfx9jB{Z_1Y$<3kwYZN5<-P3%Noen^w z$i|&99*=D`&{si6>z=2gRFwF8iPMZ3~# z8N6^sd%EQi-211|b_kv!bNg6NYkZ#lhe8w&lJV$@lq$CIN0UR?2JGt2V=8ov{}oM2 zDl`Osb!XhefvLAwlIlKBQ!uTBX z{pu?pEcqXQV7!+xxmUzYS2{2(SHc4)LNIoJ8iOI2fj{J1h%k(Q$Y1sUqXx6R4h+Q= z(BgIn_8o{Ts|O9 z-O&(?(H~4bA(;6;oM=*^p?|c6H4WsCw$e?`|Di1)mXrM}PIx_*FzB z--odppqjcrqQ85zhWssaL;e`kcs29=2iK!7X=f0>fJ3t<+3}D#V|sp~Z#ax!oD%b!&n4_{}s9372SoI%t72Q;uC=gef5Z-k)W z({n_X^EtOl_Bf;X+vr|NV=wq+SU~{`BtTbO}0m zN4*3cxkIZBP&=j49?=Yp-{CDmhwm6^LkcfRCVfh>@-7`pzf2Fgl%T05&q~lDlcdGy z=pASY`oj)mNs!_xQ>mx4`(@(z4Yjj_->f=}I(|wXGCF>fFuY0QQeSOY3FSLf>kYhj z1ULSFb%yqPb{svG0ccj2-bolpL7xjqjrzB14-78*GnoNeHlZ@K*=JY{E_kW5Nj1%7 z*J>EpXzZ8`XUkw>;pYJ>Y;O+pB9C6EvoZfqtpCkBY<4bV^lwRLE3UxM1L6_UL3UtN z=B^kAr)*ecy~K6)Eu-(Vo~0G;sd9iO@H5F|hIz;X({HEL@@pf-f3HA|g8~x#SQ;wh z+4~SVIK+KC{k;F|JOnNSyz(`~jjCFE#9zPp>fV;nQ1zD3Z1@l7!QUgx`oeC7dXwx? zFLt`4xXk$}>FK`&??WU&!r+R6n#Nqg?3%bo{%>FqrvoFP+jwb%gYe8XR@(TMkoMr~ z`}23s>x*i)>j7Mt?iKvHLJ=MHI3wMgzQCmMCX3b9A;XkdTb^FZ#y$NWWGZ)*)~7CM zUD~ytz3Qb(>l-$lot$s* z+i#u7=hf7Um2ysvJIS#pq8U`XoS0JuCVN#xY(6wgQvIu^STucfrHVI20$5U6`|1Fo z@Jrue)3~Ow$Yp(w0(kTYR=tHkrz>nS@;^d7N7 z?h*4YPpaUg(gVvK5XH7qVUVU1;bl`<{^IhFSkTO2?|1k+{Yg#gse@plK0ZJwpV{V- z6}^*ykv(TfwiEFstHYalgyphHXDsTdeaDL51r$FmS*SL4BFUNBGjs4wOm-k5m;hmU zqtkw7hbPXLUd>b`=?%;bnXN)KWJf%yo$yTffnfH;apheo*iW>Ui9xTm>v!x6A`@UXI?};5gCYH(o|YjCQjYn4>KAQV&4{BE>eEN6}*lK!@#Uj9JW6O`=eHJjT+2Z=SrYI_OK zyzUhBY*a|h0^L*V9ZTQrne(}d`a7CAVm@o~w5wZ-h|lWq&-Z`LgrLs*he>>|6~|96 z8hrv~ZqI&NM#q9|-ysgaimSam8(3gv^RZ9LVb?!ZoIb|)un|%%Gv9-MbBpMwe@H{K zR8zq_1$N?Fpo%)}nII}UFXOMDC9Gf=2&kmm$?+jTz2wNbAuG{=sQ(qm#4orOtVXNl z6Q@MVJw`egYfb{B$@_%z?>rI+0ziHr@}z=1L>Y`O-$y#RSvYj_gL@V~nPUKU-#9h0##3N@(J> z4iDt+$V~&TRvB>x9)883$QgL0hHe*8n@mixFJ1dQ6n?9lbi76 z3_jjy5Wru-HMKF8JfK5QnXOQ!d}6Sl=x$Qf-*M@IJB&Kr3dt18EL;wYjh$-rdT=VI6WP2EJ?O>{mw6~Qdaaf8=pSzF9Pn> zYjd?b*I@;;Ya305-JJCo6NH7&r~6f1nqDzF8D=`^dQ^A<=lN~MyvJ)*wJVc-6}Vtp z^(LzDmL4JZ0m~#`ZYP6uEAblOEa5#n_b=I-T0t=kK+WZtO8Y< z?xEEN5mBcLce_vBZdxAuRCCk=BALRr$}(rAYnOGD;Fu{9n`Vy>z&Jkxp&j4AhzJ6{gAy>I&nA%M0x5mc zGCYfl+8Av3_r_*P&d#{NpeHUc6*-}4rTw+n5yE&MrTz-M_@Wpe^{ku7w{tG>RiI6P zg|bMxgi4@Mdtfr&50oL>w1kAN%fducjsvQc@X`U_tm2f`4|Aznrfaj8ZCN&tlAd~U zergCVIdjnx;WXb#k2ZMn*F04C2N+udbPPUUOb3Pt7|}Qsl@62q02F!cAe;sdW4p{6yOoL#{ ziZId3?J11+$Wy3h~+u`ENvIk~!L$9#2 zPWB)z*_d_VwKkn|(`oURr4~`&l$OQm)G7bA>e2>NS?HoUge15NY82NF3vKN2A=+i! zsw&v-F47{9*p?ar@f2@LKPd-HUTU>NlB%Kxrd$-G4fu10q)neLr&OCxKJfJK{0#AY z+wno-F;c4-I5>L^l35E37n$=pHivUIMbG!ZfJ($*k)=Bft-26RA!zJ zW1Hld4F7}Z{3f=lf_6Fb3A_DkKvZg!9%+<|+JR8jJ=ISW3ww0CJFCZ|*OwCPer7KE zys-DJ=tbGw;qZA;n$)kbkBmrtK{*e#^mbu#x!*Ek4-8#GX!o0_UEcC8t{HmvfR?qY zqFq%`s(Al%3ADF+wAUQ@b;=D9D(72oV%qOkyiWgQx~Sw_kiydRof#%8_J^xqq~+@Y ziOgxE_QkPz9~(Z`TRBNS5$(yvLT;a)aDZPm4sR|K5r6a+^p_hCn_zG!ksInf9?cz8 z@YsIh+oernB=CK5`7ewo8&^_D`KZqnDq9X|E}Ee%R!$Acuper}Opkn{BqD|;5ij}lWD@8N$r`+i5^F_dA} zsK>^+_g6YHvX37Au-k;&xCKL89Ai!#&9Oun<)BNv;~_0Vsy$Y0APUFZle``*hhDuBc~t&p?6e0h*< zZl=3q05YFlyx7WB%5pKpslKU3D|gF)yYE;0rO3eoHL>~$>pMeoD%-`vC7_Q}z03NB zsh_j-!6AQ;Jo%aJqBIZzGnsFE+2K#{z^7I@@+Ic$> z-O?JHLXa9cxV+0%s?fj7mHEMv+7k}hnrai%Pud*>xo>G$v?ZQ&nI#eqwL2*Q$^k|I z!G+C$TMHS;yD1ZVDeSYQA+Azy6I&w;3vX`LeH*#`Ij+<2V-B0~vl+&y)2L|0bXTM; zetE_b!6f^AmMVw)g$$1s`1u2bfYu%vvBu8ea~+=$_RIn=#L2;K6KV9E$Xg<);=+#8 z?=)9G-DLX0TKkvV4TebtHuT}q2ivquvm$i!^k6TeC(aq^9+3g^5$u5p#}9hKQ(2B7 zp^_&>jCsNu8{;pU8TfxZ8+#xwH*3%R;}==wYk&S_4Qu%#_BIU_zSH1k!suEl@>6@R z)|a#6hQaDF%}XGBNC-Sv;q!Iw?_)Pex^6sxwsC~X&PQ;+aGZF6^y@&4p4;&5-#wDJ z-{(VPS$40<_P&_kPi!tW`sFQn@Aun4zxCl6#wQ8yj`=P2D4!fbK{T6#?19fW>JQ<> zdH#)k9TUV&Rr$yRg4{YVN5T>$;3FyA2fd)~oj$1navf%F(Wup}! z3IF|syX%q>esFWRvKB;p?t73q7#IJF)uZmO-dm5~knw#k*J1Cq=z8=SKiKE)+ZWgS zm|umm+zx52Zl-XH$fcwb{7mGc{k7nxy-q-b7gcFR?rDReo86&PgEKVM;{fQP#;Q>i z?_cE&f{d{BVGjuUX88_h3fUY$#V!n-rC?(Xef}I`Wwv2el?tRXY_m7hIR&Z)RDWe< z|E`QZQ*Vr2Ek66z3(!?*(y?AjPA_JX8D&#jJU!cQ982mSG~1N--cShI51!<_b?b8a z-~>F|;?r-EXfRSbTvLsHGu0-PYKd{}g`V>bsKRRc%k|a^2`}u_kb#gUjqRNNa^8(X zj`bq3%_gwRu1s}fB16gG!SImg@Cg5Fu&1lFHbB~)kt(}t&@_v7K8X=AwoHWAqV?Gu zUUIB&1>f}`d)2RAEtYBC*=zN_gPBRjJ(;0u5FOwg2S+k9K5V)B>)GXekkPh(qL_e( zrNpr%1|EFcN6-}_8~6z&`zhT!gZV7vkS$TnW|MV$Q2ltT?p7$csC;j}+099~EB|st zv&CgjrfksH(mA{mNv@vJ;^uUWX{OKq5L>mrUd+E)v#{0IGFtF8YN^`7_B2``(zu_) zM;D$FpZ<7wgpV^bM<$TLr{QB(Kf~rmw|ZZU3?Dt%x^w5GR{l+BtcuUNSfbQYM*183 zpwQJ&8%6YPEEr`*t1Rao%xGqLkhS>sFt->wY$?4D;T*r%V_< z4n~7n*r%47ahRnUVCUtH-7o-NSyoTliHv#M`5-%^-Yg8_E^xYG)4EzdFcoRo)vKPn zuJzO-JC4?~7N!0RrCUKzmk;YhiN0ois^dx78wFsL(eG>$K+4;?1>ICIv&cX`k}F+Ze-W_E zLOWGO{jlH37+7aDiCG=jUD8Yi_&RsMk->~J+rbhBzX?0d7HjdBbW$;j&Y);y03bcx zWzhw&;$DQT>HjF@F5tak6X3ZiaPamElT2SSV=0$@YB|5xG0eSg;vgOMHQOKgA|-FtfJGWi+wLNfeZr&NZwq>@e|`s+`)e z$wKxrU&=!hr9|8ETO+8v_V9ecQ|ow~{@g$4+Pn5zY}q9!unZ%=PR*#aA<9SB?1r-X zLhEVI4(=UYr(cG12l7Y-Y^`{Z7 z9(4)Fbs0L@1pxE)XpcxFQV(rlrLn&W4%}fAKxDm*{?v)?lqfjc-%GY;k`bFl87GSi@8G*s-E!6{v9wykj}5H&@zE_I+9%18sRI-mj96+IT|>gZo`8CJc2 ztR-n_g;{rqBMo16_%KR>>7=>%Qs4ycUosm|)#z7u+knCxp4AAi6 z{oa1*z!vJcV*z6r0>~L%wg-bRkjEcuE!0N%boDkBV$-Q0kSbp1pi`f&1w{OESV&eZ z>H;u7i7DPc>0iNbQF;*+mx-3QUMn-7pH1wdTJKIewv0iWfGPT=5_wCxg3O$=+=H^# zyHuWpKn5a_;k8a)R!3(ZTJ`Hi`WJ0MLX-_o#d~d{A_1B~=YSxxbNzp~A~O~zc) z?l1X#*_1 zFT2q>a}+QWV;1LmP3o2-B@|P+I0*0#iQkEte~RoU{`14`H)-!L5O~gKf8}f+1_wgg zw;G7d8qK?qEU_#Mb|ES7?AsuyLV3y$viEMl7vIDfc6q4di^Y%Ma(#js29evgi zIHClbBjIAyxQutzoXFllCxgxlS%_lZNu~<$U@H;5gOFTcD*Hs_5o(wACp$`P1z>3- zL3^DBs?`K>0*4s!Mr&-Hm}wX$KKuf6;)RD8OrI2JzxI8w7~TdI#pbG126UCM!80!x z3?G3mr#cQ@P{{@0uZ9__0yfq&4qN=MyYaNnAHlc|Ug91V_Bgvsm z2YH*+K~4*`vE%j;@O0{f!78RwU`7>9qM4pdh2}whs2OY1Uj7LS&#XI1ra>t%)et1) zPj4n94%!*?7~WIS>a)W`4T20wq%d!Z!F=YkU$#}0YYk#D48%FX#l`Ry&`!A-O_rA^ zTi{s9$ZS_eXVoX8Bs9nq;yAo&on#L_tqhr{qeAJ7uTbUN9cigcwuvh_w*Qd1PzZ46L_key|6E|WFVo8jv>@p;x|6!!@K$f%>+viR zK^fs9hDJ)=_e7E?kNDKw);n5bU+B|h@bsuM`x=3N!ktH@6;VLBF)Qhz$^AtO5fX5jRfdw5^3iNK^F(aL z8$MhVuG{~H^tWBhANyrvcMSE=G_r0q)2BD~=kQ9?EM*ZTkk8iM99G+@#EQfVXh_~F zs8T3l;hT=kDsr%a1vpwG;wO(9PS!g-v+Vbd3P;t4*D{A-zXqc%kJX*EQM$Sjmw}Ea zl1E#mQA6`W@mWA z*U{Q$f4nV;RmJQ`bAS=`_HEW&k<}UYiva6QA{ex&_;MxBzBzy5*=2iSR8|r9<hUH@^bC4`I)r5B#oSnOa)ijH@%fmp^#8Fs%$Z)C&;|MtW0YN@Y+l;Z%3Cl|I zDz$`>`p95k1EabH`^MV1Pl}CNP}bSO;mbUDTuX-q<*;K} zAWM0mle)~dgW0@ZwCP~}oCWq&%|EaAU+jvVig&v*dG|yMk(p!jo&Ci!LnvP0a$pl` zJ8qigl%orYnZ#7fq5<}s>UEL2o5{JFo{FAZ#Z9luraJGZkcM?Lh!aLt-*I(og(2og76Gc7XlVZK2bnhZS@E*$_c zJC`jox-CV^N=vpQceKtgnk(R4HfzHvlM5Hboj&x#&X@P4D4S5th72w07D9UHIOLE+ z8HzE6ZSs=4{H$uD2a*cSUJQG7X)3uLX^iPu^n=bWdsj}19L2vIQz?~|cec@vN&-B_ zu-3L&zLbez3*?#xyFwSB(I6k^Q{fH`$r8$NhL(M0p?Bysddj4IIHUL~e6G!IZG&|( z@CV1d*5g6)|!j4 zVVVp-N_uwZEMlH<=yVv8U++27tEyZ_+Y&6h8r^6NMG`Bi6iq-`4S`T-tXt1`X{N$K ztp;%$?;zw>(Hy3^Ij@m-uov~HGzadLci9x8wGut2dQIVA>NRndSsFAu5J+6qLw~k@ zx#{AN7$9Ppx~R#NLGLqh5cbR+7HXe>np%kRsg+O(q3X)?@K_`gnQbY17oWLD!u7^$ z!Jv(IsyFIa8TA?I6!g1hV28-h%w!z|-D{{ZajlFl)Y#-Q(QUKMBa^5p?BdMrt4AH3ds&kXHA=Z-0DgUKA9v*87*BRifj}5Sy zXZEGme{QoE^S8&L&jsGLVA|Btry>9lmz^4??mFgg&$7Q!*Dhcd*&u7xBgg$ zPI*5LWdx0*%+B4%GE8tnm^N8WHYjF2|%jg83#@r2Vy7bo2)}!xHM*?;)84jE2SY0 zaQNt%qwiK=7@Td01t*Gu!f8`fTz*SE4$ERuY^zAu0mc@pa6*V(F43Z~hBL#dFQn)2 ziUBs&5N?gv2kK({$0Vz95;5=}8I(~^BcQ;kP=E*OD4A`jh&&v)$s02VBM5?}Ly+QU z=OPW@GUX$4@{lFSmANr_Lg()P+j(9o+8uz;kn6ynrDtMx494tmk_FL5BqqU1gWS4N z@cmUMLE}%ndRLAAy1oY|Y@q!KoRJIREa~wZkGob1lcS$uz*6BIdr7zMVWHlKIvlS5 z@572IU&j^z(86Tt)im&BdcLo1&J3dUc;*2CUe}^nG%`^lw z(BuM^9k49JI#fg%t|Br*ZG;B<^M!Yq_GMcd(!99hiKg^NGUrv}zb^9^${rXj=tZ)+ zbDM-64<~uDbI=Bs+IZa28`I;>nWWHvaB2Vla)}um8d=b`2S2rA&}D}QZ46irVq9W! z`M?F&u{U@!DRt@ZqL>y&6%L$l>q)|%^Q^)x3Qg`cM8Gn|HW3Xu(tB?KTG#N z;9(gmq6$xp=4(U(ptbCGA`EGsW4qwdRQ?~DNQ|!D;T@LbwPVm=*R__C?nYwZ?05W| z{*84x>lnZmwui0xzHf8%4UQ9Q)-jw$dF*@R|81!#py9t*N-GUf#dXo|i}CLoh}+Nz zu~`4i8_kW8vBX+x<=;6477pE`qqUSG7{f!(Sp>3lyuhRmU^5i|JEy41xQssKmD>50 z@B1o8Uu?7OA4aOq|2IZ5!-6pypgN7>H)=vGtoGxuGTAs`ZB+m7IvKRRon+!|=C?yD z<>mAv>3fjeFO+?-d2t>X&sKywp6y0Q}S^zQ+RtHys_ ze2)uSFjzP}%zRTL^NBt9Kah@Y5cBgW0D29 zqA3Yo(9b1O)*&rilO*&z@6vg4S=>e)Ziwul-%t$JDGYF`tNE}P`!jWD6Summ5`!*Y zk4aYGWOVSI9wa0GVgaWz4nGVfLYRlvaa#5F>Hq{LHzoN&v589~E*BXJQ$d_|S-2L2SSqW1A^S?O z44k3_ps0CK@?(-sxY^iA8=+4WG{d!sLL^}}s~XW>W0E)*7TkaXHb9`&m?Un6fe&(F zE-Go5GMs$K?6hyQu?>N6ih`5^_??c#Z$yMoBB&b8mHrky_?EH1C=gUUGoD+>{FYo? zba;^+mQ{$iW9>K%!)uJ<`9l!iH+)~D~ zwKFxwu_8oJ1-)Az{1mr=b72Zt=9V!)h3B_4;^b5EP#|KOWylM+wlKi+&=}UC54g3} zz8Sa?nco7!Nd$SaM!J+FC_-LFTJF%5_BZD+&+T)^ke1IMPPk-e2=a2{uJ(FZa$%9dO?ruObu|dvFLjiG@_Q4j++hiY!x;Pn&Jv_SV_kJ z%5LSd12y9?3u!rGvgZJyIo95a6GGys0CQBI@2iSqATa8mg#$0iB%as}i??)B3-c6%NkYvFo1!TrT!|8RIq%mx|js#by1& z!*wG@q}Nz`4o*hVqduOQiGnV;g50Mtb>D%yM%E#m{_%Sm;6LcYtCm*9j$=4|3ImJ! zLCWGcIB|=z2||zFh~Fr~<%L*bk8_M<(gn?M&4L7^0Ohk-fw=#Vz4wl4a@pdBv7#WL z0-{tqy(kC>geZ!D^xk`yUZg|tAfQwg0Y!>55v3`;h9V#!Rp}*$-g|%m$@5L%y!V{r zJ#gQ5t?y4+;(AD??Af#1{ASNQ<9nGo=qEZG?lswvf>qy}VISqNTMJ;c!JRg9oSIa> z*bf;V&3T0OR=oh;R5B)eFY{5bmaadr#S}5lxko>!F8uQa3Xw~e6sOn)EBUe?s9 z!^?XQAuP;ia#lj+*EH`T>vmSq8WO);F0~T6Hxbo{l9{3u?7KbNK-5nN`8?wj*uww; zR>UUYdtatt$MZId*tS?>UfcCbxA%sgtrQqN>`%_rp!`)f_<(Hm zCkxDDzm~oj7v4jVk#p@4^T^R!sg=0B=4EZtE=zl}D+Qai7e_o->3CaULY5V!dyR&% zeDawl6w7DFy@yT~NG!NDOE6z)Uf&}?219`{;jo1f7AVV0lq$ zn+6?adjXOCjNbj97K%hHEB1;i`x$iymTJ1MHVf}fhE#Sb_DKqMuPDpTbM+A?w2Do^ z?iE?sc{=CJ^tGg5tM+C&Zxi{JL&vtlULpo7K`C<&z2sY9Q)ANm@k0Dp=W>|fT=Z7^ z8l;Ef`5@OlngLZ^Cz|B%$LuBS&|=cU(Dsz;! z5vi5rJ%kY9)~;)ZKtGpSncssW@Ur(aYrQC$n7srDkRdl~BzT1^U8VDA!FJj>P= zQ?Lem6IxpiVS}Zd_A)_W>SNV)*6lmI-YaB?IBWihhc5!SbG*B_9+{5QRqZpj0>BA^ zfV^#oclCVy2i9_pfVJF-X28Xx52Nft} zcrC2~ENFr&IBD_azW7#fp}tS2d*PMlZ~)k4!}xa5H{$=GZ^qebf3tp-UjVksuJ1Y7 z$LTtozz1c4o}g{e(|RARIQrSXJ#9@O9%LtE-j7LOp<;(bO#zbT?x#paZevMAP#}w< zqxxBY>&o{yYcozA@7=f!tz)F5RwDd|Lnc)La@neXMjV~KA1ltaf5fknc2@{l`g~B( zDZ#$DHVzd^D4rcU^fPCFY&F`;pi3K=xo|3gZi7laxy zH7-!T`azmeHYR}!fVub$0OpbsgNiV$)7||mhPyI+o?dt{4zUs{E`f@{QR0e%*Rf72 z`&VRwwxsb(%~C78{=*%K69k02JQckI=d%6_oQrgxES_LmO9Y6xIcaU`n-(T*JYpeJ zkt)n~AO3R>I^(-bp_%t7*mZxSEp3Dd0N+LZILUT)XJp&|1t?rA#BVf3%NJj=#NSEm z!S^ERKu1fTqXGz=Q29j*$Q^O4krJ_iick{mYgB zC?mR3Hq(8%xs@h}ftW0W6GAR@?bk>B?L+3MLj1E7tiRZ&kuu7`fw7SX>66Rs!y8XSqR;YKx$M z5pP#e29aOCnl81{1p1&T0GKoqwf{IM3My6tx&gAH&q^gcF$5rX2*2-yv=j??E&a?M zc*%#&+MF|6mN%|KIAC!48 z72+x@7ZXk$6z5tH&IuuY?mLc&xH(s@?G+Hj!$BANTbn@giOCB1ya;{piT}%%jxcf! z18r^y>&NmT)mU6)E3ANerg2#9$6wisnXOKFO5r8b} zAYGaSVZh!h?fr%h3YFsD$!~L5;++zEFj04aWWh~x_G2$7v{tgFoGlrHVxcM(#eD|` zltQ;_KVjTll@H&TogCPr5Km=pMrV@ILB%Q#rrZTTB*_Y43j38%N- zN8Ibfn_vV*lZnmqdjK?tdRM3V|}4 zRS|sgC?Bi3NrVv)J z3xc$Amt`LInui;M7kL?;-4fjN^_z&H-4b@7MD}h8 zEGWUfTLQ8IADddK#iw(X5=yAv@LJ7)0f@$B?LaOZfScxZ>JURE$}xtQ~e6Oe79CD6LtkLCKwM5 z?Kb!hG}y7jvx@2P?U9Mv5jVW~ZryA=s0)Z+f#>ej#nAvdGIp!wBSx9v-Jv7cgu$K4 z_$Dw0xm|W%A$-TpP``qd*!{p1G1>|>0U{TAcYDHzZ)1^$^sUgqZfl{SVZGh4z5&B_ z-+fdMF~+UzPD?hJ0-8J%v}&g*@&Wyfe$P%jJ{Z9+h1DVUpNf2(7)TiDQIGM&_00S$h_SqHbE1}-6rS&6}a85?LgNQ7CX#ETGE39Ks$xY z-NECZU5`6tK!46uAt0G}w?8`uP|tF=-a}CM&rS+J;q=|{6#`-4EZ4Sv*o%OLVVJsh zX|ti9L1^vrjRCL)y<65b%or!XD^5rt#PFnDlIKBdUw28K1BDfL3$KI161!9o2&&)Z z#lqS8&2Sq)&?y8_2grNVewR4|O)lD1`)IMql_OlhQtnwgV0>eVVdI1|BBJ!7-CZ7#v;;3&=N0^*aLHgfXT1fH;h^z zz$JKg)k3fNpj?Gne6A@lNzwZn*Fi+VELNQhdBqZ+p)l*Sbd69WdOw$4s_*p;?z0tR zBegQ&Z?qoA{J+M5@}79g)+3|F5ovU4 zjsU9UY4>w>^1=E!?(=I(9owdff^)Ab0IT}<9Yz|%_w`S&*JY$)kZe?Gx}X0ULjB81 z#xgoX&wjB)`NeoPX{}|Uo)E}pso!rlpge7EG75b!gAR@gA4H#d1sv3vFxbb(6AD3X z647z7c|o<7NcyuNd&p|PH3p)Oo4CcNbA2H!NnwEK?ZjL5x>pct=>K@F&if%*8$Z zY(k9w=a27GmS)^~+4Q^Dqzff{L1Nm8Ju8)*gxS;lkC*#5s@#7@eP1hua#%w{F{h7S^ZJm=Ah>Gqc&$9L%V&TN0oUgH+$e%}>8J19DEDQ@g-AF8I&f2jth znwJR+xD zL+4>Pywa(L8!$u4xkK_V*Pe{DMF^uSD5KyL-;`Jw=;c|d)41jog)YQviM(26k7ID9 zp@_QA{IaX|dk}F`YOZv5Jq!~mn+}`g%48p;mCw%35cV|gj-C(l3?{xa)kOez{`T_| z@d_l)0Uq$$xlOAlu{hJrk92!3ceeJaP3i?@r7s-gu}q`vQo_l%oXvoJu%0_nQ%ZCq z^PEP$*`Vo6Qr5|bQOOn~rgTTQ0{j2gEa8#oIhi<)kk&Z*v9)x%lqoccClkDr$EM@e z3Z(o2620jJPDEV)uMF9q)I`F;iuHJY%VuW1E(Y<$G*D~gh;a)fpNZcZovrFi*3|y5 zq-ulcfFwL&D0QT2xQU6aBo-O&ai|sM_6-ZoPb1}9di4-_GXIrr>tYGs)aC@0PcV8- z7b2WZL58N7_f!-2$21)8h1JJbdhtY^x(DyKlYYo&Uhfh5k4S8d*LO3?+f<&L<2RI| zZ)Ud}$a8R9PFtwP9QxR$L*?O7{mFslq1u*=jkG5hS!=L#t=|QDIQnlstDu3d}0_{I`yP{7V=ZPbr5si*5kk1M8XVkSmhkiMDLr>%gCO+3<~?)~vJRmj_M{&Qb4j9B;%Rb(<<_lXRx-1*NB z6}wa3=hBPQarg7|zz6jB>^4UWSf-yQhu>8!7`atEH`w4f9x##BpSRSJA84)N*(+{! z^u zckEphS@evbpo*y{Bg2cWQoNz_(acEhbDvns&eL7XGt)(&RA-1cw~nf1%rG(Lx*2+K zrF}_dmC9vjphUe6=@k~S3%ph{NO6hOuBQLkShR0+>u)gyQw8515)u6n)$b?z%cY5*;$@l`QMFviIioMfu^5gF&Hp zaDKIhHtnGf*iR`pVGL?m`|Gp59S&H-hWdsp#fF{X4R1yY(Cha~(j?sPEvHkHpP(_X z;iA>b{hSRo;z_ybrsWeFuXv{2;jg!;zuJ6X$Yc%H@XW8~23GzfIG}Au-$+)(DOYj& zZg2OaWybZZhsenmnvbqhTu%6m!yMS+kR-N#nv5R*=3F^Es>>Kgu5L4sxAg3}H-CU< z_-4u9ofQy#NSQ1WrRc%3?evNflU587WPb2F>a#1A|2e`bE$Mq>5K6Zh(k~6(M#y7O z%;vlgo?0%1gYDrc1kj~KW~Mv20+*tezgYOWH|{0N{bJaCpV?{fc< zw;%bo4^z1u5JdcVi^j`07aW*mg9-E*()n85Lq2~l2ragynQsv}N9s||SkD=S>8B(TT+7Zw@#|!l~wR&Q-G3CKk^T zJs9arqAP8LXy9a0pfph54sh^vE6s+^dc?NKWUgG~eTH_1X zyE8@+iI?AqR(QI5TqnA0y`iH!iRBx|sX|AA;?lBnpoi)ODn(IL7W1(;OTW6@-Bioc%>Q6l z^MReh`@!<#jG!93sgeSOc*nz9aU5OEHT1ipypLHnblp0gOlql~RF7!_`$yIaTBeQO zQ81lAkK5}HD2iy16c!Hm{$h;{T%|!eyq(+nxz_FKMcr0&+&ebTH9emyf;Em#vYHk? zDAPCf`1?oT8WDuUf-NV-$1E(GD?i+r;nJpg=>In(e3al||N8NLYQ5{mqV*S-JGGJL z#0^~%hqk7fetgHjKIw6P!ffl1itBNfoybNf=V6hAP}A*vWME_ymJr&&$Zn<$Ugii( z<{2X#2^L=e@g4Xe%;Sl`czYH4`*EG*FdNOn#epIfk+ao`=;|UJFv36q=v9Ztunev_QwWY7{4m$<^RRzLFKcSRv9$xo=I{TF~_4ds6Y_)KblQT3!fn4%tjs-zxs}UaRM4fZOBkloHL&Nz6Uyx>m7SEx39^fIPFGDcj&+Y1XY%`p?qg&JTeajPR?%GhJN0L^epj+Y!5s_$!FU> zTqX4abKaZB-XknBx`mb_sa6!dJ#aU01xZ~SWmwpq^xVGWjwlRi(}>cN!7+)zNQYv# z9IB{5*`3fl<3#pTW@?H8e_6DygXhxEl*O3EPesXYIj}PJZSMh1k)BhcXDS$6sVQ6n zkQDGBX8Go!$-){$t%K{@hD7RpkyM=p9Zw$iZFNhe+XLicRld^mDPE14Oi7 z7!5xT!D++|^}xBC24UA1V7nW*n=5{bQBXqkI5g3@0?lEUFxyZ_Kx~`s>9yeGwumuE zeLZ`yO(4&wCWiEm{6@sU86w`#oJ4D+=A#8fub$f+SY$>g{rO?bG4%<;hgTN4NwS-5 z4)9#+KlpQcG5*i5fmYTrDCd$d9H*#@8|)p)M7I}xj7KLZdh!U1oQ;3N+|9e4n>!|| z6+=~@?Adx8tUp51et5PvoQ5uW3jA}Ph}v!ug8K+pym4zT*s3=40fUlfIvWR3$j`G8 zwh&)}jrlYzgvD$lBz(MJ5IlEhq7IF)s5oLFQuPxU{X8Fg<>kZl(ftPv%%alaJh734 zr-CDu4(MS5&AFUJEhOFJU`VfR4%j=mnTl9GIJ1o8FJrY`XkkQNAE0*qk-W)kMX`3w zjwIoU@Qfl3_E~&@y5f2N(YHgMt&2|=O>F6WVYx%79?sTZ^P5T~fce0sQHb2k*_cwK zIs=Yv$$J?yW1&))*AR-)6zqxvLAwouP_LQvTcOqmUysjSOaQx;Pgm|I;^lqu|4c2S2({sWvf_W{Ltz(aIbQF;9Lgg3I@xJ5=Huo4*P z`|9+|iO#oJ!qF^Bl-qhMvV<$Bx?1ehY0*y++t4N8VHXN-G=iP>@7qwd2Oh}|uZV{d z$~{|6)=7xJC{8wyLEKX)=i1Gx$ObH&mj+6RGhL-P*4kPNnVX-(nFr9QjzA1(tf9>f zJnEDlm0o->)S3nBVb375Yp8|R8{hf3Z`co9D_JjFj9Qc&&|H9V&*0F5_`AQ(I2D-j z)1ph5`Yhz7pz0*CPuFonaib8b@F@G?D>gyFp? zh)F9q3%T$Ca|q{sh`kHL+*-L*%s@15Qnlq*P3kC2^sT{#NKjNqVer6P-m>#2R9uNB zPtZK3BYcw%d&P9LTH6Ucw!W)KTrwy9CtV(j&Cr5wD^$OuUW_}0afBxG*aU7P9GC0IlORtM>~<>Jy?7F0)Leyn?0s%* zqNw9(x>S-OUG(Uvu1)0mH=9>N;lJMYk3XLR2uV^;Sj@AFJ0)(I zAol6=Y@~1lgm8%l`wx`I;am^A-VkLR%MR%WumpP9URxyHEr+x0dKuhSzL4}ujSbq^K?2xN9GcX@ z+`H7bIG;GUy1v?VBx|#UDEM=v_l50?@j8HVS65WTFXprop$*Qt#TI>79_)oqiW{QD zJ}qyD&t8V0EM2g}OdA4RLJ_c%S1D2|7<4!|?Q2N~oU|EX6*#!(;(>SM)9>>E2T z5CElu^MoJffx@?+*MQ(~$v|SmZ9{G#a-OPGUG{>P4tN7X9!@HRnq zI;F$Q_=+lgK0E);DtRY-xg!r$^HAj<*2KQ1=&}KFBGS(cL~`WO<1R!R&*q5i^@>FQ z{93vu6PUO&Cc;EIO!JL%L^rQ9K?+@0b$0Sqsbf)5)lKTknzw$Gr|7Q@DF>rMB7W!`}bnEp%QAkz)fN+ zG(-t5==ay$fS%dQacv`cz{>&79tCemAbb?N*rBt5Fg$~2I`-zzQeaOU2xv9OHuC1S z&2D+bd65`Wi2GYLgrJN6>JQPFp&<$B3qYTHsN-3hgGPp{8d4R6c;b~r&PJO>h6Sgc zp^#%`&=6t=k$$X}P?ocUNTyp(sk7QtUs0Nyz1Gxl$IQr7tsgAaO4{{Hd9B}f>1=M; zS@j@dPifbe6;!P(j2SN(IlQ^!HAMuIS5rH(hc#>cc%@P7>vg%o#O9Gcs(Q4otc_NdzM#5ia|J}+&D8_KK+K3BLk+PCC*#Csg|QJkyl=;%!aY{Hz_?pQs?p{rGLW1bT%oMv2ca=!p1 z8%&o$(&0QD{~EDgsR@!3IjGnZGDBLRK>6A0;0QU;3u2(!hk)%rx1$$ByRQ7KMB)n& zZTub9(SI#+pneRPQ1f2sP>m)qp+lN$P?5a@*A~(>3I}J`VJu9Q!VZDxO-dwP*wf3s z=!R`J^Vm9wK)A~;6C$`fOIxOP3qUc7a@}|ym(s4N{9=dN4uimBxwmn%S7001AwO`O zcVegrsPQA9#_)$$z!Fj12h0YM2k*)Vohw)AcY8cyD1{Gv2^{>#=wBTOM2KCNiv@h9 zGu*fCD!ScI)W9}!0!I!13__XDRlxVbuQWsOR1j!IGNFo`dgH1c9QY7mV#2<+3S#m` zS_RD;Z=o7*d{o2OXgnNCl$VWSeOQGM!W;DgBk=ZO6uSk9gWftPSm%l^P6F_uWso3EgEpp3HLf@ZWfkJ8p3Iu}hwEUmBNSN}Q$)21+de!zd zshz+84^Urkm=G_$DR5=(A)VR@weSU|&5;gK&&(P9La-=6DL^G;gyrQMD&nmf<8X@Z z`Z4ddvz_J}nJEmLHBm)22{84nUbhCWcSWLJZ1H)mvkV?Tn0q>=)BcOM?+CoDa&6gI zHPjDJvbO+p-APSQ)n0=1*z8D;ETFh+1@auNr&yQdv?YXPHCTwpd+=RobQUZH@iXbh zA+RpnWvtdf6o$;aE_Jx-Wc(?$U02MjLs>{o5mhs7FTE4#=ui&P71B`1krY0rsAo_P zWNJOOK-NFp0)n+b;PlkNZPjZ(eRDXsdEy7u?97|IGgJs>@uZJN41+u?BS&P=!cL0d z-!y@i8R)Ff!`dx*w;FphC>E@lbmE4y?2OE!=LPcvcSmN>EG0 zN*5}@_`TWW(kR7OOK%<}EX4&5OltHZAJm#!1@>jp&A$@4;Gi*3YKF60aFJne{Y6`R z;m%+m;hx(dHdt?UnT4c@1mx9n_g;YXNnm3;JoI*RmNdWler-Kxd0-mp2|TL89Nc&# zyIKcvOAPhWI&o~R9u>hi;U6FW@D0CS$=b6{oRz>TStcrHyjo#CV=ewvbNIbTi4Td) zWfj6NNxsjiXBVVGtM@Jq_J5{+Ebkf}?1xX`VF{t7s-CIIE@h@Bj#E6VLVM#qm8h;z zMrpF(WK#9p<@dM87H2x9=d*_2ekAqlyGQnbok7h*+f|2twXgcERPs?-woESXOwR|! zJd;%(34MOO?HL1=o9!L_jk%?1)Wq;>4;EwN$m5kawFs9?{OzZWgRqk_E8C z(K%ucb$_G_k3x4Qk5kP3X)y!AxNBU#LFOaDAjL|>5LKk|;Yihb^Fb^OJz10qOq+Mj zG6>IdsKUtEM_Puf95opEYa@b*`>PulW8Cfo^dX0}Okh6Cjw#0u_Ki`Gk}=5h9?kgU z_4xwIUzdwlItHMSBg)LpC6m00RPkyoT!Y*17?z>bHs#GlAP*AO1fb-52lxfSje93z zf@T@w4TRXfVTdoU$~TJoyje3*(o}o9p8BZ2qMw+Xbb6+zl0%!O|Ls&ozx!yX z)Z`N3AU`gy6KvtMDqQ)ITnqDTG)K$Rhtk#z!Y$Nn4R97y?>hoZM}~jOhtQTy$Pq7S zmWcdfY&H^rpW+51Ghc_V;aEt(4IR8;+fx9AKj~3TNAR?cJiu24rUA~o{*&|m&Cw=` z+wu0!18QIuQDNvlpa)P(0{#O6&YK(*-CrVR`VVlV*Z-_(T�zoUD#V#{|UE{%zI? zj|g7^qc0&mddg>fsKn7zAXlxK3AH2qsSyMU9uRe~9jI7{8!NS47whR_!(23oMe znS8Xhf9j`uY6B7#@yjZ?l4VDR!;v$r5!_)(_IDEnN8GvlE1nwIfLAbKup!62c=4s+<%H zY1Sa9$2Sk1-b^zg<#ZLTxMIn53>Nu!zLBkE>w-Nx+^zS-+veiINpYC7Q$QHBOYWre zOg+LpD5<^mgD%v$m7igfB4LJ$hL}P9EY&?S5;SKj>tIBq|LvJ+Z-B~NwPHM{0jCue zm}maw_ATFQ1e{&~a$Dr2(K{`Ueh+lLk$dhLM3KlGTMWX3YXqbN&ejYuQ zD3N5VE>($>5~+WtcHy{0y$$fWv%vTE&s>0T_l#C01RU~z5v=V`pc`H_A4}ZJmGJN+ z2C*4w{k43sxMCuJ7Ci*e0xksl0H6hT%MMszw*wYP(fiMXeGA4H+f$|XIIuZDb7jIu zhJKokXf|PvBajdg(kG=>%+IMLyHrQh6E> z{MGhxU4)B+X!w7tiI45V@j{U_Rv}x_g@Xcs?Oalb$aF3Y7 z)VO(A3&`wRV1poLZLq{aSjRx{f_Mm?v$=2^aTg1P4z_QjiN~&hHKk<>J@x2UTDr-zvIuWx(deC#ed zhghFq+(PDurc#zl*HQ|Zb=%q4KtU!ygMv2&@L2-aI(WT4=9xYyb`wKwmJfYdfcWn- zNBOi5s)>ZEmb%gHZW_(uwBN~jzAShdEgz?%;o>-1D2w&{h7G=o$oplm5GBA8(6R7e zrsDUX|4$rPg!=vN>~Qurq%U0k_bjFVr*?i9{>_2k9Qe(F-yHbOf!`eX&4J$>_|1Xe z9Qe(F-yHbOf!`eX&4J$>_|1Xe9Qe(F-yHbOf!`eX&4J$>_|1X;Upc^YL_zw{VZ!~r z$B53J9G4*p6|p%At`7(S={l@L^h73x&W8H-j;1d9E~bw9_J)qm`i^$SR!$~H+{V_H zrnb(UR;KP;_NF$fD#wWqolh3kCj35hBPBX;coLkn+xgE%wea*ujWe;YvfXZCNKT5D zxp9{@9X^PDysnSz8*~|lnCRsBfR|LpSXz4l&DLNraTz>#8!|^%jJ{HHgx?KO^AY?B#l^}o#gR}AM+nw zgA4Tf$%$_)jMi~b_2ioMzr|~`K7Q#NSeDA*16ycE|FoWGT<`cIxN7u8ZBC2VN;Wl> znZ4|s2mdyBGp%iYyZBjwQ>OPEn+N7b6CCgLMUk>JW*v67oIP3cN2GJp#iur`Ped-? zsI`-va(e|Us}=G-V(Be=$z09oXj17ymX+=U{Z;Cbq&b^3(U&u`rA(qy3kRp7{vZ|= zW>T6GKEcW##|AGqT^(~SSRy@T)2W`-w9ps!Kv0UhW9oC_+sL*ei-?H)p3aG!5?U97 z9H&|XrIdsEqXESZd?Rm8O<7y%PW}90>Dd!YNC#6B?p zt)8=A>?6O>H;&*CBNoNW#M$T+u)H*IBD*k(&+m79!B zMQevEY}R6r>nS`}dVGzzENg>ECf?$>3WxL`y^@*O0E4&i)&dc(^L(Xu`<$XOQWO^`^*T7=>m`a?l~&OE zruJsu)`GIppPo)t^vt}5&kysY7@smO_%OC{tvWX6V@u7AK~?;H|ED z^Y90)azc@WaqrPQfk&0PKbA3#zQtD2wcIQDagJq<9+%7LMhadZ<1&$Z%0fEY^*xYu zoibvph%@#pze4@pN~wga2N4>N@9A~q%f%;1Zdo}$N%^j_Az_-b%zUnlQE5Fw*FPxWo)p)LREGXgpX?81yn|g^5y+}ph!A6<1`ZeE&L+CY*Hn-zkSKoJ<6hsP@ z3HUPzG^lr-h@@rJ_ev}fOLlU{pE zm2~&>(Fc(-g>|ZY&P%1)2jX8~n@lRyhTcjN@gYp)CJ_-AwW^Ww&2Z=d!O-p|3eW>X z`*$nOw7;Qsa(Ck1F|RDZw5I>JdHu_R6B<5skh#eOq$bFMl-1k+yI~ts8#_mLeRFF& zBSUL_BX@n{hmMZGu7gKsQztGn$6d?L{O?`Qsa4qy^PDW7VD~!w^fT+rD7D7>oHw*n z4t^xc^tc|z`^aMMRUf%3-Y4$uK}%Atr;b|Wk1Rx9ug6dH#w<12&B8E?xhpY$G>VYX zzqIZK+zYm-Y#WgL9A?R%r^Px7lc z;n@ho=z;Q(C5zg(T1mHVMq3m63*J|1VXsgA!{;sig|LbvMpn^Qw)rt|)AXiZt@#7? z6y^F92|_~Q<}1nhxwi(sHyzyW2_29f_AJ?O(3a-ZVbxiu5WgRENKVA#jo(4%yT;I6 zTWTrlKg4dkv<>DlF&}QGKUE+S&95nJ(P4HsTbm}Nou5pr>WZ;!p@X}(13D%687-~- zVhcl~xl*keS6Kk17!~td$q%>PFMiK1v*pYqZ%yToA9QM55s*l8m@IC2gL|dHFiY{A zl(Okdoeak|+R!@l5f>dLBia*kG<#G2K(5@GPwN5=` zPq^7-UB8kRg0bzT?Hf30CH1C_#yO}q&WK;ar|?A_HUD+dXKa=%2{(UW0=-vz>oExX zYaTw8qW3&qyBN>%tuA~DpVwP69~x1tHx%J2(5E5NdyrI6WAdU$s0{w3aYK)h3zrSV=syd!{ki~V1VH;`)! zJ12rr?;+n;_mXd2`F3$=Cnv8GXIO{k!xu{j8&? zR=G!t_lYT)h7&2|IJPzioV>%c=T~QcI3dW(_3Ko{-R4M?PIBCi&v#T*6K@Zicx)b` ztYUQVNX2=o+PPP!8{Npn#aWf0lmHqTNgOk&(tVAK_h0r>z+>x5$FXvMERKcbevoN( z{U+dhSmMGHjF0t)L)n*l!~dv!BV&jP{~e_Req~S-5x9ZLv$zD9ZN*U*ug5O?9 zSbAySyjpG=fBF$wjF2tOh+o#2;8R@l&78Ruzl^*H!$4kThXyLEWfbVy;US_<)E4usW%^egH=5(r;YcHiu(tmtWLxC7ptP5HJi5F&%f$) z|M6Yt`FU*@yVmJ>P4b=vdabU+mCnjo7V25fV>EpO{D(gZUbUSJEyGitAm$9E2)OX- zZu0Zvj8~3K4&GDuFglo8(dBW#`b1Z>?AwbE;6D&EXzb^tr$H}Go64_rko+irl5mTb zoDV&5KvldWfUS*eK-S=fap#Jztb6s!#^gHUi@p9y{(*qg!?gE}k&oS1W2(+C)*I;d z%te2t^`h9Gq@qtK=bQ7fA3oBD$7+i%RaZO;E-Th)FLGjkjXCkHQ3*qS-|Hj|q8lB; z^7><&y)B2MBN=5>m%@Ven^2qFPd5Ao&2?!Ah^gOtd&ghw2Id5_{tRE#9Sef;b#Qq! z*Z-D#dl03YIyqTeIywKxh7;Te;rEy5d`_d^v7i5>cenb_MBXT&kc<7HBPRFa*iOg2 ze=ez>GHg=EdtO|OpH7eJ#pev<0#_xSWL@D}`X#txrIDRrsppB6{#2pu>#Es8@B)q@ z3d(U_<||!h5gOi2+j$BSltOVDCMGA@%O9psXx%UHEN-j+VEFA_faViH#j}p*>;~t| z9Q!P?v`i$k!aMq3_0G?X20}t4;IfIFad9+8QT~yBSe%RYOK!4%w&>nW_iKnQcfBoU4 zw34uCrr5Z1d_#(!@5Kg2@h(OB9@epmgJ<5UY0JIq^S6C!5Nkv4r!hukhLWz%TyW)# z60}$8ysCmrda(V@9uutoKz%v(49+P3*Y5y{dt;Lt>b$R7APnp&a&@ zIt9t|V$IkqHzb(MK0Md;%1KNwU)Jnk6M9XXK)0L~?Zr)Q7&lgBC4_rFqmbQq7Z;>@ zhzloo6n45c<)Sib{}NUy7lql^;X3(dfeVrX!re?Hrv$`6Hnsa zT^p?AIN?TOOYEpLr5qe6)4^_z_8r=A_cl zS01#o-}!}SdC51qo-$pNxRR3omYK|G`N_C{#gD5uKh<4Dp~RP5W!mb@Z>jjIM1Ncy zJ0huHIV{!rK<<4%Z0y@PghMY|xZ1IK>5y~cDgHqxPLCVG(U$CMj`2FP6QpAIUOtkR zj{3HcwbA+VgZ+q3-e;AR8zGajRJWTSbCpU+mVSNwwBmekR@tLx)F)o6usBvdL-=Ty z^nMY0$|rI#Uqac1yXyAUkFDSF$2$7lb5b6Kf8h!#^YJ5+Ha%a*rc*_(Gh(|`@q+Gl zQ#D3cIOO>DC0#g&cxOs!^DS4Ux3CV2&1!hNsCG+QhdcS}7fscgJ=|LNZyVQoG^npM zJBnY3OdptFaxFlbev$inRM^3Lxzm)*I9!Kg^`>Rmto1?r*gLHkc`?|l)8Rd^*YU1$=k6q9nDZ{5`XT_?t9F|brK?Xy+j`IB(a_J$a2a& z!A{q9Q{zdNRL}D?Y>sK=h@|yfvPZn%rcg)>Th04Xt+0OcP39_?lhU|b+hgYGKfE@& zL`#`JTvLlNZRr*cTR=11e5z0`+dUEY;)g;#clQ+8p=z_OA4@{6jQ#DZqw}ou^h38O z?A`_nwAIi}qRCblk9xQrf|WgD-1!(P6lg;b{WJFS;B>w#2tcJW@Fvt-|Jw&z+S=Ng z80i~5G&2L(m6NlfvlAfzbTYOuwK4pUSKKS|QxVsd!scBDwX zO2fM5*P`?fl9AUr3-~yV@X_v4hBpShn@|6&d6zroT>8`FINiVC%gC5l{?&Mit3Tf0<^H&*56xi)Lot3YZM8YS#h8sC-v3aN z(Lurfu(GC)VtMxT155Z#_H{;Kuh{UfLKZL9&}ZEHGI*Pn!$pgR4!yR>f73#_w0Jb5 zBHt~xxx`$dgtSwxX^XMOaZS1C>q+)gbZ;h_`DmwNLZWA$25O;hDW8{9eSN0rSUp?t zacpLsXZL5i2dwebrWd|fpMQR_em1GNNQJ7t7sI3RL@-G)^0JN+CyRv}+P(ft;DYth z6cQ3eF-22Nnu7OU6z%B#e4-1+T$n1vCz6v+wIL#mLhV0=&JFY~Y}T|@ls^q9^mFyD zvmH5k$y@ko$b;-OM$>^$p*;O0ucJx_rs%H8cO3N0po*6BQAo&T%=#|v#;h_mDciIf zk@$h{-XG?Nm93xPq-yn0^mUDV6CX~jl=J3nxvHldjA zmD{l>O4TuhfBV`KI7RGKKwm0qSx(yHkR2r*%rlYiz*)q{mC^8EJnZQdEKCFe(;fKk zF+Xlq7SNS9scjKL$~;jK^Xy2E&%%K8SD1j}+jk}xQPNpd;pz9G@z4x2$;D<(s~4vM*VX7xlKQn>;lfw3!R2iGVs zoBe!v$$B}dwEgZC^PXLL*Coep?; zoVPld_Nn@ZUu{QrYBlVEcGct*M(_agv`Je5jKd>7xq%K@0kw>VIi0A!_|JEx)b;R%>s;u`&4n z*4Ujjn$trY8$$p|097@!v^LeZw9|KXw>SNd!tMn{sOnk~mTK$SMckK;r=&-;NNX*g zx6-AJ3V)t5M{+>(c{ZJL@BJ&quOZy!@B+ORrC0T5M{CcNtj8yBITSUO+C4(>lGw)8 z)0?8%N5Ar2cHmXiY;oruNDA?nv8;Q>Qc(3WAns%W&-b8N3!@4)d1W@z&s<;cvDiSV zaVC7?BVISOIcn5AJ2jNo?779`#XsIF~g)J`2=SIQr`^TpS-|NLTFj`=xai9{JsiVra_E1qwcAE zzafE~QSjk5NfJm$Ib95iIB}(c`aYcV$EAf=tcc=*?8Rb(m;DjR%a@mR&CUOKD&-41 z`Kj~i*Kcu=ejR*+o3KJ*LB}nLEaLJA-fq~6NT3v7jo0d9CC&A$R;VntL;rr38m*N8|rte8!k7~z^UV|R!DfQfNRnI-V@yRw*JLtIk8=3LM|5j;hKz9^n?*V;OsS=lOu z{km309peLUV$1=Dq@c?ZP7Ly|!yD{EqdEH1(^K7)_>7*PIZDTRJ)~u(`pQN4W};tk z@sm5WQE$kiRY*x5=(+VdG@$8PeDB`oBKg|Hmv0cl4Vrq*IG;~k{jxNysw4B6)TgF_tWztp zFO0z%|BhzzX{Wy1PB89;$80)tr7DPXA7qR!yNU7Ct|r0LduD`&wVs>kP;>N`s>>Ck zTx|PW$aFBGf-Qk>tS$2!x-K+&anyP2-+O?~m1iZ@Cw{L~B+uFk6N@8ob!--K|sa`C_ zkuyCM6HY+mEy^R6qiWF*xb)(n6~hi(SjcmpSRQW{Ox^iOu;VFi@RervOakkDcIog8 z=O@KftJR!SlqUieriUG>@$M!DgXxSY%Q_B)ZZfLZnAJBGw)i?{td3jma9*JRTq?I= z#L4ru#-bxQ@M)}Em%U+vZLPQ~zvG5r`IcbFot=&mylnSl;5dRZw)c z^J03*9&%H7-NyHV-S9*CgQJ89&Di4=H1tIcUr;YCIupC)jjv+|3tB+g=OYn4$4dG; zyfkhcd6V;-^tj<(EUHi^cVX4nTl-e$}f>zy`>l&T0u`zT75!_s(@}5M0Hq5U30|# z6gZFTqb2wB%QKfbEE;{1ULiq?$fQ>XJ3)8a<#GANWXRi^$A}Uj0#Xan8h;s@4zlpaG9KA*+RKE!Kr9n|Thx zR(^Mu;kjv8A7aZ~X!f2mg~8AImKCU|pSiQGo;bd3+wDQRox}H)beZ;Nnhl#>X^wB4 z-cT_w)9Plp?s;?X%Z|k2GiXZ0XH_CKX#0byvx1c8Xqq;gzyslMSenUAqv)gRa2T3dmgJyUA8L|BhWs>YrnJ=kiZ z`<5a^?vd1nAK6PXBCw<7?=&aWd6|qnHrat9)vl%RZR|_obx>b})vl-7bRxmU<;!n{{9X=GJj zco9*XC00v#WpdNcyZjj=VLSL3MbYVKsF3wUFv`y0IcgTBqCEg&R)rgXQ(Qe{iH_)2cR2mLLWf+*lq3%Vi-rBdJcg^^|v|EVW8%o&9YS2aY7$Hfs`fK7hXjG?qnlK#-h;53M zqw0K|A8a{kkVs}B-KmdQ8xgmgP#0Z^-H1Hojbbb#z4N^2!GjwA6^ z-HEbQApw=+7b!!l!Kh6h;mZbP;kF+9RL^TY?``HWf58IJ*x}OYU1SVCjBe4M30{E;~x?g&&8gG9oh zwdki#T^NQ*Ux}++)D3EWFpeo^i2aO(ISaVtr4clh`hjyag@#mb!xhv$9;x<%PSc!J z?uUa#niNEQbPt?s4uh_kChCIICSFMfkaAEp7f&fw;8Q0w=x+9Tn0r-uH*2lowx`|T zvXkKi$TRhjz>zaE70#_=w9@tMoI2yeF(y@8f)L?vPY@ngX1JKov6rXklIw|cucJlz zm0YC?HjR?vxZaAmxXv>(T;(T6B|pSKPduV@HltT`*WjF7gXz2|jjtW@Ez4u+oZR1s zWNvHMxl`R5OJ^A4D2NijEJgN=_c!FvkjCt@P>!Wd+qKJ?5HZA5P~w=40TF~}*PttM z4_#ex@DU6R?LN5S5ytNB`m*r7LHs%OGUr6vK>(>Y14zApfCT@YdXBaZPUbeI|3QMk zs!`NdEnX;BMvV%&W3pc+=x4h^0r$3kqCh#cB2he7&7oU_3uLO? z{2FwZe7-h&J3qv?vbYC_$saZIF-nJUmF8cW24K(&hd;Qr(Lk)G>&%F$vcV-3J1(L3 zot~GTGJP(kmPC3<3b0Lm6U=P}F&B2^tW!+Hlgci`6I06F11>nT8(P4y8g~t7o0+C4 zT%}D=FoAw_RH*X+f;LLIeHW@xN`n(X@m>Gc$POb3q97z4;BS7(2qi!Dls)P3dWjbG zMZUB5<6HJamoLwezZxw_mLoqzeesoB)(EAq#CR8m09GMU?U+FNh$io#w#seFeyGg8 zNhUNwifuY|UJpwHy3hEu<5i$>B+sal7R^3kr#yzq=FwLIoNUBs;A6sU+`&h^9B62) zrEQb~>Iu*EQ5dQor=wH^?SRDf#b(Q5dqFkG&Nc$)*_IuNt&;+qsM(UP?4RTo$J(ac zp6CY)X8}tWRL^BCT;809X(~f zNFHXhqR#cQuOj{;i_7CzC@DZ6|YI>bUk~uKPcUOVx+u)V&zyd zQplST*DO2pDj*%#ZfP;6zHQJRpXM!SeSMo{wV0`;U|JH+A;dwBChZPl5+7QeK0J#i z&dZZ2(|^mA0onvifQ)QD2BkJW6~Id4dRM>g!?rdR^1N)vk9%&~_wLH}@&~usFL}U% zAm@k|z`tw&@_^Xi1D=}zBO?=wo#VeHynkWcZ^9m+&1G)r2#^Z?l!3pp@V}c~s@k!6 z0F~fS{pXDAJWy3kS`ehOy&=<)h&=@#I;Chv;k@}+%gZwrBe2uF(co!@?OL@XVsUfl z`N4A2+xRKw8S4N~Jy^`ggr2^4();)zkTb?x{eJ9Vo35d|jlI|@bc89lUa@%#e4Bny87uj{#pQ)niqW6*(0w2VQmZ=!nTe720?tDoaKe8lV7a2_hrGks|047I0C+fEJB9!MPQ8a(D%#BLPqE_GsDqr zLwwB}o@M3VU?SU!(G0=Z2_ua#qGoJ1BiGrj8W!2#_()utO3Xjm%@UuW0F0;dQAK51 zcla)$M&$9@SGD1IgUQ)&X@-!?gD|yIT-*2bp0xl%b7vCwfJC01rB^AYrm-&jG#s{y z&!+N6xk6K^2(FfA@g&B932w;;%kK3hL_? zDHQ8QWhHRXn?IzpTvJ)s3{NO$QtvN;7mWpj^2xj0&uRs3jtx9vN3m0wY7oYS7zCih zlETbM8MDkINuxBve18!@Tl8reuuyu%BFXDS_VNRUWlj}8Z@=l{zWDW2eLCs-J7oNF zBHRR0a8d(;7x*8_0k(gr9DWnF00P&4R}g~?IRlPWvq)S-+ip>r*kag%~~t^=?JE{Z;oy`Wc7I(bQ5^2RM^iHNS@?Nv*=w-!gi_&CIzG z6tUak38$ntP0=%J@bHsS$_*<17&Xha*Z+Y>Y%zF@iL`sjDP?lQC^U9O`#5%tlLKO@ znea5$qsWnU?iXGn6-_#@JW#6r1;4TK-TKIwMfw~0ts0XogKd*#{jLjs7d&6~z!!3M z(+DlRRn}$2)h9@^RO#OBwBX!0>?AwYY?>FAM#lUIpe*=6+WSyff-5hFlY5@bXHtrM zRlZ?}g3aPiz7jU<1vk~{9>^9q^ucFVL=U2TPMT7Yq&%jrMh}{{!8Tzxx_mzh2a{p@D!V1yiyG&p z@)Cj|>>se?P|P%4aJw^;>vQ@uxu(v_;J44cWD(5+&#ThSge{OY2RZJEXE2z(9VOPY zHE?~_M(>~-*Ij=c+^$5fA7v@EgHiCOUw3XG%uu!d`f)>VsM*KRZ1JM!YJdMoGaRwY zAy^(ZaJfD=5Q*LrLE=$td=)N2V3N_<4v>Q|Br3k0qoj0wMgkOw4ea&2q+tsq*Q%+( z+vOHM-1q(ZE66{GsHBEn6*ORn))p}k5Z&LOuK=T&uA!}siTUqDh753o{(AiPF}hMK z)u(_4vGq>M&c2cJsq|=t>sWEJ6@QKCNscd6e&?2)^~cf( z+9SUN2dCD#?{H#}mqZ;t2tKf!zmQb0*mNjxUfC&o=eKHZkLT}LaDD_~|N1if67HKT zZwL1o9SQg0CJmh(r?~ItD%#Ss%Qw(9A&f0Rj4OLnSEr)NWd%Rv*RQ-yx97~=!C9kF z%3PNDDS5xo`ynGB&3^}rhq;sYu)JeZE_rLHApl|;!Dg2TcektF7cHjNgv7q)DP{pD70NhDqU?mD5 zQOT;K1qy5QI4M-ng-LNy_INevu+AuEZ?AYl#EDGSxhtrMM3X#(N;y~K-G}5DiBAw*mKK;n3aG`cG znH%9&0gcm7$#_iHy@@S9z_JQrW_bIS%jkwXPp!Ypo}FJ&~6aabC4SZ9^!WFF{w_iK~VtufcD1i zs243ht}GNkeTdzXA6&(6E%NiLB6$k$e=uc?sRWIHgoaOLQA_u=H4UQjoX5~2Iy{0= zu~-aVVYEW+swS&XWr1XJA9Lv-#9t?hAnDkUnmGoc6%#M1CFgSEZ;$91ak?$wpGKtb z?mz{QI@RmGDBd6N`p9IxA+(M9nB8|BW?#Y)*n8*-RU?hmn$o-I=QXXPd%^o8At?A8 ztUHMZ)_!LouBAW;g}%A>Tj=a)@c5!`MhfMpfu>nFfwKy@o9;8a+YjoN*pi*CO{;cY zv85Ohpn0fXNfKT(C<67Mhy`hKtd+&?s4g$jr;j_|OhG2t->JsbxhnU6Jjf`~-O0A+!stOHvm;Mq z+>Q1MOYcz){^T7DZ6!qFJZpsUR8&>ji!F>Hz~q$_!ULQ}!a7W!K7^g>5Yq}rK0q~Y%A}|iK8N){Y*eAW2%;GKAyYN zj$%^p#hUxDF@=Om-FYZCBz_fhpz;Guuac^DF52U(f_R)&y~r5rk$?}9o9s8bz4DB` z&QOvkb^@~VcUGavsULLg4E3x_fn7POh4ea7ZTQF-PhWG4>hr6=nNTdPkb1S7l`K5> z2u;<2ANptjPcqE=)8l&vZ6G?{Ac|v8RM8FzRYykirAml5%{AjW**|A6EBfLV*tYUU zi{%F7F^MzRvmBWvQa~3V?uMHGBpHH*2toaj*qD9Qu z*ROw3*YN4i*q8rv;#JydzS9E|uMj|xIsYCFogII(=?6MaMz|*IXl^@ILpr5l8#Wl%VTD@P$Hucl-UFRjOecd)-(yZJ925a zef2$4FMg0dT>LxOPkaQBy+c2b`uT;k@8vT+l0Ht%f(UQw4+srwF^nDM{w zFP9AEnQC4>x>F@0!1ikB+s2gL(EiMfew2}gc=3-&niMtOu&Pd{9aY70doy3;KKAg2 zikalS=-6~^5t%bvXO%Ku_ZAP=bbvEtBEeL~(s8x|VvO4MV8dyxQH7{kXfi(=2*y;@ z+8Px93|!dQe6trYl6!9v#wE6NM{*pp|8%*0qyFB0c@X(Erjnr=0%D6gJ!;!p*3(x} zvE@~a1f&}hl2GUph9hiHIz6k;!+&rO)7MLm z-V5}fghSD-n=qjevRFNX=&)>;Z2qcoeWGkFtS6)vpVw(kN}E>YQLWSZW4ZSxg2Pv4 z#B4!!0|SxZec116C7 z5~(c1vb|7RgEbY^3aK;1i{H= z4$78X_E9M}N#b7FG9~=40^h`>?zerGn%~Iw`*DqBKTGzxOJ%kAdrFnpCzSN($*73B z%W1U6mU!?IB3~prg}G>bt*`2r^?urWk~hjTw$_~LAF8UTYWy^1az;bBE^bjB>=moe z`An>36qXbwi}YDV!z5juj#a5td{EkUCx4GU$FW9AnO+j$aN_vkI580P;+|e%+qC-O{q8ZRg<1BFLM#1acd!GEB^a9KI)uq>`PAuJ%Kr|_YJF#u%+ft z3KodqNMT*sVGv({!70{6kAz>M3QfL5ivLDTlo|Dbd_lqc)<`&?^QWOLlT*N(X|G$W z4w$n_H3nT7&p}aSueMeYHEqk%(MnLWp3@>?T&jO8iau)4agMv%rbK=M zvzFF(pZvh#wZv4JSG~5LtM9=-GiuY43)L~J+rB0318umEajtPyIi9djKwrLvyMfUM z29+X48Y{2^#g@2%=N~SDf_X_I$rHZ+B% zI3`~`FRE_-A@Ld$Cvs21d2dnt2=M)Wh5YmfcgSxv6Z5<-98hb^0Fqbw?+=szXqiUl z0F-mm)ps%df7BpdBY>RgU~b^-WNvHocY@}+Qm?}*5x^;ej<+9kCZNPAXTrfzntmlS zXN1R^mWd=3IgS%`rQUe5{P1!(k&r4g}EwQB7qG24Q-jM;HzH)RN;9&CBpfJbPO(lJfV1 ztB{n{RfC~yw$-|C6sZZ>rfj|^qzH6`LcvL{81J4mYvhf*RYR^~Mj4s$NqG@HWr{Rq z1t3zSxlZt=n2qBjLyjyzqr>vpdZ18>oOOmejnP&^5F{RsRRa_`go-|0!ty*4O=)f%Q*;@V`s}o~if7tZ<>N zAJTNV!Ny_rE67UI7z+~TE1{PV-IP^Dec@m}mNvlQX5PQ>v<}r1X1bg=P6JPW$Z|Zt zjrNY+@qPc%`aaoVJ2{nr!JRUf7y@G5q-FJ#u|G7m(LZ!DLSf6dk#mJ(4F;_g;r<}P zTz9`L_3E5bZR0Hx(u>0%*V$PvIjC6G@GP-*Rc{Nhs%? zsiUoGZF@vjDhFA>!S*@jm{skaT30;z2q#_tfID@UTtO>c8bO!bP?xC@bu)4+kD};e zI7=hh%>46?MmUL^atcM+5m$T>PPhR9DG;JY8myKA$}tbLGU6p@XdtXlCe0G`D6xj< zp>YVnm15?vQ4y$FVOiFQW@R>KLESowHtBA>1P4MPX{%XSt>*GhK zt@d?*LuDu;41;nh_sjBwH4kWY7$xFY+BV0{=#WIQd_5MdjlsTN%821r_P(RnOKX{t zE$_V&PCCG#Bwhj^Q_G%wn&*iKi=4xf3AE3)3HKZGnK0pxeTu<1{9#pV^V*rG=VPjZpFL!dZ$t_tzQ>rdEhoo%6d>fVMd&ZOInNoX?bhGTiM z+Sa9wmm6QFs4O!Rnq-&f7w9!D)qT9=H2V@8tow=@?j|(b9JU;1af%A8ch893Mws`7U6&n-n6L7k{ z`WQ-r!%#%wIP<+~;Lw{v7#qG7zI-BfdqwK- zfzsgzt0oNa-3{IPO%?gq{P8dD8wn|NOAX+?zaG4Q4_CiS!@A}+fI`hl*U{KX_gBeA zuc9RPA5Q$gNX04|3ZlF!N|NH@qDpdtvZ62mXfrhhlzP88Rd|2@!!W;-^Is>Zm!Y#B zDxi8i1zeK#56u4m!qfj2Z~ko{{?FO@S0ivLQ@_SMyAG=_jV$Zlhgj>h4m-?2C=Dy+v<5L+5kyI$BU&4N^1-}1=K z=16$yiGTElJLd7aux9 z>JBeJTA5=c8{tq1^K;RE+6EqHnwV+ueyM5Kg{6-w!2r~3*&&2C*P}IV`nkahpLpm5 z!+7GIl}pNTn*PLBlpeCLBLGoIPGgYjCnrB|ac>VlCpT=s7b}heibLQj(CQ5b%^4Y? zBTtp8M2zokP@u8G^itCWY&m^-ALZ*Tac-zx%!8CZQm>CO12|#tBo69l;8mo?${^~> z3Ka0v2#nR53&3T3@25+IId6xso84HM9x{RWJ-epUgQbvJij5{ngKiN+(CJ!@Uwv7^ zXU+_`&T=*>1rgS#>O7s|tVJ?3DoEH0HbC!Cy;D}nQBtBd*l)p~KfXh0i{4;AeTg`K z4i`XNM7#x6zMrYo z((S6&y3k+v_l>}l1*xG?H|qWHN6>7;g!vXOhj89L^@Zy6ZT>>X+7y-gQK*@J9b1>F7`t|CcHv81HZCBaQycYpRc41NhxxEUTH4vPl6`8!rWKc;t zB_beE>BI?DLV8KE+ipU0*YK!*8Xh;#>qsJnl*6^Dd|cmF!Sl-4^C(;ReH!)YfFhJn zHcX1FqWa|0qc`a(1yWQPfUqRxl-&zZPJq63L6w7`j1codGxSaU)MRENWR_Z+%w?pkFE09Zi#1KiHxJCzK*tLT z>3ZR5BzB`C_pGsLmW&;5q^7X=QQ~7Y=ay-qB3zls{_Y*s#Q)5n^l zMvTx9IvwD-yEAG}u@Gm7TnMnVOIVaYYtt5@M{6CjKG(bfFP#{wB39(@oIJfe{A_Mm z&LLf&huL5=r)q83paHwsn73#RzRb&FsvZd(s%ckr!J2H1URq-pSQ<-+-XDE2e z>(LiCNj!%@IE5NN?3+1IOp0OrCu0m$JKCo(Gy1RLu}O$X(-H*LunI(_crw|H>WlPpgs zXR@!%E8f5OIDMz>WOcv+Maow3A4h>%ZQPZbi8v zfu`4xpmG%Ze5wj9MSSp&-V0ci&?(@cne{tJ73JW79?fuP)9RZwaq5-`#@x#4m}Z=&4JP5fu!K5J4I6lj{K_6m+YZ z_`6&8A}Kx*^Gz8U>nK&_L+l&szBTHRA9x>RHsK0v^NtIOw9ZIeFJ=o@e?JAj@~3S| zQ>q`gcjD>dwDPY}DmYBE141?xgs?ICu1fs;z0keXb&D23C^*nR0|&5IZcsxz_%C8Q zjCu=cp>_MU`oWC+1hZCb`|GkY+hk|7emaoTYPSpdVC3m!w0$+DjBXF;ZhAV68UE4I zO1nJ7UN%>0(u=6D-(5aAT2gN4F5!rlsUU3KHIbYXPQ2eQ*;gw4^0AOTKjZ4*_2`bP z;7fb^i6l#S-o2|4S8E!F)czjKTKq1BJe!&FMV7*G@ z(M{S`Q)DuUUrDDr`^WxViaF(b_#@QMQ z&_AvTKMV*gEEp;^$(CE?fGua;jP^$t49?50G>sIhClZYr;W!=kM8KUN*IWa4o>VU6 z#b1xI3OY2zda!-Zk!rCpkzk&QlA6u{VznZY`f>!6tcZ$;F#{eFCx){z-Jjn3Jn;m~ zDr@)GE#94&mJ8X3^yp)89oSpPkbm=r@UdLG;l4MCS3 z?0fjul4`)|YFbTWvfkGGut)tR+tKcQeFhzFD8`1%c^qkxU0yCC$^`~Vn={lHlOB-& z0BPya6)HH@J*tesp{q=`ea|=4GZQoa4W@(ZN_+zB2N*6|X;41l371T&2MeS-4rK2jZ`tNT}>Ejk& zGL^dTkx89TZXUKjUkA%?hO^@)aC%S)BxOMWuWb$BsF0`*Iv}Xrpc`4u==4B1FHKcEHuENx7MPPrnH!rb%hVfUl5AQ?JqJutXRCakrcjxH4XE116 zV`CnT*T)F_x&^gMxe57N?$j*zunl95{15cUEXo^y*<3O0Mj7zK%Yzc@$=&! zo{u>BwMfv=R=L{g=%ZlTryVZvo{>^vR@=9MwKIE?W#!4je8w4RDNsGIYBp`>UA5+Q zdB*)6+kWv<4B&WRZ2-2B1A5#4z_$E<%}A|ncQ}yVvUES{%E=Z?e{1@=l;qGx+hTo3 zq#|k7u0%FOitxb3P;u5U*3Hj->bwo}*?xyFvmetaGtG2^XG-ShBL=4{K^uG5LLvjc zpkum(UfPI=#$hWq1LYL8P8?J2CsIevxCfSGM>$FA`C~S$dqpgSPR4H=L`_zT^1*u* znfhu)KUXt=y10dEU)>z;+zgt>V~m$2Rmnxpjonf51Oi{G1ny?qu|pNDG`2#J76Yz7 zwd$VM$Yh&Qf%}llyi(T&T#{wcU%_Z(<3MXA1W;eSx$TH^M6D6&Y>!DL@H83L&g-x| zphy=5O$1`YQ+&X4|A4mTx#$^QQ5)q*VxC6Z?5R+5%}5Z%;~NPH^LBVQGIz>&x88n2 zcZdFhd-X+|!FlsxJ=FT@i>>7yqCQ0%bR73IT{HESR77F>maB_Ze%F?&Q1EbC91bXx z4!T`fkboRBw69u4Q1&ypsyRUsh-I4n24fq&RjCs16jiYu5&ty464>-K?%pYE@DOUH z$6#4~)c()Ylp$1Di8KPzscKC^pTMRFv%zu?;JN)6k(ZPC^XJi1^iH7x<W!izo7Zt_9vD*%m*^%;~y(gov^g@^|4Jt!);cIYp*pV`&b#oi!1T@$~ z?e;m#Mqlg3_RI4Z;r7>DPkmBq0?E(viLi7VA4ODeg1Crr@_fKHl3JIOw}Q9iLxgdO zGQHsPdv2<04-uyWOC9z5EW(7!4XNVamM+?7AcA7VrH`qgPY9jxFh13wC>(uYF11K9 z+~;Y|Nh4${!ON_QFDe~S@lNOOC{4N5zO$|Jtjr$_%wo;pvYgv)3?Xsi#b;w(c<_pZ zzZblD*hrZaUU#&^-8Wnd2}0V%oMlTu6XzR;ekfsL*CP zDr0I9PPr|sPUcEv`kpkZ4qcf$>!c>ub2@LYji7W+&AMaE4Dq|;oO}e?X&h~>LX)nT z+PK{qL4YKdN|4M6mK5!zlx8k+?sZF&7`33S!!Au|L7n0p3qvA9SL$rtU9vE)m_#v; z5Tzz9zQr$cmV0B~<=loB{2C9hGsz+8kSn%vi84^R8rZiQsJ42lnT(TNay7=`Aa6l+ zDJ=Beu}IC-D_mM_v($FR-7mzjgYMwNPBAe|gP-ruJi;*k`#wq^w8!4PPmFN-oyRTc zk%b$NFyV*cnFG}Y$CYPK`LIqn+vL79Zvn}Bt}c=^b+Dd$I(b04i0fvuI^+rS%S;>F zdM`9+a32=$cS6Fc0>}-!EoD;@!nFH6=EmZcPO`UWWP`pn8ptIU29vtOft#YI`cA;{ zV^wZjLxPsSXSuCbY<1LsV>YFsNh*l5G`?85fOp1yD(~SJ)#tG9J5rn$_qOisi?XW| zw#mlDD)CE~oTeKJD45iT6#9wp9_vN+D!FwhFodt3hT)3y8DX?8Xk0o!J}p*!iD=OKo|n7c`16x1|0fNoxwRF)+ZZQ5o8p}B{G#QI zH49ki)px7Q7XIYYz9syK3y~T*Qz!0G8zrTL9h@0O{foSk;C#1cw4lW4BPTFPCBe0J;4_q41x<};ByLOh~u&zdI6Jp=%-VoKdio^KSa3Ql+~2s zeBXV-1BYr-n$JupWTk)M$ZYfoP~PT&fJLXdyfpuCsX1` z|J=8%MokIn@zDvMt`DP`lHtr2Ys%Mt%E=71Z*|>lr`7P!mVIw4HQj6-p4Jb9zoYOk z4*1yUtSb-TfL8x(%fWveUH+ZDfA*LC)dbQ1*m7_J=@!>W4J$pXPw{KZLGr$sN|TbL z&4Dlf@`)OQJNCFC+_eGhdby($f6V#L8}qd-#nGfYbt<*@1XwB&bhjSeLh^80^sPYOu1(Ch`vy235Nr#Gzmc3MeYS+Rso7p= zjvfyk!`6{8q3m(p9oZpM4Zs5QB&*{m2X*fxnXl2`i9%FH;NDW9n=Fg4oK{;L>wg6B zGktO{3mnoSDAuZBFPB4<$P&QSn!s>Fw5f(vB9jr+dQ-2n1T`<_C)Q8r(%5;l=P^pm z^rYDMj6reEDQ(ClwfPlkikom|yHwc<#Xy2KmES4MEiNL%`5-nksF0^w2K{Sx(vu{d zRm%ICjz8^`3d}0c zZFdCKakiToX5}^qLM}~=2qu0JWv5oZ5$EPMAQ_=lhT=KCQ#4>|OS&kFnb5_8pZ=PJ zfpm>!r?=13khpz0xpP&rR-FpYd6os3&S%eRv#VFuCCF8Q8Q7;O4wuitLG7`W0?|Zz zT#rF_WMI3Gs?0pAFLtO}xj=kt-K0Bzbdocr$#J# zzw}roh4&Mr6udtb9(Up%-I%$b56mmuS8MMKnck>)jY%gPgTTOw!=9LA^Jt;=1|s_TB84fw z^~+s?LVpdevtu;TNF={}oM5aRFh6|jcfQ^o$cPe7$M0i4-*N+xp zDmqb8V(^hwF%)Hyb06#TASq$!iz&6EDerK!b9sh4i0;0Bera) zKD)X?%`sJ!A0zY|M8WgKfAD0HGzWX(gyLl%sz;%Vq_mrwL_txH4kissEwiV9!V1xM zs{|E9i@Xt&n$h6St-;u4rMNc4AkpAsf%+La1BDfTGwAEP<Bpi{D`nM3Rb%J-J%LOi^1Y)vVQZbnd6Y^JToL(AZP(={v4^q0U{j-}CDU27 z3Wa9x;9bU~VEV-JO>gV|IWY3v?g80Q7k?+VZ1DtM%VFlGy^7kHW(t|6qBH@ORzqek zRN+L5;L2RYpjUxz{7bQbzj@`v%O{*em7eYb(tHA-4uLv&_-*lw%7+9$x$rXZTi zVwX_UAH~d#u^yNyWgg3f5**|`+4ZKMKnXUIP?85y%?{jPPD05S9h~WdF@;c3k8h3} z0yUWhqZw;~U-ARTAEU=5i^9B-Vxn6BhSIbQ{iNI5qnl3S9|oFzOO&Nh)yHPYB55FH zR9;Cz3wY6LpMPisRZ`Rm!-_5-c+xmZ-$cl*E+F7wJFX{m%g9*f^)*%kb9jo#Xy%_(ae1O`+;--$y<3ME8d9a^L+u9&QqANiVROf0 zHUu^oPe}nZ4yux$G9!^^ObpGfhYw9$U6nDm<-4mtd_6zE{(%zy%F1y`d5&LmMil>S zNx@&B%YRbyuYg5m6VL+tH4$#lp!}Jt0a}4l!u_bn>bqt{0!EO^i2YaCM!OvY3YEtT zQ`eIaHiEbX+4O#CgH6}23!kZTTL~v_64wpo=(cb;sXg?t4mueP>1Daa630SVHHU(b z>KZ+B_5o8`8ew*srRvhifa4H)Tut2h^X>uj5txS2o1lL4A>D@LD1JUO)s*GD{fh}k zI8+Jztf#wPKD@5f$!b%UG4L|tsl1ZTw~_kgYF4GcJTg# zqL6uh@}yfudwANediY5ZFcsQo{GNI{6$81gfpL9mWEb$b#es-;MfvlG^B{FoA{IEo z7euK@3ssTa6n%Or>HUYi-#TLLH=%BYGU$>6X-*VV^Ca~UY z&}kNC^pOw{0_Fm95JSZe1?@I2Jhk$zdjd`82TMZ%EwKYEG9wv!6UH_RZb-evo?9=T zyX}+&KjG%iQv|*xk%ra*Y744vV3#_tnkrY_DAm>D#n|EtsLviDZtla<46W z)nu3Z6%l26-_c{xl>{cq*2^q#nMn%m8l(868ww3RE(Z5E~3N%{*F?Ty*4n<@Eqo}07isEw>bD^V>LJa)+WhUu*5dTdci<@}RYdZB* zc$K~8ZZuQjGdl;p#AGF)MXN)K@B3W}+FQ#~72WFl^}Pv}*hf+Xd9P1K)HU;u4RApRPwkByUnDUj4FMV#DeUT$@q7ObSwN#xR0||*8InE$yYMd{%6ie1E z2Q{&AGx&9^ZP*hEAWA$ApBmTt40B_ci65_uRm(xEmOo3JyhqAQF;{8N`X_yxs&PbsVqGjs_X5 zR%qD_>^lXFM?EoZwm4{tijagWfh9}84_NSyWhk+|@OhF;r^5Ho@GuXYAeV(<^e9kE zwu&TP7B(uN;I$G&a($P~P{+AJ&MvuONh5C9GEUSyDr;dpV>@asKc%NdhtSm-cE{C%O@QGrTQ)J>pI)T6T8X9U_;J&EBl1!7*mUgc3FmN zA~kzAbD{*9`09){vr{hlq`QCl>{>uXOL9spP*cu02P1ePOH&SsO{=o(isoe~$3BL$ zITvt56*sEftP)uwxwAP3al{PwhnReAvP6vA86M<_Z7$T9{M#%3d2vtz%p0ngb*JX{ zd523Ta#$rv8X3IQ3GGz6>@2-5taxyqjsTY;_t$-3hz~n(@B|Q86p7`5*&a3z7D{f2lHT0EP#MSVKHMnv`OYzJIF zX;U}#4-6@YD8CV>W&7-lxOUErr>0PN3<{E%ccfe(X|N(8-zAiU^A|PY4s<~+rUD0jN9p@s-j*qaR`RN0#Do` zFYc6-hBd7uA)3hg!8je{X@1-RBEyc+Z5SNs$c&BDy9)48mVy4!;k9oz?VUBh|I26x;=Ae+0ILWUeKIi0&vp5R&Y3(!L{1172NTq7+dF z`kqN~6yzORMB|9JWFuQrRVs+@lw!br5chj>SNIJGNk`==xN*Q$DiGA@_}3;^agSV| z@UKr>=}X{Mw~4pO3hCjHRgUbGfn3-In1`18D2k`9Roi4sM5}*P9(a&A1jH#0GT^}) zOXPBNQRIk8R&>@#wD1o0NV8fX60{H?h-F=0#fK@Vpx$3lB6s;(5i~L>9JzVgLk!3I zpglFLjnVr+=v zcWhF_31X?W08FV~X^)s+Z*dYO9!IvY@|+Xr9ml4M&$~k}{!IsK6NNay%pt%+2kKQ? zAFWr*Q|yEwlIt*XndfadJ!vvWN|#x?0)UTcrqo#7h{kYz8f2hfE#y*B1U&#*%edH2l0sls4Aqgnq`XTb3}RG7$HphxT8XUpwdzM zNk?bTnfRhQ+v8%{CT;cNujoV80ymSb5y9&V*uJxaX_xU5N1YDB-AUiCfnftcll_l=@RvS}3f^9?zkJJGIWl-1r_ z8J#&<+dSp0zh9nvP+lNUW5BE^DzhyH^UN&bJHsY?0}=T$5s}}kmM8q zsoG2Pi}BBPW%Ot|haL5d+cN~ZPGlwxksjgI=;-TJ?4CiqubJ8+0H+{?|V>ZJd^abXSW6M`Dm$YS@*-{;v zF`KW7`K4Ej_Pu1VwDl~PKH`|fjkg(Ch?z$a~rirZuFsdmv&d4^b! z2E|0yOfSJAk-%b~+p*ubB>0N23}$>B@#-11L9!5759%#QSHk2i5$n<9@kb`NW1O?i zysZf`WMZ_VvgIX#usDIMA%gv)759sN1op9oOehm8>-ace&u4ECaaj}rsgZ8 zz>(na!>QFB&+6SVbE2~MD(tc26%c6Et)RM3i!73``dql`u;BzSa>2KItAs7I3XYm$ zYrbrU*HI5EsR}Gd@|vB%j-gUpPyK{I4HeZb@l9j)a>4=Gun*Mm;;C?l6|E3~CRhFG zqYu=n4Tg_UucRFZF-#bdWHydWpQbYVwATY& zZf_qh1}yS?p;vqAcy}7-(o_b?%^xVd`GGG`^-O(CIBm^if(JLCxA_KH5)fIFk)9&} z6)91pThlW}-W$5Xhy#Ra^kaw_%o(Tq!#09d1Jdd=M?XAWh)&9)fDhqT zz%n%=(&@``Qk~C5268_X^S-%CIl(Ip*+6Cnt-MB^z`!eSimusKfIoDDl}Id$?2 z?39}@iuv@P+=2CA0&=vfR1%(mQl!}BId&+E%(8ByPHzZXgIbCJD?k<(W7%Iy4Ta$) zO6A`AWOAe9*>hO$*DzLSD4-)~B-hE+ccf9Ozu3N&a3=e_i$RUVkH{%fgPY{E;23`t zhv&dL`ZzJ-G;IvT1UQ=cu=E$}XroH}*!?9ai88C= zt~=BI`Uy)z>Tvg}mQDvep(T1!?u8EowWiEy^J#M5uIowv^4A5y@_BmE?B|M&Po)y3 z`C3Y_EikW;rsqKuHw_XYL(HxhQH4Q#ER==UVF%mBt^s2fMh(-7Ta#8({b%B*O1$W< z{KFQF3qh;8M*%mi8tV1^`fzr4~Cg0NH14 zV5<4Q z$b$dTVRYJu_F3(|gcgr)I{hSlG)dL-!xVFq>PG2FmZ5_gL|jG2o3^0`_gQvAUhRwQ zly3nQrTaXZpqj|^S_?xvv1+Q5xYs8}_}3AiN@mQBeysytq0{A_Tgm|IeKVW<(h8&t zLw@t1AM6w9D)(z`gshqD58Kd3z(efV#vKZn#t*`so4DH_FL@kc#S(}FpHm$enyoEQ ziLVkF8>RfYYrR2SLeOSh5hNBJepnUtJ(Y1ZGA=fpmSrpiUY9GLpjHISA3V@j)u9%K z!IgUqhqh%yidMC#R=tJz^`D+k@rz|`n((|hIv7i3;j|oNC}U)cr_zpJY1Y$RRuUoaA49KBh70$^pr(P@-(yh;;>w6abGfDUbcaysL;+ z>%C3KTN9tl6gmSUIm6#4c6aERr4phAmzW~) zF<56R9%EptVaBiYXrKs(fm4U1L&B$P3~4BS_gWtdFuWUxr-sVMx?cH2DA^VL15V3L!|40$4$p5^i8MmiDiJc z#eh%bJibOEx@|RCe-a>{${xUH;xe}`=I1<>n_`ghL-k0|hwo6UI?O<>ubXW_iw}@{ z@h`;P1#==3v#=$hEMl``d{k z!-K#_yFj;BpPrpRy-mVr|M@Pbh2I%$1q2OKK;_2yH-g3={sdaK2Ko+``Z@q7wm#ABg$ZGrK>^E34(O3#nN~UZ(bm1WEhP16 zx;gby%Ecz>A37Qyj72)WzYR2WNSs!VTwoJNDTNa38C6NhMDKR>ro2FN7mn^498?hO z6~2EBZ6^-5^5LEqL|qD#RquSAoQAXU#!*{|_$E$JcOx1<$hMzm8GvmjQI)nEeLxeu zGIVFaxAR3D?_v)|w*v*ZNpETEY{hZgk+5MZ&`j~{Fzui$B1xad6=F7Ah!pbH*WR9K zeGaw)W-;c7r@JGmB&_?<)N)dr$J5E6*OvZEtd4kMzc-HPZRw0GbyK>emG;h$l}(Vy z)%rrPFn-uOr#&#pWrYOQ9u9o^;?cS~7iT3Po5h$U1Bkrr>xDe-S0entb|rIAAMFHX zH%H%c&ut7)ST1buDan40oH)7iY529x91tLQ>9h{3jeG9;J!bUkq^}w5!733IluuN) zTXlVE-K!onY$E7r#4zvib(DJDy4H+oKcb8_$s5V~@2h3FY_ z7=z|q@9&xYTNc6~+*)-3YCUXqC3$ZF9360dcx|wd)A!mgve4YV?i7QcV@S8A_MVxC3^;H6Q1bIae4V|hDD1g+0(1|TGbNfPZe^uB> z1bH~Q3(t&E%!G$(iKPYsIao_aXmAv~(xq44t8$q9SO#G)P-#>R48#W?jN?dW%R;i59T43~)oMt^vzi8FRzU+vjmV1d1naDOTW9BmrYA1O|KkMH5g>okZi1(fl zf0@d7gw2h_a)RK_7qddPGvlrlbf(I^ubOg$*YF_QjNai{fos4Ti0dmduU_(eU@?hK zfu+EB0ZT3^v{Z)9kb5G_CAN5~q3}*F5C;5|k;u}pXKnJFOK;^pQXtmcd(OEg6?ixg z1&Ol6XK$N@yQu5sJiC%M)Qhyr2QZi@&j&_5Z<-Qnrv@ z75Vah{#)1AXZkJu6DY+~K3`&{15r9Qc&LA!YUN^8sn*eX>fFb>W5y@TZ>|-zi||G6 z!F#6@T$AC4<49}o0c&RP>nd7MBx1@n{<5Go5Cw=_t%F=)ON$GqF(GVd4r zWA{e%(zl%ik|AU^D!TW53;~R>3?3mrr`fu8yCKF`oZQx1+Z~JM8!gZ!w3U#|S-p8W zQ%#RV=`M{>(nnB4nPRC5WSO<0D1REHq4T6fT5m-}M_GYs($#8_TYp0yHEw1ujbYU+ z5_4&A$nCxxbRf94@AQZQ%i6dMcCSESj%bVm>lJJ>(L56G7O69JQlTKh687Nwnqe|p zNprbu;Y|WP;QHG6eR#KABz8fmBnKKSeo#`zjJD!zso|+zz~h&&{1nzEvptfTb5Q*O~==5X16V!>u1Y+H4v#mR`m9s;7F}M1SI%WSbSd`wta#{O$(-D z+{6f7=Qw#F;iW~Rumiyd!MTsIJBx}gzKe;NqeLOd5=kVl){59>o#eZVtaqSPCmTs@ zePh@zEO?DQJz?@-_Z%v)jZ2U1<5I2JiaAlSs|c?@yJeifMVVyuFgyrVAo8$(k-Es= z#db<3Ji>LiPKOr`LY?;zt)4(anhAcON{Yv;WBIro|Wd4JN zs)H_jwlT-E%~(2BHW|A@t`2tP_H8BI?3c0{H-vdjzh{hlrs@eM!1mI3uJFF4t>hBr zY30%bSPOnk@pTd7`84s@&gPNQdaf-g<&2Ek;nhw#Vg-8x|7M zjLquRs#E>Ry#3`aQ>xeOfCTgLK7;SC?39$zii}B0(6PBBG*I8WN_^IjYOxuB}Bcbcm z3huhoT%)&A*_4R0dw1BIj2bU1IwKXN69;T#d5CFg>xk9r1dif;mLW^j2(84rjRLP( ziNT$JDiQWteawFk#0LHz_2$n5u|H97{;Ed{px*r9yQ(~vDOP|SpkSY~Qr znQCIJDtcBijUrnT$sPLKZ7xvg7sHDmwy_nZ#!Na~+~cd5HMpMk!L?VIwol1OB| zp-`of!}kc&y|wCOJ>e6E4k|G3#eya5v!YBSG+fSQ={AirV>x%$7vFMDTtnlyR{TA0 z$N{l2gH5S9vLshFP;)eQIW|n8!gjJ=S7PQfC^<0{ZRMWb!W{LZDNE%g!-TP+Wg^w= zl3jU)6v;FAX~<>0m`jdDq4FK=b^Ren#YDi(U5|;Mo68y7;u&Qa>pO@im%9w6 z8}8l!{4?sP-1mO{@q+}4Un=2f0UJ~;Q2qv1jx_=rR@4yU6_TOqh*wPn19obHMT+*n zAGa}zxBnvX`F*#5m?~}{0w@*ZfWN;nG60yq+x;tq;`e^<|1h2{i0(G+rTZdq@eH*& z^Ua)Ski>>BNY0(?Rz}2_90XZaZ7{cHU&Pk;qeBeB#QoeNS;z6=?EWP$Kg((#jRQ_w z_?XY{a@tZTmJ7dC^|mJD-qQXQWPyD4?2z^9);(fn`s*FHK*g8||0Bg{X|Bi#m(~|Z zhJHasgA}}`ohpIvw9SVJV4(<$;CcyGE7`7(eG>HG~92h#7oBtOcLQlu?pF^C#lym%-=foHSU{i!x zSCu@WX3MnXu^5qTJ#KdiNhGbWJcBCDON;cDu&iAnx5(6LVf3;6DlKW5$CKnd33ORq znz(diKAC_Pk1Hp%U_@mi#?-SfJixC?TQ-y_=5{O=;NEA5A&(M4k-GO;%eZ72NOJw) z9Vx}agw73*k`{#4TSjOT=7P3#gLhlYjq*B_+XzE*lza7bLH!uX$}>mly4>VPVM&gz zOJonkkyzS@P+qp6t^ns^2v{r1I*n3ak(*UDY-@z=2-KJh%C~ZT$9aJ*cY%N@QF}`q zTZ785yL9(<=S|Q==%(08i%0OPR*h(}Y~SJ*h5!p)pH%e}>mLFnB&@Pr=^W_0bfI63 zxO8KQkN2h

    UNE}O;|SZAH<#=L*(D~A;b32gv!%VkG3g&c{nk34!^F5YdAq-Om{XUG! zb1-~$VHXFv>fI`E?WEYZ{+M|OuGRgf=a2 z_q1w}Q59yT3BmH_<5)ww8HQv{Ly1CiajZ&tHIh0jJxYrh8Vi&9mL`$LCUb?npLF8A z*+(88H#VMjemozXt!{i;oAz4L^L7|713TzxK^3!akO*}7RaYvB&&K1mAa`4nMkWp~ zUj_h_mbg#Gs;PzuC6-0VI_G}q9=Bcta<^2UpMB(Z@~F=4m?~U}d#7T}a9K9QO`d!b zSL@Py==b}}LPjk|w)ygd5}8HQBuD#BhMI{EE%t&IbU@2aF`~$X^*6Vrr4TdRtOj?7 zf305iITY>II?V#;{$zM@!$%ozs8Yf?wd(>tRp65jzK`^~<<4SlF-X(Q;^c#?>9*2C zMi61yaJ&XC+x(0G>F(j4Ix0{%To*ctKTfSAJ8hq-+l|!v^le{8deh;N{p*IqW>ywE zK3PpRDKFXN=ygn-kvfjtg{LE9>koV$ra_8;G9LITQ%}y;R4uIs)KS{Y+(zwZW{8bT zDC^FarZ*xP@Lmfa*l6v!sUC|QHXIfu^#jE`i&{ z=U+@`3cOT64XnL`ZMO!FV}=t46yr{h($O2uI%Io$|(EEJOj& z@j`?V%HNxknA1K)z@f*SZGFS}!?aG@Rv=`L5KWdTvM0mM&qZ5!`jBaA#BQ z)yeBQ@S{&V7$EjO5Wb!JxiP6hj^DqV(HiZ7v;3@4J-=t*+2*wt&21HmQuAVXg!)DU z(JW=$jIOq!0kq2tPd&N_sRu@j0B4sD26@-e?|RJi;NRO6vMUUgiQLDgKLIb~l&n9E zla#WHwsr-5{s`*y>dWcb{k3!Jy@$3*>z}vU?_2^#lT;E95KF!Smd^zLeJuG8x$ys3 zt^QpyLZa&Ltk-+$Fkz!ZDR1DX*hh<%F97NWFj6Fn>*j1R94{Xd_%UIYWM7y zxZEvDPCNQ-9xfqe^C&n)xp<``s$rctOWOm7eQ`?eNitNFZGdm#OR9<=KmnTIfgK6X z{cG`SjdUcMjJaiBNrH{QF8X#2?iOloMwzGG(4X%*7 zv`)vmgq&movQ6#3-GTmun176X*AEHY8 zRwHGc{3B?Qb6HKOT$7?m#ipxDQ|BZ|#o`9)HyaJqwqM%yX}r z7*hw2b_$_t$AyB3BKuUa^U?Cv4Xr6fB-Rr_yJ2C^t;f{adlN1iLF%w~T%_4tvqE#L z3yZQAl4)M9GM?7}BP66%94+#r5h3PpePXchD^|leKJXh;R)qc(>p>M+^=DaSn)Q#Ho zK`m~*74{HAsO`r3em+B@OUr5EmD8EctkKeq<(|@qcbCW~VQ->BvSbqlp^R~x-G!`* z;u_h0k2X7BWnVCqL1Ltj(J$T_nIJNro+=s=+H=naY$JH~(_V@~rNQOB8glEAg@f^oY54?25w-hjr@F}f_UX;qy+AQr#a3Lvs5muO%s)WQO5b!NHylO9ObtE9PMq+vF{a6&1$yO2dee4c##Q|9kW zUM;u=mCHpJjV?r>KovRn)(5LuB$3t`F@eepFYv%?A5$0bKa&=LZNF;fZS14;_!)d) zKF~u&Fek{iNd(U`${_9wj^WCm%s>o_Ayi9ud|tGbs+9xBEBn#^b!G9?`H%CN)% z7tkd{71(1e3u{X;D;0jlM%;55uXf>@g=32x1q^iq=8Q@R$Dsx;KWYurB0hPfp)2aD zy^GHt>mnJQ;?8rdAn^4?;v~E^a~KFuYASbj+8jip0x4S2TO&d<2dCKP)*qDlRKtr0 z$Gx$I2QNVpe;FK*mte6@37V9dNY4~1Dw_UfV(*HX@yF}OE7SA8bg_SjpMX63oo7JJ zn*>;j6Z^Z_frY`})v^2zM8BJ3e>SF2{D&n17QYxilR;eqK}2Ako-fFLO$DMHA~x{y zPVx%C+0N53JD$Zj&njash|ku&!|rXu#+tW!-0J&F>$MC)3q8gN!XDm%4JBNMv!mA+ zSaABImv43XWTJUg5%uOjOA|t8aaZZ-y6dXBEoy_>B%zS`<&b-1ghEa7N?~oq+u}rd3E!>tls`AY4FTk zmMYO7Bwxm<8i#JyeSE%9yVp0?7Su3p(dZ(&$-gjoL`IrKDimG8dW9MP6tkAnm`Lbi z?Z{oMlB0d1zipKfM*rx!zd-Kij6Z2Dc1la^9`rZHjy^+S(P=KqF9~BsBpbnV>gK)o zJH$F`@fH*NX+0xUC}23CY=|B{odh+pcL)rbI(^Q*$_LFG&0Mo?My_b-Sc@&5>t_@) z`6JWIn6f1EoKS?s0YkTEF&3cSjrUlBz`g1TjYOpH^GL9tMjgsM@otsl`TA5ct4%{o zz#6^+(MIW`O8VTK4i{T3a|&a!oq{dZ>zN6S`G&fbb&!_I7KfPy=k_tmiZY=29|q4? zzp%%aaBdstXX@v`=Kmy1oZ~^v1iL+U**-Q=H`ZSJxGE%j2-D5V);57vGErz!=KQ?o zdX7E^-s-U88jVU1uC<nviUyMa;f3b59A`y$uD5Ih8q&C3taE*x_&fm@cw-G*mC{& zle1}`_bRgx;Pfp6P9Oi@J$?UyB>{-Y{%A@A{{J~I|I2Q)tW_Fdcj!=gEi+bxiC}rA zaK5-ttwqQ*mOR=qfdE4<5@epw^gF}*n|VWl$uon=X^xy`*V@-jqs{fh8{E$3`?nzv zx=eB81nL+OOTml_IrDm$z z*88~d!eU>mqD)--F+s}wQxo!QhA>p>T6%43E{Hl_5DNf@Q!=VcC$ry~moq^S}6L2#~)hU5J%_E9Hp+$T$`t9KiRF@SAP|*BWztynC}ZWS zo{%aBy5-eWS?J%I)Bdc8mSrv@@^ynzUlS^@;c%l_nJ3(G1rt{YN8-TAi3A%NsIIZ& z^tQ)8Dc@NA&ET_qH>j-Jmlc&wAd=#6#CB#`Bj>|MLJFk1P%ZG&Un?NgU5n@3qCMm0 z9D$7nXYU@e+uI8n%`f23+86d96MN5>AYwpt85*sOkJpc!Sl|eYKb;KdGK~dD%w$@r zc5=F}spNsBP`v5hbxFk)3Y6G&LaIfr#e29)gYU6PcWel7em^=ILmrX-SzP|UKK!Sv zM~nf*WdZ!BPqhF31OC@B%0GHkfAzTnJUY?=zLL5Nw?5BqVs0=!yP-G<>qz_OkSbhtP%Oh+JJ8BaNtOh ze8j{9n{rpXbU`NZSEeo+XdLSuH;YO5V}-B)P_oSNdToT*RUyB=UWm**mGc~~uV zF%Ntg4@`-qrGw5r{KMoAyKllI|j`}+* zA98Ms8?$fAiEA!G!Dff`jXBP{7{<4|FjNaQ3=#KKNkXBGQ+t}ev`Dz%7V5Dl?NSE| z7O`IDM`0okh(ZxIqq&;GlM<_CBBC3y8nKz#n>B1DC!C2{e-16h^cAYCK@o~B zPgT!6l}``>Hu>8R?{X8__-T-myvz#P8d38M%K2?3CuNBH4#b5 zQcGq=)uPlF+@5id=z=Evw#v6Cr)=|Z&rz^#7{WY4^C_uf{ae?JSyJ3B~`RCadpKB9XSqc?DU*9RbQ?pFLht3UNlbGSjCEktr~#sE-u`UUpH5O0%bizTShzrrcU<&P!`+2KhXcVgXLfe*k{%Mza&t9Rffj@0mvHM zydk%gwjk#7q48I`$wy{Lfcl1V)FK7|x!QE81ID7{qm5a^b)VCiBneiKtcKV3lWsOY zTKi|)qj;j;gii|eYrg$fF$XV56n;C%&xWCF(Pae(cM3YTR&RM%d(Uh6`^VUV zzDU7PR4f<^B?(4)7V9FRvJ3<)VEBs07YY)o4{rqT)7%n(Cgj~^>Hn05%j52USlcE? zyL_Wc`0BxJ`sl%y>AD@)t>qmJ8TUmw!nK7TSlwkO+j&dwW#+u)XU6^dLwniJ)yB%= zxS1uJ^$xv+6aP8;xq6WXzu6!bjTW3!t!)iwW`otm`U180lyRo&8};#I#0JLa z(qsHv+AZo;tdZ19uwUGvjN~8XnBRs$M3#mN{j)bDj@es18C<({{5HsAAQMx zRvv#WPy>>mzt+$H{`&r}xX#kw}{ZCr$LIoNRu;d7()}%Y1P-^{BO^AZh%m3z~wco6H;haH${sxHHb4p#!e*skQCHqAj#aRFxGR zGei;WP`5q|diEcR%%`(Ce7wjieX8bGHSuF3OE)NOU1ka?4(6byl zQ4?Sktm|~-Fm4hH1c=G)fUS05(TurjV1bz6rl`^-uy1q8hE5k+7?8ky9#0RxD`GJv zWu+ydNaNAP@c(3%mmDM==HMHxs@8JiEiw6y?1guL2hjMjMOk_K75V`zLET#V9&CJk zF?sGB&u({6b7Oe3atraIoMH%{cP4wG?HktWf7pGj-9)^dKyp3!<_LzhO{A4>uZbCX zgoW1lZ@}b+7+=|OtI~aP8YVwIh8UKiweMDt4G_fs~QnF z$&wS#qbw^3AP>0ubGn9R5neN-2%B-K?qD`sYK$>xv~}d`r%1&DM<^y9C|^=(9TG(x z%6?OdV*~Wt($&aR9O@g0Qpe!jB@zONG08ebw^F9$*UPOE`b_4Kn-+UCXG4V`C*zry z$1xADY**sR0(4l(xsY5-<9O0dh-vE?lv4c$(vGh&9*;TT0`Z4~wu5gr49CFN>Gj^M z-rk-27@>ND5Kdr!eP`j@kCYc@W%t(*xN+JaX-m+7w;2)uN{t7zC!@THags2Q`c=We zGKP}Z{PC?2nG0rW<4q#{$9-6F21=kCKa@7*BQVlRnm&l@v zjYEe(&gDRalrkmf)5k-DG*MjzE^lcV{t0`v>146O7sn+~Dqn&KFJx?VpPn(Ag2B77 zvXG&-X(mk`Iu<)LEzMV$DFG6O>Msbyb5e^E>O%Dm^GPJXvoCrg(x_>GEJpu(%5#DV zx?D^QXcYHINK#CX1OaC5b^XO@cQQlG|^Fg9hs;qi!foGr*bl0z}CJGk%lw(t8Y zZfeTz>)_mI`(_;(Qrjb6@3$?ou)UhZx87UNRxS_K?Hu@>ru?`&X&1uiwpPAMS#IxK z={b1ktk$kqysVbro=z7W*eM~4p*mGCr8F}0MiSJUD?TX#IUVZzluj$4^UN;5u=a)d zh3_TyI`Wtw{_*&5X{ zrWlJe7(|fJlbfxfQ2Rh0&4|Wf53-PBZozzCeSKNR_o>pKAzJFq7x-3vdSch<9_8U@ zrImd*A82=G)Lj!ntTHA7hiaA>z$I=ihK{%wL+otRtSwD74vNS=p(+O#M%29wM$H;5 zL`h;x&RosQ&&vno4uPtD>er9zqEpv>YjwV59-e*$lbCG340k!u?(}&NT(7cEk2V~y zCydF;4c(#i259yw|$p zg*^_IkD*hKeDT@U;--4;;Zz=fsgxnQ5doUso*BocSsP%MfsE`#qR!nNTSR{hX*B^1 zF5a4Opmw{R$4~kL&R{KF+`0mw8^CM@e9|r(6ZZq-7{a{hkMAp;c88T6o#(?@w>~v6 zRIFQGq-rA|ziv|%0ifleg(_Y(UE7GtUqeKG(W!4f%SMl9)^uuty(dm;)rD+>qsgis zu!EGDf=_z7uuLQ0R0mUX-^RpPc8uJ~S#nc7_XrwwrL4<^QppHRQ&wu%!t?j{z;{l# zc1qGm^8{9cQtTxjQUbbZjG2$XMxT+<{t~yAZV-O6Vtf8zvTU&ot zFtN~*0%LQ2`$Y9g12Y@0GPX>MR;~#Fvwp?dEB&ho?t{bcKe9fg6 zN6cSPQgF|f^s?3*oMF+k3vCmArVhc%#8j&l7cVXCYjh_FV*`4mFxY5A`&#kf$(#J} zzDV6kKR|z6NSmzB>@B4*!R73NX`6ZlG9!ulL*8}`S`DgxMmpL=AHQkHm=(b;X+rdo zOQ$Ov>WvX{P94$wo(M!>!yTn0ftn727jutXZB(~s?>9Hn%+AhAdU&w6mY$v#XJ=@}bM`X?W+R6H>?bige~3()WK{@r8!XXw(ORJ?yxuKp9|=Vl6RX+3KwKEgGm z<^WAJUX|hhjX!b!q;C!Y^OL&l%!;=#N#coUuHw%kvi~{p#xWCd-htr7LjZkPEwuay z1-*xPeafb+sDV6qg=s*dKTH8YhoB@R8;n>@SoD33;T;7MeLd``fE>HZpDdbrhP_ympP#M#a;ro%Bwhq=UtB7CKi4ak^sN+ z^{XA`G8l2tPV3A5eEaFNzJ*+;61a`TD0p+PE?N|+G5bW0o=KF{#oVf z!}98s{nHxAEM(iM$|3wSXjmnH@to6k(+!*qwn*eX>BM`(Ue!#pozNS$#$Z!Vcw?4v z_m!q}#Qna|KORl`&_1M4m4rK!GYz|u385rp2+wME+k&G_GRRBos*?3<$DdmHYLf=SR+ED#yAj9XK_V(xbHr_sZ+<)q6|V)bcxm#1q+#>1enWU zL>g_(vFh)H&;B^Akl(3~9$+Ek=7DkTFd{=4C0o)e_BX?awfKVR{GcgG=IgidA3rer zqjH7kr2k=Mz@P7+TL^Xu>=Xw5u0i<&dW65+|AwGnH71a0&^(9NlwnohjLzJ8D8(JR zX84jK3bX>dZ2CiG!QL^#N^5qtO0r=#Ic}sLn<>>&P9DZFVn-gD+BT7(37kop2&2Tc zLxZL97Ol@$4^P6+9d>l^c=SgRxY*IRY*tjG;<}r|!Pq3Krf>v=;N-AmzA*YO@~~io z3MDhQ&&@}681>jSveAOY_0$m^gbF0fmq98x)7SxKb==`H0_@c@#V3vvlapUrx`gnC`}Y5K%#R2km&qxkM{pYoTF~H!iGG!`9^*VmVysMl*aNa9QOxZgnCu& z7SkCFV@-8{%}JPPh)l6K75rtq2=CXdypQJa(+l{P=lQ9ucrEq#Geuv5 zJ=rY~sm*F0&jn$YAK~YBDF>e{fYR;n{4BojSje1mv~w7mGPVN|TZW_ilIxwmH2;jq zp`QrJz?z|h#9P-Ny3;vATkBoJ{1w(er?P|?4k~o-ZIe&V-R)qe<3WD;jRh6!|sv>g%DmNO+DK>cdDpR4le{ zI;Qjc)iO|Wsm;ede^@&%KQS#zBp#1S@o%#n^Ro^HK847hKFm<>{UWstJGg2j!E?GP z2HP-4M+;nijt|yi!Omg!80K&_d<#&h2;{R$GiW=c;~h5hiT=2COKwBWdTn0^Gk~Zo zT&dAB!!6>7lL~pma&T_7t^9J`K7VQH(2m*mU|Fer@s9cEId z4{!WiOUQiAP9C$FCdL|Ke92Yjyiyi(hOJ8+Vrk8s6XAQ(w}$^i+B-&9nr8jONd;9g zE4FPL72CFLt76->QL!qhSQXp0?c_bx(=*f4YkEyT?>}qZ_d4r*$d_~NeQo@ZI}Uxa zpf~7eyo%S?cCvs0W6=8{y2hOuZA}|?O$XNc$Lwuz*GA81@lcjy9GN%vN3QhDiRM>*(HH5l<&^Sm95eSy$OELb<{j8bfV&;uo@&89cACK}ni z`ix>pFl!iuQB*19SzAbI5BR~W{ABc!Nb8X}F)-`I()b4Ij7D=}4u`;e9k^&tbg&$u zrzd#?$yMK4Q_52#v&6wp%Eu?&D*o2)Bq{x*-Sp=8ZQO|*WH>b6Rc^3?Kl&5GEVb4; zg_61eZP}dO*M;JhPwu%_Sb5l*g>N`lnb!(OF9{sHg<~?MzkPgK=PG>r6Lak-$v-p@ zQ2C+&PfKs+B~7Iy!^&w&~2$e{{- zZdy|bVT@W(gDh;3S<|hURE_x0y^y=fBW0%J<&wJz1GCINSa(|T(}`7Hce}L|bMneV zu9|9sS9}6LMIq)zy4D^4=VsLI!(qljd)&nJ&Jbh zc_?W{c;xmt#BX{z)*iU#SdEHK8mB^{9yxzINSjxY$S?8F=sQEB@PM55LB4;fH|M)x9|y#jiu)_W@&F-==cyA_)VNVx~CQkP$-pB{h|gyh2jlR#u2;^lFAT`uY&?n1wB%fNM18aV2*aBK?#V|I*uV>i(AN?gNkaQf*j2*!>LBuzI3<@Ihy*V>tZl zKGj$f-I&1DiaPpUB>VM-B^$Gs+z6|jKvO=h@=qs>&W2XuJI#rfwTVlKu#7!2Gun2} zY=QB#G+0e&>TmqONU?-H%XcM3Jjn-BD@ewq{UtVMbgciOY|8#?xoA3jJ)U9Dp!k?w{7QHz1RP{b5+3o3Hw{fZN8?gBGU;b+XK$QXh<$4nVLMxe)-G+ zIeutwpnmm60QzAPFNuifh((rzhnE&ut0=JeQeF{JSq{MJ;nv_veq|a^a zuy~X9QM>+-E02N4>~kk&Y1d;C@rETYqP|tyPxGTnz$ioZi&iAQ^0!KO9I(6PjLrOZ z+8~^lioOXa^RO@o-?k(g5_u4<#BIRlF~~QcWI&cn)g#ZLVX`w(W_dUTcjG6I>S)L5 zk>jrB8w;2$KM*_!ef&{qAk+0c#Pu}Z0vc{HO~3AZ6%Nd#%V{tTjOz04`r|yxz_OJP zjI^epyUma>jEh5oZj?c;BZW959+guQk-lN;!M1{{&kzIz!#elNoyVH@`0}~iGq+9W z{^@<2OzZxiWvm;P3BIxeg6s}3SNYqkt3S_G{%=+Z|DkBjr+#n{!%zy6uVgWjP)}C? z;7Dth1R|kw<{ta-ey^VF8YwV>i+_q!z0d4?K22ZsCf>XaS#gD9K9Vw(CHTg-W2HB& zKI~j8kV&ak9Y@IQ844x=i{#l`%iuT)kPL1mOIe$66twVPdTnB(R`XSM!-*$5d*YodP9oA(=+cge4_fL_Gg0HIc0|O6|pkDJ*l7Se9ZLz@8;@ zV9A7!(2gEuEOQd4qciL_p!2~T<-}rGbMLZJNCBco~kci0YLQ}+Axd( z$DPV?S&^#4J9mzD_}T8BSQA!=*i$vIlR1^Aj-od{LWf$|u=6vpub*pBu#Ud7SHh@F zmSU`c)2#?a4b9cUBXtSrfm^9uyku&aLN2FNwFc6I-^CU_0|(UW06QD3ORe+VF0wHd z4o42Nc~_MGu~y(K%s5#ie*br>+nY$6(cj3@KLJWDi;(a#b51NRitc| z+2GrcRW6hWO8{(*0-B+_FC`H*m6a^aO6_%i{W0i z#%mt#L?VnEPnXjx?Y=t$JtLJi8t{TKJBdemCi!_~qZnEfGR9C->Xoc93vpP61Y&^#c}Rnt zJgX?4U?Qh_)6w?qVCND3_T=IH9@5cv%o8vS;7AU~fi9<84ZnuLlNnC5t7d_j_FN<1 zZlG3M#$Pj0^{9RsXM*8RGE&2dKXM$FM*>dJ{Q5Sk7Nl+X758f#&@Q^^@#n*2NWo&V z=ZSW0%8}^WmBd}-Mloa?6q?n9aDM`Bbr$g@mP$k$qrcm5ULC)D(2ONc{!CZqm zS2M0#lX!G|)aiS@mt|K*?&$siOOpNgMMwJ@2wG!Co2E#?#iQ3)R1z6>lRk%|==KzA zRblouh+!`^9zi>Jrw4Y_Kse*>f|vbJ>~MZvI74Vk(CEiTP1@cgxm_9IZ8($sdlP^G zWQGq`B#$(0+b4?J9DooJDzWEDsOJFT5${i%eHDw|;Je!4?%C{*rtQt?I<(f-?jy4% z4-*<}uW6tHq`NDzHz4KmQG?W42%fZ0q-FV;a*qm|k%Lsat5Iqbf9^RF;4oRHl3`)wCIwk4 z!ss<95lfEm22SV#CRmzNml7t{pgIzi=`xQth6<|Jo3e(K(r$4q&TtP@KDPoH<2K&H zs^eZk?&sLAYBBzC>wku01_FvZJ-fSvZg#p%spTBOsBu(DFiIxKdSA}DxvV%WH zg5MgFBOapi>>K~({XkOCkq|__nlGVm9bMsD)q>|mnnSnTRPQBHAUhHXoBo=M@O{e8 zC2(@;G|aJM565b?G;76gAD^;qRNw!UH?r_A1>6AlT|7W4P~d;>5&kduqyM77aH=f# z5BmlH{zwQ?>w}}Cs2dq^CIvtrf0Tu&ptmLy5n-UudHCtvMcP+R{38g&K;zPERZ((`yAM*BX}C_fYPgIHV<=%rQZ!1UTVJROZ9t51GXjb|TB(mc z$cH1EvajH=4xQ3TQ-ACS733@4Vgs#K!vH|80W&9R2W$g{9H$Uq^JhGZG?3{ z!BGS8RKF3&n>ekqNI`n>lfZs5A_S|>Ty>`^=1HfT(uwC7=;W<}g+IwQT=S&TW75Q* zLWdS!^&n9<)#RE287|m3fT53V$x}!e<9&ZcjbkuNu~y$pAlJ8Bx>`zUO=xC&PQxxz z8!4=8>{+>4#@D;qAd{*z7q96z>*5;d?)&l!k2KyuHgbjdA^iX+yF5J)!re`^15wh=MBISq_71zLeIM(Tox0w~_JnPqQZQT;oMIuJ zzBHo6f?Q6lyKMsZVU_;q9wP|oDENR11KRSY;CDO{rtcF*Ih?Llb*m-eV9BHEd*r~I zQJ=z~qG5PD*c9T7e@Hg}(LMBLGVrDlLr}~C#uLRrU2Tuf3}){9Fe3 zCp)mhMx7sAEu$r<5kaO(3#0Rc7+!F~lk6NVu2zd8U8T5a&&e{6GjQKg$giGkm9WRk z9p@TD$RrN1`8?^#->L?Xz!`#PM6E~doiU63KA0>lvS2P78!TH|rbo*7yz@3LKK!<; z0915~tKA9CdybeKd;l(n^XD zKp?*qM}9qj!rLjT$qI2R%8QAJ2+2$HO9?>&q|HrCjO_oRk-`1%fBYxAim$Z@0h)lQ zEC66w{_nhqe?kNQHhSfcyoh=NN3%L}Mg7X}LgsN0qTj`1Bj~05AlVwE{=kdS`zJ5r z@q0KTw^UVIxtKTxs>86)L_Cp;L5bp9)I&E4 z%0m2KBI7Ys;vlZAUz&-)rn~Ck!R*GfTo47all)YSIL;R;f&Fm>EMM#}Qx0&X2)Hf> z$gIC¬hTPp1mQ67oKTRx}g1Q4VfeM&wVTfjxBL3V9r`k%lGKTL<=azP|(oS|(N6 zN4(nDut8pV4FE%RK|NRyEL5fFPFQU_pX;PVtI(YrnvLyc;>0in&h3Dt2EjVa>N! zmpO?ei`nnpQpeG@49=8YXi^%5SIkHTjZvCEW@HbmpZx?V5+yr`+t<|^CKhHHSly1R z;(q1P>rh6gZIChoiw{G#7O2ari`;GK>|)ZxkMP4aoyQ!7rH!a>A&nNZ1Xfw~oFC0#THA60z0cSpZ|Gv| zQsWy-3iu_5?l+?a-TK$1_G0H|m?8sLjk#%FS_&>te&8kE2~HbQxeHR(YKfmr=5f<# za8ZRuz|$MxU>Ap%Dq*k$*0QcvlU$5UiY$`ag(!mISG6-BN-AK}FMUzTlJh#GVa9VL z1{xU`isw2WQAiJLzR~}9xw88D{7Kd$c&F?8FKE^RV00(=zb~8rLdE|lE>PbM;3)a8 zW#L~{tN)(i(bxNOke?_g+M7zm#5|~iEri93VHHQRgqEJx4|nQt$_{!PHdI&4fCP*7 zGP+&wjk=~hUWM;_W4lN9OYplLLZ-cG3+xC+VY}6IzK7S{kQunJ zcy~!_#Vzt)zuxqA%YgKPqW+x9uLDeqeO#`pcxxW=R#<&z!d(;pmPeqBMfk~1Ko0Eny*V6XN!9A9h! zH;}0jK;FjE24JLWX6@i;?_>p#WY%;1qwdvT#esa6IVL@zYopwgM-;TI$MiS_MP8_< zV0N0?D1Z(8syr8Eg>X6?ThH?LY%VCecr%6Uek|oa)#i3Sy7Jn*X-U6(zf;QZqKgAl z2GobLI@~Hg2N|e>Sz$;|HrG#6h`=*A@!+bnb8Y6$zP-iKxdpbX!)2$RLJ#e+q%;!_ zb~)_Z5cEq|XLmYT9C~?ynM^Nht6{>4K}`t3Y<~4}jum!I4rPQuIkkit!{M}Db`%~r zckzuU6VY%k^ul`X_33?p>oQy5Nz(Yk0O!HaThP{N-|=f3l?x9(e`zk;_rP(tWC-Kw zZ*A$UJM-CVR|9CF3>e3F2|hH2QmRrRwNBXc%#bL52H6)6hqMdl5RM_WOcEb3jfi4bSru8b1 zF*(JS@kACevjQ>cp*|LV1?>zI`TaOmaYVBebO*xE^G+LU;nPTi5%8M@cStbJR;Kll zOy*RBQoUZxyZ`Ia2X?;zt`dd7Izy;@ zHz>j(zI#yvIa4eTA*OjIO6Ih|Ur*OQ=EH57bN|>79imS?^+vsIp_d6xE;3wYl41Dj z#}*;GI44Dv;Fk`Ml;}VyQN4~R_T%xf23`1bNC0?jX%R48Jh)?OAKTLl7+3Zx{&m9S z^`frs<&WE<_{m;jg&k?^FIXl4^9u7?I=Pn%=)p+KHCtL=Yu)cGp=u&y6m42!K@ijK z66mm_aAamEzti#RbZO+)n_%G9DAp=Uf*91Z_QTtRrhe2fE)9WBl4iXI_1tH_+r6F0 zg0@0s%g0>qu=_?u73!9`i5W{#sH5(N;0ool=cDBpy|KLA1E*`(7{0STh9UT#^O>#N(>+SxU?USErszCl0CA;JU4n>K#HDc~xC03ldF)aUq~+J%8g z9ulJ{py_FBC;6E4v#A#j6|bQ72nMI-7y<76!g$bm(lVH9`dGJhm6WS?XaQ&Q!*upM z$ceOeKaL&uGWo>@D_!>#RV*{M7dnCsT{mp%lE2prLn0GF>=Uh?(>QFBzMqa&TbG!6F@|z8rk+6O)Wf+wIVjG=pIhym3bk)f1oDo- z$a@e?I5?UtqDKgkh>-O1T+yV)`ZgA}MKp)RyMCC}es!RiEPAfLb|iET27L=AYSVoR z_<{>2A6&$1oAA<%c3y`SpeafK6zAS7`22|_&xD_P#-7%^j{wpYV?IW=UhTt2$FUb5 zAqoZZd*A%W#<^2liWr_xMSb2QA28~HmW=6GIb7bj^GPfkIZ2qM-bcKON9!$j6~y)t zRHY(?!xMt-(KU+p1mQ`3C?x|oZB;&eUJa>aqoP&7uOu^K8t!C@4eT&7#k^&d%c{#J z(i)fqNit*NoELsxGR40>>!QO^r;fCf_0{_38@|$38p^Z{O@#_)H!ql| zK|8*CHa0D{yC(3aDPjb*BfMLfPZd2zyw2Uq0_o3+n6ccB;El~5Ry2=xGeFy;x4q80 zmgng(VUs{}NHO&I{dfrJwDMyA=`s0Ul$(-;6O4;ZWwNs@vaDjIVCv!h+SB9-Cpx-X z9G_1yM;_eK(R9~ydt&g3CzM@P?pw*Zr0{`N!+Kl(+~f@e=L3=EtcdB>O|^eVdsb0f z@M=|mo@^HaiKu`$m=$JhZ=bXJ?z(}Cy52>t8UGSdmgTC0!`Zx@wd4KjJ&M8m zoO^}rOja*es-LA>#!&6>^|q_O{*VyAM9`O7W)vptf#yDWF@n!pxjbcgIe8>vQgfOV z4rkb+Vo)<{^Vf7?GAGaZ0ky%28%n8bxQnCoJ!An38+L>RZ{68KhAe4MmsyWs3!mQm zUWBiMC&?bVzBT8$G0tp`CVbg0#f@2>WOL`2u`jDObYj#K4!5!Co;W>%2Tk%ry||Cn zZ4&mK2>GPbw0DhaEB!Sb8I0)Gr|7{2K_Vr_uAh1#4k4wUG*>S2-ZtbF(v=7<+QPU4t}wb3BN7P~&B* zVd?9BfFX$qR?C`50N%8OhQQ8%)`cwH2!Nu%Bj*h#%6*K0HX#ZT{t;Mj&dFQ7kA(Yv z^>OfSLN|(QqFmR#Qe&k~Z2fE#kr7Q9#B!DQ&TH$jQDdviMmNAnh=KzAX@Rg~x`)QC zHWSPz76Kz)^)0!!%q`}E8g-e+8maT1&-1w`ynRaQgBZ!E5Cgs+tiguPaoMS>3+9_& zNT;Rih|!au`Y$5Ey!msETNtu4vhoKV%64lk>>(8%2VqAJb;2(NaJ2`kaZB3GRy(&6 zpUwu?{HUISj{3u{F?3>M-K0n>w(t+ws*r);w!Ih0^%5NT+4$69nk;O7^xsIxO0>J5 zA3hR5UQ?Cg`5jn6v*)yD_@0X@(~N)&PTDGqmGGYS0i+mFwhSp^1(J=V1H>v)wv5 zp$Z$fafxhS_462GJS@X^caz5Y(eyM;p^_0561!4MF~lAj+NpjD)2OM{wBWMeDEEZ5 zDr`!ZGZ@lX;-o2Zez^4QL88iOXSjKZxp>;=#My$AE0dt%*wLI4vGs)ac5K%mS^o{h zi@UxsJX+Azr74Db_r_poYEs-;kwPUeKflnnB(l)*ARHrUQO+uyVY6AJYA=mQX+Q!YvLETZI4z zWuCt~9r+zcZ48+8IT~35IOrBeZvT#|Uk%}}=TBqFQzbc>^53K-GFY2HVbWc!(=L8g zYm2d@{HRJxNq`L_L>;yacX)q8VOd2n@RPY0(*8Pqcg(*2*umnNfqxzCf7Xy3b`?o( zDs2EE*FP19`o);Ihd_JE?~92Xym~HDKooXK_5_9uJnV@EQv*TuhY%vQog1&lHH_|t zq67G^v3`x}XU+2mo4RiOh)<0g+A&SiP@m=C`fiHmGfV+f|Q-P9^=HEUA_S#la#Q)O1QQi)~Ag8Pc3 z{69DbW23TC&4MoCl?(?A#`R2xzBx{D>r&HPm+2DtB_xB9ncHyrl>I>F{f>g0+v6_A z9w?puq0tI5ae{zuc5Hh>q+~6#8gvN=i!w41kpVojI9{Jn`>F`B24VEsVM)q0=!N8L z>40!W>C{YpGHx`VsDu2>CQOYo&No$?MmPZ)JlV{io=ZihHRQQ}0u46uO?ReqqD)Bu zqbDUu_-a4S#9l3hn>yF5pKKs8XT_3?L*d3VAh|HcSi7I-TPKs8QRoNN@;=qw&+mP^ zWn=PvhRU+|Vl@oU!ZwcP&@z$0H{;)+x6Lmk!r6)AvO45xjt;q{5diALuLT2JR0Wt=k|Lvnru z?6EtAc_MH(Cs1H|V}UpN?~5+fL`gk;TJQ ziFlv+XFqT3^E|BIck%vbKS9_jvdRUB1PVZB{I@|Ee=dCfD+uF%mp=eo@lrlW3vz%G zE@O4=%> z#1K^g6M$u6i9ZBNruqf-NA$9{Y`~RD9+V)S9q7#s1#D>FeRXaku%f zv*I-V3=&Mv)aQBOC%$}fz~Pto~%>ZVHYDi=;Wx*uDHLQHaAa<);HI z(r*!u-JgjXg^4&)K!CCsUG;jf^y~FhGI{$4L7-nryo>xgRT6;1Z~@>j{zlFI|D-bu z5C~cVWO0C)!w9ITELlRL(lC+w3XQriIYhf?V#GFE<*cUqGWlp{b|#-#Zl&^^H7yq& z*z*4K*ellk6)Mv>m8mUMc*KQH6E5FJzLaH$Vcbjy$rZp;T$Y62(&z8~?Q+Ay(y zT9Xy)5;{m+e+)QD@+%*PW?VEBQy5|H)KoGD8sJ%2Ine*$^>Jw{;5h+=)}u4l0_o#} zB0S;M_o8#RRoK;YM^0?soafc{vo{q+nKPlvT*dPm;};R zOctK!uR;7O%qf#}B_-z(mT;WjMs~z!)~Rr`rL;Tz;!lV@vot*-B&eM{ao9{CmsWp# ze(R{|rh}1UV^**%`_{pAzsAIWpQ^dF_~0(_1uk2lcnVqlLHe2pX)IlY2D>=6xHmqB zP2;FF1C&-&eIS46@UR@H%;&)4xLJMAX7)&T4GLw{Emzli57)feajfp`frr{5Mu~Y} zz2bm<;N!rZ>!&#jxBXjj@Qs&`^?Kx~U8T239TTp6K1^i$E#~;TmT);Ru(Vy*GvFWx zSm;EC81W%kbCO0AjG~AG<|-1ui>ooVvyWZbd zY?7Z(?K`#3-jD6y|6o7yOV#Ve>S3@HaQ|omKoNgq{rdkX9-#csftKC#ml$~rK4fL; zL{qWvqQr{8PXzevQQKb|+GII>_twWDG{m5mC?e00a1n{`R=GQ_9ipwT98ECplOA)p zOcM5k0D(*%@)L>N2C zGSqQB!KoW3x7d)GPe^_}TM`K9*G69(9EBNxuRw@L5{PRwDIcihv8W@H)=n}HR*~94 zD(_mVvR%fIyGsqXhQjRSQdmF78fM5ESgxh1AOUQF29O47ZDNezeu_Ay-+oi?7LKC~ ztMI+SC|jPRgb~-8<|~>gxk*)59bQV}ZL4tdvUvM0=Db?q`kCQjt};*SJI-7KcYFJ4 zFe!8KLT%No%fKAbb$BtCtPtHDR`I*)r+#UaMB!iy6Q%&IJZ2tAM%M>x4w5!*ugR>5 zrjN2U&-!i7C@XCFhuE4tUMB>4JJ6CQ1|1s3zU&?HqJzWfD23l*3;AX6#jr*o_^w14 zbiYUKDKaP(@u$@4J4Uwkj?2|JV4+75_ShM+ML`e5ZoUp){NbYe6(h{&#KKm91r{gZ zvSaz*-OBI4q2Hx79Bmx+EdSS}cQsB*rUwt8*6axxbzNPkr9e!A!@=Pe7qIgcC+yj=f~HudPu<%W2No3M7bHk z09h#k8`4?W7yeV^keo(c;wLKA{g1xjly<9VDiZ!?AMPfECdHr*T2*P2`%cAIs!;d) zv6@L+&cHR)e{o%kFfXXOHcYZY&I5;3SiWWQ3 zgaOs2U;6`nw$AqZLMv>;g8C=9CG2cc@^li?X`kKkD*Tq8|Pqb5Vh^l)? zSG5&nRLU@FlWZM*`6|@-Y+Zs8TCBs_D{KBvg^X7}e7PcQgU_%UYXd9bxsvv0xwvjC6x?Iy4QBtU%t{)Fy-|G2-8dH(K#3Sj5< zj{&||e9kl2}AB!WjbB+ zai@=Dw~k7@$2q%^I}!#7T7&7^lXu}~qyA6UCoitn$q0LsSXz>D#6Bl6CE{^uO5|GV z<|#C6Ei=Sl!ne>mXh`Mb3Y_K1w9;yNYyA{Mw8D044R_*tl**VTsK#hx@DimtFJSK% z(NXY-9H$==QC672PUZa7RcF+b$&kIwb=C!1!PP5ajK6)k3P^-o2y#wI;kc=6^%vhl zJ1TbafMI9AQ(1@$)HSMxS(S=vb~{pK>Z(%9fb@kS7SpR%!iE!dE*dj|EF7_<4##gX zKy$@D!0Raj2bKnch|P`d;Fb#=OpkBjf(d8Z`vh*gDJVt)`FUdSNPcmdakd}cI*Rzo`0nPK}x zpd=|l(O}I$Qt$VZL0;}F5Jv{K``2sT9l23F1rb`w^oX_lu)I&j@yA2S=ucle)>gem zHXfTlv$Vdmw4~=;rB2Kuuda+ujE)~$INCXc4wLeqclU?8Dqd88lnfyu6|wMK*JA2s zeYKJ7Lm7yM&LjGuaMo_y*bnvD%GSAd-RwED@%PueQSqOl{RHVziN7q*t^oE%%>VmP z|Gsb4ad5EwjWy%+@3G2Xb&)x^5}r`(-ep3$E1dm zdS{&ZUY^-OKfsh=dMqehBQNfAtaIP@#^bJYF`T-|%vl84OCk3UGCzp-NhEkrXLChx z-ACP>dD;$a9JhQynIOA3_86VPzFisjik4n|bNL3JCS~rdL^LHZoZrVOU&qO6VwHf% z7i@ z`6woE?A*_fBaN_{1f-+iL6g8`IrVyfc->r;?T6bP_FMzJeBNTeRolok*Ii@v=OeTg zR!HiGe`nZHol&vBY;?zjQZORsPiE7a(_>YE?McOE)57G$4%Xs4MKNKmte$PG75c%H z-Y04q-bX7S?4A|V_*oaNkgSwHhDfb^zPWU+Ofw6rP>hN#{F+t5NKO}4HC5jndZ)8Q z)zn{a&M_h9l0hw|an&B^Skk`5Q2c6*d zu61Q}im#hM<{B5ZI`YiA@pV$+wZ1) zMWEu8O7;=kd^1Ev&ho=Pyqx4_OFUBIxD=NGEjrofp7*=PO+L9!Ry~1tF$x`ZppoQ5 ze8`Oiv3qtaSF8!a5u|Ly$Pl$f5O*@3PomS3c(I!iB)jx7h(BFSTLfEjG+$AK$@(A? zaU9@U-)g*F>U(#*`_!_)T}0gLCcA!sbWA}xmfe`Grj|DHKngMVg7_Xf=0f`{E-=b zrOjXbLgAW^qPT|fMIk4Vjh^rx7i5P63eK&TSR8Mxaq8P7Y>Di~sII=uW=YVOY+J-a zrU#( zF?9v_01rR~Y5sh$GMUkFogZxA5g!x$chBOdZh|LO_`oLPa!j1Qb5B8tuAhA5zMeU7 z8TH<;4}J~`h2VbHGk+xcfv(*@!@!L74K2FXN#CjdYmj}8E3gSM=Oui0NM=c|1qp*h zEkx9;7?K;ZYEWb1n5Z$nSddk1NTGa^5JX}s5oWnTiiy>>$MS)%^!*Cmmg8(&L)b0%Mb8R6FkR_bt{&o%Q8rMhJrM&1_{*P-f-RUiNH)SW+a}u!$ zzck1yi3@_jyfGpW*&zhy~k@`HcWV>;=%$ z{f&|0U$k_3&L)3bZTw&I%^BQ*q5x-|DWlnv1d@6|b5XDYRPs3b{(`yY0v4j}_3@a> zT#I=rbCODV9KM5vHy)q;{!43GsqJBgZ;8)-S5xpzMMNLvKneD#wD6LGZqkov$)g#v zHWFls2C=28*Dnvlidy(Ae(q=>i}|^QqS&Eqpn(yWCI2!5x=&LnI>q;3qxZ5}>6cH!dea*uDJ?R$(fEf zo|XdJild%Y(ElM!v06yH$9bE8te;&DB$PRq1O-_aTp~7L zEpt)91*^%PeWa8oRkUe0iB_YoI(-QK$L2TuZT#KD$5B#(07ZCWh-dKAJ2Bd+kK9;C zuW;%jQngnN^_+0t2kknkjH`1nx$@)OjAYO=IrKWX#9Py#VTr9<7>9l4YH_nTbT&yR{quAvrJ`mSdv{f+b_IR4f4N{496nC3%Qyp6)djkM^(ah557bp2wRQ;j4`gLRd zdj7n$N|14wri1T0e?#`z&}A&O_)Z@HYh092pCT47otAJYrfkTLa3DjmNd9(Lah!zG zT#w53gWq5@{%&-6y`rI+1J@+^@uALT)ppr9N@C2MOjAApY_(Es8+>t0Vr%Tw zy;eQ|z2_Q!*!oEqmqSa@bxMP78ZhhqP*Nc$YuQp6p`^$tjkRnmRFiPtT!n4NT-kEe z6e&N`XgC`uU(q6X%#ZAN%mUU**G5W2>#p;2g2VCYPXG9fLKIagFW)#bw7gQ4xq+_r zD-E3|y+9A+NZf~ryK{_=fh(5hR0Vj@>c*nQ?y}dwji9ptZU6WCgLZ#1&vgnPNR9C(c66qdu;+Y3>^Wx|>PeD8JDHR$EI3M4GUYBhaT>g~*IfvZ! z0H-z#(9v@K?^FB#-(%w6N}xcYc!J%;a@a#s8Q`H3fnrmlqQ|%H(8`|p-z`GkJHA^B zlC>#Ph*tJORhW!rEplgVr}FqXR19=n8@BBYLP_XGND3e;69Vcg&D*5Go(NJVBT-Nd zU4izXU`okCJPV9comf(cU9d~2+QERCccZKVCVsFE-0uqCl(UsQhqd>(My7R@OK~I6 zEK#{K?_s+Rxj6F4(H8{=C__hf_)~29;ldU(m*TU3GQ=|}|ICA@(1?>DAPnRVI5_Kx zk$e_35y(1u`z~%IhNuuqP8p@Vr+ z>vfLTrVc@t3r%Y~(DG>YydE~84!EK`uW-59glpENC=Ft{5h$84xqTeejeZvcaD(6J)EMi>?isU=X=sBzRr3566zUU)=ONy;OZcVj=#QWt~f9uv*98#uwY zOIjZ+12s)ur{UGc(ABFLZLNzYI?K(y55Cj6qd^~4UnBCFNQfK=Ve@>Mthp+MmGmW+ zGuhx!^`<_`p_yK=H&-Ipq;V~Ewet6LS$u;%ea*zy$oBVYYdnGV9_h1XMTgVtM8fb{ z`*`7aE}3Bk!=r|I?91I6xK3Lt1+qO<$>>Wv-U+(Gzrt}A*|jCg$RHP|-U96b4nPe= zD&CHL3g_K2j4I4x#`ux?}Tj?!vDm(j0 z#FDR7nTkVfy7Elg4C(cNB@@hMrKQSr;2DxUhS1%%!-c1jdeB3~;#!bgL`-?oTtVs2eS1>|Vnuj{j@aHDa0gOwCicF* z*h;AO=kGlsF2UMwWNv4D7zMW;I~?}nJ6-Iwt;8495M&*=VXeXfj~DwU(qJ<;NH;mf zv@goKcLBS)V0-50^VJ?w9x@2XC)9&tJ^RJUr@Ql9ChP|EnQUu=?Jzkn)y;ry(3z=x z5Z;Xh=W2@EC;L@?{2rKkr2d4ErckhJ%{(a=bA<2$sYonvg(FoBE#5m=zMB0BLp?)* zcHAh*m`wmdC&e{*lYM?kE19u>{M$f@mzp#B<@Vhznvk~2-id>>2T_FlxrToYX{*uN z(qK@K0v2K#&!sB9Jj1R?Uv>b0_qmJ@w&_J1@Q1ka5x#jjlqPM2>^l^AA7&8ZPitlt ztMC{K^f4w_!4Q`^#B$8**`mrViNHuj)F`%l^@u_KUs3y1#8pS{NfDK;jZy+esY)(I zM8=*l*q4ewb3rcz7Bodp;TJ`33JADyB&Mtc!`wvt49XPQ z^&Y(U_LCIZ5|*2eqXXz6z)k){MoH)q9^PmB^>xkTTu-Ov#%p(L^>b=RCipqBPV5~g z?*4#WdyH+plvxUQ?@{4S{8x$3LLR~;7`O}f2O0A#<`4Krsl${+QN6UGr-C|41*9El zm!$iFjH^a^X&3Zz8IRKgoVW5V%^V6m8RQDKk9YZbo*B}_(TE*2bs_?(pE_eyTZ?hz zteUqtK-hL4B{X==*se7x?R9AUgPKtC--N-R^sgLjsHmvus3+)~^aa2J8^98qDl00X z&HE6M8rT#0t>~^(r?gR!3Wbmr8u$~^F_A;l>U9jI*J@o>KU;YueKSp|v-Vup+`WXc zxVO`?E??kr-QmLzql1JXoYWe(%q$sRJZS8n_(>-{@* zmxWtb{~v2_85HT3HI3pfjk_1_jZ5RuxI^Ra?(WdIHSUdjV6?(S}l+&VM!&Ykbv zcVfWybiQIGnRT1dfYLZ*S# zu=IA_)o0F@TIfA^LU!`xlPEOLd=c0jDi~#oh5bo|qCFq%mDFd!t!3&$Uh0ht^rHcS zAUUBQA_U6S1e1AJhg_>Biyoq$!x|!7$krID0IVQ4`f*&{Pz%h$FhmN_AvH`uGDLrjyFhPK4Gtv*iM} z!rU|#TJEL6=!P#=YUhm%w1Z}}^IbHC92v8W+1zl4*ekMXp+H->gQC%z9U-D}!?{8XJuckpy74O0%ptPSpvWlN>gC#~i!={BGS6soKw z4D!T{;--C1@;a#Wj%Xuco)u@~jBTYuy(4EDza<7y2>gy8PwaNyO8xR=xIi>BkDZ3xTe&hHt|`LCKJ*FQZg=MwHb_2@g>;h;C-M0S>jF!Q(a6X42zrrfOeq$ zY%lw{Fwm6mrbpFtL+#T`8+zMNo_n4)9#a!v&;Zebe;DBupbO14vInloVIjbaC)3=B z->zMED4aIV!bn~6{8tx-YFP9yVJBbqfo`)%-q)k(fNzO3k{PJ|4jLVJ^}nz7Q_`%G zE@gRLI*HIs_XeY}4Z4AvEQ-I`k;`|-em_54Lmfl`B$wN!!Q#HkYu*czk{rTGODsZr z#~Rv!yOcp{iAZ%s1r~R`(49W2hl8Qh>@(+<{YwLTH zaz=rl%(`VkhbtzM(ll|uGPBm(xoe?KU5Gpm7aP3SJL`(|S_CH8rNz-U>H&-p#?dhs z)7Bt)lQNDV*w0L<>zj?+Tabbo|Ausv;^mEx`q z6P(p$KqY1+UQec{O9qs@-PqZxZ0~#SdKQf8D_Zv}9WA z|NXf7+v#QQ=wxpApD}gPxKbVy_Q2&U2G?26gjrETZv}U6P6Ovc^{?3-?kq5XpuN8` z>e734HDH_ulWD>(OVpYZ-?8AQb&#Y|~9rw^MGh~85M;oC? z&^k2uXsJI9)R{CwVgeI!2;-Tk&!?1z@J~>*${P*_6w%+rtJGX1ORfCxL;3i|ijqn~ zDR@qtEKAJ<@69I0J!^9$w&h#cRO+(PW#pRprh+Jc^f5b{H4|oWY(YnBi7UjD!rCVU zF+?ywR;5c)tn8*W-3e!}?tD=>Gt{jKAJhC$`#LyOA=yH4R6>3SSu#{Utt3IRR>*Js z1MBt^;u%527s3!(5gK0vDKeu1&JJ|!J0VJ0eHqRV11wo#&|84Vu1}EF4>;_{->b3- zG);9GPWg=aa$7qN*va2Q-B_^^TGlPHCskN^Jp(dAa|M$fk-zS}fAQzmW9xe_YH(4EZQ_I}pphY2sdRV4m2K`s#aF2Rz5OFfTQ`0qt@(AD4s5vE$1P%8E|M+}-3C9l57V|Jq*JOP$;Rm*%J3W>5lO4oD$e@m&v{gS zSovBITVni7JcTLBLbI5{khh1u?HYk$+eK2LDMqm^mHwfSIAK~t05`A3GN)WZnnqLd zc@innq7=utR1rlyQ8CpZM3QYDp-L%Xy+A$wuYdbwh_HkLX^jJtjhsap|Y-D*KXr)8zsl{c0kDWv>(nJMeKPz zC~nGQUY|IR>KhvhkQAUNVryzMZBI?db9!6bFKKShGzVPaSfQi;xE3RAhmX3V0+V6l zpb%V-(Z%kAaf^Lg37LFY+Gp)wPTq|_eA?sUbB~tG`tZ1U{S&f8LiQFR1(s$zkh$Ub z&&wxJ7eKP{9~$8Q155sIu{0{0N~_$Td>$*8l93*y!I}k{$J`2GQTo4hn^+a$ zo22}(g;SuFDgpEkck(Nu!hHGOGi>R8U0$#*_tT|wzHl*l=mR&K_VBClUeC9nABy0a zEy~xy%p7@MG)9@0G@PpYk#p`1>Ei`dVTzG7*6#rd2lbNOqgt({)Coxmn+7AaH!;!XX|HmD>jR_k=_Pphr2@r+Zx-yGtw@{G8p#2Sh{V; zbvy|3x?%XqZ!vG;A^MZLC_RtxUMKSaUl|#v#-xqEaW3Gys&a zmV8c;R0#YXkfZ|@Y#ZS4)D9+i^@04VY_-+t&?7g(s;FmFx;UnjIBC0Ny~VhDgib!p zDLw-&WIJB~{m4Q(jM@AaLsbICz`8`)8<_E}3X=FGya$?BtP`zix!T85`Aoh2(z|Jy zIp}+NXpq6R(1Pwa-#DZlR>zZ*u1li(VTI|_M~{$w!R6;C=1t0eANwW#ikA87?dsXF zGOa^MGM~ZWczUc0@*gO+Fc22KtkHS zdP+ona8N9y7RXBLj<)fZ(?{-Jc%ED=-io5_`Q*ZWjzCQu3}{{_@lL<{Fp zFxL}MefS(Q!5L@PN$Af2vUb+IT{o9aeOtD!CmK3<9@?)pn5r89QaCD9VU}TI5v;$y z!&4YAe2!BJCigbMfyE=ytkII7!%(1GrHh~=Gl(*^)Dow-YlPU&FhU?L>^T2^cwbbD zlf&rP9l`6tUG^=V;NA<}!dETCZ$$F4bymXfExWNmUh4;Id58mjx3(fxIV#9v>E3;j zAwH+!YVYG0N|?#VA$vG=hZa5`l--S9N>QV|^UcKUN&UTt&O~P`T5&G#lhN=U0RkWdVIw|AQJG<1mWm8*0a6Z_1YtEC_$zN)WaMFnZf|KdH&C)#XVOp) z;K4-)UsqXP1&kA{AH&9M=9@5+^X|gl_ zc4(p24g?O;=xh5R0BI1a2e+n&?)ues=BGJ|l;W7NhvGRq9$hDW#&wYKm8dP&pUS2j9E-pth}^C+>#?(RA0tZzvhG%*>IvE*j-EHmXU-C7v}_ z>Df$zNt`uvGai{p;~rJF0kUFL-lF9**7Qu1+F2`?v~k&5^@7^vf3bM|!PlK9={+%L8^`9z_M#ZRH0r+#8eSg8DDL-Y{zZFiyAB9t!IrI9+6QXbw zBa@C!NO6rm__*$Ey7@dSb6KH%2+R|#_Sw_IjNXAQ!tGa}S5?mf)Y}ak1B@g;k5uO( z^OEb6?aA@Z!qLjG$}Nua%7oEfwRIs2ncvb2a*|O)$5iStA;z3OesvTg!cyGBY2`2d zhDYEGj*jc81|2e@c~*Kv%r z?Z&gm=}(12&nHVtKAA|)e6isZ3&Hft^}X~`fA78{(cS8^IE43FA+UTd*C9CVDANn$ z3?QRHR?reXR|$|QZG4lX`Quq9I9Jh(U774WXBQIy;am53BO~yf*H?BkuC~{7R9yTy zUzoJqbv`i0U#w7Ia6~9m;S>O(;lSz<8%Q$Kd98Gy2JFu4b;`{PMbcUnl%G4L<)hV$ zhp?niPntTm5@gyha9da3V%m^i*f#SMNlbj_0^)`aZ-a?Pdh`BAIDCoQvnvLd5Gi6a|p znUP(dhc7>e}t^3fn89Ih6bLY}07~`*aBnY=+iXEKCe_DAN$xUe@J{UC5BE z;F{SbkML)>Nl4nNYJ8L0UMrWBairR1eRiHPlf(%V{(r%Of7DN-um;OH5DO~e{v|%* zAG*~4zU%P~*!2+q^gdC!WNR-AsLyn?RM`PoRC*V)iwLAChu7)o*~`1zyOM+fgRcYJ z?VGY_1j~N=8EGy|Tp_Tu{vKm_Skx@`n%-)^`$BeC%!G={0oe+k<0C|d-wMI}7$)N8 z+D&g->Xw=WSR z!>#fw9Re3;bZerS{@O8njnzCIjfhTI#2O%CHoD-@U0{|~`ZP$&T(|16w8Zk|1>!Zp zd=0DSmvzqYb^R=gG*IkMwKv&sGnm(;LZoqp;&TqI^;To!zkBG-zm>~`XL!vOBd-?{ z_WKvV-E321Ead%c#O&Vp->B6;6Ku;k;9gUH-e0&jpd1o>ip_xaXyLAD$^m{x4)j|4 zs6^mOaNVM1E06}vyl2F-}0=2WC#u@2~N;;T(uvug(DK4oW(QpQNS>3@+ zB9MGCxkzcTmeeuwTlhT3BaPncWMhe>wuRE0AIGuJ_&l|#5k-3gnLpBpUwe)Cer~6S zU5YPv_deSzQ=lR}!XnNTiKj{uUUR7^Brppl9u0MbES?RO?iU3Wz+J|2qJIFAAhSLv z={)s@c5>Nf43i+nrBoIO_HCkkg*N8S8mk;2su*BlYJcV=^vxItB%@|6&9mf4H^~8# zjONJ0AvrQk1%w$RS`IDLp%D9NRlj_NTCuph3|E1X(o4xE=lU)P^?eH>ai<)j2*JVz zHCW^GNOqEUa{;>d_Z)Pa9_7)79#z{PRavl%I2jR?+f%W!pE;BHd)7YjLwb?x1=UmQ z!a0&71~s2-d}eab9sSWTbIG1Q-Mq^~jOlKFYA~c#9C5ji6Rvk8mQYiv%4dA~TcPg6 z|08lKz!RS-=Oq!DH*NhyAw#O2fL+P3A9d$)Z4iQm%h;qxf7IvVCqz9c8W(Wd*`)w>M(qy>+H0xCAd08E`}1L4 zAxn~GePY?DQTa%+T%!{Hhc-{MCx-wOz9y?h=HB=a`2P*bkRoS*A2~;Cm zUR`}$dNm!GlImx~X2OT5%)>{$y#U?gyLyJ~i+RMf=qk1}($1dzTN}S`55M;H7xB2* z2t7?8&~)G~>#a4ysr1*e?QM&eSc-^VU3ogc%8)4K076ROd0>F0t~0JX@H2>xM@CA^>_NgcgOO}%!P8OlsfWQ~G?I$o&1KvR4tqWxl*o{Eqg6zV!Ba`1I{NFiW`nL`} z9|yA9e?NCn`t(4Ld`_v{`p_|>9vxnN)F}~_IGUQ8gibgiVw^aBy}42R5Ld&V2*Cp2 zpKKFtXICaj;i7l*nuzJb?m$lF?vOA;!5Qa>Ur0X$jESp0Up^^guha2gwJ{mU2B>vV zyW=Pbf6M9{R7;Wd(eI!m%?f8b&Sc_O#|3Zqwa@kCo(^H+{3t*D86y1MNZQTiW~fFh z{4p^j8Am@jg5qcdJm==_zF%gYlU9YR)J6x_YAuU+$bW*(jErP|Wi_S&mJU(55vN?Q z@qz*D{oee?XHOfVsJ${Tca%*}->EK?q-d4fm6lBDIc*hFVvaG(`g?J-Wy+t)we^-! zW?S|2GSKm#Wd@g*G#kTBe6?2=U9595>e=raJ{glOJsU)|KbDPS<_fMt8NIGhWD6<{ z?TaZ5uocS%1eGa)RuFi?wT3ypAkV;5f(|n(s@AwB1P8f}IH3s+vv={GG6JI=r|gklY|&SIf&cz=tqnj=ZB7TGb0y#i zJITMwH2rs%+yAYR`7f8-RI#!yF-?^b@IZM{pmn>dL6LlL2`LJ9aO{s!Gp-h7+uMd|CCO%uqI?e#vGT8YsI)J0s9JF2<0q%xY*;bm$xf9yv57ZQoHcOf2m zH`_xpv89&47ygYqve3a*#P?7r{D>r6i8C>I1cI>G!S5wp8%7UB4t5EcMF~$t2c~5Y z9ZkW}kHnO^Dl%7$y&=N0w?JK{Qu@#OcKC%Zg1doSmxRvQ2) zBNBKTL}v<=CElqrqWj$tqOxiDz9zhwdK5~%wY*U|U-%Km&XvxeojbLbA5tt5qRQF|8qxr*rj2$4{*hfB=H-DsoBd>o%Lj&47mG3Y0Ox8M?lp zCaOph5wR-3%F-~eHMfzEI#rYE1t{5!)LTAA+EhT zAiYpwn(B)3$Xg=o%}_A+wCm?)w(X;DIv+oFi+}eAwS+JSz8b4cq-!ZHSkcg~RKy5f z;8KnilT5mI+n#)Ota6&#B&_c4cOyHgDtyX<-F&Bvgy{Ggd&QSe9*;zn1-kzy>$9`p z#AE~%eF87mAgq72JnS574S~KeD`0EnpDgSjm(@T1{w(kWYK>Mo5rD~VImpngd~WJ1 zIoix!A)~0Sqiofl)vY!HprX}@3mlzB4YRBt@8ZLk4=WX}M6+_y;y=*uW4&m8uL36+ zrJiuK6KN7&)(8DwlNffWl}HLKcyrH*p>X0>kNY8-blfiW#kIs_rtCY{0=*@B{h3gI zSdaXX+o=!#EQ^?BYPB=>QjW{-y$zCsIOnw!!Um(`g zcjcq=G&)tJmrx(!Njy8|ot0?M)-<-zN=a?B#=m7M=+OevB^}g3wejxk+zSKeaW)jX zXKW$45LT#FajMPc$SY}AjyheIrtTHunG1=TTIRQ9jBdzTy(B^o*>erxrlwg>iI9>W zo0o2M79ZDCj6cGBBFYg_m_sW-?WTynFvtRo@=m34b(918V=^v{?NTRt+Nz7+omqe4 zdbl9l*GW6G**}io?#S-K3IZ3m0~W9dAgHyha{hWNS;JNnuc4Z8m#!e zP!nuD81@M>Yr!sr)m|-SUVqRUm61e00k!P{jCx^{#o|=glJi=924Z~_(M7n@rpBQk z6j@Ix+UWos40}W57l;6LI3%$PDGZ9=8T0pRg4-H-c!A3mKMMKw{7wBL5A?CBM2`+R zo33K44SlpYO`0O5la8_~jM60ccI-n$l9d6ZBpx|DReZvW=BbYe1LCdTv%P-rK?DdN;ae9@%Jy+Jt+6$QB(I}uS$2VsOJzt!L z2^)FeDav9h9+Y($efATZSBmf}@kXBx{}=?<3hK$or3PjQCL7NJ6)rC-r(y&j^9Hq) zjxS2KzDIruNl>6TgQX=3ckK(2k*v;gQuC@q;E@+F`cwv)kx3S=O&CAlG1`#P#{i;m zeq<#y1;3^gb^Ca>e&XcJYcz2@9Cn(8FgYnVxwPC`Tbno6QxCW74Xa4T}}cF1gP7Pz?7b2>EPZla&=vLBn&&+aoyyDLF|F)OFIgHj<7 zYR4@aZ{%pk0-Roz;k(=z+?27yp*ro2S{n7EZ?)5Ej2R{Q zk`@vJ76k=`u&&=pTFV*$WR*7}JGH;aS}-j_V;b;h8Bh-(2^1N%zV>*1G9;r#^v1yZO{(UXit zyzCbVE=AvdK&Jvl!D;SuK_i&BgNq@WxFRG9ooYrRC!z?aE-L`<-a+gP$k5i9k+X;H zuWV5L?sQO^SU?(~FLId+Q$^JBijs3o+7CDgFq&xr$)PNvEU}vm@OXc9kZyIDm1khx zkD2$ZnC-<{ITn%Tm{x|3%odC=R;{Kf!dKhy*WFf1aJNxx>27ja-y*w`GjMdI-(xQV z2zBxX3u%1$HbB;jBEoY%IOGNV)yd_t%HYmlOXF7Y0@?1u=Ve6 z4> zPw>9k4F}EX)=+#8g3J|3^?nF&cQV@`?1R~)=cJ9;d+2)gBkOhtA#Ep09ohBwaZ&+!QH_k4EZW8hkJQM*p6LI*qx)Twi}+j$>FZTF9_A^LUA74%C-NOl)J@wf{J9ip%qn5AR@T@dXt^k4w`A9* z@wK8fU%c!v{M0#9Q?^tT{5F0$7x+qN_bpoJDAx-*y3e*znU{kZmWH)v(~9>1)-pF`-hbPsj8s~*bC*~wDR`unRZ6fc*HfZM-25-^0u6~Q5z z4seqpGnq(0-cR_XT!uXV?cvKk_UE|$@Ck1FeBknq0>s!cm=JKTbqb+TCR-OJw+bjU+-t&A8nSN$4O)wR*9v8IpNe*O2{dP z2f(BP0+k}W!WlWbmNRAEv_=$$F8$@44H|YSv&1Sth%EqWaM>|yECmjp3dP+<6?pTE z^>X!+y;+JUhBt@u^f{l5*920bM~flsVXRfPl?Ptre?vay`bB+WYt9I-FP?j1Oq3+L zLmf&&2Kv00 zPFtu(Dp)5<65(BMD#H=92LUffzg!eXekwI1c`Zw>A^?wu^`npWIQjX464FM~SstyP z_@%{)XG$e)UAA`in8xOG!JgP+RXm)%B6BXYRJ@_Hr_b?)<0e>iER-}Cis$8o z<0!f#eKF;uX9!PcTKyFJk!VNuZ!+uRtx8U6q@iXq$s?!ZH zr={NBY(%dQoX`J#6lD!%N{dL&2}IH4nLA!^p~?Xw-0snuL6{yck<QX?IQ~9> zR7ib^Oi0MOKlZXfM=YpL+_6}Q7lroY$S}X|Msn-yltOs;D_H!oeEPtGzAjY!J2Fxt zfJSh0*M=hB#0*+IYUxIH#}}W(*TmlH$kfI0yPM!r2kaN~(;SZ3?u&^?xr*IM=hxAG%%{Z8uiPFJkfw@f2KWH~o;eSGfgW9{*Zj3yCH)EDU;@`ekZO;^{={X%3{KpRn< z`;~HTiBJTbJLug@TPz3P3p6R#7n9Tnq(zf4=;?8N zFYMB45i)P-C=?v#)aH^R`70tB9IK1j9x$EWt$w00KFZ3b;&|^NBz*so!SE{AoFLf ztY&ET8jNaHK~EJ9Q~it><|&;OB$!ev56vW&NuswRWkZeaL4AX0F{|mwCYYw=Hkj4A z;R(%FjIu3UiK8j4QE-FaGKCd~X8Z0zzkMzI`GiWX`}{f7S~gzSt|{w6Ya>{hR4;Sn za413{Q(MVz2tDlHb1PPhF55W2udcOcjEHto#f~8ua|#_G7nB~=trUtsBbV9kp&z(E zKsct25PT)=Z|q6*-V;S2e3&DHH-~r(;dOI|&ye`|z3Mt7oMcEZKXeEd0fZ1*5|bn6 z(VTP=aEpt7IyRp5veC6A{xEqhS?|*Vr630v$ zYXM_)-hc~|_doB^fA47hUxew*D~{UqFnwzKP3si|KE&H2b(1qitU@D?V%9%we}*Vh zZ&*bDO!bmQ{xv75GOsD8GdXcF5$)pY7Jhsy{2IW3v6RLwPt5C*Xj5QX)m)vH43>gM zImLTkh+9|91`jdb>#0n!8*a=NNSlzAs3ojN|FCM^wo!fW!xqzMRcmzH%OJbN7j`+z z-XUdo5{3L-i<+znI(26aH|m2A-5h6HfsX*GCR7gEfr@fjJa*bh+$iZb^ls2AytH;N z%M^}EP>Udn{#9a@FfJC0Tuqg$N_p`jx23{`=xUf#4zHjzEVc{|2X{?~86LNvmc>*z z<+EPL)E4ie=?Z1LL`WnLpy#bSGFBa(M4yCiwK>2Uu{|WCq#PuzFXq|+=yffz5dmmOy27xC8t&nXA%8`VlUQ2QN zlkwosVGaz)A7a2?Qw0brzy9C-qW>0C{yTk)%Kr?jeiAPb0JnM}H!c7(5u~Ytn<}N; z_?lX9M{PVLfKr%5s{I z!p8IDx9Hx3nZ?E|^F>>~X{zFPymG3^-0@iR`z&l9wX zmEi3nkV5#G5C&yV4UYEuS?l?#w~u|%f~WVscMmOfp@$Jlb!G&wx9{cpvP&7@c9h3s zgBsS2`}D~&a`O54oI6Iji;z?Ty2bOCLrlpu5Z?n{i+T2#WMR_ONuAoWkJ+^jAhyp{ z+;+X-(;B~(6N*HIGIIp@X)J%vr$*#-bB?%aR<>{Xq|*yW5{@Phn9b(>af+og+q{v2 zrC5|z!nNQ3v!Isq4*zuCih=_9A!5iFceHP5M$J#QM9l-S$VbV!qAWTBcbsRi*-<-! zI-6SgTej1-PGj8|I=F2lk)3D2NP=~pV+2N9j}SP|!VLAWh@RQV5IO^7`(X!WWYo+0 z_T6@lgWV!Ijn~Wi2p{NbU9Fo7Y3Jy)*nZf?R&pW#=uZ^-nB(C6!*{%JqEC&_=UEtY z_g}&5Dmz#Bi;=(FSH&PFufPyQy&^p*oIY2XLdUFP?q0Xlcpz>Wn>!gYrvgl7aMeEz zNb#fwqGWIP8CYWU(!v_0#2f7MrcLHO|Lwt#J>K~*ccVXA?Wg^vG=k)(Kc-6e{s<@E*~uSLAScua$=D^sq6ySgDeW^>kF)l7UMBzY z{%Gm~s@oNo*Dw-KbjHcUvgyUblZ@Em<#Zrz5wUJ^2i{B(7J2zGAGJL#^d1n#YZxxgs6-A*c;lJ$U zej-Mf?sKQzC&kPso*4;!5?i6sLxIzX6(?Hy&V`-eh8E=kqS>v0pH|}bvq!k{$DIEj zK8a-t+5PczB+-S7&*S)Kfq=0-a$9f=`?&ar{ONpzJE~Lk&u|XUm%Hv}^e@zA^qwNJ z+S69`THH3DCU_T}O}f_{-;!V}$|Rve)YXNW(H&`aBe zGLj3g3C9p$lp{yn2cR9{<&j&!zCI>frGDbYViurCw^Q3KE@A1D)b_2mX;ApKURv}u z*3UH7whWDGv@)5ZT;qVc<-8wMK@|Vp#d%s8M6vN>r!75h6*c*jWrCHCjZ-ZRdE(vE zT%R=TpvDgk7b|sDF;q)#i4AGS@v`IeuteEPdI#_C@#bk3_uNtQFm*EY6PIeD{oeX= zbqPR2PTQ#Xxk0b*o?%n!dG(pSW`i<=uX$S`HOMQ(?x*72OA^gdcQ8{2X`!F!zN#XOMa@lc+Hu(qaWHHH4kE=+ls zIzv0M*;3sugIS%O4ftIphihV|sa4Fu1H3=)<09>*>Zho2YN&H(sm`l6Po12!=oen* zL6jli+1fTvW1w$S(_7@S^OZZLvCTdSb-Nm=!~Qij*s*jZGsIZyQ!D0jeM8yKr^D9U ztLUz#1QpqOXi1-7SSb=TVy@2TN!$0^^pDpA{=dECe?0j3Q&I|TKlwu_u<$d0=a=$- zF8n`fZ2r*)cW?%#J6Ib#0!LN-Iq~5??+(_sd18NvZ&HvG188^j8at$9cL2EY_$mk( zoXHvJ=IXt1Q#U)BNu2MGnUDyaE^~LDba>mDrluyQS?+bCM84_+uB$CdKB|$nQE>%y z=${fu(Ttgp4j$_F8HZyB zPK2G0{ql4;)w~7i2;d6{=mouDGt2*y@%myHFc}iBKme$iNk||WhfdXMX`G0AlA5(d z)n}vw=qv0Sq%eq8@lM{qV)i{NjAb5kH8`&4vL_sV)tBO2}8P;>A}r z*WV!0V|j6aF!$-?6PP(1BooKkbiDN1(UgVX>n{Y5$D2Ehu`9-N4obG4^y|&yi1Rd@ zs$sCHyKDPAW}=N9su3=lm?iDey|jDPSHX~%wZ*Ip+4yx2%rBta$X zMtuchC7y=oh#Ws7EY1Q(-yHu{H5|l1$7pDkZP&h=B`pMD`Kj-7xZ6V{TaP5{nc6~| zs=C;7Qh9^XVfHQfH_{_M5on2#J=Ng=xJKgP1#l%0(TY+T z_jwL;Cn&V`_ql@K7Wi&B(7!&W#gUBrILjNZ3Ohp+bK*o<0(Gj6orH?GTeG(>53zpo z^()8h4mX14Yk8J-C%G9!lL`P4@ybJJ20S1Hnmsty{;~S2ZThiw*p*6FCNVVxVjk(Tv8yNP* zIJkF;pmjkyRIEpLg1FqyQyLp{d&SV06}+yXAs$RVA-DoxjIN3-dHl$je3Fq^-w2|a znq)Q8RyNgk_N?q`a>6)Q$2;-g-=cOG@=nL;k>8)L(_kG(JC%D_f5^Z|#mz?IB!*5V zRt-6}(Qj$}U^-tMChLV2JNO=UlTn4Jjxn7iK00{6v+Hqf-~QC3({|}`{ijQ_5tVAZ z9&lHnL-|Wd1ApHY{!36GmnVP@1O;Qg6f+RCzwCce@HSz%wwCC@tw)8yW+Dk^Vx)}t z*?hcZ;Yc#pY2<|=r}GIMH~TnN>~3x>EmUT`X?oI`vHvZQ3?;&eVum#OemcPfWfC<5 z6&J=q4vp6$nu(-M+!6Gr@FZa*?!bCCc6^8g)ZW!ams=ig%hgozCssV1T=BafL-F`2 zT$A>^hvE2#tT~F7N)(~~sd4JsE`l6t`O!I@g&slq2pR71P`y?|MJ9y&GD!@o^`uM? zhy5if!Xww5g^rTc!<<9RI8oU- zNyCnxvI=8u2e6J@mhZGbay$DCaAw&&CBGu44ynVj)z97`FW#2LiQ~)}+D-P8p2Nxr z6oN(Xrl7%ysquUgzqV>9R3t5k`W}`WNh!YQ3JKQFIxn$l)sYGk52a|qMCEJrQKl|cs3m8t11Rl z);{`8UfjoV(`dLRNHRsC8Sn2l_mSFIlbK!1TZa4qGYL0?OqYojQ|zD4+=C>{Jku#z z4Ln6n#&MMrGq@n}&-=mJE1)6(MC zNfd5BP%PYChzgNUw2xIF(okVf+=p<0YVA@{SWpv3$Ldx(|JIQfNeKMd#|Wiquz z?X=5taY4RvFX}3CD=vXJj+gjL-on!|KZU8r|j)7W(}U(rU_twOz7JGRvw=tDO+GO3{yE9Q^uTHp^%A2 zLn4Qq*bw{$ENtO|y7gr8CabWYoLP;VUl?EA3SIdT-%QNL5(g7*eleJduR}okkbknr z4aP8)X`XZwF-SJpt}qkH2p0ZnmH|VD8aHL;DxDX4MXzIJPeYYFIR-Nb$lYSDMI0?z zxR}K3^Hy_68rXPK|Fw2hY)SU@Br{DMi*#GCtxxc5`fz53$tH3bU9QEj*I$cI5bj>G zwnccNm$P7hp2ZZzRIW8CUJyV>LK1|f3A%zn(k%hfP+)8}`G-gy4>QX(WY$}OMGIdj zc4?gu%Xh8aJBH}TVP_yiEm3Ma(K5!v7KtMf+z~mc`oY=&yYyT|Yld}K%NGh^zy7jC5MkdZDkcS7NiNUjP*35hW4-b%ph}XwbU& zlR(s`jJ_U0K2rsWVzb)Zj9f$S(W6t2d{vZP!hN&qH#zl=Idgi|!Mq+7(#itH6`R_( z=5(Xs7(ox~_vEB-k2xtByU9 zCGKo_;nqGpgCc+KYntd7Syn-N%a$o-cA`5$laAd(3w9p}=r)fFR@H_r+f2v)di4AL zP(yC0qX0U=IOh+Q#3gna(tI6~7kRLWI4V#X5yf{TE?PLxLFeS$czK5x-=Y7A&VgV= z{LQHPj`f-+d~^ppE^xcY=81Gr3eFJW+!1`AIvcM|k5CJSwW$5Njw9<~V0Oc81y9a% zw{zrXa2@Yon~r~6tnut!BMO21PzA6n^B0mb{#k1OK-R_%4z>=Cy0#9wuKEr(z=4VX z*>4OSgPbn#sr{Dr!0cNeD5Y$sxUxg0v%xSC2B(apMv`&0!n2)AHv=$|YJi!uU8Mgc z=LQsZ9KqI<=+?yK`UX*bbMQ#ra~y|}uA5Yh#ZHuDEgCPMmjVY9XIO14Zp^yba=>*V z=ri3>c)!R%b(B*$jcmt(y|kNuJJ|2-xG-t4^%$bq+AjDz!|ewBEx%Tt+4*!o?%uDg z1Y65`;cEnimu%qp6F*Jh&*-3B!Ulbq!_Cu1S2?8a%)@_JPg_2TXuV>qBNFrL!}s1no%UULJnO% z+{{RuUP@B5|CE;42SI|R7#c}FZbunNwiKEHQLp@<<6D3NmNjtom|dmKJhA0e^8|K7 zRDdt5CJ(2m{}LJajkW2_zK{>?E~rJ(PUGyc+)wM#28^YtgPfH~dXvfXeV+bw^GR%z z%;ekXBHwT*7W3$wc%8I+$}fYmvS&INv;lht?8Y6THZcM&BBTQqn$NV7)M0b!6gN|i z2-dXx1D|bQ(27p!q|wYrd(=$Cck1Wa#@@eQKldC7KAuc4U3h$na-gVmuGZHowo^hg zpP;VAXBF&)93tbngjOtLS8{<{lR+o2Py!7F*__Qmtq3n`X+hw#>%2XCsX^MEJ~RJp zKA(}CO}DF17BFKBSzL4mdQvQGNoT+56DZ_kY4dd{#1A=V@g)LDB}TrYRQSkFzS#kv zwL*9}X{4YW1AFUL6L}7Ym!A}GemLI2ui4w{e8wfl>gh!>rv2;06@l zpgxVAkb%j*`qZLX8o+`22b;gS^73`u@Cg}8VNL_=GNxyVuHHVEE%PD$L0f-DW6CY& z?N4jwKeJCF5SYe~Kw3NynAQB3Lk9oR!2DZ$%>S((J7N8gB#Qpcw{L5Mq@ZwCb@J5l zRBkkAL`qe?j7RVu6D(FES>^1bZ16{J9%6Xjb#&B;4pdo(ROt*b z9PkZU^k!WRyUQasUeR=z;0!Cv{^Yl||Ku#+LYa=D+i!yg7IwcFIGaPfkYu*H^hWR(BHB$~ zv%_c~Ksth`KOU-lUERtxxc6`juONI`W`4ph$GqY`ztA;CtZFX;{a&l=>8}nmI_`zE zyMH&6#G|VQsf63L-dn&|upI=Gn2Q$lh2*tHJXpl+P-||OIp_VzDultQB1L>yDf}y@ zrF!+t_^S53%eOaV*ZDtzBV9~=Kp1d`&Id9eQh${J`Trp?Rs~3l{(UMNFfq1{yktgo zzE}irg@i31Y$gJI82b#cfMCQ9*x#H4XbLkT$Bz)Q?{~vw8v6d6JamNpd4UgfD-+fc zkz*v1Qx{2q)@G zcL2X1W2H$USgG`Z`!O1ebdr$k2lF|;49|c)))`0xG1a!($dEiSy`6RxWjHO2HUEkO zy1T!-=25p%kdW)%(^0oeF9rBcQ?|OIsMtsiW{OzFW0r*ArP~r6E!X0GC;BqV+?CY= zs?V)9Lak<{jJO+{t$4_)c;k<^Cx54>=kL%aq;lJ}B2_x_f`YcXUQHkcNE0x1nqF7; zV1)!?oS7~y+9?rjT0&aw6~aT1Il1f~zhT9SrRx$9%Ac?)3zs8)2MXfHr)1p?b)Ch} z;v6dpy@=2zLtt?p027tR4x9D*N$Wjub6AoT{3Rv6C#v2+^Cu*FF*7>+KdoH}IF;QN zK8P}e(x^yDhB6bHWN0#FE|pH^A@i(BrZgFnq>^N)6b+=5LWR;?C?Y8$l?9v+c^)(Uh1le`#K-+mO2Y++^kJPff<%sh1nK z^L4J;MI|r64)falE^((Bj&%a#z3o$4G%GumPC9-ua7^mbvrPW>^iS?;E`5R3mu5UY zVID4My?cAJu8V6&Bq=h{=f>-<6WgarT>oNXrMREmRvEd?Jk|BLPblZ>9=|ay@*i6x zzmE~jQ^{kw)Ux5|jEWjw{y%x^rH?Qx_4s*=J-Sxc-{LEeK>osAD}zq+ZE|3@o3Z|e z#kGf)K4(PyW7EviJ=9(_f3?>$d6kwp@l3`v^JHbw$>*2;d4GFW4dp+2t6B$traWA2 zGEXYZ28K?>Gj?-zxMNbWFZ8NpChckYJ}ED`lv&H->SRNyn+t7TykQe*BC(ga&pfMH z=zc{&t7ex^VoHp;li?!vv~}J)cb$4BdM)5&>(7T*0&YCbZd*Tbb7fHd811OklRA@Z z5`2>;zZb8YG&yd0U<*5Z>O(VO^=#Hj6W6Gd_lTtKT_@2ffMg|y1{&)Uqp zlKeO~dD{Ch5j&eh)dI(wZO7gtX)Y2x=BT!H<1GIJ{^Nq(KIPAudsxi%=!6BfGG2BO zJeR^;a-Ia<&@!x*kQ3kL60S6(W=FmFa*eIIH`A25%!J7nD))H)B>%4QCb8J%iHB!p zZ#bv9U0p@#-m%5L#Z}7f2klLxtk*txZ~fum-CwI?&V2suXnoeXp*r~6j<3}PEA-{_ zgO>72Ep`3N{oQcm`S{f~t3vlKe>k1Bc}w8W)06jJc=p-%plHaK?w0cX6X#r3JM8(# zY0K>D$Um{6xwn;@Q(1O6zTZ5x<3mnlzS+tfT2Y$rdQOj)|Bi0csWHmkI(M!KPvAX6 zUYAm>B@LoU6J1NU&A8Ui67%KI?1u{s*k3uy8rz7S*fRgv74;`22Pc|vm{*=P^>uUV zh|KVG+va0oHnnjni)YgLCA;QqviE<@n_eGR5h!mW&6;yK;weux>G9OkG}kMD^XOf?peczW>c!E}qq(Hx&2oHknIr4^>v^jutEQR>?FzP(qBy68531)#7G zU97}s2NQ*~n~5ZepEf-GJ;_$CF18MKQVy2ZCdTX}7I8R4GTied)w!;GYi5pZy`oFn zH!qy2Eo!-&-P{y0-k@{4+4woOiKQ>K3q0Z^nyGY4V*hh}1GQBw<5&NfB&0dkc<*ZC zvb2lJZ9H*iWWf`y(YyxByLO~cZ+5lITb!I-)u!HEUV7Qo%4M08WO+xCX~oQ{ri!2U zuchV4?v3p_C--$$`j4%}oY}7R=ij${T(-kTucKs3wzLl{T`)fZF`*x-1FT$n-Zk=F zzxy(+TO|Ci*);L;4$S`w{*WI0{zmW0p073c_kF*Tev#kl@sqF(X%~5tczar=O7>b6 zyt&d+E<7vqSDUHx<-jS|&AThRT_0au_jkYREbQO4`(05h1@gs>(iZh5%^tVQ?u|vq zj;5A$=x5xzot>SNUd>b9S^2k!g@>nca^q)JNwPpj;Wyn^w`06*7h7moOi>T;Idio5 z{LS0^cR$tU?@Fk55N&RFa!aYoxhSbpFSm$gYnWisN1t^oBWLCMwZA842g_cTkKe%l zIOVo>>21B2&Z$pQPF!`Z*4b{=oPPM@$IgmFZEbS`5~tkFyYqHd;U(LqY>%$HZcR(w zn>5}R8pm$>ruXZ6digBvH_c63pQKm1Hk7C~UnO(DT^8{3tIT!bhT?mgDo4FHHdm%y zt<*Nn`0ghwm#MT;kIUytVdLhe)Dq(zlCMv+jn|9xj{Z_~;YK`Jd@Om^srdM~1xa7p z=0mwm|FgyXNysZOQQgx6;Wh9oA$hoqL}ZvoKTRn(CM0EW2K`Sg7(HYL>Wh} zh}PdcF@LVwRklOgm#QiSd^UafaOz@MF?ah<>$NR+z2^P$lb!ddjd|VUf)=*;bir6D z_v$O=ZMBo9S(qJa5MbH4p4X{rewB)w%Cnr-A8P2+%{**7?>sy7VTFb07H!tI$|{GZ zc7^C@)O@ZeiR}<7sjJxhG}d>lfltg?gPY%sVr_#1gdWfC`Sw!B?ppe!v2`{gI@8<_ z@i9gD)IGi5a#^-Hbi?GIr+XxXIs9Y2K25Q|&cuB#KeKax{dAj|9dY^`X>m+$^+!)` zuv+|*H0H~di<9)UgAUoqEKE6i?}Ejr0QO3eTn?RuA@9XxRxOiHOPgG^yP+)dj+`R@ zC3(S*Ckk&qXC9Y4Nm+c1+kEjN&mHr$3{EH=dyt`QrC_@DxL8tw+|`rNr_8C8j&}Yo zrkyGoIdM9ivwRh5vH2ALskPw~Zsy#QJ$T~9YO9&`b|>>lQy;!9(=>Hsiw$n{`;heN zorcJpo_D8{O?y`vClasGnJop2j_V%f`TjdG+b<% z&GU}yHkRvN{*cFh@qw%JSAkrgPTt$)YrM+5ShCB0FbkA-q)++m_=?9eZT<9gBIeUYX=|2(_sbiHEbyM#A+*DH?wJsls0N!jj#!dc0=No zf;BUjAH1?|&P4asuP;n9UD)I!qV303XT4$CtxeHg?|j*u4l4O*lE7|G$>wVoOottaDw%RJ+RpZuHf4zo3Ieu>0vmnu#$sa#@e63N{IjQoeJ^jS? zs#B4wl}20HU(JkF*|5UznZ)(OzUgUiW6p>byFM}{kAE+;Z-3min7r&IkAB6KA9332 zQQugl`)4~(X72X+4zgOzF;?y`=G(6n6z86L+czzyV9W}M$%h|bGX6U$`}O$j?IJo? zrX_OaPye(hcXNVF=n833FKzq0Pijwj6wKclWlmdR5UlXL@S!b`+nJiaZkrr@Ge2xe?I?et#d9@V->I|y?w)x@6ZC(?rOXZ3 zud6$*?YMq?*NQzxS&v_6$DZnFGm8E=FTlAlKO|jfwo&Wdkexs8*7B%Uw*Jb@iZ4`t zWN=GXafQHUvEtCAV4n^HgJqw028v9O@BA?R>~yrYmRN8FLm25CpiI@BDW-K*d7_={Hew9c*)pNQR!Z7kfk z1X7u9MH@4@u5x0&l=7;eN>*X@_}b>Zimehaj0&<&Zj8t+F<%^P({ol!pMUc+S-F`< zug(hi&hbmN{ZU#V(>L31lQ#QiKQiZ*kG6VNo3+?o&)wuUi(ms^<5b>fHX()M<11H9 zXNmYC8~#L!^Up#~yRHTC4p+CxUYgl;&c9ky+p%)alh@r7sw*Y4S{kYxTB_fCzp{fA z!>bv>7o5JS@bMfnPpHu8n2f`>nAu*uuMQ|opLY5I&)!y@)&u!kcQc-ezwN1PKJ|9V z^X5~%mG<6$?5+p+{AtXeFPz)`-TY4@-Q`FW96p5>1S&uVehw*Tf9KTx7(j@CO;}Rv$5HH zdqbmqjx9Qxg9>0wAysT zbm;9t+p~+Kols>IW z-sP(NiD%aPFKup-%jh1-N3JP36DMIy=c{W<8n?;P-H0R2=CvI!vYQ$s$XG*V* zh*@*I#N=4xUK5$~TQ<0zUQmCwXUnI1ZAA}wX4G18Ty?N-{@UOuH|yD!TJjI|X13By z-lz$awC(cWACyq*9J^buQCK-4QmUJz*VWo?+pu$=eUuMaVGG~nM__W}8ce4@qEKh#{F56w^L1SY%+K=(4&v~^%e>SUlPZ;+XuU?bA zM@}4>D48o&yzxi#cL{;uo%;=pgs;8|k@pv{EcJ4lp>U@$=FV#o&8Za=++wc9=9-!v zPGQ}ny+A!m=6DPLWc?|8Y)KqD-qx$>C@*Z!sq?JzpW&RxTKcS{NT_xAnoY$VMloM>kKc=wUm%46H) z{f-qUI4^l{Phb6hzL5F;m?<7>Q&bMceNSzCqj%lmlwvctTUFz=oi!@5m%r`|QfOhX zdsr>2EIEB%P1&rjb@DD89xjPabjW;D zdhN}<@2Z8{{5_t}dKPvsgWG!Yxt8EOv$0#0%92m2X8UlK@qgbw+p&(n*!#fS@n?M6 zMV~5ijrS_;T6nVM2x%j`GF!`XDZb6ZT-J@vX+C8N*So5>ymfTHwe*Z_&*~$$SgX(e zm=vX3!t$JFo^Wes*@h~P@j5{Xvvxl^vCgx5#`wg>wU@Z!Q#B_>-pISTSv>k;po77K zLwcLH?agZ3>8EY&zvi~PWA)j3rj-g86T3X(n0VxCE!dVk-W@i*RfZ)mfNjT^fjVaz z%$GOcKI@NTC6NxoU2k!m`2u%@Y&;~l+W1Sk**H_em=J_9^gHNsx3h`T#0wnERmY8P zCHQOT6-}|0Q3>OgnSMBVZSU>;&Do9${Gs^)0kxWDioH34fA0H~M|Bjb9*_GQ*~vNW zyo6r%!z<~jp4?m%sP?RiyI8`t~(GS>?GKmzEuCw|sTeOMbp)IY-p9 z>cE1YxF;zkGf$I)uj%IPyq;ed9_&)2O#?&hA3-0TwW~~T$;k-(;Y`lBs6{gIOd2zV)*CBzDs%3XXIoFRj*aQO~Ixb5};c?D<*w`#1C!6r`obSExGn zI{5MAKePYo)K!-+tbS)|Qm0m$&^7k_0*9Ov3ty&fn!0QLR~^M?yYJVqt+a#t5=T{S zBKP{$?N^_Fa`OHqW%qS7_dm?_Ecs{~eQnDR5x(ksc{&+qo&A+BhE3(#WT-Epo?LEI zI<`xFzwtu_pLUT|`h2FkK`*7F`F{l6kvld1w}r!;({D1RI?SJrLMYi)FiS#}#vB`|l|w zvnFL_XY6=~V6o{{cIk8^;D7AD%pv*Qr@dQEpheccV54ew0~btFTN5{Ab34?-J!6+8>ezR52wd! z^3|@@l#<`D|Cns_rZ*AmWzE?hTeOlMEZgn>{6WQ)*UM!RJ_xA#3Lnib2s*9Nvby6! ziD$0zts4%CGYt3qxZ`^MZuM%LJ)JD}mwA?blwOe4D3Z$3o3pJ|gCl-stW=A=f$+(l z9&O8On=`$6J@2w!NuL|?Vx{q1HI5wZ^s(J!D|0oW6`lf-;Zp*R6g^4kydCBsS-T;! zv-+Jh`PrB{?~L^cKfJ52=;UjUBZ(i}=cKFs%A_aZ#^!@%vLP)6cUJNlhl|&lOj@zn zf+zeBcY?(9?&1umm)2~*c8N{$tC;=pcemOHgZMMex+N07#%7;-%dzfP`@sU;;F+Oz z0zdER1z3AN-~J<1q$=&K)DF_$MXXQs$Uz*jU*md2-^r+VJQ6!HK{9Br-ZEu2f$fSC z$v=4ooyk8wBuE@k%u!UE$0DPAm(x_s$jmgZ^SNZLb?&Jr+lAV~HWh`)tf}Od)`@aC zC~B4J{2}R2Yqd+d#ouUmqb z4;-@i8awl<=DH(V0{W}IZy>Hh3 zcixxJ%S?InLs)!Iv8}XUIBIEfc2i`_{e=Q|U0CVy zn)UF}&~COE!`ng5iAiJCu5X`o{j1Z*wK?IxBP>rY=RUPp^06Yhxl8-S@h(OA9S*Dg z&tDBxj+%UV?r}9&OW-T&zG89Xr^hD zdZ|KBI&r6ZrhIo^hy0(EXpw6Mwz@N#lvj1~{akhR7%td#_@%+BE*+2fXNyf){XSF|0I+~R0-6GdYHXL)fw>Rzg zJ9yNOiCK_^+V%eF+@M3>{GLIA1|H>ym(;C>{=wS9%Yy9YVdF!FYL@I~;o(JwXN$Ia zT3bq+7_*XCp08FNT+dPgCc*!C90>tr`&zpkgg;>!~uV2|Bn>ics{9V0_q6kfiG{`x_UTUxLDbcsU1q{5a$jp+3AOf zFbfmxo7mxR=bA$zt?kD|LriBFllF0S3o9#ExGI7+!d%d+0~TIh9(~PGu)8omsZy@< zf+qpKOPEA5#gJMCty;zm(RZ!Z)7#nE!UL`O$+Q z*?ZVnSpS3MoRQ^*NVZN*%a{TrU4Z0949P+`EX0`o`bbhgHA>?+q7?}cv`fGFumv<{ zC{7}+!w__ZjXcH(QV!CQp&y2&2p)EDv9|GpZ}x(D`_+d-4n+{1@EftO!Fn}wNhB)_ zxfVEw&KSAjCIroh|7qq9*5YOiQ7Z`fqar%QhW}ZLoen}G;At+1E;<;F!ti!2V;m`M zPCDxiGlOy5i>#)6`c;w!xcB^!8T=G7E@O;_ogCm-TEZAU%n%^S!ohwy2S`Rj1jL%{ zJUl8sDw2I+rY{_mom^e)h|UURws?brb$=jP*}#<5#yIlR%+WKVe&`jBm{1?5B1#BN z)AqU=i*Ha~yqt|TI%&lcO7!;dZx}NXIuYPa`KlwjL(}?&jlO?7P+|~J%&y%}BH-o)NgrTUF+^k`j*W&0^@$~hNT`z^ z@+*Qhmcp+>9|_~&F3l)W>dQwkmCzc3u!fPj_+m89JOdV2frUCoNuDx{ zvgoUmd@MX1EG(Vqc;HwA@%VRLo+ryFkKxLY!66ri5^|7MtYav8H0B0Gl$99MEQeXo z*d)WG&cSO0991JO^civ$h6|hWD7j!WWPcXGA%lG7vus8xZPAG(qq>MuGPFhKs27{7 zxRezHV7^O1D8y#!lEsXY@vw1oa<^AhbyEfSWj8fM?@UiAnS12DAgYVLcf6! zcJ;dz5(Q(jp(kYF2ITra$xO}OzOEiy>GC%YHzcD>dk=dq;MNVZeHlhZ2UQv6=1Ixl zu_~22t5J<`pz{w`QtiF{C3Et78r)5 z>Z4>xm(z&R#BnAP+Lw;)UT=Zsk`;r6CbE)In)E{Jn~G=>P|repdr+oCzmo}Y3)gs@ zgq*AdPR3UB(QEz-H|!)J%4p;Wx#MgxTkYGn*gEd&(ixA*ti^?5poMXUb3bwozw^(0slJF{j+t*K^cf|Bbq(EI8=+Xk zaTuaFU-OO9A1IT)&PI3h>6c$y3>l^9?Ck}O8np0XxLO-ic=-$JtX_nLvOb2!DjLO_e1~P*5{$G0HZsbMl76i$;8WcF)*&#*=$DdManB|*%3vT23|dMu z)CoeOa`93PK;o_kaVuf$a>j~LR>(sP&8)D{U$3u0iXU2uFxfB)KGY<{q9cxWkc}E9 zk9i#nG|Ql1+Jdo>q5c1l=7?>09F|Doo?$NpX9G)LSkI|oSO#rnlqEGd4fv9Pyko@L z-x=Yv6_)}XOzZ(v$S(gX=6Y$>oJ<)_GFah(1<!#2$Ki%#mepN2yAozwCvY>sSdQ7B zQEva<^rHMX{j_johfGFa^kOS-+Z~M3>I+EJlBJ&nP8%JOP*I;&`WaO97gS}7vCYMu zjFRZ{+rN60BhLUFKO(M|45taA4RasS!MoGSyGO}&_{Ffb15Dn&4^k1^%a1)OUE2UcB=mo`38g|AWzpwM>b~SC)|FQC!t=fkTde#DW0VWB!$5+= zQ3^7Im1=aC9H{ytBsfEistxur3XU-ZT_B>Zn))3?V9GbBWEchkuX)0Q8|^#?80F<` z<7Giv&^V#9Nc}7bSm%Rru-$ZEv2aNG=L~0*g@-SKXFUC*`F#GE=>{Ybv{=)^cquW0 zQ67{PNB@!^EsPjnv`KW{(Y^=qg%{$BHHHsw6r+4b%whj25+Z%mH!iVl3irdKXF8~2 z8GYvxQ9QlvZ4BBLeGDSQE};~UFiNp+L$v>-&OrI?SBDnZ3EDx|p zOnPG(Wi_IU|4TiE%tzmd!nUThj*pV)kRv7|tkMa@GWu;YY>efOA0Y(Vb4iSJk2l>_(&$|f-_#=rP$6n z{ThPoWiW>kCa7&pVwA;jov2aw<(q!oID)<)APMJMu;)edlNlujhjZaru8sA;%cJON zaWEEU51N2@rt|ChNk7DR0JInV?yd{~mjs7AGDdE72Ff*xlFoj8QVAM$BOY z5e^{~h{SW2Y2RidkqTgGWr>-2c9%y<2ooS_wdjb3BOou*^l3|sLGxaa6R~AjK_;U- z2cHzAO~U@TiDNh9$nGU~$1VpxI=~0JVHcOpD4)LW6wOpn7LJC|t3 zrcfPifv_{14k{(E=qU~q^{)L$Fw~1ey8#A_+5aQd55r6Pq~`N-L>Mn;hVWo80)sDv1 zIx-M!mZFC&tZY2Ih|aFT*9zzMtY1OMzNG{)b=GQVk32u9Xh=nmzmmW50v`IEk5Q50 zMPeh=FflY-p=V6gq_cipPkaYpieOTC%<#?=1k_d2TeEV7kugQLvI-;Hb>Kek9nLj# ztU$LDhUoU^C1N9`_)?yzZqWm<%OA6BR0B){Naf&*?!0 zLndvV@A|Wmk3{P58#pNhQiADm`7yEK0hpAlleLtrqP&c_V!L{%PQW z;eMDBf4}n##o&X|^7!{7G8jn9GDJp;g2C?bUnMsWo4#!Ja*dRht>Cn_ix)%b3zgeo z$o`*!8Wa_Wq6bIBbN2UicOrao{M4*h8X@4dEl}0VVuC;r5g0fS;O78mU(pLF{cQ%E z_AGk$P5GMDcV8HvEu<0|46J(ufzeUc>V2rXW||ZqqBr^mJ#0mvFp*84sU4B?K@#1~ zH0b1yVI&b$xD`d-=IUZYz3T0N?gvochlUA*vw}grl>){6;%J{bVfNsFyZ8`8@R-Z) zvqv5`0)E}l9e|=dx+aFT_VH)}z;-q+HXd+&98zb$k8w~@d^p#lIK!pS+StyiN(=#1 z)FvHlZR#hjC{J>O$#EhC8u`IB9XVrx18Try7p=2m8RFn%W8p^jv_TyQqBcPIEbXTI z(5nv%!17od96!nsKBXN)Q5@Z8y}$-Ien62+z|ga(8f3R0Y(Oh4;ExceO^*@a;O69Q z=it&mXabeKpJ{@T1PrkG$5#)uyAwXJE$KvjoGh&8e1Edr=?CMGB%1j=-Bp|>=E{v9G-wmhPs{U#=e zi^`j0^ZkSLz{1Z#QZ(@*K_v#B&L@Bi;>E3MsLKpANc0!eez5-3FCYL$pWQW#OetaT zpYwBgRQh&KV&F|8sFW6Y|0w^7H?Z1h-u(7F`ZOO>E%yAq;2i>^bZ~KTwYG%K0`xcv z+6DGxM7$lv8k;EXzi}iIcCdg4%8?Abms6g1?x<$rv%^zC2r~{{|P%VVP=2s zz3<=WOzbs>Y$C9pP8L2kltRTH75*@DY+Z@^6lIyT+gw#NEnzF~)6WTvdZ7BJue=$^ zH!2P$*1RzMZ?gyA@;LaCA^d^LyT2&Ku|Cq+j>F|WNY1+;-C@HOPZ$ZP5^vR_@F8dXHk#FtfJ8Q`7Mn3!jKg2@`@O&)u2uS zj-k<5S86Zzq3Mj)WP_nYs=Zo40F=79FpvxgEaS!W;;#q7Ft5oCcI}}z1Q3VGL=3pr zt^TYmt%ZSI%mr5y0PkDO(dH4(Xwf{5?UhWKmIf#Kj*J-;n>W`G0Yt%)R?Og}Af%xw zbq|$#!F{)2+G6{(m0=U`i{k#U!N^?YlCL{=7#!*ay2VbH<@*R=VgfX-D~HbuikL;m zvI7KQU7(z?ba0`@W~gfVt&B5ikW=q};mZv{%bg)h<_sdxlnh9)u0T%RB&9kYEp&w8 z7h9pmL=qS&wnEh%xk9BTKol7~Q`dj-2DhSW1}i1jC<3ShQX)88(5jWIxBeYmTZ4;Y zgG-AKhX`O&S|2pS{&U?ryo9ies%y~%;E*2&by0D|gS>g;H0LDPUnKE^JF&W*b(jF? z5Z&TVnSq+7Lv9f_YUh#QUt!l(GDiqNQ`S|48$HT~f_1!oD-Nt`<6;SbQ8Np}>*ShJ zp9ia8i0DN#Yz;o~7y(pl4NlOs$g6ypd3DYKt}=L45)+MzjuXK3baM4&xIsMrp-u(z z=8z>_Sv&#AVQM7WOeK(LW)^-cY6kE>U}vm%1x^tFr{95Kz{;CEPmYNLO`#iq*rMF) zGy&9Mi*g3wkG>IG+76*9UIH#4VVoS0LKxoJ!qW@hAEGP>7{I1a0$72)Pa}lgCol~o zLKy(1Ie+IE8zm$#ur}7mYtIvar1vo`DB~y#p?c>;tf!S|SR=PyAb?8sF};x)P<7Y# zRYweA#5zM%{VIb1Hhpgo*R{i^A*^eoFA+fPj~%$}Cu$}@iPpY|^Iix{Bp29R$7X`x zL?9s((8l-AG)o0Tv5~i4RY?-SVn9b&kJe-o8XsCpQ(x&~c-qKD%vNUxkEYBXT%2yt zCV)-po5FV~0G*+Ys|$~n&)kEVgDOO9W%2160a#3BL8$G8oVvb#dienePs<@ZVf#Rn zatMG@`alHTiY98Oe^(@J>4xm# zH8defArsSnu#!rhG7*10*;kNLTOb4?g=*M+(kW1I3$zxojpA`r3BXYs#RRR2hNtS1 z#*8Gq2jV@p`@uPr03NOTK|{nDAzD?DQHi22?9Ttwo>YO(93;?L{lh}%d_1y7goAICQ&0JbjeGzEflOc)ePj&@On3ai zTQA6miGh#sLHh0z4BT|;dyoL`fWWcs{yZu=G7Z${Pi@!k*#R^T0}a~KH&hzuui=ih zj|N;pq1}xhp2slX>7+jggv=4ulk++rt`Yp2HPB?D@<_UY%LAo0xDe_DA9&~=JB|y` z*tbb~X)3coV~ZW~Tc4k)m}d%bG5eM}eIFyC^n=k29O_3x`dJVd`IXOWf1&GUiJSuu z4pLdHFT`a*u{+&uF6wK;uGj-91Z1$pOIrY)1V>*!r@g&GB_VPjm&89zL8;Xlu|$4s zT<#38#CGrpZGVDF;@3l564c9M12Y0nbJ)084SekbM-NDY*B9+xnBM^u9Qq5du;P3)CU~Rzkf?*Dxt{z?vbg%0Z zz;_f({InE&-~wu-y{t^Nfo~ZuzTa{4TR!pwAlzLtY4QCpz- z`8`-vMFO}m4H2cnYg{hFewTKzC~&4HBC*EI?ILNP;9~`2b{4ZF&3Tj>FfaqY@IMTM^)G0 z5*Zwt`X>lBI1!ka8EzYT(Ixa$&;hMOL$!y=2V5GIM;+)QB+!6c*8T3lnG(ny^xqPo z-EyPC|E$M_r#tjS!1HQs$E?w-VY?s#VrSp}kGN2Mo~NFw`0shCXzI7jeK1ZP;6uAV zP93&J6G1Kz38+s;ku7}e$bFL!{uO*z!okv;a#ojC=HmDPsgYFFST!38`Dv2}8^_=a zE}?%#BucEN8Vg?&)DjVC;=ow-4hg8%(C<=A>CoPS&!s;qKP2}YRLa;; zkI2bsWR4wH-dp%!R(yp6Fxcwla4Rkas#XS1(Z1@T-w-%+6B%O3sZcd_P{<<4S6CK8 z-wCpSScSR7%wUj4w#fY?U0eYyRzbw1U6H41wfZMP7XKH4Q2SGek&ftv-($c#4~KYX z(I0}0{$oXhyfcOA5R*CBWgY}@Y&DV7jmzRc`UT;OW$fb90(^H^UC_31seakV#5dAX zAFZU24m`ccgGEUoZ~e~pCa(qKI}ItRm$Bl)4o(=ODXEbHCfo5xi^AA7xCi#+sAFdv zhf8AU{3JRl5%l9VYn4&qBs!#!j_1UM{>S+H@d-p~7II?G{9*AIapU6u$DoA9UuBoD z0^Mel0NG)KQY9}gKGpPn;b7o!BDI2L#0nL0lZAbuYf($rc%lm68XqnTc+JiOD&~GX z0-;zq;)wWk5FFgr>HqQ&74Oh=0(j1FW*HlZN4=Q;(&QSR0Zfj9{q-=}QA_}rNq?Q_ zNv0%c5BT6E+&e)J7?D*JVPyqhMY4kHTX2E9-#R#&M4?EU=fiz;oZJy&^kNJr^V#^E zsOuScQOVoI+5*09Nznye8Hp2=5CQW7moKY;fD{nGmJHz{xCH(`^?ZG9pc9&x#X|~d zZE;)*gXiU-LYja;$2gkQOaw(ffnQoDmMYMu`MB_K-yFU8)$ekgY8r)sG|`J~95CEG zIOu|{rpc1Hc=Yu^pAv1oot$WES}XXlXg?PM@;i{aa%By8KMK5${UBMBG%lCE2Ft)B zIsM24bjP(>R96U)1)v6?y@^A$x}pLua^IT5l|0Z`p{*uIQKn7wce}<46?`gOQN_mP zG9`jk=-mQ`8{nx;N}1Ge5FA$^S%fBgedq#N9EIvY3lj;9mJnny(D)p9*Kqh~Nq|q` z?kYv}F{?`8Lwog`>Yx{@1o==)MY=xhVCUe>PGpvl7grwIgHBR;2DTTeG@{jUY0w9U zeqRs(?c#I^?*x>eP$ny5d||Z`7qm|c-Y!tGpht(`#2sBo#<4sK$;S@aOf&<_pMZ?H z8iW31H7+`JY78iWQa6DMhSvdsiF%`VzGDyA;tkjWJ5kSR6J&!)6O_Ug2o2T(4i%(@ zJezk5BET@7V3<`H!-(h+q(TW3R!$b4@ckLO=rNcK0gbGd30-Ln!gPRj{~8P#1p|U) z2GuOat3ULlVWd$~jF4(ivQ04@#vt%0(oUlh@bSflUs>WW_G*;@9Dl zz{F5w8pdnerL0ns{Ag1ZA~_b{cOzr?ql@96V}tjFf)l2|;tGq;x`inIf2r-y%=~@2 z9`NCI-k=H6V~LADba993?tYCj+#k)ZnzLI4$ovFFVgrYjEkQDa6*-zkFN&z5=atL~ zL6?7r=wgNgK`Q^L*h!e(rtS}>7`mNl{@ov3?S{)^VAp``?FJj= zHlykf?#`SLvI$I)0x=w0Ry5&Lph~pAtf1vK2BSB!L|FZuT$D;GV5ZWZAEuTS1)jK; z7^eKBWi^I2GY}CsoiY~G&t3sx3tN0X^1&qnoorYFLbd4xcWhDDw(rZx*st#q$gHZH zmoKpebJRnzhg}0b^}}V+_bE3<3atIoeACdE2z7?^XXCcx;!(}tADH@Gl`f+Pl;VicRaNQ#yx zTm7SfNheAVlH(Rd1I72MG`&HfekcBgkQ} zONLDvIF3Q)xFi1k7}{m>g`|P4sFL^NQo)qGl%jKVCGTJ7&If5=k4@0C!iG!x2wW2X zzhYOhMP#KjsB$sbgLVLtD$;|8aB1`rB^>^t6j0s+bASN! zzV5LS9{@UTNEKHRhYL*|@ZiF!KSE%uI0DuWb9)-}2*~^e0b(cQ;&@y#{}3SEwksnp z>G|7!T?VL>!htO8c3S8uTq;z%3~c=l>e-^$jcCz%iimL*mu#~DM*BgU*zWD(BwR-Q zWeg=?4HF&+NM%u{c;*bK9QMu_tkMb4%^KlF8?=)(APNf?3nzb1hXIx1j2(qX?ef4) z>mVE?4k_ajIx@fEWWiS?VJs^Pz3_m zB5uQFTmpR|YWTBB{quu>N4R-*YR&-`w?U1xo8;7x)saPz1*)V+x4F4_y}DyA_+ZSC zGG^~}T=0K~tHGr`jv0_Msyi;k-yN38otwB!1{V(lb7U|R0<-hF#s>LjaEKxQU|llh z;WFuy1?~JEnbA3lOyQs?^)UblOoNvmv8x=bySN1UhyEY;84!`6Nyl!S0G}8^V+h;a zCKuxpp<3eqs*w*Lb7ZU`jr77B)YyHGT_pthjPi7^Xo}ELbFjqF=C1y8g2)360b1r5 zb#r(B(?#wnz$P4)!Pqlw(xtd;`WklB&pwe|VJpnX!N#{gViBnJEiTO3KKx;!m9KE& zhnGcPwcpQzK)?`+d}gx=0%bQCg7zU}YTPWXAjslBmbm+*czV%ZiwQ(-Y-2n1&8Qea zH8H#<2$>jY{l7VEadc%tmXJH}^Q+kN|qkkb|yTO}NnXpd&PL2?%0_ zyYB(?pw>kQ64)g`(N|m=gR_W@hli_&C)w2lc1S&3;21dJq7ykobIcT*Um(U{Se0Ry z0H2}fk5ljV$%L-Z`afhg@)V1?`@lG;pNTz>YS&JX(f@aq6s|UzClv?{O|{+~1PT4$ ziXe2IFLbdIpB?Z)*TAq>eiJ%z`3&@&iM}X>RI=#dfueALv77jpPuGJ4sf zwbEU&X<5lIk@?_~7>?17VQ5sOcu1%V1M zd7gu5Xr7=3_7lvL@FowPCyWiLFMs2lbwQBj&kRj(0Nff_6<|*nEgXXjiRqz@s=Am^(S%2KHxAbhsj!c32H3>qu^r$Cn5uA|PpSLW1aI{W3+J4y`_=0OhIP@?!+El^C VV}-gEGBcAj)1(t{JYgcj{vYWiT897t literal 0 HcmV?d00001 diff --git a/mysql-test/std_data/data_prev_ver_part_tokudb.zip b/mysql-test/std_data/data_prev_ver_part_tokudb.zip new file mode 100644 index 0000000000000000000000000000000000000000..15a53b4fc2a6080961279070f9083acacb427d46 GIT binary patch literal 795911 zcmeEv1ymi`wk_`N!5xAH5-hm8ySuvwcXzko?!kk*1Pz1`+=D}Kw|`=NJGrmBZ~EOo z#vkMN9;c`S6jg^>d+#;(Tyw3G5eEf>0s7p;+}=ridGqZHHV`h5fv$tDwvC;kleUwg zowkjxorAW6wYj5#-V;RyXduwtJPP$2z~<--3j_?d1quZ8<%`U3=e%bTHJmG}N{;)VBtF2$wGxRsvk~^Y$NKnEmfx*ul`!=0CgW z&`@?MM{q%23}yTi3zC&YsT5&hpE@`}uQx-hR5r`!n3q zemqzZhmbIq;Be&(bdFoI#a0zsTaQF9F%dLvpOI@ev0e-{-h^-<(qQ3*Z_CATwSVk# zLu_eDqCd8BNdnc;16JPfb@Yzp?1Nrr&flpHQMG>6kpr73u7g1QwOt=rY_)x8=MWb7 z+-lpOp;fnx3@I4Ilqot;$RD|Eo>oGVu)+8&+)r?;Vc=REq5$nKH%Y^4bXb+bYxHwz z4?nzVp`{t*h!rEND%o)c$IK`ysU8)eV(?$G!WXc6!qCO|MA?=+w&{(cMz0G5#p#{V z`Cgv{K{)VKTvP#~5~@E8*7ZgWXNpcUtdRV~F|JPiLfzJZ@YtRE9h1gGTGyHNoQk_a$})~_1G(8|Ll5%C{ZJ*7FyS7(p6SH!HT!S>wvy_eKbssH*F1S9QuWxJQTJ$-w#ES3+ z4*uG<#-5MeaDm))G8mOKWMHHW_m`wbQBcKkTVLOBVj+KNc;UvIUJs-&4Js@0K<2jX zrO(nVl&GC6P&45@q4B`h^JJbDzXQ|sH!D7_9yBZ%<7dsF8=h#154f^m)HYB|F)Ast zGF0p0kI!$^bQiF5(NF5wi+SO+4Q6Xm&@q|+yqpEBN%xr0{X{0{jlY(O6Gx~~5KhXW z0r)F~CrXFAhh_m;2-Zqt&5s?QY-HY@t!V*)H_1+bvn z-?ZQhUDMBY{ANI73u`@Hi$Ad5-5(6E*(xbN9^C$;CEdq_-AsY3&uepSi=vi83ZL@e zWKBk}96pl3#oOQ5`fy=$LFA6`mS5e?qAy?a)&r&MD8T<=fGB0NNOKiyjkUl zPr!SLPI#BOvVV@+rW#?5fgbFuVUYLP5RK+Y#t3kAN`{6+Q%Z>^B@?uEH9VGL=J3M5 z8rW$x{o+jWVF_hR-{%D|jo_VpA*)6?2Gq5d9mg%%Dbj8u-A;i_V_+0(`tY8jV(Gg! zQKg!e;u?*lk%&PvuxJ;h1~Pwz6YAFj=Z_qB6SdrJpUgfmj_wf&dlOJV|mHnRLgYb}@6X6Pa~~p$;1n7}Y>eEck3kS~u0a{Im>_`J<_f^^c$rL4bhd9s>a> z{i>-PboDF@wN0(He>4_gjG0;)7&>b^+5<-6UkRjLD1R{AlV&QIdoirjmb{eyh)R~)CB))+985I5W%-afHjon) zm&BA#ogWphIG`N)sFI18t6nHCq8xc!hQx{!M%bQT^H_Hp>g-LBDM_suS2#{~8)w2O zPIl7fk_*RRWD26w{-|y|R)TFjmZA+{1MDY@9w|qW-;l?%k4ZJ7Diu1ZWmH1cO`Q8P z?Kjq3``0DjLDuN%csU~8pl;}Ubx`W1%<9g9H z2XaD+*W0)3|55+EM{5y6wirEa3=+uj`4MB1ub783A9<#)S?g4;olm{Bs!UzhhUyqd zC2A;wVJ~d9($`_g9gEnmH5#uznr>zCwP5zh|nM( z>IbTW=t~Io{dK!fIc8|hdl~d-nRFy-(&;i ztI$o4QbK%?wUe>1j}k(rgRLbj4$Q`7CaFj!#Is5sN!C;mp|&9_EAB(RDxF1MH1I9a zkxihoBN4R9cmt2xD4Ihh^wB7I9w_D|zFjVV`yhPPm<%n0LKy61HD6tpM#CG|yilmd zi}d*+sZWv=7pbV8KtE14!n6pL0svfA^1ndV|2EltU;6yd-S>}X8vr%~AnX1kZD|-< zyifo(>)6sE{04?Rk}Dvp)0P6b;-!?yrAKVwxp>@S zyZ&5&Joj@TY=p5%?qujPXhg2%)P?gVrqlB)gtT)0LeN^CFDo7a0k3rL*}c*a_|psJ z1xsvQA_Y_3jFGV!G}T(#ed9Zs-3xSIG1``w3;NQ*=|v(aqP;tm4mm!vqrZL`mw$5i zg}}*azcdDwO@E5SO4mMO4Xz@X9dTTXNRCQQU=|DRZZ1ufoX0vnPQM^mu%X(#pdT(* zmvi)Vek6VB{509vroe?$al=A|YQ?ijSSy%vmN(sKiJj)%Pb7Wm(FMn zjGYsmu#V2vzSdne=sV;R8h5HO6#VIE((en@(Do-Dj+}F*3cbz z-5X$A0+PQm5B<1mGBLGxum-G}EUc}J{{!?U)y;zx=*5o6O>&GP0v3{&2P51;DjwS< z^^t}U=3{7VtS_-#17uLP=v!J=5WFGQNCIzv6C}coIGVTai&d>&=ItiuTF^!29YpDs zV=*}|E4{@u&gGN~*KEO0<;M$4U;}lrzP~)#*%XvYr9UtXvrP0z_)|=bUHJM0Z}?Rm zwtf`bHP#OQe(1)l8f`VNiHFxFl~rAF2sEeaJA>0i?A^@aXJ_cR>ed7f?NB3gcDOLs zSdxK79Vo`c(YBg`l3?AGyYQ@{c+PF!(E41Q@Q@%F8qbdeu}1PS#a!9hO-->7((;~P zkfYFH`y>yE(hnY}@$Z($VLtPzUa<13cXk(Gf9l55ORS42P$!fls@I4d_)NpB`F#&{ zy-0H3CGZ7yX07W9LpEshAdQYKAdEsK|fbpE0t*T<^DE z>Bd-)nw*$hn`@+{6o_q>~zdRXH=BWj~H~@W-mH$IK(@p}Otq<9< zCa$af+NdHb(Y94%g*Fx@`_I{n{2vHusOMuOHNzjzB&!Wlnd1?!Gt4 z3Lq&Em$)n!+R0%!4?hZfai8t%Nx>~0K!9K0} z=kGo~rM|6sHY)C~F(?K7l#5)s1{+=3lX26cA)_By8xa!2rIx14r4RhH5H`lvk<-yc zQWNf3RkSddIxR+TuD|qLZ_J<^_Xh4z41UvY49YRMvswFc2?VA);-^$2AA%FI@M_W# z*fv!J)oazho5MelJGJ`4uLux|kLrj_Lu&p?*#j`)ndE4>y zt@WWTXoD8$-1_4HS?TRJnu~JYYxK_Qz!l-n{Y9_$XA=W1;Bmb=+#dR}j5FFp5F=cZ z+J=z1sgV8dyK!!F1mG3`>tGgh`kgBl=hup$(n2k>6`jsqF1L#nsO%1SkmaChB4Y;h zkIrr?5q2Jze>!clE%UA)Fn2egB8z9b696`f>MVq*{CLDI?@de6Cd0Ft+?fPp!vUd9 z-GTS?QVDp01Y+rN7R9S$H}KPSY;H;&LhDZy;Bdllo{AkJi)p%(9dX4k(C8C&^1S(7 z5;xK4W9Am+dBh9uV-=NK_tVqfJQ&qvz>Qs|09$&bFiSHQM@rP;$*=e3VKG>0CY!+) zls~-db1yztm$OK6;!Hy8&c}OA)@!z{lu6cWVER^9v`)OFC6-x8l$}mgJuDB;E3chi zc=m;m>nz5$lQiihkm(YI`FV=-_Ar;0Ej+>>R($Fn>9-%(O~%)1w8hOkK(Q zMh7D~?2K8_Cx~~T<@(0fnyDr?pp)8x&m)qszvvFMqM7TR@;+8n zVJ0+_k~Ftg@WUv4(?-1>OKjPJF{+@|Wv z^%F)j_tA$U1NiYL0F1`<_inJYo*96H{%iVq_RGx$UtX&fMMWb6CL#}X((%rh*fXUE z5%7F(wEaG43$`-)Vp)={V|1=^az4)#of#re&X#N7_$&e!FG{IeNqCc!P_Cm+qA1Tq zm5!sMVraY`bKue$vZ6lX2n);i8@qYW25Y4JDxqmwKYq#P5>loE8iuoVsL(Wx%#}g> zlOwiu2E+~gSAtpq($s=!>GXjX97numFrrzGrP9EWW&y-_`WC9nUthg2shfb0z>~}6 zy=WulW2OWB z40dE@+2MzbEGsyTx7}f8^(to=Q!zr5rpZ!NC$zEK9~msMCP*3R4O`<~DvZg8;M;yO z4xjcQHWQ%ta{{(!ziJ!Bj4Cm=w znQJs#+%}q4GO3LZVZ?F^xi>-YQ9-P8bv_7=10*w4l&{tjM3S)2b2J7D+F?`hlPh;n zlEj>7q5P7P{G#{o;~U3<8Yz#X8V7pQJK2AnI{(Yy>>En|%PBPVA8_^$IQs{j{r>>Y z(5YL^RsgPP6adctTp#fJnf_bE{0kTP8Jm3$qyIH{m>DqxVL$_4jvKgrFTsnvozozr z>|{vLsf#VUWdQNeG1(%<0)EumMC*~$SA=K0I~uy_7yS~oq4DMxW-@_C9O#u*H#1+a z8xJTHf?@lhn$?{JK#i&(roF5o9TEttNPo`nV}9@Aue3~%VK%{m!VdHP4_P2*U>A2HiWdlL@7q<)5)h-2I8xrDapZooXWKQ%;c0-K@N@`vc1%k7jRsOuIE;6gMm}_OIS&h268Q zD>1XbhA_hIb5C^CkDI2)$K<~`d}XE@hX3CGZEHth99Hw;YK=(;zm(L5pS?MXXHs2U zVJB;6;?9{2I7HOd2s47uJ~?a?>3cPrOB$LFe40@hqxcltcz77tXA@*xtQ~r^jGA;V zs*lAKnuc~`vzTD5#eCJ}VXUbe(qR-a)b@2kUL@q0&aJEBE5T;x3X5}?Vfbz$BsI`L zFK`_ki=w}+o-kY~rK&%>Yvpv8H)*+8zSYSt9H!PNT3vDCq-!i>7#6?Y&O>xycx*W@ zc%__O{i=u_y&PANjD5UMTmdWODdspjtn2`{LUNGUXtwrjV1-+t6?P!ARkpcO_Amw5 zYT^e0jc6f#{+YB(=pVc9@5w=-zuA4iNh*Hszkj4{NoD_s7yN&Q7leG@CG}n7^vm}D zu5tRi+NN@l!1_PeHYKxRt?B)nw#nj~w#ma+zQa;%(onxI(;Gkv$ko^3sJ}c4W#+5(5se)b$Xc$=tHMtCPstzf)Y+cq(@uwL#&IsO1ukc zf|#D-9=99wQiHv$ z=?D_yayZHkFoyhbR;#LkwRi$p>xKi?y6V4rGkdSlc`NiO%SMikweNf7TfV zu0&PU%3v@S*skYjrY677ABuD|GY28#G1s(B!0!NU*kTB0u{j7~8|@iGVAq`FUW!9n z4)DLK@=KrM8;mup>*0t|(ENeHEhnwahen@o=*esN&o79zIjjDPmwj8gc zb#7$Z%Njx1F5x^SD%w&7au`d2xZZbZ==sAVsB3yD3hNxQE@yiOessOs(a$0LmjjNhjB^ryo_RxTxpGHa^3z5WPC#uxl@E;2t zhStRSAT{R1yAT%-3=wMH|kS4;?KYsbsfJk4MQEUJJt7Aa;T<34v5a5}DA0KG z4pVh~W0LM)F|Lcl{IvVRhb6sE#|CT1Frdv3rn*)XV?h>&En}Lmn_hcfCj}G7pYx;h zLtD6z`msX$Kgoux$C0wl(?jM3$7MQ;n?5m&$Ax_oNX6QQDI*Umj2lr@y!KpAC<0#c z*;`fzM0t2~9UP)u%5XHsEM1{~Vwe`4yew$EXOUg{3BfBeO;xzwaU(He0lU40y0(dF z&>9#SlYz7(3nDPLGAK832Fs6IN~Uqd1D4WR5{H(kcE_Hfll40{8nEI;#rciFX2HH3 z;zH>ZF`C4$6=kAb4z!?Y25Zl24myM=Nzk6l!AKEpB<@()DWnQt1)B?#m-d%yxVNiU zG$m3OCNoztsuXQ_0UINwG{lDGAA$+@ktT&|Plr>TYfu&o!6aXW%{d^72u((kY|}yGmMMBp4dmk;F(~S`zIdSml|r3y(mq z&ngk}2tuf^0IN|XDzVx|c)vjHYZ(rroEo3i$H=>!Xm5kJta6-r1ztt0k|BFM>o+G3 zrA4z2p*)jqp~$hYdI+x{qqzgM%tj_Kg&k>i&!J^Zx|8r{7M%)9-WBX~V2>l!a=A8sqzzH2SJ0BNpax!Nd?lIxrO$P z69Ac7LeKWlTEPnSkF(-`5$pZO@xOnt-v2u>V0s=ZI>v8aQRDB=s6WZ49qj>G3;(mk z{s~(d_`saN;lt44HJ2OChrqA35SYu2BcoWB-BAPivkNWim^_R7*LwtwR$OA z-!lRtj6*glhx0XUel?pR4MQ8`q7<<(s)P_eoK9!C)Y6vd6c_#EBvHklkiinSN0^65 z{bdSAa|)W&MqPO4*#r9r#eS z%9bZrCSg4B7R$%Vy9?1BII|Wd3t!}JZ)h|m{M?4FD|e0l*^9 zuUgX5(E*^q{m=QFSsD7qj@NO3EbQD#t_4Ax5HLvn74`5~Z}BLxAeD(2a*V z9PqjZHX(SSmNborUc}INxms?Yn9XRfmK=a`0?#)><0$XBSULdB#CP+5uwPrl!@~0g z#Dctkiv=N`tIQFckEhJ*RFw8t59Sh&8^uUC;_oXpZGM-!-(hCz-4u9Lfw|Khk$Xop za2MG7PkZ>Q5Fc_nvR{&cMGMB8i})LIOo&=m>&aRl>{n$NfUC*8H9XFfM{Q4bRokXy zQVr!9RqC>bCzx-*2YIRhWA4)cJxgcu7_+5Grw-9#;!Vb$o^);H&)Rh%hev|6013qj zB@ob`r@H(P9NHJ~sILo1LHTQ1z7?R~!wOn*XI(OlofYM#q@+bb*^xmafmNO(A|HKz z3|Xsp*zx8~M+eVjLIO9GY*mME4*+XS0~3MuyV>sH+Q#~_q4jXe8CfWFj4o6#XFpGr-So)SbqP1N$ZlWHTH^cPT=hSvjd&<{Sc(l8(pg`m z0_wj?nt}Ux`M}Wu#pc|n`qs=$sd@2Ek`VE^IT#G3NB>DS5WFYc0qWe-U~6m{uu0g! z>`yXgJDw&@6>F|CzLE>jMFf$}7nZ^V$wC@5{47**PZ?=v?fI6--q%Q^YG{krE#siI zaY556j^!jCg(>EkA0_nA&tLgX$UVI(o7q-*(7DUE&9~o_iG$r)wiO3;$E_WJn zineu9d8aJ&1kNXoAB_ssu4+80P$L*fA;)jyXuVHJck??w#gc0{YP=zIDFV?5X@aj2 z2EmEyp}6T0$H>DvpbAs-bR8;|MP|XNDs(HyoAE{{I`NibQK>U-yc9o`h+EYvnI^r@ zhA1y$w2IKcOI?HDUAI4{zO4tI@08ZZ;gS91@iqg%4#lQ33jNoZ_!cYTi+skTdH7m&jA)*Mm9>jt6~$Y z>>`+)Iv+mto*nE^abKA!S%BWCuYVd{;ANP)?^dnMJcfWLWB?tMA!aWRQUEn22QS)H zC?}dg$g6D<-uO96eApa0MMdY>AWV*XH8PDZn9xGsqBW<_yjpW%Y&o4&$+PUoTUp&CR$MSr^#H&c>Lc(sP3I7Iw$eX23nP2Kc=h4J|tYm^l3uPChH>VRBIjv~e+P^prTh>0&;#HQ{^v8jbH zSK+?50W?GP8SE*^A>JiSFmwnwGX#W?kPvxKuxpDk%cY|n5gU4f8!2_$X6wAB`vp#H zT2g8*ytfpzPWTfWvksJ81bFYzrUlI=1g%UiAP%+AR!(ocvEOB%37x#s_rCRb@}lC+ z8Lhg#{8ne0a2)-y>hhrgE9AVf>iYQ^oy6Bfwa@u#RtQU_+g{fXv=H;Y#(hKZ-tudb zrlyUL$9Z4jmH_mVAnL?M$nQH)V7Ws$Gld5j zPV|cW*4==a;47!c<5S7cbt&E_k14GU^KH^kRzeq`aD;Y=@W85-I1cA@z!reaj>+#+ za$rEelxRS;$1Jl5SAfxYk`dT~$*tQ!vo{$K6D!s8sO@pcoy)2#h_T_#GrGf@8=E?J z*%{xq5-6_j?brc5X7LPvEg)u#SJ%Pd@)?RZV`P)H-Z)P+97F6o()pbs&t@m7;Z9`MV{BIaCUrgZa@Pfh1*;I^%21x2^=F z1!jv=uMawh_aliJJI{}T^Yl8r6}zZ9!g^wknPoQ1+(OschT@3E1ly}lydwsnXtH~R ziBrYg$-69aFZp^3QrD@G%P~T&1!~k{>Iv{^q=}nh&&9mWMjtvVBxHCBXui=%BqVxz zyuJ}JF)_#?Yv~J=Z$$%isB#WSRI9iT>@M7s4&pQO%Uj{Sm7tf&Jv+vHz@^}KfDGN- zDs5<6xY{5aYLJ40fNnbe#h?ziM}ltTsO#L5u+hg2uuAbEU&&EFhy)V9(rBIT`z@1z zjv1G1t6baMrwW6VWUZTb=1=qIfNSIxo~9uJ52KO%TS1a3S-;C?0kZ<`h6=G;n7ZMC$iEW>O!kJ(19VV4Ya@H4l)8WtFXj zhre+kj-?DHhru4JdMoOlQ;QXqpE-!kc=G&dai#X*8%h_dN?P1WUry>f0hrrZsqPef za2RFu?qY?p!1T#u)qGG7by>U6q3t7gw#kcCLSMSQifaJ@)D&g6G4jbWpgVW?omwx_ zJAIBEjABY{fkTv%gm(6FUS`3xJnYw)g&ENKl@E5F3aUg0xv|zNRyJ{mdx^yAEr|y@ zXuE{i1M-~84Sr`W9`SLk_~U~G?5+yc?G4S&E`a>a*HeD|WLRpl{IW-%Nl&w0d15mq z4w4+JUVGyDR7x$Rm086_q^bp;qr_k#$X<5hRHsNp0cWQk3Su=k$~L6&Mc$)?U@3xL z7UHI6$~M$-^V~~bfu+%^6`J0xfG#pUd+!`^ftj{@I%M>@YbN3nrFp^}qos8WWXI+` zOXA_DV@4@P^5NBwH>T0}EkdE011?hyo#5dsRK?353w$VBpS&e6GiS z@2Txp6EbLh-2H9kag0@Xsyt*0btIbDA&o_m9;FQ>`)`~AL$mch(mti{`VeBQvj^&* z&Hkhll%9dmmK8zLB8XcLG~^_X=En2Fed=P-y4t-RyS1Nu8M`CdnpH_Nx`~12D&m5looTUfKzlRe55;^H+l`@$EIeZAzs`${h0>^$I*Ub%v;kwQ^#p{44 zEF)tYZL-Icp!_UCleLBe)=^fYPf%5H`Y?5{W$d|hR=#9S&c}h;v~e(xOG&a}lzX_4 z$|>d~hIUVHS$XQgtoJQ@O1fzo#x^RjcInmDH4vCoZ|Rsg;8trXPh7h0*nB5XJQiss zMxB%PNO+3F0>(Fm$XIFiiu^!Z7|e91bcfhM<9b_r&-?V}?Rr<+a&|eJd;0^&>_-!w z=ZXW`-X?Au(eAl$Y?-63xQ=yhIfT3v>K&`G9H!-PT?f@xv7s7*EzJljrAu@+oy4#n z+gB3S-RlTAN&%m>fKm*RL#L>#$=fG1WfwFP7U3Rbodpvt_mQ##ezJ1&`f2N0lzv zTNI^}n#Md!PQ(d=Kz6W<>R_|A3}|Z&4L8hITJ5FvngU>ug6#yjjW?U(4b~hD%E-8E zJfz;Jt~zv8L>{$3Q&KlCX>yKk!Emj8JAt-*82YgE!#{s%Pxqf09ieax_Xq--rBrlO zQix-fR^XHrGDB%^4fk}i{&G|}!}*lv(1XV@iiutbJM?gVPJ$n&n7G5fX#&j(i{WO` zg`f$c!n1^3wkQf1x~ASkKC-6K<6^B$m!KVvp%tRBT(Mr$^!!>s9W~Ml>~L7(Y`h z|0yo1$D6719)SMSiT(!n`ZZ7w&`SUu>3^~gn5_~6WdI~YTHC?TPi6-N$MLhH7hXd} z7z^aRpxyuYG46^^&chQuR+Ux!S>?y^A-y~+82eo%)H?{*8V4}Vwkh7+-@f#U-XjQNv_e(oNisVnAXO8!l2%#}zVH}{dZD8mz2 zk{t<(2{^Q3+WO~@kxycr=Ltfjby1rQKZ5=^IDVga`oF*@KgA^eJoEIA@X0@!r~l>5 z)5pS<`?CP>c?n?5Wqx($`{NQKUw-qKH2N&J2^udJ_~F65_NS#!i~E}S(P%IjC^+Js zBZhiX3q!Vz&tL`>6B8eU!_w03e@+KP1BsQZtorWtA)d4 zi#LAJx0H3G3ckZZt(eoC zP?WYEE);)H(xdwrH@+KoxBXFxoU!$86ZR9OF!pDHOgkykBTwAU;-(5^%ZhmSj~4Ap zw6z56&0=4-hbxDPmTi>!nN(*n9j^|c|%?lXNFkiI#hpX46QE?D-SuXWI{$% zM?I=yit%PM-R*R*mbreRNEji3}%lb@XHy_HkD)-XK$MZ1AhQZ1funE1G4nF0VKA10F5P}1_5#U1Oa7qpaN+x zKjs-5KZMIVFn0!~M{{mT71x(n(QaUc{d;tgpt}*$Oo_WNYBc1fCg~v(3y()(gdz z_ZlRN*VjjtujrefO{a47wd%X=O>42$8%OR(=;N~1PetsT>bp%%<1_UM>bs3jFFvgg z3g1W9zy3+UDQ7fLb^{n=P82{u3cotW{&;~02dK(QCxObCPb<_*NPXRIO5rpzN4> z_NXdBojUYba1ef9c7g5bH17?{Dw2&agNpSj{VE9H{5RjQIykNKkjA|9a?<~H+~?gT z9>;JLfY@4!?RDfBTGRp>eVR$$?tzsP5pc9+STOU3*}D9JR7HT{>JzS;9$^fB+uFGS zmM(O!0h+KK8WG~$(M2mI0ts>lAK5%XPYioBuR9?id%FluBkCmx)v8t$&dZHpWER2r zGd7Q<865L?9djbT4n)3q*>}p2#D^NMFmrsH+7NF2=rI;59EfMK`?EP>vQLTMPt!a{ zsijR->`zUUA_Tva#f1;F?T6p4&?|hx&sg~shbxM4{9TO9`L>hoi}t0cgX@YQ3?*X^ z!j=q)9Lx7A4!9kU_qtx;jSTK#GvFoE2p1|C#sDH+~1a+0;d(6q!#iy;I zL4%R5?`q^j;;P8(t>Jlrbdan< z%z3UnuEl|OA6YK8dd3tcr$T5u=&zS9KsLf(g`ZOZFOc6HB=#C1;S&zk0;58SevxUj zOp9_+qfoY-Cf`UMl%t?mau@^W+@p<;wX{Vut{JGJKBXx;N=b?JVpDZu=yhU>wW-v` zjxMyNrbMNp=+w7A;llr3BEZk$ntu`j{z(M*zn%yXl(E?S>F)+LKC2u4n)UdavJFTK zB2X^wkrBi|GbP7o%n4i^*Lr(&>A;(|g9U~}3X1*Jd6Wn#$^QZUph31!VRSl?ki zuHz(c&httD_5*83fUMuj1Bc*scA0hzSr-!nkMw;pz&tBWMF$SBPT3LjW!ov>-NUd^_=h-+O z@mi8AaYvRi*OY8zl|0Wki!4e#dHl0DpM3XO#3O+DnEwuiWB1}qson3^`s;Br+y1!% z66E1Q0=^C^2}3^r8W0Jp)M)*BG_j>_WA8ez_e~gwsiAtta_1%9(FgMcL?vv7E4{mWLpT^c&$7{P z5iw=X0GkvBMGHepQ6b*8iE`(~xy(Y(!DNIpaJ<3^AP0~Ys;z~ucR0yvP!kCbspat zl6VwF_Wh*s-?6ka?E?T`BmnT$|C>YVf7XZpJ@z2=t8B|lbZw)1#Q4PLJwmy^f3n&U zCLmsDI@<#fiO-Et>**Qny@A33=)^%mQD9+F^o6IB0f7$rsEgHlmvjZF0%F%Fv|i7} zp)2%SWy&n90L zEW@WM*)Ph0J4E>$qZ`ZceSf$2OPHNila2^+%N}SJ^P&__q3jo|6GdH2d_uBVkKfBM z83Ux^ft@_rk%`ZvK1;QjkDZrO=?v0;-zuF&&9;)DTo;yeYDbg5-*)XT7g`R(e_i+Tjm z9x4|IrXkp6IULAiW{$=How$ENQmT}{9OJ!SlR^z2TcjMDZgI9~PTk8eRpSH)2tWEq z5N#ZyCfb*^uC1`oq4+bEVMaey%s4d4&pK_w*rfTrcJAmY+0EQ&Bf7hg^uVEP+GoaJ zuQC=05h#{gg+?_b$#^Quuo@3N6>Ka~Hu)LKnpGUfhNva`sAVS|P2RGIz8n^KExJmL3O>>Qf;774BB!Lq;{Y^BS`yg+^d?ZshQzji)BaVeKu4_&bN&lL{s9> zQz_27`4+oNU~a{Ir+RrwA35H-G6ahgOBQGa=L2X4HXM<3(cDo1*(d8V+5~(N+CP$W zzfYt2?+J$gB#-8gn7M!QX#Rd4jkHK&5D&n24Fi1FFN@;76^!|<66L?*z78%ne=TL5 z1<3#Df%=Y~e4;ijDaZ;9$;Nvm^Bly=fKWuVlyRLQOTr?d0R&Wd1!jSoh#5l4-&TxZ z)E6t7=kPACXmkl*&sz3+gYklzryn?S7|{sCyek0meWmpGcru1NQ~ry#hIoV z%a*;nl@ofz0cIONogc!Zl{VYUV*W8fv!vX{XEh4fq_ju9KWv!{jJmSTV zqmifIaIq5L@NNO2e7*mw!~4^!uzxfrzen@aHj+L^^Fy3WCZQS7LSld`&dD5c0MUHY z=7l%h9RwYt0BtfrpgipZ%uw|$xX-#c1MewC1tyQ&8ihu7-!imtlHSfAPk`=L2s2g= zG~dg@TCWo_>5su9={2w3MAydE0_t3e1_=q&{5!@6!f!>pAH;Ei7VDn>ntpSDREiJ7 zMFZv_IEd!ep0@Sx2p=2JE3LQp6YW(hHn8}rQKdlr9|R2n!kD(()9RG))6S5FVKArQFNWvNIo?27!>dSP2o9*buISE%?uh3Ct7^9&lVQCB(uqpwNDL0qRRJEH+3THfGFc=^aEGi{ui`ExM3_@-o~&~811>{T$r)!=vSFVZV))=x#g(^(n3HeuQ~x?qy!*uKK7$L>Vk|#m=redE_G? z8J^yMUoo@NWbkAM$~7+){ZOG^Dg89E;RT3w*34zI{Z4F(e?KutxoyEJX+lFQ>scDK z&)w8X?jVc{L4bxv60{J_0a7dw0;~ zFw+H)S>!|ByDnH-4KzncVUBV%5^TCqV*$oGXDI>kFie4IwHD&8?JQ@>o&v3P-(V*k zfMkZv1MMKh<_wo0WNQaGGk9x1>rz6%3$_=N7=i>%I|R!r_fn{*C@9AaU9W7@CU|-) z2Mb9SCwH1Wr^4DRGdR%d4gpz`_7n2>y9>KaDD@}1$l0E~n&_&^f@6x$*Gq716-QrF z1*s>*mWQfPr<&Gbm?(S8k~1}GwdtgwDtEO)8! z*u{+2X=i8n@y}`RzfXnvuO*27iOTE`S7!fY!u;?#ULOW`#003|I>O_ zt$;KbKv@%gKWZ@uVg&|<=;9r)sIfPW0)$dBI@>*^#H1MHTG`U$<$VRWWpD|;?@vS% zU%j&29zDN9UeJXN2B$wlt#63M;{c`dA0WfLv7H8fmDJ-57yi8*ZIo0OlV;ZvG7kZ) zys@I?gxt$BIq3*VFP2;*^RFvsVzW0|Y4-s41snpW%{7~Ipe&sY4+0A}dh(o;2ucUY@)6dJ6XR?4_(_wNIauBz3r zH4_L%H=5dd1!FST6e~6ngn#rpzkg!G-yJF63Pk*`#AE+Fvf-~E+3QFFkmjF)H2<}NG+JbMb&3F#>i|HxqQ8oAf3BMUopbw*A^i(5+b)VacQrmc z^5ikP2rUYzND++%dY9;v-Xf=x9#h?8?oI+APymHvz!wf^crhwp>gTW6zUaJs4uc{A ze#8}vzG+|h;>Fu5vBcx@cP+KRVCc&Q_Z>b#X(d4rGAys%8evb*?r|H^!|ptEFu&K# z2k7u__Z4_CTfx7`?(S9DSY>Ml958|gR18m!G|_{GVyH2j8NU1y3lZ-o^WIAwonPY> zK8rW#fi2l<3ar}(H??iY(pK~4c4#vbsT}Y4}#VFP4a=hPT*ejdcs8-=TkiZ@3zpknrRarX*Y)7Li6U*sU1s}k0PhgvJ zpLih_y+$BVWKQE__0vL>)(8(jthG^B(Nm_NE@yP*J@-;TAh@G)>CqFWPRUK^7#Ev0Au}__REr%*Dn(~w`- zF+AyKrl$lvAYxTRC)gXerwAFu4kecl>?5U+Wr^yfYB;vO+hq0nGJmal`=!dD2l7Pl6RVGqJ!msfSGIGW1Y>PIdJ>{Cv5JnotJXr)HMNR|+?j}S5HgKLdE^tUn*~To z5K?m|CVs#A4Ed!Rx9E#lbxFIV3X|#P12n5Ui8-=y3DQ016YEi6~WdAZwIK{ z-$`ZE>Qn3wi?Z8Pi@mJPCErgIWjA;ym3*t!LOPIG1}^?Vj?6qJwvMA*BM-MYmS|r^ zgdO!Af`9D<;s0UpJiwYr-Ug0m;jD-th?FQ6EEH+di3LQZsfdUOh*SYV=@1|)DxHWZ z9ik#2AR;2YM5HQUq<5n9nh;t@LbBh2-klA6yRpjG!3!UZ|h#oIg$IntK-V&7-V;Hl-^JZrOT-wG?ekW8ZOV!;Xq; z8x>Ya+wBrr9`)PJz~-~bJ2+mRFFX8Tw;8+R@i^WCo+iVg!tEjs{O@-hxc1u6N039* zWFk~JzavI*FjwZd)wSOQS`gQmdq~_UbO()y7=>}xN2&5!d-P|_c=Gh__C6oBM`1Z# z@@Oa@(jCr6*||i*YP~KW=YGqk=LSW$*M43p#mL!gufbldlAKMLrp73G8cZ~cZDtHI zkc4l>dv<*|Lp!XRP3x0N+7o0m8`dMD z*}fV6_9|lN4F6b_m+LNbCWV>lk|PTqcu&gn0^|Ywtii4M)X(TAf zRoU&i-=mS(cRKL|Q$VMzq-1C`f555x4lfN8%Eeo%1D^28yo}-2QhZhsUmufHzBcD} z#_ifSqmn*{RhsGDwN-o?8}Dkkc{?wu(a+BHDI`h{^5a>DV3KP%NWZd(J7| z>>MY7RkcE~=9Tg2vTJ1@7#UQRZp1U3i(ZChc*!Bl_(61f z-QC+UWvpYT*v9T0T4B#X6dY!FQViyoUIj*% zeMyWAo?vn8S7b7XZMw;DzT=c3gI*q-L5!n~@%_b7h68!4u?)ZWTivW_`Muww_(cM< zxze^eha*q&{Z4Rlq&`i%c}{0#dh`bKwL9u^j=f4*_K>!DeM`O2%OO28t-O5{*1%>v zugZYKMj4#EX^rcLHm{|{_FhXmx2FAg=^8CD_KTXP4;Iz8gz01=$-ft2U=tyG&-+FUOqK8R4|5 zWY%gR-%j(BdX_kzEKoIu)Sw~Rjkq!(W%x@&2U;f2ldpjl)P*Wtk7xAnm;@zIJHO9 zcB>~2u`5SmYh8DBT{e4`DlW{=ivh5;V%bv5-OmlA9rih$9 z)e=(}al+$x-r2*2$7n|xhg3tKHq8v8u+7qsTL%1M9q&%I?cjG*j~v;~<7mo{N%L8zaWD^M zR6=eWXm77@i+6Q&k=T5opTV(?aozcQS=@F@)G_$`f~T>bj<51h4HK3ce)(0R%&r^H zTvoq^S2C0xb9h-^<0P-zP%%)n-QPEmcptC)=}Sal{G>m#a`ua&YN;-$`WrB>6nQ>ks@ZKC!D*y}z`|AFzuQp-{BGnQDotf|_*H_7f%U8k9xb0lBI zMSca$S)y1(&&rJTFFZDhA1GJ5Shs$wjL*ryaLuTaCzpryGAxB9_o#=z3)Yam)i{%e zyJ25?dejLV!x7(Ys_l&ujvIhQOHr)awA7z7I=Qoc4D;}2Tm(3Z%M5$4=j`cNpW&l{QG73o6ddk8 z@nLS};FURG6z@6Q|31a$Fu&MokX!Scf&n9a+t>5H zV!f;TLpKGq`QLaM7^HqyQ9sX%_{-YAcQ@TE3_kV)t=*I*Ghx}OjfyI3Mw$|s`M`-@ ztIWIJs`cqT@a%t>^_xum1*4&JhV0_M-M_y4W*zBRAX1JAYm;Flv_gXY)d>d8^Un_} z^_DNWUrH3_EbZ&z2<7q^VBK{6kKYTD@qS-rV7Edo<-x0(EW{9-eN0u$P?&ZdOhyYi zzV7o;?m_oFkrY$qEk!Frerx)ep&XKRTULehiArz~45?lI;7o_)t|wuW0xr8I-%8cK zw748m+CNpepT~_g`SK7sWS@rSee;t2Yy`OnbzK_Ln(PyAUli|sK)84Zb={rWBUAn0 z(UGm1p4Ki!$1c5^`&s`_FZ!PUQtluBV9*a=%57wy+&IyZh7I zumiytPBeV`(uu#u{!(DZ{0e7xwt&x(8Ls`E>da+qC#-)$|H?l7%LbRM^hNbW^o5NC zKfTs`t}gFDakFCQziYA;quh33(<>rhc4Yj>ZpHQKFYhJ?)Fkt6TE?yL{6XvWHnPRZ z-F16enbTQ)Zg^4Hy}Tq>tF4n8jpWyrPM4I-v0LBn6Gw=UxXzl$=V?>q1|RJ{*0Ej4 zx|C1-E>dFBKsE&HU9Kz~V4)#?jL$%a@@f^M{xTi)&P$TAA-~&-UC&4z-@}6K-K_kU zSVy8+ZFCnK<#%`yFPE*^@D!{&IL994>P^9|V}!5J!Eza?=BU#ES^xzeE~9(VAE*N; zaZl)t)PV-P?*{yOGg$s+{G%?#3|RRLh6-od$0{H23MRHGeF%sftUe{^iRl`c#UBh^P$w zgm>RuCJc_X+(>xu&Z#7~SE9Qq9dIX(Exoh@54Kfil(&!@Zz-MMGk4ssqRTXZXQS?( z6@A0ZG}N`daX^Y6Tcj#sf)QpC2j;A-K+NEBPLOuFR49M zFP@%{SCgjbBVN!CXV4PjrqH~ihqdDGJ6)X1J5l2e9og_$hYDC1J*5JO5G7RB=})Db zi$`I|FUB6T%9K^Cyr%E7GX2;zzECES*_U_Q+1u)i>kI!=b;?!Vc9OM>C?k4I<$%#y zHsbZrL)AOCtX?gDM>Xcj7B8<`NiUXYoj?83>%o}>{$;+C^(*(7KfHftf6JxaW*^bd zdCz*CML51QGKqREp8J5UmwG)yGzAg%m|7L~nD0pZ?NbByP9+{Pj#607`|*zP<`;%e zj1k@2x<~4al~I`%&h`2SX4(?To1Yqxo+R9uaZVp}zTH6a6@3YRvyT5x7KhwBVc0C8 zYpx;h0s&gFya3FdPIw!Pd;^#YMFGZJ;Xs8=CNU|DYkU?KI7+_@loiC^-jPcs>)t@- zisnRB!!6bYON-#lO%MaMwXKv1>fqPdR6o6F?COF ztKiGET``0ER#gmV_a`J~Zi77~hcfHEJT!RZOvU+7#=w4)?yLt{N2B+hSKp7?zJEny z$AsgoY=#f{LGP27^5mVN!mg8OXjvF3F`=%X3?E!a`*RbFU*XjyVVVJ0`AQ!%l`UEzD9Wu|+hrkQ55K@0>S z&%ftCpN{2EKjn^t>#X@bdGdOtt4zqDEEhLfpe*5YQD%!X`*%Q#^2I=T*6t6{w)Ay< zZkvB>_ribJz1TmudyI0|1#reQ-!YwS<;>mdky{)_Pe|VEIxxz3@gVcYWz1Jkup*vt zIh6?rcxmu4mK;23%4~mPeO-y71ov|5Ecih?xpi%nQ0pMG73r%6uef18ypgyxCi}Qu zo*b8;UpwG!v?t+S;+bfT++A$`XXCaq-UdFJHY?0{24?>nIP6P$ zV-}`*058-lICxgY(w_%^G$+M=MdXIEee#KVF^_A)(y*t4SoWs(`udl@*ob|ZlSJFk zbaCp)@Z%@L9#0+fNy+DMMkyVWT5~1*0Pv;icpA~pP@~>c=}gfmYW?X!EVjcpvp|3D zfKd_kNg%hansyX`@1Y@E+l3p`=`L*<9i4clK0$LHHA{azDh&vy(ver60s1>>$c-E# zBU^1%^?I?O(cf1ONg8NRj3Ld;KE-EXV7-?|1KtBPm@IlUX#(JU(Q566ncMSa#2T*i z_24Am&xA7gvw9`^hhFXf8NK2(0QIU5e^=C}d@Jvn-6qd>u^x<6dARBEZFA;CFOMA; zAKQ;I>Rt@2Ikc0pL>q{~OX`1a?_+ zM@rwvyCb$Z<*AYG$|05gG51`ata7+$>>zeA?Dp^`dLjE5GtseSmGOIA`pjnjE%M3Y zm{nS>GUkcTFX;K^gg;Ej+j*|rDfMuWQwBR@j`wtL z-fKKVJVYyg)_}yg>x?*Lvgi9o3+!yHT^(^39}&4EzDC$@bG^ms1{vE_-TIGB^$o7s zsTURRx%52?mf4p%(v(O`dzx{aXCIeilpl>gW=PRPu9$03I^u4QeR%@T9N?QM0B-el zxr^VIj>NZPhNz&Q8T^y5)db)@0evA8Kuisgawj>jVFZTmMQ246btrm&>~^6v5dev3 z5>Sy(Mz$h3{P>}n5I&x^B zRQL16Yj*b^f3dx5{!*{mOG?>;u^Db~?-ua0E!t|WA+D0ernt;^67FW{>|m= zyW?)vqpSwtxZBjE45g|}yturFYuUCNIh5;b3tfDwJQxiQI?$v~^LDQA^}3}e%YSHn zyNB1i8@jSDKdf5S*?wYRlh=vg^?1ujQB0c->fSeEq5_4Y*h;F15P=KrZ1SQjrDKih z3l8RNzJmIe@WDNMO*T_r|GpwOFJ@bH9eZWT4KBe4`9NE+PwyV@XAV;K&xYhRKi*#I zANZ!nI_AyZRHa(6lE^Qq5~DY+Bed+>>8 z!$laao>(RwrEwf*x8f;T<4m;0mkEg14Ex8O!D-?Of|?wG`tqjkiE$g*Ion~7MB}G( znUwEZ)0}!|SW#PlaSFcE0t^8e8 zM`l&rCi4fScN88PmhNiWVo&O6b7R51a*AjeT>m79nT%PJO}YbIS*fkop_z&M&1Kb< z>*v!`4Y^{Lp1$?YRG<-?U%eFNfSCA*9*KQ&1&%Vwy`dPbqw z{q9khfm;`ubQ_uBk;@+nncfv7patXj8Zxa)p6?WIiP&8KxD=t$6<&8q^=-4O#pf@> zQ1PrTs_2Kuj_U`R@3~ymrn!yFN{eOF+kTm`!#SRTg<|}x>(Q+359_OokY_r-_^pds zOK!Tnc~#rbTC(UTOWyy_Em`g;*Fn}-L`TF>)RApUo8brA1y#2soZ5cN_W^i6{aoix z?(~vEucLzN#hyIq*>QncpvK!P{etnw>wLRzUeo=3_bGFOt-+7FD&1eLs8il zBkxX|195u0>k|$uE)8ok>KZ#fpqBJWVdch*2a$WZWp~C&w!q07kh?ncJ537?W6D$X~;tz4!)se)RDTXN4wu}tuC4sP)HtwSC`$5LolR&NUnP)y&~ z($?NtPUn<5&4<1lUCHI@tmn-*cO`sq{Qd}F>S1RHAh%S;0hp^9e@gvi#f@J&ooCfa z+2q-Z-p}gvkH^yc{uuL!{_`;p{3z#1E>NLDy6;{Kj(O7L6IysGPn?9AA&+St?{TV;R6Mo@BPY#NrNjIUgqaOog-IDxT) z)=@z%+R;jI51Ehs^2e08L6s^m?nO``5+-YR(VZ8~a^*U&@ z+Hyl<|KuApZgPVr!3{3uVk6czOBo+4myxBZvlJN2?8wq&3_4Y)q67<+?fGau1`xmj zkJ4#zAf!u>tyIK*YR)6`zJEJ_Mnpv1Z)?Zmb`X)qEm@bEHzFv3-YaVr3KZ<4RgFFRSY@<3m#Dcjw|!;ioAjq__cOwIa+6ZG)%Qs=9Ui)B z(YkVPx{=!6$R>o^(|#_6R-W>ux5v}er_5YqCchZ&*biM(PN{Pj7%f0nk#DkJj#b0O zBiklvbEa_(X{$kl8@E)z>ws;i093fzctAt`HV>Jlad2(DI(QhrF*cuq)Jmtrgc^a? z$Mlrf95TVFnLWnz8?x@xquqUFCDzv$xQVk?Jld2LY@g<_|%ibm~+5 z-t5^IV~z@!8kJK1!|l}tb9Wk&I6#~!XdWW8Z|NWDP z^ve=J>kt8m07L*H01d@IaIM*6>D+{kEkNUu6PnN;L;xZH5r7Cl1Rw$s0f+!Z03rYpfCxYY zAOa8phyX+YA^;J92tWiN0uTX+07L*H01K7 z$`28M2tWiN0uTX+07L*H01c=Tn41ew4x}@m{(oN`r~(iHhyX+Y zA^;J92tWiN0uTX+07L*H013=SqzNNLHg}#xsm7Ttkv8Az{vHoRaePb(!OE%V4myNCLepKe~ z%a-}~vS%^=olsV=p1(89Ho{Z$%Ug7pfSU&x82EoE^ix|1{==$`wB#Nyy1@F1804E? z<5P0*AitgMhGp!_3)ME>6jaRlJ>y`^y^bxa+=Dd-U6%@3JPfk_c!81e;Cf~)KDXZu z3w9n~agvMm9>AogRkh2u>nbwczlnd@rETX$ zXZCGl-&I0yGZAAX^=~k~>8vOp?;M>u=t*+ewK4lcHlMA2B;#ML`vGGcQSVTd;h;G} zPj*i+pLB+wbLX;~5D-Tb4W-}_yE$t#5q^=uVtkW@SH^2^^;M;)M&ZeX{EwyWdJZSw zz0hV$S{i<3)*@@jczbtpnJznHXy3T=AxJPZJ8*i5oInFuoI1 zWLEUbG(j6JeGGYkuzci1h+jc{IXxYxZA4vJj^Y#iCk)GLu*| zkdkjnhfll+<42gjr#K3^VLO@-?SeUUG!MCQxPq}`h$L*)HN|PEMj;XbOiNmdrQ1ZH zl7zKu3a-pLvC619a$>Ds>Ym+?9($>egcgZqFc|k-$4ni<}r&as5u6#f1K;lRZt}xm0t&F+6cQx&F$Y;?dTP~)8$lxAfop)fNiyj2u8-ZUXw9d zR}Me1BA4Q^G;hjqOs}AH+M8~=onROxThU#qLh9QjG|loz%Uf@o^d6?DV69d$TZKJa zJd$aJ%zA^0&IutV*0L`y?pbcjXnMum38&t=1-xi7y3*_75#A03Hp;kT= zJ&eIek8y=B?z&YlB(#18F4tOXgD8g1cto)!VCI;5XLi;hpP#bLL4moAxmu z2usPbj?Uxe$g780?xSf94?fEvMz(r8tal4H^UdpA;aqabna5rrC5!x2t8I(5l1Rwg zEv*-*=iGPL?`H{X7{HTvK6XF#_PrvXXP~sK-^Asj@;j#GY28v|vd+ipzbGuWP{E^&v$C1N1s9RU9 zqo-TJr%Rsi5Q?z)ZW@ zulcCaOOKDTv3jL9MPo8ZM6=bqvb@j2&g2ETV2GsBQipq->z-MO#zji)Xtv@_JLOT= zYN^~X*}7s!+Q7^MPTVUe)BO@@x>r=kE-_kBj$A&ow&Pya4F%-~rqhY<+b!}1)~ngm zKIljjPw16izq+IAhz*mf+a9^;nUBPj-aF#zFM37wws)1(2z52|i0BnM-S^XC+BLQ# zxt_IJ`q5g2T7?L&jP;kdwWz)H=&x1C^|s<|IXoftNXJ|9G^?ji=ZTYCdjg{cv(j-;0E>p#8M4I$ex( zkjxmXb>us?cqejcO!I?856rQ*G6ZvrVN%XGoopHn__y}IRF9I)7OSVZbx}|z%9EJw z^=^e(^qA&Tv|N_PTb~p6)Voy!>Gb9-+L=r^!ZwGR;^{340N5=5Q@-sapz|tCDg6yF zs4Maec#_fN1_*ICB2Vk&?YC$58-gba=!N7MgE^V|%A6w6XOAtxskhJOZSITEaI6N! zwRHArWV)UQPF^Mk)alC3W|IZC-&;Bft7ju9x9^xc78#ave{Q9n&?3KY_L%9(y5!BX zqGa#oD3{G1j6U8zI47Y`gH$-Tf>Cb|pId>&;$O_IXq}RfnmgNNP!KkI_Dp7-uJByS znL&B6*_B60HI&;MR*6Z-_eVaMR5>@{VgHE?W+R6zOk z@=_t=#t{VGy2kJsR|6&&@Vsk(@2Q~(UAPPVc3N{lzpJ6q*fo;KDIzbNx4!(CpcN6O zV9l~NMIbJH=a|CslZVAT&3LMRdsL!O;T6o1y#1VN@vY-x?0c%uKT)uKxS{GFY~Wl< zZylh7tghe_5kki|hJ~!YK5bcBPy}j2gDy_jv7D5mXP4-E=B-ouM3BdzQ??x%+we}0 zQrBym8!tztSj+1Ok*s<0n9-Mam`49f>8nCZMBtR_(*62ZFe=ArD}b< z>coymRIh?V6I-f_6!dqv-0ZhdP+#xn(Z9Yr)4M=Q`rgji@^{bdU9 z9TbjgtakuQ{y{P2iJjFt3V^uZ=_5wouPv#m2}1EX`t~NYT*Mw57lpnJRea|ZUf%0J z^k}0(l2^le-GeWK&E%@Z6&g2uJo&$dwQ}yVp~(sOAbG&~~vH$^;SD?xF7golxbPKzy=bFdO};@J z>o9_l1*}t?w$!_I4U8kLiI;v5%!rE+P+0fwH$rx0fH*-KNSl87IoM6l3zZ@3Q2%?d z>L;QEn=w-Lv~7`ql&kdjL$9)@(jNh(^lt;sd8VH)5qZoWEk87a?W+A=5Y=~){b!-q zsgfAlC0u40P{xIl;<1&TmoScTGVCOtCgC_5U}!0MTi4#{N@7@-XqjmMmg~y|(}Evo z^i9s+PneLi(jm8p4!VzU^dXm^e-Kbh79o7R)x6x=9eFj8s)VzrvyXCoFN6tgIE7R-P-_XnDSG%%J^N(tOkKvHrvBK?XmNQ9*M{k* zMD4D$uM)z9eoBZ(*$UKJ9!}Z)PL`uhA5seqzetcqp)uqTR9ud=+|W!)p{WOU1$wPK zr|bS{%hBc!XsU?QKW&bjvwVutffJ%FZKK@r zgPF`|a=`A;g{|Dqm#Xih-}YmocQ$Flfij7j*6H?-L?K^$aZVBQ{YG_`!4gc5imCE1!zFJ)-1q370;*rq17(dQ!B_ zz3zGZBLj8CqG+GnavRqo_H3RyEjFBB)}&GWogG$n4_bc|B0H=m-d|W+Eg86+EbF1B zA}zPIH62+K2bZyL#9eVY@}_xJjt;k#5$wb^>a}xIOVVF3^%%pQ~Gz-^TelXY9VV{kgJ}#NKAS1aAeM z`VgbmH8KoX_DF0C#`&EkSCwDrIVs_OtaOZ%xx!lE>C6$M=XkINbF0N*;$94MY8eN( zJv=JG8+@r@3O4rC0Dt(YH~{9BolS8Z3PAI|IIm)znnE z;&=WTM@EKAs;T}NXL&4T33$^YtSz(CqReO{^eJ~xy5S24m4*cpBYh+*rRRc6<)=Vr zG9__ZG;7yibw#(zP;s`s`asposM;_G3T9m3LGrzGEpdfA*+lQGtUJeehwa4s8|xk& z?C{%q2s-@$UG_mtA~@xcCoV(V;gCLvM5?t4GtS zavH6}000*~uvFrph~@G(G>?O)Oar6#@4SPlwVfzsZ(vUjR7?jloetM2xD?><@@d7#r<^@^WP;Z+;=p%+h8 z!J?ju%Pj*=jr>unPv!ly$e+sl^-e3%t9EgYrY?@N5h>2m`g;+fxVp7CU$yO<4Z|c@NPC4EoYT2o94LH)Ig&34d(72+Yu2OhXL{cy`x@nnG z^Qr)ilAX<35!>B0jME%*5Gq`URk%D@%GR@#eJB<#o?9fZt`WYvMs0S_yq%Ui0}3a2 zR0uzcA|+SUx?JhpWZ7A`lV>h^H`4&aq`IF(UPuG>PhQYqS~%K=c6POL>rHjsxO-ou zHeRga_W)yC3X6T`*&|o@Gd&D}Iu_xp!x6!s3MqZnPxz{z8keEU>=MILwuz;zzgW0* zZuw$omr3WQwL{g~UESfqi(2ftIrEc3NGX^+ z1iqk;eei5*A6~{W4sLBNqB6#1gxgb~Ul6ntVR$R{uC*@zM=kgPf4%HejU{4NTZI~-qndFS~)v8iVwP#n=LOQzPl+RR^ zr24b>)#njnlX~wq)hLgdcaYvEW{YKzYQQYy^32zjoPmWuqjyjWLXyLaQb#<;!6U{r zZM9#%GIkaxAW9OmT}jvZkUcu-lDZ_|*$iF(S*|R64;&k)X{-41?Z(=AoIWzTK2d7J zWt(m@y?5$%J&D?i*r#LW?vG-Udf)b=_kvkYHzi7K&S!O;_L%ffIVWEBC?%i=ELD9{ zZ(@IH(rl@w6SJi$BZIRQGpXl7b;!u;(uyYCQgp=|6<~TnU@aSy!!2U?QmVjO4rx`{ zSECzevsjzdOX;s4icdnmEFkzN_1^Ap<($ngPSe(KV$^@O4&#a0yD8+j*$StcTLp9! zIOkBNDFsi%S*rW^0@Nn+t0sQSCk&@)5QlR}5xwU{>m7CX(a5pwyT|Bt52)iiZ;T8F z1zMhTHP{p0d#n+#w>2YL0B2x%m*chba=kUWO)lS8!6Jo=Y>3BSi)@=zCVEG|#Zv58 z^~qCMiVeEQnynTCBn;s6HC%-A!wI>jl<_(_a`8B^Sd9(fDOs*9%T|IvJwtP$Mf2OJ zMkqcTcu_7+J1v{9Cu$UEQ3|HL;ceuP?}Rm2Oqm2)Oc{e8(?E-L3PDKc{Qe7U+5NBi zZK@TuyC0R`MxIZ}-tK$e_7Yom?+Lc-oq8mF?UZbOFvS^6@!{ubrM*{&NuGxly?>0qNZ)9>&Y6l!usleUloqP{c%7&&R$dBk}SOMZ&y*jLdoouzGXA`!8 zU{cjtQ>7#*h+W?rMt7AzG#r6ryNI>&Y^u2Z0jUjO0hyQ4?dy`YCbUIf>NTxPredR` z=q?|In_bQKX6Q8qB(rB24$U}NM&SaI$6HhF-S=j&Rh_Y{zZj5wt}<2AS1NIT=2nQ_572tnscILh8#)m7NvHxM-Q0w$U&>)bJ^rtsi(+YRPgP;WNHcrRKum z?%qv0!&W7;|C36%4AaZSH7o_DEKAM^^nzJ(>7+OLBrE1_)B#UVVzZqSs+jrpCg!Wn zlILG+f+g+xqNHW`>AG#|QJ2FV8wfxx={mQe<;jeTe-!InrEtdCFNzXsXqoD`_m5I0 zl>i$Jg;;bZOE{fv1%n1-Q`%JhN-Abn69e@t8JtYYDqCzx`B-i_fb6J(Qls=g?CT)) zGRg196v>{&83aqditN~XPx2N2)oa?aU&NgZX-?O)|BQ>5m=GD#{*0TsF0f(UeN5pc zY3R;o^|05(wP3Yp;9NB|thIKJ3N9FBLI(vYR@j;67GN?uykDbxAq5=-z3DcGh* z32+*a>0D^TV~XmKW+XZlzL*G%%G~dLBlgdNG@tM- zvvO{Im_r~41B=Z4F?;r_AIT1TQql!;8{r!&07hkj649yn3Emptqe8s-UW>3Y+=5z2 z&;Har*@>{Sb#-n)U=>|?kwpGk^dHMUCLllNi*irKQxTbc@Ws>f&-SvgqJ3`hDc3Gd z7!8{=Sb!nKj-wZW^PiPIDpd1B+xk<^{7V$?$&iiAj#eXNEil* zpa=cgn=RJL_q!F4_;iIQ6HxOKfH@7!@GXi(|EXzyQ!xu)L}rb<{PwxLk+iaS006qi z7hCdCp;N<3-#4&8?{oYqGFNrlNoXhHV#{Xzk%B9j2Tl>kYY9lXv}WXDcPW9ff1_oW z(QqIzhX8B)1$MpARr62FZl*RfBD*rAl|Z+@(KFXtEf_rstate0cjJE} zTtT2?tf#290jTp`Y}rPbAGJ1UU>+o(xg&>AE40MTq~-6F4G2l1GN#K4S4hfN-nKMC zdh)LjC{{dOe5jYIps2uqSF`yEzxfu6qgz)wR3GPkdhEPzRjKNW!9;C;-~{K&RcF|I z&U#&7d6~M;|Ln>=zk9?k>yk3X(<;#>f}R>x&d3nzyEg2&JSkEyuWzDLE}oqrmG6Wd zC_$hi^;`*26=<9zVQVeztz%?ktHsTk4IMJin8&&{Z-pzAqrhzwj{LlWBXg_kx5B|) z5tJ}X()!)-=bcOU%Fjg#k@jaQ5-OQ{YuA2CC;}4~2sTCY0-6#6g7Fwy#4prGkp1-D0N`WJzeG5s+KZMJ`^b z;s1TwJcTK;!PWA0NMdOlsjx+?+bpLA>i3MFl#Qe}Af>T1cAnP%Kx3w+-1~#9qx$H+ zGa-($i>fgT>I#pTF$RK~cv0I(R zD`V-jo<4vN*8E@CLZuQO1GvE_Rr|7mw=9cp@0`K&1632CeOw*j)K2#txV@+$j#-Xh z;;WFkx55q3pXhbQqg^b41+JCL1%i3E(s0} zf98iwrBFOcKMe0HXOu(8+1GB7gpF10%F3W{HJ(8Sok7>8*Y}x7W#<)SP$Hit%kw46 z$AgDdncFzKU7nQE)p1ih=cWc88d1_cMrj$e%>h#f;6Jfknv^mq=JT7r$&B9D$#TT? zwU;`&0O-Pv4c7LdD2+S-9fNr7qkfjSa<9BW3E$J{n;X$DDUtg+YnL9Gxi%o*pYKGn zb#$P)I+ET!Q*m_EbLv8NIM8hja=-!KT%;R@-`D&!YokIz;7EOEBZ)c1_;V>MJFXXbd>KPC2Efn?M1d8FOf ziZfzANs>jGpz)lj_-nPY@~?CnKqz<88MFg$W`gv=}XLUny@qwhjN36fEnJUFly`Z273 zRjTvYuUd7^crt-ET0j%nu5L2Ozq7o5)vybzlRR~JNC+IQ%Ao#3!UGse2NK!y0&v5> zp)viFzUHTE{I%VH8XVl?-fxIRkjX$U6WG`PP2cv@@@6Zs0AWXiY#}6F6z3F8CCC*l zPUkeggUgPd*Aa6E=hhZD4FD8cE7@@V(TkzZ3rS?;Cz)b~U_uyx?4k7E0VY-U$y1i% zMrWMy$mwoy)c21rUEgh98eEISWR(0!r ze;+x(s-Vag(f^v4_r_D-{@<&$MMY7@v6o_vnYW%~-SP33mx97bj@OIlrCf*>a``SI`lCl{q4?7k#4O*FF+i5zgJ&!e{3g~;dw!C#nHh-js=_|<4P!b4>| zX6D0;=l7a$aSCII_(}^t7bcsOua2k)$ph|EQ)I8wi@sEy#gY4!c736Se-r>~gBi!5 zCo(}rn7j*Uz`{U{9A~I?!`~l}2V_g_;P@gT48I<7d2Xi9xT=;IwPA=DxcqtMy(#WS zI(8E2Jc4tUqo*qY_!c0a4ojisrj(JKCfpk7=n24P1elbsrJY`<2BF3)ByMm@uY+8zX?7+0a$+s7p`0Se>00P%qj%^=OrZf^K>^WAA@pg;XzVx9R2R@n|5go8H1#x#(V_`87O? zFQXUrA%}L58vi4eK~rA31O3pz_?$$z74X7HWRg|j}tWpr4r<=z%kq6hHnQKq_K1PBqbyrl-Hg={Dxb}!E)3yRnW?YdM!JwG5uM@F} zDCalL^F^}UYcH5VHUaaZ4NL2m$t{S^MVM*@=gR2QyM*W;Dm-<9bN7ON12Ag8KkLto z!cqtO@`t7XIOYuvnTbUf^r4+c2$+$zi|evzUf>2EyxRzIFC?`U02uOh>aTI8nj*e+ zrbbVM;D|`VOolQZIePOK3I4{f>4@%eujO;=Le>K@ zk$}DX#l?5hST5jV+{RCm5^^hK0>#EK_Wc?kSnC2#>#Zr2UYP6j6a@=|&)&5z7T7PJ zQOrGo_`<82i?z|8_J=znXr#-is$b(g&RD=v9^4~85rn=<1<*M9GFGWX;TWiu)+|J;I~+_BUPgI%>Dxm_W#dV1vEN

    IKdqkgwSuyml!scYs_zIETYdKSAW^71uf7g zF#&y<9X$Z;t;er%D;`@wXWfFSuh9Szo?A)Nf_2RG42!Nnj~8gi!x(}T;5_aak`1&3 z{UUef*N@M@3lHc+pO>0Q{cbITRaOnmkBY0v&L@w>j_@2VK!`>14S=0#$$-Z zzs4u8w!pJHy~#%s1w$evoa??{^VDPD+rAg<8qlO(k~|3ajth4|YCtpDPOzgqP3GufrV)Jjr8uV69pmp#o|$b15N3TE!Z#w$ScnPT}x z=CeT4A_^Umy$C^DAPRw!?U{63gh#WpS8>w%TH4s&T3VvqJ3I7bU4>5j#^Da~JNEXi z%@OSSDWs(r2)cFi*Hzj9E|1okh9USdWrsLhK(vea0wT*Ot0yQhs zwN*$@uY@2!O~+vEtPAj|jqZfrAx-O3Zb^f!nz#fCPdzEg{pe&&B1|J+d-6=Z`t0zR zW8)E5kG}@HKUyVm5Z&Ua)>?6hXwuO}QW^qfXPhH9b{Ce_HV97r6aif;&puD}43Fjv zZoU82oX6We?(G%w1MMN~ln%ymrbYE@t*upcndhW9Yo!%T^~TKvYw7jU5lrYs_l7PY zQJvha?$k`u?WI%YfkmEX88PvV^OeUiTc0S@PMg8Non~f!=$k~rQ9tjxtogZQ_CKI<9&57&c=-`$I|O6+JNbm zi$1e#fku??=SZ1u&c!An$1c#L)#u+6|8Ls^-}nmUN^Q`SgVEqn04@J=(Os{{7V!4! z(fT9kRK5;(P^8?YMW4_%-(z27gC2X4+1>-6$p*(8i~0EDd!39AdM38-d@r3{eeq|P zeXF5U4{;NU*clS2pksxLK6m_ElSlaV$d6cekafXpZvEl^#3E+WcxX@5fdNcbB`pQL z_*y!DGO$55dP*HOwF9i7|9_-2kxKfM39t#L{*ykY0!K{Nr&7WCwR?~e^1_Sy3}gWn z-Bdw~6mtCtfEPj%)8fyt{#HqIo$)c5xX}^EJ`DZiu|-$X`O|?pgQ;X3bt-oTgUln9 zYsin~{B%z$S8S*6Xq;o+e>IL;?WjVcX+1~8O9DeaCIAWVf&d;@<||JYHqsL)@w(J_ z{S@pKl6E7#nbN06MdjD~dSy)^ zt^BcSY(9w_=|UdsAQck;L}tpEX~Ega*u=)ff+LeI^_-fUhyq7keVK6=i!*<`+F@Eu z3d74hQz6~LBD&AxaJGa%TjQL*z>t|&RQTvv1$V6+I56DTKAZS=!MU#^QK~a zI|0D?m5n~}8O)X3!#&N{hg|oIXM#+8ngsLpTnyVX8#px`?%=rQBN}~$-nY<1nnj!q zaddW0%$HMg=1PMm$`EGIV8_r?I3v7RlX6g~s&D25OMGr_?z7+W~jSq{0M zM0O?AOOYmXnb1Yfv}fRi)|U%7W2Q*$SAy_s{FW`>`e+@oa2lQrdktI-g#Qb-!{43~HTCB- z@jprH8fT{uyY3O9-ce5^l^dVlEG z$XtkUR9YJ&j&v6b%SO_Af00vffoDj1^t>{dqzzE22+q{|1rw+j(%<_%1%t~8?!-VU zvLox)`1BUC*8CLL?lSl3JYWQ4)&6U|)89;s7d(sifH_rIb7upj$^WiZ-)ZCjkGL;^ zYvS7e|G(#JdDT|5wxvFWRH>zXRO4DimQ>MVp9@-RsZSxbXld)yD4+onGPN$CRH(Iz z8%eDdtP4@8MF?byqESJjB1V>E*kcGJgpf>@nYsTP6kLdkn(+G!#>t(@oVoX&d+xbs z`Q8CEj?62i8jaIGcc5*TbL@T}PE2ON0|_Oal7i8GD~u7_Kr!5$<8-jss|$Bo2Vmq` zztn1gU+B9Q)^Iv1Xh_E^!5S=YEnI*1iJ$C?T&eZC1miSNt)3ut$&;DbXRKV7zFVVa zr>g=@zs*Y1f|{3F_}-uoUmKqw;{HCQto3@m)>PvzNsG>?vPEL8`!X-xW(c#TTz3{c zF19D5XH4e`7yut`Ij)x?7NEw#MhC|R*`Zh!&TdR$qpdnmTwC4J2L>BNb3iI?y-03J zCL9~Z0@EF#9s0qeYD=R+mko@=;BY9=QCi1_1CEvd(bJ}ArIW3k@EFzgm1$$z*$EEL zuKR|jMsKS_c^wx)X)+P!;Mly%9yWc^g(##h zl}1%=2Vp*rPsr^_kkjrN>S3WmsY}~|Jjd}Adj@k(0JU@`rvbd}aLdrXo+0sb-^UA4 zlQML;nPKh|cEKrAFk&Wf5a4DOIoP;oN1APG3{=-9f|iRwF|03!UqB<}P1d<6kOq*@ zC)}dP2tCWU9ogC!W8G_))sM!j*QXMK_%g?%3-r(@aFZ|9AymXRAlM8l%farZp0YD6 zA{T9U(Sie>z?w=Rt(Esx(HJmBGwQ}o>#=%M>9~^tGm|4L-sEg4f9LdG#s5lhw||Gf zIC@;{u$iwP`t$3*KB50(%gEEaMo#_q_ul{iA)B~Sx z`fkRz?+sm;|MC(}dNxBjJ`UICA3RSLaI}%F1~X%~rXSQW*-*pec$_JXVG>04tWXcX z_3~)Utcjk;X)MT8m%nf#Ev4K#m$VwtHO-9Jyuez`j!f!3QY)~y3bJTx@PnDuH>4zl z^vW71_m(c<98b$4PBu$F6?~fTUqjjvbRn7EO#2l4X8EC+xlno}Fw>IXoc!+}O#MIN zzTheTelYD9dB2ai5KZY#-QPR|zbH!N@Z-x64?P;C)2F^pgMdq)asS%t`nj(5-`?WO zF+f=q!^Rh7YFTNeQ^v_lJuIz~RSceQWS2_WrC~0;Q}A>S*Pdb8>vlFO%rvmJaW|;l ztYpnl#Ip?*k1y!g=f`38xr*oQiL*1d&;b|FmI8-7>`NcA`3z zE5!tWM05ricIjAmvYmW7Xbnk6DHY<^1b*5FV`-l&p1$X=dnUMXiWBJZ9lOCSdb`Bw zIRrUJ-^UdK>q!vM1Wpa>i|UDpUEa*RdP%AoOHeyJvF732y>*3AXlp1l7L0>i90xj_ zJMG9%-{J!8D^jaIf}*2weUJr`BWsP;`Zs~KHnZ8&%KyjTZ>M(9VD^0u@Ad)-fl?Rx zV)%u({dJDf-VvE6LOOA29N@6{eUS^< z(r!iCcLQ&Fy4-k3@8lV&^~GJ*VyIAiL#>nTZ(YHJ4LgjW7=D~fdg&N<4Wm=rJFfiN z*yi4)?FD60OG%t>(K5o2zvQ$j2F5XPZ2>Tr83wblHO<)XV9x?@dr}76C#`Y?8e@8) zT(nTTFd!>l(A@8c>kOAhsF|2kVB<)tnFj2Eeqw|ha+4d z_VPKlG#ZV-4*_7C4<8JDq7Uu?Q+w}h%l1-NM6IQQSQ*_z4>FQ%VNH(r@Yu;AVQ*_x z7-Z}OsJ|r0q{!p*Dnyk3GiB6d+i^cIjZI2TT$3mqDFNj^0_S81b-P5nptRg~S@{f8 z8goh$*qaPz!-rC#98q8|8wy%PtUP@=5>o`*fI0pJxc!t1C3+>%Cy! zq#kuyWdmn$IMLl2ds9GYHB~(fKcXj@^6^lObY$D^Vze82JYPrmedb$oLF z0mZ9+_+iyQt`!W@j;h%9^VX!>AN?`&r&Sy0CCyxRZ2tUd2i18zzf?@%hv}&$iT#vI zgzE2cU!^W#Y2F6azzo0LnlBu3QW@=1?EXIcM0H_Q_ldG73TX<$qFO*pp3MV1n>|)u z7~|sTlVFbKi`)&319$m-e(!{wzlU8liM0lUKXmmDJHZ+L5wXY+*8v>fwi<(}VWFT~b+Q-w{ zf|(u4WOrVnbkc0R-YdhpFZy%;AJ*xLf zFU?8M5*lx>n5!&HHKt&uo5x!gkJfNLXwHt!DO{GP8mJ%4SdfhZ}pjCBNaqx^PWEW<3aJ<^PAn-2y1T( z;TeAfI1_caW!VnFU5Wh3O~BMg%t9lwLujPZb&04i>SkOlFc$@ZwHJZBZ$t~h&;}S$ zP}4Zer=a!nbBu>|uRu`Dq8LPUbT(ePm>w2rEqSTM<8`HA|Bo#KepYDzFH&QS!nsOx z9ks8_%nFgA_-!{B78yfjmYHW|s?pdE?@WDYI@~s#!l5^`t{6s1!p)---+;9N65 zhzhB0qfjnyZTunC!i=if!Vd~Abo{qWo*~<#87E(nhe6Evh$7{iI^U1DDUUrh!_4w! zc>-`KZSHKmP&B4hWtJDG8H-}@>jwoyiT6NS%4{}Vhm4a4bpD->!HZ(t%H%`J!e+Bi zE63~-eXjX3H@UI* z@1)=xW~^0+bO>C{pv~Y+^4&GQ@5H*kiebu5B#?%Y;5=+5*hb^z4nHa9Kiuf>6`)By zD>cD@z`0RbX+@ny`+Q6&=fMu|tiFP1lYqJu$e7^`TEiB{cXlWDd@Fshvu)ikPg|rJ z2H+keaD8-R5}Z`}l-V-Iv^B(; zD^m{5-;h1?UC;4JzigiohKYRs?)&LS-%n-zwrJ1ZJ&o69A3yfP^k0j9n|@g_apJFU z_y70z|N6&guT6RP@c(|i`peX*Z%#})aeI+eVU0HW?f@3K)T8Bm9{;qt^>iS<$pL10 zdl?Tn3}X#98}YDqq_!VqCnw;<*h>})ATS!Iwk(`@A&p>m{AM$HIf3-Uxcmc)6O04k zmQu4QY^ifn9?I+>S;3uqNDd>G1GMKmu>iWPm=3J5y*x&hK)2Zks7C>9z5vC&9N)Zi z?POzVPFAz5wD9P&`)= z*Wfw_`O-3>Ot6nS+ab$v-ACQ*z%!8XWVUKK4LK);qSQ=k0iyE)-&%aikliQhg75rM zS}NvoP)cv=u7rKWO;b_Qohp80zzu`CDm@Wa!6UxI&BMA8f`(>P?X+bNEzb+v16S*z zw(KEWLC?dEZ9()tULi0K1MEwHLpuY8INv(NZ*LWlww#PnAk_a7aCDqwk3cIyW1w~c z-|C%4pi;6khv(R)2iMW&aS;!iIe07GA8dyghd%iIzHfHI`XQv}QKoKtm6aysp1niz zSz;(3^_!l7_QvC&EjWi{Vh982XO*=U7uqVNQ)?!q5 zlo?e8+WUpr5EvbMJiINNCc8R~cit=E_D{ey(3W@a*u$OyrIA;cNorl_X4JC9;T9=7 z94a>H!*y+=fJCEAwIe5bN{-%_*q1S7=jn_U3(8Pj1a3E+-Rnx3D zW!#3JfSOkA@Bwc}fc}t*{*EL1QNYJP?it(DdP4#VI(U!Ry7-|jh;0a8=TFP_NJ@02O!f4}9Irn;s! zuh@@L@ziFu{)KQdLv3EXA0^{?*9_*c@C22Ch*E}zONDuo7?y_!>VLU$>8fouulN7r zlU0$kSrZD*b<8cJ@8Okqc$8UZqbn`ny>$QnKs-Ygdiw+5BZu2(7H(yos2g_7^rE-8 z`}FR;`$RvO#*~q8PjvEBWI#+76N^?Ju)!uB2u5_ig4O2L#W7GVgnM}{*`vuF4^e>l z-nK2hI!_<5!wzKE8-yhLn{K@q z!fB@QOh18;YAI$N(qqFihmoI+e{C0M2^vH67`{t@Hh>+e7zljg)?fY<6ax2csrGbl zm}<0#IHkW4$!%GV>e7%km%x>f{3n7f0cp8>Q|0%v<--}#C705^`PZv&e01>pUowi` zteX|U9I{}~Umw1G?Za%h-{&X3Hh=mbA5PD_!IfQNdq+;(lB>-)+A(c<;o=u`7lw^k z+BS03jKwQpqFi)o?jkGB4BbZ_yF#_Xq=m?5-`cOI5r(X?0)4%Nz!J9i-Kx1HO3*m&1U7TlkRQ7^;R zlmJf|#CYfBKseLkcP6^9 zb1`VtS9z{2BQmTThm?`Jp)LH^lpy_D3w>^CqPNf1F|^EmQf2UDEGiI-=Mk?+JxZ05 zDHt!1K@q0u(m*qpTB*c*1==$Z!&7?3k{cfAUp28zKbt;Q{!RQz)u;@{xPr4C|A8ja z@QA$Pm>ktM829vABZ#43&{Q)bzq+8lfIT-Y0r<`ht)SqX}9K#JLL6&-v$1bYwD z_}#=tu@{6zIO_xm^Pa)7Fyrk#fmK~*ML<-a1a~ghP*@sV1;`wa`p~oY)@^DG1ViXk z%mPHT?imehkB& z%yuB_8Ts|wB!m|2li2Yv7O>2M(o8k751dP3OLId=E4#q78>9*QLcXk1=di4QWryGh zAZj(VX7aaw-$^9s2Mc-kee#`(CmXn@BM1?x9`l` zU$A9AHE7y3+WYue_hLP{5e;o4d z2datR%+2`V#y@sU|2ipYPm|C)#Xynqov~lv{ z%4m8-ZraJ}VxN=M?BREr5O)C#j#Sd+;AFj7Rc{!Y8p!cSs?CfPWyo-$p#64aic&fS(Zo{33uUBMjad&_ zfu!SwvS_z5)u^(t4Ei{EWISKRD+}H2F*f12YDNZYY(n-+o`L6+LdMlC_`&qrV^7Og z{9xMOCK??w%_X26^C}Dyq~ipQ4!l%dM+(`SJig7Ez!DVx$cWJdR|+Q627m} z&77!Ow+zlg?lxz;qmG{Db5VUma|kG!fJ9vcD{~YM_sl=+#ey3ZM4;fZ4-DiJ3Ho55 z!#4Hd`|Gv_QK<^9<9AE%*`U^6-561Z@bKXS-E!xcNr1{n+j2&D1^0S&;- zN7IQQxM)^ zSnYV=P&;0EjSH`)HWEf~H_o6G&d1g)jY5dVRR7f%AwHJlJFn+>5GgMmbyZk*Vo<=y z`-EL`s5YFs0Hbvszxk0J&2w2U-P#Z=wF*GEKkivf zTD<9jxIimf-Uka6PV6Wemr5RJM!`r#>wIv{$Xqs27oa3T$dW0!^=VmfV-E)?FFxbs zxW^uiHLoxRZQ}2kl_~W7-UgHDt(I4x11{`;+2iK^}O=A8XZ#2=LEEF6!7dL5Bi zip2N>ozC(`Dy7nKxd-!W4zVVq0I*0aLJ?J|QpUP;6+b+eDqv1YNL8&V81EjroXFP=g-(Glc zijZTvruEe#W>J;KIY>)AAb{jBbI||-&6|TL+G>E?t*ah;cuRD1w&9^W-)wlO;C>6g zy*vPjJ;pTUA|g03ZOEwx4{xz5_1?)sKvoUiJE;jrKFlIw)U%6alpKDZd zKvcj+&a;IcIlDAwNXPlb;D|6$g8JNw6=Oif~$s z-{Sjyeh=8{F4Psw)}1BLr?|OWz=2s_GJorr5D@p-ptY3$&ajF-%Mw<5MCM5oDlZ)> z8j-rYsBbo7fQ?CyS(cYx-SOwJtblw772j#n49=+9 zZc8WXVdJy|vAqm}r>>SH!afuob^NyJc0jMQa@8RW%eF)ckTZbX!A2Q772MP)zReDg zHvNr#Ps&Wt5TI$0l1 zcR5ilLXDGHz8&D4o5SrScDfKkj#Z*(jG2&WBwi2;(gDlR`=8OX6OBL9^0XJ!aALXG zM?Aw*R>+Zcw?VLQufr`fc98Xd#~JZfPv+XMt&?b+>rRI*-`ps!S)V9HD6qrfxYzdi zWfv3GbAe1E80&EVza1#?G8R?OLF%qTQ%MH~b6V}ESUg+lS3SdhLO<6WMZf@84-1fn zUg?YR@I#J&e3cBb?15smcn3tDb#Mk>x3Ajg?iv2ND@vSBq!_ko*0D$Sg8@x8I6%+h zghDUI8VY9ynm6_Zhh}l8eoXH90|3NdLts*UZv=mD@3A*QEX@^~H1q=9Re*@T?TZ#w zYvViCGTK)vsrm&Wju&Y?XCyj8au5?7f&2PGeqM|ctdXS#YOew*)WUy!BFnTwm5=f) zBR@=?AQ$>Y=B2t9YI5rc)N?O+-5j^htjd^`*l{C*oM>1pu~_QOJF|F(lYtA7D<^qI z9XIPJw)zD1=@=-sG7)stK7>= z`J1Jo|GoerE8r&Gmyah@nB%OM%mzP2hf!a*Q&P7uEjfoHaP2 z$sK@^6;H9J*1oVwMk$`~v&TH~sV*sI$;2i$W~~SUK>x86WPyMF*UEY5jem94%h11Q zD;BQ?eo*_NW5DgT@OiPV+OY1%LTCQB``ig9(xq*e(uE*52+$JF>d^uH>F?U%i=Ld~ zkP>Z~5KzOQnz)VP&yVnrM*mA{M?85GMtZy&BxNYo(VTKoX`o9|U^{B(6C&gNSbbYD+g|Exr{p`^2 zsc%nv_t#&)8T$6jci$`eY}$X{KD|^iDCpf0|8Sr7iuI)zmIx3@V&D&-u2;U z8rF{*toU@l>*zh2bH%dO;L=rfa>*{WB!Mi7A{*Kb5=vE8Y?vSpJiUY=;*xt1OLC*- z521jW#k{qt5X2c}{~BXHE}IoDY`Hllc47E&+3mIKWi!H82pJuD)#~O6C?XrJ<$M!p zY`LlhCjy(1CPVnZJ+j{aiGGY@X)U8v0meh>rsS5qY*3D$Qm1Xi^X8o07v{0+>sYf3 zi?}{x*0}s7+?d>pW7^Tv3Sx2Oj^ZnZ?JMW*U#=HhYIYuSDIHVgH~HlLhQcjlrK4Wr zqwZFb%hoISoY(x3s!t2`Ibm=3OAl5F@_E*kp)X4H$Kh$ZAV0#oL!PbnXMG_SnB7WT z$1^VHZ;6|rulJ#vw}<@ilvW=OuDHrC6BG3Vo0Pkm%RI)SCHXtz-1I9-SmU){c|i~kL!5kFJgrLANu)C^(9`rL&k-S7cAv}87Luq^%M1RO+%YlyXoVZ#+X_D z((i}v35Y(Q|6|-Z{q+f<1=cxk|D!7Lb2xIv)xB1b_fy;}`u{c!+r#=woNgZ2{3Cl&py-gKAy(4y3LRJ@fwOcb~U$-R)A@ zU+*i4PEih*`tqawm9eF|2MSolO)F4qrHe8`SQ-adynkZ8;%KhYRH{p__mi+ww8QNd z@P&4s)#Kqk3ItbvVMLh^(qV_OG(bQ*dzZifuA6C0TUd?gFZO!v-?10O4-|Z_RR3N2 z0)K$NTkM#&B{jK!MXy)(ra<(SB_jgKQ!HcfI&1dOV|&o)EZ_^f=@dn8QNAi2#h>M$ z7CT0_q%QX{1%4;QZ6^`*%Ru8-YzlJ57+qMMsEEBq`zkg{Jd2xVx1gOH_SlEoA)D2< zq_$#`v5?7Y-YO`OC^V&D`X+6E>~*m>H`J8X7FH`d%eG%2mA%gQ_79Dc#sp|#jQCw7&tx-R#8bh7dd>1e*40{ThIa;^EVljd8Yi5OU^ zlh=vPvy-)NV57y0xjCj)b_*KKd5?MIBZ=z&{2yzTpCMF#5^cU}MMsPMxNMWAO1%7IdMzMp?@3Ig{PGC``=H-Kh+K`91Rk0;Xg8WR25 zM5Tu`fY0&AV>PZJf9bzd{!Kctg@x+3GxnyE(-gqHEue<;7yh00Z&*LE3)j`;VYi^h9DnD> z{rE2auCez$?Xd;fD~JuV24xh+DS6@46qB0Nbu81obdb5s49sj(h9|GKy$eUfsp z)RQ0V-@5{CYid?JH_({8PRXd_-1kJ2hc3Ww!9~5{F(mkH{eW#YF5)N;<^8?`TCL&RR(kVh5Re^ifWKUARV7{-euZklh=2XZP7 zB`QGrJ#yY$VOzmjygz3DB>$|wztr1b5Uu}fLh+S;nFHsp#{XKlhJK92)Og-nrW9a* z5NdRhcopL%zY?`~u_0Y7UXe>xHL7J~8EdqRZMB%9$n-`vn=C^<&(i7*WU+yfUcmW+ z{Hucbzt6!@Sx~quC!o%-TZY62m}TtYSBxLfw((3PI6 zxN2#u$o=M>|BR&fEnGg(3cq1&zZUDN#00GMgjVEkOvpJW)~>sSRu;2;T3Fguw>~22 zqvs=M{-=FwG+6I?oj`)V8D_{Vh(Hj|Nwau53BP&$O8v3TQuaY}$bDaj%tuDr3bq_( z47S}d{e~dPvV&pa@N>p9uH-36FQF3)>Q}*WOAAo1QCa3^aPf1~=Wy@nGTt?2G+pB_^ zh}my=@B83%(`)0mk9=v%RG;KQgMS~SOZ{Ntub;(u{_C?h_Nre@-djt%^mcr}fc{&5 z>i^TruML%tm~@cw_B2a+be0;QEF+Zc0;9gV9f)+P*dRzE(X_T+6~5G#1RG36Z{d>RAPgPz1bu%Xi@#B z#7ea8h#qw~CEMEuoa?HaZyid7@YFQd(^$ODNp+Jgk`4lI!P-GEJFVF&3XDBW`nr{Z z7aiGvU7di>Ru8SC6)}>K&_Td0UwuF_@HBGBN$m(b=MIYu)}hp-5TfCL5zf`lsTgFp zJM|g_(gHj7r_sJe6gw%0GGSL6x)`+aovnzf>0HW`j3W*6;A-8H=vbcbBFElfco~i} zS`j*oZ#a-sz2-1^G^>M^U>k)Fub=#jfFL-`Ty)yaAs8iOSt^2Ba}WhZchpGks+H}{ zv28ae*jRB8SjE-C9W^l=)y}hqG7^BB<3z_jg4%bwct0}ztorlr{E63`)A|{h^fT8P&KS|O8|c2{cbP-Z zC5x%s3*Z=|u7b$9)*Nx~_(Sxag%P*eBH%8Y2U>lWM5`J!6BNjiLT$h(qZgiDzz;cz z#>{lxAAq)-h$Gp`P(cAtraLMO;82QsJ)R!Gh&5XJNrY5eg+6t-09$P&E)*XI4Z(D9 zDs8TUJDU}dA()(z<6aixUUpE@p_g=|L|7UlEaefFZ9#c@k|t`MXZ2Y^Si$v6EDxk9 zCsox?(%~YB$=|p->Jk6iec?j zMb^ABL^=;q9%dXyqiUU;NFBkZR8(ay&Aq^N@vuM3fy1HQQ~W7UU$W;M08OAFyA4anLcl$+gaQXe%>U z#kEte`@^kVi{PyIbGR6kL93qh zMt82iqj%BS4)#_PQ-^9zMF)&9Pne*?o_6T5!@R*{JK$u)G)Az=8c0Xn>_j@jgcLQb z%)}YYSe^68K$Vzg(XtEL=2>%=Oa=qsz;NUtT}Hjtd1Sps(Sa#bY@KH#tbq!qBSnpC^Zmjm zkzo=D0&Y<4103IK^X|^o!9^e-gg7g5Jt9$ zKS!tkXS(-*{@-7oSoQnzj6bnkyO+=S$47(b4*vAhX~Baxuf0BX>EPP=^RANQh^g16 zPK~{Kp?{_4hL5MZ1WB#O;LE1_PIiG8&h$h@0@G#J)y20kAo z3iBao0EKyy#iZe4M771h}d#=1!${4 zO_gZFOE(aGTnG`Nm2+zsCFm9y~>7)P~%N40)O zbJELQk z>Xm3n9Aaw=#~l?Vv?AMq72pL#5V95l^|Anx>V;mJcI#>0qMObHh2@qf%Uq6~DWVJ^ zBFC#@U)@#3G@g{KK$W9dvxS@#Qs6u~SxLYpye*q9DxxYgt9z~a+t*immPSsvD~8!g zAYE!ck3qSS=Y=_sPRLtS4!DE{;ICSJ{8hc-gr{49?7O?d;6Nd)+X>n{({7>H$X+bX zo=#Wln!UX0K%Riwguw2x=pA31!*^ECj3lsvp;|6jyM^3mn^7FDFL$+?HHB$0fxIGW zvy0iWlE5~ayGLnuVB={Pl{KpcBi=%^EJxR;t2P{CYC#8vwQJLEVJ1)t4P=fo0Ni=b z|GLZo5j0-Q92DO~%PpcZG6i6o14ZZq4VO>^A`&iJ=_gV1H%f;u06yrl0?Z&7x&j)Z zgB{dCn=()*5)W+WvARyU$}lu^6dX;fTvsKt}n@jc{$xJy7TdjuPxUI!>i z)?wh8`l5kBjB}NX%p1J5XowiJ{ig+(EcuJaAj~WjR0356FrNm=YCT;V3M`dKO$%tM z1agBpRe2O}TY;ek=qr)ie`^M9L%=PL4@me7a6U_A9A2eOFAo-!XG@!XBMn<34f)xY z8`+kQ?09NXLEEuF<+1Rn&!FPh>Kn6~1NA_DkV}r#WKM+Ila(D{q8Lz*l#bX~1@%ZH z)FT5P{dLtpYhlRkwS%e5`5;&x*l|0HSrg1QFaN{u2AUXdRwHdCa5K=u2;1f@)^z^; zLP5oGDhXA{r|@#!@k*p8fmUt2ltVv>;AXu;{LgkgL^hAD%~6J&2ZTlsX-PK_4tK}h zb#HfhHWh6qfgD)199n~`GrYqt2I*Iw)l&Y%!ui%_c0kk?a6{>lq44t{6p1nSaz znIA`gvaclLn^W()zCHcd7Qys&SEnw)ynh}$?$oRO`?r5M{>20DzV~fw0fw7Pe(;j! zY1aO63yq||fs?seE_DJrsbGofS1NBYIo=5FbAvGtd`QB^bo5E;C8D3swTLkYR8#vo z44zb)9s#z{Z`q;`+S`v+haY zcPY>4S9%iMSVOrv+&+89YDy~t83?y&TXYK}!5hxDPkRjC`j5xE)H;`w(Cd%yQ}D(C z{7NuLv<`d9mVc7>sk>*yxBXD_CfEHDDE=9xak$Z^%i$|(jbkG%emv`NtJI%zqR+o| zdoaI!FUurK79^zlIo<-?<@6sj2)Lq}=Erm zIwPnwZtD&PFNHjw8tA-sTQ!pMVRG7rxV32KJ3fqIPnTz7bP zi=AL*?(UjaI=MHESMO_NS6{}+R~|15pZaQdWpaSDz%{{qUW>AMg%0nV?(vyWLGy2) z1J+2CaMn57spvlKgz)(LyQ9tiu0srEl&MU4ixyk$yb9R_4p1)u_;4#daNTqH{_Rad z-4jpNATWfl%SblUwDBd*tB!m+!OE{c>M=z^%}TWeP&-x-bccT|P6FkCxEaZhKyY8+ zCa>-$C0O11cLSsLPwV#L7~M<*UtVW%Kzob=q(>3tfV? zv|F~;%R|GnQ0?bfTrO2utUj8;MjE2XgA&W6G&K#~VhLf}^u`d@V5;~_EZ_6B3bs}#jr{4{@Ngc z=r*t{2S65L(-*&5^Y5dhVK5aRJc}%TZQ+C7cJsIXaGDZPj`8sAkOj z1~fs0AD{}Rkpm3c*PG#T0p4NzLbqLcmXmk%^dfW+m_~4h=on#!q>!w zM3Q%VyHY{+WABdu21z;?ZEwVZkelh7z7?gd9gb;Yvb}eHH2C<(%|qXq z`oas-CcO078@pz>yyBwyrT+V0ex1E95U{ z#^2;=rHZN@oG_rg9j3;Q8OCG*W!@XlogQ%4l>m)^Z|E4rWp*`13Ix15XIuAST*p4d zbj=5v+gpcdoNaDTG%@x4=((g-%g~#gZEg?PY+@Q1Qfl)oXshBnCj;hQuLag2R4Srv zrKB=Omd%#pjGU~yNqaEbqcD?8YQw(-i)`j8rxjD+nJR?ADMrp@a4F=KOP3bJdsADozLmzVz z)L9KsP&*+L_nya2SD-bYMUcW|=(f1N!%1mUAL#FLV@?tXLK=pw!cnq)hXtxUPwD#W zO}lp!3oQaaNy(J@SFJ*S+tSbp!>pS{*oh{z-B)Y=b5;v0cAB#V$hac#f`Dw&<`+>% z(+EMd3?x)8@DTq>WirMe218i$0SCsy?&1RN&ReL~7#EFu*KbH`KA<+&>WL1ud5=t) zm@W)d$McMF)M2$bB1@_i2*ow=lu1u~EYlC51(7}i>XuShb0sppT$x^;T-pr(4n-Q4 zM;cy_G%SoXoXWOTW?L>~$D0==6fa7!E=o`?O1~S=3d0(r?+b5z@>idj)rlr7W(MJk zHsms?JlKl)fCSfE{jVDa5HnrFFZ8h}8NRVrXu3v+fxr9UJO(vy$F9G#yD}Lw$;JucR=HMOL@kD4 zP7Y7@>Z*^2MU3a)-YK*+&1y*vbYiHi2ucc29vT?Gh0GDeI-K9Sg+bV0pcL09U@#1i z&0p<2I#B3@Q0sH3E2E59f^GVEK0bc<*WG;W5kv@dbA;xzvszHxSCulrhPRql`Jt4i904-nF}l4KTT^kq*PmT_PRcH86XrYxD%_ zTN#FCIQ99FHYL-RTH&~(o2Ao2sBJ8B(X19Emf_4m<_oT9(`hDv!I($~53W2M901-G zkjrUO<|`L~#&ZaG)kMn*#0 z`b;9*;ll^3|3Hsid|ihWc}^t+9c}$w75?#!L{5=)WzKKZtZ?EL00mwvjsh0d(7#o? z>k4+(8YY#*QEIiBC6uBJCYh){m!a32Uf z3IdMea-k+5_A}S?a+mb-3DV|srOk^X4g0e#yF0^SYmNoh9t)4Pg~Jv^->y+WWl=kP z${9A)AN>*sYM@Gqmmb)_dCX zIT%tv#?Bxl?sbTUncqf(Yn=*`fN5iAf=G#bGvgPkexQLi53EUiOr~6~lF}ZLWp^0d zm+a0PvOX4 zYsUQJb;EDphD?8LM(g^K3%x)4dFF^u-|xS6z}A^RzUq^-b*u5i|9I-yng6Q#&#&u- ztX#3;_ap8|1$z5YoG#v)7H>{xfpQnlp z6!Y0f%AhcNzwOeX*)ZbH7?Pk==?kwg(3{V#)`V;y{b1d?>objD>iVTpMsoyea9$4k zAdm?zdSmN!w-S#&PpjE$Gh5jmO??o=hO{#D`K@d&WlJS=?9r`qx&`Xq!`6CO7gCRU zoo6raVgP|6U7|oV$hw`V^K|s^w!BbqUCD^sO8(BVIviV|JHaS{xz4H=x5}k_7|k3& zq7N?Tp8s3-f^fJFZLx+&ZKax+3i)#nnn$XdFa~6s54VIZ_!1lyshu}nZZW~V$-U%( z=c$e`gVWRu(FPMrdNJDC-ZP@&@NV~|qXtj+u<SF;iy3wZ5Q@lT4|jaW9Ar?d;55DL~+8BWa#kNDOJA%ZWFCQuHIzt2DL?|(wK5Lgci$cT`9b9v@1K|zkg zGqSpsW(b-#ga?!q`I;3|Vo`JXwA;Y6D)48z|I=qSQ{1n3bi-- z6GZJbCY+vDjQOW~6rAD7*N~QEwZOMPT(^=*mB2wPvRKhL^(&GPvhI8c*}jH6>Lx?i z=`6Q&a-Z-e4Biq@dfuQ_OeJ%uno>HVze%HI`nYE@{N}QJ=Z1J>W~P*tNmT91q5ElsM}Ef#itEfXo1@R5QKNzrtO{>a{9`-3jPS9M710!#-x5>Wq! z(WADjjt9c)PE1Mnq-Yj%4qpp6N;&D|ESRvjC>pQL&13R;DobQ>PO3=uo=(6$2ogG- zzypkY7Mw{m>c`h?#+E1fWZufNd&fP00nAmb(~&Lj8Sy1*@QO1WfcN~3{dM4LR{XX1 zjLHt@cx_>J-kn4`mpY^|!4)Zg&xlNRQh!0_?o9203FeJ7QXqxAktzYs@oV0f+9uYG z!t{y-E!u!4Mm6SK#}(bQU&xV}^-Kl3Q?qp#*zdj9zQ-J5A-L|t;3)tCrvxXDXE{=D zTp^A^Vz!b3jmp_Og9?xnyu;mMaS#Y%w%vAvOCi}oXOX%$q6aWB!Tv8n&QTaX_B5OU zkY&}Z!-f^%GM%-W|5fQkNp#2Iai0#+$bTC$#q;G6wLi}*T6%rZ&YzOL`Ely^Zbz!>=BuFD~XP1ix>7)AQ?pjyQ1QdfBq&yDIbWKs;Wq zEZKokOIB!K;Rv;r$)qSthI63p%RoB}ll)wo8S}t;i|Y;K(M7vUU@}`j9W4p?YI#V8=1gzZo@`hVo2_KG@nhwEPSPZw@UlLo3Q)aONP? zUh4WJ@~=sxVTEOwtRqLL(uS3#E-7Q2$yiZVc;&RJrl}G}7Ob3dCiesP>LvRIuF8VR zUb2i0`yO){pW}ib29er%U>HW!9MbTwrsY+~vr{dcwz@=2*KshFeHi6HPYV{%to48) z_3+XLlPI{;^%G#KWDz%lJ>&r3GBM~0M)Z6o-SPM#0c5*1(0JC1z8rL{a6C@tgf35T za1tm?BNKyh0P4#fonn&vO>tKSkY*52CNwNSnm;izW6SO1%wC=U>?Xi&;Kx)G)=>yL zF3hR`${mib&{VQJF~b{zO(8WH$cBVuL!3w`q6kQMQZ{2RFrdAM&3y_!yaUKGgTRdL zKH9vWNjIV6Yje+aiq;PZ?6`;!0tuX99es4?OHdavt}Yl3oc0knHe)fB`HmVH3?a0#S-iIE z8h%aMx?DkJKr^<%jX|g~X$kp3q$n5~8KC|M|KL_O9&pBkN@b_@=AEtxXjidWLK(bZ z6Q8TMAO}Mdc9;TnRp%N1=6y)4(s9nG6){FrLv_+E$b7=PjyVLGM=Y+x1|u_x`8wKG z@HydC$8bZY5r<9VboF&!MIl?kT;gX_S)DWqEFy$;#dY)~^xbf5B1D{8*0t3AU5XTA zWCMq80H=ikV3<<^*e`VjurHu-%w_=>6sK8G-6ZAHm~BDBz$ckPm$z)eBW-cu5ZdI< zjv^i-C?BFlNbQ3%GQnWRoDfrfA2q1i(x^r^@$FB5lvnO_YH*?vHy%XVKLJXVg(A&T5`qq2bkNmi=q~sKiMah@qd)5za%8P7jvL=MdUVaqP(LHFS z5N=tJK<7m(fLr1G?AJE{P_OFH_6SCMXr=`*y4wv>B+EK+wIDnaOq@T>!A$!yp=)?tpHx!+ZXIF}a+S+T25yAPCbV8U z2h8h!04M>`ruIONfU;Fp(4F2F08qn_j>63S%^=RUX_s><*x7Ut9u0QmTa?z^(x z1dz@|WLs~!$2s9(I}IFPKnm6zrJOf5=7HTMonxb)PVns-a(nPx10d8gO`i6YEvn>M zm`6}G4+KQs0N?NHXTYNI(`qSKxd&(dq-CdXAw^Qz(c1R3HmXo>AtiZwOFyOBB{dW@ zWEMQ>rU4p0cvkz7EPfGO8KgDnlmW7e!Vh`)qUmoY{; z7_f>Ym}u---8ez~Z(i=I38@`FdnRbM^Vj?q>7l9!w*2H7pqb{7+E*d}%^6_#=}ksxS}ZW|sv;bz*NJRzDhIHvV7{*}$qH02hSc zx(|TsUaWjK{zyS{BGobp3cOk!0pe+f7j?nsX+v0B8J^;gxgQcQ=+cUEl31@}?@)QB zfx4XY*bszC1nE+X7=tk{F>^MAIS`(A-Gb1mgC=R6lW}Hl^RQ2f4O_P_y2kO z7Puy^wEb`YZcDdTLH)saidVxB#zaTQnBq!(0 zd(L_1dEfVW_+0rCiU~(s&Ve8 zbeBmv{W{tbV(vpi>Z+ugrSz0OR}=6JMdEe)rQEj`llyfvLbIpO6#JGj!9UKVz0;BZ zMjCQ2$gZypA@Y{c_BZu%;j=TPnBj&6fzt@Uh$~N?Q z;QES+@pza1NlxwcBwvNSAdp-u9s^d*OvcdtrJk`L=FH-;$C2w@6!Or_cZWIE%D$Uh zUq=njyGb91+q6c4dL79MBhan+al-t~vl1P{-K09C66I!FMO5oIz5Ix5uH2$ucmPd(;?6R_k&8oebFaMGIfm&I!*Y$%G6 zGFM97I9&s^qnxL21Kq>+JNS!?(EUs#Mt@dA-{6b=w$1zr0_lh+10+~P#FuOVqbF#c8 zi1HL~)^|z5JZWRKt*@Y!|H9=LfRJ^?b7K~docmB9kZf&j%&Gxj@>Y7+t>9CB5A0lx z;AXCPZq!x(%b8yc&YXwFf=m1_a3OOo>W;H=xx4i-D;Xn0$GkUuNcv$PL6-6+0av__ zf#?Q3*KJ9-{A5t!oSs5E7qEnNAu9&W70+n3!yVY5@{wM#wX~d>11_xdh-cRQ5QW`? zhpLx;N~3K%XCLd}HU^-!A;kuF5xpUb!~y;0{^iJ4@Wpw=A0a z+LOZ`7`3zboqdn~b^GYQHoce>@L0D}R5*`gI;)qKzV9n@6NsUP8@eLIX$a{anPISw3EtP2u zmCJJKUjS;}`z<_`46uBsU^+;v>%`A56-l$8HxYd!C>pnfam_nXp-41ad}d-m17X=F z!CQ7BZHY+yVg7_mNdx*kn`lm5z{wOMQUBbMubs+X4h(JEiRNq*Ssnp&NQ?7nc^e20@kK@4SH3Jf`Uddh0dd*ERb{}qg@8zK1 zXYgcYF-7Q_x1BATfRv#kF~0SdmJGL(&W>418cDADI9)}x#*Hp%La`cKeH!h`7Ky9O zzkX0JFfx=+>*{u*MA6od8zHp-pi)gF>BKY!Z`z5X%lc*>+55S8aG{I!gRF#ig63*Y zj`xh$_?*jOOk#@%mYHqMox!hFvKGf2y<>pIk!Z2ZD#fmw$XEq&ok^&+TgO@) z2TR<0Esp$U2e>VUeD|r^9M{H!p5lX^T?gaLKIU3obEa(?GI`sW4O?z=DBWiL9pJQ^0H@ub zxMj(;x&}DR37V1fGK*Hc%&Ht+Awf3g0o_;S`mD_PxaKO_o^MESS{`?5wnFuI{>yCS zL7x`Fd;nvs?gaGRcs|Le4M_~J6V}T(NZd1cmy7F#Z3X+wPYk|>aCe}+o%pqdu#yP< zxa?6Zgz{728M|)?^-Xr?**$t~LvpwqT{^-P3J&u8-LDJzs@mO&7f{>+ z4&#cvgddy{>VLkSQ!11jsO!ukG^f$j@EqY0Uq7o3LeYwQ?pq z4f5M^L>#s!>?EQzTJr={Me0Q4qngbG>)O_#gwtqHc8&1xwO@V`K%P0=b-B_(NQ4(Y zhLp?(-@~_Yc+LeP=T0=jw?_$O%l^;ti)^c1Cp21aCkh`4`-Q-CN4@3l@u&7;UFtN3 zTs;vNua$gN*!8!kKq z=Vv6*Y;=(w-)N9!0?L-}7aULI%j)4)y8v=yRH>clREaNr#BYnj{Lin_PuNunl!2|9 zfDCbqh0i|ruhF1;qG3Ez#nGyt}2<*KG2r;$CJYp}(y_S0`2=_Y{hFl0@-OcdH8GqN0$p`}@P5j~(s_CGLze zi&23Y;tD)lEso$(7PZ`9SfNwcVx1vnmT0MkQWy-YhC5ZYTE~vU74CwAaoqgExq zbg$mp9OkT>FJJw-ae8|2$jX#$)}>+2ALbW=C%NWzpd@HMyFXDD-!|UZj)LSIN9Kfr zzo;Lxp%nbZPH-RZa(FOo%_E~0M@dF4KFI0!&PP=Wc3X*J4fp@B?!)Eup>S{x!)sQc zFa>Ht<8AFT*M!@i-6m-)`{tSB`~LAt;{3p8-dVU{O5sD}Evo$&Ed7nPot8|PC7y8g!uRU&hQmSlw-L{cN$fS z5W`RN*W|^7hq_NvTDufhb9=S$NeR3?PjA5OG(o)yH(m`F9fJGz{;Q)|?}BRQCB_-e zXh*j2QG9;f<`m)d2r{k~bu9=MKE;A>W<(NtOyzY^fc>7GD}1ROZ)^|S@ye5w`x@-E zruPMBe7u@h-7Akl`7@W5l;mKh=*_(Wl`iGX9L<-pM}BZ)tR0T05#`yX(#;KZzcC#crSJb$SHQNvk>;CGRJdgjP6TmaFfF~H8Y6|7+GlG`jdn&DRb z`U6({vU4A2#IKCfD3E<%E&iGbTm51yYHe_Sy_j2k7&RAjCrdcvWY=(@`~esZ@Vv>UAj+0nN z$Yv~5t^CT=`i9){MveBXvTc>}5^ILOa>ez!)*PVFT0CP~$Yh|=N*-Jm)GEa0~OJA)A+lHvO@;ZyvTG)tufG2#T~ z`C(iI@}D$ULW6gw7hFoauu8|vMI-oJ1tdGnypstI~CEcZ6? z*Q)$fZ^xoCV2n{miN03J8);SdcHk#Ijj|QdH-{0ScWVCn1M)^z*-zprgHm=^?^`+I zf#Tc^Nw56pm5#s6&N%ejUvE18{@@YAmTY=t=={%S1^;o=BP*sa9i<#qQ*rEXwgmS>Vu7P_nKzTOBZo& zX>6=wax%U$L)THyNHQG~`5vshgV}DY3=iFdGcyQgIahJgvCCFzhU1nQczZqLu9}A& z7`hVdZF0*ZE0c{@a&aY5n6AoA$MFavE+Ri2t&Tv=>0EULdnJNxiC`~Au;z@sO@mX3 z-hb_x`xEnHuGO_aF(W5`(_sEEM#b(8RCs9$v2>%E;qaB3L1V5)&U#2wHRMFi)D6q& zX&X9{Jjgu2ihJWz;}36^cFd9I?$RG3EVbU<`T{p+8(^h|0uW0ldE#dSqAEWCAYqU% zb)dfwf5?SSa*>`+1N-G74qbB!kJIwOg9Sy1MUCD2nJ>dl0tj~fGE_WLD88E$ry0bKs2MyH9v|Z8=hX---~g(^ZjxI0jB1SR6#Qu z9xke4SLZ1ivlV7|o({$1LL2EH@1{3v&P5h|3SvW#p-wXXaA_3rLCeO_R~73_&X z7`Ub>G%j?^hBt(<4d@EtDIwZFN8$2v!I4yc*s6x05S%Su)TQ=x*~AN6(~sH-FJ9;! zuXf`tYsAQ3xRLuc&`z*MrZrjZM&F1QfQ4XJ4NfnL%4tSZl!8aCZ&B>3g;0O-A`bID zCt@l_e08w)8cuqVS#efGEkcv^B*h+;dg@^xWsps9h?Ac=lzW!Z)L4#rEX&+@`&Qv? z&A*cZhbQIPrLVOhS?xLTW@tbW3gEn@BSFbiK6$>(AWwG%e2$}v0}0QJw2A;*_4 zW1PiGV_#sU3Ba-yZgS?1*Qn5UUTUfZ7v)TCeLX35)O~~`12RuiBW{3KI0G%BR z-~kbKpV%s&I!%A*A{lE5rYl7Q%?X?+cksPD%|q>o3un9G)&M9VC~>f>-mX2-fLAMZ z4jdN6fyR76=#~smSN{Yi;tOWNhoTV7Q%U7DqnG%4nWtvl1{Jy=sHsN?fEZ}UueI+Y z;Vw%R$+vZ%Ch>Eq*)KY9lH{V>5l1Jdwupe}_dsF%D3YjH*>1sc`};si@{^$!<_W$W zqPBC8lsQO4`gqrKK3Payn9u*wm*&eMjIPYUTK7`gi{b9AB3&}Rs>B{>BES4OGbxssYrRAsL1GfIqliuG!Z>mp02+?v+Mk9B`o_Q~UAkG_5KtsP6B zeEZP}3l5$N`sS7AcF+Fj;7y;sxFBR$(WGAwt#~nD=+IG*&c5*C#(<&Q%Xdn4OAhL4 zm5tB6_W6$DAqP(W<>jD9GB;~c6kVIjT%050?zpaU969h;51m3khu-$`Z8GU8#KcAZS4Yl%JEA-ub6M1@_`zwh8 zvc>QFlWzm_j`xQX;y1Ynw~cFH8H&J{`RK9wb2)DF$+sVw8zhO7i;x9fR3>ysBJ3TJ z+k%>UWX0T@@;S6QMy$3BJdYsFoC_>$%S6cj1?mu|{Ejyew#>|auF9tgjQI-HlKnR8 zzO1XC`D291T-_p)lhm%OLQ?lqA3*%0<+LxKb?>+Iwx)A0P`PcGJsL3ZgGN&1sa7+V zGoxVA-VllK*6TZhneSJL*h6Z15mE*XK>_VLd;DxhhMP6IRxp|CaU9;+RN6itrAcFv z+|8X0cpL5Z+RirOl5i?LPzr>!7m3EdvKLM|9hv#+_%~2y4EvJArU_k4xbnPZo1JHm zaThi_ON|G(6s*fS9(A?UD4mZfox7CIsY+*RhNoQVbSj;Jnbwp{YoXG4MCk-zmQ^~J zDxGc0HQ+EWo&_of=Z>ER|9MrP4;#-Nho#X1nEE6&-ub^0)j4HcoKi8GqfN|slP42l zIys`7&X@Og5t`jaw$ zWyeX%doCU}gyF{Nf>-o}KYLRsRS(e$!n2Ktt3rkZj*0kA9Wtovb0c$Y!bNShPQ!WuHMXEB273)+WNvA*FUg#hd*)MaH*>xN)48Ty>%Xp9dwZ9q={)i)?kR`>2F;BBH=YWGYfSu;k?H>h)J^ooH;2 zuiL-jzt`FP<;h4wb86`mdT7UD@NM+>dT0M$=i8YAm_OMW%$)+K({oicyqAQkD>M#o zMPLTR6~Vg$oxdq)OET@qY0BsDRxw)Phi#zBLz}uY5z+A#y8H6+OJ3!doa<+^4a^DX z4f7@vzM}Xkf33y^Bhf5Hb}wT=-POY5qkKCpQdh+yjEkY&IN|C#HA2_v78F}1Ec1{m z{sk6icRl66-6^S|h3?~CYiau_n$V7RN)vJvn@Y)9UTJ*iiC|qfLLBU~w9QRjKdV<6 zQN>9Db(~yNRih963X3~}asT0pH`~T%<|FT4*;6s>M2StM1w~u7$At{ev<4fkQ_Shr zX-a29gtjcAaCL-16QRyeC$$k&PP)vLu8FG5&$KrCqW8;;`$4_nT3t6p>FFMC+_PDBZK9>Uo(+B4VHi)j*Gm)XxyAtv7%WULFqWZq!+6rZpNxk< zIF{-}%_Y@=R!r~9l(7tTij`HNf9Hnc8+?IN#sn*iU*C!&m>gYs4njEfv!CYa^yH?D z<#R}K!x*)z3euOs>-?xH6^WG|)YEL^{UpDNAPc z>f3gqza#XSyGLzqfZY&Qg!WRN?Kr?ZDjmmA_m_Qi+pn$Oz6Kv-vaA_ZVoqJCSvvLb zQzze@aP?1Re|hoIg-^A;G-UPIabw1;t9)tqJ753hy;qk877v^A;{1;;4g1a4pS^<~ z+VN1Qy5-vl8f6&WlMoI?K2@Rauaga(D0zv< zZ3WoLRj4EgO8$&Wx1fFL1v`54+@nohb#4lc&+ObR1`wF&=}q>vgb_~82xMlbGME~1 zkRCoGHa<0%vIm-gWht%wsvxnMpJ9o;V_2)foc~bbCArAkwHJy^#DMzw#Nz17Oi00x7f)1k34Fo{;ZnwY{jN8q(TNViUd0=1D)pf(r^ z)NXmXbXGv}Av7@X5Kw;RbiWdaoeP`6hFu(IrLNE>TYbJ6i`vIc_9eh3A0kS9RgIH} z0sxtuM8rrK&q)~+QJ;z6O18ZBOK$b<_MR_pB2W3<#WuCKA{QZJ2rYQ}U%4L3Q zM1$K+z!J7Gq`S`zIl`9Rtrzgx%h?4AU%n?_LpjopJBAx^;7CFyExHSC+aJiO_gub+ zax`a1u+-o{V6`Q?P4E;=zW#g;;HgB{bq9?zhD9P?p}9ccO5N)bHKkTR9XMpmlCbxEr&T!JdEXx4Hkn`Tmp*MYC|WRt;r=tsyOh(5A*O z)Gshthm{TmlBCpXDAD@`HhZ`C@XgF-uXVNje)8eCp%pCq!0tyM+x5!dFASV>D0BB^FUr+u9R_mU*@B#ZHtwl! z2*pZP46qWva*`i<)Gx5X`?wMF&{ptOopUO1(g_ESpmo*9vZA9pxq*YYf-R+&vMefv zaZ{-(81`Dx z?;OZ%YVPzJ@&9oe3a_sZ#@kw}^wA3y3%bTv!pe_d20ete&w&d%Hz2ythmli9E#A*b79Zfkb8X++BDtAHjpv^=k6Ed2 z0}0!1=_RG2Cd+o*9tO%+-G@*HTM<)a98N?rFWVOt z1t*bDo8Dw5+w)=#t^o~_E!flCzkG7FThxL0o6J;uRWUh?9BWcC1MK=@>@l>MnPWE= z5kt|!1cOV`fNeof>*f`x7@7TKgFSr8jWUAG+FD9ZXN5b_h7>3Mjat62U{=9`gaX%7 z_9?~r#c5m2LkyD?O6G0*0}Weddq?y;V8@Gk1$CDgx+kictqWKweXcLeo{QhslU)WdbY{6m+@ZN%|C-&q^}d@y?;Xm${<<-T2H5fIN=2&@CQ(JBXw6_r=v1)jdMW4} zev<;}ltMpvBZ#t7RE{nk^0+t>k^uWQCHi`nf9jxbCU6}g?V**(9&A(hd&9b28qlrJ z@iXUOCTZVdbek8jl;@D}JV5-i&0eO7t`Vt@Jka#&I45F5FEGY+C&LraVJG_)9Yn=P%CZ zYWAFRj}=wKWXoIMO=hLtzvPygoOB2U01K5wC9$Fd11r$}IkotUCS>`n0#U^d#+uZ2 zWr7?$$RC!l*GiowDuq;2;5n6S3(-3pWmVxh35w=e=iy{qzTR0bt1@{1rvbxT2B^EQ zxL0lKD%i5xi)u9Ik>i_13Zx3bIr|h@=!Gr%uCK=yGOrjzFJx@%Iu;h!w!MA&g~G77 zn(a}zPr8+PZ^kt2i@|03FB2VoJ~Z|SZ{`KCKe9{*7%D0jh`AKq&e~VN?uAhmA73HY{Mx(zw2bw#G0;IMNRirt#e_+8fkxO1jHYd=R8fg`i!W}4J3=tmKVS&g>;Y`1&(%4% zol|!(U*7iP%jIh3GiXcOgt-wXP4`I$eC*zxgyUKnnD>7`H9vuC!xuu1mR?+*_6X#4t4Ki(*N?#ZWr zcfuC`rfcT^{%hu@Yyb21#Vavp2MTp`wGhVmqnH2KO%YYKUK3Vz?E81P^{#*hX%aqp zC@STy+sHMiQTrla#^riXfK~d7#O3e)E|}Cw_-JU>@`;Pmm4ry+A>u9RsT>ley?xv> zyL;LTXfOb<`;E$zH9oZy|Ni8Er;}rf&=jhGRsjI(Xz|rO?h|QbVF&kJ$I)Ca2x8~8 zg_96td^5NW)|CNHNd-0!5-x@R!!9X;oWqexsNLW#Ep?F5K8h}J?51bjZuD@y3-`#0 zwbTSe<*ltAo4UM5vaH|Mvuq|y=w4=tHRKDdIj`~C7>%~>j8}Gw-dtA19kkdgm%Hc0 zBD=$5)H})4D%xO_jMVEo3)63OHsE_}&uv-vy%V@SGsTDn@1t`12b zFRi?(U>n+aXxo>GTfmKO0Hs<`shxcHL(s1U7rI!hnsJabu49(cYq$r=s_TJoD-RLX z?d~0tt2(#+6CW1)q7RMrW3h+8qy9;3qW8Xw?Dz<%=5``_q!HbUI0*Fj&3X*A?o=`h zad)b4yTH*YAKuL0czv&wyGErkhE-j74k5J4zzr16JVsU3?(PaN0JXVQ>LyAwM2QG9 zb!-G8A$-MYv@SbU@H7G*vd}XPiF$WYw&~hV{KILtBNfG2$^Y@Wt7VMKTi68%2;A;IEHl3>Tcxu?`1LZtt=g;(_JM zMswqJm6Wc00tyt~3IN{qYi@6(JzX!?ANP z*T349L5z=OfuO-vl4vgk{^gD@h3`&p zx)(Y@Vap+<-MWB7D~|Qi+JzU6L{zHsc}{VkFTJE8+TXR(SW7;sCvM zR+#hrLC>Z6TILYfa;P0k57=hi5#~I6(9^YrL|^HFwR}I&t$`Q0`=FlAy)MDa; z896gq)wF|LiJbe^+szCzsl$yc<2QQfZ{us}&#Prv>U~XNvMZpD&l(|JKR7g=*)|wU~iWd5kpW=653|eolbep zjXG9v+2S;HvlGm~8*RqutZl1KqhrCHcNmYKkI+w_8TIiW?>#OzTARsu8H~x7!IHoI zAk^j$5^YFho<%cn^iiMSiB65(jr6rYkpGnivvK#7AQu@1%8NBeEVy`P)7!^vRGAo_ zhl-Oa5KFKOx%5Xe$naOMaKrWjE*_*__NhJi{}m4{mMhzW|aLi>)7G7jc<6~`Cw|m ztl6vgjhjF0*_O=VW8V9{=)iAgeDd-94g0>!GaO5`&~e?}P1%{$pn<=o zEhUA&t)kXM4!kdP-ybjP)w_p+_2?+XrE!*%vQUxgu=pAg(5~pF6RPro2D5aa4^FxR z?0bJ$@(|>!3CtgYGK?Gp?7KvSSd2_J6&FTxWS2$JwHlRYM~c=fo+6KOWm8^hHiLDB z;v$Wpzb(}LffOBE1Wt3PFFP6&zPVmQRC_m4Y!-ek4fuGwg1caE_8V(YI8hi&=_UX3 zG&yL*>6tT=kiIZi9Nx2DD#}OgxVc2({RVkQsjc8j+@FEpb}TOY19w1HC-b(c+^bQe zDt3uDrhhA?CvLAsUCF@xS0?&ZOC7_>SQSQ(1?%VD7Q1Uu$oU<{R%w90yRaE$nSHtu zeANDS%P+h^U@`8UdB{uD{X3be^?v6ye9%G5$8~EcJjbVR;9gkRxtwdPa)*Py zfonN?&S|Z}_7L?mkbAQuSiTrbDD-UK>Sbwf&@xoZ{4hQw;#*!R77aW2===O zwj)C8Nms0jz^QcZcm(@H1bZoh-I3vmRyr?d#IXyttrfUL`}v7jbx`h}bi#&~vV;+D>H3=p)+HpPAe{PvdD6??F-% zTF2e3e(RUL=HC*?+AIyj;IKtDt>d7Cyay{3?zew2h_{ifT*?wyTq#mBn*>8^$?7Oq z!CK5$27K9HeNb)cc2LZB!3Y!$u#OhN+Vbx({JtQ6i6Q7vcNi$Bw50f0`GtM>FAc3FM-s9V9ksyC;_b}N z=SPNz?&EOosY7T$_zyvVsIs7$qdFX>s%o!D%vHY!Q` za&A)XLr&Srchg`Lnu+}G_N1P-7IYU6BwW%}ocsEv3;4+*%-#)ecl!-so8Y6i3Qf3#>6VD>5bEAcUow^$-n0 zSS$!(-R00GsT^xXtss$Am0Zx(6k2dRysR|4bEwmh9OXW&(w3GRC5KSx0d9cP5LSVM z!@1sL9&3f9k9D)z0N?+8RcpINY7UrUhZCJPpXp?)7^WW|@{2UudZp&fLl9`>P!%OR z{q&)F=f6hGS^Z+g@2_q8!Kx{{>{evjI?Jd8h2>&>fyu%Qrp%3w8F#xOzJce23_)@g zkoN%^Z<+REpei~kR48P^haCA*^N7YP$9zmk8UF=_r*Dm+-BcPQ4XH(P@*cOCzYK!$ zvo7JDFHH@=71E4ilYa0*b_KkVYV~cC2@VDu*5(4ryb-kV`N^ z6s(HZo*ro@aWbF`A&a^;R&1f#2O1EUjd?JLC)zgsM15K)YvHMNAeALV%I=atoUUyI zRQBH;@VGx~B$9`qHq2F24z^F|#LGQ7OV3nHK%|d|L5#~a5AjnPTTV%^gwyDwMi5aNaXSd?msv#b z_wFSstcp=M&tyO-l#Ad}#VH%%;}SKP=ZY$}ii8W6XxuFhKFd$B_FTtCDY}?l1Ifw~ zb*jj%0ab^LZK|>02%VoRk}>k*2yAqvv#11e0>Vry#GcTz8BIa`;be%iLMm<8<|A z85QU}6qng!5gg%y=F2Lj_x)T#1{TB84J8_fZP9*N70#L&M-L&!xOqy zle<;Zx+7bWv%#6$n5D|QgaOTRsoVG zFYlgY;40RkYQtidktPp;Qyz*g8Mh&;aoCB=D}GbonzLc~+Ql=c_-bYT(^sW z%?mJl0UzO0Zfa;`qf5cKyG9k-jE<)WkI3?NHcC_2@uh`p34tB5c&_l`BRr?nNIS;V zQXXakN>d9D{qo}$n1tq{HI@;;#n!x4__BQeIsjFT$#VM^3{swE1)qT+^W7$S|6lWS zJ<-DeQ6jV*3?j5HkKmQxJP{Z0fQ+TwP0DaL-jpYJGl2W~tJv}GQQ_Lwok->Ljsz;9 z=>43V(LmDCOtG65a8kMOoMOGpjn^Gxgyja=d_<-Fzr=Tchu;7+bfFQi+YeMF8 z(BvHaDj+9g$wj&*U>3x>r;0agY8<-*mub&pKI-4bU~`|R4QKc&e&G4FGTSuH^W~&j zfBMJhr02dqIQp#}^R|EaM$^+j?E8A}tM9)1=!SpKdp+RWYolk*o&ASr4NiiS4`R1CGAt*cbP=zZKHaN3wUsXWFKJv74MSz=8107+`_7V*UE{ z_ZDn42PFTaxyC2#_=RXitd^rU(|f_T11cccE$XjJXYd!8fFk%+GN=Ksk0HBS=WzJy zQ|N&*7}%b!G|oSS&ITVsMp=8WnRuiCFchYN|>e5FJ_XeoeI0_;s^$f>WvXs4y>?cOAD3tw41Y)_JN{+o3PBPKtI$ zM?1G=c`~x%=r;=~Acb8hosps6Q(0zJnXQe{PD8X)6}@KgsLk~0>Y;k;$eB5Lqh{v3#2Rv5WW%+m_ioN}KZsS- z%vra^lkX@Xwatx2tacx_%*P3v4gM^+tmGuvoT=abLeGW|B~>M%mr!SyIll?DlyD$# zE9`?u_LmJoRSNf3iK-JdmRuFwBjfv%orFqIo5TRtGD&ap`&+;F90a)gO7@hCpxN4^~K2yxmM;A$o4K}cI zmU-0q>vR^kmA=|V#&?r=Il&CAz@4YVOxyC6Si(YV?Ly;>48ybxLuiK5P-!c(4vKcJ zigpf+cFu`*mPR`>qMa$x&Jdsf_){nG?k=SN)wXlTCp92*37PBIAWb+uak3lLxM?&+ z;hmrfx^gzywZEotXZ9gnlS;>j;Ab9MHXkrXMxoA@h zq0*c}1N6Cf2%w%j-`9`6Eu9uj^qaIdu%)!vh`K9?J$aBq4~ii=-kW^?Py^xkH>Ep2 z4oMVNP8=O7f5ik24y{sKN}8;nAuR6>!`SyLblYJBySt$!vo{ItrkDnGUK85y5UFGS zm}Y<-uPHY%?qmjCkK*o@u5ll|>%C@L1J`atsMAb~C41G|)^}S>j!9_6DRh$Vq{UHF z&+>D)#n&xSIWdC$XbvaMMIv1@-WbD~-J6NVDuw4LG*^fO6Rx>s4GD0Oazyo*OrBU7E3@c6%J-+XKSR{eQ+P2MHb2ekfHfs9T^7jsmd1~Ar z{_ytx=X2?#^;6$^;^D`K4t;ve!Vms&;LXUjYaY(K_GOIh;bDK6{ZvKDfziJ|_s7|P zd}+f6TIC1N@47y1_uu9%hUSmX+&x=>{(FL>}fI^!iuQ9G1-9r z0}?X-9eSrx2E5J~&Z00cWJriXBz5z``UiEmAs&%?JZN`M^_56N3OrT(RV-)@SFwp{ z9NxVUiN}4mkK29*8`5(j%{!vlIp#R>Ff!y<;#E)@DAK^{d5X7GCZF&errFBF2(4~x z%`{&<>Z{rlspVCRo<(60T?tbUE<&g06rqmCEW}f_rEPpYoOlxJD{iC zG`LK^Khd$|S{>8pL)-qumjb zIZGPrj)qxcsZNDxfBwsC40{%@oASU@<7cN`Tyc=@WI zS3XlC@5-VJTq$WBDqT|6XAQ1eLr|TFJ=#W zj*aLFl!ZFc76EObHvyzaEFBV*Wd+D>W z``78nFRK5N`PHzy!t^W`k^p7xD1Oe_VKYA7H{`p`EiAVlZg%8Qqx;_(;Il#2kcSM zi21(Rg3DK4MUf_Nb_wCBsPvSVcqrq=RZh?D#u~Hgh&1$~D(5ZS{#z^VIxpqEcPsVQ z5n;|Bj#wMMpI@`;_3&xw<4094*k(N(=KSVhT+4j9vJ5NMt}^QO2h*z$nyL=r<|yZSNv+oH1U{`bK8mIItuFcr zAGuSsYq;!?O^j%56)`xcBnq#EFvXjx;>ozSLnr1O%PJVd+B5JP%+tf;M3Sl2%SF!%liNFCb3sQcB!nx@J3 zCWLyobt!J}eQa+(lao-0=ZI#n2TjtXib*QPGdvlGAYdu4LiH6WpPGgi{TD1KYAoj^ z-P_e6PP8K1@L%br^d-ia;D|>|1&UvW1De`LtMB({+_WDr{!Y!ShrV>b`F;Is zLqd1G3@-<`UDG!Sj$eQn->eB7iY%e-4r62|-o8%cwh~=ZCU0{T1Sh$Cw?vHE7m2ku zK(YmO1mo8~LjyF9&7M0&0q(2lu^0cos@8RdtF))kI*mhY{5v0=ReR1Fyq^OgZAbTH z)cFz6+~+~(@o!0JS5t<{T`P&~L_b9PJWDYl>Gsh8ry!RE0(OU@#U`-I9Ev7lt#1;` zPa$`>kDT>B0Ps7F@~y!^b9~oFC6j@gt6c1h7CwfP#&%rRm=G4L_F>Y(hgo|=7Lyy$ zM>1{c*klH4NrhX2I}OGC*$p4Aa}W(%NgbqmiZqD5(K@0|gS;D|Tirh11QCqmMV1e0 zc~47B4V%F@t{(BGI=6*DQkoDA<_9=Y`BW>ilsxFfovWz)HQuFF1!&uYxOdc_aqoGX z&AInJt9NfUbRpN=Vj&H!zXJ8rDW= zQ*qkEq^8Y7ZDhPvg4?<&L!~se(y*se1wW~ks=bxuo=VbCiKSM0AtScTIxPdoGH63( zK$&&qj2!LYQCAh42QM?+H6PZW%y2VXw&syhSNCxefK`(VubE2nxDASn%_>#RKCV5! ziLUM56CyRv$AbYWB}P<`gM10FfAi&f1^1{|qA3JT1VO0xM7{{J>wIpEj4>x8W*iF7 zNx=jKV|?&UZ>EoJ5au~9%V|O%-Pm*P3ApxxZGHHQC*WD6UdJ|)_C}Zo*LU|t_cgbu zJ(Zr)=Z^Pw$U83FWX(qOa2ZfBO=%YnX};NAzDprVXsVI@EO2ore(ic+y41g{KtB5u z(oc4huH#kUTb(Z#u|FeAHl&< z94Gv+!92MEHV;M77!}j*B9l{v?+lpC&5|5Rf$azaALHF<5g;Z$ect3Eb&c_p-2}4- zbqFpz!cQG9*62lbQ(-Z1F5_xRArWBTXZ0o;M;CUL<8A^v)PS6Vw39+E4J1W zhU1sghD(DWw&LmHz*VRxuuS2&#}JV8G{Y!BKoqzv*n zVa2h3BRmZ3PXm{4bP+9P(o>SmsMh!#+1p24e(AIPEv%6)* z8Gy4+eC;We<-57LA4L9k@AXHwGR7-9rhuh+FKW%6GTVJzA5wk@BG*VI9caaya_O49 zJndO8^QhgKEMHgq$7Ev7;hLU#J74>+yQS;NG5h%KPp*$xMYwO z1NX5o+px;gIMs?l*6**JQm7q+S}Q1H1BVkT%5FRfuh^wSe80vwp!5=wJ_^H3GhXze z2l%(d|CNM3bV+=_)a*4|dn<}})-ZQy82ylE_+6y=>urtBM<3dMWd4$Go`2)J12Ydj zSpEL`k0a*1zw~^1#K+G+IB4LXN31@dGkWb`gEtKtxHa>Wfpb53|DA*Lhc|q-b)b?f z-uQHrcggy?h7IpM`Na@&_w`W2s=+DrRr<^ypSI9Vd(W)VX2$%uj=%qYD8IV|Ag2km zBG5UAUCfRl((Sju;%nq(u@=$KmGjOvcC#O)^R{XEC7#oe+f z)PX`fE-v7rv%AFent^$~EUY%J9qyoVMXdY*VqS%os(Q_hB`iQPp|WQDpTlpIKz*Wh zlN4|aq>k|7{d4f|eKvm!5R-(CqS)?ipj@LjaVoL=CCx?`1pOo}c8}VUyrpnda0^bbgVI5Y3#o zxp4Pz>2xDvFHLf){F7Ix|M^AW1%_OSveESkNJ`|2S7it>z*c1H211*XW$A+3G;aj3 z)-=nQ@37S;*xfXEY<%AmJ}gZ*B(01rqc`=uK?fx9T|8*T3KbX$Dx) zg$Jz2to(<^5E{m+3hP))lNXmIu~lZ3c{0A&w01^eeFOJ>qs~&yrpTg*HrF-H;;WRR zU2V!CI+(LgHQ1$@AfT35uiPm|+&6mfeLYxgL0d!j;LBjERp*GkSEzx>SVW6xPdy@W0 zwzsx13ROh>vND^r3D4duFj#c6fT)ITlIlD=QMpne$o^-rKOZB=XHA=l*mk5?-NU{l zYEY*e<#{WqP$OcRz<0gHdhRtYeGmWep|QgDN*j&W=bC{#@bDrJ{<9Gf;t75fL&6xd zwq=JJO!3TFvAY&InhR#yGR%8A(e)IudzL?&k?5|ivaqBf_ozsre17q$8iEojS8F8r zY2BMR^1g~1?_|k**(hu|k_5(~25-I9x8?MsK(il#|CD@T*6ST}gRu zcq}N0>%qYmIoMqmm`QY1$PM8949vbLayA4Ij}FA?1`53G;zc4E2%qQ?n1nXs@%CW2 z@y1uNG&+?>%p>W7%*Hgi<&l<8hCcDY#YZ3iV(v5ld-lpJpT79%m6swnY?$}K^hSI5 z!m{TM@7>+{#-COXje2T!;Dwh0fBV$1a+KTgBE4xpVE)oWP}0^fmi)dnc=OBO!Y==aooJ@C*F%=M(a}I(A)S!@``KsR!lyqJ z8QpRjs+)w2c;^LUY;_i3!Z_fX{pq^pfeLgzpu*?r&O=oRWpl!7+3f+fc(@7kywHkw z)w^>Rb3wIuYdvGPF~cPmLqaUq<+PeZ_u$<#5OdN!Tw+!gM6pdL-PmFaVwQ6itKj2O zwMXHTFr#$}2ya;`Yj$MB*&?*<5o~&fhl#GNVpF6!BV49`}j^ChKo zoYGmA5myxvIqM+}NGQ~Rgn|YX66#KZFqFh86z!>CMUrxc$+az)Gp&n2#P_u=qE}7bm zHx9%Er+wuCMv%q{PUvnVHDJg2cOkO+rQwmA#7{FBiesgwV(zpd=f~05^4Wv$9+8Q= z$LlxV?az|Gl8rjNAj4GdVET_C-|HRxsHyQPWkSQ}C_dF9xy@zlOUC`3&*6>+%J6PCOmbpNU6?24&NjB%DnQo~&lIBndBJLx&eES8FU)r>_l&dSg zmg|&}z@MHXe956d*#wpxvU7d1Dz_PN!6N3G{K`()NNr6#xPO;}g|E@$V-7>@L?;kB zErKnfZjgAnCZGUFG)yF%9A`1tbfS%xJ~ZW%{jaz1Sj6n1;@7wvc&I?EcLTGPewa6Sqen zLhWPCrc2{B=vulWE&_{-K&|PDwGpTxUDuhe^Q7xq(z&(>Egag@748t+9fMmxN1DRx zG=ew5b88}Q@gTvW3^$rPyPlXC8#ic7XyK+IsX7ka%z$u^@k*;Ycf1@N%j;8DcXT~5 zBi1u*bw`p1bA0F_nnuYAO+Ftoe&s~zeB|>XUEB>H5?sm`Sx|X}pF|IY&jOs_MBXhM zpTEDAKgp@NM8ug8s*!Qbov@Po!VX~0-DH&lEprp<#M)_0YaU3848_H7gNawG$|DhH zsqw2DeR}P_y7Ke!xq;M9E<#S^42F0Ts><~K7}5OV2O$u~p3eYWy$2XpnjHCf=_H`b zGUI&%H2RIP^5|GC${^XsYzAA+dVQ3CcQdPgw{qiR@Rcs=zp@!dpv?3RG>cy765l+F za8o*$n(Rci!KB|ngdNV_I))=E?z$S(I=VK3CSyZNyU3hsu`K7D3|0VdP!8PBQCT>{%>As|Ix-VPS zafaycQ_!0+s-@i?D$D#PVSWoVp882&1Q#s{AI+_IS$^AqyPe*PDAYf?H@;b58v zbwZMvkE%|T@!ZE9-Q9ByVNm01nac!Tc9#k@qnhP*mQHH7# z(pkmtW15_EZBemRczim_PrdqIX%pht-==c83s{o<7u<#bDk%yv87QLOWO~~(6w%m9 zv-dS8IyT76MdW{v>>^u{x+$#v#z+{`x-)mqod1;1iuS8OTPUllOE9{?5p@<80 zvcf0318IY?s&?vWHu}#JhixE?iv7w$XS8+SSxG5H9 zf65`$a5mV`x^+wT$n(|PuC;}A4Gill8yijAKEB1BCur0iQ;EAEMM`+n8hP!J#?4D)je-_o;waTYbPFe z5_NBCLa(|X(B+Is>v+PcDH&i`cWSQ^Gan*id|>QUEA<2*1DdT+;R9@2{m9FE+>Uz# z$<9p+SiJE!!b@}UXk!f6XjNgml|?B~7%#NU6c0BB4@Hh3cZFfE6{S{}-8TwY{?5Q3 z0lR#nJn*u3xt0-#dL7X-{E)L4+FUfts3IX}QUr#s-pZVCWRzjv*AbZ)f$k?2_xA7Q z@5gI3B#_y05KBNcq*y6)bcMm>Ej446Xh61=60ZO#-{ja&Gqy^E2)0RhiY|W8GEoBa z5?XFqlIFoY{}QpGhwZ=$Qi>FnNRt}N1@;kuzdd&K^JjT9YcK2_3DujakV=#oE}{iqOZ(g#XXmwZJu1 zzJEm$j0DV#3Sk%(mC1gl#hrPns7%S98kN8*OEP{6%4NVV2PH+LoTiD2FfSP<$uu%R z*bZJ06=5jiL}24KCJZ=iW9)j)`+tWr?-z9E|9N$sopW~H^S z#pEfQXP9XH34oPAsOLX|7Hin3V1v=ewDq7G=&s>#9q%=-;}5e~4fncb%_$^|0r^7E zrd?5IecU1 z1vk_1j#=;v_2IBiL-#~a8w8SqNL^ttiIkKmrRH>jkWdp2pFPY+J#xM8s$q3z04wGP zCaO`$!wVPSKsQE?Jn|EU{cbm#DP9kbi)h*|BLdn79s<%8w&0tG18S{baqoM?ONq5Q zmsa|EB<5uzw-M~ArG$s#?aTjvnhC*88K&AOz5(T}A_|AyU&9#*lY<%P&8`(<_KLF4 z5tnE|)!=zEHQu{lo*2{$Ab1vtGi|Ma?J zAKT@`@BUy+^0tq5?>Ifn*?r+AyK&>(lRTbZdi1xeOBe54zLbcb>oD2rFHHQHv$a(6PotPv{x`z>*xj%ig&=I#eG-IS|aO@+fBXqt1vBAA$}qn zhOo9QAqk)8COy7P@JjG{k)I5N44RW4)3);<*IbMJAm5WH;TbBa!7`BVN>a;)0yr2R zM9eWcjnljpl$g!&B(w{f2yR$B!9b|#ik?8V6V3W(>)MuX5VmE+s3t5k5Nrh$x`;vs zCfBX#cReCKFCdt64y;z_nTU1Jr0%eiS}ZV4#OfH6G7N>ujd`p^P}IEJ2>ZnI?xvk? z44>Kllr~tkW&wc-ipl058+AOQG@#muA}Qy<1fN?m>7-*1fDJAOz((U}jg;9iC9GEn z)@XTKFgx${c$$l-Ql^p{OnWlac3gEjwVEPG3TBlW{>)I*Cd!dxzDP%_zP_za6tOFy z8YHhIObM63+7Md(WCo%hh1=DFXCQG;K(zRV91$$6cnuMp~}l4xZPmp}wVvWo6PZ#EuV^(J*bQrM{OHBuOa(niDBU{bl20Yr3#)2(AQ1 z`?v^{%cw9+MR>mywr-EF1GZ>;VLWNHFbSjOs1Wdr^`VO_$`_bhppHS)n*hyJK9A08EU66!BGQ_z?;v?IpcKK!0}V{{4rD8>4qyOPe>dXS5qSeWIT&bbG-SFlW5ok4 zC9o-V8WK{lTV~GX5<+1VApkUMOaj!}h&4B>agq%DL`gaM20(>+>r;S*n))(0 z1B)P~#akbY-=Z5cOSlqdBE(|P%7VfYt(*Liv*{2to3#}3LEGR)nGnm`PPMEC}{vN6d(l(Njw9X$3$L9U4+%%NG?LUIeF zWp3fQ0tk-3fZ!G7pjM8UxTTt)mbrXHA0b!s5bYuo>A5wIQfx@$C-rRwUU2SUzreas z*H6I$>ZhQ#7b0pYmluZnF{_@!Xwd(a<~0ySLzJcA?;^5=cx$>kJ8c%XCwWX;`u?b3!U8SjNGn0`wTVn z+5HFHgAazf)#Y-#riEzg_Zb@JpkAgbn+Jwt(|VM9mknjz>hcuR4Fru<0Wm{*eTOXVkMZVr@R@V=gU_(E z2gZ|=0 zG=-uaaNXrve`t2!=ra#O9;n$%g{v;ZM|}rXJ~>@?Sty!ns$>Y;w?e3$4(rGF4UG)w ze~T^SgL)WqErl8Q##hBC5kxcoXcFZ0;6{lC>{+? z$9;ngOmX37ey0}CtF83DOr>3xt~|miFIOjBVx+!Y32MaB62!Sny4(7kqFMgPA`QjAma6H^81?Hv7fj%GWjZ97M?oul2( z!L}34+c(aE_*nbX3fe9nuV2~O++74=v%;am(;Gr(WkRLr{VzvE`WL-tDw$!TYf2}} zYdc*HXF9zI&k|LmokSNP*P_Afel(&K|C@FUdr^)=-ayKNDo*$>%>ebCFih)NE7_-b zmK@*bTq#6tI@H~$t4y@+Ih1Lfi@G0`Z?q+}Mg1J=%5}P64THzBjvJ9k`9!M&(tm^( zEJN^W_3eRA)-re8tgH#a^H5Ei9Cre%D)iDv3B|bHS`oGQ4)em@z3^g*O#PzSxL^ra z^J_(v(R9kd%hN;CyHxR0!2^wLWSROkjgFYa#tCp}q}+q*&iZq|0HD(Gy$P z?wS%eX;D0frklot@(0~VZALMD=u92{9TpbS%aMukQ~PLeZ-vrGN?v4Xnf82CI8aK# zezgdIVzb~&YCl3_qB;v@_W~NDf+SxA%PM1|L@p?#OadST)&r#=XkNRUqYi(ZZhMA> ze?S%S8jRhO3}BG5SrWdBmY)1X?hfQSKwAlP=|}*XrPw*JWu?!N%lxQ_3Z8n`62B>* z?!Nq`W535D!``QkJC_T_j5#&k-tR!&CGmgCPI(+qe)rYSReb{grp~qcF9JCi0s{D2|D*re))cnLR*=i4ua6 z#amp=JBnc;Ck+=`>XQzLQngy=bPCDwB*eWyk{+W+`%gfML57LhG~Aj!h*3()dJw)I zOctS~IMC+jn&X^EZ7pn)xlS`U7igiGa4EYI$fDs?q>&7e^_qIHT6uJ25zy_x4Cycu zH`&m>pPsahMrKbZL%6AK_`kJk$=iUE1Ys2V%JjU=7#;D@&^d_$W@864C6Bnu;w9H8T7iQMQqU`wsa92q98OM8szpf0K~DEU;>4nexps`O z+T%@i@v)3|+!`PGtMct4jVuHT135e$K!U&2ibE`Q0 zduv&HUK>h?eG$V$L01zb9X1&@i=iyyLAa;XkjZJLLo5_+fann-yyDh3Ibcz@_s)a9 zS$a-iCjv5vSHy2rAtLCS@}$`v?u=uYHl*E*S`P%MssO>afiNL%vN{5jrA08h!$43> zlM78~7j!9p6h-`S?%8qvy6Io)*^1yiwgy9GppKejb+vHR+c!*$F_Q=kD5(U#n84UA zBzD|Js2QfAsvU41wOPNKA;$~{h*y&h`ca4$@TJk}*4QC?tTV_(6swmQ-kUeX4~UaMuH_ARe5CU^BwyR`)cxNeHt{Qi4s>b(ld!q5l+F z1P4W4zAht%brJ&gL|Pxm4$i;9?0+TBfQw?xoF;&zS)bN!ur?SB;YF0Yf`M&tma1IK81jLTrk&A+bhH?J!-*IF0bC~qujDcf946ML zE2xno;$nd&nx{XD##MsZ(60;Q=u>bsn1v%q5z(dT<_G-+u6pIelVD|h*Eq|%2^~$Tm(f(9Ey+#6d~zz z?X-{lmG-V%;A~u~?8u~i3JN*b&So)ntA)i46d9BggY@lkPS;KDQp5XdnM>1UYI7886r55lcJ$f5o5H^D>EE$PAi0?-QwG>9~0r%#4-x5Viv zj!1e;1{RyaN}qfWeUF}j^V{qSFW(dsN+bRh(~>Je7EewVjMUpVw3}L$9UUBjyIP1^ zWg<%}z2iJo+M0C+0+X5t3|wfC*al+Q!%|BRqt7j)mNSWP;&dRaW>_1OEUmPqHi+z$ zE76_hLu98ZF##kYJDnZEhl9vY{gf1$6v}F6GUVjo!%Z8~^e`QiNPhvU{sM?X=)Pn( z4O+c?=!B{O=W+eWsSD~BuM=d%dJsY=DY$M5;F=vb?=dgUga=>_zpPJ}iwjEI8hpn5 z{!!2FxMh2$E#G_k^673_NL_FCAFo}w^250K^Iw|v2IrOOzXv?~?$a}0`SImT|Ngzw z`M{KK-dcWq=HiLZb(O6iHS;6d_Zd$`%XIYreVoyJK=h@8jY&%iw=lEC1(%z@cGIR5 z73WKn^KVn{4O?e;y>&B9Jd??e(+#(Ekt8V|KLr;07n*!PeMO8OsVjh<&`te3ne+E2BwBAiN0{8!VBhq&jO0LOmPuMb}N}j`S65V5JSSZqc z9BAM)yY|XytR7dh`jiBsv{aV!GJ&e!;Smt_R~v|uqk50BEZfg05m{a+p@lukTtSYt z1TsDgVrLYB$8cJ<0eXt+L?*k-yz6*U`;2yC7lMuILYWDlLi|^JtrwMJTCJ5v_l5O- zglF)Qi-H{o0ceefi5<~+ak@rM$)_;{2DOs{S#^lc{2a8N)HsOq(Eh_hbdN+ML76n5 zr!t8WK=1=uAdI({Z~>ZHAJAS-FFA-X7onU*pyeQ^?I1^ekfS)rF&^Y-4-)D{cwwGF zkY~X23@7va!xG+cD^0rjf4CZ0pc|<{jgupjj;7PELW($bGydeclQP9rXpA zcf&1y&y9KTzV?RKJ+@q`^Q6F?{aBHTL>*6|Nf$-K1EA_f`xat-hxj4ovOtD%um)7; z3boiQwVrM*CHc^EEXwlBh|ZA9k#WI=DWJqBn>-Dvc0DLT`!^T?(EJh;cu)6fY`G|i zTlCm5O}D6dkk$eo@h`-w?_Xzq_gPCl5Y=0j0qsAq9+Qd0F?vpk04CBcgY~EyNv!7? zB~9-Dw9vE(>g3i(LmzTGhPclgdHQAm!QBs$SBnQ!k{;4FX%TkAQLAhE>@*f#Unn70 zn78N+Jel>Kn=Q3qy3ITy4N0j4{Gdt_pq++R9*or!ifgG7h$WXvoPvTGbV;{j;SKRO zyc1*L`w>kO9j3~W`B)#W%%a2&YDF64!gwh#5wt_2KQ#TKC1Gmsf-QP~ZO^+Ej z$#m2pl~4gY5SC`3sRmqf8U^w}Ia1rS#ZVHHazl=cgf@HdB~o$HFxyGY4d-)2Ck-)l z1%`YM%1&z1`C&A}VdBbBg6X87uz%8F!9;&maIvv{kw9f|5-LVXp@AnYhD9K&v^x}0 zoUVhx%tbWjA|85>S8@=3(u)q#OAk`R>!=ZRRC*mhvTnE*{2_Bccdi}x0C0l(*D$2q zfuEC3@5_@9$m87SgXEU|2*@dvAnX~qe4GZROAFjfsMnkGwZW^a4I)pAuf{E|D=!mH zf`M~p4~CjJ9vH4C$}k;WD!v`^B9X%}wgVjqp1GKyBod5aKIk#t^Sbwne3mIRSfwhI zs6e&CggsV5xuD@>qBEzmGdl?ZIf^NeR+!ErsPakj*j4N~b5{<+$T(U;cPz%?jJ!o_85}VZZB4XP=KT zk@L9u({(iY`9Sgc__z-3t{vrH_sX9+sb#RSQ4iFkTig(ZeMh)W__;TL)*a_^Dvczh zRj3`(Pd5!1DIhnq8n2j5R+cN>}vGXaQ2 zJLCmr!!rj(`7L+}(V*$b40bL77P;f%so9=qPbCAuK z#0deuufp`?YNUH=>~Ds6*zs8g7Ep|;Akwwu`etiir7-1bbV!EEXgw2dXGu^tT1bNt zs4PeNMj>(MKpM}79JTFDuBe|7Cei$v%h7BF<9*1cdKj5_Hh_blgwb53%LtM^m}fv= znhi`0;sjm#MNJOun1uts3b7`qQGxaiKq>i}?1n)JHicL#%7!xEp+eU2EPmDSnU#1C zVWfTvO6V_L0uq=Y_A10j@REYKncZ|6NJ`Yx<%>geeZm8g3rbc+xjHkFWm2^j&=Zs_ zv67`NS7&(#3-!8gA9^4vOCq*q$YTUQ8AL+7%Y~_^57=1CpyXmf^R(`{#*MWl)uGx_ zwG-%qiy>W$BZ~U83SP2kWr}oVO22OqXIGB@yiiJR)W+Jliq6kx`37urt`1JwwGoD+ zErFqEpTjV;Z7>AwfnU8d9U-p+Ia(x$jicm25WLxnsN%H2kh6H@TR*+5B_tRw zHzz4buVw*3>$E=f&ybJdC?)8N3G9ap4K1PZHoari`iT$LIrKl|`t@Jm0Dl7ihDj0$ z9GpK&0{BzykfW*AR2e`(wirq=QY54VgU&PugbtkG2~2g6BMP>ma2d0bIpD@~ECf)9 zT-z4LQ79k;g|5Te=xjHkA++mC@*6=e;1FsWuY?3r8-lvX_9Q|$*FvjtOw^cUb(}FM zV|WY}ZwOkS%P^|f84u%Kj>W;;0%mFUk@R(z#1q*TT`n!_^csr zGa!xu+yw-6B9tPm?$bO(&_T+hh*F$uLX=+;))o(d|n)F{&<( zqw7T=dd|Vc(9s}*)uxORb{@!KEtIA#45c01H>Rca`&mW4JDt5ZzV>6rjjuXlpZ`ur z?~Q+?W$f#0ZvEaL-f-L3q8}ha0xl}j|2C})Z1j?>EKs}XmWt=eCUjvN400ND@_l%k#pVL@-PGncX_qrEDM8RVl zt8c<{U6&mkPXRW@tPcs*qa8)}w2lv#En+PL({3e+Q-}e}zsOmq6<56;8X!`3>L{@Q^uLGFF4?el{TOOFsn}?(B-A8DYDU!T!-;?VN8A zWtUq0Ly_s|0*yg!7+Yb;Q5)vU<%_vt(!@v<|6Iz9MAasiR@ueN5o3Oru^_%wJE99s z0;71{M>9~rgH99c*dZEjhz5ecX6`ebG2_1mCobgqnjv8ELHt+IKEsL7MoknIg6}jq z=?SFg4zcmH(r3lQx%NI#igXPbf8rM?NuIv&V{F@)kc8=OjZl1qSM7YDMClqf*DmY; zm=gt|U!mX_C#UvRMFjj7b^u`nYK38et*W*cHQ3Y8+A5u3{zth4g+}Pl4R5%I^YqQQ zEUBB%Z~O(qnaNz$lykLN9ks#Aj&z<1X-JcTdszogFCkZEb!X! zjFs5eQ2u!&Z}r!P;H1K!#Q_-q5ap;4W6y(A{5ZZk`hiw!X!E&t&pY5sa^3tT9R)*9 zkO2`7nr;{|B}4Ho`SsEV4#qJ1_GVW)C~4~Nu;N{ypZVmL*q}xzSKK!CwFu)kbBA9K zIDuBgk3_6a2IO6M+wjJ181Y@#ak=c2QjL?KEPY)Zy8v%fJO3a{+jO~FS-_qpC2n;BfCcuw}{d$5I}E$-x1;*^$pG(JoKkF)hsW zGr0Cxxf9J+@|%_YtfS`OzgFsL7^jaMYyC|oGNBbA#6qJ=i{Ka1%yJ?L#%4=oi~9^y zs7@Kf)Vu*`5FUgSoBhphe7+SmDiO_;ToY*j*Sa=Y5OTR`-PN3JPfZMVuiE&>#vMDq z6Mnn%%O8Zlz58d$Kd;T4`kzld3oia=QfK*$56?M%r~W#4;eqYCnV+2aVfy4L3nmv_ zlx$glZT7G4y|;E#66jdBcgB~@9zTWuG)}!y&yS-z?ux?dnS_FIDC#}jvx_nxtT%*Q zqP-={hfo@xs^C%sgA9AyG;`*OsX>uww@xX`4WTEO za_Tw_brlMV(9Lm|pkn~pR2jt&IuyzHQb7D;*iqZnQQNhxwo4wG=achUjNf0J){hYV zI(l;J0z&f`*`F2We1-)bnpe}(ZR=J&yg$<_>YkdY>mTPBD4Ud- zpJ=iZUX`6x**L~`{y|GoHC59nEi+tVJz{q|_|`l%(SG7J8%JBm_>p!t4=BgtH94Ur zVuUgP1Pnq?`OtZ=Y^ojcpkEFD+Of(7G^P|2$S$8GKu0!*uzS{au(VH4En98PQr%Lv zk5F(yFPzQ^6=G!67@NVe>ZKXY4=5-88174KjBRef7;ObkM$o`W!hJS*TrasJZDGGZ zxU`=RdC<$;e$6Ge`G^$%S&bu74IhjqtK(LrkCGDZzXa&loFoukHB^(YnK4*)jkYGO zIs4Z5O-wrFDPa=?h9bE}bZCUEK0fvkoB^U{i{avu79asnJsNYnou53)H^_5xa~N%| zkh!HZpq+_CrXyliF3Cx}0=VG_iG+|g3SuN|1HRpW5^{!r~fdZ zBv=|_?MfieIjuFFpiUeB+|ZjeJ!6g4sd|fKrCJS1z)L(p8DgKWSbdT<_0@<33JR%TbRO35K(aYU!=Yu8PZB@a?yTv=$d+WV+vVX1j%3_~eHjo~P zZ|6dGEXwZz%R`loxhcJ3X0MNqDLmd?dp@|S+h-^KK>_@Dtw8i2<1+=K>BhGTT!Q7V zGgkP4KZNm}a&Eiah3YL~75TEl=(B0*vJ3xfO#BA^U281fVN5;(UN61o%W5l+%Sljn z*5{yckUky8NaP%-IVl}LMUaBL z=4lafs>EquFq{uAkG#Cn6qK%XJG%0jeQ*3X_qmC$E_`{_?}u0a75>6Mn+|{U+S=X! z%y9Vl`>F55w7l#y>&K$+$8TN!zj5AAhyU~8WS6CXeD~SXrAzWTB{y8{5(0_a0c!T_nLRsw zsr<~Rd+xZ&Iwu6(Y$QcVK&eLWr1kNi9{>Hd8tXjyuGekzB2LB#`VfS<12ww3y=1QJ z06CTQvUEo=Q~#WedZa%QOf@&EW>3A}+vd)-cI*Dh<%pJulH0|>N$0_mLJ@L-)FJae zPy$6JC~4?G%?;Z#yCCjc>o*LNqR*c-X`+Q9qh)P*`Bwt7wff7(wD&%;@bf&qKf2ZK`Ey< zosTxdy68Q~N@O48im+`%9MgJD8XT}DEjV5h$vzLZWa>-M>l2z3I$Za3&klZ)(i7uo zrvgO3j%-StMqzf(rRYv%arH=->1zFg71?0#U{_XEZ@!CT-*uvC)>=;IYZDB=xf-h{ z+x2;j>)*l%-%1Y%S_d>)74@C2FqJS-uUR1f)1Q&;&){v0DvlNXsqXO?`6cuQxrrDp z!Ugj8{i(qTktv-cs)btBzCcbQsQSlKQHlZd!gEQ-L#=Y$)5J-tBcl7Tha3KV&AqKhu!VZ&vR^! z_Hir2MS{eA3r6_(zgBy8WPHyemzd9jbG+h+hL^qb^%J)6{xegJ9K}89R>l}AW@Q0Y8G&=9isYwfZ#N$ znt`N^SWQZa03AkmjyMW(8)85o^C-=KoO{HyzAI`;1COEx{DvG*<+yo9DjCJwqil{) z5rok?z*;XF$Z~s`oNjCSafFD|cXd>S3Dvdh`D9g-?NR0$tUf0V>Hzz_s*oPC7{M6( zzMnATmD-JZT8hFXCT(;kl@*pMvnh~&$`*H^iR*7=;?_Hke`+L0-|K@9Oa=Vy;OeAj zNtvL|_OWsYWZ+PRiBhtY#9C?uRF=Nn2;s!uM#x&&Y({RBWzp6BO9;B)JOq2YZFRNY z!1VvjEmca;qANh7^Er>qB!vacNbTh`ED?cyRQDyQut829nT;GNG1SzT1ElF)aFi@r zAj`SgQ0so|3P|=v6B7%E!)uysMshT-*(T{efbvAWovPW*MP{5QY610~zJlFE$0!4m z+{OA-K0CKMJ+vYuLZ|yvJtjLe$Dil###`AEms>4Q5XN`0^iSKcG=p;Br<}QZO`ggW zo*a=ZcOp6p;VQ_h#6WGtvBmngWI^Y!PbGOQp(fwv>YoH$(79Eu2T`SQeh^w9T^x%xqbZoEfp&!>Vc>S zk9o=F;bQgQXC5r8o+&T6*UDd5s@M?brbm=-1N**v-C&J#kzfErh%*48s>RM^NNwh4 z*65Gs5=s%*1h4@@v^Xb*ge`)H^X@zpoQjJ{s@M!Ndz-*$l2~@Uba4#P@4y#w+JTHY zfG)Ft@aR77)oV63CLIl_RB8bp)++&jOd?}v1-osrb90r{SYPO_N4xWl%h+N-2{xdfq+WR=3uN-BIod(tEFhAIM_RuiE!T zApNdBT$ms?QT81-vKM*B_R;qS@piUFD;;bCnV!zgAykjD`r5)z%IY$d5rw@iJb|%) zm0_JB!@&@R#{28P^FmYn^+#(fjRNKI+OzxseNAV3VJMX{aGJ7fUT|yslH4s^`mEG~ z&~V~Sy07tfW$kI&JHb(=j4UpwC`7R{poJL>*e%_B(YgoA&bKAN%AjUE#BnkEobe*NWBvb@D zvA#Y7QEl@C;_wbkKYFlZ@2Kc}Yx2W-(Ph6K9FRMHch`w-(=RmbW-Tqg9h?yur9WMHd0tkn}H9f zoNys;tl;S6v%5R?iP*hR1VB3nr86>HW@E#WYC)iH4Z+_C&m`Vj`D6yz3nipDAsOdj!@fTbZ&l! z%I=O7+w>+Z`(v{0wIflSYkxMBC??p%uZ0H9h)FZT%qp`9P<=Ic;#RdJ`$PfXD9KZy;;AmL8_e$j2A&v@HO!2 z3ijW+A9ZglKT^tCC!fkK56hsxE{rt2eL?N|gvR)5N-f%2uO*~&05Y&vEqxT#rh9Vm zy==gGk5?a{Ufk`{WGr)HDFIWtABa+pn|vN{^OGptb_dw^t>YnbYNP?ttL11tNotiE zwtZg$rti#*Fo15k0Eo!ac;!1c7lVOndPzU<<3d*tvQ%Dhf@4IebRaI1fIAL-%)7(b zQa}3U+t#LkgiWa~RH#_&jiV<_KCX|T$iKgu=Kfbw>_-Z*2voUq4&Z6~jHJI8q<;ZbC1a6D#+@V*Kn1GWb2M#$5C1@u=K!iic;JUcFL=ejp+(pDciI*BPFXSHYS2SK9=c1i^tuGbd0`&zu+IU z(8#%@Y2TO4>ejTkC&`T*Hip)(pNYFU08X{bJEv1dAgof#s-g*Q_jRX zyxq9wnL;GQ)@8-W;&P$>Bw_Qk|O8NATI5OSFkonkC*<-A|7kxH65_ zZ!BbpC)-|`VAiEhuz_cx=F#$Ti-IC(;Ifx+pbky$1RClt;7ICr*d6GcSeiVdYB3cD zdYAJ^6sanwL_6qia++FX#KqKP!o+x&R5hV?Qkk5l|0o7>qWz*QP(4iLE`{YZoW75k zRF)M?1YjJXsC3UBc5TB`o_9m;_bSq*l_Yh7N=h=Ixss{nIt<-X4uO7DsJIBGb)W^L zs=1g@{OUZSB?OS+Dr1QNQdg{kSiIb=eg7dxs)zgV4*f70W5+heH zsj494l)!{eFxJVSHQm$Ja0}OYqIMtVa$1=*ElxSs4;CTc5)M{TxSEi^dwnhqlpbu; zWq0Q6)0gd8vuW0!<8n8Ba`@*LJbym*%G+~u5u);szs?eKr+w_ab-}{t-_zO6n)TmP zpS+dwpAA25Ug-47x4-`StTFA!1<$9A-7@=l3iZH%kXfDF6cA*Xayf=p&l>m|6I5%D zic?37vU$e-KOSXw9)y}2LL@qclVs%?5a3RO8mF&jq>dap+V%x!vJSR;+7=mC1OFVr zR<@Z%fqTB#-LLxiXX3`%u0n^9|#@c3h4Mhw4iqItLy(u zBh@e17O5sk4W`)yRltF=&s}3}z1H2JB50?2mC9*_{y?bW*#AqnhR;fMVYOo$)zZuz zP{h9nL0h|#eFqur3t3Kj)U@jVrB6M|N?T+iq;?Vr@KzO)KO5mZUy(9*<6~lxzk5z4)n{86XJJ1|v9BrGV8D|qN06WJN zrMyLB`KN=;wX%K(jo9%T(tk-mC);jbHkaqki*4JITb&zEbY9Z;cdB0W31)VgN~-1a zveT(ho}%WQ+ZP5F*DsNcry0(rJLwTjCPzc~gh;lpdc|islX<_h{#IrDMn7nJTUNWZ z@XeS7!3*?9Ki<^x%(uRyUaS^=F~)n>YKN%i6E7CUj=uY_9$xk+n=SSzQ|F|}KD605 zvQa!~$2{lVlc^?|k?+obSUgqyk0YoCRUttdqkww658nPQvikd=^16qF(d0HsQZ98o+RFR6Axfa{SS_W2F_pXtVt>u|92q+{x?+i@Su%E)+OL zY-33EyK*Ti&{+upa%EreUXz0?+w_lW+Bwmil>Y|*1!JpbtSi`h zZ>QB;&R+LlEgB8=LVt$!HY^yS?U}SAXlANFb%I_j?^33$8NpmL!oj9{jQQVN_J_Uf z4||kBw^s8>_;v8ujjrqFx~Wj3L62Q^hUY97Njd0V;@mt}s`IMA04=V`#8__sx${>u zQ=c07ye(M=12#5+ZByugl5WDLf(TcehgIda@XIHArz>;pV;j=sX#5!WlX9aj&2v2=2`(}W4n{$d|E z=H<6ej-PBFxWVzQuCHEyMU(QcrX*jQZ(J!Y43Rov*oAThqpw6Fmah~%nF7(9-LTlb zek$;ZY{%4aS34YK_b}CkqGQ@QFi%@Ofz1_T$fI~KKmOZ@x;89Eb!~+Zs9}SGbbsBM zsU?!WRw<0t-y)WPY*H1--4ktC13@wPwk3p?9tRktdbS=OZ(F2DLvSjL4KG?svTG~z zB^y(-9f5Zf6iL7#ckm+PzD7O}-$Sc{66v?L-i`%0^xA18}!m}CT zU9a)qNp4!UO4_MxieyQbsYY+1_|N6&Y-}cS`ddTvr&@lY;7SyTnPPCKri|m%q4GM=>|04IYByTc%QIdl=qo$ zyl-HWy>2c9ZIdzjmcw|K3?{=l7 zw0Ti*YzcwJ<67`2e!P!!kGDXv!G(RCYigJZ7~zHF5doaE9r7m46ad3)6XkvTlOFsne)Pyl&G8V>vK=t<8^{Y>pJ-Fs8zUtkI3$|fLmsVp*~co} zDEgYIKpR;=-t??>Zhl{?zT^Y3ArIx5rNiMYi;sTqG3fFsXpPQ+w00y)()Tl;nev#- zV0WHJnGuSG^l(R8U4EQ>pE7QIY-hI)&1LFBb7(94@jnt0XM#UYE>rz)OIGNX(14)e zrVLTw+~CUgxOrP#cDWZOD^Jw6CvFJ{-Qq%@k($-ZY5g+>bRc-i5(0!?#@96>;)ID{ zd47KM%cGxtdTPOYmwB!)OPqiB&z`S7{c(HU*0-`JT=<~g?CS%| zAnTe^eJne@uGRJaqwzB zF{UWi#(P)l{SHHlVt*XLL+wYd;B>5I`ad5Vn!eP3R;qWSDvnp&+nw^`2)9X4)(o+) z8D|cW`fnET9S|%ngg$a~3V6n(ZqM0^F`7__Bmrn z=3{EjLtAPp6h@jiIa<8NMrBHQV#USwboOm?U;BBX^tjI${nsHZ03d!T4I6;zQ$ z2^*c8^MHcMOSlHa)W>q#xY;!iI-;kJpn@}b)e?Xm`yY9pF4?nFDT1EkS&leZXCyC* z45C17%nc&8&IXt;9*}0Rx3vjJbmxQmK~^T2VHWYV1rnkfw#AQBjste)nrcxu1A-+3 zvOG3CW`uGinXFz(i4zVkyHt^ed6{EUR-m$f5nm<%19jxt>;2P4_;3upP7@7?bP;*g z9D@rYvpNGAr~z2GADKpB-B~V+pgZDHW;uDjA;J+OBX#FO8zEO?K(0nw{Ft9@QOgoB z(y#|;=@66jPW{Slnwa~W${%)RH)J>M8$<#<92~Q!ELlK`eWqNR>5tg}MS9jouMqe? zc7t|TdX%wUCY6oS!WgcuXKZ#gGB4PMGoHt2l60`TO{SxCQ6;-UpR#?N7sWrvRHamX z?G%_2s6ViU>lRArlk^NHR%?>#BQKtR4$E*PBnGLP=j7sR$a7w-Gi{SRwB z!+mF^f>L`(Hs>9pN=8-_&D!po^BbMNa#^9*Gx-4}?vu*kHxKhih#5ZW<_EOWG!nIl zeoi{fd5eK^cf&m8cdgp>g&Sxd#3mRvpWPaLs^pY-gLXa5lUSo0t^B1m>lFQY>081@ ztaP2XGN{#fN}HkG;Iy9d9OYTcINB@3AswSNq@23}yvYeS{jPgMxl&os3N~a0e{W~g zy;BhhE;4AbusirUBnMsP7h}q3djAy%IAf7It4Be38(FtSdsKUrRjyz+0Cxk}H(5Ru zy`$d~I~+sSBWu$kiLMnl_3fPvoWiGqY;r+Q#@Vpc(G(K~D~k*!yD}G#vbj8CUp$WuwCt? zp#HuvHP$h^F}u>ZMBN@h3o=V#)_LYVO?fc3t25NpwwNQU0laMOV3YufcFJ6*CQ}4Z zdZrT;!(Khry3l)fG%x}Yw|P0C+JV^s;b_eA1&RIG{R~{(dPO-^2u1jVIiBPWQne<_ zN`%}4s8_Hxdtg$+!Qd4#EBkQ-EwRmwo_Gyxo;(=u^hD%=)55fr$p#E005wNHy!6iRm&RWDa_1k@6DIBd@X#NN_n-dZ>RJ!y|0Rz7X8)BJzWH$W z&avOj-Z}cEi_V|^=gYBgUi$atg|8pA@!r31#^-;Z9Mnf=oDh3*ykbic4w^S9mIK_?c9v}I5+3Izv$eYAa-t+ob-9^s}gs# zrz1|Mm8?oGGL6xQDK)4zJJT~Jp}m9}BH<+K+`WX_RqbvYOVz8|k5ry?@>Ql~dSZ#~ z>G_0;_(CiOgo2F$Ua3~n5MbNLl=g)7oMqCMn#Q!D?+|uv$lIJU-PdiR7m?$-sclqO ziVx?aF6*>(>KX@a*;;1vi6EFLzM{>1SHpc*J9ynZd8}+L^ve~EwbiK< zd?(IQYFHTm*f9>#RU+pXClfy@`02FbNCaw2Up+*8kVGCWjj@XSj4mG%)6XI($xoW9BR*;8&$TH-Yqyo9~!(t!zb92Dk80PgJdca<|^$Fw>= zX*rf?C+(|4I^`lGD9(+1@`_ZTzU`iGb!?@bh>25(IyHe1Z-_ygbL(AY)$BDzX~Qd} zPTYX?x0P$Hj>7I*+Q11lL0bhh!1u?yOXDVw-X|@)MMY`&hA>V=G61+x3(SOYXDOaE zv+;>bVQ=#ynt|!GOA8$GLB*s~ca`>awkz$Pv@{i`Wzuy2LWc4_z)7oRr5ztMh*G4< zfFdyByt}A+{cNkyb*rOcn@g$A56+*9J%ryqNWk~U;St)s@6J(<4Hb4?fTWgKg0SQ6 zA^=DbPdqRy?Sk6IQ%xe#F$n-k203b_sdIOWdIfD8(mB!jxTu21!86Gk9LRJ;`l~*G zfHOzEOpM%Xc&su*T^W7NqmT|CNYgUN++=q#oL1+@U^#d9n|E*X9+7?ribw!IP-dXQ zrQyzEm35*2MMmG=&|qRbBK$hVfo2TVI*C>(quVzAK;gy8C34|AxH0 zh6(hDzn^KUphb?0I%deZ~m4|zA zRuNw1HD1_KG+pg3(X(i&`Tb^|7dW7kcwrw2a&)#`+Bx#t_=LBSI|lMX zEL8olTyQYVzFlj5yBVEBdNtd2u~!ponn&$ouO+tYj+BeMkelYw%{e>Kb%OI|WEaXM zjP>!UW(Zf49QUu|aivue!|&7RLmqKOsd@RzaW%z5&wW_7uzmq~Eduvj@N zh+%{$vliZ#Sjr?UE%1i}_+VJO?T~h>oNi^cJ^myhF2?(JH~RIC{hu%sql~h)glmRx zH34zG8-cMKiBSP=eGd@4iKWRslbF^hV{se*8vdBuyM#fknl(nh_|h zL0u1W6aPVb-%UIC{TAHpG(Dykl~LB7P;EG-S*FYq`v-9o?<=VFx2GxO9WsCw)T46$ zB(7CuEN;7-{(A^&>=w880>YfX92>`YIqy*Vvzg5Ib z(ppuf;!b`Io~w<-isbhfXd;zGVqTCoQDu^KCe#>m2UTDTki?r6oH)Bh;wQFRP{T`) ztK+vyi=*zV=!jU9$m+0suNlnA+Bmq*n)FOK2a9tAq!td$kR*mF=?4Dx04K#!43pr7 z;caC|&|^;saIr9J_cFZbRI|aZ`6L(b6bAnM_QZ_O1dC@ZTRHvxqj&$B_U_Y7?k|7) z_Tm$_ukLU9n|tAWch4(7lj#ZEl+TDEn+H!ZEG5+wr{m*a;8<@ zW@}1Fx@K6a^bFz{1w%X;H&sy2zr`r%0nN-pP~2ww^`?(M(U=CP4{Nt9SMn0&)rM@b z)+or)1O)xBNJyJ1>&XyW6uCB}cYohXMmTItGpV|mP;17X%n}5sO*=6+#0dK z*WDP2Z4Nb15c3JPNo?{ZRtWV_>21ur72b=Tkw3?n=4z6?vKYY&rK8VTNwyE~uN&Zm!)4 z&bhtu9;>5A+!*nZa?6{fC zQ=q#V7RpP_vE>qf@>^Z_PV`g3E%Wl`qMh2;SkVHhE~%XTnjAAPZZ?#Qo@IX~AR2}W z<6|cB2-WBHApR$Coig(IJjALc8#V$a|0i(xfoNRj{`*N29v|cX_;3HpQqx&>HWW`c zpe*bU$)utz_Hj|1gZqwYBee;oD7e;1a>(npLD4NdNt%|}nxjP9XG!@`x4}7|gW46= z{vwA5AB6v?D-)e)g?RG_Wru=QNS*PFK_d8jkl^%@<5GU358I%nxf_u zE>6x%vX6?|R1fqmb}kNK0v|tap6pwrvuk`Ogabo4ILgwI+zg5mb-WiROD)^N(WXLh z#fC1UsM8Y1(o|-D(43ZQ!|Fj5MYTB7dPucD=XQd zDQn9=(QZJP=^PwM_z6ksk4~k3AwRUzb)e}I$DT5Z4eIU1HqI~wT|O9;d8pf>Q8KKJ zY^Wkkj7kJWR0#o^tNEvPCfT_WgrO}Y4|UvUcf|-0Px!=l4%eL zsp|^TR|FOCt)BHjOwnLVq&drU?QGkQP7*X`;Ajp-QwItghWR{hFM?~E4(h}(Heh~(?(Yau?Ck5?cB{yn8nHYN4D*%YoMUhhSaM{fx1@F zjVKWF7Lr@HT)a_VReO<(v4jdwZ9#URrlmM910>nZ!5pH!yT!ho6(3-^r0{46W)gO3 zGsg?Y2bh~Tc$M4AZ^l0-c};%a{ATmoozi*2pLK?vQvWUPUiqgs|MyVqlHYp((-B*7 zHp{XU1%^_uic_1%K76S6DTTPr4e*KYoX`f%h1%h#5t7%NN7BlR{ZV_gB(XPPs}uY< z((RS?9v{~ElsM7KA z7tX;!Wyrn2kSBTe`|mfnM(-^0FV>%tlZ7C>*hu1|2i0fgkYcZA$vUO`ob)hd_<>_* zwjNrdJ9_QwUxj1<%`?L8>c zTUP->d)km_Ul?Kj*uHoaRpMac90L|7Gp!d8maqi@CX)9Im7xBoAh&!0gE*=U(j(<( zsje*4t+&EPk|RP$w#I(>WR1N=3e0;zcwIgCC#Bt3xOmSV2 zOOnq-vzi-WA4YZ}vz`q0X^=xV9HJ$m<~EBKp|??770lToTQPBL3m{IAHIzzU2t>A# zVc8WTA~>h2t1V}KKQy|Yb2aBc*p}m2E;Lo*c-nfI{k&^L-~@7_r?L?<~4yIXDj?o6V`| zNQ*hYIdv+#!>mb1)aF+e=td$yfy5Ef3S97`2tn?|JToE&J&cV%NqaQro1knrJdP(@;U*ur1XI41*2gtvQ+u~Gj_=Z<(AFUaX zM_@4anK&gM(;-}2>U7{)Uk`@Mr1)Uf#syrN={q`cQ98wfm?G`mXD9;9SeWXB={?y5 zJA`D)&wwjS?tx5`Z#_HA+vTexT=VgxTwx_7gRi>=KBX$hbE0c}L#hfFI|%Mo)KydK z@u5G*c6>U>jOawpP?Sn~6>=K%u=&-s=>+2jb#0mH)_au^XuiD%gi5X0Unqi`a&;Ey zMqwM}!0?|-1XVo-9U^u>o@PL8*|M6XYR)**3h^Ru3Ai?4epxcrk?|LI8Kl0sgzQ*jF&q_d$BNzYq*`ED}-wzJhuyx$qpL}M!Shut2 zud#FYt6#`^;pG>`1_QU zF*RAMWHi!6)PjF;Ho5p&h4`;fz~p0i=XR!n2l$cT7* zS%_p)CD`U41#+NrI-(+mHYXx^tY<%`2YpN7@V`?ekDKb;b(|N`Ii=+6awID*#i@RS z($>?{k(lC??Lf_ncDp*+;nq)qe*Sv}gYy?Vu7cZ@9a>V31gXLFJSBC=J)Is6rxBzE zi1o;|brf<(jit%eGgY?ZE1-6|@k#KGEM@Z_@5vgqz~Qb=eAYRzy++>IVL&;bU!sm^ zzK}-iDF&B-elG~ULfz}h@@P1~ATI~!5ZdAe)S+H2O6D^J)|(m>?P|55RMD<&c1lu8 z5aLV@!4Xa$GO6^Vf)O4rU(V?oEwLV6K}z%Ypb&F>XiLsuuWqXX36*6zNatQKlaWCB zKYnyR@wbOUke0(5(8J|q1L4i-Rn#H5L6I}LsJR0Gwskv&yiO2ZJc+!>SfB4mkCl3AcCWyU>$XwOZ4Dm1&Xf zTj*T|CG?GRi%GysF>st1ua4cv zd`pPxz13-Z@s~Nr1-tYcD{XtZ@5|q_j90t78PoVwM82!1_r`7wdqXAgTThas=0t26 zo9Rzo!W)W24=A%b-40m806QPUDo@{dSIZENzn_NNbA-ubJz5dotwdfrqZK z4*rN=4@2-rR5_G2(=obO4=%3!6%A@IuFeN=VFvRP{8hv zYj;UW1q$`u6$7)>f4%k1Cuq?xKRM;ls=`2K^g+mVmPK{bHam$5I_+U_z1yFqVXvdq z1-2+T>1MRN8?NEpVv7Nzm>J4`-kr2{hFQ?=dpk=iUG=p#Re>fDs#>*-1r!H7)LV+_ zK^wFMcL6z9^fjoW7Bgv#vrH|OCc$k)zVoZuAvok@0M9UeLPonyXBmrfARcxuFikBzBr^nXtXXcNtxn*WVGvbH0< z;M0yd^Y&G28Grfwv=rCwMK7jo`?~D=36o|%zyHlUuY9%plpM1a+3?$1%|*LBpXKK- zV~xUWg_uaYQ3iOK_nP%YyyY%K`4z9uG!OFpnopl_Xtg6z@of`x3q<7cLqoaCZ#~;K$v>~TxslZmt4Lx zF3jGr7PYkjr0E_f@Q}v9lUzIn#)GPiJJ>-jki72-WbUQDTOmbfXEtJJ^97Q^O%4$= z0EX2c?`8+3145b*2PbPV$(1d1NYRIv_~QZl~!K2m5@fvrEWySnV-rr-DZ31L0Pnlx_ZPZPEx)y)_Y+K2vz2TEUGNpFo4Zd z*8X#Fmy%RRQ^z0Q_Ofd}=nI>oLAkFyF$npC2|N#fZn#wwWS*4@Ib$6Q&BNahPst%q zw!Q-kXaO@bEwvQ6r{SV;MQJ&fITZ!EbC-x>icE4abr)PZ(IdE{8E-*#1`0{)WzEO= zlKHm2U=mHVQ^ymK?$NLf5onO9dZcDm`S8~}_lmjQv&pD6solGIe2a&S&H+@Rh ziaZ*+dfX?*Y?w}n)A;6ST#{bxe}lnnlLW4`~F!swG{P=aaE3GdjJTMMlrZB)$SK2eKwup>b>ubag)Cc<}okX9R4}Fqia|X90^c-G-@zCV+Y; zp#4=hFFtC(=eV`BeQ=N0S57zTc~k8*0l5+|+wGK3$>6$XFx}VRHC< z0{G`fJi8|{){Ta zAi#1S(lQ_L@wpllZf*bIiv$@Pd4~&IH%?ZBe3h#W`e5zbd*1oyyHCHY-aIOJ+>A-{ z{(fM;F=gAHinm_-VE>ra$EVMjuy4YeW5+(-f9%-m&))BQVd*vZ1djtgZ(rN|k8{s2 zKKyaeTJ{+{S{Wb5A+#AIYD(`a$!-u0gSH>?ue4r?>n9f|^#O@nbGKO=%$>vBj$Exc#NrLHGWt@UUql7j>uY}u70 zs#^vfx~n8sNuIwnb7C9MA!ZevXT=FryD+9Y3zXGzdj|=m z^?#*!QbTDaw=|v92AM$TAE(b4XyU9utfN#LI>5#pk|T6P{`8;yS~S`@Zk%&qTMq;b z;E$lq_D;Iu8c{SsXgkX{dx{pYt3a^*<_LRQK$V|pqdwnou~{kdOVrKMWN>5kQ#BcW z5=NM=smgGX7f{eC&>Nv|t!b3jZVA)fX%cN$PU85;-y&YpMVCoDIn(6-Cpc<;PFGXr zzn%Mx^xQTjUx^|OH$W%XO7ap%JSx!i_u;3}6)_`d@D| ztv>+&I)wBZ)DsS-6~DjcstYSonMq*WKyU+iY5l=a!LA;?)oeS4Den*Gg;MZbSbX2i zFgw~V|0R&Ng8lShI%6ndRdCP>4BhmEUihA5N(wEH!N~!b{YS9C1X{B+=pBkIHCKy0 z8s6Yo_g8a%;9r6|+P|r?1;99>Ye;_cGPp`n8x|}!e85P!0N;+BLYmq|$x0watl||g z&_hKT>8`7@@gjydG6PK@z`qBv38;cBGRe@y+SKKCv^x>7C^OcDgqhQ%zySLUD3pv?!=+3IqAN~W{A19E!+=&?T>JU0}X^0;fEys0yVbL@FJ zB$j|t7Z;rETcVLQX*YEMyk{jk56LsgO=>cK|wW0TWkGhCtl=MCr06?&bjqgve)8GDsqEnD_t(1 zaJObk;#n6jZmsf@d@dCH;3?U_O4y!}Dh^}W2y-A)-Yd|@_;KP`2{$&n#aP<-2)RPG zOcp8FX@0M1YE#XZB2USS!Zh>qx{FOKE(Db2>%O>*U#s zQ$lw)KK0nsOLIS&ADm3*Y=r>;UHgkfu{0hdhxs4HWalY)b-HiqLA@ObDNc@$J|!FO zJAv6)2YrW@YqsH%vfgljN&Y7!+X|{}R}i|F^Y}k2s|;3@zr{&uuAqaau-zJ~^h{x9ZHoSF&HY_`=SyYY&}b`&?W6@)D1E+eW#(?fS+` z8{Z$bcztr^aTSB3Y4D=kP#pEgs_PWJM>NyiaBA?e1{`dPWEy2?spF{%8;|HDU z(gx8RNvnjf-UDn>B~ne5b~nqdw@FgCVFLi0*BY?DQkCp6n${y|4xKFq_EQ$_a}*&g z6mD^1+bgy4WqZIVX)C&hB2Co|0w4GbJLw{VQIJTUNEsj>b?|W?4_+xWR`De11TfA) z?jL7EOP(I+>X7wX%hgdLf(=t^`$gD&^bTwA-?UZX0=$;P1A9O!C!V@gEGChwL7Px- zt7tk9$zsS86gkNcxx2++TK0wwBv3}Z0&Y?@JE64E-lXxtgR(KEveSJEA}{ip8~n+pEdk2Vlb=zjzMe z+e1uYuT2Xsd!-X>GQmI@z;2ONNX}#H_DdJ)LFaUU6+e24UY+OG`z6e3QKdT5R2yJw zvV23eYh9qpE;lS7*bC8vlD7~;psiGs9nvLekr~=7>QySUIYBdVlQ&x%xIvgu>7^9& zSZg!|hN@_|vqbBy7LgkHCn<8ofaZ9vRDHDIQsxK39qLQ7w5J98)Zzb>m+Q}FUdk)R z!)I3kL6aT_SQtlhVo}P(iWuj~%Y8~me=>jbSijwku5%7PTo`vRU8)^EbDEr3O7EUh z5**O;FJ6ih|C$$~D-WF=rS$kP+JQ6~?RIJ|fGaSo zeGR3C`zntHn|MK_fCSwpi}tUS`dadQN>+NCJLqsG)t{xhvP}O(%$mha((Z9&gI50@ zTkIi^(&fcR2Qtmy|BfDbi?<>0gSOmL&{F}lP`MhYvWIFPVgaVVEd_mhz{E^T*drVS z_c`yL$e;5|W4lt3);$oB2Q+pVFbFL_#3vofV>Fn{xz?^SgG4O5OmS5o^6Eebuh?>6 zIzR-C1n&=Z(Li0YNl~o?w`;(47l?RU+(1w~$viz8j*9F$29zGv-5Mmvm&(kgBDi<4 zT=#Pf;G;68u#7VB^KAy=vgp~XhDzgvBv4Ng+prQUiNDJHC z+60Y_Y2~nBni8ci3noEF(p5HVnhhWY)XS+LaF-ut!XS2Pl8W$zn#2Qd%#8e}XV#6{ zpMGpM&rd&qid+6P|x| z!VA8WCd}}i(6V^((w|DV9{T%^@ngQY99Q|;-Eu3cMO3(X!J_2wx-Cw0 zdB@MA^OL3%A?vYHq<36Rvvr$wrKgcW=+cN(kx1JL_bD9Mlq3@(*q?3~|cK0Wy9bKUHI z_JIxU9Ai%y9O+V?UgSg{w2gJ}_AAGgZ3c;*13te9u$~q!RYnD$Mf5=18q_2YC4tZn z(Ne>u0s~N75c4jE(9WN20g7e~I=GQD^s9o}QyB?8E2D&KNqi5KLuaTm$U%8`3AJw% zMd(4>Dhi_^*17dw4nwe$S`=tj^-zfQO z_H%4j+(oeYo`N;B)nu?&x4q_SCYkYfyqFet`)LX@zLq495*jiYa24GkIzSyx8k9G& zLeojDtOc}$k|;0w@zV!thnl(+Cy6Nr=3Hz?^R8juzzPo` zhHuwuX2!{_cP-y^>P+4;Z}aNxo8J%gqk2+w9~oO>`)S5My+L z+G{WS2V#Rd>}BMimQU5nmysyTYwFs4sJ;RRCJZ#p03xIdAekX(YmVx$>%+=me=1^3 zW9t~t^^21;Wx7=mQ+S0W0V^#U+1uNL-UxR)Ws5SlYS=NIvL(rpzA*9?9&$aP{o=R7 zFLtSZccQ0?AVdsmY02T}k;;0D_TQ9RPN7PU_C|6GTaX?rOpiLB*FYAUQ+{;@ z7SPQE_OB40KJOvJhiB-h;WW(QsL_*=*f;~!U&L(vn*6>#XL#(3cwm$I(605@f*{>$ znCXgx^D{sWOGpMdUiR?ZxgUEC|3i_CoQ(A@$RyZ}8>r5xsow%A4YtsU3o}5Npo`#9 zo5ld=Qm4G3Q;vTH{DM9uDTZR2=^C%n7Wd4ZZDGf2scxERNpdu)m>VU$2wKII=O($( zqKN&O*f&7Df#%3q5i`qNMx;iA@q3>l1&b+Y*=O)Df-bi?hZK{ zqKTL7U$3xvY>KQ}y*&2k1sVx)=71%7*5s|zPNqzn^zL&b#{9hRt&vA(Z%KS>@}z59 z$!E8_jxKv~&sV*h_wBy%@`TZ8+n;?ZwEWBOgHBa-F4WqD^?3IYELE!&#GKQ#w8+vs z@xt+sMjrZlr8c2uPcZP0>iUyVk$Pq^Eji&+tw>)PSqyVkDMw<;Mcel)Swu}L$+iCH zPeDa8Nrc2LMttw;R1)pz_)`G24lYg}#jY(U^K10P_u)V#(hdV5nU=si$~3oP574>Q+#b3m#^FvZIDO{2piUTOB8=I zpo}qTamqv(V(`g)+T`Uh%AnuV40>9_`HK@~L(H%YjmL*vdF$cy5rH=vOLM2YwtZt0 zns(%5M~XZSO?Q~#+-MMUXHjxGGz8u&c-&5^O~p;LVcu5c+)*Wv7=GY*Aa4_sV44^9 zG!jZ2GW+WAGSPPAdGfURRb6wF--WO*B~P(uv8D}~fWc&M1rS2+I5`%3-E|rm-&Rbp=_!sy~wZk3dawsRTuZJ(?+YSRy$mckigsHaw z;B)&4fZfgh?s16)#v62&uy!hHC<_K0{!M~10QI?UG1VfplR4gwC90`2NJ9cHB`9gn z^R}YhUs4Fw^o5g@%wVt#9A=?_IxBu;vJ+Qk^TRf@fxb%=La8lv>&@1JmN14DIZa`w zjdrdBMy$B!Dwvun9-On__mgk1pLnEVD~M?WGdyid>Vo!!9oPINK>)v=W~UHBsagVB z;2^jPF3s-K+9@N)+9^6HZ;+}I+kl$$8fCcVg*~Gf2tG>Kmr1uH^*5GaYX0$F1&9{$1NsuJMh0j%98tshvYvE}M@>Lz2>Jp+jB& z%2Dck9-Eya5rcy4x(aF-R#0?iz|5?+Ic~joW8HdFU@)q%YpnCZK*4(FDu~-(-5hI1 zgt93xv)>gBi8ODJ;Tl zq3h5xzcOazmpNgRq?4o*!)1$QZwu1RGDEyFgcAqVl^U2!pT99Jy#581uRH?6j4n=D zvAglFWt!}ok6?yLP(UDRg163Xm|?9R22$#q0w?i)JUa;JQf9V30a{Tf9UJ1y z=$hbMM+9SpBo(siS^k_>I=i-|M0?AhVK?_c1?-PwG7Svr-R%^eF!vXs@0|s~U z{UM0`5B>^Bezc9g$#T%(ZBKv3lz_FydM^2SjqiwAUyV6^u>8Q9gO$gwm)|Hyk1u;_ z+o~5W^qg&D-=6*YjPL&a`A5F5ro6sqx4Y+rSrLEVUhv{8&sDs5%wx>xc9uqLkcp!s z?6Y&R59$sowJEW)KRo0fX>&dWbGx+JQpC6y)Q5coJ)wj4^z`G8d1NjByD7w{ z^|!Y%R7fQ#^H(}dIuAxa4r2k#gE+}7(o{jdhdQbuh4{|SGSd;I{A)n8?4tUOL8hXq zn6-+{hTJs%RKq~!!eB)^o{DJqg0L)#hsS0oC1OI0`yhv5F4dz0Qqy45F&nXhWXA>} zN`DFm;-chgKmJ`C*|HZDhgg~W!apt`>p;|FG0*GRV*+YHzI z&cmCX=uwN3*V3cDNxn3(Q7a2fMY@YMmn`E&AM*>79}3(a?KvrFRF+*2*UB?PF<$>K=NK`9@mjZ-`U>1EBgJ z?dhXp`XIM6*HW1owXqUtxMJ!8-QW{%qhmTx$TgQ(O`-8GIN1|1snYBcX3>TxvC3IW z2S;z}3=LV+B}HEY`}uJcq9u)i@FlajXgt7@C^Y_Ubn7jTimQ1EWJ0a%Q_6x~OSpkJ zR}S_9W|Ue&RjPYXcM8gu8$z+9N-!y$N@VkssI`Y-z5Eggk5X$bBPrqmEHp8M4b4)k z0upE@>MfK}DTvA5W-Te=MhF1X{)UFS5MFn;-gN*!i?GxP$e<7}2~udr_f5}}=n>Nu z3ayO6$vi^2LK~n4-(*qO8l$Ugd>_A03dJYCnL6_y%s3VW^&LosTyi}r)S0p%M6c2+ z4M(8D(@CB64+3~}o|KU1R*>9$7KPToLo1`qb!h}*vDzd-RDq_Iw1?ZnMKY+3dP(&- zWdLy9!BSgi5oz8FvgB(>_dyf>JkG)R@OL+YM5y|-EedjaUI`OZ7lk^)HNSZUw;&#- zG9T1~Os~Pr&o~#?d<{%vY&i_cPN80>pM7UGfs=>m?bp*%~OJt|JvU1u@Pbc+%6?oc8xW4VGHeQ_oBzMNwT zsHDHh{+_5X>3_Bf&4wIE^kF3#?2a7PF(O|-u`=vs#(Tfh|6K1^3eBs3Q3fYO%ojJF zAK@C`Zj)~qO%q$7O1SW#OMF}J-W5qHPN^$<$X{q~D*zJ6}iXDhwH>nGk@xo+a5QB7~X_0H=TJ{mD$O6}$?+u!jh z+i~94ZNE=b9$u-cS&(zY)SG)T#kTcqLcCPVTAZvE5?qq30DfE*I7U?hNjT&yt20y? zFvuo*m%3^~p>ZKcZuEqC(gW7wx$j9mQ4k49DX6b!Z)kyuskTAEI(@QdLO&q_1A#8~ z1_A43n1{{YcmSaeHpF^3ECPHp9ndXy)H;T${H|P^IQ|L(bIOgY9oDnqA=7#AE{AG_ zy{Ra<5_DI9_F9~>#H)IHxmOKB6fj|XF0UKh5O`P~4_p#A9%@sa8DUc`?AT8Gphnuj zH+}dD$bXePtx%&prLLKMX-^AL^2CSfO@rL47o*Kt=?un!ZByU7Xw*NA+y25BYrqajMls$vmb+n0F46uH=s&uGg=Y3?sTd*8v&)U zd0J#1RVac`)|jigMCEkA$zMm^c!nF%Do?WU4y;DDk-BOoy2hK!lu-~r?C5j=WOoNO zbsU(dc4%A2EsK()ArZ|b&leh+Zs9X?_-4SO|im6j)7u4-+`TJA@WT9SMw54GZq=HPPPWX5aq+W0Hx?K=K0j7yxe zMcuWBkf@**Ac}D9T=Hw(tIf^jemfa+wv3JTDVNfD|i5KQLiLtfm7FXIP#aRro)!s4(&&kL4Le>DS|cJj=Kt6s0X&7V8ud2g zE}o$0Fa#<^bbWRzaK4}|sCZjlp+r43YRxmgGs_zQF9h9@_2toL{LlK`y8Z3;tnYn( znlSpV%f9V*U0ynUp?=!-D_f>5@c7`_i4&JK&)#vo{QH@&-F)%w*Z=yD6YstI?e@QS zq`z3`HZRWQ^s1`Ut+Lh#?_z&|2bdeYV+C8IFpnXcxqutXy#3UY_J{E7AE_>@?3GX?sipr(%f zC-$>D%{$?oL1?%R@CYlY&2boOhk(qbVY&5kdln@#k*;JXEY8bWaA6|v|4OoRi0c4Lk&9)@1MkET+zj+z2MxU9OD`Q#H5HrG7|Uv8-knyGTrI%Rmdogel0a zm&_4@P$Jokl+jgb{^ABSVZV8bF5%-avi=f7Xatc~q}v5@ZsxJhhb4VyrkBASqlvnV z3&;yw#`^n|j;n}qnNyeiyHn1~TipE{&X3EFahYA0?CyULWJ+5E3HM&52i-cGtSBTd zK`5!jHuosQh0;7}xZBl9aNiiW%_-6sl1hX_>)pMA{x*(*#AO8oHG;w-do)$16Q4z( z;{dnFZf9WpJO~!>q_)d}ewSG8$I_teP3^$e)2D@aoewwolin$hwPo%eb<|}*udH>H z2ssakotLn}kSJiZa0f%&fftJx!{oG~{fRB-{n(n7DA`A9f$=8_vuwOzl&pj<(_RN& z-Uq33=tBs$xd>?eAd^JFW(u3L%}Jt9N9;r>V8;OJVn-5Tu!YUeF@-l6gbsPqJGRdx)DkyiZ@NBr1s<4j4Do?aQ35*4Bu(fC%M5IF#CWF12)zauE zG37|C9if1mV5RQ;KyXJc@uQTe4+X%ohPr@@LKhm#(ydIg!C{>g^LSXH!HDulT@&us zdk5$pR>epFv?cjqMMt}zbN>KNLlZB8!t9s1h?9~RlpD+PAgdxf#|8744^89i(Y4nr#^x;U5&S=pN+4M0KBS6<=ZGwI& z=$@pN8$n;r6(o9iO+a08Jo^5feAjEP@kTDv!Gv?mxb;^wCL*Mfl4in9PDoVmH8imu zpnJPso=0%rF@2JVy9qRFIRlDQ)%-*xo`5) z$sc=t`pH+N&wmz>cJhVtSLck(_IRq1?@;iH41=7{)H zd%mbR+p`wKJ5{wu0Q5Wr<-adkdvjw_jn)L7(3x^dLv){EwU-LDUjfKh>;OZ$U#>j# zR{vN*@s&=A;9{sszlsTiU*?}Pz)?9s=sqPUR747+um!kNU6)TujZmY(f`G=8L3QRB%&;PW;MNH^%dXoA zYIFS-C11*F5?J^VdZ5mWZ}~te_Xn|;Y+i$P?$Q@0hhtlvqzNDUl!U7w@M@-NE)8G) z1#-1G*6hzjqjJN(M*|@6>g}_Jw-+*a-GcKbeZH48e-mq|rdpb)2qM??c zO6>|EsvotF{cS(EtF8X~?lYDCavITieyXdvMQX#~sw(T<<5xJc_w`I=B{YzV0{g6) z@|*Rh!D91!CtS%;B2s$3L4xXcQfTyn`=X{%a-zqAp;l;Rq{W~u}0Vi-%Wu8r7EXuvs1B2W7ji;ov@x_35rw3mvDxIx21U(*8{&!qwT zKG<#M!_>VVD08^@Q4S9$lk>k&jX!?7{_kKMueFzl*&9PiM94;l9p3SmEI-#-Lgw2{rdH?wz~;o*&)(wPb}3bkD1hA z;#6k7#QwYGb9L%WMiED7tdVu~7(kX5*g zg{iWEZKVNQ6+AFmn_}_N#}be|qGuln=7D=sgIpcnQw50ntrqR+KP$?JMq_o?tIT(x zR3kw}Vb<W^!7LRyjj%ia`dyj*P-S4*l>%}qeocey(n*US0d!#Q^f+w|RullsG zkV)d7HpmW4o=qxZqgvRMnsXtSA-70>A&+4Iw@)G} zZx5;+^bYuu_v^=R@~btZhu?5qno#`#z|i_)FqKlXT|MsSpDVDgi?*238^!d$*})JbUD%$jAUOH4Fad)~J6ZtDFSTS#ZO2zZ#x(^QKD-{GUkAp2 z4QrbwLO|{y%s3IYOqN7(%ZienL@XkeExZgS=20E0o99z9kzs2@SglAY#hp0Pxz1Lm z4Vq#AqLq{fJD-vpk4OVr!S$si#VH^k*5ul+XQ7>613#u7PudE7wU3iDkFeAZ?kBg; z(u+wR7JCbrB$7Oe(c4BzVdNf>|>(<*l%7M^-QcD;2G=gjG8zA+m z!QF}o7g|F77z?urQ@buNN??xDbPlF0^Ra=}a&7 zYNGC>F6K_WQX*H+6j^}sB!(C|e$Xv$_MAM|dnaeTY&|iiIeapD3t~wvN^z-(ahg2d zr?hd`-(nh_W=|>E=8_-diO-@; zm3b{AAMZ-o;*{+OnelVGI@)0c+~TzPzXguMU;g}kOV)C%ITCg&K%q#g_82I?{K>w* z3ZV~5_hBq@7XCxn9qN+#S9&yfNfO(-aKKJl3$g|SC;pcwV>k`q2ypFG1Gv1DoY3%l z^W^Y-iUe0OLD$zHnyIg$=*@Vz#SpJxedHMcke+D>Mwz{?7&YC%g{6+6kJZ~K14qi0 zwU^`eHjzxwe*I=BkHR56*)`q}i|KByg5Zq>)Fr@cJfPKq@R!1M+>&lX*HC5Pa;2%r zLQx>pO(x}G)HMeR93E=ouwpL*6+~O03ZkMg*{KHW{f0fi6;c1}SOo?fg*mkAAgSO9 ziP^fUD_nbq!W8)4U=iDryNZ;`C{47lWt(qz!u`ZKhidhpL3g-57Xs^a#3YA}DXhTo z{*ndyxAG0G)L24S;WL!A)cV2cxblL-esUxTf@F6ye8=p1Od8qI)vg>6t7 zjJ1C}#Ev@zmBDH#exoI$UE>v#UFQ=m1*7Mq6UcM}-<&F05VRb93)!?7^v337aANdn zIT<{Ox7O5@8Rmy}wD>Rg(*^{ov}GV;BYybj*42|0ip+2SHa+$yt@?wif62c)eqh)B z^j*i_{`UDdKA5)Z#@1 zn8n~mB%D*>g4WO|ei!&CQ%N2AC*QY(E+;blr`XV#I|k|q@8Jg4jA2RWDlke(T?SmH zPe~`+=FeQ%2V$u6dOOo*$CbLL+d0S@>RjGFi|FxqH9Niwq!IO6vHc~SlV!w47C?co}NH_$A zO(?Y+xK$yKstf+ObERkFrA406vZ zAVLWoZ9Xc|l(jJVYQhvve-g{%4D%eKKG0y6gQm$Y0dKdxptI zS5LUm;&L^Zy(Bp`61g%pU{Z`CU6KPmI*|q$r$9$WOa0tVO@tw@@bC-H)IG4N-??S@ zjj5y|LqVcF*EQgz$}~pzUek#(i3iMWdP%oQH>+u7SwLA{8rzTj)_kd{sEp%@tdNBY zP;)@js4}((`!D2iv!*Ge41JnCTeyVSYvwhvw@W6mndFIhk$Hp;y%5Uy={{pVo^U5x zWv*9{k{A^Tj`+qLqubN8>VhII>?z4K)-pj#{27QPP`eZcv;EP?_%0Ts7+@-4A1?8O zT%m*XM`qS5`*nU=f-4_u6hCEC36=DE%YFndd*7XCMel2Lzc+kBhwguU9H-zeHKjl`Ty$)QfG5~%nOJrv^-&53v__Ram_1loN_v%V-^Nm%& zKk^>s`{2Yc@arU(^r4*#)4^;1UKUyPmoB@2kEQ+X3c29(H_G44{Q20Ls-F%n%bT}4 z;g!$*#)+;!>$>sw<}Z$=PO5nEWAA65neg59#aEu4FzM&5r6rzHT);#oL>MbvygT*ouNk!-#9d07w55VulP_%`5uwtL5!^$h+w z8q%}m+8$V6v4ev3PpI%iVZ$qH30+`F+pz z0h{C;O{yrn7Gk(woSKP&!^ErVY>he(QSZVMDnL#hm^!=o<_T4LWyPB@jjj>%X`ahVwoUBkG(D!#jTSXO)rp_jz9XF$ zc&)Mghv}|u*MlT{a&@$3f^*y#(5^StcTtD~LTZA;dG9Fr=;a-wsA{|9)r`%ckQ5w1C_+DAFEfVEd!xZ7a2w zT&B>v8x+C#H0o%rbS*&$c_#-heRUuUIKqgi_^UVbl=a|pQXWH(C_^cP*BMEZ+fas} z-WTvW)KQHeigkMh*wo>$HQKWj8nl)qujKO8(eULE^Qfz)a4bzlWO2+}gGp@>g|<^q zkB0DEzCD0$K>?M<)6Fomvp%}26-7U!&JgTVVwVyvUhvg4?W4{RyxGa#!9~p#zJMOl zLY?bzkw4Oq9vwE`g29-5$VEDk3G~Unzj_7Bw;Wcek}AN~8ct!)teVSD5WA7P#YwUt z)k%U(g9MyVyJ$HcJ28g5foF=8ji5|7pIlo5+7^xarwBBE{Ub>+J5wZ<#s5EVR{{@J*Z+}1Dx}hev}vVMQI;v{ z(S}MrD$BI1lu>rWTv4f1DoJITc5O_hvKy^JjFJ#$?1N#(%wYC={zvco{Ga8mNZsdS zKDX1k=iYPAx#ynqJHO@oZK5JAbsXT)GLRx}isE$!G!D&on1;ULd}cmUrn}X7>w7;L7?Q5azp@rWF; zC7y=sdYsHxmhV=UAEj76spkjD;v>`{&$zi|@PCQLVLDWf!A;9$FK$4<)82Tp z_fzH2RYZ)Fh{MCAIIqHghu&RT-lE$9AH+Kg!YJ_|X{h`UQqs>-emEf~M2_{wulIJU z9r{w*R%-gj^C*wkv?m4E=XV>>VcLoQ|;QF113{oGrL!B0~Bfr)7KOcmHx+6@EXk}p-4d7h~+uywoh>B3oI5U1-+ z@q}YH1Ge62UYfU1ZSUTIwcDqiyuNS$`)cP6LtEre+_|>&<^r0=GDVHy8cIi$PlW!a zKD@&6)j2Mlm@vkK=!ynRN(3%Q76@yqU#61`C3$)~4QUQF5Fr(jSmQjw2;0mQkjH|RiN5f;{*1D= zH}xk620H~cNRUrc0LAZLfJ4eW1iE)cOYvxN&y3Qqx6wBRaGSiMP^izY$_D(IJ(Q?e z2DB^*j_~gccV~d^jbGyQv3y|@a$Gt-*-2llM)5&72p8VBz@`4So)*wmiL}@oh^TcW z)B@Xh({3F~AU)hdFeO?_Z2~e&VM>)o|M+<-_JI8QUPfb>Tx>NV{9YzQ1+`~vUE(Lt-rTq0QGS_y{D zjG&iK`M<^Kruxvm%t^(ey4gOYWz1YkT#8c!xw|H@tccbst$WHZfDlvFcqEqr(m^0I zLYx@^A#U;|43I(Xs(D|{*obEHA}%1;rACeTX<)s`IG<{dhVt6;k@e_(9wTbP%WCj@ zh^p`NqvJek2RWt6Yq{rqHJRj5J6N8C>L{A{a?I!pf^&%t>+yO^e05|e9L(FhGcALY zdYn*aDnhh=1$l@}vgAufk3I)x`jz3N*L5=*Ko>+=z)B}{)ptoSlPVhE&O|5y*g_+b zJ3_Q%!YP1&A!LyboS1}JcH+X-C_}ilZ+gKoJHPM3-%#iLM^xHh{>|AzAQk08@SWQd z5r#|&j7~u`GMjByAH!i{xQVut#HM65+=BB^2P*9`X)5c>E>76k-WJOL!izbb0_Ne^yQZt?Qe^aqLG3Tz7;$(39UP z^|SfSm&sf=Jl7q5IS8(2AKG^-#*dV|>T2HZjDRjqP#!P^7=j~hrpjIs&3V$*oit%m z0)}{OqZG^pi^v_VaD|gyz)pP&@z`i25grsx0mf$j*nK;2?>CU*7mb56wRuF9e*(>a z&JVk!{%1g34TB;gJyeb=^qY{g1B!`FX@WI5S>tMH8NO=J*j`pIJ|?bI6&pvmn3C`D zFP9a$;v=*II_lh*Qx+R$`DAwl1fEdBliD+#m?O)I%IINo#uV`tGLbKF;vx0+B;c$Q zl+0U@Up50z2@K^)E)dqES9xJkxO;)&yo4yiMl_Qb4W+~XCuaHsZ4`1eeI*GoNM|bw zrDZaXxw40V9hXak5+ZFzH&e#5OW*;emZ zajdyUTr}^*+bbIDugELSIDc&3xVLM6n;WJv_`%r=dpw(pkA>`Y{ryT~dG@0ZkKSCL z7h!h)M$TE=d6Vbd8GSo+>(yo#mVcRKGl%tFRu9G}dRME3cM;h%&!K(A?EQ1!*H%O! zK}0oBY3S6%K{2LX#mU~n0E8Y2Pd^sw`{zSopgrgg(T|sX&=s}iLUz&?%-Kny3%es5 zspsmpR8s@_7?S`$guV}T5{48HJMvHo)|F{03dI=~L^|NJ@6)iRLe*9XEVDycA_0Q7 zMlrD_ZayN%@oTj&J0oRy?t(G6n5skMPZru=FpkIoRzJ4b)Q`EA-E;u?! zJ1}k*H60_g5x9IALFqIqj@q=NjDi%8@I<`{Ea^)h`i%`&Fze7Imhtu zY0&cqSc)B)DW2Da2xH&~&w|X;zd%X$b(LERuG0ocwP9;~FH<2q!;kO3--dqZ-9N6H z`_fm+NdfJUwVRRNC;0N_eA$q%DDoOYFMKbcpBTCriUfN14M^;JZ{b_#lB^&Laz`Xn zre^1iAuQTzWsfqJ14qt4Bee9l*4v;ef1UTo2r2 z?_XR0N@Vf67_xZSm<%i@9K0Vb$Szy_7QBoWWl*sKDq?2~PU9p=1UL)4#SjmPjlN43 zn0I~V%RosAh6qB#l(a^bKb$YghdI{QB(< z#bducotYo5_rh}MgUK_Nt=WElY~lVV@2A==x>4abOk=L*7}Ir!O9Q&EWZ{WE4nU3i z)IFY=9A6?3Q9lXf6vjjCm9mGN{4l7wQZxycQ&O+_kxVl*n#w(qivsCVEq6b5V~+;< z2XFD6CrE{my(Abx()B@JG1Y6ByiesWO%G8LCnc8s5~*xC6c8pZFm9%@ybeW23gT_) zNP1QMVKuTX+ndKN${pEIfS2Yd7aO(QZ&4EvZrQ7Rvyv{v=*SBzicmX*_jXY|HIGGIiZn8~L%T~RH zAFY=&Ov}Jqd<5Srv`>W)Q!h$LoM%epZ_1|4FCwX|T{!PHQ0O2=(!;VH1CI&!bCq5* zkK<;bNBqKtf!x=1w3A z`|+~3I{N=o2Q_7K zfG}F^5_X|xP^`1D^Org2q70w*U)gbgpN!LWAz!J4d`Mc*d7GNP`;U(6pBVDJt9s(5 z{64RaK#tM9!Y~Xr8>t}85mX0N!f}9)!|wG=$ce~mD%#O*oK?RHlA-o5hM>2rimfRA z=73d+htmRu(utwBhp`2SA&aTGC@1p+wG6YEiPOGS(h6Kq)g$1G_Arz7)&c!HU;NS~ zkTE+#c!dBF6_QvO251eF*Aacrl@>n&)HHYOETVAEF`{$d5lp&~vH=)2Cqxd#2zQx zzKHAnDI??xq)k+a+rcQs&c=UO&b-x#;lp|a1o#$6y!r+~T-Qc6J!xTDu%<0|Uy6fB~+4Xo71d zcd(*KMmrk891Ye4h6@*Rwd*oo`G#|}I2yQFqz%%W!oA$&I_7J`lYc5NwVodhuX(ZD zqjqAdhlW$CvVoJLmO+T>|7X{I(P6R-t%8$Z9$jr3^un-R$P(JBZ`F$L{;Xvolm>*z zLG|_FoqY8OD9aD3~=B2x27= z0CnpRgEC3$i9cdoYEzVt_hjm3OUpr6QXDAimm|LDHFPZLExe$oM75fHyfDPUTwD$q zFr*)2#(OyPJq$NSAbg-&Og~%pKX#jMWVFpt6kaxzy)})HftRHsj3Zu_1aq<^g((o{ zQ?LqPi#7%An4JzJQ6OMhCqc=pPjC4febl>stW7UM_Oxf=jc{pUu&||>(h;9xW^>3z z0wl0aEJ2hMdVjqBmoTRLF(Ttd8<}W*eHrF3NqRZ;F1+W4+7j@}yWg<|eQWH)0`(dd zaylz4LWb}TV_g{puzsINFhxMLoq10fIF_T)2dC&q2j{$T*PhWGw8IGJV=jHT6#NO; zd~%IDylKd~?T%AE4hgYYm8dc*?c&0VpFd2PvE2UbmQcR~=hiO`pFQk}^1268u4-Nz z@MwVcijhZ8`b;>!<@A=P3(7_(z8PE1WXDRXs?N|~6R55a1%hf~a+%1SBfif-%JiTR zoetbAF+^humiq$ujX#Za8hFlhiS_r=tyiWq}H1c_3q^46mv1QwUFed)g*zcVdCkFcHrGB2@)@Xf4>QtTK{F3Dleg z400n!41Luwhq`K?q6TVjB%mza>^ndeYxFSK#7cdGtad{eln+M^SL|7q#cxF^zo2*D zZB(z(gd0m;Jap7FPf*{=$=B(@|yG4mxH!E}X-v zxlzWO{DrB!ruy1M9lr`Ki*8pK#Ov9OA`O0T)J*EbB4%<-LgggQd>V5tdWlz^Pu_q& z;kjPmIH0jStqasU(kYFUX~;&AMx$mvV||FKs==((hcz$0nXraX1o8&bkDl;h=_K~{ zTrKJLFh(Q9oMN&ODVv{=3jwK=dl39BgU|HDNlofO@UMcJhS>=ylU&3@O1YSlg# z2hsm?+K`n>H&rOILIJeC8f#*N+8>~!5GXJv3F)w&LmRQHXR+j(FPg0u#|Gd5N|^dx zBIKPn*7sM93gh@=T)J}{#`8c`RB!eCGnVH^{x5x{uba&}3#jppWEJepufk*`C;+4+ zBn5(uY^)5U?tx{3*w`YF>UEI{WyJpI5PH9+`3)*(Yz0-f#N9C7N%m z;R7TTb5XG#NT5`J7_44SoMkWv+%6CxGJzHw6dnowSUmk=Vx={A(3``6}KE#li4GZVdTT)s=hVeUs?|r5M(2E zje*{6l^jXVB)EXC#;%qn!4BwqE2`&PK&5mdHkhdao8PF(8fiK_q&r_~h@GZ>HmPJgcWI*)iWgo-F*67x!r4YtsAlH<79f;%a0RQ+bGo8m z=UoCW2;h8eup4S{vZ45QTq}`KWsELn5^>GXR@H+-l{rKnm2RJqLxd{H1iJ!(6TM5; zc90?Sj8@anHEb#wD$+OBc5r`osNi7Zr~29gvyQ0TD9SV5hx&Z&+?RQ`!Wg`UakMxh zH_eR$5MEcVQTB5(-QOvVHAEq{N+#tmxtNWFb}v|@e?chy0!tcijvQ}@kF2CQSJkVM4pML*t(714$b>ClWWxUkp!x%Y%3N?D znjKi<%Rt_Obgd@DuX$sxQBq)s!GFM(ejGQa2coI>tKydio5uUSB!TPMo^GM zV&Q!SoOTt({3{?y##QKZJkoR)*tm*%WIXKfpZZfiy$){)GTRZ&|YFz9A}` z4k~pIp}yDx?Yk;>++c`ReaSp(eG{LGtzw+0u8=9F;yW(bqY>#XQj9hJ29Vk-utkdz zln>q;V~t_tz9cvrd>%*YxBzza#MAc|F{p1gA$>D(e1@$E*Zl@#7$`_v(;kr_%$W{M z4f!d0{TtDJv2yj;KYVgojIK=mSRPWf3(dwDE$L1)y(@~07Qvwiu0VehECZL!TMsMg zbblhcc;^F^l%8;YEQd$Z(%^)w#$9%%ji4(9>#+!Ds|2LANY|nfyb8m*WknFJDLe&b zOb7brJ2AFpbWc!BWww%W>b@6ccrtG=3v$gnPIxjS7n3b~Np*HWlwd1DUN&-o5wn|V z#^p1MsI5{-8vp1x^_tac*<^ds$VM=Y8gRqR-QHroe+F-Ee(p^2&A@xS%lQ{*8!hl6 zONiDQtg6)8A-49#7=wXe-h!!p@V{ctVaUm6OE4H6jP=rG$mwwK@EV z?*E@@qzhZk#Q3hyIMN$0qHelaU-b0biV0!kiKQ2wHJV~OA|+e6*s+?B$wVX zjw-IQM`@BC0jqxwxxHOgtW6-+WYGO+u681%BoRaSuR-!IG87L`*dFRG>>PH>^m3Bv zzRaEt8S5H$&4H_SbfB;?!n_d_s$Is;lQtCc#1aB&0IoXE3$bfX`Vl$b%%*6ZPd+&M zWv}zGguiaT-!MXsdQ=I+FO=-WPN$DyIf!&K0h0*sRV?*j7c^HyzEMI1K z1XOi-3UVEbqWRjb6z#V-`a!nzd=Vwqlw*dcHy&n~`I1NXIo=N9j6{EJf2BT`!RB zNiP0Wo+?zMLXy*-gF((wRgYQ)r_`?}OBu4)?KxO9lWbRfhnm&(!v>S@4rjhF+&!SFEl^YeucyBa5taUwFV@8|R z;G>6qieg=x7SKvcMZB1_%c9sZyDgZ4#kxIS3`}#$$uhJ|pv^7nRaVBAgJjFEw?d5D4; zn&^r`vME|sG1!d}aneaakyY7XLXNqbh2WMIO36qC#;Tb4V;Bas%5)*86`v_`#b^M)FH}b?pg=pU z%pV;C@tR^%?d6(`RhS`F%U>u5hSA4)6~f^)(W(R50R1LrO;K0w zI8VvqLbno%ODASy8BPJ55;XuR;3V#8yiA;V6X6$h+SS$SH8|RY9Aok@MPY-6LR*oM zriYKUkX6LaU^pj)m6(3iCA?*nmPARM{R>+1D{a-(L^+cZW=2qjVPrGN-6W!c8y5A| z2{b=iOKn+D4Ywppkj6V)62({?CMPNGqA)$A&bbWFzz^IVXUHDX3-!9Dq)%MC@!%cT zP#ffP3FC1bVal1B7db}{s}9f_WH7{Obm|rsOe;48SINb_k~YefDdSFiOa6F z<8-7{!cZxPBnu)_psQ=AzE!_R^{=n|a3+P+rb&Y`Q;iugwT(6$rQj3NW0dGQU;?n` z(->1`!Q(Q_#1wq`T@ZH^Q^E#i7)2CKkqPvGF{2z5S?2WBD$|d)`wWt&gUczp5^@R@ zq<*ljOIq1K6j)-bUUQVD%@A`25}-KsgO&ZD9mWSvb;ZW+5-3!qIJY9Mm>R@P!{i7u z79$&)@hiKi$yh_{nI>6C282mu7jvM_wWTW~H$jK}n)m5)(OZ47saKtLA%4c6@nk@H13Y6xU!yJ6h3 z==Wn@?dv5yfRZAHe-m_#;iOkV`SJ&+xxUu(#b#clmqVmVU*i@xfbv^dccQ#}ykBXV zu6YBvkMYRQeW3 zCT%!6e^~MDbxljccMhL;J@Kg%>$m_P54BQ2vT2*){fLy`|%Xps-PGRS6b&H|8Z&;$AYC!)BH^b}6g2stdW<6xxK zpZWiUA^#uPa(Vfm$%>b~r^p)cX$|0tDF?(Jf_}mOM&171l$OTuMkOF)`;^H_S}F)2GEDezQOL{?H2 zVs6IlKB0uxq!>`!H{%he1Q6L>8ss`_-PEMangHQ^eIIAhkeP<*Ntwchip~6ZKZ|G{ zKMH>}@G>tvN^LrIjc8AntvXE32+MW}2 z+QlKb&y7}24$8&mYO<;@vXAF~38ZQ^t66ZGBmnOVxnbvAW%a}f{FhkjS7^}xdXMH& zihf=9Ex5T5ga2iu7`xDikqTAdJ|c>REEj&h{fU6$y)pSdrO3ENJ(|w|1%<#uf=p26 z44IrVFl^8P08I5^IkL$r@$E} z1Q*mi6Rx9ONj*`-{U1}`yAn=0x-v};so^|GVPV!9sDFFAnnM&prkm6fumH1p?J5P_ zNT_~?_*b?|F%0Xf&#sXfN_tod{Y??<;<{uM@iVoc7dC*I0sSDf{$il}>!SX%>E;T7 zS@%Y~jAG0uQzdtM@CSa4QSqO5Nk1%S7{pvnXu@U5dL%g0xRc9DlDeE$RDe;$4dRR)JY3U)S$*A$PF6 z&r!Jy<^qcFmLa5Y%Sz!>2Mp-RvV^M2KM%iL`w$;2hevZ}l3LFLQ+6vTI)bTYbfKc~ zfn5+I1G4nm17C>f@#DlteZBo)H4ghRh23fqgp197HknNG1?XlI0cQ=SN-#KMMVPTDI@AU*$yWfyJuEeD?pDD}SvP?She!my z6v{7s4$JA$IT?I>#=lqJu`(cM`}K8%2U=;8Mj4$I zD{F{#Da3J{h%dM7NRrL{BzY&_FOVBgXg%WN>|#3+#HA-Zxo-$UKZW08C~3-YU;Gg~ zPyQtUIlW^-d6u|wvTN4@e5w=juK+9!V+cHvL*N>!=A6_60Ww;BYk$F^`u0AW#L@0S zvJ4mE9YCaB{WtKA_)|Dk;SECzfh0^!<@_3`qu$5Q~)72FoSF#9j5(P)) zo|ze;t7f;D`|)7o-kG%V4)Iw-_&0Ij@lsxJhWF zkWxntCu=@GDz7!jX|#vlSO2a}>TxKDh_?*R;#M6!V<o&yrq)+%1X1xdGy=X5 z43%>dD(e%~znv3_# zNd%M2pxe!r3>G&+;J1J73xCD`14?zPJnIwGkOeM+=297E!B$0#Ag&E38|^@VH4w8>;}8BQf@db z1-Y~yh|T^^F}+>q#W+AVyMU%MvU`NEz75bHFD0%kGnaVkQvuE^4Nby~nw~|fOT>GZ zod8Iks+jsMkN%&{FXOzfbn$C?1uXo%e-=9E+fzDR{$~@=0vuf5eUpBbR_=cdI>it{ ztr80(@sZ-uDooM*L@M*>9Ap0~cKS2314}sy7Z2mxfU#NyMgBl+)K| zZkw3|aRa{wz|^%gzn7b|Jq1K=6OGR0T|;%L_dv!}#qV^=uQ^3jkk76=swG$pTq$iJ zNktxm*Z21)g_|3KRLZiG3OpS;5vY8@9IFbVF-cUPno|l)NV}h`OpJZ*^?0q7^)Y7F zaKrg)GMcZCz4qa^c_ZE(88TzG{^Y4o-qbByy7HK@_mo;^ORbhYmw{x*?@gC%b`M&= zcKAAtmrh=D%Zon~XB?<%jHk5MblP^pC#KYe%7oz%GPWbfqzTXqB#gb7>gXT{ zi!O;~C}YnB0_V?IGu_L}vn9s_S;9*|#s+cy;-l!RTDxtrVk#$;LuFk8l6Ej3Q)@}| zSa}QXqi9_|$XSk-^vzb%Hvpxtv^Jxij~6BGKoP%lR7`siVk&9s3Z6x0wp;?b&J7&d zP)vCg>;hh>GGyJ!GKLa$UymLRL-UrMxY>$9#;NMp1bp^=c&M zB@pIbj&)^vIR&KlLc*dZP@CIB`if;g>MMIx8cIK^Mu?Dxxjn?6z1jc1GM@W-N%;ch zj>jn$?fS5?P9ExjEklI7Jc)hSIL;h!c0_km$71aTO^lcEl4YFSc8p)xgq&(lkfdxp zAG|7ba2Gd-etkcdPl1C1M%%WQ9+so}L;5%iV|k`;5bjVq2Yt^kuvLvu9>?=7sK|4p zcE{+LHv#=JGN9@UPf~EQ7=5yV9rs0hLS%xe|C^SE%?SmbnI6oRowo75i~Z4oish3cgC{FF21E`<5YC(`RgHDs7p}A7wOpx(z!XbvWO}(4{$> zLA}0i#viQk=#4qwcTN4_vsXQpJL()r{0cq;t(z-h%*RLp;}s%@6Mr-iV$ z;@mk@P9Q5Q^@ZPN!DVm(}EFhkg{apVL(uZEL$_c0j-t04fx zhiD8*P>K#8RP7KziQw;(>#zDBTv(#3I@=Po`5+?~L&ElNr}Grxh32 z;>DvS6i@?d8Fu=hwt)(dp4tj#f$fq-XMkJaD`9ijqnOhvqsco1A9JU_sXWct9(a+v z=#A-VrF#D98q4qfeUSkH6j8I=FFPdZ*y1|wQ~cR1r128KIX56CBn6Y$u?oW+T*UDb zUBt(HY4A%Gh4D+i9APxKoWl6O9${dbvIj(Gnvf%}XaXbIz7+UoW(U|=?R-2@u=!1G z^_~xd_byvH?fmv(6Bkn*Z*}Lazc+BllaP@k?q6N8eEHxHH%70sQvVP-aoTdTwQ3tW zG>0xE^;9@UCA=vqQXIZW$~=#cw>VVYKG~?5cq;Wq}>epN*ikt^E<#M7g~LQ7L^1 zqDmhquR{`x9L9@4eH3;API|B$C9vB%TlyAMcT@LbBzrUuR|w=9Q)Q|VQif;RA2NII zBj<-pTu}khD6K%0KODjp}9}z)UK*>IgxzsV&@SU8rem#ZH*kQm+}x z5bIMccz`(*yH0bq45mm<;z+!=U=en;9G1g%5Cur%IY4#l(S-IUt@ihPr#8);-wbPU zX`o;y6-u(1+IBEJLhwFZTFv<3iMNltFM%_{&814vNgzT-m0^a4%S1nSh0(njtTR&3 zp5$ie*Zs=}H6&mhV62xDYNx1>**IPy*8EV3VwIT&T3+ZWaK({O-W43u`O+FKGb97V zCt$lwBri)gCX+h!okVv_qEcdANN>jBi0M3jlJrGOzG0jT>Ge43!E|0sQf8M|V~XK~ zoC*$I9CU^&I887@&vEzG8@-{<$$lv`e&c$YGe5ghXi*<_iZ%wfTT!bh=ctiK?GPvB zul_YFYC)kTFGjtlz$Ku4BL!qcYm0!SQ9zAT@Z0X|OxzA}pWGN7juC;~B9@8*Bz7Ov zbNCbZ>6fBEm8&RZqMvHt>` zH>Z%%P>vZ7bROstCHnR5`vxRbK3ln?d4O>dKyjYlP}J*lI8#5KDFX&-No&gx$vFU^ z&)+^woj@Q1l@(R^(K^XFLvW=>fA$k*+P{5MU+q`n^<1R+%{icI(4$8EYLVV=(#H~% zAnC>k9TCGDdtZqxvL`1cll>MV8S#9P&>ui!d?> zJsN_{Xh@>>a~0d$N7ifqc5H~2_N*~y=gclt56oM3;@Qxprn$m-^GErQ+i!FKMCrb@ zbH-|F+Srt+{WfWx{rP9QV=L$H-Lb_@MP+E$fEMU$XyOk3P;o@9FfygRMuOfEN|I|to^c0{%jiIUOmFf79AI#R8RGDP`XYM z-epC5{>d}hJj{`{&vZQZu;~`sIwITMT=3*&mW2nNmBxq{JdM}1SDq8FmB;_s#HkD{ zZnEA_`q-quAAMA4z2Cx}KRt&0RJ14t|4`(xko-*az^3-aiqtv74Ne_Vo%H?WSf^&a zoH%{Zyr~Qi$mZI>VbJKa1}$%%$d69G_H3NuRa0T-({S0NrE+5xmnbg@m7A{|tR6f_ zUR|Mhf}Ew?5jka;oB&S+tIO&2H)D-njx%1|oWT;3>t*;Vz5d^+_osO`At#EE)uiby zjovLl4u<`rCJ3LKezh-j%$PKB7u8G~8Bx>w!~H-Bcyf?7Q_;@5Lxv{bycA z@6WJ5ll4}M>YNLzT7;(5qrYSbe52N_+-4sAKDd1b__H`*;!lpVzf}_M$^9&v_18P@ z-$JUDIl73Qw7~%u8`KSx|Jwz>YPA37rdPw{tf>d1uYi)&pd=y`O z!hZI2&IpAnX_Z~;Lqq%=Ur>f^T|*Qew52v1w+cC(J*!neAGvSyK#moGBzUwKrNmVO z?_V_`exv8N(xS->hg_u0OInTTJg+RjDIk|d5?o%4YT4#8M6>_;rGMk$`oD@5WGqBv zRAh55@OG^NBY%2D{LTXgH!@wyy@k>eZ>ixH1mkhIL`|L^lZ4xt3+lWD2)1u*h(XBFBy zOyR*0^{t#s)d}gz=~WcoE&J-*?0cWf%gz17;aMQyxLC5Su zz`dY_AgWfq-SQeJChd1OcWm42Zq9u6(nq(vBEYA@^B~JV$keH6fWy;x^X}pR-Uy{v zPb0~X7E+Sa7)?VLGPd)t7CP=v`fRqHKP<+#A~UxsYau6Dq!XjR|Ku3Uck0`ZsT&=+ zr1xrw-frc&R>%L6HR#>LmI1n-@nPtPbks2Z6%e0I)f?-+XH$*CfMIW=z3M*>+8Vp? zqt8qEyQUqT;o&mw8+oOhY_Yqm`K%!kr`e;2Niu5Bg|>SX?DTN+eA<;+9q(%!Z?q_P zM!QO+A)_Mu6_fIWiFc!UM@G(`xQ5I2-L@L> zV?12zgR4lPIkt|v=uYK#?@%I`9xAz(l4wzNpydoX@ImFLcF8Atl(|FZwldLb=alvk zcBrRa>oNPd2h`Lj4-5YdNO|r6DJ@vtM;yC`s`aT^rzF0SxUv za;XoJz&5Eq!Tq54W8US356nv}k=u50u^wK@!`!AkOyiF+`?>8^TU1A zlDcNWv6q{HB$34u;w>c5F~luLMk3a!wfQG?NmI4aA|*7tOM1f`d<-Cc8U|Vi0D1t) zoo2X&X6Smjx_!foKYkvjBdcr&rr1Ak-|&^BUgdm^Z4+NCJ90u{Qyxr4#FcXMjh7V;!@;CGskLrsby1dOdO)Z1GSd=%`N09W8d2*DGZ`>H4Xl7`Aw0OhLs`gK>t7j*tW|)O% zB(NVCE+{!s!R>BcHX9h*zH2=&fiMOO8!D*pV;yk2NTaAD#Ww`N}Pyy%)3Q7qowvMcjL_^44be=-vJjRU%-O z2w*n{peX2g<#YF9)`o)i^|Mn}KW)3U#XWjo#pR+lka zJ32nC9AY7PH#+la#B*HsE>_^^z--D#y!nfGqwt50t{UAHS&n5&CHOTgnZ+eEq6B#1 zWc;SAI zx;`IgRHUBy6T2T=#YyLn7)Pro45cIZji&N6;-VU?&a28jf z`=2jZa489@9Vj33s2@UFR{08&gXA;jsob8)f8KeQv@q&gu(^5W{+U}>&)gb5aR1(c z`yU0*PW)~mhaoLV0hw(h4*;Y>(-H<+?{d$iNeN} zv_(`SD(9WE;qvA~O>~AilTIW>aG1Vqmrn!Zskxp^oLKKd`oVwvls_L__R{3~w(;-h zoY|wSF;wrm-m>{ejvrHhuRd|CP$nM<}`=VStoVY+esd%5y|6Cc+uj+1zu9JYd2$RbNp3j1;Z}i zXI)V*Y6tG}czDR+vbd5sKdbAqjcy(l*qSH*&T%Wcb(t@ISGsWhoM#eE{@D5Mt=Zy_ zw?iAq?xfAM*)|a;o9OGw8K3ckpN-)r;i4j1=XRB8Ju<(ow)@_Jn_DT<9aU{!j(ken z_)$LTj(Ou%JBJO(!>r3*c~V*iCB5xH)tbSXqQaX?4bp;~4k5d*tc**DSkpSDjHN%u zOr?tLqVTrGjZv-SbHF!wSgC7iMn%1$_(*(d`_4_|ThAi(J8cgQCw-h;Tg-buY2nxt z5tel~)B{Hh*F9Qu@Hnx8v6}*1zABCHbt@i4t-cNORcQWtJn(sV|?rOhX0M^rgi0JxBg191_u;_Hxj* z)d9=K6`%APeCEzgYkFJ3v51KdA8zbhiM$JlY`kIJZvW-klmka-=q|6haa=fUqQyxM zuaO#R%WJM3_nS6R=VXqR26wHZ&dK9p6PvCnE6fbZIXU6sMCAuxPrem{A_8cAeY?!) zHVfQxxeF#LCn<-_RM1_1{Fw54b-l3@msuUzb6kC>#&tc*`OE${bGyaK%$8_Iip#vl z%-0vac>0bXCe3IG>RxKlvhLPRM%l^V8Ezk3bUb!(c107bQk`~QZkU^~aPG=wYla_Q zIdS`WP~geT4b?mYBb{=_@; z*sF?DGus))YbI9hy?eD}eQjlK+n2=Bgj)&;w?b@J4}`zCi~Gi<95bI?I*5Jfm_gY~ zi^;@;-5s|W? zSh(m`$FXRC5_Mg?k)|W1>R=)J!~xR>9kR-%`Yl5Dzy)?sgr>g!RA%DA7b)BKObKOt z(7jV*|ItO?W0b}6uEOc9M$s(OqECA1g9fLj90&+FS{nKB@svmN%R2`q=DhioXpW4$ zd%1e;*5-|=(LRsjiee~hmbZ62Ng0u~l*JD?_f`Q$P; zLbcP)kezNOz=}mlLOd&vy^GS_DLHq?KiT<#v1Ii~7KQp7%SP~la zi@qeBGKl)>mEm0Bl&Pc>C-B=lRi89$;jiAMpIu`5OjCG9^){A$#}AT{yDMJV5f%4 z;m?A$@7~T#ntAuE&VDr8;O6VQ8=7Omqiu1nhMU>un~d)7ei7!pd;SWYw&qlOMrCBP z5MN&_!8PI>rxhA->HC|HUW_S{JGmEsKt-USrPLmG?AG%z`#lp=wYcpOGcHvxCE~a3 zwf^+`9D=Te72&xJDM0Y*-OZG>tX(;!bH?xPj0%;vf2p(AA~E{&Gh48UAkfxpVvB?jv1B3ZE|pFO)Bys`x}Dc%j}^ z8|6KkatADzWbh;rnTZ1YMG;QEW~ySUioCl*j*YU1rX2K{j+s+4buCNfV}Qcb_$7(@ z-%rZz(Y%?f*fJN^u_8?6!?qBwOB1xekrWyNcjRiADf&cl}Bz0 zJ~sb6wav$7!j$1FPAIOQc=*EEY1@Xcx3pZfVugyzbUnQ(lW!h5a^dXR;s42ec<+c{ zwI8+D14~AgSUWq$xY*qmAe0Kg*u=SvhB`bbTeFDs=ykZXU=-!Z$+F;}v*8XQbt9dM zSFOodwxM#0tSv@PzrEB)epw;Uc!&@ECi!ZKaod4&k z-x0L9P+{cQ2LuVk*R9IiJ}W8#;?bj!)@K}_SZQ2~b%fd!#k zS1)qn&hn^Pv*8x{-a$ zEqcYi=oJi$-IY_$fA0AWZy&z0efSBV6E}TMJUi%C?sHEB5YcwDh2$&6ACP6K4U++~Jqryft0Ln7h3uv%vII`oRqx>I@NC zl$Jg!t9W1Z%?8db?cBf5~Q>$!Pb!f%pCG71iyq--WvP>LQD zPvn{w__jB(@6ZlxnXJt@pmxuWJg?OT?^}UX<7SOkYF}1*+ZtIkdVUBOeso%)8FqKyv63k@AlVAM?ASQJn{C`(hGYQOxa@dms7V( zM;w}Ubo^?)-1ToC^^z>!dvf2o>sxN#88!Xh@?Mg*Wl5feE&HGF6Y*IO1k}R}uxjss zEqBM*ciUuD*dN<%udiQnFE;Q^K=jebgm!xs+w~!lLp;uF#O@4^JXJG!l1ZMN{+Q=0 z2aV2C{%u~!xgm4TYn<8{eD2iN$vZ~pO~{@1_R)|-vqHxgd_Oth)Xolc2%Y>~V&sPm z;?QbjV={4}0@n`oK_@!ycc1uA66!h*xG@5Zxvpn5f9LUIL*Ad&8#~Y9!0N0Pdyb>w zK;K2YNEwvn-%&*z*iqAvYxc8&j_Wl_XBG%l8m zgx$;IvYtvETauIxjPaZ6TBBE#!^qs?y4B&l&!horPhD%G^C|0sUaC(l;_XExC^Sc|rsTR&hP@A^un z$<)ju?>NsyqLDbqaqOEdV|LNs#mKBew_h&E+`NEq;hH%;WklD5xQo+f=%37Ax^B_B z4Z}|6pSaEo`^_CEA_M?qPc+3h^xmQC_r`CC(%jg%Y~!LkGxYD}FWtCk-NvE~Q8#Rx z?nEwX-Fas5&YZoFe;!xyE@oYm z_G7gx?}#))MD{fS;PE8LLQU7GHPYW^T4@F3?5cA|9$vJp_8lX0h_Tzdzd{;t?o6U% zM(h5>Rs4nfpGS{zz9QWby-+E0VEJn=GVqNdacA1h997Lc>|c_8Gi&l5&Le|%r%E*C z9^UH25dpoTuuG{10MCM5g8>cc=E!iYvjEpnu-&`KX*FWhgI7eWIJAFAm!`30WtN>unVEv>~}a8 za#~9DQwSB8>`zylg8}1{vO|)Y2O_f5R#EGnjZ8B|`1SJ%>CyMw=QvdAI-tCLhWFY% zD&q%kOLKKk$`(6y-#@2y+9V8-vKjlFaiB4EL~CV-!I zXT`vgcdt$yx#6aQ)$}{R4J^HLb?nFuH(>d#(~f?=x^~=%eW8{I*4`O9`03JX3#WY? z^p(sxA0N0qpXr?D`8oLaB%=eiQKo|3c%ye0GVSL%S{>+rGI!su ziXpWJeUabxH%>(!N0}z%oA1}%xjTQ|UDIP*()Okm>?;WBAenz|!`;{RX*@v2bzios zPtmamY`8tZGgqK%;^o0E=N=A6CBw8qrGmqLT{w-b&BUOrEb|-zeLsaz z%lbd|?m8-tZBG<1ga8Td5*&iNy99R$!Gi>Mcb5d0Kp+GU7Tlf2-8Hxchd|@rK)+7T zxp(f!ojEh_{WEWMuc9b^yS9CMSJ&>Q7f4*))m&Y%v|W?>tZW^CfR}JrSB$>Lkg$#K zL!~AQ3mXuCqc>7Etmu7#6sLT;=SJGP1?p?QwYeJ)yK3ublL6fVtukvJCJaWVdgTm2 z{2*O}9|!pRoYfV%&rZNc58nm}K2Z1LmmXm7<4MNC4^)vmGl|8*$D6#`(hej>R*JoD zxwOFc1~+JpfssC%zIv&HA%{mk7%W>2Blj!AClgrUTQNcWi81(E7r4bHSm1J?ySnG*}OA@An?xc=fl3X8?o9QEW)T*^!$ zuD%v9q$?I3T6%1zkl9vN#L4(V2U%>WC?>`(34^^`_rb>#AaJNmJ2-#usnq&YsmbS& zUC$$PuyO1*XKQKc7CZFECbqrj!%SHnRphU~U?(~`ROf4^GM04-9Ok+P=PW;ubf%?? zR93~w_==Jm@_ai3FmkSy&JNhO{Z{qzByDYS!LC0`(KcZ+G)l8kT zF&sCm6oqF$jX^_T!LIz)G~Xnmp~ujvPI<;=sBVkBO8`FMYOSFP06gE>)D3bF+)EL~Xzt^Uso;%C(xWb{F#ei<5WJJ@etS(a zp)y}|4Yno%bBB91wG|ucyCJqF#c5aPw&ewVDc3u(L9Oj6xug#Mi3LIfin{wA#V%cf zIBi@#SM;NV0~3lL_Qs8F5q0!g>mWyIm(&8q3dHaGT(+QIPSTZ5+lW$FW=xeSgE-wA{tp`7zL@^h$&gSFm zx$2zjw9dcRiNOPv+!^c7^pc9Y_uIM1*k=kl-+vB~VLZsVU2$X8TVC1+g1&=&C5~77 z;jEJoW;u1MJWe=MlX%_=G}e9!uqvzvtvwX(Ih}hXudP~BXZm9*v^u5Q58m$^kP#VL zc2()2FZav~7#EcLd)QPGM-wRe0Ur9ruEyfh;(vCDE(*6E6i4iwy=j}3 zjmYc#NpvZ**>#3zv=t6wRe4ZmW?Fea{1f{H3u<|><38~6xeeJAE2dK(_i7D8w#j$& zCmFL^uC51qQH7a=t%kApT0?4%wZv|GfZl~Wb#E~3@LdJj`mWpAdGn1|l;@+AZNnE} z^Md{JCFXa4eA|X-p!a-v7|?s6JPvrbP@V-un798344t+$>TN1lr0bUk+|%amIhXX6-SL>7AmiFFznMSn z_9phU$tXl;;(^a6n9BWF*<*3|jL+H6L`NGmdgab2YE#gfxplw@yi9D(*zviZKWOz8 zwyCISXh6JKO#{~T75UYy=|bjhGnQXM6mleo->4r+WY)?+-Eso)-df%IAB`qz~aT0iC%GUKiM;4~a6O zo0Dtjd-|jgoN=q0@dvmIZypkqW-@a9!ybeLpR{-Hx%vq*3S0tLJC?_^kBIboVkbKz zgxJPG6ZXRuqh(}?Y5T0zb1S|pCKaGVAjX={=T?Kxx!uKswcG7fY^93bh9~0zGo{r- zkbh#NS5`Ndd~)gSBfLZ0jlZ3CsZNS3v^bJmCbT%1%jn6~n`=c1T%Qyn)gRA=6KYP8 z$=aEGM_RRcci1Q*SUw(mQ1hQ29xsY`cNe4`r}<@70|Gt-#5<6fM2)eLd_N{+M{jhG zBh6lNu?w@hDzvV#7~t^K)O@3-JyDwku-*!nm-7aS(kdmsrQnJ5uv1{3WB~)VfiLq|_Dhz>l^0%o^zzxWx%# z(_BRfnsyS5sdVy5(i$^#PpP?rYjd9EGbrWZ$%c539WR4~ucJL|9~(yw)A`$*;+i&e~Vc*Nz^*3ie>pY+6dE0DUF@{W0CV`P?~#li|^3+x_aY;h%?+k-|?8 zDSAm?A5s{h(_dj!hT-_gR)qx$=gmuW{EGIHKDqj6j1K!NisSQaUgFOTe?}pJjz7+T zKZN|A0+K6I7^hMuZ0hIG2f={A#elqu?KmfJQ)SGB8&}nC4XIC;#Z=8*iRe>+*)#WH zg2T@g^UNlddZ9)QDBUK*1Y4ge2AEAg>fMoh92Bdx{Ja8(ZQN9FK+Z;SAI3QR%s$U7 zQK?5c&rG$NjCnj9er?tR;@I#bJZ+2iG?Z>({g1+ZMh($?8q(4vOnV2Q0gU}``QekTGl68Qh9$xv|-4j)$8JfZlC3l zadg}?&O0dscU221Q)7M_>DR`2*qT=dbHz1gk8Co2#okTzT*_Pi=Txf_t`7-6VgCMe4Zmc4fmwOQQ1HMbyru-2un zD1LiC>Brh+P~id!u*35QHz>dQ+c_l7nW?OPTJxl|`;t@2Eh`rWOZyTI`4wqt)aJ@Z z5@nK(p*EfSe%42rTHVKiF5)o_(=VnyTWZS@SkHw0<{+} zB+njRayz7gl(eRY=isw<5^BvIYIf$_>aLVY7C3!=oJ_)TPQL>&>%TSZkVU>ky_&XO*yNa=Lbff1&ZqhBdUNmo&31=CAit<=W$-HCWnwQBwTzvA79hOaAK?F`>r>%ThVL<0U~)OLmc1>vL>aGub+9!g%=3ijI-!_% zR()T=y3NZ=Ghmi4#p=2m?x2eT2EUjf8fGa zJoEe?h2UH6PH4fq@C{&x@W)M3orvACp7XJu^S((iL#^HicZ=+m1Ux7B?!u zPA0A3td|dywYmXZ`@n(~J0m=Lb4<1 zgSim65GP7naEpfdHnD{0V&d_Q6)2+%12uuT+o?{p1U=`UporZ#4Ce5*p z4jq&+<83Aciz;V4MhmAQovib8T#+=9l5)(xu~atq*`BHzn&=E}r^C|cCKgHrf;JoT zI@pjTKKI%8|0;=C(57o%Cj=6U#p80S{Th)AuSCpjxncPVTLw9mPj{kcGWee+RaMhC zr$sEAQ#Paw*!^)>tP-2Okab_N1m;!$d_3HB!-{=7D(TM|zoxjw`wxfH#DYZTtzS-U z+fW3J+Fp7HI%=la`E)Pkq)iAa75*ZF%H&f_{Qs7OTqj^)jt)b{s+*1LN-v&M+ycLb~O7(n4`3lV~pJ zb_8zL&Bbu!v#FNfLnQj!W~YZ+i>!FFIg{F{;9W64ilf7fWb)GZrVr1fUTJ@zEgj4t zyB{(XIl2Nf|Ge`DUz_dTOg=c>Psv^ny-P|R(Li4&+XH=Hb})_N6s7f6stoQE9mbM5 z)?)SPuIooz5#~NXtRNO*i-Bc)yf%*EH+!Og`SmfVZEnYZbf)RMoF!n zO5mJfgmV1K7jPB`ES8H>U?yaLS+TDQ@Kw?cO*ONRGea9^;=22$cwv(_Tk*I*7Q+*- zxo(~W66M+t!^^O?i>!^suY6=R$<@DkBm>7Rfg7wfH#Kt?!;|yf@^!AOq*sng=01JC zWSRxrBerboO>;=qj2y3ef;(4y9zs!YBgb;HdCPui*cu%yI{=XUY4$#3cU{$rtJHKQ zZ>U}W7&-J)uUUx&wACgwR0iE%G$Y<#T4k@AXFI%Y_2|sBxi{{uz>hNvS-6XGjsCs> ztDNxg@bD??Nik_iSe5sD6nZn&dcwpzFyu38ZT1h@ac^s^x`1GPd+@&?P!%ek$XO<*;NrgwpBaWWk4xRb1HTx!W%mE2;TxxCUUBC)AszEES zZ-JM3yWdG8_^2ql$LJ*j6+1yhr!0!JF&kD$Ji&iER2p4-xw$=K4_=!k26r1#BQUaS zM|8@gXc|{ynJD7?Pm28Sw#9YZ!{I&@GJbQQ_7A&Bo|&EJD47R6~orVfQAj7XFGEy~dqdjo9mm?w~ zY)UFWdL93?_a0}p`FkJ!Y!_s#hGa{B4H%>&zgp`w`rjMI<&^E4Z~INQd&&*qc3^{L zEF6D-Q2M6Wm=pQ#zq%d#JvkPe3V3$ z`~LB1=u2zaCx0dpBotCSM}b5kNk+0cp)c9~$n`H7tR|HrHJ^0lZcAKtf z9U_a7MK+V!KEfKFkuP=c`buLs&Fvsbn~)^)e@r@Mkl-2lSoej(X7iq%Xg6+wFJPqa z)`Vw_tj6i_OU!w{ZMvxWKTV>rxokO!pYz{oi$!0N(s{fseY_U6Uz z$lm;fI++hgzs=mtlDkmJ*glhX$F4sk;UPw^w)6>-N zo80>*b7p=i0mG|UmzK4|2PigEdAZ)fqa7U$0=RkX5wv5~MFyL9>eKOZdxe=EoNRP} zGjo+CWgtDxWcH+P7=q}0gequSOL0`7A#+Mau}dPC8y)pg(_581CFo2D{qwAOCl^!wv|h~=$L6njpGi5HZE5JR68dv@pMRFPcizJf-BStuaXxj>p@#!n^Id2-SrNXmJJwZe}&PoNoHdfQ!;Lb1I#^1b#Leekbud>H#m26-X{-YmI-1HQTzRH+`5O?gM9Ub^3TqbrV*Htw#k z9A)g=&k#9gOW4cl`d6`n!!l^U1Sk(P+kXalfWB`XP67&O;zDyPCeGjFc1_iGVHvKA z3a;L<7QlbzLiXJ{gPUGaX6&|FQ_x?Fnj3wHh1@<%qQrMAzGbl5xj$aafWBGW6aTPQ zAer~cQz(kB{a(rH=Fo5560iBfUenuuw+e1W(}WA?({ufhggka1Pxg_2`>MS?kIgO9 zW>r2ahAZk}1@%#}-e-KIYX7cu;g+7~^DOZt_u5as(lup;XdVS$nKix|L_q0ObuEZ} z?ja$Dq(n?-5v&dQ4^PF9D$edYnX}qEHY0tE%Aqg(tYXYYUx-$y41Vg59lKGvhnumS z$6llN3t?0)5eb64GISVkoc_MZ{quT8bYS8B`}VrMsHKTV0c$Z}DY4b1U9Z9|yWz39 zA?@?pgH;3g*a;M%{%sfBe64Z0w}5@8k`uVCYh`GNQwS8Oje{&^wK7lJI^$xD}#AHLS% z3j2G35Jb0*@y>=x7#a?|9gWzOx3;pb%a6WY-&c?Q>eBCa|Gi7U+YQM-@b@IyjK46n zjuz`pomr!164wdsiSgH9pNSoV<%!z5gZWIBc^eGzn*7v(x{< z+P!jFRMiY|Y5>hN$sF-p3Q4q;yQ+}7t105UO4%e5oZBHvQJa>5!imEUW-WaGedX65 z%n|=_gRc$|uL*gw@GATF7IgS^;_$1OyQ<~yja-n9OOWm(2~O(oZ2%2v6m9t|op;P} z4HS0datuDceGm=nC!6Ufo8JC(b5L>cP~ZsOFRkeC{QgI=kOCp4{ZWp%yXyPjOZUgqh3f{wkBlP&mBX=HB+4qZEmb)ebI}@KyW0Ja+H|J)5Abv*`yPe7u|Dv;nHkWUzrgSKI_?tGCQWZ8e1 zOHvc(J|gm$erR!DC7FR_gsc`&A*+Q107*4mnjJ_l04StqhR9=z$TQc^C0I%Edt?8X zy(477kV?{sFtb9kezZ96Pg%Q$0j_Rh*b%wsF<;sR?muRN_zq@dB;1Wk4m&g#f>3{L zonP=he8k-yw`s4N*DNH$?(4|!A00B6eLtU!J=f{dCkatYvykwUi-Y`bBAz6A6dw6t z1P#d)u~kIy=B!6MS-Jbbo(BHXcPNNDARetNx6k)GUqQ9^s{?%E_ZFXQzh-LlS0)Nb zW@+Z>?~ax?WH@UVDFugkhi-Sgo~9UZb^rakPk5&Cb=nrfW#ULse)}S3p(=4ps_4m> zhCQOv0j{ubE1ybDv4G!C?H-zxF6|5orU&y~>2%pS!nKd6>#%)MWgEZo=1c@=3rtviG`EBDk&2Le-Q2N9PI22>Uq@@Bq_PqnT^?C zK-@EC;bCCD7%AGZ>GZ`v!EgMUGs932l)mqNN~yRO+IV&UVeX7G3jf{iz0}S66#n`e zcuI@qh|dq(_;L{WvFUc}LobQP=iu)pN8j-AMsj?`Bgx4Eg!( z2l}f$EmoSUEyk~MH*#|YV~MlcH&u?Bw$2ak);%&;S{_uC>&4IVE*-sVOUhG8fb+2? z67 zM`J6~O+JDihPy`x%j;t+YfXp(*J8V*hs*I}B*5j#F_MF2i431cmzu_8eNp|ZiydHq zwL6ISpLT<=ik0fhtfwvdS8xBe!~CQ3kRN{^{kh{XhN%2)C;bcQ&)qQ7KP~zLY~3M`AjJm zq?qb{eGUVoPXz<8v!UZVXIDd42OBq2V^&)S3$}lFu>1-` zVjTP$Z=S=z?dQ?z?LofWJdt5wpYFlI!2I6D=pw6X^b;BwFudrM!Hl58thL;7^V;K= zWFr4s8;Bk(j|saTJh0id9ZdPrNYVEtf@~tjv@YkX6s%4y;=a6@yczTFlD3?Frs>}! zXuiq0zCg%vX*s$bwwf3<5a4{0&*}>@SB8LL*)3ofjauruzuL4c+demvdP0}hQU_neJKkM zU%5-CE`ibOa;%$4Jt~xZle#x=Z0VR7Xlb2u9+5*#2#lCwo)Y&mDn7yUV?*eZVIScW zFjUFl|72l53P8>6PPAbrC(TWqCuUh2|9SScz4dY*-HL5Ot!|TF?lRTYVo#b0J@qSW zlhu)is>!k&Od_@}n#eK?DW67D7nSXfuHO4moEFMP0glpHP0NxJ>YCfkd)(WZ_}i<@ z`#oRvwj#dea`+-SIzQwo9Bf@qYnL;5P(^EECAX?vt0S z343e!RlY^kZFEdkc3tJoRhK?T-|#v~eAf|95m+<+h#DAya{uXF2kCOV&bixoHOzcf zU)zgHzz%6@qT99&Ok#DZdc?sCfI3eqcR3SN3FWIEvsXVn%=mK}FG&_3t~*{2Dd-!D zzC!XWwIF=HtF1rta``)=t$1Ib6UIta^Yl}~Er+%@TD&O+Jz0D!lA!yJA)k`dh=R1A z?~C(~R8Fl`cCdw6I);U{W+XetQA8DKLv8S117+I*NR?59A{~W1Y-zUz1s5<=YR@_8 zm{oGt@=Q!BD5Aa;!CE0}!awY9SqxA<;ivHY8YT6`mAR|uO~flaryt&HYNnVf&!#-1 zOz{wLbb7{0yrc#w&7V6DJY*R~J)<1Mf6f{^K*@o4cT5@ej1-|%L&#;P70(p2CJZ); ziBiOLo6r=~h0DleRG5oiy3<0x6>!y)HVuO)+U+p*5Yu*KgOocPxXg9UP{_890kOrj zxIGcWj|!iy3%C3>^u!c1%-&Z3K}Rx}eDviXJ>)ZN2cr*AV!`v9>WS8ezudT|T!-{f z@~)_s!W2^>6w*UVDsz39>hP_19h6Z7hc;)Dc=0)~0Gp$1IsOHik5YNR2T-y$R!VZ| zz#XuHg zxezr-#PSat(1z9DS`I#*_uCh zgqC6rGCgLRWUUJlMf$=Vd)ii8B7$IWxr@GfiJq%pviqd+i5_~93w=FYVc*N}djcaD zZO6lYbGdiJL^i|%Q=5CGiTrvhSd;_WenGKBOkpT9ZS^ocpR=w20S|>13Be7!gyaY;X~;nXsg`B09Om7m}#3uzHzf z=^N^ba`g}cr}2pksZw7IyxO}gCy*?B3lpCV?0C;$*^dKx7J-|>lPpY_w^2fV z^SsQ%(BC}A<$tEXa{rX_4OQSk5$czZ zN$xk84>V;>ZvvmqIKz+@Vg-BTWvEJuQ&O5@i*2oOn~1yBc4zJJ?pL|shN}wWCm|NU z#}jz=VRcmUJr6SZS&sGn+J_(Lo~;2(t0z3m-KW4b>^4#{y+j0-V9O}yvkfuo#T;8| zDhD-hnf9o9x){?u=AjEEFE)V>6sh4Zx2Q)VvZ}Wh8T4-`xMewM%d?eW>E)WW0PlBC zQE00>@kLUEOA264JwMOK^?nd~FY})NI4qHzl)2|NlJh2(`pigzW}_;G4|RB=B(4-$ zJ0r?dNG9C@H>83aYwo(5b)zbS&#rS~DRc`=yUo`@qBp-wpFY#L_N}jBVIluwvFw0t zqG~#zbMH=~>gmjgALhsBD6QR|&&7Lncih5gP8K{~=)2Lye6k{5C&LJzI{ySN$i_LPJM8CLG%8-}vq+Yo&2W%b5 zR!%7Ow-;T)1V%)+*M{-1^;j0zFN_8UUz!HmnM%T;2qjm(AT$yr9E1V*Y)tSjGA3fB zb$7XE8C=EGf3w<c?W)S*euKw+@~3KJo66rR3(|~?!zhNQSQ@4q=$4$ z(w3ADl7|FxJ#8UYH2&TdlbuX=g7U8JPpfve!Uoyc5>J8OBZ_Ooz|rkwL(_g42+J#7 zlXh)s>|x_=S?0zedizG)KHJCYDKI~a?uc9`mRrZd)2LMPx&y&*|FRe)ge(R@$2YT< zPatc-QQk0kZzn{P$}>;L@l9&O73cQwwvC0_x~* zi_5{06!?iehVFJBlU$nmw%_((UC&)uoered@*I$lN&#zyT)YZMuq@nm>; zQ7j%xU#rdPaqaE8HyeID^9x-u`WE{Z!q`WF=K1HNZY# z7u|u!RGqYEj_U68lQ#9Mb*fvNE3Ron?u|WKXI@ImeT$+LC>?r4v?=$=cXsBYIM4GK zuF5MNQ!qD^1gwvrXI!tjt|H~I^mNV7i~}Cp ze$@x_W9{AwY?yIvm|$n7d#ttjSv3t*P^yRN05nC4H!8s?sC(41aRvIz6`R z*}N?@oSPO;+)0x%Y&LmGLNDa!b!{=$=CtvH6fE((yZ2;EN8qqFh=d54WF2_ztzXU3 zG4k)Ef7o^S*TDXo%SgXt!`@Sh|Bwhn{-4feJ1-X}Th`w*_%WAO5A^S6@V{Ioze;Ac zuc&zs87m`77#Oy{P_m=5gQu053*=Rml{<^Mv)$io`c>P%dA$UjS5od0BS84!5&F3v z0}Cgh-d4X8cLLs8TwKifEky(>7bb;j%we>d`fA^H*AKaMY&YG+!XV9 z-cio9B>d$qe&s&=Jr>x3NV?obb7bpY$JZna{dds|40HFiKI0Fsm+Yz2%KA)X9tF_H z%Jl1&4)j*;*a`MFlHmOOs};}rzQi@Np|*Kk09#uT9%?7uvn8~SEZ==8 z!pm8A6`r=2ypH(qIQSNwG(Yi`$hj$WXUzHDzkNPVi8!aMZt#N+LGGFF@@~8RS<64% z+J0TM_ujO|+>nb_7IM-4m0`3nvo~{oXKM&~hvUDbU2IqGQYC;tnLazd!g}&l)r8o{ zwM#~oD}J)4r_O2%L6+{zYgytHKYDx*!;TaW$CEqUe2!`uwB2N`R$<;-?}XS^!`O23 zz(}~a1E>mlZ{g7gsE20-N(L?;5z@;-+=(oM!~b|Z3gTZ);9jwY9Du^I%x)`{{*1eq zACy1tI}~}^^wA(mk51;b1C&8qj4dK~PIGE+q5q@+0=_IFQ^ zBMPUb4v;B+t7?($4;gqW9562dtIM-fO^c3{-!Dgiu$f6FDoW^i5?m;XY=&0dtE;5D z0pBmC0n14YOmD0gtZOICg^&B&E+kf(8&G;AQzKfYN2Yb{1ax%=fDtEKt!2d8Qctx+7kAkW2!I7rt4QWuZIyGh8 zhY!!CdSyv}e$7Kx6vATd9K*)6{VMhIdyr`7?dP{-{IfGFhZd7SX)%UCla5HzS<~33 z;Swno90%9J!cQJF*a%=={CS~Wq&*MFUb|d-N?CeD%_bl>p=`cs%m=UxXl@rZF-Z`l zv+uX)-muGWYbT@p{kYR2eL4m7Aj?cWljb!yXeyD`^U$A(a<*bD@XJqje|Mq3t$6PC z;LigaL67D;)BPxrVRYP@N}0eRIHf0!xbLOk+!tE(HZ+1f^o53--42B~?I=e}TlLNK zC*ts=*Xz%}kp&MR0{dWr{cFqyzu#s2k8j5RgXgxtJj|nzE1eI9+-eJQmBVPmz_9#< zVYW20b%eaf>1bsFnND)QpRZvdOMqWr|K|A`=!@KvWR`LaT50!#<*Brjtjb z>_LdHo4dPORhW%&3u;Yzmwl9|o*9uK&6K0nOSP#TB8Q60^QLg5C#A}mhLeGbL@r_h zPlkTd(KIrpkRUHlG6M|uYIgwERo$AA*rgI`-kupY9Q&}21HnS$i>xge+Cx<$-;OjT zthE=Az@ojcJ=4KC31J!Pxuot#y*KYN(Z2+At(X1O5@GQp?w+5V%fM-$%a=CPDpF8h zvh1DU-??S=(LN3EY;5;t*r{TD9PcA(iwgjpW{n@*w2hYVH%^@>*qhQLS2Ual*x?T; zxJcVac=WFiu9b)hTV`O5`|G*9j=h~rNIn_iIkyYg7wsqOC#$&Y<`?=|v^V~RUY@Y& zP&eOrg(#pQlG?NDfj}tdXnV*qN?`q2XyD#;tnsr51He-WqRA~(dBS*qlBCuUx;lIb z+DR*mv(J(iCoaY$W2+(Wh$m}5q$5m5UqW_X>BCQRQUGjnU z`5Hd%oJAVkwDdcB(eJ7&fvvxg> z0+T?!MkPt28`PupJDl-7rX0bhEDLPEP{CW8oYAGm2+4raX&=tXm0C;ir#+XqOZ<|0 zjat(YZK~alER({%A|ZPQM-N_-=+4Jp4%{tIx^E@dc7#{OFX*T@(8EdfqJjYB?&@7E zmbXfe<$rP8oK+aTQom3mE zh}-izg4HssQw!ZQDLs7)mXgG-H%V7;ed58Z!ezzU_hi!MRyTg{rMzr}C5K9#qASN7 zPuw0(4$@>%Vk5&OPI-u+MTF2?g!xI^dBm7#xD)Iod^&7?SL*03D%R+_01J)$ISvcO zknO`zmy0TtP>6Vz|w&9lS9;aoJ z$(w*HTWaMY!!{*7yg2%nfYxfdtkuhvp&U0un?2}gJMJJo4Cs~cdpRG%Ti+QTm zzHw;peB)Oss3nr@-SRq_j#+&1sX{6Vr~KoQoYt+>!D{Q`b*eOd*G8PUF0&;(BqT zT&6>)M3h^Y7IOjTnJv&82)HcvWoxvBQQ6tef#2ze70y`!W^Ds%)p!#$YVJ?yw2G2 z8MMKsIkGRfOEME{qWMfOR9GcxNR3*bagas}Z$m#F^%#6UdJ{{$etm`!71~t!Fz~Q= z$&uguc0MI-t~@I)(yz`xH+!*e`}L~28BhRjr#hepZ7H2~k_jHbW7(j;MXf=^6vce^ zRy42j&5+D~4!g(~@74yb*lDkWS2OW)7I(RC%D=?CG!k)zDTv>l1;vd`xyx`{>pxX& zyIL&f9&l|*VryAsSBRi7p;3!nLoGl0UT;{cA88pegXdT7S^twKN>OWly)T<~;>^4IS2qO2Z?g7iT3GAzQlm7u8%^=? z#DvcZSf^v{(6&m{9d(lm)A6`J2+mzKYTHrxs&bpam!}n#m3zYjtlludS8Xf;dCS#d zxe8u${?wgStx1^A`jJD$P?%TKnjx3i zL6GNrg=nL|7q_pa-)!8ccouzOiB3nkC%WR|!CoDAJiT%j(6VYfX8Le@5It4*rlhHu z!I$2UA%YBaior$UP#WuUQ;4S98wC4o_I1pbBbwc;0fqt=tuGQ#i#scmRh%PNK~Qx( zhX4a4v%*Dq8ELtaFpTL1_2*`PMr%xhYBJC%?1y+Te2gS> zE8}s{m*nYcH+(WDJ+sj!7i|E^jF;Ep8^c_g=+yHb2H!SOC7Z4CydXwq+5CgL$JbJC z`;JLw4Epy>BnQ5Ay9>!hWWa~zxd~LnLKlF;cWhO%@&ZylgjC51W+0UxWHySjscew?z*ptFMUT~wT<9F_9$a0vD(>`m$;{-%IvFKkygd0 zLbS=p8`rwtJ}qbGzN^6Z-p>jEsXkK#>`A=9BoDzKS*H6jw&kqFk=y9kgL>F+Wa?it z6r_qwsKO_Fc#-Ky}TSgYsbiy zU`H_{xI0xBe@r)Sa}roK8RA>#_Dy5-)?1t*cq*4m*gq~(FIt7!O?794+UKBK(7^%~QVeH>-5DQ1rvvpD?-6@8v z{Qh|Cv`jjOHpaRvAsuHACE6HXTJC%1$f)7R637G~2z9wXT|1+=2P55E=)W@erJlrc z#;JazjTsG&+RNCIcA(Ogmhu#wtTQG4PIl00S_;-nDHJObrPP(Pzd)lLC1TdtP-SoX zv`6E-?oree{#L0rwI$AXxH;uGL02#9B|6w7M`e2St%NJB+b80Y#l$X8=E>dLnCrqG z?Uv*{hryG<*JZ3Doi`%XLBf4WlIUm3$6DfYY|aU@5^qP{0M@3|8ugQ_Y;+!F5r|iziyHX*sC0ytK!m$&hti&PN;2v-mvy$G39J zK~5R+hZ`~xeJ&(qR6lp#ijoya=l-Xh#?-G zMUg58kZP)3>ms~2qzg-J8mC%fxWLo$URRYS`TsV)qd|UbZV56VnMdSf+V%7{ZBYA|qP1c{;LSKN7CPwV3=5{W zxcI#b@BWp!?oi6N4&T&BgxreO_x^W=OX0NaqD}?DYl1W>k~Kg{ujecHLE=8WUjlB{ zQV@;^3*uUMM}ig2v8f%~n@AL!#vFz3apv1ZMTe4KHas~Fw_#J0Vt#hTf^W*i}4tu_`xeEKi z_v~p0m(q188a-BPN@p*&tuVXN>a77~U+lIbPm?mTE;fO_^vua#`1UqavX53qSIVtJ z3LVbfBl$ZsR9{5op3}?i8VBXeziP9}2vA+3kafy^txN6|tQ1x^WAJW=e4V1R2Y3F? z)?1b1Ypc3Z|IglKv4kt%aip0U>!OXs2vMs~N73puN12z4ZdUb)J)GoSMUQXa$Z2sr zBxoxDW6qfx?Cp1SO8Gz434i-Mv@_+``?~J)@W8!&3!>oio)X>`#P2y0HEgnyu z9AU;orS-fuKl^(JJ_}us_2?6BQ{bgD93CrGGE$#y@01NcL5;UcdZMFw(N|IZk)4=* zF#P*ms-fggCuI0fYa!SIG(P4Tl{x?eD)tPSxo-9e2|~08Bb)@PSjQ0@S*Icv9TGQf zw=HkIPgG<0$yOGwx<^y|i|$cw&ncG=3ak_$6Bo9cK)Q}F##O0pKZ7#^J3Nb`zPsV8 zRQ1<&D#ds8%Lv)!X!q8Vnx!v?CX{8EGsgRSl6bY-l>jsn9!JbhvD3G(LQzD7N^bp3 zv-WzFTO7A@th1TPp43mDF1qX#WQ5J|bw|9qT_*r3+P}MGA#tT4tkU-BX0Ey5Yu`7( zblh`q*B#y6y6AHHh@IS)blvPA=Ao-Zi;SPCf*vbh%jcjIMIh!ZSL7d#Wq5ARG($qg zE7roi?|eQYSVojerD@&MOJy_%bS8W65oHP4|3?qG@FQrBz!4s)QyZp%-t9NrroubXj6yf=d^gokY3PL+3*u60rU|*)r(v z-8bU{6D6G(zQTeOoOWLdmZXT(L7QE>l2fy%fmYb%3*8EJ2U_wPpN`Hv#IF|#iKU*| zm>RCIqDsVNM^use9GPZzN}WzU?1oDDkA!6;bvGKmu@xW|^?}K<_a^K&Ktr|jP9eg# zZZI)QOnatfH#x>yQ*vY{ALsJe>R8zwWAk+OJy5`M)GcKBXY7qn=gAvjbbLpZl*I$~ zumDQ&=;4=ZMgB=f$)x$8ifwOVUP>|azIyMx_=2;6M?gk8l5Pi85sp2Vk2=B9hHVEd zIO1+{|1II{Szm_a8qM@AVvhd32!Fu?!R;KC{8<`7dw!mL;OUa2&!G6gCeW|;8XUKm zHQ+@`y*Mr?EPcVc#ccZK3SFI`J@@5@=u?2?xc%2z47r$OlmY+PmhI;*uL-hVo@wJg zlBx|b>>HR3y_Xlx@6k88m&tKTUz?WHPbYKvG$y&anU$Dl#_qo+%h^YUp+w_Ab?u@| zb7zsGKG6Iq6+z#7Bax#%sLqeP8?*IUlrmL*?7}2xnm;*<;6t~p`Chuz)kB5+)EWUg zeMI$%XXqYrd5pzIdcSSAO2il~=VJ<1Zp5ihj!rH0h#DXM$s7Ojy!wz+d`T;FiA?nb zp1uJ_e!}t)V${QLFfy9WfRJ0G_oQCEFc|<4q zp2X9Ne+rsM>=I9|o=4nx8*yIe*%ywWjjo>aLkx1-<1^06FCQIOgD!QKwJhk5hea?f z_-7re(4Pt*_lRJ~m|Wqx;EV|j3cH z#+Gc3aFQfD(X90xJAw88A?2OJENhwt-?D9X+30e0*|u%lw$WwVHoI)Q%eHN6_Itj$ zbMBoxGv~X{{U>X$T$vFWx#Ee8z3Ue%5~|w5SlI@($|r&3nP80-<-Kfby$L_*?vzxS z`Z|$GJD(Of;1Tab*sHJwg|$-aYX$TsvhB`$>=*YRRY+iv9>LYYI6H2oFkd1a`ibbx z*w(d{mB_tk8(}C2hy)weF^nsJlA3x~YPXC|={9HJaqf*aj&#EN6kpy=)CeEM+U&{G z#hsBN`5(3-O+Y@s3`@V!BqgzR0SN@GnUPCF*vU{d! zl?uW+#&!Aj%ZB4K4U_68p^yG1Ks zZ%u6emSX&3x1y#kIu>;RGDtnXF*L3CtII8MvJhZGh%0?cC|fR>Wjv_1j=y76?o0p* z?s1v;OmX|3vq-o8;jY%0WS#4S&XX%`_Q4|EXnsfhNd$tXs@}GfiL4hLf0K7ur*DDm z7DdhD6-#HOyTWOa@Mn0bel;An@Q9<|v<1xIMivU@E~rFsYAXkUT3e3v5}|Vs)ysi8 zw07$-fd_k6VOwVsi?SSf9e25*8icAEMe?XKWNapmsXJXUPcO;7p~?2b3D0>I$)|%O(7ocTd6j)$fuNu zWkrhxA5wv(K2AZ=Mz~-DL$t?4(pQ^ zc;hm^J!yNECyS{MxR|ZFz=kDcMSg@pPL$TXv$FCVE z26~VVw;AKV?1ERF1WAv-*i~jE6Ry3?_8KE(we->ogHoH&+lJ&J3oC|Qjk<0IT8m)# z!hf^G3fV1YPkltY+@r0`#tWZXv(EAE)Zq3e{_;b0CHU*>R#*%rEx3|~dpp|CI{zr# zvxUm10@;{m_J@E;IpAyoZr^d4;Kym_UDXh^^(vaXZdSnvKIJ%{(NH+FKW-s3 z13qc^D^dYFDl8k>2#TS@E-<-^CoEav$X0;G-~B#HIvZr1PFruV64mjvNr$b;#emY`GW}T9f1kjV+cP2m`@_cOjeB+>uhJeCaT1E15M?855hZ zZhMb?9nemv!^}6LiPq}i@a9%F0!{?#2>4^H9+56|CUS3JZh=Ocb8hZTDQ8RjNgH0O z7CqVLqX!8|L(Hrgn|A9tHq zS-0!6b)L&;E{VCyTqvS``q->v9C|aKK&4-+`Ak*+VW%ncPX0>Ab$c5$V5y+2cv1oso=YUvrkw)6#$^{8qh(#($J*rTx zJoAv5$Yn$WC*EbwHo4Ua8P%LlA;t}djdA==T2%#AP`$&Phh5KpzXkbx+Dk|UJ!#Mp z#dSlllE3~TI`6^P?JBJD!Co&R1P=eqIXLQ&r&pA&9o zZxmO1Q|4@F+e$|Dh&d(}8X7e{b*ox`ADa3Sx=*b*?h|W@!>=X4%a_?PjP* zuH&y%B`#>{siM&DFe`iahjdBmLhC@B^2)l2zeOsYAvc>6njsGDux3B0W|>*CJj>bH z)V@{|SB`!uM!m9PbGK2O^i7(5#~5j$euBW+I@(>2@r)b7G6wls74Lqd9JDF*MO8aZ ze)yN*k^no`tQrwQ>|DX!b>BxJLu6pv6*R2C#=M}1ckS55Sci1&*z1os0h1UiIFw!^ zU30C6lOlQbZMMXhPAQ-ef=Y;5tSaXHaBAR3V|!j3gDXgqaHhGXzLK2Q75;d$m<**n zbp_c&Zf6gakhsr(r|?eg+JV{+IN-M31R_lsWNI%XhJuV^!Kx;qD3o#KlVu|-ZOd8C zqzGq5A6o~qrLPC;SIAp=1+B-_UP~Gr?$Fz#E;jC0rQlF`Qps#|z9zvmwkEC?#qjFe z{drQCbg=Bd0(<3~*g*r?mZ+WFwR6QVYe*LV^PeU2Y-~888r zwK4-v*E(!1z(MbTXhSX`pD+k%ND%%`Y&OG-7D&)&i(j5b3vDfH&BS70jBsHF;FU@lmiBXiDHI( zQ2nw8bh;DlX*3`XdZlff5J2_I5H8(ziM6Q#EI|iY0u_i#2*WT6_IFKvJsFU1TvO$M zyz}#)D@$E&eN|ajmK=*kWWxO<8}j#|m;bzIT&fdER)|k<*3bHkhA(#+B8PS+WkIl3 z{GbL+8Z_WQWgk>vB?To?JzE);Jg(=lSF2tcr{hL@saF*{elZ|^Axa<)EH zXWQ-ZLg;_pww1C#M$lk_q_CdD5B*Wx{M4n_vgmvvPB-F*B|Uy^v|DQ#+|HWnFcjlg z>r)sclO1ZQiaOx%aSOvc_{|)Ps0%Zw%Md$edu|ly3UCTIFxYS&+3*2?{~YlQ*wtZ9 zzGHVmdi8Z4KY`fD-&tW1J_Wwg`v4rtJ9gXTXW9d#)&=PY{HssgrA5`_52q~9rkQMHV}Cv+M7;@T{iEcovM z-J!i`;ee$PZ$)?MhZhB?bKGu^e;WP7T7U<1Gtl#2+~1|%J5~AmTZ7ai9Q4GRjd3EW zgCm{u7ZHvd4)v7=)vH6^@lEoW;E(oXd(CjheM9H4ob!KSdY~@_^b!RC?)D7x=;K2T zLWR5Fd=ri1ob%VA^H+f~YLw9~1$<<0H~?C)lWz^cz#)!CgoEFF#`vS(2#3zKC^6uJ zoJcD;0Bw0JfGMwX%oRrXP^JXoE`+(885jUHGahe%{+U^Jz{LC15Db+8zxaBhbAD@N zdBAOZU%)JIqgFLQtMhOKXi=%GszCdSKkz;M0s7<_ zGE2uf<@t|H0C$DC!IuI8b+1}K-u}coz@77dlqWZ+L+-^YBn@%O%kRLcL&A(FRhri3 z_%xqUJ}5KMxh(5|-rTLme}K8-;g!BhF;>T1+Bfp@nXpv0SiOtQT8f`j5^uV|ic3Ff z8yUP*=3Ce3hPROvc;!#+U2!Hop69jd zd=b$OmE#VVK{mNqYwjmYA-7PxeoPFg5$VwKff#B<9dr6DJ=3L|l+sm18^;Fu@i0*@(`wQ1Me=;T=y3dYUiM$7n1j>|7f{xUN-8#l?`*6cG+Aie}86e=FFtdgW@~Da23(_k-eR zW;SrWICY86tAZ~FqPBmQtYGohy)R4aN@!BJTb`gx8^y0d5~QKsdoaE4$ELp5@l^y$ zH;#>eO+u73(nz>1<5Q(Mi`&sDzzO^4*F%5$`KA?@s553^vc>J-9M%5WxcgRulk{cz zI9Ag2H5qlPa5*h%H<7eTrgYfceIn~AGDe$FTJhLfEGKC8c$8E*;C64-3Zsjz46o5^ zKAS7!v%h(=wFzm9r*GSlaNYc}RnFZb81VDTd=e#N42(_D^HAXXdLcv1?vJ_ zUvRD~l&2M7|MZ~#DhKqGRWk9(7DB7BdG!S%-gyG#*n*=ruEL5QS6Dv<_E7_(g!JH` z=}+}KUtBv+4&<}-_FOGl2{^T6rs7^37 zWx^$U)F=T>E^-gR3Jt0PVkE&qa1fac53Qu0{S4dFaVjN1@JUH{{~C*pU9N6qk*lHg|mg7t)8=o{l9@H z@>uor<3Zd|M0hYJsMev?%kL34pQDSm(ZYJ|1V@A4!9fy*$2}tB?p>NV<3zRGe#f=%MmTdJ1p60li2P|9 z3jK0+)wdw$U-Uo0{hy2ZGtY0$xet7bS8zR&2lX8wy2OrMoQ%+9|fkocT4{Vv!7ZWrn z+H}PC{wLs(^*uy%9Y8@v0%*7YGt2)k{@LEz#mvI?zsB3@EkOj302t|2TOej2Mj!c< zPO9<|G^wG#$C4yx$Zp3 ztCfk>5Q(~f&go@4qW%MY%u06?I=?xcux9nZBmX(HuGH<#v!&`cqJQdWmv6W4!&&gD ze|4BwK)^V44VJ}|>;#it5v3Qe0uJ99=a0CC<|*Zp5a;=k%*|KUYR8s6Gz z0G_`J*gndC!}CpDY>ocw&FhgIkVk{Kxh8M>EQA7YmO`GJE$u!dk)O|-+|B*cBO{D1igJQ72zojUo_Ac=G<^^`?y+<-hQEv&v+F-c6t&K zn?m&&;okd}lQ}D%L{b0Q{Mj52HFF!i&F-Ac$=FF237G@A+_?^J5Aov;T)Sg5Zm?Dt z{{Sc2_}@xnF@L{&3HZIH$6o(%WjN2D9&GUsOi0tiX5voChfQO~LgaL78{CJ9R0)aO z72m+&*^0&sPjzWlq!OUJY@Uvqn?GpD6X^6}Tvk8)nVrPYp|kctazzOu3&58FHOv3j!*Bucq5lKs`-igsUsR>MKgVXr2c%no3_ygUg`&bq!@)(t z^+mz)>%Zm#gREf51F!p0`rC8l^+%auK?M#9@eAUW01MVL<)sH= z|NX1C2&NCt5{_1Sjb9Ti+=U;-+M2&G4NKjh+^6^N&}c6rnjiSX9qzDx9TM{ZM%tx3 zvM2;7VH^6YPL#fgJT_r*#NLsCP(6daf#PJ`uRcjeCOrM%GGjqDYqY0*c3ckM3>dwHRjmhXJ-|(Pjvc8UnvZB6>!v3>G0l-94y@cv1iJDpIrJ0#&SxLFM zI`T<~3aUX>lVRPuxZs8QXgiSqxAO0Q+}x8pG~fK6odx^e7QOe}D=#z3uhLlat^O;Odjk;&+;> zgN3IHpjcN$F(i^Q&>9%)gGJs45T^2|j|K#Q8gNA&5zaCKEQ2Ej`kzeeq>k~<`^Pju zR`TzZX&BjAyV%(N_cD!t%c6)|{QqzscDSnla2{GX!kb)R$QML#q#Pi66LtPQBI_e0 z5QfLuv)|u>=~3q1hCn11S0+n>LvY0WlfVfEMkc`-gVq5xu#`hTffQ$^s%Eg@7{d)< zCtb^+NCtobJ|Z#*B%V}IX`mfR-=7qDmPvQUw;w(JW;2E$He*m$J@!yDL|3Sn$nphkBbA11oL2a$e5|P?Eoi3}ZCK_$m`}p*(0xhtN|Ducy1Gn#CSC`H?TQj>;|FmwY)pZv8 zgX@aV1(l1!JB%#tHB&mCJ7x?VeS|5Zf<&C}K!tfAQmtFdX5dl0Y7We;81P_v03J}s z-69uUDk0I^v^M2<`BJp0quz7m46PmMkS?p%l|~DBd)MT-&}~bcq;^*@YoV5jeU_N6 z@sfFUzK%fgW7|sGHMy+k1l13+%%it>L;~wnDIME<&Y+`g0ThfP?C8(=H9Y9 zcTTfaRl2Jd5i7TK{B(ToB+uuD6bh;Ih^LmLkBFe2cg7wa8fQ7e2x@c2J5}lDDnXFd zxoX%mT7Z-J4fz?m?v!@J4~VAF*vLp8i_#TM$3}%S*jkAxZVs52I~=je=BsbmilWoI)KDWPmIp2V1+Kr-fkX%+|#GEG0KWz|1T> z_Ukp^(ELH4m*sjPLV<#0c_ixsaxh~g8+Zbv8RRbuSM^XSfJ`s4XS-llGK$||x^AMn z0xxJL1iV`f{7Z^(;F8eq*1-Nm>&vXL5h9h;8t37qK`49HFeid;_UPl26!63uQy(hu7)!d?zAa^U~HdyE#b#)tvFwA{N!mZ+~8ugjT4J!552$&F@j72N-x;QXCk`{ z^QSozDdS%cSB=TM0sRXk%>`6Yb74t>q0jRKELD{BB74jt1&Mrc76y@z1GOL+<`))1NneXL`|ZO3GW88 zu{+||YZDS=>r1Tws$|Iro@$@p_@hvo_SvmdY%U+2#)oyjSQ^QNSiKX=yzjg2(dm@D z@;r_Kk}^q1AEC}+nIzU&f&2*neboXlNIc|NAPq46yX9UQA$r0Ote!hqGU#7(<0j%6 zF+2P&!XRZy!w^*&5QI_-GD!r(q$9y<7C40(f$}=50o1c8p)kQVoT8f7;oZ8{xn(L& z(=6egL}_V+I&w)6-cg2#VABCM;o44F{_T-jFw-H})r;_%m>3QQ$oQ)(UwzV0KUPl01X@-xV>)T>grqYezy@Qd%&3uiNm+ywOzFE@Y<~c)Z*V-ws$Brn%rv)8Ph-1=_up zK)*|VkkYUk^E`fdh;Pl*N}blWwK~6MXJ>c3*)MwA9O3Y56cI4c>owwq`V1txRl}zx zQ0WC5c%bTiAD~)ddYM#$(Vy5|aGRBi?bQ&3`!iBfhzZ5uT!*9HX8>OW4vK<;sE6xk zhmnA^8XHUKEkyb>duCsN4^`JJbr@DPxSO2XH`fxzW}Y&cYk)0UXNZ-=4Ft*1^n_L? zTu&`@;RYS2tDQ$^N|M4~>g*alBwC=rfq9fSl0!8^vK-1 zO22$o?dJ5IUTMDobvK|Rgz((^XBr{nb^>H*_JL$XVJ16T?>s_5i4cH9d!bOtL0q-( zWdK>vQ@xE7k&bOe?&s8oJTH!aygHa`;SwDEY4O*vYtCpM=o$O;Lio-k0P)kjr2jPC z66RCeht-Tr+n0i~lgWX*%qw#W*&7tof;NMN>0**o_5V|UYqxF(Eakh(X~8WzWW#O+ zneAG*`bPQePU5%(83pEj!yN15m}t~r|cJM z|8Ad}(RG3k;n^<*Fj_jFKQ*C32+GpPn9w)($;qBn{?*Z`xa)R>vwm8(OXH7{j|197 zDJl>2u^yylu1aB`d+qG$4IZS>48?*;S8$Y%v}0I;0dpkzHiWj?B~Hh`7@+KpJYOUbmbTFX%F6FljPp z9HH9i>|58bfxi75R;;sv-tBy~Y>u4#!bRdd>3$ktimUciHm}jWDjV8Bk5OWr3E~Ax zG-$uD{#ph;cx$KIEfs5RkgGm=Si18LKSH&RW_&K#%WWCD2i=^gtGC-NL(&4)$PTLl z>Tj)0OH)0@JIQ%@D!wcu!e9_T30|kq$N@eigloB`vgJD&Bv>aETO6=#+^G3+hsUNX z@Q7*xoHtL;4#)Hr@FuJrrIYWep7mS4o9?GFL`q2fw+j&_Y)3 z+!rGc-Vz$7j+rG#&(mgHt!H*W(N0^p*vjZe%Z}Hguhcd%+?OiCO@vPk9=;|xjof>; zN8*JuAs(`ZXmg1nC+B&|;~t?((uch0OI~N$q$@+;icop4LU{Sl9<79(!7?JO!)-P% zs&I`Y$|3c6)Vv?^`x3u?i2u2fmqC_CW4@MN{mM5}`}Dcsg78xN=Rsd-xAoHFs4+s; zftybcj&=sKOc!^iOC~S;YNr{I*gDymxLmD)){TsZIEWSQ_jEFV5g6ZD8exjuAeuq9 zuxEm|MNsvqkL_Cpb~6Nf+V7W6HOToPEiz2#F|}en9Na2_L-qRAh-#Z?;&I}sDa|^Uc7wKk-sGk{!aRz(^Z2*m|2#JAsYA&uY?vNEM zqllL`F-O-%kaUd>zi>@_$V}XM7wO|QX%ccOEP$RgcK)fWkx!4k2+LhwUyh!dgSgsw zEVKtlP8JklAt0**0V{!;DtsF*O!|AyS$c#=)=Gf+vRl{emTj^vxrzRPJZB%?1{Mx^ z+ba#>I6{<*0W8A|%rmWsDBcA)%!a!+%kYww#{8!QH{bLgj=)pO9`(@~+6cTxx*!Ow zug@8xG&hwHJw4~S4-vO+eCvt-YOZOEsUx%*>du38(pp0!29a^$UCyBwq20^5n(ZaA)|_dATgWzvXc{e<{#rl~*@BS-K*Gr4 z?Z6Bm%K8SuDJF%;1)}&PueY7!mV_SgJV zoknPAGM>-uA!Z3FM+pcomV1MA((NP4jdg~cGaS6G7d;2ihWzGXMCi5akBx0Av?ww= z)+CExFBh!ftFgObiQs8YM83A@^?HQ_5w&$OvTd+k)Jssqt8(*UUU94-u$L^o~( zs^G7cH>5#y)<^U9G}IcZTIua*Rj@uZTs;$t8@NeB4&;Iu8VGQ1?jS*+$)4P?`f}O7 zk|SdAc1*jEN2t2O4>$Ss9W7Sgt}`#z%PSr)`pv;=wcamv&WIR&J(wxk*`Eg=F6Vtm zPw#0xDOz&V3<1?D?O}_O_hTOKn;U*ZVza*sJ?61Jd5egRgfzdbQCv^4-qJI65$#37 zB6Xd_MvAx7kQxTt#-qXMjP#3$fQ03OlYSoNqfqTxP6S9(1dsOfJPe^!&7kdcO$1nQ z!4{{aw3BPZl*WNR|DCY^lOZ4Qb=2ue-u60bGo)`RfQJB~Bu469)`!)XzjV-atlw~{ z)QB~Ig0>)?5$J+f{rBD;`loEQxb1Qgm|}G!KTI4`_^1kTnMX~kqV*qOD%EiTPjW}< z^!{pdxt27GA8{aXR=1}pyt!b=q3isU2 zAS=?WP5Rh+bQhIXfm0`JY(DDRK7m)JYhU7G*RSeg_xCOD3pZ+yV<4CZP{5e*hDY$6 zbWE+U8}yG<$&@G)jmQ2<_hC0daQS%>F_&T@H@$oi-?a;FpTL12-n}x+v9_O=18*NW z$ClBGBB^8ewQRj^5ku{KbH%c;eS^Jxms&vNvg0P78I)>#Qes-uC-QRx&%;=?0bRVv z1O9<24(_#v8lbCX(2h>_pi(<(@2w)e8pE3lb4rX`p!!)J3*HQOQGc1%9e#_;Bx9ch zjZ@17Y0yf%q>zqS0GeOio1^G*q0n7q-M*15$ai0Y%?{D{aj~dD5GM#jk5DPb+W9>K zjp0dmR(FbJnh=|`)?AxPCufM9)?XUTYg@l?w``o_#kbsJz>6e8V7*h877#meL7LbVlq&=yd@Q`?d(%&^@q1BkIb~58 zA7xDVDs{t6kXqWmBaPg*|)kGy5*c?$7ALOf#VCveE|?| z$XIjRiMlB!&!tW`{$x3su1a1n(?;^!8Me+$jDGJMyBmHCZrYH(v8-~^b@O)bP^(C5 zTXhTH*2WgZk1n4zcWoQrtoQ8};-P#@j~c&}EVWq|t#(|*e2PV-fZVG%Cy0>_#cuGo zpM~)EhX5l;r1!R&wds z(r>cuI1dL*+jJ_EJKMxbU??4he>w%j) zKP*097yw?9v2b>HgxWrf_R0Or1`nJ%>$I_ab1JoJ6KlZXS@9znA`uCt)n$>LU4~i{pX*0id@>LMp>KPOJiEI7v zrUb=IRk&x_6f&0QLQ2zpHNV`rxRqaqrgJg^@s~^33`A{$!VAIE=YB*iyJ4X71tN)o zX~djQdzUKGi&rCaa>x|GA6A9(Vm+T?4LZ4~;bDx+Nx4b6IjlUQULA2* zUb@w_g_4=M-UFidD)1*^>iFyN*g-8*baYW$_;B#}jtmojxna(Nt@6>eWj^q^_9gSM zScL^a_@|&3-g1?WON3gxJ(g0-$%Od_b(3aI)~M;egQ?BT`Ao35&>EyALWS5%`dKqA zL34bZF+{)!RWoPY%CMd7tJVGa3G9O!EVQt4Tc&Y@!=i4C@7Zr~Wrs%>QPN)+5GTD6uWAAslj1g41V|)GDHgT!p#q~ldKKf>rRvrP!XC%&}{K6;AJ{_T!CWo%maL z+UnxS%ZMIv2$icLsKAN%wfjImFLrpxmlLjOKZZF9w2Vg9pN>0B>jj@a5F@B&Yx#x2 zqMnCrtE30?3p2O~MduFei@yl3>$cVwMkPgD66PK9I#lP_n?H|IBr9Y<-te%a+1wXc z9<)|J!wG{VaBgSEHW(|U* z|Dnn2JglP`48UGVIrz2;uzf;;1##7A_4~Rra5#t9;!OAWp4sZ@dk8be5u)xE+le9Y0eIO^VNmj4L1$;Uy=p>PA)+E>j{BIhRaF*U^{& zI$~Ub;6Adb1IERjoIuo{w9-H{0(=C4Na=$O#rL`mH1Ib`Db=`s{c-GatrCoe&4c#t zBqO7CvgI_*bA6wE{qFZ|w|931vN`pbY?Z?ROvx?zUX&(s41|KW%S*Z_p&f8L#NnwM zXTTp2REm)08y3i! zQw!-9VG4HCL2jc*zQQp*W}kljSYr@7HzqVOQRxdp+@iRFLbeeFpC)?z%GClD!Ahn$ za1@F2&a@15Sqy>IR~HSloIki8oKFby>>}5IrDqShwO|p#2(D$J%0EmNwtDW<<^)K5 z!SW)2sYnn}h7)INj`Sn9_gh;*+ph-Y7nA+)n{{hLF`h>l3>6Oy+le?YrHO z*biHZ*G9oVx_?@ICdYmbu6P#nOxHbzR&^!^G~G?xtg-e{*p4=>bMam3TCOj;a>%W_ zZid^Wk|xG4Un9s4%HKs0BGjQ~6_dE~lh2#3i@zrJT!?iF0-I*T=1lgvOb#+GsV@Kd zGhV*_uJZi(eDN<@f$NcLo0Z){jyo9BfM-S_R0YRrGDK{WH?Lqrr7J^nz{sIxZy zGXoVAPaTCM_Q$+roU*E;TSoFm@12ebDFr6=#+C}7pVZ{ocKW1g7aiDrv`X?8(;28R zHN9olPI2pe0{0r*n{kVR&w_8u9ZNJx`Yp`sUZna*l7%ByuGw{WIyfw*hqeN)ZgeL^ z^z@`SL$G(TrNlN9#zxn#AZ|Yz@NA)j6^dpY*m8>O$R+62>bi0vOt;4g3xM57&gel$^8m{DB#c;5*<{Klty| zFmFejQ|K#K&=WFB+%6c&xs0qAl+%{%cd~)I?7LX9h>Vn8`8A~vgKaiKftLnUEjN>$ zJFp;V378IYLxbK!t~H#4BW*HP3je;RssVY{GNh<0^?*AclQj2fyQxe3N(N6%?`-3Z zlLRVH!2!F}cNBe=%m8on6Zk^_3#cx$XX4FefK&ksKqf>o-3dT&8DJZ&h>%Rw)Q+?( zwp~J_S>(ZOm@=p|4_WYaR)FcTCORdecBiQFI`GSAh`_auLhAB}{kkWsRrScapXt}g z>)gU#VSM>v)k7*}Zx+<4H_1M3e6e_DNU~9}M16U*^=VqUwg!q@uOo{Msm$_H^`887 zGkX0Sn={973Ebxit&qN=-9vZU#6A}{z+j4EStoab+}gwy14U1g))(Uiq+)97(z8+V ztLUC0+p;d=2j!_RKN!{-FrEAT@guZgm18Zi!gUZv#KN_bkA~Y(U%8%6UgOQ}GwRq( zz_)H;gNjGPd&xZ?B?%=STYQ@0{7xyBu=#0WA=s%sTxzbRQS?xaSb{TEhyOiX9n4NXx{&P5&Zy*zH&)!IovBZuQXgT7KS^oxY!SaF?2%Do9d8oC*O zkliJiXmoq-L&c__Q%vyZ2pYI|KL66fYK;Mn2<4DO1`A%reZ+! zvXGLw4{}GN#-t8hbkXbeUOXBi1MObImJKhs>wgz$-x{Dv;)1AoQJPY^1c#YtW;$ny z&vIm_tG;pnps6HLpdNmJCr#|C%@&&d1xl)n@8KlsL-I0;4dp&5^<iZu|DOfW9qdmq)4Gm;?AWLrIs)Tqldrgeynr5LSj&-%BwNXl#%$4_M`^Cw@Lnhe7U+t)aT zY_}(Cu2%9ADquz`v%AHuG^K*B4e)@)-`~Q2y_m157(braM@~|f)U70h(+Q)57c2Sb z$9YSpK|}uvActW;Hw>qjU-9mx&P&35Y8>%#&}a$^DKf8|h4}>LNx#h-8SU=lk=4Y1 zV!Ylp<$v;n-_A!+S+JWGIO~THC^2I2l55At0Fg0s!yDTjZSKa!;Ut^WywacjC<(XxLCIEM-#DU(_>yAEh{B*wpZ)o zt6~P!C7NiUW{ES1=WxhAShunO@?gU$IjqTbn{9T9pPa6n^`IkwR>YaO9FvNRF*6=L zSxsh3s^{cwCgpEY24+uL(yPx+iKb*XQ-`K^20fnr={D?J=*Z&IfaRspbSzgaa-Iot z>mAA5^a;T-1r_V~N1akjWaFM4*Ka;Cc`h!6I=G)#j(Xtre<(hWgD7Z}nBG!vjog2&m4G#!#g^9C>Gg z^8A`OM<8?y(;)FiJVo653EWvUP@f$LZKn4DRLsTpMEwC8n?Dt?@&fB9ZZGf-rpvg+ z)sbRrYHl5Fzfe*YmlkcGV+My*iq_UPyPHIZI4ql1y&tM;rtk0;SIaLJaOHXySvAv3 zMKKpmEsn`8gNXn?hGv#|Yk(UJZvVX3*G`Keo;279nI)wElL0ygV^s_sv# zt`fbwc9X%ltjKfbrB8W*t0NbnXPm~eJosmp(JWSZ_`Tt<#JH9H9r)D-Bx;f8UTg+S z#e&lhcs`ErNrsT5PcuGWY8p0*Vt7S)AviEH#mqm=Xo0)(has8to1_z+F+@{#E8NQ0 zu<@vMggjkuZ@|GKiJTEq7Q`GPbh-HS4kU>f*2?MSc#21ZiRt_-628rk#qr0PnGixT ze0Vh?b-tN)Ov1>B_6JVF8~kUaEJ##MybR*Sm!tz>vlm_fLi8Yi*+%E0ani(9p%~ zD}jSjs6Q(U5(kc{TT|S?{KYrQY#$V_x0e}_;xA2Lost{0~e z6Ay}%*Gq-+b}RoiPMBM`hAmS@=lp}e^lu57XT*Yh;w=NLIbBnqCXjn4LBW_R+JFnj z_l$!%sqDIbhA$DPcoq54ufBK4m!Htk*zW6fMLY%wc2jq;1Q_J#O1X&xKKS8`34nBxa(*%qHP1}4yJ-Mf` zE=cAXp>koMfm7(H7KkZxEx?3$fmJBFPw~s-k-6P6TGN-Y{Z1j&~5a%@NGk^k-h9Sa)Jau2>B3p#^cpbQlWG_vYJN9!8$nsW`r0sp-Tc+#yXL)4=`1z zs8$yWN4bdc7s0t)0m9^D<&^B0o z2&O%_`+zvzF_&uYxMkpL9KyRVE@F7&4dJ3tBddn@?6dwpzL+C4?9C{aqlKr=EcBL0 z#qP?PYCI3cG-N?$8aPgr2TmOB?mi@U1B|BPH(ufk|H^!B?CHvQkB7@_&BqQGPrOOv z&=};I*MAG_2b-J6vG(D=9WaF!ZXC5H12UBuq%m|s#%NMS%mcCHR_D6lj3%*5$(>m9 zlt2!t)(k^s;LKh_TBwTMBppISvWYJMHzJe5R}DU7)zKp$QIrfl`r13FdMJqdTf-^m zF`&lY92g5#bOx=FL1;3&m_cotx9vfltt1`7%CJ`meoreRl>o1nLFU5s0i=C@u3v=c z4<9$08FToNdT1qiU4j#V^))NOI0}ENL?&~J)ken&?Lil29Q7bP@IGQqC5|&}@F)tR z6&P^-HQqsIQ{?(7Z&>Tp$s=2Dbym=8AA-XP0Z(QY`aFvZrFeaF7cMEP>px}F3b*IT{6a#p4HpoCat~HY-h&AMqIhl zHL5gJJs}jzjxx5tqT-OCZc)e~DiF17K|8*Hw$&&Zo~LB6O#DnR>GVFeL6j43C44V^ z&VyY0y~W}Z%;*?inoPE#9;LSW-nfoQgwjs-`B;pe5BkW156k%v`E1J=6z-cpr zas@AH!7=O=&2%)IVS(nP@gIb*_i)%Q)R?&BAhJDaPZ>Ia91?$ z!D`6QJJ}+C_s%6q0AqjXiuQ4_xd`^msL$J}Q z<6f_w71H}Tr}|f73D-(&;4O>=G=WZ=tuFr=q3N;`+BEZ8qTlXrWaCQTc$gvYHZr@# zxDY!C`0Sdd=oS)bC&{(emN~?qPwU^cBFs|f&*AYF9;LS^c;l5~C!wB6J`Ab3dDq*l zwC$$((%P(8#7zb*Q8Kmxwm@{1idIE$1D+p`&Ps;Hp79kN!RCsIH$t)OWEBnGUc@ya z`nl-`bDEsHD%%WxX;FAT5pdAcYl$nc`ImLux^>Pbm?QUeG`NlQ^OXqIvz(YJIDQnC zY}{Rpk`Z>chln#Oje<4mL~}X&be=zIHKz5y0ZKr%zd(DN1oxqqYu_xnCKWlousz$>0S5Q&L<9ie2csp}~@Y)ie^F!oGwNMd~ulq#W*{E|lZd z=s4!rO3AL2XORlQ|w}I%nL&$yi(2?3XY-*!FgwO?DNzjf*r<=%_N*n}}B407!-J z`gl8nZZ>ulFdvEnTr2=}byHP9AYs#)#ghQ$8fJlGDuWkb7cah`%e1(V%@ql;P4rpk zx{swrlW9GuDMRns02bIK+ZK7R61|8Uq8FjV(4jBDUz)N+ ziAe77+=Lm!fYQ+sD0L3RMDnu%!aSf82oGXIU0wA#R9cHl8xPW;)gF#dm#CErHe>pF z6EPNq)`h@1-mcCKou^_f_2f7Pv~l%L21B&!GwxK^quY^NgrwNhJwm(Mc|K#9Lv3$% z?pE6WJyW2}FX1&v4HYrK+B`_&exeI5ZG)zbwwSTrbL=wjLd&3!5ML9Zyh8_dZ(vmX zJWrwlcaxYBsuT;fqG?BbxdqB&2ekn-1V^mTbuIY`IKSm70yZSBgzR?cI5jx7_vGch z#`W;t_Ev3~m~2a8X1G>EHPgY^6fU_0sHhO+?yCC1xkktYW9BK)5=hUi8XBKY%ox>O zrGIA@D#nVb%F_ZN^B8Z%($*jWMlAh=Pa!tjKu*~1Cg+Hr0K*yVmR#<6cVw_H$QkZp z9}Xp{OB|LL8*?oLnCc)$ zl${*)eIa^s;Q0QQkdv1r5QwQn88$?zB<2Je#!=YESx5RvZ3lwLPCA2BSJFY$B^o{W zlOhX1^fU04I7AV{g!{a}8wt^{&r5j*-{kQs%*=GAGC2#0KbB0Uz~&%%<8=JC?@~j@ z?@)aP3mZcwjfd^o2*a_1Nqm+)BICPqS>PHCmmIZp6%P}<%}Gu>asOpUVwfa0aM2}- z6Ev8UTL=e`RUf$-ecx9@S{hlk)QcA{ba~(m`2zmu@ry7U`QsPxe@4<*=PFM8w6mB7 zUFlx4@^hRYRl_EJN-7=N1dRu#I;Y$32khHUFc%yHnNacI_yMy(5I;_ub%IMe#W9Hr zL03pPV5>AXPWZec1RizI6h2fIr{y$bH?zkjsUEi%VO09b1 zqt0*9aTnnQsaPL_f7L!Y-gn#h?0}rEn0s!2Y6{6t2bwZ=s-q_d7~O=vB6G{jaD3UZ zZ&3pmQ!Y%IH0 zVbBLwVJWF$Q#4AOd)&}@M(nLwbryv^-u zrPk7n-r7MdscjyJsJN}=$ev~oLpyRccx77CR@cD=H^ zoZY;WFO}9;itDRu#f?IC)h!T3GR1UG=S3Z11D_MNgLnyUD2*|%%y;HOTtrJ)NIrCu zUlNnhZPnY&%4WS*ZhFo?Q08m>G!46vcCbahUypfzkT|wr-3LtpIfSN5sx` zA*5a}PvkVf8zrIsO!pcopV{i=d3O!u#N`-*e;SgMji#@!=2!CtTQFWLuCJ|$=WF@A zJ2fK!5Z1-)$QIW_a`oEsN^x!Nws=2Vb}@rDR+cxGi*e=LE*4e_#p&gEwfbXm8JUuE z_0G*;AQB6|IGF+Yu2tQshy}m1TdqEM;5oO|R%X3OPX@hlMh*@qS>%3S?wEylSmnd6GU^ zT4LYjd(^XcRr!X_edgjLg_(+b%q5muqzZS#ZNeAV|0rj(KI5H0KqoE(zG%NyF_s2i zBP;g2F7-Eu?-ti83{E{b;UFvkwIyqjI}qb$4iO?WkJYfTnK;8*mJ_5OQ~{mtm&rikRuv9w<427XYo$-S}y6Lp)0b#8I|U?X3-NTccoZjr~`-gE|piP-yFR81C5Cs)GEofup^ZeW@5vdx>5+q`% zD3EtUy~A}Vd?|EE2+Q^|-COz4@jp9t&(vBu3&}r`Nai`FtdK|=Eu>-lr1K9UrfhR8 z&dL8ZwTy-2JITcVzyz!;FsYdzhq zeAfBtL~~O)!z3%jv=3Tpu&B{x^cYB?u{@{*AthSX+EaK$ zk%>h=Rm#=99r_z?-P`rr7W~S&1QaFH0O2=S#E{4>?tk98SOgq{=f139&Q;ZDRi3m$ z)qqDCkN%gcL4V6?z%RzDx|$eJ&b>(E#49^yrCm=<;Yv}Nm9T7xoP$b{3&>gpTmw~c z*dHFw8{1sval|?FUpmQU;72n<%6_Nw>ov5(c%HEW&xRdFkgZ2y)ge#<{SuXcDM)dt z*xW_;Ss4mKv2HM}n)KoJC*t8?EJG-U{iNB)P?lnZk3<^tNK{CZ^G_dYim#o~G!U!7 zW(K#sP{cH~I{{}YPj7|HQ)wy94Z3ptxsW(RAFzeIj{m&Z@pZt8u!ZG|(&P+PfML7q zRvL|Z!z<)hRyMp6bzBF0Vo7|*p-rW}lF~&Y3||`OQ&?2QkYn|eT}88UH{omI{MF=& zn8wMs?|sHORpRK|_gr^d;VXat^0|Wd_C2q7;{xMCvg0hSs<=nH zjrxP?cBT2cvuN9%kd3|>yRFrf@H!FJ(vR0d9tkN+;ocKpl zvkT;vxbcYY&fO-$mmUxmblK$y+4FtxcrpfHGo@u`_MErJ;FTD^EjAS2oeNo~i^+00 zMWX5L`j@FD9hfu@Rxy?3dtL9ixI+1<|3QyI(lgtcMIKKzhUaU?CzR zgB0qN4d5?_J}2fRbgk&VkT?fCfT6Ag!f^FI!YE_uY%*l}8fC#T#X{z~lcB(J#Iww3 z95Y6kAM)_ZNG5t#Zp$Gifce<<<(0so;{g7?aiE}NgxrtBCc}tn_|c4O`6rm3ZnSmA zdbDxxDvvhz5|1`Ys+}65eq!!4KQYc~`H6Y)eq!!Ceqvt4PfS))&$P3+>7J4EOwKMj zlhEPLz&gXm9G>~CpcY3&aC{N!?3{;_0+E|ML!o122Mk4i&4MUeWQJHWhD=r(&3^=8 zcc(N&4FldgsPhyD;3QCe5%D?zZT65AhP)h^qY_FAeGL(+ga)x-C9I~Gf;b_QBEWQF zs2o!m9V$?DCri_uGVI)8Qk7f&8}1bU4Y17iWjHG9wUuFs&6h~QBcb;gLyGCviC&d_ zFL|Ppmj|KvaR~&M`;>4N9(zqS*prh-`VxgbM2A2}XhGuGD-34|2)>93CgYjzY(ggw zI1HYI<3NaTLj(hPRB1j5M!`z~z}&hp6OW2P0mKG^w0{$n(!od~r}1ETxd#UHz8mU& zf;L0)P~(4wJqd2mIalqEfi!>5* zwvl1`MP0Tb2B|d48%v=aJT0Dfy2$n*1Rw%_515Bkk#))%OFseABa>7L=jmzKfR$yN)Tk3{-S``J#Vu~k{hS?whG&S)WSFt1xuuxOwIu=11YOo-{Vn}uk>Akq$w#e=ad0iB4Mu>;~ZGnoea zNU1r4rSdOPiddCOP!nB5Y??&HiL}7Tv^65uSE{cmm5@dbNmapFXUyB8Gz!xlYtH)- zH-ApABO{mNBtHJ%F5U(;D*{uEfHOb;;}#em4g|u4qv(y;R5%|PCq6X*%?t@=2|NRJ zaNYW7gHZFj4zq{CnK}9F^@%}dUl|Msv>^TNdvk}w2_vzm#>25I^ev5uGb1Y9y9|}? zUV%!N5;pk|$YV}V$H-yIyPRUSVuuE$6E`NKaehjv9A^pN3uuEy;Sl3Ho*`u>DA{sM z^E{xRW|@{2gq`9s30~ zq+_Wky^vy^BbS(8O$I^@rKQ3u+`6hsznuO;XaG(KPH#B^79WlqeN1_O`Ame=& z5QMO*K&0Yrko{!UEeX_Hz!BjO#y~4ruHY?OT)JN>2ptk`mG^`kb)H@l2Nb!-!a-H8 zY;Hq9kLTiA)>4X}!d(~Nk~bS`?M-(W7J;ANHQy~;@AC2;v`{Jj^_TILbWD-EIQ-&= zFXuEz_{yzsW{aQ7v#{_^a`BE3X1-HK5K;2X$DN;2wgmZ7#W10>o_K4%^4uROiY)cx zfYhsQ2_4Uf@SCD|g_u@2DoG|3(?Z^wjcR-%vV*a}M$n5)OsR3b@*71cv?)|=rpIK2!d4Il5xOPE-= z@G;k5gqI3Yt8!Rx4iq6Sb{L}={9-PQYO;&1*4ah+K(16BMn$obsDY9^FEJf#>&h}1 zZ4Hie9dB7z2DPfReUHbw=Zx28F6bbaS&8w;Q2&zXt>$rNvXPg{bKK{>e~mfv0C}*1^3b4tx5=MuTu7 zvNV*ox8Q#KaL3!fci_FxyW7iZ4b@IBH|x7kKVSxYGaE82TRCcVQQPK2u|CT$D^E7J z#VmVN`M`pq0w9)7SAy?KDhkyw`$nxAnG1Wu;Q( z$fD76@F5+JIyQ3mYn2K33}ckh4R`3!PK19npUOuu+`C?twt)ax9G3Nlf2+)LNRV8}YB zNX}1;99)L+6OdcsM6VJFGhB;nU}HtIBI9>&9)M=F0Kl&=-V=TOaqt}3uD)A&)A=zq znbEi{Ux+h$?Cn>Yo2A`~mlBQh&%15FKBW%$K5P=}ipdKZaUEQh{hAcW1^_19D_e5{ zCZ`s)ka*2Wz5_f$&0TRizUln1>KuHKHe;kKbQs^_*zKhTE+I!IrvGN3{F%_wr3$Tu zz*F?sE93Z+zr{&@8F{cvPd@GZq=Nj3pXvQ_wb`oHHd_Z?XxlTPo9b|YG&v74E};u1 zlKrW^lN%&3m$|4JXXY{k@oyGuhM%8He?t7|rZWeb>Sbf3SDVFvCM1kw4t%F-z&3>r zj`)$3L1jxb5PASyI5-^f`Doag9CeMQB3U>BLJ~u3WE~X2>qzR;Eh{xR`(ZcAj=2u# zel(n%XAh$&`(bE$1>*@wH5{gLr&>#cuB06ti5+l>Dq=j4a}dFUoK-&CYSj03!TN0$ zd3Sc7_bF9g_{eW_7QZ6q=y&l2Us6bUd*uf|+j;O2rGcl{`=za|MrBLMPwWjwzakmRWxmDS!G+v5AwqKSjn?hRK{(yir^;&61$fKul*=hGF?kUqAmF%!x zia$9m>c&*@l8E#@46#UnGUnPFbYHkC3!6(u&jJq(%n(ErsHeR2;iT6eiz&Utxm6Y! zeFWs9CAdm$)`2Y$Pa&(tau3J9W%vvk=8W0tY+V!>QhS5vL$-7)hhbbxvhSoSM?rW{ zEZ2ZSrN41A)$mT2dUpQ=zAm*qw9%6dZ z_D2pVi0-#XT4|OH&SGvEdvbm<@;gk8O3EPat={+=hZ`4n9jqvQ zR_(A^F_?TVe0eU%$(SM*zU^6Ju_X5CPbe4r&pMy_HuYmaeH@&FGf;`NLu3E!oZ{f(}|KW6o%!LwpfBFs0Zx$R^Sg=~>Z{ zS2a>P6snMgf)vS+(u>p$E_y)A3cyB~f-cMAzxvCh1^L1^yQAS3!kq++l_7BS3IUX) z2bCB+X;m=8!(c5jM$8&WeXast0-h4@yg&g)bl9R4**Jh?_s9-e(jsKuW&OTH4=Cf0 zkdTa0kfqG>(Lza$@R_bE8#3k@fr6*7b}u2*NnmsX9^nj<>U7UB94KQPt-V#^Lfg_Q ztSx%Kt!8w1!}Zeh#M;KnWvPfzl+LA`bf&%Z^Pw=es`pgrJOigJPc>-?krQ^dRi zIg4;Z(bxW1oV$k;24jJ)*;p5d55fh0p-wqP%xs`*ZEtfu3}R;VgJC9AtXONVky+7B z@WmAEu4E=-*H-0ZK3nH;;9j0m_G~d$y&o`YDIi3kt>RHSos40W4|k1$kEbBjBtjBv zxfSUUxv1EHpgC=NS}ZvmVu14_5XK2SL;;)$5jeJDP~zx!$>EQ2%&3KZX08U;;9j5u z)8xRR&H@0b32FmGoTG|GekB_dV$ytJiOrfiasbnZ=eS?<4vgJdt+oE zIP7+L{+N*k(IBrTDtwKmM`(7GWQTh={ro<2-D6dBWYEj%Dw+!0pPmK;3Z1^XAm?Sv zE3zbHtc{#^|3Yqe#uRfSS($n~z#x0zxr>Akeqd4{4~7WiGPZvgw*S@e%8Slg6%Rzs zTq)-P8drT#)Rycvve+?ASTKY~ir4(s(4DfpGx7>1RLuEM%m@x`0k*Ocd3SZsB21cC zB1m%*FGF*Q62p#Vn3$qF*Bo-0S`}G)_DB(JhK)zZnhtv@t;r6=aaoJonLKM}(qSHe zHtMQx%N-AP0-zB&>;mQ0a74@?eTtyXoVw;Yn_<<3=vq+;e?;htSdS}i1t90SZbXuK z;?u@L0xd5vq{$Lx_WQH|VI^PL2zBPobCHo>&4Lh+duy|jH+uuzWqIRkIbO-2Js+;ZIz5DHVD^EY>tR`*cNKB%%GACy6TGoEn zy}73{v>cHA)VLu7c#g;hC=eZ+9y@9$idP z!UJe(r;8s!=V7r(0*mEVb5fYKSG-ix7y}=S|A?xkYwIz(gQL*}`%K6rN?XX+H*N}s z@jyT`MpKZ9>2TTbQjKN_*t*O7pNAcFdQAgo)nk{!IFTV4flnMiNk5UW z)A*=unCGQe+TO+>ZPgl#PW#9|I_etJ@C@nn!TSfOxrR7oNIp+ z3bI4RMPtW_Cxnk7K&)!DVd;Dis|ERs^<4h91K?snGuxYn(XNQJ<#F z-=Z`;Q$bd8r7Vc+=|aWJ9d-LdpQ5Koc?UiR!lam(I&SlJy;LTiEWlIMsY!g@(vbdW z<77o_kbr1rK~$v3@Rntlzx@nrcBH%tPlsa~P|aLx_N6RjybPnS5}S-Kv3x0CivQDn z$pP3Q?r;6v3;*-d+X+tEsPg1LyYG!HPL?^p2D6Ig<@w1LGBbey^r_W&ZPJ>Y?(JA;Z&lrMA_2m{y-^ zRCdKNmrnVqOd+4oBTbWu1ql;*hV!RVOP8~GMKbu|9EC9N=w)?W3)ir)Iy=k5)P4eN z+53sb3gA#4mTKkgO5=MCF^(VUL#w_Ep%1+MQu9EJdCw2T`4UMa-!#@ z+SS2eSiVn=Vb%dY-}0mD;AmcOqnXWFaK4@_J^(#F;Op9;oA`wD*g-YXX}5oFxq?D$ zp_A^QOQGJ>iLNfMUPC$|dOOI`?gG7gF<-zq-^Eo|%=d5qQ;Eeb;2&yK(9nulzO?iH zw`;;h{oIQ6=?ST0(0$RiL6kb=W-*+g$Ph}iM6q>ph<9FU6;)mIaHjhA>Eg?9+7m zfzmt($zP1O-%ywTWt_(9s8q6rFpi;Y#95n2A+A6}Q_!pZ= z9|c^$?Hj%kYO>BOI|u{Mz-0HwHa^ofPmC?uE*7pCVmZ~H;u@HrGb@GaJh0Ikxiff3 zar-s6nB+wnanog2`Kw!7u$o)Q*zpNevZ9r&I4#+-m24TB0~JMhkdDa-3K8ac0efQi z82fPq(NW-Fo&-3=!3+P~8^0L3dWgk~&XDYjX(63W&ggP&aJ(uVC+;qy_?|RXy5qBR z?se@g+6RBv3lAAPmM)zUDtD;qsQT0|5@J*o+G{bCH)0XAyE3YFKiv1_IQ zS57~v9Fz02N6{C-pHbu>ivwhfbIbKZjkhrOq~*X3V=#1&PQlPd6X^`hz8aAaW<+Zg zku>GG-YRfIhGr_7E>y5#E5kE@mD=sjVb0uNF|GL!u*F6oC{_-;Jsk{Koxt0$E7{{^?rCyq(e4B= zjR|S&@?_J!LLS!m6$5cUq!hH3+z5oYl-69@Pgq6pyfi0+6g-5_~S9Sqy@%l zsN0Ha3UgxVfN^3S$s1LR3d6{VBZzlOgj=*a!y!7S-V}JpGGs`{Wje=hOhdZU~J+-U6cxDtag~ zK#zU70-R+w!tRpP>I@kB%8dzjTlWic?`roBkDs-_KtprfCmK{k_>wpulE!jW>9Jja#gO24#aGBLmq)`MJ27UiZ8nyq3T!4-Z~$LXJ%pnBl4oxC9Fkl% zv{Jm1${mVr%GGg0HMa#1xc@M4kpaL8Bu0KagO1qZvW9-$=z2V0iLr_WZZzX54GY;E zasJJ7Yodx1yAofW?#z01isW?`K2}dGK7{-G{d#@7QmTE{`DY)6KQkUbkVJ)=!&W*U z&{k8eJw*!WB?}w_xE+iGs|bKx_Aajt2l&!}I~goN;Mr|N`C@;N2kCrlG;Ahz;)%S+G_04 z4fR0@e6&&46tf2aBcN2`8!pCY^70u7X>{I2Q5-$BrAs($FtJn3yGI4j)h(g!xulR; zNYF3ot{J+`=)UOG6cvO1yH4ZeM4ej143)aNWwVqKGl^flUDJ!0v0YO(k5_KjE6>JD z3Ym2_Uf#ADXCr7Q`@T3m$1jE^e4iLG1sZS&$%2skMsvsB7)-=& z(L0JoJj_h(JiQQSA@L*0WEK6C>g5IJw<~Wg@iSe^?1(F0&Aa98z<#q;lJfOP8<&}(A2t^cG2~E@D>au9h?GTA{ zOkwMp^~-%`i|g1U>!Cz9;xg+jB>!3>`Tb&CJ_Ru_I6M#pAh_k+O>kHYh$YezLz+IZ zeCoo$4}@Mw{D|puA>)y#*tsOHTCWf=1WM);l5fwtfbR~6IySv@U1b@Q4E2)c1}~XJ zXT-`iD0@t3UfCevP&^XrE|^-jfQn_GR%hMTmv_D1yhtZU&=K+ zM*ys@)OFD7VkgZ)aaksLRPgnf{-7>nwVzpYX;2}Q86}g~c~m_yMZIZ)mx?n?EQ7Bb z8JSMVg^Oo4=nf#-@bfNL%ub167L6PIi(bET1QIg-kXSJmNmn^1i5Tdy@>Ym?98R2^+NiPmzKpdZkUGO2p;T6f} zH6@C{n3rQnF7=8o9e{I2OK+%{$@W(z5`=-?d|SfBWA`Fhw4{z zkruMYNn&wF1^&KYt!>x0yvif71vFoGzAa$|U$EZ7iMwB|c`1li4W~>Bx##!MdG>r5 z&@VDV?+=fUgYGzUU{TUHPl;5!i!7gGwV-uu@UT;w^tsXB%(xm7ZNwDsDH(D87<3Rb z;1GjwXQ^J-3U3`PLG<!8;a7L^826oh1TE^e?4~*p$qXFwe~7tX(1CD!7b@ zyxNmWI{-8r)iUoBHtbYN7LZTOTSym)uJ+-egm4mx#9|%kOVPVL`{rF+kGyy}TIW7YB!NB_h1*n6b>JLH7 zcOo{{+!y8yi8DrZ>Ac_uGh1TepD*r0jF@u$dz~L!P;^ao3R1YA!T&Ny0G|>Qq4fNc zOwj0!po|2Jy#iaGqyYpaCpbAsO-YdPL~%X5gN+~(4N(cQct^3=#Yf4_fxR|7zw=xO zp8iRfwsZ1+2>M_;2K_xohbQ`RV*@xsX6M7}lQ*6&8DT8)&0&e^yaQ5g(#B1r$sM{Z*)0Xc$vG3BFuOV%Ll4jGEh(%5Hkq zmSj;zf3JfRtX%<%{5i2IPR-DC*U5nDP{A(eIOw|6H!OY?vFHy=jW(hC z-gF*lG^l6e$9N3L5dm@N^FdG0Mhk^-}ud;kKzF zcT2)3lW6c5fDpy3UA9IBKO|6fizLbG;MBb24<%U7jJiXOvHC@tD z--ruhi#R72sgaMQ74${7-_P;|OJ=@?NJdS{YWn)f^#8aOzxL$X;cM+!vL`d?b0Xns zBZbVWl?IYZVo9;8JeO8_X8)mCI(FexLSAdZoj}aaMrpJ4sI!(_nCeONB z5VUv@hs*d7Z=mSlT?{nR5nord=UQ1Py9*!|iU^J;BtS8RP&g^KVaz9(bZs$f-Sr_0h`__EJ?1HD0E{Hr5E?L-oS zfWwQqi&fJz$c14HEG8oidSEMAW1=$Qok?vTE=ss!o7IF@)+GUBoyoXe=H*4*q!kT5 z(WG9EFo;=)Z-v(DtR@jS0cR*~X0wEGGrbWrNBBOQ&*k%ctGudDj&8P3BE@|e`$UC_ zvCh2W9d@))57slJM+r#@fPXXCA>}HUyPG0vH{;Ey(_K85Hbz|Q!30={0@(0}{paCR zaXBxK#bR-FwYXMTT{4h55@H(N6A07?i(5tW^3^Wk%Ehle^Of_)e5;5SGz|384K60D z)VbzQ;X}8kZm@@@l{!}s<-fH(RFEsIdImRge=vq+7Fs`swe!M5375|6IL+zUKOuz& zfR0ZIR;&&w>FQ$$9U$QkC>9+bCB2ankkD*t99n8c`WW)4AnhpHm5I-$c}-5@#Esko ze|FNEHi)~(z9ar8GSWv!M?z%mbUL=YC`P)}#Cm4t&x~6!WiQU3-N?N>e{P+5W%kU6 z?{vG}X_Z*L>&iKL*?)M>QY|d}QD<=v?!fi!a(lPbY(B0x%HQsElnKLp&Z%-{v5A|m-=Q-V++p zJeZ3UN>(U)>IbJLRcf5KzQIky7rg-mM>W*OV0SP?nqAdk6^qjBVE(Ff(1Pm^vDCqk zA^YUOJ&!Mfd57iONKq!euIoP^0(36t?ed3pp?B!COqLd0-&qEcXP}IukO{qu<#e0~w~DT^sW&ojyn+9pd*cnUcaGqK zM-#j(y5gvJ25gxaxI40-g!6YpfK{HHh2rvZF(>|aWpyp%t%PC`6p9&sy_#|_%b%H+69|4U%UR6i zV{=}SshCN1y6ti$70H|v2{Og}E5}brd@7NA3~`|DS6j-S_^&Bkg?>7RIT7~2!`}FY z!b#*qBWhGB1uCCZB%01EJ#TB@`(qlIj&h;g77mliAAtV8UuiwARBB$SR{o5W zNLt}?2GUDqP zK@xBqW6&j63N=Cn?9Szk@n{)GxeyJXWtUM<8H!ZKrIb~v!<0&&@>7^2b(Ff)Eub8ov<1$gIHz4qPCk2xkF6ORSJ;lY22Yw>FM zCL-s3R87G>lHZBt1*lB^>0Wn!z^*}I7o_)mWCwaU&kl5HSqq7cWby|A1G8OuAZ`hN zKuHqt8)S%#SnClv;&_Y}*?!kVA8CgI6RBi)#E3hx`-)iADKf|H2-TaYeCl{OJoHE6 zUvW`c4M}A9?p38R$65HuKT0GIU@sSkO|^*(Ugb|Z-;so$!6use(*0mb@~>)q22Uj* zmo?KGC@Sc(K5n{XGIY~~%ETB}0pw}|$aNPkCM?E)@GnpdxC zAz%E}#eW6Dnm^dyYd-Y8x>spDC2HW;ol)YcvY;w(7wlHwK)^Qf-J^g0h)%D1DMsEdn|q=OC-C*4~!5~aHk%32jGOun`~{?@tv{6 zh2)PX7TaQgKM9=##zYT1jX&#rJt-cfQ^Z}G%FrLh6w;S^`+#^ZZ2~J3WCQU?$caql zy}w!C-Ug8I(U7AJ&CB#rf9l4qz zNvuG_$5XoN@!_c|@2T1&t(d5?Yn-nNL`(Efl1PYYg-!@;T%v|j@C#K}-;8UywxYvY zlB+ae)x&W&0B$s7Q-N1pUG*k|o){~ID8e?FVUzr`A-hpkYI{2fEYwvoiEBvbj4IlA z9RfLK^a2;LXQWY>Rh+uT8-d7*sj+b>7Mr`4=cFjebGyQ-TTR3_9I?zX(@#40@wNY zkGj?;^LEC7d)mrs(W#1FJ%@l*7;FP<2}5?r!H7xv z+XGR`WuN!bk`COLYaO<(C9>Oiu@zH%p?qzIfrH%&;(Q({J1q67s7rl77UG_Mhp=23 zAckPM?4d&XE>%0;4QWc(mTas)+z_Y=_<69SFzf&6#E7KpyP~hUKJzJ~*E9EaBL>eo&ykrHrMtCAw&A?rWSk7*e7UcK6CL^of;Gub3>%@$`cxO2wsx+ zyvP0sJdWT;SXS+2U(c`JUR%Gty1IUQEx%?rfBE)u{M~c2RVJ-TLL*`P<7Y%d7c<=)1N5 zWANu|K12O(f-xwO_(Mq_MW5YL`Az2&%JC9@OZ8^v-0wuKrKS=S*|W3fjAoLj8mFM# zgq0u@E4W11x>2;Rqp6j=3#8!&z8b$GdVao-+ZAwMJZy2TfktsXr>tV z4#hQp%s%ks3Zyu42+=X`;C{<_(2^fbCXZkYD%-6$ofWly#LsjsBgU-&|5JqjS*G|M z_{tW*YT(`_J;#o%`zX7wZonU?8m@Wwyg~*XF^cjhhiD3bB}=oaNvlH5HgXo=g3QKI z7oQl2Ch#RuW*Ltv+LJNVB|s2TJ*ZZ;%QwXb^NT}E4ZaIZq1~^;{rh3}>puMVlztu$ zhvAhZUW9?+qJ)(>N`ObNZ0krQ|IT6upeMvR{is@boOXVzvRdO)3W!nK-l{jMt%o~e z@ZR66l`9XbVrfCZs!C(4BK`~f)F^{~a6maINdwX&{jx|S!;|g_Vbhc80H4>ah*#Ct zQ;}3=dnts`NA-7gLZ}=vOLL^PG>PySI&F!Pl$zq00Y>Jwx-Zc;9*dfL`=uR!8e}G>FiGe;{2pEy zduL+D7!lbr-*Q-9$L4@eVjszvjHd@n9QDam+$n~xu2q1HBjUxx5y2|Dw9L-BI)%Qp z@g)ek6h?F|@eMmn!jUs(2wp)EJv){`<78lAB-kFoa)l8O^tsyH+Z8iORbkFW==a6S z&l>yS+N|?FlyhNWkX-Bn4;wNqfdcS;saa{h?tIUJ#liHxdL<@HQ%sYcQjjz^%F?k%+N=@2FlWOn&$Q9>)bXgZ^?G8EAl+5K6!moef{ z(i~NX5)*;58z7ZJEudl~F9(I+gs>vGqDZ16A0X7UG3A{Omq9^+b==t5ks96i2$r1% z|2(N|17$lb51L;XRaSSQj^Y6LZQ`1NIsOb>tiZ2VPPB~6#N{d-`v3Qbhob7CvC^~C zv!YI)bjK752M;*y28B(6D#Jk|n$scwOH%0&2HeN(1j#1UQpje5XT5W5YgUa4;a$;5 z%Vh=?(qma05_x`laZR$@a_yC7)k+?A8*@=|*|~uq;(MLsG1}8Bo9$K|gHwA>OOu}I z$7yj(0Q$_Z+)hsoy&2(pII6(uZ~~+yXT1S1(y(MfSu!qaxA2oHR=HFg4khQj~%WQ?pxST#Mpj zN-9X0RhNCio&E*y@-Jj)t3WP-v8!q<{?Gz40vu#!vI|lfQ5l+2xxk3Mu3PjTOZy;YJm{?m_Gf`Vpg z^!DFJ9S#VtA8=$CHU-WgH-tn_#WrLbw1|3C{zbHt8(z2F@q7IX`)!#-^9{4*W{Q^Bn7wZf2O@v- zX;WP0B83B=^M==en;L-ejrSFf#paJUaF^j%Rj@8Umu@c`ULhZTaop?nI~#D?)NAF? z2N5wAK%B??8pL_buZsdURtg)%qcR+~056t<4f??R#E_L!{J9yC*YxT5!)Dwl5<>K0uS>n>UtszRbyi6#D zk_ydDL#xf0xTlb4Zre#oHn)mFBr`11a3ND{p~fO6^|Q!(myXhD7Yi?ZvB1yA-74Iv zw+e5rTZMa*w~D!CVT+q~=J?U!tcm0=UhF~m=lBjm@7eGrUJSkjbMqyh zLzGE`hIR~E$rRUDGV5!%#eY}fYQC~{-xE?@5zX&~CD&AG!_X69CwOm$3X@7X7IjIn z%?|cK982L<1&Z3KPGE$GOTZ#KC>#Wf>YX4tqAcOuKYAuM-~b_3oC=pMQ;3Tj&~Q8y zg%Z)03Y1GwtejUtWU2hP!of0MCe29ST_I{juC7=E$G!JRbl1zk)!V zWZ@$}o>=@k7*F1s7uEiO$Gtej*_D!`BnHGeW88^uDZTUkM*4xzixlX)IEtE3DX-XJaLH{i~)=> z3gqUZm`#i*!qu`|AWU~wt&xMDXk(iMhTLwWzFBEDx2w&TjJb;`J31?=X3T^_6g!`c zCFY>(8SmQWN9iT;i~$bKZIYZpT@WyLDXtR@sle&XaufHJ$-H%Vflbk)CBA4fCAl=5 zih**V{b`L67T+P5;MuT)9f`OV%xR=DK@DOj#@8~srOF7zuhjRjB*aM=azOWkV0hH? zEjm%4lWGQI8-z^FcJ6#dBwN^)G%G85QrvP2KP3KO{zR1^6Yp0 z=iMNZXDp7eV*m0We`rE5)_+Us8y`Rql7rde*36X5$rn#$|r$R*++k<5MW??F2De|NPUR#0ym+^ISMOsl=XilllpSR{Qu=Ii&tTN zj0G6DdBlK&bNvkFdi_zQv0d72!d$P5<=yws18c6UhcwsCpRY96bwMBYxt>V;&BcM} ztIxwdVr#p8za;j{uWq-S+oea9cJtlpZhN!7R}(jlk2^y{0k0B^ueXD~IEUI`q@Wlg zVxr#jY7rF`Bw*AJlaQNA6Q%iDLMnyF}o3h`^gD~@;oV8etRGGCE_GL@;4XH!N&(B zwDMk~;+1Np?WfJk7o1eW0u0kd(3d=U$_|gN?cx%8JO_S;&KdE zaD}HwbE5omhWU&=)eo{c(wyHVW2zrP185vQIGCX72>u|25BwGBTDu=J`=Nd`^jf-X z(ZB*&`uauIPC=szF=az=f?_@o^ezVJJJG$8T^MQ(&MHR+I)ZTA#+^z#a}jC+oW#KF z%-1Jt9P}-X)E2zU@kJDdLT+{9wnqeDD0L%Bgt!NR#t40>iCnse9Ek7=B8kI?=++EF zD+$MdvR=n(7u&=b;{?dMC>#{vs&HOJhE~i}CE4;UBN@B4w_~&pH&SwOfM920qKLj2 z!3B=J%=D*_?LpoyQP(o+D!&NQI|g{MG$(+UmgGal)is6JlDZwOO;H|3G+KDE6wT6& z5w+{V)_sm4F<>aH^9F}irv}b87!LBRP+MPgbQLuj-VxvlbkJSae2pkjx@WjHS&a+T z8l}4dbuk<5eA)Tk4zvj@%Cd{tS5S4(ox*xC(nJ0k90X7~PL8~Ep3zipfw(IUajVxI z1bSQG%^F?cJe0h&;@0McYmS~^dcCnKm)oErK&bNBtAVz_JgVn82Jk}JnT)_n4BL}* z0GyeaCBA?K=SP#pZvbHgfUMd=fNY9de!}@J4o(u>GEEB`05(VkJvNm{iegtsR0IPY z@UDQ0znCxF0TV@W)k}}M&wBwX{#Vxu%j+^yk7dR~`VqVv>w<->GMt>8B9HG%KIb~l zg7Z_!#gVA{r>Z1q-%`-A46M zb-S_!0Ii>PEW4|I<%S>Nz8~0-RN_`MKyoV7B}I2(g#i<&Nxk)Z;o`jN2fmu#vo4tG248ZJmUD&&)KXy;dDdD(htaWIQB;kC}3(^h76t&DD5UtCuTO zQFsZQ^;pq%ufqu*m#QuPbF;n!(ONMjsJ5WezZG%c1S?c$_TKT@W*`Hu|ymBvihPGXH;Real zqAEe_C)B}=yhQ=`P*e{W;7ONm@`i?B5iMNu~b|_W;c=8cdcDVe_@~{?@$%3vS}l9?V{5Wl(zLArs<9hx?)U67gmVW zontSBzKlU?xkpaOdI6`7xk*CMJ<2aOt_+eoULeF#B5iO3)uJx2Lr~uyc0tF;5}v&_ z>2QmSLU`WQ|a$603O3x0PqS6|>xpVM|~u*2%^2 z^ktZ4AJzbav&oGdb__~t9t4NoV^}`^fEB!P~iyHKRw^D4!3W47$V9B38Z57aL;nlg32APmVc+h8v1R380g) zK1xY9qi@qH?_K>NSwuLWzW2fIrgECQzZHvQ2EKP1j;vUaG04kr0VB zhA+f47+k0k9d&_wMU>s;NTf7EdO{o$kIjWV(qruMu*Wu~MV_0{5kkOonhOEk+Q&5G z@cXcosCVh>f%-fla{G*+I-ZPh9Wkni12nrlSixLWA-LOS$%t=|vs>e**{juluKFPb z_rS5(Q6-WEH~5@eA8>##>?|1BLtvoh(<;N5%x`v$c&kjbZ>(r(0u~F&3rUevrN4-* z2Kqcx^hW~wX(AgK!b4M6Du?c3oukLj@=CFA`*u<6E@BdkNlvs8VtdG9R9f<(%vkCV z9l}#XCPJTeSBmQ^>ua}*>uX+m#oH3a%GfyTg*$8Fiv0K#8NE@5W-cd^pkTL@HHSdS zsK_$0K7_Xt_y2CTPmE9g;UV1q>5@+Y1UNPt=xO{DaY{@&5EIRG3KMJDm4R~4E^a~Cq4Pl2-Rnbw6}B1xgxHq zK6q7P_llaBO(4}CA^>!MqhgTb!$ZGWy)Gsx1j@|0GB#hKu(n!Q!PtD_=UO4Zay!4u zKi7(PR_`p?(WEUz?n-mCLkLCAA6t?!C!}!*KWDJ=iiJHyF^3}Z!PKRzhV+t= z;j20>E7~nE2Tm)5`Ap=9a3&VxAUK4ofGETuw2~MVrNW1K{;WG1bo;mpg&=w~K@{$Z zJN1yU=wPtwBx;>cMqmRF;;D+GH6BvD3RvEgfoL(&pwKvoYkb#GtosyT#P7cVEI(WZ zu=8En`2kM`#FOh)g^Q85ACxz3jYr0lij9n?)EF5L6c*I&QeT1b3IR-t0sCBW$r>VU zkQ50d=E;*>T_iqZSL+I3F*0-tp0*rYL$qB;Is`bwn+qvI^l_&Ec@j-Q+6vN=u)>3* z{)rviQij0pYG_l$`DWbxHNUh~V$R)^Ey`G#NAAa%3Y1U^D(Ql{9Cx+LRVVlruH|=9G5g842 zKVv~aemUsA7zadGjUND_K6ozWkkk|g%P(E>i@iUhjqqOTR(RkKf(_B`0#g_%XZTkC zq`e$+S9l2~KD6+O{{gpnntE+m%lC+qX5L&Y*REl48dr;(ZoYyT3^s@I~^D!+*m)FKz0h5Rs`-pO8;rfF9sMmr2)B4I9dXqU#Qt<^i3yEKmT%4edqt%w- z832X;8bwXF=v7}l8yhhiLNOO2DMB>oD$Kcxo`pg3z?@04{w0Ccn~iGuLm5L|wD(oR zH-rlSALW0LNIr)#VIs5#do_eVzv=vO1(TvzX?8h9(4bh6mxBhinpF9I9(KjSG$1!m z&vf&|eh=}lW7uLqNBKuuz~O@Eahxw^IO9u{}UmcBadY2s}sL70+Ojz1_Chv{mNr; z+=fAnU!A~HNakK$PPTAaK{DM81&In3^7%`v^vdAMMB*lHtugVpV!e2f7aFt{EEs(pZ~e~?9IJbnv|wy*^e5PwK~@o+irbPPqXOiXiW z0K~W%SH~{NTfwyFn-+a)NhCPOZwk$e0<<+0eIE(Lz!Trcqqf~3T&L4B-@X`bL5Lk@ccp}8{>3A4LV_Fgnt%2$4HE*Ac zQ<(68^7O@hsgLhlbz%V8_b21iHeD+YpzP>VUFbf58mmG!e7{z&fq*vd2b{{=-xp%x zf$;>hNk$=L`*|N5$=p67H-t={jE=gT;RDEU;8Irr#^uRVXa-cst}<29s1}xP7A{IL z8o%MaPX&P3x-D^i#hsl=Me8Np^oRAmhKF6LUhnOS zTg>#=+Wl&J3F5#o)A8#MNMxhwsjciMVrLx(7XC$ok8qarPzO26NlusuW5JZHnqZv> zC)Q#LBP%7DFsM0zPlJMlYNr{}s}Q#~S^N1MP#AeEq2mA)OHTL;yX3p|zqrLs)4*O(_XkK@3mlu#o#A?5L@)caM)p-HX&$QW%vIJg-s= z+C?uctRWbgq^!taLKpNQ!3{IghJaHibqk_a)}Sq@F!wdXh1GdX$bzlsiz%|u8E71F z@sVFcz$Ud}JY-rkye%0M3C1b31h5xe-3#W2V%r|xJ7wHk(J6EFASGs*0@D|Bz{uS@ z>Ry>^uUXovK&CHV@(J2-V|TW7Aq#2jOofeT#2?}zShhD17xE4&7>)KyPJ=4hbH!#0 zH$w!n!txXs2C)Wu!Ko1p*uZE|r-D_L=OT_Gy5<3sg;LVeV+>(;#u8!5wyM1Y%-Un&x(7JU*EB#t$1bOY4Q1Z}}<{#6nxVfOsD}_ZwC4 zduoam()^h7m%vd5c}M~Pbp4Ea%k<=DKlH9L&O&0CNPZK@xvEVuHCvx?eoWmF>51rp zVZZAS+C*>Ww$N{d+0H!w1kCUNec)vD9KepSF<5yeLZQ{zt7O~> zwVMmc_ydt!A2)@+1nVXI1h2jJ!*G;F4Agi7K@JxZhsoso;IG>JYNNH_{0a?x7QfR^ z!rG>9Ofam=aLCBO0SH_t6nd8Vl3Tf5EG)0C zudb}Gudl^r$rjd@qF3mfU=bH{d*L@Zi!Z@9fKQZatz3DMcD5Hnu;~4IZM#~lysSTX z0RKg1>8dyeUp^3(0mbdh=57hhwg*%M>=@nmG;VsIe&fwpUYF&y%}diuak0kV#J6nZ z;_EFv^7|*lk=WYL6lU@$^u}jTOQ9!xU+&qxE_#%UO z-mN@s-`}opzN;bBw8r5IqML+2Q99TyHQ=;DgX2hFN~JL}C2wY~&b-0c@oH_$d;fl` zQGt8@!&391xW|MWOKCL^F;wXNa^*p3Z@cxfTHD<&ZB|}x)_0$Zyhg83HfV>P1C$Cc zn-5EkO8I5w2^dqVk18K1nTh7jpr(M~ zyN&8jsqxemgK!s*R`biSr6Q|JY}g}WiQ}5gg^4EPiEP95O(s|Z?-qCFw3g_+iEsZm z7e4^1UTV7JHcdPCzTM)d)?B@c0`3EEpH(5WaF7MKEh)CBn_#U>&(GOudhQC@rCgzK zVdZK=>`wK@Qx8mqFiRsvZz%q2m}m!{&F+Lg1O~$st`Q?Kvptckfywyfx^_pXOCm_i z=-H;CA^}t$kgVYwI-C!#ydOy`e>f2WY={O)N~woAv6dLeN!opN$?Eh#@L{+8KKnavi!Psl&2rQ3M5yqc0 z$icBC&064E6``xHEStO?LikU-C|H>SI~QYh6b}~~ATyvsJ11_iK1Zg-%Yxl=Xph9l z*cX6Ic=uX{BOzXd#+#_Yp=OEp zL(4>Aq`|-;8^TD56O26|gIr8$&~e!Hrf$w|x!h_QkOmZ7vWrf8E@Lu4-jSBWGO&}q|qK@^z(?;R<-rB zhuNcy`t7RP_b@WwQCIO$WxaIA4^EeKdkpZdC^s|Z`4DzCvJ!m+~$mC5R-c$v6)!>KZ#4pCjhurX*HhKzQ_5?js#`Z z(kEhe)Rr(ly?#h^RMzk7^HJF)UjslTu~%@2lVNUpko&!PfK{^>>?|aHS0efIML#Cr ze*3$eFDr=E+i#1mJMA5#3K6hRh<{4ouWmt1OR3J{DFlRU5r`Usve}(l8;wh#QRCP)8 zCTj~ImpO+}6c!n#HzFF%x8L@PA@cq8S;sQ^1!p1oOOlH}1Uv#LLz5b!*($a6ny)*V zq{Yl&zKrtXTlex=V(FO0c`t^eXApTde)e_HL5WMc-j&Re_AKwdY0`%QfF$5i44FlRJU2&#Vsm^<$ z;tKivD}oRc$wKlMVo1p9qXp+j)M$#I5PgE;aCdq{tCIt~_>m9BV5QlS@8rG;IMQSE zK}Q`8?B^~Y85s0aUHpWM0klsT4V|w2Aynfj1`iV3g$xG{7iQYS6{f6(``g6hPlY0P!@^Kp-(FjmqwJb(6GLo7>e& ztz`x2Vx1FW&O#D&IOG@;-D|-bP6*%o!7YPUMKWIleTvVO@rjxJtS1CC;%#TQA)ihU zXb46(#i;7{H-T$+lek^&{194amieH^wF#a^ zBF&xEJE1gtVkhg1&#-K`;njwNZn!d(NR57^uKGPz#cC_pv)SBkm%tOd+ktOPNwHaq ze!+gdD>klh1ihslJio-R^~c-K1!N?fczRA)#}JL+gwTkI)~pO&-hi z^-$~Z9~@}09HveNBSFk$z_+kgrsX#iQ2xjy=PFh^L8y4y8u?yKlS}r+y=r;GTkaML z$NtLg?CrvlpDh%+h3tBFc{zJ@C-3{~E5-HIwPNf?s^TQ&9ptU&{)mjrom>%O0s3z- zH#8i#ajOMMtIIH_?H<5Q1i3xLHX;)kai1bvjXXzSUxjmoq7^C85%){rUy7N9xS!Li zG-6l9wDi81GP0ws!EHlOEpaBFo%3sZ>>{tD0|hgA)StRWM*Z{f8fhTh?0L7--WvBh zVyMTnjp0TiyK2>fgL=JkIq*+uG9JQy!TV0(8aGKM!M^@YGExBCBmY&P&z7pZH=JgI zbjyY&0d({oao_M>03pb+#*;FBP7(m4gd#OyE*jP>3ZRSyUL~c5GHBz^oY%CAbcyOh zQg1+EI~UbvX(!`V2ZJFvo|E^v5Qa*P&4<-T6-EEo>@qO|Tqg!YP&kkRL{^(o9&8n2 z`zXVhu7mo3d!2+7N={@NCeN`N4SnRLPdwS{;yPKL3nMb^O9|)iCx5XR&%~SG<@~D( zGxw(J-tUdkgRE4GdbD1mE_`*h+^x{PskrXFDMT*&{=EDuin)c4{PAS+mjH&X)NEF_ zYFXrg|CBR&O}76YUwI_R(4?VcZVidmL>9g?6}s`okg3>Q(?x(S&+ida6x@nVM*jIJ z+%_MR^QVtCdqe+!kJPQqRzU3M>RY;Ei2O#{e^RlaV~TRV7!H)yMqJB*zXGDU@J(Kq zAtt>4Ou55$X5D!j zbgUXaua-#FG6JjqhoRl>D`H|7GWefj1jCz&bB4tnVpVyu*$UJ1TrW9%34ceB+;e=R zFo!m4THiU&g8OeJ7JsSO$3M1NuRW?XT5mcJl(#NFO2ZD2LB`jNXFg;6?0Do40m?L_Y>COHHLKj5G!QX6S$&o$nM$?MCeCyQ0R46)Qo><-cA<5Jf+ zyUkLQ61%0Q$4yi=dC;nfkJD6_B?BuRwHpxA6uOZmHIU%wV`NDIa}OoO({6a|>OK+q z>gD^JGQDfOLV1nyv3fQj)YM^j`~tZ6G)4j_)ibOYDgW>&rO=wO@HGj#u|6(&BWMSjjF0cw_0i!uWKYqTsG}e~ zMB%V|5#&yKkK|M^)=M}ELvxTA!*B``(%h!RlBXHYI0mok#MHAYC;{S{?pJH2#?$?D zZRr5m)^^pLmd#W!FG{IVafB-LW|#g3{^%krHVFC)mo-5GMIj*z{wWd(_M|^nU~J2Q z()6p48qA{s-s50;h9fD%)fMfsPCY*uOPCr4XOtwRHI7P(OmFB_$t)W=?-6w!g&G^# z$>|)^@y_z^<@59kiqWCYpiMOdSpoDCd)wQW5NEjIU)A}L&FuP_x&SiG-T?+gET$J~ zLu@Eiifku1bkAe^#xmP^-eV4hX|`8cez9Ta(;Lp~QWRqYe*sD@eXg-#*19!G_7Kj; z`PJvAtOw52Zg z^!C#``w~Lgphb~E`Zc#=g zsg433F@I7qApIlKap=|5T82h#_ny%*RY;3zGi4y5@u3+#*LKSDGAj#{_ybTs_jOfj zv~ft^T$<}}su9;j1yOk2q|J8Rt=lpNVNWYJ4 zR_(rj*zIo|c$5k^3MHN(Ta3F`YgL6<*7Zk6r)_m(ax1kmXY%$Tcn21Az+i7B;9v-r z7gD{z=|e0E=XB4RfPDfNK=@mxq(S&Elp-d8k&$IGQD=9+VB)UZ9}dsK&Ai`*!v%QA zbD^ez_!aapTALm1K>H|UT*MuzaKtjMp|ZuM?=G3%=3OMoKpj*m+FbT9l-z}2J@=;sC#)v{o({)k5oOqx871V;xN)*tWV0FJ}-EH z;&b`(bicAyt;ruA?)hJNPh47=S_vN-^9g?&$;AJBNm3@^JDOqQ@jIUQlAc&9iFhRc z6!o3z9giG{dFDWrjRGD9)sOd6#@oWc-q*hZOZS*d^hKD7|1lDWDDA;AiB5 zi?c3lWAGLduO}9N7?j>kaWHL*;rOicUpw+|agHsacPs5y;?EzbH0lqk+uH{)5d)yu zu+fyfX(0dw7FBk+2yp_$?h1e0rbKdYb5*iD1u0lvUY&CuGLkDMvc0I_to<>)5N9Fr z3zLh#9Aa*j>wBQB-ff689Abuj*144kKNJ0xDNpOMjF^5X8ibO#W~b^)OkiPxQG%h* z<-E#!M_ncuVi5vLZkL+v2itYAIwU=WMNk7tqW*K3!9s-aM?PG`;4CEXCX)XefWqpH z@|(_oqs|-glL3C!*x)hb{%0B{h&cLV)FmF@a& z<(AmzDud_U{_wn;J|Tp@`b|=^`SX?V`MRKM!SfNrI~|ihGsDLWr6CvXzajbwx}(~x z?CiFl-g0t4Lt70hfN{mXLJN{oAL434p3u{w^wb-x*tU5NeQ?2nnUzhH4HO0SzBjN_ z7-kQXXx5+vb(s>Bth7cTQ?!wKTh*qAO;A^N_VU@S156TMeb`3?I9Glunfw*tV^XbE zTJ2J+Ui%K`2MiWkeu(-~F*sXfrGS|@gqwc$8xy}1qV#3cL3Q`}iZ|$v0g4RdWgrft zWx%CnlrbX|E6gj6E*Cc)QSHhCg{UIGfg2CSz(^nVP9UOi&mTZg3e^g=56MAydj{VU znx|2-i~Flm+04mj(hH8d{k}iw4ktm(4Jk~QzP-G%vhHrq zOhs}@6&%{HekJTz)n>E0v%8J^RW)d$hpF7J)Nk6a%%88cU+IEA?5ktJ`Ado9uY!Kc zvJP~?`I@rzXGJef4#y1r-ncRR^XEeoWI1cw@Uu4oX?7BcPcHtONJq2RXh1LyR3bS4 znGW@8JkNOMuk`+LaE|ofW>!?To2izfGNyP>ujU+i@aN5n4`hLDEz)5#uZqixSxEfJ zJ20SHi(mn#o2I7+?tnlnzIgADMAzdHbyIUqv!(jwVX%)VzIFGw#emH^#I2%sZF z&FQ45j7C;bAq1h|Mpv2od3OM(jK%li8gQZe{?RkBzH9zu1mu!uXFhMBQq^Q|FZNlF zhGo#@9qRL9M384_HCK5azi@Aa&CELX=zGS3VpwymT_7H2c0wKAIy7I&WH1i+@;-+_-JME zR|6d!F^sxS;-hkR;wMn4pBYkVbSjK;G;>9eIdfkJg+9nwl(Dmv5G944mZ5bT!|f{R zc{uiTgvwQHRX{ah&?~xlyCmV(V5yu+P3y%{({e>jI$AeGM~g@&=B_1XD+wOqTpc^w zHN(GL8A(ss5j210zd){8ZZJn~U?Ni-s%!JjauD3hNoO&5S9k39`hf-+iP;%|zL?Mp zMlUjBC|YYk4=j2Od~MW1$QbiG!$E!2?at(yLzQ`8wUI$|zD@>QLvKY<+wV}H6Q z{o$bxltq$oN5+Yy-Gr*fG&p934T-a71^WBMi_dsQsPD?5~` zZ*tk1-O6=j;Fw;vvhw5xW)M>CnIzt%q>4;H1fHPTi+a98Rl<2Ww>ba`;Dd1vJ+#WT zko=01{52rQZ-;&cegjXgOWj8CHuydk}VR8`!lko-?V0)=XIs+i9&XY<8uel;BSL%u2A2}cmI za<5Fyjc!v<;xiiHoIZDZk& zBo==iTrkCMR<7@~?>}u-n&0jmDZW$lIq-x=G=EAvez=A1PC0Whi9z#rkng2 zH(3SXq67>~;1olpv2QlFy?*a-1SO~8ss#_k!oBdtA4@rJSAtpOy-0r-Hb>a?3OE4y z;tB}~Qae8xBj}e@S>!EkHFil=H!xyW8XJq$Jce=^L6w>D=y{LHc!aPA_pshK=_2|Z z33=oW?v^UecDb_Ic)HtSZ4NxC)Z`OA)v+CufSDKlvBvj`rn@S@y|hpl)^gsq*t)u- zSQrrDH)w=<19T)0(0Wl=qcD#YA~M=ivwwIP6_qm_G-tR+BhDUCdhS5%zsw_!oQOGa zlnsP<$?+Mrb=)(k@yyvK>H|y6Kc<6EWyr#zhZ@elB=bb7LB*zOu~#zg{YVI>6ow(J z%2t$wK29jfF13~`+@5m}!T#21ZLqq_5^^Xt@s zi4S6kFANhH0dyoZh9XrOpg0OEG4BC4#mKW3I@zdtsY8Dx{uReS_&}i-uNurMvG9q- z-vAKm%9GvgQnmJToF7-jH1G2><~wdw?^pQG53nYRj(J}(CBGD1*6)a;;;Ov+fXDND z1B2k1pTMkY2jjD`>zZj~FdB;JS}7v~>~5*iLiJV?e^Sg$?;hWrR3sncrwTOGD3vj1 ziDKJ)e^bclAE-~NN~jn(G$?90VWzTpX!>K|L%vbj4}r%3VmaDR!~PsH5RK|FG_Y|; z8cW|+Tm$s5h3td*l z@P<-k2()1^pBaR?>-z&YO`MZKhB3?HnbI%p!@eSl}dHNs0%sU%)$2NpLF^#K>GGa$1= zEHk;SDzI({stP+&$m0VXD~xtApCan&RD^f2ELpNU?~Y8k2l(2^cDUSIQsxR`{5-G{ zEZTOuM}4e4sSbSEYUrF|A#-PC#YDu<6RMXgk|pgP0tqF|m-bSW;sVwGQkn$;w2)=P zvR9jFDC{vGV`Rc_mkVoqG*C3^1NtCVsqkEGs8R z#Bx3;uCBT~Bfw?W$Qc+}!An$TxAIcToDpJ)x`&joQqD77pG?~n>A{paoy0uXmIGN~ zWOuaqpgHrW0QE(Zr`6h4&XZe!xm*y0Yt{^0=yfim^^c!HYx}i#-@I&F6j(mXEnN@fuP^;F3KRTbcAY z;6+FL@a(zQUX=sx;EhV|CLqpL_e&2SU=WHd{?`$6Oo&0GMT8a|p607G=$ORx_-~j`CqtD^Hh= zI1+i;5LDEAs#8d1M3gj&ypMR*!3%99iO*C|;GXHK-JDeSUJ0U7RnRp~>fAV+xL08s zWQ5})fbM`*a;hScU~P{}jhfikFEcC*6N{YU+-Po64< zP88~L0<1mflhFx8j|f?d)6Wn!BlcxX)dx#x&-~~e3_l@C?)SPQWI%rb+~bT4X4{qJ z4~_+?h=OVS*%?9v3b9UzUO^YXz7(wzs3l=eg9b5RFCAi`xJ$DhuHMr)#wp$io<~%l zKy?SjZNlE?!@*0ZQcJnWrV|QTAho(^Zhs*y@JvBS8R2^D%EeEHR4`M_ZA$}LgZZ%L zob-{riNx_0{10nIH1f=e;G`W2Gmh;W;Rs1Oe_VgleME z@1i0m=%OPojGQ5hVP{OlY>6Oq$fp|x2#lC}lPZL7gwAScv333}=L#!@)%9gJn(j+^ zA~v-CiOXDE6UX?S_1o*qg~Hm6C>9o+Ka)uQRv;~UYr#2CB;m_% z*(k<*Zf%bEg_qzM7yfGU-vesa-Mz+EMS9k6*SDGs-7#}C<4@85Y$w3E`MQ2K}TL4}> z_NXTvJd+P>D;*?`hQK@KZ#ak5PDsFT|2FD`2}9%pHArI62QAM!}%(%pQt3 zwuFVmpLG_08~fd~>U*0HE6wk7j=}GyHJpe$h!K&vWycX_d@nMPfqM&0-rk6A<~_g` zc7`NM$vDG!M$_FI!WF|zm9EMxz3JjrCX2;d=OY-6{Fc&YL&}JCb#!$s<VL1Gb~ z6mKpvGJ)u_!Kp9d(4v+%5FJ?i~j*&V<~vycRIgBuLyjSj`yT8{WDdN%Xw`^ z#+eqGtTTg0rWcY(94!8aaFyDD2)KZNd;ISG&pRJa>}>Z2T?k4pey3kNJKPt$^r+W4 zSju=i;CTqIn<#e2C30QB1fX>edLopAg;ct$!o5Ib599mcp3-boqr{FTk_+;Q&V_Uq zs_QyCLNCaQ7DW1Z<~=pOfQ5xWl}P?}#b<94X1?zDc6=3!O;Z}KA#9G+23rXXN_dok z`0lA7kTU!Up%>k_*i9O_2pZXGiVu!EXN1v&gPww3;1LQcNr;RaX~Q=r$WO|O1qvD| z>H7jiH4>iz%OrG-kWRke=(jO{8%SQ;96y)N=eevAboggENSO+oC`}Te9F5A2VEB#i zZ7Ynb5F?2W%$-B<<9N6_019DW#GVQql*560?Vv1X$vl0(LsB}#%&;5d_$T&sZ|rW; zDDiLWYhN3G%}a|6U+Z$sjvd#!rAS`#@SqBQX2d@cAIYWdS^`6Z8o z=n}yo5UfxTWr$?$rJ=+ncgd^Nw!{{8j~H}S7Es$aE3JFPQ#2>FaHK<>MB?u({tj?; zDeslGzt{O)iKh&KRzNHaW5E1AkchP8oypnRg%K18X&-vy30+EDL@$8ALo~lEMk5K` z5mG$aH@pHcWDs5%J`sx0?&4>`U@{Ts+l3}g0+sxr2Svj1e%>8|xc1_7sO(c@x#{=a zFq9;a<{R8C@WTj3A0pUY5mX{OR=^e<7c5@{JEPBAZ%xw`eOxsMc6ZekuH6;$E(;8& zG%udn$hDC8^NHkt1U8mxt=Ve4>3omjuPYva?IaUS4x5C=UaT`L#<@rz+rop;QA2$9gma!W5|+%ED;=qnZZ=?-o5b3p7m5K{4` z;9*~n_}fAcrH+R~27+Y}5*D(qthlkc-s23EJCx_uc?6vQF`4|Gpiq0~-e;U=N}zk^ zp6hOL6gV{0%204~s%td!UxZFItgb0~@7xPPI_BUWo%$j0%livX@^=B(M&-%wg7Z&R zBgM}MMo8%myL3y#5RT&Kz!zzNs&9BgnxQ~ky!;+RtKjy0K72v5>j|k)dIOwOG~Yr( zvAD#Fi(8r`KVaS(oPcFTPG!)^Ey4fQ$nKnPKEJGXpiJ-@n^U%#^s zVK|~0vY{OLTw!^2d3m*XXSuk%wiYIrg)I3H%IRiwi^+3m@pscby{+BKKb15+zE6zt zEl7FU_L%ifq`Jf(4A1=ja1y8s;}NmP1wyi6ss*tr9%t1h5;wLHJsblHXK(~zp)FVT zkr86e4Le?-BBn)=tfGM# z^fC(!JOmYRt;p08juD}WKBCBePz56vFq$4*d`gNp-|U1By?;LN82lc%1S91}?UT-b z<)Eu;E!_`PWK@1a@F)FaHVy;aOrjhHvY2c1P#@y6)Am2LlXm9mq^k>DNSq{+zZdz9 zHd}8x|3K}z;%B;MtVspPi2AkTk$p5aEpaslxOxa|_1$R^RJF*Uxs{QIxn6seu4M}O z%$+6W6y?e_SG(q&d5Rd23R3}zrWcA~)WXWEV-`N)IE()=U>2KCn}||&e&@&4jhY@Q z0tNG|lkt)%b~zyRdL&!<5_mH3QcuM{*`1wix$HfBxUsXd(QKw%F?Zql&Q7`f@Zru* zv&k@S@FG3$l3$t_M5zQLlbJsLI2eJe249pX8CTf*1DF9r?g}d^T&-w}wK?jrp?u-+ zjrfQzIa&sqLzEy01e25jYfZR~+}+|!QO>kti#r3yVj>^SdG{&QAy*aNn9M%f@k9>E zlI7G#eJ}lLdt(W*mVjF#p!q zK2%fD>__$RmHJZ8@+o~8o8U(Ka%JU;zFc{=zN~7J0oq0YyaH@9%~ok=*H}rC2VGw< zXmz0K%%w>s@gav7x@UOlpLKmHQ;lUrEwIM|P(-2;O~WiIC$#ks_T0hqp)~x0IH5k^ zy7#*zr|ID!=rwMLIsyQrO#l%giE8C-+>9oJJXTE2C%HnQMP|ofFcVBC!%=LhheHO}F(yYbBS4%l zz6yl9kglm+Ym7-xZOkDV8H@Z0T?qt2svsC<3jd|aggF~3pD5PQhmcDt`DdNQ{{(nV z_iCUxL4t$rJs}f*#CcDd7sBrVy8!IYu^>${-!rs9Jnr`aX+|b=%4f&KC3i0LGMhqZ zkfUr88^%_JNTqsYz^J+>on)oa19fU>%AgO*RbYYqT&qsX#GzmU zQvM(<9;QkGSBmZT>uPUSbS9=gLzzmf4cUDDh(e>9pLUtoLV_Pa1xQ}BvL>T0LKVQw z((mKm(jWRA+G}KGi26;AOQcUj4gz+Y$bH3?p4p62oM(nl20TTwT!T3orDF3hBpxIe z|5MnG%xRKHqvILF~;%vI_&T}8VsyJ~CUHE&>;(vw!k3ew0x*{+Dp)IEQy7TWXSeD2A z2jcQ~z;DU-^?g*wgRAHVUgwaVxbV$(_1%h>I`_wLTmX2Bf@Q(JdEmOnXK>lEMN(9) zRoU6CH^6MeMh+CH=?bG5Ph?;+7dP*dE(bD01W_njHdtt6)nL;&1Ft(=$WTL9hUyUK z3}3J_#vOnqa%GP}{S2Z_s0eHmmmxi-^lc061H=qYmBIB<3ALD}hRh_Me$u zJ_)dzg+?mxDG7$*pl#ZN0*8bvi!69>7bS%%1E5f5k^#;kg72seaW~r718wSo5Og;R zuEH^)K}8x^u=`3lmL9>@sSyg}0Y>UV03H~KD5Q%yN5E}}u&0Q%Lu#PmWPCmuOKUMm zU9QGJ1B!xeiWY8N)xKrRB2>gNPaev{C%*0?v&oGkYeN~lp;z#OJ8*TQKsWx z43FV2OEm=&M~3G+yd+;U{~|j)&f;%&CG%8vc@(=Rrtu^%36E^}#*K_2VqB?P%&$(p`ustSxni5qAq)de_dL3{#!+@<0O(l zoc#S_YJ7@Oh4tM^qtvQ5-gJJsGHmiIjM|3MHb2m=&t_OMGkoPROdtcEmasJs=^g=# zjtlGIjw>DD!LK#cL+492mcU4BPsPN)2och5_e zQXy-Sor+r#pE&GZQGo-)I!^REUN1uZ$Gqg&_G9dbL@>=%Wg%Rk(58ANlfC7K$_@?l{3I8EwvM919m|zN7zY; zuf#17iz(opp8YmbtP|2bd{OUaPp`Q)(utb5T$mtZ8TI4wyuh|hA<8pU_QfB zMjwN%;6eo~6UFyA7qZnOSSS-=_oI%7QX!=u_5B6C7QE_o@r!8C0FKT~yoh16iUXhO zhAGVf1uB42=_9x+>{fQzu9Jf)aiLNlam-!a`0_(>Sey(I8385^2v`uX#X(7)6i~Z| zAqqY24Ot`Zxd6j&w!E)&PS3?oOVGJ?`C)sv)F_G3sx+EuU_TRr0Vad21)b0sQ=qqO zzgu~lPL&@DnF9(`nI?x*^6cF=vtZ%omx|Z;(v&>WFM&9wI_`KflBYU#pj1Davy41x zah~-?annrcTL_ni$v{s@@Wk*`meZ>R4zz@mwcb;3@G;Oh(C!wT_Rc*BkpZI?T~64~ zs&S$l;*%6rPtQw6hK~9@A;w(7OE$9}VV2@RkC03*{z0*~e3H4NNIv*p=RZjrcsO{m zzg>R}Q={Ifw!r=CVRh@F`hDQ-SGQ{QMul|=)mp25ps~*QOc7>zY1l`4ibMwKrL8AO z(8}!7NH?w0$-m7MEYe6C>V5Hr^4{)t6<~7+C6)2KRXAs)u0C+-_PIg6Yv{=GQsPTL za9y38QmAU&V??tXDv*-thfrVri%DlO{3v%RghZywYqk70CcUF)eUNqnA&Qeh78Mdg z)EUZKv8xt>5idT%6DG~4P%Nu9)CvRT7>19g>t%?bnd=9mh=VA~J1=_a<9?^z>p(m> z{*-)I$iXXwBZ>qr^KPrRtVxPb?Y#p5)b7sfJpsLwwP2v@vwKa1GdoV==Y4hY4}rQp z91Sn+{F66SJO_M7lMKTfR2pJ3yieT1FIDIUAP4q7pt-4|>ILUCd(!*oqv26oOnC82 zEYbapm<9(26lHH;-EqkL0k0$}a{F-Dxp1#ji3fYNOFNR zxu)O%o9%X~wzXH_gTB|l&)lGcYvdrun`n2Mjs{2&Wt13~P2JRr?XP5b{bwY|Ych zA?OSUHy?itVc;Bq-?)(e;SexWmedPk884(KxuNeHdMY6sK(GW?hcl+^VP$W|ii0~~ ze6v)a@f>u~MIU!Ps(x?Gf;z82J!wskf4spn+=izBC~i5P)L!{P;HF_EWF@1JI`Ed} z@-Cs^(xKxLm^;KLP>+qQ+z_~v5P!%qNPhBREQ$E8{eTTLE_nf>juzQHDSo|Z!dx|# zrHVURFzh1%B33q|D6}b32~+uF9A=DXt_))aLy!XG6LX-nmb=e-02Ko7Y}FyipAL5T zXI+h-fqkIcLE=U!;9(?AJ%(w`ZVzt`mU40B$j@XP^gL75IdPz#G3vcs{w3+C#S4SH*qt z1aKf85z@sYfdkJdabw~;6x;c&fD++GP|Yr@lxux-_E--zTmYJc*f~K~q7K-yVeUX2 zC1WxkGWuC;A0m_F1}trZFFN-vlaGphvt{&iARWr&R)#yrP=X^BevHjJMC6Ewluj=Y zT_f*yst#?j7a668?Id$~qftl5%{Qxym3`4NMjBNU=E=Z5G}gu`23t&EaXn!KAuCLA z^TW;a=(KzE3<38?KniVz4j8LW(zK|cHzv!~71K+_sgz|%;-;{_inPs(8~vo$A7@2D z$aE)Huj|XW7etkWUNV6<8T6sP@*3zfyYXRn{G!XeEp%$|4N!+K5t4z}M8p9Ia1-bQ z+~yTqIae25|0r?=Y#Z3foJ&!c(K*HskZAAuuxH-+$y$a!?I1#kr)Fc&wB(99i)OqS zL{3{8V7dggo4Y``tHQkc=i)=)>ag6M<;ymaN0~QuU)zu&X3nFMxxQd5eX_3uE z9R5|2%*PA#KH=|(`lXkoLmJQYoVTkIv3n^NI7WTHr}h0D%|;j5!$TP`G3wEw+Ky1V zk&6wL2`_qN#}HFiWzdJ1WHSaKR!k$3W)BJ1HMV+;O@xa3v8jW-7$w63s@5`4UPc!v zs!Xyiau}f{(^bb4-O+rtt7nWpWp*zd1yd@i)?A$kpkSd6IVW!l4UfhvraHvwd{sZ` z93iXkg~t97p%7}j4MG-)ngdcCp0fx70@%^WRs2l4a6Y|-j5WY+o?1%<7}j|Y{iA30 z7hv@S5>2CN2T}E_;eM_mugHj%Ds61dy=cu{v*t9A)-2SJ9%a|3vNC*9NjtiF9jX=F z)9Em?NN#lVg-AbZWmPwmhcq&9S(DnB{Lt^B*DY~c2e6_J3`uv4#{*$52z^+>p`@Zi zQh<*GQo~$US&!}gFwLQ9T172WA}0+GENh}8GAT4t3zo7TD6mme)z+!UPh`PBRO)O| z9pKCTMRuKDY7mSeTvA|!JJ4>g=q{{pa$@^DNA6x~iEA8ccfEN+3R+?r+zdeJX{Zr- zqt^#3>wXXzfkuHIbH0SSP_q#GxJ+H+>Ml);oi36Ci{5+dE%h)WZPOQ^WG}5IUIBDY zq=v}8)XL)9UqxQ{`nwq~PdYRO;Y|aB z7|1(IF}1#{D~+>TRW$t-f9dXgrE;CW;w$VqAiKZfo7ix8vh3MU3J5oZ+0h+a<+ji? zPlKiC+wfyTi0m<&6gPyyQ>Y@R{bPJ;pqq`9xToHQgm1kCTEl)fvc-srivi?lBgm0G zREErh#CMJISjRoRBPO_*-Y2Juy^8UX1_FS-s;;QCNm6^o*3s=B=iK?l zbah{m;-e{~OZ^w)uE5*<&?MH-! zl*}tF&Dd!uW=T3UpR346l^Rb5h|3nZCiK_78KcOqvG5elP95kl*hjp*T^>WA zD2Ie0p7S0Qr7Ej~ri!7f)b@7JxLRqs%KvH{>0vEDaI<3SJ#abTlUYsWbD*^0rcV~m zr?H}Bg+8_8jA8Z8x{^4N>F2=AMGu3io22^8nB$z8hbCe8umcEp0;&mij1FCorkF}G ztOnjxj!>J1-UaStFzCWH4?s9$id?7H+aWtWSe-zV8~@~~6S#w+C;1%3f{ob|yItaZ~2u-K^I(ORaS3ArzPKQkfu=`h4n| z8!Of+of5)%zmtk{@PWDw~8s7|P}lBjWSvT4z?Vu)J!B z2a3;?y~%l4P$mK!65einL{g^xidfVc+Oyso1P+Zr1qhscXhcAX=F~ z=@0OX=KZ}~HbiQO2g-fR>k$~VfbCimu8;uB<%I>dKoj+bRI9;~YkU(G=_7v-_`H!D z3^DTa^_`t+E2_;#J{Y`_b6Md)VZ0@J(r$qInKS+yWE6ZPgztVIE^^`vtj?b{ItIIp zx-)?-M=}&j!zbqAO5jbWe1E6uJ?{=W0POWIkSw=jAhw1s^&^ysu#Zqncp>}J>}rJF zm>3EYrHU~`A0C7kQyfltfr$*Ky+hiwrQ2={X%AM0Ndr+6gf|f(4U5|enxdufqLzdk zGoXNU&d9(@w0t%nRyN-y^fR6Fp^v(1_aY}PP&15UPaJa49maK;_>@~4A|cW61?_-w z9gC;BAzPR#L^oY&w41x_TD>h!6|v7P#a7pgRu`o=(U8$(aCsGttI93hd{U9|haeSF zrXdrURMlGQPOj_yQkg~)9ZZ@Q_ZUx$kWx|Ux)cdj&coQ!%9`g=s8a|Ii+VM+te|}9 zL(vNi&w?}zv)Gyd1R!tR>fTGe1dE3Gr6pF@P_9blqi(dM;+OV6zCc(m-wn&KL|lxB z$@o~J1Eo8Jo?Cbfdl1MDWrf+gLQJKKV$z^A^t?!;li^g(*4Ba zWQ|egrtjtP#C1xa9o^t5crdGG`C_9^SKMp*;_f%`Px$tJiV!?HJ5Uxp_91#($SxO- z>Vx9+H~MWXBSBrT+Y z_nA;FbPdHJ82z;NoPjG3k;@xjg%VZm_+)nJ*fqRv>CR8y1bQgAB2pJ7TS2u1dy8D~ z+?w$GFzcWv;Jj#kA_UZ$?>YS)WAiU0emt@GhaJaxU9_j&dI+GA_Ty5u)h;~{;(2?k zRV_C^<{T;qjZ2bIfCjM&_A_|2iVgsH^kq4gkQiHRcqUi^BUH$XCk`VTNHOzXtySG_ z8%5fsS!Jx}y!8FaiT6ff<@W8>^*bvZk0{pTa@Ot9aEs4EdzI~UE*Q4R7(q?W?9LFA z+gbRzKjAF?5pb^A5*Mm+wX{{M!@aioIp-JtTsd~|YM;SZ2WBFdf_SR4rET<1Tim$M z2rQMkB*g(^8(+fRnL>wZXT&x!1TjQWKAiTE=_%+VAGq%HdJs5i48e-W-n~mI%ns<& zKNc!!dO|Mgice8-wY{DDl?KH;tv_y~p7^p#7+E*BOU-7x-l&qo`K8y~yB~Q*`in{# zmPoTjAiS5}PNmr_ZB^Q>%99p7cnV9X(rDD`a?F~oh7hq^?aflFv|Zl{KPI;6@Y7mp zhrYnM^aDz-f1|u^q_1!9?bM9ldyQtjLBHMbyvgt=P(L6#M=QM8#Z{!Hy~egx3_Ft} z@Tu`n215h}nqmvx{D$X~zT)Q5DN(ZJV1J=CW#|;7av9C%lI=qrPvY!8$Ec1-iKV}( zEap=KM6ZZl%W_0Uq7XBF66!1Aff&Dfqe))DU6Tq9l%F8o2f*M{V=FQQTrtoWXu9J2 zsiyo1HX8kHyF0z zc1`ZrcU_!BULn6)@X{;AX1=(z;q475m=k#?r=r=E3u$;1^yXjCMzOD)gX>3RYXTnx z@YFDOr@LXJ)H!-H6t&hgo*5`cR|;Q+tpz@E#Xm3SFCDuIVpLz*Rr8n5Q4>S_4~T#b zEu^_b7b9~PS0Uj=?~4U|+`q`UJ*6HC&}~QoDvh-*rq$3>DyNVX#X1|rDXCyjVTMX( zAqE6KJ7`N4dKMMx7`inFpV^c-r+H;cVK6Y@IElZ(K}2F1Vv>6x#RMp~ZQ8vj z-BCi13v|jGBYRA4-<+smyyo$aO`+=*-%wqzNEM1#RKa>5Ux(tW)?xXIIxJsVh2=S` z5IIo|1Ppr~>k%GKDUZ%m#E=XzZnnl_s?4~Dw1%?m*lCl|lEs*)a8OV&(n7sO3lR^- zLb?vHz*MA6fD0=v+&H??lXT%3+m#l~jEzgufWZcpRTe*70g{Q@Bj*-X1w4KrpE!Ot zqJ2w8BHae$IjAlKckK>}?`R8$tCQ$3xUf#+`p_s2$NrKY#QvSB4?TIPv)vn7j+0Xq zA*Uw;C?fr|%>A?y(@(ZM0cocQ5-Slwf<3CS2Y^HzOb*)iPYz}r6HU*!(bpCZm05SOn za|Cf%uOtABAlnOngxGS{>=I>w8`%%oBFX#l2!U33O)JP{86&Yl{0l#j8hQJY7Y2Yp z5wb2lsnX-UF(TnWmx09q1I^Nm0=H8#8|k`Jn=;{`9rDJGu?R!E8IV^DPX-dm8otej zd`RcJ#H@-P!cc3#uCpc{Y0XCT^0JDFG_KCPovhO3WX;6X>GyOm30+Urd!Rv8vF_*^ zZGzdSh`BNlh#p|{D%Vacp-o(amn5a&s4H&YlOS}Pb@gq2%oN}-PA3x|d}q2~5^PCA zH2|yi*ifo&w2-U|F?DblMbr-rrtS-M3k{a~fpraaFj~zjjK)tcS zU+uCZa(Lw+Z3-%L;*RkntPGvwcQ2_qCY)0Fcx#&JOfiGt?&9<(tvR)1D6O+{y|7D8 z+zNZuTjU%1sY{QuX52Tdn^@rwy9Coj4>`iAX|QfYx{-(4~O8mgj+6p(L~VBonf1LB2CL5 zVa^iYoXvV=I`ND%5bW&3ekbM%YfMZ}9*%U4A^e?=tChmY$jI#^)13t;9?5X}8R`bA zHTxN1A!Jgcijhf!TNp65pk5H?fi4F;sH?TTiubToD{ogC-h+Arwz$fZ&B`t;Upxgg z(%ZZ8#2`aQryDP=Li@tfD&(lt%3?dfhU_vPNl#Dl+@d@vcxfRCw2y}UCGSybd#}<= zb7*raVH0(cCec&uG>2jz$hz`ac&&#OYH7HgI11KH#Y510OOC}o1)b!t;g=Y$H)doEA2Tq{ zz*mYsKq@p18QkG;!*d8pvNvo80KIk#Qz_)bDopO{8MLC8mvi|@7iKJHN^_tCW@^!_ z|IE_zS^t@(W%JZ)%49Dti&bgP^i7(BDW0Jz!*6FW5km3J)@we~c6XdLjsv!B-<{dE z9g`j6r7iwZh-(Zn8yl6a%9GtUonNb1MUfRpzY;f1A>`?YNKh-DF+E<$MHrG`KxrfQ zyzI&&u`#@NK5wKyBNy<~{nEtZ{~2QaZC6Tu$QeQg9R}m@RrpZcg`Z`(V(?w%M+dJ( z=h2%O)G0xzK_>}YG&-&g&vhjOFTGu_?`GUaWmgC%8SnAK>UL$`;SdtebBT^A%sLu6 zle6Ibt>oe#gLqRgIjXhKIKMtR*F-buyaigCrK{$aoqFB|T@ujmCSvs^oPWOfe-X`1 zJoz@~cQ{Yd=R|G(gkxzvnJ;+h1a&VH5N0Wgf zEHLgFCqD4}YsEA%6%1dvc-CihCm>e8El%>yw(dO@Zi94C5hgGhibTppp4ssPS$yG- zI&%iYyex+KAVhT=SLrWmo-jodmwkuX!Xz^o4|*XV)&QAJxO)>Z(-#tVoW&o5xMQ1* zdb3$+exLK_oXyb??!20>R;)SsjMlL6>y-lHsd8?P@iiLrUTmf}!2KF6cOm(s$>bjg zZt^Ao3B_&gdz`=Rz~2LrL-(HMB3A^x>{-Fo5i-bbZ$MrElYwEPmw6;iR*~hBh1iZz zMp30rk4uXN;F`TGH~8p;R}r~^DDwnNP@?%;qQ<~%+v>hIPNy`1ZMxuzE?M@Lm%wYy z%2~WJ=Q89h*g0vDK^P0npnCo*(DkCwrP&32jCOTdNpp+nP~y(scB=~Pz|B^pTH8uv z4?qWG(xNdL(W<3b*Su*ZKA3kNPZ>Fo4~L1xABS~+zbX#YdgIg1&oxNX@ezs|p>TtT zy)m+eh}WnE6PJU-9(grDYUx4IKbrIlXbP1x872bG zp^PUhrX$n&-k>`fj}+fU8X|sUjbI^(<19b7s4yB%&a;P60pXpQ1%&t#oQ047qr~EW z2{QSE?Y-v1*PTD0B0S;);N)vRZd6;9cB|gLU#)G|w}85@F3ykxk07m@h9?M2=y0$6oW$7FMe_{Cx26mdOvMj5dNDENNTxNz*+`>9;|ShN!l0@OqkKNp zd{4a~m_+(0>^G*Vs(|^AqELz!J{-P)e&mMvh~VU+V$}TsMy_I|w@X?z&AEg@!_c@H z^G#2G^V*yY@lH`Dk(?pegO`&K10vnRg1!+#Fc^|Q${3jXq@MxbA#^N03`IwC0w^WH zb43QyQvAzn5oXNz%yL`*cIrd@thcr)crvQ#sSR5 z5()NJezoT8Wv0eZdWKnj1T=y~uXsVkS_YxO1>bV$0f!w#Yq;u1a_Vu-NPgkv%$|g% zk0QDL&NWwL-Yn-eXge^Q-#HVln2dXUAkGtYecq$Mw@ihCk)E~J8=5HL3W%#%Td#r) zyQOnB?K6uBv!}ygEVmZmJPa~)s$|V&PEVi*CTu&TCz5h`j%Mq&$rd*mo8o)T>ej=( zU5r#B=A%ud!ksR+QMp&iR>Bn*t(4l`G3cH3`aW7_<&H|5E=%B{VV!TGW2LfG(=0J@ z1YMhY1w>#=1!q(Uzl~pHM@3A2Kt!ieGoB{)3m1z^%2@YvN=4X>^XkBKCTHQbA95D| zDd^uTKRL%+G|q&*+=)pHmVFa4h+-SzD76^e>v#+_Qgb?v~ zqDCx!8HOjsuVAo+gBLBFuJ-97eM`M`)Cbk1yAX>(o&z-PA;#($Jc>&(-!*9+l$q8w ztEK1%+0);mijcdlSWkBExWUK&!KEKz7E&YkxoaUyCj1XQ8u`#wpN6<8|jhOIKs5>$;)?p9>Ct>8K7L*MN?6|^!5*trLBl_dz;V$Fx zmQ%xDdUJ)pbmPNcdS>{`S(i|3_{+JYDXQkOaK$U(uP6mv+>E8(OasS`gGg*VBGqMwIJ_3I*KjR}do$f~S>m zhp9t1AQ=2gHh(9ZU-k;C8^!gF<=b|Vn?%5HY04&ZPPZ}Qg5;|Xl_Pd+^fXW_2mI38 zwC8WYg|;^+i1VONTCcX4Hv=M;mM`1Ei>{bHr|qL2AcZ7N$EM5@mu_bL{`4ubkoZ;3 z;-3IxRI^nsS01%@>${(J-q!B->S>&|kCA@8p@9w+b?GUR2Q)^ei6>)%E}+992p#UD zQUeQJT2f(fJ?(wkDyNsw>lD8ZF^y?aBh*Tq-_QL%xOr+8Cyh+KT1jX$N$Ux(6Wi=t zr3hSj?Rj$XzY$}yh^yA(E_>bip4Y5X$a*{55ybAjHYb`P@DSZ;zi;}cmy~kn;_9_!FaQg#Yo5&s|A?1L|;@3q; zSZ&t5J9k#svqf)HOd2>#RcSI^n};~Qm{qHob+0uUJrmzF`-alB$Mhz?nA=t{g=O!) z-v___a51;1)aHh|c>WV#t*We;CiCt*Q%V54&vIh%zlHOlT7y7*mCaW3W6qyX_J=;;=fc7tbdrBk^xJCyDEgf9hm%uO7w|eneu7tX zxE;YeTX}&`kXMpj?j_5ljbq9XF9e=(-E-oUG8q9}8(0A!RH_Yw?(#BCfE&^Tc=Kuk z0#|d)Q}u}wf~yPEbA9~|kWK1?Id3nR0MA0kmA7aA2vi25A*b>R?R$g*GxTterw|JQ z-V140mDItvW7#PhW2Tw*ME%4B04M2M_XJKPyq6CRBo0(OD{I{|2_vmAyujOwlz`M! zyd~o}+xj2#g8V>+7RRVX#PS87CkP!Lz;J1Ql{++6g%-vibz-3U=p#1nrq2sDP9MKk z*wFJD4n=e}760=kuRw_H>I3-swpYk&thadDf`HtNH7qDhIzy>F&p;v;B+MFnNBefUZDJhp%a{0`%`2SV$|F_p}=Rz6r(X`B|`>9N-B>sOh6$&rEnYsb= z;XIsY@jayFT_Ad1YnB%<|60SBtz9gEFD^H~7=20fbLuFB3q zfcA$~Z-rI`&e2wzcB+3lVNQe<`O^|BQmU21SP}8)GOS1mpt=7-up&^gIj|yy4-r-* z@jc1p{}nL9LPV>J4s?FC+Op_L8r-@&F8eOT@cp=x{4=o5g(NB0`Ny2^O2E(StaH@r zha%T|Dsnx{-;;u7KA9mkZxCK|gK)zegsAh)ZxC7#{*f6_db`8^#mR7xPUpRRChsi+ zN=^Jf{GDH#5wEuk07ihg#h~=eVF6GbVCphP!^Lm$>=Iw2*vE*miz(TA8B_FhpxxB6 zWBw_4F^@0tNt#mjO2XT@4r*sQk}oabtz5I@sTLR-Yq5auW|pgx&%x}8Cg z5)Ne;*$PfVTLFB%P_);7wvb!BU0l1pypmsAUcY_Yjb;f66T`_EY+|&75d+BmS^Msi z>Lxz&Ta$lIblG>3%7^6P%A-oH^|~`k*cv$FCE0bEpfP0ZQRWcnW-F6UGeCzng5YF{ zK-HC@WU*+r4k;UEmy1v!3*}9tn4T#N6y9sl;QE{`Ph=DXO~AlXcX{cMz==8BZoA|6 z`WG_Tji=D_%v=m-iDAIOYBdj*=7i6aVuF}sslhaP{``Waf-`#$DbTofH*UtLJVymS z7jM0l%+DLbR z#gD3lu-WdOM;!k1YGvGO{&$%5t=41*jOH0XU(RFK$D z{DFJszt`pfChc?o=$W`RA6{Un3wHU%@Xg&e_8)vN5;Q?{1>d!OSQrEj>-6B}G#p(> zM2oB*NiYC)7yT3JFSo~>2`aY^;f$FTy%R<@_9#ZS3P$O76xB^_zOc7j2HC|1UBJEXus=Kmet>&=sifW-pPj#T-ouDfDf`HiK8^Rp<}!0s zf!NA9P9l+A{0m~~esZ@i4sSUAfac^i=Px;U>r|J}7tbJCKrrfc4#;oOeoaQK$g@~G zmV1>qGW#%wO1p+ek&qvDC zL~!;$sas|5)`fS=_ilB(TW8*_L+{qt!=GIdn}0sS&Wy`f0__uH) zTp0_Azvm=>LiEeGm$nIVBrf2MwDUsUcFgA5qVa~Gu?hCkQu4B=*t0L z@Zl7moOe(dR;Nw>g6(Xkt=-U$HTQPKmkrr=t~r9Ltt?f8=SIr0Iy}%l3{I$CDgc}U zER;L5j(+4L3HOH=|1#L48jh)$-e@zRuv_y5(ayN&mvNzp zij7u6Z0(-y28{|L>SlD~!Qs<-2tB5*<;YQ&TBZ!#>Q&r78Iard45V$@<-yEE=LBAr ziL{;*r2wQg?md^Ld$<{i%j^X>XsHGv_zKWY&@vi1!-Fn39gYAtjPcazax143c;s=L zWo!$;#*HVwQlkuTs6)iOUznT|BBwX#egRO({(v-cTySpQ_(kkXNzE}Rip9a&*KVT5 zd>}V?>3FRIG)h8Q2>xdfCd+D>!(~iauh&P%I3lmrZ;1#fyRS0j?COSL@E-o>G*i_t8D*iHl4f>!g=HcC}}Q^zCF|L!UIGL*;6% zHZ3RsgK`-A0GQ15PIuROi%_3I_l0!mw&Me-WS59OSBX6_-!r#&-34l+zPdW09=uXK zyHYf}J1s0)^CS2xCC1?n+43|Ox?mHzMZ7D%QKti)mJ zs-jm!@}^V_1(oiqFf2xtH8T$tvrt`8*sP3EQxGinKg+Y1wlj}P^6EYpci-RPB>(TA z)CJ?Ib_sRCHZ=(zS3%d{)?p|pDWUz5*t5mX&^sdK z0zc%PM1|pzju0ahbup1SCvYRl(N|^I05wb4#sT2<4skY0 zW}wJ-bFTUdPqVu)?SP61)5$|9i=xFq2ze;L$*+p-61oL$ExuycVOc?fcOU`oxCZ#g zXpRgS?<(UGaVOl^RNs5eo~bZN@9-ooE^n-^i+@ulBBj9a(2y1xH2SE2^z!)){5QM? zj1tPFr=m#XQ>kgCg$sdKtNcoI`_;8t3AZIq3k}mA66eE-r>fQ?9}a8P^H|5r`osKk z;aXo7-5B|7L4J0I1{bc=;8bBlbp1}Xwg;O*Y}*S~+Y8g$4m*i4p1PxEse~u00TmH_ zFr^l9?DJsFSiN&;SDyabh-N9Nkn92O|q&+;wsiyA$l*RmgeAd zy<94OwMyJXI0UGL8Z9cEE*J&;|AHo*o%+v>)M92F`V51;kW4$t{}Fv;tM69cbiSUj zSng%q1aH66+$`-@yi_+h^3S^%h%R*?W-l=sXh$BxDYL?o`3`cPcIHU88he!`vYn#jko*;G?S6lZR6UE8szUXyOix^i4s(W}v0`y^Cdazy;KJ`XuJ*;@| zyyF!^vw3}H9iPKKz{Xa};e0KJfPUYn3Oh14L>cfE6GZl8v3f z=g<9-VhNUi6EShvt>m~n22x+rx`71&JRGDT5{Vt*2f^^DhX6@MJf}A&s)m=Q3!_9- zip_kmM7n9e^BjWn2GVpPQoAT|Aom^EVBqU$?UE57v3ece*GP-bW?$-R5&WNfz8Oi*1s~TTL4|zu#lS!h zI{VTqvG~zI2GVA7U$pdvFO5{vK&B{CHQk&q#{fS~$*?CgXpd#%p0pUr_87)9F_I9r z-tsn5ZNdrF8@qt7?Lzc8;4K!JJ7h|o0ND#io|IL?(%1}XbnSWHKk70^u}sNUP0)}G zUxWh%5lta7RDx`vj&Z$uXq07cZ9JTdGZmJ`+?=T@le3Wc{^a6M!Wjv2j)wxy&vpK> zL*N>Wqb=%(?~oB0-g^+6dcri%6e%Ka2YSQx=gRyHF=mUEQ z&}!>pwe~URGYRb}dgK1Wy}+=p->k#1@_GH1xD5Z>KVvS#RvD|ARs8?BGNc=^^6H)2 ziTE-X;!vq`IS|k8J{;>joS(DYo8>ifelofEKcoGx(ri}iwKl-qzSH?(gKa=Rhk#Y~ zZ&q*^8LwXW^rN+gbb@q*H4E`9HdeI6v}H zO(v-xr^QW8`xKbL?0N&hd`g!a3(CEutUu@mO+W>Cn|8&27zSgx9`G;Gm&Vsk(hqom z21YW|^99B(LlHY5>Vb?)0M(FIMvkI^WkH|`U7orSg$f!Dz?Yg0P`VuDDus41m%L3Q zCMsYHHmyt0bPWc|*iCg!416m%YE=aTA*WNYpjIP@6F zOHW+cM1#Cssz;Q^6Vsw|=du_so+3#a)P$}jw{qTgG;41lbK=#6s>7e?Ur^u^GMZ-o|MQ;_g<6nSqB@5f}pu9^9bDQ7*2P23ENHJ1`%ThywPTIW4AY?4Y zyWoDsFrGqeaX~Yt`IXToZ;d{c*&TFLX}}10G8j^j@Jm|c=hruu^BaZRqCNht(|Cs) zm1fqGrW6$8b!v|km*7t?!l;Y8H_%tk=%Oc2OzF-b`X!I__`QK-Wug{b@+KXiWSx?=h zY5Ha`56(Yd{9hoB=~IYf`c%d-eac>hPhUBX>C+E)9MgpbasT{(i4ORV&4-oEcbj`V z1ZDqO&OcP_m-d@Wf?w@_b+5YlE<_P~(h^tjO8LMIXC8IWhqy0^4W)bZESQ`rJ(u#Z zMjS9|(iN|?E4{2ujN{M~2VL*@!T{nbCv6kw$)Irn2O%_Dlz!+RJ)4|E(D8mB{>Jk; zq$5#AI#7)bn9}8ZGIk|13zkBD&Ja+Qxgw+5J=>Xu7EP4vg&G_ud!lDD#F-zBIo!$f zUiSrw8K7|*O$MIb%`S#r4InlKBqc50rtEN~4EFmk0N74O6B4^vmLMcO*)JJ^OU~S& z6(oQus?Z{%8L3+iM*l>DDLqqc``=}yw>)FSNiE2)LbUVD@qf6x|vw~TYw=n zJG7Q`{<>o}rG~wk@oLne_A7(g*nIX%T^TCv!{3j|A99laD**iVTAN5_<2gT}tWfe< z#*=@g_m6|~gD|%k`#Ok3B>kWcnYWaImwNbcV`pch*-XKX`tae-PO~XRY`4=r=kQ*j zyfu_;O3IcootW_#w+VpGP0mD5AGz#c0iGFnOiv>uTBg=ES3V z$U3G*b;%gvCGSfiLYGwG&PM+B#;Uk+c!fLp+pEh2+R5J#W+&N9B>y(Z8`WmJy8CFQ z4FpxC)^|AFgmx7+-$-aMo{MUtu-;(cRd=7S0b~G=+HD;QYgR>T={nnpqfY zK%sOFFT854(pqbmT6I{>W(Xh2{A1zTan|=bP=ggRf{)QN!mLroA{lbSNjX(F&^#_! z*Nu(d`SX=Fzn+)CuNNG3`+a}V9ZrJCwD^^wX%XsdqYF|S8-;u>pIgnXrQnkhcehcz}(;+H3re-CWFyCBV$$<^YYDC>lNn%>QTG+XKj*`g+7)4})@z46XL z?(BHGUYgC0tigNwbY}X7 zLT8fE0pJ6WFJwX#v-tGJc%~DHd&$2KFrP+s>tX9n=Ra2?fe+Bk(eDmIYXX5-XG3wx zhB!Tjderb08PV=f?(V#!xFO;1I#Y8ByVvbdKT`Em$HU>FKN9~6k!~fVnZw7g$lR4! zm@NLkVOz&jmcljfmNqMC=lc}#Ug#CaEkE~h^|6-AWPml z3?$Ar6BPYHMTEp~cVXS380cb5*Njw2NxTrs9%hRSTEOGpD4<3YJ?ik-g|keT&IcS( znivfPjU0A+xzs8lJ)mx~8&0i)Gx8vC9Iv!=mtWHUS3I|eBOlnBaiB9*KsUr#ic`A0|H^RZTfW7JbU-ngUJ%J(t2rTFjW_Fhxe71TzdIYh$S@uW}X;sH_a z1GP;IV?A^KKsZjQX*M5Ft z@gIP#7S(W4aa(xJQrupxwKd3uT;>7t?s@OynuI{>d%IhWQkjTMP{WIVJt#GqY^74J z?(N{8QtwNgCl5=tE%EmUu2m6Io2hW`5;V;KH$ce0^8g*>NfkpXJ$_40_|LlNSvT$} zh5^kc6rj|V^Q>>l*g*JEQk%N)9U1N22)jy^P&|yH`-ONhIMVn+$ZgOHxR_Lk9)Q+G zB)X^-@iEZXe5oY0$vT-J!&LtwL5Nvzu}eIo4j~n1hC3tUl^UB5tB)$AuH9@t;(8LYOUo%v`E z00gbv2C4%?5mhMQZj|v(#=TA(!MqZK%dDuSy;gmv)T(aEQ=k_F6Y@wk&$*nJzCStf z-YBf)*NSWTI~k9E-Y%@($*=Rzwe|eU>YP43;SmMF;hI^+o$l+&dwAD-Y*nPO@-BxOGz1_v@s>rS;LPSE3HvA8n_aQked!^8o&bO7cYkrL0* zC@HBSflf-C8Yg7v6zicc!*>ULaY87&UT283KT>b4>muosK`_*%^#U250>aJNLbH47 z!yV4+9v=g4oms-pe3FRf$DiR>#Yc(BT@K%T__Me izcEdC=<5ATFXfWMg7na%>7 zFE>ei3F0e+Rm|7mpBN@c+wGVx%=uN_Z;*|{bzvBFu~Z5s+GsD zJHI~`9}e&E?ia6(3e+iYrZ-SZ2suSvRA9Qw!Nj;e@Y|T1vu|c``4^Ih$>jeAm;lM~ z@EPZkw#4!?AxYN?nOZSZTjr>#axUgcoPOJ@fg_OmQ6z%Cp+|1f*@7)~d!>HgwIijD zSzYG`(sMOH6D$%bNXka&%UXdxApU3Bd)tMpqWE*bW(LbfJj9DMkrW?|CCxAtDdR%; zeDQFDu0J|DRrbKNSi2YAv5=2$Ff8kjhE1=scZjk3wbI4{*$NwxgyZ3{&rD(X!(+l=5L4t+jElt9Q?9iMYqePr%liKH`Ibt5An{p zMKLfS5|rHCYMBt)|65>&SPzYluGH=2{My=jltCt+&EL-EZ;XHIwZ!887p``ssZb{2 zwDY@^9zFC5nO0e^r_OBDj!7bD>mhS0%NSmCTBT51w_U1j?UlAFaFF7I_dOYM6VKL{ zUaii5h<&b14?(jG8o+wF`k-1do_#4s54zd_wsP~ z0vIoqOD`(-b!Egf7k!TA9+B)Q9V-fEqzOgIx7ctdFOWP(jq}Mt!dZn*Jyf)#%Op7jCC}?2EHFL%Xj| zjf?<3LT&uXc*r3b`xla^K$YTR6NXY%bJ!IX=~1X27!+zgS`WnaRS0ej4Ruwi?cls^ zu=s`o?4X0ytg1X3pRAA$#=u>e)x};%r%$Z!y1VAo>BnVXNOYX!{|@^k#5P8$=)0Uh zXK2;n*bh_FfzN&5@TtFhRvzQRw_6Z1hj_%bQc>Nmg)h7kC6p#li8}P(boiptE zx57#KXD;yiLgL>~B$J{;Un_0an+t}f1%5{&`wAgdh_gYD!kInENWDPDV4Qw&It;op zmFVCnIaP$5YfmJk!-`fTq;wz@xXF0Izc94Su~CJvfEkwtsZFo+=fbohffd3J=WnmC zEf?2rudl4%NGM@v;XBjL;sQ+kYO}tL+MbU)Kk;epK;828x3=r|OCTVz`}Bd=YLsft z5+d-hhGWsu0ilN5A#n}NvQyu(ZFYJB66{pfyzR=P%C^@RB1|78F%a3j$3hOP=%4l4 z_EXozG#vi6QP~yZ16tr91w7=mATm~4t%~_XW&F-+WSJC#>%3g3-Z{Qga|RVXFjQ|g035u8qo#^P!6LK;=;nzM=mqs{^yeNXqq+C~mh^3XZXH=St>Zyn*>W7f*s}z}$H%k>M$sGKEKZ$rQaEW;f zNIkHZ;8zym5LkCKPD(!c4C*0`ImzVoh-e3SSdzbcJd@!lqN(gkdRlWIM;yqJsEX7? zncO=~`J!d?^rk%;B%DgZoJ;0~chVmo!Wog#-eQC-aXBO|$}I97T3wCe5TpB8QYCTY zxJ4Pe=AM6k-iKK#zes#NeON}p#R z45k+PYx`#1-lU93>EZBX@Y7 zBz%31Z1O-Zz)T4+rNJ4LNv_;%*7!tLWxU6y!?{#0VmGLuzIg74ox6|183gLlTPgze za{oW}{sp?RG|vyiKyV&CcV|Yk+>vLsv(et|RS$p}fDM3eR#&@GBv^%Q666A4SJ#$m zv6leIx>F#)!3C;{)75LeB8~OdN{%eqmSowIY)f)%J!8d6oG7s)pA+fGR%BU8q-f8H z?Bv)da_l%qQf%e>zrM%40E=L=cSk<%-RUOo{qFaE{J;O>_wzrX<4VmE%1Wy&ITci( z8$^HvHwtLe2SoJRHfdu@h;3N5D3QMR9<9@5J9%C`wtwHjMa~P_ zesMPwYhi|x%8GZ>+JmPOdQAeUL2t|9R8hy0YmzGf1)s6UjW;ww?s_m129F&~;+JiB z+{VY$HJ;JW+`IHGB@)aGn6HO>dwv%8PPW<^K_-W2Is&^&UQ+u*vAP;;n&G%pesb!`8@nWC9!r-rf+%$m7mw^YxS62(F(QvK(#y>khzw>a`Gj_ zVCcH|(dSMbcju>D0-^%CQZS0yc^V2t`WYdI5iEavZ&O@?=sselu!=|PltQ~dWJq=I7v3B%<1B)R`N$xw` zwdaAX+}+)MV*{Ad^t=zmspx79$>Di0&}ayersJB?a%-?7a!XE3Dcs`JnWU~*&%-W) z>{_$Ml8)n|o70tZX~BA9d*#oo!=Co};=*1!{h5VSYOz_XFQ$IGF{{_=35}Me%OZ!* z4^7ZEtm~i~s@!i=Cl!a$hFTrfvhfht<#Ks-y|})zwz8@I>J>`sG2K%G;9Il$>$pus|d=YK`pA2@?$aKxd498zL)yZa=V#^z0(7fFB`Ko>?@8uuAhi zMl(q?{*#0&irQH$?}>T8H?IPFMoy`Pg`3VvVGbA-iAui^naDuw{m1g?frW?z@6&pFbCd@Hc1gDj})n||< zk3E!&L$|Fgmx{~q*_F6&D$PoXk|pznK9A=s60`-Lknpe*%=#rSD2xa5YNJL0}#(8{#OYQo=XJtoX-O2^9KHJBfp0K zTbl;{e4iWJy1eLRvDjSRVe-)$cLh-VF=bu?zJ#*KDd(+L_ zM<<2s>hjjw=8E-?pLjBxyJ*gu+$Q)G;-YzKalX;2)gRs4KfL#~)IUne-=Nfo|B53z z%SY$IO9WGAhjJwal-Jh$Ymt(N8RfEn`Px3NLgPpPXZtj-~kX$lT zV)1GClI`bWZ1ZBCG?2Xx|Ga^};iu|SuH>+-^bdgR0Ks|xDJ^gajQ2F$F4E8dfQ(Pk z*6L(>3MdBj%L>%vi~3}Ix@na2prW`%-0!#>IMv)eDY`&e6uj3Ts_hwSnz;?M@WnT_ z(@S4eo%h8?^{7&7NbvOk^Ya?}fu29EAGYx_4`wUtEOfPy2*yxwQDoB50T}Jrsc?uGly*A+j?Dvq zz6d9cno-Xvh&v8$iH_EN^_Dyb&w68m)r8xsDsAKu&;i^~11BV0!sK-P_(`ubMD7vk zt>Njo2XK-|IpUp$EQ5`DK{On&1r9aky?%HO0$h)+$8=_c`rB^OT#kmFQ4m2q1x~iP zqK(flRj)CqWI^K8Mg8hb6^^9WBSy+<<6i}V)fZ=@K-BBxMGyVvMMKoCu}+Zk;IuHk z`u*VxhtOp-fgV=7gB9kDuJ;x`fQ@u-C3}+Bk=gb|F9EPI^bbHyDcGzQ3arFQb8Tri zr#G}(j0Xnn9Fsv8rX0?NaMYQci(+BykjI=u2o+P?;2i4@0cy?nk3`jo?;`CW0X7Ly z3BrV7ttXhS#2m!%1z_q{U2$FKL~JjLwIel!VL`}n4+Tk{4K+BcRF%2}pc**y(}qwb zR$<=6920!unPKks#c6GtsV;q_rMAkTLTu}G`z-D27p4K97j z!gY}W%=sFfsxO8R#0vB??Ej3T!dTja-V48j7h<(`doNW!*x6zbpJEabWL`*@ms{6B zJB8Ra!QzB}x`SI9^gVgfI2oC+kzj!Hi?=J75Lz!Csf&ZUyE5Gn&cR4+MLg}a>FGRp zhJB;*;dzc>yfoGW6D`bIc>&3=<8^tXi>#eauoToT93L<2ZbF=-3kt&fTUG^F6r)fb z9-!F6($pjepAXP{D`74;6S_EzPL8Cip9JziWzV1o{x25j0qqnH>cQr9#fZeWsnp_U z|7I%vB_%(6_MqChUtLP|7U2$vKVl}BJn8xgB08Y?aL~Bl=EF=9AMw;P8KIq()4hv9bZ2y2w)-Zxxy&~(!wS5L z3ba6Y&HAF2ura&*ammkGwABHGw;{zIDpO$hY1iuN3k-WYYSa$EI;d)Cb6uYUJDr-? z5L}!s7uD^aps?=J1ks8Lx8U+GUcoG{Bef(nn7_;UA5`{_t4%+f0ktv&bmj8d430DX zRkGA9PA26!GAUb`xLq(DtBvH^y>L~_f!Tbw`e8Q6<*ZcF8@RO|*K3FMyV-FmKQ8CE zHSL3H>%rmf-Tg|lb?5pQ>zT7`ap6B(NPn3Xi4c-psqa*OEcN>!%wd-;HOW8+6dA;h zBWwGN==sjdpKffz-%Z)dI;3(Ve%(^OG>xN;UX~G7F|O1#O$4Ge_}~ggZYJ7JesTqK zHM6FbmRC!w<@O!kF{ID z6Q1~wYkN4!s~@T<(tM(?{Wx{Au4tR>T4g2*?Yx@yVQ4jmww$`D%^0SGDIS3X_G>ifl z)LBL!(xGO($7qMgJBRgVt5Jbn>2Y*%T8pL?V_^E?gH9R<0W(fa44OC~V`3M9nvajGSNI>*#NFy%<#@j( z4rpY5)qU-rYM{^KVS)ZpKOgh_dg9w76c4?&UhE$q)Wxv*(O&Jt>h7!ENA=1*-{HkorWK&)9L+J2i1ea#-n7aX?>%172Rm+gL}2s<18t~af^86gC<>#jCl%; zYpRh!z2#3=8;5(f{e4Q?JgDsNUpFx!MP4`c9Ojt0z}}RzFq}RBdP8&%lDqv*JLt?KHa3 zv*e(vM5BWv`=J=z?Prgwm4*O`tolt<((Kdn*}L)uheh zzFW%Uf6DZq73Yk(arP?tr_6yj8k{g5Qkz_lpkgLd{0U*)fU~NuQh;j_^+qC{ zy-Grbc+(CQDzj1Dt2V0Ys?;>ru&YD^b693IWfVc?zlQxoTu0U~7Z79~IS;(#P>!ctYd% z&ZKtc1H5+NW0XKwuTn4JyUuVhPfw@~`vBvK;U7?4#U zRC1`U(tz1C99?Gk(A%#(0>u&;V-qcyfgMlsfu$s%4`EEz*;{KgTL^ul{zKVZxo$+! z6@Of-PkU@MVWzIw5R%e3O|$v%u(6x$PZ)3(2Jv(LOpAmhAOhcxn!Zi-XQR4%T;HwK zTli2-1cu;gRa(t9&M(#9mHizzyW*>oo$jdGXsSD!jPR^v%?d2b_K^}nLgo=(tXiOVXjA%hfsPp%JeyL=1~xs}Ef+$;GyAa7rpw|EPz?B73B zv+KdZ-H%GI${(vr@Vx=F*!E`)KsNt~a>L0F!h6$6{jrsNU-jv0Qu~ztv2H~Z{80G5 z-8{bcskhFT3Ol7)wcxsBP4}Av0K6WiJtyGdC-#`dPYu&BlSV5Cutd^K>fhLKHOHEM z>p`XNQ@^Ul;vD3*;9AA+K6bu)<@~DE{jBwszBs8eWv)J%v9VZ5r)`P8^&auCV!It) z!PE|yvC`qb7*9yYXDp?&51j| zzj1hcgy{yuZm*4Ci|w#$rOHN=lUWmG#w$HnX1u5A;w**!@C>Y2vH9{pj@^yM&WmgG zxWh>=489(|pKT6_zCMIl+CD-_kNn9X91e^PH|IHQD;oS#jM*;)41t1tppIl;bWqA9 zkJ&`IPFN|~(7@s-@nGz>C*h(nY$xbuprfdSKh`zZ0ww@Ca`?keXEKTeoQZ0WG!K!m zO(J@~HyBPS2HcBIwIcyM^Si?yIR^_@#EigB2=ab<8KH$X374;VCFUVed{Wf6S^AMsy^}`95!3V zQ?<|!)xU$j=%p(6D$VMQ*Wh+KMQ~!1ebw8m?p7PB>vt17Tg$){%djL$BDX7b#CW_osF+A7x!Dy7CXU|O z;&cNJ=!%D+D`q3-Fj;Fth)d}SIDM(pM4d$D`YujNlpfqK;J=>f4BGZN+}{GAaiNLu zD|U=SS_M0z7@``9NM5_zS)GmHj>0ox+U(gac#59WNr(0IRht?vJ3uE6W(>lh%Jo$X zY@Gt+!ah=F`QwpVb8wdB*h?cqM>#bF>O6=-h#cgDGq}_&5o3m!CRgt7Oonh4au5@B zyuHY*p2rcTf;cRhKPGs2^?kqR!6SB`3`WnQW&aR8O)VxbCwFm|>V<$f+J#Uh2~N6Q9XN>WjO9=G-in|TR2oiR$zAPlcz8I+b0kWbEYUZvWpA|c}E|`;mB`%&`uianNF+2dD zYSKC#6hslBa2?_N1fbAi=h@tG z7A#@$K1otXKNTAeZ|b>=*?Ri0#p5v3=$)&{mC4h&nkj8#8{Fv79^cPWb+IF7~|X9j*PTI(!g;QyiGwF2L7`iCIy z>Y(yIn&$k}|H}y2{4A?Zfl*#vGAH9+o+N4~78d1bi9hala9MPX$cam9xEq*Qakc+sfVQ`Aa8TIY%^0%Z-Cd4Y&MVRA zqDRi55RlBlAdqP+e3{*HBTe)rCn|s%^j_ZX7@WijKcwA>u;9%?alKGVgd6J*{BQZi zBpdL0>DKsw7r*jsVdZpu!59rzI|C#eg189U8!z8F{~Sf99Y zL&r11ee!OXuuKaPHlr?0eU@nY!?VZ(iHC9gl#~Rpm0`C>>qFgazz)TMKI{bjb8piG zYxCPY`M-OX*L||Nk*P(1Shd0663}e{5FeQl)l=sJGNb?2gB z_o3hx*fc=A4?tNvcs_haxvOKOQLVSy6ltuFL<8XHCb;8*3OaQQXi#-UvMHG8SV*W-7v{bH=fKht6mdXAdH-T&(T(pj|G72xms94g3=7eELhvT%u-Z`c5O4(Iu64{1p1NLU#>4V$xv%Ui3>}5jkA8C&`}XHg zDLB=cw8Ua#k|^*Rt)jS{UHGrxcd$pDU?&2xWJH z#YbITG=IGX6AIdbez$Fo@A#5nOb8#sbe%ae>V2E`K`zp2FXvC4f~C5>7?6qRq-QV~ zguzTCe9&UDB%!uj2%@17cVD(qx7IF?lG_6@%-`@-WnxcCy}n4=86aMn&fCA}Pt+Nl zPj;2chOu&3w^ih2xC>GR=|fC%g%tr&edianuo zIzOEG2#G4V=w>%_E=bN9PTPWe2hlsjHMciwB$nev&E8zpt);NKT$1Glv+A{5-|US~ zeLiFBBTI|Bh%t8f0)n+i5X6ts*eEV&ag(nkg6K?(*&d7OYe4rpAlvpqG`O7I4C#IS z7|DICE2UO7XpMc1BgOTlPZs3tvKShVH%6R@jMVnpb+R=K zzg`nX*7ne4qLhb!m+{{#Ih3#QG4v6jIZ}jF$$#fvHa6*>Fvt**yJrR-UzV3WH2S>= zBY|i(FIQqVDVkS^f1tJyRaJcvmBEdj&pj$o3#sNthVq@YG9GK;{xBpsT!1sjRtHTGotXkUsecbIkIEU&(D0)lcRs zGDtIzWjH|P90&*MGytIvWQZJDezo2`h!~=WWc*s9v08rc1;f^AYH0R_WtN@ja~b^= zJdY8?o03KG@4*UP&^Bli8d+Z`8xEVQjiLH=H9hSQ(QH?^FpPSMdaH7#rF&iG1H)_> z%TT|W8#ooUWd&867m4lQ55;+Y_p+sT%lUGCuV^RuZ)Hr!rN>2X`GG_ z>RFBhzn6*|rPa-i(#FQtYAH@Q2wxOppA_QX+)n>4eDxoszm8@oprb#+sLbluQ-Avh z9GZH5?mwnD=DbfK-{7#zF8gr#`>Eq<9uoF68THPG&+*uY z18_11YG+D2>Z!XaXo9r@&#-s+%?`{Na045wThg7m%rz#PLWJ2A(Cxdx9qAc+%8_&} z9_Dlo^o^EG_q;`~Ls~JB?9e67bKRCyXB7Rcnr*pd-zk7K%aFV9?U)kALl0?W59_Y- z!=ymPhv!Zgo+CmfDWiEl#0zH!N7M{l#B4usa}-xYbXf?$t0w|xGp#o~T@$efw(+|w zyT*@qjaOQuGQ~knyLy4sjbjv`H>$ct%!>vD94OR2;)z$+sYR%*D~Pb3{rHrn*T`uD znyc5WM4%!AQv^+91lAm|{D(a?bk_vmzqkzS#bxgx=rd>FjH<*mlU4;F1eU<~RPnvD zpl{zQP`w7Hr`jPCZv0SZf& zlE%(}eJ5>(7GY(C60F_XG1;m27ZZf&M0#T}sloL1X!;tkMynI?MsMdCY6Q!!(~DJ4 z*WRwQvpf0&nvl;mah;9CCd&m$1KYJ-Nyhoo>To6wUz6g;51V;drA=WWDsKeYwEIHs z1Lh+Lg2Bd8ZpKFBoMn<}(CrEm`&l^ftV}r_vK`|6i#%muD)ev>VL@)V$@EFkRNXcq zqx$ZIohR87kVs@Xfu;2XBuO%xL6=|IfjiY^69NhIULdf%q_`o-OfUq255##mfZzuU zXD*~m&PW|fdW2!v#xI8U+QWe#GAWa(Wp<9!W&9KwoNS*3I7~ovJrrtLlu|hF1pN`l z{nE*<{jJ4%s5Ul20|a11QvzOrm5gF-_x-+|0N#u2ViK`d6dHZfA9kLpFD@qJd@1un zLzW_jUQFPbn$vSN*lOPyT{5Vi{tcEH(mMIki*T$CUdr_7*yKZ+UhthGBNMzNfd!nD zFufA2rk2Y%YJ7;1-nr8YL9_r^T@=Gai)NgHL)chh>?xTgqD?O(`1X)0NK@nJ>lX0mn;AwnojvB3TECzQ)5dB02VrkFQ22M?y^l%8tu3q(}sVIjI#!K5zF} zClD=7m7*8H1-B?B-iY*Z(bH^!Y!VOj8QvRo!IMDs#&n?*sFH@!+?r%{+_3N^Ayt3* z4fo3N-g~;hI1n2^sadZR0BQ`i#{U$jyf4A_M$S-UqhezzE zUE5;>Fn@eiE_uJ?zX(Q1sWc@+$Mw5a^0OfznYVJUt5+%3F8f$=x^?=W(?IO>x%bNK z_x#kK^3SWAm0||ZFJe&F<|YGC7->k2iz!8aQj$+fE9+3l=|kasQl?KzrLENsxY5Ny zHo3EJ)|M4HWM@t`Yfxrl4%(#w`XHTFv97iT)m^wzJm3INRjlZq)}nb!B}8)8Lg0HWatcn9s__8m0jzYI0BSoky`W#my~D!ya&c z)K_cxJ3Q|sO^MPVel{dhGHtvpRq1Q?&&E7MXNjMs8N>McL45rX#`2ibsWSbG8?(Ap zcf{tb4%OYcHmf^z9_!bt>FQiv2~vRR&hoWZ#neBqxmuvWHi{zjCkrFjnk841``XpT zf3CpZ=1Yf`uea*>&$9h(dGmU!k&>578~WSQ+D7Smt5jyjO0wM7u3q`JXnk8+z22&p z?%A@xEnaW6%bzRpe*PrmJ9BrqzEM0b1}!f9x^((SflF_{zL@$?wPtxgsaGDTDGeck zs^5Z(C`0ap0ej@GmbDJvZhcT7(enKH#TwdQ= zDXnglHj8U(TU%>h;)A$88tQvnI{w99zp(T_QRDD~AaOVtQ(sTz7VUtDk6Z*Q!uwNy z5d_Oe85@o&Vuo-WGI76$& zDq_ADbMcF|P3UGDYR_dr(e4YfDsmWTPjrb~2gm6mKjmvXtdg`UT4CxYw4H>n5C1@2 zUofSJme(GXSlllnd(hu8^S09(>0fb21&Wa&yWtqWOG1d^At$Ahb`imFrAXp0Oq}Uy zc*f_FDu2?6%6af$DXmlgsXtfB!bxBeAq3)(9_#Z&e1NekG8uHma@TM*W9Ve{;bwRlyT9dJ6+JJ}@haTwKu@LK;JZ zAwXkgeB=gQ&vsg)S%|n9S~bQ=!Jme;hWodeB2BnqOf zc+m4W(9-tqWnx{zVi_}~agy?i^&JxD#)YagrqkL;s} z5A3*NJDLPl$KlvCL*;lj3eL6Wo3vDOP8;fSo-5_+^OESV7C-xY7nXiZ&5vIOGr0Lv z`|bV1`@mQBMym2zdzS{sKXnSWPgI}W^*=&nH;T=)UT6nrwsb@~j8KFVo(#Zy3jAF| zP@{O=p@2*zg4NaCQ7tw8I){-Q?2{}xidr&eZOhxf%f_CfU9^EhjBCpV8{WuKh;<-^ z60r%|`_{>%$&WnU3utGdfD5Ssw4c3nz#okaEp~rko7A4u?|IDm6C>SWG9OZ5fnh?n zqJRuhqaL^`At@PKrGS11%r`NcV!2Er4kKVp9Y+*if-ZST!5TOF=J~LT%2(<=$po=8 z!pN~@&S$wi8ihmLG^CDp#Uym0Hzqh9E_OIdn9Pjb%l@9ygA$V%?>unhM_tbg(%J!r ziDX6F0)kFpz!E4X9kQvipQ0O3sH9G6kgLTP5(unxE^sG{S zQGMAPb;1bt(Xkp(Bs{}S7LRT3brom3V{oEof**zBiC8?qD;&AgyvabF95gN>9+54I z>P%HZn?w-y)f@shKD~3>04*?4-g{3}v+`tJ>@i;}tar6e_0F-3I21zxYpq8=nEE3IT)=vsRdXp0G9UoI>Mz&| zPQrdTzH|ei*r8L#?H0YJ|5h9kz^-g2IO$|G8Zp#zP-;gndg`Ek+U|t08*&^fz|M){ zIIs4+Ocw2?U%e`Q34&vs3o=*4I*hBZbrj2Q%UNy$Tbx7SQ=b zJX_g~X!7K@zZ9G_em57jLz^wYs&wQQlgca~=rL z*)%5PYxmXcOh8ZZU!>AM0T>(i2`BqYso$}1e;*N^vi-rytCI4F-rF zW3q!9cqov*_QOH1sgW{}#oc;DOQui8_OTPmz%cLze4GZv2!WF%6ew}WJ8Io6*%d6$})#Cc*Mya$_-kfRpu)aT- z$A9|uvuQE?SJLTUCAday)xY0JjTdZOBY2iQQOhH*aw@^U%0xe4?F1lJ(#+55SSh&j z1|dn?lM|zYya-0Po=-0QyoDB*gAbw*IrH2zlcf@U`*e95Rn0)ghYC_47Sz&8gZD)B z7L?FXcllXjfTf`iniJIYvNsJXIaEtAc^(~rGQ zU!d|Vu+pg7VR{z?x%xdc~2y-x{37FoR(HbQR zhna%GPyG@Md|gn>c%rNSkaHku7bG+j@E0lL*vzh5>p=^Y@#+~xW6wUj0;~cc{b)IqRsM`5#%Ykm78V~km#OZ_<0)zPmmARqmy~lQBWa#@ zSXpEk>W#zBvd%WN zJ%o6I=(WfRZ?vC4n?3jq%i_-^TV3l{5NS+cn^mri;t7GqyZ* zp{056sSqBca+4$BA{{p?F>r9zhRA$qjnsi+Dap5#4iE@f>|ne(*m?8ZjnXkUkr)AW zzHpKh5r?sv7L6ysRn6#`P%gx`wUJppht$LN1DSjfi6)=QGs3;U_sGfej`!}h#gge& zUi`uzTv*D$y@M$-e>C;z3&t>mkNn5`hY#CFjT+EzJQ6Y+b$O#;9N^-OQ+OJVgRD!7 z;WBLy3zbFgnKhJBc}*{6r}&6@eqRyc@5c@U27F}yX1=0d^k#sxOu%)pD6uZT1hsg5 zXBut<&tn8U>|UD{#W8lUyKFu6Vtqo%%tOe~{E7`8oF$QF zSx3KfB1Xzf%m?{PoWezM*zby8D0+&c4M74;aQ~nd1QuL48%S(gReV6an8Z=0fnq3k zFfa6bC=!r%8r?ZKI}}Z#9;xkh*tbWOeqyx@WdPC^sv8Xi9BU&w7{Wm7hk8zgo8Tju zaz@LaM|BVeb$m{G&|pAFRa5eoJfQ$}y@9Ut+^o@jegQy}kxDR!6Fq%j7!C^E3G3>` zSg*s*r0M7C6hrrjh(SL>O%K5_MzP^wl2ROucpU$U5~;vn8(=il@NztqOcM2$0rL!4 z1ZLx5P=!9JG@g<+8JZcQ8x%?3sz!Zau*1RU!-7u6LwaCb#`%nk<6Y_Auwr1q%!7Vr zD36*PjblbQa*dQx-upHf3j+XGf$I`giJDI^>#QC|MGoX5sOM5YaYKQoqK5)?*SUz} z+zlx2g28XXz$#_|3%Vr0t69rm|M@Mr{?P?4hK|oNFs5QhiV?(xcu(=Rh+vj#`7$?( zDuOpBy~pJssEd?Graochxw8Q&5KYArnLrJ}5I|Bj4@}-5yW?dTp#`8MCZorI8RGRb zSa6761Brz0MUOJ!xEnkNvxPG!jW%IXCPur@BWyuuLtEOlrvzW2|5xQv2uOS2=iHL zapBGMQWkvJ1lv(_*ZQgdt&PO&zRdfHN7=`x(FMYaCvt+$N~U+Q3~)=S-yoX*YHa1( z!aZIbq|-UoPhV-a+RaA?yR|)L^!$<3UtfS{m*=}Wuq=C~_M)@0qkRz7vd=(k8p;<# zDG{&(cHrpp9FhT4&27nS*Q}I{7gnFslR>KSJh); zDpg0T9DITCaEvTQZ8#hurj+B{1WQL^%x1M-ZG!5R^<4crhGHcFBGlKc^5g}9@xbzr z>jQ30G0&!l0)?^-M~R8E?r7vy$J`|(j%+DkQZ;{1b)`Hh=fTO;y`8C+RU%X)C%Wf7 zXytp*%-5-=T_y9ivV5(&+0FAn9Z@xeC=peA&QJa`Po8_%)@xin0&2~D_D56cZ-UbA zeyg_IZXVxLL-G04|6A`$)?*;m16M}%KQ(#oQ<&_FA$hT?<-^_?wj)GsH}dH#hUFjU zjY4Cj?iATl4uwWF+o2@VBJ&4u{|Drzkk1HN=cnqaT1Um4HxvPK-uwSJ>?S7Tf3g@e zcUUdYtW-;-y~^rFVWYHDDU?dpQemsQvQpUDELJL8tL3e=_40OkC6o79`2_!5^Q%%} zZ6lNW)%U$`&i+SKkOJz2bQ zPZnqP04mu`=HW5;^D8P{#(5{%Cl+gfDy{AO`hO3Z41vrLV~dIzM6U)8t2jd; zu`FhmS-~Q4+Md+NH-=4%^TdDfVEf=;yV-oaESxbrJzIAnXq>4h1@;w@Xt18nLLD-S)pOk@DWN#1UgRNhIzj>It9QejMc7CaGQ0LYpHvY zn&#DX|7LfxX}(PhslU5a0270fV5|45jjyGCTZ;d@(j5$~if9r|Aj+xFzrQ@V7MBhe zmXSrzxk#hiHX%8Q$J1-s;PZ;e-3Y&_TV{@=*inu`5Iq9xyV-loE2aiZ0s@>7D z|N87Tlry0!Ng2qrs3QkZtA^MuHpwQdEKw83ZC;jMLCrn5mqV)&(_PlHP60jU@pp`; zq_&j-vo|1qcb?T&F(er{9F5v=JJyRh66cqsq~;&plRHxrbx)Q#<(-&!G0X$s7)v!w zy+#TW&?9STJmc?*-oC?gtS@dTFM8?*q>;3=5>of>DRWhNl$8cDQj-wS(v39WwRw_uy1KkIVx+a@457514KE8_veInpz{$zCz4( z9Tter0$eY$D{DEEg|GkZ{-qo8%HIJ{n$hLXP|a7#!mh=^@&4 z7Dq&Q3F~8OU(koe*;(Aeh)|p}fhA;LAqy1w^uyxzX7GcG z4U425*f3Eh(1ABrxe)e)5O<6nfYzxoTC*&+&*`*VzD>IY;lMYMR)|TqKpRJaYpA)d zrk)$<9fZKp+BqfC8<)dOilAAz00p$)+Mp0k8P;R$o$eh>up@h^m8x$b8CHY4Nn}%r`(PRrs#qRYfcjuC9AiOhYl3nfTGWc%M`*ML=bkQ-Q6MTc zY-Hfe4X$B%JFysy#kCB-^M@lV7nD&bXpj6=Va7qPN_ik_NIYyoYO6Y*S+v>E8>@=i z)bg=fCoIJnSZ5$mX@Iag)5^5JP84@sPZVby*^KjE;995sYz2$6AIjCvgaBJ(NSD7$ zmU_l;ptA`Y^RX%*x!}hqmj;~#(%|uP3Tp#=h255@efWAUiH(5tn{d8y<#CH(ls^27 z&VBZ+04z++n?hl3v4#kKyAv`kLk3kAq(P*9j)?h@0SQcHVX6~2DSYDWCXk&rEj|s; zl(aVn@d%>DE;R`UL>@vPMOVsD&LwPZbLbc=Dx!gfc5`(&E>qKHp1i4jl z=<~Gia!;$)A=4GaY(51Km}|`f+-_I~l8x4ltrj8^o)Nwvh}$&9Tm|$9fm&$Gxnwmw zWy2FWwOZd;_iq-ckwVVbw{{X-v7RWQ2`iw1ZS<4S%vQ9YMoG2j=u4Kcq_XHF!ZKeb()H4tB4&)3!E#mBiU;&783=aDZne47sNJ*0(TmaWdD!i_ z7k*()1!o&e%3Jop1@5{kC6+g(F;G5bX352jVoNfznwzcTX5K(O*Xp~~53NhRhoi(K$iM zUKK`JDr5X)sk}i6ByiGm11HOC-)9k%i=X`$Q%gm_3puDXTh&JU=&;#-SgEzXoO<`O zCXC8?m4%pl^u&fg)G_%u5BDcE{K>F%Vi-T2^m$7ra$$AO5bVX<2xb9lrOwmQa3Gpk zzc%&|ju*~QbySie2b03#MFh#<*@Oa37tPk}WC@680+gW@%y^X3*=1vHsOr;b#eFQ$ zJ4?(zh@L>OFit(t&GAJL(rE)S6$RJpI876gaR5#LfD7D(dtLC# zt<9*rxy{CDJruK`Qxd$-}s?l!$>fxP{PpHndE(GBsNXMbRwiKwE z5St5`$G(QT$@Ei#QaBR-Ji;SKY%k_Oz|Y%wdqC%=HX7d0bua!#N%G-Pu$?`d4}c-f zOj?6H&Ad;2j#DBL1q((PM{$`VU>GGPLXaN@YYCDT1$JoW?-;Zh%@Eyi!Vw=^P$9TD zP_K+eodCfUrw@Vmg4U;MMptNjW#;JRr9Xqnjrg?SNkcP(^e>Wu7{*W->h*(*2xgzW z738Ti)YOdVB2>JiD)8OjXoz;a-Wlt-ryubC7;zLycSx1u32NY`*~|gJOLQnn z?NGT(H(}YbC~v&Qb%%otw^LJLD2M_%EVGAQd$U-t^rcbooNIRkXu%lzbs{gRk zsMqTEn-pBaqm6F8G~Q_9k&;H}tsOBgmRfS4IGopttopHF$#rYjwi!DgE-wDSLV5*w zxE@xk@B69$S_ewP?<|}ekMrllZZ9dO*};u3dc9{N{XnO|cOZ!fYC~PyOeh;?`zD#TJJ;os&@2m-RY4!UpWNplzB~V=*zSzOlPMRA zn}uSzP%g$|b2q%#B+nP;{h*YK?c*~)KtG_w2WlX1$B}(;;lD^Nt%AQl?z6&<>L2g! z{Zpx*UvSO>{ZjIvyL%i=l6E|pH2^DE5C?RyzP12~Wo) z*I4X$%YOFWLim#?v$dX`I|d;h zImOg#BbhY9vk-LGR!`eww~QoegdAhbk}yYIXW{|nyDAI z`38B-%xvWbnFVimXXLgzJ2%eb2AQr&p1=CO_eq_!VJNnJQwTgLs|Pch3$It`wf-db zdNuyFNysVID8&^WaQ#bIa?&n*;XhqkhmaN}L<1P{e&vJe8>!!7!6N9#{^JU2T>L7&W2U-~$ura3F^GGSC&Mkw%%ZH_d2@O~Ov2VpJQ`kBZCy=&n8}wlCdlcD9 zL(sM{w-#6u5%L%wsX9ST)Q$l$#5$O~-)C7?5(BkC#NbUN3v*z!lLA$sc*z1+vT;P% z!<3V0d$(s%q_K4v6R}zaF%dj+mV+F29#rc0tNhk)9WMKJhikkU3u#&7iFn|Y-_|^X zs1pF*z9mJ)5Kjsy_k zg;6wtG*)?bTs&;bu^wkeR)iVIqdJ!ro0lYe5#T3U9wA-;l!cydt*z&?6rAdqGDOYV z2M9qG`b;hvA_6+J${IGxhpl8-Ia;+-r$f*}@M-~JMgIWV z0*_;P8AK5n1;vaPkhU=ZnHoUR&Xo{5y5!YsA@(<0m4-}OcG%$#e8Gg8Bk(&NA&_%o z(pw#CyrkTTv@^AxR6Wr9I?8(76j4zhJ)MBgUX;xK%8z=a#)hHfE4vZ^MSv?$-|+0BzRzK%jl&aOnJRF=2 z(Lu+=HqLboms|^!t6aZl88ASZEheL|+wG&8KraZW2V=iq5;h9?3$otK>}=3jyOq*; zU2&W?XxyI8kxi-gzNHoVi~z6qJ5+^D#O-n5*LUyvJN*eRvgF1C4ICifqP_O*lMZ`u z&^>8`fep~7ku8c%>Y&DC3HMpAhYY#rA*pTvZJ+$7oZ}W3Z6Z7Es|~dUhdUsW> z-SZgQ5Z6?|BqDH>O4TFqpFksnwzgr@I@D;OX$5{)JV)?Qq`7DJ%f|BR@|Ib6U=C0IIU3Gu|@Lpx#fA2kL4fdGRrn`rGd*l~osD)t@a*jpX>!9l# z=?1RoaGHw$S-ig(eFx)m1(+5CR6d zx*Z;qk6#S{#Xu4p`B_Mwv((Q)2b3!uFxA-G@m5PfhVW*^WTVb=$!Is85zwcAgL!nJ zF86PGS#Ii!7cZ8>-uQG`$;NMwPCM{F$as1Datytza#x=dRs!3D2&;+IyP`DEGz!{T z(Z_=D;t#!~w)_`Ev_YaIN_{~A9s=yI9!qO65JaFB#-6xkT0$2(Zb4@3-N+Q+LkVOj z3>H=C=V6CVE02#mrd|Oni695rvd3I35MX*3c_eti&W;@~P(@lHU?v3GQ#ptxKzahI@hFDj ziDLvTNUDo;=L`6~UrI#5sk!Cj6mUJ~0>4z=L`xu#y+-AbIWZZZZi<(-lJ`%+Q2Mm@ zQVE!y@LWxDj)FwLU;d|XqW&qUTVtotRsR%v);}I;&(X!arJZ9*RU%mhBfCd5fRYlO z@_gXZ;R({Nx@upL=|F7C7{o`-gar6nkP6sE5puKpOJzc3FY9UzCnI$}aHn9Gj6iY9 z=Ww6r$pDDqkg$ZE+H?iPHx*caAy8qc=FxBfLdK<^J+-OpyAv{^1($s^u}A8Nf&D<` zlr!}SPfc~mlv}G-tNv!Oj3=M7bhYQ0fQ$Q9b-@KziAi16sU|xFVhzW5t6?d&k1=oJ zXyRKgnQrwhI}k=h|Sh(KI44=Ot|s}4>?h+0PAP95T^ zNAE~g$evmR_nN!V*{U!0!@=a`vVSNsb@7G*(k6;8BpdUfqKl_lJgfHNzEwYl2QiBh z?Ncu3@p`Az-PkO43aXQWLaA6@FKn%?uNKx$HaqKU>&5bF_at*W9ucY3!oriKEp7cSD0kDtzPGC`sACddb$bb0$J^Eq% zr?gSgBsYp*he1-EWHy42_er7k2{V?JJ)J4TbX$2Xe&(Ij(zfd0&o=j~)uS(`{&U0c z2oJJdrsGpR+w7wpo4vq`TTWZ6Oz()(4p~W9lOj2Ih6lzmd=#;psk9u$!Kjrrnp~jv z#zNyQQShYXhoJ?yc7sGLJYSO{sImT@h%(fw%!=wjmjn%T$|`Qh!9b{jO#G3gT(@4| zfRdf6YxMydBwz;_qpc$xJRd&es}WPvh&*TamS^{t#?7Ym;W+B`Pp!@%FN`VrQqRhg zBT(P3?e8-mF|8nm$z*n>Pp`8|*Xb)c3)ZUc$pt1#xEjdx*DO1_q^^fbj#DtxhsMD_vDKY}}TWi%S`|W1!r>p+s zyHCXVwGHey9NiCJx9=STj-5$|8J$evnqsGIRHvj>BK@?q^~2pN)fy6ke1^4dhh0tp zPL2HM&fx(DoIuJ9$=MltRjuDwCmFsV{l|3Y0}4SEdx2=SeR4J>_b{jLU?U_IC|j+e z7w8*GZFMCGi&IC#c#?sf2VQNkg|HygbBBgwfDlA-Gy&yR2h=KBqY<1#b<}!v>pmZ* zWT-FM+Iz;)``bF6-7tFQ??Sxl@Z{UQ&Y0Cnq;>(%w}D)#Z6&jZ+XP-Q;~8kH1<9EG zOYX@mbP6JDsw=O0ijHQ9k1cNjaHq&oPiX=B(qPNd5ynbIxrqZ-sXOS}-lH2s4&A={ zp_&00w2NORzgf1lv#y40s)`!xrYC^Z$fFu5(N%vRjM0F=4Mr_O7F_K}HN3vExt@!m zIXFvME4785*_yzaNLINItMQIUQMtBfu?cI7C^BR7z|TUM#(D27IJr~{DMxolDcwtK z5>sk`j9RE^Wl09BL>q&Ks&z-{&WvciL~&~VK^=RD*K2Bd#~+(;E1nUCDHLbI8%eHF7kQL3Wp*D6yftdzg+GNPM7`r1clMR zWU2!wrWk za2;y2wD*T+dukQk$BpInm7u-kJa~!37$#(T)>>OHZ;$augl1QpTIK zzI%_YTn*%zS;x+%r6grdj<@b-SN;1cTOMgup5F3=zaxP4a#eP|nhu+58!E37R}nsE ziGh1j4=L|ajxELZalr0|OX~2R!kNk z9(M2T>>q>SFo#z0|xB@=MgScs;A3Vq7SslX%NkfX+o0)%MB3nXjU77*#WXKk9g&mRyQ^QC<&)`Y^i5zN;=rRmoYYe-mu6MgduEb)5u`NZ}SMS^i{^rG|K#v zwDENatmxsKnC`Nr+=Zoi#~vrSOs|!<{Op5AMZ8S!sRhRj72u5RuG>#%Y1v;nm7Trh z{A_u7YlEAQW`Ur?cJx`Bj_su`qc7VGYc@=njj*E+2Zf~d9k)NY)=;RAI%okqCApIk zU9(Theewn&+x834*kAN0CYJQ$U^McWAfBn=5pBWxJD2FXR* zioJn)a_miBoCnyg%kN>Ix*o zVKelvcu&yhE)>{d5)QQ%@vbRyww81>+XxsUAectR-_!RX0IajJ!mIgAL9;FVz|445N$X9eD#x8zD!${wNJ0}Mm2R?G6(>8AHv0BG$XR}oRVne$!0J=nI60T z6uK(!0<58%#8%NlDzF-@fGc@kp7xn}EG+!B^g9cw)aSqeRNMPpDyw6V=n2ACm-6s$ zn@>a2M#5XQ67W6I_<#e02H)3ud`zgl^gONXQG(=7rCEi=RgdM?f=5_Tb-!8Vm(}{N z4lTAq@f-p$#FY(f{Hq&M#4|QT;Z$9S5_;)o%m&H*Rf@-sAz0Lmq~%;J1o_^zM|5`8 z7Sn$?oxTgUGBw%jyNjs@dQ9;__Cs*7rN8pKFsKl561hRVA0isHFOC)zY{bYEkQ}Kg z`)5NWCiS`)-yexHpoZhaz@uf%$EdxEeq1vKDFB4(1PF*E9)9R^5SdTP3BTVv9cyw) zsTY|=Pc5avhs62?$_I?HpV#mVq6I=s2g!(+&&CLasTT{S-%Cp%1qaWwooyGr!@BKV)8ytfrE<^|q!EC6M6eGtlDeB$fJ%H;}Lp!TmK*qD6<(K`6K|lr-;-!U|EXvGNCrm8z zG?o{a3BuQLz4oEa`jn@(sBcL!=6#gG80PigyxRZKi>(*k9T03=+%A^X|N8>U@A6UD z|4d6w5dNh&)pa5M-n*g(n{n8G{^rVx&__idtE2v(J}Sp6vbw&#wz<8wAyfjlYf1c; zov<6*@mykX(7j#MgpA`vO1SJC<~#|Ee>xdMu|P4D>PAn4GzUNvTQ@EfCzV zlD5tmFan$oZ720)a{ws7YMkj^x1HLN8!CtTX{ez|AUa15&qj7^mwn&rAVGYYy#dKJ``%4tkG1dPc>RAHXH3(fB^j;c!E)#+R zHYD6icjAF&vEF6V&3bXYyk6YQ#rvW()o?24XW$3fA3{Wd=_N#)@`V02JV$HD1jBE{ zID!-Yq7RDii#7pEX<#H5PKrhU7D3>Fc)+QS?#1ZegOe*RxMywu=9$J6tMvP zY2j(dZoktHnR=cBks=MfMo?4_1=T760mTqeq(hfZ=KPEsjz`+6bJpil%%lYmMdAW( za;6a>`}$EV_c`D~LNFPrfxykO(@Soj!sG+vqMCm)i5R2V+BF@&enhNqr5!yq&{(y-ENRb`afYMsy@M+A7rJ0YL;hD%*k+ z<5`k7dP*62vRPrIDRiy(6Dy@HwveuDmW$BCbKy&>QF7v7)~}5&>3*47Sh!qz59mt3 z7Zo&Ht?GxZ&!m3U0(hD3jfUsQVffz3k!D&JP1s4J{k*LoNyjN8V6B6sS@jj+!u$X=$m97A;XJvO6rTNr< zrUQ}qQS3@1PjjG{j`$KY9-7OFgZ@Bw47tjLa>McX1{1ryi=el(S+htDiq5xfjc4D>*630-T+J)#j^cqGhRq>1z(rw z^~P<<>gnH~Ub+W*nByZQ?tUY6U~pgHK~|j!abh^~0ayQFzZ75{*I*^S;I1Iz;ze%+ zc4E(o;<7h%{UJ&c=K)H_%Z}#{>|r1omb`4|qEuch`wv0*u1-e7i(Y_IUChxQE1r4K z`*yq!A5?!b;~^3->1UkPx_|gkeMYX>3CL{>k1;s#+&MYdgQGjedceUO9IM3+HP|QW zgpp_@Rl39W0O82BdZqCQIq~Grd;5p?au#(F`p#&$B(cWOc^y9I5TIm@Fcjx>*zdC3 z?;Q`q4j6!)v6%OcO%+e9w|B08Kur0bVitDbDhW5@;{)h|ucbb}V17ZY9{g9}w%Jum z98db{dO(VV(t3VlVp0r5t;1c~!6^nOrT*O=7el5iamo3h;qstG1}q z@FmU=&rlY*e*9Q~L_-TG{SA6{8j$g|b?YfpTUb)M#)6aA^<=N$BZ_dBEF4NO2^IPj*?7-m4qg69VZySon_92_*8 zn$56lL%Ir?g{_SeOgbXvkRZO1&%n=k^-w3b8x!am?VUiq^KOPG*LQ*IGTtDHNJH;) zxV)MdjMB$Y5P;J=8g?fg+fmY0jp@2m{5@ms84O2r027oGyiNqtVjtiuj~Z>UgVVi7 z>=ZAE^#O1VOnZC4wxoq)zzl1XS<=Kx9VzVIdgQ;g>%Vp2zx8zc zt#JFT$bai)QpQjlS7}9UI(4;xadVL-Va;w!9$5SX>2ww1xSJ0unR>~j^ z+cz=Bj|_ zR|;#TGP@YNhB1ldLHqz%matPZ3fF9V6lXW_{^w&Jfd$;0WQ^Iv`*w)56JX zq8ULL42-iURvs$uW2IGP(RaM)XJrL>hP;ok>(|MLj}_u^x_Y1Qf!I@A9hC_fpDa&Y zLRSC zQMR$L0mmo2h2l7%9W)AI2Q(IlE1ocu67m6!tftb?kS&goGUp!C8+1mODDNdUnA6z3 z0B3t9IO!Fn%iwOZV0IEujmj#va`{+^v2+^`E31##ZMoF6HS#PVgf}eR9+|+^Oy!H>&h4 zsQlo_CW+SE8xlCq?sqrhAki43aIu(|etSj^sm0Hv(@PHk7!Rw7UW(1Hr~b^M(_!=& zh-nXME&uWG^c1|MpMcGyjnU*!g#Pci-pYP6#~*mk*SH6D!{BT%jDW~FhRHLfv&E4& z??H^og(MtbO-oDaI<=XTvmgaP!<|f?v;Qyy-{ID)xl^Hi4B_p#mJr!2NNu8GnCB?>+0QJMOTeqRGk=ae_EDc&Nt$wn*uBq(2x+a1ZJD)iDa#Es=$RGHW)VT9Naj zGBF>BuMI(J8ZnCy*N>x=gl)~5F`iiVXo{%oZQE`L>w9^c*l(bxP1KX8#h7>wVLUpY zdV{}>yjc31YzjO9=0s46e+oVs|K(B*;EDkp3LFsCCh)JAO+X&{A7wyTP^%wz%#1{n z?(c)MT}Jb5(%UCMmP?#$A15|f9mYm5EF7VnAO!KWaMFfS$t;uiV^6g#LrQ1&Es1Di z4-!&0N9Iv$7Y$qS(u|A*77DB7w9>E*rqL$3$7PAW%_SnWGn$VUj6N)wg6u6shc3!^ z@J42vUoANNz|_hU_B|y%f>do?dri$za-SwW8xHFz**wp4yA4UM?O7t#`_5#@V4jl! z{mspiK4e9vm=e{fk{apcQfrd*O5|C`fDD{L%vp^s=1vHgDss|^)a_$3J}s@&%2$7` zlw}){encIL*c|Pt#P=M}f{4T&jd?MEZXG*GFR6J~y&8Uu6rPu#!ToUIGasja5>(Xt z)k?GV)zt6TYaJhCu_sG;{7*Sg$R!WabpK+gxkNPBNZv73AV(Rfld~LIR={k!IgPME z7fP203T$wJQ45kbMUX2of*awRn1>{O;fw2N=+agna<*Z_d{o2|B^d#~dW?(;ouRnG z)?uV;$9MoIqgA#YinUvdT=$4>$`kVL>OApIyr|B&ebZm zGWRn1Ohx@~Cw^`XC}NE5#(XNt?$OjSxIOB5)n)PH07ee(WYO#k=k^uFrgA8NMR_p65oAQKp$fO`w@ zxHmip%Jdno0h~fzCN3cr$s2B3PrL*iP^;uud@$3_4vrxY-*3f@7U%`ms2MMRdn*@F z`i!%ls_?@oGY@ZS9rQeg5RYEJUtmN>`S_MR27boq&(#g-OpWB52TJCs86>c5wp8>> z#XQ8mluD{gvs?a_`UMYjxi{~`L5W)JN`##|ZE)T@%O$XiUh@w^8ND`BtuvnyjdNA* zGaAh8#pZHr=g<8UdSs+hi|M0O`arFLFV~vw+R+EA?SsnEQFZsrsT1vP?!G}CUxIRF zjNtzOet7hJT}Khxn3dr`Tepa_8;)e>jKRoh+d*9QS!=yrX&u(V;$5?Gu{i$QJvY?~ z3cFB))dC2@y{=Om2-?&-#$`L1$0>S|;q}2fZf~Eef40Mm=c{c_bE{B&zay@UbbH!r ze`b5Tq&C6jwdJi$?&>q`%1p35vvMlk5}s80KTj>yL0`rJX2;EH!%O}CbPPrcA4AcA zGw(kRCgZ1Vx}QA(kL%=9V)gUj1vzP>^R1eTR-$eHBYaict=3z$y;^nGzxT+`USZh7-F{g|E=kA0Y7n>Sztpxk2QN_HLrzrIVNHHe7P3NE`=@zW@+7>mTNr1nM!n-d43 zs^_g)yjQ;Az0y9V=qrypubBHQx@RICow`lfr5Y~!{^b-OdC&5Zze&^}QYX!+6^ehl znEJn^mJZ>Pcyw5+w|+(HH>D7OGW$~XZ2ZtCoJw=TcZO&g55{v#!oRrqlBxe-Vd)4j z!Vr%5jnsFwsQ@3auNM711wou0oW3s{dlnb}g@yD_8LYeZ?t}JGrBOMkwyKTh=To0w zoc28Xtak~PXBbco>c&X-QBTbYvT!iEE9qHwAK>CpiQm3ZH&=D+sZ9KfARM6>XJDh9 zGmsW8t8ajB1NBk7W40^JM+d4#joME8s8Rc%{eJaPmTbIS3#kDp(EzC=cIEd5lRjv| zni>{|8^*WYZPYnvteZhs`!hk^$wrJmMPQjlLatK2SYE}HN~9?kixR1?(ihmKjDcNp zy@b^egowR*elb+71H}Hri{7Bw+y^xus+)o?Q~^?gtWG=|nA+MABwKZ-OxDqM!|x5A zhoj*DcUZ&YIFCjVY6AO(LVkD^)1Vyd92Q}o;uew2Wemo`C@IpJq5#0B`(WWO+d7Ce&Th@ zdg6*%dHDb0E!<$0{Ql+PLb?flbO)8z&I7-4zoJg&);CgvACMlS7un9RU&^b0k)~1- z`Y6u(kE32N>O5_8EW-%yt0aPeg-<|fV8))R9i)IxFyWx91PctDf?W{4SHDmJS&1hz zXddE_1`k0!1Ztu^)kARSMn%=0`(@9Ki!qo41f2tS+JnnlvvQy#EMRx_y!G_PB z2bBhTx6&W#36#uUoTMtN=n8Q?kv5dLqBvW!kFb{ri!6xGqe?ac9iz64MabdG5aweS z{B|i`j3k1}KGOAYE>KmZ<8+!L9k+ARt;O+D0l`k*JG z=9i$3!3nGc3y8XuX-l@|Wl!Gm{S!mgf`SlIbS-Xc)a#462F9A*x2R}v;F7#0FXQD! zX<+`4xdT8C1%*)6H!`BNmYp@oSGcXR>;w}b{*%ea9w&{{BLJ62XaCiaZ>zUuCjisoy`Y0K*!1 z=jiDxp1e%Is=6`p$~0PK6AwhXK?}Lw1*tb3wZ6~0@X2rp?2gx(Kvs+~&Hqz0`0z~N zwW7+eBupLFv4_Gp)yp%j*blo5{t^JXDc!NwEMb=xOrU;GA6p` zk%1Yo)}F&AkC;uiGSmzX4;@JmLZ{|#rxN3;Ti8W&=$V=kvaL~XIN@_pq%{%HmDz6d z7261^z9{&#`r%Qf-UQb{VC0zgT&9C8P@WLe$LDsZ1(s1TIB_??oH83U)sOB6f86DJ z_CrA98+I@AKFi-BI2@Bdkr@hi zAdu-e>d+SL6LuRqeZi(kAZ@?6^*@vSK*fnhE!qnRAshj44Rxh_ zzEUc!7Pr>6$^aw%$t#~keq)5rJJ-E=PMhngMQ=I1)Pf*tzM)hFiZ4o7CnE+-R@G#+Ey{B$ z5+OpG*U3V+X7`%OJ^4)){mw)kGqB1(dQ`0dXyQ*DtD+G;5!oK0TPly#zaJbPg{*(}xpL?ar^4kdyNK(KKux6YWao97Y$14qXcRG{bEN4E zpY<+D-f}*>=ub#Tfej}@4(bje41t@DFqlLZJO&1Cij|8yljO{Svptc2spM)QzmswZ z$P$My)Zsd2D;egl3T3So8_zFERRJ34^UKb#uMQ9T z@3;KY9hx2&KtnN{Oke-jcy^_x95PR}mfls9w9`{(B}m6lL0x9tDbYX&If9nDP*A-n z;*ZK7xHjUk8H0|@QXO$E4seN<;lDGHN39Z-%%u_msCDMNv$R4q?OBa#sB5Q2o&$%+ z`l_SNsOmlu^c;%GS7*DDg(-4ht!~3=)9#gM8Kx&4WA_u#Vn+*}4Z41}5rYy)K8 z=;y7A`5Ak9<_0bt%OvwVMJ5TX1OxlbovGV^ ziV)c7LbP zZbg}>gnp1uxiy1CS9%j0IV~N!;%v@oBsbpzoOy*h=e@oXoHbG|MS^l_Ph8hf?|E)6&C|@8*$?xNa<=__ zPOnO^nXCOciVE6cj{0ajmCY(KLx3L-)_hhwvvRu>MpDa=GgVs?8{UG5yg( z`U9{9HCt`Kaa6ax`cCynQvYoV9xx18rH zYiM=fd(eOC<7@jGCVUL1W_DfgKgbQ8O|m5b5}A1!zHV-N*Y>Emy1!G43#aL&hY(*1 z&a~B5;}JO268_k)P+LIK=QVoi;)aNIcqsptQDOW;9HTnc0l8q9l6q2)`He2>0R;XzWbHNNC@WZsOFW zf#%*V(yXqpek1ko8MJMA$bN2m zRSc)$eO zu{snBGSr;mMfs(Gm|C!4WB^B4dq%aNI)kj@Xvg&L#hNatV(c~1?a^antV8%3?%kYs zLkOQ4o`N67HY_uah_4|KQv59bHWtwHlMjFL+W?ja?>@N?;(woBdJG%JZnfFot?o1) z9ksrg`eQo0(0ZIjM=9_hew+tiJ@p6p=Ir+Hx#gw6E>&`cfh?5phgsxU6mvX?^Tg|C zVYC?XisiU>KSX3QMY9@v;}~?(bM@L-bhEiH9z)BBc{d;ONUv*!?&|9rUBtKtoQckH zxOSiAP_d!;^$5)e@X(mq(&{YZ(+)@BSqR&< z4r34}8irve^^*}?ICG*F!lF%P98pioMjRrQ0Q#RK71W?R?%G})FI?1JL~g`O&rsv( z&81N2_M!qfY9e_Zhx(FV3-vgt0>B5=cc)5_7>7LDz+Gc#KvX7J6@cKRR?57@nRbJO0p+kV z6H0r%mrTtMlgQz4PmL z-_`whK1T;$qX+%X>*n;6^T@BSnZW8U_^pMdCqNcct?!~{;7h6hFjXCNNwv|B2%=g) zAnFtQ=k=hby(#YKPQEu-oP9W@NlKczJ`d*Utk-9#`s*L2(?0|8EQsavmDG}!^$FaE zBOJ~C+Y!p{u>)0ubd0cDvF>X~cxR#w2jjaZKtp7QnSzMq%GZH^uXbOJphj$^4bu2F z#$3dx!UjvNIPVw$%6s7?+3CMGCOt>M>#gd`|0Q*|U?ItFi8nM(kyo8IihA;jd{5%J zgx$N8%z7eU5FOpUN4{O;ojJ6m)0>t`EqK3tsf{pp7{m6XslTQj7dWcz@&4gMh_E?q z)LM@apl84GsEX$4+WiOm%@hA|?SB2RA^rkt+zy}k=PbI8+=Z4@R9vnoDRrCV)yuHzqSJ= zxA&`$#QLV>yzmUeWbl(G-uF*uz)2IU-YvD|`)4?LncZNRaG1%b<0IUDY(Ob92Pg#z zQ>qU52M5%eJSmZ`>s?A_r?B!e4b0iSx;dqz^N1&j&qGfhy_s@L^9-nHd$97L5_))$U}ho8mTqz;e&3lSeyFT;hF zSd!H2ly7L@Oy~-*+Nj%qJ~m06YSO1(vYJkWip&O*%=9btDj!i;HDGKaaIfZ~fvY zh<_j=*ouQeZQvf5&v}>8xwAsSql)PK2?lU_;0sczpf^!8ms6Y093*zyXm9A3O?}AX zYx%lTqV?6n!auw8vlvS0k^`+Q99+Q;gg4&TQUp1s&DbaZgGB!Mgvc}t3;)tmpvK~t z*|(fFKv((#FBu(go=@zv)?0iwhs5(;d)H^IhW0slS{u_9=X%?=&%@Ch>nWFb8hzsfA`E zu(J&3!~@Tv$xc4Eio3KX$_)|TaF&MZz9UTwbKfel&LZsk@A#!+@y_j_Bc)OcU;2|v zUGRlFJZjYrYCp}P&b-VODw-D9i!_iqV2*1lS^5W@b1gC*7yrv*j;9y}?H=H|`dnCuht2cR&T+|Yn zbb9*J=pyJ4d~JAsF;WxCuf2Wf3GG7Xl6{^#;QTH&3+wWygJ5Kj zYlOb#8k^Q7VntE?gdNx@S2bmn7$55ZT5?fOKrj;y>l(R|QNM?N1w-GvNPDUTJ&eK* z@!ABkL!Je6^ik~gkRy>?q)0d%koz^`6~yA>5yIrfz+Vnex@54E!0eC=jsjo+n<0ko z!^tric2C-nx~xK2b%)_B( zDp+Bk_oPn=eIt;rpF$>$p*pe;vtA#}Wt(r)Z&F9QucuB5kKx9}qDj-O7?L9k{9P!xO~jy?VLE^MZ|FoaSF z2CTS4pu0fr1yG-z{sh2VJf88q3y&uQEoBx81G9sX*sNA*aA`*bjfQ>lFSF>SfEx~c zNP=*zIi%IBkVE(cF8rk4Al2z*tcS0%2wqnnLTA zmJd+$EW9Xyj*K0D04RJ+Y~&DZmRxM#2InJ&R|N)kgIbi_9o)X6onBorqU073MzIB) z&;dq?_)Cve)#6R)l#FF1^Pv3}VUUd0?B@C^OEl0t_SVdy0~g(@UW`Jx@5Nee9np;A zK>oX4e|QG5ScV!w2*`VMo)|WALt(*SCtR^OA*&q*b8PM&fdA{`KO*orR?y7>swT zz)bbU)c?b}3d0lQrI`nRxi&cpYbVXAE{De5jV7>s=rg4f{DwhU_Do8R0%QC>HAD#7 zrmA(U&is&opQf|hV*0&Q`c(Db;yZWW{c5VGy)D#F4?TwqQE;ld=sSp9gL{a?n8t9EBfIxa)Z39zsV!zn8Av+Ij%%q3fg)40N74IG{n#(G&dHfet`;i`oMBV zgOgn~!_*f-OdT3Vw*L&efm&d&j2IShx7KXc>P+G3$@jMhSooV0fQ3-c5@Qp>-xQ2h z(tl3{DNIrXNEUZ>26v}^ZjcafgA3s^|J>3UxaJlGQ?P^FueRDsWP1P0sq*J#Z<1%oUkn#9C9lG49EGG68J-|UTcFz2 zc_#J_)Z>!nRbap9s7DfHzFl~no80gab`TM}pnFwcoCRnBk$0qvC&DcyLIa#>Px7Gq zDOMpw;yrcsQr`k}JIukSy*^&9-~eO>x;$MqJpLI8^OxHm@z8dM&Q5=SDPAr z3gXcO^~0!`0$g1QHd2f8{DP>?yB;(t>%d!z+El!An0E|xtO6C$zr^C0kq`|Rs5X)l z-i?p}^Nx0r5aZer$hxi;=T%3AO*GHo{=RYXm0=)C{X($_MrTN`t7UQ zMYF3Xs1dr3Sln2NL{UHjpGR9iB z1ko6V=FHf@D=C1VhF!rnS2yF+iJD2^8*?@ax}YFHt%58UfleK|AQ%Xh2sb1GHuShL z=;dOm{=hhn>(iOqtaZMJ+e=|jNvR%c#b6IN;>Hv zVkqY6*EK2z&)6ZUdqJK6y;Ki8+`@=FN@&MWGu^{@EdBxp4`3?oRcqDsglYkMEa>oh z7$N1!>XF$)#yhh+x$Bt`RoIb@R$N48&)^KeS+Ul%m0=!OQ40@UehX$|XUMYB^PU%U zpDQ_VL~9n2CGSlL2;~K#g%B_%>i(n(nr@IWb8&!!^C7ExK*CV-O_u_4#5;!!Attv0z?M_v!w$3?>3cq{GHxhq7j#eom?sy?4g);|9Qpc-<3% z6M;1abK&Ab|Grg=>_3X#R`g8GK*dU#B#(BI^=7Y8ty&+IGgp7%7EykE5zfwgts;_N zlwx1t_2`!D%8LuXIlUBuo`PZszLwfppuZkx4{}fZ$H(<%?S8$wtN#4yYU6OPw!e=~ z7i8gK%0`Aa4bR{Npg?&w>k3=t^2*9axwx{vxwg8op=9h$uv8@gxK&>S}RgWuv&YwpLm%tpOoLwNa}GI6SGJVC&&n2&uP*)5l9fTiu=;RRriGXV*C= zB(qUX^`NL+cSL4q0^C}Eej)vB@S)f_ZU7jTpZbR;(u5vmAD>1SPht)fj2lF%`@n$+ z$UJzkeQ>bdY-V6NK6r3&&}=eFKn#0LSP^h3OX#NDTM252#7giDqgHreLQq#S8bR&r z0?wViC^DBAr+(ihnY)7fhPmji=0$Q-4NL~?x+J@&Ba$D2zQ;nWAq1sO6DQC5G_;O^ z5?8yp_fN}(t(Le&qD`_Jo`pcDbdN5VT-6v(ji;tA`1i~?qriw-P-j8`IwrBj^n5m|b=g@fyAF=l`(-N5aR(a&ZFwgn6B5IbEP4_3?=hfxfm zEc@kLW^TH}L}29H1_6 zyp;eVh-70!O`%zySTaU;P}_IO>`DT9FcJ|RReMdWZk#RZ+F;{+O`}E^OfIyI_=)V9 zSAc;U0NrIQ6+^@A*{J68OUo9YQ5d=33$)v^K->R=$&&3YJCNTM+?aO9PX-VI$)4?yL$@Pms7 zP(FwxNPKuz>NE9%){y7leAqF&0%w=3-nT1?k3n$^&2-5T3*TDt~juvWFBqW!=5|?G6^h}`c(CY}KXbZHZVyT!AW-aL$Jhn{m?IcgDdPBzZR@5z$zvtl^K4 z)LPXAzWrDNoz)`hcQNPoaMTuAM)$Z9il(PZ>d4)>g}G?=$cpSGVA2U|7q(gK6JI#lCca*pNBQQPk5Gxd(1#$l=Sn)DU|H zOfDA_j48PW%qciGGHK06)(N7v9pHz>Q;#UFlX4}b~x3M?JS6klg(j65>529*YBeY1-zUCAMU71(8I^?a>kUA$|S>E$Ttbi;{39EBCy>V z|6Q`PzJxunHKf>E)N!EaJ~-{!bB6>b-S@Ppmwn4c4DCnnjD|1X^?QBoS|G*_G9sK% z`z@~$bi)>9FULlxJno3&9x)%HDa8icn>qKAj(hBj7x~2cX3l&ZB2+h#sJufFJ1iO^Q5IG~5cb^E=qP3h2lPFTA8CO$5`$q&l>p!_DR=C|LSR-{^LGYX?g4jy_E z+8g1@lv3YS8_7Fd^1D>Bg?K~b%iSY9o+Ta#p3gp zP|Xn;R#l_fb;Ud|_q!RcXGT|?3Yea(oY8IIWYPlP0n=u@QHiA?V-P9z#={}-35!LP zJV__#7ohv=_j#i5)Nt%zHa5Jh@H?a}LaU%ax&w>*kdM~>CF1dQ#!j`+;LF^E9Mz&J z;li=k8IAxkynm^-8k`g8@DJY2T@47qZs@4>G;@*0i{v;7LSu{d(I_NKol$L;H}Ymt zcf&5)L?JZ3&#oHyg4Z+HGCgU7{|-NW`(59vEqSu6Z>+7BwHr%mqqL?3ow(}?E!c=0 zYC$QBQ8pank6jFQBx2o`Egxa{E+KqeKi{piD!6_fSp+yowJ<_&l{7-mAS8Eyi$2N# zIQ4Cr0a*?J2`AdKZ%sQcs_g-}9KLQml_@wdpg*9AXp(DzRJdxltl!jWXXL z#0?YVg1YF3u=i8#m+{K%8EpZtEj82n!%I3M@aoBXh?-T=#gNPZR0wZ0rvy_VM(z=^ z*t0{JE7*}-r^i|z5jo`D^mog`tp zcrabeIh2W{3II7m)zU}SJeL`usf7ccuP>|D75AO*7C-a7RC)+H@k$d6QU!#l`DLlU ztMAj>cfk;%bywP{)88@O<<2$Uk@~$;7hS_M>MGiP0H;DyYv%^^z5-+p+hSuQc6cUF zzUUfpRS0?55POk@j=W|@t!IIcnj2j$_aZmJN-`i0@^zDv(oHuZk8NM!ruv} z<~hnJdD9Ya-xb(9x*?3+GFGR36H9S@%=uYEvY7r47M3p5Ui1~zvK}5)>!bl_emynR z`%(NIU9LaEYQIwVk&k^=7x1-vzxICB&s>17-Dr>j;zEpohc&Nm((&Ag-k46q;h@l} z9vmGuDvd|J9kmHU7~6}%gXW?)@IsNo5E1|#PUmqm#_tOB9jaDw??W$op~x~cwdiH5 z#5|ECxoUI|#DfRU_86xvcZ$AZQ3=>N(@L;8zmZ7|V|5hyZwk z(xnZVmf0u;w}Y<4D}gm2j5-rG%3qs64x&iao?C$C-$*U3zJrN4D2$D2+nWOqecJb_ z#q__KPJajdB&r{_K%(?hU(tRN{3tsagkxH7V7F$uSYGCgl3$;*xQ{;z!3#j0JNUUM zc}H+N1W}{fuI%oT6D9s?9wVX)=!I2ZjZj$vE(DfJ0mHJb_z=$uC&YJ#CgN7T2liq+ zurwXX8?j$9}PPSlTX@w~H&u%!(T`va?7Yubo|~ zSe}vFL2ajTNMw(KFC6T?D4nVyV0mch4%X+>(1lYH{JOr_v*w zvvtPr-!*fVf%g%$KMML|aPX-PI2z1^e8GG=9)vF`7EH}U)>pv=I2I?$4)nH)5i&Nm z4nq@XlSrry7~EFJ$l_-FU_Fk<=IB%8!aV7*357Y&oZJo0egF<#-Ql^Xr8T%N-Cn%e zotR}o`Z5E`x?yZUGatO1>{Wj9!w)Kr#$hLO3&CoOU%0cd6d{=loOaDtrFE>1)c^7g z=SWSO)H&s~k5NkQvlJXz_FkY2wJ*upIf7Hg@{GB}EReb7nbEmI=m|2Y#UoI&!uthA z&^o7E1jYR7Q&x5d!Z)Il%7R}*g)ae<{PU_`0_Z2J% z?rwQBzL}jCd&k6gE=zfq$G$l#sWGTs7%4BGVw_6hc*3-4+3hB^;M*NXeb z6bn~mZMBxSpa=pu4AnPEd;s8K*LOtS!F&DFSTsuI1S8qoyhI`jG#MlQM{srq=3WW~ z#v;IP6hpHt;uE8CbaGbT-vi{Z_NdqCh0htClpaB?nd`;0iLtb}#dJGoeX}_E>z$l? zkAYyg$7OJ?)#b4s)tzpTP1$wSv~)&=xpI<2-X75@6(&_BD-Q^456k4*V}s~mlXgH_ zz0^>$W4N&}vcAHD7G|SSKF4QGsAK$s@oj9>s#FA>1KU@}@tv?&lotxvNzfjjU$psV#9(VY_|D!mW8Cp*z|DmQSzV|sZ6%5!R-A&-pz`^+ zZ7$hX^XLeDzjygoW`>93w`@1RSN;d$Plq=*{0APwMDb^mA;$7h#kDCerj0sa%%ilr zwYEliPzo^mwK--cf)rce`@UJ;a8g7@N>zERmy4@KD-X1TnoM5#8*7_e8|BSdipa`i zWwW$W+FHL}Tjsyj(Ntt1Y-6qqo%LyIA^m?%kCpiJL(NvZetdwm&$YuwqgKD)OsD=o zKtx)foY!EghQm<<*umm-H6=;ATs z+UHN>=H<{0mv3BhRjWk`BKosYSFNh-NeFy#-7o;JjC&k7E0HX0YsK1fKD|g^5m0g@ z>{3L>K;s33521pZeCEIrR~DG#0;sV{PA+5Yb5Ge?uTkB|M+9=(HV?C<^&G*3smgh# za&W+zM5{W@s%gM%jzo{N?wm63TO(*_Rc^2|TpjQB$79#r2h|U=R>_&u?rCp(do5U7 z+wKIXr`xAWIN9DRZf+%*3HNsQszvLcwaVJsPGxUzuew*k54@{ODixQD%WKQYjEfb> zt*A1%t@yMrbQYGLYn?Sh3-}KXn=N(0{(&zz7i{aD=k1E5VGO@X1SCtztfXs@$21`! zoC<_Ppl>B6dka&CQ8%1mTUKHV@`h&@%z2VBCMg#sE!~u*M97ZNc8xe7!lO7Knu#Eq z(!e}5M*BaojgVD1uH6@)1qOoDK&2+#pB$;nbV%%c_*U}oDUYtR$v3ecZMD{bcx9*t zk|moXZ~}SdA7FRFdzBVy-abCA?Ot&fy!y0i>X)|4rS;8Xsi>+F^0<^i23skvgE+^p zODG<8PS)4UtA&lzt(8Kl)GHQF%AI1Nvsny+t=00@+IksEPF1Ge(?YPezFyb}I&15v-QaY6b?wt?KKOCSNNsZ{XQ<>I)`cTWz zM{Vf9*#Mj-nfl@_7iGWz@%Q}M({Rcpq=KXhzF+ab+ZzpOVwr&?2LeF`kOgRlFkFrj;YyFFDL+#;uc0q(Xk#ZXfF0J zMiL=cN@$Iu+R?ykak(=%6$GaFZ{9c!VF$XIJvIJ)YVn7^ms)zE8x1XJY;u{~U#t6%A09T|f8y;N9vswK{L6n_sqX?%{uA&> ztku;6{K4Q0PrSzA{{Fqn&imI*k63GJR2j?WuKy9p0VRThi!50$68nv&B^vU!jx)=` z#i6jmc!$FQNbSNciZQIL?{FS-W2rVVfB=&;&)D1O6DBY^fNG|M@c}Ie-46iG6Op_6 z%-lKvYTA!wxXfOjcK0ZGmo$B#A03G2hf$|mNilYS)~#KxM3%bXsZ8iR8L$p9o{t4| zuidIhu#UWFIK=1)aI+FDy}**u3Gy02&m%v}8sR8s{PwYM58W!+Yme~QhXaDjN88IY z1nD<@jJpi=lmKF#^gQTnbU;QVBnr1AwQQ_G7K{_Y?trPLkGp1wKIER6cvdK8Vp8c; z+g@^w-|@sPsj_{yd3=zKz|rnfT$!L^!g~Ri@4KZtLR*LL%H)DJQPSGz^6q<;SW=p* zcRW%bCkoHoZ65W`k#>cfVpN}n=2dF#La--U z(=CjKeMak2lcA5Y2nJKKz252mXb@beqj($>L}h=AIg$HFA z%VFlHG!sIQ`x@1wYK4LV;TUCV_kN#)I$~Kyq_B&1Aq=5(q9H{z;3za_&7qA_l0LMp z^~2N{P8Smo3~)uLC5w%{$w9Ez@msOOh5#2m{F^h2q74kVNeh`^-k++87 z&8Em6MmRS5I;!|w&gHD^9gdsi8s8!W>(*xYDmiNtI8)@DI z`Z-d(bK|;OR01}$G-1}*BeBet0H)4d9hq&t))P5tbnHKmtG?!(0iC*)tE3K;FJHs z8$>m#X;cDc@}L0ZY0^3XoT`-`Fw>VKN+r{iD%B7f5OPxnl1S_9hNU$n+Rz5tdCN6l^e#HBoH&rDr|(Vl4gw0R^<9kA zLbaY1F4jV$_IPaH7!YY3aJQX4(z`xosxpLK|C{yUxCdM7L&D$%soMn`f)y3RDvBJi zB9O;N;n^8n8j+NOq}N=YU8hD7%9K3_wzgGc683I@(J|-_lX%i*^l<{qKQ_sg=d`jJ zksz(p#&f0u?a4ec+NBdGq4au!(uY?(3L(6xQRfN~@K9&e#<7fosyH1KJnfYgVGa}7 zI^!K>oFio;;Dxy<*gg}UdD%t=$oR_D0;a3pGM{;ZX+770^O|K2)dY1Vb$}aun@|^$ z5RQYY`kr-Q*fze2!nIQ^&`6Mrdx;#x5d($7*d5X1cOY~XG_H6zc>{}QiXPt*nB$Qm z!IG1+mh1u>z6hu}e|mx5lq;V-U+myyv0>nOq8-+)E@9zD4vhfMRVhmYnQI6*n5#vI@}^1`Hm%fvemJENiI zRzNT=I}^2mBVu=1Kj3Chuq7df>nH%zx{t|5nX^ zs~-=TQAvTz*e|Za|F6#B+w+=usPtD-OP4^{zN6N!TF4N{e^1T$Z0au<%wu}>k-P&( zkDUkAgUZMLIQDY{m+1-(45NPVWgB0JM#27-Fx;#ByL?>=$x zuh7tBC1!4NOy=;DdtR(*78#2~iW;jfMPD#Xz98N!NlA+t1adU!5gmokc^eua@t8M3 zsFcK`E=#()$7(n4O2@VobZHWe^$9*-T==UCOW%bUxeqFh_R-Pt%P49MI^2Ih*O_#u48Q&9(q& zGQzpR(67SiF<<-Cmx-O?Ct^Frn*R;|=i;a)Ti0!UvV_#aVlMr2utub)Lqr{C%`$g8;q*ihx)Cf!fBv zd*OBey!xaiKjbF9@=N6{aP4l5CU}}-s3bx2`MZb5U_Qqgwe4f~e$tX}188{hjekF# z{%1f2YaBjoBN)*SrvB*XG$E=y%)+WMKdi7KS|doZ1NH`TPutzKEpppxO1e%Wq|X&& zoEQZ7)+9Hc5nRRBNQD=R@RN)Wr# ztTtL`uh~_Zt9oV8j0#jQIdI1XEx`c5BSDUzo|i>vj)JE~F%`~eR$l0cBpSH zcnY1qQfE+hpfE`?YGl)!tL>*=-|k;b}jBxER{UAVRkJn70i5t8{A$TtCmwq33zEiE*g9M=8aoB4vgvh z)koJFUdD^LAdE<8h+aDU+f+zY+t`vaf&F`i36_$RM`o8)*+t>+j3r_vDY~$-pO>IO zTzl5cZVWa80Q&r5?%EX)7z$=$wpN`H#KZFt;13yCg`SIh=kS8=Z)OBQsnq5lvh^cypy*gS1$g&^wO_YWAWKNCG@numij%5_{Zby zL4Nlt{z$xl`&sf=FKEJ%oZ3EzXhbVq3`0#Av+N&%d5wL@XgBmg8CqCbUM-e4RqNK* ztKV7yen}8zN*imdTdON;rD|bi6Nec#x7c$y+GC%KqojbctN$r65F1Wp!RnZDV8LtE zYSj~MEjyN@u)&wZb3oKZCz3w=1x{M1c^J7f4jfs$rz(pV9O64AB=A6loAGe0@;6ch z(Gy||cm0Hn!Eg0m&5G(ysOsTkALF@pz~5u};woq0=0(xNA{_OF|!vVZRsr-nZCjJh?5F z(Cm%kE-Q$2w$HH~!84e2I=vp)R=_9|gnhhZn5xUZ=M+T-KUN#-AWgMZftNRIg`|jR z@7C^Dn`jcUTI#zRYtC5roA9-JlJS({J&*fS+m&Ly^x6tq1Ba(L@bXwgBl)UFN{R(% z5>3#1stfFi;Zx8akOL7v8->rI=I|YaQPcjOC=(t!t<=pBkQv)sGGIt@t1@cGJgOeB zGsUv$!Lw&ux25RT|$c&R?*wP20@QKR-jTiw;OSY+NW70Vz)(nph% z>E9gRvp>Pib5xi6GKIKBcsXU>KWT-@lh>qfni>iauD&w~JJ0-+5x9$=4qs;Cd7Bjm z$}d^8z?=iS$))u^I0H-9nA1=VBCJ7t0Z3a^N^Vi!bh&hh%Ky~;mUmkB>xlB0oVZ!M ze|-?z*UzlQ#m&^xZ-8^Ud3+DGEU8~G@b2^|3yP3DLanK5G`dG1-gPeTOA2_F@2Y#g z+VdYi?Fq4#g^8d)M}h?%u#YBOIoVBqIWOUUVgR&B`DjO4h=46+K>|MND98bKf=K1eqv^5F5Z*lCzev(aT`em!;nE&l-MM-L8n{R4G>9d;-Eq2W_D^sMBo0)b*(nyPiRtcmGG$wCLTHz10f zwLwgerVxJ}Ri=&be|=cuD|8+6Qln^4|HNorpUY!b9*Ya_q?Ue@>hsT4n&86lxkx4N@mX;i_fXtxG&3O}6sEuYoPonLCWYeI_EY5l#! zhV_!HJYMVpxt5X!zBd{TNA1qAOD?3%pV|lP+N%E;b=gmRl?GMmk``6Yc;+5SPn}>Tp#G zN#+<2Vv&T|^?gvO@9tL{rnX+zL_JDEPV@w(&5o`RHH&pFM09#_0oy8>X2CQP4Mzlr z2Q+#k&;EiphD0yCCSkjg&7xF`dE&U8xHy_P4h`HUz5`I?7>Tw^C@ z4<;(v(&IB^+pn18UkJFknlzFep3TGE?P2if?hsv6K!S+BR~K#3YLTr`w;8Y3s%=D4 zLP6;WKpLA%j0m7H72_qKAN(Al)A(iKoIE%p25+;t*{@z7s)ziwf~8-g>!z^Z`c7{R zOm5<4=5&_(mV?SDG6sh=qr?@f`v9@pH%be)1FzYA0F~gDdYj$13gs5a*Dvrd~Nv zm!V}XqUeXy#JST+zwclLo(~7A^&-_t$lu^>0^Ua!0VHpg91$m2K9`nVmNV>k+8|D~ zX?$YwI$rkLe1l3<=@mF`PIxOg8%^ykqy;Oa2exD$^!(Nm<>yXgnKFy(!lX&)tgq>J!H;{P*SseU- zDMWZS9{BM*($DoXUQ9nvr+Ru1@g`kEXVT2{ibv6^yk4uD>Q)u3E0<`d*3C|k36#fb8Y97OeGXr=8?1pCVr<%!AHyt(exINEYM9ZdZrNgQzTc?S zTM*5zM@I)^s+GrZN=7b14e$_*zhovjb-KsXarEdQHSao8)r?1`UEA3_`SIfBf0$nS zZGc0*qpmCWtNsDpyBmJ%@Qu`H(=viO?*zK|ai0I;2t@ip7eh+izE`X7g8Cj+c&9;! zeJt^s$VmY06p{dJXYwsr8sRN+UnkxkRhrF*hYc)35OduGhYiRaW>|YLIk#V_OHy5J zBJGAcb07J4Nz3>g1#F!L-;u+RN`c;E_Uqm1er49D52}?$>t40eY99gb$L@?|`-k`2 z;DZV+Ah6kXe|VN`DWp3(Y^r2ds*7P{r>Pvb4j~a;{Q#`4H_l*OUz2oGK-lB(KP_cJzSeXD7UP3ZtTybRrd*OxkKDe*p82nq+#9c)jIy zZ5O&e8wv0@W~n3)_W=j?>W8ov^$%Q*{u3{`a5bn5A!n#2jWyB;DhOhj+(eb`x&z~# z!G=X9k8FT-5(EH#O_UwJnm}S5H%X`@oMDgvZMhUu%2=eVZy1xSyp6_;k}Q)#^5%y^VEmMbku(<17*8KB zi&yp*9G{2;t8Sj~(<@8#Gdr4n={gZzN;TkQ-7 zl~!%X&)%Dy`9D!wFRqu@i<=84%Ck*pj3K`ma>OEq#tG#UgePQoXaQ8lVgUG1)hOu>2O|L}QBUzy zgaBs)9~VUvy#BZd#xS>gAXmwdc?^rj9_CUQg2~Dd-SGvYv<@~l^9h3 zpxM%RLcZUydYr)zVf7%3Y&7gV19+i52@>{+1_xB^2*!nT7e}(mkZ{)UL0(xMts)-e3+CsH@4Pu z43=qOt=h*E&oiw~jBgo3R?yG5YLK&T=V`C=j57dwlv6l8vcDRQ7{!;xN)D!^4rnH5 zSz_HHvDBUw?v7-s3ONJ?AMiMDA&O-u+^;gQV$v`prcg!xUYY|4gyTz$L z*?}`6)Fprq1tBSlY=&{)-HgT(UTY{qz##@@5^bXt%3JrGvjA33!dID5`W2Dv5C@M1l;n!DV0kp|tHdVw_Trs2rSoD=je5O-CIceU8Yr3$ z4mqJPjQXf?xKmYErJC9fEcC%F89NcY%dR`2@cFVg+2f0XuLU_B&we>aCRFQs_VVRR zz0C-EYZ4rnWC6JOik`_P?nPaa@kN#OSSUnMzhDM>jx!E+sfAp!`J5b5jOC9f{HHW1*t4mHLNKx@>HLCz}0)65t#U4b=gZOy<71S3MM z8(CQ%Y@aL3TF!R0Msi<@P)I(9_0RBVNQ@MOV-1=k0_TVM=Vn~t1!nGKRn3_0C1ol%Z zm?NAPX`cz%UG=}|udEk~>NMG0Uo95((AcUr_W1*m&BJ>ShRKN7s@hs8&_pRfZ(bH? z{})armbw`#31Zw~wO(jLG2t;29J2-nmZO1g3ozBxf>77U;0%RZzJK-A6?HJZbR-yk z;X*^JD&*;OoLroZSotyZtbW4t6pm#Q_ItsoA5xG&ggJ;aLLSe3VqQ_R%!B|tDkwm&0h*#|BcM@D9aZNQ^ZlgvG~`HIp$5~}9=v?@gR^Du{UB|* zCT+JUVu(#Pn29vMuK5n|kUQX0GI*W5 z3Y&#c^;%4V#zG~l8e_{Zr->LIZ)Nvj8Vc3lslA8cP$hOT9sdqz7M=2}1|?zzxCLwM zZ`xvP8a+?%1~A$Mb7u!q?w2bV~E;# z=`b=YZeVRCcw{;ZvrpC5I6eW8=Vc#^guUlITV>0P#}^WJ;Jy||qG0+%S| z$RsEM`>zTtH{Y17IVu$+KaPm5z=BzI(!&mbizQjRJ*Ke&-YcfAYE&W2hqgmLFsEc6 zMy!5Tm;G?;iMxs2QD&`QrO^{*M`x&R)d*o7fhtThh4>PPOq33r#6KR?^+czmML_cv+L%^>K4-}_d;~F1i{bk zPtV-Exz>c6%PJiCKGswM+%_!*u5`WTTcMItH^B#)*Y$@{SYOZ9?;8JK3jG>J1mZlEO z3^8DhuoR|z;oSxBB3A4YG2s;^P<;--3%S(MD$y>C$YV`nd6yjFHXiUaEnWSSTf(qC( zkM?zQB%nc7-(m!W$T`~@s0vU;wlT5FQx3UVl4>&?@I4q>tQ~G)T4U1)w!(|ik}*>> z4r;PYXENG^jxZTeptu0eBJ`cI3dx(I^<54tg=7~Ji0AQ+NL?ltVKYwLsqC6;fR}ne z_H$fUGc2o*Os7Zl(^^u%`n07!ZK#jH=i}KGkeE1JlR&i|A?atVhZ< z$5w|@Dv-vaA6|mWi4nE+=+oqb`vsDAS%qPz)bLKjkD{KNA?mb{{){K8cQF~AB`?m7 z1f2I1)rALm-SvzK<3Xj_K00pPukNbL|4$v)8tM<|v!=7-2*;qZNZ{Q zdgDQO8*$5?p9ck@E$-@Qv7#^fK2{H@X}IiF>AF1}g=fN_W7zn#p@aGf(7(ZLnNw5MK%IGx+pER#~t8k`<-wE5KtpmJjL~A zRh-*3fQvnd0cw|xM0X_wLBkR8DM!e8DAjQk(ApoHiA~Rm!7dnhLnYQ2;XteVSh7Sm zpy_ob37D3lM+Yi(CN~$pp_x1Coe!Ub+>W>@5-SL62~XHSXYZ(;)O?>@&|s`e-g(jb znBfMjJvCcb=s;Q}iGg3Q(2hrHEB|B^cF$zHJ_|08o=`|3?UE6}fU_u*6A1pjYVB|& z*G+dIUCD`F^mUsbWJjANHkeA$-f*F~9GJ?mkCC?3S)`QI;$?q#h#fSPgAsG_n6!|H zgU94NKfDOe*s9?;Xm%*KIBl8)n@X}9 zjVbBUz?tH*4 z9KNZ;4Tv$eGN-b?k20w0AJO`-HEO92TayMlPs7* zGPD<{qU8F+g{zx|XY0_}RxZ=OR{-}Zj{7WxUFjZ84l8nl$9gZ?%k;tFNWZRU@TIQG z6{3=Fak%PTUN#oPB2Vf#P`EM+`0QA_`5lo9WPM=PRoG4_7A0{he3EE90@_TK*eo`< z3w8{%JOHPJss++qTE(hYoC%oIi2kGOLGJC>|2&AZ}8BdK2olsT-LHrY`Xm+>N7q2 z9jJqCJro>CmxIpJk-Cz67bGyVl&LoQpz_pRCOI?-Pfi_-l8;TTyApyTTbM52^242_ zQWj&LrLOg^j8$N(no&lu)43Bo;d<@HRE@A&!BzW2?Hy0u4=l5bU15|AV^#LBu94`L zjU|qBZ8BfPIUFQ&HJ|MM(UMHhs=|~L#rWxw8!RO(FLT3T>SywLsvvWnziYv)6j&_~P6x0U2~lECDiTYTRGo`quzG zT6Dn6)agjOwThMkaV?yFHk}GbYW%XMg(w^fl5|-0LvU=g<^hpajb%hE%is_VlCE=B zVK@Z&W5OI&6Ap}7=#hf2P#ZTb&cs|8F*{3{oVC4p)$?}i0kDeZrcVR+(snmP=MgrT z2W1@x#kpkOT`iW^?##)thigeJ=i?!VGG3drYU=l?)Z!Z-EiC?a7%S;Hk z5|yAeg=*>;>H(*4E|M71Jf|UUY!Zb=C)pFRJ9QXpo-dZn2MevW8!8`(%@Nv0@(s&P z%zlLz5L{oi-D)}+Z_noK*o6@_ab3%t}%8J~$kX*#{t>L3bkA5aj4Ri;2v2nda zEa?)al=-$2zDK>w%zGKcvw+x^%(hD*#DfTvacc57jQx%N0c`vG5Hw9S=W^cDrCdQU zWd4Z*;@`X`*lEYjirRh->;5;FzX^NT&vLDP_Pw9g_4?UaHIYncx*NV5Cg4!H{%rT8 z^s`sxd`r#2GY9(+6#HmJ)kx!PB1eN)=B*3^0EPo{Z~^!8yyixF z!F=|9oV=cPM&8g_&n>ywFiHeFIalN)?Nni!3ak6B5rjq*ugnfWpreua%6c&02)=l1M zN&%?}a`vc>FjXcu@GIM=@;#rI#863y1?qH`LN>0=T^Rc`wYc#2Q|aFUyb(K%ot5%p zYQZcSp>gf#1380C=&QLz6)_7v5!d`UW4yzA3L2OIyXwwUy0V;R;z;SX=s?YRD;i_vo-z zZ+$8CAElZgjUNFeM7AFhc$4*rkel2GQ(>DNA7XDdY?GbU4KSM^oQ|0|XJR!S%!AeR z`V1Ere*MDI?*g2hgQLU!M?eAuke{DP6&4PThW*PubtgvL%@@zcfNn4fyHC^>c>r$8 z@cwK#n3@D3;#AQSG*UR}c~Q~v1uE=^@3)Kz+E`VZjoNO4Rn%Trf<%>AU|3uz;cM_ooe;S$2S-z)y^q6W}hg7)Z%CU&cf2q0|tyhNFt;6z5VJBr+)2c;+Ub& z1A<`zzzO-A@FozcUD)HPr>9)31l1GeFl}1Y=czeO)wT-jpf&VF8ym#JNyueYvdC+5 zNZ?B)m|PBhAB_k0NzcML2*_x!fwJzvmS)|<2~8BJaL`c$HDYe|F!adbGhnw1aUjv| zyG&EPA8Rt6>%61(!)Ka|W~AgmU~9DiI#7xL6&^$o!Ho?}nAqVMJPRo8eV{jEUjS5L zGI$ZQQep_)?s20E`r;47qWg)_NZmFuB%|2*z%pAt zBLfdlai&eunM{Y6#azHB6p1Z_{j(_-bmN628hnEULH>+jGN?RjDNtO3?m)t7^(^@e z9Uq@hn*?)RGq9Tql1~9U@FtMbf^q5Q$J^VrkLW9MNiC%Q!P4&rwNU-ArN*)Kuv)Eu zHT8!z06GHlS?|<>9{3eC%ICpL-os)b3y>J4xoMxwdjgZAXBc5vXAddw=f>2Yna5)K zB9;C3+{Q&gLrq@sE{MOJ$;*MVc7hs9c0^t^J>g-L%8kuBhRr*@bAC2g$Z zL?X5Nu$9EnKx>7Fy>t?~59WcQ9zNBcn?=zLFZ;&>%${<}dq&{|yaaSswV}>!)*I>T ziW2HnGVtZp{e8ROrkgPlS{IWkZEbE4^kGaaRxj4q%D07U`fOq8p938Cd$m^ku<@1D z*Y%8}Cvp?Ap=s6K1~hlRy0gPJ%=GRsOOUAnCz-`r1~(5i(^;y*Ba+$Pv-fIht8V2i z+A`D(jP0-(VJ1Ur$-K|ivbmuLy~%i_5ArNfreTE`RH-<(psh~!i^54#vVQm4BHZ*G z)V=fZLi&FO_s;#p`=#Py>euM44Id=fBS8gRC>6nqL16sIAAg&dxZfC?fmDwK*ZWGb zR4i|8ZLO`ZuWW64)4nMcV@#0csmTh7bRc)#$`voQxR_5Z{a)anQF3tYptAq9)Za|= zpO3Q#kMp}vu409}2oSgAP27~;BKMp{Yy zSdvolhGdNu*v^6|?D!7tV)k2kzmWI8nfKq$(Hp!ucOi-(ReX ziwl1uwe-)c_43R3`XS)U+0+LMFmkcSu5VV19F4C=5=U&lO&+u6;PFtP1BliEt0ThnW^oL(m@V*ogcHC)yA$-L4cc8lJkc+~D(TTqt*Ak6^hYB)0DFqXk)aql&Ogr&$}kY6OLxUBGK{*#DVCugh#=U9boX3*PhiV zG@IZ$p1H6F;H@#BMi3(!c0%-s&?+#iLZQ`C@v$|*zYZztoYVRWO2Pd&RKFU*jA|#W zx;V6V&?}#mPCLO`X>DtDtGCu&TRlA~mrpi(-L18?jkV16=hn;`r4|-`ZTepToi7qn zA#;GA`mbC*EqwYKLM@kjVJf3mDNkIY;GowPRueQqWs2&b0{%bZaxrZI{YKRQdp2V* zIh1-q(K??pKNmIp3WBa%x?_Cy_b#OWMKuUtKCah3Y#X5eR99;)-8aAr6??+NqfUL$ z)5C7~wjv^u{4Gzbdsk02_~Q#Y%PVjNW7KW^=WcD$)4u3{ofF+L#!Wm8S ztR@L;3SGhCBZ7P)R@VovHh_aH_2TiI07{$p-Wd#k=3p=ojH7WNEd}U})zO^Ce?twi z!_2f2o?p~@ki-c=6^|Yr9PBDdkpBDN!NEbZ3BTmIN-jU>r6!D}3#n%Y!E`(NX0kg0 z)sI}D(UxHJ+-7tM* z8X$@ZFqDni@n2@aXkgUh0~(E;eu(Z+6b*;RRyZP>3(D+fI$qo_AOnX$=2rK%T{X7L#qH8oTu;MUmA2;3YPnb{&&&>9 z-VzDMV){Qyr~f68|C_Bgl7}{{DDVDA>K~@y5ljY_MY3n=h&wA=hh$*vYm8{c7CQFF z!+Rvg^IF+REWiGgZ=q)dNOM-!akg=r-PFC< z*Yu16XRhmHczs_h$PsPm*|J~G-G(#Tx4gY;`*U19fa-em*+0AV2f&Wds3PeWxDAlB+y(4N*LVUsug*7p}|n%6(m}eFSuBD?YaZUAYM<{J@0ki zsT?dv>oVxJ(eas>#5~(9rz3*w9y9)R{mUu1{hp26UkyN(wjAvYScvHCZ*cld@xQa( zqqaR~qD=MrgqeXa)YDRVW4WmQuavoCc^hJFZ7c!18CSa@y5&1jLE1g+X|J#8-Cz>o zbR{PtvOz)uj}yQgA{XHY!xuf|gs@A{LTZwU2PQ^1P`hr3@`X$Q2%PnYC*SUY69*ev zK|Skh+;m+h(r0v+*-R%wRLqkA@&ol0tqK!rv0L4%)nU?%)y{b`857H0?PtNM%gX7W5dW;t|Ay4kA5wkxLzR69 z5ZOPxkCFWM8;8e7+0-{aFNfZg*I-vd)*Lig;i*^I-Bl9m?ja`1IFvf-NUYUsty*Qj z-K_m|)qi~ViMqypxA%nJJ*?DP^k=nxUoBRA-y58%7BE9v%*hDZ^3;6-iZcWTUAt6) z(APn|!!r+4Vuju6=6l?X*{dohtpzlMXC>p0WJ0dufY;f>S-$m@S_Ri z1sD)4utk42jGp}K8R%$~$sqjB1mL8o z+p^+k%pgC*cnou`}?%uI< z9)3(7Q8T_{sYB$L%3^O|l_s#_uHl7M#bHfvT! zR;FIg1_36s$Pgg1c{|qh1Qb7k!eJPhC5_uDW1CnTI3ra`On^q^bMjvHccf_yP%=Oy z67Y(Xz9!+$&KWSb-c$==Xa5+Y9N)xlfCq1qu?47B`BTLF*5M#?p3y-c;t=`RDA2J% zr}962-BWp17K;l%w6OFqgPwc;a7P_OM$i4{EGG~9P2P8ZXCI$N7vLBj%K-W!meQ4S zusiFA4{zBy>6Ua%i}_Ug4}(vJI%x4$nfl$DVU-_|7aJ;|KB(*y@2)!C#<{#NDd1VY z8(e|_h?h=^q_Kc0^yd=GNuf@lJ+<`Il3&iVDNo6BK|OD)_t~6S`1&YMYu@1I@jdz$ zHRfL8TlJnj)g1FPhr{doLCZ{yOt64vWQ*6v^Wx?ke#NGwQlVJR#6-)D58x!d%{GdpTaU5d|Ax8h1_- z{MasRKs@O&C#Ia@6x93@4GWBpAh!0}sk}WynSn$P08_#fz;k0WAoR_6|Cq}2{=V&J znhz@F@~Y}={A+EU|619UXKN*xb@Lgm(LSQi+KY(ZB?cGyT04YQfwY~26g;& zp7|#ufXz7_z69;<``5QtzrHGqpGl>b{#7_j=ssiIa{k1kd!5q`Dv$w3d}!-FT$(zd zu6*Ko?nB}w-8nossMcG4hDMSIQTHqL`^OOROSDF>{Et++daF{aHxaPll{#to4?rlO zhd>k!WU7a|5L#|MBkEN6*{tpyH)^d%DnC)?yi%LY2Z!&gzdlY}4%rW1`xv2qf-G51 zOCq|_kPgMu-ZK7yfR>@u%Ad0Z(TL;_8Y-7Y=}HsyYN^Srdy!QYEA#_VDZ7`%oD_3f z(ksnw;T>q!Ip}bN?`(jvlcKTpQ0+#6g#~u8LVc&3Dc(}`EP&+f6(!HqdV7>m0#l3C z?YM;!WJ1kr`Z3!AQ?nD|FA=7$mXL!|b@i~y!x4}gp7M_22^_tx5;oPD;$=qBriggS zvMuf?G2DS0hnU1QZ(P5dXu(J2RoCl#^1YWWdaqK`0XNqKvCi6#ay4IgFYJdjEnN}fkUDnm6 zNKMZsIMC#l;6O1P5)Dx@C+3WlkYy!yV4%3}54@i;^e(8iO`86HSepq zogib>Ks>LNECNVcKq{r)s12|qS7Jarf7zBAw{gIj!V2{hIy7tUI4Wsdfis^szFv>gq+te&1}h}*t8ye&Z z3D%Z|3Z%6xL{Ec@o-E-=xz28p>P%DqO3pa}=bbuciKA3S>U_sWC*w zB^8!|VcC#^mV+V3m)k4Q zyZ%9Sw|0D>ZgdzAhug5*oIE8(`Eln#rIB4J=5$(qdDN&KR2q-`_p6WmY}n0th~t5H zE^t{qH044zIbYo!kE>1mHk;`V&oa4uHlyY&{`aCcIGcn6^*1Nz2QTr(i>E=qhkp%0 zD(yT4;o9Rn**AR%KbL~;Tt8^!itbxXAEna&Iyi|c@#FA7?J3RX7gNs{jBlbm&61eh z9uM1U9u3bi7Fn&QWBsFNdEM$~+B~cC$yxGM!n;fu&8+V&#HH9>ij<0yo2RYle6t=} zu=Ebiqm@4_-+p*9!W$i(!`^q*g9JuX!V9wh0`BEEaKO3Z3ij&~-deiX^dA|*pv5ao zF78%rUM1YFre}~0Mf&89#|sO8Wa;04Q2qPW!-Ji}{e6R)u)hG_Ks&>Je+F>EeRhn3 zB;=qo13rNri=3>~_xyN97HYjs`v^{ftG-Ge4BpIxVTw^TS>*QzsKVmnUON59VW7nS zt#;UG)av)^>C{^b;wKdjM-4Sq>e-7SD7EV`Kk<4&t*4L^`o!_ga)^s(0iUCk>lqiY zWgoKUSbS7?^}1F(0It=N>=F(ljKEk3!?3dGKRM6hdCf#fr53!cr9Xk@j|wg(kPF(i-5*T- z?JsEahw}#Zo!Ao&Hh!3J?vH&sf-0!E9G&iHDnvpP%O8@1N73noytbnr zswT;H>czx9CjLP+D4)eTMuaJL2&7byBB|20PRWEOJ;iKL`KdCYU}#^077@M44o29@ zdz>UoxKcTR|9~r=ov-?AN{5{T?6;>zjrpJ{bYX%2_qGwXg`yc6%F_q-DnF}Lx=f>Y9=`Oj*8t}sn%Z?} zfSs~a(MiiLcwkK*a8&7XPH+qifV=G=Ea8Z(BFSGpNl?+Iv&LJwg@X>1N<`ktsyELG z(j5&kXa`xax|5zbR3(c|G}}Y$<L>fB#W_e5)yMgVmGmbUY}}qb zc?HHBsbf#XeaYD~L3w|H>}Qml2UUWixkQW;uUR!Q{igvu3Z>hD zdPyO6(f=I!quJX1O6pf?g`N624YlZEcp-p9029~^MgTq{o{~T>h~P!=b_kH z2N@&v2d#K|cGOZ`Uww(xq7q6!c4J`h0f*CL5UD|SynWA}oka9IyY;LTO69^z$uE|+ zi{StmNk72teapxCr5f5X11r?jNh?mRd z)%D`~%G%1N`m0wc#RF#L!*9hLrb^3eYa6S@jScnv+UnLV;XW<=j)nA}0v$eprycGA zjGCYN$GUsX(`i5tfU^V(+qZG+Oc*u$p*ffj=ulMxh|jf^W#7u4w+@6m8HXofAA*AP zULmrO1!q1UdIraD<#ru78mlsn%XQSek zr-R~^KSfNuW)c&xoLygATUn3oW${f96Ml*ScZ&2VYG6 zrBu>rsb6P}L9tD?ueea%8=Rr*E=O)!21qt(J`FV6FoptnCdutt0NcqH`&j+Vewcq0>qUKI|4x1dtxd6kN|lsuicVtzVOCBSo-sby9C~e=#`L7 z{YlO4gijy0ss~4hjY{Lu6ZTtpT-)=jAJ&?!CWR4>Px>0eT>hr$dwBb}f#wp`oLBx% zrMXkttv>Or0+~scqn6l_g*0VE)#Z9b;)mL!5M_Rhz8kZH&pnV6Mo10F9`3d?=a2if zu`ZB=H-c)f2iVf{y}CS9afIF-O~gk@3_+*m9Yqc=aX&;dz026SE6W82Cw~=<)$o4{Id=7J^K19QAy? zxQR~~nWs(FP@qP4P-8%+d@V2xM!N88hRWFJvIFo}!l*rC-_xsD8VKEj`QBmWC*kn1 z3zy;Y!8wQwHV-R}daZuHX=C-n3r}9)aOt)|PS`)>5hhHcIOulof~9N{0V^8vS)YS$ z0n87eYqxL@Mgq>Yd^$R(;5-;7RxMV+ma6}kw14Z{dc zM!bpHv5t!3xouV_YV1P)puDj#2*~bL! zlG_=aRfEB>d(uWv+cvP{s#$m`T)QflIrezS1E3Ko%YtNfBM>pwn}xAOXs~|mtBw2R zV)}2S)Bg*Q7wc;KNG)k+a0t+p2v0}-z{qT*aR6gMcpgV^%K$cA;ozXKyX!xAuzhf_ z-E3yOS(tTswx=MX=)egF(5eW*?+pi@fkefiJHQGyfG5VF8%Eakdlsr3ASfq66geh9 zHGUeFp&UND5}V<6nm7lgQJjGmIN@dOmSHI&mVyu#AE# zAOnwxZ&yxR;n&eKKZxalHa^*z5UzsRN?*w3SD?godMedsjCaoZ;mJ54JZU*6YxTXu z#z6&iP0@RURZ#w(pib+;v)I8{I1z-Kh! zD*BoN=J(b#FpJQ-89t!)KQ}1h*7*YeKsx>Jg5JN@Y}bxHSpTxxF07bEcoetKmZlM5 zqWBYb{o2v3xTR(2)8Sh;i_ba9$(%`Z%SFcxeaTt z2|RRXrgTN71ek$q%UhXT-aOpij`RK$^M2`eq8Gt-{@#UcyUc5{J6F< zduASs3x9QC>3_v%%Hapq#(w3f`D3Xr9NC8|VL!OA;sjeShO+60;9*74bby*hNi}k! z#`hIJ)NtfEn7?*ds5zu1LKE~*T_tX!j|A&C#$Y2=;yc`hDfW|7)1ARoYnhP)^m-rZ zJq7Xjk-v||N{fSMrDS6w@2vb!V%TD8@iS)&OaE(dyhp1yqAs)^9aX=U`rK#W$>VJK z)oKp;jWn6ti(vt8Kj?lqoQ(LFAfC6LI$Sy?g(oS{hFnIEMf`I$$5hjZp2;N7av6mY z)p~Zc(vlG!$qkWq$FB{N_0R-GlAqe~OIt;xTTmCAwLC(~!Sx2eH;tP8`37AcxAJbF z0Q5`5HvKJ1Q!cJ=E%PN-Uste$Iah>~fAolO<2}2nq(cGkRd91ZXBQ6sOl6I^$WBK) z4NY-A%_6>s1EG@*EC{0_{ceawL6g=|$FRD6sIiJBqA>-nkrLb|{jNUvJYfrcIvff! zJh68tnGe?Ux-8_%giAQVx5{H_L1@7)@0 zPqs6jUnUyaOCWh(`%F9=q4v8l9u{ECSLG&!h8PV;Jmo%$W9H6lLTVG-eFB43T^J57 zCVZh`N}+4k4v7*!G5Y zJ@Kcw-vLRFcCusNc)mjbL_DG3i5Hy8P5Xd&hH^&=FerL%=rxuB>e(^DX{oX9$XIw% z`0IV}?9#vAeDHoxD*e9!ynZr#YcITSr2c=}F3mP^wVC7*t-wL-|Npo5@4=1jd43oM zk~2HAXLo0ITWifmv(ldF$qc}`00#iy?CH^|OmtCHT&RZAg~Y%%Mv7v|1^fPeu=`oGN%rjTPYBoQ7r0?=ohL`T%kkVF;%(|oG;mt; zQ`Llc%S3V<9SqUt^y>FL7$U8omzuQM$#LPi@mZ zdH1wMkh<5Hmn_ZPNNG~jGru0%6P)88=n`pSaph6tiJ!va(QEQ zi`2f!i1ZJ$wG5KpdNS(Sr!WG;q>J3swPJC~<4#lja1wM!>K>3x`NP$X)$-cs-HGsS z|Cbl<{R`-PbMUAkFfd=r{KE_QD~SX%^M*IZFXevM8=2^KwHn$RA8i&M2Ng|l8Pm0n zfr4F?Y%h##qR7SbvFVt4!bH+b1~f(A=az?w73!A?!95Sdy#geVj*NLb-Uo(77VrIw#@VX+N%gRm%Y0`s=4?ezT?Z?l{4dgR+1cPux?^(E zVD}T7KomOku6G6R&=078<8?w}gkY55fRsH3&$t`*Ll!A;W5drKj{?%z7{N?(HhMe9 zw}pL0s*Ogy;g{A+n||);3%LI+@A$`qmxJN!fyZgHwz65XahY=oW!e$%|2+=RVqbxA zEOs&ueUfM8pa@~ z>OyoD;<-Donv(3*l-+w-x@}6_Yo0CK``;s9!zY!-quODm@#1Tl#Rc;tcOV`h<_TX~ zu}fV1aryvphXj1|Oh_+rHZgJ_9SeG5i~?EUFqkkH0!Qi`8Y=r7Bsi%&RUe9GQ&f>`b{i}=j{tvjW_v@8CzlKN1*E9c}CF>fkPZ@n_w*ou8$6k{?l%v|@iY302 z_KENp#UJi?*4>i5D~~FTR*eFDa>gH!bA0Pp_V<^C^x=eR@b=^Ci&HcxLMl zDp3>Eo*dR2Re!%)`J~!B^}KlIj7w^tNnY^>r|^V9O>t_a_CpLg4^~OgjjWp=37Hhx zjx!JLl3pk1T!wbN_4qzYut}`N;ka^Qq7Y{yE{4kWoIrf?vXh)ug$5<~T!J-Hc2MZd z0LO}VJyQ)lDPq~r*#~njb1bw#6`6OxOr*rK`hS$U_opz>_4p8$)-Pv1F~_vXinuoE zoqqzW3_&A}QpNe==U8LuUr(5=LjRfZY?bUkEGr|V(F zQ;_sbXy2Ktf_r5)%4nlYP5MjPwn#f8t%_hw&`a<3?D@b`cgI_D^VqA-c0PJf&NELZ zgPsANE!}mB+C&QrSBrm|p(ERSl^0Dv^FOuWiTp@|=bn%aMkrvJ5!vGLAc3*i!*X%k z7{RzR?<*=hz2b+BcDqc5E=r}h*Nf}LL=@s?d24esNzADU#QCaNC~hV$X`8F7tK~VY zu(!s7er33D?_a|6oqVI@eE;TGVxCl=@&WOdU&B`S7U370pHZbgB``#M_gUibcHeZ* z_|O!Rrl(cdH&GFK>Ny2l?%voDX|K{G@{8gd1*$9Ko2@{ra40oVyTPE`9rpC}>wAxO z#Uh^~1V?b~^5XI@`rpX{5iN$gw7O~~Y1E1d5n=FPvL&GM=T)eJrTGH8#FKPBc>%ql zRz-XTOyJSl2+f^XKT*eC-EcR_kM7xnlux>6EApMN0dm(1kCYs()&r6@0|wpUO9W{% z_y*EP3wYPWc0@`QF&EY~MWMs#SwMF#H8kh~NYs9}H@^AxC*F5v|AU}(2(5F=CuZTa zuoHIt4nm;9&qEO77#VfPFY-qphc`4XI|?%D!M6V!AfK{`y5pDNyIq?u(*Bi z_>WqRYE?ek9bVx)fsgo$j`@9Cf0aK-f0dH`wTsGh#BA(_@9eYKw?A>6m%1Cp^rs*} z_Pe4wrLY^w6Bm|4Mr1aNq0?>noxvsNtxci)hXXR4b|(S}1j~zjk$OZxK>282r`*EAHJS9mK0;h!Z5N=N7}0-P#SoeFVBP75+(0yF{7%y=9+eTsx10sH3*QY2>P z40<9jVObm6p~nxN5~7;<2)AmMqTQlo6UTjvcHK3Fe%7oxF*Y&y0&Jaa6j4MP=mBrt?8f`$~9rys`AK_=ZH zPKqDFzgc6it5_!lf6N|DSO;MNh>ru`4!be4%emIlOcuJ#VcvurNGb9$uUs@ujoj%a zUs2~9_XgNg*uRR*Bzy{Ag+Vlt*hSLN2o6S|Ym5`976-@D0m9A;uY~-t+!(UUI7hx% zSjdzgc5#hHPCq#97yVz10f$8V$j_kyE3cX?#I;6;Xhx4qI*4I5sd=!LEN>NNm=F4> zAtzNJxP=1CCp^LwIVlko?6wx~7m}(Vm#J#YfT;Zih4&dI7#gW}I!U;5N}L}c*&W3b zu1rA`5+tASka1+B9~-(;n$vs+VbyBJ8}Cx~GSs2&NVz&0Nda9q&_z{dbO z_%wCWO6Q2yWma7ROCfv*U=#i z{ALS2Xtrv*P2UDu+?^3d_xgCOg;tp~prT34My7Tq2Ac9l3EMBc)LV+ZoMC^$%z2;K zjrUSOB~oUVmfmI-{|wwYf02YOSyJdS_^8sXem!#$kK>W|pXvw53*n)fWO7;|V%lLy`zxJf$9m-a?;hd+* z!v6q%_6Mv?um61aJKtCaAvWo{S#$}*5IVkzx`ELAD8Smxa*$un9 zQD@e`FD?9u%;LWc>u=#3U(Ni`&VELe`>FO41(p?U{~e8PI3qN zz2#H?L?OK4&tI!HkUxB%{I5CizCb|>x$bZRXGpT`V&VK zeC|0MxP{Wn=Jw{s_G)Q$ZEK^vT3X+%ezaQL!bwpmuawK{#m&{N^)2{Mxma4O7T{eT zCk+Nf%y>^zEj?S+l?in@?$2-)VxKdX*z@+rg!8dhtyYce8DDcio~GO+P{z ze?lGzDDPi`81{y)%+Oh-bz9Yb&|#~V%sUFWb~w*b(8D$&2*CwwN5%1ezHLB)!&5EZ zcSeDook=FMbnnkCF8&|Uzjd#=yN}dfPb-Ie`_;xTWxn?F#-T-C!A-ae)1}R!-ufl2 zb&wK$qcUytz5FDfd}OhNEM|%q&sBLc4_mdv<0^4kg2>ULKahUj^AdS-0&0Joyj4J? zCUqN;V4`SR^-qWy>C{I_5ew#&^o`9;l=+lQphoB??v9Vqp-f*^pYK+Wh_{lo%-TE9 zH0=`C049?Hr5$N0OJm3=CZ2gNUXs;2(^9a0U6K1v;6s@0)kf&qVil!%Wt!jS>H8`eu?+oCp^^zR3EhauDb}WXJ;L>-zL}4zPilu0AW}Wt^K+5GZlM?W z@D%S`Po)oFDfI(pu8kO}2UZ(K%P=B}61`#JrrDmGNDQKhIjO(|dOM}?@<6d5Lpua; zvyZqePdEh_lh*ynG?g@G6=0D-Hm#KiNK}c{B;vCPkb6pSD1Q80(v@uMK;T=a1GDwvAVMj22 z9^!!6wM)l>(rcjjXbv7~t@Jlk1$PAK^*wTDTba&7Poe~*U2IX3#=A=gK)k^&E|@dK zT-d2jLpi~B{N^R>V>pUtvo-tA?BP>C|13iX2nT~`gt%O4f}jpUg9}Ch*+Z-NFvA@-RTUz1+!Ez z)?r9OJE^-_gfRq1CJ3Cc;)bLtaHfJBMU4C=O*KXxXju_f51F63;h1@S$W}B^S32by z!f3Y1wIg4h)9le;+YtlRaeq7O>K()CihXz78EByn*sI9+G|i`z=ONx-;X3#;%Ph#LpyEUxga{rwhhNwewF&!3y+~TVI~m4+)SoQQy6g ztZ045PJc}9pGifw+9U*-fWmLlRKbbu+%|HNiqmsMk4k2Rr~~(7-9L#kWom|FFDmS# znWV@p4%Xbf*)%l^+Avl;Tr7&pFUEn4 zy55yBT>MJ71?A)9#Ssxi{&0f0gY}OQJ%$enr4Y*%SBgcX8(TKY>~2Vk9T?*8S`D|9 zc+{xxR`-srN}?NH4gK7*Cn`s0>-awEt?woXmRIq_Va%g9Ww`%}9+UFmr-_Fy7qhgV zIhg&Ns!8LC%bzFls(DCzpZpEIGgrUvq6@RrZMo%nbCAR42X7!DR^lVYHNqcnv95@U zl=5cPPk&Pq&Nw>BodO@+ot=Gpo}%yf$-=#V6+!M1e*bHkFD&AJPjctcHKTK&k0_tA ztRRI&k}YhlZVBW*Bl*!aBRlm}pej5ARY8Oc)`2Fgpphplij8=hjRABBYK1oowSqEC zL#^;rQ7ckFATjdlTAT+E2{K0B;LvI?Mh9Bny_koj+^sCOqd$cZiNd`BU@v;u64rJp zsQpO%bKG3eb%nKCs@!#gH$1DPMU%@L~UyXNT2Wi}1azIk&(uTHHef)`Ij$PKI( zX15C)r@6w=_D1RfX1OqfkfWS#HX)!cd>{Mb2j3I@m)MOS+I1d@zYm>u|7fYA`>{WEnJ)o;jjMdlYLtjEq2c5^uk$FK3?sj`KO3ddFAniz}f zE!`&Q1cECRp#LaFZ6hvloJyDl6*NGco6vMpKal)I!2Axx?EQoon!hholmos<)!_P% z;+ncY7{&rGvW=rOZ1YcWA(IGU~$VO6&_`?>J1& z@$t{cY%sXRVe3cYpNEA2K<2ND;jo&&0lGu5w9AYLLx-*TTJj1MfF*xveZ_{&=PWU6Z>W_HR(yY_;hp zyF=@rj<{v<-TWlJ8x0pbyI!lE)8zLan8R453lJ`60uJ99pyLj?Wfs1^eDD9nked~_ zU^n+GpH#n``SZWW(v_OW{>k_f8r3B);^@>rnGD9gew%Mi@DsMp0jrnfSp*kHHwk+m zxVcdLzx_!r4}LrqC#u!kt*0<>d+b#pKRnN^0)KgY*sAUOpTb|C;)jo_cs{hBv}$`z zNn3f`sy6t^XZ}O~V%+PtVUKWJ@7}`y4k}IjY`^}b{kR6R{h^=j4=)(BBk#UFsyE>! zzPlbqiA);R{mP43dDxe?WnpW4&}z1yRF0ay{~0-UBsyDq7jH%nv#|59XF~QA!4jIy zXZ6OOJVp@{AB#g_8+Oj853|?($whBq)9fEVsU5cWY7O(M+Z$zJY&`8SE^sp8UpSQd zw{=~4>u0ktN|R)Y9XgL-zdSL2of7Z^y`;}B<)1>zzw{r^yOd@Z3)}fh;W5-t^WztT zlfvNCqd#*4|N9RS_cu1FX?sS-8fR8YkMeN=GQg05fa&1x!zm>5Q_kbsck7bcr>Ba# zVj|A3SU?m7I|*)t9)ccSS4PDUB6uUr0nQXP6Srn+zW10LQi#SeOQZ?54UAomn#V`g zhVR~vYUi=9$<7*f1;I?Bw@kyON__KB1VrpXG$f!fM%Ks`jM+j620hi4ekO?cnnTWY zC?=@l!;9rE$F!jJ4$#MyRpHkhF=fm})><6mq3q!i#GFG6C_qa@Lv3Xg*gn@KaX`j=1+tn0p}oO4=I|;)Kcj3IR8*kos_gX5@?ysKgHXJ(b2F=9%cNl;M9giUI9sd|A#u1bLuDOm$ zzZiL&l%D;*uR!!T3B&U-iFf!d$lF>+wQ_Upl04k;kEH4J*lop*e<-1*d^|jGF`2o0 zCDc9MX`H`l{f@ss)SHrK1)nryfuk`+tyr?vtz^ubrHTjKnH*>6Mx71FB6{1fQ194^ z!D%)?AW?F=wc>~5ub3_-^hl=IYH@3IW37x+Y>q`?rduJ=R}^RF%|H(%7CyxGf~}vO zAw?oE4h!rkGPn_!NHfu_xz{tG%%K4hYl?fb&U!ivuKO4UMcxs*-#454-)-$9z72B7 zk6@`$h$UC&mNDFj?>H#(vCw9g-}v>=b7J}QIL3a!A*cK<`olAL=j=lQGm1z)aGyc> zE?V|-b6BZIA;(#xY8Uq$7Lj2r369@*mWn$hEjC3HlmWWEQbux8JP4(e$jt#0Jyl8A zNe9SL$+i8aH~RznSzye{v^j;dmhPgXN41;fyFPGCz zNG%AGykJ{->_Nk3bw;IeyYw|Whxu3(q5Uf04t=d%yyB(T(-HptscNeHVe3dr-;{b{ zntqU|SE35WYr&Ju_=G2E(g=_>K{@qlrKR+)H+74-WA753t6Ou+UnxlIws*NN6V>mT zabRuZ`*$evB(S;BPxhyao=Q%C&gimEDV&89>Dd=}& ziPl2)#+vG0YHFfkRFrH_B(FLr4(W*!=K~(*s`nPqMe~Kq2v?rP(-nMiW+4&8cO&Jx z{qB^TzV`fw-fFc}dR$rCENqr`D}_?2S}JT;S62(WTg6Icd#${^zER#Ol?v+{w@oE4 zK9%B&07T6Tbc`{`(2jsjeeUt`(#Go?cKu!IWVZk_pnUqeBYGLUBB3_{J5ee7kprKXIy0d=R|JmZ;H z=O=CyF1b834VA#=qLjL4NR;zb^M8c$HXc!=x%3i4?XF!+svswB4l-W6+(c0-c6b;x ztO6|(th>4Ip*bBddn#x+LkPl*D;c;&C3K{>Od5?~f(7teL9tUe^z(2`$B=t3!=977 z87$Nz!UBd0J2w`PQImt%?RA-N6q{wU8mbvW-JHAeiG?mr=8Cbvhr*uuu`?A**33>IQam*3Hjzfh!Nvl z8Ej;N${QijaUV%f^!DRV-K9>PrSaD8pQo};M5*9GVG;Y>AqYL6Y9l`1Ea2jqxn3H6 zTvs4n@vy5vdfzG)*VZ=@8lvR7G?m?EDAi6FdRu# z1$JSQeHL+Jc(m1H_#(KDAB=Hz(DXW5NuvCsA20=oaM(cn=(70w!g(ws=o(Ut)e@$hqHige+fMUtmGc! zk6X`$yiPON3Q$i1t9-C?w^i~0K0~LxA3WKwKdS7n%;>m>7w`46Isg<}d?lj@9b=NoEt{9bn_@pX!0l!sW@#|wj z)1}n|o59$Pl4FCnyCv61a{}{)iM%0q^q%6C$Ph&un-G{TNZg}cs9)!39^8=PgY+A! z?Ge{GTrhTU8Jl8w&iESSI0~2iTC-)1rKI(spgA>GPuGh3!ZUs0&#acZ0FF^#)gRvQ z9bb$qQfJAhtyP~J1{);)0?i1qpKab9{W_j>=}W5%_x{a=Oy=jPf5a)e`Sr|S{HYi) ziN5ep_G<^VmVYulKgWB^Dcb4VB-)+|gh?IdSnfN^CW)8GfgInuz2IUnMA(-p*CchQ zoO0{;Vs6uspW{6xuUejn&k5Lv5p;~535+yvr*+_L`w3EQ@$^{npGl5%C|PATMLixk zjysWwNn>x`ynlSej&N8L0-Pp#xY{8Z%iud?5yAh){C{jVF*hqR+*&{_3B}|A5LC-c zacqbz#wKQ?6FG^;J0CI+xz?*XdwLLY+0f}^H`?m+qx}j-`#x_~5BD%G9@f0Fc;TLb zTD2fHv@uhGrdK#4laV2yf*U-kbm!u7enYChf&y};H);07^Ai&XIJsRJkG zX2$g5d2ZV6snvvJj)>5FPzok$X1;!;=g!d1?0Z2LGuxFYSeaaN25c@74Mdtp^*=;b z5ktS=q=%V?VcAp-enjf2m1Vz~$W6k4=u#%sa!@I8EHPP|e98A^O1zTS9+e?Ned@N7 zzJ-`U94k15XW=Jq*)J?t1x;%cB!%~D&B0t1B|UF@0*YZG))l>Ws=^Nxar_5Ah-L5q zUD3(K5D}SD8kOfBAQFydUSVW;9#v{n}yG(y^}~w=1$`r?Ro5?yGINwC}>$KE)sY|EFz_ z@h>ebee2$zLrN5KSw<1d%l!E`8xP4{X!j(S4*0KdaqL2Zyi1C}s%ZtFT}| zMh@|=aXpB{bDPszlx=cl)FW9zB>6H0!oUS`czFs=TG0S-Cw9=3>1?x1(!&=g+;L4S z@>cveu=rxb5#fT`YHF8P8YppZn$csp6TIC<`mk9cn|apYDX`!R}$O5R?F4D zN%7%`dAO5(O8bg}#*JE6+&5jj@?Aw5$*@2a2oh!MD5eoKz|=PTBRH8x;Z61j+5Qk# z!6j_VSwR-Zza<>rQNFv?r8qwm-y(KoGQ(uQm3<%nAe^AdtzPPlo_W899YfGnxkUo^>3i{> z5d08w^p9nXfnACEATp~SK{}XUPtXq9S4q}F zo5lGMHtZ4nf0pOdS|Sg5IXi=79r7EgwYVjRX7IAt53+f`kfd_O$9GA$KFtCP@7|r1 zn_O6n`?;$z~F~tY+p?*hh%rp0YF}StLdhE07-Pbe!c_yYFO1x+P)&1JXRX=-8TEaor zf9uDnP!bCKco~d-O!Ihj8j?s0{3EjP(h0nS1j??$J^#s@` z*Dj0UShW4j*pxmmpX$Qme{t{66HQO6z1yfao7Lv8Wd6}b{52Y4D4|2AO3K>Nl|!W3 z;cr0XqAM>768z4D@tFW9A|l0TXV0M{9Ww|{k_tl>N-tC<;VB+dL$<2HB}(HOh037H zOj~$n+8dZD50#>@6s(4bVpi}5V#&YRP|b{r_G_0{m4dfzt!C9lI1@kyN0al=k6AXI zj`8Dp%}oh=QJNka@1ji6-|&uf!ABg=!6B#zs9BRIOzwA%)Ufg)qO=mYzI@gj2v4bq zb|ysXeTdFybH5JHegyqih%STcP!~t*18~Yt=exA9pSkz%V(`krqsCsX`K$HXVe3no z|0IJydlAx0jP3MqydNj8ALHcp#?y1za`I9LmK2N-x^Xh%c@MJRcDCN7r8k+ye-E*P z8C&BknLlPU1NRGWnBZs3rq*pc5xXeH|a|*C<2`qcK^%@9O4m9Fi_e ztlhkRB@0pDkB1z-$=?0M&nFfnBeqL@(C+W7b~ivc?(#ETh18O%*hoVO42XlK@@Nk- z&LrprJEFVnWkC96!{Aep_|kLuITnvRg`@Or<0C&Lk4xGKpnMDwRckO@y$cKhf`!Pv zN?NfT%fpE;CB=iZY}PnQQ(=-zC%U9#6bx+P4Nf z-wy`ia1za?M2~^Skg6pYnUzNvG|@H9v)l<9&SB#TM<;pY(L7y_y+6q<3-2sH zb&M+*m`Mk`L6qu*-N{H|a9&gF!Fdn8yd2O%lAn?|Lgd;V&qN_i(5VEbyDAY3M=KZK zwN8129)RA|kwfo8b-tEs1pi2|-9gdx9J59DboRHfFfhHbfM|_G?`yhCQBy~urx;>r z`>P+f@HnU);ve>7M{j34O6GqaPSj4n7lW`(u!W2-T_Eo`Mvy29z4IPn#3Vt8yDlE# zXoyx=1eRp88Y)Nn;j6HpX9h#er%`{_X7hyIJs;TpaM!OK)$Hej{i?NTW8IuxW6pJm zxyqs|-gOa}G>AFWUby!c@Vu!W?$-CJKb!eEGwb;YE6iY^+brf+2c6N)^_XOP9bkT` zLF*c{AW%g{p&uw!x7-fgIDTOw3h;_G5)ef$XKeDwv*Nf)wOST!xKz?Pw!{?))&Oe9 z5HFZ@KqSNA=@*TAFcO21;UqCn%>;2Dqo6-l1(Jk1Sr@6^m=D121gg4@$mabJj&sec7hx?!t8W%bX(?);Mq~MQP5h&o?@pYPgRv^C5V=HuL`a>dNXGVj>C`Cy>VV6-SfEZA_i9*)rGi; zce_fu$e`}{T>NP?kuG>*$;S02c{tyCv3v!51_~A@1jz@MJ}XkhOP;<^2{7-uP&9ae zSds=uVZ;*Lj(<=?9aa?)s=eG*4|O06qK8&AdYp%E4v*1k>}mbDk@xp1FY^AgYV~7y zQ9r~e&L19E8Z9*K!rAzuT4~5xP1TCoW-KB%ixN^Z>+v43qbq4v$eGk|7c#hSyVb0< zV>VH$kMX0&*Z7+vzEF_u!^S)BUFUYJwm+I=6?Z3z^i(O2l;Nv|VyRFpC-so_jbAM8 z6iYkBVsd|r#9|lSe&hUROv-t1B+W4{}&@5%j3rQ5Y-1GciV#gC1{CVD2 zNEq^~*-LWM;OV%hq*ZXlir6SF?J>?Bg2_&zGw$g<#~1-Yw&RGKJ>~Inj__oT=Z;e0 zIh*7NiAdakrmF0bYjWL5AmIT7sl+uPgI-%l~t$G^OJ62K3r?piGypqBaETvJaidfh5)5Zzz$i~J$QY}FY$P+>FNLQ-LQh1C ztu7!KQ-@KJX7^PmJPd+I=QjHBDf7GfZ^aw?Gk?GSMBc$G_~BPSsUEhP{z>i7fwejH zPt=j&^bY>dF)q84e(z=29*)|?qHA2F_xFiXGyU}ml9is~SH}m3O}2(AOqo@9k@3Lx!*n&8zKxo93am>ldf(;A61@IPbGnDv0PCm4HqtA{@&wkq+;O`_dLF}*esD4yED?0!{y_jPXbe)1+}ans0`!YJjD~d9 z9OEY|>5kb?SO1erqb8-LrMOcFh!;!AcvW#f0Af+Io&XdFMH@T^FEC#ROW!luXp>o@ z$dY$l4H#QlXucVyX<$gDRqOaI5^CEZ2KT$j0Pk5dI^PQlo%N8Uo`9?@5DZ^O zNF{5dE#|UeXkbJEF9+{qy)fzK(3+YwOF#2y@!tO(ah0iu%ryLZ=C67&FO%Em>|I<= z;@OKMy^&KL{PcuNe>4}G2}>#k&ZA)RP~eq>-;2TD5`S27r?ZZ*F(_!Vc%d*K$UK-v z1QRg{+8S>{Osdl09UJMZYBt3F98N|Z$IF5HyluOUu7ceE&QtYYo(rSbbWWW5n+v9d zLHDXRa0Wv8yyq*&W~D_uR>Eo1g1l}kN^RXc*WmDcj8G64n^wppM`G-JTK4EP8C%D4 zhq93R6jH@&m2c>@w#6GOMiUYcU3_Ok7%O-8a86yyiHXm9P88z@kflXjLNvB^>JY@}hVvXcb2X;k@J_^8O>8PLTzu#MvjG5Wc19ffLcFtolT(hR{7lcsAgy|e9nwrRtI zp4)I^z{4F~;-C!Wk_3&}MkK0E#5;7Gw>?00cRc=6+5nfHT^KXm1F-X40(Nc^wGv9A z;CyZz>GE|g@NM7VqS;iqXlbr6A|T<*BzGZ$Z4`_@#C|$Gw{dfwu+o?C?*&Vtz*I`k z$P`}py68!Vc7PSy59|aY+Y|*>lS6oNun2(O!1dd{&6DvDXxv5XC{T#++6zH%pDLf4@ zmHuesMvA>b#^^V=AK)@sUhxm`0FwL#3<1j+p_K&0e}im*BKiBpmD0wSKAy~#EuNg! z*6E5T%PqDu&sb^HVkg!HF?$kYD%&*aRS|Pj0yFSJ!pNnwp5P3QcBh?3847p8#wkU7V1i$5} zlpAxYk2hgf&A)|}_?A{#_WYS2!H6YGiegcK5;9;M{vGE4mAFBSK9kmv@r?v-CY%gj zQrv>Vq_$bsH?6ZnOW~(C9)m^Ly0F8R=D+; zpO7uW%7H4u-i#5eb4SCGdvJX6&jAOXk{W#ve&6D~{|EXWur}-KnSaMk^iq&qsaj{f0mAgEvxqt>z=eyQk`ghA=vEevXk`iJFZ^YZ zYCS@GU-5Hu#B@8=;FDmP&L3)^J@x`0^^N|uP~y|Wt<8!pZ~WSbmO zkgC{{0!1dVkVeuMF;Rq@CVp>jDB-PG#q-P=r@5Y2zUy3ZQo$Tq*jT*xA2K+4Tm4Ia zCG#(%dG)>gOWBFn`uG}OQMyv(@OtCLT}C16--({N*mr*;v-lsO-+rZ4IV>+_ie`D? zgWQY!^X0rx@96Ki;U*Y$d~~`Et$75UZtXt)oNiVxbm7@(2(J_Lk!8i;RwuH0;eQwH zL41n)im2=(7Z=@W(N^bK|1~`ERkV)J_1~bNAzMGT8GT4|%`joxqkb!t^9e_SLUCnt zYkhTltF*DYy1lu!?oB5v=ZX`Q(0@_XuOD z7e`->B`fBwkE(=oJ3cD&4O5@1TwpF2<(&1rKam)r5;jUn4`-OU_?u$vo203Vzrjk! zKEnrzFN^74CNre=r


    c=Gfvz;*s_W)}Z4+Pcsl?`OVYmO1{;p%|Q4+aOIa({Pee z&@7~QbOLRqFJY|ekh};;;&O|H zlbm={gw(0L`ax~>|Bb|~p^nOyiaW*io#JZ3oL))}C4XJsEHlMo;&XWZVT|qz-e0-* zpP+ce#r|^UpS9{mdcrzHbjE$_!`axX9YW>opAC?HPo-ujPis$}wvQUMdZX5QVV*Wy zjS9SIweeiFPk*@IZXQ6s?MAhEyx%(IM~`Yx5)Y0aKdv_PnVWjIvir0uTpx#Z{&}je z_IKOFGTVjN80jw|$adH9NNJkxTuy zEMJr7e*L&b2CppL^vOPDX8cLqfQ%OxC`?R!`Vlm5I2tQWiadVHVF7!`2S+n@gYvML~KShIs1(X0r$D_o%HD`XK`0C&t@b#qn2VSp%#SH2GkP126KFR z0yryD)NRM;+sV-W3y$$&^~VStv_XY^wuVu*Oo*SP|@iEzLtAYPWE17f%l!Ck&ZEC@*%Au=sOK6h{o_!B~BqIcb5yG>GjG z28rQsCXq82=*=?yhq{w_(r+DW98q(dw)N$GjoLFa#Qr_IjP$)sURc1I_8_0ZMcne_ znsCStME09}V%=E+cVx3MmK*ImnqsuRna$=#fGKpwtt5{#R>ye0>)A>st2*;dt6Cf_-ETv%K&=bVXza$wBj2Oio2 zOq>%stT}|7LyyQx$hA*=!1Jcg5NF=adPmM-xrPDD*@JSSQ-xsdC} zoL7WxiDv>DsAJVXQ8E407qK@k?wWrbfpIcGB}v$At5f+~KOsYY7Eha$A)yqLfMORD zMK!Cisa0Ba#1WjeDa%t!tK;_jX&gHueEvcXv= zyPWskK}o(%gq8g2vtRuY#?s-t&lxbc@Qr`z-v5)#I@bUB>zPl#5%ZtBi(7Q;OKVzJ z#%~Ocn)1&N64wdbXT6x+OI&_k$F^3?h%bOUQOE`nxNz^pt5Q2WtnWRFdEmz1Q2k>s zK1Gi8x5%`#zEz9x7u#*KCK>9^sCwB+m0c3s|dqmVu-eKkMs-% zpwPb`z$Ijig0GEh7*ntsuM_zy(VOI)G9xNN^S{!J5#o>Tr|}Xa?;Wuj^10=u;Y-$? zH!<{HDM&5izBwtwWcyEwy@Hec4evRx=~_np(nB2N7@+`p!_3T8oN#*v1`GFP=C4_C zQ+e-5#oPppE}{e|n=1%f~eU)m2zV;U>@}w%#pe&8JAqvM^S)~R++OF zU^R{lI`4)3uAN+wI9@9y!?};T<@R3n(eV?=!~qEL%{>+Gay`KbV{1;$O-70E=#qqa zQF6?3N5Xf*s7>R<^;psSwa{mvLJBg;>D|$mCCHfWS|$EBMZL5W7thZw#EcL|q{-!wBj{KTtd&pZ~ zd~9Bi&}C*BS+WtonwY7^{hPd7S(Ltm>+3KOz$13ax7j*K$*9C2rzWf+DJF&*?{D-l zD7aJn8Oh1cjAPO$s6oW&4VXB(?hRxlZp{I|qdn-7nZ!nuftv%l^CgwA78=E*=I>Vg zoRf-yM&G5%#^eH)3)=(1bjzkLGi3T=d&^lKz3g2(OHcL{vw@%k z3hYRzF&_^5-Wfg3tIL>el57ytDM)Js6SRNDQS8zfg>`0Yx0^4qT!>B+Z75ctz+Wm< zp#K@FO-maedro4XDrF8f(MWBq=hs&^_+5nK?O*gRg0q`(h};*@8(vy(kfzWCb&$OS zcNgs%3?R~;A+9%O!64)rd>a0QG)|4!0BJG-G|GB&Ui=q2fytB?xqDdHYpl|fq7tKwbC`}HRt zG7@}e_CNmW3h5ed`2-~+5chV}aD#Pfvp@*1P~O`S2Tbn5HY|9MDQ{NL#ElNT9*bBz z{^rK5RayJ3tqSYxv@WDBy0tp%zjf8Qf;++J#_1QT%)5qaee;9VX!=#MKIM(I_3aI* zQ3|HA(M2L%aoA_3&b>z!A65*=Z)26^l^Busq;Bt=>=)y-xvk`um(2F*bA{B+m2Blu z6Rf|kT9EQ0vHPOOBbwtP)q9c>!f`^@J)LZ=x+8(0JnEgn4wgst6D~=(aI<4Jq=KV) ztjXBFKV~EtBBe$$d%@QgB8}@|#L#)lh165aBx`M9JYwj6RWaS}__^!zh%9*RPCtmE zWwVg*UO+EteDb-x!HV9}H*#Gx^l!@lqh@UfoSI#bD876Vk_QDUM*hWjK66*H74 zgEoqo0?14D$432P1_XH(M_tv6O4pk^u-c%-WbWn?s5V#zZpD_zivjYnRH4c>s`WCs zX>nOMQLQLmwE0dvJf=$LTy-tR1AC?v7U)5sXV~DpcQMhkj#oWZm6RAdwG@;<#zJck zM{al084Fe<_W)aC?aZN!-Z@3`>GL999LVO>{fY?5FKPU8@*bsYam6KhUB2OdLFpSL zo zA`d8LVY-9bGjpNAa6p4?d%ai-dmMN!k#2A9P|43J;fi}9m~&A3!NJz-`AEC;_IPR@+vR^M~EmS{Na>>)-zN`Gcq!Ad8a>#lrlAr zbmOHiX$}5FVmORL8DNYG>r*r<`9kRx3CHU!U$k-Rw0qr$o4B8v zL2DzC)x*;E*2;Qm1>|h_-)i1@jYjE*rP9_$UM6LGc+N4ZG!-ANVQ%&fuBaRLz0HjG zg@?sC`YzGJ!|qwjVUo8kWKQ5hs8V{$HVi7aId5#F zHY6?Q8VK5NnsDygB5ckj$+={5-dtOoE9ZE{ZO+B1-q_f5dV-|ORF1qtMh(v7WNaL-O?MS?Ua1ebAAM~4mRhz z=3Gwg=G2^57lNe;{Zh!i< z&46!6$q!OnbC-X9D^D3F;N^2q+}c%%%9o}{j5fx6k!q;+#0iuHhiv4YR&lX`MPy65 z91~?c=&fud(o<3w;8Zk$b)%L^^kjx>5<$om6al(Rjyup6yu^H$ud&xbZ#1{R2u5U! z!G2y&_C(T!g+F=kKSTbb!^%MwefOHJuVgNb*N=UgBWFLVb0Q#(0cYfLLAd{_cIAs1 zf)|LZ4mO`hHt%M=%!*%ib>@JEp+hN3CD6@}y57W>dKMQK6+h#E6+(&NJzG%r>V`s8 z@_uQ}^)5pRhhMo9T%Eg0Yw@QakZa=uabJuU@BKCOy=_2?E6r*fV`;vU`I^B#cAp!@ zFI2HhpOe8N<{$5%vKxX6#;Xub6_PJ=e#SyYdmi5$icw5xbpH6{J6$L}F9Rbf7>(HtE&$X zODgxi~d9O zAc9x0JmK%wB#h_>#+PjP5549DU(QPdb$c-BRl>(k>y0qXTZLk|P+axP<(={>0z1cD z>NdRDNjD3nQlYq!3`YGhv8783XN!yfFLc1eDBX6e-fmWR{mlO`<3gRw59dj)$N_ttz-c2>gLu5g3Zn>E&gv8 z7ykwxj&OQ>Qf;)_tzYvq|D-t_?bBR$oJXZYd;H`4cnJSST6Oz&S^Jn2d zBf;qLkJ0FTaU4Ci-A=cQKvOwe{`HU$i_y=4tM%H;(ed zL4J6Cev*$u)Fh9Gqm#TOXp7fg|NNGoEGjr^0&X{&*p?Wsa zO~Jy#`uSy+R;+%O8fF^h(niEbNI4^f=Tl084B&R$JLgW-)xVNR%V02l@})zTuIp=V zH78}<2cJM4Hr5n8W-MykfDoQE%t^U3pi74Ad(V`Af9VhYVM6g?BQV{kxSz;48)3d5 z#CiT7N$dg6L|@NmU%+BKg#W?+CF!nTMh-!d@-;&P(d&vbag8^C;ixz4M*b1gz8;lV?4Qnk-ch8$sq*5*!2#a6UcA7+R($l)_YL|KXX&T~Ooj$R zvujA3KCEoJmDpz7Zow-=v7E>2Krum1U;02-fy~kZ$f*AX;YEG&+HYmZiu5(y%E$;ZElX){mQsGP95ecxUW5(FwFfEfIigpvzICm-n%{%Q10r zUZSj7!K+EQpjhxKmHYQNR2A+Se}882zeKFJA0F3Ru&w-AGm7*;G&Vn+D9553&+^98XyPt3nSk8=q==-H#z&^{{~cwm7iC^ z=q39}k~V|XwrUY4@g?ZIjQT-z>F0iZIqx~?;qH&YY?bD2t%gI-&au0&ZH$KfkA4l+ zE1j^b${3RmMoV~U5r63{-K2UzPn-Mr&3)si#El{$Hnm9~W;gx=iCM@4o821@emy(> zM)F3WkG-@+SpDT`V6)G;-!J~1#l`Lrh(VeubX%{o zwL_U-*e*|e4BUSJoO{!4;<$4F^*If0v0_U#6*4%&+Fx^P9`JLhfZ>hv%=)vy=e- z4nfrBC-~osDaG2IsZM9s7P0s~T3GyBsL&J+JU{bKX6#N(kJ1#HF!4uYb@U1S8w@y7 zwPs!?KO^gvu*2uQ;oL5Pl&5wUuBd1*QL~WLk$oW9W5N5zy}ylS2ZD0itsfjz4)?yE z`BOiweI^wnUtnHUZQguH9Kd_L#)u;9iSFVu>nW8`FysZtfQ&?ppd5IzuI*`vR0C1u zD~3DfOPLt`8is&{;)rBCj9@4gK;5)8;e$*G3dy^echdM_3bXmJ6vi>c(6UEzySco=tDH^f*!=G{l<81Zg>rKqMD z#tG85@XSsIUGIpD9T*m+@km)2JMQhQ@a!la7w$JaRLD=jO^-NQB9@NT(V>&lP79cp z7eho@OVm!&dM{vd1<^|(45xQ&>2=fJ?D+S0CB=O&9sP-RYHrZ?@aXt{HZLKk{8NK~ zlwH_>h`Duybyw-Ivm(qfke9DSuB;$W2(*sp7(UrU(QFR`K6|l8kgj(<>BqlAPcn+4 zdaNrm_JfYX1L0NRSjS_vHmNj=37&)qt$lsj>-dkuV2p(H_;??-tO*MD&GBf`!N>UY zs6RnBYW%Y)u8CC!_R>et=?(TYp+_z9DnAG)JV5+@eaE|sKVn9<$Wk=LR=1+8o8V3C z`$)G1Cf70Z#L^=1+)B)m{_rC5h+-#mR@Gmb0P0gxP{7|n^ltXtV?lI~# zZW^S<{f#~Z`@#z+9yI=AgvuoE<7pt6WLg1K$3URcx=;QHo8`6b)phbca^G&q+tt;z zt0en|T$`2x0-W|_;b}mbqzrJ|y?;!W^QN2lki{H-tQ%0!P zXSrx{hOQkCK2 z{>@{!3ADmDE~IzMvLNH*?oj6s_EjIHlH zgQJz%kfS6`Cafh>HJMjO+KUR%wyCbaGm3qB1`CUSba4T?{7X>3W}~+Et<1llkw0@6 zuC;ieMnT0Iu&@q9j^SWg3ZOu3&kLex*y#lddC3le;qWRPYebcQL6pw7fq=b7M+r|} zfiHsNX~ptM0^UxW4F3gz`pS$_b{_-_wk79Eekot}%gbmsEWIzl9ZLr9QQUh1&%Gba z9hCSv%KO!MrsO+@YU#`WtIWMcn4n%|A0<%Ob{k%%|7Bw;F;9sLxvhsiU&K%HDNj#* zih-Vf!7Q}++&`)`o6qWvJv1HH8dVm#oU*J;E7W(9ggga&RfOH4GVsIE21^dy4H)_%f84$PgIhk4&O9bQ>Qe`A!6GhVqJWYHFFO=Y6v(* zN}<5kMB@DHYmNlgYYh~>k_>RX%#rtymGRVW>l}?@FS3kEl{~G|PSV-E^uQxRdB3z( zF8aBrFW_ppyyL&ng^x53X3WmQ^C3A(5dtio#qM3($=gZv(EORpLY3ND6;v|+kPv0- zAEUQ7!`{mIff4^Zj(Q6D6eSI3!0-O}Z`6CS; zL@)A$YkS6kiwhO}ThyJjyD;Lq>`@*F%cct=gO9F+pzPvlATCG~jTN%~UpN9DhsL|z zj7nSDILw}*Ysk?UzLI%Dn*w7ZVMK*4?M(-6yt585%S}hm48U zqu$1Dl^sxhUMo0yR}6gz^8(R+A=`ehb3<1dCYptz38a|Le{>kU<~H zM3Tdi2#Xtcm1hzum%jAZ7Z;a6cKMk-3t;@SnP2&m3NOxMyhWbmKYbbAv$w~(TSZK70=-=)dn_@k< zoL5pbj0K^NSz#9D!O(G;Ct0I6g6WSX66Q8O!rr0>J(hG(QMsZd&N3{CTx{P9xMhy` zy0(|C)#{zOqGBMHt7mhyUK|>fCEbN@qytUn%Jgge{LB<76hNjbz=s9;P>x?iozb%X z7Pi0yX0rp-$zA7=!$uww5#>tdE&r`{6e~1>xCET{W22SSMqoWK6D(aFc1eu~t33>& zp6->M;l+SaLVPp5uv~H}K_QtbcctR+B5#HdvM!Z3m4TW+=!b)gu{Ee!Tx#p2PwNKG zk4Zm(9S+Y;NCamotgH+A^CLgE}-+BYaIg74?PH6lI#};Wr0j6jqTd_6TQ)F>IcWI+=DWelpYQ@~KdQtpV)Tr*)D|<0=*ZKhaWDuVB=#~OEJkrH$$f?tE@keD~NSvY(yMuH@ zY7JoXyW#UN?7TG7TCSMv&1IJjOWMN1Vc?%IUp-60L09AyoKotC-wk!#htYewX4;*9 zN;&i6gjYldX87<5ZtJiwp!+j>_?f4Se8o-@-&d9zZeY6uM_6y%CR516*zjkaS8bky zC!lGS9OBrnkLOMSawH(DLN?QrtI zhEZXqV$jcCNHZ)$8AKucU(J7 z(3*;So~&dNr0|MeE?_Fh3ZD0+)>i&36~!wkU{SU`^~L&!u}glG7;`BnI}YEB6N9$) zd5xG$Kl7&+?tKZy?dP6ViDYo(4;_v1(|Dkilu>iJM#MP5K5Iil`cHNq z#R5$|Ei*PhU9B)K9v}JiIgBUbL>VO-L;BcD zjJ}8>-SBL3aX}rgV`G3}&xu?_5GIiV5E(+fvk-+xZ~H&S&xBlQ)`7)nOp}A6-0a?+Mp>fUfk2!=`~8$Bd>Mm znrv4eWkZ{Sn|?BwSQHJnN_jpBdM^ExLz`ARcN&2oc_1Cj($1NEd^r}pOqyQYxAOic zl?ML-6-Dm>2|V_al~$S0;MNG02RGL?)NBWA*s#^o?Iwo@OiFcl2c-(>pOEFF{rV$M zVxgz1l!!F6-H>xOMy2%h=wKrZ*Z9UKxzKBd{F&}linN*90ul-tgZdk@CHx?QZLE#G zH7NPn%A>5mTi@SD8zVn!N3Y>t6m9!mVXEL+HceB<6gt5_g{%#o0@C-*XQfCzxNJ_ON$o^i(dv={->L*cJ+tH zmHpvg@3Ux zU;JTtrd!sGr|gWC%-K(QTAuBKH9PMV*D62l>1iz;#nC@&wT0_cXAZM!_?@?oyJBMBaCLm44WM%=^;Ryf3}; zT~GRiW458md<%$}TLNmHfOmOq@FB_e!G32Rb;ydJGmv-ckVY>~G3K~3xZw%H6zL4# zDeYHcJ-n0KU^{G}64(V}O6;kvj7Pv>2qo9GK-_MW?KyB<6x^Y+P7QgRH(Wwt@r1_C z1T`922MhIsp$f04V-;7!F{3l(RC0i=^z0@Z4BL2B;F)V|7x<66F5Ks|jv6ogY+e-ww4c_G8^&X3y|igPhK>g>2MCwWxo2aAW#7jcf?GZ(Txl|CW+C&}?s>4ad>LI5 z+s)%gz5~Ld&nQSYUps`p`lPbYQQ?z8Z;Z~|DL6DZNR+g)w>P)dB9D|6SACx1RT?H%7;NzuquLcr`t{P)r+Z1%%TQ=j%Be2q~wU^{r%F_crW~ zrS+Klakb=a-?jDAWh^ZH(R)7&P5x@7`2w~a5b1W?&DxX0FJ(53VJPt`XB<`Xez$i) zpdP3tz*VlcX!Aypk`N!9SvT;hUVqsQCZLqKb6Q7=d=hBS!!D+f$yAzZ49S2GNE?Rg z9KEr-#MLk!wz|ep?N-RqbNTG+EC6E&Oo}RN-YwgEwI|gkfiO9(Oz`?i#-^`~9bPj| zDcKW3Bjj-PEbE69w!2mf)ubo!cYmZ;dy$6L%O$9qa;TDtl$9FeNzdJjMZ~8fmvw2djAJ{mX z-?tD8Mu^ARJdv=C*?~5(#4MaoC6bJikv7xcea=vucp*O-p*ER?rN6!S6%1uKKCbPx zn@{VF)>kq;vnAT6xfo32{pb=V^?f`AQF)Hc>NXaPHZD0MlJI>i-Y4w5VnBdk+i^<~ z?^f&FqW4dBmMxXHFkjC#m%CX}d;w(VLe=3GOZH#mhUr1Qk>M8|H>@3n#aUx{iPZ|7 zuO=WmLo0YoKobFFqRzffq&_;Ivl$v=-^e^;oy^;?J;kg$*3F)r;CdF?tVmTaudg#b zEe5trnZeZ%3Zg($@y8JpIoWT>Gl8>N+-bdyQl`**{y4rSc&{pRL_^!OR z3?KGjw-V;?wnm(M^wEP48Kt#>AiP^6K{b=GN-gYN@oowYjzSVFDZ%7MB;l zs`4*m@_lc?m469&j(`R8j3(&W$5uVhaD{*A5B_0>DOBr;0)`oAur4x5k$)@RO$kI# z8H`aAv?3YdEar@G%cai*|HjC)o;A=Q6q53l)3?OZn81v}jMy`eUHm}Q=?MJA2bIwO zvBZFy&Jq~!a$&XPmsfYzx8eV@dHXa8<6H7(XH+U89{6f8o)JF9>=PNmlMi%nSo+c8 zy`P84@|C?t{m4IR)OX=d*r?_*zuO!b^yX9Z3egE9ko+_Mr1sdaKCd-f%~LmgkcI9nO46&@iAQ&+A|`U=yS#=!RY2MKyfY zgELA)3J{9pS*3AUJABfdcUOSkE0{{nix8WVI+I!QTA6#lfa|Sx*lbny_x+>&<0rMl zFM_ycqW)uV{A&W!VRVpYo%E5}=o02tx83iZjo>Ot@3PbD4pHU$ebP~}0Ki$%n8aL# zp~PyV<;{rRT;XJ~5Iel@IrUPGQ2blbRyYws$DgayqkUn7X-2(f?4Y=ZBs(ln3)vNV z9#2UwrGT2gg2_Kpv?~TEQhHv&e?`~CLWJ`c!=~gi5WMMKfhbHaJ>wn|c;~eZoZh;i zD}~Q^C`gt4aLnFda8V>wb6mkpb&Ob|-dRYjHrUjg*m1V&MoSbb! znTiCfIl9T2pD{)onbPn!x!nuWdZI9IRv|FfVgEc&(~5j2qRE+gyW&5(QFqzA=ai{R zlVol*VMI%kR&Ve6HIN4T4Z}KzzJWxPFF1}CXJ&^w zPOFKnf%60R;C>hkU;<7J1_sW<#JIrNlTmCG5Di!z_9!@tN{wp?ukBgj^XBRtIrLN} zk$V_=LTFt{E|0w1cj>bPTco*Yw_w%Ho)tTFrJ$rca$qNoCkMTXJc-^RqY*|4@OH%1 z8KfVuHTC#zz9PtdRB`IHv9`;KVI;Px$YvBAoI^YwFnZa$E|BnB5Xegt4QS@P_O^>G zW?ZrP8_~--hR7>f=BD9!jm8sdjbtA{aE_t1BPg1+ElS^4G6Kle@JLaz_~ll}U$_EDo&Z`4{Z z(2`z16k|GiVAppm`=`)(6kV3Z6(F*uSi>1d?5$sWa#(MOZM$~ZsxvT|Az$auk1CB8 zA$0jUyuFk9j0KL9ydQr;?%K<0D}P#PRCe*&hAtdv-G<%FHM@WMxK`cYYf|m^j}H!; zpP9Sy2_!qH9pb$jVc6s5cKYC?euQ;`$?@XUuO9C1*PHS!mgIg}ZSGc%rr${=_TfI+ zv>(HCgVr8CnNjL()shUkPc^#oQ_3Hj*r-2iiig8Vt~2BgZVyLo0+xXz$`*n=UDNMl zeM>zmA3gk(te$VttY10aZ+(_e%WCQ?%1?Y1?7WgWV{aeCX3hu?bX5&}j6aYF}+nZaX!Ka`ZfBmYtR<&Z;~;IvjU;-a|y7&Q)V$DFej9i&Rjeum?(f@ zInP{p0P6DI6m8>;~XY1S);yf!>P?{%O`9Ri)_J3qxqOd{L; zo^(Ie8kZs&yRWClXRi1*IIzOexPX0mC8DB>&R``iy~J@OLBJTEV+8IpX72jHe+B{^ zF@ngLd4}(Sv3ktaAQGI>*BFN;TYSK(C3W^|FWyd9HO#v#r?-Xo4WpB%p`2-#kdRb z5~W2%c@J))&QD)94I}rPxK35u650idtadBMHY*qeN`w^IA2B~9Z*Z30!Ip(Z#R~WM z4r??$k>Fj}l~4Wo?D!th2;7lhNKLE`w1gPU5ja*%gcpLF^4Xfg=- zCSlr2Y2~JX(z=HqV$?qCns2KJUm&F>(6I%I!|^aj4yBR$)S&RaN4MC?@2sA4JCW38 z9ClTZB0YD1kloYLKb!DPX8z;boY98F7qRj6OD~-*BUS0V45|2UvUmKRVaxzWD-rt z%3#rpJO@#3x)>q;Zc$3Dj9kC0Dm55f&o<{$S|vm#o}(w?P%^v}Yo^YC*Do z*Ak>-U4lqqDpb&k_Xg6gU%>X>r^EVO4Tb@Qp_wNPKoRloM3dd4vRq3dt0s7E3$w%Y z!11;xU@`T_+^&QF#L+~D&KLt~}0*x!51){IQW29*R0g4Xd|ukfd-NadQdF~z z&sWQdemDFgEQH%jabC4<_9%CbZ^x?Xb;Eve6Ltl*0A@QGyhZNgNrf^fdG;CpUPqlH z7>6FCV5Xf7ST}l0$#_@xWsCH4iBrNms2q^ZVtu7VHZz|9D^}Mw%3I4b&Tj8L(JIb`3#5PxldNqkm!3VjNuh-Pm4wHqLj$5O zd%BaYCMhzLV1|;OM+$BBsCBum`q0|ZisT)~mvgWLW39O!B64`P%EsM(I85;;4zQ zg7!J@%|y$iAOoBSg=@)0KOaj=YeGz9(wT5TUW|e(fz0!KeNHZBeB({MxyL}{oLe3O zJVGw!=H|lR3a2rgoH}1fa&l6~j6#qNn}v)`lk6&TlGB2U8;2aT-M~bHIBn9lIx}De zz0sa=oC@v}G8bcKS{}_A!|R*atQIBxjg`HM2n` zO&Rc9>*iX$T^!%U>6|gs??UZxKJE7glQ*U&Y(ClD`SoYD!@c^m=C8M^2S@msC;?WM z{e4udL6f72C^*If{|4KebPJ6`Pwuz2R5CiK0p2;~c{p7S6y$@K(Us(ii7{n6t0rlU zjuF;CW@eq}^5RNCM;T6VyJiyiAFPXUOl9Ifl8id)&n}i%-yiA?!)jPK>?1gfKq4N; ztf=EeNyMQ>8ezt`yd}dFt1K@DS3A*XQHXLxfDF@!~R}K~gPS|3-|l&S;{d zitV^&XwS-~oSl^GYF4Y2b*)~I3Qljv2Yi6ccRJ2=S#hAg*&d))kSKj~;0s{{vMt=O z5a>RLNKr?^ek?O`;Nn?>628If$ErGL`11%F*4M8fw2NKAxv%t*H)b%iZDc2yP@u0p z_Mr_SX;I0Mati2Qv?xXoVqQ3COUPSrbv?dGxW42qwkQiUa;;4D0wQ&ZIZ(yVbGk4t zC#S&QbictCEIa!;h0c<+NnR#Fm$HcO*~qtMg#rO_8Iz4bJ?Hz@>&A$y%uJ~zMV_7r zcw4uJR8m(IJ8eklB7=ln+?3TPF1#hgvN}&cz5!hlm8Qix^*C5qrj_I5s+Vy##88z< z(T!~;;t+E3t}o<^sgD%@Tw;~1FnGR-jkK*z;{|l z8*f^VkiEQV!@HL<2V`C z7t@RLT}u;J-a8g&Y~z{72guQwko(X2UEP1;2{W06FZ{y2-$fxD)!qFHw14-w(X2Oq zDf7RvAsq4s$7(oYCmjCDe+>U)D^}ZK^+>pqcf(FU7?GnCXF(%r2xjQAAnHU`LwnBU zi4hW6xyM7sD}c^z=xtPgSsz@^AN?o1^Ki^}aZW&+l6rbQuC{ic#sRQH^_^iLKUDa8 zTCT}nwB!!45}uvRc07({!MbiECpfD?=RvX#ygyErASOH7aA4h##OCzsUZ8u!FX02UXu8)ie)9H;I4dPR^rijIp*Ua5mZZ@nC5>ED!6? zeiG3zkX!R?@!sEun<7SOOZfS-j~{&_^D_%h+%`PPy?%M-#Gfak$&(*I1vNMoH^T(U z;E+8f2o8WJ4C*c+4~r1X1P%e ze>Y;#H=kBYKbyH+v;@zU5@9w&pFXW9d#OZdk{2{SFO>Y!Mv=nGiAf-uTqQ6u6Uu*B zxsAuW{%UD+4W0b(e&#<7qD#1-3TVT!8}r?BLdgRM3Uqkxtrh)C*o!Z(8!roeIEgfp4zr9ixi}Yf z3(X~3v$vmb(#VQJw%&D{GMt_Or*{aWUaEZ~1natF(&c>dxK<((6Gi6YEk z)>|<1jrIKc>bjpRmo_N;y0omADGj#swyzPg{AE7Z~&(}n*!L@VZd*(*~&kEg^v3mDo}H1$AmMC z?BA@$8xqihaE3tXT+jZHux8!^ED?(+pl$@CLuC%#dBA7pvGm3NAhY;O7;LYsY(Ja% zhs_>nSn%T5^}HXT9HvZVhF)E^M>o8;AEL?Wjl(gBv`qfzS%tXEdAD-m`mN+XM#A$C z_t}zm9(0U4J^`&0(}lTYQf!sBJb1eQpwol6TRD7=6gFaHDQs+4mx2pm6vA;8zCo`6crEkCyj~=+b8#Y!xd!5P!=p) z2llFmt=i)nM+TUC!3WwUzp&(>Va9v#pB@Qg_m=!W|G~br z@IT2c{?~AyKW^=|iR(D?cg=N5pXGi1E0>@uQJ*Pz&v+(r43+E)_@{7iP}tkcq6CUR z4-WSBJideGMQ2A6qS4y1Udq{`HF(@gxg$L2!x4ymWH)#-ul#lUU2Q)JbYmLtc7*>C zZZxh$RxTD-3&pKM2?5dYM{%n(2lmZvm0DO>zW00Z+Peog*25-T%fFTRGnqa3kmApY zYaXt6_Q5iPlDfa|h6pABut`KPC#T;ELirEMdA{(~g?nFz&RTj@Yke*AzstaXjHHTi zi#$D9z&l7_1UdpFkwe4Z!Z$#YO9_1@Hr7~7QOzy#A`%NIu}3i*_MDw0(>Ya|tK7A3 zW@nOF%KV+hd%ui4L=1rarOZE-`AJ2;zB(JtJ1g#x8%&3WFZ99U^U9YqzxS)U z%RR67pHi6P+eg(WwZqT+H@&WZ@~idQ;oC;Fd3;cXi38tM5BK;@^SF70KTc4^d{6_? zs8v1XZ;l$(Bh*L3ck~-EgKI5LRzIxzM^7tF$*xh~-+xru{n&ilsP5K3sWw;*2*0UH zY$CwA(0b%+ zkQj!j@$E7;Jh97$=b=IvHgm z5t>?|SjldjWqb#8vc>vkv+R95RvKaFThC-?J}GYIrE_TAw~S@We7E+Kc}@}j63hB4iphH&+(cIS#DXio1JH0bkbj9a%<+XoN&B)V+d$xA?w*jk@^YB4VfI6J=!%Q zbTg2S?j*xRT1*=soWl{z;UURp2a#vH8SOpJY9AX%OadfJF7B4I+75z2fPL#Ts;3wG z7#;dr2WFxrXzQi0cnUHww+@Jck99{*1{#TF`Ib?dKu~d~@+8t?d?3<7zM94wmEBej zhL}OlJtHVf2D(VuUlUa4c2_oAz58{FmCK~abGVGEpy^XuYkUVF-yyT@1OxWFiRZuK zA6qn2QX)qjDs00N(kDGSYV{rWP1PY#~kYf z*O+Kfq)ByZb2b@!mPOeqgnc6vZ-m08qHBZ{MHBt-%5n2}Uh$lUOt~cp<*|zJ@n%Q5 zwc$Z!aIdhr(?`&XhuxY?k5k66f2N#V)U(Fr0AojZ*v!QbpF0A;W7Vp%+h5*yK93CQ z6c^OL(V3^wS!440Ct<}8uFiTF6Z9Zt69P*KoYL(xQ~RX25oy2hsl=1a=_vidJe?4^jIOp+Gb-%li0f~us{WRiWs4>12(dZo8!qO)~%Pn z6PUxajm2Q3x<+DNTsX%Q^TZntrX(nF_8pl?AQJH&7cw7!#T$gULs`(kSD?C--4_fZ z8wX6AfgyL&#OTEQP~E^v+;@e(mpuqI5T=KFtkXjhAIR<+!{JNVwF&+T`kRp7$jyoD z|8~}UL`fNqjrmK#Udfn~_p=}nWm$yYT(&e9w$zwDE1?CN^%HeYM!0y(%d9Pyj<-DL z>`!v8PUxNHC`bO;j5G4APXC1VLR;Un9M2BA33oLp%i~)ujpnN`v?FGq0GKL~dnapz+ z*LB9&Dhl@e-ienMa+!O-4|R&W)x%b!UfWyD{F%&dh=z<_H+OYC?BB4u$~Rk*6A4pgAj@%Y9|K7b{K`MdzZmZgAD@pV}WK^*3b1}EY9trcT^cC%c z`sTy1E`L7qwWY;BomupeM;R5T=xzfN)xnXU`8x})lG(gq1*`dKe0OfwIim>GyShdB z>^*(Db8xWJY{sfz*x~_gm z9eY1T$8LvxIXMq*)wcVkt(_wLzpHjHZ56kQYb!bTxZ8Mf z)cV=XKlZbRlgB>Bm6{jMn3Ft$B(`5soCeNi_dDMB@X20PpBT9=M)X3I&gLfwcXUYD z3(b)HX5cJ<%=}!X`wFAOyMEPX(Hui2Ao(m?BAC2~7}mYvBm$|MNv~iH-EZ`M1Yd^z zmHQ-eVUCd`mWbkrEY#>jgCPZczC|toEY>NqODA$#h1rRdh)`rWnUGQ{wsuOJdGfiI zLhxm2djr>9d3}Sm^bXKx-b;(A##Y!oc*}(Izf0X_7#&>rD~|Q$V5ODhn8~WRG7+N0$C?@bY`?2MUV_aDIuteo z#Uo|U42Q}|9PceriR=%a(jmvKb_p)z7WWgo@tW!x-fta1+<171ST4R6kW<)$;u!Pr zoI}1b8}w@sQfcGtiyn*OxEq+5vaWY_!w&_5z^sGFAOS%~i<5{gJPvU0DN4U+XyS|4 zh5HX3=O^20A#HbjVsw}&o?rxR2tbN0ZTR2ubK?=@m*a6zq4K+aX#@Ae(z22*Ia3=~ zM|q2u1rG_S=Q-d@!vWBqEvdxU#mrIXWU^dRxK<|6>mV?9(FP`qRx~FA_V+;uJeLN{ zx%tc0Xomo95uA-&#mC+!mHlJftV(%zd1Z0xW%I{}$ZMN@yjm`ASBj5TH%ryM^4|8^ zTItc&YH_bzs;q7ocUQB^$e@e3t5ApQ%MnIWI@fgAhzM?`(d(R9@x^?+xXqPD5dwaR_D0G{gi?(^$v^%Coy9boY60 zgh+o!vV|+&Mr6D#;e4AI1p!R)3uN_@us8DcfnDGlBvZIJ8z^m7v!Ko#mOH91uONpm zyP485|AB{gnLBbkXU}^HVE=FrbPaxy$F8UOQdyyA( z+G3G&*D$MC4oSaJIozusv>&}_Rhv0DT;&kBZH&BG!<@JJb}3lLg3hD!SjJvltp9NS zkw3ra_}HcI3J?7(E?f|z3!Sr0_Cbu_UIl`O{=1H|csh5IJe=y+__tOhdg!Mdr&@=+ zo9PsK7g-a=3mJy-bXIpkCrm0Mnm-x zEX*zk=IzW$j!dUY2y*q*{Ph#+fz^-V47*!*Z_mt97QXo3U;HMjrk=Er$nN-23jra& zl=-(!(_$}j=wKdA&fq^Fct2si&Fdjrv1t!YF_YEy@M3`}1Urgg9re_=|36#UUn#^&pJJqY*FT{H_-oET=wN!dsS=%gZmUb(JQmI-hY*$xT3%gsz zN@aVkyuH3r-YJ&~>zi4IR4*{M_FWTZmw)|<_nq1Q_@xyx=G^j$_j#*)_qy)*t6`~h z9?++q06q=j(-1!GY!!pRd|HOgy%JTNTu8=#uDDVx;(od8d4DfEya=27@1Q>C>fW{6 zH-2KfeYH?t`yJHnT;02Nd#O-{f3K%@eu+E(&hfn|d(_gxUszcDucM=L?XcQv!>zmW zmCVNrmO@S*63wUCh6AI5uN}QwQ^0!E5)sxtvf#)giXwxHHrs(Mm3eoFw~4}UOah}u zi-)%A%|r8agDw>-c2;blZ>zl=(~OCjt1clPGpLOTKaGG^S)!kF>%X1FbtiGM+PalC zHa9m{*VeWZfrcd*+LiT{?d*r4am_3(yjooR7CEz5Ueq5yt5!euGyhS>GP%mb94g}z zwx8Ew__7<^2xiH-Fs=Hz5=yGjeZfuMFT>vlL;ibZWhL)#`VYM(;(5X&j-ri1$w97< zabFxPsJ{1T*C@R|sO4jAigi`n%LJ>%a-q1I2=?6kaPi~6e_`?4(Dz^3t=9HyhfkI= zf7tZAJjy*!bh?RY6!%2A`J;H!XKW{QJDYcwB2J?yRj2yslSChB%}Oif)p*a8z4R{& z)1MYf-lIED;MujyEG+&b_p;E1KTl{3#2?#i?$?^FuV>bsFmZTy@)#ERsr!lNB@>Yz zEn;+R!RTbnID%Q8Q24ZE^Pnicix3&cdI>ij4XjLoZg7iZU^sD@qb>-#S4b{_jGj?M z{0qXzXuREwzlCIE;j#!)i@anJ_5!iarTQy=9SsJrdl7%*>o){4MtHWUKGeqMn81v5 z*3x_hVR2w-SpgSxI>U*&QDN3hFbVy%j5YQg*dTRL!*Q@)>qBK=CIzZr0;$3J3*$yl zh#-!qIchdZ+bK>>HRyK+b)VP94!IPZo}Syro|b-L;WzH(&@PD#HwF*l_b%-B24OlF z1iop~*_Dn3(QLKd#0(!Xok((WeiD<<^mli4=isAw%AF%t$WI1B#L~i6=H4$1v&9)s2AR;lGHZOZb&a zF2@$O#P>?yD<6;cKb|MHvWA zTnxg^!?$YVu>I)7{z!0!qEzDNaZ>8MjD?$=DwKdIbLu*soyS@EGqN&OH%jkmmM4T& z1L>X}2~g9Dc~7EnE@~D`RB&^OQ?bN{i_OVXkXJ&8E}DK`jOU~V9uB;rZ8-V45`&J* zkwDevk`TISfLJH+ci!6Ry<~~v^g2~NK27l1H9(0hL@OuLbR8aEjmFGMHogzGiU2oi9udX`EX z=92WlcL*v_3FUCItMez>{yiyJ*o6qzQO?gnCt zAunmAl11kW@@wx{j|tOq%-jiOOt|eZdd3t^XZpq%<9&BOnIeDp>};T*i}(lRL@tmn zJm5);Jy_3%<) za@%XvkEUBKo$mI`Rqx`G6ML?4v3Yz1hn*wg$NVD4cD`yyU9mb&yK;HcIafH-vk>i@5%XADIB$oN+&MH;_zIHX-V~W84lri(c3`)i02zY^ zjzBDa_lyLC6)PeL=_S;RV><0BaB$pd8hi;l+M4JV}9pf<#Tyq@kH>2)T!IVVIM&zwJe@?f!i5NR?BQItN2 z)6lr}^-O<|a|%q4VC>+e3-#bL4Y{#s?Cv3m%bRNvT?Qiu5tn)dX%r}&E%0n2u}5pW z47Oz~DMDMyf`2y#r^c9)@1vdbk?AbmJV=N`m1Y>R2ajP%GNN;y_gzE}Vx?7H7)J>r znRhc>?Bh$jCTujHL{!Pf#_z1wr|irqz#zJ?y;WLpbO8 z+77}U%n+!n^njE_FzLdtZkIa4K~gD+ZR%BfJVXU;j{dXk>{oi}LiCgeLXc|0cQks6 zM?TVJ$S6}RF_W=XyA?af(->1(y)dK0e%}CD>taelA48+7dw9=URo&F%YE9YfUl|Vu zbpSB`_13~YpoaQza{+d>=Zgx;}?kpKY~Nz;@q~3kJ>C8VFm0B ze3^Fk ztV$dSjX=DlJJlbi?=>M2+fQuHlubp~pgBD$u`qur^@klPCUnHhI0~3~fmrtKo{D%E z%pt~GP~MP(YXKUL>t;)Z5^uqfu5x^{Vmxc-{w3F{$h}vwjDh6PVIp*w_IML5RKNN>OlWi`awffV(}kCD?gz1ke=(BCxQna$z|$ibO9=wM`tXJLm-ADh?_41?LLHCwgA-4==T%^&W!n+Nc`jmS;= zEvl8r2c*01V}MGiVo}A9@>7GLkta%n<0As(LooA?;W4^rHmd$XeXq)i$wIex+^EJN zxFZ3AR}o0M9dYu{LaXBwmR?rw(IE0UEQ%`<)CRA5qv3#&p>Ft73V%u*w^MSJ$U(WQ z8`!v9xsbx)A9z2clIkDl{UU3SOsyQ(64!qe{xFWL?@XWW7j&O0b3Z9tk!VD(98b&i zXR~}@W>vIu*sQgGcwBE)o4-wUhTe^NjHc9C3vzUk{!Cq@VP}*jld#DSNe4pu(pwaf zv8x<&ti&mZnFNj7kNk_nf-N3$)#cW9lmHj~$xf%KIe9QtysLAew+;SY$P}ffP(mpmx5fn zq}jDMJ{Sg>=!O-O9gS=BrC~agnBGMCT^}Y4gf@PIJHbS7h}0|Og^9o|H?)wq02Y^# z6c4k-O+bwzzU|LcawfBl#I(w4_Y~e%-Neic*0~_Uis|6=W||Ni(UO5p{Z&99&b3!3FrSIX^P@b7%# zcz;J{=w!TeXGr$Rk>H)si}47$qbn64r+<|EG#>*WL6>CrTC245L1LE%fjzdXc*4of zY$RNybC?-CBia!w<0-Km?Sy$p{ff(1W1GyTV>3ju>M)c$gxYqqriSmZ_VpAcimn%`DIOC|p}X{y>n&-u zo60b55G10##0AXkuBpv3b5(5s=+u7DHL&(SPF}Ji4@-SBcS((<| zVph5&^2KDJQ#v_n!?*~m;+qyVRf4TfN*Spo7_rxwn|zfBZs`PseHOq2wd?Zgtnl8{k&n+iyO)1uJ|Jl=Oqw0@WK#+Y1 zX~ruk#vh~~VCrag+#wq}m!;gf zyAF8`u`UF4f>!`J?s1({UY-WxIkZTEFVvxd+3Z)(la*+y>4#k7KR_GJ-d@ykpM4Yd&aO zc?H*Lx(*a@46X#4K`((#yaCuHOg@Y3-_p`qqiPblvs{s$)b7xDJRr=GsNrFP>{nad zu~ueeUr0XF6SVf$E7p^e8RLYltL(|CwW9NJWMPN{L@6(fhXte~P^OFMvUhC&%=qT{ z+S1;UIH}y!_Jx;p&ZW693XMaU-vOaFF#cN|%MB{nf#e{>9$UkK?MI&e)|1q~#gkNU zb4_CH1A?UE>%&a%QbaDf#??O**bfbz3id z=s9ED`3+rsT>BVxhSzi)LRAK>~)KoC-R1MpaqBOXY;OMHp!$5 zi+_CaBc$hSHEIXn&J0b&H2%(=eEO&k{r1-1uU7VIhfgp}rct3l$7c=RzxD6!7RR$YC-VTPd~qASk(iD-p0t{g?Iq zvtWdg_=$*Wc$)Q666o+`-(>kZlYR5%4SWp$PRRnFrsYE2bGIx~)0-a8zPb6a=0aJ( z&y;FpKPN`;!WaJ9Vjku$MfYz=%>UYw8}q-B7W6;BXnz6%O^y0D@%y}`DnbD6G~^@b z#UMCiZ~%9Q0PyZe4{XdR4!|P$4vB3_^33~AYvWh}cviXZF8MML;bn@#?0Ra>a;z8R zgGFA#j*Z@8vZ9+AW1eEo6+SRe%BV@C{w3EFMFJ(c59AI?fdTY*fpi_N1bk1vz9f)@ zX(Hg&Z9li>zwx*HkNi!zTnd)XC22g&A#E@F>XK=1`^hi4GGhxWF*_rL0Ns0BEjs_KSJu~eD~}&PhGF<% zm6o!K6)d25TYWzW2*$!!{;kCV((yHGPYx^lzm&N#Fw*=47bJsfwb_QpF{<*UM%L7r_a+GM}Q$3avv^_FJbu6r;?}e7J5Ljjs-_A{&#cq5N$>Gf)t`L)j60|+ zinQ6z9w&zb0Rf{&vQj4zVNmVYkq1Ywes3QkS$uCqs9zb%bRmEG5dV$1IEhtowd6Wm z4VDl*aBpS}E5j_oc_Y?@t_2e`Z= zSBub5*=Tv_S`Xq($hz@Se5p%6uFV#`_qlvuN=@^}W^_=Ui$qbI^w-26zOvi7wCeKF z)5*!_Xs47q2FHjE2t{hZ8RW5V+kRX2LV2IG(_!-E0~T?3lZH7I_RK3zA`!Yv+`kA2 zXMxJcSRZ+X8kuo%w#wP{1A9n&bLqL02P{k|awzqEbq9Gxhy|HV0{a!3n7BJDC5b9| zuSd(4cHCO+PzyFh=AK;7JLe$ld2u8f$}R7CJb@Ojo@}S^wdxF}Ez6ODn>d~+5FM(V z$U`IcS3G6^Sy-m1NO9ZR4)@^1h2bJpPQVz^O=Xxy$SN=7palaF0 zO$mGdLvCFUXGGpo!2+aGx8cn#h>rh6(t%-WJs|=SB|64Mf~;wbwK_kWIBFfacHL#4 zOm@XNTcRd72m_a9wH@O`Ve8V&sEBFhV#F_S*v|&+0y#CMF3lHlc}X3^g;OSX6fctX zXDPCCtgGG;z1R|Yp(o)yB_?$sH~Lp*Dtnh{PwI#0-k7yxrqgeQ+R8f2T~2+DypaT`k=gjPDQk;CM<3->-XyN{{DZZ|)F9EkId zUT{n+bddD%IR9~utu}{kh z`KuN-yOUnG#9l_e(s{d=NRpNJ7cFPLg6zrSu)feRW>uwrt7IaZS--mI2rHi>n&}Ed zLuzEMQ~Opx;M-QNzdzG@>Dmm!LzdPE9nB$4vPR`u((OlSS8IE^j3~I=eVN`*f*%@G zo=lSh>SMRrS%zD~>x>!T;cEnu?eAGPo-KG&;Iht(*BTlav}>=lI|-~*SxV6-)tKHK zw={<84Dh&j09F5Ic@v+TijAk|Nz=(k=<^lx0||_Ff%?5--L<)YkL_h_t&`Xw#UO)7 zT7cVT0@T3r5QRuF=0vhYb>g5&@J_J_%cUPuJ5-h3%BZw%*X;(PRI<7nd#9?f^aF5d zwE)vwTMDoS>alAOIQig&XLJbepf@f%{@98sJYM?~|7iYXR(c3lLx&oB#LUMQ@NoW@LeR~3N`S#cHX>W0;y3vhHpI(i6 z#k+bF0`+bV9A?&aDOtQltO+zy&j^}%l%lzmeUrn);1jwul&l4~$I_`yZ!NFu6dytM zUQ#KFc>JiZ;t|7%K0gi;etGx6=55%W=9!Cr61TQ+Vn4_s3N%ove9QCJ>BhF zfsZbue_NTI+x(eGNJ%w9eo1Yzk)9^@O9eI{A3pQ?yaPB)HzSNM)di+_bnsvWnXVlRz5J0jy1qDp;t z_G!1)q)ze5c#4%7=$g260QEJWdQU#Wl(=?W=i95jHk_O(U>=h-%pxvgf%z>?mvb*U znVnz+n)g~=3{JyB2syF2ZZ*Bg;hJ zME-4C>_9#A0W?-^r<&TvPNxSU$AXH-o(^R4v5ovWCsrYfy6uytk}AhHSLF(Rc&X>r zfWIwh&Q>F3%c8zpIFaBz`(418q4W~#@mDNv<@!sH0IKsRwI+0JCVISl;Q-p_9O&CN)>bKZw^NEb5QWozFG$2@nUA*f%LWEP1-N(=lD zC!lUxRLuJ`f^|MS{!s>dfBm`*?|NB1rHxtD+xTV~%hoIBS=gPIEm{w4puQ%CA3a`} ziU)h^cD={%_t9|HsC_1O%rZq9-%h}mUwFX~(ugaZbw1Xw*(>fEo4WxY`nZqk%Wn@< zSNM|$3nTX5-J*bJqI#DJMwR`X35kk-^iq-*#U=H=viS zEZS`F7c=`H0s8Fbi&@jI$Z#OO{`30PhsF~S+D(#OTD)BN4EnCUycub#>Zxhp#Z}6h z+F&9j=DJ`yG1@cZ-QcC*K9PI59&xgYWn2(euYxAus zXF4()Y*8@psaZ3dhyS|KP%Y}))G`s9f{r{ZR-X*hS=JB-F82t#{*!ZWte`?7IC_rs z8GBT2ucO-oI8#%Y4I211r}kh5zr5(3(sj!%P>4Y1*>$tXRFg=>6RahH|Anm^m|v1q zkL3}0QZ+IH1?Ugxn-uMQ&q)4?69wLY9z}HURqpE;+iCn`ButE{MkeMAN6a1on#b?d z8k_yW^BFuRv@Ro_iD#1}*%eDYAiYP7(P1l_Gzc|FXd#)B;fnw3}-V`B6);FLGy^g z&H4N}_nnmN=5MWGwIdGMOEF$v1&SUG73V;u8V}e&um!`lj3)A+ymqFd3gp{zYZt=L zsg)ApS)g^|>60}=jmCFkzFkoNZmzs`^+;!R491chym-hx^|mE4VH*x2x5!k+ zB5!0Nh)ofyK`)v^fOj15g?0Q%*1c~lzG`HNoElz`w2&6?NKTtwaO5Qo5IwIbDF4n; zyGU*MFvYxI)!F)sIsW`&R58ua7_tIv|N?-Wn&Sj}`R zZbV)U!eSkT)S80_owu>oJE>gz*fDXfio5iJ&4=Q4pRRP}W{)~RdFBG#RNv=tUR9Aq%WMLOxPL=2Y?KEQ zT>Ar!7AZ9U_5KC1Ac8F4@#$ir-xl-dIy24lwSHM6{4G6(6Yc8YPpKCBT+Lgrhx#B* zdBTP+)huO2S%fir{Li#C&+Go|NkSiDX$j(<1aH1wCL?vFd-ZX(GdFiY)2^grW3w%v5YB>j zvlpYa+@w0l_=#6mt5{_ZqqyR($-ndbre+q~laYLpHles}VtiDY84Ps?#!qSON_;kD zq=6z$01v31TEvZ-A|+O@lj1JL%~hE5+#5Efx2fDB+}tJS`s5Zy8oYWZtfW5$;)LSb zws$%3%}g0mIM`Iv(h`zAz5FyFrI!xbd~7FkgzP5;yS>p+EZYWS!$E-&?wWt{CX_8d z^Vy^uB7_ZdvH3l2pUt5QaZ!i5khLAZMqQD`6$94+)ev;Hc8uo=vK3Wd*<{jxl`H?6?^{nv6F%(TG zLdbiA$v!{cK8HOy+FH1(e2n|BnIk#aMp+u(*+j-zl6MY2>NCR-)$W84EW5 z3ly0L!1^d?X5hq=+b6(XWZUDY=fGM?%OEmJ~5~2u|XRs^})xqL{gs+#fOo&Fob`y{-^o8Q)1JJ4VFm z-Z`CaDhWZS#Dhfj-}sH9^2KmWMKUgzt%GsmxzP~MKp_+uPjcwo+WQQ}zFl6SFdW?n zqeD379O1I{>yw7$2;Bl7+Rwx5Ko)^U;ReDAnhTFlc$AEzQk2QBGhNvS;=$Cv&H`nq zk{{Ydh3>Dqpp6wF(b0Gj)HMU9jjR62I>s^Xr_nLvTef9zU}JJMgFSBuD+YU~(~9?C zgVd>$)BcEgoQ6swcC{XOeb%ca-C&8E^MUu`uI;dI!sYtT!~jlL`Yt5L`cTeHlSK70 z;5nl^Q8oK{b-81Y_ug?s(v?m(_jRVwTBb@u_*iBHFV|u!pER}q@M{N%)l~nM-I_#7 zC_3H*n(Vtdd;v#Thl`oRwR)%FQWDzd!Ojk8xj!9mrSjurXT~#VACNS>y>0XUwhzgh zD&}XyC>%h|?{3feYFWa@z@4Aj*$;l^4N^yRu$WH?z*dL-fEKkBxqNXTy{iZaU>Ksr zsOog}8Fmu^t_cgMnRqo-5W!KxFoGU2-w#7*)#r3;MOf_V_cQ8WoCh4<=GIxbm9f&p zk$JT&3T2wj=N27i79n6(ASUIXLVVv5g}T622iChqai& zFIIf|X8BQYotv4cd4Q(#b+o`fq*mxuh%%gS@IH78?@+4&&oxUg8_?8&zv~!zLDRq2 z_I@l6Ed9_@d>dSvs?h`_?!br&nT9N#i>t_AjO5Fui&dQ7K6U}zyMA>mx^8(t?-HPcRm5FtM8p-*(`P2pc1Jf3|e zdXO-eX<(VNDS9!Z*E(P}`bx}7Bk#CDLGe+bI9zLV#woF$8EbE;}X0#Y; zu^2pgQcu~eoK7phIf*rPl1|RYbnrHd-kLICwdCmoKNaa*@Vw)jOXIvskCc_Y*ptNQ zV@okvmhqrGnO(L2E=Tamx|Y7_Ot&fz!Ghrvgf}1Lf>qVyI@j~QXnxjnM&2h|e+jtsbYu~v@MgrHM;;?F#_)V#t>e4fpC?!%x-2(#$1@Vlk>fmYQBr z#NoY1nlnx?G32tYf1z+&koAh4;=zS6w?E9bw;Dh87Mm3gjxhf4nqze{H@dN*S?}O; zkcYfvSWjv^<>B=aV7Me}9?asn(O9V}e>t>M>vdDEU~!$r#N81G#nVuQfW{>>pEC%} z(J(v`kS|#7_f4hRj_+#Rfke7?LcaI1gJ%^&13JWtSFcte!E#6_*s_nT2XSBeM?}C# zZsedSxFu zl_97J&zi^H<-@k)Pn{(#b#039i-cQOTwwuGO|~E5gSg_S-&n^%|5`MP`^i>%?NcXOWyqHY$rg>(zhrL;Ov(V=rczTCD{Sb9_s=!ZIt zAh^P#KpznzN%3PKs}00=4`bQqIFoIE@Za;3W2j;KmFz5)W8c*Rmo&$-3xg=Twd^(p z00!JqXGs($O|` z-W|?E4*oQPwAD)U>otQJILwi$`nSaJR-IhVkRsU@atHb^3Nd zeyW_3ND=R;>vmL6rmo?2e2Nr;K6nxw-JBpgnj|1JQTWPTs_GPS~ zE9JLCw0F?OXfee;64i7KP{q1&a-{a9aSvu`?5YyGA(qq^)TmBV-gqy(q*9#x9f+a4 zyjSnk-IBvuz1BHBbi*<5-H%A2Ux6s-izXAb*d-2H@i^gaBr4b+;eOOK24y||nKm6n7 z8O-*xcJKqOhaoWHGL+OCwwyDxl|z7D%oxt+wb%MWdQ36j135JTJ;EhamedOEr2X2Qb_# zc`sDqT-X6tpo`sU4KZ-_k>1Qy@C`^Z{Dy)eh%t$g|Cx3pOEsV^d8%8l8qW%Urh^lO z`h-59b(L#|zwlTJubNZ;DBk!mX=E(P=3-Vdvar!5H3~MQwM?ZN*nzaJaM^r6$L&m= zLbY*sADHy=oIiz)Ni>aNCfOvsCW~VRPq&`+2=J1Ak=Twob&Q*k>ixCHcmudUp%M=d z-}7t7rdt2!L2Z3}QmxxZUiz=(<>l?k;K-6vo0Bk2_YJjh*eB)?rRDO&?%^D{y=%WQJgi{kpo<+% z$!^mz(D+(auyk3BZs`FUDB2sxs;^3yi;-;E_z%BR7=tPEPh-C`LSZwwa|GnK`L3yi z4-notix_g(1F*kWCO2YbCM+)U*nR$LZ!t~J7U65gf;s|JPS%67U0X`Yh`{4%mZ_nk z)kC^)tOS?0Bp9Zlh&}kpu|phqJEIJUzW+M@zNzq89T@nPnv$p2%!L zkc04PP8jk@vP0epMr&;;#y~XSxnFP7-JnajY*+fe<4cA*9BtX<^uD>LC5)MN~dQ-lT@69VU<@` zBtcqFG!c!*`PD!{ZNPge$lC)#jb>K3=9dZ zT*UCqeNdG+2#K6WSc|=#g8W=SjZ5c|ug8lnF+L@+lsx1uH%2A-Ro$Tc>=3((RiJ>; z4WaxfsVB1K#BGNNbf4%by}*SK?HGb&AXFZM!8ABdxusGAkL!1l|7F6Ut>KM7?Qq_Yzr7G*@6PLbV+ZZ56*P)OQYWbn>) z_={<%aNLVVqZlo_s34&<<$6r-5AFmtt$jFnQoCiQeBuX*+!<;|J+d8_m^AQ$9Y6n8 z{xm?)tNZD^c0pv{B19ce)|(M($R`}Q8n{ymTMXSt{(3$pEeHr)%%l4sAf{rz+AfwB zNs9QcBM#~fSB(3{wDd{O;>|TB6vcM_f}(7^wE_1PNg*i=;x#||(2HKBhL0=eI4Uf# zLS!#t!iHz|6{?tst2_E1P#Yx-!H-Eq(CHfE0ne6&8)Yf8dLlL5RJuk+I88v|Um&9T z0KrN8aYBAw!iVBC8waJci)!~psChwzd}_5t+P&=N_37lPEbJAeJ#z4}UJ?;|og;@L zx!3D1zdxB}{A|}6QtQ-^3Wm&S7z|Ab%*>WIDLepaxM?9_W}G`*Yk4)FF1kZL?Vc{! zydEN+he|At^nml=L@X%WmP03GSwo@srtO@(;Rax~tT4-gWF%1@-mId1-`djQV8=%Zf*}z{35{715WFfexMpYzx5i~?U_tYZeX|OEtjh5~cf15uEb&kzhX%qvuO5+*NmiA| zoG1a+&{hQPy*bBJaX7{=+FW0+WXgn?;XJ3VFZ+Q#D~kTWr;S4#z(iiQ91c5|VLiIm z-n>*J9V}i9a2ka3QqFb+Pq#unU?>4XDuFAQ=i%E8WJ^?HmVl_P9WzFlbwrBH0GvBN z015@=4Z?Dww?}^KggOb7o^kS2uF;0~DmcWBVwDV4aP7(RNypR#o~f^a*E=zWIfA*A z+aJp>89*h4?m>!f!%T^g{WJ2V&iLos{;tPDfBy9##?6OCzBO}1ed7hB8(oOj4neJx zorQl0nVo>^PRKcR*aY3YT5Z&vD&0-9E=R=zxy{;i%fjRlvb$rku(m|Xh?5L@UeejL zEE?{L=2_gnd5rWOrQ=gN$Bh^rg(@JGU^a`GAf3BK(k$jzV529(Zal*tl2Y<@`nT z{5xw`*6n+8?a^yG9IL1qgJVajQp;dqC2H~h$se6P>3DsOL|+bEeE&l z-K44Ad8w=5si9oFZk>5c`o=cwH+u$I6wyZ|5TWU`j=+mqP));=wgC~FLhS~EGT+~w zyU1z^rzsv$1GU1EmJ|$d5Lhsjj(+^$cH{_(VaA{@26~cWXutsLH-Z#Fl@#CBuPa%$ zXW<&#k(P#(#Zj|HnsF;TP_<~s>6H*E5bGN$My9R%tx+B1KK;2Pg>wZOKoLiiMkp8l z^PveOaI(yxB>=g5d=V%pdDP^J3|(Xw5L^Bnpile#(p$CR+uZkc627K#G(_xAI6i8F zM>ha3VYoCXu;$K>?q?X-zA(vcZZ^A?yD@RkfIwEA`%tQ4$VJ+5uV=s4g28o8_-(}c zo!}oTH>Y1qQgb2Xjp~FR19v2A$V)wcKjmAgkqqzWIi7Zx`%K3GAtNwkpS@k%JRhFF zCTzWioCi<^aqfYO9PNGiRuBjf)X1vAk47IpR)|MaVseY0PM;qYd3L%;<$^!)WhyHP z_S-((qD8A@Fb$1Bd_FVoZJ1QP>MHtpUOpOX^$0jsIeYq&=je{T!K0m3wPE5E0(|QT zlPfWnifub%7SaBinYFZ}&?POrYqhi=d=~IM1;5YMn&#b-c>0>qoneenE17LNEHmxY zBOh_@wPDWUoz+jwNn#2aGRuAZ4-|9l5n-)8bi$iY2b>Dd-c!@!sx7Yeu#)7aG{q)E>tyX1s z%rBwp28H;-WpENqmbUo9KJVp6p&tn>?b{0H#$`<;{c*d(^*jXmBEBk4JzfdEFWB@R z0FQn-J(+t#h13v=q4ySR7q_F?rzy)Tq(L1Sn?$A41PkYwD3=mgUXCMmjEa!_pk z5<}lZnSU+VxnCv zR9xq7T-?YQ3Qjh>9ZND1N_osoiQ}xRzxt|^LsczDcfOcKZH$L4MgBI<15SYT`AYuj znQ}pb%d8Vdig5`O^dR;O0;U%IV z0SgkxSG#9pnQ(+yS3&N&9*1c$R`DbI%E~-=VE8*HXzA2UX_>?!i52WL57oD_j|7r? z5tC6FN>y15W>wZkRVj!CIud7atI`IKQjLoj$X{av@EZGH2-xUtz=*E3%UlG3RRwNrFdh&u~k&6quTywUt zVhK7PBWKIolp>KUgdU5i9jhR*%yw%q3Nl88hyjVG*9*@h4hE5_>B_tQCTgeSd(>O@ zz97InRF3`~`l|#j1cDeqjXEOc0!V%^+pan==B1_z!Psr8)CL38Ob3M&VGhQA(1$7> z$Vmi$uaKio=hx1nO>XG{SPxZlD(5sz(d2ivDg-F#59KS^WKqmoQvY-X^p-WF30T4U$_}u zMJUePwqLbJD`PLf(uopmGK&f{ePwA_MBLSVeZ8l!xr&7+iz$4LG2If)HEbYR9SC5W z9(^&fbMP>1Xs>DMXnfa)Yc2>J8{aYP<)4!pqci%DpDQ~c*l{IxU(i_!s!U2czHYGs z76s<{E%JFTjJ|Ac>|ZBqzapbe95;W+>W0m6K6lf77` z-I&DqX<%HAZmIIXl;hzt9ZW*M;Rc|VM16`Lnoq%SV3uyRy2e|{z(7$m zyw^{)>t+LQ%OH8Y{q!DaN8|jX5)kSDT!imRWO7@H>N1(#3cWKxOtS>n#A703=_Hm_ z=sv4I?4!(UG9x#xg+1sAxEPai9di0Wi{c)YrAO zH+I%_Hn!Kb)wg%lb+oZ?GBTjEa&xe=q_eejGBvZNl~ET~R)Pcoe$OM*{PS^gg$4iw zIRXX%`0MZo2g+Bk5P#tycbAh@0|WpNBm@AU{Tn!b7+czYVYM|gq&2a(`mgYuuXI@S z@?(Hqk(tUOQ+cBtPZw}H*J?K97KDQeoXtxJ3t?Xo6$iG4_@qM2He|Fxy_1D4O1<&7 z%@25AzXgr$xA1SQJ>aEaH{t@tf!Tsd_rqB1;IMvsH*@|a19HU;Dyt$u3vR?O{J)_q zWg6B?P*(=SomteKdom3H1Kbbe`Q67GM!6D2DsZ&Id{HCnWjQsp(fFges*65iHrrK^ zoaO?_V_k;u54>d2g2uJ+dD&hvcSv{bw%l)gn7_ydU6cp8&edVkE|_78jV&X@R*Pp{ ztPQ7xym~0XJ`|s@ej|7%LVizGs{USepV21kvQ;I5V8PzuzIgv)T?7lAc&ldNCIiko z9&C+l!i^R50nTgh~bNWZv+4U41bq@hWd`irZ)C&|1Arb zc;voV2!7==#g*-!17XKRk*Bz>MPSzx5U{l;jAd01Nm#;OeV@l7tj*w!C*-D~1Jha^ zLihX`*XT0EGooFkeUYNx*a6OtW(y=ek799x!m3wm;)R+1@% zad`B`wV_HqX6NLm?E#`%w6G!NXIPi5pXn3=f6|KkI8O-U@0mJ&Hcy~aX7gBUGp~kk zd`z+>g#3Yz5*O&nhvog%Y(B@TH+fqJ{J@^R#|jHo>K_5F@e3#$oGU&0Iv>6fm=)$j znpu0yl*@Sci5|=sfs6F?>c55IoPX!wgZj@5{y=tx`U&P@TKBZk6Qg8CsbZ%dg4S;`d zMd<#RQ^E(h4c6{8uXe?-5b_4MfJy#@3Gi81dh-R-qScFwS4n4&Vz2 z!1^~(m|0uf7#ZlASsNL<>N+^;J37#s85sRFq(2n?|5(TKH90B}eH`$s%}EW45sC92 zOpXyM+nhbvX6SQ$5<<4HiJs-(>Z2C6&crRvBUCZ3srsgo_lMs!Zl0y5s-AhK#_yyZ zJ|?evK13W#@z`>!rpYQ|k7b6GPTR?-CX{p(3yR$D6u1_c_Tew24Dz*iGc4lb4=ik) z;l4)o&)_q9BWy@I_IwFpQ|eSM71 zi1kYe{iP2q1l0!$MhXTd3MTRm666!p*7x%}z_#6%LJ%l1Uatupr|*bZ8Qll8F=Otv z9iZs!TE9KmPt1T5f`>4G8g>Mxx*EVp0~5U+J-u|_%J9%wKYa3y!S0@=9t;>X0~2R@- zq2pj}Gl2snZGFGPB7`A|1K{?6FzKU2{FJAM677Ki`b(+*uiI9}+tB#l=^o@<}XTxUL*H`1)&6y!IZ}}X8{5wV|)jk z^C9=O70K=`SBC)+*dh2v0J%>uNDfD?>buQ{<$D~aqWcCvY9zXwH+%o-i zNE1fJs~URxc4IwLS8%plj_+?MahJY&&;g9ygZ`9ma84w#`hVy{jscpdw**WDHktmm z*PkBowu6+I`}T&^9HFN!Yi?(fX>Dy_ui)+NEFjNY%e~vp?(%;q`}IpD0Kp$`Gwxnr zmk@#f3**WDH|XqWW@W7FZewk%>u9fU?O^6;X7fJ`$U+4}&b+=DJN{+n$o~dLCkJEu ze;Cn!!%;(%E4`2t06$24J(P(GYTEJ8DJkj^YN<#%acWxH zDLP4gBNGUK6cV+>c#ZUwqO`Q+^n|P|?e7V4u_*|Tm{=*Nm;gBhA|@ORfD;CdwYmK$ zU|=R-=-Fu>1icY{eu#A4$9VWL9Ld`vg>L^zaK#164J1GS0AR@e-tfKz_rH%cHKd|f zl~8z{z39?#E|sKFa@4TnqZr}In&PQ?B?-$*CvVjODy9H%0Z`bN z$2|DX#t&W`vR}cGl)FjC2iVRXg+nR{aANR9J;tZ!Y;YvFTwbJN$J7yT_2WoG+NnLY+v^p z``SZqS0)j9G3SY>AAEGBwDn=q!Ka5-h+-oUN=fux|K~O3^0qe+bT#9;T&^Qsq?-3v zhT&;^9_}MPY5w4qyD`AJn|IT9H@K8(H&wb(muxo**fN*A`!8|;PK2{MsCw2 zYHOErFG8&R;A&u2aYo?rGbk$AwOmo~+mt`-YLlYkATw*wWa7LN`@e&Gu}9T>Wm5*$ z&KKqKQ+C9J4;~@!i)GHGqjwB=US=LqV-^S9j zgekq53Q|D@t@F3M6e3S5Hyri}5=?&r_%&KIbmi)-L)LWFSzv!ly2mH=oBtU%G!WGu zW|Q0$FSYV?T0ub3JR1tWqp=21R3HIFz9J8tCZzTonkp9T4|HJ>1gY>;FkIA=L9A}w zEC6Z?amzB>yomlR@p7e@CmcvaQLW#cT>_<Pa)lt$gz{Qx!>^lB}!8Fs!(q0bZi=vuB20LFk`43^^T}0Kam6jv!ZM7<4gi zzCJIf$Gf!8;i3)bqZ5yvavIJ;An;M}d;9tJl=AQ-?W%=Cm?aT4bvJluu36)ecAt*MA{b40Y@_+KW`E|J+&C3r#`PR778;8@{ta+j zdx(COlxGOwQXapYKA>#8bHy2k}8%{1<~{W>%TDQ3>~eIwhj z2X@}M+`xMy1N{1&Lr`~2($`p7-Kf>C-<7FHy^_`7%?Tsz<-Ts8>U-7Mp&3_-*cA2BdqkwNQF;zkk zRGc9P=ry6K5adJtRKudC_U}c*M(YzCMVQT(qtI9i;O_m2A&wYOp%Cx{(8&+AIx)^! z_gSkJqObbKo7|V);zA2v_%SiHcjYEs=HhYvqkL+#?25jNb@UZnD(SF7lUtB&Nsg+($lF{MStApP`#?f8%|^L*}O}Ek0W|TEerIYZ~AK6 z!Y?#sl88)xPDIyTx~0idFSK=pj{7W3iM*8-Y~uqLE_yF6R;DKXcDq%G%J?{byG?Q5 zv+?}nNBAX!dzyO zx~W@Vv|BWCR)`x=7&Og!e>NWdb6;QWEuY1x^YE`?K4Iyf?P7oU_g{doh%NO04Ra^H zUhlwBKI@2J005}20sgHR?ypxb7RGKaHugsU@c4jVlf?heG-h5~Ic=8{DdW!AgjCnW zq%$m!IMvxQ+S0|vq-SjWpP=1Cg@hyHB4s^T7VjL$7%n1sttQG zdl|O~(r(^u_LO;^+Q29&Q42q>45Zc&Wm$`=45ZgkBq`2E;Y-;F!}a0L!!xgv*K$MMOO(VQ-%8|`M~CDHA6ZQU|vnNMTgDlPno(vb`+EM+XOZS$LV z3UL@s4eb(|mN-=te@n8HL^(^^cFD+w8WOMec$VQJJTI2CXa6Bv)Gw}Bl3l=(2DB~q zP%>$a8FwEz_6>CPwcY&D2o~rN}hZQ~$KH<@BObD)pG@E?!jb^6QPfF;9+CnqN z&37zy53?u`qI*A*s`3RX2TpQsH$1{NP|-j_y>C<&ZA-Ew(?nucx&7EnYd?W}LY#}u zIiZPWBBJ~E4QJ%dIOEF}tZig7t`IIA+VA2&BAS3xM8M%yNfr9jQBPqZKOWe?4nTQD ziXB%C{w|+4XV58Umzu_oJHM&lLw?*Ysv zmQWhrk^!^G8%;_=|Z{~B&I>gM(E7$>sc8J)8U zIHfT$va4R%UIvo&0$L@BWI4O0DWe7KA?Q#;1`?7UGPpBhW!;J*u@?3r+W=+gYNEM+ zx6^*8lTXecK{U4mD9dN=pZC(5LRNa|FPx;Xdp`(ed2bX+!EF|p+n8E|h`J8ZJ z_G9Q6bEg@i>B`B{fN0xS6H3*SzS_Mz4Qr?(z(hN;wZGvBq6v*l-%(JUT@%!LH$jaV zl4*>y*J|LLe!yh55*U6>wpdUQfI1ys+`Z1uLn4#LEUh^GL1harb4^M;Q4REhoWWT& z?zKJAxp^*tvYuE`kDUj8P5mO^oME*U!ezMiN*5;aczXDvcR+p~(vi7jF8 z`ulLW4&6*UDfVMbd9!jo6ol=R9$B-g;YL}B+_Y@FQ+LNAdCv>?HZL#mlB%+TWJ;i= ztT4a@Hlyzfj2e8r;*NJ*t^9S&QfQ>Dk6Xsz>}ElQ3 z5M5%Q0f5g+@VzHD#Rc&fdqQg_)oBA-J*z;(FlR2lL!($t_ij+aKr(n8{;& zo>srdt>`-GEQx?ubjZphViuh|{KRbsV5Jh%S&8TBJv@-O;HVvAPT|x8?TMSVxR0MZ()4*FHW8NcRh7>)S+m<$JTT=B><7|5)KT z(`HkODX2C&kPfZc_)iZMW*x+0!TC3x_Srg11uM4+;Q&>M4Kt4Y!h}u@h|9*EdVAO_ zEWQFIb=0{F=#Z*y8Xue6iC-#MS}t>iUW|1mJypFiezxnE$yE3VujjfcbcmU3Bi;Gy+hx} zax`b#FMs7G*i;u!9Q0KsiZVrBChlqoYjBL7W6Ix;K%Of?+m!hN2}j=i;)dH-6LnZ zQfC139u$cnxJ+?w?HZh+9M{bQWLHk%au@xSrXoZ&ZGejTDE!HQN!&(;=QY!h074=|sWDcK5|DeIP4TJPwz#=Uq3Tv2~?pIvU|h<}zi)*Ss*n62cS5>9tM z;rbAcZ&t;rtEFc8vTv4DM8!yoX&1!yaV6i`FWk4LcxyFF_ET6|iyhE+VC%w8oVV!a80hPl)!u#= zSt@B1Cs+8pp+2R3B6r|9R6zJV&Jl{P4PM}Hhw?Q2G5;SFnEXr_H`<33S5*h04a7wbh>Mp2e3h_CO8o1RqD~Q^6pB@9H$_d- zldRNU$$N)?#<#);PLhY?ClV~7S-=9kCAN0i_0r8ESoxYP#h)6$;AfYS8T|zeImmdv z!2RJeeHtlo%&mQX8HFZ8%Uq{^{_Qmuni0>w{(Yw?r}gzI1U$0A;@q*Z8Ch1oLR^`^ z#mP;6Tl6(cC6a@n6>x}fmrpIYjJeq+@7U~u3arcIE?`yPSdbB;&X}d1|FRS0HOTLc z1Ih608lGf3l(7Iq>?Aj%NMcK}p~c8AHLGYwcw1_rHL7apL||L&66Y2-yN;f=0LJ8b zl7_O%wt{5zQ?uoT+PKlk9jmd$3}r3O-4eKbw3dOKZqD|mxMtxDb@MvKbr@`$oY7;QV5!~RTrPNRt>8D#0p>T?@%&tI|FB$STjdQ)Db zaSA5;Duui`7h{Qm%z!An7_BqYUHP9#Y4U!svYguD_YB}+Xa>E?5Q&Wq%48BuHtk7f z)H(Yh%$2R5qCw1&BR}^&5PBFoSNW(;qqGN=ZEQY6#w9Toyc&g2b2E`tr>dGv066V& z`GetHCG%jxhU{J_;e;cEt@?LCs#2RSyk_qHr2*G@ruQJ)C>uzGlXl~ZB)U!1)KR9s!M z2HLp02MrM13GTt&9fG?%1W9*r55a=FyL)H|8a%i+BuLQ4HOcE_=FQAM@7_C^cUE_= z?sd-Tv-aM#zp7pJRc)t(Iykx9_~lm83%Clu!H(BRjiu0~R+m^?>rX`EOAWuVYJkW-g@X!e77ii>PjyJtvfLm}DT0+xM4K6G2CF!oxWtPrW8A@gx{_MCB z-71P_vCQ1yxh0hTdsU<4)j)QLPhd{*rchAxm#N8>03FnO>Vn1Bmea1c4{wXHy8yR% zJQm3uNoSv*@b5*~K>}tE-&*vW!_hqVz37f7iHDH~6<<@H<*7Ja zxFaYomxrYj9sN|v`LxMo0Y zKex3z=mxdzB&?t<8{rv(J9$|crgUBO;`DZF@`kn^d_IEf;@QWUzz^b5nOnohKN+P; zTpIY1*DRh8x~MllMN4!a&JSbhWY8^kp=sCNhfnaSE1Xz?O!kYCkG!yr2)*b9bv+** z6>9vws98)f3sR@lg18dwX80zx)}oYr(;UQyUo(wiGZdx?$);WVm>h@!GZTNpoqWSc z^tNt-S#&{#z&i=SXD94uhygozH)sd}=m%CY-EV~+mj;J1k|-?Z(H=mvJ-LdQR0yFchzS{y+)$qRmBt-50~coZWs)T_pPkr)MC8buWowzEPPReM7#QZ8?$&GgyA*uT4% z;A>BrI%+EIa>7Vpc5ZtsW#naefAX8b(w9l`j1Myk18}VfxwO8tMK8&yw<^RnArxn9 zrC71h=R#@>)I3?vqU&~pv!9E*wK<`2(`+NJC`F+v9wKXQOnjWONK@!a?x({cz6R@H z!Ax@^{{**Fbu_MU<&6VXVUH00*(Y#s$}@KUJXPNgRhJb zVCl3FUFDy|WbviIu<%Nlw%Z_giC%jL>9^I0FToMljJ^rrylT3ZkI&&siOo3Uxg!{* zX)2|7SDHiHZDQ~s=ha5lZRzu}+WSp2`=m3NRoYr#0iK=x(3Zh_)zSsif8P2f8+R&R zU0S|>6lFR)gKzz+xHl+XmW2hFlWyRfc(~OWo+51=7(RSO+iBzb zPSA`&MG3v;;$SOaClG>Au9k6sTa)abO*DG;0}I=KvC|?Vk=E==*)0A<+5^?v6k=qobaw^_7f}G7j}x zDP`mlqd!F2sed-&NajXs>*G0N_4d_AN+_NKe1($jJJqnn7!u=U+NN%+a47fY*?aQs z{pbC|(i0p-;%a&Jv?BBAhSNojrUP-s{Bto)EDG6>D5=a$Cx?^H`?R zipM@mLCY{Bf{fdawO?O&LeF;lIn9SB{n}>M1@R5N#3}i?+TnF5&(?D4(Qajrvszw^HdXT@-z%QhNYFAj1?}o)|Z`&1!7ud_A3qkfk;$<~k zVw$(%j4oI0iL;!+u}{tj?NJ^-5s;x|pEw~ru9zKtMw0DjWrAigONH}U5p1==npONM zuyQV(Ew9F=LT>eq3*xP*z0K|h+wB9_R?e8qI`VC3o_LvjfTA$jI^65a=r;yDz~76( zGT7=eaW=1nQl9lB!|wIja7DFqWgy=-2+US9c0O5ubDM>`;nPtat@!CS&|SnbiwMaD z8A@G1ZA`WSTlq;ybF|vUOmy$mzP`hI)r~|9_k*1mT}P{70|o8}0S7;C3myC;aEfIo z2Yx?gshKA0Q%A>(eYO!3j}On_oIv5>wzYy61YM!pFOsyv7{Cb_7OS?aZ^jXh=!X@@ zlm>n+_?MQMXOgA(V-|kK!kl=P%ax*b2@QU!jQnHm!DZ{jrEAy=V%AH+eTi~0tWFLY z{7cfg2089_BG)GN*SW;iZpqq~b>a18QNG<>2-nztgDJwLD)ar z|72qy8--KB(QKH=ZHS@&spV1gmhT`=PUkjHSglKdEj%`c-wU@2oqmUB+4zwUG9a5; zfV`k(fkPa=759i%XDt&7g-{QHY|z(kUUB!#sm~KRM$urQch`vY$he^ zGupG48K{hR5*Ddsm}5qtd|i~EBeo^XR@&IJyE?d?2lxboqsq zvyTMID?+P)GG)E)O}mX(L|d3;GD-)oDnQ<6HdZdSh6v6m*)TWP71LC8W3{tKb`S0= z^^%fqWru@o{Jq<`9}3zx%Q>r$(U!&Uid#F&@jI0hE{GYb$dy(~*aXd9GVWgHA#l7E z*(#HTndUvtSQZ<|BH*B9C|k@gKHbFE9wYK zN+$ececM&yOr=bZW84FhiR`vLoiR+Fetl^=Cmeq)Sau;O>TaVg#>dQQNTJUjrb^RX zfsJC)!_Z=u;H6{*athi|OqDe)*Ua4))<@v48QhTYzIQ$^R0T$qTD_+rIOG^7nRa;;j1F7I4jv%J6m3}#`8 zAg4~I2+JUO`_|zdzTMLK%Ox2`mQjLC?`~Vf16r4S%6UtnS<1|PnWNfoZ|+FBDvt7B zwpO@%2}ZB^njo@aBu!(?NdxN#ok#u5_+!(K&k>FV5!&y}T2od_lR+Fa{4MM6&~?xt zwt3pFUXuuVkq#=-rZJnJ_69nL1L1=#8{gw5zR~Nz3ck;NwLM(BFN4ciZM(6S@6O2G zSJPbS&N*dDd6h{Uel_4fxA1NOv=nD8g-0Y|i@D2xL}<=Bej9O@!z6t6mI3|VT=-=L zlBkm1p3-im^p?Y9UcU1=lug<=!O%fM_>A^K?Hxn;4|y;1C^Zw)J^n8|5I$}yhj|Ws zD8n3rQ`)!`$S)er?I81gAkg%np=N$yg7TVH-15NIU^G6yVD5ArxOl&h8Mo5sxSzVPOmi2`MJYO`ov7PMk?WJc2~w)o9jW8oF9tVAQh##{ z5>nb!J3h^c{LL_o`jKiEZvSxbJ)fl-1D^72p+|9$P_Hqk#LM!yKbw-Rv<+OQ!Afsu9p3;LV4g{8C2-|27v zaR7SN;H7Ypp>FE!B0mthfDuYcEq(I1FQhGA?Ive)o;Z@Vp5xX>yVT!36@x7&;Aje3L3^g*dya#^)EO62S{B z0a*x$5!kT0YR&o}kdc4ZFsZ!qdS{LpFgfuk> z?tGz)_}eWnLN;4KFV=VmqQ6CMlB#3AuP?f3j*qwDi?Df8l5>Fb6l5}mmTe`Eej5O==JzvFm2{=DqHEIh9<+jhhjb{4o3%RsLp%s67G`{M$ouOZ4!5{>Rm zpESKj-nAz6SosKpV?)HfBg)k}JbK+li1h|2p89+nXd98wC#Ve;DvZMnr#X9M zco16kODst~+Dj5j0C-|D!TYT(=D_x_z%nRZeigIs0r??Ne?_>o42MqhcTsyWVmvep zMsZhg<+x}2d=nT!4&7gPUWz*t_Dv42Vn5~^p0>e^I?TC8!xf5FQp8(J&Rbq;R+IX8 zT8Zy{zeS@_r5fLjQ7JisVO8}5sQ>O!+hLBQvPR2g!`N&lPxZG*|LAo}Si6vS;}7kt zc;v>mwjlLpT=xoKkmtPdr~~#5J^O(QCZQ7Kxvefz4N}Q9>u6PCVm5dP)kMW8 z3@V(O(F>$U=y6=2j{E3pMs*`1R~u1O{N%;y0Anyw{Z;rXefcNGPsOEa7g}SA?3I$S-gC4hNG*%C zr&N06KJ%C4T`xP11BLg$zbpHqQTaK5DfC6-O3>5r*MF7uu(W&@7*Q9{%JW~r)xWZJ z|C1!Gh^Y5#kRn6c*wa7rn}pfZVz>%#)gs`MlB%Gps1++kGH67x4+;9XU*tg%vK6Dc zdPlxEbR2w*NWUS=yyz(_yZbP?XUffnHNq;1<(}$^?R4;rhlswgyr)ecVoj-2 z1s3`n`bX_EYU2Yz+LFpLy5*nbU9kB~*hq|Siw9z@m-N1b?|ZN6U!Alp`5pFRye9dZ zn)x2c+$`p{=FC>rACmR-cb)<5z1K^fuQ%%-#hItMKgwb=?ICA1he~%4WIQdZDrx#8 z@Dy|e#y%on^}Ej%^L!h|JhoM-)aTs;x~Q-ITp!U&eOX2jFqD)-8e)zz)`L0T-rg3e zje^X!Nu~PLF6d?k6#b%G$o+9u#1FsS3Mbk*IN|m_!dYYy;hn8l!l2sQm^Zh=!z>EM zgS190xgLmw-jV`FUIRCxdT!R^T4)gwa)kRlTx?_%BQz#Rws7?cEys9g4j~PcFP#}l zM66;b#w|tamooH%D0LwSzsCE2&Q}ro1M1>GEd*y93wJXw8!I>0e=-|>u^N88|IhRl zN2(kwr(diK7^RT?zj@?8NU*;i@jo%`f0JNA+?l`W!g$EISyFfk@O`h5DIgMrlKyP% zDHd?ik@Xp&j#LQJ&G*~A8Vqz#sL9RgXDFQ|$FWPK3=pF-`tYmc;xv*Gx!5eMaS>y@ zKs04y1|x9J&*=2@xe5=dk&4W@{vCERP>+_J|K1{=|E5J|t`;sff7Yz%e>6)DnMMoo zog_354&@dH36~0k!^S{z`>FG8e&#S3x8}nwXUb^Q&@eKoqW7@ob2j*aaT+v!J-PRa zB){4OL5ZQZGPe_)EJyuCdldG2vr>z0M}yMm|G-MiJ| zyhTPeIE@>jT6 z8yj4W$$W&&#pjDc%DFe^nAQu?CLDx+HzQG>e$}`140e<3OFCe`%%~bcu+>=WSTvCI z8CKyxk80Q6wR_%Hbc>}~lgb*tlDc$F`U5fPX;=``t)8z&08>`@Cl)2w!{leb&5N(S z9w~K?W@Ryz}Pfo*6mu*n_lmt9o>rSKreAstw|uP;oHS7Dc-Rq z@@sWDqfB7wOAaoaXTHrrR6nRx-$o57W2i`@iD{aEH=EG#x#@C-8e-&+#`G%@X!bi*pV)k;1j~Md3p3ZWm#bIseE+|K14~ z(C@+jp8@{)A7GO!EceFJ!S!zxMOX^Xe>b0d@RrHl|Bi%WfAF+_s*`_m@6Ege-2V_1 zK@IW0u^tVXfd&TlOz{863~BgBW=LfKCg#jR?9Ue&arQwbz$BTr@&XGy8e0U#`UakU zm3NYh0|O&qRKh(3DYd}*w+Ks0^~8jDdetW{O7cBP7hu^Ok^=u1F#dP2^QAeL zwEpT%SW?Y@fxmy0QCyw zLjx-g6Dkl%jZr&}&3loJmT}P`wCr>83S2->$6a}yd+4GT^ zs^nzZe2_@oRhU~d3dc^}z<2!RdLVpKt2pkVUmw?5hL>lY-}Xb%i_>evZA~TF#)#Dp z`PXc0lK0ix=3Tu{uRhp~|A@w1;jCGe3-t1B-yG%oedo}U*-hpPk4>*7Mhtvb(X3;f zg>{Z&h+wTA)cR8|(|26w_8cxP3?j8HaED$pP~4igkBuTODO_Wg={+YcYSi#@eJ?6) zJMKqw{P$WfQi`qJ;e&Pp*W!UR!qiXUbEEfj5h6o=4m$eGV8?XP)T$jIiAu>M;dztHt#`Gfy$O9|bw>YkV4*pn zrWmy|`d-}r^Uv^7#Rz^((>Geu6kH#Pu=63T_MxZ|Z&YQ+2ZYlxFuI@j?3ea|RP=ZE zpMFxzd*ajDcKNI$J0VhiK`GH>C~)7|Y;-sCOrfIOzqHtu8P~D%gLL@y*9+mqZ`d6# zP`v{iSxncflZ{{KQU~L3+%ID;Gc`8BHYwvWU3~K3%ov8dJ=QGgV#jAzE9eFpau9XM zV%zkCdCazN{Po`T_Taw$`Y$QRzc}Rv!!HxfVac6+Z2v_%_^(8Qza*;tFQjtSOth3V zT{7U$pMHJ8l7vK*l7t|sw^F2%Cb%+5Hnu5vvSA)lh)RuIgZM}$(=XVuW{6D)=HR8V zM#rBaN;M&BF*iLgt(Ic;RAlWvxyXI+zogi_fNp#@J?Yu}UdFWZGiJdv!WRuOVZ{VFyiSdQ=Rk!J?L?g|VA%~O}FJs*bMz4d$l5KGUvCC_%^S5(nEbs#j1Kjdm z@E-u_DZI`^at3o8(JYV&dV7ta_lPT&)m*CnbkV^eIK^fZYz0e+e4(pu33m;AO5n1h zhKaY@wq!obd_jA8jkUQrCHuiXE($^bXP6<_f0`0zs5sYt4Ln6{LP}d3Yk1`lPvzyqsbP&;=jxqruq0+jX_(MhvEJnpXc^`TIVxHs2kW$M+b3YkYjo~tPM2y`LFV^4>BJoG$P!6gh0bL~G?G_hz7ny^Qc z{O$v(q(_~#Jbk{9t+k<58-ty^>j(_};YjJ%LV#i3l!;+N4`~N(^;?4obM-$li>i~1 z&mvvGQHX4ocMa(+t{fN{BfYI(l)X&j<@$K|k*$JgaIl}=6?OKRN0IN32(`OX+k%%K z%J_4!rkA#mR(jW&h|QRM)$P@i?6@}JeHUNQYp5)M5lSl!tEr1_ucuuW5kf4~ zuo~Yv_~ak~nqMzvzyuirJ|vr`4I(H8k@#~)pTdp3yA_`nh`&OB6w#*v0!uM)Vu19nz--b;OYY+AE!P5F^Xvy;VmS4)zOOOZ4wuyM5^CEZtpsQZd=p#9yMa*f z7e!I)I5B7I&-!P+_}-e`ZwEZfI!&b6{VsPp%{vl|PcRWG=bO>J*!r2_THup9`bSJG ztZUsb<)7OE%9iP{pK!_g%aUr0)+$B|3p?9rVH;I zq9Y=KESfs-#aF@1L#wXwoM6R{59*CCfv}Wj`1;HQUjijp_05NvNUa^S6i*|u8k9Wd zor$OU41BK_qF(6@BVp<`85yuR*H2RRrxMRsRcP_bOz0K#$m%+-ps^G4ReY=2B?2J^ zOk%%A^RBZ7d$Tp(G7*WL;ySUT3koIWXg=}2Ap8E|p~e*eft zdfvZ@yl9F~X}^8@{@HQX@^8EFO~JL#SqVEyNMbW11L<<*`kQ2IhF2cJuA z0+TNpX=u52@CRHy9g@5CPXfWGeb{_(Dxh+f_j3#Io)af9~ zo!J)U23-s>+(XJ(KxL|@D;1c<(8a_1^AV=IAu8CYE9K%j{Pt*Jc9D&K>Ri5#rf z)n$cL{~1tPj{+W^$=z|@>p2Q=Gk*mG@$RT;SvE!>b2AcYM~>B5!;`L8U=~pBDuQ(K z5{{r)^mn+EU^th#?$QVc-}-YnJ?!=us>#qouw1aY(1RFo>{M!pVv4e5sBeeDDl+9l z4ZmIyD@RvE5BvlaS?EYYI<2WH!Kd2)0)+Stv0m2~nah~OJX+Eosk^fDZh2n{5>W z0MAEVFkf!~8Ii>AkypIHZONp?+$e{AeQIpLFT13GRm_>w;j{}^uk6e(&)3f+sSA|y zKYlTl1w>DMAPYRz$RP(#sUt?D!NAu5!nG$lo{G(j51$4rC_svxoj#zrlg&d17$=4T z>*Z)}5qwdr*c_cMLL8Be?V{_a3;pI{ZC==|zO)7+oDqr%YGHM~K8h@A-eSs1{5)CI z;sp@+G^2+Nk$Y~GmjHJQC9}!_3iCCE>%~I#C3`YmUew5j-5ZEtnirKyeN_vU#ftC< z6%$xe2iPeUiMx1L#`C+)b;M8B&xAZVW&}D-IYdl2=!uK1r3?suDI2Xv^Vb5O+Zot( z`wSV|bw>#EMks8vv8vafBeJSbi`aE#1Fswp=HhTiN~3qORSB?00IsnFl;0`X`4#un zJWGewo586Y41_>^fEearTfVQ0sQ`{lgy}cr4TzQYEmpVH=+Nmi|n3E994=96@x=aO%S z_?Io*)_P$tDXQA>4LE{P`J72My(%{s&*7X!BmjcR>GloJjM(yf!OR5pM&{|L_L^Ri zshhf9y_w&&ce*g~#fP@nZ*%L_-vq+dvcmPu&sAES-&Ay{WA%^}@8ZA}l3x%FoNECO z(G5wa_{N;6z|zy9JKZ2e=-F+)UhoJwWXV6oAQlO7K@E5NI1Cs*^USZRH-NaK2`Wv9 zT6BWdiCLR3(2Z-RnIGeHAXRw)=QdV$BL{`*=L%GO_*A+V?=y$v%7;PZh%e{iU3Ek2 zLeQbtlOM?Lh$IihG$)Pw9E0&BGwT*6;U3>Wd4cK>Mi3QR$jiyBaqTCfz$0vXO-pF&=8yd5E=3#f3#iBlouf3`!gW1EwZxeFF5Qvq9UF=pX!L80ghI-+<1(DfsQM3G-hc*G%d%Xy2)9~&J zRT#yy{=V3-{hRjJJtyDXJf|GvxD7v`?mW)}aI9!fb`A6bIVvU}jE;gQ@ZIacN)k+a z-M1Qa&=f;x7PQw2q!@(hK6*DG4A*`p0oZup1oM4)E!hO4?;_E5x=?{RvmfC}uF?FZ zCKULL!*bX=WhS)vT*BswC-8TTbe=i4lqXKpV%AUcy+GOGIjq*Xh=CSpusgS%hdV+8 z!F|L&4ff@-36M`%!#CvXFg zF9GU(fva8s#xLTj6c-N$9ZF@*^J8#d!mj!a4x1~VVyskHsGT8r1nPI1A-dw5L~N&D zVq-r6E@QicP~h2aXc#wVMp2F`BYFvhmh>X`-#8X%KPywQ1NKhr!m`&)rUzi*!Byk_Lv>ov}s#~G3tj4iWfu`E=xw2#r zY%@TkLoP&;llBuT!_nx?)hKkxdr;iq zsU8Am)>QuFB?T(9A1tp7xVzi`*i(ImjSlNek{*@Acpkbp!4NtrOTO9!Do8gWCOVbp?QT)_ zBU250_|qWMSzptPnfpofyb+(Ba&m5t#2lmju6J9aL%`450=?w89z z$yhFB8qQ1r{{=vNAv5kHP}>~FMSMl&mUG6z2o(FGQnbSc7*>m-QB0jm za7f_^s@^5rB8Xk6a3E?$%kC$DQ@a38_N&B}qK?}Yen2%(78)i~gBMh1BsWSv7BVlH zHl#7ns`26gQ#a(=U0lG0aNrowYIws*BAY-uOG%yKoK;B7yiJxH`EALvpL8BN1V73vUnjmM2?tW2OF4r*H~;&%*BDZ3_wXOyIt5daB={L6 z>u7j?nc5DaAMdeqwLPI|RDP-CIR`JN1m?jqAQ)jY55==s2nq&$;wJu@BDx`E%B-JpHTD`69N!Y=&f2ET zZ55X#)%7bQ;b>7lvk>7TkajJSvKyjg0BVw#E3ESW^mlfPhnwOBx|ck!8~84q^FfN} zJM8n zj+OO<$-;kG_v~MZU;nZ0nFOn>1t|c!mwTvWt?fGMs7qWGt|A_a?}LJ$G-Iw|t<6B@ zBLPzN#Rz>Lj1YPyy!S)wrV~?ZmM@6-cLBL!Z0jR zPLI~mP|(Mr?GwYa?j!n8#N4xpxke1r6w6@(eHz%dGdaFxrl`S*qEaI(h@Gdb-aGnC zggia>4PR8B#x^rwhGcczjN8lEnVau!IHr{#@L|~l1o}&gWiZX*<%m03kL3WHAK(L7 zw;%v_FxM~i`u!U3jmy9JPJkLG8_vUCa?=yR8g(g*K|DR%At!~9da1=q$X0bwW>_dtbN*^~zXKeX{HRU7MxOBa^j`4oTN&AFr(y{pDsO{gNk}5Y3zU3jY z_9~LjOt@(zEAT`1$nDhkC9@Zy(HKE>fZB~Wl9YSJR9_62U&D~4bzm&3s!DQdDJ3i$ttTfmw)sRsj*&4sD;wjkk-|{ z)whc>CgHj)LaG%AV=tPKd|AUB?$Xr*-ia{Jj8y)ro26A>c_rK_`~f1gey*DDczWto z=QB6J(M%l(?3sNfZ;X(Pn1sgCRJKBwN~Y~syD*>ELhWNG=OU=7QG2}6`YwPtyvb5&KDmtNU0-zEx7dcq;>?g2$|MLm0=c5vCy~(c3_DGUa|VKg z?-R7-URxx8oh9;Z9`P#h0Dv!yUh*d#EWO-+UjOKhA5(c5rSv#4<)O17gG^N=C>73H_6j@!|Q?~5UiD17C zav==)JHrZza`+l_D1}CQH#4O{=(1s zueEJ1*M0nMbRZDcAfw}_9P@Odg@@_r`%RrqpEvN@5WTbA7|t|SKximQpLzONG6x&5 zXubHSL)gAmgjf{>Jx5!Z5xz`LsZ>e~-6dicnBU6HmJg+=3yZB86z8>)P{_&$Rg&Z{ zc&`BXdGu-wtN%3`zgqevjR>`E;CrQZ<|59_KKVh09_FaQKcu`xMzOdPf18G z?}|tE1u|Yti?6Y->=<@nOqai#W(}umbV5mD&wJ78jkw%$*R-?M>>-B6Qee@%&_0nPZzR3&#@cjwK|1R_7 zV&UZtEBE}n#?yZiT_aUDa#_+4{<9%!4@yQ40uXv8>eE5oCmb4rz)YMuQhdT~Jyd$@ zn&Sqs1KY(F%Heak3X~AM-h7mHublyq7Y+p^Ot`!0&{QOvbsQ9;aG{W7yBW~Co3Xb( zpqFcOw@s_j3cP`{@NwWC>K7T|U3%4#x`gQR^W5tzxs@M@IoDqg{|pOu01_L7@g9yR z@g*Gr72U%=8uWf0bMBkrvGwT@`Bfo#@O(jTA5GxknTcXHigI~C?(24Hi3XCDSkOO@ zzOm5FbEc`&9^dV-cPQ1nK97*Kr2d;9y$iV*#P!kCHK*+PPBq0pAKYWG2)V}rel?%& zUz7;nlx<;tGQ*zC61Bh0iC`6_>X#ELt=YO?kJ!uhx{vGRu{n5n+E}0Xs6iXqANuwv z$(X8Szu+`%YZ_;T2`qkv5N(r!9W?cYeHpbK6Xshw|RHeCJ}gB6X{yClOML@ zKksLa!#X0bp6!`3EK<1n1x_z%RvqUK)oE#N41+3avRvxQfhe-N$bBG3lD~sa6V$`m z&F^a2vvBn&nVt|VD?1oMR`SuRA2$70{2(06V^e6mD%=l7f253@w{R=jS6~mNlM59ns$6L~6 ztb?MgYY#*p8_c;>GL3W;Nr$T{o%@4#C#l3eoyGoq&-{p3O;p2b@l&g!2j&en9b4OV zE1gShYHFQ~9Hgq4eJUHM=2JN4RWw-!oVj{G((=EDzCZFkTmQGi3t<$;))4HHRiONS^wgyu(m|FhfO-wT}ZU_E(Y=R?kzsZ@fzK zfe69@-SSoZ$>L6fB>Cz3LCLY1ALqZk6Q$M)1Z6Ywnx<^pt`6vrjMh-;e9%R^g6RM_Kqssz+$!)^Oaj+)pcUu3vYK!C$t-=KBI8AP_~HN_A0Ls3wp7D* z%Sicr^X%AOMn=Xi-Q=xLf9%w@VTP^!y-6hPQP-pbFSC&ti{hhiHnAP8^<($xJ>7PU z!S(0QXY>2sj79hQ!(WOu1-`wF!SR$F0j)KWu!#frF~NNs6)Zp3#d z1s#TNj_JS~KC+~RtmLG*(-%?~6jR>*$2m}(f1=>85VgH?<+o4@n5Ap*XAHuBD|`00 zDF3er^{@B8k%Nyi{kmCoTZV5kn`cit(v>xz&tZU)u zEPuxF&TB2;MCHbiMCkje4^~+Ud!RFK7GKl-`~sI5U+FbvsLY z+^65r>TeUdnvgdc3)ZP6c6|Mzkz0GpfpY3+uijPTqD|e;pZdo*UT!6YSg-4CNjg18 z-tedOF%T^k!jqJPWm(*#(M?L>^~=GOIuI73_GI+uv2aw9NGGN6IK}Wdh447AF9qa>=Yy$d(Rdz5+~F4tCN2Ef&Kk7Q@%c zBE8H)@5UzbH)Vmo(t&8|K&~pl^lmgFe+nXhQ6hhM zB7bcbsI3kpS_d*w0XEhE*$VX~mxJGX=8OtCWL%Sn8FLTs1(D-sOR($R;(JrRM+bY?-s61y8I;Pys_H3{?x%uMw zX`W`n*_9qo`G!2>tBSfreEyiAPs&Z?Wug7GJ&B1%>!RO==nh*%0uA?lnnWpG>X&y? z#qkeg)E~-;l{|jVX(4;KbwTRBYHUWS6~rOG5_2M+zs&6JNpfA`+q-8{5)Avg_cDx< zZttPIBMp0dZRK9~-YTKo{;24lY1u9{sAD6*DG{r)?Y48N%!PeWxTV1FNg{va8v6P- zr<&@VtA~o<@APJ73x)5b?6ivYRQ(Xl%rc8t6ci=M3<9Vx8?Bl|Mw@CBImx``Day~a z7EP2Fn$|+DnQIgUTGRv=#D1VVMtrn*-$tCip)-u{-vYg5OO?m zP*2(bf9Yb2&r!mO@rr4YXv40kax7(CUF4*QBz1<363(LW#}BJ~D;|L#VLM7)P{pRd zw*MaEyVk(D@zu$4QDRnJxyXR^IT@@%_&$SC6@815shU$Nc6F=3;t5&YIa>>rn3Pj1 z-s+bw*j{>Ao!1Xd&F)ne>x<;V8Xvg=deU_17w9=ZmnyGhZ+bSm&BZiK941rkIK|`1 z(QhsU_2gm?>76tM2R~I`94eY_IT`$*x2fWJxaie9;9(C%aS+*26pE36WK|_k4q21# z-A5Ublau;QQ(K3pUeZ!FMvvYcIJ1lsims2H3r_hcs0_*aM_FA-#g1Qgnf4GQIuqI% z&9(@R0}uDJuA1%KILumG4iATmo;RPfUro@r1{{WzORsl&=703jqCa-VRVhy&q(8Z8 z^u5$;^Ll^P+O=#hHg&%f< zUQpGB@{*v5k~Qn%f!9t4QBU?P2uvqHY|hp?0a0sPv>9N#n0x(FIF9N`L>c7ZQmFjPWn$ryNt9?-P%hr zrWq-*Y7t+h^(?XYvQrjVOnyoZw(@v$r{x1}`>y5k-cWX<8Yd&=BVZjb9sBNKU;)6`9lqvX_Fvx)s>?%+;@8I*gr{jU32W6>)kJw29$ zw(lNC1*Gd*Eg7i>YCm>HAKs>;+Io~=#5FMKvE0IuQ$RyqH~sGk`VCi{+=|(xr_e$=zYi zdz=YrSb0^nEU(=)s~~sRs%y8rn5K1EkU5`(MY>M-JTfE1UZ0{6p@^s2=BdEvJfeNA zmm`S@zE?95>}MQ$+Lf&)b^EKO7sRzfROLCX!#&;D2Nq=}ZxTKhTAr`CTJTQJdQu(c zc6F3IRMjWEL=$!uL-Jyos&lTkcJ*aNp$;)1&XBu3DAL% zSAYdHL2jk+o3Q&}&m$+g^<{y=RJTY4*iRF53OfP23HEQ)M7JRr>l zbtyb&KD@*Wq>vQ!M^d6&4;Cna4ur8HC6@|8@R21Qcz0FFy5CG7oDj##BA5`@rSq8V zHj3cmC7Bp{X6`Uiw}=t$8ZG>#UX9O(t~4t~lyW)k@xBu@6zxceEv>&8TFl|pbD84k z5X;e!YP`PM)jYA9(4xGYHgR0TVf^!~)A{>PoDkWLDxYJ*J@Eowry+J9D=|)MC;o}A zJ)L4xV^+rqRkOoL?tXDDZzZXvV;8ItIphr+0n&r)SeMfo1B;HQtkuMR0U~_mnL76KUa6ZsN2VBf>3sr{P;}a z)74BVyaheK`*cjV=Rlsq_{xv7#fJGvZ-+L{^ZPPQc4uywSMYH40MVtNEL3U~Ay}K5 ziOj|N8gX-x_nrxxs(rX$(e7oi*c?XB{W-br<-u62ZifC(F5S!3F_vz$b@#=kMUt6r zL2<*XpBn;Cw6m_c#k^f3xToi6$C*RkWL7xyh&6v|V(~ld8@;y1LautHq#0|fT=Sum z+4<^Hey82PxK6f@_fjwTosZMvY_lOh!9ySSt%p0BNjbZqg6(&m#ySf469J>s145>7 zGo$xiP?}yNq2`THZbHW&zCAAWu#LsZ4q7Vg&MRgOsPZ?h`9Dci_$+0Tzv~s_HXSd%^YnLM;~GXi*D2l?9)Yw0vT)lf?q# zSI=IPyReM{Gwdt>uGAghtF|DgjPOh^P+rLg-Pu|G*HDCBovdbda3e(jiSI^T&au&; zJ^o&wTZmbX*x-0_-Z6P<@*0*8R~Ua>0<;G5g!-_tjo*jn^t>h9m&fPZr>9269Q>&d zR~Rd;0eXZM36Hw^18SXAYu1nZCyuE1qxsJf&;3=llE;vEV}hEvW5#0ZYHyU0a~#D| z>kj6HUo{r+tt8G39Z?R8c~Mav9F9H6DGGhPGu&MCo#42ge=oFtT0K$yBQoE|L$jZ2 zbgks(JW@~9tJo};I`A|zjgIqjOzVUu?Xc)rV+`wfQV8YfdnxwPzR`!)(7^a*SjD<) zj2hYsTK;pnUfLZw84-`6pPmtF@x>CDAFn*@Cz>TNLk~>MjK7sUs8*S&o}O&%8&~a` zWpsT-_yIh4x9Wt1@h^I;evQkCorT5f^0>pz}Jwho8oyR|EMv;6Fn)0qygb^paH99lLLKfh*}W{O9NHLH!*2vVoS ze|3%IQotuJ)P{WRzMP=Y+j%a?UHAX6_6^{XHS4;=WMbRu*qS(*uw&cq*v7=RJ<%i+ z+qP}nwsSN4oPGZP?0dG(z4bin=~`8_zUp4RR`LDb_xMQjM8l=KT$quGQmuV|+hZ7I zE`G=I5E>e*ZBN+3zK6P&v|Qmv(ZjjcLA0SoqvZRs4ckG1AmvB23yn`l3pEk)VlI6x zz%t7P{3R7BmWnc(!yikZR~y5_>uHzp+?&&l)Na;Z$5^L3td*Yo6CaoFGx|#1^^Ckk zB`kYfk1i{!;%kkHhn4Ky>?eL*N4A;lZ*u<+^4YVswKef3ZQ73K80NoO& zP3cOEpWF3=Pritmr!!nx)zM%JA~?nXne&C`jveiK<-_a1+x)aF)M0xYcq(n3OBCH? zSzPUV&gogyae1jwH6jUpuGOb6X(LMW;J^n9H)V7Z3Mf?n!y%h=ks4juQ|xx zAv;dkJj2$a_549J)Dd}7xO9=!0+-!6&HfC%WNG+rSuSs1ac;MMwxK%{H-LWnXffh0 zKT2tLepIKOTH;}h7VP7>9gcpp^_gBH-lL)WM7ehOV{yD@*vaB!k6Vhn`vTA=_GGd6 zd%~k}R5S2(_4R`BOiq3+?^oNXv{yU?xW~vrfoDeEhgROt9#N1_h$we&Q$kAlHKk&L z>r+$twb|mChg%qmvlRKY+Wa<4Ij_~s53ORKJt82VxKZvtQk(_IuSMjyy>*3nYDkBx zQu%EevR*vdA3P;Lzj#AFk)YgBQk>1ouUY1|t;%|}zGX;#R+U7(d+Xw*vO^9(#>?#qa|8nP_E|=Uph7U9S!I#V~TAo z5eaxmAPyH0Ol+ZqP`AHPJ?|&Gzwl|PZH*S7-=WyCN$GJ#p=DQ@Q$D@tPUgZC5I%fV zPdF*t7zm4ulJ%?PDULJib>OwZo4KxB0IO>xdSff462VE^Kr^Wq3}5D$?pma;1$WF$ zdnA_8u)s{u8|3#?&c!+MpR5QFspslzZ@@Hz+wd@1pA>F%nSk&b+vk#)*8M9%WTXsu#Tu&ZYG-GD$<3iK!~{2}5P?6M0Pskk(1>BzSt! zW+IcZlfTi@I!UK8Qw-l#(?8Z4u) z)9&tuTC2m{T3T6m+?CFB11*B;MzT0!BW{x1IWKVN#8LqkUHIpWhWvauHu#<)?mrC$lf07g+eFBkJr-2md>F?4t~m{-LzK@ZSTXpJ)srO@hj zp0=^Z;&OxL4^M0iNT2%&On3A>_V;WOKWuD?K)vu_&kwzanbIBk)M#R`u@T|kOpkO; zk)U0lRcl*4p!fo&YFTeFrdAg-!kUKh6OzFv}tSPboF0%y9mH&Ko z+|LE@9gR5z)Uj|_UgeiF$Mx8KlO@ComsCA57KdK)(c>Cw8SAMqtr8-vFtp>0>r@;7 zifNFME}99>Hx~Q_g%(^LV>i(w$#52hXk#iZ2C{y}HL_=M+g2(v{1Z7}F?Y1S=G;hG2IJw(Hu-`;5OsV2Zx`Yv# z|NWlAqLv3C2)CVU7vy_BmmJ19(eD~VUR0*+r8y(KIbUSbGGCK5jwu4SauDsj_B z`ks)}wE!tUS;udr)Lio<8qyx_)vuk{^E(-j=U-Yhn}X!*WJzy?mx5Ek-848h9cd;M zmpK`@X0_(jZpK@izPeYVz8q&~Rp)Y)(*e_JEO=j}-zLtIVR_Avj>SM{9L#GJBgZx7 za$5x$)F|Ec6@}0_FZ+o{w5{Hno(J)lX2-o zSz?~df)G^bjydEIl)BwPzi#O)iT#@V45snIi?X)dYv#!}(orK_m?vGujGRt|xrYGE zoNeON=Hm>v7WL()Z7rF3liZmQWRq2CCV$d~%jXN?xqh#&iWGI($!B@L#vE^Uauv?l z`RD5@a0^Rz3itQ&8_U+T3NyTNg+1N0`D%R9?#{1tN3GZrdV`ldXfRXIj1+E8q64Y9 zcjhPdf?n-hRPgGjQ&PndIUQnI+WhR|)FfK5vkcjl!_($$N(>n#_MMXcQYebat+qwX!zEg%o61NuBt$Fux7_nYmfk> zTqNlfm_2#q;e^q*FC8F>mo6V)>0L*V)?L4E_Agp=+?)A}=}jBu{>7Kkud9oSKe- z5n++)dTy9I=JZ!}QMP8t(3Jc15o#-sG}HzpYPM!eZX*|MNpr_M8O5Mt7Nu5eH zXQM7!XHPjSxTImH+_NZbWm`peC6H{Pi~=88{#lJJHuh8*#wv zuP5xM#8tASe|k?qYGMY*cOmiknH+;Eb#OhjWmnNjxZRUH1=c6m-a;n`@6qh z?r(xf@5X_^orgpp#g>VS5;WJg@w)$4Wdnu~u!Z-U2Qx@IT&1Z#}F9 zv@Na>5`Q`q7YJoK9j{#M`F@*5{KH%=3Fbo`z zm&1C~y%96M!bTd0vfsg$G>Hk5B57bRiM!!#o_yz6H&C8pg{P`AUf{K2xg|N)STwcu ztq6q}@};b)Bl>_&!CU+-Vt}DgP)j91V&!@yvc{vCz10lU>5$+`!t`df z-yz>F6_gq-q`CSxm+8My3U0hM{|Qe0d)xWiAeT=0xBM9Nzu_7EUqab`y*+$_eLD)l-P2x%FQCqpj^O8Cs+WA79icw|i}6E#vCQ@X_-f{ZO0U=sL{QIui1` z*Io?#kyl@2+sNLfQRsauD#l0CGo`>%HB^0%XS1&#oLk?)jkf5{7uT9Uk(M1TY+RP! zC2HW7JcX*ao06T&QK2GQLUXx4P)nQO0X>M&`t0cY)iH652ERU{`mf_~r2jgFxuJ6! z$o}lKIw%yXA8{goN8@l#+h*dE4unGFz%QOOnGpz?f_rBwO}xF=83w}VO?X|xmioZ^Vo0}?!N zb{+p544d%fT|m$yT}l}%m~i0k8reA~Hj(CMNi#2(DOU*6K-M*4YdA>+PoK#y_pdQ! zT3(f1(^pRyXb#ca8b=$izO}G&3Eud@)!Sm9F7w2Z zFNDy!*29Wd&ilw|zfj(JoBc@kLiB8h3Cq-<4)2t3UP;8lRNb#Jz})C zXP5EIU^+}(E4)KGS|r^QSE~K|kiqPd1SE)KD~#zv=gyyf5P#Phe*UC^+<>9?c`ZeB z>xX)Uh|1!i?S%51XAdCm}Hj($O9i%--L($+=#S-dl>F)i=68}sSrH&MdE zD<#|<{hF)lpEyd}wt}6IMa`h&V!u1VG|alI9$ZkpDxc* z$gI$qpa)-hPGN3v--k5wLya}-PuwYML{Mf;6 z4>iOm#F8E0Nf11F>H=I>Zkso~QeJP(4mV|}OkfXXXs`FTC^!d7cXO}%Y$lTnLl5&7 z8_KluS1#2NIVv&5Mu@d4ogD$ciD>>5zI%!u0v&7n?pv3*pAaUeUgR%rh)i<1Vg6L+ zcXW;RZrA?z;N)*z#VMSuL}FuK#qT zHTjq2bI|`K1K#iz_gDjk?R7R|lt+L(if3hLRts7*U{Yjb`4ObsQgh`Oc3w}Y#FMh+0wHa9ZyfP0Q|NYZ16rAX zv+w+;s`Y>H|JX~Je)E2V6kCw|%Ty!(4278}A%(<;-uqg)NNw&YR$Ik%PK?VnUdl^0 zj!EY`;FTyMicwx(GweX_wAqQix+>U(MR0zCc4q6eY3;u}vA+Es+|PG6fhlQsmb8+i z@^x^?OC-;{4UHFLuGV21zo&rk^H&#TtU7n7yZeuc*nvRiZ)vY5 zl_`+aOx|>vsw`wdt|b+R+kBcaAAxImip8ejD51*N6330 zo#?7sEHNy&dj8Pe6ZoIbIVJDR!C&qhq2gSWwSL`h39uU9q)^ubTwhO?U%*jC?`S-J zP4<=4{e&f{VUK%vIUuxz*6pp(bYM9DVqLQO8-{=aZm!eD8PHM1eOB=)kbcXEBdj+nn3Mt^kM%aihR8;6%Orvw z%O69S{sfZ!P^S_{O8Fas%L)DCJBY{A8WxU9a;!t2G^@3dt8MLbp#JIS;p*!41H_Ru zbL_dPAqoC{#^(d@C8(t^ z>jtq-dVxiSU26QH528(s0+NnRtiGk);QU)+qHauG%9=q^{$$4I^YGoNh+5F}n)14f z@VVZIS};+46yR z1I_>I&E}iRsOi57J5DaQn3P8L_hgkktP4-WM_SMag854d>QeHHse!>oiNb%Q3WBEZ zHaW&Rq8s}qHO_i4qIU)#xVY(`Gb>4G;AQxARa@(Ix3yRJg;eb&TcHS1dh$COZ~isC zUbc@Y*0$Mvk_o}R$I6G%yp9*{F|a>9?T4X4v{!&Md*k_OW}FmZ_AQms!v|%M!3&byIz}2 z&X7Fc<(BE$y)JQw6Q{@pwZst(l_6H`xU7lHx{zXtd2Fi@ihXV(*sAV(EEqu!sjk~` ze3;S?U+0o2-5`6Tc)T?kB$hlSvwD>e-Wl}LRjdLJ@@UQ;amqlAH1=)QJ9K^J3Pin( z-8x^l_Q=9TW3XL=JC{g$#k$Lv341BKb(s6lg{z zq<22X)iW6oh$fB7(7;$*=a%KduSU!2OuAdy=$Kp{5HkdE{GPb{&s2Z^ujG6Gh7xi( zM_tVOw`Vnn;C}%Q{b%j+9FJHhFZvser-n_pVi$DQ4>5N3>EUV|Q;1l0Hk8cw-K~50 z%MZG41es&q{Yq0#z)46+jVg*(xUGw=bsBZtiX}$YYnOLXUPy@x7?d}$)K-FX>N`JC zSDxQ!EwZM)(f@<<7vX-mh-d8d!8PzaJL#_XP1%}+63IdKQjde^6s`eiWEHilwUT>p zcuRHh>j`6%2iAmm^Te4{#ck>a42t3}Y@n}Gg#@aeHzNuzkLas8n+XAV5m0E&aA53qyiLgtIli`KJzzjUQTUm|0ZH+MAVp_Ht zeXUf*$<%-1^Zz{|D*1%@ArR}WD}KY_(*FzI2!Fxh{)sB;9|CcYQ^Bh=6q0&dHHdwa z$4n7<+4&+736BW`-;;Y2O61Ib@kPuHAjFqNK|m(p&2gkd7R(~Vho;VCME*#|7wivM zex|(@??_f@m>EiD9_%-0?tNT#J()i~bj@(Pl4(Vb66&cgH(kQ1f5r)^awPQk#CDr@ z)Js-!ztwB)QhR*f_P}{PtDclQp2ePAag0yA@jzIlW@EV@y@Gft)qH7s*`(QS~SnB7B|Lda;vlZTZ|^(!B3t66zhuW!K~4&LXmi66%7pyoaUZId{zVDk)xLI7T0-+k>6hxrvJO#pJ)bMaVBt*GDm^4ryJNQ(6Vci z)r1L}KA~vhCaoYYC8!{VW8HTxbX~at6qDOPnFeuYRdeNuMLvi}x7#yy&IF9Q`d_QA zRw0A9Ci!yg`71r~K_6p?_4y~0a%d+=B(zMMUbbf!a*|%Z8Q)Y>Uu&MJ zoAS=8phvd#X3Tnw?5IV`el=_9UO@}w;d-!i(V%XsVY`@$j=i#UJ9NBT=5%l=eIDwl z5!+ex?HXwcK#VYBX{1&cGjd}xpAm>$94Nk{+#jh;Q2}+=N)ZK+1%PU zqoXfEgNBczAFYmSj48y9Pgc2)Izbi#-Q7+=9+&E=7JEX(=Y>C7F%fWA03#A`P)ZEt zSO*fD&>?_WiL~=2!;xZVAU?#33cpZj#mCWe@wTfXgChyMaWtmhn2W?)3Y{8)dS2Vf zK@zxu>CG zEQr#uE{=91Juok3A6D)GD#eBs>+{Q%^aNTo7)^99ot47s@E5ZbA{xjS+l!GsV9!lP z8%BhyNas|9AG$r15@TC6K(aj!L1ffY4MSJ16AFO-r(A&ZQ=y=<%EWf&oDRnXb7tK) z+9K|(&!8py%({)koI{^-pI$3|x&e`^CTl&i=t%QcV5}tZvRQObSO_Tf>$PWXNnUN> zMQVhwczljW7Jg@DTAeG7u4-%%pdhQ%cE1Q%iHQ}fT!sIqXPX;D|ctP};Y z$LJHJ`s+vjn~3*7&b1n$Xk2I&PT(XzpgRpoF#Qk$uuUEjxWqVgmoGVp3!^gN1N=gq zL+-?7A?qrYjNIHY(Ec-B@Z0hA*h!;QN{&GpU%I}oZH_$$6R}gnR1aNI8+qW_xD#>!p>oQNQ;sK1k!GG@0se6bZz@piAo+e&=3GS=G zVT4_5#oD)zA~~%7QC;isLZW|cKgufJu!|gZdOsUkoxtoV7pqUc0{QTHba1gjG`GTu zbPG)q@Jy|LTs@I*pEd;)31MF+p|U@HzbWPhRY>imqlmIS&{sKwAJBVZ^CU@2t{}CyEth*uTfnH z01RTiQQtYukr0P+tRg84{kbFvAx81DLS)F&tVl?bGM_}ojYui6PHr;Z&}C%&SzRfi zPA<*9N=8*|kGc1*-)>{LuiJ;0(0*-iuy#*b+esS}u^D`r>t)g??e)@=8B69Em*(Jo ziwPrf%uXZ0_|Z6tp}@%kK>vg&puZ~^Fnj_D7@nt#%C)Ei?o)Dp+nYztEjdObu4|3eWCI>Z3n4G2nil5&9+-}dJYUB~M-H+=DtwpElH|*$Goe$fCk17=iwMkG5_C^2f;6?Aq zzT^p1(-s@k+o#Y?aDA2}*7pkB)7KFSAY`9GM$!cnu)ARFP1&N3Kq7Ij&=Yrz3TFlq zB0zACg}tY5_Zg2#N2-o~fnLEa$J28YWevoTVDIk=^}ptT-`uln2ofZBsfAd+lSKN( zk|@bc-|z;NM&f!AIlGpd-pGHYzL5t@pfeFj8Jb3NyVJu|BD&k?T`sr?Cv8yS5Y`7i zmILF_8Lo5G!aij@$mdP(Hjp+TIqCf*CBu#bX0)Vt;5F4_FC;OsNrA^;r zbJNZ|X+hXwYtw+n(x^2hO~uo13g3Agv;DT+a#KvVyhn~lgl;y#rBR5Ghc1gYZu}?JNPS|SsYN&N|M7+At8`aI30k@bDJ4mPN*JA1yHdr|XUrs4F8|kE|H$4Z9 zHWD|2@UlG&zwWciXa-H`C$fFt(TxVi*8!O}-S(%U2p@5bwOUVHivt25?8O0mc@K`2 zTq;}XEyOmy?_pBNn>HhpeF+AouMu3l0{br}ufXbk)B;w1Shb?jJZvWQ`=pLUc+#v>7l4jEl7CslP*s01} z@gl;XfY(0ZXksu~E=$LR2!WOhexzPlYoh*5PqT)EjP+RX3-liHNb$%mn%Wk|!gWa* z3&b`~e-@I>*k12u<^kpH_-PR(TOOq1_gh%RaDH;6p$lvo`Bag62$x5M;S?9*fDwCK z?TJ9JxM8Q&Hi@Uvq?8FGJ3R~Ccf7gh~aq`OMr)J&ena-2~I$m z<@?F(oO^+Z^H66C=VS^ijLT|cR-?qsZsNFPoGnnrF@}2=E)!8c=Umqi8yvzmGq8@s z=Bp63vy8j2YcYnSR)HG*5>7eTo`cEaGYl^bUNMoQ`o&#&K_=7)ip*$hT z{%2D*(7{A0#?GEJ#%zE)YiQEMnKj1H!xxB(#Q}$9XB&pezU57CX~DpB9nXI4*?BT) zxT%uy18;rIh#(an-5W>c-jc-#`39c>G@yEe%tFHL)k2LK4w~})`+`%+ zE^a01`bBYRZCqEGe{oGYS7&^ANCz@n2lw4_PUo<3%oG3O8O|9`r?GK0N}SRhd{PeC zCrTriT}hC+T+V77gv+f4vRlQQ`yVZ`0rofN2~AZh_45~$<5f}n3c^}$tEoiva-oE3fT@7y@S%jN z#MG=q+2>%l?9;sRRsCqx2&8$X8Y-)UOUBSw$BLhVLVhsS_=+Igw;$5J0nA-eQ*sMzH@K1{%Odk_!-J3>@P;Z~NL&q*4*Bf}`2g`^OWk**j)m}IzS6#Fs zId3nzlmYVW`KrIf(cZtt-)9;cNSK%oxuk6@xpJOP9H2sEdkB$-EnRuXu_)Hqge*zZ zXU7T&P49lU7?Hka8?(Wv-}Wl<`PCdC9-M~9N-xz9mr|DyhsQ|YIfx`!lY}H59ZV{4 z^D!cMhA=bQ*6PZQhM`p^ez33asbxB5aH%J>AthUB%e^e6XuxpGy^mBVDxLYfNFklL z;)(Xid3Ag|Bs?z=8>bZ%O-wY&?=H=~ z&J~q=f)jIes|FZedjy27n@`>XJsHWf?s@fb9><7ZeUHxPP8jvQ^3`psM7a27ULz!? zwmPnGtHo>)?gg-IxTg4j*&2XF*_Gg5`oQQc{~FR~&zRE6DFE#o>E`~zzcj^_Ln-%8 zg}ENn6X_e2thf>4Qw)U6KdC4Sa;Si&x2_p<1Dv48&5Ivga}pK{sPr+hf@F|pD~HT= z4dr*3t%nDAktih$z6Vh%@35W^873{~c#MFuo?`g`CH6_3IUj?dlJhqW5Td9&Rfcks zG6r*)RoevE$b6_@ufBb*$1S2Uy*9vj8_r2jmglVW^8<$_0IEMLiUJ$qW#Sn@4heK1 z=#Z3r;Aaf7QNHNN;!M%u=W}oI(<=*w$bAAu9hCASvU??zI((i^ZkA&!J|X`;zneyU zBL1-Cc}bP&t_5d4R3}BpQ5}G4qc7+zbO~c^1CkBDO^uB~>#IUyrReCCFY-Q*DbZKWOqJs{V&Q{s$4Pq&=~L z9)RN0006KIRV8nr-Up#UPr4K zpq2ro(L#7Z)?%n@@s^}H73OIAHfD2Rt$Bo|$H*$r1}=h{W7|>mtrGfFnZ9*>!s>Ub zKGNQxQM>o=qdr0}*dAOsCXBWu=Lo5)RDeg)SScpGsGw|!o9iUTnR}yL5D>S^&1po) zN-FG7ap&6!C}{0DlZd)ls)z_$$vHCBO{+MvoDe@U(p~-$O1Iy}U^8L*wzA(=#rQVj zEGE+3ckqMC3OS@Qmx1TQFOAXnRO`ZNBFh$kz}*PKVrSzK&}S2lwbHwt*CF%-Ta6Hj zRS2=k3DPVLWdVMSfCpLDwn;_AgtB-W2^CRt*oXG9AYouRL>Ne|pZ_4gKqC#LGU`py zk835WXu_}Ud;yozMA@>OGcx?#)FxL=rcBxbWyYFCI{z#u7@saDegRLKqAw-I3bc(H z)>#!mJ$?kJFe&#flH7(xmWRQ$4kQ8Qf8hmlI?QniEJs9Y-~QyjYBz$Ed1K-X&iQXM&D^c;3Kfi|z_%e-iR5!pA zPTwD#N?YOSYY$@ol@{d<341^j{3^3tpGO+=S>}U79&&<)NwiXHR}Mlr%6z((Sr%+; zMv&R*+HvOmY~X%4 z_RN%AEb-)^6p3Kfo+Ky3>?QpPV@nigH`e5>YYz+E>w+cS2}})In^Morr0Y8iBxkqQ zSi=D!w7FB^hSPSB><`7p&TdwxNt*PKMQlaMGdMR`Gy6)!BGWPBmz$9k%J_mDj>*W! zOXjjwwh_SbkyD9ahm&9_&h&2KUSa~}%e+QUI)Uj>twznr#?3!XUP?K=5KuF%m>P+F!`omd7n)!ZExTa>IL$UsCc zf6s8uQ$x99NIjpA|0MNLQq>}J8E=QZWM6QZVhnL83sCej;XyjQvwx42ebkT>R2|sx zBhaWi8fZ-|urz}^^yAfGlWz@wVL{C4*%lZ;yr^CXto zN<)&+8K-k4t_rGKgDTZ_=|FC_N%_L|I#CWw2R48K6`Y}Kx6%|>0hH54LIFPPb1ySq zA_3St^;-y}?8M+pB0QDR?2V@{B{NHCQL6dVwxe>V_5h^O`Y9EO*eLd~E=CV~O{Cm1 z8hy-fs$E?}%``e2K|AcVL8G?Q2I6k8Ij{`pTD$onDOKJX3}FBmx^h*;U3z+?!buUXR|1MeOqzSv_5%1IymMrYcF^*=t4i7 zeK_V>R^+;j@ANWo3qtInlCym!i6OoUAspQD2Rzg_L;)`<%Yl{tT=rMK@vRmGmppyD$_E?q~-m_02|76@EAid^qdBM%&YlO=W#;)m#A8C+M8D zxw{7@gRF1YN`+2o2(W_`9Z|>?OF2^Pq~tZMD1wr{E%Ou8syU+F4;XGcJ%|-&yHq%_ za&u<<@{D^|713A7(BV=ra}K>DyAEk>ZWD~8;S!vGf>w}jf&+_O@Av#RC>Dv?xx`1h zY;h?Q!O-Pu%b{ml?5;FCP>In=rIF)msZn&k5La~w1U>{}es;iDhRF}`8%ciqXBUUo zi!f%n4-iZSsj)HGoqO0dyDvj1LC08OuxXr=>Uh*PJW)xVuV+ObT$1`}9E$p3ofeA) zI69u@%0{>6L-@q0k9R1IhMm+JGHOdb%F4FxvS*>mxv-CXrXmfPY1l=h#_osY^uw)k ze9u~Hg>!dI^BNKRc2T`{LXW0tR=8T_{F6ta&-Cet>PogtdqX#~F6#p#-AL}sz+4x_ zv!UeKBEgQYl|M=M59Z&Tax1WSSU{gg5$QQfcBe-85bIvu0FT|gQh7b( zS%YIu735cIkL=a}NT&1lsX&At>bK?89Vu&f}~>dc8s?SWsb!-)hiPGlzIGAE)!DR{V^R28CN%B>Ac0 zny4IB6WL(KfK2)&Q{Cgr6$7SisHnYARfJZFW0LYqP{;K2OCOFL z5+1^)r|>D5e%UX5Td%cDtV>W>WucELu?#NyC?~EO7cY2u^vmTYyw9Bvz}5VMHfgH# zYIb~Z`Ue{I_m*GYO60E98`eepjfCu9-tzks2J$~Pa{rDxjE3Bz%_JTC@)WPy_>yHa zQGRCART!SJi%+JPcnoZ3b{UEiW5rg~_Wsr`SCJX3#D*}=>B+q9h|5?J^95!kM+s49 zG${fv46I1Y=d_^s5E05`^fW8I&r+jpKJNJS;Ky1jLt$U`%zu8MtP&kXAUYL!0c+yn zF*1_&z-6itc|olqWeD*Vb$2Ulhv;8zUlXM?t;(_em9g(uIm+U+Io@fSVG*{)QO3$B zo?G-Z?Rd(yRS9){st&LlqJ~N`@TmXjHDUn2C$7S77%a%SGw`6y*rj=z$vplcbNU*d zVkYWYuIRU~ROU!sZqFXAzX^Lj2Pl_TIh=Jw$ad0933rstex-I9Yn-s|2o)*chMYEu;I1+{%Ge^K zFX%^+dw(ky0ZzwTu(OdoYOQ#;u()m>4d8v2Ayq&bhOZ;*{-wxJjtej{9RGCNFZsOk)zg-`C^N1_YX4GIl}$e^uZ zX^+x^5-kn8mfM6K#j+Ey$e12K>Fe6H@ncs`9YHsg-ileWRgxS$Of?IgbcS=Vkm{fB zm~f*plhjuu<)3UqRTa3E?zZ}2rgfeKCm7VUe5)KQrc;Y8c>e_c$D{ol*V_rahgtgUz;zz8!-M8aOG^YHu0Gnxq>BAdD7Y z`G<%oens*UEy&f8>j#Mh*N01NC9`vHD7p_&_0TvB#X~);ICTa(69@w*xBsHi`v=^O z7l+6nyJk$uu0LV@q*68<)q_#TQ*G4RiT=g8`GHwN4PuVRgC32s$OLmUd zL05gp&JIV|L7Lja9-$Bf9#7Iud~f@AKS6k$eo?EIy}YxDR@xuZtttr;tCOl zF4V9Z!)bV~IxO<-VY8K>2k*@fpR1U_TC^wF^6b5%eBjau_*^Gx2c8`HLev$Y+Wd1? zDdT~L6|P5vC%F9`zl-2)eaFb1D5P^)LkG%p9jQikW>L7Xd5^*SqJZ|ca6whn_Jy1t z6_B?*2Xag;Dl#iSk4Olja%0E!F`sID<`S34hL`72t~P=wN9HP;OzaE_*-9ptSO`TT zUO)|NdKaR+L-#BpGA^@}49rkCD?BMk0o=ATOfXRqhRh!BX>&!Jr#MC1AqL;|@j0&9 zG<+8QZ4Yg3Wpu}w_qt{El|^t9wEd&Xp6~&UHv z9NRiorTMFBcWk0GUM=J^u|rePVYS^knlWg?0MS5<)~DW{2_u$et#S+lwz3vQc?6YR zRYv=kv{5FIuof)?%=@MzcGR8p>kl9KkB3{$*KjV9$RzSJnM@Sf`mb2*GF3?1{Es=e zWC$`xcbWofI>5-#aQRO>-$v>d-qf^bA6s^1ZnJS=j6+>wL$)}<@7pB&!-ZYPs$%ZG z&m3Qw-&de@XKuo5OX~9sU3CH1e0ASl_K-&CT-g%sH$iEmA0D3hda3K!qj-$AVe+md zr@Tp-pjJT|doI0Gj{MQV%jZq;Q4k^?osJ}*UK<5s3WKa46$Wg;;DZDhs@SJ^jQl=s zP3<2hh)z*nxsYC_&{O&$s2}YiN*Ko?vzxkj4ToWs<}+7FjH1V2zNb+CJ}*7-4iu(W|Pz_YZ5+MZG}qHgM^RtH#xs3{v)uN@=r z5kU?6eRdM|IWWXo8;$7u7Si?zJtg*u1>HDS0_g-~WsZDpmy?X@C54e#3ctso&Gf}> zgqOzi*62?3dFU(FU>_rf(FY8pNpz!ZblM#{ zO~j77+fP07cio^HLO9JPPJ8+g_0%2eiZa3UDklQNC9 z>_l|nD)_C{DA#R=7i-4tT@hCxs5oR$Ilb@FghXt6A^!$WmP|BT*+jj2(>k?)bXaZ0 zpj@#x(VFy8dFe`R_jm90r*J04rtW!7GJOB))_P4PB=<;ET$*y-Y*M-MDM7*D@=Gnfl9RWE{QSIcLa6B%)>`q?KX}G!n zsj}Zu)b8=KV~^xZ&joItprD|qLS5&VC;bf@T$LjneR~$M!UFyC>=iChtWIv_<RqLpjc#zpeqel>pz-(NLoHCvy~+?j{(M;lT8l=DADl|Qxq1^N9)C*}XM6g~8J z(YKE3eX#9VsgAR@kw1vxl|Ha|(%js4A$l(fS>D-hXlUvmb;w_A7JdA%(Z7BNSba}Sr9=3EC{(72%uE4K zgx+S7nF+m3&%YFw@lBBpQt18Lt@-<~%YUVN{!ew-e*<9|y8u%CO+tK1`tBY1zX1C) za4@j2`==uSWwGBQfEPnEQV*unoSd>B2H+`*)CKS#qRMxBFc{LUje6b_Wvcb2e<$e$ zb48R<))pX%g#S>!PEfv<@k!yRVNJ`f-J2vX(uQpow^aa5FbhWhHpVRDa@iI4c1dbx zE>9H@^Ddrw4RUPi1VHco@_~U@G&w;?J?7^50m{l*Kpk*Mi2UEf%ix$DJ`|2Si1(0m z4~BH?(Q)elLSVj9)L#k3XleHq_nW%>S2^+39+lgR#Ie^D=*LRS~n3FzUG=PXorM&icEJ*M?g4-qYYflEFv3t_TZ z2iJKfgLJ0;1|~M_fb0-qN-bHM9XTMG=wmo%f*)Ylj5U*0=4IQ5?SLto)K8{zvWJ49`Bp8p!cRH-Ls}<) zgGv$6>^{pXsK!(#F9b$Edq<~_=ctN5xlibMS+!O%Z^wx?)TwzomVh8S$de^A%q4HS zpr0i_+kvA9j$KqIvwXByjH$6G6^ADnRx=Cn1_JC=0zuLpKhEX(ljDXMXS2YBc<$t# zeCKCdoV!bAZElUGfYK_U2zzafzaEa(ZIH6W$D~|!SiF5FAw-CQD2)aW9K1sj&kE>c zI6@l`!0XIfLs!_Q(%U{7Y&>D&= zDoaaUj{JlKLDNGwaKBFN%?>C&;LtNzbknmmY*1Orfd;IN=Ix zJT|ve?#SO4;{_0tWRj2ym=Jg(Rg>$|h!H)p1wqwrA_VueM6#n^5DFA&(?^viPM0L2 zlmseJ3PqzZz6o2DL;jMdkNuT6o{tV8-*teD1PU&v>GlyI$IYRmr>3Q!iT|F@(22xK z;g3cq6{}7gl>P*kyTRS|e7K0=wWB+4kZ5Y>%8emfovg2y0g3NWuXa$#O zRnLDICc|>E1R=0O!LY@S+{nwV^PJivdjo6;O>x|s%cRi^IniqAyOP_$9=k)FrIJ|+ z8dt6C&OJr(Ib=5qj-gF!G#qC(ymASV^W;U{_Spx8+{{=F9x_=rfx=0=!3V7dFU~%ua&!7cY@}QYk~)X$g)yh|fwfOIDKZf1Ek<)FkPdfh zL$)L-tdNaN0M7u%R_(EQKRhQzg0-otO}LOSHXm3FMq~=PzRJW4Vj|BqW!UNRA+JrS z9p{qX+I<66*LW$7iBNwSX@tpWcdVPb?selWGp=$y6vw($re!6sq#+FGbjCbmHu3No zxS}5niRSZk&N>0HKyt8Jok^N#vX>A4eTw*hIQtH`rjo63cYUjC0aThwv(cp}9fY_l zAR-{rq(*8$x|C1?v4AKDtaJzv1q7sbq(-`Q0V$y*QbP|AAOu40|H9kd=d$>|@B81M z>n3LA%;|IH%$Yk^H8eZmU~Tye@IH$F%M}~{)9R#UbvXav>7@JJr;ebUAC9J~-*#OOlrFh0bn)14tKO+SrLYYgPrD5v%tqk) zZ$GO)O{^DBnK*U)33u!LxV14KDAy;=}EFHbqyQ`t%ib~>bH}8KmQ9j ztP6t$UvlhqBbwz@A)qgp?_cE1JX)18|9|Q{gFQ#oL zJ2#k(!{4rl(f;TAvj0s|>=nQNkLzK=#ZFW_IemSCK1K1I-JwI0k|1rYqL)oAzWghY z%lsisx+C}3lJMuF2aMvLkDiM$v%ApE43c*I(D$Utcz54LCM5G*1MTv_lm96qadotH zvoI5W>}Y3aW@-**l8+oX*a1?d`%lUi2IcS6Uk9zSxtwM?j)~0kf5<&x@G__>`|Y#5 zB*~*gS?6>wBwqi*_+W;g$k=}Bf<&g}qpZjm zFljYNnKQ)}MqE0Q%A~d0mfQB{{KhRPr~So$&s9rIe9b%b!5wZVaAc}UuX&UIR#$zu z>M$Y(ySc!&!$htbRVAa9`e=Z>@BS+J@TGa}nP=p+%3Sa2nK!Qm6YK&e zfy_rf$+5m@n$K$`_FQioUVihmzbz zr0=@i3{ko3RmWy5RXalwWtof>j<}-c4sii7B5WnP!$<{)2E7*|CS@)?bQe$ zUQ^mE!`YW!%k+sUgzaVK_lyNU7r06-8k%>K(0zr=KED;N8}~-LzPc@1wx`+NuL`P4 zz*aw3F@XZb$*$RM8Vb%ejM*kKpQrf|6v&b?-L`343M;PU&Q&dU;?jpF_v~7gX}3k2 z=>j=c-atfRCJr^wZ+%8{-F^JrOc^l|dMJGO?SLoJj`r|A?A|niOz%hx82vzGBDjdPaIOn7E3!%QBnf^T5snX?QuNu9NfGfADZ zd|~ov?W&eY;p$aG5f?u9*iaH|5m?~tRLXDlnLxAdV57J383NfsQdeQ6e;0>Hg%y!s zdCGpv&qPe*GVFX%rhLYT?zG`txCkUY3}a)e7*wV;)LfF{TR+W3iT>9PA?7|4(6c)b zLrHHi=XYBZF9HQSt-YUxQd^&^INY0mrLdB_3!4`Nd3C2z&hi_i&JIU?qC%;eyN#N` zMn^75zZ=j(OyGBUtFiV5pzT763#Bsb4%g!|f!xI@ar7c^a|adoZ1A_kJE(~HOh8WT zpwhYW26(swTz*KIru=LN0~v)C$S#_lAk6$-n2Dj((A|C{p9w&7r@1lVA`rTZ%P(N_ zlRKdLw>|^myUpK)QUi8DDJrZ0;yW~$%wI&l1?VEpM3&zGPCEdqzJdoXcL5yYqM(oN zFfp3)8F1bGZCIHG+XcX^u)=j@=Qq90&j4u`cw{KGb61NpL0lAfn>Q-c2)oUdKv28# zKp`fOyBt;k$znZtM4ivQFqA5?D?K5F6%6|h!lfY0)?Jt&Uog8U^n)ne*?~DSbrHzj zMbDj!0;StQ0ccUCCGScU+T?EQLUO?fE+OQNP3ueojAxiLDQd9bZIb1gtW({PM9qnN zUMyxv>aH%jo>AclhZFDR^8J3{?5PVf;-WEmn7zrKJ-%V%vg)h)zJ#?&5XB>EbAYA? zVO5Vyh>=oOH=K6aIgE2sGeOmjvzMYhmoEI)K*Q~Puc9`qmhlZY{@z0wt?9yP<K+-lZ_d@Uagv^q(p>H=Y^hT#w-(8E=Mk=l`XJAq{1$vXU zLp6PZXXmu>Z@uDYQQG*VO|}dWU{r<+jv6v6r;UHV$=OT(;Cp@TW(Fp0^JFjN-gbhQg48{-YNd`C9E@y;)P=6;IIV+yg^P%IdfvOu%uf8@+ zE5YUH0fj;^E%Kx16I3{JsY4}=#+$<>F>5J;MEs__vVJZ(!DI-E!I^fFkc42Mh;V{n zS@mE|80(=}Hw zR*#HS-KwS)O4>{V4c z(MVs3Zh`Bp6{Mxl8mYeqZDr|9kg>1jtFm&7jBnelM@eN9E!r=`oVsqe>*9v;tkoC3 zF6+EE)zso97NhKKWW9ZCVai%AnKRtvnWt+Gd1J1Csh1EC%Dq;Ys==ALdbU_+%+@_O zDpg3$cBmf)-{c7v$R`guB}9!BdepSpz=A(~DVxi6%@R9QRFnqs;TP3H1makX_<UxW6=5IhAEv@^66G~_N@4F8WxQe% zO>r*Xk++ufBXIfbBkX_{}S%>)>a+pJ48a{ zHg&d*p2BEAJB|XZ925hf3WAq4r`rIA$qHL(vDew3-;($cFfSVBqgM(A5D>Vfe{1;0 zK{Gp?Z?W$O*$eAEs){)N?c}vNiIdA0s!Zl%-$R+{f(Bo1yfhJRj`M(iXzEk6kf?gl zlJ+UID_7#y#8t2C%P=oQu*thC7b>j%SKe4v4$T!SPC&kRF<(?OLud8Rz5HBZEibWB zxvJvTZhz9}!0VQisc}P@_MtDCvUT0!u;YKD=^tNCq(pdVUbsd`MNnW0IHp zZ9$+YBDi>CpflSTUnC48mOZaC3q2~ss>ipSTD=f{pCSDVhn7SYUo~D&%tt!etK6v>YaGIO2% zVl&Tj{v=orVmL;N>lV_%+4WthH(Vt*9NrR9iQE1?SC3`=g04^x5njl}sp%P=*JY}( znUNrWbG=vjR7Lz;oGbFm=t8fBl$Z+rhsx(!dVb{c^DJuBe&xy`LzEU(V~pn7TTpMfV^mX!85#v{bK3O2kcsu{`?)p60u<#(k;B&G}FHG z^>VA|DZZf!vjUst>OkEB7E|1qz?PR7I*%*mURP(~p_908FI=AoRd~I4OrKl9Y);ksME(S_ctm^&8P0w06i@;#zOEXt3s65{9Vf@ZaA0<0gH73QC8z76 zUJC{76qqMDq%+T!6+B^Y(6Rc_Z<3Q)u6FQ2WqVl~L^xK%Tjp(`fPVA|Vt0QZx(M*% z?>nNvvPy$Bt=`uuiVUVBf4!&H23!#z{2cwm7z*^Aq1a{3%DPVSHc!p|JjRidJ1+-=U2VeRH<5ZRipy^MOfj zAP^<-YK5n>XdR0_Trt*c5o&YtO~;i^#J3hh?Pawr#h)CVE5)#kc zXEx){N`~F9Ij8R|EW3ZEE^rg?aWm=%oFRPR^H!wEr?U~uhoaHhkZ)Be zGsk8-v2|`8FDW*|jwav2ZECgeRw(aa$fB`|Bky{Lbm|?AJay*E9(%)pa+mvg;hTN} zhMyY+6xOTT*X1r$7b4R;JzdH$1_S4PppkS1ERmHBqpK=c2E-o!teRfnJ+LI8Ks`;z zwOC|gkF-vKKVjCHWU;*xSi13?)G>ed&e{;>QpF5|Usm`9QkiMwhn2{$S%De9P9ha^ zKi=u++#ddncxKR>K|LyYf8~u3Y(wg4-Xm?wZ+#78#vSs7m?O2i*%^GMYBwrX@Mi$E zhrJ&Hg|gIQO3PMO(ekjNrY2XLd(3!C;|rCoYwg~r@B4Tk4NJvx zMwX?dI4P*7W7FfUH~%?eY4yu}+ejn9QwQaxOzb*IA_B6jQeN7Zy=g!u(PIh-s5>Gye!lYh zgCuFOWh`^jBgKRxKkL#Gz=(i?B>_E!YCNw6#7F@8t@9O=gxJ;SqSE>yDOu9!OhB{e zOxZ7~H;cn26X_Kz>);Eo7Gha$b-;ukMGTMGXto)$mk^2xCFw4u7kwn2Ag3V4(u{i6 zj}W;P94td2zsvv$!+z;nD}2CcZEV(!!g@G7ap;UjXM%dC1o5?;RtF_SKZXV=RjWH> zDKx6-C+6vYma~Lykg=@4B$w;m$c2g__MV(8V$1kge}}2UFO~BN?iHj#xv^MmZ)I=T zD)839T^Ci5xKxz!Et|%l$&BjJ5W7CnUBXiJjz=%xsMi}&uGm(=@y*s3 zA!-Q=h6eHh$xjm)hqOP-9UN}+dUvMvu&iXMqxB#{*!B(1sL!n8=(ZsK+Grc%9e+0O zRiWCiwJSvf$u}IAgHLs|vBph!TsDK zgAX&+OW%4PXfNZx5IgdNMZq7^HsQBL4_`Rd4#yXLO(X!>B2at$y%Ii9ddGOLkpR*S zVwc@0!H-)&4BqM@LxvU~RWA>nZKndZBNV_B6yQwtl;xG>gJ;L@R>0GSq5ZfUNy^?nJk2+d;!dREXOZ zY;#{2A{)$$&8D!mO4Uz9TNk$p4ca7bPtL@y6`7gel_fU|l5#w*Rb6PX4Qg(hS!?6? zY~xFf9yFXjMC7a{aA~z=1X-Pi-Nz44qy81+`m3Ug}mD2c7RyT zcgKaMk+AHDyqx&DQ*RR3lmB?jg4AA-u448%w5hYyvM5LzYQPJwT4J-2VLf>jFu40`|-FVU7r zav;v(BIN{%nakt-+T@LQ_Dj5%0ixxdCd$oR?(ElQDXM!0^@m_~U^+iLL_chq#us4VClDboRq1 zZxhM|0jqQ{8RID`4O4yl;*)`@rUr-;fKMW&Ci->`;kmw3Rc`t_4dEU~LSr%0TtV%|`|3U~ zur{9!Qr19@FUT4gme>#L)5Q+x(li;sv2y-kW?=iszJT=Mv{eYm>#f01PviVD@BMh~ zH1XBg02~Yksh(JCnBv@50ZP-LOADX^^pPDr_4CX2wGgK%7z;akii$*RbBTyZrcLfA zkkTr1f+~nnF#-SBEx$}JXJBomCs}inW3DgTyLuim^2MA-eKU#AHFw8r&@?hv+<*B_ z$HY^l;6n1!?G*I7KT;YqFf6AxZ{Y51NdfXlG?~_OZ4c}?r1WwDN4@WQUBCH=Hs2=) zTILXvk{!y5>Tzkvk@Bgor2^NP{GZRAy}r{pBd2BP`%1Mhzth`njj?veBMDt-gj&AL zMZI}1a(mt@(@wVV?QBM+@%LVkZe~2xu>u)K0=8|*_WY9MX66b9A4?EL zXCF-_t3HV*JA-K(N0tiieE8#edtRby{IE(K2}3)$tlMA(&lzy*R~BpqLPbIt3TJp7mj%NjU|&U4ld`f_TaYciy|Pp8gVa<1R=jpAl^omnO!5! zw5$M(o3m#Xb{alP+RHnWb*$nDXfT(Nv}CcGMPqvP7?BB43C@O`vn zeH$~h&^!d{MjMx}w|&0n!<^F?;^(6z;NTB?i1iN-hD}i`AhZDpE9&rM;Ib6bP@je| zcQdZrnJuoXY44?dA;F#mYP)wdN4{mgr&G>pU}ganDeqdZ1Y!rRuebIJrfTw)j0=cX zKpc9j-;DITQGQ-e4cJAlV(v%8SFc6M1E3@1HCnIo32KimGaL0IYR3Rv>9!j?gQUOO ztDte@8vJW;Zq?&Z80|1~(am|_(eA&4S8mP^yC8cH;=$R^k+SWX#*8X-X{Ze-&Atpk z-sk3w?pV)To`0xj(qW$Xm?^48rP;R+W~47h`A$F;I7&tN4@q&TT!?_D$N&&7@4-Pc zk|Ib7g-h?hkz%kGzKp)>LK|ZDoi_|@pEAmy(_8484sJRQZ|J)2F6kN#Uehv;!#aDp z$G_nqH;0U1o$>P@q3**FInLiX7}`P(TQ)r}96yhBwsMb;{0pF<#RA&{03NJmJhMH3qQW7UMVY(m4DpcYL~t0v{b z@!W!ObL?_Ic3BF$T#8*@p5M6TPBnI?=FV?y&2I$EORtuBUX@dbsX~A#$)LFktuZV*~C8ic~zAk?XPFg{t{f>!iz4nMXUlR_%Q&vO+yjFb~v zJNoJ5t@_kwGi^_w+*Ra9#J_pki<=wyX+E-GJmC_s0M`e6CSzZ9Dwu#aSy=IxR#rj3 zcbLKHloUcaXka+9ujdxuQO3s&AvPL1->cZ(L1e$pH}Qg#pIp@T!@ErWugc7tVmtMs z0CZ*fj|Q1Wcc7egKo7P-r{>J$A7Ye0o}CQ(SB;s>KMic}C}-u#7-7)Bh+D(&k*|_O z`Ss>EZg_(}EN8L&#ZG|uBrbj3_ixivlKm8vL;|@tg)Z?H2)qHy8Cb4oVV(jG|K%tL zxBfQCyzCg7jR;MZ0g%YWZZ}OP9ztMv3HDt96=2Ey%P9BuS@+#6L4h3mT31TdV)ExN z8%r5q&$9azf(_A!M0&Gz@Q%s`S9?+JQ+>cMd2Nk!9EBj@hWkPHy9wb>uCOx47>Ujdwr z%-ealr2}hq%gkUyM?j}k`eVt+dJ#Nx)m>^bN1$Zv|KpSQ@~mT{ ztvMXz+2DGz?^#7tlu^D*^RvIrE(_a#n~!dVR;@)*K*WTg)PXuprjmAMIbd=aoc4yY z|8mOzU;rr_P6VeUGUdyfZ4#edw4l4Mts;oo2cN%Yv44zXw-)ROPU0667pPWD{vXQB z2rkj!e2lODkI9tle{V8$vk~M_Bp3#9Id?9jUnS-FD&irkeavL zO(QIdrU6FIE3G*@qN)3_Xi66frv<@2!P%2KLw-!nIImq-)D$(; z+o~4~$=q9*d6A>3Ak*aB`v06^i^+creNHBjMuyTr6X@r{OoZ?ql>Z*00zCbp z(kMg9)}DiyB_)W^T$%jA_xbVkbX>!H*#f#2o6&SEu>a~sI@bvv6CqvY89)0 zP5ygP3no&@=AhPm>{P1~4y<)38;j`oEdx1_^Pf0ouRNP*1u&yH64aMc;~1Kh=ba-x z+2{CQ{n>27YGFU<&lnUo!`YJf=HCdaQ@Rd_c5>Ad)x9fqKrE3~ zkCg*?FXv#ifnf5ldfbpBW_8Oshu3d?qokWmwZyNpDyLZ#7keL1(L3I8)qeVl&gWo_ z+|v=-AA3R_2NkBnx7r8n(>@q82KE%gl>q&9q1ERQL4!z~?ztiuV=AQR z!@Tl)dQ~nfa{1^Q@tYm80BLXjI`Bh~s5 zY{O0#tI7Zw8z>`bTtjpWcN>kmH9Q@uJ7&ukk7RV=SeZFkP9Crf5Rwbjo9{bQC6O@q zxen^Jp-Bp9?{rm@d}Op)ZvQCtIiwg+s32BuvoHqDC3c+&a82zYBn-GrRLY2O#Pj+3 zIDe(psh-7@adUWWoj*KZ)g(Nm9(zLZuv;V7WwiBnP-MI0>UnGYu$>FWbz^>;jI|}$ zR|Ik-_%lWuRgO^`dRT>w%je?@y*63ni$9ja6oF?n=I7xo!h#)6OG~GCvjj%qNr-O7 z9(PJglWQaI1dnmiYCJBeg~z_UQhMz7Q59YmUVChP%5oRE&9m$2mO9>THmV_{qxP_B zc+P{$Z_jXv)wqUZ!i)Nq^N|f$R$;dI5(-^|j1|4cP=2hof$US}MbW^*}O_*BdVG_{ACK(M7tzRXrPfe%VUB4eSL==cBk4qM@dY{jxw3)^< zr-e#ZF7O&U#J}AUm1Cd^ui)@GMWmT|RgSe`t&Arx5rJg%-rKienSgZg#s zmjH=?U$DP0N=AEV= zll8!emn_ZS2NJ z1l5_hUH(z{cv_mOMw66cg_~b%Ya?q*6I!QS|2OT;q%CXf7X<|QPIe4yd9xM$_!_TIb6^l|qK7jv znO`>bqOUQQeNsbCLBamf$FuNq;)XY$c zn$6M&j%9S~p@5Z|LK=#T8W>Xh)Y5!>C0|5lcAzd4H{Hv|Im}d*ku2)!;_u9svw0C1 z$%uwCIS8`F8?Ghra?-lZC5_y$u*sy5TE_z1avek(w7yR?)3ln-mh}1Hfu*#ZS?j^~ zb{2eGo=cnk0x9G4t-lEYM@r?EhOz1(^P@!v07>;k-M--AG z(#0y}!BXlbj=wLd!iTnSn29=%iZjKm+C*4w*eR13Eye05#p0_yY65AAk*z_QDrtPT zgxZq>5}TKhsexMVuLle50&h^5TBFuig({pBXWUL3S4!VODi$&b(|kp$=%I6`-Au95 zsViO4=qe9OFY+6l%Zo+Zg6ZBWwhlKBS$!LB{LJaK-h#5YRzkUNLkqWjE6e)jIb`oQ zpF1y7hpg@Eh?-3DU$1ygLlPJR@X4uT$nd)J0Es-!%aI%^g1Qu;v7(1d9z7G6)Fi6} zHI}?-q)<2W9=3w7Y{d{ySEbs$xIsDIN^7ZzuV#{qNZrs z)|GhMoLt}#f(W6^Tq#WC>>T~h+S3?&xqY&5SQMZ(G{8S>WZhvDXTanI zq~xm1aLc5cxAnL3oYqmOv7f`EyN!b+y#o4x=F{r)x8quP&KfIpRgpTdP8Qf>UXPSl z#_T4(IL4=o&IXQs);HZml1}oYrkFXJhgwsQO!lx-AU@Ez+DzH7fR@x(t!Xj~xfqc- zpopPWu2Ee8_5PkhYqxn+_HAIjTi2+Dq`AI@nU}9hH=l2|G)J{GnYgb6j&(u-rlerV zl;(rpE9)bcjN;K6P9xv`)ykUnKogi2MIdj(Dp4dx5li}B-;WnFu8X0*( z-OIviUFbHOnTSp#^Xfj$7;ye`9{(D5HsHf8lTur}okKoH%m|SC3k{xwmW!alP1X@(N5wQ9~ zEDNa6+c0bTNRDd%qN`A6I&++`W>Pu2#M*wD=FV63FVJepx3EjjlXV*E0njf)rPiYj z@(rEZ%XZT<6S$B9hIP1XBhgrLXk!K2A)gBW4GQR29otlO)OOJ->cYRPyU8)$DTI1k zg?OeK%18SNGpeP6Zccok51Ba)G#BJEg8UUDMyf`?M|!p-HYK^}+DU6+iLaYv8-Z%O z)K`;WG4@1ckfebkHei#?v9J{tyuiohO;DL3zDz8P&Nh-=McHmZge)Cr(6WPDEvYfu z3Jq~J42t-%_S|zJvV#yE$;v|TWy{zlHJ>a7HQ>u>#7|>UAxE6COyR9*9uCv+sb`Vf zt=+(F;TGDn-?#2%0WKFEh%usqs4Ou#CI2qR%O=utckvsY!E4B8jm8{|CQwQ6eBiYe z3zR|MCQy2UtMAJ4hk_%@ks2Oz zJiNp8KNC^_ef}zgCRbN>V@dq<3T06k<=6~GjKk8B^fuQ2``mFUc&d(D{-MTqoi)fE;2koI-q z9FmzEGJ5wBm+q?>tAm0cDvp;>6bL&~?H^`xm$*6%Jk`#gu<`0AHif_y~f zZK^6=kT=ICRQj~d8AO-FU)|i$^p+$J6seAW@^F_Hm^H567-0odmiguw7w|ruuud=* z_zK1Xsj0a8WAALxd?AB9zl4#Za$y*$G)sy7L_cJ^qd1^==? zNdtu!i%H;Yi|Ztw35<`%h;Gr-S{J(g4!hMKju7EKdo?(<>gb~$&ko`vWR z$!zfv)4AusP5#yUiQKK0=md56W+kI{Us`5sn(V_RuJmY=EOXg0M@P}#`jrp3C{)Jf z9yIs$+NVwI`iP|WZV3aL17*}1#hXW>FE7Y*OX+(Vz8I@>=1mku;#3I^OYZF2>#@?s z$$6$fS4Ma>pK685ET?!jark!ISZWC)V=rt}282oupyStHM-S+}IVl!_VC z;qb>tLOxjYQNsM$5BF(YSv6yoj4|_6UM4$W8TsO_N-OeT(;6@z=j|@4VPc&WJMbZ= zhQEOQQ+%*qS0&Bz`-B=8;7NYv!U$K2&nA$X$?Rb68ow6mcpG!i-A(}j#_^8716(>A z=20v(Qzqr`KBOTo?;Q~uYs9+`m%UE+N45f#v27!tu2}lb7nJQgI*zi z&Q=xcxLr#v$h<+(k&5@IrOpRUGTf=<##+u{lH^;lP}!KQPT^~pkKDwE_g9blhccMN z2oYm0AueX-0*6*Eb0M26FBXb;K&~9IEgY+-%PoID?=K_qs%yV@GQfp0l9QO&&FyoUdn z;L}W2RG}u%&#vLWK4|G|%0|Wc>fFEGawr1%4qmyiIa4S?^wqjA{c(PFMT8haHU=g~ zu%&j;1SXa!V`G})$nupsd_jUwd9LbFJu6lXP7_c55-wg+M>FmdDy;U4l%M*UY5~=$ zP8Cd{RK?;{%7&cNw%a6B+(=qt+iG||4HtD>d9C6Fq19{?M(3d~g$N*^V8%pe zP9*nrlBkcdRo;LbmBoeFV$7+WD?}5(t|t7{Xw_8gO?MpaR_ezmaBDj#O4z8#VlpgU z;=2_yc!Kf!=ZR7u*V?*|`3f1#6sgPk5DtPHec%#=r13!-z(;ZPs}tE|hrEmbvD0s- zi~PFvDZCTO(@xRY{)$1I53E(7P=PZQdhq~PG)I5OX>hF)^^eMj_SsM`2z;7D1I!xI z@bvL#72nC}5e9z)k8awZ36)j-TLT!VF4m+FPE6838E1?yD9r158Jv+_iD(ke?~PBz`z zrx)2}&v3E4unn6^9d)46a`2)-)=k(c8aZigJe4RT?eOTT2j+S0w~td&Oik^_ z8KN7r|FO_N!Xm6Hf+`vM_IV_1j1-zwGmS9)%G~g#@F-)evao($5~kF#&QvTc9W!ti z(RDN#|A1Xm4p)d6@NeDh5Mgk;BO-UuokNRnQi!|heOma1>Og;xTKQZ z#tjd!$8hPnGd^)0KDO?#M}$k{49IL1u!O?BnW92~Zwa7I)5^U1Ey>aM*XnLqhiZt7 zaGk4Az0RHx*4wv;XQgW-2Nm9B^SaACwzB;G39@S=<60W)?E(H*wFA2;KOfvHdF2ii zsT<7sse?H`W6|mluKLmnufWtAJ9~%vQA&q2JD0FZ+|jy(o4ky**im~Gmma4IaU%C< zl*QLZJ&ogz$Kc#xb|djY`DWD8z3x*y5hA6qjw4MS3~+zmu)fjAqUao7zL4-Ml#UaL zFVilmREr76y?M=HqPX=%MfnXG~o?9NB=0$Mt}tw4|fCW$i_0|CLn+NYqO;2r|~1UiPJpYyAf ztNXV{|8S54Szteu2)nFUI|UCUF;rg)to;q_Xo*h;J<}Vo<26x4pU^+bolw18YrfOC zIt8$vqtvrO3Zp%L1eD>V)?z3!%=&_e7#UpRbTGb z9Pua7jE%Xx`AUAD2YTYG(uk4ZIWDR6w4<}*q?^UA{Ty!;nXN4@}^{i>=7tDpCfHIYr0gJ(+?>>lM zichQuB|r7TQsq4UOh8ZFq>5H`;fW}J@J==aOzYz{#N{)QL_7NafT8d%`}Y(GOLbTg zc+42j$*E#+td5l-;qFoB5e**mxEDk3!8d!B@_-8D#|wSQx~GopNuUpbv9lVix6%l7 zEawiCyuAfC-omEe>!UB5K!USff$2hSF^cPfD>6SbFDInHvI#l2IafHlX7UogTQ;%7 z@P9u~Fs#t>htUCtzydffX;A^y2?my+Z5N_Ih4d|F*RG6r^#~FVZ#+}v;*k@|2kT%X zGoMNnRau1%3LdNEi@f^7I|}^??vMXlyS645V!TO_{ovfv+L&7|AuzetKUcoqYy`fd zdr#vh0t0Jbxp!jiZ2U?i(E*e^g>FakA$|CR54D&3O|hO@n|V3b(^t-xhkyD%$X*au zIhqa@9E~pWLjseWZiD48q{uo?Ane58c=Y5S!j~%)Ion2Lg~dv)#t4WSkU89LhK`F)At2eohVl)~- zeE=>vsD;%oHQeM)7$q;4G!LYXu76_;G932_FG0XwmIjBaG)~Hmd*C-Ln>P@!^9re9 ztek)6>D%A7O;>r_N=xBLs-<5g+V$KO+u>1>hNBh*hxTS3PD zZf@eM@wC3Repv5Z)d}KmG0t}Yks{?tmhB7Rjt`s~gkg>3UO61pKr4es8nd$k@IQ5A z{`H;MP3fJqD1Ae~Upm5+bSY3b%LvzxD)|oL&d0Z1LZKbB8cuS%stb*wYW0|-@VcK- z)!dXf=pJsU>FwG6IY2l5C7j_`F#9~?MCoD!%b@_PulM_e|KT1^(~YQnYg`Lu`x-Dc z^!20kpykGu!Fq{hp}7^>RN5X>I)G$d-w5!D0zKjuW;F_}tQiw4=sr@-6X+s;zNksd z#fB;^%bl5>(91zL_2&!|*V+VwA9|S-l5y=F>+Navq`b*LTtpz4pPycsnKQ2ZHkR1X zYJx4ao~gBbC(oYX=P|wbD~H5(s~YVB)kGYqGd*`kEXS2*9e+v1bYtvYc(dub#JJb? zXB`+6@}TenP@fQnck}aQCfI1hcWtH+XIV@3tkCd_%wD_r1yxFqIi?hh4^( z(>Albs#wQH_DJCyvEgtI1(~biLfaZ9aunqovA;Ja{5iyRq3BT~e zxvDN}JO1L`#+MS135u$^!mn;b{5dtT>`?~s^2shNRNlRm47!0HxWbxLL*nn5a35b+ z;Yqx9PwyVTe!b3Pg;`|F39Lj&ALoGCY0n$ZU3MZq;H; z>cM-&ExEqTCh{O24DC3i-eUp8Ab3%Ysy3gk)MOaIeba_!T{j4|m4f6=)6DctjX5k^ zLxBI{ojTZKXx5-A%=tuPcFqN1Ln}`|C@yTDMT>y{?yP?9ud78V;-nW{n5xS(EwNI+!aseI)0=0?xytB%WAt*7`XD-ox;S8qIah-%h5gy?dn1qBi2QAC4!u?zhT{T z71e4N*N<}75{stf3~Qf*%QEmRWZn4k#HD6<$g7)`u&a{z*!uACgW)A5HIen+jV@u% z<97&$8(}=-yD^VzgUc8xe0^t*3t~o7Al`f8;R9zIHFC?zIiUNRlk4X=p~#l94RSz0 z0JL_OW+3dHII`&f6z&jdUo(YOTxf;#lu6_7{a3ptJ9teqr-S_+J>6HyPe%(E?;)%W z{|v0p-$}A=Xqoh>vN^U#_Gd>{rsvJ^K*dhA_4@c?RrLVLHAlfAlfNr{CB$v6Paf)C z?J#|%P%>m{7|DQ69y>-ucg|)s!aRMI56w48kL^m@x`4m;` z6fpl)@U^$nwM{H{fVZ9E*zZCNZkR&5G&nTH-}(;%yKuOJ3uzP&);*Ug`5QpOX5lKGe(H>?YafTe!uAJ;4iQNI$Z!6P`ZYIqZl@2DC$3P+{@ILg8g z%htTc2GfY3W#u}S5&Za$wu4>99dp36_`N?X!v9fzG*?%O1<%ZMD%hbtHJKjU0M@mA zj=7fse8~@MF!>T!XLkzSu<&8{Ehhi2vN1n%$8@k_Ip;qW%X?}=r^%!a6i5q^Hi9-` zSA55<7w^=3c!y=g9};6g8J*e&4La^(-7w$LY;Y80Me*NEWp8a{rmhbO0`|D+eOW;~ zur|iXxt0N94BCp%e{5xM9~LRv#3ZQ3pPNDlgaU7b397Su>wy|}tB=rs{Yo104s)J`(K)YxBaoM7kkJZA&$(7?}YT?KW<+BbzFxz}j<$DKHkR5DwZ?7V_i}X-I})=k>h6>|)e*U^~OU$2ATUsh@Pg(GMGP zR3Y;zx%(atadD(>@`Cn>p{>9wm{43D`<)A;_u0}UgR<9yn;;(Md%Em<6lJiyN)K#v zm}WlrJg_}<--AzFRnC+1pwW>8VVp*GxUhW>bUF9w5kNqy5O~e`hAHKJPvRVrFLVdj zFR+Ae$-)6@DME*~XMug-(WpyTa1#h;OBXGjIZ(OpL7a`vBA5wS@rk4rGg`5txLWt4 zesO5QHWOq~GiyQxJfE_>-(aSAoU#I_>Y?QmKovNe5On*#o-xbb=!VV;^R%A`=GHoW zl1OR|Q{I@U|3HCcT_OskS;*m&iBH8=Zrqi@S>|P zft99miyfs*D0JI?M%Ju8n|R5Tz-k39ZkJ)U#is8(Sxv zko;h-N{%9-$BaTZ?>E|_*K)$nGUhNsxUzJBYPTP4OLN;Av2jz>XkW|b-i9f{zQ?0b zIJb5w5bdmxZJe$hZr`(t*IXw)GJqKWc!&Jh49I9ml5A(hOV~6fiS)9HdE^m2?;sWXfM2G@1WCTQ+A@_T30)%@d$-Vsl=R4myA3Y~+3c2|``+45yecqQm zc$%ix(HM|bamp?0@+kzJNIxkFZTN)ixxW3b0*EqLqa!Q9s;S;AuKHRGI>UTTGQ*5J zCuRSFntmO0&8^QjRU9AIQXaJ4vt)y%kn>m13_tFP>Vi63KNy;f=l z`~l*psq|AaJ2Kw9=7UWA)+%*^)s>jVc@?E#r_1rfmF-D29#kMKX-4zeV?jAFr?ZCu+;v$(dG zw5=d9XGzY%mvoa{iaPtO{*bma*XuC^`7Cl41a-OnbzYYY+Q&T!++-W~(OCl+wRj1b>5-^_nfm z%PbpdFGMG}m1u?T+vD2mfG}+nIQPN3D%HxWugx2g3t?W>-}kXFtAbM=bm6R@HKs_z z7lNkFoChWLx!ke?5$%R?ZQ*9F9}_e|%KToZOYqE`I^tjM1HtWOz=fx^h$k!SiEaHR zFqu=*>rJP#1uRQg`?}_gGXe9j47$Mkzy`&bOIJ*D$K8kskeRJxXNGlf&XSbUsyxmG zOlgBNnT`BOmwlo6pXZ(DvnH-B9e80f(W(EU_ujiiXINhSjpsk}nkN+|_^D0xCY+lE zf;_W0M&t?XU^(8(+N;W+MSzqwrp4E<%&HiiV)ZB(p#w83rJpPto$4Kv1j@XeAGIv9 zz;~gEqgRdxrn14?Wr-`hW7U}^WxxBg6()o!z6(-MT7mjyp7ezPB8(3)1XCVko8uo{ zAb{7020!5CiuCh-=4Wc%^q_N4W#Z$1zQ9+<#8HW54XmU~XXUJY#xA%RizE#;>q1p(|0%uf%layry-E}NDpLZCUV}Efra_x)3?pl;v82^ z%Kur@rVBR&lz?+u`UYS?bQ#<1o=`F0uuY=-(^YL*r zV&9b&aM_!)Lr5wzMpE^yA61_I(g+QTTp#o zM$O;q!8s8XLDoj58=&4!l`I5s9#&nM7rhi>Klg2skM2fCp_<9`ri#I6h$-q>JK;~Q zvYVE_N(6V|?a7{^JYS0gv9HZ+qs$B=WR;{jfKz^}+mvS2G%2O@bhiISFfp!l6H_(i zbfQ7Ibrg?xr9i-lKF#*K260R%JzM&icNRVatJHdA1p6rO7dBGR~V2#)Za2h|mMv<$&}s zrtA4W6g|CQQqm}-jSu7IOvs+mx=*H&A%!1{w9#NO_%hmO08RS6(*r+Nl&qZb+E3uM z*$QB=LRs+PorbDb#Qh1`88yiuWliZGv(-1{oida$Ef%gXM`u;=-Lm57#c1ghB|Y`$ zckX-;2;BVU!2MWb)x?EoXh@u_p!~F$yZzI3Fd3RtB-O%EsB7X_^ezmzv6b%r%Q`%- z=pKV+BCWXnPpc-y6sw|n{75x~V<$QChl~ABwG{kxU{P->6bO?hhCxs+nxF{T5^f-o z*3#I>yTlh5Lx|nh)^Ny*?WJE$Z>I}*l3AxA!K_cBPVeWo8Pq`t6yH@omg-sIcu z5m)mb8s1<;EZzSJNfABQc>_MIA^z~GBRf0uUWz{Kvo=;(`9A(bsAFLa`dp0YISqJQ z6W_2du{K`V{3-C3?movtTX^W4n1tM+FO~Dfj|1##5ive*hrZ-(jyQ43=8^w9cxxtp z`(o%zs+jO}yDw{$%|$=e_58Ai*+rrD{!d9_QYHa_wU`t`pz5LsE1eBbnTnpW(1MSO zSwtBq6MwW4eOn`9z;D(zj*pm_EPxdgTTI>mi54Z|DrWla_T}QICLP+@d93Sg$j;7i zv0Q=y_CeQMU~HcFtqCBQi{IwMW2VnVoNG+E-JT@=UarTNH9RqsokwPEgJ!%)C5G@7 zPGXEm_+lq9kulTYxyVPEnuRy$C~4P4q|t#lCSAm4hA(`ZnD)+tW1=|O?NMppnKn;= zFE$c?u{Kb=Tr7Xy;{Bia8^xk-8v2s!AU2E$z$+F*Gl5P|u~z9|4SZwqhil-&w&D+8 z1CSkE&jHEl;^$DVeY!xJlcKr0kro=J%|-eR?KJVXamzSuHJqHG7RVGaSq{i4u8=?d zb`6&%{x);u5gn;n3#Sx56-|w2pzQL+s`PI`KIG+%nzg61B~rvcw-UY#(LjG7{&t?u z{!hvq#I*9!53h&cDR#-5kA7G~}@G+3xc`haeW+-BGY+q&v=Uj2iO5}w^_U`N9pGe5cF-7#DqwD`VJ%3Ud ztum-A@eE`@YLwKPVYi?ABNGUK*JECPs>`ZShEB7_*&Xmmz0_5ScX?H$5oG2O&hOLC z6$my#&wNQLgeDE?39z&IYEm<7F$(G7u1;}n>)??K#WKsqU1z`mj zH5Hn<3Lck1mOb)bs=V5Twfanm%cowa)Go=YV5O9{HW^)&r4+Wlk3Nv4vAp`c(5k5o zFh;F}bfGUjU9`Vd35|edZ;SuV3dP_Y0hgzY97g-5Ns_)XzQjncYV0@ztkf#-^2h1T zq)$g`{{R$I8HqgYMUDw%W%Fg8%e8}63x`nZo_S*yium)iIb7%JYtX%`58?i)q&G8n zLQ$R>mVd9i%Z|sv z=YKcs&>xrRk6sUuD5(|k9pJ``CLC2*jb)T&%sM~!Q0@ek={{@V5m!mAh<}6|;aPGK zJ%7s=ek`3kTpilkhPvB;8DHtlJXF-?!{k=}^eGj_IebrN5}Ka-f;sG0Jo{5Ut0v9(F^c3;$0!hl7+KO;E|Gd<)DdNoS_sr{Wb0Y(I<7sj~n9R0fUXwl%>s z$0S$W;02)TUu%!9#`&);JIv3|O@L=2{L)~{$X2RmjGGMd+`%o=`JEq{;j)MFAf;z# z(ffL&?z6D}DLg_05Kpy^+o$1j3|3Z%W&~`rP`xB=BD^hA!?nx6$v6$u&Va=z!R;8P z`snQ#Pfeul<}CKE=a_@Ycr7W0$XGqgjc{*8Kr^s!Ufi?ChBwTj$J~laSob}qI<;&b zACL<-YW${-S@q(bKRoHhJai3%2wz{Sf#c_3{!a0z`Kxd3S@+e1JMUlawoS11!O@VrdgB6W=nA?P2g{COzwBQDvk9ChOSlaO%G*jduRc7Ihe;iW*ncb|@ z?}Y6vEx1r3^edVEKf|X+y$Q_UG@~^x@WNcjFjWuXBT<`F`UM0D6{h?W7wE9j0zLs9dL1l1@mv2KEur4R0d-H!7wCMJt%WDTw8I<992!Abk#76Y@e9G zGbxmg%$N^(Cw0xqje zO`?Gd#8CYoD8U^R-~!Y}Y@-ddum8>bb*H%Y!y0ZimfDPNj5iT3~OI z2QaqWU2Q%<+8I@&rS(lHY0@uMnaXS9XG4MI8WHAgK0crruGEO>bOQHtE^`k12eL&fU@+MbMjNw=7yXXy=xfCLjK zR3h2kCvYC&uMYiZ*C+jSKi+9UI@sJZBVHR^-#4XAfCx6t&qb0L**Bkc9L#OD=zE@B zx1qc#0?O`9)K41pU(d(V0PkKsiU$vB4uJz>pIv9VGrs*oNuH8-_9oa4K#~SuS!-OC z`yzE>%g8I8hH#W&O|_6xXg;X4>UdP5N5qTj2?xXn8CJKo+Wq}v>xs&bgNCKfF`i6C z653X3tQ7oeU71U5Y*@;w3~XMgI?UD3W4-C7>W2-XqWNQ0wRPz5R@!%FXBJO5xEwAM z2@H69=3LrJ1)AQM0uCHglJ@-0UG^lOYnOqI$hr`Z{EaCsPP$wEL%y8AbbLWz) zcs%n;jA!HiV4sN^J`C6W0gs+Ox?HEFRdB&>;WGMUcRkngsLZ<`jv7vks^Zrb zxfC4w?!89h5PCvpmG;EIoRAhZWskQvGMXM9?A@9MG5tFklpYCxfa(Ssag>-oTgC@; zYTZX75{!jNF~r@*T~HSny4Lwe2Ie*^&3%XPl2Zi8$BhE6ds!<|=R@PY9z|)kV82{? zX`lJ^Cz?;->?z%GVQlSaO7%Z}KWkI$Ms?^-drf)sP?3G2_{(pUTK1{P)2x zE*^VKpT1uFdO?nlLGtV=HydA!yHk{D4mKI7axyw&_KM>PzYKf#sO}F|W?a)9^S8fU zbl)?(?oy<3P?^m-^n66=JcCgFq2OKLSqGXt(Pcj!L;J0Aj?y$9pB)o%_Ru5G zgL~?cH(9u&P~Y6*U*)d|s}T6)3JPW$j~~75)D$%j^M>dY&vy%sT*x2I8}pafv2jNC zLmU**19Z;Aj5q(<4!67{+dX(V+t}gP9mBh4M|+(y7K!(86!pDQeCmsK{Lb&6^Kg;pGJi%CGYrbR75M1`o6egL|`sleAvRRIsoS@TsFXih1w9AJZ<1X zML1H}cR*9V)e?*Dx2tR|Zh1R*xI*Q7^Zb$};-h@d>b(w2&A72F-OA;p{hA|JSD*9s z_0IYWj=C5TJnCY4BUokeiG#m9JBA+WdmXDL8e;cOULhJ{zu^LPDc^DUslX%RA@+6` zpGCJ|W<5L8B=n@~rKX}gvkV+WL+b`_Ro_0aSqBHK5?}e~ zTUv;2@F{xI+Kk5stbse9!eUbdzLk~jS^yx=aGQ%96R*PBruR(p;OP>1u!6M`q1 z{af@bKXuRTtd+s1(r?(p4NQ+#`{>+)V4!qqIfWgl`KX@quko$H|2%msfTMWq1pWb*Dfdl(`942o=D{}uv19EX=E5}>sx|)D`b-a+e zNKJhNLYp6e&_%*>1Dj?D{LIsD2T(@{Ka%ZG1l&o8_Z`(5EO-jv~2 z)?zJ)GOeTa@FX>~)tSpF4Tf{UaDmzp-Bed0RhPqRLkc4=Y!q^ucf!j>$YHm&zJ>O| zlCyau7-a$ko%Swb3%M+?`&@8><=Q6@{_D;1egNK~d^%y&kg~9{m1RpGB!l-3F4H{L zc;|L&?zv;pdyIVjpX&a(k3ZEnu2d7TW#SHSuDa7&y``mO$>}EC2@)J<{|En9$nkMm zg{~gIsX}TzzMTJmki-F!1|%>bfdL5&NMJw$0}>dJz<>k>BrqU>0SOF9U_b%`5*U!c zfCL64Fd%^e2@FVJKmr327?8k#1O_DVzbygQ7aI(}7&K$B_|KvJ?DKS8ZwjVTCU^bs z*OY&LK;PO}vMuQ@ZVV5)2g8l-V(G@FvzZR=HdY#2Hh)DKTys&y)P2tg$`@Z&!B(T_ zU%kJ-%^Umu)SmB$zp%G&v&`?OcLC8Inbr<;8>TaxZo_b7uo-kG2HlNe%>;tHL_};Q zN5par5jp)Qg3WMpAws|-oD|f12tcL08ip&ROWB3twu|ZJWa(_pptG#)7*3XA!3!@) z5j^^rn}D6#vll7(b3SS)*{Gu_hKn&}RTux2_tGpyNk zOE%k$wP2T@y$GPXbLA7@C%W{g4s^!-L_>X3<$}OIrr~$KA=v(#?x* zi$q&Trj@0m z6#6>l>($n}aaaTFgm0Wjp=`y_cLj#2NYTf(v~pz7?U{5eg&;b6XB);Ix;qPmOGb9R z^=poyO$8zjDcZX9`x#|2)k{EpF4wCTs(|=L&Y@5YF(g*OsD*O?M+{O zbnK5{Z`VHaiQ{mK3n_x6$*kLN`=*hA&=|g7yxR*jD$l|T&E@O<(b(m;cJ?eb6a3bZ z>1<2J(40pVE0jRUPy#3T8KXt_vHd0p0=g)sSi8Hq!5cF441MwUn|Ba;(`QmBt1y{Ml*nSR-Ce)|S!_3V5j|w+aM))(bT%kT1B^)*Lx&Ee_I}X8wAu}ko>Y)uO@BCb z3CLn4yfnLL0Fof_yqH3g1{+un&m zF3m}|&au-;5+X@+-PYOVGGwe`f@=Eix1fRCnG{Oz8Z34n`x}z% zB1KDgnbz;}Oh6rU?J<}jV~yaL*T=v7!s@@ z)RPhi#!7mnX*(v1-T(3{ytr^nGMMoP(9TW_fhzE)kNZO)*iN@^6Qhzqp)K9Qy%zMF zO0>}KM{ZoWYW{-7T`D!hNX%>De?&_!X}PmtdD?e*LqJ*xMmSa z3Z2~9P&oH1K(1v^(Nl+-rU`tl_aZfRU$Q1iDnur3Z3zoTGNGt<+M;2^utS?90aDWz z=}PZhF0!%;bW;wx(ZUdQdpSv>P$MA~jLeGesNU++*QY>n^WXFJ|IB(*_S#%I4OBjd zh(yOo$Z6GojY^rTRst^O7x}Q_4FrKkSV8Duh&;Q7B$473ASp%8R1US;4Crp(QYb%Q z&>QqfqO+hK#bEc(!>xXZ*!di6IsCIY!__BChG>-lnI3{5NvrO?;KbU?Cv@N7wHeV-BgB(!`afV7}HE>F94KNrp`G{g1uB_bLEeGF~(5H=(!?C1V*tAU@H4IvKbMH2N4cimjEH z79=U`YO(Zm5+$jY?d3wMfLoQ#D2WCA3ZN3O!su6LCrP4Y>Q`nDmVoejuL!Vlq{o6u0xp_mFyTLtteTy^ACX5?%Io0g0K3 zeouOzq<6-_wqSSI^^ZWY68mfk6VRE(Y^9r9!1&o<{011~pW#4~9(-fJJJ|Mwd;&IZ zp)hAW+U{Bh369wVG*o+OF*TwDF~ zues%K%G*IMgTAFumSRZq^(IMDS3V|CD~RU;@cZ_?yAgZ$Rr|<-m$`56$h2h<*)pGk z8%$8{;UC>HxA2uk02?Z2@h16EX@ddcP4cAxqW0sqIjUxg_$MI#)t%o|mi5WMU_W8_F8&vjw3v&x|U<>D5naqmU>JE_}w${obC@I0N;~)32<8AG^3S*vPOlD{@hbrQ~V?YG) z_tInmcS+U89wrjeK^75Ss5CsW+u-K`zv;n4iC@yZyJ@&BW=i+AX(Gz{8u6+9DO#_4a>b88|MC*qx(DmDY6bY0-0srCH ztfCK~zq2zbltmcOHJJoJVZ?*(&2(m9SHT2u1>P!FOF+cv%n6p+b9dz9+A^FOZZHf8 zw%Q|Msi1vJSQW!8HA_Ay?1I7UENcM?>7J+8JQ@mIqH8qlTI3=DK(zTGmaZei(uK}~ z;az8&{_=}eu5z|~ekJgtQBZWO0WP-nl>eR#uWUC0c(qZ z>mblJHW-H1$|u3a(cRYGS-yHDc(ZP_-%SlXFin7TYiZ)c3z0v}^&;L{RAW7=?y^kdG?z8#jidC2G7xHH*5d zV(sN3!SO+qw10=<+!cWf&!lfWiIXbEUB!7vs=M|bim|?8{o8Q4m|ea?FeIVjVXimL zXdC#-Y6uV5kd#dTuNRNqQ~Lze`PHnk2fqhQ!Ds3W43^KM2-6xyoNS>!BC1Z5)$IC< zv!ESEaT!dZ%)waEti$qQVRW=xtWw>yZ#81m_*DW}z0>%bON@Bev zb(2!>>R)U9faS-aVr&-Oc1%8cS6&mxJ*m7(6#CN-QC0?!(?-HpG8RqyxO_B_FoB%i zw`8&UEIlnB4VT6UuPI&)`DlhNpHPRv>T}&6@=;limLBLyHAhSIc!Mo?&MqcVmqD}H z==p6HdXp&>6X;}Nd0rhRA6*o69T;AoOgEbzE0UVeBzkQ>_>b)v;JJP#eom_~UOsA{ zHcTSZv{Db*Lr;O?57`Yn?8m+-AH6F?iFc>OA&La{_I<$tt3cViVUG+eZ|x-c*tnQM z*pCj-$IeGLAR<4@=WmIjTH_Yz1QNk7C;yrcCQV6%;a04aXWf#|X&;F|u9W-sWb8_E zT$+4riG5+~VZtuGdq(&u*bNqy=p|u5$U69zt>$Y?<9Cs~V z<>2-$X>5dEm?0lm6rsBdC;~Qhtj>XsX52K08(6`H53} zws7S$h)D|lG~mUUqV3~t`KZoNLRr~6i}L|gQaz!WfQZw_6i$PkdXep7I|Ejk@{xN) zOqY}w;?96vTkhMYuv#{_LxKb{T$}v6&OZ_5`m^PFECI+aGnV5tlJsY`fI3P6z@Yz( zYvxAsBGa!*hQrIefivq7Lj7(ky8_+72CFK ziz7SXFR$NL!?!(7K9G+ks@Qtk9^IjrK*`p8?WEmh5UvgwEp|u9vQR!O%aQ3xtp6+# z>MPS=JvTu7d?o2rBp%Xp-~^QbG%l401nBbEq82EUs@#}8n@~Z>zIHG^$z=37n<|c2)SLn z9v51(iEzvhA2~QM0X1W2%wnzT7y-oIRwXy|i~SZA?kC2jh1;N;Mj43@P_aYgvx#lw zb;A;nuKxDZr_uEW8ZNNr#2PLiR&30@%}H*w=(}LSD%NTw5$LYiD7UF6iH+_wht>PR zbDd}76V81Ch>&myIt$t%Eo>6j+ylXmhA4p*>@`Iq+@TE$Xb?CM_S3!vi!DZZW8_22 zDnG2+ADwq3AEC4*GQ(7&8PY?B2%haRgC&C3!*- z3WdE=@_VHVnAJ`Q%UIY14T7*eJ$Mqe#fj45Y5xGTXqdtli$@m8hs6|&gcI&6rSDmr zfz33?KGii4M9CLcnD3(R7x zVzXuPp+BpNyCbsHrDWgUixu(KUurLk8GJYhy%WJTB= zNah;(=si1-gxnLIZsdetn6m=JOWBLp=FdOM!s{B9a$`C=T3K2&1 +--source include/mysql_upgrade_cleanup.inc + +--echo # Check test table after upgrade +SHOW CREATE TABLE test.t1; +SELECT * FROM test.t1 ORDER BY a; +--source include/table_files_replace_pattern.inc +--list_files $MYSQLD_DATADIR1/test/ + +--echo # Stop the server +--source include/shutdown_mysqld.inc + +--let $restart_parameters = +--let $restart_hide_args = + +--echo # Remove copied files +--remove_file $DATA_ARCH_PATH +--exec rm -rf $MYSQLD_DATADIR1 diff --git a/mysql-test/suite/rocksdb.rpl/combinations b/mysql-test/suite/rocksdb.rpl/combinations index db389a073a9f..c118e967e80e 100644 --- a/mysql-test/suite/rocksdb.rpl/combinations +++ b/mysql-test/suite/rocksdb.rpl/combinations @@ -12,3 +12,25 @@ binlog-format=statement [mix] binlog-format=mixed + +[row-write-committed-native-partitioning] +mtr-result-dir = r-native-partitioning +mtr-tests-list = rpl_rocksdb_extra_col_slave +binlog-format=row +loose-rocksdb_write_policy=write_committed +loose-rocksdb-enable-native-partition=on + +[row-write-prepared-native-partitioning] +mtr-result-dir = r-native-partitioning +mtr-tests-list = rpl_rocksdb_extra_col_slave +binlog-format=row +loose-rocksdb_write_policy=write_prepared +loose-rocksdb_commit_time_batch_for_recovery=on +loose-rocksdb-enable-native-partition=on + +[stmt-native-partitioning] +mtr-result-dir = r-native-partitioning +mtr-tests-list = rpl_skip_trx_api_binlog_format +binlog-format=statement +loose-rocksdb-enable-native-partition=on + diff --git a/mysql-test/suite/rocksdb.rpl/r-native-partitioning/rpl_rocksdb_extra_col_slave.result b/mysql-test/suite/rocksdb.rpl/r-native-partitioning/rpl_rocksdb_extra_col_slave.result new file mode 100644 index 000000000000..422613774ee9 --- /dev/null +++ b/mysql-test/suite/rocksdb.rpl/r-native-partitioning/rpl_rocksdb_extra_col_slave.result @@ -0,0 +1,556 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +call mtr.add_suppression("Slave: Unknown table 'test.t6' Error_code: 1051"); +call mtr.add_suppression("Slave SQL.*Column [0-9] of table .test.t[0-9]*. cannot be converted from type.* Error_code: 1677"); +call mtr.add_suppression("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state"); +**** Diff Table Def Start **** +*** On Slave *** +STOP SLAVE; +SET @saved_slave_type_conversions = @@slave_type_conversions; +SET GLOBAL SLAVE_TYPE_CONVERSIONS = 'ALL_NON_LOSSY'; +CREATE TABLE t1 (a INT, b INT PRIMARY KEY, c CHAR(20), +d FLOAT DEFAULT '2.00', +e CHAR(4) DEFAULT 'TEST') +ENGINE='RocksDB'; +*** Create t1 on Master *** +CREATE TABLE t1 (a INT PRIMARY KEY, b INT, c CHAR(10) +) ENGINE='RocksDB'; +*** Start Slave *** +include/rpl_reset.inc +*** Master Data Insert *** +INSERT INTO t1 () VALUES(1,2,'TEXAS'),(2,1,'AUSTIN'),(3,4,'QA'); +SELECT * FROM t1 ORDER BY a; +a b c +1 2 TEXAS +2 1 AUSTIN +3 4 QA +*** Select from slave *** +SELECT * FROM t1 ORDER BY a; +a b c d e +1 2 TEXAS 2 TEST +2 1 AUSTIN 2 TEST +3 4 QA 2 TEST +SET GLOBAL SLAVE_TYPE_CONVERSIONS = @saved_slave_type_conversions; +*** Drop t1 *** +DROP TABLE t1; +*** Create t2 on slave *** +STOP SLAVE; +CREATE TABLE t2 (a INT, b INT PRIMARY KEY, c CHAR(5), +d FLOAT DEFAULT '2.00', +e CHAR(5) DEFAULT 'TEST2') +ENGINE='RocksDB'; +*** Create t2 on Master *** +CREATE TABLE t2 (a INT PRIMARY KEY, b INT, c CHAR(10) +) ENGINE='RocksDB'; +*** Start Slave *** +include/rpl_reset.inc +*** Master Data Insert *** +INSERT INTO t2 () VALUES(1,2,'Kyle, TEX'),(2,1,'JOE AUSTIN'),(3,4,'QA TESTING'); +SELECT * FROM t2 ORDER BY a; +a b c +1 2 Kyle, TEX +2 1 JOE AUSTIN +3 4 QA TESTING +include/wait_for_slave_sql_error.inc [errno=1677] +STOP SLAVE; +include/rpl_reset.inc +SELECT * FROM t2 ORDER BY a; +a b c d e +*** Drop t2 *** +DROP TABLE t2; +*** Create t3 on slave *** +STOP SLAVE; +CREATE TABLE t3 (a INT, b INT PRIMARY KEY, c CHAR(20), +d FLOAT DEFAULT '2.00', +e CHAR(5) DEFAULT 'TEST2') +ENGINE='RocksDB'; +*** Create t3 on Master *** +CREATE TABLE t3 (a BLOB, b INT PRIMARY KEY, c CHAR(20) +) ENGINE='RocksDB'; +*** Start Slave *** +include/rpl_reset.inc +*** Master Data Insert *** +set @b1 = 'b1'; +set @b1 = concat(@b1,@b1); +INSERT INTO t3 () VALUES(@b1,2,'Kyle, TEX'),(@b1,1,'JOE AUSTIN'),(@b1,4,'QA TESTING'); +****************************************************************** +*** Expect slave to fail with Error ER_SLAVE_CONVERSION_FAILED *** +****************************************************************** +include/wait_for_slave_sql_error_and_skip.inc [errno=1677] +*** Drop t3 *** +DROP TABLE t3; +*** Create t4 on slave *** +STOP SLAVE; +CREATE TABLE t4 (a INT, b INT PRIMARY KEY, c CHAR(20), +d FLOAT DEFAULT '2.00', +e CHAR(5) DEFAULT 'TEST2') +ENGINE='RocksDB'; +*** Create t4 on Master *** +CREATE TABLE t4 (a DECIMAL(8,2), b INT PRIMARY KEY, c CHAR(20) +) ENGINE='RocksDB'; +*** Start Slave *** +include/rpl_reset.inc +*** Master Data Insert *** +INSERT INTO t4 () VALUES(100.22,2,'Kyle, TEX'),(200.26,1,'JOE AUSTIN'), +(30000.22,4,'QA TESTING'); +****************************************************************** +*** Expect slave to fail with Error ER_SLAVE_CONVERSION_FAILED *** +****************************************************************** +include/wait_for_slave_sql_error_and_skip.inc [errno=1677] +*** Drop t4 *** +DROP TABLE t4; +*** Create t5 on slave *** +STOP SLAVE; +CREATE TABLE t5 (a INT PRIMARY KEY, b CHAR(5), +c FLOAT, d INT, e DOUBLE, +f DECIMAL(8,2))ENGINE='RocksDB'; +*** Create t5 on Master *** +CREATE TABLE t5 (a INT PRIMARY KEY, b VARCHAR(6), +c DECIMAL(8,2), d BIT, e BLOB, +f FLOAT) ENGINE='RocksDB'; +*** Start Slave *** +include/rpl_reset.inc +*** Master Data Insert *** +INSERT INTO t5 () VALUES(1,'Kyle',200.23,1,'b1b1',23.00098), +(2,'JOE',300.01,0,'b2b2',1.0000009); +****************************************************************** +*** Expect slave to fail with Error ER_SLAVE_CONVERSION_FAILED *** +****************************************************************** +include/wait_for_slave_sql_error_and_skip.inc [errno=1677] +*** Drop t5 *** +DROP TABLE t5; +*** Create t6 on slave *** +STOP SLAVE; +CREATE TABLE t6 (a INT PRIMARY KEY, b CHAR(5), +c FLOAT, d INT)ENGINE='RocksDB'; +*** Create t6 on Master *** +CREATE TABLE t6 (a INT PRIMARY KEY, b VARCHAR(6), +c DECIMAL(8,2), d BIT +) ENGINE='RocksDB'; +*** Start Slave *** +include/rpl_reset.inc +*** Master Data Insert *** +INSERT INTO t6 () VALUES(1,'Kyle',200.23,1), +(2,'JOE',300.01,0); +****************************************************************** +*** Expect slave to fail with Error ER_SLAVE_CONVERSION_FAILED *** +****************************************************************** +include/wait_for_slave_sql_error_and_skip.inc [errno=1677] +*** Drop t6 *** +include/rpl_reset.inc +DROP TABLE t6; +**** Diff Table Def End **** +**** Extra Colums Start **** +*** Create t7 on slave *** +STOP SLAVE; +SET sql_mode = 'NO_ENGINE_SUBSTITUTION'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +CREATE TABLE t7 (a INT KEY, b BLOB, c CHAR(5), +d TIMESTAMP NULL DEFAULT '0000-00-00 00:00:00', +e CHAR(20) DEFAULT 'Extra Column Testing') +ENGINE='RocksDB'; +*** Create t7 on Master *** +CREATE TABLE t7 (a INT PRIMARY KEY, b BLOB, c CHAR(5) +) ENGINE='RocksDB'; +*** Start Slave *** +include/rpl_reset.inc +*** Master Data Insert *** +set @b1 = 'b1'; +set @b1 = concat(@b1,@b1); +INSERT INTO t7 () VALUES(1,@b1,'Kyle'),(2,@b1,'JOE'),(3,@b1,'QA'); +SELECT * FROM t7 ORDER BY a; +a b c +1 b1b1 Kyle +2 b1b1 JOE +3 b1b1 QA +*** Select from slave *** +SELECT * FROM t7 ORDER BY a; +a b c d e +1 b1b1 Kyle 0000-00-00 00:00:00 Extra Column Testing +2 b1b1 JOE 0000-00-00 00:00:00 Extra Column Testing +3 b1b1 QA 0000-00-00 00:00:00 Extra Column Testing +*** Drop t7 *** +DROP TABLE t7; +*** Create t8 on slave *** +STOP SLAVE; +CREATE TABLE t8 (a INT KEY, b BLOB, c CHAR(5), +d TIMESTAMP NULL DEFAULT '0000-00-00 00:00:00', +e INT)ENGINE='RocksDB'; +SET sql_mode = default; +*** Create t8 on Master *** +CREATE TABLE t8 (a INT PRIMARY KEY, b BLOB, c CHAR(5) +) ENGINE='RocksDB'; +*** Start Slave *** +include/rpl_reset.inc +*** Master Data Insert *** +set @b1 = 'b1b1b1b1'; +set @b1 = concat(@b1,@b1); +INSERT INTO t8 () VALUES(1,@b1,'Kyle'),(2,@b1,'JOE'),(3,@b1,'QA'); +*** Drop t8 *** +DROP TABLE t8; +STOP SLAVE; +CREATE TABLE t9 (a INT KEY, b BLOB, c CHAR(5), +d TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP +ON UPDATE CURRENT_TIMESTAMP, +e INT NOT NULL, +f text not null, +g text, +h blob not null, +i blob) ENGINE='RocksDB'; +*** Create t9 on Master *** +CREATE TABLE t9 (a INT PRIMARY KEY, b BLOB, c CHAR(5) +) ENGINE='RocksDB'; +*** Start Slave *** +include/rpl_reset.inc +*** Master Data Insert *** +set @b1 = 'b1b1b1b1'; +set @b1 = concat(@b1,@b1); +INSERT INTO t9 () VALUES(1,@b1,'Kyle'),(2,@b1,'JOE'),(3,@b1,'QA'); +select * from t9; +a b c d e f g h i +1 b1b1b1b1b1b1b1b1 Kyle CURRENT_TIMESTAMP 0 NULL NULL +2 b1b1b1b1b1b1b1b1 JOE CURRENT_TIMESTAMP 0 NULL NULL +3 b1b1b1b1b1b1b1b1 QA CURRENT_TIMESTAMP 0 NULL NULL +include/assert.inc [The values of column 'd' should have non-zero timetsamp.] +DROP TABLE t9; +*** Create t10 on slave *** +STOP SLAVE; +CREATE TABLE t10 (a INT KEY, b BLOB, f DOUBLE DEFAULT '233', +c CHAR(5), e INT DEFAULT '1')ENGINE='RocksDB'; +*** Create t10 on Master *** +CREATE TABLE t10 (a INT PRIMARY KEY, b BLOB, c CHAR(5) +) ENGINE='RocksDB'; +*** Start Slave *** +include/rpl_reset.inc +*** Master Data Insert *** +set @b1 = 'b1b1b1b1'; +set @b1 = concat(@b1,@b1); +INSERT INTO t10 () VALUES(1,@b1,'Kyle'),(2,@b1,'JOE'),(3,@b1,'QA'); +****************************************************************** +*** Expect slave to fail with Error ER_SLAVE_CONVERSION_FAILED *** +****************************************************************** +include/wait_for_slave_sql_error_and_skip.inc [errno=1677] +*** Drop t10 *** +DROP TABLE t10; +*** Create t11 on slave *** +STOP SLAVE; +CREATE TABLE t11 (a INT KEY, b BLOB, f INT, +c CHAR(5) DEFAULT 'test', e INT DEFAULT '1')ENGINE='RocksDB'; +*** Create t11 on Master *** +CREATE TABLE t11 (a INT PRIMARY KEY, b BLOB, c VARCHAR(254) +) ENGINE='RocksDB'; +*** Start Slave *** +include/rpl_reset.inc +*** Master Data Insert *** +set @b1 = 'b1b1b1b1'; +set @b1 = concat(@b1,@b1); +INSERT INTO t11 () VALUES(1,@b1,'Kyle'),(2,@b1,'JOE'),(3,@b1,'QA'); +****************************************************************** +*** Expect slave to fail with Error ER_SLAVE_CONVERSION_FAILED *** +****************************************************************** +include/wait_for_slave_sql_error_and_skip.inc [errno=1677] +*** Drop t11 *** +DROP TABLE t11; +*** Create t12 on slave *** +STOP SLAVE; +CREATE TABLE t12 (a INT KEY, b BLOB, f TEXT, +c CHAR(5) DEFAULT 'test', e INT DEFAULT '1')ENGINE='RocksDB'; +*** Create t12 on Master *** +CREATE TABLE t12 (a INT PRIMARY KEY, b BLOB, c BLOB +) ENGINE='RocksDB'; +*** Start Slave *** +include/rpl_reset.inc +*** Master Data Insert *** +set @b1 = 'b1b1b1b1'; +set @b1 = concat(@b1,@b1); +INSERT INTO t12 () VALUES(1,@b1,'Kyle'),(2,@b1,'JOE'),(3,@b1,'QA'); +SELECT * FROM t12 ORDER BY a; +a b c +1 b1b1b1b1b1b1b1b1 Kyle +2 b1b1b1b1b1b1b1b1 JOE +3 b1b1b1b1b1b1b1b1 QA +*** Select on Slave *** +SELECT * FROM t12 ORDER BY a; +a b f c e +1 b1b1b1b1b1b1b1b1 Kyle test 1 +2 b1b1b1b1b1b1b1b1 JOE test 1 +3 b1b1b1b1b1b1b1b1 QA test 1 +*** Drop t12 *** +DROP TABLE t12; +**** Extra Colums End **** +*** BUG 22177 Start *** +*** Create t13 on slave *** +STOP SLAVE; +CREATE TABLE t13 (a INT KEY, b BLOB, c CHAR(5), +d INT DEFAULT '1', +e TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP +)ENGINE='RocksDB'; +*** Create t13 on Master *** +CREATE TABLE t13 (a INT PRIMARY KEY, b BLOB, c CHAR(5) +) ENGINE='RocksDB'; +*** Start Slave *** +include/rpl_reset.inc +*** Master Data Insert *** +set @b1 = 'b1b1b1b1'; +set @b1 = concat(@b1,@b1); +INSERT INTO t13 () VALUES(1,@b1,'Kyle'),(2,@b1,'JOE'),(3,@b1,'QA'); +SELECT * FROM t13 ORDER BY a; +a b c +1 b1b1b1b1b1b1b1b1 Kyle +2 b1b1b1b1b1b1b1b1 JOE +3 b1b1b1b1b1b1b1b1 QA +*** Select on Slave **** +SELECT * FROM t13 ORDER BY a; +a b c d e +1 b1b1b1b1b1b1b1b1 Kyle 1 CURRENT_TIMESTAMP +2 b1b1b1b1b1b1b1b1 JOE 1 CURRENT_TIMESTAMP +3 b1b1b1b1b1b1b1b1 QA 1 CURRENT_TIMESTAMP +*** Drop t13 *** +DROP TABLE t13; +*** 22117 END *** +*** Alter Master Table Testing Start *** +*** Create t14 on slave *** +STOP SLAVE; +CREATE TABLE t14 (c1 INT KEY, c4 BLOB, c5 CHAR(5), +c6 INT DEFAULT '1', +c7 TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP +)ENGINE='RocksDB'; +*** Create t14 on Master *** +CREATE TABLE t14 (c1 INT PRIMARY KEY, c4 BLOB, c5 CHAR(5) +) ENGINE='RocksDB'; +*** Start Slave *** +include/rpl_reset.inc +*** 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'), +(2,2.00,'This Test Should work',@b1,'JOE'), +(3,3.00,'If is does not, I will open a bug',@b1,'QA'); +SELECT * FROM t14 ORDER BY c1; +c1 c2 c3 c4 c5 +1 1.00 Replication Testing Extra Col b1b1b1b1b1b1b1b1 Kyle +2 2.00 This Test Should work b1b1b1b1b1b1b1b1 JOE +3 3.00 If is does not, I will open a bug b1b1b1b1b1b1b1b1 QA +*** Select on Slave **** +SELECT * FROM t14 ORDER BY c1; +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; +CREATE TABLE t14a (c1 INT KEY, c4 BLOB, c5 CHAR(5), +c6 INT DEFAULT '1', +c7 TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP +)ENGINE='RocksDB'; +*** Create t14a on Master *** +CREATE TABLE t14a (c1 INT PRIMARY KEY, c4 BLOB, c5 CHAR(5) +) ENGINE='RocksDB'; +*** Start Slave *** +include/rpl_reset.inc +*** 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; +*** Master Drop c5 *** +ALTER TABLE t14a DROP COLUMN c5; +*** Start Slave *** +include/rpl_reset.inc +*** 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 +DROP TABLE t14a; +*** connect to master and drop columns *** +ALTER TABLE t14 DROP COLUMN c2; +ALTER TABLE t14 DROP COLUMN c4; +*** Select from Master *** +SELECT * FROM t14 ORDER BY c1; +c1 c3 c5 +1 Replication Testing Extra Col Kyle +2 This Test Should work JOE +3 If is does not, I will open a bug QA +*** Select from Slave *** +SELECT * FROM t14 ORDER BY c1; +c1 c3 c5 c6 c7 +1 Replication Testing Extra Col Kyle 1 CURRENT_TIMESTAMP +2 This Test Should work JOE 1 CURRENT_TIMESTAMP +3 If is does not, I will open a bug QA 1 CURRENT_TIMESTAMP +*** Drop t14 *** +DROP TABLE t14; +*** Create t15 on slave *** +STOP SLAVE; +CREATE TABLE t15 (c1 INT KEY, c2 DECIMAL(8,2), c3 TEXT, +c4 BLOB, c5 CHAR(5), +c6 INT DEFAULT '1', +c7 TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP +)ENGINE='RocksDB'; +*** Create t15 on Master *** +CREATE TABLE t15 (c1 INT PRIMARY KEY, c2 DECIMAL(8,2), c3 TEXT, +c4 BLOB, c5 CHAR(5)) ENGINE='RocksDB'; +*** Start Slave *** +include/rpl_reset.inc +call mtr.add_suppression("Error .Unknown table .t6.. on query.* Error_code: 1051"); +call mtr.add_suppression("Error .Duplicate column name .c6.. on query.* Error_code: 1060"); +call mtr.add_suppression("Table definition on master and slave does not match: Column . ...e mismatch.* Error_code: 1535"); +*** Master Data Insert *** +set @b1 = 'b1b1b1b1'; +set @b1 = concat(@b1,@b1); +INSERT INTO t15 () VALUES(1,1.00,'Replication Testing Extra Col',@b1,'Kyle'), +(2,2.00,'This Test Should work',@b1,'JOE'), +(3,3.00,'If is does not, I will open a bug',@b1,'QA'); +SELECT * FROM t15 ORDER BY c1; +c1 c2 c3 c4 c5 +1 1.00 Replication Testing Extra Col b1b1b1b1b1b1b1b1 Kyle +2 2.00 This Test Should work b1b1b1b1b1b1b1b1 JOE +3 3.00 If is does not, I will open a bug b1b1b1b1b1b1b1b1 QA +*** Select on Slave **** +SELECT * FROM t15 ORDER BY c1; +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 +*** Add column on master that is a Extra on Slave *** +ALTER TABLE t15 ADD COLUMN c6 INT AFTER c5; +******************************************************** +*** Expect slave to fail with Error ER_DUP_FIELDNAME *** +******************************************************** +include/wait_for_slave_sql_error_and_skip.inc [errno=1060] +*** Try to insert in master **** +INSERT INTO t15 () VALUES(5,2.00,'Replication Testing',@b1,'Buda',2); +SELECT * FROM t15 ORDER BY c1; +c1 c2 c3 c4 c5 c6 +1 1.00 Replication Testing Extra Col b1b1b1b1b1b1b1b1 Kyle NULL +2 2.00 This Test Should work b1b1b1b1b1b1b1b1 JOE NULL +3 3.00 If is does not, I will open a bug b1b1b1b1b1b1b1b1 QA NULL +5 2.00 Replication Testing b1b1b1b1b1b1b1b1 Buda 2 +*** Try to select from slave **** +SELECT * FROM t15 ORDER BY c1; +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 *** +STOP SLAVE; +CREATE TABLE t16 (c1 INT KEY, c2 DECIMAL(8,2), c3 TEXT, +c4 BLOB, c5 CHAR(5), +c6 INT DEFAULT '1', +c7 TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP +)ENGINE='RocksDB'; +*** Create t16 on Master *** +CREATE TABLE t16 (c1 INT PRIMARY KEY, c2 DECIMAL(8,2), c3 TEXT, +c4 BLOB, c5 CHAR(5))ENGINE='RocksDB'; +*** Start Slave *** +include/rpl_reset.inc +*** Master Data Insert *** +set @b1 = 'b1b1b1b1'; +set @b1 = concat(@b1,@b1); +INSERT INTO t16 () VALUES(1,1.00,'Replication Testing Extra Col',@b1,'Kyle'), +(2,2.00,'This Test Should work',@b1,'JOE'), +(3,3.00,'If is does not, I will open a bug',@b1,'QA'); +SELECT * FROM t16 ORDER BY c1; +c1 c2 c3 c4 c5 +1 1.00 Replication Testing Extra Col b1b1b1b1b1b1b1b1 Kyle +2 2.00 This Test Should work b1b1b1b1b1b1b1b1 JOE +3 3.00 If is does not, I will open a bug b1b1b1b1b1b1b1b1 QA +*** Select on Slave **** +SELECT * FROM t16 ORDER BY c1; +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 +*** Add Partition on master *** +ALTER TABLE t16 PARTITION BY KEY(c1) PARTITIONS 4; +INSERT INTO t16 () VALUES(4,1.00,'Replication Rocks',@b1,'Omer'); +SHOW CREATE TABLE t16; +Table Create Table +t16 CREATE TABLE `t16` ( + `c1` int(11) NOT NULL, + `c2` decimal(8,2) DEFAULT NULL, + `c3` text, + `c4` blob, + `c5` char(5) DEFAULT NULL, + PRIMARY KEY (`c1`) +) ENGINE=ROCKSDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (c1) +PARTITIONS 4 */ +*** Show table on Slave **** +SHOW CREATE TABLE t16; +Table Create Table +t16 CREATE TABLE `t16` ( + `c1` int(11) NOT NULL, + `c2` decimal(8,2) DEFAULT NULL, + `c3` text, + `c4` blob, + `c5` char(5) DEFAULT NULL, + `c6` int(11) DEFAULT '1', + `c7` timestamp NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`c1`) +) ENGINE=ROCKSDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (c1) +PARTITIONS 4 */ +*** DROP TABLE t16 *** +DROP TABLE t16; +*** Alter Master End *** +*** Create t17 on slave *** +STOP SLAVE; +CREATE TABLE t17 (a SMALLINT, b INT PRIMARY KEY, c CHAR(5), +d FLOAT DEFAULT '2.00', +e CHAR(5) DEFAULT 'TEST2') +ENGINE='RocksDB'; +*** Create t17 on Master *** +CREATE TABLE t17 (a BIGINT PRIMARY KEY, b INT, c CHAR(10) +) ENGINE='RocksDB'; +*** Start Slave *** +include/rpl_reset.inc +*** Master Data Insert *** +INSERT INTO t17 () VALUES(9223372036854775807,2,'Kyle, TEX'); +****************************************************************** +*** Expect slave to fail with Error ER_SLAVE_CONVERSION_FAILED *** +****************************************************************** +include/wait_for_slave_sql_error_and_skip.inc [errno=1677] +** DROP table t17 *** +DROP TABLE t17; +include/rpl_end.inc diff --git a/mysql-test/suite/rocksdb.rpl/r-native-partitioning/rpl_skip_trx_api_binlog_format.result b/mysql-test/suite/rocksdb.rpl/r-native-partitioning/rpl_skip_trx_api_binlog_format.result new file mode 100644 index 000000000000..524920740303 --- /dev/null +++ b/mysql-test/suite/rocksdb.rpl/r-native-partitioning/rpl_skip_trx_api_binlog_format.result @@ -0,0 +1,55 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +call mtr.add_suppression("Masters binlog format is not ROW and storage engine can not handle non-ROW events at this time.*"); +set @orig_rocksdb_rpl_skip_tx_api=@@global.rocksdb_rpl_skip_tx_api; +set @orig_read_only=@@global.read_only; +set @orig_super_read_only=@@global.super_read_only; +set @@global.rocksdb_rpl_skip_tx_api=ON; +set rocksdb_unsafe_for_binlog=1; +create table t1(a int) engine=rocksdb; +insert into t1 values(1); +include/wait_for_slave_sql_error.inc [errno=1593] +Last_SQL_Error = 'Fatal error: Masters binlog format is not ROW and storage engine can not handle non-ROW events at this time. Table: 'test.t1' Query: 'insert into t1 values(1)'' +"Table after error" +select * from t1; +a +set @@global.super_read_only=ON; +include/start_slave.inc +include/sync_slave_sql_with_master.inc +"Table after error fixed" +select * from t1; +a +1 +drop table t1; +include/sync_slave_sql_with_master.inc +set @@global.rocksdb_rpl_skip_tx_api=@orig_rocksdb_rpl_skip_tx_api; +set @@global.super_read_only=@orig_super_read_only; +set @@global.read_only=@orig_read_only; +set @@global.rocksdb_rpl_skip_tx_api=ON; +set rocksdb_unsafe_for_binlog=1; +create table t1(a int, primary key (a)) engine=rocksdb partition by key(a) partitions 2; +insert into t1 values(1), (2), (3), (4); +include/wait_for_slave_sql_error.inc [errno=1593] +Last_SQL_Error = 'Fatal error: Masters binlog format is not ROW and storage engine can not handle non-ROW events at this time. Table: 'test.t1' Query: 'insert into t1 values(1), (2), (3), (4)'' +"Table after error" +select * from t1; +a +set @@global.super_read_only=ON; +include/start_slave.inc +include/sync_slave_sql_with_master.inc +"Table after error fixed" +select * from t1; +a +1 +3 +2 +4 +drop table t1; +include/sync_slave_sql_with_master.inc +set @@global.rocksdb_rpl_skip_tx_api=@orig_rocksdb_rpl_skip_tx_api; +set @@global.super_read_only=@orig_super_read_only; +set @@global.read_only=@orig_read_only; +include/rpl_end.inc diff --git a/mysql-test/suite/rocksdb.sys_vars/combinations b/mysql-test/suite/rocksdb.sys_vars/combinations new file mode 100644 index 000000000000..396612adedaa --- /dev/null +++ b/mysql-test/suite/rocksdb.sys_vars/combinations @@ -0,0 +1,7 @@ +[non-native-partitioning] +loose-rocksdb-enable-native-partition=off + +[native-partitioning] +loose-rocksdb-enable-native-partition=on +mtr-result-dir = r-native-partitioning +mtr-tests-list = rocksdb_update_cf_options_basic diff --git a/mysql-test/suite/rocksdb.sys_vars/r-native-partitioning/rocksdb_update_cf_options_basic.result b/mysql-test/suite/rocksdb.sys_vars/r-native-partitioning/rocksdb_update_cf_options_basic.result new file mode 100644 index 000000000000..5e4991fe542b --- /dev/null +++ b/mysql-test/suite/rocksdb.sys_vars/r-native-partitioning/rocksdb_update_cf_options_basic.result @@ -0,0 +1,115 @@ +call mtr.add_suppression("MyRocks: NULL is not a valid option for updates to column family settings."); +call mtr.add_suppression("Invalid cf options, '=' expected *"); +call mtr.add_suppression("MyRocks: failed to parse the updated column family options = *"); +call mtr.add_suppression("Invalid cf config for default in override options *"); +CREATE TABLE `t1` ( +`col1` bigint(20) NOT NULL, +`col2` varbinary(64) NOT NULL, +`col3` varbinary(256) NOT NULL, +`col4` bigint(20) NOT NULL, +`col5` mediumblob NOT NULL, +PRIMARY KEY (`col1`,`col2`,`col3`) COMMENT 'custom_p0_cfname=cf1;custom_p1_cfname=cf2', +UNIQUE KEY (`col2`, `col4`) COMMENT 'custom_p5_cfname=cf3' +) ENGINE=ROCKSDB DEFAULT CHARSET=latin1 +PARTITION BY LIST COLUMNS (`col2`) ( +PARTITION custom_p0 VALUES IN (0x12345), +PARTITION custom_p1 VALUES IN (0x23456), +PARTITION custom_p2 VALUES IN (0x34567), +PARTITION custom_p3 VALUES IN (0x45678), +PARTITION custom_p4 VALUES IN (0x56789), +PARTITION custom_p5 VALUES IN (0x6789A), +PARTITION custom_p6 VALUES IN (0x789AB), +PARTITION custom_p7 VALUES IN (0x89ABC) +); +SELECT @@global.rocksdb_update_cf_options; +@@global.rocksdb_update_cf_options +NULL +SET @@global.rocksdb_update_cf_options = NULL; +SELECT @@global.rocksdb_update_cf_options; +@@global.rocksdb_update_cf_options +NULL +SET @@global.rocksdb_update_cf_options = NULL; +SELECT @@global.rocksdb_update_cf_options; +@@global.rocksdb_update_cf_options +NULL +SET @@global.rocksdb_update_cf_options = ''; +SELECT @@global.rocksdb_update_cf_options; +@@global.rocksdb_update_cf_options + +SELECT @@global.rocksdb_update_cf_options; +@@global.rocksdb_update_cf_options + +SELECT * FROM INFORMATION_SCHEMA.ROCKSDB_CF_OPTIONS WHERE CF_NAME='default' AND OPTION_TYPE='WRITE_BUFFER_SIZE'; +CF_NAME OPTION_TYPE VALUE +default WRITE_BUFFER_SIZE 67108864 +SELECT * FROM INFORMATION_SCHEMA.ROCKSDB_CF_OPTIONS WHERE CF_NAME='default' AND OPTION_TYPE='TARGET_FILE_SIZE_BASE'; +CF_NAME OPTION_TYPE VALUE +default TARGET_FILE_SIZE_BASE 67108864 +SET @@global.rocksdb_update_cf_options = 'default={write_buffer_size=8m;target_file_size_base=2m};'; +SELECT @@global.rocksdb_update_cf_options; +@@global.rocksdb_update_cf_options +default={write_buffer_size=8m;target_file_size_base=2m}; +SELECT * FROM INFORMATION_SCHEMA.ROCKSDB_CF_OPTIONS WHERE CF_NAME='default' AND OPTION_TYPE='WRITE_BUFFER_SIZE'; +CF_NAME OPTION_TYPE VALUE +default WRITE_BUFFER_SIZE 8388608 +SELECT * FROM INFORMATION_SCHEMA.ROCKSDB_CF_OPTIONS WHERE CF_NAME='default' AND OPTION_TYPE='TARGET_FILE_SIZE_BASE'; +CF_NAME OPTION_TYPE VALUE +default TARGET_FILE_SIZE_BASE 2097152 +SELECT * FROM INFORMATION_SCHEMA.ROCKSDB_CF_OPTIONS WHERE CF_NAME='cf1' AND OPTION_TYPE='WRITE_BUFFER_SIZE'; +CF_NAME OPTION_TYPE VALUE +cf1 WRITE_BUFFER_SIZE 67108864 +SELECT * FROM INFORMATION_SCHEMA.ROCKSDB_CF_OPTIONS WHERE CF_NAME='cf1' AND OPTION_TYPE='TARGET_FILE_SIZE_BASE'; +CF_NAME OPTION_TYPE VALUE +cf1 TARGET_FILE_SIZE_BASE 67108864 +SELECT * FROM INFORMATION_SCHEMA.ROCKSDB_CF_OPTIONS WHERE CF_NAME='cf2' AND OPTION_TYPE='WRITE_BUFFER_SIZE'; +CF_NAME OPTION_TYPE VALUE +cf2 WRITE_BUFFER_SIZE 67108864 +SELECT * FROM INFORMATION_SCHEMA.ROCKSDB_CF_OPTIONS WHERE CF_NAME='cf2' AND OPTION_TYPE='MAX_BYTES_FOR_LEVEL_MULTIPLIER'; +CF_NAME OPTION_TYPE VALUE +cf2 MAX_BYTES_FOR_LEVEL_MULTIPLIER 10.000000 +SELECT * FROM INFORMATION_SCHEMA.ROCKSDB_CF_OPTIONS WHERE CF_NAME='cf3' AND OPTION_TYPE='TARGET_FILE_SIZE_BASE'; +CF_NAME OPTION_TYPE VALUE +cf3 TARGET_FILE_SIZE_BASE 67108864 +SET @@global.rocksdb_update_cf_options = 'cf1={write_buffer_size=8m;target_file_size_base=2m};cf2={write_buffer_size=16m;max_bytes_for_level_multiplier=8};cf3={target_file_size_base=4m};'; +SELECT @@global.rocksdb_update_cf_options; +@@global.rocksdb_update_cf_options +cf1={write_buffer_size=8m;target_file_size_base=2m};cf2={write_buffer_size=16m;max_bytes_for_level_multiplier=8};cf3={target_file_size_base=4m}; +SELECT * FROM INFORMATION_SCHEMA.ROCKSDB_CF_OPTIONS WHERE CF_NAME='cf1' AND OPTION_TYPE='WRITE_BUFFER_SIZE'; +CF_NAME OPTION_TYPE VALUE +cf1 WRITE_BUFFER_SIZE 8388608 +SELECT * FROM INFORMATION_SCHEMA.ROCKSDB_CF_OPTIONS WHERE CF_NAME='cf1' AND OPTION_TYPE='TARGET_FILE_SIZE_BASE'; +CF_NAME OPTION_TYPE VALUE +cf1 TARGET_FILE_SIZE_BASE 2097152 +SELECT * FROM INFORMATION_SCHEMA.ROCKSDB_CF_OPTIONS WHERE CF_NAME='cf2' AND OPTION_TYPE='WRITE_BUFFER_SIZE'; +CF_NAME OPTION_TYPE VALUE +cf2 WRITE_BUFFER_SIZE 16777216 +SELECT * FROM INFORMATION_SCHEMA.ROCKSDB_CF_OPTIONS WHERE CF_NAME='cf2' AND OPTION_TYPE='MAX_BYTES_FOR_LEVEL_MULTIPLIER'; +CF_NAME OPTION_TYPE VALUE +cf2 MAX_BYTES_FOR_LEVEL_MULTIPLIER 8.000000 +SELECT * FROM INFORMATION_SCHEMA.ROCKSDB_CF_OPTIONS WHERE CF_NAME='cf3' AND OPTION_TYPE='TARGET_FILE_SIZE_BASE'; +CF_NAME OPTION_TYPE VALUE +cf3 TARGET_FILE_SIZE_BASE 4194304 +SET @@global.rocksdb_update_cf_options = 'cf3={target_file_size_base=24m};'; +SELECT @@global.rocksdb_update_cf_options; +@@global.rocksdb_update_cf_options +cf3={target_file_size_base=24m}; +SELECT * FROM INFORMATION_SCHEMA.ROCKSDB_CF_OPTIONS WHERE CF_NAME='cf3' AND OPTION_TYPE='TARGET_FILE_SIZE_BASE'; +CF_NAME OPTION_TYPE VALUE +cf3 TARGET_FILE_SIZE_BASE 25165824 +SET @@global.rocksdb_update_cf_options = 'cf1={target_file_size_base=24m};foo={max_bytes_for_level_multiplier=8};'; +SELECT @@global.rocksdb_update_cf_options; +@@global.rocksdb_update_cf_options +cf1={target_file_size_base=24m};foo={max_bytes_for_level_multiplier=8}; +SELECT * FROM INFORMATION_SCHEMA.ROCKSDB_CF_OPTIONS WHERE CF_NAME='cf1' AND OPTION_TYPE='TARGET_FILE_SIZE_BASE'; +CF_NAME OPTION_TYPE VALUE +cf1 TARGET_FILE_SIZE_BASE 25165824 +SET @@global.rocksdb_update_cf_options = 'default={foo=bar};';; +ERROR 42000: Variable 'rocksdb_update_cf_options' can't be set to the value of 'default={foo=bar};' +SELECT @@global.rocksdb_update_cf_options; +@@global.rocksdb_update_cf_options +cf1={target_file_size_base=24m};foo={max_bytes_for_level_multiplier=8}; +SET @@global.rocksdb_update_cf_options = NULL; +SELECT @@global.rocksdb_update_cf_options; +@@global.rocksdb_update_cf_options +NULL +DROP TABLE t1; diff --git a/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_enable_native_partition_basic.result b/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_enable_native_partition_basic.result new file mode 100644 index 000000000000..c156131d9a03 --- /dev/null +++ b/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_enable_native_partition_basic.result @@ -0,0 +1,7 @@ +SET @start_global_value = @@global.ROCKSDB_ENABLE_NATIVE_PARTITION; +SELECT @start_global_value; +@start_global_value +0 +"Trying to set variable @@global.ROCKSDB_ENABLE_NATIVE_PARTITION to 444. It should fail because it is readonly." +SET @@global.ROCKSDB_ENABLE_NATIVE_PARTITION = 444; +ERROR HY000: Variable 'rocksdb_enable_native_partition' is a read only variable diff --git a/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_enable_native_partition_basic.test b/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_enable_native_partition_basic.test new file mode 100644 index 000000000000..841303ebe9ab --- /dev/null +++ b/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_enable_native_partition_basic.test @@ -0,0 +1,6 @@ +--source include/have_rocksdb.inc + +--let $sys_var=ROCKSDB_ENABLE_NATIVE_PARTITION +--let $read_only=1 +--let $session=0 +--source ../include/rocksdb_sys_var.inc diff --git a/mysql-test/suite/rocksdb/combinations b/mysql-test/suite/rocksdb/combinations index d49de3d38b3c..bd4cded237a8 100644 --- a/mysql-test/suite/rocksdb/combinations +++ b/mysql-test/suite/rocksdb/combinations @@ -1,6 +1,14 @@ [write_committed] +loose-rocksdb-enable-native-partition=off loose-rocksdb_write_policy=write_committed [write_prepared] +loose-rocksdb-enable-native-partition=off loose-rocksdb_write_policy=write_prepared loose-rocksdb_commit_time_batch_for_recovery=on + +[write_committed-native_partitioning] +mtr-tests-list = add_index_inplace,add_index_inplace_crash,autoinc_crash_safe_partition,gap_lock_error,get_error_message,issue495,nonflushing_analyze_parts_debug,partition,rocksdb,rocksdb_cf_per_partition,rocksdb_parts,show_engine,ttl_primary_with_partitions,ttl_secondary_with_partitions,unique_sec,validate_datadict,upgrade_parts_from_prev_ver,disable_native_partitioning +mtr-result-dir = r-native-partitioning +loose-rocksdb_write_policy=write_committed +loose-rocksdb-enable-native-partition=on diff --git a/mysql-test/suite/rocksdb/include/have_native_partitioning.inc b/mysql-test/suite/rocksdb/include/have_native_partitioning.inc new file mode 100644 index 000000000000..89124e98c5b7 --- /dev/null +++ b/mysql-test/suite/rocksdb/include/have_native_partitioning.inc @@ -0,0 +1,3 @@ +if (`select count(*) = 0 from performance_schema.session_variables where variable_name = 'rocksdb_enable_native_partition' and variable_value = 'on';`) { + --skip Test requires native partitioning enabled +} diff --git a/mysql-test/suite/rocksdb/r-native-partitioning/add_index_inplace.result b/mysql-test/suite/rocksdb/r-native-partitioning/add_index_inplace.result new file mode 100644 index 000000000000..b034f4a2615b --- /dev/null +++ b/mysql-test/suite/rocksdb/r-native-partitioning/add_index_inplace.result @@ -0,0 +1,468 @@ +CREATE TABLE t1 (a INT, b INT, KEY ka(a), KEY kab(a,b)) ENGINE=RocksDB; +INSERT INTO t1 (a, b) VALUES (1, 5); +INSERT INTO t1 (a, b) VALUES (2, 6); +INSERT INTO t1 (a, b) VALUES (3, 7); +ALTER TABLE t1 ADD INDEX kb(b), ALGORITHM=INPLACE; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` int(11) DEFAULT NULL, + KEY `ka` (`a`), + KEY `kab` (`a`,`b`), + KEY `kb` (`b`) +) ENGINE=ROCKSDB DEFAULT CHARSET=latin1 +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +SELECT * FROM t1 FORCE INDEX(kb) WHERE b > 5; +a b +2 6 +3 7 +SELECT * FROM t1 FORCE INDEX(kab) WHERE a > 2; +a b +3 7 +DROP TABLE t1; +CREATE TABLE t1 (a INT, b INT, KEY ka(a), KEY kab(a,b)) ENGINE=RocksDB; +INSERT INTO t1 (a, b) VALUES (1, 5); +INSERT INTO t1 (a, b) VALUES (2, 6); +INSERT INTO t1 (a, b) VALUES (3, 7); +ALTER TABLE t1 ADD INDEX kb(b), DROP INDEX ka, ALGORITHM=INPLACE; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` int(11) DEFAULT NULL, + KEY `kab` (`a`,`b`), + KEY `kb` (`b`) +) ENGINE=ROCKSDB DEFAULT CHARSET=latin1 +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +SELECT * FROM t1 FORCE INDEX(kb) WHERE b > 5; +a b +2 6 +3 7 +SELECT * FROM t1 FORCE INDEX(kab) WHERE a > 2; +a b +3 7 +DROP TABLE t1; +CREATE TABLE t1 (a INT, b INT, KEY ka(a), KEY kab(a,b)) ENGINE=RocksDB; +INSERT INTO t1 (a, b) VALUES (1, 5); +INSERT INTO t1 (a, b) VALUES (2, 6); +INSERT INTO t1 (a, b) VALUES (3, 7); +ALTER TABLE t1 DROP INDEX ka, DROP INDEX kab, ALGORITHM=INPLACE; +ALTER TABLE t1 ADD INDEX kb(b), ADD INDEX kab(a,b), ALGORITHM=INPLACE; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` int(11) DEFAULT NULL, + KEY `kb` (`b`), + KEY `kab` (`a`,`b`) +) ENGINE=ROCKSDB DEFAULT CHARSET=latin1 +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +SELECT * FROM t1 FORCE INDEX(kb) WHERE b > 5; +a b +2 6 +3 7 +SELECT * FROM t1 FORCE INDEX(kab) WHERE a > 2; +a b +3 7 +DROP TABLE t1; +CREATE TABLE t1 (a INT, b INT, KEY ka(a), KEY kab(a,b)) ENGINE=RocksDB; +INSERT INTO t1 (a, b) VALUES (1, 5); +INSERT INTO t1 (a, b) VALUES (2, 6); +INSERT INTO t1 (a, b) VALUES (3, 7); +ALTER TABLE t1 ADD INDEX kb(b), DROP INDEX ka, ADD INDEX kba(b,a), DROP INDEX kab, ALGORITHM=INPLACE; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` int(11) DEFAULT NULL, + KEY `kb` (`b`), + KEY `kba` (`b`,`a`) +) ENGINE=ROCKSDB DEFAULT CHARSET=latin1 +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +SELECT * FROM t1 FORCE INDEX(kb) WHERE b > 5; +a b +2 6 +3 7 +SELECT * FROM t1 FORCE INDEX(kba) WHERE a > 2; +a b +3 7 +DROP TABLE t1; +CREATE TABLE t1 (a INT, b INT, KEY ka(a), KEY kab(a,b)) ENGINE=RocksDB; +ALTER TABLE t1 DROP INDEX ka, ADD INDEX ka(b), ALGORITHM=INPLACE; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` int(11) DEFAULT NULL, + KEY `kab` (`a`,`b`), + KEY `ka` (`b`) +) ENGINE=ROCKSDB DEFAULT CHARSET=latin1 +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +SELECT * FROM t1 FORCE INDEX(ka) WHERE b > 5; +a b +SELECT * FROM t1 FORCE INDEX(kab) WHERE a > 2; +a b +DROP TABLE t1; +CREATE TABLE t1 (pk CHAR(8) PRIMARY KEY, a VARCHAR(11), b INT UNSIGNED) ENGINE=rocksdb charset utf8 collate utf8_bin; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `pk` char(8) COLLATE utf8_bin NOT NULL, + `a` varchar(11) COLLATE utf8_bin DEFAULT NULL, + `b` int(10) unsigned DEFAULT NULL, + PRIMARY KEY (`pk`) +) ENGINE=ROCKSDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin +SHOW COLUMNS IN t1; +Field Type Null Key Default Extra +pk char(8) NO PRI NULL +a varchar(11) YES NULL +b int(10) unsigned YES NULL +INSERT INTO t1 VALUES ('aaa', '1111', 1); +INSERT INTO t1 VALUES ('bbb', '2222', 2); +INSERT INTO t1 VALUES ('ccc', '3333', 3); +ALTER TABLE t1 ADD INDEX kab(a,b), ALGORITHM=INPLACE; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `pk` char(8) COLLATE utf8_bin NOT NULL, + `a` varchar(11) COLLATE utf8_bin DEFAULT NULL, + `b` int(10) unsigned DEFAULT NULL, + PRIMARY KEY (`pk`), + KEY `kab` (`a`,`b`) +) ENGINE=ROCKSDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +SELECT * FROM t1 FORCE INDEX(kab) WHERE a > '2' AND b < 3; +pk a b +bbb 2222 2 +DROP TABLE t1; +CREATE TABLE t1 (pk CHAR(8) PRIMARY KEY, a VARCHAR(11), b INT UNSIGNED) ENGINE=rocksdb charset utf8 collate utf8_bin; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `pk` char(8) COLLATE utf8_bin NOT NULL, + `a` varchar(11) COLLATE utf8_bin DEFAULT NULL, + `b` int(10) unsigned DEFAULT NULL, + PRIMARY KEY (`pk`) +) ENGINE=ROCKSDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin +SHOW COLUMNS IN t1; +Field Type Null Key Default Extra +pk char(8) NO PRI NULL +a varchar(11) YES NULL +b int(10) unsigned YES NULL +INSERT INTO t1 VALUES ('aaa', '1111', 1); +INSERT INTO t1 VALUES ('bbb', '2222', 2); +INSERT INTO t1 VALUES ('ccc', '3333', 3); +ALTER TABLE t1 ADD INDEX kab(a,b), ALGORITHM=INPLACE; +ALTER TABLE t1 ADD INDEX ka(a), DROP INDEX kab, ALGORITHM=INPLACE; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `pk` char(8) COLLATE utf8_bin NOT NULL, + `a` varchar(11) COLLATE utf8_bin DEFAULT NULL, + `b` int(10) unsigned DEFAULT NULL, + PRIMARY KEY (`pk`), + KEY `ka` (`a`) +) ENGINE=ROCKSDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +SELECT * FROM t1 FORCE INDEX(ka) WHERE a > '2' AND b < 3; +pk a b +bbb 2222 2 +DROP TABLE t1; +CREATE TABLE t1 (pk CHAR(8) PRIMARY KEY, a VARCHAR(11), b INT UNSIGNED) ENGINE=rocksdb charset utf8 collate utf8_bin; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `pk` char(8) COLLATE utf8_bin NOT NULL, + `a` varchar(11) COLLATE utf8_bin DEFAULT NULL, + `b` int(10) unsigned DEFAULT NULL, + PRIMARY KEY (`pk`) +) ENGINE=ROCKSDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin +SHOW COLUMNS IN t1; +Field Type Null Key Default Extra +pk char(8) NO PRI NULL +a varchar(11) YES NULL +b int(10) unsigned YES NULL +INSERT INTO t1 VALUES ('aaa', '1111', 1); +INSERT INTO t1 VALUES ('bbb', '2222', 2); +INSERT INTO t1 VALUES ('ccc', '3333', 3); +ALTER TABLE t1 ADD INDEX kab(a,b), ADD INDEX ka(a), ADD INDEX kb(b), ALGORITHM=INPLACE; +ALTER TABLE t1 DROP INDEX ka, DROP INDEX kb, ALGORITHM=INPLACE; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `pk` char(8) COLLATE utf8_bin NOT NULL, + `a` varchar(11) COLLATE utf8_bin DEFAULT NULL, + `b` int(10) unsigned DEFAULT NULL, + PRIMARY KEY (`pk`), + KEY `kab` (`a`,`b`) +) ENGINE=ROCKSDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +SELECT * FROM t1 FORCE INDEX(kab) WHERE a > '2' AND b < 3; +pk a b +bbb 2222 2 +DROP TABLE t1; +CREATE TABLE t1 (a INT, b INT, KEY ka(a), KEY kab(a,b)) ENGINE=RocksDB; +INSERT INTO t1 (a, b) VALUES (1, 5); +INSERT INTO t1 (a, b) VALUES (2, 6); +INSERT INTO t1 (a, b) VALUES (3, 7); +CREATE INDEX kb on t1 (b); +CREATE INDEX kba on t1 (b,a); +DROP INDEX ka on t1; +DROP INDEX kab on t1; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` int(11) DEFAULT NULL, + KEY `kb` (`b`), + KEY `kba` (`b`,`a`) +) ENGINE=ROCKSDB DEFAULT CHARSET=latin1 +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +SELECT * FROM t1 FORCE INDEX(kb) WHERE b > 5; +a b +2 6 +3 7 +SELECT * FROM t1 FORCE INDEX(kba) WHERE a > 2; +a b +3 7 +DROP TABLE t1; +CREATE TABLE t1 (i INT, j INT, k INT, PRIMARY KEY (i), KEY(j)) ENGINE = ROCKSDB PARTITION BY KEY(i) PARTITIONS 4; +ALTER TABLE t1 ADD INDEX kij(i,j), ALGORITHM=INPLACE; +DROP INDEX kij ON t1; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `i` int(11) NOT NULL, + `j` int(11) DEFAULT NULL, + `k` int(11) DEFAULT NULL, + PRIMARY KEY (`i`), + KEY `j` (`j`) +) ENGINE=ROCKSDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (i) +PARTITIONS 4 */ +SELECT * FROM t1 ORDER BY i LIMIT 10; +i j k +1 1 1 +2 2 2 +3 3 3 +4 4 4 +5 5 5 +6 6 6 +7 7 7 +8 8 8 +9 9 9 +10 10 10 +SELECT COUNT(*) FROM t1; +COUNT(*) +100 +DROP TABLE t1; +CREATE TABLE t1 (a INT, b TEXT); +ALTER TABLE t1 ADD KEY kb(b(10)); +ALTER TABLE t1 ADD PRIMARY KEY(a); +DROP TABLE t1; +set global rocksdb_bulk_load=1; +# Establish connection con1 (user=root) +# Switch to connection con1 +show global variables like 'rocksdb_bulk_load%'; +Variable_name Value +rocksdb_bulk_load ON +rocksdb_bulk_load_allow_sk OFF +rocksdb_bulk_load_allow_unsorted OFF +rocksdb_bulk_load_size 1000 +show session variables like 'rocksdb_bulk_load%'; +Variable_name Value +rocksdb_bulk_load ON +rocksdb_bulk_load_allow_sk OFF +rocksdb_bulk_load_allow_unsorted OFF +rocksdb_bulk_load_size 1000 +CREATE TABLE t1 (i INT, j INT, PRIMARY KEY (i)) ENGINE = ROCKSDB; +INSERT INTO t1 VALUES (1,1); +# Disconnecting on con1 +# Establish connection con2 (user=root) +# Switch to connection con2 +ALTER TABLE t1 ADD INDEX kj(j), ALGORITHM=INPLACE; +SELECT COUNT(*) FROM t1 FORCE INDEX(PRIMARY); +COUNT(*) +1 +SELECT COUNT(*) FROM t1 FORCE INDEX(kj); +COUNT(*) +1 +DROP TABLE t1; +# Establish connection con1 (user=root) +# Establish connection con2 (user=root) +# Switch to connection con1 +CREATE TABLE t1 (i INT, j INT, PRIMARY KEY (i)) ENGINE = ROCKSDB; +set rocksdb_bulk_load=1; +INSERT INTO t1 VALUES (1,1); +# Switch to connection con2 +SELECT COUNT(*) FROM t1 FORCE INDEX(PRIMARY); +COUNT(*) +0 +ALTER TABLE t1 ADD INDEX kj(j), ALGORITHM=INPLACE; +SELECT COUNT(*) FROM t1 FORCE INDEX(PRIMARY); +COUNT(*) +1 +SELECT COUNT(*) FROM t1 FORCE INDEX(kj); +COUNT(*) +1 +set global rocksdb_bulk_load=0; +DROP TABLE t1; +SET @prior_rocksdb_merge_combine_read_size= @@rocksdb_merge_combine_read_size; +SET @prior_rocksdb_strict_collation_check= @@rocksdb_strict_collation_check; +SET @prior_rocksdb_merge_buf_size = @@rocksdb_merge_buf_size; +SET global rocksdb_strict_collation_check = off; +SET session rocksdb_merge_combine_read_size = 566; +SET session rocksdb_merge_buf_size = 340; +show variables like 'rocksdb_bulk_load%'; +Variable_name Value +rocksdb_bulk_load OFF +rocksdb_bulk_load_allow_sk OFF +rocksdb_bulk_load_allow_unsorted OFF +rocksdb_bulk_load_size 1000 +CREATE TABLE t1 (a VARCHAR(80)) ENGINE=RocksDB; +INSERT INTO t1 (a) VALUES (REPEAT("a", 80)); +INSERT INTO t1 (a) VALUES (REPEAT("a", 80)); +INSERT INTO t1 (a) VALUES (REPEAT("a", 80)); +INSERT INTO t1 (a) VALUES (REPEAT("a", 80)); +ALTER TABLE t1 ADD INDEX ka(a), ALGORITHM=INPLACE; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` varchar(80) DEFAULT NULL, + KEY `ka` (`a`) +) ENGINE=ROCKSDB DEFAULT CHARSET=latin1 +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +SELECT * FROM t1 FORCE INDEX(ka) WHERE a > ""; +a +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +DROP TABLE t1; +SET session rocksdb_merge_buf_size = @prior_rocksdb_merge_buf_size; +SET session rocksdb_merge_combine_read_size = @prior_rocksdb_merge_combine_read_size; +SET global rocksdb_strict_collation_check = @prior_rocksdb_strict_collation_check; +CREATE TABLE t1 (i INT, j INT, PRIMARY KEY (i)) ENGINE = ROCKSDB; +set global rocksdb_force_flush_memtable_now=1; +ALTER TABLE t1 ADD INDEX kj(j), ALGORITHM=INPLACE; +larger +1 +# restart +larger +1 +Table Op Msg_type Msg_text +test.t1 analyze status OK +larger +1 +# restart +larger +1 +Table Op Msg_type Msg_text +test.t1 analyze status OK +Table Op Msg_type Msg_text +test.t1 analyze status OK +Table Op Msg_type Msg_text +test.t1 analyze status OK +Table Op Msg_type Msg_text +test.t1 analyze status OK +Table Op Msg_type Msg_text +test.t1 analyze status OK +Table Op Msg_type Msg_text +test.t1 analyze status OK +Table Op Msg_type Msg_text +test.t1 analyze status OK +Table Op Msg_type Msg_text +test.t1 analyze status OK +Table Op Msg_type Msg_text +test.t1 analyze status OK +Table Op Msg_type Msg_text +test.t1 analyze status OK +select 1300 < 1300 * 1.5 as "same"; +same +1 +DROP TABLE t1; +CREATE TABLE t1 ( +a INT PRIMARY KEY, +b INT, +c INT, +KEY kbc(b,c)) ENGINE = ROCKSDB; +INSERT INTO t1 (a,b,c) VALUES (1,1,1); +INSERT INTO t1 (a,b,c) VALUES (2,2,2); +INSERT INTO t1 (a,b,c) VALUES (3,3,3); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) NOT NULL, + `b` int(11) DEFAULT NULL, + `c` int(11) DEFAULT NULL, + PRIMARY KEY (`a`), + KEY `kbc` (`b`,`c`) +) ENGINE=ROCKSDB DEFAULT CHARSET=latin1 +ALTER TABLE t1 DROP INDEX kbc, ADD INDEX kbc(b,c), ALGORITHM=INPLACE; +ALTER TABLE t1 DROP INDEX kbc; +DROP TABLE t1; +CREATE TABLE t1 ( +a INT PRIMARY KEY, +b varchar(10), +index kb(b(5)) +) ENGINE = ROCKSDB charset utf8 collate utf8_bin; +INSERT INTO t1 (a,b) VALUES (1,'1111122222'); +INSERT INTO t1 (a,b) VALUES (2,'2222233333'); +INSERT INTO t1 (a,b) VALUES (3,'3333344444'); +ALTER TABLE t1 DROP INDEX kb, ADD INDEX kb(b(8)), ALGORITHM=INPLACE; +SELECT * FROM t1 FORCE INDEX(kb); +a b +1 1111122222 +2 2222233333 +3 3333344444 +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) NOT NULL, + `b` varchar(10) COLLATE utf8_bin DEFAULT NULL, + PRIMARY KEY (`a`), + KEY `kb` (`b`(8)) +) ENGINE=ROCKSDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin +DROP TABLE t1; +SET @prior_rocksdb_table_stats_sampling_pct = @@rocksdb_table_stats_sampling_pct; +set global rocksdb_table_stats_sampling_pct = 100; +CREATE TABLE t1 (a INT, b INT, PRIMARY KEY ka(a)) ENGINE=RocksDB; +INSERT INTO t1 (a, b) VALUES (1, 10); +INSERT INTO t1 (a, b) VALUES (2, 10); +INSERT INTO t1 (a, b) VALUES (3, 20); +INSERT INTO t1 (a, b) VALUES (4, 20); +set global rocksdb_force_flush_memtable_now=1; +analyze table t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +SHOW INDEX in t1; +Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment +t1 0 PRIMARY 1 a A 4 NULL NULL LSMTREE +ALTER TABLE t1 ADD INDEX kb(b), ALGORITHM=INPLACE; +SHOW INDEX in t1; +Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment +t1 0 PRIMARY 1 a A 4 NULL NULL LSMTREE +t1 1 kb 1 b A 2 NULL NULL YES LSMTREE +DROP TABLE t1; +SET global rocksdb_table_stats_sampling_pct = @prior_rocksdb_table_stats_sampling_pct; diff --git a/mysql-test/suite/rocksdb/r-native-partitioning/add_index_inplace_crash.result b/mysql-test/suite/rocksdb/r-native-partitioning/add_index_inplace_crash.result new file mode 100644 index 000000000000..2a9c94d59014 --- /dev/null +++ b/mysql-test/suite/rocksdb/r-native-partitioning/add_index_inplace_crash.result @@ -0,0 +1,92 @@ +CREATE TABLE t1 (a INT, b INT, KEY ka(a), KEY kab(a,b)) ENGINE=RocksDB; +INSERT INTO t1 (a, b) VALUES (1, 5); +INSERT INTO t1 (a, b) VALUES (2, 6); +INSERT INTO t1 (a, b) VALUES (3, 7); +# crash_during_online_index_creation +flush logs; +SET SESSION debug="+d,crash_during_online_index_creation"; +ALTER TABLE t1 ADD INDEX kb(b), ALGORITHM=INPLACE; +ERROR HY000: Lost connection to MySQL server during query +SET SESSION debug="-d,crash_during_online_index_creation"; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` int(11) DEFAULT NULL, + KEY `ka` (`a`), + KEY `kab` (`a`,`b`) +) ENGINE=ROCKSDB DEFAULT CHARSET=latin1 +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +DROP TABLE t1; +CREATE TABLE t1 (i INT, j INT, k INT, PRIMARY KEY (i), KEY(j)) ENGINE = ROCKSDB PARTITION BY KEY(i) PARTITIONS 4; +# crash_during_index_creation_partition +flush logs; +SET SESSION debug="+d,crash_during_index_creation_partition"; +ALTER TABLE t1 ADD INDEX kij(i,j), ALGORITHM=INPLACE; +ERROR HY000: Lost connection to MySQL server during query +SET SESSION debug="-d,crash_during_index_creation_partition"; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `i` int(11) NOT NULL, + `j` int(11) DEFAULT NULL, + `k` int(11) DEFAULT NULL, + PRIMARY KEY (`i`), + KEY `j` (`j`) +) ENGINE=ROCKSDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (i) +PARTITIONS 4 */ +ALTER TABLE t1 ADD INDEX kij(i,j), ALGORITHM=INPLACE; +SELECT * FROM t1 ORDER BY i LIMIT 10; +i j k +1 1 1 +2 2 2 +3 3 3 +4 4 4 +5 5 5 +6 6 6 +7 7 7 +8 8 8 +9 9 9 +10 10 10 +SELECT COUNT(*) FROM t1; +COUNT(*) +100 +DROP TABLE t1; +CREATE TABLE t1 (i INT, j INT, k INT, PRIMARY KEY (i), KEY(j)) ENGINE = ROCKSDB PARTITION BY KEY(i) PARTITIONS 4; +# crash_during_index_creation_partition +flush logs; +SET SESSION debug="+d,myrocks_simulate_index_create_rollback"; +ALTER TABLE t1 ADD INDEX kij(i,j), ALGORITHM=INPLACE; +ERROR HY000: Intentional failure in inplace alter occurred. +SET SESSION debug="-d,myrocks_simulate_index_create_rollback"; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `i` int(11) NOT NULL, + `j` int(11) DEFAULT NULL, + `k` int(11) DEFAULT NULL, + PRIMARY KEY (`i`), + KEY `j` (`j`) +) ENGINE=ROCKSDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (i) +PARTITIONS 4 */ +ALTER TABLE t1 ADD INDEX kij(i,j), ALGORITHM=INPLACE; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `i` int(11) NOT NULL, + `j` int(11) DEFAULT NULL, + `k` int(11) DEFAULT NULL, + PRIMARY KEY (`i`), + KEY `j` (`j`), + KEY `kij` (`i`,`j`) +) ENGINE=ROCKSDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (i) +PARTITIONS 4 */ +SELECT COUNT(*) FROM t1; +COUNT(*) +100 +DROP TABLE t1; diff --git a/mysql-test/suite/rocksdb/r-native-partitioning/autoinc_crash_safe_partition.result b/mysql-test/suite/rocksdb/r-native-partitioning/autoinc_crash_safe_partition.result new file mode 100644 index 000000000000..949928f5a9f6 --- /dev/null +++ b/mysql-test/suite/rocksdb/r-native-partitioning/autoinc_crash_safe_partition.result @@ -0,0 +1,113 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +create table t (i int primary key auto_increment) engine=rocksdb partition by key (i) partitions 3; +# +# Testing concurrent transactions. +# +begin; +insert into t values (); +begin; +insert into t values (); +begin; +insert into t values (); +insert into t values (); +insert into t values (); +insert into t values (); +commit; +rollback; +commit; +delete from t; +# Master value before restart +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; +table_schema table_name auto_increment +test t 7 +# Slave value before restart +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; +table_schema table_name auto_increment +test t 6 +include/stop_slave.inc +include/rpl_restart_server.inc [server_number=1] +# Master value after restart +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; +table_schema table_name auto_increment +test t 6 +include/rpl_restart_server.inc [server_number=2] +include/start_slave.inc +# Slave value after restart +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; +table_schema table_name auto_increment +test t 6 +# +# Testing interaction of merge markers with various DDL statements. +# +include/stop_slave.inc +# Drop and add primary key. +alter table t modify i int; +alter table t drop primary key; +alter table t add primary key (i); +alter table t modify i int auto_increment; +include/rpl_restart_server.inc [server_number=1] +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; +table_schema table_name auto_increment +test t 1 +# Remove auto_increment property. +alter table t modify i int; +include/rpl_restart_server.inc [server_number=1] +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; +table_schema table_name auto_increment +test t NULL +# Add auto_increment property. +insert into t values (123); +alter table t modify i int auto_increment; +include/rpl_restart_server.inc [server_number=1] +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; +table_schema table_name auto_increment +test t 124 +# Add column j. +alter table t add column j int; +include/rpl_restart_server.inc [server_number=1] +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; +table_schema table_name auto_increment +test t 124 +# Rename tables. +rename table t to t2; +rename table t2 to t; +include/rpl_restart_server.inc [server_number=1] +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; +table_schema table_name auto_increment +test t 124 +# Change auto_increment property +alter table t auto_increment = 1000; +include/rpl_restart_server.inc [server_number=1] +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; +table_schema table_name auto_increment +test t 1000 +alter table t auto_increment = 1; +include/rpl_restart_server.inc [server_number=1] +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; +table_schema table_name auto_increment +test t 124 +alter table t drop primary key, add key (i), auto_increment = 1; +include/rpl_restart_server.inc [server_number=1] +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; +table_schema table_name auto_increment +test t 124 +alter table t add key (j), auto_increment = 1; +include/rpl_restart_server.inc [server_number=1] +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; +table_schema table_name auto_increment +test t 124 +alter table t modify i int; +alter table t add column (k int auto_increment), add key(k), auto_increment=15; +include/rpl_restart_server.inc [server_number=1] +select table_schema, table_name, auto_increment from information_schema.tables where table_name = 't'; +table_schema table_name auto_increment +test t 16 +# Drop table. +drop table t; +include/rpl_restart_server.inc [server_number=1] +include/start_slave.inc +include/rpl_end.inc diff --git a/mysql-test/suite/rocksdb/r-native-partitioning/disable_native_partitioning.result b/mysql-test/suite/rocksdb/r-native-partitioning/disable_native_partitioning.result new file mode 100644 index 000000000000..1cdad41df49b --- /dev/null +++ b/mysql-test/suite/rocksdb/r-native-partitioning/disable_native_partitioning.result @@ -0,0 +1,17 @@ +# restart: --loose-rocksdb_enable_native_partition=0 +CREATE TABLE t1 (a INT UNSIGNED NOT NULL, PRIMARY KEY(a)) ENGINE = RocksDB +PARTITION BY RANGE (a) ( +PARTITION p0 VALUES LESS THAN (100), +PARTITION p1 VALUES LESS THAN (200) +); +Warnings: +Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. +t1.par +DROP TABLE t1; +# restart: +CREATE TABLE t1 (a INT UNSIGNED NOT NULL, PRIMARY KEY(a)) ENGINE = RocksDB +PARTITION BY RANGE (a) ( +PARTITION p0 VALUES LESS THAN (100), +PARTITION p1 VALUES LESS THAN (200) +); +DROP TABLE t1; diff --git a/mysql-test/suite/rocksdb/r-native-partitioning/gap_lock_error.result b/mysql-test/suite/rocksdb/r-native-partitioning/gap_lock_error.result new file mode 100644 index 000000000000..70e6a7229979 --- /dev/null +++ b/mysql-test/suite/rocksdb/r-native-partitioning/gap_lock_error.result @@ -0,0 +1,496 @@ +CREATE TABLE gap1 (id1 INT, id2 INT, id3 INT, c1 INT, value INT, +PRIMARY KEY (id1, id2, id3), +INDEX i (c1)) ENGINE=rocksdb; +CREATE TABLE gap2 like gap1; +CREATE TABLE gap3 (id INT, value INT, +PRIMARY KEY (id), +UNIQUE KEY ui(value)) ENGINE=rocksdb; +CREATE TABLE gap4 (id INT, value INT, +PRIMARY KEY (id)) ENGINE=rocksdb +PARTITION BY HASH(id) PARTITIONS 2; +insert into gap3 values (1,1), (2,2),(3,3),(4,4),(5,5); +insert into gap4 values (1,1), (2,2),(3,3),(4,4),(5,5); +set session autocommit=0; +select * from gap1 limit 1 for update; +ERROR HY000: Using Gap Lock without full unique key in multi-table or multi-statement transactions is not allowed. You need to either rewrite queries to use all unique key columns in WHERE equal conditions, or rewrite to single-table, single-statement transaction. Query: select * from gap1 limit 1 for update +select * from gap1 where value != 100 limit 1 for update; +ERROR HY000: Using Gap Lock without full unique key in multi-table or multi-statement transactions is not allowed. You need to either rewrite queries to use all unique key columns in WHERE equal conditions, or rewrite to single-table, single-statement transaction. Query: select * from gap1 where value != 100 limit 1 for update +select * from gap1 where id1=1 for update; +ERROR HY000: Using Gap Lock without full unique key in multi-table or multi-statement transactions is not allowed. You need to either rewrite queries to use all unique key columns in WHERE equal conditions, or rewrite to single-table, single-statement transaction. Query: select * from gap1 where id1=1 for update +select * from gap1 where id1=1 and id2= 1 for update; +ERROR HY000: Using Gap Lock without full unique key in multi-table or multi-statement transactions is not allowed. You need to either rewrite queries to use all unique key columns in WHERE equal conditions, or rewrite to single-table, single-statement transaction. Query: select * from gap1 where id1=1 and id2= 1 for update +select * from gap1 where id1=1 and id2= 1 and id3 != 1 for update; +ERROR HY000: Using Gap Lock without full unique key in multi-table or multi-statement transactions is not allowed. You need to either rewrite queries to use all unique key columns in WHERE equal conditions, or rewrite to single-table, single-statement transaction. Query: select * from gap1 where id1=1 and id2= 1 and id3 != 1 for update +select * from gap1 where id1=1 and id2= 1 and id3 +between 1 and 3 for update; +ERROR HY000: Using Gap Lock without full unique key in multi-table or multi-statement transactions is not allowed. You need to either rewrite queries to use all unique key columns in WHERE equal conditions, or rewrite to single-table, single-statement transaction. Query: select * from gap1 where id1=1 and id2= 1 and id3 +between 1 and 3 for update +select * from gap1 where id1=1 and id2= 1 order by id3 asc +limit 1 for update; +ERROR HY000: Using Gap Lock without full unique key in multi-table or multi-statement transactions is not allowed. You need to either rewrite queries to use all unique key columns in WHERE equal conditions, or rewrite to single-table, single-statement transaction. Query: select * from gap1 where id1=1 and id2= 1 order by id3 asc +limit 1 for update +select * from gap1 where id1=1 and id2= 1 order by id3 desc +limit 1 for update; +ERROR HY000: Using Gap Lock without full unique key in multi-table or multi-statement transactions is not allowed. You need to either rewrite queries to use all unique key columns in WHERE equal conditions, or rewrite to single-table, single-statement transaction. Query: select * from gap1 where id1=1 and id2= 1 order by id3 desc +limit 1 for update +select * from gap1 order by id1 asc limit 1 for update; +ERROR HY000: Using Gap Lock without full unique key in multi-table or multi-statement transactions is not allowed. You need to either rewrite queries to use all unique key columns in WHERE equal conditions, or rewrite to single-table, single-statement transaction. Query: select * from gap1 order by id1 asc limit 1 for update +select * from gap1 order by id1 asc, id2 asc, id3 asc limit 1 for update; +ERROR HY000: Using Gap Lock without full unique key in multi-table or multi-statement transactions is not allowed. You need to either rewrite queries to use all unique key columns in WHERE equal conditions, or rewrite to single-table, single-statement transaction. Query: select * from gap1 order by id1 asc, id2 asc, id3 asc limit 1 for update +select * from gap1 order by id1 desc limit 1 for update; +ERROR HY000: Using Gap Lock without full unique key in multi-table or multi-statement transactions is not allowed. You need to either rewrite queries to use all unique key columns in WHERE equal conditions, or rewrite to single-table, single-statement transaction. Query: select * from gap1 order by id1 desc limit 1 for update +select * from gap1 order by id1 desc, id2 desc, id3 desc +limit 1 for update; +ERROR HY000: Using Gap Lock without full unique key in multi-table or multi-statement transactions is not allowed. You need to either rewrite queries to use all unique key columns in WHERE equal conditions, or rewrite to single-table, single-statement transaction. Query: select * from gap1 order by id1 desc, id2 desc, id3 desc +limit 1 for update +select * from gap1 force index(i) where c1=1 for update; +ERROR HY000: Using Gap Lock without full unique key in multi-table or multi-statement transactions is not allowed. You need to either rewrite queries to use all unique key columns in WHERE equal conditions, or rewrite to single-table, single-statement transaction. Query: select * from gap1 force index(i) where c1=1 for update +select * from gap3 force index(ui) where value=1 for update; +id value +1 1 +select * from gap1 where id1=1 and id2=1 and id3=1 for update; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2=1 and id3 in (1, 2, 3) for update; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2=1 and id3=1 and value=1 +order by c1 for update; +id1 id2 id3 c1 value +select * from gap3 where id=1 for update; +id value +1 1 +select * from gap4 where id=1 for update; +id value +1 1 +select * from gap4 where id in (1, 2, 3) for update; +id value +1 1 +2 2 +3 3 +select * from gap4 for update; +ERROR HY000: Using Gap Lock without full unique key in multi-table or multi-statement transactions is not allowed. You need to either rewrite queries to use all unique key columns in WHERE equal conditions, or rewrite to single-table, single-statement transaction. Query: select * from gap4 for update +select * from gap4 where id between 3 and 7 for update; +ERROR HY000: Using Gap Lock without full unique key in multi-table or multi-statement transactions is not allowed. You need to either rewrite queries to use all unique key columns in WHERE equal conditions, or rewrite to single-table, single-statement transaction. Query: select * from gap4 where id between 3 and 7 for update +set session autocommit=1; +select * from gap1 limit 1 for update; +id1 id2 id3 c1 value +0 0 1 1 1 +select * from gap1 where value != 100 limit 1 for update; +id1 id2 id3 c1 value +0 0 1 1 1 +select * from gap1 where id1=1 for update; +id1 id2 id3 c1 value +1 0 2 2 2 +1 0 3 3 3 +select * from gap1 where id1=1 and id2= 1 for update; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2= 1 and id3 != 1 for update; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2= 1 and id3 +between 1 and 3 for update; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2= 1 order by id3 asc +limit 1 for update; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2= 1 order by id3 desc +limit 1 for update; +id1 id2 id3 c1 value +select * from gap1 order by id1 asc limit 1 for update; +id1 id2 id3 c1 value +0 0 1 1 1 +select * from gap1 order by id1 asc, id2 asc, id3 asc limit 1 for update; +id1 id2 id3 c1 value +0 0 1 1 1 +select * from gap1 order by id1 desc limit 1 for update; +id1 id2 id3 c1 value +500 100 1000 1000 1000 +select * from gap1 order by id1 desc, id2 desc, id3 desc +limit 1 for update; +id1 id2 id3 c1 value +500 100 1000 1000 1000 +select * from gap1 force index(i) where c1=1 for update; +id1 id2 id3 c1 value +0 0 1 1 1 +select * from gap3 force index(ui) where value=1 for update; +id value +1 1 +select * from gap1 where id1=1 and id2=1 and id3=1 for update; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2=1 and id3 in (1, 2, 3) for update; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2=1 and id3=1 and value=1 +order by c1 for update; +id1 id2 id3 c1 value +select * from gap3 where id=1 for update; +id value +1 1 +select * from gap4 where id=1 for update; +id value +1 1 +select * from gap4 where id in (1, 2, 3) for update; +id value +1 1 +2 2 +3 3 +select * from gap4 for update; +id value +2 2 +4 4 +1 1 +3 3 +5 5 +select * from gap4 where id between 3 and 7 for update; +id value +4 4 +3 3 +5 5 +set session autocommit=0; +select * from gap1 limit 1 lock in share mode; +ERROR HY000: Using Gap Lock without full unique key in multi-table or multi-statement transactions is not allowed. You need to either rewrite queries to use all unique key columns in WHERE equal conditions, or rewrite to single-table, single-statement transaction. Query: select * from gap1 limit 1 lock in share mode +select * from gap1 where value != 100 limit 1 lock in share mode; +ERROR HY000: Using Gap Lock without full unique key in multi-table or multi-statement transactions is not allowed. You need to either rewrite queries to use all unique key columns in WHERE equal conditions, or rewrite to single-table, single-statement transaction. Query: select * from gap1 where value != 100 limit 1 lock in share mode +select * from gap1 where id1=1 lock in share mode; +ERROR HY000: Using Gap Lock without full unique key in multi-table or multi-statement transactions is not allowed. You need to either rewrite queries to use all unique key columns in WHERE equal conditions, or rewrite to single-table, single-statement transaction. Query: select * from gap1 where id1=1 lock in share mode +select * from gap1 where id1=1 and id2= 1 lock in share mode; +ERROR HY000: Using Gap Lock without full unique key in multi-table or multi-statement transactions is not allowed. You need to either rewrite queries to use all unique key columns in WHERE equal conditions, or rewrite to single-table, single-statement transaction. Query: select * from gap1 where id1=1 and id2= 1 lock in share mode +select * from gap1 where id1=1 and id2= 1 and id3 != 1 lock in share mode; +ERROR HY000: Using Gap Lock without full unique key in multi-table or multi-statement transactions is not allowed. You need to either rewrite queries to use all unique key columns in WHERE equal conditions, or rewrite to single-table, single-statement transaction. Query: select * from gap1 where id1=1 and id2= 1 and id3 != 1 lock in share mode +select * from gap1 where id1=1 and id2= 1 and id3 +between 1 and 3 lock in share mode; +ERROR HY000: Using Gap Lock without full unique key in multi-table or multi-statement transactions is not allowed. You need to either rewrite queries to use all unique key columns in WHERE equal conditions, or rewrite to single-table, single-statement transaction. Query: select * from gap1 where id1=1 and id2= 1 and id3 +between 1 and 3 lock in share mode +select * from gap1 where id1=1 and id2= 1 order by id3 asc +limit 1 lock in share mode; +ERROR HY000: Using Gap Lock without full unique key in multi-table or multi-statement transactions is not allowed. You need to either rewrite queries to use all unique key columns in WHERE equal conditions, or rewrite to single-table, single-statement transaction. Query: select * from gap1 where id1=1 and id2= 1 order by id3 asc +limit 1 lock in share mode +select * from gap1 where id1=1 and id2= 1 order by id3 desc +limit 1 lock in share mode; +ERROR HY000: Using Gap Lock without full unique key in multi-table or multi-statement transactions is not allowed. You need to either rewrite queries to use all unique key columns in WHERE equal conditions, or rewrite to single-table, single-statement transaction. Query: select * from gap1 where id1=1 and id2= 1 order by id3 desc +limit 1 lock in share mode +select * from gap1 order by id1 asc limit 1 lock in share mode; +ERROR HY000: Using Gap Lock without full unique key in multi-table or multi-statement transactions is not allowed. You need to either rewrite queries to use all unique key columns in WHERE equal conditions, or rewrite to single-table, single-statement transaction. Query: select * from gap1 order by id1 asc limit 1 lock in share mode +select * from gap1 order by id1 asc, id2 asc, id3 asc limit 1 lock in share mode; +ERROR HY000: Using Gap Lock without full unique key in multi-table or multi-statement transactions is not allowed. You need to either rewrite queries to use all unique key columns in WHERE equal conditions, or rewrite to single-table, single-statement transaction. Query: select * from gap1 order by id1 asc, id2 asc, id3 asc limit 1 lock in share mode +select * from gap1 order by id1 desc limit 1 lock in share mode; +ERROR HY000: Using Gap Lock without full unique key in multi-table or multi-statement transactions is not allowed. You need to either rewrite queries to use all unique key columns in WHERE equal conditions, or rewrite to single-table, single-statement transaction. Query: select * from gap1 order by id1 desc limit 1 lock in share mode +select * from gap1 order by id1 desc, id2 desc, id3 desc +limit 1 lock in share mode; +ERROR HY000: Using Gap Lock without full unique key in multi-table or multi-statement transactions is not allowed. You need to either rewrite queries to use all unique key columns in WHERE equal conditions, or rewrite to single-table, single-statement transaction. Query: select * from gap1 order by id1 desc, id2 desc, id3 desc +limit 1 lock in share mode +select * from gap1 force index(i) where c1=1 lock in share mode; +ERROR HY000: Using Gap Lock without full unique key in multi-table or multi-statement transactions is not allowed. You need to either rewrite queries to use all unique key columns in WHERE equal conditions, or rewrite to single-table, single-statement transaction. Query: select * from gap1 force index(i) where c1=1 lock in share mode +select * from gap3 force index(ui) where value=1 lock in share mode; +id value +1 1 +select * from gap1 where id1=1 and id2=1 and id3=1 lock in share mode; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2=1 and id3 in (1, 2, 3) lock in share mode; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2=1 and id3=1 and value=1 +order by c1 lock in share mode; +id1 id2 id3 c1 value +select * from gap3 where id=1 lock in share mode; +id value +1 1 +select * from gap4 where id=1 lock in share mode; +id value +1 1 +select * from gap4 where id in (1, 2, 3) lock in share mode; +id value +1 1 +2 2 +3 3 +select * from gap4 lock in share mode; +ERROR HY000: Using Gap Lock without full unique key in multi-table or multi-statement transactions is not allowed. You need to either rewrite queries to use all unique key columns in WHERE equal conditions, or rewrite to single-table, single-statement transaction. Query: select * from gap4 lock in share mode +select * from gap4 where id between 3 and 7 lock in share mode; +ERROR HY000: Using Gap Lock without full unique key in multi-table or multi-statement transactions is not allowed. You need to either rewrite queries to use all unique key columns in WHERE equal conditions, or rewrite to single-table, single-statement transaction. Query: select * from gap4 where id between 3 and 7 lock in share mode +set session autocommit=1; +select * from gap1 limit 1 lock in share mode; +id1 id2 id3 c1 value +0 0 1 1 1 +select * from gap1 where value != 100 limit 1 lock in share mode; +id1 id2 id3 c1 value +0 0 1 1 1 +select * from gap1 where id1=1 lock in share mode; +id1 id2 id3 c1 value +1 0 2 2 2 +1 0 3 3 3 +select * from gap1 where id1=1 and id2= 1 lock in share mode; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2= 1 and id3 != 1 lock in share mode; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2= 1 and id3 +between 1 and 3 lock in share mode; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2= 1 order by id3 asc +limit 1 lock in share mode; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2= 1 order by id3 desc +limit 1 lock in share mode; +id1 id2 id3 c1 value +select * from gap1 order by id1 asc limit 1 lock in share mode; +id1 id2 id3 c1 value +0 0 1 1 1 +select * from gap1 order by id1 asc, id2 asc, id3 asc limit 1 lock in share mode; +id1 id2 id3 c1 value +0 0 1 1 1 +select * from gap1 order by id1 desc limit 1 lock in share mode; +id1 id2 id3 c1 value +500 100 1000 1000 1000 +select * from gap1 order by id1 desc, id2 desc, id3 desc +limit 1 lock in share mode; +id1 id2 id3 c1 value +500 100 1000 1000 1000 +select * from gap1 force index(i) where c1=1 lock in share mode; +id1 id2 id3 c1 value +0 0 1 1 1 +select * from gap3 force index(ui) where value=1 lock in share mode; +id value +1 1 +select * from gap1 where id1=1 and id2=1 and id3=1 lock in share mode; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2=1 and id3 in (1, 2, 3) lock in share mode; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2=1 and id3=1 and value=1 +order by c1 lock in share mode; +id1 id2 id3 c1 value +select * from gap3 where id=1 lock in share mode; +id value +1 1 +select * from gap4 where id=1 lock in share mode; +id value +1 1 +select * from gap4 where id in (1, 2, 3) lock in share mode; +id value +1 1 +2 2 +3 3 +select * from gap4 lock in share mode; +id value +2 2 +4 4 +1 1 +3 3 +5 5 +select * from gap4 where id between 3 and 7 lock in share mode; +id value +4 4 +3 3 +5 5 +set session autocommit=0; +select * from gap1 limit 1 ; +id1 id2 id3 c1 value +0 0 1 1 1 +select * from gap1 where value != 100 limit 1 ; +id1 id2 id3 c1 value +0 0 1 1 1 +select * from gap1 where id1=1 ; +id1 id2 id3 c1 value +1 0 2 2 2 +1 0 3 3 3 +select * from gap1 where id1=1 and id2= 1 ; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2= 1 and id3 != 1 ; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2= 1 and id3 +between 1 and 3 ; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2= 1 order by id3 asc +limit 1 ; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2= 1 order by id3 desc +limit 1 ; +id1 id2 id3 c1 value +select * from gap1 order by id1 asc limit 1 ; +id1 id2 id3 c1 value +0 0 1 1 1 +select * from gap1 order by id1 asc, id2 asc, id3 asc limit 1 ; +id1 id2 id3 c1 value +0 0 1 1 1 +select * from gap1 order by id1 desc limit 1 ; +id1 id2 id3 c1 value +500 100 1000 1000 1000 +select * from gap1 order by id1 desc, id2 desc, id3 desc +limit 1 ; +id1 id2 id3 c1 value +500 100 1000 1000 1000 +select * from gap1 force index(i) where c1=1 ; +id1 id2 id3 c1 value +0 0 1 1 1 +select * from gap3 force index(ui) where value=1 ; +id value +1 1 +select * from gap1 where id1=1 and id2=1 and id3=1 ; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2=1 and id3 in (1, 2, 3) ; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2=1 and id3=1 and value=1 +order by c1 ; +id1 id2 id3 c1 value +select * from gap3 where id=1 ; +id value +1 1 +select * from gap4 where id=1 ; +id value +1 1 +select * from gap4 where id in (1, 2, 3) ; +id value +1 1 +2 2 +3 3 +select * from gap4 ; +id value +2 2 +4 4 +1 1 +3 3 +5 5 +select * from gap4 where id between 3 and 7 ; +id value +4 4 +3 3 +5 5 +set session autocommit=1; +select * from gap1 limit 1 ; +id1 id2 id3 c1 value +0 0 1 1 1 +select * from gap1 where value != 100 limit 1 ; +id1 id2 id3 c1 value +0 0 1 1 1 +select * from gap1 where id1=1 ; +id1 id2 id3 c1 value +1 0 2 2 2 +1 0 3 3 3 +select * from gap1 where id1=1 and id2= 1 ; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2= 1 and id3 != 1 ; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2= 1 and id3 +between 1 and 3 ; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2= 1 order by id3 asc +limit 1 ; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2= 1 order by id3 desc +limit 1 ; +id1 id2 id3 c1 value +select * from gap1 order by id1 asc limit 1 ; +id1 id2 id3 c1 value +0 0 1 1 1 +select * from gap1 order by id1 asc, id2 asc, id3 asc limit 1 ; +id1 id2 id3 c1 value +0 0 1 1 1 +select * from gap1 order by id1 desc limit 1 ; +id1 id2 id3 c1 value +500 100 1000 1000 1000 +select * from gap1 order by id1 desc, id2 desc, id3 desc +limit 1 ; +id1 id2 id3 c1 value +500 100 1000 1000 1000 +select * from gap1 force index(i) where c1=1 ; +id1 id2 id3 c1 value +0 0 1 1 1 +select * from gap3 force index(ui) where value=1 ; +id value +1 1 +select * from gap1 where id1=1 and id2=1 and id3=1 ; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2=1 and id3 in (1, 2, 3) ; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2=1 and id3=1 and value=1 +order by c1 ; +id1 id2 id3 c1 value +select * from gap3 where id=1 ; +id value +1 1 +select * from gap4 where id=1 ; +id value +1 1 +select * from gap4 where id in (1, 2, 3) ; +id value +1 1 +2 2 +3 3 +select * from gap4 ; +id value +2 2 +4 4 +1 1 +3 3 +5 5 +select * from gap4 where id between 3 and 7 ; +id value +4 4 +3 3 +5 5 +set session autocommit=0; +insert into gap1 (id1, id2, id3) values (-1,-1,-1); +insert into gap1 (id1, id2, id3) values (-1,-1,-1) +on duplicate key update value=100; +update gap1 set value=100 where id1=1; +ERROR HY000: Using Gap Lock without full unique key in multi-table or multi-statement transactions is not allowed. You need to either rewrite queries to use all unique key columns in WHERE equal conditions, or rewrite to single-table, single-statement transaction. Query: update gap1 set value=100 where id1=1 +update gap1 set value=100 where id1=1 and id2=1 and id3=1; +delete from gap1 where id1=2; +ERROR HY000: Using Gap Lock without full unique key in multi-table or multi-statement transactions is not allowed. You need to either rewrite queries to use all unique key columns in WHERE equal conditions, or rewrite to single-table, single-statement transaction. Query: delete from gap1 where id1=2 +delete from gap1 where id1=-1 and id2=-1 and id3=-1; +commit; +insert into gap2 select * from gap1; +ERROR HY000: Using Gap Lock without full unique key in multi-table or multi-statement transactions is not allowed. You need to either rewrite queries to use all unique key columns in WHERE equal conditions, or rewrite to single-table, single-statement transaction. Query: insert into gap2 select * from gap1 +insert into gap2 select * from gap1 where id1=1; +ERROR HY000: Using Gap Lock without full unique key in multi-table or multi-statement transactions is not allowed. You need to either rewrite queries to use all unique key columns in WHERE equal conditions, or rewrite to single-table, single-statement transaction. Query: insert into gap2 select * from gap1 where id1=1 +insert into gap2 select * from gap1 where id1=1 and id2=1 and id3=1; +create table t4 engine=rocksdb select * from gap1 where id1=1 and id2=1 and id3=1; +drop table t4; +create table t4 engine=rocksdb select * from gap1; +ERROR HY000: Using Gap Lock without full unique key in multi-table or multi-statement transactions is not allowed. You need to either rewrite queries to use all unique key columns in WHERE equal conditions, or rewrite to single-table, single-statement transaction. Query: create table t4 engine=rocksdb select * from gap1 +create table t4 engine=rocksdb select * from gap1 where id1=1; +ERROR HY000: Using Gap Lock without full unique key in multi-table or multi-statement transactions is not allowed. You need to either rewrite queries to use all unique key columns in WHERE equal conditions, or rewrite to single-table, single-statement transaction. Query: create table t4 engine=rocksdb select * from gap1 where id1=1 +update gap1 join gap2 on gap1.id1 and gap1.id2=gap2.id2 set gap1.value=100 where gap2.id1=3 +and gap2.id2=3 and gap2.id3=3; +update gap1 join gap2 on gap1.id1 and gap1.id2=gap2.id2 set gap1.value=100 where gap2.id1=3; +ERROR HY000: Using Gap Lock without full unique key in multi-table or multi-statement transactions is not allowed. You need to either rewrite queries to use all unique key columns in WHERE equal conditions, or rewrite to single-table, single-statement transaction. Query: update gap1 join gap2 on gap1.id1 and gap1.id2=gap2.id2 set gap1.value=100 where gap2.id1=3 +update gap1 join gap2 on gap1.id1 and gap1.id2=gap2.id2 join gap3 on gap1.id1=gap3.id +set gap1.value=100 where gap2.id1=3; +ERROR HY000: Using Gap Lock without full unique key in multi-table or multi-statement transactions is not allowed. You need to either rewrite queries to use all unique key columns in WHERE equal conditions, or rewrite to single-table, single-statement transaction. Query: update gap1 join gap2 on gap1.id1 and gap1.id2=gap2.id2 join gap3 on gap1.id1=gap3.id +set gap1.value=100 where gap2.id1=3 +update gap1 set gap1.value= (select count(*) from gap2); +ERROR HY000: Using Gap Lock without full unique key in multi-table or multi-statement transactions is not allowed. You need to either rewrite queries to use all unique key columns in WHERE equal conditions, or rewrite to single-table, single-statement transaction. Query: update gap1 set gap1.value= (select count(*) from gap2) +delete gap1 from gap1 join gap2 on gap1.id1 and gap1.id2=gap2.id2 where gap2.id1=3 +and gap2.id2=3 and gap2.id3=3; +delete gap1 from gap1 join gap2 on gap1.id1 and gap1.id2=gap2.id2 where gap2.id1=3; +ERROR HY000: Using Gap Lock without full unique key in multi-table or multi-statement transactions is not allowed. You need to either rewrite queries to use all unique key columns in WHERE equal conditions, or rewrite to single-table, single-statement transaction. Query: delete gap1 from gap1 join gap2 on gap1.id1 and gap1.id2=gap2.id2 where gap2.id1=3 +select * from gap1, gap2 limit 1 for update; +ERROR HY000: Using Gap Lock without full unique key in multi-table or multi-statement transactions is not allowed. You need to either rewrite queries to use all unique key columns in WHERE equal conditions, or rewrite to single-table, single-statement transaction. Query: select * from gap1, gap2 limit 1 for update +select * from gap1 a, gap1 b limit 1 for update; +ERROR HY000: Using Gap Lock without full unique key in multi-table or multi-statement transactions is not allowed. You need to either rewrite queries to use all unique key columns in WHERE equal conditions, or rewrite to single-table, single-statement transaction. Query: select * from gap1 a, gap1 b limit 1 for update +create table u1( +c1 int, +c2 int, +c3 int, +c4 int, +primary key (c1, c2, c3), +unique key (c3, c1) +) engine=rocksdb; +begin; +insert into u1 values (1,1,1,1); +commit; +begin; +insert into u1 values (1,2,1,1) on duplicate key update c4=10; +commit; +begin; +select * from u1 where c3=1 and c1 = 1 for update; +c1 c2 c3 c4 +1 1 1 10 +select * from u1 where c3=1 for update; +ERROR HY000: Using Gap Lock without full unique key in multi-table or multi-statement transactions is not allowed. You need to either rewrite queries to use all unique key columns in WHERE equal conditions, or rewrite to single-table, single-statement transaction. Query: select * from u1 where c3=1 for update +commit; +drop table u1; +set session autocommit=1; +insert into gap1 (id1, id2, id3) values (-1,-1,-1); +insert into gap1 (id1, id2, id3) values (-1,-1,-1) +on duplicate key update value=100; +update gap1 set value=100 where id1=1; +update gap1 set value=100 where id1=1 and id2=1 and id3=1; +delete from gap1 where id1=2; +delete from gap1 where id1=-1 and id2=-1 and id3=-1; +commit; +drop table gap1, gap2, gap3, gap4; diff --git a/mysql-test/suite/rocksdb/r-native-partitioning/get_error_message.result b/mysql-test/suite/rocksdb/r-native-partitioning/get_error_message.result new file mode 100644 index 000000000000..184b00752642 --- /dev/null +++ b/mysql-test/suite/rocksdb/r-native-partitioning/get_error_message.result @@ -0,0 +1,7 @@ +CREATE TABLE t1(a INT,b INT,KEY (a)) ENGINE=ROCKSDB PARTITION BY HASH (a) PARTITIONS 3; +SHOW TABLES; +Tables_in_test +t1 +ALTER TABLE t1 ADD PARTITION(PARTITION p3 DATA DIRECTORY='G:/mysqltest/p3Data' INDEX DIRECTORY='H:/mysqltest/p3Index'); +ERROR 42000: Incorrect table name 'H:/mysqltest/p3Index' +DROP TABLE t1; diff --git a/mysql-test/suite/rocksdb/r-native-partitioning/issue495.result b/mysql-test/suite/rocksdb/r-native-partitioning/issue495.result new file mode 100644 index 000000000000..be479cd89c90 --- /dev/null +++ b/mysql-test/suite/rocksdb/r-native-partitioning/issue495.result @@ -0,0 +1,29 @@ +create table t ( +a int, +b int, +c varchar(12249) collate latin1_bin, +d datetime, +e int, +f int, +g blob, +h int, +i int, +key (b,e), +key (h,b) +) engine=rocksdb +partition by linear hash (i) partitions 8; +insert into t values (1,1,'a',now(),1,1,'a',1,1); +insert into t values (1,1,'a',now(),1,1,'a',1,1); +insert into t values (1,1,'a',now(),1,1,'a',1,1); +insert into t values (1,1,'a',now(),1,1,'a',1,1); +insert into t values (1,1,'a',now(),1,1,'a',1,1); +insert into t values (1,1,'a',now(),1,1,'a',1,1); +insert into t values (1,1,'a',now(),1,1,'a',1,1); +insert into t values (1,1,'a',now(),1,1,'a',1,1); +select i from t group by h; +i +1 +select i from t group by h; +i +1 +drop table t; diff --git a/mysql-test/suite/rocksdb/r-native-partitioning/nonflushing_analyze_parts_debug.result b/mysql-test/suite/rocksdb/r-native-partitioning/nonflushing_analyze_parts_debug.result new file mode 100644 index 000000000000..ba31d00b3fca --- /dev/null +++ b/mysql-test/suite/rocksdb/r-native-partitioning/nonflushing_analyze_parts_debug.result @@ -0,0 +1,50 @@ +CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=RocksDB +PARTITION BY RANGE (a) ( +PARTITION p0 VALUES LESS THAN (3), +PARTITION p1 VALUES LESS THAN (10)); +INSERT INTO t1 VALUES (1), (2), (3), (4); +SET DEBUG_SYNC="handler_ha_index_next_end SIGNAL idx_scan_in_progress WAIT_FOR finish_scan"; +SELECT * FROM t1; +SET DEBUG_SYNC="now WAIT_FOR idx_scan_in_progress"; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +SELECT * FROM t1; +a +1 +2 +3 +4 +SET DEBUG_SYNC="now SIGNAL finish_scan"; +a +1 +2 +3 +4 +DROP TABLE t1; +CREATE TABLE t2 (a INT PRIMARY KEY) ENGINE=RocksDB +PARTITION BY RANGE (a) +SUBPARTITION BY HASH (A) +SUBPARTITIONS 2 ( +PARTITION p0 VALUES LESS THAN (3), +PARTITION p1 VALUES LESS THAN (10)); +INSERT INTO t2 VALUES (1), (2), (3), (4); +SET DEBUG_SYNC="handler_ha_index_next_end SIGNAL idx_scan_in_progress WAIT_FOR finish_scan"; +SELECT * FROM t2; +SET DEBUG_SYNC="now WAIT_FOR idx_scan_in_progress"; +ANALYZE TABLE t2; +Table Op Msg_type Msg_text +test.t2 analyze status OK +SELECT * FROM t2; +a +2 +1 +4 +3 +SET DEBUG_SYNC="now SIGNAL finish_scan"; +a +2 +1 +4 +3 +DROP TABLE t2; diff --git a/mysql-test/suite/rocksdb/r-native-partitioning/partition.result b/mysql-test/suite/rocksdb/r-native-partitioning/partition.result new file mode 100644 index 000000000000..1ee5952a827e --- /dev/null +++ b/mysql-test/suite/rocksdb/r-native-partitioning/partition.result @@ -0,0 +1,641 @@ +CREATE TABLE t1 (i INT, j INT, k INT, PRIMARY KEY (i)) ENGINE = ROCKSDB PARTITION BY KEY(i) PARTITIONS 4; +Table Op Msg_type Msg_text +test.t1 optimize status OK +Table Op Msg_type Msg_text +test.t1 analyze status OK +Table Op Msg_type Msg_text +test.t1 repair status OK +Table Op Msg_type Msg_text +test.t1 check status OK +SHOW TABLES; +Tables_in_test +TEMP0 +VAR_POP +VAR_SAMP +t1 +SELECT * FROM t1 ORDER BY i LIMIT 10; +i j k +1 1 1 +2 2 2 +3 3 3 +4 4 4 +5 5 5 +6 6 6 +7 7 7 +8 8 8 +9 9 9 +10 10 10 +SELECT COUNT(*) FROM t1; +COUNT(*) +1000 +CREATE TABLE ti( +id INT, +amount DECIMAL(7,2), +tr_date DATE +) ENGINE=ROCKSDB +PARTITION BY HASH(MONTH(tr_date)) +PARTITIONS 6; +CREATE TABLE members ( +firstname VARCHAR(25) NOT NULL, +lastname VARCHAR(25) NOT NULL, +username VARCHAR(16) NOT NULL, +email VARCHAR(35), +joined DATE NOT NULL +) ENGINE=ROCKSDB +PARTITION BY KEY(joined) +PARTITIONS 6; +CREATE TABLE members_2 ( +firstname VARCHAR(25) NOT NULL, +lastname VARCHAR(25) NOT NULL, +username VARCHAR(16) NOT NULL, +email VARCHAR(35), +joined DATE NOT NULL +) ENGINE=ROCKSDB +PARTITION BY RANGE(YEAR(joined)) ( +PARTITION p0 VALUES LESS THAN (1960), +PARTITION p1 VALUES LESS THAN (1970), +PARTITION p2 VALUES LESS THAN (1980), +PARTITION p3 VALUES LESS THAN (1990), +PARTITION p4 VALUES LESS THAN MAXVALUE +); +CREATE TABLE t2 (val INT) +ENGINE=ROCKSDB +PARTITION BY LIST(val)( +PARTITION mypart VALUES IN (1,3,5), +PARTITION MyPart VALUES IN (2,4,6) +); +ERROR HY000: Duplicate partition name MyPart +CREATE TABLE employees ( +id INT NOT NULL, +fname VARCHAR(30), +lname VARCHAR(30), +hired DATE NOT NULL DEFAULT '1970-01-01', +separated DATE NOT NULL DEFAULT '9999-12-31', +job_code INT NOT NULL, +store_id INT NOT NULL +) ENGINE=ROCKSDB +PARTITION BY RANGE (store_id) ( +PARTITION p0 VALUES LESS THAN (6), +PARTITION p1 VALUES LESS THAN (11), +PARTITION p2 VALUES LESS THAN (16), +PARTITION p3 VALUES LESS THAN MAXVALUE +); +CREATE TABLE employees_2 ( +id INT NOT NULL, +fname VARCHAR(30), +lname VARCHAR(30), +hired DATE NOT NULL DEFAULT '1970-01-01', +separated DATE NOT NULL DEFAULT '9999-12-31', +job_code INT NOT NULL, +store_id INT NOT NULL +) ENGINE=ROCKSDB +PARTITION BY RANGE (job_code) ( +PARTITION p0 VALUES LESS THAN (100), +PARTITION p1 VALUES LESS THAN (1000), +PARTITION p2 VALUES LESS THAN (10000) +); +CREATE TABLE employees_3 ( +id INT NOT NULL, +fname VARCHAR(30), +lname VARCHAR(30), +hired DATE NOT NULL DEFAULT '1970-01-01', +separated DATE NOT NULL DEFAULT '9999-12-31', +job_code INT, +store_id INT +) ENGINE=ROCKSDB +PARTITION BY RANGE (YEAR(separated)) ( +PARTITION p0 VALUES LESS THAN (1991), +PARTITION p1 VALUES LESS THAN (1996), +PARTITION p2 VALUES LESS THAN (2001), +PARTITION p3 VALUES LESS THAN MAXVALUE +); +CREATE TABLE quarterly_report_status ( +report_id INT NOT NULL, +report_status VARCHAR(20) NOT NULL, +report_updated TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP +) ENGINE=ROCKSDB +PARTITION BY RANGE (UNIX_TIMESTAMP(report_updated)) ( +PARTITION p0 VALUES LESS THAN ( UNIX_TIMESTAMP('2008-01-01 00:00:00') ), +PARTITION p1 VALUES LESS THAN ( UNIX_TIMESTAMP('2008-04-01 00:00:00') ), +PARTITION p2 VALUES LESS THAN ( UNIX_TIMESTAMP('2008-07-01 00:00:00') ), +PARTITION p3 VALUES LESS THAN ( UNIX_TIMESTAMP('2008-10-01 00:00:00') ), +PARTITION p4 VALUES LESS THAN ( UNIX_TIMESTAMP('2009-01-01 00:00:00') ), +PARTITION p5 VALUES LESS THAN ( UNIX_TIMESTAMP('2009-04-01 00:00:00') ), +PARTITION p6 VALUES LESS THAN ( UNIX_TIMESTAMP('2009-07-01 00:00:00') ), +PARTITION p7 VALUES LESS THAN ( UNIX_TIMESTAMP('2009-10-01 00:00:00') ), +PARTITION p8 VALUES LESS THAN ( UNIX_TIMESTAMP('2010-01-01 00:00:00') ), +PARTITION p9 VALUES LESS THAN (MAXVALUE) +); +CREATE TABLE employees_4 ( +id INT NOT NULL, +fname VARCHAR(30), +lname VARCHAR(30), +hired DATE NOT NULL DEFAULT '1970-01-01', +separated DATE NOT NULL DEFAULT '9999-12-31', +job_code INT, +store_id INT +) ENGINE=ROCKSDB +PARTITION BY LIST(store_id) ( +PARTITION pNorth VALUES IN (3,5,6,9,17), +PARTITION pEast VALUES IN (1,2,10,11,19,20), +PARTITION pWest VALUES IN (4,12,13,14,18), +PARTITION pCentral VALUES IN (7,8,15,16) +); +CREATE TABLE h2 ( +c1 INT, +c2 INT +) ENGINE=ROCKSDB +PARTITION BY LIST(c1) ( +PARTITION p0 VALUES IN (1, 4, 7), +PARTITION p1 VALUES IN (2, 5, 8) +); +INSERT INTO h2 VALUES (3, 5); +ERROR HY000: Table has no partition for value 3 +CREATE TABLE rcx ( +a INT, +b INT, +c CHAR(3), +d INT +) ENGINE=ROCKSDB +PARTITION BY RANGE COLUMNS(a,d,c) ( +PARTITION p0 VALUES LESS THAN (5,10,'ggg'), +PARTITION p1 VALUES LESS THAN (10,20,'mmm'), +PARTITION p2 VALUES LESS THAN (15,30,'sss'), +PARTITION p3 VALUES LESS THAN (MAXVALUE,MAXVALUE,MAXVALUE) +); +CREATE TABLE r1 ( +a INT, +b INT +) ENGINE=ROCKSDB +PARTITION BY RANGE (a) ( +PARTITION p0 VALUES LESS THAN (5), +PARTITION p1 VALUES LESS THAN (MAXVALUE) +); +INSERT INTO r1 VALUES (5,10), (5,11), (5,12); +CREATE TABLE rc1 ( +a INT, +b INT +) ENGINE=ROCKSDB +PARTITION BY RANGE COLUMNS(a, b) ( +PARTITION p0 VALUES LESS THAN (5, 12), +PARTITION p3 VALUES LESS THAN (MAXVALUE, MAXVALUE) +); +INSERT INTO rc1 VALUES (5,10), (5,11), (5,12); +SELECT (5,10) < (5,12), (5,11) < (5,12), (5,12) < (5,12); +(5,10) < (5,12) (5,11) < (5,12) (5,12) < (5,12) +1 1 0 +CREATE TABLE rx ( +a INT, +b INT +) ENGINE=ROCKSDB +PARTITION BY RANGE COLUMNS (a) ( +PARTITION p0 VALUES LESS THAN (5), +PARTITION p1 VALUES LESS THAN (MAXVALUE) +); +INSERT INTO rx VALUES (5,10), (5,11), (5,12); +CREATE TABLE rc2 ( +a INT, +b INT +) ENGINE=ROCKSDB +PARTITION BY RANGE COLUMNS(a,b) ( +PARTITION p0 VALUES LESS THAN (0,10), +PARTITION p1 VALUES LESS THAN (10,20), +PARTITION p2 VALUES LESS THAN (10,30), +PARTITION p3 VALUES LESS THAN (MAXVALUE,MAXVALUE) +); +CREATE TABLE rc3 ( +a INT, +b INT +) ENGINE=ROCKSDB +PARTITION BY RANGE COLUMNS(a,b) ( +PARTITION p0 VALUES LESS THAN (0,10), +PARTITION p1 VALUES LESS THAN (10,20), +PARTITION p2 VALUES LESS THAN (10,30), +PARTITION p3 VALUES LESS THAN (10,35), +PARTITION p4 VALUES LESS THAN (20,40), +PARTITION p5 VALUES LESS THAN (MAXVALUE,MAXVALUE) +); +CREATE TABLE rc4 ( +a INT, +b INT, +c INT +) ENGINE=ROCKSDB +PARTITION BY RANGE COLUMNS(a,b,c) ( +PARTITION p0 VALUES LESS THAN (0,25,50), +PARTITION p1 VALUES LESS THAN (10,20,100), +PARTITION p2 VALUES LESS THAN (10,30,50), +PARTITION p3 VALUES LESS THAN (MAXVALUE,MAXVALUE,MAXVALUE) +); +SELECT (0,25,50) < (10,20,100), (10,20,100) < (10,30,50); +(0,25,50) < (10,20,100) (10,20,100) < (10,30,50) +1 1 +CREATE TABLE rcf ( +a INT, +b INT, +c INT +) ENGINE=ROCKSDB +PARTITION BY RANGE COLUMNS(a,b,c) ( +PARTITION p0 VALUES LESS THAN (0,25,50), +PARTITION p1 VALUES LESS THAN (20,20,100), +PARTITION p2 VALUES LESS THAN (10,30,50), +PARTITION p3 VALUES LESS THAN (MAXVALUE,MAXVALUE,MAXVALUE) +); +ERROR HY000: VALUES LESS THAN value must be strictly increasing for each partition +CREATE TABLE employees_by_lname ( +id INT NOT NULL, +fname VARCHAR(30), +lname VARCHAR(30), +hired DATE NOT NULL DEFAULT '1970-01-01', +separated DATE NOT NULL DEFAULT '9999-12-31', +job_code INT NOT NULL, +store_id INT NOT NULL +) ENGINE=ROCKSDB +PARTITION BY RANGE COLUMNS (lname) ( +PARTITION p0 VALUES LESS THAN ('g'), +PARTITION p1 VALUES LESS THAN ('m'), +PARTITION p2 VALUES LESS THAN ('t'), +PARTITION p3 VALUES LESS THAN (MAXVALUE) +); +ALTER TABLE employees_by_lname PARTITION BY RANGE COLUMNS (lname) ( +PARTITION p0 VALUES LESS THAN ('g'), +PARTITION p1 VALUES LESS THAN ('m'), +PARTITION p2 VALUES LESS THAN ('t'), +PARTITION p3 VALUES LESS THAN (MAXVALUE) +); +ALTER TABLE employees_by_lname PARTITION BY RANGE COLUMNS (hired) ( +PARTITION p0 VALUES LESS THAN ('1970-01-01'), +PARTITION p1 VALUES LESS THAN ('1980-01-01'), +PARTITION p2 VALUES LESS THAN ('1990-01-01'), +PARTITION p3 VALUES LESS THAN ('2000-01-01'), +PARTITION p4 VALUES LESS THAN ('2010-01-01'), +PARTITION p5 VALUES LESS THAN (MAXVALUE) +); +CREATE TABLE customers_1 ( +first_name VARCHAR(25), +last_name VARCHAR(25), +street_1 VARCHAR(30), +street_2 VARCHAR(30), +city VARCHAR(15), +renewal DATE +) ENGINE=ROCKSDB +PARTITION BY LIST COLUMNS(city) ( +PARTITION pRegion_1 VALUES IN('Oskarshamn', 'Högsby', 'Mönsterås'), +PARTITION pRegion_2 VALUES IN('Vimmerby', 'Hultsfred', 'Västervik'), +PARTITION pRegion_3 VALUES IN('Nässjö', 'Eksjö', 'Vetlanda'), +PARTITION pRegion_4 VALUES IN('Uppvidinge', 'Alvesta', 'Växjo') +); +CREATE TABLE customers_2 ( +first_name VARCHAR(25), +last_name VARCHAR(25), +street_1 VARCHAR(30), +street_2 VARCHAR(30), +city VARCHAR(15), +renewal DATE +) ENGINE=ROCKSDB +PARTITION BY LIST COLUMNS(renewal) ( +PARTITION pWeek_1 VALUES IN('2010-02-01', '2010-02-02', '2010-02-03', +'2010-02-04', '2010-02-05', '2010-02-06', '2010-02-07'), +PARTITION pWeek_2 VALUES IN('2010-02-08', '2010-02-09', '2010-02-10', +'2010-02-11', '2010-02-12', '2010-02-13', '2010-02-14'), +PARTITION pWeek_3 VALUES IN('2010-02-15', '2010-02-16', '2010-02-17', +'2010-02-18', '2010-02-19', '2010-02-20', '2010-02-21'), +PARTITION pWeek_4 VALUES IN('2010-02-22', '2010-02-23', '2010-02-24', +'2010-02-25', '2010-02-26', '2010-02-27', '2010-02-28') +); +CREATE TABLE customers_3 ( +first_name VARCHAR(25), +last_name VARCHAR(25), +street_1 VARCHAR(30), +street_2 VARCHAR(30), +city VARCHAR(15), +renewal DATE +) ENGINE=ROCKSDB +PARTITION BY RANGE COLUMNS(renewal) ( +PARTITION pWeek_1 VALUES LESS THAN('2010-02-09'), +PARTITION pWeek_2 VALUES LESS THAN('2010-02-15'), +PARTITION pWeek_3 VALUES LESS THAN('2010-02-22'), +PARTITION pWeek_4 VALUES LESS THAN('2010-03-01') +); +CREATE TABLE employees_hash ( +id INT NOT NULL, +fname VARCHAR(30), +lname VARCHAR(30), +hired DATE NOT NULL DEFAULT '1970-01-01', +separated DATE NOT NULL DEFAULT '9999-12-31', +job_code INT, +store_id INT +) ENGINE=ROCKSDB +PARTITION BY HASH(store_id) +PARTITIONS 4; +CREATE TABLE employees_hash_1 ( +id INT NOT NULL, +fname VARCHAR(30), +lname VARCHAR(30), +hired DATE NOT NULL DEFAULT '1970-01-01', +separated DATE NOT NULL DEFAULT '9999-12-31', +job_code INT, +store_id INT +) ENGINE=ROCKSDB +PARTITION BY HASH( YEAR(hired) ) +PARTITIONS 4; +CREATE TABLE t1_hash ( +col1 INT, +col2 CHAR(5), +col3 DATE +) ENGINE=ROCKSDB +PARTITION BY HASH( YEAR(col3) ) +PARTITIONS 4; +CREATE TABLE employees_linear_hash ( +id INT NOT NULL, +fname VARCHAR(30), +lname VARCHAR(30), +hired DATE NOT NULL DEFAULT '1970-01-01', +separated DATE NOT NULL DEFAULT '9999-12-31', +job_code INT, +store_id INT +) ENGINE=ROCKSDB +PARTITION BY LINEAR HASH( YEAR(hired) ) +PARTITIONS 4; +CREATE TABLE t1_linear_hash ( +col1 INT, +col2 CHAR(5), +col3 DATE +) ENGINE=ROCKSDB +PARTITION BY LINEAR HASH( YEAR(col3) ) +PARTITIONS 6; +CREATE TABLE k1 ( +id INT NOT NULL PRIMARY KEY, +name VARCHAR(20) +) ENGINE=ROCKSDB +PARTITION BY KEY() +PARTITIONS 2; +CREATE TABLE k2 ( +id INT NOT NULL, +name VARCHAR(20), +UNIQUE KEY (id) +) ENGINE=ROCKSDB +PARTITION BY KEY() +PARTITIONS 2; +CREATE TABLE tm1 ( +s1 CHAR(32) PRIMARY KEY +) ENGINE=ROCKSDB +PARTITION BY KEY(s1) +PARTITIONS 10; +CREATE TABLE tk ( +col1 INT NOT NULL, +col2 CHAR(5), +col3 DATE +) ENGINE=ROCKSDB +PARTITION BY LINEAR KEY (col1) +PARTITIONS 3; +CREATE TABLE ts ( +id INT, +purchased DATE +) ENGINE=ROCKSDB +PARTITION BY RANGE( YEAR(purchased) ) +SUBPARTITION BY HASH( TO_DAYS(purchased) ) +SUBPARTITIONS 2 ( +PARTITION p0 VALUES LESS THAN (1990), +PARTITION p1 VALUES LESS THAN (2000), +PARTITION p2 VALUES LESS THAN MAXVALUE +); +CREATE TABLE ts_1 ( +id INT, +purchased DATE +) ENGINE=ROCKSDB +PARTITION BY RANGE( YEAR(purchased) ) +SUBPARTITION BY HASH( TO_DAYS(purchased) ) ( +PARTITION p0 VALUES LESS THAN (1990) ( +SUBPARTITION s0, +SUBPARTITION s1 +), +PARTITION p1 VALUES LESS THAN (2000) ( +SUBPARTITION s2, +SUBPARTITION s3 +), +PARTITION p2 VALUES LESS THAN MAXVALUE ( +SUBPARTITION s4, +SUBPARTITION s5 +) +); +CREATE TABLE ts_2 ( +id INT, +purchased DATE +) ENGINE=ROCKSDB +PARTITION BY RANGE( YEAR(purchased) ) +SUBPARTITION BY HASH( TO_DAYS(purchased) ) ( +PARTITION p0 VALUES LESS THAN (1990) ( +SUBPARTITION s0, +SUBPARTITION s1 +), +PARTITION p1 VALUES LESS THAN (2000), +PARTITION p2 VALUES LESS THAN MAXVALUE ( +SUBPARTITION s2, +SUBPARTITION s3 +) +); +ERROR 42000: Wrong number of subpartitions defined, mismatch with previous setting near ' +PARTITION p2 VALUES LESS THAN MAXVALUE ( +SUBPARTITION s2, +SUBPARTITION s3 +) +)' at line 11 +CREATE TABLE ts_3 ( +id INT, +purchased DATE +) ENGINE=ROCKSDB +PARTITION BY RANGE( YEAR(purchased) ) +SUBPARTITION BY HASH( TO_DAYS(purchased) ) ( +PARTITION p0 VALUES LESS THAN (1990) ( +SUBPARTITION s0, +SUBPARTITION s1 +), +PARTITION p1 VALUES LESS THAN (2000) ( +SUBPARTITION s2, +SUBPARTITION s3 +), +PARTITION p2 VALUES LESS THAN MAXVALUE ( +SUBPARTITION s4, +SUBPARTITION s5 +) +); +CREATE TABLE ts_4 ( +id INT, +purchased DATE +) ENGINE=ROCKSDB +PARTITION BY RANGE( YEAR(purchased) ) +SUBPARTITION BY HASH( TO_DAYS(purchased) ) ( +PARTITION p0 VALUES LESS THAN (1990) ( +SUBPARTITION s0, +SUBPARTITION s1 +), +PARTITION p1 VALUES LESS THAN (2000) ( +SUBPARTITION s2, +SUBPARTITION s3 +), +PARTITION p2 VALUES LESS THAN MAXVALUE ( +SUBPARTITION s4, +SUBPARTITION s5 +) +); +CREATE TABLE ts_5 ( +id INT, +purchased DATE +) ENGINE=ROCKSDB +PARTITION BY RANGE(YEAR(purchased)) +SUBPARTITION BY HASH( TO_DAYS(purchased) ) ( +PARTITION p0 VALUES LESS THAN (1990) ( +SUBPARTITION s0a, +SUBPARTITION s0b +), +PARTITION p1 VALUES LESS THAN (2000) ( +SUBPARTITION s1a, +SUBPARTITION s1b +), +PARTITION p2 VALUES LESS THAN MAXVALUE ( +SUBPARTITION s2a, +SUBPARTITION s2b +) +); +CREATE TABLE trb3 ( +id INT, +name VARCHAR(50), +purchased DATE +) ENGINE=ROCKSDB +PARTITION BY RANGE( YEAR(purchased) ) ( +PARTITION p0 VALUES LESS THAN (1990), +PARTITION p1 VALUES LESS THAN (1995), +PARTITION p2 VALUES LESS THAN (2000), +PARTITION p3 VALUES LESS THAN (2005) +); +ALTER TABLE trb3 PARTITION BY KEY(id) PARTITIONS 2; +CREATE TABLE tr ( +id INT, +name VARCHAR(50), +purchased DATE +) ENGINE=ROCKSDB +PARTITION BY RANGE( YEAR(purchased) ) ( +PARTITION p0 VALUES LESS THAN (1990), +PARTITION p1 VALUES LESS THAN (1995), +PARTITION p2 VALUES LESS THAN (2000), +PARTITION p3 VALUES LESS THAN (2005) +); +INSERT INTO tr VALUES +(1, 'desk organiser', '2003-10-15'), +(2, 'CD player', '1993-11-05'), +(3, 'TV set', '1996-03-10'), +(4, 'bookcase', '1982-01-10'), +(5, 'exercise bike', '2004-05-09'), +(6, 'sofa', '1987-06-05'), +(7, 'popcorn maker', '2001-11-22'), +(8, 'aquarium', '1992-08-04'), +(9, 'study desk', '1984-09-16'), +(10, 'lava lamp', '1998-12-25'); +SELECT * FROM tr WHERE purchased BETWEEN '1995-01-01' AND '1999-12-31'; +id name purchased +3 TV set 1996-03-10 +10 lava lamp 1998-12-25 +ALTER TABLE tr DROP PARTITION p2; +SELECT * FROM tr WHERE purchased BETWEEN '1995-01-01' AND '1999-12-31'; +id name purchased +CREATE TABLE members_3 ( +id INT, +fname VARCHAR(25), +lname VARCHAR(25), +dob DATE +) ENGINE=ROCKSDB +PARTITION BY RANGE( YEAR(dob) ) ( +PARTITION p0 VALUES LESS THAN (1970), +PARTITION p1 VALUES LESS THAN (1980), +PARTITION p2 VALUES LESS THAN (1990) +); +ALTER TABLE members_3 ADD PARTITION (PARTITION p3 VALUES LESS THAN (2000)); +ALTER TABLE members_3 ADD PARTITION (PARTITION n VALUES LESS THAN (1960)); +ERROR HY000: VALUES LESS THAN value must be strictly increasing for each partition +CREATE TABLE clients ( +id INT, +fname VARCHAR(30), +lname VARCHAR(30), +signed DATE +) ENGINE=ROCKSDB +PARTITION BY HASH( MONTH(signed) ) +PARTITIONS 12; +ALTER TABLE clients COALESCE PARTITION 4; +CREATE TABLE clients_lk ( +id INT, +fname VARCHAR(30), +lname VARCHAR(30), +signed DATE +) ENGINE=ROCKSDB +PARTITION BY LINEAR KEY(signed) +PARTITIONS 12; +ALTER TABLE clients COALESCE PARTITION 18; +ERROR HY000: Cannot remove all partitions, use DROP TABLE instead +ALTER TABLE clients ADD PARTITION PARTITIONS 6; +CREATE TABLE trb1 ( +id INT, +name VARCHAR(50), +purchased DATE +) ENGINE=ROCKSDB +PARTITION BY RANGE(id) ( +PARTITION p0 VALUES LESS THAN (3), +PARTITION p1 VALUES LESS THAN (7), +PARTITION p2 VALUES LESS THAN (9), +PARTITION p3 VALUES LESS THAN (11) +); +INSERT INTO trb1 VALUES +(1, 'desk organiser', '2003-10-15'), +(2, 'CD player', '1993-11-05'), +(3, 'TV set', '1996-03-10'), +(4, 'bookcase', '1982-01-10'), +(5, 'exercise bike', '2004-05-09'), +(6, 'sofa', '1987-06-05'), +(7, 'popcorn maker', '2001-11-22'), +(8, 'aquarium', '1992-08-04'), +(9, 'study desk', '1984-09-16'), +(10, 'lava lamp', '1998-12-25'); +ALTER TABLE trb1 ADD PRIMARY KEY (id); +DROP TABLE t1; +DROP TABLE VAR_POP; +DROP TABLE TEMP0; +DROP TABLE VAR_SAMP; +DROP TABLE ti; +DROP TABLE members; +DROP TABLE members_2; +DROP TABLE employees; +DROP TABLE employees_2; +DROP TABLE employees_3; +DROP TABLE quarterly_report_status; +DROP TABLE employees_4; +DROP TABLE h2; +DROP TABLE rcx; +DROP TABLE r1; +DROP TABLE rc1; +DROP TABLE rx; +DROP TABLE rc2; +DROP TABLE rc3; +DROP TABLE rc4; +DROP TABLE employees_by_lname; +DROP TABLE customers_1; +DROP TABLE customers_2; +DROP TABLE customers_3; +DROP TABLE employees_hash; +DROP TABLE employees_hash_1; +DROP TABLE t1_hash; +DROP TABLE employees_linear_hash; +DROP TABLE t1_linear_hash; +DROP TABLE k1; +DROP TABLE k2; +DROP TABLE tm1; +DROP TABLE tk; +DROP TABLE ts; +DROP TABLE ts_1; +DROP TABLE ts_3; +DROP TABLE ts_4; +DROP TABLE ts_5; +DROP TABLE trb3; +DROP TABLE tr; +DROP TABLE members_3; +DROP TABLE clients; +DROP TABLE clients_lk; +DROP TABLE trb1; diff --git a/mysql-test/suite/rocksdb/r-native-partitioning/rocksdb.result b/mysql-test/suite/rocksdb/r-native-partitioning/rocksdb.result new file mode 100644 index 000000000000..73bac4195b6f --- /dev/null +++ b/mysql-test/suite/rocksdb/r-native-partitioning/rocksdb.result @@ -0,0 +1,2762 @@ +select ENGINE,COMMENT,TRANSACTIONS,XA,SAVEPOINTS from information_schema.engines where engine = 'rocksdb'; +ENGINE COMMENT TRANSACTIONS XA SAVEPOINTS +ROCKSDB RocksDB storage engine YES YES YES +SET @ORIG_PAUSE_BACKGROUND_WORK = @@ROCKSDB_PAUSE_BACKGROUND_WORK; +SET GLOBAL ROCKSDB_PAUSE_BACKGROUND_WORK = 1; +# +# Issue #1: Don't update indexes if index values have not changed +# +create table t1 ( +pk int primary key, +a int, +b int, +key(a) +) engine=rocksdb; +insert into t1 values +(1,1,1), (2,2,2), (3,3,3), (4,4,4); +set @var1=(select variable_value +from performance_schema.global_status +where variable_name='rocksdb_number_keys_written'); +# Do an update that doesn't change the key 'a'. +update t1 set b=3334341 where a=2; +set @var2=(select variable_value +from performance_schema.global_status +where variable_name='rocksdb_number_keys_written'); +# The following should produce 1 +select @var2 - @var1; +@var2 - @var1 +1 +# Do an update that sets the key to the same value +update t1 set a=pk where a=3; +set @var3=(select variable_value +from performance_schema.global_status +where variable_name='rocksdb_number_keys_written'); +# We have 'updated' column to the same value, so the following must return 0: +select @var3 - @var2; +@var3 - @var2 +0 +drop table t1; +create table t0 (a int primary key) engine=rocksdb; +show create table t0; +Table Create Table +t0 CREATE TABLE `t0` ( + `a` int(11) NOT NULL, + PRIMARY KEY (`a`) +) ENGINE=ROCKSDB DEFAULT CHARSET=latin1 +drop table t0; +create table t1 (a int primary key, b int) engine=rocksdb; +insert into t1 values (1,1); +insert into t1 values (2,2); +select * from t1; +a b +1 1 +2 2 +# Check that we can create another table and insert there +create table t2 (a varchar(10) primary key, b varchar(10)) engine=rocksdb; +insert into t2 value ('abc','def'); +insert into t2 value ('hijkl','mnopq'); +select * from t2; +a b +abc def +hijkl mnopq +# Select again from t1 to see that records from different tables dont mix +select * from t1; +a b +1 1 +2 2 +explain select * from t2 where a='no-such-key'; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL no matching row in const table +Warnings: +Note 1003 /* select#1 */ select NULL AS `a`,NULL AS `b` from `test`.`t2` where multiple equal('no-such-key', NULL) +explain select * from t2 where a='abc'; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t2 NULL const PRIMARY PRIMARY 12 const # 100.00 NULL +Warnings: +Note 1003 /* select#1 */ select 'abc' AS `a`,'def' AS `b` from `test`.`t2` where 1 +select * from t2 where a='abc'; +a b +abc def +# Try a composite PK +create table t3 ( +pk1 int, +pk2 varchar(10), +col1 varchar(10), +primary key(pk1, pk2) +) engine=rocksdb; +insert into t3 values (2,'two', 'row#2'); +insert into t3 values (3,'three', 'row#3'); +insert into t3 values (1,'one', 'row#1'); +select * from t3; +pk1 pk2 col1 +1 one row#1 +2 two row#2 +3 three row#3 +select * from t3 where pk1=3 and pk2='three'; +pk1 pk2 col1 +3 three row#3 +drop table t1, t2, t3; +# +# Test blob values +# +create table t4 (a int primary key, b blob) engine=rocksdb; +insert into t4 values (1, repeat('quux-quux', 60)); +insert into t4 values (10, repeat('foo-bar', 43)); +insert into t4 values (5, repeat('foo-bar', 200)); +insert into t4 values (2, NULL); +select +a, +(case a +when 1 then b=repeat('quux-quux', 60) +when 10 then b=repeat('foo-bar', 43) +when 5 then b=repeat('foo-bar', 200) +when 2 then b is null +else 'IMPOSSIBLE!' end) as CMP +from t4; +a CMP +1 1 +2 1 +5 1 +10 1 +drop table t4; +# +# Test blobs of various sizes +# +# TINYBLOB +create table t5 (a int primary key, b tinyblob) engine=rocksdb; +insert into t5 values (1, repeat('quux-quux', 6)); +insert into t5 values (10, repeat('foo-bar', 4)); +insert into t5 values (5, repeat('foo-bar', 2)); +select +a, +(case a +when 1 then b=repeat('quux-quux', 6) +when 10 then b=repeat('foo-bar', 4) +when 5 then b=repeat('foo-bar', 2) +else 'IMPOSSIBLE!' end) as CMP +from t5; +a CMP +1 1 +5 1 +10 1 +drop table t5; +# MEDIUMBLOB +create table t6 (a int primary key, b mediumblob) engine=rocksdb; +insert into t6 values (1, repeat('AB', 65000)); +insert into t6 values (10, repeat('bbb', 40000)); +insert into t6 values (5, repeat('foo-bar', 2)); +select +a, +(case a +when 1 then b=repeat('AB', 65000) +when 10 then b=repeat('bbb', 40000) +when 5 then b=repeat('foo-bar', 2) +else 'IMPOSSIBLE!' end) as CMP +from t6; +a CMP +1 1 +5 1 +10 1 +drop table t6; +# LONGBLOB +create table t7 (a int primary key, b longblob) engine=rocksdb; +insert into t7 values (1, repeat('AB', 65000)); +insert into t7 values (10, repeat('bbb', 40000)); +insert into t7 values (5, repeat('foo-bar', 2)); +select +a, +(case a +when 1 then b=repeat('AB', 65000) +when 10 then b=repeat('bbb', 40000) +when 5 then b=repeat('foo-bar', 2) +else 'IMPOSSIBLE!' end) as CMP +from t7; +a CMP +1 1 +5 1 +10 1 +drop table t7; +# +# Check if DELETEs work +# +create table t8 (a varchar(10) primary key, col1 varchar(12)) engine=rocksdb; +insert into t8 values +('one', 'eins'), +('two', 'zwei'), +('three', 'drei'), +('four', 'vier'), +('five', 'funf'); +# Delete by PK +explain delete from t8 where a='three'; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 DELETE t8 NULL range PRIMARY PRIMARY 12 const # 100.00 Using where +delete from t8 where a='three'; +select * from t8; +a col1 +five funf +four vier +one eins +two zwei +# Delete while doing a full table scan +delete from t8 where col1='eins' or col1='vier'; +select * from t8; +a col1 +five funf +two zwei +# delete w/o WHERE: +delete from t8; +select * from t8; +a col1 +# +# Test UPDATEs +# +insert into t8 values +('one', 'eins'), +('two', 'zwei'), +('three', 'drei'), +('four', 'vier'), +('five', 'funf'); +update t8 set col1='dva' where a='two'; +update t8 set a='fourAAA' where col1='vier'; +select * from t8; +a col1 +five funf +fourAAA vier +one eins +three drei +two dva +delete from t8; +# +# Basic transactions tests +# +begin; +insert into t8 values ('trx1-val1', 'data'); +insert into t8 values ('trx1-val2', 'data'); +rollback; +select * from t8; +a col1 +begin; +insert into t8 values ('trx1-val1', 'data'); +insert into t8 values ('trx1-val2', 'data'); +commit; +select * from t8; +a col1 +trx1-val1 data +trx1-val2 data +drop table t8; +# +# Check if DROP TABLE works +# +create table t8 (a varchar(10) primary key, col1 varchar(12)) engine=rocksdb; +select * from t8; +a col1 +insert into t8 values ('foo','foo'); +drop table t8; +create table t8 (a varchar(10) primary key, col1 varchar(12)) engine=rocksdb; +select * from t8; +a col1 +drop table t8; +# +# MDEV-3961: Assertion ... on creating a TEMPORARY RocksDB table +# +CREATE TEMPORARY TABLE t10 (pk INT PRIMARY KEY) ENGINE=RocksDB; +ERROR HY000: Table storage engine 'ROCKSDB' does not support the create option 'TEMPORARY' +# +# MDEV-3963: JOIN or WHERE conditions involving keys on RocksDB tables don't work +# +CREATE TABLE t10 (i INT PRIMARY KEY) ENGINE=RocksDB; +INSERT INTO t10 VALUES (1),(3); +CREATE TABLE t11 (j INT PRIMARY KEY) ENGINE=RocksDB; +INSERT INTO t11 VALUES (1),(4); +select * from t10; +i +1 +3 +select * from t11; +j +1 +4 +EXPLAIN +SELECT * FROM t10, t11 WHERE i=j; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t10 NULL index PRIMARY PRIMARY 4 NULL # 100.00 Using index +1 SIMPLE t11 NULL eq_ref PRIMARY PRIMARY 4 test.t10.i # 100.00 Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`t10`.`i` AS `i`,`test`.`t11`.`j` AS `j` from `test`.`t10` join `test`.`t11` where (`test`.`t11`.`j` = `test`.`t10`.`i`) +SELECT * FROM t10, t11 WHERE i=j; +i j +1 1 +DROP TABLE t10,t11; +# +# MDEV-3962: SELECT with ORDER BY causes "ERROR 1030 (HY000): Got error 122 +# +CREATE TABLE t12 (pk INT PRIMARY KEY) ENGINE=RocksDB; +INSERT INTO t12 VALUES (2),(1); +SELECT * FROM t12 ORDER BY pk; +pk +1 +2 +DROP TABLE t12; +# +# MDEV-3964: Assertion `!pk_descr' fails in ha_rocksdb::open on adding partitions ... +# +create table t14 (pk int primary key) engine=RocksDB partition by hash(pk) partitions 2; +drop table t14; +# +# MDEV-3960: Server crashes on running DISCARD TABLESPACE on a RocksDB table +# +create table t9 (i int primary key) engine=rocksdb; +alter table t9 discard tablespace; +ERROR HY000: Table storage engine for 't9' doesn't have this option +drop table t9; +# +# MDEV-3959: Assertion `slice->size() == table->s->reclength' fails ... +# on accessing a table after ALTER +# +CREATE TABLE t15 (a INT, rocksdb_pk INT PRIMARY KEY) ENGINE=RocksDB; +INSERT INTO t15 VALUES (1,1),(5,2); +ALTER TABLE t15 DROP COLUMN a; +DROP TABLE t15; +# +# MDEV-3968: UPDATE produces a wrong result while modifying a PK on a RocksDB table +# +create table t16 (pk int primary key, a char(8)) engine=RocksDB; +insert into t16 values (1,'a'),(2,'b'),(3,'c'),(4,'d'); +update t16 set pk=100, a = 'updated' where a in ('b','c'); +ERROR 23000: Duplicate entry '100' for key 'PRIMARY' +select * from t16; +pk a +1 a +2 b +3 c +4 d +drop table t16; +# +# MDEV-3970: A set of assorted crashes on inserting a row into a RocksDB table +# +drop table if exists t_very_long_table_name; +CREATE TABLE `t_very_long_table_name` ( +`c` char(1) NOT NULL, +`c0` char(0) NOT NULL, +`c1` char(1) NOT NULL, +`c20` char(20) NOT NULL, +`c255` char(255) NOT NULL, +PRIMARY KEY (`c255`) +) ENGINE=RocksDB DEFAULT CHARSET=latin1; +INSERT INTO t_very_long_table_name VALUES ('a', '', 'c', REPEAT('a',20), REPEAT('x',255)); +drop table t_very_long_table_name; +# +# Test table locking and read-before-write checks. +# +create table t17 (pk varchar(12) primary key, col1 varchar(12)) engine=rocksdb; +insert into t17 values ('row1', 'val1'); +insert into t17 values ('row1', 'val1-try2'); +ERROR 23000: Duplicate entry 'row1' for key 'PRIMARY' +insert into t17 values ('ROW1', 'val1-try2'); +ERROR 23000: Duplicate entry 'ROW1' for key 'PRIMARY' +insert into t17 values ('row2', 'val2'); +insert into t17 values ('row3', 'val3'); +# This is ok +update t17 set pk='row4' where pk='row1'; +# This will try to overwrite another row: +update t17 set pk='row3' where pk='row2'; +ERROR 23000: Duplicate entry 'row3' for key 'PRIMARY' +select * from t17; +pk col1 +row2 val2 +row3 val3 +row4 val1 +# +# Locking tests +# +# First, make sure there's no locking when transactions update different rows +set autocommit=0; +update t17 set col1='UPD1' where pk='row2'; +update t17 set col1='UPD2' where pk='row3'; +commit; +select * from t17; +pk col1 +row2 UPD1 +row3 UPD2 +row4 val1 +# Check the variable +show variables like 'rocksdb_lock_wait_timeout'; +Variable_name Value +rocksdb_lock_wait_timeout 1 +set rocksdb_lock_wait_timeout=2; +show variables like 'rocksdb_lock_wait_timeout'; +Variable_name Value +rocksdb_lock_wait_timeout 2 +# Try updating the same row from two transactions +begin; +update t17 set col1='UPD2-AA' where pk='row2'; +update t17 set col1='UPD2-BB' where pk='row2'; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +set rocksdb_lock_wait_timeout=1000; +update t17 set col1='UPD2-CC' where pk='row2'; +rollback; +select * from t17 where pk='row2'; +pk col1 +row2 UPD2-CC +drop table t17; +# +# MDEV-4035: RocksDB: SELECT produces different results inside a transaction (read is not repeatable) +# +create table t18 (pk int primary key, i int) engine=RocksDB; +begin; +select * from t18; +pk i +select * from t18 where pk = 1; +pk i +connect con1,localhost,root,,; +insert into t18 values (1,100); +connection default; +select * from t18; +pk i +select * from t18 where pk = 1; +pk i +commit; +drop table t18; +# +# MDEV-4036: RocksDB: INSERT .. ON DUPLICATE KEY UPDATE does not work, produces ER_DUP_KEY +# +create table t19 (pk int primary key, i int) engine=RocksDB; +insert into t19 values (1,1); +insert into t19 values (1,100) on duplicate key update i = 102; +select * from t19; +pk i +1 102 +drop table t19; +# MDEV-4037: RocksDB: REPLACE doesn't work, produces ER_DUP_KEY +create table t20 (pk int primary key, i int) engine=RocksDB; +insert into t20 values (1,1); +replace into t20 values (1,100); +select * from t20; +pk i +1 100 +drop table t20; +# +# MDEV-4041: Server crashes in Primary_key_comparator::get_hashnr on INSERT +# +create table t21 (v varbinary(16) primary key, i int) engine=RocksDB; +insert into t21 values ('a',1); +select * from t21; +v i +a 1 +drop table t21; +# +# MDEV-4047: RocksDB: Assertion `0' fails in Protocol::end_statement() on multi-table INSERT IGNORE +# +CREATE TABLE t22 (a int primary key) ENGINE=RocksDB; +INSERT INTO t22 VALUES (1),(2); +CREATE TABLE t23 (b int primary key) ENGINE=RocksDB; +set @orig_tx_iso=@@session.transaction_isolation; +set session transaction_isolation='READ-COMMITTED'; +INSERT INTO t23 SELECT * FROM t22; +DELETE IGNORE t22.*, t23.* FROM t22, t23 WHERE b < a; +set session transaction_isolation=@orig_tx_iso; +DROP TABLE t22,t23; +# +# MDEV-4046: RocksDB: Multi-table DELETE locks itself and ends with ER_LOCK_WAIT_TIMEOUT +# +CREATE TABLE t24 (pk int primary key) ENGINE=RocksDB; +INSERT INTO t24 VALUES (1),(2); +CREATE TABLE t25 LIKE t24; +set @orig_tx_iso=@@session.transaction_isolation; +set session transaction_isolation='READ-COMMITTED'; +INSERT INTO t25 SELECT * FROM t24; +DELETE t25.* FROM t24, t25; +set session transaction_isolation=@orig_tx_iso; +DROP TABLE t24,t25; +# +# MDEV-4044: RocksDB: UPDATE or DELETE with ORDER BY locks itself +# +create table t26 (pk int primary key, c char(1)) engine=RocksDB; +insert into t26 values (1,'a'),(2,'b'); +update t26 set c = 'x' order by pk limit 1; +delete from t26 order by pk limit 1; +select * from t26; +pk c +2 b +drop table t26; +# +# Test whether SELECT ... FOR UPDATE puts locks +# +create table t27(pk varchar(10) primary key, col1 varchar(20)) engine=RocksDB; +insert into t27 values +('row1', 'row1data'), +('row2', 'row2data'), +('row3', 'row3data'); +connection con1; +begin; +select * from t27 where pk='row3' for update; +pk col1 +row3 row3data +connection default; +set rocksdb_lock_wait_timeout=1; +update t27 set col1='row2-modified' where pk='row3'; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +connection con1; +rollback; +connection default; +disconnect con1; +drop table t27; +# +# MDEV-4060: RocksDB: Assertion `! trx->batch' fails in +# +create table t28 (pk int primary key, a int) engine=RocksDB; +insert into t28 values (1,10),(2,20); +begin; +update t28 set a = 100 where pk = 3; +rollback; +select * from t28; +pk a +1 10 +2 20 +drop table t28; +# +# Secondary indexes +# +create table t30 ( +pk varchar(16) not null primary key, +key1 varchar(16) not null, +col1 varchar(16) not null, +key(key1) +) engine=rocksdb; +insert into t30 values ('row1', 'row1-key', 'row1-data'); +insert into t30 values ('row2', 'row2-key', 'row2-data'); +insert into t30 values ('row3', 'row3-key', 'row3-data'); +explain +select * from t30 where key1='row2-key'; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t30 NULL ref key1 key1 18 const # 100.00 NULL +Warnings: +Note 1003 /* select#1 */ select `test`.`t30`.`pk` AS `pk`,`test`.`t30`.`key1` AS `key1`,`test`.`t30`.`col1` AS `col1` from `test`.`t30` where (`test`.`t30`.`key1` = 'row2-key') +select * from t30 where key1='row2-key'; +pk key1 col1 +row2 row2-key row2-data +explain +select * from t30 where key1='row1'; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t30 NULL ref key1 key1 18 const # 100.00 NULL +Warnings: +Note 1003 /* select#1 */ select `test`.`t30`.`pk` AS `pk`,`test`.`t30`.`key1` AS `key1`,`test`.`t30`.`col1` AS `col1` from `test`.`t30` where (`test`.`t30`.`key1` = 'row1') +# This will produce nothing: +select * from t30 where key1='row1'; +pk key1 col1 +explain +select key1 from t30; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t30 NULL index NULL key1 18 NULL # 100.00 Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`t30`.`key1` AS `key1` from `test`.`t30` +select key1 from t30; +key1 +row1-key +row2-key +row3-key +# Create a duplicate record +insert into t30 values ('row2a', 'row2-key', 'row2a-data'); +# Can we see it? +select * from t30 where key1='row2-key'; +pk key1 col1 +row2 row2-key row2-data +row2a row2-key row2a-data +delete from t30 where pk='row2'; +select * from t30 where key1='row2-key'; +pk key1 col1 +row2a row2-key row2a-data +# +# Range scans on secondary index +# +delete from t30; +insert into t30 values +('row1', 'row1-key', 'row1-data'), +('row2', 'row2-key', 'row2-data'), +('row3', 'row3-key', 'row3-data'), +('row4', 'row4-key', 'row4-data'), +('row5', 'row5-key', 'row5-data'); +explain +select * from t30 where key1 <='row3-key'; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t30 NULL range key1 key1 18 NULL # 100.00 Using index condition +Warnings: +Note 1003 /* select#1 */ select `test`.`t30`.`pk` AS `pk`,`test`.`t30`.`key1` AS `key1`,`test`.`t30`.`col1` AS `col1` from `test`.`t30` where (`test`.`t30`.`key1` <= 'row3-key') +select * from t30 where key1 <='row3-key'; +pk key1 col1 +row1 row1-key row1-data +row2 row2-key row2-data +row3 row3-key row3-data +explain +select * from t30 where key1 between 'row2-key' and 'row4-key'; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t30 NULL range key1 key1 18 NULL # 100.00 Using index condition +Warnings: +Note 1003 /* select#1 */ select `test`.`t30`.`pk` AS `pk`,`test`.`t30`.`key1` AS `key1`,`test`.`t30`.`col1` AS `col1` from `test`.`t30` where (`test`.`t30`.`key1` between 'row2-key' and 'row4-key') +select * from t30 where key1 between 'row2-key' and 'row4-key'; +pk key1 col1 +row2 row2-key row2-data +row3 row3-key row3-data +row4 row4-key row4-data +explain +select * from t30 where key1 in ('row2-key','row4-key'); +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t30 NULL range key1 key1 18 NULL # 100.00 Using index condition +Warnings: +Note 1003 /* select#1 */ select `test`.`t30`.`pk` AS `pk`,`test`.`t30`.`key1` AS `key1`,`test`.`t30`.`col1` AS `col1` from `test`.`t30` where (`test`.`t30`.`key1` in ('row2-key','row4-key')) +select * from t30 where key1 in ('row2-key','row4-key'); +pk key1 col1 +row2 row2-key row2-data +row4 row4-key row4-data +explain +select key1 from t30 where key1 in ('row2-key','row4-key'); +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t30 NULL range key1 key1 18 NULL # 100.00 Using where; Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`t30`.`key1` AS `key1` from `test`.`t30` where (`test`.`t30`.`key1` in ('row2-key','row4-key')) +select key1 from t30 where key1 in ('row2-key','row4-key'); +key1 +row2-key +row4-key +explain +select * from t30 where key1 > 'row1-key' and key1 < 'row4-key'; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t30 NULL range key1 key1 18 NULL # 100.00 Using index condition +Warnings: +Note 1003 /* select#1 */ select `test`.`t30`.`pk` AS `pk`,`test`.`t30`.`key1` AS `key1`,`test`.`t30`.`col1` AS `col1` from `test`.`t30` where ((`test`.`t30`.`key1` > 'row1-key') and (`test`.`t30`.`key1` < 'row4-key')) +select * from t30 where key1 > 'row1-key' and key1 < 'row4-key'; +pk key1 col1 +row2 row2-key row2-data +row3 row3-key row3-data +explain +select * from t30 order by key1 limit 3; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t30 NULL index NULL key1 18 NULL # 100.00 NULL +Warnings: +Note 1003 /* select#1 */ select `test`.`t30`.`pk` AS `pk`,`test`.`t30`.`key1` AS `key1`,`test`.`t30`.`col1` AS `col1` from `test`.`t30` order by `test`.`t30`.`key1` limit 3 +select * from t30 order by key1 limit 3; +pk key1 col1 +row1 row1-key row1-data +row2 row2-key row2-data +row3 row3-key row3-data +explain +select * from t30 order by key1 desc limit 3; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t30 NULL index NULL key1 18 NULL # 100.00 NULL +Warnings: +Note 1003 /* select#1 */ select `test`.`t30`.`pk` AS `pk`,`test`.`t30`.`key1` AS `key1`,`test`.`t30`.`col1` AS `col1` from `test`.`t30` order by `test`.`t30`.`key1` desc limit 3 +select * from t30 order by key1 desc limit 3; +pk key1 col1 +row5 row5-key row5-data +row4 row4-key row4-data +row3 row3-key row3-data +# +# Range scans on primary key +# +explain +select * from t30 where pk <='row3'; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t30 NULL range PRIMARY PRIMARY 18 NULL # 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t30`.`pk` AS `pk`,`test`.`t30`.`key1` AS `key1`,`test`.`t30`.`col1` AS `col1` from `test`.`t30` where (`test`.`t30`.`pk` <= 'row3') +select * from t30 where pk <='row3'; +pk key1 col1 +row1 row1-key row1-data +row2 row2-key row2-data +row3 row3-key row3-data +explain +select * from t30 where pk between 'row2' and 'row4'; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t30 NULL range PRIMARY PRIMARY 18 NULL # 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t30`.`pk` AS `pk`,`test`.`t30`.`key1` AS `key1`,`test`.`t30`.`col1` AS `col1` from `test`.`t30` where (`test`.`t30`.`pk` between 'row2' and 'row4') +select * from t30 where pk between 'row2' and 'row4'; +pk key1 col1 +row2 row2-key row2-data +row3 row3-key row3-data +row4 row4-key row4-data +explain +select * from t30 where pk in ('row2','row4'); +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t30 NULL range PRIMARY PRIMARY 18 NULL # 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t30`.`pk` AS `pk`,`test`.`t30`.`key1` AS `key1`,`test`.`t30`.`col1` AS `col1` from `test`.`t30` where (`test`.`t30`.`pk` in ('row2','row4')) +select * from t30 where pk in ('row2','row4'); +pk key1 col1 +row2 row2-key row2-data +row4 row4-key row4-data +explain +select * from t30 order by pk limit 3; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t30 NULL index NULL PRIMARY 18 NULL # 100.00 NULL +Warnings: +Note 1003 /* select#1 */ select `test`.`t30`.`pk` AS `pk`,`test`.`t30`.`key1` AS `key1`,`test`.`t30`.`col1` AS `col1` from `test`.`t30` order by `test`.`t30`.`pk` limit 3 +select * from t30 order by pk limit 3; +pk key1 col1 +row1 row1-key row1-data +row2 row2-key row2-data +row3 row3-key row3-data +drop table t30; +# +# MDEV-3841: RocksDB: Reading by PK prefix does not work +# +create table t31 (i int, j int, k int, primary key(i,j,k)) engine=RocksDB; +insert into t31 values (1,10,100),(2,20,200); +select * from t31 where i = 1; +i j k +1 10 100 +select * from t31 where j = 10; +i j k +1 10 100 +select * from t31 where k = 100; +i j k +1 10 100 +select * from t31 where i = 1 and j = 10; +i j k +1 10 100 +select * from t31 where i = 1 and k = 100; +i j k +1 10 100 +select * from t31 where j = 10 and k = 100; +i j k +1 10 100 +select * from t31 where i = 1 and j = 10 and k = 100; +i j k +1 10 100 +drop table t31; +# +# MDEV-4055: RocksDB: UPDATE/DELETE by a multi-part PK does not work +# +create table t32 (i int, j int, k int, primary key(i,j,k), a varchar(8)) engine=RocksDB; +insert into t32 values +(1,10,100,''), +(2,20,200,''); +select * from t32 where i = 1 and j = 10 and k = 100; +i j k a +1 10 100 +update t32 set a = 'updated' where i = 1 and j = 10 and k = 100; +select * from t32; +i j k a +1 10 100 updated +2 20 200 +drop table t32; +# +# MDEV-3841: RocksDB: Assertion `0' fails in ha_rocksdb::index_read_map on range select with ORDER BY .. DESC +# +CREATE TABLE t33 (pk INT PRIMARY KEY, a CHAR(1)) ENGINE=RocksDB; +INSERT INTO t33 VALUES (1,'a'),(2,'b'); +SELECT * FROM t33 WHERE pk <= 10 ORDER BY pk DESC; +pk a +2 b +1 a +DROP TABLE t33; +# +# MDEV-4081: RocksDB throws error 122 on an attempt to create a table with unique index +# +# Unique indexes can be created, but uniqueness won't be enforced +create table t33 (pk int primary key, u int, unique index(u)) engine=RocksDB; +drop table t33; +# +# MDEV-4077: RocksDB: Wrong result (duplicate row) on select with range +# +CREATE TABLE t34 (pk INT PRIMARY KEY) ENGINE=RocksDB; +INSERT INTO t34 VALUES (10),(11); +SELECT pk FROM t34 WHERE pk > 5 AND pk < 15; +pk +10 +11 +SELECT pk FROM t34 WHERE pk BETWEEN 5 AND 15; +pk +10 +11 +SELECT pk FROM t34 WHERE pk > 5; +pk +10 +11 +SELECT pk FROM t34 WHERE pk < 15; +pk +10 +11 +drop table t34; +# +# MDEV-4086: RocksDB does not allow a query with multi-part pk and index and ORDER BY .. DEC +# +create table t35 (a int, b int, c int, d int, e int, primary key (a,b,c), key (a,c,d,e)) engine=RocksDB; +insert into t35 values (1,1,1,1,1),(2,2,2,2,2); +select * from t35 where a = 1 and c = 1 and d = 1 order by e desc; +a b c d e +1 1 1 1 1 +drop table t35; +# +# MDEV-4084: RocksDB: Wrong result on IN subquery with index +# +CREATE TABLE t36 (pk INT PRIMARY KEY, a INT, KEY(a)) ENGINE=RocksDB; +INSERT INTO t36 VALUES (1,10),(2,20); +SELECT 3 IN ( SELECT a FROM t36 ); +3 IN ( SELECT a FROM t36 ) +0 +drop table t36; +# +# MDEV-4084: RocksDB: Wrong result on IN subquery with index +# +CREATE TABLE t37 (pk INT PRIMARY KEY, a INT, b CHAR(1), KEY(a), KEY(a,b)) +ENGINE=RocksDB; +INSERT INTO t37 VALUES (1,10,'x'), (2,20,'y'); +SELECT MAX(a) FROM t37 WHERE a < 100; +MAX(a) +20 +DROP TABLE t37; +# +# MDEV-4090: RocksDB: Wrong result (duplicate rows) on range access with secondary key and ORDER BY DESC +# +CREATE TABLE t38 (pk INT PRIMARY KEY, i INT, KEY(i)) ENGINE=RocksDB; +INSERT INTO t38 VALUES (1,10), (2,20); +SELECT i FROM t38 WHERE i NOT IN (8) ORDER BY i DESC; +i +20 +10 +drop table t38; +# +# MDEV-4092: RocksDB: Assertion `in_table(pa, a_len)' fails in Rdb_key_def::cmp_full_keys +# with a multi-part key and ORDER BY .. DESC +# +CREATE TABLE t40 (pk1 INT PRIMARY KEY, a INT, b VARCHAR(1), KEY(b,a)) ENGINE=RocksDB; +INSERT INTO t40 VALUES (1, 7,'x'),(2,8,'y'); +CREATE TABLE t41 (pk2 INT PRIMARY KEY) ENGINE=RocksDB; +INSERT INTO t41 VALUES (1),(2); +SELECT * FROM t40, t41 WHERE pk1 = pk2 AND b = 'o' ORDER BY a DESC; +pk1 a b pk2 +DROP TABLE t40,t41; +# +# MDEV-4093: RocksDB: IN subquery by secondary key with NULL among values returns true instead of NULL +# +CREATE TABLE t42 (pk INT PRIMARY KEY, a INT, KEY(a)) ENGINE=RocksDB; +INSERT INTO t42 VALUES (1, NULL),(2, 8); +SELECT ( 3 ) NOT IN ( SELECT a FROM t42 ); +( 3 ) NOT IN ( SELECT a FROM t42 ) +NULL +DROP TABLE t42; +# +# MDEV-4094: RocksDB: Wrong result on SELECT and ER_KEY_NOT_FOUND on +# DELETE with search by NULL-able secondary key ... +# +CREATE TABLE t43 (pk INT PRIMARY KEY, a INT, b CHAR(1), KEY(a)) ENGINE=RocksDB; +INSERT INTO t43 VALUES (1,8,'g'),(2,9,'x'); +UPDATE t43 SET pk = 10 WHERE a = 8; +REPLACE INTO t43 ( pk, a ) VALUES ( 1, 8 ); +REPLACE INTO t43 ( pk, b ) VALUES ( 3, 'y' ); +SELECT * FROM t43 WHERE a = 8; +pk a b +1 8 NULL +10 8 g +DELETE FROM t43 WHERE a = 8; +DROP TABLE t43; +# +# Basic AUTO_INCREMENT tests +# +create table t44(pk int primary key auto_increment, col1 varchar(12)) engine=rocksdb; +insert into t44 (col1) values ('row1'); +insert into t44 (col1) values ('row2'); +insert into t44 (col1) values ('row3'); +select * from t44; +pk col1 +1 row1 +2 row2 +3 row3 +drop table t44; +# +# ALTER TABLE tests +# +create table t45 (pk int primary key, col1 varchar(12)) engine=rocksdb; +insert into t45 values (1, 'row1'); +insert into t45 values (2, 'row2'); +alter table t45 rename t46; +select * from t46; +pk col1 +1 row1 +2 row2 +drop table t46; +drop table t45; +ERROR 42S02: Unknown table 'test.t45' +# +# Check Bulk loading +# Bulk loading used to overwrite existing data +# Now it fails if there is data overlap with what +# already exists +# +show variables where variable_name like 'rocksdb%' and variable_name not like 'rocksdb_max_open_files'; +Variable_name Value +rocksdb_access_hint_on_compaction_start 1 +rocksdb_advise_random_on_open ON +rocksdb_allow_concurrent_memtable_write OFF +rocksdb_allow_mmap_reads OFF +rocksdb_allow_mmap_writes OFF +rocksdb_allow_to_start_after_corruption OFF +rocksdb_block_cache_size 536870912 +rocksdb_block_restart_interval 16 +rocksdb_block_size 4096 +rocksdb_block_size_deviation 10 +rocksdb_bulk_load OFF +rocksdb_bulk_load_allow_sk OFF +rocksdb_bulk_load_allow_unsorted OFF +rocksdb_bulk_load_size 1000 +rocksdb_bytes_per_sync 0 +rocksdb_cache_index_and_filter_blocks ON +rocksdb_checksums_pct 100 +rocksdb_collect_sst_properties ON +rocksdb_commit_in_the_middle OFF +rocksdb_commit_time_batch_for_recovery OFF +rocksdb_compact_cf +rocksdb_compaction_readahead_size 0 +rocksdb_compaction_sequential_deletes 0 +rocksdb_compaction_sequential_deletes_count_sd OFF +rocksdb_compaction_sequential_deletes_file_size 0 +rocksdb_compaction_sequential_deletes_window 0 +rocksdb_concurrent_prepare ON +rocksdb_create_checkpoint +rocksdb_create_if_missing ON +rocksdb_create_missing_column_families OFF +rocksdb_datadir ./.rocksdb +rocksdb_db_write_buffer_size 0 +rocksdb_deadlock_detect OFF +rocksdb_deadlock_detect_depth 50 +rocksdb_debug_optimizer_no_zero_cardinality ON +rocksdb_debug_ttl_ignore_pk OFF +rocksdb_debug_ttl_read_filter_ts 0 +rocksdb_debug_ttl_rec_ts 0 +rocksdb_debug_ttl_snapshot_ts 0 +rocksdb_default_cf_options compression=kLZ4Compression;bottommost_compression=kLZ4Compression +rocksdb_delayed_write_rate 0 +rocksdb_delete_obsolete_files_period_micros 21600000000 +rocksdb_enable_bulk_load_api ON +rocksdb_enable_native_partition ON +rocksdb_enable_thread_tracking ON +rocksdb_enable_ttl ON +rocksdb_enable_ttl_read_filtering ON +rocksdb_enable_write_thread_adaptive_yield OFF +rocksdb_error_if_exists OFF +rocksdb_error_on_suboptimal_collation OFF +rocksdb_flush_log_at_trx_commit 1 +rocksdb_force_compute_memtable_stats ON +rocksdb_force_compute_memtable_stats_cachetime 0 +rocksdb_force_flush_memtable_and_lzero_now OFF +rocksdb_force_flush_memtable_now OFF +rocksdb_force_index_records_in_range 0 +rocksdb_hash_index_allow_collision ON +rocksdb_ignore_unknown_options ON +rocksdb_index_type kBinarySearch +rocksdb_info_log_level error_level +rocksdb_is_fd_close_on_exec ON +rocksdb_keep_log_file_num 1000 +rocksdb_large_prefix OFF +rocksdb_lock_scanned_rows OFF +rocksdb_lock_wait_timeout 1 +rocksdb_log_file_time_to_roll 0 +rocksdb_manifest_preallocation_size 4194304 +rocksdb_manual_wal_flush ON +rocksdb_max_background_jobs 2 +rocksdb_max_latest_deadlocks 5 +rocksdb_max_log_file_size 0 +rocksdb_max_manifest_file_size 18446744073709551615 +rocksdb_max_row_locks 1048576 +rocksdb_max_subcompactions 1 +rocksdb_max_total_wal_size 0 +rocksdb_merge_buf_size 67108864 +rocksdb_merge_combine_read_size 1073741824 +rocksdb_merge_tmp_file_removal_delay_ms 0 +rocksdb_new_table_reader_for_compaction_inputs OFF +rocksdb_no_block_cache OFF +rocksdb_override_cf_options +rocksdb_paranoid_checks ON +rocksdb_pause_background_work ON +rocksdb_perf_context_level 0 +rocksdb_persistent_cache_path +rocksdb_persistent_cache_size_mb 0 +rocksdb_pin_l0_filter_and_index_blocks_in_cache ON +rocksdb_print_snapshot_conflict_queries OFF +rocksdb_rate_limiter_bytes_per_sec 0 +rocksdb_read_free_rpl_tables +rocksdb_records_in_range 50 +rocksdb_reset_stats OFF +rocksdb_rpl_skip_tx_api OFF +rocksdb_seconds_between_stat_computes 3600 +rocksdb_signal_drop_index_thread OFF +rocksdb_sim_cache_size 0 +rocksdb_skip_bloom_filter_on_read OFF +rocksdb_skip_fill_cache OFF +rocksdb_sst_mgr_rate_bytes_per_sec 0 +rocksdb_stats_dump_period_sec 600 +rocksdb_stats_recalc_rate 0 +rocksdb_store_row_debug_checksums OFF +rocksdb_strict_collation_check OFF +rocksdb_strict_collation_exceptions +rocksdb_table_cache_numshardbits 6 +rocksdb_table_stats_sampling_pct 10 +rocksdb_tmpdir +rocksdb_trace_sst_api OFF +rocksdb_two_write_queues ON +rocksdb_unsafe_for_binlog OFF +rocksdb_update_cf_options +rocksdb_use_adaptive_mutex OFF +rocksdb_use_direct_io_for_flush_and_compaction OFF +rocksdb_use_direct_reads OFF +rocksdb_use_fsync OFF +rocksdb_validate_tables 1 +rocksdb_verify_row_debug_checksums OFF +rocksdb_wal_bytes_per_sync 0 +rocksdb_wal_dir +rocksdb_wal_recovery_mode 1 +rocksdb_wal_size_limit_mb 0 +rocksdb_wal_ttl_seconds 0 +rocksdb_whole_key_filtering ON +rocksdb_write_batch_max_bytes 0 +rocksdb_write_disable_wal OFF +rocksdb_write_ignore_missing_column_families OFF +rocksdb_write_policy write_committed +create table t47 (pk int primary key, col1 varchar(12)) engine=rocksdb; +insert into t47 values (1, 'row1'); +insert into t47 values (2, 'row2'); +set rocksdb_bulk_load=1; +insert into t47 values (3, 'row3'),(4, 'row4'); +set rocksdb_bulk_load=0; +connect con1,localhost,root,,; +set rocksdb_bulk_load=1; +insert into t47 values (10, 'row10'),(11, 'row11'); +connection default; +set rocksdb_bulk_load=1; +insert into t47 values (100, 'row100'),(101, 'row101'); +disconnect con1; +connection default; +set rocksdb_bulk_load=0; +select * from t47; +pk col1 +1 row1 +2 row2 +3 row3 +4 row4 +10 row10 +11 row11 +100 row100 +101 row101 +drop table t47; +# +# Fix TRUNCATE over empty table (transaction is committed when it wasn't +# started) +# +create table t48(pk int primary key auto_increment, col1 varchar(12)) engine=rocksdb; +set autocommit=0; +truncate table t48; +set autocommit=1; +drop table t48; +# +# MDEV-4059: RocksDB: query waiting for a lock cannot be killed until query timeout exceeded +# +create table t49 (pk int primary key, a int) engine=RocksDB; +insert into t49 values (1,10),(2,20); +begin; +update t49 set a = 100 where pk = 1; +connect con1,localhost,root,,; +set rocksdb_lock_wait_timeout=60; +set @var1= to_seconds(now()); +update t49 set a = 1000 where pk = 1; +connect con2,localhost,root,,; +kill query $con1_id; +connection con1; +ERROR 70100: Query execution was interrupted +set @var2= to_seconds(now()); +select if ((@var2 - @var1) < 60, "passed", (@var2 - @var1)) as 'result'; +result +passed +connection default; +disconnect con1; +disconnect con2; +commit; +drop table t49; +# +# Index-only tests for INT-based columns +# +create table t1 (pk int primary key, key1 int, col1 int, key(key1)) engine=rocksdb; +insert into t1 values (1,1,1); +insert into t1 values (2,2,2); +insert into t1 values (-5,-5,-5); +# INT column uses index-only: +explain +select key1 from t1 where key1=2; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 NULL ref key1 key1 5 const # 100.00 Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`key1` AS `key1` from `test`.`t1` where (`test`.`t1`.`key1` = 2) +select key1 from t1 where key1=2; +key1 +2 +select key1 from t1 where key1=-5; +key1 +-5 +drop table t1; +create table t2 (pk int primary key, key1 int unsigned, col1 int, key(key1)) engine=rocksdb; +insert into t2 values (1,1,1), (2,2,2); +# INT UNSIGNED column uses index-only: +explain +select key1 from t2 where key1=2; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t2 NULL ref key1 key1 5 const # 100.00 Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`t2`.`key1` AS `key1` from `test`.`t2` where (`test`.`t2`.`key1` = 2) +select key1 from t2 where key1=2; +key1 +2 +drop table t2; +create table t3 (pk bigint primary key, key1 bigint, col1 int, key(key1)) engine=rocksdb; +insert into t3 values (1,1,1), (2,2,2); +# BIGINT uses index-only: +explain +select key1 from t3 where key1=2; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t3 NULL ref key1 key1 9 const # 100.00 Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`t3`.`key1` AS `key1` from `test`.`t3` where (`test`.`t3`.`key1` = 2) +select key1 from t3 where key1=2; +key1 +2 +drop table t3; +# +# Index-only reads for string columns +# +create table t1 ( +pk int primary key, +key1 char(10) character set binary, +col1 int, +key (key1) +) engine=rocksdb; +insert into t1 values(1, 'one',11), (2,'two',22); +explain +select key1 from t1 where key1='one'; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 NULL ref key1 key1 11 const # 100.00 Using where; Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`key1` AS `key1` from `test`.`t1` where (`test`.`t1`.`key1` = 'one') +# The following will produce no rows. This looks like a bug, +# but it is actually correct behavior. Binary strings are end-padded +# with \0 character (and not space). Comparison does not ignore +# the tail of \0. +select key1 from t1 where key1='one'; +key1 +explain +select hex(key1) from t1 where key1='one\0\0\0\0\0\0\0'; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 NULL ref key1 key1 11 const # 100.00 Using where; Using index +Warnings: +Note 1003 /* select#1 */ select hex(`test`.`t1`.`key1`) AS `hex(key1)` from `test`.`t1` where (`test`.`t1`.`key1` = 'one\0\0\0\0\0\0\0') +select hex(key1) from t1 where key1='one\0\0\0\0\0\0\0'; +hex(key1) +6F6E6500000000000000 +drop table t1; +create table t2 ( +pk int primary key, +key1 char(10) collate latin1_bin, +col1 int, +key (key1) +) engine=rocksdb; +insert into t2 values(1, 'one',11), (2,'two',22); +explain +select key1 from t2 where key1='one'; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t2 NULL ref key1 key1 11 const # 100.00 Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`t2`.`key1` AS `key1` from `test`.`t2` where (`test`.`t2`.`key1` = 'one') +select key1 from t2 where key1='one'; +key1 +one +drop table t2; +create table t3 ( +pk int primary key, +key1 char(10) collate utf8_bin, +col1 int, +key (key1) +) engine=rocksdb; +insert into t3 values(1, 'one',11), (2,'two',22); +explain +select key1 from t3 where key1='one'; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t3 NULL ref key1 key1 31 const # 100.00 Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`t3`.`key1` AS `key1` from `test`.`t3` where (`test`.`t3`.`key1` = 'one') +select key1 from t3 where key1='one'; +key1 +one +drop table t3; +# a VARCHAR column +create table t4 ( +pk int primary key, +key1 varchar(10) collate latin1_bin, +key(key1) +) engine=rocksdb; +insert into t4 values(1, 'one'), (2,'two'),(3,'threee'),(55,'fifty-five'); +explain +select key1 from t4 where key1='two'; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t4 NULL ref key1 key1 13 const # 100.00 Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`t4`.`key1` AS `key1` from `test`.`t4` where (`test`.`t4`.`key1` = 'two') +select key1 from t4 where key1='two'; +key1 +two +select key1 from t4 where key1='fifty-five'; +key1 +fifty-five +explain +select key1 from t4 where key1 between 's' and 'u'; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t4 NULL range key1 key1 13 NULL # 100.00 Using where; Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`t4`.`key1` AS `key1` from `test`.`t4` where (`test`.`t4`.`key1` between 's' and 'u') +select key1 from t4 where key1 between 's' and 'u'; +key1 +threee +two +drop table t4; +# +# MDEV-4305: RocksDB: Assertion `((keypart_map + 1) & keypart_map) == 0' fails in calculate_key_len +# +CREATE TABLE t1 (pk1 INT, pk2 CHAR(32), i INT, PRIMARY KEY(pk1,pk2), KEY(i)) ENGINE=RocksDB; +INSERT INTO t1 VALUES (1,'test1',6),(2,'test2',8); +SELECT * FROM t1 WHERE i != 3 OR pk1 > 9; +pk1 pk2 i +1 test1 6 +2 test2 8 +DROP TABLE t1; +# +# MDEV-4298: RocksDB: Assertion `thd->is_error() || kill_errno' fails in ha_rows filesort +# +CREATE TABLE t1 (pk INT PRIMARY KEY, i INT, KEY(i)) ENGINE=RocksDB; +INSERT INTO t1 VALUES (1,1),(2,2); +set @orig_tx_iso=@@session.transaction_isolation; +set session transaction_isolation='READ-COMMITTED'; +BEGIN; +UPDATE t1 SET i = 100; +connect con1,localhost,root,,test; +DELETE IGNORE FROM t1 ORDER BY i; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +disconnect con1; +connection default; +COMMIT; +set session transaction_isolation=@orig_tx_iso; +DROP TABLE t1; +# +# MDEV-4324: RocksDB: Valgrind "Use of uninitialised value" warnings on inserting value into varchar field +# (testcase only) +# +CREATE TABLE t1 (pk INT PRIMARY KEY, c VARCHAR(4)) ENGINE=RocksDB; +INSERT INTO t1 VALUES (1,'foo'), (2,'bar'); +DROP TABLE t1; +# +# MDEV-4304: RocksDB: Index-only scan by a field with utf8_bin collation returns garbage symbols +# +CREATE TABLE t1 (pk INT PRIMARY KEY, c1 CHAR(1), c2 CHAR(1), KEY(c1)) ENGINE=RocksDB CHARSET utf8 COLLATE utf8_bin; +INSERT INTO t1 VALUES (1,'h','h'); +SELECT * FROM t1; +pk c1 c2 +1 h h +SELECT c1 FROM t1; +c1 +h +DROP TABLE t1; +# +# MDEV-4300: RocksDB: Server crashes in inline_mysql_mutex_lock on SELECT .. FOR UPDATE +# +CREATE TABLE t2 (pk INT PRIMARY KEY, i INT, KEY (i)) ENGINE=RocksDB; +INSERT INTO t2 VALUES (1,4),(2,5); +SELECT 1 FROM t2 WHERE i < 0 FOR UPDATE; +1 +DROP TABLE t2; +# +# MDEV-4301: RocksDB: Assertion `pack_info != __null' fails in Rdb_key_def::unpack_record +# +CREATE TABLE t1 (pk INT PRIMARY KEY, i INT, c CHAR(1), KEY(c,i)) ENGINE=RocksDB; +INSERT INTO t1 VALUES (1,4,'d'),(2,8,'e'); +SELECT MAX( pk ) FROM t1 WHERE i = 105 AND c = 'h'; +MAX( pk ) +NULL +DROP TABLE t1; +# +# MDEV-4337: RocksDB: Inconsistent results comparing a char field with an int field +# +create table t1 (c char(1), i int, primary key(c), key(i)) engine=RocksDB; +insert into t1 values ('2',2),('6',6); +select * from t1 where c = i; +c i +2 2 +6 6 +select * from t1 ignore index (i) where c = i; +c i +2 2 +6 6 +drop table t1; +# +# Test statement rollback inside a transaction +# +create table t1 (pk varchar(12) primary key) engine=rocksdb; +insert into t1 values ('old-val1'),('old-val2'); +create table t2 (pk varchar(12) primary key) engine=rocksdb; +insert into t2 values ('new-val2'),('old-val1'); +set @orig_tx_iso=@@session.transaction_isolation; +set session transaction_isolation='READ-COMMITTED'; +begin; +insert into t1 values ('new-val1'); +insert into t1 select * from t2; +ERROR 23000: Duplicate entry 'old-val1' for key 'PRIMARY' +commit; +set session transaction_isolation=@orig_tx_iso; +select * from t1; +pk +new-val1 +old-val1 +old-val2 +drop table t1, t2; +# +# MDEV-4383: RocksDB: Wrong result of DELETE .. ORDER BY .. LIMIT: +# rows that should be deleted remain in the table +# +CREATE TABLE t2 (pk INT AUTO_INCREMENT PRIMARY KEY) ENGINE=RocksDB; +CREATE TABLE t1 (pk INT AUTO_INCREMENT PRIMARY KEY) ENGINE=RocksDB; +INSERT INTO t1 (pk) VALUES (NULL),(NULL); +set @orig_tx_iso=@@session.transaction_isolation; +set session transaction_isolation='READ-COMMITTED'; +BEGIN; +INSERT INTO t2 (pk) VALUES (NULL),(NULL); +INSERT INTO t1 (pk) VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL); +SELECT * FROM t1 ORDER BY pk LIMIT 9; +pk +1 +2 +3 +4 +5 +6 +7 +8 +affected rows: 8 +DELETE FROM t1 ORDER BY pk LIMIT 9; +affected rows: 8 +SELECT * FROM t1 ORDER BY pk LIMIT 9; +pk +affected rows: 0 +COMMIT; +DROP TABLE t1,t2; +set session transaction_isolation=@orig_tx_iso; +# +# MDEV-4374: RocksDB: Valgrind warnings 'Use of uninitialised value' on +# inserting into a varchar column +# +CREATE TABLE t1 (pk INT PRIMARY KEY, a VARCHAR(32)) ENGINE=ROCKSDB; +INSERT INTO t1 VALUES (1,'foo'),(2,'bar'); +DROP TABLE t1; +# +# MDEV-4061: RocksDB: Changes from an interrupted query are still applied +# +create table t1 (pk int primary key, a int) engine=rocksdb; +insert into t1 values (1,10),(2,20); +set autocommit = 1; +update t1 set a = sleep(300) where pk = 1;; +connect con1,localhost,root,,; +kill query $con_id; +connection default; +ERROR 70100: Query execution was interrupted +select * from t1; +pk a +1 10 +2 20 +disconnect con1; +drop table t1; +# +# MDEV-4099: RocksDB: Wrong results with index and range access after INSERT IGNORE or REPLACE +# +CREATE TABLE t1 (pk INT PRIMARY KEY, a SMALLINT, b INT, KEY (a)) ENGINE=RocksDB; +INSERT IGNORE INTO t1 VALUES (1, 157, 0), (2, 1898, -504403), (1, -14659, 0); +Warnings: +Warning 1062 Duplicate entry '1' for key 'PRIMARY' +SELECT * FROM t1; +pk a b +1 157 0 +2 1898 -504403 +SELECT pk FROM t1; +pk +1 +2 +SELECT * FROM t1 WHERE a != 97; +pk a b +1 157 0 +2 1898 -504403 +DROP TABLE t1; +# +# Test @@rocksdb_max_row_locks +# +CREATE TABLE t1 (pk INT PRIMARY KEY, a int) ENGINE=RocksDB; +set @a=-1; +insert into t1 select (@a:=@a+1), 1234 from performance_schema.session_variables limit 100; +set @tmp1= @@rocksdb_max_row_locks; +set rocksdb_max_row_locks= 20; +update t1 set a=a+10; +ERROR HY000: Got error 10 'Operation aborted: Failed to acquire lock due to max_num_locks limit' from ROCKSDB +DROP TABLE t1; +# +# Test AUTO_INCREMENT behavior problem, +# "explicit insert into an auto-inc column is not noticed by RocksDB" +# +create table t1 (i int primary key auto_increment) engine=RocksDB; +insert into t1 values (null); +insert into t1 values (null); +select * from t1; +i +1 +2 +drop table t1; +create table t2 (i int primary key auto_increment) engine=RocksDB; +insert into t2 values (1); +select * from t2; +i +1 +# this fails (ie. used to fail), RocksDB engine did not notice use of '1' above +insert into t2 values (null); +select * from t2; +i +1 +2 +# but then this succeeds, so previous statement must have incremented next number counter +insert into t2 values (null); +select * from t2; +i +1 +2 +3 +drop table t2; +# +# Fix Issue#2: AUTO_INCREMENT value doesn't survive server shutdown +# +create table t1 (i int primary key auto_increment) engine=RocksDB; +insert into t1 values (null); +insert into t1 values (null); +SET GLOBAL ROCKSDB_PAUSE_BACKGROUND_WORK = @ORIG_PAUSE_BACKGROUND_WORK; +# restart +SET @ORIG_PAUSE_BACKGROUND_WORK = @@ROCKSDB_PAUSE_BACKGROUND_WORK; +SET GLOBAL ROCKSDB_PAUSE_BACKGROUND_WORK = 1; +insert into t1 values (null); +select * from t1; +i +1 +2 +3 +drop table t1; +# +# Fix Issue #3: SHOW TABLE STATUS shows Auto_increment=0 +# +create table t1 (i int primary key auto_increment) engine=RocksDB; +insert into t1 values (null),(null); +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 ROCKSDB 10 Fixed 1000 0 # 0 0 0 3 NULL NULL NULL latin1_swedish_ci NULL +drop table t1; +# +# Fix Issue #4: Crash when using pseudo-unique keys +# +CREATE TABLE t1 ( +i INT, +t TINYINT, +s SMALLINT, +m MEDIUMINT, +b BIGINT, +pk MEDIUMINT AUTO_INCREMENT PRIMARY KEY, +UNIQUE KEY b_t (b,t) +) ENGINE=rocksdb; +INSERT INTO t1 (i,t,s,m,b) VALUES (1,2,3,4,5),(1000,100,10000,1000000,1000000000000000000),(5,100,10000,1000000,100000000000000000),(2,3,4,5,6),(3,4,5,6,7),(101,102,103,104,105),(10001,103,10002,10003,10004),(10,11,12,13,14),(11,12,13,14,15),(12,13,14,15,16); +SELECT b+t FROM t1 WHERE (b,t) IN ( SELECT b, t FROM t1 WHERE i>1 ) ORDER BY b+t; +b+t +9 +11 +25 +27 +29 +207 +10107 +100000000000000100 +1000000000000000100 +DROP TABLE t1; +# +# Fix issue #5: Transaction rollback doesn't undo all changes. +# +create table t0 (a int) engine=myisam; +insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9); +create table t1 (id int auto_increment primary key, value int) engine=rocksdb; +set autocommit=0; +begin; +set @a:=0; +insert into t1 select @a:=@a+1, @a from t0 A, t0 B, t0 C, t0 D where D.a<4; +insert into t1 select @a:=@a+1, @a from t0 A, t0 B, t0 C, t0 D where D.a<4; +insert into t1 select @a:=@a+1, @a from t0 A, t0 B, t0 C, t0 D where D.a<4; +rollback; +select count(*) from t1; +count(*) +0 +set autocommit=1; +drop table t0, t1; +# +# Check status variables +# +show status like 'rocksdb%'; +Variable_name Value +rocksdb_rows_deleted # +rocksdb_rows_inserted # +rocksdb_rows_read # +rocksdb_rows_updated # +rocksdb_rows_expired # +rocksdb_rows_filtered # +rocksdb_system_rows_deleted # +rocksdb_system_rows_inserted # +rocksdb_system_rows_read # +rocksdb_system_rows_updated # +rocksdb_memtable_total # +rocksdb_memtable_unflushed # +rocksdb_queries_point # +rocksdb_queries_range # +rocksdb_covered_secondary_key_lookups # +rocksdb_block_cache_add # +rocksdb_block_cache_add_failures # +rocksdb_block_cache_bytes_read # +rocksdb_block_cache_bytes_write # +rocksdb_block_cache_compressed_hit # +rocksdb_block_cache_compressed_miss # +rocksdb_block_cache_data_add # +rocksdb_block_cache_data_bytes_insert # +rocksdb_block_cache_data_hit # +rocksdb_block_cache_data_miss # +rocksdb_block_cache_filter_add # +rocksdb_block_cache_filter_bytes_evict # +rocksdb_block_cache_filter_bytes_insert # +rocksdb_block_cache_filter_hit # +rocksdb_block_cache_filter_miss # +rocksdb_block_cache_hit # +rocksdb_block_cache_index_add # +rocksdb_block_cache_index_bytes_evict # +rocksdb_block_cache_index_bytes_insert # +rocksdb_block_cache_index_hit # +rocksdb_block_cache_index_miss # +rocksdb_block_cache_miss # +rocksdb_bloom_filter_full_positive # +rocksdb_bloom_filter_full_true_positive # +rocksdb_bloom_filter_prefix_checked # +rocksdb_bloom_filter_prefix_useful # +rocksdb_bloom_filter_useful # +rocksdb_bytes_read # +rocksdb_bytes_written # +rocksdb_compact_read_bytes # +rocksdb_compact_write_bytes # +rocksdb_compaction_key_drop_new # +rocksdb_compaction_key_drop_obsolete # +rocksdb_compaction_key_drop_user # +rocksdb_flush_write_bytes # +rocksdb_get_hit_l0 # +rocksdb_get_hit_l1 # +rocksdb_get_hit_l2_and_up # +rocksdb_get_updates_since_calls # +rocksdb_iter_bytes_read # +rocksdb_memtable_hit # +rocksdb_memtable_miss # +rocksdb_no_file_closes # +rocksdb_no_file_errors # +rocksdb_no_file_opens # +rocksdb_num_iterators # +rocksdb_number_block_not_compressed # +rocksdb_number_db_next # +rocksdb_number_db_next_found # +rocksdb_number_db_prev # +rocksdb_number_db_prev_found # +rocksdb_number_db_seek # +rocksdb_number_db_seek_found # +rocksdb_number_deletes_filtered # +rocksdb_number_keys_read # +rocksdb_number_keys_updated # +rocksdb_number_keys_written # +rocksdb_number_merge_failures # +rocksdb_number_multiget_bytes_read # +rocksdb_number_multiget_get # +rocksdb_number_multiget_keys_read # +rocksdb_number_reseeks_iteration # +rocksdb_number_sst_entry_delete # +rocksdb_number_sst_entry_merge # +rocksdb_number_sst_entry_other # +rocksdb_number_sst_entry_put # +rocksdb_number_sst_entry_singledelete # +rocksdb_number_superversion_acquires # +rocksdb_number_superversion_cleanups # +rocksdb_number_superversion_releases # +rocksdb_row_lock_deadlocks # +rocksdb_row_lock_wait_timeouts # +rocksdb_snapshot_conflict_errors # +rocksdb_stall_l0_file_count_limit_slowdowns # +rocksdb_stall_locked_l0_file_count_limit_slowdowns # +rocksdb_stall_l0_file_count_limit_stops # +rocksdb_stall_locked_l0_file_count_limit_stops # +rocksdb_stall_pending_compaction_limit_stops # +rocksdb_stall_pending_compaction_limit_slowdowns # +rocksdb_stall_memtable_limit_stops # +rocksdb_stall_memtable_limit_slowdowns # +rocksdb_stall_total_stops # +rocksdb_stall_total_slowdowns # +rocksdb_stall_micros # +rocksdb_wal_bytes # +rocksdb_wal_group_syncs # +rocksdb_wal_synced # +rocksdb_write_other # +rocksdb_write_self # +rocksdb_write_timedout # +rocksdb_write_wal # +select VARIABLE_NAME from performance_schema.global_status where VARIABLE_NAME LIKE 'rocksdb%'; +VARIABLE_NAME +rocksdb_rows_deleted +rocksdb_rows_inserted +rocksdb_rows_read +rocksdb_rows_updated +rocksdb_rows_expired +rocksdb_rows_filtered +rocksdb_system_rows_deleted +rocksdb_system_rows_inserted +rocksdb_system_rows_read +rocksdb_system_rows_updated +rocksdb_memtable_total +rocksdb_memtable_unflushed +rocksdb_queries_point +rocksdb_queries_range +rocksdb_covered_secondary_key_lookups +rocksdb_block_cache_add +rocksdb_block_cache_add_failures +rocksdb_block_cache_bytes_read +rocksdb_block_cache_bytes_write +rocksdb_block_cache_compressed_hit +rocksdb_block_cache_compressed_miss +rocksdb_block_cache_data_add +rocksdb_block_cache_data_bytes_insert +rocksdb_block_cache_data_hit +rocksdb_block_cache_data_miss +rocksdb_block_cache_filter_add +rocksdb_block_cache_filter_bytes_evict +rocksdb_block_cache_filter_bytes_insert +rocksdb_block_cache_filter_hit +rocksdb_block_cache_filter_miss +rocksdb_block_cache_hit +rocksdb_block_cache_index_add +rocksdb_block_cache_index_bytes_evict +rocksdb_block_cache_index_bytes_insert +rocksdb_block_cache_index_hit +rocksdb_block_cache_index_miss +rocksdb_block_cache_miss +rocksdb_bloom_filter_full_positive +rocksdb_bloom_filter_full_true_positive +rocksdb_bloom_filter_prefix_checked +rocksdb_bloom_filter_prefix_useful +rocksdb_bloom_filter_useful +rocksdb_bytes_read +rocksdb_bytes_written +rocksdb_compact_read_bytes +rocksdb_compact_write_bytes +rocksdb_compaction_key_drop_new +rocksdb_compaction_key_drop_obsolete +rocksdb_compaction_key_drop_user +rocksdb_flush_write_bytes +rocksdb_get_hit_l0 +rocksdb_get_hit_l1 +rocksdb_get_hit_l2_and_up +rocksdb_get_updates_since_calls +rocksdb_iter_bytes_read +rocksdb_memtable_hit +rocksdb_memtable_miss +rocksdb_no_file_closes +rocksdb_no_file_errors +rocksdb_no_file_opens +rocksdb_num_iterators +rocksdb_number_block_not_compressed +rocksdb_number_db_next +rocksdb_number_db_next_found +rocksdb_number_db_prev +rocksdb_number_db_prev_found +rocksdb_number_db_seek +rocksdb_number_db_seek_found +rocksdb_number_deletes_filtered +rocksdb_number_keys_read +rocksdb_number_keys_updated +rocksdb_number_keys_written +rocksdb_number_merge_failures +rocksdb_number_multiget_bytes_read +rocksdb_number_multiget_get +rocksdb_number_multiget_keys_read +rocksdb_number_reseeks_iteration +rocksdb_number_sst_entry_delete +rocksdb_number_sst_entry_merge +rocksdb_number_sst_entry_other +rocksdb_number_sst_entry_put +rocksdb_number_sst_entry_singledelete +rocksdb_number_superversion_acquires +rocksdb_number_superversion_cleanups +rocksdb_number_superversion_releases +rocksdb_row_lock_deadlocks +rocksdb_row_lock_wait_timeouts +rocksdb_snapshot_conflict_errors +rocksdb_stall_l0_file_count_limit_slowdowns +rocksdb_stall_locked_l0_file_count_limit_slowdowns +rocksdb_stall_l0_file_count_limit_stops +rocksdb_stall_locked_l0_file_count_limit_stops +rocksdb_stall_pending_compaction_limit_stops +rocksdb_stall_pending_compaction_limit_slowdowns +rocksdb_stall_memtable_limit_stops +rocksdb_stall_memtable_limit_slowdowns +rocksdb_stall_total_stops +rocksdb_stall_total_slowdowns +rocksdb_stall_micros +rocksdb_wal_bytes +rocksdb_wal_group_syncs +rocksdb_wal_synced +rocksdb_write_other +rocksdb_write_self +rocksdb_write_timedout +rocksdb_write_wal +# RocksDB-SE's status variables are global internally +# but they are shown as both session and global, like InnoDB's status vars. +select VARIABLE_NAME from performance_schema.session_status where VARIABLE_NAME LIKE 'rocksdb%'; +VARIABLE_NAME +rocksdb_rows_deleted +rocksdb_rows_inserted +rocksdb_rows_read +rocksdb_rows_updated +rocksdb_rows_expired +rocksdb_rows_filtered +rocksdb_system_rows_deleted +rocksdb_system_rows_inserted +rocksdb_system_rows_read +rocksdb_system_rows_updated +rocksdb_memtable_total +rocksdb_memtable_unflushed +rocksdb_queries_point +rocksdb_queries_range +rocksdb_covered_secondary_key_lookups +rocksdb_block_cache_add +rocksdb_block_cache_add_failures +rocksdb_block_cache_bytes_read +rocksdb_block_cache_bytes_write +rocksdb_block_cache_compressed_hit +rocksdb_block_cache_compressed_miss +rocksdb_block_cache_data_add +rocksdb_block_cache_data_bytes_insert +rocksdb_block_cache_data_hit +rocksdb_block_cache_data_miss +rocksdb_block_cache_filter_add +rocksdb_block_cache_filter_bytes_evict +rocksdb_block_cache_filter_bytes_insert +rocksdb_block_cache_filter_hit +rocksdb_block_cache_filter_miss +rocksdb_block_cache_hit +rocksdb_block_cache_index_add +rocksdb_block_cache_index_bytes_evict +rocksdb_block_cache_index_bytes_insert +rocksdb_block_cache_index_hit +rocksdb_block_cache_index_miss +rocksdb_block_cache_miss +rocksdb_bloom_filter_full_positive +rocksdb_bloom_filter_full_true_positive +rocksdb_bloom_filter_prefix_checked +rocksdb_bloom_filter_prefix_useful +rocksdb_bloom_filter_useful +rocksdb_bytes_read +rocksdb_bytes_written +rocksdb_compact_read_bytes +rocksdb_compact_write_bytes +rocksdb_compaction_key_drop_new +rocksdb_compaction_key_drop_obsolete +rocksdb_compaction_key_drop_user +rocksdb_flush_write_bytes +rocksdb_get_hit_l0 +rocksdb_get_hit_l1 +rocksdb_get_hit_l2_and_up +rocksdb_get_updates_since_calls +rocksdb_iter_bytes_read +rocksdb_memtable_hit +rocksdb_memtable_miss +rocksdb_no_file_closes +rocksdb_no_file_errors +rocksdb_no_file_opens +rocksdb_num_iterators +rocksdb_number_block_not_compressed +rocksdb_number_db_next +rocksdb_number_db_next_found +rocksdb_number_db_prev +rocksdb_number_db_prev_found +rocksdb_number_db_seek +rocksdb_number_db_seek_found +rocksdb_number_deletes_filtered +rocksdb_number_keys_read +rocksdb_number_keys_updated +rocksdb_number_keys_written +rocksdb_number_merge_failures +rocksdb_number_multiget_bytes_read +rocksdb_number_multiget_get +rocksdb_number_multiget_keys_read +rocksdb_number_reseeks_iteration +rocksdb_number_sst_entry_delete +rocksdb_number_sst_entry_merge +rocksdb_number_sst_entry_other +rocksdb_number_sst_entry_put +rocksdb_number_sst_entry_singledelete +rocksdb_number_superversion_acquires +rocksdb_number_superversion_cleanups +rocksdb_number_superversion_releases +rocksdb_row_lock_deadlocks +rocksdb_row_lock_wait_timeouts +rocksdb_snapshot_conflict_errors +rocksdb_stall_l0_file_count_limit_slowdowns +rocksdb_stall_locked_l0_file_count_limit_slowdowns +rocksdb_stall_l0_file_count_limit_stops +rocksdb_stall_locked_l0_file_count_limit_stops +rocksdb_stall_pending_compaction_limit_stops +rocksdb_stall_pending_compaction_limit_slowdowns +rocksdb_stall_memtable_limit_stops +rocksdb_stall_memtable_limit_slowdowns +rocksdb_stall_total_stops +rocksdb_stall_total_slowdowns +rocksdb_stall_micros +rocksdb_wal_bytes +rocksdb_wal_group_syncs +rocksdb_wal_synced +rocksdb_write_other +rocksdb_write_self +rocksdb_write_timedout +rocksdb_write_wal +# +# Fix issue #9: HA_ERR_INTERNAL_ERROR when running linkbench +# +create table t0 (a int) engine=myisam; +insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9); +create table t1 ( +pk int primary key, +col1 varchar(255), +key(col1) +) engine=rocksdb; +insert into t1 select a, repeat('123456789ABCDEF-', 15) from t0; +select * from t1 where pk=3; +pk col1 +3 123456789ABCDEF-123456789ABCDEF-123456789ABCDEF-123456789ABCDEF-123456789ABCDEF-123456789ABCDEF-123456789ABCDEF-123456789ABCDEF-123456789ABCDEF-123456789ABCDEF-123456789ABCDEF-123456789ABCDEF-123456789ABCDEF-123456789ABCDEF-123456789ABCDEF- +drop table t0, t1; +# +# Fix issue #10: Segfault in Rdb_key_def::get_primary_key_tuple +# +create table t0 (a int) engine=myisam; +insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9); +CREATE TABLE t1 ( +id1 bigint(20) unsigned NOT NULL DEFAULT '0', +id2 bigint(20) unsigned NOT NULL DEFAULT '0', +link_type bigint(20) unsigned NOT NULL DEFAULT '0', +visibility tinyint(3) NOT NULL DEFAULT '0', +data varchar(255) NOT NULL DEFAULT '', +time bigint(20) unsigned NOT NULL DEFAULT '0', +version int(11) unsigned NOT NULL DEFAULT '0', +PRIMARY KEY (link_type,id1,id2) +) engine=rocksdb; +insert into t1 select a,a,a,1,a,a,a from t0; +alter table t1 add index id1_type (id1,link_type,visibility,time,version,data); +select * from t1 where id1 = 3; +id1 id2 link_type visibility data time version +3 3 3 1 3 3 3 +drop table t0,t1; +# +# Test column families +# +create table t1 ( +pk int primary key, +col1 int, +col2 int, +key(col1) comment 'cf3', +key(col2) comment 'cf4' +) engine=rocksdb; +insert into t1 values (1,1,1), (2,2,2), (3,3,3), (4,4,4), (5,5,5); +explain +select * from t1 where col1=2; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 NULL ref col1 col1 5 const # 100.00 NULL +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`pk` AS `pk`,`test`.`t1`.`col1` AS `col1`,`test`.`t1`.`col2` AS `col2` from `test`.`t1` where (`test`.`t1`.`col1` = 2) +select * from t1 where col1=2; +pk col1 col2 +2 2 2 +explain +select * from t1 where col2=3; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 NULL ref col2 col2 5 const # 100.00 NULL +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`pk` AS `pk`,`test`.`t1`.`col1` AS `col1`,`test`.`t1`.`col2` AS `col2` from `test`.`t1` where (`test`.`t1`.`col2` = 3) +select * from t1 where col2=3; +pk col1 col2 +3 3 3 +select * from t1 where pk=4; +pk col1 col2 +4 4 4 +drop table t1; +# +# Try primary key in a non-default CF: +# +create table t1 ( +pk int, +col1 int, +col2 int, +key(col1) comment 'cf3', +key(col2) comment 'cf4', +primary key (pk) comment 'cf5' +) engine=rocksdb; +insert into t1 values (1,1,1), (2,2,2), (3,3,3), (4,4,4), (5,5,5); +explain +select * from t1 where col1=2; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 NULL ref col1 col1 5 const # 100.00 NULL +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`pk` AS `pk`,`test`.`t1`.`col1` AS `col1`,`test`.`t1`.`col2` AS `col2` from `test`.`t1` where (`test`.`t1`.`col1` = 2) +select * from t1 where col1=2; +pk col1 col2 +2 2 2 +select * from t1 where pk=4; +pk col1 col2 +4 4 4 +drop table t1; +# +# Issue #15: SIGSEGV from reading in blob data +# +CREATE TABLE t1 ( +id int not null, +blob_col text, +PRIMARY KEY (id) +) ENGINE=ROCKSDB CHARSET=latin1; +INSERT INTO t1 SET id=123, blob_col=repeat('z',64000) ON DUPLICATE KEY UPDATE blob_col=VALUES(blob_col); +INSERT INTO t1 SET id=123, blob_col='' ON DUPLICATE KEY UPDATE blob_col=VALUES(blob_col); +DROP TABLE t1; +# +# Issue #17: Automatic per-index column families +# (Now deprecated) +# +create table t1 ( +id int not null, +key1 int, +PRIMARY KEY (id), +index (key1) comment '$per_index_cf' +) engine=rocksdb; +ERROR HY000: The per-index column family option has been deprecated. +# +# Issue #22: SELECT ... FOR UPDATE takes a long time +# +create table t0 (a int) engine=myisam; +insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9); +create table t1 ( +id1 int, +id2 int, +value1 int, +value2 int, +primary key(id1, id2) COMMENT 'new_column_family', +key(id2) +) engine=rocksdb default charset=latin1 collate=latin1_bin; +insert into t1 select A.a, B.a, 31, 1234 from t0 A, t0 B; +explain +select * from t1 where id1=30 and value1=30 for update; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 NULL ref PRIMARY PRIMARY 4 const # 10.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`id1` AS `id1`,`test`.`t1`.`id2` AS `id2`,`test`.`t1`.`value1` AS `value1`,`test`.`t1`.`value2` AS `value2` from `test`.`t1` where ((`test`.`t1`.`value1` = 30) and (`test`.`t1`.`id1` = 30)) +set @var1=(select variable_value +from performance_schema.global_status +where variable_name='rocksdb_number_keys_read'); +select * from t1 where id1=3 and value1=3 for update; +id1 id2 value1 value2 +set @var2=(select variable_value +from performance_schema.global_status +where variable_name='rocksdb_number_keys_read'); +# The following must return true (before the fix, the difference was 70): +select if((@var2 - @var1) < 30, 1, @var2-@var1); +if((@var2 - @var1) < 30, 1, @var2-@var1) +1 +drop table t0,t1; +# +# Issue #33: SELECT ... FROM rocksdb_table ORDER BY primary_key uses sorting +# +create table t1 (id int primary key, value int) engine=rocksdb; +insert into t1 values (1,1),(2,2),(3,3); +# The following must not use 'Using filesort': +explain select * from t1 ORDER BY id; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 NULL index NULL PRIMARY 4 NULL # 100.00 NULL +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`id` AS `id`,`test`.`t1`.`value` AS `value` from `test`.`t1` order by `test`.`t1`.`id` +drop table t1; +# +# Issue #26: Index-only scans for DATETIME and TIMESTAMP +# +create table t0 (a int) engine=myisam; +insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9); +# Try a DATETIME column: +create table t1 ( +pk int auto_increment primary key, +kp1 datetime, +kp2 int, +col1 int, +key(kp1, kp2) +) engine=rocksdb; +insert into t1 (kp1,kp2) +select date_add('2015-01-01 12:34:56', interval a day), a from t0; +select * from t1; +pk kp1 kp2 col1 +1 2015-01-01 12:34:56 0 NULL +2 2015-01-02 12:34:56 1 NULL +3 2015-01-03 12:34:56 2 NULL +4 2015-01-04 12:34:56 3 NULL +5 2015-01-05 12:34:56 4 NULL +6 2015-01-06 12:34:56 5 NULL +7 2015-01-07 12:34:56 6 NULL +8 2015-01-08 12:34:56 7 NULL +9 2015-01-09 12:34:56 8 NULL +10 2015-01-10 12:34:56 9 NULL +# This must show 'Using index' +explain +select kp1,kp2 from t1 force index (kp1) +where kp1 between '2015-01-01 00:00:00' and '2015-01-05 23:59:59'; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 NULL range kp1 kp1 6 NULL # 100.00 Using where; Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`kp1` AS `kp1`,`test`.`t1`.`kp2` AS `kp2` from `test`.`t1` FORCE INDEX (`kp1`) where (`test`.`t1`.`kp1` between '2015-01-01 00:00:00' and '2015-01-05 23:59:59') +select kp1,kp2 from t1 force index (kp1) +where kp1 between '2015-01-01 00:00:00' and '2015-01-05 23:59:59'; +kp1 kp2 +2015-01-01 12:34:56 0 +2015-01-02 12:34:56 1 +2015-01-03 12:34:56 2 +2015-01-04 12:34:56 3 +2015-01-05 12:34:56 4 +# Now, the same with NOT NULL column +create table t2 ( +pk int auto_increment primary key, +kp1 datetime not null, +kp2 int, +col1 int, +key(kp1, kp2) +) engine=rocksdb; +set @orig_tx_iso=@@session.transaction_isolation; +set session transaction_isolation='READ-COMMITTED'; +insert into t2 select * from t1; +set session transaction_isolation=@orig_tx_iso; +# This must show 'Using index' +explain +select kp1,kp2 from t2 force index (kp1) +where kp1 between '2015-01-01 00:00:00' and '2015-01-05 23:59:59'; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t2 NULL range kp1 kp1 5 NULL # 100.00 Using where; Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`t2`.`kp1` AS `kp1`,`test`.`t2`.`kp2` AS `kp2` from `test`.`t2` FORCE INDEX (`kp1`) where (`test`.`t2`.`kp1` between '2015-01-01 00:00:00' and '2015-01-05 23:59:59') +select kp1,kp2 from t2 force index (kp1) +where kp1 between '2015-01-01 00:00:00' and '2015-01-05 23:59:59'; +kp1 kp2 +2015-01-01 12:34:56 0 +2015-01-02 12:34:56 1 +2015-01-03 12:34:56 2 +2015-01-04 12:34:56 3 +2015-01-05 12:34:56 4 +drop table t1,t2; +# Try a DATE column: +create table t1 ( +pk int auto_increment primary key, +kp1 date, +kp2 int, +col1 int, +key(kp1, kp2) +) engine=rocksdb; +insert into t1 (kp1,kp2) +select date_add('2015-01-01', interval a day), a from t0; +select * from t1; +pk kp1 kp2 col1 +1 2015-01-01 0 NULL +2 2015-01-02 1 NULL +3 2015-01-03 2 NULL +4 2015-01-04 3 NULL +5 2015-01-05 4 NULL +6 2015-01-06 5 NULL +7 2015-01-07 6 NULL +8 2015-01-08 7 NULL +9 2015-01-09 8 NULL +10 2015-01-10 9 NULL +# This must show 'Using index' +explain +select kp1,kp2 from t1 force index (kp1) +where kp1 between '2015-01-01' and '2015-01-05'; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 NULL range kp1 kp1 4 NULL # 100.00 Using where; Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`kp1` AS `kp1`,`test`.`t1`.`kp2` AS `kp2` from `test`.`t1` FORCE INDEX (`kp1`) where (`test`.`t1`.`kp1` between '2015-01-01' and '2015-01-05') +select kp1,kp2 from t1 force index (kp1) +where kp1 between '2015-01-01' and '2015-01-05'; +kp1 kp2 +2015-01-01 0 +2015-01-02 1 +2015-01-03 2 +2015-01-04 3 +2015-01-05 4 +# Now, the same with NOT NULL column +create table t2 ( +pk int auto_increment primary key, +kp1 date not null, +kp2 int, +col1 int, +key(kp1, kp2) +) engine=rocksdb; +set @orig_tx_iso=@@session.transaction_isolation; +set session transaction_isolation='READ-COMMITTED'; +insert into t2 select * from t1; +set session transaction_isolation=@orig_tx_iso; +# This must show 'Using index' +explain +select kp1,kp2 from t2 force index (kp1) +where kp1 between '2015-01-01 00:00:00' and '2015-01-05 23:59:59'; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t2 NULL range kp1 kp1 3 NULL # 100.00 Using where; Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`t2`.`kp1` AS `kp1`,`test`.`t2`.`kp2` AS `kp2` from `test`.`t2` FORCE INDEX (`kp1`) where (`test`.`t2`.`kp1` between '2015-01-01 00:00:00' and '2015-01-05 23:59:59') +select kp1,kp2 from t2 force index (kp1) +where kp1 between '2015-01-01 00:00:00' and '2015-01-05 23:59:59'; +kp1 kp2 +2015-01-01 0 +2015-01-02 1 +2015-01-03 2 +2015-01-04 3 +2015-01-05 4 +drop table t1,t2; +# +# Try a TIMESTAMP column: +# +create table t1 ( +pk int auto_increment primary key, +kp1 timestamp, +kp2 int, +col1 int, +key(kp1, kp2) +) engine=rocksdb; +insert into t1 (kp1,kp2) +select date_add('2015-01-01 12:34:56', interval a day), a from t0; +select * from t1; +pk kp1 kp2 col1 +1 2015-01-01 12:34:56 0 NULL +2 2015-01-02 12:34:56 1 NULL +3 2015-01-03 12:34:56 2 NULL +4 2015-01-04 12:34:56 3 NULL +5 2015-01-05 12:34:56 4 NULL +6 2015-01-06 12:34:56 5 NULL +7 2015-01-07 12:34:56 6 NULL +8 2015-01-08 12:34:56 7 NULL +9 2015-01-09 12:34:56 8 NULL +10 2015-01-10 12:34:56 9 NULL +# This must show 'Using index' +explain +select kp1,kp2 from t1 force index (kp1) +where kp1 between '2015-01-01 00:00:00' and '2015-01-05 23:59:59'; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 NULL range kp1 kp1 5 NULL # 100.00 Using where; Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`kp1` AS `kp1`,`test`.`t1`.`kp2` AS `kp2` from `test`.`t1` FORCE INDEX (`kp1`) where (`test`.`t1`.`kp1` between '2015-01-01 00:00:00' and '2015-01-05 23:59:59') +select kp1,kp2 from t1 force index (kp1) +where kp1 between '2015-01-01 00:00:00' and '2015-01-05 23:59:59'; +kp1 kp2 +2015-01-01 12:34:56 0 +2015-01-02 12:34:56 1 +2015-01-03 12:34:56 2 +2015-01-04 12:34:56 3 +2015-01-05 12:34:56 4 +# Now, the same with NOT NULL column +create table t2 ( +pk int auto_increment primary key, +kp1 timestamp not null, +kp2 int, +col1 int, +key(kp1, kp2) +) engine=rocksdb; +set @orig_tx_iso=@@session.transaction_isolation; +set session transaction_isolation='READ-COMMITTED'; +insert into t2 select * from t1; +set session transaction_isolation=@orig_tx_iso; +# This must show 'Using index' +explain +select kp1,kp2 from t2 force index (kp1) +where kp1 between '2015-01-01 00:00:00' and '2015-01-05 23:59:59'; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t2 NULL range kp1 kp1 4 NULL # 100.00 Using where; Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`t2`.`kp1` AS `kp1`,`test`.`t2`.`kp2` AS `kp2` from `test`.`t2` FORCE INDEX (`kp1`) where (`test`.`t2`.`kp1` between '2015-01-01 00:00:00' and '2015-01-05 23:59:59') +select kp1,kp2 from t2 force index (kp1) +where kp1 between '2015-01-01 00:00:00' and '2015-01-05 23:59:59'; +kp1 kp2 +2015-01-01 12:34:56 0 +2015-01-02 12:34:56 1 +2015-01-03 12:34:56 2 +2015-01-04 12:34:56 3 +2015-01-05 12:34:56 4 +drop table t1,t2; +# +# Try a TIME column: +# +create table t1 ( +pk int auto_increment primary key, +kp1 time, +kp2 int, +col1 int, +key(kp1, kp2) +) engine=rocksdb; +insert into t1 (kp1,kp2) +select date_add('2015-01-01 09:00:00', interval a minute), a from t0; +select * from t1; +pk kp1 kp2 col1 +1 09:00:00 0 NULL +2 09:01:00 1 NULL +3 09:02:00 2 NULL +4 09:03:00 3 NULL +5 09:04:00 4 NULL +6 09:05:00 5 NULL +7 09:06:00 6 NULL +8 09:07:00 7 NULL +9 09:08:00 8 NULL +10 09:09:00 9 NULL +# This must show 'Using index' +explain +select kp1,kp2 from t1 force index (kp1) +where kp1 between '09:01:00' and '09:05:00'; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 NULL range kp1 kp1 4 NULL # 100.00 Using where; Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`kp1` AS `kp1`,`test`.`t1`.`kp2` AS `kp2` from `test`.`t1` FORCE INDEX (`kp1`) where (`test`.`t1`.`kp1` between '09:01:00' and '09:05:00') +select kp1,kp2 from t1 force index (kp1) +where kp1 between '09:01:00' and '09:05:00'; +kp1 kp2 +09:01:00 1 +09:02:00 2 +09:03:00 3 +09:04:00 4 +09:05:00 5 +# Now, the same with NOT NULL column +create table t2 ( +pk int auto_increment primary key, +kp1 time not null, +kp2 int, +col1 int, +key(kp1, kp2) +) engine=rocksdb; +set @orig_tx_iso=@@session.transaction_isolation; +set session transaction_isolation='READ-COMMITTED'; +insert into t2 select * from t1; +set session transaction_isolation=@orig_tx_iso; +# This must show 'Using index' +explain +select kp1,kp2 from t2 force index (kp1) +where kp1 between '09:01:00' and '09:05:00'; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t2 NULL range kp1 kp1 3 NULL # 100.00 Using where; Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`t2`.`kp1` AS `kp1`,`test`.`t2`.`kp2` AS `kp2` from `test`.`t2` FORCE INDEX (`kp1`) where (`test`.`t2`.`kp1` between '09:01:00' and '09:05:00') +select kp1,kp2 from t2 force index (kp1) +where kp1 between '09:01:00' and '09:05:00'; +kp1 kp2 +09:01:00 1 +09:02:00 2 +09:03:00 3 +09:04:00 4 +09:05:00 5 +drop table t1,t2; +# +# Try a YEAR column: +# +create table t1 ( +pk int auto_increment primary key, +kp1 year, +kp2 int, +col1 int, +key(kp1, kp2) +) engine=rocksdb; +insert into t1 (kp1,kp2) select 2015+a, a from t0; +select * from t1; +pk kp1 kp2 col1 +1 2015 0 NULL +2 2016 1 NULL +3 2017 2 NULL +4 2018 3 NULL +5 2019 4 NULL +6 2020 5 NULL +7 2021 6 NULL +8 2022 7 NULL +9 2023 8 NULL +10 2024 9 NULL +# This must show 'Using index' +explain +select kp1,kp2 from t1 force index (kp1) +where kp1 between '2016' and '2020'; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 NULL range kp1 kp1 2 NULL # 100.00 Using where; Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`kp1` AS `kp1`,`test`.`t1`.`kp2` AS `kp2` from `test`.`t1` FORCE INDEX (`kp1`) where (`test`.`t1`.`kp1` between 2016 and 2020) +select kp1,kp2 from t1 force index (kp1) +where kp1 between '2016' and '2020'; +kp1 kp2 +2016 1 +2017 2 +2018 3 +2019 4 +2020 5 +# Now, the same with NOT NULL column +create table t2 ( +pk int auto_increment primary key, +kp1 year not null, +kp2 int, +col1 int, +key(kp1, kp2) +) engine=rocksdb; +set @orig_tx_iso=@@session.transaction_isolation; +set session transaction_isolation='READ-COMMITTED'; +insert into t2 select * from t1; +set session transaction_isolation=@orig_tx_iso; +# This must show 'Using index' +explain +select kp1,kp2 from t2 force index (kp1) +where kp1 between '2016' and '2020'; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t2 NULL range kp1 kp1 1 NULL # 100.00 Using where; Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`t2`.`kp1` AS `kp1`,`test`.`t2`.`kp2` AS `kp2` from `test`.`t2` FORCE INDEX (`kp1`) where (`test`.`t2`.`kp1` between 2016 and 2020) +select kp1,kp2 from t2 force index (kp1) +where kp1 between '2016' and '2020'; +kp1 kp2 +2016 1 +2017 2 +2018 3 +2019 4 +2020 5 +drop table t1,t2; +# +# Issue #57: Release row locks on statement errors +# +create table t1 (id int primary key) engine=rocksdb; +insert into t1 values (1), (2), (3); +begin; +insert into t1 values (4), (5), (6); +insert into t1 values (7), (8), (2), (9); +ERROR 23000: Duplicate entry '2' for key 'PRIMARY' +select * from t1; +id +1 +2 +3 +4 +5 +6 +begin; +select * from t1 where id=4 for update; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +select * from t1 where id=7 for update; +id +select * from t1 where id=9 for update; +id +drop table t1; +#Index on blob column +SET @old_mode = @@sql_mode; +SET sql_mode = 'strict_all_tables'; +Warnings: +Warning 3135 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release. +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +create table t1 (a int, b text, c varchar(400), Primary Key(a), Key(c, b(255))) engine=rocksdb; +drop table t1; +set @orig_rocksdb_large_prefix=@@global.rocksdb_large_prefix; +set @@global.rocksdb_large_prefix=1; +create table t1 (a int, b text, c varchar(400), Primary Key(a), Key(b(1255))) engine=rocksdb; +set @@global.rocksdb_large_prefix=@orig_rocksdb_large_prefix; +insert into t1 values (1, '1abcde', '1abcde'), (2, '2abcde', '2abcde'), (3, '3abcde', '3abcde'); +select * from t1; +a b c +1 1abcde 1abcde +2 2abcde 2abcde +3 3abcde 3abcde +explain select * from t1 where b like '1%'; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 NULL range b b 1258 NULL # 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c` from `test`.`t1` where (`test`.`t1`.`b` like '1%') +explain select b, a from t1 where b like '1%'; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 NULL range b b 1258 NULL # 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`b` AS `b`,`test`.`t1`.`a` AS `a` from `test`.`t1` where (`test`.`t1`.`b` like '1%') +update t1 set b= '12345' where b = '2abcde'; +select * from t1; +a b c +1 1abcde 1abcde +2 12345 2abcde +3 3abcde 3abcde +drop table t1; +create table t1 (a int, b text, c varchar(400), Primary Key(a), Key(b(2255))) engine=rocksdb; +ERROR 42000: Specified key was too long; max key length is 767 bytes +SET sql_mode = @old_mode; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +drop table t0; +# +# Fix assertion failure (attempt to overrun the key buffer) for prefix indexes +# +create table t1 ( +pk int primary key, +col1 varchar(100), +key (col1(10)) +) engine=rocksdb; +insert into t1 values (1, repeat('0123456789', 9)); +drop table t1; +# +# Issue #76: Assertion `buf == table->record[0]' fails in virtual int ha_rocksdb::delete_row(const uchar*) +# +CREATE TABLE t1 (pk INT PRIMARY KEY, f1 INT) ENGINE=RocksDB; +CREATE TABLE t2 (pk INT PRIMARY KEY, f1 INT) ENGINE=RocksDB; +CREATE TRIGGER tr AFTER DELETE ON t1 FOR EACH ROW DELETE FROM t2 WHERE pk = old.pk; +INSERT INTO t1 VALUES (1,1); +REPLACE INTO t1 VALUES (1,2); +SELECT * FROM t1; +pk f1 +1 2 +DROP TABLE t1, t2; +# +# Issue #99: UPDATE for table with VARCHAR pk gives "Can't find record" error +# +create table t1(a int primary key) engine=rocksdb; +insert into t1 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9); +create table t2 ( +a varchar(32) primary key, +col1 int +) engine=rocksdb; +set @orig_tx_iso=@@session.transaction_isolation; +set session transaction_isolation='READ-COMMITTED'; +insert into t2 +select concat('v-', 100 + A.a*100 + B.a), 12345 from t1 A, t1 B; +update t2 set a=concat('x-', a) where a between 'v-1002' and 'v-1004'; +set session transaction_isolation=@orig_tx_iso; +drop table t1,t2; +# +# Issue #131: Assertion `v->cfd_->internal_comparator().Compare(start, end) <= 0' failed +# +CREATE TABLE t2(c1 INTEGER UNSIGNED NOT NULL, c2 INTEGER NULL, c3 TINYINT, c4 SMALLINT , c5 MEDIUMINT, c6 INT, c7 BIGINT, PRIMARY KEY(c1,c6)) ENGINE=RocksDB; +INSERT INTO t2 VALUES (1,1,1,1,1,1,1); +SELECT * FROM t2 WHERE c1 > 4294967295 ORDER BY c1,c6; +c1 c2 c3 c4 c5 c6 c7 +EXPLAIN SELECT * FROM t2 WHERE c1 > 4294967295 ORDER BY c1,c6; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t2 NULL range PRIMARY PRIMARY 4 NULL 50 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t2`.`c1` AS `c1`,`test`.`t2`.`c2` AS `c2`,`test`.`t2`.`c3` AS `c3`,`test`.`t2`.`c4` AS `c4`,`test`.`t2`.`c5` AS `c5`,`test`.`t2`.`c6` AS `c6`,`test`.`t2`.`c7` AS `c7` from `test`.`t2` where (`test`.`t2`.`c1` > 4294967295) order by `test`.`t2`.`c1`,`test`.`t2`.`c6` +drop table t2; +# +# Issue #135: register transaction was not being called for statement +# +CREATE DATABASE test_db; +CREATE TABLE test_db.t1(c1 INT PRIMARY KEY) ENGINE=ROCKSDB; +INSERT INTO test_db.t1(c1) VALUES(0), (1), (2), (3); +LOCK TABLES test_db.t1 READ; +SET AUTOCOMMIT=0; +SELECT c1 FROM test_db.t1 WHERE c1=2; +c1 +2 +START TRANSACTION WITH CONSISTENT SNAPSHOT, READ ONLY; +DROP DATABASE test_db; +COMMIT; +SET AUTOCOMMIT=1; +# +# Issue #143: Split rocksdb_bulk_load option into two +# +CREATE TABLE t1 (id int primary key, value int) engine=RocksDB; +SET unique_checks=0; +INSERT INTO t1 VALUES(1, 1); +INSERT INTO t1 VALUES(1, 2); +INSERT INTO t1 VALUES(1, 3); +SELECT * FROM t1; +id value +1 3 +REPLACE INTO t1 VALUES(4, 4); +ERROR HY000: When unique checking is disabled in MyRocks, INSERT,UPDATE,LOAD statements with clauses that update or replace the key (i.e. INSERT ON DUPLICATE KEY UPDATE, REPLACE) are not allowed. Query: REPLACE INTO t1 VALUES(4, 4) +INSERT INTO t1 VALUES(5, 5) ON DUPLICATE KEY UPDATE value=value+1; +ERROR HY000: When unique checking is disabled in MyRocks, INSERT,UPDATE,LOAD statements with clauses that update or replace the key (i.e. INSERT ON DUPLICATE KEY UPDATE, REPLACE) are not allowed. Query: INSERT INTO t1 VALUES(5, 5) ON DUPLICATE KEY UPDATE value=value+1 +TRUNCATE TABLE t1; +SET @save_rocksdb_bulk_load_size= @@rocksdb_bulk_load_size; +SET unique_checks=1; +SET rocksdb_commit_in_the_middle=1; +SET rocksdb_bulk_load_size=10; +BEGIN; +INSERT INTO t1 (id) VALUES(1),(2),(3),(4),(5),(6),(7),(8),(9),(10), +(11),(12),(13),(14),(15),(16),(17),(18),(19); +ROLLBACK; +SELECT * FROM t1; +id value +1 NULL +2 NULL +3 NULL +4 NULL +5 NULL +6 NULL +7 NULL +8 NULL +9 NULL +10 NULL +INSERT INTO t1 (id) VALUES (11),(12),(13),(14),(15); +set @orig_tx_iso=@@session.transaction_isolation; +set session transaction_isolation='READ-COMMITTED'; +BEGIN; +UPDATE t1 SET value=100; +ROLLBACK; +SELECT * FROM t1; +id value +1 100 +2 100 +3 100 +4 100 +5 100 +6 100 +7 100 +8 100 +9 100 +10 100 +11 NULL +12 NULL +13 NULL +14 NULL +15 NULL +BEGIN; +DELETE FROM t1; +ROLLBACK; +SELECT * FROM t1; +id value +11 NULL +12 NULL +13 NULL +14 NULL +15 NULL +set session transaction_isolation=@orig_tx_iso; +SET rocksdb_commit_in_the_middle=0; +SET rocksdb_bulk_load_size= @save_rocksdb_bulk_load_size; +DROP TABLE t1; +# +# Issue #185 Assertion `BaseValid()' failed in void rocksdb::BaseDeltaIterator::Advance() +# +CREATE TABLE t2(id INT NOT NULL PRIMARY KEY, data INT) Engine=MEMORY; +INSERT INTO t2 VALUES (100,NULL),(150,"long varchar"),(200,"varchar"),(250,"long long long varchar"); +Warnings: +Warning 1366 Incorrect integer value: 'long varchar' for column 'data' at row 2 +Warning 1366 Incorrect integer value: 'varchar' for column 'data' at row 3 +Warning 1366 Incorrect integer value: 'long long long varchar' for column 'data' at row 4 +CREATE TABLE t1 (a INT NOT NULL, b INT NOT NULL, PRIMARY KEY(a,b)) ENGINE=ROCKSDB; +INSERT INTO t1 VALUES (1,1); +SELECT a FROM t1, t2 WHERE a=b AND (b NOT IN (SELECT a FROM t1 WHERE a > 4)); +a +1 +1 +1 +1 +DROP TABLE t1, t2; +# +# Issue #189 ha_rocksdb::load_auto_incr_value() creates implicit snapshot and doesn't release +# +create table r1 (id int auto_increment primary key, value int) engine=rocksdb; +insert into r1 (id) values (null), (null), (null), (null), (null); +create table r2 like r1; +show create table r2; +Table Create Table +r2 CREATE TABLE `r2` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `value` int(11) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=ROCKSDB DEFAULT CHARSET=latin1 +begin; +insert into r1 values (10, 1); +commit; +begin; +select * from r1; +id value +1 NULL +2 NULL +3 NULL +4 NULL +5 NULL +10 1 +commit; +drop table r1, r2; +create table r1 (id int auto_increment, value int, index i(id)) engine=rocksdb; +insert into r1 (id) values (null), (null), (null), (null), (null); +create table r2 like r1; +show create table r2; +Table Create Table +r2 CREATE TABLE `r2` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `value` int(11) DEFAULT NULL, + KEY `i` (`id`) +) ENGINE=ROCKSDB DEFAULT CHARSET=latin1 +begin; +insert into r1 values (10, 1); +commit; +begin; +select * from r1; +id value +1 NULL +2 NULL +3 NULL +4 NULL +5 NULL +10 1 +commit; +drop table r1, r2; +# +# Issue#211 Crash on LOCK TABLES + START TRANSACTION WITH CONSISTENT SNAPSHOT +# +CREATE TABLE t1(c1 INT) ENGINE=ROCKSDB; +lock TABLE t1 read local; +SELECT 1 FROM t1 GROUP BY TRIM(LEADING RAND()FROM''); +1 +set AUTOCOMMIT=0; +start transaction with consistent snapshot; +SELECT * FROM t1; +c1 +COMMIT; +UNLOCK TABLES; +DROP TABLE t1; +set AUTOCOMMIT=1; +# +# Issue#213 Crash on LOCK TABLES + partitions +# +CREATE TABLE t1(a INT,b INT,KEY (b)) engine=rocksdb PARTITION BY HASH(a) PARTITIONS 2; +INSERT INTO t1(a)VALUES (20010101101010.999949); +ERROR 22003: Out of range value for column 'a' at row 1 +set @orig_sql_mode=@@session.sql_mode; +set session sql_mode=""; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +INSERT INTO t1(a)VALUES (20010101101010.999949); +Warnings: +Warning 1264 Out of range value for column 'a' at row 1 +set session sql_mode=@orig_sql_mode; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +lock tables t1 write,t1 as t0 write,t1 as t2 write; +set @orig_tx_iso=@@session.transaction_isolation; +set session transaction_isolation='READ-COMMITTED'; +SELECT a FROM t1 ORDER BY a; +a +2147483647 +set session transaction_isolation=@orig_tx_iso; +truncate t1; +INSERT INTO t1 VALUES(X'042000200020',X'042000200020'),(X'200400200020',X'200400200020'); +ERROR 22003: Out of range value for column 'a' at row 1 +set @orig_sql_mode=@@session.sql_mode; +set session sql_mode=""; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +INSERT INTO t1 VALUES(X'042000200020',X'042000200020'),(X'200400200020',X'200400200020'); +Warnings: +Warning 1264 Out of range value for column 'a' at row 1 +Warning 1264 Out of range value for column 'b' at row 1 +Warning 1264 Out of range value for column 'a' at row 2 +Warning 1264 Out of range value for column 'b' at row 2 +set session sql_mode=@orig_sql_mode; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +UNLOCK TABLES; +DROP TABLE t1; +# +# Issue#250: MyRocks/Innodb different output from query with order by on table with index and decimal type +# (the test was changed to use VARCHAR, because DECIMAL now supports index-only, and this issue +# needs a datype that doesn't support index-inly) +# +CREATE TABLE t1( +c1 varchar(10) character set utf8 collate utf8_general_ci NOT NULL, +c2 varchar(10) character set utf8 collate utf8_general_ci, +c3 INT, +INDEX idx(c1,c2) +) ENGINE=ROCKSDB; +INSERT INTO t1 VALUES ('c1-val1','c2-val1',5); +INSERT INTO t1 VALUES ('c1-val2','c2-val3',6); +INSERT INTO t1 VALUES ('c1-val3','c2-val3',7); +SELECT * FROM t1 force index(idx) WHERE c1 <> 'c1-val2' ORDER BY c1 DESC; +c1 c2 c3 +c1-val3 c2-val3 7 +c1-val1 c2-val1 5 +explain SELECT * FROM t1 force index(idx) WHERE c1 <> '1' ORDER BY c1 DESC; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 NULL range idx idx 32 NULL # 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`c1` AS `c1`,`test`.`t1`.`c2` AS `c2`,`test`.`t1`.`c3` AS `c3` from `test`.`t1` FORCE INDEX (`idx`) where (`test`.`t1`.`c1` <> '1') order by `test`.`t1`.`c1` desc +drop table t1; +# +# Issue#267: MyRocks issue with no matching min/max row and count(*) +# +CREATE TABLE t1(c1 INT UNSIGNED, c2 INT SIGNED, INDEX idx2(c2)) ENGINE=ROCKSDB; +INSERT INTO t1 VALUES(1,null); +INSERT INTO t1 VALUES(2,null); +SELECT count(*) as total_rows, min(c2) as min_value FROM t1; +total_rows min_value +2 NULL +DROP TABLE t1; +# +# Issue#263: MyRocks auto_increment skips values if you insert a negative value +# +CREATE TABLE t1(a INT AUTO_INCREMENT KEY) ENGINE=ROCKSDB; +INSERT INTO t1 VALUES(0),(-1),(0); +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 ROCKSDB 10 Fixed 1000 # # # # # 3 NULL NULL NULL latin1_swedish_ci NULL +SELECT * FROM t1; +a +-1 +1 +2 +DROP TABLE t1; +CREATE TABLE t1(a INT AUTO_INCREMENT KEY) ENGINE=ROCKSDB; +INSERT INTO t1 VALUES(0),(10),(0); +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 ROCKSDB 10 Fixed 1000 # # # # # 12 NULL NULL NULL latin1_swedish_ci NULL +SELECT * FROM t1; +a +1 +10 +11 +DROP TABLE t1; +# +# Issue #411: Setting rocksdb_commit_in_the_middle commits transaction +# without releasing iterator +# +CREATE TABLE t1 (id1 bigint(20), +id2 bigint(20), +id3 bigint(20), +PRIMARY KEY (id1, id2, id3)) +ENGINE=ROCKSDB +DEFAULT CHARSET=latin1; +CREATE TABLE t2 (id1 bigint(20), +id2 bigint(20), +PRIMARY KEY (id1, id2)) +ENGINE=ROCKSDB +DEFAULT CHARSET=latin1; +set rocksdb_commit_in_the_middle=1; +SET @save_rocksdb_bulk_load_size= @@rocksdb_bulk_load_size; +set rocksdb_bulk_load_size = 100; +set @orig_tx_iso=@@session.transaction_isolation; +set session transaction_isolation='READ-COMMITTED'; +DELETE t2, t1 FROM t2 LEFT JOIN t1 ON t2.id2 = t1.id2 AND t2.id1 = t1.id1 WHERE t2.id1 = 0; +set session transaction_isolation=@orig_tx_iso; +SET rocksdb_bulk_load_size= @save_rocksdb_bulk_load_size; +SET rocksdb_commit_in_the_middle=0; +DROP TABLE t1, t2; +SET GLOBAL ROCKSDB_PAUSE_BACKGROUND_WORK = @ORIG_PAUSE_BACKGROUND_WORK; +# +# Issue #728: Assertion `covers_key(b)' failed in int +# myrocks::Rdb_key_def::cmp_full_keys(const rocks db::Slice&, +# const rocksdb::Slice&) +# +CREATE TABLE t2(c1 TINYINT SIGNED KEY,c2 TINYINT UNSIGNED,c3 INT) ENGINE=ROCKSDB; +INSERT INTO t2(c1)VALUES(0); +SELECT * FROM t2 WHERE c1<=127 ORDER BY c1 DESC; +c1 c2 c3 +0 NULL NULL +DROP TABLE t2; diff --git a/mysql-test/suite/rocksdb/r-native-partitioning/rocksdb_cf_per_partition.result b/mysql-test/suite/rocksdb/r-native-partitioning/rocksdb_cf_per_partition.result new file mode 100644 index 000000000000..740cbcd3bc89 --- /dev/null +++ b/mysql-test/suite/rocksdb/r-native-partitioning/rocksdb_cf_per_partition.result @@ -0,0 +1,439 @@ +CREATE TABLE t1 ( +c1 INT, +c2 INT, +name VARCHAR(25) NOT NULL, +event DATE, +PRIMARY KEY (`c1`, `c2`) COMMENT 'testcomment' +) ENGINE=ROCKSDB +PARTITION BY LIST(c1) ( +PARTITION custom_p0 VALUES IN (1, 4, 7), +PARTITION custom_p1 VALUES IN (2, 5, 8), +PARTITION custom_p2 VALUES IN (3, 6, 9) +); +SELECT DISTINCT(cf_name) FROM information_schema.rocksdb_cfstats WHERE cf_name='testcomment'; +cf_name +DROP TABLE t1; +CREATE TABLE t1 ( +c1 INT, +c2 INT, +name VARCHAR(25) NOT NULL, +event DATE, +PRIMARY KEY (`c1`, `c2`) COMMENT 'rev:testrevcomment' +) ENGINE=ROCKSDB +PARTITION BY LIST(c1) ( +PARTITION custom_p0 VALUES IN (1, 4, 7), +PARTITION custom_p1 VALUES IN (2, 5, 8), +PARTITION custom_p2 VALUES IN (3, 6, 9) +); +SELECT DISTINCT(cf_name) FROM information_schema.rocksdb_cfstats WHERE cf_name='rev:testrevcomment'; +cf_name +DROP TABLE t1; +CREATE TABLE t1 ( +c1 INT, +c2 INT, +name VARCHAR(25) NOT NULL, +event DATE, +PRIMARY KEY (`c1`, `c2`) COMMENT 'custom_p0_cfname=foo;custom_p1_cfname=my_custom_cf;custom_p2_cfname=baz' +) ENGINE=ROCKSDB +PARTITION BY LIST(c1) ( +PARTITION custom_p0 VALUES IN (1, 4, 7), +PARTITION custom_p1 VALUES IN (2, 5, 8), +PARTITION custom_p2 VALUES IN (3, 6, 9) +); +set @@global.rocksdb_compact_cf = 'foo'; +set @@global.rocksdb_compact_cf = 'my_custom_cf'; +set @@global.rocksdb_compact_cf = 'baz'; +SELECT DISTINCT(cf_name) FROM information_schema.rocksdb_cfstats WHERE cf_name='foo'; +cf_name +foo +SELECT DISTINCT(cf_name) FROM information_schema.rocksdb_cfstats WHERE cf_name='my_custom_cf'; +cf_name +my_custom_cf +SELECT DISTINCT(cf_name) FROM information_schema.rocksdb_cfstats WHERE cf_name='baz'; +cf_name +baz +DROP TABLE t1; +CREATE TABLE t1 ( +c1 INT, +c2 INT, +name VARCHAR(25) NOT NULL, +event DATE, +PRIMARY KEY (`c1`, `c2`) COMMENT 'custom_p0_cfname=t1-p0;custom_p1_cfname=rev:bar;custom_p2_cfname=t1-p2' +) ENGINE=ROCKSDB +PARTITION BY LIST(c1) ( +PARTITION custom_p0 VALUES IN (1, 4, 7), +PARTITION custom_p1 VALUES IN (2, 5, 8), +PARTITION custom_p2 VALUES IN (3, 6, 9) +); +set @@global.rocksdb_compact_cf = 't1-p0'; +set @@global.rocksdb_compact_cf = 'rev:bar'; +set @@global.rocksdb_compact_cf = 't1-p2'; +SELECT DISTINCT(cf_name) FROM information_schema.rocksdb_cfstats WHERE cf_name='t1-p0'; +cf_name +t1-p0 +SELECT DISTINCT(cf_name) FROM information_schema.rocksdb_cfstats WHERE cf_name='rev:bar'; +cf_name +rev:bar +SELECT DISTINCT(cf_name) FROM information_schema.rocksdb_cfstats WHERE cf_name='t1-p2'; +cf_name +t1-p2 +DROP TABLE t1; +CREATE TABLE t1 ( +c1 INT, +c2 INT, +name VARCHAR(25) NOT NULL, +event DATE, +PRIMARY KEY (`c1`, `c2`) COMMENT 'custom_p0_cfname=cf-zero;custom_p1_cfname=cf-one;custom_p2_cfname=cf-zero' +) ENGINE=ROCKSDB +PARTITION BY LIST(c1) ( +PARTITION custom_p0 VALUES IN (1, 4, 7), +PARTITION custom_p1 VALUES IN (2, 5, 8), +PARTITION custom_p2 VALUES IN (3, 6, 9), +PARTITION custom_p3 VALUES IN (10, 20, 30) +); +set @@global.rocksdb_compact_cf = 'cf-zero'; +set @@global.rocksdb_compact_cf = 'cf-one'; +SELECT DISTINCT(cf_name) FROM information_schema.rocksdb_cfstats WHERE cf_name='cf-zero'; +cf_name +cf-zero +SELECT DISTINCT(cf_name) FROM information_schema.rocksdb_cfstats WHERE cf_name='cf-one'; +cf_name +cf-one +DROP TABLE t1; +CREATE TABLE t1 ( +c1 INT, +c2 INT, +name VARCHAR(25) NOT NULL, +event DATE, +PRIMARY KEY (`c1`, `c2`) COMMENT 'custom_p0_cfname=foo;custom_p1_cfname=bar;custom_p2_cfname=baz' +) ENGINE=ROCKSDB +PARTITION BY LIST(c1) ( +PARTITION custom_p0 VALUES IN (1, 4, 7), +PARTITION custom_p1 VALUES IN (2, 5, 8), +PARTITION custom_p2 VALUES IN (3, 6, 9) +); +INSERT INTO t1 VALUES (1, 1, "one", null); +INSERT INTO t1 VALUES (2, 2, "two", null); +INSERT INTO t1 VALUES (3, 3, "three", null); +INSERT INTO t1 VALUES (5, 5, "five", null); +INSERT INTO t1 VALUES (9, 9, "nine", null); +SELECT * FROM t1; +c1 c2 name event +1 1 one NULL +2 2 two NULL +5 5 five NULL +3 3 three NULL +9 9 nine NULL +ALTER TABLE t1 DROP PRIMARY KEY; +SELECT * FROM t1; +c1 c2 name event +1 1 one NULL +2 2 two NULL +5 5 five NULL +3 3 three NULL +9 9 nine NULL +set @@global.rocksdb_compact_cf = 'foo'; +set @@global.rocksdb_compact_cf = 'bar'; +set @@global.rocksdb_compact_cf = 'baz'; +DROP TABLE t1; +CREATE TABLE t1 ( +c1 INT, +c2 INT, +name VARCHAR(25) NOT NULL, +event DATE, +PRIMARY KEY (`c1`, `c2`) COMMENT 'custom_p0_cfname=foo;custom_p1_cfname=bar;custom_p2_cfname=baz' +) ENGINE=ROCKSDB +PARTITION BY LIST(c1) ( +PARTITION custom_p0 VALUES IN (1, 4, 7), +PARTITION custom_p1 VALUES IN (2, 5, 8), +PARTITION custom_p2 VALUES IN (3, 6, 9) +); +INSERT INTO t1 VALUES (1, 1, "one", null); +INSERT INTO t1 VALUES (2, 2, "two", null); +INSERT INTO t1 VALUES (3, 3, "three", null); +INSERT INTO t1 VALUES (5, 5, "five", null); +INSERT INTO t1 VALUES (9, 9, "nine", null); +ALTER TABLE t1 DROP PRIMARY KEY; +ALTER TABLE t1 ADD PRIMARY KEY (`c1`, `c2`) COMMENT 'custom_p0_cfname=p0_cf;custom_p1_cfname=p1_cf'; +set @@global.rocksdb_compact_cf = 'p0_cf'; +set @@global.rocksdb_compact_cf = 'p1_cf'; +SELECT DISTINCT(cf_name) FROM information_schema.rocksdb_cfstats WHERE cf_name='p0_cf'; +cf_name +p0_cf +SELECT DISTINCT(cf_name) FROM information_schema.rocksdb_cfstats WHERE cf_name='p1_cf'; +cf_name +p1_cf +DROP TABLE t1; +CREATE TABLE t1 ( +c1 INT, +c2 INT, +name VARCHAR(25) NOT NULL, +event DATE, +PRIMARY KEY (`c1`, `c2`) COMMENT 'custom_p0_cfname=foo;custom_p1_cfname=bar;custom_p2_cfname=baz' +) ENGINE=ROCKSDB +PARTITION BY LIST(c1) ( +PARTITION custom_p0 VALUES IN (1, 4, 7), +PARTITION custom_p1 VALUES IN (2, 5, 8), +PARTITION custom_p2 VALUES IN (3, 6, 9) +); +INSERT INTO t1 VALUES (1, 1, "one", null); +INSERT INTO t1 VALUES (2, 2, "two", null); +INSERT INTO t1 VALUES (3, 3, "three", null); +INSERT INTO t1 VALUES (5, 5, "five", null); +INSERT INTO t1 VALUES (9, 9, "nine", null); +ALTER TABLE t1 PARTITION BY LIST(c1) ( +PARTITION custom_p3 VALUES IN (1, 4, 7), +PARTITION custom_p4 VALUES IN (2, 5, 8, 3, 6, 9) +); +ALTER TABLE t1 DROP PRIMARY KEY; +ALTER TABLE t1 ADD PRIMARY KEY (`c1`, `c2`) COMMENT 'custom_p3_cfname=p3_cf;custom_p4_cfname=p4_cf'; +set @@global.rocksdb_compact_cf = 'p3_cf'; +set @@global.rocksdb_compact_cf = 'p4_cf'; +SELECT DISTINCT(cf_name) FROM information_schema.rocksdb_cfstats WHERE cf_name='p3_cf'; +cf_name +p3_cf +SELECT DISTINCT(cf_name) FROM information_schema.rocksdb_cfstats WHERE cf_name='p4_cf'; +cf_name +p4_cf +DROP TABLE t1; +CREATE TABLE t1 ( +c1 INT, +c2 INT, +name VARCHAR(25) NOT NULL, +event DATE, +PRIMARY KEY (`c1`, `c2`) COMMENT 'custom_p0_cfname=foo;custom_p1_cfname=;' +) ENGINE=ROCKSDB +PARTITION BY LIST(c1) ( +PARTITION custom_p0 VALUES IN (1, 4, 7), +PARTITION custom_p1 VALUES IN (2, 5, 8), +PARTITION custom_p2 VALUES IN (3, 6, 9) +); +DROP TABLE t1; +CREATE TABLE `t2` ( +`col1` bigint(20) NOT NULL, +`col2` varbinary(64) NOT NULL, +`col3` varbinary(256) NOT NULL, +`col4` bigint(20) NOT NULL, +`col5` mediumblob NOT NULL, +PRIMARY KEY (`col1`,`col2`,`col3`) +) ENGINE=ROCKSDB DEFAULT CHARSET=latin1 +PARTITION BY LIST COLUMNS (`col2`) ( +PARTITION custom_p0 VALUES IN (0x12345), +PARTITION custom_p1 VALUES IN (0x23456), +PARTITION custom_p2 VALUES IN (0x34567), +PARTITION custom_p3 VALUES IN (0x45678), +PARTITION custom_p4 VALUES IN (0x56789), +PARTITION custom_p5 VALUES IN (0x6789A), +PARTITION custom_p6 VALUES IN (0x789AB), +PARTITION custom_p7 VALUES IN (0x89ABC) +); +DROP TABLE t2; +CREATE TABLE `t2` ( +`col1` bigint(20) NOT NULL, +`col2` varbinary(64) NOT NULL, +`col3` varbinary(256) NOT NULL, +`col4` bigint(20) NOT NULL, +`col5` mediumblob NOT NULL, +PRIMARY KEY (`col1`,`col2`,`col3`) COMMENT 'custom_p0_cfname=my_cf0;custom_p1_cfname=my_cf1' +) ENGINE=ROCKSDB DEFAULT CHARSET=latin1 +PARTITION BY LIST COLUMNS (`col2`) ( +PARTITION custom_p0 VALUES IN (0x12345), +PARTITION custom_p1 VALUES IN (0x23456), +PARTITION custom_p2 VALUES IN (0x34567), +PARTITION custom_p3 VALUES IN (0x45678), +PARTITION custom_p4 VALUES IN (0x56789), +PARTITION custom_p5 VALUES IN (0x6789A), +PARTITION custom_p6 VALUES IN (0x789AB), +PARTITION custom_p7 VALUES IN (0x89ABC) +); +set @@global.rocksdb_compact_cf = 'my_cf0'; +set @@global.rocksdb_compact_cf = 'my_cf1'; +SELECT DISTINCT(cf_name) FROM information_schema.rocksdb_cfstats WHERE cf_name='my_cf0'; +cf_name +my_cf0 +SELECT DISTINCT(cf_name) FROM information_schema.rocksdb_cfstats WHERE cf_name='my_cf1'; +cf_name +my_cf1 +INSERT INTO t2 VALUES (100, 0x12345, 0x1, 1, 0x2); +INSERT INTO t2 VALUES (200, 0x12345, 0x1, 1, 0x2); +INSERT INTO t2 VALUES (300, 0x12345, 0x1, 1, 0x2); +INSERT INTO t2 VALUES (100, 0x23456, 0x2, 1, 0x3); +INSERT INTO t2 VALUES (100, 0x34567, 0x4, 1, 0x5); +INSERT INTO t2 VALUES (400, 0x89ABC, 0x4, 1, 0x5); +SELECT col1, HEX(col2), HEX(col3), col4, HEX(col5) FROM t2; +col1 HEX(col2) HEX(col3) col4 HEX(col5) +100 012345 01 1 02 +200 012345 01 1 02 +300 012345 01 1 02 +100 023456 02 1 03 +100 034567 04 1 05 +400 089ABC 04 1 05 +EXPLAIN PARTITIONS SELECT HEX(col2) FROM t2 where col2 = 0x12345; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t2 custom_p0 index NULL PRIMARY 332 NULL # # Using where; Using index +Warnings: +Warning 1681 'PARTITIONS' is deprecated and will be removed in a future release. +Note 1003 /* select#1 */ select hex(`test`.`t2`.`col2`) AS `HEX(col2)` from `test`.`t2` where (`test`.`t2`.`col2` = 0x012345) +EXPLAIN PARTITIONS SELECT HEX(col2) FROM t2 where col2 = 0x23456; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t2 custom_p1 index NULL PRIMARY 332 NULL # # Using where; Using index +Warnings: +Warning 1681 'PARTITIONS' is deprecated and will be removed in a future release. +Note 1003 /* select#1 */ select hex(`test`.`t2`.`col2`) AS `HEX(col2)` from `test`.`t2` where (`test`.`t2`.`col2` = 0x023456) +ALTER TABLE t2 DROP PRIMARY KEY; +ALTER TABLE t2 ADD PRIMARY KEY (`col1`,`col2`,`col3`) COMMENT 'custom_p0_cfname=new_cf0;custom_p1_cfname=new_cf1'; +set @@global.rocksdb_compact_cf = 'new_cf0'; +set @@global.rocksdb_compact_cf = 'new_cf1'; +SELECT DISTINCT(cf_name) FROM information_schema.rocksdb_cfstats WHERE cf_name='new_cf0'; +cf_name +new_cf0 +SELECT DISTINCT(cf_name) FROM information_schema.rocksdb_cfstats WHERE cf_name='new_cf1'; +cf_name +new_cf1 +INSERT INTO t2 VALUES (500, 0x12345, 0x5, 1, 0x2); +INSERT INTO t2 VALUES (700, 0x23456, 0x7, 1, 0x3); +EXPLAIN PARTITIONS SELECT HEX(col2) FROM t2 where col2 = 0x12345; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t2 custom_p0 index NULL PRIMARY 332 NULL # # Using where; Using index +Warnings: +Warning 1681 'PARTITIONS' is deprecated and will be removed in a future release. +Note 1003 /* select#1 */ select hex(`test`.`t2`.`col2`) AS `HEX(col2)` from `test`.`t2` where (`test`.`t2`.`col2` = 0x012345) +EXPLAIN PARTITIONS SELECT HEX(col2) FROM t2 where col2 = 0x23456; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t2 custom_p1 index NULL PRIMARY 332 NULL # # Using where; Using index +Warnings: +Warning 1681 'PARTITIONS' is deprecated and will be removed in a future release. +Note 1003 /* select#1 */ select hex(`test`.`t2`.`col2`) AS `HEX(col2)` from `test`.`t2` where (`test`.`t2`.`col2` = 0x023456) +SELECT col1, HEX(col2), HEX(col3), col4, HEX(col5) FROM t2; +col1 HEX(col2) HEX(col3) col4 HEX(col5) +100 012345 01 1 02 +200 012345 01 1 02 +300 012345 01 1 02 +500 012345 05 1 02 +100 023456 02 1 03 +700 023456 07 1 03 +100 034567 04 1 05 +400 089ABC 04 1 05 +DROP TABLE t2; +CREATE TABLE `t2` ( +`col1` bigint(20) NOT NULL, +`col2` varbinary(64) NOT NULL, +`col3` varbinary(256) NOT NULL, +`col4` bigint(20) NOT NULL, +`col5` mediumblob NOT NULL, +PRIMARY KEY (`col1`,`col2`,`col3`) COMMENT 'custom_p0_cfname=test_cf0;custom_p1_cfname=test_cf1', +KEY (`col2`, `col4`) COMMENT 'custom_p5_cfname=test_cf5' +) ENGINE=ROCKSDB DEFAULT CHARSET=latin1 +PARTITION BY LIST COLUMNS (`col2`) ( +PARTITION custom_p0 VALUES IN (0x12345), +PARTITION custom_p1 VALUES IN (0x23456), +PARTITION custom_p2 VALUES IN (0x34567), +PARTITION custom_p3 VALUES IN (0x45678), +PARTITION custom_p4 VALUES IN (0x56789), +PARTITION custom_p5 VALUES IN (0x6789A), +PARTITION custom_p6 VALUES IN (0x789AB), +PARTITION custom_p7 VALUES IN (0x89ABC) +); +SELECT DISTINCT(cf_name) FROM information_schema.rocksdb_cfstats WHERE cf_name='test_cf0'; +cf_name +test_cf0 +SELECT DISTINCT(cf_name) FROM information_schema.rocksdb_cfstats WHERE cf_name='test_cf1'; +cf_name +test_cf1 +SELECT DISTINCT(cf_name) FROM information_schema.rocksdb_cfstats WHERE cf_name='test_cf5'; +cf_name +test_cf5 +INSERT INTO t2 VALUES (100, 0x12345, 0x1, 1, 0x2); +INSERT INTO t2 VALUES (200, 0x12345, 0x1, 1, 0x2); +INSERT INTO t2 VALUES (300, 0x12345, 0x1, 1, 0x2); +INSERT INTO t2 VALUES (100, 0x23456, 0x2, 1, 0x3); +INSERT INTO t2 VALUES (100, 0x34567, 0x4, 1, 0x5); +INSERT INTO t2 VALUES (400, 0x89ABC, 0x4, 1, 0x5); +INSERT INTO t2 VALUES (500, 0x6789A, 0x5, 1, 0x7); +EXPLAIN PARTITIONS SELECT * FROM t2 WHERE col2 = 0x6789A AND col4 = 1; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t2 custom_p5 ref col2 col2 74 const,const # # Using index condition +Warnings: +Warning 1681 'PARTITIONS' is deprecated and will be removed in a future release. +Note 1003 /* select#1 */ select `test`.`t2`.`col1` AS `col1`,`test`.`t2`.`col2` AS `col2`,`test`.`t2`.`col3` AS `col3`,`test`.`t2`.`col4` AS `col4`,`test`.`t2`.`col5` AS `col5` from `test`.`t2` where ((`test`.`t2`.`col4` = 1) and (`test`.`t2`.`col2` = 0x06789a)) +ALTER TABLE t2 DROP KEY `col2`; +ALTER TABLE t2 ADD KEY (`col3`, `col4`) COMMENT 'custom_p5_cfname=another_cf_for_p5'; +SELECT DISTINCT(cf_name) FROM information_schema.rocksdb_cfstats WHERE cf_name='another_cf_for_p5'; +cf_name +another_cf_for_p5 +ANALYZE TABLE t2; +Table Op Msg_type Msg_text +test.t2 analyze status OK +EXPLAIN PARTITIONS SELECT * FROM t2 WHERE col3 = 0x4 AND col2 = 0x34567; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t2 custom_p2 ref col3 col3 258 const # # Using index condition +Warnings: +Warning 1681 'PARTITIONS' is deprecated and will be removed in a future release. +Note 1003 /* select#1 */ select `test`.`t2`.`col1` AS `col1`,`test`.`t2`.`col2` AS `col2`,`test`.`t2`.`col3` AS `col3`,`test`.`t2`.`col4` AS `col4`,`test`.`t2`.`col5` AS `col5` from `test`.`t2` where ((`test`.`t2`.`col2` = 0x034567) and (`test`.`t2`.`col3` = 0x04)) +DROP TABLE t2; +CREATE TABLE `t2` ( +`col1` bigint(20) NOT NULL, +`col2` varbinary(64) NOT NULL, +`col3` varbinary(256) NOT NULL, +`col4` bigint(20) NOT NULL, +`col5` mediumblob NOT NULL, +PRIMARY KEY (`col1`,`col2`,`col3`) COMMENT 'custom_p0_cfname=test_cf0;custom_p1_cfname=test_cf1', +UNIQUE KEY (`col2`, `col4`) COMMENT 'custom_p5_cfname=unique_test_cf5' +) ENGINE=ROCKSDB DEFAULT CHARSET=latin1 +PARTITION BY LIST COLUMNS (`col2`) ( +PARTITION custom_p0 VALUES IN (0x12345), +PARTITION custom_p1 VALUES IN (0x23456), +PARTITION custom_p2 VALUES IN (0x34567), +PARTITION custom_p3 VALUES IN (0x45678), +PARTITION custom_p4 VALUES IN (0x56789), +PARTITION custom_p5 VALUES IN (0x6789A), +PARTITION custom_p6 VALUES IN (0x789AB), +PARTITION custom_p7 VALUES IN (0x89ABC) +); +SELECT DISTINCT(cf_name) FROM information_schema.rocksdb_cfstats WHERE cf_name='unique_test_cf5'; +cf_name +unique_test_cf5 +INSERT INTO t2 VALUES (100, 0x12345, 0x1, 1, 0x2); +INSERT INTO t2 VALUES (200, 0x12345, 0x1, 1, 0x2); +ERROR 23000: Duplicate entry '\x01#E-1' for key 'col2' +INSERT INTO t2 VALUES (300, 0x12345, 0x1, 1, 0x2); +ERROR 23000: Duplicate entry '\x01#E-1' for key 'col2' +INSERT INTO t2 VALUES (100, 0x23456, 0x2, 1, 0x3); +INSERT INTO t2 VALUES (100, 0x34567, 0x4, 1, 0x5); +INSERT INTO t2 VALUES (400, 0x89ABC, 0x4, 1, 0x5); +INSERT INTO t2 VALUES (500, 0x6789A, 0x5, 1, 0x7); +DROP TABLE t2; +CREATE TABLE t1 ( +`a` int, +PRIMARY KEY (a) COMMENT "sharedcf" +) ENGINE=ROCKSDB; +SELECT DISTINCT(cf_name) FROM information_schema.rocksdb_cfstats WHERE cf_name='sharedcf'; +cf_name +sharedcf +CREATE TABLE t2 ( +`a` INT, +`b` DATE, +`c` VARCHAR(42), +PRIMARY KEY (`a`) COMMENT "custom_p0_cfname=sharedcf;custom_p2_cfname=notsharedcf" +) ENGINE=ROCKSDB +PARTITION BY LIST(`a`) ( +PARTITION custom_p0 VALUES IN (1, 4, 7), +PARTITION custom_p1 VALUES IN (2, 5, 8), +PARTITION custom_p2 VALUES IN (3, 6, 9) +); +SELECT DISTINCT(cf_name) FROM information_schema.rocksdb_cfstats WHERE cf_name='notsharedcf'; +cf_name +notsharedcf +DROP TABLE t1; +DROP TABLE t2; +CREATE TABLE t1 ( +a INT NOT NULL, +PRIMARY KEY (a) COMMENT 'p1_cfname=foo;' +) ENGINE=ROCKSDB +PARTITION BY LIST COLUMNS(a) +(PARTITION p1 VALUES IN (1) ENGINE = ROCKSDB); +INSERT INTO t1 values (1); +TRUNCATE TABLE t1; +SELECT * FROM t1; +a +DROP TABLE t1; diff --git a/mysql-test/suite/rocksdb/r-native-partitioning/rocksdb_parts.result b/mysql-test/suite/rocksdb/r-native-partitioning/rocksdb_parts.result new file mode 100644 index 000000000000..8c7751bb495a --- /dev/null +++ b/mysql-test/suite/rocksdb/r-native-partitioning/rocksdb_parts.result @@ -0,0 +1,124 @@ +# Tests for MyRocks + partitioning +# +# MyRocks Issue #70: Server crashes in Rdb_key_def::get_primary_key_tuple +# +CREATE TABLE t1 (pk INT PRIMARY KEY, f1 INT, f2 INT, KEY(f2)) ENGINE=ROCKSDB +PARTITION BY HASH(pk) PARTITIONS 2; +INSERT INTO t1 VALUES (1, 6, NULL), (2, NULL, 1); +CREATE TABLE t2 (pk INT PRIMARY KEY, f1 INT) ENGINE=ROCKSDB; +INSERT INTO t2 VALUES (1, 1), (2, 1); +SELECT f1 FROM t1 WHERE f2 = ( SELECT f1 FROM t2 WHERE pk = 2 ); +f1 +NULL +drop table t1,t2; +# +# Issue#105: key_info[secondary_key].actual_key_parts does not include primary key on partitioned tables +# +CREATE TABLE t1 ( +id INT PRIMARY KEY, +a set ('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') CHARACTER SET utf8, +b set ('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') CHARACTER SET utf8 default null, +c set ('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') CHARACTER SET utf8 not null, +INDEX (a), +INDEX (b), +INDEX (c) +) ENGINE=ROCKSDB PARTITION BY key (id) partitions 2; +INSERT INTO t1 (id, b, c) VALUES (28, 3, 3); +UPDATE t1 SET id=8 WHERE c < 8 LIMIT 1; +check table t1; +Table Op Msg_type Msg_text +test.t1 check status OK +drop table t1; +# +# Issue #105, another testcase +# +create table t1 ( +pk int primary key, +col1 int, +col2 int, +key (col1) comment 'rev:cf_issue105' +) engine=rocksdb partition by hash(pk) partitions 2; +insert into t1 values (1,10,10); +insert into t1 values (2,10,10); +insert into t1 values (11,20,20); +insert into t1 values (12,20,20); +explain select * from t1 force index(col1) where col1=10; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0,p1 ref col1 col1 5 const # 100.00 NULL +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`pk` AS `pk`,`test`.`t1`.`col1` AS `col1`,`test`.`t1`.`col2` AS `col2` from `test`.`t1` FORCE INDEX (`col1`) where (`test`.`t1`.`col1` = 10) +select * from t1 force index(col1) where col1=10; +pk col1 col2 +2 10 10 +1 10 10 +select * from t1 use index () where col1=10; +pk col1 col2 +2 10 10 +1 10 10 +drop table t1; +# +# Issue #108: Index-only scans do not work for partitioned tables and extended keys +# +create table t1 ( +pk int primary key, +col1 int, +col2 int, +key (col1) +) engine=rocksdb partition by hash(pk) partitions 2; +insert into t1 values (1,10,10); +insert into t1 values (2,10,10); +insert into t1 values (11,20,20); +insert into t1 values (12,20,20); +# The following must use "Using index" +explain select pk from t1 force index(col1) where col1=10; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0,p1 ref col1 col1 5 const # 100.00 Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`pk` AS `pk` from `test`.`t1` FORCE INDEX (`col1`) where (`test`.`t1`.`col1` = 10) +drop table t1; +# +# Issue #214: subqueries cause crash +# +create TABLE t1(a int,b int,c int,primary key(a,b)) engine=rocksdb +partition by list (b*a) (partition x1 values in (1), +partition x2 values in (3,11,5,7), +partition x3 values in (16,8,5+19,70-43)); +create table t2(b binary(2)) engine=rocksdb; +set session optimizer_switch=5; +insert into t1(a,b) values(1,7); +select a from t1 where a in (select a from t1 where a in (select b from t2)); +a +drop table t1, t2; +# +# Issue #260: altering name to invalid value leaves table unaccessible +# +CREATE TABLE t1 (c1 INT NOT NULL, c2 CHAR(5)) ENGINE=ROCKSDB PARTITION BY HASH(c1) PARTITIONS 4; +INSERT INTO t1 VALUES(1,'a'); +RENAME TABLE t1 TO db3.t3; +ERROR HY000: Error on rename of './test/t1' to './db3/t3' (errno: -1 - Unknown error -1) +SELECT * FROM t1; +c1 c2 +1 a +SHOW TABLES; +Tables_in_test +t1 +RENAME TABLE t1 TO test.t3; +SELECT * FROM t3; +c1 c2 +1 a +SHOW TABLES; +Tables_in_test +t3 +CREATE DATABASE db3; +USE test; +RENAME TABLE t3 to db3.t2; +USE db3; +SELECT * FROM t2; +c1 c2 +1 a +SHOW TABLES; +Tables_in_db3 +t2 +DROP TABLE t2; +use test; +DROP DATABASE db3; diff --git a/mysql-test/suite/rocksdb/r-native-partitioning/show_engine.result b/mysql-test/suite/rocksdb/r-native-partitioning/show_engine.result new file mode 100644 index 000000000000..a319ddcfdb64 --- /dev/null +++ b/mysql-test/suite/rocksdb/r-native-partitioning/show_engine.result @@ -0,0 +1,389 @@ +DROP TABLE IF EXISTS t1; +DROP TABLE IF EXISTS t2; +DROP TABLE IF EXISTS t3; +DROP TABLE IF EXISTS t4; +CREATE TABLE t1 (i INT, PRIMARY KEY (i) COMMENT 'cf_t1') ENGINE = ROCKSDB; +CREATE TABLE t2 (j INT, PRIMARY KEY (j) COMMENT 'rev:cf_t2') ENGINE = ROCKSDB; +CREATE TABLE t3 (k INT, PRIMARY KEY (k) COMMENT 'cf_t1') ENGINE = ROCKSDB; +CREATE TABLE t4 (l INT, PRIMARY KEY (l) COMMENT 'cf_t4') ENGINE = ROCKSDB +PARTITION BY KEY(l) PARTITIONS 4; +SET @save.rocksdb_max_background_jobs= @@global.rocksdb_max_background_jobs; +SET GLOBAL rocksdb_max_background_jobs= 1; +INSERT INTO t1 VALUES (1), (2), (3); +SELECT COUNT(*) FROM t1; +COUNT(*) +3 +INSERT INTO t2 VALUES (1), (2), (3), (4); +SELECT COUNT(*) FROM t2; +COUNT(*) +4 +INSERT INTO t4 VALUES (1), (2), (3), (4), (5); +SELECT COUNT(*) FROM t4; +COUNT(*) +5 +SET GLOBAL rocksdb_force_flush_memtable_now=1; +SET GLOBAL rocksdb_compact_cf="cf_t1"; +SHOW ENGINE rocksdb STATUS; +Type Name Status +STATISTICS # # +DBSTATS # # +CF_COMPACTION # # +CF_COMPACTION # # +CF_COMPACTION # # +CF_COMPACTION # # +MEMORY_STATS # # +BG_THREADS # # +BG_THREADS # # +SELECT * FROM INFORMATION_SCHEMA.ROCKSDB_CFSTATS; +CF_NAME STAT_TYPE VALUE +__system__ NUM_IMMUTABLE_MEM_TABLE # +__system__ MEM_TABLE_FLUSH_PENDING # +__system__ COMPACTION_PENDING # +__system__ CUR_SIZE_ACTIVE_MEM_TABLE # +__system__ CUR_SIZE_ALL_MEM_TABLES # +__system__ NUM_ENTRIES_ACTIVE_MEM_TABLE # +__system__ NUM_ENTRIES_IMM_MEM_TABLES # +__system__ NON_BLOCK_CACHE_SST_MEM_USAGE # +__system__ NUM_LIVE_VERSIONS # +cf_t1 NUM_IMMUTABLE_MEM_TABLE # +cf_t1 MEM_TABLE_FLUSH_PENDING # +cf_t1 COMPACTION_PENDING # +cf_t1 CUR_SIZE_ACTIVE_MEM_TABLE # +cf_t1 CUR_SIZE_ALL_MEM_TABLES # +cf_t1 NUM_ENTRIES_ACTIVE_MEM_TABLE # +cf_t1 NUM_ENTRIES_IMM_MEM_TABLES # +cf_t1 NON_BLOCK_CACHE_SST_MEM_USAGE # +cf_t1 NUM_LIVE_VERSIONS # +default NUM_IMMUTABLE_MEM_TABLE # +default MEM_TABLE_FLUSH_PENDING # +default COMPACTION_PENDING # +default CUR_SIZE_ACTIVE_MEM_TABLE # +default CUR_SIZE_ALL_MEM_TABLES # +default NUM_ENTRIES_ACTIVE_MEM_TABLE # +default NUM_ENTRIES_IMM_MEM_TABLES # +default NON_BLOCK_CACHE_SST_MEM_USAGE # +default NUM_LIVE_VERSIONS # +rev:cf_t2 NUM_IMMUTABLE_MEM_TABLE # +rev:cf_t2 MEM_TABLE_FLUSH_PENDING # +rev:cf_t2 COMPACTION_PENDING # +rev:cf_t2 CUR_SIZE_ACTIVE_MEM_TABLE # +rev:cf_t2 CUR_SIZE_ALL_MEM_TABLES # +rev:cf_t2 NUM_ENTRIES_ACTIVE_MEM_TABLE # +rev:cf_t2 NUM_ENTRIES_IMM_MEM_TABLES # +rev:cf_t2 NON_BLOCK_CACHE_SST_MEM_USAGE # +rev:cf_t2 NUM_LIVE_VERSIONS # +SELECT * FROM INFORMATION_SCHEMA.ROCKSDB_DBSTATS; +STAT_TYPE VALUE +DB_BACKGROUND_ERRORS # +DB_NUM_SNAPSHOTS # +DB_OLDEST_SNAPSHOT_TIME # +DB_BLOCK_CACHE_USAGE # +SELECT TABLE_SCHEMA, TABLE_NAME, PARTITION_NAME, COUNT(STAT_TYPE) +FROM INFORMATION_SCHEMA.ROCKSDB_PERF_CONTEXT +WHERE TABLE_SCHEMA = 'test' +GROUP BY TABLE_NAME, PARTITION_NAME; +TABLE_SCHEMA TABLE_NAME PARTITION_NAME COUNT(STAT_TYPE) +test t1 NULL 57 +test t2 NULL 57 +test t4 p0 57 +test t4 p1 57 +test t4 p2 57 +test t4 p3 57 +SELECT * FROM INFORMATION_SCHEMA.ROCKSDB_CF_OPTIONS; +CF_NAME OPTION_TYPE VALUE +__system__ COMPARATOR # +__system__ MERGE_OPERATOR # +__system__ COMPACTION_FILTER # +__system__ COMPACTION_FILTER_FACTORY # +__system__ WRITE_BUFFER_SIZE # +__system__ MAX_WRITE_BUFFER_NUMBER # +__system__ MIN_WRITE_BUFFER_NUMBER_TO_MERGE # +__system__ NUM_LEVELS # +__system__ LEVEL0_FILE_NUM_COMPACTION_TRIGGER # +__system__ LEVEL0_SLOWDOWN_WRITES_TRIGGER # +__system__ LEVEL0_STOP_WRITES_TRIGGER # +__system__ MAX_MEM_COMPACTION_LEVEL # +__system__ TARGET_FILE_SIZE_BASE # +__system__ TARGET_FILE_SIZE_MULTIPLIER # +__system__ MAX_BYTES_FOR_LEVEL_BASE # +__system__ LEVEL_COMPACTION_DYNAMIC_LEVEL_BYTES # +__system__ MAX_BYTES_FOR_LEVEL_MULTIPLIER # +__system__ SOFT_RATE_LIMIT # +__system__ HARD_RATE_LIMIT # +__system__ RATE_LIMIT_DELAY_MAX_MILLISECONDS # +__system__ ARENA_BLOCK_SIZE # +__system__ DISABLE_AUTO_COMPACTIONS # +__system__ PURGE_REDUNDANT_KVS_WHILE_FLUSH # +__system__ MAX_SEQUENTIAL_SKIP_IN_ITERATIONS # +__system__ MEMTABLE_FACTORY # +__system__ INPLACE_UPDATE_SUPPORT # +__system__ INPLACE_UPDATE_NUM_LOCKS # +__system__ MEMTABLE_PREFIX_BLOOM_BITS_RATIO # +__system__ MEMTABLE_PREFIX_BLOOM_HUGE_PAGE_TLB_SIZE # +__system__ BLOOM_LOCALITY # +__system__ MAX_SUCCESSIVE_MERGES # +__system__ OPTIMIZE_FILTERS_FOR_HITS # +__system__ MAX_BYTES_FOR_LEVEL_MULTIPLIER_ADDITIONAL # +__system__ COMPRESSION_TYPE # +__system__ COMPRESSION_PER_LEVEL # +__system__ COMPRESSION_OPTS # +__system__ BOTTOMMOST_COMPRESSION # +__system__ PREFIX_EXTRACTOR # +__system__ COMPACTION_STYLE # +__system__ COMPACTION_OPTIONS_UNIVERSAL # +__system__ COMPACTION_OPTION_FIFO::MAX_TABLE_FILES_SIZE # +__system__ TABLE_FACTORY::FLUSH_BLOCK_POLICY_FACTORY # +__system__ TABLE_FACTORY::CACHE_INDEX_AND_FILTER_BLOCKS # +__system__ TABLE_FACTORY::CACHE_INDEX_AND_FILTER_BLOCKS_WITH_HIGH_PRIORITY # +__system__ TABLE_FACTORY::PIN_L0_FILTER_AND_INDEX_BLOCKS_IN_CACHE # +__system__ TABLE_FACTORY::INDEX_TYPE # +__system__ TABLE_FACTORY::HASH_INDEX_ALLOW_COLLISION # +__system__ TABLE_FACTORY::CHECKSUM # +__system__ TABLE_FACTORY::NO_BLOCK_CACHE # +__system__ TABLE_FACTORY::BLOCK_CACHE # +__system__ TABLE_FACTORY::BLOCK_CACHE_NAME # +__system__ TABLE_FACTORY::BLOCK_CACHE_OPTIONS # +__system__ TABLE_FACTORY::CAPACITY # +__system__ TABLE_FACTORY::NUM_SHARD_BITS # +__system__ TABLE_FACTORY::STRICT_CAPACITY_LIMIT # +__system__ TABLE_FACTORY::HIGH_PRI_POOL_RATIO # +__system__ TABLE_FACTORY::BLOCK_CACHE_COMPRESSED # +__system__ TABLE_FACTORY::PERSISTENT_CACHE # +__system__ TABLE_FACTORY::BLOCK_SIZE # +__system__ TABLE_FACTORY::BLOCK_SIZE_DEVIATION # +__system__ TABLE_FACTORY::BLOCK_RESTART_INTERVAL # +__system__ TABLE_FACTORY::INDEX_BLOCK_RESTART_INTERVAL # +__system__ TABLE_FACTORY::METADATA_BLOCK_SIZE # +__system__ TABLE_FACTORY::PARTITION_FILTERS # +__system__ TABLE_FACTORY::USE_DELTA_ENCODING # +__system__ TABLE_FACTORY::FILTER_POLICY # +__system__ TABLE_FACTORY::WHOLE_KEY_FILTERING # +__system__ TABLE_FACTORY::VERIFY_COMPRESSION # +__system__ TABLE_FACTORY::READ_AMP_BYTES_PER_BIT # +__system__ TABLE_FACTORY::FORMAT_VERSION # +__system__ TABLE_FACTORY::ENABLE_INDEX_COMPRESSION # +__system__ TABLE_FACTORY::BLOCK_ALIGN # +cf_t1 COMPARATOR # +cf_t1 MERGE_OPERATOR # +cf_t1 COMPACTION_FILTER # +cf_t1 COMPACTION_FILTER_FACTORY # +cf_t1 WRITE_BUFFER_SIZE # +cf_t1 MAX_WRITE_BUFFER_NUMBER # +cf_t1 MIN_WRITE_BUFFER_NUMBER_TO_MERGE # +cf_t1 NUM_LEVELS # +cf_t1 LEVEL0_FILE_NUM_COMPACTION_TRIGGER # +cf_t1 LEVEL0_SLOWDOWN_WRITES_TRIGGER # +cf_t1 LEVEL0_STOP_WRITES_TRIGGER # +cf_t1 MAX_MEM_COMPACTION_LEVEL # +cf_t1 TARGET_FILE_SIZE_BASE # +cf_t1 TARGET_FILE_SIZE_MULTIPLIER # +cf_t1 MAX_BYTES_FOR_LEVEL_BASE # +cf_t1 LEVEL_COMPACTION_DYNAMIC_LEVEL_BYTES # +cf_t1 MAX_BYTES_FOR_LEVEL_MULTIPLIER # +cf_t1 SOFT_RATE_LIMIT # +cf_t1 HARD_RATE_LIMIT # +cf_t1 RATE_LIMIT_DELAY_MAX_MILLISECONDS # +cf_t1 ARENA_BLOCK_SIZE # +cf_t1 DISABLE_AUTO_COMPACTIONS # +cf_t1 PURGE_REDUNDANT_KVS_WHILE_FLUSH # +cf_t1 MAX_SEQUENTIAL_SKIP_IN_ITERATIONS # +cf_t1 MEMTABLE_FACTORY # +cf_t1 INPLACE_UPDATE_SUPPORT # +cf_t1 INPLACE_UPDATE_NUM_LOCKS # +cf_t1 MEMTABLE_PREFIX_BLOOM_BITS_RATIO # +cf_t1 MEMTABLE_PREFIX_BLOOM_HUGE_PAGE_TLB_SIZE # +cf_t1 BLOOM_LOCALITY # +cf_t1 MAX_SUCCESSIVE_MERGES # +cf_t1 OPTIMIZE_FILTERS_FOR_HITS # +cf_t1 MAX_BYTES_FOR_LEVEL_MULTIPLIER_ADDITIONAL # +cf_t1 COMPRESSION_TYPE # +cf_t1 COMPRESSION_PER_LEVEL # +cf_t1 COMPRESSION_OPTS # +cf_t1 BOTTOMMOST_COMPRESSION # +cf_t1 PREFIX_EXTRACTOR # +cf_t1 COMPACTION_STYLE # +cf_t1 COMPACTION_OPTIONS_UNIVERSAL # +cf_t1 COMPACTION_OPTION_FIFO::MAX_TABLE_FILES_SIZE # +cf_t1 TABLE_FACTORY::FLUSH_BLOCK_POLICY_FACTORY # +cf_t1 TABLE_FACTORY::CACHE_INDEX_AND_FILTER_BLOCKS # +cf_t1 TABLE_FACTORY::CACHE_INDEX_AND_FILTER_BLOCKS_WITH_HIGH_PRIORITY # +cf_t1 TABLE_FACTORY::PIN_L0_FILTER_AND_INDEX_BLOCKS_IN_CACHE # +cf_t1 TABLE_FACTORY::INDEX_TYPE # +cf_t1 TABLE_FACTORY::HASH_INDEX_ALLOW_COLLISION # +cf_t1 TABLE_FACTORY::CHECKSUM # +cf_t1 TABLE_FACTORY::NO_BLOCK_CACHE # +cf_t1 TABLE_FACTORY::BLOCK_CACHE # +cf_t1 TABLE_FACTORY::BLOCK_CACHE_NAME # +cf_t1 TABLE_FACTORY::BLOCK_CACHE_OPTIONS # +cf_t1 TABLE_FACTORY::CAPACITY # +cf_t1 TABLE_FACTORY::NUM_SHARD_BITS # +cf_t1 TABLE_FACTORY::STRICT_CAPACITY_LIMIT # +cf_t1 TABLE_FACTORY::HIGH_PRI_POOL_RATIO # +cf_t1 TABLE_FACTORY::BLOCK_CACHE_COMPRESSED # +cf_t1 TABLE_FACTORY::PERSISTENT_CACHE # +cf_t1 TABLE_FACTORY::BLOCK_SIZE # +cf_t1 TABLE_FACTORY::BLOCK_SIZE_DEVIATION # +cf_t1 TABLE_FACTORY::BLOCK_RESTART_INTERVAL # +cf_t1 TABLE_FACTORY::INDEX_BLOCK_RESTART_INTERVAL # +cf_t1 TABLE_FACTORY::METADATA_BLOCK_SIZE # +cf_t1 TABLE_FACTORY::PARTITION_FILTERS # +cf_t1 TABLE_FACTORY::USE_DELTA_ENCODING # +cf_t1 TABLE_FACTORY::FILTER_POLICY # +cf_t1 TABLE_FACTORY::WHOLE_KEY_FILTERING # +cf_t1 TABLE_FACTORY::VERIFY_COMPRESSION # +cf_t1 TABLE_FACTORY::READ_AMP_BYTES_PER_BIT # +cf_t1 TABLE_FACTORY::FORMAT_VERSION # +cf_t1 TABLE_FACTORY::ENABLE_INDEX_COMPRESSION # +cf_t1 TABLE_FACTORY::BLOCK_ALIGN # +default COMPARATOR # +default MERGE_OPERATOR # +default COMPACTION_FILTER # +default COMPACTION_FILTER_FACTORY # +default WRITE_BUFFER_SIZE # +default MAX_WRITE_BUFFER_NUMBER # +default MIN_WRITE_BUFFER_NUMBER_TO_MERGE # +default NUM_LEVELS # +default LEVEL0_FILE_NUM_COMPACTION_TRIGGER # +default LEVEL0_SLOWDOWN_WRITES_TRIGGER # +default LEVEL0_STOP_WRITES_TRIGGER # +default MAX_MEM_COMPACTION_LEVEL # +default TARGET_FILE_SIZE_BASE # +default TARGET_FILE_SIZE_MULTIPLIER # +default MAX_BYTES_FOR_LEVEL_BASE # +default LEVEL_COMPACTION_DYNAMIC_LEVEL_BYTES # +default MAX_BYTES_FOR_LEVEL_MULTIPLIER # +default SOFT_RATE_LIMIT # +default HARD_RATE_LIMIT # +default RATE_LIMIT_DELAY_MAX_MILLISECONDS # +default ARENA_BLOCK_SIZE # +default DISABLE_AUTO_COMPACTIONS # +default PURGE_REDUNDANT_KVS_WHILE_FLUSH # +default MAX_SEQUENTIAL_SKIP_IN_ITERATIONS # +default MEMTABLE_FACTORY # +default INPLACE_UPDATE_SUPPORT # +default INPLACE_UPDATE_NUM_LOCKS # +default MEMTABLE_PREFIX_BLOOM_BITS_RATIO # +default MEMTABLE_PREFIX_BLOOM_HUGE_PAGE_TLB_SIZE # +default BLOOM_LOCALITY # +default MAX_SUCCESSIVE_MERGES # +default OPTIMIZE_FILTERS_FOR_HITS # +default MAX_BYTES_FOR_LEVEL_MULTIPLIER_ADDITIONAL # +default COMPRESSION_TYPE # +default COMPRESSION_PER_LEVEL # +default COMPRESSION_OPTS # +default BOTTOMMOST_COMPRESSION # +default PREFIX_EXTRACTOR # +default COMPACTION_STYLE # +default COMPACTION_OPTIONS_UNIVERSAL # +default COMPACTION_OPTION_FIFO::MAX_TABLE_FILES_SIZE # +default TABLE_FACTORY::FLUSH_BLOCK_POLICY_FACTORY # +default TABLE_FACTORY::CACHE_INDEX_AND_FILTER_BLOCKS # +default TABLE_FACTORY::CACHE_INDEX_AND_FILTER_BLOCKS_WITH_HIGH_PRIORITY # +default TABLE_FACTORY::PIN_L0_FILTER_AND_INDEX_BLOCKS_IN_CACHE # +default TABLE_FACTORY::INDEX_TYPE # +default TABLE_FACTORY::HASH_INDEX_ALLOW_COLLISION # +default TABLE_FACTORY::CHECKSUM # +default TABLE_FACTORY::NO_BLOCK_CACHE # +default TABLE_FACTORY::BLOCK_CACHE # +default TABLE_FACTORY::BLOCK_CACHE_NAME # +default TABLE_FACTORY::BLOCK_CACHE_OPTIONS # +default TABLE_FACTORY::CAPACITY # +default TABLE_FACTORY::NUM_SHARD_BITS # +default TABLE_FACTORY::STRICT_CAPACITY_LIMIT # +default TABLE_FACTORY::HIGH_PRI_POOL_RATIO # +default TABLE_FACTORY::BLOCK_CACHE_COMPRESSED # +default TABLE_FACTORY::PERSISTENT_CACHE # +default TABLE_FACTORY::BLOCK_SIZE # +default TABLE_FACTORY::BLOCK_SIZE_DEVIATION # +default TABLE_FACTORY::BLOCK_RESTART_INTERVAL # +default TABLE_FACTORY::INDEX_BLOCK_RESTART_INTERVAL # +default TABLE_FACTORY::METADATA_BLOCK_SIZE # +default TABLE_FACTORY::PARTITION_FILTERS # +default TABLE_FACTORY::USE_DELTA_ENCODING # +default TABLE_FACTORY::FILTER_POLICY # +default TABLE_FACTORY::WHOLE_KEY_FILTERING # +default TABLE_FACTORY::VERIFY_COMPRESSION # +default TABLE_FACTORY::READ_AMP_BYTES_PER_BIT # +default TABLE_FACTORY::FORMAT_VERSION # +default TABLE_FACTORY::ENABLE_INDEX_COMPRESSION # +default TABLE_FACTORY::BLOCK_ALIGN # +rev:cf_t2 COMPARATOR # +rev:cf_t2 MERGE_OPERATOR # +rev:cf_t2 COMPACTION_FILTER # +rev:cf_t2 COMPACTION_FILTER_FACTORY # +rev:cf_t2 WRITE_BUFFER_SIZE # +rev:cf_t2 MAX_WRITE_BUFFER_NUMBER # +rev:cf_t2 MIN_WRITE_BUFFER_NUMBER_TO_MERGE # +rev:cf_t2 NUM_LEVELS # +rev:cf_t2 LEVEL0_FILE_NUM_COMPACTION_TRIGGER # +rev:cf_t2 LEVEL0_SLOWDOWN_WRITES_TRIGGER # +rev:cf_t2 LEVEL0_STOP_WRITES_TRIGGER # +rev:cf_t2 MAX_MEM_COMPACTION_LEVEL # +rev:cf_t2 TARGET_FILE_SIZE_BASE # +rev:cf_t2 TARGET_FILE_SIZE_MULTIPLIER # +rev:cf_t2 MAX_BYTES_FOR_LEVEL_BASE # +rev:cf_t2 LEVEL_COMPACTION_DYNAMIC_LEVEL_BYTES # +rev:cf_t2 MAX_BYTES_FOR_LEVEL_MULTIPLIER # +rev:cf_t2 SOFT_RATE_LIMIT # +rev:cf_t2 HARD_RATE_LIMIT # +rev:cf_t2 RATE_LIMIT_DELAY_MAX_MILLISECONDS # +rev:cf_t2 ARENA_BLOCK_SIZE # +rev:cf_t2 DISABLE_AUTO_COMPACTIONS # +rev:cf_t2 PURGE_REDUNDANT_KVS_WHILE_FLUSH # +rev:cf_t2 MAX_SEQUENTIAL_SKIP_IN_ITERATIONS # +rev:cf_t2 MEMTABLE_FACTORY # +rev:cf_t2 INPLACE_UPDATE_SUPPORT # +rev:cf_t2 INPLACE_UPDATE_NUM_LOCKS # +rev:cf_t2 MEMTABLE_PREFIX_BLOOM_BITS_RATIO # +rev:cf_t2 MEMTABLE_PREFIX_BLOOM_HUGE_PAGE_TLB_SIZE # +rev:cf_t2 BLOOM_LOCALITY # +rev:cf_t2 MAX_SUCCESSIVE_MERGES # +rev:cf_t2 OPTIMIZE_FILTERS_FOR_HITS # +rev:cf_t2 MAX_BYTES_FOR_LEVEL_MULTIPLIER_ADDITIONAL # +rev:cf_t2 COMPRESSION_TYPE # +rev:cf_t2 COMPRESSION_PER_LEVEL # +rev:cf_t2 COMPRESSION_OPTS # +rev:cf_t2 BOTTOMMOST_COMPRESSION # +rev:cf_t2 PREFIX_EXTRACTOR # +rev:cf_t2 COMPACTION_STYLE # +rev:cf_t2 COMPACTION_OPTIONS_UNIVERSAL # +rev:cf_t2 COMPACTION_OPTION_FIFO::MAX_TABLE_FILES_SIZE # +rev:cf_t2 TABLE_FACTORY::FLUSH_BLOCK_POLICY_FACTORY # +rev:cf_t2 TABLE_FACTORY::CACHE_INDEX_AND_FILTER_BLOCKS # +rev:cf_t2 TABLE_FACTORY::CACHE_INDEX_AND_FILTER_BLOCKS_WITH_HIGH_PRIORITY # +rev:cf_t2 TABLE_FACTORY::PIN_L0_FILTER_AND_INDEX_BLOCKS_IN_CACHE # +rev:cf_t2 TABLE_FACTORY::INDEX_TYPE # +rev:cf_t2 TABLE_FACTORY::HASH_INDEX_ALLOW_COLLISION # +rev:cf_t2 TABLE_FACTORY::CHECKSUM # +rev:cf_t2 TABLE_FACTORY::NO_BLOCK_CACHE # +rev:cf_t2 TABLE_FACTORY::BLOCK_CACHE # +rev:cf_t2 TABLE_FACTORY::BLOCK_CACHE_NAME # +rev:cf_t2 TABLE_FACTORY::BLOCK_CACHE_OPTIONS # +rev:cf_t2 TABLE_FACTORY::CAPACITY # +rev:cf_t2 TABLE_FACTORY::NUM_SHARD_BITS # +rev:cf_t2 TABLE_FACTORY::STRICT_CAPACITY_LIMIT # +rev:cf_t2 TABLE_FACTORY::HIGH_PRI_POOL_RATIO # +rev:cf_t2 TABLE_FACTORY::BLOCK_CACHE_COMPRESSED # +rev:cf_t2 TABLE_FACTORY::PERSISTENT_CACHE # +rev:cf_t2 TABLE_FACTORY::BLOCK_SIZE # +rev:cf_t2 TABLE_FACTORY::BLOCK_SIZE_DEVIATION # +rev:cf_t2 TABLE_FACTORY::BLOCK_RESTART_INTERVAL # +rev:cf_t2 TABLE_FACTORY::INDEX_BLOCK_RESTART_INTERVAL # +rev:cf_t2 TABLE_FACTORY::METADATA_BLOCK_SIZE # +rev:cf_t2 TABLE_FACTORY::PARTITION_FILTERS # +rev:cf_t2 TABLE_FACTORY::USE_DELTA_ENCODING # +rev:cf_t2 TABLE_FACTORY::FILTER_POLICY # +rev:cf_t2 TABLE_FACTORY::WHOLE_KEY_FILTERING # +rev:cf_t2 TABLE_FACTORY::VERIFY_COMPRESSION # +rev:cf_t2 TABLE_FACTORY::READ_AMP_BYTES_PER_BIT # +rev:cf_t2 TABLE_FACTORY::FORMAT_VERSION # +rev:cf_t2 TABLE_FACTORY::ENABLE_INDEX_COMPRESSION # +rev:cf_t2 TABLE_FACTORY::BLOCK_ALIGN # +DROP TABLE t1; +DROP TABLE t2; +DROP TABLE t3; +DROP TABLE t4; +SHOW ENGINE rocksdb MUTEX; +Type Name Status +SHOW ENGINE ALL MUTEX; +SET GLOBAL rocksdb_max_background_jobs= @save.rocksdb_max_background_jobs; diff --git a/mysql-test/suite/rocksdb/r-native-partitioning/ttl_primary_with_partitions.result b/mysql-test/suite/rocksdb/r-native-partitioning/ttl_primary_with_partitions.result new file mode 100644 index 000000000000..3031b4d66897 --- /dev/null +++ b/mysql-test/suite/rocksdb/r-native-partitioning/ttl_primary_with_partitions.result @@ -0,0 +1,260 @@ +set @orig_rocksdb_debug_ttl_rec_ts = @@global.rocksdb_debug_ttl_rec_ts; +set @orig_rocksdb_debug_ttl_snapshot_ts = @@global.rocksdb_debug_ttl_snapshot_ts; +CREATE TABLE t1 ( +c1 INT, +PRIMARY KEY (`c1`) +) ENGINE=ROCKSDB +COMMENT="custom_p0_ttl_duration=1;" +PARTITION BY LIST(c1) ( +PARTITION custom_p0 VALUES IN (1, 4, 7), +PARTITION custom_p1 VALUES IN (2, 5, 8), +PARTITION custom_p2 VALUES IN (3, 6, 9) +); +set global rocksdb_debug_ttl_rec_ts = -3600; +INSERT INTO t1 values (1); +INSERT INTO t1 values (2); +INSERT INTO t1 values (3); +INSERT INTO t1 values (4); +INSERT INTO t1 values (5); +INSERT INTO t1 values (6); +INSERT INTO t1 values (7); +INSERT INTO t1 values (8); +INSERT INTO t1 values (9); +set global rocksdb_debug_ttl_rec_ts = 0; +SELECT * FROM t1; +c1 +1 +2 +3 +4 +5 +6 +7 +8 +9 +set global rocksdb_force_flush_memtable_now=1; +set global rocksdb_compact_cf='default'; +SELECT * FROM t1; +c1 +2 +3 +5 +6 +8 +9 +DROP TABLE t1; +CREATE TABLE t1 ( +c1 INT, +c2 INT, +name VARCHAR(25) NOT NULL, +PRIMARY KEY (`c1`, `c2`) COMMENT 'custom_p0_cfname=foo;custom_p1_cfname=my_custom_cf;custom_p2_cfname=baz' +) ENGINE=ROCKSDB +COMMENT="custom_p0_ttl_duration=1;custom_p1_ttl_duration=7;" +PARTITION BY LIST(c1) ( +PARTITION custom_p0 VALUES IN (1, 4, 7), +PARTITION custom_p1 VALUES IN (2, 5, 8), +PARTITION custom_p2 VALUES IN (3, 6, 9) +); +set global rocksdb_debug_ttl_rec_ts = -1200; +INSERT INTO t1 values (1,1,'a'); +INSERT INTO t1 values (4,4,'aaaa'); +INSERT INTO t1 values (7,7,'aaaaaaa'); +set global rocksdb_debug_ttl_rec_ts = 1200; +INSERT INTO t1 values (2,2,'aa'); +INSERT INTO t1 values (3,3,'aaa'); +INSERT INTO t1 values (5,5,'aaaaa'); +INSERT INTO t1 values (6,6,'aaaaaa'); +INSERT INTO t1 values (8,8,'aaaaaaaa'); +INSERT INTO t1 values (9,9,'aaaaaaaaa'); +set global rocksdb_debug_ttl_rec_ts = 0; +SELECT * FROM t1; +c1 c2 name +1 1 a +2 2 aa +3 3 aaa +4 4 aaaa +5 5 aaaaa +6 6 aaaaaa +7 7 aaaaaaa +8 8 aaaaaaaa +9 9 aaaaaaaaa +set global rocksdb_force_flush_memtable_now=1; +set @@global.rocksdb_compact_cf = 'foo'; +set @@global.rocksdb_compact_cf = 'my_custom_cf'; +SELECT * FROM t1; +c1 c2 name +2 2 aa +3 3 aaa +5 5 aaaaa +6 6 aaaaaa +8 8 aaaaaaaa +9 9 aaaaaaaaa +set global rocksdb_debug_ttl_snapshot_ts = 3600; +set @@global.rocksdb_compact_cf = 'foo'; +SELECT * FROM t1; +c1 c2 name +2 2 aa +3 3 aaa +5 5 aaaaa +6 6 aaaaaa +8 8 aaaaaaaa +9 9 aaaaaaaaa +set @@global.rocksdb_compact_cf = 'my_custom_cf'; +set global rocksdb_debug_ttl_snapshot_ts = 0; +SELECT * FROM t1; +c1 c2 name +3 3 aaa +6 6 aaaaaa +9 9 aaaaaaaaa +DROP TABLE t1; +CREATE TABLE t1 ( +c1 INT, +c2 INT, +name VARCHAR(25) NOT NULL, +event DATE, +PRIMARY KEY (`c1`, `c2`) COMMENT 'custom_p0_cfname=foo;custom_p1_cfname=bar;custom_p2_cfname=baz;' +) ENGINE=ROCKSDB +COMMENT="custom_p0_ttl_duration=9999;custom_p2_ttl_duration=5;" +PARTITION BY LIST(c1) ( +PARTITION custom_p0 VALUES IN (1, 2, 3), +PARTITION custom_p1 VALUES IN (4, 5, 6), +PARTITION custom_p2 VALUES IN (7, 8, 9) +); +INSERT INTO t1 VALUES (1, 1, "one", null); +INSERT INTO t1 VALUES (2, 2, "two", null); +INSERT INTO t1 VALUES (3, 3, "three", null); +INSERT INTO t1 VALUES (4, 4, "four", null); +INSERT INTO t1 VALUES (5, 5, "five", null); +INSERT INTO t1 VALUES (6, 6, "six", null); +INSERT INTO t1 VALUES (7, 7, "seven", null); +INSERT INTO t1 VALUES (8, 8, "eight", null); +INSERT INTO t1 VALUES (9, 9, "nine", null); +SELECT * FROM t1; +c1 c2 name event +1 1 one NULL +2 2 two NULL +3 3 three NULL +4 4 four NULL +5 5 five NULL +6 6 six NULL +7 7 seven NULL +8 8 eight NULL +9 9 nine NULL +set global rocksdb_debug_ttl_rec_ts = 600; +ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(`c2`,`c1`) COMMENT 'custom_p0_cfname=foo;custom_p1_cfname=bar;custom_p2_cfname=baz;'; +set global rocksdb_debug_ttl_rec_ts = 0; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) NOT NULL, + `c2` int(11) NOT NULL, + `name` varchar(25) NOT NULL, + `event` date DEFAULT NULL, + PRIMARY KEY (`c2`,`c1`) COMMENT 'custom_p0_cfname=foo;custom_p1_cfname=bar;custom_p2_cfname=baz;' +) ENGINE=ROCKSDB DEFAULT CHARSET=latin1 COMMENT='custom_p0_ttl_duration=9999;custom_p2_ttl_duration=5;' +/*!50100 PARTITION BY LIST (c1) +(PARTITION custom_p0 VALUES IN (1,2,3) ENGINE = ROCKSDB, + PARTITION custom_p1 VALUES IN (4,5,6) ENGINE = ROCKSDB, + PARTITION custom_p2 VALUES IN (7,8,9) ENGINE = ROCKSDB) */ +set global rocksdb_debug_ttl_snapshot_ts = 100; +set global rocksdb_force_flush_memtable_now=1; +set @@global.rocksdb_compact_cf = 'baz'; +set global rocksdb_debug_ttl_snapshot_ts = 0; +SELECT * FROM t1; +c1 c2 name event +1 1 one NULL +2 2 two NULL +3 3 three NULL +4 4 four NULL +5 5 five NULL +6 6 six NULL +7 7 seven NULL +8 8 eight NULL +9 9 nine NULL +set global rocksdb_debug_ttl_snapshot_ts = 1200; +set @@global.rocksdb_compact_cf = 'foo'; +set @@global.rocksdb_compact_cf = 'baz'; +set global rocksdb_debug_ttl_snapshot_ts = 0; +SELECT * FROM t1; +c1 c2 name event +1 1 one NULL +2 2 two NULL +3 3 three NULL +4 4 four NULL +5 5 five NULL +6 6 six NULL +DROP TABLE t1; +CREATE TABLE t1 ( +c1 BIGINT, +c2 BIGINT UNSIGNED NOT NULL, +name VARCHAR(25) NOT NULL, +event DATE, +PRIMARY KEY (`c1`) COMMENT 'custom_p0_cfname=foo;custom_p1_cfname=bar;custom_p2_cfname=baz;' +) ENGINE=ROCKSDB +COMMENT="ttl_duration=1;custom_p1_ttl_duration=100;custom_p1_ttl_col=c2;custom_p2_ttl_duration=5000;" +PARTITION BY LIST(c1) ( +PARTITION custom_p0 VALUES IN (1, 2, 3), +PARTITION custom_p1 VALUES IN (4, 5, 6), +PARTITION custom_p2 VALUES IN (7, 8, 9) +); +set global rocksdb_debug_ttl_rec_ts = -300; +INSERT INTO t1 VALUES (1, UNIX_TIMESTAMP(), "one", null); +INSERT INTO t1 VALUES (2, UNIX_TIMESTAMP(), "two", null); +INSERT INTO t1 VALUES (3, UNIX_TIMESTAMP(), "three", null); +set global rocksdb_debug_ttl_rec_ts = 0; +INSERT INTO t1 VALUES (4, UNIX_TIMESTAMP(), "four", null); +INSERT INTO t1 VALUES (5, UNIX_TIMESTAMP(), "five", null); +INSERT INTO t1 VALUES (6, UNIX_TIMESTAMP(), "six", null); +INSERT INTO t1 VALUES (7, UNIX_TIMESTAMP(), "seven", null); +INSERT INTO t1 VALUES (8, UNIX_TIMESTAMP(), "eight", null); +INSERT INTO t1 VALUES (9, UNIX_TIMESTAMP(), "nine", null); +set global rocksdb_force_flush_memtable_now=1; +set @@global.rocksdb_compact_cf = 'foo'; +set @@global.rocksdb_compact_cf = 'baz'; +set @@global.rocksdb_compact_cf = 'bar'; +SELECT c1 FROM t1; +c1 +4 +5 +6 +7 +8 +9 +set global rocksdb_debug_ttl_snapshot_ts = 600; +set @@global.rocksdb_compact_cf = 'bar'; +set global rocksdb_debug_ttl_snapshot_ts = 0; +SELECT c1 FROM t1; +c1 +7 +8 +9 +DROP TABLE t1; +CREATE TABLE t1 ( +c1 BIGINT, +c2 BIGINT UNSIGNED NOT NULL, +PRIMARY KEY (`c1`, `c2`) +) ENGINE=ROCKSDB +COMMENT="ttl_duration=100;ttl_col=c2;" +PARTITION BY LIST(c1) ( +PARTITION custom_p0 VALUES IN (1), +PARTITION custom_p1 VALUES IN (2), +PARTITION custom_p2 VALUES IN (3) +); +INSERT INTO t1 values (1, UNIX_TIMESTAMP()); +INSERT INTO t1 values (2, UNIX_TIMESTAMP()); +INSERT INTO t1 values (3, UNIX_TIMESTAMP()); +set global rocksdb_force_flush_memtable_now=1; +set global rocksdb_compact_cf='default'; +SELECT c1 FROM t1; +c1 +1 +2 +3 +set global rocksdb_debug_ttl_snapshot_ts = 300; +set global rocksdb_compact_cf='default'; +set global rocksdb_debug_ttl_snapshot_ts = 0; +SELECT c1 FROM t1; +c1 +DROP TABLE t1; +set @@global.rocksdb_debug_ttl_rec_ts = @orig_rocksdb_debug_ttl_rec_ts; +set @@global.rocksdb_debug_ttl_snapshot_ts = @orig_rocksdb_debug_ttl_snapshot_ts; diff --git a/mysql-test/suite/rocksdb/r-native-partitioning/ttl_secondary_with_partitions.result b/mysql-test/suite/rocksdb/r-native-partitioning/ttl_secondary_with_partitions.result new file mode 100644 index 000000000000..8fa7ee99ce36 --- /dev/null +++ b/mysql-test/suite/rocksdb/r-native-partitioning/ttl_secondary_with_partitions.result @@ -0,0 +1,393 @@ +set @orig_rocksdb_debug_ttl_rec_ts = @@global.rocksdb_debug_ttl_rec_ts; +set @orig_rocksdb_debug_ttl_snapshot_ts = @@global.rocksdb_debug_ttl_snapshot_ts; +CREATE TABLE t1 ( +c1 INT, +c2 INT, +PRIMARY KEY (`c1`), +KEY kc2 (`c2`) +) ENGINE=ROCKSDB +COMMENT="custom_p0_ttl_duration=1;" +PARTITION BY LIST(c1) ( +PARTITION custom_p0 VALUES IN (1, 4, 7), +PARTITION custom_p1 VALUES IN (2, 5, 8), +PARTITION custom_p2 VALUES IN (3, 6, 9) +); +set global rocksdb_debug_ttl_rec_ts = -3600; +INSERT INTO t1 values (1, 1); +INSERT INTO t1 values (2, 2); +INSERT INTO t1 values (3, 3); +INSERT INTO t1 values (4, 4); +INSERT INTO t1 values (5, 5); +INSERT INTO t1 values (6, 6); +INSERT INTO t1 values (7, 7); +INSERT INTO t1 values (8, 8); +INSERT INTO t1 values (9, 9); +set global rocksdb_debug_ttl_rec_ts = 0; +SELECT * FROM t1 FORCE INDEX (PRIMARY); +c1 c2 +1 1 +2 2 +3 3 +4 4 +5 5 +6 6 +7 7 +8 8 +9 9 +SELECT * FROM t1 FORCE INDEX (kc2); +c1 c2 +1 1 +2 2 +3 3 +4 4 +5 5 +6 6 +7 7 +8 8 +9 9 +set global rocksdb_force_flush_memtable_now=1; +set global rocksdb_compact_cf='default'; +SELECT * FROM t1 FORCE INDEX (PRIMARY); +c1 c2 +2 2 +3 3 +5 5 +6 6 +8 8 +9 9 +SELECT * FROM t1 FORCE INDEX (kc2); +c1 c2 +2 2 +3 3 +5 5 +6 6 +8 8 +9 9 +DROP TABLE t1; +CREATE TABLE t1 ( +c1 INT, +c2 INT, +name VARCHAR(25) NOT NULL, +PRIMARY KEY (`c1`, `c2`) COMMENT 'custom_p0_cfname=foo;custom_p1_cfname=my_custom_cf;custom_p2_cfname=baz', +KEY kc2 (`c2`) +) ENGINE=ROCKSDB +COMMENT="custom_p0_ttl_duration=1;custom_p1_ttl_duration=7;" +PARTITION BY LIST(c1) ( +PARTITION custom_p0 VALUES IN (1, 4, 7), +PARTITION custom_p1 VALUES IN (2, 5, 8), +PARTITION custom_p2 VALUES IN (3, 6, 9) +); +set global rocksdb_debug_ttl_rec_ts = -1200; +INSERT INTO t1 values (1,1,'a'); +INSERT INTO t1 values (4,4,'aaaa'); +INSERT INTO t1 values (7,7,'aaaaaaa'); +set global rocksdb_debug_ttl_rec_ts = 1200; +INSERT INTO t1 values (2,2,'aa'); +INSERT INTO t1 values (3,3,'aaa'); +INSERT INTO t1 values (5,5,'aaaaa'); +INSERT INTO t1 values (6,6,'aaaaaa'); +INSERT INTO t1 values (8,8,'aaaaaaaa'); +INSERT INTO t1 values (9,9,'aaaaaaaaa'); +set global rocksdb_debug_ttl_rec_ts = 0; +SELECT * FROM t1 FORCE INDEX (PRIMARY); +c1 c2 name +1 1 a +2 2 aa +3 3 aaa +4 4 aaaa +5 5 aaaaa +6 6 aaaaaa +7 7 aaaaaaa +8 8 aaaaaaaa +9 9 aaaaaaaaa +SELECT * FROM t1 FORCE INDEX (kc2); +c1 c2 name +1 1 a +2 2 aa +3 3 aaa +4 4 aaaa +5 5 aaaaa +6 6 aaaaaa +7 7 aaaaaaa +8 8 aaaaaaaa +9 9 aaaaaaaaa +set global rocksdb_force_flush_memtable_now=1; +set @@global.rocksdb_compact_cf = 'foo'; +set @@global.rocksdb_compact_cf = 'my_custom_cf'; +set @@global.rocksdb_compact_cf = 'default'; +SELECT * FROM t1 FORCE INDEX (PRIMARY); +c1 c2 name +2 2 aa +3 3 aaa +5 5 aaaaa +6 6 aaaaaa +8 8 aaaaaaaa +9 9 aaaaaaaaa +SELECT * FROM t1 FORCE INDEX (kc2); +c1 c2 name +2 2 aa +3 3 aaa +5 5 aaaaa +6 6 aaaaaa +8 8 aaaaaaaa +9 9 aaaaaaaaa +set global rocksdb_debug_ttl_snapshot_ts = 3600; +set @@global.rocksdb_compact_cf = 'foo'; +SELECT * FROM t1 FORCE INDEX (PRIMARY); +c1 c2 name +2 2 aa +3 3 aaa +5 5 aaaaa +6 6 aaaaaa +8 8 aaaaaaaa +9 9 aaaaaaaaa +SELECT * FROM t1 FORCE INDEX (kc2); +c1 c2 name +2 2 aa +3 3 aaa +5 5 aaaaa +6 6 aaaaaa +8 8 aaaaaaaa +9 9 aaaaaaaaa +set @@global.rocksdb_compact_cf = 'my_custom_cf'; +set @@global.rocksdb_compact_cf = 'default'; +set global rocksdb_debug_ttl_snapshot_ts = 0; +SELECT * FROM t1 FORCE INDEX (PRIMARY); +c1 c2 name +3 3 aaa +6 6 aaaaaa +9 9 aaaaaaaaa +SELECT * FROM t1 FORCE INDEX (kc2); +c1 c2 name +3 3 aaa +6 6 aaaaaa +9 9 aaaaaaaaa +DROP TABLE t1; +CREATE TABLE t1 ( +c1 INT, +c2 INT, +name VARCHAR(25) NOT NULL, +event DATE, +PRIMARY KEY (`c1`, `c2`) COMMENT 'custom_p0_cfname=foo;custom_p1_cfname=bar;custom_p2_cfname=baz;', +KEY kc2 (c2) +) ENGINE=ROCKSDB +COMMENT="custom_p0_ttl_duration=9999;custom_p2_ttl_duration=5;" +PARTITION BY LIST(c1) ( +PARTITION custom_p0 VALUES IN (1, 2, 3), +PARTITION custom_p1 VALUES IN (4, 5, 6), +PARTITION custom_p2 VALUES IN (7, 8, 9) +); +INSERT INTO t1 VALUES (1, 1, "one", null); +INSERT INTO t1 VALUES (2, 2, "two", null); +INSERT INTO t1 VALUES (3, 3, "three", null); +INSERT INTO t1 VALUES (4, 4, "four", null); +INSERT INTO t1 VALUES (5, 5, "five", null); +INSERT INTO t1 VALUES (6, 6, "six", null); +INSERT INTO t1 VALUES (7, 7, "seven", null); +INSERT INTO t1 VALUES (8, 8, "eight", null); +INSERT INTO t1 VALUES (9, 9, "nine", null); +SELECT * FROM t1 FORCE INDEX (PRIMARY); +c1 c2 name event +1 1 one NULL +2 2 two NULL +3 3 three NULL +4 4 four NULL +5 5 five NULL +6 6 six NULL +7 7 seven NULL +8 8 eight NULL +9 9 nine NULL +SELECT * FROM t1 FORCE INDEX (kc2); +c1 c2 name event +1 1 one NULL +2 2 two NULL +3 3 three NULL +4 4 four NULL +5 5 five NULL +6 6 six NULL +7 7 seven NULL +8 8 eight NULL +9 9 nine NULL +set global rocksdb_debug_ttl_rec_ts = 600; +ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(`c2`,`c1`) COMMENT 'custom_p0_cfname=foo;custom_p1_cfname=bar;custom_p2_cfname=baz;'; +set global rocksdb_debug_ttl_rec_ts = 0; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) NOT NULL, + `c2` int(11) NOT NULL, + `name` varchar(25) NOT NULL, + `event` date DEFAULT NULL, + PRIMARY KEY (`c2`,`c1`) COMMENT 'custom_p0_cfname=foo;custom_p1_cfname=bar;custom_p2_cfname=baz;', + KEY `kc2` (`c2`) +) ENGINE=ROCKSDB DEFAULT CHARSET=latin1 COMMENT='custom_p0_ttl_duration=9999;custom_p2_ttl_duration=5;' +/*!50100 PARTITION BY LIST (c1) +(PARTITION custom_p0 VALUES IN (1,2,3) ENGINE = ROCKSDB, + PARTITION custom_p1 VALUES IN (4,5,6) ENGINE = ROCKSDB, + PARTITION custom_p2 VALUES IN (7,8,9) ENGINE = ROCKSDB) */ +set global rocksdb_debug_ttl_snapshot_ts = 100; +set global rocksdb_force_flush_memtable_now=1; +set @@global.rocksdb_compact_cf = 'baz'; +set @@global.rocksdb_compact_cf = 'default'; +set global rocksdb_debug_ttl_snapshot_ts = 0; +SELECT * FROM t1 FORCE INDEX (PRIMARY); +c1 c2 name event +1 1 one NULL +2 2 two NULL +3 3 three NULL +4 4 four NULL +5 5 five NULL +6 6 six NULL +7 7 seven NULL +8 8 eight NULL +9 9 nine NULL +SELECT * FROM t1 FORCE INDEX (kc2); +c1 c2 name event +1 1 one NULL +2 2 two NULL +3 3 three NULL +4 4 four NULL +5 5 five NULL +6 6 six NULL +7 7 seven NULL +8 8 eight NULL +9 9 nine NULL +set global rocksdb_debug_ttl_snapshot_ts = 1200; +set @@global.rocksdb_compact_cf = 'foo'; +set @@global.rocksdb_compact_cf = 'baz'; +set @@global.rocksdb_compact_cf = 'default'; +set global rocksdb_debug_ttl_snapshot_ts = 0; +SELECT * FROM t1 FORCE INDEX (PRIMARY); +c1 c2 name event +1 1 one NULL +2 2 two NULL +3 3 three NULL +4 4 four NULL +5 5 five NULL +6 6 six NULL +SELECT * FROM t1 FORCE INDEX (kc2); +c1 c2 name event +1 1 one NULL +2 2 two NULL +3 3 three NULL +4 4 four NULL +5 5 five NULL +6 6 six NULL +DROP TABLE t1; +CREATE TABLE t1 ( +c1 BIGINT, +c2 BIGINT UNSIGNED NOT NULL, +name VARCHAR(25) NOT NULL, +event DATE, +PRIMARY KEY (`c1`) COMMENT 'custom_p0_cfname=foo;custom_p1_cfname=bar;custom_p2_cfname=baz;', +KEY kc2 (`c2`) +) ENGINE=ROCKSDB +COMMENT="ttl_duration=1;custom_p1_ttl_duration=100;custom_p1_ttl_col=c2;custom_p2_ttl_duration=5000;" +PARTITION BY LIST(c1) ( +PARTITION custom_p0 VALUES IN (1, 2, 3), +PARTITION custom_p1 VALUES IN (4, 5, 6), +PARTITION custom_p2 VALUES IN (7, 8, 9) +); +set global rocksdb_debug_ttl_rec_ts = -300; +INSERT INTO t1 VALUES (1, UNIX_TIMESTAMP(), "one", null); +INSERT INTO t1 VALUES (2, UNIX_TIMESTAMP(), "two", null); +INSERT INTO t1 VALUES (3, UNIX_TIMESTAMP(), "three", null); +set global rocksdb_debug_ttl_rec_ts = 0; +INSERT INTO t1 VALUES (4, UNIX_TIMESTAMP(), "four", null); +INSERT INTO t1 VALUES (5, UNIX_TIMESTAMP(), "five", null); +INSERT INTO t1 VALUES (6, UNIX_TIMESTAMP(), "six", null); +INSERT INTO t1 VALUES (7, UNIX_TIMESTAMP(), "seven", null); +INSERT INTO t1 VALUES (8, UNIX_TIMESTAMP(), "eight", null); +INSERT INTO t1 VALUES (9, UNIX_TIMESTAMP(), "nine", null); +set global rocksdb_force_flush_memtable_now=1; +set @@global.rocksdb_compact_cf = 'foo'; +set @@global.rocksdb_compact_cf = 'baz'; +set @@global.rocksdb_compact_cf = 'bar'; +set @@global.rocksdb_compact_cf = 'default'; +SELECT c1 FROM t1 FORCE INDEX (PRIMARY); +c1 +4 +5 +6 +7 +8 +9 +SELECT c1 FROM t1 FORCE INDEX (kc2); +c1 +4 +5 +6 +7 +8 +9 +set global rocksdb_debug_ttl_snapshot_ts = 600; +set @@global.rocksdb_compact_cf = 'bar'; +set @@global.rocksdb_compact_cf = 'default'; +set global rocksdb_debug_ttl_snapshot_ts = 0; +SELECT c1 FROM t1 FORCE INDEX (PRIMARY); +c1 +7 +8 +9 +SELECT c1 FROM t1 FORCE INDEX (kc2); +c1 +7 +8 +9 +DROP TABLE t1; +CREATE TABLE t1 ( +c1 INT, +c2 INT, +PRIMARY KEY (`c1`) COMMENT 'custom_p0_cfname=foo;' +) ENGINE=ROCKSDB +COMMENT="custom_p0_ttl_duration=1;" +PARTITION BY LIST(c1) ( +PARTITION custom_p0 VALUES IN (1, 4, 7), +PARTITION custom_p1 VALUES IN (2, 5, 8), +PARTITION custom_p2 VALUES IN (3, 6, 9) +); +set global rocksdb_debug_ttl_rec_ts = -3600; +INSERT INTO t1 values (1, 1); +INSERT INTO t1 values (4, 4); +INSERT INTO t1 values (7, 7); +set global rocksdb_debug_ttl_rec_ts = 0; +INSERT INTO t1 values (2, 2); +INSERT INTO t1 values (3, 3); +INSERT INTO t1 values (5, 5); +INSERT INTO t1 values (6, 6); +INSERT INTO t1 values (8, 8); +INSERT INTO t1 values (9, 9); +SELECT * FROM t1; +c1 c2 +1 1 +2 2 +3 3 +4 4 +5 5 +6 6 +7 7 +8 8 +9 9 +CREATE INDEX kc2 on t1 (c2); +set global rocksdb_force_flush_memtable_now=1; +set global rocksdb_compact_cf='foo'; +set global rocksdb_compact_cf='default'; +SELECT * FROM t1 FORCE INDEX (PRIMARY); +c1 c2 +2 2 +3 3 +5 5 +6 6 +8 8 +9 9 +SELECT * FROM t1 FORCE INDEX (kc2); +c1 c2 +2 2 +3 3 +5 5 +6 6 +8 8 +9 9 +DROP TABLE t1; +set @@global.rocksdb_debug_ttl_rec_ts = @orig_rocksdb_debug_ttl_rec_ts; +set @@global.rocksdb_debug_ttl_snapshot_ts = @orig_rocksdb_debug_ttl_snapshot_ts; diff --git a/mysql-test/suite/rocksdb/r-native-partitioning/unique_sec.result b/mysql-test/suite/rocksdb/r-native-partitioning/unique_sec.result new file mode 100644 index 000000000000..71607f239ad0 --- /dev/null +++ b/mysql-test/suite/rocksdb/r-native-partitioning/unique_sec.result @@ -0,0 +1,373 @@ +SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED; +SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED; +SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED; +CREATE TABLE t1 (id1 INT NOT NULL, id2 INT NOT NULL, id3 VARCHAR(32), +id4 INT, id5 VARCHAR(32), +value1 INT, value2 INT, value3 VARCHAR(32), +PRIMARY KEY (id1, id2) , +UNIQUE INDEX (id2, id1) , +UNIQUE INDEX (id2, id3, id4) , +INDEX (id1) , +INDEX (id3, id1) , +UNIQUE INDEX(id5) , +INDEX (id2, id5)) ENGINE=ROCKSDB; +SELECT COUNT(*) FROM t1; +COUNT(*) +10 +# Test inserting a key that returns duplicate error +INSERT INTO t1 VALUES (1, 1, 11, 11, 11, 11, 11, 11); +ERROR 23000: Duplicate entry '1-1' for key 'PRIMARY' +INSERT INTO t1 VALUES (5, 5, 11, 11, 11, 11, 11, 11); +ERROR 23000: Duplicate entry '5-5' for key 'PRIMARY' +INSERT INTO t1 VALUES (10, 10, 11, 11, 11, 11, 11, 11); +ERROR 23000: Duplicate entry '10-10' for key 'PRIMARY' +INSERT INTO t1 VALUES (11, 1, 1, 1, 11, 11, 11, 11); +ERROR 23000: Duplicate entry '1-1-1' for key 'id2_2' +INSERT INTO t1 VALUES (11, 5, 5, 5, 11, 11, 11, 11); +ERROR 23000: Duplicate entry '5-5-5' for key 'id2_2' +INSERT INTO t1 VALUES (11, 10, 10, 10, 11, 11, 11, 11); +ERROR 23000: Duplicate entry '10-10-10' for key 'id2_2' +INSERT INTO t1 VALUES (11, 11, 11, 11, 1, 11, 11, 11); +ERROR 23000: Duplicate entry '1' for key 'id5' +INSERT INTO t1 VALUES (11, 11, 11, 11, 5, 11, 11, 11); +ERROR 23000: Duplicate entry '5' for key 'id5' +INSERT INTO t1 VALUES (11, 11, 11, 11, 10, 11, 11, 11); +ERROR 23000: Duplicate entry '10' for key 'id5' +# Test updating a key that returns duplicate error +UPDATE t1 SET id2=1, id3=1, id4=1 WHERE id1=2; +ERROR 23000: Duplicate entry '1-1-1' for key 'id2_2' +UPDATE t1 SET id2=1, id3=1, id4=1; +ERROR 23000: Duplicate entry '1-1-1' for key 'id2_2' +SELECT COUNT(*) FROM t1; +COUNT(*) +10 +# Test updating a key to itself +UPDATE t1 set id2=id4; +UPDATE t1 set id5=id3, value1=value2; +UPDATE t1 set value3=value1; +# Test modifying values should not cause duplicates +UPDATE t1 SET value1=value3+1; +UPDATE t1 SET value3=value3 div 2; +UPDATE t1 SET value2=value3; +SELECT COUNT(*) FROM t1; +COUNT(*) +10 +# Test NULL values are considered unique +INSERT INTO t1 VALUES (20, 20, 20, NULL, NULL, 20, 20, 20); +INSERT INTO t1 VALUES (21, 20, 20, NULL, NULL, 20, 20, 20); +INSERT INTO t1 VALUES (22, 20, 20, NULL, NULL, 20, 20, 20); +SELECT COUNT(*) FROM t1; +COUNT(*) +13 +# Adding multiple rows where one of the rows fail the duplicate +# check should fail the whole statement +INSERT INTO t1 VALUES (23, 23, 23, 23, 23, 23, 23, 23), +(24, 24, 24, 24, 24, 24, 24, 24), +(25, 10, 10, 10, 25, 25, 25, 25), +(26, 26, 26, 26, 26, 26, 26, 26); +ERROR 23000: Duplicate entry '10-10-10' for key 'id2_2' +SELECT COUNT(*) FROM t1; +COUNT(*) +13 +BEGIN; +INSERT INTO t1 VALUES (30, 31, 32, 33, 34, 30, 30, 30); +BEGIN; +SELECT COUNT(*) FROM t1; +COUNT(*) +13 +# Primary key should prevent duplicate on insert +INSERT INTO t1 VALUES (30, 31, 30, 30, 30, 30, 30, 30); +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +# Primary key should prevent duplicate on update +UPDATE t1 SET id1=30, id2=31 WHERE id2=10; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +# Unique secondary key should prevent duplicate on insert +INSERT INTO t1 VALUES (31, 31, 32, 33, 30, 30, 30, 30); +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +INSERT INTO t1 VALUES (32, 32, 32, 32, 34, 32, 32, 32); +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +# Unique secondary key should prevent duplicate on update +UPDATE t1 SET id2=31, id3=32, id4=33 WHERE id2=8; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +UPDATE t1 SET id5=34 WHERE id2=8; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +# Adding multiple rows where one of the rows fail the duplicate +# check should fail the whole statement +INSERT INTO t1 VALUES (35, 35, 35, 35, 35, 35, 35, 35), +(36, 36, 36, 36, 36, 36, 36, 36), +(37, 31, 32, 33, 37, 37, 37, 37), +(38, 38, 38, 38, 38, 38, 38, 38); +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +INSERT INTO t1 VALUES (35, 35, 35, 35, 35, 35, 35, 35), +(36, 36, 36, 36, 36, 36, 36, 36), +(37, 37, 37, 37, 34, 37, 37, 37), +(38, 38, 38, 38, 38, 38, 38, 38); +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +# NULL values are unique and duplicates in value fields are ignored +INSERT INTO t1 VALUES (37, 31, 32, NULL, 37, 37, 37, 37), +(38, 31, 32, NULL, 38, 37, 37, 37), +(39, 31, 32, NULL, 39, 37, 37, 37); +SELECT COUNT(*) FROM t1; +COUNT(*) +16 +# Fail on duplicate key update for row added in our transaction +UPDATE t1 SET id5=37 WHERE id1=38; +ERROR 23000: Duplicate entry '37' for key 'id5' +# Fail on lock timeout for row modified in another transaction +UPDATE t1 SET id5=34 WHERE id1=38; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +# NULL values are unique +UPDATE t1 SET id5=NULL WHERE value1 > 37; +COMMIT; +COMMIT; +BEGIN; +SELECT COUNT(*) FROM t1; +COUNT(*) +17 +BEGIN; +INSERT INTO t1 VALUES (40, 40, 40, 40, 40, 40, 40, 40); +# When transaction is pending, fail on lock acquisition +INSERT INTO t1 VALUES (40, 40, 40, 40, 40, 40, 40, 40); +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +INSERT INTO t1 VALUES (41, 40, 40, 40, 40, 40, 40, 40); +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +SELECT COUNT(*) FROM t1; +COUNT(*) +17 +COMMIT; +# When transaction is committed, fail on duplicate key +INSERT INTO t1 VALUES (40, 40, 40, 40, 40, 40, 40, 40); +Got one of the listed errors +INSERT INTO t1 VALUES (41, 40, 40, 40, 40, 40, 40, 40); +ERROR 23000: Duplicate entry '40-40-40' for key 'id2_2' +ROLLBACK; +SELECT * FROM t1; +id1 id2 id3 id4 id5 value1 value2 value3 +1 1 1 1 1 2 0 0 +2 2 2 2 2 3 1 1 +3 3 3 3 3 4 1 1 +4 4 4 4 4 5 2 2 +5 5 5 5 5 6 2 2 +6 6 6 6 6 7 3 3 +7 7 7 7 7 8 3 3 +8 8 8 8 8 9 4 4 +9 9 9 9 9 10 4 4 +10 10 10 10 10 11 5 5 +20 20 20 NULL NULL 20 20 20 +21 20 20 NULL NULL 20 20 20 +22 20 20 NULL NULL 20 20 20 +30 31 32 33 34 30 30 30 +37 31 32 NULL 37 37 37 37 +38 31 32 NULL 38 37 37 37 +39 31 32 NULL 39 37 37 37 +40 40 40 40 40 40 40 40 +DROP TABLE t1; +SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ; +SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ; +SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ; +CREATE TABLE t1 (id1 INT NOT NULL, id2 INT NOT NULL, id3 VARCHAR(32), +id4 INT, id5 VARCHAR(32), +value1 INT, value2 INT, value3 VARCHAR(32), +PRIMARY KEY (id1, id2) , +UNIQUE INDEX (id2, id1) , +UNIQUE INDEX (id2, id3, id4) , +INDEX (id1) , +INDEX (id3, id1) , +UNIQUE INDEX(id5) , +INDEX (id2, id5)) ENGINE=ROCKSDB; +SELECT COUNT(*) FROM t1; +COUNT(*) +10 +# Test inserting a key that returns duplicate error +INSERT INTO t1 VALUES (1, 1, 11, 11, 11, 11, 11, 11); +ERROR 23000: Duplicate entry '1-1' for key 'PRIMARY' +INSERT INTO t1 VALUES (5, 5, 11, 11, 11, 11, 11, 11); +ERROR 23000: Duplicate entry '5-5' for key 'PRIMARY' +INSERT INTO t1 VALUES (10, 10, 11, 11, 11, 11, 11, 11); +ERROR 23000: Duplicate entry '10-10' for key 'PRIMARY' +INSERT INTO t1 VALUES (11, 1, 1, 1, 11, 11, 11, 11); +ERROR 23000: Duplicate entry '1-1-1' for key 'id2_2' +INSERT INTO t1 VALUES (11, 5, 5, 5, 11, 11, 11, 11); +ERROR 23000: Duplicate entry '5-5-5' for key 'id2_2' +INSERT INTO t1 VALUES (11, 10, 10, 10, 11, 11, 11, 11); +ERROR 23000: Duplicate entry '10-10-10' for key 'id2_2' +INSERT INTO t1 VALUES (11, 11, 11, 11, 1, 11, 11, 11); +ERROR 23000: Duplicate entry '1' for key 'id5' +INSERT INTO t1 VALUES (11, 11, 11, 11, 5, 11, 11, 11); +ERROR 23000: Duplicate entry '5' for key 'id5' +INSERT INTO t1 VALUES (11, 11, 11, 11, 10, 11, 11, 11); +ERROR 23000: Duplicate entry '10' for key 'id5' +# Test updating a key that returns duplicate error +UPDATE t1 SET id2=1, id3=1, id4=1 WHERE id1=2; +ERROR 23000: Duplicate entry '1-1-1' for key 'id2_2' +UPDATE t1 SET id2=1, id3=1, id4=1; +ERROR 23000: Duplicate entry '1-1-1' for key 'id2_2' +SELECT COUNT(*) FROM t1; +COUNT(*) +10 +# Test updating a key to itself +UPDATE t1 set id2=id4; +UPDATE t1 set id5=id3, value1=value2; +UPDATE t1 set value3=value1; +# Test modifying values should not cause duplicates +UPDATE t1 SET value1=value3+1; +UPDATE t1 SET value3=value3 div 2; +UPDATE t1 SET value2=value3; +SELECT COUNT(*) FROM t1; +COUNT(*) +10 +# Test NULL values are considered unique +INSERT INTO t1 VALUES (20, 20, 20, NULL, NULL, 20, 20, 20); +INSERT INTO t1 VALUES (21, 20, 20, NULL, NULL, 20, 20, 20); +INSERT INTO t1 VALUES (22, 20, 20, NULL, NULL, 20, 20, 20); +SELECT COUNT(*) FROM t1; +COUNT(*) +13 +# Adding multiple rows where one of the rows fail the duplicate +# check should fail the whole statement +INSERT INTO t1 VALUES (23, 23, 23, 23, 23, 23, 23, 23), +(24, 24, 24, 24, 24, 24, 24, 24), +(25, 10, 10, 10, 25, 25, 25, 25), +(26, 26, 26, 26, 26, 26, 26, 26); +ERROR 23000: Duplicate entry '10-10-10' for key 'id2_2' +SELECT COUNT(*) FROM t1; +COUNT(*) +13 +BEGIN; +INSERT INTO t1 VALUES (30, 31, 32, 33, 34, 30, 30, 30); +BEGIN; +SELECT COUNT(*) FROM t1; +COUNT(*) +13 +# Primary key should prevent duplicate on insert +INSERT INTO t1 VALUES (30, 31, 30, 30, 30, 30, 30, 30); +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +# Primary key should prevent duplicate on update +UPDATE t1 SET id1=30, id2=31 WHERE id2=10; +ERROR HY000: Using Gap Lock without full unique key in multi-table or multi-statement transactions is not allowed. You need to either rewrite queries to use all unique key columns in WHERE equal conditions, or rewrite to single-table, single-statement transaction. Query: UPDATE t1 SET id1=30, id2=31 WHERE id2=10 +# Unique secondary key should prevent duplicate on insert +INSERT INTO t1 VALUES (31, 31, 32, 33, 30, 30, 30, 30); +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +INSERT INTO t1 VALUES (32, 32, 32, 32, 34, 32, 32, 32); +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +# Unique secondary key should prevent duplicate on update +UPDATE t1 SET id2=31, id3=32, id4=33 WHERE id2=8; +ERROR HY000: Using Gap Lock without full unique key in multi-table or multi-statement transactions is not allowed. You need to either rewrite queries to use all unique key columns in WHERE equal conditions, or rewrite to single-table, single-statement transaction. Query: UPDATE t1 SET id2=31, id3=32, id4=33 WHERE id2=8 +UPDATE t1 SET id5=34 WHERE id2=8; +ERROR HY000: Using Gap Lock without full unique key in multi-table or multi-statement transactions is not allowed. You need to either rewrite queries to use all unique key columns in WHERE equal conditions, or rewrite to single-table, single-statement transaction. Query: UPDATE t1 SET id5=34 WHERE id2=8 +# Adding multiple rows where one of the rows fail the duplicate +# check should fail the whole statement +INSERT INTO t1 VALUES (35, 35, 35, 35, 35, 35, 35, 35), +(36, 36, 36, 36, 36, 36, 36, 36), +(37, 31, 32, 33, 37, 37, 37, 37), +(38, 38, 38, 38, 38, 38, 38, 38); +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +INSERT INTO t1 VALUES (35, 35, 35, 35, 35, 35, 35, 35), +(36, 36, 36, 36, 36, 36, 36, 36), +(37, 37, 37, 37, 34, 37, 37, 37), +(38, 38, 38, 38, 38, 38, 38, 38); +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +# NULL values are unique and duplicates in value fields are ignored +INSERT INTO t1 VALUES (37, 31, 32, NULL, 37, 37, 37, 37), +(38, 31, 32, NULL, 38, 37, 37, 37), +(39, 31, 32, NULL, 39, 37, 37, 37); +SELECT COUNT(*) FROM t1; +COUNT(*) +16 +# Fail on duplicate key update for row added in our transaction +UPDATE t1 SET id5=37 WHERE id1=38; +ERROR HY000: Using Gap Lock without full unique key in multi-table or multi-statement transactions is not allowed. You need to either rewrite queries to use all unique key columns in WHERE equal conditions, or rewrite to single-table, single-statement transaction. Query: UPDATE t1 SET id5=37 WHERE id1=38 +# Fail on lock timeout for row modified in another transaction +UPDATE t1 SET id5=34 WHERE id1=38; +ERROR HY000: Using Gap Lock without full unique key in multi-table or multi-statement transactions is not allowed. You need to either rewrite queries to use all unique key columns in WHERE equal conditions, or rewrite to single-table, single-statement transaction. Query: UPDATE t1 SET id5=34 WHERE id1=38 +# NULL values are unique +UPDATE t1 SET id5=NULL WHERE value1 > 37; +ERROR HY000: Using Gap Lock without full unique key in multi-table or multi-statement transactions is not allowed. You need to either rewrite queries to use all unique key columns in WHERE equal conditions, or rewrite to single-table, single-statement transaction. Query: UPDATE t1 SET id5=NULL WHERE value1 > 37 +COMMIT; +COMMIT; +BEGIN; +SELECT COUNT(*) FROM t1; +COUNT(*) +17 +BEGIN; +INSERT INTO t1 VALUES (40, 40, 40, 40, 40, 40, 40, 40); +# When transaction is pending, fail on lock acquisition +INSERT INTO t1 VALUES (40, 40, 40, 40, 40, 40, 40, 40); +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +INSERT INTO t1 VALUES (41, 40, 40, 40, 40, 40, 40, 40); +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +SELECT COUNT(*) FROM t1; +COUNT(*) +17 +COMMIT; +# When transaction is committed, fail on duplicate key +INSERT INTO t1 VALUES (40, 40, 40, 40, 40, 40, 40, 40); +Got one of the listed errors +INSERT INTO t1 VALUES (41, 40, 40, 40, 40, 40, 40, 40); +ERROR 23000: Duplicate entry '40-40-40' for key 'id2_2' +ROLLBACK; +SELECT * FROM t1; +id1 id2 id3 id4 id5 value1 value2 value3 +1 1 1 1 1 2 0 0 +2 2 2 2 2 3 1 1 +3 3 3 3 3 4 1 1 +4 4 4 4 4 5 2 2 +5 5 5 5 5 6 2 2 +6 6 6 6 6 7 3 3 +7 7 7 7 7 8 3 3 +8 8 8 8 8 9 4 4 +9 9 9 9 9 10 4 4 +10 10 10 10 10 11 5 5 +20 20 20 NULL NULL 20 20 20 +21 20 20 NULL NULL 20 20 20 +22 20 20 NULL NULL 20 20 20 +30 31 32 33 34 30 30 30 +37 31 32 NULL 37 37 37 37 +38 31 32 NULL 38 37 37 37 +39 31 32 NULL 39 37 37 37 +40 40 40 40 40 40 40 40 +DROP TABLE t1; +# +# Issue #88: Creating unique index over column with duplicate values succeeds +# +create table t1 (pk int primary key, a int) engine=rocksdb; +insert into t1 values +(1, 1), +(2, 2), +(3, 3), +(4, 1), +(5, 5); +alter table t1 add unique(a); +ERROR 23000: Duplicate entry '1' for key 'a' +drop table t1; +# +# Issue #111 +# +CREATE TABLE t2 (pk int, a int, PRIMARY KEY (pk, a), UNIQUE KEY (a)) ENGINE=ROCKSDB PARTITION BY KEY (a) PARTITIONS 16; +INSERT INTO t2 VALUES (1,1); +INSERT INTO t2 VALUES (1,1); +ERROR 23000: Duplicate entry '1-1' for key 'PRIMARY' +INSERT INTO t2 VALUES (2,1); +ERROR 23000: Duplicate entry '1' for key 'a' +DROP TABLE t2; +# +# Issue #491 (https://github.com/facebook/mysql-5.6/issues/491) +# +CREATE TABLE t (a BLOB, PRIMARY KEY(a(2)), UNIQUE KEY (a(1))) engine=rocksdb; +INSERT INTO t VALUES('a'); +CHECK TABLE t EXTENDED; +Table Op Msg_type Msg_text +test.t check status OK +DROP TABLE t; +CREATE TABLE t (a VARCHAR(255), PRIMARY KEY(a), UNIQUE KEY (a(1))) engine=rocksdb; +INSERT INTO t VALUES('a'); +CHECK TABLE t EXTENDED; +Table Op Msg_type Msg_text +test.t check status OK +DROP TABLE t; +CREATE TABLE t (a VARCHAR(255), PRIMARY KEY(a(2)), UNIQUE KEY (a(1))) engine=rocksdb; +INSERT INTO t VALUES('a'); +CHECK TABLE t EXTENDED; +Table Op Msg_type Msg_text +test.t check status OK +DROP TABLE t; diff --git a/mysql-test/suite/rocksdb/r-native-partitioning/upgrade_parts_from_prev_ver.result b/mysql-test/suite/rocksdb/r-native-partitioning/upgrade_parts_from_prev_ver.result new file mode 100644 index 000000000000..47f65f733e95 --- /dev/null +++ b/mysql-test/suite/rocksdb/r-native-partitioning/upgrade_parts_from_prev_ver.result @@ -0,0 +1,65 @@ +# Copy the remote tablespace & DB zip files from suite location to working location. +# Check that the file exists in the working folder. +# Stop DB server which was created by MTR default +######### +# Test for "ALTER TABLE ... UPGRADE PARTITIONING" +### +# Unzip the zip file. +# Create a bootstrap file in temp location +MYSQL_TMP_DIR/bootstrap.log +# restart: +# Check test table before upgrade +SHOW CREATE TABLE test.t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(10) unsigned NOT NULL, + PRIMARY KEY (`a`) +) ENGINE=ROCKSDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (100) ENGINE = ROCKSDB, + PARTITION p1 VALUES LESS THAN (200) ENGINE = ROCKSDB, + PARTITION p2 VALUES LESS THAN (300) ENGINE = ROCKSDB, + PARTITION p3 VALUES LESS THAN (400) ENGINE = ROCKSDB) */ +Warnings: +Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. +SELECT * FROM test.t1 ORDER BY a; +a +50 +55 +250 +255 +350 +355 +db.opt +t1.frm +t1.par +# Upgrade +ALTER TABLE test.t1 UPGRADE PARTITIONING; +Warnings: +Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. +# Check test table after upgrade +SHOW CREATE TABLE test.t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(10) unsigned NOT NULL, + PRIMARY KEY (`a`) +) ENGINE=ROCKSDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (100) ENGINE = ROCKSDB, + PARTITION p1 VALUES LESS THAN (200) ENGINE = ROCKSDB, + PARTITION p2 VALUES LESS THAN (300) ENGINE = ROCKSDB, + PARTITION p3 VALUES LESS THAN (400) ENGINE = ROCKSDB) */ +SELECT * FROM test.t1 ORDER BY a; +a +50 +55 +250 +255 +350 +355 +db.opt +t1.frm +# Stop the server +# Remove data directory +# Restart the server with default options. +# restart diff --git a/mysql-test/suite/rocksdb/r-native-partitioning/validate_datadic.result b/mysql-test/suite/rocksdb/r-native-partitioning/validate_datadic.result new file mode 100644 index 000000000000..56adae64a35e --- /dev/null +++ b/mysql-test/suite/rocksdb/r-native-partitioning/validate_datadic.result @@ -0,0 +1,9 @@ +CREATE TABLE t1 (pk int primary key) ENGINE=ROCKSDB; +CREATE TABLE t2 (pk int primary key) ENGINE=ROCKSDB PARTITION BY KEY(pk) PARTITIONS 4; +# restart +# restart:--log-error=MYSQLTEST_VARDIR/tmp/validate_datadic.err --rocksdb_validate_tables=2 +"Expect errors that we are missing two .frm files" +# restart:--log-error=MYSQLTEST_VARDIR/tmp/validate_datadic.err --rocksdb_validate_tables=2 +"Expect an error that we have an extra .frm file" +# restart +DROP TABLE t1, t2; diff --git a/mysql-test/suite/rocksdb/r/corrupted_data_reads_debug.result b/mysql-test/suite/rocksdb/r/corrupted_data_reads_debug.result index b13cf7c556e0..260420865c1c 100644 --- a/mysql-test/suite/rocksdb/r/corrupted_data_reads_debug.result +++ b/mysql-test/suite/rocksdb/r/corrupted_data_reads_debug.result @@ -20,7 +20,7 @@ set @tmp1=@@rocksdb_verify_row_debug_checksums; set rocksdb_verify_row_debug_checksums=1; set session debug= "+d,myrocks_simulate_bad_row_read1"; select * from t1 where pk=1; -ERROR HY000: Got error 208 'Found data corruption.' from ROCKSDB +ERROR HY000: Got error 209 'Found data corruption.' from ROCKSDB set session debug= "-d,myrocks_simulate_bad_row_read1"; set rocksdb_verify_row_debug_checksums=@tmp1; select * from t1 where pk=1; @@ -28,11 +28,11 @@ pk col1 1 1 set session debug= "+d,myrocks_simulate_bad_row_read2"; select * from t1 where pk=1; -ERROR HY000: Got error 208 'Found data corruption.' from ROCKSDB +ERROR HY000: Got error 209 'Found data corruption.' from ROCKSDB set session debug= "-d,myrocks_simulate_bad_row_read2"; set session debug= "+d,myrocks_simulate_bad_row_read3"; select * from t1 where pk=1; -ERROR HY000: Got error 208 'Found data corruption.' from ROCKSDB +ERROR HY000: Got error 209 'Found data corruption.' from ROCKSDB set session debug= "-d,myrocks_simulate_bad_row_read3"; insert into t1 values(4,'0123456789'); select * from t1; @@ -56,7 +56,7 @@ pk col1 ABCD 1 set session debug= "+d,myrocks_simulate_bad_pk_read1"; select * from t2; -ERROR HY000: Got error 208 'Found data corruption.' from ROCKSDB +ERROR HY000: Got error 209 'Found data corruption.' from ROCKSDB set session debug= "-d,myrocks_simulate_bad_pk_read1"; drop table t2; create table t2 ( @@ -69,6 +69,6 @@ pk col1 ABCD 1 set session debug= "+d,myrocks_simulate_bad_pk_read1"; select * from t2; -ERROR HY000: Got error 208 'Found data corruption.' from ROCKSDB +ERROR HY000: Got error 209 'Found data corruption.' from ROCKSDB set session debug= "-d,myrocks_simulate_bad_pk_read1"; drop table t2; diff --git a/mysql-test/suite/rocksdb/r/rocksdb.result b/mysql-test/suite/rocksdb/r/rocksdb.result index 97bc305d2eb4..a19d06b3e5f5 100644 --- a/mysql-test/suite/rocksdb/r/rocksdb.result +++ b/mysql-test/suite/rocksdb/r/rocksdb.result @@ -931,6 +931,7 @@ rocksdb_default_cf_options compression=kLZ4Compression;bottommost_compression=kL rocksdb_delayed_write_rate 0 rocksdb_delete_obsolete_files_period_micros 21600000000 rocksdb_enable_bulk_load_api ON +rocksdb_enable_native_partition OFF rocksdb_enable_thread_tracking ON rocksdb_enable_ttl ON rocksdb_enable_ttl_read_filtering ON diff --git a/mysql-test/suite/rocksdb/r/tbl_opt_data_index_dir.result b/mysql-test/suite/rocksdb/r/tbl_opt_data_index_dir.result index d3e94ba86818..336b89d7ef4f 100644 --- a/mysql-test/suite/rocksdb/r/tbl_opt_data_index_dir.result +++ b/mysql-test/suite/rocksdb/r/tbl_opt_data_index_dir.result @@ -1,7 +1,7 @@ CREATE TABLE t1 (a INT PRIMARY KEY, b CHAR(8)) ENGINE=rocksdb DATA DIRECTORY = '/foo/bar/data'; -ERROR HY000: Got error 204 'Specifying DATA DIRECTORY for an individual table is not supported.' from ROCKSDB +ERROR HY000: Got error 205 'Specifying DATA DIRECTORY for an individual table is not supported.' from ROCKSDB CREATE TABLE t1 (a INT PRIMARY KEY, b CHAR(8)) ENGINE=rocksdb INDEX DIRECTORY = '/foo/bar/index'; -ERROR HY000: Got error 205 'Specifying INDEX DIRECTORY for an individual table is not supported.' from ROCKSDB +ERROR HY000: Got error 206 'Specifying INDEX DIRECTORY for an individual table is not supported.' from ROCKSDB CREATE TABLE t1 (id INT NOT NULL PRIMARY KEY) ENGINE=rocksdb PARTITION BY RANGE (id) ( PARTITION P0 VALUES LESS THAN (1000) @@ -10,7 +10,7 @@ PARTITION P1 VALUES LESS THAN (2000) DATA DIRECTORY = '/foo/bar/data/', PARTITION P2 VALUES LESS THAN (MAXVALUE) ); -ERROR HY000: Got error 204 'Specifying DATA DIRECTORY for an individual table is not supported.' from ROCKSDB +ERROR HY000: Got error 205 'Specifying DATA DIRECTORY for an individual table is not supported.' from ROCKSDB CREATE TABLE t1 (id int not null primary key) ENGINE=rocksdb PARTITION BY RANGE (id) ( PARTITION P0 VALUES LESS THAN (1000) @@ -19,4 +19,4 @@ PARTITION P1 VALUES LESS THAN (2000) INDEX DIRECTORY = '/foo/bar/data/', PARTITION P2 VALUES LESS THAN (MAXVALUE) ); -ERROR HY000: Got error 205 'Specifying INDEX DIRECTORY for an individual table is not supported.' from ROCKSDB +ERROR HY000: Got error 206 'Specifying INDEX DIRECTORY for an individual table is not supported.' from ROCKSDB diff --git a/mysql-test/suite/rocksdb/t/bulk_load_errors.test b/mysql-test/suite/rocksdb/t/bulk_load_errors.test index 53fc389e7f3a..0b91441a59a1 100644 --- a/mysql-test/suite/rocksdb/t/bulk_load_errors.test +++ b/mysql-test/suite/rocksdb/t/bulk_load_errors.test @@ -36,7 +36,7 @@ SHOW VARIABLES LIKE 'rocksdb_bulk_load'; SELECT * FROM t1; --let SEARCH_FILE=$LOG1 ---let SEARCH_PATTERN=RocksDB: Error 207 finalizing last SST file while setting bulk loading variable +--let SEARCH_PATTERN=RocksDB: Error 208 finalizing last SST file while setting bulk loading variable --source include/search_pattern_in_file.inc --let LOG2=$MYSQLTEST_VARDIR/tmp/rocksdb.bulk_load_errors.2.err @@ -61,7 +61,7 @@ SELECT * FROM t1; --source include/wait_until_count_sessions.inc --let SEARCH_FILE=$LOG2 ---let SEARCH_PATTERN=RocksDB: Error 207 finalizing last SST file while disconnecting +--let SEARCH_PATTERN=RocksDB: Error 208 finalizing last SST file while disconnecting --source include/search_pattern_in_file.inc --let LOG3=$MYSQLTEST_VARDIR/tmp/rocksdb.bulk_load_errors.3.err @@ -110,7 +110,7 @@ DROP TABLE t1; SET @@global.table_open_cache=@orig_table_open_cache; --let SEARCH_FILE=$LOG3 ---let SEARCH_PATTERN=RocksDB: Error 207 finalizing bulk load while closing handler +--let SEARCH_PATTERN=RocksDB: Error 208 finalizing bulk load while closing handler --source include/search_pattern_in_file.inc --let $restart_parameters= diff --git a/mysql-test/suite/rocksdb/t/disable_native_partitioning.test b/mysql-test/suite/rocksdb/t/disable_native_partitioning.test new file mode 100644 index 000000000000..d4396e222ada --- /dev/null +++ b/mysql-test/suite/rocksdb/t/disable_native_partitioning.test @@ -0,0 +1,6 @@ +--source include/have_rocksdb.inc +--source ../include/have_native_partitioning.inc + +--let $disable_native_partition_opt = "rocksdb_enable_native_partition" +--let $engine = RocksDB +--source ../../parts/inc/disable_native_partitioning.inc diff --git a/mysql-test/suite/rocksdb/t/show_engine.test b/mysql-test/suite/rocksdb/t/show_engine.test index c022a40ebae4..1d36a741d209 100644 --- a/mysql-test/suite/rocksdb/t/show_engine.test +++ b/mysql-test/suite/rocksdb/t/show_engine.test @@ -47,6 +47,7 @@ SELECT * FROM INFORMATION_SCHEMA.ROCKSDB_CFSTATS; --replace_column 2 # SELECT * FROM INFORMATION_SCHEMA.ROCKSDB_DBSTATS; +--sorted_result SELECT TABLE_SCHEMA, TABLE_NAME, PARTITION_NAME, COUNT(STAT_TYPE) FROM INFORMATION_SCHEMA.ROCKSDB_PERF_CONTEXT WHERE TABLE_SCHEMA = 'test' diff --git a/mysql-test/suite/rocksdb/t/upgrade_parts_from_prev_ver.test b/mysql-test/suite/rocksdb/t/upgrade_parts_from_prev_ver.test new file mode 100644 index 000000000000..6cba58594529 --- /dev/null +++ b/mysql-test/suite/rocksdb/t/upgrade_parts_from_prev_ver.test @@ -0,0 +1,32 @@ +--source include/have_util_unzip.inc +--source include/have_rocksdb.inc +--source ../../rocksdb/include/have_write_committed.inc +--source ../include/have_native_partitioning.inc + +#Zipped data directory was created with default 16K page size +#Innodb does not recognizes partition table created in linux from windows +#due to difference in path format. +--source include/not_windows.inc + +--source ../../parts/inc/update_parts_from_prev_ver_suppressions.inc + +--let $ADDITIONAL_OPTS= +--let $DATA_DIR_NAME=data_prev_ver_part_rocksdb + +# Set different paths for --datadir +--let $MYSQLD_DATADIR1=$MYSQL_TMP_DIR/$DATA_DIR_NAME +--let $DATA_ARCH_PATH=$MYSQL_TMP_DIR/$DATA_DIR_NAME.zip + +--echo # Copy the remote tablespace & DB zip files from suite location to working location. +--copy_file $MYSQLTEST_VARDIR/std_data/$DATA_DIR_NAME.zip $DATA_ARCH_PATH + +--echo # Check that the file exists in the working folder. +--file_exists $DATA_ARCH_PATH + +--echo # Stop DB server which was created by MTR default +--source include/shutdown_mysqld.inc + +--source ../../parts/inc/upgrade_parts_from_prev_ver_alter.inc + +--echo # Restart the server with default options. +--source include/start_mysqld.inc diff --git a/mysql-test/suite/tokudb.alter_table/combinations b/mysql-test/suite/tokudb.alter_table/combinations new file mode 100644 index 000000000000..bf6f90d8be10 --- /dev/null +++ b/mysql-test/suite/tokudb.alter_table/combinations @@ -0,0 +1,8 @@ +[non-native-partitioning] +loose-tokudb-enable-native-partition=off + +[native-partitioning] +loose-tokudb-enable-native-partition=on +mtr-result-dir = r-native-partitioning +mtr-tests-list = ai_part,drop_add_pk_part_104,hcad_part,rename_column_cold_part_104 + diff --git a/mysql-test/suite/tokudb.alter_table/r-native-partitioning/ai_part.result b/mysql-test/suite/tokudb.alter_table/r-native-partitioning/ai_part.result new file mode 100644 index 000000000000..6bfe78bbef85 --- /dev/null +++ b/mysql-test/suite/tokudb.alter_table/r-native-partitioning/ai_part.result @@ -0,0 +1,26 @@ +SET DEFAULT_STORAGE_ENGINE='TokuDB'; +DROP TABLE IF EXISTS foo; +SET SESSION tokudb_disable_slow_alter=1; +CREATE TABLE foo (a INT, b INT, PRIMARY KEY (a)) PARTITION BY HASH(a) PARTITIONS 2; +INSERT INTO foo VALUES (1,0),(2,0); +SHOW CREATE TABLE foo; +Table Create Table +foo CREATE TABLE `foo` ( + `a` int(11) NOT NULL, + `b` int(11) DEFAULT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (a) +PARTITIONS 2 */ +ALTER TABLE foo ADD KEY(b); +SHOW CREATE TABLE foo; +Table Create Table +foo CREATE TABLE `foo` ( + `a` int(11) NOT NULL, + `b` int(11) DEFAULT NULL, + PRIMARY KEY (`a`), + KEY `b` (`b`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (a) +PARTITIONS 2 */ +DROP TABLE foo; diff --git a/mysql-test/suite/tokudb.alter_table/r-native-partitioning/drop_add_pk_part_104.result b/mysql-test/suite/tokudb.alter_table/r-native-partitioning/drop_add_pk_part_104.result new file mode 100644 index 000000000000..0a66e35f0a79 --- /dev/null +++ b/mysql-test/suite/tokudb.alter_table/r-native-partitioning/drop_add_pk_part_104.result @@ -0,0 +1,5 @@ +set default_storage_engine='tokudb'; +drop table if exists t; +create table t (x int, y int, primary key (x)) partition by hash(x) partitions 1; +alter table t drop primary key, add primary key(x); +drop table t; diff --git a/mysql-test/suite/tokudb.alter_table/r-native-partitioning/hcad_part.result b/mysql-test/suite/tokudb.alter_table/r-native-partitioning/hcad_part.result new file mode 100644 index 000000000000..1c7ee865451a --- /dev/null +++ b/mysql-test/suite/tokudb.alter_table/r-native-partitioning/hcad_part.result @@ -0,0 +1,25 @@ +SET DEFAULT_STORAGE_ENGINE='TokuDB'; +DROP TABLE IF EXISTS foo; +SET SESSION tokudb_disable_slow_alter=1; +CREATE TABLE foo (a INT, b INT, PRIMARY KEY (a)) PARTITION BY HASH(a) PARTITIONS 2; +SHOW CREATE TABLE foo; +Table Create Table +foo CREATE TABLE `foo` ( + `a` int(11) NOT NULL, + `b` int(11) DEFAULT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (a) +PARTITIONS 2 */ +ALTER TABLE foo ADD COLUMN c INT; +SHOW CREATE TABLE foo; +Table Create Table +foo CREATE TABLE `foo` ( + `a` int(11) NOT NULL, + `b` int(11) DEFAULT NULL, + `c` int(11) DEFAULT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (a) +PARTITIONS 2 */ +DROP TABLE foo; diff --git a/mysql-test/suite/tokudb.alter_table/r-native-partitioning/rename_column_cold_part_104.result b/mysql-test/suite/tokudb.alter_table/r-native-partitioning/rename_column_cold_part_104.result new file mode 100644 index 000000000000..82c0dc35025b --- /dev/null +++ b/mysql-test/suite/tokudb.alter_table/r-native-partitioning/rename_column_cold_part_104.result @@ -0,0 +1,6 @@ +set default_storage_engine='tokudb'; +set tokudb_disable_hot_alter=1; +drop table if exists t; +create table t (x int, y int, primary key (x)) partition by hash(x) partitions 2; +alter table t change column y newy int; +drop table t; diff --git a/mysql-test/suite/tokudb.bugs/combinations b/mysql-test/suite/tokudb.bugs/combinations new file mode 100644 index 000000000000..465ce88b7450 --- /dev/null +++ b/mysql-test/suite/tokudb.bugs/combinations @@ -0,0 +1,8 @@ +[non-native-partitioning] +loose-tokudb-enable-native-partition=off + +[native-partitioning] +loose-tokudb-enable-native-partition=on +mtr-result-dir = r-native-partitioning +mtr-tests-list = alter_part_tokudb_bug_155,db756_card_part_hash,db756_card_part_hash_1,db756_card_part_hash_1_pick,db756_card_part_hash_2,db756_card_part_hash_2_pick,db757_part_alter_analyze,db766,db801,db811,db811s + diff --git a/mysql-test/suite/tokudb.bugs/r-native-partitioning/alter_part_tokudb_bug_155.result b/mysql-test/suite/tokudb.bugs/r-native-partitioning/alter_part_tokudb_bug_155.result new file mode 100644 index 000000000000..02a9cf8ab3ad --- /dev/null +++ b/mysql-test/suite/tokudb.bugs/r-native-partitioning/alter_part_tokudb_bug_155.result @@ -0,0 +1,33 @@ +DROP TABLE IF EXISTS `test`; +CREATE TABLE `test` ( +`id` bigint(20) unsigned NOT NULL, +`timestamp` timestamp NOT NULL DEFAULT '1985-01-19 09:00:00', +`col1` smallint(5) unsigned NOT NULL, +`col2` smallint(5) unsigned DEFAULT NULL, +`col3` smallint(6) DEFAULT NULL, +`col4` tinyint(4) DEFAULT NULL, +`col5` smallint(6) DEFAULT NULL, +`col6` tinyint(4) DEFAULT NULL, +`col7` smallint(6) DEFAULT NULL, +`col8` smallint(6) DEFAULT NULL, +`col9` smallint(6) DEFAULT NULL, +`col10` smallint(6) DEFAULT NULL, +`col11` smallint(6) DEFAULT NULL, +`col12` smallint(6) DEFAULT NULL, +`col13` tinyint(4) DEFAULT NULL, +`col14` int(11) DEFAULT NULL, +`col15` int(11) DEFAULT NULL, +`col16` tinyint(4) DEFAULT NULL, +`col17` smallint(6) DEFAULT NULL, +PRIMARY KEY (`id`,`timestamp`) +) ENGINE=TokuDB DEFAULT CHARSET=utf8 ROW_FORMAT=TOKUDB_LZMA +PARTITION BY RANGE (UNIX_TIMESTAMP(timestamp)) +(PARTITION p201312 VALUES LESS THAN (1388563200) ENGINE = TokuDB, +PARTITION p201401 VALUES LESS THAN (1391241600) ENGINE = TokuDB, +PARTITION pMax VALUES LESS THAN MAXVALUE ENGINE = TokuDB); +INSERT INTO `test` VALUES (138,'2013-11-04 10:47:01',2560,29952,-1025,-120,-12545,5,2560,3840,5120,6400,7680,0,3,-1761607678,419430400,-12,NULL),(138,'2013-11-04 10:47:02',62464,54017,-5633,-85,-3585,6,2816,4096,5376,6656,7936,1280,-110,50331673,419430402,-12,NULL),(138,'2013-11-04 10:47:03',24064,42497,-3585,-108,255,7,3072,4352,5632,6912,8192,2560,88,268435477,419430422,-12,NULL),(138,'2013-11-04 10:47:04',62464,54017,-5633,-90,4095,8,3328,4608,5888,7168,8448,3328,122,872415253,419430402,-12,NULL),(138,'2013-11-04 10:47:05',24064,42497,-3585,-46,8447,9,3584,4864,6144,7424,8704,3840,-38,-788529122,419430417,-12,NULL),(139,'2013-11-04 10:48:01',2560,29952,-1025,-120,-12545,5,2560,3840,5120,6400,7680,0,3,-1761607678,419430400,-12,NULL),(139,'2013-11-04 10:48:02',62464,54017,-5633,-85,-3585,6,2816,4096,5376,6656,7936,1280,-110,50331673,419430402,-12,NULL),(139,'2013-11-04 10:48:03',24064,42497,-3585,-108,255,7,3072,4352,5632,6912,8192,2560,88,268435477,419430422,-12,NULL),(139,'2013-11-04 10:48:04',62464,54017,-5633,-90,4095,8,3328,4608,5888,7168,8448,3328,122,872415253,419430402,-12,NULL),(139,'2013-11-04 10:48:05',24064,42497,-3585,-46,8447,9,3584,4864,6144,7424,8704,3840,-38,-788529122,419430417,-12,NULL),(140,'2013-11-04 10:49:01',2560,29952,-1025,-120,-12545,5,2560,3840,5120,6400,7680,0,3,-1761607678,419430400,-12,NULL),(140,'2013-11-04 10:49:02',62464,54017,-5633,-85,-3585,6,2816,4096,5376,6656,7936,1280,-110,50331673,419430402,-12,NULL),(140,'2013-11-04 10:49:03',24064,42497,-3585,-108,255,7,3072,4352,5632,6912,8192,2560,88,268435477,419430422,-12,NULL),(140,'2013-11-04 10:49:04',62464,54017,-5633,-90,4095,8,3328,4608,5888,7168,8448,3328,122,872415253,419430402,-12,NULL),(140,'2013-11-04 10:49:05',24064,42497,-3585,-46,8447,9,3584,4864,6144,7424,8704,3840,-38,-788529122,419430417,-12,NULL),(141,'2013-11-04 10:50:01',2560,29952,-1025,-120,-12545,5,2560,3840,5120,6400,7680,0,3,-1761607678,419430400,-12,NULL),(141,'2013-11-04 10:50:02',62464,54017,-5633,-85,-3585,6,2816,4096,5376,6656,7936,1280,-110,50331673,419430402,-12,NULL),(141,'2013-11-04 10:50:03',24064,42497,-3585,-108,255,7,3072,4352,5632,6912,8192,2560,88,268435477,419430422,-12,NULL),(141,'2013-11-04 10:50:04',62464,54017,-5633,-90,4095,8,3328,4608,5888,7168,8448,3328,122,872415253,419430402,-12,NULL),(141,'2013-11-04 10:50:05',24064,42497,-3585,-46,8447,9,3584,4864,6144,7424,8704,3840,-38,-788529122,419430417,-12,NULL),(142,'2013-11-01 07:00:01',2560,29952,-1025,-120,-9985,7,3072,4352,5632,6912,8192,256,34,2063597570,167772160,-12,NULL),(142,'2013-11-01 07:00:02',62464,54017,-5633,-80,-7425,8,3328,4608,5888,7168,8448,768,14,-939524074,771751937,-12,NULL),(142,'2013-11-01 07:00:03',24064,42497,-3585,-70,2815,9,3584,4864,6144,7424,8704,1792,82,1694498837,419430401,-12,NULL),(143,'2013-11-04 08:00:01',2560,29952,-1025,-120,-9985,7,3072,4352,5632,6912,8192,256,34,2063597570,167772160,-12,NULL),(143,'2013-11-04 08:00:02',62464,54017,-5633,-80,-7425,8,3328,4608,5888,7168,8448,768,14,-939524074,771751937,-12,NULL),(143,'2013-11-04 08:00:03',24064,42497,-3585,-70,2815,9,3584,4864,6144,7424,8704,1792,82,1694498837,419430401,-12,NULL),(144,'2013-11-04 18:47:01',2560,29952,-1025,-120,-9985,7,3072,4352,5632,6912,8192,256,34,2063597570,167772160,-12,NULL),(144,'2013-11-04 18:47:02',62464,54017,-5633,-80,-7425,8,3328,4608,5888,7168,8448,768,14,-939524074,771751937,-12,NULL),(144,'2013-11-04 18:47:03',24064,42497,-3585,-70,2815,9,3584,4864,6144,7424,8704,1792,82,1694498837,419430401,-12,NULL),(144,'2013-11-04 18:47:04',62464,54017,-5633,-60,5375,10,3840,5120,6400,7680,8960,2048,-60,-1627389935,1207959552,-12,NULL),(144,'2013-11-04 18:47:05',24064,42497,-3585,-50,7935,11,4096,5376,6656,7936,9216,2304,-96,-738197487,570425345,-12,NULL),(144,'2013-11-04 18:47:06',2560,29952,-1025,-120,-9985,7,3072,4352,5632,6912,8192,256,34,2063597570,167772160,-12,NULL),(144,'2013-11-04 18:47:07',2560,29952,-1025,-120,-9985,7,3072,4352,5632,6912,8192,256,34,2063597570,167772160,-12,NULL),(144,'2013-11-04 18:47:08',2560,29952,-1025,-120,-9985,7,3072,4352,5632,6912,8192,256,34,2063597570,167772160,-12,NULL),(144,'2013-11-04 18:47:09',2560,29952,-1025,-120,-9985,7,3072,4352,5632,6912,8192,256,34,2063597570,167772160,-12,NULL),(145,'2013-11-04 18:50:01',2560,29952,-1025,-120,-9985,7,3072,4352,5632,6912,8192,256,34,2063597570,167772160,-12,NULL),(145,'2013-11-04 18:50:02',62464,54017,-5633,-80,-7425,8,3328,4608,5888,7168,8448,768,14,-939524074,771751937,-12,NULL),(145,'2013-11-04 18:50:03',24064,42497,-3585,-70,2815,9,3584,4864,6144,7424,8704,1792,82,1694498837,419430401,-12,NULL),(145,'2013-11-04 18:50:04',62464,54017,-5633,-60,5375,10,3840,5120,6400,7680,8960,2048,-60,-1627389935,1207959552,-12,NULL),(145,'2013-11-04 18:50:05',24064,42497,-3585,-50,7935,11,4096,5376,6656,7936,9216,2304,-96,-738197487,570425345,-12,NULL),(145,'2013-11-04 18:50:06',2560,29952,-1025,-120,-9985,7,3072,4352,5632,6912,8192,256,34,2063597570,167772160,-12,NULL),(145,'2013-11-04 18:50:07',2560,29952,-1025,-120,-9985,7,3072,4352,5632,6912,8192,256,34,2063597570,167772160,-12,NULL),(145,'2013-11-04 18:50:08',2560,29952,-1025,-120,-9985,7,3072,4352,5632,6912,8192,256,34,2063597570,167772160,-12,NULL),(145,'2013-11-04 18:50:09',2560,29952,-1025,-120,-9985,7,3072,4352,5632,6912,8192,256,34,2063597570,167772160,-12,NULL),(146,'2013-11-05 07:59:01',2560,29952,-1025,-120,-9985,7,3072,4352,5632,6912,8192,256,34,2063597570,167772160,-12,NULL),(146,'2013-11-05 07:59:02',62464,54017,-5633,-80,-7425,8,3328,4608,5888,7168,8448,768,14,-939524074,771751937,-12,NULL),(146,'2013-11-05 07:59:03',24064,42497,-3585,-70,2815,9,3584,4864,6144,7424,8704,1792,82,1694498837,419430401,-12,NULL),(147,'2013-12-01 07:59:01',2560,29952,-1025,-120,-9985,7,3072,4352,5632,6912,8192,256,34,2063597570,167772160,-12,NULL),(147,'2013-12-01 07:59:02',62464,54017,-5633,-80,-7425,8,3328,4608,5888,7168,8448,768,14,-939524074,771751937,-12,NULL),(147,'2013-12-01 07:59:03',24064,42497,-3585,-70,2815,9,3584,4864,6144,7424,8704,1792,82,1694498837,419430401,-12,NULL),(148,'2013-11-04 18:47:01',2560,29952,-1025,-120,-9985,7,3072,4352,5632,6912,8192,256,34,2063597570,167772160,-12,NULL),(148,'2013-11-04 18:47:02',62464,54017,-5633,-80,-7425,8,3328,4608,5888,7168,8448,768,14,-939524074,771751937,-12,NULL),(148,'2013-11-04 18:47:03',24064,42497,-3585,-70,2815,9,3584,4864,6144,7424,8704,1792,82,1694498837,419430401,-12,NULL),(148,'2013-11-04 18:47:04',62464,54017,-5633,-60,5375,10,3840,5120,6400,7680,8960,2048,-60,-1627389935,1207959552,-12,NULL),(148,'2013-11-04 18:47:05',24064,42497,-3585,-50,7935,11,4096,5376,6656,7936,9216,2304,-96,-738197487,570425345,-12,NULL),(148,'2013-11-04 18:47:06',2560,29952,-1025,-120,-9985,7,3072,4352,5632,6912,8192,256,34,2063597570,167772160,-12,NULL),(148,'2013-11-04 18:47:07',2560,29952,-1025,-120,-9985,7,3072,4352,5632,6912,8192,256,34,2063597570,167772160,-12,NULL),(148,'2013-11-04 18:47:08',2560,29952,-1025,-120,-9985,7,3072,4352,5632,6912,8192,256,34,2063597570,167772160,-12,NULL),(148,'2013-11-04 18:47:09',2560,29952,-1025,-120,-9985,7,3072,4352,5632,6912,8192,256,34,2063597570,167772160,-12,NULL),(149,'2013-11-04 18:50:01',2560,29952,-1025,-120,-9985,7,3072,4352,5632,6912,8192,256,34,2063597570,167772160,-12,NULL),(149,'2013-11-04 18:50:02',62464,54017,-5633,-80,-7425,8,3328,4608,5888,7168,8448,768,14,-939524074,771751937,-12,NULL),(149,'2013-11-04 18:50:03',24064,42497,-3585,-70,2815,9,3584,4864,6144,7424,8704,1792,82,1694498837,419430401,-12,NULL),(149,'2013-11-04 18:50:04',62464,54017,-5633,-60,5375,10,3840,5120,6400,7680,8960,2048,-60,-1627389935,1207959552,-12,NULL),(149,'2013-11-04 18:50:05',24064,42497,-3585,-50,7935,11,4096,5376,6656,7936,9216,2304,-96,-738197487,570425345,-12,NULL),(149,'2013-11-04 18:50:06',2560,29952,-1025,-120,-9985,7,3072,4352,5632,6912,8192,256,34,2063597570,167772160,-12,NULL),(149,'2013-11-04 18:50:07',2560,29952,-1025,-120,-9985,7,3072,4352,5632,6912,8192,256,34,2063597570,167772160,-12,NULL),(149,'2013-11-04 18:50:08',2560,29952,-1025,-120,-9985,7,3072,4352,5632,6912,8192,256,34,2063597570,167772160,-12,NULL),(149,'2013-11-04 18:50:09',2560,29952,-1025,-120,-9985,7,3072,4352,5632,6912,8192,256,34,2063597570,167772160,-12,NULL),(210,'2013-12-16 02:13:44',2560,29952,-1025,-44,-12545,1,512,1024,23040,3328,6144,0,-56,1610612736,16777217,-12,NULL),(210,'2013-12-16 02:13:45',62464,54017,-5633,-50,-2305,5,768,1792,23808,15616,4096,2048,-86,704643091,167772169,-12,NULL),(210,'2013-12-16 02:13:46',24064,42497,-3585,-110,255,60,1792,3328,-30720,6656,16128,2816,-76,570425441,402653202,-12,NULL),(210,'2013-12-16 02:13:47',62464,54017,-5633,-60,2815,-106,2816,6400,8704,18433,4096,3328,31,2046820434,587203975,-12,NULL),(210,'2013-12-16 02:13:48',24064,42497,-3585,116,8703,94,3329,6912,-30208,24065,3584,3840,29,654311504,1207959566,-12,NULL),(211,'2013-12-16 15:13:44',2560,29952,-1025,-44,-12545,1,512,1024,23040,3328,6144,0,-56,1610612736,16777217,-12,NULL); +ALTER TABLE test REORGANIZE PARTITION p201312 INTO (PARTITION pOld VALUES LESS THAN (1378018800),PARTITION p201309 VALUES LESS THAN (1380610800),PARTITION p201310 VALUES LESS THAN (1383289200),PARTITION p201311 VALUES LESS THAN (1385884800),PARTITION p201312 VALUES LESS THAN (1388563200)); +create table test_copy like test; +insert into test_copy select * from test; +include/diff_tables.inc [test, test_copy] +drop table test,test_copy; diff --git a/mysql-test/suite/tokudb.bugs/r-native-partitioning/db756_card_part_hash.result b/mysql-test/suite/tokudb.bugs/r-native-partitioning/db756_card_part_hash.result new file mode 100644 index 000000000000..52b1597d4569 --- /dev/null +++ b/mysql-test/suite/tokudb.bugs/r-native-partitioning/db756_card_part_hash.result @@ -0,0 +1,23 @@ +set default_storage_engine='tokudb'; +drop table if exists t; +set session tokudb_auto_analyze = 0; +set session tokudb_analyze_in_background = 0; +create table t (id int, x int, primary key (id), key (x)) partition by hash(id) partitions 2; +show indexes from t; +Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment +t 0 PRIMARY 1 id A 2 NULL NULL BTREE +t 1 x 1 x A 2 NULL NULL YES BTREE +insert into t values (1,1),(3,1),(5,1); +insert into t values (2,1),(4,1),(6,1); +show indexes from t; +Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment +t 0 PRIMARY 1 id A 6 NULL NULL BTREE +t 1 x 1 x A 6 NULL NULL YES BTREE +analyze table t; +Table Op Msg_type Msg_text +test.t analyze status OK +show indexes from t; +Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment +t 0 PRIMARY 1 id A 6 NULL NULL BTREE +t 1 x 1 x A 2 NULL NULL YES BTREE +drop table t; diff --git a/mysql-test/suite/tokudb.bugs/r-native-partitioning/db756_card_part_hash_1.result b/mysql-test/suite/tokudb.bugs/r-native-partitioning/db756_card_part_hash_1.result new file mode 100644 index 000000000000..910c5e565aed --- /dev/null +++ b/mysql-test/suite/tokudb.bugs/r-native-partitioning/db756_card_part_hash_1.result @@ -0,0 +1,22 @@ +set default_storage_engine='tokudb'; +drop table if exists t; +set session tokudb_auto_analyze = 0; +set session tokudb_analyze_in_background = 0; +create table t (id int, x int, primary key (id), key (x)) partition by hash(id) partitions 2; +show indexes from t; +Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment +t 0 PRIMARY 1 id A 2 NULL NULL BTREE +t 1 x 1 x A 2 NULL NULL YES BTREE +insert into t values (1,1),(3,1),(5,1); +show indexes from t; +Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment +t 0 PRIMARY 1 id A 4 NULL NULL BTREE +t 1 x 1 x A 4 NULL NULL YES BTREE +analyze table t; +Table Op Msg_type Msg_text +test.t analyze status OK +show indexes from t; +Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment +t 0 PRIMARY 1 id A 4 NULL NULL BTREE +t 1 x 1 x A 1 NULL NULL YES BTREE +drop table t; diff --git a/mysql-test/suite/tokudb.bugs/r-native-partitioning/db756_card_part_hash_1_pick.result b/mysql-test/suite/tokudb.bugs/r-native-partitioning/db756_card_part_hash_1_pick.result new file mode 100644 index 000000000000..ee1980f41616 --- /dev/null +++ b/mysql-test/suite/tokudb.bugs/r-native-partitioning/db756_card_part_hash_1_pick.result @@ -0,0 +1,23 @@ +set default_storage_engine='tokudb'; +drop table if exists t; +set session tokudb_auto_analyze = 0; +set session tokudb_analyze_in_background = 0; +create table t (id int, x int, primary key (id), key (x)) partition by hash(id) partitions 2; +show indexes from t; +Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment +t 0 PRIMARY 1 id A 2 NULL NULL BTREE +t 1 x 1 x A 2 NULL NULL YES BTREE +insert into t values (1,1),(3,2),(5,3); +insert into t values (2,1),(4,1),(6,1),(8,1); +show indexes from t; +Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment +t 0 PRIMARY 1 id A 7 NULL NULL BTREE +t 1 x 1 x A 7 NULL NULL YES BTREE +analyze table t; +Table Op Msg_type Msg_text +test.t analyze status OK +show indexes from t; +Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment +t 0 PRIMARY 1 id A 7 NULL NULL BTREE +t 1 x 1 x A 7 NULL NULL YES BTREE +drop table t; diff --git a/mysql-test/suite/tokudb.bugs/r-native-partitioning/db756_card_part_hash_2.result b/mysql-test/suite/tokudb.bugs/r-native-partitioning/db756_card_part_hash_2.result new file mode 100644 index 000000000000..daf36511f600 --- /dev/null +++ b/mysql-test/suite/tokudb.bugs/r-native-partitioning/db756_card_part_hash_2.result @@ -0,0 +1,22 @@ +set default_storage_engine='tokudb'; +drop table if exists t; +set session tokudb_auto_analyze = 0; +set session tokudb_analyze_in_background = 0; +create table t (id int, x int, primary key (id), key (x)) partition by hash(id) partitions 2; +show indexes from t; +Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment +t 0 PRIMARY 1 id A 2 NULL NULL BTREE +t 1 x 1 x A 2 NULL NULL YES BTREE +insert into t values (2,1),(4,1),(6,1); +show indexes from t; +Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment +t 0 PRIMARY 1 id A 4 NULL NULL BTREE +t 1 x 1 x A 4 NULL NULL YES BTREE +analyze table t; +Table Op Msg_type Msg_text +test.t analyze status OK +show indexes from t; +Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment +t 0 PRIMARY 1 id A 4 NULL NULL BTREE +t 1 x 1 x A 4 NULL NULL YES BTREE +drop table t; diff --git a/mysql-test/suite/tokudb.bugs/r-native-partitioning/db756_card_part_hash_2_pick.result b/mysql-test/suite/tokudb.bugs/r-native-partitioning/db756_card_part_hash_2_pick.result new file mode 100644 index 000000000000..95a8b389d212 --- /dev/null +++ b/mysql-test/suite/tokudb.bugs/r-native-partitioning/db756_card_part_hash_2_pick.result @@ -0,0 +1,23 @@ +set default_storage_engine='tokudb'; +drop table if exists t; +set session tokudb_auto_analyze = 0; +set session tokudb_analyze_in_background = 0; +create table t (id int, x int, primary key (id), key (x)) partition by hash(id) partitions 2; +show indexes from t; +Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment +t 0 PRIMARY 1 id A 2 NULL NULL BTREE +t 1 x 1 x A 2 NULL NULL YES BTREE +insert into t values (1,1),(3,2),(5,3),(7,4); +insert into t values (2,1),(4,1),(6,1); +show indexes from t; +Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment +t 0 PRIMARY 1 id A 7 NULL NULL BTREE +t 1 x 1 x A 7 NULL NULL YES BTREE +analyze table t; +Table Op Msg_type Msg_text +test.t analyze status OK +show indexes from t; +Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment +t 0 PRIMARY 1 id A 7 NULL NULL BTREE +t 1 x 1 x A 7 NULL NULL YES BTREE +drop table t; diff --git a/mysql-test/suite/tokudb.bugs/r-native-partitioning/db757_part_alter_analyze.result b/mysql-test/suite/tokudb.bugs/r-native-partitioning/db757_part_alter_analyze.result new file mode 100644 index 000000000000..fb09e3d09fa1 --- /dev/null +++ b/mysql-test/suite/tokudb.bugs/r-native-partitioning/db757_part_alter_analyze.result @@ -0,0 +1,52 @@ +set default_storage_engine='tokudb'; +drop table if exists t; +set session tokudb_auto_analyze = 0; +set session tokudb_analyze_in_background = 0; +create table t (id int, x int, y int, primary key (id), key (x), key (y)) +partition by range(id) +( partition p0 values less than (10), partition p1 values less than maxvalue); +insert into t values (1,1,1),(2,1,2),(3,1,3),(4,1,4); +show indexes from t; +Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment +t 0 PRIMARY 1 id A 5 NULL NULL BTREE +t 1 x 1 x A 5 NULL NULL YES BTREE +t 1 y 1 y A 5 NULL NULL YES BTREE +alter table t analyze partition p0; +Table Op Msg_type Msg_text +test.t analyze status OK +show indexes from t; +Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment +t 0 PRIMARY 1 id A 5 NULL NULL BTREE +t 1 x 1 x A 5 NULL NULL YES BTREE +t 1 y 1 y A 5 NULL NULL YES BTREE +alter table t analyze partition p1; +Table Op Msg_type Msg_text +test.t analyze status OK +show indexes from t; +Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment +t 0 PRIMARY 1 id A 5 NULL NULL BTREE +t 1 x 1 x A 5 NULL NULL YES BTREE +t 1 y 1 y A 5 NULL NULL YES BTREE +insert into t values (100,1,1),(200,2,1),(300,3,1),(400,4,1),(500,5,1); +show indexes from t; +Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment +t 0 PRIMARY 1 id A 9 NULL NULL BTREE +t 1 x 1 x A 9 NULL NULL YES BTREE +t 1 y 1 y A 9 NULL NULL YES BTREE +alter table t analyze partition p0; +Table Op Msg_type Msg_text +test.t analyze status OK +show indexes from t; +Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment +t 0 PRIMARY 1 id A 9 NULL NULL BTREE +t 1 x 1 x A 9 NULL NULL YES BTREE +t 1 y 1 y A 9 NULL NULL YES BTREE +alter table t analyze partition p1; +Table Op Msg_type Msg_text +test.t analyze status OK +show indexes from t; +Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment +t 0 PRIMARY 1 id A 9 NULL NULL BTREE +t 1 x 1 x A 9 NULL NULL YES BTREE +t 1 y 1 y A 9 NULL NULL YES BTREE +drop table t; diff --git a/mysql-test/suite/tokudb.bugs/r-native-partitioning/db766.result b/mysql-test/suite/tokudb.bugs/r-native-partitioning/db766.result new file mode 100644 index 000000000000..e109b0a7f15e --- /dev/null +++ b/mysql-test/suite/tokudb.bugs/r-native-partitioning/db766.result @@ -0,0 +1,7 @@ +set default_storage_engine=TokuDB; +drop table if exists t1; +CREATE TABLE t1(c1 INT,c2 CHAR)PARTITION BY KEY(c1) PARTITIONS 5; +insert INTO t1 values(1,1),(2,1),(2,2),(2,3); +ALTER TABLE t1 ADD UNIQUE INDEX i1(c1); +ERROR 23000: Can't write; duplicate key in table 't1' +drop table t1; diff --git a/mysql-test/suite/tokudb.bugs/r-native-partitioning/db801.result b/mysql-test/suite/tokudb.bugs/r-native-partitioning/db801.result new file mode 100644 index 000000000000..800db69ba398 --- /dev/null +++ b/mysql-test/suite/tokudb.bugs/r-native-partitioning/db801.result @@ -0,0 +1,18 @@ +set default_storage_engine=tokudb; +drop table if exists t; +create table t (id int not null primary key, c int not null) engine=tokudb; +insert into t values (1,0); +begin; +update t set c=10 where id=1; +update t set c=100; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +rollback; +drop table t; +create table t (id int not null primary key, c int not null) engine=tokudb partition by hash(id) partitions 1; +insert into t values (1,0); +begin; +update t set c=10 where id=1; +update t set c=100; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +rollback; +drop table t; diff --git a/mysql-test/suite/tokudb.bugs/r-native-partitioning/db811.result b/mysql-test/suite/tokudb.bugs/r-native-partitioning/db811.result new file mode 100644 index 000000000000..1d26f43c9ddd --- /dev/null +++ b/mysql-test/suite/tokudb.bugs/r-native-partitioning/db811.result @@ -0,0 +1,14 @@ +drop table if exists t2,t3,t4; +CREATE TABLE t3(a INT,b INT,UNIQUE KEY (a,b)) engine=TOKUDB; +CREATE TABLE t4(c1 FLOAT ZEROFILL) engine=innodb; +CREATE TABLE t2(a int KEY,b CHAR (1)) engine=TOKUDB PARTITION BY HASH (a) PARTITIONS 13; +LOCK TABLES t4 WRITE,t3 WRITE,t2 WRITE; +INSERT INTO t2(a)VALUES (REPEAT(0,1)); +ALTER TABLE t2 ADD COLUMN(c INT); +alter table t4 add column c int; +UPDATE t2 SET a=1; +select * from t2; +a b c +1 NULL NULL +unlock tables; +drop table t2,t3,t4; diff --git a/mysql-test/suite/tokudb.bugs/r-native-partitioning/db811s.result b/mysql-test/suite/tokudb.bugs/r-native-partitioning/db811s.result new file mode 100644 index 000000000000..0a50e63e0372 --- /dev/null +++ b/mysql-test/suite/tokudb.bugs/r-native-partitioning/db811s.result @@ -0,0 +1,14 @@ +drop table if exists t2,t3,t4; +CREATE TABLE t3(a INT,b INT,UNIQUE KEY (a,b)) engine=TOKUDB; +CREATE TABLE t4(c1 FLOAT ZEROFILL) engine=innodb; +CREATE TABLE t2(a int KEY,b CHAR (1)) engine=TOKUDB PARTITION BY HASH (a) PARTITIONS 1; +LOCK TABLES t4 WRITE,t3 WRITE,t2 WRITE; +INSERT INTO t2(a)VALUES (REPEAT(0,1)); +ALTER TABLE t2 ADD COLUMN(c INT); +alter table t4 add column c int; +UPDATE t2 SET a=1; +select * from t2; +a b c +1 NULL NULL +unlock tables; +drop table t2,t3,t4; diff --git a/mysql-test/suite/tokudb.parts/combinations b/mysql-test/suite/tokudb.parts/combinations new file mode 100644 index 000000000000..9aed3a032cfe --- /dev/null +++ b/mysql-test/suite/tokudb.parts/combinations @@ -0,0 +1,6 @@ +[non-native-partitioning] +loose-tokudb-enable-native-partition=off + +[native-partitioning] +loose-tokudb-enable-native-partition=on +mtr-result-dir=r-native diff --git a/mysql-test/suite/tokudb.parts/include/have_native_partitioning.inc b/mysql-test/suite/tokudb.parts/include/have_native_partitioning.inc new file mode 100644 index 000000000000..ffbee1dfaaa2 --- /dev/null +++ b/mysql-test/suite/tokudb.parts/include/have_native_partitioning.inc @@ -0,0 +1,3 @@ +if (`select count(*) = 0 from performance_schema.session_variables where variable_name = 'tokudb_enable_native_partition' and variable_value = 'on';`) { + --skip Test requires native partitioning enabled +} diff --git a/mysql-test/suite/tokudb.parts/r-native/disable_native_partitioning.result b/mysql-test/suite/tokudb.parts/r-native/disable_native_partitioning.result new file mode 100644 index 000000000000..7f16bcafacaa --- /dev/null +++ b/mysql-test/suite/tokudb.parts/r-native/disable_native_partitioning.result @@ -0,0 +1,17 @@ +# restart: --loose-tokudb_enable_native_partition=0 +CREATE TABLE t1 (a INT UNSIGNED NOT NULL, PRIMARY KEY(a)) ENGINE = TokuDB +PARTITION BY RANGE (a) ( +PARTITION p0 VALUES LESS THAN (100), +PARTITION p1 VALUES LESS THAN (200) +); +Warnings: +Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. +t1.par +DROP TABLE t1; +# restart: +CREATE TABLE t1 (a INT UNSIGNED NOT NULL, PRIMARY KEY(a)) ENGINE = TokuDB +PARTITION BY RANGE (a) ( +PARTITION p0 VALUES LESS THAN (100), +PARTITION p1 VALUES LESS THAN (200) +); +DROP TABLE t1; diff --git a/mysql-test/suite/tokudb.parts/r-native/nonflushing_analyze_debug.result b/mysql-test/suite/tokudb.parts/r-native/nonflushing_analyze_debug.result new file mode 100644 index 000000000000..5a7bfb369dff --- /dev/null +++ b/mysql-test/suite/tokudb.parts/r-native/nonflushing_analyze_debug.result @@ -0,0 +1,50 @@ +CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=TokuDB +PARTITION BY RANGE (a) ( +PARTITION p0 VALUES LESS THAN (3), +PARTITION p1 VALUES LESS THAN (10)); +INSERT INTO t1 VALUES (1), (2), (3), (4); +SET DEBUG_SYNC="handler_ha_index_next_end SIGNAL idx_scan_in_progress WAIT_FOR finish_scan"; +SELECT * FROM t1; +SET DEBUG_SYNC="now WAIT_FOR idx_scan_in_progress"; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +SELECT * FROM t1; +a +1 +2 +3 +4 +SET DEBUG_SYNC="now SIGNAL finish_scan"; +a +1 +2 +3 +4 +DROP TABLE t1; +CREATE TABLE t2 (a INT PRIMARY KEY) ENGINE=TokuDB +PARTITION BY RANGE (a) +SUBPARTITION BY HASH (A) +SUBPARTITIONS 2 ( +PARTITION p0 VALUES LESS THAN (3), +PARTITION p1 VALUES LESS THAN (10)); +INSERT INTO t2 VALUES (1), (2), (3), (4); +SET DEBUG_SYNC="handler_ha_index_next_end SIGNAL idx_scan_in_progress WAIT_FOR finish_scan"; +SELECT * FROM t2; +SET DEBUG_SYNC="now WAIT_FOR idx_scan_in_progress"; +ANALYZE TABLE t2; +Table Op Msg_type Msg_text +test.t2 analyze status OK +SELECT * FROM t2; +a +2 +1 +4 +3 +SET DEBUG_SYNC="now SIGNAL finish_scan"; +a +2 +1 +4 +3 +DROP TABLE t2; diff --git a/mysql-test/suite/tokudb.parts/r-native/part_blocked_sql_func_tokudb.result b/mysql-test/suite/tokudb.parts/r-native/part_blocked_sql_func_tokudb.result new file mode 100644 index 000000000000..eb63369eb5da --- /dev/null +++ b/mysql-test/suite/tokudb.parts/r-native/part_blocked_sql_func_tokudb.result @@ -0,0 +1,4338 @@ +------------------------------------------------------------------------- +--- All SQL functions should be rejected, otherwise BUG (see 18198) +------------------------------------------------------------------------- +------------------------------------------------------------------------- +--- ascii(col1) in partition with coltype char(30) +------------------------------------------------------------------------- +must all fail! +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +create table t1 (col1 char(30)) engine='TOKUDB' +partition by range(ascii(col1)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t2 (col1 char(30)) engine='TOKUDB' +partition by list(ascii(col1)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t3 (col1 char(30)) engine='TOKUDB' +partition by hash(ascii(col1)); +Got one of the listed errors +create table t4 (colint int, col1 char(30)) engine='TOKUDB' +partition by range(colint) +subpartition by hash(ascii(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t5 (colint int, col1 char(30)) engine='TOKUDB' +partition by list(colint) +subpartition by hash(ascii(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t6 (colint int, col1 char(30)) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (ascii('a')), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 (col1 char(30)) engine='TOKUDB' ; +create table t22 (col1 char(30)) engine='TOKUDB' ; +create table t33 (col1 char(30)) engine='TOKUDB' ; +create table t44 (colint int, col1 char(30)) engine='TOKUDB' ; +create table t55 (colint int, col1 char(30)) engine='TOKUDB' ; +create table t66 (colint int, col1 char(30)) engine='TOKUDB' ; +alter table t11 +partition by range(ascii(col1)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t22 +partition by list(ascii(col1)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t33 +partition by hash(ascii(col1)); +Got one of the listed errors +alter table t44 +partition by range(colint) +subpartition by hash(ascii(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t55 +partition by list(colint) +subpartition by hash(ascii(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t66 +partition by range(colint) +(partition p0 values less than (ascii('a')), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +------------------------------------------------------------------------- +--- ord(col1) in partition with coltype char(30) +------------------------------------------------------------------------- +must all fail! +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +create table t1 (col1 char(30)) engine='TOKUDB' +partition by range(ord(col1)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t2 (col1 char(30)) engine='TOKUDB' +partition by list(ord(col1)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t3 (col1 char(30)) engine='TOKUDB' +partition by hash(ord(col1)); +Got one of the listed errors +create table t4 (colint int, col1 char(30)) engine='TOKUDB' +partition by range(colint) +subpartition by hash(ord(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t5 (colint int, col1 char(30)) engine='TOKUDB' +partition by list(colint) +subpartition by hash(ord(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t6 (colint int, col1 char(30)) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (ord('a')), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 (col1 char(30)) engine='TOKUDB' ; +create table t22 (col1 char(30)) engine='TOKUDB' ; +create table t33 (col1 char(30)) engine='TOKUDB' ; +create table t44 (colint int, col1 char(30)) engine='TOKUDB' ; +create table t55 (colint int, col1 char(30)) engine='TOKUDB' ; +create table t66 (colint int, col1 char(30)) engine='TOKUDB' ; +alter table t11 +partition by range(ord(col1)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t22 +partition by list(ord(col1)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t33 +partition by hash(ord(col1)); +Got one of the listed errors +alter table t44 +partition by range(colint) +subpartition by hash(ord(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t55 +partition by list(colint) +subpartition by hash(ord(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t66 +partition by range(colint) +(partition p0 values less than (ord('a')), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +------------------------------------------------------------------------- +--- greatest(col1,15) in partition with coltype int +------------------------------------------------------------------------- +must all fail! +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +create table t1 (col1 int) engine='TOKUDB' +partition by range(greatest(col1,15)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t2 (col1 int) engine='TOKUDB' +partition by list(greatest(col1,15)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t3 (col1 int) engine='TOKUDB' +partition by hash(greatest(col1,15)); +Got one of the listed errors +create table t4 (colint int, col1 int) engine='TOKUDB' +partition by range(colint) +subpartition by hash(greatest(col1,15)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t5 (colint int, col1 int) engine='TOKUDB' +partition by list(colint) +subpartition by hash(greatest(col1,15)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t6 (colint int, col1 int) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (greatest(1,15)), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 (col1 int) engine='TOKUDB' ; +create table t22 (col1 int) engine='TOKUDB' ; +create table t33 (col1 int) engine='TOKUDB' ; +create table t44 (colint int, col1 int) engine='TOKUDB' ; +create table t55 (colint int, col1 int) engine='TOKUDB' ; +create table t66 (colint int, col1 int) engine='TOKUDB' ; +alter table t11 +partition by range(greatest(col1,15)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t22 +partition by list(greatest(col1,15)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t33 +partition by hash(greatest(col1,15)); +Got one of the listed errors +alter table t44 +partition by range(colint) +subpartition by hash(greatest(col1,15)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t55 +partition by list(colint) +subpartition by hash(greatest(col1,15)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t66 +partition by range(colint) +(partition p0 values less than (greatest(1,15)), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +------------------------------------------------------------------------- +--- isnull(col1) in partition with coltype int +------------------------------------------------------------------------- +must all fail! +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +create table t1 (col1 int) engine='TOKUDB' +partition by range(isnull(col1)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t2 (col1 int) engine='TOKUDB' +partition by list(isnull(col1)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t3 (col1 int) engine='TOKUDB' +partition by hash(isnull(col1)); +Got one of the listed errors +create table t4 (colint int, col1 int) engine='TOKUDB' +partition by range(colint) +subpartition by hash(isnull(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t5 (colint int, col1 int) engine='TOKUDB' +partition by list(colint) +subpartition by hash(isnull(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t6 (colint int, col1 int) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (isnull(15)), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 (col1 int) engine='TOKUDB' ; +create table t22 (col1 int) engine='TOKUDB' ; +create table t33 (col1 int) engine='TOKUDB' ; +create table t44 (colint int, col1 int) engine='TOKUDB' ; +create table t55 (colint int, col1 int) engine='TOKUDB' ; +create table t66 (colint int, col1 int) engine='TOKUDB' ; +alter table t11 +partition by range(isnull(col1)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t22 +partition by list(isnull(col1)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t33 +partition by hash(isnull(col1)); +Got one of the listed errors +alter table t44 +partition by range(colint) +subpartition by hash(isnull(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t55 +partition by list(colint) +subpartition by hash(isnull(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t66 +partition by range(colint) +(partition p0 values less than (isnull(15)), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +------------------------------------------------------------------------- +--- least(col1,15) in partition with coltype int +------------------------------------------------------------------------- +must all fail! +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +create table t1 (col1 int) engine='TOKUDB' +partition by range(least(col1,15)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t2 (col1 int) engine='TOKUDB' +partition by list(least(col1,15)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t3 (col1 int) engine='TOKUDB' +partition by hash(least(col1,15)); +Got one of the listed errors +create table t4 (colint int, col1 int) engine='TOKUDB' +partition by range(colint) +subpartition by hash(least(col1,15)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t5 (colint int, col1 int) engine='TOKUDB' +partition by list(colint) +subpartition by hash(least(col1,15)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t6 (colint int, col1 int) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (least(15,30)), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 (col1 int) engine='TOKUDB' ; +create table t22 (col1 int) engine='TOKUDB' ; +create table t33 (col1 int) engine='TOKUDB' ; +create table t44 (colint int, col1 int) engine='TOKUDB' ; +create table t55 (colint int, col1 int) engine='TOKUDB' ; +create table t66 (colint int, col1 int) engine='TOKUDB' ; +alter table t11 +partition by range(least(col1,15)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t22 +partition by list(least(col1,15)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t33 +partition by hash(least(col1,15)); +Got one of the listed errors +alter table t44 +partition by range(colint) +subpartition by hash(least(col1,15)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t55 +partition by list(colint) +subpartition by hash(least(col1,15)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t66 +partition by range(colint) +(partition p0 values less than (least(15,30)), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +------------------------------------------------------------------------- +--- case when col1>15 then 20 else 10 end in partition with coltype int +------------------------------------------------------------------------- +must all fail! +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +create table t1 (col1 int) engine='TOKUDB' +partition by range(case when col1>15 then 20 else 10 end) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t2 (col1 int) engine='TOKUDB' +partition by list(case when col1>15 then 20 else 10 end) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t3 (col1 int) engine='TOKUDB' +partition by hash(case when col1>15 then 20 else 10 end); +Got one of the listed errors +create table t4 (colint int, col1 int) engine='TOKUDB' +partition by range(colint) +subpartition by hash(case when col1>15 then 20 else 10 end) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t5 (colint int, col1 int) engine='TOKUDB' +partition by list(colint) +subpartition by hash(case when col1>15 then 20 else 10 end) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t6 (colint int, col1 int) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (case when 1>30 then 20 else 15 end), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 (col1 int) engine='TOKUDB' ; +create table t22 (col1 int) engine='TOKUDB' ; +create table t33 (col1 int) engine='TOKUDB' ; +create table t44 (colint int, col1 int) engine='TOKUDB' ; +create table t55 (colint int, col1 int) engine='TOKUDB' ; +create table t66 (colint int, col1 int) engine='TOKUDB' ; +alter table t11 +partition by range(case when col1>15 then 20 else 10 end) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t22 +partition by list(case when col1>15 then 20 else 10 end) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t33 +partition by hash(case when col1>15 then 20 else 10 end); +Got one of the listed errors +alter table t44 +partition by range(colint) +subpartition by hash(case when col1>15 then 20 else 10 end) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t55 +partition by list(colint) +subpartition by hash(case when col1>15 then 20 else 10 end) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t66 +partition by range(colint) +(partition p0 values less than (case when 1>30 then 20 else 15 end), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +------------------------------------------------------------------------- +--- ifnull(col1,30) in partition with coltype int +------------------------------------------------------------------------- +must all fail! +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +create table t1 (col1 int) engine='TOKUDB' +partition by range(ifnull(col1,30)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t2 (col1 int) engine='TOKUDB' +partition by list(ifnull(col1,30)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t3 (col1 int) engine='TOKUDB' +partition by hash(ifnull(col1,30)); +Got one of the listed errors +create table t4 (colint int, col1 int) engine='TOKUDB' +partition by range(colint) +subpartition by hash(ifnull(col1,30)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t5 (colint int, col1 int) engine='TOKUDB' +partition by list(colint) +subpartition by hash(ifnull(col1,30)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t6 (colint int, col1 int) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (ifnull(1,30)), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 (col1 int) engine='TOKUDB' ; +create table t22 (col1 int) engine='TOKUDB' ; +create table t33 (col1 int) engine='TOKUDB' ; +create table t44 (colint int, col1 int) engine='TOKUDB' ; +create table t55 (colint int, col1 int) engine='TOKUDB' ; +create table t66 (colint int, col1 int) engine='TOKUDB' ; +alter table t11 +partition by range(ifnull(col1,30)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t22 +partition by list(ifnull(col1,30)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t33 +partition by hash(ifnull(col1,30)); +Got one of the listed errors +alter table t44 +partition by range(colint) +subpartition by hash(ifnull(col1,30)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t55 +partition by list(colint) +subpartition by hash(ifnull(col1,30)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t66 +partition by range(colint) +(partition p0 values less than (ifnull(1,30)), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +------------------------------------------------------------------------- +--- nullif(col1,30) in partition with coltype int +------------------------------------------------------------------------- +must all fail! +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +create table t1 (col1 int) engine='TOKUDB' +partition by range(nullif(col1,30)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t2 (col1 int) engine='TOKUDB' +partition by list(nullif(col1,30)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t3 (col1 int) engine='TOKUDB' +partition by hash(nullif(col1,30)); +Got one of the listed errors +create table t4 (colint int, col1 int) engine='TOKUDB' +partition by range(colint) +subpartition by hash(nullif(col1,30)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t5 (colint int, col1 int) engine='TOKUDB' +partition by list(colint) +subpartition by hash(nullif(col1,30)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t6 (colint int, col1 int) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (nullif(1,30)), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 (col1 int) engine='TOKUDB' ; +create table t22 (col1 int) engine='TOKUDB' ; +create table t33 (col1 int) engine='TOKUDB' ; +create table t44 (colint int, col1 int) engine='TOKUDB' ; +create table t55 (colint int, col1 int) engine='TOKUDB' ; +create table t66 (colint int, col1 int) engine='TOKUDB' ; +alter table t11 +partition by range(nullif(col1,30)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t22 +partition by list(nullif(col1,30)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t33 +partition by hash(nullif(col1,30)); +Got one of the listed errors +alter table t44 +partition by range(colint) +subpartition by hash(nullif(col1,30)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t55 +partition by list(colint) +subpartition by hash(nullif(col1,30)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t66 +partition by range(colint) +(partition p0 values less than (nullif(1,30)), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +------------------------------------------------------------------------- +--- bit_length(col1) in partition with coltype int +------------------------------------------------------------------------- +must all fail! +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +create table t1 (col1 int) engine='TOKUDB' +partition by range(bit_length(col1)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t2 (col1 int) engine='TOKUDB' +partition by list(bit_length(col1)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t3 (col1 int) engine='TOKUDB' +partition by hash(bit_length(col1)); +Got one of the listed errors +create table t4 (colint int, col1 int) engine='TOKUDB' +partition by range(colint) +subpartition by hash(bit_length(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t5 (colint int, col1 int) engine='TOKUDB' +partition by list(colint) +subpartition by hash(bit_length(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t6 (colint int, col1 int) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (bit_length(255)), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 (col1 int) engine='TOKUDB' ; +create table t22 (col1 int) engine='TOKUDB' ; +create table t33 (col1 int) engine='TOKUDB' ; +create table t44 (colint int, col1 int) engine='TOKUDB' ; +create table t55 (colint int, col1 int) engine='TOKUDB' ; +create table t66 (colint int, col1 int) engine='TOKUDB' ; +alter table t11 +partition by range(bit_length(col1)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t22 +partition by list(bit_length(col1)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t33 +partition by hash(bit_length(col1)); +Got one of the listed errors +alter table t44 +partition by range(colint) +subpartition by hash(bit_length(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t55 +partition by list(colint) +subpartition by hash(bit_length(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t66 +partition by range(colint) +(partition p0 values less than (bit_length(255)), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +------------------------------------------------------------------------- +--- bit_length(col1) in partition with coltype char(30) +------------------------------------------------------------------------- +must all fail! +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +create table t1 (col1 char(30)) engine='TOKUDB' +partition by range(bit_length(col1)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t2 (col1 char(30)) engine='TOKUDB' +partition by list(bit_length(col1)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t3 (col1 char(30)) engine='TOKUDB' +partition by hash(bit_length(col1)); +Got one of the listed errors +create table t4 (colint int, col1 char(30)) engine='TOKUDB' +partition by range(colint) +subpartition by hash(bit_length(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t5 (colint int, col1 char(30)) engine='TOKUDB' +partition by list(colint) +subpartition by hash(bit_length(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t6 (colint int, col1 char(30)) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (bit_length(255)), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 (col1 char(30)) engine='TOKUDB' ; +create table t22 (col1 char(30)) engine='TOKUDB' ; +create table t33 (col1 char(30)) engine='TOKUDB' ; +create table t44 (colint int, col1 char(30)) engine='TOKUDB' ; +create table t55 (colint int, col1 char(30)) engine='TOKUDB' ; +create table t66 (colint int, col1 char(30)) engine='TOKUDB' ; +alter table t11 +partition by range(bit_length(col1)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t22 +partition by list(bit_length(col1)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t33 +partition by hash(bit_length(col1)); +Got one of the listed errors +alter table t44 +partition by range(colint) +subpartition by hash(bit_length(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t55 +partition by list(colint) +subpartition by hash(bit_length(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t66 +partition by range(colint) +(partition p0 values less than (bit_length(255)), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +------------------------------------------------------------------------- +--- char_length(col1) in partition with coltype char(30) +------------------------------------------------------------------------- +must all fail! +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +create table t1 (col1 char(30)) engine='TOKUDB' +partition by range(char_length(col1)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t2 (col1 char(30)) engine='TOKUDB' +partition by list(char_length(col1)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t3 (col1 char(30)) engine='TOKUDB' +partition by hash(char_length(col1)); +Got one of the listed errors +create table t4 (colint int, col1 char(30)) engine='TOKUDB' +partition by range(colint) +subpartition by hash(char_length(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t5 (colint int, col1 char(30)) engine='TOKUDB' +partition by list(colint) +subpartition by hash(char_length(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t6 (colint int, col1 char(30)) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (char_length('a')), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 (col1 char(30)) engine='TOKUDB' ; +create table t22 (col1 char(30)) engine='TOKUDB' ; +create table t33 (col1 char(30)) engine='TOKUDB' ; +create table t44 (colint int, col1 char(30)) engine='TOKUDB' ; +create table t55 (colint int, col1 char(30)) engine='TOKUDB' ; +create table t66 (colint int, col1 char(30)) engine='TOKUDB' ; +alter table t11 +partition by range(char_length(col1)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t22 +partition by list(char_length(col1)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t33 +partition by hash(char_length(col1)); +Got one of the listed errors +alter table t44 +partition by range(colint) +subpartition by hash(char_length(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t55 +partition by list(colint) +subpartition by hash(char_length(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t66 +partition by range(colint) +(partition p0 values less than (char_length('a')), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +------------------------------------------------------------------------- +--- character_length(col1) in partition with coltype int +------------------------------------------------------------------------- +must all fail! +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +create table t1 (col1 int) engine='TOKUDB' +partition by range(character_length(col1)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t2 (col1 int) engine='TOKUDB' +partition by list(character_length(col1)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t3 (col1 int) engine='TOKUDB' +partition by hash(character_length(col1)); +Got one of the listed errors +create table t4 (colint int, col1 int) engine='TOKUDB' +partition by range(colint) +subpartition by hash(character_length(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t5 (colint int, col1 int) engine='TOKUDB' +partition by list(colint) +subpartition by hash(character_length(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t6 (colint int, col1 int) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (find_in_set('i','a,b,c,d,e,f,g,h,i')), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 (col1 int) engine='TOKUDB' ; +create table t22 (col1 int) engine='TOKUDB' ; +create table t33 (col1 int) engine='TOKUDB' ; +create table t44 (colint int, col1 int) engine='TOKUDB' ; +create table t55 (colint int, col1 int) engine='TOKUDB' ; +create table t66 (colint int, col1 int) engine='TOKUDB' ; +alter table t11 +partition by range(character_length(col1)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t22 +partition by list(character_length(col1)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t33 +partition by hash(character_length(col1)); +Got one of the listed errors +alter table t44 +partition by range(colint) +subpartition by hash(character_length(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t55 +partition by list(colint) +subpartition by hash(character_length(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t66 +partition by range(colint) +(partition p0 values less than (find_in_set('i','a,b,c,d,e,f,g,h,i')), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +------------------------------------------------------------------------- +--- character_length(col1) in partition with coltype char(30) +------------------------------------------------------------------------- +must all fail! +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +create table t1 (col1 char(30)) engine='TOKUDB' +partition by range(character_length(col1)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t2 (col1 char(30)) engine='TOKUDB' +partition by list(character_length(col1)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t3 (col1 char(30)) engine='TOKUDB' +partition by hash(character_length(col1)); +Got one of the listed errors +create table t4 (colint int, col1 char(30)) engine='TOKUDB' +partition by range(colint) +subpartition by hash(character_length(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t5 (colint int, col1 char(30)) engine='TOKUDB' +partition by list(colint) +subpartition by hash(character_length(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t6 (colint int, col1 char(30)) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (find_in_set('i','a,b,c,d,e,f,g,h,i')), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 (col1 char(30)) engine='TOKUDB' ; +create table t22 (col1 char(30)) engine='TOKUDB' ; +create table t33 (col1 char(30)) engine='TOKUDB' ; +create table t44 (colint int, col1 char(30)) engine='TOKUDB' ; +create table t55 (colint int, col1 char(30)) engine='TOKUDB' ; +create table t66 (colint int, col1 char(30)) engine='TOKUDB' ; +alter table t11 +partition by range(character_length(col1)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t22 +partition by list(character_length(col1)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t33 +partition by hash(character_length(col1)); +Got one of the listed errors +alter table t44 +partition by range(colint) +subpartition by hash(character_length(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t55 +partition by list(colint) +subpartition by hash(character_length(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t66 +partition by range(colint) +(partition p0 values less than (find_in_set('i','a,b,c,d,e,f,g,h,i')), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +------------------------------------------------------------------------- +--- instr(col1,'acb') in partition with coltype int +------------------------------------------------------------------------- +must all fail! +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +create table t1 (col1 int) engine='TOKUDB' +partition by range(instr(col1,'acb')) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t2 (col1 int) engine='TOKUDB' +partition by list(instr(col1,'acb')) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t3 (col1 int) engine='TOKUDB' +partition by hash(instr(col1,'acb')); +Got one of the listed errors +create table t4 (colint int, col1 int) engine='TOKUDB' +partition by range(colint) +subpartition by hash(instr(col1,'acb')) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t5 (colint int, col1 int) engine='TOKUDB' +partition by list(colint) +subpartition by hash(instr(col1,'acb')) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t6 (colint int, col1 int) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (instr('i','a,b,c,d,e,f,g,h,i')), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 (col1 int) engine='TOKUDB' ; +create table t22 (col1 int) engine='TOKUDB' ; +create table t33 (col1 int) engine='TOKUDB' ; +create table t44 (colint int, col1 int) engine='TOKUDB' ; +create table t55 (colint int, col1 int) engine='TOKUDB' ; +create table t66 (colint int, col1 int) engine='TOKUDB' ; +alter table t11 +partition by range(instr(col1,'acb')) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t22 +partition by list(instr(col1,'acb')) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t33 +partition by hash(instr(col1,'acb')); +Got one of the listed errors +alter table t44 +partition by range(colint) +subpartition by hash(instr(col1,'acb')) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t55 +partition by list(colint) +subpartition by hash(instr(col1,'acb')) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t66 +partition by range(colint) +(partition p0 values less than (instr('i','a,b,c,d,e,f,g,h,i')), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +------------------------------------------------------------------------- +--- instr(col1,'acb') in partition with coltype char(30) +------------------------------------------------------------------------- +must all fail! +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +create table t1 (col1 char(30)) engine='TOKUDB' +partition by range(instr(col1,'acb')) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t2 (col1 char(30)) engine='TOKUDB' +partition by list(instr(col1,'acb')) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t3 (col1 char(30)) engine='TOKUDB' +partition by hash(instr(col1,'acb')); +Got one of the listed errors +create table t4 (colint int, col1 char(30)) engine='TOKUDB' +partition by range(colint) +subpartition by hash(instr(col1,'acb')) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t5 (colint int, col1 char(30)) engine='TOKUDB' +partition by list(colint) +subpartition by hash(instr(col1,'acb')) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t6 (colint int, col1 char(30)) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (instr('i','a,b,c,d,e,f,g,h,i')), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 (col1 char(30)) engine='TOKUDB' ; +create table t22 (col1 char(30)) engine='TOKUDB' ; +create table t33 (col1 char(30)) engine='TOKUDB' ; +create table t44 (colint int, col1 char(30)) engine='TOKUDB' ; +create table t55 (colint int, col1 char(30)) engine='TOKUDB' ; +create table t66 (colint int, col1 char(30)) engine='TOKUDB' ; +alter table t11 +partition by range(instr(col1,'acb')) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t22 +partition by list(instr(col1,'acb')) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t33 +partition by hash(instr(col1,'acb')); +Got one of the listed errors +alter table t44 +partition by range(colint) +subpartition by hash(instr(col1,'acb')) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t55 +partition by list(colint) +subpartition by hash(instr(col1,'acb')) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t66 +partition by range(colint) +(partition p0 values less than (instr('i','a,b,c,d,e,f,g,h,i')), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +------------------------------------------------------------------------- +--- length(col1) in partition with coltype int +------------------------------------------------------------------------- +must all fail! +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +create table t1 (col1 int) engine='TOKUDB' +partition by range(length(col1)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t2 (col1 int) engine='TOKUDB' +partition by list(length(col1)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t3 (col1 int) engine='TOKUDB' +partition by hash(length(col1)); +Got one of the listed errors +create table t4 (colint int, col1 int) engine='TOKUDB' +partition by range(colint) +subpartition by hash(length(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t5 (colint int, col1 int) engine='TOKUDB' +partition by list(colint) +subpartition by hash(length(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t6 (colint int, col1 int) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (length('a,b,c,d,e,f,g,h,i')), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 (col1 int) engine='TOKUDB' ; +create table t22 (col1 int) engine='TOKUDB' ; +create table t33 (col1 int) engine='TOKUDB' ; +create table t44 (colint int, col1 int) engine='TOKUDB' ; +create table t55 (colint int, col1 int) engine='TOKUDB' ; +create table t66 (colint int, col1 int) engine='TOKUDB' ; +alter table t11 +partition by range(length(col1)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t22 +partition by list(length(col1)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t33 +partition by hash(length(col1)); +Got one of the listed errors +alter table t44 +partition by range(colint) +subpartition by hash(length(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t55 +partition by list(colint) +subpartition by hash(length(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t66 +partition by range(colint) +(partition p0 values less than (length('a,b,c,d,e,f,g,h,i')), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +------------------------------------------------------------------------- +--- locate('a',col1) in partition with coltype int +------------------------------------------------------------------------- +must all fail! +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +create table t1 (col1 int) engine='TOKUDB' +partition by range(locate('a',col1)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t2 (col1 int) engine='TOKUDB' +partition by list(locate('a',col1)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t3 (col1 int) engine='TOKUDB' +partition by hash(locate('a',col1)); +Got one of the listed errors +create table t4 (colint int, col1 int) engine='TOKUDB' +partition by range(colint) +subpartition by hash(locate('a',col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t5 (colint int, col1 int) engine='TOKUDB' +partition by list(colint) +subpartition by hash(locate('a',col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t6 (colint int, col1 int) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (locate('i','a,b,c,d,e,f,g,h,i')), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 (col1 int) engine='TOKUDB' ; +create table t22 (col1 int) engine='TOKUDB' ; +create table t33 (col1 int) engine='TOKUDB' ; +create table t44 (colint int, col1 int) engine='TOKUDB' ; +create table t55 (colint int, col1 int) engine='TOKUDB' ; +create table t66 (colint int, col1 int) engine='TOKUDB' ; +alter table t11 +partition by range(locate('a',col1)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t22 +partition by list(locate('a',col1)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t33 +partition by hash(locate('a',col1)); +Got one of the listed errors +alter table t44 +partition by range(colint) +subpartition by hash(locate('a',col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t55 +partition by list(colint) +subpartition by hash(locate('a',col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t66 +partition by range(colint) +(partition p0 values less than (locate('i','a,b,c,d,e,f,g,h,i')), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +------------------------------------------------------------------------- +--- locate('a',col1) in partition with coltype char(30) +------------------------------------------------------------------------- +must all fail! +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +create table t1 (col1 char(30)) engine='TOKUDB' +partition by range(locate('a',col1)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t2 (col1 char(30)) engine='TOKUDB' +partition by list(locate('a',col1)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t3 (col1 char(30)) engine='TOKUDB' +partition by hash(locate('a',col1)); +Got one of the listed errors +create table t4 (colint int, col1 char(30)) engine='TOKUDB' +partition by range(colint) +subpartition by hash(locate('a',col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t5 (colint int, col1 char(30)) engine='TOKUDB' +partition by list(colint) +subpartition by hash(locate('a',col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t6 (colint int, col1 char(30)) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (locate('i','a,b,c,d,e,f,g,h,i')), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 (col1 char(30)) engine='TOKUDB' ; +create table t22 (col1 char(30)) engine='TOKUDB' ; +create table t33 (col1 char(30)) engine='TOKUDB' ; +create table t44 (colint int, col1 char(30)) engine='TOKUDB' ; +create table t55 (colint int, col1 char(30)) engine='TOKUDB' ; +create table t66 (colint int, col1 char(30)) engine='TOKUDB' ; +alter table t11 +partition by range(locate('a',col1)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t22 +partition by list(locate('a',col1)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t33 +partition by hash(locate('a',col1)); +Got one of the listed errors +alter table t44 +partition by range(colint) +subpartition by hash(locate('a',col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t55 +partition by list(colint) +subpartition by hash(locate('a',col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t66 +partition by range(colint) +(partition p0 values less than (locate('i','a,b,c,d,e,f,g,h,i')), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +------------------------------------------------------------------------- +--- octet_length(col1) in partition with coltype char(30) +------------------------------------------------------------------------- +must all fail! +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +create table t1 (col1 char(30)) engine='TOKUDB' +partition by range(octet_length(col1)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t2 (col1 char(30)) engine='TOKUDB' +partition by list(octet_length(col1)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t3 (col1 char(30)) engine='TOKUDB' +partition by hash(octet_length(col1)); +Got one of the listed errors +create table t4 (colint int, col1 char(30)) engine='TOKUDB' +partition by range(colint) +subpartition by hash(octet_length(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t5 (colint int, col1 char(30)) engine='TOKUDB' +partition by list(colint) +subpartition by hash(octet_length(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t6 (colint int, col1 char(30)) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (octet_length('a,b,c,d,e,f,g,h,i')), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 (col1 char(30)) engine='TOKUDB' ; +create table t22 (col1 char(30)) engine='TOKUDB' ; +create table t33 (col1 char(30)) engine='TOKUDB' ; +create table t44 (colint int, col1 char(30)) engine='TOKUDB' ; +create table t55 (colint int, col1 char(30)) engine='TOKUDB' ; +create table t66 (colint int, col1 char(30)) engine='TOKUDB' ; +alter table t11 +partition by range(octet_length(col1)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t22 +partition by list(octet_length(col1)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t33 +partition by hash(octet_length(col1)); +Got one of the listed errors +alter table t44 +partition by range(colint) +subpartition by hash(octet_length(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t55 +partition by list(colint) +subpartition by hash(octet_length(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t66 +partition by range(colint) +(partition p0 values less than (octet_length('a,b,c,d,e,f,g,h,i')), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +------------------------------------------------------------------------- +--- position('a' in col1) in partition with coltype int +------------------------------------------------------------------------- +must all fail! +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +create table t1 (col1 int) engine='TOKUDB' +partition by range(position('a' in col1)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t2 (col1 int) engine='TOKUDB' +partition by list(position('a' in col1)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t3 (col1 int) engine='TOKUDB' +partition by hash(position('a' in col1)); +Got one of the listed errors +create table t4 (colint int, col1 int) engine='TOKUDB' +partition by range(colint) +subpartition by hash(position('a' in col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t5 (colint int, col1 int) engine='TOKUDB' +partition by list(colint) +subpartition by hash(position('a' in col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t6 (colint int, col1 int) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (position('i' in 'a,b,c,d,e,f,g,h,i')), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 (col1 int) engine='TOKUDB' ; +create table t22 (col1 int) engine='TOKUDB' ; +create table t33 (col1 int) engine='TOKUDB' ; +create table t44 (colint int, col1 int) engine='TOKUDB' ; +create table t55 (colint int, col1 int) engine='TOKUDB' ; +create table t66 (colint int, col1 int) engine='TOKUDB' ; +alter table t11 +partition by range(position('a' in col1)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t22 +partition by list(position('a' in col1)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t33 +partition by hash(position('a' in col1)); +Got one of the listed errors +alter table t44 +partition by range(colint) +subpartition by hash(position('a' in col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t55 +partition by list(colint) +subpartition by hash(position('a' in col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t66 +partition by range(colint) +(partition p0 values less than (position('i' in 'a,b,c,d,e,f,g,h,i')), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +------------------------------------------------------------------------- +--- position('a' in col1) in partition with coltype char(30) +------------------------------------------------------------------------- +must all fail! +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +create table t1 (col1 char(30)) engine='TOKUDB' +partition by range(position('a' in col1)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t2 (col1 char(30)) engine='TOKUDB' +partition by list(position('a' in col1)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t3 (col1 char(30)) engine='TOKUDB' +partition by hash(position('a' in col1)); +Got one of the listed errors +create table t4 (colint int, col1 char(30)) engine='TOKUDB' +partition by range(colint) +subpartition by hash(position('a' in col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t5 (colint int, col1 char(30)) engine='TOKUDB' +partition by list(colint) +subpartition by hash(position('a' in col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t6 (colint int, col1 char(30)) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (position('i' in 'a,b,c,d,e,f,g,h,i')), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 (col1 char(30)) engine='TOKUDB' ; +create table t22 (col1 char(30)) engine='TOKUDB' ; +create table t33 (col1 char(30)) engine='TOKUDB' ; +create table t44 (colint int, col1 char(30)) engine='TOKUDB' ; +create table t55 (colint int, col1 char(30)) engine='TOKUDB' ; +create table t66 (colint int, col1 char(30)) engine='TOKUDB' ; +alter table t11 +partition by range(position('a' in col1)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t22 +partition by list(position('a' in col1)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t33 +partition by hash(position('a' in col1)); +Got one of the listed errors +alter table t44 +partition by range(colint) +subpartition by hash(position('a' in col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t55 +partition by list(colint) +subpartition by hash(position('a' in col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t66 +partition by range(colint) +(partition p0 values less than (position('i' in 'a,b,c,d,e,f,g,h,i')), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +------------------------------------------------------------------------- +--- strcmp(col1,'acb') in partition with coltype int +------------------------------------------------------------------------- +must all fail! +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +create table t1 (col1 int) engine='TOKUDB' +partition by range(strcmp(col1,'acb')) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t2 (col1 int) engine='TOKUDB' +partition by list(strcmp(col1,'acb')) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t3 (col1 int) engine='TOKUDB' +partition by hash(strcmp(col1,'acb')); +Got one of the listed errors +create table t4 (colint int, col1 int) engine='TOKUDB' +partition by range(colint) +subpartition by hash(strcmp(col1,'acb')) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t5 (colint int, col1 int) engine='TOKUDB' +partition by list(colint) +subpartition by hash(strcmp(col1,'acb')) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t6 (colint int, col1 int) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (strcmp('i','a,b,c,d,e,f,g,h,i')), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 (col1 int) engine='TOKUDB' ; +create table t22 (col1 int) engine='TOKUDB' ; +create table t33 (col1 int) engine='TOKUDB' ; +create table t44 (colint int, col1 int) engine='TOKUDB' ; +create table t55 (colint int, col1 int) engine='TOKUDB' ; +create table t66 (colint int, col1 int) engine='TOKUDB' ; +alter table t11 +partition by range(strcmp(col1,'acb')) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t22 +partition by list(strcmp(col1,'acb')) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t33 +partition by hash(strcmp(col1,'acb')); +Got one of the listed errors +alter table t44 +partition by range(colint) +subpartition by hash(strcmp(col1,'acb')) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t55 +partition by list(colint) +subpartition by hash(strcmp(col1,'acb')) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t66 +partition by range(colint) +(partition p0 values less than (strcmp('i','a,b,c,d,e,f,g,h,i')), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +------------------------------------------------------------------------- +--- strcmp(col1,'acb') in partition with coltype char(30) +------------------------------------------------------------------------- +must all fail! +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +create table t1 (col1 char(30)) engine='TOKUDB' +partition by range(strcmp(col1,'acb')) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t2 (col1 char(30)) engine='TOKUDB' +partition by list(strcmp(col1,'acb')) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t3 (col1 char(30)) engine='TOKUDB' +partition by hash(strcmp(col1,'acb')); +Got one of the listed errors +create table t4 (colint int, col1 char(30)) engine='TOKUDB' +partition by range(colint) +subpartition by hash(strcmp(col1,'acb')) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t5 (colint int, col1 char(30)) engine='TOKUDB' +partition by list(colint) +subpartition by hash(strcmp(col1,'acb')) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t6 (colint int, col1 char(30)) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (strcmp('i','a,b,c,d,e,f,g,h,i')), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 (col1 char(30)) engine='TOKUDB' ; +create table t22 (col1 char(30)) engine='TOKUDB' ; +create table t33 (col1 char(30)) engine='TOKUDB' ; +create table t44 (colint int, col1 char(30)) engine='TOKUDB' ; +create table t55 (colint int, col1 char(30)) engine='TOKUDB' ; +create table t66 (colint int, col1 char(30)) engine='TOKUDB' ; +alter table t11 +partition by range(strcmp(col1,'acb')) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t22 +partition by list(strcmp(col1,'acb')) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t33 +partition by hash(strcmp(col1,'acb')); +Got one of the listed errors +alter table t44 +partition by range(colint) +subpartition by hash(strcmp(col1,'acb')) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t55 +partition by list(colint) +subpartition by hash(strcmp(col1,'acb')) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t66 +partition by range(colint) +(partition p0 values less than (strcmp('i','a,b,c,d,e,f,g,h,i')), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +------------------------------------------------------------------------- +--- crc32(col1) in partition with coltype char(30) +------------------------------------------------------------------------- +must all fail! +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +create table t1 (col1 char(30)) engine='TOKUDB' +partition by range(crc32(col1)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t2 (col1 char(30)) engine='TOKUDB' +partition by list(crc32(col1)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t3 (col1 char(30)) engine='TOKUDB' +partition by hash(crc32(col1)); +Got one of the listed errors +create table t4 (colint int, col1 char(30)) engine='TOKUDB' +partition by range(colint) +subpartition by hash(crc32(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t5 (colint int, col1 char(30)) engine='TOKUDB' +partition by list(colint) +subpartition by hash(crc32(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t6 (colint int, col1 char(30)) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (crc32('a,b,c,d,e,f,g,h,i')), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 (col1 char(30)) engine='TOKUDB' ; +create table t22 (col1 char(30)) engine='TOKUDB' ; +create table t33 (col1 char(30)) engine='TOKUDB' ; +create table t44 (colint int, col1 char(30)) engine='TOKUDB' ; +create table t55 (colint int, col1 char(30)) engine='TOKUDB' ; +create table t66 (colint int, col1 char(30)) engine='TOKUDB' ; +alter table t11 +partition by range(crc32(col1)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t22 +partition by list(crc32(col1)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t33 +partition by hash(crc32(col1)); +Got one of the listed errors +alter table t44 +partition by range(colint) +subpartition by hash(crc32(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t55 +partition by list(colint) +subpartition by hash(crc32(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t66 +partition by range(colint) +(partition p0 values less than (crc32('a,b,c,d,e,f,g,h,i')), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +------------------------------------------------------------------------- +--- round(col1) in partition with coltype int +------------------------------------------------------------------------- +must all fail! +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +create table t1 (col1 int) engine='TOKUDB' +partition by range(round(col1)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t2 (col1 int) engine='TOKUDB' +partition by list(round(col1)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t3 (col1 int) engine='TOKUDB' +partition by hash(round(col1)); +Got one of the listed errors +create table t4 (colint int, col1 int) engine='TOKUDB' +partition by range(colint) +subpartition by hash(round(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t5 (colint int, col1 int) engine='TOKUDB' +partition by list(colint) +subpartition by hash(round(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t6 (colint int, col1 int) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (round(15)), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 (col1 int) engine='TOKUDB' ; +create table t22 (col1 int) engine='TOKUDB' ; +create table t33 (col1 int) engine='TOKUDB' ; +create table t44 (colint int, col1 int) engine='TOKUDB' ; +create table t55 (colint int, col1 int) engine='TOKUDB' ; +create table t66 (colint int, col1 int) engine='TOKUDB' ; +alter table t11 +partition by range(round(col1)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t22 +partition by list(round(col1)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t33 +partition by hash(round(col1)); +Got one of the listed errors +alter table t44 +partition by range(colint) +subpartition by hash(round(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t55 +partition by list(colint) +subpartition by hash(round(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t66 +partition by range(colint) +(partition p0 values less than (round(15)), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +------------------------------------------------------------------------- +--- sign(col1) in partition with coltype int +------------------------------------------------------------------------- +must all fail! +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +create table t1 (col1 int) engine='TOKUDB' +partition by range(sign(col1)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t2 (col1 int) engine='TOKUDB' +partition by list(sign(col1)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t3 (col1 int) engine='TOKUDB' +partition by hash(sign(col1)); +Got one of the listed errors +create table t4 (colint int, col1 int) engine='TOKUDB' +partition by range(colint) +subpartition by hash(sign(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t5 (colint int, col1 int) engine='TOKUDB' +partition by list(colint) +subpartition by hash(sign(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t6 (colint int, col1 int) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (sign(123)), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 (col1 int) engine='TOKUDB' ; +create table t22 (col1 int) engine='TOKUDB' ; +create table t33 (col1 int) engine='TOKUDB' ; +create table t44 (colint int, col1 int) engine='TOKUDB' ; +create table t55 (colint int, col1 int) engine='TOKUDB' ; +create table t66 (colint int, col1 int) engine='TOKUDB' ; +alter table t11 +partition by range(sign(col1)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t22 +partition by list(sign(col1)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t33 +partition by hash(sign(col1)); +Got one of the listed errors +alter table t44 +partition by range(colint) +subpartition by hash(sign(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t55 +partition by list(colint) +subpartition by hash(sign(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t66 +partition by range(colint) +(partition p0 values less than (sign(123)), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +------------------------------------------------------------------------- +--- period_add(col1,5) in partition with coltype datetime +------------------------------------------------------------------------- +must all fail! +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +create table t1 (col1 datetime) engine='TOKUDB' +partition by range(period_add(col1,5)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t2 (col1 datetime) engine='TOKUDB' +partition by list(period_add(col1,5)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t3 (col1 datetime) engine='TOKUDB' +partition by hash(period_add(col1,5)); +Got one of the listed errors +create table t4 (colint int, col1 datetime) engine='TOKUDB' +partition by range(colint) +subpartition by hash(period_add(col1,5)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t5 (colint int, col1 datetime) engine='TOKUDB' +partition by list(colint) +subpartition by hash(period_add(col1,5)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t6 (colint int, col1 datetime) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (period_add(9804,5)), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 (col1 datetime) engine='TOKUDB' ; +create table t22 (col1 datetime) engine='TOKUDB' ; +create table t33 (col1 datetime) engine='TOKUDB' ; +create table t44 (colint int, col1 datetime) engine='TOKUDB' ; +create table t55 (colint int, col1 datetime) engine='TOKUDB' ; +create table t66 (colint int, col1 datetime) engine='TOKUDB' ; +alter table t11 +partition by range(period_add(col1,5)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t22 +partition by list(period_add(col1,5)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t33 +partition by hash(period_add(col1,5)); +Got one of the listed errors +alter table t44 +partition by range(colint) +subpartition by hash(period_add(col1,5)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t55 +partition by list(colint) +subpartition by hash(period_add(col1,5)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t66 +partition by range(colint) +(partition p0 values less than (period_add(9804,5)), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +------------------------------------------------------------------------- +--- period_diff(col1,col2) in partition with coltype datetime,col2 datetime +------------------------------------------------------------------------- +must all fail! +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +create table t1 (col1 datetime,col2 datetime) engine='TOKUDB' +partition by range(period_diff(col1,col2)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t2 (col1 datetime,col2 datetime) engine='TOKUDB' +partition by list(period_diff(col1,col2)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t3 (col1 datetime,col2 datetime) engine='TOKUDB' +partition by hash(period_diff(col1,col2)); +Got one of the listed errors +create table t4 (colint int, col1 datetime,col2 datetime) engine='TOKUDB' +partition by range(colint) +subpartition by hash(period_diff(col1,col2)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t5 (colint int, col1 datetime,col2 datetime) engine='TOKUDB' +partition by list(colint) +subpartition by hash(period_diff(col1,col2)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t6 (colint int, col1 datetime,col2 datetime) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (period_diff(9809,199907)), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 (col1 datetime,col2 datetime) engine='TOKUDB' ; +create table t22 (col1 datetime,col2 datetime) engine='TOKUDB' ; +create table t33 (col1 datetime,col2 datetime) engine='TOKUDB' ; +create table t44 (colint int, col1 datetime,col2 datetime) engine='TOKUDB' ; +create table t55 (colint int, col1 datetime,col2 datetime) engine='TOKUDB' ; +create table t66 (colint int, col1 datetime,col2 datetime) engine='TOKUDB' ; +alter table t11 +partition by range(period_diff(col1,col2)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t22 +partition by list(period_diff(col1,col2)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t33 +partition by hash(period_diff(col1,col2)); +Got one of the listed errors +alter table t44 +partition by range(colint) +subpartition by hash(period_diff(col1,col2)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t55 +partition by list(colint) +subpartition by hash(period_diff(col1,col2)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t66 +partition by range(colint) +(partition p0 values less than (period_diff(9809,199907)), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +------------------------------------------------------------------------- +--- period_diff(col1,col2) in partition with coltype int,col2 int +------------------------------------------------------------------------- +must all fail! +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +create table t1 (col1 int,col2 int) engine='TOKUDB' +partition by range(period_diff(col1,col2)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t2 (col1 int,col2 int) engine='TOKUDB' +partition by list(period_diff(col1,col2)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t3 (col1 int,col2 int) engine='TOKUDB' +partition by hash(period_diff(col1,col2)); +Got one of the listed errors +create table t4 (colint int, col1 int,col2 int) engine='TOKUDB' +partition by range(colint) +subpartition by hash(period_diff(col1,col2)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t5 (colint int, col1 int,col2 int) engine='TOKUDB' +partition by list(colint) +subpartition by hash(period_diff(col1,col2)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t6 (colint int, col1 int,col2 int) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (period_diff(9809,199907)), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 (col1 int,col2 int) engine='TOKUDB' ; +create table t22 (col1 int,col2 int) engine='TOKUDB' ; +create table t33 (col1 int,col2 int) engine='TOKUDB' ; +create table t44 (colint int, col1 int,col2 int) engine='TOKUDB' ; +create table t55 (colint int, col1 int,col2 int) engine='TOKUDB' ; +create table t66 (colint int, col1 int,col2 int) engine='TOKUDB' ; +alter table t11 +partition by range(period_diff(col1,col2)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t22 +partition by list(period_diff(col1,col2)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t33 +partition by hash(period_diff(col1,col2)); +Got one of the listed errors +alter table t44 +partition by range(colint) +subpartition by hash(period_diff(col1,col2)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t55 +partition by list(colint) +subpartition by hash(period_diff(col1,col2)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t66 +partition by range(colint) +(partition p0 values less than (period_diff(9809,199907)), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +------------------------------------------------------------------------- +--- timestampdiff(day,5,col1) in partition with coltype datetime +------------------------------------------------------------------------- +must all fail! +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +create table t1 (col1 datetime) engine='TOKUDB' +partition by range(timestampdiff(day,5,col1)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t2 (col1 datetime) engine='TOKUDB' +partition by list(timestampdiff(day,5,col1)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t3 (col1 datetime) engine='TOKUDB' +partition by hash(timestampdiff(day,5,col1)); +Got one of the listed errors +create table t4 (colint int, col1 datetime) engine='TOKUDB' +partition by range(colint) +subpartition by hash(timestampdiff(day,5,col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t5 (colint int, col1 datetime) engine='TOKUDB' +partition by list(colint) +subpartition by hash(timestampdiff(day,5,col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t6 (colint int, col1 datetime) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (timestampdiff(YEAR,'2002-05-01','2001-01-01')), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 (col1 datetime) engine='TOKUDB' ; +create table t22 (col1 datetime) engine='TOKUDB' ; +create table t33 (col1 datetime) engine='TOKUDB' ; +create table t44 (colint int, col1 datetime) engine='TOKUDB' ; +create table t55 (colint int, col1 datetime) engine='TOKUDB' ; +create table t66 (colint int, col1 datetime) engine='TOKUDB' ; +alter table t11 +partition by range(timestampdiff(day,5,col1)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t22 +partition by list(timestampdiff(day,5,col1)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t33 +partition by hash(timestampdiff(day,5,col1)); +Got one of the listed errors +alter table t44 +partition by range(colint) +subpartition by hash(timestampdiff(day,5,col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t55 +partition by list(colint) +subpartition by hash(timestampdiff(day,5,col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t66 +partition by range(colint) +(partition p0 values less than (timestampdiff(YEAR,'2002-05-01','2001-01-01')), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +------------------------------------------------------------------------- +--- week(col1) in partition with coltype datetime +------------------------------------------------------------------------- +must all fail! +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +create table t1 (col1 datetime) engine='TOKUDB' +partition by range(week(col1)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t2 (col1 datetime) engine='TOKUDB' +partition by list(week(col1)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t3 (col1 datetime) engine='TOKUDB' +partition by hash(week(col1)); +Got one of the listed errors +create table t4 (colint int, col1 datetime) engine='TOKUDB' +partition by range(colint) +subpartition by hash(week(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t5 (colint int, col1 datetime) engine='TOKUDB' +partition by list(colint) +subpartition by hash(week(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t6 (colint int, col1 datetime) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (week('2002-05-01')), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 (col1 datetime) engine='TOKUDB' ; +create table t22 (col1 datetime) engine='TOKUDB' ; +create table t33 (col1 datetime) engine='TOKUDB' ; +create table t44 (colint int, col1 datetime) engine='TOKUDB' ; +create table t55 (colint int, col1 datetime) engine='TOKUDB' ; +create table t66 (colint int, col1 datetime) engine='TOKUDB' ; +alter table t11 +partition by range(week(col1)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t22 +partition by list(week(col1)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t33 +partition by hash(week(col1)); +Got one of the listed errors +alter table t44 +partition by range(colint) +subpartition by hash(week(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t55 +partition by list(colint) +subpartition by hash(week(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t66 +partition by range(colint) +(partition p0 values less than (week('2002-05-01')), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +------------------------------------------------------------------------- +--- weekofyear(col1) in partition with coltype datetime +------------------------------------------------------------------------- +must all fail! +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +create table t1 (col1 datetime) engine='TOKUDB' +partition by range(weekofyear(col1)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t2 (col1 datetime) engine='TOKUDB' +partition by list(weekofyear(col1)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t3 (col1 datetime) engine='TOKUDB' +partition by hash(weekofyear(col1)); +Got one of the listed errors +create table t4 (colint int, col1 datetime) engine='TOKUDB' +partition by range(colint) +subpartition by hash(weekofyear(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t5 (colint int, col1 datetime) engine='TOKUDB' +partition by list(colint) +subpartition by hash(weekofyear(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t6 (colint int, col1 datetime) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (weekofyear('2002-05-01')), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 (col1 datetime) engine='TOKUDB' ; +create table t22 (col1 datetime) engine='TOKUDB' ; +create table t33 (col1 datetime) engine='TOKUDB' ; +create table t44 (colint int, col1 datetime) engine='TOKUDB' ; +create table t55 (colint int, col1 datetime) engine='TOKUDB' ; +create table t66 (colint int, col1 datetime) engine='TOKUDB' ; +alter table t11 +partition by range(weekofyear(col1)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t22 +partition by list(weekofyear(col1)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t33 +partition by hash(weekofyear(col1)); +Got one of the listed errors +alter table t44 +partition by range(colint) +subpartition by hash(weekofyear(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t55 +partition by list(colint) +subpartition by hash(weekofyear(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t66 +partition by range(colint) +(partition p0 values less than (weekofyear('2002-05-01')), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +------------------------------------------------------------------------- +--- cast(col1 as signed) in partition with coltype varchar(30) +------------------------------------------------------------------------- +must all fail! +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +create table t1 (col1 varchar(30)) engine='TOKUDB' +partition by range(cast(col1 as signed)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t2 (col1 varchar(30)) engine='TOKUDB' +partition by list(cast(col1 as signed)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t3 (col1 varchar(30)) engine='TOKUDB' +partition by hash(cast(col1 as signed)); +Got one of the listed errors +create table t4 (colint int, col1 varchar(30)) engine='TOKUDB' +partition by range(colint) +subpartition by hash(cast(col1 as signed)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t5 (colint int, col1 varchar(30)) engine='TOKUDB' +partition by list(colint) +subpartition by hash(cast(col1 as signed)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t6 (colint int, col1 varchar(30)) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (cast(123 as signed)), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 (col1 varchar(30)) engine='TOKUDB' ; +create table t22 (col1 varchar(30)) engine='TOKUDB' ; +create table t33 (col1 varchar(30)) engine='TOKUDB' ; +create table t44 (colint int, col1 varchar(30)) engine='TOKUDB' ; +create table t55 (colint int, col1 varchar(30)) engine='TOKUDB' ; +create table t66 (colint int, col1 varchar(30)) engine='TOKUDB' ; +alter table t11 +partition by range(cast(col1 as signed)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t22 +partition by list(cast(col1 as signed)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t33 +partition by hash(cast(col1 as signed)); +Got one of the listed errors +alter table t44 +partition by range(colint) +subpartition by hash(cast(col1 as signed)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t55 +partition by list(colint) +subpartition by hash(cast(col1 as signed)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t66 +partition by range(colint) +(partition p0 values less than (cast(123 as signed)), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +------------------------------------------------------------------------- +--- convert(col1,unsigned) in partition with coltype varchar(30) +------------------------------------------------------------------------- +must all fail! +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +create table t1 (col1 varchar(30)) engine='TOKUDB' +partition by range(convert(col1,unsigned)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t2 (col1 varchar(30)) engine='TOKUDB' +partition by list(convert(col1,unsigned)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t3 (col1 varchar(30)) engine='TOKUDB' +partition by hash(convert(col1,unsigned)); +Got one of the listed errors +create table t4 (colint int, col1 varchar(30)) engine='TOKUDB' +partition by range(colint) +subpartition by hash(convert(col1,unsigned)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t5 (colint int, col1 varchar(30)) engine='TOKUDB' +partition by list(colint) +subpartition by hash(convert(col1,unsigned)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t6 (colint int, col1 varchar(30)) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (convert(123,unsigned)), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 (col1 varchar(30)) engine='TOKUDB' ; +create table t22 (col1 varchar(30)) engine='TOKUDB' ; +create table t33 (col1 varchar(30)) engine='TOKUDB' ; +create table t44 (colint int, col1 varchar(30)) engine='TOKUDB' ; +create table t55 (colint int, col1 varchar(30)) engine='TOKUDB' ; +create table t66 (colint int, col1 varchar(30)) engine='TOKUDB' ; +alter table t11 +partition by range(convert(col1,unsigned)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t22 +partition by list(convert(col1,unsigned)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t33 +partition by hash(convert(col1,unsigned)); +Got one of the listed errors +alter table t44 +partition by range(colint) +subpartition by hash(convert(col1,unsigned)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t55 +partition by list(colint) +subpartition by hash(convert(col1,unsigned)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t66 +partition by range(colint) +(partition p0 values less than (convert(123,unsigned)), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +------------------------------------------------------------------------- +--- col1 | 20 in partition with coltype int +------------------------------------------------------------------------- +must all fail! +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +create table t1 (col1 int) engine='TOKUDB' +partition by range(col1 | 20) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t2 (col1 int) engine='TOKUDB' +partition by list(col1 | 20) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t3 (col1 int) engine='TOKUDB' +partition by hash(col1 | 20); +Got one of the listed errors +create table t4 (colint int, col1 int) engine='TOKUDB' +partition by range(colint) +subpartition by hash(col1 | 20) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t5 (colint int, col1 int) engine='TOKUDB' +partition by list(colint) +subpartition by hash(col1 | 20) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t6 (colint int, col1 int) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (10 | 20), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 (col1 int) engine='TOKUDB' ; +create table t22 (col1 int) engine='TOKUDB' ; +create table t33 (col1 int) engine='TOKUDB' ; +create table t44 (colint int, col1 int) engine='TOKUDB' ; +create table t55 (colint int, col1 int) engine='TOKUDB' ; +create table t66 (colint int, col1 int) engine='TOKUDB' ; +alter table t11 +partition by range(col1 | 20) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t22 +partition by list(col1 | 20) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t33 +partition by hash(col1 | 20); +Got one of the listed errors +alter table t44 +partition by range(colint) +subpartition by hash(col1 | 20) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t55 +partition by list(colint) +subpartition by hash(col1 | 20) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t66 +partition by range(colint) +(partition p0 values less than (10 | 20), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +------------------------------------------------------------------------- +--- col1 & 20 in partition with coltype int +------------------------------------------------------------------------- +must all fail! +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +create table t1 (col1 int) engine='TOKUDB' +partition by range(col1 & 20) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t2 (col1 int) engine='TOKUDB' +partition by list(col1 & 20) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t3 (col1 int) engine='TOKUDB' +partition by hash(col1 & 20); +Got one of the listed errors +create table t4 (colint int, col1 int) engine='TOKUDB' +partition by range(colint) +subpartition by hash(col1 & 20) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t5 (colint int, col1 int) engine='TOKUDB' +partition by list(colint) +subpartition by hash(col1 & 20) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t6 (colint int, col1 int) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (10 & 20), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 (col1 int) engine='TOKUDB' ; +create table t22 (col1 int) engine='TOKUDB' ; +create table t33 (col1 int) engine='TOKUDB' ; +create table t44 (colint int, col1 int) engine='TOKUDB' ; +create table t55 (colint int, col1 int) engine='TOKUDB' ; +create table t66 (colint int, col1 int) engine='TOKUDB' ; +alter table t11 +partition by range(col1 & 20) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t22 +partition by list(col1 & 20) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t33 +partition by hash(col1 & 20); +Got one of the listed errors +alter table t44 +partition by range(colint) +subpartition by hash(col1 & 20) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t55 +partition by list(colint) +subpartition by hash(col1 & 20) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t66 +partition by range(colint) +(partition p0 values less than (10 & 20), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +------------------------------------------------------------------------- +--- col1 ^ 20 in partition with coltype int +------------------------------------------------------------------------- +must all fail! +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +create table t1 (col1 int) engine='TOKUDB' +partition by range(col1 ^ 20) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t2 (col1 int) engine='TOKUDB' +partition by list(col1 ^ 20) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t3 (col1 int) engine='TOKUDB' +partition by hash(col1 ^ 20); +Got one of the listed errors +create table t4 (colint int, col1 int) engine='TOKUDB' +partition by range(colint) +subpartition by hash(col1 ^ 20) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t5 (colint int, col1 int) engine='TOKUDB' +partition by list(colint) +subpartition by hash(col1 ^ 20) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t6 (colint int, col1 int) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (10 ^ 20), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 (col1 int) engine='TOKUDB' ; +create table t22 (col1 int) engine='TOKUDB' ; +create table t33 (col1 int) engine='TOKUDB' ; +create table t44 (colint int, col1 int) engine='TOKUDB' ; +create table t55 (colint int, col1 int) engine='TOKUDB' ; +create table t66 (colint int, col1 int) engine='TOKUDB' ; +alter table t11 +partition by range(col1 ^ 20) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t22 +partition by list(col1 ^ 20) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t33 +partition by hash(col1 ^ 20); +Got one of the listed errors +alter table t44 +partition by range(colint) +subpartition by hash(col1 ^ 20) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t55 +partition by list(colint) +subpartition by hash(col1 ^ 20) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t66 +partition by range(colint) +(partition p0 values less than (10 ^ 20), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +------------------------------------------------------------------------- +--- col1 << 20 in partition with coltype int +------------------------------------------------------------------------- +must all fail! +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +create table t1 (col1 int) engine='TOKUDB' +partition by range(col1 << 20) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t2 (col1 int) engine='TOKUDB' +partition by list(col1 << 20) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t3 (col1 int) engine='TOKUDB' +partition by hash(col1 << 20); +Got one of the listed errors +create table t4 (colint int, col1 int) engine='TOKUDB' +partition by range(colint) +subpartition by hash(col1 << 20) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t5 (colint int, col1 int) engine='TOKUDB' +partition by list(colint) +subpartition by hash(col1 << 20) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t6 (colint int, col1 int) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (10 << 20), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 (col1 int) engine='TOKUDB' ; +create table t22 (col1 int) engine='TOKUDB' ; +create table t33 (col1 int) engine='TOKUDB' ; +create table t44 (colint int, col1 int) engine='TOKUDB' ; +create table t55 (colint int, col1 int) engine='TOKUDB' ; +create table t66 (colint int, col1 int) engine='TOKUDB' ; +alter table t11 +partition by range(col1 << 20) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t22 +partition by list(col1 << 20) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t33 +partition by hash(col1 << 20); +Got one of the listed errors +alter table t44 +partition by range(colint) +subpartition by hash(col1 << 20) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t55 +partition by list(colint) +subpartition by hash(col1 << 20) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t66 +partition by range(colint) +(partition p0 values less than (10 << 20), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +------------------------------------------------------------------------- +--- col1 >> 20 in partition with coltype int +------------------------------------------------------------------------- +must all fail! +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +create table t1 (col1 int) engine='TOKUDB' +partition by range(col1 >> 20) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t2 (col1 int) engine='TOKUDB' +partition by list(col1 >> 20) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t3 (col1 int) engine='TOKUDB' +partition by hash(col1 >> 20); +Got one of the listed errors +create table t4 (colint int, col1 int) engine='TOKUDB' +partition by range(colint) +subpartition by hash(col1 >> 20) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t5 (colint int, col1 int) engine='TOKUDB' +partition by list(colint) +subpartition by hash(col1 >> 20) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t6 (colint int, col1 int) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (10 >> 20), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 (col1 int) engine='TOKUDB' ; +create table t22 (col1 int) engine='TOKUDB' ; +create table t33 (col1 int) engine='TOKUDB' ; +create table t44 (colint int, col1 int) engine='TOKUDB' ; +create table t55 (colint int, col1 int) engine='TOKUDB' ; +create table t66 (colint int, col1 int) engine='TOKUDB' ; +alter table t11 +partition by range(col1 >> 20) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t22 +partition by list(col1 >> 20) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t33 +partition by hash(col1 >> 20); +Got one of the listed errors +alter table t44 +partition by range(colint) +subpartition by hash(col1 >> 20) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t55 +partition by list(colint) +subpartition by hash(col1 >> 20) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t66 +partition by range(colint) +(partition p0 values less than (10 >> 20), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +------------------------------------------------------------------------- +--- ~col1 in partition with coltype int +------------------------------------------------------------------------- +must all fail! +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +create table t1 (col1 int) engine='TOKUDB' +partition by range(~col1) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t2 (col1 int) engine='TOKUDB' +partition by list(~col1) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t3 (col1 int) engine='TOKUDB' +partition by hash(~col1); +Got one of the listed errors +create table t4 (colint int, col1 int) engine='TOKUDB' +partition by range(colint) +subpartition by hash(~col1) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t5 (colint int, col1 int) engine='TOKUDB' +partition by list(colint) +subpartition by hash(~col1) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t6 (colint int, col1 int) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (~20), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 (col1 int) engine='TOKUDB' ; +create table t22 (col1 int) engine='TOKUDB' ; +create table t33 (col1 int) engine='TOKUDB' ; +create table t44 (colint int, col1 int) engine='TOKUDB' ; +create table t55 (colint int, col1 int) engine='TOKUDB' ; +create table t66 (colint int, col1 int) engine='TOKUDB' ; +alter table t11 +partition by range(~col1) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t22 +partition by list(~col1) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t33 +partition by hash(~col1); +Got one of the listed errors +alter table t44 +partition by range(colint) +subpartition by hash(~col1) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t55 +partition by list(colint) +subpartition by hash(~col1) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t66 +partition by range(colint) +(partition p0 values less than (~20), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +------------------------------------------------------------------------- +--- bit_count(col1) in partition with coltype int +------------------------------------------------------------------------- +must all fail! +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +create table t1 (col1 int) engine='TOKUDB' +partition by range(bit_count(col1)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t2 (col1 int) engine='TOKUDB' +partition by list(bit_count(col1)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t3 (col1 int) engine='TOKUDB' +partition by hash(bit_count(col1)); +Got one of the listed errors +create table t4 (colint int, col1 int) engine='TOKUDB' +partition by range(colint) +subpartition by hash(bit_count(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t5 (colint int, col1 int) engine='TOKUDB' +partition by list(colint) +subpartition by hash(bit_count(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t6 (colint int, col1 int) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (bit_count(20)), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 (col1 int) engine='TOKUDB' ; +create table t22 (col1 int) engine='TOKUDB' ; +create table t33 (col1 int) engine='TOKUDB' ; +create table t44 (colint int, col1 int) engine='TOKUDB' ; +create table t55 (colint int, col1 int) engine='TOKUDB' ; +create table t66 (colint int, col1 int) engine='TOKUDB' ; +alter table t11 +partition by range(bit_count(col1)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t22 +partition by list(bit_count(col1)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t33 +partition by hash(bit_count(col1)); +Got one of the listed errors +alter table t44 +partition by range(colint) +subpartition by hash(bit_count(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t55 +partition by list(colint) +subpartition by hash(bit_count(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t66 +partition by range(colint) +(partition p0 values less than (bit_count(20)), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +------------------------------------------------------------------------- +--- inet_aton(col1) in partition with coltype int +------------------------------------------------------------------------- +must all fail! +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +create table t1 (col1 int) engine='TOKUDB' +partition by range(inet_aton(col1)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t2 (col1 int) engine='TOKUDB' +partition by list(inet_aton(col1)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t3 (col1 int) engine='TOKUDB' +partition by hash(inet_aton(col1)); +Got one of the listed errors +create table t4 (colint int, col1 int) engine='TOKUDB' +partition by range(colint) +subpartition by hash(inet_aton(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t5 (colint int, col1 int) engine='TOKUDB' +partition by list(colint) +subpartition by hash(inet_aton(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t6 (colint int, col1 int) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (inet_aton('192.168.1.1')), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 (col1 int) engine='TOKUDB' ; +create table t22 (col1 int) engine='TOKUDB' ; +create table t33 (col1 int) engine='TOKUDB' ; +create table t44 (colint int, col1 int) engine='TOKUDB' ; +create table t55 (colint int, col1 int) engine='TOKUDB' ; +create table t66 (colint int, col1 int) engine='TOKUDB' ; +alter table t11 +partition by range(inet_aton(col1)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t22 +partition by list(inet_aton(col1)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t33 +partition by hash(inet_aton(col1)); +Got one of the listed errors +alter table t44 +partition by range(colint) +subpartition by hash(inet_aton(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t55 +partition by list(colint) +subpartition by hash(inet_aton(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t66 +partition by range(colint) +(partition p0 values less than (inet_aton('192.168.1.1')), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +set @var =20; +------------------------------------------------------------------------- +--- bit_length(col1)+@var-@var in partition with coltype int +------------------------------------------------------------------------- +must all fail! +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +create table t1 (col1 int) engine='TOKUDB' +partition by range(bit_length(col1)+@var-@var) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t2 (col1 int) engine='TOKUDB' +partition by list(bit_length(col1)+@var-@var) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t3 (col1 int) engine='TOKUDB' +partition by hash(bit_length(col1)+@var-@var); +Got one of the listed errors +create table t4 (colint int, col1 int) engine='TOKUDB' +partition by range(colint) +subpartition by hash(bit_length(col1)+@var-@var) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t5 (colint int, col1 int) engine='TOKUDB' +partition by list(colint) +subpartition by hash(bit_length(col1)+@var-@var) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t6 (colint int, col1 int) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (bit_length(20)+@var-@var), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 (col1 int) engine='TOKUDB' ; +create table t22 (col1 int) engine='TOKUDB' ; +create table t33 (col1 int) engine='TOKUDB' ; +create table t44 (colint int, col1 int) engine='TOKUDB' ; +create table t55 (colint int, col1 int) engine='TOKUDB' ; +create table t66 (colint int, col1 int) engine='TOKUDB' ; +alter table t11 +partition by range(bit_length(col1)+@var-@var) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t22 +partition by list(bit_length(col1)+@var-@var) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t33 +partition by hash(bit_length(col1)+@var-@var); +Got one of the listed errors +alter table t44 +partition by range(colint) +subpartition by hash(bit_length(col1)+@var-@var) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t55 +partition by list(colint) +subpartition by hash(bit_length(col1)+@var-@var) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t66 +partition by range(colint) +(partition p0 values less than (bit_length(20)+@var-@var), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create function getmaxsigned_t1(col int) returns int +begin +declare done int default 0; +declare v4 int; +declare max int; +declare cur1 cursor for +select col from t1; +declare continue handler for sqlstate '01000' set done = 1; +declare continue handler for sqlstate '02000' set done = 1; +open cur1; +set max = 0; +fetch cur1 into v4; +wl_loop: WHILE NOT done DO +fetch cur1 into v4; +IF v4 > max +then set max = v4; +END IF; +END WHILE wl_loop; +close cur1; +return max; +end// +------------------------------------------------------------------------- +--- getmaxsigned_t1(col1) in partition with coltype int +------------------------------------------------------------------------- +must all fail! +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +create table t1 (col1 int) engine='TOKUDB' +partition by range(getmaxsigned_t1(col1)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t2 (col1 int) engine='TOKUDB' +partition by list(getmaxsigned_t1(col1)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t3 (col1 int) engine='TOKUDB' +partition by hash(getmaxsigned_t1(col1)); +Got one of the listed errors +create table t4 (colint int, col1 int) engine='TOKUDB' +partition by range(colint) +subpartition by hash(getmaxsigned_t1(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +create table t5 (colint int, col1 int) engine='TOKUDB' +partition by list(colint) +subpartition by hash(getmaxsigned_t1(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +create table t6 (colint int, col1 int) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (getmaxsigned(10)), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 (col1 int) engine='TOKUDB' ; +create table t22 (col1 int) engine='TOKUDB' ; +create table t33 (col1 int) engine='TOKUDB' ; +create table t44 (colint int, col1 int) engine='TOKUDB' ; +create table t55 (colint int, col1 int) engine='TOKUDB' ; +create table t66 (colint int, col1 int) engine='TOKUDB' ; +alter table t11 +partition by range(getmaxsigned_t1(col1)) +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t22 +partition by list(getmaxsigned_t1(col1)) +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t33 +partition by hash(getmaxsigned_t1(col1)); +Got one of the listed errors +alter table t44 +partition by range(colint) +subpartition by hash(getmaxsigned_t1(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than (31)); +Got one of the listed errors +alter table t55 +partition by list(colint) +subpartition by hash(getmaxsigned_t1(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30)); +Got one of the listed errors +alter table t66 +partition by range(colint) +(partition p0 values less than (getmaxsigned(10)), +partition p1 values less than maxvalue); +Got one of the listed errors +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +drop function if exists getmaxsigned_t1; diff --git a/mysql-test/suite/tokudb.parts/r-native/part_supported_sql_func_tokudb.result b/mysql-test/suite/tokudb.parts/r-native/part_supported_sql_func_tokudb.result new file mode 100644 index 000000000000..82cbcbc311ed --- /dev/null +++ b/mysql-test/suite/tokudb.parts/r-native/part_supported_sql_func_tokudb.result @@ -0,0 +1,11065 @@ +------------------------------------------------------------------------- +--- abs(col1) in partition with coltype int +------------------------------------------------------------------------- +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +------------------------------------------------------------------------- +--- Create tables with abs(col1) +------------------------------------------------------------------------- +create table t1 (col1 int) engine='TOKUDB' +partition by range(abs(col1)) +(partition p0 values less than (15), +partition p1 values less than maxvalue); +create table t2 (col1 int) engine='TOKUDB' +partition by list(abs(col1)) +(partition p0 values in (0,1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +create table t3 (col1 int) engine='TOKUDB' +partition by hash(abs(col1)); +create table t4 (colint int, col1 int) engine='TOKUDB' +partition by range(colint) +subpartition by hash(abs(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than maxvalue); +create table t5 (colint int, col1 int) engine='TOKUDB' +partition by list(colint) +subpartition by hash(abs(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +create table t6 (colint int, col1 int) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (abs(15)), +partition p1 values less than maxvalue); +------------------------------------------------------------------------- +--- Access tables with abs(col1) +------------------------------------------------------------------------- +insert into t1 values (5 ); +insert into t1 values (13 ); +insert into t2 values (5 ); +insert into t2 values (13 ); +insert into t2 values (17 ); +insert into t3 values (5 ); +insert into t3 values (13 ); +insert into t3 values (17 ); +load data infile 'MYSQLTEST_VARDIR/std_data/parts/part_supported_sql_funcs_int_int.inc' into table t4; +load data infile 'MYSQLTEST_VARDIR/std_data/parts/part_supported_sql_funcs_int_int.inc' into table t5; +load data infile 'MYSQLTEST_VARDIR/std_data/parts/part_supported_sql_funcs_int_int.inc' into table t6; +select abs(col1) from t1 order by col1; +abs(col1) +5 +13 +select * from t1 order by col1; +col1 +5 +13 +select * from t2 order by col1; +col1 +5 +13 +17 +select * from t3 order by col1; +col1 +5 +13 +17 +select * from t4 order by colint; +colint col1 +1 5 +2 13 +3 15 +4 17 +5 23 +6 34 +7 56 +8 56 +9 45 +10 34 +11 78 +12 89 +13 67 +14 46 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 5 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +select * from t5 order by colint; +colint col1 +1 5 +2 13 +3 15 +4 17 +5 23 +6 34 +7 56 +8 56 +9 45 +10 34 +11 78 +12 89 +13 67 +14 46 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 5 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +select * from t6 order by colint; +colint col1 +1 5 +2 13 +3 15 +4 17 +5 23 +6 34 +7 56 +8 56 +9 45 +10 34 +11 78 +12 89 +13 67 +14 46 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 5 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +update t1 set col1=15 where col1=5 ; +update t2 set col1=15 where col1=5 ; +update t3 set col1=15 where col1=5 ; +update t4 set col1=15 where col1=5 ; +update t5 set col1=15 where col1=5 ; +update t6 set col1=15 where col1=5 ; +select * from t1 order by col1; +col1 +13 +15 +select * from t2 order by col1; +col1 +13 +15 +17 +select * from t3 order by col1; +col1 +13 +15 +17 +select * from t4 order by colint; +colint col1 +1 15 +2 13 +3 15 +4 17 +5 23 +6 34 +7 56 +8 56 +9 45 +10 34 +11 78 +12 89 +13 67 +14 46 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 15 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +select * from t5 order by colint; +colint col1 +1 15 +2 13 +3 15 +4 17 +5 23 +6 34 +7 56 +8 56 +9 45 +10 34 +11 78 +12 89 +13 67 +14 46 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 15 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +select * from t6 order by colint; +colint col1 +1 15 +2 13 +3 15 +4 17 +5 23 +6 34 +7 56 +8 56 +9 45 +10 34 +11 78 +12 89 +13 67 +14 46 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 15 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +------------------------------------------------------------------------- +--- Alter tables with abs(col1) +------------------------------------------------------------------------- +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 engine='TOKUDB' as select * from t1; +create table t22 engine='TOKUDB' as select * from t2; +create table t33 engine='TOKUDB' as select * from t3; +create table t44 engine='TOKUDB' as select * from t4; +create table t55 engine='TOKUDB' as select * from t5; +create table t66 engine='TOKUDB' as select * from t6; +alter table t11 +partition by range(abs(col1)) +(partition p0 values less than (15), +partition p1 values less than maxvalue); +alter table t22 +partition by list(abs(col1)) +(partition p0 values in (0,1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +alter table t33 +partition by hash(abs(col1)); +alter table t44 +partition by range(colint) +subpartition by hash(abs(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than maxvalue); +alter table t55 +partition by list(colint) +subpartition by hash(abs(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +alter table t66 +partition by range(colint) +(partition p0 values less than (abs(15)), +partition p1 values less than maxvalue); +select * from t11 order by col1; +col1 +13 +15 +select * from t22 order by col1; +col1 +13 +15 +17 +select * from t33 order by col1; +col1 +13 +15 +17 +select * from t44 order by colint; +colint col1 +1 15 +2 13 +3 15 +4 17 +5 23 +6 34 +7 56 +8 56 +9 45 +10 34 +11 78 +12 89 +13 67 +14 46 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 15 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +select * from t55 order by colint; +colint col1 +1 15 +2 13 +3 15 +4 17 +5 23 +6 34 +7 56 +8 56 +9 45 +10 34 +11 78 +12 89 +13 67 +14 46 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 15 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +select * from t66 order by colint; +colint col1 +1 15 +2 13 +3 15 +4 17 +5 23 +6 34 +7 56 +8 56 +9 45 +10 34 +11 78 +12 89 +13 67 +14 46 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 15 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +--------------------------- +---- some alter table begin +--------------------------- +alter table t11 +reorganize partition p0,p1 into +(partition s1 values less than maxvalue); +select * from t11 order by col1; +col1 +13 +15 +alter table t11 +reorganize partition s1 into +(partition p0 values less than (15), +partition p1 values less than maxvalue); +select * from t11 order by col1; +col1 +13 +15 +alter table t55 +partition by list(colint) +subpartition by hash(abs(col1)) subpartitions 5 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +show create table t55; +Table Create Table +t55 CREATE TABLE `t55` ( + `colint` int(11) DEFAULT NULL, + `col1` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (colint) +SUBPARTITION BY HASH (abs(col1)) +SUBPARTITIONS 5 +(PARTITION p0 VALUES IN (1,2,3,4,5,6,7,8,9,10) ENGINE = TokuDB, + PARTITION p1 VALUES IN (11,12,13,14,15,16,17,18,19,20) ENGINE = TokuDB, + PARTITION p2 VALUES IN (21,22,23,24,25,26,27,28,29,30) ENGINE = TokuDB, + PARTITION p3 VALUES IN (31,32,33,34,35,36,37,38,39,40) ENGINE = TokuDB, + PARTITION p4 VALUES IN (41,42,43,44,45,46,47,48,49,50) ENGINE = TokuDB, + PARTITION p5 VALUES IN (51,52,53,54,55,56,57,58,59,60) ENGINE = TokuDB) */ +select * from t55 order by colint; +colint col1 +1 15 +2 13 +3 15 +4 17 +5 23 +6 34 +7 56 +8 56 +9 45 +10 34 +11 78 +12 89 +13 67 +14 46 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 15 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +alter table t66 +reorganize partition p0,p1 into +(partition s1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 15 +2 13 +3 15 +4 17 +5 23 +6 34 +7 56 +8 56 +9 45 +10 34 +11 78 +12 89 +13 67 +14 46 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 15 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +alter table t66 +reorganize partition s1 into +(partition p0 values less than (abs(15)), +partition p1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 15 +2 13 +3 15 +4 17 +5 23 +6 34 +7 56 +8 56 +9 45 +10 34 +11 78 +12 89 +13 67 +14 46 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 15 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +alter table t66 +reorganize partition p0,p1 into +(partition s1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 15 +2 13 +3 15 +4 17 +5 23 +6 34 +7 56 +8 56 +9 45 +10 34 +11 78 +12 89 +13 67 +14 46 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 15 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +alter table t66 +reorganize partition s1 into +(partition p0 values less than (abs(15)), +partition p1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 15 +2 13 +3 15 +4 17 +5 23 +6 34 +7 56 +8 56 +9 45 +10 34 +11 78 +12 89 +13 67 +14 46 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 15 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +------------------------------------------------------------------------- +--- Delete rows and partitions of tables with abs(col1) +------------------------------------------------------------------------- +delete from t1 where col1=13 ; +delete from t2 where col1=13 ; +delete from t3 where col1=13 ; +delete from t4 where col1=13 ; +delete from t5 where col1=13 ; +delete from t6 where col1=13 ; +select * from t1 order by col1; +col1 +15 +select * from t2 order by col1; +col1 +15 +17 +select * from t3 order by col1; +col1 +15 +17 +select * from t4 order by colint; +colint col1 +1 15 +3 15 +4 17 +5 23 +6 34 +7 56 +8 56 +9 45 +10 34 +11 78 +12 89 +13 67 +14 46 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 15 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +select * from t5 order by colint; +colint col1 +1 15 +3 15 +4 17 +5 23 +6 34 +7 56 +8 56 +9 45 +10 34 +11 78 +12 89 +13 67 +14 46 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 15 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +insert into t1 values (13 ); +insert into t2 values (13 ); +insert into t3 values (13 ); +insert into t4 values (60,13 ); +insert into t5 values (60,13 ); +insert into t6 values (60,13 ); +select * from t1 order by col1; +col1 +13 +15 +select * from t2 order by col1; +col1 +13 +15 +17 +select * from t3 order by col1; +col1 +13 +15 +17 +select * from t4 order by colint; +colint col1 +1 15 +3 15 +4 17 +5 23 +6 34 +7 56 +8 56 +9 45 +10 34 +11 78 +12 89 +13 67 +14 46 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 15 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +60 13 +select * from t5 order by colint; +colint col1 +1 15 +3 15 +4 17 +5 23 +6 34 +7 56 +8 56 +9 45 +10 34 +11 78 +12 89 +13 67 +14 46 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 15 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +60 13 +select * from t6 order by colint; +colint col1 +1 15 +3 15 +4 17 +5 23 +6 34 +7 56 +8 56 +9 45 +10 34 +11 78 +12 89 +13 67 +14 46 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 15 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +60 13 +alter table t1 drop partition p0; +alter table t2 drop partition p0; +alter table t4 drop partition p0; +alter table t5 drop partition p0; +alter table t6 drop partition p0; +select * from t1 order by col1; +col1 +15 +select * from t2 order by col1; +col1 +13 +15 +17 +select * from t3 order by col1; +col1 +13 +15 +17 +select * from t4 order by colint; +colint col1 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 15 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +60 13 +select * from t5 order by colint; +colint col1 +11 78 +12 89 +13 67 +14 46 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 15 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +60 13 +select * from t6 order by colint; +colint col1 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 15 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +60 13 +------------------------------------------------------------------------- +--- Delete rows and partitions of tables with abs(col1) +------------------------------------------------------------------------- +delete from t11 where col1=13 ; +delete from t22 where col1=13 ; +delete from t33 where col1=13 ; +delete from t44 where col1=13 ; +delete from t55 where col1=13 ; +delete from t66 where col1=13 ; +select * from t11 order by col1; +col1 +15 +select * from t22 order by col1; +col1 +15 +17 +select * from t33 order by col1; +col1 +15 +17 +select * from t44 order by colint; +colint col1 +1 15 +3 15 +4 17 +5 23 +6 34 +7 56 +8 56 +9 45 +10 34 +11 78 +12 89 +13 67 +14 46 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 15 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +select * from t55 order by colint; +colint col1 +1 15 +3 15 +4 17 +5 23 +6 34 +7 56 +8 56 +9 45 +10 34 +11 78 +12 89 +13 67 +14 46 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 15 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +insert into t11 values (13 ); +insert into t22 values (13 ); +insert into t33 values (13 ); +insert into t44 values (60,13 ); +insert into t55 values (60,13 ); +insert into t66 values (60,13 ); +select * from t11 order by col1; +col1 +13 +15 +select * from t22 order by col1; +col1 +13 +15 +17 +select * from t33 order by col1; +col1 +13 +15 +17 +select * from t44 order by colint; +colint col1 +1 15 +3 15 +4 17 +5 23 +6 34 +7 56 +8 56 +9 45 +10 34 +11 78 +12 89 +13 67 +14 46 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 15 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +60 13 +select * from t55 order by colint; +colint col1 +1 15 +3 15 +4 17 +5 23 +6 34 +7 56 +8 56 +9 45 +10 34 +11 78 +12 89 +13 67 +14 46 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 15 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +60 13 +select * from t66 order by colint; +colint col1 +1 15 +3 15 +4 17 +5 23 +6 34 +7 56 +8 56 +9 45 +10 34 +11 78 +12 89 +13 67 +14 46 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 15 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +60 13 +alter table t11 drop partition p0; +alter table t22 drop partition p0; +alter table t44 drop partition p0; +alter table t55 drop partition p0; +alter table t66 drop partition p0; +select * from t11 order by col1; +col1 +15 +select * from t22 order by col1; +col1 +13 +15 +17 +select * from t33 order by col1; +col1 +13 +15 +17 +select * from t44 order by colint; +colint col1 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 15 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +60 13 +select * from t55 order by colint; +colint col1 +11 78 +12 89 +13 67 +14 46 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 15 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +60 13 +select * from t66 order by colint; +colint col1 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 15 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +60 13 +------------------------- +---- some alter table end +------------------------- +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +------------------------------------------------------------------------- +--- mod(col1,10) in partition with coltype int +------------------------------------------------------------------------- +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +------------------------------------------------------------------------- +--- Create tables with mod(col1,10) +------------------------------------------------------------------------- +create table t1 (col1 int) engine='TOKUDB' +partition by range(mod(col1,10)) +(partition p0 values less than (15), +partition p1 values less than maxvalue); +create table t2 (col1 int) engine='TOKUDB' +partition by list(mod(col1,10)) +(partition p0 values in (0,1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +create table t3 (col1 int) engine='TOKUDB' +partition by hash(mod(col1,10)); +create table t4 (colint int, col1 int) engine='TOKUDB' +partition by range(colint) +subpartition by hash(mod(col1,10)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than maxvalue); +create table t5 (colint int, col1 int) engine='TOKUDB' +partition by list(colint) +subpartition by hash(mod(col1,10)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +create table t6 (colint int, col1 int) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (mod(15,10)), +partition p1 values less than maxvalue); +------------------------------------------------------------------------- +--- Access tables with mod(col1,10) +------------------------------------------------------------------------- +insert into t1 values (5); +insert into t1 values (19); +insert into t2 values (5); +insert into t2 values (19); +insert into t2 values (17); +insert into t3 values (5); +insert into t3 values (19); +insert into t3 values (17); +load data infile 'MYSQLTEST_VARDIR/std_data/parts/part_supported_sql_funcs_int_int.inc' into table t4; +load data infile 'MYSQLTEST_VARDIR/std_data/parts/part_supported_sql_funcs_int_int.inc' into table t5; +load data infile 'MYSQLTEST_VARDIR/std_data/parts/part_supported_sql_funcs_int_int.inc' into table t6; +select mod(col1,10) from t1 order by col1; +mod(col1,10) +5 +9 +select * from t1 order by col1; +col1 +5 +19 +select * from t2 order by col1; +col1 +5 +17 +19 +select * from t3 order by col1; +col1 +5 +17 +19 +select * from t4 order by colint; +colint col1 +1 5 +2 13 +3 15 +4 17 +5 23 +6 34 +7 56 +8 56 +9 45 +10 34 +11 78 +12 89 +13 67 +14 46 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 5 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +select * from t5 order by colint; +colint col1 +1 5 +2 13 +3 15 +4 17 +5 23 +6 34 +7 56 +8 56 +9 45 +10 34 +11 78 +12 89 +13 67 +14 46 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 5 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +select * from t6 order by colint; +colint col1 +1 5 +2 13 +3 15 +4 17 +5 23 +6 34 +7 56 +8 56 +9 45 +10 34 +11 78 +12 89 +13 67 +14 46 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 5 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +update t1 set col1=15 where col1=5; +update t2 set col1=15 where col1=5; +update t3 set col1=15 where col1=5; +update t4 set col1=15 where col1=5; +update t5 set col1=15 where col1=5; +update t6 set col1=15 where col1=5; +select * from t1 order by col1; +col1 +15 +19 +select * from t2 order by col1; +col1 +15 +17 +19 +select * from t3 order by col1; +col1 +15 +17 +19 +select * from t4 order by colint; +colint col1 +1 15 +2 13 +3 15 +4 17 +5 23 +6 34 +7 56 +8 56 +9 45 +10 34 +11 78 +12 89 +13 67 +14 46 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 15 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +select * from t5 order by colint; +colint col1 +1 15 +2 13 +3 15 +4 17 +5 23 +6 34 +7 56 +8 56 +9 45 +10 34 +11 78 +12 89 +13 67 +14 46 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 15 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +select * from t6 order by colint; +colint col1 +1 15 +2 13 +3 15 +4 17 +5 23 +6 34 +7 56 +8 56 +9 45 +10 34 +11 78 +12 89 +13 67 +14 46 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 15 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +------------------------------------------------------------------------- +--- Alter tables with mod(col1,10) +------------------------------------------------------------------------- +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 engine='TOKUDB' as select * from t1; +create table t22 engine='TOKUDB' as select * from t2; +create table t33 engine='TOKUDB' as select * from t3; +create table t44 engine='TOKUDB' as select * from t4; +create table t55 engine='TOKUDB' as select * from t5; +create table t66 engine='TOKUDB' as select * from t6; +alter table t11 +partition by range(mod(col1,10)) +(partition p0 values less than (15), +partition p1 values less than maxvalue); +alter table t22 +partition by list(mod(col1,10)) +(partition p0 values in (0,1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +alter table t33 +partition by hash(mod(col1,10)); +alter table t44 +partition by range(colint) +subpartition by hash(mod(col1,10)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than maxvalue); +alter table t55 +partition by list(colint) +subpartition by hash(mod(col1,10)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +alter table t66 +partition by range(colint) +(partition p0 values less than (mod(15,10)), +partition p1 values less than maxvalue); +select * from t11 order by col1; +col1 +15 +19 +select * from t22 order by col1; +col1 +15 +17 +19 +select * from t33 order by col1; +col1 +15 +17 +19 +select * from t44 order by colint; +colint col1 +1 15 +2 13 +3 15 +4 17 +5 23 +6 34 +7 56 +8 56 +9 45 +10 34 +11 78 +12 89 +13 67 +14 46 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 15 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +select * from t55 order by colint; +colint col1 +1 15 +2 13 +3 15 +4 17 +5 23 +6 34 +7 56 +8 56 +9 45 +10 34 +11 78 +12 89 +13 67 +14 46 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 15 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +select * from t66 order by colint; +colint col1 +1 15 +2 13 +3 15 +4 17 +5 23 +6 34 +7 56 +8 56 +9 45 +10 34 +11 78 +12 89 +13 67 +14 46 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 15 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +--------------------------- +---- some alter table begin +--------------------------- +alter table t11 +reorganize partition p0,p1 into +(partition s1 values less than maxvalue); +select * from t11 order by col1; +col1 +15 +19 +alter table t11 +reorganize partition s1 into +(partition p0 values less than (15), +partition p1 values less than maxvalue); +select * from t11 order by col1; +col1 +15 +19 +alter table t55 +partition by list(colint) +subpartition by hash(mod(col1,10)) subpartitions 5 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +show create table t55; +Table Create Table +t55 CREATE TABLE `t55` ( + `colint` int(11) DEFAULT NULL, + `col1` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (colint) +SUBPARTITION BY HASH (mod(col1,10)) +SUBPARTITIONS 5 +(PARTITION p0 VALUES IN (1,2,3,4,5,6,7,8,9,10) ENGINE = TokuDB, + PARTITION p1 VALUES IN (11,12,13,14,15,16,17,18,19,20) ENGINE = TokuDB, + PARTITION p2 VALUES IN (21,22,23,24,25,26,27,28,29,30) ENGINE = TokuDB, + PARTITION p3 VALUES IN (31,32,33,34,35,36,37,38,39,40) ENGINE = TokuDB, + PARTITION p4 VALUES IN (41,42,43,44,45,46,47,48,49,50) ENGINE = TokuDB, + PARTITION p5 VALUES IN (51,52,53,54,55,56,57,58,59,60) ENGINE = TokuDB) */ +select * from t55 order by colint; +colint col1 +1 15 +2 13 +3 15 +4 17 +5 23 +6 34 +7 56 +8 56 +9 45 +10 34 +11 78 +12 89 +13 67 +14 46 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 15 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +alter table t66 +reorganize partition p0,p1 into +(partition s1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 15 +2 13 +3 15 +4 17 +5 23 +6 34 +7 56 +8 56 +9 45 +10 34 +11 78 +12 89 +13 67 +14 46 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 15 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +alter table t66 +reorganize partition s1 into +(partition p0 values less than (mod(15,10)), +partition p1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 15 +2 13 +3 15 +4 17 +5 23 +6 34 +7 56 +8 56 +9 45 +10 34 +11 78 +12 89 +13 67 +14 46 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 15 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +alter table t66 +reorganize partition p0,p1 into +(partition s1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 15 +2 13 +3 15 +4 17 +5 23 +6 34 +7 56 +8 56 +9 45 +10 34 +11 78 +12 89 +13 67 +14 46 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 15 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +alter table t66 +reorganize partition s1 into +(partition p0 values less than (mod(15,10)), +partition p1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 15 +2 13 +3 15 +4 17 +5 23 +6 34 +7 56 +8 56 +9 45 +10 34 +11 78 +12 89 +13 67 +14 46 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 15 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +------------------------------------------------------------------------- +--- Delete rows and partitions of tables with mod(col1,10) +------------------------------------------------------------------------- +delete from t1 where col1=19; +delete from t2 where col1=19; +delete from t3 where col1=19; +delete from t4 where col1=19; +delete from t5 where col1=19; +delete from t6 where col1=19; +select * from t1 order by col1; +col1 +15 +select * from t2 order by col1; +col1 +15 +17 +select * from t3 order by col1; +col1 +15 +17 +select * from t4 order by colint; +colint col1 +1 15 +2 13 +3 15 +4 17 +5 23 +6 34 +7 56 +8 56 +9 45 +10 34 +11 78 +12 89 +13 67 +14 46 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 15 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +select * from t5 order by colint; +colint col1 +1 15 +2 13 +3 15 +4 17 +5 23 +6 34 +7 56 +8 56 +9 45 +10 34 +11 78 +12 89 +13 67 +14 46 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 15 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +insert into t1 values (19); +insert into t2 values (19); +insert into t3 values (19); +insert into t4 values (60,19); +insert into t5 values (60,19); +insert into t6 values (60,19); +select * from t1 order by col1; +col1 +15 +19 +select * from t2 order by col1; +col1 +15 +17 +19 +select * from t3 order by col1; +col1 +15 +17 +19 +select * from t4 order by colint; +colint col1 +1 15 +2 13 +3 15 +4 17 +5 23 +6 34 +7 56 +8 56 +9 45 +10 34 +11 78 +12 89 +13 67 +14 46 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 15 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +60 19 +select * from t5 order by colint; +colint col1 +1 15 +2 13 +3 15 +4 17 +5 23 +6 34 +7 56 +8 56 +9 45 +10 34 +11 78 +12 89 +13 67 +14 46 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 15 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +60 19 +select * from t6 order by colint; +colint col1 +1 15 +2 13 +3 15 +4 17 +5 23 +6 34 +7 56 +8 56 +9 45 +10 34 +11 78 +12 89 +13 67 +14 46 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 15 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +60 19 +alter table t1 drop partition p0; +alter table t2 drop partition p0; +alter table t4 drop partition p0; +alter table t5 drop partition p0; +alter table t6 drop partition p0; +select * from t1 order by col1; +col1 +select * from t2 order by col1; +col1 +select * from t3 order by col1; +col1 +15 +17 +19 +select * from t4 order by colint; +colint col1 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 15 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +60 19 +select * from t5 order by colint; +colint col1 +11 78 +12 89 +13 67 +14 46 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 15 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +60 19 +select * from t6 order by colint; +colint col1 +5 23 +6 34 +7 56 +8 56 +9 45 +10 34 +11 78 +12 89 +13 67 +14 46 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 15 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +60 19 +------------------------------------------------------------------------- +--- Delete rows and partitions of tables with mod(col1,10) +------------------------------------------------------------------------- +delete from t11 where col1=19; +delete from t22 where col1=19; +delete from t33 where col1=19; +delete from t44 where col1=19; +delete from t55 where col1=19; +delete from t66 where col1=19; +select * from t11 order by col1; +col1 +15 +select * from t22 order by col1; +col1 +15 +17 +select * from t33 order by col1; +col1 +15 +17 +select * from t44 order by colint; +colint col1 +1 15 +2 13 +3 15 +4 17 +5 23 +6 34 +7 56 +8 56 +9 45 +10 34 +11 78 +12 89 +13 67 +14 46 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 15 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +select * from t55 order by colint; +colint col1 +1 15 +2 13 +3 15 +4 17 +5 23 +6 34 +7 56 +8 56 +9 45 +10 34 +11 78 +12 89 +13 67 +14 46 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 15 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +insert into t11 values (19); +insert into t22 values (19); +insert into t33 values (19); +insert into t44 values (60,19); +insert into t55 values (60,19); +insert into t66 values (60,19); +select * from t11 order by col1; +col1 +15 +19 +select * from t22 order by col1; +col1 +15 +17 +19 +select * from t33 order by col1; +col1 +15 +17 +19 +select * from t44 order by colint; +colint col1 +1 15 +2 13 +3 15 +4 17 +5 23 +6 34 +7 56 +8 56 +9 45 +10 34 +11 78 +12 89 +13 67 +14 46 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 15 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +60 19 +select * from t55 order by colint; +colint col1 +1 15 +2 13 +3 15 +4 17 +5 23 +6 34 +7 56 +8 56 +9 45 +10 34 +11 78 +12 89 +13 67 +14 46 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 15 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +60 19 +select * from t66 order by colint; +colint col1 +1 15 +2 13 +3 15 +4 17 +5 23 +6 34 +7 56 +8 56 +9 45 +10 34 +11 78 +12 89 +13 67 +14 46 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 15 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +60 19 +alter table t11 drop partition p0; +alter table t22 drop partition p0; +alter table t44 drop partition p0; +alter table t55 drop partition p0; +alter table t66 drop partition p0; +select * from t11 order by col1; +col1 +select * from t22 order by col1; +col1 +select * from t33 order by col1; +col1 +15 +17 +19 +select * from t44 order by colint; +colint col1 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 15 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +60 19 +select * from t55 order by colint; +colint col1 +11 78 +12 89 +13 67 +14 46 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 15 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +60 19 +select * from t66 order by colint; +colint col1 +5 23 +6 34 +7 56 +8 56 +9 45 +10 34 +11 78 +12 89 +13 67 +14 46 +15 34 +16 324 +17 345 +18 34 +19 78 +20 567 +21 4 +22 435 +23 34 +24 45 +25 4565 +26 4 +27 3 +28 2 +29 3 +30 15 +31 6 +32 8 +33 9 +34 745 +35 34 +36 34 +37 324 +38 67 +39 78 +40 89 +41 90 +42 78967 +50 56 +51 34 +55 123 +60 19 +------------------------- +---- some alter table end +------------------------- +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +------------------------------------------------------------------------- +--- day(col1) in partition with coltype date +------------------------------------------------------------------------- +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +------------------------------------------------------------------------- +--- Create tables with day(col1) +------------------------------------------------------------------------- +create table t1 (col1 date) engine='TOKUDB' +partition by range(day(col1)) +(partition p0 values less than (15), +partition p1 values less than maxvalue); +create table t2 (col1 date) engine='TOKUDB' +partition by list(day(col1)) +(partition p0 values in (0,1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +create table t3 (col1 date) engine='TOKUDB' +partition by hash(day(col1)); +create table t4 (colint int, col1 date) engine='TOKUDB' +partition by range(colint) +subpartition by hash(day(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than maxvalue); +create table t5 (colint int, col1 date) engine='TOKUDB' +partition by list(colint) +subpartition by hash(day(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +create table t6 (colint int, col1 date) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (day('2006-12-21')), +partition p1 values less than maxvalue); +------------------------------------------------------------------------- +--- Access tables with day(col1) +------------------------------------------------------------------------- +insert into t1 values ('2006-02-03'); +insert into t1 values ('2006-01-17'); +insert into t2 values ('2006-02-03'); +insert into t2 values ('2006-01-17'); +insert into t2 values ('2006-01-25'); +insert into t3 values ('2006-02-03'); +insert into t3 values ('2006-01-17'); +insert into t3 values ('2006-01-25'); +load data infile 'MYSQLTEST_VARDIR/std_data/parts/part_supported_sql_funcs_int_date.inc' into table t4; +load data infile 'MYSQLTEST_VARDIR/std_data/parts/part_supported_sql_funcs_int_date.inc' into table t5; +load data infile 'MYSQLTEST_VARDIR/std_data/parts/part_supported_sql_funcs_int_date.inc' into table t6; +select day(col1) from t1 order by col1; +day(col1) +17 +3 +select * from t1 order by col1; +col1 +2006-01-17 +2006-02-03 +select * from t2 order by col1; +col1 +2006-01-17 +2006-01-25 +2006-02-03 +select * from t3 order by col1; +col1 +2006-01-17 +2006-01-25 +2006-02-03 +select * from t4 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t5 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t6 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +update t1 set col1='2006-02-05' where col1='2006-02-03'; +update t2 set col1='2006-02-05' where col1='2006-02-03'; +update t3 set col1='2006-02-05' where col1='2006-02-03'; +update t4 set col1='2006-02-05' where col1='2006-02-03'; +update t5 set col1='2006-02-05' where col1='2006-02-03'; +update t6 set col1='2006-02-05' where col1='2006-02-03'; +select * from t1 order by col1; +col1 +2006-01-17 +2006-02-05 +select * from t2 order by col1; +col1 +2006-01-17 +2006-01-25 +2006-02-05 +select * from t3 order by col1; +col1 +2006-01-17 +2006-01-25 +2006-02-05 +select * from t4 order by colint; +colint col1 +1 2006-02-05 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t5 order by colint; +colint col1 +1 2006-02-05 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t6 order by colint; +colint col1 +1 2006-02-05 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +------------------------------------------------------------------------- +--- Alter tables with day(col1) +------------------------------------------------------------------------- +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 engine='TOKUDB' as select * from t1; +create table t22 engine='TOKUDB' as select * from t2; +create table t33 engine='TOKUDB' as select * from t3; +create table t44 engine='TOKUDB' as select * from t4; +create table t55 engine='TOKUDB' as select * from t5; +create table t66 engine='TOKUDB' as select * from t6; +alter table t11 +partition by range(day(col1)) +(partition p0 values less than (15), +partition p1 values less than maxvalue); +alter table t22 +partition by list(day(col1)) +(partition p0 values in (0,1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +alter table t33 +partition by hash(day(col1)); +alter table t44 +partition by range(colint) +subpartition by hash(day(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than maxvalue); +alter table t55 +partition by list(colint) +subpartition by hash(day(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +alter table t66 +partition by range(colint) +(partition p0 values less than (day('2006-12-21')), +partition p1 values less than maxvalue); +select * from t11 order by col1; +col1 +2006-01-17 +2006-02-05 +select * from t22 order by col1; +col1 +2006-01-17 +2006-01-25 +2006-02-05 +select * from t33 order by col1; +col1 +2006-01-17 +2006-01-25 +2006-02-05 +select * from t44 order by colint; +colint col1 +1 2006-02-05 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t55 order by colint; +colint col1 +1 2006-02-05 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t66 order by colint; +colint col1 +1 2006-02-05 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +--------------------------- +---- some alter table begin +--------------------------- +alter table t11 +reorganize partition p0,p1 into +(partition s1 values less than maxvalue); +select * from t11 order by col1; +col1 +2006-01-17 +2006-02-05 +alter table t11 +reorganize partition s1 into +(partition p0 values less than (15), +partition p1 values less than maxvalue); +select * from t11 order by col1; +col1 +2006-01-17 +2006-02-05 +alter table t55 +partition by list(colint) +subpartition by hash(day(col1)) subpartitions 5 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +show create table t55; +Table Create Table +t55 CREATE TABLE `t55` ( + `colint` int(11) DEFAULT NULL, + `col1` date DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (colint) +SUBPARTITION BY HASH (day(col1)) +SUBPARTITIONS 5 +(PARTITION p0 VALUES IN (1,2,3,4,5,6,7,8,9,10) ENGINE = TokuDB, + PARTITION p1 VALUES IN (11,12,13,14,15,16,17,18,19,20) ENGINE = TokuDB, + PARTITION p2 VALUES IN (21,22,23,24,25,26,27,28,29,30) ENGINE = TokuDB, + PARTITION p3 VALUES IN (31,32,33,34,35,36,37,38,39,40) ENGINE = TokuDB, + PARTITION p4 VALUES IN (41,42,43,44,45,46,47,48,49,50) ENGINE = TokuDB, + PARTITION p5 VALUES IN (51,52,53,54,55,56,57,58,59,60) ENGINE = TokuDB) */ +select * from t55 order by colint; +colint col1 +1 2006-02-05 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +alter table t66 +reorganize partition p0,p1 into +(partition s1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 2006-02-05 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +alter table t66 +reorganize partition s1 into +(partition p0 values less than (day('2006-12-21')), +partition p1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 2006-02-05 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +alter table t66 +reorganize partition p0,p1 into +(partition s1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 2006-02-05 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +alter table t66 +reorganize partition s1 into +(partition p0 values less than (day('2006-12-21')), +partition p1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 2006-02-05 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +------------------------------------------------------------------------- +--- Delete rows and partitions of tables with day(col1) +------------------------------------------------------------------------- +delete from t1 where col1='2006-01-17'; +delete from t2 where col1='2006-01-17'; +delete from t3 where col1='2006-01-17'; +delete from t4 where col1='2006-01-17'; +delete from t5 where col1='2006-01-17'; +delete from t6 where col1='2006-01-17'; +select * from t1 order by col1; +col1 +2006-02-05 +select * from t2 order by col1; +col1 +2006-01-25 +2006-02-05 +select * from t3 order by col1; +col1 +2006-01-25 +2006-02-05 +select * from t4 order by colint; +colint col1 +1 2006-02-05 +3 2006-01-25 +4 2006-02-05 +select * from t5 order by colint; +colint col1 +1 2006-02-05 +3 2006-01-25 +4 2006-02-05 +insert into t1 values ('2006-01-17'); +insert into t2 values ('2006-01-17'); +insert into t3 values ('2006-01-17'); +insert into t4 values (60,'2006-01-17'); +insert into t5 values (60,'2006-01-17'); +insert into t6 values (60,'2006-01-17'); +select * from t1 order by col1; +col1 +2006-01-17 +2006-02-05 +select * from t2 order by col1; +col1 +2006-01-17 +2006-01-25 +2006-02-05 +select * from t3 order by col1; +col1 +2006-01-17 +2006-01-25 +2006-02-05 +select * from t4 order by colint; +colint col1 +1 2006-02-05 +3 2006-01-25 +4 2006-02-05 +60 2006-01-17 +select * from t5 order by colint; +colint col1 +1 2006-02-05 +3 2006-01-25 +4 2006-02-05 +60 2006-01-17 +select * from t6 order by colint; +colint col1 +1 2006-02-05 +3 2006-01-25 +4 2006-02-05 +60 2006-01-17 +alter table t1 drop partition p0; +alter table t2 drop partition p0; +alter table t4 drop partition p0; +alter table t5 drop partition p0; +alter table t6 drop partition p0; +select * from t1 order by col1; +col1 +2006-01-17 +select * from t2 order by col1; +col1 +2006-01-17 +2006-01-25 +select * from t3 order by col1; +col1 +2006-01-17 +2006-01-25 +2006-02-05 +select * from t4 order by colint; +colint col1 +60 2006-01-17 +select * from t5 order by colint; +colint col1 +60 2006-01-17 +select * from t6 order by colint; +colint col1 +60 2006-01-17 +------------------------------------------------------------------------- +--- Delete rows and partitions of tables with day(col1) +------------------------------------------------------------------------- +delete from t11 where col1='2006-01-17'; +delete from t22 where col1='2006-01-17'; +delete from t33 where col1='2006-01-17'; +delete from t44 where col1='2006-01-17'; +delete from t55 where col1='2006-01-17'; +delete from t66 where col1='2006-01-17'; +select * from t11 order by col1; +col1 +2006-02-05 +select * from t22 order by col1; +col1 +2006-01-25 +2006-02-05 +select * from t33 order by col1; +col1 +2006-01-25 +2006-02-05 +select * from t44 order by colint; +colint col1 +1 2006-02-05 +3 2006-01-25 +4 2006-02-05 +select * from t55 order by colint; +colint col1 +1 2006-02-05 +3 2006-01-25 +4 2006-02-05 +insert into t11 values ('2006-01-17'); +insert into t22 values ('2006-01-17'); +insert into t33 values ('2006-01-17'); +insert into t44 values (60,'2006-01-17'); +insert into t55 values (60,'2006-01-17'); +insert into t66 values (60,'2006-01-17'); +select * from t11 order by col1; +col1 +2006-01-17 +2006-02-05 +select * from t22 order by col1; +col1 +2006-01-17 +2006-01-25 +2006-02-05 +select * from t33 order by col1; +col1 +2006-01-17 +2006-01-25 +2006-02-05 +select * from t44 order by colint; +colint col1 +1 2006-02-05 +3 2006-01-25 +4 2006-02-05 +60 2006-01-17 +select * from t55 order by colint; +colint col1 +1 2006-02-05 +3 2006-01-25 +4 2006-02-05 +60 2006-01-17 +select * from t66 order by colint; +colint col1 +1 2006-02-05 +3 2006-01-25 +4 2006-02-05 +60 2006-01-17 +alter table t11 drop partition p0; +alter table t22 drop partition p0; +alter table t44 drop partition p0; +alter table t55 drop partition p0; +alter table t66 drop partition p0; +select * from t11 order by col1; +col1 +2006-01-17 +select * from t22 order by col1; +col1 +2006-01-17 +2006-01-25 +select * from t33 order by col1; +col1 +2006-01-17 +2006-01-25 +2006-02-05 +select * from t44 order by colint; +colint col1 +60 2006-01-17 +select * from t55 order by colint; +colint col1 +60 2006-01-17 +select * from t66 order by colint; +colint col1 +60 2006-01-17 +------------------------- +---- some alter table end +------------------------- +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +------------------------------------------------------------------------- +--- dayofmonth(col1) in partition with coltype date +------------------------------------------------------------------------- +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +------------------------------------------------------------------------- +--- Create tables with dayofmonth(col1) +------------------------------------------------------------------------- +create table t1 (col1 date) engine='TOKUDB' +partition by range(dayofmonth(col1)) +(partition p0 values less than (15), +partition p1 values less than maxvalue); +create table t2 (col1 date) engine='TOKUDB' +partition by list(dayofmonth(col1)) +(partition p0 values in (0,1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +create table t3 (col1 date) engine='TOKUDB' +partition by hash(dayofmonth(col1)); +create table t4 (colint int, col1 date) engine='TOKUDB' +partition by range(colint) +subpartition by hash(dayofmonth(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than maxvalue); +create table t5 (colint int, col1 date) engine='TOKUDB' +partition by list(colint) +subpartition by hash(dayofmonth(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +create table t6 (colint int, col1 date) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (dayofmonth('2006-12-24')), +partition p1 values less than maxvalue); +------------------------------------------------------------------------- +--- Access tables with dayofmonth(col1) +------------------------------------------------------------------------- +insert into t1 values ('2006-02-03'); +insert into t1 values ('2006-01-17'); +insert into t2 values ('2006-02-03'); +insert into t2 values ('2006-01-17'); +insert into t2 values ('2006-01-25'); +insert into t3 values ('2006-02-03'); +insert into t3 values ('2006-01-17'); +insert into t3 values ('2006-01-25'); +load data infile 'MYSQLTEST_VARDIR/std_data/parts/part_supported_sql_funcs_int_date.inc' into table t4; +load data infile 'MYSQLTEST_VARDIR/std_data/parts/part_supported_sql_funcs_int_date.inc' into table t5; +load data infile 'MYSQLTEST_VARDIR/std_data/parts/part_supported_sql_funcs_int_date.inc' into table t6; +select dayofmonth(col1) from t1 order by col1; +dayofmonth(col1) +17 +3 +select * from t1 order by col1; +col1 +2006-01-17 +2006-02-03 +select * from t2 order by col1; +col1 +2006-01-17 +2006-01-25 +2006-02-03 +select * from t3 order by col1; +col1 +2006-01-17 +2006-01-25 +2006-02-03 +select * from t4 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t5 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t6 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +update t1 set col1='2006-02-05' where col1='2006-02-03'; +update t2 set col1='2006-02-05' where col1='2006-02-03'; +update t3 set col1='2006-02-05' where col1='2006-02-03'; +update t4 set col1='2006-02-05' where col1='2006-02-03'; +update t5 set col1='2006-02-05' where col1='2006-02-03'; +update t6 set col1='2006-02-05' where col1='2006-02-03'; +select * from t1 order by col1; +col1 +2006-01-17 +2006-02-05 +select * from t2 order by col1; +col1 +2006-01-17 +2006-01-25 +2006-02-05 +select * from t3 order by col1; +col1 +2006-01-17 +2006-01-25 +2006-02-05 +select * from t4 order by colint; +colint col1 +1 2006-02-05 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t5 order by colint; +colint col1 +1 2006-02-05 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t6 order by colint; +colint col1 +1 2006-02-05 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +------------------------------------------------------------------------- +--- Alter tables with dayofmonth(col1) +------------------------------------------------------------------------- +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 engine='TOKUDB' as select * from t1; +create table t22 engine='TOKUDB' as select * from t2; +create table t33 engine='TOKUDB' as select * from t3; +create table t44 engine='TOKUDB' as select * from t4; +create table t55 engine='TOKUDB' as select * from t5; +create table t66 engine='TOKUDB' as select * from t6; +alter table t11 +partition by range(dayofmonth(col1)) +(partition p0 values less than (15), +partition p1 values less than maxvalue); +alter table t22 +partition by list(dayofmonth(col1)) +(partition p0 values in (0,1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +alter table t33 +partition by hash(dayofmonth(col1)); +alter table t44 +partition by range(colint) +subpartition by hash(dayofmonth(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than maxvalue); +alter table t55 +partition by list(colint) +subpartition by hash(dayofmonth(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +alter table t66 +partition by range(colint) +(partition p0 values less than (dayofmonth('2006-12-24')), +partition p1 values less than maxvalue); +select * from t11 order by col1; +col1 +2006-01-17 +2006-02-05 +select * from t22 order by col1; +col1 +2006-01-17 +2006-01-25 +2006-02-05 +select * from t33 order by col1; +col1 +2006-01-17 +2006-01-25 +2006-02-05 +select * from t44 order by colint; +colint col1 +1 2006-02-05 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t55 order by colint; +colint col1 +1 2006-02-05 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t66 order by colint; +colint col1 +1 2006-02-05 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +--------------------------- +---- some alter table begin +--------------------------- +alter table t11 +reorganize partition p0,p1 into +(partition s1 values less than maxvalue); +select * from t11 order by col1; +col1 +2006-01-17 +2006-02-05 +alter table t11 +reorganize partition s1 into +(partition p0 values less than (15), +partition p1 values less than maxvalue); +select * from t11 order by col1; +col1 +2006-01-17 +2006-02-05 +alter table t55 +partition by list(colint) +subpartition by hash(dayofmonth(col1)) subpartitions 5 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +show create table t55; +Table Create Table +t55 CREATE TABLE `t55` ( + `colint` int(11) DEFAULT NULL, + `col1` date DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (colint) +SUBPARTITION BY HASH (dayofmonth(col1)) +SUBPARTITIONS 5 +(PARTITION p0 VALUES IN (1,2,3,4,5,6,7,8,9,10) ENGINE = TokuDB, + PARTITION p1 VALUES IN (11,12,13,14,15,16,17,18,19,20) ENGINE = TokuDB, + PARTITION p2 VALUES IN (21,22,23,24,25,26,27,28,29,30) ENGINE = TokuDB, + PARTITION p3 VALUES IN (31,32,33,34,35,36,37,38,39,40) ENGINE = TokuDB, + PARTITION p4 VALUES IN (41,42,43,44,45,46,47,48,49,50) ENGINE = TokuDB, + PARTITION p5 VALUES IN (51,52,53,54,55,56,57,58,59,60) ENGINE = TokuDB) */ +select * from t55 order by colint; +colint col1 +1 2006-02-05 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +alter table t66 +reorganize partition p0,p1 into +(partition s1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 2006-02-05 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +alter table t66 +reorganize partition s1 into +(partition p0 values less than (dayofmonth('2006-12-24')), +partition p1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 2006-02-05 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +alter table t66 +reorganize partition p0,p1 into +(partition s1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 2006-02-05 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +alter table t66 +reorganize partition s1 into +(partition p0 values less than (dayofmonth('2006-12-24')), +partition p1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 2006-02-05 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +------------------------------------------------------------------------- +--- Delete rows and partitions of tables with dayofmonth(col1) +------------------------------------------------------------------------- +delete from t1 where col1='2006-01-17'; +delete from t2 where col1='2006-01-17'; +delete from t3 where col1='2006-01-17'; +delete from t4 where col1='2006-01-17'; +delete from t5 where col1='2006-01-17'; +delete from t6 where col1='2006-01-17'; +select * from t1 order by col1; +col1 +2006-02-05 +select * from t2 order by col1; +col1 +2006-01-25 +2006-02-05 +select * from t3 order by col1; +col1 +2006-01-25 +2006-02-05 +select * from t4 order by colint; +colint col1 +1 2006-02-05 +3 2006-01-25 +4 2006-02-05 +select * from t5 order by colint; +colint col1 +1 2006-02-05 +3 2006-01-25 +4 2006-02-05 +insert into t1 values ('2006-01-17'); +insert into t2 values ('2006-01-17'); +insert into t3 values ('2006-01-17'); +insert into t4 values (60,'2006-01-17'); +insert into t5 values (60,'2006-01-17'); +insert into t6 values (60,'2006-01-17'); +select * from t1 order by col1; +col1 +2006-01-17 +2006-02-05 +select * from t2 order by col1; +col1 +2006-01-17 +2006-01-25 +2006-02-05 +select * from t3 order by col1; +col1 +2006-01-17 +2006-01-25 +2006-02-05 +select * from t4 order by colint; +colint col1 +1 2006-02-05 +3 2006-01-25 +4 2006-02-05 +60 2006-01-17 +select * from t5 order by colint; +colint col1 +1 2006-02-05 +3 2006-01-25 +4 2006-02-05 +60 2006-01-17 +select * from t6 order by colint; +colint col1 +1 2006-02-05 +3 2006-01-25 +4 2006-02-05 +60 2006-01-17 +alter table t1 drop partition p0; +alter table t2 drop partition p0; +alter table t4 drop partition p0; +alter table t5 drop partition p0; +alter table t6 drop partition p0; +select * from t1 order by col1; +col1 +2006-01-17 +select * from t2 order by col1; +col1 +2006-01-17 +2006-01-25 +select * from t3 order by col1; +col1 +2006-01-17 +2006-01-25 +2006-02-05 +select * from t4 order by colint; +colint col1 +60 2006-01-17 +select * from t5 order by colint; +colint col1 +60 2006-01-17 +select * from t6 order by colint; +colint col1 +60 2006-01-17 +------------------------------------------------------------------------- +--- Delete rows and partitions of tables with dayofmonth(col1) +------------------------------------------------------------------------- +delete from t11 where col1='2006-01-17'; +delete from t22 where col1='2006-01-17'; +delete from t33 where col1='2006-01-17'; +delete from t44 where col1='2006-01-17'; +delete from t55 where col1='2006-01-17'; +delete from t66 where col1='2006-01-17'; +select * from t11 order by col1; +col1 +2006-02-05 +select * from t22 order by col1; +col1 +2006-01-25 +2006-02-05 +select * from t33 order by col1; +col1 +2006-01-25 +2006-02-05 +select * from t44 order by colint; +colint col1 +1 2006-02-05 +3 2006-01-25 +4 2006-02-05 +select * from t55 order by colint; +colint col1 +1 2006-02-05 +3 2006-01-25 +4 2006-02-05 +insert into t11 values ('2006-01-17'); +insert into t22 values ('2006-01-17'); +insert into t33 values ('2006-01-17'); +insert into t44 values (60,'2006-01-17'); +insert into t55 values (60,'2006-01-17'); +insert into t66 values (60,'2006-01-17'); +select * from t11 order by col1; +col1 +2006-01-17 +2006-02-05 +select * from t22 order by col1; +col1 +2006-01-17 +2006-01-25 +2006-02-05 +select * from t33 order by col1; +col1 +2006-01-17 +2006-01-25 +2006-02-05 +select * from t44 order by colint; +colint col1 +1 2006-02-05 +3 2006-01-25 +4 2006-02-05 +60 2006-01-17 +select * from t55 order by colint; +colint col1 +1 2006-02-05 +3 2006-01-25 +4 2006-02-05 +60 2006-01-17 +select * from t66 order by colint; +colint col1 +1 2006-02-05 +3 2006-01-25 +4 2006-02-05 +60 2006-01-17 +alter table t11 drop partition p0; +alter table t22 drop partition p0; +alter table t44 drop partition p0; +alter table t55 drop partition p0; +alter table t66 drop partition p0; +select * from t11 order by col1; +col1 +2006-01-17 +select * from t22 order by col1; +col1 +2006-01-17 +2006-01-25 +select * from t33 order by col1; +col1 +2006-01-17 +2006-01-25 +2006-02-05 +select * from t44 order by colint; +colint col1 +60 2006-01-17 +select * from t55 order by colint; +colint col1 +60 2006-01-17 +select * from t66 order by colint; +colint col1 +60 2006-01-17 +------------------------- +---- some alter table end +------------------------- +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +------------------------------------------------------------------------- +--- dayofweek(col1) in partition with coltype date +------------------------------------------------------------------------- +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +------------------------------------------------------------------------- +--- Create tables with dayofweek(col1) +------------------------------------------------------------------------- +create table t1 (col1 date) engine='TOKUDB' +partition by range(dayofweek(col1)) +(partition p0 values less than (15), +partition p1 values less than maxvalue); +create table t2 (col1 date) engine='TOKUDB' +partition by list(dayofweek(col1)) +(partition p0 values in (0,1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +create table t3 (col1 date) engine='TOKUDB' +partition by hash(dayofweek(col1)); +create table t4 (colint int, col1 date) engine='TOKUDB' +partition by range(colint) +subpartition by hash(dayofweek(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than maxvalue); +create table t5 (colint int, col1 date) engine='TOKUDB' +partition by list(colint) +subpartition by hash(dayofweek(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +create table t6 (colint int, col1 date) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (dayofweek('2006-12-24')), +partition p1 values less than maxvalue); +------------------------------------------------------------------------- +--- Access tables with dayofweek(col1) +------------------------------------------------------------------------- +insert into t1 values ('2006-01-03'); +insert into t1 values ('2006-02-17'); +insert into t2 values ('2006-01-03'); +insert into t2 values ('2006-02-17'); +insert into t2 values ('2006-01-25'); +insert into t3 values ('2006-01-03'); +insert into t3 values ('2006-02-17'); +insert into t3 values ('2006-01-25'); +load data infile 'MYSQLTEST_VARDIR/std_data/parts/part_supported_sql_funcs_int_date.inc' into table t4; +load data infile 'MYSQLTEST_VARDIR/std_data/parts/part_supported_sql_funcs_int_date.inc' into table t5; +load data infile 'MYSQLTEST_VARDIR/std_data/parts/part_supported_sql_funcs_int_date.inc' into table t6; +select dayofweek(col1) from t1 order by col1; +dayofweek(col1) +3 +6 +select * from t1 order by col1; +col1 +2006-01-03 +2006-02-17 +select * from t2 order by col1; +col1 +2006-01-03 +2006-01-25 +2006-02-17 +select * from t3 order by col1; +col1 +2006-01-03 +2006-01-25 +2006-02-17 +select * from t4 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t5 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t6 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +update t1 set col1='2006-02-05' where col1='2006-01-03'; +update t2 set col1='2006-02-05' where col1='2006-01-03'; +update t3 set col1='2006-02-05' where col1='2006-01-03'; +update t4 set col1='2006-02-05' where col1='2006-01-03'; +update t5 set col1='2006-02-05' where col1='2006-01-03'; +update t6 set col1='2006-02-05' where col1='2006-01-03'; +select * from t1 order by col1; +col1 +2006-02-05 +2006-02-17 +select * from t2 order by col1; +col1 +2006-01-25 +2006-02-05 +2006-02-17 +select * from t3 order by col1; +col1 +2006-01-25 +2006-02-05 +2006-02-17 +select * from t4 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t5 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t6 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +------------------------------------------------------------------------- +--- Alter tables with dayofweek(col1) +------------------------------------------------------------------------- +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 engine='TOKUDB' as select * from t1; +create table t22 engine='TOKUDB' as select * from t2; +create table t33 engine='TOKUDB' as select * from t3; +create table t44 engine='TOKUDB' as select * from t4; +create table t55 engine='TOKUDB' as select * from t5; +create table t66 engine='TOKUDB' as select * from t6; +alter table t11 +partition by range(dayofweek(col1)) +(partition p0 values less than (15), +partition p1 values less than maxvalue); +alter table t22 +partition by list(dayofweek(col1)) +(partition p0 values in (0,1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +alter table t33 +partition by hash(dayofweek(col1)); +alter table t44 +partition by range(colint) +subpartition by hash(dayofweek(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than maxvalue); +alter table t55 +partition by list(colint) +subpartition by hash(dayofweek(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +alter table t66 +partition by range(colint) +(partition p0 values less than (dayofweek('2006-12-24')), +partition p1 values less than maxvalue); +select * from t11 order by col1; +col1 +2006-02-05 +2006-02-17 +select * from t22 order by col1; +col1 +2006-01-25 +2006-02-05 +2006-02-17 +select * from t33 order by col1; +col1 +2006-01-25 +2006-02-05 +2006-02-17 +select * from t44 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t55 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t66 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +--------------------------- +---- some alter table begin +--------------------------- +alter table t11 +reorganize partition p0,p1 into +(partition s1 values less than maxvalue); +select * from t11 order by col1; +col1 +2006-02-05 +2006-02-17 +alter table t11 +reorganize partition s1 into +(partition p0 values less than (15), +partition p1 values less than maxvalue); +select * from t11 order by col1; +col1 +2006-02-05 +2006-02-17 +alter table t55 +partition by list(colint) +subpartition by hash(dayofweek(col1)) subpartitions 5 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +show create table t55; +Table Create Table +t55 CREATE TABLE `t55` ( + `colint` int(11) DEFAULT NULL, + `col1` date DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (colint) +SUBPARTITION BY HASH (dayofweek(col1)) +SUBPARTITIONS 5 +(PARTITION p0 VALUES IN (1,2,3,4,5,6,7,8,9,10) ENGINE = TokuDB, + PARTITION p1 VALUES IN (11,12,13,14,15,16,17,18,19,20) ENGINE = TokuDB, + PARTITION p2 VALUES IN (21,22,23,24,25,26,27,28,29,30) ENGINE = TokuDB, + PARTITION p3 VALUES IN (31,32,33,34,35,36,37,38,39,40) ENGINE = TokuDB, + PARTITION p4 VALUES IN (41,42,43,44,45,46,47,48,49,50) ENGINE = TokuDB, + PARTITION p5 VALUES IN (51,52,53,54,55,56,57,58,59,60) ENGINE = TokuDB) */ +select * from t55 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +alter table t66 +reorganize partition p0,p1 into +(partition s1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +alter table t66 +reorganize partition s1 into +(partition p0 values less than (dayofweek('2006-12-24')), +partition p1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +alter table t66 +reorganize partition p0,p1 into +(partition s1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +alter table t66 +reorganize partition s1 into +(partition p0 values less than (dayofweek('2006-12-24')), +partition p1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +------------------------------------------------------------------------- +--- Delete rows and partitions of tables with dayofweek(col1) +------------------------------------------------------------------------- +delete from t1 where col1='2006-02-17'; +delete from t2 where col1='2006-02-17'; +delete from t3 where col1='2006-02-17'; +delete from t4 where col1='2006-02-17'; +delete from t5 where col1='2006-02-17'; +delete from t6 where col1='2006-02-17'; +select * from t1 order by col1; +col1 +2006-02-05 +select * from t2 order by col1; +col1 +2006-01-25 +2006-02-05 +select * from t3 order by col1; +col1 +2006-01-25 +2006-02-05 +select * from t4 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t5 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +insert into t1 values ('2006-02-17'); +insert into t2 values ('2006-02-17'); +insert into t3 values ('2006-02-17'); +insert into t4 values (60,'2006-02-17'); +insert into t5 values (60,'2006-02-17'); +insert into t6 values (60,'2006-02-17'); +select * from t1 order by col1; +col1 +2006-02-05 +2006-02-17 +select * from t2 order by col1; +col1 +2006-01-25 +2006-02-05 +2006-02-17 +select * from t3 order by col1; +col1 +2006-01-25 +2006-02-05 +2006-02-17 +select * from t4 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +60 2006-02-17 +select * from t5 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +60 2006-02-17 +select * from t6 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +60 2006-02-17 +alter table t1 drop partition p0; +alter table t2 drop partition p0; +alter table t4 drop partition p0; +alter table t5 drop partition p0; +alter table t6 drop partition p0; +select * from t1 order by col1; +col1 +select * from t2 order by col1; +col1 +select * from t3 order by col1; +col1 +2006-01-25 +2006-02-05 +2006-02-17 +select * from t4 order by colint; +colint col1 +60 2006-02-17 +select * from t5 order by colint; +colint col1 +60 2006-02-17 +select * from t6 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +60 2006-02-17 +------------------------------------------------------------------------- +--- Delete rows and partitions of tables with dayofweek(col1) +------------------------------------------------------------------------- +delete from t11 where col1='2006-02-17'; +delete from t22 where col1='2006-02-17'; +delete from t33 where col1='2006-02-17'; +delete from t44 where col1='2006-02-17'; +delete from t55 where col1='2006-02-17'; +delete from t66 where col1='2006-02-17'; +select * from t11 order by col1; +col1 +2006-02-05 +select * from t22 order by col1; +col1 +2006-01-25 +2006-02-05 +select * from t33 order by col1; +col1 +2006-01-25 +2006-02-05 +select * from t44 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t55 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +insert into t11 values ('2006-02-17'); +insert into t22 values ('2006-02-17'); +insert into t33 values ('2006-02-17'); +insert into t44 values (60,'2006-02-17'); +insert into t55 values (60,'2006-02-17'); +insert into t66 values (60,'2006-02-17'); +select * from t11 order by col1; +col1 +2006-02-05 +2006-02-17 +select * from t22 order by col1; +col1 +2006-01-25 +2006-02-05 +2006-02-17 +select * from t33 order by col1; +col1 +2006-01-25 +2006-02-05 +2006-02-17 +select * from t44 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +60 2006-02-17 +select * from t55 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +60 2006-02-17 +select * from t66 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +60 2006-02-17 +alter table t11 drop partition p0; +alter table t22 drop partition p0; +alter table t44 drop partition p0; +alter table t55 drop partition p0; +alter table t66 drop partition p0; +select * from t11 order by col1; +col1 +select * from t22 order by col1; +col1 +select * from t33 order by col1; +col1 +2006-01-25 +2006-02-05 +2006-02-17 +select * from t44 order by colint; +colint col1 +60 2006-02-17 +select * from t55 order by colint; +colint col1 +60 2006-02-17 +select * from t66 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +60 2006-02-17 +------------------------- +---- some alter table end +------------------------- +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +------------------------------------------------------------------------- +--- dayofyear(col1) in partition with coltype date +------------------------------------------------------------------------- +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +------------------------------------------------------------------------- +--- Create tables with dayofyear(col1) +------------------------------------------------------------------------- +create table t1 (col1 date) engine='TOKUDB' +partition by range(dayofyear(col1)) +(partition p0 values less than (15), +partition p1 values less than maxvalue); +create table t2 (col1 date) engine='TOKUDB' +partition by list(dayofyear(col1)) +(partition p0 values in (0,1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +create table t3 (col1 date) engine='TOKUDB' +partition by hash(dayofyear(col1)); +create table t4 (colint int, col1 date) engine='TOKUDB' +partition by range(colint) +subpartition by hash(dayofyear(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than maxvalue); +create table t5 (colint int, col1 date) engine='TOKUDB' +partition by list(colint) +subpartition by hash(dayofyear(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +create table t6 (colint int, col1 date) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (dayofyear('2006-12-25')), +partition p1 values less than maxvalue); +------------------------------------------------------------------------- +--- Access tables with dayofyear(col1) +------------------------------------------------------------------------- +insert into t1 values ('2006-01-03'); +insert into t1 values ('2006-01-17'); +insert into t2 values ('2006-01-03'); +insert into t2 values ('2006-01-17'); +insert into t2 values ('2006-02-25'); +insert into t3 values ('2006-01-03'); +insert into t3 values ('2006-01-17'); +insert into t3 values ('2006-02-25'); +load data infile 'MYSQLTEST_VARDIR/std_data/parts/part_supported_sql_funcs_int_date.inc' into table t4; +load data infile 'MYSQLTEST_VARDIR/std_data/parts/part_supported_sql_funcs_int_date.inc' into table t5; +load data infile 'MYSQLTEST_VARDIR/std_data/parts/part_supported_sql_funcs_int_date.inc' into table t6; +select dayofyear(col1) from t1 order by col1; +dayofyear(col1) +3 +17 +select * from t1 order by col1; +col1 +2006-01-03 +2006-01-17 +select * from t2 order by col1; +col1 +2006-01-03 +2006-01-17 +2006-02-25 +select * from t3 order by col1; +col1 +2006-01-03 +2006-01-17 +2006-02-25 +select * from t4 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t5 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t6 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +update t1 set col1='2006-02-05' where col1='2006-01-03'; +update t2 set col1='2006-02-05' where col1='2006-01-03'; +update t3 set col1='2006-02-05' where col1='2006-01-03'; +update t4 set col1='2006-02-05' where col1='2006-01-03'; +update t5 set col1='2006-02-05' where col1='2006-01-03'; +update t6 set col1='2006-02-05' where col1='2006-01-03'; +select * from t1 order by col1; +col1 +2006-01-17 +2006-02-05 +select * from t2 order by col1; +col1 +2006-01-17 +2006-02-05 +2006-02-25 +select * from t3 order by col1; +col1 +2006-01-17 +2006-02-05 +2006-02-25 +select * from t4 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t5 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t6 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +------------------------------------------------------------------------- +--- Alter tables with dayofyear(col1) +------------------------------------------------------------------------- +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 engine='TOKUDB' as select * from t1; +create table t22 engine='TOKUDB' as select * from t2; +create table t33 engine='TOKUDB' as select * from t3; +create table t44 engine='TOKUDB' as select * from t4; +create table t55 engine='TOKUDB' as select * from t5; +create table t66 engine='TOKUDB' as select * from t6; +alter table t11 +partition by range(dayofyear(col1)) +(partition p0 values less than (15), +partition p1 values less than maxvalue); +alter table t22 +partition by list(dayofyear(col1)) +(partition p0 values in (0,1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +alter table t33 +partition by hash(dayofyear(col1)); +alter table t44 +partition by range(colint) +subpartition by hash(dayofyear(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than maxvalue); +alter table t55 +partition by list(colint) +subpartition by hash(dayofyear(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +alter table t66 +partition by range(colint) +(partition p0 values less than (dayofyear('2006-12-25')), +partition p1 values less than maxvalue); +select * from t11 order by col1; +col1 +2006-01-17 +2006-02-05 +select * from t22 order by col1; +col1 +2006-01-17 +2006-02-05 +2006-02-25 +select * from t33 order by col1; +col1 +2006-01-17 +2006-02-05 +2006-02-25 +select * from t44 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t55 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t66 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +--------------------------- +---- some alter table begin +--------------------------- +alter table t11 +reorganize partition p0,p1 into +(partition s1 values less than maxvalue); +select * from t11 order by col1; +col1 +2006-01-17 +2006-02-05 +alter table t11 +reorganize partition s1 into +(partition p0 values less than (15), +partition p1 values less than maxvalue); +select * from t11 order by col1; +col1 +2006-01-17 +2006-02-05 +alter table t55 +partition by list(colint) +subpartition by hash(dayofyear(col1)) subpartitions 5 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +show create table t55; +Table Create Table +t55 CREATE TABLE `t55` ( + `colint` int(11) DEFAULT NULL, + `col1` date DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (colint) +SUBPARTITION BY HASH (dayofyear(col1)) +SUBPARTITIONS 5 +(PARTITION p0 VALUES IN (1,2,3,4,5,6,7,8,9,10) ENGINE = TokuDB, + PARTITION p1 VALUES IN (11,12,13,14,15,16,17,18,19,20) ENGINE = TokuDB, + PARTITION p2 VALUES IN (21,22,23,24,25,26,27,28,29,30) ENGINE = TokuDB, + PARTITION p3 VALUES IN (31,32,33,34,35,36,37,38,39,40) ENGINE = TokuDB, + PARTITION p4 VALUES IN (41,42,43,44,45,46,47,48,49,50) ENGINE = TokuDB, + PARTITION p5 VALUES IN (51,52,53,54,55,56,57,58,59,60) ENGINE = TokuDB) */ +select * from t55 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +alter table t66 +reorganize partition p0,p1 into +(partition s1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +alter table t66 +reorganize partition s1 into +(partition p0 values less than (dayofyear('2006-12-25')), +partition p1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +alter table t66 +reorganize partition p0,p1 into +(partition s1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +alter table t66 +reorganize partition s1 into +(partition p0 values less than (dayofyear('2006-12-25')), +partition p1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +------------------------------------------------------------------------- +--- Delete rows and partitions of tables with dayofyear(col1) +------------------------------------------------------------------------- +delete from t1 where col1='2006-01-17'; +delete from t2 where col1='2006-01-17'; +delete from t3 where col1='2006-01-17'; +delete from t4 where col1='2006-01-17'; +delete from t5 where col1='2006-01-17'; +delete from t6 where col1='2006-01-17'; +select * from t1 order by col1; +col1 +2006-02-05 +select * from t2 order by col1; +col1 +2006-02-05 +2006-02-25 +select * from t3 order by col1; +col1 +2006-02-05 +2006-02-25 +select * from t4 order by colint; +colint col1 +1 2006-02-03 +3 2006-01-25 +4 2006-02-05 +select * from t5 order by colint; +colint col1 +1 2006-02-03 +3 2006-01-25 +4 2006-02-05 +insert into t1 values ('2006-01-17'); +insert into t2 values ('2006-01-17'); +insert into t3 values ('2006-01-17'); +insert into t4 values (60,'2006-01-17'); +insert into t5 values (60,'2006-01-17'); +insert into t6 values (60,'2006-01-17'); +select * from t1 order by col1; +col1 +2006-01-17 +2006-02-05 +select * from t2 order by col1; +col1 +2006-01-17 +2006-02-05 +2006-02-25 +select * from t3 order by col1; +col1 +2006-01-17 +2006-02-05 +2006-02-25 +select * from t4 order by colint; +colint col1 +1 2006-02-03 +3 2006-01-25 +4 2006-02-05 +60 2006-01-17 +select * from t5 order by colint; +colint col1 +1 2006-02-03 +3 2006-01-25 +4 2006-02-05 +60 2006-01-17 +select * from t6 order by colint; +colint col1 +1 2006-02-03 +3 2006-01-25 +4 2006-02-05 +60 2006-01-17 +alter table t1 drop partition p0; +alter table t2 drop partition p0; +alter table t4 drop partition p0; +alter table t5 drop partition p0; +alter table t6 drop partition p0; +select * from t1 order by col1; +col1 +2006-01-17 +2006-02-05 +select * from t2 order by col1; +col1 +2006-01-17 +2006-02-05 +2006-02-25 +select * from t3 order by col1; +col1 +2006-01-17 +2006-02-05 +2006-02-25 +select * from t4 order by colint; +colint col1 +60 2006-01-17 +select * from t5 order by colint; +colint col1 +60 2006-01-17 +select * from t6 order by colint; +colint col1 +------------------------------------------------------------------------- +--- Delete rows and partitions of tables with dayofyear(col1) +------------------------------------------------------------------------- +delete from t11 where col1='2006-01-17'; +delete from t22 where col1='2006-01-17'; +delete from t33 where col1='2006-01-17'; +delete from t44 where col1='2006-01-17'; +delete from t55 where col1='2006-01-17'; +delete from t66 where col1='2006-01-17'; +select * from t11 order by col1; +col1 +2006-02-05 +select * from t22 order by col1; +col1 +2006-02-05 +2006-02-25 +select * from t33 order by col1; +col1 +2006-02-05 +2006-02-25 +select * from t44 order by colint; +colint col1 +1 2006-02-03 +3 2006-01-25 +4 2006-02-05 +select * from t55 order by colint; +colint col1 +1 2006-02-03 +3 2006-01-25 +4 2006-02-05 +insert into t11 values ('2006-01-17'); +insert into t22 values ('2006-01-17'); +insert into t33 values ('2006-01-17'); +insert into t44 values (60,'2006-01-17'); +insert into t55 values (60,'2006-01-17'); +insert into t66 values (60,'2006-01-17'); +select * from t11 order by col1; +col1 +2006-01-17 +2006-02-05 +select * from t22 order by col1; +col1 +2006-01-17 +2006-02-05 +2006-02-25 +select * from t33 order by col1; +col1 +2006-01-17 +2006-02-05 +2006-02-25 +select * from t44 order by colint; +colint col1 +1 2006-02-03 +3 2006-01-25 +4 2006-02-05 +60 2006-01-17 +select * from t55 order by colint; +colint col1 +1 2006-02-03 +3 2006-01-25 +4 2006-02-05 +60 2006-01-17 +select * from t66 order by colint; +colint col1 +1 2006-02-03 +3 2006-01-25 +4 2006-02-05 +60 2006-01-17 +alter table t11 drop partition p0; +alter table t22 drop partition p0; +alter table t44 drop partition p0; +alter table t55 drop partition p0; +alter table t66 drop partition p0; +select * from t11 order by col1; +col1 +2006-01-17 +2006-02-05 +select * from t22 order by col1; +col1 +2006-01-17 +2006-02-05 +2006-02-25 +select * from t33 order by col1; +col1 +2006-01-17 +2006-02-05 +2006-02-25 +select * from t44 order by colint; +colint col1 +60 2006-01-17 +select * from t55 order by colint; +colint col1 +60 2006-01-17 +select * from t66 order by colint; +colint col1 +------------------------- +---- some alter table end +------------------------- +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +------------------------------------------------------------------------- +--- extract(month from col1) in partition with coltype date +------------------------------------------------------------------------- +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +------------------------------------------------------------------------- +--- Create tables with extract(month from col1) +------------------------------------------------------------------------- +create table t1 (col1 date) engine='TOKUDB' +partition by range(extract(month from col1)) +(partition p0 values less than (15), +partition p1 values less than maxvalue); +create table t2 (col1 date) engine='TOKUDB' +partition by list(extract(month from col1)) +(partition p0 values in (0,1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +create table t3 (col1 date) engine='TOKUDB' +partition by hash(extract(month from col1)); +create table t4 (colint int, col1 date) engine='TOKUDB' +partition by range(colint) +subpartition by hash(extract(month from col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than maxvalue); +create table t5 (colint int, col1 date) engine='TOKUDB' +partition by list(colint) +subpartition by hash(extract(month from col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +create table t6 (colint int, col1 date) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (extract(year from '1998-11-23')), +partition p1 values less than maxvalue); +------------------------------------------------------------------------- +--- Access tables with extract(month from col1) +------------------------------------------------------------------------- +insert into t1 values ('2006-01-03'); +insert into t1 values ('2006-02-17'); +insert into t2 values ('2006-01-03'); +insert into t2 values ('2006-02-17'); +insert into t2 values ('2006-01-25'); +insert into t3 values ('2006-01-03'); +insert into t3 values ('2006-02-17'); +insert into t3 values ('2006-01-25'); +load data infile 'MYSQLTEST_VARDIR/std_data/parts/part_supported_sql_funcs_int_date.inc' into table t4; +load data infile 'MYSQLTEST_VARDIR/std_data/parts/part_supported_sql_funcs_int_date.inc' into table t5; +load data infile 'MYSQLTEST_VARDIR/std_data/parts/part_supported_sql_funcs_int_date.inc' into table t6; +select extract(month from col1) from t1 order by col1; +extract(month from col1) +1 +2 +select * from t1 order by col1; +col1 +2006-01-03 +2006-02-17 +select * from t2 order by col1; +col1 +2006-01-03 +2006-01-25 +2006-02-17 +select * from t3 order by col1; +col1 +2006-01-03 +2006-01-25 +2006-02-17 +select * from t4 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t5 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t6 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +update t1 set col1='2006-02-05' where col1='2006-01-03'; +update t2 set col1='2006-02-05' where col1='2006-01-03'; +update t3 set col1='2006-02-05' where col1='2006-01-03'; +update t4 set col1='2006-02-05' where col1='2006-01-03'; +update t5 set col1='2006-02-05' where col1='2006-01-03'; +update t6 set col1='2006-02-05' where col1='2006-01-03'; +select * from t1 order by col1; +col1 +2006-02-05 +2006-02-17 +select * from t2 order by col1; +col1 +2006-01-25 +2006-02-05 +2006-02-17 +select * from t3 order by col1; +col1 +2006-01-25 +2006-02-05 +2006-02-17 +select * from t4 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t5 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t6 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +------------------------------------------------------------------------- +--- Alter tables with extract(month from col1) +------------------------------------------------------------------------- +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 engine='TOKUDB' as select * from t1; +create table t22 engine='TOKUDB' as select * from t2; +create table t33 engine='TOKUDB' as select * from t3; +create table t44 engine='TOKUDB' as select * from t4; +create table t55 engine='TOKUDB' as select * from t5; +create table t66 engine='TOKUDB' as select * from t6; +alter table t11 +partition by range(extract(month from col1)) +(partition p0 values less than (15), +partition p1 values less than maxvalue); +alter table t22 +partition by list(extract(month from col1)) +(partition p0 values in (0,1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +alter table t33 +partition by hash(extract(month from col1)); +alter table t44 +partition by range(colint) +subpartition by hash(extract(month from col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than maxvalue); +alter table t55 +partition by list(colint) +subpartition by hash(extract(month from col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +alter table t66 +partition by range(colint) +(partition p0 values less than (extract(year from '1998-11-23')), +partition p1 values less than maxvalue); +select * from t11 order by col1; +col1 +2006-02-05 +2006-02-17 +select * from t22 order by col1; +col1 +2006-01-25 +2006-02-05 +2006-02-17 +select * from t33 order by col1; +col1 +2006-01-25 +2006-02-05 +2006-02-17 +select * from t44 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t55 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t66 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +--------------------------- +---- some alter table begin +--------------------------- +alter table t11 +reorganize partition p0,p1 into +(partition s1 values less than maxvalue); +select * from t11 order by col1; +col1 +2006-02-05 +2006-02-17 +alter table t11 +reorganize partition s1 into +(partition p0 values less than (15), +partition p1 values less than maxvalue); +select * from t11 order by col1; +col1 +2006-02-05 +2006-02-17 +alter table t55 +partition by list(colint) +subpartition by hash(extract(month from col1)) subpartitions 5 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +show create table t55; +Table Create Table +t55 CREATE TABLE `t55` ( + `colint` int(11) DEFAULT NULL, + `col1` date DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (colint) +SUBPARTITION BY HASH (extract(month from col1)) +SUBPARTITIONS 5 +(PARTITION p0 VALUES IN (1,2,3,4,5,6,7,8,9,10) ENGINE = TokuDB, + PARTITION p1 VALUES IN (11,12,13,14,15,16,17,18,19,20) ENGINE = TokuDB, + PARTITION p2 VALUES IN (21,22,23,24,25,26,27,28,29,30) ENGINE = TokuDB, + PARTITION p3 VALUES IN (31,32,33,34,35,36,37,38,39,40) ENGINE = TokuDB, + PARTITION p4 VALUES IN (41,42,43,44,45,46,47,48,49,50) ENGINE = TokuDB, + PARTITION p5 VALUES IN (51,52,53,54,55,56,57,58,59,60) ENGINE = TokuDB) */ +select * from t55 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +alter table t66 +reorganize partition p0,p1 into +(partition s1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +alter table t66 +reorganize partition s1 into +(partition p0 values less than (extract(year from '1998-11-23')), +partition p1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +alter table t66 +reorganize partition p0,p1 into +(partition s1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +alter table t66 +reorganize partition s1 into +(partition p0 values less than (extract(year from '1998-11-23')), +partition p1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +------------------------------------------------------------------------- +--- Delete rows and partitions of tables with extract(month from col1) +------------------------------------------------------------------------- +delete from t1 where col1='2006-02-17'; +delete from t2 where col1='2006-02-17'; +delete from t3 where col1='2006-02-17'; +delete from t4 where col1='2006-02-17'; +delete from t5 where col1='2006-02-17'; +delete from t6 where col1='2006-02-17'; +select * from t1 order by col1; +col1 +2006-02-05 +select * from t2 order by col1; +col1 +2006-01-25 +2006-02-05 +select * from t3 order by col1; +col1 +2006-01-25 +2006-02-05 +select * from t4 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t5 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +insert into t1 values ('2006-02-17'); +insert into t2 values ('2006-02-17'); +insert into t3 values ('2006-02-17'); +insert into t4 values (60,'2006-02-17'); +insert into t5 values (60,'2006-02-17'); +insert into t6 values (60,'2006-02-17'); +select * from t1 order by col1; +col1 +2006-02-05 +2006-02-17 +select * from t2 order by col1; +col1 +2006-01-25 +2006-02-05 +2006-02-17 +select * from t3 order by col1; +col1 +2006-01-25 +2006-02-05 +2006-02-17 +select * from t4 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +60 2006-02-17 +select * from t5 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +60 2006-02-17 +select * from t6 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +60 2006-02-17 +alter table t1 drop partition p0; +alter table t2 drop partition p0; +alter table t4 drop partition p0; +alter table t5 drop partition p0; +alter table t6 drop partition p0; +select * from t1 order by col1; +col1 +select * from t2 order by col1; +col1 +select * from t3 order by col1; +col1 +2006-01-25 +2006-02-05 +2006-02-17 +select * from t4 order by colint; +colint col1 +60 2006-02-17 +select * from t5 order by colint; +colint col1 +60 2006-02-17 +select * from t6 order by colint; +colint col1 +------------------------------------------------------------------------- +--- Delete rows and partitions of tables with extract(month from col1) +------------------------------------------------------------------------- +delete from t11 where col1='2006-02-17'; +delete from t22 where col1='2006-02-17'; +delete from t33 where col1='2006-02-17'; +delete from t44 where col1='2006-02-17'; +delete from t55 where col1='2006-02-17'; +delete from t66 where col1='2006-02-17'; +select * from t11 order by col1; +col1 +2006-02-05 +select * from t22 order by col1; +col1 +2006-01-25 +2006-02-05 +select * from t33 order by col1; +col1 +2006-01-25 +2006-02-05 +select * from t44 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t55 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +insert into t11 values ('2006-02-17'); +insert into t22 values ('2006-02-17'); +insert into t33 values ('2006-02-17'); +insert into t44 values (60,'2006-02-17'); +insert into t55 values (60,'2006-02-17'); +insert into t66 values (60,'2006-02-17'); +select * from t11 order by col1; +col1 +2006-02-05 +2006-02-17 +select * from t22 order by col1; +col1 +2006-01-25 +2006-02-05 +2006-02-17 +select * from t33 order by col1; +col1 +2006-01-25 +2006-02-05 +2006-02-17 +select * from t44 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +60 2006-02-17 +select * from t55 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +60 2006-02-17 +select * from t66 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +60 2006-02-17 +alter table t11 drop partition p0; +alter table t22 drop partition p0; +alter table t44 drop partition p0; +alter table t55 drop partition p0; +alter table t66 drop partition p0; +select * from t11 order by col1; +col1 +select * from t22 order by col1; +col1 +select * from t33 order by col1; +col1 +2006-01-25 +2006-02-05 +2006-02-17 +select * from t44 order by colint; +colint col1 +60 2006-02-17 +select * from t55 order by colint; +colint col1 +60 2006-02-17 +select * from t66 order by colint; +colint col1 +------------------------- +---- some alter table end +------------------------- +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +------------------------------------------------------------------------- +--- hour(col1) in partition with coltype time +------------------------------------------------------------------------- +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +------------------------------------------------------------------------- +--- Create tables with hour(col1) +------------------------------------------------------------------------- +create table t1 (col1 time) engine='TOKUDB' +partition by range(hour(col1)) +(partition p0 values less than (15), +partition p1 values less than maxvalue); +create table t2 (col1 time) engine='TOKUDB' +partition by list(hour(col1)) +(partition p0 values in (0,1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +create table t3 (col1 time) engine='TOKUDB' +partition by hash(hour(col1)); +create table t4 (colint int, col1 time) engine='TOKUDB' +partition by range(colint) +subpartition by hash(hour(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than maxvalue); +create table t5 (colint int, col1 time) engine='TOKUDB' +partition by list(colint) +subpartition by hash(hour(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +create table t6 (colint int, col1 time) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (hour('18:30')), +partition p1 values less than maxvalue); +------------------------------------------------------------------------- +--- Access tables with hour(col1) +------------------------------------------------------------------------- +insert into t1 values ('09:09'); +insert into t1 values ('14:30'); +insert into t2 values ('09:09'); +insert into t2 values ('14:30'); +insert into t2 values ('21:59'); +insert into t3 values ('09:09'); +insert into t3 values ('14:30'); +insert into t3 values ('21:59'); +load data infile 'MYSQLTEST_VARDIR/std_data/parts/part_supported_sql_funcs_int_time.inc' into table t4; +load data infile 'MYSQLTEST_VARDIR/std_data/parts/part_supported_sql_funcs_int_time.inc' into table t5; +load data infile 'MYSQLTEST_VARDIR/std_data/parts/part_supported_sql_funcs_int_time.inc' into table t6; +select hour(col1) from t1 order by col1; +hour(col1) +9 +14 +select * from t1 order by col1; +col1 +09:09:00 +14:30:00 +select * from t2 order by col1; +col1 +09:09:00 +14:30:00 +21:59:00 +select * from t3 order by col1; +col1 +09:09:00 +14:30:00 +21:59:00 +select * from t4 order by colint; +colint col1 +1 09:09:15 +2 04:30:01 +3 00:59:22 +4 05:30:34 +select * from t5 order by colint; +colint col1 +1 09:09:15 +2 04:30:01 +3 00:59:22 +4 05:30:34 +select * from t6 order by colint; +colint col1 +1 09:09:15 +2 04:30:01 +3 00:59:22 +4 05:30:34 +update t1 set col1='10:30' where col1='09:09'; +update t2 set col1='10:30' where col1='09:09'; +update t3 set col1='10:30' where col1='09:09'; +update t4 set col1='10:30' where col1='09:09'; +update t5 set col1='10:30' where col1='09:09'; +update t6 set col1='10:30' where col1='09:09'; +select * from t1 order by col1; +col1 +10:30:00 +14:30:00 +select * from t2 order by col1; +col1 +10:30:00 +14:30:00 +21:59:00 +select * from t3 order by col1; +col1 +10:30:00 +14:30:00 +21:59:00 +select * from t4 order by colint; +colint col1 +1 09:09:15 +2 04:30:01 +3 00:59:22 +4 05:30:34 +select * from t5 order by colint; +colint col1 +1 09:09:15 +2 04:30:01 +3 00:59:22 +4 05:30:34 +select * from t6 order by colint; +colint col1 +1 09:09:15 +2 04:30:01 +3 00:59:22 +4 05:30:34 +------------------------------------------------------------------------- +--- Alter tables with hour(col1) +------------------------------------------------------------------------- +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 engine='TOKUDB' as select * from t1; +create table t22 engine='TOKUDB' as select * from t2; +create table t33 engine='TOKUDB' as select * from t3; +create table t44 engine='TOKUDB' as select * from t4; +create table t55 engine='TOKUDB' as select * from t5; +create table t66 engine='TOKUDB' as select * from t6; +alter table t11 +partition by range(hour(col1)) +(partition p0 values less than (15), +partition p1 values less than maxvalue); +alter table t22 +partition by list(hour(col1)) +(partition p0 values in (0,1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +alter table t33 +partition by hash(hour(col1)); +alter table t44 +partition by range(colint) +subpartition by hash(hour(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than maxvalue); +alter table t55 +partition by list(colint) +subpartition by hash(hour(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +alter table t66 +partition by range(colint) +(partition p0 values less than (hour('18:30')), +partition p1 values less than maxvalue); +select * from t11 order by col1; +col1 +10:30:00 +14:30:00 +select * from t22 order by col1; +col1 +10:30:00 +14:30:00 +21:59:00 +select * from t33 order by col1; +col1 +10:30:00 +14:30:00 +21:59:00 +select * from t44 order by colint; +colint col1 +1 09:09:15 +2 04:30:01 +3 00:59:22 +4 05:30:34 +select * from t55 order by colint; +colint col1 +1 09:09:15 +2 04:30:01 +3 00:59:22 +4 05:30:34 +select * from t66 order by colint; +colint col1 +1 09:09:15 +2 04:30:01 +3 00:59:22 +4 05:30:34 +--------------------------- +---- some alter table begin +--------------------------- +alter table t11 +reorganize partition p0,p1 into +(partition s1 values less than maxvalue); +select * from t11 order by col1; +col1 +10:30:00 +14:30:00 +alter table t11 +reorganize partition s1 into +(partition p0 values less than (15), +partition p1 values less than maxvalue); +select * from t11 order by col1; +col1 +10:30:00 +14:30:00 +alter table t55 +partition by list(colint) +subpartition by hash(hour(col1)) subpartitions 5 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +show create table t55; +Table Create Table +t55 CREATE TABLE `t55` ( + `colint` int(11) DEFAULT NULL, + `col1` time DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (colint) +SUBPARTITION BY HASH (hour(col1)) +SUBPARTITIONS 5 +(PARTITION p0 VALUES IN (1,2,3,4,5,6,7,8,9,10) ENGINE = TokuDB, + PARTITION p1 VALUES IN (11,12,13,14,15,16,17,18,19,20) ENGINE = TokuDB, + PARTITION p2 VALUES IN (21,22,23,24,25,26,27,28,29,30) ENGINE = TokuDB, + PARTITION p3 VALUES IN (31,32,33,34,35,36,37,38,39,40) ENGINE = TokuDB, + PARTITION p4 VALUES IN (41,42,43,44,45,46,47,48,49,50) ENGINE = TokuDB, + PARTITION p5 VALUES IN (51,52,53,54,55,56,57,58,59,60) ENGINE = TokuDB) */ +select * from t55 order by colint; +colint col1 +1 09:09:15 +2 04:30:01 +3 00:59:22 +4 05:30:34 +alter table t66 +reorganize partition p0,p1 into +(partition s1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 09:09:15 +2 04:30:01 +3 00:59:22 +4 05:30:34 +alter table t66 +reorganize partition s1 into +(partition p0 values less than (hour('18:30')), +partition p1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 09:09:15 +2 04:30:01 +3 00:59:22 +4 05:30:34 +alter table t66 +reorganize partition p0,p1 into +(partition s1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 09:09:15 +2 04:30:01 +3 00:59:22 +4 05:30:34 +alter table t66 +reorganize partition s1 into +(partition p0 values less than (hour('18:30')), +partition p1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 09:09:15 +2 04:30:01 +3 00:59:22 +4 05:30:34 +------------------------------------------------------------------------- +--- Delete rows and partitions of tables with hour(col1) +------------------------------------------------------------------------- +delete from t1 where col1='14:30'; +delete from t2 where col1='14:30'; +delete from t3 where col1='14:30'; +delete from t4 where col1='14:30'; +delete from t5 where col1='14:30'; +delete from t6 where col1='14:30'; +select * from t1 order by col1; +col1 +10:30:00 +select * from t2 order by col1; +col1 +10:30:00 +21:59:00 +select * from t3 order by col1; +col1 +10:30:00 +21:59:00 +select * from t4 order by colint; +colint col1 +1 09:09:15 +2 04:30:01 +3 00:59:22 +4 05:30:34 +select * from t5 order by colint; +colint col1 +1 09:09:15 +2 04:30:01 +3 00:59:22 +4 05:30:34 +insert into t1 values ('14:30'); +insert into t2 values ('14:30'); +insert into t3 values ('14:30'); +insert into t4 values (60,'14:30'); +insert into t5 values (60,'14:30'); +insert into t6 values (60,'14:30'); +select * from t1 order by col1; +col1 +10:30:00 +14:30:00 +select * from t2 order by col1; +col1 +10:30:00 +14:30:00 +21:59:00 +select * from t3 order by col1; +col1 +10:30:00 +14:30:00 +21:59:00 +select * from t4 order by colint; +colint col1 +1 09:09:15 +2 04:30:01 +3 00:59:22 +4 05:30:34 +60 14:30:00 +select * from t5 order by colint; +colint col1 +1 09:09:15 +2 04:30:01 +3 00:59:22 +4 05:30:34 +60 14:30:00 +select * from t6 order by colint; +colint col1 +1 09:09:15 +2 04:30:01 +3 00:59:22 +4 05:30:34 +60 14:30:00 +alter table t1 drop partition p0; +alter table t2 drop partition p0; +alter table t4 drop partition p0; +alter table t5 drop partition p0; +alter table t6 drop partition p0; +select * from t1 order by col1; +col1 +select * from t2 order by col1; +col1 +14:30:00 +21:59:00 +select * from t3 order by col1; +col1 +10:30:00 +14:30:00 +21:59:00 +select * from t4 order by colint; +colint col1 +60 14:30:00 +select * from t5 order by colint; +colint col1 +60 14:30:00 +select * from t6 order by colint; +colint col1 +60 14:30:00 +------------------------------------------------------------------------- +--- Delete rows and partitions of tables with hour(col1) +------------------------------------------------------------------------- +delete from t11 where col1='14:30'; +delete from t22 where col1='14:30'; +delete from t33 where col1='14:30'; +delete from t44 where col1='14:30'; +delete from t55 where col1='14:30'; +delete from t66 where col1='14:30'; +select * from t11 order by col1; +col1 +10:30:00 +select * from t22 order by col1; +col1 +10:30:00 +21:59:00 +select * from t33 order by col1; +col1 +10:30:00 +21:59:00 +select * from t44 order by colint; +colint col1 +1 09:09:15 +2 04:30:01 +3 00:59:22 +4 05:30:34 +select * from t55 order by colint; +colint col1 +1 09:09:15 +2 04:30:01 +3 00:59:22 +4 05:30:34 +insert into t11 values ('14:30'); +insert into t22 values ('14:30'); +insert into t33 values ('14:30'); +insert into t44 values (60,'14:30'); +insert into t55 values (60,'14:30'); +insert into t66 values (60,'14:30'); +select * from t11 order by col1; +col1 +10:30:00 +14:30:00 +select * from t22 order by col1; +col1 +10:30:00 +14:30:00 +21:59:00 +select * from t33 order by col1; +col1 +10:30:00 +14:30:00 +21:59:00 +select * from t44 order by colint; +colint col1 +1 09:09:15 +2 04:30:01 +3 00:59:22 +4 05:30:34 +60 14:30:00 +select * from t55 order by colint; +colint col1 +1 09:09:15 +2 04:30:01 +3 00:59:22 +4 05:30:34 +60 14:30:00 +select * from t66 order by colint; +colint col1 +1 09:09:15 +2 04:30:01 +3 00:59:22 +4 05:30:34 +60 14:30:00 +alter table t11 drop partition p0; +alter table t22 drop partition p0; +alter table t44 drop partition p0; +alter table t55 drop partition p0; +alter table t66 drop partition p0; +select * from t11 order by col1; +col1 +select * from t22 order by col1; +col1 +14:30:00 +21:59:00 +select * from t33 order by col1; +col1 +10:30:00 +14:30:00 +21:59:00 +select * from t44 order by colint; +colint col1 +60 14:30:00 +select * from t55 order by colint; +colint col1 +60 14:30:00 +select * from t66 order by colint; +colint col1 +60 14:30:00 +------------------------- +---- some alter table end +------------------------- +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +------------------------------------------------------------------------- +--- microsecond(col1) in partition with coltype time +------------------------------------------------------------------------- +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +------------------------------------------------------------------------- +--- Create tables with microsecond(col1) +------------------------------------------------------------------------- +create table t1 (col1 time) engine='TOKUDB' +partition by range(microsecond(col1)) +(partition p0 values less than (15), +partition p1 values less than maxvalue); +create table t2 (col1 time) engine='TOKUDB' +partition by list(microsecond(col1)) +(partition p0 values in (0,1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +create table t3 (col1 time) engine='TOKUDB' +partition by hash(microsecond(col1)); +create table t4 (colint int, col1 time) engine='TOKUDB' +partition by range(colint) +subpartition by hash(microsecond(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than maxvalue); +create table t5 (colint int, col1 time) engine='TOKUDB' +partition by list(colint) +subpartition by hash(microsecond(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +create table t6 (colint int, col1 time) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (microsecond('10:30:10.000010')), +partition p1 values less than maxvalue); +------------------------------------------------------------------------- +--- Access tables with microsecond(col1) +------------------------------------------------------------------------- +insert into t1 values ('09:09:15.000002'); +insert into t1 values ('04:30:01.000018'); +insert into t2 values ('09:09:15.000002'); +insert into t2 values ('04:30:01.000018'); +insert into t2 values ('00:59:22.000024'); +insert into t3 values ('09:09:15.000002'); +insert into t3 values ('04:30:01.000018'); +insert into t3 values ('00:59:22.000024'); +load data infile 'MYSQLTEST_VARDIR/std_data/parts/part_supported_sql_funcs_int_time.inc' into table t4; +load data infile 'MYSQLTEST_VARDIR/std_data/parts/part_supported_sql_funcs_int_time.inc' into table t5; +load data infile 'MYSQLTEST_VARDIR/std_data/parts/part_supported_sql_funcs_int_time.inc' into table t6; +select microsecond(col1) from t1 order by col1; +microsecond(col1) +0 +0 +select * from t1 order by col1; +col1 +04:30:01 +09:09:15 +select * from t2 order by col1; +col1 +00:59:22 +04:30:01 +09:09:15 +select * from t3 order by col1; +col1 +00:59:22 +04:30:01 +09:09:15 +select * from t4 order by colint; +colint col1 +1 09:09:15 +2 04:30:01 +3 00:59:22 +4 05:30:34 +select * from t5 order by colint; +colint col1 +1 09:09:15 +2 04:30:01 +3 00:59:22 +4 05:30:34 +select * from t6 order by colint; +colint col1 +1 09:09:15 +2 04:30:01 +3 00:59:22 +4 05:30:34 +update t1 set col1='05:30:34.000037' where col1='09:09:15.000002'; +update t2 set col1='05:30:34.000037' where col1='09:09:15.000002'; +update t3 set col1='05:30:34.000037' where col1='09:09:15.000002'; +update t4 set col1='05:30:34.000037' where col1='09:09:15.000002'; +update t5 set col1='05:30:34.000037' where col1='09:09:15.000002'; +update t6 set col1='05:30:34.000037' where col1='09:09:15.000002'; +select * from t1 order by col1; +col1 +04:30:01 +05:30:34 +select * from t2 order by col1; +col1 +00:59:22 +04:30:01 +05:30:34 +select * from t3 order by col1; +col1 +00:59:22 +04:30:01 +05:30:34 +select * from t4 order by colint; +colint col1 +1 05:30:34 +2 04:30:01 +3 00:59:22 +4 05:30:34 +select * from t5 order by colint; +colint col1 +1 05:30:34 +2 04:30:01 +3 00:59:22 +4 05:30:34 +select * from t6 order by colint; +colint col1 +1 05:30:34 +2 04:30:01 +3 00:59:22 +4 05:30:34 +------------------------------------------------------------------------- +--- Alter tables with microsecond(col1) +------------------------------------------------------------------------- +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 engine='TOKUDB' as select * from t1; +create table t22 engine='TOKUDB' as select * from t2; +create table t33 engine='TOKUDB' as select * from t3; +create table t44 engine='TOKUDB' as select * from t4; +create table t55 engine='TOKUDB' as select * from t5; +create table t66 engine='TOKUDB' as select * from t6; +alter table t11 +partition by range(microsecond(col1)) +(partition p0 values less than (15), +partition p1 values less than maxvalue); +alter table t22 +partition by list(microsecond(col1)) +(partition p0 values in (0,1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +alter table t33 +partition by hash(microsecond(col1)); +alter table t44 +partition by range(colint) +subpartition by hash(microsecond(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than maxvalue); +alter table t55 +partition by list(colint) +subpartition by hash(microsecond(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +alter table t66 +partition by range(colint) +(partition p0 values less than (microsecond('10:30:10.000010')), +partition p1 values less than maxvalue); +select * from t11 order by col1; +col1 +04:30:01 +05:30:34 +select * from t22 order by col1; +col1 +00:59:22 +04:30:01 +05:30:34 +select * from t33 order by col1; +col1 +00:59:22 +04:30:01 +05:30:34 +select * from t44 order by colint; +colint col1 +1 05:30:34 +2 04:30:01 +3 00:59:22 +4 05:30:34 +select * from t55 order by colint; +colint col1 +1 05:30:34 +2 04:30:01 +3 00:59:22 +4 05:30:34 +select * from t66 order by colint; +colint col1 +1 05:30:34 +2 04:30:01 +3 00:59:22 +4 05:30:34 +--------------------------- +---- some alter table begin +--------------------------- +alter table t11 +reorganize partition p0,p1 into +(partition s1 values less than maxvalue); +select * from t11 order by col1; +col1 +04:30:01 +05:30:34 +alter table t11 +reorganize partition s1 into +(partition p0 values less than (15), +partition p1 values less than maxvalue); +select * from t11 order by col1; +col1 +04:30:01 +05:30:34 +alter table t55 +partition by list(colint) +subpartition by hash(microsecond(col1)) subpartitions 5 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +show create table t55; +Table Create Table +t55 CREATE TABLE `t55` ( + `colint` int(11) DEFAULT NULL, + `col1` time DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (colint) +SUBPARTITION BY HASH (microsecond(col1)) +SUBPARTITIONS 5 +(PARTITION p0 VALUES IN (1,2,3,4,5,6,7,8,9,10) ENGINE = TokuDB, + PARTITION p1 VALUES IN (11,12,13,14,15,16,17,18,19,20) ENGINE = TokuDB, + PARTITION p2 VALUES IN (21,22,23,24,25,26,27,28,29,30) ENGINE = TokuDB, + PARTITION p3 VALUES IN (31,32,33,34,35,36,37,38,39,40) ENGINE = TokuDB, + PARTITION p4 VALUES IN (41,42,43,44,45,46,47,48,49,50) ENGINE = TokuDB, + PARTITION p5 VALUES IN (51,52,53,54,55,56,57,58,59,60) ENGINE = TokuDB) */ +select * from t55 order by colint; +colint col1 +1 05:30:34 +2 04:30:01 +3 00:59:22 +4 05:30:34 +alter table t66 +reorganize partition p0,p1 into +(partition s1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 05:30:34 +2 04:30:01 +3 00:59:22 +4 05:30:34 +alter table t66 +reorganize partition s1 into +(partition p0 values less than (microsecond('10:30:10.000010')), +partition p1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 05:30:34 +2 04:30:01 +3 00:59:22 +4 05:30:34 +alter table t66 +reorganize partition p0,p1 into +(partition s1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 05:30:34 +2 04:30:01 +3 00:59:22 +4 05:30:34 +alter table t66 +reorganize partition s1 into +(partition p0 values less than (microsecond('10:30:10.000010')), +partition p1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 05:30:34 +2 04:30:01 +3 00:59:22 +4 05:30:34 +------------------------------------------------------------------------- +--- Delete rows and partitions of tables with microsecond(col1) +------------------------------------------------------------------------- +delete from t1 where col1='04:30:01.000018'; +delete from t2 where col1='04:30:01.000018'; +delete from t3 where col1='04:30:01.000018'; +delete from t4 where col1='04:30:01.000018'; +delete from t5 where col1='04:30:01.000018'; +delete from t6 where col1='04:30:01.000018'; +select * from t1 order by col1; +col1 +05:30:34 +select * from t2 order by col1; +col1 +00:59:22 +05:30:34 +select * from t3 order by col1; +col1 +00:59:22 +05:30:34 +select * from t4 order by colint; +colint col1 +1 05:30:34 +3 00:59:22 +4 05:30:34 +select * from t5 order by colint; +colint col1 +1 05:30:34 +3 00:59:22 +4 05:30:34 +insert into t1 values ('04:30:01.000018'); +insert into t2 values ('04:30:01.000018'); +insert into t3 values ('04:30:01.000018'); +insert into t4 values (60,'04:30:01.000018'); +insert into t5 values (60,'04:30:01.000018'); +insert into t6 values (60,'04:30:01.000018'); +select * from t1 order by col1; +col1 +04:30:01 +05:30:34 +select * from t2 order by col1; +col1 +00:59:22 +04:30:01 +05:30:34 +select * from t3 order by col1; +col1 +00:59:22 +04:30:01 +05:30:34 +select * from t4 order by colint; +colint col1 +1 05:30:34 +3 00:59:22 +4 05:30:34 +60 04:30:01 +select * from t5 order by colint; +colint col1 +1 05:30:34 +3 00:59:22 +4 05:30:34 +60 04:30:01 +select * from t6 order by colint; +colint col1 +1 05:30:34 +3 00:59:22 +4 05:30:34 +60 04:30:01 +alter table t1 drop partition p0; +alter table t2 drop partition p0; +alter table t4 drop partition p0; +alter table t5 drop partition p0; +alter table t6 drop partition p0; +select * from t1 order by col1; +col1 +select * from t2 order by col1; +col1 +select * from t3 order by col1; +col1 +00:59:22 +04:30:01 +05:30:34 +select * from t4 order by colint; +colint col1 +60 04:30:01 +select * from t5 order by colint; +colint col1 +60 04:30:01 +select * from t6 order by colint; +colint col1 +60 04:30:01 +------------------------------------------------------------------------- +--- Delete rows and partitions of tables with microsecond(col1) +------------------------------------------------------------------------- +delete from t11 where col1='04:30:01.000018'; +delete from t22 where col1='04:30:01.000018'; +delete from t33 where col1='04:30:01.000018'; +delete from t44 where col1='04:30:01.000018'; +delete from t55 where col1='04:30:01.000018'; +delete from t66 where col1='04:30:01.000018'; +select * from t11 order by col1; +col1 +05:30:34 +select * from t22 order by col1; +col1 +00:59:22 +05:30:34 +select * from t33 order by col1; +col1 +00:59:22 +05:30:34 +select * from t44 order by colint; +colint col1 +1 05:30:34 +3 00:59:22 +4 05:30:34 +select * from t55 order by colint; +colint col1 +1 05:30:34 +3 00:59:22 +4 05:30:34 +insert into t11 values ('04:30:01.000018'); +insert into t22 values ('04:30:01.000018'); +insert into t33 values ('04:30:01.000018'); +insert into t44 values (60,'04:30:01.000018'); +insert into t55 values (60,'04:30:01.000018'); +insert into t66 values (60,'04:30:01.000018'); +select * from t11 order by col1; +col1 +04:30:01 +05:30:34 +select * from t22 order by col1; +col1 +00:59:22 +04:30:01 +05:30:34 +select * from t33 order by col1; +col1 +00:59:22 +04:30:01 +05:30:34 +select * from t44 order by colint; +colint col1 +1 05:30:34 +3 00:59:22 +4 05:30:34 +60 04:30:01 +select * from t55 order by colint; +colint col1 +1 05:30:34 +3 00:59:22 +4 05:30:34 +60 04:30:01 +select * from t66 order by colint; +colint col1 +1 05:30:34 +3 00:59:22 +4 05:30:34 +60 04:30:01 +alter table t11 drop partition p0; +alter table t22 drop partition p0; +alter table t44 drop partition p0; +alter table t55 drop partition p0; +alter table t66 drop partition p0; +select * from t11 order by col1; +col1 +select * from t22 order by col1; +col1 +select * from t33 order by col1; +col1 +00:59:22 +04:30:01 +05:30:34 +select * from t44 order by colint; +colint col1 +60 04:30:01 +select * from t55 order by colint; +colint col1 +60 04:30:01 +select * from t66 order by colint; +colint col1 +60 04:30:01 +------------------------- +---- some alter table end +------------------------- +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +------------------------------------------------------------------------- +--- minute(col1) in partition with coltype time +------------------------------------------------------------------------- +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +------------------------------------------------------------------------- +--- Create tables with minute(col1) +------------------------------------------------------------------------- +create table t1 (col1 time) engine='TOKUDB' +partition by range(minute(col1)) +(partition p0 values less than (15), +partition p1 values less than maxvalue); +create table t2 (col1 time) engine='TOKUDB' +partition by list(minute(col1)) +(partition p0 values in (0,1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +create table t3 (col1 time) engine='TOKUDB' +partition by hash(minute(col1)); +create table t4 (colint int, col1 time) engine='TOKUDB' +partition by range(colint) +subpartition by hash(minute(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than maxvalue); +create table t5 (colint int, col1 time) engine='TOKUDB' +partition by list(colint) +subpartition by hash(minute(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +create table t6 (colint int, col1 time) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (minute('18:30')), +partition p1 values less than maxvalue); +------------------------------------------------------------------------- +--- Access tables with minute(col1) +------------------------------------------------------------------------- +insert into t1 values ('09:09:15'); +insert into t1 values ('14:30:45'); +insert into t2 values ('09:09:15'); +insert into t2 values ('14:30:45'); +insert into t2 values ('21:59:22'); +insert into t3 values ('09:09:15'); +insert into t3 values ('14:30:45'); +insert into t3 values ('21:59:22'); +load data infile 'MYSQLTEST_VARDIR/std_data/parts/part_supported_sql_funcs_int_time.inc' into table t4; +load data infile 'MYSQLTEST_VARDIR/std_data/parts/part_supported_sql_funcs_int_time.inc' into table t5; +load data infile 'MYSQLTEST_VARDIR/std_data/parts/part_supported_sql_funcs_int_time.inc' into table t6; +select minute(col1) from t1 order by col1; +minute(col1) +9 +30 +select * from t1 order by col1; +col1 +09:09:15 +14:30:45 +select * from t2 order by col1; +col1 +09:09:15 +14:30:45 +21:59:22 +select * from t3 order by col1; +col1 +09:09:15 +14:30:45 +21:59:22 +select * from t4 order by colint; +colint col1 +1 09:09:15 +2 04:30:01 +3 00:59:22 +4 05:30:34 +select * from t5 order by colint; +colint col1 +1 09:09:15 +2 04:30:01 +3 00:59:22 +4 05:30:34 +select * from t6 order by colint; +colint col1 +1 09:09:15 +2 04:30:01 +3 00:59:22 +4 05:30:34 +update t1 set col1='10:24:23' where col1='09:09:15'; +update t2 set col1='10:24:23' where col1='09:09:15'; +update t3 set col1='10:24:23' where col1='09:09:15'; +update t4 set col1='10:24:23' where col1='09:09:15'; +update t5 set col1='10:24:23' where col1='09:09:15'; +update t6 set col1='10:24:23' where col1='09:09:15'; +select * from t1 order by col1; +col1 +10:24:23 +14:30:45 +select * from t2 order by col1; +col1 +10:24:23 +14:30:45 +21:59:22 +select * from t3 order by col1; +col1 +10:24:23 +14:30:45 +21:59:22 +select * from t4 order by colint; +colint col1 +1 10:24:23 +2 04:30:01 +3 00:59:22 +4 05:30:34 +select * from t5 order by colint; +colint col1 +1 10:24:23 +2 04:30:01 +3 00:59:22 +4 05:30:34 +select * from t6 order by colint; +colint col1 +1 10:24:23 +2 04:30:01 +3 00:59:22 +4 05:30:34 +------------------------------------------------------------------------- +--- Alter tables with minute(col1) +------------------------------------------------------------------------- +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 engine='TOKUDB' as select * from t1; +create table t22 engine='TOKUDB' as select * from t2; +create table t33 engine='TOKUDB' as select * from t3; +create table t44 engine='TOKUDB' as select * from t4; +create table t55 engine='TOKUDB' as select * from t5; +create table t66 engine='TOKUDB' as select * from t6; +alter table t11 +partition by range(minute(col1)) +(partition p0 values less than (15), +partition p1 values less than maxvalue); +alter table t22 +partition by list(minute(col1)) +(partition p0 values in (0,1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +alter table t33 +partition by hash(minute(col1)); +alter table t44 +partition by range(colint) +subpartition by hash(minute(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than maxvalue); +alter table t55 +partition by list(colint) +subpartition by hash(minute(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +alter table t66 +partition by range(colint) +(partition p0 values less than (minute('18:30')), +partition p1 values less than maxvalue); +select * from t11 order by col1; +col1 +10:24:23 +14:30:45 +select * from t22 order by col1; +col1 +10:24:23 +14:30:45 +21:59:22 +select * from t33 order by col1; +col1 +10:24:23 +14:30:45 +21:59:22 +select * from t44 order by colint; +colint col1 +1 10:24:23 +2 04:30:01 +3 00:59:22 +4 05:30:34 +select * from t55 order by colint; +colint col1 +1 10:24:23 +2 04:30:01 +3 00:59:22 +4 05:30:34 +select * from t66 order by colint; +colint col1 +1 10:24:23 +2 04:30:01 +3 00:59:22 +4 05:30:34 +--------------------------- +---- some alter table begin +--------------------------- +alter table t11 +reorganize partition p0,p1 into +(partition s1 values less than maxvalue); +select * from t11 order by col1; +col1 +10:24:23 +14:30:45 +alter table t11 +reorganize partition s1 into +(partition p0 values less than (15), +partition p1 values less than maxvalue); +select * from t11 order by col1; +col1 +10:24:23 +14:30:45 +alter table t55 +partition by list(colint) +subpartition by hash(minute(col1)) subpartitions 5 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +show create table t55; +Table Create Table +t55 CREATE TABLE `t55` ( + `colint` int(11) DEFAULT NULL, + `col1` time DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (colint) +SUBPARTITION BY HASH (minute(col1)) +SUBPARTITIONS 5 +(PARTITION p0 VALUES IN (1,2,3,4,5,6,7,8,9,10) ENGINE = TokuDB, + PARTITION p1 VALUES IN (11,12,13,14,15,16,17,18,19,20) ENGINE = TokuDB, + PARTITION p2 VALUES IN (21,22,23,24,25,26,27,28,29,30) ENGINE = TokuDB, + PARTITION p3 VALUES IN (31,32,33,34,35,36,37,38,39,40) ENGINE = TokuDB, + PARTITION p4 VALUES IN (41,42,43,44,45,46,47,48,49,50) ENGINE = TokuDB, + PARTITION p5 VALUES IN (51,52,53,54,55,56,57,58,59,60) ENGINE = TokuDB) */ +select * from t55 order by colint; +colint col1 +1 10:24:23 +2 04:30:01 +3 00:59:22 +4 05:30:34 +alter table t66 +reorganize partition p0,p1 into +(partition s1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 10:24:23 +2 04:30:01 +3 00:59:22 +4 05:30:34 +alter table t66 +reorganize partition s1 into +(partition p0 values less than (minute('18:30')), +partition p1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 10:24:23 +2 04:30:01 +3 00:59:22 +4 05:30:34 +alter table t66 +reorganize partition p0,p1 into +(partition s1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 10:24:23 +2 04:30:01 +3 00:59:22 +4 05:30:34 +alter table t66 +reorganize partition s1 into +(partition p0 values less than (minute('18:30')), +partition p1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 10:24:23 +2 04:30:01 +3 00:59:22 +4 05:30:34 +------------------------------------------------------------------------- +--- Delete rows and partitions of tables with minute(col1) +------------------------------------------------------------------------- +delete from t1 where col1='14:30:45'; +delete from t2 where col1='14:30:45'; +delete from t3 where col1='14:30:45'; +delete from t4 where col1='14:30:45'; +delete from t5 where col1='14:30:45'; +delete from t6 where col1='14:30:45'; +select * from t1 order by col1; +col1 +10:24:23 +select * from t2 order by col1; +col1 +10:24:23 +21:59:22 +select * from t3 order by col1; +col1 +10:24:23 +21:59:22 +select * from t4 order by colint; +colint col1 +1 10:24:23 +2 04:30:01 +3 00:59:22 +4 05:30:34 +select * from t5 order by colint; +colint col1 +1 10:24:23 +2 04:30:01 +3 00:59:22 +4 05:30:34 +insert into t1 values ('14:30:45'); +insert into t2 values ('14:30:45'); +insert into t3 values ('14:30:45'); +insert into t4 values (60,'14:30:45'); +insert into t5 values (60,'14:30:45'); +insert into t6 values (60,'14:30:45'); +select * from t1 order by col1; +col1 +10:24:23 +14:30:45 +select * from t2 order by col1; +col1 +10:24:23 +14:30:45 +21:59:22 +select * from t3 order by col1; +col1 +10:24:23 +14:30:45 +21:59:22 +select * from t4 order by colint; +colint col1 +1 10:24:23 +2 04:30:01 +3 00:59:22 +4 05:30:34 +60 14:30:45 +select * from t5 order by colint; +colint col1 +1 10:24:23 +2 04:30:01 +3 00:59:22 +4 05:30:34 +60 14:30:45 +select * from t6 order by colint; +colint col1 +1 10:24:23 +2 04:30:01 +3 00:59:22 +4 05:30:34 +60 14:30:45 +alter table t1 drop partition p0; +alter table t2 drop partition p0; +alter table t4 drop partition p0; +alter table t5 drop partition p0; +alter table t6 drop partition p0; +select * from t1 order by col1; +col1 +10:24:23 +14:30:45 +select * from t2 order by col1; +col1 +10:24:23 +14:30:45 +21:59:22 +select * from t3 order by col1; +col1 +10:24:23 +14:30:45 +21:59:22 +select * from t4 order by colint; +colint col1 +60 14:30:45 +select * from t5 order by colint; +colint col1 +60 14:30:45 +select * from t6 order by colint; +colint col1 +60 14:30:45 +------------------------------------------------------------------------- +--- Delete rows and partitions of tables with minute(col1) +------------------------------------------------------------------------- +delete from t11 where col1='14:30:45'; +delete from t22 where col1='14:30:45'; +delete from t33 where col1='14:30:45'; +delete from t44 where col1='14:30:45'; +delete from t55 where col1='14:30:45'; +delete from t66 where col1='14:30:45'; +select * from t11 order by col1; +col1 +10:24:23 +select * from t22 order by col1; +col1 +10:24:23 +21:59:22 +select * from t33 order by col1; +col1 +10:24:23 +21:59:22 +select * from t44 order by colint; +colint col1 +1 10:24:23 +2 04:30:01 +3 00:59:22 +4 05:30:34 +select * from t55 order by colint; +colint col1 +1 10:24:23 +2 04:30:01 +3 00:59:22 +4 05:30:34 +insert into t11 values ('14:30:45'); +insert into t22 values ('14:30:45'); +insert into t33 values ('14:30:45'); +insert into t44 values (60,'14:30:45'); +insert into t55 values (60,'14:30:45'); +insert into t66 values (60,'14:30:45'); +select * from t11 order by col1; +col1 +10:24:23 +14:30:45 +select * from t22 order by col1; +col1 +10:24:23 +14:30:45 +21:59:22 +select * from t33 order by col1; +col1 +10:24:23 +14:30:45 +21:59:22 +select * from t44 order by colint; +colint col1 +1 10:24:23 +2 04:30:01 +3 00:59:22 +4 05:30:34 +60 14:30:45 +select * from t55 order by colint; +colint col1 +1 10:24:23 +2 04:30:01 +3 00:59:22 +4 05:30:34 +60 14:30:45 +select * from t66 order by colint; +colint col1 +1 10:24:23 +2 04:30:01 +3 00:59:22 +4 05:30:34 +60 14:30:45 +alter table t11 drop partition p0; +alter table t22 drop partition p0; +alter table t44 drop partition p0; +alter table t55 drop partition p0; +alter table t66 drop partition p0; +select * from t11 order by col1; +col1 +10:24:23 +14:30:45 +select * from t22 order by col1; +col1 +10:24:23 +14:30:45 +21:59:22 +select * from t33 order by col1; +col1 +10:24:23 +14:30:45 +21:59:22 +select * from t44 order by colint; +colint col1 +60 14:30:45 +select * from t55 order by colint; +colint col1 +60 14:30:45 +select * from t66 order by colint; +colint col1 +60 14:30:45 +------------------------- +---- some alter table end +------------------------- +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +------------------------------------------------------------------------- +--- second(col1) in partition with coltype time +------------------------------------------------------------------------- +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +------------------------------------------------------------------------- +--- Create tables with second(col1) +------------------------------------------------------------------------- +create table t1 (col1 time) engine='TOKUDB' +partition by range(second(col1)) +(partition p0 values less than (15), +partition p1 values less than maxvalue); +create table t2 (col1 time) engine='TOKUDB' +partition by list(second(col1)) +(partition p0 values in (0,1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +create table t3 (col1 time) engine='TOKUDB' +partition by hash(second(col1)); +create table t4 (colint int, col1 time) engine='TOKUDB' +partition by range(colint) +subpartition by hash(second(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than maxvalue); +create table t5 (colint int, col1 time) engine='TOKUDB' +partition by list(colint) +subpartition by hash(second(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +create table t6 (colint int, col1 time) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (second('18:30:14')), +partition p1 values less than maxvalue); +------------------------------------------------------------------------- +--- Access tables with second(col1) +------------------------------------------------------------------------- +insert into t1 values ('09:09:09'); +insert into t1 values ('14:30:20'); +insert into t2 values ('09:09:09'); +insert into t2 values ('14:30:20'); +insert into t2 values ('21:59:22'); +insert into t3 values ('09:09:09'); +insert into t3 values ('14:30:20'); +insert into t3 values ('21:59:22'); +load data infile 'MYSQLTEST_VARDIR/std_data/parts/part_supported_sql_funcs_int_time.inc' into table t4; +load data infile 'MYSQLTEST_VARDIR/std_data/parts/part_supported_sql_funcs_int_time.inc' into table t5; +load data infile 'MYSQLTEST_VARDIR/std_data/parts/part_supported_sql_funcs_int_time.inc' into table t6; +select second(col1) from t1 order by col1; +second(col1) +9 +20 +select * from t1 order by col1; +col1 +09:09:09 +14:30:20 +select * from t2 order by col1; +col1 +09:09:09 +14:30:20 +21:59:22 +select * from t3 order by col1; +col1 +09:09:09 +14:30:20 +21:59:22 +select * from t4 order by colint; +colint col1 +1 09:09:15 +2 04:30:01 +3 00:59:22 +4 05:30:34 +select * from t5 order by colint; +colint col1 +1 09:09:15 +2 04:30:01 +3 00:59:22 +4 05:30:34 +select * from t6 order by colint; +colint col1 +1 09:09:15 +2 04:30:01 +3 00:59:22 +4 05:30:34 +update t1 set col1='10:22:33' where col1='09:09:09'; +update t2 set col1='10:22:33' where col1='09:09:09'; +update t3 set col1='10:22:33' where col1='09:09:09'; +update t4 set col1='10:22:33' where col1='09:09:09'; +update t5 set col1='10:22:33' where col1='09:09:09'; +update t6 set col1='10:22:33' where col1='09:09:09'; +select * from t1 order by col1; +col1 +10:22:33 +14:30:20 +select * from t2 order by col1; +col1 +10:22:33 +14:30:20 +21:59:22 +select * from t3 order by col1; +col1 +10:22:33 +14:30:20 +21:59:22 +select * from t4 order by colint; +colint col1 +1 09:09:15 +2 04:30:01 +3 00:59:22 +4 05:30:34 +select * from t5 order by colint; +colint col1 +1 09:09:15 +2 04:30:01 +3 00:59:22 +4 05:30:34 +select * from t6 order by colint; +colint col1 +1 09:09:15 +2 04:30:01 +3 00:59:22 +4 05:30:34 +------------------------------------------------------------------------- +--- Alter tables with second(col1) +------------------------------------------------------------------------- +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 engine='TOKUDB' as select * from t1; +create table t22 engine='TOKUDB' as select * from t2; +create table t33 engine='TOKUDB' as select * from t3; +create table t44 engine='TOKUDB' as select * from t4; +create table t55 engine='TOKUDB' as select * from t5; +create table t66 engine='TOKUDB' as select * from t6; +alter table t11 +partition by range(second(col1)) +(partition p0 values less than (15), +partition p1 values less than maxvalue); +alter table t22 +partition by list(second(col1)) +(partition p0 values in (0,1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +alter table t33 +partition by hash(second(col1)); +alter table t44 +partition by range(colint) +subpartition by hash(second(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than maxvalue); +alter table t55 +partition by list(colint) +subpartition by hash(second(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +alter table t66 +partition by range(colint) +(partition p0 values less than (second('18:30:14')), +partition p1 values less than maxvalue); +select * from t11 order by col1; +col1 +10:22:33 +14:30:20 +select * from t22 order by col1; +col1 +10:22:33 +14:30:20 +21:59:22 +select * from t33 order by col1; +col1 +10:22:33 +14:30:20 +21:59:22 +select * from t44 order by colint; +colint col1 +1 09:09:15 +2 04:30:01 +3 00:59:22 +4 05:30:34 +select * from t55 order by colint; +colint col1 +1 09:09:15 +2 04:30:01 +3 00:59:22 +4 05:30:34 +select * from t66 order by colint; +colint col1 +1 09:09:15 +2 04:30:01 +3 00:59:22 +4 05:30:34 +--------------------------- +---- some alter table begin +--------------------------- +alter table t11 +reorganize partition p0,p1 into +(partition s1 values less than maxvalue); +select * from t11 order by col1; +col1 +10:22:33 +14:30:20 +alter table t11 +reorganize partition s1 into +(partition p0 values less than (15), +partition p1 values less than maxvalue); +select * from t11 order by col1; +col1 +10:22:33 +14:30:20 +alter table t55 +partition by list(colint) +subpartition by hash(second(col1)) subpartitions 5 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +show create table t55; +Table Create Table +t55 CREATE TABLE `t55` ( + `colint` int(11) DEFAULT NULL, + `col1` time DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (colint) +SUBPARTITION BY HASH (second(col1)) +SUBPARTITIONS 5 +(PARTITION p0 VALUES IN (1,2,3,4,5,6,7,8,9,10) ENGINE = TokuDB, + PARTITION p1 VALUES IN (11,12,13,14,15,16,17,18,19,20) ENGINE = TokuDB, + PARTITION p2 VALUES IN (21,22,23,24,25,26,27,28,29,30) ENGINE = TokuDB, + PARTITION p3 VALUES IN (31,32,33,34,35,36,37,38,39,40) ENGINE = TokuDB, + PARTITION p4 VALUES IN (41,42,43,44,45,46,47,48,49,50) ENGINE = TokuDB, + PARTITION p5 VALUES IN (51,52,53,54,55,56,57,58,59,60) ENGINE = TokuDB) */ +select * from t55 order by colint; +colint col1 +1 09:09:15 +2 04:30:01 +3 00:59:22 +4 05:30:34 +alter table t66 +reorganize partition p0,p1 into +(partition s1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 09:09:15 +2 04:30:01 +3 00:59:22 +4 05:30:34 +alter table t66 +reorganize partition s1 into +(partition p0 values less than (second('18:30:14')), +partition p1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 09:09:15 +2 04:30:01 +3 00:59:22 +4 05:30:34 +alter table t66 +reorganize partition p0,p1 into +(partition s1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 09:09:15 +2 04:30:01 +3 00:59:22 +4 05:30:34 +alter table t66 +reorganize partition s1 into +(partition p0 values less than (second('18:30:14')), +partition p1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 09:09:15 +2 04:30:01 +3 00:59:22 +4 05:30:34 +------------------------------------------------------------------------- +--- Delete rows and partitions of tables with second(col1) +------------------------------------------------------------------------- +delete from t1 where col1='14:30:20'; +delete from t2 where col1='14:30:20'; +delete from t3 where col1='14:30:20'; +delete from t4 where col1='14:30:20'; +delete from t5 where col1='14:30:20'; +delete from t6 where col1='14:30:20'; +select * from t1 order by col1; +col1 +10:22:33 +select * from t2 order by col1; +col1 +10:22:33 +21:59:22 +select * from t3 order by col1; +col1 +10:22:33 +21:59:22 +select * from t4 order by colint; +colint col1 +1 09:09:15 +2 04:30:01 +3 00:59:22 +4 05:30:34 +select * from t5 order by colint; +colint col1 +1 09:09:15 +2 04:30:01 +3 00:59:22 +4 05:30:34 +insert into t1 values ('14:30:20'); +insert into t2 values ('14:30:20'); +insert into t3 values ('14:30:20'); +insert into t4 values (60,'14:30:20'); +insert into t5 values (60,'14:30:20'); +insert into t6 values (60,'14:30:20'); +select * from t1 order by col1; +col1 +10:22:33 +14:30:20 +select * from t2 order by col1; +col1 +10:22:33 +14:30:20 +21:59:22 +select * from t3 order by col1; +col1 +10:22:33 +14:30:20 +21:59:22 +select * from t4 order by colint; +colint col1 +1 09:09:15 +2 04:30:01 +3 00:59:22 +4 05:30:34 +60 14:30:20 +select * from t5 order by colint; +colint col1 +1 09:09:15 +2 04:30:01 +3 00:59:22 +4 05:30:34 +60 14:30:20 +select * from t6 order by colint; +colint col1 +1 09:09:15 +2 04:30:01 +3 00:59:22 +4 05:30:34 +60 14:30:20 +alter table t1 drop partition p0; +alter table t2 drop partition p0; +alter table t4 drop partition p0; +alter table t5 drop partition p0; +alter table t6 drop partition p0; +select * from t1 order by col1; +col1 +10:22:33 +14:30:20 +select * from t2 order by col1; +col1 +10:22:33 +14:30:20 +21:59:22 +select * from t3 order by col1; +col1 +10:22:33 +14:30:20 +21:59:22 +select * from t4 order by colint; +colint col1 +60 14:30:20 +select * from t5 order by colint; +colint col1 +60 14:30:20 +select * from t6 order by colint; +colint col1 +60 14:30:20 +------------------------------------------------------------------------- +--- Delete rows and partitions of tables with second(col1) +------------------------------------------------------------------------- +delete from t11 where col1='14:30:20'; +delete from t22 where col1='14:30:20'; +delete from t33 where col1='14:30:20'; +delete from t44 where col1='14:30:20'; +delete from t55 where col1='14:30:20'; +delete from t66 where col1='14:30:20'; +select * from t11 order by col1; +col1 +10:22:33 +select * from t22 order by col1; +col1 +10:22:33 +21:59:22 +select * from t33 order by col1; +col1 +10:22:33 +21:59:22 +select * from t44 order by colint; +colint col1 +1 09:09:15 +2 04:30:01 +3 00:59:22 +4 05:30:34 +select * from t55 order by colint; +colint col1 +1 09:09:15 +2 04:30:01 +3 00:59:22 +4 05:30:34 +insert into t11 values ('14:30:20'); +insert into t22 values ('14:30:20'); +insert into t33 values ('14:30:20'); +insert into t44 values (60,'14:30:20'); +insert into t55 values (60,'14:30:20'); +insert into t66 values (60,'14:30:20'); +select * from t11 order by col1; +col1 +10:22:33 +14:30:20 +select * from t22 order by col1; +col1 +10:22:33 +14:30:20 +21:59:22 +select * from t33 order by col1; +col1 +10:22:33 +14:30:20 +21:59:22 +select * from t44 order by colint; +colint col1 +1 09:09:15 +2 04:30:01 +3 00:59:22 +4 05:30:34 +60 14:30:20 +select * from t55 order by colint; +colint col1 +1 09:09:15 +2 04:30:01 +3 00:59:22 +4 05:30:34 +60 14:30:20 +select * from t66 order by colint; +colint col1 +1 09:09:15 +2 04:30:01 +3 00:59:22 +4 05:30:34 +60 14:30:20 +alter table t11 drop partition p0; +alter table t22 drop partition p0; +alter table t44 drop partition p0; +alter table t55 drop partition p0; +alter table t66 drop partition p0; +select * from t11 order by col1; +col1 +10:22:33 +14:30:20 +select * from t22 order by col1; +col1 +10:22:33 +14:30:20 +21:59:22 +select * from t33 order by col1; +col1 +10:22:33 +14:30:20 +21:59:22 +select * from t44 order by colint; +colint col1 +60 14:30:20 +select * from t55 order by colint; +colint col1 +60 14:30:20 +select * from t66 order by colint; +colint col1 +60 14:30:20 +------------------------- +---- some alter table end +------------------------- +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +------------------------------------------------------------------------- +--- month(col1) in partition with coltype date +------------------------------------------------------------------------- +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +------------------------------------------------------------------------- +--- Create tables with month(col1) +------------------------------------------------------------------------- +create table t1 (col1 date) engine='TOKUDB' +partition by range(month(col1)) +(partition p0 values less than (15), +partition p1 values less than maxvalue); +create table t2 (col1 date) engine='TOKUDB' +partition by list(month(col1)) +(partition p0 values in (0,1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +create table t3 (col1 date) engine='TOKUDB' +partition by hash(month(col1)); +create table t4 (colint int, col1 date) engine='TOKUDB' +partition by range(colint) +subpartition by hash(month(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than maxvalue); +create table t5 (colint int, col1 date) engine='TOKUDB' +partition by list(colint) +subpartition by hash(month(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +create table t6 (colint int, col1 date) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (month('2006-10-14')), +partition p1 values less than maxvalue); +------------------------------------------------------------------------- +--- Access tables with month(col1) +------------------------------------------------------------------------- +insert into t1 values ('2006-01-03'); +insert into t1 values ('2006-12-17'); +insert into t2 values ('2006-01-03'); +insert into t2 values ('2006-12-17'); +insert into t2 values ('2006-05-25'); +insert into t3 values ('2006-01-03'); +insert into t3 values ('2006-12-17'); +insert into t3 values ('2006-05-25'); +load data infile 'MYSQLTEST_VARDIR/std_data/parts/part_supported_sql_funcs_int_date.inc' into table t4; +load data infile 'MYSQLTEST_VARDIR/std_data/parts/part_supported_sql_funcs_int_date.inc' into table t5; +load data infile 'MYSQLTEST_VARDIR/std_data/parts/part_supported_sql_funcs_int_date.inc' into table t6; +select month(col1) from t1 order by col1; +month(col1) +1 +12 +select * from t1 order by col1; +col1 +2006-01-03 +2006-12-17 +select * from t2 order by col1; +col1 +2006-01-03 +2006-05-25 +2006-12-17 +select * from t3 order by col1; +col1 +2006-01-03 +2006-05-25 +2006-12-17 +select * from t4 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t5 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t6 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +update t1 set col1='2006-11-06' where col1='2006-01-03'; +update t2 set col1='2006-11-06' where col1='2006-01-03'; +update t3 set col1='2006-11-06' where col1='2006-01-03'; +update t4 set col1='2006-11-06' where col1='2006-01-03'; +update t5 set col1='2006-11-06' where col1='2006-01-03'; +update t6 set col1='2006-11-06' where col1='2006-01-03'; +select * from t1 order by col1; +col1 +2006-11-06 +2006-12-17 +select * from t2 order by col1; +col1 +2006-05-25 +2006-11-06 +2006-12-17 +select * from t3 order by col1; +col1 +2006-05-25 +2006-11-06 +2006-12-17 +select * from t4 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t5 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t6 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +------------------------------------------------------------------------- +--- Alter tables with month(col1) +------------------------------------------------------------------------- +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 engine='TOKUDB' as select * from t1; +create table t22 engine='TOKUDB' as select * from t2; +create table t33 engine='TOKUDB' as select * from t3; +create table t44 engine='TOKUDB' as select * from t4; +create table t55 engine='TOKUDB' as select * from t5; +create table t66 engine='TOKUDB' as select * from t6; +alter table t11 +partition by range(month(col1)) +(partition p0 values less than (15), +partition p1 values less than maxvalue); +alter table t22 +partition by list(month(col1)) +(partition p0 values in (0,1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +alter table t33 +partition by hash(month(col1)); +alter table t44 +partition by range(colint) +subpartition by hash(month(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than maxvalue); +alter table t55 +partition by list(colint) +subpartition by hash(month(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +alter table t66 +partition by range(colint) +(partition p0 values less than (month('2006-10-14')), +partition p1 values less than maxvalue); +select * from t11 order by col1; +col1 +2006-11-06 +2006-12-17 +select * from t22 order by col1; +col1 +2006-05-25 +2006-11-06 +2006-12-17 +select * from t33 order by col1; +col1 +2006-05-25 +2006-11-06 +2006-12-17 +select * from t44 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t55 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t66 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +--------------------------- +---- some alter table begin +--------------------------- +alter table t11 +reorganize partition p0,p1 into +(partition s1 values less than maxvalue); +select * from t11 order by col1; +col1 +2006-11-06 +2006-12-17 +alter table t11 +reorganize partition s1 into +(partition p0 values less than (15), +partition p1 values less than maxvalue); +select * from t11 order by col1; +col1 +2006-11-06 +2006-12-17 +alter table t55 +partition by list(colint) +subpartition by hash(month(col1)) subpartitions 5 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +show create table t55; +Table Create Table +t55 CREATE TABLE `t55` ( + `colint` int(11) DEFAULT NULL, + `col1` date DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (colint) +SUBPARTITION BY HASH (month(col1)) +SUBPARTITIONS 5 +(PARTITION p0 VALUES IN (1,2,3,4,5,6,7,8,9,10) ENGINE = TokuDB, + PARTITION p1 VALUES IN (11,12,13,14,15,16,17,18,19,20) ENGINE = TokuDB, + PARTITION p2 VALUES IN (21,22,23,24,25,26,27,28,29,30) ENGINE = TokuDB, + PARTITION p3 VALUES IN (31,32,33,34,35,36,37,38,39,40) ENGINE = TokuDB, + PARTITION p4 VALUES IN (41,42,43,44,45,46,47,48,49,50) ENGINE = TokuDB, + PARTITION p5 VALUES IN (51,52,53,54,55,56,57,58,59,60) ENGINE = TokuDB) */ +select * from t55 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +alter table t66 +reorganize partition p0,p1 into +(partition s1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +alter table t66 +reorganize partition s1 into +(partition p0 values less than (month('2006-10-14')), +partition p1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +alter table t66 +reorganize partition p0,p1 into +(partition s1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +alter table t66 +reorganize partition s1 into +(partition p0 values less than (month('2006-10-14')), +partition p1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +------------------------------------------------------------------------- +--- Delete rows and partitions of tables with month(col1) +------------------------------------------------------------------------- +delete from t1 where col1='2006-12-17'; +delete from t2 where col1='2006-12-17'; +delete from t3 where col1='2006-12-17'; +delete from t4 where col1='2006-12-17'; +delete from t5 where col1='2006-12-17'; +delete from t6 where col1='2006-12-17'; +select * from t1 order by col1; +col1 +2006-11-06 +select * from t2 order by col1; +col1 +2006-05-25 +2006-11-06 +select * from t3 order by col1; +col1 +2006-05-25 +2006-11-06 +select * from t4 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t5 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +insert into t1 values ('2006-12-17'); +insert into t2 values ('2006-12-17'); +insert into t3 values ('2006-12-17'); +insert into t4 values (60,'2006-12-17'); +insert into t5 values (60,'2006-12-17'); +insert into t6 values (60,'2006-12-17'); +select * from t1 order by col1; +col1 +2006-11-06 +2006-12-17 +select * from t2 order by col1; +col1 +2006-05-25 +2006-11-06 +2006-12-17 +select * from t3 order by col1; +col1 +2006-05-25 +2006-11-06 +2006-12-17 +select * from t4 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +60 2006-12-17 +select * from t5 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +60 2006-12-17 +select * from t6 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +60 2006-12-17 +alter table t1 drop partition p0; +alter table t2 drop partition p0; +alter table t4 drop partition p0; +alter table t5 drop partition p0; +alter table t6 drop partition p0; +select * from t1 order by col1; +col1 +select * from t2 order by col1; +col1 +2006-11-06 +2006-12-17 +select * from t3 order by col1; +col1 +2006-05-25 +2006-11-06 +2006-12-17 +select * from t4 order by colint; +colint col1 +60 2006-12-17 +select * from t5 order by colint; +colint col1 +60 2006-12-17 +select * from t6 order by colint; +colint col1 +60 2006-12-17 +------------------------------------------------------------------------- +--- Delete rows and partitions of tables with month(col1) +------------------------------------------------------------------------- +delete from t11 where col1='2006-12-17'; +delete from t22 where col1='2006-12-17'; +delete from t33 where col1='2006-12-17'; +delete from t44 where col1='2006-12-17'; +delete from t55 where col1='2006-12-17'; +delete from t66 where col1='2006-12-17'; +select * from t11 order by col1; +col1 +2006-11-06 +select * from t22 order by col1; +col1 +2006-05-25 +2006-11-06 +select * from t33 order by col1; +col1 +2006-05-25 +2006-11-06 +select * from t44 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t55 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +insert into t11 values ('2006-12-17'); +insert into t22 values ('2006-12-17'); +insert into t33 values ('2006-12-17'); +insert into t44 values (60,'2006-12-17'); +insert into t55 values (60,'2006-12-17'); +insert into t66 values (60,'2006-12-17'); +select * from t11 order by col1; +col1 +2006-11-06 +2006-12-17 +select * from t22 order by col1; +col1 +2006-05-25 +2006-11-06 +2006-12-17 +select * from t33 order by col1; +col1 +2006-05-25 +2006-11-06 +2006-12-17 +select * from t44 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +60 2006-12-17 +select * from t55 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +60 2006-12-17 +select * from t66 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +60 2006-12-17 +alter table t11 drop partition p0; +alter table t22 drop partition p0; +alter table t44 drop partition p0; +alter table t55 drop partition p0; +alter table t66 drop partition p0; +select * from t11 order by col1; +col1 +select * from t22 order by col1; +col1 +2006-11-06 +2006-12-17 +select * from t33 order by col1; +col1 +2006-05-25 +2006-11-06 +2006-12-17 +select * from t44 order by colint; +colint col1 +60 2006-12-17 +select * from t55 order by colint; +colint col1 +60 2006-12-17 +select * from t66 order by colint; +colint col1 +60 2006-12-17 +------------------------- +---- some alter table end +------------------------- +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +------------------------------------------------------------------------- +--- quarter(col1) in partition with coltype date +------------------------------------------------------------------------- +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +------------------------------------------------------------------------- +--- Create tables with quarter(col1) +------------------------------------------------------------------------- +create table t1 (col1 date) engine='TOKUDB' +partition by range(quarter(col1)) +(partition p0 values less than (15), +partition p1 values less than maxvalue); +create table t2 (col1 date) engine='TOKUDB' +partition by list(quarter(col1)) +(partition p0 values in (0,1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +create table t3 (col1 date) engine='TOKUDB' +partition by hash(quarter(col1)); +create table t4 (colint int, col1 date) engine='TOKUDB' +partition by range(colint) +subpartition by hash(quarter(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than maxvalue); +create table t5 (colint int, col1 date) engine='TOKUDB' +partition by list(colint) +subpartition by hash(quarter(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +create table t6 (colint int, col1 date) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (quarter('2006-10-14')), +partition p1 values less than maxvalue); +------------------------------------------------------------------------- +--- Access tables with quarter(col1) +------------------------------------------------------------------------- +insert into t1 values ('2006-01-03'); +insert into t1 values ('2006-12-17'); +insert into t2 values ('2006-01-03'); +insert into t2 values ('2006-12-17'); +insert into t2 values ('2006-09-25'); +insert into t3 values ('2006-01-03'); +insert into t3 values ('2006-12-17'); +insert into t3 values ('2006-09-25'); +load data infile 'MYSQLTEST_VARDIR/std_data/parts/part_supported_sql_funcs_int_date.inc' into table t4; +load data infile 'MYSQLTEST_VARDIR/std_data/parts/part_supported_sql_funcs_int_date.inc' into table t5; +load data infile 'MYSQLTEST_VARDIR/std_data/parts/part_supported_sql_funcs_int_date.inc' into table t6; +select quarter(col1) from t1 order by col1; +quarter(col1) +1 +4 +select * from t1 order by col1; +col1 +2006-01-03 +2006-12-17 +select * from t2 order by col1; +col1 +2006-01-03 +2006-09-25 +2006-12-17 +select * from t3 order by col1; +col1 +2006-01-03 +2006-09-25 +2006-12-17 +select * from t4 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t5 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t6 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +update t1 set col1='2006-07-30' where col1='2006-01-03'; +update t2 set col1='2006-07-30' where col1='2006-01-03'; +update t3 set col1='2006-07-30' where col1='2006-01-03'; +update t4 set col1='2006-07-30' where col1='2006-01-03'; +update t5 set col1='2006-07-30' where col1='2006-01-03'; +update t6 set col1='2006-07-30' where col1='2006-01-03'; +select * from t1 order by col1; +col1 +2006-07-30 +2006-12-17 +select * from t2 order by col1; +col1 +2006-07-30 +2006-09-25 +2006-12-17 +select * from t3 order by col1; +col1 +2006-07-30 +2006-09-25 +2006-12-17 +select * from t4 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t5 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t6 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +------------------------------------------------------------------------- +--- Alter tables with quarter(col1) +------------------------------------------------------------------------- +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 engine='TOKUDB' as select * from t1; +create table t22 engine='TOKUDB' as select * from t2; +create table t33 engine='TOKUDB' as select * from t3; +create table t44 engine='TOKUDB' as select * from t4; +create table t55 engine='TOKUDB' as select * from t5; +create table t66 engine='TOKUDB' as select * from t6; +alter table t11 +partition by range(quarter(col1)) +(partition p0 values less than (15), +partition p1 values less than maxvalue); +alter table t22 +partition by list(quarter(col1)) +(partition p0 values in (0,1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +alter table t33 +partition by hash(quarter(col1)); +alter table t44 +partition by range(colint) +subpartition by hash(quarter(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than maxvalue); +alter table t55 +partition by list(colint) +subpartition by hash(quarter(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +alter table t66 +partition by range(colint) +(partition p0 values less than (quarter('2006-10-14')), +partition p1 values less than maxvalue); +select * from t11 order by col1; +col1 +2006-07-30 +2006-12-17 +select * from t22 order by col1; +col1 +2006-07-30 +2006-09-25 +2006-12-17 +select * from t33 order by col1; +col1 +2006-07-30 +2006-09-25 +2006-12-17 +select * from t44 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t55 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t66 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +--------------------------- +---- some alter table begin +--------------------------- +alter table t11 +reorganize partition p0,p1 into +(partition s1 values less than maxvalue); +select * from t11 order by col1; +col1 +2006-07-30 +2006-12-17 +alter table t11 +reorganize partition s1 into +(partition p0 values less than (15), +partition p1 values less than maxvalue); +select * from t11 order by col1; +col1 +2006-07-30 +2006-12-17 +alter table t55 +partition by list(colint) +subpartition by hash(quarter(col1)) subpartitions 5 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +show create table t55; +Table Create Table +t55 CREATE TABLE `t55` ( + `colint` int(11) DEFAULT NULL, + `col1` date DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (colint) +SUBPARTITION BY HASH (quarter(col1)) +SUBPARTITIONS 5 +(PARTITION p0 VALUES IN (1,2,3,4,5,6,7,8,9,10) ENGINE = TokuDB, + PARTITION p1 VALUES IN (11,12,13,14,15,16,17,18,19,20) ENGINE = TokuDB, + PARTITION p2 VALUES IN (21,22,23,24,25,26,27,28,29,30) ENGINE = TokuDB, + PARTITION p3 VALUES IN (31,32,33,34,35,36,37,38,39,40) ENGINE = TokuDB, + PARTITION p4 VALUES IN (41,42,43,44,45,46,47,48,49,50) ENGINE = TokuDB, + PARTITION p5 VALUES IN (51,52,53,54,55,56,57,58,59,60) ENGINE = TokuDB) */ +select * from t55 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +alter table t66 +reorganize partition p0,p1 into +(partition s1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +alter table t66 +reorganize partition s1 into +(partition p0 values less than (quarter('2006-10-14')), +partition p1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +alter table t66 +reorganize partition p0,p1 into +(partition s1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +alter table t66 +reorganize partition s1 into +(partition p0 values less than (quarter('2006-10-14')), +partition p1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +------------------------------------------------------------------------- +--- Delete rows and partitions of tables with quarter(col1) +------------------------------------------------------------------------- +delete from t1 where col1='2006-12-17'; +delete from t2 where col1='2006-12-17'; +delete from t3 where col1='2006-12-17'; +delete from t4 where col1='2006-12-17'; +delete from t5 where col1='2006-12-17'; +delete from t6 where col1='2006-12-17'; +select * from t1 order by col1; +col1 +2006-07-30 +select * from t2 order by col1; +col1 +2006-07-30 +2006-09-25 +select * from t3 order by col1; +col1 +2006-07-30 +2006-09-25 +select * from t4 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t5 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +insert into t1 values ('2006-12-17'); +insert into t2 values ('2006-12-17'); +insert into t3 values ('2006-12-17'); +insert into t4 values (60,'2006-12-17'); +insert into t5 values (60,'2006-12-17'); +insert into t6 values (60,'2006-12-17'); +select * from t1 order by col1; +col1 +2006-07-30 +2006-12-17 +select * from t2 order by col1; +col1 +2006-07-30 +2006-09-25 +2006-12-17 +select * from t3 order by col1; +col1 +2006-07-30 +2006-09-25 +2006-12-17 +select * from t4 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +60 2006-12-17 +select * from t5 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +60 2006-12-17 +select * from t6 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +60 2006-12-17 +alter table t1 drop partition p0; +alter table t2 drop partition p0; +alter table t4 drop partition p0; +alter table t5 drop partition p0; +alter table t6 drop partition p0; +select * from t1 order by col1; +col1 +select * from t2 order by col1; +col1 +select * from t3 order by col1; +col1 +2006-07-30 +2006-09-25 +2006-12-17 +select * from t4 order by colint; +colint col1 +60 2006-12-17 +select * from t5 order by colint; +colint col1 +60 2006-12-17 +select * from t6 order by colint; +colint col1 +4 2006-02-05 +60 2006-12-17 +------------------------------------------------------------------------- +--- Delete rows and partitions of tables with quarter(col1) +------------------------------------------------------------------------- +delete from t11 where col1='2006-12-17'; +delete from t22 where col1='2006-12-17'; +delete from t33 where col1='2006-12-17'; +delete from t44 where col1='2006-12-17'; +delete from t55 where col1='2006-12-17'; +delete from t66 where col1='2006-12-17'; +select * from t11 order by col1; +col1 +2006-07-30 +select * from t22 order by col1; +col1 +2006-07-30 +2006-09-25 +select * from t33 order by col1; +col1 +2006-07-30 +2006-09-25 +select * from t44 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t55 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +insert into t11 values ('2006-12-17'); +insert into t22 values ('2006-12-17'); +insert into t33 values ('2006-12-17'); +insert into t44 values (60,'2006-12-17'); +insert into t55 values (60,'2006-12-17'); +insert into t66 values (60,'2006-12-17'); +select * from t11 order by col1; +col1 +2006-07-30 +2006-12-17 +select * from t22 order by col1; +col1 +2006-07-30 +2006-09-25 +2006-12-17 +select * from t33 order by col1; +col1 +2006-07-30 +2006-09-25 +2006-12-17 +select * from t44 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +60 2006-12-17 +select * from t55 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +60 2006-12-17 +select * from t66 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +60 2006-12-17 +alter table t11 drop partition p0; +alter table t22 drop partition p0; +alter table t44 drop partition p0; +alter table t55 drop partition p0; +alter table t66 drop partition p0; +select * from t11 order by col1; +col1 +select * from t22 order by col1; +col1 +select * from t33 order by col1; +col1 +2006-07-30 +2006-09-25 +2006-12-17 +select * from t44 order by colint; +colint col1 +60 2006-12-17 +select * from t55 order by colint; +colint col1 +60 2006-12-17 +select * from t66 order by colint; +colint col1 +4 2006-02-05 +60 2006-12-17 +------------------------- +---- some alter table end +------------------------- +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +------------------------------------------------------------------------- +--- time_to_sec(col1)-(time_to_sec(col1)-20) in partition with coltype time +------------------------------------------------------------------------- +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +------------------------------------------------------------------------- +--- Create tables with time_to_sec(col1)-(time_to_sec(col1)-20) +------------------------------------------------------------------------- +create table t1 (col1 time) engine='TOKUDB' +partition by range(time_to_sec(col1)-(time_to_sec(col1)-20)) +(partition p0 values less than (15), +partition p1 values less than maxvalue); +create table t2 (col1 time) engine='TOKUDB' +partition by list(time_to_sec(col1)-(time_to_sec(col1)-20)) +(partition p0 values in (0,1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +create table t3 (col1 time) engine='TOKUDB' +partition by hash(time_to_sec(col1)-(time_to_sec(col1)-20)); +create table t4 (colint int, col1 time) engine='TOKUDB' +partition by range(colint) +subpartition by hash(time_to_sec(col1)-(time_to_sec(col1)-20)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than maxvalue); +create table t5 (colint int, col1 time) engine='TOKUDB' +partition by list(colint) +subpartition by hash(time_to_sec(col1)-(time_to_sec(col1)-20)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +create table t6 (colint int, col1 time) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (time_to_sec('18:30:14')-(time_to_sec('17:59:59'))), +partition p1 values less than maxvalue); +------------------------------------------------------------------------- +--- Access tables with time_to_sec(col1)-(time_to_sec(col1)-20) +------------------------------------------------------------------------- +insert into t1 values ('09:09:15'); +insert into t1 values ('14:30:45'); +insert into t2 values ('09:09:15'); +insert into t2 values ('14:30:45'); +insert into t2 values ('21:59:22'); +insert into t3 values ('09:09:15'); +insert into t3 values ('14:30:45'); +insert into t3 values ('21:59:22'); +load data infile 'MYSQLTEST_VARDIR/std_data/parts/part_supported_sql_funcs_int_time.inc' into table t4; +load data infile 'MYSQLTEST_VARDIR/std_data/parts/part_supported_sql_funcs_int_time.inc' into table t5; +load data infile 'MYSQLTEST_VARDIR/std_data/parts/part_supported_sql_funcs_int_time.inc' into table t6; +select time_to_sec(col1)-(time_to_sec(col1)-20) from t1 order by col1; +time_to_sec(col1)-(time_to_sec(col1)-20) +20 +20 +select * from t1 order by col1; +col1 +09:09:15 +14:30:45 +select * from t2 order by col1; +col1 +09:09:15 +14:30:45 +21:59:22 +select * from t3 order by col1; +col1 +09:09:15 +14:30:45 +21:59:22 +select * from t4 order by colint; +colint col1 +1 09:09:15 +2 04:30:01 +3 00:59:22 +4 05:30:34 +select * from t5 order by colint; +colint col1 +1 09:09:15 +2 04:30:01 +3 00:59:22 +4 05:30:34 +select * from t6 order by colint; +colint col1 +1 09:09:15 +2 04:30:01 +3 00:59:22 +4 05:30:34 +update t1 set col1='10:33:11' where col1='09:09:15'; +update t2 set col1='10:33:11' where col1='09:09:15'; +update t3 set col1='10:33:11' where col1='09:09:15'; +update t4 set col1='10:33:11' where col1='09:09:15'; +update t5 set col1='10:33:11' where col1='09:09:15'; +update t6 set col1='10:33:11' where col1='09:09:15'; +select * from t1 order by col1; +col1 +10:33:11 +14:30:45 +select * from t2 order by col1; +col1 +10:33:11 +14:30:45 +21:59:22 +select * from t3 order by col1; +col1 +10:33:11 +14:30:45 +21:59:22 +select * from t4 order by colint; +colint col1 +1 10:33:11 +2 04:30:01 +3 00:59:22 +4 05:30:34 +select * from t5 order by colint; +colint col1 +1 10:33:11 +2 04:30:01 +3 00:59:22 +4 05:30:34 +select * from t6 order by colint; +colint col1 +1 10:33:11 +2 04:30:01 +3 00:59:22 +4 05:30:34 +------------------------------------------------------------------------- +--- Alter tables with time_to_sec(col1)-(time_to_sec(col1)-20) +------------------------------------------------------------------------- +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 engine='TOKUDB' as select * from t1; +create table t22 engine='TOKUDB' as select * from t2; +create table t33 engine='TOKUDB' as select * from t3; +create table t44 engine='TOKUDB' as select * from t4; +create table t55 engine='TOKUDB' as select * from t5; +create table t66 engine='TOKUDB' as select * from t6; +alter table t11 +partition by range(time_to_sec(col1)-(time_to_sec(col1)-20)) +(partition p0 values less than (15), +partition p1 values less than maxvalue); +alter table t22 +partition by list(time_to_sec(col1)-(time_to_sec(col1)-20)) +(partition p0 values in (0,1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +alter table t33 +partition by hash(time_to_sec(col1)-(time_to_sec(col1)-20)); +alter table t44 +partition by range(colint) +subpartition by hash(time_to_sec(col1)-(time_to_sec(col1)-20)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than maxvalue); +alter table t55 +partition by list(colint) +subpartition by hash(time_to_sec(col1)-(time_to_sec(col1)-20)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +alter table t66 +partition by range(colint) +(partition p0 values less than (time_to_sec('18:30:14')-(time_to_sec('17:59:59'))), +partition p1 values less than maxvalue); +select * from t11 order by col1; +col1 +10:33:11 +14:30:45 +select * from t22 order by col1; +col1 +10:33:11 +14:30:45 +21:59:22 +select * from t33 order by col1; +col1 +10:33:11 +14:30:45 +21:59:22 +select * from t44 order by colint; +colint col1 +1 10:33:11 +2 04:30:01 +3 00:59:22 +4 05:30:34 +select * from t55 order by colint; +colint col1 +1 10:33:11 +2 04:30:01 +3 00:59:22 +4 05:30:34 +select * from t66 order by colint; +colint col1 +1 10:33:11 +2 04:30:01 +3 00:59:22 +4 05:30:34 +--------------------------- +---- some alter table begin +--------------------------- +alter table t11 +reorganize partition p0,p1 into +(partition s1 values less than maxvalue); +select * from t11 order by col1; +col1 +10:33:11 +14:30:45 +alter table t11 +reorganize partition s1 into +(partition p0 values less than (15), +partition p1 values less than maxvalue); +select * from t11 order by col1; +col1 +10:33:11 +14:30:45 +alter table t55 +partition by list(colint) +subpartition by hash(time_to_sec(col1)-(time_to_sec(col1)-20)) subpartitions 5 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +show create table t55; +Table Create Table +t55 CREATE TABLE `t55` ( + `colint` int(11) DEFAULT NULL, + `col1` time DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (colint) +SUBPARTITION BY HASH (time_to_sec(col1)-(time_to_sec(col1)-20)) +SUBPARTITIONS 5 +(PARTITION p0 VALUES IN (1,2,3,4,5,6,7,8,9,10) ENGINE = TokuDB, + PARTITION p1 VALUES IN (11,12,13,14,15,16,17,18,19,20) ENGINE = TokuDB, + PARTITION p2 VALUES IN (21,22,23,24,25,26,27,28,29,30) ENGINE = TokuDB, + PARTITION p3 VALUES IN (31,32,33,34,35,36,37,38,39,40) ENGINE = TokuDB, + PARTITION p4 VALUES IN (41,42,43,44,45,46,47,48,49,50) ENGINE = TokuDB, + PARTITION p5 VALUES IN (51,52,53,54,55,56,57,58,59,60) ENGINE = TokuDB) */ +select * from t55 order by colint; +colint col1 +1 10:33:11 +2 04:30:01 +3 00:59:22 +4 05:30:34 +alter table t66 +reorganize partition p0,p1 into +(partition s1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 10:33:11 +2 04:30:01 +3 00:59:22 +4 05:30:34 +alter table t66 +reorganize partition s1 into +(partition p0 values less than (time_to_sec('18:30:14')-(time_to_sec('17:59:59'))), +partition p1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 10:33:11 +2 04:30:01 +3 00:59:22 +4 05:30:34 +alter table t66 +reorganize partition p0,p1 into +(partition s1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 10:33:11 +2 04:30:01 +3 00:59:22 +4 05:30:34 +alter table t66 +reorganize partition s1 into +(partition p0 values less than (time_to_sec('18:30:14')-(time_to_sec('17:59:59'))), +partition p1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 10:33:11 +2 04:30:01 +3 00:59:22 +4 05:30:34 +------------------------------------------------------------------------- +--- Delete rows and partitions of tables with time_to_sec(col1)-(time_to_sec(col1)-20) +------------------------------------------------------------------------- +delete from t1 where col1='14:30:45'; +delete from t2 where col1='14:30:45'; +delete from t3 where col1='14:30:45'; +delete from t4 where col1='14:30:45'; +delete from t5 where col1='14:30:45'; +delete from t6 where col1='14:30:45'; +select * from t1 order by col1; +col1 +10:33:11 +select * from t2 order by col1; +col1 +10:33:11 +21:59:22 +select * from t3 order by col1; +col1 +10:33:11 +21:59:22 +select * from t4 order by colint; +colint col1 +1 10:33:11 +2 04:30:01 +3 00:59:22 +4 05:30:34 +select * from t5 order by colint; +colint col1 +1 10:33:11 +2 04:30:01 +3 00:59:22 +4 05:30:34 +insert into t1 values ('14:30:45'); +insert into t2 values ('14:30:45'); +insert into t3 values ('14:30:45'); +insert into t4 values (60,'14:30:45'); +insert into t5 values (60,'14:30:45'); +insert into t6 values (60,'14:30:45'); +select * from t1 order by col1; +col1 +10:33:11 +14:30:45 +select * from t2 order by col1; +col1 +10:33:11 +14:30:45 +21:59:22 +select * from t3 order by col1; +col1 +10:33:11 +14:30:45 +21:59:22 +select * from t4 order by colint; +colint col1 +1 10:33:11 +2 04:30:01 +3 00:59:22 +4 05:30:34 +60 14:30:45 +select * from t5 order by colint; +colint col1 +1 10:33:11 +2 04:30:01 +3 00:59:22 +4 05:30:34 +60 14:30:45 +select * from t6 order by colint; +colint col1 +1 10:33:11 +2 04:30:01 +3 00:59:22 +4 05:30:34 +60 14:30:45 +alter table t1 drop partition p0; +alter table t2 drop partition p0; +alter table t4 drop partition p0; +alter table t5 drop partition p0; +alter table t6 drop partition p0; +select * from t1 order by col1; +col1 +10:33:11 +14:30:45 +select * from t2 order by col1; +col1 +10:33:11 +14:30:45 +21:59:22 +select * from t3 order by col1; +col1 +10:33:11 +14:30:45 +21:59:22 +select * from t4 order by colint; +colint col1 +60 14:30:45 +select * from t5 order by colint; +colint col1 +60 14:30:45 +select * from t6 order by colint; +colint col1 +------------------------------------------------------------------------- +--- Delete rows and partitions of tables with time_to_sec(col1)-(time_to_sec(col1)-20) +------------------------------------------------------------------------- +delete from t11 where col1='14:30:45'; +delete from t22 where col1='14:30:45'; +delete from t33 where col1='14:30:45'; +delete from t44 where col1='14:30:45'; +delete from t55 where col1='14:30:45'; +delete from t66 where col1='14:30:45'; +select * from t11 order by col1; +col1 +10:33:11 +select * from t22 order by col1; +col1 +10:33:11 +21:59:22 +select * from t33 order by col1; +col1 +10:33:11 +21:59:22 +select * from t44 order by colint; +colint col1 +1 10:33:11 +2 04:30:01 +3 00:59:22 +4 05:30:34 +select * from t55 order by colint; +colint col1 +1 10:33:11 +2 04:30:01 +3 00:59:22 +4 05:30:34 +insert into t11 values ('14:30:45'); +insert into t22 values ('14:30:45'); +insert into t33 values ('14:30:45'); +insert into t44 values (60,'14:30:45'); +insert into t55 values (60,'14:30:45'); +insert into t66 values (60,'14:30:45'); +select * from t11 order by col1; +col1 +10:33:11 +14:30:45 +select * from t22 order by col1; +col1 +10:33:11 +14:30:45 +21:59:22 +select * from t33 order by col1; +col1 +10:33:11 +14:30:45 +21:59:22 +select * from t44 order by colint; +colint col1 +1 10:33:11 +2 04:30:01 +3 00:59:22 +4 05:30:34 +60 14:30:45 +select * from t55 order by colint; +colint col1 +1 10:33:11 +2 04:30:01 +3 00:59:22 +4 05:30:34 +60 14:30:45 +select * from t66 order by colint; +colint col1 +1 10:33:11 +2 04:30:01 +3 00:59:22 +4 05:30:34 +60 14:30:45 +alter table t11 drop partition p0; +alter table t22 drop partition p0; +alter table t44 drop partition p0; +alter table t55 drop partition p0; +alter table t66 drop partition p0; +select * from t11 order by col1; +col1 +10:33:11 +14:30:45 +select * from t22 order by col1; +col1 +10:33:11 +14:30:45 +21:59:22 +select * from t33 order by col1; +col1 +10:33:11 +14:30:45 +21:59:22 +select * from t44 order by colint; +colint col1 +60 14:30:45 +select * from t55 order by colint; +colint col1 +60 14:30:45 +select * from t66 order by colint; +colint col1 +------------------------- +---- some alter table end +------------------------- +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +------------------------------------------------------------------------- +--- weekday(col1) in partition with coltype date +------------------------------------------------------------------------- +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +------------------------------------------------------------------------- +--- Create tables with weekday(col1) +------------------------------------------------------------------------- +create table t1 (col1 date) engine='TOKUDB' +partition by range(weekday(col1)) +(partition p0 values less than (15), +partition p1 values less than maxvalue); +create table t2 (col1 date) engine='TOKUDB' +partition by list(weekday(col1)) +(partition p0 values in (0,1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +create table t3 (col1 date) engine='TOKUDB' +partition by hash(weekday(col1)); +create table t4 (colint int, col1 date) engine='TOKUDB' +partition by range(colint) +subpartition by hash(weekday(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than maxvalue); +create table t5 (colint int, col1 date) engine='TOKUDB' +partition by list(colint) +subpartition by hash(weekday(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +create table t6 (colint int, col1 date) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (weekday('2006-10-14')), +partition p1 values less than maxvalue); +------------------------------------------------------------------------- +--- Access tables with weekday(col1) +------------------------------------------------------------------------- +insert into t1 values ('2006-12-03'); +insert into t1 values ('2006-11-17'); +insert into t2 values ('2006-12-03'); +insert into t2 values ('2006-11-17'); +insert into t2 values ('2006-05-25'); +insert into t3 values ('2006-12-03'); +insert into t3 values ('2006-11-17'); +insert into t3 values ('2006-05-25'); +load data infile 'MYSQLTEST_VARDIR/std_data/parts/part_supported_sql_funcs_int_date.inc' into table t4; +load data infile 'MYSQLTEST_VARDIR/std_data/parts/part_supported_sql_funcs_int_date.inc' into table t5; +load data infile 'MYSQLTEST_VARDIR/std_data/parts/part_supported_sql_funcs_int_date.inc' into table t6; +select weekday(col1) from t1 order by col1; +weekday(col1) +4 +6 +select * from t1 order by col1; +col1 +2006-11-17 +2006-12-03 +select * from t2 order by col1; +col1 +2006-05-25 +2006-11-17 +2006-12-03 +select * from t3 order by col1; +col1 +2006-05-25 +2006-11-17 +2006-12-03 +select * from t4 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t5 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t6 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +update t1 set col1='2006-02-06' where col1='2006-12-03'; +update t2 set col1='2006-02-06' where col1='2006-12-03'; +update t3 set col1='2006-02-06' where col1='2006-12-03'; +update t4 set col1='2006-02-06' where col1='2006-12-03'; +update t5 set col1='2006-02-06' where col1='2006-12-03'; +update t6 set col1='2006-02-06' where col1='2006-12-03'; +select * from t1 order by col1; +col1 +2006-02-06 +2006-11-17 +select * from t2 order by col1; +col1 +2006-02-06 +2006-05-25 +2006-11-17 +select * from t3 order by col1; +col1 +2006-02-06 +2006-05-25 +2006-11-17 +select * from t4 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t5 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t6 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +------------------------------------------------------------------------- +--- Alter tables with weekday(col1) +------------------------------------------------------------------------- +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 engine='TOKUDB' as select * from t1; +create table t22 engine='TOKUDB' as select * from t2; +create table t33 engine='TOKUDB' as select * from t3; +create table t44 engine='TOKUDB' as select * from t4; +create table t55 engine='TOKUDB' as select * from t5; +create table t66 engine='TOKUDB' as select * from t6; +alter table t11 +partition by range(weekday(col1)) +(partition p0 values less than (15), +partition p1 values less than maxvalue); +alter table t22 +partition by list(weekday(col1)) +(partition p0 values in (0,1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +alter table t33 +partition by hash(weekday(col1)); +alter table t44 +partition by range(colint) +subpartition by hash(weekday(col1)) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than maxvalue); +alter table t55 +partition by list(colint) +subpartition by hash(weekday(col1)) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +alter table t66 +partition by range(colint) +(partition p0 values less than (weekday('2006-10-14')), +partition p1 values less than maxvalue); +select * from t11 order by col1; +col1 +2006-02-06 +2006-11-17 +select * from t22 order by col1; +col1 +2006-02-06 +2006-05-25 +2006-11-17 +select * from t33 order by col1; +col1 +2006-02-06 +2006-05-25 +2006-11-17 +select * from t44 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t55 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t66 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +--------------------------- +---- some alter table begin +--------------------------- +alter table t11 +reorganize partition p0,p1 into +(partition s1 values less than maxvalue); +select * from t11 order by col1; +col1 +2006-02-06 +2006-11-17 +alter table t11 +reorganize partition s1 into +(partition p0 values less than (15), +partition p1 values less than maxvalue); +select * from t11 order by col1; +col1 +2006-02-06 +2006-11-17 +alter table t55 +partition by list(colint) +subpartition by hash(weekday(col1)) subpartitions 5 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +show create table t55; +Table Create Table +t55 CREATE TABLE `t55` ( + `colint` int(11) DEFAULT NULL, + `col1` date DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (colint) +SUBPARTITION BY HASH (weekday(col1)) +SUBPARTITIONS 5 +(PARTITION p0 VALUES IN (1,2,3,4,5,6,7,8,9,10) ENGINE = TokuDB, + PARTITION p1 VALUES IN (11,12,13,14,15,16,17,18,19,20) ENGINE = TokuDB, + PARTITION p2 VALUES IN (21,22,23,24,25,26,27,28,29,30) ENGINE = TokuDB, + PARTITION p3 VALUES IN (31,32,33,34,35,36,37,38,39,40) ENGINE = TokuDB, + PARTITION p4 VALUES IN (41,42,43,44,45,46,47,48,49,50) ENGINE = TokuDB, + PARTITION p5 VALUES IN (51,52,53,54,55,56,57,58,59,60) ENGINE = TokuDB) */ +select * from t55 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +alter table t66 +reorganize partition p0,p1 into +(partition s1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +alter table t66 +reorganize partition s1 into +(partition p0 values less than (weekday('2006-10-14')), +partition p1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +alter table t66 +reorganize partition p0,p1 into +(partition s1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +alter table t66 +reorganize partition s1 into +(partition p0 values less than (weekday('2006-10-14')), +partition p1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +------------------------------------------------------------------------- +--- Delete rows and partitions of tables with weekday(col1) +------------------------------------------------------------------------- +delete from t1 where col1='2006-11-17'; +delete from t2 where col1='2006-11-17'; +delete from t3 where col1='2006-11-17'; +delete from t4 where col1='2006-11-17'; +delete from t5 where col1='2006-11-17'; +delete from t6 where col1='2006-11-17'; +select * from t1 order by col1; +col1 +2006-02-06 +select * from t2 order by col1; +col1 +2006-02-06 +2006-05-25 +select * from t3 order by col1; +col1 +2006-02-06 +2006-05-25 +select * from t4 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t5 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +insert into t1 values ('2006-11-17'); +insert into t2 values ('2006-11-17'); +insert into t3 values ('2006-11-17'); +insert into t4 values (60,'2006-11-17'); +insert into t5 values (60,'2006-11-17'); +insert into t6 values (60,'2006-11-17'); +select * from t1 order by col1; +col1 +2006-02-06 +2006-11-17 +select * from t2 order by col1; +col1 +2006-02-06 +2006-05-25 +2006-11-17 +select * from t3 order by col1; +col1 +2006-02-06 +2006-05-25 +2006-11-17 +select * from t4 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +60 2006-11-17 +select * from t5 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +60 2006-11-17 +select * from t6 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +60 2006-11-17 +alter table t1 drop partition p0; +alter table t2 drop partition p0; +alter table t4 drop partition p0; +alter table t5 drop partition p0; +alter table t6 drop partition p0; +select * from t1 order by col1; +col1 +select * from t2 order by col1; +col1 +select * from t3 order by col1; +col1 +2006-02-06 +2006-05-25 +2006-11-17 +select * from t4 order by colint; +colint col1 +60 2006-11-17 +select * from t5 order by colint; +colint col1 +60 2006-11-17 +select * from t6 order by colint; +colint col1 +60 2006-11-17 +------------------------------------------------------------------------- +--- Delete rows and partitions of tables with weekday(col1) +------------------------------------------------------------------------- +delete from t11 where col1='2006-11-17'; +delete from t22 where col1='2006-11-17'; +delete from t33 where col1='2006-11-17'; +delete from t44 where col1='2006-11-17'; +delete from t55 where col1='2006-11-17'; +delete from t66 where col1='2006-11-17'; +select * from t11 order by col1; +col1 +2006-02-06 +select * from t22 order by col1; +col1 +2006-02-06 +2006-05-25 +select * from t33 order by col1; +col1 +2006-02-06 +2006-05-25 +select * from t44 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t55 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +insert into t11 values ('2006-11-17'); +insert into t22 values ('2006-11-17'); +insert into t33 values ('2006-11-17'); +insert into t44 values (60,'2006-11-17'); +insert into t55 values (60,'2006-11-17'); +insert into t66 values (60,'2006-11-17'); +select * from t11 order by col1; +col1 +2006-02-06 +2006-11-17 +select * from t22 order by col1; +col1 +2006-02-06 +2006-05-25 +2006-11-17 +select * from t33 order by col1; +col1 +2006-02-06 +2006-05-25 +2006-11-17 +select * from t44 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +60 2006-11-17 +select * from t55 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +60 2006-11-17 +select * from t66 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +60 2006-11-17 +alter table t11 drop partition p0; +alter table t22 drop partition p0; +alter table t44 drop partition p0; +alter table t55 drop partition p0; +alter table t66 drop partition p0; +select * from t11 order by col1; +col1 +select * from t22 order by col1; +col1 +select * from t33 order by col1; +col1 +2006-02-06 +2006-05-25 +2006-11-17 +select * from t44 order by colint; +colint col1 +60 2006-11-17 +select * from t55 order by colint; +colint col1 +60 2006-11-17 +select * from t66 order by colint; +colint col1 +60 2006-11-17 +------------------------- +---- some alter table end +------------------------- +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +------------------------------------------------------------------------- +--- year(col1)-1990 in partition with coltype date +------------------------------------------------------------------------- +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +------------------------------------------------------------------------- +--- Create tables with year(col1)-1990 +------------------------------------------------------------------------- +create table t1 (col1 date) engine='TOKUDB' +partition by range(year(col1)-1990) +(partition p0 values less than (15), +partition p1 values less than maxvalue); +create table t2 (col1 date) engine='TOKUDB' +partition by list(year(col1)-1990) +(partition p0 values in (0,1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +create table t3 (col1 date) engine='TOKUDB' +partition by hash(year(col1)-1990); +create table t4 (colint int, col1 date) engine='TOKUDB' +partition by range(colint) +subpartition by hash(year(col1)-1990) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than maxvalue); +create table t5 (colint int, col1 date) engine='TOKUDB' +partition by list(colint) +subpartition by hash(year(col1)-1990) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +create table t6 (colint int, col1 date) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (year('2005-10-14')-1990), +partition p1 values less than maxvalue); +------------------------------------------------------------------------- +--- Access tables with year(col1)-1990 +------------------------------------------------------------------------- +insert into t1 values ('1996-01-03'); +insert into t1 values ('2000-02-17'); +insert into t2 values ('1996-01-03'); +insert into t2 values ('2000-02-17'); +insert into t2 values ('2004-05-25'); +insert into t3 values ('1996-01-03'); +insert into t3 values ('2000-02-17'); +insert into t3 values ('2004-05-25'); +load data infile 'MYSQLTEST_VARDIR/std_data/parts/part_supported_sql_funcs_int_date.inc' into table t4; +load data infile 'MYSQLTEST_VARDIR/std_data/parts/part_supported_sql_funcs_int_date.inc' into table t5; +load data infile 'MYSQLTEST_VARDIR/std_data/parts/part_supported_sql_funcs_int_date.inc' into table t6; +select year(col1)-1990 from t1 order by col1; +year(col1)-1990 +6 +10 +select * from t1 order by col1; +col1 +1996-01-03 +2000-02-17 +select * from t2 order by col1; +col1 +1996-01-03 +2000-02-17 +2004-05-25 +select * from t3 order by col1; +col1 +1996-01-03 +2000-02-17 +2004-05-25 +select * from t4 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t5 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t6 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +update t1 set col1='2002-02-15' where col1='1996-01-03'; +update t2 set col1='2002-02-15' where col1='1996-01-03'; +update t3 set col1='2002-02-15' where col1='1996-01-03'; +update t4 set col1='2002-02-15' where col1='1996-01-03'; +update t5 set col1='2002-02-15' where col1='1996-01-03'; +update t6 set col1='2002-02-15' where col1='1996-01-03'; +select * from t1 order by col1; +col1 +2000-02-17 +2002-02-15 +select * from t2 order by col1; +col1 +2000-02-17 +2002-02-15 +2004-05-25 +select * from t3 order by col1; +col1 +2000-02-17 +2002-02-15 +2004-05-25 +select * from t4 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t5 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t6 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +------------------------------------------------------------------------- +--- Alter tables with year(col1)-1990 +------------------------------------------------------------------------- +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 engine='TOKUDB' as select * from t1; +create table t22 engine='TOKUDB' as select * from t2; +create table t33 engine='TOKUDB' as select * from t3; +create table t44 engine='TOKUDB' as select * from t4; +create table t55 engine='TOKUDB' as select * from t5; +create table t66 engine='TOKUDB' as select * from t6; +alter table t11 +partition by range(year(col1)-1990) +(partition p0 values less than (15), +partition p1 values less than maxvalue); +alter table t22 +partition by list(year(col1)-1990) +(partition p0 values in (0,1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +alter table t33 +partition by hash(year(col1)-1990); +alter table t44 +partition by range(colint) +subpartition by hash(year(col1)-1990) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than maxvalue); +alter table t55 +partition by list(colint) +subpartition by hash(year(col1)-1990) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +alter table t66 +partition by range(colint) +(partition p0 values less than (year('2005-10-14')-1990), +partition p1 values less than maxvalue); +select * from t11 order by col1; +col1 +2000-02-17 +2002-02-15 +select * from t22 order by col1; +col1 +2000-02-17 +2002-02-15 +2004-05-25 +select * from t33 order by col1; +col1 +2000-02-17 +2002-02-15 +2004-05-25 +select * from t44 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t55 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t66 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +--------------------------- +---- some alter table begin +--------------------------- +alter table t11 +reorganize partition p0,p1 into +(partition s1 values less than maxvalue); +select * from t11 order by col1; +col1 +2000-02-17 +2002-02-15 +alter table t11 +reorganize partition s1 into +(partition p0 values less than (15), +partition p1 values less than maxvalue); +select * from t11 order by col1; +col1 +2000-02-17 +2002-02-15 +alter table t55 +partition by list(colint) +subpartition by hash(year(col1)-1990) subpartitions 5 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +show create table t55; +Table Create Table +t55 CREATE TABLE `t55` ( + `colint` int(11) DEFAULT NULL, + `col1` date DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (colint) +SUBPARTITION BY HASH (year(col1)-1990) +SUBPARTITIONS 5 +(PARTITION p0 VALUES IN (1,2,3,4,5,6,7,8,9,10) ENGINE = TokuDB, + PARTITION p1 VALUES IN (11,12,13,14,15,16,17,18,19,20) ENGINE = TokuDB, + PARTITION p2 VALUES IN (21,22,23,24,25,26,27,28,29,30) ENGINE = TokuDB, + PARTITION p3 VALUES IN (31,32,33,34,35,36,37,38,39,40) ENGINE = TokuDB, + PARTITION p4 VALUES IN (41,42,43,44,45,46,47,48,49,50) ENGINE = TokuDB, + PARTITION p5 VALUES IN (51,52,53,54,55,56,57,58,59,60) ENGINE = TokuDB) */ +select * from t55 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +alter table t66 +reorganize partition p0,p1 into +(partition s1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +alter table t66 +reorganize partition s1 into +(partition p0 values less than (year('2005-10-14')-1990), +partition p1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +alter table t66 +reorganize partition p0,p1 into +(partition s1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +alter table t66 +reorganize partition s1 into +(partition p0 values less than (year('2005-10-14')-1990), +partition p1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +------------------------------------------------------------------------- +--- Delete rows and partitions of tables with year(col1)-1990 +------------------------------------------------------------------------- +delete from t1 where col1='2000-02-17'; +delete from t2 where col1='2000-02-17'; +delete from t3 where col1='2000-02-17'; +delete from t4 where col1='2000-02-17'; +delete from t5 where col1='2000-02-17'; +delete from t6 where col1='2000-02-17'; +select * from t1 order by col1; +col1 +2002-02-15 +select * from t2 order by col1; +col1 +2002-02-15 +2004-05-25 +select * from t3 order by col1; +col1 +2002-02-15 +2004-05-25 +select * from t4 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t5 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +insert into t1 values ('2000-02-17'); +insert into t2 values ('2000-02-17'); +insert into t3 values ('2000-02-17'); +insert into t4 values (60,'2000-02-17'); +insert into t5 values (60,'2000-02-17'); +insert into t6 values (60,'2000-02-17'); +select * from t1 order by col1; +col1 +2000-02-17 +2002-02-15 +select * from t2 order by col1; +col1 +2000-02-17 +2002-02-15 +2004-05-25 +select * from t3 order by col1; +col1 +2000-02-17 +2002-02-15 +2004-05-25 +select * from t4 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +60 2000-02-17 +select * from t5 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +60 2000-02-17 +select * from t6 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +60 2000-02-17 +alter table t1 drop partition p0; +alter table t2 drop partition p0; +alter table t4 drop partition p0; +alter table t5 drop partition p0; +alter table t6 drop partition p0; +select * from t1 order by col1; +col1 +select * from t2 order by col1; +col1 +2002-02-15 +2004-05-25 +select * from t3 order by col1; +col1 +2000-02-17 +2002-02-15 +2004-05-25 +select * from t4 order by colint; +colint col1 +60 2000-02-17 +select * from t5 order by colint; +colint col1 +60 2000-02-17 +select * from t6 order by colint; +colint col1 +60 2000-02-17 +------------------------------------------------------------------------- +--- Delete rows and partitions of tables with year(col1)-1990 +------------------------------------------------------------------------- +delete from t11 where col1='2000-02-17'; +delete from t22 where col1='2000-02-17'; +delete from t33 where col1='2000-02-17'; +delete from t44 where col1='2000-02-17'; +delete from t55 where col1='2000-02-17'; +delete from t66 where col1='2000-02-17'; +select * from t11 order by col1; +col1 +2002-02-15 +select * from t22 order by col1; +col1 +2002-02-15 +2004-05-25 +select * from t33 order by col1; +col1 +2002-02-15 +2004-05-25 +select * from t44 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t55 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +insert into t11 values ('2000-02-17'); +insert into t22 values ('2000-02-17'); +insert into t33 values ('2000-02-17'); +insert into t44 values (60,'2000-02-17'); +insert into t55 values (60,'2000-02-17'); +insert into t66 values (60,'2000-02-17'); +select * from t11 order by col1; +col1 +2000-02-17 +2002-02-15 +select * from t22 order by col1; +col1 +2000-02-17 +2002-02-15 +2004-05-25 +select * from t33 order by col1; +col1 +2000-02-17 +2002-02-15 +2004-05-25 +select * from t44 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +60 2000-02-17 +select * from t55 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +60 2000-02-17 +select * from t66 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +60 2000-02-17 +alter table t11 drop partition p0; +alter table t22 drop partition p0; +alter table t44 drop partition p0; +alter table t55 drop partition p0; +alter table t66 drop partition p0; +select * from t11 order by col1; +col1 +select * from t22 order by col1; +col1 +2002-02-15 +2004-05-25 +select * from t33 order by col1; +col1 +2000-02-17 +2002-02-15 +2004-05-25 +select * from t44 order by colint; +colint col1 +60 2000-02-17 +select * from t55 order by colint; +colint col1 +60 2000-02-17 +select * from t66 order by colint; +colint col1 +60 2000-02-17 +------------------------- +---- some alter table end +------------------------- +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +------------------------------------------------------------------------- +--- yearweek(col1)-200600 in partition with coltype date +------------------------------------------------------------------------- +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +------------------------------------------------------------------------- +--- Create tables with yearweek(col1)-200600 +------------------------------------------------------------------------- +create table t1 (col1 date) engine='TOKUDB' +partition by range(yearweek(col1)-200600) +(partition p0 values less than (15), +partition p1 values less than maxvalue); +create table t2 (col1 date) engine='TOKUDB' +partition by list(yearweek(col1)-200600) +(partition p0 values in (0,1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +create table t3 (col1 date) engine='TOKUDB' +partition by hash(yearweek(col1)-200600); +create table t4 (colint int, col1 date) engine='TOKUDB' +partition by range(colint) +subpartition by hash(yearweek(col1)-200600) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than maxvalue); +create table t5 (colint int, col1 date) engine='TOKUDB' +partition by list(colint) +subpartition by hash(yearweek(col1)-200600) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +create table t6 (colint int, col1 date) engine='TOKUDB' +partition by range(colint) +(partition p0 values less than (yearweek('2006-10-14')-200600), +partition p1 values less than maxvalue); +------------------------------------------------------------------------- +--- Access tables with yearweek(col1)-200600 +------------------------------------------------------------------------- +insert into t1 values ('2006-01-03'); +insert into t1 values ('2006-08-17'); +insert into t2 values ('2006-01-03'); +insert into t2 values ('2006-08-17'); +insert into t2 values ('2006-03-25'); +insert into t3 values ('2006-01-03'); +insert into t3 values ('2006-08-17'); +insert into t3 values ('2006-03-25'); +load data infile 'MYSQLTEST_VARDIR/std_data/parts/part_supported_sql_funcs_int_date.inc' into table t4; +load data infile 'MYSQLTEST_VARDIR/std_data/parts/part_supported_sql_funcs_int_date.inc' into table t5; +load data infile 'MYSQLTEST_VARDIR/std_data/parts/part_supported_sql_funcs_int_date.inc' into table t6; +select yearweek(col1)-200600 from t1 order by col1; +yearweek(col1)-200600 +1 +33 +select * from t1 order by col1; +col1 +2006-01-03 +2006-08-17 +select * from t2 order by col1; +col1 +2006-01-03 +2006-03-25 +2006-08-17 +select * from t3 order by col1; +col1 +2006-01-03 +2006-03-25 +2006-08-17 +select * from t4 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t5 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t6 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +update t1 set col1='2006-11-15' where col1='2006-01-03'; +update t2 set col1='2006-11-15' where col1='2006-01-03'; +update t3 set col1='2006-11-15' where col1='2006-01-03'; +update t4 set col1='2006-11-15' where col1='2006-01-03'; +update t5 set col1='2006-11-15' where col1='2006-01-03'; +update t6 set col1='2006-11-15' where col1='2006-01-03'; +select * from t1 order by col1; +col1 +2006-08-17 +2006-11-15 +select * from t2 order by col1; +col1 +2006-03-25 +2006-08-17 +2006-11-15 +select * from t3 order by col1; +col1 +2006-03-25 +2006-08-17 +2006-11-15 +select * from t4 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t5 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t6 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +------------------------------------------------------------------------- +--- Alter tables with yearweek(col1)-200600 +------------------------------------------------------------------------- +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; +create table t11 engine='TOKUDB' as select * from t1; +create table t22 engine='TOKUDB' as select * from t2; +create table t33 engine='TOKUDB' as select * from t3; +create table t44 engine='TOKUDB' as select * from t4; +create table t55 engine='TOKUDB' as select * from t5; +create table t66 engine='TOKUDB' as select * from t6; +alter table t11 +partition by range(yearweek(col1)-200600) +(partition p0 values less than (15), +partition p1 values less than maxvalue); +alter table t22 +partition by list(yearweek(col1)-200600) +(partition p0 values in (0,1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +alter table t33 +partition by hash(yearweek(col1)-200600); +alter table t44 +partition by range(colint) +subpartition by hash(yearweek(col1)-200600) subpartitions 2 +(partition p0 values less than (15), +partition p1 values less than maxvalue); +alter table t55 +partition by list(colint) +subpartition by hash(yearweek(col1)-200600) subpartitions 2 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +alter table t66 +partition by range(colint) +(partition p0 values less than (yearweek('2006-10-14')-200600), +partition p1 values less than maxvalue); +select * from t11 order by col1; +col1 +2006-08-17 +2006-11-15 +select * from t22 order by col1; +col1 +2006-03-25 +2006-08-17 +2006-11-15 +select * from t33 order by col1; +col1 +2006-03-25 +2006-08-17 +2006-11-15 +select * from t44 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t55 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t66 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +--------------------------- +---- some alter table begin +--------------------------- +alter table t11 +reorganize partition p0,p1 into +(partition s1 values less than maxvalue); +select * from t11 order by col1; +col1 +2006-08-17 +2006-11-15 +alter table t11 +reorganize partition s1 into +(partition p0 values less than (15), +partition p1 values less than maxvalue); +select * from t11 order by col1; +col1 +2006-08-17 +2006-11-15 +alter table t55 +partition by list(colint) +subpartition by hash(yearweek(col1)-200600) subpartitions 5 +(partition p0 values in (1,2,3,4,5,6,7,8,9,10), +partition p1 values in (11,12,13,14,15,16,17,18,19,20), +partition p2 values in (21,22,23,24,25,26,27,28,29,30), +partition p3 values in (31,32,33,34,35,36,37,38,39,40), +partition p4 values in (41,42,43,44,45,46,47,48,49,50), +partition p5 values in (51,52,53,54,55,56,57,58,59,60) +); +show create table t55; +Table Create Table +t55 CREATE TABLE `t55` ( + `colint` int(11) DEFAULT NULL, + `col1` date DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (colint) +SUBPARTITION BY HASH (yearweek(col1)-200600) +SUBPARTITIONS 5 +(PARTITION p0 VALUES IN (1,2,3,4,5,6,7,8,9,10) ENGINE = TokuDB, + PARTITION p1 VALUES IN (11,12,13,14,15,16,17,18,19,20) ENGINE = TokuDB, + PARTITION p2 VALUES IN (21,22,23,24,25,26,27,28,29,30) ENGINE = TokuDB, + PARTITION p3 VALUES IN (31,32,33,34,35,36,37,38,39,40) ENGINE = TokuDB, + PARTITION p4 VALUES IN (41,42,43,44,45,46,47,48,49,50) ENGINE = TokuDB, + PARTITION p5 VALUES IN (51,52,53,54,55,56,57,58,59,60) ENGINE = TokuDB) */ +select * from t55 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +alter table t66 +reorganize partition p0,p1 into +(partition s1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +alter table t66 +reorganize partition s1 into +(partition p0 values less than (yearweek('2006-10-14')-200600), +partition p1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +alter table t66 +reorganize partition p0,p1 into +(partition s1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +alter table t66 +reorganize partition s1 into +(partition p0 values less than (yearweek('2006-10-14')-200600), +partition p1 values less than maxvalue); +select * from t66 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +------------------------------------------------------------------------- +--- Delete rows and partitions of tables with yearweek(col1)-200600 +------------------------------------------------------------------------- +delete from t1 where col1='2006-08-17'; +delete from t2 where col1='2006-08-17'; +delete from t3 where col1='2006-08-17'; +delete from t4 where col1='2006-08-17'; +delete from t5 where col1='2006-08-17'; +delete from t6 where col1='2006-08-17'; +select * from t1 order by col1; +col1 +2006-11-15 +select * from t2 order by col1; +col1 +2006-03-25 +2006-11-15 +select * from t3 order by col1; +col1 +2006-03-25 +2006-11-15 +select * from t4 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t5 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +insert into t1 values ('2006-08-17'); +insert into t2 values ('2006-08-17'); +insert into t3 values ('2006-08-17'); +insert into t4 values (60,'2006-08-17'); +insert into t5 values (60,'2006-08-17'); +insert into t6 values (60,'2006-08-17'); +select * from t1 order by col1; +col1 +2006-08-17 +2006-11-15 +select * from t2 order by col1; +col1 +2006-03-25 +2006-08-17 +2006-11-15 +select * from t3 order by col1; +col1 +2006-03-25 +2006-08-17 +2006-11-15 +select * from t4 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +60 2006-08-17 +select * from t5 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +60 2006-08-17 +select * from t6 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +60 2006-08-17 +alter table t1 drop partition p0; +alter table t2 drop partition p0; +alter table t4 drop partition p0; +alter table t5 drop partition p0; +alter table t6 drop partition p0; +select * from t1 order by col1; +col1 +2006-08-17 +2006-11-15 +select * from t2 order by col1; +col1 +2006-03-25 +2006-08-17 +2006-11-15 +select * from t3 order by col1; +col1 +2006-03-25 +2006-08-17 +2006-11-15 +select * from t4 order by colint; +colint col1 +60 2006-08-17 +select * from t5 order by colint; +colint col1 +60 2006-08-17 +select * from t6 order by colint; +colint col1 +60 2006-08-17 +------------------------------------------------------------------------- +--- Delete rows and partitions of tables with yearweek(col1)-200600 +------------------------------------------------------------------------- +delete from t11 where col1='2006-08-17'; +delete from t22 where col1='2006-08-17'; +delete from t33 where col1='2006-08-17'; +delete from t44 where col1='2006-08-17'; +delete from t55 where col1='2006-08-17'; +delete from t66 where col1='2006-08-17'; +select * from t11 order by col1; +col1 +2006-11-15 +select * from t22 order by col1; +col1 +2006-03-25 +2006-11-15 +select * from t33 order by col1; +col1 +2006-03-25 +2006-11-15 +select * from t44 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +select * from t55 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +insert into t11 values ('2006-08-17'); +insert into t22 values ('2006-08-17'); +insert into t33 values ('2006-08-17'); +insert into t44 values (60,'2006-08-17'); +insert into t55 values (60,'2006-08-17'); +insert into t66 values (60,'2006-08-17'); +select * from t11 order by col1; +col1 +2006-08-17 +2006-11-15 +select * from t22 order by col1; +col1 +2006-03-25 +2006-08-17 +2006-11-15 +select * from t33 order by col1; +col1 +2006-03-25 +2006-08-17 +2006-11-15 +select * from t44 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +60 2006-08-17 +select * from t55 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +60 2006-08-17 +select * from t66 order by colint; +colint col1 +1 2006-02-03 +2 2006-01-17 +3 2006-01-25 +4 2006-02-05 +60 2006-08-17 +alter table t11 drop partition p0; +alter table t22 drop partition p0; +alter table t44 drop partition p0; +alter table t55 drop partition p0; +alter table t66 drop partition p0; +select * from t11 order by col1; +col1 +2006-08-17 +2006-11-15 +select * from t22 order by col1; +col1 +2006-03-25 +2006-08-17 +2006-11-15 +select * from t33 order by col1; +col1 +2006-03-25 +2006-08-17 +2006-11-15 +select * from t44 order by colint; +colint col1 +60 2006-08-17 +select * from t55 order by colint; +colint col1 +60 2006-08-17 +select * from t66 order by colint; +colint col1 +60 2006-08-17 +------------------------- +---- some alter table end +------------------------- +drop table if exists t1 ; +drop table if exists t2 ; +drop table if exists t3 ; +drop table if exists t4 ; +drop table if exists t5 ; +drop table if exists t6 ; +drop table if exists t11 ; +drop table if exists t22 ; +drop table if exists t33 ; +drop table if exists t44 ; +drop table if exists t55 ; +drop table if exists t66 ; diff --git a/mysql-test/suite/tokudb.parts/r-native/partition_alter1_1_2_tokudb.result b/mysql-test/suite/tokudb.parts/r-native/partition_alter1_1_2_tokudb.result new file mode 100644 index 000000000000..81f38a8b915c --- /dev/null +++ b/mysql-test/suite/tokudb.parts/r-native/partition_alter1_1_2_tokudb.result @@ -0,0 +1,28659 @@ +SET @max_row = 20; +SET @@session.default_storage_engine = 'TokuDB'; + +#------------------------------------------------------------------------ +# 0. Setting of auxiliary variables + Creation of an auxiliary tables +# needed in many testcases +#------------------------------------------------------------------------ +SELECT @max_row DIV 2 INTO @max_row_div2; +SELECT @max_row DIV 3 INTO @max_row_div3; +SELECT @max_row DIV 4 INTO @max_row_div4; +SET @max_int_4 = 2147483647; +DROP TABLE IF EXISTS t0_template; +CREATE TABLE t0_template ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) , +PRIMARY KEY(f_int1)) +ENGINE = MEMORY; +# Logging of INSERTs into t0_template suppressed +DROP TABLE IF EXISTS t0_definition; +CREATE TABLE t0_definition ( +state CHAR(3), +create_command VARBINARY(5000), +file_list VARBINARY(10000), +PRIMARY KEY (state) +) ENGINE = MEMORY; +DROP TABLE IF EXISTS t0_aux; +CREATE TABLE t0_aux ( f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) ) +ENGINE = MEMORY; +SET AUTOCOMMIT= 1; +SET @@session.sql_mode= ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +# End of basic preparations needed for all tests +#----------------------------------------------- + +#======================================================================== +# 1. ALTER TABLE ADD PRIMARY KEY and/or UNIQUE INDEX +#======================================================================== +#------------------------------------------------------------------------ +# 1.2 ADD PRIMARY KEY or UNIQUE INDEX to table with two columns +# (f_int1 and f_int2) within the partitioning function +#------------------------------------------------------------------------ +# 1.2.1 PRIMARY KEY consisting of two columns +DROP TABLE IF EXISTS t1; +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 + 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1 + f_int2) +PARTITIONS 2 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1,f_int2) +PARTITIONS 5 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(MOD(f_int1 + f_int2,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 + f_int2) DIV 2) +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +PARTITION partc VALUES LESS THAN (10), +PARTITION partd VALUES LESS THAN (10 + 5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION parte VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION partf VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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_int2) SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY HASH (f_int2) +SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 KEY(f_int2) +(PARTITION part1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int2) +(PARTITION part1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1) +(PARTITION part1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) +SUBPARTITION BY HASH (f_int2 + 1) +(PARTITION part1 VALUES IN (0) + (SUBPARTITION sp11 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int2) SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0), +PARTITION part2 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int2) +SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +DROP TABLE IF EXISTS t1; +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 + 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1 + f_int2) +PARTITIONS 2 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1,f_int2) +PARTITIONS 5 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(MOD(f_int1 + f_int2,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 + f_int2) DIV 2) +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +PARTITION partc VALUES LESS THAN (10), +PARTITION partd VALUES LESS THAN (10 + 5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION parte VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION partf VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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_int2) SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY HASH (f_int2) +SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 KEY(f_int2) +(PARTITION part1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int2) +(PARTITION part1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1) +(PARTITION part1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) +SUBPARTITION BY HASH (f_int2 + 1) +(PARTITION part1 VALUES IN (0) + (SUBPARTITION sp11 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int2) SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0), +PARTITION part2 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int2) +SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +# 1.2.2 UNIQUE INDEX consisting of two columns +DROP TABLE IF EXISTS t1; +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 + 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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, + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1 + f_int2) +PARTITIONS 2 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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, + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1,f_int2) +PARTITIONS 5 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(MOD(f_int1 + f_int2,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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, + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 + f_int2) DIV 2) +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +PARTITION partc VALUES LESS THAN (10), +PARTITION partd VALUES LESS THAN (10 + 5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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, + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION parte VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION partf VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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_int2) SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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, + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY HASH (f_int2) +SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 KEY(f_int2) +(PARTITION part1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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, + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int2) +(PARTITION part1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1) +(PARTITION part1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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, + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) +SUBPARTITION BY HASH (f_int2 + 1) +(PARTITION part1 VALUES IN (0) + (SUBPARTITION sp11 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int2) SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0), +PARTITION part2 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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, + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int2) +SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +DROP TABLE IF EXISTS t1; +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 + 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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, + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1 + f_int2) +PARTITIONS 2 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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, + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1,f_int2) +PARTITIONS 5 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(MOD(f_int1 + f_int2,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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, + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 + f_int2) DIV 2) +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +PARTITION partc VALUES LESS THAN (10), +PARTITION partd VALUES LESS THAN (10 + 5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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, + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION parte VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION partf VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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_int2) SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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, + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY HASH (f_int2) +SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 KEY(f_int2) +(PARTITION part1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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, + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int2) +(PARTITION part1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1) +(PARTITION part1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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, + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) +SUBPARTITION BY HASH (f_int2 + 1) +(PARTITION part1 VALUES IN (0) + (SUBPARTITION sp11 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int2) SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0), +PARTITION part2 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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, + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int2) +SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# 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; +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 + 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2), 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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`), + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1 + f_int2) +PARTITIONS 2 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2), 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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`), + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1,f_int2) +PARTITIONS 5 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(MOD(f_int1 + f_int2,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2), 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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`), + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 + f_int2) DIV 2) +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +PARTITION partc VALUES LESS THAN (10), +PARTITION partd VALUES LESS THAN (10 + 5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2), 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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`), + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION parte VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION partf VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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_int2) SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2), 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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`), + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY HASH (f_int2) +SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 KEY(f_int2) +(PARTITION part1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2), 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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`), + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int2) +(PARTITION part1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1) +(PARTITION part1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2), 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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`), + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) +SUBPARTITION BY HASH (f_int2 + 1) +(PARTITION part1 VALUES IN (0) + (SUBPARTITION sp11 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int2) SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0), +PARTITION part2 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2), 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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`), + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int2) +SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +DROP TABLE IF EXISTS t1; +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 + 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1), 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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`), + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1 + f_int2) +PARTITIONS 2 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1), 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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`), + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1,f_int2) +PARTITIONS 5 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(MOD(f_int1 + f_int2,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1), 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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`), + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 + f_int2) DIV 2) +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +PARTITION partc VALUES LESS THAN (10), +PARTITION partd VALUES LESS THAN (10 + 5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1), 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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`), + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION parte VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION partf VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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_int2) SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1), 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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`), + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY HASH (f_int2) +SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 KEY(f_int2) +(PARTITION part1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1), 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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`), + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int2) +(PARTITION part1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1) +(PARTITION part1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1), 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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`), + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) +SUBPARTITION BY HASH (f_int2 + 1) +(PARTITION part1 VALUES IN (0) + (SUBPARTITION sp11 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int2) SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0), +PARTITION part2 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1), 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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`), + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int2) +SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +DROP TABLE IF EXISTS t1; +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 + 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1), 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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`), + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1 + f_int2) +PARTITIONS 2 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1), 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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`), + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1,f_int2) +PARTITIONS 5 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(MOD(f_int1 + f_int2,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1), 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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`), + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 + f_int2) DIV 2) +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +PARTITION partc VALUES LESS THAN (10), +PARTITION partd VALUES LESS THAN (10 + 5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1), 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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`), + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION parte VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION partf VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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_int2) SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1), 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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`), + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY HASH (f_int2) +SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 KEY(f_int2) +(PARTITION part1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1), 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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`), + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int2) +(PARTITION part1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1) +(PARTITION part1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1), 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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`), + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) +SUBPARTITION BY HASH (f_int2 + 1) +(PARTITION part1 VALUES IN (0) + (SUBPARTITION sp11 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int2) SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0), +PARTITION part2 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1), 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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`), + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int2) +SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +DROP VIEW IF EXISTS v1; +DROP TABLE IF EXISTS t1; +DROP TABLE IF EXISTS t0_aux; +DROP TABLE IF EXISTS t0_definition; +DROP TABLE IF EXISTS t0_template; diff --git a/mysql-test/suite/tokudb.parts/r-native/partition_alter1_1_tokudb.result b/mysql-test/suite/tokudb.parts/r-native/partition_alter1_1_tokudb.result new file mode 100644 index 000000000000..10a2bff8de4f --- /dev/null +++ b/mysql-test/suite/tokudb.parts/r-native/partition_alter1_1_tokudb.result @@ -0,0 +1,16822 @@ +SET @max_row = 20; +SET @@session.default_storage_engine = 'TokuDB'; + +#------------------------------------------------------------------------ +# 0. Setting of auxiliary variables + Creation of an auxiliary tables +# needed in many testcases +#------------------------------------------------------------------------ +SELECT @max_row DIV 2 INTO @max_row_div2; +SELECT @max_row DIV 3 INTO @max_row_div3; +SELECT @max_row DIV 4 INTO @max_row_div4; +SET @max_int_4 = 2147483647; +DROP TABLE IF EXISTS t0_template; +CREATE TABLE t0_template ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) , +PRIMARY KEY(f_int1)) +ENGINE = MEMORY; +# Logging of INSERTs into t0_template suppressed +DROP TABLE IF EXISTS t0_definition; +CREATE TABLE t0_definition ( +state CHAR(3), +create_command VARBINARY(5000), +file_list VARBINARY(10000), +PRIMARY KEY (state) +) ENGINE = MEMORY; +DROP TABLE IF EXISTS t0_aux; +CREATE TABLE t0_aux ( f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) ) +ENGINE = MEMORY; +SET AUTOCOMMIT= 1; +SET @@session.sql_mode= ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +# End of basic preparations needed for all tests +#----------------------------------------------- + +#======================================================================== +# 1. ALTER TABLE ADD PRIMARY KEY and/or UNIQUE INDEX +#======================================================================== +#------------------------------------------------------------------------ +# 1.1 ADD PRIMARY KEY or UNIQUE INDEX to table with one column (f_int1) +# within the partitioning function +#------------------------------------------------------------------------ +DROP TABLE IF EXISTS t1; +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; +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ADD PRIMARY KEY(f_int2); +ERROR HY000: A PRIMARY KEY must include all columns in the table's partitioning function +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY KEY(f_int1) 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ADD PRIMARY KEY(f_int2); +ERROR HY000: A PRIMARY KEY must include all columns in the table's partitioning function +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ADD PRIMARY KEY(f_int2); +ERROR HY000: A PRIMARY KEY must include all columns in the table's partitioning function +DROP TABLE t1; +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) +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +PARTITION partc VALUES LESS THAN (10), +PARTITION partd VALUES LESS THAN (10 + 5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ADD PRIMARY KEY(f_int2); +ERROR HY000: A PRIMARY KEY must include all columns in the table's partitioning function +DROP TABLE t1; +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 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ADD PRIMARY KEY(f_int2); +ERROR HY000: A PRIMARY KEY must include all columns in the table's partitioning function +DROP TABLE t1; +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 KEY(f_int1) +(PARTITION part1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ADD PRIMARY KEY(f_int2); +ERROR HY000: A PRIMARY KEY must include all columns in the table's partitioning function +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) +(PARTITION part1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ADD PRIMARY KEY(f_int2); +ERROR HY000: A PRIMARY KEY must include all columns in the table's partitioning function +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0), +PARTITION part2 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ADD PRIMARY KEY(f_int2); +ERROR HY000: A PRIMARY KEY must include all columns in the table's partitioning function +DROP TABLE t1; +DROP TABLE IF EXISTS t1; +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; +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2); +ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY KEY(f_int1) 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2); +ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2); +ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function +DROP TABLE t1; +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) +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +PARTITION partc VALUES LESS THAN (10), +PARTITION partd VALUES LESS THAN (10 + 5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2); +ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function +DROP TABLE t1; +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 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2); +ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function +DROP TABLE t1; +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 KEY(f_int1) +(PARTITION part1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2); +ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) +(PARTITION part1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2); +ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0), +PARTITION part2 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2); +ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function +DROP TABLE t1; +# 1.1.3 PRIMARY KEY consisting of two columns +DROP TABLE IF EXISTS t1; +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; +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1) +PARTITIONS 2 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY KEY(f_int1) 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1) +PARTITIONS 5 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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) +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +PARTITION partc VALUES LESS THAN (10), +PARTITION partd VALUES LESS THAN (10 + 5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION parte VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION partf VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1 DIV 2) +SUBPARTITION BY HASH (f_int1) +SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 KEY(f_int1) +(PARTITION part1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int1) +(PARTITION part1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) +(PARTITION part1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`) +) ENGINE=TokuDB 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 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0), +PARTITION part2 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int1) +SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +DROP TABLE IF EXISTS t1; +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; +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1) +PARTITIONS 2 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY KEY(f_int1) 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1) +PARTITIONS 5 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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) +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +PARTITION partc VALUES LESS THAN (10), +PARTITION partd VALUES LESS THAN (10 + 5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION parte VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION partf VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1 DIV 2) +SUBPARTITION BY HASH (f_int1) +SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 KEY(f_int1) +(PARTITION part1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int1) +(PARTITION part1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) +(PARTITION part1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`) +) ENGINE=TokuDB 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 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0), +PARTITION part2 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int1) +SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +# 1.1.4 UNIQUE INDEX consisting of two columns +DROP TABLE IF EXISTS t1; +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; +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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, + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1) +PARTITIONS 2 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY KEY(f_int1) 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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, + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1) +PARTITIONS 5 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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, + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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) +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +PARTITION partc VALUES LESS THAN (10), +PARTITION partd VALUES LESS THAN (10 + 5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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, + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION parte VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION partf VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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, + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1 DIV 2) +SUBPARTITION BY HASH (f_int1) +SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 KEY(f_int1) +(PARTITION part1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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, + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int1) +(PARTITION part1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) +(PARTITION part1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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, + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`) +) ENGINE=TokuDB 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 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0), +PARTITION part2 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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, + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int1) +SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +DROP TABLE IF EXISTS t1; +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; +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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, + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1) +PARTITIONS 2 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY KEY(f_int1) 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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, + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1) +PARTITIONS 5 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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, + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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) +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +PARTITION partc VALUES LESS THAN (10), +PARTITION partd VALUES LESS THAN (10 + 5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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, + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION parte VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION partf VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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, + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1 DIV 2) +SUBPARTITION BY HASH (f_int1) +SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 KEY(f_int1) +(PARTITION part1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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, + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int1) +(PARTITION part1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) +(PARTITION part1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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, + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB 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 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0), +PARTITION part2 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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, + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int1) +SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +DROP VIEW IF EXISTS v1; +DROP TABLE IF EXISTS t1; +DROP TABLE IF EXISTS t0_aux; +DROP TABLE IF EXISTS t0_definition; +DROP TABLE IF EXISTS t0_template; diff --git a/mysql-test/suite/tokudb.parts/r-native/partition_alter1_2_tokudb.result b/mysql-test/suite/tokudb.parts/r-native/partition_alter1_2_tokudb.result new file mode 100644 index 000000000000..33e3b6232ae6 --- /dev/null +++ b/mysql-test/suite/tokudb.parts/r-native/partition_alter1_2_tokudb.result @@ -0,0 +1,37048 @@ +SET @max_row = 20; +SET @@session.default_storage_engine = 'TokuDB'; + +#------------------------------------------------------------------------ +# 0. Setting of auxiliary variables + Creation of an auxiliary tables +# needed in many testcases +#------------------------------------------------------------------------ +SELECT @max_row DIV 2 INTO @max_row_div2; +SELECT @max_row DIV 3 INTO @max_row_div3; +SELECT @max_row DIV 4 INTO @max_row_div4; +SET @max_int_4 = 2147483647; +DROP TABLE IF EXISTS t0_template; +CREATE TABLE t0_template ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) , +PRIMARY KEY(f_int1)) +ENGINE = MEMORY; +# Logging of INSERTs into t0_template suppressed +DROP TABLE IF EXISTS t0_definition; +CREATE TABLE t0_definition ( +state CHAR(3), +create_command VARBINARY(5000), +file_list VARBINARY(10000), +PRIMARY KEY (state) +) ENGINE = MEMORY; +DROP TABLE IF EXISTS t0_aux; +CREATE TABLE t0_aux ( f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) ) +ENGINE = MEMORY; +SET AUTOCOMMIT= 1; +SET @@session.sql_mode= ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +# End of basic preparations needed for all tests +#----------------------------------------------- + +#======================================================================== +# 2 DROP PRIMARY KEY or UNIQUE INDEX +#======================================================================== +#------------------------------------------------------------------------ +# 2.1 Partitioning function contains one column(f_int1) +#------------------------------------------------------------------------ +# 2.1.5 DROP PRIMARY KEY + UNIQUE INDEX consisting of two columns +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1) +) +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1) +PARTITIONS 2 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1) +) +PARTITION BY KEY(f_int1) 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1) +PARTITIONS 5 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1) +) +PARTITION BY LIST(MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1) +) +PARTITION BY RANGE(f_int1) +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +PARTITION partc VALUES LESS THAN (10), +PARTITION partd VALUES LESS THAN (10 + 5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION parte VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION partf VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1) +) +PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1 DIV 2) +SUBPARTITION BY HASH (f_int1) +SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1) +) +PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1) +(PARTITION part1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int1) +(PARTITION part1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1) +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) +(PARTITION part1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB 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 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1) +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0), +PARTITION part2 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int1) +SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2) +) +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1) +PARTITIONS 2 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2) +) +PARTITION BY KEY(f_int1) 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1) +PARTITIONS 5 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2) +) +PARTITION BY LIST(MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2) +) +PARTITION BY RANGE(f_int1) +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +PARTITION partc VALUES LESS THAN (10), +PARTITION partd VALUES LESS THAN (10 + 5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION parte VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION partf VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2) +) +PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1 DIV 2) +SUBPARTITION BY HASH (f_int1) +SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2) +) +PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1) +(PARTITION part1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int1) +(PARTITION part1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2) +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) +(PARTITION part1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB 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 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2) +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0), +PARTITION part2 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int1) +SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1) +) +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1) +PARTITIONS 2 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1) +) +PARTITION BY KEY(f_int1) 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1) +PARTITIONS 5 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1) +) +PARTITION BY LIST(MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1) +) +PARTITION BY RANGE(f_int1) +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +PARTITION partc VALUES LESS THAN (10), +PARTITION partd VALUES LESS THAN (10 + 5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION parte VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION partf VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1) +) +PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1 DIV 2) +SUBPARTITION BY HASH (f_int1) +SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1) +) +PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1) +(PARTITION part1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int1) +(PARTITION part1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1) +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) +(PARTITION part1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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=TokuDB 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 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1) +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0), +PARTITION part2 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int1) +SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +#------------------------------------------------------------------------ +# 2.2 Partitioning function contains two columns (f_int1,f_int2) +#------------------------------------------------------------------------ +# 2.2.1 DROP PRIMARY KEY consisting of two columns +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY(f_int1,f_int2) +) +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1 + f_int2) +PARTITIONS 2 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY(f_int1,f_int2) +) +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1,f_int2) +PARTITIONS 5 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY(f_int1,f_int2) +) +PARTITION BY LIST(MOD(f_int1 + f_int2,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY(f_int1,f_int2) +) +PARTITION BY RANGE((f_int1 + f_int2) DIV 2) +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +PARTITION partc VALUES LESS THAN (10), +PARTITION partd VALUES LESS THAN (10 + 5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION parte VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION partf VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY(f_int1,f_int2) +) +PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY HASH (f_int2) +SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY(f_int1,f_int2) +) +PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2) +(PARTITION part1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int2) +(PARTITION part1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY(f_int1,f_int2) +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1) +(PARTITION part1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) +SUBPARTITION BY HASH (f_int2 + 1) +(PARTITION part1 VALUES IN (0) + (SUBPARTITION sp11 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY(f_int1,f_int2) +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int2) SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0), +PARTITION part2 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int2) +SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY(f_int2,f_int1) +) +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1 + f_int2) +PARTITIONS 2 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY(f_int2,f_int1) +) +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1,f_int2) +PARTITIONS 5 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY(f_int2,f_int1) +) +PARTITION BY LIST(MOD(f_int1 + f_int2,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY(f_int2,f_int1) +) +PARTITION BY RANGE((f_int1 + f_int2) DIV 2) +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +PARTITION partc VALUES LESS THAN (10), +PARTITION partd VALUES LESS THAN (10 + 5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION parte VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION partf VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY(f_int2,f_int1) +) +PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY HASH (f_int2) +SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY(f_int2,f_int1) +) +PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2) +(PARTITION part1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int2) +(PARTITION part1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY(f_int2,f_int1) +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1) +(PARTITION part1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) +SUBPARTITION BY HASH (f_int2 + 1) +(PARTITION part1 VALUES IN (0) + (SUBPARTITION sp11 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY(f_int2,f_int1) +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int2) SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0), +PARTITION part2 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int2) +SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# 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; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2) +) +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1 + f_int2) +PARTITIONS 2 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2) +) +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1,f_int2) +PARTITIONS 5 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2) +) +PARTITION BY LIST(MOD(f_int1 + f_int2,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2) +) +PARTITION BY RANGE((f_int1 + f_int2) DIV 2) +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +PARTITION partc VALUES LESS THAN (10), +PARTITION partd VALUES LESS THAN (10 + 5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION parte VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION partf VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2) +) +PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY HASH (f_int2) +SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2) +) +PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2) +(PARTITION part1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int2) +(PARTITION part1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2) +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1) +(PARTITION part1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) +SUBPARTITION BY HASH (f_int2 + 1) +(PARTITION part1 VALUES IN (0) + (SUBPARTITION sp11 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2) +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int2) SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0), +PARTITION part2 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int2) +SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int2,f_int1) +) +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1 + f_int2) +PARTITIONS 2 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int2,f_int1) +) +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1,f_int2) +PARTITIONS 5 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int2,f_int1) +) +PARTITION BY LIST(MOD(f_int1 + f_int2,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int2,f_int1) +) +PARTITION BY RANGE((f_int1 + f_int2) DIV 2) +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +PARTITION partc VALUES LESS THAN (10), +PARTITION partd VALUES LESS THAN (10 + 5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION parte VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION partf VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int2,f_int1) +) +PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY HASH (f_int2) +SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int2,f_int1) +) +PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2) +(PARTITION part1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int2) +(PARTITION part1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int2,f_int1) +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1) +(PARTITION part1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) +SUBPARTITION BY HASH (f_int2 + 1) +(PARTITION part1 VALUES IN (0) + (SUBPARTITION sp11 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int2,f_int1) +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int2) SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0), +PARTITION part2 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int2) +SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# 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; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1) +) +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1 + f_int2) +PARTITIONS 2 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1) +) +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1,f_int2) +PARTITIONS 5 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1) +) +PARTITION BY LIST(MOD(f_int1 + f_int2,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1) +) +PARTITION BY RANGE((f_int1 + f_int2) DIV 2) +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +PARTITION partc VALUES LESS THAN (10), +PARTITION partd VALUES LESS THAN (10 + 5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION parte VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION partf VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1) +) +PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY HASH (f_int2) +SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1) +) +PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2) +(PARTITION part1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int2) +(PARTITION part1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1) +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1) +(PARTITION part1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) +SUBPARTITION BY HASH (f_int2 + 1) +(PARTITION part1 VALUES IN (0) + (SUBPARTITION sp11 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1) +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int2) SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0), +PARTITION part2 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int2) +SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2) +) +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1 + f_int2) +PARTITIONS 2 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2) +) +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1,f_int2) +PARTITIONS 5 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2) +) +PARTITION BY LIST(MOD(f_int1 + f_int2,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2) +) +PARTITION BY RANGE((f_int1 + f_int2) DIV 2) +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +PARTITION partc VALUES LESS THAN (10), +PARTITION partd VALUES LESS THAN (10 + 5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION parte VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION partf VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2) +) +PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY HASH (f_int2) +SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2) +) +PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2) +(PARTITION part1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int2) +(PARTITION part1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2) +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1) +(PARTITION part1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) +SUBPARTITION BY HASH (f_int2 + 1) +(PARTITION part1 VALUES IN (0) + (SUBPARTITION sp11 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2) +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int2) SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0), +PARTITION part2 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int2) +SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1) +) +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1 + f_int2) +PARTITIONS 2 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1) +) +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1,f_int2) +PARTITIONS 5 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1) +) +PARTITION BY LIST(MOD(f_int1 + f_int2,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1) +) +PARTITION BY RANGE((f_int1 + f_int2) DIV 2) +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +PARTITION partc VALUES LESS THAN (10), +PARTITION partd VALUES LESS THAN (10 + 5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION parte VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION partf VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1) +) +PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY HASH (f_int2) +SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1) +) +PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2) +(PARTITION part1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int2) +(PARTITION part1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1) +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1) +(PARTITION part1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) +SUBPARTITION BY HASH (f_int2 + 1) +(PARTITION part1 VALUES IN (0) + (SUBPARTITION sp11 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1) +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int2) SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0), +PARTITION part2 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int2) +SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; + +#======================================================================== +# 3. ALTER TABLE "ALTER"(DROP + ADD) PRIMARY KEY +# mleich: I think that an ALTER TABLE statement where a PRIMARY +# KEY is dropped and recreated (with different layout) might +# be of interest, if the tree containing the table data has +# to be reorganized during this operation. +#======================================================================== +#------------------------------------------------------------------------ +# 3.1 Partitioning function uses the PRIMARY/UNIQUE KEY +#------------------------------------------------------------------------ +# 3.1.1 DROP and CREATE PRIMARY KEY on different column +DROP TABLE IF EXISTS t1; +#----------- PARTITION BY KEY +CREATE TABLE t1 ( +f_int1 INTEGER NOT NULL, +f_int2 INTEGER NOT NULL, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY(f_int1) +) +PARTITION BY KEY() PARTITIONS 5; +INSERT INTO t1(f_int1, f_int2) values(100, 200); +INSERT INTO t1(f_int1, f_int2) values(200, 300); +INSERT INTO t1(f_int1, f_int2) values(300, 400); +INSERT INTO t1(f_int1, f_int2) values(400, 500); +INSERT INTO t1(f_int1, f_int2) values(500, 100); +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +Execute ALTER: Expect Success +ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(f_int2, f_int1); +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY () +PARTITIONS 5 */ +DROP TABLE t1; +# 3.1.2 Negative test: Try DROP and CREATE PRIMARY KEY INPLACE +# Expect error for INPLACE ALTER +DROP TABLE IF EXISTS t1; +#----------- PARTITION BY KEY +CREATE TABLE t1 ( +f_int1 INTEGER NOT NULL, +f_int2 INTEGER NOT NULL, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY(f_int1) +) +PARTITION BY KEY() PARTITIONS 5; +INSERT INTO t1(f_int1, f_int2) values(100, 200); +INSERT INTO t1(f_int1, f_int2) values(200, 300); +INSERT INTO t1(f_int1, f_int2) values(300, 400); +INSERT INTO t1(f_int1, f_int2) values(400, 500); +INSERT INTO t1(f_int1, f_int2) values(500, 100); +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +Execute ALTER: Expect Error 1845 +ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(f_int2, f_int1), +ALGORITHM = INPLACE; +ERROR 0A000: ALGORITHM=INPLACE is not supported for this operation. Try ALGORITHM=COPY. +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY () +PARTITIONS 5 */ +DROP TABLE t1; +# 3.1.3 DROP and CREATE UNIQUE KEY on different column +DROP TABLE IF EXISTS t1; +#----------- PARTITION BY KEY +CREATE TABLE t1 ( +f_int1 INTEGER NOT NULL, +f_int2 INTEGER NOT NULL, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE KEY ukey1(f_int1) +) +PARTITION BY KEY() PARTITIONS 5; +INSERT INTO t1(f_int1, f_int2) values(100, 200); +INSERT INTO t1(f_int1, f_int2) values(200, 300); +INSERT INTO t1(f_int1, f_int2) values(300, 400); +INSERT INTO t1(f_int1, f_int2) values(400, 500); +INSERT INTO t1(f_int1, f_int2) values(500, 100); +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +Execute ALTER: Expect Success +ALTER TABLE t1 DROP KEY ukey1, ADD UNIQUE KEY +ukey2(f_int2, f_int1); +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `ukey2` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY () +PARTITIONS 5 */ +DROP TABLE t1; +# 3.1.4 Negative test: Try DROP and CREATE UNIQUE KEY INPLACE +# Expect error for INPLACE ALTER +DROP TABLE IF EXISTS t1; +#----------- PARTITION BY KEY +CREATE TABLE t1 ( +f_int1 INTEGER NOT NULL, +f_int2 INTEGER NOT NULL, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE KEY ukey1(f_int1) +) +PARTITION BY KEY() PARTITIONS 5; +INSERT INTO t1(f_int1, f_int2) values(100, 200); +INSERT INTO t1(f_int1, f_int2) values(200, 300); +INSERT INTO t1(f_int1, f_int2) values(300, 400); +INSERT INTO t1(f_int1, f_int2) values(400, 500); +INSERT INTO t1(f_int1, f_int2) values(500, 100); +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +Execute ALTER: Expect Error 1845 +ALTER TABLE t1 DROP KEY ukey1, ADD UNIQUE KEY +ukey2(f_int2, f_int1), ALGORITHM = INPLACE; +ERROR 0A000: ALGORITHM=INPLACE is not supported for this operation. Try ALGORITHM=COPY. +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `ukey1` (`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY () +PARTITIONS 5 */ +DROP TABLE t1; +DROP VIEW IF EXISTS v1; +DROP TABLE IF EXISTS t1; +DROP TABLE IF EXISTS t0_aux; +DROP TABLE IF EXISTS t0_definition; +DROP TABLE IF EXISTS t0_template; diff --git a/mysql-test/suite/tokudb.parts/r-native/partition_alter2_1_1_tokudb.result b/mysql-test/suite/tokudb.parts/r-native/partition_alter2_1_1_tokudb.result new file mode 100644 index 000000000000..97b8f8bd646d --- /dev/null +++ b/mysql-test/suite/tokudb.parts/r-native/partition_alter2_1_1_tokudb.result @@ -0,0 +1,20265 @@ +SET @max_row = 20; +SET @@session.default_storage_engine = 'TokuDB'; + +#------------------------------------------------------------------------ +# 0. Setting of auxiliary variables + Creation of an auxiliary tables +# needed in many testcases +#------------------------------------------------------------------------ +SELECT @max_row DIV 2 INTO @max_row_div2; +SELECT @max_row DIV 3 INTO @max_row_div3; +SELECT @max_row DIV 4 INTO @max_row_div4; +SET @max_int_4 = 2147483647; +DROP TABLE IF EXISTS t0_template; +CREATE TABLE t0_template ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) , +PRIMARY KEY(f_int1)) +ENGINE = MEMORY; +# Logging of INSERTs into t0_template suppressed +DROP TABLE IF EXISTS t0_definition; +CREATE TABLE t0_definition ( +state CHAR(3), +create_command VARBINARY(5000), +file_list VARBINARY(10000), +PRIMARY KEY (state) +) ENGINE = MEMORY; +DROP TABLE IF EXISTS t0_aux; +CREATE TABLE t0_aux ( f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) ) +ENGINE = MEMORY; +SET AUTOCOMMIT= 1; +SET @@session.sql_mode= ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +# End of basic preparations needed for all tests +#----------------------------------------------- + +#======================================================================== +# 1 Increase the size of the column used in the partitioning +# function and/or PRIMARY KEY and/or UNIQUE INDEX +#======================================================================== +#------------------------------------------------------------------------ +# 1.1 ALTER column f_int2 not used in partitioning function +#------------------------------------------------------------------------ +# 1.1.1 no PRIMARY KEY or UNIQUE INDEX exists +DROP TABLE IF EXISTS t1; +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; +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) DEFAULT NULL, + `f_int2` bigint(20) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1) +PARTITIONS 2 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY KEY(f_int1) 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) DEFAULT NULL, + `f_int2` bigint(20) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1) +PARTITIONS 5 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) DEFAULT NULL, + `f_int2` bigint(20) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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) +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +PARTITION partc VALUES LESS THAN (10), +PARTITION partd VALUES LESS THAN (10 + 5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) DEFAULT NULL, + `f_int2` bigint(20) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION parte VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION partf VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) DEFAULT NULL, + `f_int2` bigint(20) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1 DIV 2) +SUBPARTITION BY HASH (f_int1) +SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 KEY(f_int1) +(PARTITION part1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) DEFAULT NULL, + `f_int2` bigint(20) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int1) +(PARTITION part1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) +(PARTITION part1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) DEFAULT NULL, + `f_int2` bigint(20) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB 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 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0), +PARTITION part2 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) DEFAULT NULL, + `f_int2` bigint(20) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int1) +SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +# 1.1.2 PRIMARY KEY exists +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int1,f_int2) +) +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` bigint(20) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1) +PARTITIONS 2 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int1,f_int2) +) +PARTITION BY KEY(f_int1) 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` bigint(20) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1) +PARTITIONS 5 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int1,f_int2) +) +PARTITION BY LIST(MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` bigint(20) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int1,f_int2) +) +PARTITION BY RANGE(f_int1) +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +PARTITION partc VALUES LESS THAN (10), +PARTITION partd VALUES LESS THAN (10 + 5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` bigint(20) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION parte VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION partf VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int1,f_int2) +) +PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` bigint(20) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1 DIV 2) +SUBPARTITION BY HASH (f_int1) +SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int1,f_int2) +) +PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1) +(PARTITION part1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` bigint(20) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int1) +(PARTITION part1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int1,f_int2) +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) +(PARTITION part1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` bigint(20) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`) +) ENGINE=TokuDB 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 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int1,f_int2) +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0), +PARTITION part2 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` bigint(20) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int1) +SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int2,f_int1) +) +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` bigint(20) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1) +PARTITIONS 2 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int2,f_int1) +) +PARTITION BY KEY(f_int1) 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` bigint(20) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1) +PARTITIONS 5 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int2,f_int1) +) +PARTITION BY LIST(MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` bigint(20) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int2,f_int1) +) +PARTITION BY RANGE(f_int1) +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +PARTITION partc VALUES LESS THAN (10), +PARTITION partd VALUES LESS THAN (10 + 5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` bigint(20) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION parte VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION partf VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int2,f_int1) +) +PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` bigint(20) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1 DIV 2) +SUBPARTITION BY HASH (f_int1) +SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int2,f_int1) +) +PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1) +(PARTITION part1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` bigint(20) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int1) +(PARTITION part1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int2,f_int1) +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) +(PARTITION part1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` bigint(20) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`) +) ENGINE=TokuDB 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 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int2,f_int1) +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0), +PARTITION part2 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` bigint(20) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int1) +SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +# 1.1.3 UNIQUE INDEX exists +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2) +) +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) DEFAULT NULL, + `f_int2` bigint(20) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1) +PARTITIONS 2 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2) +) +PARTITION BY KEY(f_int1) 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) DEFAULT NULL, + `f_int2` bigint(20) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1) +PARTITIONS 5 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2) +) +PARTITION BY LIST(MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) DEFAULT NULL, + `f_int2` bigint(20) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2) +) +PARTITION BY RANGE(f_int1) +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +PARTITION partc VALUES LESS THAN (10), +PARTITION partd VALUES LESS THAN (10 + 5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) DEFAULT NULL, + `f_int2` bigint(20) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION parte VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION partf VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2) +) +PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) DEFAULT NULL, + `f_int2` bigint(20) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1 DIV 2) +SUBPARTITION BY HASH (f_int1) +SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2) +) +PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1) +(PARTITION part1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) DEFAULT NULL, + `f_int2` bigint(20) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int1) +(PARTITION part1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2) +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) +(PARTITION part1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) DEFAULT NULL, + `f_int2` bigint(20) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`) +) ENGINE=TokuDB 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 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2) +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0), +PARTITION part2 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) DEFAULT NULL, + `f_int2` bigint(20) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int1) +SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int2,f_int1) +) +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) DEFAULT NULL, + `f_int2` bigint(20) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1) +PARTITIONS 2 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int2,f_int1) +) +PARTITION BY KEY(f_int1) 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) DEFAULT NULL, + `f_int2` bigint(20) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1) +PARTITIONS 5 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int2,f_int1) +) +PARTITION BY LIST(MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) DEFAULT NULL, + `f_int2` bigint(20) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int2,f_int1) +) +PARTITION BY RANGE(f_int1) +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +PARTITION partc VALUES LESS THAN (10), +PARTITION partd VALUES LESS THAN (10 + 5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) DEFAULT NULL, + `f_int2` bigint(20) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION parte VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION partf VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int2,f_int1) +) +PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) DEFAULT NULL, + `f_int2` bigint(20) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1 DIV 2) +SUBPARTITION BY HASH (f_int1) +SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int2,f_int1) +) +PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1) +(PARTITION part1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) DEFAULT NULL, + `f_int2` bigint(20) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int1) +(PARTITION part1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int2,f_int1) +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) +(PARTITION part1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) DEFAULT NULL, + `f_int2` bigint(20) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB 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 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int2,f_int1) +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0), +PARTITION part2 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) DEFAULT NULL, + `f_int2` bigint(20) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int1) +SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +DROP VIEW IF EXISTS v1; +DROP TABLE IF EXISTS t1; +DROP TABLE IF EXISTS t0_aux; +DROP TABLE IF EXISTS t0_definition; +DROP TABLE IF EXISTS t0_template; diff --git a/mysql-test/suite/tokudb.parts/r-native/partition_alter2_1_2_tokudb.result b/mysql-test/suite/tokudb.parts/r-native/partition_alter2_1_2_tokudb.result new file mode 100644 index 000000000000..69e0ea4cc068 --- /dev/null +++ b/mysql-test/suite/tokudb.parts/r-native/partition_alter2_1_2_tokudb.result @@ -0,0 +1,20251 @@ +SET @max_row = 20; +SET @@session.default_storage_engine = 'TokuDB'; + +#------------------------------------------------------------------------ +# 0. Setting of auxiliary variables + Creation of an auxiliary tables +# needed in many testcases +#------------------------------------------------------------------------ +SELECT @max_row DIV 2 INTO @max_row_div2; +SELECT @max_row DIV 3 INTO @max_row_div3; +SELECT @max_row DIV 4 INTO @max_row_div4; +SET @max_int_4 = 2147483647; +DROP TABLE IF EXISTS t0_template; +CREATE TABLE t0_template ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) , +PRIMARY KEY(f_int1)) +ENGINE = MEMORY; +# Logging of INSERTs into t0_template suppressed +DROP TABLE IF EXISTS t0_definition; +CREATE TABLE t0_definition ( +state CHAR(3), +create_command VARBINARY(5000), +file_list VARBINARY(10000), +PRIMARY KEY (state) +) ENGINE = MEMORY; +DROP TABLE IF EXISTS t0_aux; +CREATE TABLE t0_aux ( f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) ) +ENGINE = MEMORY; +SET AUTOCOMMIT= 1; +SET @@session.sql_mode= ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +# End of basic preparations needed for all tests +#----------------------------------------------- +#------------------------------------------------------------------------ +# 1.3 ALTER column f_int1 and f_int2 +# f_int1 or (f_int1 and f_int2) used in partitioning function +#------------------------------------------------------------------------ +# 1.3.1 no PRIMARY KEY or UNIQUE INDEX exists +DROP TABLE IF EXISTS t1; +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 + 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` bigint(20) DEFAULT NULL, + `f_int2` bigint(20) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1 + f_int2) +PARTITIONS 2 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` bigint(20) DEFAULT NULL, + `f_int2` bigint(20) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1,f_int2) +PARTITIONS 5 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(MOD(f_int1 + f_int2,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` bigint(20) DEFAULT NULL, + `f_int2` bigint(20) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 + f_int2) DIV 2) +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +PARTITION partc VALUES LESS THAN (10), +PARTITION partd VALUES LESS THAN (10 + 5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` bigint(20) DEFAULT NULL, + `f_int2` bigint(20) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION parte VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION partf VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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_int2) SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` bigint(20) DEFAULT NULL, + `f_int2` bigint(20) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY HASH (f_int2) +SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 KEY(f_int2) +(PARTITION part1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` bigint(20) DEFAULT NULL, + `f_int2` bigint(20) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int2) +(PARTITION part1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1) +(PARTITION part1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` bigint(20) DEFAULT NULL, + `f_int2` bigint(20) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) +SUBPARTITION BY HASH (f_int2 + 1) +(PARTITION part1 VALUES IN (0) + (SUBPARTITION sp11 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int2) SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0), +PARTITION part2 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` bigint(20) DEFAULT NULL, + `f_int2` bigint(20) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int2) +SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +# 1.3.2 PRIMARY KEY exists +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int1,f_int2) +) +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` bigint(20) NOT NULL, + `f_int2` bigint(20) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1 + f_int2) +PARTITIONS 2 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int1,f_int2) +) +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` bigint(20) NOT NULL, + `f_int2` bigint(20) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1,f_int2) +PARTITIONS 5 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int1,f_int2) +) +PARTITION BY LIST(MOD(f_int1 + f_int2,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` bigint(20) NOT NULL, + `f_int2` bigint(20) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int1,f_int2) +) +PARTITION BY RANGE((f_int1 + f_int2) DIV 2) +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +PARTITION partc VALUES LESS THAN (10), +PARTITION partd VALUES LESS THAN (10 + 5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` bigint(20) NOT NULL, + `f_int2` bigint(20) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION parte VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION partf VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int1,f_int2) +) +PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` bigint(20) NOT NULL, + `f_int2` bigint(20) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY HASH (f_int2) +SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int1,f_int2) +) +PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2) +(PARTITION part1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` bigint(20) NOT NULL, + `f_int2` bigint(20) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int2) +(PARTITION part1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int1,f_int2) +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1) +(PARTITION part1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` bigint(20) NOT NULL, + `f_int2` bigint(20) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) +SUBPARTITION BY HASH (f_int2 + 1) +(PARTITION part1 VALUES IN (0) + (SUBPARTITION sp11 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int1,f_int2) +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int2) SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0), +PARTITION part2 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` bigint(20) NOT NULL, + `f_int2` bigint(20) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int2) +SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int2,f_int1) +) +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` bigint(20) NOT NULL, + `f_int2` bigint(20) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1 + f_int2) +PARTITIONS 2 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int2,f_int1) +) +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` bigint(20) NOT NULL, + `f_int2` bigint(20) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1,f_int2) +PARTITIONS 5 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int2,f_int1) +) +PARTITION BY LIST(MOD(f_int1 + f_int2,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` bigint(20) NOT NULL, + `f_int2` bigint(20) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int2,f_int1) +) +PARTITION BY RANGE((f_int1 + f_int2) DIV 2) +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +PARTITION partc VALUES LESS THAN (10), +PARTITION partd VALUES LESS THAN (10 + 5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` bigint(20) NOT NULL, + `f_int2` bigint(20) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION parte VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION partf VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int2,f_int1) +) +PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` bigint(20) NOT NULL, + `f_int2` bigint(20) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY HASH (f_int2) +SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int2,f_int1) +) +PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2) +(PARTITION part1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` bigint(20) NOT NULL, + `f_int2` bigint(20) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int2) +(PARTITION part1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int2,f_int1) +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1) +(PARTITION part1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` bigint(20) NOT NULL, + `f_int2` bigint(20) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) +SUBPARTITION BY HASH (f_int2 + 1) +(PARTITION part1 VALUES IN (0) + (SUBPARTITION sp11 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int2,f_int1) +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int2) SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0), +PARTITION part2 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` bigint(20) NOT NULL, + `f_int2` bigint(20) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int2) +SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +# 1.3.3 UNIQUE INDEX exists +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx (f_int1,f_int2) +) +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` bigint(20) DEFAULT NULL, + `f_int2` bigint(20) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1 + f_int2) +PARTITIONS 2 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx (f_int1,f_int2) +) +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` bigint(20) DEFAULT NULL, + `f_int2` bigint(20) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1,f_int2) +PARTITIONS 5 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx (f_int1,f_int2) +) +PARTITION BY LIST(MOD(f_int1 + f_int2,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` bigint(20) DEFAULT NULL, + `f_int2` bigint(20) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx (f_int1,f_int2) +) +PARTITION BY RANGE((f_int1 + f_int2) DIV 2) +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +PARTITION partc VALUES LESS THAN (10), +PARTITION partd VALUES LESS THAN (10 + 5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` bigint(20) DEFAULT NULL, + `f_int2` bigint(20) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION parte VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION partf VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx (f_int1,f_int2) +) +PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` bigint(20) DEFAULT NULL, + `f_int2` bigint(20) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY HASH (f_int2) +SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx (f_int1,f_int2) +) +PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2) +(PARTITION part1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` bigint(20) DEFAULT NULL, + `f_int2` bigint(20) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int2) +(PARTITION part1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx (f_int1,f_int2) +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1) +(PARTITION part1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` bigint(20) DEFAULT NULL, + `f_int2` bigint(20) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) +SUBPARTITION BY HASH (f_int2 + 1) +(PARTITION part1 VALUES IN (0) + (SUBPARTITION sp11 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx (f_int1,f_int2) +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int2) SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0), +PARTITION part2 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` bigint(20) DEFAULT NULL, + `f_int2` bigint(20) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int2) +SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx (f_int2,f_int1) +) +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` bigint(20) DEFAULT NULL, + `f_int2` bigint(20) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1 + f_int2) +PARTITIONS 2 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx (f_int2,f_int1) +) +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` bigint(20) DEFAULT NULL, + `f_int2` bigint(20) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1,f_int2) +PARTITIONS 5 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx (f_int2,f_int1) +) +PARTITION BY LIST(MOD(f_int1 + f_int2,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` bigint(20) DEFAULT NULL, + `f_int2` bigint(20) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx (f_int2,f_int1) +) +PARTITION BY RANGE((f_int1 + f_int2) DIV 2) +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +PARTITION partc VALUES LESS THAN (10), +PARTITION partd VALUES LESS THAN (10 + 5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` bigint(20) DEFAULT NULL, + `f_int2` bigint(20) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION parte VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION partf VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx (f_int2,f_int1) +) +PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` bigint(20) DEFAULT NULL, + `f_int2` bigint(20) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY HASH (f_int2) +SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx (f_int2,f_int1) +) +PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2) +(PARTITION part1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` bigint(20) DEFAULT NULL, + `f_int2` bigint(20) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int2) +(PARTITION part1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx (f_int2,f_int1) +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1) +(PARTITION part1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` bigint(20) DEFAULT NULL, + `f_int2` bigint(20) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) +SUBPARTITION BY HASH (f_int2 + 1) +(PARTITION part1 VALUES IN (0) + (SUBPARTITION sp11 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx (f_int2,f_int1) +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int2) SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0), +PARTITION part2 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` bigint(20) DEFAULT NULL, + `f_int2` bigint(20) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int2) +SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +DROP VIEW IF EXISTS v1; +DROP TABLE IF EXISTS t1; +DROP TABLE IF EXISTS t0_aux; +DROP TABLE IF EXISTS t0_definition; +DROP TABLE IF EXISTS t0_template; diff --git a/mysql-test/suite/tokudb.parts/r-native/partition_alter2_2_1_tokudb.result b/mysql-test/suite/tokudb.parts/r-native/partition_alter2_2_1_tokudb.result new file mode 100644 index 000000000000..c2a64afaec7d --- /dev/null +++ b/mysql-test/suite/tokudb.parts/r-native/partition_alter2_2_1_tokudb.result @@ -0,0 +1,20324 @@ +SET @max_row = 20; +SET @@session.default_storage_engine = 'TokuDB'; + +#------------------------------------------------------------------------ +# 0. Setting of auxiliary variables + Creation of an auxiliary tables +# needed in many testcases +#------------------------------------------------------------------------ +SELECT @max_row DIV 2 INTO @max_row_div2; +SELECT @max_row DIV 3 INTO @max_row_div3; +SELECT @max_row DIV 4 INTO @max_row_div4; +SET @max_int_4 = 2147483647; +DROP TABLE IF EXISTS t0_template; +CREATE TABLE t0_template ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) , +PRIMARY KEY(f_int1)) +ENGINE = MEMORY; +# Logging of INSERTs into t0_template suppressed +DROP TABLE IF EXISTS t0_definition; +CREATE TABLE t0_definition ( +state CHAR(3), +create_command VARBINARY(5000), +file_list VARBINARY(10000), +PRIMARY KEY (state) +) ENGINE = MEMORY; +DROP TABLE IF EXISTS t0_aux; +CREATE TABLE t0_aux ( f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) ) +ENGINE = MEMORY; +SET AUTOCOMMIT= 1; +SET @@session.sql_mode= ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +# End of basic preparations needed for all tests +#----------------------------------------------- + +#======================================================================== +# 2 Decrease the size of the column used in the partitioning +# function and/or PRIMARY KEY and/or UNIQUE INDEX +#======================================================================== +#------------------------------------------------------------------------ +# 2.1 ALTER column f_int2 not used in partitioning function +#------------------------------------------------------------------------ +# 2.1.1 no PRIMARY KEY or UNIQUE INDEX exists +DROP TABLE IF EXISTS t1; +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; +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) DEFAULT NULL, + `f_int2` mediumint(9) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1) +PARTITIONS 2 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY KEY(f_int1) 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) DEFAULT NULL, + `f_int2` mediumint(9) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1) +PARTITIONS 5 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) DEFAULT NULL, + `f_int2` mediumint(9) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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) +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +PARTITION partc VALUES LESS THAN (10), +PARTITION partd VALUES LESS THAN (10 + 5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) DEFAULT NULL, + `f_int2` mediumint(9) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION parte VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION partf VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) DEFAULT NULL, + `f_int2` mediumint(9) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1 DIV 2) +SUBPARTITION BY HASH (f_int1) +SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 KEY(f_int1) +(PARTITION part1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) DEFAULT NULL, + `f_int2` mediumint(9) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int1) +(PARTITION part1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) +(PARTITION part1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) DEFAULT NULL, + `f_int2` mediumint(9) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB 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 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0), +PARTITION part2 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) DEFAULT NULL, + `f_int2` mediumint(9) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int1) +SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int1,f_int2) +) +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` mediumint(9) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1) +PARTITIONS 2 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int1,f_int2) +) +PARTITION BY KEY(f_int1) 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` mediumint(9) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1) +PARTITIONS 5 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int1,f_int2) +) +PARTITION BY LIST(MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` mediumint(9) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int1,f_int2) +) +PARTITION BY RANGE(f_int1) +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +PARTITION partc VALUES LESS THAN (10), +PARTITION partd VALUES LESS THAN (10 + 5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` mediumint(9) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION parte VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION partf VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int1,f_int2) +) +PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` mediumint(9) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1 DIV 2) +SUBPARTITION BY HASH (f_int1) +SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int1,f_int2) +) +PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1) +(PARTITION part1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` mediumint(9) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int1) +(PARTITION part1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int1,f_int2) +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) +(PARTITION part1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` mediumint(9) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`) +) ENGINE=TokuDB 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 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int1,f_int2) +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0), +PARTITION part2 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` mediumint(9) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int1) +SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int2,f_int1) +) +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` mediumint(9) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1) +PARTITIONS 2 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int2,f_int1) +) +PARTITION BY KEY(f_int1) 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` mediumint(9) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1) +PARTITIONS 5 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int2,f_int1) +) +PARTITION BY LIST(MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` mediumint(9) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int2,f_int1) +) +PARTITION BY RANGE(f_int1) +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +PARTITION partc VALUES LESS THAN (10), +PARTITION partd VALUES LESS THAN (10 + 5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` mediumint(9) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION parte VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION partf VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int2,f_int1) +) +PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` mediumint(9) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1 DIV 2) +SUBPARTITION BY HASH (f_int1) +SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int2,f_int1) +) +PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1) +(PARTITION part1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` mediumint(9) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int1) +(PARTITION part1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int2,f_int1) +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) +(PARTITION part1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` mediumint(9) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`) +) ENGINE=TokuDB 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 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int2,f_int1) +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0), +PARTITION part2 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` mediumint(9) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int1) +SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +# 2.1.3 UNIQUE INDEX exists +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2) +) +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) DEFAULT NULL, + `f_int2` mediumint(9) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1) +PARTITIONS 2 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2) +) +PARTITION BY KEY(f_int1) 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) DEFAULT NULL, + `f_int2` mediumint(9) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1) +PARTITIONS 5 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2) +) +PARTITION BY LIST(MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) DEFAULT NULL, + `f_int2` mediumint(9) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2) +) +PARTITION BY RANGE(f_int1) +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +PARTITION partc VALUES LESS THAN (10), +PARTITION partd VALUES LESS THAN (10 + 5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) DEFAULT NULL, + `f_int2` mediumint(9) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION parte VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION partf VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2) +) +PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) DEFAULT NULL, + `f_int2` mediumint(9) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1 DIV 2) +SUBPARTITION BY HASH (f_int1) +SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2) +) +PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1) +(PARTITION part1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) DEFAULT NULL, + `f_int2` mediumint(9) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int1) +(PARTITION part1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2) +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) +(PARTITION part1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) DEFAULT NULL, + `f_int2` mediumint(9) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`) +) ENGINE=TokuDB 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 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2) +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0), +PARTITION part2 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) DEFAULT NULL, + `f_int2` mediumint(9) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int1) +SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int2,f_int1) +) +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) DEFAULT NULL, + `f_int2` mediumint(9) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1) +PARTITIONS 2 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int2,f_int1) +) +PARTITION BY KEY(f_int1) 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) DEFAULT NULL, + `f_int2` mediumint(9) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1) +PARTITIONS 5 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int2,f_int1) +) +PARTITION BY LIST(MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) DEFAULT NULL, + `f_int2` mediumint(9) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int2,f_int1) +) +PARTITION BY RANGE(f_int1) +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +PARTITION partc VALUES LESS THAN (10), +PARTITION partd VALUES LESS THAN (10 + 5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) DEFAULT NULL, + `f_int2` mediumint(9) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION parte VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION partf VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int2,f_int1) +) +PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) DEFAULT NULL, + `f_int2` mediumint(9) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1 DIV 2) +SUBPARTITION BY HASH (f_int1) +SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int2,f_int1) +) +PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1) +(PARTITION part1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) DEFAULT NULL, + `f_int2` mediumint(9) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int1) +(PARTITION part1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int2,f_int1) +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) +(PARTITION part1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) DEFAULT NULL, + `f_int2` mediumint(9) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB 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 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int2,f_int1) +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0), +PARTITION part2 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) DEFAULT NULL, + `f_int2` mediumint(9) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int1) +SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +DROP VIEW IF EXISTS v1; +DROP TABLE IF EXISTS t1; +DROP TABLE IF EXISTS t0_aux; +DROP TABLE IF EXISTS t0_definition; +DROP TABLE IF EXISTS t0_template; diff --git a/mysql-test/suite/tokudb.parts/r-native/partition_alter2_2_2_tokudb.result b/mysql-test/suite/tokudb.parts/r-native/partition_alter2_2_2_tokudb.result new file mode 100644 index 000000000000..a1264049857f --- /dev/null +++ b/mysql-test/suite/tokudb.parts/r-native/partition_alter2_2_2_tokudb.result @@ -0,0 +1,20400 @@ +SET @max_row = 20; +SET @@session.default_storage_engine = 'TokuDB'; + +#------------------------------------------------------------------------ +# 0. Setting of auxiliary variables + Creation of an auxiliary tables +# needed in many testcases +#------------------------------------------------------------------------ +SELECT @max_row DIV 2 INTO @max_row_div2; +SELECT @max_row DIV 3 INTO @max_row_div3; +SELECT @max_row DIV 4 INTO @max_row_div4; +SET @max_int_4 = 2147483647; +DROP TABLE IF EXISTS t0_template; +CREATE TABLE t0_template ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) , +PRIMARY KEY(f_int1)) +ENGINE = MEMORY; +# Logging of INSERTs into t0_template suppressed +DROP TABLE IF EXISTS t0_definition; +CREATE TABLE t0_definition ( +state CHAR(3), +create_command VARBINARY(5000), +file_list VARBINARY(10000), +PRIMARY KEY (state) +) ENGINE = MEMORY; +DROP TABLE IF EXISTS t0_aux; +CREATE TABLE t0_aux ( f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) ) +ENGINE = MEMORY; +SET AUTOCOMMIT= 1; +SET @@session.sql_mode= ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +# End of basic preparations needed for all tests +#----------------------------------------------- +#------------------------------------------------------------------------ +# 2.3 ALTER column f_int1 and f_int2 used in partitioning function +#------------------------------------------------------------------------ +# 2.3.1 no PRIMARY KEY or UNIQUE INDEX exists +DROP TABLE IF EXISTS t1; +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 + 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` mediumint(9) DEFAULT NULL, + `f_int2` mediumint(9) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1 + f_int2) +PARTITIONS 2 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int1' at row 1 +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` mediumint(9) DEFAULT NULL, + `f_int2` mediumint(9) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1,f_int2) +PARTITIONS 5 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int1' at row 1 +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(MOD(f_int1 + f_int2,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` mediumint(9) DEFAULT NULL, + `f_int2` mediumint(9) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int1' at row 1 +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 + f_int2) DIV 2) +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +PARTITION partc VALUES LESS THAN (10), +PARTITION partd VALUES LESS THAN (10 + 5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` mediumint(9) DEFAULT NULL, + `f_int2` mediumint(9) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION parte VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION partf VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int1' at row 1 +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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_int2) SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` mediumint(9) DEFAULT NULL, + `f_int2` mediumint(9) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY HASH (f_int2) +SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int1' at row 1 +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 KEY(f_int2) +(PARTITION part1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` mediumint(9) DEFAULT NULL, + `f_int2` mediumint(9) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int2) +(PARTITION part1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int1' at row 1 +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1) +(PARTITION part1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` mediumint(9) DEFAULT NULL, + `f_int2` mediumint(9) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) +SUBPARTITION BY HASH (f_int2 + 1) +(PARTITION part1 VALUES IN (0) + (SUBPARTITION sp11 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int1' at row 1 +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int2) SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0), +PARTITION part2 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` mediumint(9) DEFAULT NULL, + `f_int2` mediumint(9) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int2) +SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int1' at row 1 +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +# 2.3.2 PRIMARY KEY exists +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int1,f_int2) +) +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` mediumint(9) NOT NULL, + `f_int2` mediumint(9) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1 + f_int2) +PARTITIONS 2 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int1' at row 1 +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int1,f_int2) +) +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` mediumint(9) NOT NULL, + `f_int2` mediumint(9) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1,f_int2) +PARTITIONS 5 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int1' at row 1 +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int1,f_int2) +) +PARTITION BY LIST(MOD(f_int1 + f_int2,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` mediumint(9) NOT NULL, + `f_int2` mediumint(9) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int1' at row 1 +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int1,f_int2) +) +PARTITION BY RANGE((f_int1 + f_int2) DIV 2) +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +PARTITION partc VALUES LESS THAN (10), +PARTITION partd VALUES LESS THAN (10 + 5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` mediumint(9) NOT NULL, + `f_int2` mediumint(9) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION parte VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION partf VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int1' at row 1 +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int1,f_int2) +) +PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` mediumint(9) NOT NULL, + `f_int2` mediumint(9) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY HASH (f_int2) +SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int1' at row 1 +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int1,f_int2) +) +PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2) +(PARTITION part1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` mediumint(9) NOT NULL, + `f_int2` mediumint(9) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int2) +(PARTITION part1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int1' at row 1 +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int1,f_int2) +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1) +(PARTITION part1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` mediumint(9) NOT NULL, + `f_int2` mediumint(9) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) +SUBPARTITION BY HASH (f_int2 + 1) +(PARTITION part1 VALUES IN (0) + (SUBPARTITION sp11 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int1' at row 1 +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int1,f_int2) +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int2) SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0), +PARTITION part2 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` mediumint(9) NOT NULL, + `f_int2` mediumint(9) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int2) +SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int1' at row 1 +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int2,f_int1) +) +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` mediumint(9) NOT NULL, + `f_int2` mediumint(9) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1 + f_int2) +PARTITIONS 2 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int1' at row 1 +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int2,f_int1) +) +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` mediumint(9) NOT NULL, + `f_int2` mediumint(9) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1,f_int2) +PARTITIONS 5 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int1' at row 1 +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int2,f_int1) +) +PARTITION BY LIST(MOD(f_int1 + f_int2,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` mediumint(9) NOT NULL, + `f_int2` mediumint(9) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int1' at row 1 +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int2,f_int1) +) +PARTITION BY RANGE((f_int1 + f_int2) DIV 2) +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +PARTITION partc VALUES LESS THAN (10), +PARTITION partd VALUES LESS THAN (10 + 5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` mediumint(9) NOT NULL, + `f_int2` mediumint(9) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION parte VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION partf VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int1' at row 1 +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int2,f_int1) +) +PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` mediumint(9) NOT NULL, + `f_int2` mediumint(9) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY HASH (f_int2) +SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int1' at row 1 +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int2,f_int1) +) +PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2) +(PARTITION part1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` mediumint(9) NOT NULL, + `f_int2` mediumint(9) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int2) +(PARTITION part1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int1' at row 1 +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int2,f_int1) +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1) +(PARTITION part1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` mediumint(9) NOT NULL, + `f_int2` mediumint(9) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) +SUBPARTITION BY HASH (f_int2 + 1) +(PARTITION part1 VALUES IN (0) + (SUBPARTITION sp11 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int1' at row 1 +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, PRIMARY KEY (f_int2,f_int1) +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int2) SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0), +PARTITION part2 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` mediumint(9) NOT NULL, + `f_int2` mediumint(9) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int2) +SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int1' at row 1 +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +# 2.3.3 UNIQUE INDEX exists +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx (f_int1,f_int2) +) +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` mediumint(9) DEFAULT NULL, + `f_int2` mediumint(9) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1 + f_int2) +PARTITIONS 2 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int1' at row 1 +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx (f_int1,f_int2) +) +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` mediumint(9) DEFAULT NULL, + `f_int2` mediumint(9) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1,f_int2) +PARTITIONS 5 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int1' at row 1 +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx (f_int1,f_int2) +) +PARTITION BY LIST(MOD(f_int1 + f_int2,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` mediumint(9) DEFAULT NULL, + `f_int2` mediumint(9) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int1' at row 1 +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx (f_int1,f_int2) +) +PARTITION BY RANGE((f_int1 + f_int2) DIV 2) +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +PARTITION partc VALUES LESS THAN (10), +PARTITION partd VALUES LESS THAN (10 + 5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` mediumint(9) DEFAULT NULL, + `f_int2` mediumint(9) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION parte VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION partf VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int1' at row 1 +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx (f_int1,f_int2) +) +PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` mediumint(9) DEFAULT NULL, + `f_int2` mediumint(9) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY HASH (f_int2) +SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int1' at row 1 +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx (f_int1,f_int2) +) +PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2) +(PARTITION part1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` mediumint(9) DEFAULT NULL, + `f_int2` mediumint(9) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int2) +(PARTITION part1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int1' at row 1 +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx (f_int1,f_int2) +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1) +(PARTITION part1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` mediumint(9) DEFAULT NULL, + `f_int2` mediumint(9) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) +SUBPARTITION BY HASH (f_int2 + 1) +(PARTITION part1 VALUES IN (0) + (SUBPARTITION sp11 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int1' at row 1 +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx (f_int1,f_int2) +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int2) SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0), +PARTITION part2 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` mediumint(9) DEFAULT NULL, + `f_int2` mediumint(9) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int2) +SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int1' at row 1 +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx (f_int2,f_int1) +) +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` mediumint(9) DEFAULT NULL, + `f_int2` mediumint(9) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1 + f_int2) +PARTITIONS 2 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int1' at row 1 +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx (f_int2,f_int1) +) +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` mediumint(9) DEFAULT NULL, + `f_int2` mediumint(9) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1,f_int2) +PARTITIONS 5 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int1' at row 1 +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx (f_int2,f_int1) +) +PARTITION BY LIST(MOD(f_int1 + f_int2,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` mediumint(9) DEFAULT NULL, + `f_int2` mediumint(9) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int1' at row 1 +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx (f_int2,f_int1) +) +PARTITION BY RANGE((f_int1 + f_int2) DIV 2) +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +PARTITION partc VALUES LESS THAN (10), +PARTITION partd VALUES LESS THAN (10 + 5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` mediumint(9) DEFAULT NULL, + `f_int2` mediumint(9) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION parte VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION partf VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int1' at row 1 +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx (f_int2,f_int1) +) +PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` mediumint(9) DEFAULT NULL, + `f_int2` mediumint(9) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY HASH (f_int2) +SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int1' at row 1 +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx (f_int2,f_int1) +) +PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2) +(PARTITION part1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` mediumint(9) DEFAULT NULL, + `f_int2` mediumint(9) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int2) +(PARTITION part1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int1' at row 1 +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx (f_int2,f_int1) +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1) +(PARTITION part1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` mediumint(9) DEFAULT NULL, + `f_int2` mediumint(9) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) +SUBPARTITION BY HASH (f_int2 + 1) +(PARTITION part1 VALUES IN (0) + (SUBPARTITION sp11 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int1' at row 1 +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx (f_int2,f_int1) +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int2) SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0), +PARTITION part2 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` mediumint(9) DEFAULT NULL, + `f_int2` mediumint(9) DEFAULT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + UNIQUE KEY `uidx` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int2) +SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +Warnings: +Warning 1264 Out of range value for column 'f_int1' at row 1 +Warning 1264 Out of range value for column 'f_int2' at row 1 + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +DROP VIEW IF EXISTS v1; +DROP TABLE IF EXISTS t1; +DROP TABLE IF EXISTS t0_aux; +DROP TABLE IF EXISTS t0_definition; +DROP TABLE IF EXISTS t0_template; diff --git a/mysql-test/suite/tokudb.parts/r-native/partition_alter3_tokudb.result b/mysql-test/suite/tokudb.parts/r-native/partition_alter3_tokudb.result new file mode 100644 index 000000000000..9617ec94653f --- /dev/null +++ b/mysql-test/suite/tokudb.parts/r-native/partition_alter3_tokudb.result @@ -0,0 +1,966 @@ +SET @max_row = 20; +SET @@session.default_storage_engine = 'TokuDB'; + +#------------------------------------------------------------------------ +# 0. Setting of auxiliary variables + Creation of an auxiliary tables +# needed in many testcases +#------------------------------------------------------------------------ +SELECT @max_row DIV 2 INTO @max_row_div2; +SELECT @max_row DIV 3 INTO @max_row_div3; +SELECT @max_row DIV 4 INTO @max_row_div4; +SET @max_int_4 = 2147483647; +DROP TABLE IF EXISTS t0_template; +CREATE TABLE t0_template ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) , +PRIMARY KEY(f_int1)) +ENGINE = MEMORY; +# Logging of INSERTs into t0_template suppressed +DROP TABLE IF EXISTS t0_definition; +CREATE TABLE t0_definition ( +state CHAR(3), +create_command VARBINARY(5000), +file_list VARBINARY(10000), +PRIMARY KEY (state) +) ENGINE = MEMORY; +DROP TABLE IF EXISTS t0_aux; +CREATE TABLE t0_aux ( f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) ) +ENGINE = MEMORY; +SET AUTOCOMMIT= 1; +SET @@session.sql_mode= ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +# End of basic preparations needed for all tests +#----------------------------------------------- + +#======================================================================== +# 1. Partition management commands on HASH partitioned table +# column in partitioning function is of type DATE +#======================================================================== +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 (f_date DATE, f_varchar VARCHAR(30)); +INSERT INTO t1 (f_date, f_varchar) +SELECT CONCAT(CAST((f_int1 + 999) AS CHAR),'-02-10'), CAST(f_char1 AS CHAR) +FROM t0_template +WHERE f_int1 + 999 BETWEEN 1000 AND 9999; +SELECT IF(9999 - 1000 + 1 > @max_row, @max_row , 9999 - 1000 + 1) +INTO @exp_row_count; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_date` date DEFAULT NULL, + `f_varchar` varchar(30) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +t1.frm +t1_main_id.tokudb +t1_status_id.tokudb +EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10'; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 20 10.00 Using where +Warnings: +Warning 1681 'PARTITIONS' is deprecated and will be removed in a future release. +Note 1003 /* select#1 */ select count(0) AS `COUNT(*)` from `test`.`t1` where (`test`.`t1`.`f_date` = '1000-02-10') +# check read single success: 1 +# check read all success: 1 +# check read row by row success: 1 +#------------------------------------------------------------------------ +# 1.1 Increase number of PARTITIONS +#------------------------------------------------------------------------ +# 1.1.1 ADD PARTITION to not partitioned table --> must fail +ALTER TABLE t1 ADD PARTITION (PARTITION part2); +ERROR HY000: Partition management on a not partitioned table is not possible +# 1.1.2 Assign HASH partitioning +ALTER TABLE t1 PARTITION BY HASH(YEAR(f_date)); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_date` date DEFAULT NULL, + `f_varchar` varchar(30) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (YEAR(f_date)) */ +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10'; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 20 10.00 Using where +Warnings: +Warning 1681 'PARTITIONS' is deprecated and will be removed in a future release. +Note 1003 /* select#1 */ select count(0) AS `COUNT(*)` from `test`.`t1` where (`test`.`t1`.`f_date` = '1000-02-10') +# check read single success: 1 +# check read all success: 1 +# check read row by row success: 1 +# 1.1.3 Assign other HASH partitioning to already partitioned table +# + test and switch back + test +ALTER TABLE t1 PARTITION BY HASH(DAYOFYEAR(f_date)); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_date` date DEFAULT NULL, + `f_varchar` varchar(30) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (DAYOFYEAR(f_date)) */ +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10'; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 20 10.00 Using where +Warnings: +Warning 1681 'PARTITIONS' is deprecated and will be removed in a future release. +Note 1003 /* select#1 */ select count(0) AS `COUNT(*)` from `test`.`t1` where (`test`.`t1`.`f_date` = '1000-02-10') +# check read single success: 1 +# check read all success: 1 +# check read row by row success: 1 +ALTER TABLE t1 PARTITION BY HASH(YEAR(f_date)); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_date` date DEFAULT NULL, + `f_varchar` varchar(30) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (YEAR(f_date)) */ +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10'; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 20 10.00 Using where +Warnings: +Warning 1681 'PARTITIONS' is deprecated and will be removed in a future release. +Note 1003 /* select#1 */ select count(0) AS `COUNT(*)` from `test`.`t1` where (`test`.`t1`.`f_date` = '1000-02-10') +# check read single success: 1 +# check read all success: 1 +# check read row by row success: 1 +# 1.1.4 Add PARTITIONS not fitting to HASH --> must fail +ALTER TABLE t1 ADD PARTITION (PARTITION part1 VALUES IN (0)); +ERROR HY000: Only LIST PARTITIONING can use VALUES IN in partition definition +ALTER TABLE t1 ADD PARTITION (PARTITION part2 VALUES LESS THAN (0)); +ERROR HY000: Only RANGE PARTITIONING can use VALUES LESS THAN in partition definition +# 1.1.5 Add two named partitions + test +ALTER TABLE t1 ADD PARTITION (PARTITION part1, PARTITION part7); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_date` date DEFAULT NULL, + `f_varchar` varchar(30) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (YEAR(f_date)) +(PARTITION p0 ENGINE = TokuDB, + PARTITION part1 ENGINE = TokuDB, + PARTITION part7 ENGINE = TokuDB) */ +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_part1_main_id.tokudb +t1_P_part1_status_id.tokudb +t1_P_part7_main_id.tokudb +t1_P_part7_status_id.tokudb +EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10'; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 part1 ALL NULL NULL NULL NULL 7 14.29 Using where +Warnings: +Warning 1681 'PARTITIONS' is deprecated and will be removed in a future release. +Note 1003 /* select#1 */ select count(0) AS `COUNT(*)` from `test`.`t1` where (`test`.`t1`.`f_date` = '1000-02-10') +# check read single success: 1 +# check read all success: 1 +# check read row by row success: 1 +# 1.1.6 Add two named partitions, name clash --> must fail +ALTER TABLE t1 ADD PARTITION (PARTITION part1, PARTITION part7); +ERROR HY000: Duplicate partition name part1 +# 1.1.7 Add one named partition + test +ALTER TABLE t1 ADD PARTITION (PARTITION part2); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_date` date DEFAULT NULL, + `f_varchar` varchar(30) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (YEAR(f_date)) +(PARTITION p0 ENGINE = TokuDB, + PARTITION part1 ENGINE = TokuDB, + PARTITION part7 ENGINE = TokuDB, + PARTITION part2 ENGINE = TokuDB) */ +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_part1_main_id.tokudb +t1_P_part1_status_id.tokudb +t1_P_part2_main_id.tokudb +t1_P_part2_status_id.tokudb +t1_P_part7_main_id.tokudb +t1_P_part7_status_id.tokudb +EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10'; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 5 20.00 Using where +Warnings: +Warning 1681 'PARTITIONS' is deprecated and will be removed in a future release. +Note 1003 /* select#1 */ select count(0) AS `COUNT(*)` from `test`.`t1` where (`test`.`t1`.`f_date` = '1000-02-10') +# check read single success: 1 +# check read all success: 1 +# check read row by row success: 1 +# 1.1.8 Add four not named partitions + test +ALTER TABLE t1 ADD PARTITION PARTITIONS 4; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_date` date DEFAULT NULL, + `f_varchar` varchar(30) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (YEAR(f_date)) +(PARTITION p0 ENGINE = TokuDB, + PARTITION part1 ENGINE = TokuDB, + PARTITION part7 ENGINE = TokuDB, + PARTITION part2 ENGINE = TokuDB, + PARTITION p4 ENGINE = TokuDB, + PARTITION p5 ENGINE = TokuDB, + PARTITION p6 ENGINE = TokuDB, + PARTITION p7 ENGINE = TokuDB) */ +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p4_main_id.tokudb +t1_P_p4_status_id.tokudb +t1_P_p5_main_id.tokudb +t1_P_p5_status_id.tokudb +t1_P_p6_main_id.tokudb +t1_P_p6_status_id.tokudb +t1_P_p7_main_id.tokudb +t1_P_p7_status_id.tokudb +t1_P_part1_main_id.tokudb +t1_P_part1_status_id.tokudb +t1_P_part2_main_id.tokudb +t1_P_part2_status_id.tokudb +t1_P_part7_main_id.tokudb +t1_P_part7_status_id.tokudb +EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10'; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 3 33.33 Using where +Warnings: +Warning 1681 'PARTITIONS' is deprecated and will be removed in a future release. +Note 1003 /* select#1 */ select count(0) AS `COUNT(*)` from `test`.`t1` where (`test`.`t1`.`f_date` = '1000-02-10') +# check read single success: 1 +# check read all success: 1 +# check read row by row success: 1 +#------------------------------------------------------------------------ +# 1.2 Decrease number of PARTITIONS +#------------------------------------------------------------------------ +# 1.2.1 DROP PARTITION is not supported for HASH --> must fail +ALTER TABLE t1 DROP PARTITION part1; +ERROR HY000: DROP PARTITION can only be used on RANGE/LIST partitions +# 1.2.2 COALESCE PARTITION partitionname is not supported +ALTER TABLE t1 COALESCE PARTITION part1; +ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'part1' at line 1 +# 1.2.3 Decrease by 0 is non sense --> must fail +ALTER TABLE t1 COALESCE PARTITION 0; +ERROR HY000: At least one partition must be coalesced +# 1.2.4 COALESCE one partition + test loop +ALTER TABLE t1 COALESCE PARTITION 1; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_date` date DEFAULT NULL, + `f_varchar` varchar(30) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (YEAR(f_date)) +(PARTITION p0 ENGINE = TokuDB, + PARTITION part1 ENGINE = TokuDB, + PARTITION part7 ENGINE = TokuDB, + PARTITION part2 ENGINE = TokuDB, + PARTITION p4 ENGINE = TokuDB, + PARTITION p5 ENGINE = TokuDB, + PARTITION p6 ENGINE = TokuDB) */ +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p4_main_id.tokudb +t1_P_p4_status_id.tokudb +t1_P_p5_main_id.tokudb +t1_P_p5_status_id.tokudb +t1_P_p6_main_id.tokudb +t1_P_p6_status_id.tokudb +t1_P_part1_main_id.tokudb +t1_P_part1_status_id.tokudb +t1_P_part2_main_id.tokudb +t1_P_part2_status_id.tokudb +t1_P_part7_main_id.tokudb +t1_P_part7_status_id.tokudb +EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10'; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p6 ALL NULL NULL NULL NULL 3 33.33 Using where +Warnings: +Warning 1681 'PARTITIONS' is deprecated and will be removed in a future release. +Note 1003 /* select#1 */ select count(0) AS `COUNT(*)` from `test`.`t1` where (`test`.`t1`.`f_date` = '1000-02-10') +# check read single success: 1 +# check read all success: 1 +# check read row by row success: 1 +ALTER TABLE t1 COALESCE PARTITION 1; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_date` date DEFAULT NULL, + `f_varchar` varchar(30) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (YEAR(f_date)) +(PARTITION p0 ENGINE = TokuDB, + PARTITION part1 ENGINE = TokuDB, + PARTITION part7 ENGINE = TokuDB, + PARTITION part2 ENGINE = TokuDB, + PARTITION p4 ENGINE = TokuDB, + PARTITION p5 ENGINE = TokuDB) */ +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p4_main_id.tokudb +t1_P_p4_status_id.tokudb +t1_P_p5_main_id.tokudb +t1_P_p5_status_id.tokudb +t1_P_part1_main_id.tokudb +t1_P_part1_status_id.tokudb +t1_P_part2_main_id.tokudb +t1_P_part2_status_id.tokudb +t1_P_part7_main_id.tokudb +t1_P_part7_status_id.tokudb +EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10'; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p4 ALL NULL NULL NULL NULL 4 25.00 Using where +Warnings: +Warning 1681 'PARTITIONS' is deprecated and will be removed in a future release. +Note 1003 /* select#1 */ select count(0) AS `COUNT(*)` from `test`.`t1` where (`test`.`t1`.`f_date` = '1000-02-10') +# check read single success: 1 +# check read all success: 1 +# check read row by row success: 1 +ALTER TABLE t1 COALESCE PARTITION 1; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_date` date DEFAULT NULL, + `f_varchar` varchar(30) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (YEAR(f_date)) +(PARTITION p0 ENGINE = TokuDB, + PARTITION part1 ENGINE = TokuDB, + PARTITION part7 ENGINE = TokuDB, + PARTITION part2 ENGINE = TokuDB, + PARTITION p4 ENGINE = TokuDB) */ +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p4_main_id.tokudb +t1_P_p4_status_id.tokudb +t1_P_part1_main_id.tokudb +t1_P_part1_status_id.tokudb +t1_P_part2_main_id.tokudb +t1_P_part2_status_id.tokudb +t1_P_part7_main_id.tokudb +t1_P_part7_status_id.tokudb +EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10'; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 4 25.00 Using where +Warnings: +Warning 1681 'PARTITIONS' is deprecated and will be removed in a future release. +Note 1003 /* select#1 */ select count(0) AS `COUNT(*)` from `test`.`t1` where (`test`.`t1`.`f_date` = '1000-02-10') +# check read single success: 1 +# check read all success: 1 +# check read row by row success: 1 +ALTER TABLE t1 COALESCE PARTITION 1; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_date` date DEFAULT NULL, + `f_varchar` varchar(30) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (YEAR(f_date)) +(PARTITION p0 ENGINE = TokuDB, + PARTITION part1 ENGINE = TokuDB, + PARTITION part7 ENGINE = TokuDB, + PARTITION part2 ENGINE = TokuDB) */ +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_part1_main_id.tokudb +t1_P_part1_status_id.tokudb +t1_P_part2_main_id.tokudb +t1_P_part2_status_id.tokudb +t1_P_part7_main_id.tokudb +t1_P_part7_status_id.tokudb +EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10'; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 5 20.00 Using where +Warnings: +Warning 1681 'PARTITIONS' is deprecated and will be removed in a future release. +Note 1003 /* select#1 */ select count(0) AS `COUNT(*)` from `test`.`t1` where (`test`.`t1`.`f_date` = '1000-02-10') +# check read single success: 1 +# check read all success: 1 +# check read row by row success: 1 +ALTER TABLE t1 COALESCE PARTITION 1; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_date` date DEFAULT NULL, + `f_varchar` varchar(30) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (YEAR(f_date)) +(PARTITION p0 ENGINE = TokuDB, + PARTITION part1 ENGINE = TokuDB, + PARTITION part7 ENGINE = TokuDB) */ +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_part1_main_id.tokudb +t1_P_part1_status_id.tokudb +t1_P_part7_main_id.tokudb +t1_P_part7_status_id.tokudb +EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10'; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 part1 ALL NULL NULL NULL NULL 7 14.29 Using where +Warnings: +Warning 1681 'PARTITIONS' is deprecated and will be removed in a future release. +Note 1003 /* select#1 */ select count(0) AS `COUNT(*)` from `test`.`t1` where (`test`.`t1`.`f_date` = '1000-02-10') +# check read single success: 1 +# check read all success: 1 +# check read row by row success: 1 +ALTER TABLE t1 COALESCE PARTITION 1; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_date` date DEFAULT NULL, + `f_varchar` varchar(30) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (YEAR(f_date)) +(PARTITION p0 ENGINE = TokuDB, + PARTITION part1 ENGINE = TokuDB) */ +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_part1_main_id.tokudb +t1_P_part1_status_id.tokudb +EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10'; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 10 10.00 Using where +Warnings: +Warning 1681 'PARTITIONS' is deprecated and will be removed in a future release. +Note 1003 /* select#1 */ select count(0) AS `COUNT(*)` from `test`.`t1` where (`test`.`t1`.`f_date` = '1000-02-10') +# check read single success: 1 +# check read all success: 1 +# check read row by row success: 1 +ALTER TABLE t1 COALESCE PARTITION 1; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_date` date DEFAULT NULL, + `f_varchar` varchar(30) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (YEAR(f_date)) +(PARTITION p0 ENGINE = TokuDB) */ +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10'; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 20 10.00 Using where +Warnings: +Warning 1681 'PARTITIONS' is deprecated and will be removed in a future release. +Note 1003 /* select#1 */ select count(0) AS `COUNT(*)` from `test`.`t1` where (`test`.`t1`.`f_date` = '1000-02-10') +# check read single success: 1 +# check read all success: 1 +# check read row by row success: 1 +# 1.2.5 COALESCE of last partition --> must fail +ALTER TABLE t1 COALESCE PARTITION 1; +ERROR HY000: Cannot remove all partitions, use DROP TABLE instead +# 1.2.6 Remove partitioning +ALTER TABLE t1 REMOVE PARTITIONING; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_date` date DEFAULT NULL, + `f_varchar` varchar(30) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +t1.frm +t1_main_id.tokudb +t1_status_id.tokudb +EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10'; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 20 10.00 Using where +Warnings: +Warning 1681 'PARTITIONS' is deprecated and will be removed in a future release. +Note 1003 /* select#1 */ select count(0) AS `COUNT(*)` from `test`.`t1` where (`test`.`t1`.`f_date` = '1000-02-10') +# check read single success: 1 +# check read all success: 1 +# check read row by row success: 1 +# 1.2.7 Remove partitioning from not partitioned table --> ???? +ALTER TABLE t1 REMOVE PARTITIONING; +ERROR HY000: Partition management on a not partitioned table is not possible +DROP TABLE t1; +# Attention: There are unused files. +# Either the DROP TABLE or a preceding ALTER TABLE +# worked incomplete. +# We found: +unified filelist +--- not determined --- + +#======================================================================== +# 2. Partition management commands on KEY partitioned table +#======================================================================== +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template; +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=TokuDB DEFAULT CHARSET=latin1 +t1.frm +t1_main_id.tokudb +t1_status_id.tokudb +EXPLAIN PARTITIONS SELECT COUNT(*) <> 1 FROM t1 WHERE f_int1 = 3; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 20 10.00 Using where +Warnings: +Warning 1681 'PARTITIONS' is deprecated and will be removed in a future release. +Note 1003 /* select#1 */ select (count(0) <> 1) AS `COUNT(*) <> 1` from `test`.`t1` where (`test`.`t1`.`f_int1` = 3) +# check read single success: 1 +# check read all success: 1 +# check read row by row success: 1 +#------------------------------------------------------------------------ +# 2.1 Increase number of PARTITIONS +# Some negative testcases are omitted (already checked with HASH). +#------------------------------------------------------------------------ +# 2.1.1 Assign KEY partitioning +ALTER TABLE t1 PARTITION BY KEY(f_int1); +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1) */ +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +EXPLAIN PARTITIONS SELECT COUNT(*) <> 1 FROM t1 WHERE f_int1 = 3; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 20 10.00 Using where +Warnings: +Warning 1681 'PARTITIONS' is deprecated and will be removed in a future release. +Note 1003 /* select#1 */ select (count(0) <> 1) AS `COUNT(*) <> 1` from `test`.`t1` where (`test`.`t1`.`f_int1` = 3) +# check read single success: 1 +# check read all success: 1 +# check read row by row success: 1 +# 2.1.2 Add PARTITIONS not fitting to KEY --> must fail +ALTER TABLE t1 ADD PARTITION (PARTITION part1 VALUES IN (0)); +ERROR HY000: Only LIST PARTITIONING can use VALUES IN in partition definition +ALTER TABLE t1 ADD PARTITION (PARTITION part2 VALUES LESS THAN (0)); +ERROR HY000: Only RANGE PARTITIONING can use VALUES LESS THAN in partition definition +# 2.1.3 Add two named partitions + test +ALTER TABLE t1 ADD PARTITION (PARTITION part1, PARTITION part7); +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1) +(PARTITION p0 ENGINE = TokuDB, + PARTITION part1 ENGINE = TokuDB, + PARTITION part7 ENGINE = TokuDB) */ +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_part1_main_id.tokudb +t1_P_part1_status_id.tokudb +t1_P_part7_main_id.tokudb +t1_P_part7_status_id.tokudb +EXPLAIN PARTITIONS SELECT COUNT(*) <> 1 FROM t1 WHERE f_int1 = 3; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 part7 ALL NULL NULL NULL NULL 7 14.29 Using where +Warnings: +Warning 1681 'PARTITIONS' is deprecated and will be removed in a future release. +Note 1003 /* select#1 */ select (count(0) <> 1) AS `COUNT(*) <> 1` from `test`.`t1` where (`test`.`t1`.`f_int1` = 3) +# check read single success: 1 +# check read all success: 1 +# check read row by row success: 1 +# 2.1.4 Add one named partition + test +ALTER TABLE t1 ADD PARTITION (PARTITION part2); +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1) +(PARTITION p0 ENGINE = TokuDB, + PARTITION part1 ENGINE = TokuDB, + PARTITION part7 ENGINE = TokuDB, + PARTITION part2 ENGINE = TokuDB) */ +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_part1_main_id.tokudb +t1_P_part1_status_id.tokudb +t1_P_part2_main_id.tokudb +t1_P_part2_status_id.tokudb +t1_P_part7_main_id.tokudb +t1_P_part7_status_id.tokudb +EXPLAIN PARTITIONS SELECT COUNT(*) <> 1 FROM t1 WHERE f_int1 = 3; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 part7 ALL NULL NULL NULL NULL 5 20.00 Using where +Warnings: +Warning 1681 'PARTITIONS' is deprecated and will be removed in a future release. +Note 1003 /* select#1 */ select (count(0) <> 1) AS `COUNT(*) <> 1` from `test`.`t1` where (`test`.`t1`.`f_int1` = 3) +# check read single success: 1 +# check read all success: 1 +# check read row by row success: 1 +# 2.1.5 Add four not named partitions + test +ALTER TABLE t1 ADD PARTITION PARTITIONS 4; +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1) +(PARTITION p0 ENGINE = TokuDB, + PARTITION part1 ENGINE = TokuDB, + PARTITION part7 ENGINE = TokuDB, + PARTITION part2 ENGINE = TokuDB, + PARTITION p4 ENGINE = TokuDB, + PARTITION p5 ENGINE = TokuDB, + PARTITION p6 ENGINE = TokuDB, + PARTITION p7 ENGINE = TokuDB) */ +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p4_main_id.tokudb +t1_P_p4_status_id.tokudb +t1_P_p5_main_id.tokudb +t1_P_p5_status_id.tokudb +t1_P_p6_main_id.tokudb +t1_P_p6_status_id.tokudb +t1_P_p7_main_id.tokudb +t1_P_p7_status_id.tokudb +t1_P_part1_main_id.tokudb +t1_P_part1_status_id.tokudb +t1_P_part2_main_id.tokudb +t1_P_part2_status_id.tokudb +t1_P_part7_main_id.tokudb +t1_P_part7_status_id.tokudb +EXPLAIN PARTITIONS SELECT COUNT(*) <> 1 FROM t1 WHERE f_int1 = 3; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p6 ALL NULL NULL NULL NULL 3 33.33 Using where +Warnings: +Warning 1681 'PARTITIONS' is deprecated and will be removed in a future release. +Note 1003 /* select#1 */ select (count(0) <> 1) AS `COUNT(*) <> 1` from `test`.`t1` where (`test`.`t1`.`f_int1` = 3) +# check read single success: 1 +# check read all success: 1 +# check read row by row success: 1 +#------------------------------------------------------------------------ +# 2.2 Decrease number of PARTITIONS +# Some negative testcases are omitted (already checked with HASH). +#------------------------------------------------------------------------ +# 2.2.1 DROP PARTITION is not supported for KEY --> must fail +ALTER TABLE t1 DROP PARTITION part1; +ERROR HY000: DROP PARTITION can only be used on RANGE/LIST partitions +# 2.2.4 COALESCE one partition + test loop +ALTER TABLE t1 COALESCE PARTITION 1; +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1) +(PARTITION p0 ENGINE = TokuDB, + PARTITION part1 ENGINE = TokuDB, + PARTITION part7 ENGINE = TokuDB, + PARTITION part2 ENGINE = TokuDB, + PARTITION p4 ENGINE = TokuDB, + PARTITION p5 ENGINE = TokuDB, + PARTITION p6 ENGINE = TokuDB) */ +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p4_main_id.tokudb +t1_P_p4_status_id.tokudb +t1_P_p5_main_id.tokudb +t1_P_p5_status_id.tokudb +t1_P_p6_main_id.tokudb +t1_P_p6_status_id.tokudb +t1_P_part1_main_id.tokudb +t1_P_part1_status_id.tokudb +t1_P_part2_main_id.tokudb +t1_P_part2_status_id.tokudb +t1_P_part7_main_id.tokudb +t1_P_part7_status_id.tokudb +EXPLAIN PARTITIONS SELECT COUNT(*) <> 1 FROM t1 WHERE f_int1 = 3; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 4 25.00 Using where +Warnings: +Warning 1681 'PARTITIONS' is deprecated and will be removed in a future release. +Note 1003 /* select#1 */ select (count(0) <> 1) AS `COUNT(*) <> 1` from `test`.`t1` where (`test`.`t1`.`f_int1` = 3) +# check read single success: 1 +# check read all success: 1 +# check read row by row success: 1 +ALTER TABLE t1 COALESCE PARTITION 1; +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1) +(PARTITION p0 ENGINE = TokuDB, + PARTITION part1 ENGINE = TokuDB, + PARTITION part7 ENGINE = TokuDB, + PARTITION part2 ENGINE = TokuDB, + PARTITION p4 ENGINE = TokuDB, + PARTITION p5 ENGINE = TokuDB) */ +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p4_main_id.tokudb +t1_P_p4_status_id.tokudb +t1_P_p5_main_id.tokudb +t1_P_p5_status_id.tokudb +t1_P_part1_main_id.tokudb +t1_P_part1_status_id.tokudb +t1_P_part2_main_id.tokudb +t1_P_part2_status_id.tokudb +t1_P_part7_main_id.tokudb +t1_P_part7_status_id.tokudb +EXPLAIN PARTITIONS SELECT COUNT(*) <> 1 FROM t1 WHERE f_int1 = 3; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 part7 ALL NULL NULL NULL NULL 3 33.33 Using where +Warnings: +Warning 1681 'PARTITIONS' is deprecated and will be removed in a future release. +Note 1003 /* select#1 */ select (count(0) <> 1) AS `COUNT(*) <> 1` from `test`.`t1` where (`test`.`t1`.`f_int1` = 3) +# check read single success: 1 +# check read all success: 1 +# check read row by row success: 1 +ALTER TABLE t1 COALESCE PARTITION 1; +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1) +(PARTITION p0 ENGINE = TokuDB, + PARTITION part1 ENGINE = TokuDB, + PARTITION part7 ENGINE = TokuDB, + PARTITION part2 ENGINE = TokuDB, + PARTITION p4 ENGINE = TokuDB) */ +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p4_main_id.tokudb +t1_P_p4_status_id.tokudb +t1_P_part1_main_id.tokudb +t1_P_part1_status_id.tokudb +t1_P_part2_main_id.tokudb +t1_P_part2_status_id.tokudb +t1_P_part7_main_id.tokudb +t1_P_part7_status_id.tokudb +EXPLAIN PARTITIONS SELECT COUNT(*) <> 1 FROM t1 WHERE f_int1 = 3; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p4 ALL NULL NULL NULL NULL 10 10.00 Using where +Warnings: +Warning 1681 'PARTITIONS' is deprecated and will be removed in a future release. +Note 1003 /* select#1 */ select (count(0) <> 1) AS `COUNT(*) <> 1` from `test`.`t1` where (`test`.`t1`.`f_int1` = 3) +# check read single success: 1 +# check read all success: 1 +# check read row by row success: 1 +ALTER TABLE t1 COALESCE PARTITION 1; +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1) +(PARTITION p0 ENGINE = TokuDB, + PARTITION part1 ENGINE = TokuDB, + PARTITION part7 ENGINE = TokuDB, + PARTITION part2 ENGINE = TokuDB) */ +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_part1_main_id.tokudb +t1_P_part1_status_id.tokudb +t1_P_part2_main_id.tokudb +t1_P_part2_status_id.tokudb +t1_P_part7_main_id.tokudb +t1_P_part7_status_id.tokudb +EXPLAIN PARTITIONS SELECT COUNT(*) <> 1 FROM t1 WHERE f_int1 = 3; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 part7 ALL NULL NULL NULL NULL 5 20.00 Using where +Warnings: +Warning 1681 'PARTITIONS' is deprecated and will be removed in a future release. +Note 1003 /* select#1 */ select (count(0) <> 1) AS `COUNT(*) <> 1` from `test`.`t1` where (`test`.`t1`.`f_int1` = 3) +# check read single success: 1 +# check read all success: 1 +# check read row by row success: 1 +ALTER TABLE t1 COALESCE PARTITION 1; +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1) +(PARTITION p0 ENGINE = TokuDB, + PARTITION part1 ENGINE = TokuDB, + PARTITION part7 ENGINE = TokuDB) */ +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_part1_main_id.tokudb +t1_P_part1_status_id.tokudb +t1_P_part7_main_id.tokudb +t1_P_part7_status_id.tokudb +EXPLAIN PARTITIONS SELECT COUNT(*) <> 1 FROM t1 WHERE f_int1 = 3; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 part7 ALL NULL NULL NULL NULL 7 14.29 Using where +Warnings: +Warning 1681 'PARTITIONS' is deprecated and will be removed in a future release. +Note 1003 /* select#1 */ select (count(0) <> 1) AS `COUNT(*) <> 1` from `test`.`t1` where (`test`.`t1`.`f_int1` = 3) +# check read single success: 1 +# check read all success: 1 +# check read row by row success: 1 +ALTER TABLE t1 COALESCE PARTITION 1; +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1) +(PARTITION p0 ENGINE = TokuDB, + PARTITION part1 ENGINE = TokuDB) */ +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_part1_main_id.tokudb +t1_P_part1_status_id.tokudb +EXPLAIN PARTITIONS SELECT COUNT(*) <> 1 FROM t1 WHERE f_int1 = 3; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 10 10.00 Using where +Warnings: +Warning 1681 'PARTITIONS' is deprecated and will be removed in a future release. +Note 1003 /* select#1 */ select (count(0) <> 1) AS `COUNT(*) <> 1` from `test`.`t1` where (`test`.`t1`.`f_int1` = 3) +# check read single success: 1 +# check read all success: 1 +# check read row by row success: 1 +ALTER TABLE t1 COALESCE PARTITION 1; +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1) +(PARTITION p0 ENGINE = TokuDB) */ +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +EXPLAIN PARTITIONS SELECT COUNT(*) <> 1 FROM t1 WHERE f_int1 = 3; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 20 10.00 Using where +Warnings: +Warning 1681 'PARTITIONS' is deprecated and will be removed in a future release. +Note 1003 /* select#1 */ select (count(0) <> 1) AS `COUNT(*) <> 1` from `test`.`t1` where (`test`.`t1`.`f_int1` = 3) +# check read single success: 1 +# check read all success: 1 +# check read row by row success: 1 +# 2.2.5 COALESCE of last partition --> must fail +ALTER TABLE t1 COALESCE PARTITION 1; +ERROR HY000: Cannot remove all partitions, use DROP TABLE instead +# 2.2.6 Remove partitioning +ALTER TABLE t1 REMOVE PARTITIONING; +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=TokuDB DEFAULT CHARSET=latin1 +t1.frm +t1_main_id.tokudb +t1_status_id.tokudb +EXPLAIN PARTITIONS SELECT COUNT(*) <> 1 FROM t1 WHERE f_int1 = 3; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 20 10.00 Using where +Warnings: +Warning 1681 'PARTITIONS' is deprecated and will be removed in a future release. +Note 1003 /* select#1 */ select (count(0) <> 1) AS `COUNT(*) <> 1` from `test`.`t1` where (`test`.`t1`.`f_int1` = 3) +# check read single success: 1 +# check read all success: 1 +# check read row by row success: 1 +# 2.2.7 Remove partitioning from not partitioned table --> ???? +ALTER TABLE t1 REMOVE PARTITIONING; +ERROR HY000: Partition management on a not partitioned table is not possible +DROP TABLE t1; +# Attention: There are unused files. +# Either the DROP TABLE or a preceding ALTER TABLE +# worked incomplete. +# We found: +unified filelist +--- not determined --- +DROP VIEW IF EXISTS v1; +DROP TABLE IF EXISTS t1; +DROP TABLE IF EXISTS t0_aux; +DROP TABLE IF EXISTS t0_definition; +DROP TABLE IF EXISTS t0_template; diff --git a/mysql-test/suite/tokudb.parts/r-native/partition_alter4_tokudb.result b/mysql-test/suite/tokudb.parts/r-native/partition_alter4_tokudb.result new file mode 100644 index 000000000000..72b1017b4d2e --- /dev/null +++ b/mysql-test/suite/tokudb.parts/r-native/partition_alter4_tokudb.result @@ -0,0 +1,91118 @@ +SET @max_row = 20; +SET @@session.default_storage_engine = 'TokuDB'; + +#------------------------------------------------------------------------ +# 0. Setting of auxiliary variables + Creation of an auxiliary tables +# needed in many testcases +#------------------------------------------------------------------------ +SELECT @max_row DIV 2 INTO @max_row_div2; +SELECT @max_row DIV 3 INTO @max_row_div3; +SELECT @max_row DIV 4 INTO @max_row_div4; +SET @max_int_4 = 2147483647; +DROP TABLE IF EXISTS t0_template; +CREATE TABLE t0_template ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) , +PRIMARY KEY(f_int1)) +ENGINE = MEMORY; +# Logging of INSERTs into t0_template suppressed +DROP TABLE IF EXISTS t0_definition; +CREATE TABLE t0_definition ( +state CHAR(3), +create_command VARBINARY(5000), +file_list VARBINARY(10000), +PRIMARY KEY (state) +) ENGINE = MEMORY; +DROP TABLE IF EXISTS t0_aux; +CREATE TABLE t0_aux ( f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) ) +ENGINE = MEMORY; +SET AUTOCOMMIT= 1; +SET @@session.sql_mode= ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +# End of basic preparations needed for all tests +#----------------------------------------------- + +#======================================================================== +# 1.1.1.12 ALTER TABLE PARTITION +#======================================================================== +#------------------------------------------------------------------------ +# 1 ALTER ... ANALYZE PARTITION +#------------------------------------------------------------------------ +# 1.1 ALTER ... ANALYZE PARTITION part_1; +DROP TABLE IF EXISTS t1; +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 (partition part_1, partition 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 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ANALYZE PARTITION part_1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1) +(PARTITION part_1 ENGINE = TokuDB, + PARTITION part_2 ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ANALYZE PARTITION part_1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1) +(PARTITION part_1 ENGINE = TokuDB, + PARTITION part_2 ENGINE = TokuDB, + PARTITION part_3 ENGINE = TokuDB, + PARTITION part_4 ENGINE = TokuDB, + PARTITION part_5 ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ANALYZE PARTITION part_1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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) +(PARTITION parta VALUES LESS THAN (0), +PARTITION part_1 VALUES LESS THAN (5), +PARTITION part_2 VALUES LESS THAN (10), +PARTITION part_3 VALUES LESS THAN (10 + 5), +PARTITION part_4 VALUES LESS THAN (20), +PARTITION part_5 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ANALYZE PARTITION part_1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION part_1 VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION part_2 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION part_3 VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION part_4 VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 +(PARTITION part_1 VALUES LESS THAN (0), +PARTITION part_2 VALUES LESS THAN (5), +PARTITION part_3 VALUES LESS THAN (10), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ANALYZE PARTITION part_1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1 DIV 2) +SUBPARTITION BY HASH (f_int1) +SUBPARTITIONS 2 +(PARTITION part_1 VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION part_2 VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION part_3 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 KEY(f_int1) +(PARTITION part_1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part_2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part_3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ANALYZE PARTITION part_1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int1) +(PARTITION part_1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part_2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part_3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part_4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) +(PARTITION part_1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part_2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part_3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ANALYZE PARTITION part_1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) +SUBPARTITION BY HASH (f_int1 + 1) +(PARTITION part_1 VALUES IN (0) + (SUBPARTITION sp11 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part_2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part_3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part_4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 +(PARTITION part_1 VALUES IN (0), + PARTITION part_2 VALUES IN (1), + PARTITION part_3 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ANALYZE PARTITION part_1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int1) +SUBPARTITIONS 3 +(PARTITION part_1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part_3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +# 1.2 ALTER ... ANALYZE PARTITION part_1,part_2; +DROP TABLE IF EXISTS t1; +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 (partition part_1, partition 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 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ANALYZE PARTITION part_1,part_2; +Table Op Msg_type Msg_text +test.t1 analyze status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1) +(PARTITION part_1 ENGINE = TokuDB, + PARTITION part_2 ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ANALYZE PARTITION part_1,part_2; +Table Op Msg_type Msg_text +test.t1 analyze status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1) +(PARTITION part_1 ENGINE = TokuDB, + PARTITION part_2 ENGINE = TokuDB, + PARTITION part_3 ENGINE = TokuDB, + PARTITION part_4 ENGINE = TokuDB, + PARTITION part_5 ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ANALYZE PARTITION part_1,part_2; +Table Op Msg_type Msg_text +test.t1 analyze status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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) +(PARTITION parta VALUES LESS THAN (0), +PARTITION part_1 VALUES LESS THAN (5), +PARTITION part_2 VALUES LESS THAN (10), +PARTITION part_3 VALUES LESS THAN (10 + 5), +PARTITION part_4 VALUES LESS THAN (20), +PARTITION part_5 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ANALYZE PARTITION part_1,part_2; +Table Op Msg_type Msg_text +test.t1 analyze status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION part_1 VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION part_2 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION part_3 VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION part_4 VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 +(PARTITION part_1 VALUES LESS THAN (0), +PARTITION part_2 VALUES LESS THAN (5), +PARTITION part_3 VALUES LESS THAN (10), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ANALYZE PARTITION part_1,part_2; +Table Op Msg_type Msg_text +test.t1 analyze status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1 DIV 2) +SUBPARTITION BY HASH (f_int1) +SUBPARTITIONS 2 +(PARTITION part_1 VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION part_2 VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION part_3 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 KEY(f_int1) +(PARTITION part_1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part_2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part_3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ANALYZE PARTITION part_1,part_2; +Table Op Msg_type Msg_text +test.t1 analyze status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int1) +(PARTITION part_1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part_2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part_3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part_4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) +(PARTITION part_1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part_2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part_3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ANALYZE PARTITION part_1,part_2; +Table Op Msg_type Msg_text +test.t1 analyze status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) +SUBPARTITION BY HASH (f_int1 + 1) +(PARTITION part_1 VALUES IN (0) + (SUBPARTITION sp11 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part_2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part_3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part_4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 +(PARTITION part_1 VALUES IN (0), + PARTITION part_2 VALUES IN (1), + PARTITION part_3 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ANALYZE PARTITION part_1,part_2; +Table Op Msg_type Msg_text +test.t1 analyze status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int1) +SUBPARTITIONS 3 +(PARTITION part_1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part_3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# 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; +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 (partition part_1, partition 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 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ANALYZE PARTITION part_1,part_2,part_5,part_6,part_10; +Table Op Msg_type Msg_text +test.t1 analyze Error Error in list of partitions to test.t1 +test.t1 analyze status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1) +(PARTITION part_1 ENGINE = TokuDB, + PARTITION part_2 ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ANALYZE PARTITION part_1,part_2,part_5,part_6,part_10; +Table Op Msg_type Msg_text +test.t1 analyze Error Error in list of partitions to test.t1 +test.t1 analyze status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1) +(PARTITION part_1 ENGINE = TokuDB, + PARTITION part_2 ENGINE = TokuDB, + PARTITION part_3 ENGINE = TokuDB, + PARTITION part_4 ENGINE = TokuDB, + PARTITION part_5 ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ANALYZE PARTITION part_1,part_2,part_5,part_6,part_10; +Table Op Msg_type Msg_text +test.t1 analyze Error Error in list of partitions to test.t1 +test.t1 analyze status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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) +(PARTITION parta VALUES LESS THAN (0), +PARTITION part_1 VALUES LESS THAN (5), +PARTITION part_2 VALUES LESS THAN (10), +PARTITION part_3 VALUES LESS THAN (10 + 5), +PARTITION part_4 VALUES LESS THAN (20), +PARTITION part_5 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ANALYZE PARTITION part_1,part_2,part_5,part_6,part_10; +Table Op Msg_type Msg_text +test.t1 analyze Error Error in list of partitions to test.t1 +test.t1 analyze status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION part_1 VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION part_2 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION part_3 VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION part_4 VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 +(PARTITION part_1 VALUES LESS THAN (0), +PARTITION part_2 VALUES LESS THAN (5), +PARTITION part_3 VALUES LESS THAN (10), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ANALYZE PARTITION part_1,part_2,part_5,part_6,part_10; +Table Op Msg_type Msg_text +test.t1 analyze Error Error in list of partitions to test.t1 +test.t1 analyze status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1 DIV 2) +SUBPARTITION BY HASH (f_int1) +SUBPARTITIONS 2 +(PARTITION part_1 VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION part_2 VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION part_3 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 KEY(f_int1) +(PARTITION part_1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part_2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part_3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ANALYZE PARTITION part_1,part_2,part_5,part_6,part_10; +Table Op Msg_type Msg_text +test.t1 analyze Error Error in list of partitions to test.t1 +test.t1 analyze status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int1) +(PARTITION part_1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part_2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part_3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part_4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) +(PARTITION part_1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part_2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part_3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ANALYZE PARTITION part_1,part_2,part_5,part_6,part_10; +Table Op Msg_type Msg_text +test.t1 analyze Error Error in list of partitions to test.t1 +test.t1 analyze status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) +SUBPARTITION BY HASH (f_int1 + 1) +(PARTITION part_1 VALUES IN (0) + (SUBPARTITION sp11 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part_2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part_3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part_4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 +(PARTITION part_1 VALUES IN (0), + PARTITION part_2 VALUES IN (1), + PARTITION part_3 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ANALYZE PARTITION part_1,part_2,part_5,part_6,part_10; +Table Op Msg_type Msg_text +test.t1 analyze Error Error in list of partitions to test.t1 +test.t1 analyze status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int1) +SUBPARTITIONS 3 +(PARTITION part_1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part_3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +# 1.4 ALTER ... ANALYZE PARTITION part_1,part_1,part_1; +DROP TABLE IF EXISTS t1; +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 (partition part_1, partition 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 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ANALYZE PARTITION part_1,part_1,part_1; +Table Op Msg_type Msg_text +test.t1 analyze Error Error in list of partitions to test.t1 +test.t1 analyze status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1) +(PARTITION part_1 ENGINE = TokuDB, + PARTITION part_2 ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ANALYZE PARTITION part_1,part_1,part_1; +Table Op Msg_type Msg_text +test.t1 analyze Error Error in list of partitions to test.t1 +test.t1 analyze status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1) +(PARTITION part_1 ENGINE = TokuDB, + PARTITION part_2 ENGINE = TokuDB, + PARTITION part_3 ENGINE = TokuDB, + PARTITION part_4 ENGINE = TokuDB, + PARTITION part_5 ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ANALYZE PARTITION part_1,part_1,part_1; +Table Op Msg_type Msg_text +test.t1 analyze Error Error in list of partitions to test.t1 +test.t1 analyze status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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) +(PARTITION parta VALUES LESS THAN (0), +PARTITION part_1 VALUES LESS THAN (5), +PARTITION part_2 VALUES LESS THAN (10), +PARTITION part_3 VALUES LESS THAN (10 + 5), +PARTITION part_4 VALUES LESS THAN (20), +PARTITION part_5 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ANALYZE PARTITION part_1,part_1,part_1; +Table Op Msg_type Msg_text +test.t1 analyze Error Error in list of partitions to test.t1 +test.t1 analyze status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION part_1 VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION part_2 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION part_3 VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION part_4 VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 +(PARTITION part_1 VALUES LESS THAN (0), +PARTITION part_2 VALUES LESS THAN (5), +PARTITION part_3 VALUES LESS THAN (10), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ANALYZE PARTITION part_1,part_1,part_1; +Table Op Msg_type Msg_text +test.t1 analyze Error Error in list of partitions to test.t1 +test.t1 analyze status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1 DIV 2) +SUBPARTITION BY HASH (f_int1) +SUBPARTITIONS 2 +(PARTITION part_1 VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION part_2 VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION part_3 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 KEY(f_int1) +(PARTITION part_1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part_2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part_3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ANALYZE PARTITION part_1,part_1,part_1; +Table Op Msg_type Msg_text +test.t1 analyze Error Error in list of partitions to test.t1 +test.t1 analyze status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int1) +(PARTITION part_1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part_2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part_3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part_4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) +(PARTITION part_1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part_2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part_3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ANALYZE PARTITION part_1,part_1,part_1; +Table Op Msg_type Msg_text +test.t1 analyze Error Error in list of partitions to test.t1 +test.t1 analyze status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) +SUBPARTITION BY HASH (f_int1 + 1) +(PARTITION part_1 VALUES IN (0) + (SUBPARTITION sp11 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part_2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part_3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part_4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 +(PARTITION part_1 VALUES IN (0), + PARTITION part_2 VALUES IN (1), + PARTITION part_3 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ANALYZE PARTITION part_1,part_1,part_1; +Table Op Msg_type Msg_text +test.t1 analyze Error Error in list of partitions to test.t1 +test.t1 analyze status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int1) +SUBPARTITIONS 3 +(PARTITION part_1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part_3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +# 1.5 ALTER ... ANALYZE PARTITION ALL; +DROP TABLE IF EXISTS t1; +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 (partition part_1, partition 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 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ANALYZE PARTITION ALL; +Table Op Msg_type Msg_text +test.t1 analyze status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1) +(PARTITION part_1 ENGINE = TokuDB, + PARTITION part_2 ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ANALYZE PARTITION ALL; +Table Op Msg_type Msg_text +test.t1 analyze status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1) +(PARTITION part_1 ENGINE = TokuDB, + PARTITION part_2 ENGINE = TokuDB, + PARTITION part_3 ENGINE = TokuDB, + PARTITION part_4 ENGINE = TokuDB, + PARTITION part_5 ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ANALYZE PARTITION ALL; +Table Op Msg_type Msg_text +test.t1 analyze status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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) +(PARTITION parta VALUES LESS THAN (0), +PARTITION part_1 VALUES LESS THAN (5), +PARTITION part_2 VALUES LESS THAN (10), +PARTITION part_3 VALUES LESS THAN (10 + 5), +PARTITION part_4 VALUES LESS THAN (20), +PARTITION part_5 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ANALYZE PARTITION ALL; +Table Op Msg_type Msg_text +test.t1 analyze status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION part_1 VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION part_2 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION part_3 VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION part_4 VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 +(PARTITION part_1 VALUES LESS THAN (0), +PARTITION part_2 VALUES LESS THAN (5), +PARTITION part_3 VALUES LESS THAN (10), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ANALYZE PARTITION ALL; +Table Op Msg_type Msg_text +test.t1 analyze status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1 DIV 2) +SUBPARTITION BY HASH (f_int1) +SUBPARTITIONS 2 +(PARTITION part_1 VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION part_2 VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION part_3 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 KEY(f_int1) +(PARTITION part_1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part_2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part_3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ANALYZE PARTITION ALL; +Table Op Msg_type Msg_text +test.t1 analyze status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int1) +(PARTITION part_1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part_2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part_3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part_4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) +(PARTITION part_1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part_2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part_3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ANALYZE PARTITION ALL; +Table Op Msg_type Msg_text +test.t1 analyze status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) +SUBPARTITION BY HASH (f_int1 + 1) +(PARTITION part_1 VALUES IN (0) + (SUBPARTITION sp11 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part_2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part_3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part_4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 +(PARTITION part_1 VALUES IN (0), + PARTITION part_2 VALUES IN (1), + PARTITION part_3 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 ANALYZE PARTITION ALL; +Table Op Msg_type Msg_text +test.t1 analyze status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int1) +SUBPARTITIONS 3 +(PARTITION part_1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part_3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +#------------------------------------------------------------------------ +# 2 ALTER ... CHECK PARTITION +#------------------------------------------------------------------------ +# 2.1 ALTER ... CHECK PARTITION part_1; +DROP TABLE IF EXISTS t1; +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 (partition part_1, partition 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 1 AND @max_row_div2 - 1; +ALTER TABLE t1 CHECK PARTITION part_1; +Table Op Msg_type Msg_text +test.t1 check status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1) +(PARTITION part_1 ENGINE = TokuDB, + PARTITION part_2 ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 CHECK PARTITION part_1; +Table Op Msg_type Msg_text +test.t1 check status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1) +(PARTITION part_1 ENGINE = TokuDB, + PARTITION part_2 ENGINE = TokuDB, + PARTITION part_3 ENGINE = TokuDB, + PARTITION part_4 ENGINE = TokuDB, + PARTITION part_5 ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 CHECK PARTITION part_1; +Table Op Msg_type Msg_text +test.t1 check status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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) +(PARTITION parta VALUES LESS THAN (0), +PARTITION part_1 VALUES LESS THAN (5), +PARTITION part_2 VALUES LESS THAN (10), +PARTITION part_3 VALUES LESS THAN (10 + 5), +PARTITION part_4 VALUES LESS THAN (20), +PARTITION part_5 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 CHECK PARTITION part_1; +Table Op Msg_type Msg_text +test.t1 check status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION part_1 VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION part_2 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION part_3 VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION part_4 VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 +(PARTITION part_1 VALUES LESS THAN (0), +PARTITION part_2 VALUES LESS THAN (5), +PARTITION part_3 VALUES LESS THAN (10), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 CHECK PARTITION part_1; +Table Op Msg_type Msg_text +test.t1 check status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1 DIV 2) +SUBPARTITION BY HASH (f_int1) +SUBPARTITIONS 2 +(PARTITION part_1 VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION part_2 VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION part_3 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 KEY(f_int1) +(PARTITION part_1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part_2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part_3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 CHECK PARTITION part_1; +Table Op Msg_type Msg_text +test.t1 check status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int1) +(PARTITION part_1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part_2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part_3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part_4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) +(PARTITION part_1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part_2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part_3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 CHECK PARTITION part_1; +Table Op Msg_type Msg_text +test.t1 check status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) +SUBPARTITION BY HASH (f_int1 + 1) +(PARTITION part_1 VALUES IN (0) + (SUBPARTITION sp11 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part_2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part_3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part_4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 +(PARTITION part_1 VALUES IN (0), + PARTITION part_2 VALUES IN (1), + PARTITION part_3 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 CHECK PARTITION part_1; +Table Op Msg_type Msg_text +test.t1 check status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int1) +SUBPARTITIONS 3 +(PARTITION part_1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part_3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +# 2.2 ALTER ... CHECK PARTITION part_1,part_2; +DROP TABLE IF EXISTS t1; +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 (partition part_1, partition 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 1 AND @max_row_div2 - 1; +ALTER TABLE t1 CHECK PARTITION part_1,part_2; +Table Op Msg_type Msg_text +test.t1 check status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1) +(PARTITION part_1 ENGINE = TokuDB, + PARTITION part_2 ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 CHECK PARTITION part_1,part_2; +Table Op Msg_type Msg_text +test.t1 check status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1) +(PARTITION part_1 ENGINE = TokuDB, + PARTITION part_2 ENGINE = TokuDB, + PARTITION part_3 ENGINE = TokuDB, + PARTITION part_4 ENGINE = TokuDB, + PARTITION part_5 ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 CHECK PARTITION part_1,part_2; +Table Op Msg_type Msg_text +test.t1 check status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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) +(PARTITION parta VALUES LESS THAN (0), +PARTITION part_1 VALUES LESS THAN (5), +PARTITION part_2 VALUES LESS THAN (10), +PARTITION part_3 VALUES LESS THAN (10 + 5), +PARTITION part_4 VALUES LESS THAN (20), +PARTITION part_5 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 CHECK PARTITION part_1,part_2; +Table Op Msg_type Msg_text +test.t1 check status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION part_1 VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION part_2 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION part_3 VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION part_4 VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 +(PARTITION part_1 VALUES LESS THAN (0), +PARTITION part_2 VALUES LESS THAN (5), +PARTITION part_3 VALUES LESS THAN (10), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 CHECK PARTITION part_1,part_2; +Table Op Msg_type Msg_text +test.t1 check status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1 DIV 2) +SUBPARTITION BY HASH (f_int1) +SUBPARTITIONS 2 +(PARTITION part_1 VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION part_2 VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION part_3 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 KEY(f_int1) +(PARTITION part_1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part_2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part_3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 CHECK PARTITION part_1,part_2; +Table Op Msg_type Msg_text +test.t1 check status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int1) +(PARTITION part_1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part_2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part_3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part_4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) +(PARTITION part_1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part_2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part_3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 CHECK PARTITION part_1,part_2; +Table Op Msg_type Msg_text +test.t1 check status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) +SUBPARTITION BY HASH (f_int1 + 1) +(PARTITION part_1 VALUES IN (0) + (SUBPARTITION sp11 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part_2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part_3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part_4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 +(PARTITION part_1 VALUES IN (0), + PARTITION part_2 VALUES IN (1), + PARTITION part_3 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 CHECK PARTITION part_1,part_2; +Table Op Msg_type Msg_text +test.t1 check status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int1) +SUBPARTITIONS 3 +(PARTITION part_1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part_3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# 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; +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 (partition part_1, partition 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 1 AND @max_row_div2 - 1; +ALTER TABLE t1 CHECK PARTITION part_1,part_2,part_5,part_6,part_10; +Table Op Msg_type Msg_text +test.t1 check Error Error in list of partitions to test.t1 +test.t1 check status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1) +(PARTITION part_1 ENGINE = TokuDB, + PARTITION part_2 ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 CHECK PARTITION part_1,part_2,part_5,part_6,part_10; +Table Op Msg_type Msg_text +test.t1 check Error Error in list of partitions to test.t1 +test.t1 check status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1) +(PARTITION part_1 ENGINE = TokuDB, + PARTITION part_2 ENGINE = TokuDB, + PARTITION part_3 ENGINE = TokuDB, + PARTITION part_4 ENGINE = TokuDB, + PARTITION part_5 ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 CHECK PARTITION part_1,part_2,part_5,part_6,part_10; +Table Op Msg_type Msg_text +test.t1 check Error Error in list of partitions to test.t1 +test.t1 check status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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) +(PARTITION parta VALUES LESS THAN (0), +PARTITION part_1 VALUES LESS THAN (5), +PARTITION part_2 VALUES LESS THAN (10), +PARTITION part_3 VALUES LESS THAN (10 + 5), +PARTITION part_4 VALUES LESS THAN (20), +PARTITION part_5 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 CHECK PARTITION part_1,part_2,part_5,part_6,part_10; +Table Op Msg_type Msg_text +test.t1 check Error Error in list of partitions to test.t1 +test.t1 check status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION part_1 VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION part_2 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION part_3 VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION part_4 VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 +(PARTITION part_1 VALUES LESS THAN (0), +PARTITION part_2 VALUES LESS THAN (5), +PARTITION part_3 VALUES LESS THAN (10), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 CHECK PARTITION part_1,part_2,part_5,part_6,part_10; +Table Op Msg_type Msg_text +test.t1 check Error Error in list of partitions to test.t1 +test.t1 check status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1 DIV 2) +SUBPARTITION BY HASH (f_int1) +SUBPARTITIONS 2 +(PARTITION part_1 VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION part_2 VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION part_3 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 KEY(f_int1) +(PARTITION part_1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part_2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part_3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 CHECK PARTITION part_1,part_2,part_5,part_6,part_10; +Table Op Msg_type Msg_text +test.t1 check Error Error in list of partitions to test.t1 +test.t1 check status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int1) +(PARTITION part_1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part_2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part_3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part_4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) +(PARTITION part_1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part_2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part_3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 CHECK PARTITION part_1,part_2,part_5,part_6,part_10; +Table Op Msg_type Msg_text +test.t1 check Error Error in list of partitions to test.t1 +test.t1 check status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) +SUBPARTITION BY HASH (f_int1 + 1) +(PARTITION part_1 VALUES IN (0) + (SUBPARTITION sp11 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part_2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part_3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part_4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 +(PARTITION part_1 VALUES IN (0), + PARTITION part_2 VALUES IN (1), + PARTITION part_3 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 CHECK PARTITION part_1,part_2,part_5,part_6,part_10; +Table Op Msg_type Msg_text +test.t1 check Error Error in list of partitions to test.t1 +test.t1 check status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int1) +SUBPARTITIONS 3 +(PARTITION part_1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part_3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +# 2.4 ALTER ... CHECK PARTITION part_1,part_1,part_1; +DROP TABLE IF EXISTS t1; +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 (partition part_1, partition 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 1 AND @max_row_div2 - 1; +ALTER TABLE t1 CHECK PARTITION part_1,part_1,part_1; +Table Op Msg_type Msg_text +test.t1 check Error Error in list of partitions to test.t1 +test.t1 check status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1) +(PARTITION part_1 ENGINE = TokuDB, + PARTITION part_2 ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 CHECK PARTITION part_1,part_1,part_1; +Table Op Msg_type Msg_text +test.t1 check Error Error in list of partitions to test.t1 +test.t1 check status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1) +(PARTITION part_1 ENGINE = TokuDB, + PARTITION part_2 ENGINE = TokuDB, + PARTITION part_3 ENGINE = TokuDB, + PARTITION part_4 ENGINE = TokuDB, + PARTITION part_5 ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 CHECK PARTITION part_1,part_1,part_1; +Table Op Msg_type Msg_text +test.t1 check Error Error in list of partitions to test.t1 +test.t1 check status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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) +(PARTITION parta VALUES LESS THAN (0), +PARTITION part_1 VALUES LESS THAN (5), +PARTITION part_2 VALUES LESS THAN (10), +PARTITION part_3 VALUES LESS THAN (10 + 5), +PARTITION part_4 VALUES LESS THAN (20), +PARTITION part_5 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 CHECK PARTITION part_1,part_1,part_1; +Table Op Msg_type Msg_text +test.t1 check Error Error in list of partitions to test.t1 +test.t1 check status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION part_1 VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION part_2 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION part_3 VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION part_4 VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 +(PARTITION part_1 VALUES LESS THAN (0), +PARTITION part_2 VALUES LESS THAN (5), +PARTITION part_3 VALUES LESS THAN (10), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 CHECK PARTITION part_1,part_1,part_1; +Table Op Msg_type Msg_text +test.t1 check Error Error in list of partitions to test.t1 +test.t1 check status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1 DIV 2) +SUBPARTITION BY HASH (f_int1) +SUBPARTITIONS 2 +(PARTITION part_1 VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION part_2 VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION part_3 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 KEY(f_int1) +(PARTITION part_1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part_2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part_3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 CHECK PARTITION part_1,part_1,part_1; +Table Op Msg_type Msg_text +test.t1 check Error Error in list of partitions to test.t1 +test.t1 check status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int1) +(PARTITION part_1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part_2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part_3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part_4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) +(PARTITION part_1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part_2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part_3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 CHECK PARTITION part_1,part_1,part_1; +Table Op Msg_type Msg_text +test.t1 check Error Error in list of partitions to test.t1 +test.t1 check status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) +SUBPARTITION BY HASH (f_int1 + 1) +(PARTITION part_1 VALUES IN (0) + (SUBPARTITION sp11 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part_2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part_3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part_4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 +(PARTITION part_1 VALUES IN (0), + PARTITION part_2 VALUES IN (1), + PARTITION part_3 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 CHECK PARTITION part_1,part_1,part_1; +Table Op Msg_type Msg_text +test.t1 check Error Error in list of partitions to test.t1 +test.t1 check status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int1) +SUBPARTITIONS 3 +(PARTITION part_1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part_3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +# 2.5 ALTER ... CHECK PARTITION ALL; +DROP TABLE IF EXISTS t1; +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 (partition part_1, partition 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 1 AND @max_row_div2 - 1; +ALTER TABLE t1 CHECK PARTITION ALL; +Table Op Msg_type Msg_text +test.t1 check status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1) +(PARTITION part_1 ENGINE = TokuDB, + PARTITION part_2 ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 CHECK PARTITION ALL; +Table Op Msg_type Msg_text +test.t1 check status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1) +(PARTITION part_1 ENGINE = TokuDB, + PARTITION part_2 ENGINE = TokuDB, + PARTITION part_3 ENGINE = TokuDB, + PARTITION part_4 ENGINE = TokuDB, + PARTITION part_5 ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 CHECK PARTITION ALL; +Table Op Msg_type Msg_text +test.t1 check status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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) +(PARTITION parta VALUES LESS THAN (0), +PARTITION part_1 VALUES LESS THAN (5), +PARTITION part_2 VALUES LESS THAN (10), +PARTITION part_3 VALUES LESS THAN (10 + 5), +PARTITION part_4 VALUES LESS THAN (20), +PARTITION part_5 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 CHECK PARTITION ALL; +Table Op Msg_type Msg_text +test.t1 check status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION part_1 VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION part_2 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION part_3 VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION part_4 VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 +(PARTITION part_1 VALUES LESS THAN (0), +PARTITION part_2 VALUES LESS THAN (5), +PARTITION part_3 VALUES LESS THAN (10), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 CHECK PARTITION ALL; +Table Op Msg_type Msg_text +test.t1 check status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1 DIV 2) +SUBPARTITION BY HASH (f_int1) +SUBPARTITIONS 2 +(PARTITION part_1 VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION part_2 VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION part_3 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 KEY(f_int1) +(PARTITION part_1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part_2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part_3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 CHECK PARTITION ALL; +Table Op Msg_type Msg_text +test.t1 check status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int1) +(PARTITION part_1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part_2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part_3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part_4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) +(PARTITION part_1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part_2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part_3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 CHECK PARTITION ALL; +Table Op Msg_type Msg_text +test.t1 check status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) +SUBPARTITION BY HASH (f_int1 + 1) +(PARTITION part_1 VALUES IN (0) + (SUBPARTITION sp11 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part_2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part_3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part_4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 +(PARTITION part_1 VALUES IN (0), + PARTITION part_2 VALUES IN (1), + PARTITION part_3 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 CHECK PARTITION ALL; +Table Op Msg_type Msg_text +test.t1 check status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int1) +SUBPARTITIONS 3 +(PARTITION part_1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part_3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +#------------------------------------------------------------------------ +# 3 ALTER ... OPTIMIZE PARTITION +#------------------------------------------------------------------------ +# 3.1 ALTER ... OPTIMIZE PARTITION part_1; +DROP TABLE IF EXISTS t1; +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 (partition part_1, partition 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 1 AND @max_row_div2 - 1; +ALTER TABLE t1 OPTIMIZE PARTITION part_1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize on partitions. All partitions will be rebuilt and analyzed. +test.t1 optimize status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1) +(PARTITION part_1 ENGINE = TokuDB, + PARTITION part_2 ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 OPTIMIZE PARTITION part_1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize on partitions. All partitions will be rebuilt and analyzed. +test.t1 optimize status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1) +(PARTITION part_1 ENGINE = TokuDB, + PARTITION part_2 ENGINE = TokuDB, + PARTITION part_3 ENGINE = TokuDB, + PARTITION part_4 ENGINE = TokuDB, + PARTITION part_5 ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 OPTIMIZE PARTITION part_1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize on partitions. All partitions will be rebuilt and analyzed. +test.t1 optimize status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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) +(PARTITION parta VALUES LESS THAN (0), +PARTITION part_1 VALUES LESS THAN (5), +PARTITION part_2 VALUES LESS THAN (10), +PARTITION part_3 VALUES LESS THAN (10 + 5), +PARTITION part_4 VALUES LESS THAN (20), +PARTITION part_5 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 OPTIMIZE PARTITION part_1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize on partitions. All partitions will be rebuilt and analyzed. +test.t1 optimize status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION part_1 VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION part_2 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION part_3 VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION part_4 VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 +(PARTITION part_1 VALUES LESS THAN (0), +PARTITION part_2 VALUES LESS THAN (5), +PARTITION part_3 VALUES LESS THAN (10), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 OPTIMIZE PARTITION part_1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize on partitions. All partitions will be rebuilt and analyzed. +test.t1 optimize status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1 DIV 2) +SUBPARTITION BY HASH (f_int1) +SUBPARTITIONS 2 +(PARTITION part_1 VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION part_2 VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION part_3 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 KEY(f_int1) +(PARTITION part_1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part_2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part_3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 OPTIMIZE PARTITION part_1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize on partitions. All partitions will be rebuilt and analyzed. +test.t1 optimize status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int1) +(PARTITION part_1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part_2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part_3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part_4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) +(PARTITION part_1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part_2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part_3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 OPTIMIZE PARTITION part_1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize on partitions. All partitions will be rebuilt and analyzed. +test.t1 optimize status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) +SUBPARTITION BY HASH (f_int1 + 1) +(PARTITION part_1 VALUES IN (0) + (SUBPARTITION sp11 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part_2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part_3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part_4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 +(PARTITION part_1 VALUES IN (0), + PARTITION part_2 VALUES IN (1), + PARTITION part_3 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 OPTIMIZE PARTITION part_1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize on partitions. All partitions will be rebuilt and analyzed. +test.t1 optimize status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int1) +SUBPARTITIONS 3 +(PARTITION part_1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part_3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +# 3.2 ALTER ... OPTIMIZE PARTITION part_1,part_2; +DROP TABLE IF EXISTS t1; +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 (partition part_1, partition 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 1 AND @max_row_div2 - 1; +ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize on partitions. All partitions will be rebuilt and analyzed. +test.t1 optimize status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1) +(PARTITION part_1 ENGINE = TokuDB, + PARTITION part_2 ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize on partitions. All partitions will be rebuilt and analyzed. +test.t1 optimize status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1) +(PARTITION part_1 ENGINE = TokuDB, + PARTITION part_2 ENGINE = TokuDB, + PARTITION part_3 ENGINE = TokuDB, + PARTITION part_4 ENGINE = TokuDB, + PARTITION part_5 ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize on partitions. All partitions will be rebuilt and analyzed. +test.t1 optimize status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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) +(PARTITION parta VALUES LESS THAN (0), +PARTITION part_1 VALUES LESS THAN (5), +PARTITION part_2 VALUES LESS THAN (10), +PARTITION part_3 VALUES LESS THAN (10 + 5), +PARTITION part_4 VALUES LESS THAN (20), +PARTITION part_5 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize on partitions. All partitions will be rebuilt and analyzed. +test.t1 optimize status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION part_1 VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION part_2 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION part_3 VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION part_4 VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 +(PARTITION part_1 VALUES LESS THAN (0), +PARTITION part_2 VALUES LESS THAN (5), +PARTITION part_3 VALUES LESS THAN (10), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize on partitions. All partitions will be rebuilt and analyzed. +test.t1 optimize status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1 DIV 2) +SUBPARTITION BY HASH (f_int1) +SUBPARTITIONS 2 +(PARTITION part_1 VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION part_2 VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION part_3 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 KEY(f_int1) +(PARTITION part_1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part_2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part_3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize on partitions. All partitions will be rebuilt and analyzed. +test.t1 optimize status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int1) +(PARTITION part_1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part_2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part_3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part_4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) +(PARTITION part_1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part_2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part_3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize on partitions. All partitions will be rebuilt and analyzed. +test.t1 optimize status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) +SUBPARTITION BY HASH (f_int1 + 1) +(PARTITION part_1 VALUES IN (0) + (SUBPARTITION sp11 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part_2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part_3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part_4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 +(PARTITION part_1 VALUES IN (0), + PARTITION part_2 VALUES IN (1), + PARTITION part_3 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize on partitions. All partitions will be rebuilt and analyzed. +test.t1 optimize status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int1) +SUBPARTITIONS 3 +(PARTITION part_1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part_3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# 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; +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 (partition part_1, partition 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 1 AND @max_row_div2 - 1; +ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2,part_5,part_6,part_10; +Table Op Msg_type Msg_text +test.t1 optimize Error Error in list of partitions to test.t1 +test.t1 optimize status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1) +(PARTITION part_1 ENGINE = TokuDB, + PARTITION part_2 ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2,part_5,part_6,part_10; +Table Op Msg_type Msg_text +test.t1 optimize Error Error in list of partitions to test.t1 +test.t1 optimize status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1) +(PARTITION part_1 ENGINE = TokuDB, + PARTITION part_2 ENGINE = TokuDB, + PARTITION part_3 ENGINE = TokuDB, + PARTITION part_4 ENGINE = TokuDB, + PARTITION part_5 ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2,part_5,part_6,part_10; +Table Op Msg_type Msg_text +test.t1 optimize Error Error in list of partitions to test.t1 +test.t1 optimize status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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) +(PARTITION parta VALUES LESS THAN (0), +PARTITION part_1 VALUES LESS THAN (5), +PARTITION part_2 VALUES LESS THAN (10), +PARTITION part_3 VALUES LESS THAN (10 + 5), +PARTITION part_4 VALUES LESS THAN (20), +PARTITION part_5 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2,part_5,part_6,part_10; +Table Op Msg_type Msg_text +test.t1 optimize Error Error in list of partitions to test.t1 +test.t1 optimize status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION part_1 VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION part_2 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION part_3 VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION part_4 VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 +(PARTITION part_1 VALUES LESS THAN (0), +PARTITION part_2 VALUES LESS THAN (5), +PARTITION part_3 VALUES LESS THAN (10), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2,part_5,part_6,part_10; +Table Op Msg_type Msg_text +test.t1 optimize Error Error in list of partitions to test.t1 +test.t1 optimize status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1 DIV 2) +SUBPARTITION BY HASH (f_int1) +SUBPARTITIONS 2 +(PARTITION part_1 VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION part_2 VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION part_3 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 KEY(f_int1) +(PARTITION part_1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part_2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part_3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2,part_5,part_6,part_10; +Table Op Msg_type Msg_text +test.t1 optimize Error Error in list of partitions to test.t1 +test.t1 optimize status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int1) +(PARTITION part_1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part_2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part_3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part_4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) +(PARTITION part_1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part_2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part_3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2,part_5,part_6,part_10; +Table Op Msg_type Msg_text +test.t1 optimize Error Error in list of partitions to test.t1 +test.t1 optimize status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) +SUBPARTITION BY HASH (f_int1 + 1) +(PARTITION part_1 VALUES IN (0) + (SUBPARTITION sp11 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part_2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part_3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part_4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 +(PARTITION part_1 VALUES IN (0), + PARTITION part_2 VALUES IN (1), + PARTITION part_3 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2,part_5,part_6,part_10; +Table Op Msg_type Msg_text +test.t1 optimize Error Error in list of partitions to test.t1 +test.t1 optimize status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int1) +SUBPARTITIONS 3 +(PARTITION part_1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part_3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +# 3.4 ALTER ... OPTIMIZE PARTITION part_1,part_1,part_1; +DROP TABLE IF EXISTS t1; +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 (partition part_1, partition 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 1 AND @max_row_div2 - 1; +ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_1,part_1; +Table Op Msg_type Msg_text +test.t1 optimize Error Error in list of partitions to test.t1 +test.t1 optimize status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1) +(PARTITION part_1 ENGINE = TokuDB, + PARTITION part_2 ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_1,part_1; +Table Op Msg_type Msg_text +test.t1 optimize Error Error in list of partitions to test.t1 +test.t1 optimize status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1) +(PARTITION part_1 ENGINE = TokuDB, + PARTITION part_2 ENGINE = TokuDB, + PARTITION part_3 ENGINE = TokuDB, + PARTITION part_4 ENGINE = TokuDB, + PARTITION part_5 ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_1,part_1; +Table Op Msg_type Msg_text +test.t1 optimize Error Error in list of partitions to test.t1 +test.t1 optimize status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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) +(PARTITION parta VALUES LESS THAN (0), +PARTITION part_1 VALUES LESS THAN (5), +PARTITION part_2 VALUES LESS THAN (10), +PARTITION part_3 VALUES LESS THAN (10 + 5), +PARTITION part_4 VALUES LESS THAN (20), +PARTITION part_5 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_1,part_1; +Table Op Msg_type Msg_text +test.t1 optimize Error Error in list of partitions to test.t1 +test.t1 optimize status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION part_1 VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION part_2 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION part_3 VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION part_4 VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 +(PARTITION part_1 VALUES LESS THAN (0), +PARTITION part_2 VALUES LESS THAN (5), +PARTITION part_3 VALUES LESS THAN (10), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_1,part_1; +Table Op Msg_type Msg_text +test.t1 optimize Error Error in list of partitions to test.t1 +test.t1 optimize status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1 DIV 2) +SUBPARTITION BY HASH (f_int1) +SUBPARTITIONS 2 +(PARTITION part_1 VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION part_2 VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION part_3 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 KEY(f_int1) +(PARTITION part_1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part_2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part_3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_1,part_1; +Table Op Msg_type Msg_text +test.t1 optimize Error Error in list of partitions to test.t1 +test.t1 optimize status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int1) +(PARTITION part_1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part_2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part_3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part_4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) +(PARTITION part_1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part_2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part_3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_1,part_1; +Table Op Msg_type Msg_text +test.t1 optimize Error Error in list of partitions to test.t1 +test.t1 optimize status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) +SUBPARTITION BY HASH (f_int1 + 1) +(PARTITION part_1 VALUES IN (0) + (SUBPARTITION sp11 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part_2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part_3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part_4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 +(PARTITION part_1 VALUES IN (0), + PARTITION part_2 VALUES IN (1), + PARTITION part_3 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_1,part_1; +Table Op Msg_type Msg_text +test.t1 optimize Error Error in list of partitions to test.t1 +test.t1 optimize status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int1) +SUBPARTITIONS 3 +(PARTITION part_1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part_3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +# 3.5 ALTER ... OPTIMIZE PARTITION ALL; +DROP TABLE IF EXISTS t1; +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 (partition part_1, partition 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 1 AND @max_row_div2 - 1; +ALTER TABLE t1 OPTIMIZE PARTITION ALL; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize on partitions. All partitions will be rebuilt and analyzed. +test.t1 optimize status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1) +(PARTITION part_1 ENGINE = TokuDB, + PARTITION part_2 ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 OPTIMIZE PARTITION ALL; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize on partitions. All partitions will be rebuilt and analyzed. +test.t1 optimize status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1) +(PARTITION part_1 ENGINE = TokuDB, + PARTITION part_2 ENGINE = TokuDB, + PARTITION part_3 ENGINE = TokuDB, + PARTITION part_4 ENGINE = TokuDB, + PARTITION part_5 ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 OPTIMIZE PARTITION ALL; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize on partitions. All partitions will be rebuilt and analyzed. +test.t1 optimize status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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) +(PARTITION parta VALUES LESS THAN (0), +PARTITION part_1 VALUES LESS THAN (5), +PARTITION part_2 VALUES LESS THAN (10), +PARTITION part_3 VALUES LESS THAN (10 + 5), +PARTITION part_4 VALUES LESS THAN (20), +PARTITION part_5 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 OPTIMIZE PARTITION ALL; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize on partitions. All partitions will be rebuilt and analyzed. +test.t1 optimize status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION part_1 VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION part_2 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION part_3 VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION part_4 VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 +(PARTITION part_1 VALUES LESS THAN (0), +PARTITION part_2 VALUES LESS THAN (5), +PARTITION part_3 VALUES LESS THAN (10), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 OPTIMIZE PARTITION ALL; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize on partitions. All partitions will be rebuilt and analyzed. +test.t1 optimize status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1 DIV 2) +SUBPARTITION BY HASH (f_int1) +SUBPARTITIONS 2 +(PARTITION part_1 VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION part_2 VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION part_3 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 KEY(f_int1) +(PARTITION part_1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part_2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part_3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 OPTIMIZE PARTITION ALL; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize on partitions. All partitions will be rebuilt and analyzed. +test.t1 optimize status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int1) +(PARTITION part_1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part_2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part_3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part_4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) +(PARTITION part_1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part_2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part_3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 OPTIMIZE PARTITION ALL; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize on partitions. All partitions will be rebuilt and analyzed. +test.t1 optimize status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) +SUBPARTITION BY HASH (f_int1 + 1) +(PARTITION part_1 VALUES IN (0) + (SUBPARTITION sp11 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part_2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part_3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part_4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 +(PARTITION part_1 VALUES IN (0), + PARTITION part_2 VALUES IN (1), + PARTITION part_3 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 OPTIMIZE PARTITION ALL; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize on partitions. All partitions will be rebuilt and analyzed. +test.t1 optimize status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int1) +SUBPARTITIONS 3 +(PARTITION part_1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part_3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +#------------------------------------------------------------------------ +# 4 ALTER ... REBUILD PARTITION +#------------------------------------------------------------------------ +# 4.1 ALTER ... REBUILD PARTITION part_1; +DROP TABLE IF EXISTS t1; +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 (partition part_1, partition 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 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1) +(PARTITION part_1 ENGINE = TokuDB, + PARTITION part_2 ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1) +(PARTITION part_1 ENGINE = TokuDB, + PARTITION part_2 ENGINE = TokuDB, + PARTITION part_3 ENGINE = TokuDB, + PARTITION part_4 ENGINE = TokuDB, + PARTITION part_5 ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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) +(PARTITION parta VALUES LESS THAN (0), +PARTITION part_1 VALUES LESS THAN (5), +PARTITION part_2 VALUES LESS THAN (10), +PARTITION part_3 VALUES LESS THAN (10 + 5), +PARTITION part_4 VALUES LESS THAN (20), +PARTITION part_5 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION part_1 VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION part_2 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION part_3 VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION part_4 VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 +(PARTITION part_1 VALUES LESS THAN (0), +PARTITION part_2 VALUES LESS THAN (5), +PARTITION part_3 VALUES LESS THAN (10), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1 DIV 2) +SUBPARTITION BY HASH (f_int1) +SUBPARTITIONS 2 +(PARTITION part_1 VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION part_2 VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION part_3 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 KEY(f_int1) +(PARTITION part_1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part_2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part_3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int1) +(PARTITION part_1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part_2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part_3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part_4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) +(PARTITION part_1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part_2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part_3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) +SUBPARTITION BY HASH (f_int1 + 1) +(PARTITION part_1 VALUES IN (0) + (SUBPARTITION sp11 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part_2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part_3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part_4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 +(PARTITION part_1 VALUES IN (0), + PARTITION part_2 VALUES IN (1), + PARTITION part_3 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int1) +SUBPARTITIONS 3 +(PARTITION part_1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part_3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +# 4.2 ALTER ... REBUILD PARTITION part_1,part_2; +DROP TABLE IF EXISTS t1; +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 (partition part_1, partition 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 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1) +(PARTITION part_1 ENGINE = TokuDB, + PARTITION part_2 ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1) +(PARTITION part_1 ENGINE = TokuDB, + PARTITION part_2 ENGINE = TokuDB, + PARTITION part_3 ENGINE = TokuDB, + PARTITION part_4 ENGINE = TokuDB, + PARTITION part_5 ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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) +(PARTITION parta VALUES LESS THAN (0), +PARTITION part_1 VALUES LESS THAN (5), +PARTITION part_2 VALUES LESS THAN (10), +PARTITION part_3 VALUES LESS THAN (10 + 5), +PARTITION part_4 VALUES LESS THAN (20), +PARTITION part_5 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION part_1 VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION part_2 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION part_3 VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION part_4 VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 +(PARTITION part_1 VALUES LESS THAN (0), +PARTITION part_2 VALUES LESS THAN (5), +PARTITION part_3 VALUES LESS THAN (10), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1 DIV 2) +SUBPARTITION BY HASH (f_int1) +SUBPARTITIONS 2 +(PARTITION part_1 VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION part_2 VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION part_3 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 KEY(f_int1) +(PARTITION part_1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part_2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part_3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int1) +(PARTITION part_1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part_2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part_3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part_4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) +(PARTITION part_1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part_2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part_3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) +SUBPARTITION BY HASH (f_int1 + 1) +(PARTITION part_1 VALUES IN (0) + (SUBPARTITION sp11 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part_2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part_3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part_4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 +(PARTITION part_1 VALUES IN (0), + PARTITION part_2 VALUES IN (1), + PARTITION part_3 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int1) +SUBPARTITIONS 3 +(PARTITION part_1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part_3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# 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; +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 (partition part_1, partition 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 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REBUILD PARTITION part_1,part_2,part_5,part_6,part_10; +ERROR HY000: Error in list of partitions to REBUILD +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REBUILD PARTITION part_1,part_2,part_5,part_6,part_10; +ERROR HY000: Error in list of partitions to REBUILD +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REBUILD PARTITION part_1,part_2,part_5,part_6,part_10; +ERROR HY000: Error in list of partitions to REBUILD +DROP TABLE t1; +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) +(PARTITION parta VALUES LESS THAN (0), +PARTITION part_1 VALUES LESS THAN (5), +PARTITION part_2 VALUES LESS THAN (10), +PARTITION part_3 VALUES LESS THAN (10 + 5), +PARTITION part_4 VALUES LESS THAN (20), +PARTITION part_5 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REBUILD PARTITION part_1,part_2,part_5,part_6,part_10; +ERROR HY000: Error in list of partitions to REBUILD +DROP TABLE t1; +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 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 +(PARTITION part_1 VALUES LESS THAN (0), +PARTITION part_2 VALUES LESS THAN (5), +PARTITION part_3 VALUES LESS THAN (10), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REBUILD PARTITION part_1,part_2,part_5,part_6,part_10; +ERROR HY000: Error in list of partitions to REBUILD +DROP TABLE t1; +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 KEY(f_int1) +(PARTITION part_1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part_2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part_3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REBUILD PARTITION part_1,part_2,part_5,part_6,part_10; +ERROR HY000: Error in list of partitions to REBUILD +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) +(PARTITION part_1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part_2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part_3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REBUILD PARTITION part_1,part_2,part_5,part_6,part_10; +ERROR HY000: Error in list of partitions to REBUILD +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 +(PARTITION part_1 VALUES IN (0), + PARTITION part_2 VALUES IN (1), + PARTITION part_3 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REBUILD PARTITION part_1,part_2,part_5,part_6,part_10; +ERROR HY000: Error in list of partitions to REBUILD +DROP TABLE t1; +# 4.4 ALTER ... REBUILD PARTITION part_1,part_1,part_1; +DROP TABLE IF EXISTS t1; +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 (partition part_1, partition 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 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REBUILD PARTITION part_1,part_1,part_1; +ERROR HY000: Error in list of partitions to REBUILD +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REBUILD PARTITION part_1,part_1,part_1; +ERROR HY000: Error in list of partitions to REBUILD +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REBUILD PARTITION part_1,part_1,part_1; +ERROR HY000: Error in list of partitions to REBUILD +DROP TABLE t1; +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) +(PARTITION parta VALUES LESS THAN (0), +PARTITION part_1 VALUES LESS THAN (5), +PARTITION part_2 VALUES LESS THAN (10), +PARTITION part_3 VALUES LESS THAN (10 + 5), +PARTITION part_4 VALUES LESS THAN (20), +PARTITION part_5 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REBUILD PARTITION part_1,part_1,part_1; +ERROR HY000: Error in list of partitions to REBUILD +DROP TABLE t1; +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 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 +(PARTITION part_1 VALUES LESS THAN (0), +PARTITION part_2 VALUES LESS THAN (5), +PARTITION part_3 VALUES LESS THAN (10), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REBUILD PARTITION part_1,part_1,part_1; +ERROR HY000: Error in list of partitions to REBUILD +DROP TABLE t1; +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 KEY(f_int1) +(PARTITION part_1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part_2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part_3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REBUILD PARTITION part_1,part_1,part_1; +ERROR HY000: Error in list of partitions to REBUILD +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) +(PARTITION part_1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part_2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part_3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REBUILD PARTITION part_1,part_1,part_1; +ERROR HY000: Error in list of partitions to REBUILD +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 +(PARTITION part_1 VALUES IN (0), + PARTITION part_2 VALUES IN (1), + PARTITION part_3 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REBUILD PARTITION part_1,part_1,part_1; +ERROR HY000: Error in list of partitions to REBUILD +DROP TABLE t1; +# 4.5 ALTER ... REBUILD PARTITION ALL; +DROP TABLE IF EXISTS t1; +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 (partition part_1, partition 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 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REBUILD PARTITION ALL; +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1) +(PARTITION part_1 ENGINE = TokuDB, + PARTITION part_2 ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REBUILD PARTITION ALL; +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1) +(PARTITION part_1 ENGINE = TokuDB, + PARTITION part_2 ENGINE = TokuDB, + PARTITION part_3 ENGINE = TokuDB, + PARTITION part_4 ENGINE = TokuDB, + PARTITION part_5 ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REBUILD PARTITION ALL; +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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) +(PARTITION parta VALUES LESS THAN (0), +PARTITION part_1 VALUES LESS THAN (5), +PARTITION part_2 VALUES LESS THAN (10), +PARTITION part_3 VALUES LESS THAN (10 + 5), +PARTITION part_4 VALUES LESS THAN (20), +PARTITION part_5 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REBUILD PARTITION ALL; +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION part_1 VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION part_2 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION part_3 VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION part_4 VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 +(PARTITION part_1 VALUES LESS THAN (0), +PARTITION part_2 VALUES LESS THAN (5), +PARTITION part_3 VALUES LESS THAN (10), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REBUILD PARTITION ALL; +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1 DIV 2) +SUBPARTITION BY HASH (f_int1) +SUBPARTITIONS 2 +(PARTITION part_1 VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION part_2 VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION part_3 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 KEY(f_int1) +(PARTITION part_1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part_2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part_3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REBUILD PARTITION ALL; +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int1) +(PARTITION part_1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part_2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part_3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part_4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) +(PARTITION part_1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part_2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part_3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REBUILD PARTITION ALL; +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) +SUBPARTITION BY HASH (f_int1 + 1) +(PARTITION part_1 VALUES IN (0) + (SUBPARTITION sp11 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part_2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part_3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part_4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 +(PARTITION part_1 VALUES IN (0), + PARTITION part_2 VALUES IN (1), + PARTITION part_3 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REBUILD PARTITION ALL; +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int1) +SUBPARTITIONS 3 +(PARTITION part_1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part_3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +#------------------------------------------------------------------------ +# 5 ALTER ... REPAIR PARTITION +#------------------------------------------------------------------------ +# 5.1 ALTER ... REPAIR PARTITION part_1; +DROP TABLE IF EXISTS t1; +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 (partition part_1, partition 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 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REPAIR PARTITION part_1; +Table Op Msg_type Msg_text +test.t1 repair status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1) +(PARTITION part_1 ENGINE = TokuDB, + PARTITION part_2 ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REPAIR PARTITION part_1; +Table Op Msg_type Msg_text +test.t1 repair status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1) +(PARTITION part_1 ENGINE = TokuDB, + PARTITION part_2 ENGINE = TokuDB, + PARTITION part_3 ENGINE = TokuDB, + PARTITION part_4 ENGINE = TokuDB, + PARTITION part_5 ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REPAIR PARTITION part_1; +Table Op Msg_type Msg_text +test.t1 repair status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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) +(PARTITION parta VALUES LESS THAN (0), +PARTITION part_1 VALUES LESS THAN (5), +PARTITION part_2 VALUES LESS THAN (10), +PARTITION part_3 VALUES LESS THAN (10 + 5), +PARTITION part_4 VALUES LESS THAN (20), +PARTITION part_5 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REPAIR PARTITION part_1; +Table Op Msg_type Msg_text +test.t1 repair status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION part_1 VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION part_2 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION part_3 VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION part_4 VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 +(PARTITION part_1 VALUES LESS THAN (0), +PARTITION part_2 VALUES LESS THAN (5), +PARTITION part_3 VALUES LESS THAN (10), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REPAIR PARTITION part_1; +Table Op Msg_type Msg_text +test.t1 repair status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1 DIV 2) +SUBPARTITION BY HASH (f_int1) +SUBPARTITIONS 2 +(PARTITION part_1 VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION part_2 VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION part_3 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 KEY(f_int1) +(PARTITION part_1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part_2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part_3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REPAIR PARTITION part_1; +Table Op Msg_type Msg_text +test.t1 repair status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int1) +(PARTITION part_1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part_2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part_3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part_4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) +(PARTITION part_1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part_2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part_3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REPAIR PARTITION part_1; +Table Op Msg_type Msg_text +test.t1 repair status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) +SUBPARTITION BY HASH (f_int1 + 1) +(PARTITION part_1 VALUES IN (0) + (SUBPARTITION sp11 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part_2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part_3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part_4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 +(PARTITION part_1 VALUES IN (0), + PARTITION part_2 VALUES IN (1), + PARTITION part_3 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REPAIR PARTITION part_1; +Table Op Msg_type Msg_text +test.t1 repair status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int1) +SUBPARTITIONS 3 +(PARTITION part_1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part_3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +# 5.2 ALTER ... REPAIR PARTITION part_1,part_2; +DROP TABLE IF EXISTS t1; +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 (partition part_1, partition 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 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REPAIR PARTITION part_1,part_2; +Table Op Msg_type Msg_text +test.t1 repair status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1) +(PARTITION part_1 ENGINE = TokuDB, + PARTITION part_2 ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REPAIR PARTITION part_1,part_2; +Table Op Msg_type Msg_text +test.t1 repair status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1) +(PARTITION part_1 ENGINE = TokuDB, + PARTITION part_2 ENGINE = TokuDB, + PARTITION part_3 ENGINE = TokuDB, + PARTITION part_4 ENGINE = TokuDB, + PARTITION part_5 ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REPAIR PARTITION part_1,part_2; +Table Op Msg_type Msg_text +test.t1 repair status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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) +(PARTITION parta VALUES LESS THAN (0), +PARTITION part_1 VALUES LESS THAN (5), +PARTITION part_2 VALUES LESS THAN (10), +PARTITION part_3 VALUES LESS THAN (10 + 5), +PARTITION part_4 VALUES LESS THAN (20), +PARTITION part_5 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REPAIR PARTITION part_1,part_2; +Table Op Msg_type Msg_text +test.t1 repair status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION part_1 VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION part_2 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION part_3 VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION part_4 VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 +(PARTITION part_1 VALUES LESS THAN (0), +PARTITION part_2 VALUES LESS THAN (5), +PARTITION part_3 VALUES LESS THAN (10), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REPAIR PARTITION part_1,part_2; +Table Op Msg_type Msg_text +test.t1 repair status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1 DIV 2) +SUBPARTITION BY HASH (f_int1) +SUBPARTITIONS 2 +(PARTITION part_1 VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION part_2 VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION part_3 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 KEY(f_int1) +(PARTITION part_1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part_2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part_3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REPAIR PARTITION part_1,part_2; +Table Op Msg_type Msg_text +test.t1 repair status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int1) +(PARTITION part_1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part_2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part_3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part_4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) +(PARTITION part_1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part_2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part_3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REPAIR PARTITION part_1,part_2; +Table Op Msg_type Msg_text +test.t1 repair status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) +SUBPARTITION BY HASH (f_int1 + 1) +(PARTITION part_1 VALUES IN (0) + (SUBPARTITION sp11 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part_2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part_3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part_4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 +(PARTITION part_1 VALUES IN (0), + PARTITION part_2 VALUES IN (1), + PARTITION part_3 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REPAIR PARTITION part_1,part_2; +Table Op Msg_type Msg_text +test.t1 repair status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int1) +SUBPARTITIONS 3 +(PARTITION part_1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part_3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +# 5.3 ALTER ... REPAIR PARTITION part_1,part_2,part_5,part_6,part_10; +DROP TABLE IF EXISTS t1; +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 (partition part_1, partition 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 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REPAIR PARTITION part_1,part_2,part_5,part_6,part_10; +Table Op Msg_type Msg_text +test.t1 repair Error Error in list of partitions to test.t1 +test.t1 repair status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1) +(PARTITION part_1 ENGINE = TokuDB, + PARTITION part_2 ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REPAIR PARTITION part_1,part_2,part_5,part_6,part_10; +Table Op Msg_type Msg_text +test.t1 repair Error Error in list of partitions to test.t1 +test.t1 repair status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1) +(PARTITION part_1 ENGINE = TokuDB, + PARTITION part_2 ENGINE = TokuDB, + PARTITION part_3 ENGINE = TokuDB, + PARTITION part_4 ENGINE = TokuDB, + PARTITION part_5 ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REPAIR PARTITION part_1,part_2,part_5,part_6,part_10; +Table Op Msg_type Msg_text +test.t1 repair Error Error in list of partitions to test.t1 +test.t1 repair status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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) +(PARTITION parta VALUES LESS THAN (0), +PARTITION part_1 VALUES LESS THAN (5), +PARTITION part_2 VALUES LESS THAN (10), +PARTITION part_3 VALUES LESS THAN (10 + 5), +PARTITION part_4 VALUES LESS THAN (20), +PARTITION part_5 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REPAIR PARTITION part_1,part_2,part_5,part_6,part_10; +Table Op Msg_type Msg_text +test.t1 repair Error Error in list of partitions to test.t1 +test.t1 repair status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION part_1 VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION part_2 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION part_3 VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION part_4 VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 +(PARTITION part_1 VALUES LESS THAN (0), +PARTITION part_2 VALUES LESS THAN (5), +PARTITION part_3 VALUES LESS THAN (10), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REPAIR PARTITION part_1,part_2,part_5,part_6,part_10; +Table Op Msg_type Msg_text +test.t1 repair Error Error in list of partitions to test.t1 +test.t1 repair status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1 DIV 2) +SUBPARTITION BY HASH (f_int1) +SUBPARTITIONS 2 +(PARTITION part_1 VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION part_2 VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION part_3 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 KEY(f_int1) +(PARTITION part_1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part_2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part_3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REPAIR PARTITION part_1,part_2,part_5,part_6,part_10; +Table Op Msg_type Msg_text +test.t1 repair Error Error in list of partitions to test.t1 +test.t1 repair status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int1) +(PARTITION part_1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part_2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part_3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part_4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) +(PARTITION part_1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part_2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part_3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REPAIR PARTITION part_1,part_2,part_5,part_6,part_10; +Table Op Msg_type Msg_text +test.t1 repair Error Error in list of partitions to test.t1 +test.t1 repair status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) +SUBPARTITION BY HASH (f_int1 + 1) +(PARTITION part_1 VALUES IN (0) + (SUBPARTITION sp11 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part_2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part_3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part_4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 +(PARTITION part_1 VALUES IN (0), + PARTITION part_2 VALUES IN (1), + PARTITION part_3 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REPAIR PARTITION part_1,part_2,part_5,part_6,part_10; +Table Op Msg_type Msg_text +test.t1 repair Error Error in list of partitions to test.t1 +test.t1 repair status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int1) +SUBPARTITIONS 3 +(PARTITION part_1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part_3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +# 5.4 ALTER ... REPAIR PARTITION part_1,part_1,part_1; +DROP TABLE IF EXISTS t1; +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 (partition part_1, partition 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 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REPAIR PARTITION part_1,part_1,part_1; +Table Op Msg_type Msg_text +test.t1 repair Error Error in list of partitions to test.t1 +test.t1 repair status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1) +(PARTITION part_1 ENGINE = TokuDB, + PARTITION part_2 ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REPAIR PARTITION part_1,part_1,part_1; +Table Op Msg_type Msg_text +test.t1 repair Error Error in list of partitions to test.t1 +test.t1 repair status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1) +(PARTITION part_1 ENGINE = TokuDB, + PARTITION part_2 ENGINE = TokuDB, + PARTITION part_3 ENGINE = TokuDB, + PARTITION part_4 ENGINE = TokuDB, + PARTITION part_5 ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REPAIR PARTITION part_1,part_1,part_1; +Table Op Msg_type Msg_text +test.t1 repair Error Error in list of partitions to test.t1 +test.t1 repair status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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) +(PARTITION parta VALUES LESS THAN (0), +PARTITION part_1 VALUES LESS THAN (5), +PARTITION part_2 VALUES LESS THAN (10), +PARTITION part_3 VALUES LESS THAN (10 + 5), +PARTITION part_4 VALUES LESS THAN (20), +PARTITION part_5 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REPAIR PARTITION part_1,part_1,part_1; +Table Op Msg_type Msg_text +test.t1 repair Error Error in list of partitions to test.t1 +test.t1 repair status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION part_1 VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION part_2 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION part_3 VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION part_4 VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 +(PARTITION part_1 VALUES LESS THAN (0), +PARTITION part_2 VALUES LESS THAN (5), +PARTITION part_3 VALUES LESS THAN (10), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REPAIR PARTITION part_1,part_1,part_1; +Table Op Msg_type Msg_text +test.t1 repair Error Error in list of partitions to test.t1 +test.t1 repair status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1 DIV 2) +SUBPARTITION BY HASH (f_int1) +SUBPARTITIONS 2 +(PARTITION part_1 VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION part_2 VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION part_3 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 KEY(f_int1) +(PARTITION part_1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part_2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part_3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REPAIR PARTITION part_1,part_1,part_1; +Table Op Msg_type Msg_text +test.t1 repair Error Error in list of partitions to test.t1 +test.t1 repair status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int1) +(PARTITION part_1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part_2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part_3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part_4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) +(PARTITION part_1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part_2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part_3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REPAIR PARTITION part_1,part_1,part_1; +Table Op Msg_type Msg_text +test.t1 repair Error Error in list of partitions to test.t1 +test.t1 repair status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) +SUBPARTITION BY HASH (f_int1 + 1) +(PARTITION part_1 VALUES IN (0) + (SUBPARTITION sp11 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part_2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part_3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part_4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 +(PARTITION part_1 VALUES IN (0), + PARTITION part_2 VALUES IN (1), + PARTITION part_3 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REPAIR PARTITION part_1,part_1,part_1; +Table Op Msg_type Msg_text +test.t1 repair Error Error in list of partitions to test.t1 +test.t1 repair status Operation failed +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int1) +SUBPARTITIONS 3 +(PARTITION part_1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part_3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +# 5.5 ALTER ... REPAIR PARTITION ALL; +DROP TABLE IF EXISTS t1; +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 (partition part_1, partition 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 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REPAIR PARTITION ALL; +Table Op Msg_type Msg_text +test.t1 repair status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1) +(PARTITION part_1 ENGINE = TokuDB, + PARTITION part_2 ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REPAIR PARTITION ALL; +Table Op Msg_type Msg_text +test.t1 repair status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1) +(PARTITION part_1 ENGINE = TokuDB, + PARTITION part_2 ENGINE = TokuDB, + PARTITION part_3 ENGINE = TokuDB, + PARTITION part_4 ENGINE = TokuDB, + PARTITION part_5 ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REPAIR PARTITION ALL; +Table Op Msg_type Msg_text +test.t1 repair status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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) +(PARTITION parta VALUES LESS THAN (0), +PARTITION part_1 VALUES LESS THAN (5), +PARTITION part_2 VALUES LESS THAN (10), +PARTITION part_3 VALUES LESS THAN (10 + 5), +PARTITION part_4 VALUES LESS THAN (20), +PARTITION part_5 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REPAIR PARTITION ALL; +Table Op Msg_type Msg_text +test.t1 repair status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION part_1 VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION part_2 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION part_3 VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION part_4 VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION part_5 VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 +(PARTITION part_1 VALUES LESS THAN (0), +PARTITION part_2 VALUES LESS THAN (5), +PARTITION part_3 VALUES LESS THAN (10), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REPAIR PARTITION ALL; +Table Op Msg_type Msg_text +test.t1 repair status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1 DIV 2) +SUBPARTITION BY HASH (f_int1) +SUBPARTITIONS 2 +(PARTITION part_1 VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION part_2 VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION part_3 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION part_4 VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 KEY(f_int1) +(PARTITION part_1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part_2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part_3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REPAIR PARTITION ALL; +Table Op Msg_type Msg_text +test.t1 repair status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int1) +(PARTITION part_1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part_2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part_3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part_4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) +(PARTITION part_1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part_2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part_3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REPAIR PARTITION ALL; +Table Op Msg_type Msg_text +test.t1 repair status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) +SUBPARTITION BY HASH (f_int1 + 1) +(PARTITION part_1 VALUES IN (0) + (SUBPARTITION sp11 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part_2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part_3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part_4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 +(PARTITION part_1 VALUES IN (0), + PARTITION part_2 VALUES IN (1), + PARTITION part_3 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +ALTER TABLE t1 REPAIR PARTITION ALL; +Table Op Msg_type Msg_text +test.t1 repair status OK +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row; +# Start usability test (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int1) +SUBPARTITIONS 3 +(PARTITION part_1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part_3 VALUES IN (NULL) ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +#------------------------------------------------------------------------ +# 6 ALTER ... REMOVE PARTITIONING +#------------------------------------------------------------------------ +# 6.1 ALTER ... REMOVE PARTITIONING; +DROP TABLE IF EXISTS t1; +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 (partition part_1, partition 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 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair note The storage engine for the table doesn't support repair +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair note The storage engine for the table doesn't support repair +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair note The storage engine for the table doesn't support repair +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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) +(PARTITION parta VALUES LESS THAN (0), +PARTITION part_1 VALUES LESS THAN (5), +PARTITION part_2 VALUES LESS THAN (10), +PARTITION part_3 VALUES LESS THAN (10 + 5), +PARTITION part_4 VALUES LESS THAN (20), +PARTITION part_5 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair note The storage engine for the table doesn't support repair +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 +(PARTITION part_1 VALUES LESS THAN (0), +PARTITION part_2 VALUES LESS THAN (5), +PARTITION part_3 VALUES LESS THAN (10), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair note The storage engine for the table doesn't support repair +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 KEY(f_int1) +(PARTITION part_1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part_2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part_3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair note The storage engine for the table doesn't support repair +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) +(PARTITION part_1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part_2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part_3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +PARTITION part_4 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair note The storage engine for the table doesn't support repair +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 +(PARTITION part_1 VALUES IN (0), + PARTITION part_2 VALUES IN (1), + PARTITION part_3 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 +WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1; +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair note The storage engine for the table doesn't support repair +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +DROP VIEW IF EXISTS v1; +DROP TABLE IF EXISTS t1; +DROP TABLE IF EXISTS t0_aux; +DROP TABLE IF EXISTS t0_definition; +DROP TABLE IF EXISTS t0_template; diff --git a/mysql-test/suite/tokudb.parts/r-native/partition_auto_increment_tokudb.result b/mysql-test/suite/tokudb.parts/r-native/partition_auto_increment_tokudb.result new file mode 100644 index 000000000000..c782b2d4d7e2 --- /dev/null +++ b/mysql-test/suite/tokudb.parts/r-native/partition_auto_increment_tokudb.result @@ -0,0 +1,1410 @@ +SET @tokudb_prelock_empty_saved = @@GLOBAL.tokudb_prelock_empty; +SET GLOBAL tokudb_prelock_empty = 0; +SET SESSION tokudb_prelock_empty = 0; +DROP TABLE IF EXISTS t1; +# test without partitioning for reference +CREATE TABLE t1 ( +c1 INT NOT NULL AUTO_INCREMENT, +PRIMARY KEY (c1)) +ENGINE='TokuDB'; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`c1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test' +AND TABLE_NAME='t1'; +AUTO_INCREMENT +1 +INSERT INTO t1 VALUES (2); +INSERT INTO t1 VALUES (4); +INSERT INTO t1 VALUES (NULL); +SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test' +AND TABLE_NAME='t1'; +AUTO_INCREMENT +6 +SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test' +AND TABLE_NAME='t1'; +AUTO_INCREMENT +6 +INSERT INTO t1 VALUES (0); +INSERT INTO t1 VALUES (5), (16); +INSERT INTO t1 VALUES (17); +INSERT INTO t1 VALUES (19), (NULL); +INSERT INTO t1 VALUES (NULL), (10), (NULL); +INSERT INTO t1 VALUES (NULL); +SET INSERT_ID = 30; +INSERT INTO t1 VALUES (NULL); +SET INSERT_ID = 29; +INSERT INTO t1 VALUES (NULL), (NULL), (NULL); +INSERT INTO t1 VALUES (NULL); +UPDATE t1 SET c1 = 50 WHERE c1 = 17; +UPDATE t1 SET c1 = 51 WHERE c1 = 19; +FLUSH TABLES; +UPDATE t1 SET c1 = 40 WHERE c1 = 50; +UPDATE t1 SET c1 = -1 WHERE c1 = 40; +SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test' + AND TABLE_NAME='t1'; +AUTO_INCREMENT +52 +UPDATE IGNORE t1 SET c1 = NULL WHERE c1 = 4; +Warnings: +Warning 1048 Column 'c1' cannot be null +INSERT INTO t1 VALUES (NULL); +INSERT INTO t1 VALUES (NULL); +SELECT * FROM t1 ORDER BY c1; +c1 +-1 +0 +2 +5 +6 +10 +20 +22 +23 +25 +30 +31 +51 +52 +53 +DROP TABLE t1; +CREATE TABLE t1 ( +c1 INT NOT NULL AUTO_INCREMENT, +PRIMARY KEY (c1)) +ENGINE='TokuDB'; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`c1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +FLUSH TABLE; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`c1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +INSERT INTO t1 VALUES (4); +FLUSH TABLE; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`c1`) +) ENGINE=TokuDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1 +INSERT INTO t1 VALUES (NULL); +FLUSH TABLE; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`c1`) +) ENGINE=TokuDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1 +DELETE FROM t1; +INSERT INTO t1 VALUES (NULL); +INSERT INTO t1 VALUES (-1); +INSERT INTO t1 VALUES (NULL); +INSERT INTO t1 VALUES (NULL); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`c1`) +) ENGINE=TokuDB AUTO_INCREMENT=9 DEFAULT CHARSET=latin1 +SELECT * FROM t1 ORDER BY c1; +c1 +-1 +6 +7 +8 +TRUNCATE TABLE t1; +INSERT INTO t1 VALUES (NULL); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`c1`) +) ENGINE=TokuDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1 +SELECT * FROM t1 ORDER BY c1; +c1 +1 +INSERT INTO t1 VALUES (100); +INSERT INTO t1 VALUES (NULL); +DELETE FROM t1 WHERE c1 >= 100; +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`c1`) +) ENGINE=TokuDB AUTO_INCREMENT=102 DEFAULT CHARSET=latin1 +DROP TABLE t1; +CREATE TABLE t1 +(a INT NULL AUTO_INCREMENT, +UNIQUE KEY (a)) +ENGINE='TokuDB'; +SET LAST_INSERT_ID = 999; +SET INSERT_ID = 0; +INSERT INTO t1 SET a = 1 ON DUPLICATE KEY UPDATE a = NULL; +SELECT LAST_INSERT_ID(); +LAST_INSERT_ID() +999 +SELECT * FROM t1; +a +1 +INSERT INTO t1 SET a = 1 ON DUPLICATE KEY UPDATE a = NULL; +SELECT LAST_INSERT_ID(); +LAST_INSERT_ID() +999 +SELECT * FROM t1; +a +0 +UPDATE t1 SET a = 1 WHERE a IS NULL; +SELECT LAST_INSERT_ID(); +LAST_INSERT_ID() +999 +SELECT * FROM t1; +a +0 +UPDATE t1 SET a = NULL WHERE a = 1; +SELECT LAST_INSERT_ID(); +LAST_INSERT_ID() +999 +SELECT * FROM t1; +a +0 +DROP TABLE t1; +SET INSERT_ID = 1; +# Simple test with NULL +CREATE TABLE t1 ( +c1 INT NOT NULL AUTO_INCREMENT, +PRIMARY KEY (c1)) +ENGINE='TokuDB' +PARTITION BY HASH(c1) +PARTITIONS 2; +INSERT INTO t1 VALUES (NULL); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`c1`) +) ENGINE=TokuDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (c1) +PARTITIONS 2 */ +SELECT * FROM t1; +c1 +1 +DROP TABLE t1; +# Test with sql_mode and first insert as 0 +CREATE TABLE t1 ( +c1 INT, +c2 INT NOT NULL AUTO_INCREMENT, +PRIMARY KEY (c2)) +ENGINE='TokuDB' +PARTITION BY HASH(c2) +PARTITIONS 2; +INSERT INTO t1 VALUES (1, NULL); +INSERT INTO t1 VALUES (1, 1), (99, 99); +INSERT INTO t1 VALUES (1, NULL); +SET @@session.sql_mode = 'NO_AUTO_VALUE_ON_ZERO'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +INSERT INTO t1 VALUES (1, 0); +SELECT * FROM t1 ORDER BY c1, c2; +c1 c2 +1 0 +1 1 +1 2 +DROP TABLE t1; +CREATE TABLE t1 ( +c1 INT, +c2 INT NOT NULL AUTO_INCREMENT, +PRIMARY KEY (c2)) +ENGINE='TokuDB' +PARTITION BY HASH(c2) +PARTITIONS 2; +INSERT INTO t1 VALUES (1, 0); +INSERT INTO t1 VALUES (1, 1), (1, NULL); +INSERT INTO t1 VALUES (2, NULL), (4, 7); +INSERT INTO t1 VALUES (1, NULL); +SELECT * FROM t1 ORDER BY c1, c2; +c1 c2 +1 0 +1 1 +1 2 +1 8 +2 3 +4 7 +SET @@session.sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +DROP TABLE t1; +# Simple test with NULL, 0 and explicit values both incr. and desc. +CREATE TABLE t1 ( +c1 INT NOT NULL AUTO_INCREMENT, +PRIMARY KEY (c1)) +ENGINE='TokuDB' +PARTITION BY HASH(c1) +PARTITIONS 2; +INSERT INTO t1 VALUES (2), (4), (NULL); +INSERT INTO t1 VALUES (0); +INSERT INTO t1 VALUES (5), (16); +INSERT INTO t1 VALUES (17), (19), (NULL); +INSERT INTO t1 VALUES (NULL), (10), (NULL); +INSERT INTO t1 VALUES (NULL), (9); +INSERT INTO t1 VALUES (59), (55); +INSERT INTO t1 VALUES (NULL), (90); +INSERT INTO t1 VALUES (NULL); +UPDATE t1 SET c1 = 150 WHERE c1 = 17; +UPDATE t1 SET c1 = 151 WHERE c1 = 19; +FLUSH TABLES; +UPDATE t1 SET c1 = 140 WHERE c1 = 150; +SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test' + AND TABLE_NAME='t1'; +AUTO_INCREMENT +152 +UPDATE IGNORE t1 SET c1 = NULL WHERE c1 = 4; +Warnings: +Warning 1048 Column 'c1' cannot be null +INSERT INTO t1 VALUES (NULL); +INSERT INTO t1 VALUES (NULL); +SELECT * FROM t1 ORDER BY c1; +c1 +0 +2 +5 +6 +9 +10 +20 +21 +22 +23 +55 +59 +60 +90 +91 +140 +151 +152 +153 +DROP TABLE t1; +# Test with auto_increment_increment and auto_increment_offset. +CREATE TABLE t1 ( +c1 INT NOT NULL AUTO_INCREMENT, +PRIMARY KEY (c1)) +ENGINE='TokuDB' +PARTITION BY HASH(c1) +PARTITIONS 2; +SET @@session.auto_increment_increment = 10; +SET @@session.auto_increment_offset = 5; +INSERT INTO t1 VALUES (1); +INSERT INTO t1 VALUES (NULL), (NULL), (NULL); +SET @@session.auto_increment_increment = 5; +SET @@session.auto_increment_offset = 3; +INSERT INTO t1 VALUES (NULL); +INSERT INTO t1 VALUES (43 + 1); +INSERT INTO t1 VALUES (NULL); +INSERT INTO t1 VALUES (48 + 2); +INSERT INTO t1 VALUES (NULL); +INSERT INTO t1 VALUES (53 + 3); +INSERT INTO t1 VALUES (NULL); +INSERT INTO t1 VALUES (58 + 4); +INSERT INTO t1 VALUES (NULL); +INSERT INTO t1 VALUES (63 + 5); +INSERT INTO t1 VALUES (NULL); +INSERT INTO t1 VALUES (73 + 6); +INSERT INTO t1 VALUES (NULL); +SET @@session.auto_increment_increment = 1; +SET @@session.auto_increment_offset = 1; +SELECT * FROM t1 ORDER BY c1; +c1 +1 +15 +25 +35 +43 +44 +48 +50 +53 +56 +58 +62 +63 +68 +73 +79 +83 +DROP TABLE t1; +# Test reported auto_increment value +CREATE TABLE t1 ( +c1 INT NOT NULL AUTO_INCREMENT, +PRIMARY KEY (c1)) +ENGINE='TokuDB' +PARTITION BY HASH (c1) +PARTITIONS 2; +SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test' +AND TABLE_NAME='t1'; +AUTO_INCREMENT +1 +INSERT INTO t1 VALUES (2); +SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test' +AND TABLE_NAME='t1'; +AUTO_INCREMENT +3 +INSERT INTO t1 VALUES (4); +INSERT INTO t1 VALUES (NULL); +SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test' +AND TABLE_NAME='t1'; +AUTO_INCREMENT +6 +INSERT INTO t1 VALUES (NULL); +INSERT INTO t1 VALUES (17); +INSERT INTO t1 VALUES (19); +INSERT INTO t1 VALUES (NULL); +INSERT INTO t1 VALUES (NULL); +SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test' +AND TABLE_NAME='t1'; +AUTO_INCREMENT +22 +SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test' +AND TABLE_NAME='t1'; +AUTO_INCREMENT +22 +INSERT INTO t1 VALUES (10); +SELECT * FROM t1 ORDER BY c1; +c1 +2 +4 +5 +6 +10 +17 +19 +20 +21 +INSERT INTO t1 VALUES (NULL); +SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test' +AND TABLE_NAME='t1'; +AUTO_INCREMENT +23 +INSERT INTO t1 VALUES (NULL); +INSERT INTO t1 VALUES (15); +INSERT INTO t1 VALUES (NULL); +SELECT * FROM t1 ORDER BY c1; +c1 +2 +4 +5 +6 +10 +15 +17 +19 +20 +21 +22 +23 +24 +INSERT INTO t1 VALUES (NULL); +DELETE FROM t1; +INSERT INTO t1 VALUES (NULL); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`c1`) +) ENGINE=TokuDB AUTO_INCREMENT=27 DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (c1) +PARTITIONS 2 */ +SELECT * FROM t1 ORDER BY c1; +c1 +26 +TRUNCATE TABLE t1; +INSERT INTO t1 VALUES (NULL); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`c1`) +) ENGINE=TokuDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (c1) +PARTITIONS 2 */ +SELECT * FROM t1 ORDER BY c1; +c1 +1 +INSERT INTO t1 VALUES (100); +INSERT INTO t1 VALUES (NULL); +DELETE FROM t1 WHERE c1 >= 100; +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`c1`) +) ENGINE=TokuDB AUTO_INCREMENT=102 DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (c1) +PARTITIONS 2 */ +DROP TABLE t1; +# Test with two threads +# con default +CREATE TABLE t1 (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (c1)) +ENGINE = 'TokuDB' +PARTITION BY HASH(c1) +PARTITIONS 2; +INSERT INTO t1 (c1) VALUES (2); +INSERT INTO t1 (c1) VALUES (4); +# con1 +INSERT INTO t1 (c1) VALUES (NULL); +INSERT INTO t1 (c1) VALUES (10); +# con default +INSERT INTO t1 (c1) VALUES (NULL); +INSERT INTO t1 (c1) VALUES (NULL); +INSERT INTO t1 (c1) VALUES (19); +INSERT INTO t1 (c1) VALUES (21); +# con1 +INSERT INTO t1 (c1) VALUES (NULL); +# con default +INSERT INTO t1 (c1) VALUES (16); +# con1 +INSERT INTO t1 (c1) VALUES (NULL); +# con default +INSERT INTO t1 (c1) VALUES (NULL); +SELECT * FROM t1 ORDER BY c1; +c1 +2 +4 +5 +10 +11 +12 +16 +19 +21 +22 +23 +24 +DROP TABLE t1; +# Test with two threads + start transaction NO PARTITIONING +# con default +CREATE TABLE t1 (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (c1)) +ENGINE = 'TokuDB'; +START TRANSACTION; +INSERT INTO t1 (c1) VALUES (2); +INSERT INTO t1 (c1) VALUES (4); +# con1 +START TRANSACTION; +INSERT INTO t1 (c1) VALUES (NULL); +INSERT INTO t1 (c1) VALUES (10); +# con default +INSERT INTO t1 (c1) VALUES (NULL); +INSERT INTO t1 (c1) VALUES (NULL); +INSERT INTO t1 (c1) VALUES (19); +INSERT INTO t1 (c1) VALUES (21); +# con1 +INSERT INTO t1 (c1) VALUES (NULL); +# con default +INSERT INTO t1 (c1) VALUES (16); +# con1 +INSERT INTO t1 (c1) VALUES (NULL); +SELECT * FROM t1 ORDER BY c1; +c1 +5 +10 +22 +23 +COMMIT; +SELECT * FROM t1 ORDER BY c1; +c1 +5 +10 +22 +23 +# con default +INSERT INTO t1 (c1) VALUES (NULL); +SELECT * FROM t1 ORDER BY c1; +c1 +2 +4 +11 +12 +16 +19 +21 +24 +COMMIT; +SELECT * FROM t1 ORDER BY c1; +c1 +2 +4 +5 +10 +11 +12 +16 +19 +21 +22 +23 +24 +DROP TABLE t1; +# Test with two threads + start transaction +# con default +CREATE TABLE t1 (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (c1)) +ENGINE = 'TokuDB' +PARTITION BY HASH(c1) +PARTITIONS 2; +START TRANSACTION; +INSERT INTO t1 (c1) VALUES (2); +INSERT INTO t1 (c1) VALUES (4); +# con1 +START TRANSACTION; +INSERT INTO t1 (c1) VALUES (NULL), (10); +# con default +INSERT INTO t1 (c1) VALUES (NULL), (NULL), (19); +INSERT INTO t1 (c1) VALUES (21); +# con1 +INSERT INTO t1 (c1) VALUES (NULL); +# con default +INSERT INTO t1 (c1) VALUES (16); +# con1 +INSERT INTO t1 (c1) VALUES (NULL); +SELECT * FROM t1 ORDER BY c1; +c1 +5 +10 +22 +23 +COMMIT; +SELECT * FROM t1 ORDER BY c1; +c1 +5 +10 +22 +23 +# con default +INSERT INTO t1 (c1) VALUES (NULL); +SELECT * FROM t1 ORDER BY c1; +c1 +2 +4 +11 +12 +16 +19 +21 +24 +COMMIT; +SELECT * FROM t1 ORDER BY c1; +c1 +2 +4 +5 +10 +11 +12 +16 +19 +21 +22 +23 +24 +DROP TABLE t1; +# Test with another column after +CREATE TABLE t1 ( +c1 INT NOT NULL AUTO_INCREMENT, +c2 INT, +PRIMARY KEY (c1,c2)) +ENGINE = 'TokuDB' +PARTITION BY HASH(c2) +PARTITIONS 2; +INSERT INTO t1 VALUES (1, 0); +INSERT INTO t1 VALUES (1, 1); +INSERT INTO t1 VALUES (NULL, 1), (NULL, 2), (NULL, 3); +INSERT INTO t1 VALUES (NULL, 3); +INSERT INTO t1 VALUES (2, 0), (NULL, 2); +INSERT INTO t1 VALUES (2, 2); +INSERT INTO t1 VALUES (2, 22); +INSERT INTO t1 VALUES (NULL, 2); +SELECT * FROM t1 ORDER BY c1,c2; +c1 c2 +1 0 +1 1 +2 0 +2 1 +2 2 +2 22 +3 2 +4 3 +5 3 +6 2 +7 2 +DROP TABLE t1; +# Test with another column before +CREATE TABLE t1 ( +c1 INT, +c2 INT NOT NULL AUTO_INCREMENT, +PRIMARY KEY (c2)) +ENGINE = 'TokuDB' +PARTITION BY HASH(c2) +PARTITIONS 2; +INSERT INTO t1 VALUES (1, 0); +INSERT INTO t1 VALUES (1, 1); +INSERT INTO t1 VALUES (1, NULL); +INSERT INTO t1 VALUES (2, NULL), (3, 11), (3, NULL), (2, 0); +INSERT INTO t1 VALUES (2, NULL); +INSERT INTO t1 VALUES (2, 2); +INSERT INTO t1 VALUES (2, 22); +INSERT INTO t1 VALUES (2, NULL); +SELECT * FROM t1 ORDER BY c1,c2; +c1 c2 +1 1 +1 2 +2 3 +2 13 +2 14 +2 22 +2 23 +3 11 +3 12 +DROP TABLE t1; +# Test with auto_increment on secondary column in multi-column-index +CREATE TABLE t1 ( +c1 INT, +c2 INT NOT NULL AUTO_INCREMENT, +PRIMARY KEY (c1,c2)) +ENGINE = 'TokuDB' +PARTITION BY HASH(c2) +PARTITIONS 2; +INSERT INTO t1 VALUES (1, 0); +INSERT INTO t1 VALUES (1, 1); +INSERT INTO t1 VALUES (1, NULL); +INSERT INTO t1 VALUES (2, NULL); +INSERT INTO t1 VALUES (3, NULL); +INSERT INTO t1 VALUES (3, NULL), (2, 0), (2, NULL); +INSERT INTO t1 VALUES (2, 2); +# ERROR (only OK if Blackhole/NDB) should give ER_DUP_KEY or ER_DUP_ENTRY +# mysql_errno: 0 +INSERT INTO t1 VALUES (2, 22), (2, NULL); +SELECT * FROM t1 ORDER BY c1,c2; +c1 c2 +1 1 +1 2 +2 2 +2 3 +2 6 +2 7 +2 22 +2 23 +3 4 +3 5 +DROP TABLE t1; +# Test AUTO_INCREMENT in CREATE +CREATE TABLE t1 (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (c1)) +ENGINE = 'TokuDB' +AUTO_INCREMENT = 15 +PARTITION BY HASH(c1) +PARTITIONS 2; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`c1`) +) ENGINE=TokuDB AUTO_INCREMENT=15 DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (c1) +PARTITIONS 2 */ +INSERT INTO t1 (c1) VALUES (4); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`c1`) +) ENGINE=TokuDB AUTO_INCREMENT=15 DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (c1) +PARTITIONS 2 */ +INSERT INTO t1 (c1) VALUES (0); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`c1`) +) ENGINE=TokuDB AUTO_INCREMENT=16 DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (c1) +PARTITIONS 2 */ +INSERT INTO t1 (c1) VALUES (NULL); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`c1`) +) ENGINE=TokuDB AUTO_INCREMENT=17 DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (c1) +PARTITIONS 2 */ +SELECT * FROM t1 ORDER BY c1; +c1 +4 +15 +16 +# Test sql_mode 'NO_AUTO_VALUE_ON_ZERO' +SET @@session.sql_mode = 'NO_AUTO_VALUE_ON_ZERO'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +INSERT INTO t1 (c1) VALUES (300); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`c1`) +) ENGINE=TokuDB AUTO_INCREMENT=301 DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (c1) +PARTITIONS 2 */ +INSERT INTO t1 (c1) VALUES (0); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`c1`) +) ENGINE=TokuDB AUTO_INCREMENT=301 DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (c1) +PARTITIONS 2 */ +INSERT INTO t1 (c1) VALUES (NULL); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`c1`) +) ENGINE=TokuDB AUTO_INCREMENT=302 DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (c1) +PARTITIONS 2 */ +SELECT * FROM t1 ORDER BY c1; +c1 +0 +4 +15 +16 +300 +301 +SET @@session.sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +DROP TABLE t1; +# Test SET INSERT_ID +CREATE TABLE t1 (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (c1)) +ENGINE = 'TokuDB' +PARTITION BY HASH(c1) +PARTITIONS 2; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`c1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (c1) +PARTITIONS 2 */ +INSERT INTO t1 (c1) VALUES (NULL); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`c1`) +) ENGINE=TokuDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (c1) +PARTITIONS 2 */ +SELECT * FROM t1; +c1 +1 +SET INSERT_ID = 23; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`c1`) +) ENGINE=TokuDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (c1) +PARTITIONS 2 */ +INSERT INTO t1 (c1) VALUES (NULL); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`c1`) +) ENGINE=TokuDB AUTO_INCREMENT=24 DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (c1) +PARTITIONS 2 */ +SET INSERT_ID = 22; +INSERT INTO t1 VALUES (NULL), (NULL), (NULL); +INSERT INTO t1 VALUES (NULL); +SELECT * FROM t1 ORDER BY c1; +c1 +1 +23 +24 +DROP TABLE t1; +# Testing with FLUSH TABLE +CREATE TABLE t1 ( +c1 INT NOT NULL AUTO_INCREMENT, +PRIMARY KEY (c1)) +ENGINE='TokuDB' +PARTITION BY HASH(c1) +PARTITIONS 2; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`c1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (c1) +PARTITIONS 2 */ +FLUSH TABLE; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`c1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (c1) +PARTITIONS 2 */ +INSERT INTO t1 VALUES (4); +FLUSH TABLE; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`c1`) +) ENGINE=TokuDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (c1) +PARTITIONS 2 */ +INSERT INTO t1 VALUES (NULL); +FLUSH TABLE; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`c1`) +) ENGINE=TokuDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (c1) +PARTITIONS 2 */ +SELECT * FROM t1 ORDER BY c1; +c1 +4 +5 +DROP TABLE t1; +############################################################################# +# Bug #45823 - Assertion failure in file row/row0mysql.c line 1386 +# Bug #43988 - AUTO_INCREMENT errors with partitioned InnoDB tables in 5.1.31 +############################################################################## +# Inserting negative autoincrement values into a partition table (partitions >= 4) +CREATE TABLE t (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1), +c2 INT) ENGINE='TokuDB' PARTITION BY HASH(c1) PARTITIONS 4; +INSERT INTO t(c2) VALUES (10); +INSERT INTO t(c2) VALUES (20); +INSERT INTO t VALUES (-1,-10); +INSERT INTO t(c2) VALUES (30); +INSERT INTO t(c2) VALUES (40); +SELECT * FROM t ORDER BY c1 ASC; +c1 c2 +-1 -10 +1 10 +2 20 +3 30 +4 40 +DROP TABLE t; +# Reading from a partition table (partitions >= 2 ) after inserting a negative +# value into the auto increment column +CREATE TABLE t (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1), +c2 INT) ENGINE='TokuDB' PARTITION BY HASH(c1) PARTITIONS 2; +INSERT INTO t VALUES (-2,-20); +INSERT INTO t(c2) VALUES (30); +SELECT * FROM t ORDER BY c1 ASC; +c1 c2 +-2 -20 +1 30 +DROP TABLE t; +# Inserting negative auto increment value into a partition table (partitions >= 2) +# auto increment value > 2. +CREATE TABLE t (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1), +c2 INT) ENGINE='TokuDB' PARTITION BY HASH(c1) PARTITIONS 2; +INSERT INTO t VALUES (-4,-20); +INSERT INTO t(c2) VALUES (30); +INSERT INTO t(c2) VALUES (40); +SELECT * FROM t ORDER BY c1 ASC; +c1 c2 +-4 -20 +1 30 +2 40 +DROP TABLE t; +# Inserting -1 into autoincrement column of a partition table (partition >= 4) +CREATE TABLE t (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1), +c2 INT) ENGINE='TokuDB' PARTITION BY HASH(c1) PARTITIONS 4; +INSERT INTO t(c2) VALUES (10); +INSERT INTO t(c2) VALUES (20); +INSERT INTO t VALUES (-1,-10); +SELECT * FROM t ORDER BY c1 ASC; +c1 c2 +-1 -10 +1 10 +2 20 +INSERT INTO t(c2) VALUES (30); +SELECT * FROM t ORDER BY c1 ASC; +c1 c2 +-1 -10 +1 10 +2 20 +3 30 +DROP TABLE t; +# Deleting from an auto increment table after inserting negative values +CREATE TABLE t (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1), +c2 INT) ENGINE='TokuDB' PARTITION BY HASH(c1) PARTITIONS 4; +INSERT INTO t(c2) VALUES (10); +INSERT INTO t(c2) VALUES (20); +INSERT INTO t VALUES (-1,-10); +INSERT INTO t(c2) VALUES (30); +INSERT INTO t VALUES (-3,-20); +INSERT INTO t(c2) VALUES (40); +SELECT * FROM t ORDER BY c1 ASC; +c1 c2 +-3 -20 +-1 -10 +1 10 +2 20 +3 30 +4 40 +DELETE FROM t WHERE c1 > 1; +SELECT * FROM t ORDER BY c1 ASC; +c1 c2 +-3 -20 +-1 -10 +1 10 +DROP TABLE t; +# Inserting a positive value that exceeds maximum allowed value for an +# Auto Increment column (positive maximum) +CREATE TABLE t (c1 TINYINT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1), +c2 INT) ENGINE='TokuDB' PARTITION BY HASH(c1) PARTITIONS 4; +INSERT INTO t(c2) VALUES (10); +INSERT INTO t(c2) VALUES (20); +INSERT INTO t VALUES (126,30); +INSERT INTO t VALUES (127,40); +SET sql_mode = 'NO_ENGINE_SUBSTITUTION'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +INSERT INTO t VALUES (128,50); +INSERT INTO t VALUES (129,60); +SELECT * FROM t ORDER BY c1 ASC; +c1 c2 +1 10 +2 20 +126 30 +127 40 +DROP TABLE t; +# Inserting a negative value that goes below minimum allowed value for an +# Auto Increment column (negative minimum) +CREATE TABLE t (c1 TINYINT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1), +c2 INT) ENGINE='TokuDB' PARTITION BY HASH(c1) PARTITIONS 4; +INSERT INTO t(c2) VALUES (10); +INSERT INTO t(c2) VALUES (20); +INSERT INTO t VALUES (-127,30); +INSERT INTO t VALUES (-128,40); +INSERT INTO t VALUES (-129,50); +INSERT INTO t VALUES (-130,60); +SELECT * FROM t ORDER BY c1 ASC; +c1 c2 +-128 40 +-127 30 +1 10 +2 20 +DROP TABLE t; +# Updating the partition table with a negative Auto Increment value +CREATE TABLE t (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1), +c2 INT) ENGINE='TokuDB' PARTITION BY HASH(c1) PARTITIONS 4; +INSERT INTO t(c2) VALUES (10); +INSERT INTO t(c2) VALUES (20); +INSERT INTO t VALUES (-1,-10); +INSERT INTO t(c2) VALUES (30); +SELECT * FROM t ORDER BY c1 ASC; +c1 c2 +-1 -10 +1 10 +2 20 +3 30 +UPDATE t SET c1 = -6 WHERE c1 = 2; +SELECT * FROM t ORDER BY c1 ASC; +c1 c2 +-6 20 +-1 -10 +1 10 +3 30 +INSERT INTO t(c2) VALUES (40); +INSERT INTO t(c2) VALUES (50); +UPDATE t SET c1 = -6 WHERE c1 = 2; +SELECT * FROM t ORDER BY c1 ASC; +c1 c2 +-6 20 +-1 -10 +1 10 +3 30 +4 40 +5 50 +DROP TABLE t; +SET sql_mode = default; +# Updating the partition table with a value that crosses the upper limits +# on both the positive and the negative side. +CREATE TABLE t (c1 TINYINT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1), +c2 INT) ENGINE='TokuDB' PARTITION BY HASH(c1) PARTITIONS 4; +INSERT INTO t(c2) VALUES (10); +INSERT INTO t(c2) VALUES (20); +INSERT INTO t VALUES (126,30); +INSERT INTO t VALUES (127,40); +SELECT * FROM t ORDER BY c1 ASC; +c1 c2 +1 10 +2 20 +126 30 +127 40 +UPDATE IGNORE t SET c1 = 130 where c1 = 127; +Warnings: +Warning 1264 Out of range value for column 'c1' at row 1 +SELECT * FROM t ORDER BY c1 ASC; +c1 c2 +1 10 +2 20 +126 30 +127 40 +UPDATE IGNORE t SET c1 = -140 where c1 = 126; +Warnings: +Warning 1264 Out of range value for column 'c1' at row 1 +SELECT * FROM t ORDER BY c1 ASC; +c1 c2 +-128 30 +1 10 +2 20 +127 40 +DROP TABLE t; +CREATE TABLE t1 +(a INT NULL AUTO_INCREMENT, +UNIQUE KEY (a)) +ENGINE='TokuDB' +PARTITION BY KEY(a) PARTITIONS 2; +SET LAST_INSERT_ID = 999; +INSERT INTO t1 SET a = 1 ON DUPLICATE KEY UPDATE a = NULL; +SELECT LAST_INSERT_ID(); +LAST_INSERT_ID() +999 +SELECT * FROM t1; +a +1 +INSERT INTO t1 SET a = 1 ON DUPLICATE KEY UPDATE a = NULL; +SELECT LAST_INSERT_ID(); +LAST_INSERT_ID() +999 +SELECT * FROM t1; +a +0 +UPDATE t1 SET a = 1 WHERE a IS NULL; +SELECT LAST_INSERT_ID(); +LAST_INSERT_ID() +999 +SELECT * FROM t1; +a +0 +UPDATE t1 SET a = NULL WHERE a = 1; +SELECT LAST_INSERT_ID(); +LAST_INSERT_ID() +999 +SELECT * FROM t1; +a +0 +DROP TABLE t1; +############################################################################## +# +# Test overflow +# +# Single row insert signed int +CREATE TABLE t1 +(a int not null auto_increment primary key, b varchar(64)) +ENGINE = 'TokuDB' +PARTITION BY HASH (a) PARTITIONS 3; +INSERT INTO t1 VALUES (0x7FFFFFFD, "2"); +INSERT INTO t1 VALUES (NULL, "1"); +INSERT INTO t1 VALUES (NULL, "0"); +INSERT INTO t1 VALUES (NULL, "Overflow"); +SHOW WARNINGS; +Level Code Message +Error 1264 Out of range value for column 'a' at row 1 +Error 1264 Out of range value for column 't1' at row 167 +INSERT INTO t1 VALUES (5, "non-generated number"); +FLUSH TABLES; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) NOT NULL AUTO_INCREMENT, + `b` varchar(64) DEFAULT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB AUTO_INCREMENT=2147483648 DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (a) +PARTITIONS 3 */ +SELECT * FROM t1; +a b +2147483645 2 +2147483646 1 +2147483647 0 +5 non-generated number +DROP TABLE t1; +CREATE TABLE `t1` ( +`a` int(11) NOT NULL AUTO_INCREMENT, +`b` varchar(64) DEFAULT NULL, +PRIMARY KEY (`a`) +) ENGINE='TokuDB' +AUTO_INCREMENT=2147483648 DEFAULT CHARSET=latin1 +PARTITION BY HASH (a) PARTITIONS 3; +INSERT INTO t1 VALUES (NULL, "Overflow"); +# mysql_errno: 1264 +INSERT INTO t1 VALUES (NULL, "Overflow"); +# mysql_errno: 1264 +DROP TABLE t1; +# Multi row insert signed int +CREATE TABLE t1 +(a int not null auto_increment primary key, b varchar(64)) +ENGINE = 'TokuDB' +PARTITION BY HASH (a) PARTITIONS 3; +INSERT INTO t1 VALUES (0x7FFFFFFD, "2"); +INSERT INTO t1 VALUES (NULL, "1"), (NULL, "0"), (NULL, "Overflow"); +ERROR HY000: Failed to read auto-increment value from storage engine +INSERT INTO t1 VALUES (NULL, "1"); +# mysql_errno: 1264 +INSERT INTO t1 VALUES (NULL, "0"); +# mysql_errno: 1264 +INSERT INTO t1 VALUES (NULL, "Overflow"); +ERROR 22003: Out of range value for column 'a' at row 1 +INSERT INTO t1 VALUES (5, "non-generated number"); +FLUSH TABLES; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) NOT NULL AUTO_INCREMENT, + `b` varchar(64) DEFAULT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB AUTO_INCREMENT=2147483648 DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (a) +PARTITIONS 3 */ +SELECT * FROM t1; +a b +2147483645 2 +5 non-generated number +DROP TABLE t1; +# Single row insert unsigned int +CREATE TABLE t1 +(a int unsigned not null auto_increment primary key, b varchar(64)) +ENGINE = 'TokuDB' +PARTITION BY HASH (a) PARTITIONS 3; +INSERT INTO t1 VALUES (0xFFFFFFFD, "2"); +INSERT INTO t1 VALUES (NULL, "1"); +INSERT INTO t1 VALUES (NULL, "0"); +INSERT INTO t1 VALUES (NULL, "Overflow"); +ERROR 22003: Out of range value for column 'a' at row 1 +INSERT INTO t1 VALUES (5, "non-generated number"); +FLUSH TABLES; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(10) unsigned NOT NULL AUTO_INCREMENT, + `b` varchar(64) DEFAULT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB AUTO_INCREMENT=4294967296 DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (a) +PARTITIONS 3 */ +SELECT * FROM t1; +a b +4294967293 2 +4294967294 1 +4294967295 0 +5 non-generated number +DROP TABLE t1; +CREATE TABLE `t1` ( +`a` int(10) unsigned NOT NULL AUTO_INCREMENT, +`b` varchar(64) DEFAULT NULL, +PRIMARY KEY (`a`) +) ENGINE='TokuDB' AUTO_INCREMENT=4294967296 DEFAULT CHARSET=latin1 +PARTITION BY HASH (a) PARTITIONS 3; +INSERT INTO t1 VALUES (NULL, "Overflow"); +# mysql_errno: 1264 +DROP TABLE t1; +# Multi row insert unsigned int +CREATE TABLE t1 +(a int unsigned not null auto_increment primary key, b varchar(64)) +ENGINE = 'TokuDB' +PARTITION BY HASH (a) PARTITIONS 3; +INSERT INTO t1 VALUES (0xFFFFFFFD, "2"); +INSERT INTO t1 VALUES (NULL, "1"), (NULL, "0"), (NULL, "Overflow"); +ERROR HY000: Failed to read auto-increment value from storage engine +INSERT INTO t1 VALUES (NULL, "1"); +# mysql_errno: 1264 +INSERT INTO t1 VALUES (NULL, "0"); +# mysql_errno: 1264 +INSERT INTO t1 VALUES (NULL, "Overflow"); +ERROR 22003: Out of range value for column 'a' at row 1 +INSERT INTO t1 VALUES (5, "non-generated number"); +FLUSH TABLES; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(10) unsigned NOT NULL AUTO_INCREMENT, + `b` varchar(64) DEFAULT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB AUTO_INCREMENT=4294967296 DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (a) +PARTITIONS 3 */ +SELECT * FROM t1; +a b +4294967293 2 +5 non-generated number +DROP TABLE t1; +# Single row insert signed bigint +CREATE TABLE t1 +(a bigint not null auto_increment primary key, b varchar(64)) +ENGINE = 'TokuDB' +PARTITION BY HASH (a) PARTITIONS 3; +INSERT INTO t1 VALUES (0x7FFFFFFFFFFFFFFD, "2"); +INSERT INTO t1 VALUES (NULL, "1"); +INSERT INTO t1 VALUES (NULL, "0"); +INSERT INTO t1 VALUES (NULL, "Overflow"); +ERROR 22003: Out of range value for column 'a' at row 1 +INSERT INTO t1 VALUES (5, "non-generated number"); +FLUSH TABLES; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` bigint(20) NOT NULL AUTO_INCREMENT, + `b` varchar(64) DEFAULT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB AUTO_INCREMENT=9223372036854775808 DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (a) +PARTITIONS 3 */ +SELECT * FROM t1; +a b +5 non-generated number +9223372036854775805 2 +9223372036854775806 1 +9223372036854775807 0 +DROP TABLE t1; +CREATE TABLE `t1` ( +`a` bigint(20) NOT NULL AUTO_INCREMENT, +`b` varchar(64) DEFAULT NULL, +PRIMARY KEY (`a`) +) ENGINE='TokuDB' AUTO_INCREMENT=9223372036854775808 DEFAULT CHARSET=latin1 +PARTITION BY HASH (a) +PARTITIONS 3; +INSERT INTO t1 VALUES (NULL, "Overflow"); +# mysql_errno: 1264 +DROP TABLE t1; +# Multi row insert signed bigint +CREATE TABLE t1 +(a bigint not null auto_increment primary key, b varchar(64)) +ENGINE = 'TokuDB' +PARTITION BY HASH (a) PARTITIONS 3; +INSERT INTO t1 VALUES (0x7FFFFFFFFFFFFFFD, "2"); +INSERT INTO t1 VALUES (NULL, "1"), (NULL, "0"), (NULL, "Overflow"); +ERROR HY000: Failed to read auto-increment value from storage engine +INSERT INTO t1 VALUES (NULL, "1"); +# mysql_errno: 1264 +INSERT INTO t1 VALUES (NULL, "0"); +# mysql_errno: 1264 +INSERT INTO t1 VALUES (NULL, "Overflow"); +ERROR 22003: Out of range value for column 'a' at row 1 +INSERT INTO t1 VALUES (5, "non-generated number"); +FLUSH TABLES; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` bigint(20) NOT NULL AUTO_INCREMENT, + `b` varchar(64) DEFAULT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB AUTO_INCREMENT=9223372036854775808 DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (a) +PARTITIONS 3 */ +SELECT * FROM t1; +a b +5 non-generated number +9223372036854775805 2 +DROP TABLE t1; +# Single row insert unsigned bigint +CREATE TABLE t1 +(a bigint unsigned not null auto_increment primary key, b varchar(64)) +ENGINE = 'TokuDB' +PARTITION BY HASH (a) PARTITIONS 3; +INSERT INTO t1 VALUES (0xFFFFFFFFFFFFFFFD, "2"); +INSERT INTO t1 VALUES (NULL, "1"); +INSERT INTO t1 VALUES (NULL, "0"); +ERROR HY000: Failed to read auto-increment value from storage engine +INSERT INTO t1 VALUES (NULL, "Overflow"); +ERROR HY000: Failed to read auto-increment value from storage engine +INSERT INTO t1 VALUES (5, "non-generated number"); +FLUSH TABLES; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `b` varchar(64) DEFAULT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB AUTO_INCREMENT=18446744073709551615 DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (a) +PARTITIONS 3 */ +SELECT * FROM t1; +a b +18446744073709551613 2 +18446744073709551614 1 +5 non-generated number +DROP TABLE t1; +CREATE TABLE `t1` ( +`a` bigint(20) unsigned NOT NULL AUTO_INCREMENT, +`b` varchar(64) DEFAULT NULL, +PRIMARY KEY (`a`) +) ENGINE='TokuDB' AUTO_INCREMENT=18446744073709551615 DEFAULT CHARSET=latin1 +PARTITION BY HASH (a) +PARTITIONS 3; +INSERT INTO t1 VALUES (NULL, "Overflow"); +# mysql_errno: 1467 +DROP TABLE t1; +# Multi row insert unsigned bigint +CREATE TABLE t1 +(a bigint unsigned not null auto_increment primary key, b varchar(64)) +ENGINE = 'TokuDB' +PARTITION BY HASH (a) PARTITIONS 3; +INSERT INTO t1 VALUES (0xFFFFFFFFFFFFFFFD, "2"); +INSERT INTO t1 VALUES (NULL, "1"), (NULL, "0"), (NULL, "Overflow"); +ERROR HY000: Failed to read auto-increment value from storage engine +INSERT INTO t1 VALUES (NULL, "1"); +# mysql_errno: 1467 +INSERT INTO t1 VALUES (NULL, "0"); +# mysql_errno: 1467 +INSERT INTO t1 VALUES (NULL, "Overflow"); +Got one of the listed errors +# mysql_errno: 1467 +INSERT INTO t1 VALUES (5, "non-generated number"); +FLUSH TABLES; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `b` varchar(64) DEFAULT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB AUTO_INCREMENT=18446744073709551615 DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (a) +PARTITIONS 3 */ +SELECT * FROM t1; +a b +18446744073709551613 2 +5 non-generated number +DROP TABLE t1; +SET GLOBAL tokudb_prelock_empty = @tokudb_prelock_empty_saved; diff --git a/mysql-test/suite/tokudb.parts/r-native/partition_basic_symlink_tokudb.result b/mysql-test/suite/tokudb.parts/r-native/partition_basic_symlink_tokudb.result new file mode 100644 index 000000000000..586b8b21fbbc --- /dev/null +++ b/mysql-test/suite/tokudb.parts/r-native/partition_basic_symlink_tokudb.result @@ -0,0 +1,130 @@ +# +# Verify that the DATA/INDEX DIR is stored and used if ALTER to MyISAM. +# +DROP TABLE IF EXISTS t1; +SET SESSION innodb_strict_mode = ON; +# +# TokuDB only supports DATA DIRECTORY with innodb_file_per_table=ON +# +SET GLOBAL innodb_file_per_table = OFF; +CREATE TABLE t1 (c1 INT) ENGINE = TokuDB +PARTITION BY HASH (c1) ( +PARTITION p0 +DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' + INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir', +PARTITION p1 +DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' + INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' +); +ERROR HY000: Table storage engine for 't1' doesn't have this option +SHOW WARNINGS; +Level Code Message +Warning 1478 TokuDB: DATA DIRECTORY requires innodb_file_per_table. +Warning 1478 TokuDB: INDEX DIRECTORY is not supported +Error 1031 Table storage engine for 't1' doesn't have this option +Error 6 Error on delete of 'MYSQLD_DATADIR/test/t1.par' (Errcode: 2 - No such file or directory) +# +# TokuDB is different from MyISAM in that it uses a text file +# with an '.isl' extension instead of a symbolic link so that +# the tablespace can be re-located on any OS. Also, instead of +# putting the file directly into the DATA DIRECTORY, +# it adds a folder under it with the name of the database. +# Since strict mode is off, TokuDB ignores the INDEX DIRECTORY +# and it is no longer part of the definition. +# +SET SESSION innodb_strict_mode = OFF; +SET GLOBAL innodb_file_per_table = ON; +CREATE TABLE t1 (c1 INT) ENGINE = TokuDB +PARTITION BY HASH (c1) +(PARTITION p0 +DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' + INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir', +PARTITION p1 +DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' + INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir' +); +Warnings: +Warning 1618 option ignored +Warning 1618 option ignored +SHOW WARNINGS; +Level Code Message +Warning 1618 option ignored +Warning 1618 option ignored +# Verifying .frm, .par, .isl & .ibd files +---- MYSQLD_DATADIR/test +t1#P#p0.isl +t1#P#p1.isl +t1.frm +t1.par +---- MYSQLTEST_VARDIR/mysql-test-data-dir/test +t1#P#p0.ibd +t1#P#p1.ibd +# The ibd tablespaces should not be directly under the DATA DIRECTORY +---- MYSQLTEST_VARDIR/mysql-test-data-dir +test +---- MYSQLTEST_VARDIR/mysql-test-idx-dir +FLUSH TABLES; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (c1) +(PARTITION p0 DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' ENGINE = TokuDB, + PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' ENGINE = TokuDB) */ +# +# Verify that the DATA/INDEX DIRECTORY is stored and used if we +# ALTER TABLE to MyISAM. +# +ALTER TABLE t1 engine=MyISAM; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (c1) +(PARTITION p0 DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' ENGINE = MyISAM, + PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' ENGINE = MyISAM) */ +# Verifying .frm, .par and MyISAM files (.MYD, MYI) +---- MYSQLD_DATADIR/test +t1#P#p0.MYD +t1#P#p0.MYI +t1#P#p1.MYD +t1#P#p1.MYI +t1.frm +t1.par +---- MYSQLTEST_VARDIR/mysql-test-data-dir +t1#P#p0.MYD +t1#P#p1.MYD +test +---- MYSQLTEST_VARDIR/mysql-test-idx-dir +# +# Now verify that the DATA DIRECTORY is used again if we +# ALTER TABLE back to TokuDB. +# +SET SESSION innodb_strict_mode = ON; +ALTER TABLE t1 engine=TokuDB; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (c1) +(PARTITION p0 DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' ENGINE = TokuDB, + PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' ENGINE = TokuDB) */ +# Verifying .frm, .par, .isl and TokuDB .ibd files +---- MYSQLD_DATADIR/test +t1#P#p0.isl +t1#P#p1.isl +t1.frm +t1.par +---- MYSQLTEST_VARDIR/mysql-test-data-dir +test +---- MYSQLTEST_VARDIR/mysql-test-idx-dir +---- MYSQLTEST_VARDIR/mysql-test-data-dir/test +t1#P#p0.ibd +t1#P#p1.ibd +DROP TABLE t1; +# +# Cleanup +# diff --git a/mysql-test/suite/tokudb.parts/r-native/partition_basic_tokudb.result b/mysql-test/suite/tokudb.parts/r-native/partition_basic_tokudb.result new file mode 100644 index 000000000000..08b85c2dcfbd --- /dev/null +++ b/mysql-test/suite/tokudb.parts/r-native/partition_basic_tokudb.result @@ -0,0 +1,33358 @@ +SET @max_row = 20; +SET @@session.default_storage_engine = 'TokuDB'; + +#------------------------------------------------------------------------ +# 0. Setting of auxiliary variables + Creation of an auxiliary tables +# needed in many testcases +#------------------------------------------------------------------------ +SELECT @max_row DIV 2 INTO @max_row_div2; +SELECT @max_row DIV 3 INTO @max_row_div3; +SELECT @max_row DIV 4 INTO @max_row_div4; +SET @max_int_4 = 2147483647; +DROP TABLE IF EXISTS t0_template; +CREATE TABLE t0_template ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) , +PRIMARY KEY(f_int1)) +ENGINE = MEMORY; +# Logging of INSERTs into t0_template suppressed +DROP TABLE IF EXISTS t0_definition; +CREATE TABLE t0_definition ( +state CHAR(3), +create_command VARBINARY(5000), +file_list VARBINARY(10000), +PRIMARY KEY (state) +) ENGINE = MEMORY; +DROP TABLE IF EXISTS t0_aux; +CREATE TABLE t0_aux ( f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) ) +ENGINE = MEMORY; +SET AUTOCOMMIT= 1; +SET @@session.sql_mode= ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +# End of basic preparations needed for all tests +#----------------------------------------------- + +#======================================================================== +# Check partitioning methods on just created tables +# The tables should be defined without/with PRIMARY KEY and +# UNIQUE INDEXes. +# Every test round has to check +# PARTITION BY HASH/KEY/LIST/RANGE +# PARTITION BY RANGE/LIST ... SUBPARTITION BY HASH/KEY ... +#======================================================================== +#------------------------------------------------------------------------ +# 1 Tables without PRIMARY KEY or UNIQUE INDEXes +#------------------------------------------------------------------------ +# 1.1 The partitioning function contains one column. +DROP TABLE IF EXISTS t1; +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; +INSERT INTO t1(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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1) +PARTITIONS 2 */ + +unified filelist +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY KEY(f_int1) 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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1) +PARTITIONS 5 */ + +unified filelist +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb +t1_P_p2_main_id.tokudb +t1_P_p2_status_id.tokudb +t1_P_p3_main_id.tokudb +t1_P_p3_status_id.tokudb +t1_P_p4_main_id.tokudb +t1_P_p4_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +unified filelist +t1.frm +t1_P_part0_main_id.tokudb +t1_P_part0_status_id.tokudb +t1_P_part1_main_id.tokudb +t1_P_part1_status_id.tokudb +t1_P_part2_main_id.tokudb +t1_P_part2_status_id.tokudb +t1_P_part3_main_id.tokudb +t1_P_part3_status_id.tokudb +t1_P_part_1_main_id.tokudb +t1_P_part_1_status_id.tokudb +t1_P_part_2_main_id.tokudb +t1_P_part_2_status_id.tokudb +t1_P_part_3_main_id.tokudb +t1_P_part_3_status_id.tokudb +t1_P_part_N_main_id.tokudb +t1_P_part_N_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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) +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +PARTITION partc VALUES LESS THAN (10), +PARTITION partd VALUES LESS THAN (10 + 5), +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION parte VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION partf VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +unified filelist +t1.frm +t1_P_parta_main_id.tokudb +t1_P_parta_status_id.tokudb +t1_P_partb_main_id.tokudb +t1_P_partb_status_id.tokudb +t1_P_partc_main_id.tokudb +t1_P_partc_status_id.tokudb +t1_P_partd_main_id.tokudb +t1_P_partd_status_id.tokudb +t1_P_parte_main_id.tokudb +t1_P_parte_status_id.tokudb +t1_P_partf_main_id.tokudb +t1_P_partf_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1 DIV 2) +SUBPARTITION BY HASH (f_int1) +SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +unified filelist +t1.frm +t1_P_parta_SP_partasp0_main_id.tokudb +t1_P_parta_SP_partasp0_status_id.tokudb +t1_P_parta_SP_partasp1_main_id.tokudb +t1_P_parta_SP_partasp1_status_id.tokudb +t1_P_partb_SP_partbsp0_main_id.tokudb +t1_P_partb_SP_partbsp0_status_id.tokudb +t1_P_partb_SP_partbsp1_main_id.tokudb +t1_P_partb_SP_partbsp1_status_id.tokudb +t1_P_partc_SP_partcsp0_main_id.tokudb +t1_P_partc_SP_partcsp0_status_id.tokudb +t1_P_partc_SP_partcsp1_main_id.tokudb +t1_P_partc_SP_partcsp1_status_id.tokudb +t1_P_partd_SP_partdsp0_main_id.tokudb +t1_P_partd_SP_partdsp0_status_id.tokudb +t1_P_partd_SP_partdsp1_main_id.tokudb +t1_P_partd_SP_partdsp1_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 KEY(f_int1) +(PARTITION part1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int1) +(PARTITION part1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +unified filelist +t1.frm +t1_P_part1_SP_subpart11_main_id.tokudb +t1_P_part1_SP_subpart11_status_id.tokudb +t1_P_part1_SP_subpart12_main_id.tokudb +t1_P_part1_SP_subpart12_status_id.tokudb +t1_P_part2_SP_subpart21_main_id.tokudb +t1_P_part2_SP_subpart21_status_id.tokudb +t1_P_part2_SP_subpart22_main_id.tokudb +t1_P_part2_SP_subpart22_status_id.tokudb +t1_P_part3_SP_subpart31_main_id.tokudb +t1_P_part3_SP_subpart31_status_id.tokudb +t1_P_part3_SP_subpart32_main_id.tokudb +t1_P_part3_SP_subpart32_status_id.tokudb +t1_P_part4_SP_subpart41_main_id.tokudb +t1_P_part4_SP_subpart41_status_id.tokudb +t1_P_part4_SP_subpart42_main_id.tokudb +t1_P_part4_SP_subpart42_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) +(PARTITION part1 VALUES IN (0) +(SUBPARTITION sp11, +SUBPARTITION sp12), +PARTITION part2 VALUES IN (1) +(SUBPARTITION sp21, +SUBPARTITION sp22), +PARTITION part3 VALUES IN (2) +(SUBPARTITION sp31, +SUBPARTITION sp32), +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 (inc/partition_check.inc) +create_command +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=TokuDB 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 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +unified filelist +t1.frm +t1_P_part1_SP_sp11_main_id.tokudb +t1_P_part1_SP_sp11_status_id.tokudb +t1_P_part1_SP_sp12_main_id.tokudb +t1_P_part1_SP_sp12_status_id.tokudb +t1_P_part2_SP_sp21_main_id.tokudb +t1_P_part2_SP_sp21_status_id.tokudb +t1_P_part2_SP_sp22_main_id.tokudb +t1_P_part2_SP_sp22_status_id.tokudb +t1_P_part3_SP_sp31_main_id.tokudb +t1_P_part3_SP_sp31_status_id.tokudb +t1_P_part3_SP_sp32_main_id.tokudb +t1_P_part3_SP_sp32_status_id.tokudb +t1_P_part4_SP_sp41_main_id.tokudb +t1_P_part4_SP_sp41_status_id.tokudb +t1_P_part4_SP_sp42_main_id.tokudb +t1_P_part4_SP_sp42_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0), +PARTITION part2 VALUES IN (1), +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int1) +SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part3 VALUES IN (NULL) ENGINE = TokuDB) */ + +unified filelist +t1.frm +t1_P_part1_SP_part1sp0_main_id.tokudb +t1_P_part1_SP_part1sp0_status_id.tokudb +t1_P_part1_SP_part1sp1_main_id.tokudb +t1_P_part1_SP_part1sp1_status_id.tokudb +t1_P_part1_SP_part1sp2_main_id.tokudb +t1_P_part1_SP_part1sp2_status_id.tokudb +t1_P_part2_SP_part2sp0_main_id.tokudb +t1_P_part2_SP_part2sp0_status_id.tokudb +t1_P_part2_SP_part2sp1_main_id.tokudb +t1_P_part2_SP_part2sp1_status_id.tokudb +t1_P_part2_SP_part2sp2_main_id.tokudb +t1_P_part2_SP_part2sp2_status_id.tokudb +t1_P_part3_SP_part3sp0_main_id.tokudb +t1_P_part3_SP_part3sp0_status_id.tokudb +t1_P_part3_SP_part3sp1_main_id.tokudb +t1_P_part3_SP_part3sp1_status_id.tokudb +t1_P_part3_SP_part3sp2_main_id.tokudb +t1_P_part3_SP_part3sp2_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +# 1.2 The partitioning function contains two columns. +DROP TABLE IF EXISTS t1; +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 + 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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1 + f_int2) +PARTITIONS 2 */ + +unified filelist +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1,f_int2) +PARTITIONS 5 */ + +unified filelist +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb +t1_P_p2_main_id.tokudb +t1_P_p2_status_id.tokudb +t1_P_p3_main_id.tokudb +t1_P_p3_status_id.tokudb +t1_P_p4_main_id.tokudb +t1_P_p4_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(MOD(f_int1 + f_int2,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +unified filelist +t1.frm +t1_P_part0_main_id.tokudb +t1_P_part0_status_id.tokudb +t1_P_part1_main_id.tokudb +t1_P_part1_status_id.tokudb +t1_P_part2_main_id.tokudb +t1_P_part2_status_id.tokudb +t1_P_part3_main_id.tokudb +t1_P_part3_status_id.tokudb +t1_P_part_1_main_id.tokudb +t1_P_part_1_status_id.tokudb +t1_P_part_2_main_id.tokudb +t1_P_part_2_status_id.tokudb +t1_P_part_3_main_id.tokudb +t1_P_part_3_status_id.tokudb +t1_P_part_N_main_id.tokudb +t1_P_part_N_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 + f_int2) DIV 2) +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +PARTITION partc VALUES LESS THAN (10), +PARTITION partd VALUES LESS THAN (10 + 5), +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION parte VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION partf VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +unified filelist +t1.frm +t1_P_parta_main_id.tokudb +t1_P_parta_status_id.tokudb +t1_P_partb_main_id.tokudb +t1_P_partb_status_id.tokudb +t1_P_partc_main_id.tokudb +t1_P_partc_status_id.tokudb +t1_P_partd_main_id.tokudb +t1_P_partd_status_id.tokudb +t1_P_parte_main_id.tokudb +t1_P_parte_status_id.tokudb +t1_P_partf_main_id.tokudb +t1_P_partf_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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_int2) SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY HASH (f_int2) +SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +unified filelist +t1.frm +t1_P_parta_SP_partasp0_main_id.tokudb +t1_P_parta_SP_partasp0_status_id.tokudb +t1_P_parta_SP_partasp1_main_id.tokudb +t1_P_parta_SP_partasp1_status_id.tokudb +t1_P_partb_SP_partbsp0_main_id.tokudb +t1_P_partb_SP_partbsp0_status_id.tokudb +t1_P_partb_SP_partbsp1_main_id.tokudb +t1_P_partb_SP_partbsp1_status_id.tokudb +t1_P_partc_SP_partcsp0_main_id.tokudb +t1_P_partc_SP_partcsp0_status_id.tokudb +t1_P_partc_SP_partcsp1_main_id.tokudb +t1_P_partc_SP_partcsp1_status_id.tokudb +t1_P_partd_SP_partdsp0_main_id.tokudb +t1_P_partd_SP_partdsp0_status_id.tokudb +t1_P_partd_SP_partdsp1_main_id.tokudb +t1_P_partd_SP_partdsp1_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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 KEY(f_int2) +(PARTITION part1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int2) +(PARTITION part1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +unified filelist +t1.frm +t1_P_part1_SP_subpart11_main_id.tokudb +t1_P_part1_SP_subpart11_status_id.tokudb +t1_P_part1_SP_subpart12_main_id.tokudb +t1_P_part1_SP_subpart12_status_id.tokudb +t1_P_part2_SP_subpart21_main_id.tokudb +t1_P_part2_SP_subpart21_status_id.tokudb +t1_P_part2_SP_subpart22_main_id.tokudb +t1_P_part2_SP_subpart22_status_id.tokudb +t1_P_part3_SP_subpart31_main_id.tokudb +t1_P_part3_SP_subpart31_status_id.tokudb +t1_P_part3_SP_subpart32_main_id.tokudb +t1_P_part3_SP_subpart32_status_id.tokudb +t1_P_part4_SP_subpart41_main_id.tokudb +t1_P_part4_SP_subpart41_status_id.tokudb +t1_P_part4_SP_subpart42_main_id.tokudb +t1_P_part4_SP_subpart42_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1) +(PARTITION part1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) +SUBPARTITION BY HASH (f_int2 + 1) +(PARTITION part1 VALUES IN (0) + (SUBPARTITION sp11 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +unified filelist +t1.frm +t1_P_part1_SP_sp11_main_id.tokudb +t1_P_part1_SP_sp11_status_id.tokudb +t1_P_part1_SP_sp12_main_id.tokudb +t1_P_part1_SP_sp12_status_id.tokudb +t1_P_part2_SP_sp21_main_id.tokudb +t1_P_part2_SP_sp21_status_id.tokudb +t1_P_part2_SP_sp22_main_id.tokudb +t1_P_part2_SP_sp22_status_id.tokudb +t1_P_part3_SP_sp31_main_id.tokudb +t1_P_part3_SP_sp31_status_id.tokudb +t1_P_part3_SP_sp32_main_id.tokudb +t1_P_part3_SP_sp32_status_id.tokudb +t1_P_part4_SP_sp41_main_id.tokudb +t1_P_part4_SP_sp41_status_id.tokudb +t1_P_part4_SP_sp42_main_id.tokudb +t1_P_part4_SP_sp42_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) + +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int2) SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0), +PARTITION part2 VALUES IN (1), +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int2) +SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part3 VALUES IN (NULL) ENGINE = TokuDB) */ + +unified filelist +t1.frm +t1_P_part1_SP_part1sp0_main_id.tokudb +t1_P_part1_SP_part1sp0_status_id.tokudb +t1_P_part1_SP_part1sp1_main_id.tokudb +t1_P_part1_SP_part1sp1_status_id.tokudb +t1_P_part1_SP_part1sp2_main_id.tokudb +t1_P_part1_SP_part1sp2_status_id.tokudb +t1_P_part2_SP_part2sp0_main_id.tokudb +t1_P_part2_SP_part2sp0_status_id.tokudb +t1_P_part2_SP_part2sp1_main_id.tokudb +t1_P_part2_SP_part2sp1_status_id.tokudb +t1_P_part2_SP_part2sp2_main_id.tokudb +t1_P_part2_SP_part2sp2_status_id.tokudb +t1_P_part3_SP_part3sp0_main_id.tokudb +t1_P_part3_SP_part3sp0_status_id.tokudb +t1_P_part3_SP_part3sp1_main_id.tokudb +t1_P_part3_SP_part3sp1_status_id.tokudb +t1_P_part3_SP_part3sp2_main_id.tokudb +t1_P_part3_SP_part3sp2_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +#------------------------------------------------------------------------ +# 2 Tables with PRIMARY KEY and/or UNIQUE INDEXes +# The partitioning function contains one column. +#------------------------------------------------------------------------ +# 2.5 PRIMARY KEY + UNIQUE INDEX consisting of two columns +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1) +) +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`), + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1) +PARTITIONS 2 */ + +unified filelist +t1.frm +t1_P_p0_key_uidx1_id.tokudb +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_key_uidx1_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1) +) +PARTITION BY KEY(f_int1) 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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`), + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1) +PARTITIONS 5 */ + +unified filelist +t1.frm +t1_P_p0_key_uidx1_id.tokudb +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_key_uidx1_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb +t1_P_p2_key_uidx1_id.tokudb +t1_P_p2_main_id.tokudb +t1_P_p2_status_id.tokudb +t1_P_p3_key_uidx1_id.tokudb +t1_P_p3_main_id.tokudb +t1_P_p3_status_id.tokudb +t1_P_p4_key_uidx1_id.tokudb +t1_P_p4_main_id.tokudb +t1_P_p4_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1) +) +PARTITION BY LIST(MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`), + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +unified filelist +t1.frm +t1_P_part0_key_uidx1_id.tokudb +t1_P_part0_main_id.tokudb +t1_P_part0_status_id.tokudb +t1_P_part1_key_uidx1_id.tokudb +t1_P_part1_main_id.tokudb +t1_P_part1_status_id.tokudb +t1_P_part2_key_uidx1_id.tokudb +t1_P_part2_main_id.tokudb +t1_P_part2_status_id.tokudb +t1_P_part3_key_uidx1_id.tokudb +t1_P_part3_main_id.tokudb +t1_P_part3_status_id.tokudb +t1_P_part_1_key_uidx1_id.tokudb +t1_P_part_1_main_id.tokudb +t1_P_part_1_status_id.tokudb +t1_P_part_2_key_uidx1_id.tokudb +t1_P_part_2_main_id.tokudb +t1_P_part_2_status_id.tokudb +t1_P_part_3_key_uidx1_id.tokudb +t1_P_part_3_main_id.tokudb +t1_P_part_3_status_id.tokudb +t1_P_part_N_key_uidx1_id.tokudb +t1_P_part_N_main_id.tokudb +t1_P_part_N_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1) +) +PARTITION BY RANGE(f_int1) +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +PARTITION partc VALUES LESS THAN (10), +PARTITION partd VALUES LESS THAN (10 + 5), +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`), + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION parte VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION partf VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +unified filelist +t1.frm +t1_P_parta_key_uidx1_id.tokudb +t1_P_parta_main_id.tokudb +t1_P_parta_status_id.tokudb +t1_P_partb_key_uidx1_id.tokudb +t1_P_partb_main_id.tokudb +t1_P_partb_status_id.tokudb +t1_P_partc_key_uidx1_id.tokudb +t1_P_partc_main_id.tokudb +t1_P_partc_status_id.tokudb +t1_P_partd_key_uidx1_id.tokudb +t1_P_partd_main_id.tokudb +t1_P_partd_status_id.tokudb +t1_P_parte_key_uidx1_id.tokudb +t1_P_parte_main_id.tokudb +t1_P_parte_status_id.tokudb +t1_P_partf_key_uidx1_id.tokudb +t1_P_partf_main_id.tokudb +t1_P_partf_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1) +) +PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`), + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1 DIV 2) +SUBPARTITION BY HASH (f_int1) +SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +unified filelist +t1.frm +t1_P_parta_SP_partasp0_key_uidx1_id.tokudb +t1_P_parta_SP_partasp0_main_id.tokudb +t1_P_parta_SP_partasp0_status_id.tokudb +t1_P_parta_SP_partasp1_key_uidx1_id.tokudb +t1_P_parta_SP_partasp1_main_id.tokudb +t1_P_parta_SP_partasp1_status_id.tokudb +t1_P_partb_SP_partbsp0_key_uidx1_id.tokudb +t1_P_partb_SP_partbsp0_main_id.tokudb +t1_P_partb_SP_partbsp0_status_id.tokudb +t1_P_partb_SP_partbsp1_key_uidx1_id.tokudb +t1_P_partb_SP_partbsp1_main_id.tokudb +t1_P_partb_SP_partbsp1_status_id.tokudb +t1_P_partc_SP_partcsp0_key_uidx1_id.tokudb +t1_P_partc_SP_partcsp0_main_id.tokudb +t1_P_partc_SP_partcsp0_status_id.tokudb +t1_P_partc_SP_partcsp1_key_uidx1_id.tokudb +t1_P_partc_SP_partcsp1_main_id.tokudb +t1_P_partc_SP_partcsp1_status_id.tokudb +t1_P_partd_SP_partdsp0_key_uidx1_id.tokudb +t1_P_partd_SP_partdsp0_main_id.tokudb +t1_P_partd_SP_partdsp0_status_id.tokudb +t1_P_partd_SP_partdsp1_key_uidx1_id.tokudb +t1_P_partd_SP_partdsp1_main_id.tokudb +t1_P_partd_SP_partdsp1_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1) +) +PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1) +(PARTITION part1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`), + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int1) +(PARTITION part1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +unified filelist +t1.frm +t1_P_part1_SP_subpart11_key_uidx1_id.tokudb +t1_P_part1_SP_subpart11_main_id.tokudb +t1_P_part1_SP_subpart11_status_id.tokudb +t1_P_part1_SP_subpart12_key_uidx1_id.tokudb +t1_P_part1_SP_subpart12_main_id.tokudb +t1_P_part1_SP_subpart12_status_id.tokudb +t1_P_part2_SP_subpart21_key_uidx1_id.tokudb +t1_P_part2_SP_subpart21_main_id.tokudb +t1_P_part2_SP_subpart21_status_id.tokudb +t1_P_part2_SP_subpart22_key_uidx1_id.tokudb +t1_P_part2_SP_subpart22_main_id.tokudb +t1_P_part2_SP_subpart22_status_id.tokudb +t1_P_part3_SP_subpart31_key_uidx1_id.tokudb +t1_P_part3_SP_subpart31_main_id.tokudb +t1_P_part3_SP_subpart31_status_id.tokudb +t1_P_part3_SP_subpart32_key_uidx1_id.tokudb +t1_P_part3_SP_subpart32_main_id.tokudb +t1_P_part3_SP_subpart32_status_id.tokudb +t1_P_part4_SP_subpart41_key_uidx1_id.tokudb +t1_P_part4_SP_subpart41_main_id.tokudb +t1_P_part4_SP_subpart41_status_id.tokudb +t1_P_part4_SP_subpart42_key_uidx1_id.tokudb +t1_P_part4_SP_subpart42_main_id.tokudb +t1_P_part4_SP_subpart42_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1) +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) +(PARTITION part1 VALUES IN (0) +(SUBPARTITION sp11, +SUBPARTITION sp12), +PARTITION part2 VALUES IN (1) +(SUBPARTITION sp21, +SUBPARTITION sp22), +PARTITION part3 VALUES IN (2) +(SUBPARTITION sp31, +SUBPARTITION sp32), +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`), + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`) +) ENGINE=TokuDB 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 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +unified filelist +t1.frm +t1_P_part1_SP_sp11_key_uidx1_id.tokudb +t1_P_part1_SP_sp11_main_id.tokudb +t1_P_part1_SP_sp11_status_id.tokudb +t1_P_part1_SP_sp12_key_uidx1_id.tokudb +t1_P_part1_SP_sp12_main_id.tokudb +t1_P_part1_SP_sp12_status_id.tokudb +t1_P_part2_SP_sp21_key_uidx1_id.tokudb +t1_P_part2_SP_sp21_main_id.tokudb +t1_P_part2_SP_sp21_status_id.tokudb +t1_P_part2_SP_sp22_key_uidx1_id.tokudb +t1_P_part2_SP_sp22_main_id.tokudb +t1_P_part2_SP_sp22_status_id.tokudb +t1_P_part3_SP_sp31_key_uidx1_id.tokudb +t1_P_part3_SP_sp31_main_id.tokudb +t1_P_part3_SP_sp31_status_id.tokudb +t1_P_part3_SP_sp32_key_uidx1_id.tokudb +t1_P_part3_SP_sp32_main_id.tokudb +t1_P_part3_SP_sp32_status_id.tokudb +t1_P_part4_SP_sp41_key_uidx1_id.tokudb +t1_P_part4_SP_sp41_main_id.tokudb +t1_P_part4_SP_sp41_status_id.tokudb +t1_P_part4_SP_sp42_key_uidx1_id.tokudb +t1_P_part4_SP_sp42_main_id.tokudb +t1_P_part4_SP_sp42_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1) +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0), +PARTITION part2 VALUES IN (1), +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`), + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int1) +SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part3 VALUES IN (NULL) ENGINE = TokuDB) */ + +unified filelist +t1.frm +t1_P_part1_SP_part1sp0_key_uidx1_id.tokudb +t1_P_part1_SP_part1sp0_main_id.tokudb +t1_P_part1_SP_part1sp0_status_id.tokudb +t1_P_part1_SP_part1sp1_key_uidx1_id.tokudb +t1_P_part1_SP_part1sp1_main_id.tokudb +t1_P_part1_SP_part1sp1_status_id.tokudb +t1_P_part1_SP_part1sp2_key_uidx1_id.tokudb +t1_P_part1_SP_part1sp2_main_id.tokudb +t1_P_part1_SP_part1sp2_status_id.tokudb +t1_P_part2_SP_part2sp0_key_uidx1_id.tokudb +t1_P_part2_SP_part2sp0_main_id.tokudb +t1_P_part2_SP_part2sp0_status_id.tokudb +t1_P_part2_SP_part2sp1_key_uidx1_id.tokudb +t1_P_part2_SP_part2sp1_main_id.tokudb +t1_P_part2_SP_part2sp1_status_id.tokudb +t1_P_part2_SP_part2sp2_key_uidx1_id.tokudb +t1_P_part2_SP_part2sp2_main_id.tokudb +t1_P_part2_SP_part2sp2_status_id.tokudb +t1_P_part3_SP_part3sp0_key_uidx1_id.tokudb +t1_P_part3_SP_part3sp0_main_id.tokudb +t1_P_part3_SP_part3sp0_status_id.tokudb +t1_P_part3_SP_part3sp1_key_uidx1_id.tokudb +t1_P_part3_SP_part3sp1_main_id.tokudb +t1_P_part3_SP_part3sp1_status_id.tokudb +t1_P_part3_SP_part3sp2_key_uidx1_id.tokudb +t1_P_part3_SP_part3sp2_main_id.tokudb +t1_P_part3_SP_part3sp2_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2) +) +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`), + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1) +PARTITIONS 2 */ + +unified filelist +t1.frm +t1_P_p0_key_uidx1_id.tokudb +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_key_uidx1_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2) +) +PARTITION BY KEY(f_int1) 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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`), + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1) +PARTITIONS 5 */ + +unified filelist +t1.frm +t1_P_p0_key_uidx1_id.tokudb +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_key_uidx1_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb +t1_P_p2_key_uidx1_id.tokudb +t1_P_p2_main_id.tokudb +t1_P_p2_status_id.tokudb +t1_P_p3_key_uidx1_id.tokudb +t1_P_p3_main_id.tokudb +t1_P_p3_status_id.tokudb +t1_P_p4_key_uidx1_id.tokudb +t1_P_p4_main_id.tokudb +t1_P_p4_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2) +) +PARTITION BY LIST(MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`), + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +unified filelist +t1.frm +t1_P_part0_key_uidx1_id.tokudb +t1_P_part0_main_id.tokudb +t1_P_part0_status_id.tokudb +t1_P_part1_key_uidx1_id.tokudb +t1_P_part1_main_id.tokudb +t1_P_part1_status_id.tokudb +t1_P_part2_key_uidx1_id.tokudb +t1_P_part2_main_id.tokudb +t1_P_part2_status_id.tokudb +t1_P_part3_key_uidx1_id.tokudb +t1_P_part3_main_id.tokudb +t1_P_part3_status_id.tokudb +t1_P_part_1_key_uidx1_id.tokudb +t1_P_part_1_main_id.tokudb +t1_P_part_1_status_id.tokudb +t1_P_part_2_key_uidx1_id.tokudb +t1_P_part_2_main_id.tokudb +t1_P_part_2_status_id.tokudb +t1_P_part_3_key_uidx1_id.tokudb +t1_P_part_3_main_id.tokudb +t1_P_part_3_status_id.tokudb +t1_P_part_N_key_uidx1_id.tokudb +t1_P_part_N_main_id.tokudb +t1_P_part_N_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2) +) +PARTITION BY RANGE(f_int1) +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +PARTITION partc VALUES LESS THAN (10), +PARTITION partd VALUES LESS THAN (10 + 5), +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`), + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION parte VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION partf VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +unified filelist +t1.frm +t1_P_parta_key_uidx1_id.tokudb +t1_P_parta_main_id.tokudb +t1_P_parta_status_id.tokudb +t1_P_partb_key_uidx1_id.tokudb +t1_P_partb_main_id.tokudb +t1_P_partb_status_id.tokudb +t1_P_partc_key_uidx1_id.tokudb +t1_P_partc_main_id.tokudb +t1_P_partc_status_id.tokudb +t1_P_partd_key_uidx1_id.tokudb +t1_P_partd_main_id.tokudb +t1_P_partd_status_id.tokudb +t1_P_parte_key_uidx1_id.tokudb +t1_P_parte_main_id.tokudb +t1_P_parte_status_id.tokudb +t1_P_partf_key_uidx1_id.tokudb +t1_P_partf_main_id.tokudb +t1_P_partf_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2) +) +PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`), + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1 DIV 2) +SUBPARTITION BY HASH (f_int1) +SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +unified filelist +t1.frm +t1_P_parta_SP_partasp0_key_uidx1_id.tokudb +t1_P_parta_SP_partasp0_main_id.tokudb +t1_P_parta_SP_partasp0_status_id.tokudb +t1_P_parta_SP_partasp1_key_uidx1_id.tokudb +t1_P_parta_SP_partasp1_main_id.tokudb +t1_P_parta_SP_partasp1_status_id.tokudb +t1_P_partb_SP_partbsp0_key_uidx1_id.tokudb +t1_P_partb_SP_partbsp0_main_id.tokudb +t1_P_partb_SP_partbsp0_status_id.tokudb +t1_P_partb_SP_partbsp1_key_uidx1_id.tokudb +t1_P_partb_SP_partbsp1_main_id.tokudb +t1_P_partb_SP_partbsp1_status_id.tokudb +t1_P_partc_SP_partcsp0_key_uidx1_id.tokudb +t1_P_partc_SP_partcsp0_main_id.tokudb +t1_P_partc_SP_partcsp0_status_id.tokudb +t1_P_partc_SP_partcsp1_key_uidx1_id.tokudb +t1_P_partc_SP_partcsp1_main_id.tokudb +t1_P_partc_SP_partcsp1_status_id.tokudb +t1_P_partd_SP_partdsp0_key_uidx1_id.tokudb +t1_P_partd_SP_partdsp0_main_id.tokudb +t1_P_partd_SP_partdsp0_status_id.tokudb +t1_P_partd_SP_partdsp1_key_uidx1_id.tokudb +t1_P_partd_SP_partdsp1_main_id.tokudb +t1_P_partd_SP_partdsp1_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2) +) +PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1) +(PARTITION part1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`), + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int1) +(PARTITION part1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +unified filelist +t1.frm +t1_P_part1_SP_subpart11_key_uidx1_id.tokudb +t1_P_part1_SP_subpart11_main_id.tokudb +t1_P_part1_SP_subpart11_status_id.tokudb +t1_P_part1_SP_subpart12_key_uidx1_id.tokudb +t1_P_part1_SP_subpart12_main_id.tokudb +t1_P_part1_SP_subpart12_status_id.tokudb +t1_P_part2_SP_subpart21_key_uidx1_id.tokudb +t1_P_part2_SP_subpart21_main_id.tokudb +t1_P_part2_SP_subpart21_status_id.tokudb +t1_P_part2_SP_subpart22_key_uidx1_id.tokudb +t1_P_part2_SP_subpart22_main_id.tokudb +t1_P_part2_SP_subpart22_status_id.tokudb +t1_P_part3_SP_subpart31_key_uidx1_id.tokudb +t1_P_part3_SP_subpart31_main_id.tokudb +t1_P_part3_SP_subpart31_status_id.tokudb +t1_P_part3_SP_subpart32_key_uidx1_id.tokudb +t1_P_part3_SP_subpart32_main_id.tokudb +t1_P_part3_SP_subpart32_status_id.tokudb +t1_P_part4_SP_subpart41_key_uidx1_id.tokudb +t1_P_part4_SP_subpart41_main_id.tokudb +t1_P_part4_SP_subpart41_status_id.tokudb +t1_P_part4_SP_subpart42_key_uidx1_id.tokudb +t1_P_part4_SP_subpart42_main_id.tokudb +t1_P_part4_SP_subpart42_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2) +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) +(PARTITION part1 VALUES IN (0) +(SUBPARTITION sp11, +SUBPARTITION sp12), +PARTITION part2 VALUES IN (1) +(SUBPARTITION sp21, +SUBPARTITION sp22), +PARTITION part3 VALUES IN (2) +(SUBPARTITION sp31, +SUBPARTITION sp32), +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`), + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB 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 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +unified filelist +t1.frm +t1_P_part1_SP_sp11_key_uidx1_id.tokudb +t1_P_part1_SP_sp11_main_id.tokudb +t1_P_part1_SP_sp11_status_id.tokudb +t1_P_part1_SP_sp12_key_uidx1_id.tokudb +t1_P_part1_SP_sp12_main_id.tokudb +t1_P_part1_SP_sp12_status_id.tokudb +t1_P_part2_SP_sp21_key_uidx1_id.tokudb +t1_P_part2_SP_sp21_main_id.tokudb +t1_P_part2_SP_sp21_status_id.tokudb +t1_P_part2_SP_sp22_key_uidx1_id.tokudb +t1_P_part2_SP_sp22_main_id.tokudb +t1_P_part2_SP_sp22_status_id.tokudb +t1_P_part3_SP_sp31_key_uidx1_id.tokudb +t1_P_part3_SP_sp31_main_id.tokudb +t1_P_part3_SP_sp31_status_id.tokudb +t1_P_part3_SP_sp32_key_uidx1_id.tokudb +t1_P_part3_SP_sp32_main_id.tokudb +t1_P_part3_SP_sp32_status_id.tokudb +t1_P_part4_SP_sp41_key_uidx1_id.tokudb +t1_P_part4_SP_sp41_main_id.tokudb +t1_P_part4_SP_sp41_status_id.tokudb +t1_P_part4_SP_sp42_key_uidx1_id.tokudb +t1_P_part4_SP_sp42_main_id.tokudb +t1_P_part4_SP_sp42_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2) +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0), +PARTITION part2 VALUES IN (1), +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`), + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int1) +SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part3 VALUES IN (NULL) ENGINE = TokuDB) */ + +unified filelist +t1.frm +t1_P_part1_SP_part1sp0_key_uidx1_id.tokudb +t1_P_part1_SP_part1sp0_main_id.tokudb +t1_P_part1_SP_part1sp0_status_id.tokudb +t1_P_part1_SP_part1sp1_key_uidx1_id.tokudb +t1_P_part1_SP_part1sp1_main_id.tokudb +t1_P_part1_SP_part1sp1_status_id.tokudb +t1_P_part1_SP_part1sp2_key_uidx1_id.tokudb +t1_P_part1_SP_part1sp2_main_id.tokudb +t1_P_part1_SP_part1sp2_status_id.tokudb +t1_P_part2_SP_part2sp0_key_uidx1_id.tokudb +t1_P_part2_SP_part2sp0_main_id.tokudb +t1_P_part2_SP_part2sp0_status_id.tokudb +t1_P_part2_SP_part2sp1_key_uidx1_id.tokudb +t1_P_part2_SP_part2sp1_main_id.tokudb +t1_P_part2_SP_part2sp1_status_id.tokudb +t1_P_part2_SP_part2sp2_key_uidx1_id.tokudb +t1_P_part2_SP_part2sp2_main_id.tokudb +t1_P_part2_SP_part2sp2_status_id.tokudb +t1_P_part3_SP_part3sp0_key_uidx1_id.tokudb +t1_P_part3_SP_part3sp0_main_id.tokudb +t1_P_part3_SP_part3sp0_status_id.tokudb +t1_P_part3_SP_part3sp1_key_uidx1_id.tokudb +t1_P_part3_SP_part3sp1_main_id.tokudb +t1_P_part3_SP_part3sp1_status_id.tokudb +t1_P_part3_SP_part3sp2_key_uidx1_id.tokudb +t1_P_part3_SP_part3sp2_main_id.tokudb +t1_P_part3_SP_part3sp2_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1) +) +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 (inc/partition_check.inc) +create_command +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, + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`), + UNIQUE KEY `uidx2` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1) +PARTITIONS 2 */ + +unified filelist +t1.frm +t1_P_p0_key_uidx1_id.tokudb +t1_P_p0_key_uidx2_id.tokudb +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_key_uidx1_id.tokudb +t1_P_p1_key_uidx2_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1) +) +PARTITION BY KEY(f_int1) 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 (inc/partition_check.inc) +create_command +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, + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`), + UNIQUE KEY `uidx2` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1) +PARTITIONS 5 */ + +unified filelist +t1.frm +t1_P_p0_key_uidx1_id.tokudb +t1_P_p0_key_uidx2_id.tokudb +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_key_uidx1_id.tokudb +t1_P_p1_key_uidx2_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb +t1_P_p2_key_uidx1_id.tokudb +t1_P_p2_key_uidx2_id.tokudb +t1_P_p2_main_id.tokudb +t1_P_p2_status_id.tokudb +t1_P_p3_key_uidx1_id.tokudb +t1_P_p3_key_uidx2_id.tokudb +t1_P_p3_main_id.tokudb +t1_P_p3_status_id.tokudb +t1_P_p4_key_uidx1_id.tokudb +t1_P_p4_key_uidx2_id.tokudb +t1_P_p4_main_id.tokudb +t1_P_p4_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1) +) +PARTITION BY LIST(MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 (inc/partition_check.inc) +create_command +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, + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`), + UNIQUE KEY `uidx2` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +unified filelist +t1.frm +t1_P_part0_key_uidx1_id.tokudb +t1_P_part0_key_uidx2_id.tokudb +t1_P_part0_main_id.tokudb +t1_P_part0_status_id.tokudb +t1_P_part1_key_uidx1_id.tokudb +t1_P_part1_key_uidx2_id.tokudb +t1_P_part1_main_id.tokudb +t1_P_part1_status_id.tokudb +t1_P_part2_key_uidx1_id.tokudb +t1_P_part2_key_uidx2_id.tokudb +t1_P_part2_main_id.tokudb +t1_P_part2_status_id.tokudb +t1_P_part3_key_uidx1_id.tokudb +t1_P_part3_key_uidx2_id.tokudb +t1_P_part3_main_id.tokudb +t1_P_part3_status_id.tokudb +t1_P_part_1_key_uidx1_id.tokudb +t1_P_part_1_key_uidx2_id.tokudb +t1_P_part_1_main_id.tokudb +t1_P_part_1_status_id.tokudb +t1_P_part_2_key_uidx1_id.tokudb +t1_P_part_2_key_uidx2_id.tokudb +t1_P_part_2_main_id.tokudb +t1_P_part_2_status_id.tokudb +t1_P_part_3_key_uidx1_id.tokudb +t1_P_part_3_key_uidx2_id.tokudb +t1_P_part_3_main_id.tokudb +t1_P_part_3_status_id.tokudb +t1_P_part_N_key_uidx1_id.tokudb +t1_P_part_N_key_uidx2_id.tokudb +t1_P_part_N_main_id.tokudb +t1_P_part_N_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1) +) +PARTITION BY RANGE(f_int1) +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +PARTITION partc VALUES LESS THAN (10), +PARTITION partd VALUES LESS THAN (10 + 5), +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 (inc/partition_check.inc) +create_command +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, + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`), + UNIQUE KEY `uidx2` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION parte VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION partf VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +unified filelist +t1.frm +t1_P_parta_key_uidx1_id.tokudb +t1_P_parta_key_uidx2_id.tokudb +t1_P_parta_main_id.tokudb +t1_P_parta_status_id.tokudb +t1_P_partb_key_uidx1_id.tokudb +t1_P_partb_key_uidx2_id.tokudb +t1_P_partb_main_id.tokudb +t1_P_partb_status_id.tokudb +t1_P_partc_key_uidx1_id.tokudb +t1_P_partc_key_uidx2_id.tokudb +t1_P_partc_main_id.tokudb +t1_P_partc_status_id.tokudb +t1_P_partd_key_uidx1_id.tokudb +t1_P_partd_key_uidx2_id.tokudb +t1_P_partd_main_id.tokudb +t1_P_partd_status_id.tokudb +t1_P_parte_key_uidx1_id.tokudb +t1_P_parte_key_uidx2_id.tokudb +t1_P_parte_main_id.tokudb +t1_P_parte_status_id.tokudb +t1_P_partf_key_uidx1_id.tokudb +t1_P_partf_key_uidx2_id.tokudb +t1_P_partf_main_id.tokudb +t1_P_partf_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1) +) +PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +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 (inc/partition_check.inc) +create_command +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, + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`), + UNIQUE KEY `uidx2` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1 DIV 2) +SUBPARTITION BY HASH (f_int1) +SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +unified filelist +t1.frm +t1_P_parta_SP_partasp0_key_uidx1_id.tokudb +t1_P_parta_SP_partasp0_key_uidx2_id.tokudb +t1_P_parta_SP_partasp0_main_id.tokudb +t1_P_parta_SP_partasp0_status_id.tokudb +t1_P_parta_SP_partasp1_key_uidx1_id.tokudb +t1_P_parta_SP_partasp1_key_uidx2_id.tokudb +t1_P_parta_SP_partasp1_main_id.tokudb +t1_P_parta_SP_partasp1_status_id.tokudb +t1_P_partb_SP_partbsp0_key_uidx1_id.tokudb +t1_P_partb_SP_partbsp0_key_uidx2_id.tokudb +t1_P_partb_SP_partbsp0_main_id.tokudb +t1_P_partb_SP_partbsp0_status_id.tokudb +t1_P_partb_SP_partbsp1_key_uidx1_id.tokudb +t1_P_partb_SP_partbsp1_key_uidx2_id.tokudb +t1_P_partb_SP_partbsp1_main_id.tokudb +t1_P_partb_SP_partbsp1_status_id.tokudb +t1_P_partc_SP_partcsp0_key_uidx1_id.tokudb +t1_P_partc_SP_partcsp0_key_uidx2_id.tokudb +t1_P_partc_SP_partcsp0_main_id.tokudb +t1_P_partc_SP_partcsp0_status_id.tokudb +t1_P_partc_SP_partcsp1_key_uidx1_id.tokudb +t1_P_partc_SP_partcsp1_key_uidx2_id.tokudb +t1_P_partc_SP_partcsp1_main_id.tokudb +t1_P_partc_SP_partcsp1_status_id.tokudb +t1_P_partd_SP_partdsp0_key_uidx1_id.tokudb +t1_P_partd_SP_partdsp0_key_uidx2_id.tokudb +t1_P_partd_SP_partdsp0_main_id.tokudb +t1_P_partd_SP_partdsp0_status_id.tokudb +t1_P_partd_SP_partdsp1_key_uidx1_id.tokudb +t1_P_partd_SP_partdsp1_key_uidx2_id.tokudb +t1_P_partd_SP_partdsp1_main_id.tokudb +t1_P_partd_SP_partdsp1_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1) +) +PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1) +(PARTITION part1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +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 (inc/partition_check.inc) +create_command +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, + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`), + UNIQUE KEY `uidx2` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int1) +(PARTITION part1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +unified filelist +t1.frm +t1_P_part1_SP_subpart11_key_uidx1_id.tokudb +t1_P_part1_SP_subpart11_key_uidx2_id.tokudb +t1_P_part1_SP_subpart11_main_id.tokudb +t1_P_part1_SP_subpart11_status_id.tokudb +t1_P_part1_SP_subpart12_key_uidx1_id.tokudb +t1_P_part1_SP_subpart12_key_uidx2_id.tokudb +t1_P_part1_SP_subpart12_main_id.tokudb +t1_P_part1_SP_subpart12_status_id.tokudb +t1_P_part2_SP_subpart21_key_uidx1_id.tokudb +t1_P_part2_SP_subpart21_key_uidx2_id.tokudb +t1_P_part2_SP_subpart21_main_id.tokudb +t1_P_part2_SP_subpart21_status_id.tokudb +t1_P_part2_SP_subpart22_key_uidx1_id.tokudb +t1_P_part2_SP_subpart22_key_uidx2_id.tokudb +t1_P_part2_SP_subpart22_main_id.tokudb +t1_P_part2_SP_subpart22_status_id.tokudb +t1_P_part3_SP_subpart31_key_uidx1_id.tokudb +t1_P_part3_SP_subpart31_key_uidx2_id.tokudb +t1_P_part3_SP_subpart31_main_id.tokudb +t1_P_part3_SP_subpart31_status_id.tokudb +t1_P_part3_SP_subpart32_key_uidx1_id.tokudb +t1_P_part3_SP_subpart32_key_uidx2_id.tokudb +t1_P_part3_SP_subpart32_main_id.tokudb +t1_P_part3_SP_subpart32_status_id.tokudb +t1_P_part4_SP_subpart41_key_uidx1_id.tokudb +t1_P_part4_SP_subpart41_key_uidx2_id.tokudb +t1_P_part4_SP_subpart41_main_id.tokudb +t1_P_part4_SP_subpart41_status_id.tokudb +t1_P_part4_SP_subpart42_key_uidx1_id.tokudb +t1_P_part4_SP_subpart42_key_uidx2_id.tokudb +t1_P_part4_SP_subpart42_main_id.tokudb +t1_P_part4_SP_subpart42_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1) +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) +(PARTITION part1 VALUES IN (0) +(SUBPARTITION sp11, +SUBPARTITION sp12), +PARTITION part2 VALUES IN (1) +(SUBPARTITION sp21, +SUBPARTITION sp22), +PARTITION part3 VALUES IN (2) +(SUBPARTITION sp31, +SUBPARTITION sp32), +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 (inc/partition_check.inc) +create_command +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, + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`), + UNIQUE KEY `uidx2` (`f_int2`,`f_int1`) +) ENGINE=TokuDB 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 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +unified filelist +t1.frm +t1_P_part1_SP_sp11_key_uidx1_id.tokudb +t1_P_part1_SP_sp11_key_uidx2_id.tokudb +t1_P_part1_SP_sp11_main_id.tokudb +t1_P_part1_SP_sp11_status_id.tokudb +t1_P_part1_SP_sp12_key_uidx1_id.tokudb +t1_P_part1_SP_sp12_key_uidx2_id.tokudb +t1_P_part1_SP_sp12_main_id.tokudb +t1_P_part1_SP_sp12_status_id.tokudb +t1_P_part2_SP_sp21_key_uidx1_id.tokudb +t1_P_part2_SP_sp21_key_uidx2_id.tokudb +t1_P_part2_SP_sp21_main_id.tokudb +t1_P_part2_SP_sp21_status_id.tokudb +t1_P_part2_SP_sp22_key_uidx1_id.tokudb +t1_P_part2_SP_sp22_key_uidx2_id.tokudb +t1_P_part2_SP_sp22_main_id.tokudb +t1_P_part2_SP_sp22_status_id.tokudb +t1_P_part3_SP_sp31_key_uidx1_id.tokudb +t1_P_part3_SP_sp31_key_uidx2_id.tokudb +t1_P_part3_SP_sp31_main_id.tokudb +t1_P_part3_SP_sp31_status_id.tokudb +t1_P_part3_SP_sp32_key_uidx1_id.tokudb +t1_P_part3_SP_sp32_key_uidx2_id.tokudb +t1_P_part3_SP_sp32_main_id.tokudb +t1_P_part3_SP_sp32_status_id.tokudb +t1_P_part4_SP_sp41_key_uidx1_id.tokudb +t1_P_part4_SP_sp41_key_uidx2_id.tokudb +t1_P_part4_SP_sp41_main_id.tokudb +t1_P_part4_SP_sp41_status_id.tokudb +t1_P_part4_SP_sp42_key_uidx1_id.tokudb +t1_P_part4_SP_sp42_key_uidx2_id.tokudb +t1_P_part4_SP_sp42_main_id.tokudb +t1_P_part4_SP_sp42_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1) +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0), +PARTITION part2 VALUES IN (1), +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 (inc/partition_check.inc) +create_command +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, + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`), + UNIQUE KEY `uidx2` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int1) +SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part3 VALUES IN (NULL) ENGINE = TokuDB) */ + +unified filelist +t1.frm +t1_P_part1_SP_part1sp0_key_uidx1_id.tokudb +t1_P_part1_SP_part1sp0_key_uidx2_id.tokudb +t1_P_part1_SP_part1sp0_main_id.tokudb +t1_P_part1_SP_part1sp0_status_id.tokudb +t1_P_part1_SP_part1sp1_key_uidx1_id.tokudb +t1_P_part1_SP_part1sp1_key_uidx2_id.tokudb +t1_P_part1_SP_part1sp1_main_id.tokudb +t1_P_part1_SP_part1sp1_status_id.tokudb +t1_P_part1_SP_part1sp2_key_uidx1_id.tokudb +t1_P_part1_SP_part1sp2_key_uidx2_id.tokudb +t1_P_part1_SP_part1sp2_main_id.tokudb +t1_P_part1_SP_part1sp2_status_id.tokudb +t1_P_part2_SP_part2sp0_key_uidx1_id.tokudb +t1_P_part2_SP_part2sp0_key_uidx2_id.tokudb +t1_P_part2_SP_part2sp0_main_id.tokudb +t1_P_part2_SP_part2sp0_status_id.tokudb +t1_P_part2_SP_part2sp1_key_uidx1_id.tokudb +t1_P_part2_SP_part2sp1_key_uidx2_id.tokudb +t1_P_part2_SP_part2sp1_main_id.tokudb +t1_P_part2_SP_part2sp1_status_id.tokudb +t1_P_part2_SP_part2sp2_key_uidx1_id.tokudb +t1_P_part2_SP_part2sp2_key_uidx2_id.tokudb +t1_P_part2_SP_part2sp2_main_id.tokudb +t1_P_part2_SP_part2sp2_status_id.tokudb +t1_P_part3_SP_part3sp0_key_uidx1_id.tokudb +t1_P_part3_SP_part3sp0_key_uidx2_id.tokudb +t1_P_part3_SP_part3sp0_main_id.tokudb +t1_P_part3_SP_part3sp0_status_id.tokudb +t1_P_part3_SP_part3sp1_key_uidx1_id.tokudb +t1_P_part3_SP_part3sp1_key_uidx2_id.tokudb +t1_P_part3_SP_part3sp1_main_id.tokudb +t1_P_part3_SP_part3sp1_status_id.tokudb +t1_P_part3_SP_part3sp2_key_uidx1_id.tokudb +t1_P_part3_SP_part3sp2_key_uidx2_id.tokudb +t1_P_part3_SP_part3sp2_main_id.tokudb +t1_P_part3_SP_part3sp2_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +#------------------------------------------------------------------------ +# 3 Tables with PRIMARY KEY and/or UNIQUE INDEXes +# The partitioning function contains two columns. +#------------------------------------------------------------------------ +# 3.3 PRIMARY KEY and UNIQUE INDEX consisting of two columns +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1) +) +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`), + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1 + f_int2) +PARTITIONS 2 */ + +unified filelist +t1.frm +t1_P_p0_key_uidx1_id.tokudb +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_key_uidx1_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1) +) +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`), + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1,f_int2) +PARTITIONS 5 */ + +unified filelist +t1.frm +t1_P_p0_key_uidx1_id.tokudb +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_key_uidx1_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb +t1_P_p2_key_uidx1_id.tokudb +t1_P_p2_main_id.tokudb +t1_P_p2_status_id.tokudb +t1_P_p3_key_uidx1_id.tokudb +t1_P_p3_main_id.tokudb +t1_P_p3_status_id.tokudb +t1_P_p4_key_uidx1_id.tokudb +t1_P_p4_main_id.tokudb +t1_P_p4_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1) +) +PARTITION BY LIST(MOD(f_int1 + f_int2,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`), + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +unified filelist +t1.frm +t1_P_part0_key_uidx1_id.tokudb +t1_P_part0_main_id.tokudb +t1_P_part0_status_id.tokudb +t1_P_part1_key_uidx1_id.tokudb +t1_P_part1_main_id.tokudb +t1_P_part1_status_id.tokudb +t1_P_part2_key_uidx1_id.tokudb +t1_P_part2_main_id.tokudb +t1_P_part2_status_id.tokudb +t1_P_part3_key_uidx1_id.tokudb +t1_P_part3_main_id.tokudb +t1_P_part3_status_id.tokudb +t1_P_part_1_key_uidx1_id.tokudb +t1_P_part_1_main_id.tokudb +t1_P_part_1_status_id.tokudb +t1_P_part_2_key_uidx1_id.tokudb +t1_P_part_2_main_id.tokudb +t1_P_part_2_status_id.tokudb +t1_P_part_3_key_uidx1_id.tokudb +t1_P_part_3_main_id.tokudb +t1_P_part_3_status_id.tokudb +t1_P_part_N_key_uidx1_id.tokudb +t1_P_part_N_main_id.tokudb +t1_P_part_N_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1) +) +PARTITION BY RANGE((f_int1 + f_int2) DIV 2) +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +PARTITION partc VALUES LESS THAN (10), +PARTITION partd VALUES LESS THAN (10 + 5), +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`), + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION parte VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION partf VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +unified filelist +t1.frm +t1_P_parta_key_uidx1_id.tokudb +t1_P_parta_main_id.tokudb +t1_P_parta_status_id.tokudb +t1_P_partb_key_uidx1_id.tokudb +t1_P_partb_main_id.tokudb +t1_P_partb_status_id.tokudb +t1_P_partc_key_uidx1_id.tokudb +t1_P_partc_main_id.tokudb +t1_P_partc_status_id.tokudb +t1_P_partd_key_uidx1_id.tokudb +t1_P_partd_main_id.tokudb +t1_P_partd_status_id.tokudb +t1_P_parte_key_uidx1_id.tokudb +t1_P_parte_main_id.tokudb +t1_P_parte_status_id.tokudb +t1_P_partf_key_uidx1_id.tokudb +t1_P_partf_main_id.tokudb +t1_P_partf_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1) +) +PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`), + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY HASH (f_int2) +SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +unified filelist +t1.frm +t1_P_parta_SP_partasp0_key_uidx1_id.tokudb +t1_P_parta_SP_partasp0_main_id.tokudb +t1_P_parta_SP_partasp0_status_id.tokudb +t1_P_parta_SP_partasp1_key_uidx1_id.tokudb +t1_P_parta_SP_partasp1_main_id.tokudb +t1_P_parta_SP_partasp1_status_id.tokudb +t1_P_partb_SP_partbsp0_key_uidx1_id.tokudb +t1_P_partb_SP_partbsp0_main_id.tokudb +t1_P_partb_SP_partbsp0_status_id.tokudb +t1_P_partb_SP_partbsp1_key_uidx1_id.tokudb +t1_P_partb_SP_partbsp1_main_id.tokudb +t1_P_partb_SP_partbsp1_status_id.tokudb +t1_P_partc_SP_partcsp0_key_uidx1_id.tokudb +t1_P_partc_SP_partcsp0_main_id.tokudb +t1_P_partc_SP_partcsp0_status_id.tokudb +t1_P_partc_SP_partcsp1_key_uidx1_id.tokudb +t1_P_partc_SP_partcsp1_main_id.tokudb +t1_P_partc_SP_partcsp1_status_id.tokudb +t1_P_partd_SP_partdsp0_key_uidx1_id.tokudb +t1_P_partd_SP_partdsp0_main_id.tokudb +t1_P_partd_SP_partdsp0_status_id.tokudb +t1_P_partd_SP_partdsp1_key_uidx1_id.tokudb +t1_P_partd_SP_partdsp1_main_id.tokudb +t1_P_partd_SP_partdsp1_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1) +) +PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2) +(PARTITION part1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`), + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int2) +(PARTITION part1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +unified filelist +t1.frm +t1_P_part1_SP_subpart11_key_uidx1_id.tokudb +t1_P_part1_SP_subpart11_main_id.tokudb +t1_P_part1_SP_subpart11_status_id.tokudb +t1_P_part1_SP_subpart12_key_uidx1_id.tokudb +t1_P_part1_SP_subpart12_main_id.tokudb +t1_P_part1_SP_subpart12_status_id.tokudb +t1_P_part2_SP_subpart21_key_uidx1_id.tokudb +t1_P_part2_SP_subpart21_main_id.tokudb +t1_P_part2_SP_subpart21_status_id.tokudb +t1_P_part2_SP_subpart22_key_uidx1_id.tokudb +t1_P_part2_SP_subpart22_main_id.tokudb +t1_P_part2_SP_subpart22_status_id.tokudb +t1_P_part3_SP_subpart31_key_uidx1_id.tokudb +t1_P_part3_SP_subpart31_main_id.tokudb +t1_P_part3_SP_subpart31_status_id.tokudb +t1_P_part3_SP_subpart32_key_uidx1_id.tokudb +t1_P_part3_SP_subpart32_main_id.tokudb +t1_P_part3_SP_subpart32_status_id.tokudb +t1_P_part4_SP_subpart41_key_uidx1_id.tokudb +t1_P_part4_SP_subpart41_main_id.tokudb +t1_P_part4_SP_subpart41_status_id.tokudb +t1_P_part4_SP_subpart42_key_uidx1_id.tokudb +t1_P_part4_SP_subpart42_main_id.tokudb +t1_P_part4_SP_subpart42_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1) +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1) +(PARTITION part1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`), + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) +SUBPARTITION BY HASH (f_int2 + 1) +(PARTITION part1 VALUES IN (0) + (SUBPARTITION sp11 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +unified filelist +t1.frm +t1_P_part1_SP_sp11_key_uidx1_id.tokudb +t1_P_part1_SP_sp11_main_id.tokudb +t1_P_part1_SP_sp11_status_id.tokudb +t1_P_part1_SP_sp12_key_uidx1_id.tokudb +t1_P_part1_SP_sp12_main_id.tokudb +t1_P_part1_SP_sp12_status_id.tokudb +t1_P_part2_SP_sp21_key_uidx1_id.tokudb +t1_P_part2_SP_sp21_main_id.tokudb +t1_P_part2_SP_sp21_status_id.tokudb +t1_P_part2_SP_sp22_key_uidx1_id.tokudb +t1_P_part2_SP_sp22_main_id.tokudb +t1_P_part2_SP_sp22_status_id.tokudb +t1_P_part3_SP_sp31_key_uidx1_id.tokudb +t1_P_part3_SP_sp31_main_id.tokudb +t1_P_part3_SP_sp31_status_id.tokudb +t1_P_part3_SP_sp32_key_uidx1_id.tokudb +t1_P_part3_SP_sp32_main_id.tokudb +t1_P_part3_SP_sp32_status_id.tokudb +t1_P_part4_SP_sp41_key_uidx1_id.tokudb +t1_P_part4_SP_sp41_main_id.tokudb +t1_P_part4_SP_sp41_status_id.tokudb +t1_P_part4_SP_sp42_key_uidx1_id.tokudb +t1_P_part4_SP_sp42_main_id.tokudb +t1_P_part4_SP_sp42_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1) +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int2) SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0), +PARTITION part2 VALUES IN (1), +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int2`,`f_int1`), + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int2) +SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part3 VALUES IN (NULL) ENGINE = TokuDB) */ + +unified filelist +t1.frm +t1_P_part1_SP_part1sp0_key_uidx1_id.tokudb +t1_P_part1_SP_part1sp0_main_id.tokudb +t1_P_part1_SP_part1sp0_status_id.tokudb +t1_P_part1_SP_part1sp1_key_uidx1_id.tokudb +t1_P_part1_SP_part1sp1_main_id.tokudb +t1_P_part1_SP_part1sp1_status_id.tokudb +t1_P_part1_SP_part1sp2_key_uidx1_id.tokudb +t1_P_part1_SP_part1sp2_main_id.tokudb +t1_P_part1_SP_part1sp2_status_id.tokudb +t1_P_part2_SP_part2sp0_key_uidx1_id.tokudb +t1_P_part2_SP_part2sp0_main_id.tokudb +t1_P_part2_SP_part2sp0_status_id.tokudb +t1_P_part2_SP_part2sp1_key_uidx1_id.tokudb +t1_P_part2_SP_part2sp1_main_id.tokudb +t1_P_part2_SP_part2sp1_status_id.tokudb +t1_P_part2_SP_part2sp2_key_uidx1_id.tokudb +t1_P_part2_SP_part2sp2_main_id.tokudb +t1_P_part2_SP_part2sp2_status_id.tokudb +t1_P_part3_SP_part3sp0_key_uidx1_id.tokudb +t1_P_part3_SP_part3sp0_main_id.tokudb +t1_P_part3_SP_part3sp0_status_id.tokudb +t1_P_part3_SP_part3sp1_key_uidx1_id.tokudb +t1_P_part3_SP_part3sp1_main_id.tokudb +t1_P_part3_SP_part3sp1_status_id.tokudb +t1_P_part3_SP_part3sp2_key_uidx1_id.tokudb +t1_P_part3_SP_part3sp2_main_id.tokudb +t1_P_part3_SP_part3sp2_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2) +) +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`), + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1 + f_int2) +PARTITIONS 2 */ + +unified filelist +t1.frm +t1_P_p0_key_uidx1_id.tokudb +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_key_uidx1_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2) +) +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`), + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1,f_int2) +PARTITIONS 5 */ + +unified filelist +t1.frm +t1_P_p0_key_uidx1_id.tokudb +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_key_uidx1_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb +t1_P_p2_key_uidx1_id.tokudb +t1_P_p2_main_id.tokudb +t1_P_p2_status_id.tokudb +t1_P_p3_key_uidx1_id.tokudb +t1_P_p3_main_id.tokudb +t1_P_p3_status_id.tokudb +t1_P_p4_key_uidx1_id.tokudb +t1_P_p4_main_id.tokudb +t1_P_p4_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2) +) +PARTITION BY LIST(MOD(f_int1 + f_int2,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`), + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +unified filelist +t1.frm +t1_P_part0_key_uidx1_id.tokudb +t1_P_part0_main_id.tokudb +t1_P_part0_status_id.tokudb +t1_P_part1_key_uidx1_id.tokudb +t1_P_part1_main_id.tokudb +t1_P_part1_status_id.tokudb +t1_P_part2_key_uidx1_id.tokudb +t1_P_part2_main_id.tokudb +t1_P_part2_status_id.tokudb +t1_P_part3_key_uidx1_id.tokudb +t1_P_part3_main_id.tokudb +t1_P_part3_status_id.tokudb +t1_P_part_1_key_uidx1_id.tokudb +t1_P_part_1_main_id.tokudb +t1_P_part_1_status_id.tokudb +t1_P_part_2_key_uidx1_id.tokudb +t1_P_part_2_main_id.tokudb +t1_P_part_2_status_id.tokudb +t1_P_part_3_key_uidx1_id.tokudb +t1_P_part_3_main_id.tokudb +t1_P_part_3_status_id.tokudb +t1_P_part_N_key_uidx1_id.tokudb +t1_P_part_N_main_id.tokudb +t1_P_part_N_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2) +) +PARTITION BY RANGE((f_int1 + f_int2) DIV 2) +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +PARTITION partc VALUES LESS THAN (10), +PARTITION partd VALUES LESS THAN (10 + 5), +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`), + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION parte VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION partf VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +unified filelist +t1.frm +t1_P_parta_key_uidx1_id.tokudb +t1_P_parta_main_id.tokudb +t1_P_parta_status_id.tokudb +t1_P_partb_key_uidx1_id.tokudb +t1_P_partb_main_id.tokudb +t1_P_partb_status_id.tokudb +t1_P_partc_key_uidx1_id.tokudb +t1_P_partc_main_id.tokudb +t1_P_partc_status_id.tokudb +t1_P_partd_key_uidx1_id.tokudb +t1_P_partd_main_id.tokudb +t1_P_partd_status_id.tokudb +t1_P_parte_key_uidx1_id.tokudb +t1_P_parte_main_id.tokudb +t1_P_parte_status_id.tokudb +t1_P_partf_key_uidx1_id.tokudb +t1_P_partf_main_id.tokudb +t1_P_partf_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2) +) +PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`), + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY HASH (f_int2) +SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +unified filelist +t1.frm +t1_P_parta_SP_partasp0_key_uidx1_id.tokudb +t1_P_parta_SP_partasp0_main_id.tokudb +t1_P_parta_SP_partasp0_status_id.tokudb +t1_P_parta_SP_partasp1_key_uidx1_id.tokudb +t1_P_parta_SP_partasp1_main_id.tokudb +t1_P_parta_SP_partasp1_status_id.tokudb +t1_P_partb_SP_partbsp0_key_uidx1_id.tokudb +t1_P_partb_SP_partbsp0_main_id.tokudb +t1_P_partb_SP_partbsp0_status_id.tokudb +t1_P_partb_SP_partbsp1_key_uidx1_id.tokudb +t1_P_partb_SP_partbsp1_main_id.tokudb +t1_P_partb_SP_partbsp1_status_id.tokudb +t1_P_partc_SP_partcsp0_key_uidx1_id.tokudb +t1_P_partc_SP_partcsp0_main_id.tokudb +t1_P_partc_SP_partcsp0_status_id.tokudb +t1_P_partc_SP_partcsp1_key_uidx1_id.tokudb +t1_P_partc_SP_partcsp1_main_id.tokudb +t1_P_partc_SP_partcsp1_status_id.tokudb +t1_P_partd_SP_partdsp0_key_uidx1_id.tokudb +t1_P_partd_SP_partdsp0_main_id.tokudb +t1_P_partd_SP_partdsp0_status_id.tokudb +t1_P_partd_SP_partdsp1_key_uidx1_id.tokudb +t1_P_partd_SP_partdsp1_main_id.tokudb +t1_P_partd_SP_partdsp1_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2) +) +PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2) +(PARTITION part1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`), + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int2) +(PARTITION part1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +unified filelist +t1.frm +t1_P_part1_SP_subpart11_key_uidx1_id.tokudb +t1_P_part1_SP_subpart11_main_id.tokudb +t1_P_part1_SP_subpart11_status_id.tokudb +t1_P_part1_SP_subpart12_key_uidx1_id.tokudb +t1_P_part1_SP_subpart12_main_id.tokudb +t1_P_part1_SP_subpart12_status_id.tokudb +t1_P_part2_SP_subpart21_key_uidx1_id.tokudb +t1_P_part2_SP_subpart21_main_id.tokudb +t1_P_part2_SP_subpart21_status_id.tokudb +t1_P_part2_SP_subpart22_key_uidx1_id.tokudb +t1_P_part2_SP_subpart22_main_id.tokudb +t1_P_part2_SP_subpart22_status_id.tokudb +t1_P_part3_SP_subpart31_key_uidx1_id.tokudb +t1_P_part3_SP_subpart31_main_id.tokudb +t1_P_part3_SP_subpart31_status_id.tokudb +t1_P_part3_SP_subpart32_key_uidx1_id.tokudb +t1_P_part3_SP_subpart32_main_id.tokudb +t1_P_part3_SP_subpart32_status_id.tokudb +t1_P_part4_SP_subpart41_key_uidx1_id.tokudb +t1_P_part4_SP_subpart41_main_id.tokudb +t1_P_part4_SP_subpart41_status_id.tokudb +t1_P_part4_SP_subpart42_key_uidx1_id.tokudb +t1_P_part4_SP_subpart42_main_id.tokudb +t1_P_part4_SP_subpart42_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2) +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1) +(PARTITION part1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`), + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) +SUBPARTITION BY HASH (f_int2 + 1) +(PARTITION part1 VALUES IN (0) + (SUBPARTITION sp11 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +unified filelist +t1.frm +t1_P_part1_SP_sp11_key_uidx1_id.tokudb +t1_P_part1_SP_sp11_main_id.tokudb +t1_P_part1_SP_sp11_status_id.tokudb +t1_P_part1_SP_sp12_key_uidx1_id.tokudb +t1_P_part1_SP_sp12_main_id.tokudb +t1_P_part1_SP_sp12_status_id.tokudb +t1_P_part2_SP_sp21_key_uidx1_id.tokudb +t1_P_part2_SP_sp21_main_id.tokudb +t1_P_part2_SP_sp21_status_id.tokudb +t1_P_part2_SP_sp22_key_uidx1_id.tokudb +t1_P_part2_SP_sp22_main_id.tokudb +t1_P_part2_SP_sp22_status_id.tokudb +t1_P_part3_SP_sp31_key_uidx1_id.tokudb +t1_P_part3_SP_sp31_main_id.tokudb +t1_P_part3_SP_sp31_status_id.tokudb +t1_P_part3_SP_sp32_key_uidx1_id.tokudb +t1_P_part3_SP_sp32_main_id.tokudb +t1_P_part3_SP_sp32_status_id.tokudb +t1_P_part4_SP_sp41_key_uidx1_id.tokudb +t1_P_part4_SP_sp41_main_id.tokudb +t1_P_part4_SP_sp41_status_id.tokudb +t1_P_part4_SP_sp42_key_uidx1_id.tokudb +t1_P_part4_SP_sp42_main_id.tokudb +t1_P_part4_SP_sp42_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2) +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int2) SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0), +PARTITION part2 VALUES IN (1), +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 (inc/partition_check.inc) +create_command +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f_int1` int(11) NOT NULL, + `f_int2` int(11) NOT NULL, + `f_char1` char(20) DEFAULT NULL, + `f_char2` char(20) DEFAULT NULL, + `f_charbig` varchar(1000) DEFAULT NULL, + PRIMARY KEY (`f_int1`,`f_int2`), + UNIQUE KEY `uidx1` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int2) +SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part3 VALUES IN (NULL) ENGINE = TokuDB) */ + +unified filelist +t1.frm +t1_P_part1_SP_part1sp0_key_uidx1_id.tokudb +t1_P_part1_SP_part1sp0_main_id.tokudb +t1_P_part1_SP_part1sp0_status_id.tokudb +t1_P_part1_SP_part1sp1_key_uidx1_id.tokudb +t1_P_part1_SP_part1sp1_main_id.tokudb +t1_P_part1_SP_part1sp1_status_id.tokudb +t1_P_part1_SP_part1sp2_key_uidx1_id.tokudb +t1_P_part1_SP_part1sp2_main_id.tokudb +t1_P_part1_SP_part1sp2_status_id.tokudb +t1_P_part2_SP_part2sp0_key_uidx1_id.tokudb +t1_P_part2_SP_part2sp0_main_id.tokudb +t1_P_part2_SP_part2sp0_status_id.tokudb +t1_P_part2_SP_part2sp1_key_uidx1_id.tokudb +t1_P_part2_SP_part2sp1_main_id.tokudb +t1_P_part2_SP_part2sp1_status_id.tokudb +t1_P_part2_SP_part2sp2_key_uidx1_id.tokudb +t1_P_part2_SP_part2sp2_main_id.tokudb +t1_P_part2_SP_part2sp2_status_id.tokudb +t1_P_part3_SP_part3sp0_key_uidx1_id.tokudb +t1_P_part3_SP_part3sp0_main_id.tokudb +t1_P_part3_SP_part3sp0_status_id.tokudb +t1_P_part3_SP_part3sp1_key_uidx1_id.tokudb +t1_P_part3_SP_part3sp1_main_id.tokudb +t1_P_part3_SP_part3sp1_status_id.tokudb +t1_P_part3_SP_part3sp2_key_uidx1_id.tokudb +t1_P_part3_SP_part3sp2_main_id.tokudb +t1_P_part3_SP_part3sp2_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'PRIMARY' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +ERROR 23000: Column 'f_int1' cannot be null +# check null success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1) +) +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 (inc/partition_check.inc) +create_command +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, + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`), + UNIQUE KEY `uidx2` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1 + f_int2) +PARTITIONS 2 */ + +unified filelist +t1.frm +t1_P_p0_key_uidx1_id.tokudb +t1_P_p0_key_uidx2_id.tokudb +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_key_uidx1_id.tokudb +t1_P_p1_key_uidx2_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1) +) +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 (inc/partition_check.inc) +create_command +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, + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`), + UNIQUE KEY `uidx2` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (f_int1,f_int2) +PARTITIONS 5 */ + +unified filelist +t1.frm +t1_P_p0_key_uidx1_id.tokudb +t1_P_p0_key_uidx2_id.tokudb +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_key_uidx1_id.tokudb +t1_P_p1_key_uidx2_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb +t1_P_p2_key_uidx1_id.tokudb +t1_P_p2_key_uidx2_id.tokudb +t1_P_p2_main_id.tokudb +t1_P_p2_status_id.tokudb +t1_P_p3_key_uidx1_id.tokudb +t1_P_p3_key_uidx2_id.tokudb +t1_P_p3_main_id.tokudb +t1_P_p3_status_id.tokudb +t1_P_p4_key_uidx1_id.tokudb +t1_P_p4_key_uidx2_id.tokudb +t1_P_p4_main_id.tokudb +t1_P_p4_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1) +) +PARTITION BY LIST(MOD(f_int1 + f_int2,4)) +(PARTITION part_3 VALUES IN (-3), +PARTITION part_2 VALUES IN (-2), +PARTITION part_1 VALUES IN (-1), +PARTITION part_N VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +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 (inc/partition_check.inc) +create_command +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, + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`), + UNIQUE KEY `uidx2` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1 + f_int2,4)) +(PARTITION part_3 VALUES IN (-3) ENGINE = TokuDB, + PARTITION part_2 VALUES IN (-2) ENGINE = TokuDB, + PARTITION part_1 VALUES IN (-1) ENGINE = TokuDB, + PARTITION part_N VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part0 VALUES IN (0) ENGINE = TokuDB, + PARTITION part1 VALUES IN (1) ENGINE = TokuDB, + PARTITION part2 VALUES IN (2) ENGINE = TokuDB, + PARTITION part3 VALUES IN (3) ENGINE = TokuDB) */ + +unified filelist +t1.frm +t1_P_part0_key_uidx1_id.tokudb +t1_P_part0_key_uidx2_id.tokudb +t1_P_part0_main_id.tokudb +t1_P_part0_status_id.tokudb +t1_P_part1_key_uidx1_id.tokudb +t1_P_part1_key_uidx2_id.tokudb +t1_P_part1_main_id.tokudb +t1_P_part1_status_id.tokudb +t1_P_part2_key_uidx1_id.tokudb +t1_P_part2_key_uidx2_id.tokudb +t1_P_part2_main_id.tokudb +t1_P_part2_status_id.tokudb +t1_P_part3_key_uidx1_id.tokudb +t1_P_part3_key_uidx2_id.tokudb +t1_P_part3_main_id.tokudb +t1_P_part3_status_id.tokudb +t1_P_part_1_key_uidx1_id.tokudb +t1_P_part_1_key_uidx2_id.tokudb +t1_P_part_1_main_id.tokudb +t1_P_part_1_status_id.tokudb +t1_P_part_2_key_uidx1_id.tokudb +t1_P_part_2_key_uidx2_id.tokudb +t1_P_part_2_main_id.tokudb +t1_P_part_2_status_id.tokudb +t1_P_part_3_key_uidx1_id.tokudb +t1_P_part_3_key_uidx2_id.tokudb +t1_P_part_3_main_id.tokudb +t1_P_part_3_status_id.tokudb +t1_P_part_N_key_uidx1_id.tokudb +t1_P_part_N_key_uidx2_id.tokudb +t1_P_part_N_main_id.tokudb +t1_P_part_N_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1) +) +PARTITION BY RANGE((f_int1 + f_int2) DIV 2) +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +PARTITION partc VALUES LESS THAN (10), +PARTITION partd VALUES LESS THAN (10 + 5), +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 (inc/partition_check.inc) +create_command +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, + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`), + UNIQUE KEY `uidx2` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE ((f_int1 + f_int2) DIV 2) +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (15) ENGINE = TokuDB, + PARTITION parte VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION partf VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +unified filelist +t1.frm +t1_P_parta_key_uidx1_id.tokudb +t1_P_parta_key_uidx2_id.tokudb +t1_P_parta_main_id.tokudb +t1_P_parta_status_id.tokudb +t1_P_partb_key_uidx1_id.tokudb +t1_P_partb_key_uidx2_id.tokudb +t1_P_partb_main_id.tokudb +t1_P_partb_status_id.tokudb +t1_P_partc_key_uidx1_id.tokudb +t1_P_partc_key_uidx2_id.tokudb +t1_P_partc_main_id.tokudb +t1_P_partc_status_id.tokudb +t1_P_partd_key_uidx1_id.tokudb +t1_P_partd_key_uidx2_id.tokudb +t1_P_partd_main_id.tokudb +t1_P_partd_status_id.tokudb +t1_P_parte_key_uidx1_id.tokudb +t1_P_parte_key_uidx2_id.tokudb +t1_P_parte_main_id.tokudb +t1_P_parte_status_id.tokudb +t1_P_partf_key_uidx1_id.tokudb +t1_P_partf_key_uidx2_id.tokudb +t1_P_partf_main_id.tokudb +t1_P_partf_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1) +) +PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0), +PARTITION partb VALUES LESS THAN (5), +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 (inc/partition_check.inc) +create_command +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, + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`), + UNIQUE KEY `uidx2` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY HASH (f_int2) +SUBPARTITIONS 2 +(PARTITION parta VALUES LESS THAN (0) ENGINE = TokuDB, + PARTITION partb VALUES LESS THAN (5) ENGINE = TokuDB, + PARTITION partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION partd VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +unified filelist +t1.frm +t1_P_parta_SP_partasp0_key_uidx1_id.tokudb +t1_P_parta_SP_partasp0_key_uidx2_id.tokudb +t1_P_parta_SP_partasp0_main_id.tokudb +t1_P_parta_SP_partasp0_status_id.tokudb +t1_P_parta_SP_partasp1_key_uidx1_id.tokudb +t1_P_parta_SP_partasp1_key_uidx2_id.tokudb +t1_P_parta_SP_partasp1_main_id.tokudb +t1_P_parta_SP_partasp1_status_id.tokudb +t1_P_partb_SP_partbsp0_key_uidx1_id.tokudb +t1_P_partb_SP_partbsp0_key_uidx2_id.tokudb +t1_P_partb_SP_partbsp0_main_id.tokudb +t1_P_partb_SP_partbsp0_status_id.tokudb +t1_P_partb_SP_partbsp1_key_uidx1_id.tokudb +t1_P_partb_SP_partbsp1_key_uidx2_id.tokudb +t1_P_partb_SP_partbsp1_main_id.tokudb +t1_P_partb_SP_partbsp1_status_id.tokudb +t1_P_partc_SP_partcsp0_key_uidx1_id.tokudb +t1_P_partc_SP_partcsp0_key_uidx2_id.tokudb +t1_P_partc_SP_partcsp0_main_id.tokudb +t1_P_partc_SP_partcsp0_status_id.tokudb +t1_P_partc_SP_partcsp1_key_uidx1_id.tokudb +t1_P_partc_SP_partcsp1_key_uidx2_id.tokudb +t1_P_partc_SP_partcsp1_main_id.tokudb +t1_P_partc_SP_partcsp1_status_id.tokudb +t1_P_partd_SP_partdsp0_key_uidx1_id.tokudb +t1_P_partd_SP_partdsp0_key_uidx2_id.tokudb +t1_P_partd_SP_partdsp0_main_id.tokudb +t1_P_partd_SP_partdsp0_status_id.tokudb +t1_P_partd_SP_partdsp1_key_uidx1_id.tokudb +t1_P_partd_SP_partdsp1_key_uidx2_id.tokudb +t1_P_partd_SP_partdsp1_main_id.tokudb +t1_P_partd_SP_partdsp1_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1) +) +PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2) +(PARTITION part1 VALUES LESS THAN (0) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (5) +(SUBPARTITION subpart21, SUBPARTITION subpart22), +PARTITION part3 VALUES LESS THAN (10) +(SUBPARTITION subpart31, SUBPARTITION subpart32), +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 (inc/partition_check.inc) +create_command +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, + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`), + UNIQUE KEY `uidx2` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY KEY (f_int2) +(PARTITION part1 VALUES LESS THAN (0) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part2 VALUES LESS THAN (5) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part3 VALUES LESS THAN (10) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB), + PARTITION part4 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart41 ENGINE = TokuDB, + SUBPARTITION subpart42 ENGINE = TokuDB)) */ + +unified filelist +t1.frm +t1_P_part1_SP_subpart11_key_uidx1_id.tokudb +t1_P_part1_SP_subpart11_key_uidx2_id.tokudb +t1_P_part1_SP_subpart11_main_id.tokudb +t1_P_part1_SP_subpart11_status_id.tokudb +t1_P_part1_SP_subpart12_key_uidx1_id.tokudb +t1_P_part1_SP_subpart12_key_uidx2_id.tokudb +t1_P_part1_SP_subpart12_main_id.tokudb +t1_P_part1_SP_subpart12_status_id.tokudb +t1_P_part2_SP_subpart21_key_uidx1_id.tokudb +t1_P_part2_SP_subpart21_key_uidx2_id.tokudb +t1_P_part2_SP_subpart21_main_id.tokudb +t1_P_part2_SP_subpart21_status_id.tokudb +t1_P_part2_SP_subpart22_key_uidx1_id.tokudb +t1_P_part2_SP_subpart22_key_uidx2_id.tokudb +t1_P_part2_SP_subpart22_main_id.tokudb +t1_P_part2_SP_subpart22_status_id.tokudb +t1_P_part3_SP_subpart31_key_uidx1_id.tokudb +t1_P_part3_SP_subpart31_key_uidx2_id.tokudb +t1_P_part3_SP_subpart31_main_id.tokudb +t1_P_part3_SP_subpart31_status_id.tokudb +t1_P_part3_SP_subpart32_key_uidx1_id.tokudb +t1_P_part3_SP_subpart32_key_uidx2_id.tokudb +t1_P_part3_SP_subpart32_main_id.tokudb +t1_P_part3_SP_subpart32_status_id.tokudb +t1_P_part4_SP_subpart41_key_uidx1_id.tokudb +t1_P_part4_SP_subpart41_key_uidx2_id.tokudb +t1_P_part4_SP_subpart41_main_id.tokudb +t1_P_part4_SP_subpart41_status_id.tokudb +t1_P_part4_SP_subpart42_key_uidx1_id.tokudb +t1_P_part4_SP_subpart42_key_uidx2_id.tokudb +t1_P_part4_SP_subpart42_main_id.tokudb +t1_P_part4_SP_subpart42_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1) +) +PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1) +(PARTITION part1 VALUES IN (0) +(SUBPARTITION sp11, SUBPARTITION sp12), +PARTITION part2 VALUES IN (1) +(SUBPARTITION sp21, SUBPARTITION sp22), +PARTITION part3 VALUES IN (2) +(SUBPARTITION sp31, SUBPARTITION sp32), +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 (inc/partition_check.inc) +create_command +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, + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`), + UNIQUE KEY `uidx2` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,3))) +SUBPARTITION BY HASH (f_int2 + 1) +(PARTITION part1 VALUES IN (0) + (SUBPARTITION sp11 ENGINE = TokuDB, + SUBPARTITION sp12 ENGINE = TokuDB), + PARTITION part2 VALUES IN (1) + (SUBPARTITION sp21 ENGINE = TokuDB, + SUBPARTITION sp22 ENGINE = TokuDB), + PARTITION part3 VALUES IN (2) + (SUBPARTITION sp31 ENGINE = TokuDB, + SUBPARTITION sp32 ENGINE = TokuDB), + PARTITION part4 VALUES IN (NULL) + (SUBPARTITION sp41 ENGINE = TokuDB, + SUBPARTITION sp42 ENGINE = TokuDB)) */ + +unified filelist +t1.frm +t1_P_part1_SP_sp11_key_uidx1_id.tokudb +t1_P_part1_SP_sp11_key_uidx2_id.tokudb +t1_P_part1_SP_sp11_main_id.tokudb +t1_P_part1_SP_sp11_status_id.tokudb +t1_P_part1_SP_sp12_key_uidx1_id.tokudb +t1_P_part1_SP_sp12_key_uidx2_id.tokudb +t1_P_part1_SP_sp12_main_id.tokudb +t1_P_part1_SP_sp12_status_id.tokudb +t1_P_part2_SP_sp21_key_uidx1_id.tokudb +t1_P_part2_SP_sp21_key_uidx2_id.tokudb +t1_P_part2_SP_sp21_main_id.tokudb +t1_P_part2_SP_sp21_status_id.tokudb +t1_P_part2_SP_sp22_key_uidx1_id.tokudb +t1_P_part2_SP_sp22_key_uidx2_id.tokudb +t1_P_part2_SP_sp22_main_id.tokudb +t1_P_part2_SP_sp22_status_id.tokudb +t1_P_part3_SP_sp31_key_uidx1_id.tokudb +t1_P_part3_SP_sp31_key_uidx2_id.tokudb +t1_P_part3_SP_sp31_main_id.tokudb +t1_P_part3_SP_sp31_status_id.tokudb +t1_P_part3_SP_sp32_key_uidx1_id.tokudb +t1_P_part3_SP_sp32_key_uidx2_id.tokudb +t1_P_part3_SP_sp32_main_id.tokudb +t1_P_part3_SP_sp32_status_id.tokudb +t1_P_part4_SP_sp41_key_uidx1_id.tokudb +t1_P_part4_SP_sp41_key_uidx2_id.tokudb +t1_P_part4_SP_sp41_main_id.tokudb +t1_P_part4_SP_sp41_status_id.tokudb +t1_P_part4_SP_sp42_key_uidx1_id.tokudb +t1_P_part4_SP_sp42_key_uidx2_id.tokudb +t1_P_part4_SP_sp42_main_id.tokudb +t1_P_part4_SP_sp42_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +, UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1) +) +PARTITION BY LIST(ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY(f_int2) SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0), +PARTITION part2 VALUES IN (1), +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 (inc/partition_check.inc) +create_command +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, + UNIQUE KEY `uidx1` (`f_int1`,`f_int2`), + UNIQUE KEY `uidx2` (`f_int2`,`f_int1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ABS(MOD(f_int1,2))) +SUBPARTITION BY KEY (f_int2) +SUBPARTITIONS 3 +(PARTITION part1 VALUES IN (0) ENGINE = TokuDB, + PARTITION part2 VALUES IN (1) ENGINE = TokuDB, + PARTITION part3 VALUES IN (NULL) ENGINE = TokuDB) */ + +unified filelist +t1.frm +t1_P_part1_SP_part1sp0_key_uidx1_id.tokudb +t1_P_part1_SP_part1sp0_key_uidx2_id.tokudb +t1_P_part1_SP_part1sp0_main_id.tokudb +t1_P_part1_SP_part1sp0_status_id.tokudb +t1_P_part1_SP_part1sp1_key_uidx1_id.tokudb +t1_P_part1_SP_part1sp1_key_uidx2_id.tokudb +t1_P_part1_SP_part1sp1_main_id.tokudb +t1_P_part1_SP_part1sp1_status_id.tokudb +t1_P_part1_SP_part1sp2_key_uidx1_id.tokudb +t1_P_part1_SP_part1sp2_key_uidx2_id.tokudb +t1_P_part1_SP_part1sp2_main_id.tokudb +t1_P_part1_SP_part1sp2_status_id.tokudb +t1_P_part2_SP_part2sp0_key_uidx1_id.tokudb +t1_P_part2_SP_part2sp0_key_uidx2_id.tokudb +t1_P_part2_SP_part2sp0_main_id.tokudb +t1_P_part2_SP_part2sp0_status_id.tokudb +t1_P_part2_SP_part2sp1_key_uidx1_id.tokudb +t1_P_part2_SP_part2sp1_key_uidx2_id.tokudb +t1_P_part2_SP_part2sp1_main_id.tokudb +t1_P_part2_SP_part2sp1_status_id.tokudb +t1_P_part2_SP_part2sp2_key_uidx1_id.tokudb +t1_P_part2_SP_part2sp2_key_uidx2_id.tokudb +t1_P_part2_SP_part2sp2_main_id.tokudb +t1_P_part2_SP_part2sp2_status_id.tokudb +t1_P_part3_SP_part3sp0_key_uidx1_id.tokudb +t1_P_part3_SP_part3sp0_key_uidx2_id.tokudb +t1_P_part3_SP_part3sp0_main_id.tokudb +t1_P_part3_SP_part3sp0_status_id.tokudb +t1_P_part3_SP_part3sp1_key_uidx1_id.tokudb +t1_P_part3_SP_part3sp1_key_uidx2_id.tokudb +t1_P_part3_SP_part3sp1_main_id.tokudb +t1_P_part3_SP_part3sp1_status_id.tokudb +t1_P_part3_SP_part3sp2_key_uidx1_id.tokudb +t1_P_part3_SP_part3sp2_key_uidx2_id.tokudb +t1_P_part3_SP_part3sp2_main_id.tokudb +t1_P_part3_SP_part3sp2_status_id.tokudb + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +ERROR 23000: Duplicate entry '2-2' for key 'uidx1' +# check prerequisites-3 success: 1 +# INFO: f_int1 AND/OR f_int2 AND/OR (f_int1,f_int2) is UNIQUE +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +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), +CAST((2 * @max_row + f_int1) AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT COUNT(*) INTO @try_count FROM t0_template +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT COUNT(*) INTO @clash_count +FROM t1 INNER JOIN t0_template USING(f_int1) +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row; +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 +AND f_int1 BETWEEN @max_row_div2 AND @max_row +ON DUPLICATE KEY +UPDATE f_int1 = 2 * @max_row + source_tab.f_int1, +f_int2 = 2 * @max_row + source_tab.f_int1, +f_charbig = 'was updated'; + +# check unique-1-a success: 1 + +# check unique-1-b success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'===') +WHERE f_charbig = 'was updated'; +REPLACE INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, - f_int1, '', '', 'was inserted or replaced' + FROM t0_template source_tab +WHERE MOD(f_int1,3) = 0 AND f_int1 BETWEEN @max_row_div2 AND @max_row; + +# check replace success: 1 +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 AND @max_row_div2 + @max_row_div4; +DELETE FROM t1 +WHERE f_int1 = f_int2 AND MOD(f_int1,3) = 0 AND +f_int1 BETWEEN @max_row_div2 + @max_row_div4 AND @max_row; +UPDATE t1 SET f_int2 = f_int1, +f_char1 = CAST(f_int1 AS CHAR), +f_char2 = CAST(f_int1 AS CHAR), +f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'===') +WHERE f_charbig = 'was inserted or replaced' AND f_int1 = - f_int2; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +DROP VIEW IF EXISTS v1; +DROP TABLE IF EXISTS t1; +DROP TABLE IF EXISTS t0_aux; +DROP TABLE IF EXISTS t0_definition; +DROP TABLE IF EXISTS t0_template; diff --git a/mysql-test/suite/tokudb.parts/r-native/partition_bit_tokudb.result b/mysql-test/suite/tokudb.parts/r-native/partition_bit_tokudb.result new file mode 100644 index 000000000000..761ffcc4acc3 --- /dev/null +++ b/mysql-test/suite/tokudb.parts/r-native/partition_bit_tokudb.result @@ -0,0 +1,453 @@ +SET @max_row = 20; +drop table if exists t1; +create table t1 (a bit(65), primary key (a)) engine='TOKUDB' partition by key (a); +ERROR 42000: Display width out of range for column 'a' (max = 64) +create table t1 (a bit(0), primary key (a)) engine='TOKUDB' partition by key (a); +ERROR HY000: Invalid size for column 'a'. +create table t1 (a bit(0), primary key (a)) engine='TOKUDB' +partition by key (a) ( +partition pa1, +partition pa2); +ERROR HY000: Invalid size for column 'a'. +create table t1 (a bit(64), primary key (a)) engine='TOKUDB' +partition by key (a) partitions 2; +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` bit(64) NOT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +PARTITIONS 2 */ +insert into t1 values +(b'1111111111111111111111111111111111111111111111111111111111111111'), +(b'1000000000000000000000000000000000000000000000000000000000000000'), +(b'0000000000000000000000000000000000000000000000000000000000000001'), +(b'1010101010101010101010101010101010101010101010101010101010101010'), +(b'0101010101010101010101010101010101010101010101010101010101010101'); +select hex(a) from t1; +hex(a) +1 +5555555555555555 +8000000000000000 +AAAAAAAAAAAAAAAA +FFFFFFFFFFFFFFFF +drop table t1; +create table t1 (a bit(64), primary key (a)) engine='TOKUDB' +partition by key (a) ( +partition pa1 max_rows=20 min_rows=2, +partition pa2 max_rows=30 min_rows=3, +partition pa3 max_rows=30 min_rows=4, +partition pa4 max_rows=40 min_rows=2); +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` bit(64) NOT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +(PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 ENGINE = TokuDB, + PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 ENGINE = TokuDB, + PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 ENGINE = TokuDB, + PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 ENGINE = TokuDB) */ +insert into t1 values +(b'1111111111111111111111111111111111111111111111111111111111111111'), +(b'1000000000000000000000000000000000000000000000000000000000000000'), +(b'0000000000000000000000000000000000000000000000000000000000000001'), +(b'1010101010101010101010101010101010101010101010101010101010101010'), +(b'0101010101010101010101010101010101010101010101010101010101010101'); +select hex(a) from t1 where a=b'0101010101010101010101010101010101010101010101010101010101010101'; +hex(a) +5555555555555555 +delete from t1 where a=b'0101010101010101010101010101010101010101010101010101010101010101'; +select hex(a) from t1; +hex(a) +1 +8000000000000000 +AAAAAAAAAAAAAAAA +FFFFFFFFFFFFFFFF +drop table t1; +create table t2 (a bit, primary key (a)) engine='TOKUDB' +partition by key (a) partitions 4; +show create table t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` bit(1) NOT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +PARTITIONS 4 */ +insert into t2 values (b'0'), (b'1'); +select hex(a) from t2; +hex(a) +0 +1 +alter table t2 drop primary key; +show create table t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` bit(1) NOT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +PARTITIONS 4 */ +select hex(a) from t2; +hex(a) +0 +1 +alter table t2 add primary key (a); +show create table t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` bit(1) NOT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +PARTITIONS 4 */ +select hex(a) from t2; +hex(a) +0 +1 +drop table t2; +create table t3 (a bit(8), primary key (a)) engine='TOKUDB' +partition by range (a) subpartition by key (a) subpartitions 2 ( +partition pa1 values less than (3), +partition pa2 values less than (16), +partition pa3 values less than (64), +partition pa4 values less than (256)); +show create table t3; +Table Create Table +t3 CREATE TABLE `t3` ( + `a` bit(8) NOT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +SUBPARTITION BY KEY (a) +SUBPARTITIONS 2 +(PARTITION pa1 VALUES LESS THAN (3) ENGINE = TokuDB, + PARTITION pa2 VALUES LESS THAN (16) ENGINE = TokuDB, + PARTITION pa3 VALUES LESS THAN (64) ENGINE = TokuDB, + PARTITION pa4 VALUES LESS THAN (256) ENGINE = TokuDB) */ +255 inserts; +select hex(a) from t3 where a=b'01010101'; +hex(a) +55 +delete from t3 where a=b'01010101'; +select count(*) from t3; +count(*) +254 +select hex(a) from t3; +hex(a) +1 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +1A +1B +1C +1D +1E +1F +2 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +2A +2B +2C +2D +2E +2F +3 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +3A +3B +3C +3D +3E +3F +4 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +4A +4B +4C +4D +4E +4F +5 +50 +51 +52 +53 +54 +56 +57 +58 +59 +5A +5B +5C +5D +5E +5F +6 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +6A +6B +6C +6D +6E +6F +7 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +7A +7B +7C +7D +7E +7F +8 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +8A +8B +8C +8D +8E +8F +9 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +9A +9B +9C +9D +9E +9F +A +A0 +A1 +A2 +A3 +A4 +A5 +A6 +A7 +A8 +A9 +AA +AB +AC +AD +AE +AF +B +B0 +B1 +B2 +B3 +B4 +B5 +B6 +B7 +B8 +B9 +BA +BB +BC +BD +BE +BF +C +C0 +C1 +C2 +C3 +C4 +C5 +C6 +C7 +C8 +C9 +CA +CB +CC +CD +CE +CF +D +D0 +D1 +D2 +D3 +D4 +D5 +D6 +D7 +D8 +D9 +DA +DB +DC +DD +DE +DF +E +E0 +E1 +E2 +E3 +E4 +E5 +E6 +E7 +E8 +E9 +EA +EB +EC +ED +EE +EF +F +F0 +F1 +F2 +F3 +F4 +F5 +F6 +F7 +F8 +F9 +FA +FB +FC +FD +FE +FF +drop table t3; +create table t4 (a bit(8), primary key (a)) engine='TOKUDB' +partition by list (a) subpartition by key (a) subpartitions 2 ( +partition pa1 values in (0,1,2,3), +partition pa2 values in (4,5,6,7,8,9,10,11,12,13,14,15,16), +partition pa3 values in (17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32)); +show create table t4; +Table Create Table +t4 CREATE TABLE `t4` ( + `a` bit(8) NOT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +SUBPARTITION BY KEY (a) +SUBPARTITIONS 2 +(PARTITION pa1 VALUES IN (0,1,2,3) ENGINE = TokuDB, + PARTITION pa2 VALUES IN (4,5,6,7,8,9,10,11,12,13,14,15,16) ENGINE = TokuDB, + PARTITION pa3 VALUES IN (17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32) ENGINE = TokuDB) */ +32 inserts; +select hex(a) from t4 where a=b'00000001'; +hex(a) +1 +delete from t4 where a=b'00000001'; +select count(*) from t4; +count(*) +31 +select hex(a) from t4; +hex(a) +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +1A +1B +1C +1D +1E +1F +2 +20 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F +drop table t4; diff --git a/mysql-test/suite/tokudb.parts/r-native/partition_char_tokudb.result b/mysql-test/suite/tokudb.parts/r-native/partition_char_tokudb.result new file mode 100644 index 000000000000..897d8a97172b --- /dev/null +++ b/mysql-test/suite/tokudb.parts/r-native/partition_char_tokudb.result @@ -0,0 +1,761 @@ +---- Partitioning and char data type +create table t1 (a char(255) not null, primary key(a)) engine='TokuDB' +partition by key (a) ( +partition pa1 max_rows=20 min_rows=2, +partition pa2 max_rows=30 min_rows=3, +partition pa3 max_rows=30 min_rows=4, +partition pa4 max_rows=40 min_rows=2); +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` char(255) NOT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +(PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 ENGINE = TokuDB, + PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 ENGINE = TokuDB, + PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 ENGINE = TokuDB, + PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 ENGINE = TokuDB) */ +insert into t1 values (repeat('a',255)), ('b'), (repeat('a',128)), (repeat('b',64)); +select * from t1; +a +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +b +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 +bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +drop table t1; +create table t2 (a char(255) not null, primary key(a)) engine='TokuDB' +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=TokuDB 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 +kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk +vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv +ttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt +ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj +bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb +lllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll +wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm +gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg +zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz +eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee +oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo +qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq +uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu +cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc +ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii +yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy +drop table t2; +---- Partitioning and binary data type +create table t1 (a binary(255) not null, primary key(a)) engine='TokuDB' +partition by key (a) ( +partition pa1 max_rows=20 min_rows=2, +partition pa2 max_rows=30 min_rows=3, +partition pa3 max_rows=30 min_rows=4, +partition pa4 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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +(PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 ENGINE = TokuDB, + PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 ENGINE = TokuDB, + PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 ENGINE = TokuDB, + PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 ENGINE = TokuDB) */ +insert into t1 values (repeat('a',255)), ('b'), (repeat('a',128)), (repeat('b',64)); +select hex(a) from t1; +hex(a) +616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262620000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161 +620000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +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 +626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262620000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161 +drop table t1; +create table t2 (a binary(255) not null, primary key(a)) engine='TokuDB' +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=TokuDB 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) +636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777770000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262620000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +737373737373737373737373737373737373737373737373737373737373737373737373737373737373737373737373737373737373737373737373737300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474740000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868680000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +drop table t2; +---- Partitioning and varchar data type +create table t1 (a varchar(767) not null, primary key(a)) engine='TokuDB' +partition by key (a) ( +partition pa1 max_rows=20 min_rows=2, +partition pa2 max_rows=30 min_rows=3, +partition pa3 max_rows=30 min_rows=4, +partition pa4 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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +(PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 ENGINE = TokuDB, + PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 ENGINE = TokuDB, + PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 ENGINE = TokuDB, + PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 ENGINE = TokuDB) */ +insert into t1 values (repeat('a',767)), ('b'), (repeat('a',500)), (repeat('b',64)); +select * from t1; +a +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +b +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 +bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +drop table t1; +create table t2 (a varchar(767) not null, primary key(a)) engine='TokuDB' +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=TokuDB 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 +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii +z +bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb +ttttttttttttttttttttttttttttttttttttttttttttttttt +ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn +qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq +cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc +eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee +ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd +jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj +uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm +kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk +vvvvvvvvvvvvvvvvvvvvvvvvv +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +lllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll +gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg +ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss +xxxxxxxxx +yyyy +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo +wwwwwwwwwwwwwwww +drop table t2; +---- Partitioning and varbinary data type +create table t1 (a varbinary(767) not null, primary key(a)) engine='TokuDB' +partition by key (a) ( +partition pa1 max_rows=20 min_rows=2, +partition pa2 max_rows=30 min_rows=3, +partition pa3 max_rows=30 min_rows=4, +partition pa4 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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +(PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 ENGINE = TokuDB, + PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 ENGINE = TokuDB, + PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 ENGINE = TokuDB, + PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 ENGINE = TokuDB) */ +insert into t1 values (repeat('a',767)), ('b'), (repeat('a',500)), (repeat('b',64)); +select * from t1; +a +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +b +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 +bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +drop table t1; +create table t2 (a varbinary(767) not null, primary key(a)) engine='TokuDB' +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=TokuDB 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 +mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm +xxxxxxxxx +kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk +lllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll +bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb +eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu +vvvvvvvvvvvvvvvvvvvvvvvvv +iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii +yyyy +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo +jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj +ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss +cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc +ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd +nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn +qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq +ttttttttttttttttttttttttttttttttttttttttttttttttt +wwwwwwwwwwwwwwww +z +gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +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='TokuDB' +partition by key (a) ( +partition pa1 max_rows=20 min_rows=2, +partition pa2 max_rows=30 min_rows=3, +partition pa3 max_rows=30 min_rows=4, +partition pa4 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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +(PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 ENGINE = TokuDB, + PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 ENGINE = TokuDB, + PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 ENGINE = TokuDB, + PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 ENGINE = TokuDB) */ +insert into t1 values ('A'),('D'),('L'),('G'); +select * from t1; +a +A +D +L +G +select * from t1 where a='A'; +a +A +update t1 set a='E' where a='L'; +select * from t1; +a +A +E +D +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='TokuDB' +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +PARTITIONS 27 */ +0 inserts; +SET sql_mode = 'NO_ENGINE_SUBSTITUTION'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +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)); +SET sql_mode = default; +insert into t2 values ('1'),('2'),('3'),('4'),('5'),('6'),('7'),('8'),('9'),('0'); +select count(*) from t2; +count(*) +36 +select * from t2; +a +3 +8 +O +T +9 +D +U +Z +E +J +4 +K +P +5 +0 +Q +V +F + +W +G +L +1 +6 +M +R +7 +B +S +X +C +H +2 +Y +I +N +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='TokuDB' +partition by key (a) ( +partition pa1 max_rows=20 min_rows=2, +partition pa2 max_rows=30 min_rows=3, +partition pa3 max_rows=30 min_rows=4, +partition pa4 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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +(PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 ENGINE = TokuDB, + PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 ENGINE = TokuDB, + PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 ENGINE = TokuDB, + PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 ENGINE = TokuDB) */ +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='TokuDB' +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=TokuDB 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='TokuDB' +partition by key (a) ( +partition pa1 max_rows=20 min_rows=2, +partition pa2 max_rows=30 min_rows=3, +partition pa3 max_rows=30 min_rows=4, +partition pa4 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='TokuDB' +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(255))) engine='TokuDB' +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='TokuDB' +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='TokuDB' +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='TokuDB' +partition by key (a) ( +partition pa1 max_rows=20 min_rows=2, +partition pa2 max_rows=30 min_rows=3, +partition pa3 max_rows=30 min_rows=4, +partition pa4 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(255))) engine='TokuDB' +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='TokuDB' +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='TokuDB' +partition by key (a) partitions 30; +ERROR HY000: A BLOB field is not allowed in partition function diff --git a/mysql-test/suite/tokudb.parts/r-native/partition_datetime_tokudb.result b/mysql-test/suite/tokudb.parts/r-native/partition_datetime_tokudb.result new file mode 100644 index 000000000000..6926f2d12d97 --- /dev/null +++ b/mysql-test/suite/tokudb.parts/r-native/partition_datetime_tokudb.result @@ -0,0 +1,1621 @@ +create table t1 (a timestamp not null, primary key(a)) engine='TokuDB' +partition by key (a) ( +partition pa1 max_rows=20 min_rows=2, +partition pa2 max_rows=30 min_rows=3, +partition pa3 max_rows=30 min_rows=4, +partition pa4 max_rows=40 min_rows=2); +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +(PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 ENGINE = TokuDB, + PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 ENGINE = TokuDB, + PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 ENGINE = TokuDB, + PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 ENGINE = TokuDB) */ +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 +2000-06-15 23:59:00 +2020-12-31 12:10:30 +1975-01-01 21:21:21 +1980-10-14 03:03:00 +select * from t1 where a=19801014030300; +a +1980-10-14 03:03:00 +delete from t1 where a=19801014030300; +select * from t1; +a +2000-06-15 23:59:00 +2020-12-31 12:10:30 +1975-01-01 21:21:21 +drop table t1; +create table t2 (a timestamp not null, primary key(a)) engine='TokuDB' +partition by key (a) partitions 12; +show create table t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +PARTITIONS 12 */ +insert into t2 values ('1975-01-01 0:1:1'), ('2020-12-31 10:11:12'), ('1980-10-14 13:14:15'), ('2000-06-15 14:15:16'); +select * from t2; +a +1980-10-14 13:14:15 +2000-06-15 14:15:16 +2020-12-31 10:11:12 +1975-01-01 00:01:01 +select * from t2 where a='1980-10-14 13:14:15'; +a +1980-10-14 13:14:15 +delete from t2 where a='1980-10-14 13:14:15'; +select * from t2; +a +2000-06-15 14:15:16 +2020-12-31 10:11:12 +1975-01-01 00:01:01 +delete from t2; +59 inserts; +insert into t2 values (19710101000000+59); +insert into t2 values (19710101000000+58); +insert into t2 values (19710101000000+57); +insert into t2 values (19710101000000+56); +insert into t2 values (19710101000000+55); +insert into t2 values (19710101000000+54); +insert into t2 values (19710101000000+53); +insert into t2 values (19710101000000+52); +insert into t2 values (19710101000000+51); +insert into t2 values (19710101000000+50); +insert into t2 values (19710101000000+49); +insert into t2 values (19710101000000+48); +insert into t2 values (19710101000000+47); +insert into t2 values (19710101000000+46); +insert into t2 values (19710101000000+45); +insert into t2 values (19710101000000+44); +insert into t2 values (19710101000000+43); +insert into t2 values (19710101000000+42); +insert into t2 values (19710101000000+41); +insert into t2 values (19710101000000+40); +insert into t2 values (19710101000000+39); +insert into t2 values (19710101000000+38); +insert into t2 values (19710101000000+37); +insert into t2 values (19710101000000+36); +insert into t2 values (19710101000000+35); +insert into t2 values (19710101000000+34); +insert into t2 values (19710101000000+33); +insert into t2 values (19710101000000+32); +insert into t2 values (19710101000000+31); +insert into t2 values (19710101000000+30); +insert into t2 values (19710101000000+29); +insert into t2 values (19710101000000+28); +insert into t2 values (19710101000000+27); +insert into t2 values (19710101000000+26); +insert into t2 values (19710101000000+25); +insert into t2 values (19710101000000+24); +insert into t2 values (19710101000000+23); +insert into t2 values (19710101000000+22); +insert into t2 values (19710101000000+21); +insert into t2 values (19710101000000+20); +insert into t2 values (19710101000000+19); +insert into t2 values (19710101000000+18); +insert into t2 values (19710101000000+17); +insert into t2 values (19710101000000+16); +insert into t2 values (19710101000000+15); +insert into t2 values (19710101000000+14); +insert into t2 values (19710101000000+13); +insert into t2 values (19710101000000+12); +insert into t2 values (19710101000000+11); +insert into t2 values (19710101000000+10); +insert into t2 values (19710101000000+9); +insert into t2 values (19710101000000+8); +insert into t2 values (19710101000000+7); +insert into t2 values (19710101000000+6); +insert into t2 values (19710101000000+5); +insert into t2 values (19710101000000+4); +insert into t2 values (19710101000000+3); +insert into t2 values (19710101000000+2); +insert into t2 values (19710101000000+1); +select count(*) from t2; +count(*) +59 +select * from t2; +a +1971-01-01 00:00:14 +1971-01-01 00:00:34 +1971-01-01 00:00:42 +1971-01-01 00:00:58 +1971-01-01 00:00:21 +1971-01-01 00:00:29 +1971-01-01 00:00:37 +1971-01-01 00:00:53 +1971-01-01 00:00:57 +1971-01-01 00:00:04 +1971-01-01 00:00:08 +1971-01-01 00:00:20 +1971-01-01 00:00:36 +1971-01-01 00:00:44 +1971-01-01 00:00:11 +1971-01-01 00:00:23 +1971-01-01 00:00:27 +1971-01-01 00:00:31 +1971-01-01 00:00:02 +1971-01-01 00:00:06 +1971-01-01 00:00:10 +1971-01-01 00:00:22 +1971-01-01 00:00:38 +1971-01-01 00:00:50 +1971-01-01 00:00:17 +1971-01-01 00:00:33 +1971-01-01 00:00:45 +1971-01-01 00:00:12 +1971-01-01 00:00:52 +1971-01-01 00:00:56 +1971-01-01 00:00:07 +1971-01-01 00:00:19 +1971-01-01 00:00:35 +1971-01-01 00:00:39 +1971-01-01 00:00:47 +1971-01-01 00:00:51 +1971-01-01 00:00:18 +1971-01-01 00:00:26 +1971-01-01 00:00:30 +1971-01-01 00:00:46 +1971-01-01 00:00:54 +1971-01-01 00:00:01 +1971-01-01 00:00:05 +1971-01-01 00:00:09 +1971-01-01 00:00:13 +1971-01-01 00:00:25 +1971-01-01 00:00:41 +1971-01-01 00:00:49 +1971-01-01 00:00:16 +1971-01-01 00:00:24 +1971-01-01 00:00:28 +1971-01-01 00:00:32 +1971-01-01 00:00:40 +1971-01-01 00:00:48 +1971-01-01 00:00:03 +1971-01-01 00:00:15 +1971-01-01 00:00:43 +1971-01-01 00:00:55 +1971-01-01 00:00:59 +drop table t2; +create table t1 (a date not null, primary key(a)) engine='TokuDB' +partition by key (a) ( +partition pa1 max_rows=20 min_rows=2, +partition pa2 max_rows=30 min_rows=3, +partition pa3 max_rows=30 min_rows=4, +partition pa4 max_rows=40 min_rows=2); +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` date NOT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +(PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 ENGINE = TokuDB, + PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 ENGINE = TokuDB, + PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 ENGINE = TokuDB, + PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 ENGINE = TokuDB) */ +insert into t1 values ('1975-01-01'), ('2020-12-31'), ('1980-10-14'), ('2000-06-15'); +select * from t1; +a +1980-10-14 +2020-12-31 +1975-01-01 +2000-06-15 +select * from t1 where a=19801014; +a +1980-10-14 +delete from t1 where a=19801014; +select * from t1; +a +2020-12-31 +1975-01-01 +2000-06-15 +drop table t1; +create table t2 (a date not null, primary key(a)) engine='TokuDB' +partition by key (a) partitions 12; +show create table t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` date NOT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +PARTITIONS 12 */ +insert into t2 values ('1975-01-01'), ('2020-12-31'), ('1980-10-14'), ('2000-06-15'); +select * from t2; +a +1980-10-14 +1975-01-01 +2020-12-31 +2000-06-15 +select * from t2 where a='1980-10-14'; +a +1980-10-14 +delete from t2 where a='1980-10-14'; +select * from t2; +a +1975-01-01 +2020-12-31 +2000-06-15 +delete from t2; +28 inserts; +insert into t2 values (19700101+28-1); +insert into t2 values (19700201+28-1); +insert into t2 values (19700301+28-1); +insert into t2 values (19700101+27-1); +insert into t2 values (19700201+27-1); +insert into t2 values (19700301+27-1); +insert into t2 values (19700101+26-1); +insert into t2 values (19700201+26-1); +insert into t2 values (19700301+26-1); +insert into t2 values (19700101+25-1); +insert into t2 values (19700201+25-1); +insert into t2 values (19700301+25-1); +insert into t2 values (19700101+24-1); +insert into t2 values (19700201+24-1); +insert into t2 values (19700301+24-1); +insert into t2 values (19700101+23-1); +insert into t2 values (19700201+23-1); +insert into t2 values (19700301+23-1); +insert into t2 values (19700101+22-1); +insert into t2 values (19700201+22-1); +insert into t2 values (19700301+22-1); +insert into t2 values (19700101+21-1); +insert into t2 values (19700201+21-1); +insert into t2 values (19700301+21-1); +insert into t2 values (19700101+20-1); +insert into t2 values (19700201+20-1); +insert into t2 values (19700301+20-1); +insert into t2 values (19700101+19-1); +insert into t2 values (19700201+19-1); +insert into t2 values (19700301+19-1); +insert into t2 values (19700101+18-1); +insert into t2 values (19700201+18-1); +insert into t2 values (19700301+18-1); +insert into t2 values (19700101+17-1); +insert into t2 values (19700201+17-1); +insert into t2 values (19700301+17-1); +insert into t2 values (19700101+16-1); +insert into t2 values (19700201+16-1); +insert into t2 values (19700301+16-1); +insert into t2 values (19700101+15-1); +insert into t2 values (19700201+15-1); +insert into t2 values (19700301+15-1); +insert into t2 values (19700101+14-1); +insert into t2 values (19700201+14-1); +insert into t2 values (19700301+14-1); +insert into t2 values (19700101+13-1); +insert into t2 values (19700201+13-1); +insert into t2 values (19700301+13-1); +insert into t2 values (19700101+12-1); +insert into t2 values (19700201+12-1); +insert into t2 values (19700301+12-1); +insert into t2 values (19700101+11-1); +insert into t2 values (19700201+11-1); +insert into t2 values (19700301+11-1); +insert into t2 values (19700101+10-1); +insert into t2 values (19700201+10-1); +insert into t2 values (19700301+10-1); +insert into t2 values (19700101+9-1); +insert into t2 values (19700201+9-1); +insert into t2 values (19700301+9-1); +insert into t2 values (19700101+8-1); +insert into t2 values (19700201+8-1); +insert into t2 values (19700301+8-1); +insert into t2 values (19700101+7-1); +insert into t2 values (19700201+7-1); +insert into t2 values (19700301+7-1); +insert into t2 values (19700101+6-1); +insert into t2 values (19700201+6-1); +insert into t2 values (19700301+6-1); +insert into t2 values (19700101+5-1); +insert into t2 values (19700201+5-1); +insert into t2 values (19700301+5-1); +insert into t2 values (19700101+4-1); +insert into t2 values (19700201+4-1); +insert into t2 values (19700301+4-1); +insert into t2 values (19700101+3-1); +insert into t2 values (19700201+3-1); +insert into t2 values (19700301+3-1); +insert into t2 values (19700101+2-1); +insert into t2 values (19700201+2-1); +insert into t2 values (19700301+2-1); +insert into t2 values (19700101+1-1); +insert into t2 values (19700201+1-1); +insert into t2 values (19700301+1-1); +select count(*) from t2; +count(*) +84 +select * from t2; +a +1970-01-04 +1970-01-12 +1970-01-14 +1970-01-16 +1970-01-20 +1970-01-28 +1970-02-02 +1970-02-08 +1970-02-26 +1970-03-02 +1970-03-08 +1970-03-26 +1970-01-05 +1970-01-21 +1970-01-25 +1970-02-01 +1970-02-15 +1970-02-17 +1970-02-19 +1970-02-27 +1970-03-01 +1970-03-15 +1970-03-17 +1970-03-19 +1970-03-27 +1970-01-08 +1970-01-18 +1970-01-24 +1970-02-10 +1970-02-14 +1970-02-16 +1970-02-20 +1970-02-22 +1970-03-10 +1970-03-14 +1970-03-16 +1970-03-20 +1970-03-22 +1970-03-28 +1970-01-01 +1970-01-09 +1970-01-13 +1970-01-19 +1970-01-27 +1970-02-09 +1970-02-21 +1970-02-25 +1970-03-09 +1970-03-21 +1970-03-25 +1970-01-02 +1970-01-06 +1970-01-10 +1970-01-22 +1970-01-26 +1970-02-04 +1970-02-06 +1970-02-12 +1970-02-18 +1970-02-24 +1970-02-28 +1970-03-04 +1970-03-06 +1970-03-12 +1970-03-18 +1970-03-24 +1970-01-03 +1970-01-07 +1970-01-11 +1970-01-15 +1970-01-17 +1970-01-23 +1970-02-03 +1970-02-05 +1970-02-07 +1970-02-11 +1970-02-13 +1970-02-23 +1970-03-03 +1970-03-05 +1970-03-07 +1970-03-11 +1970-03-13 +1970-03-23 +drop table t2; +create table t3 (a date not null, primary key(a)) engine='TokuDB' +partition by range (month(a)) subpartition by key (a) +subpartitions 3 ( +partition quarter1 values less than (4), +partition quarter2 values less than (7), +partition quarter3 values less than (10), +partition quarter4 values less than (13) +); +show create table t3; +Table Create Table +t3 CREATE TABLE `t3` ( + `a` date NOT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (month(a)) +SUBPARTITION BY KEY (a) +SUBPARTITIONS 3 +(PARTITION quarter1 VALUES LESS THAN (4) ENGINE = TokuDB, + PARTITION quarter2 VALUES LESS THAN (7) ENGINE = TokuDB, + PARTITION quarter3 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION quarter4 VALUES LESS THAN (13) ENGINE = TokuDB) */ +12 inserts; +insert into t3 values (adddate(19700101,interval 12-1 month)); +insert into t3 values (adddate(19700101,interval 11-1 month)); +insert into t3 values (adddate(19700101,interval 10-1 month)); +insert into t3 values (adddate(19700101,interval 9-1 month)); +insert into t3 values (adddate(19700101,interval 8-1 month)); +insert into t3 values (adddate(19700101,interval 7-1 month)); +insert into t3 values (adddate(19700101,interval 6-1 month)); +insert into t3 values (adddate(19700101,interval 5-1 month)); +insert into t3 values (adddate(19700101,interval 4-1 month)); +insert into t3 values (adddate(19700101,interval 3-1 month)); +insert into t3 values (adddate(19700101,interval 2-1 month)); +insert into t3 values (adddate(19700101,interval 1-1 month)); +select count(*) from t3; +count(*) +12 +select * from t3; +a +1970-01-01 +1970-02-01 +1970-03-01 +1970-04-01 +1970-05-01 +1970-06-01 +1970-07-01 +1970-08-01 +1970-09-01 +1970-10-01 +1970-11-01 +1970-12-01 +drop table t3; +create table t4 (a date not null, primary key(a)) engine='TokuDB' +partition by list (month(a)) subpartition by key (a) +subpartitions 3 ( +partition quarter1 values in (1,2,3), +partition quarter2 values in (4,5,6), +partition quarter3 values in (7,8,9), +partition quarter4 values in (10,11,12) +); +show create table t4; +Table Create Table +t4 CREATE TABLE `t4` ( + `a` date NOT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (month(a)) +SUBPARTITION BY KEY (a) +SUBPARTITIONS 3 +(PARTITION quarter1 VALUES IN (1,2,3) ENGINE = TokuDB, + PARTITION quarter2 VALUES IN (4,5,6) ENGINE = TokuDB, + PARTITION quarter3 VALUES IN (7,8,9) ENGINE = TokuDB, + PARTITION quarter4 VALUES IN (10,11,12) ENGINE = TokuDB) */ +12 inserts; +insert into t4 values (adddate(19700101,interval 12-1 month)); +insert into t4 values (adddate(19700101,interval 11-1 month)); +insert into t4 values (adddate(19700101,interval 10-1 month)); +insert into t4 values (adddate(19700101,interval 9-1 month)); +insert into t4 values (adddate(19700101,interval 8-1 month)); +insert into t4 values (adddate(19700101,interval 7-1 month)); +insert into t4 values (adddate(19700101,interval 6-1 month)); +insert into t4 values (adddate(19700101,interval 5-1 month)); +insert into t4 values (adddate(19700101,interval 4-1 month)); +insert into t4 values (adddate(19700101,interval 3-1 month)); +insert into t4 values (adddate(19700101,interval 2-1 month)); +insert into t4 values (adddate(19700101,interval 1-1 month)); +select count(*) from t4; +count(*) +12 +select * from t4; +a +1970-01-01 +1970-02-01 +1970-03-01 +1970-04-01 +1970-05-01 +1970-06-01 +1970-07-01 +1970-08-01 +1970-09-01 +1970-10-01 +1970-11-01 +1970-12-01 +drop table t4; +create table t1 (a time not null, primary key(a)) engine='TokuDB' +partition by key (a) ( +partition pa1 max_rows=20 min_rows=2, +partition pa2 max_rows=30 min_rows=3, +partition pa3 max_rows=30 min_rows=4, +partition pa4 max_rows=40 min_rows=2); +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` time NOT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +(PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 ENGINE = TokuDB, + PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 ENGINE = TokuDB, + PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 ENGINE = TokuDB, + PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 ENGINE = TokuDB) */ +insert into t1 values ('21:21:21'), ('12:10:30'), ('03:03:03'), ('23:59'); +select * from t1; +a +03:03:03 +21:21:21 +23:59:00 +12:10:30 +select * from t1 where a=030303; +a +03:03:03 +delete from t1 where a=030303; +select * from t1; +a +21:21:21 +23:59:00 +12:10:30 +drop table t1; +create table t2 (a time not null, primary key(a)) engine='TokuDB' +partition by key (a) partitions 12; +show create table t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` time NOT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +PARTITIONS 12 */ +insert into t2 values ('0:1:1'), ('10:11:12'), ('13:14:15'), ('14:15:16'); +select * from t2; +a +10:11:12 +13:14:15 +14:15:16 +00:01:01 +select * from t2 where a='13:14:15'; +a +13:14:15 +delete from t2 where a='13:14:15'; +select * from t2; +a +10:11:12 +14:15:16 +00:01:01 +delete from t2; +59 inserts; +insert into t2 values (000100+59); +insert into t2 values (000100+58); +insert into t2 values (000100+57); +insert into t2 values (000100+56); +insert into t2 values (000100+55); +insert into t2 values (000100+54); +insert into t2 values (000100+53); +insert into t2 values (000100+52); +insert into t2 values (000100+51); +insert into t2 values (000100+50); +insert into t2 values (000100+49); +insert into t2 values (000100+48); +insert into t2 values (000100+47); +insert into t2 values (000100+46); +insert into t2 values (000100+45); +insert into t2 values (000100+44); +insert into t2 values (000100+43); +insert into t2 values (000100+42); +insert into t2 values (000100+41); +insert into t2 values (000100+40); +insert into t2 values (000100+39); +insert into t2 values (000100+38); +insert into t2 values (000100+37); +insert into t2 values (000100+36); +insert into t2 values (000100+35); +insert into t2 values (000100+34); +insert into t2 values (000100+33); +insert into t2 values (000100+32); +insert into t2 values (000100+31); +insert into t2 values (000100+30); +insert into t2 values (000100+29); +insert into t2 values (000100+28); +insert into t2 values (000100+27); +insert into t2 values (000100+26); +insert into t2 values (000100+25); +insert into t2 values (000100+24); +insert into t2 values (000100+23); +insert into t2 values (000100+22); +insert into t2 values (000100+21); +insert into t2 values (000100+20); +insert into t2 values (000100+19); +insert into t2 values (000100+18); +insert into t2 values (000100+17); +insert into t2 values (000100+16); +insert into t2 values (000100+15); +insert into t2 values (000100+14); +insert into t2 values (000100+13); +insert into t2 values (000100+12); +insert into t2 values (000100+11); +insert into t2 values (000100+10); +insert into t2 values (000100+9); +insert into t2 values (000100+8); +insert into t2 values (000100+7); +insert into t2 values (000100+6); +insert into t2 values (000100+5); +insert into t2 values (000100+4); +insert into t2 values (000100+3); +insert into t2 values (000100+2); +insert into t2 values (000100+1); +select count(*) from t2; +count(*) +59 +select * from t2; +a +00:01:15 +00:01:23 +00:01:39 +00:01:47 +00:01:59 +00:01:16 +00:01:24 +00:01:40 +00:01:48 +00:01:05 +00:01:13 +00:01:21 +00:01:37 +00:01:45 +00:01:57 +00:01:14 +00:01:22 +00:01:38 +00:01:46 +00:01:58 +00:01:03 +00:01:11 +00:01:19 +00:01:35 +00:01:43 +00:01:55 +00:01:04 +00:01:12 +00:01:20 +00:01:36 +00:01:44 +00:01:56 +00:01:01 +00:01:09 +00:01:29 +00:01:33 +00:01:41 +00:01:53 +00:01:02 +00:01:10 +00:01:18 +00:01:34 +00:01:42 +00:01:54 +00:01:07 +00:01:27 +00:01:31 +00:01:51 +00:01:08 +00:01:28 +00:01:32 +00:01:52 +00:01:17 +00:01:25 +00:01:49 +00:01:06 +00:01:26 +00:01:30 +00:01:50 +drop table t2; +create table t3 (a time not null, primary key(a)) engine='TokuDB' +partition by range (second(a)) subpartition by key (a) +subpartitions 3 ( +partition quarter1 values less than (16), +partition quarter2 values less than (31), +partition quarter3 values less than (46), +partition quarter4 values less than (61) +); +show create table t3; +Table Create Table +t3 CREATE TABLE `t3` ( + `a` time NOT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (second(a)) +SUBPARTITION BY KEY (a) +SUBPARTITIONS 3 +(PARTITION quarter1 VALUES LESS THAN (16) ENGINE = TokuDB, + PARTITION quarter2 VALUES LESS THAN (31) ENGINE = TokuDB, + PARTITION quarter3 VALUES LESS THAN (46) ENGINE = TokuDB, + PARTITION quarter4 VALUES LESS THAN (61) ENGINE = TokuDB) */ +59 inserts; +insert into t3 values (100000+59); +insert into t3 values (100000+58); +insert into t3 values (100000+57); +insert into t3 values (100000+56); +insert into t3 values (100000+55); +insert into t3 values (100000+54); +insert into t3 values (100000+53); +insert into t3 values (100000+52); +insert into t3 values (100000+51); +insert into t3 values (100000+50); +insert into t3 values (100000+49); +insert into t3 values (100000+48); +insert into t3 values (100000+47); +insert into t3 values (100000+46); +insert into t3 values (100000+45); +insert into t3 values (100000+44); +insert into t3 values (100000+43); +insert into t3 values (100000+42); +insert into t3 values (100000+41); +insert into t3 values (100000+40); +insert into t3 values (100000+39); +insert into t3 values (100000+38); +insert into t3 values (100000+37); +insert into t3 values (100000+36); +insert into t3 values (100000+35); +insert into t3 values (100000+34); +insert into t3 values (100000+33); +insert into t3 values (100000+32); +insert into t3 values (100000+31); +insert into t3 values (100000+30); +insert into t3 values (100000+29); +insert into t3 values (100000+28); +insert into t3 values (100000+27); +insert into t3 values (100000+26); +insert into t3 values (100000+25); +insert into t3 values (100000+24); +insert into t3 values (100000+23); +insert into t3 values (100000+22); +insert into t3 values (100000+21); +insert into t3 values (100000+20); +insert into t3 values (100000+19); +insert into t3 values (100000+18); +insert into t3 values (100000+17); +insert into t3 values (100000+16); +insert into t3 values (100000+15); +insert into t3 values (100000+14); +insert into t3 values (100000+13); +insert into t3 values (100000+12); +insert into t3 values (100000+11); +insert into t3 values (100000+10); +insert into t3 values (100000+9); +insert into t3 values (100000+8); +insert into t3 values (100000+7); +insert into t3 values (100000+6); +insert into t3 values (100000+5); +insert into t3 values (100000+4); +insert into t3 values (100000+3); +insert into t3 values (100000+2); +insert into t3 values (100000+1); +select count(*) from t3; +count(*) +59 +select * from t3; +a +10:00:01 +10:00:06 +10:00:07 +10:00:14 +10:00:15 +10:00:02 +10:00:03 +10:00:08 +10:00:09 +10:00:04 +10:00:05 +10:00:10 +10:00:11 +10:00:12 +10:00:13 +10:00:20 +10:00:21 +10:00:26 +10:00:27 +10:00:16 +10:00:17 +10:00:22 +10:00:23 +10:00:28 +10:00:29 +10:00:18 +10:00:19 +10:00:24 +10:00:25 +10:00:30 +10:00:32 +10:00:33 +10:00:35 +10:00:40 +10:00:41 +10:00:34 +10:00:36 +10:00:37 +10:00:42 +10:00:43 +10:00:31 +10:00:38 +10:00:39 +10:00:44 +10:00:45 +10:00:46 +10:00:48 +10:00:49 +10:00:54 +10:00:55 +10:00:50 +10:00:51 +10:00:56 +10:00:57 +10:00:59 +10:00:47 +10:00:52 +10:00:53 +10:00:58 +drop table t3; +create table t4 (a time not null, primary key(a)) engine='TokuDB' +partition by list (second(a)) subpartition by key (a) +subpartitions 3 ( +partition quarter1 values in (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15), +partition quarter2 values in (16,17,18,19,20,21,22,23,24,25,26,27,28,29,30), +partition quarter3 values in (31,32,33,34,35,36,37,38,39,40,41,42,43,44,45), +partition quarter4 values in (46,47,48,49,50,51,52,53,54,55,56,57,58,59,60) +); +show create table t4; +Table Create Table +t4 CREATE TABLE `t4` ( + `a` time NOT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (second(a)) +SUBPARTITION BY KEY (a) +SUBPARTITIONS 3 +(PARTITION quarter1 VALUES IN (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15) ENGINE = TokuDB, + PARTITION quarter2 VALUES IN (16,17,18,19,20,21,22,23,24,25,26,27,28,29,30) ENGINE = TokuDB, + PARTITION quarter3 VALUES IN (31,32,33,34,35,36,37,38,39,40,41,42,43,44,45) ENGINE = TokuDB, + PARTITION quarter4 VALUES IN (46,47,48,49,50,51,52,53,54,55,56,57,58,59,60) ENGINE = TokuDB) */ +59 inserts; +insert into t4 values (100000+59); +insert into t4 values (100000+58); +insert into t4 values (100000+57); +insert into t4 values (100000+56); +insert into t4 values (100000+55); +insert into t4 values (100000+54); +insert into t4 values (100000+53); +insert into t4 values (100000+52); +insert into t4 values (100000+51); +insert into t4 values (100000+50); +insert into t4 values (100000+49); +insert into t4 values (100000+48); +insert into t4 values (100000+47); +insert into t4 values (100000+46); +insert into t4 values (100000+45); +insert into t4 values (100000+44); +insert into t4 values (100000+43); +insert into t4 values (100000+42); +insert into t4 values (100000+41); +insert into t4 values (100000+40); +insert into t4 values (100000+39); +insert into t4 values (100000+38); +insert into t4 values (100000+37); +insert into t4 values (100000+36); +insert into t4 values (100000+35); +insert into t4 values (100000+34); +insert into t4 values (100000+33); +insert into t4 values (100000+32); +insert into t4 values (100000+31); +insert into t4 values (100000+30); +insert into t4 values (100000+29); +insert into t4 values (100000+28); +insert into t4 values (100000+27); +insert into t4 values (100000+26); +insert into t4 values (100000+25); +insert into t4 values (100000+24); +insert into t4 values (100000+23); +insert into t4 values (100000+22); +insert into t4 values (100000+21); +insert into t4 values (100000+20); +insert into t4 values (100000+19); +insert into t4 values (100000+18); +insert into t4 values (100000+17); +insert into t4 values (100000+16); +insert into t4 values (100000+15); +insert into t4 values (100000+14); +insert into t4 values (100000+13); +insert into t4 values (100000+12); +insert into t4 values (100000+11); +insert into t4 values (100000+10); +insert into t4 values (100000+9); +insert into t4 values (100000+8); +insert into t4 values (100000+7); +insert into t4 values (100000+6); +insert into t4 values (100000+5); +insert into t4 values (100000+4); +insert into t4 values (100000+3); +insert into t4 values (100000+2); +insert into t4 values (100000+1); +select count(*) from t4; +count(*) +59 +select * from t4; +a +10:00:01 +10:00:06 +10:00:07 +10:00:14 +10:00:15 +10:00:02 +10:00:03 +10:00:08 +10:00:09 +10:00:04 +10:00:05 +10:00:10 +10:00:11 +10:00:12 +10:00:13 +10:00:20 +10:00:21 +10:00:26 +10:00:27 +10:00:16 +10:00:17 +10:00:22 +10:00:23 +10:00:28 +10:00:29 +10:00:18 +10:00:19 +10:00:24 +10:00:25 +10:00:30 +10:00:32 +10:00:33 +10:00:35 +10:00:40 +10:00:41 +10:00:34 +10:00:36 +10:00:37 +10:00:42 +10:00:43 +10:00:31 +10:00:38 +10:00:39 +10:00:44 +10:00:45 +10:00:46 +10:00:48 +10:00:49 +10:00:54 +10:00:55 +10:00:50 +10:00:51 +10:00:56 +10:00:57 +10:00:59 +10:00:47 +10:00:52 +10:00:53 +10:00:58 +drop table t4; +create table t1 (a datetime not null, primary key(a)) engine='TokuDB' +partition by key (a) ( +partition pa1 max_rows=20 min_rows=2, +partition pa2 max_rows=30 min_rows=3, +partition pa3 max_rows=30 min_rows=4, +partition pa4 max_rows=40 min_rows=2); +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` datetime NOT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +(PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 ENGINE = TokuDB, + PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 ENGINE = TokuDB, + PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 ENGINE = TokuDB, + PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 ENGINE = TokuDB) */ +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 +1975-01-01 21:21:21 +2000-06-15 23:59:00 +2020-12-31 12:10:30 +1980-10-14 03:03:00 +select * from t1 where a=19801014030300; +a +1980-10-14 03:03:00 +delete from t1 where a=19801014030300; +select * from t1; +a +1975-01-01 21:21:21 +2000-06-15 23:59:00 +2020-12-31 12:10:30 +drop table t1; +create table t2 (a datetime not null, primary key(a)) engine='TokuDB' +partition by key (a) partitions 12; +show create table t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` datetime NOT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +PARTITIONS 12 */ +insert into t2 values ('1975-01-01 0:1:1'), ('2020-12-31 10:11:12'), ('1980-10-14 13:14:15'), ('2000-06-15 14:15:16'); +select * from t2; +a +2020-12-31 10:11:12 +2000-06-15 14:15:16 +1980-10-14 13:14:15 +1975-01-01 00:01:01 +select * from t2 where a='1980-10-14 13:14:15'; +a +1980-10-14 13:14:15 +delete from t2 where a='1980-10-14 13:14:15'; +select * from t2; +a +2020-12-31 10:11:12 +2000-06-15 14:15:16 +1975-01-01 00:01:01 +delete from t2; +59 inserts; +insert into t2 values (19700101000000+59); +insert into t2 values (19700101000000+58); +insert into t2 values (19700101000000+57); +insert into t2 values (19700101000000+56); +insert into t2 values (19700101000000+55); +insert into t2 values (19700101000000+54); +insert into t2 values (19700101000000+53); +insert into t2 values (19700101000000+52); +insert into t2 values (19700101000000+51); +insert into t2 values (19700101000000+50); +insert into t2 values (19700101000000+49); +insert into t2 values (19700101000000+48); +insert into t2 values (19700101000000+47); +insert into t2 values (19700101000000+46); +insert into t2 values (19700101000000+45); +insert into t2 values (19700101000000+44); +insert into t2 values (19700101000000+43); +insert into t2 values (19700101000000+42); +insert into t2 values (19700101000000+41); +insert into t2 values (19700101000000+40); +insert into t2 values (19700101000000+39); +insert into t2 values (19700101000000+38); +insert into t2 values (19700101000000+37); +insert into t2 values (19700101000000+36); +insert into t2 values (19700101000000+35); +insert into t2 values (19700101000000+34); +insert into t2 values (19700101000000+33); +insert into t2 values (19700101000000+32); +insert into t2 values (19700101000000+31); +insert into t2 values (19700101000000+30); +insert into t2 values (19700101000000+29); +insert into t2 values (19700101000000+28); +insert into t2 values (19700101000000+27); +insert into t2 values (19700101000000+26); +insert into t2 values (19700101000000+25); +insert into t2 values (19700101000000+24); +insert into t2 values (19700101000000+23); +insert into t2 values (19700101000000+22); +insert into t2 values (19700101000000+21); +insert into t2 values (19700101000000+20); +insert into t2 values (19700101000000+19); +insert into t2 values (19700101000000+18); +insert into t2 values (19700101000000+17); +insert into t2 values (19700101000000+16); +insert into t2 values (19700101000000+15); +insert into t2 values (19700101000000+14); +insert into t2 values (19700101000000+13); +insert into t2 values (19700101000000+12); +insert into t2 values (19700101000000+11); +insert into t2 values (19700101000000+10); +insert into t2 values (19700101000000+9); +insert into t2 values (19700101000000+8); +insert into t2 values (19700101000000+7); +insert into t2 values (19700101000000+6); +insert into t2 values (19700101000000+5); +insert into t2 values (19700101000000+4); +insert into t2 values (19700101000000+3); +insert into t2 values (19700101000000+2); +insert into t2 values (19700101000000+1); +select count(*) from t2; +count(*) +59 +select * from t2; +a +1970-01-01 00:00:09 +1970-01-01 00:00:13 +1970-01-01 00:00:19 +1970-01-01 00:00:23 +1970-01-01 00:00:33 +1970-01-01 00:00:37 +1970-01-01 00:00:51 +1970-01-01 00:00:59 +1970-01-01 00:00:04 +1970-01-01 00:00:10 +1970-01-01 00:00:14 +1970-01-01 00:00:24 +1970-01-01 00:00:28 +1970-01-01 00:00:34 +1970-01-01 00:00:38 +1970-01-01 00:00:48 +1970-01-01 00:00:52 +1970-01-01 00:00:56 +1970-01-01 00:00:03 +1970-01-01 00:00:07 +1970-01-01 00:00:17 +1970-01-01 00:00:21 +1970-01-01 00:00:27 +1970-01-01 00:00:31 +1970-01-01 00:00:35 +1970-01-01 00:00:39 +1970-01-01 00:00:41 +1970-01-01 00:00:45 +1970-01-01 00:00:08 +1970-01-01 00:00:12 +1970-01-01 00:00:18 +1970-01-01 00:00:22 +1970-01-01 00:00:32 +1970-01-01 00:00:36 +1970-01-01 00:00:42 +1970-01-01 00:00:46 +1970-01-01 00:00:01 +1970-01-01 00:00:05 +1970-01-01 00:00:11 +1970-01-01 00:00:15 +1970-01-01 00:00:25 +1970-01-01 00:00:29 +1970-01-01 00:00:43 +1970-01-01 00:00:47 +1970-01-01 00:00:49 +1970-01-01 00:00:53 +1970-01-01 00:00:55 +1970-01-01 00:00:57 +1970-01-01 00:00:02 +1970-01-01 00:00:06 +1970-01-01 00:00:16 +1970-01-01 00:00:20 +1970-01-01 00:00:26 +1970-01-01 00:00:30 +1970-01-01 00:00:40 +1970-01-01 00:00:44 +1970-01-01 00:00:50 +1970-01-01 00:00:54 +1970-01-01 00:00:58 +drop table t2; +create table t3 (a datetime not null, primary key(a)) engine='TokuDB' +partition by range (month(a)) subpartition by key (a) +subpartitions 3 ( +partition quarter1 values less than (4), +partition quarter2 values less than (7), +partition quarter3 values less than (10), +partition quarter4 values less than (13) +); +show create table t3; +Table Create Table +t3 CREATE TABLE `t3` ( + `a` datetime NOT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (month(a)) +SUBPARTITION BY KEY (a) +SUBPARTITIONS 3 +(PARTITION quarter1 VALUES LESS THAN (4) ENGINE = TokuDB, + PARTITION quarter2 VALUES LESS THAN (7) ENGINE = TokuDB, + PARTITION quarter3 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION quarter4 VALUES LESS THAN (13) ENGINE = TokuDB) */ +12 inserts; +insert into t3 values (adddate(19700101000000,interval 12-1 month)); +insert into t3 values (adddate(19700101000000,interval 11-1 month)); +insert into t3 values (adddate(19700101000000,interval 10-1 month)); +insert into t3 values (adddate(19700101000000,interval 9-1 month)); +insert into t3 values (adddate(19700101000000,interval 8-1 month)); +insert into t3 values (adddate(19700101000000,interval 7-1 month)); +insert into t3 values (adddate(19700101000000,interval 6-1 month)); +insert into t3 values (adddate(19700101000000,interval 5-1 month)); +insert into t3 values (adddate(19700101000000,interval 4-1 month)); +insert into t3 values (adddate(19700101000000,interval 3-1 month)); +insert into t3 values (adddate(19700101000000,interval 2-1 month)); +insert into t3 values (adddate(19700101000000,interval 1-1 month)); +select count(*) from t3; +count(*) +12 +select * from t3; +a +1970-02-01 00:00:00 +1970-01-01 00:00:00 +1970-03-01 00:00:00 +1970-04-01 00:00:00 +1970-05-01 00:00:00 +1970-06-01 00:00:00 +1970-08-01 00:00:00 +1970-09-01 00:00:00 +1970-07-01 00:00:00 +1970-10-01 00:00:00 +1970-11-01 00:00:00 +1970-12-01 00:00:00 +drop table t3; +create table t4 (a datetime not null, primary key(a)) engine='TokuDB' +partition by list (month(a)) subpartition by key (a) +subpartitions 3 ( +partition quarter1 values in (1,2,3), +partition quarter2 values in (4,5,6), +partition quarter3 values in (7,8,9), +partition quarter4 values in (10,11,12) +); +show create table t4; +Table Create Table +t4 CREATE TABLE `t4` ( + `a` datetime NOT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (month(a)) +SUBPARTITION BY KEY (a) +SUBPARTITIONS 3 +(PARTITION quarter1 VALUES IN (1,2,3) ENGINE = TokuDB, + PARTITION quarter2 VALUES IN (4,5,6) ENGINE = TokuDB, + PARTITION quarter3 VALUES IN (7,8,9) ENGINE = TokuDB, + PARTITION quarter4 VALUES IN (10,11,12) ENGINE = TokuDB) */ +12 inserts; +insert into t4 values (adddate(19700101000000,interval 12-1 month)); +insert into t4 values (adddate(19700101000000,interval 11-1 month)); +insert into t4 values (adddate(19700101000000,interval 10-1 month)); +insert into t4 values (adddate(19700101000000,interval 9-1 month)); +insert into t4 values (adddate(19700101000000,interval 8-1 month)); +insert into t4 values (adddate(19700101000000,interval 7-1 month)); +insert into t4 values (adddate(19700101000000,interval 6-1 month)); +insert into t4 values (adddate(19700101000000,interval 5-1 month)); +insert into t4 values (adddate(19700101000000,interval 4-1 month)); +insert into t4 values (adddate(19700101000000,interval 3-1 month)); +insert into t4 values (adddate(19700101000000,interval 2-1 month)); +insert into t4 values (adddate(19700101000000,interval 1-1 month)); +select count(*) from t4; +count(*) +12 +select * from t4; +a +1970-02-01 00:00:00 +1970-01-01 00:00:00 +1970-03-01 00:00:00 +1970-04-01 00:00:00 +1970-05-01 00:00:00 +1970-06-01 00:00:00 +1970-08-01 00:00:00 +1970-09-01 00:00:00 +1970-07-01 00:00:00 +1970-10-01 00:00:00 +1970-11-01 00:00:00 +1970-12-01 00:00:00 +drop table t4; +create table t1 (a year not null, primary key(a)) engine='TokuDB' +partition by key (a) ( +partition pa1 max_rows=20 min_rows=2, +partition pa2 max_rows=30 min_rows=3, +partition pa3 max_rows=30 min_rows=4, +partition pa4 max_rows=40 min_rows=2); +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` year(4) NOT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +(PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 ENGINE = TokuDB, + PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 ENGINE = TokuDB, + PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 ENGINE = TokuDB, + PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 ENGINE = TokuDB) */ +insert into t1 values ('1975'), (2020), ('1980'), ('2000'); +select * from t1; +a +1980 +2000 +2020 +1975 +select * from t1 where a=1980; +a +1980 +delete from t1 where a=1980; +select * from t1; +a +2000 +2020 +1975 +drop table t1; +create table t2 (a year not null, primary key(a)) engine='TokuDB' +partition by key (a) partitions 12; +show create table t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` year(4) NOT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +PARTITIONS 12 */ +insert into t2 values ('1975'), ('2020'), ('1980'), ('2000'); +select * from t2; +a +2020 +1975 +1980 +2000 +select * from t2 where a='1980'; +a +1980 +delete from t2 where a='1980'; +select * from t2; +a +2020 +1975 +2000 +delete from t2; +255 inserts; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +Warnings: +Warning 1264 Out of range value for column 'a' at row 1 +select count(*) from t2; +count(*) +255 +select * from t2; +a +1909 +1921 +1933 +1945 +1957 +1969 +1981 +1993 +2001 +2013 +2029 +2041 +2053 +2065 +2077 +2089 +2100 +2101 +2102 +2103 +2114 +2132 +2133 +2134 +2135 +2146 +1904 +1916 +1928 +1932 +1940 +1952 +1964 +1976 +1988 +2008 +2020 +2024 +2036 +2048 +2060 +2072 +2084 +1907 +1919 +1931 +1943 +1955 +1967 +1979 +1991 +1999 +2011 +2027 +2039 +2051 +2063 +2075 +2087 +2097 +2099 +2110 +2111 +2112 +2113 +2123 +2129 +2131 +2142 +2143 +2144 +2145 +2147 +1902 +1914 +1926 +1938 +1950 +1962 +1974 +1986 +2006 +2018 +2034 +2046 +2058 +2070 +2082 +1905 +1917 +1929 +1941 +1953 +1965 +1977 +1989 +1997 +2009 +2021 +2025 +2037 +2049 +2061 +2073 +2085 +2092 +2093 +2094 +2095 +2120 +2121 +2124 +2125 +2126 +2127 +2152 +2153 +0000 +1912 +1924 +1936 +1948 +1960 +1972 +1984 +1996 +2004 +2016 +2032 +2044 +2056 +2068 +2080 +2116 +2148 +1903 +1915 +1927 +1939 +1951 +1963 +1975 +1987 +2007 +2019 +2023 +2035 +2047 +2059 +2071 +2083 +2155 +1910 +1922 +1934 +1946 +1958 +1970 +1982 +1994 +2002 +2014 +2030 +2042 +2054 +2066 +2078 +2090 +1913 +1925 +1937 +1949 +1961 +1973 +1985 +2005 +2017 +2033 +2045 +2057 +2069 +2081 +2104 +2105 +2106 +2107 +2117 +2118 +2119 +2136 +2137 +2138 +2139 +2149 +2150 +2151 +1908 +1920 +1944 +1956 +1968 +1980 +1992 +2000 +2012 +2028 +2040 +2052 +2064 +2076 +2088 +2096 +2098 +2108 +2128 +2130 +2140 +1911 +1923 +1935 +1947 +1959 +1971 +1983 +1995 +2003 +2015 +2031 +2043 +2055 +2067 +2079 +2091 +2115 +1906 +1918 +1930 +1942 +1954 +1966 +1978 +1990 +1998 +2010 +2022 +2026 +2038 +2050 +2062 +2074 +2086 +2109 +2122 +2141 +2154 +drop table t2; diff --git a/mysql-test/suite/tokudb.parts/r-native/partition_debug_sync_tokudb.result b/mysql-test/suite/tokudb.parts/r-native/partition_debug_sync_tokudb.result new file mode 100644 index 000000000000..545e832032e8 --- /dev/null +++ b/mysql-test/suite/tokudb.parts/r-native/partition_debug_sync_tokudb.result @@ -0,0 +1,99 @@ +# +# Bug#49907: ALTER TABLE ... TRUNCATE PARTITION +# does not wait for locks on the table +# +CREATE TABLE t1 (a INT) +ENGINE = TokuDB +PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (15), +PARTITION pMax VALUES LESS THAN MAXVALUE); +INSERT INTO t1 VALUES (1), (11), (21), (33); +BEGIN; +DELETE FROM t1 WHERE a = 11; +SELECT * FROM t1; +a +1 +21 +33 +# con1 (send) +ALTER TABLE t1 TRUNCATE PARTITION pMax; +# con default +SELECT * FROM t1; +a +1 +21 +33 +# Commit will allow the TRUNCATE to finish +COMMIT; +# con1 (reap) +# con1 (disconnect) +# default connection +SELECT * FROM t1; +a +1 +DROP TABLE t1; +# +# Bug#50561: ALTER PARTITIONS does not have adequate lock, breaks with +# concurrent I_S query +create table t1 (a int) +engine = tokudb stats_persistent=0 +partition by range (a) +(partition p0 values less than MAXVALUE); +insert into t1 values (1), (11), (21), (33); +SELECT * FROM t1; +a +1 +11 +21 +33 +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 STATS_PERSISTENT=0 +/*!50100 PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN MAXVALUE ENGINE = TokuDB) */ +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +SET DEBUG_SYNC='before_open_in_get_all_tables SIGNAL parked WAIT_FOR open'; +SET DEBUG_SYNC='partition_open_error SIGNAL alter WAIT_FOR finish'; +SELECT TABLE_SCHEMA, TABLE_NAME, PARTITION_NAME, PARTITION_ORDINAL_POSITION, +PARTITION_DESCRIPTION, TABLE_ROWS +FROM INFORMATION_SCHEMA.PARTITIONS +WHERE TABLE_NAME = 't1' AND TABLE_SCHEMA = 'test'; +SET DEBUG_SYNC = 'now WAIT_FOR parked'; +# When waiting for the name lock in get_all_tables in sql_show.cc +# this will not be concurrent any more, thus the TIMEOUT +SET DEBUG_SYNC = 'before_handle_alter_part_end SIGNAL open WAIT_FOR alter TIMEOUT 1'; +# Needs to be executed twice, since first is this 'SET DEBUG_SYNC ...' +SET DEBUG_SYNC = 'before_close_thread_tables SIGNAL finish EXECUTE 2'; +ALTER TABLE t1 REORGANIZE PARTITION p0 INTO +(PARTITION p0 VALUES LESS THAN (10), +PARTITION p10 VALUES LESS THAN MAXVALUE); +Warnings: +Warning 1639 debug sync point wait timed out +TABLE_SCHEMA TABLE_NAME PARTITION_NAME PARTITION_ORDINAL_POSITION PARTITION_DESCRIPTION TABLE_ROWS +test t1 p0 1 10 1 +test t1 p10 2 MAXVALUE 3 +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 STATS_PERSISTENT=0 +/*!50100 PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION p10 VALUES LESS THAN MAXVALUE ENGINE = TokuDB) */ +SELECT * FROM t1; +a +1 +11 +21 +33 +drop table t1; +SET DEBUG_SYNC = 'RESET'; diff --git a/mysql-test/suite/tokudb.parts/r-native/partition_debug_tokudb.result b/mysql-test/suite/tokudb.parts/r-native/partition_debug_tokudb.result new file mode 100644 index 000000000000..03627079054f --- /dev/null +++ b/mysql-test/suite/tokudb.parts/r-native/partition_debug_tokudb.result @@ -0,0 +1,5637 @@ +DROP TABLE IF EXISTS t1; +call mtr.add_suppression("TokuDB: Warning: allocated tablespace .*, old maximum was"); +call mtr.add_suppression("TokuDB: Error: table .* does not exist in the TokuDB internal"); +call mtr.add_suppression("TokuDB: Warning: MySQL is trying to drop table "); +# Test crash and failure recovery in fast_alter_partition_table. +# +# Bug#53676: Unexpected errors and possible table corruption on +# ADD PARTITION and LOCK TABLE +# Bug#53770: Server crash at handler.cc:2076 on LOAD DATA +# after timed out COALESCE PARTITION +# Extended crash recovery testing of fast_alter_partition_table. +call mtr.add_suppression("Attempting backtrace. You can use the following information to find out"); +# +# Test without crash/failure injection +# +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9), +PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19)); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"); +# State before statement +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +ALTER TABLE t1 ADD PARTITION +(PARTITION p20 VALUES IN (20,21,22,23,24,25,26,27,28,29)); +# State after statement +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +t1_P_p20_main_id.tokudb +t1_P_p20_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB, + PARTITION p20 VALUES IN (20,21,22,23,24,25,26,27,28,29) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +DROP TABLE t1; +# Crash testing ADD PARTITION +SET SESSION debug="+d,crash_add_partition_1"; +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9), +PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19)); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"); +# State before crash +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +ALTER TABLE t1 ADD PARTITION +(PARTITION p20 VALUES IN (20,21,22,23,24,25,26,27,28,29)); +ERROR HY000: Lost connection to MySQL server during query +# State after crash (before recovery) +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +# State after crash recovery +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +DROP TABLE t1; +SET SESSION debug="-d,crash_add_partition_1"; +SET SESSION debug="+d,crash_add_partition_2"; +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9), +PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19)); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"); +# State before crash +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +ALTER TABLE t1 ADD PARTITION +(PARTITION p20 VALUES IN (20,21,22,23,24,25,26,27,28,29)); +ERROR HY000: Lost connection to MySQL server during query +# State after crash (before recovery) +#sql-t1.frm +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +# State after crash recovery +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +DROP TABLE t1; +SET SESSION debug="-d,crash_add_partition_2"; +SET SESSION debug="+d,crash_add_partition_3"; +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9), +PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19)); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"); +# State before crash +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +ALTER TABLE t1 ADD PARTITION +(PARTITION p20 VALUES IN (20,21,22,23,24,25,26,27,28,29)); +ERROR HY000: Lost connection to MySQL server during query +# State after crash (before recovery) +#sql-t1.frm +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +# State after crash recovery +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +DROP TABLE t1; +SET SESSION debug="-d,crash_add_partition_3"; +SET SESSION debug="+d,crash_add_partition_4"; +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9), +PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19)); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"); +# State before crash +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +ALTER TABLE t1 ADD PARTITION +(PARTITION p20 VALUES IN (20,21,22,23,24,25,26,27,28,29)); +ERROR HY000: Lost connection to MySQL server during query +# State after crash (before recovery) +#sql-t1.frm +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +# State after crash recovery +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +DROP TABLE t1; +SET SESSION debug="-d,crash_add_partition_4"; +SET SESSION debug="+d,crash_add_partition_5"; +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9), +PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19)); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"); +# State before crash +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +ALTER TABLE t1 ADD PARTITION +(PARTITION p20 VALUES IN (20,21,22,23,24,25,26,27,28,29)); +ERROR HY000: Lost connection to MySQL server during query +# State after crash (before recovery) +#sql-t1.frm +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +t1_P_p20_main_id.tokudb +t1_P_p20_status_id.tokudb +# State after crash recovery +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +DROP TABLE t1; +SET SESSION debug="-d,crash_add_partition_5"; +SET SESSION debug="+d,crash_add_partition_6"; +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9), +PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19)); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"); +# State before crash +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +ALTER TABLE t1 ADD PARTITION +(PARTITION p20 VALUES IN (20,21,22,23,24,25,26,27,28,29)); +ERROR HY000: Lost connection to MySQL server during query +# State after crash (before recovery) +#sql-t1.frm +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +t1_P_p20_main_id.tokudb +t1_P_p20_status_id.tokudb +# State after crash recovery +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +DROP TABLE t1; +SET SESSION debug="-d,crash_add_partition_6"; +SET SESSION debug="+d,crash_add_partition_7"; +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9), +PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19)); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"); +# State before crash +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +ALTER TABLE t1 ADD PARTITION +(PARTITION p20 VALUES IN (20,21,22,23,24,25,26,27,28,29)); +ERROR HY000: Lost connection to MySQL server during query +# State after crash (before recovery) +#sql-t1.frm +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +t1_P_p20_main_id.tokudb +t1_P_p20_status_id.tokudb +# State after crash recovery +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +t1_P_p20_main_id.tokudb +t1_P_p20_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB, + PARTITION p20 VALUES IN (20,21,22,23,24,25,26,27,28,29) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +DROP TABLE t1; +SET SESSION debug="-d,crash_add_partition_7"; +# Error recovery testing ADD PARTITION +SET SESSION debug="+d,fail_add_partition_1"; +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9), +PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19)); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"); +# State before failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +ALTER TABLE t1 ADD PARTITION +(PARTITION p20 VALUES IN (20,21,22,23,24,25,26,27,28,29)); +ERROR HY000: Unknown error +# State after failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +DROP TABLE t1; +# Same test under LOCK TABLE +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9), +PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19)); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"); +# State before failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +LOCK TABLE t1 WRITE; +ALTER TABLE t1 ADD PARTITION +(PARTITION p20 VALUES IN (20,21,22,23,24,25,26,27,28,29)); +ERROR HY000: Unknown error +# State after failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +UNLOCK TABLES; +DROP TABLE t1; +SET SESSION debug="-d,fail_add_partition_1"; +SET SESSION debug="+d,fail_add_partition_2"; +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9), +PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19)); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"); +# State before failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +ALTER TABLE t1 ADD PARTITION +(PARTITION p20 VALUES IN (20,21,22,23,24,25,26,27,28,29)); +ERROR HY000: Unknown error +# State after failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +DROP TABLE t1; +# Same test under LOCK TABLE +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9), +PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19)); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"); +# State before failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +LOCK TABLE t1 WRITE; +ALTER TABLE t1 ADD PARTITION +(PARTITION p20 VALUES IN (20,21,22,23,24,25,26,27,28,29)); +ERROR HY000: Unknown error +# State after failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +UNLOCK TABLES; +DROP TABLE t1; +SET SESSION debug="-d,fail_add_partition_2"; +SET SESSION debug="+d,fail_add_partition_3"; +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9), +PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19)); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"); +# State before failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +ALTER TABLE t1 ADD PARTITION +(PARTITION p20 VALUES IN (20,21,22,23,24,25,26,27,28,29)); +ERROR HY000: Unknown error +# State after failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +DROP TABLE t1; +# Same test under LOCK TABLE +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9), +PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19)); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"); +# State before failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +LOCK TABLE t1 WRITE; +ALTER TABLE t1 ADD PARTITION +(PARTITION p20 VALUES IN (20,21,22,23,24,25,26,27,28,29)); +ERROR HY000: Unknown error +# State after failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +UNLOCK TABLES; +DROP TABLE t1; +SET SESSION debug="-d,fail_add_partition_3"; +SET SESSION debug="+d,fail_add_partition_4"; +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9), +PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19)); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"); +# State before failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +ALTER TABLE t1 ADD PARTITION +(PARTITION p20 VALUES IN (20,21,22,23,24,25,26,27,28,29)); +ERROR HY000: Unknown error +# State after failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +DROP TABLE t1; +# Same test under LOCK TABLE +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9), +PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19)); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"); +# State before failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +LOCK TABLE t1 WRITE; +ALTER TABLE t1 ADD PARTITION +(PARTITION p20 VALUES IN (20,21,22,23,24,25,26,27,28,29)); +ERROR HY000: Unknown error +# State after failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +UNLOCK TABLES; +DROP TABLE t1; +SET SESSION debug="-d,fail_add_partition_4"; +SET SESSION debug="+d,fail_add_partition_5"; +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9), +PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19)); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"); +# State before failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +ALTER TABLE t1 ADD PARTITION +(PARTITION p20 VALUES IN (20,21,22,23,24,25,26,27,28,29)); +ERROR HY000: Unknown error +# State after failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +DROP TABLE t1; +# Same test under LOCK TABLE +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9), +PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19)); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"); +# State before failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +LOCK TABLE t1 WRITE; +ALTER TABLE t1 ADD PARTITION +(PARTITION p20 VALUES IN (20,21,22,23,24,25,26,27,28,29)); +ERROR HY000: Unknown error +# State after failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +UNLOCK TABLES; +DROP TABLE t1; +SET SESSION debug="-d,fail_add_partition_5"; +SET SESSION debug="+d,fail_add_partition_6"; +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9), +PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19)); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"); +# State before failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +ALTER TABLE t1 ADD PARTITION +(PARTITION p20 VALUES IN (20,21,22,23,24,25,26,27,28,29)); +ERROR HY000: Unknown error +# State after failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +DROP TABLE t1; +# Same test under LOCK TABLE +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9), +PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19)); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"); +# State before failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +LOCK TABLE t1 WRITE; +ALTER TABLE t1 ADD PARTITION +(PARTITION p20 VALUES IN (20,21,22,23,24,25,26,27,28,29)); +ERROR HY000: Unknown error +# State after failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +UNLOCK TABLES; +DROP TABLE t1; +SET SESSION debug="-d,fail_add_partition_6"; +SET SESSION debug="+d,fail_add_partition_7"; +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9), +PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19)); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"); +# State before failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +ALTER TABLE t1 ADD PARTITION +(PARTITION p20 VALUES IN (20,21,22,23,24,25,26,27,28,29)); +ERROR HY000: Unknown error +# State after failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +t1_P_p20_main_id.tokudb +t1_P_p20_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB, + PARTITION p20 VALUES IN (20,21,22,23,24,25,26,27,28,29) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +DROP TABLE t1; +# Same test under LOCK TABLE +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9), +PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19)); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"); +# State before failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +LOCK TABLE t1 WRITE; +ALTER TABLE t1 ADD PARTITION +(PARTITION p20 VALUES IN (20,21,22,23,24,25,26,27,28,29)); +ERROR HY000: Unknown error +# State after failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +t1_P_p20_main_id.tokudb +t1_P_p20_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB, + PARTITION p20 VALUES IN (20,21,22,23,24,25,26,27,28,29) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +UNLOCK TABLES; +DROP TABLE t1; +SET SESSION debug="-d,fail_add_partition_7"; +# Test DROP PARTITION +SET SESSION debug="+d,crash_drop_partition_1"; +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9), +PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19)); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"); +# State before crash +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +ALTER TABLE t1 DROP PARTITION p10; +ERROR HY000: Lost connection to MySQL server during query +# State after crash (before recovery) +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +# State after crash recovery +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +DROP TABLE t1; +SET SESSION debug="-d,crash_drop_partition_1"; +SET SESSION debug="+d,crash_drop_partition_2"; +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9), +PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19)); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"); +# State before crash +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +ALTER TABLE t1 DROP PARTITION p10; +ERROR HY000: Lost connection to MySQL server during query +# State after crash (before recovery) +#sql-t1.frm +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +# State after crash recovery +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +DROP TABLE t1; +SET SESSION debug="-d,crash_drop_partition_2"; +SET SESSION debug="+d,crash_drop_partition_3"; +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9), +PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19)); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"); +# State before crash +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +ALTER TABLE t1 DROP PARTITION p10; +ERROR HY000: Lost connection to MySQL server during query +# State after crash (before recovery) +#sql-t1.frm +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +# State after crash recovery +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +DROP TABLE t1; +SET SESSION debug="-d,crash_drop_partition_3"; +SET SESSION debug="+d,crash_drop_partition_4"; +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9), +PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19)); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"); +# State before crash +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +ALTER TABLE t1 DROP PARTITION p10; +ERROR HY000: Lost connection to MySQL server during query +# State after crash (before recovery) +#sql-t1.frm +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +# State after crash recovery +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +DROP TABLE t1; +SET SESSION debug="-d,crash_drop_partition_4"; +SET SESSION debug="+d,crash_drop_partition_5"; +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9), +PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19)); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"); +# State before crash +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +ALTER TABLE t1 DROP PARTITION p10; +ERROR HY000: Lost connection to MySQL server during query +# State after crash (before recovery) +#sql-t1.frm +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +# State after crash recovery +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +DROP TABLE t1; +SET SESSION debug="-d,crash_drop_partition_5"; +# Error recovery DROP PARTITION +SET SESSION debug="+d,fail_drop_partition_1"; +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9), +PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19)); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"); +# State before failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +ALTER TABLE t1 DROP PARTITION p10; +ERROR HY000: Unknown error +# State after failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +DROP TABLE t1; +# Same test under LOCK TABLE +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9), +PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19)); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"); +# State before failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +LOCK TABLE t1 WRITE; +ALTER TABLE t1 DROP PARTITION p10; +ERROR HY000: Unknown error +# State after failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +UNLOCK TABLES; +DROP TABLE t1; +SET SESSION debug="-d,fail_drop_partition_1"; +SET SESSION debug="+d,fail_drop_partition_2"; +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9), +PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19)); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"); +# State before failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +ALTER TABLE t1 DROP PARTITION p10; +ERROR HY000: Unknown error +# State after failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +DROP TABLE t1; +# Same test under LOCK TABLE +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9), +PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19)); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"); +# State before failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +LOCK TABLE t1 WRITE; +ALTER TABLE t1 DROP PARTITION p10; +ERROR HY000: Unknown error +# State after failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +UNLOCK TABLES; +DROP TABLE t1; +SET SESSION debug="-d,fail_drop_partition_2"; +SET SESSION debug="+d,fail_drop_partition_3"; +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9), +PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19)); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"); +# State before failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +ALTER TABLE t1 DROP PARTITION p10; +ERROR HY000: Unknown error +# State after failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +DROP TABLE t1; +# Same test under LOCK TABLE +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9), +PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19)); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"); +# State before failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +LOCK TABLE t1 WRITE; +ALTER TABLE t1 DROP PARTITION p10; +ERROR HY000: Unknown error +# State after failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +UNLOCK TABLES; +DROP TABLE t1; +SET SESSION debug="-d,fail_drop_partition_3"; +SET SESSION debug="+d,fail_drop_partition_4"; +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9), +PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19)); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"); +# State before failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +ALTER TABLE t1 DROP PARTITION p10; +ERROR HY000: Unknown error +# State after failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +DROP TABLE t1; +# Same test under LOCK TABLE +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9), +PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19)); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"); +# State before failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +LOCK TABLE t1 WRITE; +ALTER TABLE t1 DROP PARTITION p10; +ERROR HY000: Unknown error +# State after failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +UNLOCK TABLES; +DROP TABLE t1; +SET SESSION debug="-d,fail_drop_partition_4"; +SET SESSION debug="+d,fail_drop_partition_5"; +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9), +PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19)); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"); +# State before failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +ALTER TABLE t1 DROP PARTITION p10; +ERROR HY000: Unknown error +# State after failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +DROP TABLE t1; +# Same test under LOCK TABLE +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9), +PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19)); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"); +# State before failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +LOCK TABLE t1 WRITE; +ALTER TABLE t1 DROP PARTITION p10; +ERROR HY000: Unknown error +# State after failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +UNLOCK TABLES; +DROP TABLE t1; +SET SESSION debug="-d,fail_drop_partition_5"; +# +# Test without crash/failure injection +# +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9), +PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19)); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"); +# State before statement +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +ALTER TABLE t1 REORGANIZE PARTITION p10 INTO +(PARTITION p10 VALUES IN (10,11,12,13,14,15,16,17,18,19), +PARTITION p20 VALUES IN (20,21,22,23,24,25,26,27,28,29)); +# State after statement +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +t1_P_p20_main_id.tokudb +t1_P_p20_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (10,11,12,13,14,15,16,17,18,19) ENGINE = TokuDB, + PARTITION p20 VALUES IN (20,21,22,23,24,25,26,27,28,29) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +DROP TABLE t1; +# Test change partition (REORGANIZE/REBUILD/COALESCE +# or ADD HASH PARTITION). +SET SESSION debug="+d,crash_change_partition_1"; +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9), +PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19)); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"); +# State before crash +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +ALTER TABLE t1 REORGANIZE PARTITION p10 INTO +(PARTITION p10 VALUES IN (10,11,12,13,14,15,16,17,18,19), +PARTITION p20 VALUES IN (20,21,22,23,24,25,26,27,28,29)); +ERROR HY000: Lost connection to MySQL server during query +# State after crash (before recovery) +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +# State after crash recovery +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +DROP TABLE t1; +SET SESSION debug="-d,crash_change_partition_1"; +SET SESSION debug="+d,crash_change_partition_2"; +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9), +PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19)); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"); +# State before crash +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +ALTER TABLE t1 REORGANIZE PARTITION p10 INTO +(PARTITION p10 VALUES IN (10,11,12,13,14,15,16,17,18,19), +PARTITION p20 VALUES IN (20,21,22,23,24,25,26,27,28,29)); +ERROR HY000: Lost connection to MySQL server during query +# State after crash (before recovery) +#sql-t1.frm +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +# State after crash recovery +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +DROP TABLE t1; +SET SESSION debug="-d,crash_change_partition_2"; +SET SESSION debug="+d,crash_change_partition_3"; +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9), +PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19)); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"); +# State before crash +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +ALTER TABLE t1 REORGANIZE PARTITION p10 INTO +(PARTITION p10 VALUES IN (10,11,12,13,14,15,16,17,18,19), +PARTITION p20 VALUES IN (20,21,22,23,24,25,26,27,28,29)); +ERROR HY000: Lost connection to MySQL server during query +# State after crash (before recovery) +#sql-t1.frm +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +# State after crash recovery +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +DROP TABLE t1; +SET SESSION debug="-d,crash_change_partition_3"; +SET SESSION debug="+d,crash_change_partition_4"; +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9), +PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19)); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"); +# State before crash +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +ALTER TABLE t1 REORGANIZE PARTITION p10 INTO +(PARTITION p10 VALUES IN (10,11,12,13,14,15,16,17,18,19), +PARTITION p20 VALUES IN (20,21,22,23,24,25,26,27,28,29)); +ERROR HY000: Lost connection to MySQL server during query +# State after crash (before recovery) +#sql-t1.frm +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_TMP_main_id.tokudb +t1_P_p10_TMP_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +t1_P_p20_TMP_main_id.tokudb +t1_P_p20_TMP_status_id.tokudb +# State after crash recovery +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +DROP TABLE t1; +SET SESSION debug="-d,crash_change_partition_4"; +SET SESSION debug="+d,crash_change_partition_5"; +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9), +PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19)); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"); +# State before crash +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +ALTER TABLE t1 REORGANIZE PARTITION p10 INTO +(PARTITION p10 VALUES IN (10,11,12,13,14,15,16,17,18,19), +PARTITION p20 VALUES IN (20,21,22,23,24,25,26,27,28,29)); +ERROR HY000: Lost connection to MySQL server during query +# State after crash (before recovery) +#sql-t1.frm +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_TMP_main_id.tokudb +t1_P_p10_TMP_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +t1_P_p20_TMP_main_id.tokudb +t1_P_p20_TMP_status_id.tokudb +# State after crash recovery +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +DROP TABLE t1; +SET SESSION debug="-d,crash_change_partition_5"; +SET SESSION debug="+d,crash_change_partition_6"; +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9), +PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19)); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"); +# State before crash +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +ALTER TABLE t1 REORGANIZE PARTITION p10 INTO +(PARTITION p10 VALUES IN (10,11,12,13,14,15,16,17,18,19), +PARTITION p20 VALUES IN (20,21,22,23,24,25,26,27,28,29)); +ERROR HY000: Lost connection to MySQL server during query +# State after crash (before recovery) +#sql-t1.frm +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_TMP_main_id.tokudb +t1_P_p10_TMP_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +t1_P_p20_TMP_main_id.tokudb +t1_P_p20_TMP_status_id.tokudb +# State after crash recovery +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +t1_P_p20_main_id.tokudb +t1_P_p20_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (10,11,12,13,14,15,16,17,18,19) ENGINE = TokuDB, + PARTITION p20 VALUES IN (20,21,22,23,24,25,26,27,28,29) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +DROP TABLE t1; +SET SESSION debug="-d,crash_change_partition_6"; +SET SESSION debug="+d,crash_change_partition_7"; +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9), +PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19)); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"); +# State before crash +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +ALTER TABLE t1 REORGANIZE PARTITION p10 INTO +(PARTITION p10 VALUES IN (10,11,12,13,14,15,16,17,18,19), +PARTITION p20 VALUES IN (20,21,22,23,24,25,26,27,28,29)); +ERROR HY000: Lost connection to MySQL server during query +# State after crash (before recovery) +#sql-t1.frm +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_TMP_main_id.tokudb +t1_P_p10_TMP_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +t1_P_p20_TMP_main_id.tokudb +t1_P_p20_TMP_status_id.tokudb +# State after crash recovery +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +t1_P_p20_main_id.tokudb +t1_P_p20_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (10,11,12,13,14,15,16,17,18,19) ENGINE = TokuDB, + PARTITION p20 VALUES IN (20,21,22,23,24,25,26,27,28,29) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +DROP TABLE t1; +SET SESSION debug="-d,crash_change_partition_7"; +# Error recovery change partition (REORGANIZE/REBUILD/COALESCE +# or ADD HASH PARTITION). +SET SESSION debug="+d,fail_change_partition_1"; +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9), +PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19)); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"); +# State before failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +ALTER TABLE t1 REORGANIZE PARTITION p10 INTO +(PARTITION p10 VALUES IN (10,11,12,13,14,15,16,17,18,19), +PARTITION p20 VALUES IN (20,21,22,23,24,25,26,27,28,29)); +ERROR HY000: Unknown error +# State after failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +DROP TABLE t1; +# Same test under LOCK TABLE +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9), +PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19)); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"); +# State before failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +LOCK TABLE t1 WRITE; +ALTER TABLE t1 REORGANIZE PARTITION p10 INTO +(PARTITION p10 VALUES IN (10,11,12,13,14,15,16,17,18,19), +PARTITION p20 VALUES IN (20,21,22,23,24,25,26,27,28,29)); +ERROR HY000: Unknown error +# State after failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +UNLOCK TABLES; +DROP TABLE t1; +SET SESSION debug="-d,fail_change_partition_1"; +SET SESSION debug="+d,fail_change_partition_2"; +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9), +PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19)); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"); +# State before failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +ALTER TABLE t1 REORGANIZE PARTITION p10 INTO +(PARTITION p10 VALUES IN (10,11,12,13,14,15,16,17,18,19), +PARTITION p20 VALUES IN (20,21,22,23,24,25,26,27,28,29)); +ERROR HY000: Unknown error +# State after failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +DROP TABLE t1; +# Same test under LOCK TABLE +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9), +PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19)); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"); +# State before failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +LOCK TABLE t1 WRITE; +ALTER TABLE t1 REORGANIZE PARTITION p10 INTO +(PARTITION p10 VALUES IN (10,11,12,13,14,15,16,17,18,19), +PARTITION p20 VALUES IN (20,21,22,23,24,25,26,27,28,29)); +ERROR HY000: Unknown error +# State after failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +UNLOCK TABLES; +DROP TABLE t1; +SET SESSION debug="-d,fail_change_partition_2"; +SET SESSION debug="+d,fail_change_partition_3"; +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9), +PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19)); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"); +# State before failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +ALTER TABLE t1 REORGANIZE PARTITION p10 INTO +(PARTITION p10 VALUES IN (10,11,12,13,14,15,16,17,18,19), +PARTITION p20 VALUES IN (20,21,22,23,24,25,26,27,28,29)); +ERROR HY000: Unknown error +# State after failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +DROP TABLE t1; +# Same test under LOCK TABLE +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9), +PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19)); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"); +# State before failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +LOCK TABLE t1 WRITE; +ALTER TABLE t1 REORGANIZE PARTITION p10 INTO +(PARTITION p10 VALUES IN (10,11,12,13,14,15,16,17,18,19), +PARTITION p20 VALUES IN (20,21,22,23,24,25,26,27,28,29)); +ERROR HY000: Unknown error +# State after failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +UNLOCK TABLES; +DROP TABLE t1; +SET SESSION debug="-d,fail_change_partition_3"; +SET SESSION debug="+d,fail_change_partition_4"; +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9), +PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19)); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"); +# State before failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +ALTER TABLE t1 REORGANIZE PARTITION p10 INTO +(PARTITION p10 VALUES IN (10,11,12,13,14,15,16,17,18,19), +PARTITION p20 VALUES IN (20,21,22,23,24,25,26,27,28,29)); +ERROR HY000: Unknown error +# State after failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +DROP TABLE t1; +# Same test under LOCK TABLE +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9), +PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19)); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"); +# State before failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +LOCK TABLE t1 WRITE; +ALTER TABLE t1 REORGANIZE PARTITION p10 INTO +(PARTITION p10 VALUES IN (10,11,12,13,14,15,16,17,18,19), +PARTITION p20 VALUES IN (20,21,22,23,24,25,26,27,28,29)); +ERROR HY000: Unknown error +# State after failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +UNLOCK TABLES; +DROP TABLE t1; +SET SESSION debug="-d,fail_change_partition_4"; +SET SESSION debug="+d,fail_change_partition_5"; +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9), +PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19)); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"); +# State before failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +ALTER TABLE t1 REORGANIZE PARTITION p10 INTO +(PARTITION p10 VALUES IN (10,11,12,13,14,15,16,17,18,19), +PARTITION p20 VALUES IN (20,21,22,23,24,25,26,27,28,29)); +ERROR HY000: Unknown error +# State after failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +DROP TABLE t1; +# Same test under LOCK TABLE +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9), +PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19)); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"); +# State before failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +LOCK TABLE t1 WRITE; +ALTER TABLE t1 REORGANIZE PARTITION p10 INTO +(PARTITION p10 VALUES IN (10,11,12,13,14,15,16,17,18,19), +PARTITION p20 VALUES IN (20,21,22,23,24,25,26,27,28,29)); +ERROR HY000: Unknown error +# State after failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +UNLOCK TABLES; +DROP TABLE t1; +SET SESSION debug="-d,fail_change_partition_5"; +SET SESSION debug="+d,fail_change_partition_6"; +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9), +PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19)); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"); +# State before failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +ALTER TABLE t1 REORGANIZE PARTITION p10 INTO +(PARTITION p10 VALUES IN (10,11,12,13,14,15,16,17,18,19), +PARTITION p20 VALUES IN (20,21,22,23,24,25,26,27,28,29)); +ERROR HY000: Unknown error +# State after failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +t1_P_p20_main_id.tokudb +t1_P_p20_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (10,11,12,13,14,15,16,17,18,19) ENGINE = TokuDB, + PARTITION p20 VALUES IN (20,21,22,23,24,25,26,27,28,29) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +DROP TABLE t1; +# Same test under LOCK TABLE +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9), +PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19)); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"); +# State before failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (11,12,13,14,15,16,17,18,19) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +LOCK TABLE t1 WRITE; +ALTER TABLE t1 REORGANIZE PARTITION p10 INTO +(PARTITION p10 VALUES IN (10,11,12,13,14,15,16,17,18,19), +PARTITION p20 VALUES IN (20,21,22,23,24,25,26,27,28,29)); +ERROR HY000: Unknown error +# State after failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p10_main_id.tokudb +t1_P_p10_status_id.tokudb +t1_P_p20_main_id.tokudb +t1_P_p20_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION p0 VALUES IN (0,1,2,3,4,5,6,7,8,9) ENGINE = TokuDB, + PARTITION p10 VALUES IN (10,11,12,13,14,15,16,17,18,19) ENGINE = TokuDB, + PARTITION p20 VALUES IN (20,21,22,23,24,25,26,27,28,29) ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +UNLOCK TABLES; +DROP TABLE t1; +SET SESSION debug="-d,fail_change_partition_6"; +# +# WL#4445: EXCHANGE PARTITION WITH TABLE +# Verify ddl_log and TokuDB in case of crashing. +call mtr.add_suppression("TokuDB: Warning: allocated tablespace .*, old maximum was "); +call mtr.add_suppression("Attempting backtrace. You can use the following information to find out"); +call mtr.add_suppression("table .* does not exist in the TokuDB internal"); +SET SESSION debug="+d,exchange_partition_abort_1"; +CREATE TABLE t2 (a INT, b VARCHAR(64)) ENGINE = TokuDB; +INSERT INTO t2 VALUES (5, "Original from table t2"), (6, "Original from table t2"), (7, "Original from table t2"), (8, "Original from table t2"); +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +SELECT * FROM t2; +a b +5 Original from table t2 +6 Original from table t2 +7 Original from table t2 +8 Original from table t2 +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = TokuDB +PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10), +PARTITION p1 VALUES LESS THAN MAXVALUE); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"), (21, "Original from partition p1"), (22, "Original from partition p1"), (23, "Original from partition p1"), (24, "Original from partition p1"); +# State before crash +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb +t2.frm +t2_main_id.tokudb +t2_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION p1 VALUES LESS THAN MAXVALUE ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +21 Original from partition p1 +22 Original from partition p1 +23 Original from partition p1 +24 Original from partition p1 +3 Original from partition p0 +4 Original from partition p0 +ALTER TABLE t1 EXCHANGE PARTITION p0 WITH TABLE t2; +ERROR HY000: Lost connection to MySQL server during query +# State after crash (before recovery) +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb +t2.frm +t2_main_id.tokudb +t2_status_id.tokudb +# State after crash recovery +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb +t2.frm +t2_main_id.tokudb +t2_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION p1 VALUES LESS THAN MAXVALUE ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +21 Original from partition p1 +22 Original from partition p1 +23 Original from partition p1 +24 Original from partition p1 +3 Original from partition p0 +4 Original from partition p0 +DROP TABLE t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +SELECT * FROM t2; +a b +5 Original from table t2 +6 Original from table t2 +7 Original from table t2 +8 Original from table t2 +DROP TABLE t2; +SET SESSION debug="-d,exchange_partition_abort_1"; +SET SESSION debug="+d,exchange_partition_abort_2"; +CREATE TABLE t2 (a INT, b VARCHAR(64)) ENGINE = TokuDB; +INSERT INTO t2 VALUES (5, "Original from table t2"), (6, "Original from table t2"), (7, "Original from table t2"), (8, "Original from table t2"); +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +SELECT * FROM t2; +a b +5 Original from table t2 +6 Original from table t2 +7 Original from table t2 +8 Original from table t2 +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = TokuDB +PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10), +PARTITION p1 VALUES LESS THAN MAXVALUE); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"), (21, "Original from partition p1"), (22, "Original from partition p1"), (23, "Original from partition p1"), (24, "Original from partition p1"); +# State before crash +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb +t2.frm +t2_main_id.tokudb +t2_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION p1 VALUES LESS THAN MAXVALUE ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +21 Original from partition p1 +22 Original from partition p1 +23 Original from partition p1 +24 Original from partition p1 +3 Original from partition p0 +4 Original from partition p0 +ALTER TABLE t1 EXCHANGE PARTITION p0 WITH TABLE t2; +ERROR HY000: Lost connection to MySQL server during query +# State after crash (before recovery) +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb +t2.frm +t2_main_id.tokudb +t2_status_id.tokudb +# State after crash recovery +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb +t2.frm +t2_main_id.tokudb +t2_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION p1 VALUES LESS THAN MAXVALUE ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +21 Original from partition p1 +22 Original from partition p1 +23 Original from partition p1 +24 Original from partition p1 +3 Original from partition p0 +4 Original from partition p0 +DROP TABLE t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +SELECT * FROM t2; +a b +5 Original from table t2 +6 Original from table t2 +7 Original from table t2 +8 Original from table t2 +DROP TABLE t2; +SET SESSION debug="-d,exchange_partition_abort_2"; +SET SESSION debug="+d,exchange_partition_abort_3"; +CREATE TABLE t2 (a INT, b VARCHAR(64)) ENGINE = TokuDB; +INSERT INTO t2 VALUES (5, "Original from table t2"), (6, "Original from table t2"), (7, "Original from table t2"), (8, "Original from table t2"); +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +SELECT * FROM t2; +a b +5 Original from table t2 +6 Original from table t2 +7 Original from table t2 +8 Original from table t2 +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = TokuDB +PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10), +PARTITION p1 VALUES LESS THAN MAXVALUE); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"), (21, "Original from partition p1"), (22, "Original from partition p1"), (23, "Original from partition p1"), (24, "Original from partition p1"); +# State before crash +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb +t2.frm +t2_main_id.tokudb +t2_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION p1 VALUES LESS THAN MAXVALUE ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +21 Original from partition p1 +22 Original from partition p1 +23 Original from partition p1 +24 Original from partition p1 +3 Original from partition p0 +4 Original from partition p0 +ALTER TABLE t1 EXCHANGE PARTITION p0 WITH TABLE t2; +ERROR HY000: Lost connection to MySQL server during query +# State after crash (before recovery) +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb +t2.frm +t2_main_id.tokudb +t2_status_id.tokudb +# State after crash recovery +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb +t2.frm +t2_main_id.tokudb +t2_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION p1 VALUES LESS THAN MAXVALUE ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +21 Original from partition p1 +22 Original from partition p1 +23 Original from partition p1 +24 Original from partition p1 +3 Original from partition p0 +4 Original from partition p0 +DROP TABLE t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +SELECT * FROM t2; +a b +5 Original from table t2 +6 Original from table t2 +7 Original from table t2 +8 Original from table t2 +DROP TABLE t2; +SET SESSION debug="-d,exchange_partition_abort_3"; +SET SESSION debug="+d,exchange_partition_abort_4"; +CREATE TABLE t2 (a INT, b VARCHAR(64)) ENGINE = TokuDB; +INSERT INTO t2 VALUES (5, "Original from table t2"), (6, "Original from table t2"), (7, "Original from table t2"), (8, "Original from table t2"); +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +SELECT * FROM t2; +a b +5 Original from table t2 +6 Original from table t2 +7 Original from table t2 +8 Original from table t2 +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = TokuDB +PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10), +PARTITION p1 VALUES LESS THAN MAXVALUE); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"), (21, "Original from partition p1"), (22, "Original from partition p1"), (23, "Original from partition p1"), (24, "Original from partition p1"); +# State before crash +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb +t2.frm +t2_main_id.tokudb +t2_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION p1 VALUES LESS THAN MAXVALUE ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +21 Original from partition p1 +22 Original from partition p1 +23 Original from partition p1 +24 Original from partition p1 +3 Original from partition p0 +4 Original from partition p0 +ALTER TABLE t1 EXCHANGE PARTITION p0 WITH TABLE t2; +ERROR HY000: Lost connection to MySQL server during query +# State after crash (before recovery) +_sqlx_nnnn_nnnn_main_id.tokudb +_sqlx_nnnn_nnnn_status_id.tokudb +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb +t2.frm +# State after crash recovery +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb +t2.frm +t2_main_id.tokudb +t2_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION p1 VALUES LESS THAN MAXVALUE ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +21 Original from partition p1 +22 Original from partition p1 +23 Original from partition p1 +24 Original from partition p1 +3 Original from partition p0 +4 Original from partition p0 +DROP TABLE t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +SELECT * FROM t2; +a b +5 Original from table t2 +6 Original from table t2 +7 Original from table t2 +8 Original from table t2 +DROP TABLE t2; +SET SESSION debug="-d,exchange_partition_abort_4"; +SET SESSION debug="+d,exchange_partition_abort_5"; +CREATE TABLE t2 (a INT, b VARCHAR(64)) ENGINE = TokuDB; +INSERT INTO t2 VALUES (5, "Original from table t2"), (6, "Original from table t2"), (7, "Original from table t2"), (8, "Original from table t2"); +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +SELECT * FROM t2; +a b +5 Original from table t2 +6 Original from table t2 +7 Original from table t2 +8 Original from table t2 +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = TokuDB +PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10), +PARTITION p1 VALUES LESS THAN MAXVALUE); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"), (21, "Original from partition p1"), (22, "Original from partition p1"), (23, "Original from partition p1"), (24, "Original from partition p1"); +# State before crash +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb +t2.frm +t2_main_id.tokudb +t2_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION p1 VALUES LESS THAN MAXVALUE ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +21 Original from partition p1 +22 Original from partition p1 +23 Original from partition p1 +24 Original from partition p1 +3 Original from partition p0 +4 Original from partition p0 +ALTER TABLE t1 EXCHANGE PARTITION p0 WITH TABLE t2; +ERROR HY000: Lost connection to MySQL server during query +# State after crash (before recovery) +_sqlx_nnnn_nnnn_main_id.tokudb +_sqlx_nnnn_nnnn_status_id.tokudb +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb +t2.frm +# State after crash recovery +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb +t2.frm +t2_main_id.tokudb +t2_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION p1 VALUES LESS THAN MAXVALUE ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +21 Original from partition p1 +22 Original from partition p1 +23 Original from partition p1 +24 Original from partition p1 +3 Original from partition p0 +4 Original from partition p0 +DROP TABLE t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +SELECT * FROM t2; +a b +5 Original from table t2 +6 Original from table t2 +7 Original from table t2 +8 Original from table t2 +DROP TABLE t2; +SET SESSION debug="-d,exchange_partition_abort_5"; +SET SESSION debug="+d,exchange_partition_abort_6"; +CREATE TABLE t2 (a INT, b VARCHAR(64)) ENGINE = TokuDB; +INSERT INTO t2 VALUES (5, "Original from table t2"), (6, "Original from table t2"), (7, "Original from table t2"), (8, "Original from table t2"); +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +SELECT * FROM t2; +a b +5 Original from table t2 +6 Original from table t2 +7 Original from table t2 +8 Original from table t2 +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = TokuDB +PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10), +PARTITION p1 VALUES LESS THAN MAXVALUE); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"), (21, "Original from partition p1"), (22, "Original from partition p1"), (23, "Original from partition p1"), (24, "Original from partition p1"); +# State before crash +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb +t2.frm +t2_main_id.tokudb +t2_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION p1 VALUES LESS THAN MAXVALUE ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +21 Original from partition p1 +22 Original from partition p1 +23 Original from partition p1 +24 Original from partition p1 +3 Original from partition p0 +4 Original from partition p0 +ALTER TABLE t1 EXCHANGE PARTITION p0 WITH TABLE t2; +ERROR HY000: Lost connection to MySQL server during query +# State after crash (before recovery) +_sqlx_nnnn_nnnn_main_id.tokudb +_sqlx_nnnn_nnnn_status_id.tokudb +t1.frm +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb +t2.frm +t2_main_id.tokudb +t2_status_id.tokudb +# State after crash recovery +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb +t2.frm +t2_main_id.tokudb +t2_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION p1 VALUES LESS THAN MAXVALUE ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +21 Original from partition p1 +22 Original from partition p1 +23 Original from partition p1 +24 Original from partition p1 +3 Original from partition p0 +4 Original from partition p0 +DROP TABLE t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +SELECT * FROM t2; +a b +5 Original from table t2 +6 Original from table t2 +7 Original from table t2 +8 Original from table t2 +DROP TABLE t2; +SET SESSION debug="-d,exchange_partition_abort_6"; +SET SESSION debug="+d,exchange_partition_abort_7"; +CREATE TABLE t2 (a INT, b VARCHAR(64)) ENGINE = TokuDB; +INSERT INTO t2 VALUES (5, "Original from table t2"), (6, "Original from table t2"), (7, "Original from table t2"), (8, "Original from table t2"); +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +SELECT * FROM t2; +a b +5 Original from table t2 +6 Original from table t2 +7 Original from table t2 +8 Original from table t2 +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = TokuDB +PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10), +PARTITION p1 VALUES LESS THAN MAXVALUE); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"), (21, "Original from partition p1"), (22, "Original from partition p1"), (23, "Original from partition p1"), (24, "Original from partition p1"); +# State before crash +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb +t2.frm +t2_main_id.tokudb +t2_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION p1 VALUES LESS THAN MAXVALUE ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +21 Original from partition p1 +22 Original from partition p1 +23 Original from partition p1 +24 Original from partition p1 +3 Original from partition p0 +4 Original from partition p0 +ALTER TABLE t1 EXCHANGE PARTITION p0 WITH TABLE t2; +ERROR HY000: Lost connection to MySQL server during query +# State after crash (before recovery) +_sqlx_nnnn_nnnn_main_id.tokudb +_sqlx_nnnn_nnnn_status_id.tokudb +t1.frm +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb +t2.frm +t2_main_id.tokudb +t2_status_id.tokudb +# State after crash recovery +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb +t2.frm +t2_main_id.tokudb +t2_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION p1 VALUES LESS THAN MAXVALUE ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +21 Original from partition p1 +22 Original from partition p1 +23 Original from partition p1 +24 Original from partition p1 +3 Original from partition p0 +4 Original from partition p0 +DROP TABLE t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +SELECT * FROM t2; +a b +5 Original from table t2 +6 Original from table t2 +7 Original from table t2 +8 Original from table t2 +DROP TABLE t2; +SET SESSION debug="-d,exchange_partition_abort_7"; +SET SESSION debug="+d,exchange_partition_abort_8"; +CREATE TABLE t2 (a INT, b VARCHAR(64)) ENGINE = TokuDB; +INSERT INTO t2 VALUES (5, "Original from table t2"), (6, "Original from table t2"), (7, "Original from table t2"), (8, "Original from table t2"); +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +SELECT * FROM t2; +a b +5 Original from table t2 +6 Original from table t2 +7 Original from table t2 +8 Original from table t2 +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = TokuDB +PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10), +PARTITION p1 VALUES LESS THAN MAXVALUE); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"), (21, "Original from partition p1"), (22, "Original from partition p1"), (23, "Original from partition p1"), (24, "Original from partition p1"); +# State before crash +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb +t2.frm +t2_main_id.tokudb +t2_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION p1 VALUES LESS THAN MAXVALUE ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +21 Original from partition p1 +22 Original from partition p1 +23 Original from partition p1 +24 Original from partition p1 +3 Original from partition p0 +4 Original from partition p0 +ALTER TABLE t1 EXCHANGE PARTITION p0 WITH TABLE t2; +ERROR HY000: Lost connection to MySQL server during query +# State after crash (before recovery) +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb +t2.frm +t2_main_id.tokudb +t2_status_id.tokudb +# State after crash recovery +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb +t2.frm +t2_main_id.tokudb +t2_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION p1 VALUES LESS THAN MAXVALUE ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +21 Original from partition p1 +22 Original from partition p1 +23 Original from partition p1 +24 Original from partition p1 +3 Original from partition p0 +4 Original from partition p0 +DROP TABLE t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +SELECT * FROM t2; +a b +5 Original from table t2 +6 Original from table t2 +7 Original from table t2 +8 Original from table t2 +DROP TABLE t2; +SET SESSION debug="-d,exchange_partition_abort_8"; +SET SESSION debug="+d,exchange_partition_abort_9"; +CREATE TABLE t2 (a INT, b VARCHAR(64)) ENGINE = TokuDB; +INSERT INTO t2 VALUES (5, "Original from table t2"), (6, "Original from table t2"), (7, "Original from table t2"), (8, "Original from table t2"); +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +SELECT * FROM t2; +a b +5 Original from table t2 +6 Original from table t2 +7 Original from table t2 +8 Original from table t2 +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = TokuDB +PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10), +PARTITION p1 VALUES LESS THAN MAXVALUE); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"), (21, "Original from partition p1"), (22, "Original from partition p1"), (23, "Original from partition p1"), (24, "Original from partition p1"); +# State before crash +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb +t2.frm +t2_main_id.tokudb +t2_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION p1 VALUES LESS THAN MAXVALUE ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +21 Original from partition p1 +22 Original from partition p1 +23 Original from partition p1 +24 Original from partition p1 +3 Original from partition p0 +4 Original from partition p0 +ALTER TABLE t1 EXCHANGE PARTITION p0 WITH TABLE t2; +ERROR HY000: Lost connection to MySQL server during query +# State after crash (before recovery) +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb +t2.frm +t2_main_id.tokudb +t2_status_id.tokudb +# State after crash recovery +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb +t2.frm +t2_main_id.tokudb +t2_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION p1 VALUES LESS THAN MAXVALUE ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +21 Original from partition p1 +22 Original from partition p1 +23 Original from partition p1 +24 Original from partition p1 +5 Original from table t2 +6 Original from table t2 +7 Original from table t2 +8 Original from table t2 +DROP TABLE t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +SELECT * FROM t2; +a b +1 Original from partition p0 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +DROP TABLE t2; +SET SESSION debug="-d,exchange_partition_abort_9"; +SET SESSION debug="+d,exchange_partition_fail_1"; +CREATE TABLE t2 (a INT, b VARCHAR(64)) ENGINE = TokuDB; +INSERT INTO t2 VALUES (5, "Original from table t2"), (6, "Original from table t2"), (7, "Original from table t2"), (8, "Original from table t2"); +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +SELECT * FROM t2; +a b +5 Original from table t2 +6 Original from table t2 +7 Original from table t2 +8 Original from table t2 +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = TokuDB +PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10), +PARTITION p1 VALUES LESS THAN MAXVALUE); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"), (21, "Original from partition p1"), (22, "Original from partition p1"), (23, "Original from partition p1"), (24, "Original from partition p1"); +# State before failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb +t2.frm +t2_main_id.tokudb +t2_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION p1 VALUES LESS THAN MAXVALUE ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +21 Original from partition p1 +22 Original from partition p1 +23 Original from partition p1 +24 Original from partition p1 +3 Original from partition p0 +4 Original from partition p0 +ALTER TABLE t1 EXCHANGE PARTITION p0 WITH TABLE t2; +ERROR HY000: Error in DDL log +# State after failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb +t2.frm +t2_main_id.tokudb +t2_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION p1 VALUES LESS THAN MAXVALUE ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +21 Original from partition p1 +22 Original from partition p1 +23 Original from partition p1 +24 Original from partition p1 +3 Original from partition p0 +4 Original from partition p0 +DROP TABLE t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +SELECT * FROM t2; +a b +5 Original from table t2 +6 Original from table t2 +7 Original from table t2 +8 Original from table t2 +DROP TABLE t2; +SET SESSION debug="-d,exchange_partition_fail_1"; +SET SESSION debug="+d,exchange_partition_fail_2"; +CREATE TABLE t2 (a INT, b VARCHAR(64)) ENGINE = TokuDB; +INSERT INTO t2 VALUES (5, "Original from table t2"), (6, "Original from table t2"), (7, "Original from table t2"), (8, "Original from table t2"); +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +SELECT * FROM t2; +a b +5 Original from table t2 +6 Original from table t2 +7 Original from table t2 +8 Original from table t2 +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = TokuDB +PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10), +PARTITION p1 VALUES LESS THAN MAXVALUE); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"), (21, "Original from partition p1"), (22, "Original from partition p1"), (23, "Original from partition p1"), (24, "Original from partition p1"); +# State before failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb +t2.frm +t2_main_id.tokudb +t2_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION p1 VALUES LESS THAN MAXVALUE ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +21 Original from partition p1 +22 Original from partition p1 +23 Original from partition p1 +24 Original from partition p1 +3 Original from partition p0 +4 Original from partition p0 +ALTER TABLE t1 EXCHANGE PARTITION p0 WITH TABLE t2; +ERROR HY000: Error in DDL log +# State after failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb +t2.frm +t2_main_id.tokudb +t2_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION p1 VALUES LESS THAN MAXVALUE ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +21 Original from partition p1 +22 Original from partition p1 +23 Original from partition p1 +24 Original from partition p1 +3 Original from partition p0 +4 Original from partition p0 +DROP TABLE t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +SELECT * FROM t2; +a b +5 Original from table t2 +6 Original from table t2 +7 Original from table t2 +8 Original from table t2 +DROP TABLE t2; +SET SESSION debug="-d,exchange_partition_fail_2"; +SET SESSION debug="+d,exchange_partition_fail_3"; +CREATE TABLE t2 (a INT, b VARCHAR(64)) ENGINE = TokuDB; +INSERT INTO t2 VALUES (5, "Original from table t2"), (6, "Original from table t2"), (7, "Original from table t2"), (8, "Original from table t2"); +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +SELECT * FROM t2; +a b +5 Original from table t2 +6 Original from table t2 +7 Original from table t2 +8 Original from table t2 +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = TokuDB +PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10), +PARTITION p1 VALUES LESS THAN MAXVALUE); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"), (21, "Original from partition p1"), (22, "Original from partition p1"), (23, "Original from partition p1"), (24, "Original from partition p1"); +# State before failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb +t2.frm +t2_main_id.tokudb +t2_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION p1 VALUES LESS THAN MAXVALUE ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +21 Original from partition p1 +22 Original from partition p1 +23 Original from partition p1 +24 Original from partition p1 +3 Original from partition p0 +4 Original from partition p0 +ALTER TABLE t1 EXCHANGE PARTITION p0 WITH TABLE t2; +ERROR HY000: Error on rename of './test/t2' to './test/#sqlx-nnnn_nnnn' (errno: 0 - n/a) +# State after failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb +t2.frm +t2_main_id.tokudb +t2_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION p1 VALUES LESS THAN MAXVALUE ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +21 Original from partition p1 +22 Original from partition p1 +23 Original from partition p1 +24 Original from partition p1 +3 Original from partition p0 +4 Original from partition p0 +DROP TABLE t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +SELECT * FROM t2; +a b +5 Original from table t2 +6 Original from table t2 +7 Original from table t2 +8 Original from table t2 +DROP TABLE t2; +SET SESSION debug="-d,exchange_partition_fail_3"; +SET SESSION debug="+d,exchange_partition_fail_4"; +CREATE TABLE t2 (a INT, b VARCHAR(64)) ENGINE = TokuDB; +INSERT INTO t2 VALUES (5, "Original from table t2"), (6, "Original from table t2"), (7, "Original from table t2"), (8, "Original from table t2"); +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +SELECT * FROM t2; +a b +5 Original from table t2 +6 Original from table t2 +7 Original from table t2 +8 Original from table t2 +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = TokuDB +PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10), +PARTITION p1 VALUES LESS THAN MAXVALUE); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"), (21, "Original from partition p1"), (22, "Original from partition p1"), (23, "Original from partition p1"), (24, "Original from partition p1"); +# State before failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb +t2.frm +t2_main_id.tokudb +t2_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION p1 VALUES LESS THAN MAXVALUE ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +21 Original from partition p1 +22 Original from partition p1 +23 Original from partition p1 +24 Original from partition p1 +3 Original from partition p0 +4 Original from partition p0 +ALTER TABLE t1 EXCHANGE PARTITION p0 WITH TABLE t2; +ERROR HY000: Error in DDL log +# State after failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb +t2.frm +t2_main_id.tokudb +t2_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION p1 VALUES LESS THAN MAXVALUE ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +21 Original from partition p1 +22 Original from partition p1 +23 Original from partition p1 +24 Original from partition p1 +3 Original from partition p0 +4 Original from partition p0 +DROP TABLE t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +SELECT * FROM t2; +a b +5 Original from table t2 +6 Original from table t2 +7 Original from table t2 +8 Original from table t2 +DROP TABLE t2; +SET SESSION debug="-d,exchange_partition_fail_4"; +SET SESSION debug="+d,exchange_partition_fail_5"; +CREATE TABLE t2 (a INT, b VARCHAR(64)) ENGINE = TokuDB; +INSERT INTO t2 VALUES (5, "Original from table t2"), (6, "Original from table t2"), (7, "Original from table t2"), (8, "Original from table t2"); +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +SELECT * FROM t2; +a b +5 Original from table t2 +6 Original from table t2 +7 Original from table t2 +8 Original from table t2 +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = TokuDB +PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10), +PARTITION p1 VALUES LESS THAN MAXVALUE); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"), (21, "Original from partition p1"), (22, "Original from partition p1"), (23, "Original from partition p1"), (24, "Original from partition p1"); +# State before failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb +t2.frm +t2_main_id.tokudb +t2_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION p1 VALUES LESS THAN MAXVALUE ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +21 Original from partition p1 +22 Original from partition p1 +23 Original from partition p1 +24 Original from partition p1 +3 Original from partition p0 +4 Original from partition p0 +ALTER TABLE t1 EXCHANGE PARTITION p0 WITH TABLE t2; +ERROR HY000: Error on rename of './test/t1#P#p0' to './test/t2' (errno: 0 - n/a) +# State after failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb +t2.frm +t2_main_id.tokudb +t2_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION p1 VALUES LESS THAN MAXVALUE ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +21 Original from partition p1 +22 Original from partition p1 +23 Original from partition p1 +24 Original from partition p1 +3 Original from partition p0 +4 Original from partition p0 +DROP TABLE t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +SELECT * FROM t2; +a b +5 Original from table t2 +6 Original from table t2 +7 Original from table t2 +8 Original from table t2 +DROP TABLE t2; +SET SESSION debug="-d,exchange_partition_fail_5"; +SET SESSION debug="+d,exchange_partition_fail_6"; +CREATE TABLE t2 (a INT, b VARCHAR(64)) ENGINE = TokuDB; +INSERT INTO t2 VALUES (5, "Original from table t2"), (6, "Original from table t2"), (7, "Original from table t2"), (8, "Original from table t2"); +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +SELECT * FROM t2; +a b +5 Original from table t2 +6 Original from table t2 +7 Original from table t2 +8 Original from table t2 +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = TokuDB +PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10), +PARTITION p1 VALUES LESS THAN MAXVALUE); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"), (21, "Original from partition p1"), (22, "Original from partition p1"), (23, "Original from partition p1"), (24, "Original from partition p1"); +# State before failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb +t2.frm +t2_main_id.tokudb +t2_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION p1 VALUES LESS THAN MAXVALUE ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +21 Original from partition p1 +22 Original from partition p1 +23 Original from partition p1 +24 Original from partition p1 +3 Original from partition p0 +4 Original from partition p0 +ALTER TABLE t1 EXCHANGE PARTITION p0 WITH TABLE t2; +ERROR HY000: Error in DDL log +# State after failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb +t2.frm +t2_main_id.tokudb +t2_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION p1 VALUES LESS THAN MAXVALUE ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +21 Original from partition p1 +22 Original from partition p1 +23 Original from partition p1 +24 Original from partition p1 +3 Original from partition p0 +4 Original from partition p0 +DROP TABLE t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +SELECT * FROM t2; +a b +5 Original from table t2 +6 Original from table t2 +7 Original from table t2 +8 Original from table t2 +DROP TABLE t2; +SET SESSION debug="-d,exchange_partition_fail_6"; +SET SESSION debug="+d,exchange_partition_fail_7"; +CREATE TABLE t2 (a INT, b VARCHAR(64)) ENGINE = TokuDB; +INSERT INTO t2 VALUES (5, "Original from table t2"), (6, "Original from table t2"), (7, "Original from table t2"), (8, "Original from table t2"); +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +SELECT * FROM t2; +a b +5 Original from table t2 +6 Original from table t2 +7 Original from table t2 +8 Original from table t2 +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = TokuDB +PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10), +PARTITION p1 VALUES LESS THAN MAXVALUE); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"), (21, "Original from partition p1"), (22, "Original from partition p1"), (23, "Original from partition p1"), (24, "Original from partition p1"); +# State before failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb +t2.frm +t2_main_id.tokudb +t2_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION p1 VALUES LESS THAN MAXVALUE ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +21 Original from partition p1 +22 Original from partition p1 +23 Original from partition p1 +24 Original from partition p1 +3 Original from partition p0 +4 Original from partition p0 +ALTER TABLE t1 EXCHANGE PARTITION p0 WITH TABLE t2; +ERROR HY000: Error on rename of './test/#sqlx-nnnn_nnnn' to './test/t1#P#p0' (errno: 0 - n/a) +# State after failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb +t2.frm +t2_main_id.tokudb +t2_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION p1 VALUES LESS THAN MAXVALUE ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +21 Original from partition p1 +22 Original from partition p1 +23 Original from partition p1 +24 Original from partition p1 +3 Original from partition p0 +4 Original from partition p0 +DROP TABLE t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +SELECT * FROM t2; +a b +5 Original from table t2 +6 Original from table t2 +7 Original from table t2 +8 Original from table t2 +DROP TABLE t2; +SET SESSION debug="-d,exchange_partition_fail_7"; +SET SESSION debug="+d,exchange_partition_fail_8"; +CREATE TABLE t2 (a INT, b VARCHAR(64)) ENGINE = TokuDB; +INSERT INTO t2 VALUES (5, "Original from table t2"), (6, "Original from table t2"), (7, "Original from table t2"), (8, "Original from table t2"); +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +SELECT * FROM t2; +a b +5 Original from table t2 +6 Original from table t2 +7 Original from table t2 +8 Original from table t2 +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = TokuDB +PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10), +PARTITION p1 VALUES LESS THAN MAXVALUE); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"), (21, "Original from partition p1"), (22, "Original from partition p1"), (23, "Original from partition p1"), (24, "Original from partition p1"); +# State before failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb +t2.frm +t2_main_id.tokudb +t2_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION p1 VALUES LESS THAN MAXVALUE ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +21 Original from partition p1 +22 Original from partition p1 +23 Original from partition p1 +24 Original from partition p1 +3 Original from partition p0 +4 Original from partition p0 +ALTER TABLE t1 EXCHANGE PARTITION p0 WITH TABLE t2; +ERROR HY000: Error in DDL log +# State after failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb +t2.frm +t2_main_id.tokudb +t2_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION p1 VALUES LESS THAN MAXVALUE ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +21 Original from partition p1 +22 Original from partition p1 +23 Original from partition p1 +24 Original from partition p1 +3 Original from partition p0 +4 Original from partition p0 +DROP TABLE t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +SELECT * FROM t2; +a b +5 Original from table t2 +6 Original from table t2 +7 Original from table t2 +8 Original from table t2 +DROP TABLE t2; +SET SESSION debug="-d,exchange_partition_fail_8"; +SET SESSION debug="+d,exchange_partition_fail_9"; +CREATE TABLE t2 (a INT, b VARCHAR(64)) ENGINE = TokuDB; +INSERT INTO t2 VALUES (5, "Original from table t2"), (6, "Original from table t2"), (7, "Original from table t2"), (8, "Original from table t2"); +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +SELECT * FROM t2; +a b +5 Original from table t2 +6 Original from table t2 +7 Original from table t2 +8 Original from table t2 +CREATE TABLE t1 (a INT, b VARCHAR(64)) +ENGINE = TokuDB +PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10), +PARTITION p1 VALUES LESS THAN MAXVALUE); +INSERT INTO t1 VALUES (1, "Original from partition p0"), (2, "Original from partition p0"), (3, "Original from partition p0"), (4, "Original from partition p0"), (11, "Original from partition p1"), (12, "Original from partition p1"), (13, "Original from partition p1"), (14, "Original from partition p1"), (21, "Original from partition p1"), (22, "Original from partition p1"), (23, "Original from partition p1"), (24, "Original from partition p1"); +# State before failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb +t2.frm +t2_main_id.tokudb +t2_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION p1 VALUES LESS THAN MAXVALUE ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +1 Original from partition p0 +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +2 Original from partition p0 +21 Original from partition p1 +22 Original from partition p1 +23 Original from partition p1 +24 Original from partition p1 +3 Original from partition p0 +4 Original from partition p0 +ALTER TABLE t1 EXCHANGE PARTITION p0 WITH TABLE t2; +ERROR HY000: Error in DDL log +# State after failure +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb +t2.frm +t2_main_id.tokudb +t2_status_id.tokudb +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION p1 VALUES LESS THAN MAXVALUE ENGINE = TokuDB) */ +SELECT * FROM t1; +a b +11 Original from partition p1 +12 Original from partition p1 +13 Original from partition p1 +14 Original from partition p1 +21 Original from partition p1 +22 Original from partition p1 +23 Original from partition p1 +24 Original from partition p1 +5 Original from table t2 +6 Original from table t2 +7 Original from table t2 +8 Original from table t2 +DROP TABLE t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` int(11) DEFAULT NULL, + `b` varchar(64) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +SELECT * FROM t2; +a b +1 Original from partition p0 +2 Original from partition p0 +3 Original from partition p0 +4 Original from partition p0 +DROP TABLE t2; +SET SESSION debug="-d,exchange_partition_fail_9"; diff --git a/mysql-test/suite/tokudb.parts/r-native/partition_decimal_tokudb.result b/mysql-test/suite/tokudb.parts/r-native/partition_decimal_tokudb.result new file mode 100644 index 000000000000..cc4fe53982eb --- /dev/null +++ b/mysql-test/suite/tokudb.parts/r-native/partition_decimal_tokudb.result @@ -0,0 +1,196 @@ +create table t1 (a decimal(10,4) not null, primary key(a)) engine='TokuDB' +partition by key (a) ( +partition pa1 max_rows=20 min_rows=2, +partition pa2 max_rows=30 min_rows=3, +partition pa3 max_rows=30 min_rows=4, +partition pa4 max_rows=40 min_rows=2); +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` decimal(10,4) NOT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +(PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 ENGINE = TokuDB, + PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 ENGINE = TokuDB, + PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 ENGINE = TokuDB, + PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 ENGINE = TokuDB) */ +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 +-1234.5670 +123456.7899 +-123456.7899 +0.0000 +-999999.9999 +-1.5000 +-1.0000 +1.0000 +1234.5670 +999999.9999 +1.5000 +select * from t1 where a=1234.567; +a +1234.5670 +delete from t1 where a=1234.567; +select * from t1; +a +-1234.5670 +123456.7899 +-123456.7899 +0.0000 +-999999.9999 +-1.5000 +-1.0000 +1.0000 +999999.9999 +1.5000 +drop table t1; +create table t2 (a decimal(18,9) not null, primary key(a)) engine='TokuDB' +partition by key (a) partitions 10; +show create table t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` decimal(18,9) NOT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +PARTITIONS 10 */ +insert into t2 values (999999999.999999999), (-999999999.999999999), (-1.5), (-1), (0), (1.5), (1234.567), (-1234.567); +select * from t2; +a +-1.000000000 +1.500000000 +-999999999.999999999 +-1.500000000 +1234.567000000 +999999999.999999999 +-1234.567000000 +0.000000000 +select * from t2 where a=1234.567; +a +1234.567000000 +delete from t2 where a=1234.567; +select * from t2; +a +-1.000000000 +1.500000000 +-999999999.999999999 +-1.500000000 +999999999.999999999 +-1234.567000000 +0.000000000 +delete from t2; +1024*3 inserts; +select count(*) from t2; +count(*) +3072 +drop table t2; +create table t3 (a decimal(18,9) not null, primary key(a)) engine='TokuDB' +partition by range (floor(a)) subpartition by key (a) subpartitions 2 ( +partition pa2 values less than (2), +partition pa4 values less than (4), +partition pa6 values less than (6), +partition pa8 values less than (8), +partition pa10 values less than (10) +); +show create table t3; +Table Create Table +t3 CREATE TABLE `t3` ( + `a` decimal(18,9) NOT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (floor(a)) +SUBPARTITION BY KEY (a) +SUBPARTITIONS 2 +(PARTITION pa2 VALUES LESS THAN (2) ENGINE = TokuDB, + PARTITION pa4 VALUES LESS THAN (4) ENGINE = TokuDB, + PARTITION pa6 VALUES LESS THAN (6) ENGINE = TokuDB, + PARTITION pa8 VALUES LESS THAN (8) ENGINE = TokuDB, + PARTITION pa10 VALUES LESS THAN (10) ENGINE = TokuDB) */ +9*3 inserts; +insert into t3 values (9); +insert into t3 values (9+0.333333333); +insert into t3 values (9+0.755555555); +insert into t3 values (8); +insert into t3 values (8+0.333333333); +insert into t3 values (8+0.755555555); +insert into t3 values (7); +insert into t3 values (7+0.333333333); +insert into t3 values (7+0.755555555); +insert into t3 values (6); +insert into t3 values (6+0.333333333); +insert into t3 values (6+0.755555555); +insert into t3 values (5); +insert into t3 values (5+0.333333333); +insert into t3 values (5+0.755555555); +insert into t3 values (4); +insert into t3 values (4+0.333333333); +insert into t3 values (4+0.755555555); +insert into t3 values (3); +insert into t3 values (3+0.333333333); +insert into t3 values (3+0.755555555); +insert into t3 values (2); +insert into t3 values (2+0.333333333); +insert into t3 values (2+0.755555555); +insert into t3 values (1); +insert into t3 values (1+0.333333333); +insert into t3 values (1+0.755555555); +select count(*) from t3; +count(*) +27 +drop table t3; +create table t4 (a decimal(18,9) not null, primary key(a)) engine='TokuDB' +partition by list (ceiling(a)) subpartition by key (a) subpartitions 2 ( +partition pa2 values in (1,2), +partition pa4 values in (3,4), +partition pa6 values in (5,6), +partition pa8 values in (7,8), +partition pa10 values in (9,10) +); +show create table t4; +Table Create Table +t4 CREATE TABLE `t4` ( + `a` decimal(18,9) NOT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (ceiling(a)) +SUBPARTITION BY KEY (a) +SUBPARTITIONS 2 +(PARTITION pa2 VALUES IN (1,2) ENGINE = TokuDB, + PARTITION pa4 VALUES IN (3,4) ENGINE = TokuDB, + PARTITION pa6 VALUES IN (5,6) ENGINE = TokuDB, + PARTITION pa8 VALUES IN (7,8) ENGINE = TokuDB, + PARTITION pa10 VALUES IN (9,10) ENGINE = TokuDB) */ +9*3 inserts; +insert into t4 values (9); +insert into t4 values (9+0.333333333); +insert into t4 values (9+0.755555555); +insert into t4 values (8); +insert into t4 values (8+0.333333333); +insert into t4 values (8+0.755555555); +insert into t4 values (7); +insert into t4 values (7+0.333333333); +insert into t4 values (7+0.755555555); +insert into t4 values (6); +insert into t4 values (6+0.333333333); +insert into t4 values (6+0.755555555); +insert into t4 values (5); +insert into t4 values (5+0.333333333); +insert into t4 values (5+0.755555555); +insert into t4 values (4); +insert into t4 values (4+0.333333333); +insert into t4 values (4+0.755555555); +insert into t4 values (3); +insert into t4 values (3+0.333333333); +insert into t4 values (3+0.755555555); +insert into t4 values (2); +insert into t4 values (2+0.333333333); +insert into t4 values (2+0.755555555); +insert into t4 values (1); +insert into t4 values (1+0.333333333); +insert into t4 values (1+0.755555555); +select count(*) from t4; +count(*) +27 +drop table t4; diff --git a/mysql-test/suite/tokudb.parts/r-native/partition_engine_tokudb.result b/mysql-test/suite/tokudb.parts/r-native/partition_engine_tokudb.result new file mode 100644 index 000000000000..04c1402aa7d1 --- /dev/null +++ b/mysql-test/suite/tokudb.parts/r-native/partition_engine_tokudb.result @@ -0,0 +1,5254 @@ +SET @max_row = 20; +SET @@session.default_storage_engine = 'TokuDB'; + +#------------------------------------------------------------------------ +# 0. Setting of auxiliary variables + Creation of an auxiliary tables +# needed in many testcases +#------------------------------------------------------------------------ +SELECT @max_row DIV 2 INTO @max_row_div2; +SELECT @max_row DIV 3 INTO @max_row_div3; +SELECT @max_row DIV 4 INTO @max_row_div4; +SET @max_int_4 = 2147483647; +DROP TABLE IF EXISTS t0_template; +CREATE TABLE t0_template ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) , +PRIMARY KEY(f_int1)) +ENGINE = MEMORY; +# Logging of INSERTs into t0_template suppressed +DROP TABLE IF EXISTS t0_definition; +CREATE TABLE t0_definition ( +state CHAR(3), +create_command VARBINARY(5000), +file_list VARBINARY(10000), +PRIMARY KEY (state) +) ENGINE = MEMORY; +DROP TABLE IF EXISTS t0_aux; +CREATE TABLE t0_aux ( f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) ) +ENGINE = MEMORY; +SET AUTOCOMMIT= 1; +SET @@session.sql_mode= ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +# End of basic preparations needed for all tests +#----------------------------------------------- + +#======================================================================== +# 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; +#------------------------------------------------------------------------ +# 1 Assignment of storage engine just after column list only +#------------------------------------------------------------------------ +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +) ENGINE = 'TokuDB' +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1) +PARTITIONS 2 */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +#------------------------------------------------------------------------ +# 2 Assignment of storage engine just after partition or subpartition +# name only +#------------------------------------------------------------------------ +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) +( PARTITION part1 STORAGE ENGINE = 'TokuDB', +PARTITION part2 STORAGE ENGINE = 'TokuDB' +); +INSERT INTO t1(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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1) +(PARTITION part1 ENGINE = TokuDB, + PARTITION part2 ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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) +( PARTITION part1 VALUES LESS THAN (10) +(SUBPARTITION subpart11 STORAGE ENGINE = 'TokuDB', +SUBPARTITION subpart12 STORAGE ENGINE = 'TokuDB'), +PARTITION part2 VALUES LESS THAN (2147483646) +(SUBPARTITION subpart21 STORAGE ENGINE = 'TokuDB', +SUBPARTITION subpart22 STORAGE ENGINE = 'TokuDB') +); +INSERT INTO t1(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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY HASH (f_int1) +(PARTITION part1 VALUES LESS THAN (10) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part2 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +#------------------------------------------------------------------------ +# 3 Some but not all named partitions or subpartitions get a storage +# engine assigned +#------------------------------------------------------------------------ +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) +( PARTITION part1 STORAGE ENGINE = 'TokuDB', +PARTITION part2 +); +ERROR HY000: The mix of handlers in the partitions is not allowed in this version of MySQL +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) +( PARTITION part1 , +PARTITION part2 STORAGE ENGINE = 'TokuDB' +); +ERROR HY000: The mix of handlers in the partitions is not allowed in this version of MySQL +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) +( PARTITION part1 VALUES LESS THAN (10) +(SUBPARTITION subpart11, +SUBPARTITION subpart12 STORAGE ENGINE = 'TokuDB'), +PARTITION part2 VALUES LESS THAN (2147483646) +(SUBPARTITION subpart21 STORAGE ENGINE = 'TokuDB', +SUBPARTITION subpart22 STORAGE ENGINE = 'TokuDB') +); +ERROR HY000: The mix of handlers in the partitions is not allowed in this version of MySQL +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) +( PARTITION part1 VALUES LESS THAN (10) +(SUBPARTITION subpart11 STORAGE ENGINE = 'TokuDB', +SUBPARTITION subpart12 STORAGE ENGINE = 'TokuDB'), +PARTITION part2 VALUES LESS THAN (2147483646) +(SUBPARTITION subpart21, +SUBPARTITION subpart22 ) +); +ERROR HY000: The mix of handlers in the partitions is not allowed in this version of MySQL +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +) +ENGINE = 'TokuDB' +PARTITION BY RANGE(f_int1) +SUBPARTITION BY HASH(f_int1) +( PARTITION part1 VALUES LESS THAN (10) +(SUBPARTITION subpart11 STORAGE ENGINE = 'TokuDB', +SUBPARTITION subpart12 STORAGE ENGINE = 'TokuDB'), +PARTITION part2 VALUES LESS THAN (2147483646) +(SUBPARTITION subpart21, +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY HASH (f_int1) +(PARTITION part1 VALUES LESS THAN (10) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part2 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +#------------------------------------------------------------------------ +# 4 Storage engine assignment after partition name + after name of +# subpartitions belonging to another partition +#------------------------------------------------------------------------ +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) +( PARTITION part1 VALUES LESS THAN (10) +(SUBPARTITION subpart11, +SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (2147483646) +(SUBPARTITION subpart21 STORAGE ENGINE = 'TokuDB', +SUBPARTITION subpart22 STORAGE ENGINE = 'TokuDB') +); +ERROR HY000: The mix of handlers in the partitions is not allowed in this version of MySQL +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +) +ENGINE = 'TokuDB' +PARTITION BY RANGE(f_int1) +SUBPARTITION BY HASH(f_int1) +( PARTITION part1 VALUES LESS THAN (10) ENGINE = 'TokuDB' +(SUBPARTITION subpart11, +SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (2147483646) +(SUBPARTITION subpart21, +SUBPARTITION subpart22 STORAGE ENGINE = 'TokuDB') +); +DROP TABLE t1; +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) +( PARTITION part1 VALUES LESS THAN (10) ENGINE = 'TokuDB' +(SUBPARTITION subpart11, +SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (2147483646) +(SUBPARTITION subpart21 STORAGE ENGINE = 'TokuDB', +SUBPARTITION subpart22 STORAGE ENGINE = 'TokuDB') +); +INSERT INTO t1(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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY HASH (f_int1) +(PARTITION part1 VALUES LESS THAN (10) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part2 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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) +( PARTITION part1 VALUES LESS THAN (10) +(SUBPARTITION subpart11 STORAGE ENGINE = 'TokuDB', +SUBPARTITION subpart12 STORAGE ENGINE = 'TokuDB'), +PARTITION part2 VALUES LESS THAN (2147483646) ENGINE = 'TokuDB' +(SUBPARTITION subpart21 ENGINE = 'TokuDB', +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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY HASH (f_int1) +(PARTITION part1 VALUES LESS THAN (10) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part2 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +#------------------------------------------------------------------------ +# 5 Precedence of storage engine assignments (if there is any) +#------------------------------------------------------------------------ +# 5.1 Storage engine assignment after column list + after partition +# or subpartition name +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +) ENGINE = 'TokuDB' +PARTITION BY HASH(f_int1) +( PARTITION part1 STORAGE ENGINE = 'TokuDB', +PARTITION part2 STORAGE ENGINE = 'TokuDB' +); +INSERT INTO t1(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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1) +(PARTITION part1 ENGINE = TokuDB, + PARTITION part2 ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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) +( PARTITION part1 VALUES LESS THAN (10) +(SUBPARTITION subpart11 STORAGE ENGINE = 'TokuDB', +SUBPARTITION subpart12 STORAGE ENGINE = 'TokuDB'), +PARTITION part2 VALUES LESS THAN (2147483646) +(SUBPARTITION subpart21 STORAGE ENGINE = 'TokuDB', +SUBPARTITION subpart22 STORAGE ENGINE = 'TokuDB') +); +INSERT INTO t1(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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY HASH (f_int1) +(PARTITION part1 VALUES LESS THAN (10) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part2 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +# 6.2 Storage engine assignment after partition name + after +# subpartition name +# in partition part + in sub partition part +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) +( PARTITION part1 VALUES LESS THAN (10) STORAGE ENGINE = 'TokuDB' +(SUBPARTITION subpart11 STORAGE ENGINE = 'TokuDB', +SUBPARTITION subpart12 STORAGE ENGINE = 'TokuDB'), +PARTITION part2 VALUES LESS THAN (2147483646) +(SUBPARTITION subpart21 STORAGE ENGINE = 'TokuDB', +SUBPARTITION subpart22 STORAGE ENGINE = 'TokuDB') +); +INSERT INTO t1(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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY HASH (f_int1) +(PARTITION part1 VALUES LESS THAN (10) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part2 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +#------------------------------------------------------------------------ +# 6 Session default engine differs from engine used within create table +#------------------------------------------------------------------------ +SET SESSION default_storage_engine='MEMORY'; +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) ( PARTITION part1 ENGINE = 'TokuDB'); +INSERT INTO t1(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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1) +(PARTITION part1 ENGINE = TokuDB) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; + +# check single-7 success: 1 +DELETE FROM t1 WHERE f_charbig = '#2147483647##'; +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +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) +( PARTITION part1 VALUES LESS THAN (1000) +(SUBPARTITION subpart11 STORAGE ENGINE = 'TokuDB', +SUBPARTITION subpart12 STORAGE ENGINE = 'TokuDB')); +INSERT INTO t1(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 (inc/partition_check.inc) +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY HASH (f_int1) +(PARTITION part1 VALUES LESS THAN (1000) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB)) */ + +# check prerequisites-1 success: 1 +# check COUNT(*) success: 1 +# check MIN/MAX(f_int1) success: 1 +# check MIN/MAX(f_int2) success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'delete me' FROM t0_template +WHERE f_int1 IN (2,3); +# check prerequisites-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'delete me'; +# INFO: Neither f_int1 nor f_int2 nor (f_int1,f_int2) is UNIQUE +# check read via f_int1 success: 1 +# check read via f_int2 success: 1 + +# check multiple-1 success: 1 +DELETE FROM t1 WHERE MOD(f_int1,3) = 0; + +# check multiple-2 success: 1 +INSERT INTO t1 SELECT * FROM t0_template +WHERE MOD(f_int1,3) = 0; + +# check multiple-3 success: 1 +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 multiple-4 success: 1 +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 multiple-5 success: 1 +SELECT MIN(f_int1) - 1 INTO @cur_value FROM t1; +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 single-1 success: 1 +SELECT MAX(f_int1) + 1 INTO @cur_value FROM t1; +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 single-2 success: 1 +SELECT MIN(f_int1) INTO @cur_value1 FROM t1; +SELECT MAX(f_int1) + 1 INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value2 +WHERE f_int1 = @cur_value1 AND f_charbig = '#SINGLE#'; + +# check single-3 success: 1 +SET @cur_value1= -1; +SELECT MAX(f_int1) INTO @cur_value2 FROM t1; +UPDATE t1 SET f_int1 = @cur_value1 +WHERE f_int1 = @cur_value2 AND f_charbig = '#SINGLE#'; + +# check single-4 success: 1 +SELECT MAX(f_int1) INTO @cur_value FROM t1; +DELETE FROM t1 WHERE f_int1 = @cur_value AND f_charbig = '#SINGLE#'; + +# check single-5 success: 1 +DELETE FROM t1 WHERE f_int1 = -1 AND f_charbig = '#SINGLE#'; + +# check single-6 success: 1 +INSERT INTO t1 SET f_int1 = @max_int_4 , f_int2 = @max_int_4, f_charbig = '#2147483647##'; +ERROR HY000: Table has no partition for value 2147483647 +DELETE FROM t1 WHERE f_int1 IS NULL OR f_int1 = 0; +INSERT t1 SET f_int1 = 0 , f_int2 = 0, +f_char1 = CAST(0 AS CHAR), f_char2 = CAST(0 AS CHAR), +f_charbig = '#NULL#'; +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#'; +# check null success: 1 + +# check null-1 success: 1 +UPDATE t1 SET f_int1 = -@max_row +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 null-2 success: 1 +UPDATE t1 SET f_int1 = NULL +WHERE f_int1 = -@max_row 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 null-3 success: 1 +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 null-4 success: 1 +DELETE FROM t1 +WHERE f_int1 = 0 AND f_int2 = 0 +AND f_char1 = CAST(0 AS CHAR) AND f_char2 = CAST(0 AS CHAR) +AND f_charbig = '#NULL#'; +SET AUTOCOMMIT= 0; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-1 success: 1 +COMMIT WORK; + +# check transactions-2 success: 1 +ROLLBACK WORK; + +# check transactions-3 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +ROLLBACK WORK; + +# check transactions-4 success: 1 +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, '', '', 'was inserted' +FROM t0_template source_tab +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; + +# check transactions-5 success: 1 +ROLLBACK WORK; + +# check transactions-6 success: 1 +# INFO: Storage engine used for t1 seems to be transactional. +COMMIT; + +# check transactions-7 success: 1 +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +SET @@session.sql_mode = 'traditional'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SELECT @max_row_div2 + @max_row_div4 - @max_row_div4 + 1 INTO @exp_inserted_rows; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT IF(f_int1 = @max_row_div2,f_int1 / 0,f_int1),f_int1, +'', '', 'was inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div4 AND @max_row_div2 + @max_row_div4; +ERROR 22012: Division by 0 +COMMIT; + +# check transactions-8 success: 1 +# INFO: Storage engine used for t1 seems to be able to revert +# changes made by the failing statement. +SET @@session.sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +SET AUTOCOMMIT= 1; +DELETE FROM t1 WHERE f_charbig = 'was inserted'; +COMMIT WORK; +UPDATE t1 SET f_charbig = REPEAT('b', 1000); + +# check special-1 success: 1 +UPDATE t1 SET f_charbig = ''; + +# check special-2 success: 1 +UPDATE t1 SET f_charbig = CONCAT('===',CAST(f_int1 AS CHAR),'==='); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT f_int1,f_int2,f_char1,f_char2,'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-1 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER INSERT ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +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; + +# check trigger-2 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-3 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-4 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = new.f_int1; +END| +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)); + +# check trigger-5 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER UPDATE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +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)); + +# check trigger-6 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 BEFORE DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-7 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +INSERT INTO t0_aux(f_int1,f_int2,f_char1,f_char2,f_charbig) +SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR), +'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_1 AFTER DELETE ON t0_aux FOR EACH ROW +BEGIN +UPDATE t1 SET f_int1 = -f_int1, f_int2 = -f_int2, +f_charbig = 'updated by trigger' + WHERE f_int1 = - old.f_int1; +END| +DELETE FROM t0_aux +WHERE f_int1 IN (- (@max_row_div2 - 1),- @max_row_div2,- (@max_row_div2 + 1)); + +# check trigger-8 success: 1 +DROP TRIGGER trg_1; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = 'just inserted' + WHERE f_int1 <> CAST(f_char1 AS SIGNED INT); +DELETE FROM t0_aux +WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +DELETE FROM t1 +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1; +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = old.f_int1 + @max_row, +new.f_int2 = old.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-9 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_2 BEFORE UPDATE ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = new.f_int1 + @max_row, +new.f_int2 = new.f_int2 - @max_row, +new.f_charbig = '####updated per update trigger####'; +END| +UPDATE t1 +SET f_int1 = f_int1 + @max_row, f_int2 = f_int2 - @max_row, +f_charbig = '####updated per update statement itself####'; + +# check trigger-10 success: 1 +DROP TRIGGER trg_2; +UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT), +f_int2 = CAST(f_char1 AS SIGNED INT), +f_charbig = CONCAT('===',f_char1,'==='); +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_int1, f_int2, f_char1, f_char2, f_charbig) +SELECT f_int1, f_int1, CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-11 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +CREATE TRIGGER trg_3 BEFORE INSERT ON t1 FOR EACH ROW +BEGIN +SET new.f_int1 = @my_max1 + @counter, +new.f_int2 = @my_min2 - @counter, +new.f_charbig = '####updated per insert trigger####'; +SET @counter = @counter + 1; +END| +SET @counter = 1; +SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1; +INSERT INTO t1 (f_char1, f_char2, f_charbig) +SELECT CAST(f_int1 AS CHAR), +CAST(f_int1 AS CHAR), 'just inserted' FROM t0_template +WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1 +ORDER BY f_int1; +DROP TRIGGER trg_3; + +# check trigger-12 success: 1 +DELETE FROM t1 +WHERE f_int1 <> CAST(f_char1 AS SIGNED INT) +AND f_int2 <> CAST(f_char1 AS SIGNED INT) +AND f_charbig = '####updated per insert trigger####'; +ANALYZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +CHECKSUM TABLE t1 EXTENDED; +Table Checksum +test.t1 +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize status OK +# check layout success: 1 +REPAIR TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 repair status OK +# check layout success: 1 +TRUNCATE t1; + +# check TRUNCATE success: 1 +# check layout success: 1 +# End usability test (inc/partition_check.inc) +DROP TABLE t1; +SET SESSION default_storage_engine='TokuDB'; +DROP VIEW IF EXISTS v1; +DROP TABLE IF EXISTS t1; +DROP TABLE IF EXISTS t0_aux; +DROP TABLE IF EXISTS t0_definition; +DROP TABLE IF EXISTS t0_template; diff --git a/mysql-test/suite/tokudb.parts/r-native/partition_exch_myisam_tokudb.result b/mysql-test/suite/tokudb.parts/r-native/partition_exch_myisam_tokudb.result new file mode 100644 index 000000000000..0659b907c2d4 --- /dev/null +++ b/mysql-test/suite/tokudb.parts/r-native/partition_exch_myisam_tokudb.result @@ -0,0 +1,14 @@ +ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t_10; +ERROR HY000: The mix of handlers in the partitions is not allowed in this version of MySQL +DROP TABLE IF EXISTS t_10; +DROP TABLE IF EXISTS t_100; +DROP TABLE IF EXISTS t_1000; +DROP TABLE IF EXISTS tp; +DROP TABLE IF EXISTS tsp; +DROP TABLE IF EXISTS tsp_00; +DROP TABLE IF EXISTS tsp_01; +DROP TABLE IF EXISTS tsp_02; +DROP TABLE IF EXISTS tsp_03; +DROP TABLE IF EXISTS tsp_04; +DROP TABLE IF EXISTS t_empty; +DROP TABLE IF EXISTS t_null; diff --git a/mysql-test/suite/tokudb.parts/r-native/partition_exch_qa_1_tokudb.result b/mysql-test/suite/tokudb.parts/r-native/partition_exch_qa_1_tokudb.result new file mode 100644 index 000000000000..78005c5abb0f --- /dev/null +++ b/mysql-test/suite/tokudb.parts/r-native/partition_exch_qa_1_tokudb.result @@ -0,0 +1,171 @@ +use test; +SELECT * FROM t_10; +a b +1 One +3 Three +5 Five +9 Nine +SELECT * FROM t_100; +a b +11 Eleven +13 Thirdteen +15 Fifeteen +19 Nineteen +91 Ninety-one +93 Ninety-three +95 Ninety-five +99 Ninety-nine +SELECT * FROM t_1000; +a b +111 Hundred elven +113 Hundred thirdteen +115 Hundred fiveteen +119 Hundred nineteen +131 Hundred thirty-one +133 Hundred thirty-three +135 Hundred thirty-five +139 Hundred thirty-nine +151 Hundred fifty-one +153 Hundred fifty-three +155 Hundred fity-five +159 Hundred fifty-nine +191 Hundred ninety-one +193 Hundred ninety-three +195 Hundred ninety-five +199 Hundred ninety-nine +SELECT * FROM tp; +a b +112 Hundred twelve +114 Hundred fourteen +116 Hundred sixteen +118 Hundred eightteen +12 twelve +122 Hundred twenty-two +124 Hundred twenty-four +126 Hundred twenty-six +128 Hundred twenty-eight +14 Fourteen +16 Sixteen +162 Hundred sixty-two +164 Hundred sixty-four +166 Hundred sixty-six +168 Hundred sixty-eight +18 Eightteen +182 Hundred eighty-two +184 Hundred eighty-four +186 Hundred eighty-six +188 Hundred eighty-eight +2 Two +4 Four +6 Six +8 Eight +SELECT * FROM tsp; +a b +112 Hundred twelve +114 Hundred fourteen +116 Hundred sixteen +118 Hundred eightteen +12 twelve +122 Hundred twenty-two +124 Hundred twenty-four +126 Hundred twenty-six +128 Hundred twenty-eight +14 Fourteen +16 Sixteen +162 Hundred sixty-two +164 Hundred sixty-four +166 Hundred sixty-six +168 Hundred sixty-eight +18 Eightteen +182 Hundred eight-two +184 Hundred eighty-four +186 Hundred eighty-six +188 Hundred eighty-eight +2 Two +4 Four +6 Six +8 Eight +SELECT * FROM tsp_00; +a b +5 Five +SELECT * FROM tsp_01; +a b +1 One +SELECT * FROM tsp_02; +a b +SELECT * FROM tsp_03; +a b +3 Three +SELECT * FROM tsp_04; +a b +9 Nine +CREATE INDEX id_t_10_b USING BTREE ON t_10 (b); +ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t_10; +ERROR HY000: Tables have different definitions +CREATE INDEX id_tp_b USING BTREE ON tp (b); +ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t_10; +ERROR HY000: Tables have different definitions +DROP INDEX id_t_10_b ON t_10; +DROP INDEX id_tp_b ON tp; +ALTER TABLE t_10 ADD UNIQUE INDEX USING BTREE (a); +ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t_10; +ERROR HY000: Tables have different definitions +ALTER TABLE tp ADD UNIQUE INDEX USING BTREE (a); +ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t_10; +show create table t_10; +Table Create Table +t_10 CREATE TABLE `t_10` ( + `a` int(11) NOT NULL, + `b` varchar(55) DEFAULT NULL, + PRIMARY KEY (`a`), + UNIQUE KEY `a` (`a`) USING BTREE +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +show create table tp ; +Table Create Table +tp CREATE TABLE `tp` ( + `a` int(11) NOT NULL, + `b` varchar(55) DEFAULT NULL, + PRIMARY KEY (`a`), + UNIQUE KEY `a` (`a`) USING BTREE +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION p1 VALUES LESS THAN (100) ENGINE = TokuDB, + PARTITION p2 VALUES LESS THAN (1000) ENGINE = TokuDB) */ +ALTER TABLE tp DROP INDEX a; +ALTER TABLE t_10 DROP INDEX a; +ALTER TABLE tp ADD UNIQUE INDEX USING BTREE (a,b); +ALTER TABLE t_10 ADD UNIQUE INDEX USING BTREE (a,b); +ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t_10; +show create table t_10; +Table Create Table +t_10 CREATE TABLE `t_10` ( + `a` int(11) NOT NULL, + `b` varchar(55) DEFAULT NULL, + PRIMARY KEY (`a`), + UNIQUE KEY `a` (`a`,`b`) USING BTREE +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +show create table tp ; +Table Create Table +tp CREATE TABLE `tp` ( + `a` int(11) NOT NULL, + `b` varchar(55) DEFAULT NULL, + PRIMARY KEY (`a`), + UNIQUE KEY `a` (`a`,`b`) USING BTREE +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION p1 VALUES LESS THAN (100) ENGINE = TokuDB, + PARTITION p2 VALUES LESS THAN (1000) ENGINE = TokuDB) */ +DROP TABLE IF EXISTS t_10; +DROP TABLE IF EXISTS t_100; +DROP TABLE IF EXISTS t_1000; +DROP TABLE IF EXISTS tp; +DROP TABLE IF EXISTS tsp; +DROP TABLE IF EXISTS tsp_00; +DROP TABLE IF EXISTS tsp_01; +DROP TABLE IF EXISTS tsp_02; +DROP TABLE IF EXISTS tsp_03; +DROP TABLE IF EXISTS tsp_04; +DROP TABLE IF EXISTS t_empty; +DROP TABLE IF EXISTS t_null; diff --git a/mysql-test/suite/tokudb.parts/r-native/partition_exch_qa_4_tokudb.result b/mysql-test/suite/tokudb.parts/r-native/partition_exch_qa_4_tokudb.result new file mode 100644 index 000000000000..35f3499fce7c --- /dev/null +++ b/mysql-test/suite/tokudb.parts/r-native/partition_exch_qa_4_tokudb.result @@ -0,0 +1,76 @@ +CREATE DATABASE test_2; +USE test; +USE test; +ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE test_2.t_10; +SELECT * FROM test_2.t_10; +a b +2 Two +4 Four +6 Six +8 Eight +SELECT * FROM tp WHERE a BETWEEN 0 AND 10; +a b +1 One +3 Three +5 Five +9 Nine +ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE test_2.t_10; +SELECT * FROM test_2.t_10; +a b +1 One +3 Three +5 Five +9 Nine +SELECT * FROM tp WHERE a BETWEEN 0 AND 10; +a b +2 Two +4 Four +6 Six +8 Eight +ALTER TABLE tsp EXCHANGE PARTITION sp00 WITH TABLE test_2.tsp_00; +SELECT * FROM test_2.tsp_00; +a b +SELECT * FROM tsp WHERE a BETWEEN 0 AND 10; +a b +2 Two +4 Four +5 Five +6 Six +8 Eight +ALTER TABLE tsp EXCHANGE PARTITION sp00 WITH TABLE test_2.tsp_00; +SELECT * FROM test_2.tsp_00; +a b +5 Five +SELECT * FROM tsp WHERE a BETWEEN 0 AND 10; +a b +2 Two +4 Four +6 Six +8 Eight +DROP TABLE IF EXISTS t_10; +DROP TABLE IF EXISTS t_100; +DROP TABLE IF EXISTS t_1000; +DROP TABLE IF EXISTS tp; +DROP TABLE IF EXISTS tsp; +DROP TABLE IF EXISTS tsp_00; +DROP TABLE IF EXISTS tsp_01; +DROP TABLE IF EXISTS tsp_02; +DROP TABLE IF EXISTS tsp_03; +DROP TABLE IF EXISTS tsp_04; +DROP TABLE IF EXISTS t_empty; +DROP TABLE IF EXISTS t_null; +USE test_2; +DROP TABLE IF EXISTS t_10; +DROP TABLE IF EXISTS t_100; +DROP TABLE IF EXISTS t_1000; +DROP TABLE IF EXISTS tp; +DROP TABLE IF EXISTS tsp; +DROP TABLE IF EXISTS tsp_00; +DROP TABLE IF EXISTS tsp_01; +DROP TABLE IF EXISTS tsp_02; +DROP TABLE IF EXISTS tsp_03; +DROP TABLE IF EXISTS tsp_04; +DROP TABLE IF EXISTS t_empty; +DROP TABLE IF EXISTS t_null; +USE test; +DROP DATABASE test_2; diff --git a/mysql-test/suite/tokudb.parts/r-native/partition_exch_qa_5_tokudb.result b/mysql-test/suite/tokudb.parts/r-native/partition_exch_qa_5_tokudb.result new file mode 100644 index 000000000000..e539c37a0b43 --- /dev/null +++ b/mysql-test/suite/tokudb.parts/r-native/partition_exch_qa_5_tokudb.result @@ -0,0 +1,114 @@ +CREATE USER test1@localhost; +CREATE USER test2@localhost; +GRANT USAGE ON *.* TO test1@localhost; +GRANT USAGE ON *.* TO test2@localhost; +GRANT CREATE, DROP, INSERT, SELECT ON test.* TO test1@localhost; +GRANT CREATE, DROP, ALTER, UPDATE, INSERT, SELECT ON test.* TO test2@localhost; +connect (test1,localhost,test1,,test,MASTER_MYPORT,MASTER_MYSOCK); +SELECT current_user(); +current_user() +test1@localhost +SHOW GRANTS FOR CURRENT_USER; +Grants for test1@localhost +GRANT USAGE ON *.* TO 'test1'@'localhost' +GRANT SELECT, INSERT, CREATE, DROP ON `test`.* TO 'test1'@'localhost' +ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t_10; +ERROR 42000: ALTER command denied to user 'test1'@'localhost' for table 'tp' +disconnect test1; +connect (test2,localhost,test2,,test,MASTER_MYPORT,MASTER_MYSOCK); +USE test; +SELECT current_user(); +current_user() +test2@localhost +SHOW GRANTS FOR CURRENT_USER; +Grants for test2@localhost +GRANT USAGE ON *.* TO 'test2'@'localhost' +GRANT SELECT, INSERT, UPDATE, CREATE, DROP, ALTER ON `test`.* TO 'test2'@'localhost' +ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t_10; +SELECT * FROM t_10; +a b +2 Two +4 Four +6 Six +8 Eight +SELECT * FROM tp WHERE a BETWEEN 0 AND 10; +a b +1 One +3 Three +5 Five +9 Nine +ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t_10; +SELECT * FROM t_10; +a b +1 One +3 Three +5 Five +9 Nine +SELECT * FROM tp WHERE a BETWEEN 0 AND 10; +a b +2 Two +4 Four +6 Six +8 Eight +ALTER TABLE tsp EXCHANGE PARTITION sp00 WITH TABLE tsp_00; +SELECT * FROM tsp_00; +a b +SELECT * FROM tsp WHERE a BETWEEN 0 AND 10; +a b +2 Two +4 Four +5 Five +6 Six +8 Eight +ALTER TABLE tsp EXCHANGE PARTITION sp00 WITH TABLE tsp_00; +SELECT * FROM tsp_00; +a b +5 Five +SELECT * FROM tsp WHERE a BETWEEN 0 AND 10; +a b +2 Two +4 Four +6 Six +8 Eight +disconnect test2; +connection default; +REVOKE ALTER ON test.* FROM test2@localhost; +connect (test2,localhost,test2,,test,MASTER_MYPORT,MASTER_MYSOCK); +USE test; +SELECT current_user(); +current_user() +test2@localhost +SHOW GRANTS FOR CURRENT_USER; +Grants for test2@localhost +GRANT USAGE ON *.* TO 'test2'@'localhost' +GRANT SELECT, INSERT, UPDATE, CREATE, DROP ON `test`.* TO 'test2'@'localhost' +ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t_10; +ERROR 42000: ALTER command denied to user 'test2'@'localhost' for table 'tp' +SELECT * FROM tp WHERE a BETWEEN 0 AND 10; +a b +2 Two +4 Four +6 Six +8 Eight +ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t_10; +ERROR 42000: ALTER command denied to user 'test2'@'localhost' for table 'tp' +ALTER TABLE tsp EXCHANGE PARTITION sp00 WITH TABLE tsp_00; +ERROR 42000: ALTER command denied to user 'test2'@'localhost' for table 'tsp' +ALTER TABLE tsp EXCHANGE PARTITION sp00 WITH TABLE tsp_00; +ERROR 42000: ALTER command denied to user 'test2'@'localhost' for table 'tsp' +connection default; +disconnect test2; +DROP TABLE IF EXISTS t_10; +DROP TABLE IF EXISTS t_100; +DROP TABLE IF EXISTS t_1000; +DROP TABLE IF EXISTS tp; +DROP TABLE IF EXISTS tsp; +DROP TABLE IF EXISTS tsp_00; +DROP TABLE IF EXISTS tsp_01; +DROP TABLE IF EXISTS tsp_02; +DROP TABLE IF EXISTS tsp_03; +DROP TABLE IF EXISTS tsp_04; +DROP TABLE IF EXISTS t_empty; +DROP TABLE IF EXISTS t_null; +DROP USER test1@localhost; +DROP USER test2@localhost; diff --git a/mysql-test/suite/tokudb.parts/r-native/partition_exch_qa_7_tokudb.result b/mysql-test/suite/tokudb.parts/r-native/partition_exch_qa_7_tokudb.result new file mode 100644 index 000000000000..8ae4bfd3d3ab --- /dev/null +++ b/mysql-test/suite/tokudb.parts/r-native/partition_exch_qa_7_tokudb.result @@ -0,0 +1,82 @@ +CREATE USER test_2@localhost; +send +ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t_10; +connect (test_2,localhost,test_2,,test,MASTER_MYPORT,MASTER_MYSOCK); +SELECT * FROM t_10; +a b +2 Two +4 Four +6 Six +8 Eight +SELECT * FROM tp WHERE a BETWEEN 0 AND 10; +a b +1 One +3 Three +5 Five +9 Nine +INSERT INTO tp VALUES (7,"Seven"); +SELECT * FROM tp WHERE a BETWEEN 0 AND 10; +a b +1 One +3 Three +5 Five +7 Seven +9 Nine +ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t_10; +connection default; +reap; +SELECT * FROM t_10; +a b +1 One +3 Three +5 Five +7 Seven +9 Nine +SELECT * FROM tp WHERE a BETWEEN 0 AND 10; +a b +2 Two +4 Four +6 Six +8 Eight +connection test_2; +SELECT * FROM t_10; +a b +1 One +3 Three +5 Five +7 Seven +9 Nine +SELECT * FROM tp WHERE a BETWEEN 0 AND 10; +a b +2 Two +4 Four +6 Six +8 Eight +disconnect test_2; +connection default; +SELECT * FROM t_10; +a b +1 One +3 Three +5 Five +7 Seven +9 Nine +SELECT * FROM tp WHERE a BETWEEN 0 AND 10; +a b +2 Two +4 Four +6 Six +8 Eight +DROP TABLE IF EXISTS t_10; +DROP TABLE IF EXISTS t_100; +DROP TABLE IF EXISTS t_1000; +DROP TABLE IF EXISTS tp; +DROP TABLE IF EXISTS tsp; +DROP TABLE IF EXISTS tsp_00; +DROP TABLE IF EXISTS tsp_01; +DROP TABLE IF EXISTS tsp_02; +DROP TABLE IF EXISTS tsp_03; +DROP TABLE IF EXISTS tsp_04; +DROP TABLE IF EXISTS t_empty; +DROP TABLE IF EXISTS t_null; +DROP USER test_2@localhost; diff --git a/mysql-test/suite/tokudb.parts/r-native/partition_exch_qa_8_tokudb.result b/mysql-test/suite/tokudb.parts/r-native/partition_exch_qa_8_tokudb.result new file mode 100644 index 000000000000..b252fc616b14 --- /dev/null +++ b/mysql-test/suite/tokudb.parts/r-native/partition_exch_qa_8_tokudb.result @@ -0,0 +1,83 @@ +CREATE USER test2@localhost; +CREATE DATABASE testdb; +USE testdb; +USE test; +GRANT CREATE, ALTER, DROP, INSERT, SELECT on test.* TO test2@localhost; +GRANT CREATE, ALTER, DROP, INSERT, SELECT on testdb.* TO test2@localhost; +connect (test2,localhost,test2,,test,MASTER_MYPORT,MASTER_MYSOCK); +ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE testdb.t_10; +SELECT * FROM testdb.t_10; +a b +2 Two +4 Four +6 Six +8 Eight +SELECT * FROM tp WHERE a BETWEEN 0 AND 10; +a b +1 One +3 Three +5 Five +9 Nine +ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE testdb.t_10; +SELECT * FROM testdb.t_10; +a b +1 One +3 Three +5 Five +9 Nine +SELECT * FROM tp WHERE a BETWEEN 0 AND 10; +a b +2 Two +4 Four +6 Six +8 Eight +ALTER TABLE testdb.tp EXCHANGE PARTITION p0 WITH TABLE t_10; +SELECT * FROM t_10; +a b +2 Two +4 Four +6 Six +8 Eight +SELECT * FROM testdb.tp WHERE a BETWEEN 0 AND 10; +a b +1 One +3 Three +5 Five +9 Nine +ALTER TABLE testdb.tp EXCHANGE PARTITION p0 WITH TABLE t_10; +SELECT * FROM t_10; +a b +1 One +3 Three +5 Five +9 Nine +SELECT * FROM testdb.tp WHERE a BETWEEN 0 AND 10; +a b +2 Two +4 Four +6 Six +8 Eight +disconnect test2; +connection default; +REVOKE INSERT ON testdb.* FROM test2@localhost; +connect (test2,localhost,test2,,test,MASTER_MYPORT,MASTER_MYSOCK); +ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE testdb.t_10; +ERROR 42000: INSERT command denied to user 'test2'@'localhost' for table 't_10' +ALTER TABLE testdb.tp EXCHANGE PARTITION p0 WITH TABLE t_10; +ERROR 42000: INSERT command denied to user 'test2'@'localhost' for table 'tp' +disconnect test2; +connection default; +DROP TABLE IF EXISTS t_10; +DROP TABLE IF EXISTS t_100; +DROP TABLE IF EXISTS t_1000; +DROP TABLE IF EXISTS tp; +DROP TABLE IF EXISTS tsp; +DROP TABLE IF EXISTS tsp_00; +DROP TABLE IF EXISTS tsp_01; +DROP TABLE IF EXISTS tsp_02; +DROP TABLE IF EXISTS tsp_03; +DROP TABLE IF EXISTS tsp_04; +DROP TABLE IF EXISTS t_empty; +DROP TABLE IF EXISTS t_null; +DROP USER test2@localhost; +DROP DATABASE testdb; diff --git a/mysql-test/suite/tokudb.parts/r-native/partition_exch_tokudb.result b/mysql-test/suite/tokudb.parts/r-native/partition_exch_tokudb.result new file mode 100644 index 000000000000..d444e2e3558d --- /dev/null +++ b/mysql-test/suite/tokudb.parts/r-native/partition_exch_tokudb.result @@ -0,0 +1,355 @@ +use test; +SELECT * FROM t_10; +a b +1 One +3 Three +5 Five +9 Nine +SELECT * FROM t_100; +a b +11 Eleven +13 Thirdteen +15 Fifeteen +19 Nineteen +91 Ninety-one +93 Ninety-three +95 Ninety-five +99 Ninety-nine +SELECT * FROM t_1000; +a b +111 Hundred elven +113 Hundred thirdteen +115 Hundred fiveteen +119 Hundred nineteen +131 Hundred thirty-one +133 Hundred thirty-three +135 Hundred thirty-five +139 Hundred thirty-nine +151 Hundred fifty-one +153 Hundred fifty-three +155 Hundred fity-five +159 Hundred fifty-nine +191 Hundred ninety-one +193 Hundred ninety-three +195 Hundred ninety-five +199 Hundred ninety-nine +SELECT * FROM tp; +a b +112 Hundred twelve +114 Hundred fourteen +116 Hundred sixteen +118 Hundred eightteen +12 twelve +122 Hundred twenty-two +124 Hundred twenty-four +126 Hundred twenty-six +128 Hundred twenty-eight +14 Fourteen +16 Sixteen +162 Hundred sixty-two +164 Hundred sixty-four +166 Hundred sixty-six +168 Hundred sixty-eight +18 Eightteen +182 Hundred eighty-two +184 Hundred eighty-four +186 Hundred eighty-six +188 Hundred eighty-eight +2 Two +4 Four +6 Six +8 Eight +SELECT * FROM tsp; +a b +112 Hundred twelve +114 Hundred fourteen +116 Hundred sixteen +118 Hundred eightteen +12 twelve +122 Hundred twenty-two +124 Hundred twenty-four +126 Hundred twenty-six +128 Hundred twenty-eight +14 Fourteen +16 Sixteen +162 Hundred sixty-two +164 Hundred sixty-four +166 Hundred sixty-six +168 Hundred sixty-eight +18 Eightteen +182 Hundred eight-two +184 Hundred eighty-four +186 Hundred eighty-six +188 Hundred eighty-eight +2 Two +4 Four +6 Six +8 Eight +SELECT * FROM tsp_00; +a b +5 Five +SELECT * FROM tsp_01; +a b +1 One +SELECT * FROM tsp_02; +a b +SELECT * FROM tsp_03; +a b +3 Three +SELECT * FROM tsp_04; +a b +9 Nine +ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t_10; +SELECT * FROM t_10; +a b +2 Two +4 Four +6 Six +8 Eight +SELECT * FROM tp WHERE a BETWEEN 0 AND 10; +a b +1 One +3 Three +5 Five +9 Nine +ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t_10; +SELECT * FROM t_10; +a b +1 One +3 Three +5 Five +9 Nine +SELECT * FROM tp WHERE a BETWEEN 0 AND 10; +a b +2 Two +4 Four +6 Six +8 Eight +ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t_empty; +SELECT * FROM t_empty; +a b +2 Two +4 Four +6 Six +8 Eight +SELECT * FROM tp WHERE a BETWEEN 0 AND 10; +a b +ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t_empty; +SELECT * FROM t_empty; +a b +SELECT * FROM tp WHERE a BETWEEN 0 AND 10; +a b +2 Two +4 Four +6 Six +8 Eight +ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t_null; +SELECT * FROM t_null; +a b +2 Two +4 Four +6 Six +8 Eight +SELECT * FROM tp WHERE a BETWEEN 0 AND 10; +a b +1 NULL +ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t_null; +SELECT * FROM t_null; +a b +1 NULL +SELECT * FROM tp WHERE a BETWEEN 0 AND 10; +a b +2 Two +4 Four +6 Six +8 Eight +ALTER TABLE tp EXCHANGE PARTITION p1 WITH TABLE t_100; +SELECT * FROM t_100; +a b +12 twelve +14 Fourteen +16 Sixteen +18 Eightteen +SELECT * FROM tp WHERE a BETWEEN 10 AND 100; +a b +11 Eleven +13 Thirdteen +15 Fifeteen +19 Nineteen +91 Ninety-one +93 Ninety-three +95 Ninety-five +99 Ninety-nine +ALTER TABLE tp EXCHANGE PARTITION p1 WITH TABLE t_100; +SELECT * FROM t_100; +a b +11 Eleven +13 Thirdteen +15 Fifeteen +19 Nineteen +91 Ninety-one +93 Ninety-three +95 Ninety-five +99 Ninety-nine +SELECT * FROM tp WHERE a BETWEEN 10 AND 100; +a b +12 twelve +14 Fourteen +16 Sixteen +18 Eightteen +ALTER TABLE tp EXCHANGE PARTITION p2 WITH TABLE t_1000; +SELECT * FROM t_1000; +a b +112 Hundred twelve +114 Hundred fourteen +116 Hundred sixteen +118 Hundred eightteen +122 Hundred twenty-two +124 Hundred twenty-four +126 Hundred twenty-six +128 Hundred twenty-eight +162 Hundred sixty-two +164 Hundred sixty-four +166 Hundred sixty-six +168 Hundred sixty-eight +182 Hundred eighty-two +184 Hundred eighty-four +186 Hundred eighty-six +188 Hundred eighty-eight +SELECT * FROM tp WHERE a BETWEEN 100 AND 1000; +a b +111 Hundred elven +113 Hundred thirdteen +115 Hundred fiveteen +119 Hundred nineteen +131 Hundred thirty-one +133 Hundred thirty-three +135 Hundred thirty-five +139 Hundred thirty-nine +151 Hundred fifty-one +153 Hundred fifty-three +155 Hundred fity-five +159 Hundred fifty-nine +191 Hundred ninety-one +193 Hundred ninety-three +195 Hundred ninety-five +199 Hundred ninety-nine +ALTER TABLE tp EXCHANGE PARTITION p2 WITH TABLE t_1000; +SELECT * FROM t_1000; +a b +111 Hundred elven +113 Hundred thirdteen +115 Hundred fiveteen +119 Hundred nineteen +131 Hundred thirty-one +133 Hundred thirty-three +135 Hundred thirty-five +139 Hundred thirty-nine +151 Hundred fifty-one +153 Hundred fifty-three +155 Hundred fity-five +159 Hundred fifty-nine +191 Hundred ninety-one +193 Hundred ninety-three +195 Hundred ninety-five +199 Hundred ninety-nine +SELECT * FROM tp WHERE a BETWEEN 100 AND 1000; +a b +112 Hundred twelve +114 Hundred fourteen +116 Hundred sixteen +118 Hundred eightteen +122 Hundred twenty-two +124 Hundred twenty-four +126 Hundred twenty-six +128 Hundred twenty-eight +162 Hundred sixty-two +164 Hundred sixty-four +166 Hundred sixty-six +168 Hundred sixty-eight +182 Hundred eighty-two +184 Hundred eighty-four +186 Hundred eighty-six +188 Hundred eighty-eight +ALTER TABLE tsp EXCHANGE PARTITION sp00 WITH TABLE tsp_00; +ALTER TABLE tsp EXCHANGE PARTITION sp01 WITH TABLE tsp_01; +ALTER TABLE tsp EXCHANGE PARTITION sp02 WITH TABLE tsp_02; +ALTER TABLE tsp EXCHANGE PARTITION sp03 WITH TABLE tsp_03; +ALTER TABLE tsp EXCHANGE PARTITION sp04 WITH TABLE tsp_04; +SELECT * FROM tsp_00; +a b +SELECT * FROM tsp_01; +a b +6 Six +SELECT * FROM tsp_02; +a b +2 Two +SELECT * FROM tsp_03; +a b +8 Eight +SELECT * FROM tsp_04; +a b +4 Four +SELECT * FROM tsp WHERE a BETWEEN 0 AND 10; +a b +1 One +3 Three +5 Five +9 Nine +ALTER TABLE tsp EXCHANGE PARTITION sp00 WITH TABLE tsp_00; +ALTER TABLE tsp EXCHANGE PARTITION sp01 WITH TABLE tsp_01; +ALTER TABLE tsp EXCHANGE PARTITION sp02 WITH TABLE tsp_02; +ALTER TABLE tsp EXCHANGE PARTITION sp03 WITH TABLE tsp_03; +ALTER TABLE tsp EXCHANGE PARTITION sp04 WITH TABLE tsp_04; +SELECT * FROM tsp_00; +a b +5 Five +SELECT * FROM tsp_01; +a b +1 One +SELECT * FROM tsp_02; +a b +SELECT * FROM tsp_03; +a b +3 Three +SELECT * FROM tsp_04; +a b +9 Nine +SELECT * FROM tsp WHERE a BETWEEN 0 AND 10; +a b +2 Two +4 Four +6 Six +8 Eight +ALTER TABLE tsp EXCHANGE PARTITION sp01 WITH TABLE t_null; +SELECT * FROM t_null; +a b +6 Six +SELECT * FROM tsp WHERE a BETWEEN 0 AND 10; +a b +1 NULL +2 Two +4 Four +8 Eight +ALTER TABLE tsp EXCHANGE PARTITION sp01 WITH TABLE t_null; +SELECT * FROM t_null; +a b +1 NULL +SELECT * FROM tsp WHERE a BETWEEN 0 AND 10; +a b +2 Two +4 Four +6 Six +8 Eight +DROP TABLE IF EXISTS t_10; +DROP TABLE IF EXISTS t_100; +DROP TABLE IF EXISTS t_1000; +DROP TABLE IF EXISTS tp; +DROP TABLE IF EXISTS tsp; +DROP TABLE IF EXISTS tsp_00; +DROP TABLE IF EXISTS tsp_01; +DROP TABLE IF EXISTS tsp_02; +DROP TABLE IF EXISTS tsp_03; +DROP TABLE IF EXISTS tsp_04; +DROP TABLE IF EXISTS t_empty; +DROP TABLE IF EXISTS t_null; diff --git a/mysql-test/suite/tokudb.parts/r-native/partition_exchange_tokudb.result b/mysql-test/suite/tokudb.parts/r-native/partition_exchange_tokudb.result new file mode 100644 index 000000000000..beed3486d98b --- /dev/null +++ b/mysql-test/suite/tokudb.parts/r-native/partition_exchange_tokudb.result @@ -0,0 +1,374 @@ +# Test with AUTO_INCREMENT +CREATE TABLE tp +(a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, +b varchar(24)) +ENGINE = 'TokuDB' +PARTITION BY HASH (a) PARTITIONS 4; +CREATE TABLE t LIKE tp; +ALTER TABLE t REMOVE PARTITIONING; +SHOW CREATE TABLE tp; +Table Create Table +tp CREATE TABLE `tp` ( + `a` int(11) NOT NULL AUTO_INCREMENT, + `b` varchar(24) DEFAULT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (a) +PARTITIONS 4 */ +SHOW CREATE TABLE t; +Table Create Table +t CREATE TABLE `t` ( + `a` int(11) NOT NULL AUTO_INCREMENT, + `b` varchar(24) DEFAULT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +INSERT INTO tp (b) VALUES ("One"), ("Two"), ("Three"), ("Four"), ("Five"), +("Six"), ("Seven"), ("Eight"), ("Nine"), ("Ten"), ("Eleven"), ("Twelwe"); +INSERT INTO tp VALUES (97, "Ninety seven"); +INSERT INTO tp VALUES (111, "One hundred eleven"); +INSERT INTO tp VALUES (101, "One hundred one"); +SET INSERT_ID = 13; +INSERT INTO t (b) VALUES ("Thirteen"); +SET INSERT_ID = 21; +INSERT INTO t (b) VALUES ("Twenty one"); +SET INSERT_ID = 25; +INSERT INTO t (b) VALUES ("Twenty five"); +SET INSERT_ID = 55; +INSERT INTO t (b) VALUES ("Fifty five"); +DELETE FROM tp WHERE a = 111; +DELETE FROM t WHERE a = 55; +UPDATE tp SET a = 41 WHERE a = 101; +UPDATE t SET a = 17 WHERE a = 25; +SELECT PARTITION_NAME, IF(TABLE_ROWS, 'YES', 'NO') AS HAVE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA ='test' AND TABLE_NAME = 'tp'; +PARTITION_NAME HAVE_ROWS +p0 YES +p1 YES +p2 YES +p3 YES +SELECT IF(TABLE_ROWS, 'YES', 'NO') AS HAVE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA ='test' AND TABLE_NAME = 't'; +HAVE_ROWS +YES +ALTER TABLE tp EXCHANGE PARTITION p1 WITH TABLE t; +SELECT PARTITION_NAME, IF(TABLE_ROWS, 'YES', 'NO') AS HAVE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA ='test' AND TABLE_NAME = 'tp'; +PARTITION_NAME HAVE_ROWS +p0 YES +p1 YES +p2 YES +p3 YES +SELECT IF(TABLE_ROWS, 'YES', 'NO') AS HAVE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA ='test' AND TABLE_NAME = 't'; +HAVE_ROWS +YES +SELECT * FROM tp ORDER BY a; +a b +2 Two +3 Three +4 Four +6 Six +7 Seven +8 Eight +10 Ten +11 Eleven +12 Twelwe +13 Thirteen +17 Twenty five +21 Twenty one +SELECT * FROM t ORDER BY a; +a b +1 One +5 Five +9 Nine +41 One hundred one +97 Ninety seven +SHOW CREATE TABLE tp; +Table Create Table +tp CREATE TABLE `tp` ( + `a` int(11) NOT NULL AUTO_INCREMENT, + `b` varchar(24) DEFAULT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB AUTO_INCREMENT=112 DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (a) +PARTITIONS 4 */ +SHOW CREATE TABLE t; +Table Create Table +t CREATE TABLE `t` ( + `a` int(11) NOT NULL AUTO_INCREMENT, + `b` varchar(24) DEFAULT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB AUTO_INCREMENT=102 DEFAULT CHARSET=latin1 +DROP TABLE tp, t; +CREATE TABLE t +(a INT, +b VARCHAR(55), +PRIMARY KEY (a)) +ENGINE = 'TokuDB'; +CREATE TABLE tp +(a INT, +b VARCHAR(55), +PRIMARY KEY (a)) +ENGINE = 'TokuDB' +PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (100), +PARTITION p1 VALUES LESS THAN MAXVALUE); +CREATE TABLE tsp +(a INT, +b VARCHAR(55), +PRIMARY KEY (a)) +ENGINE = 'TokuDB' +PARTITION BY RANGE (a) +SUBPARTITION BY HASH(a) +(PARTITION p0 VALUES LESS THAN (100) +(SUBPARTITION sp0, +SUBPARTITION sp1), +PARTITION p1 VALUES LESS THAN MAXVALUE +(SUBPARTITION sp2, +SUBPARTITION sp3)); +INSERT INTO t VALUES (1, "First value"), (3, "Three"), (5, "Five"), (99, "End of values"); +INSERT INTO tp VALUES (2, "First value"), (10, "Ten"), (50, "Fifty"), (200, "Two hundred, end of values"), (61, "Sixty one"), (62, "Sixty two"), (63, "Sixty three"), (64, "Sixty four"), (161, "161"), (162, "162"), (163, "163"), (164, "164"); +INSERT INTO tsp VALUES (2, "First value"), (10, "Ten"), (50, "Fifty"), (200, "Two hundred, end of values"), (61, "Sixty one"), (62, "Sixty two"), (63, "Sixty three"), (64, "Sixty four"), (161, "161"), (162, "162"), (163, "163"), (164, "164"); +SELECT * FROM t; +a b +1 First value +3 Three +5 Five +99 End of values +SELECT * FROM tp; +a b +10 Ten +161 161 +162 162 +163 163 +164 164 +2 First value +200 Two hundred, end of values +50 Fifty +61 Sixty one +62 Sixty two +63 Sixty three +64 Sixty four +# Start by testing read/write locking +SET AUTOCOMMIT = 1; +# con1 +SET DEBUG_SYNC= 'swap_partition_after_compare_tables SIGNAL swap_in_progress WAIT_FOR goto_verification'; +SET DEBUG_SYNC= 'swap_partition_first_row_read SIGNAL swap_in_progress WAIT_FOR goto_wait'; +SET DEBUG_SYNC= 'swap_partition_after_wait SIGNAL swap_in_progress WAIT_FOR goto_rename'; +SET DEBUG_SYNC= 'swap_partition_before_rename SIGNAL swap_in_progress WAIT_FOR test_done'; +ALTER TABLE tp EXCHANGE PARTITION p0 WITH TABLE t; +# con default +SET DEBUG_SYNC= 'now WAIT_FOR swap_in_progress'; +# select from t and select/update/delete/insert from tp should work +SELECT * FROM t WHERE a = 99; +a b +99 End of values +SELECT * FROM tp WHERE a = 61; +a b +61 Sixty one +# any write (update/delete/insert) into t or tp should fail +SET SESSION lock_wait_timeout=1; +UPDATE tp SET a = 53, b = concat("Fifty three, was ", b) WHERE a = 63; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +INSERT INTO tp VALUES (63, "Sixty three, new"), (59, "To be deleted"); +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +DELETE FROM tp WHERE a = 59; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +UPDATE t SET a = 53, b = "Fifty three, was three" WHERE a = 3; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +INSERT INTO t VALUES (63, "Sixty three, new"), (59, "To be deleted"); +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +DELETE FROM t WHERE a = 3; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +ALTER TABLE t ENGINE = 'TokuDB'; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +ALTER TABLE tp ENGINE = 'TokuDB'; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +SHOW CREATE TABLE t; +Table Create Table +t CREATE TABLE `t` ( + `a` int(11) NOT NULL, + `b` varchar(55) DEFAULT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +SHOW CREATE TABLE tp; +Table Create Table +tp CREATE TABLE `tp` ( + `a` int(11) NOT NULL, + `b` varchar(55) DEFAULT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (100) ENGINE = TokuDB, + PARTITION p1 VALUES LESS THAN MAXVALUE ENGINE = TokuDB) */ +SET DEBUG_SYNC= 'now SIGNAL goto_verification'; +SET DEBUG_SYNC= 'now WAIT_FOR swap_in_progress'; +# select from t and select/update/delete/insert from tp should work +SELECT * FROM t WHERE a = 99; +a b +99 End of values +SELECT * FROM tp WHERE a = 61; +a b +61 Sixty one +UPDATE tp SET a = 43, b = concat("Fifty three, was ", b) WHERE a = 63; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +INSERT INTO tp VALUES (63, "Sixty three, new 2"), (59, "To be deleted"); +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +DELETE FROM tp WHERE a = 59; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +# any write (update/delete/insert) into t should fail +UPDATE t SET a = 53, b = "Fifty three, was three" WHERE a = 3; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +INSERT INTO t VALUES (63, "Sixty three, new"), (59, "To be deleted"); +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +DELETE FROM t WHERE a = 3; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +ALTER TABLE t ENGINE = 'TokuDB'; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +ALTER TABLE tp ENGINE = 'TokuDB'; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +SHOW CREATE TABLE t; +Table Create Table +t CREATE TABLE `t` ( + `a` int(11) NOT NULL, + `b` varchar(55) DEFAULT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +SHOW CREATE TABLE tp; +Table Create Table +tp CREATE TABLE `tp` ( + `a` int(11) NOT NULL, + `b` varchar(55) DEFAULT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (100) ENGINE = TokuDB, + PARTITION p1 VALUES LESS THAN MAXVALUE ENGINE = TokuDB) */ +SET DEBUG_SYNC= 'now SIGNAL goto_wait'; +SET DEBUG_SYNC= 'now WAIT_FOR swap_in_progress'; +# Both tables should now be under exclusive lock, even SHOW should fail +SELECT * FROM t WHERE a = 99; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +SELECT * FROM tp WHERE a = 61; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +UPDATE tp SET a = 53, b = concat("Fifty three, was ", b) WHERE a = 63; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +INSERT INTO tp VALUES (63, "Sixty three, new 2"), (59, "To be deleted"); +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +DELETE FROM tp WHERE a = 59; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +UPDATE t SET a = 53, b = "Fifty three, was three" WHERE a = 3; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +INSERT INTO t VALUES (63, "Sixty three, new"), (59, "To be deleted"); +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +DELETE FROM t WHERE a = 3; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +SHOW CREATE TABLE t; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +SHOW CREATE TABLE tp; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +ALTER TABLE t ENGINE = 'TokuDB'; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +ALTER TABLE tp ENGINE = 'TokuDB'; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +SET DEBUG_SYNC= 'now SIGNAL goto_rename'; +SET DEBUG_SYNC= 'now WAIT_FOR swap_in_progress'; +# Both tables should now be under exclusive lock +SELECT * FROM t WHERE a = 99; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +SELECT * FROM tp WHERE a = 61; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +UPDATE tp SET a = 53, b = concat("Fifty three, was ", b) WHERE a = 63; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +INSERT INTO tp VALUES (63, "Sixty three, new 2"), (59, "To be deleted"); +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +DELETE FROM tp WHERE a = 59; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +UPDATE t SET a = 53, b = "Fifty three, was three" WHERE a = 3; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +INSERT INTO t VALUES (63, "Sixty three, new"), (59, "To be deleted"); +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +DELETE FROM t WHERE a = 3; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +ALTER TABLE t ENGINE = 'TokuDB'; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +ALTER TABLE tp ENGINE = 'TokuDB'; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +SHOW CREATE TABLE t; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +SHOW CREATE TABLE tp; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +SET DEBUG_SYNC= 'now SIGNAL test_done'; +# con1 +# con default +# Tables should now be as normal +SHOW CREATE TABLE t; +Table Create Table +t CREATE TABLE `t` ( + `a` int(11) NOT NULL, + `b` varchar(55) DEFAULT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +SHOW CREATE TABLE tp; +Table Create Table +tp CREATE TABLE `tp` ( + `a` int(11) NOT NULL, + `b` varchar(55) DEFAULT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (100) ENGINE = TokuDB, + PARTITION p1 VALUES LESS THAN MAXVALUE ENGINE = TokuDB) */ +SELECT * FROM tp WHERE a = 99; +a b +99 End of values +SELECT * FROM t WHERE a = 61; +a b +61 Sixty one +UPDATE t SET a = 53, b = "Fifty three, was sixty three" WHERE a = 63; +INSERT INTO t VALUES (63, "Sixty three, new"), (59, "To be deleted"); +DELETE FROM t WHERE a = 59; +UPDATE tp SET a = 53, b = "Fifty three, was three" WHERE a = 3; +INSERT INTO tp VALUES (63, "Sixty three, new"), (59, "To be deleted"); +DELETE FROM tp WHERE a = 3; +ALTER TABLE t ENGINE = 'TokuDB'; +ALTER TABLE tp ENGINE = 'TokuDB'; +# con default +SET DEBUG_SYNC= 'RESET'; +SHOW CREATE TABLE t; +Table Create Table +t CREATE TABLE `t` ( + `a` int(11) NOT NULL, + `b` varchar(55) DEFAULT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +SHOW CREATE TABLE tp; +Table Create Table +tp CREATE TABLE `tp` ( + `a` int(11) NOT NULL, + `b` varchar(55) DEFAULT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (100) ENGINE = TokuDB, + PARTITION p1 VALUES LESS THAN MAXVALUE ENGINE = TokuDB) */ +SELECT * FROM t; +a b +10 Ten +2 First value +50 Fifty +53 Fifty three, was sixty three +61 Sixty one +62 Sixty two +63 Sixty three, new +64 Sixty four +SELECT * FROM tp; +a b +1 First value +161 161 +162 162 +163 163 +164 164 +200 Two hundred, end of values +5 Five +53 Fifty three, was three +59 To be deleted +63 Sixty three, new +99 End of values +DROP TABLE t, tp, tsp; diff --git a/mysql-test/suite/tokudb.parts/r-native/partition_float_tokudb.result b/mysql-test/suite/tokudb.parts/r-native/partition_float_tokudb.result new file mode 100644 index 000000000000..6dcd9048dc54 --- /dev/null +++ b/mysql-test/suite/tokudb.parts/r-native/partition_float_tokudb.result @@ -0,0 +1,172 @@ +create table t1 (a float not null, primary key(a)) engine='TokuDB' +partition by key (a) ( +partition pa1 max_rows=20 min_rows=2, +partition pa2 max_rows=30 min_rows=3, +partition pa3 max_rows=30 min_rows=4, +partition pa4 max_rows=40 min_rows=2); +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` float NOT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +(PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 ENGINE = TokuDB, + PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 ENGINE = TokuDB, + PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 ENGINE = TokuDB, + PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 ENGINE = TokuDB) */ +insert into t1 values (-3.402823466E+38), (3.402823466E+38), (-1.5), (-1), (0), (1), (1.5); +select * from t1; +a +0 +-3.40282e38 +-1.5 +-1 +1 +1.5 +3.40282e38 +select * from t1 where a=1.5; +a +1.5 +delete from t1 where a=1.5; +select * from t1; +a +0 +-3.40282e38 +-1.5 +-1 +1 +3.40282e38 +drop table t1; +create table t2 (a float not null, primary key(a)) engine='TokuDB' +partition by key (a) partitions 10; +show create table t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` float NOT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +PARTITIONS 10 */ +insert into t2 values (-3.402823466E+38), (-3.402823466E+37), (-123.456), (0), (1234546.789), (123.456), (1.5); +select * from t2; +a +0 +-3.40282e38 +-3.40282e37 +-123.456 +1.5 +123.456 +1234550 +select * from t2 where a=123.456; +a +delete from t2 where a=123.456; +select * from t2; +a +0 +-3.40282e38 +-3.40282e37 +-123.456 +1.5 +123.456 +1234550 +select * from t2 where a=1.5; +a +1.5 +delete from t2 where a=1.5; +select * from t2; +a +0 +-3.40282e38 +-3.40282e37 +-123.456 +123.456 +1234550 +delete from t2; +1024*3 inserts; +select count(*) from t2; +count(*) +3072 +drop table t2; +create table t1 (a double not null, primary key(a)) engine='TokuDB' +partition by key (a) ( +partition pa1 max_rows=20 min_rows=2, +partition pa2 max_rows=30 min_rows=3, +partition pa3 max_rows=30 min_rows=4, +partition pa4 max_rows=40 min_rows=2); +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` double NOT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +(PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 ENGINE = TokuDB, + PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 ENGINE = TokuDB, + PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 ENGINE = TokuDB, + PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 ENGINE = TokuDB) */ +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 +-2.2250738585072014e-208 +1234.567 +-2.2250738585072016e208 +0 +-1.5 +-1 +1.5 +2.2250738585072016e208 +select * from t1 where a=1.5; +a +1.5 +delete from t1 where a=1.5; +select * from t1; +a +-2.2250738585072014e-208 +1234.567 +-2.2250738585072016e208 +0 +-1.5 +-1 +2.2250738585072016e208 +drop table t1; +create table t2 (a double not null, primary key(a)) engine='TokuDB' +partition by key (a) partitions 10; +show create table t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` double NOT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +PARTITIONS 10 */ +insert into t2 values (-2.2250738585072014E+208), (-2.2250738585072014E-208), (-1.5), (-1), (0), (1.5), (1234.567), (2.2250738585072014E+208); +select * from t2; +a +0 +-1.5 +1.5 +2.2250738585072016e208 +-2.2250738585072014e-208 +1234.567 +-2.2250738585072016e208 +-1 +select * from t2 where a=1234.567; +a +1234.567 +delete from t2 where a=1234.567; +select * from t2; +a +0 +-1.5 +1.5 +2.2250738585072016e208 +-2.2250738585072014e-208 +-2.2250738585072016e208 +-1 +delete from t2; +1024*3 inserts; +select count(*) from t2; +count(*) +3072 +drop table t2; diff --git a/mysql-test/suite/tokudb.parts/r-native/partition_int_tokudb.result b/mysql-test/suite/tokudb.parts/r-native/partition_int_tokudb.result new file mode 100644 index 000000000000..2c3e7f6e0937 --- /dev/null +++ b/mysql-test/suite/tokudb.parts/r-native/partition_int_tokudb.result @@ -0,0 +1,557 @@ +create table t1 (a tinyint unsigned not null, primary key(a)) engine='TokuDB' +partition by key (a) ( +partition pa1 max_rows=20 min_rows=2, +partition pa2 max_rows=30 min_rows=3, +partition pa3 max_rows=30 min_rows=4, +partition pa4 max_rows=40 min_rows=2); +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` tinyint(3) unsigned NOT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +(PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 ENGINE = TokuDB, + PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 ENGINE = TokuDB, + PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 ENGINE = TokuDB, + PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 ENGINE = TokuDB) */ +insert into t1 values (255), (254), (253), (252), (1), (2), (128); +select * from t1; +a +1 +128 +2 +252 +253 +254 +255 +select * from t1 where a=253; +a +253 +delete from t1 where a=253; +select * from t1; +a +1 +128 +2 +252 +254 +255 +drop table t1; +create table t2 (a tinyint unsigned not null, primary key(a)) engine='TokuDB' +partition by key (a) partitions 8; +show create table t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` tinyint(3) unsigned NOT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +PARTITIONS 8 */ +insert into t2 values (255), (254), (253), (252); +select * from t2; +a +252 +253 +254 +255 +select * from t2 where a=253; +a +253 +delete from t2 where a=253; +select * from t2; +a +252 +254 +255 +delete from t2; +255 inserts; +select count(*) from t2; +count(*) +255 +drop table t2; +create table t3 (a tinyint not null, primary key(a)) engine='TokuDB' +partition by key (a) partitions 7; +show create table t3; +Table Create Table +t3 CREATE TABLE `t3` ( + `a` tinyint(4) NOT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +PARTITIONS 7 */ +insert into t3 values (127), (126), (125), (124), (-128), (-127), (1), (-1), (0); +select * from t3; +a +-1 +-127 +-128 +0 +1 +124 +125 +126 +127 +select * from t3 where a=125; +a +125 +delete from t3 where a=125; +select * from t3; +a +-1 +-127 +-128 +0 +1 +124 +126 +127 +drop table t3; +create table t1 (a smallint unsigned not null, primary key(a)) engine='TokuDB' +partition by key (a) ( +partition pa1 max_rows=20 min_rows=2, +partition pa2 max_rows=30 min_rows=3, +partition pa3 max_rows=30 min_rows=4, +partition pa4 max_rows=40 min_rows=2); +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` smallint(5) unsigned NOT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +(PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 ENGINE = TokuDB, + PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 ENGINE = TokuDB, + PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 ENGINE = TokuDB, + PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 ENGINE = TokuDB) */ +insert into t1 values (65535), (65534), (65533), (65532), (1), (2), (256); +select * from t1; +a +1 +2 +256 +65532 +65533 +65534 +65535 +select * from t1 where a=65533; +a +65533 +delete from t1 where a=65533; +select * from t1; +a +1 +2 +256 +65532 +65534 +65535 +drop table t1; +create table t2 (a smallint unsigned not null, primary key(a)) engine='TokuDB' +partition by key (a) partitions 8; +show create table t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` smallint(5) unsigned NOT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +PARTITIONS 8 */ +insert into t2 values (65535), (65534), (65533), (65532); +select * from t2; +a +65532 +65533 +65534 +65535 +select * from t2 where a=65533; +a +65533 +delete from t2 where a=65533; +select * from t2; +a +65532 +65534 +65535 +delete from t2; +1024 inserts; +select count(*) from t2; +count(*) +1024 +drop table t2; +create table t3 (a smallint not null, primary key(a)) engine='TokuDB' +partition by key (a) partitions 7; +show create table t3; +Table Create Table +t3 CREATE TABLE `t3` ( + `a` smallint(6) NOT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +PARTITIONS 7 */ +insert into t3 values (32767), (32766), (32765), (32764), (-32768), (-32767), (1), (-1), (0); +select * from t3; +a +-1 +-32767 +-32768 +0 +1 +32764 +32765 +32766 +32767 +select * from t3 where a=32765; +a +32765 +delete from t3 where a=32765; +select * from t3; +a +-1 +-32767 +-32768 +0 +1 +32764 +32766 +32767 +drop table t3; +create table t1 (a int unsigned not null, primary key(a)) engine='TokuDB' +partition by key (a) ( +partition pa1 max_rows=20 min_rows=2, +partition pa2 max_rows=30 min_rows=3, +partition pa3 max_rows=30 min_rows=4, +partition pa4 max_rows=40 min_rows=2); +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(10) unsigned NOT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +(PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 ENGINE = TokuDB, + PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 ENGINE = TokuDB, + PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 ENGINE = TokuDB, + PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 ENGINE = TokuDB) */ +insert into t1 values (4294967295), (4294967294), (4294967293), (4294967292), (1), (2), (65535); +select * from t1; +a +1 +2 +4294967292 +4294967293 +4294967294 +4294967295 +65535 +select * from t1 where a=4294967293; +a +4294967293 +delete from t1 where a=4294967293; +select * from t1; +a +1 +2 +4294967292 +4294967294 +4294967295 +65535 +drop table t1; +create table t2 (a int unsigned not null, primary key(a)) engine='TokuDB' +partition by key (a) partitions 8; +show create table t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` int(10) unsigned NOT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +PARTITIONS 8 */ +insert into t2 values (4294967295), (4294967294), (4294967293), (4294967292); +select * from t2; +a +4294967292 +4294967293 +4294967294 +4294967295 +select * from t2 where a=4294967293; +a +4294967293 +delete from t2 where a=4294967293; +select * from t2; +a +4294967292 +4294967294 +4294967295 +delete from t2; +1024 inserts; +select count(*) from t2; +count(*) +1024 +drop table t2; +create table t3 (a int not null, primary key(a)) engine='TokuDB' +partition by key (a) partitions 7; +show create table t3; +Table Create Table +t3 CREATE TABLE `t3` ( + `a` int(11) NOT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +PARTITIONS 7 */ +insert into t3 values (2147483647), (2147483646), (2147483645), (2147483644), (-2147483648), (-2147483647), (1), (-1), (0); +select * from t3; +a +-1 +-2147483647 +-2147483648 +0 +1 +2147483644 +2147483645 +2147483646 +2147483647 +select * from t3 where a=2147483645; +a +2147483645 +delete from t3 where a=2147483645; +select * from t3; +a +-1 +-2147483647 +-2147483648 +0 +1 +2147483644 +2147483646 +2147483647 +drop table t3; +create table t1 (a mediumint unsigned not null, primary key(a)) engine='TokuDB' +partition by key (a) ( +partition pa1 max_rows=20 min_rows=2, +partition pa2 max_rows=30 min_rows=3, +partition pa3 max_rows=30 min_rows=4, +partition pa4 max_rows=40 min_rows=2); +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` mediumint(8) unsigned NOT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +(PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 ENGINE = TokuDB, + PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 ENGINE = TokuDB, + PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 ENGINE = TokuDB, + PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 ENGINE = TokuDB) */ +insert into t1 values (16777215), (16777214), (16777213), (16777212), (1), (2), (65535); +select * from t1; +a +1 +16777212 +16777213 +16777214 +16777215 +2 +65535 +select * from t1 where a=16777213; +a +16777213 +delete from t1 where a=16777213; +select * from t1; +a +1 +16777212 +16777214 +16777215 +2 +65535 +drop table t1; +create table t2 (a mediumint unsigned not null, primary key(a)) engine='TokuDB' +partition by key (a) partitions 8; +show create table t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` mediumint(8) unsigned NOT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +PARTITIONS 8 */ +insert into t2 values (16777215), (16777214), (16777213), (16777212); +select * from t2; +a +16777212 +16777213 +16777214 +16777215 +select * from t2 where a=16777213; +a +16777213 +delete from t2 where a=16777213; +select * from t2; +a +16777212 +16777214 +16777215 +delete from t2; +1024 inserts; +select count(*) from t2; +count(*) +1024 +drop table t2; +create table t3 (a mediumint not null, primary key(a)) engine='TokuDB' +partition by key (a) partitions 7; +show create table t3; +Table Create Table +t3 CREATE TABLE `t3` ( + `a` mediumint(9) NOT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +PARTITIONS 7 */ +insert into t3 values (8388607), (8388606), (8388605), (8388604), (-8388608), (-8388607), (1), (-1), (0); +select * from t3; +a +-1 +-8388607 +-8388608 +0 +1 +8388604 +8388605 +8388606 +8388607 +select * from t3 where a=8388605; +a +8388605 +delete from t3 where a=8388605; +select * from t3; +a +-1 +-8388607 +-8388608 +0 +1 +8388604 +8388606 +8388607 +drop table t3; +create table t1 (a bigint unsigned not null, primary key(a)) engine='TokuDB' +partition by key (a) ( +partition pa1 max_rows=20 min_rows=2, +partition pa2 max_rows=30 min_rows=3, +partition pa3 max_rows=30 min_rows=4, +partition pa4 max_rows=40 min_rows=2); +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` bigint(20) unsigned NOT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +(PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 ENGINE = TokuDB, + PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 ENGINE = TokuDB, + PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 ENGINE = TokuDB, + PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 ENGINE = TokuDB) */ +insert into t1 values (18446744073709551615), (0xFFFFFFFFFFFFFFFE), (18446744073709551613), (18446744073709551612), (1), (2), (65535); +select * from t1; +a +1 +18446744073709551612 +18446744073709551613 +18446744073709551614 +18446744073709551615 +2 +65535 +select * from t1 where a=-2; +a +delete from t1 where a=-2; +select * from t1; +a +1 +18446744073709551612 +18446744073709551613 +18446744073709551614 +18446744073709551615 +2 +65535 +select * from t1 where a=18446744073709551615; +a +18446744073709551615 +delete from t1 where a=18446744073709551615; +select * from t1; +a +1 +18446744073709551612 +18446744073709551613 +18446744073709551614 +2 +65535 +drop table t1; +create table t2 (a bigint unsigned not null, primary key(a)) engine='TokuDB' +partition by key (a) partitions 8; +show create table t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` bigint(20) unsigned NOT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +PARTITIONS 8 */ +insert into t2 values (18446744073709551615), (0xFFFFFFFFFFFFFFFE), (18446744073709551613), (18446744073709551612); +select * from t2; +a +18446744073709551612 +18446744073709551613 +18446744073709551614 +18446744073709551615 +select * from t2 where a=18446744073709551615; +a +18446744073709551615 +delete from t2 where a=18446744073709551615; +select * from t2; +a +18446744073709551612 +18446744073709551613 +18446744073709551614 +delete from t2; +1024 inserts; +select count(*) from t2; +count(*) +1024 +drop table t2; +create table t3 (a bigint not null, primary key(a)) engine='TokuDB' +partition by key (a) partitions 7; +show create table t3; +Table Create Table +t3 CREATE TABLE `t3` ( + `a` bigint(20) NOT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +PARTITIONS 7 */ +insert into t3 values (9223372036854775807), (9223372036854775806), (9223372036854775805), (9223372036854775804), (-9223372036854775808), (-9223372036854775807), (1), (-1), (0); +select * from t3; +a +-1 +-9223372036854775807 +-9223372036854775808 +0 +1 +9223372036854775804 +9223372036854775805 +9223372036854775806 +9223372036854775807 +select * from t3 where a=9223372036854775806; +a +9223372036854775806 +delete from t3 where a=9223372036854775806; +select * from t3; +a +-1 +-9223372036854775807 +-9223372036854775808 +0 +1 +9223372036854775804 +9223372036854775805 +9223372036854775807 +drop table t3; diff --git a/mysql-test/suite/tokudb.parts/r-native/partition_max_parts_hash_tokudb.result b/mysql-test/suite/tokudb.parts/r-native/partition_max_parts_hash_tokudb.result new file mode 100644 index 000000000000..dbd64fe61206 --- /dev/null +++ b/mysql-test/suite/tokudb.parts/r-native/partition_max_parts_hash_tokudb.result @@ -0,0 +1,125 @@ +create table t2 (a int not null, primary key(a)) engine='TokuDB' +partition by hash (a) partitions 8192; +show create table t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` int(11) NOT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (a) +PARTITIONS 8192 */ +65535 inserts; +select count(*) from t2; +count(*) +65535 +select count(*) from t2 partition (p0); +count(*) +7 +select count(*) from t2 partition (p10); +count(*) +8 +select count(*) from t2 partition (p100); +count(*) +8 +select count(*) from t2 partition (p1000); +count(*) +8 +select count(*) from t2 partition (p4000); +count(*) +8 +select count(*) from t2 partition (p8000); +count(*) +8 +select count(*) from t2 partition (p8191); +count(*) +8 +select * from t2 partition (p0); +a +8192 +16384 +24576 +32768 +40960 +49152 +57344 +select * from t2 partition (p10); +a +10 +8202 +16394 +24586 +32778 +40970 +49162 +57354 +select * from t2 partition (p100); +a +100 +8292 +16484 +24676 +32868 +41060 +49252 +57444 +select * from t2 partition (p1000); +a +1000 +9192 +17384 +25576 +33768 +41960 +50152 +58344 +select * from t2 partition (p4000); +a +4000 +12192 +20384 +28576 +36768 +44960 +53152 +61344 +select * from t2 partition (p8000); +a +8000 +16192 +24384 +32576 +40768 +48960 +57152 +65344 +select * from t2 partition (p8191); +a +8191 +16383 +24575 +32767 +40959 +49151 +57343 +65535 +delete from t2 partition (p8191); +select * from t2 partition (p8191); +a +insert into t2 partition (p8191) values (8191), (65535); +select * from t2 partition (p8191); +a +8191 +65535 +update t2 partition (p8191) set a=16383 where a= 8191; +select * from t2 partition (p8191); +a +16383 +65535 +load data infile 'MYSQL_TMP_DIR/data01' into table t2 partition (p8191) fields terminated by ','; +select * from t2 partition (p8191); +a +8191 +16383 +57343 +65535 +drop table t2; diff --git a/mysql-test/suite/tokudb.parts/r-native/partition_max_parts_inv_tokudb.result b/mysql-test/suite/tokudb.parts/r-native/partition_max_parts_inv_tokudb.result new file mode 100644 index 000000000000..9e606d39c409 --- /dev/null +++ b/mysql-test/suite/tokudb.parts/r-native/partition_max_parts_inv_tokudb.result @@ -0,0 +1,16430 @@ +create table t2 (a int not null, primary key(a)) engine='TokuDB' +partition by key (a) 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 t2 (a int not null, primary key(a)) engine='TokuDB' +partition by key (a) partitions ten; +ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ten' at line 2 +create table t2 (a int not null, primary key(a)) engine='TokuDB' +partition by key (a) partitions 24.56; +ERROR 42000: Only integers allowed as number here near '24.56' at line 2 +create table t2 (a int not null, primary key(a)) engine='TokuDB' +partition by key (a) 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 t2 (a int not null, primary key(a)) engine='TokuDB' +partition by key (a) partitions 0; +ERROR HY000: Number of partitions = 0 is not an allowed value +create table t2 (a int not null, primary key(a)) engine='TokuDB' +partition by key (a) partitions 8193; +ERROR HY000: Too many partitions (including subpartitions) were defined +create table t2 (a int not null, primary key(a)) engine='TokuDB' +partition by hash (a) 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 t2 (a int not null, primary key(a)) engine='TokuDB' +partition by hash (a) partitions ten; +ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ten' at line 2 +create table t2 (a int not null, primary key(a)) engine='TokuDB' +partition by hash (a) partitions 24.56; +ERROR 42000: Only integers allowed as number here near '24.56' at line 2 +create table t2 (a int not null, primary key(a)) engine='TokuDB' +partition by hash (a) 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 t2 (a int not null, primary key(a)) engine='TokuDB' +partition by hash (a) partitions 0; +ERROR HY000: Number of partitions = 0 is not an allowed value +create table t2 (a int not null, primary key(a)) engine='TokuDB' +partition by hash (a) partitions 8193; +ERROR HY000: Too many partitions (including subpartitions) were defined +create table t2 (a int) engine='TokuDB' +partition by range (a) ( +PARTITION p0 VALUES LESS THAN (8), +PARTITION p1 VALUES LESS THAN (16), +PARTITION p2 VALUES LESS THAN (24), +PARTITION p3 VALUES LESS THAN (32), +PARTITION p4 VALUES LESS THAN (40), +PARTITION p5 VALUES LESS THAN (48), +PARTITION p6 VALUES LESS THAN (56), +PARTITION p7 VALUES LESS THAN (64), +PARTITION p8 VALUES LESS THAN (72), +PARTITION p9 VALUES LESS THAN (80), +PARTITION p10 VALUES LESS THAN (88), +PARTITION p11 VALUES LESS THAN (96), +PARTITION p12 VALUES LESS THAN (104), +PARTITION p13 VALUES LESS THAN (112), +PARTITION p14 VALUES LESS THAN (120), +PARTITION p15 VALUES LESS THAN (128), +PARTITION p16 VALUES LESS THAN (136), +PARTITION p17 VALUES LESS THAN (144), +PARTITION p18 VALUES LESS THAN (152), +PARTITION p19 VALUES LESS THAN (160), +PARTITION p20 VALUES LESS THAN (168), +PARTITION p21 VALUES LESS THAN (176), +PARTITION p22 VALUES LESS THAN (184), +PARTITION p23 VALUES LESS THAN (192), +PARTITION p24 VALUES LESS THAN (200), +PARTITION p25 VALUES LESS THAN (208), +PARTITION p26 VALUES LESS THAN (216), +PARTITION p27 VALUES LESS THAN (224), +PARTITION p28 VALUES LESS THAN (232), +PARTITION p29 VALUES LESS THAN (240), +PARTITION p30 VALUES LESS THAN (248), +PARTITION p31 VALUES LESS THAN (256), +PARTITION p32 VALUES LESS THAN (264), +PARTITION p33 VALUES LESS THAN (272), +PARTITION p34 VALUES LESS THAN (280), +PARTITION p35 VALUES LESS THAN (288), +PARTITION p36 VALUES LESS THAN (296), +PARTITION p37 VALUES LESS THAN (304), +PARTITION p38 VALUES LESS THAN (312), +PARTITION p39 VALUES LESS THAN (320), +PARTITION p40 VALUES LESS THAN (328), +PARTITION p41 VALUES LESS THAN (336), +PARTITION p42 VALUES LESS THAN (344), +PARTITION p43 VALUES LESS THAN (352), +PARTITION p44 VALUES LESS THAN (360), +PARTITION p45 VALUES LESS THAN (368), +PARTITION p46 VALUES LESS THAN (376), +PARTITION p47 VALUES LESS THAN (384), +PARTITION p48 VALUES LESS THAN (392), +PARTITION p49 VALUES LESS THAN (400), +PARTITION p50 VALUES LESS THAN (408), +PARTITION p51 VALUES LESS THAN (416), +PARTITION p52 VALUES LESS THAN (424), +PARTITION p53 VALUES LESS THAN (432), +PARTITION p54 VALUES LESS THAN (440), +PARTITION p55 VALUES LESS THAN (448), +PARTITION p56 VALUES LESS THAN (456), +PARTITION p57 VALUES LESS THAN (464), +PARTITION p58 VALUES LESS THAN (472), +PARTITION p59 VALUES LESS THAN (480), +PARTITION p60 VALUES LESS THAN (488), +PARTITION p61 VALUES LESS THAN (496), +PARTITION p62 VALUES LESS THAN (504), +PARTITION p63 VALUES LESS THAN (512), +PARTITION p64 VALUES LESS THAN (520), +PARTITION p65 VALUES LESS THAN (528), +PARTITION p66 VALUES LESS THAN (536), +PARTITION p67 VALUES LESS THAN (544), +PARTITION p68 VALUES LESS THAN (552), +PARTITION p69 VALUES LESS THAN (560), +PARTITION p70 VALUES LESS THAN (568), +PARTITION p71 VALUES LESS THAN (576), +PARTITION p72 VALUES LESS THAN (584), +PARTITION p73 VALUES LESS THAN (592), +PARTITION p74 VALUES LESS THAN (600), +PARTITION p75 VALUES LESS THAN (608), +PARTITION p76 VALUES LESS THAN (616), +PARTITION p77 VALUES LESS THAN (624), +PARTITION p78 VALUES LESS THAN (632), +PARTITION p79 VALUES LESS THAN (640), +PARTITION p80 VALUES LESS THAN (648), +PARTITION p81 VALUES LESS THAN (656), +PARTITION p82 VALUES LESS THAN (664), +PARTITION p83 VALUES LESS THAN (672), +PARTITION p84 VALUES LESS THAN (680), +PARTITION p85 VALUES LESS THAN (688), +PARTITION p86 VALUES LESS THAN (696), +PARTITION p87 VALUES LESS THAN (704), +PARTITION p88 VALUES LESS THAN (712), +PARTITION p89 VALUES LESS THAN (720), +PARTITION p90 VALUES LESS THAN (728), +PARTITION p91 VALUES LESS THAN (736), +PARTITION p92 VALUES LESS THAN (744), +PARTITION p93 VALUES LESS THAN (752), +PARTITION p94 VALUES LESS THAN (760), +PARTITION p95 VALUES LESS THAN (768), +PARTITION p96 VALUES LESS THAN (776), +PARTITION p97 VALUES LESS THAN (784), +PARTITION p98 VALUES LESS THAN (792), +PARTITION p99 VALUES LESS THAN (800), +PARTITION p100 VALUES LESS THAN (808), +PARTITION p101 VALUES LESS THAN (816), +PARTITION p102 VALUES LESS THAN (824), +PARTITION p103 VALUES LESS THAN (832), +PARTITION p104 VALUES LESS THAN (840), +PARTITION p105 VALUES LESS THAN (848), +PARTITION p106 VALUES LESS THAN (856), +PARTITION p107 VALUES LESS THAN (864), +PARTITION p108 VALUES LESS THAN (872), +PARTITION p109 VALUES LESS THAN (880), +PARTITION p110 VALUES LESS THAN (888), +PARTITION p111 VALUES LESS THAN (896), +PARTITION p112 VALUES LESS THAN (904), +PARTITION p113 VALUES LESS THAN (912), +PARTITION p114 VALUES LESS THAN (920), +PARTITION p115 VALUES LESS THAN (928), +PARTITION p116 VALUES LESS THAN (936), +PARTITION p117 VALUES LESS THAN (944), +PARTITION p118 VALUES LESS THAN (952), +PARTITION p119 VALUES LESS THAN (960), +PARTITION p120 VALUES LESS THAN (968), +PARTITION p121 VALUES LESS THAN (976), +PARTITION p122 VALUES LESS THAN (984), +PARTITION p123 VALUES LESS THAN (992), +PARTITION p124 VALUES LESS THAN (1000), +PARTITION p125 VALUES LESS THAN (1008), +PARTITION p126 VALUES LESS THAN (1016), +PARTITION p127 VALUES LESS THAN (1024), +PARTITION p128 VALUES LESS THAN (1032), +PARTITION p129 VALUES LESS THAN (1040), +PARTITION p130 VALUES LESS THAN (1048), +PARTITION p131 VALUES LESS THAN (1056), +PARTITION p132 VALUES LESS THAN (1064), +PARTITION p133 VALUES LESS THAN (1072), +PARTITION p134 VALUES LESS THAN (1080), +PARTITION p135 VALUES LESS THAN (1088), +PARTITION p136 VALUES LESS THAN (1096), +PARTITION p137 VALUES LESS THAN (1104), +PARTITION p138 VALUES LESS THAN (1112), +PARTITION p139 VALUES LESS THAN (1120), +PARTITION p140 VALUES LESS THAN (1128), +PARTITION p141 VALUES LESS THAN (1136), +PARTITION p142 VALUES LESS THAN (1144), +PARTITION p143 VALUES LESS THAN (1152), +PARTITION p144 VALUES LESS THAN (1160), +PARTITION p145 VALUES LESS THAN (1168), +PARTITION p146 VALUES LESS THAN (1176), +PARTITION p147 VALUES LESS THAN (1184), +PARTITION p148 VALUES LESS THAN (1192), +PARTITION p149 VALUES LESS THAN (1200), +PARTITION p150 VALUES LESS THAN (1208), +PARTITION p151 VALUES LESS THAN (1216), +PARTITION p152 VALUES LESS THAN (1224), +PARTITION p153 VALUES LESS THAN (1232), +PARTITION p154 VALUES LESS THAN (1240), +PARTITION p155 VALUES LESS THAN (1248), +PARTITION p156 VALUES LESS THAN (1256), +PARTITION p157 VALUES LESS THAN (1264), +PARTITION p158 VALUES LESS THAN (1272), +PARTITION p159 VALUES LESS THAN (1280), +PARTITION p160 VALUES LESS THAN (1288), +PARTITION p161 VALUES LESS THAN (1296), +PARTITION p162 VALUES LESS THAN (1304), +PARTITION p163 VALUES LESS THAN (1312), +PARTITION p164 VALUES LESS THAN (1320), +PARTITION p165 VALUES LESS THAN (1328), +PARTITION p166 VALUES LESS THAN (1336), +PARTITION p167 VALUES LESS THAN (1344), +PARTITION p168 VALUES LESS THAN (1352), +PARTITION p169 VALUES LESS THAN (1360), +PARTITION p170 VALUES LESS THAN (1368), +PARTITION p171 VALUES LESS THAN (1376), +PARTITION p172 VALUES LESS THAN (1384), +PARTITION p173 VALUES LESS THAN (1392), +PARTITION p174 VALUES LESS THAN (1400), +PARTITION p175 VALUES LESS THAN (1408), +PARTITION p176 VALUES LESS THAN (1416), +PARTITION p177 VALUES LESS THAN (1424), +PARTITION p178 VALUES LESS THAN (1432), +PARTITION p179 VALUES LESS THAN (1440), +PARTITION p180 VALUES LESS THAN (1448), +PARTITION p181 VALUES LESS THAN (1456), +PARTITION p182 VALUES LESS THAN (1464), +PARTITION p183 VALUES LESS THAN (1472), +PARTITION p184 VALUES LESS THAN (1480), +PARTITION p185 VALUES LESS THAN (1488), +PARTITION p186 VALUES LESS THAN (1496), +PARTITION p187 VALUES LESS THAN (1504), +PARTITION p188 VALUES LESS THAN (1512), +PARTITION p189 VALUES LESS THAN (1520), +PARTITION p190 VALUES LESS THAN (1528), +PARTITION p191 VALUES LESS THAN (1536), +PARTITION p192 VALUES LESS THAN (1544), +PARTITION p193 VALUES LESS THAN (1552), +PARTITION p194 VALUES LESS THAN (1560), +PARTITION p195 VALUES LESS THAN (1568), +PARTITION p196 VALUES LESS THAN (1576), +PARTITION p197 VALUES LESS THAN (1584), +PARTITION p198 VALUES LESS THAN (1592), +PARTITION p199 VALUES LESS THAN (1600), +PARTITION p200 VALUES LESS THAN (1608), +PARTITION p201 VALUES LESS THAN (1616), +PARTITION p202 VALUES LESS THAN (1624), +PARTITION p203 VALUES LESS THAN (1632), +PARTITION p204 VALUES LESS THAN (1640), +PARTITION p205 VALUES LESS THAN (1648), +PARTITION p206 VALUES LESS THAN (1656), +PARTITION p207 VALUES LESS THAN (1664), +PARTITION p208 VALUES LESS THAN (1672), +PARTITION p209 VALUES LESS THAN (1680), +PARTITION p210 VALUES LESS THAN (1688), +PARTITION p211 VALUES LESS THAN (1696), +PARTITION p212 VALUES LESS THAN (1704), +PARTITION p213 VALUES LESS THAN (1712), +PARTITION p214 VALUES LESS THAN (1720), +PARTITION p215 VALUES LESS THAN (1728), +PARTITION p216 VALUES LESS THAN (1736), +PARTITION p217 VALUES LESS THAN (1744), +PARTITION p218 VALUES LESS THAN (1752), +PARTITION p219 VALUES LESS THAN (1760), +PARTITION p220 VALUES LESS THAN (1768), +PARTITION p221 VALUES LESS THAN (1776), +PARTITION p222 VALUES LESS THAN (1784), +PARTITION p223 VALUES LESS THAN (1792), +PARTITION p224 VALUES LESS THAN (1800), +PARTITION p225 VALUES LESS THAN (1808), +PARTITION p226 VALUES LESS THAN (1816), +PARTITION p227 VALUES LESS THAN (1824), +PARTITION p228 VALUES LESS THAN (1832), +PARTITION p229 VALUES LESS THAN (1840), +PARTITION p230 VALUES LESS THAN (1848), +PARTITION p231 VALUES LESS THAN (1856), +PARTITION p232 VALUES LESS THAN (1864), +PARTITION p233 VALUES LESS THAN (1872), +PARTITION p234 VALUES LESS THAN (1880), +PARTITION p235 VALUES LESS THAN (1888), +PARTITION p236 VALUES LESS THAN (1896), +PARTITION p237 VALUES LESS THAN (1904), +PARTITION p238 VALUES LESS THAN (1912), +PARTITION p239 VALUES LESS THAN (1920), +PARTITION p240 VALUES LESS THAN (1928), +PARTITION p241 VALUES LESS THAN (1936), +PARTITION p242 VALUES LESS THAN (1944), +PARTITION p243 VALUES LESS THAN (1952), +PARTITION p244 VALUES LESS THAN (1960), +PARTITION p245 VALUES LESS THAN (1968), +PARTITION p246 VALUES LESS THAN (1976), +PARTITION p247 VALUES LESS THAN (1984), +PARTITION p248 VALUES LESS THAN (1992), +PARTITION p249 VALUES LESS THAN (2000), +PARTITION p250 VALUES LESS THAN (2008), +PARTITION p251 VALUES LESS THAN (2016), +PARTITION p252 VALUES LESS THAN (2024), +PARTITION p253 VALUES LESS THAN (2032), +PARTITION p254 VALUES LESS THAN (2040), +PARTITION p255 VALUES LESS THAN (2048), +PARTITION p256 VALUES LESS THAN (2056), +PARTITION p257 VALUES LESS THAN (2064), +PARTITION p258 VALUES LESS THAN (2072), +PARTITION p259 VALUES LESS THAN (2080), +PARTITION p260 VALUES LESS THAN (2088), +PARTITION p261 VALUES LESS THAN (2096), +PARTITION p262 VALUES LESS THAN (2104), +PARTITION p263 VALUES LESS THAN (2112), +PARTITION p264 VALUES LESS THAN (2120), +PARTITION p265 VALUES LESS THAN (2128), +PARTITION p266 VALUES LESS THAN (2136), +PARTITION p267 VALUES LESS THAN (2144), +PARTITION p268 VALUES LESS THAN (2152), +PARTITION p269 VALUES LESS THAN (2160), +PARTITION p270 VALUES LESS THAN (2168), +PARTITION p271 VALUES LESS THAN (2176), +PARTITION p272 VALUES LESS THAN (2184), +PARTITION p273 VALUES LESS THAN (2192), +PARTITION p274 VALUES LESS THAN (2200), +PARTITION p275 VALUES LESS THAN (2208), +PARTITION p276 VALUES LESS THAN (2216), +PARTITION p277 VALUES LESS THAN (2224), +PARTITION p278 VALUES LESS THAN (2232), +PARTITION p279 VALUES LESS THAN (2240), +PARTITION p280 VALUES LESS THAN (2248), +PARTITION p281 VALUES LESS THAN (2256), +PARTITION p282 VALUES LESS THAN (2264), +PARTITION p283 VALUES LESS THAN (2272), +PARTITION p284 VALUES LESS THAN (2280), +PARTITION p285 VALUES LESS THAN (2288), +PARTITION p286 VALUES LESS THAN (2296), +PARTITION p287 VALUES LESS THAN (2304), +PARTITION p288 VALUES LESS THAN (2312), +PARTITION p289 VALUES LESS THAN (2320), +PARTITION p290 VALUES LESS THAN (2328), +PARTITION p291 VALUES LESS THAN (2336), +PARTITION p292 VALUES LESS THAN (2344), +PARTITION p293 VALUES LESS THAN (2352), +PARTITION p294 VALUES LESS THAN (2360), +PARTITION p295 VALUES LESS THAN (2368), +PARTITION p296 VALUES LESS THAN (2376), +PARTITION p297 VALUES LESS THAN (2384), +PARTITION p298 VALUES LESS THAN (2392), +PARTITION p299 VALUES LESS THAN (2400), +PARTITION p300 VALUES LESS THAN (2408), +PARTITION p301 VALUES LESS THAN (2416), +PARTITION p302 VALUES LESS THAN (2424), +PARTITION p303 VALUES LESS THAN (2432), +PARTITION p304 VALUES LESS THAN (2440), +PARTITION p305 VALUES LESS THAN (2448), +PARTITION p306 VALUES LESS THAN (2456), +PARTITION p307 VALUES LESS THAN (2464), +PARTITION p308 VALUES LESS THAN (2472), +PARTITION p309 VALUES LESS THAN (2480), +PARTITION p310 VALUES LESS THAN (2488), +PARTITION p311 VALUES LESS THAN (2496), +PARTITION p312 VALUES LESS THAN (2504), +PARTITION p313 VALUES LESS THAN (2512), +PARTITION p314 VALUES LESS THAN (2520), +PARTITION p315 VALUES LESS THAN (2528), +PARTITION p316 VALUES LESS THAN (2536), +PARTITION p317 VALUES LESS THAN (2544), +PARTITION p318 VALUES LESS THAN (2552), +PARTITION p319 VALUES LESS THAN (2560), +PARTITION p320 VALUES LESS THAN (2568), +PARTITION p321 VALUES LESS THAN (2576), +PARTITION p322 VALUES LESS THAN (2584), +PARTITION p323 VALUES LESS THAN (2592), +PARTITION p324 VALUES LESS THAN (2600), +PARTITION p325 VALUES LESS THAN (2608), +PARTITION p326 VALUES LESS THAN (2616), +PARTITION p327 VALUES LESS THAN (2624), +PARTITION p328 VALUES LESS THAN (2632), +PARTITION p329 VALUES LESS THAN (2640), +PARTITION p330 VALUES LESS THAN (2648), +PARTITION p331 VALUES LESS THAN (2656), +PARTITION p332 VALUES LESS THAN (2664), +PARTITION p333 VALUES LESS THAN (2672), +PARTITION p334 VALUES LESS THAN (2680), +PARTITION p335 VALUES LESS THAN (2688), +PARTITION p336 VALUES LESS THAN (2696), +PARTITION p337 VALUES LESS THAN (2704), +PARTITION p338 VALUES LESS THAN (2712), +PARTITION p339 VALUES LESS THAN (2720), +PARTITION p340 VALUES LESS THAN (2728), +PARTITION p341 VALUES LESS THAN (2736), +PARTITION p342 VALUES LESS THAN (2744), +PARTITION p343 VALUES LESS THAN (2752), +PARTITION p344 VALUES LESS THAN (2760), +PARTITION p345 VALUES LESS THAN (2768), +PARTITION p346 VALUES LESS THAN (2776), +PARTITION p347 VALUES LESS THAN (2784), +PARTITION p348 VALUES LESS THAN (2792), +PARTITION p349 VALUES LESS THAN (2800), +PARTITION p350 VALUES LESS THAN (2808), +PARTITION p351 VALUES LESS THAN (2816), +PARTITION p352 VALUES LESS THAN (2824), +PARTITION p353 VALUES LESS THAN (2832), +PARTITION p354 VALUES LESS THAN (2840), +PARTITION p355 VALUES LESS THAN (2848), +PARTITION p356 VALUES LESS THAN (2856), +PARTITION p357 VALUES LESS THAN (2864), +PARTITION p358 VALUES LESS THAN (2872), +PARTITION p359 VALUES LESS THAN (2880), +PARTITION p360 VALUES LESS THAN (2888), +PARTITION p361 VALUES LESS THAN (2896), +PARTITION p362 VALUES LESS THAN (2904), +PARTITION p363 VALUES LESS THAN (2912), +PARTITION p364 VALUES LESS THAN (2920), +PARTITION p365 VALUES LESS THAN (2928), +PARTITION p366 VALUES LESS THAN (2936), +PARTITION p367 VALUES LESS THAN (2944), +PARTITION p368 VALUES LESS THAN (2952), +PARTITION p369 VALUES LESS THAN (2960), +PARTITION p370 VALUES LESS THAN (2968), +PARTITION p371 VALUES LESS THAN (2976), +PARTITION p372 VALUES LESS THAN (2984), +PARTITION p373 VALUES LESS THAN (2992), +PARTITION p374 VALUES LESS THAN (3000), +PARTITION p375 VALUES LESS THAN (3008), +PARTITION p376 VALUES LESS THAN (3016), +PARTITION p377 VALUES LESS THAN (3024), +PARTITION p378 VALUES LESS THAN (3032), +PARTITION p379 VALUES LESS THAN (3040), +PARTITION p380 VALUES LESS THAN (3048), +PARTITION p381 VALUES LESS THAN (3056), +PARTITION p382 VALUES LESS THAN (3064), +PARTITION p383 VALUES LESS THAN (3072), +PARTITION p384 VALUES LESS THAN (3080), +PARTITION p385 VALUES LESS THAN (3088), +PARTITION p386 VALUES LESS THAN (3096), +PARTITION p387 VALUES LESS THAN (3104), +PARTITION p388 VALUES LESS THAN (3112), +PARTITION p389 VALUES LESS THAN (3120), +PARTITION p390 VALUES LESS THAN (3128), +PARTITION p391 VALUES LESS THAN (3136), +PARTITION p392 VALUES LESS THAN (3144), +PARTITION p393 VALUES LESS THAN (3152), +PARTITION p394 VALUES LESS THAN (3160), +PARTITION p395 VALUES LESS THAN (3168), +PARTITION p396 VALUES LESS THAN (3176), +PARTITION p397 VALUES LESS THAN (3184), +PARTITION p398 VALUES LESS THAN (3192), +PARTITION p399 VALUES LESS THAN (3200), +PARTITION p400 VALUES LESS THAN (3208), +PARTITION p401 VALUES LESS THAN (3216), +PARTITION p402 VALUES LESS THAN (3224), +PARTITION p403 VALUES LESS THAN (3232), +PARTITION p404 VALUES LESS THAN (3240), +PARTITION p405 VALUES LESS THAN (3248), +PARTITION p406 VALUES LESS THAN (3256), +PARTITION p407 VALUES LESS THAN (3264), +PARTITION p408 VALUES LESS THAN (3272), +PARTITION p409 VALUES LESS THAN (3280), +PARTITION p410 VALUES LESS THAN (3288), +PARTITION p411 VALUES LESS THAN (3296), +PARTITION p412 VALUES LESS THAN (3304), +PARTITION p413 VALUES LESS THAN (3312), +PARTITION p414 VALUES LESS THAN (3320), +PARTITION p415 VALUES LESS THAN (3328), +PARTITION p416 VALUES LESS THAN (3336), +PARTITION p417 VALUES LESS THAN (3344), +PARTITION p418 VALUES LESS THAN (3352), +PARTITION p419 VALUES LESS THAN (3360), +PARTITION p420 VALUES LESS THAN (3368), +PARTITION p421 VALUES LESS THAN (3376), +PARTITION p422 VALUES LESS THAN (3384), +PARTITION p423 VALUES LESS THAN (3392), +PARTITION p424 VALUES LESS THAN (3400), +PARTITION p425 VALUES LESS THAN (3408), +PARTITION p426 VALUES LESS THAN (3416), +PARTITION p427 VALUES LESS THAN (3424), +PARTITION p428 VALUES LESS THAN (3432), +PARTITION p429 VALUES LESS THAN (3440), +PARTITION p430 VALUES LESS THAN (3448), +PARTITION p431 VALUES LESS THAN (3456), +PARTITION p432 VALUES LESS THAN (3464), +PARTITION p433 VALUES LESS THAN (3472), +PARTITION p434 VALUES LESS THAN (3480), +PARTITION p435 VALUES LESS THAN (3488), +PARTITION p436 VALUES LESS THAN (3496), +PARTITION p437 VALUES LESS THAN (3504), +PARTITION p438 VALUES LESS THAN (3512), +PARTITION p439 VALUES LESS THAN (3520), +PARTITION p440 VALUES LESS THAN (3528), +PARTITION p441 VALUES LESS THAN (3536), +PARTITION p442 VALUES LESS THAN (3544), +PARTITION p443 VALUES LESS THAN (3552), +PARTITION p444 VALUES LESS THAN (3560), +PARTITION p445 VALUES LESS THAN (3568), +PARTITION p446 VALUES LESS THAN (3576), +PARTITION p447 VALUES LESS THAN (3584), +PARTITION p448 VALUES LESS THAN (3592), +PARTITION p449 VALUES LESS THAN (3600), +PARTITION p450 VALUES LESS THAN (3608), +PARTITION p451 VALUES LESS THAN (3616), +PARTITION p452 VALUES LESS THAN (3624), +PARTITION p453 VALUES LESS THAN (3632), +PARTITION p454 VALUES LESS THAN (3640), +PARTITION p455 VALUES LESS THAN (3648), +PARTITION p456 VALUES LESS THAN (3656), +PARTITION p457 VALUES LESS THAN (3664), +PARTITION p458 VALUES LESS THAN (3672), +PARTITION p459 VALUES LESS THAN (3680), +PARTITION p460 VALUES LESS THAN (3688), +PARTITION p461 VALUES LESS THAN (3696), +PARTITION p462 VALUES LESS THAN (3704), +PARTITION p463 VALUES LESS THAN (3712), +PARTITION p464 VALUES LESS THAN (3720), +PARTITION p465 VALUES LESS THAN (3728), +PARTITION p466 VALUES LESS THAN (3736), +PARTITION p467 VALUES LESS THAN (3744), +PARTITION p468 VALUES LESS THAN (3752), +PARTITION p469 VALUES LESS THAN (3760), +PARTITION p470 VALUES LESS THAN (3768), +PARTITION p471 VALUES LESS THAN (3776), +PARTITION p472 VALUES LESS THAN (3784), +PARTITION p473 VALUES LESS THAN (3792), +PARTITION p474 VALUES LESS THAN (3800), +PARTITION p475 VALUES LESS THAN (3808), +PARTITION p476 VALUES LESS THAN (3816), +PARTITION p477 VALUES LESS THAN (3824), +PARTITION p478 VALUES LESS THAN (3832), +PARTITION p479 VALUES LESS THAN (3840), +PARTITION p480 VALUES LESS THAN (3848), +PARTITION p481 VALUES LESS THAN (3856), +PARTITION p482 VALUES LESS THAN (3864), +PARTITION p483 VALUES LESS THAN (3872), +PARTITION p484 VALUES LESS THAN (3880), +PARTITION p485 VALUES LESS THAN (3888), +PARTITION p486 VALUES LESS THAN (3896), +PARTITION p487 VALUES LESS THAN (3904), +PARTITION p488 VALUES LESS THAN (3912), +PARTITION p489 VALUES LESS THAN (3920), +PARTITION p490 VALUES LESS THAN (3928), +PARTITION p491 VALUES LESS THAN (3936), +PARTITION p492 VALUES LESS THAN (3944), +PARTITION p493 VALUES LESS THAN (3952), +PARTITION p494 VALUES LESS THAN (3960), +PARTITION p495 VALUES LESS THAN (3968), +PARTITION p496 VALUES LESS THAN (3976), +PARTITION p497 VALUES LESS THAN (3984), +PARTITION p498 VALUES LESS THAN (3992), +PARTITION p499 VALUES LESS THAN (4000), +PARTITION p500 VALUES LESS THAN (4008), +PARTITION p501 VALUES LESS THAN (4016), +PARTITION p502 VALUES LESS THAN (4024), +PARTITION p503 VALUES LESS THAN (4032), +PARTITION p504 VALUES LESS THAN (4040), +PARTITION p505 VALUES LESS THAN (4048), +PARTITION p506 VALUES LESS THAN (4056), +PARTITION p507 VALUES LESS THAN (4064), +PARTITION p508 VALUES LESS THAN (4072), +PARTITION p509 VALUES LESS THAN (4080), +PARTITION p510 VALUES LESS THAN (4088), +PARTITION p511 VALUES LESS THAN (4096), +PARTITION p512 VALUES LESS THAN (4104), +PARTITION p513 VALUES LESS THAN (4112), +PARTITION p514 VALUES LESS THAN (4120), +PARTITION p515 VALUES LESS THAN (4128), +PARTITION p516 VALUES LESS THAN (4136), +PARTITION p517 VALUES LESS THAN (4144), +PARTITION p518 VALUES LESS THAN (4152), +PARTITION p519 VALUES LESS THAN (4160), +PARTITION p520 VALUES LESS THAN (4168), +PARTITION p521 VALUES LESS THAN (4176), +PARTITION p522 VALUES LESS THAN (4184), +PARTITION p523 VALUES LESS THAN (4192), +PARTITION p524 VALUES LESS THAN (4200), +PARTITION p525 VALUES LESS THAN (4208), +PARTITION p526 VALUES LESS THAN (4216), +PARTITION p527 VALUES LESS THAN (4224), +PARTITION p528 VALUES LESS THAN (4232), +PARTITION p529 VALUES LESS THAN (4240), +PARTITION p530 VALUES LESS THAN (4248), +PARTITION p531 VALUES LESS THAN (4256), +PARTITION p532 VALUES LESS THAN (4264), +PARTITION p533 VALUES LESS THAN (4272), +PARTITION p534 VALUES LESS THAN (4280), +PARTITION p535 VALUES LESS THAN (4288), +PARTITION p536 VALUES LESS THAN (4296), +PARTITION p537 VALUES LESS THAN (4304), +PARTITION p538 VALUES LESS THAN (4312), +PARTITION p539 VALUES LESS THAN (4320), +PARTITION p540 VALUES LESS THAN (4328), +PARTITION p541 VALUES LESS THAN (4336), +PARTITION p542 VALUES LESS THAN (4344), +PARTITION p543 VALUES LESS THAN (4352), +PARTITION p544 VALUES LESS THAN (4360), +PARTITION p545 VALUES LESS THAN (4368), +PARTITION p546 VALUES LESS THAN (4376), +PARTITION p547 VALUES LESS THAN (4384), +PARTITION p548 VALUES LESS THAN (4392), +PARTITION p549 VALUES LESS THAN (4400), +PARTITION p550 VALUES LESS THAN (4408), +PARTITION p551 VALUES LESS THAN (4416), +PARTITION p552 VALUES LESS THAN (4424), +PARTITION p553 VALUES LESS THAN (4432), +PARTITION p554 VALUES LESS THAN (4440), +PARTITION p555 VALUES LESS THAN (4448), +PARTITION p556 VALUES LESS THAN (4456), +PARTITION p557 VALUES LESS THAN (4464), +PARTITION p558 VALUES LESS THAN (4472), +PARTITION p559 VALUES LESS THAN (4480), +PARTITION p560 VALUES LESS THAN (4488), +PARTITION p561 VALUES LESS THAN (4496), +PARTITION p562 VALUES LESS THAN (4504), +PARTITION p563 VALUES LESS THAN (4512), +PARTITION p564 VALUES LESS THAN (4520), +PARTITION p565 VALUES LESS THAN (4528), +PARTITION p566 VALUES LESS THAN (4536), +PARTITION p567 VALUES LESS THAN (4544), +PARTITION p568 VALUES LESS THAN (4552), +PARTITION p569 VALUES LESS THAN (4560), +PARTITION p570 VALUES LESS THAN (4568), +PARTITION p571 VALUES LESS THAN (4576), +PARTITION p572 VALUES LESS THAN (4584), +PARTITION p573 VALUES LESS THAN (4592), +PARTITION p574 VALUES LESS THAN (4600), +PARTITION p575 VALUES LESS THAN (4608), +PARTITION p576 VALUES LESS THAN (4616), +PARTITION p577 VALUES LESS THAN (4624), +PARTITION p578 VALUES LESS THAN (4632), +PARTITION p579 VALUES LESS THAN (4640), +PARTITION p580 VALUES LESS THAN (4648), +PARTITION p581 VALUES LESS THAN (4656), +PARTITION p582 VALUES LESS THAN (4664), +PARTITION p583 VALUES LESS THAN (4672), +PARTITION p584 VALUES LESS THAN (4680), +PARTITION p585 VALUES LESS THAN (4688), +PARTITION p586 VALUES LESS THAN (4696), +PARTITION p587 VALUES LESS THAN (4704), +PARTITION p588 VALUES LESS THAN (4712), +PARTITION p589 VALUES LESS THAN (4720), +PARTITION p590 VALUES LESS THAN (4728), +PARTITION p591 VALUES LESS THAN (4736), +PARTITION p592 VALUES LESS THAN (4744), +PARTITION p593 VALUES LESS THAN (4752), +PARTITION p594 VALUES LESS THAN (4760), +PARTITION p595 VALUES LESS THAN (4768), +PARTITION p596 VALUES LESS THAN (4776), +PARTITION p597 VALUES LESS THAN (4784), +PARTITION p598 VALUES LESS THAN (4792), +PARTITION p599 VALUES LESS THAN (4800), +PARTITION p600 VALUES LESS THAN (4808), +PARTITION p601 VALUES LESS THAN (4816), +PARTITION p602 VALUES LESS THAN (4824), +PARTITION p603 VALUES LESS THAN (4832), +PARTITION p604 VALUES LESS THAN (4840), +PARTITION p605 VALUES LESS THAN (4848), +PARTITION p606 VALUES LESS THAN (4856), +PARTITION p607 VALUES LESS THAN (4864), +PARTITION p608 VALUES LESS THAN (4872), +PARTITION p609 VALUES LESS THAN (4880), +PARTITION p610 VALUES LESS THAN (4888), +PARTITION p611 VALUES LESS THAN (4896), +PARTITION p612 VALUES LESS THAN (4904), +PARTITION p613 VALUES LESS THAN (4912), +PARTITION p614 VALUES LESS THAN (4920), +PARTITION p615 VALUES LESS THAN (4928), +PARTITION p616 VALUES LESS THAN (4936), +PARTITION p617 VALUES LESS THAN (4944), +PARTITION p618 VALUES LESS THAN (4952), +PARTITION p619 VALUES LESS THAN (4960), +PARTITION p620 VALUES LESS THAN (4968), +PARTITION p621 VALUES LESS THAN (4976), +PARTITION p622 VALUES LESS THAN (4984), +PARTITION p623 VALUES LESS THAN (4992), +PARTITION p624 VALUES LESS THAN (5000), +PARTITION p625 VALUES LESS THAN (5008), +PARTITION p626 VALUES LESS THAN (5016), +PARTITION p627 VALUES LESS THAN (5024), +PARTITION p628 VALUES LESS THAN (5032), +PARTITION p629 VALUES LESS THAN (5040), +PARTITION p630 VALUES LESS THAN (5048), +PARTITION p631 VALUES LESS THAN (5056), +PARTITION p632 VALUES LESS THAN (5064), +PARTITION p633 VALUES LESS THAN (5072), +PARTITION p634 VALUES LESS THAN (5080), +PARTITION p635 VALUES LESS THAN (5088), +PARTITION p636 VALUES LESS THAN (5096), +PARTITION p637 VALUES LESS THAN (5104), +PARTITION p638 VALUES LESS THAN (5112), +PARTITION p639 VALUES LESS THAN (5120), +PARTITION p640 VALUES LESS THAN (5128), +PARTITION p641 VALUES LESS THAN (5136), +PARTITION p642 VALUES LESS THAN (5144), +PARTITION p643 VALUES LESS THAN (5152), +PARTITION p644 VALUES LESS THAN (5160), +PARTITION p645 VALUES LESS THAN (5168), +PARTITION p646 VALUES LESS THAN (5176), +PARTITION p647 VALUES LESS THAN (5184), +PARTITION p648 VALUES LESS THAN (5192), +PARTITION p649 VALUES LESS THAN (5200), +PARTITION p650 VALUES LESS THAN (5208), +PARTITION p651 VALUES LESS THAN (5216), +PARTITION p652 VALUES LESS THAN (5224), +PARTITION p653 VALUES LESS THAN (5232), +PARTITION p654 VALUES LESS THAN (5240), +PARTITION p655 VALUES LESS THAN (5248), +PARTITION p656 VALUES LESS THAN (5256), +PARTITION p657 VALUES LESS THAN (5264), +PARTITION p658 VALUES LESS THAN (5272), +PARTITION p659 VALUES LESS THAN (5280), +PARTITION p660 VALUES LESS THAN (5288), +PARTITION p661 VALUES LESS THAN (5296), +PARTITION p662 VALUES LESS THAN (5304), +PARTITION p663 VALUES LESS THAN (5312), +PARTITION p664 VALUES LESS THAN (5320), +PARTITION p665 VALUES LESS THAN (5328), +PARTITION p666 VALUES LESS THAN (5336), +PARTITION p667 VALUES LESS THAN (5344), +PARTITION p668 VALUES LESS THAN (5352), +PARTITION p669 VALUES LESS THAN (5360), +PARTITION p670 VALUES LESS THAN (5368), +PARTITION p671 VALUES LESS THAN (5376), +PARTITION p672 VALUES LESS THAN (5384), +PARTITION p673 VALUES LESS THAN (5392), +PARTITION p674 VALUES LESS THAN (5400), +PARTITION p675 VALUES LESS THAN (5408), +PARTITION p676 VALUES LESS THAN (5416), +PARTITION p677 VALUES LESS THAN (5424), +PARTITION p678 VALUES LESS THAN (5432), +PARTITION p679 VALUES LESS THAN (5440), +PARTITION p680 VALUES LESS THAN (5448), +PARTITION p681 VALUES LESS THAN (5456), +PARTITION p682 VALUES LESS THAN (5464), +PARTITION p683 VALUES LESS THAN (5472), +PARTITION p684 VALUES LESS THAN (5480), +PARTITION p685 VALUES LESS THAN (5488), +PARTITION p686 VALUES LESS THAN (5496), +PARTITION p687 VALUES LESS THAN (5504), +PARTITION p688 VALUES LESS THAN (5512), +PARTITION p689 VALUES LESS THAN (5520), +PARTITION p690 VALUES LESS THAN (5528), +PARTITION p691 VALUES LESS THAN (5536), +PARTITION p692 VALUES LESS THAN (5544), +PARTITION p693 VALUES LESS THAN (5552), +PARTITION p694 VALUES LESS THAN (5560), +PARTITION p695 VALUES LESS THAN (5568), +PARTITION p696 VALUES LESS THAN (5576), +PARTITION p697 VALUES LESS THAN (5584), +PARTITION p698 VALUES LESS THAN (5592), +PARTITION p699 VALUES LESS THAN (5600), +PARTITION p700 VALUES LESS THAN (5608), +PARTITION p701 VALUES LESS THAN (5616), +PARTITION p702 VALUES LESS THAN (5624), +PARTITION p703 VALUES LESS THAN (5632), +PARTITION p704 VALUES LESS THAN (5640), +PARTITION p705 VALUES LESS THAN (5648), +PARTITION p706 VALUES LESS THAN (5656), +PARTITION p707 VALUES LESS THAN (5664), +PARTITION p708 VALUES LESS THAN (5672), +PARTITION p709 VALUES LESS THAN (5680), +PARTITION p710 VALUES LESS THAN (5688), +PARTITION p711 VALUES LESS THAN (5696), +PARTITION p712 VALUES LESS THAN (5704), +PARTITION p713 VALUES LESS THAN (5712), +PARTITION p714 VALUES LESS THAN (5720), +PARTITION p715 VALUES LESS THAN (5728), +PARTITION p716 VALUES LESS THAN (5736), +PARTITION p717 VALUES LESS THAN (5744), +PARTITION p718 VALUES LESS THAN (5752), +PARTITION p719 VALUES LESS THAN (5760), +PARTITION p720 VALUES LESS THAN (5768), +PARTITION p721 VALUES LESS THAN (5776), +PARTITION p722 VALUES LESS THAN (5784), +PARTITION p723 VALUES LESS THAN (5792), +PARTITION p724 VALUES LESS THAN (5800), +PARTITION p725 VALUES LESS THAN (5808), +PARTITION p726 VALUES LESS THAN (5816), +PARTITION p727 VALUES LESS THAN (5824), +PARTITION p728 VALUES LESS THAN (5832), +PARTITION p729 VALUES LESS THAN (5840), +PARTITION p730 VALUES LESS THAN (5848), +PARTITION p731 VALUES LESS THAN (5856), +PARTITION p732 VALUES LESS THAN (5864), +PARTITION p733 VALUES LESS THAN (5872), +PARTITION p734 VALUES LESS THAN (5880), +PARTITION p735 VALUES LESS THAN (5888), +PARTITION p736 VALUES LESS THAN (5896), +PARTITION p737 VALUES LESS THAN (5904), +PARTITION p738 VALUES LESS THAN (5912), +PARTITION p739 VALUES LESS THAN (5920), +PARTITION p740 VALUES LESS THAN (5928), +PARTITION p741 VALUES LESS THAN (5936), +PARTITION p742 VALUES LESS THAN (5944), +PARTITION p743 VALUES LESS THAN (5952), +PARTITION p744 VALUES LESS THAN (5960), +PARTITION p745 VALUES LESS THAN (5968), +PARTITION p746 VALUES LESS THAN (5976), +PARTITION p747 VALUES LESS THAN (5984), +PARTITION p748 VALUES LESS THAN (5992), +PARTITION p749 VALUES LESS THAN (6000), +PARTITION p750 VALUES LESS THAN (6008), +PARTITION p751 VALUES LESS THAN (6016), +PARTITION p752 VALUES LESS THAN (6024), +PARTITION p753 VALUES LESS THAN (6032), +PARTITION p754 VALUES LESS THAN (6040), +PARTITION p755 VALUES LESS THAN (6048), +PARTITION p756 VALUES LESS THAN (6056), +PARTITION p757 VALUES LESS THAN (6064), +PARTITION p758 VALUES LESS THAN (6072), +PARTITION p759 VALUES LESS THAN (6080), +PARTITION p760 VALUES LESS THAN (6088), +PARTITION p761 VALUES LESS THAN (6096), +PARTITION p762 VALUES LESS THAN (6104), +PARTITION p763 VALUES LESS THAN (6112), +PARTITION p764 VALUES LESS THAN (6120), +PARTITION p765 VALUES LESS THAN (6128), +PARTITION p766 VALUES LESS THAN (6136), +PARTITION p767 VALUES LESS THAN (6144), +PARTITION p768 VALUES LESS THAN (6152), +PARTITION p769 VALUES LESS THAN (6160), +PARTITION p770 VALUES LESS THAN (6168), +PARTITION p771 VALUES LESS THAN (6176), +PARTITION p772 VALUES LESS THAN (6184), +PARTITION p773 VALUES LESS THAN (6192), +PARTITION p774 VALUES LESS THAN (6200), +PARTITION p775 VALUES LESS THAN (6208), +PARTITION p776 VALUES LESS THAN (6216), +PARTITION p777 VALUES LESS THAN (6224), +PARTITION p778 VALUES LESS THAN (6232), +PARTITION p779 VALUES LESS THAN (6240), +PARTITION p780 VALUES LESS THAN (6248), +PARTITION p781 VALUES LESS THAN (6256), +PARTITION p782 VALUES LESS THAN (6264), +PARTITION p783 VALUES LESS THAN (6272), +PARTITION p784 VALUES LESS THAN (6280), +PARTITION p785 VALUES LESS THAN (6288), +PARTITION p786 VALUES LESS THAN (6296), +PARTITION p787 VALUES LESS THAN (6304), +PARTITION p788 VALUES LESS THAN (6312), +PARTITION p789 VALUES LESS THAN (6320), +PARTITION p790 VALUES LESS THAN (6328), +PARTITION p791 VALUES LESS THAN (6336), +PARTITION p792 VALUES LESS THAN (6344), +PARTITION p793 VALUES LESS THAN (6352), +PARTITION p794 VALUES LESS THAN (6360), +PARTITION p795 VALUES LESS THAN (6368), +PARTITION p796 VALUES LESS THAN (6376), +PARTITION p797 VALUES LESS THAN (6384), +PARTITION p798 VALUES LESS THAN (6392), +PARTITION p799 VALUES LESS THAN (6400), +PARTITION p800 VALUES LESS THAN (6408), +PARTITION p801 VALUES LESS THAN (6416), +PARTITION p802 VALUES LESS THAN (6424), +PARTITION p803 VALUES LESS THAN (6432), +PARTITION p804 VALUES LESS THAN (6440), +PARTITION p805 VALUES LESS THAN (6448), +PARTITION p806 VALUES LESS THAN (6456), +PARTITION p807 VALUES LESS THAN (6464), +PARTITION p808 VALUES LESS THAN (6472), +PARTITION p809 VALUES LESS THAN (6480), +PARTITION p810 VALUES LESS THAN (6488), +PARTITION p811 VALUES LESS THAN (6496), +PARTITION p812 VALUES LESS THAN (6504), +PARTITION p813 VALUES LESS THAN (6512), +PARTITION p814 VALUES LESS THAN (6520), +PARTITION p815 VALUES LESS THAN (6528), +PARTITION p816 VALUES LESS THAN (6536), +PARTITION p817 VALUES LESS THAN (6544), +PARTITION p818 VALUES LESS THAN (6552), +PARTITION p819 VALUES LESS THAN (6560), +PARTITION p820 VALUES LESS THAN (6568), +PARTITION p821 VALUES LESS THAN (6576), +PARTITION p822 VALUES LESS THAN (6584), +PARTITION p823 VALUES LESS THAN (6592), +PARTITION p824 VALUES LESS THAN (6600), +PARTITION p825 VALUES LESS THAN (6608), +PARTITION p826 VALUES LESS THAN (6616), +PARTITION p827 VALUES LESS THAN (6624), +PARTITION p828 VALUES LESS THAN (6632), +PARTITION p829 VALUES LESS THAN (6640), +PARTITION p830 VALUES LESS THAN (6648), +PARTITION p831 VALUES LESS THAN (6656), +PARTITION p832 VALUES LESS THAN (6664), +PARTITION p833 VALUES LESS THAN (6672), +PARTITION p834 VALUES LESS THAN (6680), +PARTITION p835 VALUES LESS THAN (6688), +PARTITION p836 VALUES LESS THAN (6696), +PARTITION p837 VALUES LESS THAN (6704), +PARTITION p838 VALUES LESS THAN (6712), +PARTITION p839 VALUES LESS THAN (6720), +PARTITION p840 VALUES LESS THAN (6728), +PARTITION p841 VALUES LESS THAN (6736), +PARTITION p842 VALUES LESS THAN (6744), +PARTITION p843 VALUES LESS THAN (6752), +PARTITION p844 VALUES LESS THAN (6760), +PARTITION p845 VALUES LESS THAN (6768), +PARTITION p846 VALUES LESS THAN (6776), +PARTITION p847 VALUES LESS THAN (6784), +PARTITION p848 VALUES LESS THAN (6792), +PARTITION p849 VALUES LESS THAN (6800), +PARTITION p850 VALUES LESS THAN (6808), +PARTITION p851 VALUES LESS THAN (6816), +PARTITION p852 VALUES LESS THAN (6824), +PARTITION p853 VALUES LESS THAN (6832), +PARTITION p854 VALUES LESS THAN (6840), +PARTITION p855 VALUES LESS THAN (6848), +PARTITION p856 VALUES LESS THAN (6856), +PARTITION p857 VALUES LESS THAN (6864), +PARTITION p858 VALUES LESS THAN (6872), +PARTITION p859 VALUES LESS THAN (6880), +PARTITION p860 VALUES LESS THAN (6888), +PARTITION p861 VALUES LESS THAN (6896), +PARTITION p862 VALUES LESS THAN (6904), +PARTITION p863 VALUES LESS THAN (6912), +PARTITION p864 VALUES LESS THAN (6920), +PARTITION p865 VALUES LESS THAN (6928), +PARTITION p866 VALUES LESS THAN (6936), +PARTITION p867 VALUES LESS THAN (6944), +PARTITION p868 VALUES LESS THAN (6952), +PARTITION p869 VALUES LESS THAN (6960), +PARTITION p870 VALUES LESS THAN (6968), +PARTITION p871 VALUES LESS THAN (6976), +PARTITION p872 VALUES LESS THAN (6984), +PARTITION p873 VALUES LESS THAN (6992), +PARTITION p874 VALUES LESS THAN (7000), +PARTITION p875 VALUES LESS THAN (7008), +PARTITION p876 VALUES LESS THAN (7016), +PARTITION p877 VALUES LESS THAN (7024), +PARTITION p878 VALUES LESS THAN (7032), +PARTITION p879 VALUES LESS THAN (7040), +PARTITION p880 VALUES LESS THAN (7048), +PARTITION p881 VALUES LESS THAN (7056), +PARTITION p882 VALUES LESS THAN (7064), +PARTITION p883 VALUES LESS THAN (7072), +PARTITION p884 VALUES LESS THAN (7080), +PARTITION p885 VALUES LESS THAN (7088), +PARTITION p886 VALUES LESS THAN (7096), +PARTITION p887 VALUES LESS THAN (7104), +PARTITION p888 VALUES LESS THAN (7112), +PARTITION p889 VALUES LESS THAN (7120), +PARTITION p890 VALUES LESS THAN (7128), +PARTITION p891 VALUES LESS THAN (7136), +PARTITION p892 VALUES LESS THAN (7144), +PARTITION p893 VALUES LESS THAN (7152), +PARTITION p894 VALUES LESS THAN (7160), +PARTITION p895 VALUES LESS THAN (7168), +PARTITION p896 VALUES LESS THAN (7176), +PARTITION p897 VALUES LESS THAN (7184), +PARTITION p898 VALUES LESS THAN (7192), +PARTITION p899 VALUES LESS THAN (7200), +PARTITION p900 VALUES LESS THAN (7208), +PARTITION p901 VALUES LESS THAN (7216), +PARTITION p902 VALUES LESS THAN (7224), +PARTITION p903 VALUES LESS THAN (7232), +PARTITION p904 VALUES LESS THAN (7240), +PARTITION p905 VALUES LESS THAN (7248), +PARTITION p906 VALUES LESS THAN (7256), +PARTITION p907 VALUES LESS THAN (7264), +PARTITION p908 VALUES LESS THAN (7272), +PARTITION p909 VALUES LESS THAN (7280), +PARTITION p910 VALUES LESS THAN (7288), +PARTITION p911 VALUES LESS THAN (7296), +PARTITION p912 VALUES LESS THAN (7304), +PARTITION p913 VALUES LESS THAN (7312), +PARTITION p914 VALUES LESS THAN (7320), +PARTITION p915 VALUES LESS THAN (7328), +PARTITION p916 VALUES LESS THAN (7336), +PARTITION p917 VALUES LESS THAN (7344), +PARTITION p918 VALUES LESS THAN (7352), +PARTITION p919 VALUES LESS THAN (7360), +PARTITION p920 VALUES LESS THAN (7368), +PARTITION p921 VALUES LESS THAN (7376), +PARTITION p922 VALUES LESS THAN (7384), +PARTITION p923 VALUES LESS THAN (7392), +PARTITION p924 VALUES LESS THAN (7400), +PARTITION p925 VALUES LESS THAN (7408), +PARTITION p926 VALUES LESS THAN (7416), +PARTITION p927 VALUES LESS THAN (7424), +PARTITION p928 VALUES LESS THAN (7432), +PARTITION p929 VALUES LESS THAN (7440), +PARTITION p930 VALUES LESS THAN (7448), +PARTITION p931 VALUES LESS THAN (7456), +PARTITION p932 VALUES LESS THAN (7464), +PARTITION p933 VALUES LESS THAN (7472), +PARTITION p934 VALUES LESS THAN (7480), +PARTITION p935 VALUES LESS THAN (7488), +PARTITION p936 VALUES LESS THAN (7496), +PARTITION p937 VALUES LESS THAN (7504), +PARTITION p938 VALUES LESS THAN (7512), +PARTITION p939 VALUES LESS THAN (7520), +PARTITION p940 VALUES LESS THAN (7528), +PARTITION p941 VALUES LESS THAN (7536), +PARTITION p942 VALUES LESS THAN (7544), +PARTITION p943 VALUES LESS THAN (7552), +PARTITION p944 VALUES LESS THAN (7560), +PARTITION p945 VALUES LESS THAN (7568), +PARTITION p946 VALUES LESS THAN (7576), +PARTITION p947 VALUES LESS THAN (7584), +PARTITION p948 VALUES LESS THAN (7592), +PARTITION p949 VALUES LESS THAN (7600), +PARTITION p950 VALUES LESS THAN (7608), +PARTITION p951 VALUES LESS THAN (7616), +PARTITION p952 VALUES LESS THAN (7624), +PARTITION p953 VALUES LESS THAN (7632), +PARTITION p954 VALUES LESS THAN (7640), +PARTITION p955 VALUES LESS THAN (7648), +PARTITION p956 VALUES LESS THAN (7656), +PARTITION p957 VALUES LESS THAN (7664), +PARTITION p958 VALUES LESS THAN (7672), +PARTITION p959 VALUES LESS THAN (7680), +PARTITION p960 VALUES LESS THAN (7688), +PARTITION p961 VALUES LESS THAN (7696), +PARTITION p962 VALUES LESS THAN (7704), +PARTITION p963 VALUES LESS THAN (7712), +PARTITION p964 VALUES LESS THAN (7720), +PARTITION p965 VALUES LESS THAN (7728), +PARTITION p966 VALUES LESS THAN (7736), +PARTITION p967 VALUES LESS THAN (7744), +PARTITION p968 VALUES LESS THAN (7752), +PARTITION p969 VALUES LESS THAN (7760), +PARTITION p970 VALUES LESS THAN (7768), +PARTITION p971 VALUES LESS THAN (7776), +PARTITION p972 VALUES LESS THAN (7784), +PARTITION p973 VALUES LESS THAN (7792), +PARTITION p974 VALUES LESS THAN (7800), +PARTITION p975 VALUES LESS THAN (7808), +PARTITION p976 VALUES LESS THAN (7816), +PARTITION p977 VALUES LESS THAN (7824), +PARTITION p978 VALUES LESS THAN (7832), +PARTITION p979 VALUES LESS THAN (7840), +PARTITION p980 VALUES LESS THAN (7848), +PARTITION p981 VALUES LESS THAN (7856), +PARTITION p982 VALUES LESS THAN (7864), +PARTITION p983 VALUES LESS THAN (7872), +PARTITION p984 VALUES LESS THAN (7880), +PARTITION p985 VALUES LESS THAN (7888), +PARTITION p986 VALUES LESS THAN (7896), +PARTITION p987 VALUES LESS THAN (7904), +PARTITION p988 VALUES LESS THAN (7912), +PARTITION p989 VALUES LESS THAN (7920), +PARTITION p990 VALUES LESS THAN (7928), +PARTITION p991 VALUES LESS THAN (7936), +PARTITION p992 VALUES LESS THAN (7944), +PARTITION p993 VALUES LESS THAN (7952), +PARTITION p994 VALUES LESS THAN (7960), +PARTITION p995 VALUES LESS THAN (7968), +PARTITION p996 VALUES LESS THAN (7976), +PARTITION p997 VALUES LESS THAN (7984), +PARTITION p998 VALUES LESS THAN (7992), +PARTITION p999 VALUES LESS THAN (8000), +PARTITION p1000 VALUES LESS THAN (8008), +PARTITION p1001 VALUES LESS THAN (8016), +PARTITION p1002 VALUES LESS THAN (8024), +PARTITION p1003 VALUES LESS THAN (8032), +PARTITION p1004 VALUES LESS THAN (8040), +PARTITION p1005 VALUES LESS THAN (8048), +PARTITION p1006 VALUES LESS THAN (8056), +PARTITION p1007 VALUES LESS THAN (8064), +PARTITION p1008 VALUES LESS THAN (8072), +PARTITION p1009 VALUES LESS THAN (8080), +PARTITION p1010 VALUES LESS THAN (8088), +PARTITION p1011 VALUES LESS THAN (8096), +PARTITION p1012 VALUES LESS THAN (8104), +PARTITION p1013 VALUES LESS THAN (8112), +PARTITION p1014 VALUES LESS THAN (8120), +PARTITION p1015 VALUES LESS THAN (8128), +PARTITION p1016 VALUES LESS THAN (8136), +PARTITION p1017 VALUES LESS THAN (8144), +PARTITION p1018 VALUES LESS THAN (8152), +PARTITION p1019 VALUES LESS THAN (8160), +PARTITION p1020 VALUES LESS THAN (8168), +PARTITION p1021 VALUES LESS THAN (8176), +PARTITION p1022 VALUES LESS THAN (8184), +PARTITION p1023 VALUES LESS THAN (8192), +PARTITION p1024 VALUES LESS THAN (8200), +PARTITION p1025 VALUES LESS THAN (8208), +PARTITION p1026 VALUES LESS THAN (8216), +PARTITION p1027 VALUES LESS THAN (8224), +PARTITION p1028 VALUES LESS THAN (8232), +PARTITION p1029 VALUES LESS THAN (8240), +PARTITION p1030 VALUES LESS THAN (8248), +PARTITION p1031 VALUES LESS THAN (8256), +PARTITION p1032 VALUES LESS THAN (8264), +PARTITION p1033 VALUES LESS THAN (8272), +PARTITION p1034 VALUES LESS THAN (8280), +PARTITION p1035 VALUES LESS THAN (8288), +PARTITION p1036 VALUES LESS THAN (8296), +PARTITION p1037 VALUES LESS THAN (8304), +PARTITION p1038 VALUES LESS THAN (8312), +PARTITION p1039 VALUES LESS THAN (8320), +PARTITION p1040 VALUES LESS THAN (8328), +PARTITION p1041 VALUES LESS THAN (8336), +PARTITION p1042 VALUES LESS THAN (8344), +PARTITION p1043 VALUES LESS THAN (8352), +PARTITION p1044 VALUES LESS THAN (8360), +PARTITION p1045 VALUES LESS THAN (8368), +PARTITION p1046 VALUES LESS THAN (8376), +PARTITION p1047 VALUES LESS THAN (8384), +PARTITION p1048 VALUES LESS THAN (8392), +PARTITION p1049 VALUES LESS THAN (8400), +PARTITION p1050 VALUES LESS THAN (8408), +PARTITION p1051 VALUES LESS THAN (8416), +PARTITION p1052 VALUES LESS THAN (8424), +PARTITION p1053 VALUES LESS THAN (8432), +PARTITION p1054 VALUES LESS THAN (8440), +PARTITION p1055 VALUES LESS THAN (8448), +PARTITION p1056 VALUES LESS THAN (8456), +PARTITION p1057 VALUES LESS THAN (8464), +PARTITION p1058 VALUES LESS THAN (8472), +PARTITION p1059 VALUES LESS THAN (8480), +PARTITION p1060 VALUES LESS THAN (8488), +PARTITION p1061 VALUES LESS THAN (8496), +PARTITION p1062 VALUES LESS THAN (8504), +PARTITION p1063 VALUES LESS THAN (8512), +PARTITION p1064 VALUES LESS THAN (8520), +PARTITION p1065 VALUES LESS THAN (8528), +PARTITION p1066 VALUES LESS THAN (8536), +PARTITION p1067 VALUES LESS THAN (8544), +PARTITION p1068 VALUES LESS THAN (8552), +PARTITION p1069 VALUES LESS THAN (8560), +PARTITION p1070 VALUES LESS THAN (8568), +PARTITION p1071 VALUES LESS THAN (8576), +PARTITION p1072 VALUES LESS THAN (8584), +PARTITION p1073 VALUES LESS THAN (8592), +PARTITION p1074 VALUES LESS THAN (8600), +PARTITION p1075 VALUES LESS THAN (8608), +PARTITION p1076 VALUES LESS THAN (8616), +PARTITION p1077 VALUES LESS THAN (8624), +PARTITION p1078 VALUES LESS THAN (8632), +PARTITION p1079 VALUES LESS THAN (8640), +PARTITION p1080 VALUES LESS THAN (8648), +PARTITION p1081 VALUES LESS THAN (8656), +PARTITION p1082 VALUES LESS THAN (8664), +PARTITION p1083 VALUES LESS THAN (8672), +PARTITION p1084 VALUES LESS THAN (8680), +PARTITION p1085 VALUES LESS THAN (8688), +PARTITION p1086 VALUES LESS THAN (8696), +PARTITION p1087 VALUES LESS THAN (8704), +PARTITION p1088 VALUES LESS THAN (8712), +PARTITION p1089 VALUES LESS THAN (8720), +PARTITION p1090 VALUES LESS THAN (8728), +PARTITION p1091 VALUES LESS THAN (8736), +PARTITION p1092 VALUES LESS THAN (8744), +PARTITION p1093 VALUES LESS THAN (8752), +PARTITION p1094 VALUES LESS THAN (8760), +PARTITION p1095 VALUES LESS THAN (8768), +PARTITION p1096 VALUES LESS THAN (8776), +PARTITION p1097 VALUES LESS THAN (8784), +PARTITION p1098 VALUES LESS THAN (8792), +PARTITION p1099 VALUES LESS THAN (8800), +PARTITION p1100 VALUES LESS THAN (8808), +PARTITION p1101 VALUES LESS THAN (8816), +PARTITION p1102 VALUES LESS THAN (8824), +PARTITION p1103 VALUES LESS THAN (8832), +PARTITION p1104 VALUES LESS THAN (8840), +PARTITION p1105 VALUES LESS THAN (8848), +PARTITION p1106 VALUES LESS THAN (8856), +PARTITION p1107 VALUES LESS THAN (8864), +PARTITION p1108 VALUES LESS THAN (8872), +PARTITION p1109 VALUES LESS THAN (8880), +PARTITION p1110 VALUES LESS THAN (8888), +PARTITION p1111 VALUES LESS THAN (8896), +PARTITION p1112 VALUES LESS THAN (8904), +PARTITION p1113 VALUES LESS THAN (8912), +PARTITION p1114 VALUES LESS THAN (8920), +PARTITION p1115 VALUES LESS THAN (8928), +PARTITION p1116 VALUES LESS THAN (8936), +PARTITION p1117 VALUES LESS THAN (8944), +PARTITION p1118 VALUES LESS THAN (8952), +PARTITION p1119 VALUES LESS THAN (8960), +PARTITION p1120 VALUES LESS THAN (8968), +PARTITION p1121 VALUES LESS THAN (8976), +PARTITION p1122 VALUES LESS THAN (8984), +PARTITION p1123 VALUES LESS THAN (8992), +PARTITION p1124 VALUES LESS THAN (9000), +PARTITION p1125 VALUES LESS THAN (9008), +PARTITION p1126 VALUES LESS THAN (9016), +PARTITION p1127 VALUES LESS THAN (9024), +PARTITION p1128 VALUES LESS THAN (9032), +PARTITION p1129 VALUES LESS THAN (9040), +PARTITION p1130 VALUES LESS THAN (9048), +PARTITION p1131 VALUES LESS THAN (9056), +PARTITION p1132 VALUES LESS THAN (9064), +PARTITION p1133 VALUES LESS THAN (9072), +PARTITION p1134 VALUES LESS THAN (9080), +PARTITION p1135 VALUES LESS THAN (9088), +PARTITION p1136 VALUES LESS THAN (9096), +PARTITION p1137 VALUES LESS THAN (9104), +PARTITION p1138 VALUES LESS THAN (9112), +PARTITION p1139 VALUES LESS THAN (9120), +PARTITION p1140 VALUES LESS THAN (9128), +PARTITION p1141 VALUES LESS THAN (9136), +PARTITION p1142 VALUES LESS THAN (9144), +PARTITION p1143 VALUES LESS THAN (9152), +PARTITION p1144 VALUES LESS THAN (9160), +PARTITION p1145 VALUES LESS THAN (9168), +PARTITION p1146 VALUES LESS THAN (9176), +PARTITION p1147 VALUES LESS THAN (9184), +PARTITION p1148 VALUES LESS THAN (9192), +PARTITION p1149 VALUES LESS THAN (9200), +PARTITION p1150 VALUES LESS THAN (9208), +PARTITION p1151 VALUES LESS THAN (9216), +PARTITION p1152 VALUES LESS THAN (9224), +PARTITION p1153 VALUES LESS THAN (9232), +PARTITION p1154 VALUES LESS THAN (9240), +PARTITION p1155 VALUES LESS THAN (9248), +PARTITION p1156 VALUES LESS THAN (9256), +PARTITION p1157 VALUES LESS THAN (9264), +PARTITION p1158 VALUES LESS THAN (9272), +PARTITION p1159 VALUES LESS THAN (9280), +PARTITION p1160 VALUES LESS THAN (9288), +PARTITION p1161 VALUES LESS THAN (9296), +PARTITION p1162 VALUES LESS THAN (9304), +PARTITION p1163 VALUES LESS THAN (9312), +PARTITION p1164 VALUES LESS THAN (9320), +PARTITION p1165 VALUES LESS THAN (9328), +PARTITION p1166 VALUES LESS THAN (9336), +PARTITION p1167 VALUES LESS THAN (9344), +PARTITION p1168 VALUES LESS THAN (9352), +PARTITION p1169 VALUES LESS THAN (9360), +PARTITION p1170 VALUES LESS THAN (9368), +PARTITION p1171 VALUES LESS THAN (9376), +PARTITION p1172 VALUES LESS THAN (9384), +PARTITION p1173 VALUES LESS THAN (9392), +PARTITION p1174 VALUES LESS THAN (9400), +PARTITION p1175 VALUES LESS THAN (9408), +PARTITION p1176 VALUES LESS THAN (9416), +PARTITION p1177 VALUES LESS THAN (9424), +PARTITION p1178 VALUES LESS THAN (9432), +PARTITION p1179 VALUES LESS THAN (9440), +PARTITION p1180 VALUES LESS THAN (9448), +PARTITION p1181 VALUES LESS THAN (9456), +PARTITION p1182 VALUES LESS THAN (9464), +PARTITION p1183 VALUES LESS THAN (9472), +PARTITION p1184 VALUES LESS THAN (9480), +PARTITION p1185 VALUES LESS THAN (9488), +PARTITION p1186 VALUES LESS THAN (9496), +PARTITION p1187 VALUES LESS THAN (9504), +PARTITION p1188 VALUES LESS THAN (9512), +PARTITION p1189 VALUES LESS THAN (9520), +PARTITION p1190 VALUES LESS THAN (9528), +PARTITION p1191 VALUES LESS THAN (9536), +PARTITION p1192 VALUES LESS THAN (9544), +PARTITION p1193 VALUES LESS THAN (9552), +PARTITION p1194 VALUES LESS THAN (9560), +PARTITION p1195 VALUES LESS THAN (9568), +PARTITION p1196 VALUES LESS THAN (9576), +PARTITION p1197 VALUES LESS THAN (9584), +PARTITION p1198 VALUES LESS THAN (9592), +PARTITION p1199 VALUES LESS THAN (9600), +PARTITION p1200 VALUES LESS THAN (9608), +PARTITION p1201 VALUES LESS THAN (9616), +PARTITION p1202 VALUES LESS THAN (9624), +PARTITION p1203 VALUES LESS THAN (9632), +PARTITION p1204 VALUES LESS THAN (9640), +PARTITION p1205 VALUES LESS THAN (9648), +PARTITION p1206 VALUES LESS THAN (9656), +PARTITION p1207 VALUES LESS THAN (9664), +PARTITION p1208 VALUES LESS THAN (9672), +PARTITION p1209 VALUES LESS THAN (9680), +PARTITION p1210 VALUES LESS THAN (9688), +PARTITION p1211 VALUES LESS THAN (9696), +PARTITION p1212 VALUES LESS THAN (9704), +PARTITION p1213 VALUES LESS THAN (9712), +PARTITION p1214 VALUES LESS THAN (9720), +PARTITION p1215 VALUES LESS THAN (9728), +PARTITION p1216 VALUES LESS THAN (9736), +PARTITION p1217 VALUES LESS THAN (9744), +PARTITION p1218 VALUES LESS THAN (9752), +PARTITION p1219 VALUES LESS THAN (9760), +PARTITION p1220 VALUES LESS THAN (9768), +PARTITION p1221 VALUES LESS THAN (9776), +PARTITION p1222 VALUES LESS THAN (9784), +PARTITION p1223 VALUES LESS THAN (9792), +PARTITION p1224 VALUES LESS THAN (9800), +PARTITION p1225 VALUES LESS THAN (9808), +PARTITION p1226 VALUES LESS THAN (9816), +PARTITION p1227 VALUES LESS THAN (9824), +PARTITION p1228 VALUES LESS THAN (9832), +PARTITION p1229 VALUES LESS THAN (9840), +PARTITION p1230 VALUES LESS THAN (9848), +PARTITION p1231 VALUES LESS THAN (9856), +PARTITION p1232 VALUES LESS THAN (9864), +PARTITION p1233 VALUES LESS THAN (9872), +PARTITION p1234 VALUES LESS THAN (9880), +PARTITION p1235 VALUES LESS THAN (9888), +PARTITION p1236 VALUES LESS THAN (9896), +PARTITION p1237 VALUES LESS THAN (9904), +PARTITION p1238 VALUES LESS THAN (9912), +PARTITION p1239 VALUES LESS THAN (9920), +PARTITION p1240 VALUES LESS THAN (9928), +PARTITION p1241 VALUES LESS THAN (9936), +PARTITION p1242 VALUES LESS THAN (9944), +PARTITION p1243 VALUES LESS THAN (9952), +PARTITION p1244 VALUES LESS THAN (9960), +PARTITION p1245 VALUES LESS THAN (9968), +PARTITION p1246 VALUES LESS THAN (9976), +PARTITION p1247 VALUES LESS THAN (9984), +PARTITION p1248 VALUES LESS THAN (9992), +PARTITION p1249 VALUES LESS THAN (10000), +PARTITION p1250 VALUES LESS THAN (10008), +PARTITION p1251 VALUES LESS THAN (10016), +PARTITION p1252 VALUES LESS THAN (10024), +PARTITION p1253 VALUES LESS THAN (10032), +PARTITION p1254 VALUES LESS THAN (10040), +PARTITION p1255 VALUES LESS THAN (10048), +PARTITION p1256 VALUES LESS THAN (10056), +PARTITION p1257 VALUES LESS THAN (10064), +PARTITION p1258 VALUES LESS THAN (10072), +PARTITION p1259 VALUES LESS THAN (10080), +PARTITION p1260 VALUES LESS THAN (10088), +PARTITION p1261 VALUES LESS THAN (10096), +PARTITION p1262 VALUES LESS THAN (10104), +PARTITION p1263 VALUES LESS THAN (10112), +PARTITION p1264 VALUES LESS THAN (10120), +PARTITION p1265 VALUES LESS THAN (10128), +PARTITION p1266 VALUES LESS THAN (10136), +PARTITION p1267 VALUES LESS THAN (10144), +PARTITION p1268 VALUES LESS THAN (10152), +PARTITION p1269 VALUES LESS THAN (10160), +PARTITION p1270 VALUES LESS THAN (10168), +PARTITION p1271 VALUES LESS THAN (10176), +PARTITION p1272 VALUES LESS THAN (10184), +PARTITION p1273 VALUES LESS THAN (10192), +PARTITION p1274 VALUES LESS THAN (10200), +PARTITION p1275 VALUES LESS THAN (10208), +PARTITION p1276 VALUES LESS THAN (10216), +PARTITION p1277 VALUES LESS THAN (10224), +PARTITION p1278 VALUES LESS THAN (10232), +PARTITION p1279 VALUES LESS THAN (10240), +PARTITION p1280 VALUES LESS THAN (10248), +PARTITION p1281 VALUES LESS THAN (10256), +PARTITION p1282 VALUES LESS THAN (10264), +PARTITION p1283 VALUES LESS THAN (10272), +PARTITION p1284 VALUES LESS THAN (10280), +PARTITION p1285 VALUES LESS THAN (10288), +PARTITION p1286 VALUES LESS THAN (10296), +PARTITION p1287 VALUES LESS THAN (10304), +PARTITION p1288 VALUES LESS THAN (10312), +PARTITION p1289 VALUES LESS THAN (10320), +PARTITION p1290 VALUES LESS THAN (10328), +PARTITION p1291 VALUES LESS THAN (10336), +PARTITION p1292 VALUES LESS THAN (10344), +PARTITION p1293 VALUES LESS THAN (10352), +PARTITION p1294 VALUES LESS THAN (10360), +PARTITION p1295 VALUES LESS THAN (10368), +PARTITION p1296 VALUES LESS THAN (10376), +PARTITION p1297 VALUES LESS THAN (10384), +PARTITION p1298 VALUES LESS THAN (10392), +PARTITION p1299 VALUES LESS THAN (10400), +PARTITION p1300 VALUES LESS THAN (10408), +PARTITION p1301 VALUES LESS THAN (10416), +PARTITION p1302 VALUES LESS THAN (10424), +PARTITION p1303 VALUES LESS THAN (10432), +PARTITION p1304 VALUES LESS THAN (10440), +PARTITION p1305 VALUES LESS THAN (10448), +PARTITION p1306 VALUES LESS THAN (10456), +PARTITION p1307 VALUES LESS THAN (10464), +PARTITION p1308 VALUES LESS THAN (10472), +PARTITION p1309 VALUES LESS THAN (10480), +PARTITION p1310 VALUES LESS THAN (10488), +PARTITION p1311 VALUES LESS THAN (10496), +PARTITION p1312 VALUES LESS THAN (10504), +PARTITION p1313 VALUES LESS THAN (10512), +PARTITION p1314 VALUES LESS THAN (10520), +PARTITION p1315 VALUES LESS THAN (10528), +PARTITION p1316 VALUES LESS THAN (10536), +PARTITION p1317 VALUES LESS THAN (10544), +PARTITION p1318 VALUES LESS THAN (10552), +PARTITION p1319 VALUES LESS THAN (10560), +PARTITION p1320 VALUES LESS THAN (10568), +PARTITION p1321 VALUES LESS THAN (10576), +PARTITION p1322 VALUES LESS THAN (10584), +PARTITION p1323 VALUES LESS THAN (10592), +PARTITION p1324 VALUES LESS THAN (10600), +PARTITION p1325 VALUES LESS THAN (10608), +PARTITION p1326 VALUES LESS THAN (10616), +PARTITION p1327 VALUES LESS THAN (10624), +PARTITION p1328 VALUES LESS THAN (10632), +PARTITION p1329 VALUES LESS THAN (10640), +PARTITION p1330 VALUES LESS THAN (10648), +PARTITION p1331 VALUES LESS THAN (10656), +PARTITION p1332 VALUES LESS THAN (10664), +PARTITION p1333 VALUES LESS THAN (10672), +PARTITION p1334 VALUES LESS THAN (10680), +PARTITION p1335 VALUES LESS THAN (10688), +PARTITION p1336 VALUES LESS THAN (10696), +PARTITION p1337 VALUES LESS THAN (10704), +PARTITION p1338 VALUES LESS THAN (10712), +PARTITION p1339 VALUES LESS THAN (10720), +PARTITION p1340 VALUES LESS THAN (10728), +PARTITION p1341 VALUES LESS THAN (10736), +PARTITION p1342 VALUES LESS THAN (10744), +PARTITION p1343 VALUES LESS THAN (10752), +PARTITION p1344 VALUES LESS THAN (10760), +PARTITION p1345 VALUES LESS THAN (10768), +PARTITION p1346 VALUES LESS THAN (10776), +PARTITION p1347 VALUES LESS THAN (10784), +PARTITION p1348 VALUES LESS THAN (10792), +PARTITION p1349 VALUES LESS THAN (10800), +PARTITION p1350 VALUES LESS THAN (10808), +PARTITION p1351 VALUES LESS THAN (10816), +PARTITION p1352 VALUES LESS THAN (10824), +PARTITION p1353 VALUES LESS THAN (10832), +PARTITION p1354 VALUES LESS THAN (10840), +PARTITION p1355 VALUES LESS THAN (10848), +PARTITION p1356 VALUES LESS THAN (10856), +PARTITION p1357 VALUES LESS THAN (10864), +PARTITION p1358 VALUES LESS THAN (10872), +PARTITION p1359 VALUES LESS THAN (10880), +PARTITION p1360 VALUES LESS THAN (10888), +PARTITION p1361 VALUES LESS THAN (10896), +PARTITION p1362 VALUES LESS THAN (10904), +PARTITION p1363 VALUES LESS THAN (10912), +PARTITION p1364 VALUES LESS THAN (10920), +PARTITION p1365 VALUES LESS THAN (10928), +PARTITION p1366 VALUES LESS THAN (10936), +PARTITION p1367 VALUES LESS THAN (10944), +PARTITION p1368 VALUES LESS THAN (10952), +PARTITION p1369 VALUES LESS THAN (10960), +PARTITION p1370 VALUES LESS THAN (10968), +PARTITION p1371 VALUES LESS THAN (10976), +PARTITION p1372 VALUES LESS THAN (10984), +PARTITION p1373 VALUES LESS THAN (10992), +PARTITION p1374 VALUES LESS THAN (11000), +PARTITION p1375 VALUES LESS THAN (11008), +PARTITION p1376 VALUES LESS THAN (11016), +PARTITION p1377 VALUES LESS THAN (11024), +PARTITION p1378 VALUES LESS THAN (11032), +PARTITION p1379 VALUES LESS THAN (11040), +PARTITION p1380 VALUES LESS THAN (11048), +PARTITION p1381 VALUES LESS THAN (11056), +PARTITION p1382 VALUES LESS THAN (11064), +PARTITION p1383 VALUES LESS THAN (11072), +PARTITION p1384 VALUES LESS THAN (11080), +PARTITION p1385 VALUES LESS THAN (11088), +PARTITION p1386 VALUES LESS THAN (11096), +PARTITION p1387 VALUES LESS THAN (11104), +PARTITION p1388 VALUES LESS THAN (11112), +PARTITION p1389 VALUES LESS THAN (11120), +PARTITION p1390 VALUES LESS THAN (11128), +PARTITION p1391 VALUES LESS THAN (11136), +PARTITION p1392 VALUES LESS THAN (11144), +PARTITION p1393 VALUES LESS THAN (11152), +PARTITION p1394 VALUES LESS THAN (11160), +PARTITION p1395 VALUES LESS THAN (11168), +PARTITION p1396 VALUES LESS THAN (11176), +PARTITION p1397 VALUES LESS THAN (11184), +PARTITION p1398 VALUES LESS THAN (11192), +PARTITION p1399 VALUES LESS THAN (11200), +PARTITION p1400 VALUES LESS THAN (11208), +PARTITION p1401 VALUES LESS THAN (11216), +PARTITION p1402 VALUES LESS THAN (11224), +PARTITION p1403 VALUES LESS THAN (11232), +PARTITION p1404 VALUES LESS THAN (11240), +PARTITION p1405 VALUES LESS THAN (11248), +PARTITION p1406 VALUES LESS THAN (11256), +PARTITION p1407 VALUES LESS THAN (11264), +PARTITION p1408 VALUES LESS THAN (11272), +PARTITION p1409 VALUES LESS THAN (11280), +PARTITION p1410 VALUES LESS THAN (11288), +PARTITION p1411 VALUES LESS THAN (11296), +PARTITION p1412 VALUES LESS THAN (11304), +PARTITION p1413 VALUES LESS THAN (11312), +PARTITION p1414 VALUES LESS THAN (11320), +PARTITION p1415 VALUES LESS THAN (11328), +PARTITION p1416 VALUES LESS THAN (11336), +PARTITION p1417 VALUES LESS THAN (11344), +PARTITION p1418 VALUES LESS THAN (11352), +PARTITION p1419 VALUES LESS THAN (11360), +PARTITION p1420 VALUES LESS THAN (11368), +PARTITION p1421 VALUES LESS THAN (11376), +PARTITION p1422 VALUES LESS THAN (11384), +PARTITION p1423 VALUES LESS THAN (11392), +PARTITION p1424 VALUES LESS THAN (11400), +PARTITION p1425 VALUES LESS THAN (11408), +PARTITION p1426 VALUES LESS THAN (11416), +PARTITION p1427 VALUES LESS THAN (11424), +PARTITION p1428 VALUES LESS THAN (11432), +PARTITION p1429 VALUES LESS THAN (11440), +PARTITION p1430 VALUES LESS THAN (11448), +PARTITION p1431 VALUES LESS THAN (11456), +PARTITION p1432 VALUES LESS THAN (11464), +PARTITION p1433 VALUES LESS THAN (11472), +PARTITION p1434 VALUES LESS THAN (11480), +PARTITION p1435 VALUES LESS THAN (11488), +PARTITION p1436 VALUES LESS THAN (11496), +PARTITION p1437 VALUES LESS THAN (11504), +PARTITION p1438 VALUES LESS THAN (11512), +PARTITION p1439 VALUES LESS THAN (11520), +PARTITION p1440 VALUES LESS THAN (11528), +PARTITION p1441 VALUES LESS THAN (11536), +PARTITION p1442 VALUES LESS THAN (11544), +PARTITION p1443 VALUES LESS THAN (11552), +PARTITION p1444 VALUES LESS THAN (11560), +PARTITION p1445 VALUES LESS THAN (11568), +PARTITION p1446 VALUES LESS THAN (11576), +PARTITION p1447 VALUES LESS THAN (11584), +PARTITION p1448 VALUES LESS THAN (11592), +PARTITION p1449 VALUES LESS THAN (11600), +PARTITION p1450 VALUES LESS THAN (11608), +PARTITION p1451 VALUES LESS THAN (11616), +PARTITION p1452 VALUES LESS THAN (11624), +PARTITION p1453 VALUES LESS THAN (11632), +PARTITION p1454 VALUES LESS THAN (11640), +PARTITION p1455 VALUES LESS THAN (11648), +PARTITION p1456 VALUES LESS THAN (11656), +PARTITION p1457 VALUES LESS THAN (11664), +PARTITION p1458 VALUES LESS THAN (11672), +PARTITION p1459 VALUES LESS THAN (11680), +PARTITION p1460 VALUES LESS THAN (11688), +PARTITION p1461 VALUES LESS THAN (11696), +PARTITION p1462 VALUES LESS THAN (11704), +PARTITION p1463 VALUES LESS THAN (11712), +PARTITION p1464 VALUES LESS THAN (11720), +PARTITION p1465 VALUES LESS THAN (11728), +PARTITION p1466 VALUES LESS THAN (11736), +PARTITION p1467 VALUES LESS THAN (11744), +PARTITION p1468 VALUES LESS THAN (11752), +PARTITION p1469 VALUES LESS THAN (11760), +PARTITION p1470 VALUES LESS THAN (11768), +PARTITION p1471 VALUES LESS THAN (11776), +PARTITION p1472 VALUES LESS THAN (11784), +PARTITION p1473 VALUES LESS THAN (11792), +PARTITION p1474 VALUES LESS THAN (11800), +PARTITION p1475 VALUES LESS THAN (11808), +PARTITION p1476 VALUES LESS THAN (11816), +PARTITION p1477 VALUES LESS THAN (11824), +PARTITION p1478 VALUES LESS THAN (11832), +PARTITION p1479 VALUES LESS THAN (11840), +PARTITION p1480 VALUES LESS THAN (11848), +PARTITION p1481 VALUES LESS THAN (11856), +PARTITION p1482 VALUES LESS THAN (11864), +PARTITION p1483 VALUES LESS THAN (11872), +PARTITION p1484 VALUES LESS THAN (11880), +PARTITION p1485 VALUES LESS THAN (11888), +PARTITION p1486 VALUES LESS THAN (11896), +PARTITION p1487 VALUES LESS THAN (11904), +PARTITION p1488 VALUES LESS THAN (11912), +PARTITION p1489 VALUES LESS THAN (11920), +PARTITION p1490 VALUES LESS THAN (11928), +PARTITION p1491 VALUES LESS THAN (11936), +PARTITION p1492 VALUES LESS THAN (11944), +PARTITION p1493 VALUES LESS THAN (11952), +PARTITION p1494 VALUES LESS THAN (11960), +PARTITION p1495 VALUES LESS THAN (11968), +PARTITION p1496 VALUES LESS THAN (11976), +PARTITION p1497 VALUES LESS THAN (11984), +PARTITION p1498 VALUES LESS THAN (11992), +PARTITION p1499 VALUES LESS THAN (12000), +PARTITION p1500 VALUES LESS THAN (12008), +PARTITION p1501 VALUES LESS THAN (12016), +PARTITION p1502 VALUES LESS THAN (12024), +PARTITION p1503 VALUES LESS THAN (12032), +PARTITION p1504 VALUES LESS THAN (12040), +PARTITION p1505 VALUES LESS THAN (12048), +PARTITION p1506 VALUES LESS THAN (12056), +PARTITION p1507 VALUES LESS THAN (12064), +PARTITION p1508 VALUES LESS THAN (12072), +PARTITION p1509 VALUES LESS THAN (12080), +PARTITION p1510 VALUES LESS THAN (12088), +PARTITION p1511 VALUES LESS THAN (12096), +PARTITION p1512 VALUES LESS THAN (12104), +PARTITION p1513 VALUES LESS THAN (12112), +PARTITION p1514 VALUES LESS THAN (12120), +PARTITION p1515 VALUES LESS THAN (12128), +PARTITION p1516 VALUES LESS THAN (12136), +PARTITION p1517 VALUES LESS THAN (12144), +PARTITION p1518 VALUES LESS THAN (12152), +PARTITION p1519 VALUES LESS THAN (12160), +PARTITION p1520 VALUES LESS THAN (12168), +PARTITION p1521 VALUES LESS THAN (12176), +PARTITION p1522 VALUES LESS THAN (12184), +PARTITION p1523 VALUES LESS THAN (12192), +PARTITION p1524 VALUES LESS THAN (12200), +PARTITION p1525 VALUES LESS THAN (12208), +PARTITION p1526 VALUES LESS THAN (12216), +PARTITION p1527 VALUES LESS THAN (12224), +PARTITION p1528 VALUES LESS THAN (12232), +PARTITION p1529 VALUES LESS THAN (12240), +PARTITION p1530 VALUES LESS THAN (12248), +PARTITION p1531 VALUES LESS THAN (12256), +PARTITION p1532 VALUES LESS THAN (12264), +PARTITION p1533 VALUES LESS THAN (12272), +PARTITION p1534 VALUES LESS THAN (12280), +PARTITION p1535 VALUES LESS THAN (12288), +PARTITION p1536 VALUES LESS THAN (12296), +PARTITION p1537 VALUES LESS THAN (12304), +PARTITION p1538 VALUES LESS THAN (12312), +PARTITION p1539 VALUES LESS THAN (12320), +PARTITION p1540 VALUES LESS THAN (12328), +PARTITION p1541 VALUES LESS THAN (12336), +PARTITION p1542 VALUES LESS THAN (12344), +PARTITION p1543 VALUES LESS THAN (12352), +PARTITION p1544 VALUES LESS THAN (12360), +PARTITION p1545 VALUES LESS THAN (12368), +PARTITION p1546 VALUES LESS THAN (12376), +PARTITION p1547 VALUES LESS THAN (12384), +PARTITION p1548 VALUES LESS THAN (12392), +PARTITION p1549 VALUES LESS THAN (12400), +PARTITION p1550 VALUES LESS THAN (12408), +PARTITION p1551 VALUES LESS THAN (12416), +PARTITION p1552 VALUES LESS THAN (12424), +PARTITION p1553 VALUES LESS THAN (12432), +PARTITION p1554 VALUES LESS THAN (12440), +PARTITION p1555 VALUES LESS THAN (12448), +PARTITION p1556 VALUES LESS THAN (12456), +PARTITION p1557 VALUES LESS THAN (12464), +PARTITION p1558 VALUES LESS THAN (12472), +PARTITION p1559 VALUES LESS THAN (12480), +PARTITION p1560 VALUES LESS THAN (12488), +PARTITION p1561 VALUES LESS THAN (12496), +PARTITION p1562 VALUES LESS THAN (12504), +PARTITION p1563 VALUES LESS THAN (12512), +PARTITION p1564 VALUES LESS THAN (12520), +PARTITION p1565 VALUES LESS THAN (12528), +PARTITION p1566 VALUES LESS THAN (12536), +PARTITION p1567 VALUES LESS THAN (12544), +PARTITION p1568 VALUES LESS THAN (12552), +PARTITION p1569 VALUES LESS THAN (12560), +PARTITION p1570 VALUES LESS THAN (12568), +PARTITION p1571 VALUES LESS THAN (12576), +PARTITION p1572 VALUES LESS THAN (12584), +PARTITION p1573 VALUES LESS THAN (12592), +PARTITION p1574 VALUES LESS THAN (12600), +PARTITION p1575 VALUES LESS THAN (12608), +PARTITION p1576 VALUES LESS THAN (12616), +PARTITION p1577 VALUES LESS THAN (12624), +PARTITION p1578 VALUES LESS THAN (12632), +PARTITION p1579 VALUES LESS THAN (12640), +PARTITION p1580 VALUES LESS THAN (12648), +PARTITION p1581 VALUES LESS THAN (12656), +PARTITION p1582 VALUES LESS THAN (12664), +PARTITION p1583 VALUES LESS THAN (12672), +PARTITION p1584 VALUES LESS THAN (12680), +PARTITION p1585 VALUES LESS THAN (12688), +PARTITION p1586 VALUES LESS THAN (12696), +PARTITION p1587 VALUES LESS THAN (12704), +PARTITION p1588 VALUES LESS THAN (12712), +PARTITION p1589 VALUES LESS THAN (12720), +PARTITION p1590 VALUES LESS THAN (12728), +PARTITION p1591 VALUES LESS THAN (12736), +PARTITION p1592 VALUES LESS THAN (12744), +PARTITION p1593 VALUES LESS THAN (12752), +PARTITION p1594 VALUES LESS THAN (12760), +PARTITION p1595 VALUES LESS THAN (12768), +PARTITION p1596 VALUES LESS THAN (12776), +PARTITION p1597 VALUES LESS THAN (12784), +PARTITION p1598 VALUES LESS THAN (12792), +PARTITION p1599 VALUES LESS THAN (12800), +PARTITION p1600 VALUES LESS THAN (12808), +PARTITION p1601 VALUES LESS THAN (12816), +PARTITION p1602 VALUES LESS THAN (12824), +PARTITION p1603 VALUES LESS THAN (12832), +PARTITION p1604 VALUES LESS THAN (12840), +PARTITION p1605 VALUES LESS THAN (12848), +PARTITION p1606 VALUES LESS THAN (12856), +PARTITION p1607 VALUES LESS THAN (12864), +PARTITION p1608 VALUES LESS THAN (12872), +PARTITION p1609 VALUES LESS THAN (12880), +PARTITION p1610 VALUES LESS THAN (12888), +PARTITION p1611 VALUES LESS THAN (12896), +PARTITION p1612 VALUES LESS THAN (12904), +PARTITION p1613 VALUES LESS THAN (12912), +PARTITION p1614 VALUES LESS THAN (12920), +PARTITION p1615 VALUES LESS THAN (12928), +PARTITION p1616 VALUES LESS THAN (12936), +PARTITION p1617 VALUES LESS THAN (12944), +PARTITION p1618 VALUES LESS THAN (12952), +PARTITION p1619 VALUES LESS THAN (12960), +PARTITION p1620 VALUES LESS THAN (12968), +PARTITION p1621 VALUES LESS THAN (12976), +PARTITION p1622 VALUES LESS THAN (12984), +PARTITION p1623 VALUES LESS THAN (12992), +PARTITION p1624 VALUES LESS THAN (13000), +PARTITION p1625 VALUES LESS THAN (13008), +PARTITION p1626 VALUES LESS THAN (13016), +PARTITION p1627 VALUES LESS THAN (13024), +PARTITION p1628 VALUES LESS THAN (13032), +PARTITION p1629 VALUES LESS THAN (13040), +PARTITION p1630 VALUES LESS THAN (13048), +PARTITION p1631 VALUES LESS THAN (13056), +PARTITION p1632 VALUES LESS THAN (13064), +PARTITION p1633 VALUES LESS THAN (13072), +PARTITION p1634 VALUES LESS THAN (13080), +PARTITION p1635 VALUES LESS THAN (13088), +PARTITION p1636 VALUES LESS THAN (13096), +PARTITION p1637 VALUES LESS THAN (13104), +PARTITION p1638 VALUES LESS THAN (13112), +PARTITION p1639 VALUES LESS THAN (13120), +PARTITION p1640 VALUES LESS THAN (13128), +PARTITION p1641 VALUES LESS THAN (13136), +PARTITION p1642 VALUES LESS THAN (13144), +PARTITION p1643 VALUES LESS THAN (13152), +PARTITION p1644 VALUES LESS THAN (13160), +PARTITION p1645 VALUES LESS THAN (13168), +PARTITION p1646 VALUES LESS THAN (13176), +PARTITION p1647 VALUES LESS THAN (13184), +PARTITION p1648 VALUES LESS THAN (13192), +PARTITION p1649 VALUES LESS THAN (13200), +PARTITION p1650 VALUES LESS THAN (13208), +PARTITION p1651 VALUES LESS THAN (13216), +PARTITION p1652 VALUES LESS THAN (13224), +PARTITION p1653 VALUES LESS THAN (13232), +PARTITION p1654 VALUES LESS THAN (13240), +PARTITION p1655 VALUES LESS THAN (13248), +PARTITION p1656 VALUES LESS THAN (13256), +PARTITION p1657 VALUES LESS THAN (13264), +PARTITION p1658 VALUES LESS THAN (13272), +PARTITION p1659 VALUES LESS THAN (13280), +PARTITION p1660 VALUES LESS THAN (13288), +PARTITION p1661 VALUES LESS THAN (13296), +PARTITION p1662 VALUES LESS THAN (13304), +PARTITION p1663 VALUES LESS THAN (13312), +PARTITION p1664 VALUES LESS THAN (13320), +PARTITION p1665 VALUES LESS THAN (13328), +PARTITION p1666 VALUES LESS THAN (13336), +PARTITION p1667 VALUES LESS THAN (13344), +PARTITION p1668 VALUES LESS THAN (13352), +PARTITION p1669 VALUES LESS THAN (13360), +PARTITION p1670 VALUES LESS THAN (13368), +PARTITION p1671 VALUES LESS THAN (13376), +PARTITION p1672 VALUES LESS THAN (13384), +PARTITION p1673 VALUES LESS THAN (13392), +PARTITION p1674 VALUES LESS THAN (13400), +PARTITION p1675 VALUES LESS THAN (13408), +PARTITION p1676 VALUES LESS THAN (13416), +PARTITION p1677 VALUES LESS THAN (13424), +PARTITION p1678 VALUES LESS THAN (13432), +PARTITION p1679 VALUES LESS THAN (13440), +PARTITION p1680 VALUES LESS THAN (13448), +PARTITION p1681 VALUES LESS THAN (13456), +PARTITION p1682 VALUES LESS THAN (13464), +PARTITION p1683 VALUES LESS THAN (13472), +PARTITION p1684 VALUES LESS THAN (13480), +PARTITION p1685 VALUES LESS THAN (13488), +PARTITION p1686 VALUES LESS THAN (13496), +PARTITION p1687 VALUES LESS THAN (13504), +PARTITION p1688 VALUES LESS THAN (13512), +PARTITION p1689 VALUES LESS THAN (13520), +PARTITION p1690 VALUES LESS THAN (13528), +PARTITION p1691 VALUES LESS THAN (13536), +PARTITION p1692 VALUES LESS THAN (13544), +PARTITION p1693 VALUES LESS THAN (13552), +PARTITION p1694 VALUES LESS THAN (13560), +PARTITION p1695 VALUES LESS THAN (13568), +PARTITION p1696 VALUES LESS THAN (13576), +PARTITION p1697 VALUES LESS THAN (13584), +PARTITION p1698 VALUES LESS THAN (13592), +PARTITION p1699 VALUES LESS THAN (13600), +PARTITION p1700 VALUES LESS THAN (13608), +PARTITION p1701 VALUES LESS THAN (13616), +PARTITION p1702 VALUES LESS THAN (13624), +PARTITION p1703 VALUES LESS THAN (13632), +PARTITION p1704 VALUES LESS THAN (13640), +PARTITION p1705 VALUES LESS THAN (13648), +PARTITION p1706 VALUES LESS THAN (13656), +PARTITION p1707 VALUES LESS THAN (13664), +PARTITION p1708 VALUES LESS THAN (13672), +PARTITION p1709 VALUES LESS THAN (13680), +PARTITION p1710 VALUES LESS THAN (13688), +PARTITION p1711 VALUES LESS THAN (13696), +PARTITION p1712 VALUES LESS THAN (13704), +PARTITION p1713 VALUES LESS THAN (13712), +PARTITION p1714 VALUES LESS THAN (13720), +PARTITION p1715 VALUES LESS THAN (13728), +PARTITION p1716 VALUES LESS THAN (13736), +PARTITION p1717 VALUES LESS THAN (13744), +PARTITION p1718 VALUES LESS THAN (13752), +PARTITION p1719 VALUES LESS THAN (13760), +PARTITION p1720 VALUES LESS THAN (13768), +PARTITION p1721 VALUES LESS THAN (13776), +PARTITION p1722 VALUES LESS THAN (13784), +PARTITION p1723 VALUES LESS THAN (13792), +PARTITION p1724 VALUES LESS THAN (13800), +PARTITION p1725 VALUES LESS THAN (13808), +PARTITION p1726 VALUES LESS THAN (13816), +PARTITION p1727 VALUES LESS THAN (13824), +PARTITION p1728 VALUES LESS THAN (13832), +PARTITION p1729 VALUES LESS THAN (13840), +PARTITION p1730 VALUES LESS THAN (13848), +PARTITION p1731 VALUES LESS THAN (13856), +PARTITION p1732 VALUES LESS THAN (13864), +PARTITION p1733 VALUES LESS THAN (13872), +PARTITION p1734 VALUES LESS THAN (13880), +PARTITION p1735 VALUES LESS THAN (13888), +PARTITION p1736 VALUES LESS THAN (13896), +PARTITION p1737 VALUES LESS THAN (13904), +PARTITION p1738 VALUES LESS THAN (13912), +PARTITION p1739 VALUES LESS THAN (13920), +PARTITION p1740 VALUES LESS THAN (13928), +PARTITION p1741 VALUES LESS THAN (13936), +PARTITION p1742 VALUES LESS THAN (13944), +PARTITION p1743 VALUES LESS THAN (13952), +PARTITION p1744 VALUES LESS THAN (13960), +PARTITION p1745 VALUES LESS THAN (13968), +PARTITION p1746 VALUES LESS THAN (13976), +PARTITION p1747 VALUES LESS THAN (13984), +PARTITION p1748 VALUES LESS THAN (13992), +PARTITION p1749 VALUES LESS THAN (14000), +PARTITION p1750 VALUES LESS THAN (14008), +PARTITION p1751 VALUES LESS THAN (14016), +PARTITION p1752 VALUES LESS THAN (14024), +PARTITION p1753 VALUES LESS THAN (14032), +PARTITION p1754 VALUES LESS THAN (14040), +PARTITION p1755 VALUES LESS THAN (14048), +PARTITION p1756 VALUES LESS THAN (14056), +PARTITION p1757 VALUES LESS THAN (14064), +PARTITION p1758 VALUES LESS THAN (14072), +PARTITION p1759 VALUES LESS THAN (14080), +PARTITION p1760 VALUES LESS THAN (14088), +PARTITION p1761 VALUES LESS THAN (14096), +PARTITION p1762 VALUES LESS THAN (14104), +PARTITION p1763 VALUES LESS THAN (14112), +PARTITION p1764 VALUES LESS THAN (14120), +PARTITION p1765 VALUES LESS THAN (14128), +PARTITION p1766 VALUES LESS THAN (14136), +PARTITION p1767 VALUES LESS THAN (14144), +PARTITION p1768 VALUES LESS THAN (14152), +PARTITION p1769 VALUES LESS THAN (14160), +PARTITION p1770 VALUES LESS THAN (14168), +PARTITION p1771 VALUES LESS THAN (14176), +PARTITION p1772 VALUES LESS THAN (14184), +PARTITION p1773 VALUES LESS THAN (14192), +PARTITION p1774 VALUES LESS THAN (14200), +PARTITION p1775 VALUES LESS THAN (14208), +PARTITION p1776 VALUES LESS THAN (14216), +PARTITION p1777 VALUES LESS THAN (14224), +PARTITION p1778 VALUES LESS THAN (14232), +PARTITION p1779 VALUES LESS THAN (14240), +PARTITION p1780 VALUES LESS THAN (14248), +PARTITION p1781 VALUES LESS THAN (14256), +PARTITION p1782 VALUES LESS THAN (14264), +PARTITION p1783 VALUES LESS THAN (14272), +PARTITION p1784 VALUES LESS THAN (14280), +PARTITION p1785 VALUES LESS THAN (14288), +PARTITION p1786 VALUES LESS THAN (14296), +PARTITION p1787 VALUES LESS THAN (14304), +PARTITION p1788 VALUES LESS THAN (14312), +PARTITION p1789 VALUES LESS THAN (14320), +PARTITION p1790 VALUES LESS THAN (14328), +PARTITION p1791 VALUES LESS THAN (14336), +PARTITION p1792 VALUES LESS THAN (14344), +PARTITION p1793 VALUES LESS THAN (14352), +PARTITION p1794 VALUES LESS THAN (14360), +PARTITION p1795 VALUES LESS THAN (14368), +PARTITION p1796 VALUES LESS THAN (14376), +PARTITION p1797 VALUES LESS THAN (14384), +PARTITION p1798 VALUES LESS THAN (14392), +PARTITION p1799 VALUES LESS THAN (14400), +PARTITION p1800 VALUES LESS THAN (14408), +PARTITION p1801 VALUES LESS THAN (14416), +PARTITION p1802 VALUES LESS THAN (14424), +PARTITION p1803 VALUES LESS THAN (14432), +PARTITION p1804 VALUES LESS THAN (14440), +PARTITION p1805 VALUES LESS THAN (14448), +PARTITION p1806 VALUES LESS THAN (14456), +PARTITION p1807 VALUES LESS THAN (14464), +PARTITION p1808 VALUES LESS THAN (14472), +PARTITION p1809 VALUES LESS THAN (14480), +PARTITION p1810 VALUES LESS THAN (14488), +PARTITION p1811 VALUES LESS THAN (14496), +PARTITION p1812 VALUES LESS THAN (14504), +PARTITION p1813 VALUES LESS THAN (14512), +PARTITION p1814 VALUES LESS THAN (14520), +PARTITION p1815 VALUES LESS THAN (14528), +PARTITION p1816 VALUES LESS THAN (14536), +PARTITION p1817 VALUES LESS THAN (14544), +PARTITION p1818 VALUES LESS THAN (14552), +PARTITION p1819 VALUES LESS THAN (14560), +PARTITION p1820 VALUES LESS THAN (14568), +PARTITION p1821 VALUES LESS THAN (14576), +PARTITION p1822 VALUES LESS THAN (14584), +PARTITION p1823 VALUES LESS THAN (14592), +PARTITION p1824 VALUES LESS THAN (14600), +PARTITION p1825 VALUES LESS THAN (14608), +PARTITION p1826 VALUES LESS THAN (14616), +PARTITION p1827 VALUES LESS THAN (14624), +PARTITION p1828 VALUES LESS THAN (14632), +PARTITION p1829 VALUES LESS THAN (14640), +PARTITION p1830 VALUES LESS THAN (14648), +PARTITION p1831 VALUES LESS THAN (14656), +PARTITION p1832 VALUES LESS THAN (14664), +PARTITION p1833 VALUES LESS THAN (14672), +PARTITION p1834 VALUES LESS THAN (14680), +PARTITION p1835 VALUES LESS THAN (14688), +PARTITION p1836 VALUES LESS THAN (14696), +PARTITION p1837 VALUES LESS THAN (14704), +PARTITION p1838 VALUES LESS THAN (14712), +PARTITION p1839 VALUES LESS THAN (14720), +PARTITION p1840 VALUES LESS THAN (14728), +PARTITION p1841 VALUES LESS THAN (14736), +PARTITION p1842 VALUES LESS THAN (14744), +PARTITION p1843 VALUES LESS THAN (14752), +PARTITION p1844 VALUES LESS THAN (14760), +PARTITION p1845 VALUES LESS THAN (14768), +PARTITION p1846 VALUES LESS THAN (14776), +PARTITION p1847 VALUES LESS THAN (14784), +PARTITION p1848 VALUES LESS THAN (14792), +PARTITION p1849 VALUES LESS THAN (14800), +PARTITION p1850 VALUES LESS THAN (14808), +PARTITION p1851 VALUES LESS THAN (14816), +PARTITION p1852 VALUES LESS THAN (14824), +PARTITION p1853 VALUES LESS THAN (14832), +PARTITION p1854 VALUES LESS THAN (14840), +PARTITION p1855 VALUES LESS THAN (14848), +PARTITION p1856 VALUES LESS THAN (14856), +PARTITION p1857 VALUES LESS THAN (14864), +PARTITION p1858 VALUES LESS THAN (14872), +PARTITION p1859 VALUES LESS THAN (14880), +PARTITION p1860 VALUES LESS THAN (14888), +PARTITION p1861 VALUES LESS THAN (14896), +PARTITION p1862 VALUES LESS THAN (14904), +PARTITION p1863 VALUES LESS THAN (14912), +PARTITION p1864 VALUES LESS THAN (14920), +PARTITION p1865 VALUES LESS THAN (14928), +PARTITION p1866 VALUES LESS THAN (14936), +PARTITION p1867 VALUES LESS THAN (14944), +PARTITION p1868 VALUES LESS THAN (14952), +PARTITION p1869 VALUES LESS THAN (14960), +PARTITION p1870 VALUES LESS THAN (14968), +PARTITION p1871 VALUES LESS THAN (14976), +PARTITION p1872 VALUES LESS THAN (14984), +PARTITION p1873 VALUES LESS THAN (14992), +PARTITION p1874 VALUES LESS THAN (15000), +PARTITION p1875 VALUES LESS THAN (15008), +PARTITION p1876 VALUES LESS THAN (15016), +PARTITION p1877 VALUES LESS THAN (15024), +PARTITION p1878 VALUES LESS THAN (15032), +PARTITION p1879 VALUES LESS THAN (15040), +PARTITION p1880 VALUES LESS THAN (15048), +PARTITION p1881 VALUES LESS THAN (15056), +PARTITION p1882 VALUES LESS THAN (15064), +PARTITION p1883 VALUES LESS THAN (15072), +PARTITION p1884 VALUES LESS THAN (15080), +PARTITION p1885 VALUES LESS THAN (15088), +PARTITION p1886 VALUES LESS THAN (15096), +PARTITION p1887 VALUES LESS THAN (15104), +PARTITION p1888 VALUES LESS THAN (15112), +PARTITION p1889 VALUES LESS THAN (15120), +PARTITION p1890 VALUES LESS THAN (15128), +PARTITION p1891 VALUES LESS THAN (15136), +PARTITION p1892 VALUES LESS THAN (15144), +PARTITION p1893 VALUES LESS THAN (15152), +PARTITION p1894 VALUES LESS THAN (15160), +PARTITION p1895 VALUES LESS THAN (15168), +PARTITION p1896 VALUES LESS THAN (15176), +PARTITION p1897 VALUES LESS THAN (15184), +PARTITION p1898 VALUES LESS THAN (15192), +PARTITION p1899 VALUES LESS THAN (15200), +PARTITION p1900 VALUES LESS THAN (15208), +PARTITION p1901 VALUES LESS THAN (15216), +PARTITION p1902 VALUES LESS THAN (15224), +PARTITION p1903 VALUES LESS THAN (15232), +PARTITION p1904 VALUES LESS THAN (15240), +PARTITION p1905 VALUES LESS THAN (15248), +PARTITION p1906 VALUES LESS THAN (15256), +PARTITION p1907 VALUES LESS THAN (15264), +PARTITION p1908 VALUES LESS THAN (15272), +PARTITION p1909 VALUES LESS THAN (15280), +PARTITION p1910 VALUES LESS THAN (15288), +PARTITION p1911 VALUES LESS THAN (15296), +PARTITION p1912 VALUES LESS THAN (15304), +PARTITION p1913 VALUES LESS THAN (15312), +PARTITION p1914 VALUES LESS THAN (15320), +PARTITION p1915 VALUES LESS THAN (15328), +PARTITION p1916 VALUES LESS THAN (15336), +PARTITION p1917 VALUES LESS THAN (15344), +PARTITION p1918 VALUES LESS THAN (15352), +PARTITION p1919 VALUES LESS THAN (15360), +PARTITION p1920 VALUES LESS THAN (15368), +PARTITION p1921 VALUES LESS THAN (15376), +PARTITION p1922 VALUES LESS THAN (15384), +PARTITION p1923 VALUES LESS THAN (15392), +PARTITION p1924 VALUES LESS THAN (15400), +PARTITION p1925 VALUES LESS THAN (15408), +PARTITION p1926 VALUES LESS THAN (15416), +PARTITION p1927 VALUES LESS THAN (15424), +PARTITION p1928 VALUES LESS THAN (15432), +PARTITION p1929 VALUES LESS THAN (15440), +PARTITION p1930 VALUES LESS THAN (15448), +PARTITION p1931 VALUES LESS THAN (15456), +PARTITION p1932 VALUES LESS THAN (15464), +PARTITION p1933 VALUES LESS THAN (15472), +PARTITION p1934 VALUES LESS THAN (15480), +PARTITION p1935 VALUES LESS THAN (15488), +PARTITION p1936 VALUES LESS THAN (15496), +PARTITION p1937 VALUES LESS THAN (15504), +PARTITION p1938 VALUES LESS THAN (15512), +PARTITION p1939 VALUES LESS THAN (15520), +PARTITION p1940 VALUES LESS THAN (15528), +PARTITION p1941 VALUES LESS THAN (15536), +PARTITION p1942 VALUES LESS THAN (15544), +PARTITION p1943 VALUES LESS THAN (15552), +PARTITION p1944 VALUES LESS THAN (15560), +PARTITION p1945 VALUES LESS THAN (15568), +PARTITION p1946 VALUES LESS THAN (15576), +PARTITION p1947 VALUES LESS THAN (15584), +PARTITION p1948 VALUES LESS THAN (15592), +PARTITION p1949 VALUES LESS THAN (15600), +PARTITION p1950 VALUES LESS THAN (15608), +PARTITION p1951 VALUES LESS THAN (15616), +PARTITION p1952 VALUES LESS THAN (15624), +PARTITION p1953 VALUES LESS THAN (15632), +PARTITION p1954 VALUES LESS THAN (15640), +PARTITION p1955 VALUES LESS THAN (15648), +PARTITION p1956 VALUES LESS THAN (15656), +PARTITION p1957 VALUES LESS THAN (15664), +PARTITION p1958 VALUES LESS THAN (15672), +PARTITION p1959 VALUES LESS THAN (15680), +PARTITION p1960 VALUES LESS THAN (15688), +PARTITION p1961 VALUES LESS THAN (15696), +PARTITION p1962 VALUES LESS THAN (15704), +PARTITION p1963 VALUES LESS THAN (15712), +PARTITION p1964 VALUES LESS THAN (15720), +PARTITION p1965 VALUES LESS THAN (15728), +PARTITION p1966 VALUES LESS THAN (15736), +PARTITION p1967 VALUES LESS THAN (15744), +PARTITION p1968 VALUES LESS THAN (15752), +PARTITION p1969 VALUES LESS THAN (15760), +PARTITION p1970 VALUES LESS THAN (15768), +PARTITION p1971 VALUES LESS THAN (15776), +PARTITION p1972 VALUES LESS THAN (15784), +PARTITION p1973 VALUES LESS THAN (15792), +PARTITION p1974 VALUES LESS THAN (15800), +PARTITION p1975 VALUES LESS THAN (15808), +PARTITION p1976 VALUES LESS THAN (15816), +PARTITION p1977 VALUES LESS THAN (15824), +PARTITION p1978 VALUES LESS THAN (15832), +PARTITION p1979 VALUES LESS THAN (15840), +PARTITION p1980 VALUES LESS THAN (15848), +PARTITION p1981 VALUES LESS THAN (15856), +PARTITION p1982 VALUES LESS THAN (15864), +PARTITION p1983 VALUES LESS THAN (15872), +PARTITION p1984 VALUES LESS THAN (15880), +PARTITION p1985 VALUES LESS THAN (15888), +PARTITION p1986 VALUES LESS THAN (15896), +PARTITION p1987 VALUES LESS THAN (15904), +PARTITION p1988 VALUES LESS THAN (15912), +PARTITION p1989 VALUES LESS THAN (15920), +PARTITION p1990 VALUES LESS THAN (15928), +PARTITION p1991 VALUES LESS THAN (15936), +PARTITION p1992 VALUES LESS THAN (15944), +PARTITION p1993 VALUES LESS THAN (15952), +PARTITION p1994 VALUES LESS THAN (15960), +PARTITION p1995 VALUES LESS THAN (15968), +PARTITION p1996 VALUES LESS THAN (15976), +PARTITION p1997 VALUES LESS THAN (15984), +PARTITION p1998 VALUES LESS THAN (15992), +PARTITION p1999 VALUES LESS THAN (16000), +PARTITION p2000 VALUES LESS THAN (16008), +PARTITION p2001 VALUES LESS THAN (16016), +PARTITION p2002 VALUES LESS THAN (16024), +PARTITION p2003 VALUES LESS THAN (16032), +PARTITION p2004 VALUES LESS THAN (16040), +PARTITION p2005 VALUES LESS THAN (16048), +PARTITION p2006 VALUES LESS THAN (16056), +PARTITION p2007 VALUES LESS THAN (16064), +PARTITION p2008 VALUES LESS THAN (16072), +PARTITION p2009 VALUES LESS THAN (16080), +PARTITION p2010 VALUES LESS THAN (16088), +PARTITION p2011 VALUES LESS THAN (16096), +PARTITION p2012 VALUES LESS THAN (16104), +PARTITION p2013 VALUES LESS THAN (16112), +PARTITION p2014 VALUES LESS THAN (16120), +PARTITION p2015 VALUES LESS THAN (16128), +PARTITION p2016 VALUES LESS THAN (16136), +PARTITION p2017 VALUES LESS THAN (16144), +PARTITION p2018 VALUES LESS THAN (16152), +PARTITION p2019 VALUES LESS THAN (16160), +PARTITION p2020 VALUES LESS THAN (16168), +PARTITION p2021 VALUES LESS THAN (16176), +PARTITION p2022 VALUES LESS THAN (16184), +PARTITION p2023 VALUES LESS THAN (16192), +PARTITION p2024 VALUES LESS THAN (16200), +PARTITION p2025 VALUES LESS THAN (16208), +PARTITION p2026 VALUES LESS THAN (16216), +PARTITION p2027 VALUES LESS THAN (16224), +PARTITION p2028 VALUES LESS THAN (16232), +PARTITION p2029 VALUES LESS THAN (16240), +PARTITION p2030 VALUES LESS THAN (16248), +PARTITION p2031 VALUES LESS THAN (16256), +PARTITION p2032 VALUES LESS THAN (16264), +PARTITION p2033 VALUES LESS THAN (16272), +PARTITION p2034 VALUES LESS THAN (16280), +PARTITION p2035 VALUES LESS THAN (16288), +PARTITION p2036 VALUES LESS THAN (16296), +PARTITION p2037 VALUES LESS THAN (16304), +PARTITION p2038 VALUES LESS THAN (16312), +PARTITION p2039 VALUES LESS THAN (16320), +PARTITION p2040 VALUES LESS THAN (16328), +PARTITION p2041 VALUES LESS THAN (16336), +PARTITION p2042 VALUES LESS THAN (16344), +PARTITION p2043 VALUES LESS THAN (16352), +PARTITION p2044 VALUES LESS THAN (16360), +PARTITION p2045 VALUES LESS THAN (16368), +PARTITION p2046 VALUES LESS THAN (16376), +PARTITION p2047 VALUES LESS THAN (16384), +PARTITION p2048 VALUES LESS THAN (16392), +PARTITION p2049 VALUES LESS THAN (16400), +PARTITION p2050 VALUES LESS THAN (16408), +PARTITION p2051 VALUES LESS THAN (16416), +PARTITION p2052 VALUES LESS THAN (16424), +PARTITION p2053 VALUES LESS THAN (16432), +PARTITION p2054 VALUES LESS THAN (16440), +PARTITION p2055 VALUES LESS THAN (16448), +PARTITION p2056 VALUES LESS THAN (16456), +PARTITION p2057 VALUES LESS THAN (16464), +PARTITION p2058 VALUES LESS THAN (16472), +PARTITION p2059 VALUES LESS THAN (16480), +PARTITION p2060 VALUES LESS THAN (16488), +PARTITION p2061 VALUES LESS THAN (16496), +PARTITION p2062 VALUES LESS THAN (16504), +PARTITION p2063 VALUES LESS THAN (16512), +PARTITION p2064 VALUES LESS THAN (16520), +PARTITION p2065 VALUES LESS THAN (16528), +PARTITION p2066 VALUES LESS THAN (16536), +PARTITION p2067 VALUES LESS THAN (16544), +PARTITION p2068 VALUES LESS THAN (16552), +PARTITION p2069 VALUES LESS THAN (16560), +PARTITION p2070 VALUES LESS THAN (16568), +PARTITION p2071 VALUES LESS THAN (16576), +PARTITION p2072 VALUES LESS THAN (16584), +PARTITION p2073 VALUES LESS THAN (16592), +PARTITION p2074 VALUES LESS THAN (16600), +PARTITION p2075 VALUES LESS THAN (16608), +PARTITION p2076 VALUES LESS THAN (16616), +PARTITION p2077 VALUES LESS THAN (16624), +PARTITION p2078 VALUES LESS THAN (16632), +PARTITION p2079 VALUES LESS THAN (16640), +PARTITION p2080 VALUES LESS THAN (16648), +PARTITION p2081 VALUES LESS THAN (16656), +PARTITION p2082 VALUES LESS THAN (16664), +PARTITION p2083 VALUES LESS THAN (16672), +PARTITION p2084 VALUES LESS THAN (16680), +PARTITION p2085 VALUES LESS THAN (16688), +PARTITION p2086 VALUES LESS THAN (16696), +PARTITION p2087 VALUES LESS THAN (16704), +PARTITION p2088 VALUES LESS THAN (16712), +PARTITION p2089 VALUES LESS THAN (16720), +PARTITION p2090 VALUES LESS THAN (16728), +PARTITION p2091 VALUES LESS THAN (16736), +PARTITION p2092 VALUES LESS THAN (16744), +PARTITION p2093 VALUES LESS THAN (16752), +PARTITION p2094 VALUES LESS THAN (16760), +PARTITION p2095 VALUES LESS THAN (16768), +PARTITION p2096 VALUES LESS THAN (16776), +PARTITION p2097 VALUES LESS THAN (16784), +PARTITION p2098 VALUES LESS THAN (16792), +PARTITION p2099 VALUES LESS THAN (16800), +PARTITION p2100 VALUES LESS THAN (16808), +PARTITION p2101 VALUES LESS THAN (16816), +PARTITION p2102 VALUES LESS THAN (16824), +PARTITION p2103 VALUES LESS THAN (16832), +PARTITION p2104 VALUES LESS THAN (16840), +PARTITION p2105 VALUES LESS THAN (16848), +PARTITION p2106 VALUES LESS THAN (16856), +PARTITION p2107 VALUES LESS THAN (16864), +PARTITION p2108 VALUES LESS THAN (16872), +PARTITION p2109 VALUES LESS THAN (16880), +PARTITION p2110 VALUES LESS THAN (16888), +PARTITION p2111 VALUES LESS THAN (16896), +PARTITION p2112 VALUES LESS THAN (16904), +PARTITION p2113 VALUES LESS THAN (16912), +PARTITION p2114 VALUES LESS THAN (16920), +PARTITION p2115 VALUES LESS THAN (16928), +PARTITION p2116 VALUES LESS THAN (16936), +PARTITION p2117 VALUES LESS THAN (16944), +PARTITION p2118 VALUES LESS THAN (16952), +PARTITION p2119 VALUES LESS THAN (16960), +PARTITION p2120 VALUES LESS THAN (16968), +PARTITION p2121 VALUES LESS THAN (16976), +PARTITION p2122 VALUES LESS THAN (16984), +PARTITION p2123 VALUES LESS THAN (16992), +PARTITION p2124 VALUES LESS THAN (17000), +PARTITION p2125 VALUES LESS THAN (17008), +PARTITION p2126 VALUES LESS THAN (17016), +PARTITION p2127 VALUES LESS THAN (17024), +PARTITION p2128 VALUES LESS THAN (17032), +PARTITION p2129 VALUES LESS THAN (17040), +PARTITION p2130 VALUES LESS THAN (17048), +PARTITION p2131 VALUES LESS THAN (17056), +PARTITION p2132 VALUES LESS THAN (17064), +PARTITION p2133 VALUES LESS THAN (17072), +PARTITION p2134 VALUES LESS THAN (17080), +PARTITION p2135 VALUES LESS THAN (17088), +PARTITION p2136 VALUES LESS THAN (17096), +PARTITION p2137 VALUES LESS THAN (17104), +PARTITION p2138 VALUES LESS THAN (17112), +PARTITION p2139 VALUES LESS THAN (17120), +PARTITION p2140 VALUES LESS THAN (17128), +PARTITION p2141 VALUES LESS THAN (17136), +PARTITION p2142 VALUES LESS THAN (17144), +PARTITION p2143 VALUES LESS THAN (17152), +PARTITION p2144 VALUES LESS THAN (17160), +PARTITION p2145 VALUES LESS THAN (17168), +PARTITION p2146 VALUES LESS THAN (17176), +PARTITION p2147 VALUES LESS THAN (17184), +PARTITION p2148 VALUES LESS THAN (17192), +PARTITION p2149 VALUES LESS THAN (17200), +PARTITION p2150 VALUES LESS THAN (17208), +PARTITION p2151 VALUES LESS THAN (17216), +PARTITION p2152 VALUES LESS THAN (17224), +PARTITION p2153 VALUES LESS THAN (17232), +PARTITION p2154 VALUES LESS THAN (17240), +PARTITION p2155 VALUES LESS THAN (17248), +PARTITION p2156 VALUES LESS THAN (17256), +PARTITION p2157 VALUES LESS THAN (17264), +PARTITION p2158 VALUES LESS THAN (17272), +PARTITION p2159 VALUES LESS THAN (17280), +PARTITION p2160 VALUES LESS THAN (17288), +PARTITION p2161 VALUES LESS THAN (17296), +PARTITION p2162 VALUES LESS THAN (17304), +PARTITION p2163 VALUES LESS THAN (17312), +PARTITION p2164 VALUES LESS THAN (17320), +PARTITION p2165 VALUES LESS THAN (17328), +PARTITION p2166 VALUES LESS THAN (17336), +PARTITION p2167 VALUES LESS THAN (17344), +PARTITION p2168 VALUES LESS THAN (17352), +PARTITION p2169 VALUES LESS THAN (17360), +PARTITION p2170 VALUES LESS THAN (17368), +PARTITION p2171 VALUES LESS THAN (17376), +PARTITION p2172 VALUES LESS THAN (17384), +PARTITION p2173 VALUES LESS THAN (17392), +PARTITION p2174 VALUES LESS THAN (17400), +PARTITION p2175 VALUES LESS THAN (17408), +PARTITION p2176 VALUES LESS THAN (17416), +PARTITION p2177 VALUES LESS THAN (17424), +PARTITION p2178 VALUES LESS THAN (17432), +PARTITION p2179 VALUES LESS THAN (17440), +PARTITION p2180 VALUES LESS THAN (17448), +PARTITION p2181 VALUES LESS THAN (17456), +PARTITION p2182 VALUES LESS THAN (17464), +PARTITION p2183 VALUES LESS THAN (17472), +PARTITION p2184 VALUES LESS THAN (17480), +PARTITION p2185 VALUES LESS THAN (17488), +PARTITION p2186 VALUES LESS THAN (17496), +PARTITION p2187 VALUES LESS THAN (17504), +PARTITION p2188 VALUES LESS THAN (17512), +PARTITION p2189 VALUES LESS THAN (17520), +PARTITION p2190 VALUES LESS THAN (17528), +PARTITION p2191 VALUES LESS THAN (17536), +PARTITION p2192 VALUES LESS THAN (17544), +PARTITION p2193 VALUES LESS THAN (17552), +PARTITION p2194 VALUES LESS THAN (17560), +PARTITION p2195 VALUES LESS THAN (17568), +PARTITION p2196 VALUES LESS THAN (17576), +PARTITION p2197 VALUES LESS THAN (17584), +PARTITION p2198 VALUES LESS THAN (17592), +PARTITION p2199 VALUES LESS THAN (17600), +PARTITION p2200 VALUES LESS THAN (17608), +PARTITION p2201 VALUES LESS THAN (17616), +PARTITION p2202 VALUES LESS THAN (17624), +PARTITION p2203 VALUES LESS THAN (17632), +PARTITION p2204 VALUES LESS THAN (17640), +PARTITION p2205 VALUES LESS THAN (17648), +PARTITION p2206 VALUES LESS THAN (17656), +PARTITION p2207 VALUES LESS THAN (17664), +PARTITION p2208 VALUES LESS THAN (17672), +PARTITION p2209 VALUES LESS THAN (17680), +PARTITION p2210 VALUES LESS THAN (17688), +PARTITION p2211 VALUES LESS THAN (17696), +PARTITION p2212 VALUES LESS THAN (17704), +PARTITION p2213 VALUES LESS THAN (17712), +PARTITION p2214 VALUES LESS THAN (17720), +PARTITION p2215 VALUES LESS THAN (17728), +PARTITION p2216 VALUES LESS THAN (17736), +PARTITION p2217 VALUES LESS THAN (17744), +PARTITION p2218 VALUES LESS THAN (17752), +PARTITION p2219 VALUES LESS THAN (17760), +PARTITION p2220 VALUES LESS THAN (17768), +PARTITION p2221 VALUES LESS THAN (17776), +PARTITION p2222 VALUES LESS THAN (17784), +PARTITION p2223 VALUES LESS THAN (17792), +PARTITION p2224 VALUES LESS THAN (17800), +PARTITION p2225 VALUES LESS THAN (17808), +PARTITION p2226 VALUES LESS THAN (17816), +PARTITION p2227 VALUES LESS THAN (17824), +PARTITION p2228 VALUES LESS THAN (17832), +PARTITION p2229 VALUES LESS THAN (17840), +PARTITION p2230 VALUES LESS THAN (17848), +PARTITION p2231 VALUES LESS THAN (17856), +PARTITION p2232 VALUES LESS THAN (17864), +PARTITION p2233 VALUES LESS THAN (17872), +PARTITION p2234 VALUES LESS THAN (17880), +PARTITION p2235 VALUES LESS THAN (17888), +PARTITION p2236 VALUES LESS THAN (17896), +PARTITION p2237 VALUES LESS THAN (17904), +PARTITION p2238 VALUES LESS THAN (17912), +PARTITION p2239 VALUES LESS THAN (17920), +PARTITION p2240 VALUES LESS THAN (17928), +PARTITION p2241 VALUES LESS THAN (17936), +PARTITION p2242 VALUES LESS THAN (17944), +PARTITION p2243 VALUES LESS THAN (17952), +PARTITION p2244 VALUES LESS THAN (17960), +PARTITION p2245 VALUES LESS THAN (17968), +PARTITION p2246 VALUES LESS THAN (17976), +PARTITION p2247 VALUES LESS THAN (17984), +PARTITION p2248 VALUES LESS THAN (17992), +PARTITION p2249 VALUES LESS THAN (18000), +PARTITION p2250 VALUES LESS THAN (18008), +PARTITION p2251 VALUES LESS THAN (18016), +PARTITION p2252 VALUES LESS THAN (18024), +PARTITION p2253 VALUES LESS THAN (18032), +PARTITION p2254 VALUES LESS THAN (18040), +PARTITION p2255 VALUES LESS THAN (18048), +PARTITION p2256 VALUES LESS THAN (18056), +PARTITION p2257 VALUES LESS THAN (18064), +PARTITION p2258 VALUES LESS THAN (18072), +PARTITION p2259 VALUES LESS THAN (18080), +PARTITION p2260 VALUES LESS THAN (18088), +PARTITION p2261 VALUES LESS THAN (18096), +PARTITION p2262 VALUES LESS THAN (18104), +PARTITION p2263 VALUES LESS THAN (18112), +PARTITION p2264 VALUES LESS THAN (18120), +PARTITION p2265 VALUES LESS THAN (18128), +PARTITION p2266 VALUES LESS THAN (18136), +PARTITION p2267 VALUES LESS THAN (18144), +PARTITION p2268 VALUES LESS THAN (18152), +PARTITION p2269 VALUES LESS THAN (18160), +PARTITION p2270 VALUES LESS THAN (18168), +PARTITION p2271 VALUES LESS THAN (18176), +PARTITION p2272 VALUES LESS THAN (18184), +PARTITION p2273 VALUES LESS THAN (18192), +PARTITION p2274 VALUES LESS THAN (18200), +PARTITION p2275 VALUES LESS THAN (18208), +PARTITION p2276 VALUES LESS THAN (18216), +PARTITION p2277 VALUES LESS THAN (18224), +PARTITION p2278 VALUES LESS THAN (18232), +PARTITION p2279 VALUES LESS THAN (18240), +PARTITION p2280 VALUES LESS THAN (18248), +PARTITION p2281 VALUES LESS THAN (18256), +PARTITION p2282 VALUES LESS THAN (18264), +PARTITION p2283 VALUES LESS THAN (18272), +PARTITION p2284 VALUES LESS THAN (18280), +PARTITION p2285 VALUES LESS THAN (18288), +PARTITION p2286 VALUES LESS THAN (18296), +PARTITION p2287 VALUES LESS THAN (18304), +PARTITION p2288 VALUES LESS THAN (18312), +PARTITION p2289 VALUES LESS THAN (18320), +PARTITION p2290 VALUES LESS THAN (18328), +PARTITION p2291 VALUES LESS THAN (18336), +PARTITION p2292 VALUES LESS THAN (18344), +PARTITION p2293 VALUES LESS THAN (18352), +PARTITION p2294 VALUES LESS THAN (18360), +PARTITION p2295 VALUES LESS THAN (18368), +PARTITION p2296 VALUES LESS THAN (18376), +PARTITION p2297 VALUES LESS THAN (18384), +PARTITION p2298 VALUES LESS THAN (18392), +PARTITION p2299 VALUES LESS THAN (18400), +PARTITION p2300 VALUES LESS THAN (18408), +PARTITION p2301 VALUES LESS THAN (18416), +PARTITION p2302 VALUES LESS THAN (18424), +PARTITION p2303 VALUES LESS THAN (18432), +PARTITION p2304 VALUES LESS THAN (18440), +PARTITION p2305 VALUES LESS THAN (18448), +PARTITION p2306 VALUES LESS THAN (18456), +PARTITION p2307 VALUES LESS THAN (18464), +PARTITION p2308 VALUES LESS THAN (18472), +PARTITION p2309 VALUES LESS THAN (18480), +PARTITION p2310 VALUES LESS THAN (18488), +PARTITION p2311 VALUES LESS THAN (18496), +PARTITION p2312 VALUES LESS THAN (18504), +PARTITION p2313 VALUES LESS THAN (18512), +PARTITION p2314 VALUES LESS THAN (18520), +PARTITION p2315 VALUES LESS THAN (18528), +PARTITION p2316 VALUES LESS THAN (18536), +PARTITION p2317 VALUES LESS THAN (18544), +PARTITION p2318 VALUES LESS THAN (18552), +PARTITION p2319 VALUES LESS THAN (18560), +PARTITION p2320 VALUES LESS THAN (18568), +PARTITION p2321 VALUES LESS THAN (18576), +PARTITION p2322 VALUES LESS THAN (18584), +PARTITION p2323 VALUES LESS THAN (18592), +PARTITION p2324 VALUES LESS THAN (18600), +PARTITION p2325 VALUES LESS THAN (18608), +PARTITION p2326 VALUES LESS THAN (18616), +PARTITION p2327 VALUES LESS THAN (18624), +PARTITION p2328 VALUES LESS THAN (18632), +PARTITION p2329 VALUES LESS THAN (18640), +PARTITION p2330 VALUES LESS THAN (18648), +PARTITION p2331 VALUES LESS THAN (18656), +PARTITION p2332 VALUES LESS THAN (18664), +PARTITION p2333 VALUES LESS THAN (18672), +PARTITION p2334 VALUES LESS THAN (18680), +PARTITION p2335 VALUES LESS THAN (18688), +PARTITION p2336 VALUES LESS THAN (18696), +PARTITION p2337 VALUES LESS THAN (18704), +PARTITION p2338 VALUES LESS THAN (18712), +PARTITION p2339 VALUES LESS THAN (18720), +PARTITION p2340 VALUES LESS THAN (18728), +PARTITION p2341 VALUES LESS THAN (18736), +PARTITION p2342 VALUES LESS THAN (18744), +PARTITION p2343 VALUES LESS THAN (18752), +PARTITION p2344 VALUES LESS THAN (18760), +PARTITION p2345 VALUES LESS THAN (18768), +PARTITION p2346 VALUES LESS THAN (18776), +PARTITION p2347 VALUES LESS THAN (18784), +PARTITION p2348 VALUES LESS THAN (18792), +PARTITION p2349 VALUES LESS THAN (18800), +PARTITION p2350 VALUES LESS THAN (18808), +PARTITION p2351 VALUES LESS THAN (18816), +PARTITION p2352 VALUES LESS THAN (18824), +PARTITION p2353 VALUES LESS THAN (18832), +PARTITION p2354 VALUES LESS THAN (18840), +PARTITION p2355 VALUES LESS THAN (18848), +PARTITION p2356 VALUES LESS THAN (18856), +PARTITION p2357 VALUES LESS THAN (18864), +PARTITION p2358 VALUES LESS THAN (18872), +PARTITION p2359 VALUES LESS THAN (18880), +PARTITION p2360 VALUES LESS THAN (18888), +PARTITION p2361 VALUES LESS THAN (18896), +PARTITION p2362 VALUES LESS THAN (18904), +PARTITION p2363 VALUES LESS THAN (18912), +PARTITION p2364 VALUES LESS THAN (18920), +PARTITION p2365 VALUES LESS THAN (18928), +PARTITION p2366 VALUES LESS THAN (18936), +PARTITION p2367 VALUES LESS THAN (18944), +PARTITION p2368 VALUES LESS THAN (18952), +PARTITION p2369 VALUES LESS THAN (18960), +PARTITION p2370 VALUES LESS THAN (18968), +PARTITION p2371 VALUES LESS THAN (18976), +PARTITION p2372 VALUES LESS THAN (18984), +PARTITION p2373 VALUES LESS THAN (18992), +PARTITION p2374 VALUES LESS THAN (19000), +PARTITION p2375 VALUES LESS THAN (19008), +PARTITION p2376 VALUES LESS THAN (19016), +PARTITION p2377 VALUES LESS THAN (19024), +PARTITION p2378 VALUES LESS THAN (19032), +PARTITION p2379 VALUES LESS THAN (19040), +PARTITION p2380 VALUES LESS THAN (19048), +PARTITION p2381 VALUES LESS THAN (19056), +PARTITION p2382 VALUES LESS THAN (19064), +PARTITION p2383 VALUES LESS THAN (19072), +PARTITION p2384 VALUES LESS THAN (19080), +PARTITION p2385 VALUES LESS THAN (19088), +PARTITION p2386 VALUES LESS THAN (19096), +PARTITION p2387 VALUES LESS THAN (19104), +PARTITION p2388 VALUES LESS THAN (19112), +PARTITION p2389 VALUES LESS THAN (19120), +PARTITION p2390 VALUES LESS THAN (19128), +PARTITION p2391 VALUES LESS THAN (19136), +PARTITION p2392 VALUES LESS THAN (19144), +PARTITION p2393 VALUES LESS THAN (19152), +PARTITION p2394 VALUES LESS THAN (19160), +PARTITION p2395 VALUES LESS THAN (19168), +PARTITION p2396 VALUES LESS THAN (19176), +PARTITION p2397 VALUES LESS THAN (19184), +PARTITION p2398 VALUES LESS THAN (19192), +PARTITION p2399 VALUES LESS THAN (19200), +PARTITION p2400 VALUES LESS THAN (19208), +PARTITION p2401 VALUES LESS THAN (19216), +PARTITION p2402 VALUES LESS THAN (19224), +PARTITION p2403 VALUES LESS THAN (19232), +PARTITION p2404 VALUES LESS THAN (19240), +PARTITION p2405 VALUES LESS THAN (19248), +PARTITION p2406 VALUES LESS THAN (19256), +PARTITION p2407 VALUES LESS THAN (19264), +PARTITION p2408 VALUES LESS THAN (19272), +PARTITION p2409 VALUES LESS THAN (19280), +PARTITION p2410 VALUES LESS THAN (19288), +PARTITION p2411 VALUES LESS THAN (19296), +PARTITION p2412 VALUES LESS THAN (19304), +PARTITION p2413 VALUES LESS THAN (19312), +PARTITION p2414 VALUES LESS THAN (19320), +PARTITION p2415 VALUES LESS THAN (19328), +PARTITION p2416 VALUES LESS THAN (19336), +PARTITION p2417 VALUES LESS THAN (19344), +PARTITION p2418 VALUES LESS THAN (19352), +PARTITION p2419 VALUES LESS THAN (19360), +PARTITION p2420 VALUES LESS THAN (19368), +PARTITION p2421 VALUES LESS THAN (19376), +PARTITION p2422 VALUES LESS THAN (19384), +PARTITION p2423 VALUES LESS THAN (19392), +PARTITION p2424 VALUES LESS THAN (19400), +PARTITION p2425 VALUES LESS THAN (19408), +PARTITION p2426 VALUES LESS THAN (19416), +PARTITION p2427 VALUES LESS THAN (19424), +PARTITION p2428 VALUES LESS THAN (19432), +PARTITION p2429 VALUES LESS THAN (19440), +PARTITION p2430 VALUES LESS THAN (19448), +PARTITION p2431 VALUES LESS THAN (19456), +PARTITION p2432 VALUES LESS THAN (19464), +PARTITION p2433 VALUES LESS THAN (19472), +PARTITION p2434 VALUES LESS THAN (19480), +PARTITION p2435 VALUES LESS THAN (19488), +PARTITION p2436 VALUES LESS THAN (19496), +PARTITION p2437 VALUES LESS THAN (19504), +PARTITION p2438 VALUES LESS THAN (19512), +PARTITION p2439 VALUES LESS THAN (19520), +PARTITION p2440 VALUES LESS THAN (19528), +PARTITION p2441 VALUES LESS THAN (19536), +PARTITION p2442 VALUES LESS THAN (19544), +PARTITION p2443 VALUES LESS THAN (19552), +PARTITION p2444 VALUES LESS THAN (19560), +PARTITION p2445 VALUES LESS THAN (19568), +PARTITION p2446 VALUES LESS THAN (19576), +PARTITION p2447 VALUES LESS THAN (19584), +PARTITION p2448 VALUES LESS THAN (19592), +PARTITION p2449 VALUES LESS THAN (19600), +PARTITION p2450 VALUES LESS THAN (19608), +PARTITION p2451 VALUES LESS THAN (19616), +PARTITION p2452 VALUES LESS THAN (19624), +PARTITION p2453 VALUES LESS THAN (19632), +PARTITION p2454 VALUES LESS THAN (19640), +PARTITION p2455 VALUES LESS THAN (19648), +PARTITION p2456 VALUES LESS THAN (19656), +PARTITION p2457 VALUES LESS THAN (19664), +PARTITION p2458 VALUES LESS THAN (19672), +PARTITION p2459 VALUES LESS THAN (19680), +PARTITION p2460 VALUES LESS THAN (19688), +PARTITION p2461 VALUES LESS THAN (19696), +PARTITION p2462 VALUES LESS THAN (19704), +PARTITION p2463 VALUES LESS THAN (19712), +PARTITION p2464 VALUES LESS THAN (19720), +PARTITION p2465 VALUES LESS THAN (19728), +PARTITION p2466 VALUES LESS THAN (19736), +PARTITION p2467 VALUES LESS THAN (19744), +PARTITION p2468 VALUES LESS THAN (19752), +PARTITION p2469 VALUES LESS THAN (19760), +PARTITION p2470 VALUES LESS THAN (19768), +PARTITION p2471 VALUES LESS THAN (19776), +PARTITION p2472 VALUES LESS THAN (19784), +PARTITION p2473 VALUES LESS THAN (19792), +PARTITION p2474 VALUES LESS THAN (19800), +PARTITION p2475 VALUES LESS THAN (19808), +PARTITION p2476 VALUES LESS THAN (19816), +PARTITION p2477 VALUES LESS THAN (19824), +PARTITION p2478 VALUES LESS THAN (19832), +PARTITION p2479 VALUES LESS THAN (19840), +PARTITION p2480 VALUES LESS THAN (19848), +PARTITION p2481 VALUES LESS THAN (19856), +PARTITION p2482 VALUES LESS THAN (19864), +PARTITION p2483 VALUES LESS THAN (19872), +PARTITION p2484 VALUES LESS THAN (19880), +PARTITION p2485 VALUES LESS THAN (19888), +PARTITION p2486 VALUES LESS THAN (19896), +PARTITION p2487 VALUES LESS THAN (19904), +PARTITION p2488 VALUES LESS THAN (19912), +PARTITION p2489 VALUES LESS THAN (19920), +PARTITION p2490 VALUES LESS THAN (19928), +PARTITION p2491 VALUES LESS THAN (19936), +PARTITION p2492 VALUES LESS THAN (19944), +PARTITION p2493 VALUES LESS THAN (19952), +PARTITION p2494 VALUES LESS THAN (19960), +PARTITION p2495 VALUES LESS THAN (19968), +PARTITION p2496 VALUES LESS THAN (19976), +PARTITION p2497 VALUES LESS THAN (19984), +PARTITION p2498 VALUES LESS THAN (19992), +PARTITION p2499 VALUES LESS THAN (20000), +PARTITION p2500 VALUES LESS THAN (20008), +PARTITION p2501 VALUES LESS THAN (20016), +PARTITION p2502 VALUES LESS THAN (20024), +PARTITION p2503 VALUES LESS THAN (20032), +PARTITION p2504 VALUES LESS THAN (20040), +PARTITION p2505 VALUES LESS THAN (20048), +PARTITION p2506 VALUES LESS THAN (20056), +PARTITION p2507 VALUES LESS THAN (20064), +PARTITION p2508 VALUES LESS THAN (20072), +PARTITION p2509 VALUES LESS THAN (20080), +PARTITION p2510 VALUES LESS THAN (20088), +PARTITION p2511 VALUES LESS THAN (20096), +PARTITION p2512 VALUES LESS THAN (20104), +PARTITION p2513 VALUES LESS THAN (20112), +PARTITION p2514 VALUES LESS THAN (20120), +PARTITION p2515 VALUES LESS THAN (20128), +PARTITION p2516 VALUES LESS THAN (20136), +PARTITION p2517 VALUES LESS THAN (20144), +PARTITION p2518 VALUES LESS THAN (20152), +PARTITION p2519 VALUES LESS THAN (20160), +PARTITION p2520 VALUES LESS THAN (20168), +PARTITION p2521 VALUES LESS THAN (20176), +PARTITION p2522 VALUES LESS THAN (20184), +PARTITION p2523 VALUES LESS THAN (20192), +PARTITION p2524 VALUES LESS THAN (20200), +PARTITION p2525 VALUES LESS THAN (20208), +PARTITION p2526 VALUES LESS THAN (20216), +PARTITION p2527 VALUES LESS THAN (20224), +PARTITION p2528 VALUES LESS THAN (20232), +PARTITION p2529 VALUES LESS THAN (20240), +PARTITION p2530 VALUES LESS THAN (20248), +PARTITION p2531 VALUES LESS THAN (20256), +PARTITION p2532 VALUES LESS THAN (20264), +PARTITION p2533 VALUES LESS THAN (20272), +PARTITION p2534 VALUES LESS THAN (20280), +PARTITION p2535 VALUES LESS THAN (20288), +PARTITION p2536 VALUES LESS THAN (20296), +PARTITION p2537 VALUES LESS THAN (20304), +PARTITION p2538 VALUES LESS THAN (20312), +PARTITION p2539 VALUES LESS THAN (20320), +PARTITION p2540 VALUES LESS THAN (20328), +PARTITION p2541 VALUES LESS THAN (20336), +PARTITION p2542 VALUES LESS THAN (20344), +PARTITION p2543 VALUES LESS THAN (20352), +PARTITION p2544 VALUES LESS THAN (20360), +PARTITION p2545 VALUES LESS THAN (20368), +PARTITION p2546 VALUES LESS THAN (20376), +PARTITION p2547 VALUES LESS THAN (20384), +PARTITION p2548 VALUES LESS THAN (20392), +PARTITION p2549 VALUES LESS THAN (20400), +PARTITION p2550 VALUES LESS THAN (20408), +PARTITION p2551 VALUES LESS THAN (20416), +PARTITION p2552 VALUES LESS THAN (20424), +PARTITION p2553 VALUES LESS THAN (20432), +PARTITION p2554 VALUES LESS THAN (20440), +PARTITION p2555 VALUES LESS THAN (20448), +PARTITION p2556 VALUES LESS THAN (20456), +PARTITION p2557 VALUES LESS THAN (20464), +PARTITION p2558 VALUES LESS THAN (20472), +PARTITION p2559 VALUES LESS THAN (20480), +PARTITION p2560 VALUES LESS THAN (20488), +PARTITION p2561 VALUES LESS THAN (20496), +PARTITION p2562 VALUES LESS THAN (20504), +PARTITION p2563 VALUES LESS THAN (20512), +PARTITION p2564 VALUES LESS THAN (20520), +PARTITION p2565 VALUES LESS THAN (20528), +PARTITION p2566 VALUES LESS THAN (20536), +PARTITION p2567 VALUES LESS THAN (20544), +PARTITION p2568 VALUES LESS THAN (20552), +PARTITION p2569 VALUES LESS THAN (20560), +PARTITION p2570 VALUES LESS THAN (20568), +PARTITION p2571 VALUES LESS THAN (20576), +PARTITION p2572 VALUES LESS THAN (20584), +PARTITION p2573 VALUES LESS THAN (20592), +PARTITION p2574 VALUES LESS THAN (20600), +PARTITION p2575 VALUES LESS THAN (20608), +PARTITION p2576 VALUES LESS THAN (20616), +PARTITION p2577 VALUES LESS THAN (20624), +PARTITION p2578 VALUES LESS THAN (20632), +PARTITION p2579 VALUES LESS THAN (20640), +PARTITION p2580 VALUES LESS THAN (20648), +PARTITION p2581 VALUES LESS THAN (20656), +PARTITION p2582 VALUES LESS THAN (20664), +PARTITION p2583 VALUES LESS THAN (20672), +PARTITION p2584 VALUES LESS THAN (20680), +PARTITION p2585 VALUES LESS THAN (20688), +PARTITION p2586 VALUES LESS THAN (20696), +PARTITION p2587 VALUES LESS THAN (20704), +PARTITION p2588 VALUES LESS THAN (20712), +PARTITION p2589 VALUES LESS THAN (20720), +PARTITION p2590 VALUES LESS THAN (20728), +PARTITION p2591 VALUES LESS THAN (20736), +PARTITION p2592 VALUES LESS THAN (20744), +PARTITION p2593 VALUES LESS THAN (20752), +PARTITION p2594 VALUES LESS THAN (20760), +PARTITION p2595 VALUES LESS THAN (20768), +PARTITION p2596 VALUES LESS THAN (20776), +PARTITION p2597 VALUES LESS THAN (20784), +PARTITION p2598 VALUES LESS THAN (20792), +PARTITION p2599 VALUES LESS THAN (20800), +PARTITION p2600 VALUES LESS THAN (20808), +PARTITION p2601 VALUES LESS THAN (20816), +PARTITION p2602 VALUES LESS THAN (20824), +PARTITION p2603 VALUES LESS THAN (20832), +PARTITION p2604 VALUES LESS THAN (20840), +PARTITION p2605 VALUES LESS THAN (20848), +PARTITION p2606 VALUES LESS THAN (20856), +PARTITION p2607 VALUES LESS THAN (20864), +PARTITION p2608 VALUES LESS THAN (20872), +PARTITION p2609 VALUES LESS THAN (20880), +PARTITION p2610 VALUES LESS THAN (20888), +PARTITION p2611 VALUES LESS THAN (20896), +PARTITION p2612 VALUES LESS THAN (20904), +PARTITION p2613 VALUES LESS THAN (20912), +PARTITION p2614 VALUES LESS THAN (20920), +PARTITION p2615 VALUES LESS THAN (20928), +PARTITION p2616 VALUES LESS THAN (20936), +PARTITION p2617 VALUES LESS THAN (20944), +PARTITION p2618 VALUES LESS THAN (20952), +PARTITION p2619 VALUES LESS THAN (20960), +PARTITION p2620 VALUES LESS THAN (20968), +PARTITION p2621 VALUES LESS THAN (20976), +PARTITION p2622 VALUES LESS THAN (20984), +PARTITION p2623 VALUES LESS THAN (20992), +PARTITION p2624 VALUES LESS THAN (21000), +PARTITION p2625 VALUES LESS THAN (21008), +PARTITION p2626 VALUES LESS THAN (21016), +PARTITION p2627 VALUES LESS THAN (21024), +PARTITION p2628 VALUES LESS THAN (21032), +PARTITION p2629 VALUES LESS THAN (21040), +PARTITION p2630 VALUES LESS THAN (21048), +PARTITION p2631 VALUES LESS THAN (21056), +PARTITION p2632 VALUES LESS THAN (21064), +PARTITION p2633 VALUES LESS THAN (21072), +PARTITION p2634 VALUES LESS THAN (21080), +PARTITION p2635 VALUES LESS THAN (21088), +PARTITION p2636 VALUES LESS THAN (21096), +PARTITION p2637 VALUES LESS THAN (21104), +PARTITION p2638 VALUES LESS THAN (21112), +PARTITION p2639 VALUES LESS THAN (21120), +PARTITION p2640 VALUES LESS THAN (21128), +PARTITION p2641 VALUES LESS THAN (21136), +PARTITION p2642 VALUES LESS THAN (21144), +PARTITION p2643 VALUES LESS THAN (21152), +PARTITION p2644 VALUES LESS THAN (21160), +PARTITION p2645 VALUES LESS THAN (21168), +PARTITION p2646 VALUES LESS THAN (21176), +PARTITION p2647 VALUES LESS THAN (21184), +PARTITION p2648 VALUES LESS THAN (21192), +PARTITION p2649 VALUES LESS THAN (21200), +PARTITION p2650 VALUES LESS THAN (21208), +PARTITION p2651 VALUES LESS THAN (21216), +PARTITION p2652 VALUES LESS THAN (21224), +PARTITION p2653 VALUES LESS THAN (21232), +PARTITION p2654 VALUES LESS THAN (21240), +PARTITION p2655 VALUES LESS THAN (21248), +PARTITION p2656 VALUES LESS THAN (21256), +PARTITION p2657 VALUES LESS THAN (21264), +PARTITION p2658 VALUES LESS THAN (21272), +PARTITION p2659 VALUES LESS THAN (21280), +PARTITION p2660 VALUES LESS THAN (21288), +PARTITION p2661 VALUES LESS THAN (21296), +PARTITION p2662 VALUES LESS THAN (21304), +PARTITION p2663 VALUES LESS THAN (21312), +PARTITION p2664 VALUES LESS THAN (21320), +PARTITION p2665 VALUES LESS THAN (21328), +PARTITION p2666 VALUES LESS THAN (21336), +PARTITION p2667 VALUES LESS THAN (21344), +PARTITION p2668 VALUES LESS THAN (21352), +PARTITION p2669 VALUES LESS THAN (21360), +PARTITION p2670 VALUES LESS THAN (21368), +PARTITION p2671 VALUES LESS THAN (21376), +PARTITION p2672 VALUES LESS THAN (21384), +PARTITION p2673 VALUES LESS THAN (21392), +PARTITION p2674 VALUES LESS THAN (21400), +PARTITION p2675 VALUES LESS THAN (21408), +PARTITION p2676 VALUES LESS THAN (21416), +PARTITION p2677 VALUES LESS THAN (21424), +PARTITION p2678 VALUES LESS THAN (21432), +PARTITION p2679 VALUES LESS THAN (21440), +PARTITION p2680 VALUES LESS THAN (21448), +PARTITION p2681 VALUES LESS THAN (21456), +PARTITION p2682 VALUES LESS THAN (21464), +PARTITION p2683 VALUES LESS THAN (21472), +PARTITION p2684 VALUES LESS THAN (21480), +PARTITION p2685 VALUES LESS THAN (21488), +PARTITION p2686 VALUES LESS THAN (21496), +PARTITION p2687 VALUES LESS THAN (21504), +PARTITION p2688 VALUES LESS THAN (21512), +PARTITION p2689 VALUES LESS THAN (21520), +PARTITION p2690 VALUES LESS THAN (21528), +PARTITION p2691 VALUES LESS THAN (21536), +PARTITION p2692 VALUES LESS THAN (21544), +PARTITION p2693 VALUES LESS THAN (21552), +PARTITION p2694 VALUES LESS THAN (21560), +PARTITION p2695 VALUES LESS THAN (21568), +PARTITION p2696 VALUES LESS THAN (21576), +PARTITION p2697 VALUES LESS THAN (21584), +PARTITION p2698 VALUES LESS THAN (21592), +PARTITION p2699 VALUES LESS THAN (21600), +PARTITION p2700 VALUES LESS THAN (21608), +PARTITION p2701 VALUES LESS THAN (21616), +PARTITION p2702 VALUES LESS THAN (21624), +PARTITION p2703 VALUES LESS THAN (21632), +PARTITION p2704 VALUES LESS THAN (21640), +PARTITION p2705 VALUES LESS THAN (21648), +PARTITION p2706 VALUES LESS THAN (21656), +PARTITION p2707 VALUES LESS THAN (21664), +PARTITION p2708 VALUES LESS THAN (21672), +PARTITION p2709 VALUES LESS THAN (21680), +PARTITION p2710 VALUES LESS THAN (21688), +PARTITION p2711 VALUES LESS THAN (21696), +PARTITION p2712 VALUES LESS THAN (21704), +PARTITION p2713 VALUES LESS THAN (21712), +PARTITION p2714 VALUES LESS THAN (21720), +PARTITION p2715 VALUES LESS THAN (21728), +PARTITION p2716 VALUES LESS THAN (21736), +PARTITION p2717 VALUES LESS THAN (21744), +PARTITION p2718 VALUES LESS THAN (21752), +PARTITION p2719 VALUES LESS THAN (21760), +PARTITION p2720 VALUES LESS THAN (21768), +PARTITION p2721 VALUES LESS THAN (21776), +PARTITION p2722 VALUES LESS THAN (21784), +PARTITION p2723 VALUES LESS THAN (21792), +PARTITION p2724 VALUES LESS THAN (21800), +PARTITION p2725 VALUES LESS THAN (21808), +PARTITION p2726 VALUES LESS THAN (21816), +PARTITION p2727 VALUES LESS THAN (21824), +PARTITION p2728 VALUES LESS THAN (21832), +PARTITION p2729 VALUES LESS THAN (21840), +PARTITION p2730 VALUES LESS THAN (21848), +PARTITION p2731 VALUES LESS THAN (21856), +PARTITION p2732 VALUES LESS THAN (21864), +PARTITION p2733 VALUES LESS THAN (21872), +PARTITION p2734 VALUES LESS THAN (21880), +PARTITION p2735 VALUES LESS THAN (21888), +PARTITION p2736 VALUES LESS THAN (21896), +PARTITION p2737 VALUES LESS THAN (21904), +PARTITION p2738 VALUES LESS THAN (21912), +PARTITION p2739 VALUES LESS THAN (21920), +PARTITION p2740 VALUES LESS THAN (21928), +PARTITION p2741 VALUES LESS THAN (21936), +PARTITION p2742 VALUES LESS THAN (21944), +PARTITION p2743 VALUES LESS THAN (21952), +PARTITION p2744 VALUES LESS THAN (21960), +PARTITION p2745 VALUES LESS THAN (21968), +PARTITION p2746 VALUES LESS THAN (21976), +PARTITION p2747 VALUES LESS THAN (21984), +PARTITION p2748 VALUES LESS THAN (21992), +PARTITION p2749 VALUES LESS THAN (22000), +PARTITION p2750 VALUES LESS THAN (22008), +PARTITION p2751 VALUES LESS THAN (22016), +PARTITION p2752 VALUES LESS THAN (22024), +PARTITION p2753 VALUES LESS THAN (22032), +PARTITION p2754 VALUES LESS THAN (22040), +PARTITION p2755 VALUES LESS THAN (22048), +PARTITION p2756 VALUES LESS THAN (22056), +PARTITION p2757 VALUES LESS THAN (22064), +PARTITION p2758 VALUES LESS THAN (22072), +PARTITION p2759 VALUES LESS THAN (22080), +PARTITION p2760 VALUES LESS THAN (22088), +PARTITION p2761 VALUES LESS THAN (22096), +PARTITION p2762 VALUES LESS THAN (22104), +PARTITION p2763 VALUES LESS THAN (22112), +PARTITION p2764 VALUES LESS THAN (22120), +PARTITION p2765 VALUES LESS THAN (22128), +PARTITION p2766 VALUES LESS THAN (22136), +PARTITION p2767 VALUES LESS THAN (22144), +PARTITION p2768 VALUES LESS THAN (22152), +PARTITION p2769 VALUES LESS THAN (22160), +PARTITION p2770 VALUES LESS THAN (22168), +PARTITION p2771 VALUES LESS THAN (22176), +PARTITION p2772 VALUES LESS THAN (22184), +PARTITION p2773 VALUES LESS THAN (22192), +PARTITION p2774 VALUES LESS THAN (22200), +PARTITION p2775 VALUES LESS THAN (22208), +PARTITION p2776 VALUES LESS THAN (22216), +PARTITION p2777 VALUES LESS THAN (22224), +PARTITION p2778 VALUES LESS THAN (22232), +PARTITION p2779 VALUES LESS THAN (22240), +PARTITION p2780 VALUES LESS THAN (22248), +PARTITION p2781 VALUES LESS THAN (22256), +PARTITION p2782 VALUES LESS THAN (22264), +PARTITION p2783 VALUES LESS THAN (22272), +PARTITION p2784 VALUES LESS THAN (22280), +PARTITION p2785 VALUES LESS THAN (22288), +PARTITION p2786 VALUES LESS THAN (22296), +PARTITION p2787 VALUES LESS THAN (22304), +PARTITION p2788 VALUES LESS THAN (22312), +PARTITION p2789 VALUES LESS THAN (22320), +PARTITION p2790 VALUES LESS THAN (22328), +PARTITION p2791 VALUES LESS THAN (22336), +PARTITION p2792 VALUES LESS THAN (22344), +PARTITION p2793 VALUES LESS THAN (22352), +PARTITION p2794 VALUES LESS THAN (22360), +PARTITION p2795 VALUES LESS THAN (22368), +PARTITION p2796 VALUES LESS THAN (22376), +PARTITION p2797 VALUES LESS THAN (22384), +PARTITION p2798 VALUES LESS THAN (22392), +PARTITION p2799 VALUES LESS THAN (22400), +PARTITION p2800 VALUES LESS THAN (22408), +PARTITION p2801 VALUES LESS THAN (22416), +PARTITION p2802 VALUES LESS THAN (22424), +PARTITION p2803 VALUES LESS THAN (22432), +PARTITION p2804 VALUES LESS THAN (22440), +PARTITION p2805 VALUES LESS THAN (22448), +PARTITION p2806 VALUES LESS THAN (22456), +PARTITION p2807 VALUES LESS THAN (22464), +PARTITION p2808 VALUES LESS THAN (22472), +PARTITION p2809 VALUES LESS THAN (22480), +PARTITION p2810 VALUES LESS THAN (22488), +PARTITION p2811 VALUES LESS THAN (22496), +PARTITION p2812 VALUES LESS THAN (22504), +PARTITION p2813 VALUES LESS THAN (22512), +PARTITION p2814 VALUES LESS THAN (22520), +PARTITION p2815 VALUES LESS THAN (22528), +PARTITION p2816 VALUES LESS THAN (22536), +PARTITION p2817 VALUES LESS THAN (22544), +PARTITION p2818 VALUES LESS THAN (22552), +PARTITION p2819 VALUES LESS THAN (22560), +PARTITION p2820 VALUES LESS THAN (22568), +PARTITION p2821 VALUES LESS THAN (22576), +PARTITION p2822 VALUES LESS THAN (22584), +PARTITION p2823 VALUES LESS THAN (22592), +PARTITION p2824 VALUES LESS THAN (22600), +PARTITION p2825 VALUES LESS THAN (22608), +PARTITION p2826 VALUES LESS THAN (22616), +PARTITION p2827 VALUES LESS THAN (22624), +PARTITION p2828 VALUES LESS THAN (22632), +PARTITION p2829 VALUES LESS THAN (22640), +PARTITION p2830 VALUES LESS THAN (22648), +PARTITION p2831 VALUES LESS THAN (22656), +PARTITION p2832 VALUES LESS THAN (22664), +PARTITION p2833 VALUES LESS THAN (22672), +PARTITION p2834 VALUES LESS THAN (22680), +PARTITION p2835 VALUES LESS THAN (22688), +PARTITION p2836 VALUES LESS THAN (22696), +PARTITION p2837 VALUES LESS THAN (22704), +PARTITION p2838 VALUES LESS THAN (22712), +PARTITION p2839 VALUES LESS THAN (22720), +PARTITION p2840 VALUES LESS THAN (22728), +PARTITION p2841 VALUES LESS THAN (22736), +PARTITION p2842 VALUES LESS THAN (22744), +PARTITION p2843 VALUES LESS THAN (22752), +PARTITION p2844 VALUES LESS THAN (22760), +PARTITION p2845 VALUES LESS THAN (22768), +PARTITION p2846 VALUES LESS THAN (22776), +PARTITION p2847 VALUES LESS THAN (22784), +PARTITION p2848 VALUES LESS THAN (22792), +PARTITION p2849 VALUES LESS THAN (22800), +PARTITION p2850 VALUES LESS THAN (22808), +PARTITION p2851 VALUES LESS THAN (22816), +PARTITION p2852 VALUES LESS THAN (22824), +PARTITION p2853 VALUES LESS THAN (22832), +PARTITION p2854 VALUES LESS THAN (22840), +PARTITION p2855 VALUES LESS THAN (22848), +PARTITION p2856 VALUES LESS THAN (22856), +PARTITION p2857 VALUES LESS THAN (22864), +PARTITION p2858 VALUES LESS THAN (22872), +PARTITION p2859 VALUES LESS THAN (22880), +PARTITION p2860 VALUES LESS THAN (22888), +PARTITION p2861 VALUES LESS THAN (22896), +PARTITION p2862 VALUES LESS THAN (22904), +PARTITION p2863 VALUES LESS THAN (22912), +PARTITION p2864 VALUES LESS THAN (22920), +PARTITION p2865 VALUES LESS THAN (22928), +PARTITION p2866 VALUES LESS THAN (22936), +PARTITION p2867 VALUES LESS THAN (22944), +PARTITION p2868 VALUES LESS THAN (22952), +PARTITION p2869 VALUES LESS THAN (22960), +PARTITION p2870 VALUES LESS THAN (22968), +PARTITION p2871 VALUES LESS THAN (22976), +PARTITION p2872 VALUES LESS THAN (22984), +PARTITION p2873 VALUES LESS THAN (22992), +PARTITION p2874 VALUES LESS THAN (23000), +PARTITION p2875 VALUES LESS THAN (23008), +PARTITION p2876 VALUES LESS THAN (23016), +PARTITION p2877 VALUES LESS THAN (23024), +PARTITION p2878 VALUES LESS THAN (23032), +PARTITION p2879 VALUES LESS THAN (23040), +PARTITION p2880 VALUES LESS THAN (23048), +PARTITION p2881 VALUES LESS THAN (23056), +PARTITION p2882 VALUES LESS THAN (23064), +PARTITION p2883 VALUES LESS THAN (23072), +PARTITION p2884 VALUES LESS THAN (23080), +PARTITION p2885 VALUES LESS THAN (23088), +PARTITION p2886 VALUES LESS THAN (23096), +PARTITION p2887 VALUES LESS THAN (23104), +PARTITION p2888 VALUES LESS THAN (23112), +PARTITION p2889 VALUES LESS THAN (23120), +PARTITION p2890 VALUES LESS THAN (23128), +PARTITION p2891 VALUES LESS THAN (23136), +PARTITION p2892 VALUES LESS THAN (23144), +PARTITION p2893 VALUES LESS THAN (23152), +PARTITION p2894 VALUES LESS THAN (23160), +PARTITION p2895 VALUES LESS THAN (23168), +PARTITION p2896 VALUES LESS THAN (23176), +PARTITION p2897 VALUES LESS THAN (23184), +PARTITION p2898 VALUES LESS THAN (23192), +PARTITION p2899 VALUES LESS THAN (23200), +PARTITION p2900 VALUES LESS THAN (23208), +PARTITION p2901 VALUES LESS THAN (23216), +PARTITION p2902 VALUES LESS THAN (23224), +PARTITION p2903 VALUES LESS THAN (23232), +PARTITION p2904 VALUES LESS THAN (23240), +PARTITION p2905 VALUES LESS THAN (23248), +PARTITION p2906 VALUES LESS THAN (23256), +PARTITION p2907 VALUES LESS THAN (23264), +PARTITION p2908 VALUES LESS THAN (23272), +PARTITION p2909 VALUES LESS THAN (23280), +PARTITION p2910 VALUES LESS THAN (23288), +PARTITION p2911 VALUES LESS THAN (23296), +PARTITION p2912 VALUES LESS THAN (23304), +PARTITION p2913 VALUES LESS THAN (23312), +PARTITION p2914 VALUES LESS THAN (23320), +PARTITION p2915 VALUES LESS THAN (23328), +PARTITION p2916 VALUES LESS THAN (23336), +PARTITION p2917 VALUES LESS THAN (23344), +PARTITION p2918 VALUES LESS THAN (23352), +PARTITION p2919 VALUES LESS THAN (23360), +PARTITION p2920 VALUES LESS THAN (23368), +PARTITION p2921 VALUES LESS THAN (23376), +PARTITION p2922 VALUES LESS THAN (23384), +PARTITION p2923 VALUES LESS THAN (23392), +PARTITION p2924 VALUES LESS THAN (23400), +PARTITION p2925 VALUES LESS THAN (23408), +PARTITION p2926 VALUES LESS THAN (23416), +PARTITION p2927 VALUES LESS THAN (23424), +PARTITION p2928 VALUES LESS THAN (23432), +PARTITION p2929 VALUES LESS THAN (23440), +PARTITION p2930 VALUES LESS THAN (23448), +PARTITION p2931 VALUES LESS THAN (23456), +PARTITION p2932 VALUES LESS THAN (23464), +PARTITION p2933 VALUES LESS THAN (23472), +PARTITION p2934 VALUES LESS THAN (23480), +PARTITION p2935 VALUES LESS THAN (23488), +PARTITION p2936 VALUES LESS THAN (23496), +PARTITION p2937 VALUES LESS THAN (23504), +PARTITION p2938 VALUES LESS THAN (23512), +PARTITION p2939 VALUES LESS THAN (23520), +PARTITION p2940 VALUES LESS THAN (23528), +PARTITION p2941 VALUES LESS THAN (23536), +PARTITION p2942 VALUES LESS THAN (23544), +PARTITION p2943 VALUES LESS THAN (23552), +PARTITION p2944 VALUES LESS THAN (23560), +PARTITION p2945 VALUES LESS THAN (23568), +PARTITION p2946 VALUES LESS THAN (23576), +PARTITION p2947 VALUES LESS THAN (23584), +PARTITION p2948 VALUES LESS THAN (23592), +PARTITION p2949 VALUES LESS THAN (23600), +PARTITION p2950 VALUES LESS THAN (23608), +PARTITION p2951 VALUES LESS THAN (23616), +PARTITION p2952 VALUES LESS THAN (23624), +PARTITION p2953 VALUES LESS THAN (23632), +PARTITION p2954 VALUES LESS THAN (23640), +PARTITION p2955 VALUES LESS THAN (23648), +PARTITION p2956 VALUES LESS THAN (23656), +PARTITION p2957 VALUES LESS THAN (23664), +PARTITION p2958 VALUES LESS THAN (23672), +PARTITION p2959 VALUES LESS THAN (23680), +PARTITION p2960 VALUES LESS THAN (23688), +PARTITION p2961 VALUES LESS THAN (23696), +PARTITION p2962 VALUES LESS THAN (23704), +PARTITION p2963 VALUES LESS THAN (23712), +PARTITION p2964 VALUES LESS THAN (23720), +PARTITION p2965 VALUES LESS THAN (23728), +PARTITION p2966 VALUES LESS THAN (23736), +PARTITION p2967 VALUES LESS THAN (23744), +PARTITION p2968 VALUES LESS THAN (23752), +PARTITION p2969 VALUES LESS THAN (23760), +PARTITION p2970 VALUES LESS THAN (23768), +PARTITION p2971 VALUES LESS THAN (23776), +PARTITION p2972 VALUES LESS THAN (23784), +PARTITION p2973 VALUES LESS THAN (23792), +PARTITION p2974 VALUES LESS THAN (23800), +PARTITION p2975 VALUES LESS THAN (23808), +PARTITION p2976 VALUES LESS THAN (23816), +PARTITION p2977 VALUES LESS THAN (23824), +PARTITION p2978 VALUES LESS THAN (23832), +PARTITION p2979 VALUES LESS THAN (23840), +PARTITION p2980 VALUES LESS THAN (23848), +PARTITION p2981 VALUES LESS THAN (23856), +PARTITION p2982 VALUES LESS THAN (23864), +PARTITION p2983 VALUES LESS THAN (23872), +PARTITION p2984 VALUES LESS THAN (23880), +PARTITION p2985 VALUES LESS THAN (23888), +PARTITION p2986 VALUES LESS THAN (23896), +PARTITION p2987 VALUES LESS THAN (23904), +PARTITION p2988 VALUES LESS THAN (23912), +PARTITION p2989 VALUES LESS THAN (23920), +PARTITION p2990 VALUES LESS THAN (23928), +PARTITION p2991 VALUES LESS THAN (23936), +PARTITION p2992 VALUES LESS THAN (23944), +PARTITION p2993 VALUES LESS THAN (23952), +PARTITION p2994 VALUES LESS THAN (23960), +PARTITION p2995 VALUES LESS THAN (23968), +PARTITION p2996 VALUES LESS THAN (23976), +PARTITION p2997 VALUES LESS THAN (23984), +PARTITION p2998 VALUES LESS THAN (23992), +PARTITION p2999 VALUES LESS THAN (24000), +PARTITION p3000 VALUES LESS THAN (24008), +PARTITION p3001 VALUES LESS THAN (24016), +PARTITION p3002 VALUES LESS THAN (24024), +PARTITION p3003 VALUES LESS THAN (24032), +PARTITION p3004 VALUES LESS THAN (24040), +PARTITION p3005 VALUES LESS THAN (24048), +PARTITION p3006 VALUES LESS THAN (24056), +PARTITION p3007 VALUES LESS THAN (24064), +PARTITION p3008 VALUES LESS THAN (24072), +PARTITION p3009 VALUES LESS THAN (24080), +PARTITION p3010 VALUES LESS THAN (24088), +PARTITION p3011 VALUES LESS THAN (24096), +PARTITION p3012 VALUES LESS THAN (24104), +PARTITION p3013 VALUES LESS THAN (24112), +PARTITION p3014 VALUES LESS THAN (24120), +PARTITION p3015 VALUES LESS THAN (24128), +PARTITION p3016 VALUES LESS THAN (24136), +PARTITION p3017 VALUES LESS THAN (24144), +PARTITION p3018 VALUES LESS THAN (24152), +PARTITION p3019 VALUES LESS THAN (24160), +PARTITION p3020 VALUES LESS THAN (24168), +PARTITION p3021 VALUES LESS THAN (24176), +PARTITION p3022 VALUES LESS THAN (24184), +PARTITION p3023 VALUES LESS THAN (24192), +PARTITION p3024 VALUES LESS THAN (24200), +PARTITION p3025 VALUES LESS THAN (24208), +PARTITION p3026 VALUES LESS THAN (24216), +PARTITION p3027 VALUES LESS THAN (24224), +PARTITION p3028 VALUES LESS THAN (24232), +PARTITION p3029 VALUES LESS THAN (24240), +PARTITION p3030 VALUES LESS THAN (24248), +PARTITION p3031 VALUES LESS THAN (24256), +PARTITION p3032 VALUES LESS THAN (24264), +PARTITION p3033 VALUES LESS THAN (24272), +PARTITION p3034 VALUES LESS THAN (24280), +PARTITION p3035 VALUES LESS THAN (24288), +PARTITION p3036 VALUES LESS THAN (24296), +PARTITION p3037 VALUES LESS THAN (24304), +PARTITION p3038 VALUES LESS THAN (24312), +PARTITION p3039 VALUES LESS THAN (24320), +PARTITION p3040 VALUES LESS THAN (24328), +PARTITION p3041 VALUES LESS THAN (24336), +PARTITION p3042 VALUES LESS THAN (24344), +PARTITION p3043 VALUES LESS THAN (24352), +PARTITION p3044 VALUES LESS THAN (24360), +PARTITION p3045 VALUES LESS THAN (24368), +PARTITION p3046 VALUES LESS THAN (24376), +PARTITION p3047 VALUES LESS THAN (24384), +PARTITION p3048 VALUES LESS THAN (24392), +PARTITION p3049 VALUES LESS THAN (24400), +PARTITION p3050 VALUES LESS THAN (24408), +PARTITION p3051 VALUES LESS THAN (24416), +PARTITION p3052 VALUES LESS THAN (24424), +PARTITION p3053 VALUES LESS THAN (24432), +PARTITION p3054 VALUES LESS THAN (24440), +PARTITION p3055 VALUES LESS THAN (24448), +PARTITION p3056 VALUES LESS THAN (24456), +PARTITION p3057 VALUES LESS THAN (24464), +PARTITION p3058 VALUES LESS THAN (24472), +PARTITION p3059 VALUES LESS THAN (24480), +PARTITION p3060 VALUES LESS THAN (24488), +PARTITION p3061 VALUES LESS THAN (24496), +PARTITION p3062 VALUES LESS THAN (24504), +PARTITION p3063 VALUES LESS THAN (24512), +PARTITION p3064 VALUES LESS THAN (24520), +PARTITION p3065 VALUES LESS THAN (24528), +PARTITION p3066 VALUES LESS THAN (24536), +PARTITION p3067 VALUES LESS THAN (24544), +PARTITION p3068 VALUES LESS THAN (24552), +PARTITION p3069 VALUES LESS THAN (24560), +PARTITION p3070 VALUES LESS THAN (24568), +PARTITION p3071 VALUES LESS THAN (24576), +PARTITION p3072 VALUES LESS THAN (24584), +PARTITION p3073 VALUES LESS THAN (24592), +PARTITION p3074 VALUES LESS THAN (24600), +PARTITION p3075 VALUES LESS THAN (24608), +PARTITION p3076 VALUES LESS THAN (24616), +PARTITION p3077 VALUES LESS THAN (24624), +PARTITION p3078 VALUES LESS THAN (24632), +PARTITION p3079 VALUES LESS THAN (24640), +PARTITION p3080 VALUES LESS THAN (24648), +PARTITION p3081 VALUES LESS THAN (24656), +PARTITION p3082 VALUES LESS THAN (24664), +PARTITION p3083 VALUES LESS THAN (24672), +PARTITION p3084 VALUES LESS THAN (24680), +PARTITION p3085 VALUES LESS THAN (24688), +PARTITION p3086 VALUES LESS THAN (24696), +PARTITION p3087 VALUES LESS THAN (24704), +PARTITION p3088 VALUES LESS THAN (24712), +PARTITION p3089 VALUES LESS THAN (24720), +PARTITION p3090 VALUES LESS THAN (24728), +PARTITION p3091 VALUES LESS THAN (24736), +PARTITION p3092 VALUES LESS THAN (24744), +PARTITION p3093 VALUES LESS THAN (24752), +PARTITION p3094 VALUES LESS THAN (24760), +PARTITION p3095 VALUES LESS THAN (24768), +PARTITION p3096 VALUES LESS THAN (24776), +PARTITION p3097 VALUES LESS THAN (24784), +PARTITION p3098 VALUES LESS THAN (24792), +PARTITION p3099 VALUES LESS THAN (24800), +PARTITION p3100 VALUES LESS THAN (24808), +PARTITION p3101 VALUES LESS THAN (24816), +PARTITION p3102 VALUES LESS THAN (24824), +PARTITION p3103 VALUES LESS THAN (24832), +PARTITION p3104 VALUES LESS THAN (24840), +PARTITION p3105 VALUES LESS THAN (24848), +PARTITION p3106 VALUES LESS THAN (24856), +PARTITION p3107 VALUES LESS THAN (24864), +PARTITION p3108 VALUES LESS THAN (24872), +PARTITION p3109 VALUES LESS THAN (24880), +PARTITION p3110 VALUES LESS THAN (24888), +PARTITION p3111 VALUES LESS THAN (24896), +PARTITION p3112 VALUES LESS THAN (24904), +PARTITION p3113 VALUES LESS THAN (24912), +PARTITION p3114 VALUES LESS THAN (24920), +PARTITION p3115 VALUES LESS THAN (24928), +PARTITION p3116 VALUES LESS THAN (24936), +PARTITION p3117 VALUES LESS THAN (24944), +PARTITION p3118 VALUES LESS THAN (24952), +PARTITION p3119 VALUES LESS THAN (24960), +PARTITION p3120 VALUES LESS THAN (24968), +PARTITION p3121 VALUES LESS THAN (24976), +PARTITION p3122 VALUES LESS THAN (24984), +PARTITION p3123 VALUES LESS THAN (24992), +PARTITION p3124 VALUES LESS THAN (25000), +PARTITION p3125 VALUES LESS THAN (25008), +PARTITION p3126 VALUES LESS THAN (25016), +PARTITION p3127 VALUES LESS THAN (25024), +PARTITION p3128 VALUES LESS THAN (25032), +PARTITION p3129 VALUES LESS THAN (25040), +PARTITION p3130 VALUES LESS THAN (25048), +PARTITION p3131 VALUES LESS THAN (25056), +PARTITION p3132 VALUES LESS THAN (25064), +PARTITION p3133 VALUES LESS THAN (25072), +PARTITION p3134 VALUES LESS THAN (25080), +PARTITION p3135 VALUES LESS THAN (25088), +PARTITION p3136 VALUES LESS THAN (25096), +PARTITION p3137 VALUES LESS THAN (25104), +PARTITION p3138 VALUES LESS THAN (25112), +PARTITION p3139 VALUES LESS THAN (25120), +PARTITION p3140 VALUES LESS THAN (25128), +PARTITION p3141 VALUES LESS THAN (25136), +PARTITION p3142 VALUES LESS THAN (25144), +PARTITION p3143 VALUES LESS THAN (25152), +PARTITION p3144 VALUES LESS THAN (25160), +PARTITION p3145 VALUES LESS THAN (25168), +PARTITION p3146 VALUES LESS THAN (25176), +PARTITION p3147 VALUES LESS THAN (25184), +PARTITION p3148 VALUES LESS THAN (25192), +PARTITION p3149 VALUES LESS THAN (25200), +PARTITION p3150 VALUES LESS THAN (25208), +PARTITION p3151 VALUES LESS THAN (25216), +PARTITION p3152 VALUES LESS THAN (25224), +PARTITION p3153 VALUES LESS THAN (25232), +PARTITION p3154 VALUES LESS THAN (25240), +PARTITION p3155 VALUES LESS THAN (25248), +PARTITION p3156 VALUES LESS THAN (25256), +PARTITION p3157 VALUES LESS THAN (25264), +PARTITION p3158 VALUES LESS THAN (25272), +PARTITION p3159 VALUES LESS THAN (25280), +PARTITION p3160 VALUES LESS THAN (25288), +PARTITION p3161 VALUES LESS THAN (25296), +PARTITION p3162 VALUES LESS THAN (25304), +PARTITION p3163 VALUES LESS THAN (25312), +PARTITION p3164 VALUES LESS THAN (25320), +PARTITION p3165 VALUES LESS THAN (25328), +PARTITION p3166 VALUES LESS THAN (25336), +PARTITION p3167 VALUES LESS THAN (25344), +PARTITION p3168 VALUES LESS THAN (25352), +PARTITION p3169 VALUES LESS THAN (25360), +PARTITION p3170 VALUES LESS THAN (25368), +PARTITION p3171 VALUES LESS THAN (25376), +PARTITION p3172 VALUES LESS THAN (25384), +PARTITION p3173 VALUES LESS THAN (25392), +PARTITION p3174 VALUES LESS THAN (25400), +PARTITION p3175 VALUES LESS THAN (25408), +PARTITION p3176 VALUES LESS THAN (25416), +PARTITION p3177 VALUES LESS THAN (25424), +PARTITION p3178 VALUES LESS THAN (25432), +PARTITION p3179 VALUES LESS THAN (25440), +PARTITION p3180 VALUES LESS THAN (25448), +PARTITION p3181 VALUES LESS THAN (25456), +PARTITION p3182 VALUES LESS THAN (25464), +PARTITION p3183 VALUES LESS THAN (25472), +PARTITION p3184 VALUES LESS THAN (25480), +PARTITION p3185 VALUES LESS THAN (25488), +PARTITION p3186 VALUES LESS THAN (25496), +PARTITION p3187 VALUES LESS THAN (25504), +PARTITION p3188 VALUES LESS THAN (25512), +PARTITION p3189 VALUES LESS THAN (25520), +PARTITION p3190 VALUES LESS THAN (25528), +PARTITION p3191 VALUES LESS THAN (25536), +PARTITION p3192 VALUES LESS THAN (25544), +PARTITION p3193 VALUES LESS THAN (25552), +PARTITION p3194 VALUES LESS THAN (25560), +PARTITION p3195 VALUES LESS THAN (25568), +PARTITION p3196 VALUES LESS THAN (25576), +PARTITION p3197 VALUES LESS THAN (25584), +PARTITION p3198 VALUES LESS THAN (25592), +PARTITION p3199 VALUES LESS THAN (25600), +PARTITION p3200 VALUES LESS THAN (25608), +PARTITION p3201 VALUES LESS THAN (25616), +PARTITION p3202 VALUES LESS THAN (25624), +PARTITION p3203 VALUES LESS THAN (25632), +PARTITION p3204 VALUES LESS THAN (25640), +PARTITION p3205 VALUES LESS THAN (25648), +PARTITION p3206 VALUES LESS THAN (25656), +PARTITION p3207 VALUES LESS THAN (25664), +PARTITION p3208 VALUES LESS THAN (25672), +PARTITION p3209 VALUES LESS THAN (25680), +PARTITION p3210 VALUES LESS THAN (25688), +PARTITION p3211 VALUES LESS THAN (25696), +PARTITION p3212 VALUES LESS THAN (25704), +PARTITION p3213 VALUES LESS THAN (25712), +PARTITION p3214 VALUES LESS THAN (25720), +PARTITION p3215 VALUES LESS THAN (25728), +PARTITION p3216 VALUES LESS THAN (25736), +PARTITION p3217 VALUES LESS THAN (25744), +PARTITION p3218 VALUES LESS THAN (25752), +PARTITION p3219 VALUES LESS THAN (25760), +PARTITION p3220 VALUES LESS THAN (25768), +PARTITION p3221 VALUES LESS THAN (25776), +PARTITION p3222 VALUES LESS THAN (25784), +PARTITION p3223 VALUES LESS THAN (25792), +PARTITION p3224 VALUES LESS THAN (25800), +PARTITION p3225 VALUES LESS THAN (25808), +PARTITION p3226 VALUES LESS THAN (25816), +PARTITION p3227 VALUES LESS THAN (25824), +PARTITION p3228 VALUES LESS THAN (25832), +PARTITION p3229 VALUES LESS THAN (25840), +PARTITION p3230 VALUES LESS THAN (25848), +PARTITION p3231 VALUES LESS THAN (25856), +PARTITION p3232 VALUES LESS THAN (25864), +PARTITION p3233 VALUES LESS THAN (25872), +PARTITION p3234 VALUES LESS THAN (25880), +PARTITION p3235 VALUES LESS THAN (25888), +PARTITION p3236 VALUES LESS THAN (25896), +PARTITION p3237 VALUES LESS THAN (25904), +PARTITION p3238 VALUES LESS THAN (25912), +PARTITION p3239 VALUES LESS THAN (25920), +PARTITION p3240 VALUES LESS THAN (25928), +PARTITION p3241 VALUES LESS THAN (25936), +PARTITION p3242 VALUES LESS THAN (25944), +PARTITION p3243 VALUES LESS THAN (25952), +PARTITION p3244 VALUES LESS THAN (25960), +PARTITION p3245 VALUES LESS THAN (25968), +PARTITION p3246 VALUES LESS THAN (25976), +PARTITION p3247 VALUES LESS THAN (25984), +PARTITION p3248 VALUES LESS THAN (25992), +PARTITION p3249 VALUES LESS THAN (26000), +PARTITION p3250 VALUES LESS THAN (26008), +PARTITION p3251 VALUES LESS THAN (26016), +PARTITION p3252 VALUES LESS THAN (26024), +PARTITION p3253 VALUES LESS THAN (26032), +PARTITION p3254 VALUES LESS THAN (26040), +PARTITION p3255 VALUES LESS THAN (26048), +PARTITION p3256 VALUES LESS THAN (26056), +PARTITION p3257 VALUES LESS THAN (26064), +PARTITION p3258 VALUES LESS THAN (26072), +PARTITION p3259 VALUES LESS THAN (26080), +PARTITION p3260 VALUES LESS THAN (26088), +PARTITION p3261 VALUES LESS THAN (26096), +PARTITION p3262 VALUES LESS THAN (26104), +PARTITION p3263 VALUES LESS THAN (26112), +PARTITION p3264 VALUES LESS THAN (26120), +PARTITION p3265 VALUES LESS THAN (26128), +PARTITION p3266 VALUES LESS THAN (26136), +PARTITION p3267 VALUES LESS THAN (26144), +PARTITION p3268 VALUES LESS THAN (26152), +PARTITION p3269 VALUES LESS THAN (26160), +PARTITION p3270 VALUES LESS THAN (26168), +PARTITION p3271 VALUES LESS THAN (26176), +PARTITION p3272 VALUES LESS THAN (26184), +PARTITION p3273 VALUES LESS THAN (26192), +PARTITION p3274 VALUES LESS THAN (26200), +PARTITION p3275 VALUES LESS THAN (26208), +PARTITION p3276 VALUES LESS THAN (26216), +PARTITION p3277 VALUES LESS THAN (26224), +PARTITION p3278 VALUES LESS THAN (26232), +PARTITION p3279 VALUES LESS THAN (26240), +PARTITION p3280 VALUES LESS THAN (26248), +PARTITION p3281 VALUES LESS THAN (26256), +PARTITION p3282 VALUES LESS THAN (26264), +PARTITION p3283 VALUES LESS THAN (26272), +PARTITION p3284 VALUES LESS THAN (26280), +PARTITION p3285 VALUES LESS THAN (26288), +PARTITION p3286 VALUES LESS THAN (26296), +PARTITION p3287 VALUES LESS THAN (26304), +PARTITION p3288 VALUES LESS THAN (26312), +PARTITION p3289 VALUES LESS THAN (26320), +PARTITION p3290 VALUES LESS THAN (26328), +PARTITION p3291 VALUES LESS THAN (26336), +PARTITION p3292 VALUES LESS THAN (26344), +PARTITION p3293 VALUES LESS THAN (26352), +PARTITION p3294 VALUES LESS THAN (26360), +PARTITION p3295 VALUES LESS THAN (26368), +PARTITION p3296 VALUES LESS THAN (26376), +PARTITION p3297 VALUES LESS THAN (26384), +PARTITION p3298 VALUES LESS THAN (26392), +PARTITION p3299 VALUES LESS THAN (26400), +PARTITION p3300 VALUES LESS THAN (26408), +PARTITION p3301 VALUES LESS THAN (26416), +PARTITION p3302 VALUES LESS THAN (26424), +PARTITION p3303 VALUES LESS THAN (26432), +PARTITION p3304 VALUES LESS THAN (26440), +PARTITION p3305 VALUES LESS THAN (26448), +PARTITION p3306 VALUES LESS THAN (26456), +PARTITION p3307 VALUES LESS THAN (26464), +PARTITION p3308 VALUES LESS THAN (26472), +PARTITION p3309 VALUES LESS THAN (26480), +PARTITION p3310 VALUES LESS THAN (26488), +PARTITION p3311 VALUES LESS THAN (26496), +PARTITION p3312 VALUES LESS THAN (26504), +PARTITION p3313 VALUES LESS THAN (26512), +PARTITION p3314 VALUES LESS THAN (26520), +PARTITION p3315 VALUES LESS THAN (26528), +PARTITION p3316 VALUES LESS THAN (26536), +PARTITION p3317 VALUES LESS THAN (26544), +PARTITION p3318 VALUES LESS THAN (26552), +PARTITION p3319 VALUES LESS THAN (26560), +PARTITION p3320 VALUES LESS THAN (26568), +PARTITION p3321 VALUES LESS THAN (26576), +PARTITION p3322 VALUES LESS THAN (26584), +PARTITION p3323 VALUES LESS THAN (26592), +PARTITION p3324 VALUES LESS THAN (26600), +PARTITION p3325 VALUES LESS THAN (26608), +PARTITION p3326 VALUES LESS THAN (26616), +PARTITION p3327 VALUES LESS THAN (26624), +PARTITION p3328 VALUES LESS THAN (26632), +PARTITION p3329 VALUES LESS THAN (26640), +PARTITION p3330 VALUES LESS THAN (26648), +PARTITION p3331 VALUES LESS THAN (26656), +PARTITION p3332 VALUES LESS THAN (26664), +PARTITION p3333 VALUES LESS THAN (26672), +PARTITION p3334 VALUES LESS THAN (26680), +PARTITION p3335 VALUES LESS THAN (26688), +PARTITION p3336 VALUES LESS THAN (26696), +PARTITION p3337 VALUES LESS THAN (26704), +PARTITION p3338 VALUES LESS THAN (26712), +PARTITION p3339 VALUES LESS THAN (26720), +PARTITION p3340 VALUES LESS THAN (26728), +PARTITION p3341 VALUES LESS THAN (26736), +PARTITION p3342 VALUES LESS THAN (26744), +PARTITION p3343 VALUES LESS THAN (26752), +PARTITION p3344 VALUES LESS THAN (26760), +PARTITION p3345 VALUES LESS THAN (26768), +PARTITION p3346 VALUES LESS THAN (26776), +PARTITION p3347 VALUES LESS THAN (26784), +PARTITION p3348 VALUES LESS THAN (26792), +PARTITION p3349 VALUES LESS THAN (26800), +PARTITION p3350 VALUES LESS THAN (26808), +PARTITION p3351 VALUES LESS THAN (26816), +PARTITION p3352 VALUES LESS THAN (26824), +PARTITION p3353 VALUES LESS THAN (26832), +PARTITION p3354 VALUES LESS THAN (26840), +PARTITION p3355 VALUES LESS THAN (26848), +PARTITION p3356 VALUES LESS THAN (26856), +PARTITION p3357 VALUES LESS THAN (26864), +PARTITION p3358 VALUES LESS THAN (26872), +PARTITION p3359 VALUES LESS THAN (26880), +PARTITION p3360 VALUES LESS THAN (26888), +PARTITION p3361 VALUES LESS THAN (26896), +PARTITION p3362 VALUES LESS THAN (26904), +PARTITION p3363 VALUES LESS THAN (26912), +PARTITION p3364 VALUES LESS THAN (26920), +PARTITION p3365 VALUES LESS THAN (26928), +PARTITION p3366 VALUES LESS THAN (26936), +PARTITION p3367 VALUES LESS THAN (26944), +PARTITION p3368 VALUES LESS THAN (26952), +PARTITION p3369 VALUES LESS THAN (26960), +PARTITION p3370 VALUES LESS THAN (26968), +PARTITION p3371 VALUES LESS THAN (26976), +PARTITION p3372 VALUES LESS THAN (26984), +PARTITION p3373 VALUES LESS THAN (26992), +PARTITION p3374 VALUES LESS THAN (27000), +PARTITION p3375 VALUES LESS THAN (27008), +PARTITION p3376 VALUES LESS THAN (27016), +PARTITION p3377 VALUES LESS THAN (27024), +PARTITION p3378 VALUES LESS THAN (27032), +PARTITION p3379 VALUES LESS THAN (27040), +PARTITION p3380 VALUES LESS THAN (27048), +PARTITION p3381 VALUES LESS THAN (27056), +PARTITION p3382 VALUES LESS THAN (27064), +PARTITION p3383 VALUES LESS THAN (27072), +PARTITION p3384 VALUES LESS THAN (27080), +PARTITION p3385 VALUES LESS THAN (27088), +PARTITION p3386 VALUES LESS THAN (27096), +PARTITION p3387 VALUES LESS THAN (27104), +PARTITION p3388 VALUES LESS THAN (27112), +PARTITION p3389 VALUES LESS THAN (27120), +PARTITION p3390 VALUES LESS THAN (27128), +PARTITION p3391 VALUES LESS THAN (27136), +PARTITION p3392 VALUES LESS THAN (27144), +PARTITION p3393 VALUES LESS THAN (27152), +PARTITION p3394 VALUES LESS THAN (27160), +PARTITION p3395 VALUES LESS THAN (27168), +PARTITION p3396 VALUES LESS THAN (27176), +PARTITION p3397 VALUES LESS THAN (27184), +PARTITION p3398 VALUES LESS THAN (27192), +PARTITION p3399 VALUES LESS THAN (27200), +PARTITION p3400 VALUES LESS THAN (27208), +PARTITION p3401 VALUES LESS THAN (27216), +PARTITION p3402 VALUES LESS THAN (27224), +PARTITION p3403 VALUES LESS THAN (27232), +PARTITION p3404 VALUES LESS THAN (27240), +PARTITION p3405 VALUES LESS THAN (27248), +PARTITION p3406 VALUES LESS THAN (27256), +PARTITION p3407 VALUES LESS THAN (27264), +PARTITION p3408 VALUES LESS THAN (27272), +PARTITION p3409 VALUES LESS THAN (27280), +PARTITION p3410 VALUES LESS THAN (27288), +PARTITION p3411 VALUES LESS THAN (27296), +PARTITION p3412 VALUES LESS THAN (27304), +PARTITION p3413 VALUES LESS THAN (27312), +PARTITION p3414 VALUES LESS THAN (27320), +PARTITION p3415 VALUES LESS THAN (27328), +PARTITION p3416 VALUES LESS THAN (27336), +PARTITION p3417 VALUES LESS THAN (27344), +PARTITION p3418 VALUES LESS THAN (27352), +PARTITION p3419 VALUES LESS THAN (27360), +PARTITION p3420 VALUES LESS THAN (27368), +PARTITION p3421 VALUES LESS THAN (27376), +PARTITION p3422 VALUES LESS THAN (27384), +PARTITION p3423 VALUES LESS THAN (27392), +PARTITION p3424 VALUES LESS THAN (27400), +PARTITION p3425 VALUES LESS THAN (27408), +PARTITION p3426 VALUES LESS THAN (27416), +PARTITION p3427 VALUES LESS THAN (27424), +PARTITION p3428 VALUES LESS THAN (27432), +PARTITION p3429 VALUES LESS THAN (27440), +PARTITION p3430 VALUES LESS THAN (27448), +PARTITION p3431 VALUES LESS THAN (27456), +PARTITION p3432 VALUES LESS THAN (27464), +PARTITION p3433 VALUES LESS THAN (27472), +PARTITION p3434 VALUES LESS THAN (27480), +PARTITION p3435 VALUES LESS THAN (27488), +PARTITION p3436 VALUES LESS THAN (27496), +PARTITION p3437 VALUES LESS THAN (27504), +PARTITION p3438 VALUES LESS THAN (27512), +PARTITION p3439 VALUES LESS THAN (27520), +PARTITION p3440 VALUES LESS THAN (27528), +PARTITION p3441 VALUES LESS THAN (27536), +PARTITION p3442 VALUES LESS THAN (27544), +PARTITION p3443 VALUES LESS THAN (27552), +PARTITION p3444 VALUES LESS THAN (27560), +PARTITION p3445 VALUES LESS THAN (27568), +PARTITION p3446 VALUES LESS THAN (27576), +PARTITION p3447 VALUES LESS THAN (27584), +PARTITION p3448 VALUES LESS THAN (27592), +PARTITION p3449 VALUES LESS THAN (27600), +PARTITION p3450 VALUES LESS THAN (27608), +PARTITION p3451 VALUES LESS THAN (27616), +PARTITION p3452 VALUES LESS THAN (27624), +PARTITION p3453 VALUES LESS THAN (27632), +PARTITION p3454 VALUES LESS THAN (27640), +PARTITION p3455 VALUES LESS THAN (27648), +PARTITION p3456 VALUES LESS THAN (27656), +PARTITION p3457 VALUES LESS THAN (27664), +PARTITION p3458 VALUES LESS THAN (27672), +PARTITION p3459 VALUES LESS THAN (27680), +PARTITION p3460 VALUES LESS THAN (27688), +PARTITION p3461 VALUES LESS THAN (27696), +PARTITION p3462 VALUES LESS THAN (27704), +PARTITION p3463 VALUES LESS THAN (27712), +PARTITION p3464 VALUES LESS THAN (27720), +PARTITION p3465 VALUES LESS THAN (27728), +PARTITION p3466 VALUES LESS THAN (27736), +PARTITION p3467 VALUES LESS THAN (27744), +PARTITION p3468 VALUES LESS THAN (27752), +PARTITION p3469 VALUES LESS THAN (27760), +PARTITION p3470 VALUES LESS THAN (27768), +PARTITION p3471 VALUES LESS THAN (27776), +PARTITION p3472 VALUES LESS THAN (27784), +PARTITION p3473 VALUES LESS THAN (27792), +PARTITION p3474 VALUES LESS THAN (27800), +PARTITION p3475 VALUES LESS THAN (27808), +PARTITION p3476 VALUES LESS THAN (27816), +PARTITION p3477 VALUES LESS THAN (27824), +PARTITION p3478 VALUES LESS THAN (27832), +PARTITION p3479 VALUES LESS THAN (27840), +PARTITION p3480 VALUES LESS THAN (27848), +PARTITION p3481 VALUES LESS THAN (27856), +PARTITION p3482 VALUES LESS THAN (27864), +PARTITION p3483 VALUES LESS THAN (27872), +PARTITION p3484 VALUES LESS THAN (27880), +PARTITION p3485 VALUES LESS THAN (27888), +PARTITION p3486 VALUES LESS THAN (27896), +PARTITION p3487 VALUES LESS THAN (27904), +PARTITION p3488 VALUES LESS THAN (27912), +PARTITION p3489 VALUES LESS THAN (27920), +PARTITION p3490 VALUES LESS THAN (27928), +PARTITION p3491 VALUES LESS THAN (27936), +PARTITION p3492 VALUES LESS THAN (27944), +PARTITION p3493 VALUES LESS THAN (27952), +PARTITION p3494 VALUES LESS THAN (27960), +PARTITION p3495 VALUES LESS THAN (27968), +PARTITION p3496 VALUES LESS THAN (27976), +PARTITION p3497 VALUES LESS THAN (27984), +PARTITION p3498 VALUES LESS THAN (27992), +PARTITION p3499 VALUES LESS THAN (28000), +PARTITION p3500 VALUES LESS THAN (28008), +PARTITION p3501 VALUES LESS THAN (28016), +PARTITION p3502 VALUES LESS THAN (28024), +PARTITION p3503 VALUES LESS THAN (28032), +PARTITION p3504 VALUES LESS THAN (28040), +PARTITION p3505 VALUES LESS THAN (28048), +PARTITION p3506 VALUES LESS THAN (28056), +PARTITION p3507 VALUES LESS THAN (28064), +PARTITION p3508 VALUES LESS THAN (28072), +PARTITION p3509 VALUES LESS THAN (28080), +PARTITION p3510 VALUES LESS THAN (28088), +PARTITION p3511 VALUES LESS THAN (28096), +PARTITION p3512 VALUES LESS THAN (28104), +PARTITION p3513 VALUES LESS THAN (28112), +PARTITION p3514 VALUES LESS THAN (28120), +PARTITION p3515 VALUES LESS THAN (28128), +PARTITION p3516 VALUES LESS THAN (28136), +PARTITION p3517 VALUES LESS THAN (28144), +PARTITION p3518 VALUES LESS THAN (28152), +PARTITION p3519 VALUES LESS THAN (28160), +PARTITION p3520 VALUES LESS THAN (28168), +PARTITION p3521 VALUES LESS THAN (28176), +PARTITION p3522 VALUES LESS THAN (28184), +PARTITION p3523 VALUES LESS THAN (28192), +PARTITION p3524 VALUES LESS THAN (28200), +PARTITION p3525 VALUES LESS THAN (28208), +PARTITION p3526 VALUES LESS THAN (28216), +PARTITION p3527 VALUES LESS THAN (28224), +PARTITION p3528 VALUES LESS THAN (28232), +PARTITION p3529 VALUES LESS THAN (28240), +PARTITION p3530 VALUES LESS THAN (28248), +PARTITION p3531 VALUES LESS THAN (28256), +PARTITION p3532 VALUES LESS THAN (28264), +PARTITION p3533 VALUES LESS THAN (28272), +PARTITION p3534 VALUES LESS THAN (28280), +PARTITION p3535 VALUES LESS THAN (28288), +PARTITION p3536 VALUES LESS THAN (28296), +PARTITION p3537 VALUES LESS THAN (28304), +PARTITION p3538 VALUES LESS THAN (28312), +PARTITION p3539 VALUES LESS THAN (28320), +PARTITION p3540 VALUES LESS THAN (28328), +PARTITION p3541 VALUES LESS THAN (28336), +PARTITION p3542 VALUES LESS THAN (28344), +PARTITION p3543 VALUES LESS THAN (28352), +PARTITION p3544 VALUES LESS THAN (28360), +PARTITION p3545 VALUES LESS THAN (28368), +PARTITION p3546 VALUES LESS THAN (28376), +PARTITION p3547 VALUES LESS THAN (28384), +PARTITION p3548 VALUES LESS THAN (28392), +PARTITION p3549 VALUES LESS THAN (28400), +PARTITION p3550 VALUES LESS THAN (28408), +PARTITION p3551 VALUES LESS THAN (28416), +PARTITION p3552 VALUES LESS THAN (28424), +PARTITION p3553 VALUES LESS THAN (28432), +PARTITION p3554 VALUES LESS THAN (28440), +PARTITION p3555 VALUES LESS THAN (28448), +PARTITION p3556 VALUES LESS THAN (28456), +PARTITION p3557 VALUES LESS THAN (28464), +PARTITION p3558 VALUES LESS THAN (28472), +PARTITION p3559 VALUES LESS THAN (28480), +PARTITION p3560 VALUES LESS THAN (28488), +PARTITION p3561 VALUES LESS THAN (28496), +PARTITION p3562 VALUES LESS THAN (28504), +PARTITION p3563 VALUES LESS THAN (28512), +PARTITION p3564 VALUES LESS THAN (28520), +PARTITION p3565 VALUES LESS THAN (28528), +PARTITION p3566 VALUES LESS THAN (28536), +PARTITION p3567 VALUES LESS THAN (28544), +PARTITION p3568 VALUES LESS THAN (28552), +PARTITION p3569 VALUES LESS THAN (28560), +PARTITION p3570 VALUES LESS THAN (28568), +PARTITION p3571 VALUES LESS THAN (28576), +PARTITION p3572 VALUES LESS THAN (28584), +PARTITION p3573 VALUES LESS THAN (28592), +PARTITION p3574 VALUES LESS THAN (28600), +PARTITION p3575 VALUES LESS THAN (28608), +PARTITION p3576 VALUES LESS THAN (28616), +PARTITION p3577 VALUES LESS THAN (28624), +PARTITION p3578 VALUES LESS THAN (28632), +PARTITION p3579 VALUES LESS THAN (28640), +PARTITION p3580 VALUES LESS THAN (28648), +PARTITION p3581 VALUES LESS THAN (28656), +PARTITION p3582 VALUES LESS THAN (28664), +PARTITION p3583 VALUES LESS THAN (28672), +PARTITION p3584 VALUES LESS THAN (28680), +PARTITION p3585 VALUES LESS THAN (28688), +PARTITION p3586 VALUES LESS THAN (28696), +PARTITION p3587 VALUES LESS THAN (28704), +PARTITION p3588 VALUES LESS THAN (28712), +PARTITION p3589 VALUES LESS THAN (28720), +PARTITION p3590 VALUES LESS THAN (28728), +PARTITION p3591 VALUES LESS THAN (28736), +PARTITION p3592 VALUES LESS THAN (28744), +PARTITION p3593 VALUES LESS THAN (28752), +PARTITION p3594 VALUES LESS THAN (28760), +PARTITION p3595 VALUES LESS THAN (28768), +PARTITION p3596 VALUES LESS THAN (28776), +PARTITION p3597 VALUES LESS THAN (28784), +PARTITION p3598 VALUES LESS THAN (28792), +PARTITION p3599 VALUES LESS THAN (28800), +PARTITION p3600 VALUES LESS THAN (28808), +PARTITION p3601 VALUES LESS THAN (28816), +PARTITION p3602 VALUES LESS THAN (28824), +PARTITION p3603 VALUES LESS THAN (28832), +PARTITION p3604 VALUES LESS THAN (28840), +PARTITION p3605 VALUES LESS THAN (28848), +PARTITION p3606 VALUES LESS THAN (28856), +PARTITION p3607 VALUES LESS THAN (28864), +PARTITION p3608 VALUES LESS THAN (28872), +PARTITION p3609 VALUES LESS THAN (28880), +PARTITION p3610 VALUES LESS THAN (28888), +PARTITION p3611 VALUES LESS THAN (28896), +PARTITION p3612 VALUES LESS THAN (28904), +PARTITION p3613 VALUES LESS THAN (28912), +PARTITION p3614 VALUES LESS THAN (28920), +PARTITION p3615 VALUES LESS THAN (28928), +PARTITION p3616 VALUES LESS THAN (28936), +PARTITION p3617 VALUES LESS THAN (28944), +PARTITION p3618 VALUES LESS THAN (28952), +PARTITION p3619 VALUES LESS THAN (28960), +PARTITION p3620 VALUES LESS THAN (28968), +PARTITION p3621 VALUES LESS THAN (28976), +PARTITION p3622 VALUES LESS THAN (28984), +PARTITION p3623 VALUES LESS THAN (28992), +PARTITION p3624 VALUES LESS THAN (29000), +PARTITION p3625 VALUES LESS THAN (29008), +PARTITION p3626 VALUES LESS THAN (29016), +PARTITION p3627 VALUES LESS THAN (29024), +PARTITION p3628 VALUES LESS THAN (29032), +PARTITION p3629 VALUES LESS THAN (29040), +PARTITION p3630 VALUES LESS THAN (29048), +PARTITION p3631 VALUES LESS THAN (29056), +PARTITION p3632 VALUES LESS THAN (29064), +PARTITION p3633 VALUES LESS THAN (29072), +PARTITION p3634 VALUES LESS THAN (29080), +PARTITION p3635 VALUES LESS THAN (29088), +PARTITION p3636 VALUES LESS THAN (29096), +PARTITION p3637 VALUES LESS THAN (29104), +PARTITION p3638 VALUES LESS THAN (29112), +PARTITION p3639 VALUES LESS THAN (29120), +PARTITION p3640 VALUES LESS THAN (29128), +PARTITION p3641 VALUES LESS THAN (29136), +PARTITION p3642 VALUES LESS THAN (29144), +PARTITION p3643 VALUES LESS THAN (29152), +PARTITION p3644 VALUES LESS THAN (29160), +PARTITION p3645 VALUES LESS THAN (29168), +PARTITION p3646 VALUES LESS THAN (29176), +PARTITION p3647 VALUES LESS THAN (29184), +PARTITION p3648 VALUES LESS THAN (29192), +PARTITION p3649 VALUES LESS THAN (29200), +PARTITION p3650 VALUES LESS THAN (29208), +PARTITION p3651 VALUES LESS THAN (29216), +PARTITION p3652 VALUES LESS THAN (29224), +PARTITION p3653 VALUES LESS THAN (29232), +PARTITION p3654 VALUES LESS THAN (29240), +PARTITION p3655 VALUES LESS THAN (29248), +PARTITION p3656 VALUES LESS THAN (29256), +PARTITION p3657 VALUES LESS THAN (29264), +PARTITION p3658 VALUES LESS THAN (29272), +PARTITION p3659 VALUES LESS THAN (29280), +PARTITION p3660 VALUES LESS THAN (29288), +PARTITION p3661 VALUES LESS THAN (29296), +PARTITION p3662 VALUES LESS THAN (29304), +PARTITION p3663 VALUES LESS THAN (29312), +PARTITION p3664 VALUES LESS THAN (29320), +PARTITION p3665 VALUES LESS THAN (29328), +PARTITION p3666 VALUES LESS THAN (29336), +PARTITION p3667 VALUES LESS THAN (29344), +PARTITION p3668 VALUES LESS THAN (29352), +PARTITION p3669 VALUES LESS THAN (29360), +PARTITION p3670 VALUES LESS THAN (29368), +PARTITION p3671 VALUES LESS THAN (29376), +PARTITION p3672 VALUES LESS THAN (29384), +PARTITION p3673 VALUES LESS THAN (29392), +PARTITION p3674 VALUES LESS THAN (29400), +PARTITION p3675 VALUES LESS THAN (29408), +PARTITION p3676 VALUES LESS THAN (29416), +PARTITION p3677 VALUES LESS THAN (29424), +PARTITION p3678 VALUES LESS THAN (29432), +PARTITION p3679 VALUES LESS THAN (29440), +PARTITION p3680 VALUES LESS THAN (29448), +PARTITION p3681 VALUES LESS THAN (29456), +PARTITION p3682 VALUES LESS THAN (29464), +PARTITION p3683 VALUES LESS THAN (29472), +PARTITION p3684 VALUES LESS THAN (29480), +PARTITION p3685 VALUES LESS THAN (29488), +PARTITION p3686 VALUES LESS THAN (29496), +PARTITION p3687 VALUES LESS THAN (29504), +PARTITION p3688 VALUES LESS THAN (29512), +PARTITION p3689 VALUES LESS THAN (29520), +PARTITION p3690 VALUES LESS THAN (29528), +PARTITION p3691 VALUES LESS THAN (29536), +PARTITION p3692 VALUES LESS THAN (29544), +PARTITION p3693 VALUES LESS THAN (29552), +PARTITION p3694 VALUES LESS THAN (29560), +PARTITION p3695 VALUES LESS THAN (29568), +PARTITION p3696 VALUES LESS THAN (29576), +PARTITION p3697 VALUES LESS THAN (29584), +PARTITION p3698 VALUES LESS THAN (29592), +PARTITION p3699 VALUES LESS THAN (29600), +PARTITION p3700 VALUES LESS THAN (29608), +PARTITION p3701 VALUES LESS THAN (29616), +PARTITION p3702 VALUES LESS THAN (29624), +PARTITION p3703 VALUES LESS THAN (29632), +PARTITION p3704 VALUES LESS THAN (29640), +PARTITION p3705 VALUES LESS THAN (29648), +PARTITION p3706 VALUES LESS THAN (29656), +PARTITION p3707 VALUES LESS THAN (29664), +PARTITION p3708 VALUES LESS THAN (29672), +PARTITION p3709 VALUES LESS THAN (29680), +PARTITION p3710 VALUES LESS THAN (29688), +PARTITION p3711 VALUES LESS THAN (29696), +PARTITION p3712 VALUES LESS THAN (29704), +PARTITION p3713 VALUES LESS THAN (29712), +PARTITION p3714 VALUES LESS THAN (29720), +PARTITION p3715 VALUES LESS THAN (29728), +PARTITION p3716 VALUES LESS THAN (29736), +PARTITION p3717 VALUES LESS THAN (29744), +PARTITION p3718 VALUES LESS THAN (29752), +PARTITION p3719 VALUES LESS THAN (29760), +PARTITION p3720 VALUES LESS THAN (29768), +PARTITION p3721 VALUES LESS THAN (29776), +PARTITION p3722 VALUES LESS THAN (29784), +PARTITION p3723 VALUES LESS THAN (29792), +PARTITION p3724 VALUES LESS THAN (29800), +PARTITION p3725 VALUES LESS THAN (29808), +PARTITION p3726 VALUES LESS THAN (29816), +PARTITION p3727 VALUES LESS THAN (29824), +PARTITION p3728 VALUES LESS THAN (29832), +PARTITION p3729 VALUES LESS THAN (29840), +PARTITION p3730 VALUES LESS THAN (29848), +PARTITION p3731 VALUES LESS THAN (29856), +PARTITION p3732 VALUES LESS THAN (29864), +PARTITION p3733 VALUES LESS THAN (29872), +PARTITION p3734 VALUES LESS THAN (29880), +PARTITION p3735 VALUES LESS THAN (29888), +PARTITION p3736 VALUES LESS THAN (29896), +PARTITION p3737 VALUES LESS THAN (29904), +PARTITION p3738 VALUES LESS THAN (29912), +PARTITION p3739 VALUES LESS THAN (29920), +PARTITION p3740 VALUES LESS THAN (29928), +PARTITION p3741 VALUES LESS THAN (29936), +PARTITION p3742 VALUES LESS THAN (29944), +PARTITION p3743 VALUES LESS THAN (29952), +PARTITION p3744 VALUES LESS THAN (29960), +PARTITION p3745 VALUES LESS THAN (29968), +PARTITION p3746 VALUES LESS THAN (29976), +PARTITION p3747 VALUES LESS THAN (29984), +PARTITION p3748 VALUES LESS THAN (29992), +PARTITION p3749 VALUES LESS THAN (30000), +PARTITION p3750 VALUES LESS THAN (30008), +PARTITION p3751 VALUES LESS THAN (30016), +PARTITION p3752 VALUES LESS THAN (30024), +PARTITION p3753 VALUES LESS THAN (30032), +PARTITION p3754 VALUES LESS THAN (30040), +PARTITION p3755 VALUES LESS THAN (30048), +PARTITION p3756 VALUES LESS THAN (30056), +PARTITION p3757 VALUES LESS THAN (30064), +PARTITION p3758 VALUES LESS THAN (30072), +PARTITION p3759 VALUES LESS THAN (30080), +PARTITION p3760 VALUES LESS THAN (30088), +PARTITION p3761 VALUES LESS THAN (30096), +PARTITION p3762 VALUES LESS THAN (30104), +PARTITION p3763 VALUES LESS THAN (30112), +PARTITION p3764 VALUES LESS THAN (30120), +PARTITION p3765 VALUES LESS THAN (30128), +PARTITION p3766 VALUES LESS THAN (30136), +PARTITION p3767 VALUES LESS THAN (30144), +PARTITION p3768 VALUES LESS THAN (30152), +PARTITION p3769 VALUES LESS THAN (30160), +PARTITION p3770 VALUES LESS THAN (30168), +PARTITION p3771 VALUES LESS THAN (30176), +PARTITION p3772 VALUES LESS THAN (30184), +PARTITION p3773 VALUES LESS THAN (30192), +PARTITION p3774 VALUES LESS THAN (30200), +PARTITION p3775 VALUES LESS THAN (30208), +PARTITION p3776 VALUES LESS THAN (30216), +PARTITION p3777 VALUES LESS THAN (30224), +PARTITION p3778 VALUES LESS THAN (30232), +PARTITION p3779 VALUES LESS THAN (30240), +PARTITION p3780 VALUES LESS THAN (30248), +PARTITION p3781 VALUES LESS THAN (30256), +PARTITION p3782 VALUES LESS THAN (30264), +PARTITION p3783 VALUES LESS THAN (30272), +PARTITION p3784 VALUES LESS THAN (30280), +PARTITION p3785 VALUES LESS THAN (30288), +PARTITION p3786 VALUES LESS THAN (30296), +PARTITION p3787 VALUES LESS THAN (30304), +PARTITION p3788 VALUES LESS THAN (30312), +PARTITION p3789 VALUES LESS THAN (30320), +PARTITION p3790 VALUES LESS THAN (30328), +PARTITION p3791 VALUES LESS THAN (30336), +PARTITION p3792 VALUES LESS THAN (30344), +PARTITION p3793 VALUES LESS THAN (30352), +PARTITION p3794 VALUES LESS THAN (30360), +PARTITION p3795 VALUES LESS THAN (30368), +PARTITION p3796 VALUES LESS THAN (30376), +PARTITION p3797 VALUES LESS THAN (30384), +PARTITION p3798 VALUES LESS THAN (30392), +PARTITION p3799 VALUES LESS THAN (30400), +PARTITION p3800 VALUES LESS THAN (30408), +PARTITION p3801 VALUES LESS THAN (30416), +PARTITION p3802 VALUES LESS THAN (30424), +PARTITION p3803 VALUES LESS THAN (30432), +PARTITION p3804 VALUES LESS THAN (30440), +PARTITION p3805 VALUES LESS THAN (30448), +PARTITION p3806 VALUES LESS THAN (30456), +PARTITION p3807 VALUES LESS THAN (30464), +PARTITION p3808 VALUES LESS THAN (30472), +PARTITION p3809 VALUES LESS THAN (30480), +PARTITION p3810 VALUES LESS THAN (30488), +PARTITION p3811 VALUES LESS THAN (30496), +PARTITION p3812 VALUES LESS THAN (30504), +PARTITION p3813 VALUES LESS THAN (30512), +PARTITION p3814 VALUES LESS THAN (30520), +PARTITION p3815 VALUES LESS THAN (30528), +PARTITION p3816 VALUES LESS THAN (30536), +PARTITION p3817 VALUES LESS THAN (30544), +PARTITION p3818 VALUES LESS THAN (30552), +PARTITION p3819 VALUES LESS THAN (30560), +PARTITION p3820 VALUES LESS THAN (30568), +PARTITION p3821 VALUES LESS THAN (30576), +PARTITION p3822 VALUES LESS THAN (30584), +PARTITION p3823 VALUES LESS THAN (30592), +PARTITION p3824 VALUES LESS THAN (30600), +PARTITION p3825 VALUES LESS THAN (30608), +PARTITION p3826 VALUES LESS THAN (30616), +PARTITION p3827 VALUES LESS THAN (30624), +PARTITION p3828 VALUES LESS THAN (30632), +PARTITION p3829 VALUES LESS THAN (30640), +PARTITION p3830 VALUES LESS THAN (30648), +PARTITION p3831 VALUES LESS THAN (30656), +PARTITION p3832 VALUES LESS THAN (30664), +PARTITION p3833 VALUES LESS THAN (30672), +PARTITION p3834 VALUES LESS THAN (30680), +PARTITION p3835 VALUES LESS THAN (30688), +PARTITION p3836 VALUES LESS THAN (30696), +PARTITION p3837 VALUES LESS THAN (30704), +PARTITION p3838 VALUES LESS THAN (30712), +PARTITION p3839 VALUES LESS THAN (30720), +PARTITION p3840 VALUES LESS THAN (30728), +PARTITION p3841 VALUES LESS THAN (30736), +PARTITION p3842 VALUES LESS THAN (30744), +PARTITION p3843 VALUES LESS THAN (30752), +PARTITION p3844 VALUES LESS THAN (30760), +PARTITION p3845 VALUES LESS THAN (30768), +PARTITION p3846 VALUES LESS THAN (30776), +PARTITION p3847 VALUES LESS THAN (30784), +PARTITION p3848 VALUES LESS THAN (30792), +PARTITION p3849 VALUES LESS THAN (30800), +PARTITION p3850 VALUES LESS THAN (30808), +PARTITION p3851 VALUES LESS THAN (30816), +PARTITION p3852 VALUES LESS THAN (30824), +PARTITION p3853 VALUES LESS THAN (30832), +PARTITION p3854 VALUES LESS THAN (30840), +PARTITION p3855 VALUES LESS THAN (30848), +PARTITION p3856 VALUES LESS THAN (30856), +PARTITION p3857 VALUES LESS THAN (30864), +PARTITION p3858 VALUES LESS THAN (30872), +PARTITION p3859 VALUES LESS THAN (30880), +PARTITION p3860 VALUES LESS THAN (30888), +PARTITION p3861 VALUES LESS THAN (30896), +PARTITION p3862 VALUES LESS THAN (30904), +PARTITION p3863 VALUES LESS THAN (30912), +PARTITION p3864 VALUES LESS THAN (30920), +PARTITION p3865 VALUES LESS THAN (30928), +PARTITION p3866 VALUES LESS THAN (30936), +PARTITION p3867 VALUES LESS THAN (30944), +PARTITION p3868 VALUES LESS THAN (30952), +PARTITION p3869 VALUES LESS THAN (30960), +PARTITION p3870 VALUES LESS THAN (30968), +PARTITION p3871 VALUES LESS THAN (30976), +PARTITION p3872 VALUES LESS THAN (30984), +PARTITION p3873 VALUES LESS THAN (30992), +PARTITION p3874 VALUES LESS THAN (31000), +PARTITION p3875 VALUES LESS THAN (31008), +PARTITION p3876 VALUES LESS THAN (31016), +PARTITION p3877 VALUES LESS THAN (31024), +PARTITION p3878 VALUES LESS THAN (31032), +PARTITION p3879 VALUES LESS THAN (31040), +PARTITION p3880 VALUES LESS THAN (31048), +PARTITION p3881 VALUES LESS THAN (31056), +PARTITION p3882 VALUES LESS THAN (31064), +PARTITION p3883 VALUES LESS THAN (31072), +PARTITION p3884 VALUES LESS THAN (31080), +PARTITION p3885 VALUES LESS THAN (31088), +PARTITION p3886 VALUES LESS THAN (31096), +PARTITION p3887 VALUES LESS THAN (31104), +PARTITION p3888 VALUES LESS THAN (31112), +PARTITION p3889 VALUES LESS THAN (31120), +PARTITION p3890 VALUES LESS THAN (31128), +PARTITION p3891 VALUES LESS THAN (31136), +PARTITION p3892 VALUES LESS THAN (31144), +PARTITION p3893 VALUES LESS THAN (31152), +PARTITION p3894 VALUES LESS THAN (31160), +PARTITION p3895 VALUES LESS THAN (31168), +PARTITION p3896 VALUES LESS THAN (31176), +PARTITION p3897 VALUES LESS THAN (31184), +PARTITION p3898 VALUES LESS THAN (31192), +PARTITION p3899 VALUES LESS THAN (31200), +PARTITION p3900 VALUES LESS THAN (31208), +PARTITION p3901 VALUES LESS THAN (31216), +PARTITION p3902 VALUES LESS THAN (31224), +PARTITION p3903 VALUES LESS THAN (31232), +PARTITION p3904 VALUES LESS THAN (31240), +PARTITION p3905 VALUES LESS THAN (31248), +PARTITION p3906 VALUES LESS THAN (31256), +PARTITION p3907 VALUES LESS THAN (31264), +PARTITION p3908 VALUES LESS THAN (31272), +PARTITION p3909 VALUES LESS THAN (31280), +PARTITION p3910 VALUES LESS THAN (31288), +PARTITION p3911 VALUES LESS THAN (31296), +PARTITION p3912 VALUES LESS THAN (31304), +PARTITION p3913 VALUES LESS THAN (31312), +PARTITION p3914 VALUES LESS THAN (31320), +PARTITION p3915 VALUES LESS THAN (31328), +PARTITION p3916 VALUES LESS THAN (31336), +PARTITION p3917 VALUES LESS THAN (31344), +PARTITION p3918 VALUES LESS THAN (31352), +PARTITION p3919 VALUES LESS THAN (31360), +PARTITION p3920 VALUES LESS THAN (31368), +PARTITION p3921 VALUES LESS THAN (31376), +PARTITION p3922 VALUES LESS THAN (31384), +PARTITION p3923 VALUES LESS THAN (31392), +PARTITION p3924 VALUES LESS THAN (31400), +PARTITION p3925 VALUES LESS THAN (31408), +PARTITION p3926 VALUES LESS THAN (31416), +PARTITION p3927 VALUES LESS THAN (31424), +PARTITION p3928 VALUES LESS THAN (31432), +PARTITION p3929 VALUES LESS THAN (31440), +PARTITION p3930 VALUES LESS THAN (31448), +PARTITION p3931 VALUES LESS THAN (31456), +PARTITION p3932 VALUES LESS THAN (31464), +PARTITION p3933 VALUES LESS THAN (31472), +PARTITION p3934 VALUES LESS THAN (31480), +PARTITION p3935 VALUES LESS THAN (31488), +PARTITION p3936 VALUES LESS THAN (31496), +PARTITION p3937 VALUES LESS THAN (31504), +PARTITION p3938 VALUES LESS THAN (31512), +PARTITION p3939 VALUES LESS THAN (31520), +PARTITION p3940 VALUES LESS THAN (31528), +PARTITION p3941 VALUES LESS THAN (31536), +PARTITION p3942 VALUES LESS THAN (31544), +PARTITION p3943 VALUES LESS THAN (31552), +PARTITION p3944 VALUES LESS THAN (31560), +PARTITION p3945 VALUES LESS THAN (31568), +PARTITION p3946 VALUES LESS THAN (31576), +PARTITION p3947 VALUES LESS THAN (31584), +PARTITION p3948 VALUES LESS THAN (31592), +PARTITION p3949 VALUES LESS THAN (31600), +PARTITION p3950 VALUES LESS THAN (31608), +PARTITION p3951 VALUES LESS THAN (31616), +PARTITION p3952 VALUES LESS THAN (31624), +PARTITION p3953 VALUES LESS THAN (31632), +PARTITION p3954 VALUES LESS THAN (31640), +PARTITION p3955 VALUES LESS THAN (31648), +PARTITION p3956 VALUES LESS THAN (31656), +PARTITION p3957 VALUES LESS THAN (31664), +PARTITION p3958 VALUES LESS THAN (31672), +PARTITION p3959 VALUES LESS THAN (31680), +PARTITION p3960 VALUES LESS THAN (31688), +PARTITION p3961 VALUES LESS THAN (31696), +PARTITION p3962 VALUES LESS THAN (31704), +PARTITION p3963 VALUES LESS THAN (31712), +PARTITION p3964 VALUES LESS THAN (31720), +PARTITION p3965 VALUES LESS THAN (31728), +PARTITION p3966 VALUES LESS THAN (31736), +PARTITION p3967 VALUES LESS THAN (31744), +PARTITION p3968 VALUES LESS THAN (31752), +PARTITION p3969 VALUES LESS THAN (31760), +PARTITION p3970 VALUES LESS THAN (31768), +PARTITION p3971 VALUES LESS THAN (31776), +PARTITION p3972 VALUES LESS THAN (31784), +PARTITION p3973 VALUES LESS THAN (31792), +PARTITION p3974 VALUES LESS THAN (31800), +PARTITION p3975 VALUES LESS THAN (31808), +PARTITION p3976 VALUES LESS THAN (31816), +PARTITION p3977 VALUES LESS THAN (31824), +PARTITION p3978 VALUES LESS THAN (31832), +PARTITION p3979 VALUES LESS THAN (31840), +PARTITION p3980 VALUES LESS THAN (31848), +PARTITION p3981 VALUES LESS THAN (31856), +PARTITION p3982 VALUES LESS THAN (31864), +PARTITION p3983 VALUES LESS THAN (31872), +PARTITION p3984 VALUES LESS THAN (31880), +PARTITION p3985 VALUES LESS THAN (31888), +PARTITION p3986 VALUES LESS THAN (31896), +PARTITION p3987 VALUES LESS THAN (31904), +PARTITION p3988 VALUES LESS THAN (31912), +PARTITION p3989 VALUES LESS THAN (31920), +PARTITION p3990 VALUES LESS THAN (31928), +PARTITION p3991 VALUES LESS THAN (31936), +PARTITION p3992 VALUES LESS THAN (31944), +PARTITION p3993 VALUES LESS THAN (31952), +PARTITION p3994 VALUES LESS THAN (31960), +PARTITION p3995 VALUES LESS THAN (31968), +PARTITION p3996 VALUES LESS THAN (31976), +PARTITION p3997 VALUES LESS THAN (31984), +PARTITION p3998 VALUES LESS THAN (31992), +PARTITION p3999 VALUES LESS THAN (32000), +PARTITION p4000 VALUES LESS THAN (32008), +PARTITION p4001 VALUES LESS THAN (32016), +PARTITION p4002 VALUES LESS THAN (32024), +PARTITION p4003 VALUES LESS THAN (32032), +PARTITION p4004 VALUES LESS THAN (32040), +PARTITION p4005 VALUES LESS THAN (32048), +PARTITION p4006 VALUES LESS THAN (32056), +PARTITION p4007 VALUES LESS THAN (32064), +PARTITION p4008 VALUES LESS THAN (32072), +PARTITION p4009 VALUES LESS THAN (32080), +PARTITION p4010 VALUES LESS THAN (32088), +PARTITION p4011 VALUES LESS THAN (32096), +PARTITION p4012 VALUES LESS THAN (32104), +PARTITION p4013 VALUES LESS THAN (32112), +PARTITION p4014 VALUES LESS THAN (32120), +PARTITION p4015 VALUES LESS THAN (32128), +PARTITION p4016 VALUES LESS THAN (32136), +PARTITION p4017 VALUES LESS THAN (32144), +PARTITION p4018 VALUES LESS THAN (32152), +PARTITION p4019 VALUES LESS THAN (32160), +PARTITION p4020 VALUES LESS THAN (32168), +PARTITION p4021 VALUES LESS THAN (32176), +PARTITION p4022 VALUES LESS THAN (32184), +PARTITION p4023 VALUES LESS THAN (32192), +PARTITION p4024 VALUES LESS THAN (32200), +PARTITION p4025 VALUES LESS THAN (32208), +PARTITION p4026 VALUES LESS THAN (32216), +PARTITION p4027 VALUES LESS THAN (32224), +PARTITION p4028 VALUES LESS THAN (32232), +PARTITION p4029 VALUES LESS THAN (32240), +PARTITION p4030 VALUES LESS THAN (32248), +PARTITION p4031 VALUES LESS THAN (32256), +PARTITION p4032 VALUES LESS THAN (32264), +PARTITION p4033 VALUES LESS THAN (32272), +PARTITION p4034 VALUES LESS THAN (32280), +PARTITION p4035 VALUES LESS THAN (32288), +PARTITION p4036 VALUES LESS THAN (32296), +PARTITION p4037 VALUES LESS THAN (32304), +PARTITION p4038 VALUES LESS THAN (32312), +PARTITION p4039 VALUES LESS THAN (32320), +PARTITION p4040 VALUES LESS THAN (32328), +PARTITION p4041 VALUES LESS THAN (32336), +PARTITION p4042 VALUES LESS THAN (32344), +PARTITION p4043 VALUES LESS THAN (32352), +PARTITION p4044 VALUES LESS THAN (32360), +PARTITION p4045 VALUES LESS THAN (32368), +PARTITION p4046 VALUES LESS THAN (32376), +PARTITION p4047 VALUES LESS THAN (32384), +PARTITION p4048 VALUES LESS THAN (32392), +PARTITION p4049 VALUES LESS THAN (32400), +PARTITION p4050 VALUES LESS THAN (32408), +PARTITION p4051 VALUES LESS THAN (32416), +PARTITION p4052 VALUES LESS THAN (32424), +PARTITION p4053 VALUES LESS THAN (32432), +PARTITION p4054 VALUES LESS THAN (32440), +PARTITION p4055 VALUES LESS THAN (32448), +PARTITION p4056 VALUES LESS THAN (32456), +PARTITION p4057 VALUES LESS THAN (32464), +PARTITION p4058 VALUES LESS THAN (32472), +PARTITION p4059 VALUES LESS THAN (32480), +PARTITION p4060 VALUES LESS THAN (32488), +PARTITION p4061 VALUES LESS THAN (32496), +PARTITION p4062 VALUES LESS THAN (32504), +PARTITION p4063 VALUES LESS THAN (32512), +PARTITION p4064 VALUES LESS THAN (32520), +PARTITION p4065 VALUES LESS THAN (32528), +PARTITION p4066 VALUES LESS THAN (32536), +PARTITION p4067 VALUES LESS THAN (32544), +PARTITION p4068 VALUES LESS THAN (32552), +PARTITION p4069 VALUES LESS THAN (32560), +PARTITION p4070 VALUES LESS THAN (32568), +PARTITION p4071 VALUES LESS THAN (32576), +PARTITION p4072 VALUES LESS THAN (32584), +PARTITION p4073 VALUES LESS THAN (32592), +PARTITION p4074 VALUES LESS THAN (32600), +PARTITION p4075 VALUES LESS THAN (32608), +PARTITION p4076 VALUES LESS THAN (32616), +PARTITION p4077 VALUES LESS THAN (32624), +PARTITION p4078 VALUES LESS THAN (32632), +PARTITION p4079 VALUES LESS THAN (32640), +PARTITION p4080 VALUES LESS THAN (32648), +PARTITION p4081 VALUES LESS THAN (32656), +PARTITION p4082 VALUES LESS THAN (32664), +PARTITION p4083 VALUES LESS THAN (32672), +PARTITION p4084 VALUES LESS THAN (32680), +PARTITION p4085 VALUES LESS THAN (32688), +PARTITION p4086 VALUES LESS THAN (32696), +PARTITION p4087 VALUES LESS THAN (32704), +PARTITION p4088 VALUES LESS THAN (32712), +PARTITION p4089 VALUES LESS THAN (32720), +PARTITION p4090 VALUES LESS THAN (32728), +PARTITION p4091 VALUES LESS THAN (32736), +PARTITION p4092 VALUES LESS THAN (32744), +PARTITION p4093 VALUES LESS THAN (32752), +PARTITION p4094 VALUES LESS THAN (32760), +PARTITION p4095 VALUES LESS THAN (32768), +PARTITION p4096 VALUES LESS THAN (32776), +PARTITION p4097 VALUES LESS THAN (32784), +PARTITION p4098 VALUES LESS THAN (32792), +PARTITION p4099 VALUES LESS THAN (32800), +PARTITION p4100 VALUES LESS THAN (32808), +PARTITION p4101 VALUES LESS THAN (32816), +PARTITION p4102 VALUES LESS THAN (32824), +PARTITION p4103 VALUES LESS THAN (32832), +PARTITION p4104 VALUES LESS THAN (32840), +PARTITION p4105 VALUES LESS THAN (32848), +PARTITION p4106 VALUES LESS THAN (32856), +PARTITION p4107 VALUES LESS THAN (32864), +PARTITION p4108 VALUES LESS THAN (32872), +PARTITION p4109 VALUES LESS THAN (32880), +PARTITION p4110 VALUES LESS THAN (32888), +PARTITION p4111 VALUES LESS THAN (32896), +PARTITION p4112 VALUES LESS THAN (32904), +PARTITION p4113 VALUES LESS THAN (32912), +PARTITION p4114 VALUES LESS THAN (32920), +PARTITION p4115 VALUES LESS THAN (32928), +PARTITION p4116 VALUES LESS THAN (32936), +PARTITION p4117 VALUES LESS THAN (32944), +PARTITION p4118 VALUES LESS THAN (32952), +PARTITION p4119 VALUES LESS THAN (32960), +PARTITION p4120 VALUES LESS THAN (32968), +PARTITION p4121 VALUES LESS THAN (32976), +PARTITION p4122 VALUES LESS THAN (32984), +PARTITION p4123 VALUES LESS THAN (32992), +PARTITION p4124 VALUES LESS THAN (33000), +PARTITION p4125 VALUES LESS THAN (33008), +PARTITION p4126 VALUES LESS THAN (33016), +PARTITION p4127 VALUES LESS THAN (33024), +PARTITION p4128 VALUES LESS THAN (33032), +PARTITION p4129 VALUES LESS THAN (33040), +PARTITION p4130 VALUES LESS THAN (33048), +PARTITION p4131 VALUES LESS THAN (33056), +PARTITION p4132 VALUES LESS THAN (33064), +PARTITION p4133 VALUES LESS THAN (33072), +PARTITION p4134 VALUES LESS THAN (33080), +PARTITION p4135 VALUES LESS THAN (33088), +PARTITION p4136 VALUES LESS THAN (33096), +PARTITION p4137 VALUES LESS THAN (33104), +PARTITION p4138 VALUES LESS THAN (33112), +PARTITION p4139 VALUES LESS THAN (33120), +PARTITION p4140 VALUES LESS THAN (33128), +PARTITION p4141 VALUES LESS THAN (33136), +PARTITION p4142 VALUES LESS THAN (33144), +PARTITION p4143 VALUES LESS THAN (33152), +PARTITION p4144 VALUES LESS THAN (33160), +PARTITION p4145 VALUES LESS THAN (33168), +PARTITION p4146 VALUES LESS THAN (33176), +PARTITION p4147 VALUES LESS THAN (33184), +PARTITION p4148 VALUES LESS THAN (33192), +PARTITION p4149 VALUES LESS THAN (33200), +PARTITION p4150 VALUES LESS THAN (33208), +PARTITION p4151 VALUES LESS THAN (33216), +PARTITION p4152 VALUES LESS THAN (33224), +PARTITION p4153 VALUES LESS THAN (33232), +PARTITION p4154 VALUES LESS THAN (33240), +PARTITION p4155 VALUES LESS THAN (33248), +PARTITION p4156 VALUES LESS THAN (33256), +PARTITION p4157 VALUES LESS THAN (33264), +PARTITION p4158 VALUES LESS THAN (33272), +PARTITION p4159 VALUES LESS THAN (33280), +PARTITION p4160 VALUES LESS THAN (33288), +PARTITION p4161 VALUES LESS THAN (33296), +PARTITION p4162 VALUES LESS THAN (33304), +PARTITION p4163 VALUES LESS THAN (33312), +PARTITION p4164 VALUES LESS THAN (33320), +PARTITION p4165 VALUES LESS THAN (33328), +PARTITION p4166 VALUES LESS THAN (33336), +PARTITION p4167 VALUES LESS THAN (33344), +PARTITION p4168 VALUES LESS THAN (33352), +PARTITION p4169 VALUES LESS THAN (33360), +PARTITION p4170 VALUES LESS THAN (33368), +PARTITION p4171 VALUES LESS THAN (33376), +PARTITION p4172 VALUES LESS THAN (33384), +PARTITION p4173 VALUES LESS THAN (33392), +PARTITION p4174 VALUES LESS THAN (33400), +PARTITION p4175 VALUES LESS THAN (33408), +PARTITION p4176 VALUES LESS THAN (33416), +PARTITION p4177 VALUES LESS THAN (33424), +PARTITION p4178 VALUES LESS THAN (33432), +PARTITION p4179 VALUES LESS THAN (33440), +PARTITION p4180 VALUES LESS THAN (33448), +PARTITION p4181 VALUES LESS THAN (33456), +PARTITION p4182 VALUES LESS THAN (33464), +PARTITION p4183 VALUES LESS THAN (33472), +PARTITION p4184 VALUES LESS THAN (33480), +PARTITION p4185 VALUES LESS THAN (33488), +PARTITION p4186 VALUES LESS THAN (33496), +PARTITION p4187 VALUES LESS THAN (33504), +PARTITION p4188 VALUES LESS THAN (33512), +PARTITION p4189 VALUES LESS THAN (33520), +PARTITION p4190 VALUES LESS THAN (33528), +PARTITION p4191 VALUES LESS THAN (33536), +PARTITION p4192 VALUES LESS THAN (33544), +PARTITION p4193 VALUES LESS THAN (33552), +PARTITION p4194 VALUES LESS THAN (33560), +PARTITION p4195 VALUES LESS THAN (33568), +PARTITION p4196 VALUES LESS THAN (33576), +PARTITION p4197 VALUES LESS THAN (33584), +PARTITION p4198 VALUES LESS THAN (33592), +PARTITION p4199 VALUES LESS THAN (33600), +PARTITION p4200 VALUES LESS THAN (33608), +PARTITION p4201 VALUES LESS THAN (33616), +PARTITION p4202 VALUES LESS THAN (33624), +PARTITION p4203 VALUES LESS THAN (33632), +PARTITION p4204 VALUES LESS THAN (33640), +PARTITION p4205 VALUES LESS THAN (33648), +PARTITION p4206 VALUES LESS THAN (33656), +PARTITION p4207 VALUES LESS THAN (33664), +PARTITION p4208 VALUES LESS THAN (33672), +PARTITION p4209 VALUES LESS THAN (33680), +PARTITION p4210 VALUES LESS THAN (33688), +PARTITION p4211 VALUES LESS THAN (33696), +PARTITION p4212 VALUES LESS THAN (33704), +PARTITION p4213 VALUES LESS THAN (33712), +PARTITION p4214 VALUES LESS THAN (33720), +PARTITION p4215 VALUES LESS THAN (33728), +PARTITION p4216 VALUES LESS THAN (33736), +PARTITION p4217 VALUES LESS THAN (33744), +PARTITION p4218 VALUES LESS THAN (33752), +PARTITION p4219 VALUES LESS THAN (33760), +PARTITION p4220 VALUES LESS THAN (33768), +PARTITION p4221 VALUES LESS THAN (33776), +PARTITION p4222 VALUES LESS THAN (33784), +PARTITION p4223 VALUES LESS THAN (33792), +PARTITION p4224 VALUES LESS THAN (33800), +PARTITION p4225 VALUES LESS THAN (33808), +PARTITION p4226 VALUES LESS THAN (33816), +PARTITION p4227 VALUES LESS THAN (33824), +PARTITION p4228 VALUES LESS THAN (33832), +PARTITION p4229 VALUES LESS THAN (33840), +PARTITION p4230 VALUES LESS THAN (33848), +PARTITION p4231 VALUES LESS THAN (33856), +PARTITION p4232 VALUES LESS THAN (33864), +PARTITION p4233 VALUES LESS THAN (33872), +PARTITION p4234 VALUES LESS THAN (33880), +PARTITION p4235 VALUES LESS THAN (33888), +PARTITION p4236 VALUES LESS THAN (33896), +PARTITION p4237 VALUES LESS THAN (33904), +PARTITION p4238 VALUES LESS THAN (33912), +PARTITION p4239 VALUES LESS THAN (33920), +PARTITION p4240 VALUES LESS THAN (33928), +PARTITION p4241 VALUES LESS THAN (33936), +PARTITION p4242 VALUES LESS THAN (33944), +PARTITION p4243 VALUES LESS THAN (33952), +PARTITION p4244 VALUES LESS THAN (33960), +PARTITION p4245 VALUES LESS THAN (33968), +PARTITION p4246 VALUES LESS THAN (33976), +PARTITION p4247 VALUES LESS THAN (33984), +PARTITION p4248 VALUES LESS THAN (33992), +PARTITION p4249 VALUES LESS THAN (34000), +PARTITION p4250 VALUES LESS THAN (34008), +PARTITION p4251 VALUES LESS THAN (34016), +PARTITION p4252 VALUES LESS THAN (34024), +PARTITION p4253 VALUES LESS THAN (34032), +PARTITION p4254 VALUES LESS THAN (34040), +PARTITION p4255 VALUES LESS THAN (34048), +PARTITION p4256 VALUES LESS THAN (34056), +PARTITION p4257 VALUES LESS THAN (34064), +PARTITION p4258 VALUES LESS THAN (34072), +PARTITION p4259 VALUES LESS THAN (34080), +PARTITION p4260 VALUES LESS THAN (34088), +PARTITION p4261 VALUES LESS THAN (34096), +PARTITION p4262 VALUES LESS THAN (34104), +PARTITION p4263 VALUES LESS THAN (34112), +PARTITION p4264 VALUES LESS THAN (34120), +PARTITION p4265 VALUES LESS THAN (34128), +PARTITION p4266 VALUES LESS THAN (34136), +PARTITION p4267 VALUES LESS THAN (34144), +PARTITION p4268 VALUES LESS THAN (34152), +PARTITION p4269 VALUES LESS THAN (34160), +PARTITION p4270 VALUES LESS THAN (34168), +PARTITION p4271 VALUES LESS THAN (34176), +PARTITION p4272 VALUES LESS THAN (34184), +PARTITION p4273 VALUES LESS THAN (34192), +PARTITION p4274 VALUES LESS THAN (34200), +PARTITION p4275 VALUES LESS THAN (34208), +PARTITION p4276 VALUES LESS THAN (34216), +PARTITION p4277 VALUES LESS THAN (34224), +PARTITION p4278 VALUES LESS THAN (34232), +PARTITION p4279 VALUES LESS THAN (34240), +PARTITION p4280 VALUES LESS THAN (34248), +PARTITION p4281 VALUES LESS THAN (34256), +PARTITION p4282 VALUES LESS THAN (34264), +PARTITION p4283 VALUES LESS THAN (34272), +PARTITION p4284 VALUES LESS THAN (34280), +PARTITION p4285 VALUES LESS THAN (34288), +PARTITION p4286 VALUES LESS THAN (34296), +PARTITION p4287 VALUES LESS THAN (34304), +PARTITION p4288 VALUES LESS THAN (34312), +PARTITION p4289 VALUES LESS THAN (34320), +PARTITION p4290 VALUES LESS THAN (34328), +PARTITION p4291 VALUES LESS THAN (34336), +PARTITION p4292 VALUES LESS THAN (34344), +PARTITION p4293 VALUES LESS THAN (34352), +PARTITION p4294 VALUES LESS THAN (34360), +PARTITION p4295 VALUES LESS THAN (34368), +PARTITION p4296 VALUES LESS THAN (34376), +PARTITION p4297 VALUES LESS THAN (34384), +PARTITION p4298 VALUES LESS THAN (34392), +PARTITION p4299 VALUES LESS THAN (34400), +PARTITION p4300 VALUES LESS THAN (34408), +PARTITION p4301 VALUES LESS THAN (34416), +PARTITION p4302 VALUES LESS THAN (34424), +PARTITION p4303 VALUES LESS THAN (34432), +PARTITION p4304 VALUES LESS THAN (34440), +PARTITION p4305 VALUES LESS THAN (34448), +PARTITION p4306 VALUES LESS THAN (34456), +PARTITION p4307 VALUES LESS THAN (34464), +PARTITION p4308 VALUES LESS THAN (34472), +PARTITION p4309 VALUES LESS THAN (34480), +PARTITION p4310 VALUES LESS THAN (34488), +PARTITION p4311 VALUES LESS THAN (34496), +PARTITION p4312 VALUES LESS THAN (34504), +PARTITION p4313 VALUES LESS THAN (34512), +PARTITION p4314 VALUES LESS THAN (34520), +PARTITION p4315 VALUES LESS THAN (34528), +PARTITION p4316 VALUES LESS THAN (34536), +PARTITION p4317 VALUES LESS THAN (34544), +PARTITION p4318 VALUES LESS THAN (34552), +PARTITION p4319 VALUES LESS THAN (34560), +PARTITION p4320 VALUES LESS THAN (34568), +PARTITION p4321 VALUES LESS THAN (34576), +PARTITION p4322 VALUES LESS THAN (34584), +PARTITION p4323 VALUES LESS THAN (34592), +PARTITION p4324 VALUES LESS THAN (34600), +PARTITION p4325 VALUES LESS THAN (34608), +PARTITION p4326 VALUES LESS THAN (34616), +PARTITION p4327 VALUES LESS THAN (34624), +PARTITION p4328 VALUES LESS THAN (34632), +PARTITION p4329 VALUES LESS THAN (34640), +PARTITION p4330 VALUES LESS THAN (34648), +PARTITION p4331 VALUES LESS THAN (34656), +PARTITION p4332 VALUES LESS THAN (34664), +PARTITION p4333 VALUES LESS THAN (34672), +PARTITION p4334 VALUES LESS THAN (34680), +PARTITION p4335 VALUES LESS THAN (34688), +PARTITION p4336 VALUES LESS THAN (34696), +PARTITION p4337 VALUES LESS THAN (34704), +PARTITION p4338 VALUES LESS THAN (34712), +PARTITION p4339 VALUES LESS THAN (34720), +PARTITION p4340 VALUES LESS THAN (34728), +PARTITION p4341 VALUES LESS THAN (34736), +PARTITION p4342 VALUES LESS THAN (34744), +PARTITION p4343 VALUES LESS THAN (34752), +PARTITION p4344 VALUES LESS THAN (34760), +PARTITION p4345 VALUES LESS THAN (34768), +PARTITION p4346 VALUES LESS THAN (34776), +PARTITION p4347 VALUES LESS THAN (34784), +PARTITION p4348 VALUES LESS THAN (34792), +PARTITION p4349 VALUES LESS THAN (34800), +PARTITION p4350 VALUES LESS THAN (34808), +PARTITION p4351 VALUES LESS THAN (34816), +PARTITION p4352 VALUES LESS THAN (34824), +PARTITION p4353 VALUES LESS THAN (34832), +PARTITION p4354 VALUES LESS THAN (34840), +PARTITION p4355 VALUES LESS THAN (34848), +PARTITION p4356 VALUES LESS THAN (34856), +PARTITION p4357 VALUES LESS THAN (34864), +PARTITION p4358 VALUES LESS THAN (34872), +PARTITION p4359 VALUES LESS THAN (34880), +PARTITION p4360 VALUES LESS THAN (34888), +PARTITION p4361 VALUES LESS THAN (34896), +PARTITION p4362 VALUES LESS THAN (34904), +PARTITION p4363 VALUES LESS THAN (34912), +PARTITION p4364 VALUES LESS THAN (34920), +PARTITION p4365 VALUES LESS THAN (34928), +PARTITION p4366 VALUES LESS THAN (34936), +PARTITION p4367 VALUES LESS THAN (34944), +PARTITION p4368 VALUES LESS THAN (34952), +PARTITION p4369 VALUES LESS THAN (34960), +PARTITION p4370 VALUES LESS THAN (34968), +PARTITION p4371 VALUES LESS THAN (34976), +PARTITION p4372 VALUES LESS THAN (34984), +PARTITION p4373 VALUES LESS THAN (34992), +PARTITION p4374 VALUES LESS THAN (35000), +PARTITION p4375 VALUES LESS THAN (35008), +PARTITION p4376 VALUES LESS THAN (35016), +PARTITION p4377 VALUES LESS THAN (35024), +PARTITION p4378 VALUES LESS THAN (35032), +PARTITION p4379 VALUES LESS THAN (35040), +PARTITION p4380 VALUES LESS THAN (35048), +PARTITION p4381 VALUES LESS THAN (35056), +PARTITION p4382 VALUES LESS THAN (35064), +PARTITION p4383 VALUES LESS THAN (35072), +PARTITION p4384 VALUES LESS THAN (35080), +PARTITION p4385 VALUES LESS THAN (35088), +PARTITION p4386 VALUES LESS THAN (35096), +PARTITION p4387 VALUES LESS THAN (35104), +PARTITION p4388 VALUES LESS THAN (35112), +PARTITION p4389 VALUES LESS THAN (35120), +PARTITION p4390 VALUES LESS THAN (35128), +PARTITION p4391 VALUES LESS THAN (35136), +PARTITION p4392 VALUES LESS THAN (35144), +PARTITION p4393 VALUES LESS THAN (35152), +PARTITION p4394 VALUES LESS THAN (35160), +PARTITION p4395 VALUES LESS THAN (35168), +PARTITION p4396 VALUES LESS THAN (35176), +PARTITION p4397 VALUES LESS THAN (35184), +PARTITION p4398 VALUES LESS THAN (35192), +PARTITION p4399 VALUES LESS THAN (35200), +PARTITION p4400 VALUES LESS THAN (35208), +PARTITION p4401 VALUES LESS THAN (35216), +PARTITION p4402 VALUES LESS THAN (35224), +PARTITION p4403 VALUES LESS THAN (35232), +PARTITION p4404 VALUES LESS THAN (35240), +PARTITION p4405 VALUES LESS THAN (35248), +PARTITION p4406 VALUES LESS THAN (35256), +PARTITION p4407 VALUES LESS THAN (35264), +PARTITION p4408 VALUES LESS THAN (35272), +PARTITION p4409 VALUES LESS THAN (35280), +PARTITION p4410 VALUES LESS THAN (35288), +PARTITION p4411 VALUES LESS THAN (35296), +PARTITION p4412 VALUES LESS THAN (35304), +PARTITION p4413 VALUES LESS THAN (35312), +PARTITION p4414 VALUES LESS THAN (35320), +PARTITION p4415 VALUES LESS THAN (35328), +PARTITION p4416 VALUES LESS THAN (35336), +PARTITION p4417 VALUES LESS THAN (35344), +PARTITION p4418 VALUES LESS THAN (35352), +PARTITION p4419 VALUES LESS THAN (35360), +PARTITION p4420 VALUES LESS THAN (35368), +PARTITION p4421 VALUES LESS THAN (35376), +PARTITION p4422 VALUES LESS THAN (35384), +PARTITION p4423 VALUES LESS THAN (35392), +PARTITION p4424 VALUES LESS THAN (35400), +PARTITION p4425 VALUES LESS THAN (35408), +PARTITION p4426 VALUES LESS THAN (35416), +PARTITION p4427 VALUES LESS THAN (35424), +PARTITION p4428 VALUES LESS THAN (35432), +PARTITION p4429 VALUES LESS THAN (35440), +PARTITION p4430 VALUES LESS THAN (35448), +PARTITION p4431 VALUES LESS THAN (35456), +PARTITION p4432 VALUES LESS THAN (35464), +PARTITION p4433 VALUES LESS THAN (35472), +PARTITION p4434 VALUES LESS THAN (35480), +PARTITION p4435 VALUES LESS THAN (35488), +PARTITION p4436 VALUES LESS THAN (35496), +PARTITION p4437 VALUES LESS THAN (35504), +PARTITION p4438 VALUES LESS THAN (35512), +PARTITION p4439 VALUES LESS THAN (35520), +PARTITION p4440 VALUES LESS THAN (35528), +PARTITION p4441 VALUES LESS THAN (35536), +PARTITION p4442 VALUES LESS THAN (35544), +PARTITION p4443 VALUES LESS THAN (35552), +PARTITION p4444 VALUES LESS THAN (35560), +PARTITION p4445 VALUES LESS THAN (35568), +PARTITION p4446 VALUES LESS THAN (35576), +PARTITION p4447 VALUES LESS THAN (35584), +PARTITION p4448 VALUES LESS THAN (35592), +PARTITION p4449 VALUES LESS THAN (35600), +PARTITION p4450 VALUES LESS THAN (35608), +PARTITION p4451 VALUES LESS THAN (35616), +PARTITION p4452 VALUES LESS THAN (35624), +PARTITION p4453 VALUES LESS THAN (35632), +PARTITION p4454 VALUES LESS THAN (35640), +PARTITION p4455 VALUES LESS THAN (35648), +PARTITION p4456 VALUES LESS THAN (35656), +PARTITION p4457 VALUES LESS THAN (35664), +PARTITION p4458 VALUES LESS THAN (35672), +PARTITION p4459 VALUES LESS THAN (35680), +PARTITION p4460 VALUES LESS THAN (35688), +PARTITION p4461 VALUES LESS THAN (35696), +PARTITION p4462 VALUES LESS THAN (35704), +PARTITION p4463 VALUES LESS THAN (35712), +PARTITION p4464 VALUES LESS THAN (35720), +PARTITION p4465 VALUES LESS THAN (35728), +PARTITION p4466 VALUES LESS THAN (35736), +PARTITION p4467 VALUES LESS THAN (35744), +PARTITION p4468 VALUES LESS THAN (35752), +PARTITION p4469 VALUES LESS THAN (35760), +PARTITION p4470 VALUES LESS THAN (35768), +PARTITION p4471 VALUES LESS THAN (35776), +PARTITION p4472 VALUES LESS THAN (35784), +PARTITION p4473 VALUES LESS THAN (35792), +PARTITION p4474 VALUES LESS THAN (35800), +PARTITION p4475 VALUES LESS THAN (35808), +PARTITION p4476 VALUES LESS THAN (35816), +PARTITION p4477 VALUES LESS THAN (35824), +PARTITION p4478 VALUES LESS THAN (35832), +PARTITION p4479 VALUES LESS THAN (35840), +PARTITION p4480 VALUES LESS THAN (35848), +PARTITION p4481 VALUES LESS THAN (35856), +PARTITION p4482 VALUES LESS THAN (35864), +PARTITION p4483 VALUES LESS THAN (35872), +PARTITION p4484 VALUES LESS THAN (35880), +PARTITION p4485 VALUES LESS THAN (35888), +PARTITION p4486 VALUES LESS THAN (35896), +PARTITION p4487 VALUES LESS THAN (35904), +PARTITION p4488 VALUES LESS THAN (35912), +PARTITION p4489 VALUES LESS THAN (35920), +PARTITION p4490 VALUES LESS THAN (35928), +PARTITION p4491 VALUES LESS THAN (35936), +PARTITION p4492 VALUES LESS THAN (35944), +PARTITION p4493 VALUES LESS THAN (35952), +PARTITION p4494 VALUES LESS THAN (35960), +PARTITION p4495 VALUES LESS THAN (35968), +PARTITION p4496 VALUES LESS THAN (35976), +PARTITION p4497 VALUES LESS THAN (35984), +PARTITION p4498 VALUES LESS THAN (35992), +PARTITION p4499 VALUES LESS THAN (36000), +PARTITION p4500 VALUES LESS THAN (36008), +PARTITION p4501 VALUES LESS THAN (36016), +PARTITION p4502 VALUES LESS THAN (36024), +PARTITION p4503 VALUES LESS THAN (36032), +PARTITION p4504 VALUES LESS THAN (36040), +PARTITION p4505 VALUES LESS THAN (36048), +PARTITION p4506 VALUES LESS THAN (36056), +PARTITION p4507 VALUES LESS THAN (36064), +PARTITION p4508 VALUES LESS THAN (36072), +PARTITION p4509 VALUES LESS THAN (36080), +PARTITION p4510 VALUES LESS THAN (36088), +PARTITION p4511 VALUES LESS THAN (36096), +PARTITION p4512 VALUES LESS THAN (36104), +PARTITION p4513 VALUES LESS THAN (36112), +PARTITION p4514 VALUES LESS THAN (36120), +PARTITION p4515 VALUES LESS THAN (36128), +PARTITION p4516 VALUES LESS THAN (36136), +PARTITION p4517 VALUES LESS THAN (36144), +PARTITION p4518 VALUES LESS THAN (36152), +PARTITION p4519 VALUES LESS THAN (36160), +PARTITION p4520 VALUES LESS THAN (36168), +PARTITION p4521 VALUES LESS THAN (36176), +PARTITION p4522 VALUES LESS THAN (36184), +PARTITION p4523 VALUES LESS THAN (36192), +PARTITION p4524 VALUES LESS THAN (36200), +PARTITION p4525 VALUES LESS THAN (36208), +PARTITION p4526 VALUES LESS THAN (36216), +PARTITION p4527 VALUES LESS THAN (36224), +PARTITION p4528 VALUES LESS THAN (36232), +PARTITION p4529 VALUES LESS THAN (36240), +PARTITION p4530 VALUES LESS THAN (36248), +PARTITION p4531 VALUES LESS THAN (36256), +PARTITION p4532 VALUES LESS THAN (36264), +PARTITION p4533 VALUES LESS THAN (36272), +PARTITION p4534 VALUES LESS THAN (36280), +PARTITION p4535 VALUES LESS THAN (36288), +PARTITION p4536 VALUES LESS THAN (36296), +PARTITION p4537 VALUES LESS THAN (36304), +PARTITION p4538 VALUES LESS THAN (36312), +PARTITION p4539 VALUES LESS THAN (36320), +PARTITION p4540 VALUES LESS THAN (36328), +PARTITION p4541 VALUES LESS THAN (36336), +PARTITION p4542 VALUES LESS THAN (36344), +PARTITION p4543 VALUES LESS THAN (36352), +PARTITION p4544 VALUES LESS THAN (36360), +PARTITION p4545 VALUES LESS THAN (36368), +PARTITION p4546 VALUES LESS THAN (36376), +PARTITION p4547 VALUES LESS THAN (36384), +PARTITION p4548 VALUES LESS THAN (36392), +PARTITION p4549 VALUES LESS THAN (36400), +PARTITION p4550 VALUES LESS THAN (36408), +PARTITION p4551 VALUES LESS THAN (36416), +PARTITION p4552 VALUES LESS THAN (36424), +PARTITION p4553 VALUES LESS THAN (36432), +PARTITION p4554 VALUES LESS THAN (36440), +PARTITION p4555 VALUES LESS THAN (36448), +PARTITION p4556 VALUES LESS THAN (36456), +PARTITION p4557 VALUES LESS THAN (36464), +PARTITION p4558 VALUES LESS THAN (36472), +PARTITION p4559 VALUES LESS THAN (36480), +PARTITION p4560 VALUES LESS THAN (36488), +PARTITION p4561 VALUES LESS THAN (36496), +PARTITION p4562 VALUES LESS THAN (36504), +PARTITION p4563 VALUES LESS THAN (36512), +PARTITION p4564 VALUES LESS THAN (36520), +PARTITION p4565 VALUES LESS THAN (36528), +PARTITION p4566 VALUES LESS THAN (36536), +PARTITION p4567 VALUES LESS THAN (36544), +PARTITION p4568 VALUES LESS THAN (36552), +PARTITION p4569 VALUES LESS THAN (36560), +PARTITION p4570 VALUES LESS THAN (36568), +PARTITION p4571 VALUES LESS THAN (36576), +PARTITION p4572 VALUES LESS THAN (36584), +PARTITION p4573 VALUES LESS THAN (36592), +PARTITION p4574 VALUES LESS THAN (36600), +PARTITION p4575 VALUES LESS THAN (36608), +PARTITION p4576 VALUES LESS THAN (36616), +PARTITION p4577 VALUES LESS THAN (36624), +PARTITION p4578 VALUES LESS THAN (36632), +PARTITION p4579 VALUES LESS THAN (36640), +PARTITION p4580 VALUES LESS THAN (36648), +PARTITION p4581 VALUES LESS THAN (36656), +PARTITION p4582 VALUES LESS THAN (36664), +PARTITION p4583 VALUES LESS THAN (36672), +PARTITION p4584 VALUES LESS THAN (36680), +PARTITION p4585 VALUES LESS THAN (36688), +PARTITION p4586 VALUES LESS THAN (36696), +PARTITION p4587 VALUES LESS THAN (36704), +PARTITION p4588 VALUES LESS THAN (36712), +PARTITION p4589 VALUES LESS THAN (36720), +PARTITION p4590 VALUES LESS THAN (36728), +PARTITION p4591 VALUES LESS THAN (36736), +PARTITION p4592 VALUES LESS THAN (36744), +PARTITION p4593 VALUES LESS THAN (36752), +PARTITION p4594 VALUES LESS THAN (36760), +PARTITION p4595 VALUES LESS THAN (36768), +PARTITION p4596 VALUES LESS THAN (36776), +PARTITION p4597 VALUES LESS THAN (36784), +PARTITION p4598 VALUES LESS THAN (36792), +PARTITION p4599 VALUES LESS THAN (36800), +PARTITION p4600 VALUES LESS THAN (36808), +PARTITION p4601 VALUES LESS THAN (36816), +PARTITION p4602 VALUES LESS THAN (36824), +PARTITION p4603 VALUES LESS THAN (36832), +PARTITION p4604 VALUES LESS THAN (36840), +PARTITION p4605 VALUES LESS THAN (36848), +PARTITION p4606 VALUES LESS THAN (36856), +PARTITION p4607 VALUES LESS THAN (36864), +PARTITION p4608 VALUES LESS THAN (36872), +PARTITION p4609 VALUES LESS THAN (36880), +PARTITION p4610 VALUES LESS THAN (36888), +PARTITION p4611 VALUES LESS THAN (36896), +PARTITION p4612 VALUES LESS THAN (36904), +PARTITION p4613 VALUES LESS THAN (36912), +PARTITION p4614 VALUES LESS THAN (36920), +PARTITION p4615 VALUES LESS THAN (36928), +PARTITION p4616 VALUES LESS THAN (36936), +PARTITION p4617 VALUES LESS THAN (36944), +PARTITION p4618 VALUES LESS THAN (36952), +PARTITION p4619 VALUES LESS THAN (36960), +PARTITION p4620 VALUES LESS THAN (36968), +PARTITION p4621 VALUES LESS THAN (36976), +PARTITION p4622 VALUES LESS THAN (36984), +PARTITION p4623 VALUES LESS THAN (36992), +PARTITION p4624 VALUES LESS THAN (37000), +PARTITION p4625 VALUES LESS THAN (37008), +PARTITION p4626 VALUES LESS THAN (37016), +PARTITION p4627 VALUES LESS THAN (37024), +PARTITION p4628 VALUES LESS THAN (37032), +PARTITION p4629 VALUES LESS THAN (37040), +PARTITION p4630 VALUES LESS THAN (37048), +PARTITION p4631 VALUES LESS THAN (37056), +PARTITION p4632 VALUES LESS THAN (37064), +PARTITION p4633 VALUES LESS THAN (37072), +PARTITION p4634 VALUES LESS THAN (37080), +PARTITION p4635 VALUES LESS THAN (37088), +PARTITION p4636 VALUES LESS THAN (37096), +PARTITION p4637 VALUES LESS THAN (37104), +PARTITION p4638 VALUES LESS THAN (37112), +PARTITION p4639 VALUES LESS THAN (37120), +PARTITION p4640 VALUES LESS THAN (37128), +PARTITION p4641 VALUES LESS THAN (37136), +PARTITION p4642 VALUES LESS THAN (37144), +PARTITION p4643 VALUES LESS THAN (37152), +PARTITION p4644 VALUES LESS THAN (37160), +PARTITION p4645 VALUES LESS THAN (37168), +PARTITION p4646 VALUES LESS THAN (37176), +PARTITION p4647 VALUES LESS THAN (37184), +PARTITION p4648 VALUES LESS THAN (37192), +PARTITION p4649 VALUES LESS THAN (37200), +PARTITION p4650 VALUES LESS THAN (37208), +PARTITION p4651 VALUES LESS THAN (37216), +PARTITION p4652 VALUES LESS THAN (37224), +PARTITION p4653 VALUES LESS THAN (37232), +PARTITION p4654 VALUES LESS THAN (37240), +PARTITION p4655 VALUES LESS THAN (37248), +PARTITION p4656 VALUES LESS THAN (37256), +PARTITION p4657 VALUES LESS THAN (37264), +PARTITION p4658 VALUES LESS THAN (37272), +PARTITION p4659 VALUES LESS THAN (37280), +PARTITION p4660 VALUES LESS THAN (37288), +PARTITION p4661 VALUES LESS THAN (37296), +PARTITION p4662 VALUES LESS THAN (37304), +PARTITION p4663 VALUES LESS THAN (37312), +PARTITION p4664 VALUES LESS THAN (37320), +PARTITION p4665 VALUES LESS THAN (37328), +PARTITION p4666 VALUES LESS THAN (37336), +PARTITION p4667 VALUES LESS THAN (37344), +PARTITION p4668 VALUES LESS THAN (37352), +PARTITION p4669 VALUES LESS THAN (37360), +PARTITION p4670 VALUES LESS THAN (37368), +PARTITION p4671 VALUES LESS THAN (37376), +PARTITION p4672 VALUES LESS THAN (37384), +PARTITION p4673 VALUES LESS THAN (37392), +PARTITION p4674 VALUES LESS THAN (37400), +PARTITION p4675 VALUES LESS THAN (37408), +PARTITION p4676 VALUES LESS THAN (37416), +PARTITION p4677 VALUES LESS THAN (37424), +PARTITION p4678 VALUES LESS THAN (37432), +PARTITION p4679 VALUES LESS THAN (37440), +PARTITION p4680 VALUES LESS THAN (37448), +PARTITION p4681 VALUES LESS THAN (37456), +PARTITION p4682 VALUES LESS THAN (37464), +PARTITION p4683 VALUES LESS THAN (37472), +PARTITION p4684 VALUES LESS THAN (37480), +PARTITION p4685 VALUES LESS THAN (37488), +PARTITION p4686 VALUES LESS THAN (37496), +PARTITION p4687 VALUES LESS THAN (37504), +PARTITION p4688 VALUES LESS THAN (37512), +PARTITION p4689 VALUES LESS THAN (37520), +PARTITION p4690 VALUES LESS THAN (37528), +PARTITION p4691 VALUES LESS THAN (37536), +PARTITION p4692 VALUES LESS THAN (37544), +PARTITION p4693 VALUES LESS THAN (37552), +PARTITION p4694 VALUES LESS THAN (37560), +PARTITION p4695 VALUES LESS THAN (37568), +PARTITION p4696 VALUES LESS THAN (37576), +PARTITION p4697 VALUES LESS THAN (37584), +PARTITION p4698 VALUES LESS THAN (37592), +PARTITION p4699 VALUES LESS THAN (37600), +PARTITION p4700 VALUES LESS THAN (37608), +PARTITION p4701 VALUES LESS THAN (37616), +PARTITION p4702 VALUES LESS THAN (37624), +PARTITION p4703 VALUES LESS THAN (37632), +PARTITION p4704 VALUES LESS THAN (37640), +PARTITION p4705 VALUES LESS THAN (37648), +PARTITION p4706 VALUES LESS THAN (37656), +PARTITION p4707 VALUES LESS THAN (37664), +PARTITION p4708 VALUES LESS THAN (37672), +PARTITION p4709 VALUES LESS THAN (37680), +PARTITION p4710 VALUES LESS THAN (37688), +PARTITION p4711 VALUES LESS THAN (37696), +PARTITION p4712 VALUES LESS THAN (37704), +PARTITION p4713 VALUES LESS THAN (37712), +PARTITION p4714 VALUES LESS THAN (37720), +PARTITION p4715 VALUES LESS THAN (37728), +PARTITION p4716 VALUES LESS THAN (37736), +PARTITION p4717 VALUES LESS THAN (37744), +PARTITION p4718 VALUES LESS THAN (37752), +PARTITION p4719 VALUES LESS THAN (37760), +PARTITION p4720 VALUES LESS THAN (37768), +PARTITION p4721 VALUES LESS THAN (37776), +PARTITION p4722 VALUES LESS THAN (37784), +PARTITION p4723 VALUES LESS THAN (37792), +PARTITION p4724 VALUES LESS THAN (37800), +PARTITION p4725 VALUES LESS THAN (37808), +PARTITION p4726 VALUES LESS THAN (37816), +PARTITION p4727 VALUES LESS THAN (37824), +PARTITION p4728 VALUES LESS THAN (37832), +PARTITION p4729 VALUES LESS THAN (37840), +PARTITION p4730 VALUES LESS THAN (37848), +PARTITION p4731 VALUES LESS THAN (37856), +PARTITION p4732 VALUES LESS THAN (37864), +PARTITION p4733 VALUES LESS THAN (37872), +PARTITION p4734 VALUES LESS THAN (37880), +PARTITION p4735 VALUES LESS THAN (37888), +PARTITION p4736 VALUES LESS THAN (37896), +PARTITION p4737 VALUES LESS THAN (37904), +PARTITION p4738 VALUES LESS THAN (37912), +PARTITION p4739 VALUES LESS THAN (37920), +PARTITION p4740 VALUES LESS THAN (37928), +PARTITION p4741 VALUES LESS THAN (37936), +PARTITION p4742 VALUES LESS THAN (37944), +PARTITION p4743 VALUES LESS THAN (37952), +PARTITION p4744 VALUES LESS THAN (37960), +PARTITION p4745 VALUES LESS THAN (37968), +PARTITION p4746 VALUES LESS THAN (37976), +PARTITION p4747 VALUES LESS THAN (37984), +PARTITION p4748 VALUES LESS THAN (37992), +PARTITION p4749 VALUES LESS THAN (38000), +PARTITION p4750 VALUES LESS THAN (38008), +PARTITION p4751 VALUES LESS THAN (38016), +PARTITION p4752 VALUES LESS THAN (38024), +PARTITION p4753 VALUES LESS THAN (38032), +PARTITION p4754 VALUES LESS THAN (38040), +PARTITION p4755 VALUES LESS THAN (38048), +PARTITION p4756 VALUES LESS THAN (38056), +PARTITION p4757 VALUES LESS THAN (38064), +PARTITION p4758 VALUES LESS THAN (38072), +PARTITION p4759 VALUES LESS THAN (38080), +PARTITION p4760 VALUES LESS THAN (38088), +PARTITION p4761 VALUES LESS THAN (38096), +PARTITION p4762 VALUES LESS THAN (38104), +PARTITION p4763 VALUES LESS THAN (38112), +PARTITION p4764 VALUES LESS THAN (38120), +PARTITION p4765 VALUES LESS THAN (38128), +PARTITION p4766 VALUES LESS THAN (38136), +PARTITION p4767 VALUES LESS THAN (38144), +PARTITION p4768 VALUES LESS THAN (38152), +PARTITION p4769 VALUES LESS THAN (38160), +PARTITION p4770 VALUES LESS THAN (38168), +PARTITION p4771 VALUES LESS THAN (38176), +PARTITION p4772 VALUES LESS THAN (38184), +PARTITION p4773 VALUES LESS THAN (38192), +PARTITION p4774 VALUES LESS THAN (38200), +PARTITION p4775 VALUES LESS THAN (38208), +PARTITION p4776 VALUES LESS THAN (38216), +PARTITION p4777 VALUES LESS THAN (38224), +PARTITION p4778 VALUES LESS THAN (38232), +PARTITION p4779 VALUES LESS THAN (38240), +PARTITION p4780 VALUES LESS THAN (38248), +PARTITION p4781 VALUES LESS THAN (38256), +PARTITION p4782 VALUES LESS THAN (38264), +PARTITION p4783 VALUES LESS THAN (38272), +PARTITION p4784 VALUES LESS THAN (38280), +PARTITION p4785 VALUES LESS THAN (38288), +PARTITION p4786 VALUES LESS THAN (38296), +PARTITION p4787 VALUES LESS THAN (38304), +PARTITION p4788 VALUES LESS THAN (38312), +PARTITION p4789 VALUES LESS THAN (38320), +PARTITION p4790 VALUES LESS THAN (38328), +PARTITION p4791 VALUES LESS THAN (38336), +PARTITION p4792 VALUES LESS THAN (38344), +PARTITION p4793 VALUES LESS THAN (38352), +PARTITION p4794 VALUES LESS THAN (38360), +PARTITION p4795 VALUES LESS THAN (38368), +PARTITION p4796 VALUES LESS THAN (38376), +PARTITION p4797 VALUES LESS THAN (38384), +PARTITION p4798 VALUES LESS THAN (38392), +PARTITION p4799 VALUES LESS THAN (38400), +PARTITION p4800 VALUES LESS THAN (38408), +PARTITION p4801 VALUES LESS THAN (38416), +PARTITION p4802 VALUES LESS THAN (38424), +PARTITION p4803 VALUES LESS THAN (38432), +PARTITION p4804 VALUES LESS THAN (38440), +PARTITION p4805 VALUES LESS THAN (38448), +PARTITION p4806 VALUES LESS THAN (38456), +PARTITION p4807 VALUES LESS THAN (38464), +PARTITION p4808 VALUES LESS THAN (38472), +PARTITION p4809 VALUES LESS THAN (38480), +PARTITION p4810 VALUES LESS THAN (38488), +PARTITION p4811 VALUES LESS THAN (38496), +PARTITION p4812 VALUES LESS THAN (38504), +PARTITION p4813 VALUES LESS THAN (38512), +PARTITION p4814 VALUES LESS THAN (38520), +PARTITION p4815 VALUES LESS THAN (38528), +PARTITION p4816 VALUES LESS THAN (38536), +PARTITION p4817 VALUES LESS THAN (38544), +PARTITION p4818 VALUES LESS THAN (38552), +PARTITION p4819 VALUES LESS THAN (38560), +PARTITION p4820 VALUES LESS THAN (38568), +PARTITION p4821 VALUES LESS THAN (38576), +PARTITION p4822 VALUES LESS THAN (38584), +PARTITION p4823 VALUES LESS THAN (38592), +PARTITION p4824 VALUES LESS THAN (38600), +PARTITION p4825 VALUES LESS THAN (38608), +PARTITION p4826 VALUES LESS THAN (38616), +PARTITION p4827 VALUES LESS THAN (38624), +PARTITION p4828 VALUES LESS THAN (38632), +PARTITION p4829 VALUES LESS THAN (38640), +PARTITION p4830 VALUES LESS THAN (38648), +PARTITION p4831 VALUES LESS THAN (38656), +PARTITION p4832 VALUES LESS THAN (38664), +PARTITION p4833 VALUES LESS THAN (38672), +PARTITION p4834 VALUES LESS THAN (38680), +PARTITION p4835 VALUES LESS THAN (38688), +PARTITION p4836 VALUES LESS THAN (38696), +PARTITION p4837 VALUES LESS THAN (38704), +PARTITION p4838 VALUES LESS THAN (38712), +PARTITION p4839 VALUES LESS THAN (38720), +PARTITION p4840 VALUES LESS THAN (38728), +PARTITION p4841 VALUES LESS THAN (38736), +PARTITION p4842 VALUES LESS THAN (38744), +PARTITION p4843 VALUES LESS THAN (38752), +PARTITION p4844 VALUES LESS THAN (38760), +PARTITION p4845 VALUES LESS THAN (38768), +PARTITION p4846 VALUES LESS THAN (38776), +PARTITION p4847 VALUES LESS THAN (38784), +PARTITION p4848 VALUES LESS THAN (38792), +PARTITION p4849 VALUES LESS THAN (38800), +PARTITION p4850 VALUES LESS THAN (38808), +PARTITION p4851 VALUES LESS THAN (38816), +PARTITION p4852 VALUES LESS THAN (38824), +PARTITION p4853 VALUES LESS THAN (38832), +PARTITION p4854 VALUES LESS THAN (38840), +PARTITION p4855 VALUES LESS THAN (38848), +PARTITION p4856 VALUES LESS THAN (38856), +PARTITION p4857 VALUES LESS THAN (38864), +PARTITION p4858 VALUES LESS THAN (38872), +PARTITION p4859 VALUES LESS THAN (38880), +PARTITION p4860 VALUES LESS THAN (38888), +PARTITION p4861 VALUES LESS THAN (38896), +PARTITION p4862 VALUES LESS THAN (38904), +PARTITION p4863 VALUES LESS THAN (38912), +PARTITION p4864 VALUES LESS THAN (38920), +PARTITION p4865 VALUES LESS THAN (38928), +PARTITION p4866 VALUES LESS THAN (38936), +PARTITION p4867 VALUES LESS THAN (38944), +PARTITION p4868 VALUES LESS THAN (38952), +PARTITION p4869 VALUES LESS THAN (38960), +PARTITION p4870 VALUES LESS THAN (38968), +PARTITION p4871 VALUES LESS THAN (38976), +PARTITION p4872 VALUES LESS THAN (38984), +PARTITION p4873 VALUES LESS THAN (38992), +PARTITION p4874 VALUES LESS THAN (39000), +PARTITION p4875 VALUES LESS THAN (39008), +PARTITION p4876 VALUES LESS THAN (39016), +PARTITION p4877 VALUES LESS THAN (39024), +PARTITION p4878 VALUES LESS THAN (39032), +PARTITION p4879 VALUES LESS THAN (39040), +PARTITION p4880 VALUES LESS THAN (39048), +PARTITION p4881 VALUES LESS THAN (39056), +PARTITION p4882 VALUES LESS THAN (39064), +PARTITION p4883 VALUES LESS THAN (39072), +PARTITION p4884 VALUES LESS THAN (39080), +PARTITION p4885 VALUES LESS THAN (39088), +PARTITION p4886 VALUES LESS THAN (39096), +PARTITION p4887 VALUES LESS THAN (39104), +PARTITION p4888 VALUES LESS THAN (39112), +PARTITION p4889 VALUES LESS THAN (39120), +PARTITION p4890 VALUES LESS THAN (39128), +PARTITION p4891 VALUES LESS THAN (39136), +PARTITION p4892 VALUES LESS THAN (39144), +PARTITION p4893 VALUES LESS THAN (39152), +PARTITION p4894 VALUES LESS THAN (39160), +PARTITION p4895 VALUES LESS THAN (39168), +PARTITION p4896 VALUES LESS THAN (39176), +PARTITION p4897 VALUES LESS THAN (39184), +PARTITION p4898 VALUES LESS THAN (39192), +PARTITION p4899 VALUES LESS THAN (39200), +PARTITION p4900 VALUES LESS THAN (39208), +PARTITION p4901 VALUES LESS THAN (39216), +PARTITION p4902 VALUES LESS THAN (39224), +PARTITION p4903 VALUES LESS THAN (39232), +PARTITION p4904 VALUES LESS THAN (39240), +PARTITION p4905 VALUES LESS THAN (39248), +PARTITION p4906 VALUES LESS THAN (39256), +PARTITION p4907 VALUES LESS THAN (39264), +PARTITION p4908 VALUES LESS THAN (39272), +PARTITION p4909 VALUES LESS THAN (39280), +PARTITION p4910 VALUES LESS THAN (39288), +PARTITION p4911 VALUES LESS THAN (39296), +PARTITION p4912 VALUES LESS THAN (39304), +PARTITION p4913 VALUES LESS THAN (39312), +PARTITION p4914 VALUES LESS THAN (39320), +PARTITION p4915 VALUES LESS THAN (39328), +PARTITION p4916 VALUES LESS THAN (39336), +PARTITION p4917 VALUES LESS THAN (39344), +PARTITION p4918 VALUES LESS THAN (39352), +PARTITION p4919 VALUES LESS THAN (39360), +PARTITION p4920 VALUES LESS THAN (39368), +PARTITION p4921 VALUES LESS THAN (39376), +PARTITION p4922 VALUES LESS THAN (39384), +PARTITION p4923 VALUES LESS THAN (39392), +PARTITION p4924 VALUES LESS THAN (39400), +PARTITION p4925 VALUES LESS THAN (39408), +PARTITION p4926 VALUES LESS THAN (39416), +PARTITION p4927 VALUES LESS THAN (39424), +PARTITION p4928 VALUES LESS THAN (39432), +PARTITION p4929 VALUES LESS THAN (39440), +PARTITION p4930 VALUES LESS THAN (39448), +PARTITION p4931 VALUES LESS THAN (39456), +PARTITION p4932 VALUES LESS THAN (39464), +PARTITION p4933 VALUES LESS THAN (39472), +PARTITION p4934 VALUES LESS THAN (39480), +PARTITION p4935 VALUES LESS THAN (39488), +PARTITION p4936 VALUES LESS THAN (39496), +PARTITION p4937 VALUES LESS THAN (39504), +PARTITION p4938 VALUES LESS THAN (39512), +PARTITION p4939 VALUES LESS THAN (39520), +PARTITION p4940 VALUES LESS THAN (39528), +PARTITION p4941 VALUES LESS THAN (39536), +PARTITION p4942 VALUES LESS THAN (39544), +PARTITION p4943 VALUES LESS THAN (39552), +PARTITION p4944 VALUES LESS THAN (39560), +PARTITION p4945 VALUES LESS THAN (39568), +PARTITION p4946 VALUES LESS THAN (39576), +PARTITION p4947 VALUES LESS THAN (39584), +PARTITION p4948 VALUES LESS THAN (39592), +PARTITION p4949 VALUES LESS THAN (39600), +PARTITION p4950 VALUES LESS THAN (39608), +PARTITION p4951 VALUES LESS THAN (39616), +PARTITION p4952 VALUES LESS THAN (39624), +PARTITION p4953 VALUES LESS THAN (39632), +PARTITION p4954 VALUES LESS THAN (39640), +PARTITION p4955 VALUES LESS THAN (39648), +PARTITION p4956 VALUES LESS THAN (39656), +PARTITION p4957 VALUES LESS THAN (39664), +PARTITION p4958 VALUES LESS THAN (39672), +PARTITION p4959 VALUES LESS THAN (39680), +PARTITION p4960 VALUES LESS THAN (39688), +PARTITION p4961 VALUES LESS THAN (39696), +PARTITION p4962 VALUES LESS THAN (39704), +PARTITION p4963 VALUES LESS THAN (39712), +PARTITION p4964 VALUES LESS THAN (39720), +PARTITION p4965 VALUES LESS THAN (39728), +PARTITION p4966 VALUES LESS THAN (39736), +PARTITION p4967 VALUES LESS THAN (39744), +PARTITION p4968 VALUES LESS THAN (39752), +PARTITION p4969 VALUES LESS THAN (39760), +PARTITION p4970 VALUES LESS THAN (39768), +PARTITION p4971 VALUES LESS THAN (39776), +PARTITION p4972 VALUES LESS THAN (39784), +PARTITION p4973 VALUES LESS THAN (39792), +PARTITION p4974 VALUES LESS THAN (39800), +PARTITION p4975 VALUES LESS THAN (39808), +PARTITION p4976 VALUES LESS THAN (39816), +PARTITION p4977 VALUES LESS THAN (39824), +PARTITION p4978 VALUES LESS THAN (39832), +PARTITION p4979 VALUES LESS THAN (39840), +PARTITION p4980 VALUES LESS THAN (39848), +PARTITION p4981 VALUES LESS THAN (39856), +PARTITION p4982 VALUES LESS THAN (39864), +PARTITION p4983 VALUES LESS THAN (39872), +PARTITION p4984 VALUES LESS THAN (39880), +PARTITION p4985 VALUES LESS THAN (39888), +PARTITION p4986 VALUES LESS THAN (39896), +PARTITION p4987 VALUES LESS THAN (39904), +PARTITION p4988 VALUES LESS THAN (39912), +PARTITION p4989 VALUES LESS THAN (39920), +PARTITION p4990 VALUES LESS THAN (39928), +PARTITION p4991 VALUES LESS THAN (39936), +PARTITION p4992 VALUES LESS THAN (39944), +PARTITION p4993 VALUES LESS THAN (39952), +PARTITION p4994 VALUES LESS THAN (39960), +PARTITION p4995 VALUES LESS THAN (39968), +PARTITION p4996 VALUES LESS THAN (39976), +PARTITION p4997 VALUES LESS THAN (39984), +PARTITION p4998 VALUES LESS THAN (39992), +PARTITION p4999 VALUES LESS THAN (40000), +PARTITION p5000 VALUES LESS THAN (40008), +PARTITION p5001 VALUES LESS THAN (40016), +PARTITION p5002 VALUES LESS THAN (40024), +PARTITION p5003 VALUES LESS THAN (40032), +PARTITION p5004 VALUES LESS THAN (40040), +PARTITION p5005 VALUES LESS THAN (40048), +PARTITION p5006 VALUES LESS THAN (40056), +PARTITION p5007 VALUES LESS THAN (40064), +PARTITION p5008 VALUES LESS THAN (40072), +PARTITION p5009 VALUES LESS THAN (40080), +PARTITION p5010 VALUES LESS THAN (40088), +PARTITION p5011 VALUES LESS THAN (40096), +PARTITION p5012 VALUES LESS THAN (40104), +PARTITION p5013 VALUES LESS THAN (40112), +PARTITION p5014 VALUES LESS THAN (40120), +PARTITION p5015 VALUES LESS THAN (40128), +PARTITION p5016 VALUES LESS THAN (40136), +PARTITION p5017 VALUES LESS THAN (40144), +PARTITION p5018 VALUES LESS THAN (40152), +PARTITION p5019 VALUES LESS THAN (40160), +PARTITION p5020 VALUES LESS THAN (40168), +PARTITION p5021 VALUES LESS THAN (40176), +PARTITION p5022 VALUES LESS THAN (40184), +PARTITION p5023 VALUES LESS THAN (40192), +PARTITION p5024 VALUES LESS THAN (40200), +PARTITION p5025 VALUES LESS THAN (40208), +PARTITION p5026 VALUES LESS THAN (40216), +PARTITION p5027 VALUES LESS THAN (40224), +PARTITION p5028 VALUES LESS THAN (40232), +PARTITION p5029 VALUES LESS THAN (40240), +PARTITION p5030 VALUES LESS THAN (40248), +PARTITION p5031 VALUES LESS THAN (40256), +PARTITION p5032 VALUES LESS THAN (40264), +PARTITION p5033 VALUES LESS THAN (40272), +PARTITION p5034 VALUES LESS THAN (40280), +PARTITION p5035 VALUES LESS THAN (40288), +PARTITION p5036 VALUES LESS THAN (40296), +PARTITION p5037 VALUES LESS THAN (40304), +PARTITION p5038 VALUES LESS THAN (40312), +PARTITION p5039 VALUES LESS THAN (40320), +PARTITION p5040 VALUES LESS THAN (40328), +PARTITION p5041 VALUES LESS THAN (40336), +PARTITION p5042 VALUES LESS THAN (40344), +PARTITION p5043 VALUES LESS THAN (40352), +PARTITION p5044 VALUES LESS THAN (40360), +PARTITION p5045 VALUES LESS THAN (40368), +PARTITION p5046 VALUES LESS THAN (40376), +PARTITION p5047 VALUES LESS THAN (40384), +PARTITION p5048 VALUES LESS THAN (40392), +PARTITION p5049 VALUES LESS THAN (40400), +PARTITION p5050 VALUES LESS THAN (40408), +PARTITION p5051 VALUES LESS THAN (40416), +PARTITION p5052 VALUES LESS THAN (40424), +PARTITION p5053 VALUES LESS THAN (40432), +PARTITION p5054 VALUES LESS THAN (40440), +PARTITION p5055 VALUES LESS THAN (40448), +PARTITION p5056 VALUES LESS THAN (40456), +PARTITION p5057 VALUES LESS THAN (40464), +PARTITION p5058 VALUES LESS THAN (40472), +PARTITION p5059 VALUES LESS THAN (40480), +PARTITION p5060 VALUES LESS THAN (40488), +PARTITION p5061 VALUES LESS THAN (40496), +PARTITION p5062 VALUES LESS THAN (40504), +PARTITION p5063 VALUES LESS THAN (40512), +PARTITION p5064 VALUES LESS THAN (40520), +PARTITION p5065 VALUES LESS THAN (40528), +PARTITION p5066 VALUES LESS THAN (40536), +PARTITION p5067 VALUES LESS THAN (40544), +PARTITION p5068 VALUES LESS THAN (40552), +PARTITION p5069 VALUES LESS THAN (40560), +PARTITION p5070 VALUES LESS THAN (40568), +PARTITION p5071 VALUES LESS THAN (40576), +PARTITION p5072 VALUES LESS THAN (40584), +PARTITION p5073 VALUES LESS THAN (40592), +PARTITION p5074 VALUES LESS THAN (40600), +PARTITION p5075 VALUES LESS THAN (40608), +PARTITION p5076 VALUES LESS THAN (40616), +PARTITION p5077 VALUES LESS THAN (40624), +PARTITION p5078 VALUES LESS THAN (40632), +PARTITION p5079 VALUES LESS THAN (40640), +PARTITION p5080 VALUES LESS THAN (40648), +PARTITION p5081 VALUES LESS THAN (40656), +PARTITION p5082 VALUES LESS THAN (40664), +PARTITION p5083 VALUES LESS THAN (40672), +PARTITION p5084 VALUES LESS THAN (40680), +PARTITION p5085 VALUES LESS THAN (40688), +PARTITION p5086 VALUES LESS THAN (40696), +PARTITION p5087 VALUES LESS THAN (40704), +PARTITION p5088 VALUES LESS THAN (40712), +PARTITION p5089 VALUES LESS THAN (40720), +PARTITION p5090 VALUES LESS THAN (40728), +PARTITION p5091 VALUES LESS THAN (40736), +PARTITION p5092 VALUES LESS THAN (40744), +PARTITION p5093 VALUES LESS THAN (40752), +PARTITION p5094 VALUES LESS THAN (40760), +PARTITION p5095 VALUES LESS THAN (40768), +PARTITION p5096 VALUES LESS THAN (40776), +PARTITION p5097 VALUES LESS THAN (40784), +PARTITION p5098 VALUES LESS THAN (40792), +PARTITION p5099 VALUES LESS THAN (40800), +PARTITION p5100 VALUES LESS THAN (40808), +PARTITION p5101 VALUES LESS THAN (40816), +PARTITION p5102 VALUES LESS THAN (40824), +PARTITION p5103 VALUES LESS THAN (40832), +PARTITION p5104 VALUES LESS THAN (40840), +PARTITION p5105 VALUES LESS THAN (40848), +PARTITION p5106 VALUES LESS THAN (40856), +PARTITION p5107 VALUES LESS THAN (40864), +PARTITION p5108 VALUES LESS THAN (40872), +PARTITION p5109 VALUES LESS THAN (40880), +PARTITION p5110 VALUES LESS THAN (40888), +PARTITION p5111 VALUES LESS THAN (40896), +PARTITION p5112 VALUES LESS THAN (40904), +PARTITION p5113 VALUES LESS THAN (40912), +PARTITION p5114 VALUES LESS THAN (40920), +PARTITION p5115 VALUES LESS THAN (40928), +PARTITION p5116 VALUES LESS THAN (40936), +PARTITION p5117 VALUES LESS THAN (40944), +PARTITION p5118 VALUES LESS THAN (40952), +PARTITION p5119 VALUES LESS THAN (40960), +PARTITION p5120 VALUES LESS THAN (40968), +PARTITION p5121 VALUES LESS THAN (40976), +PARTITION p5122 VALUES LESS THAN (40984), +PARTITION p5123 VALUES LESS THAN (40992), +PARTITION p5124 VALUES LESS THAN (41000), +PARTITION p5125 VALUES LESS THAN (41008), +PARTITION p5126 VALUES LESS THAN (41016), +PARTITION p5127 VALUES LESS THAN (41024), +PARTITION p5128 VALUES LESS THAN (41032), +PARTITION p5129 VALUES LESS THAN (41040), +PARTITION p5130 VALUES LESS THAN (41048), +PARTITION p5131 VALUES LESS THAN (41056), +PARTITION p5132 VALUES LESS THAN (41064), +PARTITION p5133 VALUES LESS THAN (41072), +PARTITION p5134 VALUES LESS THAN (41080), +PARTITION p5135 VALUES LESS THAN (41088), +PARTITION p5136 VALUES LESS THAN (41096), +PARTITION p5137 VALUES LESS THAN (41104), +PARTITION p5138 VALUES LESS THAN (41112), +PARTITION p5139 VALUES LESS THAN (41120), +PARTITION p5140 VALUES LESS THAN (41128), +PARTITION p5141 VALUES LESS THAN (41136), +PARTITION p5142 VALUES LESS THAN (41144), +PARTITION p5143 VALUES LESS THAN (41152), +PARTITION p5144 VALUES LESS THAN (41160), +PARTITION p5145 VALUES LESS THAN (41168), +PARTITION p5146 VALUES LESS THAN (41176), +PARTITION p5147 VALUES LESS THAN (41184), +PARTITION p5148 VALUES LESS THAN (41192), +PARTITION p5149 VALUES LESS THAN (41200), +PARTITION p5150 VALUES LESS THAN (41208), +PARTITION p5151 VALUES LESS THAN (41216), +PARTITION p5152 VALUES LESS THAN (41224), +PARTITION p5153 VALUES LESS THAN (41232), +PARTITION p5154 VALUES LESS THAN (41240), +PARTITION p5155 VALUES LESS THAN (41248), +PARTITION p5156 VALUES LESS THAN (41256), +PARTITION p5157 VALUES LESS THAN (41264), +PARTITION p5158 VALUES LESS THAN (41272), +PARTITION p5159 VALUES LESS THAN (41280), +PARTITION p5160 VALUES LESS THAN (41288), +PARTITION p5161 VALUES LESS THAN (41296), +PARTITION p5162 VALUES LESS THAN (41304), +PARTITION p5163 VALUES LESS THAN (41312), +PARTITION p5164 VALUES LESS THAN (41320), +PARTITION p5165 VALUES LESS THAN (41328), +PARTITION p5166 VALUES LESS THAN (41336), +PARTITION p5167 VALUES LESS THAN (41344), +PARTITION p5168 VALUES LESS THAN (41352), +PARTITION p5169 VALUES LESS THAN (41360), +PARTITION p5170 VALUES LESS THAN (41368), +PARTITION p5171 VALUES LESS THAN (41376), +PARTITION p5172 VALUES LESS THAN (41384), +PARTITION p5173 VALUES LESS THAN (41392), +PARTITION p5174 VALUES LESS THAN (41400), +PARTITION p5175 VALUES LESS THAN (41408), +PARTITION p5176 VALUES LESS THAN (41416), +PARTITION p5177 VALUES LESS THAN (41424), +PARTITION p5178 VALUES LESS THAN (41432), +PARTITION p5179 VALUES LESS THAN (41440), +PARTITION p5180 VALUES LESS THAN (41448), +PARTITION p5181 VALUES LESS THAN (41456), +PARTITION p5182 VALUES LESS THAN (41464), +PARTITION p5183 VALUES LESS THAN (41472), +PARTITION p5184 VALUES LESS THAN (41480), +PARTITION p5185 VALUES LESS THAN (41488), +PARTITION p5186 VALUES LESS THAN (41496), +PARTITION p5187 VALUES LESS THAN (41504), +PARTITION p5188 VALUES LESS THAN (41512), +PARTITION p5189 VALUES LESS THAN (41520), +PARTITION p5190 VALUES LESS THAN (41528), +PARTITION p5191 VALUES LESS THAN (41536), +PARTITION p5192 VALUES LESS THAN (41544), +PARTITION p5193 VALUES LESS THAN (41552), +PARTITION p5194 VALUES LESS THAN (41560), +PARTITION p5195 VALUES LESS THAN (41568), +PARTITION p5196 VALUES LESS THAN (41576), +PARTITION p5197 VALUES LESS THAN (41584), +PARTITION p5198 VALUES LESS THAN (41592), +PARTITION p5199 VALUES LESS THAN (41600), +PARTITION p5200 VALUES LESS THAN (41608), +PARTITION p5201 VALUES LESS THAN (41616), +PARTITION p5202 VALUES LESS THAN (41624), +PARTITION p5203 VALUES LESS THAN (41632), +PARTITION p5204 VALUES LESS THAN (41640), +PARTITION p5205 VALUES LESS THAN (41648), +PARTITION p5206 VALUES LESS THAN (41656), +PARTITION p5207 VALUES LESS THAN (41664), +PARTITION p5208 VALUES LESS THAN (41672), +PARTITION p5209 VALUES LESS THAN (41680), +PARTITION p5210 VALUES LESS THAN (41688), +PARTITION p5211 VALUES LESS THAN (41696), +PARTITION p5212 VALUES LESS THAN (41704), +PARTITION p5213 VALUES LESS THAN (41712), +PARTITION p5214 VALUES LESS THAN (41720), +PARTITION p5215 VALUES LESS THAN (41728), +PARTITION p5216 VALUES LESS THAN (41736), +PARTITION p5217 VALUES LESS THAN (41744), +PARTITION p5218 VALUES LESS THAN (41752), +PARTITION p5219 VALUES LESS THAN (41760), +PARTITION p5220 VALUES LESS THAN (41768), +PARTITION p5221 VALUES LESS THAN (41776), +PARTITION p5222 VALUES LESS THAN (41784), +PARTITION p5223 VALUES LESS THAN (41792), +PARTITION p5224 VALUES LESS THAN (41800), +PARTITION p5225 VALUES LESS THAN (41808), +PARTITION p5226 VALUES LESS THAN (41816), +PARTITION p5227 VALUES LESS THAN (41824), +PARTITION p5228 VALUES LESS THAN (41832), +PARTITION p5229 VALUES LESS THAN (41840), +PARTITION p5230 VALUES LESS THAN (41848), +PARTITION p5231 VALUES LESS THAN (41856), +PARTITION p5232 VALUES LESS THAN (41864), +PARTITION p5233 VALUES LESS THAN (41872), +PARTITION p5234 VALUES LESS THAN (41880), +PARTITION p5235 VALUES LESS THAN (41888), +PARTITION p5236 VALUES LESS THAN (41896), +PARTITION p5237 VALUES LESS THAN (41904), +PARTITION p5238 VALUES LESS THAN (41912), +PARTITION p5239 VALUES LESS THAN (41920), +PARTITION p5240 VALUES LESS THAN (41928), +PARTITION p5241 VALUES LESS THAN (41936), +PARTITION p5242 VALUES LESS THAN (41944), +PARTITION p5243 VALUES LESS THAN (41952), +PARTITION p5244 VALUES LESS THAN (41960), +PARTITION p5245 VALUES LESS THAN (41968), +PARTITION p5246 VALUES LESS THAN (41976), +PARTITION p5247 VALUES LESS THAN (41984), +PARTITION p5248 VALUES LESS THAN (41992), +PARTITION p5249 VALUES LESS THAN (42000), +PARTITION p5250 VALUES LESS THAN (42008), +PARTITION p5251 VALUES LESS THAN (42016), +PARTITION p5252 VALUES LESS THAN (42024), +PARTITION p5253 VALUES LESS THAN (42032), +PARTITION p5254 VALUES LESS THAN (42040), +PARTITION p5255 VALUES LESS THAN (42048), +PARTITION p5256 VALUES LESS THAN (42056), +PARTITION p5257 VALUES LESS THAN (42064), +PARTITION p5258 VALUES LESS THAN (42072), +PARTITION p5259 VALUES LESS THAN (42080), +PARTITION p5260 VALUES LESS THAN (42088), +PARTITION p5261 VALUES LESS THAN (42096), +PARTITION p5262 VALUES LESS THAN (42104), +PARTITION p5263 VALUES LESS THAN (42112), +PARTITION p5264 VALUES LESS THAN (42120), +PARTITION p5265 VALUES LESS THAN (42128), +PARTITION p5266 VALUES LESS THAN (42136), +PARTITION p5267 VALUES LESS THAN (42144), +PARTITION p5268 VALUES LESS THAN (42152), +PARTITION p5269 VALUES LESS THAN (42160), +PARTITION p5270 VALUES LESS THAN (42168), +PARTITION p5271 VALUES LESS THAN (42176), +PARTITION p5272 VALUES LESS THAN (42184), +PARTITION p5273 VALUES LESS THAN (42192), +PARTITION p5274 VALUES LESS THAN (42200), +PARTITION p5275 VALUES LESS THAN (42208), +PARTITION p5276 VALUES LESS THAN (42216), +PARTITION p5277 VALUES LESS THAN (42224), +PARTITION p5278 VALUES LESS THAN (42232), +PARTITION p5279 VALUES LESS THAN (42240), +PARTITION p5280 VALUES LESS THAN (42248), +PARTITION p5281 VALUES LESS THAN (42256), +PARTITION p5282 VALUES LESS THAN (42264), +PARTITION p5283 VALUES LESS THAN (42272), +PARTITION p5284 VALUES LESS THAN (42280), +PARTITION p5285 VALUES LESS THAN (42288), +PARTITION p5286 VALUES LESS THAN (42296), +PARTITION p5287 VALUES LESS THAN (42304), +PARTITION p5288 VALUES LESS THAN (42312), +PARTITION p5289 VALUES LESS THAN (42320), +PARTITION p5290 VALUES LESS THAN (42328), +PARTITION p5291 VALUES LESS THAN (42336), +PARTITION p5292 VALUES LESS THAN (42344), +PARTITION p5293 VALUES LESS THAN (42352), +PARTITION p5294 VALUES LESS THAN (42360), +PARTITION p5295 VALUES LESS THAN (42368), +PARTITION p5296 VALUES LESS THAN (42376), +PARTITION p5297 VALUES LESS THAN (42384), +PARTITION p5298 VALUES LESS THAN (42392), +PARTITION p5299 VALUES LESS THAN (42400), +PARTITION p5300 VALUES LESS THAN (42408), +PARTITION p5301 VALUES LESS THAN (42416), +PARTITION p5302 VALUES LESS THAN (42424), +PARTITION p5303 VALUES LESS THAN (42432), +PARTITION p5304 VALUES LESS THAN (42440), +PARTITION p5305 VALUES LESS THAN (42448), +PARTITION p5306 VALUES LESS THAN (42456), +PARTITION p5307 VALUES LESS THAN (42464), +PARTITION p5308 VALUES LESS THAN (42472), +PARTITION p5309 VALUES LESS THAN (42480), +PARTITION p5310 VALUES LESS THAN (42488), +PARTITION p5311 VALUES LESS THAN (42496), +PARTITION p5312 VALUES LESS THAN (42504), +PARTITION p5313 VALUES LESS THAN (42512), +PARTITION p5314 VALUES LESS THAN (42520), +PARTITION p5315 VALUES LESS THAN (42528), +PARTITION p5316 VALUES LESS THAN (42536), +PARTITION p5317 VALUES LESS THAN (42544), +PARTITION p5318 VALUES LESS THAN (42552), +PARTITION p5319 VALUES LESS THAN (42560), +PARTITION p5320 VALUES LESS THAN (42568), +PARTITION p5321 VALUES LESS THAN (42576), +PARTITION p5322 VALUES LESS THAN (42584), +PARTITION p5323 VALUES LESS THAN (42592), +PARTITION p5324 VALUES LESS THAN (42600), +PARTITION p5325 VALUES LESS THAN (42608), +PARTITION p5326 VALUES LESS THAN (42616), +PARTITION p5327 VALUES LESS THAN (42624), +PARTITION p5328 VALUES LESS THAN (42632), +PARTITION p5329 VALUES LESS THAN (42640), +PARTITION p5330 VALUES LESS THAN (42648), +PARTITION p5331 VALUES LESS THAN (42656), +PARTITION p5332 VALUES LESS THAN (42664), +PARTITION p5333 VALUES LESS THAN (42672), +PARTITION p5334 VALUES LESS THAN (42680), +PARTITION p5335 VALUES LESS THAN (42688), +PARTITION p5336 VALUES LESS THAN (42696), +PARTITION p5337 VALUES LESS THAN (42704), +PARTITION p5338 VALUES LESS THAN (42712), +PARTITION p5339 VALUES LESS THAN (42720), +PARTITION p5340 VALUES LESS THAN (42728), +PARTITION p5341 VALUES LESS THAN (42736), +PARTITION p5342 VALUES LESS THAN (42744), +PARTITION p5343 VALUES LESS THAN (42752), +PARTITION p5344 VALUES LESS THAN (42760), +PARTITION p5345 VALUES LESS THAN (42768), +PARTITION p5346 VALUES LESS THAN (42776), +PARTITION p5347 VALUES LESS THAN (42784), +PARTITION p5348 VALUES LESS THAN (42792), +PARTITION p5349 VALUES LESS THAN (42800), +PARTITION p5350 VALUES LESS THAN (42808), +PARTITION p5351 VALUES LESS THAN (42816), +PARTITION p5352 VALUES LESS THAN (42824), +PARTITION p5353 VALUES LESS THAN (42832), +PARTITION p5354 VALUES LESS THAN (42840), +PARTITION p5355 VALUES LESS THAN (42848), +PARTITION p5356 VALUES LESS THAN (42856), +PARTITION p5357 VALUES LESS THAN (42864), +PARTITION p5358 VALUES LESS THAN (42872), +PARTITION p5359 VALUES LESS THAN (42880), +PARTITION p5360 VALUES LESS THAN (42888), +PARTITION p5361 VALUES LESS THAN (42896), +PARTITION p5362 VALUES LESS THAN (42904), +PARTITION p5363 VALUES LESS THAN (42912), +PARTITION p5364 VALUES LESS THAN (42920), +PARTITION p5365 VALUES LESS THAN (42928), +PARTITION p5366 VALUES LESS THAN (42936), +PARTITION p5367 VALUES LESS THAN (42944), +PARTITION p5368 VALUES LESS THAN (42952), +PARTITION p5369 VALUES LESS THAN (42960), +PARTITION p5370 VALUES LESS THAN (42968), +PARTITION p5371 VALUES LESS THAN (42976), +PARTITION p5372 VALUES LESS THAN (42984), +PARTITION p5373 VALUES LESS THAN (42992), +PARTITION p5374 VALUES LESS THAN (43000), +PARTITION p5375 VALUES LESS THAN (43008), +PARTITION p5376 VALUES LESS THAN (43016), +PARTITION p5377 VALUES LESS THAN (43024), +PARTITION p5378 VALUES LESS THAN (43032), +PARTITION p5379 VALUES LESS THAN (43040), +PARTITION p5380 VALUES LESS THAN (43048), +PARTITION p5381 VALUES LESS THAN (43056), +PARTITION p5382 VALUES LESS THAN (43064), +PARTITION p5383 VALUES LESS THAN (43072), +PARTITION p5384 VALUES LESS THAN (43080), +PARTITION p5385 VALUES LESS THAN (43088), +PARTITION p5386 VALUES LESS THAN (43096), +PARTITION p5387 VALUES LESS THAN (43104), +PARTITION p5388 VALUES LESS THAN (43112), +PARTITION p5389 VALUES LESS THAN (43120), +PARTITION p5390 VALUES LESS THAN (43128), +PARTITION p5391 VALUES LESS THAN (43136), +PARTITION p5392 VALUES LESS THAN (43144), +PARTITION p5393 VALUES LESS THAN (43152), +PARTITION p5394 VALUES LESS THAN (43160), +PARTITION p5395 VALUES LESS THAN (43168), +PARTITION p5396 VALUES LESS THAN (43176), +PARTITION p5397 VALUES LESS THAN (43184), +PARTITION p5398 VALUES LESS THAN (43192), +PARTITION p5399 VALUES LESS THAN (43200), +PARTITION p5400 VALUES LESS THAN (43208), +PARTITION p5401 VALUES LESS THAN (43216), +PARTITION p5402 VALUES LESS THAN (43224), +PARTITION p5403 VALUES LESS THAN (43232), +PARTITION p5404 VALUES LESS THAN (43240), +PARTITION p5405 VALUES LESS THAN (43248), +PARTITION p5406 VALUES LESS THAN (43256), +PARTITION p5407 VALUES LESS THAN (43264), +PARTITION p5408 VALUES LESS THAN (43272), +PARTITION p5409 VALUES LESS THAN (43280), +PARTITION p5410 VALUES LESS THAN (43288), +PARTITION p5411 VALUES LESS THAN (43296), +PARTITION p5412 VALUES LESS THAN (43304), +PARTITION p5413 VALUES LESS THAN (43312), +PARTITION p5414 VALUES LESS THAN (43320), +PARTITION p5415 VALUES LESS THAN (43328), +PARTITION p5416 VALUES LESS THAN (43336), +PARTITION p5417 VALUES LESS THAN (43344), +PARTITION p5418 VALUES LESS THAN (43352), +PARTITION p5419 VALUES LESS THAN (43360), +PARTITION p5420 VALUES LESS THAN (43368), +PARTITION p5421 VALUES LESS THAN (43376), +PARTITION p5422 VALUES LESS THAN (43384), +PARTITION p5423 VALUES LESS THAN (43392), +PARTITION p5424 VALUES LESS THAN (43400), +PARTITION p5425 VALUES LESS THAN (43408), +PARTITION p5426 VALUES LESS THAN (43416), +PARTITION p5427 VALUES LESS THAN (43424), +PARTITION p5428 VALUES LESS THAN (43432), +PARTITION p5429 VALUES LESS THAN (43440), +PARTITION p5430 VALUES LESS THAN (43448), +PARTITION p5431 VALUES LESS THAN (43456), +PARTITION p5432 VALUES LESS THAN (43464), +PARTITION p5433 VALUES LESS THAN (43472), +PARTITION p5434 VALUES LESS THAN (43480), +PARTITION p5435 VALUES LESS THAN (43488), +PARTITION p5436 VALUES LESS THAN (43496), +PARTITION p5437 VALUES LESS THAN (43504), +PARTITION p5438 VALUES LESS THAN (43512), +PARTITION p5439 VALUES LESS THAN (43520), +PARTITION p5440 VALUES LESS THAN (43528), +PARTITION p5441 VALUES LESS THAN (43536), +PARTITION p5442 VALUES LESS THAN (43544), +PARTITION p5443 VALUES LESS THAN (43552), +PARTITION p5444 VALUES LESS THAN (43560), +PARTITION p5445 VALUES LESS THAN (43568), +PARTITION p5446 VALUES LESS THAN (43576), +PARTITION p5447 VALUES LESS THAN (43584), +PARTITION p5448 VALUES LESS THAN (43592), +PARTITION p5449 VALUES LESS THAN (43600), +PARTITION p5450 VALUES LESS THAN (43608), +PARTITION p5451 VALUES LESS THAN (43616), +PARTITION p5452 VALUES LESS THAN (43624), +PARTITION p5453 VALUES LESS THAN (43632), +PARTITION p5454 VALUES LESS THAN (43640), +PARTITION p5455 VALUES LESS THAN (43648), +PARTITION p5456 VALUES LESS THAN (43656), +PARTITION p5457 VALUES LESS THAN (43664), +PARTITION p5458 VALUES LESS THAN (43672), +PARTITION p5459 VALUES LESS THAN (43680), +PARTITION p5460 VALUES LESS THAN (43688), +PARTITION p5461 VALUES LESS THAN (43696), +PARTITION p5462 VALUES LESS THAN (43704), +PARTITION p5463 VALUES LESS THAN (43712), +PARTITION p5464 VALUES LESS THAN (43720), +PARTITION p5465 VALUES LESS THAN (43728), +PARTITION p5466 VALUES LESS THAN (43736), +PARTITION p5467 VALUES LESS THAN (43744), +PARTITION p5468 VALUES LESS THAN (43752), +PARTITION p5469 VALUES LESS THAN (43760), +PARTITION p5470 VALUES LESS THAN (43768), +PARTITION p5471 VALUES LESS THAN (43776), +PARTITION p5472 VALUES LESS THAN (43784), +PARTITION p5473 VALUES LESS THAN (43792), +PARTITION p5474 VALUES LESS THAN (43800), +PARTITION p5475 VALUES LESS THAN (43808), +PARTITION p5476 VALUES LESS THAN (43816), +PARTITION p5477 VALUES LESS THAN (43824), +PARTITION p5478 VALUES LESS THAN (43832), +PARTITION p5479 VALUES LESS THAN (43840), +PARTITION p5480 VALUES LESS THAN (43848), +PARTITION p5481 VALUES LESS THAN (43856), +PARTITION p5482 VALUES LESS THAN (43864), +PARTITION p5483 VALUES LESS THAN (43872), +PARTITION p5484 VALUES LESS THAN (43880), +PARTITION p5485 VALUES LESS THAN (43888), +PARTITION p5486 VALUES LESS THAN (43896), +PARTITION p5487 VALUES LESS THAN (43904), +PARTITION p5488 VALUES LESS THAN (43912), +PARTITION p5489 VALUES LESS THAN (43920), +PARTITION p5490 VALUES LESS THAN (43928), +PARTITION p5491 VALUES LESS THAN (43936), +PARTITION p5492 VALUES LESS THAN (43944), +PARTITION p5493 VALUES LESS THAN (43952), +PARTITION p5494 VALUES LESS THAN (43960), +PARTITION p5495 VALUES LESS THAN (43968), +PARTITION p5496 VALUES LESS THAN (43976), +PARTITION p5497 VALUES LESS THAN (43984), +PARTITION p5498 VALUES LESS THAN (43992), +PARTITION p5499 VALUES LESS THAN (44000), +PARTITION p5500 VALUES LESS THAN (44008), +PARTITION p5501 VALUES LESS THAN (44016), +PARTITION p5502 VALUES LESS THAN (44024), +PARTITION p5503 VALUES LESS THAN (44032), +PARTITION p5504 VALUES LESS THAN (44040), +PARTITION p5505 VALUES LESS THAN (44048), +PARTITION p5506 VALUES LESS THAN (44056), +PARTITION p5507 VALUES LESS THAN (44064), +PARTITION p5508 VALUES LESS THAN (44072), +PARTITION p5509 VALUES LESS THAN (44080), +PARTITION p5510 VALUES LESS THAN (44088), +PARTITION p5511 VALUES LESS THAN (44096), +PARTITION p5512 VALUES LESS THAN (44104), +PARTITION p5513 VALUES LESS THAN (44112), +PARTITION p5514 VALUES LESS THAN (44120), +PARTITION p5515 VALUES LESS THAN (44128), +PARTITION p5516 VALUES LESS THAN (44136), +PARTITION p5517 VALUES LESS THAN (44144), +PARTITION p5518 VALUES LESS THAN (44152), +PARTITION p5519 VALUES LESS THAN (44160), +PARTITION p5520 VALUES LESS THAN (44168), +PARTITION p5521 VALUES LESS THAN (44176), +PARTITION p5522 VALUES LESS THAN (44184), +PARTITION p5523 VALUES LESS THAN (44192), +PARTITION p5524 VALUES LESS THAN (44200), +PARTITION p5525 VALUES LESS THAN (44208), +PARTITION p5526 VALUES LESS THAN (44216), +PARTITION p5527 VALUES LESS THAN (44224), +PARTITION p5528 VALUES LESS THAN (44232), +PARTITION p5529 VALUES LESS THAN (44240), +PARTITION p5530 VALUES LESS THAN (44248), +PARTITION p5531 VALUES LESS THAN (44256), +PARTITION p5532 VALUES LESS THAN (44264), +PARTITION p5533 VALUES LESS THAN (44272), +PARTITION p5534 VALUES LESS THAN (44280), +PARTITION p5535 VALUES LESS THAN (44288), +PARTITION p5536 VALUES LESS THAN (44296), +PARTITION p5537 VALUES LESS THAN (44304), +PARTITION p5538 VALUES LESS THAN (44312), +PARTITION p5539 VALUES LESS THAN (44320), +PARTITION p5540 VALUES LESS THAN (44328), +PARTITION p5541 VALUES LESS THAN (44336), +PARTITION p5542 VALUES LESS THAN (44344), +PARTITION p5543 VALUES LESS THAN (44352), +PARTITION p5544 VALUES LESS THAN (44360), +PARTITION p5545 VALUES LESS THAN (44368), +PARTITION p5546 VALUES LESS THAN (44376), +PARTITION p5547 VALUES LESS THAN (44384), +PARTITION p5548 VALUES LESS THAN (44392), +PARTITION p5549 VALUES LESS THAN (44400), +PARTITION p5550 VALUES LESS THAN (44408), +PARTITION p5551 VALUES LESS THAN (44416), +PARTITION p5552 VALUES LESS THAN (44424), +PARTITION p5553 VALUES LESS THAN (44432), +PARTITION p5554 VALUES LESS THAN (44440), +PARTITION p5555 VALUES LESS THAN (44448), +PARTITION p5556 VALUES LESS THAN (44456), +PARTITION p5557 VALUES LESS THAN (44464), +PARTITION p5558 VALUES LESS THAN (44472), +PARTITION p5559 VALUES LESS THAN (44480), +PARTITION p5560 VALUES LESS THAN (44488), +PARTITION p5561 VALUES LESS THAN (44496), +PARTITION p5562 VALUES LESS THAN (44504), +PARTITION p5563 VALUES LESS THAN (44512), +PARTITION p5564 VALUES LESS THAN (44520), +PARTITION p5565 VALUES LESS THAN (44528), +PARTITION p5566 VALUES LESS THAN (44536), +PARTITION p5567 VALUES LESS THAN (44544), +PARTITION p5568 VALUES LESS THAN (44552), +PARTITION p5569 VALUES LESS THAN (44560), +PARTITION p5570 VALUES LESS THAN (44568), +PARTITION p5571 VALUES LESS THAN (44576), +PARTITION p5572 VALUES LESS THAN (44584), +PARTITION p5573 VALUES LESS THAN (44592), +PARTITION p5574 VALUES LESS THAN (44600), +PARTITION p5575 VALUES LESS THAN (44608), +PARTITION p5576 VALUES LESS THAN (44616), +PARTITION p5577 VALUES LESS THAN (44624), +PARTITION p5578 VALUES LESS THAN (44632), +PARTITION p5579 VALUES LESS THAN (44640), +PARTITION p5580 VALUES LESS THAN (44648), +PARTITION p5581 VALUES LESS THAN (44656), +PARTITION p5582 VALUES LESS THAN (44664), +PARTITION p5583 VALUES LESS THAN (44672), +PARTITION p5584 VALUES LESS THAN (44680), +PARTITION p5585 VALUES LESS THAN (44688), +PARTITION p5586 VALUES LESS THAN (44696), +PARTITION p5587 VALUES LESS THAN (44704), +PARTITION p5588 VALUES LESS THAN (44712), +PARTITION p5589 VALUES LESS THAN (44720), +PARTITION p5590 VALUES LESS THAN (44728), +PARTITION p5591 VALUES LESS THAN (44736), +PARTITION p5592 VALUES LESS THAN (44744), +PARTITION p5593 VALUES LESS THAN (44752), +PARTITION p5594 VALUES LESS THAN (44760), +PARTITION p5595 VALUES LESS THAN (44768), +PARTITION p5596 VALUES LESS THAN (44776), +PARTITION p5597 VALUES LESS THAN (44784), +PARTITION p5598 VALUES LESS THAN (44792), +PARTITION p5599 VALUES LESS THAN (44800), +PARTITION p5600 VALUES LESS THAN (44808), +PARTITION p5601 VALUES LESS THAN (44816), +PARTITION p5602 VALUES LESS THAN (44824), +PARTITION p5603 VALUES LESS THAN (44832), +PARTITION p5604 VALUES LESS THAN (44840), +PARTITION p5605 VALUES LESS THAN (44848), +PARTITION p5606 VALUES LESS THAN (44856), +PARTITION p5607 VALUES LESS THAN (44864), +PARTITION p5608 VALUES LESS THAN (44872), +PARTITION p5609 VALUES LESS THAN (44880), +PARTITION p5610 VALUES LESS THAN (44888), +PARTITION p5611 VALUES LESS THAN (44896), +PARTITION p5612 VALUES LESS THAN (44904), +PARTITION p5613 VALUES LESS THAN (44912), +PARTITION p5614 VALUES LESS THAN (44920), +PARTITION p5615 VALUES LESS THAN (44928), +PARTITION p5616 VALUES LESS THAN (44936), +PARTITION p5617 VALUES LESS THAN (44944), +PARTITION p5618 VALUES LESS THAN (44952), +PARTITION p5619 VALUES LESS THAN (44960), +PARTITION p5620 VALUES LESS THAN (44968), +PARTITION p5621 VALUES LESS THAN (44976), +PARTITION p5622 VALUES LESS THAN (44984), +PARTITION p5623 VALUES LESS THAN (44992), +PARTITION p5624 VALUES LESS THAN (45000), +PARTITION p5625 VALUES LESS THAN (45008), +PARTITION p5626 VALUES LESS THAN (45016), +PARTITION p5627 VALUES LESS THAN (45024), +PARTITION p5628 VALUES LESS THAN (45032), +PARTITION p5629 VALUES LESS THAN (45040), +PARTITION p5630 VALUES LESS THAN (45048), +PARTITION p5631 VALUES LESS THAN (45056), +PARTITION p5632 VALUES LESS THAN (45064), +PARTITION p5633 VALUES LESS THAN (45072), +PARTITION p5634 VALUES LESS THAN (45080), +PARTITION p5635 VALUES LESS THAN (45088), +PARTITION p5636 VALUES LESS THAN (45096), +PARTITION p5637 VALUES LESS THAN (45104), +PARTITION p5638 VALUES LESS THAN (45112), +PARTITION p5639 VALUES LESS THAN (45120), +PARTITION p5640 VALUES LESS THAN (45128), +PARTITION p5641 VALUES LESS THAN (45136), +PARTITION p5642 VALUES LESS THAN (45144), +PARTITION p5643 VALUES LESS THAN (45152), +PARTITION p5644 VALUES LESS THAN (45160), +PARTITION p5645 VALUES LESS THAN (45168), +PARTITION p5646 VALUES LESS THAN (45176), +PARTITION p5647 VALUES LESS THAN (45184), +PARTITION p5648 VALUES LESS THAN (45192), +PARTITION p5649 VALUES LESS THAN (45200), +PARTITION p5650 VALUES LESS THAN (45208), +PARTITION p5651 VALUES LESS THAN (45216), +PARTITION p5652 VALUES LESS THAN (45224), +PARTITION p5653 VALUES LESS THAN (45232), +PARTITION p5654 VALUES LESS THAN (45240), +PARTITION p5655 VALUES LESS THAN (45248), +PARTITION p5656 VALUES LESS THAN (45256), +PARTITION p5657 VALUES LESS THAN (45264), +PARTITION p5658 VALUES LESS THAN (45272), +PARTITION p5659 VALUES LESS THAN (45280), +PARTITION p5660 VALUES LESS THAN (45288), +PARTITION p5661 VALUES LESS THAN (45296), +PARTITION p5662 VALUES LESS THAN (45304), +PARTITION p5663 VALUES LESS THAN (45312), +PARTITION p5664 VALUES LESS THAN (45320), +PARTITION p5665 VALUES LESS THAN (45328), +PARTITION p5666 VALUES LESS THAN (45336), +PARTITION p5667 VALUES LESS THAN (45344), +PARTITION p5668 VALUES LESS THAN (45352), +PARTITION p5669 VALUES LESS THAN (45360), +PARTITION p5670 VALUES LESS THAN (45368), +PARTITION p5671 VALUES LESS THAN (45376), +PARTITION p5672 VALUES LESS THAN (45384), +PARTITION p5673 VALUES LESS THAN (45392), +PARTITION p5674 VALUES LESS THAN (45400), +PARTITION p5675 VALUES LESS THAN (45408), +PARTITION p5676 VALUES LESS THAN (45416), +PARTITION p5677 VALUES LESS THAN (45424), +PARTITION p5678 VALUES LESS THAN (45432), +PARTITION p5679 VALUES LESS THAN (45440), +PARTITION p5680 VALUES LESS THAN (45448), +PARTITION p5681 VALUES LESS THAN (45456), +PARTITION p5682 VALUES LESS THAN (45464), +PARTITION p5683 VALUES LESS THAN (45472), +PARTITION p5684 VALUES LESS THAN (45480), +PARTITION p5685 VALUES LESS THAN (45488), +PARTITION p5686 VALUES LESS THAN (45496), +PARTITION p5687 VALUES LESS THAN (45504), +PARTITION p5688 VALUES LESS THAN (45512), +PARTITION p5689 VALUES LESS THAN (45520), +PARTITION p5690 VALUES LESS THAN (45528), +PARTITION p5691 VALUES LESS THAN (45536), +PARTITION p5692 VALUES LESS THAN (45544), +PARTITION p5693 VALUES LESS THAN (45552), +PARTITION p5694 VALUES LESS THAN (45560), +PARTITION p5695 VALUES LESS THAN (45568), +PARTITION p5696 VALUES LESS THAN (45576), +PARTITION p5697 VALUES LESS THAN (45584), +PARTITION p5698 VALUES LESS THAN (45592), +PARTITION p5699 VALUES LESS THAN (45600), +PARTITION p5700 VALUES LESS THAN (45608), +PARTITION p5701 VALUES LESS THAN (45616), +PARTITION p5702 VALUES LESS THAN (45624), +PARTITION p5703 VALUES LESS THAN (45632), +PARTITION p5704 VALUES LESS THAN (45640), +PARTITION p5705 VALUES LESS THAN (45648), +PARTITION p5706 VALUES LESS THAN (45656), +PARTITION p5707 VALUES LESS THAN (45664), +PARTITION p5708 VALUES LESS THAN (45672), +PARTITION p5709 VALUES LESS THAN (45680), +PARTITION p5710 VALUES LESS THAN (45688), +PARTITION p5711 VALUES LESS THAN (45696), +PARTITION p5712 VALUES LESS THAN (45704), +PARTITION p5713 VALUES LESS THAN (45712), +PARTITION p5714 VALUES LESS THAN (45720), +PARTITION p5715 VALUES LESS THAN (45728), +PARTITION p5716 VALUES LESS THAN (45736), +PARTITION p5717 VALUES LESS THAN (45744), +PARTITION p5718 VALUES LESS THAN (45752), +PARTITION p5719 VALUES LESS THAN (45760), +PARTITION p5720 VALUES LESS THAN (45768), +PARTITION p5721 VALUES LESS THAN (45776), +PARTITION p5722 VALUES LESS THAN (45784), +PARTITION p5723 VALUES LESS THAN (45792), +PARTITION p5724 VALUES LESS THAN (45800), +PARTITION p5725 VALUES LESS THAN (45808), +PARTITION p5726 VALUES LESS THAN (45816), +PARTITION p5727 VALUES LESS THAN (45824), +PARTITION p5728 VALUES LESS THAN (45832), +PARTITION p5729 VALUES LESS THAN (45840), +PARTITION p5730 VALUES LESS THAN (45848), +PARTITION p5731 VALUES LESS THAN (45856), +PARTITION p5732 VALUES LESS THAN (45864), +PARTITION p5733 VALUES LESS THAN (45872), +PARTITION p5734 VALUES LESS THAN (45880), +PARTITION p5735 VALUES LESS THAN (45888), +PARTITION p5736 VALUES LESS THAN (45896), +PARTITION p5737 VALUES LESS THAN (45904), +PARTITION p5738 VALUES LESS THAN (45912), +PARTITION p5739 VALUES LESS THAN (45920), +PARTITION p5740 VALUES LESS THAN (45928), +PARTITION p5741 VALUES LESS THAN (45936), +PARTITION p5742 VALUES LESS THAN (45944), +PARTITION p5743 VALUES LESS THAN (45952), +PARTITION p5744 VALUES LESS THAN (45960), +PARTITION p5745 VALUES LESS THAN (45968), +PARTITION p5746 VALUES LESS THAN (45976), +PARTITION p5747 VALUES LESS THAN (45984), +PARTITION p5748 VALUES LESS THAN (45992), +PARTITION p5749 VALUES LESS THAN (46000), +PARTITION p5750 VALUES LESS THAN (46008), +PARTITION p5751 VALUES LESS THAN (46016), +PARTITION p5752 VALUES LESS THAN (46024), +PARTITION p5753 VALUES LESS THAN (46032), +PARTITION p5754 VALUES LESS THAN (46040), +PARTITION p5755 VALUES LESS THAN (46048), +PARTITION p5756 VALUES LESS THAN (46056), +PARTITION p5757 VALUES LESS THAN (46064), +PARTITION p5758 VALUES LESS THAN (46072), +PARTITION p5759 VALUES LESS THAN (46080), +PARTITION p5760 VALUES LESS THAN (46088), +PARTITION p5761 VALUES LESS THAN (46096), +PARTITION p5762 VALUES LESS THAN (46104), +PARTITION p5763 VALUES LESS THAN (46112), +PARTITION p5764 VALUES LESS THAN (46120), +PARTITION p5765 VALUES LESS THAN (46128), +PARTITION p5766 VALUES LESS THAN (46136), +PARTITION p5767 VALUES LESS THAN (46144), +PARTITION p5768 VALUES LESS THAN (46152), +PARTITION p5769 VALUES LESS THAN (46160), +PARTITION p5770 VALUES LESS THAN (46168), +PARTITION p5771 VALUES LESS THAN (46176), +PARTITION p5772 VALUES LESS THAN (46184), +PARTITION p5773 VALUES LESS THAN (46192), +PARTITION p5774 VALUES LESS THAN (46200), +PARTITION p5775 VALUES LESS THAN (46208), +PARTITION p5776 VALUES LESS THAN (46216), +PARTITION p5777 VALUES LESS THAN (46224), +PARTITION p5778 VALUES LESS THAN (46232), +PARTITION p5779 VALUES LESS THAN (46240), +PARTITION p5780 VALUES LESS THAN (46248), +PARTITION p5781 VALUES LESS THAN (46256), +PARTITION p5782 VALUES LESS THAN (46264), +PARTITION p5783 VALUES LESS THAN (46272), +PARTITION p5784 VALUES LESS THAN (46280), +PARTITION p5785 VALUES LESS THAN (46288), +PARTITION p5786 VALUES LESS THAN (46296), +PARTITION p5787 VALUES LESS THAN (46304), +PARTITION p5788 VALUES LESS THAN (46312), +PARTITION p5789 VALUES LESS THAN (46320), +PARTITION p5790 VALUES LESS THAN (46328), +PARTITION p5791 VALUES LESS THAN (46336), +PARTITION p5792 VALUES LESS THAN (46344), +PARTITION p5793 VALUES LESS THAN (46352), +PARTITION p5794 VALUES LESS THAN (46360), +PARTITION p5795 VALUES LESS THAN (46368), +PARTITION p5796 VALUES LESS THAN (46376), +PARTITION p5797 VALUES LESS THAN (46384), +PARTITION p5798 VALUES LESS THAN (46392), +PARTITION p5799 VALUES LESS THAN (46400), +PARTITION p5800 VALUES LESS THAN (46408), +PARTITION p5801 VALUES LESS THAN (46416), +PARTITION p5802 VALUES LESS THAN (46424), +PARTITION p5803 VALUES LESS THAN (46432), +PARTITION p5804 VALUES LESS THAN (46440), +PARTITION p5805 VALUES LESS THAN (46448), +PARTITION p5806 VALUES LESS THAN (46456), +PARTITION p5807 VALUES LESS THAN (46464), +PARTITION p5808 VALUES LESS THAN (46472), +PARTITION p5809 VALUES LESS THAN (46480), +PARTITION p5810 VALUES LESS THAN (46488), +PARTITION p5811 VALUES LESS THAN (46496), +PARTITION p5812 VALUES LESS THAN (46504), +PARTITION p5813 VALUES LESS THAN (46512), +PARTITION p5814 VALUES LESS THAN (46520), +PARTITION p5815 VALUES LESS THAN (46528), +PARTITION p5816 VALUES LESS THAN (46536), +PARTITION p5817 VALUES LESS THAN (46544), +PARTITION p5818 VALUES LESS THAN (46552), +PARTITION p5819 VALUES LESS THAN (46560), +PARTITION p5820 VALUES LESS THAN (46568), +PARTITION p5821 VALUES LESS THAN (46576), +PARTITION p5822 VALUES LESS THAN (46584), +PARTITION p5823 VALUES LESS THAN (46592), +PARTITION p5824 VALUES LESS THAN (46600), +PARTITION p5825 VALUES LESS THAN (46608), +PARTITION p5826 VALUES LESS THAN (46616), +PARTITION p5827 VALUES LESS THAN (46624), +PARTITION p5828 VALUES LESS THAN (46632), +PARTITION p5829 VALUES LESS THAN (46640), +PARTITION p5830 VALUES LESS THAN (46648), +PARTITION p5831 VALUES LESS THAN (46656), +PARTITION p5832 VALUES LESS THAN (46664), +PARTITION p5833 VALUES LESS THAN (46672), +PARTITION p5834 VALUES LESS THAN (46680), +PARTITION p5835 VALUES LESS THAN (46688), +PARTITION p5836 VALUES LESS THAN (46696), +PARTITION p5837 VALUES LESS THAN (46704), +PARTITION p5838 VALUES LESS THAN (46712), +PARTITION p5839 VALUES LESS THAN (46720), +PARTITION p5840 VALUES LESS THAN (46728), +PARTITION p5841 VALUES LESS THAN (46736), +PARTITION p5842 VALUES LESS THAN (46744), +PARTITION p5843 VALUES LESS THAN (46752), +PARTITION p5844 VALUES LESS THAN (46760), +PARTITION p5845 VALUES LESS THAN (46768), +PARTITION p5846 VALUES LESS THAN (46776), +PARTITION p5847 VALUES LESS THAN (46784), +PARTITION p5848 VALUES LESS THAN (46792), +PARTITION p5849 VALUES LESS THAN (46800), +PARTITION p5850 VALUES LESS THAN (46808), +PARTITION p5851 VALUES LESS THAN (46816), +PARTITION p5852 VALUES LESS THAN (46824), +PARTITION p5853 VALUES LESS THAN (46832), +PARTITION p5854 VALUES LESS THAN (46840), +PARTITION p5855 VALUES LESS THAN (46848), +PARTITION p5856 VALUES LESS THAN (46856), +PARTITION p5857 VALUES LESS THAN (46864), +PARTITION p5858 VALUES LESS THAN (46872), +PARTITION p5859 VALUES LESS THAN (46880), +PARTITION p5860 VALUES LESS THAN (46888), +PARTITION p5861 VALUES LESS THAN (46896), +PARTITION p5862 VALUES LESS THAN (46904), +PARTITION p5863 VALUES LESS THAN (46912), +PARTITION p5864 VALUES LESS THAN (46920), +PARTITION p5865 VALUES LESS THAN (46928), +PARTITION p5866 VALUES LESS THAN (46936), +PARTITION p5867 VALUES LESS THAN (46944), +PARTITION p5868 VALUES LESS THAN (46952), +PARTITION p5869 VALUES LESS THAN (46960), +PARTITION p5870 VALUES LESS THAN (46968), +PARTITION p5871 VALUES LESS THAN (46976), +PARTITION p5872 VALUES LESS THAN (46984), +PARTITION p5873 VALUES LESS THAN (46992), +PARTITION p5874 VALUES LESS THAN (47000), +PARTITION p5875 VALUES LESS THAN (47008), +PARTITION p5876 VALUES LESS THAN (47016), +PARTITION p5877 VALUES LESS THAN (47024), +PARTITION p5878 VALUES LESS THAN (47032), +PARTITION p5879 VALUES LESS THAN (47040), +PARTITION p5880 VALUES LESS THAN (47048), +PARTITION p5881 VALUES LESS THAN (47056), +PARTITION p5882 VALUES LESS THAN (47064), +PARTITION p5883 VALUES LESS THAN (47072), +PARTITION p5884 VALUES LESS THAN (47080), +PARTITION p5885 VALUES LESS THAN (47088), +PARTITION p5886 VALUES LESS THAN (47096), +PARTITION p5887 VALUES LESS THAN (47104), +PARTITION p5888 VALUES LESS THAN (47112), +PARTITION p5889 VALUES LESS THAN (47120), +PARTITION p5890 VALUES LESS THAN (47128), +PARTITION p5891 VALUES LESS THAN (47136), +PARTITION p5892 VALUES LESS THAN (47144), +PARTITION p5893 VALUES LESS THAN (47152), +PARTITION p5894 VALUES LESS THAN (47160), +PARTITION p5895 VALUES LESS THAN (47168), +PARTITION p5896 VALUES LESS THAN (47176), +PARTITION p5897 VALUES LESS THAN (47184), +PARTITION p5898 VALUES LESS THAN (47192), +PARTITION p5899 VALUES LESS THAN (47200), +PARTITION p5900 VALUES LESS THAN (47208), +PARTITION p5901 VALUES LESS THAN (47216), +PARTITION p5902 VALUES LESS THAN (47224), +PARTITION p5903 VALUES LESS THAN (47232), +PARTITION p5904 VALUES LESS THAN (47240), +PARTITION p5905 VALUES LESS THAN (47248), +PARTITION p5906 VALUES LESS THAN (47256), +PARTITION p5907 VALUES LESS THAN (47264), +PARTITION p5908 VALUES LESS THAN (47272), +PARTITION p5909 VALUES LESS THAN (47280), +PARTITION p5910 VALUES LESS THAN (47288), +PARTITION p5911 VALUES LESS THAN (47296), +PARTITION p5912 VALUES LESS THAN (47304), +PARTITION p5913 VALUES LESS THAN (47312), +PARTITION p5914 VALUES LESS THAN (47320), +PARTITION p5915 VALUES LESS THAN (47328), +PARTITION p5916 VALUES LESS THAN (47336), +PARTITION p5917 VALUES LESS THAN (47344), +PARTITION p5918 VALUES LESS THAN (47352), +PARTITION p5919 VALUES LESS THAN (47360), +PARTITION p5920 VALUES LESS THAN (47368), +PARTITION p5921 VALUES LESS THAN (47376), +PARTITION p5922 VALUES LESS THAN (47384), +PARTITION p5923 VALUES LESS THAN (47392), +PARTITION p5924 VALUES LESS THAN (47400), +PARTITION p5925 VALUES LESS THAN (47408), +PARTITION p5926 VALUES LESS THAN (47416), +PARTITION p5927 VALUES LESS THAN (47424), +PARTITION p5928 VALUES LESS THAN (47432), +PARTITION p5929 VALUES LESS THAN (47440), +PARTITION p5930 VALUES LESS THAN (47448), +PARTITION p5931 VALUES LESS THAN (47456), +PARTITION p5932 VALUES LESS THAN (47464), +PARTITION p5933 VALUES LESS THAN (47472), +PARTITION p5934 VALUES LESS THAN (47480), +PARTITION p5935 VALUES LESS THAN (47488), +PARTITION p5936 VALUES LESS THAN (47496), +PARTITION p5937 VALUES LESS THAN (47504), +PARTITION p5938 VALUES LESS THAN (47512), +PARTITION p5939 VALUES LESS THAN (47520), +PARTITION p5940 VALUES LESS THAN (47528), +PARTITION p5941 VALUES LESS THAN (47536), +PARTITION p5942 VALUES LESS THAN (47544), +PARTITION p5943 VALUES LESS THAN (47552), +PARTITION p5944 VALUES LESS THAN (47560), +PARTITION p5945 VALUES LESS THAN (47568), +PARTITION p5946 VALUES LESS THAN (47576), +PARTITION p5947 VALUES LESS THAN (47584), +PARTITION p5948 VALUES LESS THAN (47592), +PARTITION p5949 VALUES LESS THAN (47600), +PARTITION p5950 VALUES LESS THAN (47608), +PARTITION p5951 VALUES LESS THAN (47616), +PARTITION p5952 VALUES LESS THAN (47624), +PARTITION p5953 VALUES LESS THAN (47632), +PARTITION p5954 VALUES LESS THAN (47640), +PARTITION p5955 VALUES LESS THAN (47648), +PARTITION p5956 VALUES LESS THAN (47656), +PARTITION p5957 VALUES LESS THAN (47664), +PARTITION p5958 VALUES LESS THAN (47672), +PARTITION p5959 VALUES LESS THAN (47680), +PARTITION p5960 VALUES LESS THAN (47688), +PARTITION p5961 VALUES LESS THAN (47696), +PARTITION p5962 VALUES LESS THAN (47704), +PARTITION p5963 VALUES LESS THAN (47712), +PARTITION p5964 VALUES LESS THAN (47720), +PARTITION p5965 VALUES LESS THAN (47728), +PARTITION p5966 VALUES LESS THAN (47736), +PARTITION p5967 VALUES LESS THAN (47744), +PARTITION p5968 VALUES LESS THAN (47752), +PARTITION p5969 VALUES LESS THAN (47760), +PARTITION p5970 VALUES LESS THAN (47768), +PARTITION p5971 VALUES LESS THAN (47776), +PARTITION p5972 VALUES LESS THAN (47784), +PARTITION p5973 VALUES LESS THAN (47792), +PARTITION p5974 VALUES LESS THAN (47800), +PARTITION p5975 VALUES LESS THAN (47808), +PARTITION p5976 VALUES LESS THAN (47816), +PARTITION p5977 VALUES LESS THAN (47824), +PARTITION p5978 VALUES LESS THAN (47832), +PARTITION p5979 VALUES LESS THAN (47840), +PARTITION p5980 VALUES LESS THAN (47848), +PARTITION p5981 VALUES LESS THAN (47856), +PARTITION p5982 VALUES LESS THAN (47864), +PARTITION p5983 VALUES LESS THAN (47872), +PARTITION p5984 VALUES LESS THAN (47880), +PARTITION p5985 VALUES LESS THAN (47888), +PARTITION p5986 VALUES LESS THAN (47896), +PARTITION p5987 VALUES LESS THAN (47904), +PARTITION p5988 VALUES LESS THAN (47912), +PARTITION p5989 VALUES LESS THAN (47920), +PARTITION p5990 VALUES LESS THAN (47928), +PARTITION p5991 VALUES LESS THAN (47936), +PARTITION p5992 VALUES LESS THAN (47944), +PARTITION p5993 VALUES LESS THAN (47952), +PARTITION p5994 VALUES LESS THAN (47960), +PARTITION p5995 VALUES LESS THAN (47968), +PARTITION p5996 VALUES LESS THAN (47976), +PARTITION p5997 VALUES LESS THAN (47984), +PARTITION p5998 VALUES LESS THAN (47992), +PARTITION p5999 VALUES LESS THAN (48000), +PARTITION p6000 VALUES LESS THAN (48008), +PARTITION p6001 VALUES LESS THAN (48016), +PARTITION p6002 VALUES LESS THAN (48024), +PARTITION p6003 VALUES LESS THAN (48032), +PARTITION p6004 VALUES LESS THAN (48040), +PARTITION p6005 VALUES LESS THAN (48048), +PARTITION p6006 VALUES LESS THAN (48056), +PARTITION p6007 VALUES LESS THAN (48064), +PARTITION p6008 VALUES LESS THAN (48072), +PARTITION p6009 VALUES LESS THAN (48080), +PARTITION p6010 VALUES LESS THAN (48088), +PARTITION p6011 VALUES LESS THAN (48096), +PARTITION p6012 VALUES LESS THAN (48104), +PARTITION p6013 VALUES LESS THAN (48112), +PARTITION p6014 VALUES LESS THAN (48120), +PARTITION p6015 VALUES LESS THAN (48128), +PARTITION p6016 VALUES LESS THAN (48136), +PARTITION p6017 VALUES LESS THAN (48144), +PARTITION p6018 VALUES LESS THAN (48152), +PARTITION p6019 VALUES LESS THAN (48160), +PARTITION p6020 VALUES LESS THAN (48168), +PARTITION p6021 VALUES LESS THAN (48176), +PARTITION p6022 VALUES LESS THAN (48184), +PARTITION p6023 VALUES LESS THAN (48192), +PARTITION p6024 VALUES LESS THAN (48200), +PARTITION p6025 VALUES LESS THAN (48208), +PARTITION p6026 VALUES LESS THAN (48216), +PARTITION p6027 VALUES LESS THAN (48224), +PARTITION p6028 VALUES LESS THAN (48232), +PARTITION p6029 VALUES LESS THAN (48240), +PARTITION p6030 VALUES LESS THAN (48248), +PARTITION p6031 VALUES LESS THAN (48256), +PARTITION p6032 VALUES LESS THAN (48264), +PARTITION p6033 VALUES LESS THAN (48272), +PARTITION p6034 VALUES LESS THAN (48280), +PARTITION p6035 VALUES LESS THAN (48288), +PARTITION p6036 VALUES LESS THAN (48296), +PARTITION p6037 VALUES LESS THAN (48304), +PARTITION p6038 VALUES LESS THAN (48312), +PARTITION p6039 VALUES LESS THAN (48320), +PARTITION p6040 VALUES LESS THAN (48328), +PARTITION p6041 VALUES LESS THAN (48336), +PARTITION p6042 VALUES LESS THAN (48344), +PARTITION p6043 VALUES LESS THAN (48352), +PARTITION p6044 VALUES LESS THAN (48360), +PARTITION p6045 VALUES LESS THAN (48368), +PARTITION p6046 VALUES LESS THAN (48376), +PARTITION p6047 VALUES LESS THAN (48384), +PARTITION p6048 VALUES LESS THAN (48392), +PARTITION p6049 VALUES LESS THAN (48400), +PARTITION p6050 VALUES LESS THAN (48408), +PARTITION p6051 VALUES LESS THAN (48416), +PARTITION p6052 VALUES LESS THAN (48424), +PARTITION p6053 VALUES LESS THAN (48432), +PARTITION p6054 VALUES LESS THAN (48440), +PARTITION p6055 VALUES LESS THAN (48448), +PARTITION p6056 VALUES LESS THAN (48456), +PARTITION p6057 VALUES LESS THAN (48464), +PARTITION p6058 VALUES LESS THAN (48472), +PARTITION p6059 VALUES LESS THAN (48480), +PARTITION p6060 VALUES LESS THAN (48488), +PARTITION p6061 VALUES LESS THAN (48496), +PARTITION p6062 VALUES LESS THAN (48504), +PARTITION p6063 VALUES LESS THAN (48512), +PARTITION p6064 VALUES LESS THAN (48520), +PARTITION p6065 VALUES LESS THAN (48528), +PARTITION p6066 VALUES LESS THAN (48536), +PARTITION p6067 VALUES LESS THAN (48544), +PARTITION p6068 VALUES LESS THAN (48552), +PARTITION p6069 VALUES LESS THAN (48560), +PARTITION p6070 VALUES LESS THAN (48568), +PARTITION p6071 VALUES LESS THAN (48576), +PARTITION p6072 VALUES LESS THAN (48584), +PARTITION p6073 VALUES LESS THAN (48592), +PARTITION p6074 VALUES LESS THAN (48600), +PARTITION p6075 VALUES LESS THAN (48608), +PARTITION p6076 VALUES LESS THAN (48616), +PARTITION p6077 VALUES LESS THAN (48624), +PARTITION p6078 VALUES LESS THAN (48632), +PARTITION p6079 VALUES LESS THAN (48640), +PARTITION p6080 VALUES LESS THAN (48648), +PARTITION p6081 VALUES LESS THAN (48656), +PARTITION p6082 VALUES LESS THAN (48664), +PARTITION p6083 VALUES LESS THAN (48672), +PARTITION p6084 VALUES LESS THAN (48680), +PARTITION p6085 VALUES LESS THAN (48688), +PARTITION p6086 VALUES LESS THAN (48696), +PARTITION p6087 VALUES LESS THAN (48704), +PARTITION p6088 VALUES LESS THAN (48712), +PARTITION p6089 VALUES LESS THAN (48720), +PARTITION p6090 VALUES LESS THAN (48728), +PARTITION p6091 VALUES LESS THAN (48736), +PARTITION p6092 VALUES LESS THAN (48744), +PARTITION p6093 VALUES LESS THAN (48752), +PARTITION p6094 VALUES LESS THAN (48760), +PARTITION p6095 VALUES LESS THAN (48768), +PARTITION p6096 VALUES LESS THAN (48776), +PARTITION p6097 VALUES LESS THAN (48784), +PARTITION p6098 VALUES LESS THAN (48792), +PARTITION p6099 VALUES LESS THAN (48800), +PARTITION p6100 VALUES LESS THAN (48808), +PARTITION p6101 VALUES LESS THAN (48816), +PARTITION p6102 VALUES LESS THAN (48824), +PARTITION p6103 VALUES LESS THAN (48832), +PARTITION p6104 VALUES LESS THAN (48840), +PARTITION p6105 VALUES LESS THAN (48848), +PARTITION p6106 VALUES LESS THAN (48856), +PARTITION p6107 VALUES LESS THAN (48864), +PARTITION p6108 VALUES LESS THAN (48872), +PARTITION p6109 VALUES LESS THAN (48880), +PARTITION p6110 VALUES LESS THAN (48888), +PARTITION p6111 VALUES LESS THAN (48896), +PARTITION p6112 VALUES LESS THAN (48904), +PARTITION p6113 VALUES LESS THAN (48912), +PARTITION p6114 VALUES LESS THAN (48920), +PARTITION p6115 VALUES LESS THAN (48928), +PARTITION p6116 VALUES LESS THAN (48936), +PARTITION p6117 VALUES LESS THAN (48944), +PARTITION p6118 VALUES LESS THAN (48952), +PARTITION p6119 VALUES LESS THAN (48960), +PARTITION p6120 VALUES LESS THAN (48968), +PARTITION p6121 VALUES LESS THAN (48976), +PARTITION p6122 VALUES LESS THAN (48984), +PARTITION p6123 VALUES LESS THAN (48992), +PARTITION p6124 VALUES LESS THAN (49000), +PARTITION p6125 VALUES LESS THAN (49008), +PARTITION p6126 VALUES LESS THAN (49016), +PARTITION p6127 VALUES LESS THAN (49024), +PARTITION p6128 VALUES LESS THAN (49032), +PARTITION p6129 VALUES LESS THAN (49040), +PARTITION p6130 VALUES LESS THAN (49048), +PARTITION p6131 VALUES LESS THAN (49056), +PARTITION p6132 VALUES LESS THAN (49064), +PARTITION p6133 VALUES LESS THAN (49072), +PARTITION p6134 VALUES LESS THAN (49080), +PARTITION p6135 VALUES LESS THAN (49088), +PARTITION p6136 VALUES LESS THAN (49096), +PARTITION p6137 VALUES LESS THAN (49104), +PARTITION p6138 VALUES LESS THAN (49112), +PARTITION p6139 VALUES LESS THAN (49120), +PARTITION p6140 VALUES LESS THAN (49128), +PARTITION p6141 VALUES LESS THAN (49136), +PARTITION p6142 VALUES LESS THAN (49144), +PARTITION p6143 VALUES LESS THAN (49152), +PARTITION p6144 VALUES LESS THAN (49160), +PARTITION p6145 VALUES LESS THAN (49168), +PARTITION p6146 VALUES LESS THAN (49176), +PARTITION p6147 VALUES LESS THAN (49184), +PARTITION p6148 VALUES LESS THAN (49192), +PARTITION p6149 VALUES LESS THAN (49200), +PARTITION p6150 VALUES LESS THAN (49208), +PARTITION p6151 VALUES LESS THAN (49216), +PARTITION p6152 VALUES LESS THAN (49224), +PARTITION p6153 VALUES LESS THAN (49232), +PARTITION p6154 VALUES LESS THAN (49240), +PARTITION p6155 VALUES LESS THAN (49248), +PARTITION p6156 VALUES LESS THAN (49256), +PARTITION p6157 VALUES LESS THAN (49264), +PARTITION p6158 VALUES LESS THAN (49272), +PARTITION p6159 VALUES LESS THAN (49280), +PARTITION p6160 VALUES LESS THAN (49288), +PARTITION p6161 VALUES LESS THAN (49296), +PARTITION p6162 VALUES LESS THAN (49304), +PARTITION p6163 VALUES LESS THAN (49312), +PARTITION p6164 VALUES LESS THAN (49320), +PARTITION p6165 VALUES LESS THAN (49328), +PARTITION p6166 VALUES LESS THAN (49336), +PARTITION p6167 VALUES LESS THAN (49344), +PARTITION p6168 VALUES LESS THAN (49352), +PARTITION p6169 VALUES LESS THAN (49360), +PARTITION p6170 VALUES LESS THAN (49368), +PARTITION p6171 VALUES LESS THAN (49376), +PARTITION p6172 VALUES LESS THAN (49384), +PARTITION p6173 VALUES LESS THAN (49392), +PARTITION p6174 VALUES LESS THAN (49400), +PARTITION p6175 VALUES LESS THAN (49408), +PARTITION p6176 VALUES LESS THAN (49416), +PARTITION p6177 VALUES LESS THAN (49424), +PARTITION p6178 VALUES LESS THAN (49432), +PARTITION p6179 VALUES LESS THAN (49440), +PARTITION p6180 VALUES LESS THAN (49448), +PARTITION p6181 VALUES LESS THAN (49456), +PARTITION p6182 VALUES LESS THAN (49464), +PARTITION p6183 VALUES LESS THAN (49472), +PARTITION p6184 VALUES LESS THAN (49480), +PARTITION p6185 VALUES LESS THAN (49488), +PARTITION p6186 VALUES LESS THAN (49496), +PARTITION p6187 VALUES LESS THAN (49504), +PARTITION p6188 VALUES LESS THAN (49512), +PARTITION p6189 VALUES LESS THAN (49520), +PARTITION p6190 VALUES LESS THAN (49528), +PARTITION p6191 VALUES LESS THAN (49536), +PARTITION p6192 VALUES LESS THAN (49544), +PARTITION p6193 VALUES LESS THAN (49552), +PARTITION p6194 VALUES LESS THAN (49560), +PARTITION p6195 VALUES LESS THAN (49568), +PARTITION p6196 VALUES LESS THAN (49576), +PARTITION p6197 VALUES LESS THAN (49584), +PARTITION p6198 VALUES LESS THAN (49592), +PARTITION p6199 VALUES LESS THAN (49600), +PARTITION p6200 VALUES LESS THAN (49608), +PARTITION p6201 VALUES LESS THAN (49616), +PARTITION p6202 VALUES LESS THAN (49624), +PARTITION p6203 VALUES LESS THAN (49632), +PARTITION p6204 VALUES LESS THAN (49640), +PARTITION p6205 VALUES LESS THAN (49648), +PARTITION p6206 VALUES LESS THAN (49656), +PARTITION p6207 VALUES LESS THAN (49664), +PARTITION p6208 VALUES LESS THAN (49672), +PARTITION p6209 VALUES LESS THAN (49680), +PARTITION p6210 VALUES LESS THAN (49688), +PARTITION p6211 VALUES LESS THAN (49696), +PARTITION p6212 VALUES LESS THAN (49704), +PARTITION p6213 VALUES LESS THAN (49712), +PARTITION p6214 VALUES LESS THAN (49720), +PARTITION p6215 VALUES LESS THAN (49728), +PARTITION p6216 VALUES LESS THAN (49736), +PARTITION p6217 VALUES LESS THAN (49744), +PARTITION p6218 VALUES LESS THAN (49752), +PARTITION p6219 VALUES LESS THAN (49760), +PARTITION p6220 VALUES LESS THAN (49768), +PARTITION p6221 VALUES LESS THAN (49776), +PARTITION p6222 VALUES LESS THAN (49784), +PARTITION p6223 VALUES LESS THAN (49792), +PARTITION p6224 VALUES LESS THAN (49800), +PARTITION p6225 VALUES LESS THAN (49808), +PARTITION p6226 VALUES LESS THAN (49816), +PARTITION p6227 VALUES LESS THAN (49824), +PARTITION p6228 VALUES LESS THAN (49832), +PARTITION p6229 VALUES LESS THAN (49840), +PARTITION p6230 VALUES LESS THAN (49848), +PARTITION p6231 VALUES LESS THAN (49856), +PARTITION p6232 VALUES LESS THAN (49864), +PARTITION p6233 VALUES LESS THAN (49872), +PARTITION p6234 VALUES LESS THAN (49880), +PARTITION p6235 VALUES LESS THAN (49888), +PARTITION p6236 VALUES LESS THAN (49896), +PARTITION p6237 VALUES LESS THAN (49904), +PARTITION p6238 VALUES LESS THAN (49912), +PARTITION p6239 VALUES LESS THAN (49920), +PARTITION p6240 VALUES LESS THAN (49928), +PARTITION p6241 VALUES LESS THAN (49936), +PARTITION p6242 VALUES LESS THAN (49944), +PARTITION p6243 VALUES LESS THAN (49952), +PARTITION p6244 VALUES LESS THAN (49960), +PARTITION p6245 VALUES LESS THAN (49968), +PARTITION p6246 VALUES LESS THAN (49976), +PARTITION p6247 VALUES LESS THAN (49984), +PARTITION p6248 VALUES LESS THAN (49992), +PARTITION p6249 VALUES LESS THAN (50000), +PARTITION p6250 VALUES LESS THAN (50008), +PARTITION p6251 VALUES LESS THAN (50016), +PARTITION p6252 VALUES LESS THAN (50024), +PARTITION p6253 VALUES LESS THAN (50032), +PARTITION p6254 VALUES LESS THAN (50040), +PARTITION p6255 VALUES LESS THAN (50048), +PARTITION p6256 VALUES LESS THAN (50056), +PARTITION p6257 VALUES LESS THAN (50064), +PARTITION p6258 VALUES LESS THAN (50072), +PARTITION p6259 VALUES LESS THAN (50080), +PARTITION p6260 VALUES LESS THAN (50088), +PARTITION p6261 VALUES LESS THAN (50096), +PARTITION p6262 VALUES LESS THAN (50104), +PARTITION p6263 VALUES LESS THAN (50112), +PARTITION p6264 VALUES LESS THAN (50120), +PARTITION p6265 VALUES LESS THAN (50128), +PARTITION p6266 VALUES LESS THAN (50136), +PARTITION p6267 VALUES LESS THAN (50144), +PARTITION p6268 VALUES LESS THAN (50152), +PARTITION p6269 VALUES LESS THAN (50160), +PARTITION p6270 VALUES LESS THAN (50168), +PARTITION p6271 VALUES LESS THAN (50176), +PARTITION p6272 VALUES LESS THAN (50184), +PARTITION p6273 VALUES LESS THAN (50192), +PARTITION p6274 VALUES LESS THAN (50200), +PARTITION p6275 VALUES LESS THAN (50208), +PARTITION p6276 VALUES LESS THAN (50216), +PARTITION p6277 VALUES LESS THAN (50224), +PARTITION p6278 VALUES LESS THAN (50232), +PARTITION p6279 VALUES LESS THAN (50240), +PARTITION p6280 VALUES LESS THAN (50248), +PARTITION p6281 VALUES LESS THAN (50256), +PARTITION p6282 VALUES LESS THAN (50264), +PARTITION p6283 VALUES LESS THAN (50272), +PARTITION p6284 VALUES LESS THAN (50280), +PARTITION p6285 VALUES LESS THAN (50288), +PARTITION p6286 VALUES LESS THAN (50296), +PARTITION p6287 VALUES LESS THAN (50304), +PARTITION p6288 VALUES LESS THAN (50312), +PARTITION p6289 VALUES LESS THAN (50320), +PARTITION p6290 VALUES LESS THAN (50328), +PARTITION p6291 VALUES LESS THAN (50336), +PARTITION p6292 VALUES LESS THAN (50344), +PARTITION p6293 VALUES LESS THAN (50352), +PARTITION p6294 VALUES LESS THAN (50360), +PARTITION p6295 VALUES LESS THAN (50368), +PARTITION p6296 VALUES LESS THAN (50376), +PARTITION p6297 VALUES LESS THAN (50384), +PARTITION p6298 VALUES LESS THAN (50392), +PARTITION p6299 VALUES LESS THAN (50400), +PARTITION p6300 VALUES LESS THAN (50408), +PARTITION p6301 VALUES LESS THAN (50416), +PARTITION p6302 VALUES LESS THAN (50424), +PARTITION p6303 VALUES LESS THAN (50432), +PARTITION p6304 VALUES LESS THAN (50440), +PARTITION p6305 VALUES LESS THAN (50448), +PARTITION p6306 VALUES LESS THAN (50456), +PARTITION p6307 VALUES LESS THAN (50464), +PARTITION p6308 VALUES LESS THAN (50472), +PARTITION p6309 VALUES LESS THAN (50480), +PARTITION p6310 VALUES LESS THAN (50488), +PARTITION p6311 VALUES LESS THAN (50496), +PARTITION p6312 VALUES LESS THAN (50504), +PARTITION p6313 VALUES LESS THAN (50512), +PARTITION p6314 VALUES LESS THAN (50520), +PARTITION p6315 VALUES LESS THAN (50528), +PARTITION p6316 VALUES LESS THAN (50536), +PARTITION p6317 VALUES LESS THAN (50544), +PARTITION p6318 VALUES LESS THAN (50552), +PARTITION p6319 VALUES LESS THAN (50560), +PARTITION p6320 VALUES LESS THAN (50568), +PARTITION p6321 VALUES LESS THAN (50576), +PARTITION p6322 VALUES LESS THAN (50584), +PARTITION p6323 VALUES LESS THAN (50592), +PARTITION p6324 VALUES LESS THAN (50600), +PARTITION p6325 VALUES LESS THAN (50608), +PARTITION p6326 VALUES LESS THAN (50616), +PARTITION p6327 VALUES LESS THAN (50624), +PARTITION p6328 VALUES LESS THAN (50632), +PARTITION p6329 VALUES LESS THAN (50640), +PARTITION p6330 VALUES LESS THAN (50648), +PARTITION p6331 VALUES LESS THAN (50656), +PARTITION p6332 VALUES LESS THAN (50664), +PARTITION p6333 VALUES LESS THAN (50672), +PARTITION p6334 VALUES LESS THAN (50680), +PARTITION p6335 VALUES LESS THAN (50688), +PARTITION p6336 VALUES LESS THAN (50696), +PARTITION p6337 VALUES LESS THAN (50704), +PARTITION p6338 VALUES LESS THAN (50712), +PARTITION p6339 VALUES LESS THAN (50720), +PARTITION p6340 VALUES LESS THAN (50728), +PARTITION p6341 VALUES LESS THAN (50736), +PARTITION p6342 VALUES LESS THAN (50744), +PARTITION p6343 VALUES LESS THAN (50752), +PARTITION p6344 VALUES LESS THAN (50760), +PARTITION p6345 VALUES LESS THAN (50768), +PARTITION p6346 VALUES LESS THAN (50776), +PARTITION p6347 VALUES LESS THAN (50784), +PARTITION p6348 VALUES LESS THAN (50792), +PARTITION p6349 VALUES LESS THAN (50800), +PARTITION p6350 VALUES LESS THAN (50808), +PARTITION p6351 VALUES LESS THAN (50816), +PARTITION p6352 VALUES LESS THAN (50824), +PARTITION p6353 VALUES LESS THAN (50832), +PARTITION p6354 VALUES LESS THAN (50840), +PARTITION p6355 VALUES LESS THAN (50848), +PARTITION p6356 VALUES LESS THAN (50856), +PARTITION p6357 VALUES LESS THAN (50864), +PARTITION p6358 VALUES LESS THAN (50872), +PARTITION p6359 VALUES LESS THAN (50880), +PARTITION p6360 VALUES LESS THAN (50888), +PARTITION p6361 VALUES LESS THAN (50896), +PARTITION p6362 VALUES LESS THAN (50904), +PARTITION p6363 VALUES LESS THAN (50912), +PARTITION p6364 VALUES LESS THAN (50920), +PARTITION p6365 VALUES LESS THAN (50928), +PARTITION p6366 VALUES LESS THAN (50936), +PARTITION p6367 VALUES LESS THAN (50944), +PARTITION p6368 VALUES LESS THAN (50952), +PARTITION p6369 VALUES LESS THAN (50960), +PARTITION p6370 VALUES LESS THAN (50968), +PARTITION p6371 VALUES LESS THAN (50976), +PARTITION p6372 VALUES LESS THAN (50984), +PARTITION p6373 VALUES LESS THAN (50992), +PARTITION p6374 VALUES LESS THAN (51000), +PARTITION p6375 VALUES LESS THAN (51008), +PARTITION p6376 VALUES LESS THAN (51016), +PARTITION p6377 VALUES LESS THAN (51024), +PARTITION p6378 VALUES LESS THAN (51032), +PARTITION p6379 VALUES LESS THAN (51040), +PARTITION p6380 VALUES LESS THAN (51048), +PARTITION p6381 VALUES LESS THAN (51056), +PARTITION p6382 VALUES LESS THAN (51064), +PARTITION p6383 VALUES LESS THAN (51072), +PARTITION p6384 VALUES LESS THAN (51080), +PARTITION p6385 VALUES LESS THAN (51088), +PARTITION p6386 VALUES LESS THAN (51096), +PARTITION p6387 VALUES LESS THAN (51104), +PARTITION p6388 VALUES LESS THAN (51112), +PARTITION p6389 VALUES LESS THAN (51120), +PARTITION p6390 VALUES LESS THAN (51128), +PARTITION p6391 VALUES LESS THAN (51136), +PARTITION p6392 VALUES LESS THAN (51144), +PARTITION p6393 VALUES LESS THAN (51152), +PARTITION p6394 VALUES LESS THAN (51160), +PARTITION p6395 VALUES LESS THAN (51168), +PARTITION p6396 VALUES LESS THAN (51176), +PARTITION p6397 VALUES LESS THAN (51184), +PARTITION p6398 VALUES LESS THAN (51192), +PARTITION p6399 VALUES LESS THAN (51200), +PARTITION p6400 VALUES LESS THAN (51208), +PARTITION p6401 VALUES LESS THAN (51216), +PARTITION p6402 VALUES LESS THAN (51224), +PARTITION p6403 VALUES LESS THAN (51232), +PARTITION p6404 VALUES LESS THAN (51240), +PARTITION p6405 VALUES LESS THAN (51248), +PARTITION p6406 VALUES LESS THAN (51256), +PARTITION p6407 VALUES LESS THAN (51264), +PARTITION p6408 VALUES LESS THAN (51272), +PARTITION p6409 VALUES LESS THAN (51280), +PARTITION p6410 VALUES LESS THAN (51288), +PARTITION p6411 VALUES LESS THAN (51296), +PARTITION p6412 VALUES LESS THAN (51304), +PARTITION p6413 VALUES LESS THAN (51312), +PARTITION p6414 VALUES LESS THAN (51320), +PARTITION p6415 VALUES LESS THAN (51328), +PARTITION p6416 VALUES LESS THAN (51336), +PARTITION p6417 VALUES LESS THAN (51344), +PARTITION p6418 VALUES LESS THAN (51352), +PARTITION p6419 VALUES LESS THAN (51360), +PARTITION p6420 VALUES LESS THAN (51368), +PARTITION p6421 VALUES LESS THAN (51376), +PARTITION p6422 VALUES LESS THAN (51384), +PARTITION p6423 VALUES LESS THAN (51392), +PARTITION p6424 VALUES LESS THAN (51400), +PARTITION p6425 VALUES LESS THAN (51408), +PARTITION p6426 VALUES LESS THAN (51416), +PARTITION p6427 VALUES LESS THAN (51424), +PARTITION p6428 VALUES LESS THAN (51432), +PARTITION p6429 VALUES LESS THAN (51440), +PARTITION p6430 VALUES LESS THAN (51448), +PARTITION p6431 VALUES LESS THAN (51456), +PARTITION p6432 VALUES LESS THAN (51464), +PARTITION p6433 VALUES LESS THAN (51472), +PARTITION p6434 VALUES LESS THAN (51480), +PARTITION p6435 VALUES LESS THAN (51488), +PARTITION p6436 VALUES LESS THAN (51496), +PARTITION p6437 VALUES LESS THAN (51504), +PARTITION p6438 VALUES LESS THAN (51512), +PARTITION p6439 VALUES LESS THAN (51520), +PARTITION p6440 VALUES LESS THAN (51528), +PARTITION p6441 VALUES LESS THAN (51536), +PARTITION p6442 VALUES LESS THAN (51544), +PARTITION p6443 VALUES LESS THAN (51552), +PARTITION p6444 VALUES LESS THAN (51560), +PARTITION p6445 VALUES LESS THAN (51568), +PARTITION p6446 VALUES LESS THAN (51576), +PARTITION p6447 VALUES LESS THAN (51584), +PARTITION p6448 VALUES LESS THAN (51592), +PARTITION p6449 VALUES LESS THAN (51600), +PARTITION p6450 VALUES LESS THAN (51608), +PARTITION p6451 VALUES LESS THAN (51616), +PARTITION p6452 VALUES LESS THAN (51624), +PARTITION p6453 VALUES LESS THAN (51632), +PARTITION p6454 VALUES LESS THAN (51640), +PARTITION p6455 VALUES LESS THAN (51648), +PARTITION p6456 VALUES LESS THAN (51656), +PARTITION p6457 VALUES LESS THAN (51664), +PARTITION p6458 VALUES LESS THAN (51672), +PARTITION p6459 VALUES LESS THAN (51680), +PARTITION p6460 VALUES LESS THAN (51688), +PARTITION p6461 VALUES LESS THAN (51696), +PARTITION p6462 VALUES LESS THAN (51704), +PARTITION p6463 VALUES LESS THAN (51712), +PARTITION p6464 VALUES LESS THAN (51720), +PARTITION p6465 VALUES LESS THAN (51728), +PARTITION p6466 VALUES LESS THAN (51736), +PARTITION p6467 VALUES LESS THAN (51744), +PARTITION p6468 VALUES LESS THAN (51752), +PARTITION p6469 VALUES LESS THAN (51760), +PARTITION p6470 VALUES LESS THAN (51768), +PARTITION p6471 VALUES LESS THAN (51776), +PARTITION p6472 VALUES LESS THAN (51784), +PARTITION p6473 VALUES LESS THAN (51792), +PARTITION p6474 VALUES LESS THAN (51800), +PARTITION p6475 VALUES LESS THAN (51808), +PARTITION p6476 VALUES LESS THAN (51816), +PARTITION p6477 VALUES LESS THAN (51824), +PARTITION p6478 VALUES LESS THAN (51832), +PARTITION p6479 VALUES LESS THAN (51840), +PARTITION p6480 VALUES LESS THAN (51848), +PARTITION p6481 VALUES LESS THAN (51856), +PARTITION p6482 VALUES LESS THAN (51864), +PARTITION p6483 VALUES LESS THAN (51872), +PARTITION p6484 VALUES LESS THAN (51880), +PARTITION p6485 VALUES LESS THAN (51888), +PARTITION p6486 VALUES LESS THAN (51896), +PARTITION p6487 VALUES LESS THAN (51904), +PARTITION p6488 VALUES LESS THAN (51912), +PARTITION p6489 VALUES LESS THAN (51920), +PARTITION p6490 VALUES LESS THAN (51928), +PARTITION p6491 VALUES LESS THAN (51936), +PARTITION p6492 VALUES LESS THAN (51944), +PARTITION p6493 VALUES LESS THAN (51952), +PARTITION p6494 VALUES LESS THAN (51960), +PARTITION p6495 VALUES LESS THAN (51968), +PARTITION p6496 VALUES LESS THAN (51976), +PARTITION p6497 VALUES LESS THAN (51984), +PARTITION p6498 VALUES LESS THAN (51992), +PARTITION p6499 VALUES LESS THAN (52000), +PARTITION p6500 VALUES LESS THAN (52008), +PARTITION p6501 VALUES LESS THAN (52016), +PARTITION p6502 VALUES LESS THAN (52024), +PARTITION p6503 VALUES LESS THAN (52032), +PARTITION p6504 VALUES LESS THAN (52040), +PARTITION p6505 VALUES LESS THAN (52048), +PARTITION p6506 VALUES LESS THAN (52056), +PARTITION p6507 VALUES LESS THAN (52064), +PARTITION p6508 VALUES LESS THAN (52072), +PARTITION p6509 VALUES LESS THAN (52080), +PARTITION p6510 VALUES LESS THAN (52088), +PARTITION p6511 VALUES LESS THAN (52096), +PARTITION p6512 VALUES LESS THAN (52104), +PARTITION p6513 VALUES LESS THAN (52112), +PARTITION p6514 VALUES LESS THAN (52120), +PARTITION p6515 VALUES LESS THAN (52128), +PARTITION p6516 VALUES LESS THAN (52136), +PARTITION p6517 VALUES LESS THAN (52144), +PARTITION p6518 VALUES LESS THAN (52152), +PARTITION p6519 VALUES LESS THAN (52160), +PARTITION p6520 VALUES LESS THAN (52168), +PARTITION p6521 VALUES LESS THAN (52176), +PARTITION p6522 VALUES LESS THAN (52184), +PARTITION p6523 VALUES LESS THAN (52192), +PARTITION p6524 VALUES LESS THAN (52200), +PARTITION p6525 VALUES LESS THAN (52208), +PARTITION p6526 VALUES LESS THAN (52216), +PARTITION p6527 VALUES LESS THAN (52224), +PARTITION p6528 VALUES LESS THAN (52232), +PARTITION p6529 VALUES LESS THAN (52240), +PARTITION p6530 VALUES LESS THAN (52248), +PARTITION p6531 VALUES LESS THAN (52256), +PARTITION p6532 VALUES LESS THAN (52264), +PARTITION p6533 VALUES LESS THAN (52272), +PARTITION p6534 VALUES LESS THAN (52280), +PARTITION p6535 VALUES LESS THAN (52288), +PARTITION p6536 VALUES LESS THAN (52296), +PARTITION p6537 VALUES LESS THAN (52304), +PARTITION p6538 VALUES LESS THAN (52312), +PARTITION p6539 VALUES LESS THAN (52320), +PARTITION p6540 VALUES LESS THAN (52328), +PARTITION p6541 VALUES LESS THAN (52336), +PARTITION p6542 VALUES LESS THAN (52344), +PARTITION p6543 VALUES LESS THAN (52352), +PARTITION p6544 VALUES LESS THAN (52360), +PARTITION p6545 VALUES LESS THAN (52368), +PARTITION p6546 VALUES LESS THAN (52376), +PARTITION p6547 VALUES LESS THAN (52384), +PARTITION p6548 VALUES LESS THAN (52392), +PARTITION p6549 VALUES LESS THAN (52400), +PARTITION p6550 VALUES LESS THAN (52408), +PARTITION p6551 VALUES LESS THAN (52416), +PARTITION p6552 VALUES LESS THAN (52424), +PARTITION p6553 VALUES LESS THAN (52432), +PARTITION p6554 VALUES LESS THAN (52440), +PARTITION p6555 VALUES LESS THAN (52448), +PARTITION p6556 VALUES LESS THAN (52456), +PARTITION p6557 VALUES LESS THAN (52464), +PARTITION p6558 VALUES LESS THAN (52472), +PARTITION p6559 VALUES LESS THAN (52480), +PARTITION p6560 VALUES LESS THAN (52488), +PARTITION p6561 VALUES LESS THAN (52496), +PARTITION p6562 VALUES LESS THAN (52504), +PARTITION p6563 VALUES LESS THAN (52512), +PARTITION p6564 VALUES LESS THAN (52520), +PARTITION p6565 VALUES LESS THAN (52528), +PARTITION p6566 VALUES LESS THAN (52536), +PARTITION p6567 VALUES LESS THAN (52544), +PARTITION p6568 VALUES LESS THAN (52552), +PARTITION p6569 VALUES LESS THAN (52560), +PARTITION p6570 VALUES LESS THAN (52568), +PARTITION p6571 VALUES LESS THAN (52576), +PARTITION p6572 VALUES LESS THAN (52584), +PARTITION p6573 VALUES LESS THAN (52592), +PARTITION p6574 VALUES LESS THAN (52600), +PARTITION p6575 VALUES LESS THAN (52608), +PARTITION p6576 VALUES LESS THAN (52616), +PARTITION p6577 VALUES LESS THAN (52624), +PARTITION p6578 VALUES LESS THAN (52632), +PARTITION p6579 VALUES LESS THAN (52640), +PARTITION p6580 VALUES LESS THAN (52648), +PARTITION p6581 VALUES LESS THAN (52656), +PARTITION p6582 VALUES LESS THAN (52664), +PARTITION p6583 VALUES LESS THAN (52672), +PARTITION p6584 VALUES LESS THAN (52680), +PARTITION p6585 VALUES LESS THAN (52688), +PARTITION p6586 VALUES LESS THAN (52696), +PARTITION p6587 VALUES LESS THAN (52704), +PARTITION p6588 VALUES LESS THAN (52712), +PARTITION p6589 VALUES LESS THAN (52720), +PARTITION p6590 VALUES LESS THAN (52728), +PARTITION p6591 VALUES LESS THAN (52736), +PARTITION p6592 VALUES LESS THAN (52744), +PARTITION p6593 VALUES LESS THAN (52752), +PARTITION p6594 VALUES LESS THAN (52760), +PARTITION p6595 VALUES LESS THAN (52768), +PARTITION p6596 VALUES LESS THAN (52776), +PARTITION p6597 VALUES LESS THAN (52784), +PARTITION p6598 VALUES LESS THAN (52792), +PARTITION p6599 VALUES LESS THAN (52800), +PARTITION p6600 VALUES LESS THAN (52808), +PARTITION p6601 VALUES LESS THAN (52816), +PARTITION p6602 VALUES LESS THAN (52824), +PARTITION p6603 VALUES LESS THAN (52832), +PARTITION p6604 VALUES LESS THAN (52840), +PARTITION p6605 VALUES LESS THAN (52848), +PARTITION p6606 VALUES LESS THAN (52856), +PARTITION p6607 VALUES LESS THAN (52864), +PARTITION p6608 VALUES LESS THAN (52872), +PARTITION p6609 VALUES LESS THAN (52880), +PARTITION p6610 VALUES LESS THAN (52888), +PARTITION p6611 VALUES LESS THAN (52896), +PARTITION p6612 VALUES LESS THAN (52904), +PARTITION p6613 VALUES LESS THAN (52912), +PARTITION p6614 VALUES LESS THAN (52920), +PARTITION p6615 VALUES LESS THAN (52928), +PARTITION p6616 VALUES LESS THAN (52936), +PARTITION p6617 VALUES LESS THAN (52944), +PARTITION p6618 VALUES LESS THAN (52952), +PARTITION p6619 VALUES LESS THAN (52960), +PARTITION p6620 VALUES LESS THAN (52968), +PARTITION p6621 VALUES LESS THAN (52976), +PARTITION p6622 VALUES LESS THAN (52984), +PARTITION p6623 VALUES LESS THAN (52992), +PARTITION p6624 VALUES LESS THAN (53000), +PARTITION p6625 VALUES LESS THAN (53008), +PARTITION p6626 VALUES LESS THAN (53016), +PARTITION p6627 VALUES LESS THAN (53024), +PARTITION p6628 VALUES LESS THAN (53032), +PARTITION p6629 VALUES LESS THAN (53040), +PARTITION p6630 VALUES LESS THAN (53048), +PARTITION p6631 VALUES LESS THAN (53056), +PARTITION p6632 VALUES LESS THAN (53064), +PARTITION p6633 VALUES LESS THAN (53072), +PARTITION p6634 VALUES LESS THAN (53080), +PARTITION p6635 VALUES LESS THAN (53088), +PARTITION p6636 VALUES LESS THAN (53096), +PARTITION p6637 VALUES LESS THAN (53104), +PARTITION p6638 VALUES LESS THAN (53112), +PARTITION p6639 VALUES LESS THAN (53120), +PARTITION p6640 VALUES LESS THAN (53128), +PARTITION p6641 VALUES LESS THAN (53136), +PARTITION p6642 VALUES LESS THAN (53144), +PARTITION p6643 VALUES LESS THAN (53152), +PARTITION p6644 VALUES LESS THAN (53160), +PARTITION p6645 VALUES LESS THAN (53168), +PARTITION p6646 VALUES LESS THAN (53176), +PARTITION p6647 VALUES LESS THAN (53184), +PARTITION p6648 VALUES LESS THAN (53192), +PARTITION p6649 VALUES LESS THAN (53200), +PARTITION p6650 VALUES LESS THAN (53208), +PARTITION p6651 VALUES LESS THAN (53216), +PARTITION p6652 VALUES LESS THAN (53224), +PARTITION p6653 VALUES LESS THAN (53232), +PARTITION p6654 VALUES LESS THAN (53240), +PARTITION p6655 VALUES LESS THAN (53248), +PARTITION p6656 VALUES LESS THAN (53256), +PARTITION p6657 VALUES LESS THAN (53264), +PARTITION p6658 VALUES LESS THAN (53272), +PARTITION p6659 VALUES LESS THAN (53280), +PARTITION p6660 VALUES LESS THAN (53288), +PARTITION p6661 VALUES LESS THAN (53296), +PARTITION p6662 VALUES LESS THAN (53304), +PARTITION p6663 VALUES LESS THAN (53312), +PARTITION p6664 VALUES LESS THAN (53320), +PARTITION p6665 VALUES LESS THAN (53328), +PARTITION p6666 VALUES LESS THAN (53336), +PARTITION p6667 VALUES LESS THAN (53344), +PARTITION p6668 VALUES LESS THAN (53352), +PARTITION p6669 VALUES LESS THAN (53360), +PARTITION p6670 VALUES LESS THAN (53368), +PARTITION p6671 VALUES LESS THAN (53376), +PARTITION p6672 VALUES LESS THAN (53384), +PARTITION p6673 VALUES LESS THAN (53392), +PARTITION p6674 VALUES LESS THAN (53400), +PARTITION p6675 VALUES LESS THAN (53408), +PARTITION p6676 VALUES LESS THAN (53416), +PARTITION p6677 VALUES LESS THAN (53424), +PARTITION p6678 VALUES LESS THAN (53432), +PARTITION p6679 VALUES LESS THAN (53440), +PARTITION p6680 VALUES LESS THAN (53448), +PARTITION p6681 VALUES LESS THAN (53456), +PARTITION p6682 VALUES LESS THAN (53464), +PARTITION p6683 VALUES LESS THAN (53472), +PARTITION p6684 VALUES LESS THAN (53480), +PARTITION p6685 VALUES LESS THAN (53488), +PARTITION p6686 VALUES LESS THAN (53496), +PARTITION p6687 VALUES LESS THAN (53504), +PARTITION p6688 VALUES LESS THAN (53512), +PARTITION p6689 VALUES LESS THAN (53520), +PARTITION p6690 VALUES LESS THAN (53528), +PARTITION p6691 VALUES LESS THAN (53536), +PARTITION p6692 VALUES LESS THAN (53544), +PARTITION p6693 VALUES LESS THAN (53552), +PARTITION p6694 VALUES LESS THAN (53560), +PARTITION p6695 VALUES LESS THAN (53568), +PARTITION p6696 VALUES LESS THAN (53576), +PARTITION p6697 VALUES LESS THAN (53584), +PARTITION p6698 VALUES LESS THAN (53592), +PARTITION p6699 VALUES LESS THAN (53600), +PARTITION p6700 VALUES LESS THAN (53608), +PARTITION p6701 VALUES LESS THAN (53616), +PARTITION p6702 VALUES LESS THAN (53624), +PARTITION p6703 VALUES LESS THAN (53632), +PARTITION p6704 VALUES LESS THAN (53640), +PARTITION p6705 VALUES LESS THAN (53648), +PARTITION p6706 VALUES LESS THAN (53656), +PARTITION p6707 VALUES LESS THAN (53664), +PARTITION p6708 VALUES LESS THAN (53672), +PARTITION p6709 VALUES LESS THAN (53680), +PARTITION p6710 VALUES LESS THAN (53688), +PARTITION p6711 VALUES LESS THAN (53696), +PARTITION p6712 VALUES LESS THAN (53704), +PARTITION p6713 VALUES LESS THAN (53712), +PARTITION p6714 VALUES LESS THAN (53720), +PARTITION p6715 VALUES LESS THAN (53728), +PARTITION p6716 VALUES LESS THAN (53736), +PARTITION p6717 VALUES LESS THAN (53744), +PARTITION p6718 VALUES LESS THAN (53752), +PARTITION p6719 VALUES LESS THAN (53760), +PARTITION p6720 VALUES LESS THAN (53768), +PARTITION p6721 VALUES LESS THAN (53776), +PARTITION p6722 VALUES LESS THAN (53784), +PARTITION p6723 VALUES LESS THAN (53792), +PARTITION p6724 VALUES LESS THAN (53800), +PARTITION p6725 VALUES LESS THAN (53808), +PARTITION p6726 VALUES LESS THAN (53816), +PARTITION p6727 VALUES LESS THAN (53824), +PARTITION p6728 VALUES LESS THAN (53832), +PARTITION p6729 VALUES LESS THAN (53840), +PARTITION p6730 VALUES LESS THAN (53848), +PARTITION p6731 VALUES LESS THAN (53856), +PARTITION p6732 VALUES LESS THAN (53864), +PARTITION p6733 VALUES LESS THAN (53872), +PARTITION p6734 VALUES LESS THAN (53880), +PARTITION p6735 VALUES LESS THAN (53888), +PARTITION p6736 VALUES LESS THAN (53896), +PARTITION p6737 VALUES LESS THAN (53904), +PARTITION p6738 VALUES LESS THAN (53912), +PARTITION p6739 VALUES LESS THAN (53920), +PARTITION p6740 VALUES LESS THAN (53928), +PARTITION p6741 VALUES LESS THAN (53936), +PARTITION p6742 VALUES LESS THAN (53944), +PARTITION p6743 VALUES LESS THAN (53952), +PARTITION p6744 VALUES LESS THAN (53960), +PARTITION p6745 VALUES LESS THAN (53968), +PARTITION p6746 VALUES LESS THAN (53976), +PARTITION p6747 VALUES LESS THAN (53984), +PARTITION p6748 VALUES LESS THAN (53992), +PARTITION p6749 VALUES LESS THAN (54000), +PARTITION p6750 VALUES LESS THAN (54008), +PARTITION p6751 VALUES LESS THAN (54016), +PARTITION p6752 VALUES LESS THAN (54024), +PARTITION p6753 VALUES LESS THAN (54032), +PARTITION p6754 VALUES LESS THAN (54040), +PARTITION p6755 VALUES LESS THAN (54048), +PARTITION p6756 VALUES LESS THAN (54056), +PARTITION p6757 VALUES LESS THAN (54064), +PARTITION p6758 VALUES LESS THAN (54072), +PARTITION p6759 VALUES LESS THAN (54080), +PARTITION p6760 VALUES LESS THAN (54088), +PARTITION p6761 VALUES LESS THAN (54096), +PARTITION p6762 VALUES LESS THAN (54104), +PARTITION p6763 VALUES LESS THAN (54112), +PARTITION p6764 VALUES LESS THAN (54120), +PARTITION p6765 VALUES LESS THAN (54128), +PARTITION p6766 VALUES LESS THAN (54136), +PARTITION p6767 VALUES LESS THAN (54144), +PARTITION p6768 VALUES LESS THAN (54152), +PARTITION p6769 VALUES LESS THAN (54160), +PARTITION p6770 VALUES LESS THAN (54168), +PARTITION p6771 VALUES LESS THAN (54176), +PARTITION p6772 VALUES LESS THAN (54184), +PARTITION p6773 VALUES LESS THAN (54192), +PARTITION p6774 VALUES LESS THAN (54200), +PARTITION p6775 VALUES LESS THAN (54208), +PARTITION p6776 VALUES LESS THAN (54216), +PARTITION p6777 VALUES LESS THAN (54224), +PARTITION p6778 VALUES LESS THAN (54232), +PARTITION p6779 VALUES LESS THAN (54240), +PARTITION p6780 VALUES LESS THAN (54248), +PARTITION p6781 VALUES LESS THAN (54256), +PARTITION p6782 VALUES LESS THAN (54264), +PARTITION p6783 VALUES LESS THAN (54272), +PARTITION p6784 VALUES LESS THAN (54280), +PARTITION p6785 VALUES LESS THAN (54288), +PARTITION p6786 VALUES LESS THAN (54296), +PARTITION p6787 VALUES LESS THAN (54304), +PARTITION p6788 VALUES LESS THAN (54312), +PARTITION p6789 VALUES LESS THAN (54320), +PARTITION p6790 VALUES LESS THAN (54328), +PARTITION p6791 VALUES LESS THAN (54336), +PARTITION p6792 VALUES LESS THAN (54344), +PARTITION p6793 VALUES LESS THAN (54352), +PARTITION p6794 VALUES LESS THAN (54360), +PARTITION p6795 VALUES LESS THAN (54368), +PARTITION p6796 VALUES LESS THAN (54376), +PARTITION p6797 VALUES LESS THAN (54384), +PARTITION p6798 VALUES LESS THAN (54392), +PARTITION p6799 VALUES LESS THAN (54400), +PARTITION p6800 VALUES LESS THAN (54408), +PARTITION p6801 VALUES LESS THAN (54416), +PARTITION p6802 VALUES LESS THAN (54424), +PARTITION p6803 VALUES LESS THAN (54432), +PARTITION p6804 VALUES LESS THAN (54440), +PARTITION p6805 VALUES LESS THAN (54448), +PARTITION p6806 VALUES LESS THAN (54456), +PARTITION p6807 VALUES LESS THAN (54464), +PARTITION p6808 VALUES LESS THAN (54472), +PARTITION p6809 VALUES LESS THAN (54480), +PARTITION p6810 VALUES LESS THAN (54488), +PARTITION p6811 VALUES LESS THAN (54496), +PARTITION p6812 VALUES LESS THAN (54504), +PARTITION p6813 VALUES LESS THAN (54512), +PARTITION p6814 VALUES LESS THAN (54520), +PARTITION p6815 VALUES LESS THAN (54528), +PARTITION p6816 VALUES LESS THAN (54536), +PARTITION p6817 VALUES LESS THAN (54544), +PARTITION p6818 VALUES LESS THAN (54552), +PARTITION p6819 VALUES LESS THAN (54560), +PARTITION p6820 VALUES LESS THAN (54568), +PARTITION p6821 VALUES LESS THAN (54576), +PARTITION p6822 VALUES LESS THAN (54584), +PARTITION p6823 VALUES LESS THAN (54592), +PARTITION p6824 VALUES LESS THAN (54600), +PARTITION p6825 VALUES LESS THAN (54608), +PARTITION p6826 VALUES LESS THAN (54616), +PARTITION p6827 VALUES LESS THAN (54624), +PARTITION p6828 VALUES LESS THAN (54632), +PARTITION p6829 VALUES LESS THAN (54640), +PARTITION p6830 VALUES LESS THAN (54648), +PARTITION p6831 VALUES LESS THAN (54656), +PARTITION p6832 VALUES LESS THAN (54664), +PARTITION p6833 VALUES LESS THAN (54672), +PARTITION p6834 VALUES LESS THAN (54680), +PARTITION p6835 VALUES LESS THAN (54688), +PARTITION p6836 VALUES LESS THAN (54696), +PARTITION p6837 VALUES LESS THAN (54704), +PARTITION p6838 VALUES LESS THAN (54712), +PARTITION p6839 VALUES LESS THAN (54720), +PARTITION p6840 VALUES LESS THAN (54728), +PARTITION p6841 VALUES LESS THAN (54736), +PARTITION p6842 VALUES LESS THAN (54744), +PARTITION p6843 VALUES LESS THAN (54752), +PARTITION p6844 VALUES LESS THAN (54760), +PARTITION p6845 VALUES LESS THAN (54768), +PARTITION p6846 VALUES LESS THAN (54776), +PARTITION p6847 VALUES LESS THAN (54784), +PARTITION p6848 VALUES LESS THAN (54792), +PARTITION p6849 VALUES LESS THAN (54800), +PARTITION p6850 VALUES LESS THAN (54808), +PARTITION p6851 VALUES LESS THAN (54816), +PARTITION p6852 VALUES LESS THAN (54824), +PARTITION p6853 VALUES LESS THAN (54832), +PARTITION p6854 VALUES LESS THAN (54840), +PARTITION p6855 VALUES LESS THAN (54848), +PARTITION p6856 VALUES LESS THAN (54856), +PARTITION p6857 VALUES LESS THAN (54864), +PARTITION p6858 VALUES LESS THAN (54872), +PARTITION p6859 VALUES LESS THAN (54880), +PARTITION p6860 VALUES LESS THAN (54888), +PARTITION p6861 VALUES LESS THAN (54896), +PARTITION p6862 VALUES LESS THAN (54904), +PARTITION p6863 VALUES LESS THAN (54912), +PARTITION p6864 VALUES LESS THAN (54920), +PARTITION p6865 VALUES LESS THAN (54928), +PARTITION p6866 VALUES LESS THAN (54936), +PARTITION p6867 VALUES LESS THAN (54944), +PARTITION p6868 VALUES LESS THAN (54952), +PARTITION p6869 VALUES LESS THAN (54960), +PARTITION p6870 VALUES LESS THAN (54968), +PARTITION p6871 VALUES LESS THAN (54976), +PARTITION p6872 VALUES LESS THAN (54984), +PARTITION p6873 VALUES LESS THAN (54992), +PARTITION p6874 VALUES LESS THAN (55000), +PARTITION p6875 VALUES LESS THAN (55008), +PARTITION p6876 VALUES LESS THAN (55016), +PARTITION p6877 VALUES LESS THAN (55024), +PARTITION p6878 VALUES LESS THAN (55032), +PARTITION p6879 VALUES LESS THAN (55040), +PARTITION p6880 VALUES LESS THAN (55048), +PARTITION p6881 VALUES LESS THAN (55056), +PARTITION p6882 VALUES LESS THAN (55064), +PARTITION p6883 VALUES LESS THAN (55072), +PARTITION p6884 VALUES LESS THAN (55080), +PARTITION p6885 VALUES LESS THAN (55088), +PARTITION p6886 VALUES LESS THAN (55096), +PARTITION p6887 VALUES LESS THAN (55104), +PARTITION p6888 VALUES LESS THAN (55112), +PARTITION p6889 VALUES LESS THAN (55120), +PARTITION p6890 VALUES LESS THAN (55128), +PARTITION p6891 VALUES LESS THAN (55136), +PARTITION p6892 VALUES LESS THAN (55144), +PARTITION p6893 VALUES LESS THAN (55152), +PARTITION p6894 VALUES LESS THAN (55160), +PARTITION p6895 VALUES LESS THAN (55168), +PARTITION p6896 VALUES LESS THAN (55176), +PARTITION p6897 VALUES LESS THAN (55184), +PARTITION p6898 VALUES LESS THAN (55192), +PARTITION p6899 VALUES LESS THAN (55200), +PARTITION p6900 VALUES LESS THAN (55208), +PARTITION p6901 VALUES LESS THAN (55216), +PARTITION p6902 VALUES LESS THAN (55224), +PARTITION p6903 VALUES LESS THAN (55232), +PARTITION p6904 VALUES LESS THAN (55240), +PARTITION p6905 VALUES LESS THAN (55248), +PARTITION p6906 VALUES LESS THAN (55256), +PARTITION p6907 VALUES LESS THAN (55264), +PARTITION p6908 VALUES LESS THAN (55272), +PARTITION p6909 VALUES LESS THAN (55280), +PARTITION p6910 VALUES LESS THAN (55288), +PARTITION p6911 VALUES LESS THAN (55296), +PARTITION p6912 VALUES LESS THAN (55304), +PARTITION p6913 VALUES LESS THAN (55312), +PARTITION p6914 VALUES LESS THAN (55320), +PARTITION p6915 VALUES LESS THAN (55328), +PARTITION p6916 VALUES LESS THAN (55336), +PARTITION p6917 VALUES LESS THAN (55344), +PARTITION p6918 VALUES LESS THAN (55352), +PARTITION p6919 VALUES LESS THAN (55360), +PARTITION p6920 VALUES LESS THAN (55368), +PARTITION p6921 VALUES LESS THAN (55376), +PARTITION p6922 VALUES LESS THAN (55384), +PARTITION p6923 VALUES LESS THAN (55392), +PARTITION p6924 VALUES LESS THAN (55400), +PARTITION p6925 VALUES LESS THAN (55408), +PARTITION p6926 VALUES LESS THAN (55416), +PARTITION p6927 VALUES LESS THAN (55424), +PARTITION p6928 VALUES LESS THAN (55432), +PARTITION p6929 VALUES LESS THAN (55440), +PARTITION p6930 VALUES LESS THAN (55448), +PARTITION p6931 VALUES LESS THAN (55456), +PARTITION p6932 VALUES LESS THAN (55464), +PARTITION p6933 VALUES LESS THAN (55472), +PARTITION p6934 VALUES LESS THAN (55480), +PARTITION p6935 VALUES LESS THAN (55488), +PARTITION p6936 VALUES LESS THAN (55496), +PARTITION p6937 VALUES LESS THAN (55504), +PARTITION p6938 VALUES LESS THAN (55512), +PARTITION p6939 VALUES LESS THAN (55520), +PARTITION p6940 VALUES LESS THAN (55528), +PARTITION p6941 VALUES LESS THAN (55536), +PARTITION p6942 VALUES LESS THAN (55544), +PARTITION p6943 VALUES LESS THAN (55552), +PARTITION p6944 VALUES LESS THAN (55560), +PARTITION p6945 VALUES LESS THAN (55568), +PARTITION p6946 VALUES LESS THAN (55576), +PARTITION p6947 VALUES LESS THAN (55584), +PARTITION p6948 VALUES LESS THAN (55592), +PARTITION p6949 VALUES LESS THAN (55600), +PARTITION p6950 VALUES LESS THAN (55608), +PARTITION p6951 VALUES LESS THAN (55616), +PARTITION p6952 VALUES LESS THAN (55624), +PARTITION p6953 VALUES LESS THAN (55632), +PARTITION p6954 VALUES LESS THAN (55640), +PARTITION p6955 VALUES LESS THAN (55648), +PARTITION p6956 VALUES LESS THAN (55656), +PARTITION p6957 VALUES LESS THAN (55664), +PARTITION p6958 VALUES LESS THAN (55672), +PARTITION p6959 VALUES LESS THAN (55680), +PARTITION p6960 VALUES LESS THAN (55688), +PARTITION p6961 VALUES LESS THAN (55696), +PARTITION p6962 VALUES LESS THAN (55704), +PARTITION p6963 VALUES LESS THAN (55712), +PARTITION p6964 VALUES LESS THAN (55720), +PARTITION p6965 VALUES LESS THAN (55728), +PARTITION p6966 VALUES LESS THAN (55736), +PARTITION p6967 VALUES LESS THAN (55744), +PARTITION p6968 VALUES LESS THAN (55752), +PARTITION p6969 VALUES LESS THAN (55760), +PARTITION p6970 VALUES LESS THAN (55768), +PARTITION p6971 VALUES LESS THAN (55776), +PARTITION p6972 VALUES LESS THAN (55784), +PARTITION p6973 VALUES LESS THAN (55792), +PARTITION p6974 VALUES LESS THAN (55800), +PARTITION p6975 VALUES LESS THAN (55808), +PARTITION p6976 VALUES LESS THAN (55816), +PARTITION p6977 VALUES LESS THAN (55824), +PARTITION p6978 VALUES LESS THAN (55832), +PARTITION p6979 VALUES LESS THAN (55840), +PARTITION p6980 VALUES LESS THAN (55848), +PARTITION p6981 VALUES LESS THAN (55856), +PARTITION p6982 VALUES LESS THAN (55864), +PARTITION p6983 VALUES LESS THAN (55872), +PARTITION p6984 VALUES LESS THAN (55880), +PARTITION p6985 VALUES LESS THAN (55888), +PARTITION p6986 VALUES LESS THAN (55896), +PARTITION p6987 VALUES LESS THAN (55904), +PARTITION p6988 VALUES LESS THAN (55912), +PARTITION p6989 VALUES LESS THAN (55920), +PARTITION p6990 VALUES LESS THAN (55928), +PARTITION p6991 VALUES LESS THAN (55936), +PARTITION p6992 VALUES LESS THAN (55944), +PARTITION p6993 VALUES LESS THAN (55952), +PARTITION p6994 VALUES LESS THAN (55960), +PARTITION p6995 VALUES LESS THAN (55968), +PARTITION p6996 VALUES LESS THAN (55976), +PARTITION p6997 VALUES LESS THAN (55984), +PARTITION p6998 VALUES LESS THAN (55992), +PARTITION p6999 VALUES LESS THAN (56000), +PARTITION p7000 VALUES LESS THAN (56008), +PARTITION p7001 VALUES LESS THAN (56016), +PARTITION p7002 VALUES LESS THAN (56024), +PARTITION p7003 VALUES LESS THAN (56032), +PARTITION p7004 VALUES LESS THAN (56040), +PARTITION p7005 VALUES LESS THAN (56048), +PARTITION p7006 VALUES LESS THAN (56056), +PARTITION p7007 VALUES LESS THAN (56064), +PARTITION p7008 VALUES LESS THAN (56072), +PARTITION p7009 VALUES LESS THAN (56080), +PARTITION p7010 VALUES LESS THAN (56088), +PARTITION p7011 VALUES LESS THAN (56096), +PARTITION p7012 VALUES LESS THAN (56104), +PARTITION p7013 VALUES LESS THAN (56112), +PARTITION p7014 VALUES LESS THAN (56120), +PARTITION p7015 VALUES LESS THAN (56128), +PARTITION p7016 VALUES LESS THAN (56136), +PARTITION p7017 VALUES LESS THAN (56144), +PARTITION p7018 VALUES LESS THAN (56152), +PARTITION p7019 VALUES LESS THAN (56160), +PARTITION p7020 VALUES LESS THAN (56168), +PARTITION p7021 VALUES LESS THAN (56176), +PARTITION p7022 VALUES LESS THAN (56184), +PARTITION p7023 VALUES LESS THAN (56192), +PARTITION p7024 VALUES LESS THAN (56200), +PARTITION p7025 VALUES LESS THAN (56208), +PARTITION p7026 VALUES LESS THAN (56216), +PARTITION p7027 VALUES LESS THAN (56224), +PARTITION p7028 VALUES LESS THAN (56232), +PARTITION p7029 VALUES LESS THAN (56240), +PARTITION p7030 VALUES LESS THAN (56248), +PARTITION p7031 VALUES LESS THAN (56256), +PARTITION p7032 VALUES LESS THAN (56264), +PARTITION p7033 VALUES LESS THAN (56272), +PARTITION p7034 VALUES LESS THAN (56280), +PARTITION p7035 VALUES LESS THAN (56288), +PARTITION p7036 VALUES LESS THAN (56296), +PARTITION p7037 VALUES LESS THAN (56304), +PARTITION p7038 VALUES LESS THAN (56312), +PARTITION p7039 VALUES LESS THAN (56320), +PARTITION p7040 VALUES LESS THAN (56328), +PARTITION p7041 VALUES LESS THAN (56336), +PARTITION p7042 VALUES LESS THAN (56344), +PARTITION p7043 VALUES LESS THAN (56352), +PARTITION p7044 VALUES LESS THAN (56360), +PARTITION p7045 VALUES LESS THAN (56368), +PARTITION p7046 VALUES LESS THAN (56376), +PARTITION p7047 VALUES LESS THAN (56384), +PARTITION p7048 VALUES LESS THAN (56392), +PARTITION p7049 VALUES LESS THAN (56400), +PARTITION p7050 VALUES LESS THAN (56408), +PARTITION p7051 VALUES LESS THAN (56416), +PARTITION p7052 VALUES LESS THAN (56424), +PARTITION p7053 VALUES LESS THAN (56432), +PARTITION p7054 VALUES LESS THAN (56440), +PARTITION p7055 VALUES LESS THAN (56448), +PARTITION p7056 VALUES LESS THAN (56456), +PARTITION p7057 VALUES LESS THAN (56464), +PARTITION p7058 VALUES LESS THAN (56472), +PARTITION p7059 VALUES LESS THAN (56480), +PARTITION p7060 VALUES LESS THAN (56488), +PARTITION p7061 VALUES LESS THAN (56496), +PARTITION p7062 VALUES LESS THAN (56504), +PARTITION p7063 VALUES LESS THAN (56512), +PARTITION p7064 VALUES LESS THAN (56520), +PARTITION p7065 VALUES LESS THAN (56528), +PARTITION p7066 VALUES LESS THAN (56536), +PARTITION p7067 VALUES LESS THAN (56544), +PARTITION p7068 VALUES LESS THAN (56552), +PARTITION p7069 VALUES LESS THAN (56560), +PARTITION p7070 VALUES LESS THAN (56568), +PARTITION p7071 VALUES LESS THAN (56576), +PARTITION p7072 VALUES LESS THAN (56584), +PARTITION p7073 VALUES LESS THAN (56592), +PARTITION p7074 VALUES LESS THAN (56600), +PARTITION p7075 VALUES LESS THAN (56608), +PARTITION p7076 VALUES LESS THAN (56616), +PARTITION p7077 VALUES LESS THAN (56624), +PARTITION p7078 VALUES LESS THAN (56632), +PARTITION p7079 VALUES LESS THAN (56640), +PARTITION p7080 VALUES LESS THAN (56648), +PARTITION p7081 VALUES LESS THAN (56656), +PARTITION p7082 VALUES LESS THAN (56664), +PARTITION p7083 VALUES LESS THAN (56672), +PARTITION p7084 VALUES LESS THAN (56680), +PARTITION p7085 VALUES LESS THAN (56688), +PARTITION p7086 VALUES LESS THAN (56696), +PARTITION p7087 VALUES LESS THAN (56704), +PARTITION p7088 VALUES LESS THAN (56712), +PARTITION p7089 VALUES LESS THAN (56720), +PARTITION p7090 VALUES LESS THAN (56728), +PARTITION p7091 VALUES LESS THAN (56736), +PARTITION p7092 VALUES LESS THAN (56744), +PARTITION p7093 VALUES LESS THAN (56752), +PARTITION p7094 VALUES LESS THAN (56760), +PARTITION p7095 VALUES LESS THAN (56768), +PARTITION p7096 VALUES LESS THAN (56776), +PARTITION p7097 VALUES LESS THAN (56784), +PARTITION p7098 VALUES LESS THAN (56792), +PARTITION p7099 VALUES LESS THAN (56800), +PARTITION p7100 VALUES LESS THAN (56808), +PARTITION p7101 VALUES LESS THAN (56816), +PARTITION p7102 VALUES LESS THAN (56824), +PARTITION p7103 VALUES LESS THAN (56832), +PARTITION p7104 VALUES LESS THAN (56840), +PARTITION p7105 VALUES LESS THAN (56848), +PARTITION p7106 VALUES LESS THAN (56856), +PARTITION p7107 VALUES LESS THAN (56864), +PARTITION p7108 VALUES LESS THAN (56872), +PARTITION p7109 VALUES LESS THAN (56880), +PARTITION p7110 VALUES LESS THAN (56888), +PARTITION p7111 VALUES LESS THAN (56896), +PARTITION p7112 VALUES LESS THAN (56904), +PARTITION p7113 VALUES LESS THAN (56912), +PARTITION p7114 VALUES LESS THAN (56920), +PARTITION p7115 VALUES LESS THAN (56928), +PARTITION p7116 VALUES LESS THAN (56936), +PARTITION p7117 VALUES LESS THAN (56944), +PARTITION p7118 VALUES LESS THAN (56952), +PARTITION p7119 VALUES LESS THAN (56960), +PARTITION p7120 VALUES LESS THAN (56968), +PARTITION p7121 VALUES LESS THAN (56976), +PARTITION p7122 VALUES LESS THAN (56984), +PARTITION p7123 VALUES LESS THAN (56992), +PARTITION p7124 VALUES LESS THAN (57000), +PARTITION p7125 VALUES LESS THAN (57008), +PARTITION p7126 VALUES LESS THAN (57016), +PARTITION p7127 VALUES LESS THAN (57024), +PARTITION p7128 VALUES LESS THAN (57032), +PARTITION p7129 VALUES LESS THAN (57040), +PARTITION p7130 VALUES LESS THAN (57048), +PARTITION p7131 VALUES LESS THAN (57056), +PARTITION p7132 VALUES LESS THAN (57064), +PARTITION p7133 VALUES LESS THAN (57072), +PARTITION p7134 VALUES LESS THAN (57080), +PARTITION p7135 VALUES LESS THAN (57088), +PARTITION p7136 VALUES LESS THAN (57096), +PARTITION p7137 VALUES LESS THAN (57104), +PARTITION p7138 VALUES LESS THAN (57112), +PARTITION p7139 VALUES LESS THAN (57120), +PARTITION p7140 VALUES LESS THAN (57128), +PARTITION p7141 VALUES LESS THAN (57136), +PARTITION p7142 VALUES LESS THAN (57144), +PARTITION p7143 VALUES LESS THAN (57152), +PARTITION p7144 VALUES LESS THAN (57160), +PARTITION p7145 VALUES LESS THAN (57168), +PARTITION p7146 VALUES LESS THAN (57176), +PARTITION p7147 VALUES LESS THAN (57184), +PARTITION p7148 VALUES LESS THAN (57192), +PARTITION p7149 VALUES LESS THAN (57200), +PARTITION p7150 VALUES LESS THAN (57208), +PARTITION p7151 VALUES LESS THAN (57216), +PARTITION p7152 VALUES LESS THAN (57224), +PARTITION p7153 VALUES LESS THAN (57232), +PARTITION p7154 VALUES LESS THAN (57240), +PARTITION p7155 VALUES LESS THAN (57248), +PARTITION p7156 VALUES LESS THAN (57256), +PARTITION p7157 VALUES LESS THAN (57264), +PARTITION p7158 VALUES LESS THAN (57272), +PARTITION p7159 VALUES LESS THAN (57280), +PARTITION p7160 VALUES LESS THAN (57288), +PARTITION p7161 VALUES LESS THAN (57296), +PARTITION p7162 VALUES LESS THAN (57304), +PARTITION p7163 VALUES LESS THAN (57312), +PARTITION p7164 VALUES LESS THAN (57320), +PARTITION p7165 VALUES LESS THAN (57328), +PARTITION p7166 VALUES LESS THAN (57336), +PARTITION p7167 VALUES LESS THAN (57344), +PARTITION p7168 VALUES LESS THAN (57352), +PARTITION p7169 VALUES LESS THAN (57360), +PARTITION p7170 VALUES LESS THAN (57368), +PARTITION p7171 VALUES LESS THAN (57376), +PARTITION p7172 VALUES LESS THAN (57384), +PARTITION p7173 VALUES LESS THAN (57392), +PARTITION p7174 VALUES LESS THAN (57400), +PARTITION p7175 VALUES LESS THAN (57408), +PARTITION p7176 VALUES LESS THAN (57416), +PARTITION p7177 VALUES LESS THAN (57424), +PARTITION p7178 VALUES LESS THAN (57432), +PARTITION p7179 VALUES LESS THAN (57440), +PARTITION p7180 VALUES LESS THAN (57448), +PARTITION p7181 VALUES LESS THAN (57456), +PARTITION p7182 VALUES LESS THAN (57464), +PARTITION p7183 VALUES LESS THAN (57472), +PARTITION p7184 VALUES LESS THAN (57480), +PARTITION p7185 VALUES LESS THAN (57488), +PARTITION p7186 VALUES LESS THAN (57496), +PARTITION p7187 VALUES LESS THAN (57504), +PARTITION p7188 VALUES LESS THAN (57512), +PARTITION p7189 VALUES LESS THAN (57520), +PARTITION p7190 VALUES LESS THAN (57528), +PARTITION p7191 VALUES LESS THAN (57536), +PARTITION p7192 VALUES LESS THAN (57544), +PARTITION p7193 VALUES LESS THAN (57552), +PARTITION p7194 VALUES LESS THAN (57560), +PARTITION p7195 VALUES LESS THAN (57568), +PARTITION p7196 VALUES LESS THAN (57576), +PARTITION p7197 VALUES LESS THAN (57584), +PARTITION p7198 VALUES LESS THAN (57592), +PARTITION p7199 VALUES LESS THAN (57600), +PARTITION p7200 VALUES LESS THAN (57608), +PARTITION p7201 VALUES LESS THAN (57616), +PARTITION p7202 VALUES LESS THAN (57624), +PARTITION p7203 VALUES LESS THAN (57632), +PARTITION p7204 VALUES LESS THAN (57640), +PARTITION p7205 VALUES LESS THAN (57648), +PARTITION p7206 VALUES LESS THAN (57656), +PARTITION p7207 VALUES LESS THAN (57664), +PARTITION p7208 VALUES LESS THAN (57672), +PARTITION p7209 VALUES LESS THAN (57680), +PARTITION p7210 VALUES LESS THAN (57688), +PARTITION p7211 VALUES LESS THAN (57696), +PARTITION p7212 VALUES LESS THAN (57704), +PARTITION p7213 VALUES LESS THAN (57712), +PARTITION p7214 VALUES LESS THAN (57720), +PARTITION p7215 VALUES LESS THAN (57728), +PARTITION p7216 VALUES LESS THAN (57736), +PARTITION p7217 VALUES LESS THAN (57744), +PARTITION p7218 VALUES LESS THAN (57752), +PARTITION p7219 VALUES LESS THAN (57760), +PARTITION p7220 VALUES LESS THAN (57768), +PARTITION p7221 VALUES LESS THAN (57776), +PARTITION p7222 VALUES LESS THAN (57784), +PARTITION p7223 VALUES LESS THAN (57792), +PARTITION p7224 VALUES LESS THAN (57800), +PARTITION p7225 VALUES LESS THAN (57808), +PARTITION p7226 VALUES LESS THAN (57816), +PARTITION p7227 VALUES LESS THAN (57824), +PARTITION p7228 VALUES LESS THAN (57832), +PARTITION p7229 VALUES LESS THAN (57840), +PARTITION p7230 VALUES LESS THAN (57848), +PARTITION p7231 VALUES LESS THAN (57856), +PARTITION p7232 VALUES LESS THAN (57864), +PARTITION p7233 VALUES LESS THAN (57872), +PARTITION p7234 VALUES LESS THAN (57880), +PARTITION p7235 VALUES LESS THAN (57888), +PARTITION p7236 VALUES LESS THAN (57896), +PARTITION p7237 VALUES LESS THAN (57904), +PARTITION p7238 VALUES LESS THAN (57912), +PARTITION p7239 VALUES LESS THAN (57920), +PARTITION p7240 VALUES LESS THAN (57928), +PARTITION p7241 VALUES LESS THAN (57936), +PARTITION p7242 VALUES LESS THAN (57944), +PARTITION p7243 VALUES LESS THAN (57952), +PARTITION p7244 VALUES LESS THAN (57960), +PARTITION p7245 VALUES LESS THAN (57968), +PARTITION p7246 VALUES LESS THAN (57976), +PARTITION p7247 VALUES LESS THAN (57984), +PARTITION p7248 VALUES LESS THAN (57992), +PARTITION p7249 VALUES LESS THAN (58000), +PARTITION p7250 VALUES LESS THAN (58008), +PARTITION p7251 VALUES LESS THAN (58016), +PARTITION p7252 VALUES LESS THAN (58024), +PARTITION p7253 VALUES LESS THAN (58032), +PARTITION p7254 VALUES LESS THAN (58040), +PARTITION p7255 VALUES LESS THAN (58048), +PARTITION p7256 VALUES LESS THAN (58056), +PARTITION p7257 VALUES LESS THAN (58064), +PARTITION p7258 VALUES LESS THAN (58072), +PARTITION p7259 VALUES LESS THAN (58080), +PARTITION p7260 VALUES LESS THAN (58088), +PARTITION p7261 VALUES LESS THAN (58096), +PARTITION p7262 VALUES LESS THAN (58104), +PARTITION p7263 VALUES LESS THAN (58112), +PARTITION p7264 VALUES LESS THAN (58120), +PARTITION p7265 VALUES LESS THAN (58128), +PARTITION p7266 VALUES LESS THAN (58136), +PARTITION p7267 VALUES LESS THAN (58144), +PARTITION p7268 VALUES LESS THAN (58152), +PARTITION p7269 VALUES LESS THAN (58160), +PARTITION p7270 VALUES LESS THAN (58168), +PARTITION p7271 VALUES LESS THAN (58176), +PARTITION p7272 VALUES LESS THAN (58184), +PARTITION p7273 VALUES LESS THAN (58192), +PARTITION p7274 VALUES LESS THAN (58200), +PARTITION p7275 VALUES LESS THAN (58208), +PARTITION p7276 VALUES LESS THAN (58216), +PARTITION p7277 VALUES LESS THAN (58224), +PARTITION p7278 VALUES LESS THAN (58232), +PARTITION p7279 VALUES LESS THAN (58240), +PARTITION p7280 VALUES LESS THAN (58248), +PARTITION p7281 VALUES LESS THAN (58256), +PARTITION p7282 VALUES LESS THAN (58264), +PARTITION p7283 VALUES LESS THAN (58272), +PARTITION p7284 VALUES LESS THAN (58280), +PARTITION p7285 VALUES LESS THAN (58288), +PARTITION p7286 VALUES LESS THAN (58296), +PARTITION p7287 VALUES LESS THAN (58304), +PARTITION p7288 VALUES LESS THAN (58312), +PARTITION p7289 VALUES LESS THAN (58320), +PARTITION p7290 VALUES LESS THAN (58328), +PARTITION p7291 VALUES LESS THAN (58336), +PARTITION p7292 VALUES LESS THAN (58344), +PARTITION p7293 VALUES LESS THAN (58352), +PARTITION p7294 VALUES LESS THAN (58360), +PARTITION p7295 VALUES LESS THAN (58368), +PARTITION p7296 VALUES LESS THAN (58376), +PARTITION p7297 VALUES LESS THAN (58384), +PARTITION p7298 VALUES LESS THAN (58392), +PARTITION p7299 VALUES LESS THAN (58400), +PARTITION p7300 VALUES LESS THAN (58408), +PARTITION p7301 VALUES LESS THAN (58416), +PARTITION p7302 VALUES LESS THAN (58424), +PARTITION p7303 VALUES LESS THAN (58432), +PARTITION p7304 VALUES LESS THAN (58440), +PARTITION p7305 VALUES LESS THAN (58448), +PARTITION p7306 VALUES LESS THAN (58456), +PARTITION p7307 VALUES LESS THAN (58464), +PARTITION p7308 VALUES LESS THAN (58472), +PARTITION p7309 VALUES LESS THAN (58480), +PARTITION p7310 VALUES LESS THAN (58488), +PARTITION p7311 VALUES LESS THAN (58496), +PARTITION p7312 VALUES LESS THAN (58504), +PARTITION p7313 VALUES LESS THAN (58512), +PARTITION p7314 VALUES LESS THAN (58520), +PARTITION p7315 VALUES LESS THAN (58528), +PARTITION p7316 VALUES LESS THAN (58536), +PARTITION p7317 VALUES LESS THAN (58544), +PARTITION p7318 VALUES LESS THAN (58552), +PARTITION p7319 VALUES LESS THAN (58560), +PARTITION p7320 VALUES LESS THAN (58568), +PARTITION p7321 VALUES LESS THAN (58576), +PARTITION p7322 VALUES LESS THAN (58584), +PARTITION p7323 VALUES LESS THAN (58592), +PARTITION p7324 VALUES LESS THAN (58600), +PARTITION p7325 VALUES LESS THAN (58608), +PARTITION p7326 VALUES LESS THAN (58616), +PARTITION p7327 VALUES LESS THAN (58624), +PARTITION p7328 VALUES LESS THAN (58632), +PARTITION p7329 VALUES LESS THAN (58640), +PARTITION p7330 VALUES LESS THAN (58648), +PARTITION p7331 VALUES LESS THAN (58656), +PARTITION p7332 VALUES LESS THAN (58664), +PARTITION p7333 VALUES LESS THAN (58672), +PARTITION p7334 VALUES LESS THAN (58680), +PARTITION p7335 VALUES LESS THAN (58688), +PARTITION p7336 VALUES LESS THAN (58696), +PARTITION p7337 VALUES LESS THAN (58704), +PARTITION p7338 VALUES LESS THAN (58712), +PARTITION p7339 VALUES LESS THAN (58720), +PARTITION p7340 VALUES LESS THAN (58728), +PARTITION p7341 VALUES LESS THAN (58736), +PARTITION p7342 VALUES LESS THAN (58744), +PARTITION p7343 VALUES LESS THAN (58752), +PARTITION p7344 VALUES LESS THAN (58760), +PARTITION p7345 VALUES LESS THAN (58768), +PARTITION p7346 VALUES LESS THAN (58776), +PARTITION p7347 VALUES LESS THAN (58784), +PARTITION p7348 VALUES LESS THAN (58792), +PARTITION p7349 VALUES LESS THAN (58800), +PARTITION p7350 VALUES LESS THAN (58808), +PARTITION p7351 VALUES LESS THAN (58816), +PARTITION p7352 VALUES LESS THAN (58824), +PARTITION p7353 VALUES LESS THAN (58832), +PARTITION p7354 VALUES LESS THAN (58840), +PARTITION p7355 VALUES LESS THAN (58848), +PARTITION p7356 VALUES LESS THAN (58856), +PARTITION p7357 VALUES LESS THAN (58864), +PARTITION p7358 VALUES LESS THAN (58872), +PARTITION p7359 VALUES LESS THAN (58880), +PARTITION p7360 VALUES LESS THAN (58888), +PARTITION p7361 VALUES LESS THAN (58896), +PARTITION p7362 VALUES LESS THAN (58904), +PARTITION p7363 VALUES LESS THAN (58912), +PARTITION p7364 VALUES LESS THAN (58920), +PARTITION p7365 VALUES LESS THAN (58928), +PARTITION p7366 VALUES LESS THAN (58936), +PARTITION p7367 VALUES LESS THAN (58944), +PARTITION p7368 VALUES LESS THAN (58952), +PARTITION p7369 VALUES LESS THAN (58960), +PARTITION p7370 VALUES LESS THAN (58968), +PARTITION p7371 VALUES LESS THAN (58976), +PARTITION p7372 VALUES LESS THAN (58984), +PARTITION p7373 VALUES LESS THAN (58992), +PARTITION p7374 VALUES LESS THAN (59000), +PARTITION p7375 VALUES LESS THAN (59008), +PARTITION p7376 VALUES LESS THAN (59016), +PARTITION p7377 VALUES LESS THAN (59024), +PARTITION p7378 VALUES LESS THAN (59032), +PARTITION p7379 VALUES LESS THAN (59040), +PARTITION p7380 VALUES LESS THAN (59048), +PARTITION p7381 VALUES LESS THAN (59056), +PARTITION p7382 VALUES LESS THAN (59064), +PARTITION p7383 VALUES LESS THAN (59072), +PARTITION p7384 VALUES LESS THAN (59080), +PARTITION p7385 VALUES LESS THAN (59088), +PARTITION p7386 VALUES LESS THAN (59096), +PARTITION p7387 VALUES LESS THAN (59104), +PARTITION p7388 VALUES LESS THAN (59112), +PARTITION p7389 VALUES LESS THAN (59120), +PARTITION p7390 VALUES LESS THAN (59128), +PARTITION p7391 VALUES LESS THAN (59136), +PARTITION p7392 VALUES LESS THAN (59144), +PARTITION p7393 VALUES LESS THAN (59152), +PARTITION p7394 VALUES LESS THAN (59160), +PARTITION p7395 VALUES LESS THAN (59168), +PARTITION p7396 VALUES LESS THAN (59176), +PARTITION p7397 VALUES LESS THAN (59184), +PARTITION p7398 VALUES LESS THAN (59192), +PARTITION p7399 VALUES LESS THAN (59200), +PARTITION p7400 VALUES LESS THAN (59208), +PARTITION p7401 VALUES LESS THAN (59216), +PARTITION p7402 VALUES LESS THAN (59224), +PARTITION p7403 VALUES LESS THAN (59232), +PARTITION p7404 VALUES LESS THAN (59240), +PARTITION p7405 VALUES LESS THAN (59248), +PARTITION p7406 VALUES LESS THAN (59256), +PARTITION p7407 VALUES LESS THAN (59264), +PARTITION p7408 VALUES LESS THAN (59272), +PARTITION p7409 VALUES LESS THAN (59280), +PARTITION p7410 VALUES LESS THAN (59288), +PARTITION p7411 VALUES LESS THAN (59296), +PARTITION p7412 VALUES LESS THAN (59304), +PARTITION p7413 VALUES LESS THAN (59312), +PARTITION p7414 VALUES LESS THAN (59320), +PARTITION p7415 VALUES LESS THAN (59328), +PARTITION p7416 VALUES LESS THAN (59336), +PARTITION p7417 VALUES LESS THAN (59344), +PARTITION p7418 VALUES LESS THAN (59352), +PARTITION p7419 VALUES LESS THAN (59360), +PARTITION p7420 VALUES LESS THAN (59368), +PARTITION p7421 VALUES LESS THAN (59376), +PARTITION p7422 VALUES LESS THAN (59384), +PARTITION p7423 VALUES LESS THAN (59392), +PARTITION p7424 VALUES LESS THAN (59400), +PARTITION p7425 VALUES LESS THAN (59408), +PARTITION p7426 VALUES LESS THAN (59416), +PARTITION p7427 VALUES LESS THAN (59424), +PARTITION p7428 VALUES LESS THAN (59432), +PARTITION p7429 VALUES LESS THAN (59440), +PARTITION p7430 VALUES LESS THAN (59448), +PARTITION p7431 VALUES LESS THAN (59456), +PARTITION p7432 VALUES LESS THAN (59464), +PARTITION p7433 VALUES LESS THAN (59472), +PARTITION p7434 VALUES LESS THAN (59480), +PARTITION p7435 VALUES LESS THAN (59488), +PARTITION p7436 VALUES LESS THAN (59496), +PARTITION p7437 VALUES LESS THAN (59504), +PARTITION p7438 VALUES LESS THAN (59512), +PARTITION p7439 VALUES LESS THAN (59520), +PARTITION p7440 VALUES LESS THAN (59528), +PARTITION p7441 VALUES LESS THAN (59536), +PARTITION p7442 VALUES LESS THAN (59544), +PARTITION p7443 VALUES LESS THAN (59552), +PARTITION p7444 VALUES LESS THAN (59560), +PARTITION p7445 VALUES LESS THAN (59568), +PARTITION p7446 VALUES LESS THAN (59576), +PARTITION p7447 VALUES LESS THAN (59584), +PARTITION p7448 VALUES LESS THAN (59592), +PARTITION p7449 VALUES LESS THAN (59600), +PARTITION p7450 VALUES LESS THAN (59608), +PARTITION p7451 VALUES LESS THAN (59616), +PARTITION p7452 VALUES LESS THAN (59624), +PARTITION p7453 VALUES LESS THAN (59632), +PARTITION p7454 VALUES LESS THAN (59640), +PARTITION p7455 VALUES LESS THAN (59648), +PARTITION p7456 VALUES LESS THAN (59656), +PARTITION p7457 VALUES LESS THAN (59664), +PARTITION p7458 VALUES LESS THAN (59672), +PARTITION p7459 VALUES LESS THAN (59680), +PARTITION p7460 VALUES LESS THAN (59688), +PARTITION p7461 VALUES LESS THAN (59696), +PARTITION p7462 VALUES LESS THAN (59704), +PARTITION p7463 VALUES LESS THAN (59712), +PARTITION p7464 VALUES LESS THAN (59720), +PARTITION p7465 VALUES LESS THAN (59728), +PARTITION p7466 VALUES LESS THAN (59736), +PARTITION p7467 VALUES LESS THAN (59744), +PARTITION p7468 VALUES LESS THAN (59752), +PARTITION p7469 VALUES LESS THAN (59760), +PARTITION p7470 VALUES LESS THAN (59768), +PARTITION p7471 VALUES LESS THAN (59776), +PARTITION p7472 VALUES LESS THAN (59784), +PARTITION p7473 VALUES LESS THAN (59792), +PARTITION p7474 VALUES LESS THAN (59800), +PARTITION p7475 VALUES LESS THAN (59808), +PARTITION p7476 VALUES LESS THAN (59816), +PARTITION p7477 VALUES LESS THAN (59824), +PARTITION p7478 VALUES LESS THAN (59832), +PARTITION p7479 VALUES LESS THAN (59840), +PARTITION p7480 VALUES LESS THAN (59848), +PARTITION p7481 VALUES LESS THAN (59856), +PARTITION p7482 VALUES LESS THAN (59864), +PARTITION p7483 VALUES LESS THAN (59872), +PARTITION p7484 VALUES LESS THAN (59880), +PARTITION p7485 VALUES LESS THAN (59888), +PARTITION p7486 VALUES LESS THAN (59896), +PARTITION p7487 VALUES LESS THAN (59904), +PARTITION p7488 VALUES LESS THAN (59912), +PARTITION p7489 VALUES LESS THAN (59920), +PARTITION p7490 VALUES LESS THAN (59928), +PARTITION p7491 VALUES LESS THAN (59936), +PARTITION p7492 VALUES LESS THAN (59944), +PARTITION p7493 VALUES LESS THAN (59952), +PARTITION p7494 VALUES LESS THAN (59960), +PARTITION p7495 VALUES LESS THAN (59968), +PARTITION p7496 VALUES LESS THAN (59976), +PARTITION p7497 VALUES LESS THAN (59984), +PARTITION p7498 VALUES LESS THAN (59992), +PARTITION p7499 VALUES LESS THAN (60000), +PARTITION p7500 VALUES LESS THAN (60008), +PARTITION p7501 VALUES LESS THAN (60016), +PARTITION p7502 VALUES LESS THAN (60024), +PARTITION p7503 VALUES LESS THAN (60032), +PARTITION p7504 VALUES LESS THAN (60040), +PARTITION p7505 VALUES LESS THAN (60048), +PARTITION p7506 VALUES LESS THAN (60056), +PARTITION p7507 VALUES LESS THAN (60064), +PARTITION p7508 VALUES LESS THAN (60072), +PARTITION p7509 VALUES LESS THAN (60080), +PARTITION p7510 VALUES LESS THAN (60088), +PARTITION p7511 VALUES LESS THAN (60096), +PARTITION p7512 VALUES LESS THAN (60104), +PARTITION p7513 VALUES LESS THAN (60112), +PARTITION p7514 VALUES LESS THAN (60120), +PARTITION p7515 VALUES LESS THAN (60128), +PARTITION p7516 VALUES LESS THAN (60136), +PARTITION p7517 VALUES LESS THAN (60144), +PARTITION p7518 VALUES LESS THAN (60152), +PARTITION p7519 VALUES LESS THAN (60160), +PARTITION p7520 VALUES LESS THAN (60168), +PARTITION p7521 VALUES LESS THAN (60176), +PARTITION p7522 VALUES LESS THAN (60184), +PARTITION p7523 VALUES LESS THAN (60192), +PARTITION p7524 VALUES LESS THAN (60200), +PARTITION p7525 VALUES LESS THAN (60208), +PARTITION p7526 VALUES LESS THAN (60216), +PARTITION p7527 VALUES LESS THAN (60224), +PARTITION p7528 VALUES LESS THAN (60232), +PARTITION p7529 VALUES LESS THAN (60240), +PARTITION p7530 VALUES LESS THAN (60248), +PARTITION p7531 VALUES LESS THAN (60256), +PARTITION p7532 VALUES LESS THAN (60264), +PARTITION p7533 VALUES LESS THAN (60272), +PARTITION p7534 VALUES LESS THAN (60280), +PARTITION p7535 VALUES LESS THAN (60288), +PARTITION p7536 VALUES LESS THAN (60296), +PARTITION p7537 VALUES LESS THAN (60304), +PARTITION p7538 VALUES LESS THAN (60312), +PARTITION p7539 VALUES LESS THAN (60320), +PARTITION p7540 VALUES LESS THAN (60328), +PARTITION p7541 VALUES LESS THAN (60336), +PARTITION p7542 VALUES LESS THAN (60344), +PARTITION p7543 VALUES LESS THAN (60352), +PARTITION p7544 VALUES LESS THAN (60360), +PARTITION p7545 VALUES LESS THAN (60368), +PARTITION p7546 VALUES LESS THAN (60376), +PARTITION p7547 VALUES LESS THAN (60384), +PARTITION p7548 VALUES LESS THAN (60392), +PARTITION p7549 VALUES LESS THAN (60400), +PARTITION p7550 VALUES LESS THAN (60408), +PARTITION p7551 VALUES LESS THAN (60416), +PARTITION p7552 VALUES LESS THAN (60424), +PARTITION p7553 VALUES LESS THAN (60432), +PARTITION p7554 VALUES LESS THAN (60440), +PARTITION p7555 VALUES LESS THAN (60448), +PARTITION p7556 VALUES LESS THAN (60456), +PARTITION p7557 VALUES LESS THAN (60464), +PARTITION p7558 VALUES LESS THAN (60472), +PARTITION p7559 VALUES LESS THAN (60480), +PARTITION p7560 VALUES LESS THAN (60488), +PARTITION p7561 VALUES LESS THAN (60496), +PARTITION p7562 VALUES LESS THAN (60504), +PARTITION p7563 VALUES LESS THAN (60512), +PARTITION p7564 VALUES LESS THAN (60520), +PARTITION p7565 VALUES LESS THAN (60528), +PARTITION p7566 VALUES LESS THAN (60536), +PARTITION p7567 VALUES LESS THAN (60544), +PARTITION p7568 VALUES LESS THAN (60552), +PARTITION p7569 VALUES LESS THAN (60560), +PARTITION p7570 VALUES LESS THAN (60568), +PARTITION p7571 VALUES LESS THAN (60576), +PARTITION p7572 VALUES LESS THAN (60584), +PARTITION p7573 VALUES LESS THAN (60592), +PARTITION p7574 VALUES LESS THAN (60600), +PARTITION p7575 VALUES LESS THAN (60608), +PARTITION p7576 VALUES LESS THAN (60616), +PARTITION p7577 VALUES LESS THAN (60624), +PARTITION p7578 VALUES LESS THAN (60632), +PARTITION p7579 VALUES LESS THAN (60640), +PARTITION p7580 VALUES LESS THAN (60648), +PARTITION p7581 VALUES LESS THAN (60656), +PARTITION p7582 VALUES LESS THAN (60664), +PARTITION p7583 VALUES LESS THAN (60672), +PARTITION p7584 VALUES LESS THAN (60680), +PARTITION p7585 VALUES LESS THAN (60688), +PARTITION p7586 VALUES LESS THAN (60696), +PARTITION p7587 VALUES LESS THAN (60704), +PARTITION p7588 VALUES LESS THAN (60712), +PARTITION p7589 VALUES LESS THAN (60720), +PARTITION p7590 VALUES LESS THAN (60728), +PARTITION p7591 VALUES LESS THAN (60736), +PARTITION p7592 VALUES LESS THAN (60744), +PARTITION p7593 VALUES LESS THAN (60752), +PARTITION p7594 VALUES LESS THAN (60760), +PARTITION p7595 VALUES LESS THAN (60768), +PARTITION p7596 VALUES LESS THAN (60776), +PARTITION p7597 VALUES LESS THAN (60784), +PARTITION p7598 VALUES LESS THAN (60792), +PARTITION p7599 VALUES LESS THAN (60800), +PARTITION p7600 VALUES LESS THAN (60808), +PARTITION p7601 VALUES LESS THAN (60816), +PARTITION p7602 VALUES LESS THAN (60824), +PARTITION p7603 VALUES LESS THAN (60832), +PARTITION p7604 VALUES LESS THAN (60840), +PARTITION p7605 VALUES LESS THAN (60848), +PARTITION p7606 VALUES LESS THAN (60856), +PARTITION p7607 VALUES LESS THAN (60864), +PARTITION p7608 VALUES LESS THAN (60872), +PARTITION p7609 VALUES LESS THAN (60880), +PARTITION p7610 VALUES LESS THAN (60888), +PARTITION p7611 VALUES LESS THAN (60896), +PARTITION p7612 VALUES LESS THAN (60904), +PARTITION p7613 VALUES LESS THAN (60912), +PARTITION p7614 VALUES LESS THAN (60920), +PARTITION p7615 VALUES LESS THAN (60928), +PARTITION p7616 VALUES LESS THAN (60936), +PARTITION p7617 VALUES LESS THAN (60944), +PARTITION p7618 VALUES LESS THAN (60952), +PARTITION p7619 VALUES LESS THAN (60960), +PARTITION p7620 VALUES LESS THAN (60968), +PARTITION p7621 VALUES LESS THAN (60976), +PARTITION p7622 VALUES LESS THAN (60984), +PARTITION p7623 VALUES LESS THAN (60992), +PARTITION p7624 VALUES LESS THAN (61000), +PARTITION p7625 VALUES LESS THAN (61008), +PARTITION p7626 VALUES LESS THAN (61016), +PARTITION p7627 VALUES LESS THAN (61024), +PARTITION p7628 VALUES LESS THAN (61032), +PARTITION p7629 VALUES LESS THAN (61040), +PARTITION p7630 VALUES LESS THAN (61048), +PARTITION p7631 VALUES LESS THAN (61056), +PARTITION p7632 VALUES LESS THAN (61064), +PARTITION p7633 VALUES LESS THAN (61072), +PARTITION p7634 VALUES LESS THAN (61080), +PARTITION p7635 VALUES LESS THAN (61088), +PARTITION p7636 VALUES LESS THAN (61096), +PARTITION p7637 VALUES LESS THAN (61104), +PARTITION p7638 VALUES LESS THAN (61112), +PARTITION p7639 VALUES LESS THAN (61120), +PARTITION p7640 VALUES LESS THAN (61128), +PARTITION p7641 VALUES LESS THAN (61136), +PARTITION p7642 VALUES LESS THAN (61144), +PARTITION p7643 VALUES LESS THAN (61152), +PARTITION p7644 VALUES LESS THAN (61160), +PARTITION p7645 VALUES LESS THAN (61168), +PARTITION p7646 VALUES LESS THAN (61176), +PARTITION p7647 VALUES LESS THAN (61184), +PARTITION p7648 VALUES LESS THAN (61192), +PARTITION p7649 VALUES LESS THAN (61200), +PARTITION p7650 VALUES LESS THAN (61208), +PARTITION p7651 VALUES LESS THAN (61216), +PARTITION p7652 VALUES LESS THAN (61224), +PARTITION p7653 VALUES LESS THAN (61232), +PARTITION p7654 VALUES LESS THAN (61240), +PARTITION p7655 VALUES LESS THAN (61248), +PARTITION p7656 VALUES LESS THAN (61256), +PARTITION p7657 VALUES LESS THAN (61264), +PARTITION p7658 VALUES LESS THAN (61272), +PARTITION p7659 VALUES LESS THAN (61280), +PARTITION p7660 VALUES LESS THAN (61288), +PARTITION p7661 VALUES LESS THAN (61296), +PARTITION p7662 VALUES LESS THAN (61304), +PARTITION p7663 VALUES LESS THAN (61312), +PARTITION p7664 VALUES LESS THAN (61320), +PARTITION p7665 VALUES LESS THAN (61328), +PARTITION p7666 VALUES LESS THAN (61336), +PARTITION p7667 VALUES LESS THAN (61344), +PARTITION p7668 VALUES LESS THAN (61352), +PARTITION p7669 VALUES LESS THAN (61360), +PARTITION p7670 VALUES LESS THAN (61368), +PARTITION p7671 VALUES LESS THAN (61376), +PARTITION p7672 VALUES LESS THAN (61384), +PARTITION p7673 VALUES LESS THAN (61392), +PARTITION p7674 VALUES LESS THAN (61400), +PARTITION p7675 VALUES LESS THAN (61408), +PARTITION p7676 VALUES LESS THAN (61416), +PARTITION p7677 VALUES LESS THAN (61424), +PARTITION p7678 VALUES LESS THAN (61432), +PARTITION p7679 VALUES LESS THAN (61440), +PARTITION p7680 VALUES LESS THAN (61448), +PARTITION p7681 VALUES LESS THAN (61456), +PARTITION p7682 VALUES LESS THAN (61464), +PARTITION p7683 VALUES LESS THAN (61472), +PARTITION p7684 VALUES LESS THAN (61480), +PARTITION p7685 VALUES LESS THAN (61488), +PARTITION p7686 VALUES LESS THAN (61496), +PARTITION p7687 VALUES LESS THAN (61504), +PARTITION p7688 VALUES LESS THAN (61512), +PARTITION p7689 VALUES LESS THAN (61520), +PARTITION p7690 VALUES LESS THAN (61528), +PARTITION p7691 VALUES LESS THAN (61536), +PARTITION p7692 VALUES LESS THAN (61544), +PARTITION p7693 VALUES LESS THAN (61552), +PARTITION p7694 VALUES LESS THAN (61560), +PARTITION p7695 VALUES LESS THAN (61568), +PARTITION p7696 VALUES LESS THAN (61576), +PARTITION p7697 VALUES LESS THAN (61584), +PARTITION p7698 VALUES LESS THAN (61592), +PARTITION p7699 VALUES LESS THAN (61600), +PARTITION p7700 VALUES LESS THAN (61608), +PARTITION p7701 VALUES LESS THAN (61616), +PARTITION p7702 VALUES LESS THAN (61624), +PARTITION p7703 VALUES LESS THAN (61632), +PARTITION p7704 VALUES LESS THAN (61640), +PARTITION p7705 VALUES LESS THAN (61648), +PARTITION p7706 VALUES LESS THAN (61656), +PARTITION p7707 VALUES LESS THAN (61664), +PARTITION p7708 VALUES LESS THAN (61672), +PARTITION p7709 VALUES LESS THAN (61680), +PARTITION p7710 VALUES LESS THAN (61688), +PARTITION p7711 VALUES LESS THAN (61696), +PARTITION p7712 VALUES LESS THAN (61704), +PARTITION p7713 VALUES LESS THAN (61712), +PARTITION p7714 VALUES LESS THAN (61720), +PARTITION p7715 VALUES LESS THAN (61728), +PARTITION p7716 VALUES LESS THAN (61736), +PARTITION p7717 VALUES LESS THAN (61744), +PARTITION p7718 VALUES LESS THAN (61752), +PARTITION p7719 VALUES LESS THAN (61760), +PARTITION p7720 VALUES LESS THAN (61768), +PARTITION p7721 VALUES LESS THAN (61776), +PARTITION p7722 VALUES LESS THAN (61784), +PARTITION p7723 VALUES LESS THAN (61792), +PARTITION p7724 VALUES LESS THAN (61800), +PARTITION p7725 VALUES LESS THAN (61808), +PARTITION p7726 VALUES LESS THAN (61816), +PARTITION p7727 VALUES LESS THAN (61824), +PARTITION p7728 VALUES LESS THAN (61832), +PARTITION p7729 VALUES LESS THAN (61840), +PARTITION p7730 VALUES LESS THAN (61848), +PARTITION p7731 VALUES LESS THAN (61856), +PARTITION p7732 VALUES LESS THAN (61864), +PARTITION p7733 VALUES LESS THAN (61872), +PARTITION p7734 VALUES LESS THAN (61880), +PARTITION p7735 VALUES LESS THAN (61888), +PARTITION p7736 VALUES LESS THAN (61896), +PARTITION p7737 VALUES LESS THAN (61904), +PARTITION p7738 VALUES LESS THAN (61912), +PARTITION p7739 VALUES LESS THAN (61920), +PARTITION p7740 VALUES LESS THAN (61928), +PARTITION p7741 VALUES LESS THAN (61936), +PARTITION p7742 VALUES LESS THAN (61944), +PARTITION p7743 VALUES LESS THAN (61952), +PARTITION p7744 VALUES LESS THAN (61960), +PARTITION p7745 VALUES LESS THAN (61968), +PARTITION p7746 VALUES LESS THAN (61976), +PARTITION p7747 VALUES LESS THAN (61984), +PARTITION p7748 VALUES LESS THAN (61992), +PARTITION p7749 VALUES LESS THAN (62000), +PARTITION p7750 VALUES LESS THAN (62008), +PARTITION p7751 VALUES LESS THAN (62016), +PARTITION p7752 VALUES LESS THAN (62024), +PARTITION p7753 VALUES LESS THAN (62032), +PARTITION p7754 VALUES LESS THAN (62040), +PARTITION p7755 VALUES LESS THAN (62048), +PARTITION p7756 VALUES LESS THAN (62056), +PARTITION p7757 VALUES LESS THAN (62064), +PARTITION p7758 VALUES LESS THAN (62072), +PARTITION p7759 VALUES LESS THAN (62080), +PARTITION p7760 VALUES LESS THAN (62088), +PARTITION p7761 VALUES LESS THAN (62096), +PARTITION p7762 VALUES LESS THAN (62104), +PARTITION p7763 VALUES LESS THAN (62112), +PARTITION p7764 VALUES LESS THAN (62120), +PARTITION p7765 VALUES LESS THAN (62128), +PARTITION p7766 VALUES LESS THAN (62136), +PARTITION p7767 VALUES LESS THAN (62144), +PARTITION p7768 VALUES LESS THAN (62152), +PARTITION p7769 VALUES LESS THAN (62160), +PARTITION p7770 VALUES LESS THAN (62168), +PARTITION p7771 VALUES LESS THAN (62176), +PARTITION p7772 VALUES LESS THAN (62184), +PARTITION p7773 VALUES LESS THAN (62192), +PARTITION p7774 VALUES LESS THAN (62200), +PARTITION p7775 VALUES LESS THAN (62208), +PARTITION p7776 VALUES LESS THAN (62216), +PARTITION p7777 VALUES LESS THAN (62224), +PARTITION p7778 VALUES LESS THAN (62232), +PARTITION p7779 VALUES LESS THAN (62240), +PARTITION p7780 VALUES LESS THAN (62248), +PARTITION p7781 VALUES LESS THAN (62256), +PARTITION p7782 VALUES LESS THAN (62264), +PARTITION p7783 VALUES LESS THAN (62272), +PARTITION p7784 VALUES LESS THAN (62280), +PARTITION p7785 VALUES LESS THAN (62288), +PARTITION p7786 VALUES LESS THAN (62296), +PARTITION p7787 VALUES LESS THAN (62304), +PARTITION p7788 VALUES LESS THAN (62312), +PARTITION p7789 VALUES LESS THAN (62320), +PARTITION p7790 VALUES LESS THAN (62328), +PARTITION p7791 VALUES LESS THAN (62336), +PARTITION p7792 VALUES LESS THAN (62344), +PARTITION p7793 VALUES LESS THAN (62352), +PARTITION p7794 VALUES LESS THAN (62360), +PARTITION p7795 VALUES LESS THAN (62368), +PARTITION p7796 VALUES LESS THAN (62376), +PARTITION p7797 VALUES LESS THAN (62384), +PARTITION p7798 VALUES LESS THAN (62392), +PARTITION p7799 VALUES LESS THAN (62400), +PARTITION p7800 VALUES LESS THAN (62408), +PARTITION p7801 VALUES LESS THAN (62416), +PARTITION p7802 VALUES LESS THAN (62424), +PARTITION p7803 VALUES LESS THAN (62432), +PARTITION p7804 VALUES LESS THAN (62440), +PARTITION p7805 VALUES LESS THAN (62448), +PARTITION p7806 VALUES LESS THAN (62456), +PARTITION p7807 VALUES LESS THAN (62464), +PARTITION p7808 VALUES LESS THAN (62472), +PARTITION p7809 VALUES LESS THAN (62480), +PARTITION p7810 VALUES LESS THAN (62488), +PARTITION p7811 VALUES LESS THAN (62496), +PARTITION p7812 VALUES LESS THAN (62504), +PARTITION p7813 VALUES LESS THAN (62512), +PARTITION p7814 VALUES LESS THAN (62520), +PARTITION p7815 VALUES LESS THAN (62528), +PARTITION p7816 VALUES LESS THAN (62536), +PARTITION p7817 VALUES LESS THAN (62544), +PARTITION p7818 VALUES LESS THAN (62552), +PARTITION p7819 VALUES LESS THAN (62560), +PARTITION p7820 VALUES LESS THAN (62568), +PARTITION p7821 VALUES LESS THAN (62576), +PARTITION p7822 VALUES LESS THAN (62584), +PARTITION p7823 VALUES LESS THAN (62592), +PARTITION p7824 VALUES LESS THAN (62600), +PARTITION p7825 VALUES LESS THAN (62608), +PARTITION p7826 VALUES LESS THAN (62616), +PARTITION p7827 VALUES LESS THAN (62624), +PARTITION p7828 VALUES LESS THAN (62632), +PARTITION p7829 VALUES LESS THAN (62640), +PARTITION p7830 VALUES LESS THAN (62648), +PARTITION p7831 VALUES LESS THAN (62656), +PARTITION p7832 VALUES LESS THAN (62664), +PARTITION p7833 VALUES LESS THAN (62672), +PARTITION p7834 VALUES LESS THAN (62680), +PARTITION p7835 VALUES LESS THAN (62688), +PARTITION p7836 VALUES LESS THAN (62696), +PARTITION p7837 VALUES LESS THAN (62704), +PARTITION p7838 VALUES LESS THAN (62712), +PARTITION p7839 VALUES LESS THAN (62720), +PARTITION p7840 VALUES LESS THAN (62728), +PARTITION p7841 VALUES LESS THAN (62736), +PARTITION p7842 VALUES LESS THAN (62744), +PARTITION p7843 VALUES LESS THAN (62752), +PARTITION p7844 VALUES LESS THAN (62760), +PARTITION p7845 VALUES LESS THAN (62768), +PARTITION p7846 VALUES LESS THAN (62776), +PARTITION p7847 VALUES LESS THAN (62784), +PARTITION p7848 VALUES LESS THAN (62792), +PARTITION p7849 VALUES LESS THAN (62800), +PARTITION p7850 VALUES LESS THAN (62808), +PARTITION p7851 VALUES LESS THAN (62816), +PARTITION p7852 VALUES LESS THAN (62824), +PARTITION p7853 VALUES LESS THAN (62832), +PARTITION p7854 VALUES LESS THAN (62840), +PARTITION p7855 VALUES LESS THAN (62848), +PARTITION p7856 VALUES LESS THAN (62856), +PARTITION p7857 VALUES LESS THAN (62864), +PARTITION p7858 VALUES LESS THAN (62872), +PARTITION p7859 VALUES LESS THAN (62880), +PARTITION p7860 VALUES LESS THAN (62888), +PARTITION p7861 VALUES LESS THAN (62896), +PARTITION p7862 VALUES LESS THAN (62904), +PARTITION p7863 VALUES LESS THAN (62912), +PARTITION p7864 VALUES LESS THAN (62920), +PARTITION p7865 VALUES LESS THAN (62928), +PARTITION p7866 VALUES LESS THAN (62936), +PARTITION p7867 VALUES LESS THAN (62944), +PARTITION p7868 VALUES LESS THAN (62952), +PARTITION p7869 VALUES LESS THAN (62960), +PARTITION p7870 VALUES LESS THAN (62968), +PARTITION p7871 VALUES LESS THAN (62976), +PARTITION p7872 VALUES LESS THAN (62984), +PARTITION p7873 VALUES LESS THAN (62992), +PARTITION p7874 VALUES LESS THAN (63000), +PARTITION p7875 VALUES LESS THAN (63008), +PARTITION p7876 VALUES LESS THAN (63016), +PARTITION p7877 VALUES LESS THAN (63024), +PARTITION p7878 VALUES LESS THAN (63032), +PARTITION p7879 VALUES LESS THAN (63040), +PARTITION p7880 VALUES LESS THAN (63048), +PARTITION p7881 VALUES LESS THAN (63056), +PARTITION p7882 VALUES LESS THAN (63064), +PARTITION p7883 VALUES LESS THAN (63072), +PARTITION p7884 VALUES LESS THAN (63080), +PARTITION p7885 VALUES LESS THAN (63088), +PARTITION p7886 VALUES LESS THAN (63096), +PARTITION p7887 VALUES LESS THAN (63104), +PARTITION p7888 VALUES LESS THAN (63112), +PARTITION p7889 VALUES LESS THAN (63120), +PARTITION p7890 VALUES LESS THAN (63128), +PARTITION p7891 VALUES LESS THAN (63136), +PARTITION p7892 VALUES LESS THAN (63144), +PARTITION p7893 VALUES LESS THAN (63152), +PARTITION p7894 VALUES LESS THAN (63160), +PARTITION p7895 VALUES LESS THAN (63168), +PARTITION p7896 VALUES LESS THAN (63176), +PARTITION p7897 VALUES LESS THAN (63184), +PARTITION p7898 VALUES LESS THAN (63192), +PARTITION p7899 VALUES LESS THAN (63200), +PARTITION p7900 VALUES LESS THAN (63208), +PARTITION p7901 VALUES LESS THAN (63216), +PARTITION p7902 VALUES LESS THAN (63224), +PARTITION p7903 VALUES LESS THAN (63232), +PARTITION p7904 VALUES LESS THAN (63240), +PARTITION p7905 VALUES LESS THAN (63248), +PARTITION p7906 VALUES LESS THAN (63256), +PARTITION p7907 VALUES LESS THAN (63264), +PARTITION p7908 VALUES LESS THAN (63272), +PARTITION p7909 VALUES LESS THAN (63280), +PARTITION p7910 VALUES LESS THAN (63288), +PARTITION p7911 VALUES LESS THAN (63296), +PARTITION p7912 VALUES LESS THAN (63304), +PARTITION p7913 VALUES LESS THAN (63312), +PARTITION p7914 VALUES LESS THAN (63320), +PARTITION p7915 VALUES LESS THAN (63328), +PARTITION p7916 VALUES LESS THAN (63336), +PARTITION p7917 VALUES LESS THAN (63344), +PARTITION p7918 VALUES LESS THAN (63352), +PARTITION p7919 VALUES LESS THAN (63360), +PARTITION p7920 VALUES LESS THAN (63368), +PARTITION p7921 VALUES LESS THAN (63376), +PARTITION p7922 VALUES LESS THAN (63384), +PARTITION p7923 VALUES LESS THAN (63392), +PARTITION p7924 VALUES LESS THAN (63400), +PARTITION p7925 VALUES LESS THAN (63408), +PARTITION p7926 VALUES LESS THAN (63416), +PARTITION p7927 VALUES LESS THAN (63424), +PARTITION p7928 VALUES LESS THAN (63432), +PARTITION p7929 VALUES LESS THAN (63440), +PARTITION p7930 VALUES LESS THAN (63448), +PARTITION p7931 VALUES LESS THAN (63456), +PARTITION p7932 VALUES LESS THAN (63464), +PARTITION p7933 VALUES LESS THAN (63472), +PARTITION p7934 VALUES LESS THAN (63480), +PARTITION p7935 VALUES LESS THAN (63488), +PARTITION p7936 VALUES LESS THAN (63496), +PARTITION p7937 VALUES LESS THAN (63504), +PARTITION p7938 VALUES LESS THAN (63512), +PARTITION p7939 VALUES LESS THAN (63520), +PARTITION p7940 VALUES LESS THAN (63528), +PARTITION p7941 VALUES LESS THAN (63536), +PARTITION p7942 VALUES LESS THAN (63544), +PARTITION p7943 VALUES LESS THAN (63552), +PARTITION p7944 VALUES LESS THAN (63560), +PARTITION p7945 VALUES LESS THAN (63568), +PARTITION p7946 VALUES LESS THAN (63576), +PARTITION p7947 VALUES LESS THAN (63584), +PARTITION p7948 VALUES LESS THAN (63592), +PARTITION p7949 VALUES LESS THAN (63600), +PARTITION p7950 VALUES LESS THAN (63608), +PARTITION p7951 VALUES LESS THAN (63616), +PARTITION p7952 VALUES LESS THAN (63624), +PARTITION p7953 VALUES LESS THAN (63632), +PARTITION p7954 VALUES LESS THAN (63640), +PARTITION p7955 VALUES LESS THAN (63648), +PARTITION p7956 VALUES LESS THAN (63656), +PARTITION p7957 VALUES LESS THAN (63664), +PARTITION p7958 VALUES LESS THAN (63672), +PARTITION p7959 VALUES LESS THAN (63680), +PARTITION p7960 VALUES LESS THAN (63688), +PARTITION p7961 VALUES LESS THAN (63696), +PARTITION p7962 VALUES LESS THAN (63704), +PARTITION p7963 VALUES LESS THAN (63712), +PARTITION p7964 VALUES LESS THAN (63720), +PARTITION p7965 VALUES LESS THAN (63728), +PARTITION p7966 VALUES LESS THAN (63736), +PARTITION p7967 VALUES LESS THAN (63744), +PARTITION p7968 VALUES LESS THAN (63752), +PARTITION p7969 VALUES LESS THAN (63760), +PARTITION p7970 VALUES LESS THAN (63768), +PARTITION p7971 VALUES LESS THAN (63776), +PARTITION p7972 VALUES LESS THAN (63784), +PARTITION p7973 VALUES LESS THAN (63792), +PARTITION p7974 VALUES LESS THAN (63800), +PARTITION p7975 VALUES LESS THAN (63808), +PARTITION p7976 VALUES LESS THAN (63816), +PARTITION p7977 VALUES LESS THAN (63824), +PARTITION p7978 VALUES LESS THAN (63832), +PARTITION p7979 VALUES LESS THAN (63840), +PARTITION p7980 VALUES LESS THAN (63848), +PARTITION p7981 VALUES LESS THAN (63856), +PARTITION p7982 VALUES LESS THAN (63864), +PARTITION p7983 VALUES LESS THAN (63872), +PARTITION p7984 VALUES LESS THAN (63880), +PARTITION p7985 VALUES LESS THAN (63888), +PARTITION p7986 VALUES LESS THAN (63896), +PARTITION p7987 VALUES LESS THAN (63904), +PARTITION p7988 VALUES LESS THAN (63912), +PARTITION p7989 VALUES LESS THAN (63920), +PARTITION p7990 VALUES LESS THAN (63928), +PARTITION p7991 VALUES LESS THAN (63936), +PARTITION p7992 VALUES LESS THAN (63944), +PARTITION p7993 VALUES LESS THAN (63952), +PARTITION p7994 VALUES LESS THAN (63960), +PARTITION p7995 VALUES LESS THAN (63968), +PARTITION p7996 VALUES LESS THAN (63976), +PARTITION p7997 VALUES LESS THAN (63984), +PARTITION p7998 VALUES LESS THAN (63992), +PARTITION p7999 VALUES LESS THAN (64000), +PARTITION p8000 VALUES LESS THAN (64008), +PARTITION p8001 VALUES LESS THAN (64016), +PARTITION p8002 VALUES LESS THAN (64024), +PARTITION p8003 VALUES LESS THAN (64032), +PARTITION p8004 VALUES LESS THAN (64040), +PARTITION p8005 VALUES LESS THAN (64048), +PARTITION p8006 VALUES LESS THAN (64056), +PARTITION p8007 VALUES LESS THAN (64064), +PARTITION p8008 VALUES LESS THAN (64072), +PARTITION p8009 VALUES LESS THAN (64080), +PARTITION p8010 VALUES LESS THAN (64088), +PARTITION p8011 VALUES LESS THAN (64096), +PARTITION p8012 VALUES LESS THAN (64104), +PARTITION p8013 VALUES LESS THAN (64112), +PARTITION p8014 VALUES LESS THAN (64120), +PARTITION p8015 VALUES LESS THAN (64128), +PARTITION p8016 VALUES LESS THAN (64136), +PARTITION p8017 VALUES LESS THAN (64144), +PARTITION p8018 VALUES LESS THAN (64152), +PARTITION p8019 VALUES LESS THAN (64160), +PARTITION p8020 VALUES LESS THAN (64168), +PARTITION p8021 VALUES LESS THAN (64176), +PARTITION p8022 VALUES LESS THAN (64184), +PARTITION p8023 VALUES LESS THAN (64192), +PARTITION p8024 VALUES LESS THAN (64200), +PARTITION p8025 VALUES LESS THAN (64208), +PARTITION p8026 VALUES LESS THAN (64216), +PARTITION p8027 VALUES LESS THAN (64224), +PARTITION p8028 VALUES LESS THAN (64232), +PARTITION p8029 VALUES LESS THAN (64240), +PARTITION p8030 VALUES LESS THAN (64248), +PARTITION p8031 VALUES LESS THAN (64256), +PARTITION p8032 VALUES LESS THAN (64264), +PARTITION p8033 VALUES LESS THAN (64272), +PARTITION p8034 VALUES LESS THAN (64280), +PARTITION p8035 VALUES LESS THAN (64288), +PARTITION p8036 VALUES LESS THAN (64296), +PARTITION p8037 VALUES LESS THAN (64304), +PARTITION p8038 VALUES LESS THAN (64312), +PARTITION p8039 VALUES LESS THAN (64320), +PARTITION p8040 VALUES LESS THAN (64328), +PARTITION p8041 VALUES LESS THAN (64336), +PARTITION p8042 VALUES LESS THAN (64344), +PARTITION p8043 VALUES LESS THAN (64352), +PARTITION p8044 VALUES LESS THAN (64360), +PARTITION p8045 VALUES LESS THAN (64368), +PARTITION p8046 VALUES LESS THAN (64376), +PARTITION p8047 VALUES LESS THAN (64384), +PARTITION p8048 VALUES LESS THAN (64392), +PARTITION p8049 VALUES LESS THAN (64400), +PARTITION p8050 VALUES LESS THAN (64408), +PARTITION p8051 VALUES LESS THAN (64416), +PARTITION p8052 VALUES LESS THAN (64424), +PARTITION p8053 VALUES LESS THAN (64432), +PARTITION p8054 VALUES LESS THAN (64440), +PARTITION p8055 VALUES LESS THAN (64448), +PARTITION p8056 VALUES LESS THAN (64456), +PARTITION p8057 VALUES LESS THAN (64464), +PARTITION p8058 VALUES LESS THAN (64472), +PARTITION p8059 VALUES LESS THAN (64480), +PARTITION p8060 VALUES LESS THAN (64488), +PARTITION p8061 VALUES LESS THAN (64496), +PARTITION p8062 VALUES LESS THAN (64504), +PARTITION p8063 VALUES LESS THAN (64512), +PARTITION p8064 VALUES LESS THAN (64520), +PARTITION p8065 VALUES LESS THAN (64528), +PARTITION p8066 VALUES LESS THAN (64536), +PARTITION p8067 VALUES LESS THAN (64544), +PARTITION p8068 VALUES LESS THAN (64552), +PARTITION p8069 VALUES LESS THAN (64560), +PARTITION p8070 VALUES LESS THAN (64568), +PARTITION p8071 VALUES LESS THAN (64576), +PARTITION p8072 VALUES LESS THAN (64584), +PARTITION p8073 VALUES LESS THAN (64592), +PARTITION p8074 VALUES LESS THAN (64600), +PARTITION p8075 VALUES LESS THAN (64608), +PARTITION p8076 VALUES LESS THAN (64616), +PARTITION p8077 VALUES LESS THAN (64624), +PARTITION p8078 VALUES LESS THAN (64632), +PARTITION p8079 VALUES LESS THAN (64640), +PARTITION p8080 VALUES LESS THAN (64648), +PARTITION p8081 VALUES LESS THAN (64656), +PARTITION p8082 VALUES LESS THAN (64664), +PARTITION p8083 VALUES LESS THAN (64672), +PARTITION p8084 VALUES LESS THAN (64680), +PARTITION p8085 VALUES LESS THAN (64688), +PARTITION p8086 VALUES LESS THAN (64696), +PARTITION p8087 VALUES LESS THAN (64704), +PARTITION p8088 VALUES LESS THAN (64712), +PARTITION p8089 VALUES LESS THAN (64720), +PARTITION p8090 VALUES LESS THAN (64728), +PARTITION p8091 VALUES LESS THAN (64736), +PARTITION p8092 VALUES LESS THAN (64744), +PARTITION p8093 VALUES LESS THAN (64752), +PARTITION p8094 VALUES LESS THAN (64760), +PARTITION p8095 VALUES LESS THAN (64768), +PARTITION p8096 VALUES LESS THAN (64776), +PARTITION p8097 VALUES LESS THAN (64784), +PARTITION p8098 VALUES LESS THAN (64792), +PARTITION p8099 VALUES LESS THAN (64800), +PARTITION p8100 VALUES LESS THAN (64808), +PARTITION p8101 VALUES LESS THAN (64816), +PARTITION p8102 VALUES LESS THAN (64824), +PARTITION p8103 VALUES LESS THAN (64832), +PARTITION p8104 VALUES LESS THAN (64840), +PARTITION p8105 VALUES LESS THAN (64848), +PARTITION p8106 VALUES LESS THAN (64856), +PARTITION p8107 VALUES LESS THAN (64864), +PARTITION p8108 VALUES LESS THAN (64872), +PARTITION p8109 VALUES LESS THAN (64880), +PARTITION p8110 VALUES LESS THAN (64888), +PARTITION p8111 VALUES LESS THAN (64896), +PARTITION p8112 VALUES LESS THAN (64904), +PARTITION p8113 VALUES LESS THAN (64912), +PARTITION p8114 VALUES LESS THAN (64920), +PARTITION p8115 VALUES LESS THAN (64928), +PARTITION p8116 VALUES LESS THAN (64936), +PARTITION p8117 VALUES LESS THAN (64944), +PARTITION p8118 VALUES LESS THAN (64952), +PARTITION p8119 VALUES LESS THAN (64960), +PARTITION p8120 VALUES LESS THAN (64968), +PARTITION p8121 VALUES LESS THAN (64976), +PARTITION p8122 VALUES LESS THAN (64984), +PARTITION p8123 VALUES LESS THAN (64992), +PARTITION p8124 VALUES LESS THAN (65000), +PARTITION p8125 VALUES LESS THAN (65008), +PARTITION p8126 VALUES LESS THAN (65016), +PARTITION p8127 VALUES LESS THAN (65024), +PARTITION p8128 VALUES LESS THAN (65032), +PARTITION p8129 VALUES LESS THAN (65040), +PARTITION p8130 VALUES LESS THAN (65048), +PARTITION p8131 VALUES LESS THAN (65056), +PARTITION p8132 VALUES LESS THAN (65064), +PARTITION p8133 VALUES LESS THAN (65072), +PARTITION p8134 VALUES LESS THAN (65080), +PARTITION p8135 VALUES LESS THAN (65088), +PARTITION p8136 VALUES LESS THAN (65096), +PARTITION p8137 VALUES LESS THAN (65104), +PARTITION p8138 VALUES LESS THAN (65112), +PARTITION p8139 VALUES LESS THAN (65120), +PARTITION p8140 VALUES LESS THAN (65128), +PARTITION p8141 VALUES LESS THAN (65136), +PARTITION p8142 VALUES LESS THAN (65144), +PARTITION p8143 VALUES LESS THAN (65152), +PARTITION p8144 VALUES LESS THAN (65160), +PARTITION p8145 VALUES LESS THAN (65168), +PARTITION p8146 VALUES LESS THAN (65176), +PARTITION p8147 VALUES LESS THAN (65184), +PARTITION p8148 VALUES LESS THAN (65192), +PARTITION p8149 VALUES LESS THAN (65200), +PARTITION p8150 VALUES LESS THAN (65208), +PARTITION p8151 VALUES LESS THAN (65216), +PARTITION p8152 VALUES LESS THAN (65224), +PARTITION p8153 VALUES LESS THAN (65232), +PARTITION p8154 VALUES LESS THAN (65240), +PARTITION p8155 VALUES LESS THAN (65248), +PARTITION p8156 VALUES LESS THAN (65256), +PARTITION p8157 VALUES LESS THAN (65264), +PARTITION p8158 VALUES LESS THAN (65272), +PARTITION p8159 VALUES LESS THAN (65280), +PARTITION p8160 VALUES LESS THAN (65288), +PARTITION p8161 VALUES LESS THAN (65296), +PARTITION p8162 VALUES LESS THAN (65304), +PARTITION p8163 VALUES LESS THAN (65312), +PARTITION p8164 VALUES LESS THAN (65320), +PARTITION p8165 VALUES LESS THAN (65328), +PARTITION p8166 VALUES LESS THAN (65336), +PARTITION p8167 VALUES LESS THAN (65344), +PARTITION p8168 VALUES LESS THAN (65352), +PARTITION p8169 VALUES LESS THAN (65360), +PARTITION p8170 VALUES LESS THAN (65368), +PARTITION p8171 VALUES LESS THAN (65376), +PARTITION p8172 VALUES LESS THAN (65384), +PARTITION p8173 VALUES LESS THAN (65392), +PARTITION p8174 VALUES LESS THAN (65400), +PARTITION p8175 VALUES LESS THAN (65408), +PARTITION p8176 VALUES LESS THAN (65416), +PARTITION p8177 VALUES LESS THAN (65424), +PARTITION p8178 VALUES LESS THAN (65432), +PARTITION p8179 VALUES LESS THAN (65440), +PARTITION p8180 VALUES LESS THAN (65448), +PARTITION p8181 VALUES LESS THAN (65456), +PARTITION p8182 VALUES LESS THAN (65464), +PARTITION p8183 VALUES LESS THAN (65472), +PARTITION p8184 VALUES LESS THAN (65480), +PARTITION p8185 VALUES LESS THAN (65488), +PARTITION p8186 VALUES LESS THAN (65496), +PARTITION p8187 VALUES LESS THAN (65504), +PARTITION p8188 VALUES LESS THAN (65512), +PARTITION p8189 VALUES LESS THAN (65520), +PARTITION p8190 VALUES LESS THAN (65528), +PARTITION p8191 VALUES LESS THAN (65536), +PARTITION p8192 VALUES LESS THAN (65544) +); +ERROR HY000: Too many partitions (including subpartitions) were defined +create table t2 (a int) engine='TokuDB' +partition by list (a) ( +PARTITION p0 VALUES IN (0,1,2,3), +PARTITION p1 VALUES IN (4,5,6,7), +PARTITION p2 VALUES IN (8,9,10,11), +PARTITION p3 VALUES IN (12,13,14,15), +PARTITION p4 VALUES IN (16,17,18,19), +PARTITION p5 VALUES IN (20,21,22,23), +PARTITION p6 VALUES IN (24,25,26,27), +PARTITION p7 VALUES IN (28,29,30,31), +PARTITION p8 VALUES IN (32,33,34,35), +PARTITION p9 VALUES IN (36,37,38,39), +PARTITION p10 VALUES IN (40,41,42,43), +PARTITION p11 VALUES IN (44,45,46,47), +PARTITION p12 VALUES IN (48,49,50,51), +PARTITION p13 VALUES IN (52,53,54,55), +PARTITION p14 VALUES IN (56,57,58,59), +PARTITION p15 VALUES IN (60,61,62,63), +PARTITION p16 VALUES IN (64,65,66,67), +PARTITION p17 VALUES IN (68,69,70,71), +PARTITION p18 VALUES IN (72,73,74,75), +PARTITION p19 VALUES IN (76,77,78,79), +PARTITION p20 VALUES IN (80,81,82,83), +PARTITION p21 VALUES IN (84,85,86,87), +PARTITION p22 VALUES IN (88,89,90,91), +PARTITION p23 VALUES IN (92,93,94,95), +PARTITION p24 VALUES IN (96,97,98,99), +PARTITION p25 VALUES IN (100,101,102,103), +PARTITION p26 VALUES IN (104,105,106,107), +PARTITION p27 VALUES IN (108,109,110,111), +PARTITION p28 VALUES IN (112,113,114,115), +PARTITION p29 VALUES IN (116,117,118,119), +PARTITION p30 VALUES IN (120,121,122,123), +PARTITION p31 VALUES IN (124,125,126,127), +PARTITION p32 VALUES IN (128,129,130,131), +PARTITION p33 VALUES IN (132,133,134,135), +PARTITION p34 VALUES IN (136,137,138,139), +PARTITION p35 VALUES IN (140,141,142,143), +PARTITION p36 VALUES IN (144,145,146,147), +PARTITION p37 VALUES IN (148,149,150,151), +PARTITION p38 VALUES IN (152,153,154,155), +PARTITION p39 VALUES IN (156,157,158,159), +PARTITION p40 VALUES IN (160,161,162,163), +PARTITION p41 VALUES IN (164,165,166,167), +PARTITION p42 VALUES IN (168,169,170,171), +PARTITION p43 VALUES IN (172,173,174,175), +PARTITION p44 VALUES IN (176,177,178,179), +PARTITION p45 VALUES IN (180,181,182,183), +PARTITION p46 VALUES IN (184,185,186,187), +PARTITION p47 VALUES IN (188,189,190,191), +PARTITION p48 VALUES IN (192,193,194,195), +PARTITION p49 VALUES IN (196,197,198,199), +PARTITION p50 VALUES IN (200,201,202,203), +PARTITION p51 VALUES IN (204,205,206,207), +PARTITION p52 VALUES IN (208,209,210,211), +PARTITION p53 VALUES IN (212,213,214,215), +PARTITION p54 VALUES IN (216,217,218,219), +PARTITION p55 VALUES IN (220,221,222,223), +PARTITION p56 VALUES IN (224,225,226,227), +PARTITION p57 VALUES IN (228,229,230,231), +PARTITION p58 VALUES IN (232,233,234,235), +PARTITION p59 VALUES IN (236,237,238,239), +PARTITION p60 VALUES IN (240,241,242,243), +PARTITION p61 VALUES IN (244,245,246,247), +PARTITION p62 VALUES IN (248,249,250,251), +PARTITION p63 VALUES IN (252,253,254,255), +PARTITION p64 VALUES IN (256,257,258,259), +PARTITION p65 VALUES IN (260,261,262,263), +PARTITION p66 VALUES IN (264,265,266,267), +PARTITION p67 VALUES IN (268,269,270,271), +PARTITION p68 VALUES IN (272,273,274,275), +PARTITION p69 VALUES IN (276,277,278,279), +PARTITION p70 VALUES IN (280,281,282,283), +PARTITION p71 VALUES IN (284,285,286,287), +PARTITION p72 VALUES IN (288,289,290,291), +PARTITION p73 VALUES IN (292,293,294,295), +PARTITION p74 VALUES IN (296,297,298,299), +PARTITION p75 VALUES IN (300,301,302,303), +PARTITION p76 VALUES IN (304,305,306,307), +PARTITION p77 VALUES IN (308,309,310,311), +PARTITION p78 VALUES IN (312,313,314,315), +PARTITION p79 VALUES IN (316,317,318,319), +PARTITION p80 VALUES IN (320,321,322,323), +PARTITION p81 VALUES IN (324,325,326,327), +PARTITION p82 VALUES IN (328,329,330,331), +PARTITION p83 VALUES IN (332,333,334,335), +PARTITION p84 VALUES IN (336,337,338,339), +PARTITION p85 VALUES IN (340,341,342,343), +PARTITION p86 VALUES IN (344,345,346,347), +PARTITION p87 VALUES IN (348,349,350,351), +PARTITION p88 VALUES IN (352,353,354,355), +PARTITION p89 VALUES IN (356,357,358,359), +PARTITION p90 VALUES IN (360,361,362,363), +PARTITION p91 VALUES IN (364,365,366,367), +PARTITION p92 VALUES IN (368,369,370,371), +PARTITION p93 VALUES IN (372,373,374,375), +PARTITION p94 VALUES IN (376,377,378,379), +PARTITION p95 VALUES IN (380,381,382,383), +PARTITION p96 VALUES IN (384,385,386,387), +PARTITION p97 VALUES IN (388,389,390,391), +PARTITION p98 VALUES IN (392,393,394,395), +PARTITION p99 VALUES IN (396,397,398,399), +PARTITION p100 VALUES IN (400,401,402,403), +PARTITION p101 VALUES IN (404,405,406,407), +PARTITION p102 VALUES IN (408,409,410,411), +PARTITION p103 VALUES IN (412,413,414,415), +PARTITION p104 VALUES IN (416,417,418,419), +PARTITION p105 VALUES IN (420,421,422,423), +PARTITION p106 VALUES IN (424,425,426,427), +PARTITION p107 VALUES IN (428,429,430,431), +PARTITION p108 VALUES IN (432,433,434,435), +PARTITION p109 VALUES IN (436,437,438,439), +PARTITION p110 VALUES IN (440,441,442,443), +PARTITION p111 VALUES IN (444,445,446,447), +PARTITION p112 VALUES IN (448,449,450,451), +PARTITION p113 VALUES IN (452,453,454,455), +PARTITION p114 VALUES IN (456,457,458,459), +PARTITION p115 VALUES IN (460,461,462,463), +PARTITION p116 VALUES IN (464,465,466,467), +PARTITION p117 VALUES IN (468,469,470,471), +PARTITION p118 VALUES IN (472,473,474,475), +PARTITION p119 VALUES IN (476,477,478,479), +PARTITION p120 VALUES IN (480,481,482,483), +PARTITION p121 VALUES IN (484,485,486,487), +PARTITION p122 VALUES IN (488,489,490,491), +PARTITION p123 VALUES IN (492,493,494,495), +PARTITION p124 VALUES IN (496,497,498,499), +PARTITION p125 VALUES IN (500,501,502,503), +PARTITION p126 VALUES IN (504,505,506,507), +PARTITION p127 VALUES IN (508,509,510,511), +PARTITION p128 VALUES IN (512,513,514,515), +PARTITION p129 VALUES IN (516,517,518,519), +PARTITION p130 VALUES IN (520,521,522,523), +PARTITION p131 VALUES IN (524,525,526,527), +PARTITION p132 VALUES IN (528,529,530,531), +PARTITION p133 VALUES IN (532,533,534,535), +PARTITION p134 VALUES IN (536,537,538,539), +PARTITION p135 VALUES IN (540,541,542,543), +PARTITION p136 VALUES IN (544,545,546,547), +PARTITION p137 VALUES IN (548,549,550,551), +PARTITION p138 VALUES IN (552,553,554,555), +PARTITION p139 VALUES IN (556,557,558,559), +PARTITION p140 VALUES IN (560,561,562,563), +PARTITION p141 VALUES IN (564,565,566,567), +PARTITION p142 VALUES IN (568,569,570,571), +PARTITION p143 VALUES IN (572,573,574,575), +PARTITION p144 VALUES IN (576,577,578,579), +PARTITION p145 VALUES IN (580,581,582,583), +PARTITION p146 VALUES IN (584,585,586,587), +PARTITION p147 VALUES IN (588,589,590,591), +PARTITION p148 VALUES IN (592,593,594,595), +PARTITION p149 VALUES IN (596,597,598,599), +PARTITION p150 VALUES IN (600,601,602,603), +PARTITION p151 VALUES IN (604,605,606,607), +PARTITION p152 VALUES IN (608,609,610,611), +PARTITION p153 VALUES IN (612,613,614,615), +PARTITION p154 VALUES IN (616,617,618,619), +PARTITION p155 VALUES IN (620,621,622,623), +PARTITION p156 VALUES IN (624,625,626,627), +PARTITION p157 VALUES IN (628,629,630,631), +PARTITION p158 VALUES IN (632,633,634,635), +PARTITION p159 VALUES IN (636,637,638,639), +PARTITION p160 VALUES IN (640,641,642,643), +PARTITION p161 VALUES IN (644,645,646,647), +PARTITION p162 VALUES IN (648,649,650,651), +PARTITION p163 VALUES IN (652,653,654,655), +PARTITION p164 VALUES IN (656,657,658,659), +PARTITION p165 VALUES IN (660,661,662,663), +PARTITION p166 VALUES IN (664,665,666,667), +PARTITION p167 VALUES IN (668,669,670,671), +PARTITION p168 VALUES IN (672,673,674,675), +PARTITION p169 VALUES IN (676,677,678,679), +PARTITION p170 VALUES IN (680,681,682,683), +PARTITION p171 VALUES IN (684,685,686,687), +PARTITION p172 VALUES IN (688,689,690,691), +PARTITION p173 VALUES IN (692,693,694,695), +PARTITION p174 VALUES IN (696,697,698,699), +PARTITION p175 VALUES IN (700,701,702,703), +PARTITION p176 VALUES IN (704,705,706,707), +PARTITION p177 VALUES IN (708,709,710,711), +PARTITION p178 VALUES IN (712,713,714,715), +PARTITION p179 VALUES IN (716,717,718,719), +PARTITION p180 VALUES IN (720,721,722,723), +PARTITION p181 VALUES IN (724,725,726,727), +PARTITION p182 VALUES IN (728,729,730,731), +PARTITION p183 VALUES IN (732,733,734,735), +PARTITION p184 VALUES IN (736,737,738,739), +PARTITION p185 VALUES IN (740,741,742,743), +PARTITION p186 VALUES IN (744,745,746,747), +PARTITION p187 VALUES IN (748,749,750,751), +PARTITION p188 VALUES IN (752,753,754,755), +PARTITION p189 VALUES IN (756,757,758,759), +PARTITION p190 VALUES IN (760,761,762,763), +PARTITION p191 VALUES IN (764,765,766,767), +PARTITION p192 VALUES IN (768,769,770,771), +PARTITION p193 VALUES IN (772,773,774,775), +PARTITION p194 VALUES IN (776,777,778,779), +PARTITION p195 VALUES IN (780,781,782,783), +PARTITION p196 VALUES IN (784,785,786,787), +PARTITION p197 VALUES IN (788,789,790,791), +PARTITION p198 VALUES IN (792,793,794,795), +PARTITION p199 VALUES IN (796,797,798,799), +PARTITION p200 VALUES IN (800,801,802,803), +PARTITION p201 VALUES IN (804,805,806,807), +PARTITION p202 VALUES IN (808,809,810,811), +PARTITION p203 VALUES IN (812,813,814,815), +PARTITION p204 VALUES IN (816,817,818,819), +PARTITION p205 VALUES IN (820,821,822,823), +PARTITION p206 VALUES IN (824,825,826,827), +PARTITION p207 VALUES IN (828,829,830,831), +PARTITION p208 VALUES IN (832,833,834,835), +PARTITION p209 VALUES IN (836,837,838,839), +PARTITION p210 VALUES IN (840,841,842,843), +PARTITION p211 VALUES IN (844,845,846,847), +PARTITION p212 VALUES IN (848,849,850,851), +PARTITION p213 VALUES IN (852,853,854,855), +PARTITION p214 VALUES IN (856,857,858,859), +PARTITION p215 VALUES IN (860,861,862,863), +PARTITION p216 VALUES IN (864,865,866,867), +PARTITION p217 VALUES IN (868,869,870,871), +PARTITION p218 VALUES IN (872,873,874,875), +PARTITION p219 VALUES IN (876,877,878,879), +PARTITION p220 VALUES IN (880,881,882,883), +PARTITION p221 VALUES IN (884,885,886,887), +PARTITION p222 VALUES IN (888,889,890,891), +PARTITION p223 VALUES IN (892,893,894,895), +PARTITION p224 VALUES IN (896,897,898,899), +PARTITION p225 VALUES IN (900,901,902,903), +PARTITION p226 VALUES IN (904,905,906,907), +PARTITION p227 VALUES IN (908,909,910,911), +PARTITION p228 VALUES IN (912,913,914,915), +PARTITION p229 VALUES IN (916,917,918,919), +PARTITION p230 VALUES IN (920,921,922,923), +PARTITION p231 VALUES IN (924,925,926,927), +PARTITION p232 VALUES IN (928,929,930,931), +PARTITION p233 VALUES IN (932,933,934,935), +PARTITION p234 VALUES IN (936,937,938,939), +PARTITION p235 VALUES IN (940,941,942,943), +PARTITION p236 VALUES IN (944,945,946,947), +PARTITION p237 VALUES IN (948,949,950,951), +PARTITION p238 VALUES IN (952,953,954,955), +PARTITION p239 VALUES IN (956,957,958,959), +PARTITION p240 VALUES IN (960,961,962,963), +PARTITION p241 VALUES IN (964,965,966,967), +PARTITION p242 VALUES IN (968,969,970,971), +PARTITION p243 VALUES IN (972,973,974,975), +PARTITION p244 VALUES IN (976,977,978,979), +PARTITION p245 VALUES IN (980,981,982,983), +PARTITION p246 VALUES IN (984,985,986,987), +PARTITION p247 VALUES IN (988,989,990,991), +PARTITION p248 VALUES IN (992,993,994,995), +PARTITION p249 VALUES IN (996,997,998,999), +PARTITION p250 VALUES IN (1000,1001,1002,1003), +PARTITION p251 VALUES IN (1004,1005,1006,1007), +PARTITION p252 VALUES IN (1008,1009,1010,1011), +PARTITION p253 VALUES IN (1012,1013,1014,1015), +PARTITION p254 VALUES IN (1016,1017,1018,1019), +PARTITION p255 VALUES IN (1020,1021,1022,1023), +PARTITION p256 VALUES IN (1024,1025,1026,1027), +PARTITION p257 VALUES IN (1028,1029,1030,1031), +PARTITION p258 VALUES IN (1032,1033,1034,1035), +PARTITION p259 VALUES IN (1036,1037,1038,1039), +PARTITION p260 VALUES IN (1040,1041,1042,1043), +PARTITION p261 VALUES IN (1044,1045,1046,1047), +PARTITION p262 VALUES IN (1048,1049,1050,1051), +PARTITION p263 VALUES IN (1052,1053,1054,1055), +PARTITION p264 VALUES IN (1056,1057,1058,1059), +PARTITION p265 VALUES IN (1060,1061,1062,1063), +PARTITION p266 VALUES IN (1064,1065,1066,1067), +PARTITION p267 VALUES IN (1068,1069,1070,1071), +PARTITION p268 VALUES IN (1072,1073,1074,1075), +PARTITION p269 VALUES IN (1076,1077,1078,1079), +PARTITION p270 VALUES IN (1080,1081,1082,1083), +PARTITION p271 VALUES IN (1084,1085,1086,1087), +PARTITION p272 VALUES IN (1088,1089,1090,1091), +PARTITION p273 VALUES IN (1092,1093,1094,1095), +PARTITION p274 VALUES IN (1096,1097,1098,1099), +PARTITION p275 VALUES IN (1100,1101,1102,1103), +PARTITION p276 VALUES IN (1104,1105,1106,1107), +PARTITION p277 VALUES IN (1108,1109,1110,1111), +PARTITION p278 VALUES IN (1112,1113,1114,1115), +PARTITION p279 VALUES IN (1116,1117,1118,1119), +PARTITION p280 VALUES IN (1120,1121,1122,1123), +PARTITION p281 VALUES IN (1124,1125,1126,1127), +PARTITION p282 VALUES IN (1128,1129,1130,1131), +PARTITION p283 VALUES IN (1132,1133,1134,1135), +PARTITION p284 VALUES IN (1136,1137,1138,1139), +PARTITION p285 VALUES IN (1140,1141,1142,1143), +PARTITION p286 VALUES IN (1144,1145,1146,1147), +PARTITION p287 VALUES IN (1148,1149,1150,1151), +PARTITION p288 VALUES IN (1152,1153,1154,1155), +PARTITION p289 VALUES IN (1156,1157,1158,1159), +PARTITION p290 VALUES IN (1160,1161,1162,1163), +PARTITION p291 VALUES IN (1164,1165,1166,1167), +PARTITION p292 VALUES IN (1168,1169,1170,1171), +PARTITION p293 VALUES IN (1172,1173,1174,1175), +PARTITION p294 VALUES IN (1176,1177,1178,1179), +PARTITION p295 VALUES IN (1180,1181,1182,1183), +PARTITION p296 VALUES IN (1184,1185,1186,1187), +PARTITION p297 VALUES IN (1188,1189,1190,1191), +PARTITION p298 VALUES IN (1192,1193,1194,1195), +PARTITION p299 VALUES IN (1196,1197,1198,1199), +PARTITION p300 VALUES IN (1200,1201,1202,1203), +PARTITION p301 VALUES IN (1204,1205,1206,1207), +PARTITION p302 VALUES IN (1208,1209,1210,1211), +PARTITION p303 VALUES IN (1212,1213,1214,1215), +PARTITION p304 VALUES IN (1216,1217,1218,1219), +PARTITION p305 VALUES IN (1220,1221,1222,1223), +PARTITION p306 VALUES IN (1224,1225,1226,1227), +PARTITION p307 VALUES IN (1228,1229,1230,1231), +PARTITION p308 VALUES IN (1232,1233,1234,1235), +PARTITION p309 VALUES IN (1236,1237,1238,1239), +PARTITION p310 VALUES IN (1240,1241,1242,1243), +PARTITION p311 VALUES IN (1244,1245,1246,1247), +PARTITION p312 VALUES IN (1248,1249,1250,1251), +PARTITION p313 VALUES IN (1252,1253,1254,1255), +PARTITION p314 VALUES IN (1256,1257,1258,1259), +PARTITION p315 VALUES IN (1260,1261,1262,1263), +PARTITION p316 VALUES IN (1264,1265,1266,1267), +PARTITION p317 VALUES IN (1268,1269,1270,1271), +PARTITION p318 VALUES IN (1272,1273,1274,1275), +PARTITION p319 VALUES IN (1276,1277,1278,1279), +PARTITION p320 VALUES IN (1280,1281,1282,1283), +PARTITION p321 VALUES IN (1284,1285,1286,1287), +PARTITION p322 VALUES IN (1288,1289,1290,1291), +PARTITION p323 VALUES IN (1292,1293,1294,1295), +PARTITION p324 VALUES IN (1296,1297,1298,1299), +PARTITION p325 VALUES IN (1300,1301,1302,1303), +PARTITION p326 VALUES IN (1304,1305,1306,1307), +PARTITION p327 VALUES IN (1308,1309,1310,1311), +PARTITION p328 VALUES IN (1312,1313,1314,1315), +PARTITION p329 VALUES IN (1316,1317,1318,1319), +PARTITION p330 VALUES IN (1320,1321,1322,1323), +PARTITION p331 VALUES IN (1324,1325,1326,1327), +PARTITION p332 VALUES IN (1328,1329,1330,1331), +PARTITION p333 VALUES IN (1332,1333,1334,1335), +PARTITION p334 VALUES IN (1336,1337,1338,1339), +PARTITION p335 VALUES IN (1340,1341,1342,1343), +PARTITION p336 VALUES IN (1344,1345,1346,1347), +PARTITION p337 VALUES IN (1348,1349,1350,1351), +PARTITION p338 VALUES IN (1352,1353,1354,1355), +PARTITION p339 VALUES IN (1356,1357,1358,1359), +PARTITION p340 VALUES IN (1360,1361,1362,1363), +PARTITION p341 VALUES IN (1364,1365,1366,1367), +PARTITION p342 VALUES IN (1368,1369,1370,1371), +PARTITION p343 VALUES IN (1372,1373,1374,1375), +PARTITION p344 VALUES IN (1376,1377,1378,1379), +PARTITION p345 VALUES IN (1380,1381,1382,1383), +PARTITION p346 VALUES IN (1384,1385,1386,1387), +PARTITION p347 VALUES IN (1388,1389,1390,1391), +PARTITION p348 VALUES IN (1392,1393,1394,1395), +PARTITION p349 VALUES IN (1396,1397,1398,1399), +PARTITION p350 VALUES IN (1400,1401,1402,1403), +PARTITION p351 VALUES IN (1404,1405,1406,1407), +PARTITION p352 VALUES IN (1408,1409,1410,1411), +PARTITION p353 VALUES IN (1412,1413,1414,1415), +PARTITION p354 VALUES IN (1416,1417,1418,1419), +PARTITION p355 VALUES IN (1420,1421,1422,1423), +PARTITION p356 VALUES IN (1424,1425,1426,1427), +PARTITION p357 VALUES IN (1428,1429,1430,1431), +PARTITION p358 VALUES IN (1432,1433,1434,1435), +PARTITION p359 VALUES IN (1436,1437,1438,1439), +PARTITION p360 VALUES IN (1440,1441,1442,1443), +PARTITION p361 VALUES IN (1444,1445,1446,1447), +PARTITION p362 VALUES IN (1448,1449,1450,1451), +PARTITION p363 VALUES IN (1452,1453,1454,1455), +PARTITION p364 VALUES IN (1456,1457,1458,1459), +PARTITION p365 VALUES IN (1460,1461,1462,1463), +PARTITION p366 VALUES IN (1464,1465,1466,1467), +PARTITION p367 VALUES IN (1468,1469,1470,1471), +PARTITION p368 VALUES IN (1472,1473,1474,1475), +PARTITION p369 VALUES IN (1476,1477,1478,1479), +PARTITION p370 VALUES IN (1480,1481,1482,1483), +PARTITION p371 VALUES IN (1484,1485,1486,1487), +PARTITION p372 VALUES IN (1488,1489,1490,1491), +PARTITION p373 VALUES IN (1492,1493,1494,1495), +PARTITION p374 VALUES IN (1496,1497,1498,1499), +PARTITION p375 VALUES IN (1500,1501,1502,1503), +PARTITION p376 VALUES IN (1504,1505,1506,1507), +PARTITION p377 VALUES IN (1508,1509,1510,1511), +PARTITION p378 VALUES IN (1512,1513,1514,1515), +PARTITION p379 VALUES IN (1516,1517,1518,1519), +PARTITION p380 VALUES IN (1520,1521,1522,1523), +PARTITION p381 VALUES IN (1524,1525,1526,1527), +PARTITION p382 VALUES IN (1528,1529,1530,1531), +PARTITION p383 VALUES IN (1532,1533,1534,1535), +PARTITION p384 VALUES IN (1536,1537,1538,1539), +PARTITION p385 VALUES IN (1540,1541,1542,1543), +PARTITION p386 VALUES IN (1544,1545,1546,1547), +PARTITION p387 VALUES IN (1548,1549,1550,1551), +PARTITION p388 VALUES IN (1552,1553,1554,1555), +PARTITION p389 VALUES IN (1556,1557,1558,1559), +PARTITION p390 VALUES IN (1560,1561,1562,1563), +PARTITION p391 VALUES IN (1564,1565,1566,1567), +PARTITION p392 VALUES IN (1568,1569,1570,1571), +PARTITION p393 VALUES IN (1572,1573,1574,1575), +PARTITION p394 VALUES IN (1576,1577,1578,1579), +PARTITION p395 VALUES IN (1580,1581,1582,1583), +PARTITION p396 VALUES IN (1584,1585,1586,1587), +PARTITION p397 VALUES IN (1588,1589,1590,1591), +PARTITION p398 VALUES IN (1592,1593,1594,1595), +PARTITION p399 VALUES IN (1596,1597,1598,1599), +PARTITION p400 VALUES IN (1600,1601,1602,1603), +PARTITION p401 VALUES IN (1604,1605,1606,1607), +PARTITION p402 VALUES IN (1608,1609,1610,1611), +PARTITION p403 VALUES IN (1612,1613,1614,1615), +PARTITION p404 VALUES IN (1616,1617,1618,1619), +PARTITION p405 VALUES IN (1620,1621,1622,1623), +PARTITION p406 VALUES IN (1624,1625,1626,1627), +PARTITION p407 VALUES IN (1628,1629,1630,1631), +PARTITION p408 VALUES IN (1632,1633,1634,1635), +PARTITION p409 VALUES IN (1636,1637,1638,1639), +PARTITION p410 VALUES IN (1640,1641,1642,1643), +PARTITION p411 VALUES IN (1644,1645,1646,1647), +PARTITION p412 VALUES IN (1648,1649,1650,1651), +PARTITION p413 VALUES IN (1652,1653,1654,1655), +PARTITION p414 VALUES IN (1656,1657,1658,1659), +PARTITION p415 VALUES IN (1660,1661,1662,1663), +PARTITION p416 VALUES IN (1664,1665,1666,1667), +PARTITION p417 VALUES IN (1668,1669,1670,1671), +PARTITION p418 VALUES IN (1672,1673,1674,1675), +PARTITION p419 VALUES IN (1676,1677,1678,1679), +PARTITION p420 VALUES IN (1680,1681,1682,1683), +PARTITION p421 VALUES IN (1684,1685,1686,1687), +PARTITION p422 VALUES IN (1688,1689,1690,1691), +PARTITION p423 VALUES IN (1692,1693,1694,1695), +PARTITION p424 VALUES IN (1696,1697,1698,1699), +PARTITION p425 VALUES IN (1700,1701,1702,1703), +PARTITION p426 VALUES IN (1704,1705,1706,1707), +PARTITION p427 VALUES IN (1708,1709,1710,1711), +PARTITION p428 VALUES IN (1712,1713,1714,1715), +PARTITION p429 VALUES IN (1716,1717,1718,1719), +PARTITION p430 VALUES IN (1720,1721,1722,1723), +PARTITION p431 VALUES IN (1724,1725,1726,1727), +PARTITION p432 VALUES IN (1728,1729,1730,1731), +PARTITION p433 VALUES IN (1732,1733,1734,1735), +PARTITION p434 VALUES IN (1736,1737,1738,1739), +PARTITION p435 VALUES IN (1740,1741,1742,1743), +PARTITION p436 VALUES IN (1744,1745,1746,1747), +PARTITION p437 VALUES IN (1748,1749,1750,1751), +PARTITION p438 VALUES IN (1752,1753,1754,1755), +PARTITION p439 VALUES IN (1756,1757,1758,1759), +PARTITION p440 VALUES IN (1760,1761,1762,1763), +PARTITION p441 VALUES IN (1764,1765,1766,1767), +PARTITION p442 VALUES IN (1768,1769,1770,1771), +PARTITION p443 VALUES IN (1772,1773,1774,1775), +PARTITION p444 VALUES IN (1776,1777,1778,1779), +PARTITION p445 VALUES IN (1780,1781,1782,1783), +PARTITION p446 VALUES IN (1784,1785,1786,1787), +PARTITION p447 VALUES IN (1788,1789,1790,1791), +PARTITION p448 VALUES IN (1792,1793,1794,1795), +PARTITION p449 VALUES IN (1796,1797,1798,1799), +PARTITION p450 VALUES IN (1800,1801,1802,1803), +PARTITION p451 VALUES IN (1804,1805,1806,1807), +PARTITION p452 VALUES IN (1808,1809,1810,1811), +PARTITION p453 VALUES IN (1812,1813,1814,1815), +PARTITION p454 VALUES IN (1816,1817,1818,1819), +PARTITION p455 VALUES IN (1820,1821,1822,1823), +PARTITION p456 VALUES IN (1824,1825,1826,1827), +PARTITION p457 VALUES IN (1828,1829,1830,1831), +PARTITION p458 VALUES IN (1832,1833,1834,1835), +PARTITION p459 VALUES IN (1836,1837,1838,1839), +PARTITION p460 VALUES IN (1840,1841,1842,1843), +PARTITION p461 VALUES IN (1844,1845,1846,1847), +PARTITION p462 VALUES IN (1848,1849,1850,1851), +PARTITION p463 VALUES IN (1852,1853,1854,1855), +PARTITION p464 VALUES IN (1856,1857,1858,1859), +PARTITION p465 VALUES IN (1860,1861,1862,1863), +PARTITION p466 VALUES IN (1864,1865,1866,1867), +PARTITION p467 VALUES IN (1868,1869,1870,1871), +PARTITION p468 VALUES IN (1872,1873,1874,1875), +PARTITION p469 VALUES IN (1876,1877,1878,1879), +PARTITION p470 VALUES IN (1880,1881,1882,1883), +PARTITION p471 VALUES IN (1884,1885,1886,1887), +PARTITION p472 VALUES IN (1888,1889,1890,1891), +PARTITION p473 VALUES IN (1892,1893,1894,1895), +PARTITION p474 VALUES IN (1896,1897,1898,1899), +PARTITION p475 VALUES IN (1900,1901,1902,1903), +PARTITION p476 VALUES IN (1904,1905,1906,1907), +PARTITION p477 VALUES IN (1908,1909,1910,1911), +PARTITION p478 VALUES IN (1912,1913,1914,1915), +PARTITION p479 VALUES IN (1916,1917,1918,1919), +PARTITION p480 VALUES IN (1920,1921,1922,1923), +PARTITION p481 VALUES IN (1924,1925,1926,1927), +PARTITION p482 VALUES IN (1928,1929,1930,1931), +PARTITION p483 VALUES IN (1932,1933,1934,1935), +PARTITION p484 VALUES IN (1936,1937,1938,1939), +PARTITION p485 VALUES IN (1940,1941,1942,1943), +PARTITION p486 VALUES IN (1944,1945,1946,1947), +PARTITION p487 VALUES IN (1948,1949,1950,1951), +PARTITION p488 VALUES IN (1952,1953,1954,1955), +PARTITION p489 VALUES IN (1956,1957,1958,1959), +PARTITION p490 VALUES IN (1960,1961,1962,1963), +PARTITION p491 VALUES IN (1964,1965,1966,1967), +PARTITION p492 VALUES IN (1968,1969,1970,1971), +PARTITION p493 VALUES IN (1972,1973,1974,1975), +PARTITION p494 VALUES IN (1976,1977,1978,1979), +PARTITION p495 VALUES IN (1980,1981,1982,1983), +PARTITION p496 VALUES IN (1984,1985,1986,1987), +PARTITION p497 VALUES IN (1988,1989,1990,1991), +PARTITION p498 VALUES IN (1992,1993,1994,1995), +PARTITION p499 VALUES IN (1996,1997,1998,1999), +PARTITION p500 VALUES IN (2000,2001,2002,2003), +PARTITION p501 VALUES IN (2004,2005,2006,2007), +PARTITION p502 VALUES IN (2008,2009,2010,2011), +PARTITION p503 VALUES IN (2012,2013,2014,2015), +PARTITION p504 VALUES IN (2016,2017,2018,2019), +PARTITION p505 VALUES IN (2020,2021,2022,2023), +PARTITION p506 VALUES IN (2024,2025,2026,2027), +PARTITION p507 VALUES IN (2028,2029,2030,2031), +PARTITION p508 VALUES IN (2032,2033,2034,2035), +PARTITION p509 VALUES IN (2036,2037,2038,2039), +PARTITION p510 VALUES IN (2040,2041,2042,2043), +PARTITION p511 VALUES IN (2044,2045,2046,2047), +PARTITION p512 VALUES IN (2048,2049,2050,2051), +PARTITION p513 VALUES IN (2052,2053,2054,2055), +PARTITION p514 VALUES IN (2056,2057,2058,2059), +PARTITION p515 VALUES IN (2060,2061,2062,2063), +PARTITION p516 VALUES IN (2064,2065,2066,2067), +PARTITION p517 VALUES IN (2068,2069,2070,2071), +PARTITION p518 VALUES IN (2072,2073,2074,2075), +PARTITION p519 VALUES IN (2076,2077,2078,2079), +PARTITION p520 VALUES IN (2080,2081,2082,2083), +PARTITION p521 VALUES IN (2084,2085,2086,2087), +PARTITION p522 VALUES IN (2088,2089,2090,2091), +PARTITION p523 VALUES IN (2092,2093,2094,2095), +PARTITION p524 VALUES IN (2096,2097,2098,2099), +PARTITION p525 VALUES IN (2100,2101,2102,2103), +PARTITION p526 VALUES IN (2104,2105,2106,2107), +PARTITION p527 VALUES IN (2108,2109,2110,2111), +PARTITION p528 VALUES IN (2112,2113,2114,2115), +PARTITION p529 VALUES IN (2116,2117,2118,2119), +PARTITION p530 VALUES IN (2120,2121,2122,2123), +PARTITION p531 VALUES IN (2124,2125,2126,2127), +PARTITION p532 VALUES IN (2128,2129,2130,2131), +PARTITION p533 VALUES IN (2132,2133,2134,2135), +PARTITION p534 VALUES IN (2136,2137,2138,2139), +PARTITION p535 VALUES IN (2140,2141,2142,2143), +PARTITION p536 VALUES IN (2144,2145,2146,2147), +PARTITION p537 VALUES IN (2148,2149,2150,2151), +PARTITION p538 VALUES IN (2152,2153,2154,2155), +PARTITION p539 VALUES IN (2156,2157,2158,2159), +PARTITION p540 VALUES IN (2160,2161,2162,2163), +PARTITION p541 VALUES IN (2164,2165,2166,2167), +PARTITION p542 VALUES IN (2168,2169,2170,2171), +PARTITION p543 VALUES IN (2172,2173,2174,2175), +PARTITION p544 VALUES IN (2176,2177,2178,2179), +PARTITION p545 VALUES IN (2180,2181,2182,2183), +PARTITION p546 VALUES IN (2184,2185,2186,2187), +PARTITION p547 VALUES IN (2188,2189,2190,2191), +PARTITION p548 VALUES IN (2192,2193,2194,2195), +PARTITION p549 VALUES IN (2196,2197,2198,2199), +PARTITION p550 VALUES IN (2200,2201,2202,2203), +PARTITION p551 VALUES IN (2204,2205,2206,2207), +PARTITION p552 VALUES IN (2208,2209,2210,2211), +PARTITION p553 VALUES IN (2212,2213,2214,2215), +PARTITION p554 VALUES IN (2216,2217,2218,2219), +PARTITION p555 VALUES IN (2220,2221,2222,2223), +PARTITION p556 VALUES IN (2224,2225,2226,2227), +PARTITION p557 VALUES IN (2228,2229,2230,2231), +PARTITION p558 VALUES IN (2232,2233,2234,2235), +PARTITION p559 VALUES IN (2236,2237,2238,2239), +PARTITION p560 VALUES IN (2240,2241,2242,2243), +PARTITION p561 VALUES IN (2244,2245,2246,2247), +PARTITION p562 VALUES IN (2248,2249,2250,2251), +PARTITION p563 VALUES IN (2252,2253,2254,2255), +PARTITION p564 VALUES IN (2256,2257,2258,2259), +PARTITION p565 VALUES IN (2260,2261,2262,2263), +PARTITION p566 VALUES IN (2264,2265,2266,2267), +PARTITION p567 VALUES IN (2268,2269,2270,2271), +PARTITION p568 VALUES IN (2272,2273,2274,2275), +PARTITION p569 VALUES IN (2276,2277,2278,2279), +PARTITION p570 VALUES IN (2280,2281,2282,2283), +PARTITION p571 VALUES IN (2284,2285,2286,2287), +PARTITION p572 VALUES IN (2288,2289,2290,2291), +PARTITION p573 VALUES IN (2292,2293,2294,2295), +PARTITION p574 VALUES IN (2296,2297,2298,2299), +PARTITION p575 VALUES IN (2300,2301,2302,2303), +PARTITION p576 VALUES IN (2304,2305,2306,2307), +PARTITION p577 VALUES IN (2308,2309,2310,2311), +PARTITION p578 VALUES IN (2312,2313,2314,2315), +PARTITION p579 VALUES IN (2316,2317,2318,2319), +PARTITION p580 VALUES IN (2320,2321,2322,2323), +PARTITION p581 VALUES IN (2324,2325,2326,2327), +PARTITION p582 VALUES IN (2328,2329,2330,2331), +PARTITION p583 VALUES IN (2332,2333,2334,2335), +PARTITION p584 VALUES IN (2336,2337,2338,2339), +PARTITION p585 VALUES IN (2340,2341,2342,2343), +PARTITION p586 VALUES IN (2344,2345,2346,2347), +PARTITION p587 VALUES IN (2348,2349,2350,2351), +PARTITION p588 VALUES IN (2352,2353,2354,2355), +PARTITION p589 VALUES IN (2356,2357,2358,2359), +PARTITION p590 VALUES IN (2360,2361,2362,2363), +PARTITION p591 VALUES IN (2364,2365,2366,2367), +PARTITION p592 VALUES IN (2368,2369,2370,2371), +PARTITION p593 VALUES IN (2372,2373,2374,2375), +PARTITION p594 VALUES IN (2376,2377,2378,2379), +PARTITION p595 VALUES IN (2380,2381,2382,2383), +PARTITION p596 VALUES IN (2384,2385,2386,2387), +PARTITION p597 VALUES IN (2388,2389,2390,2391), +PARTITION p598 VALUES IN (2392,2393,2394,2395), +PARTITION p599 VALUES IN (2396,2397,2398,2399), +PARTITION p600 VALUES IN (2400,2401,2402,2403), +PARTITION p601 VALUES IN (2404,2405,2406,2407), +PARTITION p602 VALUES IN (2408,2409,2410,2411), +PARTITION p603 VALUES IN (2412,2413,2414,2415), +PARTITION p604 VALUES IN (2416,2417,2418,2419), +PARTITION p605 VALUES IN (2420,2421,2422,2423), +PARTITION p606 VALUES IN (2424,2425,2426,2427), +PARTITION p607 VALUES IN (2428,2429,2430,2431), +PARTITION p608 VALUES IN (2432,2433,2434,2435), +PARTITION p609 VALUES IN (2436,2437,2438,2439), +PARTITION p610 VALUES IN (2440,2441,2442,2443), +PARTITION p611 VALUES IN (2444,2445,2446,2447), +PARTITION p612 VALUES IN (2448,2449,2450,2451), +PARTITION p613 VALUES IN (2452,2453,2454,2455), +PARTITION p614 VALUES IN (2456,2457,2458,2459), +PARTITION p615 VALUES IN (2460,2461,2462,2463), +PARTITION p616 VALUES IN (2464,2465,2466,2467), +PARTITION p617 VALUES IN (2468,2469,2470,2471), +PARTITION p618 VALUES IN (2472,2473,2474,2475), +PARTITION p619 VALUES IN (2476,2477,2478,2479), +PARTITION p620 VALUES IN (2480,2481,2482,2483), +PARTITION p621 VALUES IN (2484,2485,2486,2487), +PARTITION p622 VALUES IN (2488,2489,2490,2491), +PARTITION p623 VALUES IN (2492,2493,2494,2495), +PARTITION p624 VALUES IN (2496,2497,2498,2499), +PARTITION p625 VALUES IN (2500,2501,2502,2503), +PARTITION p626 VALUES IN (2504,2505,2506,2507), +PARTITION p627 VALUES IN (2508,2509,2510,2511), +PARTITION p628 VALUES IN (2512,2513,2514,2515), +PARTITION p629 VALUES IN (2516,2517,2518,2519), +PARTITION p630 VALUES IN (2520,2521,2522,2523), +PARTITION p631 VALUES IN (2524,2525,2526,2527), +PARTITION p632 VALUES IN (2528,2529,2530,2531), +PARTITION p633 VALUES IN (2532,2533,2534,2535), +PARTITION p634 VALUES IN (2536,2537,2538,2539), +PARTITION p635 VALUES IN (2540,2541,2542,2543), +PARTITION p636 VALUES IN (2544,2545,2546,2547), +PARTITION p637 VALUES IN (2548,2549,2550,2551), +PARTITION p638 VALUES IN (2552,2553,2554,2555), +PARTITION p639 VALUES IN (2556,2557,2558,2559), +PARTITION p640 VALUES IN (2560,2561,2562,2563), +PARTITION p641 VALUES IN (2564,2565,2566,2567), +PARTITION p642 VALUES IN (2568,2569,2570,2571), +PARTITION p643 VALUES IN (2572,2573,2574,2575), +PARTITION p644 VALUES IN (2576,2577,2578,2579), +PARTITION p645 VALUES IN (2580,2581,2582,2583), +PARTITION p646 VALUES IN (2584,2585,2586,2587), +PARTITION p647 VALUES IN (2588,2589,2590,2591), +PARTITION p648 VALUES IN (2592,2593,2594,2595), +PARTITION p649 VALUES IN (2596,2597,2598,2599), +PARTITION p650 VALUES IN (2600,2601,2602,2603), +PARTITION p651 VALUES IN (2604,2605,2606,2607), +PARTITION p652 VALUES IN (2608,2609,2610,2611), +PARTITION p653 VALUES IN (2612,2613,2614,2615), +PARTITION p654 VALUES IN (2616,2617,2618,2619), +PARTITION p655 VALUES IN (2620,2621,2622,2623), +PARTITION p656 VALUES IN (2624,2625,2626,2627), +PARTITION p657 VALUES IN (2628,2629,2630,2631), +PARTITION p658 VALUES IN (2632,2633,2634,2635), +PARTITION p659 VALUES IN (2636,2637,2638,2639), +PARTITION p660 VALUES IN (2640,2641,2642,2643), +PARTITION p661 VALUES IN (2644,2645,2646,2647), +PARTITION p662 VALUES IN (2648,2649,2650,2651), +PARTITION p663 VALUES IN (2652,2653,2654,2655), +PARTITION p664 VALUES IN (2656,2657,2658,2659), +PARTITION p665 VALUES IN (2660,2661,2662,2663), +PARTITION p666 VALUES IN (2664,2665,2666,2667), +PARTITION p667 VALUES IN (2668,2669,2670,2671), +PARTITION p668 VALUES IN (2672,2673,2674,2675), +PARTITION p669 VALUES IN (2676,2677,2678,2679), +PARTITION p670 VALUES IN (2680,2681,2682,2683), +PARTITION p671 VALUES IN (2684,2685,2686,2687), +PARTITION p672 VALUES IN (2688,2689,2690,2691), +PARTITION p673 VALUES IN (2692,2693,2694,2695), +PARTITION p674 VALUES IN (2696,2697,2698,2699), +PARTITION p675 VALUES IN (2700,2701,2702,2703), +PARTITION p676 VALUES IN (2704,2705,2706,2707), +PARTITION p677 VALUES IN (2708,2709,2710,2711), +PARTITION p678 VALUES IN (2712,2713,2714,2715), +PARTITION p679 VALUES IN (2716,2717,2718,2719), +PARTITION p680 VALUES IN (2720,2721,2722,2723), +PARTITION p681 VALUES IN (2724,2725,2726,2727), +PARTITION p682 VALUES IN (2728,2729,2730,2731), +PARTITION p683 VALUES IN (2732,2733,2734,2735), +PARTITION p684 VALUES IN (2736,2737,2738,2739), +PARTITION p685 VALUES IN (2740,2741,2742,2743), +PARTITION p686 VALUES IN (2744,2745,2746,2747), +PARTITION p687 VALUES IN (2748,2749,2750,2751), +PARTITION p688 VALUES IN (2752,2753,2754,2755), +PARTITION p689 VALUES IN (2756,2757,2758,2759), +PARTITION p690 VALUES IN (2760,2761,2762,2763), +PARTITION p691 VALUES IN (2764,2765,2766,2767), +PARTITION p692 VALUES IN (2768,2769,2770,2771), +PARTITION p693 VALUES IN (2772,2773,2774,2775), +PARTITION p694 VALUES IN (2776,2777,2778,2779), +PARTITION p695 VALUES IN (2780,2781,2782,2783), +PARTITION p696 VALUES IN (2784,2785,2786,2787), +PARTITION p697 VALUES IN (2788,2789,2790,2791), +PARTITION p698 VALUES IN (2792,2793,2794,2795), +PARTITION p699 VALUES IN (2796,2797,2798,2799), +PARTITION p700 VALUES IN (2800,2801,2802,2803), +PARTITION p701 VALUES IN (2804,2805,2806,2807), +PARTITION p702 VALUES IN (2808,2809,2810,2811), +PARTITION p703 VALUES IN (2812,2813,2814,2815), +PARTITION p704 VALUES IN (2816,2817,2818,2819), +PARTITION p705 VALUES IN (2820,2821,2822,2823), +PARTITION p706 VALUES IN (2824,2825,2826,2827), +PARTITION p707 VALUES IN (2828,2829,2830,2831), +PARTITION p708 VALUES IN (2832,2833,2834,2835), +PARTITION p709 VALUES IN (2836,2837,2838,2839), +PARTITION p710 VALUES IN (2840,2841,2842,2843), +PARTITION p711 VALUES IN (2844,2845,2846,2847), +PARTITION p712 VALUES IN (2848,2849,2850,2851), +PARTITION p713 VALUES IN (2852,2853,2854,2855), +PARTITION p714 VALUES IN (2856,2857,2858,2859), +PARTITION p715 VALUES IN (2860,2861,2862,2863), +PARTITION p716 VALUES IN (2864,2865,2866,2867), +PARTITION p717 VALUES IN (2868,2869,2870,2871), +PARTITION p718 VALUES IN (2872,2873,2874,2875), +PARTITION p719 VALUES IN (2876,2877,2878,2879), +PARTITION p720 VALUES IN (2880,2881,2882,2883), +PARTITION p721 VALUES IN (2884,2885,2886,2887), +PARTITION p722 VALUES IN (2888,2889,2890,2891), +PARTITION p723 VALUES IN (2892,2893,2894,2895), +PARTITION p724 VALUES IN (2896,2897,2898,2899), +PARTITION p725 VALUES IN (2900,2901,2902,2903), +PARTITION p726 VALUES IN (2904,2905,2906,2907), +PARTITION p727 VALUES IN (2908,2909,2910,2911), +PARTITION p728 VALUES IN (2912,2913,2914,2915), +PARTITION p729 VALUES IN (2916,2917,2918,2919), +PARTITION p730 VALUES IN (2920,2921,2922,2923), +PARTITION p731 VALUES IN (2924,2925,2926,2927), +PARTITION p732 VALUES IN (2928,2929,2930,2931), +PARTITION p733 VALUES IN (2932,2933,2934,2935), +PARTITION p734 VALUES IN (2936,2937,2938,2939), +PARTITION p735 VALUES IN (2940,2941,2942,2943), +PARTITION p736 VALUES IN (2944,2945,2946,2947), +PARTITION p737 VALUES IN (2948,2949,2950,2951), +PARTITION p738 VALUES IN (2952,2953,2954,2955), +PARTITION p739 VALUES IN (2956,2957,2958,2959), +PARTITION p740 VALUES IN (2960,2961,2962,2963), +PARTITION p741 VALUES IN (2964,2965,2966,2967), +PARTITION p742 VALUES IN (2968,2969,2970,2971), +PARTITION p743 VALUES IN (2972,2973,2974,2975), +PARTITION p744 VALUES IN (2976,2977,2978,2979), +PARTITION p745 VALUES IN (2980,2981,2982,2983), +PARTITION p746 VALUES IN (2984,2985,2986,2987), +PARTITION p747 VALUES IN (2988,2989,2990,2991), +PARTITION p748 VALUES IN (2992,2993,2994,2995), +PARTITION p749 VALUES IN (2996,2997,2998,2999), +PARTITION p750 VALUES IN (3000,3001,3002,3003), +PARTITION p751 VALUES IN (3004,3005,3006,3007), +PARTITION p752 VALUES IN (3008,3009,3010,3011), +PARTITION p753 VALUES IN (3012,3013,3014,3015), +PARTITION p754 VALUES IN (3016,3017,3018,3019), +PARTITION p755 VALUES IN (3020,3021,3022,3023), +PARTITION p756 VALUES IN (3024,3025,3026,3027), +PARTITION p757 VALUES IN (3028,3029,3030,3031), +PARTITION p758 VALUES IN (3032,3033,3034,3035), +PARTITION p759 VALUES IN (3036,3037,3038,3039), +PARTITION p760 VALUES IN (3040,3041,3042,3043), +PARTITION p761 VALUES IN (3044,3045,3046,3047), +PARTITION p762 VALUES IN (3048,3049,3050,3051), +PARTITION p763 VALUES IN (3052,3053,3054,3055), +PARTITION p764 VALUES IN (3056,3057,3058,3059), +PARTITION p765 VALUES IN (3060,3061,3062,3063), +PARTITION p766 VALUES IN (3064,3065,3066,3067), +PARTITION p767 VALUES IN (3068,3069,3070,3071), +PARTITION p768 VALUES IN (3072,3073,3074,3075), +PARTITION p769 VALUES IN (3076,3077,3078,3079), +PARTITION p770 VALUES IN (3080,3081,3082,3083), +PARTITION p771 VALUES IN (3084,3085,3086,3087), +PARTITION p772 VALUES IN (3088,3089,3090,3091), +PARTITION p773 VALUES IN (3092,3093,3094,3095), +PARTITION p774 VALUES IN (3096,3097,3098,3099), +PARTITION p775 VALUES IN (3100,3101,3102,3103), +PARTITION p776 VALUES IN (3104,3105,3106,3107), +PARTITION p777 VALUES IN (3108,3109,3110,3111), +PARTITION p778 VALUES IN (3112,3113,3114,3115), +PARTITION p779 VALUES IN (3116,3117,3118,3119), +PARTITION p780 VALUES IN (3120,3121,3122,3123), +PARTITION p781 VALUES IN (3124,3125,3126,3127), +PARTITION p782 VALUES IN (3128,3129,3130,3131), +PARTITION p783 VALUES IN (3132,3133,3134,3135), +PARTITION p784 VALUES IN (3136,3137,3138,3139), +PARTITION p785 VALUES IN (3140,3141,3142,3143), +PARTITION p786 VALUES IN (3144,3145,3146,3147), +PARTITION p787 VALUES IN (3148,3149,3150,3151), +PARTITION p788 VALUES IN (3152,3153,3154,3155), +PARTITION p789 VALUES IN (3156,3157,3158,3159), +PARTITION p790 VALUES IN (3160,3161,3162,3163), +PARTITION p791 VALUES IN (3164,3165,3166,3167), +PARTITION p792 VALUES IN (3168,3169,3170,3171), +PARTITION p793 VALUES IN (3172,3173,3174,3175), +PARTITION p794 VALUES IN (3176,3177,3178,3179), +PARTITION p795 VALUES IN (3180,3181,3182,3183), +PARTITION p796 VALUES IN (3184,3185,3186,3187), +PARTITION p797 VALUES IN (3188,3189,3190,3191), +PARTITION p798 VALUES IN (3192,3193,3194,3195), +PARTITION p799 VALUES IN (3196,3197,3198,3199), +PARTITION p800 VALUES IN (3200,3201,3202,3203), +PARTITION p801 VALUES IN (3204,3205,3206,3207), +PARTITION p802 VALUES IN (3208,3209,3210,3211), +PARTITION p803 VALUES IN (3212,3213,3214,3215), +PARTITION p804 VALUES IN (3216,3217,3218,3219), +PARTITION p805 VALUES IN (3220,3221,3222,3223), +PARTITION p806 VALUES IN (3224,3225,3226,3227), +PARTITION p807 VALUES IN (3228,3229,3230,3231), +PARTITION p808 VALUES IN (3232,3233,3234,3235), +PARTITION p809 VALUES IN (3236,3237,3238,3239), +PARTITION p810 VALUES IN (3240,3241,3242,3243), +PARTITION p811 VALUES IN (3244,3245,3246,3247), +PARTITION p812 VALUES IN (3248,3249,3250,3251), +PARTITION p813 VALUES IN (3252,3253,3254,3255), +PARTITION p814 VALUES IN (3256,3257,3258,3259), +PARTITION p815 VALUES IN (3260,3261,3262,3263), +PARTITION p816 VALUES IN (3264,3265,3266,3267), +PARTITION p817 VALUES IN (3268,3269,3270,3271), +PARTITION p818 VALUES IN (3272,3273,3274,3275), +PARTITION p819 VALUES IN (3276,3277,3278,3279), +PARTITION p820 VALUES IN (3280,3281,3282,3283), +PARTITION p821 VALUES IN (3284,3285,3286,3287), +PARTITION p822 VALUES IN (3288,3289,3290,3291), +PARTITION p823 VALUES IN (3292,3293,3294,3295), +PARTITION p824 VALUES IN (3296,3297,3298,3299), +PARTITION p825 VALUES IN (3300,3301,3302,3303), +PARTITION p826 VALUES IN (3304,3305,3306,3307), +PARTITION p827 VALUES IN (3308,3309,3310,3311), +PARTITION p828 VALUES IN (3312,3313,3314,3315), +PARTITION p829 VALUES IN (3316,3317,3318,3319), +PARTITION p830 VALUES IN (3320,3321,3322,3323), +PARTITION p831 VALUES IN (3324,3325,3326,3327), +PARTITION p832 VALUES IN (3328,3329,3330,3331), +PARTITION p833 VALUES IN (3332,3333,3334,3335), +PARTITION p834 VALUES IN (3336,3337,3338,3339), +PARTITION p835 VALUES IN (3340,3341,3342,3343), +PARTITION p836 VALUES IN (3344,3345,3346,3347), +PARTITION p837 VALUES IN (3348,3349,3350,3351), +PARTITION p838 VALUES IN (3352,3353,3354,3355), +PARTITION p839 VALUES IN (3356,3357,3358,3359), +PARTITION p840 VALUES IN (3360,3361,3362,3363), +PARTITION p841 VALUES IN (3364,3365,3366,3367), +PARTITION p842 VALUES IN (3368,3369,3370,3371), +PARTITION p843 VALUES IN (3372,3373,3374,3375), +PARTITION p844 VALUES IN (3376,3377,3378,3379), +PARTITION p845 VALUES IN (3380,3381,3382,3383), +PARTITION p846 VALUES IN (3384,3385,3386,3387), +PARTITION p847 VALUES IN (3388,3389,3390,3391), +PARTITION p848 VALUES IN (3392,3393,3394,3395), +PARTITION p849 VALUES IN (3396,3397,3398,3399), +PARTITION p850 VALUES IN (3400,3401,3402,3403), +PARTITION p851 VALUES IN (3404,3405,3406,3407), +PARTITION p852 VALUES IN (3408,3409,3410,3411), +PARTITION p853 VALUES IN (3412,3413,3414,3415), +PARTITION p854 VALUES IN (3416,3417,3418,3419), +PARTITION p855 VALUES IN (3420,3421,3422,3423), +PARTITION p856 VALUES IN (3424,3425,3426,3427), +PARTITION p857 VALUES IN (3428,3429,3430,3431), +PARTITION p858 VALUES IN (3432,3433,3434,3435), +PARTITION p859 VALUES IN (3436,3437,3438,3439), +PARTITION p860 VALUES IN (3440,3441,3442,3443), +PARTITION p861 VALUES IN (3444,3445,3446,3447), +PARTITION p862 VALUES IN (3448,3449,3450,3451), +PARTITION p863 VALUES IN (3452,3453,3454,3455), +PARTITION p864 VALUES IN (3456,3457,3458,3459), +PARTITION p865 VALUES IN (3460,3461,3462,3463), +PARTITION p866 VALUES IN (3464,3465,3466,3467), +PARTITION p867 VALUES IN (3468,3469,3470,3471), +PARTITION p868 VALUES IN (3472,3473,3474,3475), +PARTITION p869 VALUES IN (3476,3477,3478,3479), +PARTITION p870 VALUES IN (3480,3481,3482,3483), +PARTITION p871 VALUES IN (3484,3485,3486,3487), +PARTITION p872 VALUES IN (3488,3489,3490,3491), +PARTITION p873 VALUES IN (3492,3493,3494,3495), +PARTITION p874 VALUES IN (3496,3497,3498,3499), +PARTITION p875 VALUES IN (3500,3501,3502,3503), +PARTITION p876 VALUES IN (3504,3505,3506,3507), +PARTITION p877 VALUES IN (3508,3509,3510,3511), +PARTITION p878 VALUES IN (3512,3513,3514,3515), +PARTITION p879 VALUES IN (3516,3517,3518,3519), +PARTITION p880 VALUES IN (3520,3521,3522,3523), +PARTITION p881 VALUES IN (3524,3525,3526,3527), +PARTITION p882 VALUES IN (3528,3529,3530,3531), +PARTITION p883 VALUES IN (3532,3533,3534,3535), +PARTITION p884 VALUES IN (3536,3537,3538,3539), +PARTITION p885 VALUES IN (3540,3541,3542,3543), +PARTITION p886 VALUES IN (3544,3545,3546,3547), +PARTITION p887 VALUES IN (3548,3549,3550,3551), +PARTITION p888 VALUES IN (3552,3553,3554,3555), +PARTITION p889 VALUES IN (3556,3557,3558,3559), +PARTITION p890 VALUES IN (3560,3561,3562,3563), +PARTITION p891 VALUES IN (3564,3565,3566,3567), +PARTITION p892 VALUES IN (3568,3569,3570,3571), +PARTITION p893 VALUES IN (3572,3573,3574,3575), +PARTITION p894 VALUES IN (3576,3577,3578,3579), +PARTITION p895 VALUES IN (3580,3581,3582,3583), +PARTITION p896 VALUES IN (3584,3585,3586,3587), +PARTITION p897 VALUES IN (3588,3589,3590,3591), +PARTITION p898 VALUES IN (3592,3593,3594,3595), +PARTITION p899 VALUES IN (3596,3597,3598,3599), +PARTITION p900 VALUES IN (3600,3601,3602,3603), +PARTITION p901 VALUES IN (3604,3605,3606,3607), +PARTITION p902 VALUES IN (3608,3609,3610,3611), +PARTITION p903 VALUES IN (3612,3613,3614,3615), +PARTITION p904 VALUES IN (3616,3617,3618,3619), +PARTITION p905 VALUES IN (3620,3621,3622,3623), +PARTITION p906 VALUES IN (3624,3625,3626,3627), +PARTITION p907 VALUES IN (3628,3629,3630,3631), +PARTITION p908 VALUES IN (3632,3633,3634,3635), +PARTITION p909 VALUES IN (3636,3637,3638,3639), +PARTITION p910 VALUES IN (3640,3641,3642,3643), +PARTITION p911 VALUES IN (3644,3645,3646,3647), +PARTITION p912 VALUES IN (3648,3649,3650,3651), +PARTITION p913 VALUES IN (3652,3653,3654,3655), +PARTITION p914 VALUES IN (3656,3657,3658,3659), +PARTITION p915 VALUES IN (3660,3661,3662,3663), +PARTITION p916 VALUES IN (3664,3665,3666,3667), +PARTITION p917 VALUES IN (3668,3669,3670,3671), +PARTITION p918 VALUES IN (3672,3673,3674,3675), +PARTITION p919 VALUES IN (3676,3677,3678,3679), +PARTITION p920 VALUES IN (3680,3681,3682,3683), +PARTITION p921 VALUES IN (3684,3685,3686,3687), +PARTITION p922 VALUES IN (3688,3689,3690,3691), +PARTITION p923 VALUES IN (3692,3693,3694,3695), +PARTITION p924 VALUES IN (3696,3697,3698,3699), +PARTITION p925 VALUES IN (3700,3701,3702,3703), +PARTITION p926 VALUES IN (3704,3705,3706,3707), +PARTITION p927 VALUES IN (3708,3709,3710,3711), +PARTITION p928 VALUES IN (3712,3713,3714,3715), +PARTITION p929 VALUES IN (3716,3717,3718,3719), +PARTITION p930 VALUES IN (3720,3721,3722,3723), +PARTITION p931 VALUES IN (3724,3725,3726,3727), +PARTITION p932 VALUES IN (3728,3729,3730,3731), +PARTITION p933 VALUES IN (3732,3733,3734,3735), +PARTITION p934 VALUES IN (3736,3737,3738,3739), +PARTITION p935 VALUES IN (3740,3741,3742,3743), +PARTITION p936 VALUES IN (3744,3745,3746,3747), +PARTITION p937 VALUES IN (3748,3749,3750,3751), +PARTITION p938 VALUES IN (3752,3753,3754,3755), +PARTITION p939 VALUES IN (3756,3757,3758,3759), +PARTITION p940 VALUES IN (3760,3761,3762,3763), +PARTITION p941 VALUES IN (3764,3765,3766,3767), +PARTITION p942 VALUES IN (3768,3769,3770,3771), +PARTITION p943 VALUES IN (3772,3773,3774,3775), +PARTITION p944 VALUES IN (3776,3777,3778,3779), +PARTITION p945 VALUES IN (3780,3781,3782,3783), +PARTITION p946 VALUES IN (3784,3785,3786,3787), +PARTITION p947 VALUES IN (3788,3789,3790,3791), +PARTITION p948 VALUES IN (3792,3793,3794,3795), +PARTITION p949 VALUES IN (3796,3797,3798,3799), +PARTITION p950 VALUES IN (3800,3801,3802,3803), +PARTITION p951 VALUES IN (3804,3805,3806,3807), +PARTITION p952 VALUES IN (3808,3809,3810,3811), +PARTITION p953 VALUES IN (3812,3813,3814,3815), +PARTITION p954 VALUES IN (3816,3817,3818,3819), +PARTITION p955 VALUES IN (3820,3821,3822,3823), +PARTITION p956 VALUES IN (3824,3825,3826,3827), +PARTITION p957 VALUES IN (3828,3829,3830,3831), +PARTITION p958 VALUES IN (3832,3833,3834,3835), +PARTITION p959 VALUES IN (3836,3837,3838,3839), +PARTITION p960 VALUES IN (3840,3841,3842,3843), +PARTITION p961 VALUES IN (3844,3845,3846,3847), +PARTITION p962 VALUES IN (3848,3849,3850,3851), +PARTITION p963 VALUES IN (3852,3853,3854,3855), +PARTITION p964 VALUES IN (3856,3857,3858,3859), +PARTITION p965 VALUES IN (3860,3861,3862,3863), +PARTITION p966 VALUES IN (3864,3865,3866,3867), +PARTITION p967 VALUES IN (3868,3869,3870,3871), +PARTITION p968 VALUES IN (3872,3873,3874,3875), +PARTITION p969 VALUES IN (3876,3877,3878,3879), +PARTITION p970 VALUES IN (3880,3881,3882,3883), +PARTITION p971 VALUES IN (3884,3885,3886,3887), +PARTITION p972 VALUES IN (3888,3889,3890,3891), +PARTITION p973 VALUES IN (3892,3893,3894,3895), +PARTITION p974 VALUES IN (3896,3897,3898,3899), +PARTITION p975 VALUES IN (3900,3901,3902,3903), +PARTITION p976 VALUES IN (3904,3905,3906,3907), +PARTITION p977 VALUES IN (3908,3909,3910,3911), +PARTITION p978 VALUES IN (3912,3913,3914,3915), +PARTITION p979 VALUES IN (3916,3917,3918,3919), +PARTITION p980 VALUES IN (3920,3921,3922,3923), +PARTITION p981 VALUES IN (3924,3925,3926,3927), +PARTITION p982 VALUES IN (3928,3929,3930,3931), +PARTITION p983 VALUES IN (3932,3933,3934,3935), +PARTITION p984 VALUES IN (3936,3937,3938,3939), +PARTITION p985 VALUES IN (3940,3941,3942,3943), +PARTITION p986 VALUES IN (3944,3945,3946,3947), +PARTITION p987 VALUES IN (3948,3949,3950,3951), +PARTITION p988 VALUES IN (3952,3953,3954,3955), +PARTITION p989 VALUES IN (3956,3957,3958,3959), +PARTITION p990 VALUES IN (3960,3961,3962,3963), +PARTITION p991 VALUES IN (3964,3965,3966,3967), +PARTITION p992 VALUES IN (3968,3969,3970,3971), +PARTITION p993 VALUES IN (3972,3973,3974,3975), +PARTITION p994 VALUES IN (3976,3977,3978,3979), +PARTITION p995 VALUES IN (3980,3981,3982,3983), +PARTITION p996 VALUES IN (3984,3985,3986,3987), +PARTITION p997 VALUES IN (3988,3989,3990,3991), +PARTITION p998 VALUES IN (3992,3993,3994,3995), +PARTITION p999 VALUES IN (3996,3997,3998,3999), +PARTITION p1000 VALUES IN (4000,4001,4002,4003), +PARTITION p1001 VALUES IN (4004,4005,4006,4007), +PARTITION p1002 VALUES IN (4008,4009,4010,4011), +PARTITION p1003 VALUES IN (4012,4013,4014,4015), +PARTITION p1004 VALUES IN (4016,4017,4018,4019), +PARTITION p1005 VALUES IN (4020,4021,4022,4023), +PARTITION p1006 VALUES IN (4024,4025,4026,4027), +PARTITION p1007 VALUES IN (4028,4029,4030,4031), +PARTITION p1008 VALUES IN (4032,4033,4034,4035), +PARTITION p1009 VALUES IN (4036,4037,4038,4039), +PARTITION p1010 VALUES IN (4040,4041,4042,4043), +PARTITION p1011 VALUES IN (4044,4045,4046,4047), +PARTITION p1012 VALUES IN (4048,4049,4050,4051), +PARTITION p1013 VALUES IN (4052,4053,4054,4055), +PARTITION p1014 VALUES IN (4056,4057,4058,4059), +PARTITION p1015 VALUES IN (4060,4061,4062,4063), +PARTITION p1016 VALUES IN (4064,4065,4066,4067), +PARTITION p1017 VALUES IN (4068,4069,4070,4071), +PARTITION p1018 VALUES IN (4072,4073,4074,4075), +PARTITION p1019 VALUES IN (4076,4077,4078,4079), +PARTITION p1020 VALUES IN (4080,4081,4082,4083), +PARTITION p1021 VALUES IN (4084,4085,4086,4087), +PARTITION p1022 VALUES IN (4088,4089,4090,4091), +PARTITION p1023 VALUES IN (4092,4093,4094,4095), +PARTITION p1024 VALUES IN (4096,4097,4098,4099), +PARTITION p1025 VALUES IN (4100,4101,4102,4103), +PARTITION p1026 VALUES IN (4104,4105,4106,4107), +PARTITION p1027 VALUES IN (4108,4109,4110,4111), +PARTITION p1028 VALUES IN (4112,4113,4114,4115), +PARTITION p1029 VALUES IN (4116,4117,4118,4119), +PARTITION p1030 VALUES IN (4120,4121,4122,4123), +PARTITION p1031 VALUES IN (4124,4125,4126,4127), +PARTITION p1032 VALUES IN (4128,4129,4130,4131), +PARTITION p1033 VALUES IN (4132,4133,4134,4135), +PARTITION p1034 VALUES IN (4136,4137,4138,4139), +PARTITION p1035 VALUES IN (4140,4141,4142,4143), +PARTITION p1036 VALUES IN (4144,4145,4146,4147), +PARTITION p1037 VALUES IN (4148,4149,4150,4151), +PARTITION p1038 VALUES IN (4152,4153,4154,4155), +PARTITION p1039 VALUES IN (4156,4157,4158,4159), +PARTITION p1040 VALUES IN (4160,4161,4162,4163), +PARTITION p1041 VALUES IN (4164,4165,4166,4167), +PARTITION p1042 VALUES IN (4168,4169,4170,4171), +PARTITION p1043 VALUES IN (4172,4173,4174,4175), +PARTITION p1044 VALUES IN (4176,4177,4178,4179), +PARTITION p1045 VALUES IN (4180,4181,4182,4183), +PARTITION p1046 VALUES IN (4184,4185,4186,4187), +PARTITION p1047 VALUES IN (4188,4189,4190,4191), +PARTITION p1048 VALUES IN (4192,4193,4194,4195), +PARTITION p1049 VALUES IN (4196,4197,4198,4199), +PARTITION p1050 VALUES IN (4200,4201,4202,4203), +PARTITION p1051 VALUES IN (4204,4205,4206,4207), +PARTITION p1052 VALUES IN (4208,4209,4210,4211), +PARTITION p1053 VALUES IN (4212,4213,4214,4215), +PARTITION p1054 VALUES IN (4216,4217,4218,4219), +PARTITION p1055 VALUES IN (4220,4221,4222,4223), +PARTITION p1056 VALUES IN (4224,4225,4226,4227), +PARTITION p1057 VALUES IN (4228,4229,4230,4231), +PARTITION p1058 VALUES IN (4232,4233,4234,4235), +PARTITION p1059 VALUES IN (4236,4237,4238,4239), +PARTITION p1060 VALUES IN (4240,4241,4242,4243), +PARTITION p1061 VALUES IN (4244,4245,4246,4247), +PARTITION p1062 VALUES IN (4248,4249,4250,4251), +PARTITION p1063 VALUES IN (4252,4253,4254,4255), +PARTITION p1064 VALUES IN (4256,4257,4258,4259), +PARTITION p1065 VALUES IN (4260,4261,4262,4263), +PARTITION p1066 VALUES IN (4264,4265,4266,4267), +PARTITION p1067 VALUES IN (4268,4269,4270,4271), +PARTITION p1068 VALUES IN (4272,4273,4274,4275), +PARTITION p1069 VALUES IN (4276,4277,4278,4279), +PARTITION p1070 VALUES IN (4280,4281,4282,4283), +PARTITION p1071 VALUES IN (4284,4285,4286,4287), +PARTITION p1072 VALUES IN (4288,4289,4290,4291), +PARTITION p1073 VALUES IN (4292,4293,4294,4295), +PARTITION p1074 VALUES IN (4296,4297,4298,4299), +PARTITION p1075 VALUES IN (4300,4301,4302,4303), +PARTITION p1076 VALUES IN (4304,4305,4306,4307), +PARTITION p1077 VALUES IN (4308,4309,4310,4311), +PARTITION p1078 VALUES IN (4312,4313,4314,4315), +PARTITION p1079 VALUES IN (4316,4317,4318,4319), +PARTITION p1080 VALUES IN (4320,4321,4322,4323), +PARTITION p1081 VALUES IN (4324,4325,4326,4327), +PARTITION p1082 VALUES IN (4328,4329,4330,4331), +PARTITION p1083 VALUES IN (4332,4333,4334,4335), +PARTITION p1084 VALUES IN (4336,4337,4338,4339), +PARTITION p1085 VALUES IN (4340,4341,4342,4343), +PARTITION p1086 VALUES IN (4344,4345,4346,4347), +PARTITION p1087 VALUES IN (4348,4349,4350,4351), +PARTITION p1088 VALUES IN (4352,4353,4354,4355), +PARTITION p1089 VALUES IN (4356,4357,4358,4359), +PARTITION p1090 VALUES IN (4360,4361,4362,4363), +PARTITION p1091 VALUES IN (4364,4365,4366,4367), +PARTITION p1092 VALUES IN (4368,4369,4370,4371), +PARTITION p1093 VALUES IN (4372,4373,4374,4375), +PARTITION p1094 VALUES IN (4376,4377,4378,4379), +PARTITION p1095 VALUES IN (4380,4381,4382,4383), +PARTITION p1096 VALUES IN (4384,4385,4386,4387), +PARTITION p1097 VALUES IN (4388,4389,4390,4391), +PARTITION p1098 VALUES IN (4392,4393,4394,4395), +PARTITION p1099 VALUES IN (4396,4397,4398,4399), +PARTITION p1100 VALUES IN (4400,4401,4402,4403), +PARTITION p1101 VALUES IN (4404,4405,4406,4407), +PARTITION p1102 VALUES IN (4408,4409,4410,4411), +PARTITION p1103 VALUES IN (4412,4413,4414,4415), +PARTITION p1104 VALUES IN (4416,4417,4418,4419), +PARTITION p1105 VALUES IN (4420,4421,4422,4423), +PARTITION p1106 VALUES IN (4424,4425,4426,4427), +PARTITION p1107 VALUES IN (4428,4429,4430,4431), +PARTITION p1108 VALUES IN (4432,4433,4434,4435), +PARTITION p1109 VALUES IN (4436,4437,4438,4439), +PARTITION p1110 VALUES IN (4440,4441,4442,4443), +PARTITION p1111 VALUES IN (4444,4445,4446,4447), +PARTITION p1112 VALUES IN (4448,4449,4450,4451), +PARTITION p1113 VALUES IN (4452,4453,4454,4455), +PARTITION p1114 VALUES IN (4456,4457,4458,4459), +PARTITION p1115 VALUES IN (4460,4461,4462,4463), +PARTITION p1116 VALUES IN (4464,4465,4466,4467), +PARTITION p1117 VALUES IN (4468,4469,4470,4471), +PARTITION p1118 VALUES IN (4472,4473,4474,4475), +PARTITION p1119 VALUES IN (4476,4477,4478,4479), +PARTITION p1120 VALUES IN (4480,4481,4482,4483), +PARTITION p1121 VALUES IN (4484,4485,4486,4487), +PARTITION p1122 VALUES IN (4488,4489,4490,4491), +PARTITION p1123 VALUES IN (4492,4493,4494,4495), +PARTITION p1124 VALUES IN (4496,4497,4498,4499), +PARTITION p1125 VALUES IN (4500,4501,4502,4503), +PARTITION p1126 VALUES IN (4504,4505,4506,4507), +PARTITION p1127 VALUES IN (4508,4509,4510,4511), +PARTITION p1128 VALUES IN (4512,4513,4514,4515), +PARTITION p1129 VALUES IN (4516,4517,4518,4519), +PARTITION p1130 VALUES IN (4520,4521,4522,4523), +PARTITION p1131 VALUES IN (4524,4525,4526,4527), +PARTITION p1132 VALUES IN (4528,4529,4530,4531), +PARTITION p1133 VALUES IN (4532,4533,4534,4535), +PARTITION p1134 VALUES IN (4536,4537,4538,4539), +PARTITION p1135 VALUES IN (4540,4541,4542,4543), +PARTITION p1136 VALUES IN (4544,4545,4546,4547), +PARTITION p1137 VALUES IN (4548,4549,4550,4551), +PARTITION p1138 VALUES IN (4552,4553,4554,4555), +PARTITION p1139 VALUES IN (4556,4557,4558,4559), +PARTITION p1140 VALUES IN (4560,4561,4562,4563), +PARTITION p1141 VALUES IN (4564,4565,4566,4567), +PARTITION p1142 VALUES IN (4568,4569,4570,4571), +PARTITION p1143 VALUES IN (4572,4573,4574,4575), +PARTITION p1144 VALUES IN (4576,4577,4578,4579), +PARTITION p1145 VALUES IN (4580,4581,4582,4583), +PARTITION p1146 VALUES IN (4584,4585,4586,4587), +PARTITION p1147 VALUES IN (4588,4589,4590,4591), +PARTITION p1148 VALUES IN (4592,4593,4594,4595), +PARTITION p1149 VALUES IN (4596,4597,4598,4599), +PARTITION p1150 VALUES IN (4600,4601,4602,4603), +PARTITION p1151 VALUES IN (4604,4605,4606,4607), +PARTITION p1152 VALUES IN (4608,4609,4610,4611), +PARTITION p1153 VALUES IN (4612,4613,4614,4615), +PARTITION p1154 VALUES IN (4616,4617,4618,4619), +PARTITION p1155 VALUES IN (4620,4621,4622,4623), +PARTITION p1156 VALUES IN (4624,4625,4626,4627), +PARTITION p1157 VALUES IN (4628,4629,4630,4631), +PARTITION p1158 VALUES IN (4632,4633,4634,4635), +PARTITION p1159 VALUES IN (4636,4637,4638,4639), +PARTITION p1160 VALUES IN (4640,4641,4642,4643), +PARTITION p1161 VALUES IN (4644,4645,4646,4647), +PARTITION p1162 VALUES IN (4648,4649,4650,4651), +PARTITION p1163 VALUES IN (4652,4653,4654,4655), +PARTITION p1164 VALUES IN (4656,4657,4658,4659), +PARTITION p1165 VALUES IN (4660,4661,4662,4663), +PARTITION p1166 VALUES IN (4664,4665,4666,4667), +PARTITION p1167 VALUES IN (4668,4669,4670,4671), +PARTITION p1168 VALUES IN (4672,4673,4674,4675), +PARTITION p1169 VALUES IN (4676,4677,4678,4679), +PARTITION p1170 VALUES IN (4680,4681,4682,4683), +PARTITION p1171 VALUES IN (4684,4685,4686,4687), +PARTITION p1172 VALUES IN (4688,4689,4690,4691), +PARTITION p1173 VALUES IN (4692,4693,4694,4695), +PARTITION p1174 VALUES IN (4696,4697,4698,4699), +PARTITION p1175 VALUES IN (4700,4701,4702,4703), +PARTITION p1176 VALUES IN (4704,4705,4706,4707), +PARTITION p1177 VALUES IN (4708,4709,4710,4711), +PARTITION p1178 VALUES IN (4712,4713,4714,4715), +PARTITION p1179 VALUES IN (4716,4717,4718,4719), +PARTITION p1180 VALUES IN (4720,4721,4722,4723), +PARTITION p1181 VALUES IN (4724,4725,4726,4727), +PARTITION p1182 VALUES IN (4728,4729,4730,4731), +PARTITION p1183 VALUES IN (4732,4733,4734,4735), +PARTITION p1184 VALUES IN (4736,4737,4738,4739), +PARTITION p1185 VALUES IN (4740,4741,4742,4743), +PARTITION p1186 VALUES IN (4744,4745,4746,4747), +PARTITION p1187 VALUES IN (4748,4749,4750,4751), +PARTITION p1188 VALUES IN (4752,4753,4754,4755), +PARTITION p1189 VALUES IN (4756,4757,4758,4759), +PARTITION p1190 VALUES IN (4760,4761,4762,4763), +PARTITION p1191 VALUES IN (4764,4765,4766,4767), +PARTITION p1192 VALUES IN (4768,4769,4770,4771), +PARTITION p1193 VALUES IN (4772,4773,4774,4775), +PARTITION p1194 VALUES IN (4776,4777,4778,4779), +PARTITION p1195 VALUES IN (4780,4781,4782,4783), +PARTITION p1196 VALUES IN (4784,4785,4786,4787), +PARTITION p1197 VALUES IN (4788,4789,4790,4791), +PARTITION p1198 VALUES IN (4792,4793,4794,4795), +PARTITION p1199 VALUES IN (4796,4797,4798,4799), +PARTITION p1200 VALUES IN (4800,4801,4802,4803), +PARTITION p1201 VALUES IN (4804,4805,4806,4807), +PARTITION p1202 VALUES IN (4808,4809,4810,4811), +PARTITION p1203 VALUES IN (4812,4813,4814,4815), +PARTITION p1204 VALUES IN (4816,4817,4818,4819), +PARTITION p1205 VALUES IN (4820,4821,4822,4823), +PARTITION p1206 VALUES IN (4824,4825,4826,4827), +PARTITION p1207 VALUES IN (4828,4829,4830,4831), +PARTITION p1208 VALUES IN (4832,4833,4834,4835), +PARTITION p1209 VALUES IN (4836,4837,4838,4839), +PARTITION p1210 VALUES IN (4840,4841,4842,4843), +PARTITION p1211 VALUES IN (4844,4845,4846,4847), +PARTITION p1212 VALUES IN (4848,4849,4850,4851), +PARTITION p1213 VALUES IN (4852,4853,4854,4855), +PARTITION p1214 VALUES IN (4856,4857,4858,4859), +PARTITION p1215 VALUES IN (4860,4861,4862,4863), +PARTITION p1216 VALUES IN (4864,4865,4866,4867), +PARTITION p1217 VALUES IN (4868,4869,4870,4871), +PARTITION p1218 VALUES IN (4872,4873,4874,4875), +PARTITION p1219 VALUES IN (4876,4877,4878,4879), +PARTITION p1220 VALUES IN (4880,4881,4882,4883), +PARTITION p1221 VALUES IN (4884,4885,4886,4887), +PARTITION p1222 VALUES IN (4888,4889,4890,4891), +PARTITION p1223 VALUES IN (4892,4893,4894,4895), +PARTITION p1224 VALUES IN (4896,4897,4898,4899), +PARTITION p1225 VALUES IN (4900,4901,4902,4903), +PARTITION p1226 VALUES IN (4904,4905,4906,4907), +PARTITION p1227 VALUES IN (4908,4909,4910,4911), +PARTITION p1228 VALUES IN (4912,4913,4914,4915), +PARTITION p1229 VALUES IN (4916,4917,4918,4919), +PARTITION p1230 VALUES IN (4920,4921,4922,4923), +PARTITION p1231 VALUES IN (4924,4925,4926,4927), +PARTITION p1232 VALUES IN (4928,4929,4930,4931), +PARTITION p1233 VALUES IN (4932,4933,4934,4935), +PARTITION p1234 VALUES IN (4936,4937,4938,4939), +PARTITION p1235 VALUES IN (4940,4941,4942,4943), +PARTITION p1236 VALUES IN (4944,4945,4946,4947), +PARTITION p1237 VALUES IN (4948,4949,4950,4951), +PARTITION p1238 VALUES IN (4952,4953,4954,4955), +PARTITION p1239 VALUES IN (4956,4957,4958,4959), +PARTITION p1240 VALUES IN (4960,4961,4962,4963), +PARTITION p1241 VALUES IN (4964,4965,4966,4967), +PARTITION p1242 VALUES IN (4968,4969,4970,4971), +PARTITION p1243 VALUES IN (4972,4973,4974,4975), +PARTITION p1244 VALUES IN (4976,4977,4978,4979), +PARTITION p1245 VALUES IN (4980,4981,4982,4983), +PARTITION p1246 VALUES IN (4984,4985,4986,4987), +PARTITION p1247 VALUES IN (4988,4989,4990,4991), +PARTITION p1248 VALUES IN (4992,4993,4994,4995), +PARTITION p1249 VALUES IN (4996,4997,4998,4999), +PARTITION p1250 VALUES IN (5000,5001,5002,5003), +PARTITION p1251 VALUES IN (5004,5005,5006,5007), +PARTITION p1252 VALUES IN (5008,5009,5010,5011), +PARTITION p1253 VALUES IN (5012,5013,5014,5015), +PARTITION p1254 VALUES IN (5016,5017,5018,5019), +PARTITION p1255 VALUES IN (5020,5021,5022,5023), +PARTITION p1256 VALUES IN (5024,5025,5026,5027), +PARTITION p1257 VALUES IN (5028,5029,5030,5031), +PARTITION p1258 VALUES IN (5032,5033,5034,5035), +PARTITION p1259 VALUES IN (5036,5037,5038,5039), +PARTITION p1260 VALUES IN (5040,5041,5042,5043), +PARTITION p1261 VALUES IN (5044,5045,5046,5047), +PARTITION p1262 VALUES IN (5048,5049,5050,5051), +PARTITION p1263 VALUES IN (5052,5053,5054,5055), +PARTITION p1264 VALUES IN (5056,5057,5058,5059), +PARTITION p1265 VALUES IN (5060,5061,5062,5063), +PARTITION p1266 VALUES IN (5064,5065,5066,5067), +PARTITION p1267 VALUES IN (5068,5069,5070,5071), +PARTITION p1268 VALUES IN (5072,5073,5074,5075), +PARTITION p1269 VALUES IN (5076,5077,5078,5079), +PARTITION p1270 VALUES IN (5080,5081,5082,5083), +PARTITION p1271 VALUES IN (5084,5085,5086,5087), +PARTITION p1272 VALUES IN (5088,5089,5090,5091), +PARTITION p1273 VALUES IN (5092,5093,5094,5095), +PARTITION p1274 VALUES IN (5096,5097,5098,5099), +PARTITION p1275 VALUES IN (5100,5101,5102,5103), +PARTITION p1276 VALUES IN (5104,5105,5106,5107), +PARTITION p1277 VALUES IN (5108,5109,5110,5111), +PARTITION p1278 VALUES IN (5112,5113,5114,5115), +PARTITION p1279 VALUES IN (5116,5117,5118,5119), +PARTITION p1280 VALUES IN (5120,5121,5122,5123), +PARTITION p1281 VALUES IN (5124,5125,5126,5127), +PARTITION p1282 VALUES IN (5128,5129,5130,5131), +PARTITION p1283 VALUES IN (5132,5133,5134,5135), +PARTITION p1284 VALUES IN (5136,5137,5138,5139), +PARTITION p1285 VALUES IN (5140,5141,5142,5143), +PARTITION p1286 VALUES IN (5144,5145,5146,5147), +PARTITION p1287 VALUES IN (5148,5149,5150,5151), +PARTITION p1288 VALUES IN (5152,5153,5154,5155), +PARTITION p1289 VALUES IN (5156,5157,5158,5159), +PARTITION p1290 VALUES IN (5160,5161,5162,5163), +PARTITION p1291 VALUES IN (5164,5165,5166,5167), +PARTITION p1292 VALUES IN (5168,5169,5170,5171), +PARTITION p1293 VALUES IN (5172,5173,5174,5175), +PARTITION p1294 VALUES IN (5176,5177,5178,5179), +PARTITION p1295 VALUES IN (5180,5181,5182,5183), +PARTITION p1296 VALUES IN (5184,5185,5186,5187), +PARTITION p1297 VALUES IN (5188,5189,5190,5191), +PARTITION p1298 VALUES IN (5192,5193,5194,5195), +PARTITION p1299 VALUES IN (5196,5197,5198,5199), +PARTITION p1300 VALUES IN (5200,5201,5202,5203), +PARTITION p1301 VALUES IN (5204,5205,5206,5207), +PARTITION p1302 VALUES IN (5208,5209,5210,5211), +PARTITION p1303 VALUES IN (5212,5213,5214,5215), +PARTITION p1304 VALUES IN (5216,5217,5218,5219), +PARTITION p1305 VALUES IN (5220,5221,5222,5223), +PARTITION p1306 VALUES IN (5224,5225,5226,5227), +PARTITION p1307 VALUES IN (5228,5229,5230,5231), +PARTITION p1308 VALUES IN (5232,5233,5234,5235), +PARTITION p1309 VALUES IN (5236,5237,5238,5239), +PARTITION p1310 VALUES IN (5240,5241,5242,5243), +PARTITION p1311 VALUES IN (5244,5245,5246,5247), +PARTITION p1312 VALUES IN (5248,5249,5250,5251), +PARTITION p1313 VALUES IN (5252,5253,5254,5255), +PARTITION p1314 VALUES IN (5256,5257,5258,5259), +PARTITION p1315 VALUES IN (5260,5261,5262,5263), +PARTITION p1316 VALUES IN (5264,5265,5266,5267), +PARTITION p1317 VALUES IN (5268,5269,5270,5271), +PARTITION p1318 VALUES IN (5272,5273,5274,5275), +PARTITION p1319 VALUES IN (5276,5277,5278,5279), +PARTITION p1320 VALUES IN (5280,5281,5282,5283), +PARTITION p1321 VALUES IN (5284,5285,5286,5287), +PARTITION p1322 VALUES IN (5288,5289,5290,5291), +PARTITION p1323 VALUES IN (5292,5293,5294,5295), +PARTITION p1324 VALUES IN (5296,5297,5298,5299), +PARTITION p1325 VALUES IN (5300,5301,5302,5303), +PARTITION p1326 VALUES IN (5304,5305,5306,5307), +PARTITION p1327 VALUES IN (5308,5309,5310,5311), +PARTITION p1328 VALUES IN (5312,5313,5314,5315), +PARTITION p1329 VALUES IN (5316,5317,5318,5319), +PARTITION p1330 VALUES IN (5320,5321,5322,5323), +PARTITION p1331 VALUES IN (5324,5325,5326,5327), +PARTITION p1332 VALUES IN (5328,5329,5330,5331), +PARTITION p1333 VALUES IN (5332,5333,5334,5335), +PARTITION p1334 VALUES IN (5336,5337,5338,5339), +PARTITION p1335 VALUES IN (5340,5341,5342,5343), +PARTITION p1336 VALUES IN (5344,5345,5346,5347), +PARTITION p1337 VALUES IN (5348,5349,5350,5351), +PARTITION p1338 VALUES IN (5352,5353,5354,5355), +PARTITION p1339 VALUES IN (5356,5357,5358,5359), +PARTITION p1340 VALUES IN (5360,5361,5362,5363), +PARTITION p1341 VALUES IN (5364,5365,5366,5367), +PARTITION p1342 VALUES IN (5368,5369,5370,5371), +PARTITION p1343 VALUES IN (5372,5373,5374,5375), +PARTITION p1344 VALUES IN (5376,5377,5378,5379), +PARTITION p1345 VALUES IN (5380,5381,5382,5383), +PARTITION p1346 VALUES IN (5384,5385,5386,5387), +PARTITION p1347 VALUES IN (5388,5389,5390,5391), +PARTITION p1348 VALUES IN (5392,5393,5394,5395), +PARTITION p1349 VALUES IN (5396,5397,5398,5399), +PARTITION p1350 VALUES IN (5400,5401,5402,5403), +PARTITION p1351 VALUES IN (5404,5405,5406,5407), +PARTITION p1352 VALUES IN (5408,5409,5410,5411), +PARTITION p1353 VALUES IN (5412,5413,5414,5415), +PARTITION p1354 VALUES IN (5416,5417,5418,5419), +PARTITION p1355 VALUES IN (5420,5421,5422,5423), +PARTITION p1356 VALUES IN (5424,5425,5426,5427), +PARTITION p1357 VALUES IN (5428,5429,5430,5431), +PARTITION p1358 VALUES IN (5432,5433,5434,5435), +PARTITION p1359 VALUES IN (5436,5437,5438,5439), +PARTITION p1360 VALUES IN (5440,5441,5442,5443), +PARTITION p1361 VALUES IN (5444,5445,5446,5447), +PARTITION p1362 VALUES IN (5448,5449,5450,5451), +PARTITION p1363 VALUES IN (5452,5453,5454,5455), +PARTITION p1364 VALUES IN (5456,5457,5458,5459), +PARTITION p1365 VALUES IN (5460,5461,5462,5463), +PARTITION p1366 VALUES IN (5464,5465,5466,5467), +PARTITION p1367 VALUES IN (5468,5469,5470,5471), +PARTITION p1368 VALUES IN (5472,5473,5474,5475), +PARTITION p1369 VALUES IN (5476,5477,5478,5479), +PARTITION p1370 VALUES IN (5480,5481,5482,5483), +PARTITION p1371 VALUES IN (5484,5485,5486,5487), +PARTITION p1372 VALUES IN (5488,5489,5490,5491), +PARTITION p1373 VALUES IN (5492,5493,5494,5495), +PARTITION p1374 VALUES IN (5496,5497,5498,5499), +PARTITION p1375 VALUES IN (5500,5501,5502,5503), +PARTITION p1376 VALUES IN (5504,5505,5506,5507), +PARTITION p1377 VALUES IN (5508,5509,5510,5511), +PARTITION p1378 VALUES IN (5512,5513,5514,5515), +PARTITION p1379 VALUES IN (5516,5517,5518,5519), +PARTITION p1380 VALUES IN (5520,5521,5522,5523), +PARTITION p1381 VALUES IN (5524,5525,5526,5527), +PARTITION p1382 VALUES IN (5528,5529,5530,5531), +PARTITION p1383 VALUES IN (5532,5533,5534,5535), +PARTITION p1384 VALUES IN (5536,5537,5538,5539), +PARTITION p1385 VALUES IN (5540,5541,5542,5543), +PARTITION p1386 VALUES IN (5544,5545,5546,5547), +PARTITION p1387 VALUES IN (5548,5549,5550,5551), +PARTITION p1388 VALUES IN (5552,5553,5554,5555), +PARTITION p1389 VALUES IN (5556,5557,5558,5559), +PARTITION p1390 VALUES IN (5560,5561,5562,5563), +PARTITION p1391 VALUES IN (5564,5565,5566,5567), +PARTITION p1392 VALUES IN (5568,5569,5570,5571), +PARTITION p1393 VALUES IN (5572,5573,5574,5575), +PARTITION p1394 VALUES IN (5576,5577,5578,5579), +PARTITION p1395 VALUES IN (5580,5581,5582,5583), +PARTITION p1396 VALUES IN (5584,5585,5586,5587), +PARTITION p1397 VALUES IN (5588,5589,5590,5591), +PARTITION p1398 VALUES IN (5592,5593,5594,5595), +PARTITION p1399 VALUES IN (5596,5597,5598,5599), +PARTITION p1400 VALUES IN (5600,5601,5602,5603), +PARTITION p1401 VALUES IN (5604,5605,5606,5607), +PARTITION p1402 VALUES IN (5608,5609,5610,5611), +PARTITION p1403 VALUES IN (5612,5613,5614,5615), +PARTITION p1404 VALUES IN (5616,5617,5618,5619), +PARTITION p1405 VALUES IN (5620,5621,5622,5623), +PARTITION p1406 VALUES IN (5624,5625,5626,5627), +PARTITION p1407 VALUES IN (5628,5629,5630,5631), +PARTITION p1408 VALUES IN (5632,5633,5634,5635), +PARTITION p1409 VALUES IN (5636,5637,5638,5639), +PARTITION p1410 VALUES IN (5640,5641,5642,5643), +PARTITION p1411 VALUES IN (5644,5645,5646,5647), +PARTITION p1412 VALUES IN (5648,5649,5650,5651), +PARTITION p1413 VALUES IN (5652,5653,5654,5655), +PARTITION p1414 VALUES IN (5656,5657,5658,5659), +PARTITION p1415 VALUES IN (5660,5661,5662,5663), +PARTITION p1416 VALUES IN (5664,5665,5666,5667), +PARTITION p1417 VALUES IN (5668,5669,5670,5671), +PARTITION p1418 VALUES IN (5672,5673,5674,5675), +PARTITION p1419 VALUES IN (5676,5677,5678,5679), +PARTITION p1420 VALUES IN (5680,5681,5682,5683), +PARTITION p1421 VALUES IN (5684,5685,5686,5687), +PARTITION p1422 VALUES IN (5688,5689,5690,5691), +PARTITION p1423 VALUES IN (5692,5693,5694,5695), +PARTITION p1424 VALUES IN (5696,5697,5698,5699), +PARTITION p1425 VALUES IN (5700,5701,5702,5703), +PARTITION p1426 VALUES IN (5704,5705,5706,5707), +PARTITION p1427 VALUES IN (5708,5709,5710,5711), +PARTITION p1428 VALUES IN (5712,5713,5714,5715), +PARTITION p1429 VALUES IN (5716,5717,5718,5719), +PARTITION p1430 VALUES IN (5720,5721,5722,5723), +PARTITION p1431 VALUES IN (5724,5725,5726,5727), +PARTITION p1432 VALUES IN (5728,5729,5730,5731), +PARTITION p1433 VALUES IN (5732,5733,5734,5735), +PARTITION p1434 VALUES IN (5736,5737,5738,5739), +PARTITION p1435 VALUES IN (5740,5741,5742,5743), +PARTITION p1436 VALUES IN (5744,5745,5746,5747), +PARTITION p1437 VALUES IN (5748,5749,5750,5751), +PARTITION p1438 VALUES IN (5752,5753,5754,5755), +PARTITION p1439 VALUES IN (5756,5757,5758,5759), +PARTITION p1440 VALUES IN (5760,5761,5762,5763), +PARTITION p1441 VALUES IN (5764,5765,5766,5767), +PARTITION p1442 VALUES IN (5768,5769,5770,5771), +PARTITION p1443 VALUES IN (5772,5773,5774,5775), +PARTITION p1444 VALUES IN (5776,5777,5778,5779), +PARTITION p1445 VALUES IN (5780,5781,5782,5783), +PARTITION p1446 VALUES IN (5784,5785,5786,5787), +PARTITION p1447 VALUES IN (5788,5789,5790,5791), +PARTITION p1448 VALUES IN (5792,5793,5794,5795), +PARTITION p1449 VALUES IN (5796,5797,5798,5799), +PARTITION p1450 VALUES IN (5800,5801,5802,5803), +PARTITION p1451 VALUES IN (5804,5805,5806,5807), +PARTITION p1452 VALUES IN (5808,5809,5810,5811), +PARTITION p1453 VALUES IN (5812,5813,5814,5815), +PARTITION p1454 VALUES IN (5816,5817,5818,5819), +PARTITION p1455 VALUES IN (5820,5821,5822,5823), +PARTITION p1456 VALUES IN (5824,5825,5826,5827), +PARTITION p1457 VALUES IN (5828,5829,5830,5831), +PARTITION p1458 VALUES IN (5832,5833,5834,5835), +PARTITION p1459 VALUES IN (5836,5837,5838,5839), +PARTITION p1460 VALUES IN (5840,5841,5842,5843), +PARTITION p1461 VALUES IN (5844,5845,5846,5847), +PARTITION p1462 VALUES IN (5848,5849,5850,5851), +PARTITION p1463 VALUES IN (5852,5853,5854,5855), +PARTITION p1464 VALUES IN (5856,5857,5858,5859), +PARTITION p1465 VALUES IN (5860,5861,5862,5863), +PARTITION p1466 VALUES IN (5864,5865,5866,5867), +PARTITION p1467 VALUES IN (5868,5869,5870,5871), +PARTITION p1468 VALUES IN (5872,5873,5874,5875), +PARTITION p1469 VALUES IN (5876,5877,5878,5879), +PARTITION p1470 VALUES IN (5880,5881,5882,5883), +PARTITION p1471 VALUES IN (5884,5885,5886,5887), +PARTITION p1472 VALUES IN (5888,5889,5890,5891), +PARTITION p1473 VALUES IN (5892,5893,5894,5895), +PARTITION p1474 VALUES IN (5896,5897,5898,5899), +PARTITION p1475 VALUES IN (5900,5901,5902,5903), +PARTITION p1476 VALUES IN (5904,5905,5906,5907), +PARTITION p1477 VALUES IN (5908,5909,5910,5911), +PARTITION p1478 VALUES IN (5912,5913,5914,5915), +PARTITION p1479 VALUES IN (5916,5917,5918,5919), +PARTITION p1480 VALUES IN (5920,5921,5922,5923), +PARTITION p1481 VALUES IN (5924,5925,5926,5927), +PARTITION p1482 VALUES IN (5928,5929,5930,5931), +PARTITION p1483 VALUES IN (5932,5933,5934,5935), +PARTITION p1484 VALUES IN (5936,5937,5938,5939), +PARTITION p1485 VALUES IN (5940,5941,5942,5943), +PARTITION p1486 VALUES IN (5944,5945,5946,5947), +PARTITION p1487 VALUES IN (5948,5949,5950,5951), +PARTITION p1488 VALUES IN (5952,5953,5954,5955), +PARTITION p1489 VALUES IN (5956,5957,5958,5959), +PARTITION p1490 VALUES IN (5960,5961,5962,5963), +PARTITION p1491 VALUES IN (5964,5965,5966,5967), +PARTITION p1492 VALUES IN (5968,5969,5970,5971), +PARTITION p1493 VALUES IN (5972,5973,5974,5975), +PARTITION p1494 VALUES IN (5976,5977,5978,5979), +PARTITION p1495 VALUES IN (5980,5981,5982,5983), +PARTITION p1496 VALUES IN (5984,5985,5986,5987), +PARTITION p1497 VALUES IN (5988,5989,5990,5991), +PARTITION p1498 VALUES IN (5992,5993,5994,5995), +PARTITION p1499 VALUES IN (5996,5997,5998,5999), +PARTITION p1500 VALUES IN (6000,6001,6002,6003), +PARTITION p1501 VALUES IN (6004,6005,6006,6007), +PARTITION p1502 VALUES IN (6008,6009,6010,6011), +PARTITION p1503 VALUES IN (6012,6013,6014,6015), +PARTITION p1504 VALUES IN (6016,6017,6018,6019), +PARTITION p1505 VALUES IN (6020,6021,6022,6023), +PARTITION p1506 VALUES IN (6024,6025,6026,6027), +PARTITION p1507 VALUES IN (6028,6029,6030,6031), +PARTITION p1508 VALUES IN (6032,6033,6034,6035), +PARTITION p1509 VALUES IN (6036,6037,6038,6039), +PARTITION p1510 VALUES IN (6040,6041,6042,6043), +PARTITION p1511 VALUES IN (6044,6045,6046,6047), +PARTITION p1512 VALUES IN (6048,6049,6050,6051), +PARTITION p1513 VALUES IN (6052,6053,6054,6055), +PARTITION p1514 VALUES IN (6056,6057,6058,6059), +PARTITION p1515 VALUES IN (6060,6061,6062,6063), +PARTITION p1516 VALUES IN (6064,6065,6066,6067), +PARTITION p1517 VALUES IN (6068,6069,6070,6071), +PARTITION p1518 VALUES IN (6072,6073,6074,6075), +PARTITION p1519 VALUES IN (6076,6077,6078,6079), +PARTITION p1520 VALUES IN (6080,6081,6082,6083), +PARTITION p1521 VALUES IN (6084,6085,6086,6087), +PARTITION p1522 VALUES IN (6088,6089,6090,6091), +PARTITION p1523 VALUES IN (6092,6093,6094,6095), +PARTITION p1524 VALUES IN (6096,6097,6098,6099), +PARTITION p1525 VALUES IN (6100,6101,6102,6103), +PARTITION p1526 VALUES IN (6104,6105,6106,6107), +PARTITION p1527 VALUES IN (6108,6109,6110,6111), +PARTITION p1528 VALUES IN (6112,6113,6114,6115), +PARTITION p1529 VALUES IN (6116,6117,6118,6119), +PARTITION p1530 VALUES IN (6120,6121,6122,6123), +PARTITION p1531 VALUES IN (6124,6125,6126,6127), +PARTITION p1532 VALUES IN (6128,6129,6130,6131), +PARTITION p1533 VALUES IN (6132,6133,6134,6135), +PARTITION p1534 VALUES IN (6136,6137,6138,6139), +PARTITION p1535 VALUES IN (6140,6141,6142,6143), +PARTITION p1536 VALUES IN (6144,6145,6146,6147), +PARTITION p1537 VALUES IN (6148,6149,6150,6151), +PARTITION p1538 VALUES IN (6152,6153,6154,6155), +PARTITION p1539 VALUES IN (6156,6157,6158,6159), +PARTITION p1540 VALUES IN (6160,6161,6162,6163), +PARTITION p1541 VALUES IN (6164,6165,6166,6167), +PARTITION p1542 VALUES IN (6168,6169,6170,6171), +PARTITION p1543 VALUES IN (6172,6173,6174,6175), +PARTITION p1544 VALUES IN (6176,6177,6178,6179), +PARTITION p1545 VALUES IN (6180,6181,6182,6183), +PARTITION p1546 VALUES IN (6184,6185,6186,6187), +PARTITION p1547 VALUES IN (6188,6189,6190,6191), +PARTITION p1548 VALUES IN (6192,6193,6194,6195), +PARTITION p1549 VALUES IN (6196,6197,6198,6199), +PARTITION p1550 VALUES IN (6200,6201,6202,6203), +PARTITION p1551 VALUES IN (6204,6205,6206,6207), +PARTITION p1552 VALUES IN (6208,6209,6210,6211), +PARTITION p1553 VALUES IN (6212,6213,6214,6215), +PARTITION p1554 VALUES IN (6216,6217,6218,6219), +PARTITION p1555 VALUES IN (6220,6221,6222,6223), +PARTITION p1556 VALUES IN (6224,6225,6226,6227), +PARTITION p1557 VALUES IN (6228,6229,6230,6231), +PARTITION p1558 VALUES IN (6232,6233,6234,6235), +PARTITION p1559 VALUES IN (6236,6237,6238,6239), +PARTITION p1560 VALUES IN (6240,6241,6242,6243), +PARTITION p1561 VALUES IN (6244,6245,6246,6247), +PARTITION p1562 VALUES IN (6248,6249,6250,6251), +PARTITION p1563 VALUES IN (6252,6253,6254,6255), +PARTITION p1564 VALUES IN (6256,6257,6258,6259), +PARTITION p1565 VALUES IN (6260,6261,6262,6263), +PARTITION p1566 VALUES IN (6264,6265,6266,6267), +PARTITION p1567 VALUES IN (6268,6269,6270,6271), +PARTITION p1568 VALUES IN (6272,6273,6274,6275), +PARTITION p1569 VALUES IN (6276,6277,6278,6279), +PARTITION p1570 VALUES IN (6280,6281,6282,6283), +PARTITION p1571 VALUES IN (6284,6285,6286,6287), +PARTITION p1572 VALUES IN (6288,6289,6290,6291), +PARTITION p1573 VALUES IN (6292,6293,6294,6295), +PARTITION p1574 VALUES IN (6296,6297,6298,6299), +PARTITION p1575 VALUES IN (6300,6301,6302,6303), +PARTITION p1576 VALUES IN (6304,6305,6306,6307), +PARTITION p1577 VALUES IN (6308,6309,6310,6311), +PARTITION p1578 VALUES IN (6312,6313,6314,6315), +PARTITION p1579 VALUES IN (6316,6317,6318,6319), +PARTITION p1580 VALUES IN (6320,6321,6322,6323), +PARTITION p1581 VALUES IN (6324,6325,6326,6327), +PARTITION p1582 VALUES IN (6328,6329,6330,6331), +PARTITION p1583 VALUES IN (6332,6333,6334,6335), +PARTITION p1584 VALUES IN (6336,6337,6338,6339), +PARTITION p1585 VALUES IN (6340,6341,6342,6343), +PARTITION p1586 VALUES IN (6344,6345,6346,6347), +PARTITION p1587 VALUES IN (6348,6349,6350,6351), +PARTITION p1588 VALUES IN (6352,6353,6354,6355), +PARTITION p1589 VALUES IN (6356,6357,6358,6359), +PARTITION p1590 VALUES IN (6360,6361,6362,6363), +PARTITION p1591 VALUES IN (6364,6365,6366,6367), +PARTITION p1592 VALUES IN (6368,6369,6370,6371), +PARTITION p1593 VALUES IN (6372,6373,6374,6375), +PARTITION p1594 VALUES IN (6376,6377,6378,6379), +PARTITION p1595 VALUES IN (6380,6381,6382,6383), +PARTITION p1596 VALUES IN (6384,6385,6386,6387), +PARTITION p1597 VALUES IN (6388,6389,6390,6391), +PARTITION p1598 VALUES IN (6392,6393,6394,6395), +PARTITION p1599 VALUES IN (6396,6397,6398,6399), +PARTITION p1600 VALUES IN (6400,6401,6402,6403), +PARTITION p1601 VALUES IN (6404,6405,6406,6407), +PARTITION p1602 VALUES IN (6408,6409,6410,6411), +PARTITION p1603 VALUES IN (6412,6413,6414,6415), +PARTITION p1604 VALUES IN (6416,6417,6418,6419), +PARTITION p1605 VALUES IN (6420,6421,6422,6423), +PARTITION p1606 VALUES IN (6424,6425,6426,6427), +PARTITION p1607 VALUES IN (6428,6429,6430,6431), +PARTITION p1608 VALUES IN (6432,6433,6434,6435), +PARTITION p1609 VALUES IN (6436,6437,6438,6439), +PARTITION p1610 VALUES IN (6440,6441,6442,6443), +PARTITION p1611 VALUES IN (6444,6445,6446,6447), +PARTITION p1612 VALUES IN (6448,6449,6450,6451), +PARTITION p1613 VALUES IN (6452,6453,6454,6455), +PARTITION p1614 VALUES IN (6456,6457,6458,6459), +PARTITION p1615 VALUES IN (6460,6461,6462,6463), +PARTITION p1616 VALUES IN (6464,6465,6466,6467), +PARTITION p1617 VALUES IN (6468,6469,6470,6471), +PARTITION p1618 VALUES IN (6472,6473,6474,6475), +PARTITION p1619 VALUES IN (6476,6477,6478,6479), +PARTITION p1620 VALUES IN (6480,6481,6482,6483), +PARTITION p1621 VALUES IN (6484,6485,6486,6487), +PARTITION p1622 VALUES IN (6488,6489,6490,6491), +PARTITION p1623 VALUES IN (6492,6493,6494,6495), +PARTITION p1624 VALUES IN (6496,6497,6498,6499), +PARTITION p1625 VALUES IN (6500,6501,6502,6503), +PARTITION p1626 VALUES IN (6504,6505,6506,6507), +PARTITION p1627 VALUES IN (6508,6509,6510,6511), +PARTITION p1628 VALUES IN (6512,6513,6514,6515), +PARTITION p1629 VALUES IN (6516,6517,6518,6519), +PARTITION p1630 VALUES IN (6520,6521,6522,6523), +PARTITION p1631 VALUES IN (6524,6525,6526,6527), +PARTITION p1632 VALUES IN (6528,6529,6530,6531), +PARTITION p1633 VALUES IN (6532,6533,6534,6535), +PARTITION p1634 VALUES IN (6536,6537,6538,6539), +PARTITION p1635 VALUES IN (6540,6541,6542,6543), +PARTITION p1636 VALUES IN (6544,6545,6546,6547), +PARTITION p1637 VALUES IN (6548,6549,6550,6551), +PARTITION p1638 VALUES IN (6552,6553,6554,6555), +PARTITION p1639 VALUES IN (6556,6557,6558,6559), +PARTITION p1640 VALUES IN (6560,6561,6562,6563), +PARTITION p1641 VALUES IN (6564,6565,6566,6567), +PARTITION p1642 VALUES IN (6568,6569,6570,6571), +PARTITION p1643 VALUES IN (6572,6573,6574,6575), +PARTITION p1644 VALUES IN (6576,6577,6578,6579), +PARTITION p1645 VALUES IN (6580,6581,6582,6583), +PARTITION p1646 VALUES IN (6584,6585,6586,6587), +PARTITION p1647 VALUES IN (6588,6589,6590,6591), +PARTITION p1648 VALUES IN (6592,6593,6594,6595), +PARTITION p1649 VALUES IN (6596,6597,6598,6599), +PARTITION p1650 VALUES IN (6600,6601,6602,6603), +PARTITION p1651 VALUES IN (6604,6605,6606,6607), +PARTITION p1652 VALUES IN (6608,6609,6610,6611), +PARTITION p1653 VALUES IN (6612,6613,6614,6615), +PARTITION p1654 VALUES IN (6616,6617,6618,6619), +PARTITION p1655 VALUES IN (6620,6621,6622,6623), +PARTITION p1656 VALUES IN (6624,6625,6626,6627), +PARTITION p1657 VALUES IN (6628,6629,6630,6631), +PARTITION p1658 VALUES IN (6632,6633,6634,6635), +PARTITION p1659 VALUES IN (6636,6637,6638,6639), +PARTITION p1660 VALUES IN (6640,6641,6642,6643), +PARTITION p1661 VALUES IN (6644,6645,6646,6647), +PARTITION p1662 VALUES IN (6648,6649,6650,6651), +PARTITION p1663 VALUES IN (6652,6653,6654,6655), +PARTITION p1664 VALUES IN (6656,6657,6658,6659), +PARTITION p1665 VALUES IN (6660,6661,6662,6663), +PARTITION p1666 VALUES IN (6664,6665,6666,6667), +PARTITION p1667 VALUES IN (6668,6669,6670,6671), +PARTITION p1668 VALUES IN (6672,6673,6674,6675), +PARTITION p1669 VALUES IN (6676,6677,6678,6679), +PARTITION p1670 VALUES IN (6680,6681,6682,6683), +PARTITION p1671 VALUES IN (6684,6685,6686,6687), +PARTITION p1672 VALUES IN (6688,6689,6690,6691), +PARTITION p1673 VALUES IN (6692,6693,6694,6695), +PARTITION p1674 VALUES IN (6696,6697,6698,6699), +PARTITION p1675 VALUES IN (6700,6701,6702,6703), +PARTITION p1676 VALUES IN (6704,6705,6706,6707), +PARTITION p1677 VALUES IN (6708,6709,6710,6711), +PARTITION p1678 VALUES IN (6712,6713,6714,6715), +PARTITION p1679 VALUES IN (6716,6717,6718,6719), +PARTITION p1680 VALUES IN (6720,6721,6722,6723), +PARTITION p1681 VALUES IN (6724,6725,6726,6727), +PARTITION p1682 VALUES IN (6728,6729,6730,6731), +PARTITION p1683 VALUES IN (6732,6733,6734,6735), +PARTITION p1684 VALUES IN (6736,6737,6738,6739), +PARTITION p1685 VALUES IN (6740,6741,6742,6743), +PARTITION p1686 VALUES IN (6744,6745,6746,6747), +PARTITION p1687 VALUES IN (6748,6749,6750,6751), +PARTITION p1688 VALUES IN (6752,6753,6754,6755), +PARTITION p1689 VALUES IN (6756,6757,6758,6759), +PARTITION p1690 VALUES IN (6760,6761,6762,6763), +PARTITION p1691 VALUES IN (6764,6765,6766,6767), +PARTITION p1692 VALUES IN (6768,6769,6770,6771), +PARTITION p1693 VALUES IN (6772,6773,6774,6775), +PARTITION p1694 VALUES IN (6776,6777,6778,6779), +PARTITION p1695 VALUES IN (6780,6781,6782,6783), +PARTITION p1696 VALUES IN (6784,6785,6786,6787), +PARTITION p1697 VALUES IN (6788,6789,6790,6791), +PARTITION p1698 VALUES IN (6792,6793,6794,6795), +PARTITION p1699 VALUES IN (6796,6797,6798,6799), +PARTITION p1700 VALUES IN (6800,6801,6802,6803), +PARTITION p1701 VALUES IN (6804,6805,6806,6807), +PARTITION p1702 VALUES IN (6808,6809,6810,6811), +PARTITION p1703 VALUES IN (6812,6813,6814,6815), +PARTITION p1704 VALUES IN (6816,6817,6818,6819), +PARTITION p1705 VALUES IN (6820,6821,6822,6823), +PARTITION p1706 VALUES IN (6824,6825,6826,6827), +PARTITION p1707 VALUES IN (6828,6829,6830,6831), +PARTITION p1708 VALUES IN (6832,6833,6834,6835), +PARTITION p1709 VALUES IN (6836,6837,6838,6839), +PARTITION p1710 VALUES IN (6840,6841,6842,6843), +PARTITION p1711 VALUES IN (6844,6845,6846,6847), +PARTITION p1712 VALUES IN (6848,6849,6850,6851), +PARTITION p1713 VALUES IN (6852,6853,6854,6855), +PARTITION p1714 VALUES IN (6856,6857,6858,6859), +PARTITION p1715 VALUES IN (6860,6861,6862,6863), +PARTITION p1716 VALUES IN (6864,6865,6866,6867), +PARTITION p1717 VALUES IN (6868,6869,6870,6871), +PARTITION p1718 VALUES IN (6872,6873,6874,6875), +PARTITION p1719 VALUES IN (6876,6877,6878,6879), +PARTITION p1720 VALUES IN (6880,6881,6882,6883), +PARTITION p1721 VALUES IN (6884,6885,6886,6887), +PARTITION p1722 VALUES IN (6888,6889,6890,6891), +PARTITION p1723 VALUES IN (6892,6893,6894,6895), +PARTITION p1724 VALUES IN (6896,6897,6898,6899), +PARTITION p1725 VALUES IN (6900,6901,6902,6903), +PARTITION p1726 VALUES IN (6904,6905,6906,6907), +PARTITION p1727 VALUES IN (6908,6909,6910,6911), +PARTITION p1728 VALUES IN (6912,6913,6914,6915), +PARTITION p1729 VALUES IN (6916,6917,6918,6919), +PARTITION p1730 VALUES IN (6920,6921,6922,6923), +PARTITION p1731 VALUES IN (6924,6925,6926,6927), +PARTITION p1732 VALUES IN (6928,6929,6930,6931), +PARTITION p1733 VALUES IN (6932,6933,6934,6935), +PARTITION p1734 VALUES IN (6936,6937,6938,6939), +PARTITION p1735 VALUES IN (6940,6941,6942,6943), +PARTITION p1736 VALUES IN (6944,6945,6946,6947), +PARTITION p1737 VALUES IN (6948,6949,6950,6951), +PARTITION p1738 VALUES IN (6952,6953,6954,6955), +PARTITION p1739 VALUES IN (6956,6957,6958,6959), +PARTITION p1740 VALUES IN (6960,6961,6962,6963), +PARTITION p1741 VALUES IN (6964,6965,6966,6967), +PARTITION p1742 VALUES IN (6968,6969,6970,6971), +PARTITION p1743 VALUES IN (6972,6973,6974,6975), +PARTITION p1744 VALUES IN (6976,6977,6978,6979), +PARTITION p1745 VALUES IN (6980,6981,6982,6983), +PARTITION p1746 VALUES IN (6984,6985,6986,6987), +PARTITION p1747 VALUES IN (6988,6989,6990,6991), +PARTITION p1748 VALUES IN (6992,6993,6994,6995), +PARTITION p1749 VALUES IN (6996,6997,6998,6999), +PARTITION p1750 VALUES IN (7000,7001,7002,7003), +PARTITION p1751 VALUES IN (7004,7005,7006,7007), +PARTITION p1752 VALUES IN (7008,7009,7010,7011), +PARTITION p1753 VALUES IN (7012,7013,7014,7015), +PARTITION p1754 VALUES IN (7016,7017,7018,7019), +PARTITION p1755 VALUES IN (7020,7021,7022,7023), +PARTITION p1756 VALUES IN (7024,7025,7026,7027), +PARTITION p1757 VALUES IN (7028,7029,7030,7031), +PARTITION p1758 VALUES IN (7032,7033,7034,7035), +PARTITION p1759 VALUES IN (7036,7037,7038,7039), +PARTITION p1760 VALUES IN (7040,7041,7042,7043), +PARTITION p1761 VALUES IN (7044,7045,7046,7047), +PARTITION p1762 VALUES IN (7048,7049,7050,7051), +PARTITION p1763 VALUES IN (7052,7053,7054,7055), +PARTITION p1764 VALUES IN (7056,7057,7058,7059), +PARTITION p1765 VALUES IN (7060,7061,7062,7063), +PARTITION p1766 VALUES IN (7064,7065,7066,7067), +PARTITION p1767 VALUES IN (7068,7069,7070,7071), +PARTITION p1768 VALUES IN (7072,7073,7074,7075), +PARTITION p1769 VALUES IN (7076,7077,7078,7079), +PARTITION p1770 VALUES IN (7080,7081,7082,7083), +PARTITION p1771 VALUES IN (7084,7085,7086,7087), +PARTITION p1772 VALUES IN (7088,7089,7090,7091), +PARTITION p1773 VALUES IN (7092,7093,7094,7095), +PARTITION p1774 VALUES IN (7096,7097,7098,7099), +PARTITION p1775 VALUES IN (7100,7101,7102,7103), +PARTITION p1776 VALUES IN (7104,7105,7106,7107), +PARTITION p1777 VALUES IN (7108,7109,7110,7111), +PARTITION p1778 VALUES IN (7112,7113,7114,7115), +PARTITION p1779 VALUES IN (7116,7117,7118,7119), +PARTITION p1780 VALUES IN (7120,7121,7122,7123), +PARTITION p1781 VALUES IN (7124,7125,7126,7127), +PARTITION p1782 VALUES IN (7128,7129,7130,7131), +PARTITION p1783 VALUES IN (7132,7133,7134,7135), +PARTITION p1784 VALUES IN (7136,7137,7138,7139), +PARTITION p1785 VALUES IN (7140,7141,7142,7143), +PARTITION p1786 VALUES IN (7144,7145,7146,7147), +PARTITION p1787 VALUES IN (7148,7149,7150,7151), +PARTITION p1788 VALUES IN (7152,7153,7154,7155), +PARTITION p1789 VALUES IN (7156,7157,7158,7159), +PARTITION p1790 VALUES IN (7160,7161,7162,7163), +PARTITION p1791 VALUES IN (7164,7165,7166,7167), +PARTITION p1792 VALUES IN (7168,7169,7170,7171), +PARTITION p1793 VALUES IN (7172,7173,7174,7175), +PARTITION p1794 VALUES IN (7176,7177,7178,7179), +PARTITION p1795 VALUES IN (7180,7181,7182,7183), +PARTITION p1796 VALUES IN (7184,7185,7186,7187), +PARTITION p1797 VALUES IN (7188,7189,7190,7191), +PARTITION p1798 VALUES IN (7192,7193,7194,7195), +PARTITION p1799 VALUES IN (7196,7197,7198,7199), +PARTITION p1800 VALUES IN (7200,7201,7202,7203), +PARTITION p1801 VALUES IN (7204,7205,7206,7207), +PARTITION p1802 VALUES IN (7208,7209,7210,7211), +PARTITION p1803 VALUES IN (7212,7213,7214,7215), +PARTITION p1804 VALUES IN (7216,7217,7218,7219), +PARTITION p1805 VALUES IN (7220,7221,7222,7223), +PARTITION p1806 VALUES IN (7224,7225,7226,7227), +PARTITION p1807 VALUES IN (7228,7229,7230,7231), +PARTITION p1808 VALUES IN (7232,7233,7234,7235), +PARTITION p1809 VALUES IN (7236,7237,7238,7239), +PARTITION p1810 VALUES IN (7240,7241,7242,7243), +PARTITION p1811 VALUES IN (7244,7245,7246,7247), +PARTITION p1812 VALUES IN (7248,7249,7250,7251), +PARTITION p1813 VALUES IN (7252,7253,7254,7255), +PARTITION p1814 VALUES IN (7256,7257,7258,7259), +PARTITION p1815 VALUES IN (7260,7261,7262,7263), +PARTITION p1816 VALUES IN (7264,7265,7266,7267), +PARTITION p1817 VALUES IN (7268,7269,7270,7271), +PARTITION p1818 VALUES IN (7272,7273,7274,7275), +PARTITION p1819 VALUES IN (7276,7277,7278,7279), +PARTITION p1820 VALUES IN (7280,7281,7282,7283), +PARTITION p1821 VALUES IN (7284,7285,7286,7287), +PARTITION p1822 VALUES IN (7288,7289,7290,7291), +PARTITION p1823 VALUES IN (7292,7293,7294,7295), +PARTITION p1824 VALUES IN (7296,7297,7298,7299), +PARTITION p1825 VALUES IN (7300,7301,7302,7303), +PARTITION p1826 VALUES IN (7304,7305,7306,7307), +PARTITION p1827 VALUES IN (7308,7309,7310,7311), +PARTITION p1828 VALUES IN (7312,7313,7314,7315), +PARTITION p1829 VALUES IN (7316,7317,7318,7319), +PARTITION p1830 VALUES IN (7320,7321,7322,7323), +PARTITION p1831 VALUES IN (7324,7325,7326,7327), +PARTITION p1832 VALUES IN (7328,7329,7330,7331), +PARTITION p1833 VALUES IN (7332,7333,7334,7335), +PARTITION p1834 VALUES IN (7336,7337,7338,7339), +PARTITION p1835 VALUES IN (7340,7341,7342,7343), +PARTITION p1836 VALUES IN (7344,7345,7346,7347), +PARTITION p1837 VALUES IN (7348,7349,7350,7351), +PARTITION p1838 VALUES IN (7352,7353,7354,7355), +PARTITION p1839 VALUES IN (7356,7357,7358,7359), +PARTITION p1840 VALUES IN (7360,7361,7362,7363), +PARTITION p1841 VALUES IN (7364,7365,7366,7367), +PARTITION p1842 VALUES IN (7368,7369,7370,7371), +PARTITION p1843 VALUES IN (7372,7373,7374,7375), +PARTITION p1844 VALUES IN (7376,7377,7378,7379), +PARTITION p1845 VALUES IN (7380,7381,7382,7383), +PARTITION p1846 VALUES IN (7384,7385,7386,7387), +PARTITION p1847 VALUES IN (7388,7389,7390,7391), +PARTITION p1848 VALUES IN (7392,7393,7394,7395), +PARTITION p1849 VALUES IN (7396,7397,7398,7399), +PARTITION p1850 VALUES IN (7400,7401,7402,7403), +PARTITION p1851 VALUES IN (7404,7405,7406,7407), +PARTITION p1852 VALUES IN (7408,7409,7410,7411), +PARTITION p1853 VALUES IN (7412,7413,7414,7415), +PARTITION p1854 VALUES IN (7416,7417,7418,7419), +PARTITION p1855 VALUES IN (7420,7421,7422,7423), +PARTITION p1856 VALUES IN (7424,7425,7426,7427), +PARTITION p1857 VALUES IN (7428,7429,7430,7431), +PARTITION p1858 VALUES IN (7432,7433,7434,7435), +PARTITION p1859 VALUES IN (7436,7437,7438,7439), +PARTITION p1860 VALUES IN (7440,7441,7442,7443), +PARTITION p1861 VALUES IN (7444,7445,7446,7447), +PARTITION p1862 VALUES IN (7448,7449,7450,7451), +PARTITION p1863 VALUES IN (7452,7453,7454,7455), +PARTITION p1864 VALUES IN (7456,7457,7458,7459), +PARTITION p1865 VALUES IN (7460,7461,7462,7463), +PARTITION p1866 VALUES IN (7464,7465,7466,7467), +PARTITION p1867 VALUES IN (7468,7469,7470,7471), +PARTITION p1868 VALUES IN (7472,7473,7474,7475), +PARTITION p1869 VALUES IN (7476,7477,7478,7479), +PARTITION p1870 VALUES IN (7480,7481,7482,7483), +PARTITION p1871 VALUES IN (7484,7485,7486,7487), +PARTITION p1872 VALUES IN (7488,7489,7490,7491), +PARTITION p1873 VALUES IN (7492,7493,7494,7495), +PARTITION p1874 VALUES IN (7496,7497,7498,7499), +PARTITION p1875 VALUES IN (7500,7501,7502,7503), +PARTITION p1876 VALUES IN (7504,7505,7506,7507), +PARTITION p1877 VALUES IN (7508,7509,7510,7511), +PARTITION p1878 VALUES IN (7512,7513,7514,7515), +PARTITION p1879 VALUES IN (7516,7517,7518,7519), +PARTITION p1880 VALUES IN (7520,7521,7522,7523), +PARTITION p1881 VALUES IN (7524,7525,7526,7527), +PARTITION p1882 VALUES IN (7528,7529,7530,7531), +PARTITION p1883 VALUES IN (7532,7533,7534,7535), +PARTITION p1884 VALUES IN (7536,7537,7538,7539), +PARTITION p1885 VALUES IN (7540,7541,7542,7543), +PARTITION p1886 VALUES IN (7544,7545,7546,7547), +PARTITION p1887 VALUES IN (7548,7549,7550,7551), +PARTITION p1888 VALUES IN (7552,7553,7554,7555), +PARTITION p1889 VALUES IN (7556,7557,7558,7559), +PARTITION p1890 VALUES IN (7560,7561,7562,7563), +PARTITION p1891 VALUES IN (7564,7565,7566,7567), +PARTITION p1892 VALUES IN (7568,7569,7570,7571), +PARTITION p1893 VALUES IN (7572,7573,7574,7575), +PARTITION p1894 VALUES IN (7576,7577,7578,7579), +PARTITION p1895 VALUES IN (7580,7581,7582,7583), +PARTITION p1896 VALUES IN (7584,7585,7586,7587), +PARTITION p1897 VALUES IN (7588,7589,7590,7591), +PARTITION p1898 VALUES IN (7592,7593,7594,7595), +PARTITION p1899 VALUES IN (7596,7597,7598,7599), +PARTITION p1900 VALUES IN (7600,7601,7602,7603), +PARTITION p1901 VALUES IN (7604,7605,7606,7607), +PARTITION p1902 VALUES IN (7608,7609,7610,7611), +PARTITION p1903 VALUES IN (7612,7613,7614,7615), +PARTITION p1904 VALUES IN (7616,7617,7618,7619), +PARTITION p1905 VALUES IN (7620,7621,7622,7623), +PARTITION p1906 VALUES IN (7624,7625,7626,7627), +PARTITION p1907 VALUES IN (7628,7629,7630,7631), +PARTITION p1908 VALUES IN (7632,7633,7634,7635), +PARTITION p1909 VALUES IN (7636,7637,7638,7639), +PARTITION p1910 VALUES IN (7640,7641,7642,7643), +PARTITION p1911 VALUES IN (7644,7645,7646,7647), +PARTITION p1912 VALUES IN (7648,7649,7650,7651), +PARTITION p1913 VALUES IN (7652,7653,7654,7655), +PARTITION p1914 VALUES IN (7656,7657,7658,7659), +PARTITION p1915 VALUES IN (7660,7661,7662,7663), +PARTITION p1916 VALUES IN (7664,7665,7666,7667), +PARTITION p1917 VALUES IN (7668,7669,7670,7671), +PARTITION p1918 VALUES IN (7672,7673,7674,7675), +PARTITION p1919 VALUES IN (7676,7677,7678,7679), +PARTITION p1920 VALUES IN (7680,7681,7682,7683), +PARTITION p1921 VALUES IN (7684,7685,7686,7687), +PARTITION p1922 VALUES IN (7688,7689,7690,7691), +PARTITION p1923 VALUES IN (7692,7693,7694,7695), +PARTITION p1924 VALUES IN (7696,7697,7698,7699), +PARTITION p1925 VALUES IN (7700,7701,7702,7703), +PARTITION p1926 VALUES IN (7704,7705,7706,7707), +PARTITION p1927 VALUES IN (7708,7709,7710,7711), +PARTITION p1928 VALUES IN (7712,7713,7714,7715), +PARTITION p1929 VALUES IN (7716,7717,7718,7719), +PARTITION p1930 VALUES IN (7720,7721,7722,7723), +PARTITION p1931 VALUES IN (7724,7725,7726,7727), +PARTITION p1932 VALUES IN (7728,7729,7730,7731), +PARTITION p1933 VALUES IN (7732,7733,7734,7735), +PARTITION p1934 VALUES IN (7736,7737,7738,7739), +PARTITION p1935 VALUES IN (7740,7741,7742,7743), +PARTITION p1936 VALUES IN (7744,7745,7746,7747), +PARTITION p1937 VALUES IN (7748,7749,7750,7751), +PARTITION p1938 VALUES IN (7752,7753,7754,7755), +PARTITION p1939 VALUES IN (7756,7757,7758,7759), +PARTITION p1940 VALUES IN (7760,7761,7762,7763), +PARTITION p1941 VALUES IN (7764,7765,7766,7767), +PARTITION p1942 VALUES IN (7768,7769,7770,7771), +PARTITION p1943 VALUES IN (7772,7773,7774,7775), +PARTITION p1944 VALUES IN (7776,7777,7778,7779), +PARTITION p1945 VALUES IN (7780,7781,7782,7783), +PARTITION p1946 VALUES IN (7784,7785,7786,7787), +PARTITION p1947 VALUES IN (7788,7789,7790,7791), +PARTITION p1948 VALUES IN (7792,7793,7794,7795), +PARTITION p1949 VALUES IN (7796,7797,7798,7799), +PARTITION p1950 VALUES IN (7800,7801,7802,7803), +PARTITION p1951 VALUES IN (7804,7805,7806,7807), +PARTITION p1952 VALUES IN (7808,7809,7810,7811), +PARTITION p1953 VALUES IN (7812,7813,7814,7815), +PARTITION p1954 VALUES IN (7816,7817,7818,7819), +PARTITION p1955 VALUES IN (7820,7821,7822,7823), +PARTITION p1956 VALUES IN (7824,7825,7826,7827), +PARTITION p1957 VALUES IN (7828,7829,7830,7831), +PARTITION p1958 VALUES IN (7832,7833,7834,7835), +PARTITION p1959 VALUES IN (7836,7837,7838,7839), +PARTITION p1960 VALUES IN (7840,7841,7842,7843), +PARTITION p1961 VALUES IN (7844,7845,7846,7847), +PARTITION p1962 VALUES IN (7848,7849,7850,7851), +PARTITION p1963 VALUES IN (7852,7853,7854,7855), +PARTITION p1964 VALUES IN (7856,7857,7858,7859), +PARTITION p1965 VALUES IN (7860,7861,7862,7863), +PARTITION p1966 VALUES IN (7864,7865,7866,7867), +PARTITION p1967 VALUES IN (7868,7869,7870,7871), +PARTITION p1968 VALUES IN (7872,7873,7874,7875), +PARTITION p1969 VALUES IN (7876,7877,7878,7879), +PARTITION p1970 VALUES IN (7880,7881,7882,7883), +PARTITION p1971 VALUES IN (7884,7885,7886,7887), +PARTITION p1972 VALUES IN (7888,7889,7890,7891), +PARTITION p1973 VALUES IN (7892,7893,7894,7895), +PARTITION p1974 VALUES IN (7896,7897,7898,7899), +PARTITION p1975 VALUES IN (7900,7901,7902,7903), +PARTITION p1976 VALUES IN (7904,7905,7906,7907), +PARTITION p1977 VALUES IN (7908,7909,7910,7911), +PARTITION p1978 VALUES IN (7912,7913,7914,7915), +PARTITION p1979 VALUES IN (7916,7917,7918,7919), +PARTITION p1980 VALUES IN (7920,7921,7922,7923), +PARTITION p1981 VALUES IN (7924,7925,7926,7927), +PARTITION p1982 VALUES IN (7928,7929,7930,7931), +PARTITION p1983 VALUES IN (7932,7933,7934,7935), +PARTITION p1984 VALUES IN (7936,7937,7938,7939), +PARTITION p1985 VALUES IN (7940,7941,7942,7943), +PARTITION p1986 VALUES IN (7944,7945,7946,7947), +PARTITION p1987 VALUES IN (7948,7949,7950,7951), +PARTITION p1988 VALUES IN (7952,7953,7954,7955), +PARTITION p1989 VALUES IN (7956,7957,7958,7959), +PARTITION p1990 VALUES IN (7960,7961,7962,7963), +PARTITION p1991 VALUES IN (7964,7965,7966,7967), +PARTITION p1992 VALUES IN (7968,7969,7970,7971), +PARTITION p1993 VALUES IN (7972,7973,7974,7975), +PARTITION p1994 VALUES IN (7976,7977,7978,7979), +PARTITION p1995 VALUES IN (7980,7981,7982,7983), +PARTITION p1996 VALUES IN (7984,7985,7986,7987), +PARTITION p1997 VALUES IN (7988,7989,7990,7991), +PARTITION p1998 VALUES IN (7992,7993,7994,7995), +PARTITION p1999 VALUES IN (7996,7997,7998,7999), +PARTITION p2000 VALUES IN (8000,8001,8002,8003), +PARTITION p2001 VALUES IN (8004,8005,8006,8007), +PARTITION p2002 VALUES IN (8008,8009,8010,8011), +PARTITION p2003 VALUES IN (8012,8013,8014,8015), +PARTITION p2004 VALUES IN (8016,8017,8018,8019), +PARTITION p2005 VALUES IN (8020,8021,8022,8023), +PARTITION p2006 VALUES IN (8024,8025,8026,8027), +PARTITION p2007 VALUES IN (8028,8029,8030,8031), +PARTITION p2008 VALUES IN (8032,8033,8034,8035), +PARTITION p2009 VALUES IN (8036,8037,8038,8039), +PARTITION p2010 VALUES IN (8040,8041,8042,8043), +PARTITION p2011 VALUES IN (8044,8045,8046,8047), +PARTITION p2012 VALUES IN (8048,8049,8050,8051), +PARTITION p2013 VALUES IN (8052,8053,8054,8055), +PARTITION p2014 VALUES IN (8056,8057,8058,8059), +PARTITION p2015 VALUES IN (8060,8061,8062,8063), +PARTITION p2016 VALUES IN (8064,8065,8066,8067), +PARTITION p2017 VALUES IN (8068,8069,8070,8071), +PARTITION p2018 VALUES IN (8072,8073,8074,8075), +PARTITION p2019 VALUES IN (8076,8077,8078,8079), +PARTITION p2020 VALUES IN (8080,8081,8082,8083), +PARTITION p2021 VALUES IN (8084,8085,8086,8087), +PARTITION p2022 VALUES IN (8088,8089,8090,8091), +PARTITION p2023 VALUES IN (8092,8093,8094,8095), +PARTITION p2024 VALUES IN (8096,8097,8098,8099), +PARTITION p2025 VALUES IN (8100,8101,8102,8103), +PARTITION p2026 VALUES IN (8104,8105,8106,8107), +PARTITION p2027 VALUES IN (8108,8109,8110,8111), +PARTITION p2028 VALUES IN (8112,8113,8114,8115), +PARTITION p2029 VALUES IN (8116,8117,8118,8119), +PARTITION p2030 VALUES IN (8120,8121,8122,8123), +PARTITION p2031 VALUES IN (8124,8125,8126,8127), +PARTITION p2032 VALUES IN (8128,8129,8130,8131), +PARTITION p2033 VALUES IN (8132,8133,8134,8135), +PARTITION p2034 VALUES IN (8136,8137,8138,8139), +PARTITION p2035 VALUES IN (8140,8141,8142,8143), +PARTITION p2036 VALUES IN (8144,8145,8146,8147), +PARTITION p2037 VALUES IN (8148,8149,8150,8151), +PARTITION p2038 VALUES IN (8152,8153,8154,8155), +PARTITION p2039 VALUES IN (8156,8157,8158,8159), +PARTITION p2040 VALUES IN (8160,8161,8162,8163), +PARTITION p2041 VALUES IN (8164,8165,8166,8167), +PARTITION p2042 VALUES IN (8168,8169,8170,8171), +PARTITION p2043 VALUES IN (8172,8173,8174,8175), +PARTITION p2044 VALUES IN (8176,8177,8178,8179), +PARTITION p2045 VALUES IN (8180,8181,8182,8183), +PARTITION p2046 VALUES IN (8184,8185,8186,8187), +PARTITION p2047 VALUES IN (8188,8189,8190,8191), +PARTITION p2048 VALUES IN (8192,8193,8194,8195), +PARTITION p2049 VALUES IN (8196,8197,8198,8199), +PARTITION p2050 VALUES IN (8200,8201,8202,8203), +PARTITION p2051 VALUES IN (8204,8205,8206,8207), +PARTITION p2052 VALUES IN (8208,8209,8210,8211), +PARTITION p2053 VALUES IN (8212,8213,8214,8215), +PARTITION p2054 VALUES IN (8216,8217,8218,8219), +PARTITION p2055 VALUES IN (8220,8221,8222,8223), +PARTITION p2056 VALUES IN (8224,8225,8226,8227), +PARTITION p2057 VALUES IN (8228,8229,8230,8231), +PARTITION p2058 VALUES IN (8232,8233,8234,8235), +PARTITION p2059 VALUES IN (8236,8237,8238,8239), +PARTITION p2060 VALUES IN (8240,8241,8242,8243), +PARTITION p2061 VALUES IN (8244,8245,8246,8247), +PARTITION p2062 VALUES IN (8248,8249,8250,8251), +PARTITION p2063 VALUES IN (8252,8253,8254,8255), +PARTITION p2064 VALUES IN (8256,8257,8258,8259), +PARTITION p2065 VALUES IN (8260,8261,8262,8263), +PARTITION p2066 VALUES IN (8264,8265,8266,8267), +PARTITION p2067 VALUES IN (8268,8269,8270,8271), +PARTITION p2068 VALUES IN (8272,8273,8274,8275), +PARTITION p2069 VALUES IN (8276,8277,8278,8279), +PARTITION p2070 VALUES IN (8280,8281,8282,8283), +PARTITION p2071 VALUES IN (8284,8285,8286,8287), +PARTITION p2072 VALUES IN (8288,8289,8290,8291), +PARTITION p2073 VALUES IN (8292,8293,8294,8295), +PARTITION p2074 VALUES IN (8296,8297,8298,8299), +PARTITION p2075 VALUES IN (8300,8301,8302,8303), +PARTITION p2076 VALUES IN (8304,8305,8306,8307), +PARTITION p2077 VALUES IN (8308,8309,8310,8311), +PARTITION p2078 VALUES IN (8312,8313,8314,8315), +PARTITION p2079 VALUES IN (8316,8317,8318,8319), +PARTITION p2080 VALUES IN (8320,8321,8322,8323), +PARTITION p2081 VALUES IN (8324,8325,8326,8327), +PARTITION p2082 VALUES IN (8328,8329,8330,8331), +PARTITION p2083 VALUES IN (8332,8333,8334,8335), +PARTITION p2084 VALUES IN (8336,8337,8338,8339), +PARTITION p2085 VALUES IN (8340,8341,8342,8343), +PARTITION p2086 VALUES IN (8344,8345,8346,8347), +PARTITION p2087 VALUES IN (8348,8349,8350,8351), +PARTITION p2088 VALUES IN (8352,8353,8354,8355), +PARTITION p2089 VALUES IN (8356,8357,8358,8359), +PARTITION p2090 VALUES IN (8360,8361,8362,8363), +PARTITION p2091 VALUES IN (8364,8365,8366,8367), +PARTITION p2092 VALUES IN (8368,8369,8370,8371), +PARTITION p2093 VALUES IN (8372,8373,8374,8375), +PARTITION p2094 VALUES IN (8376,8377,8378,8379), +PARTITION p2095 VALUES IN (8380,8381,8382,8383), +PARTITION p2096 VALUES IN (8384,8385,8386,8387), +PARTITION p2097 VALUES IN (8388,8389,8390,8391), +PARTITION p2098 VALUES IN (8392,8393,8394,8395), +PARTITION p2099 VALUES IN (8396,8397,8398,8399), +PARTITION p2100 VALUES IN (8400,8401,8402,8403), +PARTITION p2101 VALUES IN (8404,8405,8406,8407), +PARTITION p2102 VALUES IN (8408,8409,8410,8411), +PARTITION p2103 VALUES IN (8412,8413,8414,8415), +PARTITION p2104 VALUES IN (8416,8417,8418,8419), +PARTITION p2105 VALUES IN (8420,8421,8422,8423), +PARTITION p2106 VALUES IN (8424,8425,8426,8427), +PARTITION p2107 VALUES IN (8428,8429,8430,8431), +PARTITION p2108 VALUES IN (8432,8433,8434,8435), +PARTITION p2109 VALUES IN (8436,8437,8438,8439), +PARTITION p2110 VALUES IN (8440,8441,8442,8443), +PARTITION p2111 VALUES IN (8444,8445,8446,8447), +PARTITION p2112 VALUES IN (8448,8449,8450,8451), +PARTITION p2113 VALUES IN (8452,8453,8454,8455), +PARTITION p2114 VALUES IN (8456,8457,8458,8459), +PARTITION p2115 VALUES IN (8460,8461,8462,8463), +PARTITION p2116 VALUES IN (8464,8465,8466,8467), +PARTITION p2117 VALUES IN (8468,8469,8470,8471), +PARTITION p2118 VALUES IN (8472,8473,8474,8475), +PARTITION p2119 VALUES IN (8476,8477,8478,8479), +PARTITION p2120 VALUES IN (8480,8481,8482,8483), +PARTITION p2121 VALUES IN (8484,8485,8486,8487), +PARTITION p2122 VALUES IN (8488,8489,8490,8491), +PARTITION p2123 VALUES IN (8492,8493,8494,8495), +PARTITION p2124 VALUES IN (8496,8497,8498,8499), +PARTITION p2125 VALUES IN (8500,8501,8502,8503), +PARTITION p2126 VALUES IN (8504,8505,8506,8507), +PARTITION p2127 VALUES IN (8508,8509,8510,8511), +PARTITION p2128 VALUES IN (8512,8513,8514,8515), +PARTITION p2129 VALUES IN (8516,8517,8518,8519), +PARTITION p2130 VALUES IN (8520,8521,8522,8523), +PARTITION p2131 VALUES IN (8524,8525,8526,8527), +PARTITION p2132 VALUES IN (8528,8529,8530,8531), +PARTITION p2133 VALUES IN (8532,8533,8534,8535), +PARTITION p2134 VALUES IN (8536,8537,8538,8539), +PARTITION p2135 VALUES IN (8540,8541,8542,8543), +PARTITION p2136 VALUES IN (8544,8545,8546,8547), +PARTITION p2137 VALUES IN (8548,8549,8550,8551), +PARTITION p2138 VALUES IN (8552,8553,8554,8555), +PARTITION p2139 VALUES IN (8556,8557,8558,8559), +PARTITION p2140 VALUES IN (8560,8561,8562,8563), +PARTITION p2141 VALUES IN (8564,8565,8566,8567), +PARTITION p2142 VALUES IN (8568,8569,8570,8571), +PARTITION p2143 VALUES IN (8572,8573,8574,8575), +PARTITION p2144 VALUES IN (8576,8577,8578,8579), +PARTITION p2145 VALUES IN (8580,8581,8582,8583), +PARTITION p2146 VALUES IN (8584,8585,8586,8587), +PARTITION p2147 VALUES IN (8588,8589,8590,8591), +PARTITION p2148 VALUES IN (8592,8593,8594,8595), +PARTITION p2149 VALUES IN (8596,8597,8598,8599), +PARTITION p2150 VALUES IN (8600,8601,8602,8603), +PARTITION p2151 VALUES IN (8604,8605,8606,8607), +PARTITION p2152 VALUES IN (8608,8609,8610,8611), +PARTITION p2153 VALUES IN (8612,8613,8614,8615), +PARTITION p2154 VALUES IN (8616,8617,8618,8619), +PARTITION p2155 VALUES IN (8620,8621,8622,8623), +PARTITION p2156 VALUES IN (8624,8625,8626,8627), +PARTITION p2157 VALUES IN (8628,8629,8630,8631), +PARTITION p2158 VALUES IN (8632,8633,8634,8635), +PARTITION p2159 VALUES IN (8636,8637,8638,8639), +PARTITION p2160 VALUES IN (8640,8641,8642,8643), +PARTITION p2161 VALUES IN (8644,8645,8646,8647), +PARTITION p2162 VALUES IN (8648,8649,8650,8651), +PARTITION p2163 VALUES IN (8652,8653,8654,8655), +PARTITION p2164 VALUES IN (8656,8657,8658,8659), +PARTITION p2165 VALUES IN (8660,8661,8662,8663), +PARTITION p2166 VALUES IN (8664,8665,8666,8667), +PARTITION p2167 VALUES IN (8668,8669,8670,8671), +PARTITION p2168 VALUES IN (8672,8673,8674,8675), +PARTITION p2169 VALUES IN (8676,8677,8678,8679), +PARTITION p2170 VALUES IN (8680,8681,8682,8683), +PARTITION p2171 VALUES IN (8684,8685,8686,8687), +PARTITION p2172 VALUES IN (8688,8689,8690,8691), +PARTITION p2173 VALUES IN (8692,8693,8694,8695), +PARTITION p2174 VALUES IN (8696,8697,8698,8699), +PARTITION p2175 VALUES IN (8700,8701,8702,8703), +PARTITION p2176 VALUES IN (8704,8705,8706,8707), +PARTITION p2177 VALUES IN (8708,8709,8710,8711), +PARTITION p2178 VALUES IN (8712,8713,8714,8715), +PARTITION p2179 VALUES IN (8716,8717,8718,8719), +PARTITION p2180 VALUES IN (8720,8721,8722,8723), +PARTITION p2181 VALUES IN (8724,8725,8726,8727), +PARTITION p2182 VALUES IN (8728,8729,8730,8731), +PARTITION p2183 VALUES IN (8732,8733,8734,8735), +PARTITION p2184 VALUES IN (8736,8737,8738,8739), +PARTITION p2185 VALUES IN (8740,8741,8742,8743), +PARTITION p2186 VALUES IN (8744,8745,8746,8747), +PARTITION p2187 VALUES IN (8748,8749,8750,8751), +PARTITION p2188 VALUES IN (8752,8753,8754,8755), +PARTITION p2189 VALUES IN (8756,8757,8758,8759), +PARTITION p2190 VALUES IN (8760,8761,8762,8763), +PARTITION p2191 VALUES IN (8764,8765,8766,8767), +PARTITION p2192 VALUES IN (8768,8769,8770,8771), +PARTITION p2193 VALUES IN (8772,8773,8774,8775), +PARTITION p2194 VALUES IN (8776,8777,8778,8779), +PARTITION p2195 VALUES IN (8780,8781,8782,8783), +PARTITION p2196 VALUES IN (8784,8785,8786,8787), +PARTITION p2197 VALUES IN (8788,8789,8790,8791), +PARTITION p2198 VALUES IN (8792,8793,8794,8795), +PARTITION p2199 VALUES IN (8796,8797,8798,8799), +PARTITION p2200 VALUES IN (8800,8801,8802,8803), +PARTITION p2201 VALUES IN (8804,8805,8806,8807), +PARTITION p2202 VALUES IN (8808,8809,8810,8811), +PARTITION p2203 VALUES IN (8812,8813,8814,8815), +PARTITION p2204 VALUES IN (8816,8817,8818,8819), +PARTITION p2205 VALUES IN (8820,8821,8822,8823), +PARTITION p2206 VALUES IN (8824,8825,8826,8827), +PARTITION p2207 VALUES IN (8828,8829,8830,8831), +PARTITION p2208 VALUES IN (8832,8833,8834,8835), +PARTITION p2209 VALUES IN (8836,8837,8838,8839), +PARTITION p2210 VALUES IN (8840,8841,8842,8843), +PARTITION p2211 VALUES IN (8844,8845,8846,8847), +PARTITION p2212 VALUES IN (8848,8849,8850,8851), +PARTITION p2213 VALUES IN (8852,8853,8854,8855), +PARTITION p2214 VALUES IN (8856,8857,8858,8859), +PARTITION p2215 VALUES IN (8860,8861,8862,8863), +PARTITION p2216 VALUES IN (8864,8865,8866,8867), +PARTITION p2217 VALUES IN (8868,8869,8870,8871), +PARTITION p2218 VALUES IN (8872,8873,8874,8875), +PARTITION p2219 VALUES IN (8876,8877,8878,8879), +PARTITION p2220 VALUES IN (8880,8881,8882,8883), +PARTITION p2221 VALUES IN (8884,8885,8886,8887), +PARTITION p2222 VALUES IN (8888,8889,8890,8891), +PARTITION p2223 VALUES IN (8892,8893,8894,8895), +PARTITION p2224 VALUES IN (8896,8897,8898,8899), +PARTITION p2225 VALUES IN (8900,8901,8902,8903), +PARTITION p2226 VALUES IN (8904,8905,8906,8907), +PARTITION p2227 VALUES IN (8908,8909,8910,8911), +PARTITION p2228 VALUES IN (8912,8913,8914,8915), +PARTITION p2229 VALUES IN (8916,8917,8918,8919), +PARTITION p2230 VALUES IN (8920,8921,8922,8923), +PARTITION p2231 VALUES IN (8924,8925,8926,8927), +PARTITION p2232 VALUES IN (8928,8929,8930,8931), +PARTITION p2233 VALUES IN (8932,8933,8934,8935), +PARTITION p2234 VALUES IN (8936,8937,8938,8939), +PARTITION p2235 VALUES IN (8940,8941,8942,8943), +PARTITION p2236 VALUES IN (8944,8945,8946,8947), +PARTITION p2237 VALUES IN (8948,8949,8950,8951), +PARTITION p2238 VALUES IN (8952,8953,8954,8955), +PARTITION p2239 VALUES IN (8956,8957,8958,8959), +PARTITION p2240 VALUES IN (8960,8961,8962,8963), +PARTITION p2241 VALUES IN (8964,8965,8966,8967), +PARTITION p2242 VALUES IN (8968,8969,8970,8971), +PARTITION p2243 VALUES IN (8972,8973,8974,8975), +PARTITION p2244 VALUES IN (8976,8977,8978,8979), +PARTITION p2245 VALUES IN (8980,8981,8982,8983), +PARTITION p2246 VALUES IN (8984,8985,8986,8987), +PARTITION p2247 VALUES IN (8988,8989,8990,8991), +PARTITION p2248 VALUES IN (8992,8993,8994,8995), +PARTITION p2249 VALUES IN (8996,8997,8998,8999), +PARTITION p2250 VALUES IN (9000,9001,9002,9003), +PARTITION p2251 VALUES IN (9004,9005,9006,9007), +PARTITION p2252 VALUES IN (9008,9009,9010,9011), +PARTITION p2253 VALUES IN (9012,9013,9014,9015), +PARTITION p2254 VALUES IN (9016,9017,9018,9019), +PARTITION p2255 VALUES IN (9020,9021,9022,9023), +PARTITION p2256 VALUES IN (9024,9025,9026,9027), +PARTITION p2257 VALUES IN (9028,9029,9030,9031), +PARTITION p2258 VALUES IN (9032,9033,9034,9035), +PARTITION p2259 VALUES IN (9036,9037,9038,9039), +PARTITION p2260 VALUES IN (9040,9041,9042,9043), +PARTITION p2261 VALUES IN (9044,9045,9046,9047), +PARTITION p2262 VALUES IN (9048,9049,9050,9051), +PARTITION p2263 VALUES IN (9052,9053,9054,9055), +PARTITION p2264 VALUES IN (9056,9057,9058,9059), +PARTITION p2265 VALUES IN (9060,9061,9062,9063), +PARTITION p2266 VALUES IN (9064,9065,9066,9067), +PARTITION p2267 VALUES IN (9068,9069,9070,9071), +PARTITION p2268 VALUES IN (9072,9073,9074,9075), +PARTITION p2269 VALUES IN (9076,9077,9078,9079), +PARTITION p2270 VALUES IN (9080,9081,9082,9083), +PARTITION p2271 VALUES IN (9084,9085,9086,9087), +PARTITION p2272 VALUES IN (9088,9089,9090,9091), +PARTITION p2273 VALUES IN (9092,9093,9094,9095), +PARTITION p2274 VALUES IN (9096,9097,9098,9099), +PARTITION p2275 VALUES IN (9100,9101,9102,9103), +PARTITION p2276 VALUES IN (9104,9105,9106,9107), +PARTITION p2277 VALUES IN (9108,9109,9110,9111), +PARTITION p2278 VALUES IN (9112,9113,9114,9115), +PARTITION p2279 VALUES IN (9116,9117,9118,9119), +PARTITION p2280 VALUES IN (9120,9121,9122,9123), +PARTITION p2281 VALUES IN (9124,9125,9126,9127), +PARTITION p2282 VALUES IN (9128,9129,9130,9131), +PARTITION p2283 VALUES IN (9132,9133,9134,9135), +PARTITION p2284 VALUES IN (9136,9137,9138,9139), +PARTITION p2285 VALUES IN (9140,9141,9142,9143), +PARTITION p2286 VALUES IN (9144,9145,9146,9147), +PARTITION p2287 VALUES IN (9148,9149,9150,9151), +PARTITION p2288 VALUES IN (9152,9153,9154,9155), +PARTITION p2289 VALUES IN (9156,9157,9158,9159), +PARTITION p2290 VALUES IN (9160,9161,9162,9163), +PARTITION p2291 VALUES IN (9164,9165,9166,9167), +PARTITION p2292 VALUES IN (9168,9169,9170,9171), +PARTITION p2293 VALUES IN (9172,9173,9174,9175), +PARTITION p2294 VALUES IN (9176,9177,9178,9179), +PARTITION p2295 VALUES IN (9180,9181,9182,9183), +PARTITION p2296 VALUES IN (9184,9185,9186,9187), +PARTITION p2297 VALUES IN (9188,9189,9190,9191), +PARTITION p2298 VALUES IN (9192,9193,9194,9195), +PARTITION p2299 VALUES IN (9196,9197,9198,9199), +PARTITION p2300 VALUES IN (9200,9201,9202,9203), +PARTITION p2301 VALUES IN (9204,9205,9206,9207), +PARTITION p2302 VALUES IN (9208,9209,9210,9211), +PARTITION p2303 VALUES IN (9212,9213,9214,9215), +PARTITION p2304 VALUES IN (9216,9217,9218,9219), +PARTITION p2305 VALUES IN (9220,9221,9222,9223), +PARTITION p2306 VALUES IN (9224,9225,9226,9227), +PARTITION p2307 VALUES IN (9228,9229,9230,9231), +PARTITION p2308 VALUES IN (9232,9233,9234,9235), +PARTITION p2309 VALUES IN (9236,9237,9238,9239), +PARTITION p2310 VALUES IN (9240,9241,9242,9243), +PARTITION p2311 VALUES IN (9244,9245,9246,9247), +PARTITION p2312 VALUES IN (9248,9249,9250,9251), +PARTITION p2313 VALUES IN (9252,9253,9254,9255), +PARTITION p2314 VALUES IN (9256,9257,9258,9259), +PARTITION p2315 VALUES IN (9260,9261,9262,9263), +PARTITION p2316 VALUES IN (9264,9265,9266,9267), +PARTITION p2317 VALUES IN (9268,9269,9270,9271), +PARTITION p2318 VALUES IN (9272,9273,9274,9275), +PARTITION p2319 VALUES IN (9276,9277,9278,9279), +PARTITION p2320 VALUES IN (9280,9281,9282,9283), +PARTITION p2321 VALUES IN (9284,9285,9286,9287), +PARTITION p2322 VALUES IN (9288,9289,9290,9291), +PARTITION p2323 VALUES IN (9292,9293,9294,9295), +PARTITION p2324 VALUES IN (9296,9297,9298,9299), +PARTITION p2325 VALUES IN (9300,9301,9302,9303), +PARTITION p2326 VALUES IN (9304,9305,9306,9307), +PARTITION p2327 VALUES IN (9308,9309,9310,9311), +PARTITION p2328 VALUES IN (9312,9313,9314,9315), +PARTITION p2329 VALUES IN (9316,9317,9318,9319), +PARTITION p2330 VALUES IN (9320,9321,9322,9323), +PARTITION p2331 VALUES IN (9324,9325,9326,9327), +PARTITION p2332 VALUES IN (9328,9329,9330,9331), +PARTITION p2333 VALUES IN (9332,9333,9334,9335), +PARTITION p2334 VALUES IN (9336,9337,9338,9339), +PARTITION p2335 VALUES IN (9340,9341,9342,9343), +PARTITION p2336 VALUES IN (9344,9345,9346,9347), +PARTITION p2337 VALUES IN (9348,9349,9350,9351), +PARTITION p2338 VALUES IN (9352,9353,9354,9355), +PARTITION p2339 VALUES IN (9356,9357,9358,9359), +PARTITION p2340 VALUES IN (9360,9361,9362,9363), +PARTITION p2341 VALUES IN (9364,9365,9366,9367), +PARTITION p2342 VALUES IN (9368,9369,9370,9371), +PARTITION p2343 VALUES IN (9372,9373,9374,9375), +PARTITION p2344 VALUES IN (9376,9377,9378,9379), +PARTITION p2345 VALUES IN (9380,9381,9382,9383), +PARTITION p2346 VALUES IN (9384,9385,9386,9387), +PARTITION p2347 VALUES IN (9388,9389,9390,9391), +PARTITION p2348 VALUES IN (9392,9393,9394,9395), +PARTITION p2349 VALUES IN (9396,9397,9398,9399), +PARTITION p2350 VALUES IN (9400,9401,9402,9403), +PARTITION p2351 VALUES IN (9404,9405,9406,9407), +PARTITION p2352 VALUES IN (9408,9409,9410,9411), +PARTITION p2353 VALUES IN (9412,9413,9414,9415), +PARTITION p2354 VALUES IN (9416,9417,9418,9419), +PARTITION p2355 VALUES IN (9420,9421,9422,9423), +PARTITION p2356 VALUES IN (9424,9425,9426,9427), +PARTITION p2357 VALUES IN (9428,9429,9430,9431), +PARTITION p2358 VALUES IN (9432,9433,9434,9435), +PARTITION p2359 VALUES IN (9436,9437,9438,9439), +PARTITION p2360 VALUES IN (9440,9441,9442,9443), +PARTITION p2361 VALUES IN (9444,9445,9446,9447), +PARTITION p2362 VALUES IN (9448,9449,9450,9451), +PARTITION p2363 VALUES IN (9452,9453,9454,9455), +PARTITION p2364 VALUES IN (9456,9457,9458,9459), +PARTITION p2365 VALUES IN (9460,9461,9462,9463), +PARTITION p2366 VALUES IN (9464,9465,9466,9467), +PARTITION p2367 VALUES IN (9468,9469,9470,9471), +PARTITION p2368 VALUES IN (9472,9473,9474,9475), +PARTITION p2369 VALUES IN (9476,9477,9478,9479), +PARTITION p2370 VALUES IN (9480,9481,9482,9483), +PARTITION p2371 VALUES IN (9484,9485,9486,9487), +PARTITION p2372 VALUES IN (9488,9489,9490,9491), +PARTITION p2373 VALUES IN (9492,9493,9494,9495), +PARTITION p2374 VALUES IN (9496,9497,9498,9499), +PARTITION p2375 VALUES IN (9500,9501,9502,9503), +PARTITION p2376 VALUES IN (9504,9505,9506,9507), +PARTITION p2377 VALUES IN (9508,9509,9510,9511), +PARTITION p2378 VALUES IN (9512,9513,9514,9515), +PARTITION p2379 VALUES IN (9516,9517,9518,9519), +PARTITION p2380 VALUES IN (9520,9521,9522,9523), +PARTITION p2381 VALUES IN (9524,9525,9526,9527), +PARTITION p2382 VALUES IN (9528,9529,9530,9531), +PARTITION p2383 VALUES IN (9532,9533,9534,9535), +PARTITION p2384 VALUES IN (9536,9537,9538,9539), +PARTITION p2385 VALUES IN (9540,9541,9542,9543), +PARTITION p2386 VALUES IN (9544,9545,9546,9547), +PARTITION p2387 VALUES IN (9548,9549,9550,9551), +PARTITION p2388 VALUES IN (9552,9553,9554,9555), +PARTITION p2389 VALUES IN (9556,9557,9558,9559), +PARTITION p2390 VALUES IN (9560,9561,9562,9563), +PARTITION p2391 VALUES IN (9564,9565,9566,9567), +PARTITION p2392 VALUES IN (9568,9569,9570,9571), +PARTITION p2393 VALUES IN (9572,9573,9574,9575), +PARTITION p2394 VALUES IN (9576,9577,9578,9579), +PARTITION p2395 VALUES IN (9580,9581,9582,9583), +PARTITION p2396 VALUES IN (9584,9585,9586,9587), +PARTITION p2397 VALUES IN (9588,9589,9590,9591), +PARTITION p2398 VALUES IN (9592,9593,9594,9595), +PARTITION p2399 VALUES IN (9596,9597,9598,9599), +PARTITION p2400 VALUES IN (9600,9601,9602,9603), +PARTITION p2401 VALUES IN (9604,9605,9606,9607), +PARTITION p2402 VALUES IN (9608,9609,9610,9611), +PARTITION p2403 VALUES IN (9612,9613,9614,9615), +PARTITION p2404 VALUES IN (9616,9617,9618,9619), +PARTITION p2405 VALUES IN (9620,9621,9622,9623), +PARTITION p2406 VALUES IN (9624,9625,9626,9627), +PARTITION p2407 VALUES IN (9628,9629,9630,9631), +PARTITION p2408 VALUES IN (9632,9633,9634,9635), +PARTITION p2409 VALUES IN (9636,9637,9638,9639), +PARTITION p2410 VALUES IN (9640,9641,9642,9643), +PARTITION p2411 VALUES IN (9644,9645,9646,9647), +PARTITION p2412 VALUES IN (9648,9649,9650,9651), +PARTITION p2413 VALUES IN (9652,9653,9654,9655), +PARTITION p2414 VALUES IN (9656,9657,9658,9659), +PARTITION p2415 VALUES IN (9660,9661,9662,9663), +PARTITION p2416 VALUES IN (9664,9665,9666,9667), +PARTITION p2417 VALUES IN (9668,9669,9670,9671), +PARTITION p2418 VALUES IN (9672,9673,9674,9675), +PARTITION p2419 VALUES IN (9676,9677,9678,9679), +PARTITION p2420 VALUES IN (9680,9681,9682,9683), +PARTITION p2421 VALUES IN (9684,9685,9686,9687), +PARTITION p2422 VALUES IN (9688,9689,9690,9691), +PARTITION p2423 VALUES IN (9692,9693,9694,9695), +PARTITION p2424 VALUES IN (9696,9697,9698,9699), +PARTITION p2425 VALUES IN (9700,9701,9702,9703), +PARTITION p2426 VALUES IN (9704,9705,9706,9707), +PARTITION p2427 VALUES IN (9708,9709,9710,9711), +PARTITION p2428 VALUES IN (9712,9713,9714,9715), +PARTITION p2429 VALUES IN (9716,9717,9718,9719), +PARTITION p2430 VALUES IN (9720,9721,9722,9723), +PARTITION p2431 VALUES IN (9724,9725,9726,9727), +PARTITION p2432 VALUES IN (9728,9729,9730,9731), +PARTITION p2433 VALUES IN (9732,9733,9734,9735), +PARTITION p2434 VALUES IN (9736,9737,9738,9739), +PARTITION p2435 VALUES IN (9740,9741,9742,9743), +PARTITION p2436 VALUES IN (9744,9745,9746,9747), +PARTITION p2437 VALUES IN (9748,9749,9750,9751), +PARTITION p2438 VALUES IN (9752,9753,9754,9755), +PARTITION p2439 VALUES IN (9756,9757,9758,9759), +PARTITION p2440 VALUES IN (9760,9761,9762,9763), +PARTITION p2441 VALUES IN (9764,9765,9766,9767), +PARTITION p2442 VALUES IN (9768,9769,9770,9771), +PARTITION p2443 VALUES IN (9772,9773,9774,9775), +PARTITION p2444 VALUES IN (9776,9777,9778,9779), +PARTITION p2445 VALUES IN (9780,9781,9782,9783), +PARTITION p2446 VALUES IN (9784,9785,9786,9787), +PARTITION p2447 VALUES IN (9788,9789,9790,9791), +PARTITION p2448 VALUES IN (9792,9793,9794,9795), +PARTITION p2449 VALUES IN (9796,9797,9798,9799), +PARTITION p2450 VALUES IN (9800,9801,9802,9803), +PARTITION p2451 VALUES IN (9804,9805,9806,9807), +PARTITION p2452 VALUES IN (9808,9809,9810,9811), +PARTITION p2453 VALUES IN (9812,9813,9814,9815), +PARTITION p2454 VALUES IN (9816,9817,9818,9819), +PARTITION p2455 VALUES IN (9820,9821,9822,9823), +PARTITION p2456 VALUES IN (9824,9825,9826,9827), +PARTITION p2457 VALUES IN (9828,9829,9830,9831), +PARTITION p2458 VALUES IN (9832,9833,9834,9835), +PARTITION p2459 VALUES IN (9836,9837,9838,9839), +PARTITION p2460 VALUES IN (9840,9841,9842,9843), +PARTITION p2461 VALUES IN (9844,9845,9846,9847), +PARTITION p2462 VALUES IN (9848,9849,9850,9851), +PARTITION p2463 VALUES IN (9852,9853,9854,9855), +PARTITION p2464 VALUES IN (9856,9857,9858,9859), +PARTITION p2465 VALUES IN (9860,9861,9862,9863), +PARTITION p2466 VALUES IN (9864,9865,9866,9867), +PARTITION p2467 VALUES IN (9868,9869,9870,9871), +PARTITION p2468 VALUES IN (9872,9873,9874,9875), +PARTITION p2469 VALUES IN (9876,9877,9878,9879), +PARTITION p2470 VALUES IN (9880,9881,9882,9883), +PARTITION p2471 VALUES IN (9884,9885,9886,9887), +PARTITION p2472 VALUES IN (9888,9889,9890,9891), +PARTITION p2473 VALUES IN (9892,9893,9894,9895), +PARTITION p2474 VALUES IN (9896,9897,9898,9899), +PARTITION p2475 VALUES IN (9900,9901,9902,9903), +PARTITION p2476 VALUES IN (9904,9905,9906,9907), +PARTITION p2477 VALUES IN (9908,9909,9910,9911), +PARTITION p2478 VALUES IN (9912,9913,9914,9915), +PARTITION p2479 VALUES IN (9916,9917,9918,9919), +PARTITION p2480 VALUES IN (9920,9921,9922,9923), +PARTITION p2481 VALUES IN (9924,9925,9926,9927), +PARTITION p2482 VALUES IN (9928,9929,9930,9931), +PARTITION p2483 VALUES IN (9932,9933,9934,9935), +PARTITION p2484 VALUES IN (9936,9937,9938,9939), +PARTITION p2485 VALUES IN (9940,9941,9942,9943), +PARTITION p2486 VALUES IN (9944,9945,9946,9947), +PARTITION p2487 VALUES IN (9948,9949,9950,9951), +PARTITION p2488 VALUES IN (9952,9953,9954,9955), +PARTITION p2489 VALUES IN (9956,9957,9958,9959), +PARTITION p2490 VALUES IN (9960,9961,9962,9963), +PARTITION p2491 VALUES IN (9964,9965,9966,9967), +PARTITION p2492 VALUES IN (9968,9969,9970,9971), +PARTITION p2493 VALUES IN (9972,9973,9974,9975), +PARTITION p2494 VALUES IN (9976,9977,9978,9979), +PARTITION p2495 VALUES IN (9980,9981,9982,9983), +PARTITION p2496 VALUES IN (9984,9985,9986,9987), +PARTITION p2497 VALUES IN (9988,9989,9990,9991), +PARTITION p2498 VALUES IN (9992,9993,9994,9995), +PARTITION p2499 VALUES IN (9996,9997,9998,9999), +PARTITION p2500 VALUES IN (10000,10001,10002,10003), +PARTITION p2501 VALUES IN (10004,10005,10006,10007), +PARTITION p2502 VALUES IN (10008,10009,10010,10011), +PARTITION p2503 VALUES IN (10012,10013,10014,10015), +PARTITION p2504 VALUES IN (10016,10017,10018,10019), +PARTITION p2505 VALUES IN (10020,10021,10022,10023), +PARTITION p2506 VALUES IN (10024,10025,10026,10027), +PARTITION p2507 VALUES IN (10028,10029,10030,10031), +PARTITION p2508 VALUES IN (10032,10033,10034,10035), +PARTITION p2509 VALUES IN (10036,10037,10038,10039), +PARTITION p2510 VALUES IN (10040,10041,10042,10043), +PARTITION p2511 VALUES IN (10044,10045,10046,10047), +PARTITION p2512 VALUES IN (10048,10049,10050,10051), +PARTITION p2513 VALUES IN (10052,10053,10054,10055), +PARTITION p2514 VALUES IN (10056,10057,10058,10059), +PARTITION p2515 VALUES IN (10060,10061,10062,10063), +PARTITION p2516 VALUES IN (10064,10065,10066,10067), +PARTITION p2517 VALUES IN (10068,10069,10070,10071), +PARTITION p2518 VALUES IN (10072,10073,10074,10075), +PARTITION p2519 VALUES IN (10076,10077,10078,10079), +PARTITION p2520 VALUES IN (10080,10081,10082,10083), +PARTITION p2521 VALUES IN (10084,10085,10086,10087), +PARTITION p2522 VALUES IN (10088,10089,10090,10091), +PARTITION p2523 VALUES IN (10092,10093,10094,10095), +PARTITION p2524 VALUES IN (10096,10097,10098,10099), +PARTITION p2525 VALUES IN (10100,10101,10102,10103), +PARTITION p2526 VALUES IN (10104,10105,10106,10107), +PARTITION p2527 VALUES IN (10108,10109,10110,10111), +PARTITION p2528 VALUES IN (10112,10113,10114,10115), +PARTITION p2529 VALUES IN (10116,10117,10118,10119), +PARTITION p2530 VALUES IN (10120,10121,10122,10123), +PARTITION p2531 VALUES IN (10124,10125,10126,10127), +PARTITION p2532 VALUES IN (10128,10129,10130,10131), +PARTITION p2533 VALUES IN (10132,10133,10134,10135), +PARTITION p2534 VALUES IN (10136,10137,10138,10139), +PARTITION p2535 VALUES IN (10140,10141,10142,10143), +PARTITION p2536 VALUES IN (10144,10145,10146,10147), +PARTITION p2537 VALUES IN (10148,10149,10150,10151), +PARTITION p2538 VALUES IN (10152,10153,10154,10155), +PARTITION p2539 VALUES IN (10156,10157,10158,10159), +PARTITION p2540 VALUES IN (10160,10161,10162,10163), +PARTITION p2541 VALUES IN (10164,10165,10166,10167), +PARTITION p2542 VALUES IN (10168,10169,10170,10171), +PARTITION p2543 VALUES IN (10172,10173,10174,10175), +PARTITION p2544 VALUES IN (10176,10177,10178,10179), +PARTITION p2545 VALUES IN (10180,10181,10182,10183), +PARTITION p2546 VALUES IN (10184,10185,10186,10187), +PARTITION p2547 VALUES IN (10188,10189,10190,10191), +PARTITION p2548 VALUES IN (10192,10193,10194,10195), +PARTITION p2549 VALUES IN (10196,10197,10198,10199), +PARTITION p2550 VALUES IN (10200,10201,10202,10203), +PARTITION p2551 VALUES IN (10204,10205,10206,10207), +PARTITION p2552 VALUES IN (10208,10209,10210,10211), +PARTITION p2553 VALUES IN (10212,10213,10214,10215), +PARTITION p2554 VALUES IN (10216,10217,10218,10219), +PARTITION p2555 VALUES IN (10220,10221,10222,10223), +PARTITION p2556 VALUES IN (10224,10225,10226,10227), +PARTITION p2557 VALUES IN (10228,10229,10230,10231), +PARTITION p2558 VALUES IN (10232,10233,10234,10235), +PARTITION p2559 VALUES IN (10236,10237,10238,10239), +PARTITION p2560 VALUES IN (10240,10241,10242,10243), +PARTITION p2561 VALUES IN (10244,10245,10246,10247), +PARTITION p2562 VALUES IN (10248,10249,10250,10251), +PARTITION p2563 VALUES IN (10252,10253,10254,10255), +PARTITION p2564 VALUES IN (10256,10257,10258,10259), +PARTITION p2565 VALUES IN (10260,10261,10262,10263), +PARTITION p2566 VALUES IN (10264,10265,10266,10267), +PARTITION p2567 VALUES IN (10268,10269,10270,10271), +PARTITION p2568 VALUES IN (10272,10273,10274,10275), +PARTITION p2569 VALUES IN (10276,10277,10278,10279), +PARTITION p2570 VALUES IN (10280,10281,10282,10283), +PARTITION p2571 VALUES IN (10284,10285,10286,10287), +PARTITION p2572 VALUES IN (10288,10289,10290,10291), +PARTITION p2573 VALUES IN (10292,10293,10294,10295), +PARTITION p2574 VALUES IN (10296,10297,10298,10299), +PARTITION p2575 VALUES IN (10300,10301,10302,10303), +PARTITION p2576 VALUES IN (10304,10305,10306,10307), +PARTITION p2577 VALUES IN (10308,10309,10310,10311), +PARTITION p2578 VALUES IN (10312,10313,10314,10315), +PARTITION p2579 VALUES IN (10316,10317,10318,10319), +PARTITION p2580 VALUES IN (10320,10321,10322,10323), +PARTITION p2581 VALUES IN (10324,10325,10326,10327), +PARTITION p2582 VALUES IN (10328,10329,10330,10331), +PARTITION p2583 VALUES IN (10332,10333,10334,10335), +PARTITION p2584 VALUES IN (10336,10337,10338,10339), +PARTITION p2585 VALUES IN (10340,10341,10342,10343), +PARTITION p2586 VALUES IN (10344,10345,10346,10347), +PARTITION p2587 VALUES IN (10348,10349,10350,10351), +PARTITION p2588 VALUES IN (10352,10353,10354,10355), +PARTITION p2589 VALUES IN (10356,10357,10358,10359), +PARTITION p2590 VALUES IN (10360,10361,10362,10363), +PARTITION p2591 VALUES IN (10364,10365,10366,10367), +PARTITION p2592 VALUES IN (10368,10369,10370,10371), +PARTITION p2593 VALUES IN (10372,10373,10374,10375), +PARTITION p2594 VALUES IN (10376,10377,10378,10379), +PARTITION p2595 VALUES IN (10380,10381,10382,10383), +PARTITION p2596 VALUES IN (10384,10385,10386,10387), +PARTITION p2597 VALUES IN (10388,10389,10390,10391), +PARTITION p2598 VALUES IN (10392,10393,10394,10395), +PARTITION p2599 VALUES IN (10396,10397,10398,10399), +PARTITION p2600 VALUES IN (10400,10401,10402,10403), +PARTITION p2601 VALUES IN (10404,10405,10406,10407), +PARTITION p2602 VALUES IN (10408,10409,10410,10411), +PARTITION p2603 VALUES IN (10412,10413,10414,10415), +PARTITION p2604 VALUES IN (10416,10417,10418,10419), +PARTITION p2605 VALUES IN (10420,10421,10422,10423), +PARTITION p2606 VALUES IN (10424,10425,10426,10427), +PARTITION p2607 VALUES IN (10428,10429,10430,10431), +PARTITION p2608 VALUES IN (10432,10433,10434,10435), +PARTITION p2609 VALUES IN (10436,10437,10438,10439), +PARTITION p2610 VALUES IN (10440,10441,10442,10443), +PARTITION p2611 VALUES IN (10444,10445,10446,10447), +PARTITION p2612 VALUES IN (10448,10449,10450,10451), +PARTITION p2613 VALUES IN (10452,10453,10454,10455), +PARTITION p2614 VALUES IN (10456,10457,10458,10459), +PARTITION p2615 VALUES IN (10460,10461,10462,10463), +PARTITION p2616 VALUES IN (10464,10465,10466,10467), +PARTITION p2617 VALUES IN (10468,10469,10470,10471), +PARTITION p2618 VALUES IN (10472,10473,10474,10475), +PARTITION p2619 VALUES IN (10476,10477,10478,10479), +PARTITION p2620 VALUES IN (10480,10481,10482,10483), +PARTITION p2621 VALUES IN (10484,10485,10486,10487), +PARTITION p2622 VALUES IN (10488,10489,10490,10491), +PARTITION p2623 VALUES IN (10492,10493,10494,10495), +PARTITION p2624 VALUES IN (10496,10497,10498,10499), +PARTITION p2625 VALUES IN (10500,10501,10502,10503), +PARTITION p2626 VALUES IN (10504,10505,10506,10507), +PARTITION p2627 VALUES IN (10508,10509,10510,10511), +PARTITION p2628 VALUES IN (10512,10513,10514,10515), +PARTITION p2629 VALUES IN (10516,10517,10518,10519), +PARTITION p2630 VALUES IN (10520,10521,10522,10523), +PARTITION p2631 VALUES IN (10524,10525,10526,10527), +PARTITION p2632 VALUES IN (10528,10529,10530,10531), +PARTITION p2633 VALUES IN (10532,10533,10534,10535), +PARTITION p2634 VALUES IN (10536,10537,10538,10539), +PARTITION p2635 VALUES IN (10540,10541,10542,10543), +PARTITION p2636 VALUES IN (10544,10545,10546,10547), +PARTITION p2637 VALUES IN (10548,10549,10550,10551), +PARTITION p2638 VALUES IN (10552,10553,10554,10555), +PARTITION p2639 VALUES IN (10556,10557,10558,10559), +PARTITION p2640 VALUES IN (10560,10561,10562,10563), +PARTITION p2641 VALUES IN (10564,10565,10566,10567), +PARTITION p2642 VALUES IN (10568,10569,10570,10571), +PARTITION p2643 VALUES IN (10572,10573,10574,10575), +PARTITION p2644 VALUES IN (10576,10577,10578,10579), +PARTITION p2645 VALUES IN (10580,10581,10582,10583), +PARTITION p2646 VALUES IN (10584,10585,10586,10587), +PARTITION p2647 VALUES IN (10588,10589,10590,10591), +PARTITION p2648 VALUES IN (10592,10593,10594,10595), +PARTITION p2649 VALUES IN (10596,10597,10598,10599), +PARTITION p2650 VALUES IN (10600,10601,10602,10603), +PARTITION p2651 VALUES IN (10604,10605,10606,10607), +PARTITION p2652 VALUES IN (10608,10609,10610,10611), +PARTITION p2653 VALUES IN (10612,10613,10614,10615), +PARTITION p2654 VALUES IN (10616,10617,10618,10619), +PARTITION p2655 VALUES IN (10620,10621,10622,10623), +PARTITION p2656 VALUES IN (10624,10625,10626,10627), +PARTITION p2657 VALUES IN (10628,10629,10630,10631), +PARTITION p2658 VALUES IN (10632,10633,10634,10635), +PARTITION p2659 VALUES IN (10636,10637,10638,10639), +PARTITION p2660 VALUES IN (10640,10641,10642,10643), +PARTITION p2661 VALUES IN (10644,10645,10646,10647), +PARTITION p2662 VALUES IN (10648,10649,10650,10651), +PARTITION p2663 VALUES IN (10652,10653,10654,10655), +PARTITION p2664 VALUES IN (10656,10657,10658,10659), +PARTITION p2665 VALUES IN (10660,10661,10662,10663), +PARTITION p2666 VALUES IN (10664,10665,10666,10667), +PARTITION p2667 VALUES IN (10668,10669,10670,10671), +PARTITION p2668 VALUES IN (10672,10673,10674,10675), +PARTITION p2669 VALUES IN (10676,10677,10678,10679), +PARTITION p2670 VALUES IN (10680,10681,10682,10683), +PARTITION p2671 VALUES IN (10684,10685,10686,10687), +PARTITION p2672 VALUES IN (10688,10689,10690,10691), +PARTITION p2673 VALUES IN (10692,10693,10694,10695), +PARTITION p2674 VALUES IN (10696,10697,10698,10699), +PARTITION p2675 VALUES IN (10700,10701,10702,10703), +PARTITION p2676 VALUES IN (10704,10705,10706,10707), +PARTITION p2677 VALUES IN (10708,10709,10710,10711), +PARTITION p2678 VALUES IN (10712,10713,10714,10715), +PARTITION p2679 VALUES IN (10716,10717,10718,10719), +PARTITION p2680 VALUES IN (10720,10721,10722,10723), +PARTITION p2681 VALUES IN (10724,10725,10726,10727), +PARTITION p2682 VALUES IN (10728,10729,10730,10731), +PARTITION p2683 VALUES IN (10732,10733,10734,10735), +PARTITION p2684 VALUES IN (10736,10737,10738,10739), +PARTITION p2685 VALUES IN (10740,10741,10742,10743), +PARTITION p2686 VALUES IN (10744,10745,10746,10747), +PARTITION p2687 VALUES IN (10748,10749,10750,10751), +PARTITION p2688 VALUES IN (10752,10753,10754,10755), +PARTITION p2689 VALUES IN (10756,10757,10758,10759), +PARTITION p2690 VALUES IN (10760,10761,10762,10763), +PARTITION p2691 VALUES IN (10764,10765,10766,10767), +PARTITION p2692 VALUES IN (10768,10769,10770,10771), +PARTITION p2693 VALUES IN (10772,10773,10774,10775), +PARTITION p2694 VALUES IN (10776,10777,10778,10779), +PARTITION p2695 VALUES IN (10780,10781,10782,10783), +PARTITION p2696 VALUES IN (10784,10785,10786,10787), +PARTITION p2697 VALUES IN (10788,10789,10790,10791), +PARTITION p2698 VALUES IN (10792,10793,10794,10795), +PARTITION p2699 VALUES IN (10796,10797,10798,10799), +PARTITION p2700 VALUES IN (10800,10801,10802,10803), +PARTITION p2701 VALUES IN (10804,10805,10806,10807), +PARTITION p2702 VALUES IN (10808,10809,10810,10811), +PARTITION p2703 VALUES IN (10812,10813,10814,10815), +PARTITION p2704 VALUES IN (10816,10817,10818,10819), +PARTITION p2705 VALUES IN (10820,10821,10822,10823), +PARTITION p2706 VALUES IN (10824,10825,10826,10827), +PARTITION p2707 VALUES IN (10828,10829,10830,10831), +PARTITION p2708 VALUES IN (10832,10833,10834,10835), +PARTITION p2709 VALUES IN (10836,10837,10838,10839), +PARTITION p2710 VALUES IN (10840,10841,10842,10843), +PARTITION p2711 VALUES IN (10844,10845,10846,10847), +PARTITION p2712 VALUES IN (10848,10849,10850,10851), +PARTITION p2713 VALUES IN (10852,10853,10854,10855), +PARTITION p2714 VALUES IN (10856,10857,10858,10859), +PARTITION p2715 VALUES IN (10860,10861,10862,10863), +PARTITION p2716 VALUES IN (10864,10865,10866,10867), +PARTITION p2717 VALUES IN (10868,10869,10870,10871), +PARTITION p2718 VALUES IN (10872,10873,10874,10875), +PARTITION p2719 VALUES IN (10876,10877,10878,10879), +PARTITION p2720 VALUES IN (10880,10881,10882,10883), +PARTITION p2721 VALUES IN (10884,10885,10886,10887), +PARTITION p2722 VALUES IN (10888,10889,10890,10891), +PARTITION p2723 VALUES IN (10892,10893,10894,10895), +PARTITION p2724 VALUES IN (10896,10897,10898,10899), +PARTITION p2725 VALUES IN (10900,10901,10902,10903), +PARTITION p2726 VALUES IN (10904,10905,10906,10907), +PARTITION p2727 VALUES IN (10908,10909,10910,10911), +PARTITION p2728 VALUES IN (10912,10913,10914,10915), +PARTITION p2729 VALUES IN (10916,10917,10918,10919), +PARTITION p2730 VALUES IN (10920,10921,10922,10923), +PARTITION p2731 VALUES IN (10924,10925,10926,10927), +PARTITION p2732 VALUES IN (10928,10929,10930,10931), +PARTITION p2733 VALUES IN (10932,10933,10934,10935), +PARTITION p2734 VALUES IN (10936,10937,10938,10939), +PARTITION p2735 VALUES IN (10940,10941,10942,10943), +PARTITION p2736 VALUES IN (10944,10945,10946,10947), +PARTITION p2737 VALUES IN (10948,10949,10950,10951), +PARTITION p2738 VALUES IN (10952,10953,10954,10955), +PARTITION p2739 VALUES IN (10956,10957,10958,10959), +PARTITION p2740 VALUES IN (10960,10961,10962,10963), +PARTITION p2741 VALUES IN (10964,10965,10966,10967), +PARTITION p2742 VALUES IN (10968,10969,10970,10971), +PARTITION p2743 VALUES IN (10972,10973,10974,10975), +PARTITION p2744 VALUES IN (10976,10977,10978,10979), +PARTITION p2745 VALUES IN (10980,10981,10982,10983), +PARTITION p2746 VALUES IN (10984,10985,10986,10987), +PARTITION p2747 VALUES IN (10988,10989,10990,10991), +PARTITION p2748 VALUES IN (10992,10993,10994,10995), +PARTITION p2749 VALUES IN (10996,10997,10998,10999), +PARTITION p2750 VALUES IN (11000,11001,11002,11003), +PARTITION p2751 VALUES IN (11004,11005,11006,11007), +PARTITION p2752 VALUES IN (11008,11009,11010,11011), +PARTITION p2753 VALUES IN (11012,11013,11014,11015), +PARTITION p2754 VALUES IN (11016,11017,11018,11019), +PARTITION p2755 VALUES IN (11020,11021,11022,11023), +PARTITION p2756 VALUES IN (11024,11025,11026,11027), +PARTITION p2757 VALUES IN (11028,11029,11030,11031), +PARTITION p2758 VALUES IN (11032,11033,11034,11035), +PARTITION p2759 VALUES IN (11036,11037,11038,11039), +PARTITION p2760 VALUES IN (11040,11041,11042,11043), +PARTITION p2761 VALUES IN (11044,11045,11046,11047), +PARTITION p2762 VALUES IN (11048,11049,11050,11051), +PARTITION p2763 VALUES IN (11052,11053,11054,11055), +PARTITION p2764 VALUES IN (11056,11057,11058,11059), +PARTITION p2765 VALUES IN (11060,11061,11062,11063), +PARTITION p2766 VALUES IN (11064,11065,11066,11067), +PARTITION p2767 VALUES IN (11068,11069,11070,11071), +PARTITION p2768 VALUES IN (11072,11073,11074,11075), +PARTITION p2769 VALUES IN (11076,11077,11078,11079), +PARTITION p2770 VALUES IN (11080,11081,11082,11083), +PARTITION p2771 VALUES IN (11084,11085,11086,11087), +PARTITION p2772 VALUES IN (11088,11089,11090,11091), +PARTITION p2773 VALUES IN (11092,11093,11094,11095), +PARTITION p2774 VALUES IN (11096,11097,11098,11099), +PARTITION p2775 VALUES IN (11100,11101,11102,11103), +PARTITION p2776 VALUES IN (11104,11105,11106,11107), +PARTITION p2777 VALUES IN (11108,11109,11110,11111), +PARTITION p2778 VALUES IN (11112,11113,11114,11115), +PARTITION p2779 VALUES IN (11116,11117,11118,11119), +PARTITION p2780 VALUES IN (11120,11121,11122,11123), +PARTITION p2781 VALUES IN (11124,11125,11126,11127), +PARTITION p2782 VALUES IN (11128,11129,11130,11131), +PARTITION p2783 VALUES IN (11132,11133,11134,11135), +PARTITION p2784 VALUES IN (11136,11137,11138,11139), +PARTITION p2785 VALUES IN (11140,11141,11142,11143), +PARTITION p2786 VALUES IN (11144,11145,11146,11147), +PARTITION p2787 VALUES IN (11148,11149,11150,11151), +PARTITION p2788 VALUES IN (11152,11153,11154,11155), +PARTITION p2789 VALUES IN (11156,11157,11158,11159), +PARTITION p2790 VALUES IN (11160,11161,11162,11163), +PARTITION p2791 VALUES IN (11164,11165,11166,11167), +PARTITION p2792 VALUES IN (11168,11169,11170,11171), +PARTITION p2793 VALUES IN (11172,11173,11174,11175), +PARTITION p2794 VALUES IN (11176,11177,11178,11179), +PARTITION p2795 VALUES IN (11180,11181,11182,11183), +PARTITION p2796 VALUES IN (11184,11185,11186,11187), +PARTITION p2797 VALUES IN (11188,11189,11190,11191), +PARTITION p2798 VALUES IN (11192,11193,11194,11195), +PARTITION p2799 VALUES IN (11196,11197,11198,11199), +PARTITION p2800 VALUES IN (11200,11201,11202,11203), +PARTITION p2801 VALUES IN (11204,11205,11206,11207), +PARTITION p2802 VALUES IN (11208,11209,11210,11211), +PARTITION p2803 VALUES IN (11212,11213,11214,11215), +PARTITION p2804 VALUES IN (11216,11217,11218,11219), +PARTITION p2805 VALUES IN (11220,11221,11222,11223), +PARTITION p2806 VALUES IN (11224,11225,11226,11227), +PARTITION p2807 VALUES IN (11228,11229,11230,11231), +PARTITION p2808 VALUES IN (11232,11233,11234,11235), +PARTITION p2809 VALUES IN (11236,11237,11238,11239), +PARTITION p2810 VALUES IN (11240,11241,11242,11243), +PARTITION p2811 VALUES IN (11244,11245,11246,11247), +PARTITION p2812 VALUES IN (11248,11249,11250,11251), +PARTITION p2813 VALUES IN (11252,11253,11254,11255), +PARTITION p2814 VALUES IN (11256,11257,11258,11259), +PARTITION p2815 VALUES IN (11260,11261,11262,11263), +PARTITION p2816 VALUES IN (11264,11265,11266,11267), +PARTITION p2817 VALUES IN (11268,11269,11270,11271), +PARTITION p2818 VALUES IN (11272,11273,11274,11275), +PARTITION p2819 VALUES IN (11276,11277,11278,11279), +PARTITION p2820 VALUES IN (11280,11281,11282,11283), +PARTITION p2821 VALUES IN (11284,11285,11286,11287), +PARTITION p2822 VALUES IN (11288,11289,11290,11291), +PARTITION p2823 VALUES IN (11292,11293,11294,11295), +PARTITION p2824 VALUES IN (11296,11297,11298,11299), +PARTITION p2825 VALUES IN (11300,11301,11302,11303), +PARTITION p2826 VALUES IN (11304,11305,11306,11307), +PARTITION p2827 VALUES IN (11308,11309,11310,11311), +PARTITION p2828 VALUES IN (11312,11313,11314,11315), +PARTITION p2829 VALUES IN (11316,11317,11318,11319), +PARTITION p2830 VALUES IN (11320,11321,11322,11323), +PARTITION p2831 VALUES IN (11324,11325,11326,11327), +PARTITION p2832 VALUES IN (11328,11329,11330,11331), +PARTITION p2833 VALUES IN (11332,11333,11334,11335), +PARTITION p2834 VALUES IN (11336,11337,11338,11339), +PARTITION p2835 VALUES IN (11340,11341,11342,11343), +PARTITION p2836 VALUES IN (11344,11345,11346,11347), +PARTITION p2837 VALUES IN (11348,11349,11350,11351), +PARTITION p2838 VALUES IN (11352,11353,11354,11355), +PARTITION p2839 VALUES IN (11356,11357,11358,11359), +PARTITION p2840 VALUES IN (11360,11361,11362,11363), +PARTITION p2841 VALUES IN (11364,11365,11366,11367), +PARTITION p2842 VALUES IN (11368,11369,11370,11371), +PARTITION p2843 VALUES IN (11372,11373,11374,11375), +PARTITION p2844 VALUES IN (11376,11377,11378,11379), +PARTITION p2845 VALUES IN (11380,11381,11382,11383), +PARTITION p2846 VALUES IN (11384,11385,11386,11387), +PARTITION p2847 VALUES IN (11388,11389,11390,11391), +PARTITION p2848 VALUES IN (11392,11393,11394,11395), +PARTITION p2849 VALUES IN (11396,11397,11398,11399), +PARTITION p2850 VALUES IN (11400,11401,11402,11403), +PARTITION p2851 VALUES IN (11404,11405,11406,11407), +PARTITION p2852 VALUES IN (11408,11409,11410,11411), +PARTITION p2853 VALUES IN (11412,11413,11414,11415), +PARTITION p2854 VALUES IN (11416,11417,11418,11419), +PARTITION p2855 VALUES IN (11420,11421,11422,11423), +PARTITION p2856 VALUES IN (11424,11425,11426,11427), +PARTITION p2857 VALUES IN (11428,11429,11430,11431), +PARTITION p2858 VALUES IN (11432,11433,11434,11435), +PARTITION p2859 VALUES IN (11436,11437,11438,11439), +PARTITION p2860 VALUES IN (11440,11441,11442,11443), +PARTITION p2861 VALUES IN (11444,11445,11446,11447), +PARTITION p2862 VALUES IN (11448,11449,11450,11451), +PARTITION p2863 VALUES IN (11452,11453,11454,11455), +PARTITION p2864 VALUES IN (11456,11457,11458,11459), +PARTITION p2865 VALUES IN (11460,11461,11462,11463), +PARTITION p2866 VALUES IN (11464,11465,11466,11467), +PARTITION p2867 VALUES IN (11468,11469,11470,11471), +PARTITION p2868 VALUES IN (11472,11473,11474,11475), +PARTITION p2869 VALUES IN (11476,11477,11478,11479), +PARTITION p2870 VALUES IN (11480,11481,11482,11483), +PARTITION p2871 VALUES IN (11484,11485,11486,11487), +PARTITION p2872 VALUES IN (11488,11489,11490,11491), +PARTITION p2873 VALUES IN (11492,11493,11494,11495), +PARTITION p2874 VALUES IN (11496,11497,11498,11499), +PARTITION p2875 VALUES IN (11500,11501,11502,11503), +PARTITION p2876 VALUES IN (11504,11505,11506,11507), +PARTITION p2877 VALUES IN (11508,11509,11510,11511), +PARTITION p2878 VALUES IN (11512,11513,11514,11515), +PARTITION p2879 VALUES IN (11516,11517,11518,11519), +PARTITION p2880 VALUES IN (11520,11521,11522,11523), +PARTITION p2881 VALUES IN (11524,11525,11526,11527), +PARTITION p2882 VALUES IN (11528,11529,11530,11531), +PARTITION p2883 VALUES IN (11532,11533,11534,11535), +PARTITION p2884 VALUES IN (11536,11537,11538,11539), +PARTITION p2885 VALUES IN (11540,11541,11542,11543), +PARTITION p2886 VALUES IN (11544,11545,11546,11547), +PARTITION p2887 VALUES IN (11548,11549,11550,11551), +PARTITION p2888 VALUES IN (11552,11553,11554,11555), +PARTITION p2889 VALUES IN (11556,11557,11558,11559), +PARTITION p2890 VALUES IN (11560,11561,11562,11563), +PARTITION p2891 VALUES IN (11564,11565,11566,11567), +PARTITION p2892 VALUES IN (11568,11569,11570,11571), +PARTITION p2893 VALUES IN (11572,11573,11574,11575), +PARTITION p2894 VALUES IN (11576,11577,11578,11579), +PARTITION p2895 VALUES IN (11580,11581,11582,11583), +PARTITION p2896 VALUES IN (11584,11585,11586,11587), +PARTITION p2897 VALUES IN (11588,11589,11590,11591), +PARTITION p2898 VALUES IN (11592,11593,11594,11595), +PARTITION p2899 VALUES IN (11596,11597,11598,11599), +PARTITION p2900 VALUES IN (11600,11601,11602,11603), +PARTITION p2901 VALUES IN (11604,11605,11606,11607), +PARTITION p2902 VALUES IN (11608,11609,11610,11611), +PARTITION p2903 VALUES IN (11612,11613,11614,11615), +PARTITION p2904 VALUES IN (11616,11617,11618,11619), +PARTITION p2905 VALUES IN (11620,11621,11622,11623), +PARTITION p2906 VALUES IN (11624,11625,11626,11627), +PARTITION p2907 VALUES IN (11628,11629,11630,11631), +PARTITION p2908 VALUES IN (11632,11633,11634,11635), +PARTITION p2909 VALUES IN (11636,11637,11638,11639), +PARTITION p2910 VALUES IN (11640,11641,11642,11643), +PARTITION p2911 VALUES IN (11644,11645,11646,11647), +PARTITION p2912 VALUES IN (11648,11649,11650,11651), +PARTITION p2913 VALUES IN (11652,11653,11654,11655), +PARTITION p2914 VALUES IN (11656,11657,11658,11659), +PARTITION p2915 VALUES IN (11660,11661,11662,11663), +PARTITION p2916 VALUES IN (11664,11665,11666,11667), +PARTITION p2917 VALUES IN (11668,11669,11670,11671), +PARTITION p2918 VALUES IN (11672,11673,11674,11675), +PARTITION p2919 VALUES IN (11676,11677,11678,11679), +PARTITION p2920 VALUES IN (11680,11681,11682,11683), +PARTITION p2921 VALUES IN (11684,11685,11686,11687), +PARTITION p2922 VALUES IN (11688,11689,11690,11691), +PARTITION p2923 VALUES IN (11692,11693,11694,11695), +PARTITION p2924 VALUES IN (11696,11697,11698,11699), +PARTITION p2925 VALUES IN (11700,11701,11702,11703), +PARTITION p2926 VALUES IN (11704,11705,11706,11707), +PARTITION p2927 VALUES IN (11708,11709,11710,11711), +PARTITION p2928 VALUES IN (11712,11713,11714,11715), +PARTITION p2929 VALUES IN (11716,11717,11718,11719), +PARTITION p2930 VALUES IN (11720,11721,11722,11723), +PARTITION p2931 VALUES IN (11724,11725,11726,11727), +PARTITION p2932 VALUES IN (11728,11729,11730,11731), +PARTITION p2933 VALUES IN (11732,11733,11734,11735), +PARTITION p2934 VALUES IN (11736,11737,11738,11739), +PARTITION p2935 VALUES IN (11740,11741,11742,11743), +PARTITION p2936 VALUES IN (11744,11745,11746,11747), +PARTITION p2937 VALUES IN (11748,11749,11750,11751), +PARTITION p2938 VALUES IN (11752,11753,11754,11755), +PARTITION p2939 VALUES IN (11756,11757,11758,11759), +PARTITION p2940 VALUES IN (11760,11761,11762,11763), +PARTITION p2941 VALUES IN (11764,11765,11766,11767), +PARTITION p2942 VALUES IN (11768,11769,11770,11771), +PARTITION p2943 VALUES IN (11772,11773,11774,11775), +PARTITION p2944 VALUES IN (11776,11777,11778,11779), +PARTITION p2945 VALUES IN (11780,11781,11782,11783), +PARTITION p2946 VALUES IN (11784,11785,11786,11787), +PARTITION p2947 VALUES IN (11788,11789,11790,11791), +PARTITION p2948 VALUES IN (11792,11793,11794,11795), +PARTITION p2949 VALUES IN (11796,11797,11798,11799), +PARTITION p2950 VALUES IN (11800,11801,11802,11803), +PARTITION p2951 VALUES IN (11804,11805,11806,11807), +PARTITION p2952 VALUES IN (11808,11809,11810,11811), +PARTITION p2953 VALUES IN (11812,11813,11814,11815), +PARTITION p2954 VALUES IN (11816,11817,11818,11819), +PARTITION p2955 VALUES IN (11820,11821,11822,11823), +PARTITION p2956 VALUES IN (11824,11825,11826,11827), +PARTITION p2957 VALUES IN (11828,11829,11830,11831), +PARTITION p2958 VALUES IN (11832,11833,11834,11835), +PARTITION p2959 VALUES IN (11836,11837,11838,11839), +PARTITION p2960 VALUES IN (11840,11841,11842,11843), +PARTITION p2961 VALUES IN (11844,11845,11846,11847), +PARTITION p2962 VALUES IN (11848,11849,11850,11851), +PARTITION p2963 VALUES IN (11852,11853,11854,11855), +PARTITION p2964 VALUES IN (11856,11857,11858,11859), +PARTITION p2965 VALUES IN (11860,11861,11862,11863), +PARTITION p2966 VALUES IN (11864,11865,11866,11867), +PARTITION p2967 VALUES IN (11868,11869,11870,11871), +PARTITION p2968 VALUES IN (11872,11873,11874,11875), +PARTITION p2969 VALUES IN (11876,11877,11878,11879), +PARTITION p2970 VALUES IN (11880,11881,11882,11883), +PARTITION p2971 VALUES IN (11884,11885,11886,11887), +PARTITION p2972 VALUES IN (11888,11889,11890,11891), +PARTITION p2973 VALUES IN (11892,11893,11894,11895), +PARTITION p2974 VALUES IN (11896,11897,11898,11899), +PARTITION p2975 VALUES IN (11900,11901,11902,11903), +PARTITION p2976 VALUES IN (11904,11905,11906,11907), +PARTITION p2977 VALUES IN (11908,11909,11910,11911), +PARTITION p2978 VALUES IN (11912,11913,11914,11915), +PARTITION p2979 VALUES IN (11916,11917,11918,11919), +PARTITION p2980 VALUES IN (11920,11921,11922,11923), +PARTITION p2981 VALUES IN (11924,11925,11926,11927), +PARTITION p2982 VALUES IN (11928,11929,11930,11931), +PARTITION p2983 VALUES IN (11932,11933,11934,11935), +PARTITION p2984 VALUES IN (11936,11937,11938,11939), +PARTITION p2985 VALUES IN (11940,11941,11942,11943), +PARTITION p2986 VALUES IN (11944,11945,11946,11947), +PARTITION p2987 VALUES IN (11948,11949,11950,11951), +PARTITION p2988 VALUES IN (11952,11953,11954,11955), +PARTITION p2989 VALUES IN (11956,11957,11958,11959), +PARTITION p2990 VALUES IN (11960,11961,11962,11963), +PARTITION p2991 VALUES IN (11964,11965,11966,11967), +PARTITION p2992 VALUES IN (11968,11969,11970,11971), +PARTITION p2993 VALUES IN (11972,11973,11974,11975), +PARTITION p2994 VALUES IN (11976,11977,11978,11979), +PARTITION p2995 VALUES IN (11980,11981,11982,11983), +PARTITION p2996 VALUES IN (11984,11985,11986,11987), +PARTITION p2997 VALUES IN (11988,11989,11990,11991), +PARTITION p2998 VALUES IN (11992,11993,11994,11995), +PARTITION p2999 VALUES IN (11996,11997,11998,11999), +PARTITION p3000 VALUES IN (12000,12001,12002,12003), +PARTITION p3001 VALUES IN (12004,12005,12006,12007), +PARTITION p3002 VALUES IN (12008,12009,12010,12011), +PARTITION p3003 VALUES IN (12012,12013,12014,12015), +PARTITION p3004 VALUES IN (12016,12017,12018,12019), +PARTITION p3005 VALUES IN (12020,12021,12022,12023), +PARTITION p3006 VALUES IN (12024,12025,12026,12027), +PARTITION p3007 VALUES IN (12028,12029,12030,12031), +PARTITION p3008 VALUES IN (12032,12033,12034,12035), +PARTITION p3009 VALUES IN (12036,12037,12038,12039), +PARTITION p3010 VALUES IN (12040,12041,12042,12043), +PARTITION p3011 VALUES IN (12044,12045,12046,12047), +PARTITION p3012 VALUES IN (12048,12049,12050,12051), +PARTITION p3013 VALUES IN (12052,12053,12054,12055), +PARTITION p3014 VALUES IN (12056,12057,12058,12059), +PARTITION p3015 VALUES IN (12060,12061,12062,12063), +PARTITION p3016 VALUES IN (12064,12065,12066,12067), +PARTITION p3017 VALUES IN (12068,12069,12070,12071), +PARTITION p3018 VALUES IN (12072,12073,12074,12075), +PARTITION p3019 VALUES IN (12076,12077,12078,12079), +PARTITION p3020 VALUES IN (12080,12081,12082,12083), +PARTITION p3021 VALUES IN (12084,12085,12086,12087), +PARTITION p3022 VALUES IN (12088,12089,12090,12091), +PARTITION p3023 VALUES IN (12092,12093,12094,12095), +PARTITION p3024 VALUES IN (12096,12097,12098,12099), +PARTITION p3025 VALUES IN (12100,12101,12102,12103), +PARTITION p3026 VALUES IN (12104,12105,12106,12107), +PARTITION p3027 VALUES IN (12108,12109,12110,12111), +PARTITION p3028 VALUES IN (12112,12113,12114,12115), +PARTITION p3029 VALUES IN (12116,12117,12118,12119), +PARTITION p3030 VALUES IN (12120,12121,12122,12123), +PARTITION p3031 VALUES IN (12124,12125,12126,12127), +PARTITION p3032 VALUES IN (12128,12129,12130,12131), +PARTITION p3033 VALUES IN (12132,12133,12134,12135), +PARTITION p3034 VALUES IN (12136,12137,12138,12139), +PARTITION p3035 VALUES IN (12140,12141,12142,12143), +PARTITION p3036 VALUES IN (12144,12145,12146,12147), +PARTITION p3037 VALUES IN (12148,12149,12150,12151), +PARTITION p3038 VALUES IN (12152,12153,12154,12155), +PARTITION p3039 VALUES IN (12156,12157,12158,12159), +PARTITION p3040 VALUES IN (12160,12161,12162,12163), +PARTITION p3041 VALUES IN (12164,12165,12166,12167), +PARTITION p3042 VALUES IN (12168,12169,12170,12171), +PARTITION p3043 VALUES IN (12172,12173,12174,12175), +PARTITION p3044 VALUES IN (12176,12177,12178,12179), +PARTITION p3045 VALUES IN (12180,12181,12182,12183), +PARTITION p3046 VALUES IN (12184,12185,12186,12187), +PARTITION p3047 VALUES IN (12188,12189,12190,12191), +PARTITION p3048 VALUES IN (12192,12193,12194,12195), +PARTITION p3049 VALUES IN (12196,12197,12198,12199), +PARTITION p3050 VALUES IN (12200,12201,12202,12203), +PARTITION p3051 VALUES IN (12204,12205,12206,12207), +PARTITION p3052 VALUES IN (12208,12209,12210,12211), +PARTITION p3053 VALUES IN (12212,12213,12214,12215), +PARTITION p3054 VALUES IN (12216,12217,12218,12219), +PARTITION p3055 VALUES IN (12220,12221,12222,12223), +PARTITION p3056 VALUES IN (12224,12225,12226,12227), +PARTITION p3057 VALUES IN (12228,12229,12230,12231), +PARTITION p3058 VALUES IN (12232,12233,12234,12235), +PARTITION p3059 VALUES IN (12236,12237,12238,12239), +PARTITION p3060 VALUES IN (12240,12241,12242,12243), +PARTITION p3061 VALUES IN (12244,12245,12246,12247), +PARTITION p3062 VALUES IN (12248,12249,12250,12251), +PARTITION p3063 VALUES IN (12252,12253,12254,12255), +PARTITION p3064 VALUES IN (12256,12257,12258,12259), +PARTITION p3065 VALUES IN (12260,12261,12262,12263), +PARTITION p3066 VALUES IN (12264,12265,12266,12267), +PARTITION p3067 VALUES IN (12268,12269,12270,12271), +PARTITION p3068 VALUES IN (12272,12273,12274,12275), +PARTITION p3069 VALUES IN (12276,12277,12278,12279), +PARTITION p3070 VALUES IN (12280,12281,12282,12283), +PARTITION p3071 VALUES IN (12284,12285,12286,12287), +PARTITION p3072 VALUES IN (12288,12289,12290,12291), +PARTITION p3073 VALUES IN (12292,12293,12294,12295), +PARTITION p3074 VALUES IN (12296,12297,12298,12299), +PARTITION p3075 VALUES IN (12300,12301,12302,12303), +PARTITION p3076 VALUES IN (12304,12305,12306,12307), +PARTITION p3077 VALUES IN (12308,12309,12310,12311), +PARTITION p3078 VALUES IN (12312,12313,12314,12315), +PARTITION p3079 VALUES IN (12316,12317,12318,12319), +PARTITION p3080 VALUES IN (12320,12321,12322,12323), +PARTITION p3081 VALUES IN (12324,12325,12326,12327), +PARTITION p3082 VALUES IN (12328,12329,12330,12331), +PARTITION p3083 VALUES IN (12332,12333,12334,12335), +PARTITION p3084 VALUES IN (12336,12337,12338,12339), +PARTITION p3085 VALUES IN (12340,12341,12342,12343), +PARTITION p3086 VALUES IN (12344,12345,12346,12347), +PARTITION p3087 VALUES IN (12348,12349,12350,12351), +PARTITION p3088 VALUES IN (12352,12353,12354,12355), +PARTITION p3089 VALUES IN (12356,12357,12358,12359), +PARTITION p3090 VALUES IN (12360,12361,12362,12363), +PARTITION p3091 VALUES IN (12364,12365,12366,12367), +PARTITION p3092 VALUES IN (12368,12369,12370,12371), +PARTITION p3093 VALUES IN (12372,12373,12374,12375), +PARTITION p3094 VALUES IN (12376,12377,12378,12379), +PARTITION p3095 VALUES IN (12380,12381,12382,12383), +PARTITION p3096 VALUES IN (12384,12385,12386,12387), +PARTITION p3097 VALUES IN (12388,12389,12390,12391), +PARTITION p3098 VALUES IN (12392,12393,12394,12395), +PARTITION p3099 VALUES IN (12396,12397,12398,12399), +PARTITION p3100 VALUES IN (12400,12401,12402,12403), +PARTITION p3101 VALUES IN (12404,12405,12406,12407), +PARTITION p3102 VALUES IN (12408,12409,12410,12411), +PARTITION p3103 VALUES IN (12412,12413,12414,12415), +PARTITION p3104 VALUES IN (12416,12417,12418,12419), +PARTITION p3105 VALUES IN (12420,12421,12422,12423), +PARTITION p3106 VALUES IN (12424,12425,12426,12427), +PARTITION p3107 VALUES IN (12428,12429,12430,12431), +PARTITION p3108 VALUES IN (12432,12433,12434,12435), +PARTITION p3109 VALUES IN (12436,12437,12438,12439), +PARTITION p3110 VALUES IN (12440,12441,12442,12443), +PARTITION p3111 VALUES IN (12444,12445,12446,12447), +PARTITION p3112 VALUES IN (12448,12449,12450,12451), +PARTITION p3113 VALUES IN (12452,12453,12454,12455), +PARTITION p3114 VALUES IN (12456,12457,12458,12459), +PARTITION p3115 VALUES IN (12460,12461,12462,12463), +PARTITION p3116 VALUES IN (12464,12465,12466,12467), +PARTITION p3117 VALUES IN (12468,12469,12470,12471), +PARTITION p3118 VALUES IN (12472,12473,12474,12475), +PARTITION p3119 VALUES IN (12476,12477,12478,12479), +PARTITION p3120 VALUES IN (12480,12481,12482,12483), +PARTITION p3121 VALUES IN (12484,12485,12486,12487), +PARTITION p3122 VALUES IN (12488,12489,12490,12491), +PARTITION p3123 VALUES IN (12492,12493,12494,12495), +PARTITION p3124 VALUES IN (12496,12497,12498,12499), +PARTITION p3125 VALUES IN (12500,12501,12502,12503), +PARTITION p3126 VALUES IN (12504,12505,12506,12507), +PARTITION p3127 VALUES IN (12508,12509,12510,12511), +PARTITION p3128 VALUES IN (12512,12513,12514,12515), +PARTITION p3129 VALUES IN (12516,12517,12518,12519), +PARTITION p3130 VALUES IN (12520,12521,12522,12523), +PARTITION p3131 VALUES IN (12524,12525,12526,12527), +PARTITION p3132 VALUES IN (12528,12529,12530,12531), +PARTITION p3133 VALUES IN (12532,12533,12534,12535), +PARTITION p3134 VALUES IN (12536,12537,12538,12539), +PARTITION p3135 VALUES IN (12540,12541,12542,12543), +PARTITION p3136 VALUES IN (12544,12545,12546,12547), +PARTITION p3137 VALUES IN (12548,12549,12550,12551), +PARTITION p3138 VALUES IN (12552,12553,12554,12555), +PARTITION p3139 VALUES IN (12556,12557,12558,12559), +PARTITION p3140 VALUES IN (12560,12561,12562,12563), +PARTITION p3141 VALUES IN (12564,12565,12566,12567), +PARTITION p3142 VALUES IN (12568,12569,12570,12571), +PARTITION p3143 VALUES IN (12572,12573,12574,12575), +PARTITION p3144 VALUES IN (12576,12577,12578,12579), +PARTITION p3145 VALUES IN (12580,12581,12582,12583), +PARTITION p3146 VALUES IN (12584,12585,12586,12587), +PARTITION p3147 VALUES IN (12588,12589,12590,12591), +PARTITION p3148 VALUES IN (12592,12593,12594,12595), +PARTITION p3149 VALUES IN (12596,12597,12598,12599), +PARTITION p3150 VALUES IN (12600,12601,12602,12603), +PARTITION p3151 VALUES IN (12604,12605,12606,12607), +PARTITION p3152 VALUES IN (12608,12609,12610,12611), +PARTITION p3153 VALUES IN (12612,12613,12614,12615), +PARTITION p3154 VALUES IN (12616,12617,12618,12619), +PARTITION p3155 VALUES IN (12620,12621,12622,12623), +PARTITION p3156 VALUES IN (12624,12625,12626,12627), +PARTITION p3157 VALUES IN (12628,12629,12630,12631), +PARTITION p3158 VALUES IN (12632,12633,12634,12635), +PARTITION p3159 VALUES IN (12636,12637,12638,12639), +PARTITION p3160 VALUES IN (12640,12641,12642,12643), +PARTITION p3161 VALUES IN (12644,12645,12646,12647), +PARTITION p3162 VALUES IN (12648,12649,12650,12651), +PARTITION p3163 VALUES IN (12652,12653,12654,12655), +PARTITION p3164 VALUES IN (12656,12657,12658,12659), +PARTITION p3165 VALUES IN (12660,12661,12662,12663), +PARTITION p3166 VALUES IN (12664,12665,12666,12667), +PARTITION p3167 VALUES IN (12668,12669,12670,12671), +PARTITION p3168 VALUES IN (12672,12673,12674,12675), +PARTITION p3169 VALUES IN (12676,12677,12678,12679), +PARTITION p3170 VALUES IN (12680,12681,12682,12683), +PARTITION p3171 VALUES IN (12684,12685,12686,12687), +PARTITION p3172 VALUES IN (12688,12689,12690,12691), +PARTITION p3173 VALUES IN (12692,12693,12694,12695), +PARTITION p3174 VALUES IN (12696,12697,12698,12699), +PARTITION p3175 VALUES IN (12700,12701,12702,12703), +PARTITION p3176 VALUES IN (12704,12705,12706,12707), +PARTITION p3177 VALUES IN (12708,12709,12710,12711), +PARTITION p3178 VALUES IN (12712,12713,12714,12715), +PARTITION p3179 VALUES IN (12716,12717,12718,12719), +PARTITION p3180 VALUES IN (12720,12721,12722,12723), +PARTITION p3181 VALUES IN (12724,12725,12726,12727), +PARTITION p3182 VALUES IN (12728,12729,12730,12731), +PARTITION p3183 VALUES IN (12732,12733,12734,12735), +PARTITION p3184 VALUES IN (12736,12737,12738,12739), +PARTITION p3185 VALUES IN (12740,12741,12742,12743), +PARTITION p3186 VALUES IN (12744,12745,12746,12747), +PARTITION p3187 VALUES IN (12748,12749,12750,12751), +PARTITION p3188 VALUES IN (12752,12753,12754,12755), +PARTITION p3189 VALUES IN (12756,12757,12758,12759), +PARTITION p3190 VALUES IN (12760,12761,12762,12763), +PARTITION p3191 VALUES IN (12764,12765,12766,12767), +PARTITION p3192 VALUES IN (12768,12769,12770,12771), +PARTITION p3193 VALUES IN (12772,12773,12774,12775), +PARTITION p3194 VALUES IN (12776,12777,12778,12779), +PARTITION p3195 VALUES IN (12780,12781,12782,12783), +PARTITION p3196 VALUES IN (12784,12785,12786,12787), +PARTITION p3197 VALUES IN (12788,12789,12790,12791), +PARTITION p3198 VALUES IN (12792,12793,12794,12795), +PARTITION p3199 VALUES IN (12796,12797,12798,12799), +PARTITION p3200 VALUES IN (12800,12801,12802,12803), +PARTITION p3201 VALUES IN (12804,12805,12806,12807), +PARTITION p3202 VALUES IN (12808,12809,12810,12811), +PARTITION p3203 VALUES IN (12812,12813,12814,12815), +PARTITION p3204 VALUES IN (12816,12817,12818,12819), +PARTITION p3205 VALUES IN (12820,12821,12822,12823), +PARTITION p3206 VALUES IN (12824,12825,12826,12827), +PARTITION p3207 VALUES IN (12828,12829,12830,12831), +PARTITION p3208 VALUES IN (12832,12833,12834,12835), +PARTITION p3209 VALUES IN (12836,12837,12838,12839), +PARTITION p3210 VALUES IN (12840,12841,12842,12843), +PARTITION p3211 VALUES IN (12844,12845,12846,12847), +PARTITION p3212 VALUES IN (12848,12849,12850,12851), +PARTITION p3213 VALUES IN (12852,12853,12854,12855), +PARTITION p3214 VALUES IN (12856,12857,12858,12859), +PARTITION p3215 VALUES IN (12860,12861,12862,12863), +PARTITION p3216 VALUES IN (12864,12865,12866,12867), +PARTITION p3217 VALUES IN (12868,12869,12870,12871), +PARTITION p3218 VALUES IN (12872,12873,12874,12875), +PARTITION p3219 VALUES IN (12876,12877,12878,12879), +PARTITION p3220 VALUES IN (12880,12881,12882,12883), +PARTITION p3221 VALUES IN (12884,12885,12886,12887), +PARTITION p3222 VALUES IN (12888,12889,12890,12891), +PARTITION p3223 VALUES IN (12892,12893,12894,12895), +PARTITION p3224 VALUES IN (12896,12897,12898,12899), +PARTITION p3225 VALUES IN (12900,12901,12902,12903), +PARTITION p3226 VALUES IN (12904,12905,12906,12907), +PARTITION p3227 VALUES IN (12908,12909,12910,12911), +PARTITION p3228 VALUES IN (12912,12913,12914,12915), +PARTITION p3229 VALUES IN (12916,12917,12918,12919), +PARTITION p3230 VALUES IN (12920,12921,12922,12923), +PARTITION p3231 VALUES IN (12924,12925,12926,12927), +PARTITION p3232 VALUES IN (12928,12929,12930,12931), +PARTITION p3233 VALUES IN (12932,12933,12934,12935), +PARTITION p3234 VALUES IN (12936,12937,12938,12939), +PARTITION p3235 VALUES IN (12940,12941,12942,12943), +PARTITION p3236 VALUES IN (12944,12945,12946,12947), +PARTITION p3237 VALUES IN (12948,12949,12950,12951), +PARTITION p3238 VALUES IN (12952,12953,12954,12955), +PARTITION p3239 VALUES IN (12956,12957,12958,12959), +PARTITION p3240 VALUES IN (12960,12961,12962,12963), +PARTITION p3241 VALUES IN (12964,12965,12966,12967), +PARTITION p3242 VALUES IN (12968,12969,12970,12971), +PARTITION p3243 VALUES IN (12972,12973,12974,12975), +PARTITION p3244 VALUES IN (12976,12977,12978,12979), +PARTITION p3245 VALUES IN (12980,12981,12982,12983), +PARTITION p3246 VALUES IN (12984,12985,12986,12987), +PARTITION p3247 VALUES IN (12988,12989,12990,12991), +PARTITION p3248 VALUES IN (12992,12993,12994,12995), +PARTITION p3249 VALUES IN (12996,12997,12998,12999), +PARTITION p3250 VALUES IN (13000,13001,13002,13003), +PARTITION p3251 VALUES IN (13004,13005,13006,13007), +PARTITION p3252 VALUES IN (13008,13009,13010,13011), +PARTITION p3253 VALUES IN (13012,13013,13014,13015), +PARTITION p3254 VALUES IN (13016,13017,13018,13019), +PARTITION p3255 VALUES IN (13020,13021,13022,13023), +PARTITION p3256 VALUES IN (13024,13025,13026,13027), +PARTITION p3257 VALUES IN (13028,13029,13030,13031), +PARTITION p3258 VALUES IN (13032,13033,13034,13035), +PARTITION p3259 VALUES IN (13036,13037,13038,13039), +PARTITION p3260 VALUES IN (13040,13041,13042,13043), +PARTITION p3261 VALUES IN (13044,13045,13046,13047), +PARTITION p3262 VALUES IN (13048,13049,13050,13051), +PARTITION p3263 VALUES IN (13052,13053,13054,13055), +PARTITION p3264 VALUES IN (13056,13057,13058,13059), +PARTITION p3265 VALUES IN (13060,13061,13062,13063), +PARTITION p3266 VALUES IN (13064,13065,13066,13067), +PARTITION p3267 VALUES IN (13068,13069,13070,13071), +PARTITION p3268 VALUES IN (13072,13073,13074,13075), +PARTITION p3269 VALUES IN (13076,13077,13078,13079), +PARTITION p3270 VALUES IN (13080,13081,13082,13083), +PARTITION p3271 VALUES IN (13084,13085,13086,13087), +PARTITION p3272 VALUES IN (13088,13089,13090,13091), +PARTITION p3273 VALUES IN (13092,13093,13094,13095), +PARTITION p3274 VALUES IN (13096,13097,13098,13099), +PARTITION p3275 VALUES IN (13100,13101,13102,13103), +PARTITION p3276 VALUES IN (13104,13105,13106,13107), +PARTITION p3277 VALUES IN (13108,13109,13110,13111), +PARTITION p3278 VALUES IN (13112,13113,13114,13115), +PARTITION p3279 VALUES IN (13116,13117,13118,13119), +PARTITION p3280 VALUES IN (13120,13121,13122,13123), +PARTITION p3281 VALUES IN (13124,13125,13126,13127), +PARTITION p3282 VALUES IN (13128,13129,13130,13131), +PARTITION p3283 VALUES IN (13132,13133,13134,13135), +PARTITION p3284 VALUES IN (13136,13137,13138,13139), +PARTITION p3285 VALUES IN (13140,13141,13142,13143), +PARTITION p3286 VALUES IN (13144,13145,13146,13147), +PARTITION p3287 VALUES IN (13148,13149,13150,13151), +PARTITION p3288 VALUES IN (13152,13153,13154,13155), +PARTITION p3289 VALUES IN (13156,13157,13158,13159), +PARTITION p3290 VALUES IN (13160,13161,13162,13163), +PARTITION p3291 VALUES IN (13164,13165,13166,13167), +PARTITION p3292 VALUES IN (13168,13169,13170,13171), +PARTITION p3293 VALUES IN (13172,13173,13174,13175), +PARTITION p3294 VALUES IN (13176,13177,13178,13179), +PARTITION p3295 VALUES IN (13180,13181,13182,13183), +PARTITION p3296 VALUES IN (13184,13185,13186,13187), +PARTITION p3297 VALUES IN (13188,13189,13190,13191), +PARTITION p3298 VALUES IN (13192,13193,13194,13195), +PARTITION p3299 VALUES IN (13196,13197,13198,13199), +PARTITION p3300 VALUES IN (13200,13201,13202,13203), +PARTITION p3301 VALUES IN (13204,13205,13206,13207), +PARTITION p3302 VALUES IN (13208,13209,13210,13211), +PARTITION p3303 VALUES IN (13212,13213,13214,13215), +PARTITION p3304 VALUES IN (13216,13217,13218,13219), +PARTITION p3305 VALUES IN (13220,13221,13222,13223), +PARTITION p3306 VALUES IN (13224,13225,13226,13227), +PARTITION p3307 VALUES IN (13228,13229,13230,13231), +PARTITION p3308 VALUES IN (13232,13233,13234,13235), +PARTITION p3309 VALUES IN (13236,13237,13238,13239), +PARTITION p3310 VALUES IN (13240,13241,13242,13243), +PARTITION p3311 VALUES IN (13244,13245,13246,13247), +PARTITION p3312 VALUES IN (13248,13249,13250,13251), +PARTITION p3313 VALUES IN (13252,13253,13254,13255), +PARTITION p3314 VALUES IN (13256,13257,13258,13259), +PARTITION p3315 VALUES IN (13260,13261,13262,13263), +PARTITION p3316 VALUES IN (13264,13265,13266,13267), +PARTITION p3317 VALUES IN (13268,13269,13270,13271), +PARTITION p3318 VALUES IN (13272,13273,13274,13275), +PARTITION p3319 VALUES IN (13276,13277,13278,13279), +PARTITION p3320 VALUES IN (13280,13281,13282,13283), +PARTITION p3321 VALUES IN (13284,13285,13286,13287), +PARTITION p3322 VALUES IN (13288,13289,13290,13291), +PARTITION p3323 VALUES IN (13292,13293,13294,13295), +PARTITION p3324 VALUES IN (13296,13297,13298,13299), +PARTITION p3325 VALUES IN (13300,13301,13302,13303), +PARTITION p3326 VALUES IN (13304,13305,13306,13307), +PARTITION p3327 VALUES IN (13308,13309,13310,13311), +PARTITION p3328 VALUES IN (13312,13313,13314,13315), +PARTITION p3329 VALUES IN (13316,13317,13318,13319), +PARTITION p3330 VALUES IN (13320,13321,13322,13323), +PARTITION p3331 VALUES IN (13324,13325,13326,13327), +PARTITION p3332 VALUES IN (13328,13329,13330,13331), +PARTITION p3333 VALUES IN (13332,13333,13334,13335), +PARTITION p3334 VALUES IN (13336,13337,13338,13339), +PARTITION p3335 VALUES IN (13340,13341,13342,13343), +PARTITION p3336 VALUES IN (13344,13345,13346,13347), +PARTITION p3337 VALUES IN (13348,13349,13350,13351), +PARTITION p3338 VALUES IN (13352,13353,13354,13355), +PARTITION p3339 VALUES IN (13356,13357,13358,13359), +PARTITION p3340 VALUES IN (13360,13361,13362,13363), +PARTITION p3341 VALUES IN (13364,13365,13366,13367), +PARTITION p3342 VALUES IN (13368,13369,13370,13371), +PARTITION p3343 VALUES IN (13372,13373,13374,13375), +PARTITION p3344 VALUES IN (13376,13377,13378,13379), +PARTITION p3345 VALUES IN (13380,13381,13382,13383), +PARTITION p3346 VALUES IN (13384,13385,13386,13387), +PARTITION p3347 VALUES IN (13388,13389,13390,13391), +PARTITION p3348 VALUES IN (13392,13393,13394,13395), +PARTITION p3349 VALUES IN (13396,13397,13398,13399), +PARTITION p3350 VALUES IN (13400,13401,13402,13403), +PARTITION p3351 VALUES IN (13404,13405,13406,13407), +PARTITION p3352 VALUES IN (13408,13409,13410,13411), +PARTITION p3353 VALUES IN (13412,13413,13414,13415), +PARTITION p3354 VALUES IN (13416,13417,13418,13419), +PARTITION p3355 VALUES IN (13420,13421,13422,13423), +PARTITION p3356 VALUES IN (13424,13425,13426,13427), +PARTITION p3357 VALUES IN (13428,13429,13430,13431), +PARTITION p3358 VALUES IN (13432,13433,13434,13435), +PARTITION p3359 VALUES IN (13436,13437,13438,13439), +PARTITION p3360 VALUES IN (13440,13441,13442,13443), +PARTITION p3361 VALUES IN (13444,13445,13446,13447), +PARTITION p3362 VALUES IN (13448,13449,13450,13451), +PARTITION p3363 VALUES IN (13452,13453,13454,13455), +PARTITION p3364 VALUES IN (13456,13457,13458,13459), +PARTITION p3365 VALUES IN (13460,13461,13462,13463), +PARTITION p3366 VALUES IN (13464,13465,13466,13467), +PARTITION p3367 VALUES IN (13468,13469,13470,13471), +PARTITION p3368 VALUES IN (13472,13473,13474,13475), +PARTITION p3369 VALUES IN (13476,13477,13478,13479), +PARTITION p3370 VALUES IN (13480,13481,13482,13483), +PARTITION p3371 VALUES IN (13484,13485,13486,13487), +PARTITION p3372 VALUES IN (13488,13489,13490,13491), +PARTITION p3373 VALUES IN (13492,13493,13494,13495), +PARTITION p3374 VALUES IN (13496,13497,13498,13499), +PARTITION p3375 VALUES IN (13500,13501,13502,13503), +PARTITION p3376 VALUES IN (13504,13505,13506,13507), +PARTITION p3377 VALUES IN (13508,13509,13510,13511), +PARTITION p3378 VALUES IN (13512,13513,13514,13515), +PARTITION p3379 VALUES IN (13516,13517,13518,13519), +PARTITION p3380 VALUES IN (13520,13521,13522,13523), +PARTITION p3381 VALUES IN (13524,13525,13526,13527), +PARTITION p3382 VALUES IN (13528,13529,13530,13531), +PARTITION p3383 VALUES IN (13532,13533,13534,13535), +PARTITION p3384 VALUES IN (13536,13537,13538,13539), +PARTITION p3385 VALUES IN (13540,13541,13542,13543), +PARTITION p3386 VALUES IN (13544,13545,13546,13547), +PARTITION p3387 VALUES IN (13548,13549,13550,13551), +PARTITION p3388 VALUES IN (13552,13553,13554,13555), +PARTITION p3389 VALUES IN (13556,13557,13558,13559), +PARTITION p3390 VALUES IN (13560,13561,13562,13563), +PARTITION p3391 VALUES IN (13564,13565,13566,13567), +PARTITION p3392 VALUES IN (13568,13569,13570,13571), +PARTITION p3393 VALUES IN (13572,13573,13574,13575), +PARTITION p3394 VALUES IN (13576,13577,13578,13579), +PARTITION p3395 VALUES IN (13580,13581,13582,13583), +PARTITION p3396 VALUES IN (13584,13585,13586,13587), +PARTITION p3397 VALUES IN (13588,13589,13590,13591), +PARTITION p3398 VALUES IN (13592,13593,13594,13595), +PARTITION p3399 VALUES IN (13596,13597,13598,13599), +PARTITION p3400 VALUES IN (13600,13601,13602,13603), +PARTITION p3401 VALUES IN (13604,13605,13606,13607), +PARTITION p3402 VALUES IN (13608,13609,13610,13611), +PARTITION p3403 VALUES IN (13612,13613,13614,13615), +PARTITION p3404 VALUES IN (13616,13617,13618,13619), +PARTITION p3405 VALUES IN (13620,13621,13622,13623), +PARTITION p3406 VALUES IN (13624,13625,13626,13627), +PARTITION p3407 VALUES IN (13628,13629,13630,13631), +PARTITION p3408 VALUES IN (13632,13633,13634,13635), +PARTITION p3409 VALUES IN (13636,13637,13638,13639), +PARTITION p3410 VALUES IN (13640,13641,13642,13643), +PARTITION p3411 VALUES IN (13644,13645,13646,13647), +PARTITION p3412 VALUES IN (13648,13649,13650,13651), +PARTITION p3413 VALUES IN (13652,13653,13654,13655), +PARTITION p3414 VALUES IN (13656,13657,13658,13659), +PARTITION p3415 VALUES IN (13660,13661,13662,13663), +PARTITION p3416 VALUES IN (13664,13665,13666,13667), +PARTITION p3417 VALUES IN (13668,13669,13670,13671), +PARTITION p3418 VALUES IN (13672,13673,13674,13675), +PARTITION p3419 VALUES IN (13676,13677,13678,13679), +PARTITION p3420 VALUES IN (13680,13681,13682,13683), +PARTITION p3421 VALUES IN (13684,13685,13686,13687), +PARTITION p3422 VALUES IN (13688,13689,13690,13691), +PARTITION p3423 VALUES IN (13692,13693,13694,13695), +PARTITION p3424 VALUES IN (13696,13697,13698,13699), +PARTITION p3425 VALUES IN (13700,13701,13702,13703), +PARTITION p3426 VALUES IN (13704,13705,13706,13707), +PARTITION p3427 VALUES IN (13708,13709,13710,13711), +PARTITION p3428 VALUES IN (13712,13713,13714,13715), +PARTITION p3429 VALUES IN (13716,13717,13718,13719), +PARTITION p3430 VALUES IN (13720,13721,13722,13723), +PARTITION p3431 VALUES IN (13724,13725,13726,13727), +PARTITION p3432 VALUES IN (13728,13729,13730,13731), +PARTITION p3433 VALUES IN (13732,13733,13734,13735), +PARTITION p3434 VALUES IN (13736,13737,13738,13739), +PARTITION p3435 VALUES IN (13740,13741,13742,13743), +PARTITION p3436 VALUES IN (13744,13745,13746,13747), +PARTITION p3437 VALUES IN (13748,13749,13750,13751), +PARTITION p3438 VALUES IN (13752,13753,13754,13755), +PARTITION p3439 VALUES IN (13756,13757,13758,13759), +PARTITION p3440 VALUES IN (13760,13761,13762,13763), +PARTITION p3441 VALUES IN (13764,13765,13766,13767), +PARTITION p3442 VALUES IN (13768,13769,13770,13771), +PARTITION p3443 VALUES IN (13772,13773,13774,13775), +PARTITION p3444 VALUES IN (13776,13777,13778,13779), +PARTITION p3445 VALUES IN (13780,13781,13782,13783), +PARTITION p3446 VALUES IN (13784,13785,13786,13787), +PARTITION p3447 VALUES IN (13788,13789,13790,13791), +PARTITION p3448 VALUES IN (13792,13793,13794,13795), +PARTITION p3449 VALUES IN (13796,13797,13798,13799), +PARTITION p3450 VALUES IN (13800,13801,13802,13803), +PARTITION p3451 VALUES IN (13804,13805,13806,13807), +PARTITION p3452 VALUES IN (13808,13809,13810,13811), +PARTITION p3453 VALUES IN (13812,13813,13814,13815), +PARTITION p3454 VALUES IN (13816,13817,13818,13819), +PARTITION p3455 VALUES IN (13820,13821,13822,13823), +PARTITION p3456 VALUES IN (13824,13825,13826,13827), +PARTITION p3457 VALUES IN (13828,13829,13830,13831), +PARTITION p3458 VALUES IN (13832,13833,13834,13835), +PARTITION p3459 VALUES IN (13836,13837,13838,13839), +PARTITION p3460 VALUES IN (13840,13841,13842,13843), +PARTITION p3461 VALUES IN (13844,13845,13846,13847), +PARTITION p3462 VALUES IN (13848,13849,13850,13851), +PARTITION p3463 VALUES IN (13852,13853,13854,13855), +PARTITION p3464 VALUES IN (13856,13857,13858,13859), +PARTITION p3465 VALUES IN (13860,13861,13862,13863), +PARTITION p3466 VALUES IN (13864,13865,13866,13867), +PARTITION p3467 VALUES IN (13868,13869,13870,13871), +PARTITION p3468 VALUES IN (13872,13873,13874,13875), +PARTITION p3469 VALUES IN (13876,13877,13878,13879), +PARTITION p3470 VALUES IN (13880,13881,13882,13883), +PARTITION p3471 VALUES IN (13884,13885,13886,13887), +PARTITION p3472 VALUES IN (13888,13889,13890,13891), +PARTITION p3473 VALUES IN (13892,13893,13894,13895), +PARTITION p3474 VALUES IN (13896,13897,13898,13899), +PARTITION p3475 VALUES IN (13900,13901,13902,13903), +PARTITION p3476 VALUES IN (13904,13905,13906,13907), +PARTITION p3477 VALUES IN (13908,13909,13910,13911), +PARTITION p3478 VALUES IN (13912,13913,13914,13915), +PARTITION p3479 VALUES IN (13916,13917,13918,13919), +PARTITION p3480 VALUES IN (13920,13921,13922,13923), +PARTITION p3481 VALUES IN (13924,13925,13926,13927), +PARTITION p3482 VALUES IN (13928,13929,13930,13931), +PARTITION p3483 VALUES IN (13932,13933,13934,13935), +PARTITION p3484 VALUES IN (13936,13937,13938,13939), +PARTITION p3485 VALUES IN (13940,13941,13942,13943), +PARTITION p3486 VALUES IN (13944,13945,13946,13947), +PARTITION p3487 VALUES IN (13948,13949,13950,13951), +PARTITION p3488 VALUES IN (13952,13953,13954,13955), +PARTITION p3489 VALUES IN (13956,13957,13958,13959), +PARTITION p3490 VALUES IN (13960,13961,13962,13963), +PARTITION p3491 VALUES IN (13964,13965,13966,13967), +PARTITION p3492 VALUES IN (13968,13969,13970,13971), +PARTITION p3493 VALUES IN (13972,13973,13974,13975), +PARTITION p3494 VALUES IN (13976,13977,13978,13979), +PARTITION p3495 VALUES IN (13980,13981,13982,13983), +PARTITION p3496 VALUES IN (13984,13985,13986,13987), +PARTITION p3497 VALUES IN (13988,13989,13990,13991), +PARTITION p3498 VALUES IN (13992,13993,13994,13995), +PARTITION p3499 VALUES IN (13996,13997,13998,13999), +PARTITION p3500 VALUES IN (14000,14001,14002,14003), +PARTITION p3501 VALUES IN (14004,14005,14006,14007), +PARTITION p3502 VALUES IN (14008,14009,14010,14011), +PARTITION p3503 VALUES IN (14012,14013,14014,14015), +PARTITION p3504 VALUES IN (14016,14017,14018,14019), +PARTITION p3505 VALUES IN (14020,14021,14022,14023), +PARTITION p3506 VALUES IN (14024,14025,14026,14027), +PARTITION p3507 VALUES IN (14028,14029,14030,14031), +PARTITION p3508 VALUES IN (14032,14033,14034,14035), +PARTITION p3509 VALUES IN (14036,14037,14038,14039), +PARTITION p3510 VALUES IN (14040,14041,14042,14043), +PARTITION p3511 VALUES IN (14044,14045,14046,14047), +PARTITION p3512 VALUES IN (14048,14049,14050,14051), +PARTITION p3513 VALUES IN (14052,14053,14054,14055), +PARTITION p3514 VALUES IN (14056,14057,14058,14059), +PARTITION p3515 VALUES IN (14060,14061,14062,14063), +PARTITION p3516 VALUES IN (14064,14065,14066,14067), +PARTITION p3517 VALUES IN (14068,14069,14070,14071), +PARTITION p3518 VALUES IN (14072,14073,14074,14075), +PARTITION p3519 VALUES IN (14076,14077,14078,14079), +PARTITION p3520 VALUES IN (14080,14081,14082,14083), +PARTITION p3521 VALUES IN (14084,14085,14086,14087), +PARTITION p3522 VALUES IN (14088,14089,14090,14091), +PARTITION p3523 VALUES IN (14092,14093,14094,14095), +PARTITION p3524 VALUES IN (14096,14097,14098,14099), +PARTITION p3525 VALUES IN (14100,14101,14102,14103), +PARTITION p3526 VALUES IN (14104,14105,14106,14107), +PARTITION p3527 VALUES IN (14108,14109,14110,14111), +PARTITION p3528 VALUES IN (14112,14113,14114,14115), +PARTITION p3529 VALUES IN (14116,14117,14118,14119), +PARTITION p3530 VALUES IN (14120,14121,14122,14123), +PARTITION p3531 VALUES IN (14124,14125,14126,14127), +PARTITION p3532 VALUES IN (14128,14129,14130,14131), +PARTITION p3533 VALUES IN (14132,14133,14134,14135), +PARTITION p3534 VALUES IN (14136,14137,14138,14139), +PARTITION p3535 VALUES IN (14140,14141,14142,14143), +PARTITION p3536 VALUES IN (14144,14145,14146,14147), +PARTITION p3537 VALUES IN (14148,14149,14150,14151), +PARTITION p3538 VALUES IN (14152,14153,14154,14155), +PARTITION p3539 VALUES IN (14156,14157,14158,14159), +PARTITION p3540 VALUES IN (14160,14161,14162,14163), +PARTITION p3541 VALUES IN (14164,14165,14166,14167), +PARTITION p3542 VALUES IN (14168,14169,14170,14171), +PARTITION p3543 VALUES IN (14172,14173,14174,14175), +PARTITION p3544 VALUES IN (14176,14177,14178,14179), +PARTITION p3545 VALUES IN (14180,14181,14182,14183), +PARTITION p3546 VALUES IN (14184,14185,14186,14187), +PARTITION p3547 VALUES IN (14188,14189,14190,14191), +PARTITION p3548 VALUES IN (14192,14193,14194,14195), +PARTITION p3549 VALUES IN (14196,14197,14198,14199), +PARTITION p3550 VALUES IN (14200,14201,14202,14203), +PARTITION p3551 VALUES IN (14204,14205,14206,14207), +PARTITION p3552 VALUES IN (14208,14209,14210,14211), +PARTITION p3553 VALUES IN (14212,14213,14214,14215), +PARTITION p3554 VALUES IN (14216,14217,14218,14219), +PARTITION p3555 VALUES IN (14220,14221,14222,14223), +PARTITION p3556 VALUES IN (14224,14225,14226,14227), +PARTITION p3557 VALUES IN (14228,14229,14230,14231), +PARTITION p3558 VALUES IN (14232,14233,14234,14235), +PARTITION p3559 VALUES IN (14236,14237,14238,14239), +PARTITION p3560 VALUES IN (14240,14241,14242,14243), +PARTITION p3561 VALUES IN (14244,14245,14246,14247), +PARTITION p3562 VALUES IN (14248,14249,14250,14251), +PARTITION p3563 VALUES IN (14252,14253,14254,14255), +PARTITION p3564 VALUES IN (14256,14257,14258,14259), +PARTITION p3565 VALUES IN (14260,14261,14262,14263), +PARTITION p3566 VALUES IN (14264,14265,14266,14267), +PARTITION p3567 VALUES IN (14268,14269,14270,14271), +PARTITION p3568 VALUES IN (14272,14273,14274,14275), +PARTITION p3569 VALUES IN (14276,14277,14278,14279), +PARTITION p3570 VALUES IN (14280,14281,14282,14283), +PARTITION p3571 VALUES IN (14284,14285,14286,14287), +PARTITION p3572 VALUES IN (14288,14289,14290,14291), +PARTITION p3573 VALUES IN (14292,14293,14294,14295), +PARTITION p3574 VALUES IN (14296,14297,14298,14299), +PARTITION p3575 VALUES IN (14300,14301,14302,14303), +PARTITION p3576 VALUES IN (14304,14305,14306,14307), +PARTITION p3577 VALUES IN (14308,14309,14310,14311), +PARTITION p3578 VALUES IN (14312,14313,14314,14315), +PARTITION p3579 VALUES IN (14316,14317,14318,14319), +PARTITION p3580 VALUES IN (14320,14321,14322,14323), +PARTITION p3581 VALUES IN (14324,14325,14326,14327), +PARTITION p3582 VALUES IN (14328,14329,14330,14331), +PARTITION p3583 VALUES IN (14332,14333,14334,14335), +PARTITION p3584 VALUES IN (14336,14337,14338,14339), +PARTITION p3585 VALUES IN (14340,14341,14342,14343), +PARTITION p3586 VALUES IN (14344,14345,14346,14347), +PARTITION p3587 VALUES IN (14348,14349,14350,14351), +PARTITION p3588 VALUES IN (14352,14353,14354,14355), +PARTITION p3589 VALUES IN (14356,14357,14358,14359), +PARTITION p3590 VALUES IN (14360,14361,14362,14363), +PARTITION p3591 VALUES IN (14364,14365,14366,14367), +PARTITION p3592 VALUES IN (14368,14369,14370,14371), +PARTITION p3593 VALUES IN (14372,14373,14374,14375), +PARTITION p3594 VALUES IN (14376,14377,14378,14379), +PARTITION p3595 VALUES IN (14380,14381,14382,14383), +PARTITION p3596 VALUES IN (14384,14385,14386,14387), +PARTITION p3597 VALUES IN (14388,14389,14390,14391), +PARTITION p3598 VALUES IN (14392,14393,14394,14395), +PARTITION p3599 VALUES IN (14396,14397,14398,14399), +PARTITION p3600 VALUES IN (14400,14401,14402,14403), +PARTITION p3601 VALUES IN (14404,14405,14406,14407), +PARTITION p3602 VALUES IN (14408,14409,14410,14411), +PARTITION p3603 VALUES IN (14412,14413,14414,14415), +PARTITION p3604 VALUES IN (14416,14417,14418,14419), +PARTITION p3605 VALUES IN (14420,14421,14422,14423), +PARTITION p3606 VALUES IN (14424,14425,14426,14427), +PARTITION p3607 VALUES IN (14428,14429,14430,14431), +PARTITION p3608 VALUES IN (14432,14433,14434,14435), +PARTITION p3609 VALUES IN (14436,14437,14438,14439), +PARTITION p3610 VALUES IN (14440,14441,14442,14443), +PARTITION p3611 VALUES IN (14444,14445,14446,14447), +PARTITION p3612 VALUES IN (14448,14449,14450,14451), +PARTITION p3613 VALUES IN (14452,14453,14454,14455), +PARTITION p3614 VALUES IN (14456,14457,14458,14459), +PARTITION p3615 VALUES IN (14460,14461,14462,14463), +PARTITION p3616 VALUES IN (14464,14465,14466,14467), +PARTITION p3617 VALUES IN (14468,14469,14470,14471), +PARTITION p3618 VALUES IN (14472,14473,14474,14475), +PARTITION p3619 VALUES IN (14476,14477,14478,14479), +PARTITION p3620 VALUES IN (14480,14481,14482,14483), +PARTITION p3621 VALUES IN (14484,14485,14486,14487), +PARTITION p3622 VALUES IN (14488,14489,14490,14491), +PARTITION p3623 VALUES IN (14492,14493,14494,14495), +PARTITION p3624 VALUES IN (14496,14497,14498,14499), +PARTITION p3625 VALUES IN (14500,14501,14502,14503), +PARTITION p3626 VALUES IN (14504,14505,14506,14507), +PARTITION p3627 VALUES IN (14508,14509,14510,14511), +PARTITION p3628 VALUES IN (14512,14513,14514,14515), +PARTITION p3629 VALUES IN (14516,14517,14518,14519), +PARTITION p3630 VALUES IN (14520,14521,14522,14523), +PARTITION p3631 VALUES IN (14524,14525,14526,14527), +PARTITION p3632 VALUES IN (14528,14529,14530,14531), +PARTITION p3633 VALUES IN (14532,14533,14534,14535), +PARTITION p3634 VALUES IN (14536,14537,14538,14539), +PARTITION p3635 VALUES IN (14540,14541,14542,14543), +PARTITION p3636 VALUES IN (14544,14545,14546,14547), +PARTITION p3637 VALUES IN (14548,14549,14550,14551), +PARTITION p3638 VALUES IN (14552,14553,14554,14555), +PARTITION p3639 VALUES IN (14556,14557,14558,14559), +PARTITION p3640 VALUES IN (14560,14561,14562,14563), +PARTITION p3641 VALUES IN (14564,14565,14566,14567), +PARTITION p3642 VALUES IN (14568,14569,14570,14571), +PARTITION p3643 VALUES IN (14572,14573,14574,14575), +PARTITION p3644 VALUES IN (14576,14577,14578,14579), +PARTITION p3645 VALUES IN (14580,14581,14582,14583), +PARTITION p3646 VALUES IN (14584,14585,14586,14587), +PARTITION p3647 VALUES IN (14588,14589,14590,14591), +PARTITION p3648 VALUES IN (14592,14593,14594,14595), +PARTITION p3649 VALUES IN (14596,14597,14598,14599), +PARTITION p3650 VALUES IN (14600,14601,14602,14603), +PARTITION p3651 VALUES IN (14604,14605,14606,14607), +PARTITION p3652 VALUES IN (14608,14609,14610,14611), +PARTITION p3653 VALUES IN (14612,14613,14614,14615), +PARTITION p3654 VALUES IN (14616,14617,14618,14619), +PARTITION p3655 VALUES IN (14620,14621,14622,14623), +PARTITION p3656 VALUES IN (14624,14625,14626,14627), +PARTITION p3657 VALUES IN (14628,14629,14630,14631), +PARTITION p3658 VALUES IN (14632,14633,14634,14635), +PARTITION p3659 VALUES IN (14636,14637,14638,14639), +PARTITION p3660 VALUES IN (14640,14641,14642,14643), +PARTITION p3661 VALUES IN (14644,14645,14646,14647), +PARTITION p3662 VALUES IN (14648,14649,14650,14651), +PARTITION p3663 VALUES IN (14652,14653,14654,14655), +PARTITION p3664 VALUES IN (14656,14657,14658,14659), +PARTITION p3665 VALUES IN (14660,14661,14662,14663), +PARTITION p3666 VALUES IN (14664,14665,14666,14667), +PARTITION p3667 VALUES IN (14668,14669,14670,14671), +PARTITION p3668 VALUES IN (14672,14673,14674,14675), +PARTITION p3669 VALUES IN (14676,14677,14678,14679), +PARTITION p3670 VALUES IN (14680,14681,14682,14683), +PARTITION p3671 VALUES IN (14684,14685,14686,14687), +PARTITION p3672 VALUES IN (14688,14689,14690,14691), +PARTITION p3673 VALUES IN (14692,14693,14694,14695), +PARTITION p3674 VALUES IN (14696,14697,14698,14699), +PARTITION p3675 VALUES IN (14700,14701,14702,14703), +PARTITION p3676 VALUES IN (14704,14705,14706,14707), +PARTITION p3677 VALUES IN (14708,14709,14710,14711), +PARTITION p3678 VALUES IN (14712,14713,14714,14715), +PARTITION p3679 VALUES IN (14716,14717,14718,14719), +PARTITION p3680 VALUES IN (14720,14721,14722,14723), +PARTITION p3681 VALUES IN (14724,14725,14726,14727), +PARTITION p3682 VALUES IN (14728,14729,14730,14731), +PARTITION p3683 VALUES IN (14732,14733,14734,14735), +PARTITION p3684 VALUES IN (14736,14737,14738,14739), +PARTITION p3685 VALUES IN (14740,14741,14742,14743), +PARTITION p3686 VALUES IN (14744,14745,14746,14747), +PARTITION p3687 VALUES IN (14748,14749,14750,14751), +PARTITION p3688 VALUES IN (14752,14753,14754,14755), +PARTITION p3689 VALUES IN (14756,14757,14758,14759), +PARTITION p3690 VALUES IN (14760,14761,14762,14763), +PARTITION p3691 VALUES IN (14764,14765,14766,14767), +PARTITION p3692 VALUES IN (14768,14769,14770,14771), +PARTITION p3693 VALUES IN (14772,14773,14774,14775), +PARTITION p3694 VALUES IN (14776,14777,14778,14779), +PARTITION p3695 VALUES IN (14780,14781,14782,14783), +PARTITION p3696 VALUES IN (14784,14785,14786,14787), +PARTITION p3697 VALUES IN (14788,14789,14790,14791), +PARTITION p3698 VALUES IN (14792,14793,14794,14795), +PARTITION p3699 VALUES IN (14796,14797,14798,14799), +PARTITION p3700 VALUES IN (14800,14801,14802,14803), +PARTITION p3701 VALUES IN (14804,14805,14806,14807), +PARTITION p3702 VALUES IN (14808,14809,14810,14811), +PARTITION p3703 VALUES IN (14812,14813,14814,14815), +PARTITION p3704 VALUES IN (14816,14817,14818,14819), +PARTITION p3705 VALUES IN (14820,14821,14822,14823), +PARTITION p3706 VALUES IN (14824,14825,14826,14827), +PARTITION p3707 VALUES IN (14828,14829,14830,14831), +PARTITION p3708 VALUES IN (14832,14833,14834,14835), +PARTITION p3709 VALUES IN (14836,14837,14838,14839), +PARTITION p3710 VALUES IN (14840,14841,14842,14843), +PARTITION p3711 VALUES IN (14844,14845,14846,14847), +PARTITION p3712 VALUES IN (14848,14849,14850,14851), +PARTITION p3713 VALUES IN (14852,14853,14854,14855), +PARTITION p3714 VALUES IN (14856,14857,14858,14859), +PARTITION p3715 VALUES IN (14860,14861,14862,14863), +PARTITION p3716 VALUES IN (14864,14865,14866,14867), +PARTITION p3717 VALUES IN (14868,14869,14870,14871), +PARTITION p3718 VALUES IN (14872,14873,14874,14875), +PARTITION p3719 VALUES IN (14876,14877,14878,14879), +PARTITION p3720 VALUES IN (14880,14881,14882,14883), +PARTITION p3721 VALUES IN (14884,14885,14886,14887), +PARTITION p3722 VALUES IN (14888,14889,14890,14891), +PARTITION p3723 VALUES IN (14892,14893,14894,14895), +PARTITION p3724 VALUES IN (14896,14897,14898,14899), +PARTITION p3725 VALUES IN (14900,14901,14902,14903), +PARTITION p3726 VALUES IN (14904,14905,14906,14907), +PARTITION p3727 VALUES IN (14908,14909,14910,14911), +PARTITION p3728 VALUES IN (14912,14913,14914,14915), +PARTITION p3729 VALUES IN (14916,14917,14918,14919), +PARTITION p3730 VALUES IN (14920,14921,14922,14923), +PARTITION p3731 VALUES IN (14924,14925,14926,14927), +PARTITION p3732 VALUES IN (14928,14929,14930,14931), +PARTITION p3733 VALUES IN (14932,14933,14934,14935), +PARTITION p3734 VALUES IN (14936,14937,14938,14939), +PARTITION p3735 VALUES IN (14940,14941,14942,14943), +PARTITION p3736 VALUES IN (14944,14945,14946,14947), +PARTITION p3737 VALUES IN (14948,14949,14950,14951), +PARTITION p3738 VALUES IN (14952,14953,14954,14955), +PARTITION p3739 VALUES IN (14956,14957,14958,14959), +PARTITION p3740 VALUES IN (14960,14961,14962,14963), +PARTITION p3741 VALUES IN (14964,14965,14966,14967), +PARTITION p3742 VALUES IN (14968,14969,14970,14971), +PARTITION p3743 VALUES IN (14972,14973,14974,14975), +PARTITION p3744 VALUES IN (14976,14977,14978,14979), +PARTITION p3745 VALUES IN (14980,14981,14982,14983), +PARTITION p3746 VALUES IN (14984,14985,14986,14987), +PARTITION p3747 VALUES IN (14988,14989,14990,14991), +PARTITION p3748 VALUES IN (14992,14993,14994,14995), +PARTITION p3749 VALUES IN (14996,14997,14998,14999), +PARTITION p3750 VALUES IN (15000,15001,15002,15003), +PARTITION p3751 VALUES IN (15004,15005,15006,15007), +PARTITION p3752 VALUES IN (15008,15009,15010,15011), +PARTITION p3753 VALUES IN (15012,15013,15014,15015), +PARTITION p3754 VALUES IN (15016,15017,15018,15019), +PARTITION p3755 VALUES IN (15020,15021,15022,15023), +PARTITION p3756 VALUES IN (15024,15025,15026,15027), +PARTITION p3757 VALUES IN (15028,15029,15030,15031), +PARTITION p3758 VALUES IN (15032,15033,15034,15035), +PARTITION p3759 VALUES IN (15036,15037,15038,15039), +PARTITION p3760 VALUES IN (15040,15041,15042,15043), +PARTITION p3761 VALUES IN (15044,15045,15046,15047), +PARTITION p3762 VALUES IN (15048,15049,15050,15051), +PARTITION p3763 VALUES IN (15052,15053,15054,15055), +PARTITION p3764 VALUES IN (15056,15057,15058,15059), +PARTITION p3765 VALUES IN (15060,15061,15062,15063), +PARTITION p3766 VALUES IN (15064,15065,15066,15067), +PARTITION p3767 VALUES IN (15068,15069,15070,15071), +PARTITION p3768 VALUES IN (15072,15073,15074,15075), +PARTITION p3769 VALUES IN (15076,15077,15078,15079), +PARTITION p3770 VALUES IN (15080,15081,15082,15083), +PARTITION p3771 VALUES IN (15084,15085,15086,15087), +PARTITION p3772 VALUES IN (15088,15089,15090,15091), +PARTITION p3773 VALUES IN (15092,15093,15094,15095), +PARTITION p3774 VALUES IN (15096,15097,15098,15099), +PARTITION p3775 VALUES IN (15100,15101,15102,15103), +PARTITION p3776 VALUES IN (15104,15105,15106,15107), +PARTITION p3777 VALUES IN (15108,15109,15110,15111), +PARTITION p3778 VALUES IN (15112,15113,15114,15115), +PARTITION p3779 VALUES IN (15116,15117,15118,15119), +PARTITION p3780 VALUES IN (15120,15121,15122,15123), +PARTITION p3781 VALUES IN (15124,15125,15126,15127), +PARTITION p3782 VALUES IN (15128,15129,15130,15131), +PARTITION p3783 VALUES IN (15132,15133,15134,15135), +PARTITION p3784 VALUES IN (15136,15137,15138,15139), +PARTITION p3785 VALUES IN (15140,15141,15142,15143), +PARTITION p3786 VALUES IN (15144,15145,15146,15147), +PARTITION p3787 VALUES IN (15148,15149,15150,15151), +PARTITION p3788 VALUES IN (15152,15153,15154,15155), +PARTITION p3789 VALUES IN (15156,15157,15158,15159), +PARTITION p3790 VALUES IN (15160,15161,15162,15163), +PARTITION p3791 VALUES IN (15164,15165,15166,15167), +PARTITION p3792 VALUES IN (15168,15169,15170,15171), +PARTITION p3793 VALUES IN (15172,15173,15174,15175), +PARTITION p3794 VALUES IN (15176,15177,15178,15179), +PARTITION p3795 VALUES IN (15180,15181,15182,15183), +PARTITION p3796 VALUES IN (15184,15185,15186,15187), +PARTITION p3797 VALUES IN (15188,15189,15190,15191), +PARTITION p3798 VALUES IN (15192,15193,15194,15195), +PARTITION p3799 VALUES IN (15196,15197,15198,15199), +PARTITION p3800 VALUES IN (15200,15201,15202,15203), +PARTITION p3801 VALUES IN (15204,15205,15206,15207), +PARTITION p3802 VALUES IN (15208,15209,15210,15211), +PARTITION p3803 VALUES IN (15212,15213,15214,15215), +PARTITION p3804 VALUES IN (15216,15217,15218,15219), +PARTITION p3805 VALUES IN (15220,15221,15222,15223), +PARTITION p3806 VALUES IN (15224,15225,15226,15227), +PARTITION p3807 VALUES IN (15228,15229,15230,15231), +PARTITION p3808 VALUES IN (15232,15233,15234,15235), +PARTITION p3809 VALUES IN (15236,15237,15238,15239), +PARTITION p3810 VALUES IN (15240,15241,15242,15243), +PARTITION p3811 VALUES IN (15244,15245,15246,15247), +PARTITION p3812 VALUES IN (15248,15249,15250,15251), +PARTITION p3813 VALUES IN (15252,15253,15254,15255), +PARTITION p3814 VALUES IN (15256,15257,15258,15259), +PARTITION p3815 VALUES IN (15260,15261,15262,15263), +PARTITION p3816 VALUES IN (15264,15265,15266,15267), +PARTITION p3817 VALUES IN (15268,15269,15270,15271), +PARTITION p3818 VALUES IN (15272,15273,15274,15275), +PARTITION p3819 VALUES IN (15276,15277,15278,15279), +PARTITION p3820 VALUES IN (15280,15281,15282,15283), +PARTITION p3821 VALUES IN (15284,15285,15286,15287), +PARTITION p3822 VALUES IN (15288,15289,15290,15291), +PARTITION p3823 VALUES IN (15292,15293,15294,15295), +PARTITION p3824 VALUES IN (15296,15297,15298,15299), +PARTITION p3825 VALUES IN (15300,15301,15302,15303), +PARTITION p3826 VALUES IN (15304,15305,15306,15307), +PARTITION p3827 VALUES IN (15308,15309,15310,15311), +PARTITION p3828 VALUES IN (15312,15313,15314,15315), +PARTITION p3829 VALUES IN (15316,15317,15318,15319), +PARTITION p3830 VALUES IN (15320,15321,15322,15323), +PARTITION p3831 VALUES IN (15324,15325,15326,15327), +PARTITION p3832 VALUES IN (15328,15329,15330,15331), +PARTITION p3833 VALUES IN (15332,15333,15334,15335), +PARTITION p3834 VALUES IN (15336,15337,15338,15339), +PARTITION p3835 VALUES IN (15340,15341,15342,15343), +PARTITION p3836 VALUES IN (15344,15345,15346,15347), +PARTITION p3837 VALUES IN (15348,15349,15350,15351), +PARTITION p3838 VALUES IN (15352,15353,15354,15355), +PARTITION p3839 VALUES IN (15356,15357,15358,15359), +PARTITION p3840 VALUES IN (15360,15361,15362,15363), +PARTITION p3841 VALUES IN (15364,15365,15366,15367), +PARTITION p3842 VALUES IN (15368,15369,15370,15371), +PARTITION p3843 VALUES IN (15372,15373,15374,15375), +PARTITION p3844 VALUES IN (15376,15377,15378,15379), +PARTITION p3845 VALUES IN (15380,15381,15382,15383), +PARTITION p3846 VALUES IN (15384,15385,15386,15387), +PARTITION p3847 VALUES IN (15388,15389,15390,15391), +PARTITION p3848 VALUES IN (15392,15393,15394,15395), +PARTITION p3849 VALUES IN (15396,15397,15398,15399), +PARTITION p3850 VALUES IN (15400,15401,15402,15403), +PARTITION p3851 VALUES IN (15404,15405,15406,15407), +PARTITION p3852 VALUES IN (15408,15409,15410,15411), +PARTITION p3853 VALUES IN (15412,15413,15414,15415), +PARTITION p3854 VALUES IN (15416,15417,15418,15419), +PARTITION p3855 VALUES IN (15420,15421,15422,15423), +PARTITION p3856 VALUES IN (15424,15425,15426,15427), +PARTITION p3857 VALUES IN (15428,15429,15430,15431), +PARTITION p3858 VALUES IN (15432,15433,15434,15435), +PARTITION p3859 VALUES IN (15436,15437,15438,15439), +PARTITION p3860 VALUES IN (15440,15441,15442,15443), +PARTITION p3861 VALUES IN (15444,15445,15446,15447), +PARTITION p3862 VALUES IN (15448,15449,15450,15451), +PARTITION p3863 VALUES IN (15452,15453,15454,15455), +PARTITION p3864 VALUES IN (15456,15457,15458,15459), +PARTITION p3865 VALUES IN (15460,15461,15462,15463), +PARTITION p3866 VALUES IN (15464,15465,15466,15467), +PARTITION p3867 VALUES IN (15468,15469,15470,15471), +PARTITION p3868 VALUES IN (15472,15473,15474,15475), +PARTITION p3869 VALUES IN (15476,15477,15478,15479), +PARTITION p3870 VALUES IN (15480,15481,15482,15483), +PARTITION p3871 VALUES IN (15484,15485,15486,15487), +PARTITION p3872 VALUES IN (15488,15489,15490,15491), +PARTITION p3873 VALUES IN (15492,15493,15494,15495), +PARTITION p3874 VALUES IN (15496,15497,15498,15499), +PARTITION p3875 VALUES IN (15500,15501,15502,15503), +PARTITION p3876 VALUES IN (15504,15505,15506,15507), +PARTITION p3877 VALUES IN (15508,15509,15510,15511), +PARTITION p3878 VALUES IN (15512,15513,15514,15515), +PARTITION p3879 VALUES IN (15516,15517,15518,15519), +PARTITION p3880 VALUES IN (15520,15521,15522,15523), +PARTITION p3881 VALUES IN (15524,15525,15526,15527), +PARTITION p3882 VALUES IN (15528,15529,15530,15531), +PARTITION p3883 VALUES IN (15532,15533,15534,15535), +PARTITION p3884 VALUES IN (15536,15537,15538,15539), +PARTITION p3885 VALUES IN (15540,15541,15542,15543), +PARTITION p3886 VALUES IN (15544,15545,15546,15547), +PARTITION p3887 VALUES IN (15548,15549,15550,15551), +PARTITION p3888 VALUES IN (15552,15553,15554,15555), +PARTITION p3889 VALUES IN (15556,15557,15558,15559), +PARTITION p3890 VALUES IN (15560,15561,15562,15563), +PARTITION p3891 VALUES IN (15564,15565,15566,15567), +PARTITION p3892 VALUES IN (15568,15569,15570,15571), +PARTITION p3893 VALUES IN (15572,15573,15574,15575), +PARTITION p3894 VALUES IN (15576,15577,15578,15579), +PARTITION p3895 VALUES IN (15580,15581,15582,15583), +PARTITION p3896 VALUES IN (15584,15585,15586,15587), +PARTITION p3897 VALUES IN (15588,15589,15590,15591), +PARTITION p3898 VALUES IN (15592,15593,15594,15595), +PARTITION p3899 VALUES IN (15596,15597,15598,15599), +PARTITION p3900 VALUES IN (15600,15601,15602,15603), +PARTITION p3901 VALUES IN (15604,15605,15606,15607), +PARTITION p3902 VALUES IN (15608,15609,15610,15611), +PARTITION p3903 VALUES IN (15612,15613,15614,15615), +PARTITION p3904 VALUES IN (15616,15617,15618,15619), +PARTITION p3905 VALUES IN (15620,15621,15622,15623), +PARTITION p3906 VALUES IN (15624,15625,15626,15627), +PARTITION p3907 VALUES IN (15628,15629,15630,15631), +PARTITION p3908 VALUES IN (15632,15633,15634,15635), +PARTITION p3909 VALUES IN (15636,15637,15638,15639), +PARTITION p3910 VALUES IN (15640,15641,15642,15643), +PARTITION p3911 VALUES IN (15644,15645,15646,15647), +PARTITION p3912 VALUES IN (15648,15649,15650,15651), +PARTITION p3913 VALUES IN (15652,15653,15654,15655), +PARTITION p3914 VALUES IN (15656,15657,15658,15659), +PARTITION p3915 VALUES IN (15660,15661,15662,15663), +PARTITION p3916 VALUES IN (15664,15665,15666,15667), +PARTITION p3917 VALUES IN (15668,15669,15670,15671), +PARTITION p3918 VALUES IN (15672,15673,15674,15675), +PARTITION p3919 VALUES IN (15676,15677,15678,15679), +PARTITION p3920 VALUES IN (15680,15681,15682,15683), +PARTITION p3921 VALUES IN (15684,15685,15686,15687), +PARTITION p3922 VALUES IN (15688,15689,15690,15691), +PARTITION p3923 VALUES IN (15692,15693,15694,15695), +PARTITION p3924 VALUES IN (15696,15697,15698,15699), +PARTITION p3925 VALUES IN (15700,15701,15702,15703), +PARTITION p3926 VALUES IN (15704,15705,15706,15707), +PARTITION p3927 VALUES IN (15708,15709,15710,15711), +PARTITION p3928 VALUES IN (15712,15713,15714,15715), +PARTITION p3929 VALUES IN (15716,15717,15718,15719), +PARTITION p3930 VALUES IN (15720,15721,15722,15723), +PARTITION p3931 VALUES IN (15724,15725,15726,15727), +PARTITION p3932 VALUES IN (15728,15729,15730,15731), +PARTITION p3933 VALUES IN (15732,15733,15734,15735), +PARTITION p3934 VALUES IN (15736,15737,15738,15739), +PARTITION p3935 VALUES IN (15740,15741,15742,15743), +PARTITION p3936 VALUES IN (15744,15745,15746,15747), +PARTITION p3937 VALUES IN (15748,15749,15750,15751), +PARTITION p3938 VALUES IN (15752,15753,15754,15755), +PARTITION p3939 VALUES IN (15756,15757,15758,15759), +PARTITION p3940 VALUES IN (15760,15761,15762,15763), +PARTITION p3941 VALUES IN (15764,15765,15766,15767), +PARTITION p3942 VALUES IN (15768,15769,15770,15771), +PARTITION p3943 VALUES IN (15772,15773,15774,15775), +PARTITION p3944 VALUES IN (15776,15777,15778,15779), +PARTITION p3945 VALUES IN (15780,15781,15782,15783), +PARTITION p3946 VALUES IN (15784,15785,15786,15787), +PARTITION p3947 VALUES IN (15788,15789,15790,15791), +PARTITION p3948 VALUES IN (15792,15793,15794,15795), +PARTITION p3949 VALUES IN (15796,15797,15798,15799), +PARTITION p3950 VALUES IN (15800,15801,15802,15803), +PARTITION p3951 VALUES IN (15804,15805,15806,15807), +PARTITION p3952 VALUES IN (15808,15809,15810,15811), +PARTITION p3953 VALUES IN (15812,15813,15814,15815), +PARTITION p3954 VALUES IN (15816,15817,15818,15819), +PARTITION p3955 VALUES IN (15820,15821,15822,15823), +PARTITION p3956 VALUES IN (15824,15825,15826,15827), +PARTITION p3957 VALUES IN (15828,15829,15830,15831), +PARTITION p3958 VALUES IN (15832,15833,15834,15835), +PARTITION p3959 VALUES IN (15836,15837,15838,15839), +PARTITION p3960 VALUES IN (15840,15841,15842,15843), +PARTITION p3961 VALUES IN (15844,15845,15846,15847), +PARTITION p3962 VALUES IN (15848,15849,15850,15851), +PARTITION p3963 VALUES IN (15852,15853,15854,15855), +PARTITION p3964 VALUES IN (15856,15857,15858,15859), +PARTITION p3965 VALUES IN (15860,15861,15862,15863), +PARTITION p3966 VALUES IN (15864,15865,15866,15867), +PARTITION p3967 VALUES IN (15868,15869,15870,15871), +PARTITION p3968 VALUES IN (15872,15873,15874,15875), +PARTITION p3969 VALUES IN (15876,15877,15878,15879), +PARTITION p3970 VALUES IN (15880,15881,15882,15883), +PARTITION p3971 VALUES IN (15884,15885,15886,15887), +PARTITION p3972 VALUES IN (15888,15889,15890,15891), +PARTITION p3973 VALUES IN (15892,15893,15894,15895), +PARTITION p3974 VALUES IN (15896,15897,15898,15899), +PARTITION p3975 VALUES IN (15900,15901,15902,15903), +PARTITION p3976 VALUES IN (15904,15905,15906,15907), +PARTITION p3977 VALUES IN (15908,15909,15910,15911), +PARTITION p3978 VALUES IN (15912,15913,15914,15915), +PARTITION p3979 VALUES IN (15916,15917,15918,15919), +PARTITION p3980 VALUES IN (15920,15921,15922,15923), +PARTITION p3981 VALUES IN (15924,15925,15926,15927), +PARTITION p3982 VALUES IN (15928,15929,15930,15931), +PARTITION p3983 VALUES IN (15932,15933,15934,15935), +PARTITION p3984 VALUES IN (15936,15937,15938,15939), +PARTITION p3985 VALUES IN (15940,15941,15942,15943), +PARTITION p3986 VALUES IN (15944,15945,15946,15947), +PARTITION p3987 VALUES IN (15948,15949,15950,15951), +PARTITION p3988 VALUES IN (15952,15953,15954,15955), +PARTITION p3989 VALUES IN (15956,15957,15958,15959), +PARTITION p3990 VALUES IN (15960,15961,15962,15963), +PARTITION p3991 VALUES IN (15964,15965,15966,15967), +PARTITION p3992 VALUES IN (15968,15969,15970,15971), +PARTITION p3993 VALUES IN (15972,15973,15974,15975), +PARTITION p3994 VALUES IN (15976,15977,15978,15979), +PARTITION p3995 VALUES IN (15980,15981,15982,15983), +PARTITION p3996 VALUES IN (15984,15985,15986,15987), +PARTITION p3997 VALUES IN (15988,15989,15990,15991), +PARTITION p3998 VALUES IN (15992,15993,15994,15995), +PARTITION p3999 VALUES IN (15996,15997,15998,15999), +PARTITION p4000 VALUES IN (16000,16001,16002,16003), +PARTITION p4001 VALUES IN (16004,16005,16006,16007), +PARTITION p4002 VALUES IN (16008,16009,16010,16011), +PARTITION p4003 VALUES IN (16012,16013,16014,16015), +PARTITION p4004 VALUES IN (16016,16017,16018,16019), +PARTITION p4005 VALUES IN (16020,16021,16022,16023), +PARTITION p4006 VALUES IN (16024,16025,16026,16027), +PARTITION p4007 VALUES IN (16028,16029,16030,16031), +PARTITION p4008 VALUES IN (16032,16033,16034,16035), +PARTITION p4009 VALUES IN (16036,16037,16038,16039), +PARTITION p4010 VALUES IN (16040,16041,16042,16043), +PARTITION p4011 VALUES IN (16044,16045,16046,16047), +PARTITION p4012 VALUES IN (16048,16049,16050,16051), +PARTITION p4013 VALUES IN (16052,16053,16054,16055), +PARTITION p4014 VALUES IN (16056,16057,16058,16059), +PARTITION p4015 VALUES IN (16060,16061,16062,16063), +PARTITION p4016 VALUES IN (16064,16065,16066,16067), +PARTITION p4017 VALUES IN (16068,16069,16070,16071), +PARTITION p4018 VALUES IN (16072,16073,16074,16075), +PARTITION p4019 VALUES IN (16076,16077,16078,16079), +PARTITION p4020 VALUES IN (16080,16081,16082,16083), +PARTITION p4021 VALUES IN (16084,16085,16086,16087), +PARTITION p4022 VALUES IN (16088,16089,16090,16091), +PARTITION p4023 VALUES IN (16092,16093,16094,16095), +PARTITION p4024 VALUES IN (16096,16097,16098,16099), +PARTITION p4025 VALUES IN (16100,16101,16102,16103), +PARTITION p4026 VALUES IN (16104,16105,16106,16107), +PARTITION p4027 VALUES IN (16108,16109,16110,16111), +PARTITION p4028 VALUES IN (16112,16113,16114,16115), +PARTITION p4029 VALUES IN (16116,16117,16118,16119), +PARTITION p4030 VALUES IN (16120,16121,16122,16123), +PARTITION p4031 VALUES IN (16124,16125,16126,16127), +PARTITION p4032 VALUES IN (16128,16129,16130,16131), +PARTITION p4033 VALUES IN (16132,16133,16134,16135), +PARTITION p4034 VALUES IN (16136,16137,16138,16139), +PARTITION p4035 VALUES IN (16140,16141,16142,16143), +PARTITION p4036 VALUES IN (16144,16145,16146,16147), +PARTITION p4037 VALUES IN (16148,16149,16150,16151), +PARTITION p4038 VALUES IN (16152,16153,16154,16155), +PARTITION p4039 VALUES IN (16156,16157,16158,16159), +PARTITION p4040 VALUES IN (16160,16161,16162,16163), +PARTITION p4041 VALUES IN (16164,16165,16166,16167), +PARTITION p4042 VALUES IN (16168,16169,16170,16171), +PARTITION p4043 VALUES IN (16172,16173,16174,16175), +PARTITION p4044 VALUES IN (16176,16177,16178,16179), +PARTITION p4045 VALUES IN (16180,16181,16182,16183), +PARTITION p4046 VALUES IN (16184,16185,16186,16187), +PARTITION p4047 VALUES IN (16188,16189,16190,16191), +PARTITION p4048 VALUES IN (16192,16193,16194,16195), +PARTITION p4049 VALUES IN (16196,16197,16198,16199), +PARTITION p4050 VALUES IN (16200,16201,16202,16203), +PARTITION p4051 VALUES IN (16204,16205,16206,16207), +PARTITION p4052 VALUES IN (16208,16209,16210,16211), +PARTITION p4053 VALUES IN (16212,16213,16214,16215), +PARTITION p4054 VALUES IN (16216,16217,16218,16219), +PARTITION p4055 VALUES IN (16220,16221,16222,16223), +PARTITION p4056 VALUES IN (16224,16225,16226,16227), +PARTITION p4057 VALUES IN (16228,16229,16230,16231), +PARTITION p4058 VALUES IN (16232,16233,16234,16235), +PARTITION p4059 VALUES IN (16236,16237,16238,16239), +PARTITION p4060 VALUES IN (16240,16241,16242,16243), +PARTITION p4061 VALUES IN (16244,16245,16246,16247), +PARTITION p4062 VALUES IN (16248,16249,16250,16251), +PARTITION p4063 VALUES IN (16252,16253,16254,16255), +PARTITION p4064 VALUES IN (16256,16257,16258,16259), +PARTITION p4065 VALUES IN (16260,16261,16262,16263), +PARTITION p4066 VALUES IN (16264,16265,16266,16267), +PARTITION p4067 VALUES IN (16268,16269,16270,16271), +PARTITION p4068 VALUES IN (16272,16273,16274,16275), +PARTITION p4069 VALUES IN (16276,16277,16278,16279), +PARTITION p4070 VALUES IN (16280,16281,16282,16283), +PARTITION p4071 VALUES IN (16284,16285,16286,16287), +PARTITION p4072 VALUES IN (16288,16289,16290,16291), +PARTITION p4073 VALUES IN (16292,16293,16294,16295), +PARTITION p4074 VALUES IN (16296,16297,16298,16299), +PARTITION p4075 VALUES IN (16300,16301,16302,16303), +PARTITION p4076 VALUES IN (16304,16305,16306,16307), +PARTITION p4077 VALUES IN (16308,16309,16310,16311), +PARTITION p4078 VALUES IN (16312,16313,16314,16315), +PARTITION p4079 VALUES IN (16316,16317,16318,16319), +PARTITION p4080 VALUES IN (16320,16321,16322,16323), +PARTITION p4081 VALUES IN (16324,16325,16326,16327), +PARTITION p4082 VALUES IN (16328,16329,16330,16331), +PARTITION p4083 VALUES IN (16332,16333,16334,16335), +PARTITION p4084 VALUES IN (16336,16337,16338,16339), +PARTITION p4085 VALUES IN (16340,16341,16342,16343), +PARTITION p4086 VALUES IN (16344,16345,16346,16347), +PARTITION p4087 VALUES IN (16348,16349,16350,16351), +PARTITION p4088 VALUES IN (16352,16353,16354,16355), +PARTITION p4089 VALUES IN (16356,16357,16358,16359), +PARTITION p4090 VALUES IN (16360,16361,16362,16363), +PARTITION p4091 VALUES IN (16364,16365,16366,16367), +PARTITION p4092 VALUES IN (16368,16369,16370,16371), +PARTITION p4093 VALUES IN (16372,16373,16374,16375), +PARTITION p4094 VALUES IN (16376,16377,16378,16379), +PARTITION p4095 VALUES IN (16380,16381,16382,16383), +PARTITION p4096 VALUES IN (16384,16385,16386,16387), +PARTITION p4097 VALUES IN (16388,16389,16390,16391), +PARTITION p4098 VALUES IN (16392,16393,16394,16395), +PARTITION p4099 VALUES IN (16396,16397,16398,16399), +PARTITION p4100 VALUES IN (16400,16401,16402,16403), +PARTITION p4101 VALUES IN (16404,16405,16406,16407), +PARTITION p4102 VALUES IN (16408,16409,16410,16411), +PARTITION p4103 VALUES IN (16412,16413,16414,16415), +PARTITION p4104 VALUES IN (16416,16417,16418,16419), +PARTITION p4105 VALUES IN (16420,16421,16422,16423), +PARTITION p4106 VALUES IN (16424,16425,16426,16427), +PARTITION p4107 VALUES IN (16428,16429,16430,16431), +PARTITION p4108 VALUES IN (16432,16433,16434,16435), +PARTITION p4109 VALUES IN (16436,16437,16438,16439), +PARTITION p4110 VALUES IN (16440,16441,16442,16443), +PARTITION p4111 VALUES IN (16444,16445,16446,16447), +PARTITION p4112 VALUES IN (16448,16449,16450,16451), +PARTITION p4113 VALUES IN (16452,16453,16454,16455), +PARTITION p4114 VALUES IN (16456,16457,16458,16459), +PARTITION p4115 VALUES IN (16460,16461,16462,16463), +PARTITION p4116 VALUES IN (16464,16465,16466,16467), +PARTITION p4117 VALUES IN (16468,16469,16470,16471), +PARTITION p4118 VALUES IN (16472,16473,16474,16475), +PARTITION p4119 VALUES IN (16476,16477,16478,16479), +PARTITION p4120 VALUES IN (16480,16481,16482,16483), +PARTITION p4121 VALUES IN (16484,16485,16486,16487), +PARTITION p4122 VALUES IN (16488,16489,16490,16491), +PARTITION p4123 VALUES IN (16492,16493,16494,16495), +PARTITION p4124 VALUES IN (16496,16497,16498,16499), +PARTITION p4125 VALUES IN (16500,16501,16502,16503), +PARTITION p4126 VALUES IN (16504,16505,16506,16507), +PARTITION p4127 VALUES IN (16508,16509,16510,16511), +PARTITION p4128 VALUES IN (16512,16513,16514,16515), +PARTITION p4129 VALUES IN (16516,16517,16518,16519), +PARTITION p4130 VALUES IN (16520,16521,16522,16523), +PARTITION p4131 VALUES IN (16524,16525,16526,16527), +PARTITION p4132 VALUES IN (16528,16529,16530,16531), +PARTITION p4133 VALUES IN (16532,16533,16534,16535), +PARTITION p4134 VALUES IN (16536,16537,16538,16539), +PARTITION p4135 VALUES IN (16540,16541,16542,16543), +PARTITION p4136 VALUES IN (16544,16545,16546,16547), +PARTITION p4137 VALUES IN (16548,16549,16550,16551), +PARTITION p4138 VALUES IN (16552,16553,16554,16555), +PARTITION p4139 VALUES IN (16556,16557,16558,16559), +PARTITION p4140 VALUES IN (16560,16561,16562,16563), +PARTITION p4141 VALUES IN (16564,16565,16566,16567), +PARTITION p4142 VALUES IN (16568,16569,16570,16571), +PARTITION p4143 VALUES IN (16572,16573,16574,16575), +PARTITION p4144 VALUES IN (16576,16577,16578,16579), +PARTITION p4145 VALUES IN (16580,16581,16582,16583), +PARTITION p4146 VALUES IN (16584,16585,16586,16587), +PARTITION p4147 VALUES IN (16588,16589,16590,16591), +PARTITION p4148 VALUES IN (16592,16593,16594,16595), +PARTITION p4149 VALUES IN (16596,16597,16598,16599), +PARTITION p4150 VALUES IN (16600,16601,16602,16603), +PARTITION p4151 VALUES IN (16604,16605,16606,16607), +PARTITION p4152 VALUES IN (16608,16609,16610,16611), +PARTITION p4153 VALUES IN (16612,16613,16614,16615), +PARTITION p4154 VALUES IN (16616,16617,16618,16619), +PARTITION p4155 VALUES IN (16620,16621,16622,16623), +PARTITION p4156 VALUES IN (16624,16625,16626,16627), +PARTITION p4157 VALUES IN (16628,16629,16630,16631), +PARTITION p4158 VALUES IN (16632,16633,16634,16635), +PARTITION p4159 VALUES IN (16636,16637,16638,16639), +PARTITION p4160 VALUES IN (16640,16641,16642,16643), +PARTITION p4161 VALUES IN (16644,16645,16646,16647), +PARTITION p4162 VALUES IN (16648,16649,16650,16651), +PARTITION p4163 VALUES IN (16652,16653,16654,16655), +PARTITION p4164 VALUES IN (16656,16657,16658,16659), +PARTITION p4165 VALUES IN (16660,16661,16662,16663), +PARTITION p4166 VALUES IN (16664,16665,16666,16667), +PARTITION p4167 VALUES IN (16668,16669,16670,16671), +PARTITION p4168 VALUES IN (16672,16673,16674,16675), +PARTITION p4169 VALUES IN (16676,16677,16678,16679), +PARTITION p4170 VALUES IN (16680,16681,16682,16683), +PARTITION p4171 VALUES IN (16684,16685,16686,16687), +PARTITION p4172 VALUES IN (16688,16689,16690,16691), +PARTITION p4173 VALUES IN (16692,16693,16694,16695), +PARTITION p4174 VALUES IN (16696,16697,16698,16699), +PARTITION p4175 VALUES IN (16700,16701,16702,16703), +PARTITION p4176 VALUES IN (16704,16705,16706,16707), +PARTITION p4177 VALUES IN (16708,16709,16710,16711), +PARTITION p4178 VALUES IN (16712,16713,16714,16715), +PARTITION p4179 VALUES IN (16716,16717,16718,16719), +PARTITION p4180 VALUES IN (16720,16721,16722,16723), +PARTITION p4181 VALUES IN (16724,16725,16726,16727), +PARTITION p4182 VALUES IN (16728,16729,16730,16731), +PARTITION p4183 VALUES IN (16732,16733,16734,16735), +PARTITION p4184 VALUES IN (16736,16737,16738,16739), +PARTITION p4185 VALUES IN (16740,16741,16742,16743), +PARTITION p4186 VALUES IN (16744,16745,16746,16747), +PARTITION p4187 VALUES IN (16748,16749,16750,16751), +PARTITION p4188 VALUES IN (16752,16753,16754,16755), +PARTITION p4189 VALUES IN (16756,16757,16758,16759), +PARTITION p4190 VALUES IN (16760,16761,16762,16763), +PARTITION p4191 VALUES IN (16764,16765,16766,16767), +PARTITION p4192 VALUES IN (16768,16769,16770,16771), +PARTITION p4193 VALUES IN (16772,16773,16774,16775), +PARTITION p4194 VALUES IN (16776,16777,16778,16779), +PARTITION p4195 VALUES IN (16780,16781,16782,16783), +PARTITION p4196 VALUES IN (16784,16785,16786,16787), +PARTITION p4197 VALUES IN (16788,16789,16790,16791), +PARTITION p4198 VALUES IN (16792,16793,16794,16795), +PARTITION p4199 VALUES IN (16796,16797,16798,16799), +PARTITION p4200 VALUES IN (16800,16801,16802,16803), +PARTITION p4201 VALUES IN (16804,16805,16806,16807), +PARTITION p4202 VALUES IN (16808,16809,16810,16811), +PARTITION p4203 VALUES IN (16812,16813,16814,16815), +PARTITION p4204 VALUES IN (16816,16817,16818,16819), +PARTITION p4205 VALUES IN (16820,16821,16822,16823), +PARTITION p4206 VALUES IN (16824,16825,16826,16827), +PARTITION p4207 VALUES IN (16828,16829,16830,16831), +PARTITION p4208 VALUES IN (16832,16833,16834,16835), +PARTITION p4209 VALUES IN (16836,16837,16838,16839), +PARTITION p4210 VALUES IN (16840,16841,16842,16843), +PARTITION p4211 VALUES IN (16844,16845,16846,16847), +PARTITION p4212 VALUES IN (16848,16849,16850,16851), +PARTITION p4213 VALUES IN (16852,16853,16854,16855), +PARTITION p4214 VALUES IN (16856,16857,16858,16859), +PARTITION p4215 VALUES IN (16860,16861,16862,16863), +PARTITION p4216 VALUES IN (16864,16865,16866,16867), +PARTITION p4217 VALUES IN (16868,16869,16870,16871), +PARTITION p4218 VALUES IN (16872,16873,16874,16875), +PARTITION p4219 VALUES IN (16876,16877,16878,16879), +PARTITION p4220 VALUES IN (16880,16881,16882,16883), +PARTITION p4221 VALUES IN (16884,16885,16886,16887), +PARTITION p4222 VALUES IN (16888,16889,16890,16891), +PARTITION p4223 VALUES IN (16892,16893,16894,16895), +PARTITION p4224 VALUES IN (16896,16897,16898,16899), +PARTITION p4225 VALUES IN (16900,16901,16902,16903), +PARTITION p4226 VALUES IN (16904,16905,16906,16907), +PARTITION p4227 VALUES IN (16908,16909,16910,16911), +PARTITION p4228 VALUES IN (16912,16913,16914,16915), +PARTITION p4229 VALUES IN (16916,16917,16918,16919), +PARTITION p4230 VALUES IN (16920,16921,16922,16923), +PARTITION p4231 VALUES IN (16924,16925,16926,16927), +PARTITION p4232 VALUES IN (16928,16929,16930,16931), +PARTITION p4233 VALUES IN (16932,16933,16934,16935), +PARTITION p4234 VALUES IN (16936,16937,16938,16939), +PARTITION p4235 VALUES IN (16940,16941,16942,16943), +PARTITION p4236 VALUES IN (16944,16945,16946,16947), +PARTITION p4237 VALUES IN (16948,16949,16950,16951), +PARTITION p4238 VALUES IN (16952,16953,16954,16955), +PARTITION p4239 VALUES IN (16956,16957,16958,16959), +PARTITION p4240 VALUES IN (16960,16961,16962,16963), +PARTITION p4241 VALUES IN (16964,16965,16966,16967), +PARTITION p4242 VALUES IN (16968,16969,16970,16971), +PARTITION p4243 VALUES IN (16972,16973,16974,16975), +PARTITION p4244 VALUES IN (16976,16977,16978,16979), +PARTITION p4245 VALUES IN (16980,16981,16982,16983), +PARTITION p4246 VALUES IN (16984,16985,16986,16987), +PARTITION p4247 VALUES IN (16988,16989,16990,16991), +PARTITION p4248 VALUES IN (16992,16993,16994,16995), +PARTITION p4249 VALUES IN (16996,16997,16998,16999), +PARTITION p4250 VALUES IN (17000,17001,17002,17003), +PARTITION p4251 VALUES IN (17004,17005,17006,17007), +PARTITION p4252 VALUES IN (17008,17009,17010,17011), +PARTITION p4253 VALUES IN (17012,17013,17014,17015), +PARTITION p4254 VALUES IN (17016,17017,17018,17019), +PARTITION p4255 VALUES IN (17020,17021,17022,17023), +PARTITION p4256 VALUES IN (17024,17025,17026,17027), +PARTITION p4257 VALUES IN (17028,17029,17030,17031), +PARTITION p4258 VALUES IN (17032,17033,17034,17035), +PARTITION p4259 VALUES IN (17036,17037,17038,17039), +PARTITION p4260 VALUES IN (17040,17041,17042,17043), +PARTITION p4261 VALUES IN (17044,17045,17046,17047), +PARTITION p4262 VALUES IN (17048,17049,17050,17051), +PARTITION p4263 VALUES IN (17052,17053,17054,17055), +PARTITION p4264 VALUES IN (17056,17057,17058,17059), +PARTITION p4265 VALUES IN (17060,17061,17062,17063), +PARTITION p4266 VALUES IN (17064,17065,17066,17067), +PARTITION p4267 VALUES IN (17068,17069,17070,17071), +PARTITION p4268 VALUES IN (17072,17073,17074,17075), +PARTITION p4269 VALUES IN (17076,17077,17078,17079), +PARTITION p4270 VALUES IN (17080,17081,17082,17083), +PARTITION p4271 VALUES IN (17084,17085,17086,17087), +PARTITION p4272 VALUES IN (17088,17089,17090,17091), +PARTITION p4273 VALUES IN (17092,17093,17094,17095), +PARTITION p4274 VALUES IN (17096,17097,17098,17099), +PARTITION p4275 VALUES IN (17100,17101,17102,17103), +PARTITION p4276 VALUES IN (17104,17105,17106,17107), +PARTITION p4277 VALUES IN (17108,17109,17110,17111), +PARTITION p4278 VALUES IN (17112,17113,17114,17115), +PARTITION p4279 VALUES IN (17116,17117,17118,17119), +PARTITION p4280 VALUES IN (17120,17121,17122,17123), +PARTITION p4281 VALUES IN (17124,17125,17126,17127), +PARTITION p4282 VALUES IN (17128,17129,17130,17131), +PARTITION p4283 VALUES IN (17132,17133,17134,17135), +PARTITION p4284 VALUES IN (17136,17137,17138,17139), +PARTITION p4285 VALUES IN (17140,17141,17142,17143), +PARTITION p4286 VALUES IN (17144,17145,17146,17147), +PARTITION p4287 VALUES IN (17148,17149,17150,17151), +PARTITION p4288 VALUES IN (17152,17153,17154,17155), +PARTITION p4289 VALUES IN (17156,17157,17158,17159), +PARTITION p4290 VALUES IN (17160,17161,17162,17163), +PARTITION p4291 VALUES IN (17164,17165,17166,17167), +PARTITION p4292 VALUES IN (17168,17169,17170,17171), +PARTITION p4293 VALUES IN (17172,17173,17174,17175), +PARTITION p4294 VALUES IN (17176,17177,17178,17179), +PARTITION p4295 VALUES IN (17180,17181,17182,17183), +PARTITION p4296 VALUES IN (17184,17185,17186,17187), +PARTITION p4297 VALUES IN (17188,17189,17190,17191), +PARTITION p4298 VALUES IN (17192,17193,17194,17195), +PARTITION p4299 VALUES IN (17196,17197,17198,17199), +PARTITION p4300 VALUES IN (17200,17201,17202,17203), +PARTITION p4301 VALUES IN (17204,17205,17206,17207), +PARTITION p4302 VALUES IN (17208,17209,17210,17211), +PARTITION p4303 VALUES IN (17212,17213,17214,17215), +PARTITION p4304 VALUES IN (17216,17217,17218,17219), +PARTITION p4305 VALUES IN (17220,17221,17222,17223), +PARTITION p4306 VALUES IN (17224,17225,17226,17227), +PARTITION p4307 VALUES IN (17228,17229,17230,17231), +PARTITION p4308 VALUES IN (17232,17233,17234,17235), +PARTITION p4309 VALUES IN (17236,17237,17238,17239), +PARTITION p4310 VALUES IN (17240,17241,17242,17243), +PARTITION p4311 VALUES IN (17244,17245,17246,17247), +PARTITION p4312 VALUES IN (17248,17249,17250,17251), +PARTITION p4313 VALUES IN (17252,17253,17254,17255), +PARTITION p4314 VALUES IN (17256,17257,17258,17259), +PARTITION p4315 VALUES IN (17260,17261,17262,17263), +PARTITION p4316 VALUES IN (17264,17265,17266,17267), +PARTITION p4317 VALUES IN (17268,17269,17270,17271), +PARTITION p4318 VALUES IN (17272,17273,17274,17275), +PARTITION p4319 VALUES IN (17276,17277,17278,17279), +PARTITION p4320 VALUES IN (17280,17281,17282,17283), +PARTITION p4321 VALUES IN (17284,17285,17286,17287), +PARTITION p4322 VALUES IN (17288,17289,17290,17291), +PARTITION p4323 VALUES IN (17292,17293,17294,17295), +PARTITION p4324 VALUES IN (17296,17297,17298,17299), +PARTITION p4325 VALUES IN (17300,17301,17302,17303), +PARTITION p4326 VALUES IN (17304,17305,17306,17307), +PARTITION p4327 VALUES IN (17308,17309,17310,17311), +PARTITION p4328 VALUES IN (17312,17313,17314,17315), +PARTITION p4329 VALUES IN (17316,17317,17318,17319), +PARTITION p4330 VALUES IN (17320,17321,17322,17323), +PARTITION p4331 VALUES IN (17324,17325,17326,17327), +PARTITION p4332 VALUES IN (17328,17329,17330,17331), +PARTITION p4333 VALUES IN (17332,17333,17334,17335), +PARTITION p4334 VALUES IN (17336,17337,17338,17339), +PARTITION p4335 VALUES IN (17340,17341,17342,17343), +PARTITION p4336 VALUES IN (17344,17345,17346,17347), +PARTITION p4337 VALUES IN (17348,17349,17350,17351), +PARTITION p4338 VALUES IN (17352,17353,17354,17355), +PARTITION p4339 VALUES IN (17356,17357,17358,17359), +PARTITION p4340 VALUES IN (17360,17361,17362,17363), +PARTITION p4341 VALUES IN (17364,17365,17366,17367), +PARTITION p4342 VALUES IN (17368,17369,17370,17371), +PARTITION p4343 VALUES IN (17372,17373,17374,17375), +PARTITION p4344 VALUES IN (17376,17377,17378,17379), +PARTITION p4345 VALUES IN (17380,17381,17382,17383), +PARTITION p4346 VALUES IN (17384,17385,17386,17387), +PARTITION p4347 VALUES IN (17388,17389,17390,17391), +PARTITION p4348 VALUES IN (17392,17393,17394,17395), +PARTITION p4349 VALUES IN (17396,17397,17398,17399), +PARTITION p4350 VALUES IN (17400,17401,17402,17403), +PARTITION p4351 VALUES IN (17404,17405,17406,17407), +PARTITION p4352 VALUES IN (17408,17409,17410,17411), +PARTITION p4353 VALUES IN (17412,17413,17414,17415), +PARTITION p4354 VALUES IN (17416,17417,17418,17419), +PARTITION p4355 VALUES IN (17420,17421,17422,17423), +PARTITION p4356 VALUES IN (17424,17425,17426,17427), +PARTITION p4357 VALUES IN (17428,17429,17430,17431), +PARTITION p4358 VALUES IN (17432,17433,17434,17435), +PARTITION p4359 VALUES IN (17436,17437,17438,17439), +PARTITION p4360 VALUES IN (17440,17441,17442,17443), +PARTITION p4361 VALUES IN (17444,17445,17446,17447), +PARTITION p4362 VALUES IN (17448,17449,17450,17451), +PARTITION p4363 VALUES IN (17452,17453,17454,17455), +PARTITION p4364 VALUES IN (17456,17457,17458,17459), +PARTITION p4365 VALUES IN (17460,17461,17462,17463), +PARTITION p4366 VALUES IN (17464,17465,17466,17467), +PARTITION p4367 VALUES IN (17468,17469,17470,17471), +PARTITION p4368 VALUES IN (17472,17473,17474,17475), +PARTITION p4369 VALUES IN (17476,17477,17478,17479), +PARTITION p4370 VALUES IN (17480,17481,17482,17483), +PARTITION p4371 VALUES IN (17484,17485,17486,17487), +PARTITION p4372 VALUES IN (17488,17489,17490,17491), +PARTITION p4373 VALUES IN (17492,17493,17494,17495), +PARTITION p4374 VALUES IN (17496,17497,17498,17499), +PARTITION p4375 VALUES IN (17500,17501,17502,17503), +PARTITION p4376 VALUES IN (17504,17505,17506,17507), +PARTITION p4377 VALUES IN (17508,17509,17510,17511), +PARTITION p4378 VALUES IN (17512,17513,17514,17515), +PARTITION p4379 VALUES IN (17516,17517,17518,17519), +PARTITION p4380 VALUES IN (17520,17521,17522,17523), +PARTITION p4381 VALUES IN (17524,17525,17526,17527), +PARTITION p4382 VALUES IN (17528,17529,17530,17531), +PARTITION p4383 VALUES IN (17532,17533,17534,17535), +PARTITION p4384 VALUES IN (17536,17537,17538,17539), +PARTITION p4385 VALUES IN (17540,17541,17542,17543), +PARTITION p4386 VALUES IN (17544,17545,17546,17547), +PARTITION p4387 VALUES IN (17548,17549,17550,17551), +PARTITION p4388 VALUES IN (17552,17553,17554,17555), +PARTITION p4389 VALUES IN (17556,17557,17558,17559), +PARTITION p4390 VALUES IN (17560,17561,17562,17563), +PARTITION p4391 VALUES IN (17564,17565,17566,17567), +PARTITION p4392 VALUES IN (17568,17569,17570,17571), +PARTITION p4393 VALUES IN (17572,17573,17574,17575), +PARTITION p4394 VALUES IN (17576,17577,17578,17579), +PARTITION p4395 VALUES IN (17580,17581,17582,17583), +PARTITION p4396 VALUES IN (17584,17585,17586,17587), +PARTITION p4397 VALUES IN (17588,17589,17590,17591), +PARTITION p4398 VALUES IN (17592,17593,17594,17595), +PARTITION p4399 VALUES IN (17596,17597,17598,17599), +PARTITION p4400 VALUES IN (17600,17601,17602,17603), +PARTITION p4401 VALUES IN (17604,17605,17606,17607), +PARTITION p4402 VALUES IN (17608,17609,17610,17611), +PARTITION p4403 VALUES IN (17612,17613,17614,17615), +PARTITION p4404 VALUES IN (17616,17617,17618,17619), +PARTITION p4405 VALUES IN (17620,17621,17622,17623), +PARTITION p4406 VALUES IN (17624,17625,17626,17627), +PARTITION p4407 VALUES IN (17628,17629,17630,17631), +PARTITION p4408 VALUES IN (17632,17633,17634,17635), +PARTITION p4409 VALUES IN (17636,17637,17638,17639), +PARTITION p4410 VALUES IN (17640,17641,17642,17643), +PARTITION p4411 VALUES IN (17644,17645,17646,17647), +PARTITION p4412 VALUES IN (17648,17649,17650,17651), +PARTITION p4413 VALUES IN (17652,17653,17654,17655), +PARTITION p4414 VALUES IN (17656,17657,17658,17659), +PARTITION p4415 VALUES IN (17660,17661,17662,17663), +PARTITION p4416 VALUES IN (17664,17665,17666,17667), +PARTITION p4417 VALUES IN (17668,17669,17670,17671), +PARTITION p4418 VALUES IN (17672,17673,17674,17675), +PARTITION p4419 VALUES IN (17676,17677,17678,17679), +PARTITION p4420 VALUES IN (17680,17681,17682,17683), +PARTITION p4421 VALUES IN (17684,17685,17686,17687), +PARTITION p4422 VALUES IN (17688,17689,17690,17691), +PARTITION p4423 VALUES IN (17692,17693,17694,17695), +PARTITION p4424 VALUES IN (17696,17697,17698,17699), +PARTITION p4425 VALUES IN (17700,17701,17702,17703), +PARTITION p4426 VALUES IN (17704,17705,17706,17707), +PARTITION p4427 VALUES IN (17708,17709,17710,17711), +PARTITION p4428 VALUES IN (17712,17713,17714,17715), +PARTITION p4429 VALUES IN (17716,17717,17718,17719), +PARTITION p4430 VALUES IN (17720,17721,17722,17723), +PARTITION p4431 VALUES IN (17724,17725,17726,17727), +PARTITION p4432 VALUES IN (17728,17729,17730,17731), +PARTITION p4433 VALUES IN (17732,17733,17734,17735), +PARTITION p4434 VALUES IN (17736,17737,17738,17739), +PARTITION p4435 VALUES IN (17740,17741,17742,17743), +PARTITION p4436 VALUES IN (17744,17745,17746,17747), +PARTITION p4437 VALUES IN (17748,17749,17750,17751), +PARTITION p4438 VALUES IN (17752,17753,17754,17755), +PARTITION p4439 VALUES IN (17756,17757,17758,17759), +PARTITION p4440 VALUES IN (17760,17761,17762,17763), +PARTITION p4441 VALUES IN (17764,17765,17766,17767), +PARTITION p4442 VALUES IN (17768,17769,17770,17771), +PARTITION p4443 VALUES IN (17772,17773,17774,17775), +PARTITION p4444 VALUES IN (17776,17777,17778,17779), +PARTITION p4445 VALUES IN (17780,17781,17782,17783), +PARTITION p4446 VALUES IN (17784,17785,17786,17787), +PARTITION p4447 VALUES IN (17788,17789,17790,17791), +PARTITION p4448 VALUES IN (17792,17793,17794,17795), +PARTITION p4449 VALUES IN (17796,17797,17798,17799), +PARTITION p4450 VALUES IN (17800,17801,17802,17803), +PARTITION p4451 VALUES IN (17804,17805,17806,17807), +PARTITION p4452 VALUES IN (17808,17809,17810,17811), +PARTITION p4453 VALUES IN (17812,17813,17814,17815), +PARTITION p4454 VALUES IN (17816,17817,17818,17819), +PARTITION p4455 VALUES IN (17820,17821,17822,17823), +PARTITION p4456 VALUES IN (17824,17825,17826,17827), +PARTITION p4457 VALUES IN (17828,17829,17830,17831), +PARTITION p4458 VALUES IN (17832,17833,17834,17835), +PARTITION p4459 VALUES IN (17836,17837,17838,17839), +PARTITION p4460 VALUES IN (17840,17841,17842,17843), +PARTITION p4461 VALUES IN (17844,17845,17846,17847), +PARTITION p4462 VALUES IN (17848,17849,17850,17851), +PARTITION p4463 VALUES IN (17852,17853,17854,17855), +PARTITION p4464 VALUES IN (17856,17857,17858,17859), +PARTITION p4465 VALUES IN (17860,17861,17862,17863), +PARTITION p4466 VALUES IN (17864,17865,17866,17867), +PARTITION p4467 VALUES IN (17868,17869,17870,17871), +PARTITION p4468 VALUES IN (17872,17873,17874,17875), +PARTITION p4469 VALUES IN (17876,17877,17878,17879), +PARTITION p4470 VALUES IN (17880,17881,17882,17883), +PARTITION p4471 VALUES IN (17884,17885,17886,17887), +PARTITION p4472 VALUES IN (17888,17889,17890,17891), +PARTITION p4473 VALUES IN (17892,17893,17894,17895), +PARTITION p4474 VALUES IN (17896,17897,17898,17899), +PARTITION p4475 VALUES IN (17900,17901,17902,17903), +PARTITION p4476 VALUES IN (17904,17905,17906,17907), +PARTITION p4477 VALUES IN (17908,17909,17910,17911), +PARTITION p4478 VALUES IN (17912,17913,17914,17915), +PARTITION p4479 VALUES IN (17916,17917,17918,17919), +PARTITION p4480 VALUES IN (17920,17921,17922,17923), +PARTITION p4481 VALUES IN (17924,17925,17926,17927), +PARTITION p4482 VALUES IN (17928,17929,17930,17931), +PARTITION p4483 VALUES IN (17932,17933,17934,17935), +PARTITION p4484 VALUES IN (17936,17937,17938,17939), +PARTITION p4485 VALUES IN (17940,17941,17942,17943), +PARTITION p4486 VALUES IN (17944,17945,17946,17947), +PARTITION p4487 VALUES IN (17948,17949,17950,17951), +PARTITION p4488 VALUES IN (17952,17953,17954,17955), +PARTITION p4489 VALUES IN (17956,17957,17958,17959), +PARTITION p4490 VALUES IN (17960,17961,17962,17963), +PARTITION p4491 VALUES IN (17964,17965,17966,17967), +PARTITION p4492 VALUES IN (17968,17969,17970,17971), +PARTITION p4493 VALUES IN (17972,17973,17974,17975), +PARTITION p4494 VALUES IN (17976,17977,17978,17979), +PARTITION p4495 VALUES IN (17980,17981,17982,17983), +PARTITION p4496 VALUES IN (17984,17985,17986,17987), +PARTITION p4497 VALUES IN (17988,17989,17990,17991), +PARTITION p4498 VALUES IN (17992,17993,17994,17995), +PARTITION p4499 VALUES IN (17996,17997,17998,17999), +PARTITION p4500 VALUES IN (18000,18001,18002,18003), +PARTITION p4501 VALUES IN (18004,18005,18006,18007), +PARTITION p4502 VALUES IN (18008,18009,18010,18011), +PARTITION p4503 VALUES IN (18012,18013,18014,18015), +PARTITION p4504 VALUES IN (18016,18017,18018,18019), +PARTITION p4505 VALUES IN (18020,18021,18022,18023), +PARTITION p4506 VALUES IN (18024,18025,18026,18027), +PARTITION p4507 VALUES IN (18028,18029,18030,18031), +PARTITION p4508 VALUES IN (18032,18033,18034,18035), +PARTITION p4509 VALUES IN (18036,18037,18038,18039), +PARTITION p4510 VALUES IN (18040,18041,18042,18043), +PARTITION p4511 VALUES IN (18044,18045,18046,18047), +PARTITION p4512 VALUES IN (18048,18049,18050,18051), +PARTITION p4513 VALUES IN (18052,18053,18054,18055), +PARTITION p4514 VALUES IN (18056,18057,18058,18059), +PARTITION p4515 VALUES IN (18060,18061,18062,18063), +PARTITION p4516 VALUES IN (18064,18065,18066,18067), +PARTITION p4517 VALUES IN (18068,18069,18070,18071), +PARTITION p4518 VALUES IN (18072,18073,18074,18075), +PARTITION p4519 VALUES IN (18076,18077,18078,18079), +PARTITION p4520 VALUES IN (18080,18081,18082,18083), +PARTITION p4521 VALUES IN (18084,18085,18086,18087), +PARTITION p4522 VALUES IN (18088,18089,18090,18091), +PARTITION p4523 VALUES IN (18092,18093,18094,18095), +PARTITION p4524 VALUES IN (18096,18097,18098,18099), +PARTITION p4525 VALUES IN (18100,18101,18102,18103), +PARTITION p4526 VALUES IN (18104,18105,18106,18107), +PARTITION p4527 VALUES IN (18108,18109,18110,18111), +PARTITION p4528 VALUES IN (18112,18113,18114,18115), +PARTITION p4529 VALUES IN (18116,18117,18118,18119), +PARTITION p4530 VALUES IN (18120,18121,18122,18123), +PARTITION p4531 VALUES IN (18124,18125,18126,18127), +PARTITION p4532 VALUES IN (18128,18129,18130,18131), +PARTITION p4533 VALUES IN (18132,18133,18134,18135), +PARTITION p4534 VALUES IN (18136,18137,18138,18139), +PARTITION p4535 VALUES IN (18140,18141,18142,18143), +PARTITION p4536 VALUES IN (18144,18145,18146,18147), +PARTITION p4537 VALUES IN (18148,18149,18150,18151), +PARTITION p4538 VALUES IN (18152,18153,18154,18155), +PARTITION p4539 VALUES IN (18156,18157,18158,18159), +PARTITION p4540 VALUES IN (18160,18161,18162,18163), +PARTITION p4541 VALUES IN (18164,18165,18166,18167), +PARTITION p4542 VALUES IN (18168,18169,18170,18171), +PARTITION p4543 VALUES IN (18172,18173,18174,18175), +PARTITION p4544 VALUES IN (18176,18177,18178,18179), +PARTITION p4545 VALUES IN (18180,18181,18182,18183), +PARTITION p4546 VALUES IN (18184,18185,18186,18187), +PARTITION p4547 VALUES IN (18188,18189,18190,18191), +PARTITION p4548 VALUES IN (18192,18193,18194,18195), +PARTITION p4549 VALUES IN (18196,18197,18198,18199), +PARTITION p4550 VALUES IN (18200,18201,18202,18203), +PARTITION p4551 VALUES IN (18204,18205,18206,18207), +PARTITION p4552 VALUES IN (18208,18209,18210,18211), +PARTITION p4553 VALUES IN (18212,18213,18214,18215), +PARTITION p4554 VALUES IN (18216,18217,18218,18219), +PARTITION p4555 VALUES IN (18220,18221,18222,18223), +PARTITION p4556 VALUES IN (18224,18225,18226,18227), +PARTITION p4557 VALUES IN (18228,18229,18230,18231), +PARTITION p4558 VALUES IN (18232,18233,18234,18235), +PARTITION p4559 VALUES IN (18236,18237,18238,18239), +PARTITION p4560 VALUES IN (18240,18241,18242,18243), +PARTITION p4561 VALUES IN (18244,18245,18246,18247), +PARTITION p4562 VALUES IN (18248,18249,18250,18251), +PARTITION p4563 VALUES IN (18252,18253,18254,18255), +PARTITION p4564 VALUES IN (18256,18257,18258,18259), +PARTITION p4565 VALUES IN (18260,18261,18262,18263), +PARTITION p4566 VALUES IN (18264,18265,18266,18267), +PARTITION p4567 VALUES IN (18268,18269,18270,18271), +PARTITION p4568 VALUES IN (18272,18273,18274,18275), +PARTITION p4569 VALUES IN (18276,18277,18278,18279), +PARTITION p4570 VALUES IN (18280,18281,18282,18283), +PARTITION p4571 VALUES IN (18284,18285,18286,18287), +PARTITION p4572 VALUES IN (18288,18289,18290,18291), +PARTITION p4573 VALUES IN (18292,18293,18294,18295), +PARTITION p4574 VALUES IN (18296,18297,18298,18299), +PARTITION p4575 VALUES IN (18300,18301,18302,18303), +PARTITION p4576 VALUES IN (18304,18305,18306,18307), +PARTITION p4577 VALUES IN (18308,18309,18310,18311), +PARTITION p4578 VALUES IN (18312,18313,18314,18315), +PARTITION p4579 VALUES IN (18316,18317,18318,18319), +PARTITION p4580 VALUES IN (18320,18321,18322,18323), +PARTITION p4581 VALUES IN (18324,18325,18326,18327), +PARTITION p4582 VALUES IN (18328,18329,18330,18331), +PARTITION p4583 VALUES IN (18332,18333,18334,18335), +PARTITION p4584 VALUES IN (18336,18337,18338,18339), +PARTITION p4585 VALUES IN (18340,18341,18342,18343), +PARTITION p4586 VALUES IN (18344,18345,18346,18347), +PARTITION p4587 VALUES IN (18348,18349,18350,18351), +PARTITION p4588 VALUES IN (18352,18353,18354,18355), +PARTITION p4589 VALUES IN (18356,18357,18358,18359), +PARTITION p4590 VALUES IN (18360,18361,18362,18363), +PARTITION p4591 VALUES IN (18364,18365,18366,18367), +PARTITION p4592 VALUES IN (18368,18369,18370,18371), +PARTITION p4593 VALUES IN (18372,18373,18374,18375), +PARTITION p4594 VALUES IN (18376,18377,18378,18379), +PARTITION p4595 VALUES IN (18380,18381,18382,18383), +PARTITION p4596 VALUES IN (18384,18385,18386,18387), +PARTITION p4597 VALUES IN (18388,18389,18390,18391), +PARTITION p4598 VALUES IN (18392,18393,18394,18395), +PARTITION p4599 VALUES IN (18396,18397,18398,18399), +PARTITION p4600 VALUES IN (18400,18401,18402,18403), +PARTITION p4601 VALUES IN (18404,18405,18406,18407), +PARTITION p4602 VALUES IN (18408,18409,18410,18411), +PARTITION p4603 VALUES IN (18412,18413,18414,18415), +PARTITION p4604 VALUES IN (18416,18417,18418,18419), +PARTITION p4605 VALUES IN (18420,18421,18422,18423), +PARTITION p4606 VALUES IN (18424,18425,18426,18427), +PARTITION p4607 VALUES IN (18428,18429,18430,18431), +PARTITION p4608 VALUES IN (18432,18433,18434,18435), +PARTITION p4609 VALUES IN (18436,18437,18438,18439), +PARTITION p4610 VALUES IN (18440,18441,18442,18443), +PARTITION p4611 VALUES IN (18444,18445,18446,18447), +PARTITION p4612 VALUES IN (18448,18449,18450,18451), +PARTITION p4613 VALUES IN (18452,18453,18454,18455), +PARTITION p4614 VALUES IN (18456,18457,18458,18459), +PARTITION p4615 VALUES IN (18460,18461,18462,18463), +PARTITION p4616 VALUES IN (18464,18465,18466,18467), +PARTITION p4617 VALUES IN (18468,18469,18470,18471), +PARTITION p4618 VALUES IN (18472,18473,18474,18475), +PARTITION p4619 VALUES IN (18476,18477,18478,18479), +PARTITION p4620 VALUES IN (18480,18481,18482,18483), +PARTITION p4621 VALUES IN (18484,18485,18486,18487), +PARTITION p4622 VALUES IN (18488,18489,18490,18491), +PARTITION p4623 VALUES IN (18492,18493,18494,18495), +PARTITION p4624 VALUES IN (18496,18497,18498,18499), +PARTITION p4625 VALUES IN (18500,18501,18502,18503), +PARTITION p4626 VALUES IN (18504,18505,18506,18507), +PARTITION p4627 VALUES IN (18508,18509,18510,18511), +PARTITION p4628 VALUES IN (18512,18513,18514,18515), +PARTITION p4629 VALUES IN (18516,18517,18518,18519), +PARTITION p4630 VALUES IN (18520,18521,18522,18523), +PARTITION p4631 VALUES IN (18524,18525,18526,18527), +PARTITION p4632 VALUES IN (18528,18529,18530,18531), +PARTITION p4633 VALUES IN (18532,18533,18534,18535), +PARTITION p4634 VALUES IN (18536,18537,18538,18539), +PARTITION p4635 VALUES IN (18540,18541,18542,18543), +PARTITION p4636 VALUES IN (18544,18545,18546,18547), +PARTITION p4637 VALUES IN (18548,18549,18550,18551), +PARTITION p4638 VALUES IN (18552,18553,18554,18555), +PARTITION p4639 VALUES IN (18556,18557,18558,18559), +PARTITION p4640 VALUES IN (18560,18561,18562,18563), +PARTITION p4641 VALUES IN (18564,18565,18566,18567), +PARTITION p4642 VALUES IN (18568,18569,18570,18571), +PARTITION p4643 VALUES IN (18572,18573,18574,18575), +PARTITION p4644 VALUES IN (18576,18577,18578,18579), +PARTITION p4645 VALUES IN (18580,18581,18582,18583), +PARTITION p4646 VALUES IN (18584,18585,18586,18587), +PARTITION p4647 VALUES IN (18588,18589,18590,18591), +PARTITION p4648 VALUES IN (18592,18593,18594,18595), +PARTITION p4649 VALUES IN (18596,18597,18598,18599), +PARTITION p4650 VALUES IN (18600,18601,18602,18603), +PARTITION p4651 VALUES IN (18604,18605,18606,18607), +PARTITION p4652 VALUES IN (18608,18609,18610,18611), +PARTITION p4653 VALUES IN (18612,18613,18614,18615), +PARTITION p4654 VALUES IN (18616,18617,18618,18619), +PARTITION p4655 VALUES IN (18620,18621,18622,18623), +PARTITION p4656 VALUES IN (18624,18625,18626,18627), +PARTITION p4657 VALUES IN (18628,18629,18630,18631), +PARTITION p4658 VALUES IN (18632,18633,18634,18635), +PARTITION p4659 VALUES IN (18636,18637,18638,18639), +PARTITION p4660 VALUES IN (18640,18641,18642,18643), +PARTITION p4661 VALUES IN (18644,18645,18646,18647), +PARTITION p4662 VALUES IN (18648,18649,18650,18651), +PARTITION p4663 VALUES IN (18652,18653,18654,18655), +PARTITION p4664 VALUES IN (18656,18657,18658,18659), +PARTITION p4665 VALUES IN (18660,18661,18662,18663), +PARTITION p4666 VALUES IN (18664,18665,18666,18667), +PARTITION p4667 VALUES IN (18668,18669,18670,18671), +PARTITION p4668 VALUES IN (18672,18673,18674,18675), +PARTITION p4669 VALUES IN (18676,18677,18678,18679), +PARTITION p4670 VALUES IN (18680,18681,18682,18683), +PARTITION p4671 VALUES IN (18684,18685,18686,18687), +PARTITION p4672 VALUES IN (18688,18689,18690,18691), +PARTITION p4673 VALUES IN (18692,18693,18694,18695), +PARTITION p4674 VALUES IN (18696,18697,18698,18699), +PARTITION p4675 VALUES IN (18700,18701,18702,18703), +PARTITION p4676 VALUES IN (18704,18705,18706,18707), +PARTITION p4677 VALUES IN (18708,18709,18710,18711), +PARTITION p4678 VALUES IN (18712,18713,18714,18715), +PARTITION p4679 VALUES IN (18716,18717,18718,18719), +PARTITION p4680 VALUES IN (18720,18721,18722,18723), +PARTITION p4681 VALUES IN (18724,18725,18726,18727), +PARTITION p4682 VALUES IN (18728,18729,18730,18731), +PARTITION p4683 VALUES IN (18732,18733,18734,18735), +PARTITION p4684 VALUES IN (18736,18737,18738,18739), +PARTITION p4685 VALUES IN (18740,18741,18742,18743), +PARTITION p4686 VALUES IN (18744,18745,18746,18747), +PARTITION p4687 VALUES IN (18748,18749,18750,18751), +PARTITION p4688 VALUES IN (18752,18753,18754,18755), +PARTITION p4689 VALUES IN (18756,18757,18758,18759), +PARTITION p4690 VALUES IN (18760,18761,18762,18763), +PARTITION p4691 VALUES IN (18764,18765,18766,18767), +PARTITION p4692 VALUES IN (18768,18769,18770,18771), +PARTITION p4693 VALUES IN (18772,18773,18774,18775), +PARTITION p4694 VALUES IN (18776,18777,18778,18779), +PARTITION p4695 VALUES IN (18780,18781,18782,18783), +PARTITION p4696 VALUES IN (18784,18785,18786,18787), +PARTITION p4697 VALUES IN (18788,18789,18790,18791), +PARTITION p4698 VALUES IN (18792,18793,18794,18795), +PARTITION p4699 VALUES IN (18796,18797,18798,18799), +PARTITION p4700 VALUES IN (18800,18801,18802,18803), +PARTITION p4701 VALUES IN (18804,18805,18806,18807), +PARTITION p4702 VALUES IN (18808,18809,18810,18811), +PARTITION p4703 VALUES IN (18812,18813,18814,18815), +PARTITION p4704 VALUES IN (18816,18817,18818,18819), +PARTITION p4705 VALUES IN (18820,18821,18822,18823), +PARTITION p4706 VALUES IN (18824,18825,18826,18827), +PARTITION p4707 VALUES IN (18828,18829,18830,18831), +PARTITION p4708 VALUES IN (18832,18833,18834,18835), +PARTITION p4709 VALUES IN (18836,18837,18838,18839), +PARTITION p4710 VALUES IN (18840,18841,18842,18843), +PARTITION p4711 VALUES IN (18844,18845,18846,18847), +PARTITION p4712 VALUES IN (18848,18849,18850,18851), +PARTITION p4713 VALUES IN (18852,18853,18854,18855), +PARTITION p4714 VALUES IN (18856,18857,18858,18859), +PARTITION p4715 VALUES IN (18860,18861,18862,18863), +PARTITION p4716 VALUES IN (18864,18865,18866,18867), +PARTITION p4717 VALUES IN (18868,18869,18870,18871), +PARTITION p4718 VALUES IN (18872,18873,18874,18875), +PARTITION p4719 VALUES IN (18876,18877,18878,18879), +PARTITION p4720 VALUES IN (18880,18881,18882,18883), +PARTITION p4721 VALUES IN (18884,18885,18886,18887), +PARTITION p4722 VALUES IN (18888,18889,18890,18891), +PARTITION p4723 VALUES IN (18892,18893,18894,18895), +PARTITION p4724 VALUES IN (18896,18897,18898,18899), +PARTITION p4725 VALUES IN (18900,18901,18902,18903), +PARTITION p4726 VALUES IN (18904,18905,18906,18907), +PARTITION p4727 VALUES IN (18908,18909,18910,18911), +PARTITION p4728 VALUES IN (18912,18913,18914,18915), +PARTITION p4729 VALUES IN (18916,18917,18918,18919), +PARTITION p4730 VALUES IN (18920,18921,18922,18923), +PARTITION p4731 VALUES IN (18924,18925,18926,18927), +PARTITION p4732 VALUES IN (18928,18929,18930,18931), +PARTITION p4733 VALUES IN (18932,18933,18934,18935), +PARTITION p4734 VALUES IN (18936,18937,18938,18939), +PARTITION p4735 VALUES IN (18940,18941,18942,18943), +PARTITION p4736 VALUES IN (18944,18945,18946,18947), +PARTITION p4737 VALUES IN (18948,18949,18950,18951), +PARTITION p4738 VALUES IN (18952,18953,18954,18955), +PARTITION p4739 VALUES IN (18956,18957,18958,18959), +PARTITION p4740 VALUES IN (18960,18961,18962,18963), +PARTITION p4741 VALUES IN (18964,18965,18966,18967), +PARTITION p4742 VALUES IN (18968,18969,18970,18971), +PARTITION p4743 VALUES IN (18972,18973,18974,18975), +PARTITION p4744 VALUES IN (18976,18977,18978,18979), +PARTITION p4745 VALUES IN (18980,18981,18982,18983), +PARTITION p4746 VALUES IN (18984,18985,18986,18987), +PARTITION p4747 VALUES IN (18988,18989,18990,18991), +PARTITION p4748 VALUES IN (18992,18993,18994,18995), +PARTITION p4749 VALUES IN (18996,18997,18998,18999), +PARTITION p4750 VALUES IN (19000,19001,19002,19003), +PARTITION p4751 VALUES IN (19004,19005,19006,19007), +PARTITION p4752 VALUES IN (19008,19009,19010,19011), +PARTITION p4753 VALUES IN (19012,19013,19014,19015), +PARTITION p4754 VALUES IN (19016,19017,19018,19019), +PARTITION p4755 VALUES IN (19020,19021,19022,19023), +PARTITION p4756 VALUES IN (19024,19025,19026,19027), +PARTITION p4757 VALUES IN (19028,19029,19030,19031), +PARTITION p4758 VALUES IN (19032,19033,19034,19035), +PARTITION p4759 VALUES IN (19036,19037,19038,19039), +PARTITION p4760 VALUES IN (19040,19041,19042,19043), +PARTITION p4761 VALUES IN (19044,19045,19046,19047), +PARTITION p4762 VALUES IN (19048,19049,19050,19051), +PARTITION p4763 VALUES IN (19052,19053,19054,19055), +PARTITION p4764 VALUES IN (19056,19057,19058,19059), +PARTITION p4765 VALUES IN (19060,19061,19062,19063), +PARTITION p4766 VALUES IN (19064,19065,19066,19067), +PARTITION p4767 VALUES IN (19068,19069,19070,19071), +PARTITION p4768 VALUES IN (19072,19073,19074,19075), +PARTITION p4769 VALUES IN (19076,19077,19078,19079), +PARTITION p4770 VALUES IN (19080,19081,19082,19083), +PARTITION p4771 VALUES IN (19084,19085,19086,19087), +PARTITION p4772 VALUES IN (19088,19089,19090,19091), +PARTITION p4773 VALUES IN (19092,19093,19094,19095), +PARTITION p4774 VALUES IN (19096,19097,19098,19099), +PARTITION p4775 VALUES IN (19100,19101,19102,19103), +PARTITION p4776 VALUES IN (19104,19105,19106,19107), +PARTITION p4777 VALUES IN (19108,19109,19110,19111), +PARTITION p4778 VALUES IN (19112,19113,19114,19115), +PARTITION p4779 VALUES IN (19116,19117,19118,19119), +PARTITION p4780 VALUES IN (19120,19121,19122,19123), +PARTITION p4781 VALUES IN (19124,19125,19126,19127), +PARTITION p4782 VALUES IN (19128,19129,19130,19131), +PARTITION p4783 VALUES IN (19132,19133,19134,19135), +PARTITION p4784 VALUES IN (19136,19137,19138,19139), +PARTITION p4785 VALUES IN (19140,19141,19142,19143), +PARTITION p4786 VALUES IN (19144,19145,19146,19147), +PARTITION p4787 VALUES IN (19148,19149,19150,19151), +PARTITION p4788 VALUES IN (19152,19153,19154,19155), +PARTITION p4789 VALUES IN (19156,19157,19158,19159), +PARTITION p4790 VALUES IN (19160,19161,19162,19163), +PARTITION p4791 VALUES IN (19164,19165,19166,19167), +PARTITION p4792 VALUES IN (19168,19169,19170,19171), +PARTITION p4793 VALUES IN (19172,19173,19174,19175), +PARTITION p4794 VALUES IN (19176,19177,19178,19179), +PARTITION p4795 VALUES IN (19180,19181,19182,19183), +PARTITION p4796 VALUES IN (19184,19185,19186,19187), +PARTITION p4797 VALUES IN (19188,19189,19190,19191), +PARTITION p4798 VALUES IN (19192,19193,19194,19195), +PARTITION p4799 VALUES IN (19196,19197,19198,19199), +PARTITION p4800 VALUES IN (19200,19201,19202,19203), +PARTITION p4801 VALUES IN (19204,19205,19206,19207), +PARTITION p4802 VALUES IN (19208,19209,19210,19211), +PARTITION p4803 VALUES IN (19212,19213,19214,19215), +PARTITION p4804 VALUES IN (19216,19217,19218,19219), +PARTITION p4805 VALUES IN (19220,19221,19222,19223), +PARTITION p4806 VALUES IN (19224,19225,19226,19227), +PARTITION p4807 VALUES IN (19228,19229,19230,19231), +PARTITION p4808 VALUES IN (19232,19233,19234,19235), +PARTITION p4809 VALUES IN (19236,19237,19238,19239), +PARTITION p4810 VALUES IN (19240,19241,19242,19243), +PARTITION p4811 VALUES IN (19244,19245,19246,19247), +PARTITION p4812 VALUES IN (19248,19249,19250,19251), +PARTITION p4813 VALUES IN (19252,19253,19254,19255), +PARTITION p4814 VALUES IN (19256,19257,19258,19259), +PARTITION p4815 VALUES IN (19260,19261,19262,19263), +PARTITION p4816 VALUES IN (19264,19265,19266,19267), +PARTITION p4817 VALUES IN (19268,19269,19270,19271), +PARTITION p4818 VALUES IN (19272,19273,19274,19275), +PARTITION p4819 VALUES IN (19276,19277,19278,19279), +PARTITION p4820 VALUES IN (19280,19281,19282,19283), +PARTITION p4821 VALUES IN (19284,19285,19286,19287), +PARTITION p4822 VALUES IN (19288,19289,19290,19291), +PARTITION p4823 VALUES IN (19292,19293,19294,19295), +PARTITION p4824 VALUES IN (19296,19297,19298,19299), +PARTITION p4825 VALUES IN (19300,19301,19302,19303), +PARTITION p4826 VALUES IN (19304,19305,19306,19307), +PARTITION p4827 VALUES IN (19308,19309,19310,19311), +PARTITION p4828 VALUES IN (19312,19313,19314,19315), +PARTITION p4829 VALUES IN (19316,19317,19318,19319), +PARTITION p4830 VALUES IN (19320,19321,19322,19323), +PARTITION p4831 VALUES IN (19324,19325,19326,19327), +PARTITION p4832 VALUES IN (19328,19329,19330,19331), +PARTITION p4833 VALUES IN (19332,19333,19334,19335), +PARTITION p4834 VALUES IN (19336,19337,19338,19339), +PARTITION p4835 VALUES IN (19340,19341,19342,19343), +PARTITION p4836 VALUES IN (19344,19345,19346,19347), +PARTITION p4837 VALUES IN (19348,19349,19350,19351), +PARTITION p4838 VALUES IN (19352,19353,19354,19355), +PARTITION p4839 VALUES IN (19356,19357,19358,19359), +PARTITION p4840 VALUES IN (19360,19361,19362,19363), +PARTITION p4841 VALUES IN (19364,19365,19366,19367), +PARTITION p4842 VALUES IN (19368,19369,19370,19371), +PARTITION p4843 VALUES IN (19372,19373,19374,19375), +PARTITION p4844 VALUES IN (19376,19377,19378,19379), +PARTITION p4845 VALUES IN (19380,19381,19382,19383), +PARTITION p4846 VALUES IN (19384,19385,19386,19387), +PARTITION p4847 VALUES IN (19388,19389,19390,19391), +PARTITION p4848 VALUES IN (19392,19393,19394,19395), +PARTITION p4849 VALUES IN (19396,19397,19398,19399), +PARTITION p4850 VALUES IN (19400,19401,19402,19403), +PARTITION p4851 VALUES IN (19404,19405,19406,19407), +PARTITION p4852 VALUES IN (19408,19409,19410,19411), +PARTITION p4853 VALUES IN (19412,19413,19414,19415), +PARTITION p4854 VALUES IN (19416,19417,19418,19419), +PARTITION p4855 VALUES IN (19420,19421,19422,19423), +PARTITION p4856 VALUES IN (19424,19425,19426,19427), +PARTITION p4857 VALUES IN (19428,19429,19430,19431), +PARTITION p4858 VALUES IN (19432,19433,19434,19435), +PARTITION p4859 VALUES IN (19436,19437,19438,19439), +PARTITION p4860 VALUES IN (19440,19441,19442,19443), +PARTITION p4861 VALUES IN (19444,19445,19446,19447), +PARTITION p4862 VALUES IN (19448,19449,19450,19451), +PARTITION p4863 VALUES IN (19452,19453,19454,19455), +PARTITION p4864 VALUES IN (19456,19457,19458,19459), +PARTITION p4865 VALUES IN (19460,19461,19462,19463), +PARTITION p4866 VALUES IN (19464,19465,19466,19467), +PARTITION p4867 VALUES IN (19468,19469,19470,19471), +PARTITION p4868 VALUES IN (19472,19473,19474,19475), +PARTITION p4869 VALUES IN (19476,19477,19478,19479), +PARTITION p4870 VALUES IN (19480,19481,19482,19483), +PARTITION p4871 VALUES IN (19484,19485,19486,19487), +PARTITION p4872 VALUES IN (19488,19489,19490,19491), +PARTITION p4873 VALUES IN (19492,19493,19494,19495), +PARTITION p4874 VALUES IN (19496,19497,19498,19499), +PARTITION p4875 VALUES IN (19500,19501,19502,19503), +PARTITION p4876 VALUES IN (19504,19505,19506,19507), +PARTITION p4877 VALUES IN (19508,19509,19510,19511), +PARTITION p4878 VALUES IN (19512,19513,19514,19515), +PARTITION p4879 VALUES IN (19516,19517,19518,19519), +PARTITION p4880 VALUES IN (19520,19521,19522,19523), +PARTITION p4881 VALUES IN (19524,19525,19526,19527), +PARTITION p4882 VALUES IN (19528,19529,19530,19531), +PARTITION p4883 VALUES IN (19532,19533,19534,19535), +PARTITION p4884 VALUES IN (19536,19537,19538,19539), +PARTITION p4885 VALUES IN (19540,19541,19542,19543), +PARTITION p4886 VALUES IN (19544,19545,19546,19547), +PARTITION p4887 VALUES IN (19548,19549,19550,19551), +PARTITION p4888 VALUES IN (19552,19553,19554,19555), +PARTITION p4889 VALUES IN (19556,19557,19558,19559), +PARTITION p4890 VALUES IN (19560,19561,19562,19563), +PARTITION p4891 VALUES IN (19564,19565,19566,19567), +PARTITION p4892 VALUES IN (19568,19569,19570,19571), +PARTITION p4893 VALUES IN (19572,19573,19574,19575), +PARTITION p4894 VALUES IN (19576,19577,19578,19579), +PARTITION p4895 VALUES IN (19580,19581,19582,19583), +PARTITION p4896 VALUES IN (19584,19585,19586,19587), +PARTITION p4897 VALUES IN (19588,19589,19590,19591), +PARTITION p4898 VALUES IN (19592,19593,19594,19595), +PARTITION p4899 VALUES IN (19596,19597,19598,19599), +PARTITION p4900 VALUES IN (19600,19601,19602,19603), +PARTITION p4901 VALUES IN (19604,19605,19606,19607), +PARTITION p4902 VALUES IN (19608,19609,19610,19611), +PARTITION p4903 VALUES IN (19612,19613,19614,19615), +PARTITION p4904 VALUES IN (19616,19617,19618,19619), +PARTITION p4905 VALUES IN (19620,19621,19622,19623), +PARTITION p4906 VALUES IN (19624,19625,19626,19627), +PARTITION p4907 VALUES IN (19628,19629,19630,19631), +PARTITION p4908 VALUES IN (19632,19633,19634,19635), +PARTITION p4909 VALUES IN (19636,19637,19638,19639), +PARTITION p4910 VALUES IN (19640,19641,19642,19643), +PARTITION p4911 VALUES IN (19644,19645,19646,19647), +PARTITION p4912 VALUES IN (19648,19649,19650,19651), +PARTITION p4913 VALUES IN (19652,19653,19654,19655), +PARTITION p4914 VALUES IN (19656,19657,19658,19659), +PARTITION p4915 VALUES IN (19660,19661,19662,19663), +PARTITION p4916 VALUES IN (19664,19665,19666,19667), +PARTITION p4917 VALUES IN (19668,19669,19670,19671), +PARTITION p4918 VALUES IN (19672,19673,19674,19675), +PARTITION p4919 VALUES IN (19676,19677,19678,19679), +PARTITION p4920 VALUES IN (19680,19681,19682,19683), +PARTITION p4921 VALUES IN (19684,19685,19686,19687), +PARTITION p4922 VALUES IN (19688,19689,19690,19691), +PARTITION p4923 VALUES IN (19692,19693,19694,19695), +PARTITION p4924 VALUES IN (19696,19697,19698,19699), +PARTITION p4925 VALUES IN (19700,19701,19702,19703), +PARTITION p4926 VALUES IN (19704,19705,19706,19707), +PARTITION p4927 VALUES IN (19708,19709,19710,19711), +PARTITION p4928 VALUES IN (19712,19713,19714,19715), +PARTITION p4929 VALUES IN (19716,19717,19718,19719), +PARTITION p4930 VALUES IN (19720,19721,19722,19723), +PARTITION p4931 VALUES IN (19724,19725,19726,19727), +PARTITION p4932 VALUES IN (19728,19729,19730,19731), +PARTITION p4933 VALUES IN (19732,19733,19734,19735), +PARTITION p4934 VALUES IN (19736,19737,19738,19739), +PARTITION p4935 VALUES IN (19740,19741,19742,19743), +PARTITION p4936 VALUES IN (19744,19745,19746,19747), +PARTITION p4937 VALUES IN (19748,19749,19750,19751), +PARTITION p4938 VALUES IN (19752,19753,19754,19755), +PARTITION p4939 VALUES IN (19756,19757,19758,19759), +PARTITION p4940 VALUES IN (19760,19761,19762,19763), +PARTITION p4941 VALUES IN (19764,19765,19766,19767), +PARTITION p4942 VALUES IN (19768,19769,19770,19771), +PARTITION p4943 VALUES IN (19772,19773,19774,19775), +PARTITION p4944 VALUES IN (19776,19777,19778,19779), +PARTITION p4945 VALUES IN (19780,19781,19782,19783), +PARTITION p4946 VALUES IN (19784,19785,19786,19787), +PARTITION p4947 VALUES IN (19788,19789,19790,19791), +PARTITION p4948 VALUES IN (19792,19793,19794,19795), +PARTITION p4949 VALUES IN (19796,19797,19798,19799), +PARTITION p4950 VALUES IN (19800,19801,19802,19803), +PARTITION p4951 VALUES IN (19804,19805,19806,19807), +PARTITION p4952 VALUES IN (19808,19809,19810,19811), +PARTITION p4953 VALUES IN (19812,19813,19814,19815), +PARTITION p4954 VALUES IN (19816,19817,19818,19819), +PARTITION p4955 VALUES IN (19820,19821,19822,19823), +PARTITION p4956 VALUES IN (19824,19825,19826,19827), +PARTITION p4957 VALUES IN (19828,19829,19830,19831), +PARTITION p4958 VALUES IN (19832,19833,19834,19835), +PARTITION p4959 VALUES IN (19836,19837,19838,19839), +PARTITION p4960 VALUES IN (19840,19841,19842,19843), +PARTITION p4961 VALUES IN (19844,19845,19846,19847), +PARTITION p4962 VALUES IN (19848,19849,19850,19851), +PARTITION p4963 VALUES IN (19852,19853,19854,19855), +PARTITION p4964 VALUES IN (19856,19857,19858,19859), +PARTITION p4965 VALUES IN (19860,19861,19862,19863), +PARTITION p4966 VALUES IN (19864,19865,19866,19867), +PARTITION p4967 VALUES IN (19868,19869,19870,19871), +PARTITION p4968 VALUES IN (19872,19873,19874,19875), +PARTITION p4969 VALUES IN (19876,19877,19878,19879), +PARTITION p4970 VALUES IN (19880,19881,19882,19883), +PARTITION p4971 VALUES IN (19884,19885,19886,19887), +PARTITION p4972 VALUES IN (19888,19889,19890,19891), +PARTITION p4973 VALUES IN (19892,19893,19894,19895), +PARTITION p4974 VALUES IN (19896,19897,19898,19899), +PARTITION p4975 VALUES IN (19900,19901,19902,19903), +PARTITION p4976 VALUES IN (19904,19905,19906,19907), +PARTITION p4977 VALUES IN (19908,19909,19910,19911), +PARTITION p4978 VALUES IN (19912,19913,19914,19915), +PARTITION p4979 VALUES IN (19916,19917,19918,19919), +PARTITION p4980 VALUES IN (19920,19921,19922,19923), +PARTITION p4981 VALUES IN (19924,19925,19926,19927), +PARTITION p4982 VALUES IN (19928,19929,19930,19931), +PARTITION p4983 VALUES IN (19932,19933,19934,19935), +PARTITION p4984 VALUES IN (19936,19937,19938,19939), +PARTITION p4985 VALUES IN (19940,19941,19942,19943), +PARTITION p4986 VALUES IN (19944,19945,19946,19947), +PARTITION p4987 VALUES IN (19948,19949,19950,19951), +PARTITION p4988 VALUES IN (19952,19953,19954,19955), +PARTITION p4989 VALUES IN (19956,19957,19958,19959), +PARTITION p4990 VALUES IN (19960,19961,19962,19963), +PARTITION p4991 VALUES IN (19964,19965,19966,19967), +PARTITION p4992 VALUES IN (19968,19969,19970,19971), +PARTITION p4993 VALUES IN (19972,19973,19974,19975), +PARTITION p4994 VALUES IN (19976,19977,19978,19979), +PARTITION p4995 VALUES IN (19980,19981,19982,19983), +PARTITION p4996 VALUES IN (19984,19985,19986,19987), +PARTITION p4997 VALUES IN (19988,19989,19990,19991), +PARTITION p4998 VALUES IN (19992,19993,19994,19995), +PARTITION p4999 VALUES IN (19996,19997,19998,19999), +PARTITION p5000 VALUES IN (20000,20001,20002,20003), +PARTITION p5001 VALUES IN (20004,20005,20006,20007), +PARTITION p5002 VALUES IN (20008,20009,20010,20011), +PARTITION p5003 VALUES IN (20012,20013,20014,20015), +PARTITION p5004 VALUES IN (20016,20017,20018,20019), +PARTITION p5005 VALUES IN (20020,20021,20022,20023), +PARTITION p5006 VALUES IN (20024,20025,20026,20027), +PARTITION p5007 VALUES IN (20028,20029,20030,20031), +PARTITION p5008 VALUES IN (20032,20033,20034,20035), +PARTITION p5009 VALUES IN (20036,20037,20038,20039), +PARTITION p5010 VALUES IN (20040,20041,20042,20043), +PARTITION p5011 VALUES IN (20044,20045,20046,20047), +PARTITION p5012 VALUES IN (20048,20049,20050,20051), +PARTITION p5013 VALUES IN (20052,20053,20054,20055), +PARTITION p5014 VALUES IN (20056,20057,20058,20059), +PARTITION p5015 VALUES IN (20060,20061,20062,20063), +PARTITION p5016 VALUES IN (20064,20065,20066,20067), +PARTITION p5017 VALUES IN (20068,20069,20070,20071), +PARTITION p5018 VALUES IN (20072,20073,20074,20075), +PARTITION p5019 VALUES IN (20076,20077,20078,20079), +PARTITION p5020 VALUES IN (20080,20081,20082,20083), +PARTITION p5021 VALUES IN (20084,20085,20086,20087), +PARTITION p5022 VALUES IN (20088,20089,20090,20091), +PARTITION p5023 VALUES IN (20092,20093,20094,20095), +PARTITION p5024 VALUES IN (20096,20097,20098,20099), +PARTITION p5025 VALUES IN (20100,20101,20102,20103), +PARTITION p5026 VALUES IN (20104,20105,20106,20107), +PARTITION p5027 VALUES IN (20108,20109,20110,20111), +PARTITION p5028 VALUES IN (20112,20113,20114,20115), +PARTITION p5029 VALUES IN (20116,20117,20118,20119), +PARTITION p5030 VALUES IN (20120,20121,20122,20123), +PARTITION p5031 VALUES IN (20124,20125,20126,20127), +PARTITION p5032 VALUES IN (20128,20129,20130,20131), +PARTITION p5033 VALUES IN (20132,20133,20134,20135), +PARTITION p5034 VALUES IN (20136,20137,20138,20139), +PARTITION p5035 VALUES IN (20140,20141,20142,20143), +PARTITION p5036 VALUES IN (20144,20145,20146,20147), +PARTITION p5037 VALUES IN (20148,20149,20150,20151), +PARTITION p5038 VALUES IN (20152,20153,20154,20155), +PARTITION p5039 VALUES IN (20156,20157,20158,20159), +PARTITION p5040 VALUES IN (20160,20161,20162,20163), +PARTITION p5041 VALUES IN (20164,20165,20166,20167), +PARTITION p5042 VALUES IN (20168,20169,20170,20171), +PARTITION p5043 VALUES IN (20172,20173,20174,20175), +PARTITION p5044 VALUES IN (20176,20177,20178,20179), +PARTITION p5045 VALUES IN (20180,20181,20182,20183), +PARTITION p5046 VALUES IN (20184,20185,20186,20187), +PARTITION p5047 VALUES IN (20188,20189,20190,20191), +PARTITION p5048 VALUES IN (20192,20193,20194,20195), +PARTITION p5049 VALUES IN (20196,20197,20198,20199), +PARTITION p5050 VALUES IN (20200,20201,20202,20203), +PARTITION p5051 VALUES IN (20204,20205,20206,20207), +PARTITION p5052 VALUES IN (20208,20209,20210,20211), +PARTITION p5053 VALUES IN (20212,20213,20214,20215), +PARTITION p5054 VALUES IN (20216,20217,20218,20219), +PARTITION p5055 VALUES IN (20220,20221,20222,20223), +PARTITION p5056 VALUES IN (20224,20225,20226,20227), +PARTITION p5057 VALUES IN (20228,20229,20230,20231), +PARTITION p5058 VALUES IN (20232,20233,20234,20235), +PARTITION p5059 VALUES IN (20236,20237,20238,20239), +PARTITION p5060 VALUES IN (20240,20241,20242,20243), +PARTITION p5061 VALUES IN (20244,20245,20246,20247), +PARTITION p5062 VALUES IN (20248,20249,20250,20251), +PARTITION p5063 VALUES IN (20252,20253,20254,20255), +PARTITION p5064 VALUES IN (20256,20257,20258,20259), +PARTITION p5065 VALUES IN (20260,20261,20262,20263), +PARTITION p5066 VALUES IN (20264,20265,20266,20267), +PARTITION p5067 VALUES IN (20268,20269,20270,20271), +PARTITION p5068 VALUES IN (20272,20273,20274,20275), +PARTITION p5069 VALUES IN (20276,20277,20278,20279), +PARTITION p5070 VALUES IN (20280,20281,20282,20283), +PARTITION p5071 VALUES IN (20284,20285,20286,20287), +PARTITION p5072 VALUES IN (20288,20289,20290,20291), +PARTITION p5073 VALUES IN (20292,20293,20294,20295), +PARTITION p5074 VALUES IN (20296,20297,20298,20299), +PARTITION p5075 VALUES IN (20300,20301,20302,20303), +PARTITION p5076 VALUES IN (20304,20305,20306,20307), +PARTITION p5077 VALUES IN (20308,20309,20310,20311), +PARTITION p5078 VALUES IN (20312,20313,20314,20315), +PARTITION p5079 VALUES IN (20316,20317,20318,20319), +PARTITION p5080 VALUES IN (20320,20321,20322,20323), +PARTITION p5081 VALUES IN (20324,20325,20326,20327), +PARTITION p5082 VALUES IN (20328,20329,20330,20331), +PARTITION p5083 VALUES IN (20332,20333,20334,20335), +PARTITION p5084 VALUES IN (20336,20337,20338,20339), +PARTITION p5085 VALUES IN (20340,20341,20342,20343), +PARTITION p5086 VALUES IN (20344,20345,20346,20347), +PARTITION p5087 VALUES IN (20348,20349,20350,20351), +PARTITION p5088 VALUES IN (20352,20353,20354,20355), +PARTITION p5089 VALUES IN (20356,20357,20358,20359), +PARTITION p5090 VALUES IN (20360,20361,20362,20363), +PARTITION p5091 VALUES IN (20364,20365,20366,20367), +PARTITION p5092 VALUES IN (20368,20369,20370,20371), +PARTITION p5093 VALUES IN (20372,20373,20374,20375), +PARTITION p5094 VALUES IN (20376,20377,20378,20379), +PARTITION p5095 VALUES IN (20380,20381,20382,20383), +PARTITION p5096 VALUES IN (20384,20385,20386,20387), +PARTITION p5097 VALUES IN (20388,20389,20390,20391), +PARTITION p5098 VALUES IN (20392,20393,20394,20395), +PARTITION p5099 VALUES IN (20396,20397,20398,20399), +PARTITION p5100 VALUES IN (20400,20401,20402,20403), +PARTITION p5101 VALUES IN (20404,20405,20406,20407), +PARTITION p5102 VALUES IN (20408,20409,20410,20411), +PARTITION p5103 VALUES IN (20412,20413,20414,20415), +PARTITION p5104 VALUES IN (20416,20417,20418,20419), +PARTITION p5105 VALUES IN (20420,20421,20422,20423), +PARTITION p5106 VALUES IN (20424,20425,20426,20427), +PARTITION p5107 VALUES IN (20428,20429,20430,20431), +PARTITION p5108 VALUES IN (20432,20433,20434,20435), +PARTITION p5109 VALUES IN (20436,20437,20438,20439), +PARTITION p5110 VALUES IN (20440,20441,20442,20443), +PARTITION p5111 VALUES IN (20444,20445,20446,20447), +PARTITION p5112 VALUES IN (20448,20449,20450,20451), +PARTITION p5113 VALUES IN (20452,20453,20454,20455), +PARTITION p5114 VALUES IN (20456,20457,20458,20459), +PARTITION p5115 VALUES IN (20460,20461,20462,20463), +PARTITION p5116 VALUES IN (20464,20465,20466,20467), +PARTITION p5117 VALUES IN (20468,20469,20470,20471), +PARTITION p5118 VALUES IN (20472,20473,20474,20475), +PARTITION p5119 VALUES IN (20476,20477,20478,20479), +PARTITION p5120 VALUES IN (20480,20481,20482,20483), +PARTITION p5121 VALUES IN (20484,20485,20486,20487), +PARTITION p5122 VALUES IN (20488,20489,20490,20491), +PARTITION p5123 VALUES IN (20492,20493,20494,20495), +PARTITION p5124 VALUES IN (20496,20497,20498,20499), +PARTITION p5125 VALUES IN (20500,20501,20502,20503), +PARTITION p5126 VALUES IN (20504,20505,20506,20507), +PARTITION p5127 VALUES IN (20508,20509,20510,20511), +PARTITION p5128 VALUES IN (20512,20513,20514,20515), +PARTITION p5129 VALUES IN (20516,20517,20518,20519), +PARTITION p5130 VALUES IN (20520,20521,20522,20523), +PARTITION p5131 VALUES IN (20524,20525,20526,20527), +PARTITION p5132 VALUES IN (20528,20529,20530,20531), +PARTITION p5133 VALUES IN (20532,20533,20534,20535), +PARTITION p5134 VALUES IN (20536,20537,20538,20539), +PARTITION p5135 VALUES IN (20540,20541,20542,20543), +PARTITION p5136 VALUES IN (20544,20545,20546,20547), +PARTITION p5137 VALUES IN (20548,20549,20550,20551), +PARTITION p5138 VALUES IN (20552,20553,20554,20555), +PARTITION p5139 VALUES IN (20556,20557,20558,20559), +PARTITION p5140 VALUES IN (20560,20561,20562,20563), +PARTITION p5141 VALUES IN (20564,20565,20566,20567), +PARTITION p5142 VALUES IN (20568,20569,20570,20571), +PARTITION p5143 VALUES IN (20572,20573,20574,20575), +PARTITION p5144 VALUES IN (20576,20577,20578,20579), +PARTITION p5145 VALUES IN (20580,20581,20582,20583), +PARTITION p5146 VALUES IN (20584,20585,20586,20587), +PARTITION p5147 VALUES IN (20588,20589,20590,20591), +PARTITION p5148 VALUES IN (20592,20593,20594,20595), +PARTITION p5149 VALUES IN (20596,20597,20598,20599), +PARTITION p5150 VALUES IN (20600,20601,20602,20603), +PARTITION p5151 VALUES IN (20604,20605,20606,20607), +PARTITION p5152 VALUES IN (20608,20609,20610,20611), +PARTITION p5153 VALUES IN (20612,20613,20614,20615), +PARTITION p5154 VALUES IN (20616,20617,20618,20619), +PARTITION p5155 VALUES IN (20620,20621,20622,20623), +PARTITION p5156 VALUES IN (20624,20625,20626,20627), +PARTITION p5157 VALUES IN (20628,20629,20630,20631), +PARTITION p5158 VALUES IN (20632,20633,20634,20635), +PARTITION p5159 VALUES IN (20636,20637,20638,20639), +PARTITION p5160 VALUES IN (20640,20641,20642,20643), +PARTITION p5161 VALUES IN (20644,20645,20646,20647), +PARTITION p5162 VALUES IN (20648,20649,20650,20651), +PARTITION p5163 VALUES IN (20652,20653,20654,20655), +PARTITION p5164 VALUES IN (20656,20657,20658,20659), +PARTITION p5165 VALUES IN (20660,20661,20662,20663), +PARTITION p5166 VALUES IN (20664,20665,20666,20667), +PARTITION p5167 VALUES IN (20668,20669,20670,20671), +PARTITION p5168 VALUES IN (20672,20673,20674,20675), +PARTITION p5169 VALUES IN (20676,20677,20678,20679), +PARTITION p5170 VALUES IN (20680,20681,20682,20683), +PARTITION p5171 VALUES IN (20684,20685,20686,20687), +PARTITION p5172 VALUES IN (20688,20689,20690,20691), +PARTITION p5173 VALUES IN (20692,20693,20694,20695), +PARTITION p5174 VALUES IN (20696,20697,20698,20699), +PARTITION p5175 VALUES IN (20700,20701,20702,20703), +PARTITION p5176 VALUES IN (20704,20705,20706,20707), +PARTITION p5177 VALUES IN (20708,20709,20710,20711), +PARTITION p5178 VALUES IN (20712,20713,20714,20715), +PARTITION p5179 VALUES IN (20716,20717,20718,20719), +PARTITION p5180 VALUES IN (20720,20721,20722,20723), +PARTITION p5181 VALUES IN (20724,20725,20726,20727), +PARTITION p5182 VALUES IN (20728,20729,20730,20731), +PARTITION p5183 VALUES IN (20732,20733,20734,20735), +PARTITION p5184 VALUES IN (20736,20737,20738,20739), +PARTITION p5185 VALUES IN (20740,20741,20742,20743), +PARTITION p5186 VALUES IN (20744,20745,20746,20747), +PARTITION p5187 VALUES IN (20748,20749,20750,20751), +PARTITION p5188 VALUES IN (20752,20753,20754,20755), +PARTITION p5189 VALUES IN (20756,20757,20758,20759), +PARTITION p5190 VALUES IN (20760,20761,20762,20763), +PARTITION p5191 VALUES IN (20764,20765,20766,20767), +PARTITION p5192 VALUES IN (20768,20769,20770,20771), +PARTITION p5193 VALUES IN (20772,20773,20774,20775), +PARTITION p5194 VALUES IN (20776,20777,20778,20779), +PARTITION p5195 VALUES IN (20780,20781,20782,20783), +PARTITION p5196 VALUES IN (20784,20785,20786,20787), +PARTITION p5197 VALUES IN (20788,20789,20790,20791), +PARTITION p5198 VALUES IN (20792,20793,20794,20795), +PARTITION p5199 VALUES IN (20796,20797,20798,20799), +PARTITION p5200 VALUES IN (20800,20801,20802,20803), +PARTITION p5201 VALUES IN (20804,20805,20806,20807), +PARTITION p5202 VALUES IN (20808,20809,20810,20811), +PARTITION p5203 VALUES IN (20812,20813,20814,20815), +PARTITION p5204 VALUES IN (20816,20817,20818,20819), +PARTITION p5205 VALUES IN (20820,20821,20822,20823), +PARTITION p5206 VALUES IN (20824,20825,20826,20827), +PARTITION p5207 VALUES IN (20828,20829,20830,20831), +PARTITION p5208 VALUES IN (20832,20833,20834,20835), +PARTITION p5209 VALUES IN (20836,20837,20838,20839), +PARTITION p5210 VALUES IN (20840,20841,20842,20843), +PARTITION p5211 VALUES IN (20844,20845,20846,20847), +PARTITION p5212 VALUES IN (20848,20849,20850,20851), +PARTITION p5213 VALUES IN (20852,20853,20854,20855), +PARTITION p5214 VALUES IN (20856,20857,20858,20859), +PARTITION p5215 VALUES IN (20860,20861,20862,20863), +PARTITION p5216 VALUES IN (20864,20865,20866,20867), +PARTITION p5217 VALUES IN (20868,20869,20870,20871), +PARTITION p5218 VALUES IN (20872,20873,20874,20875), +PARTITION p5219 VALUES IN (20876,20877,20878,20879), +PARTITION p5220 VALUES IN (20880,20881,20882,20883), +PARTITION p5221 VALUES IN (20884,20885,20886,20887), +PARTITION p5222 VALUES IN (20888,20889,20890,20891), +PARTITION p5223 VALUES IN (20892,20893,20894,20895), +PARTITION p5224 VALUES IN (20896,20897,20898,20899), +PARTITION p5225 VALUES IN (20900,20901,20902,20903), +PARTITION p5226 VALUES IN (20904,20905,20906,20907), +PARTITION p5227 VALUES IN (20908,20909,20910,20911), +PARTITION p5228 VALUES IN (20912,20913,20914,20915), +PARTITION p5229 VALUES IN (20916,20917,20918,20919), +PARTITION p5230 VALUES IN (20920,20921,20922,20923), +PARTITION p5231 VALUES IN (20924,20925,20926,20927), +PARTITION p5232 VALUES IN (20928,20929,20930,20931), +PARTITION p5233 VALUES IN (20932,20933,20934,20935), +PARTITION p5234 VALUES IN (20936,20937,20938,20939), +PARTITION p5235 VALUES IN (20940,20941,20942,20943), +PARTITION p5236 VALUES IN (20944,20945,20946,20947), +PARTITION p5237 VALUES IN (20948,20949,20950,20951), +PARTITION p5238 VALUES IN (20952,20953,20954,20955), +PARTITION p5239 VALUES IN (20956,20957,20958,20959), +PARTITION p5240 VALUES IN (20960,20961,20962,20963), +PARTITION p5241 VALUES IN (20964,20965,20966,20967), +PARTITION p5242 VALUES IN (20968,20969,20970,20971), +PARTITION p5243 VALUES IN (20972,20973,20974,20975), +PARTITION p5244 VALUES IN (20976,20977,20978,20979), +PARTITION p5245 VALUES IN (20980,20981,20982,20983), +PARTITION p5246 VALUES IN (20984,20985,20986,20987), +PARTITION p5247 VALUES IN (20988,20989,20990,20991), +PARTITION p5248 VALUES IN (20992,20993,20994,20995), +PARTITION p5249 VALUES IN (20996,20997,20998,20999), +PARTITION p5250 VALUES IN (21000,21001,21002,21003), +PARTITION p5251 VALUES IN (21004,21005,21006,21007), +PARTITION p5252 VALUES IN (21008,21009,21010,21011), +PARTITION p5253 VALUES IN (21012,21013,21014,21015), +PARTITION p5254 VALUES IN (21016,21017,21018,21019), +PARTITION p5255 VALUES IN (21020,21021,21022,21023), +PARTITION p5256 VALUES IN (21024,21025,21026,21027), +PARTITION p5257 VALUES IN (21028,21029,21030,21031), +PARTITION p5258 VALUES IN (21032,21033,21034,21035), +PARTITION p5259 VALUES IN (21036,21037,21038,21039), +PARTITION p5260 VALUES IN (21040,21041,21042,21043), +PARTITION p5261 VALUES IN (21044,21045,21046,21047), +PARTITION p5262 VALUES IN (21048,21049,21050,21051), +PARTITION p5263 VALUES IN (21052,21053,21054,21055), +PARTITION p5264 VALUES IN (21056,21057,21058,21059), +PARTITION p5265 VALUES IN (21060,21061,21062,21063), +PARTITION p5266 VALUES IN (21064,21065,21066,21067), +PARTITION p5267 VALUES IN (21068,21069,21070,21071), +PARTITION p5268 VALUES IN (21072,21073,21074,21075), +PARTITION p5269 VALUES IN (21076,21077,21078,21079), +PARTITION p5270 VALUES IN (21080,21081,21082,21083), +PARTITION p5271 VALUES IN (21084,21085,21086,21087), +PARTITION p5272 VALUES IN (21088,21089,21090,21091), +PARTITION p5273 VALUES IN (21092,21093,21094,21095), +PARTITION p5274 VALUES IN (21096,21097,21098,21099), +PARTITION p5275 VALUES IN (21100,21101,21102,21103), +PARTITION p5276 VALUES IN (21104,21105,21106,21107), +PARTITION p5277 VALUES IN (21108,21109,21110,21111), +PARTITION p5278 VALUES IN (21112,21113,21114,21115), +PARTITION p5279 VALUES IN (21116,21117,21118,21119), +PARTITION p5280 VALUES IN (21120,21121,21122,21123), +PARTITION p5281 VALUES IN (21124,21125,21126,21127), +PARTITION p5282 VALUES IN (21128,21129,21130,21131), +PARTITION p5283 VALUES IN (21132,21133,21134,21135), +PARTITION p5284 VALUES IN (21136,21137,21138,21139), +PARTITION p5285 VALUES IN (21140,21141,21142,21143), +PARTITION p5286 VALUES IN (21144,21145,21146,21147), +PARTITION p5287 VALUES IN (21148,21149,21150,21151), +PARTITION p5288 VALUES IN (21152,21153,21154,21155), +PARTITION p5289 VALUES IN (21156,21157,21158,21159), +PARTITION p5290 VALUES IN (21160,21161,21162,21163), +PARTITION p5291 VALUES IN (21164,21165,21166,21167), +PARTITION p5292 VALUES IN (21168,21169,21170,21171), +PARTITION p5293 VALUES IN (21172,21173,21174,21175), +PARTITION p5294 VALUES IN (21176,21177,21178,21179), +PARTITION p5295 VALUES IN (21180,21181,21182,21183), +PARTITION p5296 VALUES IN (21184,21185,21186,21187), +PARTITION p5297 VALUES IN (21188,21189,21190,21191), +PARTITION p5298 VALUES IN (21192,21193,21194,21195), +PARTITION p5299 VALUES IN (21196,21197,21198,21199), +PARTITION p5300 VALUES IN (21200,21201,21202,21203), +PARTITION p5301 VALUES IN (21204,21205,21206,21207), +PARTITION p5302 VALUES IN (21208,21209,21210,21211), +PARTITION p5303 VALUES IN (21212,21213,21214,21215), +PARTITION p5304 VALUES IN (21216,21217,21218,21219), +PARTITION p5305 VALUES IN (21220,21221,21222,21223), +PARTITION p5306 VALUES IN (21224,21225,21226,21227), +PARTITION p5307 VALUES IN (21228,21229,21230,21231), +PARTITION p5308 VALUES IN (21232,21233,21234,21235), +PARTITION p5309 VALUES IN (21236,21237,21238,21239), +PARTITION p5310 VALUES IN (21240,21241,21242,21243), +PARTITION p5311 VALUES IN (21244,21245,21246,21247), +PARTITION p5312 VALUES IN (21248,21249,21250,21251), +PARTITION p5313 VALUES IN (21252,21253,21254,21255), +PARTITION p5314 VALUES IN (21256,21257,21258,21259), +PARTITION p5315 VALUES IN (21260,21261,21262,21263), +PARTITION p5316 VALUES IN (21264,21265,21266,21267), +PARTITION p5317 VALUES IN (21268,21269,21270,21271), +PARTITION p5318 VALUES IN (21272,21273,21274,21275), +PARTITION p5319 VALUES IN (21276,21277,21278,21279), +PARTITION p5320 VALUES IN (21280,21281,21282,21283), +PARTITION p5321 VALUES IN (21284,21285,21286,21287), +PARTITION p5322 VALUES IN (21288,21289,21290,21291), +PARTITION p5323 VALUES IN (21292,21293,21294,21295), +PARTITION p5324 VALUES IN (21296,21297,21298,21299), +PARTITION p5325 VALUES IN (21300,21301,21302,21303), +PARTITION p5326 VALUES IN (21304,21305,21306,21307), +PARTITION p5327 VALUES IN (21308,21309,21310,21311), +PARTITION p5328 VALUES IN (21312,21313,21314,21315), +PARTITION p5329 VALUES IN (21316,21317,21318,21319), +PARTITION p5330 VALUES IN (21320,21321,21322,21323), +PARTITION p5331 VALUES IN (21324,21325,21326,21327), +PARTITION p5332 VALUES IN (21328,21329,21330,21331), +PARTITION p5333 VALUES IN (21332,21333,21334,21335), +PARTITION p5334 VALUES IN (21336,21337,21338,21339), +PARTITION p5335 VALUES IN (21340,21341,21342,21343), +PARTITION p5336 VALUES IN (21344,21345,21346,21347), +PARTITION p5337 VALUES IN (21348,21349,21350,21351), +PARTITION p5338 VALUES IN (21352,21353,21354,21355), +PARTITION p5339 VALUES IN (21356,21357,21358,21359), +PARTITION p5340 VALUES IN (21360,21361,21362,21363), +PARTITION p5341 VALUES IN (21364,21365,21366,21367), +PARTITION p5342 VALUES IN (21368,21369,21370,21371), +PARTITION p5343 VALUES IN (21372,21373,21374,21375), +PARTITION p5344 VALUES IN (21376,21377,21378,21379), +PARTITION p5345 VALUES IN (21380,21381,21382,21383), +PARTITION p5346 VALUES IN (21384,21385,21386,21387), +PARTITION p5347 VALUES IN (21388,21389,21390,21391), +PARTITION p5348 VALUES IN (21392,21393,21394,21395), +PARTITION p5349 VALUES IN (21396,21397,21398,21399), +PARTITION p5350 VALUES IN (21400,21401,21402,21403), +PARTITION p5351 VALUES IN (21404,21405,21406,21407), +PARTITION p5352 VALUES IN (21408,21409,21410,21411), +PARTITION p5353 VALUES IN (21412,21413,21414,21415), +PARTITION p5354 VALUES IN (21416,21417,21418,21419), +PARTITION p5355 VALUES IN (21420,21421,21422,21423), +PARTITION p5356 VALUES IN (21424,21425,21426,21427), +PARTITION p5357 VALUES IN (21428,21429,21430,21431), +PARTITION p5358 VALUES IN (21432,21433,21434,21435), +PARTITION p5359 VALUES IN (21436,21437,21438,21439), +PARTITION p5360 VALUES IN (21440,21441,21442,21443), +PARTITION p5361 VALUES IN (21444,21445,21446,21447), +PARTITION p5362 VALUES IN (21448,21449,21450,21451), +PARTITION p5363 VALUES IN (21452,21453,21454,21455), +PARTITION p5364 VALUES IN (21456,21457,21458,21459), +PARTITION p5365 VALUES IN (21460,21461,21462,21463), +PARTITION p5366 VALUES IN (21464,21465,21466,21467), +PARTITION p5367 VALUES IN (21468,21469,21470,21471), +PARTITION p5368 VALUES IN (21472,21473,21474,21475), +PARTITION p5369 VALUES IN (21476,21477,21478,21479), +PARTITION p5370 VALUES IN (21480,21481,21482,21483), +PARTITION p5371 VALUES IN (21484,21485,21486,21487), +PARTITION p5372 VALUES IN (21488,21489,21490,21491), +PARTITION p5373 VALUES IN (21492,21493,21494,21495), +PARTITION p5374 VALUES IN (21496,21497,21498,21499), +PARTITION p5375 VALUES IN (21500,21501,21502,21503), +PARTITION p5376 VALUES IN (21504,21505,21506,21507), +PARTITION p5377 VALUES IN (21508,21509,21510,21511), +PARTITION p5378 VALUES IN (21512,21513,21514,21515), +PARTITION p5379 VALUES IN (21516,21517,21518,21519), +PARTITION p5380 VALUES IN (21520,21521,21522,21523), +PARTITION p5381 VALUES IN (21524,21525,21526,21527), +PARTITION p5382 VALUES IN (21528,21529,21530,21531), +PARTITION p5383 VALUES IN (21532,21533,21534,21535), +PARTITION p5384 VALUES IN (21536,21537,21538,21539), +PARTITION p5385 VALUES IN (21540,21541,21542,21543), +PARTITION p5386 VALUES IN (21544,21545,21546,21547), +PARTITION p5387 VALUES IN (21548,21549,21550,21551), +PARTITION p5388 VALUES IN (21552,21553,21554,21555), +PARTITION p5389 VALUES IN (21556,21557,21558,21559), +PARTITION p5390 VALUES IN (21560,21561,21562,21563), +PARTITION p5391 VALUES IN (21564,21565,21566,21567), +PARTITION p5392 VALUES IN (21568,21569,21570,21571), +PARTITION p5393 VALUES IN (21572,21573,21574,21575), +PARTITION p5394 VALUES IN (21576,21577,21578,21579), +PARTITION p5395 VALUES IN (21580,21581,21582,21583), +PARTITION p5396 VALUES IN (21584,21585,21586,21587), +PARTITION p5397 VALUES IN (21588,21589,21590,21591), +PARTITION p5398 VALUES IN (21592,21593,21594,21595), +PARTITION p5399 VALUES IN (21596,21597,21598,21599), +PARTITION p5400 VALUES IN (21600,21601,21602,21603), +PARTITION p5401 VALUES IN (21604,21605,21606,21607), +PARTITION p5402 VALUES IN (21608,21609,21610,21611), +PARTITION p5403 VALUES IN (21612,21613,21614,21615), +PARTITION p5404 VALUES IN (21616,21617,21618,21619), +PARTITION p5405 VALUES IN (21620,21621,21622,21623), +PARTITION p5406 VALUES IN (21624,21625,21626,21627), +PARTITION p5407 VALUES IN (21628,21629,21630,21631), +PARTITION p5408 VALUES IN (21632,21633,21634,21635), +PARTITION p5409 VALUES IN (21636,21637,21638,21639), +PARTITION p5410 VALUES IN (21640,21641,21642,21643), +PARTITION p5411 VALUES IN (21644,21645,21646,21647), +PARTITION p5412 VALUES IN (21648,21649,21650,21651), +PARTITION p5413 VALUES IN (21652,21653,21654,21655), +PARTITION p5414 VALUES IN (21656,21657,21658,21659), +PARTITION p5415 VALUES IN (21660,21661,21662,21663), +PARTITION p5416 VALUES IN (21664,21665,21666,21667), +PARTITION p5417 VALUES IN (21668,21669,21670,21671), +PARTITION p5418 VALUES IN (21672,21673,21674,21675), +PARTITION p5419 VALUES IN (21676,21677,21678,21679), +PARTITION p5420 VALUES IN (21680,21681,21682,21683), +PARTITION p5421 VALUES IN (21684,21685,21686,21687), +PARTITION p5422 VALUES IN (21688,21689,21690,21691), +PARTITION p5423 VALUES IN (21692,21693,21694,21695), +PARTITION p5424 VALUES IN (21696,21697,21698,21699), +PARTITION p5425 VALUES IN (21700,21701,21702,21703), +PARTITION p5426 VALUES IN (21704,21705,21706,21707), +PARTITION p5427 VALUES IN (21708,21709,21710,21711), +PARTITION p5428 VALUES IN (21712,21713,21714,21715), +PARTITION p5429 VALUES IN (21716,21717,21718,21719), +PARTITION p5430 VALUES IN (21720,21721,21722,21723), +PARTITION p5431 VALUES IN (21724,21725,21726,21727), +PARTITION p5432 VALUES IN (21728,21729,21730,21731), +PARTITION p5433 VALUES IN (21732,21733,21734,21735), +PARTITION p5434 VALUES IN (21736,21737,21738,21739), +PARTITION p5435 VALUES IN (21740,21741,21742,21743), +PARTITION p5436 VALUES IN (21744,21745,21746,21747), +PARTITION p5437 VALUES IN (21748,21749,21750,21751), +PARTITION p5438 VALUES IN (21752,21753,21754,21755), +PARTITION p5439 VALUES IN (21756,21757,21758,21759), +PARTITION p5440 VALUES IN (21760,21761,21762,21763), +PARTITION p5441 VALUES IN (21764,21765,21766,21767), +PARTITION p5442 VALUES IN (21768,21769,21770,21771), +PARTITION p5443 VALUES IN (21772,21773,21774,21775), +PARTITION p5444 VALUES IN (21776,21777,21778,21779), +PARTITION p5445 VALUES IN (21780,21781,21782,21783), +PARTITION p5446 VALUES IN (21784,21785,21786,21787), +PARTITION p5447 VALUES IN (21788,21789,21790,21791), +PARTITION p5448 VALUES IN (21792,21793,21794,21795), +PARTITION p5449 VALUES IN (21796,21797,21798,21799), +PARTITION p5450 VALUES IN (21800,21801,21802,21803), +PARTITION p5451 VALUES IN (21804,21805,21806,21807), +PARTITION p5452 VALUES IN (21808,21809,21810,21811), +PARTITION p5453 VALUES IN (21812,21813,21814,21815), +PARTITION p5454 VALUES IN (21816,21817,21818,21819), +PARTITION p5455 VALUES IN (21820,21821,21822,21823), +PARTITION p5456 VALUES IN (21824,21825,21826,21827), +PARTITION p5457 VALUES IN (21828,21829,21830,21831), +PARTITION p5458 VALUES IN (21832,21833,21834,21835), +PARTITION p5459 VALUES IN (21836,21837,21838,21839), +PARTITION p5460 VALUES IN (21840,21841,21842,21843), +PARTITION p5461 VALUES IN (21844,21845,21846,21847), +PARTITION p5462 VALUES IN (21848,21849,21850,21851), +PARTITION p5463 VALUES IN (21852,21853,21854,21855), +PARTITION p5464 VALUES IN (21856,21857,21858,21859), +PARTITION p5465 VALUES IN (21860,21861,21862,21863), +PARTITION p5466 VALUES IN (21864,21865,21866,21867), +PARTITION p5467 VALUES IN (21868,21869,21870,21871), +PARTITION p5468 VALUES IN (21872,21873,21874,21875), +PARTITION p5469 VALUES IN (21876,21877,21878,21879), +PARTITION p5470 VALUES IN (21880,21881,21882,21883), +PARTITION p5471 VALUES IN (21884,21885,21886,21887), +PARTITION p5472 VALUES IN (21888,21889,21890,21891), +PARTITION p5473 VALUES IN (21892,21893,21894,21895), +PARTITION p5474 VALUES IN (21896,21897,21898,21899), +PARTITION p5475 VALUES IN (21900,21901,21902,21903), +PARTITION p5476 VALUES IN (21904,21905,21906,21907), +PARTITION p5477 VALUES IN (21908,21909,21910,21911), +PARTITION p5478 VALUES IN (21912,21913,21914,21915), +PARTITION p5479 VALUES IN (21916,21917,21918,21919), +PARTITION p5480 VALUES IN (21920,21921,21922,21923), +PARTITION p5481 VALUES IN (21924,21925,21926,21927), +PARTITION p5482 VALUES IN (21928,21929,21930,21931), +PARTITION p5483 VALUES IN (21932,21933,21934,21935), +PARTITION p5484 VALUES IN (21936,21937,21938,21939), +PARTITION p5485 VALUES IN (21940,21941,21942,21943), +PARTITION p5486 VALUES IN (21944,21945,21946,21947), +PARTITION p5487 VALUES IN (21948,21949,21950,21951), +PARTITION p5488 VALUES IN (21952,21953,21954,21955), +PARTITION p5489 VALUES IN (21956,21957,21958,21959), +PARTITION p5490 VALUES IN (21960,21961,21962,21963), +PARTITION p5491 VALUES IN (21964,21965,21966,21967), +PARTITION p5492 VALUES IN (21968,21969,21970,21971), +PARTITION p5493 VALUES IN (21972,21973,21974,21975), +PARTITION p5494 VALUES IN (21976,21977,21978,21979), +PARTITION p5495 VALUES IN (21980,21981,21982,21983), +PARTITION p5496 VALUES IN (21984,21985,21986,21987), +PARTITION p5497 VALUES IN (21988,21989,21990,21991), +PARTITION p5498 VALUES IN (21992,21993,21994,21995), +PARTITION p5499 VALUES IN (21996,21997,21998,21999), +PARTITION p5500 VALUES IN (22000,22001,22002,22003), +PARTITION p5501 VALUES IN (22004,22005,22006,22007), +PARTITION p5502 VALUES IN (22008,22009,22010,22011), +PARTITION p5503 VALUES IN (22012,22013,22014,22015), +PARTITION p5504 VALUES IN (22016,22017,22018,22019), +PARTITION p5505 VALUES IN (22020,22021,22022,22023), +PARTITION p5506 VALUES IN (22024,22025,22026,22027), +PARTITION p5507 VALUES IN (22028,22029,22030,22031), +PARTITION p5508 VALUES IN (22032,22033,22034,22035), +PARTITION p5509 VALUES IN (22036,22037,22038,22039), +PARTITION p5510 VALUES IN (22040,22041,22042,22043), +PARTITION p5511 VALUES IN (22044,22045,22046,22047), +PARTITION p5512 VALUES IN (22048,22049,22050,22051), +PARTITION p5513 VALUES IN (22052,22053,22054,22055), +PARTITION p5514 VALUES IN (22056,22057,22058,22059), +PARTITION p5515 VALUES IN (22060,22061,22062,22063), +PARTITION p5516 VALUES IN (22064,22065,22066,22067), +PARTITION p5517 VALUES IN (22068,22069,22070,22071), +PARTITION p5518 VALUES IN (22072,22073,22074,22075), +PARTITION p5519 VALUES IN (22076,22077,22078,22079), +PARTITION p5520 VALUES IN (22080,22081,22082,22083), +PARTITION p5521 VALUES IN (22084,22085,22086,22087), +PARTITION p5522 VALUES IN (22088,22089,22090,22091), +PARTITION p5523 VALUES IN (22092,22093,22094,22095), +PARTITION p5524 VALUES IN (22096,22097,22098,22099), +PARTITION p5525 VALUES IN (22100,22101,22102,22103), +PARTITION p5526 VALUES IN (22104,22105,22106,22107), +PARTITION p5527 VALUES IN (22108,22109,22110,22111), +PARTITION p5528 VALUES IN (22112,22113,22114,22115), +PARTITION p5529 VALUES IN (22116,22117,22118,22119), +PARTITION p5530 VALUES IN (22120,22121,22122,22123), +PARTITION p5531 VALUES IN (22124,22125,22126,22127), +PARTITION p5532 VALUES IN (22128,22129,22130,22131), +PARTITION p5533 VALUES IN (22132,22133,22134,22135), +PARTITION p5534 VALUES IN (22136,22137,22138,22139), +PARTITION p5535 VALUES IN (22140,22141,22142,22143), +PARTITION p5536 VALUES IN (22144,22145,22146,22147), +PARTITION p5537 VALUES IN (22148,22149,22150,22151), +PARTITION p5538 VALUES IN (22152,22153,22154,22155), +PARTITION p5539 VALUES IN (22156,22157,22158,22159), +PARTITION p5540 VALUES IN (22160,22161,22162,22163), +PARTITION p5541 VALUES IN (22164,22165,22166,22167), +PARTITION p5542 VALUES IN (22168,22169,22170,22171), +PARTITION p5543 VALUES IN (22172,22173,22174,22175), +PARTITION p5544 VALUES IN (22176,22177,22178,22179), +PARTITION p5545 VALUES IN (22180,22181,22182,22183), +PARTITION p5546 VALUES IN (22184,22185,22186,22187), +PARTITION p5547 VALUES IN (22188,22189,22190,22191), +PARTITION p5548 VALUES IN (22192,22193,22194,22195), +PARTITION p5549 VALUES IN (22196,22197,22198,22199), +PARTITION p5550 VALUES IN (22200,22201,22202,22203), +PARTITION p5551 VALUES IN (22204,22205,22206,22207), +PARTITION p5552 VALUES IN (22208,22209,22210,22211), +PARTITION p5553 VALUES IN (22212,22213,22214,22215), +PARTITION p5554 VALUES IN (22216,22217,22218,22219), +PARTITION p5555 VALUES IN (22220,22221,22222,22223), +PARTITION p5556 VALUES IN (22224,22225,22226,22227), +PARTITION p5557 VALUES IN (22228,22229,22230,22231), +PARTITION p5558 VALUES IN (22232,22233,22234,22235), +PARTITION p5559 VALUES IN (22236,22237,22238,22239), +PARTITION p5560 VALUES IN (22240,22241,22242,22243), +PARTITION p5561 VALUES IN (22244,22245,22246,22247), +PARTITION p5562 VALUES IN (22248,22249,22250,22251), +PARTITION p5563 VALUES IN (22252,22253,22254,22255), +PARTITION p5564 VALUES IN (22256,22257,22258,22259), +PARTITION p5565 VALUES IN (22260,22261,22262,22263), +PARTITION p5566 VALUES IN (22264,22265,22266,22267), +PARTITION p5567 VALUES IN (22268,22269,22270,22271), +PARTITION p5568 VALUES IN (22272,22273,22274,22275), +PARTITION p5569 VALUES IN (22276,22277,22278,22279), +PARTITION p5570 VALUES IN (22280,22281,22282,22283), +PARTITION p5571 VALUES IN (22284,22285,22286,22287), +PARTITION p5572 VALUES IN (22288,22289,22290,22291), +PARTITION p5573 VALUES IN (22292,22293,22294,22295), +PARTITION p5574 VALUES IN (22296,22297,22298,22299), +PARTITION p5575 VALUES IN (22300,22301,22302,22303), +PARTITION p5576 VALUES IN (22304,22305,22306,22307), +PARTITION p5577 VALUES IN (22308,22309,22310,22311), +PARTITION p5578 VALUES IN (22312,22313,22314,22315), +PARTITION p5579 VALUES IN (22316,22317,22318,22319), +PARTITION p5580 VALUES IN (22320,22321,22322,22323), +PARTITION p5581 VALUES IN (22324,22325,22326,22327), +PARTITION p5582 VALUES IN (22328,22329,22330,22331), +PARTITION p5583 VALUES IN (22332,22333,22334,22335), +PARTITION p5584 VALUES IN (22336,22337,22338,22339), +PARTITION p5585 VALUES IN (22340,22341,22342,22343), +PARTITION p5586 VALUES IN (22344,22345,22346,22347), +PARTITION p5587 VALUES IN (22348,22349,22350,22351), +PARTITION p5588 VALUES IN (22352,22353,22354,22355), +PARTITION p5589 VALUES IN (22356,22357,22358,22359), +PARTITION p5590 VALUES IN (22360,22361,22362,22363), +PARTITION p5591 VALUES IN (22364,22365,22366,22367), +PARTITION p5592 VALUES IN (22368,22369,22370,22371), +PARTITION p5593 VALUES IN (22372,22373,22374,22375), +PARTITION p5594 VALUES IN (22376,22377,22378,22379), +PARTITION p5595 VALUES IN (22380,22381,22382,22383), +PARTITION p5596 VALUES IN (22384,22385,22386,22387), +PARTITION p5597 VALUES IN (22388,22389,22390,22391), +PARTITION p5598 VALUES IN (22392,22393,22394,22395), +PARTITION p5599 VALUES IN (22396,22397,22398,22399), +PARTITION p5600 VALUES IN (22400,22401,22402,22403), +PARTITION p5601 VALUES IN (22404,22405,22406,22407), +PARTITION p5602 VALUES IN (22408,22409,22410,22411), +PARTITION p5603 VALUES IN (22412,22413,22414,22415), +PARTITION p5604 VALUES IN (22416,22417,22418,22419), +PARTITION p5605 VALUES IN (22420,22421,22422,22423), +PARTITION p5606 VALUES IN (22424,22425,22426,22427), +PARTITION p5607 VALUES IN (22428,22429,22430,22431), +PARTITION p5608 VALUES IN (22432,22433,22434,22435), +PARTITION p5609 VALUES IN (22436,22437,22438,22439), +PARTITION p5610 VALUES IN (22440,22441,22442,22443), +PARTITION p5611 VALUES IN (22444,22445,22446,22447), +PARTITION p5612 VALUES IN (22448,22449,22450,22451), +PARTITION p5613 VALUES IN (22452,22453,22454,22455), +PARTITION p5614 VALUES IN (22456,22457,22458,22459), +PARTITION p5615 VALUES IN (22460,22461,22462,22463), +PARTITION p5616 VALUES IN (22464,22465,22466,22467), +PARTITION p5617 VALUES IN (22468,22469,22470,22471), +PARTITION p5618 VALUES IN (22472,22473,22474,22475), +PARTITION p5619 VALUES IN (22476,22477,22478,22479), +PARTITION p5620 VALUES IN (22480,22481,22482,22483), +PARTITION p5621 VALUES IN (22484,22485,22486,22487), +PARTITION p5622 VALUES IN (22488,22489,22490,22491), +PARTITION p5623 VALUES IN (22492,22493,22494,22495), +PARTITION p5624 VALUES IN (22496,22497,22498,22499), +PARTITION p5625 VALUES IN (22500,22501,22502,22503), +PARTITION p5626 VALUES IN (22504,22505,22506,22507), +PARTITION p5627 VALUES IN (22508,22509,22510,22511), +PARTITION p5628 VALUES IN (22512,22513,22514,22515), +PARTITION p5629 VALUES IN (22516,22517,22518,22519), +PARTITION p5630 VALUES IN (22520,22521,22522,22523), +PARTITION p5631 VALUES IN (22524,22525,22526,22527), +PARTITION p5632 VALUES IN (22528,22529,22530,22531), +PARTITION p5633 VALUES IN (22532,22533,22534,22535), +PARTITION p5634 VALUES IN (22536,22537,22538,22539), +PARTITION p5635 VALUES IN (22540,22541,22542,22543), +PARTITION p5636 VALUES IN (22544,22545,22546,22547), +PARTITION p5637 VALUES IN (22548,22549,22550,22551), +PARTITION p5638 VALUES IN (22552,22553,22554,22555), +PARTITION p5639 VALUES IN (22556,22557,22558,22559), +PARTITION p5640 VALUES IN (22560,22561,22562,22563), +PARTITION p5641 VALUES IN (22564,22565,22566,22567), +PARTITION p5642 VALUES IN (22568,22569,22570,22571), +PARTITION p5643 VALUES IN (22572,22573,22574,22575), +PARTITION p5644 VALUES IN (22576,22577,22578,22579), +PARTITION p5645 VALUES IN (22580,22581,22582,22583), +PARTITION p5646 VALUES IN (22584,22585,22586,22587), +PARTITION p5647 VALUES IN (22588,22589,22590,22591), +PARTITION p5648 VALUES IN (22592,22593,22594,22595), +PARTITION p5649 VALUES IN (22596,22597,22598,22599), +PARTITION p5650 VALUES IN (22600,22601,22602,22603), +PARTITION p5651 VALUES IN (22604,22605,22606,22607), +PARTITION p5652 VALUES IN (22608,22609,22610,22611), +PARTITION p5653 VALUES IN (22612,22613,22614,22615), +PARTITION p5654 VALUES IN (22616,22617,22618,22619), +PARTITION p5655 VALUES IN (22620,22621,22622,22623), +PARTITION p5656 VALUES IN (22624,22625,22626,22627), +PARTITION p5657 VALUES IN (22628,22629,22630,22631), +PARTITION p5658 VALUES IN (22632,22633,22634,22635), +PARTITION p5659 VALUES IN (22636,22637,22638,22639), +PARTITION p5660 VALUES IN (22640,22641,22642,22643), +PARTITION p5661 VALUES IN (22644,22645,22646,22647), +PARTITION p5662 VALUES IN (22648,22649,22650,22651), +PARTITION p5663 VALUES IN (22652,22653,22654,22655), +PARTITION p5664 VALUES IN (22656,22657,22658,22659), +PARTITION p5665 VALUES IN (22660,22661,22662,22663), +PARTITION p5666 VALUES IN (22664,22665,22666,22667), +PARTITION p5667 VALUES IN (22668,22669,22670,22671), +PARTITION p5668 VALUES IN (22672,22673,22674,22675), +PARTITION p5669 VALUES IN (22676,22677,22678,22679), +PARTITION p5670 VALUES IN (22680,22681,22682,22683), +PARTITION p5671 VALUES IN (22684,22685,22686,22687), +PARTITION p5672 VALUES IN (22688,22689,22690,22691), +PARTITION p5673 VALUES IN (22692,22693,22694,22695), +PARTITION p5674 VALUES IN (22696,22697,22698,22699), +PARTITION p5675 VALUES IN (22700,22701,22702,22703), +PARTITION p5676 VALUES IN (22704,22705,22706,22707), +PARTITION p5677 VALUES IN (22708,22709,22710,22711), +PARTITION p5678 VALUES IN (22712,22713,22714,22715), +PARTITION p5679 VALUES IN (22716,22717,22718,22719), +PARTITION p5680 VALUES IN (22720,22721,22722,22723), +PARTITION p5681 VALUES IN (22724,22725,22726,22727), +PARTITION p5682 VALUES IN (22728,22729,22730,22731), +PARTITION p5683 VALUES IN (22732,22733,22734,22735), +PARTITION p5684 VALUES IN (22736,22737,22738,22739), +PARTITION p5685 VALUES IN (22740,22741,22742,22743), +PARTITION p5686 VALUES IN (22744,22745,22746,22747), +PARTITION p5687 VALUES IN (22748,22749,22750,22751), +PARTITION p5688 VALUES IN (22752,22753,22754,22755), +PARTITION p5689 VALUES IN (22756,22757,22758,22759), +PARTITION p5690 VALUES IN (22760,22761,22762,22763), +PARTITION p5691 VALUES IN (22764,22765,22766,22767), +PARTITION p5692 VALUES IN (22768,22769,22770,22771), +PARTITION p5693 VALUES IN (22772,22773,22774,22775), +PARTITION p5694 VALUES IN (22776,22777,22778,22779), +PARTITION p5695 VALUES IN (22780,22781,22782,22783), +PARTITION p5696 VALUES IN (22784,22785,22786,22787), +PARTITION p5697 VALUES IN (22788,22789,22790,22791), +PARTITION p5698 VALUES IN (22792,22793,22794,22795), +PARTITION p5699 VALUES IN (22796,22797,22798,22799), +PARTITION p5700 VALUES IN (22800,22801,22802,22803), +PARTITION p5701 VALUES IN (22804,22805,22806,22807), +PARTITION p5702 VALUES IN (22808,22809,22810,22811), +PARTITION p5703 VALUES IN (22812,22813,22814,22815), +PARTITION p5704 VALUES IN (22816,22817,22818,22819), +PARTITION p5705 VALUES IN (22820,22821,22822,22823), +PARTITION p5706 VALUES IN (22824,22825,22826,22827), +PARTITION p5707 VALUES IN (22828,22829,22830,22831), +PARTITION p5708 VALUES IN (22832,22833,22834,22835), +PARTITION p5709 VALUES IN (22836,22837,22838,22839), +PARTITION p5710 VALUES IN (22840,22841,22842,22843), +PARTITION p5711 VALUES IN (22844,22845,22846,22847), +PARTITION p5712 VALUES IN (22848,22849,22850,22851), +PARTITION p5713 VALUES IN (22852,22853,22854,22855), +PARTITION p5714 VALUES IN (22856,22857,22858,22859), +PARTITION p5715 VALUES IN (22860,22861,22862,22863), +PARTITION p5716 VALUES IN (22864,22865,22866,22867), +PARTITION p5717 VALUES IN (22868,22869,22870,22871), +PARTITION p5718 VALUES IN (22872,22873,22874,22875), +PARTITION p5719 VALUES IN (22876,22877,22878,22879), +PARTITION p5720 VALUES IN (22880,22881,22882,22883), +PARTITION p5721 VALUES IN (22884,22885,22886,22887), +PARTITION p5722 VALUES IN (22888,22889,22890,22891), +PARTITION p5723 VALUES IN (22892,22893,22894,22895), +PARTITION p5724 VALUES IN (22896,22897,22898,22899), +PARTITION p5725 VALUES IN (22900,22901,22902,22903), +PARTITION p5726 VALUES IN (22904,22905,22906,22907), +PARTITION p5727 VALUES IN (22908,22909,22910,22911), +PARTITION p5728 VALUES IN (22912,22913,22914,22915), +PARTITION p5729 VALUES IN (22916,22917,22918,22919), +PARTITION p5730 VALUES IN (22920,22921,22922,22923), +PARTITION p5731 VALUES IN (22924,22925,22926,22927), +PARTITION p5732 VALUES IN (22928,22929,22930,22931), +PARTITION p5733 VALUES IN (22932,22933,22934,22935), +PARTITION p5734 VALUES IN (22936,22937,22938,22939), +PARTITION p5735 VALUES IN (22940,22941,22942,22943), +PARTITION p5736 VALUES IN (22944,22945,22946,22947), +PARTITION p5737 VALUES IN (22948,22949,22950,22951), +PARTITION p5738 VALUES IN (22952,22953,22954,22955), +PARTITION p5739 VALUES IN (22956,22957,22958,22959), +PARTITION p5740 VALUES IN (22960,22961,22962,22963), +PARTITION p5741 VALUES IN (22964,22965,22966,22967), +PARTITION p5742 VALUES IN (22968,22969,22970,22971), +PARTITION p5743 VALUES IN (22972,22973,22974,22975), +PARTITION p5744 VALUES IN (22976,22977,22978,22979), +PARTITION p5745 VALUES IN (22980,22981,22982,22983), +PARTITION p5746 VALUES IN (22984,22985,22986,22987), +PARTITION p5747 VALUES IN (22988,22989,22990,22991), +PARTITION p5748 VALUES IN (22992,22993,22994,22995), +PARTITION p5749 VALUES IN (22996,22997,22998,22999), +PARTITION p5750 VALUES IN (23000,23001,23002,23003), +PARTITION p5751 VALUES IN (23004,23005,23006,23007), +PARTITION p5752 VALUES IN (23008,23009,23010,23011), +PARTITION p5753 VALUES IN (23012,23013,23014,23015), +PARTITION p5754 VALUES IN (23016,23017,23018,23019), +PARTITION p5755 VALUES IN (23020,23021,23022,23023), +PARTITION p5756 VALUES IN (23024,23025,23026,23027), +PARTITION p5757 VALUES IN (23028,23029,23030,23031), +PARTITION p5758 VALUES IN (23032,23033,23034,23035), +PARTITION p5759 VALUES IN (23036,23037,23038,23039), +PARTITION p5760 VALUES IN (23040,23041,23042,23043), +PARTITION p5761 VALUES IN (23044,23045,23046,23047), +PARTITION p5762 VALUES IN (23048,23049,23050,23051), +PARTITION p5763 VALUES IN (23052,23053,23054,23055), +PARTITION p5764 VALUES IN (23056,23057,23058,23059), +PARTITION p5765 VALUES IN (23060,23061,23062,23063), +PARTITION p5766 VALUES IN (23064,23065,23066,23067), +PARTITION p5767 VALUES IN (23068,23069,23070,23071), +PARTITION p5768 VALUES IN (23072,23073,23074,23075), +PARTITION p5769 VALUES IN (23076,23077,23078,23079), +PARTITION p5770 VALUES IN (23080,23081,23082,23083), +PARTITION p5771 VALUES IN (23084,23085,23086,23087), +PARTITION p5772 VALUES IN (23088,23089,23090,23091), +PARTITION p5773 VALUES IN (23092,23093,23094,23095), +PARTITION p5774 VALUES IN (23096,23097,23098,23099), +PARTITION p5775 VALUES IN (23100,23101,23102,23103), +PARTITION p5776 VALUES IN (23104,23105,23106,23107), +PARTITION p5777 VALUES IN (23108,23109,23110,23111), +PARTITION p5778 VALUES IN (23112,23113,23114,23115), +PARTITION p5779 VALUES IN (23116,23117,23118,23119), +PARTITION p5780 VALUES IN (23120,23121,23122,23123), +PARTITION p5781 VALUES IN (23124,23125,23126,23127), +PARTITION p5782 VALUES IN (23128,23129,23130,23131), +PARTITION p5783 VALUES IN (23132,23133,23134,23135), +PARTITION p5784 VALUES IN (23136,23137,23138,23139), +PARTITION p5785 VALUES IN (23140,23141,23142,23143), +PARTITION p5786 VALUES IN (23144,23145,23146,23147), +PARTITION p5787 VALUES IN (23148,23149,23150,23151), +PARTITION p5788 VALUES IN (23152,23153,23154,23155), +PARTITION p5789 VALUES IN (23156,23157,23158,23159), +PARTITION p5790 VALUES IN (23160,23161,23162,23163), +PARTITION p5791 VALUES IN (23164,23165,23166,23167), +PARTITION p5792 VALUES IN (23168,23169,23170,23171), +PARTITION p5793 VALUES IN (23172,23173,23174,23175), +PARTITION p5794 VALUES IN (23176,23177,23178,23179), +PARTITION p5795 VALUES IN (23180,23181,23182,23183), +PARTITION p5796 VALUES IN (23184,23185,23186,23187), +PARTITION p5797 VALUES IN (23188,23189,23190,23191), +PARTITION p5798 VALUES IN (23192,23193,23194,23195), +PARTITION p5799 VALUES IN (23196,23197,23198,23199), +PARTITION p5800 VALUES IN (23200,23201,23202,23203), +PARTITION p5801 VALUES IN (23204,23205,23206,23207), +PARTITION p5802 VALUES IN (23208,23209,23210,23211), +PARTITION p5803 VALUES IN (23212,23213,23214,23215), +PARTITION p5804 VALUES IN (23216,23217,23218,23219), +PARTITION p5805 VALUES IN (23220,23221,23222,23223), +PARTITION p5806 VALUES IN (23224,23225,23226,23227), +PARTITION p5807 VALUES IN (23228,23229,23230,23231), +PARTITION p5808 VALUES IN (23232,23233,23234,23235), +PARTITION p5809 VALUES IN (23236,23237,23238,23239), +PARTITION p5810 VALUES IN (23240,23241,23242,23243), +PARTITION p5811 VALUES IN (23244,23245,23246,23247), +PARTITION p5812 VALUES IN (23248,23249,23250,23251), +PARTITION p5813 VALUES IN (23252,23253,23254,23255), +PARTITION p5814 VALUES IN (23256,23257,23258,23259), +PARTITION p5815 VALUES IN (23260,23261,23262,23263), +PARTITION p5816 VALUES IN (23264,23265,23266,23267), +PARTITION p5817 VALUES IN (23268,23269,23270,23271), +PARTITION p5818 VALUES IN (23272,23273,23274,23275), +PARTITION p5819 VALUES IN (23276,23277,23278,23279), +PARTITION p5820 VALUES IN (23280,23281,23282,23283), +PARTITION p5821 VALUES IN (23284,23285,23286,23287), +PARTITION p5822 VALUES IN (23288,23289,23290,23291), +PARTITION p5823 VALUES IN (23292,23293,23294,23295), +PARTITION p5824 VALUES IN (23296,23297,23298,23299), +PARTITION p5825 VALUES IN (23300,23301,23302,23303), +PARTITION p5826 VALUES IN (23304,23305,23306,23307), +PARTITION p5827 VALUES IN (23308,23309,23310,23311), +PARTITION p5828 VALUES IN (23312,23313,23314,23315), +PARTITION p5829 VALUES IN (23316,23317,23318,23319), +PARTITION p5830 VALUES IN (23320,23321,23322,23323), +PARTITION p5831 VALUES IN (23324,23325,23326,23327), +PARTITION p5832 VALUES IN (23328,23329,23330,23331), +PARTITION p5833 VALUES IN (23332,23333,23334,23335), +PARTITION p5834 VALUES IN (23336,23337,23338,23339), +PARTITION p5835 VALUES IN (23340,23341,23342,23343), +PARTITION p5836 VALUES IN (23344,23345,23346,23347), +PARTITION p5837 VALUES IN (23348,23349,23350,23351), +PARTITION p5838 VALUES IN (23352,23353,23354,23355), +PARTITION p5839 VALUES IN (23356,23357,23358,23359), +PARTITION p5840 VALUES IN (23360,23361,23362,23363), +PARTITION p5841 VALUES IN (23364,23365,23366,23367), +PARTITION p5842 VALUES IN (23368,23369,23370,23371), +PARTITION p5843 VALUES IN (23372,23373,23374,23375), +PARTITION p5844 VALUES IN (23376,23377,23378,23379), +PARTITION p5845 VALUES IN (23380,23381,23382,23383), +PARTITION p5846 VALUES IN (23384,23385,23386,23387), +PARTITION p5847 VALUES IN (23388,23389,23390,23391), +PARTITION p5848 VALUES IN (23392,23393,23394,23395), +PARTITION p5849 VALUES IN (23396,23397,23398,23399), +PARTITION p5850 VALUES IN (23400,23401,23402,23403), +PARTITION p5851 VALUES IN (23404,23405,23406,23407), +PARTITION p5852 VALUES IN (23408,23409,23410,23411), +PARTITION p5853 VALUES IN (23412,23413,23414,23415), +PARTITION p5854 VALUES IN (23416,23417,23418,23419), +PARTITION p5855 VALUES IN (23420,23421,23422,23423), +PARTITION p5856 VALUES IN (23424,23425,23426,23427), +PARTITION p5857 VALUES IN (23428,23429,23430,23431), +PARTITION p5858 VALUES IN (23432,23433,23434,23435), +PARTITION p5859 VALUES IN (23436,23437,23438,23439), +PARTITION p5860 VALUES IN (23440,23441,23442,23443), +PARTITION p5861 VALUES IN (23444,23445,23446,23447), +PARTITION p5862 VALUES IN (23448,23449,23450,23451), +PARTITION p5863 VALUES IN (23452,23453,23454,23455), +PARTITION p5864 VALUES IN (23456,23457,23458,23459), +PARTITION p5865 VALUES IN (23460,23461,23462,23463), +PARTITION p5866 VALUES IN (23464,23465,23466,23467), +PARTITION p5867 VALUES IN (23468,23469,23470,23471), +PARTITION p5868 VALUES IN (23472,23473,23474,23475), +PARTITION p5869 VALUES IN (23476,23477,23478,23479), +PARTITION p5870 VALUES IN (23480,23481,23482,23483), +PARTITION p5871 VALUES IN (23484,23485,23486,23487), +PARTITION p5872 VALUES IN (23488,23489,23490,23491), +PARTITION p5873 VALUES IN (23492,23493,23494,23495), +PARTITION p5874 VALUES IN (23496,23497,23498,23499), +PARTITION p5875 VALUES IN (23500,23501,23502,23503), +PARTITION p5876 VALUES IN (23504,23505,23506,23507), +PARTITION p5877 VALUES IN (23508,23509,23510,23511), +PARTITION p5878 VALUES IN (23512,23513,23514,23515), +PARTITION p5879 VALUES IN (23516,23517,23518,23519), +PARTITION p5880 VALUES IN (23520,23521,23522,23523), +PARTITION p5881 VALUES IN (23524,23525,23526,23527), +PARTITION p5882 VALUES IN (23528,23529,23530,23531), +PARTITION p5883 VALUES IN (23532,23533,23534,23535), +PARTITION p5884 VALUES IN (23536,23537,23538,23539), +PARTITION p5885 VALUES IN (23540,23541,23542,23543), +PARTITION p5886 VALUES IN (23544,23545,23546,23547), +PARTITION p5887 VALUES IN (23548,23549,23550,23551), +PARTITION p5888 VALUES IN (23552,23553,23554,23555), +PARTITION p5889 VALUES IN (23556,23557,23558,23559), +PARTITION p5890 VALUES IN (23560,23561,23562,23563), +PARTITION p5891 VALUES IN (23564,23565,23566,23567), +PARTITION p5892 VALUES IN (23568,23569,23570,23571), +PARTITION p5893 VALUES IN (23572,23573,23574,23575), +PARTITION p5894 VALUES IN (23576,23577,23578,23579), +PARTITION p5895 VALUES IN (23580,23581,23582,23583), +PARTITION p5896 VALUES IN (23584,23585,23586,23587), +PARTITION p5897 VALUES IN (23588,23589,23590,23591), +PARTITION p5898 VALUES IN (23592,23593,23594,23595), +PARTITION p5899 VALUES IN (23596,23597,23598,23599), +PARTITION p5900 VALUES IN (23600,23601,23602,23603), +PARTITION p5901 VALUES IN (23604,23605,23606,23607), +PARTITION p5902 VALUES IN (23608,23609,23610,23611), +PARTITION p5903 VALUES IN (23612,23613,23614,23615), +PARTITION p5904 VALUES IN (23616,23617,23618,23619), +PARTITION p5905 VALUES IN (23620,23621,23622,23623), +PARTITION p5906 VALUES IN (23624,23625,23626,23627), +PARTITION p5907 VALUES IN (23628,23629,23630,23631), +PARTITION p5908 VALUES IN (23632,23633,23634,23635), +PARTITION p5909 VALUES IN (23636,23637,23638,23639), +PARTITION p5910 VALUES IN (23640,23641,23642,23643), +PARTITION p5911 VALUES IN (23644,23645,23646,23647), +PARTITION p5912 VALUES IN (23648,23649,23650,23651), +PARTITION p5913 VALUES IN (23652,23653,23654,23655), +PARTITION p5914 VALUES IN (23656,23657,23658,23659), +PARTITION p5915 VALUES IN (23660,23661,23662,23663), +PARTITION p5916 VALUES IN (23664,23665,23666,23667), +PARTITION p5917 VALUES IN (23668,23669,23670,23671), +PARTITION p5918 VALUES IN (23672,23673,23674,23675), +PARTITION p5919 VALUES IN (23676,23677,23678,23679), +PARTITION p5920 VALUES IN (23680,23681,23682,23683), +PARTITION p5921 VALUES IN (23684,23685,23686,23687), +PARTITION p5922 VALUES IN (23688,23689,23690,23691), +PARTITION p5923 VALUES IN (23692,23693,23694,23695), +PARTITION p5924 VALUES IN (23696,23697,23698,23699), +PARTITION p5925 VALUES IN (23700,23701,23702,23703), +PARTITION p5926 VALUES IN (23704,23705,23706,23707), +PARTITION p5927 VALUES IN (23708,23709,23710,23711), +PARTITION p5928 VALUES IN (23712,23713,23714,23715), +PARTITION p5929 VALUES IN (23716,23717,23718,23719), +PARTITION p5930 VALUES IN (23720,23721,23722,23723), +PARTITION p5931 VALUES IN (23724,23725,23726,23727), +PARTITION p5932 VALUES IN (23728,23729,23730,23731), +PARTITION p5933 VALUES IN (23732,23733,23734,23735), +PARTITION p5934 VALUES IN (23736,23737,23738,23739), +PARTITION p5935 VALUES IN (23740,23741,23742,23743), +PARTITION p5936 VALUES IN (23744,23745,23746,23747), +PARTITION p5937 VALUES IN (23748,23749,23750,23751), +PARTITION p5938 VALUES IN (23752,23753,23754,23755), +PARTITION p5939 VALUES IN (23756,23757,23758,23759), +PARTITION p5940 VALUES IN (23760,23761,23762,23763), +PARTITION p5941 VALUES IN (23764,23765,23766,23767), +PARTITION p5942 VALUES IN (23768,23769,23770,23771), +PARTITION p5943 VALUES IN (23772,23773,23774,23775), +PARTITION p5944 VALUES IN (23776,23777,23778,23779), +PARTITION p5945 VALUES IN (23780,23781,23782,23783), +PARTITION p5946 VALUES IN (23784,23785,23786,23787), +PARTITION p5947 VALUES IN (23788,23789,23790,23791), +PARTITION p5948 VALUES IN (23792,23793,23794,23795), +PARTITION p5949 VALUES IN (23796,23797,23798,23799), +PARTITION p5950 VALUES IN (23800,23801,23802,23803), +PARTITION p5951 VALUES IN (23804,23805,23806,23807), +PARTITION p5952 VALUES IN (23808,23809,23810,23811), +PARTITION p5953 VALUES IN (23812,23813,23814,23815), +PARTITION p5954 VALUES IN (23816,23817,23818,23819), +PARTITION p5955 VALUES IN (23820,23821,23822,23823), +PARTITION p5956 VALUES IN (23824,23825,23826,23827), +PARTITION p5957 VALUES IN (23828,23829,23830,23831), +PARTITION p5958 VALUES IN (23832,23833,23834,23835), +PARTITION p5959 VALUES IN (23836,23837,23838,23839), +PARTITION p5960 VALUES IN (23840,23841,23842,23843), +PARTITION p5961 VALUES IN (23844,23845,23846,23847), +PARTITION p5962 VALUES IN (23848,23849,23850,23851), +PARTITION p5963 VALUES IN (23852,23853,23854,23855), +PARTITION p5964 VALUES IN (23856,23857,23858,23859), +PARTITION p5965 VALUES IN (23860,23861,23862,23863), +PARTITION p5966 VALUES IN (23864,23865,23866,23867), +PARTITION p5967 VALUES IN (23868,23869,23870,23871), +PARTITION p5968 VALUES IN (23872,23873,23874,23875), +PARTITION p5969 VALUES IN (23876,23877,23878,23879), +PARTITION p5970 VALUES IN (23880,23881,23882,23883), +PARTITION p5971 VALUES IN (23884,23885,23886,23887), +PARTITION p5972 VALUES IN (23888,23889,23890,23891), +PARTITION p5973 VALUES IN (23892,23893,23894,23895), +PARTITION p5974 VALUES IN (23896,23897,23898,23899), +PARTITION p5975 VALUES IN (23900,23901,23902,23903), +PARTITION p5976 VALUES IN (23904,23905,23906,23907), +PARTITION p5977 VALUES IN (23908,23909,23910,23911), +PARTITION p5978 VALUES IN (23912,23913,23914,23915), +PARTITION p5979 VALUES IN (23916,23917,23918,23919), +PARTITION p5980 VALUES IN (23920,23921,23922,23923), +PARTITION p5981 VALUES IN (23924,23925,23926,23927), +PARTITION p5982 VALUES IN (23928,23929,23930,23931), +PARTITION p5983 VALUES IN (23932,23933,23934,23935), +PARTITION p5984 VALUES IN (23936,23937,23938,23939), +PARTITION p5985 VALUES IN (23940,23941,23942,23943), +PARTITION p5986 VALUES IN (23944,23945,23946,23947), +PARTITION p5987 VALUES IN (23948,23949,23950,23951), +PARTITION p5988 VALUES IN (23952,23953,23954,23955), +PARTITION p5989 VALUES IN (23956,23957,23958,23959), +PARTITION p5990 VALUES IN (23960,23961,23962,23963), +PARTITION p5991 VALUES IN (23964,23965,23966,23967), +PARTITION p5992 VALUES IN (23968,23969,23970,23971), +PARTITION p5993 VALUES IN (23972,23973,23974,23975), +PARTITION p5994 VALUES IN (23976,23977,23978,23979), +PARTITION p5995 VALUES IN (23980,23981,23982,23983), +PARTITION p5996 VALUES IN (23984,23985,23986,23987), +PARTITION p5997 VALUES IN (23988,23989,23990,23991), +PARTITION p5998 VALUES IN (23992,23993,23994,23995), +PARTITION p5999 VALUES IN (23996,23997,23998,23999), +PARTITION p6000 VALUES IN (24000,24001,24002,24003), +PARTITION p6001 VALUES IN (24004,24005,24006,24007), +PARTITION p6002 VALUES IN (24008,24009,24010,24011), +PARTITION p6003 VALUES IN (24012,24013,24014,24015), +PARTITION p6004 VALUES IN (24016,24017,24018,24019), +PARTITION p6005 VALUES IN (24020,24021,24022,24023), +PARTITION p6006 VALUES IN (24024,24025,24026,24027), +PARTITION p6007 VALUES IN (24028,24029,24030,24031), +PARTITION p6008 VALUES IN (24032,24033,24034,24035), +PARTITION p6009 VALUES IN (24036,24037,24038,24039), +PARTITION p6010 VALUES IN (24040,24041,24042,24043), +PARTITION p6011 VALUES IN (24044,24045,24046,24047), +PARTITION p6012 VALUES IN (24048,24049,24050,24051), +PARTITION p6013 VALUES IN (24052,24053,24054,24055), +PARTITION p6014 VALUES IN (24056,24057,24058,24059), +PARTITION p6015 VALUES IN (24060,24061,24062,24063), +PARTITION p6016 VALUES IN (24064,24065,24066,24067), +PARTITION p6017 VALUES IN (24068,24069,24070,24071), +PARTITION p6018 VALUES IN (24072,24073,24074,24075), +PARTITION p6019 VALUES IN (24076,24077,24078,24079), +PARTITION p6020 VALUES IN (24080,24081,24082,24083), +PARTITION p6021 VALUES IN (24084,24085,24086,24087), +PARTITION p6022 VALUES IN (24088,24089,24090,24091), +PARTITION p6023 VALUES IN (24092,24093,24094,24095), +PARTITION p6024 VALUES IN (24096,24097,24098,24099), +PARTITION p6025 VALUES IN (24100,24101,24102,24103), +PARTITION p6026 VALUES IN (24104,24105,24106,24107), +PARTITION p6027 VALUES IN (24108,24109,24110,24111), +PARTITION p6028 VALUES IN (24112,24113,24114,24115), +PARTITION p6029 VALUES IN (24116,24117,24118,24119), +PARTITION p6030 VALUES IN (24120,24121,24122,24123), +PARTITION p6031 VALUES IN (24124,24125,24126,24127), +PARTITION p6032 VALUES IN (24128,24129,24130,24131), +PARTITION p6033 VALUES IN (24132,24133,24134,24135), +PARTITION p6034 VALUES IN (24136,24137,24138,24139), +PARTITION p6035 VALUES IN (24140,24141,24142,24143), +PARTITION p6036 VALUES IN (24144,24145,24146,24147), +PARTITION p6037 VALUES IN (24148,24149,24150,24151), +PARTITION p6038 VALUES IN (24152,24153,24154,24155), +PARTITION p6039 VALUES IN (24156,24157,24158,24159), +PARTITION p6040 VALUES IN (24160,24161,24162,24163), +PARTITION p6041 VALUES IN (24164,24165,24166,24167), +PARTITION p6042 VALUES IN (24168,24169,24170,24171), +PARTITION p6043 VALUES IN (24172,24173,24174,24175), +PARTITION p6044 VALUES IN (24176,24177,24178,24179), +PARTITION p6045 VALUES IN (24180,24181,24182,24183), +PARTITION p6046 VALUES IN (24184,24185,24186,24187), +PARTITION p6047 VALUES IN (24188,24189,24190,24191), +PARTITION p6048 VALUES IN (24192,24193,24194,24195), +PARTITION p6049 VALUES IN (24196,24197,24198,24199), +PARTITION p6050 VALUES IN (24200,24201,24202,24203), +PARTITION p6051 VALUES IN (24204,24205,24206,24207), +PARTITION p6052 VALUES IN (24208,24209,24210,24211), +PARTITION p6053 VALUES IN (24212,24213,24214,24215), +PARTITION p6054 VALUES IN (24216,24217,24218,24219), +PARTITION p6055 VALUES IN (24220,24221,24222,24223), +PARTITION p6056 VALUES IN (24224,24225,24226,24227), +PARTITION p6057 VALUES IN (24228,24229,24230,24231), +PARTITION p6058 VALUES IN (24232,24233,24234,24235), +PARTITION p6059 VALUES IN (24236,24237,24238,24239), +PARTITION p6060 VALUES IN (24240,24241,24242,24243), +PARTITION p6061 VALUES IN (24244,24245,24246,24247), +PARTITION p6062 VALUES IN (24248,24249,24250,24251), +PARTITION p6063 VALUES IN (24252,24253,24254,24255), +PARTITION p6064 VALUES IN (24256,24257,24258,24259), +PARTITION p6065 VALUES IN (24260,24261,24262,24263), +PARTITION p6066 VALUES IN (24264,24265,24266,24267), +PARTITION p6067 VALUES IN (24268,24269,24270,24271), +PARTITION p6068 VALUES IN (24272,24273,24274,24275), +PARTITION p6069 VALUES IN (24276,24277,24278,24279), +PARTITION p6070 VALUES IN (24280,24281,24282,24283), +PARTITION p6071 VALUES IN (24284,24285,24286,24287), +PARTITION p6072 VALUES IN (24288,24289,24290,24291), +PARTITION p6073 VALUES IN (24292,24293,24294,24295), +PARTITION p6074 VALUES IN (24296,24297,24298,24299), +PARTITION p6075 VALUES IN (24300,24301,24302,24303), +PARTITION p6076 VALUES IN (24304,24305,24306,24307), +PARTITION p6077 VALUES IN (24308,24309,24310,24311), +PARTITION p6078 VALUES IN (24312,24313,24314,24315), +PARTITION p6079 VALUES IN (24316,24317,24318,24319), +PARTITION p6080 VALUES IN (24320,24321,24322,24323), +PARTITION p6081 VALUES IN (24324,24325,24326,24327), +PARTITION p6082 VALUES IN (24328,24329,24330,24331), +PARTITION p6083 VALUES IN (24332,24333,24334,24335), +PARTITION p6084 VALUES IN (24336,24337,24338,24339), +PARTITION p6085 VALUES IN (24340,24341,24342,24343), +PARTITION p6086 VALUES IN (24344,24345,24346,24347), +PARTITION p6087 VALUES IN (24348,24349,24350,24351), +PARTITION p6088 VALUES IN (24352,24353,24354,24355), +PARTITION p6089 VALUES IN (24356,24357,24358,24359), +PARTITION p6090 VALUES IN (24360,24361,24362,24363), +PARTITION p6091 VALUES IN (24364,24365,24366,24367), +PARTITION p6092 VALUES IN (24368,24369,24370,24371), +PARTITION p6093 VALUES IN (24372,24373,24374,24375), +PARTITION p6094 VALUES IN (24376,24377,24378,24379), +PARTITION p6095 VALUES IN (24380,24381,24382,24383), +PARTITION p6096 VALUES IN (24384,24385,24386,24387), +PARTITION p6097 VALUES IN (24388,24389,24390,24391), +PARTITION p6098 VALUES IN (24392,24393,24394,24395), +PARTITION p6099 VALUES IN (24396,24397,24398,24399), +PARTITION p6100 VALUES IN (24400,24401,24402,24403), +PARTITION p6101 VALUES IN (24404,24405,24406,24407), +PARTITION p6102 VALUES IN (24408,24409,24410,24411), +PARTITION p6103 VALUES IN (24412,24413,24414,24415), +PARTITION p6104 VALUES IN (24416,24417,24418,24419), +PARTITION p6105 VALUES IN (24420,24421,24422,24423), +PARTITION p6106 VALUES IN (24424,24425,24426,24427), +PARTITION p6107 VALUES IN (24428,24429,24430,24431), +PARTITION p6108 VALUES IN (24432,24433,24434,24435), +PARTITION p6109 VALUES IN (24436,24437,24438,24439), +PARTITION p6110 VALUES IN (24440,24441,24442,24443), +PARTITION p6111 VALUES IN (24444,24445,24446,24447), +PARTITION p6112 VALUES IN (24448,24449,24450,24451), +PARTITION p6113 VALUES IN (24452,24453,24454,24455), +PARTITION p6114 VALUES IN (24456,24457,24458,24459), +PARTITION p6115 VALUES IN (24460,24461,24462,24463), +PARTITION p6116 VALUES IN (24464,24465,24466,24467), +PARTITION p6117 VALUES IN (24468,24469,24470,24471), +PARTITION p6118 VALUES IN (24472,24473,24474,24475), +PARTITION p6119 VALUES IN (24476,24477,24478,24479), +PARTITION p6120 VALUES IN (24480,24481,24482,24483), +PARTITION p6121 VALUES IN (24484,24485,24486,24487), +PARTITION p6122 VALUES IN (24488,24489,24490,24491), +PARTITION p6123 VALUES IN (24492,24493,24494,24495), +PARTITION p6124 VALUES IN (24496,24497,24498,24499), +PARTITION p6125 VALUES IN (24500,24501,24502,24503), +PARTITION p6126 VALUES IN (24504,24505,24506,24507), +PARTITION p6127 VALUES IN (24508,24509,24510,24511), +PARTITION p6128 VALUES IN (24512,24513,24514,24515), +PARTITION p6129 VALUES IN (24516,24517,24518,24519), +PARTITION p6130 VALUES IN (24520,24521,24522,24523), +PARTITION p6131 VALUES IN (24524,24525,24526,24527), +PARTITION p6132 VALUES IN (24528,24529,24530,24531), +PARTITION p6133 VALUES IN (24532,24533,24534,24535), +PARTITION p6134 VALUES IN (24536,24537,24538,24539), +PARTITION p6135 VALUES IN (24540,24541,24542,24543), +PARTITION p6136 VALUES IN (24544,24545,24546,24547), +PARTITION p6137 VALUES IN (24548,24549,24550,24551), +PARTITION p6138 VALUES IN (24552,24553,24554,24555), +PARTITION p6139 VALUES IN (24556,24557,24558,24559), +PARTITION p6140 VALUES IN (24560,24561,24562,24563), +PARTITION p6141 VALUES IN (24564,24565,24566,24567), +PARTITION p6142 VALUES IN (24568,24569,24570,24571), +PARTITION p6143 VALUES IN (24572,24573,24574,24575), +PARTITION p6144 VALUES IN (24576,24577,24578,24579), +PARTITION p6145 VALUES IN (24580,24581,24582,24583), +PARTITION p6146 VALUES IN (24584,24585,24586,24587), +PARTITION p6147 VALUES IN (24588,24589,24590,24591), +PARTITION p6148 VALUES IN (24592,24593,24594,24595), +PARTITION p6149 VALUES IN (24596,24597,24598,24599), +PARTITION p6150 VALUES IN (24600,24601,24602,24603), +PARTITION p6151 VALUES IN (24604,24605,24606,24607), +PARTITION p6152 VALUES IN (24608,24609,24610,24611), +PARTITION p6153 VALUES IN (24612,24613,24614,24615), +PARTITION p6154 VALUES IN (24616,24617,24618,24619), +PARTITION p6155 VALUES IN (24620,24621,24622,24623), +PARTITION p6156 VALUES IN (24624,24625,24626,24627), +PARTITION p6157 VALUES IN (24628,24629,24630,24631), +PARTITION p6158 VALUES IN (24632,24633,24634,24635), +PARTITION p6159 VALUES IN (24636,24637,24638,24639), +PARTITION p6160 VALUES IN (24640,24641,24642,24643), +PARTITION p6161 VALUES IN (24644,24645,24646,24647), +PARTITION p6162 VALUES IN (24648,24649,24650,24651), +PARTITION p6163 VALUES IN (24652,24653,24654,24655), +PARTITION p6164 VALUES IN (24656,24657,24658,24659), +PARTITION p6165 VALUES IN (24660,24661,24662,24663), +PARTITION p6166 VALUES IN (24664,24665,24666,24667), +PARTITION p6167 VALUES IN (24668,24669,24670,24671), +PARTITION p6168 VALUES IN (24672,24673,24674,24675), +PARTITION p6169 VALUES IN (24676,24677,24678,24679), +PARTITION p6170 VALUES IN (24680,24681,24682,24683), +PARTITION p6171 VALUES IN (24684,24685,24686,24687), +PARTITION p6172 VALUES IN (24688,24689,24690,24691), +PARTITION p6173 VALUES IN (24692,24693,24694,24695), +PARTITION p6174 VALUES IN (24696,24697,24698,24699), +PARTITION p6175 VALUES IN (24700,24701,24702,24703), +PARTITION p6176 VALUES IN (24704,24705,24706,24707), +PARTITION p6177 VALUES IN (24708,24709,24710,24711), +PARTITION p6178 VALUES IN (24712,24713,24714,24715), +PARTITION p6179 VALUES IN (24716,24717,24718,24719), +PARTITION p6180 VALUES IN (24720,24721,24722,24723), +PARTITION p6181 VALUES IN (24724,24725,24726,24727), +PARTITION p6182 VALUES IN (24728,24729,24730,24731), +PARTITION p6183 VALUES IN (24732,24733,24734,24735), +PARTITION p6184 VALUES IN (24736,24737,24738,24739), +PARTITION p6185 VALUES IN (24740,24741,24742,24743), +PARTITION p6186 VALUES IN (24744,24745,24746,24747), +PARTITION p6187 VALUES IN (24748,24749,24750,24751), +PARTITION p6188 VALUES IN (24752,24753,24754,24755), +PARTITION p6189 VALUES IN (24756,24757,24758,24759), +PARTITION p6190 VALUES IN (24760,24761,24762,24763), +PARTITION p6191 VALUES IN (24764,24765,24766,24767), +PARTITION p6192 VALUES IN (24768,24769,24770,24771), +PARTITION p6193 VALUES IN (24772,24773,24774,24775), +PARTITION p6194 VALUES IN (24776,24777,24778,24779), +PARTITION p6195 VALUES IN (24780,24781,24782,24783), +PARTITION p6196 VALUES IN (24784,24785,24786,24787), +PARTITION p6197 VALUES IN (24788,24789,24790,24791), +PARTITION p6198 VALUES IN (24792,24793,24794,24795), +PARTITION p6199 VALUES IN (24796,24797,24798,24799), +PARTITION p6200 VALUES IN (24800,24801,24802,24803), +PARTITION p6201 VALUES IN (24804,24805,24806,24807), +PARTITION p6202 VALUES IN (24808,24809,24810,24811), +PARTITION p6203 VALUES IN (24812,24813,24814,24815), +PARTITION p6204 VALUES IN (24816,24817,24818,24819), +PARTITION p6205 VALUES IN (24820,24821,24822,24823), +PARTITION p6206 VALUES IN (24824,24825,24826,24827), +PARTITION p6207 VALUES IN (24828,24829,24830,24831), +PARTITION p6208 VALUES IN (24832,24833,24834,24835), +PARTITION p6209 VALUES IN (24836,24837,24838,24839), +PARTITION p6210 VALUES IN (24840,24841,24842,24843), +PARTITION p6211 VALUES IN (24844,24845,24846,24847), +PARTITION p6212 VALUES IN (24848,24849,24850,24851), +PARTITION p6213 VALUES IN (24852,24853,24854,24855), +PARTITION p6214 VALUES IN (24856,24857,24858,24859), +PARTITION p6215 VALUES IN (24860,24861,24862,24863), +PARTITION p6216 VALUES IN (24864,24865,24866,24867), +PARTITION p6217 VALUES IN (24868,24869,24870,24871), +PARTITION p6218 VALUES IN (24872,24873,24874,24875), +PARTITION p6219 VALUES IN (24876,24877,24878,24879), +PARTITION p6220 VALUES IN (24880,24881,24882,24883), +PARTITION p6221 VALUES IN (24884,24885,24886,24887), +PARTITION p6222 VALUES IN (24888,24889,24890,24891), +PARTITION p6223 VALUES IN (24892,24893,24894,24895), +PARTITION p6224 VALUES IN (24896,24897,24898,24899), +PARTITION p6225 VALUES IN (24900,24901,24902,24903), +PARTITION p6226 VALUES IN (24904,24905,24906,24907), +PARTITION p6227 VALUES IN (24908,24909,24910,24911), +PARTITION p6228 VALUES IN (24912,24913,24914,24915), +PARTITION p6229 VALUES IN (24916,24917,24918,24919), +PARTITION p6230 VALUES IN (24920,24921,24922,24923), +PARTITION p6231 VALUES IN (24924,24925,24926,24927), +PARTITION p6232 VALUES IN (24928,24929,24930,24931), +PARTITION p6233 VALUES IN (24932,24933,24934,24935), +PARTITION p6234 VALUES IN (24936,24937,24938,24939), +PARTITION p6235 VALUES IN (24940,24941,24942,24943), +PARTITION p6236 VALUES IN (24944,24945,24946,24947), +PARTITION p6237 VALUES IN (24948,24949,24950,24951), +PARTITION p6238 VALUES IN (24952,24953,24954,24955), +PARTITION p6239 VALUES IN (24956,24957,24958,24959), +PARTITION p6240 VALUES IN (24960,24961,24962,24963), +PARTITION p6241 VALUES IN (24964,24965,24966,24967), +PARTITION p6242 VALUES IN (24968,24969,24970,24971), +PARTITION p6243 VALUES IN (24972,24973,24974,24975), +PARTITION p6244 VALUES IN (24976,24977,24978,24979), +PARTITION p6245 VALUES IN (24980,24981,24982,24983), +PARTITION p6246 VALUES IN (24984,24985,24986,24987), +PARTITION p6247 VALUES IN (24988,24989,24990,24991), +PARTITION p6248 VALUES IN (24992,24993,24994,24995), +PARTITION p6249 VALUES IN (24996,24997,24998,24999), +PARTITION p6250 VALUES IN (25000,25001,25002,25003), +PARTITION p6251 VALUES IN (25004,25005,25006,25007), +PARTITION p6252 VALUES IN (25008,25009,25010,25011), +PARTITION p6253 VALUES IN (25012,25013,25014,25015), +PARTITION p6254 VALUES IN (25016,25017,25018,25019), +PARTITION p6255 VALUES IN (25020,25021,25022,25023), +PARTITION p6256 VALUES IN (25024,25025,25026,25027), +PARTITION p6257 VALUES IN (25028,25029,25030,25031), +PARTITION p6258 VALUES IN (25032,25033,25034,25035), +PARTITION p6259 VALUES IN (25036,25037,25038,25039), +PARTITION p6260 VALUES IN (25040,25041,25042,25043), +PARTITION p6261 VALUES IN (25044,25045,25046,25047), +PARTITION p6262 VALUES IN (25048,25049,25050,25051), +PARTITION p6263 VALUES IN (25052,25053,25054,25055), +PARTITION p6264 VALUES IN (25056,25057,25058,25059), +PARTITION p6265 VALUES IN (25060,25061,25062,25063), +PARTITION p6266 VALUES IN (25064,25065,25066,25067), +PARTITION p6267 VALUES IN (25068,25069,25070,25071), +PARTITION p6268 VALUES IN (25072,25073,25074,25075), +PARTITION p6269 VALUES IN (25076,25077,25078,25079), +PARTITION p6270 VALUES IN (25080,25081,25082,25083), +PARTITION p6271 VALUES IN (25084,25085,25086,25087), +PARTITION p6272 VALUES IN (25088,25089,25090,25091), +PARTITION p6273 VALUES IN (25092,25093,25094,25095), +PARTITION p6274 VALUES IN (25096,25097,25098,25099), +PARTITION p6275 VALUES IN (25100,25101,25102,25103), +PARTITION p6276 VALUES IN (25104,25105,25106,25107), +PARTITION p6277 VALUES IN (25108,25109,25110,25111), +PARTITION p6278 VALUES IN (25112,25113,25114,25115), +PARTITION p6279 VALUES IN (25116,25117,25118,25119), +PARTITION p6280 VALUES IN (25120,25121,25122,25123), +PARTITION p6281 VALUES IN (25124,25125,25126,25127), +PARTITION p6282 VALUES IN (25128,25129,25130,25131), +PARTITION p6283 VALUES IN (25132,25133,25134,25135), +PARTITION p6284 VALUES IN (25136,25137,25138,25139), +PARTITION p6285 VALUES IN (25140,25141,25142,25143), +PARTITION p6286 VALUES IN (25144,25145,25146,25147), +PARTITION p6287 VALUES IN (25148,25149,25150,25151), +PARTITION p6288 VALUES IN (25152,25153,25154,25155), +PARTITION p6289 VALUES IN (25156,25157,25158,25159), +PARTITION p6290 VALUES IN (25160,25161,25162,25163), +PARTITION p6291 VALUES IN (25164,25165,25166,25167), +PARTITION p6292 VALUES IN (25168,25169,25170,25171), +PARTITION p6293 VALUES IN (25172,25173,25174,25175), +PARTITION p6294 VALUES IN (25176,25177,25178,25179), +PARTITION p6295 VALUES IN (25180,25181,25182,25183), +PARTITION p6296 VALUES IN (25184,25185,25186,25187), +PARTITION p6297 VALUES IN (25188,25189,25190,25191), +PARTITION p6298 VALUES IN (25192,25193,25194,25195), +PARTITION p6299 VALUES IN (25196,25197,25198,25199), +PARTITION p6300 VALUES IN (25200,25201,25202,25203), +PARTITION p6301 VALUES IN (25204,25205,25206,25207), +PARTITION p6302 VALUES IN (25208,25209,25210,25211), +PARTITION p6303 VALUES IN (25212,25213,25214,25215), +PARTITION p6304 VALUES IN (25216,25217,25218,25219), +PARTITION p6305 VALUES IN (25220,25221,25222,25223), +PARTITION p6306 VALUES IN (25224,25225,25226,25227), +PARTITION p6307 VALUES IN (25228,25229,25230,25231), +PARTITION p6308 VALUES IN (25232,25233,25234,25235), +PARTITION p6309 VALUES IN (25236,25237,25238,25239), +PARTITION p6310 VALUES IN (25240,25241,25242,25243), +PARTITION p6311 VALUES IN (25244,25245,25246,25247), +PARTITION p6312 VALUES IN (25248,25249,25250,25251), +PARTITION p6313 VALUES IN (25252,25253,25254,25255), +PARTITION p6314 VALUES IN (25256,25257,25258,25259), +PARTITION p6315 VALUES IN (25260,25261,25262,25263), +PARTITION p6316 VALUES IN (25264,25265,25266,25267), +PARTITION p6317 VALUES IN (25268,25269,25270,25271), +PARTITION p6318 VALUES IN (25272,25273,25274,25275), +PARTITION p6319 VALUES IN (25276,25277,25278,25279), +PARTITION p6320 VALUES IN (25280,25281,25282,25283), +PARTITION p6321 VALUES IN (25284,25285,25286,25287), +PARTITION p6322 VALUES IN (25288,25289,25290,25291), +PARTITION p6323 VALUES IN (25292,25293,25294,25295), +PARTITION p6324 VALUES IN (25296,25297,25298,25299), +PARTITION p6325 VALUES IN (25300,25301,25302,25303), +PARTITION p6326 VALUES IN (25304,25305,25306,25307), +PARTITION p6327 VALUES IN (25308,25309,25310,25311), +PARTITION p6328 VALUES IN (25312,25313,25314,25315), +PARTITION p6329 VALUES IN (25316,25317,25318,25319), +PARTITION p6330 VALUES IN (25320,25321,25322,25323), +PARTITION p6331 VALUES IN (25324,25325,25326,25327), +PARTITION p6332 VALUES IN (25328,25329,25330,25331), +PARTITION p6333 VALUES IN (25332,25333,25334,25335), +PARTITION p6334 VALUES IN (25336,25337,25338,25339), +PARTITION p6335 VALUES IN (25340,25341,25342,25343), +PARTITION p6336 VALUES IN (25344,25345,25346,25347), +PARTITION p6337 VALUES IN (25348,25349,25350,25351), +PARTITION p6338 VALUES IN (25352,25353,25354,25355), +PARTITION p6339 VALUES IN (25356,25357,25358,25359), +PARTITION p6340 VALUES IN (25360,25361,25362,25363), +PARTITION p6341 VALUES IN (25364,25365,25366,25367), +PARTITION p6342 VALUES IN (25368,25369,25370,25371), +PARTITION p6343 VALUES IN (25372,25373,25374,25375), +PARTITION p6344 VALUES IN (25376,25377,25378,25379), +PARTITION p6345 VALUES IN (25380,25381,25382,25383), +PARTITION p6346 VALUES IN (25384,25385,25386,25387), +PARTITION p6347 VALUES IN (25388,25389,25390,25391), +PARTITION p6348 VALUES IN (25392,25393,25394,25395), +PARTITION p6349 VALUES IN (25396,25397,25398,25399), +PARTITION p6350 VALUES IN (25400,25401,25402,25403), +PARTITION p6351 VALUES IN (25404,25405,25406,25407), +PARTITION p6352 VALUES IN (25408,25409,25410,25411), +PARTITION p6353 VALUES IN (25412,25413,25414,25415), +PARTITION p6354 VALUES IN (25416,25417,25418,25419), +PARTITION p6355 VALUES IN (25420,25421,25422,25423), +PARTITION p6356 VALUES IN (25424,25425,25426,25427), +PARTITION p6357 VALUES IN (25428,25429,25430,25431), +PARTITION p6358 VALUES IN (25432,25433,25434,25435), +PARTITION p6359 VALUES IN (25436,25437,25438,25439), +PARTITION p6360 VALUES IN (25440,25441,25442,25443), +PARTITION p6361 VALUES IN (25444,25445,25446,25447), +PARTITION p6362 VALUES IN (25448,25449,25450,25451), +PARTITION p6363 VALUES IN (25452,25453,25454,25455), +PARTITION p6364 VALUES IN (25456,25457,25458,25459), +PARTITION p6365 VALUES IN (25460,25461,25462,25463), +PARTITION p6366 VALUES IN (25464,25465,25466,25467), +PARTITION p6367 VALUES IN (25468,25469,25470,25471), +PARTITION p6368 VALUES IN (25472,25473,25474,25475), +PARTITION p6369 VALUES IN (25476,25477,25478,25479), +PARTITION p6370 VALUES IN (25480,25481,25482,25483), +PARTITION p6371 VALUES IN (25484,25485,25486,25487), +PARTITION p6372 VALUES IN (25488,25489,25490,25491), +PARTITION p6373 VALUES IN (25492,25493,25494,25495), +PARTITION p6374 VALUES IN (25496,25497,25498,25499), +PARTITION p6375 VALUES IN (25500,25501,25502,25503), +PARTITION p6376 VALUES IN (25504,25505,25506,25507), +PARTITION p6377 VALUES IN (25508,25509,25510,25511), +PARTITION p6378 VALUES IN (25512,25513,25514,25515), +PARTITION p6379 VALUES IN (25516,25517,25518,25519), +PARTITION p6380 VALUES IN (25520,25521,25522,25523), +PARTITION p6381 VALUES IN (25524,25525,25526,25527), +PARTITION p6382 VALUES IN (25528,25529,25530,25531), +PARTITION p6383 VALUES IN (25532,25533,25534,25535), +PARTITION p6384 VALUES IN (25536,25537,25538,25539), +PARTITION p6385 VALUES IN (25540,25541,25542,25543), +PARTITION p6386 VALUES IN (25544,25545,25546,25547), +PARTITION p6387 VALUES IN (25548,25549,25550,25551), +PARTITION p6388 VALUES IN (25552,25553,25554,25555), +PARTITION p6389 VALUES IN (25556,25557,25558,25559), +PARTITION p6390 VALUES IN (25560,25561,25562,25563), +PARTITION p6391 VALUES IN (25564,25565,25566,25567), +PARTITION p6392 VALUES IN (25568,25569,25570,25571), +PARTITION p6393 VALUES IN (25572,25573,25574,25575), +PARTITION p6394 VALUES IN (25576,25577,25578,25579), +PARTITION p6395 VALUES IN (25580,25581,25582,25583), +PARTITION p6396 VALUES IN (25584,25585,25586,25587), +PARTITION p6397 VALUES IN (25588,25589,25590,25591), +PARTITION p6398 VALUES IN (25592,25593,25594,25595), +PARTITION p6399 VALUES IN (25596,25597,25598,25599), +PARTITION p6400 VALUES IN (25600,25601,25602,25603), +PARTITION p6401 VALUES IN (25604,25605,25606,25607), +PARTITION p6402 VALUES IN (25608,25609,25610,25611), +PARTITION p6403 VALUES IN (25612,25613,25614,25615), +PARTITION p6404 VALUES IN (25616,25617,25618,25619), +PARTITION p6405 VALUES IN (25620,25621,25622,25623), +PARTITION p6406 VALUES IN (25624,25625,25626,25627), +PARTITION p6407 VALUES IN (25628,25629,25630,25631), +PARTITION p6408 VALUES IN (25632,25633,25634,25635), +PARTITION p6409 VALUES IN (25636,25637,25638,25639), +PARTITION p6410 VALUES IN (25640,25641,25642,25643), +PARTITION p6411 VALUES IN (25644,25645,25646,25647), +PARTITION p6412 VALUES IN (25648,25649,25650,25651), +PARTITION p6413 VALUES IN (25652,25653,25654,25655), +PARTITION p6414 VALUES IN (25656,25657,25658,25659), +PARTITION p6415 VALUES IN (25660,25661,25662,25663), +PARTITION p6416 VALUES IN (25664,25665,25666,25667), +PARTITION p6417 VALUES IN (25668,25669,25670,25671), +PARTITION p6418 VALUES IN (25672,25673,25674,25675), +PARTITION p6419 VALUES IN (25676,25677,25678,25679), +PARTITION p6420 VALUES IN (25680,25681,25682,25683), +PARTITION p6421 VALUES IN (25684,25685,25686,25687), +PARTITION p6422 VALUES IN (25688,25689,25690,25691), +PARTITION p6423 VALUES IN (25692,25693,25694,25695), +PARTITION p6424 VALUES IN (25696,25697,25698,25699), +PARTITION p6425 VALUES IN (25700,25701,25702,25703), +PARTITION p6426 VALUES IN (25704,25705,25706,25707), +PARTITION p6427 VALUES IN (25708,25709,25710,25711), +PARTITION p6428 VALUES IN (25712,25713,25714,25715), +PARTITION p6429 VALUES IN (25716,25717,25718,25719), +PARTITION p6430 VALUES IN (25720,25721,25722,25723), +PARTITION p6431 VALUES IN (25724,25725,25726,25727), +PARTITION p6432 VALUES IN (25728,25729,25730,25731), +PARTITION p6433 VALUES IN (25732,25733,25734,25735), +PARTITION p6434 VALUES IN (25736,25737,25738,25739), +PARTITION p6435 VALUES IN (25740,25741,25742,25743), +PARTITION p6436 VALUES IN (25744,25745,25746,25747), +PARTITION p6437 VALUES IN (25748,25749,25750,25751), +PARTITION p6438 VALUES IN (25752,25753,25754,25755), +PARTITION p6439 VALUES IN (25756,25757,25758,25759), +PARTITION p6440 VALUES IN (25760,25761,25762,25763), +PARTITION p6441 VALUES IN (25764,25765,25766,25767), +PARTITION p6442 VALUES IN (25768,25769,25770,25771), +PARTITION p6443 VALUES IN (25772,25773,25774,25775), +PARTITION p6444 VALUES IN (25776,25777,25778,25779), +PARTITION p6445 VALUES IN (25780,25781,25782,25783), +PARTITION p6446 VALUES IN (25784,25785,25786,25787), +PARTITION p6447 VALUES IN (25788,25789,25790,25791), +PARTITION p6448 VALUES IN (25792,25793,25794,25795), +PARTITION p6449 VALUES IN (25796,25797,25798,25799), +PARTITION p6450 VALUES IN (25800,25801,25802,25803), +PARTITION p6451 VALUES IN (25804,25805,25806,25807), +PARTITION p6452 VALUES IN (25808,25809,25810,25811), +PARTITION p6453 VALUES IN (25812,25813,25814,25815), +PARTITION p6454 VALUES IN (25816,25817,25818,25819), +PARTITION p6455 VALUES IN (25820,25821,25822,25823), +PARTITION p6456 VALUES IN (25824,25825,25826,25827), +PARTITION p6457 VALUES IN (25828,25829,25830,25831), +PARTITION p6458 VALUES IN (25832,25833,25834,25835), +PARTITION p6459 VALUES IN (25836,25837,25838,25839), +PARTITION p6460 VALUES IN (25840,25841,25842,25843), +PARTITION p6461 VALUES IN (25844,25845,25846,25847), +PARTITION p6462 VALUES IN (25848,25849,25850,25851), +PARTITION p6463 VALUES IN (25852,25853,25854,25855), +PARTITION p6464 VALUES IN (25856,25857,25858,25859), +PARTITION p6465 VALUES IN (25860,25861,25862,25863), +PARTITION p6466 VALUES IN (25864,25865,25866,25867), +PARTITION p6467 VALUES IN (25868,25869,25870,25871), +PARTITION p6468 VALUES IN (25872,25873,25874,25875), +PARTITION p6469 VALUES IN (25876,25877,25878,25879), +PARTITION p6470 VALUES IN (25880,25881,25882,25883), +PARTITION p6471 VALUES IN (25884,25885,25886,25887), +PARTITION p6472 VALUES IN (25888,25889,25890,25891), +PARTITION p6473 VALUES IN (25892,25893,25894,25895), +PARTITION p6474 VALUES IN (25896,25897,25898,25899), +PARTITION p6475 VALUES IN (25900,25901,25902,25903), +PARTITION p6476 VALUES IN (25904,25905,25906,25907), +PARTITION p6477 VALUES IN (25908,25909,25910,25911), +PARTITION p6478 VALUES IN (25912,25913,25914,25915), +PARTITION p6479 VALUES IN (25916,25917,25918,25919), +PARTITION p6480 VALUES IN (25920,25921,25922,25923), +PARTITION p6481 VALUES IN (25924,25925,25926,25927), +PARTITION p6482 VALUES IN (25928,25929,25930,25931), +PARTITION p6483 VALUES IN (25932,25933,25934,25935), +PARTITION p6484 VALUES IN (25936,25937,25938,25939), +PARTITION p6485 VALUES IN (25940,25941,25942,25943), +PARTITION p6486 VALUES IN (25944,25945,25946,25947), +PARTITION p6487 VALUES IN (25948,25949,25950,25951), +PARTITION p6488 VALUES IN (25952,25953,25954,25955), +PARTITION p6489 VALUES IN (25956,25957,25958,25959), +PARTITION p6490 VALUES IN (25960,25961,25962,25963), +PARTITION p6491 VALUES IN (25964,25965,25966,25967), +PARTITION p6492 VALUES IN (25968,25969,25970,25971), +PARTITION p6493 VALUES IN (25972,25973,25974,25975), +PARTITION p6494 VALUES IN (25976,25977,25978,25979), +PARTITION p6495 VALUES IN (25980,25981,25982,25983), +PARTITION p6496 VALUES IN (25984,25985,25986,25987), +PARTITION p6497 VALUES IN (25988,25989,25990,25991), +PARTITION p6498 VALUES IN (25992,25993,25994,25995), +PARTITION p6499 VALUES IN (25996,25997,25998,25999), +PARTITION p6500 VALUES IN (26000,26001,26002,26003), +PARTITION p6501 VALUES IN (26004,26005,26006,26007), +PARTITION p6502 VALUES IN (26008,26009,26010,26011), +PARTITION p6503 VALUES IN (26012,26013,26014,26015), +PARTITION p6504 VALUES IN (26016,26017,26018,26019), +PARTITION p6505 VALUES IN (26020,26021,26022,26023), +PARTITION p6506 VALUES IN (26024,26025,26026,26027), +PARTITION p6507 VALUES IN (26028,26029,26030,26031), +PARTITION p6508 VALUES IN (26032,26033,26034,26035), +PARTITION p6509 VALUES IN (26036,26037,26038,26039), +PARTITION p6510 VALUES IN (26040,26041,26042,26043), +PARTITION p6511 VALUES IN (26044,26045,26046,26047), +PARTITION p6512 VALUES IN (26048,26049,26050,26051), +PARTITION p6513 VALUES IN (26052,26053,26054,26055), +PARTITION p6514 VALUES IN (26056,26057,26058,26059), +PARTITION p6515 VALUES IN (26060,26061,26062,26063), +PARTITION p6516 VALUES IN (26064,26065,26066,26067), +PARTITION p6517 VALUES IN (26068,26069,26070,26071), +PARTITION p6518 VALUES IN (26072,26073,26074,26075), +PARTITION p6519 VALUES IN (26076,26077,26078,26079), +PARTITION p6520 VALUES IN (26080,26081,26082,26083), +PARTITION p6521 VALUES IN (26084,26085,26086,26087), +PARTITION p6522 VALUES IN (26088,26089,26090,26091), +PARTITION p6523 VALUES IN (26092,26093,26094,26095), +PARTITION p6524 VALUES IN (26096,26097,26098,26099), +PARTITION p6525 VALUES IN (26100,26101,26102,26103), +PARTITION p6526 VALUES IN (26104,26105,26106,26107), +PARTITION p6527 VALUES IN (26108,26109,26110,26111), +PARTITION p6528 VALUES IN (26112,26113,26114,26115), +PARTITION p6529 VALUES IN (26116,26117,26118,26119), +PARTITION p6530 VALUES IN (26120,26121,26122,26123), +PARTITION p6531 VALUES IN (26124,26125,26126,26127), +PARTITION p6532 VALUES IN (26128,26129,26130,26131), +PARTITION p6533 VALUES IN (26132,26133,26134,26135), +PARTITION p6534 VALUES IN (26136,26137,26138,26139), +PARTITION p6535 VALUES IN (26140,26141,26142,26143), +PARTITION p6536 VALUES IN (26144,26145,26146,26147), +PARTITION p6537 VALUES IN (26148,26149,26150,26151), +PARTITION p6538 VALUES IN (26152,26153,26154,26155), +PARTITION p6539 VALUES IN (26156,26157,26158,26159), +PARTITION p6540 VALUES IN (26160,26161,26162,26163), +PARTITION p6541 VALUES IN (26164,26165,26166,26167), +PARTITION p6542 VALUES IN (26168,26169,26170,26171), +PARTITION p6543 VALUES IN (26172,26173,26174,26175), +PARTITION p6544 VALUES IN (26176,26177,26178,26179), +PARTITION p6545 VALUES IN (26180,26181,26182,26183), +PARTITION p6546 VALUES IN (26184,26185,26186,26187), +PARTITION p6547 VALUES IN (26188,26189,26190,26191), +PARTITION p6548 VALUES IN (26192,26193,26194,26195), +PARTITION p6549 VALUES IN (26196,26197,26198,26199), +PARTITION p6550 VALUES IN (26200,26201,26202,26203), +PARTITION p6551 VALUES IN (26204,26205,26206,26207), +PARTITION p6552 VALUES IN (26208,26209,26210,26211), +PARTITION p6553 VALUES IN (26212,26213,26214,26215), +PARTITION p6554 VALUES IN (26216,26217,26218,26219), +PARTITION p6555 VALUES IN (26220,26221,26222,26223), +PARTITION p6556 VALUES IN (26224,26225,26226,26227), +PARTITION p6557 VALUES IN (26228,26229,26230,26231), +PARTITION p6558 VALUES IN (26232,26233,26234,26235), +PARTITION p6559 VALUES IN (26236,26237,26238,26239), +PARTITION p6560 VALUES IN (26240,26241,26242,26243), +PARTITION p6561 VALUES IN (26244,26245,26246,26247), +PARTITION p6562 VALUES IN (26248,26249,26250,26251), +PARTITION p6563 VALUES IN (26252,26253,26254,26255), +PARTITION p6564 VALUES IN (26256,26257,26258,26259), +PARTITION p6565 VALUES IN (26260,26261,26262,26263), +PARTITION p6566 VALUES IN (26264,26265,26266,26267), +PARTITION p6567 VALUES IN (26268,26269,26270,26271), +PARTITION p6568 VALUES IN (26272,26273,26274,26275), +PARTITION p6569 VALUES IN (26276,26277,26278,26279), +PARTITION p6570 VALUES IN (26280,26281,26282,26283), +PARTITION p6571 VALUES IN (26284,26285,26286,26287), +PARTITION p6572 VALUES IN (26288,26289,26290,26291), +PARTITION p6573 VALUES IN (26292,26293,26294,26295), +PARTITION p6574 VALUES IN (26296,26297,26298,26299), +PARTITION p6575 VALUES IN (26300,26301,26302,26303), +PARTITION p6576 VALUES IN (26304,26305,26306,26307), +PARTITION p6577 VALUES IN (26308,26309,26310,26311), +PARTITION p6578 VALUES IN (26312,26313,26314,26315), +PARTITION p6579 VALUES IN (26316,26317,26318,26319), +PARTITION p6580 VALUES IN (26320,26321,26322,26323), +PARTITION p6581 VALUES IN (26324,26325,26326,26327), +PARTITION p6582 VALUES IN (26328,26329,26330,26331), +PARTITION p6583 VALUES IN (26332,26333,26334,26335), +PARTITION p6584 VALUES IN (26336,26337,26338,26339), +PARTITION p6585 VALUES IN (26340,26341,26342,26343), +PARTITION p6586 VALUES IN (26344,26345,26346,26347), +PARTITION p6587 VALUES IN (26348,26349,26350,26351), +PARTITION p6588 VALUES IN (26352,26353,26354,26355), +PARTITION p6589 VALUES IN (26356,26357,26358,26359), +PARTITION p6590 VALUES IN (26360,26361,26362,26363), +PARTITION p6591 VALUES IN (26364,26365,26366,26367), +PARTITION p6592 VALUES IN (26368,26369,26370,26371), +PARTITION p6593 VALUES IN (26372,26373,26374,26375), +PARTITION p6594 VALUES IN (26376,26377,26378,26379), +PARTITION p6595 VALUES IN (26380,26381,26382,26383), +PARTITION p6596 VALUES IN (26384,26385,26386,26387), +PARTITION p6597 VALUES IN (26388,26389,26390,26391), +PARTITION p6598 VALUES IN (26392,26393,26394,26395), +PARTITION p6599 VALUES IN (26396,26397,26398,26399), +PARTITION p6600 VALUES IN (26400,26401,26402,26403), +PARTITION p6601 VALUES IN (26404,26405,26406,26407), +PARTITION p6602 VALUES IN (26408,26409,26410,26411), +PARTITION p6603 VALUES IN (26412,26413,26414,26415), +PARTITION p6604 VALUES IN (26416,26417,26418,26419), +PARTITION p6605 VALUES IN (26420,26421,26422,26423), +PARTITION p6606 VALUES IN (26424,26425,26426,26427), +PARTITION p6607 VALUES IN (26428,26429,26430,26431), +PARTITION p6608 VALUES IN (26432,26433,26434,26435), +PARTITION p6609 VALUES IN (26436,26437,26438,26439), +PARTITION p6610 VALUES IN (26440,26441,26442,26443), +PARTITION p6611 VALUES IN (26444,26445,26446,26447), +PARTITION p6612 VALUES IN (26448,26449,26450,26451), +PARTITION p6613 VALUES IN (26452,26453,26454,26455), +PARTITION p6614 VALUES IN (26456,26457,26458,26459), +PARTITION p6615 VALUES IN (26460,26461,26462,26463), +PARTITION p6616 VALUES IN (26464,26465,26466,26467), +PARTITION p6617 VALUES IN (26468,26469,26470,26471), +PARTITION p6618 VALUES IN (26472,26473,26474,26475), +PARTITION p6619 VALUES IN (26476,26477,26478,26479), +PARTITION p6620 VALUES IN (26480,26481,26482,26483), +PARTITION p6621 VALUES IN (26484,26485,26486,26487), +PARTITION p6622 VALUES IN (26488,26489,26490,26491), +PARTITION p6623 VALUES IN (26492,26493,26494,26495), +PARTITION p6624 VALUES IN (26496,26497,26498,26499), +PARTITION p6625 VALUES IN (26500,26501,26502,26503), +PARTITION p6626 VALUES IN (26504,26505,26506,26507), +PARTITION p6627 VALUES IN (26508,26509,26510,26511), +PARTITION p6628 VALUES IN (26512,26513,26514,26515), +PARTITION p6629 VALUES IN (26516,26517,26518,26519), +PARTITION p6630 VALUES IN (26520,26521,26522,26523), +PARTITION p6631 VALUES IN (26524,26525,26526,26527), +PARTITION p6632 VALUES IN (26528,26529,26530,26531), +PARTITION p6633 VALUES IN (26532,26533,26534,26535), +PARTITION p6634 VALUES IN (26536,26537,26538,26539), +PARTITION p6635 VALUES IN (26540,26541,26542,26543), +PARTITION p6636 VALUES IN (26544,26545,26546,26547), +PARTITION p6637 VALUES IN (26548,26549,26550,26551), +PARTITION p6638 VALUES IN (26552,26553,26554,26555), +PARTITION p6639 VALUES IN (26556,26557,26558,26559), +PARTITION p6640 VALUES IN (26560,26561,26562,26563), +PARTITION p6641 VALUES IN (26564,26565,26566,26567), +PARTITION p6642 VALUES IN (26568,26569,26570,26571), +PARTITION p6643 VALUES IN (26572,26573,26574,26575), +PARTITION p6644 VALUES IN (26576,26577,26578,26579), +PARTITION p6645 VALUES IN (26580,26581,26582,26583), +PARTITION p6646 VALUES IN (26584,26585,26586,26587), +PARTITION p6647 VALUES IN (26588,26589,26590,26591), +PARTITION p6648 VALUES IN (26592,26593,26594,26595), +PARTITION p6649 VALUES IN (26596,26597,26598,26599), +PARTITION p6650 VALUES IN (26600,26601,26602,26603), +PARTITION p6651 VALUES IN (26604,26605,26606,26607), +PARTITION p6652 VALUES IN (26608,26609,26610,26611), +PARTITION p6653 VALUES IN (26612,26613,26614,26615), +PARTITION p6654 VALUES IN (26616,26617,26618,26619), +PARTITION p6655 VALUES IN (26620,26621,26622,26623), +PARTITION p6656 VALUES IN (26624,26625,26626,26627), +PARTITION p6657 VALUES IN (26628,26629,26630,26631), +PARTITION p6658 VALUES IN (26632,26633,26634,26635), +PARTITION p6659 VALUES IN (26636,26637,26638,26639), +PARTITION p6660 VALUES IN (26640,26641,26642,26643), +PARTITION p6661 VALUES IN (26644,26645,26646,26647), +PARTITION p6662 VALUES IN (26648,26649,26650,26651), +PARTITION p6663 VALUES IN (26652,26653,26654,26655), +PARTITION p6664 VALUES IN (26656,26657,26658,26659), +PARTITION p6665 VALUES IN (26660,26661,26662,26663), +PARTITION p6666 VALUES IN (26664,26665,26666,26667), +PARTITION p6667 VALUES IN (26668,26669,26670,26671), +PARTITION p6668 VALUES IN (26672,26673,26674,26675), +PARTITION p6669 VALUES IN (26676,26677,26678,26679), +PARTITION p6670 VALUES IN (26680,26681,26682,26683), +PARTITION p6671 VALUES IN (26684,26685,26686,26687), +PARTITION p6672 VALUES IN (26688,26689,26690,26691), +PARTITION p6673 VALUES IN (26692,26693,26694,26695), +PARTITION p6674 VALUES IN (26696,26697,26698,26699), +PARTITION p6675 VALUES IN (26700,26701,26702,26703), +PARTITION p6676 VALUES IN (26704,26705,26706,26707), +PARTITION p6677 VALUES IN (26708,26709,26710,26711), +PARTITION p6678 VALUES IN (26712,26713,26714,26715), +PARTITION p6679 VALUES IN (26716,26717,26718,26719), +PARTITION p6680 VALUES IN (26720,26721,26722,26723), +PARTITION p6681 VALUES IN (26724,26725,26726,26727), +PARTITION p6682 VALUES IN (26728,26729,26730,26731), +PARTITION p6683 VALUES IN (26732,26733,26734,26735), +PARTITION p6684 VALUES IN (26736,26737,26738,26739), +PARTITION p6685 VALUES IN (26740,26741,26742,26743), +PARTITION p6686 VALUES IN (26744,26745,26746,26747), +PARTITION p6687 VALUES IN (26748,26749,26750,26751), +PARTITION p6688 VALUES IN (26752,26753,26754,26755), +PARTITION p6689 VALUES IN (26756,26757,26758,26759), +PARTITION p6690 VALUES IN (26760,26761,26762,26763), +PARTITION p6691 VALUES IN (26764,26765,26766,26767), +PARTITION p6692 VALUES IN (26768,26769,26770,26771), +PARTITION p6693 VALUES IN (26772,26773,26774,26775), +PARTITION p6694 VALUES IN (26776,26777,26778,26779), +PARTITION p6695 VALUES IN (26780,26781,26782,26783), +PARTITION p6696 VALUES IN (26784,26785,26786,26787), +PARTITION p6697 VALUES IN (26788,26789,26790,26791), +PARTITION p6698 VALUES IN (26792,26793,26794,26795), +PARTITION p6699 VALUES IN (26796,26797,26798,26799), +PARTITION p6700 VALUES IN (26800,26801,26802,26803), +PARTITION p6701 VALUES IN (26804,26805,26806,26807), +PARTITION p6702 VALUES IN (26808,26809,26810,26811), +PARTITION p6703 VALUES IN (26812,26813,26814,26815), +PARTITION p6704 VALUES IN (26816,26817,26818,26819), +PARTITION p6705 VALUES IN (26820,26821,26822,26823), +PARTITION p6706 VALUES IN (26824,26825,26826,26827), +PARTITION p6707 VALUES IN (26828,26829,26830,26831), +PARTITION p6708 VALUES IN (26832,26833,26834,26835), +PARTITION p6709 VALUES IN (26836,26837,26838,26839), +PARTITION p6710 VALUES IN (26840,26841,26842,26843), +PARTITION p6711 VALUES IN (26844,26845,26846,26847), +PARTITION p6712 VALUES IN (26848,26849,26850,26851), +PARTITION p6713 VALUES IN (26852,26853,26854,26855), +PARTITION p6714 VALUES IN (26856,26857,26858,26859), +PARTITION p6715 VALUES IN (26860,26861,26862,26863), +PARTITION p6716 VALUES IN (26864,26865,26866,26867), +PARTITION p6717 VALUES IN (26868,26869,26870,26871), +PARTITION p6718 VALUES IN (26872,26873,26874,26875), +PARTITION p6719 VALUES IN (26876,26877,26878,26879), +PARTITION p6720 VALUES IN (26880,26881,26882,26883), +PARTITION p6721 VALUES IN (26884,26885,26886,26887), +PARTITION p6722 VALUES IN (26888,26889,26890,26891), +PARTITION p6723 VALUES IN (26892,26893,26894,26895), +PARTITION p6724 VALUES IN (26896,26897,26898,26899), +PARTITION p6725 VALUES IN (26900,26901,26902,26903), +PARTITION p6726 VALUES IN (26904,26905,26906,26907), +PARTITION p6727 VALUES IN (26908,26909,26910,26911), +PARTITION p6728 VALUES IN (26912,26913,26914,26915), +PARTITION p6729 VALUES IN (26916,26917,26918,26919), +PARTITION p6730 VALUES IN (26920,26921,26922,26923), +PARTITION p6731 VALUES IN (26924,26925,26926,26927), +PARTITION p6732 VALUES IN (26928,26929,26930,26931), +PARTITION p6733 VALUES IN (26932,26933,26934,26935), +PARTITION p6734 VALUES IN (26936,26937,26938,26939), +PARTITION p6735 VALUES IN (26940,26941,26942,26943), +PARTITION p6736 VALUES IN (26944,26945,26946,26947), +PARTITION p6737 VALUES IN (26948,26949,26950,26951), +PARTITION p6738 VALUES IN (26952,26953,26954,26955), +PARTITION p6739 VALUES IN (26956,26957,26958,26959), +PARTITION p6740 VALUES IN (26960,26961,26962,26963), +PARTITION p6741 VALUES IN (26964,26965,26966,26967), +PARTITION p6742 VALUES IN (26968,26969,26970,26971), +PARTITION p6743 VALUES IN (26972,26973,26974,26975), +PARTITION p6744 VALUES IN (26976,26977,26978,26979), +PARTITION p6745 VALUES IN (26980,26981,26982,26983), +PARTITION p6746 VALUES IN (26984,26985,26986,26987), +PARTITION p6747 VALUES IN (26988,26989,26990,26991), +PARTITION p6748 VALUES IN (26992,26993,26994,26995), +PARTITION p6749 VALUES IN (26996,26997,26998,26999), +PARTITION p6750 VALUES IN (27000,27001,27002,27003), +PARTITION p6751 VALUES IN (27004,27005,27006,27007), +PARTITION p6752 VALUES IN (27008,27009,27010,27011), +PARTITION p6753 VALUES IN (27012,27013,27014,27015), +PARTITION p6754 VALUES IN (27016,27017,27018,27019), +PARTITION p6755 VALUES IN (27020,27021,27022,27023), +PARTITION p6756 VALUES IN (27024,27025,27026,27027), +PARTITION p6757 VALUES IN (27028,27029,27030,27031), +PARTITION p6758 VALUES IN (27032,27033,27034,27035), +PARTITION p6759 VALUES IN (27036,27037,27038,27039), +PARTITION p6760 VALUES IN (27040,27041,27042,27043), +PARTITION p6761 VALUES IN (27044,27045,27046,27047), +PARTITION p6762 VALUES IN (27048,27049,27050,27051), +PARTITION p6763 VALUES IN (27052,27053,27054,27055), +PARTITION p6764 VALUES IN (27056,27057,27058,27059), +PARTITION p6765 VALUES IN (27060,27061,27062,27063), +PARTITION p6766 VALUES IN (27064,27065,27066,27067), +PARTITION p6767 VALUES IN (27068,27069,27070,27071), +PARTITION p6768 VALUES IN (27072,27073,27074,27075), +PARTITION p6769 VALUES IN (27076,27077,27078,27079), +PARTITION p6770 VALUES IN (27080,27081,27082,27083), +PARTITION p6771 VALUES IN (27084,27085,27086,27087), +PARTITION p6772 VALUES IN (27088,27089,27090,27091), +PARTITION p6773 VALUES IN (27092,27093,27094,27095), +PARTITION p6774 VALUES IN (27096,27097,27098,27099), +PARTITION p6775 VALUES IN (27100,27101,27102,27103), +PARTITION p6776 VALUES IN (27104,27105,27106,27107), +PARTITION p6777 VALUES IN (27108,27109,27110,27111), +PARTITION p6778 VALUES IN (27112,27113,27114,27115), +PARTITION p6779 VALUES IN (27116,27117,27118,27119), +PARTITION p6780 VALUES IN (27120,27121,27122,27123), +PARTITION p6781 VALUES IN (27124,27125,27126,27127), +PARTITION p6782 VALUES IN (27128,27129,27130,27131), +PARTITION p6783 VALUES IN (27132,27133,27134,27135), +PARTITION p6784 VALUES IN (27136,27137,27138,27139), +PARTITION p6785 VALUES IN (27140,27141,27142,27143), +PARTITION p6786 VALUES IN (27144,27145,27146,27147), +PARTITION p6787 VALUES IN (27148,27149,27150,27151), +PARTITION p6788 VALUES IN (27152,27153,27154,27155), +PARTITION p6789 VALUES IN (27156,27157,27158,27159), +PARTITION p6790 VALUES IN (27160,27161,27162,27163), +PARTITION p6791 VALUES IN (27164,27165,27166,27167), +PARTITION p6792 VALUES IN (27168,27169,27170,27171), +PARTITION p6793 VALUES IN (27172,27173,27174,27175), +PARTITION p6794 VALUES IN (27176,27177,27178,27179), +PARTITION p6795 VALUES IN (27180,27181,27182,27183), +PARTITION p6796 VALUES IN (27184,27185,27186,27187), +PARTITION p6797 VALUES IN (27188,27189,27190,27191), +PARTITION p6798 VALUES IN (27192,27193,27194,27195), +PARTITION p6799 VALUES IN (27196,27197,27198,27199), +PARTITION p6800 VALUES IN (27200,27201,27202,27203), +PARTITION p6801 VALUES IN (27204,27205,27206,27207), +PARTITION p6802 VALUES IN (27208,27209,27210,27211), +PARTITION p6803 VALUES IN (27212,27213,27214,27215), +PARTITION p6804 VALUES IN (27216,27217,27218,27219), +PARTITION p6805 VALUES IN (27220,27221,27222,27223), +PARTITION p6806 VALUES IN (27224,27225,27226,27227), +PARTITION p6807 VALUES IN (27228,27229,27230,27231), +PARTITION p6808 VALUES IN (27232,27233,27234,27235), +PARTITION p6809 VALUES IN (27236,27237,27238,27239), +PARTITION p6810 VALUES IN (27240,27241,27242,27243), +PARTITION p6811 VALUES IN (27244,27245,27246,27247), +PARTITION p6812 VALUES IN (27248,27249,27250,27251), +PARTITION p6813 VALUES IN (27252,27253,27254,27255), +PARTITION p6814 VALUES IN (27256,27257,27258,27259), +PARTITION p6815 VALUES IN (27260,27261,27262,27263), +PARTITION p6816 VALUES IN (27264,27265,27266,27267), +PARTITION p6817 VALUES IN (27268,27269,27270,27271), +PARTITION p6818 VALUES IN (27272,27273,27274,27275), +PARTITION p6819 VALUES IN (27276,27277,27278,27279), +PARTITION p6820 VALUES IN (27280,27281,27282,27283), +PARTITION p6821 VALUES IN (27284,27285,27286,27287), +PARTITION p6822 VALUES IN (27288,27289,27290,27291), +PARTITION p6823 VALUES IN (27292,27293,27294,27295), +PARTITION p6824 VALUES IN (27296,27297,27298,27299), +PARTITION p6825 VALUES IN (27300,27301,27302,27303), +PARTITION p6826 VALUES IN (27304,27305,27306,27307), +PARTITION p6827 VALUES IN (27308,27309,27310,27311), +PARTITION p6828 VALUES IN (27312,27313,27314,27315), +PARTITION p6829 VALUES IN (27316,27317,27318,27319), +PARTITION p6830 VALUES IN (27320,27321,27322,27323), +PARTITION p6831 VALUES IN (27324,27325,27326,27327), +PARTITION p6832 VALUES IN (27328,27329,27330,27331), +PARTITION p6833 VALUES IN (27332,27333,27334,27335), +PARTITION p6834 VALUES IN (27336,27337,27338,27339), +PARTITION p6835 VALUES IN (27340,27341,27342,27343), +PARTITION p6836 VALUES IN (27344,27345,27346,27347), +PARTITION p6837 VALUES IN (27348,27349,27350,27351), +PARTITION p6838 VALUES IN (27352,27353,27354,27355), +PARTITION p6839 VALUES IN (27356,27357,27358,27359), +PARTITION p6840 VALUES IN (27360,27361,27362,27363), +PARTITION p6841 VALUES IN (27364,27365,27366,27367), +PARTITION p6842 VALUES IN (27368,27369,27370,27371), +PARTITION p6843 VALUES IN (27372,27373,27374,27375), +PARTITION p6844 VALUES IN (27376,27377,27378,27379), +PARTITION p6845 VALUES IN (27380,27381,27382,27383), +PARTITION p6846 VALUES IN (27384,27385,27386,27387), +PARTITION p6847 VALUES IN (27388,27389,27390,27391), +PARTITION p6848 VALUES IN (27392,27393,27394,27395), +PARTITION p6849 VALUES IN (27396,27397,27398,27399), +PARTITION p6850 VALUES IN (27400,27401,27402,27403), +PARTITION p6851 VALUES IN (27404,27405,27406,27407), +PARTITION p6852 VALUES IN (27408,27409,27410,27411), +PARTITION p6853 VALUES IN (27412,27413,27414,27415), +PARTITION p6854 VALUES IN (27416,27417,27418,27419), +PARTITION p6855 VALUES IN (27420,27421,27422,27423), +PARTITION p6856 VALUES IN (27424,27425,27426,27427), +PARTITION p6857 VALUES IN (27428,27429,27430,27431), +PARTITION p6858 VALUES IN (27432,27433,27434,27435), +PARTITION p6859 VALUES IN (27436,27437,27438,27439), +PARTITION p6860 VALUES IN (27440,27441,27442,27443), +PARTITION p6861 VALUES IN (27444,27445,27446,27447), +PARTITION p6862 VALUES IN (27448,27449,27450,27451), +PARTITION p6863 VALUES IN (27452,27453,27454,27455), +PARTITION p6864 VALUES IN (27456,27457,27458,27459), +PARTITION p6865 VALUES IN (27460,27461,27462,27463), +PARTITION p6866 VALUES IN (27464,27465,27466,27467), +PARTITION p6867 VALUES IN (27468,27469,27470,27471), +PARTITION p6868 VALUES IN (27472,27473,27474,27475), +PARTITION p6869 VALUES IN (27476,27477,27478,27479), +PARTITION p6870 VALUES IN (27480,27481,27482,27483), +PARTITION p6871 VALUES IN (27484,27485,27486,27487), +PARTITION p6872 VALUES IN (27488,27489,27490,27491), +PARTITION p6873 VALUES IN (27492,27493,27494,27495), +PARTITION p6874 VALUES IN (27496,27497,27498,27499), +PARTITION p6875 VALUES IN (27500,27501,27502,27503), +PARTITION p6876 VALUES IN (27504,27505,27506,27507), +PARTITION p6877 VALUES IN (27508,27509,27510,27511), +PARTITION p6878 VALUES IN (27512,27513,27514,27515), +PARTITION p6879 VALUES IN (27516,27517,27518,27519), +PARTITION p6880 VALUES IN (27520,27521,27522,27523), +PARTITION p6881 VALUES IN (27524,27525,27526,27527), +PARTITION p6882 VALUES IN (27528,27529,27530,27531), +PARTITION p6883 VALUES IN (27532,27533,27534,27535), +PARTITION p6884 VALUES IN (27536,27537,27538,27539), +PARTITION p6885 VALUES IN (27540,27541,27542,27543), +PARTITION p6886 VALUES IN (27544,27545,27546,27547), +PARTITION p6887 VALUES IN (27548,27549,27550,27551), +PARTITION p6888 VALUES IN (27552,27553,27554,27555), +PARTITION p6889 VALUES IN (27556,27557,27558,27559), +PARTITION p6890 VALUES IN (27560,27561,27562,27563), +PARTITION p6891 VALUES IN (27564,27565,27566,27567), +PARTITION p6892 VALUES IN (27568,27569,27570,27571), +PARTITION p6893 VALUES IN (27572,27573,27574,27575), +PARTITION p6894 VALUES IN (27576,27577,27578,27579), +PARTITION p6895 VALUES IN (27580,27581,27582,27583), +PARTITION p6896 VALUES IN (27584,27585,27586,27587), +PARTITION p6897 VALUES IN (27588,27589,27590,27591), +PARTITION p6898 VALUES IN (27592,27593,27594,27595), +PARTITION p6899 VALUES IN (27596,27597,27598,27599), +PARTITION p6900 VALUES IN (27600,27601,27602,27603), +PARTITION p6901 VALUES IN (27604,27605,27606,27607), +PARTITION p6902 VALUES IN (27608,27609,27610,27611), +PARTITION p6903 VALUES IN (27612,27613,27614,27615), +PARTITION p6904 VALUES IN (27616,27617,27618,27619), +PARTITION p6905 VALUES IN (27620,27621,27622,27623), +PARTITION p6906 VALUES IN (27624,27625,27626,27627), +PARTITION p6907 VALUES IN (27628,27629,27630,27631), +PARTITION p6908 VALUES IN (27632,27633,27634,27635), +PARTITION p6909 VALUES IN (27636,27637,27638,27639), +PARTITION p6910 VALUES IN (27640,27641,27642,27643), +PARTITION p6911 VALUES IN (27644,27645,27646,27647), +PARTITION p6912 VALUES IN (27648,27649,27650,27651), +PARTITION p6913 VALUES IN (27652,27653,27654,27655), +PARTITION p6914 VALUES IN (27656,27657,27658,27659), +PARTITION p6915 VALUES IN (27660,27661,27662,27663), +PARTITION p6916 VALUES IN (27664,27665,27666,27667), +PARTITION p6917 VALUES IN (27668,27669,27670,27671), +PARTITION p6918 VALUES IN (27672,27673,27674,27675), +PARTITION p6919 VALUES IN (27676,27677,27678,27679), +PARTITION p6920 VALUES IN (27680,27681,27682,27683), +PARTITION p6921 VALUES IN (27684,27685,27686,27687), +PARTITION p6922 VALUES IN (27688,27689,27690,27691), +PARTITION p6923 VALUES IN (27692,27693,27694,27695), +PARTITION p6924 VALUES IN (27696,27697,27698,27699), +PARTITION p6925 VALUES IN (27700,27701,27702,27703), +PARTITION p6926 VALUES IN (27704,27705,27706,27707), +PARTITION p6927 VALUES IN (27708,27709,27710,27711), +PARTITION p6928 VALUES IN (27712,27713,27714,27715), +PARTITION p6929 VALUES IN (27716,27717,27718,27719), +PARTITION p6930 VALUES IN (27720,27721,27722,27723), +PARTITION p6931 VALUES IN (27724,27725,27726,27727), +PARTITION p6932 VALUES IN (27728,27729,27730,27731), +PARTITION p6933 VALUES IN (27732,27733,27734,27735), +PARTITION p6934 VALUES IN (27736,27737,27738,27739), +PARTITION p6935 VALUES IN (27740,27741,27742,27743), +PARTITION p6936 VALUES IN (27744,27745,27746,27747), +PARTITION p6937 VALUES IN (27748,27749,27750,27751), +PARTITION p6938 VALUES IN (27752,27753,27754,27755), +PARTITION p6939 VALUES IN (27756,27757,27758,27759), +PARTITION p6940 VALUES IN (27760,27761,27762,27763), +PARTITION p6941 VALUES IN (27764,27765,27766,27767), +PARTITION p6942 VALUES IN (27768,27769,27770,27771), +PARTITION p6943 VALUES IN (27772,27773,27774,27775), +PARTITION p6944 VALUES IN (27776,27777,27778,27779), +PARTITION p6945 VALUES IN (27780,27781,27782,27783), +PARTITION p6946 VALUES IN (27784,27785,27786,27787), +PARTITION p6947 VALUES IN (27788,27789,27790,27791), +PARTITION p6948 VALUES IN (27792,27793,27794,27795), +PARTITION p6949 VALUES IN (27796,27797,27798,27799), +PARTITION p6950 VALUES IN (27800,27801,27802,27803), +PARTITION p6951 VALUES IN (27804,27805,27806,27807), +PARTITION p6952 VALUES IN (27808,27809,27810,27811), +PARTITION p6953 VALUES IN (27812,27813,27814,27815), +PARTITION p6954 VALUES IN (27816,27817,27818,27819), +PARTITION p6955 VALUES IN (27820,27821,27822,27823), +PARTITION p6956 VALUES IN (27824,27825,27826,27827), +PARTITION p6957 VALUES IN (27828,27829,27830,27831), +PARTITION p6958 VALUES IN (27832,27833,27834,27835), +PARTITION p6959 VALUES IN (27836,27837,27838,27839), +PARTITION p6960 VALUES IN (27840,27841,27842,27843), +PARTITION p6961 VALUES IN (27844,27845,27846,27847), +PARTITION p6962 VALUES IN (27848,27849,27850,27851), +PARTITION p6963 VALUES IN (27852,27853,27854,27855), +PARTITION p6964 VALUES IN (27856,27857,27858,27859), +PARTITION p6965 VALUES IN (27860,27861,27862,27863), +PARTITION p6966 VALUES IN (27864,27865,27866,27867), +PARTITION p6967 VALUES IN (27868,27869,27870,27871), +PARTITION p6968 VALUES IN (27872,27873,27874,27875), +PARTITION p6969 VALUES IN (27876,27877,27878,27879), +PARTITION p6970 VALUES IN (27880,27881,27882,27883), +PARTITION p6971 VALUES IN (27884,27885,27886,27887), +PARTITION p6972 VALUES IN (27888,27889,27890,27891), +PARTITION p6973 VALUES IN (27892,27893,27894,27895), +PARTITION p6974 VALUES IN (27896,27897,27898,27899), +PARTITION p6975 VALUES IN (27900,27901,27902,27903), +PARTITION p6976 VALUES IN (27904,27905,27906,27907), +PARTITION p6977 VALUES IN (27908,27909,27910,27911), +PARTITION p6978 VALUES IN (27912,27913,27914,27915), +PARTITION p6979 VALUES IN (27916,27917,27918,27919), +PARTITION p6980 VALUES IN (27920,27921,27922,27923), +PARTITION p6981 VALUES IN (27924,27925,27926,27927), +PARTITION p6982 VALUES IN (27928,27929,27930,27931), +PARTITION p6983 VALUES IN (27932,27933,27934,27935), +PARTITION p6984 VALUES IN (27936,27937,27938,27939), +PARTITION p6985 VALUES IN (27940,27941,27942,27943), +PARTITION p6986 VALUES IN (27944,27945,27946,27947), +PARTITION p6987 VALUES IN (27948,27949,27950,27951), +PARTITION p6988 VALUES IN (27952,27953,27954,27955), +PARTITION p6989 VALUES IN (27956,27957,27958,27959), +PARTITION p6990 VALUES IN (27960,27961,27962,27963), +PARTITION p6991 VALUES IN (27964,27965,27966,27967), +PARTITION p6992 VALUES IN (27968,27969,27970,27971), +PARTITION p6993 VALUES IN (27972,27973,27974,27975), +PARTITION p6994 VALUES IN (27976,27977,27978,27979), +PARTITION p6995 VALUES IN (27980,27981,27982,27983), +PARTITION p6996 VALUES IN (27984,27985,27986,27987), +PARTITION p6997 VALUES IN (27988,27989,27990,27991), +PARTITION p6998 VALUES IN (27992,27993,27994,27995), +PARTITION p6999 VALUES IN (27996,27997,27998,27999), +PARTITION p7000 VALUES IN (28000,28001,28002,28003), +PARTITION p7001 VALUES IN (28004,28005,28006,28007), +PARTITION p7002 VALUES IN (28008,28009,28010,28011), +PARTITION p7003 VALUES IN (28012,28013,28014,28015), +PARTITION p7004 VALUES IN (28016,28017,28018,28019), +PARTITION p7005 VALUES IN (28020,28021,28022,28023), +PARTITION p7006 VALUES IN (28024,28025,28026,28027), +PARTITION p7007 VALUES IN (28028,28029,28030,28031), +PARTITION p7008 VALUES IN (28032,28033,28034,28035), +PARTITION p7009 VALUES IN (28036,28037,28038,28039), +PARTITION p7010 VALUES IN (28040,28041,28042,28043), +PARTITION p7011 VALUES IN (28044,28045,28046,28047), +PARTITION p7012 VALUES IN (28048,28049,28050,28051), +PARTITION p7013 VALUES IN (28052,28053,28054,28055), +PARTITION p7014 VALUES IN (28056,28057,28058,28059), +PARTITION p7015 VALUES IN (28060,28061,28062,28063), +PARTITION p7016 VALUES IN (28064,28065,28066,28067), +PARTITION p7017 VALUES IN (28068,28069,28070,28071), +PARTITION p7018 VALUES IN (28072,28073,28074,28075), +PARTITION p7019 VALUES IN (28076,28077,28078,28079), +PARTITION p7020 VALUES IN (28080,28081,28082,28083), +PARTITION p7021 VALUES IN (28084,28085,28086,28087), +PARTITION p7022 VALUES IN (28088,28089,28090,28091), +PARTITION p7023 VALUES IN (28092,28093,28094,28095), +PARTITION p7024 VALUES IN (28096,28097,28098,28099), +PARTITION p7025 VALUES IN (28100,28101,28102,28103), +PARTITION p7026 VALUES IN (28104,28105,28106,28107), +PARTITION p7027 VALUES IN (28108,28109,28110,28111), +PARTITION p7028 VALUES IN (28112,28113,28114,28115), +PARTITION p7029 VALUES IN (28116,28117,28118,28119), +PARTITION p7030 VALUES IN (28120,28121,28122,28123), +PARTITION p7031 VALUES IN (28124,28125,28126,28127), +PARTITION p7032 VALUES IN (28128,28129,28130,28131), +PARTITION p7033 VALUES IN (28132,28133,28134,28135), +PARTITION p7034 VALUES IN (28136,28137,28138,28139), +PARTITION p7035 VALUES IN (28140,28141,28142,28143), +PARTITION p7036 VALUES IN (28144,28145,28146,28147), +PARTITION p7037 VALUES IN (28148,28149,28150,28151), +PARTITION p7038 VALUES IN (28152,28153,28154,28155), +PARTITION p7039 VALUES IN (28156,28157,28158,28159), +PARTITION p7040 VALUES IN (28160,28161,28162,28163), +PARTITION p7041 VALUES IN (28164,28165,28166,28167), +PARTITION p7042 VALUES IN (28168,28169,28170,28171), +PARTITION p7043 VALUES IN (28172,28173,28174,28175), +PARTITION p7044 VALUES IN (28176,28177,28178,28179), +PARTITION p7045 VALUES IN (28180,28181,28182,28183), +PARTITION p7046 VALUES IN (28184,28185,28186,28187), +PARTITION p7047 VALUES IN (28188,28189,28190,28191), +PARTITION p7048 VALUES IN (28192,28193,28194,28195), +PARTITION p7049 VALUES IN (28196,28197,28198,28199), +PARTITION p7050 VALUES IN (28200,28201,28202,28203), +PARTITION p7051 VALUES IN (28204,28205,28206,28207), +PARTITION p7052 VALUES IN (28208,28209,28210,28211), +PARTITION p7053 VALUES IN (28212,28213,28214,28215), +PARTITION p7054 VALUES IN (28216,28217,28218,28219), +PARTITION p7055 VALUES IN (28220,28221,28222,28223), +PARTITION p7056 VALUES IN (28224,28225,28226,28227), +PARTITION p7057 VALUES IN (28228,28229,28230,28231), +PARTITION p7058 VALUES IN (28232,28233,28234,28235), +PARTITION p7059 VALUES IN (28236,28237,28238,28239), +PARTITION p7060 VALUES IN (28240,28241,28242,28243), +PARTITION p7061 VALUES IN (28244,28245,28246,28247), +PARTITION p7062 VALUES IN (28248,28249,28250,28251), +PARTITION p7063 VALUES IN (28252,28253,28254,28255), +PARTITION p7064 VALUES IN (28256,28257,28258,28259), +PARTITION p7065 VALUES IN (28260,28261,28262,28263), +PARTITION p7066 VALUES IN (28264,28265,28266,28267), +PARTITION p7067 VALUES IN (28268,28269,28270,28271), +PARTITION p7068 VALUES IN (28272,28273,28274,28275), +PARTITION p7069 VALUES IN (28276,28277,28278,28279), +PARTITION p7070 VALUES IN (28280,28281,28282,28283), +PARTITION p7071 VALUES IN (28284,28285,28286,28287), +PARTITION p7072 VALUES IN (28288,28289,28290,28291), +PARTITION p7073 VALUES IN (28292,28293,28294,28295), +PARTITION p7074 VALUES IN (28296,28297,28298,28299), +PARTITION p7075 VALUES IN (28300,28301,28302,28303), +PARTITION p7076 VALUES IN (28304,28305,28306,28307), +PARTITION p7077 VALUES IN (28308,28309,28310,28311), +PARTITION p7078 VALUES IN (28312,28313,28314,28315), +PARTITION p7079 VALUES IN (28316,28317,28318,28319), +PARTITION p7080 VALUES IN (28320,28321,28322,28323), +PARTITION p7081 VALUES IN (28324,28325,28326,28327), +PARTITION p7082 VALUES IN (28328,28329,28330,28331), +PARTITION p7083 VALUES IN (28332,28333,28334,28335), +PARTITION p7084 VALUES IN (28336,28337,28338,28339), +PARTITION p7085 VALUES IN (28340,28341,28342,28343), +PARTITION p7086 VALUES IN (28344,28345,28346,28347), +PARTITION p7087 VALUES IN (28348,28349,28350,28351), +PARTITION p7088 VALUES IN (28352,28353,28354,28355), +PARTITION p7089 VALUES IN (28356,28357,28358,28359), +PARTITION p7090 VALUES IN (28360,28361,28362,28363), +PARTITION p7091 VALUES IN (28364,28365,28366,28367), +PARTITION p7092 VALUES IN (28368,28369,28370,28371), +PARTITION p7093 VALUES IN (28372,28373,28374,28375), +PARTITION p7094 VALUES IN (28376,28377,28378,28379), +PARTITION p7095 VALUES IN (28380,28381,28382,28383), +PARTITION p7096 VALUES IN (28384,28385,28386,28387), +PARTITION p7097 VALUES IN (28388,28389,28390,28391), +PARTITION p7098 VALUES IN (28392,28393,28394,28395), +PARTITION p7099 VALUES IN (28396,28397,28398,28399), +PARTITION p7100 VALUES IN (28400,28401,28402,28403), +PARTITION p7101 VALUES IN (28404,28405,28406,28407), +PARTITION p7102 VALUES IN (28408,28409,28410,28411), +PARTITION p7103 VALUES IN (28412,28413,28414,28415), +PARTITION p7104 VALUES IN (28416,28417,28418,28419), +PARTITION p7105 VALUES IN (28420,28421,28422,28423), +PARTITION p7106 VALUES IN (28424,28425,28426,28427), +PARTITION p7107 VALUES IN (28428,28429,28430,28431), +PARTITION p7108 VALUES IN (28432,28433,28434,28435), +PARTITION p7109 VALUES IN (28436,28437,28438,28439), +PARTITION p7110 VALUES IN (28440,28441,28442,28443), +PARTITION p7111 VALUES IN (28444,28445,28446,28447), +PARTITION p7112 VALUES IN (28448,28449,28450,28451), +PARTITION p7113 VALUES IN (28452,28453,28454,28455), +PARTITION p7114 VALUES IN (28456,28457,28458,28459), +PARTITION p7115 VALUES IN (28460,28461,28462,28463), +PARTITION p7116 VALUES IN (28464,28465,28466,28467), +PARTITION p7117 VALUES IN (28468,28469,28470,28471), +PARTITION p7118 VALUES IN (28472,28473,28474,28475), +PARTITION p7119 VALUES IN (28476,28477,28478,28479), +PARTITION p7120 VALUES IN (28480,28481,28482,28483), +PARTITION p7121 VALUES IN (28484,28485,28486,28487), +PARTITION p7122 VALUES IN (28488,28489,28490,28491), +PARTITION p7123 VALUES IN (28492,28493,28494,28495), +PARTITION p7124 VALUES IN (28496,28497,28498,28499), +PARTITION p7125 VALUES IN (28500,28501,28502,28503), +PARTITION p7126 VALUES IN (28504,28505,28506,28507), +PARTITION p7127 VALUES IN (28508,28509,28510,28511), +PARTITION p7128 VALUES IN (28512,28513,28514,28515), +PARTITION p7129 VALUES IN (28516,28517,28518,28519), +PARTITION p7130 VALUES IN (28520,28521,28522,28523), +PARTITION p7131 VALUES IN (28524,28525,28526,28527), +PARTITION p7132 VALUES IN (28528,28529,28530,28531), +PARTITION p7133 VALUES IN (28532,28533,28534,28535), +PARTITION p7134 VALUES IN (28536,28537,28538,28539), +PARTITION p7135 VALUES IN (28540,28541,28542,28543), +PARTITION p7136 VALUES IN (28544,28545,28546,28547), +PARTITION p7137 VALUES IN (28548,28549,28550,28551), +PARTITION p7138 VALUES IN (28552,28553,28554,28555), +PARTITION p7139 VALUES IN (28556,28557,28558,28559), +PARTITION p7140 VALUES IN (28560,28561,28562,28563), +PARTITION p7141 VALUES IN (28564,28565,28566,28567), +PARTITION p7142 VALUES IN (28568,28569,28570,28571), +PARTITION p7143 VALUES IN (28572,28573,28574,28575), +PARTITION p7144 VALUES IN (28576,28577,28578,28579), +PARTITION p7145 VALUES IN (28580,28581,28582,28583), +PARTITION p7146 VALUES IN (28584,28585,28586,28587), +PARTITION p7147 VALUES IN (28588,28589,28590,28591), +PARTITION p7148 VALUES IN (28592,28593,28594,28595), +PARTITION p7149 VALUES IN (28596,28597,28598,28599), +PARTITION p7150 VALUES IN (28600,28601,28602,28603), +PARTITION p7151 VALUES IN (28604,28605,28606,28607), +PARTITION p7152 VALUES IN (28608,28609,28610,28611), +PARTITION p7153 VALUES IN (28612,28613,28614,28615), +PARTITION p7154 VALUES IN (28616,28617,28618,28619), +PARTITION p7155 VALUES IN (28620,28621,28622,28623), +PARTITION p7156 VALUES IN (28624,28625,28626,28627), +PARTITION p7157 VALUES IN (28628,28629,28630,28631), +PARTITION p7158 VALUES IN (28632,28633,28634,28635), +PARTITION p7159 VALUES IN (28636,28637,28638,28639), +PARTITION p7160 VALUES IN (28640,28641,28642,28643), +PARTITION p7161 VALUES IN (28644,28645,28646,28647), +PARTITION p7162 VALUES IN (28648,28649,28650,28651), +PARTITION p7163 VALUES IN (28652,28653,28654,28655), +PARTITION p7164 VALUES IN (28656,28657,28658,28659), +PARTITION p7165 VALUES IN (28660,28661,28662,28663), +PARTITION p7166 VALUES IN (28664,28665,28666,28667), +PARTITION p7167 VALUES IN (28668,28669,28670,28671), +PARTITION p7168 VALUES IN (28672,28673,28674,28675), +PARTITION p7169 VALUES IN (28676,28677,28678,28679), +PARTITION p7170 VALUES IN (28680,28681,28682,28683), +PARTITION p7171 VALUES IN (28684,28685,28686,28687), +PARTITION p7172 VALUES IN (28688,28689,28690,28691), +PARTITION p7173 VALUES IN (28692,28693,28694,28695), +PARTITION p7174 VALUES IN (28696,28697,28698,28699), +PARTITION p7175 VALUES IN (28700,28701,28702,28703), +PARTITION p7176 VALUES IN (28704,28705,28706,28707), +PARTITION p7177 VALUES IN (28708,28709,28710,28711), +PARTITION p7178 VALUES IN (28712,28713,28714,28715), +PARTITION p7179 VALUES IN (28716,28717,28718,28719), +PARTITION p7180 VALUES IN (28720,28721,28722,28723), +PARTITION p7181 VALUES IN (28724,28725,28726,28727), +PARTITION p7182 VALUES IN (28728,28729,28730,28731), +PARTITION p7183 VALUES IN (28732,28733,28734,28735), +PARTITION p7184 VALUES IN (28736,28737,28738,28739), +PARTITION p7185 VALUES IN (28740,28741,28742,28743), +PARTITION p7186 VALUES IN (28744,28745,28746,28747), +PARTITION p7187 VALUES IN (28748,28749,28750,28751), +PARTITION p7188 VALUES IN (28752,28753,28754,28755), +PARTITION p7189 VALUES IN (28756,28757,28758,28759), +PARTITION p7190 VALUES IN (28760,28761,28762,28763), +PARTITION p7191 VALUES IN (28764,28765,28766,28767), +PARTITION p7192 VALUES IN (28768,28769,28770,28771), +PARTITION p7193 VALUES IN (28772,28773,28774,28775), +PARTITION p7194 VALUES IN (28776,28777,28778,28779), +PARTITION p7195 VALUES IN (28780,28781,28782,28783), +PARTITION p7196 VALUES IN (28784,28785,28786,28787), +PARTITION p7197 VALUES IN (28788,28789,28790,28791), +PARTITION p7198 VALUES IN (28792,28793,28794,28795), +PARTITION p7199 VALUES IN (28796,28797,28798,28799), +PARTITION p7200 VALUES IN (28800,28801,28802,28803), +PARTITION p7201 VALUES IN (28804,28805,28806,28807), +PARTITION p7202 VALUES IN (28808,28809,28810,28811), +PARTITION p7203 VALUES IN (28812,28813,28814,28815), +PARTITION p7204 VALUES IN (28816,28817,28818,28819), +PARTITION p7205 VALUES IN (28820,28821,28822,28823), +PARTITION p7206 VALUES IN (28824,28825,28826,28827), +PARTITION p7207 VALUES IN (28828,28829,28830,28831), +PARTITION p7208 VALUES IN (28832,28833,28834,28835), +PARTITION p7209 VALUES IN (28836,28837,28838,28839), +PARTITION p7210 VALUES IN (28840,28841,28842,28843), +PARTITION p7211 VALUES IN (28844,28845,28846,28847), +PARTITION p7212 VALUES IN (28848,28849,28850,28851), +PARTITION p7213 VALUES IN (28852,28853,28854,28855), +PARTITION p7214 VALUES IN (28856,28857,28858,28859), +PARTITION p7215 VALUES IN (28860,28861,28862,28863), +PARTITION p7216 VALUES IN (28864,28865,28866,28867), +PARTITION p7217 VALUES IN (28868,28869,28870,28871), +PARTITION p7218 VALUES IN (28872,28873,28874,28875), +PARTITION p7219 VALUES IN (28876,28877,28878,28879), +PARTITION p7220 VALUES IN (28880,28881,28882,28883), +PARTITION p7221 VALUES IN (28884,28885,28886,28887), +PARTITION p7222 VALUES IN (28888,28889,28890,28891), +PARTITION p7223 VALUES IN (28892,28893,28894,28895), +PARTITION p7224 VALUES IN (28896,28897,28898,28899), +PARTITION p7225 VALUES IN (28900,28901,28902,28903), +PARTITION p7226 VALUES IN (28904,28905,28906,28907), +PARTITION p7227 VALUES IN (28908,28909,28910,28911), +PARTITION p7228 VALUES IN (28912,28913,28914,28915), +PARTITION p7229 VALUES IN (28916,28917,28918,28919), +PARTITION p7230 VALUES IN (28920,28921,28922,28923), +PARTITION p7231 VALUES IN (28924,28925,28926,28927), +PARTITION p7232 VALUES IN (28928,28929,28930,28931), +PARTITION p7233 VALUES IN (28932,28933,28934,28935), +PARTITION p7234 VALUES IN (28936,28937,28938,28939), +PARTITION p7235 VALUES IN (28940,28941,28942,28943), +PARTITION p7236 VALUES IN (28944,28945,28946,28947), +PARTITION p7237 VALUES IN (28948,28949,28950,28951), +PARTITION p7238 VALUES IN (28952,28953,28954,28955), +PARTITION p7239 VALUES IN (28956,28957,28958,28959), +PARTITION p7240 VALUES IN (28960,28961,28962,28963), +PARTITION p7241 VALUES IN (28964,28965,28966,28967), +PARTITION p7242 VALUES IN (28968,28969,28970,28971), +PARTITION p7243 VALUES IN (28972,28973,28974,28975), +PARTITION p7244 VALUES IN (28976,28977,28978,28979), +PARTITION p7245 VALUES IN (28980,28981,28982,28983), +PARTITION p7246 VALUES IN (28984,28985,28986,28987), +PARTITION p7247 VALUES IN (28988,28989,28990,28991), +PARTITION p7248 VALUES IN (28992,28993,28994,28995), +PARTITION p7249 VALUES IN (28996,28997,28998,28999), +PARTITION p7250 VALUES IN (29000,29001,29002,29003), +PARTITION p7251 VALUES IN (29004,29005,29006,29007), +PARTITION p7252 VALUES IN (29008,29009,29010,29011), +PARTITION p7253 VALUES IN (29012,29013,29014,29015), +PARTITION p7254 VALUES IN (29016,29017,29018,29019), +PARTITION p7255 VALUES IN (29020,29021,29022,29023), +PARTITION p7256 VALUES IN (29024,29025,29026,29027), +PARTITION p7257 VALUES IN (29028,29029,29030,29031), +PARTITION p7258 VALUES IN (29032,29033,29034,29035), +PARTITION p7259 VALUES IN (29036,29037,29038,29039), +PARTITION p7260 VALUES IN (29040,29041,29042,29043), +PARTITION p7261 VALUES IN (29044,29045,29046,29047), +PARTITION p7262 VALUES IN (29048,29049,29050,29051), +PARTITION p7263 VALUES IN (29052,29053,29054,29055), +PARTITION p7264 VALUES IN (29056,29057,29058,29059), +PARTITION p7265 VALUES IN (29060,29061,29062,29063), +PARTITION p7266 VALUES IN (29064,29065,29066,29067), +PARTITION p7267 VALUES IN (29068,29069,29070,29071), +PARTITION p7268 VALUES IN (29072,29073,29074,29075), +PARTITION p7269 VALUES IN (29076,29077,29078,29079), +PARTITION p7270 VALUES IN (29080,29081,29082,29083), +PARTITION p7271 VALUES IN (29084,29085,29086,29087), +PARTITION p7272 VALUES IN (29088,29089,29090,29091), +PARTITION p7273 VALUES IN (29092,29093,29094,29095), +PARTITION p7274 VALUES IN (29096,29097,29098,29099), +PARTITION p7275 VALUES IN (29100,29101,29102,29103), +PARTITION p7276 VALUES IN (29104,29105,29106,29107), +PARTITION p7277 VALUES IN (29108,29109,29110,29111), +PARTITION p7278 VALUES IN (29112,29113,29114,29115), +PARTITION p7279 VALUES IN (29116,29117,29118,29119), +PARTITION p7280 VALUES IN (29120,29121,29122,29123), +PARTITION p7281 VALUES IN (29124,29125,29126,29127), +PARTITION p7282 VALUES IN (29128,29129,29130,29131), +PARTITION p7283 VALUES IN (29132,29133,29134,29135), +PARTITION p7284 VALUES IN (29136,29137,29138,29139), +PARTITION p7285 VALUES IN (29140,29141,29142,29143), +PARTITION p7286 VALUES IN (29144,29145,29146,29147), +PARTITION p7287 VALUES IN (29148,29149,29150,29151), +PARTITION p7288 VALUES IN (29152,29153,29154,29155), +PARTITION p7289 VALUES IN (29156,29157,29158,29159), +PARTITION p7290 VALUES IN (29160,29161,29162,29163), +PARTITION p7291 VALUES IN (29164,29165,29166,29167), +PARTITION p7292 VALUES IN (29168,29169,29170,29171), +PARTITION p7293 VALUES IN (29172,29173,29174,29175), +PARTITION p7294 VALUES IN (29176,29177,29178,29179), +PARTITION p7295 VALUES IN (29180,29181,29182,29183), +PARTITION p7296 VALUES IN (29184,29185,29186,29187), +PARTITION p7297 VALUES IN (29188,29189,29190,29191), +PARTITION p7298 VALUES IN (29192,29193,29194,29195), +PARTITION p7299 VALUES IN (29196,29197,29198,29199), +PARTITION p7300 VALUES IN (29200,29201,29202,29203), +PARTITION p7301 VALUES IN (29204,29205,29206,29207), +PARTITION p7302 VALUES IN (29208,29209,29210,29211), +PARTITION p7303 VALUES IN (29212,29213,29214,29215), +PARTITION p7304 VALUES IN (29216,29217,29218,29219), +PARTITION p7305 VALUES IN (29220,29221,29222,29223), +PARTITION p7306 VALUES IN (29224,29225,29226,29227), +PARTITION p7307 VALUES IN (29228,29229,29230,29231), +PARTITION p7308 VALUES IN (29232,29233,29234,29235), +PARTITION p7309 VALUES IN (29236,29237,29238,29239), +PARTITION p7310 VALUES IN (29240,29241,29242,29243), +PARTITION p7311 VALUES IN (29244,29245,29246,29247), +PARTITION p7312 VALUES IN (29248,29249,29250,29251), +PARTITION p7313 VALUES IN (29252,29253,29254,29255), +PARTITION p7314 VALUES IN (29256,29257,29258,29259), +PARTITION p7315 VALUES IN (29260,29261,29262,29263), +PARTITION p7316 VALUES IN (29264,29265,29266,29267), +PARTITION p7317 VALUES IN (29268,29269,29270,29271), +PARTITION p7318 VALUES IN (29272,29273,29274,29275), +PARTITION p7319 VALUES IN (29276,29277,29278,29279), +PARTITION p7320 VALUES IN (29280,29281,29282,29283), +PARTITION p7321 VALUES IN (29284,29285,29286,29287), +PARTITION p7322 VALUES IN (29288,29289,29290,29291), +PARTITION p7323 VALUES IN (29292,29293,29294,29295), +PARTITION p7324 VALUES IN (29296,29297,29298,29299), +PARTITION p7325 VALUES IN (29300,29301,29302,29303), +PARTITION p7326 VALUES IN (29304,29305,29306,29307), +PARTITION p7327 VALUES IN (29308,29309,29310,29311), +PARTITION p7328 VALUES IN (29312,29313,29314,29315), +PARTITION p7329 VALUES IN (29316,29317,29318,29319), +PARTITION p7330 VALUES IN (29320,29321,29322,29323), +PARTITION p7331 VALUES IN (29324,29325,29326,29327), +PARTITION p7332 VALUES IN (29328,29329,29330,29331), +PARTITION p7333 VALUES IN (29332,29333,29334,29335), +PARTITION p7334 VALUES IN (29336,29337,29338,29339), +PARTITION p7335 VALUES IN (29340,29341,29342,29343), +PARTITION p7336 VALUES IN (29344,29345,29346,29347), +PARTITION p7337 VALUES IN (29348,29349,29350,29351), +PARTITION p7338 VALUES IN (29352,29353,29354,29355), +PARTITION p7339 VALUES IN (29356,29357,29358,29359), +PARTITION p7340 VALUES IN (29360,29361,29362,29363), +PARTITION p7341 VALUES IN (29364,29365,29366,29367), +PARTITION p7342 VALUES IN (29368,29369,29370,29371), +PARTITION p7343 VALUES IN (29372,29373,29374,29375), +PARTITION p7344 VALUES IN (29376,29377,29378,29379), +PARTITION p7345 VALUES IN (29380,29381,29382,29383), +PARTITION p7346 VALUES IN (29384,29385,29386,29387), +PARTITION p7347 VALUES IN (29388,29389,29390,29391), +PARTITION p7348 VALUES IN (29392,29393,29394,29395), +PARTITION p7349 VALUES IN (29396,29397,29398,29399), +PARTITION p7350 VALUES IN (29400,29401,29402,29403), +PARTITION p7351 VALUES IN (29404,29405,29406,29407), +PARTITION p7352 VALUES IN (29408,29409,29410,29411), +PARTITION p7353 VALUES IN (29412,29413,29414,29415), +PARTITION p7354 VALUES IN (29416,29417,29418,29419), +PARTITION p7355 VALUES IN (29420,29421,29422,29423), +PARTITION p7356 VALUES IN (29424,29425,29426,29427), +PARTITION p7357 VALUES IN (29428,29429,29430,29431), +PARTITION p7358 VALUES IN (29432,29433,29434,29435), +PARTITION p7359 VALUES IN (29436,29437,29438,29439), +PARTITION p7360 VALUES IN (29440,29441,29442,29443), +PARTITION p7361 VALUES IN (29444,29445,29446,29447), +PARTITION p7362 VALUES IN (29448,29449,29450,29451), +PARTITION p7363 VALUES IN (29452,29453,29454,29455), +PARTITION p7364 VALUES IN (29456,29457,29458,29459), +PARTITION p7365 VALUES IN (29460,29461,29462,29463), +PARTITION p7366 VALUES IN (29464,29465,29466,29467), +PARTITION p7367 VALUES IN (29468,29469,29470,29471), +PARTITION p7368 VALUES IN (29472,29473,29474,29475), +PARTITION p7369 VALUES IN (29476,29477,29478,29479), +PARTITION p7370 VALUES IN (29480,29481,29482,29483), +PARTITION p7371 VALUES IN (29484,29485,29486,29487), +PARTITION p7372 VALUES IN (29488,29489,29490,29491), +PARTITION p7373 VALUES IN (29492,29493,29494,29495), +PARTITION p7374 VALUES IN (29496,29497,29498,29499), +PARTITION p7375 VALUES IN (29500,29501,29502,29503), +PARTITION p7376 VALUES IN (29504,29505,29506,29507), +PARTITION p7377 VALUES IN (29508,29509,29510,29511), +PARTITION p7378 VALUES IN (29512,29513,29514,29515), +PARTITION p7379 VALUES IN (29516,29517,29518,29519), +PARTITION p7380 VALUES IN (29520,29521,29522,29523), +PARTITION p7381 VALUES IN (29524,29525,29526,29527), +PARTITION p7382 VALUES IN (29528,29529,29530,29531), +PARTITION p7383 VALUES IN (29532,29533,29534,29535), +PARTITION p7384 VALUES IN (29536,29537,29538,29539), +PARTITION p7385 VALUES IN (29540,29541,29542,29543), +PARTITION p7386 VALUES IN (29544,29545,29546,29547), +PARTITION p7387 VALUES IN (29548,29549,29550,29551), +PARTITION p7388 VALUES IN (29552,29553,29554,29555), +PARTITION p7389 VALUES IN (29556,29557,29558,29559), +PARTITION p7390 VALUES IN (29560,29561,29562,29563), +PARTITION p7391 VALUES IN (29564,29565,29566,29567), +PARTITION p7392 VALUES IN (29568,29569,29570,29571), +PARTITION p7393 VALUES IN (29572,29573,29574,29575), +PARTITION p7394 VALUES IN (29576,29577,29578,29579), +PARTITION p7395 VALUES IN (29580,29581,29582,29583), +PARTITION p7396 VALUES IN (29584,29585,29586,29587), +PARTITION p7397 VALUES IN (29588,29589,29590,29591), +PARTITION p7398 VALUES IN (29592,29593,29594,29595), +PARTITION p7399 VALUES IN (29596,29597,29598,29599), +PARTITION p7400 VALUES IN (29600,29601,29602,29603), +PARTITION p7401 VALUES IN (29604,29605,29606,29607), +PARTITION p7402 VALUES IN (29608,29609,29610,29611), +PARTITION p7403 VALUES IN (29612,29613,29614,29615), +PARTITION p7404 VALUES IN (29616,29617,29618,29619), +PARTITION p7405 VALUES IN (29620,29621,29622,29623), +PARTITION p7406 VALUES IN (29624,29625,29626,29627), +PARTITION p7407 VALUES IN (29628,29629,29630,29631), +PARTITION p7408 VALUES IN (29632,29633,29634,29635), +PARTITION p7409 VALUES IN (29636,29637,29638,29639), +PARTITION p7410 VALUES IN (29640,29641,29642,29643), +PARTITION p7411 VALUES IN (29644,29645,29646,29647), +PARTITION p7412 VALUES IN (29648,29649,29650,29651), +PARTITION p7413 VALUES IN (29652,29653,29654,29655), +PARTITION p7414 VALUES IN (29656,29657,29658,29659), +PARTITION p7415 VALUES IN (29660,29661,29662,29663), +PARTITION p7416 VALUES IN (29664,29665,29666,29667), +PARTITION p7417 VALUES IN (29668,29669,29670,29671), +PARTITION p7418 VALUES IN (29672,29673,29674,29675), +PARTITION p7419 VALUES IN (29676,29677,29678,29679), +PARTITION p7420 VALUES IN (29680,29681,29682,29683), +PARTITION p7421 VALUES IN (29684,29685,29686,29687), +PARTITION p7422 VALUES IN (29688,29689,29690,29691), +PARTITION p7423 VALUES IN (29692,29693,29694,29695), +PARTITION p7424 VALUES IN (29696,29697,29698,29699), +PARTITION p7425 VALUES IN (29700,29701,29702,29703), +PARTITION p7426 VALUES IN (29704,29705,29706,29707), +PARTITION p7427 VALUES IN (29708,29709,29710,29711), +PARTITION p7428 VALUES IN (29712,29713,29714,29715), +PARTITION p7429 VALUES IN (29716,29717,29718,29719), +PARTITION p7430 VALUES IN (29720,29721,29722,29723), +PARTITION p7431 VALUES IN (29724,29725,29726,29727), +PARTITION p7432 VALUES IN (29728,29729,29730,29731), +PARTITION p7433 VALUES IN (29732,29733,29734,29735), +PARTITION p7434 VALUES IN (29736,29737,29738,29739), +PARTITION p7435 VALUES IN (29740,29741,29742,29743), +PARTITION p7436 VALUES IN (29744,29745,29746,29747), +PARTITION p7437 VALUES IN (29748,29749,29750,29751), +PARTITION p7438 VALUES IN (29752,29753,29754,29755), +PARTITION p7439 VALUES IN (29756,29757,29758,29759), +PARTITION p7440 VALUES IN (29760,29761,29762,29763), +PARTITION p7441 VALUES IN (29764,29765,29766,29767), +PARTITION p7442 VALUES IN (29768,29769,29770,29771), +PARTITION p7443 VALUES IN (29772,29773,29774,29775), +PARTITION p7444 VALUES IN (29776,29777,29778,29779), +PARTITION p7445 VALUES IN (29780,29781,29782,29783), +PARTITION p7446 VALUES IN (29784,29785,29786,29787), +PARTITION p7447 VALUES IN (29788,29789,29790,29791), +PARTITION p7448 VALUES IN (29792,29793,29794,29795), +PARTITION p7449 VALUES IN (29796,29797,29798,29799), +PARTITION p7450 VALUES IN (29800,29801,29802,29803), +PARTITION p7451 VALUES IN (29804,29805,29806,29807), +PARTITION p7452 VALUES IN (29808,29809,29810,29811), +PARTITION p7453 VALUES IN (29812,29813,29814,29815), +PARTITION p7454 VALUES IN (29816,29817,29818,29819), +PARTITION p7455 VALUES IN (29820,29821,29822,29823), +PARTITION p7456 VALUES IN (29824,29825,29826,29827), +PARTITION p7457 VALUES IN (29828,29829,29830,29831), +PARTITION p7458 VALUES IN (29832,29833,29834,29835), +PARTITION p7459 VALUES IN (29836,29837,29838,29839), +PARTITION p7460 VALUES IN (29840,29841,29842,29843), +PARTITION p7461 VALUES IN (29844,29845,29846,29847), +PARTITION p7462 VALUES IN (29848,29849,29850,29851), +PARTITION p7463 VALUES IN (29852,29853,29854,29855), +PARTITION p7464 VALUES IN (29856,29857,29858,29859), +PARTITION p7465 VALUES IN (29860,29861,29862,29863), +PARTITION p7466 VALUES IN (29864,29865,29866,29867), +PARTITION p7467 VALUES IN (29868,29869,29870,29871), +PARTITION p7468 VALUES IN (29872,29873,29874,29875), +PARTITION p7469 VALUES IN (29876,29877,29878,29879), +PARTITION p7470 VALUES IN (29880,29881,29882,29883), +PARTITION p7471 VALUES IN (29884,29885,29886,29887), +PARTITION p7472 VALUES IN (29888,29889,29890,29891), +PARTITION p7473 VALUES IN (29892,29893,29894,29895), +PARTITION p7474 VALUES IN (29896,29897,29898,29899), +PARTITION p7475 VALUES IN (29900,29901,29902,29903), +PARTITION p7476 VALUES IN (29904,29905,29906,29907), +PARTITION p7477 VALUES IN (29908,29909,29910,29911), +PARTITION p7478 VALUES IN (29912,29913,29914,29915), +PARTITION p7479 VALUES IN (29916,29917,29918,29919), +PARTITION p7480 VALUES IN (29920,29921,29922,29923), +PARTITION p7481 VALUES IN (29924,29925,29926,29927), +PARTITION p7482 VALUES IN (29928,29929,29930,29931), +PARTITION p7483 VALUES IN (29932,29933,29934,29935), +PARTITION p7484 VALUES IN (29936,29937,29938,29939), +PARTITION p7485 VALUES IN (29940,29941,29942,29943), +PARTITION p7486 VALUES IN (29944,29945,29946,29947), +PARTITION p7487 VALUES IN (29948,29949,29950,29951), +PARTITION p7488 VALUES IN (29952,29953,29954,29955), +PARTITION p7489 VALUES IN (29956,29957,29958,29959), +PARTITION p7490 VALUES IN (29960,29961,29962,29963), +PARTITION p7491 VALUES IN (29964,29965,29966,29967), +PARTITION p7492 VALUES IN (29968,29969,29970,29971), +PARTITION p7493 VALUES IN (29972,29973,29974,29975), +PARTITION p7494 VALUES IN (29976,29977,29978,29979), +PARTITION p7495 VALUES IN (29980,29981,29982,29983), +PARTITION p7496 VALUES IN (29984,29985,29986,29987), +PARTITION p7497 VALUES IN (29988,29989,29990,29991), +PARTITION p7498 VALUES IN (29992,29993,29994,29995), +PARTITION p7499 VALUES IN (29996,29997,29998,29999), +PARTITION p7500 VALUES IN (30000,30001,30002,30003), +PARTITION p7501 VALUES IN (30004,30005,30006,30007), +PARTITION p7502 VALUES IN (30008,30009,30010,30011), +PARTITION p7503 VALUES IN (30012,30013,30014,30015), +PARTITION p7504 VALUES IN (30016,30017,30018,30019), +PARTITION p7505 VALUES IN (30020,30021,30022,30023), +PARTITION p7506 VALUES IN (30024,30025,30026,30027), +PARTITION p7507 VALUES IN (30028,30029,30030,30031), +PARTITION p7508 VALUES IN (30032,30033,30034,30035), +PARTITION p7509 VALUES IN (30036,30037,30038,30039), +PARTITION p7510 VALUES IN (30040,30041,30042,30043), +PARTITION p7511 VALUES IN (30044,30045,30046,30047), +PARTITION p7512 VALUES IN (30048,30049,30050,30051), +PARTITION p7513 VALUES IN (30052,30053,30054,30055), +PARTITION p7514 VALUES IN (30056,30057,30058,30059), +PARTITION p7515 VALUES IN (30060,30061,30062,30063), +PARTITION p7516 VALUES IN (30064,30065,30066,30067), +PARTITION p7517 VALUES IN (30068,30069,30070,30071), +PARTITION p7518 VALUES IN (30072,30073,30074,30075), +PARTITION p7519 VALUES IN (30076,30077,30078,30079), +PARTITION p7520 VALUES IN (30080,30081,30082,30083), +PARTITION p7521 VALUES IN (30084,30085,30086,30087), +PARTITION p7522 VALUES IN (30088,30089,30090,30091), +PARTITION p7523 VALUES IN (30092,30093,30094,30095), +PARTITION p7524 VALUES IN (30096,30097,30098,30099), +PARTITION p7525 VALUES IN (30100,30101,30102,30103), +PARTITION p7526 VALUES IN (30104,30105,30106,30107), +PARTITION p7527 VALUES IN (30108,30109,30110,30111), +PARTITION p7528 VALUES IN (30112,30113,30114,30115), +PARTITION p7529 VALUES IN (30116,30117,30118,30119), +PARTITION p7530 VALUES IN (30120,30121,30122,30123), +PARTITION p7531 VALUES IN (30124,30125,30126,30127), +PARTITION p7532 VALUES IN (30128,30129,30130,30131), +PARTITION p7533 VALUES IN (30132,30133,30134,30135), +PARTITION p7534 VALUES IN (30136,30137,30138,30139), +PARTITION p7535 VALUES IN (30140,30141,30142,30143), +PARTITION p7536 VALUES IN (30144,30145,30146,30147), +PARTITION p7537 VALUES IN (30148,30149,30150,30151), +PARTITION p7538 VALUES IN (30152,30153,30154,30155), +PARTITION p7539 VALUES IN (30156,30157,30158,30159), +PARTITION p7540 VALUES IN (30160,30161,30162,30163), +PARTITION p7541 VALUES IN (30164,30165,30166,30167), +PARTITION p7542 VALUES IN (30168,30169,30170,30171), +PARTITION p7543 VALUES IN (30172,30173,30174,30175), +PARTITION p7544 VALUES IN (30176,30177,30178,30179), +PARTITION p7545 VALUES IN (30180,30181,30182,30183), +PARTITION p7546 VALUES IN (30184,30185,30186,30187), +PARTITION p7547 VALUES IN (30188,30189,30190,30191), +PARTITION p7548 VALUES IN (30192,30193,30194,30195), +PARTITION p7549 VALUES IN (30196,30197,30198,30199), +PARTITION p7550 VALUES IN (30200,30201,30202,30203), +PARTITION p7551 VALUES IN (30204,30205,30206,30207), +PARTITION p7552 VALUES IN (30208,30209,30210,30211), +PARTITION p7553 VALUES IN (30212,30213,30214,30215), +PARTITION p7554 VALUES IN (30216,30217,30218,30219), +PARTITION p7555 VALUES IN (30220,30221,30222,30223), +PARTITION p7556 VALUES IN (30224,30225,30226,30227), +PARTITION p7557 VALUES IN (30228,30229,30230,30231), +PARTITION p7558 VALUES IN (30232,30233,30234,30235), +PARTITION p7559 VALUES IN (30236,30237,30238,30239), +PARTITION p7560 VALUES IN (30240,30241,30242,30243), +PARTITION p7561 VALUES IN (30244,30245,30246,30247), +PARTITION p7562 VALUES IN (30248,30249,30250,30251), +PARTITION p7563 VALUES IN (30252,30253,30254,30255), +PARTITION p7564 VALUES IN (30256,30257,30258,30259), +PARTITION p7565 VALUES IN (30260,30261,30262,30263), +PARTITION p7566 VALUES IN (30264,30265,30266,30267), +PARTITION p7567 VALUES IN (30268,30269,30270,30271), +PARTITION p7568 VALUES IN (30272,30273,30274,30275), +PARTITION p7569 VALUES IN (30276,30277,30278,30279), +PARTITION p7570 VALUES IN (30280,30281,30282,30283), +PARTITION p7571 VALUES IN (30284,30285,30286,30287), +PARTITION p7572 VALUES IN (30288,30289,30290,30291), +PARTITION p7573 VALUES IN (30292,30293,30294,30295), +PARTITION p7574 VALUES IN (30296,30297,30298,30299), +PARTITION p7575 VALUES IN (30300,30301,30302,30303), +PARTITION p7576 VALUES IN (30304,30305,30306,30307), +PARTITION p7577 VALUES IN (30308,30309,30310,30311), +PARTITION p7578 VALUES IN (30312,30313,30314,30315), +PARTITION p7579 VALUES IN (30316,30317,30318,30319), +PARTITION p7580 VALUES IN (30320,30321,30322,30323), +PARTITION p7581 VALUES IN (30324,30325,30326,30327), +PARTITION p7582 VALUES IN (30328,30329,30330,30331), +PARTITION p7583 VALUES IN (30332,30333,30334,30335), +PARTITION p7584 VALUES IN (30336,30337,30338,30339), +PARTITION p7585 VALUES IN (30340,30341,30342,30343), +PARTITION p7586 VALUES IN (30344,30345,30346,30347), +PARTITION p7587 VALUES IN (30348,30349,30350,30351), +PARTITION p7588 VALUES IN (30352,30353,30354,30355), +PARTITION p7589 VALUES IN (30356,30357,30358,30359), +PARTITION p7590 VALUES IN (30360,30361,30362,30363), +PARTITION p7591 VALUES IN (30364,30365,30366,30367), +PARTITION p7592 VALUES IN (30368,30369,30370,30371), +PARTITION p7593 VALUES IN (30372,30373,30374,30375), +PARTITION p7594 VALUES IN (30376,30377,30378,30379), +PARTITION p7595 VALUES IN (30380,30381,30382,30383), +PARTITION p7596 VALUES IN (30384,30385,30386,30387), +PARTITION p7597 VALUES IN (30388,30389,30390,30391), +PARTITION p7598 VALUES IN (30392,30393,30394,30395), +PARTITION p7599 VALUES IN (30396,30397,30398,30399), +PARTITION p7600 VALUES IN (30400,30401,30402,30403), +PARTITION p7601 VALUES IN (30404,30405,30406,30407), +PARTITION p7602 VALUES IN (30408,30409,30410,30411), +PARTITION p7603 VALUES IN (30412,30413,30414,30415), +PARTITION p7604 VALUES IN (30416,30417,30418,30419), +PARTITION p7605 VALUES IN (30420,30421,30422,30423), +PARTITION p7606 VALUES IN (30424,30425,30426,30427), +PARTITION p7607 VALUES IN (30428,30429,30430,30431), +PARTITION p7608 VALUES IN (30432,30433,30434,30435), +PARTITION p7609 VALUES IN (30436,30437,30438,30439), +PARTITION p7610 VALUES IN (30440,30441,30442,30443), +PARTITION p7611 VALUES IN (30444,30445,30446,30447), +PARTITION p7612 VALUES IN (30448,30449,30450,30451), +PARTITION p7613 VALUES IN (30452,30453,30454,30455), +PARTITION p7614 VALUES IN (30456,30457,30458,30459), +PARTITION p7615 VALUES IN (30460,30461,30462,30463), +PARTITION p7616 VALUES IN (30464,30465,30466,30467), +PARTITION p7617 VALUES IN (30468,30469,30470,30471), +PARTITION p7618 VALUES IN (30472,30473,30474,30475), +PARTITION p7619 VALUES IN (30476,30477,30478,30479), +PARTITION p7620 VALUES IN (30480,30481,30482,30483), +PARTITION p7621 VALUES IN (30484,30485,30486,30487), +PARTITION p7622 VALUES IN (30488,30489,30490,30491), +PARTITION p7623 VALUES IN (30492,30493,30494,30495), +PARTITION p7624 VALUES IN (30496,30497,30498,30499), +PARTITION p7625 VALUES IN (30500,30501,30502,30503), +PARTITION p7626 VALUES IN (30504,30505,30506,30507), +PARTITION p7627 VALUES IN (30508,30509,30510,30511), +PARTITION p7628 VALUES IN (30512,30513,30514,30515), +PARTITION p7629 VALUES IN (30516,30517,30518,30519), +PARTITION p7630 VALUES IN (30520,30521,30522,30523), +PARTITION p7631 VALUES IN (30524,30525,30526,30527), +PARTITION p7632 VALUES IN (30528,30529,30530,30531), +PARTITION p7633 VALUES IN (30532,30533,30534,30535), +PARTITION p7634 VALUES IN (30536,30537,30538,30539), +PARTITION p7635 VALUES IN (30540,30541,30542,30543), +PARTITION p7636 VALUES IN (30544,30545,30546,30547), +PARTITION p7637 VALUES IN (30548,30549,30550,30551), +PARTITION p7638 VALUES IN (30552,30553,30554,30555), +PARTITION p7639 VALUES IN (30556,30557,30558,30559), +PARTITION p7640 VALUES IN (30560,30561,30562,30563), +PARTITION p7641 VALUES IN (30564,30565,30566,30567), +PARTITION p7642 VALUES IN (30568,30569,30570,30571), +PARTITION p7643 VALUES IN (30572,30573,30574,30575), +PARTITION p7644 VALUES IN (30576,30577,30578,30579), +PARTITION p7645 VALUES IN (30580,30581,30582,30583), +PARTITION p7646 VALUES IN (30584,30585,30586,30587), +PARTITION p7647 VALUES IN (30588,30589,30590,30591), +PARTITION p7648 VALUES IN (30592,30593,30594,30595), +PARTITION p7649 VALUES IN (30596,30597,30598,30599), +PARTITION p7650 VALUES IN (30600,30601,30602,30603), +PARTITION p7651 VALUES IN (30604,30605,30606,30607), +PARTITION p7652 VALUES IN (30608,30609,30610,30611), +PARTITION p7653 VALUES IN (30612,30613,30614,30615), +PARTITION p7654 VALUES IN (30616,30617,30618,30619), +PARTITION p7655 VALUES IN (30620,30621,30622,30623), +PARTITION p7656 VALUES IN (30624,30625,30626,30627), +PARTITION p7657 VALUES IN (30628,30629,30630,30631), +PARTITION p7658 VALUES IN (30632,30633,30634,30635), +PARTITION p7659 VALUES IN (30636,30637,30638,30639), +PARTITION p7660 VALUES IN (30640,30641,30642,30643), +PARTITION p7661 VALUES IN (30644,30645,30646,30647), +PARTITION p7662 VALUES IN (30648,30649,30650,30651), +PARTITION p7663 VALUES IN (30652,30653,30654,30655), +PARTITION p7664 VALUES IN (30656,30657,30658,30659), +PARTITION p7665 VALUES IN (30660,30661,30662,30663), +PARTITION p7666 VALUES IN (30664,30665,30666,30667), +PARTITION p7667 VALUES IN (30668,30669,30670,30671), +PARTITION p7668 VALUES IN (30672,30673,30674,30675), +PARTITION p7669 VALUES IN (30676,30677,30678,30679), +PARTITION p7670 VALUES IN (30680,30681,30682,30683), +PARTITION p7671 VALUES IN (30684,30685,30686,30687), +PARTITION p7672 VALUES IN (30688,30689,30690,30691), +PARTITION p7673 VALUES IN (30692,30693,30694,30695), +PARTITION p7674 VALUES IN (30696,30697,30698,30699), +PARTITION p7675 VALUES IN (30700,30701,30702,30703), +PARTITION p7676 VALUES IN (30704,30705,30706,30707), +PARTITION p7677 VALUES IN (30708,30709,30710,30711), +PARTITION p7678 VALUES IN (30712,30713,30714,30715), +PARTITION p7679 VALUES IN (30716,30717,30718,30719), +PARTITION p7680 VALUES IN (30720,30721,30722,30723), +PARTITION p7681 VALUES IN (30724,30725,30726,30727), +PARTITION p7682 VALUES IN (30728,30729,30730,30731), +PARTITION p7683 VALUES IN (30732,30733,30734,30735), +PARTITION p7684 VALUES IN (30736,30737,30738,30739), +PARTITION p7685 VALUES IN (30740,30741,30742,30743), +PARTITION p7686 VALUES IN (30744,30745,30746,30747), +PARTITION p7687 VALUES IN (30748,30749,30750,30751), +PARTITION p7688 VALUES IN (30752,30753,30754,30755), +PARTITION p7689 VALUES IN (30756,30757,30758,30759), +PARTITION p7690 VALUES IN (30760,30761,30762,30763), +PARTITION p7691 VALUES IN (30764,30765,30766,30767), +PARTITION p7692 VALUES IN (30768,30769,30770,30771), +PARTITION p7693 VALUES IN (30772,30773,30774,30775), +PARTITION p7694 VALUES IN (30776,30777,30778,30779), +PARTITION p7695 VALUES IN (30780,30781,30782,30783), +PARTITION p7696 VALUES IN (30784,30785,30786,30787), +PARTITION p7697 VALUES IN (30788,30789,30790,30791), +PARTITION p7698 VALUES IN (30792,30793,30794,30795), +PARTITION p7699 VALUES IN (30796,30797,30798,30799), +PARTITION p7700 VALUES IN (30800,30801,30802,30803), +PARTITION p7701 VALUES IN (30804,30805,30806,30807), +PARTITION p7702 VALUES IN (30808,30809,30810,30811), +PARTITION p7703 VALUES IN (30812,30813,30814,30815), +PARTITION p7704 VALUES IN (30816,30817,30818,30819), +PARTITION p7705 VALUES IN (30820,30821,30822,30823), +PARTITION p7706 VALUES IN (30824,30825,30826,30827), +PARTITION p7707 VALUES IN (30828,30829,30830,30831), +PARTITION p7708 VALUES IN (30832,30833,30834,30835), +PARTITION p7709 VALUES IN (30836,30837,30838,30839), +PARTITION p7710 VALUES IN (30840,30841,30842,30843), +PARTITION p7711 VALUES IN (30844,30845,30846,30847), +PARTITION p7712 VALUES IN (30848,30849,30850,30851), +PARTITION p7713 VALUES IN (30852,30853,30854,30855), +PARTITION p7714 VALUES IN (30856,30857,30858,30859), +PARTITION p7715 VALUES IN (30860,30861,30862,30863), +PARTITION p7716 VALUES IN (30864,30865,30866,30867), +PARTITION p7717 VALUES IN (30868,30869,30870,30871), +PARTITION p7718 VALUES IN (30872,30873,30874,30875), +PARTITION p7719 VALUES IN (30876,30877,30878,30879), +PARTITION p7720 VALUES IN (30880,30881,30882,30883), +PARTITION p7721 VALUES IN (30884,30885,30886,30887), +PARTITION p7722 VALUES IN (30888,30889,30890,30891), +PARTITION p7723 VALUES IN (30892,30893,30894,30895), +PARTITION p7724 VALUES IN (30896,30897,30898,30899), +PARTITION p7725 VALUES IN (30900,30901,30902,30903), +PARTITION p7726 VALUES IN (30904,30905,30906,30907), +PARTITION p7727 VALUES IN (30908,30909,30910,30911), +PARTITION p7728 VALUES IN (30912,30913,30914,30915), +PARTITION p7729 VALUES IN (30916,30917,30918,30919), +PARTITION p7730 VALUES IN (30920,30921,30922,30923), +PARTITION p7731 VALUES IN (30924,30925,30926,30927), +PARTITION p7732 VALUES IN (30928,30929,30930,30931), +PARTITION p7733 VALUES IN (30932,30933,30934,30935), +PARTITION p7734 VALUES IN (30936,30937,30938,30939), +PARTITION p7735 VALUES IN (30940,30941,30942,30943), +PARTITION p7736 VALUES IN (30944,30945,30946,30947), +PARTITION p7737 VALUES IN (30948,30949,30950,30951), +PARTITION p7738 VALUES IN (30952,30953,30954,30955), +PARTITION p7739 VALUES IN (30956,30957,30958,30959), +PARTITION p7740 VALUES IN (30960,30961,30962,30963), +PARTITION p7741 VALUES IN (30964,30965,30966,30967), +PARTITION p7742 VALUES IN (30968,30969,30970,30971), +PARTITION p7743 VALUES IN (30972,30973,30974,30975), +PARTITION p7744 VALUES IN (30976,30977,30978,30979), +PARTITION p7745 VALUES IN (30980,30981,30982,30983), +PARTITION p7746 VALUES IN (30984,30985,30986,30987), +PARTITION p7747 VALUES IN (30988,30989,30990,30991), +PARTITION p7748 VALUES IN (30992,30993,30994,30995), +PARTITION p7749 VALUES IN (30996,30997,30998,30999), +PARTITION p7750 VALUES IN (31000,31001,31002,31003), +PARTITION p7751 VALUES IN (31004,31005,31006,31007), +PARTITION p7752 VALUES IN (31008,31009,31010,31011), +PARTITION p7753 VALUES IN (31012,31013,31014,31015), +PARTITION p7754 VALUES IN (31016,31017,31018,31019), +PARTITION p7755 VALUES IN (31020,31021,31022,31023), +PARTITION p7756 VALUES IN (31024,31025,31026,31027), +PARTITION p7757 VALUES IN (31028,31029,31030,31031), +PARTITION p7758 VALUES IN (31032,31033,31034,31035), +PARTITION p7759 VALUES IN (31036,31037,31038,31039), +PARTITION p7760 VALUES IN (31040,31041,31042,31043), +PARTITION p7761 VALUES IN (31044,31045,31046,31047), +PARTITION p7762 VALUES IN (31048,31049,31050,31051), +PARTITION p7763 VALUES IN (31052,31053,31054,31055), +PARTITION p7764 VALUES IN (31056,31057,31058,31059), +PARTITION p7765 VALUES IN (31060,31061,31062,31063), +PARTITION p7766 VALUES IN (31064,31065,31066,31067), +PARTITION p7767 VALUES IN (31068,31069,31070,31071), +PARTITION p7768 VALUES IN (31072,31073,31074,31075), +PARTITION p7769 VALUES IN (31076,31077,31078,31079), +PARTITION p7770 VALUES IN (31080,31081,31082,31083), +PARTITION p7771 VALUES IN (31084,31085,31086,31087), +PARTITION p7772 VALUES IN (31088,31089,31090,31091), +PARTITION p7773 VALUES IN (31092,31093,31094,31095), +PARTITION p7774 VALUES IN (31096,31097,31098,31099), +PARTITION p7775 VALUES IN (31100,31101,31102,31103), +PARTITION p7776 VALUES IN (31104,31105,31106,31107), +PARTITION p7777 VALUES IN (31108,31109,31110,31111), +PARTITION p7778 VALUES IN (31112,31113,31114,31115), +PARTITION p7779 VALUES IN (31116,31117,31118,31119), +PARTITION p7780 VALUES IN (31120,31121,31122,31123), +PARTITION p7781 VALUES IN (31124,31125,31126,31127), +PARTITION p7782 VALUES IN (31128,31129,31130,31131), +PARTITION p7783 VALUES IN (31132,31133,31134,31135), +PARTITION p7784 VALUES IN (31136,31137,31138,31139), +PARTITION p7785 VALUES IN (31140,31141,31142,31143), +PARTITION p7786 VALUES IN (31144,31145,31146,31147), +PARTITION p7787 VALUES IN (31148,31149,31150,31151), +PARTITION p7788 VALUES IN (31152,31153,31154,31155), +PARTITION p7789 VALUES IN (31156,31157,31158,31159), +PARTITION p7790 VALUES IN (31160,31161,31162,31163), +PARTITION p7791 VALUES IN (31164,31165,31166,31167), +PARTITION p7792 VALUES IN (31168,31169,31170,31171), +PARTITION p7793 VALUES IN (31172,31173,31174,31175), +PARTITION p7794 VALUES IN (31176,31177,31178,31179), +PARTITION p7795 VALUES IN (31180,31181,31182,31183), +PARTITION p7796 VALUES IN (31184,31185,31186,31187), +PARTITION p7797 VALUES IN (31188,31189,31190,31191), +PARTITION p7798 VALUES IN (31192,31193,31194,31195), +PARTITION p7799 VALUES IN (31196,31197,31198,31199), +PARTITION p7800 VALUES IN (31200,31201,31202,31203), +PARTITION p7801 VALUES IN (31204,31205,31206,31207), +PARTITION p7802 VALUES IN (31208,31209,31210,31211), +PARTITION p7803 VALUES IN (31212,31213,31214,31215), +PARTITION p7804 VALUES IN (31216,31217,31218,31219), +PARTITION p7805 VALUES IN (31220,31221,31222,31223), +PARTITION p7806 VALUES IN (31224,31225,31226,31227), +PARTITION p7807 VALUES IN (31228,31229,31230,31231), +PARTITION p7808 VALUES IN (31232,31233,31234,31235), +PARTITION p7809 VALUES IN (31236,31237,31238,31239), +PARTITION p7810 VALUES IN (31240,31241,31242,31243), +PARTITION p7811 VALUES IN (31244,31245,31246,31247), +PARTITION p7812 VALUES IN (31248,31249,31250,31251), +PARTITION p7813 VALUES IN (31252,31253,31254,31255), +PARTITION p7814 VALUES IN (31256,31257,31258,31259), +PARTITION p7815 VALUES IN (31260,31261,31262,31263), +PARTITION p7816 VALUES IN (31264,31265,31266,31267), +PARTITION p7817 VALUES IN (31268,31269,31270,31271), +PARTITION p7818 VALUES IN (31272,31273,31274,31275), +PARTITION p7819 VALUES IN (31276,31277,31278,31279), +PARTITION p7820 VALUES IN (31280,31281,31282,31283), +PARTITION p7821 VALUES IN (31284,31285,31286,31287), +PARTITION p7822 VALUES IN (31288,31289,31290,31291), +PARTITION p7823 VALUES IN (31292,31293,31294,31295), +PARTITION p7824 VALUES IN (31296,31297,31298,31299), +PARTITION p7825 VALUES IN (31300,31301,31302,31303), +PARTITION p7826 VALUES IN (31304,31305,31306,31307), +PARTITION p7827 VALUES IN (31308,31309,31310,31311), +PARTITION p7828 VALUES IN (31312,31313,31314,31315), +PARTITION p7829 VALUES IN (31316,31317,31318,31319), +PARTITION p7830 VALUES IN (31320,31321,31322,31323), +PARTITION p7831 VALUES IN (31324,31325,31326,31327), +PARTITION p7832 VALUES IN (31328,31329,31330,31331), +PARTITION p7833 VALUES IN (31332,31333,31334,31335), +PARTITION p7834 VALUES IN (31336,31337,31338,31339), +PARTITION p7835 VALUES IN (31340,31341,31342,31343), +PARTITION p7836 VALUES IN (31344,31345,31346,31347), +PARTITION p7837 VALUES IN (31348,31349,31350,31351), +PARTITION p7838 VALUES IN (31352,31353,31354,31355), +PARTITION p7839 VALUES IN (31356,31357,31358,31359), +PARTITION p7840 VALUES IN (31360,31361,31362,31363), +PARTITION p7841 VALUES IN (31364,31365,31366,31367), +PARTITION p7842 VALUES IN (31368,31369,31370,31371), +PARTITION p7843 VALUES IN (31372,31373,31374,31375), +PARTITION p7844 VALUES IN (31376,31377,31378,31379), +PARTITION p7845 VALUES IN (31380,31381,31382,31383), +PARTITION p7846 VALUES IN (31384,31385,31386,31387), +PARTITION p7847 VALUES IN (31388,31389,31390,31391), +PARTITION p7848 VALUES IN (31392,31393,31394,31395), +PARTITION p7849 VALUES IN (31396,31397,31398,31399), +PARTITION p7850 VALUES IN (31400,31401,31402,31403), +PARTITION p7851 VALUES IN (31404,31405,31406,31407), +PARTITION p7852 VALUES IN (31408,31409,31410,31411), +PARTITION p7853 VALUES IN (31412,31413,31414,31415), +PARTITION p7854 VALUES IN (31416,31417,31418,31419), +PARTITION p7855 VALUES IN (31420,31421,31422,31423), +PARTITION p7856 VALUES IN (31424,31425,31426,31427), +PARTITION p7857 VALUES IN (31428,31429,31430,31431), +PARTITION p7858 VALUES IN (31432,31433,31434,31435), +PARTITION p7859 VALUES IN (31436,31437,31438,31439), +PARTITION p7860 VALUES IN (31440,31441,31442,31443), +PARTITION p7861 VALUES IN (31444,31445,31446,31447), +PARTITION p7862 VALUES IN (31448,31449,31450,31451), +PARTITION p7863 VALUES IN (31452,31453,31454,31455), +PARTITION p7864 VALUES IN (31456,31457,31458,31459), +PARTITION p7865 VALUES IN (31460,31461,31462,31463), +PARTITION p7866 VALUES IN (31464,31465,31466,31467), +PARTITION p7867 VALUES IN (31468,31469,31470,31471), +PARTITION p7868 VALUES IN (31472,31473,31474,31475), +PARTITION p7869 VALUES IN (31476,31477,31478,31479), +PARTITION p7870 VALUES IN (31480,31481,31482,31483), +PARTITION p7871 VALUES IN (31484,31485,31486,31487), +PARTITION p7872 VALUES IN (31488,31489,31490,31491), +PARTITION p7873 VALUES IN (31492,31493,31494,31495), +PARTITION p7874 VALUES IN (31496,31497,31498,31499), +PARTITION p7875 VALUES IN (31500,31501,31502,31503), +PARTITION p7876 VALUES IN (31504,31505,31506,31507), +PARTITION p7877 VALUES IN (31508,31509,31510,31511), +PARTITION p7878 VALUES IN (31512,31513,31514,31515), +PARTITION p7879 VALUES IN (31516,31517,31518,31519), +PARTITION p7880 VALUES IN (31520,31521,31522,31523), +PARTITION p7881 VALUES IN (31524,31525,31526,31527), +PARTITION p7882 VALUES IN (31528,31529,31530,31531), +PARTITION p7883 VALUES IN (31532,31533,31534,31535), +PARTITION p7884 VALUES IN (31536,31537,31538,31539), +PARTITION p7885 VALUES IN (31540,31541,31542,31543), +PARTITION p7886 VALUES IN (31544,31545,31546,31547), +PARTITION p7887 VALUES IN (31548,31549,31550,31551), +PARTITION p7888 VALUES IN (31552,31553,31554,31555), +PARTITION p7889 VALUES IN (31556,31557,31558,31559), +PARTITION p7890 VALUES IN (31560,31561,31562,31563), +PARTITION p7891 VALUES IN (31564,31565,31566,31567), +PARTITION p7892 VALUES IN (31568,31569,31570,31571), +PARTITION p7893 VALUES IN (31572,31573,31574,31575), +PARTITION p7894 VALUES IN (31576,31577,31578,31579), +PARTITION p7895 VALUES IN (31580,31581,31582,31583), +PARTITION p7896 VALUES IN (31584,31585,31586,31587), +PARTITION p7897 VALUES IN (31588,31589,31590,31591), +PARTITION p7898 VALUES IN (31592,31593,31594,31595), +PARTITION p7899 VALUES IN (31596,31597,31598,31599), +PARTITION p7900 VALUES IN (31600,31601,31602,31603), +PARTITION p7901 VALUES IN (31604,31605,31606,31607), +PARTITION p7902 VALUES IN (31608,31609,31610,31611), +PARTITION p7903 VALUES IN (31612,31613,31614,31615), +PARTITION p7904 VALUES IN (31616,31617,31618,31619), +PARTITION p7905 VALUES IN (31620,31621,31622,31623), +PARTITION p7906 VALUES IN (31624,31625,31626,31627), +PARTITION p7907 VALUES IN (31628,31629,31630,31631), +PARTITION p7908 VALUES IN (31632,31633,31634,31635), +PARTITION p7909 VALUES IN (31636,31637,31638,31639), +PARTITION p7910 VALUES IN (31640,31641,31642,31643), +PARTITION p7911 VALUES IN (31644,31645,31646,31647), +PARTITION p7912 VALUES IN (31648,31649,31650,31651), +PARTITION p7913 VALUES IN (31652,31653,31654,31655), +PARTITION p7914 VALUES IN (31656,31657,31658,31659), +PARTITION p7915 VALUES IN (31660,31661,31662,31663), +PARTITION p7916 VALUES IN (31664,31665,31666,31667), +PARTITION p7917 VALUES IN (31668,31669,31670,31671), +PARTITION p7918 VALUES IN (31672,31673,31674,31675), +PARTITION p7919 VALUES IN (31676,31677,31678,31679), +PARTITION p7920 VALUES IN (31680,31681,31682,31683), +PARTITION p7921 VALUES IN (31684,31685,31686,31687), +PARTITION p7922 VALUES IN (31688,31689,31690,31691), +PARTITION p7923 VALUES IN (31692,31693,31694,31695), +PARTITION p7924 VALUES IN (31696,31697,31698,31699), +PARTITION p7925 VALUES IN (31700,31701,31702,31703), +PARTITION p7926 VALUES IN (31704,31705,31706,31707), +PARTITION p7927 VALUES IN (31708,31709,31710,31711), +PARTITION p7928 VALUES IN (31712,31713,31714,31715), +PARTITION p7929 VALUES IN (31716,31717,31718,31719), +PARTITION p7930 VALUES IN (31720,31721,31722,31723), +PARTITION p7931 VALUES IN (31724,31725,31726,31727), +PARTITION p7932 VALUES IN (31728,31729,31730,31731), +PARTITION p7933 VALUES IN (31732,31733,31734,31735), +PARTITION p7934 VALUES IN (31736,31737,31738,31739), +PARTITION p7935 VALUES IN (31740,31741,31742,31743), +PARTITION p7936 VALUES IN (31744,31745,31746,31747), +PARTITION p7937 VALUES IN (31748,31749,31750,31751), +PARTITION p7938 VALUES IN (31752,31753,31754,31755), +PARTITION p7939 VALUES IN (31756,31757,31758,31759), +PARTITION p7940 VALUES IN (31760,31761,31762,31763), +PARTITION p7941 VALUES IN (31764,31765,31766,31767), +PARTITION p7942 VALUES IN (31768,31769,31770,31771), +PARTITION p7943 VALUES IN (31772,31773,31774,31775), +PARTITION p7944 VALUES IN (31776,31777,31778,31779), +PARTITION p7945 VALUES IN (31780,31781,31782,31783), +PARTITION p7946 VALUES IN (31784,31785,31786,31787), +PARTITION p7947 VALUES IN (31788,31789,31790,31791), +PARTITION p7948 VALUES IN (31792,31793,31794,31795), +PARTITION p7949 VALUES IN (31796,31797,31798,31799), +PARTITION p7950 VALUES IN (31800,31801,31802,31803), +PARTITION p7951 VALUES IN (31804,31805,31806,31807), +PARTITION p7952 VALUES IN (31808,31809,31810,31811), +PARTITION p7953 VALUES IN (31812,31813,31814,31815), +PARTITION p7954 VALUES IN (31816,31817,31818,31819), +PARTITION p7955 VALUES IN (31820,31821,31822,31823), +PARTITION p7956 VALUES IN (31824,31825,31826,31827), +PARTITION p7957 VALUES IN (31828,31829,31830,31831), +PARTITION p7958 VALUES IN (31832,31833,31834,31835), +PARTITION p7959 VALUES IN (31836,31837,31838,31839), +PARTITION p7960 VALUES IN (31840,31841,31842,31843), +PARTITION p7961 VALUES IN (31844,31845,31846,31847), +PARTITION p7962 VALUES IN (31848,31849,31850,31851), +PARTITION p7963 VALUES IN (31852,31853,31854,31855), +PARTITION p7964 VALUES IN (31856,31857,31858,31859), +PARTITION p7965 VALUES IN (31860,31861,31862,31863), +PARTITION p7966 VALUES IN (31864,31865,31866,31867), +PARTITION p7967 VALUES IN (31868,31869,31870,31871), +PARTITION p7968 VALUES IN (31872,31873,31874,31875), +PARTITION p7969 VALUES IN (31876,31877,31878,31879), +PARTITION p7970 VALUES IN (31880,31881,31882,31883), +PARTITION p7971 VALUES IN (31884,31885,31886,31887), +PARTITION p7972 VALUES IN (31888,31889,31890,31891), +PARTITION p7973 VALUES IN (31892,31893,31894,31895), +PARTITION p7974 VALUES IN (31896,31897,31898,31899), +PARTITION p7975 VALUES IN (31900,31901,31902,31903), +PARTITION p7976 VALUES IN (31904,31905,31906,31907), +PARTITION p7977 VALUES IN (31908,31909,31910,31911), +PARTITION p7978 VALUES IN (31912,31913,31914,31915), +PARTITION p7979 VALUES IN (31916,31917,31918,31919), +PARTITION p7980 VALUES IN (31920,31921,31922,31923), +PARTITION p7981 VALUES IN (31924,31925,31926,31927), +PARTITION p7982 VALUES IN (31928,31929,31930,31931), +PARTITION p7983 VALUES IN (31932,31933,31934,31935), +PARTITION p7984 VALUES IN (31936,31937,31938,31939), +PARTITION p7985 VALUES IN (31940,31941,31942,31943), +PARTITION p7986 VALUES IN (31944,31945,31946,31947), +PARTITION p7987 VALUES IN (31948,31949,31950,31951), +PARTITION p7988 VALUES IN (31952,31953,31954,31955), +PARTITION p7989 VALUES IN (31956,31957,31958,31959), +PARTITION p7990 VALUES IN (31960,31961,31962,31963), +PARTITION p7991 VALUES IN (31964,31965,31966,31967), +PARTITION p7992 VALUES IN (31968,31969,31970,31971), +PARTITION p7993 VALUES IN (31972,31973,31974,31975), +PARTITION p7994 VALUES IN (31976,31977,31978,31979), +PARTITION p7995 VALUES IN (31980,31981,31982,31983), +PARTITION p7996 VALUES IN (31984,31985,31986,31987), +PARTITION p7997 VALUES IN (31988,31989,31990,31991), +PARTITION p7998 VALUES IN (31992,31993,31994,31995), +PARTITION p7999 VALUES IN (31996,31997,31998,31999), +PARTITION p8000 VALUES IN (32000,32001,32002,32003), +PARTITION p8001 VALUES IN (32004,32005,32006,32007), +PARTITION p8002 VALUES IN (32008,32009,32010,32011), +PARTITION p8003 VALUES IN (32012,32013,32014,32015), +PARTITION p8004 VALUES IN (32016,32017,32018,32019), +PARTITION p8005 VALUES IN (32020,32021,32022,32023), +PARTITION p8006 VALUES IN (32024,32025,32026,32027), +PARTITION p8007 VALUES IN (32028,32029,32030,32031), +PARTITION p8008 VALUES IN (32032,32033,32034,32035), +PARTITION p8009 VALUES IN (32036,32037,32038,32039), +PARTITION p8010 VALUES IN (32040,32041,32042,32043), +PARTITION p8011 VALUES IN (32044,32045,32046,32047), +PARTITION p8012 VALUES IN (32048,32049,32050,32051), +PARTITION p8013 VALUES IN (32052,32053,32054,32055), +PARTITION p8014 VALUES IN (32056,32057,32058,32059), +PARTITION p8015 VALUES IN (32060,32061,32062,32063), +PARTITION p8016 VALUES IN (32064,32065,32066,32067), +PARTITION p8017 VALUES IN (32068,32069,32070,32071), +PARTITION p8018 VALUES IN (32072,32073,32074,32075), +PARTITION p8019 VALUES IN (32076,32077,32078,32079), +PARTITION p8020 VALUES IN (32080,32081,32082,32083), +PARTITION p8021 VALUES IN (32084,32085,32086,32087), +PARTITION p8022 VALUES IN (32088,32089,32090,32091), +PARTITION p8023 VALUES IN (32092,32093,32094,32095), +PARTITION p8024 VALUES IN (32096,32097,32098,32099), +PARTITION p8025 VALUES IN (32100,32101,32102,32103), +PARTITION p8026 VALUES IN (32104,32105,32106,32107), +PARTITION p8027 VALUES IN (32108,32109,32110,32111), +PARTITION p8028 VALUES IN (32112,32113,32114,32115), +PARTITION p8029 VALUES IN (32116,32117,32118,32119), +PARTITION p8030 VALUES IN (32120,32121,32122,32123), +PARTITION p8031 VALUES IN (32124,32125,32126,32127), +PARTITION p8032 VALUES IN (32128,32129,32130,32131), +PARTITION p8033 VALUES IN (32132,32133,32134,32135), +PARTITION p8034 VALUES IN (32136,32137,32138,32139), +PARTITION p8035 VALUES IN (32140,32141,32142,32143), +PARTITION p8036 VALUES IN (32144,32145,32146,32147), +PARTITION p8037 VALUES IN (32148,32149,32150,32151), +PARTITION p8038 VALUES IN (32152,32153,32154,32155), +PARTITION p8039 VALUES IN (32156,32157,32158,32159), +PARTITION p8040 VALUES IN (32160,32161,32162,32163), +PARTITION p8041 VALUES IN (32164,32165,32166,32167), +PARTITION p8042 VALUES IN (32168,32169,32170,32171), +PARTITION p8043 VALUES IN (32172,32173,32174,32175), +PARTITION p8044 VALUES IN (32176,32177,32178,32179), +PARTITION p8045 VALUES IN (32180,32181,32182,32183), +PARTITION p8046 VALUES IN (32184,32185,32186,32187), +PARTITION p8047 VALUES IN (32188,32189,32190,32191), +PARTITION p8048 VALUES IN (32192,32193,32194,32195), +PARTITION p8049 VALUES IN (32196,32197,32198,32199), +PARTITION p8050 VALUES IN (32200,32201,32202,32203), +PARTITION p8051 VALUES IN (32204,32205,32206,32207), +PARTITION p8052 VALUES IN (32208,32209,32210,32211), +PARTITION p8053 VALUES IN (32212,32213,32214,32215), +PARTITION p8054 VALUES IN (32216,32217,32218,32219), +PARTITION p8055 VALUES IN (32220,32221,32222,32223), +PARTITION p8056 VALUES IN (32224,32225,32226,32227), +PARTITION p8057 VALUES IN (32228,32229,32230,32231), +PARTITION p8058 VALUES IN (32232,32233,32234,32235), +PARTITION p8059 VALUES IN (32236,32237,32238,32239), +PARTITION p8060 VALUES IN (32240,32241,32242,32243), +PARTITION p8061 VALUES IN (32244,32245,32246,32247), +PARTITION p8062 VALUES IN (32248,32249,32250,32251), +PARTITION p8063 VALUES IN (32252,32253,32254,32255), +PARTITION p8064 VALUES IN (32256,32257,32258,32259), +PARTITION p8065 VALUES IN (32260,32261,32262,32263), +PARTITION p8066 VALUES IN (32264,32265,32266,32267), +PARTITION p8067 VALUES IN (32268,32269,32270,32271), +PARTITION p8068 VALUES IN (32272,32273,32274,32275), +PARTITION p8069 VALUES IN (32276,32277,32278,32279), +PARTITION p8070 VALUES IN (32280,32281,32282,32283), +PARTITION p8071 VALUES IN (32284,32285,32286,32287), +PARTITION p8072 VALUES IN (32288,32289,32290,32291), +PARTITION p8073 VALUES IN (32292,32293,32294,32295), +PARTITION p8074 VALUES IN (32296,32297,32298,32299), +PARTITION p8075 VALUES IN (32300,32301,32302,32303), +PARTITION p8076 VALUES IN (32304,32305,32306,32307), +PARTITION p8077 VALUES IN (32308,32309,32310,32311), +PARTITION p8078 VALUES IN (32312,32313,32314,32315), +PARTITION p8079 VALUES IN (32316,32317,32318,32319), +PARTITION p8080 VALUES IN (32320,32321,32322,32323), +PARTITION p8081 VALUES IN (32324,32325,32326,32327), +PARTITION p8082 VALUES IN (32328,32329,32330,32331), +PARTITION p8083 VALUES IN (32332,32333,32334,32335), +PARTITION p8084 VALUES IN (32336,32337,32338,32339), +PARTITION p8085 VALUES IN (32340,32341,32342,32343), +PARTITION p8086 VALUES IN (32344,32345,32346,32347), +PARTITION p8087 VALUES IN (32348,32349,32350,32351), +PARTITION p8088 VALUES IN (32352,32353,32354,32355), +PARTITION p8089 VALUES IN (32356,32357,32358,32359), +PARTITION p8090 VALUES IN (32360,32361,32362,32363), +PARTITION p8091 VALUES IN (32364,32365,32366,32367), +PARTITION p8092 VALUES IN (32368,32369,32370,32371), +PARTITION p8093 VALUES IN (32372,32373,32374,32375), +PARTITION p8094 VALUES IN (32376,32377,32378,32379), +PARTITION p8095 VALUES IN (32380,32381,32382,32383), +PARTITION p8096 VALUES IN (32384,32385,32386,32387), +PARTITION p8097 VALUES IN (32388,32389,32390,32391), +PARTITION p8098 VALUES IN (32392,32393,32394,32395), +PARTITION p8099 VALUES IN (32396,32397,32398,32399), +PARTITION p8100 VALUES IN (32400,32401,32402,32403), +PARTITION p8101 VALUES IN (32404,32405,32406,32407), +PARTITION p8102 VALUES IN (32408,32409,32410,32411), +PARTITION p8103 VALUES IN (32412,32413,32414,32415), +PARTITION p8104 VALUES IN (32416,32417,32418,32419), +PARTITION p8105 VALUES IN (32420,32421,32422,32423), +PARTITION p8106 VALUES IN (32424,32425,32426,32427), +PARTITION p8107 VALUES IN (32428,32429,32430,32431), +PARTITION p8108 VALUES IN (32432,32433,32434,32435), +PARTITION p8109 VALUES IN (32436,32437,32438,32439), +PARTITION p8110 VALUES IN (32440,32441,32442,32443), +PARTITION p8111 VALUES IN (32444,32445,32446,32447), +PARTITION p8112 VALUES IN (32448,32449,32450,32451), +PARTITION p8113 VALUES IN (32452,32453,32454,32455), +PARTITION p8114 VALUES IN (32456,32457,32458,32459), +PARTITION p8115 VALUES IN (32460,32461,32462,32463), +PARTITION p8116 VALUES IN (32464,32465,32466,32467), +PARTITION p8117 VALUES IN (32468,32469,32470,32471), +PARTITION p8118 VALUES IN (32472,32473,32474,32475), +PARTITION p8119 VALUES IN (32476,32477,32478,32479), +PARTITION p8120 VALUES IN (32480,32481,32482,32483), +PARTITION p8121 VALUES IN (32484,32485,32486,32487), +PARTITION p8122 VALUES IN (32488,32489,32490,32491), +PARTITION p8123 VALUES IN (32492,32493,32494,32495), +PARTITION p8124 VALUES IN (32496,32497,32498,32499), +PARTITION p8125 VALUES IN (32500,32501,32502,32503), +PARTITION p8126 VALUES IN (32504,32505,32506,32507), +PARTITION p8127 VALUES IN (32508,32509,32510,32511), +PARTITION p8128 VALUES IN (32512,32513,32514,32515), +PARTITION p8129 VALUES IN (32516,32517,32518,32519), +PARTITION p8130 VALUES IN (32520,32521,32522,32523), +PARTITION p8131 VALUES IN (32524,32525,32526,32527), +PARTITION p8132 VALUES IN (32528,32529,32530,32531), +PARTITION p8133 VALUES IN (32532,32533,32534,32535), +PARTITION p8134 VALUES IN (32536,32537,32538,32539), +PARTITION p8135 VALUES IN (32540,32541,32542,32543), +PARTITION p8136 VALUES IN (32544,32545,32546,32547), +PARTITION p8137 VALUES IN (32548,32549,32550,32551), +PARTITION p8138 VALUES IN (32552,32553,32554,32555), +PARTITION p8139 VALUES IN (32556,32557,32558,32559), +PARTITION p8140 VALUES IN (32560,32561,32562,32563), +PARTITION p8141 VALUES IN (32564,32565,32566,32567), +PARTITION p8142 VALUES IN (32568,32569,32570,32571), +PARTITION p8143 VALUES IN (32572,32573,32574,32575), +PARTITION p8144 VALUES IN (32576,32577,32578,32579), +PARTITION p8145 VALUES IN (32580,32581,32582,32583), +PARTITION p8146 VALUES IN (32584,32585,32586,32587), +PARTITION p8147 VALUES IN (32588,32589,32590,32591), +PARTITION p8148 VALUES IN (32592,32593,32594,32595), +PARTITION p8149 VALUES IN (32596,32597,32598,32599), +PARTITION p8150 VALUES IN (32600,32601,32602,32603), +PARTITION p8151 VALUES IN (32604,32605,32606,32607), +PARTITION p8152 VALUES IN (32608,32609,32610,32611), +PARTITION p8153 VALUES IN (32612,32613,32614,32615), +PARTITION p8154 VALUES IN (32616,32617,32618,32619), +PARTITION p8155 VALUES IN (32620,32621,32622,32623), +PARTITION p8156 VALUES IN (32624,32625,32626,32627), +PARTITION p8157 VALUES IN (32628,32629,32630,32631), +PARTITION p8158 VALUES IN (32632,32633,32634,32635), +PARTITION p8159 VALUES IN (32636,32637,32638,32639), +PARTITION p8160 VALUES IN (32640,32641,32642,32643), +PARTITION p8161 VALUES IN (32644,32645,32646,32647), +PARTITION p8162 VALUES IN (32648,32649,32650,32651), +PARTITION p8163 VALUES IN (32652,32653,32654,32655), +PARTITION p8164 VALUES IN (32656,32657,32658,32659), +PARTITION p8165 VALUES IN (32660,32661,32662,32663), +PARTITION p8166 VALUES IN (32664,32665,32666,32667), +PARTITION p8167 VALUES IN (32668,32669,32670,32671), +PARTITION p8168 VALUES IN (32672,32673,32674,32675), +PARTITION p8169 VALUES IN (32676,32677,32678,32679), +PARTITION p8170 VALUES IN (32680,32681,32682,32683), +PARTITION p8171 VALUES IN (32684,32685,32686,32687), +PARTITION p8172 VALUES IN (32688,32689,32690,32691), +PARTITION p8173 VALUES IN (32692,32693,32694,32695), +PARTITION p8174 VALUES IN (32696,32697,32698,32699), +PARTITION p8175 VALUES IN (32700,32701,32702,32703), +PARTITION p8176 VALUES IN (32704,32705,32706,32707), +PARTITION p8177 VALUES IN (32708,32709,32710,32711), +PARTITION p8178 VALUES IN (32712,32713,32714,32715), +PARTITION p8179 VALUES IN (32716,32717,32718,32719), +PARTITION p8180 VALUES IN (32720,32721,32722,32723), +PARTITION p8181 VALUES IN (32724,32725,32726,32727), +PARTITION p8182 VALUES IN (32728,32729,32730,32731), +PARTITION p8183 VALUES IN (32732,32733,32734,32735), +PARTITION p8184 VALUES IN (32736,32737,32738,32739), +PARTITION p8185 VALUES IN (32740,32741,32742,32743), +PARTITION p8186 VALUES IN (32744,32745,32746,32747), +PARTITION p8187 VALUES IN (32748,32749,32750,32751), +PARTITION p8188 VALUES IN (32752,32753,32754,32755), +PARTITION p8189 VALUES IN (32756,32757,32758,32759), +PARTITION p8190 VALUES IN (32760,32761,32762,32763), +PARTITION p8191 VALUES IN (32764,32765,32766,32767), +PARTITION p8192 VALUES IN (32768,32769,32770,32771) +); +ERROR HY000: Too many partitions (including subpartitions) were defined diff --git a/mysql-test/suite/tokudb.parts/r-native/partition_max_parts_key_tokudb.result b/mysql-test/suite/tokudb.parts/r-native/partition_max_parts_key_tokudb.result new file mode 100644 index 000000000000..5cdb29789639 --- /dev/null +++ b/mysql-test/suite/tokudb.parts/r-native/partition_max_parts_key_tokudb.result @@ -0,0 +1,113 @@ +create table t2 (a int not null, primary key(a)) engine='TokuDB' +partition by key (a) partitions 8192; +show create table t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` int(11) NOT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +PARTITIONS 8192 */ +65535 inserts; +select count(*) from t2; +count(*) +65535 +select count(*) from t2 partition (p0); +count(*) +8 +select count(*) from t2 partition (p10); +count(*) +0 +select count(*) from t2 partition (p100); +count(*) +2 +select count(*) from t2 partition (p1000); +count(*) +22 +select count(*) from t2 partition (p4000); +count(*) +2 +select count(*) from t2 partition (p8000); +count(*) +2 +select count(*) from t2 partition (p8191); +count(*) +7 +select * from t2 partition (p0); +a +35503 +37977 +38009 +38108 +38109 +38140 +38141 +39061 +select * from t2 partition (p10); +a +select * from t2 partition (p100); +a +14987 +15903 +select * from t2 partition (p1000); +a +9883 +13835 +20549 +20581 +20680 +20681 +20682 +20683 +20712 +20713 +20714 +20715 +28741 +28773 +28872 +28873 +28874 +28875 +28904 +28905 +28906 +28907 +select * from t2 partition (p4000); +a +18959 +27151 +select * from t2 partition (p8000); +a +10373 +32379 +select * from t2 partition (p8191); +a +690 +1471 +1503 +4690 +4722 +7230 +14597 +delete from t2 partition (p8191); +select * from t2 partition (p8191); +a +insert into t2 partition (p8191) values (690), (1471); +select * from t2 partition (p8191); +a +690 +1471 +update t2 partition (p8191) set a=4690 where a= 690; +select * from t2 partition (p8191); +a +1471 +4690 +load data infile 'MYSQL_TMP_DIR/data01' into table t2 partition (p8191) fields terminated by ','; +select * from t2 partition (p8191); +a +1471 +4690 +7230 +14597 +drop table t2; diff --git a/mysql-test/suite/tokudb.parts/r-native/partition_max_parts_list_tokudb.result b/mysql-test/suite/tokudb.parts/r-native/partition_max_parts_list_tokudb.result new file mode 100644 index 000000000000..99bd02e6c015 --- /dev/null +++ b/mysql-test/suite/tokudb.parts/r-native/partition_max_parts_list_tokudb.result @@ -0,0 +1,8282 @@ +create table t2 (a int) engine='TokuDB' +partition by list (a) ( +PARTITION p0 VALUES IN (0,1,2,3), +PARTITION p1 VALUES IN (4,5,6,7), +PARTITION p2 VALUES IN (8,9,10,11), +PARTITION p3 VALUES IN (12,13,14,15), +PARTITION p4 VALUES IN (16,17,18,19), +PARTITION p5 VALUES IN (20,21,22,23), +PARTITION p6 VALUES IN (24,25,26,27), +PARTITION p7 VALUES IN (28,29,30,31), +PARTITION p8 VALUES IN (32,33,34,35), +PARTITION p9 VALUES IN (36,37,38,39), +PARTITION p10 VALUES IN (40,41,42,43), +PARTITION p11 VALUES IN (44,45,46,47), +PARTITION p12 VALUES IN (48,49,50,51), +PARTITION p13 VALUES IN (52,53,54,55), +PARTITION p14 VALUES IN (56,57,58,59), +PARTITION p15 VALUES IN (60,61,62,63), +PARTITION p16 VALUES IN (64,65,66,67), +PARTITION p17 VALUES IN (68,69,70,71), +PARTITION p18 VALUES IN (72,73,74,75), +PARTITION p19 VALUES IN (76,77,78,79), +PARTITION p20 VALUES IN (80,81,82,83), +PARTITION p21 VALUES IN (84,85,86,87), +PARTITION p22 VALUES IN (88,89,90,91), +PARTITION p23 VALUES IN (92,93,94,95), +PARTITION p24 VALUES IN (96,97,98,99), +PARTITION p25 VALUES IN (100,101,102,103), +PARTITION p26 VALUES IN (104,105,106,107), +PARTITION p27 VALUES IN (108,109,110,111), +PARTITION p28 VALUES IN (112,113,114,115), +PARTITION p29 VALUES IN (116,117,118,119), +PARTITION p30 VALUES IN (120,121,122,123), +PARTITION p31 VALUES IN (124,125,126,127), +PARTITION p32 VALUES IN (128,129,130,131), +PARTITION p33 VALUES IN (132,133,134,135), +PARTITION p34 VALUES IN (136,137,138,139), +PARTITION p35 VALUES IN (140,141,142,143), +PARTITION p36 VALUES IN (144,145,146,147), +PARTITION p37 VALUES IN (148,149,150,151), +PARTITION p38 VALUES IN (152,153,154,155), +PARTITION p39 VALUES IN (156,157,158,159), +PARTITION p40 VALUES IN (160,161,162,163), +PARTITION p41 VALUES IN (164,165,166,167), +PARTITION p42 VALUES IN (168,169,170,171), +PARTITION p43 VALUES IN (172,173,174,175), +PARTITION p44 VALUES IN (176,177,178,179), +PARTITION p45 VALUES IN (180,181,182,183), +PARTITION p46 VALUES IN (184,185,186,187), +PARTITION p47 VALUES IN (188,189,190,191), +PARTITION p48 VALUES IN (192,193,194,195), +PARTITION p49 VALUES IN (196,197,198,199), +PARTITION p50 VALUES IN (200,201,202,203), +PARTITION p51 VALUES IN (204,205,206,207), +PARTITION p52 VALUES IN (208,209,210,211), +PARTITION p53 VALUES IN (212,213,214,215), +PARTITION p54 VALUES IN (216,217,218,219), +PARTITION p55 VALUES IN (220,221,222,223), +PARTITION p56 VALUES IN (224,225,226,227), +PARTITION p57 VALUES IN (228,229,230,231), +PARTITION p58 VALUES IN (232,233,234,235), +PARTITION p59 VALUES IN (236,237,238,239), +PARTITION p60 VALUES IN (240,241,242,243), +PARTITION p61 VALUES IN (244,245,246,247), +PARTITION p62 VALUES IN (248,249,250,251), +PARTITION p63 VALUES IN (252,253,254,255), +PARTITION p64 VALUES IN (256,257,258,259), +PARTITION p65 VALUES IN (260,261,262,263), +PARTITION p66 VALUES IN (264,265,266,267), +PARTITION p67 VALUES IN (268,269,270,271), +PARTITION p68 VALUES IN (272,273,274,275), +PARTITION p69 VALUES IN (276,277,278,279), +PARTITION p70 VALUES IN (280,281,282,283), +PARTITION p71 VALUES IN (284,285,286,287), +PARTITION p72 VALUES IN (288,289,290,291), +PARTITION p73 VALUES IN (292,293,294,295), +PARTITION p74 VALUES IN (296,297,298,299), +PARTITION p75 VALUES IN (300,301,302,303), +PARTITION p76 VALUES IN (304,305,306,307), +PARTITION p77 VALUES IN (308,309,310,311), +PARTITION p78 VALUES IN (312,313,314,315), +PARTITION p79 VALUES IN (316,317,318,319), +PARTITION p80 VALUES IN (320,321,322,323), +PARTITION p81 VALUES IN (324,325,326,327), +PARTITION p82 VALUES IN (328,329,330,331), +PARTITION p83 VALUES IN (332,333,334,335), +PARTITION p84 VALUES IN (336,337,338,339), +PARTITION p85 VALUES IN (340,341,342,343), +PARTITION p86 VALUES IN (344,345,346,347), +PARTITION p87 VALUES IN (348,349,350,351), +PARTITION p88 VALUES IN (352,353,354,355), +PARTITION p89 VALUES IN (356,357,358,359), +PARTITION p90 VALUES IN (360,361,362,363), +PARTITION p91 VALUES IN (364,365,366,367), +PARTITION p92 VALUES IN (368,369,370,371), +PARTITION p93 VALUES IN (372,373,374,375), +PARTITION p94 VALUES IN (376,377,378,379), +PARTITION p95 VALUES IN (380,381,382,383), +PARTITION p96 VALUES IN (384,385,386,387), +PARTITION p97 VALUES IN (388,389,390,391), +PARTITION p98 VALUES IN (392,393,394,395), +PARTITION p99 VALUES IN (396,397,398,399), +PARTITION p100 VALUES IN (400,401,402,403), +PARTITION p101 VALUES IN (404,405,406,407), +PARTITION p102 VALUES IN (408,409,410,411), +PARTITION p103 VALUES IN (412,413,414,415), +PARTITION p104 VALUES IN (416,417,418,419), +PARTITION p105 VALUES IN (420,421,422,423), +PARTITION p106 VALUES IN (424,425,426,427), +PARTITION p107 VALUES IN (428,429,430,431), +PARTITION p108 VALUES IN (432,433,434,435), +PARTITION p109 VALUES IN (436,437,438,439), +PARTITION p110 VALUES IN (440,441,442,443), +PARTITION p111 VALUES IN (444,445,446,447), +PARTITION p112 VALUES IN (448,449,450,451), +PARTITION p113 VALUES IN (452,453,454,455), +PARTITION p114 VALUES IN (456,457,458,459), +PARTITION p115 VALUES IN (460,461,462,463), +PARTITION p116 VALUES IN (464,465,466,467), +PARTITION p117 VALUES IN (468,469,470,471), +PARTITION p118 VALUES IN (472,473,474,475), +PARTITION p119 VALUES IN (476,477,478,479), +PARTITION p120 VALUES IN (480,481,482,483), +PARTITION p121 VALUES IN (484,485,486,487), +PARTITION p122 VALUES IN (488,489,490,491), +PARTITION p123 VALUES IN (492,493,494,495), +PARTITION p124 VALUES IN (496,497,498,499), +PARTITION p125 VALUES IN (500,501,502,503), +PARTITION p126 VALUES IN (504,505,506,507), +PARTITION p127 VALUES IN (508,509,510,511), +PARTITION p128 VALUES IN (512,513,514,515), +PARTITION p129 VALUES IN (516,517,518,519), +PARTITION p130 VALUES IN (520,521,522,523), +PARTITION p131 VALUES IN (524,525,526,527), +PARTITION p132 VALUES IN (528,529,530,531), +PARTITION p133 VALUES IN (532,533,534,535), +PARTITION p134 VALUES IN (536,537,538,539), +PARTITION p135 VALUES IN (540,541,542,543), +PARTITION p136 VALUES IN (544,545,546,547), +PARTITION p137 VALUES IN (548,549,550,551), +PARTITION p138 VALUES IN (552,553,554,555), +PARTITION p139 VALUES IN (556,557,558,559), +PARTITION p140 VALUES IN (560,561,562,563), +PARTITION p141 VALUES IN (564,565,566,567), +PARTITION p142 VALUES IN (568,569,570,571), +PARTITION p143 VALUES IN (572,573,574,575), +PARTITION p144 VALUES IN (576,577,578,579), +PARTITION p145 VALUES IN (580,581,582,583), +PARTITION p146 VALUES IN (584,585,586,587), +PARTITION p147 VALUES IN (588,589,590,591), +PARTITION p148 VALUES IN (592,593,594,595), +PARTITION p149 VALUES IN (596,597,598,599), +PARTITION p150 VALUES IN (600,601,602,603), +PARTITION p151 VALUES IN (604,605,606,607), +PARTITION p152 VALUES IN (608,609,610,611), +PARTITION p153 VALUES IN (612,613,614,615), +PARTITION p154 VALUES IN (616,617,618,619), +PARTITION p155 VALUES IN (620,621,622,623), +PARTITION p156 VALUES IN (624,625,626,627), +PARTITION p157 VALUES IN (628,629,630,631), +PARTITION p158 VALUES IN (632,633,634,635), +PARTITION p159 VALUES IN (636,637,638,639), +PARTITION p160 VALUES IN (640,641,642,643), +PARTITION p161 VALUES IN (644,645,646,647), +PARTITION p162 VALUES IN (648,649,650,651), +PARTITION p163 VALUES IN (652,653,654,655), +PARTITION p164 VALUES IN (656,657,658,659), +PARTITION p165 VALUES IN (660,661,662,663), +PARTITION p166 VALUES IN (664,665,666,667), +PARTITION p167 VALUES IN (668,669,670,671), +PARTITION p168 VALUES IN (672,673,674,675), +PARTITION p169 VALUES IN (676,677,678,679), +PARTITION p170 VALUES IN (680,681,682,683), +PARTITION p171 VALUES IN (684,685,686,687), +PARTITION p172 VALUES IN (688,689,690,691), +PARTITION p173 VALUES IN (692,693,694,695), +PARTITION p174 VALUES IN (696,697,698,699), +PARTITION p175 VALUES IN (700,701,702,703), +PARTITION p176 VALUES IN (704,705,706,707), +PARTITION p177 VALUES IN (708,709,710,711), +PARTITION p178 VALUES IN (712,713,714,715), +PARTITION p179 VALUES IN (716,717,718,719), +PARTITION p180 VALUES IN (720,721,722,723), +PARTITION p181 VALUES IN (724,725,726,727), +PARTITION p182 VALUES IN (728,729,730,731), +PARTITION p183 VALUES IN (732,733,734,735), +PARTITION p184 VALUES IN (736,737,738,739), +PARTITION p185 VALUES IN (740,741,742,743), +PARTITION p186 VALUES IN (744,745,746,747), +PARTITION p187 VALUES IN (748,749,750,751), +PARTITION p188 VALUES IN (752,753,754,755), +PARTITION p189 VALUES IN (756,757,758,759), +PARTITION p190 VALUES IN (760,761,762,763), +PARTITION p191 VALUES IN (764,765,766,767), +PARTITION p192 VALUES IN (768,769,770,771), +PARTITION p193 VALUES IN (772,773,774,775), +PARTITION p194 VALUES IN (776,777,778,779), +PARTITION p195 VALUES IN (780,781,782,783), +PARTITION p196 VALUES IN (784,785,786,787), +PARTITION p197 VALUES IN (788,789,790,791), +PARTITION p198 VALUES IN (792,793,794,795), +PARTITION p199 VALUES IN (796,797,798,799), +PARTITION p200 VALUES IN (800,801,802,803), +PARTITION p201 VALUES IN (804,805,806,807), +PARTITION p202 VALUES IN (808,809,810,811), +PARTITION p203 VALUES IN (812,813,814,815), +PARTITION p204 VALUES IN (816,817,818,819), +PARTITION p205 VALUES IN (820,821,822,823), +PARTITION p206 VALUES IN (824,825,826,827), +PARTITION p207 VALUES IN (828,829,830,831), +PARTITION p208 VALUES IN (832,833,834,835), +PARTITION p209 VALUES IN (836,837,838,839), +PARTITION p210 VALUES IN (840,841,842,843), +PARTITION p211 VALUES IN (844,845,846,847), +PARTITION p212 VALUES IN (848,849,850,851), +PARTITION p213 VALUES IN (852,853,854,855), +PARTITION p214 VALUES IN (856,857,858,859), +PARTITION p215 VALUES IN (860,861,862,863), +PARTITION p216 VALUES IN (864,865,866,867), +PARTITION p217 VALUES IN (868,869,870,871), +PARTITION p218 VALUES IN (872,873,874,875), +PARTITION p219 VALUES IN (876,877,878,879), +PARTITION p220 VALUES IN (880,881,882,883), +PARTITION p221 VALUES IN (884,885,886,887), +PARTITION p222 VALUES IN (888,889,890,891), +PARTITION p223 VALUES IN (892,893,894,895), +PARTITION p224 VALUES IN (896,897,898,899), +PARTITION p225 VALUES IN (900,901,902,903), +PARTITION p226 VALUES IN (904,905,906,907), +PARTITION p227 VALUES IN (908,909,910,911), +PARTITION p228 VALUES IN (912,913,914,915), +PARTITION p229 VALUES IN (916,917,918,919), +PARTITION p230 VALUES IN (920,921,922,923), +PARTITION p231 VALUES IN (924,925,926,927), +PARTITION p232 VALUES IN (928,929,930,931), +PARTITION p233 VALUES IN (932,933,934,935), +PARTITION p234 VALUES IN (936,937,938,939), +PARTITION p235 VALUES IN (940,941,942,943), +PARTITION p236 VALUES IN (944,945,946,947), +PARTITION p237 VALUES IN (948,949,950,951), +PARTITION p238 VALUES IN (952,953,954,955), +PARTITION p239 VALUES IN (956,957,958,959), +PARTITION p240 VALUES IN (960,961,962,963), +PARTITION p241 VALUES IN (964,965,966,967), +PARTITION p242 VALUES IN (968,969,970,971), +PARTITION p243 VALUES IN (972,973,974,975), +PARTITION p244 VALUES IN (976,977,978,979), +PARTITION p245 VALUES IN (980,981,982,983), +PARTITION p246 VALUES IN (984,985,986,987), +PARTITION p247 VALUES IN (988,989,990,991), +PARTITION p248 VALUES IN (992,993,994,995), +PARTITION p249 VALUES IN (996,997,998,999), +PARTITION p250 VALUES IN (1000,1001,1002,1003), +PARTITION p251 VALUES IN (1004,1005,1006,1007), +PARTITION p252 VALUES IN (1008,1009,1010,1011), +PARTITION p253 VALUES IN (1012,1013,1014,1015), +PARTITION p254 VALUES IN (1016,1017,1018,1019), +PARTITION p255 VALUES IN (1020,1021,1022,1023), +PARTITION p256 VALUES IN (1024,1025,1026,1027), +PARTITION p257 VALUES IN (1028,1029,1030,1031), +PARTITION p258 VALUES IN (1032,1033,1034,1035), +PARTITION p259 VALUES IN (1036,1037,1038,1039), +PARTITION p260 VALUES IN (1040,1041,1042,1043), +PARTITION p261 VALUES IN (1044,1045,1046,1047), +PARTITION p262 VALUES IN (1048,1049,1050,1051), +PARTITION p263 VALUES IN (1052,1053,1054,1055), +PARTITION p264 VALUES IN (1056,1057,1058,1059), +PARTITION p265 VALUES IN (1060,1061,1062,1063), +PARTITION p266 VALUES IN (1064,1065,1066,1067), +PARTITION p267 VALUES IN (1068,1069,1070,1071), +PARTITION p268 VALUES IN (1072,1073,1074,1075), +PARTITION p269 VALUES IN (1076,1077,1078,1079), +PARTITION p270 VALUES IN (1080,1081,1082,1083), +PARTITION p271 VALUES IN (1084,1085,1086,1087), +PARTITION p272 VALUES IN (1088,1089,1090,1091), +PARTITION p273 VALUES IN (1092,1093,1094,1095), +PARTITION p274 VALUES IN (1096,1097,1098,1099), +PARTITION p275 VALUES IN (1100,1101,1102,1103), +PARTITION p276 VALUES IN (1104,1105,1106,1107), +PARTITION p277 VALUES IN (1108,1109,1110,1111), +PARTITION p278 VALUES IN (1112,1113,1114,1115), +PARTITION p279 VALUES IN (1116,1117,1118,1119), +PARTITION p280 VALUES IN (1120,1121,1122,1123), +PARTITION p281 VALUES IN (1124,1125,1126,1127), +PARTITION p282 VALUES IN (1128,1129,1130,1131), +PARTITION p283 VALUES IN (1132,1133,1134,1135), +PARTITION p284 VALUES IN (1136,1137,1138,1139), +PARTITION p285 VALUES IN (1140,1141,1142,1143), +PARTITION p286 VALUES IN (1144,1145,1146,1147), +PARTITION p287 VALUES IN (1148,1149,1150,1151), +PARTITION p288 VALUES IN (1152,1153,1154,1155), +PARTITION p289 VALUES IN (1156,1157,1158,1159), +PARTITION p290 VALUES IN (1160,1161,1162,1163), +PARTITION p291 VALUES IN (1164,1165,1166,1167), +PARTITION p292 VALUES IN (1168,1169,1170,1171), +PARTITION p293 VALUES IN (1172,1173,1174,1175), +PARTITION p294 VALUES IN (1176,1177,1178,1179), +PARTITION p295 VALUES IN (1180,1181,1182,1183), +PARTITION p296 VALUES IN (1184,1185,1186,1187), +PARTITION p297 VALUES IN (1188,1189,1190,1191), +PARTITION p298 VALUES IN (1192,1193,1194,1195), +PARTITION p299 VALUES IN (1196,1197,1198,1199), +PARTITION p300 VALUES IN (1200,1201,1202,1203), +PARTITION p301 VALUES IN (1204,1205,1206,1207), +PARTITION p302 VALUES IN (1208,1209,1210,1211), +PARTITION p303 VALUES IN (1212,1213,1214,1215), +PARTITION p304 VALUES IN (1216,1217,1218,1219), +PARTITION p305 VALUES IN (1220,1221,1222,1223), +PARTITION p306 VALUES IN (1224,1225,1226,1227), +PARTITION p307 VALUES IN (1228,1229,1230,1231), +PARTITION p308 VALUES IN (1232,1233,1234,1235), +PARTITION p309 VALUES IN (1236,1237,1238,1239), +PARTITION p310 VALUES IN (1240,1241,1242,1243), +PARTITION p311 VALUES IN (1244,1245,1246,1247), +PARTITION p312 VALUES IN (1248,1249,1250,1251), +PARTITION p313 VALUES IN (1252,1253,1254,1255), +PARTITION p314 VALUES IN (1256,1257,1258,1259), +PARTITION p315 VALUES IN (1260,1261,1262,1263), +PARTITION p316 VALUES IN (1264,1265,1266,1267), +PARTITION p317 VALUES IN (1268,1269,1270,1271), +PARTITION p318 VALUES IN (1272,1273,1274,1275), +PARTITION p319 VALUES IN (1276,1277,1278,1279), +PARTITION p320 VALUES IN (1280,1281,1282,1283), +PARTITION p321 VALUES IN (1284,1285,1286,1287), +PARTITION p322 VALUES IN (1288,1289,1290,1291), +PARTITION p323 VALUES IN (1292,1293,1294,1295), +PARTITION p324 VALUES IN (1296,1297,1298,1299), +PARTITION p325 VALUES IN (1300,1301,1302,1303), +PARTITION p326 VALUES IN (1304,1305,1306,1307), +PARTITION p327 VALUES IN (1308,1309,1310,1311), +PARTITION p328 VALUES IN (1312,1313,1314,1315), +PARTITION p329 VALUES IN (1316,1317,1318,1319), +PARTITION p330 VALUES IN (1320,1321,1322,1323), +PARTITION p331 VALUES IN (1324,1325,1326,1327), +PARTITION p332 VALUES IN (1328,1329,1330,1331), +PARTITION p333 VALUES IN (1332,1333,1334,1335), +PARTITION p334 VALUES IN (1336,1337,1338,1339), +PARTITION p335 VALUES IN (1340,1341,1342,1343), +PARTITION p336 VALUES IN (1344,1345,1346,1347), +PARTITION p337 VALUES IN (1348,1349,1350,1351), +PARTITION p338 VALUES IN (1352,1353,1354,1355), +PARTITION p339 VALUES IN (1356,1357,1358,1359), +PARTITION p340 VALUES IN (1360,1361,1362,1363), +PARTITION p341 VALUES IN (1364,1365,1366,1367), +PARTITION p342 VALUES IN (1368,1369,1370,1371), +PARTITION p343 VALUES IN (1372,1373,1374,1375), +PARTITION p344 VALUES IN (1376,1377,1378,1379), +PARTITION p345 VALUES IN (1380,1381,1382,1383), +PARTITION p346 VALUES IN (1384,1385,1386,1387), +PARTITION p347 VALUES IN (1388,1389,1390,1391), +PARTITION p348 VALUES IN (1392,1393,1394,1395), +PARTITION p349 VALUES IN (1396,1397,1398,1399), +PARTITION p350 VALUES IN (1400,1401,1402,1403), +PARTITION p351 VALUES IN (1404,1405,1406,1407), +PARTITION p352 VALUES IN (1408,1409,1410,1411), +PARTITION p353 VALUES IN (1412,1413,1414,1415), +PARTITION p354 VALUES IN (1416,1417,1418,1419), +PARTITION p355 VALUES IN (1420,1421,1422,1423), +PARTITION p356 VALUES IN (1424,1425,1426,1427), +PARTITION p357 VALUES IN (1428,1429,1430,1431), +PARTITION p358 VALUES IN (1432,1433,1434,1435), +PARTITION p359 VALUES IN (1436,1437,1438,1439), +PARTITION p360 VALUES IN (1440,1441,1442,1443), +PARTITION p361 VALUES IN (1444,1445,1446,1447), +PARTITION p362 VALUES IN (1448,1449,1450,1451), +PARTITION p363 VALUES IN (1452,1453,1454,1455), +PARTITION p364 VALUES IN (1456,1457,1458,1459), +PARTITION p365 VALUES IN (1460,1461,1462,1463), +PARTITION p366 VALUES IN (1464,1465,1466,1467), +PARTITION p367 VALUES IN (1468,1469,1470,1471), +PARTITION p368 VALUES IN (1472,1473,1474,1475), +PARTITION p369 VALUES IN (1476,1477,1478,1479), +PARTITION p370 VALUES IN (1480,1481,1482,1483), +PARTITION p371 VALUES IN (1484,1485,1486,1487), +PARTITION p372 VALUES IN (1488,1489,1490,1491), +PARTITION p373 VALUES IN (1492,1493,1494,1495), +PARTITION p374 VALUES IN (1496,1497,1498,1499), +PARTITION p375 VALUES IN (1500,1501,1502,1503), +PARTITION p376 VALUES IN (1504,1505,1506,1507), +PARTITION p377 VALUES IN (1508,1509,1510,1511), +PARTITION p378 VALUES IN (1512,1513,1514,1515), +PARTITION p379 VALUES IN (1516,1517,1518,1519), +PARTITION p380 VALUES IN (1520,1521,1522,1523), +PARTITION p381 VALUES IN (1524,1525,1526,1527), +PARTITION p382 VALUES IN (1528,1529,1530,1531), +PARTITION p383 VALUES IN (1532,1533,1534,1535), +PARTITION p384 VALUES IN (1536,1537,1538,1539), +PARTITION p385 VALUES IN (1540,1541,1542,1543), +PARTITION p386 VALUES IN (1544,1545,1546,1547), +PARTITION p387 VALUES IN (1548,1549,1550,1551), +PARTITION p388 VALUES IN (1552,1553,1554,1555), +PARTITION p389 VALUES IN (1556,1557,1558,1559), +PARTITION p390 VALUES IN (1560,1561,1562,1563), +PARTITION p391 VALUES IN (1564,1565,1566,1567), +PARTITION p392 VALUES IN (1568,1569,1570,1571), +PARTITION p393 VALUES IN (1572,1573,1574,1575), +PARTITION p394 VALUES IN (1576,1577,1578,1579), +PARTITION p395 VALUES IN (1580,1581,1582,1583), +PARTITION p396 VALUES IN (1584,1585,1586,1587), +PARTITION p397 VALUES IN (1588,1589,1590,1591), +PARTITION p398 VALUES IN (1592,1593,1594,1595), +PARTITION p399 VALUES IN (1596,1597,1598,1599), +PARTITION p400 VALUES IN (1600,1601,1602,1603), +PARTITION p401 VALUES IN (1604,1605,1606,1607), +PARTITION p402 VALUES IN (1608,1609,1610,1611), +PARTITION p403 VALUES IN (1612,1613,1614,1615), +PARTITION p404 VALUES IN (1616,1617,1618,1619), +PARTITION p405 VALUES IN (1620,1621,1622,1623), +PARTITION p406 VALUES IN (1624,1625,1626,1627), +PARTITION p407 VALUES IN (1628,1629,1630,1631), +PARTITION p408 VALUES IN (1632,1633,1634,1635), +PARTITION p409 VALUES IN (1636,1637,1638,1639), +PARTITION p410 VALUES IN (1640,1641,1642,1643), +PARTITION p411 VALUES IN (1644,1645,1646,1647), +PARTITION p412 VALUES IN (1648,1649,1650,1651), +PARTITION p413 VALUES IN (1652,1653,1654,1655), +PARTITION p414 VALUES IN (1656,1657,1658,1659), +PARTITION p415 VALUES IN (1660,1661,1662,1663), +PARTITION p416 VALUES IN (1664,1665,1666,1667), +PARTITION p417 VALUES IN (1668,1669,1670,1671), +PARTITION p418 VALUES IN (1672,1673,1674,1675), +PARTITION p419 VALUES IN (1676,1677,1678,1679), +PARTITION p420 VALUES IN (1680,1681,1682,1683), +PARTITION p421 VALUES IN (1684,1685,1686,1687), +PARTITION p422 VALUES IN (1688,1689,1690,1691), +PARTITION p423 VALUES IN (1692,1693,1694,1695), +PARTITION p424 VALUES IN (1696,1697,1698,1699), +PARTITION p425 VALUES IN (1700,1701,1702,1703), +PARTITION p426 VALUES IN (1704,1705,1706,1707), +PARTITION p427 VALUES IN (1708,1709,1710,1711), +PARTITION p428 VALUES IN (1712,1713,1714,1715), +PARTITION p429 VALUES IN (1716,1717,1718,1719), +PARTITION p430 VALUES IN (1720,1721,1722,1723), +PARTITION p431 VALUES IN (1724,1725,1726,1727), +PARTITION p432 VALUES IN (1728,1729,1730,1731), +PARTITION p433 VALUES IN (1732,1733,1734,1735), +PARTITION p434 VALUES IN (1736,1737,1738,1739), +PARTITION p435 VALUES IN (1740,1741,1742,1743), +PARTITION p436 VALUES IN (1744,1745,1746,1747), +PARTITION p437 VALUES IN (1748,1749,1750,1751), +PARTITION p438 VALUES IN (1752,1753,1754,1755), +PARTITION p439 VALUES IN (1756,1757,1758,1759), +PARTITION p440 VALUES IN (1760,1761,1762,1763), +PARTITION p441 VALUES IN (1764,1765,1766,1767), +PARTITION p442 VALUES IN (1768,1769,1770,1771), +PARTITION p443 VALUES IN (1772,1773,1774,1775), +PARTITION p444 VALUES IN (1776,1777,1778,1779), +PARTITION p445 VALUES IN (1780,1781,1782,1783), +PARTITION p446 VALUES IN (1784,1785,1786,1787), +PARTITION p447 VALUES IN (1788,1789,1790,1791), +PARTITION p448 VALUES IN (1792,1793,1794,1795), +PARTITION p449 VALUES IN (1796,1797,1798,1799), +PARTITION p450 VALUES IN (1800,1801,1802,1803), +PARTITION p451 VALUES IN (1804,1805,1806,1807), +PARTITION p452 VALUES IN (1808,1809,1810,1811), +PARTITION p453 VALUES IN (1812,1813,1814,1815), +PARTITION p454 VALUES IN (1816,1817,1818,1819), +PARTITION p455 VALUES IN (1820,1821,1822,1823), +PARTITION p456 VALUES IN (1824,1825,1826,1827), +PARTITION p457 VALUES IN (1828,1829,1830,1831), +PARTITION p458 VALUES IN (1832,1833,1834,1835), +PARTITION p459 VALUES IN (1836,1837,1838,1839), +PARTITION p460 VALUES IN (1840,1841,1842,1843), +PARTITION p461 VALUES IN (1844,1845,1846,1847), +PARTITION p462 VALUES IN (1848,1849,1850,1851), +PARTITION p463 VALUES IN (1852,1853,1854,1855), +PARTITION p464 VALUES IN (1856,1857,1858,1859), +PARTITION p465 VALUES IN (1860,1861,1862,1863), +PARTITION p466 VALUES IN (1864,1865,1866,1867), +PARTITION p467 VALUES IN (1868,1869,1870,1871), +PARTITION p468 VALUES IN (1872,1873,1874,1875), +PARTITION p469 VALUES IN (1876,1877,1878,1879), +PARTITION p470 VALUES IN (1880,1881,1882,1883), +PARTITION p471 VALUES IN (1884,1885,1886,1887), +PARTITION p472 VALUES IN (1888,1889,1890,1891), +PARTITION p473 VALUES IN (1892,1893,1894,1895), +PARTITION p474 VALUES IN (1896,1897,1898,1899), +PARTITION p475 VALUES IN (1900,1901,1902,1903), +PARTITION p476 VALUES IN (1904,1905,1906,1907), +PARTITION p477 VALUES IN (1908,1909,1910,1911), +PARTITION p478 VALUES IN (1912,1913,1914,1915), +PARTITION p479 VALUES IN (1916,1917,1918,1919), +PARTITION p480 VALUES IN (1920,1921,1922,1923), +PARTITION p481 VALUES IN (1924,1925,1926,1927), +PARTITION p482 VALUES IN (1928,1929,1930,1931), +PARTITION p483 VALUES IN (1932,1933,1934,1935), +PARTITION p484 VALUES IN (1936,1937,1938,1939), +PARTITION p485 VALUES IN (1940,1941,1942,1943), +PARTITION p486 VALUES IN (1944,1945,1946,1947), +PARTITION p487 VALUES IN (1948,1949,1950,1951), +PARTITION p488 VALUES IN (1952,1953,1954,1955), +PARTITION p489 VALUES IN (1956,1957,1958,1959), +PARTITION p490 VALUES IN (1960,1961,1962,1963), +PARTITION p491 VALUES IN (1964,1965,1966,1967), +PARTITION p492 VALUES IN (1968,1969,1970,1971), +PARTITION p493 VALUES IN (1972,1973,1974,1975), +PARTITION p494 VALUES IN (1976,1977,1978,1979), +PARTITION p495 VALUES IN (1980,1981,1982,1983), +PARTITION p496 VALUES IN (1984,1985,1986,1987), +PARTITION p497 VALUES IN (1988,1989,1990,1991), +PARTITION p498 VALUES IN (1992,1993,1994,1995), +PARTITION p499 VALUES IN (1996,1997,1998,1999), +PARTITION p500 VALUES IN (2000,2001,2002,2003), +PARTITION p501 VALUES IN (2004,2005,2006,2007), +PARTITION p502 VALUES IN (2008,2009,2010,2011), +PARTITION p503 VALUES IN (2012,2013,2014,2015), +PARTITION p504 VALUES IN (2016,2017,2018,2019), +PARTITION p505 VALUES IN (2020,2021,2022,2023), +PARTITION p506 VALUES IN (2024,2025,2026,2027), +PARTITION p507 VALUES IN (2028,2029,2030,2031), +PARTITION p508 VALUES IN (2032,2033,2034,2035), +PARTITION p509 VALUES IN (2036,2037,2038,2039), +PARTITION p510 VALUES IN (2040,2041,2042,2043), +PARTITION p511 VALUES IN (2044,2045,2046,2047), +PARTITION p512 VALUES IN (2048,2049,2050,2051), +PARTITION p513 VALUES IN (2052,2053,2054,2055), +PARTITION p514 VALUES IN (2056,2057,2058,2059), +PARTITION p515 VALUES IN (2060,2061,2062,2063), +PARTITION p516 VALUES IN (2064,2065,2066,2067), +PARTITION p517 VALUES IN (2068,2069,2070,2071), +PARTITION p518 VALUES IN (2072,2073,2074,2075), +PARTITION p519 VALUES IN (2076,2077,2078,2079), +PARTITION p520 VALUES IN (2080,2081,2082,2083), +PARTITION p521 VALUES IN (2084,2085,2086,2087), +PARTITION p522 VALUES IN (2088,2089,2090,2091), +PARTITION p523 VALUES IN (2092,2093,2094,2095), +PARTITION p524 VALUES IN (2096,2097,2098,2099), +PARTITION p525 VALUES IN (2100,2101,2102,2103), +PARTITION p526 VALUES IN (2104,2105,2106,2107), +PARTITION p527 VALUES IN (2108,2109,2110,2111), +PARTITION p528 VALUES IN (2112,2113,2114,2115), +PARTITION p529 VALUES IN (2116,2117,2118,2119), +PARTITION p530 VALUES IN (2120,2121,2122,2123), +PARTITION p531 VALUES IN (2124,2125,2126,2127), +PARTITION p532 VALUES IN (2128,2129,2130,2131), +PARTITION p533 VALUES IN (2132,2133,2134,2135), +PARTITION p534 VALUES IN (2136,2137,2138,2139), +PARTITION p535 VALUES IN (2140,2141,2142,2143), +PARTITION p536 VALUES IN (2144,2145,2146,2147), +PARTITION p537 VALUES IN (2148,2149,2150,2151), +PARTITION p538 VALUES IN (2152,2153,2154,2155), +PARTITION p539 VALUES IN (2156,2157,2158,2159), +PARTITION p540 VALUES IN (2160,2161,2162,2163), +PARTITION p541 VALUES IN (2164,2165,2166,2167), +PARTITION p542 VALUES IN (2168,2169,2170,2171), +PARTITION p543 VALUES IN (2172,2173,2174,2175), +PARTITION p544 VALUES IN (2176,2177,2178,2179), +PARTITION p545 VALUES IN (2180,2181,2182,2183), +PARTITION p546 VALUES IN (2184,2185,2186,2187), +PARTITION p547 VALUES IN (2188,2189,2190,2191), +PARTITION p548 VALUES IN (2192,2193,2194,2195), +PARTITION p549 VALUES IN (2196,2197,2198,2199), +PARTITION p550 VALUES IN (2200,2201,2202,2203), +PARTITION p551 VALUES IN (2204,2205,2206,2207), +PARTITION p552 VALUES IN (2208,2209,2210,2211), +PARTITION p553 VALUES IN (2212,2213,2214,2215), +PARTITION p554 VALUES IN (2216,2217,2218,2219), +PARTITION p555 VALUES IN (2220,2221,2222,2223), +PARTITION p556 VALUES IN (2224,2225,2226,2227), +PARTITION p557 VALUES IN (2228,2229,2230,2231), +PARTITION p558 VALUES IN (2232,2233,2234,2235), +PARTITION p559 VALUES IN (2236,2237,2238,2239), +PARTITION p560 VALUES IN (2240,2241,2242,2243), +PARTITION p561 VALUES IN (2244,2245,2246,2247), +PARTITION p562 VALUES IN (2248,2249,2250,2251), +PARTITION p563 VALUES IN (2252,2253,2254,2255), +PARTITION p564 VALUES IN (2256,2257,2258,2259), +PARTITION p565 VALUES IN (2260,2261,2262,2263), +PARTITION p566 VALUES IN (2264,2265,2266,2267), +PARTITION p567 VALUES IN (2268,2269,2270,2271), +PARTITION p568 VALUES IN (2272,2273,2274,2275), +PARTITION p569 VALUES IN (2276,2277,2278,2279), +PARTITION p570 VALUES IN (2280,2281,2282,2283), +PARTITION p571 VALUES IN (2284,2285,2286,2287), +PARTITION p572 VALUES IN (2288,2289,2290,2291), +PARTITION p573 VALUES IN (2292,2293,2294,2295), +PARTITION p574 VALUES IN (2296,2297,2298,2299), +PARTITION p575 VALUES IN (2300,2301,2302,2303), +PARTITION p576 VALUES IN (2304,2305,2306,2307), +PARTITION p577 VALUES IN (2308,2309,2310,2311), +PARTITION p578 VALUES IN (2312,2313,2314,2315), +PARTITION p579 VALUES IN (2316,2317,2318,2319), +PARTITION p580 VALUES IN (2320,2321,2322,2323), +PARTITION p581 VALUES IN (2324,2325,2326,2327), +PARTITION p582 VALUES IN (2328,2329,2330,2331), +PARTITION p583 VALUES IN (2332,2333,2334,2335), +PARTITION p584 VALUES IN (2336,2337,2338,2339), +PARTITION p585 VALUES IN (2340,2341,2342,2343), +PARTITION p586 VALUES IN (2344,2345,2346,2347), +PARTITION p587 VALUES IN (2348,2349,2350,2351), +PARTITION p588 VALUES IN (2352,2353,2354,2355), +PARTITION p589 VALUES IN (2356,2357,2358,2359), +PARTITION p590 VALUES IN (2360,2361,2362,2363), +PARTITION p591 VALUES IN (2364,2365,2366,2367), +PARTITION p592 VALUES IN (2368,2369,2370,2371), +PARTITION p593 VALUES IN (2372,2373,2374,2375), +PARTITION p594 VALUES IN (2376,2377,2378,2379), +PARTITION p595 VALUES IN (2380,2381,2382,2383), +PARTITION p596 VALUES IN (2384,2385,2386,2387), +PARTITION p597 VALUES IN (2388,2389,2390,2391), +PARTITION p598 VALUES IN (2392,2393,2394,2395), +PARTITION p599 VALUES IN (2396,2397,2398,2399), +PARTITION p600 VALUES IN (2400,2401,2402,2403), +PARTITION p601 VALUES IN (2404,2405,2406,2407), +PARTITION p602 VALUES IN (2408,2409,2410,2411), +PARTITION p603 VALUES IN (2412,2413,2414,2415), +PARTITION p604 VALUES IN (2416,2417,2418,2419), +PARTITION p605 VALUES IN (2420,2421,2422,2423), +PARTITION p606 VALUES IN (2424,2425,2426,2427), +PARTITION p607 VALUES IN (2428,2429,2430,2431), +PARTITION p608 VALUES IN (2432,2433,2434,2435), +PARTITION p609 VALUES IN (2436,2437,2438,2439), +PARTITION p610 VALUES IN (2440,2441,2442,2443), +PARTITION p611 VALUES IN (2444,2445,2446,2447), +PARTITION p612 VALUES IN (2448,2449,2450,2451), +PARTITION p613 VALUES IN (2452,2453,2454,2455), +PARTITION p614 VALUES IN (2456,2457,2458,2459), +PARTITION p615 VALUES IN (2460,2461,2462,2463), +PARTITION p616 VALUES IN (2464,2465,2466,2467), +PARTITION p617 VALUES IN (2468,2469,2470,2471), +PARTITION p618 VALUES IN (2472,2473,2474,2475), +PARTITION p619 VALUES IN (2476,2477,2478,2479), +PARTITION p620 VALUES IN (2480,2481,2482,2483), +PARTITION p621 VALUES IN (2484,2485,2486,2487), +PARTITION p622 VALUES IN (2488,2489,2490,2491), +PARTITION p623 VALUES IN (2492,2493,2494,2495), +PARTITION p624 VALUES IN (2496,2497,2498,2499), +PARTITION p625 VALUES IN (2500,2501,2502,2503), +PARTITION p626 VALUES IN (2504,2505,2506,2507), +PARTITION p627 VALUES IN (2508,2509,2510,2511), +PARTITION p628 VALUES IN (2512,2513,2514,2515), +PARTITION p629 VALUES IN (2516,2517,2518,2519), +PARTITION p630 VALUES IN (2520,2521,2522,2523), +PARTITION p631 VALUES IN (2524,2525,2526,2527), +PARTITION p632 VALUES IN (2528,2529,2530,2531), +PARTITION p633 VALUES IN (2532,2533,2534,2535), +PARTITION p634 VALUES IN (2536,2537,2538,2539), +PARTITION p635 VALUES IN (2540,2541,2542,2543), +PARTITION p636 VALUES IN (2544,2545,2546,2547), +PARTITION p637 VALUES IN (2548,2549,2550,2551), +PARTITION p638 VALUES IN (2552,2553,2554,2555), +PARTITION p639 VALUES IN (2556,2557,2558,2559), +PARTITION p640 VALUES IN (2560,2561,2562,2563), +PARTITION p641 VALUES IN (2564,2565,2566,2567), +PARTITION p642 VALUES IN (2568,2569,2570,2571), +PARTITION p643 VALUES IN (2572,2573,2574,2575), +PARTITION p644 VALUES IN (2576,2577,2578,2579), +PARTITION p645 VALUES IN (2580,2581,2582,2583), +PARTITION p646 VALUES IN (2584,2585,2586,2587), +PARTITION p647 VALUES IN (2588,2589,2590,2591), +PARTITION p648 VALUES IN (2592,2593,2594,2595), +PARTITION p649 VALUES IN (2596,2597,2598,2599), +PARTITION p650 VALUES IN (2600,2601,2602,2603), +PARTITION p651 VALUES IN (2604,2605,2606,2607), +PARTITION p652 VALUES IN (2608,2609,2610,2611), +PARTITION p653 VALUES IN (2612,2613,2614,2615), +PARTITION p654 VALUES IN (2616,2617,2618,2619), +PARTITION p655 VALUES IN (2620,2621,2622,2623), +PARTITION p656 VALUES IN (2624,2625,2626,2627), +PARTITION p657 VALUES IN (2628,2629,2630,2631), +PARTITION p658 VALUES IN (2632,2633,2634,2635), +PARTITION p659 VALUES IN (2636,2637,2638,2639), +PARTITION p660 VALUES IN (2640,2641,2642,2643), +PARTITION p661 VALUES IN (2644,2645,2646,2647), +PARTITION p662 VALUES IN (2648,2649,2650,2651), +PARTITION p663 VALUES IN (2652,2653,2654,2655), +PARTITION p664 VALUES IN (2656,2657,2658,2659), +PARTITION p665 VALUES IN (2660,2661,2662,2663), +PARTITION p666 VALUES IN (2664,2665,2666,2667), +PARTITION p667 VALUES IN (2668,2669,2670,2671), +PARTITION p668 VALUES IN (2672,2673,2674,2675), +PARTITION p669 VALUES IN (2676,2677,2678,2679), +PARTITION p670 VALUES IN (2680,2681,2682,2683), +PARTITION p671 VALUES IN (2684,2685,2686,2687), +PARTITION p672 VALUES IN (2688,2689,2690,2691), +PARTITION p673 VALUES IN (2692,2693,2694,2695), +PARTITION p674 VALUES IN (2696,2697,2698,2699), +PARTITION p675 VALUES IN (2700,2701,2702,2703), +PARTITION p676 VALUES IN (2704,2705,2706,2707), +PARTITION p677 VALUES IN (2708,2709,2710,2711), +PARTITION p678 VALUES IN (2712,2713,2714,2715), +PARTITION p679 VALUES IN (2716,2717,2718,2719), +PARTITION p680 VALUES IN (2720,2721,2722,2723), +PARTITION p681 VALUES IN (2724,2725,2726,2727), +PARTITION p682 VALUES IN (2728,2729,2730,2731), +PARTITION p683 VALUES IN (2732,2733,2734,2735), +PARTITION p684 VALUES IN (2736,2737,2738,2739), +PARTITION p685 VALUES IN (2740,2741,2742,2743), +PARTITION p686 VALUES IN (2744,2745,2746,2747), +PARTITION p687 VALUES IN (2748,2749,2750,2751), +PARTITION p688 VALUES IN (2752,2753,2754,2755), +PARTITION p689 VALUES IN (2756,2757,2758,2759), +PARTITION p690 VALUES IN (2760,2761,2762,2763), +PARTITION p691 VALUES IN (2764,2765,2766,2767), +PARTITION p692 VALUES IN (2768,2769,2770,2771), +PARTITION p693 VALUES IN (2772,2773,2774,2775), +PARTITION p694 VALUES IN (2776,2777,2778,2779), +PARTITION p695 VALUES IN (2780,2781,2782,2783), +PARTITION p696 VALUES IN (2784,2785,2786,2787), +PARTITION p697 VALUES IN (2788,2789,2790,2791), +PARTITION p698 VALUES IN (2792,2793,2794,2795), +PARTITION p699 VALUES IN (2796,2797,2798,2799), +PARTITION p700 VALUES IN (2800,2801,2802,2803), +PARTITION p701 VALUES IN (2804,2805,2806,2807), +PARTITION p702 VALUES IN (2808,2809,2810,2811), +PARTITION p703 VALUES IN (2812,2813,2814,2815), +PARTITION p704 VALUES IN (2816,2817,2818,2819), +PARTITION p705 VALUES IN (2820,2821,2822,2823), +PARTITION p706 VALUES IN (2824,2825,2826,2827), +PARTITION p707 VALUES IN (2828,2829,2830,2831), +PARTITION p708 VALUES IN (2832,2833,2834,2835), +PARTITION p709 VALUES IN (2836,2837,2838,2839), +PARTITION p710 VALUES IN (2840,2841,2842,2843), +PARTITION p711 VALUES IN (2844,2845,2846,2847), +PARTITION p712 VALUES IN (2848,2849,2850,2851), +PARTITION p713 VALUES IN (2852,2853,2854,2855), +PARTITION p714 VALUES IN (2856,2857,2858,2859), +PARTITION p715 VALUES IN (2860,2861,2862,2863), +PARTITION p716 VALUES IN (2864,2865,2866,2867), +PARTITION p717 VALUES IN (2868,2869,2870,2871), +PARTITION p718 VALUES IN (2872,2873,2874,2875), +PARTITION p719 VALUES IN (2876,2877,2878,2879), +PARTITION p720 VALUES IN (2880,2881,2882,2883), +PARTITION p721 VALUES IN (2884,2885,2886,2887), +PARTITION p722 VALUES IN (2888,2889,2890,2891), +PARTITION p723 VALUES IN (2892,2893,2894,2895), +PARTITION p724 VALUES IN (2896,2897,2898,2899), +PARTITION p725 VALUES IN (2900,2901,2902,2903), +PARTITION p726 VALUES IN (2904,2905,2906,2907), +PARTITION p727 VALUES IN (2908,2909,2910,2911), +PARTITION p728 VALUES IN (2912,2913,2914,2915), +PARTITION p729 VALUES IN (2916,2917,2918,2919), +PARTITION p730 VALUES IN (2920,2921,2922,2923), +PARTITION p731 VALUES IN (2924,2925,2926,2927), +PARTITION p732 VALUES IN (2928,2929,2930,2931), +PARTITION p733 VALUES IN (2932,2933,2934,2935), +PARTITION p734 VALUES IN (2936,2937,2938,2939), +PARTITION p735 VALUES IN (2940,2941,2942,2943), +PARTITION p736 VALUES IN (2944,2945,2946,2947), +PARTITION p737 VALUES IN (2948,2949,2950,2951), +PARTITION p738 VALUES IN (2952,2953,2954,2955), +PARTITION p739 VALUES IN (2956,2957,2958,2959), +PARTITION p740 VALUES IN (2960,2961,2962,2963), +PARTITION p741 VALUES IN (2964,2965,2966,2967), +PARTITION p742 VALUES IN (2968,2969,2970,2971), +PARTITION p743 VALUES IN (2972,2973,2974,2975), +PARTITION p744 VALUES IN (2976,2977,2978,2979), +PARTITION p745 VALUES IN (2980,2981,2982,2983), +PARTITION p746 VALUES IN (2984,2985,2986,2987), +PARTITION p747 VALUES IN (2988,2989,2990,2991), +PARTITION p748 VALUES IN (2992,2993,2994,2995), +PARTITION p749 VALUES IN (2996,2997,2998,2999), +PARTITION p750 VALUES IN (3000,3001,3002,3003), +PARTITION p751 VALUES IN (3004,3005,3006,3007), +PARTITION p752 VALUES IN (3008,3009,3010,3011), +PARTITION p753 VALUES IN (3012,3013,3014,3015), +PARTITION p754 VALUES IN (3016,3017,3018,3019), +PARTITION p755 VALUES IN (3020,3021,3022,3023), +PARTITION p756 VALUES IN (3024,3025,3026,3027), +PARTITION p757 VALUES IN (3028,3029,3030,3031), +PARTITION p758 VALUES IN (3032,3033,3034,3035), +PARTITION p759 VALUES IN (3036,3037,3038,3039), +PARTITION p760 VALUES IN (3040,3041,3042,3043), +PARTITION p761 VALUES IN (3044,3045,3046,3047), +PARTITION p762 VALUES IN (3048,3049,3050,3051), +PARTITION p763 VALUES IN (3052,3053,3054,3055), +PARTITION p764 VALUES IN (3056,3057,3058,3059), +PARTITION p765 VALUES IN (3060,3061,3062,3063), +PARTITION p766 VALUES IN (3064,3065,3066,3067), +PARTITION p767 VALUES IN (3068,3069,3070,3071), +PARTITION p768 VALUES IN (3072,3073,3074,3075), +PARTITION p769 VALUES IN (3076,3077,3078,3079), +PARTITION p770 VALUES IN (3080,3081,3082,3083), +PARTITION p771 VALUES IN (3084,3085,3086,3087), +PARTITION p772 VALUES IN (3088,3089,3090,3091), +PARTITION p773 VALUES IN (3092,3093,3094,3095), +PARTITION p774 VALUES IN (3096,3097,3098,3099), +PARTITION p775 VALUES IN (3100,3101,3102,3103), +PARTITION p776 VALUES IN (3104,3105,3106,3107), +PARTITION p777 VALUES IN (3108,3109,3110,3111), +PARTITION p778 VALUES IN (3112,3113,3114,3115), +PARTITION p779 VALUES IN (3116,3117,3118,3119), +PARTITION p780 VALUES IN (3120,3121,3122,3123), +PARTITION p781 VALUES IN (3124,3125,3126,3127), +PARTITION p782 VALUES IN (3128,3129,3130,3131), +PARTITION p783 VALUES IN (3132,3133,3134,3135), +PARTITION p784 VALUES IN (3136,3137,3138,3139), +PARTITION p785 VALUES IN (3140,3141,3142,3143), +PARTITION p786 VALUES IN (3144,3145,3146,3147), +PARTITION p787 VALUES IN (3148,3149,3150,3151), +PARTITION p788 VALUES IN (3152,3153,3154,3155), +PARTITION p789 VALUES IN (3156,3157,3158,3159), +PARTITION p790 VALUES IN (3160,3161,3162,3163), +PARTITION p791 VALUES IN (3164,3165,3166,3167), +PARTITION p792 VALUES IN (3168,3169,3170,3171), +PARTITION p793 VALUES IN (3172,3173,3174,3175), +PARTITION p794 VALUES IN (3176,3177,3178,3179), +PARTITION p795 VALUES IN (3180,3181,3182,3183), +PARTITION p796 VALUES IN (3184,3185,3186,3187), +PARTITION p797 VALUES IN (3188,3189,3190,3191), +PARTITION p798 VALUES IN (3192,3193,3194,3195), +PARTITION p799 VALUES IN (3196,3197,3198,3199), +PARTITION p800 VALUES IN (3200,3201,3202,3203), +PARTITION p801 VALUES IN (3204,3205,3206,3207), +PARTITION p802 VALUES IN (3208,3209,3210,3211), +PARTITION p803 VALUES IN (3212,3213,3214,3215), +PARTITION p804 VALUES IN (3216,3217,3218,3219), +PARTITION p805 VALUES IN (3220,3221,3222,3223), +PARTITION p806 VALUES IN (3224,3225,3226,3227), +PARTITION p807 VALUES IN (3228,3229,3230,3231), +PARTITION p808 VALUES IN (3232,3233,3234,3235), +PARTITION p809 VALUES IN (3236,3237,3238,3239), +PARTITION p810 VALUES IN (3240,3241,3242,3243), +PARTITION p811 VALUES IN (3244,3245,3246,3247), +PARTITION p812 VALUES IN (3248,3249,3250,3251), +PARTITION p813 VALUES IN (3252,3253,3254,3255), +PARTITION p814 VALUES IN (3256,3257,3258,3259), +PARTITION p815 VALUES IN (3260,3261,3262,3263), +PARTITION p816 VALUES IN (3264,3265,3266,3267), +PARTITION p817 VALUES IN (3268,3269,3270,3271), +PARTITION p818 VALUES IN (3272,3273,3274,3275), +PARTITION p819 VALUES IN (3276,3277,3278,3279), +PARTITION p820 VALUES IN (3280,3281,3282,3283), +PARTITION p821 VALUES IN (3284,3285,3286,3287), +PARTITION p822 VALUES IN (3288,3289,3290,3291), +PARTITION p823 VALUES IN (3292,3293,3294,3295), +PARTITION p824 VALUES IN (3296,3297,3298,3299), +PARTITION p825 VALUES IN (3300,3301,3302,3303), +PARTITION p826 VALUES IN (3304,3305,3306,3307), +PARTITION p827 VALUES IN (3308,3309,3310,3311), +PARTITION p828 VALUES IN (3312,3313,3314,3315), +PARTITION p829 VALUES IN (3316,3317,3318,3319), +PARTITION p830 VALUES IN (3320,3321,3322,3323), +PARTITION p831 VALUES IN (3324,3325,3326,3327), +PARTITION p832 VALUES IN (3328,3329,3330,3331), +PARTITION p833 VALUES IN (3332,3333,3334,3335), +PARTITION p834 VALUES IN (3336,3337,3338,3339), +PARTITION p835 VALUES IN (3340,3341,3342,3343), +PARTITION p836 VALUES IN (3344,3345,3346,3347), +PARTITION p837 VALUES IN (3348,3349,3350,3351), +PARTITION p838 VALUES IN (3352,3353,3354,3355), +PARTITION p839 VALUES IN (3356,3357,3358,3359), +PARTITION p840 VALUES IN (3360,3361,3362,3363), +PARTITION p841 VALUES IN (3364,3365,3366,3367), +PARTITION p842 VALUES IN (3368,3369,3370,3371), +PARTITION p843 VALUES IN (3372,3373,3374,3375), +PARTITION p844 VALUES IN (3376,3377,3378,3379), +PARTITION p845 VALUES IN (3380,3381,3382,3383), +PARTITION p846 VALUES IN (3384,3385,3386,3387), +PARTITION p847 VALUES IN (3388,3389,3390,3391), +PARTITION p848 VALUES IN (3392,3393,3394,3395), +PARTITION p849 VALUES IN (3396,3397,3398,3399), +PARTITION p850 VALUES IN (3400,3401,3402,3403), +PARTITION p851 VALUES IN (3404,3405,3406,3407), +PARTITION p852 VALUES IN (3408,3409,3410,3411), +PARTITION p853 VALUES IN (3412,3413,3414,3415), +PARTITION p854 VALUES IN (3416,3417,3418,3419), +PARTITION p855 VALUES IN (3420,3421,3422,3423), +PARTITION p856 VALUES IN (3424,3425,3426,3427), +PARTITION p857 VALUES IN (3428,3429,3430,3431), +PARTITION p858 VALUES IN (3432,3433,3434,3435), +PARTITION p859 VALUES IN (3436,3437,3438,3439), +PARTITION p860 VALUES IN (3440,3441,3442,3443), +PARTITION p861 VALUES IN (3444,3445,3446,3447), +PARTITION p862 VALUES IN (3448,3449,3450,3451), +PARTITION p863 VALUES IN (3452,3453,3454,3455), +PARTITION p864 VALUES IN (3456,3457,3458,3459), +PARTITION p865 VALUES IN (3460,3461,3462,3463), +PARTITION p866 VALUES IN (3464,3465,3466,3467), +PARTITION p867 VALUES IN (3468,3469,3470,3471), +PARTITION p868 VALUES IN (3472,3473,3474,3475), +PARTITION p869 VALUES IN (3476,3477,3478,3479), +PARTITION p870 VALUES IN (3480,3481,3482,3483), +PARTITION p871 VALUES IN (3484,3485,3486,3487), +PARTITION p872 VALUES IN (3488,3489,3490,3491), +PARTITION p873 VALUES IN (3492,3493,3494,3495), +PARTITION p874 VALUES IN (3496,3497,3498,3499), +PARTITION p875 VALUES IN (3500,3501,3502,3503), +PARTITION p876 VALUES IN (3504,3505,3506,3507), +PARTITION p877 VALUES IN (3508,3509,3510,3511), +PARTITION p878 VALUES IN (3512,3513,3514,3515), +PARTITION p879 VALUES IN (3516,3517,3518,3519), +PARTITION p880 VALUES IN (3520,3521,3522,3523), +PARTITION p881 VALUES IN (3524,3525,3526,3527), +PARTITION p882 VALUES IN (3528,3529,3530,3531), +PARTITION p883 VALUES IN (3532,3533,3534,3535), +PARTITION p884 VALUES IN (3536,3537,3538,3539), +PARTITION p885 VALUES IN (3540,3541,3542,3543), +PARTITION p886 VALUES IN (3544,3545,3546,3547), +PARTITION p887 VALUES IN (3548,3549,3550,3551), +PARTITION p888 VALUES IN (3552,3553,3554,3555), +PARTITION p889 VALUES IN (3556,3557,3558,3559), +PARTITION p890 VALUES IN (3560,3561,3562,3563), +PARTITION p891 VALUES IN (3564,3565,3566,3567), +PARTITION p892 VALUES IN (3568,3569,3570,3571), +PARTITION p893 VALUES IN (3572,3573,3574,3575), +PARTITION p894 VALUES IN (3576,3577,3578,3579), +PARTITION p895 VALUES IN (3580,3581,3582,3583), +PARTITION p896 VALUES IN (3584,3585,3586,3587), +PARTITION p897 VALUES IN (3588,3589,3590,3591), +PARTITION p898 VALUES IN (3592,3593,3594,3595), +PARTITION p899 VALUES IN (3596,3597,3598,3599), +PARTITION p900 VALUES IN (3600,3601,3602,3603), +PARTITION p901 VALUES IN (3604,3605,3606,3607), +PARTITION p902 VALUES IN (3608,3609,3610,3611), +PARTITION p903 VALUES IN (3612,3613,3614,3615), +PARTITION p904 VALUES IN (3616,3617,3618,3619), +PARTITION p905 VALUES IN (3620,3621,3622,3623), +PARTITION p906 VALUES IN (3624,3625,3626,3627), +PARTITION p907 VALUES IN (3628,3629,3630,3631), +PARTITION p908 VALUES IN (3632,3633,3634,3635), +PARTITION p909 VALUES IN (3636,3637,3638,3639), +PARTITION p910 VALUES IN (3640,3641,3642,3643), +PARTITION p911 VALUES IN (3644,3645,3646,3647), +PARTITION p912 VALUES IN (3648,3649,3650,3651), +PARTITION p913 VALUES IN (3652,3653,3654,3655), +PARTITION p914 VALUES IN (3656,3657,3658,3659), +PARTITION p915 VALUES IN (3660,3661,3662,3663), +PARTITION p916 VALUES IN (3664,3665,3666,3667), +PARTITION p917 VALUES IN (3668,3669,3670,3671), +PARTITION p918 VALUES IN (3672,3673,3674,3675), +PARTITION p919 VALUES IN (3676,3677,3678,3679), +PARTITION p920 VALUES IN (3680,3681,3682,3683), +PARTITION p921 VALUES IN (3684,3685,3686,3687), +PARTITION p922 VALUES IN (3688,3689,3690,3691), +PARTITION p923 VALUES IN (3692,3693,3694,3695), +PARTITION p924 VALUES IN (3696,3697,3698,3699), +PARTITION p925 VALUES IN (3700,3701,3702,3703), +PARTITION p926 VALUES IN (3704,3705,3706,3707), +PARTITION p927 VALUES IN (3708,3709,3710,3711), +PARTITION p928 VALUES IN (3712,3713,3714,3715), +PARTITION p929 VALUES IN (3716,3717,3718,3719), +PARTITION p930 VALUES IN (3720,3721,3722,3723), +PARTITION p931 VALUES IN (3724,3725,3726,3727), +PARTITION p932 VALUES IN (3728,3729,3730,3731), +PARTITION p933 VALUES IN (3732,3733,3734,3735), +PARTITION p934 VALUES IN (3736,3737,3738,3739), +PARTITION p935 VALUES IN (3740,3741,3742,3743), +PARTITION p936 VALUES IN (3744,3745,3746,3747), +PARTITION p937 VALUES IN (3748,3749,3750,3751), +PARTITION p938 VALUES IN (3752,3753,3754,3755), +PARTITION p939 VALUES IN (3756,3757,3758,3759), +PARTITION p940 VALUES IN (3760,3761,3762,3763), +PARTITION p941 VALUES IN (3764,3765,3766,3767), +PARTITION p942 VALUES IN (3768,3769,3770,3771), +PARTITION p943 VALUES IN (3772,3773,3774,3775), +PARTITION p944 VALUES IN (3776,3777,3778,3779), +PARTITION p945 VALUES IN (3780,3781,3782,3783), +PARTITION p946 VALUES IN (3784,3785,3786,3787), +PARTITION p947 VALUES IN (3788,3789,3790,3791), +PARTITION p948 VALUES IN (3792,3793,3794,3795), +PARTITION p949 VALUES IN (3796,3797,3798,3799), +PARTITION p950 VALUES IN (3800,3801,3802,3803), +PARTITION p951 VALUES IN (3804,3805,3806,3807), +PARTITION p952 VALUES IN (3808,3809,3810,3811), +PARTITION p953 VALUES IN (3812,3813,3814,3815), +PARTITION p954 VALUES IN (3816,3817,3818,3819), +PARTITION p955 VALUES IN (3820,3821,3822,3823), +PARTITION p956 VALUES IN (3824,3825,3826,3827), +PARTITION p957 VALUES IN (3828,3829,3830,3831), +PARTITION p958 VALUES IN (3832,3833,3834,3835), +PARTITION p959 VALUES IN (3836,3837,3838,3839), +PARTITION p960 VALUES IN (3840,3841,3842,3843), +PARTITION p961 VALUES IN (3844,3845,3846,3847), +PARTITION p962 VALUES IN (3848,3849,3850,3851), +PARTITION p963 VALUES IN (3852,3853,3854,3855), +PARTITION p964 VALUES IN (3856,3857,3858,3859), +PARTITION p965 VALUES IN (3860,3861,3862,3863), +PARTITION p966 VALUES IN (3864,3865,3866,3867), +PARTITION p967 VALUES IN (3868,3869,3870,3871), +PARTITION p968 VALUES IN (3872,3873,3874,3875), +PARTITION p969 VALUES IN (3876,3877,3878,3879), +PARTITION p970 VALUES IN (3880,3881,3882,3883), +PARTITION p971 VALUES IN (3884,3885,3886,3887), +PARTITION p972 VALUES IN (3888,3889,3890,3891), +PARTITION p973 VALUES IN (3892,3893,3894,3895), +PARTITION p974 VALUES IN (3896,3897,3898,3899), +PARTITION p975 VALUES IN (3900,3901,3902,3903), +PARTITION p976 VALUES IN (3904,3905,3906,3907), +PARTITION p977 VALUES IN (3908,3909,3910,3911), +PARTITION p978 VALUES IN (3912,3913,3914,3915), +PARTITION p979 VALUES IN (3916,3917,3918,3919), +PARTITION p980 VALUES IN (3920,3921,3922,3923), +PARTITION p981 VALUES IN (3924,3925,3926,3927), +PARTITION p982 VALUES IN (3928,3929,3930,3931), +PARTITION p983 VALUES IN (3932,3933,3934,3935), +PARTITION p984 VALUES IN (3936,3937,3938,3939), +PARTITION p985 VALUES IN (3940,3941,3942,3943), +PARTITION p986 VALUES IN (3944,3945,3946,3947), +PARTITION p987 VALUES IN (3948,3949,3950,3951), +PARTITION p988 VALUES IN (3952,3953,3954,3955), +PARTITION p989 VALUES IN (3956,3957,3958,3959), +PARTITION p990 VALUES IN (3960,3961,3962,3963), +PARTITION p991 VALUES IN (3964,3965,3966,3967), +PARTITION p992 VALUES IN (3968,3969,3970,3971), +PARTITION p993 VALUES IN (3972,3973,3974,3975), +PARTITION p994 VALUES IN (3976,3977,3978,3979), +PARTITION p995 VALUES IN (3980,3981,3982,3983), +PARTITION p996 VALUES IN (3984,3985,3986,3987), +PARTITION p997 VALUES IN (3988,3989,3990,3991), +PARTITION p998 VALUES IN (3992,3993,3994,3995), +PARTITION p999 VALUES IN (3996,3997,3998,3999), +PARTITION p1000 VALUES IN (4000,4001,4002,4003), +PARTITION p1001 VALUES IN (4004,4005,4006,4007), +PARTITION p1002 VALUES IN (4008,4009,4010,4011), +PARTITION p1003 VALUES IN (4012,4013,4014,4015), +PARTITION p1004 VALUES IN (4016,4017,4018,4019), +PARTITION p1005 VALUES IN (4020,4021,4022,4023), +PARTITION p1006 VALUES IN (4024,4025,4026,4027), +PARTITION p1007 VALUES IN (4028,4029,4030,4031), +PARTITION p1008 VALUES IN (4032,4033,4034,4035), +PARTITION p1009 VALUES IN (4036,4037,4038,4039), +PARTITION p1010 VALUES IN (4040,4041,4042,4043), +PARTITION p1011 VALUES IN (4044,4045,4046,4047), +PARTITION p1012 VALUES IN (4048,4049,4050,4051), +PARTITION p1013 VALUES IN (4052,4053,4054,4055), +PARTITION p1014 VALUES IN (4056,4057,4058,4059), +PARTITION p1015 VALUES IN (4060,4061,4062,4063), +PARTITION p1016 VALUES IN (4064,4065,4066,4067), +PARTITION p1017 VALUES IN (4068,4069,4070,4071), +PARTITION p1018 VALUES IN (4072,4073,4074,4075), +PARTITION p1019 VALUES IN (4076,4077,4078,4079), +PARTITION p1020 VALUES IN (4080,4081,4082,4083), +PARTITION p1021 VALUES IN (4084,4085,4086,4087), +PARTITION p1022 VALUES IN (4088,4089,4090,4091), +PARTITION p1023 VALUES IN (4092,4093,4094,4095), +PARTITION p1024 VALUES IN (4096,4097,4098,4099), +PARTITION p1025 VALUES IN (4100,4101,4102,4103), +PARTITION p1026 VALUES IN (4104,4105,4106,4107), +PARTITION p1027 VALUES IN (4108,4109,4110,4111), +PARTITION p1028 VALUES IN (4112,4113,4114,4115), +PARTITION p1029 VALUES IN (4116,4117,4118,4119), +PARTITION p1030 VALUES IN (4120,4121,4122,4123), +PARTITION p1031 VALUES IN (4124,4125,4126,4127), +PARTITION p1032 VALUES IN (4128,4129,4130,4131), +PARTITION p1033 VALUES IN (4132,4133,4134,4135), +PARTITION p1034 VALUES IN (4136,4137,4138,4139), +PARTITION p1035 VALUES IN (4140,4141,4142,4143), +PARTITION p1036 VALUES IN (4144,4145,4146,4147), +PARTITION p1037 VALUES IN (4148,4149,4150,4151), +PARTITION p1038 VALUES IN (4152,4153,4154,4155), +PARTITION p1039 VALUES IN (4156,4157,4158,4159), +PARTITION p1040 VALUES IN (4160,4161,4162,4163), +PARTITION p1041 VALUES IN (4164,4165,4166,4167), +PARTITION p1042 VALUES IN (4168,4169,4170,4171), +PARTITION p1043 VALUES IN (4172,4173,4174,4175), +PARTITION p1044 VALUES IN (4176,4177,4178,4179), +PARTITION p1045 VALUES IN (4180,4181,4182,4183), +PARTITION p1046 VALUES IN (4184,4185,4186,4187), +PARTITION p1047 VALUES IN (4188,4189,4190,4191), +PARTITION p1048 VALUES IN (4192,4193,4194,4195), +PARTITION p1049 VALUES IN (4196,4197,4198,4199), +PARTITION p1050 VALUES IN (4200,4201,4202,4203), +PARTITION p1051 VALUES IN (4204,4205,4206,4207), +PARTITION p1052 VALUES IN (4208,4209,4210,4211), +PARTITION p1053 VALUES IN (4212,4213,4214,4215), +PARTITION p1054 VALUES IN (4216,4217,4218,4219), +PARTITION p1055 VALUES IN (4220,4221,4222,4223), +PARTITION p1056 VALUES IN (4224,4225,4226,4227), +PARTITION p1057 VALUES IN (4228,4229,4230,4231), +PARTITION p1058 VALUES IN (4232,4233,4234,4235), +PARTITION p1059 VALUES IN (4236,4237,4238,4239), +PARTITION p1060 VALUES IN (4240,4241,4242,4243), +PARTITION p1061 VALUES IN (4244,4245,4246,4247), +PARTITION p1062 VALUES IN (4248,4249,4250,4251), +PARTITION p1063 VALUES IN (4252,4253,4254,4255), +PARTITION p1064 VALUES IN (4256,4257,4258,4259), +PARTITION p1065 VALUES IN (4260,4261,4262,4263), +PARTITION p1066 VALUES IN (4264,4265,4266,4267), +PARTITION p1067 VALUES IN (4268,4269,4270,4271), +PARTITION p1068 VALUES IN (4272,4273,4274,4275), +PARTITION p1069 VALUES IN (4276,4277,4278,4279), +PARTITION p1070 VALUES IN (4280,4281,4282,4283), +PARTITION p1071 VALUES IN (4284,4285,4286,4287), +PARTITION p1072 VALUES IN (4288,4289,4290,4291), +PARTITION p1073 VALUES IN (4292,4293,4294,4295), +PARTITION p1074 VALUES IN (4296,4297,4298,4299), +PARTITION p1075 VALUES IN (4300,4301,4302,4303), +PARTITION p1076 VALUES IN (4304,4305,4306,4307), +PARTITION p1077 VALUES IN (4308,4309,4310,4311), +PARTITION p1078 VALUES IN (4312,4313,4314,4315), +PARTITION p1079 VALUES IN (4316,4317,4318,4319), +PARTITION p1080 VALUES IN (4320,4321,4322,4323), +PARTITION p1081 VALUES IN (4324,4325,4326,4327), +PARTITION p1082 VALUES IN (4328,4329,4330,4331), +PARTITION p1083 VALUES IN (4332,4333,4334,4335), +PARTITION p1084 VALUES IN (4336,4337,4338,4339), +PARTITION p1085 VALUES IN (4340,4341,4342,4343), +PARTITION p1086 VALUES IN (4344,4345,4346,4347), +PARTITION p1087 VALUES IN (4348,4349,4350,4351), +PARTITION p1088 VALUES IN (4352,4353,4354,4355), +PARTITION p1089 VALUES IN (4356,4357,4358,4359), +PARTITION p1090 VALUES IN (4360,4361,4362,4363), +PARTITION p1091 VALUES IN (4364,4365,4366,4367), +PARTITION p1092 VALUES IN (4368,4369,4370,4371), +PARTITION p1093 VALUES IN (4372,4373,4374,4375), +PARTITION p1094 VALUES IN (4376,4377,4378,4379), +PARTITION p1095 VALUES IN (4380,4381,4382,4383), +PARTITION p1096 VALUES IN (4384,4385,4386,4387), +PARTITION p1097 VALUES IN (4388,4389,4390,4391), +PARTITION p1098 VALUES IN (4392,4393,4394,4395), +PARTITION p1099 VALUES IN (4396,4397,4398,4399), +PARTITION p1100 VALUES IN (4400,4401,4402,4403), +PARTITION p1101 VALUES IN (4404,4405,4406,4407), +PARTITION p1102 VALUES IN (4408,4409,4410,4411), +PARTITION p1103 VALUES IN (4412,4413,4414,4415), +PARTITION p1104 VALUES IN (4416,4417,4418,4419), +PARTITION p1105 VALUES IN (4420,4421,4422,4423), +PARTITION p1106 VALUES IN (4424,4425,4426,4427), +PARTITION p1107 VALUES IN (4428,4429,4430,4431), +PARTITION p1108 VALUES IN (4432,4433,4434,4435), +PARTITION p1109 VALUES IN (4436,4437,4438,4439), +PARTITION p1110 VALUES IN (4440,4441,4442,4443), +PARTITION p1111 VALUES IN (4444,4445,4446,4447), +PARTITION p1112 VALUES IN (4448,4449,4450,4451), +PARTITION p1113 VALUES IN (4452,4453,4454,4455), +PARTITION p1114 VALUES IN (4456,4457,4458,4459), +PARTITION p1115 VALUES IN (4460,4461,4462,4463), +PARTITION p1116 VALUES IN (4464,4465,4466,4467), +PARTITION p1117 VALUES IN (4468,4469,4470,4471), +PARTITION p1118 VALUES IN (4472,4473,4474,4475), +PARTITION p1119 VALUES IN (4476,4477,4478,4479), +PARTITION p1120 VALUES IN (4480,4481,4482,4483), +PARTITION p1121 VALUES IN (4484,4485,4486,4487), +PARTITION p1122 VALUES IN (4488,4489,4490,4491), +PARTITION p1123 VALUES IN (4492,4493,4494,4495), +PARTITION p1124 VALUES IN (4496,4497,4498,4499), +PARTITION p1125 VALUES IN (4500,4501,4502,4503), +PARTITION p1126 VALUES IN (4504,4505,4506,4507), +PARTITION p1127 VALUES IN (4508,4509,4510,4511), +PARTITION p1128 VALUES IN (4512,4513,4514,4515), +PARTITION p1129 VALUES IN (4516,4517,4518,4519), +PARTITION p1130 VALUES IN (4520,4521,4522,4523), +PARTITION p1131 VALUES IN (4524,4525,4526,4527), +PARTITION p1132 VALUES IN (4528,4529,4530,4531), +PARTITION p1133 VALUES IN (4532,4533,4534,4535), +PARTITION p1134 VALUES IN (4536,4537,4538,4539), +PARTITION p1135 VALUES IN (4540,4541,4542,4543), +PARTITION p1136 VALUES IN (4544,4545,4546,4547), +PARTITION p1137 VALUES IN (4548,4549,4550,4551), +PARTITION p1138 VALUES IN (4552,4553,4554,4555), +PARTITION p1139 VALUES IN (4556,4557,4558,4559), +PARTITION p1140 VALUES IN (4560,4561,4562,4563), +PARTITION p1141 VALUES IN (4564,4565,4566,4567), +PARTITION p1142 VALUES IN (4568,4569,4570,4571), +PARTITION p1143 VALUES IN (4572,4573,4574,4575), +PARTITION p1144 VALUES IN (4576,4577,4578,4579), +PARTITION p1145 VALUES IN (4580,4581,4582,4583), +PARTITION p1146 VALUES IN (4584,4585,4586,4587), +PARTITION p1147 VALUES IN (4588,4589,4590,4591), +PARTITION p1148 VALUES IN (4592,4593,4594,4595), +PARTITION p1149 VALUES IN (4596,4597,4598,4599), +PARTITION p1150 VALUES IN (4600,4601,4602,4603), +PARTITION p1151 VALUES IN (4604,4605,4606,4607), +PARTITION p1152 VALUES IN (4608,4609,4610,4611), +PARTITION p1153 VALUES IN (4612,4613,4614,4615), +PARTITION p1154 VALUES IN (4616,4617,4618,4619), +PARTITION p1155 VALUES IN (4620,4621,4622,4623), +PARTITION p1156 VALUES IN (4624,4625,4626,4627), +PARTITION p1157 VALUES IN (4628,4629,4630,4631), +PARTITION p1158 VALUES IN (4632,4633,4634,4635), +PARTITION p1159 VALUES IN (4636,4637,4638,4639), +PARTITION p1160 VALUES IN (4640,4641,4642,4643), +PARTITION p1161 VALUES IN (4644,4645,4646,4647), +PARTITION p1162 VALUES IN (4648,4649,4650,4651), +PARTITION p1163 VALUES IN (4652,4653,4654,4655), +PARTITION p1164 VALUES IN (4656,4657,4658,4659), +PARTITION p1165 VALUES IN (4660,4661,4662,4663), +PARTITION p1166 VALUES IN (4664,4665,4666,4667), +PARTITION p1167 VALUES IN (4668,4669,4670,4671), +PARTITION p1168 VALUES IN (4672,4673,4674,4675), +PARTITION p1169 VALUES IN (4676,4677,4678,4679), +PARTITION p1170 VALUES IN (4680,4681,4682,4683), +PARTITION p1171 VALUES IN (4684,4685,4686,4687), +PARTITION p1172 VALUES IN (4688,4689,4690,4691), +PARTITION p1173 VALUES IN (4692,4693,4694,4695), +PARTITION p1174 VALUES IN (4696,4697,4698,4699), +PARTITION p1175 VALUES IN (4700,4701,4702,4703), +PARTITION p1176 VALUES IN (4704,4705,4706,4707), +PARTITION p1177 VALUES IN (4708,4709,4710,4711), +PARTITION p1178 VALUES IN (4712,4713,4714,4715), +PARTITION p1179 VALUES IN (4716,4717,4718,4719), +PARTITION p1180 VALUES IN (4720,4721,4722,4723), +PARTITION p1181 VALUES IN (4724,4725,4726,4727), +PARTITION p1182 VALUES IN (4728,4729,4730,4731), +PARTITION p1183 VALUES IN (4732,4733,4734,4735), +PARTITION p1184 VALUES IN (4736,4737,4738,4739), +PARTITION p1185 VALUES IN (4740,4741,4742,4743), +PARTITION p1186 VALUES IN (4744,4745,4746,4747), +PARTITION p1187 VALUES IN (4748,4749,4750,4751), +PARTITION p1188 VALUES IN (4752,4753,4754,4755), +PARTITION p1189 VALUES IN (4756,4757,4758,4759), +PARTITION p1190 VALUES IN (4760,4761,4762,4763), +PARTITION p1191 VALUES IN (4764,4765,4766,4767), +PARTITION p1192 VALUES IN (4768,4769,4770,4771), +PARTITION p1193 VALUES IN (4772,4773,4774,4775), +PARTITION p1194 VALUES IN (4776,4777,4778,4779), +PARTITION p1195 VALUES IN (4780,4781,4782,4783), +PARTITION p1196 VALUES IN (4784,4785,4786,4787), +PARTITION p1197 VALUES IN (4788,4789,4790,4791), +PARTITION p1198 VALUES IN (4792,4793,4794,4795), +PARTITION p1199 VALUES IN (4796,4797,4798,4799), +PARTITION p1200 VALUES IN (4800,4801,4802,4803), +PARTITION p1201 VALUES IN (4804,4805,4806,4807), +PARTITION p1202 VALUES IN (4808,4809,4810,4811), +PARTITION p1203 VALUES IN (4812,4813,4814,4815), +PARTITION p1204 VALUES IN (4816,4817,4818,4819), +PARTITION p1205 VALUES IN (4820,4821,4822,4823), +PARTITION p1206 VALUES IN (4824,4825,4826,4827), +PARTITION p1207 VALUES IN (4828,4829,4830,4831), +PARTITION p1208 VALUES IN (4832,4833,4834,4835), +PARTITION p1209 VALUES IN (4836,4837,4838,4839), +PARTITION p1210 VALUES IN (4840,4841,4842,4843), +PARTITION p1211 VALUES IN (4844,4845,4846,4847), +PARTITION p1212 VALUES IN (4848,4849,4850,4851), +PARTITION p1213 VALUES IN (4852,4853,4854,4855), +PARTITION p1214 VALUES IN (4856,4857,4858,4859), +PARTITION p1215 VALUES IN (4860,4861,4862,4863), +PARTITION p1216 VALUES IN (4864,4865,4866,4867), +PARTITION p1217 VALUES IN (4868,4869,4870,4871), +PARTITION p1218 VALUES IN (4872,4873,4874,4875), +PARTITION p1219 VALUES IN (4876,4877,4878,4879), +PARTITION p1220 VALUES IN (4880,4881,4882,4883), +PARTITION p1221 VALUES IN (4884,4885,4886,4887), +PARTITION p1222 VALUES IN (4888,4889,4890,4891), +PARTITION p1223 VALUES IN (4892,4893,4894,4895), +PARTITION p1224 VALUES IN (4896,4897,4898,4899), +PARTITION p1225 VALUES IN (4900,4901,4902,4903), +PARTITION p1226 VALUES IN (4904,4905,4906,4907), +PARTITION p1227 VALUES IN (4908,4909,4910,4911), +PARTITION p1228 VALUES IN (4912,4913,4914,4915), +PARTITION p1229 VALUES IN (4916,4917,4918,4919), +PARTITION p1230 VALUES IN (4920,4921,4922,4923), +PARTITION p1231 VALUES IN (4924,4925,4926,4927), +PARTITION p1232 VALUES IN (4928,4929,4930,4931), +PARTITION p1233 VALUES IN (4932,4933,4934,4935), +PARTITION p1234 VALUES IN (4936,4937,4938,4939), +PARTITION p1235 VALUES IN (4940,4941,4942,4943), +PARTITION p1236 VALUES IN (4944,4945,4946,4947), +PARTITION p1237 VALUES IN (4948,4949,4950,4951), +PARTITION p1238 VALUES IN (4952,4953,4954,4955), +PARTITION p1239 VALUES IN (4956,4957,4958,4959), +PARTITION p1240 VALUES IN (4960,4961,4962,4963), +PARTITION p1241 VALUES IN (4964,4965,4966,4967), +PARTITION p1242 VALUES IN (4968,4969,4970,4971), +PARTITION p1243 VALUES IN (4972,4973,4974,4975), +PARTITION p1244 VALUES IN (4976,4977,4978,4979), +PARTITION p1245 VALUES IN (4980,4981,4982,4983), +PARTITION p1246 VALUES IN (4984,4985,4986,4987), +PARTITION p1247 VALUES IN (4988,4989,4990,4991), +PARTITION p1248 VALUES IN (4992,4993,4994,4995), +PARTITION p1249 VALUES IN (4996,4997,4998,4999), +PARTITION p1250 VALUES IN (5000,5001,5002,5003), +PARTITION p1251 VALUES IN (5004,5005,5006,5007), +PARTITION p1252 VALUES IN (5008,5009,5010,5011), +PARTITION p1253 VALUES IN (5012,5013,5014,5015), +PARTITION p1254 VALUES IN (5016,5017,5018,5019), +PARTITION p1255 VALUES IN (5020,5021,5022,5023), +PARTITION p1256 VALUES IN (5024,5025,5026,5027), +PARTITION p1257 VALUES IN (5028,5029,5030,5031), +PARTITION p1258 VALUES IN (5032,5033,5034,5035), +PARTITION p1259 VALUES IN (5036,5037,5038,5039), +PARTITION p1260 VALUES IN (5040,5041,5042,5043), +PARTITION p1261 VALUES IN (5044,5045,5046,5047), +PARTITION p1262 VALUES IN (5048,5049,5050,5051), +PARTITION p1263 VALUES IN (5052,5053,5054,5055), +PARTITION p1264 VALUES IN (5056,5057,5058,5059), +PARTITION p1265 VALUES IN (5060,5061,5062,5063), +PARTITION p1266 VALUES IN (5064,5065,5066,5067), +PARTITION p1267 VALUES IN (5068,5069,5070,5071), +PARTITION p1268 VALUES IN (5072,5073,5074,5075), +PARTITION p1269 VALUES IN (5076,5077,5078,5079), +PARTITION p1270 VALUES IN (5080,5081,5082,5083), +PARTITION p1271 VALUES IN (5084,5085,5086,5087), +PARTITION p1272 VALUES IN (5088,5089,5090,5091), +PARTITION p1273 VALUES IN (5092,5093,5094,5095), +PARTITION p1274 VALUES IN (5096,5097,5098,5099), +PARTITION p1275 VALUES IN (5100,5101,5102,5103), +PARTITION p1276 VALUES IN (5104,5105,5106,5107), +PARTITION p1277 VALUES IN (5108,5109,5110,5111), +PARTITION p1278 VALUES IN (5112,5113,5114,5115), +PARTITION p1279 VALUES IN (5116,5117,5118,5119), +PARTITION p1280 VALUES IN (5120,5121,5122,5123), +PARTITION p1281 VALUES IN (5124,5125,5126,5127), +PARTITION p1282 VALUES IN (5128,5129,5130,5131), +PARTITION p1283 VALUES IN (5132,5133,5134,5135), +PARTITION p1284 VALUES IN (5136,5137,5138,5139), +PARTITION p1285 VALUES IN (5140,5141,5142,5143), +PARTITION p1286 VALUES IN (5144,5145,5146,5147), +PARTITION p1287 VALUES IN (5148,5149,5150,5151), +PARTITION p1288 VALUES IN (5152,5153,5154,5155), +PARTITION p1289 VALUES IN (5156,5157,5158,5159), +PARTITION p1290 VALUES IN (5160,5161,5162,5163), +PARTITION p1291 VALUES IN (5164,5165,5166,5167), +PARTITION p1292 VALUES IN (5168,5169,5170,5171), +PARTITION p1293 VALUES IN (5172,5173,5174,5175), +PARTITION p1294 VALUES IN (5176,5177,5178,5179), +PARTITION p1295 VALUES IN (5180,5181,5182,5183), +PARTITION p1296 VALUES IN (5184,5185,5186,5187), +PARTITION p1297 VALUES IN (5188,5189,5190,5191), +PARTITION p1298 VALUES IN (5192,5193,5194,5195), +PARTITION p1299 VALUES IN (5196,5197,5198,5199), +PARTITION p1300 VALUES IN (5200,5201,5202,5203), +PARTITION p1301 VALUES IN (5204,5205,5206,5207), +PARTITION p1302 VALUES IN (5208,5209,5210,5211), +PARTITION p1303 VALUES IN (5212,5213,5214,5215), +PARTITION p1304 VALUES IN (5216,5217,5218,5219), +PARTITION p1305 VALUES IN (5220,5221,5222,5223), +PARTITION p1306 VALUES IN (5224,5225,5226,5227), +PARTITION p1307 VALUES IN (5228,5229,5230,5231), +PARTITION p1308 VALUES IN (5232,5233,5234,5235), +PARTITION p1309 VALUES IN (5236,5237,5238,5239), +PARTITION p1310 VALUES IN (5240,5241,5242,5243), +PARTITION p1311 VALUES IN (5244,5245,5246,5247), +PARTITION p1312 VALUES IN (5248,5249,5250,5251), +PARTITION p1313 VALUES IN (5252,5253,5254,5255), +PARTITION p1314 VALUES IN (5256,5257,5258,5259), +PARTITION p1315 VALUES IN (5260,5261,5262,5263), +PARTITION p1316 VALUES IN (5264,5265,5266,5267), +PARTITION p1317 VALUES IN (5268,5269,5270,5271), +PARTITION p1318 VALUES IN (5272,5273,5274,5275), +PARTITION p1319 VALUES IN (5276,5277,5278,5279), +PARTITION p1320 VALUES IN (5280,5281,5282,5283), +PARTITION p1321 VALUES IN (5284,5285,5286,5287), +PARTITION p1322 VALUES IN (5288,5289,5290,5291), +PARTITION p1323 VALUES IN (5292,5293,5294,5295), +PARTITION p1324 VALUES IN (5296,5297,5298,5299), +PARTITION p1325 VALUES IN (5300,5301,5302,5303), +PARTITION p1326 VALUES IN (5304,5305,5306,5307), +PARTITION p1327 VALUES IN (5308,5309,5310,5311), +PARTITION p1328 VALUES IN (5312,5313,5314,5315), +PARTITION p1329 VALUES IN (5316,5317,5318,5319), +PARTITION p1330 VALUES IN (5320,5321,5322,5323), +PARTITION p1331 VALUES IN (5324,5325,5326,5327), +PARTITION p1332 VALUES IN (5328,5329,5330,5331), +PARTITION p1333 VALUES IN (5332,5333,5334,5335), +PARTITION p1334 VALUES IN (5336,5337,5338,5339), +PARTITION p1335 VALUES IN (5340,5341,5342,5343), +PARTITION p1336 VALUES IN (5344,5345,5346,5347), +PARTITION p1337 VALUES IN (5348,5349,5350,5351), +PARTITION p1338 VALUES IN (5352,5353,5354,5355), +PARTITION p1339 VALUES IN (5356,5357,5358,5359), +PARTITION p1340 VALUES IN (5360,5361,5362,5363), +PARTITION p1341 VALUES IN (5364,5365,5366,5367), +PARTITION p1342 VALUES IN (5368,5369,5370,5371), +PARTITION p1343 VALUES IN (5372,5373,5374,5375), +PARTITION p1344 VALUES IN (5376,5377,5378,5379), +PARTITION p1345 VALUES IN (5380,5381,5382,5383), +PARTITION p1346 VALUES IN (5384,5385,5386,5387), +PARTITION p1347 VALUES IN (5388,5389,5390,5391), +PARTITION p1348 VALUES IN (5392,5393,5394,5395), +PARTITION p1349 VALUES IN (5396,5397,5398,5399), +PARTITION p1350 VALUES IN (5400,5401,5402,5403), +PARTITION p1351 VALUES IN (5404,5405,5406,5407), +PARTITION p1352 VALUES IN (5408,5409,5410,5411), +PARTITION p1353 VALUES IN (5412,5413,5414,5415), +PARTITION p1354 VALUES IN (5416,5417,5418,5419), +PARTITION p1355 VALUES IN (5420,5421,5422,5423), +PARTITION p1356 VALUES IN (5424,5425,5426,5427), +PARTITION p1357 VALUES IN (5428,5429,5430,5431), +PARTITION p1358 VALUES IN (5432,5433,5434,5435), +PARTITION p1359 VALUES IN (5436,5437,5438,5439), +PARTITION p1360 VALUES IN (5440,5441,5442,5443), +PARTITION p1361 VALUES IN (5444,5445,5446,5447), +PARTITION p1362 VALUES IN (5448,5449,5450,5451), +PARTITION p1363 VALUES IN (5452,5453,5454,5455), +PARTITION p1364 VALUES IN (5456,5457,5458,5459), +PARTITION p1365 VALUES IN (5460,5461,5462,5463), +PARTITION p1366 VALUES IN (5464,5465,5466,5467), +PARTITION p1367 VALUES IN (5468,5469,5470,5471), +PARTITION p1368 VALUES IN (5472,5473,5474,5475), +PARTITION p1369 VALUES IN (5476,5477,5478,5479), +PARTITION p1370 VALUES IN (5480,5481,5482,5483), +PARTITION p1371 VALUES IN (5484,5485,5486,5487), +PARTITION p1372 VALUES IN (5488,5489,5490,5491), +PARTITION p1373 VALUES IN (5492,5493,5494,5495), +PARTITION p1374 VALUES IN (5496,5497,5498,5499), +PARTITION p1375 VALUES IN (5500,5501,5502,5503), +PARTITION p1376 VALUES IN (5504,5505,5506,5507), +PARTITION p1377 VALUES IN (5508,5509,5510,5511), +PARTITION p1378 VALUES IN (5512,5513,5514,5515), +PARTITION p1379 VALUES IN (5516,5517,5518,5519), +PARTITION p1380 VALUES IN (5520,5521,5522,5523), +PARTITION p1381 VALUES IN (5524,5525,5526,5527), +PARTITION p1382 VALUES IN (5528,5529,5530,5531), +PARTITION p1383 VALUES IN (5532,5533,5534,5535), +PARTITION p1384 VALUES IN (5536,5537,5538,5539), +PARTITION p1385 VALUES IN (5540,5541,5542,5543), +PARTITION p1386 VALUES IN (5544,5545,5546,5547), +PARTITION p1387 VALUES IN (5548,5549,5550,5551), +PARTITION p1388 VALUES IN (5552,5553,5554,5555), +PARTITION p1389 VALUES IN (5556,5557,5558,5559), +PARTITION p1390 VALUES IN (5560,5561,5562,5563), +PARTITION p1391 VALUES IN (5564,5565,5566,5567), +PARTITION p1392 VALUES IN (5568,5569,5570,5571), +PARTITION p1393 VALUES IN (5572,5573,5574,5575), +PARTITION p1394 VALUES IN (5576,5577,5578,5579), +PARTITION p1395 VALUES IN (5580,5581,5582,5583), +PARTITION p1396 VALUES IN (5584,5585,5586,5587), +PARTITION p1397 VALUES IN (5588,5589,5590,5591), +PARTITION p1398 VALUES IN (5592,5593,5594,5595), +PARTITION p1399 VALUES IN (5596,5597,5598,5599), +PARTITION p1400 VALUES IN (5600,5601,5602,5603), +PARTITION p1401 VALUES IN (5604,5605,5606,5607), +PARTITION p1402 VALUES IN (5608,5609,5610,5611), +PARTITION p1403 VALUES IN (5612,5613,5614,5615), +PARTITION p1404 VALUES IN (5616,5617,5618,5619), +PARTITION p1405 VALUES IN (5620,5621,5622,5623), +PARTITION p1406 VALUES IN (5624,5625,5626,5627), +PARTITION p1407 VALUES IN (5628,5629,5630,5631), +PARTITION p1408 VALUES IN (5632,5633,5634,5635), +PARTITION p1409 VALUES IN (5636,5637,5638,5639), +PARTITION p1410 VALUES IN (5640,5641,5642,5643), +PARTITION p1411 VALUES IN (5644,5645,5646,5647), +PARTITION p1412 VALUES IN (5648,5649,5650,5651), +PARTITION p1413 VALUES IN (5652,5653,5654,5655), +PARTITION p1414 VALUES IN (5656,5657,5658,5659), +PARTITION p1415 VALUES IN (5660,5661,5662,5663), +PARTITION p1416 VALUES IN (5664,5665,5666,5667), +PARTITION p1417 VALUES IN (5668,5669,5670,5671), +PARTITION p1418 VALUES IN (5672,5673,5674,5675), +PARTITION p1419 VALUES IN (5676,5677,5678,5679), +PARTITION p1420 VALUES IN (5680,5681,5682,5683), +PARTITION p1421 VALUES IN (5684,5685,5686,5687), +PARTITION p1422 VALUES IN (5688,5689,5690,5691), +PARTITION p1423 VALUES IN (5692,5693,5694,5695), +PARTITION p1424 VALUES IN (5696,5697,5698,5699), +PARTITION p1425 VALUES IN (5700,5701,5702,5703), +PARTITION p1426 VALUES IN (5704,5705,5706,5707), +PARTITION p1427 VALUES IN (5708,5709,5710,5711), +PARTITION p1428 VALUES IN (5712,5713,5714,5715), +PARTITION p1429 VALUES IN (5716,5717,5718,5719), +PARTITION p1430 VALUES IN (5720,5721,5722,5723), +PARTITION p1431 VALUES IN (5724,5725,5726,5727), +PARTITION p1432 VALUES IN (5728,5729,5730,5731), +PARTITION p1433 VALUES IN (5732,5733,5734,5735), +PARTITION p1434 VALUES IN (5736,5737,5738,5739), +PARTITION p1435 VALUES IN (5740,5741,5742,5743), +PARTITION p1436 VALUES IN (5744,5745,5746,5747), +PARTITION p1437 VALUES IN (5748,5749,5750,5751), +PARTITION p1438 VALUES IN (5752,5753,5754,5755), +PARTITION p1439 VALUES IN (5756,5757,5758,5759), +PARTITION p1440 VALUES IN (5760,5761,5762,5763), +PARTITION p1441 VALUES IN (5764,5765,5766,5767), +PARTITION p1442 VALUES IN (5768,5769,5770,5771), +PARTITION p1443 VALUES IN (5772,5773,5774,5775), +PARTITION p1444 VALUES IN (5776,5777,5778,5779), +PARTITION p1445 VALUES IN (5780,5781,5782,5783), +PARTITION p1446 VALUES IN (5784,5785,5786,5787), +PARTITION p1447 VALUES IN (5788,5789,5790,5791), +PARTITION p1448 VALUES IN (5792,5793,5794,5795), +PARTITION p1449 VALUES IN (5796,5797,5798,5799), +PARTITION p1450 VALUES IN (5800,5801,5802,5803), +PARTITION p1451 VALUES IN (5804,5805,5806,5807), +PARTITION p1452 VALUES IN (5808,5809,5810,5811), +PARTITION p1453 VALUES IN (5812,5813,5814,5815), +PARTITION p1454 VALUES IN (5816,5817,5818,5819), +PARTITION p1455 VALUES IN (5820,5821,5822,5823), +PARTITION p1456 VALUES IN (5824,5825,5826,5827), +PARTITION p1457 VALUES IN (5828,5829,5830,5831), +PARTITION p1458 VALUES IN (5832,5833,5834,5835), +PARTITION p1459 VALUES IN (5836,5837,5838,5839), +PARTITION p1460 VALUES IN (5840,5841,5842,5843), +PARTITION p1461 VALUES IN (5844,5845,5846,5847), +PARTITION p1462 VALUES IN (5848,5849,5850,5851), +PARTITION p1463 VALUES IN (5852,5853,5854,5855), +PARTITION p1464 VALUES IN (5856,5857,5858,5859), +PARTITION p1465 VALUES IN (5860,5861,5862,5863), +PARTITION p1466 VALUES IN (5864,5865,5866,5867), +PARTITION p1467 VALUES IN (5868,5869,5870,5871), +PARTITION p1468 VALUES IN (5872,5873,5874,5875), +PARTITION p1469 VALUES IN (5876,5877,5878,5879), +PARTITION p1470 VALUES IN (5880,5881,5882,5883), +PARTITION p1471 VALUES IN (5884,5885,5886,5887), +PARTITION p1472 VALUES IN (5888,5889,5890,5891), +PARTITION p1473 VALUES IN (5892,5893,5894,5895), +PARTITION p1474 VALUES IN (5896,5897,5898,5899), +PARTITION p1475 VALUES IN (5900,5901,5902,5903), +PARTITION p1476 VALUES IN (5904,5905,5906,5907), +PARTITION p1477 VALUES IN (5908,5909,5910,5911), +PARTITION p1478 VALUES IN (5912,5913,5914,5915), +PARTITION p1479 VALUES IN (5916,5917,5918,5919), +PARTITION p1480 VALUES IN (5920,5921,5922,5923), +PARTITION p1481 VALUES IN (5924,5925,5926,5927), +PARTITION p1482 VALUES IN (5928,5929,5930,5931), +PARTITION p1483 VALUES IN (5932,5933,5934,5935), +PARTITION p1484 VALUES IN (5936,5937,5938,5939), +PARTITION p1485 VALUES IN (5940,5941,5942,5943), +PARTITION p1486 VALUES IN (5944,5945,5946,5947), +PARTITION p1487 VALUES IN (5948,5949,5950,5951), +PARTITION p1488 VALUES IN (5952,5953,5954,5955), +PARTITION p1489 VALUES IN (5956,5957,5958,5959), +PARTITION p1490 VALUES IN (5960,5961,5962,5963), +PARTITION p1491 VALUES IN (5964,5965,5966,5967), +PARTITION p1492 VALUES IN (5968,5969,5970,5971), +PARTITION p1493 VALUES IN (5972,5973,5974,5975), +PARTITION p1494 VALUES IN (5976,5977,5978,5979), +PARTITION p1495 VALUES IN (5980,5981,5982,5983), +PARTITION p1496 VALUES IN (5984,5985,5986,5987), +PARTITION p1497 VALUES IN (5988,5989,5990,5991), +PARTITION p1498 VALUES IN (5992,5993,5994,5995), +PARTITION p1499 VALUES IN (5996,5997,5998,5999), +PARTITION p1500 VALUES IN (6000,6001,6002,6003), +PARTITION p1501 VALUES IN (6004,6005,6006,6007), +PARTITION p1502 VALUES IN (6008,6009,6010,6011), +PARTITION p1503 VALUES IN (6012,6013,6014,6015), +PARTITION p1504 VALUES IN (6016,6017,6018,6019), +PARTITION p1505 VALUES IN (6020,6021,6022,6023), +PARTITION p1506 VALUES IN (6024,6025,6026,6027), +PARTITION p1507 VALUES IN (6028,6029,6030,6031), +PARTITION p1508 VALUES IN (6032,6033,6034,6035), +PARTITION p1509 VALUES IN (6036,6037,6038,6039), +PARTITION p1510 VALUES IN (6040,6041,6042,6043), +PARTITION p1511 VALUES IN (6044,6045,6046,6047), +PARTITION p1512 VALUES IN (6048,6049,6050,6051), +PARTITION p1513 VALUES IN (6052,6053,6054,6055), +PARTITION p1514 VALUES IN (6056,6057,6058,6059), +PARTITION p1515 VALUES IN (6060,6061,6062,6063), +PARTITION p1516 VALUES IN (6064,6065,6066,6067), +PARTITION p1517 VALUES IN (6068,6069,6070,6071), +PARTITION p1518 VALUES IN (6072,6073,6074,6075), +PARTITION p1519 VALUES IN (6076,6077,6078,6079), +PARTITION p1520 VALUES IN (6080,6081,6082,6083), +PARTITION p1521 VALUES IN (6084,6085,6086,6087), +PARTITION p1522 VALUES IN (6088,6089,6090,6091), +PARTITION p1523 VALUES IN (6092,6093,6094,6095), +PARTITION p1524 VALUES IN (6096,6097,6098,6099), +PARTITION p1525 VALUES IN (6100,6101,6102,6103), +PARTITION p1526 VALUES IN (6104,6105,6106,6107), +PARTITION p1527 VALUES IN (6108,6109,6110,6111), +PARTITION p1528 VALUES IN (6112,6113,6114,6115), +PARTITION p1529 VALUES IN (6116,6117,6118,6119), +PARTITION p1530 VALUES IN (6120,6121,6122,6123), +PARTITION p1531 VALUES IN (6124,6125,6126,6127), +PARTITION p1532 VALUES IN (6128,6129,6130,6131), +PARTITION p1533 VALUES IN (6132,6133,6134,6135), +PARTITION p1534 VALUES IN (6136,6137,6138,6139), +PARTITION p1535 VALUES IN (6140,6141,6142,6143), +PARTITION p1536 VALUES IN (6144,6145,6146,6147), +PARTITION p1537 VALUES IN (6148,6149,6150,6151), +PARTITION p1538 VALUES IN (6152,6153,6154,6155), +PARTITION p1539 VALUES IN (6156,6157,6158,6159), +PARTITION p1540 VALUES IN (6160,6161,6162,6163), +PARTITION p1541 VALUES IN (6164,6165,6166,6167), +PARTITION p1542 VALUES IN (6168,6169,6170,6171), +PARTITION p1543 VALUES IN (6172,6173,6174,6175), +PARTITION p1544 VALUES IN (6176,6177,6178,6179), +PARTITION p1545 VALUES IN (6180,6181,6182,6183), +PARTITION p1546 VALUES IN (6184,6185,6186,6187), +PARTITION p1547 VALUES IN (6188,6189,6190,6191), +PARTITION p1548 VALUES IN (6192,6193,6194,6195), +PARTITION p1549 VALUES IN (6196,6197,6198,6199), +PARTITION p1550 VALUES IN (6200,6201,6202,6203), +PARTITION p1551 VALUES IN (6204,6205,6206,6207), +PARTITION p1552 VALUES IN (6208,6209,6210,6211), +PARTITION p1553 VALUES IN (6212,6213,6214,6215), +PARTITION p1554 VALUES IN (6216,6217,6218,6219), +PARTITION p1555 VALUES IN (6220,6221,6222,6223), +PARTITION p1556 VALUES IN (6224,6225,6226,6227), +PARTITION p1557 VALUES IN (6228,6229,6230,6231), +PARTITION p1558 VALUES IN (6232,6233,6234,6235), +PARTITION p1559 VALUES IN (6236,6237,6238,6239), +PARTITION p1560 VALUES IN (6240,6241,6242,6243), +PARTITION p1561 VALUES IN (6244,6245,6246,6247), +PARTITION p1562 VALUES IN (6248,6249,6250,6251), +PARTITION p1563 VALUES IN (6252,6253,6254,6255), +PARTITION p1564 VALUES IN (6256,6257,6258,6259), +PARTITION p1565 VALUES IN (6260,6261,6262,6263), +PARTITION p1566 VALUES IN (6264,6265,6266,6267), +PARTITION p1567 VALUES IN (6268,6269,6270,6271), +PARTITION p1568 VALUES IN (6272,6273,6274,6275), +PARTITION p1569 VALUES IN (6276,6277,6278,6279), +PARTITION p1570 VALUES IN (6280,6281,6282,6283), +PARTITION p1571 VALUES IN (6284,6285,6286,6287), +PARTITION p1572 VALUES IN (6288,6289,6290,6291), +PARTITION p1573 VALUES IN (6292,6293,6294,6295), +PARTITION p1574 VALUES IN (6296,6297,6298,6299), +PARTITION p1575 VALUES IN (6300,6301,6302,6303), +PARTITION p1576 VALUES IN (6304,6305,6306,6307), +PARTITION p1577 VALUES IN (6308,6309,6310,6311), +PARTITION p1578 VALUES IN (6312,6313,6314,6315), +PARTITION p1579 VALUES IN (6316,6317,6318,6319), +PARTITION p1580 VALUES IN (6320,6321,6322,6323), +PARTITION p1581 VALUES IN (6324,6325,6326,6327), +PARTITION p1582 VALUES IN (6328,6329,6330,6331), +PARTITION p1583 VALUES IN (6332,6333,6334,6335), +PARTITION p1584 VALUES IN (6336,6337,6338,6339), +PARTITION p1585 VALUES IN (6340,6341,6342,6343), +PARTITION p1586 VALUES IN (6344,6345,6346,6347), +PARTITION p1587 VALUES IN (6348,6349,6350,6351), +PARTITION p1588 VALUES IN (6352,6353,6354,6355), +PARTITION p1589 VALUES IN (6356,6357,6358,6359), +PARTITION p1590 VALUES IN (6360,6361,6362,6363), +PARTITION p1591 VALUES IN (6364,6365,6366,6367), +PARTITION p1592 VALUES IN (6368,6369,6370,6371), +PARTITION p1593 VALUES IN (6372,6373,6374,6375), +PARTITION p1594 VALUES IN (6376,6377,6378,6379), +PARTITION p1595 VALUES IN (6380,6381,6382,6383), +PARTITION p1596 VALUES IN (6384,6385,6386,6387), +PARTITION p1597 VALUES IN (6388,6389,6390,6391), +PARTITION p1598 VALUES IN (6392,6393,6394,6395), +PARTITION p1599 VALUES IN (6396,6397,6398,6399), +PARTITION p1600 VALUES IN (6400,6401,6402,6403), +PARTITION p1601 VALUES IN (6404,6405,6406,6407), +PARTITION p1602 VALUES IN (6408,6409,6410,6411), +PARTITION p1603 VALUES IN (6412,6413,6414,6415), +PARTITION p1604 VALUES IN (6416,6417,6418,6419), +PARTITION p1605 VALUES IN (6420,6421,6422,6423), +PARTITION p1606 VALUES IN (6424,6425,6426,6427), +PARTITION p1607 VALUES IN (6428,6429,6430,6431), +PARTITION p1608 VALUES IN (6432,6433,6434,6435), +PARTITION p1609 VALUES IN (6436,6437,6438,6439), +PARTITION p1610 VALUES IN (6440,6441,6442,6443), +PARTITION p1611 VALUES IN (6444,6445,6446,6447), +PARTITION p1612 VALUES IN (6448,6449,6450,6451), +PARTITION p1613 VALUES IN (6452,6453,6454,6455), +PARTITION p1614 VALUES IN (6456,6457,6458,6459), +PARTITION p1615 VALUES IN (6460,6461,6462,6463), +PARTITION p1616 VALUES IN (6464,6465,6466,6467), +PARTITION p1617 VALUES IN (6468,6469,6470,6471), +PARTITION p1618 VALUES IN (6472,6473,6474,6475), +PARTITION p1619 VALUES IN (6476,6477,6478,6479), +PARTITION p1620 VALUES IN (6480,6481,6482,6483), +PARTITION p1621 VALUES IN (6484,6485,6486,6487), +PARTITION p1622 VALUES IN (6488,6489,6490,6491), +PARTITION p1623 VALUES IN (6492,6493,6494,6495), +PARTITION p1624 VALUES IN (6496,6497,6498,6499), +PARTITION p1625 VALUES IN (6500,6501,6502,6503), +PARTITION p1626 VALUES IN (6504,6505,6506,6507), +PARTITION p1627 VALUES IN (6508,6509,6510,6511), +PARTITION p1628 VALUES IN (6512,6513,6514,6515), +PARTITION p1629 VALUES IN (6516,6517,6518,6519), +PARTITION p1630 VALUES IN (6520,6521,6522,6523), +PARTITION p1631 VALUES IN (6524,6525,6526,6527), +PARTITION p1632 VALUES IN (6528,6529,6530,6531), +PARTITION p1633 VALUES IN (6532,6533,6534,6535), +PARTITION p1634 VALUES IN (6536,6537,6538,6539), +PARTITION p1635 VALUES IN (6540,6541,6542,6543), +PARTITION p1636 VALUES IN (6544,6545,6546,6547), +PARTITION p1637 VALUES IN (6548,6549,6550,6551), +PARTITION p1638 VALUES IN (6552,6553,6554,6555), +PARTITION p1639 VALUES IN (6556,6557,6558,6559), +PARTITION p1640 VALUES IN (6560,6561,6562,6563), +PARTITION p1641 VALUES IN (6564,6565,6566,6567), +PARTITION p1642 VALUES IN (6568,6569,6570,6571), +PARTITION p1643 VALUES IN (6572,6573,6574,6575), +PARTITION p1644 VALUES IN (6576,6577,6578,6579), +PARTITION p1645 VALUES IN (6580,6581,6582,6583), +PARTITION p1646 VALUES IN (6584,6585,6586,6587), +PARTITION p1647 VALUES IN (6588,6589,6590,6591), +PARTITION p1648 VALUES IN (6592,6593,6594,6595), +PARTITION p1649 VALUES IN (6596,6597,6598,6599), +PARTITION p1650 VALUES IN (6600,6601,6602,6603), +PARTITION p1651 VALUES IN (6604,6605,6606,6607), +PARTITION p1652 VALUES IN (6608,6609,6610,6611), +PARTITION p1653 VALUES IN (6612,6613,6614,6615), +PARTITION p1654 VALUES IN (6616,6617,6618,6619), +PARTITION p1655 VALUES IN (6620,6621,6622,6623), +PARTITION p1656 VALUES IN (6624,6625,6626,6627), +PARTITION p1657 VALUES IN (6628,6629,6630,6631), +PARTITION p1658 VALUES IN (6632,6633,6634,6635), +PARTITION p1659 VALUES IN (6636,6637,6638,6639), +PARTITION p1660 VALUES IN (6640,6641,6642,6643), +PARTITION p1661 VALUES IN (6644,6645,6646,6647), +PARTITION p1662 VALUES IN (6648,6649,6650,6651), +PARTITION p1663 VALUES IN (6652,6653,6654,6655), +PARTITION p1664 VALUES IN (6656,6657,6658,6659), +PARTITION p1665 VALUES IN (6660,6661,6662,6663), +PARTITION p1666 VALUES IN (6664,6665,6666,6667), +PARTITION p1667 VALUES IN (6668,6669,6670,6671), +PARTITION p1668 VALUES IN (6672,6673,6674,6675), +PARTITION p1669 VALUES IN (6676,6677,6678,6679), +PARTITION p1670 VALUES IN (6680,6681,6682,6683), +PARTITION p1671 VALUES IN (6684,6685,6686,6687), +PARTITION p1672 VALUES IN (6688,6689,6690,6691), +PARTITION p1673 VALUES IN (6692,6693,6694,6695), +PARTITION p1674 VALUES IN (6696,6697,6698,6699), +PARTITION p1675 VALUES IN (6700,6701,6702,6703), +PARTITION p1676 VALUES IN (6704,6705,6706,6707), +PARTITION p1677 VALUES IN (6708,6709,6710,6711), +PARTITION p1678 VALUES IN (6712,6713,6714,6715), +PARTITION p1679 VALUES IN (6716,6717,6718,6719), +PARTITION p1680 VALUES IN (6720,6721,6722,6723), +PARTITION p1681 VALUES IN (6724,6725,6726,6727), +PARTITION p1682 VALUES IN (6728,6729,6730,6731), +PARTITION p1683 VALUES IN (6732,6733,6734,6735), +PARTITION p1684 VALUES IN (6736,6737,6738,6739), +PARTITION p1685 VALUES IN (6740,6741,6742,6743), +PARTITION p1686 VALUES IN (6744,6745,6746,6747), +PARTITION p1687 VALUES IN (6748,6749,6750,6751), +PARTITION p1688 VALUES IN (6752,6753,6754,6755), +PARTITION p1689 VALUES IN (6756,6757,6758,6759), +PARTITION p1690 VALUES IN (6760,6761,6762,6763), +PARTITION p1691 VALUES IN (6764,6765,6766,6767), +PARTITION p1692 VALUES IN (6768,6769,6770,6771), +PARTITION p1693 VALUES IN (6772,6773,6774,6775), +PARTITION p1694 VALUES IN (6776,6777,6778,6779), +PARTITION p1695 VALUES IN (6780,6781,6782,6783), +PARTITION p1696 VALUES IN (6784,6785,6786,6787), +PARTITION p1697 VALUES IN (6788,6789,6790,6791), +PARTITION p1698 VALUES IN (6792,6793,6794,6795), +PARTITION p1699 VALUES IN (6796,6797,6798,6799), +PARTITION p1700 VALUES IN (6800,6801,6802,6803), +PARTITION p1701 VALUES IN (6804,6805,6806,6807), +PARTITION p1702 VALUES IN (6808,6809,6810,6811), +PARTITION p1703 VALUES IN (6812,6813,6814,6815), +PARTITION p1704 VALUES IN (6816,6817,6818,6819), +PARTITION p1705 VALUES IN (6820,6821,6822,6823), +PARTITION p1706 VALUES IN (6824,6825,6826,6827), +PARTITION p1707 VALUES IN (6828,6829,6830,6831), +PARTITION p1708 VALUES IN (6832,6833,6834,6835), +PARTITION p1709 VALUES IN (6836,6837,6838,6839), +PARTITION p1710 VALUES IN (6840,6841,6842,6843), +PARTITION p1711 VALUES IN (6844,6845,6846,6847), +PARTITION p1712 VALUES IN (6848,6849,6850,6851), +PARTITION p1713 VALUES IN (6852,6853,6854,6855), +PARTITION p1714 VALUES IN (6856,6857,6858,6859), +PARTITION p1715 VALUES IN (6860,6861,6862,6863), +PARTITION p1716 VALUES IN (6864,6865,6866,6867), +PARTITION p1717 VALUES IN (6868,6869,6870,6871), +PARTITION p1718 VALUES IN (6872,6873,6874,6875), +PARTITION p1719 VALUES IN (6876,6877,6878,6879), +PARTITION p1720 VALUES IN (6880,6881,6882,6883), +PARTITION p1721 VALUES IN (6884,6885,6886,6887), +PARTITION p1722 VALUES IN (6888,6889,6890,6891), +PARTITION p1723 VALUES IN (6892,6893,6894,6895), +PARTITION p1724 VALUES IN (6896,6897,6898,6899), +PARTITION p1725 VALUES IN (6900,6901,6902,6903), +PARTITION p1726 VALUES IN (6904,6905,6906,6907), +PARTITION p1727 VALUES IN (6908,6909,6910,6911), +PARTITION p1728 VALUES IN (6912,6913,6914,6915), +PARTITION p1729 VALUES IN (6916,6917,6918,6919), +PARTITION p1730 VALUES IN (6920,6921,6922,6923), +PARTITION p1731 VALUES IN (6924,6925,6926,6927), +PARTITION p1732 VALUES IN (6928,6929,6930,6931), +PARTITION p1733 VALUES IN (6932,6933,6934,6935), +PARTITION p1734 VALUES IN (6936,6937,6938,6939), +PARTITION p1735 VALUES IN (6940,6941,6942,6943), +PARTITION p1736 VALUES IN (6944,6945,6946,6947), +PARTITION p1737 VALUES IN (6948,6949,6950,6951), +PARTITION p1738 VALUES IN (6952,6953,6954,6955), +PARTITION p1739 VALUES IN (6956,6957,6958,6959), +PARTITION p1740 VALUES IN (6960,6961,6962,6963), +PARTITION p1741 VALUES IN (6964,6965,6966,6967), +PARTITION p1742 VALUES IN (6968,6969,6970,6971), +PARTITION p1743 VALUES IN (6972,6973,6974,6975), +PARTITION p1744 VALUES IN (6976,6977,6978,6979), +PARTITION p1745 VALUES IN (6980,6981,6982,6983), +PARTITION p1746 VALUES IN (6984,6985,6986,6987), +PARTITION p1747 VALUES IN (6988,6989,6990,6991), +PARTITION p1748 VALUES IN (6992,6993,6994,6995), +PARTITION p1749 VALUES IN (6996,6997,6998,6999), +PARTITION p1750 VALUES IN (7000,7001,7002,7003), +PARTITION p1751 VALUES IN (7004,7005,7006,7007), +PARTITION p1752 VALUES IN (7008,7009,7010,7011), +PARTITION p1753 VALUES IN (7012,7013,7014,7015), +PARTITION p1754 VALUES IN (7016,7017,7018,7019), +PARTITION p1755 VALUES IN (7020,7021,7022,7023), +PARTITION p1756 VALUES IN (7024,7025,7026,7027), +PARTITION p1757 VALUES IN (7028,7029,7030,7031), +PARTITION p1758 VALUES IN (7032,7033,7034,7035), +PARTITION p1759 VALUES IN (7036,7037,7038,7039), +PARTITION p1760 VALUES IN (7040,7041,7042,7043), +PARTITION p1761 VALUES IN (7044,7045,7046,7047), +PARTITION p1762 VALUES IN (7048,7049,7050,7051), +PARTITION p1763 VALUES IN (7052,7053,7054,7055), +PARTITION p1764 VALUES IN (7056,7057,7058,7059), +PARTITION p1765 VALUES IN (7060,7061,7062,7063), +PARTITION p1766 VALUES IN (7064,7065,7066,7067), +PARTITION p1767 VALUES IN (7068,7069,7070,7071), +PARTITION p1768 VALUES IN (7072,7073,7074,7075), +PARTITION p1769 VALUES IN (7076,7077,7078,7079), +PARTITION p1770 VALUES IN (7080,7081,7082,7083), +PARTITION p1771 VALUES IN (7084,7085,7086,7087), +PARTITION p1772 VALUES IN (7088,7089,7090,7091), +PARTITION p1773 VALUES IN (7092,7093,7094,7095), +PARTITION p1774 VALUES IN (7096,7097,7098,7099), +PARTITION p1775 VALUES IN (7100,7101,7102,7103), +PARTITION p1776 VALUES IN (7104,7105,7106,7107), +PARTITION p1777 VALUES IN (7108,7109,7110,7111), +PARTITION p1778 VALUES IN (7112,7113,7114,7115), +PARTITION p1779 VALUES IN (7116,7117,7118,7119), +PARTITION p1780 VALUES IN (7120,7121,7122,7123), +PARTITION p1781 VALUES IN (7124,7125,7126,7127), +PARTITION p1782 VALUES IN (7128,7129,7130,7131), +PARTITION p1783 VALUES IN (7132,7133,7134,7135), +PARTITION p1784 VALUES IN (7136,7137,7138,7139), +PARTITION p1785 VALUES IN (7140,7141,7142,7143), +PARTITION p1786 VALUES IN (7144,7145,7146,7147), +PARTITION p1787 VALUES IN (7148,7149,7150,7151), +PARTITION p1788 VALUES IN (7152,7153,7154,7155), +PARTITION p1789 VALUES IN (7156,7157,7158,7159), +PARTITION p1790 VALUES IN (7160,7161,7162,7163), +PARTITION p1791 VALUES IN (7164,7165,7166,7167), +PARTITION p1792 VALUES IN (7168,7169,7170,7171), +PARTITION p1793 VALUES IN (7172,7173,7174,7175), +PARTITION p1794 VALUES IN (7176,7177,7178,7179), +PARTITION p1795 VALUES IN (7180,7181,7182,7183), +PARTITION p1796 VALUES IN (7184,7185,7186,7187), +PARTITION p1797 VALUES IN (7188,7189,7190,7191), +PARTITION p1798 VALUES IN (7192,7193,7194,7195), +PARTITION p1799 VALUES IN (7196,7197,7198,7199), +PARTITION p1800 VALUES IN (7200,7201,7202,7203), +PARTITION p1801 VALUES IN (7204,7205,7206,7207), +PARTITION p1802 VALUES IN (7208,7209,7210,7211), +PARTITION p1803 VALUES IN (7212,7213,7214,7215), +PARTITION p1804 VALUES IN (7216,7217,7218,7219), +PARTITION p1805 VALUES IN (7220,7221,7222,7223), +PARTITION p1806 VALUES IN (7224,7225,7226,7227), +PARTITION p1807 VALUES IN (7228,7229,7230,7231), +PARTITION p1808 VALUES IN (7232,7233,7234,7235), +PARTITION p1809 VALUES IN (7236,7237,7238,7239), +PARTITION p1810 VALUES IN (7240,7241,7242,7243), +PARTITION p1811 VALUES IN (7244,7245,7246,7247), +PARTITION p1812 VALUES IN (7248,7249,7250,7251), +PARTITION p1813 VALUES IN (7252,7253,7254,7255), +PARTITION p1814 VALUES IN (7256,7257,7258,7259), +PARTITION p1815 VALUES IN (7260,7261,7262,7263), +PARTITION p1816 VALUES IN (7264,7265,7266,7267), +PARTITION p1817 VALUES IN (7268,7269,7270,7271), +PARTITION p1818 VALUES IN (7272,7273,7274,7275), +PARTITION p1819 VALUES IN (7276,7277,7278,7279), +PARTITION p1820 VALUES IN (7280,7281,7282,7283), +PARTITION p1821 VALUES IN (7284,7285,7286,7287), +PARTITION p1822 VALUES IN (7288,7289,7290,7291), +PARTITION p1823 VALUES IN (7292,7293,7294,7295), +PARTITION p1824 VALUES IN (7296,7297,7298,7299), +PARTITION p1825 VALUES IN (7300,7301,7302,7303), +PARTITION p1826 VALUES IN (7304,7305,7306,7307), +PARTITION p1827 VALUES IN (7308,7309,7310,7311), +PARTITION p1828 VALUES IN (7312,7313,7314,7315), +PARTITION p1829 VALUES IN (7316,7317,7318,7319), +PARTITION p1830 VALUES IN (7320,7321,7322,7323), +PARTITION p1831 VALUES IN (7324,7325,7326,7327), +PARTITION p1832 VALUES IN (7328,7329,7330,7331), +PARTITION p1833 VALUES IN (7332,7333,7334,7335), +PARTITION p1834 VALUES IN (7336,7337,7338,7339), +PARTITION p1835 VALUES IN (7340,7341,7342,7343), +PARTITION p1836 VALUES IN (7344,7345,7346,7347), +PARTITION p1837 VALUES IN (7348,7349,7350,7351), +PARTITION p1838 VALUES IN (7352,7353,7354,7355), +PARTITION p1839 VALUES IN (7356,7357,7358,7359), +PARTITION p1840 VALUES IN (7360,7361,7362,7363), +PARTITION p1841 VALUES IN (7364,7365,7366,7367), +PARTITION p1842 VALUES IN (7368,7369,7370,7371), +PARTITION p1843 VALUES IN (7372,7373,7374,7375), +PARTITION p1844 VALUES IN (7376,7377,7378,7379), +PARTITION p1845 VALUES IN (7380,7381,7382,7383), +PARTITION p1846 VALUES IN (7384,7385,7386,7387), +PARTITION p1847 VALUES IN (7388,7389,7390,7391), +PARTITION p1848 VALUES IN (7392,7393,7394,7395), +PARTITION p1849 VALUES IN (7396,7397,7398,7399), +PARTITION p1850 VALUES IN (7400,7401,7402,7403), +PARTITION p1851 VALUES IN (7404,7405,7406,7407), +PARTITION p1852 VALUES IN (7408,7409,7410,7411), +PARTITION p1853 VALUES IN (7412,7413,7414,7415), +PARTITION p1854 VALUES IN (7416,7417,7418,7419), +PARTITION p1855 VALUES IN (7420,7421,7422,7423), +PARTITION p1856 VALUES IN (7424,7425,7426,7427), +PARTITION p1857 VALUES IN (7428,7429,7430,7431), +PARTITION p1858 VALUES IN (7432,7433,7434,7435), +PARTITION p1859 VALUES IN (7436,7437,7438,7439), +PARTITION p1860 VALUES IN (7440,7441,7442,7443), +PARTITION p1861 VALUES IN (7444,7445,7446,7447), +PARTITION p1862 VALUES IN (7448,7449,7450,7451), +PARTITION p1863 VALUES IN (7452,7453,7454,7455), +PARTITION p1864 VALUES IN (7456,7457,7458,7459), +PARTITION p1865 VALUES IN (7460,7461,7462,7463), +PARTITION p1866 VALUES IN (7464,7465,7466,7467), +PARTITION p1867 VALUES IN (7468,7469,7470,7471), +PARTITION p1868 VALUES IN (7472,7473,7474,7475), +PARTITION p1869 VALUES IN (7476,7477,7478,7479), +PARTITION p1870 VALUES IN (7480,7481,7482,7483), +PARTITION p1871 VALUES IN (7484,7485,7486,7487), +PARTITION p1872 VALUES IN (7488,7489,7490,7491), +PARTITION p1873 VALUES IN (7492,7493,7494,7495), +PARTITION p1874 VALUES IN (7496,7497,7498,7499), +PARTITION p1875 VALUES IN (7500,7501,7502,7503), +PARTITION p1876 VALUES IN (7504,7505,7506,7507), +PARTITION p1877 VALUES IN (7508,7509,7510,7511), +PARTITION p1878 VALUES IN (7512,7513,7514,7515), +PARTITION p1879 VALUES IN (7516,7517,7518,7519), +PARTITION p1880 VALUES IN (7520,7521,7522,7523), +PARTITION p1881 VALUES IN (7524,7525,7526,7527), +PARTITION p1882 VALUES IN (7528,7529,7530,7531), +PARTITION p1883 VALUES IN (7532,7533,7534,7535), +PARTITION p1884 VALUES IN (7536,7537,7538,7539), +PARTITION p1885 VALUES IN (7540,7541,7542,7543), +PARTITION p1886 VALUES IN (7544,7545,7546,7547), +PARTITION p1887 VALUES IN (7548,7549,7550,7551), +PARTITION p1888 VALUES IN (7552,7553,7554,7555), +PARTITION p1889 VALUES IN (7556,7557,7558,7559), +PARTITION p1890 VALUES IN (7560,7561,7562,7563), +PARTITION p1891 VALUES IN (7564,7565,7566,7567), +PARTITION p1892 VALUES IN (7568,7569,7570,7571), +PARTITION p1893 VALUES IN (7572,7573,7574,7575), +PARTITION p1894 VALUES IN (7576,7577,7578,7579), +PARTITION p1895 VALUES IN (7580,7581,7582,7583), +PARTITION p1896 VALUES IN (7584,7585,7586,7587), +PARTITION p1897 VALUES IN (7588,7589,7590,7591), +PARTITION p1898 VALUES IN (7592,7593,7594,7595), +PARTITION p1899 VALUES IN (7596,7597,7598,7599), +PARTITION p1900 VALUES IN (7600,7601,7602,7603), +PARTITION p1901 VALUES IN (7604,7605,7606,7607), +PARTITION p1902 VALUES IN (7608,7609,7610,7611), +PARTITION p1903 VALUES IN (7612,7613,7614,7615), +PARTITION p1904 VALUES IN (7616,7617,7618,7619), +PARTITION p1905 VALUES IN (7620,7621,7622,7623), +PARTITION p1906 VALUES IN (7624,7625,7626,7627), +PARTITION p1907 VALUES IN (7628,7629,7630,7631), +PARTITION p1908 VALUES IN (7632,7633,7634,7635), +PARTITION p1909 VALUES IN (7636,7637,7638,7639), +PARTITION p1910 VALUES IN (7640,7641,7642,7643), +PARTITION p1911 VALUES IN (7644,7645,7646,7647), +PARTITION p1912 VALUES IN (7648,7649,7650,7651), +PARTITION p1913 VALUES IN (7652,7653,7654,7655), +PARTITION p1914 VALUES IN (7656,7657,7658,7659), +PARTITION p1915 VALUES IN (7660,7661,7662,7663), +PARTITION p1916 VALUES IN (7664,7665,7666,7667), +PARTITION p1917 VALUES IN (7668,7669,7670,7671), +PARTITION p1918 VALUES IN (7672,7673,7674,7675), +PARTITION p1919 VALUES IN (7676,7677,7678,7679), +PARTITION p1920 VALUES IN (7680,7681,7682,7683), +PARTITION p1921 VALUES IN (7684,7685,7686,7687), +PARTITION p1922 VALUES IN (7688,7689,7690,7691), +PARTITION p1923 VALUES IN (7692,7693,7694,7695), +PARTITION p1924 VALUES IN (7696,7697,7698,7699), +PARTITION p1925 VALUES IN (7700,7701,7702,7703), +PARTITION p1926 VALUES IN (7704,7705,7706,7707), +PARTITION p1927 VALUES IN (7708,7709,7710,7711), +PARTITION p1928 VALUES IN (7712,7713,7714,7715), +PARTITION p1929 VALUES IN (7716,7717,7718,7719), +PARTITION p1930 VALUES IN (7720,7721,7722,7723), +PARTITION p1931 VALUES IN (7724,7725,7726,7727), +PARTITION p1932 VALUES IN (7728,7729,7730,7731), +PARTITION p1933 VALUES IN (7732,7733,7734,7735), +PARTITION p1934 VALUES IN (7736,7737,7738,7739), +PARTITION p1935 VALUES IN (7740,7741,7742,7743), +PARTITION p1936 VALUES IN (7744,7745,7746,7747), +PARTITION p1937 VALUES IN (7748,7749,7750,7751), +PARTITION p1938 VALUES IN (7752,7753,7754,7755), +PARTITION p1939 VALUES IN (7756,7757,7758,7759), +PARTITION p1940 VALUES IN (7760,7761,7762,7763), +PARTITION p1941 VALUES IN (7764,7765,7766,7767), +PARTITION p1942 VALUES IN (7768,7769,7770,7771), +PARTITION p1943 VALUES IN (7772,7773,7774,7775), +PARTITION p1944 VALUES IN (7776,7777,7778,7779), +PARTITION p1945 VALUES IN (7780,7781,7782,7783), +PARTITION p1946 VALUES IN (7784,7785,7786,7787), +PARTITION p1947 VALUES IN (7788,7789,7790,7791), +PARTITION p1948 VALUES IN (7792,7793,7794,7795), +PARTITION p1949 VALUES IN (7796,7797,7798,7799), +PARTITION p1950 VALUES IN (7800,7801,7802,7803), +PARTITION p1951 VALUES IN (7804,7805,7806,7807), +PARTITION p1952 VALUES IN (7808,7809,7810,7811), +PARTITION p1953 VALUES IN (7812,7813,7814,7815), +PARTITION p1954 VALUES IN (7816,7817,7818,7819), +PARTITION p1955 VALUES IN (7820,7821,7822,7823), +PARTITION p1956 VALUES IN (7824,7825,7826,7827), +PARTITION p1957 VALUES IN (7828,7829,7830,7831), +PARTITION p1958 VALUES IN (7832,7833,7834,7835), +PARTITION p1959 VALUES IN (7836,7837,7838,7839), +PARTITION p1960 VALUES IN (7840,7841,7842,7843), +PARTITION p1961 VALUES IN (7844,7845,7846,7847), +PARTITION p1962 VALUES IN (7848,7849,7850,7851), +PARTITION p1963 VALUES IN (7852,7853,7854,7855), +PARTITION p1964 VALUES IN (7856,7857,7858,7859), +PARTITION p1965 VALUES IN (7860,7861,7862,7863), +PARTITION p1966 VALUES IN (7864,7865,7866,7867), +PARTITION p1967 VALUES IN (7868,7869,7870,7871), +PARTITION p1968 VALUES IN (7872,7873,7874,7875), +PARTITION p1969 VALUES IN (7876,7877,7878,7879), +PARTITION p1970 VALUES IN (7880,7881,7882,7883), +PARTITION p1971 VALUES IN (7884,7885,7886,7887), +PARTITION p1972 VALUES IN (7888,7889,7890,7891), +PARTITION p1973 VALUES IN (7892,7893,7894,7895), +PARTITION p1974 VALUES IN (7896,7897,7898,7899), +PARTITION p1975 VALUES IN (7900,7901,7902,7903), +PARTITION p1976 VALUES IN (7904,7905,7906,7907), +PARTITION p1977 VALUES IN (7908,7909,7910,7911), +PARTITION p1978 VALUES IN (7912,7913,7914,7915), +PARTITION p1979 VALUES IN (7916,7917,7918,7919), +PARTITION p1980 VALUES IN (7920,7921,7922,7923), +PARTITION p1981 VALUES IN (7924,7925,7926,7927), +PARTITION p1982 VALUES IN (7928,7929,7930,7931), +PARTITION p1983 VALUES IN (7932,7933,7934,7935), +PARTITION p1984 VALUES IN (7936,7937,7938,7939), +PARTITION p1985 VALUES IN (7940,7941,7942,7943), +PARTITION p1986 VALUES IN (7944,7945,7946,7947), +PARTITION p1987 VALUES IN (7948,7949,7950,7951), +PARTITION p1988 VALUES IN (7952,7953,7954,7955), +PARTITION p1989 VALUES IN (7956,7957,7958,7959), +PARTITION p1990 VALUES IN (7960,7961,7962,7963), +PARTITION p1991 VALUES IN (7964,7965,7966,7967), +PARTITION p1992 VALUES IN (7968,7969,7970,7971), +PARTITION p1993 VALUES IN (7972,7973,7974,7975), +PARTITION p1994 VALUES IN (7976,7977,7978,7979), +PARTITION p1995 VALUES IN (7980,7981,7982,7983), +PARTITION p1996 VALUES IN (7984,7985,7986,7987), +PARTITION p1997 VALUES IN (7988,7989,7990,7991), +PARTITION p1998 VALUES IN (7992,7993,7994,7995), +PARTITION p1999 VALUES IN (7996,7997,7998,7999), +PARTITION p2000 VALUES IN (8000,8001,8002,8003), +PARTITION p2001 VALUES IN (8004,8005,8006,8007), +PARTITION p2002 VALUES IN (8008,8009,8010,8011), +PARTITION p2003 VALUES IN (8012,8013,8014,8015), +PARTITION p2004 VALUES IN (8016,8017,8018,8019), +PARTITION p2005 VALUES IN (8020,8021,8022,8023), +PARTITION p2006 VALUES IN (8024,8025,8026,8027), +PARTITION p2007 VALUES IN (8028,8029,8030,8031), +PARTITION p2008 VALUES IN (8032,8033,8034,8035), +PARTITION p2009 VALUES IN (8036,8037,8038,8039), +PARTITION p2010 VALUES IN (8040,8041,8042,8043), +PARTITION p2011 VALUES IN (8044,8045,8046,8047), +PARTITION p2012 VALUES IN (8048,8049,8050,8051), +PARTITION p2013 VALUES IN (8052,8053,8054,8055), +PARTITION p2014 VALUES IN (8056,8057,8058,8059), +PARTITION p2015 VALUES IN (8060,8061,8062,8063), +PARTITION p2016 VALUES IN (8064,8065,8066,8067), +PARTITION p2017 VALUES IN (8068,8069,8070,8071), +PARTITION p2018 VALUES IN (8072,8073,8074,8075), +PARTITION p2019 VALUES IN (8076,8077,8078,8079), +PARTITION p2020 VALUES IN (8080,8081,8082,8083), +PARTITION p2021 VALUES IN (8084,8085,8086,8087), +PARTITION p2022 VALUES IN (8088,8089,8090,8091), +PARTITION p2023 VALUES IN (8092,8093,8094,8095), +PARTITION p2024 VALUES IN (8096,8097,8098,8099), +PARTITION p2025 VALUES IN (8100,8101,8102,8103), +PARTITION p2026 VALUES IN (8104,8105,8106,8107), +PARTITION p2027 VALUES IN (8108,8109,8110,8111), +PARTITION p2028 VALUES IN (8112,8113,8114,8115), +PARTITION p2029 VALUES IN (8116,8117,8118,8119), +PARTITION p2030 VALUES IN (8120,8121,8122,8123), +PARTITION p2031 VALUES IN (8124,8125,8126,8127), +PARTITION p2032 VALUES IN (8128,8129,8130,8131), +PARTITION p2033 VALUES IN (8132,8133,8134,8135), +PARTITION p2034 VALUES IN (8136,8137,8138,8139), +PARTITION p2035 VALUES IN (8140,8141,8142,8143), +PARTITION p2036 VALUES IN (8144,8145,8146,8147), +PARTITION p2037 VALUES IN (8148,8149,8150,8151), +PARTITION p2038 VALUES IN (8152,8153,8154,8155), +PARTITION p2039 VALUES IN (8156,8157,8158,8159), +PARTITION p2040 VALUES IN (8160,8161,8162,8163), +PARTITION p2041 VALUES IN (8164,8165,8166,8167), +PARTITION p2042 VALUES IN (8168,8169,8170,8171), +PARTITION p2043 VALUES IN (8172,8173,8174,8175), +PARTITION p2044 VALUES IN (8176,8177,8178,8179), +PARTITION p2045 VALUES IN (8180,8181,8182,8183), +PARTITION p2046 VALUES IN (8184,8185,8186,8187), +PARTITION p2047 VALUES IN (8188,8189,8190,8191), +PARTITION p2048 VALUES IN (8192,8193,8194,8195), +PARTITION p2049 VALUES IN (8196,8197,8198,8199), +PARTITION p2050 VALUES IN (8200,8201,8202,8203), +PARTITION p2051 VALUES IN (8204,8205,8206,8207), +PARTITION p2052 VALUES IN (8208,8209,8210,8211), +PARTITION p2053 VALUES IN (8212,8213,8214,8215), +PARTITION p2054 VALUES IN (8216,8217,8218,8219), +PARTITION p2055 VALUES IN (8220,8221,8222,8223), +PARTITION p2056 VALUES IN (8224,8225,8226,8227), +PARTITION p2057 VALUES IN (8228,8229,8230,8231), +PARTITION p2058 VALUES IN (8232,8233,8234,8235), +PARTITION p2059 VALUES IN (8236,8237,8238,8239), +PARTITION p2060 VALUES IN (8240,8241,8242,8243), +PARTITION p2061 VALUES IN (8244,8245,8246,8247), +PARTITION p2062 VALUES IN (8248,8249,8250,8251), +PARTITION p2063 VALUES IN (8252,8253,8254,8255), +PARTITION p2064 VALUES IN (8256,8257,8258,8259), +PARTITION p2065 VALUES IN (8260,8261,8262,8263), +PARTITION p2066 VALUES IN (8264,8265,8266,8267), +PARTITION p2067 VALUES IN (8268,8269,8270,8271), +PARTITION p2068 VALUES IN (8272,8273,8274,8275), +PARTITION p2069 VALUES IN (8276,8277,8278,8279), +PARTITION p2070 VALUES IN (8280,8281,8282,8283), +PARTITION p2071 VALUES IN (8284,8285,8286,8287), +PARTITION p2072 VALUES IN (8288,8289,8290,8291), +PARTITION p2073 VALUES IN (8292,8293,8294,8295), +PARTITION p2074 VALUES IN (8296,8297,8298,8299), +PARTITION p2075 VALUES IN (8300,8301,8302,8303), +PARTITION p2076 VALUES IN (8304,8305,8306,8307), +PARTITION p2077 VALUES IN (8308,8309,8310,8311), +PARTITION p2078 VALUES IN (8312,8313,8314,8315), +PARTITION p2079 VALUES IN (8316,8317,8318,8319), +PARTITION p2080 VALUES IN (8320,8321,8322,8323), +PARTITION p2081 VALUES IN (8324,8325,8326,8327), +PARTITION p2082 VALUES IN (8328,8329,8330,8331), +PARTITION p2083 VALUES IN (8332,8333,8334,8335), +PARTITION p2084 VALUES IN (8336,8337,8338,8339), +PARTITION p2085 VALUES IN (8340,8341,8342,8343), +PARTITION p2086 VALUES IN (8344,8345,8346,8347), +PARTITION p2087 VALUES IN (8348,8349,8350,8351), +PARTITION p2088 VALUES IN (8352,8353,8354,8355), +PARTITION p2089 VALUES IN (8356,8357,8358,8359), +PARTITION p2090 VALUES IN (8360,8361,8362,8363), +PARTITION p2091 VALUES IN (8364,8365,8366,8367), +PARTITION p2092 VALUES IN (8368,8369,8370,8371), +PARTITION p2093 VALUES IN (8372,8373,8374,8375), +PARTITION p2094 VALUES IN (8376,8377,8378,8379), +PARTITION p2095 VALUES IN (8380,8381,8382,8383), +PARTITION p2096 VALUES IN (8384,8385,8386,8387), +PARTITION p2097 VALUES IN (8388,8389,8390,8391), +PARTITION p2098 VALUES IN (8392,8393,8394,8395), +PARTITION p2099 VALUES IN (8396,8397,8398,8399), +PARTITION p2100 VALUES IN (8400,8401,8402,8403), +PARTITION p2101 VALUES IN (8404,8405,8406,8407), +PARTITION p2102 VALUES IN (8408,8409,8410,8411), +PARTITION p2103 VALUES IN (8412,8413,8414,8415), +PARTITION p2104 VALUES IN (8416,8417,8418,8419), +PARTITION p2105 VALUES IN (8420,8421,8422,8423), +PARTITION p2106 VALUES IN (8424,8425,8426,8427), +PARTITION p2107 VALUES IN (8428,8429,8430,8431), +PARTITION p2108 VALUES IN (8432,8433,8434,8435), +PARTITION p2109 VALUES IN (8436,8437,8438,8439), +PARTITION p2110 VALUES IN (8440,8441,8442,8443), +PARTITION p2111 VALUES IN (8444,8445,8446,8447), +PARTITION p2112 VALUES IN (8448,8449,8450,8451), +PARTITION p2113 VALUES IN (8452,8453,8454,8455), +PARTITION p2114 VALUES IN (8456,8457,8458,8459), +PARTITION p2115 VALUES IN (8460,8461,8462,8463), +PARTITION p2116 VALUES IN (8464,8465,8466,8467), +PARTITION p2117 VALUES IN (8468,8469,8470,8471), +PARTITION p2118 VALUES IN (8472,8473,8474,8475), +PARTITION p2119 VALUES IN (8476,8477,8478,8479), +PARTITION p2120 VALUES IN (8480,8481,8482,8483), +PARTITION p2121 VALUES IN (8484,8485,8486,8487), +PARTITION p2122 VALUES IN (8488,8489,8490,8491), +PARTITION p2123 VALUES IN (8492,8493,8494,8495), +PARTITION p2124 VALUES IN (8496,8497,8498,8499), +PARTITION p2125 VALUES IN (8500,8501,8502,8503), +PARTITION p2126 VALUES IN (8504,8505,8506,8507), +PARTITION p2127 VALUES IN (8508,8509,8510,8511), +PARTITION p2128 VALUES IN (8512,8513,8514,8515), +PARTITION p2129 VALUES IN (8516,8517,8518,8519), +PARTITION p2130 VALUES IN (8520,8521,8522,8523), +PARTITION p2131 VALUES IN (8524,8525,8526,8527), +PARTITION p2132 VALUES IN (8528,8529,8530,8531), +PARTITION p2133 VALUES IN (8532,8533,8534,8535), +PARTITION p2134 VALUES IN (8536,8537,8538,8539), +PARTITION p2135 VALUES IN (8540,8541,8542,8543), +PARTITION p2136 VALUES IN (8544,8545,8546,8547), +PARTITION p2137 VALUES IN (8548,8549,8550,8551), +PARTITION p2138 VALUES IN (8552,8553,8554,8555), +PARTITION p2139 VALUES IN (8556,8557,8558,8559), +PARTITION p2140 VALUES IN (8560,8561,8562,8563), +PARTITION p2141 VALUES IN (8564,8565,8566,8567), +PARTITION p2142 VALUES IN (8568,8569,8570,8571), +PARTITION p2143 VALUES IN (8572,8573,8574,8575), +PARTITION p2144 VALUES IN (8576,8577,8578,8579), +PARTITION p2145 VALUES IN (8580,8581,8582,8583), +PARTITION p2146 VALUES IN (8584,8585,8586,8587), +PARTITION p2147 VALUES IN (8588,8589,8590,8591), +PARTITION p2148 VALUES IN (8592,8593,8594,8595), +PARTITION p2149 VALUES IN (8596,8597,8598,8599), +PARTITION p2150 VALUES IN (8600,8601,8602,8603), +PARTITION p2151 VALUES IN (8604,8605,8606,8607), +PARTITION p2152 VALUES IN (8608,8609,8610,8611), +PARTITION p2153 VALUES IN (8612,8613,8614,8615), +PARTITION p2154 VALUES IN (8616,8617,8618,8619), +PARTITION p2155 VALUES IN (8620,8621,8622,8623), +PARTITION p2156 VALUES IN (8624,8625,8626,8627), +PARTITION p2157 VALUES IN (8628,8629,8630,8631), +PARTITION p2158 VALUES IN (8632,8633,8634,8635), +PARTITION p2159 VALUES IN (8636,8637,8638,8639), +PARTITION p2160 VALUES IN (8640,8641,8642,8643), +PARTITION p2161 VALUES IN (8644,8645,8646,8647), +PARTITION p2162 VALUES IN (8648,8649,8650,8651), +PARTITION p2163 VALUES IN (8652,8653,8654,8655), +PARTITION p2164 VALUES IN (8656,8657,8658,8659), +PARTITION p2165 VALUES IN (8660,8661,8662,8663), +PARTITION p2166 VALUES IN (8664,8665,8666,8667), +PARTITION p2167 VALUES IN (8668,8669,8670,8671), +PARTITION p2168 VALUES IN (8672,8673,8674,8675), +PARTITION p2169 VALUES IN (8676,8677,8678,8679), +PARTITION p2170 VALUES IN (8680,8681,8682,8683), +PARTITION p2171 VALUES IN (8684,8685,8686,8687), +PARTITION p2172 VALUES IN (8688,8689,8690,8691), +PARTITION p2173 VALUES IN (8692,8693,8694,8695), +PARTITION p2174 VALUES IN (8696,8697,8698,8699), +PARTITION p2175 VALUES IN (8700,8701,8702,8703), +PARTITION p2176 VALUES IN (8704,8705,8706,8707), +PARTITION p2177 VALUES IN (8708,8709,8710,8711), +PARTITION p2178 VALUES IN (8712,8713,8714,8715), +PARTITION p2179 VALUES IN (8716,8717,8718,8719), +PARTITION p2180 VALUES IN (8720,8721,8722,8723), +PARTITION p2181 VALUES IN (8724,8725,8726,8727), +PARTITION p2182 VALUES IN (8728,8729,8730,8731), +PARTITION p2183 VALUES IN (8732,8733,8734,8735), +PARTITION p2184 VALUES IN (8736,8737,8738,8739), +PARTITION p2185 VALUES IN (8740,8741,8742,8743), +PARTITION p2186 VALUES IN (8744,8745,8746,8747), +PARTITION p2187 VALUES IN (8748,8749,8750,8751), +PARTITION p2188 VALUES IN (8752,8753,8754,8755), +PARTITION p2189 VALUES IN (8756,8757,8758,8759), +PARTITION p2190 VALUES IN (8760,8761,8762,8763), +PARTITION p2191 VALUES IN (8764,8765,8766,8767), +PARTITION p2192 VALUES IN (8768,8769,8770,8771), +PARTITION p2193 VALUES IN (8772,8773,8774,8775), +PARTITION p2194 VALUES IN (8776,8777,8778,8779), +PARTITION p2195 VALUES IN (8780,8781,8782,8783), +PARTITION p2196 VALUES IN (8784,8785,8786,8787), +PARTITION p2197 VALUES IN (8788,8789,8790,8791), +PARTITION p2198 VALUES IN (8792,8793,8794,8795), +PARTITION p2199 VALUES IN (8796,8797,8798,8799), +PARTITION p2200 VALUES IN (8800,8801,8802,8803), +PARTITION p2201 VALUES IN (8804,8805,8806,8807), +PARTITION p2202 VALUES IN (8808,8809,8810,8811), +PARTITION p2203 VALUES IN (8812,8813,8814,8815), +PARTITION p2204 VALUES IN (8816,8817,8818,8819), +PARTITION p2205 VALUES IN (8820,8821,8822,8823), +PARTITION p2206 VALUES IN (8824,8825,8826,8827), +PARTITION p2207 VALUES IN (8828,8829,8830,8831), +PARTITION p2208 VALUES IN (8832,8833,8834,8835), +PARTITION p2209 VALUES IN (8836,8837,8838,8839), +PARTITION p2210 VALUES IN (8840,8841,8842,8843), +PARTITION p2211 VALUES IN (8844,8845,8846,8847), +PARTITION p2212 VALUES IN (8848,8849,8850,8851), +PARTITION p2213 VALUES IN (8852,8853,8854,8855), +PARTITION p2214 VALUES IN (8856,8857,8858,8859), +PARTITION p2215 VALUES IN (8860,8861,8862,8863), +PARTITION p2216 VALUES IN (8864,8865,8866,8867), +PARTITION p2217 VALUES IN (8868,8869,8870,8871), +PARTITION p2218 VALUES IN (8872,8873,8874,8875), +PARTITION p2219 VALUES IN (8876,8877,8878,8879), +PARTITION p2220 VALUES IN (8880,8881,8882,8883), +PARTITION p2221 VALUES IN (8884,8885,8886,8887), +PARTITION p2222 VALUES IN (8888,8889,8890,8891), +PARTITION p2223 VALUES IN (8892,8893,8894,8895), +PARTITION p2224 VALUES IN (8896,8897,8898,8899), +PARTITION p2225 VALUES IN (8900,8901,8902,8903), +PARTITION p2226 VALUES IN (8904,8905,8906,8907), +PARTITION p2227 VALUES IN (8908,8909,8910,8911), +PARTITION p2228 VALUES IN (8912,8913,8914,8915), +PARTITION p2229 VALUES IN (8916,8917,8918,8919), +PARTITION p2230 VALUES IN (8920,8921,8922,8923), +PARTITION p2231 VALUES IN (8924,8925,8926,8927), +PARTITION p2232 VALUES IN (8928,8929,8930,8931), +PARTITION p2233 VALUES IN (8932,8933,8934,8935), +PARTITION p2234 VALUES IN (8936,8937,8938,8939), +PARTITION p2235 VALUES IN (8940,8941,8942,8943), +PARTITION p2236 VALUES IN (8944,8945,8946,8947), +PARTITION p2237 VALUES IN (8948,8949,8950,8951), +PARTITION p2238 VALUES IN (8952,8953,8954,8955), +PARTITION p2239 VALUES IN (8956,8957,8958,8959), +PARTITION p2240 VALUES IN (8960,8961,8962,8963), +PARTITION p2241 VALUES IN (8964,8965,8966,8967), +PARTITION p2242 VALUES IN (8968,8969,8970,8971), +PARTITION p2243 VALUES IN (8972,8973,8974,8975), +PARTITION p2244 VALUES IN (8976,8977,8978,8979), +PARTITION p2245 VALUES IN (8980,8981,8982,8983), +PARTITION p2246 VALUES IN (8984,8985,8986,8987), +PARTITION p2247 VALUES IN (8988,8989,8990,8991), +PARTITION p2248 VALUES IN (8992,8993,8994,8995), +PARTITION p2249 VALUES IN (8996,8997,8998,8999), +PARTITION p2250 VALUES IN (9000,9001,9002,9003), +PARTITION p2251 VALUES IN (9004,9005,9006,9007), +PARTITION p2252 VALUES IN (9008,9009,9010,9011), +PARTITION p2253 VALUES IN (9012,9013,9014,9015), +PARTITION p2254 VALUES IN (9016,9017,9018,9019), +PARTITION p2255 VALUES IN (9020,9021,9022,9023), +PARTITION p2256 VALUES IN (9024,9025,9026,9027), +PARTITION p2257 VALUES IN (9028,9029,9030,9031), +PARTITION p2258 VALUES IN (9032,9033,9034,9035), +PARTITION p2259 VALUES IN (9036,9037,9038,9039), +PARTITION p2260 VALUES IN (9040,9041,9042,9043), +PARTITION p2261 VALUES IN (9044,9045,9046,9047), +PARTITION p2262 VALUES IN (9048,9049,9050,9051), +PARTITION p2263 VALUES IN (9052,9053,9054,9055), +PARTITION p2264 VALUES IN (9056,9057,9058,9059), +PARTITION p2265 VALUES IN (9060,9061,9062,9063), +PARTITION p2266 VALUES IN (9064,9065,9066,9067), +PARTITION p2267 VALUES IN (9068,9069,9070,9071), +PARTITION p2268 VALUES IN (9072,9073,9074,9075), +PARTITION p2269 VALUES IN (9076,9077,9078,9079), +PARTITION p2270 VALUES IN (9080,9081,9082,9083), +PARTITION p2271 VALUES IN (9084,9085,9086,9087), +PARTITION p2272 VALUES IN (9088,9089,9090,9091), +PARTITION p2273 VALUES IN (9092,9093,9094,9095), +PARTITION p2274 VALUES IN (9096,9097,9098,9099), +PARTITION p2275 VALUES IN (9100,9101,9102,9103), +PARTITION p2276 VALUES IN (9104,9105,9106,9107), +PARTITION p2277 VALUES IN (9108,9109,9110,9111), +PARTITION p2278 VALUES IN (9112,9113,9114,9115), +PARTITION p2279 VALUES IN (9116,9117,9118,9119), +PARTITION p2280 VALUES IN (9120,9121,9122,9123), +PARTITION p2281 VALUES IN (9124,9125,9126,9127), +PARTITION p2282 VALUES IN (9128,9129,9130,9131), +PARTITION p2283 VALUES IN (9132,9133,9134,9135), +PARTITION p2284 VALUES IN (9136,9137,9138,9139), +PARTITION p2285 VALUES IN (9140,9141,9142,9143), +PARTITION p2286 VALUES IN (9144,9145,9146,9147), +PARTITION p2287 VALUES IN (9148,9149,9150,9151), +PARTITION p2288 VALUES IN (9152,9153,9154,9155), +PARTITION p2289 VALUES IN (9156,9157,9158,9159), +PARTITION p2290 VALUES IN (9160,9161,9162,9163), +PARTITION p2291 VALUES IN (9164,9165,9166,9167), +PARTITION p2292 VALUES IN (9168,9169,9170,9171), +PARTITION p2293 VALUES IN (9172,9173,9174,9175), +PARTITION p2294 VALUES IN (9176,9177,9178,9179), +PARTITION p2295 VALUES IN (9180,9181,9182,9183), +PARTITION p2296 VALUES IN (9184,9185,9186,9187), +PARTITION p2297 VALUES IN (9188,9189,9190,9191), +PARTITION p2298 VALUES IN (9192,9193,9194,9195), +PARTITION p2299 VALUES IN (9196,9197,9198,9199), +PARTITION p2300 VALUES IN (9200,9201,9202,9203), +PARTITION p2301 VALUES IN (9204,9205,9206,9207), +PARTITION p2302 VALUES IN (9208,9209,9210,9211), +PARTITION p2303 VALUES IN (9212,9213,9214,9215), +PARTITION p2304 VALUES IN (9216,9217,9218,9219), +PARTITION p2305 VALUES IN (9220,9221,9222,9223), +PARTITION p2306 VALUES IN (9224,9225,9226,9227), +PARTITION p2307 VALUES IN (9228,9229,9230,9231), +PARTITION p2308 VALUES IN (9232,9233,9234,9235), +PARTITION p2309 VALUES IN (9236,9237,9238,9239), +PARTITION p2310 VALUES IN (9240,9241,9242,9243), +PARTITION p2311 VALUES IN (9244,9245,9246,9247), +PARTITION p2312 VALUES IN (9248,9249,9250,9251), +PARTITION p2313 VALUES IN (9252,9253,9254,9255), +PARTITION p2314 VALUES IN (9256,9257,9258,9259), +PARTITION p2315 VALUES IN (9260,9261,9262,9263), +PARTITION p2316 VALUES IN (9264,9265,9266,9267), +PARTITION p2317 VALUES IN (9268,9269,9270,9271), +PARTITION p2318 VALUES IN (9272,9273,9274,9275), +PARTITION p2319 VALUES IN (9276,9277,9278,9279), +PARTITION p2320 VALUES IN (9280,9281,9282,9283), +PARTITION p2321 VALUES IN (9284,9285,9286,9287), +PARTITION p2322 VALUES IN (9288,9289,9290,9291), +PARTITION p2323 VALUES IN (9292,9293,9294,9295), +PARTITION p2324 VALUES IN (9296,9297,9298,9299), +PARTITION p2325 VALUES IN (9300,9301,9302,9303), +PARTITION p2326 VALUES IN (9304,9305,9306,9307), +PARTITION p2327 VALUES IN (9308,9309,9310,9311), +PARTITION p2328 VALUES IN (9312,9313,9314,9315), +PARTITION p2329 VALUES IN (9316,9317,9318,9319), +PARTITION p2330 VALUES IN (9320,9321,9322,9323), +PARTITION p2331 VALUES IN (9324,9325,9326,9327), +PARTITION p2332 VALUES IN (9328,9329,9330,9331), +PARTITION p2333 VALUES IN (9332,9333,9334,9335), +PARTITION p2334 VALUES IN (9336,9337,9338,9339), +PARTITION p2335 VALUES IN (9340,9341,9342,9343), +PARTITION p2336 VALUES IN (9344,9345,9346,9347), +PARTITION p2337 VALUES IN (9348,9349,9350,9351), +PARTITION p2338 VALUES IN (9352,9353,9354,9355), +PARTITION p2339 VALUES IN (9356,9357,9358,9359), +PARTITION p2340 VALUES IN (9360,9361,9362,9363), +PARTITION p2341 VALUES IN (9364,9365,9366,9367), +PARTITION p2342 VALUES IN (9368,9369,9370,9371), +PARTITION p2343 VALUES IN (9372,9373,9374,9375), +PARTITION p2344 VALUES IN (9376,9377,9378,9379), +PARTITION p2345 VALUES IN (9380,9381,9382,9383), +PARTITION p2346 VALUES IN (9384,9385,9386,9387), +PARTITION p2347 VALUES IN (9388,9389,9390,9391), +PARTITION p2348 VALUES IN (9392,9393,9394,9395), +PARTITION p2349 VALUES IN (9396,9397,9398,9399), +PARTITION p2350 VALUES IN (9400,9401,9402,9403), +PARTITION p2351 VALUES IN (9404,9405,9406,9407), +PARTITION p2352 VALUES IN (9408,9409,9410,9411), +PARTITION p2353 VALUES IN (9412,9413,9414,9415), +PARTITION p2354 VALUES IN (9416,9417,9418,9419), +PARTITION p2355 VALUES IN (9420,9421,9422,9423), +PARTITION p2356 VALUES IN (9424,9425,9426,9427), +PARTITION p2357 VALUES IN (9428,9429,9430,9431), +PARTITION p2358 VALUES IN (9432,9433,9434,9435), +PARTITION p2359 VALUES IN (9436,9437,9438,9439), +PARTITION p2360 VALUES IN (9440,9441,9442,9443), +PARTITION p2361 VALUES IN (9444,9445,9446,9447), +PARTITION p2362 VALUES IN (9448,9449,9450,9451), +PARTITION p2363 VALUES IN (9452,9453,9454,9455), +PARTITION p2364 VALUES IN (9456,9457,9458,9459), +PARTITION p2365 VALUES IN (9460,9461,9462,9463), +PARTITION p2366 VALUES IN (9464,9465,9466,9467), +PARTITION p2367 VALUES IN (9468,9469,9470,9471), +PARTITION p2368 VALUES IN (9472,9473,9474,9475), +PARTITION p2369 VALUES IN (9476,9477,9478,9479), +PARTITION p2370 VALUES IN (9480,9481,9482,9483), +PARTITION p2371 VALUES IN (9484,9485,9486,9487), +PARTITION p2372 VALUES IN (9488,9489,9490,9491), +PARTITION p2373 VALUES IN (9492,9493,9494,9495), +PARTITION p2374 VALUES IN (9496,9497,9498,9499), +PARTITION p2375 VALUES IN (9500,9501,9502,9503), +PARTITION p2376 VALUES IN (9504,9505,9506,9507), +PARTITION p2377 VALUES IN (9508,9509,9510,9511), +PARTITION p2378 VALUES IN (9512,9513,9514,9515), +PARTITION p2379 VALUES IN (9516,9517,9518,9519), +PARTITION p2380 VALUES IN (9520,9521,9522,9523), +PARTITION p2381 VALUES IN (9524,9525,9526,9527), +PARTITION p2382 VALUES IN (9528,9529,9530,9531), +PARTITION p2383 VALUES IN (9532,9533,9534,9535), +PARTITION p2384 VALUES IN (9536,9537,9538,9539), +PARTITION p2385 VALUES IN (9540,9541,9542,9543), +PARTITION p2386 VALUES IN (9544,9545,9546,9547), +PARTITION p2387 VALUES IN (9548,9549,9550,9551), +PARTITION p2388 VALUES IN (9552,9553,9554,9555), +PARTITION p2389 VALUES IN (9556,9557,9558,9559), +PARTITION p2390 VALUES IN (9560,9561,9562,9563), +PARTITION p2391 VALUES IN (9564,9565,9566,9567), +PARTITION p2392 VALUES IN (9568,9569,9570,9571), +PARTITION p2393 VALUES IN (9572,9573,9574,9575), +PARTITION p2394 VALUES IN (9576,9577,9578,9579), +PARTITION p2395 VALUES IN (9580,9581,9582,9583), +PARTITION p2396 VALUES IN (9584,9585,9586,9587), +PARTITION p2397 VALUES IN (9588,9589,9590,9591), +PARTITION p2398 VALUES IN (9592,9593,9594,9595), +PARTITION p2399 VALUES IN (9596,9597,9598,9599), +PARTITION p2400 VALUES IN (9600,9601,9602,9603), +PARTITION p2401 VALUES IN (9604,9605,9606,9607), +PARTITION p2402 VALUES IN (9608,9609,9610,9611), +PARTITION p2403 VALUES IN (9612,9613,9614,9615), +PARTITION p2404 VALUES IN (9616,9617,9618,9619), +PARTITION p2405 VALUES IN (9620,9621,9622,9623), +PARTITION p2406 VALUES IN (9624,9625,9626,9627), +PARTITION p2407 VALUES IN (9628,9629,9630,9631), +PARTITION p2408 VALUES IN (9632,9633,9634,9635), +PARTITION p2409 VALUES IN (9636,9637,9638,9639), +PARTITION p2410 VALUES IN (9640,9641,9642,9643), +PARTITION p2411 VALUES IN (9644,9645,9646,9647), +PARTITION p2412 VALUES IN (9648,9649,9650,9651), +PARTITION p2413 VALUES IN (9652,9653,9654,9655), +PARTITION p2414 VALUES IN (9656,9657,9658,9659), +PARTITION p2415 VALUES IN (9660,9661,9662,9663), +PARTITION p2416 VALUES IN (9664,9665,9666,9667), +PARTITION p2417 VALUES IN (9668,9669,9670,9671), +PARTITION p2418 VALUES IN (9672,9673,9674,9675), +PARTITION p2419 VALUES IN (9676,9677,9678,9679), +PARTITION p2420 VALUES IN (9680,9681,9682,9683), +PARTITION p2421 VALUES IN (9684,9685,9686,9687), +PARTITION p2422 VALUES IN (9688,9689,9690,9691), +PARTITION p2423 VALUES IN (9692,9693,9694,9695), +PARTITION p2424 VALUES IN (9696,9697,9698,9699), +PARTITION p2425 VALUES IN (9700,9701,9702,9703), +PARTITION p2426 VALUES IN (9704,9705,9706,9707), +PARTITION p2427 VALUES IN (9708,9709,9710,9711), +PARTITION p2428 VALUES IN (9712,9713,9714,9715), +PARTITION p2429 VALUES IN (9716,9717,9718,9719), +PARTITION p2430 VALUES IN (9720,9721,9722,9723), +PARTITION p2431 VALUES IN (9724,9725,9726,9727), +PARTITION p2432 VALUES IN (9728,9729,9730,9731), +PARTITION p2433 VALUES IN (9732,9733,9734,9735), +PARTITION p2434 VALUES IN (9736,9737,9738,9739), +PARTITION p2435 VALUES IN (9740,9741,9742,9743), +PARTITION p2436 VALUES IN (9744,9745,9746,9747), +PARTITION p2437 VALUES IN (9748,9749,9750,9751), +PARTITION p2438 VALUES IN (9752,9753,9754,9755), +PARTITION p2439 VALUES IN (9756,9757,9758,9759), +PARTITION p2440 VALUES IN (9760,9761,9762,9763), +PARTITION p2441 VALUES IN (9764,9765,9766,9767), +PARTITION p2442 VALUES IN (9768,9769,9770,9771), +PARTITION p2443 VALUES IN (9772,9773,9774,9775), +PARTITION p2444 VALUES IN (9776,9777,9778,9779), +PARTITION p2445 VALUES IN (9780,9781,9782,9783), +PARTITION p2446 VALUES IN (9784,9785,9786,9787), +PARTITION p2447 VALUES IN (9788,9789,9790,9791), +PARTITION p2448 VALUES IN (9792,9793,9794,9795), +PARTITION p2449 VALUES IN (9796,9797,9798,9799), +PARTITION p2450 VALUES IN (9800,9801,9802,9803), +PARTITION p2451 VALUES IN (9804,9805,9806,9807), +PARTITION p2452 VALUES IN (9808,9809,9810,9811), +PARTITION p2453 VALUES IN (9812,9813,9814,9815), +PARTITION p2454 VALUES IN (9816,9817,9818,9819), +PARTITION p2455 VALUES IN (9820,9821,9822,9823), +PARTITION p2456 VALUES IN (9824,9825,9826,9827), +PARTITION p2457 VALUES IN (9828,9829,9830,9831), +PARTITION p2458 VALUES IN (9832,9833,9834,9835), +PARTITION p2459 VALUES IN (9836,9837,9838,9839), +PARTITION p2460 VALUES IN (9840,9841,9842,9843), +PARTITION p2461 VALUES IN (9844,9845,9846,9847), +PARTITION p2462 VALUES IN (9848,9849,9850,9851), +PARTITION p2463 VALUES IN (9852,9853,9854,9855), +PARTITION p2464 VALUES IN (9856,9857,9858,9859), +PARTITION p2465 VALUES IN (9860,9861,9862,9863), +PARTITION p2466 VALUES IN (9864,9865,9866,9867), +PARTITION p2467 VALUES IN (9868,9869,9870,9871), +PARTITION p2468 VALUES IN (9872,9873,9874,9875), +PARTITION p2469 VALUES IN (9876,9877,9878,9879), +PARTITION p2470 VALUES IN (9880,9881,9882,9883), +PARTITION p2471 VALUES IN (9884,9885,9886,9887), +PARTITION p2472 VALUES IN (9888,9889,9890,9891), +PARTITION p2473 VALUES IN (9892,9893,9894,9895), +PARTITION p2474 VALUES IN (9896,9897,9898,9899), +PARTITION p2475 VALUES IN (9900,9901,9902,9903), +PARTITION p2476 VALUES IN (9904,9905,9906,9907), +PARTITION p2477 VALUES IN (9908,9909,9910,9911), +PARTITION p2478 VALUES IN (9912,9913,9914,9915), +PARTITION p2479 VALUES IN (9916,9917,9918,9919), +PARTITION p2480 VALUES IN (9920,9921,9922,9923), +PARTITION p2481 VALUES IN (9924,9925,9926,9927), +PARTITION p2482 VALUES IN (9928,9929,9930,9931), +PARTITION p2483 VALUES IN (9932,9933,9934,9935), +PARTITION p2484 VALUES IN (9936,9937,9938,9939), +PARTITION p2485 VALUES IN (9940,9941,9942,9943), +PARTITION p2486 VALUES IN (9944,9945,9946,9947), +PARTITION p2487 VALUES IN (9948,9949,9950,9951), +PARTITION p2488 VALUES IN (9952,9953,9954,9955), +PARTITION p2489 VALUES IN (9956,9957,9958,9959), +PARTITION p2490 VALUES IN (9960,9961,9962,9963), +PARTITION p2491 VALUES IN (9964,9965,9966,9967), +PARTITION p2492 VALUES IN (9968,9969,9970,9971), +PARTITION p2493 VALUES IN (9972,9973,9974,9975), +PARTITION p2494 VALUES IN (9976,9977,9978,9979), +PARTITION p2495 VALUES IN (9980,9981,9982,9983), +PARTITION p2496 VALUES IN (9984,9985,9986,9987), +PARTITION p2497 VALUES IN (9988,9989,9990,9991), +PARTITION p2498 VALUES IN (9992,9993,9994,9995), +PARTITION p2499 VALUES IN (9996,9997,9998,9999), +PARTITION p2500 VALUES IN (10000,10001,10002,10003), +PARTITION p2501 VALUES IN (10004,10005,10006,10007), +PARTITION p2502 VALUES IN (10008,10009,10010,10011), +PARTITION p2503 VALUES IN (10012,10013,10014,10015), +PARTITION p2504 VALUES IN (10016,10017,10018,10019), +PARTITION p2505 VALUES IN (10020,10021,10022,10023), +PARTITION p2506 VALUES IN (10024,10025,10026,10027), +PARTITION p2507 VALUES IN (10028,10029,10030,10031), +PARTITION p2508 VALUES IN (10032,10033,10034,10035), +PARTITION p2509 VALUES IN (10036,10037,10038,10039), +PARTITION p2510 VALUES IN (10040,10041,10042,10043), +PARTITION p2511 VALUES IN (10044,10045,10046,10047), +PARTITION p2512 VALUES IN (10048,10049,10050,10051), +PARTITION p2513 VALUES IN (10052,10053,10054,10055), +PARTITION p2514 VALUES IN (10056,10057,10058,10059), +PARTITION p2515 VALUES IN (10060,10061,10062,10063), +PARTITION p2516 VALUES IN (10064,10065,10066,10067), +PARTITION p2517 VALUES IN (10068,10069,10070,10071), +PARTITION p2518 VALUES IN (10072,10073,10074,10075), +PARTITION p2519 VALUES IN (10076,10077,10078,10079), +PARTITION p2520 VALUES IN (10080,10081,10082,10083), +PARTITION p2521 VALUES IN (10084,10085,10086,10087), +PARTITION p2522 VALUES IN (10088,10089,10090,10091), +PARTITION p2523 VALUES IN (10092,10093,10094,10095), +PARTITION p2524 VALUES IN (10096,10097,10098,10099), +PARTITION p2525 VALUES IN (10100,10101,10102,10103), +PARTITION p2526 VALUES IN (10104,10105,10106,10107), +PARTITION p2527 VALUES IN (10108,10109,10110,10111), +PARTITION p2528 VALUES IN (10112,10113,10114,10115), +PARTITION p2529 VALUES IN (10116,10117,10118,10119), +PARTITION p2530 VALUES IN (10120,10121,10122,10123), +PARTITION p2531 VALUES IN (10124,10125,10126,10127), +PARTITION p2532 VALUES IN (10128,10129,10130,10131), +PARTITION p2533 VALUES IN (10132,10133,10134,10135), +PARTITION p2534 VALUES IN (10136,10137,10138,10139), +PARTITION p2535 VALUES IN (10140,10141,10142,10143), +PARTITION p2536 VALUES IN (10144,10145,10146,10147), +PARTITION p2537 VALUES IN (10148,10149,10150,10151), +PARTITION p2538 VALUES IN (10152,10153,10154,10155), +PARTITION p2539 VALUES IN (10156,10157,10158,10159), +PARTITION p2540 VALUES IN (10160,10161,10162,10163), +PARTITION p2541 VALUES IN (10164,10165,10166,10167), +PARTITION p2542 VALUES IN (10168,10169,10170,10171), +PARTITION p2543 VALUES IN (10172,10173,10174,10175), +PARTITION p2544 VALUES IN (10176,10177,10178,10179), +PARTITION p2545 VALUES IN (10180,10181,10182,10183), +PARTITION p2546 VALUES IN (10184,10185,10186,10187), +PARTITION p2547 VALUES IN (10188,10189,10190,10191), +PARTITION p2548 VALUES IN (10192,10193,10194,10195), +PARTITION p2549 VALUES IN (10196,10197,10198,10199), +PARTITION p2550 VALUES IN (10200,10201,10202,10203), +PARTITION p2551 VALUES IN (10204,10205,10206,10207), +PARTITION p2552 VALUES IN (10208,10209,10210,10211), +PARTITION p2553 VALUES IN (10212,10213,10214,10215), +PARTITION p2554 VALUES IN (10216,10217,10218,10219), +PARTITION p2555 VALUES IN (10220,10221,10222,10223), +PARTITION p2556 VALUES IN (10224,10225,10226,10227), +PARTITION p2557 VALUES IN (10228,10229,10230,10231), +PARTITION p2558 VALUES IN (10232,10233,10234,10235), +PARTITION p2559 VALUES IN (10236,10237,10238,10239), +PARTITION p2560 VALUES IN (10240,10241,10242,10243), +PARTITION p2561 VALUES IN (10244,10245,10246,10247), +PARTITION p2562 VALUES IN (10248,10249,10250,10251), +PARTITION p2563 VALUES IN (10252,10253,10254,10255), +PARTITION p2564 VALUES IN (10256,10257,10258,10259), +PARTITION p2565 VALUES IN (10260,10261,10262,10263), +PARTITION p2566 VALUES IN (10264,10265,10266,10267), +PARTITION p2567 VALUES IN (10268,10269,10270,10271), +PARTITION p2568 VALUES IN (10272,10273,10274,10275), +PARTITION p2569 VALUES IN (10276,10277,10278,10279), +PARTITION p2570 VALUES IN (10280,10281,10282,10283), +PARTITION p2571 VALUES IN (10284,10285,10286,10287), +PARTITION p2572 VALUES IN (10288,10289,10290,10291), +PARTITION p2573 VALUES IN (10292,10293,10294,10295), +PARTITION p2574 VALUES IN (10296,10297,10298,10299), +PARTITION p2575 VALUES IN (10300,10301,10302,10303), +PARTITION p2576 VALUES IN (10304,10305,10306,10307), +PARTITION p2577 VALUES IN (10308,10309,10310,10311), +PARTITION p2578 VALUES IN (10312,10313,10314,10315), +PARTITION p2579 VALUES IN (10316,10317,10318,10319), +PARTITION p2580 VALUES IN (10320,10321,10322,10323), +PARTITION p2581 VALUES IN (10324,10325,10326,10327), +PARTITION p2582 VALUES IN (10328,10329,10330,10331), +PARTITION p2583 VALUES IN (10332,10333,10334,10335), +PARTITION p2584 VALUES IN (10336,10337,10338,10339), +PARTITION p2585 VALUES IN (10340,10341,10342,10343), +PARTITION p2586 VALUES IN (10344,10345,10346,10347), +PARTITION p2587 VALUES IN (10348,10349,10350,10351), +PARTITION p2588 VALUES IN (10352,10353,10354,10355), +PARTITION p2589 VALUES IN (10356,10357,10358,10359), +PARTITION p2590 VALUES IN (10360,10361,10362,10363), +PARTITION p2591 VALUES IN (10364,10365,10366,10367), +PARTITION p2592 VALUES IN (10368,10369,10370,10371), +PARTITION p2593 VALUES IN (10372,10373,10374,10375), +PARTITION p2594 VALUES IN (10376,10377,10378,10379), +PARTITION p2595 VALUES IN (10380,10381,10382,10383), +PARTITION p2596 VALUES IN (10384,10385,10386,10387), +PARTITION p2597 VALUES IN (10388,10389,10390,10391), +PARTITION p2598 VALUES IN (10392,10393,10394,10395), +PARTITION p2599 VALUES IN (10396,10397,10398,10399), +PARTITION p2600 VALUES IN (10400,10401,10402,10403), +PARTITION p2601 VALUES IN (10404,10405,10406,10407), +PARTITION p2602 VALUES IN (10408,10409,10410,10411), +PARTITION p2603 VALUES IN (10412,10413,10414,10415), +PARTITION p2604 VALUES IN (10416,10417,10418,10419), +PARTITION p2605 VALUES IN (10420,10421,10422,10423), +PARTITION p2606 VALUES IN (10424,10425,10426,10427), +PARTITION p2607 VALUES IN (10428,10429,10430,10431), +PARTITION p2608 VALUES IN (10432,10433,10434,10435), +PARTITION p2609 VALUES IN (10436,10437,10438,10439), +PARTITION p2610 VALUES IN (10440,10441,10442,10443), +PARTITION p2611 VALUES IN (10444,10445,10446,10447), +PARTITION p2612 VALUES IN (10448,10449,10450,10451), +PARTITION p2613 VALUES IN (10452,10453,10454,10455), +PARTITION p2614 VALUES IN (10456,10457,10458,10459), +PARTITION p2615 VALUES IN (10460,10461,10462,10463), +PARTITION p2616 VALUES IN (10464,10465,10466,10467), +PARTITION p2617 VALUES IN (10468,10469,10470,10471), +PARTITION p2618 VALUES IN (10472,10473,10474,10475), +PARTITION p2619 VALUES IN (10476,10477,10478,10479), +PARTITION p2620 VALUES IN (10480,10481,10482,10483), +PARTITION p2621 VALUES IN (10484,10485,10486,10487), +PARTITION p2622 VALUES IN (10488,10489,10490,10491), +PARTITION p2623 VALUES IN (10492,10493,10494,10495), +PARTITION p2624 VALUES IN (10496,10497,10498,10499), +PARTITION p2625 VALUES IN (10500,10501,10502,10503), +PARTITION p2626 VALUES IN (10504,10505,10506,10507), +PARTITION p2627 VALUES IN (10508,10509,10510,10511), +PARTITION p2628 VALUES IN (10512,10513,10514,10515), +PARTITION p2629 VALUES IN (10516,10517,10518,10519), +PARTITION p2630 VALUES IN (10520,10521,10522,10523), +PARTITION p2631 VALUES IN (10524,10525,10526,10527), +PARTITION p2632 VALUES IN (10528,10529,10530,10531), +PARTITION p2633 VALUES IN (10532,10533,10534,10535), +PARTITION p2634 VALUES IN (10536,10537,10538,10539), +PARTITION p2635 VALUES IN (10540,10541,10542,10543), +PARTITION p2636 VALUES IN (10544,10545,10546,10547), +PARTITION p2637 VALUES IN (10548,10549,10550,10551), +PARTITION p2638 VALUES IN (10552,10553,10554,10555), +PARTITION p2639 VALUES IN (10556,10557,10558,10559), +PARTITION p2640 VALUES IN (10560,10561,10562,10563), +PARTITION p2641 VALUES IN (10564,10565,10566,10567), +PARTITION p2642 VALUES IN (10568,10569,10570,10571), +PARTITION p2643 VALUES IN (10572,10573,10574,10575), +PARTITION p2644 VALUES IN (10576,10577,10578,10579), +PARTITION p2645 VALUES IN (10580,10581,10582,10583), +PARTITION p2646 VALUES IN (10584,10585,10586,10587), +PARTITION p2647 VALUES IN (10588,10589,10590,10591), +PARTITION p2648 VALUES IN (10592,10593,10594,10595), +PARTITION p2649 VALUES IN (10596,10597,10598,10599), +PARTITION p2650 VALUES IN (10600,10601,10602,10603), +PARTITION p2651 VALUES IN (10604,10605,10606,10607), +PARTITION p2652 VALUES IN (10608,10609,10610,10611), +PARTITION p2653 VALUES IN (10612,10613,10614,10615), +PARTITION p2654 VALUES IN (10616,10617,10618,10619), +PARTITION p2655 VALUES IN (10620,10621,10622,10623), +PARTITION p2656 VALUES IN (10624,10625,10626,10627), +PARTITION p2657 VALUES IN (10628,10629,10630,10631), +PARTITION p2658 VALUES IN (10632,10633,10634,10635), +PARTITION p2659 VALUES IN (10636,10637,10638,10639), +PARTITION p2660 VALUES IN (10640,10641,10642,10643), +PARTITION p2661 VALUES IN (10644,10645,10646,10647), +PARTITION p2662 VALUES IN (10648,10649,10650,10651), +PARTITION p2663 VALUES IN (10652,10653,10654,10655), +PARTITION p2664 VALUES IN (10656,10657,10658,10659), +PARTITION p2665 VALUES IN (10660,10661,10662,10663), +PARTITION p2666 VALUES IN (10664,10665,10666,10667), +PARTITION p2667 VALUES IN (10668,10669,10670,10671), +PARTITION p2668 VALUES IN (10672,10673,10674,10675), +PARTITION p2669 VALUES IN (10676,10677,10678,10679), +PARTITION p2670 VALUES IN (10680,10681,10682,10683), +PARTITION p2671 VALUES IN (10684,10685,10686,10687), +PARTITION p2672 VALUES IN (10688,10689,10690,10691), +PARTITION p2673 VALUES IN (10692,10693,10694,10695), +PARTITION p2674 VALUES IN (10696,10697,10698,10699), +PARTITION p2675 VALUES IN (10700,10701,10702,10703), +PARTITION p2676 VALUES IN (10704,10705,10706,10707), +PARTITION p2677 VALUES IN (10708,10709,10710,10711), +PARTITION p2678 VALUES IN (10712,10713,10714,10715), +PARTITION p2679 VALUES IN (10716,10717,10718,10719), +PARTITION p2680 VALUES IN (10720,10721,10722,10723), +PARTITION p2681 VALUES IN (10724,10725,10726,10727), +PARTITION p2682 VALUES IN (10728,10729,10730,10731), +PARTITION p2683 VALUES IN (10732,10733,10734,10735), +PARTITION p2684 VALUES IN (10736,10737,10738,10739), +PARTITION p2685 VALUES IN (10740,10741,10742,10743), +PARTITION p2686 VALUES IN (10744,10745,10746,10747), +PARTITION p2687 VALUES IN (10748,10749,10750,10751), +PARTITION p2688 VALUES IN (10752,10753,10754,10755), +PARTITION p2689 VALUES IN (10756,10757,10758,10759), +PARTITION p2690 VALUES IN (10760,10761,10762,10763), +PARTITION p2691 VALUES IN (10764,10765,10766,10767), +PARTITION p2692 VALUES IN (10768,10769,10770,10771), +PARTITION p2693 VALUES IN (10772,10773,10774,10775), +PARTITION p2694 VALUES IN (10776,10777,10778,10779), +PARTITION p2695 VALUES IN (10780,10781,10782,10783), +PARTITION p2696 VALUES IN (10784,10785,10786,10787), +PARTITION p2697 VALUES IN (10788,10789,10790,10791), +PARTITION p2698 VALUES IN (10792,10793,10794,10795), +PARTITION p2699 VALUES IN (10796,10797,10798,10799), +PARTITION p2700 VALUES IN (10800,10801,10802,10803), +PARTITION p2701 VALUES IN (10804,10805,10806,10807), +PARTITION p2702 VALUES IN (10808,10809,10810,10811), +PARTITION p2703 VALUES IN (10812,10813,10814,10815), +PARTITION p2704 VALUES IN (10816,10817,10818,10819), +PARTITION p2705 VALUES IN (10820,10821,10822,10823), +PARTITION p2706 VALUES IN (10824,10825,10826,10827), +PARTITION p2707 VALUES IN (10828,10829,10830,10831), +PARTITION p2708 VALUES IN (10832,10833,10834,10835), +PARTITION p2709 VALUES IN (10836,10837,10838,10839), +PARTITION p2710 VALUES IN (10840,10841,10842,10843), +PARTITION p2711 VALUES IN (10844,10845,10846,10847), +PARTITION p2712 VALUES IN (10848,10849,10850,10851), +PARTITION p2713 VALUES IN (10852,10853,10854,10855), +PARTITION p2714 VALUES IN (10856,10857,10858,10859), +PARTITION p2715 VALUES IN (10860,10861,10862,10863), +PARTITION p2716 VALUES IN (10864,10865,10866,10867), +PARTITION p2717 VALUES IN (10868,10869,10870,10871), +PARTITION p2718 VALUES IN (10872,10873,10874,10875), +PARTITION p2719 VALUES IN (10876,10877,10878,10879), +PARTITION p2720 VALUES IN (10880,10881,10882,10883), +PARTITION p2721 VALUES IN (10884,10885,10886,10887), +PARTITION p2722 VALUES IN (10888,10889,10890,10891), +PARTITION p2723 VALUES IN (10892,10893,10894,10895), +PARTITION p2724 VALUES IN (10896,10897,10898,10899), +PARTITION p2725 VALUES IN (10900,10901,10902,10903), +PARTITION p2726 VALUES IN (10904,10905,10906,10907), +PARTITION p2727 VALUES IN (10908,10909,10910,10911), +PARTITION p2728 VALUES IN (10912,10913,10914,10915), +PARTITION p2729 VALUES IN (10916,10917,10918,10919), +PARTITION p2730 VALUES IN (10920,10921,10922,10923), +PARTITION p2731 VALUES IN (10924,10925,10926,10927), +PARTITION p2732 VALUES IN (10928,10929,10930,10931), +PARTITION p2733 VALUES IN (10932,10933,10934,10935), +PARTITION p2734 VALUES IN (10936,10937,10938,10939), +PARTITION p2735 VALUES IN (10940,10941,10942,10943), +PARTITION p2736 VALUES IN (10944,10945,10946,10947), +PARTITION p2737 VALUES IN (10948,10949,10950,10951), +PARTITION p2738 VALUES IN (10952,10953,10954,10955), +PARTITION p2739 VALUES IN (10956,10957,10958,10959), +PARTITION p2740 VALUES IN (10960,10961,10962,10963), +PARTITION p2741 VALUES IN (10964,10965,10966,10967), +PARTITION p2742 VALUES IN (10968,10969,10970,10971), +PARTITION p2743 VALUES IN (10972,10973,10974,10975), +PARTITION p2744 VALUES IN (10976,10977,10978,10979), +PARTITION p2745 VALUES IN (10980,10981,10982,10983), +PARTITION p2746 VALUES IN (10984,10985,10986,10987), +PARTITION p2747 VALUES IN (10988,10989,10990,10991), +PARTITION p2748 VALUES IN (10992,10993,10994,10995), +PARTITION p2749 VALUES IN (10996,10997,10998,10999), +PARTITION p2750 VALUES IN (11000,11001,11002,11003), +PARTITION p2751 VALUES IN (11004,11005,11006,11007), +PARTITION p2752 VALUES IN (11008,11009,11010,11011), +PARTITION p2753 VALUES IN (11012,11013,11014,11015), +PARTITION p2754 VALUES IN (11016,11017,11018,11019), +PARTITION p2755 VALUES IN (11020,11021,11022,11023), +PARTITION p2756 VALUES IN (11024,11025,11026,11027), +PARTITION p2757 VALUES IN (11028,11029,11030,11031), +PARTITION p2758 VALUES IN (11032,11033,11034,11035), +PARTITION p2759 VALUES IN (11036,11037,11038,11039), +PARTITION p2760 VALUES IN (11040,11041,11042,11043), +PARTITION p2761 VALUES IN (11044,11045,11046,11047), +PARTITION p2762 VALUES IN (11048,11049,11050,11051), +PARTITION p2763 VALUES IN (11052,11053,11054,11055), +PARTITION p2764 VALUES IN (11056,11057,11058,11059), +PARTITION p2765 VALUES IN (11060,11061,11062,11063), +PARTITION p2766 VALUES IN (11064,11065,11066,11067), +PARTITION p2767 VALUES IN (11068,11069,11070,11071), +PARTITION p2768 VALUES IN (11072,11073,11074,11075), +PARTITION p2769 VALUES IN (11076,11077,11078,11079), +PARTITION p2770 VALUES IN (11080,11081,11082,11083), +PARTITION p2771 VALUES IN (11084,11085,11086,11087), +PARTITION p2772 VALUES IN (11088,11089,11090,11091), +PARTITION p2773 VALUES IN (11092,11093,11094,11095), +PARTITION p2774 VALUES IN (11096,11097,11098,11099), +PARTITION p2775 VALUES IN (11100,11101,11102,11103), +PARTITION p2776 VALUES IN (11104,11105,11106,11107), +PARTITION p2777 VALUES IN (11108,11109,11110,11111), +PARTITION p2778 VALUES IN (11112,11113,11114,11115), +PARTITION p2779 VALUES IN (11116,11117,11118,11119), +PARTITION p2780 VALUES IN (11120,11121,11122,11123), +PARTITION p2781 VALUES IN (11124,11125,11126,11127), +PARTITION p2782 VALUES IN (11128,11129,11130,11131), +PARTITION p2783 VALUES IN (11132,11133,11134,11135), +PARTITION p2784 VALUES IN (11136,11137,11138,11139), +PARTITION p2785 VALUES IN (11140,11141,11142,11143), +PARTITION p2786 VALUES IN (11144,11145,11146,11147), +PARTITION p2787 VALUES IN (11148,11149,11150,11151), +PARTITION p2788 VALUES IN (11152,11153,11154,11155), +PARTITION p2789 VALUES IN (11156,11157,11158,11159), +PARTITION p2790 VALUES IN (11160,11161,11162,11163), +PARTITION p2791 VALUES IN (11164,11165,11166,11167), +PARTITION p2792 VALUES IN (11168,11169,11170,11171), +PARTITION p2793 VALUES IN (11172,11173,11174,11175), +PARTITION p2794 VALUES IN (11176,11177,11178,11179), +PARTITION p2795 VALUES IN (11180,11181,11182,11183), +PARTITION p2796 VALUES IN (11184,11185,11186,11187), +PARTITION p2797 VALUES IN (11188,11189,11190,11191), +PARTITION p2798 VALUES IN (11192,11193,11194,11195), +PARTITION p2799 VALUES IN (11196,11197,11198,11199), +PARTITION p2800 VALUES IN (11200,11201,11202,11203), +PARTITION p2801 VALUES IN (11204,11205,11206,11207), +PARTITION p2802 VALUES IN (11208,11209,11210,11211), +PARTITION p2803 VALUES IN (11212,11213,11214,11215), +PARTITION p2804 VALUES IN (11216,11217,11218,11219), +PARTITION p2805 VALUES IN (11220,11221,11222,11223), +PARTITION p2806 VALUES IN (11224,11225,11226,11227), +PARTITION p2807 VALUES IN (11228,11229,11230,11231), +PARTITION p2808 VALUES IN (11232,11233,11234,11235), +PARTITION p2809 VALUES IN (11236,11237,11238,11239), +PARTITION p2810 VALUES IN (11240,11241,11242,11243), +PARTITION p2811 VALUES IN (11244,11245,11246,11247), +PARTITION p2812 VALUES IN (11248,11249,11250,11251), +PARTITION p2813 VALUES IN (11252,11253,11254,11255), +PARTITION p2814 VALUES IN (11256,11257,11258,11259), +PARTITION p2815 VALUES IN (11260,11261,11262,11263), +PARTITION p2816 VALUES IN (11264,11265,11266,11267), +PARTITION p2817 VALUES IN (11268,11269,11270,11271), +PARTITION p2818 VALUES IN (11272,11273,11274,11275), +PARTITION p2819 VALUES IN (11276,11277,11278,11279), +PARTITION p2820 VALUES IN (11280,11281,11282,11283), +PARTITION p2821 VALUES IN (11284,11285,11286,11287), +PARTITION p2822 VALUES IN (11288,11289,11290,11291), +PARTITION p2823 VALUES IN (11292,11293,11294,11295), +PARTITION p2824 VALUES IN (11296,11297,11298,11299), +PARTITION p2825 VALUES IN (11300,11301,11302,11303), +PARTITION p2826 VALUES IN (11304,11305,11306,11307), +PARTITION p2827 VALUES IN (11308,11309,11310,11311), +PARTITION p2828 VALUES IN (11312,11313,11314,11315), +PARTITION p2829 VALUES IN (11316,11317,11318,11319), +PARTITION p2830 VALUES IN (11320,11321,11322,11323), +PARTITION p2831 VALUES IN (11324,11325,11326,11327), +PARTITION p2832 VALUES IN (11328,11329,11330,11331), +PARTITION p2833 VALUES IN (11332,11333,11334,11335), +PARTITION p2834 VALUES IN (11336,11337,11338,11339), +PARTITION p2835 VALUES IN (11340,11341,11342,11343), +PARTITION p2836 VALUES IN (11344,11345,11346,11347), +PARTITION p2837 VALUES IN (11348,11349,11350,11351), +PARTITION p2838 VALUES IN (11352,11353,11354,11355), +PARTITION p2839 VALUES IN (11356,11357,11358,11359), +PARTITION p2840 VALUES IN (11360,11361,11362,11363), +PARTITION p2841 VALUES IN (11364,11365,11366,11367), +PARTITION p2842 VALUES IN (11368,11369,11370,11371), +PARTITION p2843 VALUES IN (11372,11373,11374,11375), +PARTITION p2844 VALUES IN (11376,11377,11378,11379), +PARTITION p2845 VALUES IN (11380,11381,11382,11383), +PARTITION p2846 VALUES IN (11384,11385,11386,11387), +PARTITION p2847 VALUES IN (11388,11389,11390,11391), +PARTITION p2848 VALUES IN (11392,11393,11394,11395), +PARTITION p2849 VALUES IN (11396,11397,11398,11399), +PARTITION p2850 VALUES IN (11400,11401,11402,11403), +PARTITION p2851 VALUES IN (11404,11405,11406,11407), +PARTITION p2852 VALUES IN (11408,11409,11410,11411), +PARTITION p2853 VALUES IN (11412,11413,11414,11415), +PARTITION p2854 VALUES IN (11416,11417,11418,11419), +PARTITION p2855 VALUES IN (11420,11421,11422,11423), +PARTITION p2856 VALUES IN (11424,11425,11426,11427), +PARTITION p2857 VALUES IN (11428,11429,11430,11431), +PARTITION p2858 VALUES IN (11432,11433,11434,11435), +PARTITION p2859 VALUES IN (11436,11437,11438,11439), +PARTITION p2860 VALUES IN (11440,11441,11442,11443), +PARTITION p2861 VALUES IN (11444,11445,11446,11447), +PARTITION p2862 VALUES IN (11448,11449,11450,11451), +PARTITION p2863 VALUES IN (11452,11453,11454,11455), +PARTITION p2864 VALUES IN (11456,11457,11458,11459), +PARTITION p2865 VALUES IN (11460,11461,11462,11463), +PARTITION p2866 VALUES IN (11464,11465,11466,11467), +PARTITION p2867 VALUES IN (11468,11469,11470,11471), +PARTITION p2868 VALUES IN (11472,11473,11474,11475), +PARTITION p2869 VALUES IN (11476,11477,11478,11479), +PARTITION p2870 VALUES IN (11480,11481,11482,11483), +PARTITION p2871 VALUES IN (11484,11485,11486,11487), +PARTITION p2872 VALUES IN (11488,11489,11490,11491), +PARTITION p2873 VALUES IN (11492,11493,11494,11495), +PARTITION p2874 VALUES IN (11496,11497,11498,11499), +PARTITION p2875 VALUES IN (11500,11501,11502,11503), +PARTITION p2876 VALUES IN (11504,11505,11506,11507), +PARTITION p2877 VALUES IN (11508,11509,11510,11511), +PARTITION p2878 VALUES IN (11512,11513,11514,11515), +PARTITION p2879 VALUES IN (11516,11517,11518,11519), +PARTITION p2880 VALUES IN (11520,11521,11522,11523), +PARTITION p2881 VALUES IN (11524,11525,11526,11527), +PARTITION p2882 VALUES IN (11528,11529,11530,11531), +PARTITION p2883 VALUES IN (11532,11533,11534,11535), +PARTITION p2884 VALUES IN (11536,11537,11538,11539), +PARTITION p2885 VALUES IN (11540,11541,11542,11543), +PARTITION p2886 VALUES IN (11544,11545,11546,11547), +PARTITION p2887 VALUES IN (11548,11549,11550,11551), +PARTITION p2888 VALUES IN (11552,11553,11554,11555), +PARTITION p2889 VALUES IN (11556,11557,11558,11559), +PARTITION p2890 VALUES IN (11560,11561,11562,11563), +PARTITION p2891 VALUES IN (11564,11565,11566,11567), +PARTITION p2892 VALUES IN (11568,11569,11570,11571), +PARTITION p2893 VALUES IN (11572,11573,11574,11575), +PARTITION p2894 VALUES IN (11576,11577,11578,11579), +PARTITION p2895 VALUES IN (11580,11581,11582,11583), +PARTITION p2896 VALUES IN (11584,11585,11586,11587), +PARTITION p2897 VALUES IN (11588,11589,11590,11591), +PARTITION p2898 VALUES IN (11592,11593,11594,11595), +PARTITION p2899 VALUES IN (11596,11597,11598,11599), +PARTITION p2900 VALUES IN (11600,11601,11602,11603), +PARTITION p2901 VALUES IN (11604,11605,11606,11607), +PARTITION p2902 VALUES IN (11608,11609,11610,11611), +PARTITION p2903 VALUES IN (11612,11613,11614,11615), +PARTITION p2904 VALUES IN (11616,11617,11618,11619), +PARTITION p2905 VALUES IN (11620,11621,11622,11623), +PARTITION p2906 VALUES IN (11624,11625,11626,11627), +PARTITION p2907 VALUES IN (11628,11629,11630,11631), +PARTITION p2908 VALUES IN (11632,11633,11634,11635), +PARTITION p2909 VALUES IN (11636,11637,11638,11639), +PARTITION p2910 VALUES IN (11640,11641,11642,11643), +PARTITION p2911 VALUES IN (11644,11645,11646,11647), +PARTITION p2912 VALUES IN (11648,11649,11650,11651), +PARTITION p2913 VALUES IN (11652,11653,11654,11655), +PARTITION p2914 VALUES IN (11656,11657,11658,11659), +PARTITION p2915 VALUES IN (11660,11661,11662,11663), +PARTITION p2916 VALUES IN (11664,11665,11666,11667), +PARTITION p2917 VALUES IN (11668,11669,11670,11671), +PARTITION p2918 VALUES IN (11672,11673,11674,11675), +PARTITION p2919 VALUES IN (11676,11677,11678,11679), +PARTITION p2920 VALUES IN (11680,11681,11682,11683), +PARTITION p2921 VALUES IN (11684,11685,11686,11687), +PARTITION p2922 VALUES IN (11688,11689,11690,11691), +PARTITION p2923 VALUES IN (11692,11693,11694,11695), +PARTITION p2924 VALUES IN (11696,11697,11698,11699), +PARTITION p2925 VALUES IN (11700,11701,11702,11703), +PARTITION p2926 VALUES IN (11704,11705,11706,11707), +PARTITION p2927 VALUES IN (11708,11709,11710,11711), +PARTITION p2928 VALUES IN (11712,11713,11714,11715), +PARTITION p2929 VALUES IN (11716,11717,11718,11719), +PARTITION p2930 VALUES IN (11720,11721,11722,11723), +PARTITION p2931 VALUES IN (11724,11725,11726,11727), +PARTITION p2932 VALUES IN (11728,11729,11730,11731), +PARTITION p2933 VALUES IN (11732,11733,11734,11735), +PARTITION p2934 VALUES IN (11736,11737,11738,11739), +PARTITION p2935 VALUES IN (11740,11741,11742,11743), +PARTITION p2936 VALUES IN (11744,11745,11746,11747), +PARTITION p2937 VALUES IN (11748,11749,11750,11751), +PARTITION p2938 VALUES IN (11752,11753,11754,11755), +PARTITION p2939 VALUES IN (11756,11757,11758,11759), +PARTITION p2940 VALUES IN (11760,11761,11762,11763), +PARTITION p2941 VALUES IN (11764,11765,11766,11767), +PARTITION p2942 VALUES IN (11768,11769,11770,11771), +PARTITION p2943 VALUES IN (11772,11773,11774,11775), +PARTITION p2944 VALUES IN (11776,11777,11778,11779), +PARTITION p2945 VALUES IN (11780,11781,11782,11783), +PARTITION p2946 VALUES IN (11784,11785,11786,11787), +PARTITION p2947 VALUES IN (11788,11789,11790,11791), +PARTITION p2948 VALUES IN (11792,11793,11794,11795), +PARTITION p2949 VALUES IN (11796,11797,11798,11799), +PARTITION p2950 VALUES IN (11800,11801,11802,11803), +PARTITION p2951 VALUES IN (11804,11805,11806,11807), +PARTITION p2952 VALUES IN (11808,11809,11810,11811), +PARTITION p2953 VALUES IN (11812,11813,11814,11815), +PARTITION p2954 VALUES IN (11816,11817,11818,11819), +PARTITION p2955 VALUES IN (11820,11821,11822,11823), +PARTITION p2956 VALUES IN (11824,11825,11826,11827), +PARTITION p2957 VALUES IN (11828,11829,11830,11831), +PARTITION p2958 VALUES IN (11832,11833,11834,11835), +PARTITION p2959 VALUES IN (11836,11837,11838,11839), +PARTITION p2960 VALUES IN (11840,11841,11842,11843), +PARTITION p2961 VALUES IN (11844,11845,11846,11847), +PARTITION p2962 VALUES IN (11848,11849,11850,11851), +PARTITION p2963 VALUES IN (11852,11853,11854,11855), +PARTITION p2964 VALUES IN (11856,11857,11858,11859), +PARTITION p2965 VALUES IN (11860,11861,11862,11863), +PARTITION p2966 VALUES IN (11864,11865,11866,11867), +PARTITION p2967 VALUES IN (11868,11869,11870,11871), +PARTITION p2968 VALUES IN (11872,11873,11874,11875), +PARTITION p2969 VALUES IN (11876,11877,11878,11879), +PARTITION p2970 VALUES IN (11880,11881,11882,11883), +PARTITION p2971 VALUES IN (11884,11885,11886,11887), +PARTITION p2972 VALUES IN (11888,11889,11890,11891), +PARTITION p2973 VALUES IN (11892,11893,11894,11895), +PARTITION p2974 VALUES IN (11896,11897,11898,11899), +PARTITION p2975 VALUES IN (11900,11901,11902,11903), +PARTITION p2976 VALUES IN (11904,11905,11906,11907), +PARTITION p2977 VALUES IN (11908,11909,11910,11911), +PARTITION p2978 VALUES IN (11912,11913,11914,11915), +PARTITION p2979 VALUES IN (11916,11917,11918,11919), +PARTITION p2980 VALUES IN (11920,11921,11922,11923), +PARTITION p2981 VALUES IN (11924,11925,11926,11927), +PARTITION p2982 VALUES IN (11928,11929,11930,11931), +PARTITION p2983 VALUES IN (11932,11933,11934,11935), +PARTITION p2984 VALUES IN (11936,11937,11938,11939), +PARTITION p2985 VALUES IN (11940,11941,11942,11943), +PARTITION p2986 VALUES IN (11944,11945,11946,11947), +PARTITION p2987 VALUES IN (11948,11949,11950,11951), +PARTITION p2988 VALUES IN (11952,11953,11954,11955), +PARTITION p2989 VALUES IN (11956,11957,11958,11959), +PARTITION p2990 VALUES IN (11960,11961,11962,11963), +PARTITION p2991 VALUES IN (11964,11965,11966,11967), +PARTITION p2992 VALUES IN (11968,11969,11970,11971), +PARTITION p2993 VALUES IN (11972,11973,11974,11975), +PARTITION p2994 VALUES IN (11976,11977,11978,11979), +PARTITION p2995 VALUES IN (11980,11981,11982,11983), +PARTITION p2996 VALUES IN (11984,11985,11986,11987), +PARTITION p2997 VALUES IN (11988,11989,11990,11991), +PARTITION p2998 VALUES IN (11992,11993,11994,11995), +PARTITION p2999 VALUES IN (11996,11997,11998,11999), +PARTITION p3000 VALUES IN (12000,12001,12002,12003), +PARTITION p3001 VALUES IN (12004,12005,12006,12007), +PARTITION p3002 VALUES IN (12008,12009,12010,12011), +PARTITION p3003 VALUES IN (12012,12013,12014,12015), +PARTITION p3004 VALUES IN (12016,12017,12018,12019), +PARTITION p3005 VALUES IN (12020,12021,12022,12023), +PARTITION p3006 VALUES IN (12024,12025,12026,12027), +PARTITION p3007 VALUES IN (12028,12029,12030,12031), +PARTITION p3008 VALUES IN (12032,12033,12034,12035), +PARTITION p3009 VALUES IN (12036,12037,12038,12039), +PARTITION p3010 VALUES IN (12040,12041,12042,12043), +PARTITION p3011 VALUES IN (12044,12045,12046,12047), +PARTITION p3012 VALUES IN (12048,12049,12050,12051), +PARTITION p3013 VALUES IN (12052,12053,12054,12055), +PARTITION p3014 VALUES IN (12056,12057,12058,12059), +PARTITION p3015 VALUES IN (12060,12061,12062,12063), +PARTITION p3016 VALUES IN (12064,12065,12066,12067), +PARTITION p3017 VALUES IN (12068,12069,12070,12071), +PARTITION p3018 VALUES IN (12072,12073,12074,12075), +PARTITION p3019 VALUES IN (12076,12077,12078,12079), +PARTITION p3020 VALUES IN (12080,12081,12082,12083), +PARTITION p3021 VALUES IN (12084,12085,12086,12087), +PARTITION p3022 VALUES IN (12088,12089,12090,12091), +PARTITION p3023 VALUES IN (12092,12093,12094,12095), +PARTITION p3024 VALUES IN (12096,12097,12098,12099), +PARTITION p3025 VALUES IN (12100,12101,12102,12103), +PARTITION p3026 VALUES IN (12104,12105,12106,12107), +PARTITION p3027 VALUES IN (12108,12109,12110,12111), +PARTITION p3028 VALUES IN (12112,12113,12114,12115), +PARTITION p3029 VALUES IN (12116,12117,12118,12119), +PARTITION p3030 VALUES IN (12120,12121,12122,12123), +PARTITION p3031 VALUES IN (12124,12125,12126,12127), +PARTITION p3032 VALUES IN (12128,12129,12130,12131), +PARTITION p3033 VALUES IN (12132,12133,12134,12135), +PARTITION p3034 VALUES IN (12136,12137,12138,12139), +PARTITION p3035 VALUES IN (12140,12141,12142,12143), +PARTITION p3036 VALUES IN (12144,12145,12146,12147), +PARTITION p3037 VALUES IN (12148,12149,12150,12151), +PARTITION p3038 VALUES IN (12152,12153,12154,12155), +PARTITION p3039 VALUES IN (12156,12157,12158,12159), +PARTITION p3040 VALUES IN (12160,12161,12162,12163), +PARTITION p3041 VALUES IN (12164,12165,12166,12167), +PARTITION p3042 VALUES IN (12168,12169,12170,12171), +PARTITION p3043 VALUES IN (12172,12173,12174,12175), +PARTITION p3044 VALUES IN (12176,12177,12178,12179), +PARTITION p3045 VALUES IN (12180,12181,12182,12183), +PARTITION p3046 VALUES IN (12184,12185,12186,12187), +PARTITION p3047 VALUES IN (12188,12189,12190,12191), +PARTITION p3048 VALUES IN (12192,12193,12194,12195), +PARTITION p3049 VALUES IN (12196,12197,12198,12199), +PARTITION p3050 VALUES IN (12200,12201,12202,12203), +PARTITION p3051 VALUES IN (12204,12205,12206,12207), +PARTITION p3052 VALUES IN (12208,12209,12210,12211), +PARTITION p3053 VALUES IN (12212,12213,12214,12215), +PARTITION p3054 VALUES IN (12216,12217,12218,12219), +PARTITION p3055 VALUES IN (12220,12221,12222,12223), +PARTITION p3056 VALUES IN (12224,12225,12226,12227), +PARTITION p3057 VALUES IN (12228,12229,12230,12231), +PARTITION p3058 VALUES IN (12232,12233,12234,12235), +PARTITION p3059 VALUES IN (12236,12237,12238,12239), +PARTITION p3060 VALUES IN (12240,12241,12242,12243), +PARTITION p3061 VALUES IN (12244,12245,12246,12247), +PARTITION p3062 VALUES IN (12248,12249,12250,12251), +PARTITION p3063 VALUES IN (12252,12253,12254,12255), +PARTITION p3064 VALUES IN (12256,12257,12258,12259), +PARTITION p3065 VALUES IN (12260,12261,12262,12263), +PARTITION p3066 VALUES IN (12264,12265,12266,12267), +PARTITION p3067 VALUES IN (12268,12269,12270,12271), +PARTITION p3068 VALUES IN (12272,12273,12274,12275), +PARTITION p3069 VALUES IN (12276,12277,12278,12279), +PARTITION p3070 VALUES IN (12280,12281,12282,12283), +PARTITION p3071 VALUES IN (12284,12285,12286,12287), +PARTITION p3072 VALUES IN (12288,12289,12290,12291), +PARTITION p3073 VALUES IN (12292,12293,12294,12295), +PARTITION p3074 VALUES IN (12296,12297,12298,12299), +PARTITION p3075 VALUES IN (12300,12301,12302,12303), +PARTITION p3076 VALUES IN (12304,12305,12306,12307), +PARTITION p3077 VALUES IN (12308,12309,12310,12311), +PARTITION p3078 VALUES IN (12312,12313,12314,12315), +PARTITION p3079 VALUES IN (12316,12317,12318,12319), +PARTITION p3080 VALUES IN (12320,12321,12322,12323), +PARTITION p3081 VALUES IN (12324,12325,12326,12327), +PARTITION p3082 VALUES IN (12328,12329,12330,12331), +PARTITION p3083 VALUES IN (12332,12333,12334,12335), +PARTITION p3084 VALUES IN (12336,12337,12338,12339), +PARTITION p3085 VALUES IN (12340,12341,12342,12343), +PARTITION p3086 VALUES IN (12344,12345,12346,12347), +PARTITION p3087 VALUES IN (12348,12349,12350,12351), +PARTITION p3088 VALUES IN (12352,12353,12354,12355), +PARTITION p3089 VALUES IN (12356,12357,12358,12359), +PARTITION p3090 VALUES IN (12360,12361,12362,12363), +PARTITION p3091 VALUES IN (12364,12365,12366,12367), +PARTITION p3092 VALUES IN (12368,12369,12370,12371), +PARTITION p3093 VALUES IN (12372,12373,12374,12375), +PARTITION p3094 VALUES IN (12376,12377,12378,12379), +PARTITION p3095 VALUES IN (12380,12381,12382,12383), +PARTITION p3096 VALUES IN (12384,12385,12386,12387), +PARTITION p3097 VALUES IN (12388,12389,12390,12391), +PARTITION p3098 VALUES IN (12392,12393,12394,12395), +PARTITION p3099 VALUES IN (12396,12397,12398,12399), +PARTITION p3100 VALUES IN (12400,12401,12402,12403), +PARTITION p3101 VALUES IN (12404,12405,12406,12407), +PARTITION p3102 VALUES IN (12408,12409,12410,12411), +PARTITION p3103 VALUES IN (12412,12413,12414,12415), +PARTITION p3104 VALUES IN (12416,12417,12418,12419), +PARTITION p3105 VALUES IN (12420,12421,12422,12423), +PARTITION p3106 VALUES IN (12424,12425,12426,12427), +PARTITION p3107 VALUES IN (12428,12429,12430,12431), +PARTITION p3108 VALUES IN (12432,12433,12434,12435), +PARTITION p3109 VALUES IN (12436,12437,12438,12439), +PARTITION p3110 VALUES IN (12440,12441,12442,12443), +PARTITION p3111 VALUES IN (12444,12445,12446,12447), +PARTITION p3112 VALUES IN (12448,12449,12450,12451), +PARTITION p3113 VALUES IN (12452,12453,12454,12455), +PARTITION p3114 VALUES IN (12456,12457,12458,12459), +PARTITION p3115 VALUES IN (12460,12461,12462,12463), +PARTITION p3116 VALUES IN (12464,12465,12466,12467), +PARTITION p3117 VALUES IN (12468,12469,12470,12471), +PARTITION p3118 VALUES IN (12472,12473,12474,12475), +PARTITION p3119 VALUES IN (12476,12477,12478,12479), +PARTITION p3120 VALUES IN (12480,12481,12482,12483), +PARTITION p3121 VALUES IN (12484,12485,12486,12487), +PARTITION p3122 VALUES IN (12488,12489,12490,12491), +PARTITION p3123 VALUES IN (12492,12493,12494,12495), +PARTITION p3124 VALUES IN (12496,12497,12498,12499), +PARTITION p3125 VALUES IN (12500,12501,12502,12503), +PARTITION p3126 VALUES IN (12504,12505,12506,12507), +PARTITION p3127 VALUES IN (12508,12509,12510,12511), +PARTITION p3128 VALUES IN (12512,12513,12514,12515), +PARTITION p3129 VALUES IN (12516,12517,12518,12519), +PARTITION p3130 VALUES IN (12520,12521,12522,12523), +PARTITION p3131 VALUES IN (12524,12525,12526,12527), +PARTITION p3132 VALUES IN (12528,12529,12530,12531), +PARTITION p3133 VALUES IN (12532,12533,12534,12535), +PARTITION p3134 VALUES IN (12536,12537,12538,12539), +PARTITION p3135 VALUES IN (12540,12541,12542,12543), +PARTITION p3136 VALUES IN (12544,12545,12546,12547), +PARTITION p3137 VALUES IN (12548,12549,12550,12551), +PARTITION p3138 VALUES IN (12552,12553,12554,12555), +PARTITION p3139 VALUES IN (12556,12557,12558,12559), +PARTITION p3140 VALUES IN (12560,12561,12562,12563), +PARTITION p3141 VALUES IN (12564,12565,12566,12567), +PARTITION p3142 VALUES IN (12568,12569,12570,12571), +PARTITION p3143 VALUES IN (12572,12573,12574,12575), +PARTITION p3144 VALUES IN (12576,12577,12578,12579), +PARTITION p3145 VALUES IN (12580,12581,12582,12583), +PARTITION p3146 VALUES IN (12584,12585,12586,12587), +PARTITION p3147 VALUES IN (12588,12589,12590,12591), +PARTITION p3148 VALUES IN (12592,12593,12594,12595), +PARTITION p3149 VALUES IN (12596,12597,12598,12599), +PARTITION p3150 VALUES IN (12600,12601,12602,12603), +PARTITION p3151 VALUES IN (12604,12605,12606,12607), +PARTITION p3152 VALUES IN (12608,12609,12610,12611), +PARTITION p3153 VALUES IN (12612,12613,12614,12615), +PARTITION p3154 VALUES IN (12616,12617,12618,12619), +PARTITION p3155 VALUES IN (12620,12621,12622,12623), +PARTITION p3156 VALUES IN (12624,12625,12626,12627), +PARTITION p3157 VALUES IN (12628,12629,12630,12631), +PARTITION p3158 VALUES IN (12632,12633,12634,12635), +PARTITION p3159 VALUES IN (12636,12637,12638,12639), +PARTITION p3160 VALUES IN (12640,12641,12642,12643), +PARTITION p3161 VALUES IN (12644,12645,12646,12647), +PARTITION p3162 VALUES IN (12648,12649,12650,12651), +PARTITION p3163 VALUES IN (12652,12653,12654,12655), +PARTITION p3164 VALUES IN (12656,12657,12658,12659), +PARTITION p3165 VALUES IN (12660,12661,12662,12663), +PARTITION p3166 VALUES IN (12664,12665,12666,12667), +PARTITION p3167 VALUES IN (12668,12669,12670,12671), +PARTITION p3168 VALUES IN (12672,12673,12674,12675), +PARTITION p3169 VALUES IN (12676,12677,12678,12679), +PARTITION p3170 VALUES IN (12680,12681,12682,12683), +PARTITION p3171 VALUES IN (12684,12685,12686,12687), +PARTITION p3172 VALUES IN (12688,12689,12690,12691), +PARTITION p3173 VALUES IN (12692,12693,12694,12695), +PARTITION p3174 VALUES IN (12696,12697,12698,12699), +PARTITION p3175 VALUES IN (12700,12701,12702,12703), +PARTITION p3176 VALUES IN (12704,12705,12706,12707), +PARTITION p3177 VALUES IN (12708,12709,12710,12711), +PARTITION p3178 VALUES IN (12712,12713,12714,12715), +PARTITION p3179 VALUES IN (12716,12717,12718,12719), +PARTITION p3180 VALUES IN (12720,12721,12722,12723), +PARTITION p3181 VALUES IN (12724,12725,12726,12727), +PARTITION p3182 VALUES IN (12728,12729,12730,12731), +PARTITION p3183 VALUES IN (12732,12733,12734,12735), +PARTITION p3184 VALUES IN (12736,12737,12738,12739), +PARTITION p3185 VALUES IN (12740,12741,12742,12743), +PARTITION p3186 VALUES IN (12744,12745,12746,12747), +PARTITION p3187 VALUES IN (12748,12749,12750,12751), +PARTITION p3188 VALUES IN (12752,12753,12754,12755), +PARTITION p3189 VALUES IN (12756,12757,12758,12759), +PARTITION p3190 VALUES IN (12760,12761,12762,12763), +PARTITION p3191 VALUES IN (12764,12765,12766,12767), +PARTITION p3192 VALUES IN (12768,12769,12770,12771), +PARTITION p3193 VALUES IN (12772,12773,12774,12775), +PARTITION p3194 VALUES IN (12776,12777,12778,12779), +PARTITION p3195 VALUES IN (12780,12781,12782,12783), +PARTITION p3196 VALUES IN (12784,12785,12786,12787), +PARTITION p3197 VALUES IN (12788,12789,12790,12791), +PARTITION p3198 VALUES IN (12792,12793,12794,12795), +PARTITION p3199 VALUES IN (12796,12797,12798,12799), +PARTITION p3200 VALUES IN (12800,12801,12802,12803), +PARTITION p3201 VALUES IN (12804,12805,12806,12807), +PARTITION p3202 VALUES IN (12808,12809,12810,12811), +PARTITION p3203 VALUES IN (12812,12813,12814,12815), +PARTITION p3204 VALUES IN (12816,12817,12818,12819), +PARTITION p3205 VALUES IN (12820,12821,12822,12823), +PARTITION p3206 VALUES IN (12824,12825,12826,12827), +PARTITION p3207 VALUES IN (12828,12829,12830,12831), +PARTITION p3208 VALUES IN (12832,12833,12834,12835), +PARTITION p3209 VALUES IN (12836,12837,12838,12839), +PARTITION p3210 VALUES IN (12840,12841,12842,12843), +PARTITION p3211 VALUES IN (12844,12845,12846,12847), +PARTITION p3212 VALUES IN (12848,12849,12850,12851), +PARTITION p3213 VALUES IN (12852,12853,12854,12855), +PARTITION p3214 VALUES IN (12856,12857,12858,12859), +PARTITION p3215 VALUES IN (12860,12861,12862,12863), +PARTITION p3216 VALUES IN (12864,12865,12866,12867), +PARTITION p3217 VALUES IN (12868,12869,12870,12871), +PARTITION p3218 VALUES IN (12872,12873,12874,12875), +PARTITION p3219 VALUES IN (12876,12877,12878,12879), +PARTITION p3220 VALUES IN (12880,12881,12882,12883), +PARTITION p3221 VALUES IN (12884,12885,12886,12887), +PARTITION p3222 VALUES IN (12888,12889,12890,12891), +PARTITION p3223 VALUES IN (12892,12893,12894,12895), +PARTITION p3224 VALUES IN (12896,12897,12898,12899), +PARTITION p3225 VALUES IN (12900,12901,12902,12903), +PARTITION p3226 VALUES IN (12904,12905,12906,12907), +PARTITION p3227 VALUES IN (12908,12909,12910,12911), +PARTITION p3228 VALUES IN (12912,12913,12914,12915), +PARTITION p3229 VALUES IN (12916,12917,12918,12919), +PARTITION p3230 VALUES IN (12920,12921,12922,12923), +PARTITION p3231 VALUES IN (12924,12925,12926,12927), +PARTITION p3232 VALUES IN (12928,12929,12930,12931), +PARTITION p3233 VALUES IN (12932,12933,12934,12935), +PARTITION p3234 VALUES IN (12936,12937,12938,12939), +PARTITION p3235 VALUES IN (12940,12941,12942,12943), +PARTITION p3236 VALUES IN (12944,12945,12946,12947), +PARTITION p3237 VALUES IN (12948,12949,12950,12951), +PARTITION p3238 VALUES IN (12952,12953,12954,12955), +PARTITION p3239 VALUES IN (12956,12957,12958,12959), +PARTITION p3240 VALUES IN (12960,12961,12962,12963), +PARTITION p3241 VALUES IN (12964,12965,12966,12967), +PARTITION p3242 VALUES IN (12968,12969,12970,12971), +PARTITION p3243 VALUES IN (12972,12973,12974,12975), +PARTITION p3244 VALUES IN (12976,12977,12978,12979), +PARTITION p3245 VALUES IN (12980,12981,12982,12983), +PARTITION p3246 VALUES IN (12984,12985,12986,12987), +PARTITION p3247 VALUES IN (12988,12989,12990,12991), +PARTITION p3248 VALUES IN (12992,12993,12994,12995), +PARTITION p3249 VALUES IN (12996,12997,12998,12999), +PARTITION p3250 VALUES IN (13000,13001,13002,13003), +PARTITION p3251 VALUES IN (13004,13005,13006,13007), +PARTITION p3252 VALUES IN (13008,13009,13010,13011), +PARTITION p3253 VALUES IN (13012,13013,13014,13015), +PARTITION p3254 VALUES IN (13016,13017,13018,13019), +PARTITION p3255 VALUES IN (13020,13021,13022,13023), +PARTITION p3256 VALUES IN (13024,13025,13026,13027), +PARTITION p3257 VALUES IN (13028,13029,13030,13031), +PARTITION p3258 VALUES IN (13032,13033,13034,13035), +PARTITION p3259 VALUES IN (13036,13037,13038,13039), +PARTITION p3260 VALUES IN (13040,13041,13042,13043), +PARTITION p3261 VALUES IN (13044,13045,13046,13047), +PARTITION p3262 VALUES IN (13048,13049,13050,13051), +PARTITION p3263 VALUES IN (13052,13053,13054,13055), +PARTITION p3264 VALUES IN (13056,13057,13058,13059), +PARTITION p3265 VALUES IN (13060,13061,13062,13063), +PARTITION p3266 VALUES IN (13064,13065,13066,13067), +PARTITION p3267 VALUES IN (13068,13069,13070,13071), +PARTITION p3268 VALUES IN (13072,13073,13074,13075), +PARTITION p3269 VALUES IN (13076,13077,13078,13079), +PARTITION p3270 VALUES IN (13080,13081,13082,13083), +PARTITION p3271 VALUES IN (13084,13085,13086,13087), +PARTITION p3272 VALUES IN (13088,13089,13090,13091), +PARTITION p3273 VALUES IN (13092,13093,13094,13095), +PARTITION p3274 VALUES IN (13096,13097,13098,13099), +PARTITION p3275 VALUES IN (13100,13101,13102,13103), +PARTITION p3276 VALUES IN (13104,13105,13106,13107), +PARTITION p3277 VALUES IN (13108,13109,13110,13111), +PARTITION p3278 VALUES IN (13112,13113,13114,13115), +PARTITION p3279 VALUES IN (13116,13117,13118,13119), +PARTITION p3280 VALUES IN (13120,13121,13122,13123), +PARTITION p3281 VALUES IN (13124,13125,13126,13127), +PARTITION p3282 VALUES IN (13128,13129,13130,13131), +PARTITION p3283 VALUES IN (13132,13133,13134,13135), +PARTITION p3284 VALUES IN (13136,13137,13138,13139), +PARTITION p3285 VALUES IN (13140,13141,13142,13143), +PARTITION p3286 VALUES IN (13144,13145,13146,13147), +PARTITION p3287 VALUES IN (13148,13149,13150,13151), +PARTITION p3288 VALUES IN (13152,13153,13154,13155), +PARTITION p3289 VALUES IN (13156,13157,13158,13159), +PARTITION p3290 VALUES IN (13160,13161,13162,13163), +PARTITION p3291 VALUES IN (13164,13165,13166,13167), +PARTITION p3292 VALUES IN (13168,13169,13170,13171), +PARTITION p3293 VALUES IN (13172,13173,13174,13175), +PARTITION p3294 VALUES IN (13176,13177,13178,13179), +PARTITION p3295 VALUES IN (13180,13181,13182,13183), +PARTITION p3296 VALUES IN (13184,13185,13186,13187), +PARTITION p3297 VALUES IN (13188,13189,13190,13191), +PARTITION p3298 VALUES IN (13192,13193,13194,13195), +PARTITION p3299 VALUES IN (13196,13197,13198,13199), +PARTITION p3300 VALUES IN (13200,13201,13202,13203), +PARTITION p3301 VALUES IN (13204,13205,13206,13207), +PARTITION p3302 VALUES IN (13208,13209,13210,13211), +PARTITION p3303 VALUES IN (13212,13213,13214,13215), +PARTITION p3304 VALUES IN (13216,13217,13218,13219), +PARTITION p3305 VALUES IN (13220,13221,13222,13223), +PARTITION p3306 VALUES IN (13224,13225,13226,13227), +PARTITION p3307 VALUES IN (13228,13229,13230,13231), +PARTITION p3308 VALUES IN (13232,13233,13234,13235), +PARTITION p3309 VALUES IN (13236,13237,13238,13239), +PARTITION p3310 VALUES IN (13240,13241,13242,13243), +PARTITION p3311 VALUES IN (13244,13245,13246,13247), +PARTITION p3312 VALUES IN (13248,13249,13250,13251), +PARTITION p3313 VALUES IN (13252,13253,13254,13255), +PARTITION p3314 VALUES IN (13256,13257,13258,13259), +PARTITION p3315 VALUES IN (13260,13261,13262,13263), +PARTITION p3316 VALUES IN (13264,13265,13266,13267), +PARTITION p3317 VALUES IN (13268,13269,13270,13271), +PARTITION p3318 VALUES IN (13272,13273,13274,13275), +PARTITION p3319 VALUES IN (13276,13277,13278,13279), +PARTITION p3320 VALUES IN (13280,13281,13282,13283), +PARTITION p3321 VALUES IN (13284,13285,13286,13287), +PARTITION p3322 VALUES IN (13288,13289,13290,13291), +PARTITION p3323 VALUES IN (13292,13293,13294,13295), +PARTITION p3324 VALUES IN (13296,13297,13298,13299), +PARTITION p3325 VALUES IN (13300,13301,13302,13303), +PARTITION p3326 VALUES IN (13304,13305,13306,13307), +PARTITION p3327 VALUES IN (13308,13309,13310,13311), +PARTITION p3328 VALUES IN (13312,13313,13314,13315), +PARTITION p3329 VALUES IN (13316,13317,13318,13319), +PARTITION p3330 VALUES IN (13320,13321,13322,13323), +PARTITION p3331 VALUES IN (13324,13325,13326,13327), +PARTITION p3332 VALUES IN (13328,13329,13330,13331), +PARTITION p3333 VALUES IN (13332,13333,13334,13335), +PARTITION p3334 VALUES IN (13336,13337,13338,13339), +PARTITION p3335 VALUES IN (13340,13341,13342,13343), +PARTITION p3336 VALUES IN (13344,13345,13346,13347), +PARTITION p3337 VALUES IN (13348,13349,13350,13351), +PARTITION p3338 VALUES IN (13352,13353,13354,13355), +PARTITION p3339 VALUES IN (13356,13357,13358,13359), +PARTITION p3340 VALUES IN (13360,13361,13362,13363), +PARTITION p3341 VALUES IN (13364,13365,13366,13367), +PARTITION p3342 VALUES IN (13368,13369,13370,13371), +PARTITION p3343 VALUES IN (13372,13373,13374,13375), +PARTITION p3344 VALUES IN (13376,13377,13378,13379), +PARTITION p3345 VALUES IN (13380,13381,13382,13383), +PARTITION p3346 VALUES IN (13384,13385,13386,13387), +PARTITION p3347 VALUES IN (13388,13389,13390,13391), +PARTITION p3348 VALUES IN (13392,13393,13394,13395), +PARTITION p3349 VALUES IN (13396,13397,13398,13399), +PARTITION p3350 VALUES IN (13400,13401,13402,13403), +PARTITION p3351 VALUES IN (13404,13405,13406,13407), +PARTITION p3352 VALUES IN (13408,13409,13410,13411), +PARTITION p3353 VALUES IN (13412,13413,13414,13415), +PARTITION p3354 VALUES IN (13416,13417,13418,13419), +PARTITION p3355 VALUES IN (13420,13421,13422,13423), +PARTITION p3356 VALUES IN (13424,13425,13426,13427), +PARTITION p3357 VALUES IN (13428,13429,13430,13431), +PARTITION p3358 VALUES IN (13432,13433,13434,13435), +PARTITION p3359 VALUES IN (13436,13437,13438,13439), +PARTITION p3360 VALUES IN (13440,13441,13442,13443), +PARTITION p3361 VALUES IN (13444,13445,13446,13447), +PARTITION p3362 VALUES IN (13448,13449,13450,13451), +PARTITION p3363 VALUES IN (13452,13453,13454,13455), +PARTITION p3364 VALUES IN (13456,13457,13458,13459), +PARTITION p3365 VALUES IN (13460,13461,13462,13463), +PARTITION p3366 VALUES IN (13464,13465,13466,13467), +PARTITION p3367 VALUES IN (13468,13469,13470,13471), +PARTITION p3368 VALUES IN (13472,13473,13474,13475), +PARTITION p3369 VALUES IN (13476,13477,13478,13479), +PARTITION p3370 VALUES IN (13480,13481,13482,13483), +PARTITION p3371 VALUES IN (13484,13485,13486,13487), +PARTITION p3372 VALUES IN (13488,13489,13490,13491), +PARTITION p3373 VALUES IN (13492,13493,13494,13495), +PARTITION p3374 VALUES IN (13496,13497,13498,13499), +PARTITION p3375 VALUES IN (13500,13501,13502,13503), +PARTITION p3376 VALUES IN (13504,13505,13506,13507), +PARTITION p3377 VALUES IN (13508,13509,13510,13511), +PARTITION p3378 VALUES IN (13512,13513,13514,13515), +PARTITION p3379 VALUES IN (13516,13517,13518,13519), +PARTITION p3380 VALUES IN (13520,13521,13522,13523), +PARTITION p3381 VALUES IN (13524,13525,13526,13527), +PARTITION p3382 VALUES IN (13528,13529,13530,13531), +PARTITION p3383 VALUES IN (13532,13533,13534,13535), +PARTITION p3384 VALUES IN (13536,13537,13538,13539), +PARTITION p3385 VALUES IN (13540,13541,13542,13543), +PARTITION p3386 VALUES IN (13544,13545,13546,13547), +PARTITION p3387 VALUES IN (13548,13549,13550,13551), +PARTITION p3388 VALUES IN (13552,13553,13554,13555), +PARTITION p3389 VALUES IN (13556,13557,13558,13559), +PARTITION p3390 VALUES IN (13560,13561,13562,13563), +PARTITION p3391 VALUES IN (13564,13565,13566,13567), +PARTITION p3392 VALUES IN (13568,13569,13570,13571), +PARTITION p3393 VALUES IN (13572,13573,13574,13575), +PARTITION p3394 VALUES IN (13576,13577,13578,13579), +PARTITION p3395 VALUES IN (13580,13581,13582,13583), +PARTITION p3396 VALUES IN (13584,13585,13586,13587), +PARTITION p3397 VALUES IN (13588,13589,13590,13591), +PARTITION p3398 VALUES IN (13592,13593,13594,13595), +PARTITION p3399 VALUES IN (13596,13597,13598,13599), +PARTITION p3400 VALUES IN (13600,13601,13602,13603), +PARTITION p3401 VALUES IN (13604,13605,13606,13607), +PARTITION p3402 VALUES IN (13608,13609,13610,13611), +PARTITION p3403 VALUES IN (13612,13613,13614,13615), +PARTITION p3404 VALUES IN (13616,13617,13618,13619), +PARTITION p3405 VALUES IN (13620,13621,13622,13623), +PARTITION p3406 VALUES IN (13624,13625,13626,13627), +PARTITION p3407 VALUES IN (13628,13629,13630,13631), +PARTITION p3408 VALUES IN (13632,13633,13634,13635), +PARTITION p3409 VALUES IN (13636,13637,13638,13639), +PARTITION p3410 VALUES IN (13640,13641,13642,13643), +PARTITION p3411 VALUES IN (13644,13645,13646,13647), +PARTITION p3412 VALUES IN (13648,13649,13650,13651), +PARTITION p3413 VALUES IN (13652,13653,13654,13655), +PARTITION p3414 VALUES IN (13656,13657,13658,13659), +PARTITION p3415 VALUES IN (13660,13661,13662,13663), +PARTITION p3416 VALUES IN (13664,13665,13666,13667), +PARTITION p3417 VALUES IN (13668,13669,13670,13671), +PARTITION p3418 VALUES IN (13672,13673,13674,13675), +PARTITION p3419 VALUES IN (13676,13677,13678,13679), +PARTITION p3420 VALUES IN (13680,13681,13682,13683), +PARTITION p3421 VALUES IN (13684,13685,13686,13687), +PARTITION p3422 VALUES IN (13688,13689,13690,13691), +PARTITION p3423 VALUES IN (13692,13693,13694,13695), +PARTITION p3424 VALUES IN (13696,13697,13698,13699), +PARTITION p3425 VALUES IN (13700,13701,13702,13703), +PARTITION p3426 VALUES IN (13704,13705,13706,13707), +PARTITION p3427 VALUES IN (13708,13709,13710,13711), +PARTITION p3428 VALUES IN (13712,13713,13714,13715), +PARTITION p3429 VALUES IN (13716,13717,13718,13719), +PARTITION p3430 VALUES IN (13720,13721,13722,13723), +PARTITION p3431 VALUES IN (13724,13725,13726,13727), +PARTITION p3432 VALUES IN (13728,13729,13730,13731), +PARTITION p3433 VALUES IN (13732,13733,13734,13735), +PARTITION p3434 VALUES IN (13736,13737,13738,13739), +PARTITION p3435 VALUES IN (13740,13741,13742,13743), +PARTITION p3436 VALUES IN (13744,13745,13746,13747), +PARTITION p3437 VALUES IN (13748,13749,13750,13751), +PARTITION p3438 VALUES IN (13752,13753,13754,13755), +PARTITION p3439 VALUES IN (13756,13757,13758,13759), +PARTITION p3440 VALUES IN (13760,13761,13762,13763), +PARTITION p3441 VALUES IN (13764,13765,13766,13767), +PARTITION p3442 VALUES IN (13768,13769,13770,13771), +PARTITION p3443 VALUES IN (13772,13773,13774,13775), +PARTITION p3444 VALUES IN (13776,13777,13778,13779), +PARTITION p3445 VALUES IN (13780,13781,13782,13783), +PARTITION p3446 VALUES IN (13784,13785,13786,13787), +PARTITION p3447 VALUES IN (13788,13789,13790,13791), +PARTITION p3448 VALUES IN (13792,13793,13794,13795), +PARTITION p3449 VALUES IN (13796,13797,13798,13799), +PARTITION p3450 VALUES IN (13800,13801,13802,13803), +PARTITION p3451 VALUES IN (13804,13805,13806,13807), +PARTITION p3452 VALUES IN (13808,13809,13810,13811), +PARTITION p3453 VALUES IN (13812,13813,13814,13815), +PARTITION p3454 VALUES IN (13816,13817,13818,13819), +PARTITION p3455 VALUES IN (13820,13821,13822,13823), +PARTITION p3456 VALUES IN (13824,13825,13826,13827), +PARTITION p3457 VALUES IN (13828,13829,13830,13831), +PARTITION p3458 VALUES IN (13832,13833,13834,13835), +PARTITION p3459 VALUES IN (13836,13837,13838,13839), +PARTITION p3460 VALUES IN (13840,13841,13842,13843), +PARTITION p3461 VALUES IN (13844,13845,13846,13847), +PARTITION p3462 VALUES IN (13848,13849,13850,13851), +PARTITION p3463 VALUES IN (13852,13853,13854,13855), +PARTITION p3464 VALUES IN (13856,13857,13858,13859), +PARTITION p3465 VALUES IN (13860,13861,13862,13863), +PARTITION p3466 VALUES IN (13864,13865,13866,13867), +PARTITION p3467 VALUES IN (13868,13869,13870,13871), +PARTITION p3468 VALUES IN (13872,13873,13874,13875), +PARTITION p3469 VALUES IN (13876,13877,13878,13879), +PARTITION p3470 VALUES IN (13880,13881,13882,13883), +PARTITION p3471 VALUES IN (13884,13885,13886,13887), +PARTITION p3472 VALUES IN (13888,13889,13890,13891), +PARTITION p3473 VALUES IN (13892,13893,13894,13895), +PARTITION p3474 VALUES IN (13896,13897,13898,13899), +PARTITION p3475 VALUES IN (13900,13901,13902,13903), +PARTITION p3476 VALUES IN (13904,13905,13906,13907), +PARTITION p3477 VALUES IN (13908,13909,13910,13911), +PARTITION p3478 VALUES IN (13912,13913,13914,13915), +PARTITION p3479 VALUES IN (13916,13917,13918,13919), +PARTITION p3480 VALUES IN (13920,13921,13922,13923), +PARTITION p3481 VALUES IN (13924,13925,13926,13927), +PARTITION p3482 VALUES IN (13928,13929,13930,13931), +PARTITION p3483 VALUES IN (13932,13933,13934,13935), +PARTITION p3484 VALUES IN (13936,13937,13938,13939), +PARTITION p3485 VALUES IN (13940,13941,13942,13943), +PARTITION p3486 VALUES IN (13944,13945,13946,13947), +PARTITION p3487 VALUES IN (13948,13949,13950,13951), +PARTITION p3488 VALUES IN (13952,13953,13954,13955), +PARTITION p3489 VALUES IN (13956,13957,13958,13959), +PARTITION p3490 VALUES IN (13960,13961,13962,13963), +PARTITION p3491 VALUES IN (13964,13965,13966,13967), +PARTITION p3492 VALUES IN (13968,13969,13970,13971), +PARTITION p3493 VALUES IN (13972,13973,13974,13975), +PARTITION p3494 VALUES IN (13976,13977,13978,13979), +PARTITION p3495 VALUES IN (13980,13981,13982,13983), +PARTITION p3496 VALUES IN (13984,13985,13986,13987), +PARTITION p3497 VALUES IN (13988,13989,13990,13991), +PARTITION p3498 VALUES IN (13992,13993,13994,13995), +PARTITION p3499 VALUES IN (13996,13997,13998,13999), +PARTITION p3500 VALUES IN (14000,14001,14002,14003), +PARTITION p3501 VALUES IN (14004,14005,14006,14007), +PARTITION p3502 VALUES IN (14008,14009,14010,14011), +PARTITION p3503 VALUES IN (14012,14013,14014,14015), +PARTITION p3504 VALUES IN (14016,14017,14018,14019), +PARTITION p3505 VALUES IN (14020,14021,14022,14023), +PARTITION p3506 VALUES IN (14024,14025,14026,14027), +PARTITION p3507 VALUES IN (14028,14029,14030,14031), +PARTITION p3508 VALUES IN (14032,14033,14034,14035), +PARTITION p3509 VALUES IN (14036,14037,14038,14039), +PARTITION p3510 VALUES IN (14040,14041,14042,14043), +PARTITION p3511 VALUES IN (14044,14045,14046,14047), +PARTITION p3512 VALUES IN (14048,14049,14050,14051), +PARTITION p3513 VALUES IN (14052,14053,14054,14055), +PARTITION p3514 VALUES IN (14056,14057,14058,14059), +PARTITION p3515 VALUES IN (14060,14061,14062,14063), +PARTITION p3516 VALUES IN (14064,14065,14066,14067), +PARTITION p3517 VALUES IN (14068,14069,14070,14071), +PARTITION p3518 VALUES IN (14072,14073,14074,14075), +PARTITION p3519 VALUES IN (14076,14077,14078,14079), +PARTITION p3520 VALUES IN (14080,14081,14082,14083), +PARTITION p3521 VALUES IN (14084,14085,14086,14087), +PARTITION p3522 VALUES IN (14088,14089,14090,14091), +PARTITION p3523 VALUES IN (14092,14093,14094,14095), +PARTITION p3524 VALUES IN (14096,14097,14098,14099), +PARTITION p3525 VALUES IN (14100,14101,14102,14103), +PARTITION p3526 VALUES IN (14104,14105,14106,14107), +PARTITION p3527 VALUES IN (14108,14109,14110,14111), +PARTITION p3528 VALUES IN (14112,14113,14114,14115), +PARTITION p3529 VALUES IN (14116,14117,14118,14119), +PARTITION p3530 VALUES IN (14120,14121,14122,14123), +PARTITION p3531 VALUES IN (14124,14125,14126,14127), +PARTITION p3532 VALUES IN (14128,14129,14130,14131), +PARTITION p3533 VALUES IN (14132,14133,14134,14135), +PARTITION p3534 VALUES IN (14136,14137,14138,14139), +PARTITION p3535 VALUES IN (14140,14141,14142,14143), +PARTITION p3536 VALUES IN (14144,14145,14146,14147), +PARTITION p3537 VALUES IN (14148,14149,14150,14151), +PARTITION p3538 VALUES IN (14152,14153,14154,14155), +PARTITION p3539 VALUES IN (14156,14157,14158,14159), +PARTITION p3540 VALUES IN (14160,14161,14162,14163), +PARTITION p3541 VALUES IN (14164,14165,14166,14167), +PARTITION p3542 VALUES IN (14168,14169,14170,14171), +PARTITION p3543 VALUES IN (14172,14173,14174,14175), +PARTITION p3544 VALUES IN (14176,14177,14178,14179), +PARTITION p3545 VALUES IN (14180,14181,14182,14183), +PARTITION p3546 VALUES IN (14184,14185,14186,14187), +PARTITION p3547 VALUES IN (14188,14189,14190,14191), +PARTITION p3548 VALUES IN (14192,14193,14194,14195), +PARTITION p3549 VALUES IN (14196,14197,14198,14199), +PARTITION p3550 VALUES IN (14200,14201,14202,14203), +PARTITION p3551 VALUES IN (14204,14205,14206,14207), +PARTITION p3552 VALUES IN (14208,14209,14210,14211), +PARTITION p3553 VALUES IN (14212,14213,14214,14215), +PARTITION p3554 VALUES IN (14216,14217,14218,14219), +PARTITION p3555 VALUES IN (14220,14221,14222,14223), +PARTITION p3556 VALUES IN (14224,14225,14226,14227), +PARTITION p3557 VALUES IN (14228,14229,14230,14231), +PARTITION p3558 VALUES IN (14232,14233,14234,14235), +PARTITION p3559 VALUES IN (14236,14237,14238,14239), +PARTITION p3560 VALUES IN (14240,14241,14242,14243), +PARTITION p3561 VALUES IN (14244,14245,14246,14247), +PARTITION p3562 VALUES IN (14248,14249,14250,14251), +PARTITION p3563 VALUES IN (14252,14253,14254,14255), +PARTITION p3564 VALUES IN (14256,14257,14258,14259), +PARTITION p3565 VALUES IN (14260,14261,14262,14263), +PARTITION p3566 VALUES IN (14264,14265,14266,14267), +PARTITION p3567 VALUES IN (14268,14269,14270,14271), +PARTITION p3568 VALUES IN (14272,14273,14274,14275), +PARTITION p3569 VALUES IN (14276,14277,14278,14279), +PARTITION p3570 VALUES IN (14280,14281,14282,14283), +PARTITION p3571 VALUES IN (14284,14285,14286,14287), +PARTITION p3572 VALUES IN (14288,14289,14290,14291), +PARTITION p3573 VALUES IN (14292,14293,14294,14295), +PARTITION p3574 VALUES IN (14296,14297,14298,14299), +PARTITION p3575 VALUES IN (14300,14301,14302,14303), +PARTITION p3576 VALUES IN (14304,14305,14306,14307), +PARTITION p3577 VALUES IN (14308,14309,14310,14311), +PARTITION p3578 VALUES IN (14312,14313,14314,14315), +PARTITION p3579 VALUES IN (14316,14317,14318,14319), +PARTITION p3580 VALUES IN (14320,14321,14322,14323), +PARTITION p3581 VALUES IN (14324,14325,14326,14327), +PARTITION p3582 VALUES IN (14328,14329,14330,14331), +PARTITION p3583 VALUES IN (14332,14333,14334,14335), +PARTITION p3584 VALUES IN (14336,14337,14338,14339), +PARTITION p3585 VALUES IN (14340,14341,14342,14343), +PARTITION p3586 VALUES IN (14344,14345,14346,14347), +PARTITION p3587 VALUES IN (14348,14349,14350,14351), +PARTITION p3588 VALUES IN (14352,14353,14354,14355), +PARTITION p3589 VALUES IN (14356,14357,14358,14359), +PARTITION p3590 VALUES IN (14360,14361,14362,14363), +PARTITION p3591 VALUES IN (14364,14365,14366,14367), +PARTITION p3592 VALUES IN (14368,14369,14370,14371), +PARTITION p3593 VALUES IN (14372,14373,14374,14375), +PARTITION p3594 VALUES IN (14376,14377,14378,14379), +PARTITION p3595 VALUES IN (14380,14381,14382,14383), +PARTITION p3596 VALUES IN (14384,14385,14386,14387), +PARTITION p3597 VALUES IN (14388,14389,14390,14391), +PARTITION p3598 VALUES IN (14392,14393,14394,14395), +PARTITION p3599 VALUES IN (14396,14397,14398,14399), +PARTITION p3600 VALUES IN (14400,14401,14402,14403), +PARTITION p3601 VALUES IN (14404,14405,14406,14407), +PARTITION p3602 VALUES IN (14408,14409,14410,14411), +PARTITION p3603 VALUES IN (14412,14413,14414,14415), +PARTITION p3604 VALUES IN (14416,14417,14418,14419), +PARTITION p3605 VALUES IN (14420,14421,14422,14423), +PARTITION p3606 VALUES IN (14424,14425,14426,14427), +PARTITION p3607 VALUES IN (14428,14429,14430,14431), +PARTITION p3608 VALUES IN (14432,14433,14434,14435), +PARTITION p3609 VALUES IN (14436,14437,14438,14439), +PARTITION p3610 VALUES IN (14440,14441,14442,14443), +PARTITION p3611 VALUES IN (14444,14445,14446,14447), +PARTITION p3612 VALUES IN (14448,14449,14450,14451), +PARTITION p3613 VALUES IN (14452,14453,14454,14455), +PARTITION p3614 VALUES IN (14456,14457,14458,14459), +PARTITION p3615 VALUES IN (14460,14461,14462,14463), +PARTITION p3616 VALUES IN (14464,14465,14466,14467), +PARTITION p3617 VALUES IN (14468,14469,14470,14471), +PARTITION p3618 VALUES IN (14472,14473,14474,14475), +PARTITION p3619 VALUES IN (14476,14477,14478,14479), +PARTITION p3620 VALUES IN (14480,14481,14482,14483), +PARTITION p3621 VALUES IN (14484,14485,14486,14487), +PARTITION p3622 VALUES IN (14488,14489,14490,14491), +PARTITION p3623 VALUES IN (14492,14493,14494,14495), +PARTITION p3624 VALUES IN (14496,14497,14498,14499), +PARTITION p3625 VALUES IN (14500,14501,14502,14503), +PARTITION p3626 VALUES IN (14504,14505,14506,14507), +PARTITION p3627 VALUES IN (14508,14509,14510,14511), +PARTITION p3628 VALUES IN (14512,14513,14514,14515), +PARTITION p3629 VALUES IN (14516,14517,14518,14519), +PARTITION p3630 VALUES IN (14520,14521,14522,14523), +PARTITION p3631 VALUES IN (14524,14525,14526,14527), +PARTITION p3632 VALUES IN (14528,14529,14530,14531), +PARTITION p3633 VALUES IN (14532,14533,14534,14535), +PARTITION p3634 VALUES IN (14536,14537,14538,14539), +PARTITION p3635 VALUES IN (14540,14541,14542,14543), +PARTITION p3636 VALUES IN (14544,14545,14546,14547), +PARTITION p3637 VALUES IN (14548,14549,14550,14551), +PARTITION p3638 VALUES IN (14552,14553,14554,14555), +PARTITION p3639 VALUES IN (14556,14557,14558,14559), +PARTITION p3640 VALUES IN (14560,14561,14562,14563), +PARTITION p3641 VALUES IN (14564,14565,14566,14567), +PARTITION p3642 VALUES IN (14568,14569,14570,14571), +PARTITION p3643 VALUES IN (14572,14573,14574,14575), +PARTITION p3644 VALUES IN (14576,14577,14578,14579), +PARTITION p3645 VALUES IN (14580,14581,14582,14583), +PARTITION p3646 VALUES IN (14584,14585,14586,14587), +PARTITION p3647 VALUES IN (14588,14589,14590,14591), +PARTITION p3648 VALUES IN (14592,14593,14594,14595), +PARTITION p3649 VALUES IN (14596,14597,14598,14599), +PARTITION p3650 VALUES IN (14600,14601,14602,14603), +PARTITION p3651 VALUES IN (14604,14605,14606,14607), +PARTITION p3652 VALUES IN (14608,14609,14610,14611), +PARTITION p3653 VALUES IN (14612,14613,14614,14615), +PARTITION p3654 VALUES IN (14616,14617,14618,14619), +PARTITION p3655 VALUES IN (14620,14621,14622,14623), +PARTITION p3656 VALUES IN (14624,14625,14626,14627), +PARTITION p3657 VALUES IN (14628,14629,14630,14631), +PARTITION p3658 VALUES IN (14632,14633,14634,14635), +PARTITION p3659 VALUES IN (14636,14637,14638,14639), +PARTITION p3660 VALUES IN (14640,14641,14642,14643), +PARTITION p3661 VALUES IN (14644,14645,14646,14647), +PARTITION p3662 VALUES IN (14648,14649,14650,14651), +PARTITION p3663 VALUES IN (14652,14653,14654,14655), +PARTITION p3664 VALUES IN (14656,14657,14658,14659), +PARTITION p3665 VALUES IN (14660,14661,14662,14663), +PARTITION p3666 VALUES IN (14664,14665,14666,14667), +PARTITION p3667 VALUES IN (14668,14669,14670,14671), +PARTITION p3668 VALUES IN (14672,14673,14674,14675), +PARTITION p3669 VALUES IN (14676,14677,14678,14679), +PARTITION p3670 VALUES IN (14680,14681,14682,14683), +PARTITION p3671 VALUES IN (14684,14685,14686,14687), +PARTITION p3672 VALUES IN (14688,14689,14690,14691), +PARTITION p3673 VALUES IN (14692,14693,14694,14695), +PARTITION p3674 VALUES IN (14696,14697,14698,14699), +PARTITION p3675 VALUES IN (14700,14701,14702,14703), +PARTITION p3676 VALUES IN (14704,14705,14706,14707), +PARTITION p3677 VALUES IN (14708,14709,14710,14711), +PARTITION p3678 VALUES IN (14712,14713,14714,14715), +PARTITION p3679 VALUES IN (14716,14717,14718,14719), +PARTITION p3680 VALUES IN (14720,14721,14722,14723), +PARTITION p3681 VALUES IN (14724,14725,14726,14727), +PARTITION p3682 VALUES IN (14728,14729,14730,14731), +PARTITION p3683 VALUES IN (14732,14733,14734,14735), +PARTITION p3684 VALUES IN (14736,14737,14738,14739), +PARTITION p3685 VALUES IN (14740,14741,14742,14743), +PARTITION p3686 VALUES IN (14744,14745,14746,14747), +PARTITION p3687 VALUES IN (14748,14749,14750,14751), +PARTITION p3688 VALUES IN (14752,14753,14754,14755), +PARTITION p3689 VALUES IN (14756,14757,14758,14759), +PARTITION p3690 VALUES IN (14760,14761,14762,14763), +PARTITION p3691 VALUES IN (14764,14765,14766,14767), +PARTITION p3692 VALUES IN (14768,14769,14770,14771), +PARTITION p3693 VALUES IN (14772,14773,14774,14775), +PARTITION p3694 VALUES IN (14776,14777,14778,14779), +PARTITION p3695 VALUES IN (14780,14781,14782,14783), +PARTITION p3696 VALUES IN (14784,14785,14786,14787), +PARTITION p3697 VALUES IN (14788,14789,14790,14791), +PARTITION p3698 VALUES IN (14792,14793,14794,14795), +PARTITION p3699 VALUES IN (14796,14797,14798,14799), +PARTITION p3700 VALUES IN (14800,14801,14802,14803), +PARTITION p3701 VALUES IN (14804,14805,14806,14807), +PARTITION p3702 VALUES IN (14808,14809,14810,14811), +PARTITION p3703 VALUES IN (14812,14813,14814,14815), +PARTITION p3704 VALUES IN (14816,14817,14818,14819), +PARTITION p3705 VALUES IN (14820,14821,14822,14823), +PARTITION p3706 VALUES IN (14824,14825,14826,14827), +PARTITION p3707 VALUES IN (14828,14829,14830,14831), +PARTITION p3708 VALUES IN (14832,14833,14834,14835), +PARTITION p3709 VALUES IN (14836,14837,14838,14839), +PARTITION p3710 VALUES IN (14840,14841,14842,14843), +PARTITION p3711 VALUES IN (14844,14845,14846,14847), +PARTITION p3712 VALUES IN (14848,14849,14850,14851), +PARTITION p3713 VALUES IN (14852,14853,14854,14855), +PARTITION p3714 VALUES IN (14856,14857,14858,14859), +PARTITION p3715 VALUES IN (14860,14861,14862,14863), +PARTITION p3716 VALUES IN (14864,14865,14866,14867), +PARTITION p3717 VALUES IN (14868,14869,14870,14871), +PARTITION p3718 VALUES IN (14872,14873,14874,14875), +PARTITION p3719 VALUES IN (14876,14877,14878,14879), +PARTITION p3720 VALUES IN (14880,14881,14882,14883), +PARTITION p3721 VALUES IN (14884,14885,14886,14887), +PARTITION p3722 VALUES IN (14888,14889,14890,14891), +PARTITION p3723 VALUES IN (14892,14893,14894,14895), +PARTITION p3724 VALUES IN (14896,14897,14898,14899), +PARTITION p3725 VALUES IN (14900,14901,14902,14903), +PARTITION p3726 VALUES IN (14904,14905,14906,14907), +PARTITION p3727 VALUES IN (14908,14909,14910,14911), +PARTITION p3728 VALUES IN (14912,14913,14914,14915), +PARTITION p3729 VALUES IN (14916,14917,14918,14919), +PARTITION p3730 VALUES IN (14920,14921,14922,14923), +PARTITION p3731 VALUES IN (14924,14925,14926,14927), +PARTITION p3732 VALUES IN (14928,14929,14930,14931), +PARTITION p3733 VALUES IN (14932,14933,14934,14935), +PARTITION p3734 VALUES IN (14936,14937,14938,14939), +PARTITION p3735 VALUES IN (14940,14941,14942,14943), +PARTITION p3736 VALUES IN (14944,14945,14946,14947), +PARTITION p3737 VALUES IN (14948,14949,14950,14951), +PARTITION p3738 VALUES IN (14952,14953,14954,14955), +PARTITION p3739 VALUES IN (14956,14957,14958,14959), +PARTITION p3740 VALUES IN (14960,14961,14962,14963), +PARTITION p3741 VALUES IN (14964,14965,14966,14967), +PARTITION p3742 VALUES IN (14968,14969,14970,14971), +PARTITION p3743 VALUES IN (14972,14973,14974,14975), +PARTITION p3744 VALUES IN (14976,14977,14978,14979), +PARTITION p3745 VALUES IN (14980,14981,14982,14983), +PARTITION p3746 VALUES IN (14984,14985,14986,14987), +PARTITION p3747 VALUES IN (14988,14989,14990,14991), +PARTITION p3748 VALUES IN (14992,14993,14994,14995), +PARTITION p3749 VALUES IN (14996,14997,14998,14999), +PARTITION p3750 VALUES IN (15000,15001,15002,15003), +PARTITION p3751 VALUES IN (15004,15005,15006,15007), +PARTITION p3752 VALUES IN (15008,15009,15010,15011), +PARTITION p3753 VALUES IN (15012,15013,15014,15015), +PARTITION p3754 VALUES IN (15016,15017,15018,15019), +PARTITION p3755 VALUES IN (15020,15021,15022,15023), +PARTITION p3756 VALUES IN (15024,15025,15026,15027), +PARTITION p3757 VALUES IN (15028,15029,15030,15031), +PARTITION p3758 VALUES IN (15032,15033,15034,15035), +PARTITION p3759 VALUES IN (15036,15037,15038,15039), +PARTITION p3760 VALUES IN (15040,15041,15042,15043), +PARTITION p3761 VALUES IN (15044,15045,15046,15047), +PARTITION p3762 VALUES IN (15048,15049,15050,15051), +PARTITION p3763 VALUES IN (15052,15053,15054,15055), +PARTITION p3764 VALUES IN (15056,15057,15058,15059), +PARTITION p3765 VALUES IN (15060,15061,15062,15063), +PARTITION p3766 VALUES IN (15064,15065,15066,15067), +PARTITION p3767 VALUES IN (15068,15069,15070,15071), +PARTITION p3768 VALUES IN (15072,15073,15074,15075), +PARTITION p3769 VALUES IN (15076,15077,15078,15079), +PARTITION p3770 VALUES IN (15080,15081,15082,15083), +PARTITION p3771 VALUES IN (15084,15085,15086,15087), +PARTITION p3772 VALUES IN (15088,15089,15090,15091), +PARTITION p3773 VALUES IN (15092,15093,15094,15095), +PARTITION p3774 VALUES IN (15096,15097,15098,15099), +PARTITION p3775 VALUES IN (15100,15101,15102,15103), +PARTITION p3776 VALUES IN (15104,15105,15106,15107), +PARTITION p3777 VALUES IN (15108,15109,15110,15111), +PARTITION p3778 VALUES IN (15112,15113,15114,15115), +PARTITION p3779 VALUES IN (15116,15117,15118,15119), +PARTITION p3780 VALUES IN (15120,15121,15122,15123), +PARTITION p3781 VALUES IN (15124,15125,15126,15127), +PARTITION p3782 VALUES IN (15128,15129,15130,15131), +PARTITION p3783 VALUES IN (15132,15133,15134,15135), +PARTITION p3784 VALUES IN (15136,15137,15138,15139), +PARTITION p3785 VALUES IN (15140,15141,15142,15143), +PARTITION p3786 VALUES IN (15144,15145,15146,15147), +PARTITION p3787 VALUES IN (15148,15149,15150,15151), +PARTITION p3788 VALUES IN (15152,15153,15154,15155), +PARTITION p3789 VALUES IN (15156,15157,15158,15159), +PARTITION p3790 VALUES IN (15160,15161,15162,15163), +PARTITION p3791 VALUES IN (15164,15165,15166,15167), +PARTITION p3792 VALUES IN (15168,15169,15170,15171), +PARTITION p3793 VALUES IN (15172,15173,15174,15175), +PARTITION p3794 VALUES IN (15176,15177,15178,15179), +PARTITION p3795 VALUES IN (15180,15181,15182,15183), +PARTITION p3796 VALUES IN (15184,15185,15186,15187), +PARTITION p3797 VALUES IN (15188,15189,15190,15191), +PARTITION p3798 VALUES IN (15192,15193,15194,15195), +PARTITION p3799 VALUES IN (15196,15197,15198,15199), +PARTITION p3800 VALUES IN (15200,15201,15202,15203), +PARTITION p3801 VALUES IN (15204,15205,15206,15207), +PARTITION p3802 VALUES IN (15208,15209,15210,15211), +PARTITION p3803 VALUES IN (15212,15213,15214,15215), +PARTITION p3804 VALUES IN (15216,15217,15218,15219), +PARTITION p3805 VALUES IN (15220,15221,15222,15223), +PARTITION p3806 VALUES IN (15224,15225,15226,15227), +PARTITION p3807 VALUES IN (15228,15229,15230,15231), +PARTITION p3808 VALUES IN (15232,15233,15234,15235), +PARTITION p3809 VALUES IN (15236,15237,15238,15239), +PARTITION p3810 VALUES IN (15240,15241,15242,15243), +PARTITION p3811 VALUES IN (15244,15245,15246,15247), +PARTITION p3812 VALUES IN (15248,15249,15250,15251), +PARTITION p3813 VALUES IN (15252,15253,15254,15255), +PARTITION p3814 VALUES IN (15256,15257,15258,15259), +PARTITION p3815 VALUES IN (15260,15261,15262,15263), +PARTITION p3816 VALUES IN (15264,15265,15266,15267), +PARTITION p3817 VALUES IN (15268,15269,15270,15271), +PARTITION p3818 VALUES IN (15272,15273,15274,15275), +PARTITION p3819 VALUES IN (15276,15277,15278,15279), +PARTITION p3820 VALUES IN (15280,15281,15282,15283), +PARTITION p3821 VALUES IN (15284,15285,15286,15287), +PARTITION p3822 VALUES IN (15288,15289,15290,15291), +PARTITION p3823 VALUES IN (15292,15293,15294,15295), +PARTITION p3824 VALUES IN (15296,15297,15298,15299), +PARTITION p3825 VALUES IN (15300,15301,15302,15303), +PARTITION p3826 VALUES IN (15304,15305,15306,15307), +PARTITION p3827 VALUES IN (15308,15309,15310,15311), +PARTITION p3828 VALUES IN (15312,15313,15314,15315), +PARTITION p3829 VALUES IN (15316,15317,15318,15319), +PARTITION p3830 VALUES IN (15320,15321,15322,15323), +PARTITION p3831 VALUES IN (15324,15325,15326,15327), +PARTITION p3832 VALUES IN (15328,15329,15330,15331), +PARTITION p3833 VALUES IN (15332,15333,15334,15335), +PARTITION p3834 VALUES IN (15336,15337,15338,15339), +PARTITION p3835 VALUES IN (15340,15341,15342,15343), +PARTITION p3836 VALUES IN (15344,15345,15346,15347), +PARTITION p3837 VALUES IN (15348,15349,15350,15351), +PARTITION p3838 VALUES IN (15352,15353,15354,15355), +PARTITION p3839 VALUES IN (15356,15357,15358,15359), +PARTITION p3840 VALUES IN (15360,15361,15362,15363), +PARTITION p3841 VALUES IN (15364,15365,15366,15367), +PARTITION p3842 VALUES IN (15368,15369,15370,15371), +PARTITION p3843 VALUES IN (15372,15373,15374,15375), +PARTITION p3844 VALUES IN (15376,15377,15378,15379), +PARTITION p3845 VALUES IN (15380,15381,15382,15383), +PARTITION p3846 VALUES IN (15384,15385,15386,15387), +PARTITION p3847 VALUES IN (15388,15389,15390,15391), +PARTITION p3848 VALUES IN (15392,15393,15394,15395), +PARTITION p3849 VALUES IN (15396,15397,15398,15399), +PARTITION p3850 VALUES IN (15400,15401,15402,15403), +PARTITION p3851 VALUES IN (15404,15405,15406,15407), +PARTITION p3852 VALUES IN (15408,15409,15410,15411), +PARTITION p3853 VALUES IN (15412,15413,15414,15415), +PARTITION p3854 VALUES IN (15416,15417,15418,15419), +PARTITION p3855 VALUES IN (15420,15421,15422,15423), +PARTITION p3856 VALUES IN (15424,15425,15426,15427), +PARTITION p3857 VALUES IN (15428,15429,15430,15431), +PARTITION p3858 VALUES IN (15432,15433,15434,15435), +PARTITION p3859 VALUES IN (15436,15437,15438,15439), +PARTITION p3860 VALUES IN (15440,15441,15442,15443), +PARTITION p3861 VALUES IN (15444,15445,15446,15447), +PARTITION p3862 VALUES IN (15448,15449,15450,15451), +PARTITION p3863 VALUES IN (15452,15453,15454,15455), +PARTITION p3864 VALUES IN (15456,15457,15458,15459), +PARTITION p3865 VALUES IN (15460,15461,15462,15463), +PARTITION p3866 VALUES IN (15464,15465,15466,15467), +PARTITION p3867 VALUES IN (15468,15469,15470,15471), +PARTITION p3868 VALUES IN (15472,15473,15474,15475), +PARTITION p3869 VALUES IN (15476,15477,15478,15479), +PARTITION p3870 VALUES IN (15480,15481,15482,15483), +PARTITION p3871 VALUES IN (15484,15485,15486,15487), +PARTITION p3872 VALUES IN (15488,15489,15490,15491), +PARTITION p3873 VALUES IN (15492,15493,15494,15495), +PARTITION p3874 VALUES IN (15496,15497,15498,15499), +PARTITION p3875 VALUES IN (15500,15501,15502,15503), +PARTITION p3876 VALUES IN (15504,15505,15506,15507), +PARTITION p3877 VALUES IN (15508,15509,15510,15511), +PARTITION p3878 VALUES IN (15512,15513,15514,15515), +PARTITION p3879 VALUES IN (15516,15517,15518,15519), +PARTITION p3880 VALUES IN (15520,15521,15522,15523), +PARTITION p3881 VALUES IN (15524,15525,15526,15527), +PARTITION p3882 VALUES IN (15528,15529,15530,15531), +PARTITION p3883 VALUES IN (15532,15533,15534,15535), +PARTITION p3884 VALUES IN (15536,15537,15538,15539), +PARTITION p3885 VALUES IN (15540,15541,15542,15543), +PARTITION p3886 VALUES IN (15544,15545,15546,15547), +PARTITION p3887 VALUES IN (15548,15549,15550,15551), +PARTITION p3888 VALUES IN (15552,15553,15554,15555), +PARTITION p3889 VALUES IN (15556,15557,15558,15559), +PARTITION p3890 VALUES IN (15560,15561,15562,15563), +PARTITION p3891 VALUES IN (15564,15565,15566,15567), +PARTITION p3892 VALUES IN (15568,15569,15570,15571), +PARTITION p3893 VALUES IN (15572,15573,15574,15575), +PARTITION p3894 VALUES IN (15576,15577,15578,15579), +PARTITION p3895 VALUES IN (15580,15581,15582,15583), +PARTITION p3896 VALUES IN (15584,15585,15586,15587), +PARTITION p3897 VALUES IN (15588,15589,15590,15591), +PARTITION p3898 VALUES IN (15592,15593,15594,15595), +PARTITION p3899 VALUES IN (15596,15597,15598,15599), +PARTITION p3900 VALUES IN (15600,15601,15602,15603), +PARTITION p3901 VALUES IN (15604,15605,15606,15607), +PARTITION p3902 VALUES IN (15608,15609,15610,15611), +PARTITION p3903 VALUES IN (15612,15613,15614,15615), +PARTITION p3904 VALUES IN (15616,15617,15618,15619), +PARTITION p3905 VALUES IN (15620,15621,15622,15623), +PARTITION p3906 VALUES IN (15624,15625,15626,15627), +PARTITION p3907 VALUES IN (15628,15629,15630,15631), +PARTITION p3908 VALUES IN (15632,15633,15634,15635), +PARTITION p3909 VALUES IN (15636,15637,15638,15639), +PARTITION p3910 VALUES IN (15640,15641,15642,15643), +PARTITION p3911 VALUES IN (15644,15645,15646,15647), +PARTITION p3912 VALUES IN (15648,15649,15650,15651), +PARTITION p3913 VALUES IN (15652,15653,15654,15655), +PARTITION p3914 VALUES IN (15656,15657,15658,15659), +PARTITION p3915 VALUES IN (15660,15661,15662,15663), +PARTITION p3916 VALUES IN (15664,15665,15666,15667), +PARTITION p3917 VALUES IN (15668,15669,15670,15671), +PARTITION p3918 VALUES IN (15672,15673,15674,15675), +PARTITION p3919 VALUES IN (15676,15677,15678,15679), +PARTITION p3920 VALUES IN (15680,15681,15682,15683), +PARTITION p3921 VALUES IN (15684,15685,15686,15687), +PARTITION p3922 VALUES IN (15688,15689,15690,15691), +PARTITION p3923 VALUES IN (15692,15693,15694,15695), +PARTITION p3924 VALUES IN (15696,15697,15698,15699), +PARTITION p3925 VALUES IN (15700,15701,15702,15703), +PARTITION p3926 VALUES IN (15704,15705,15706,15707), +PARTITION p3927 VALUES IN (15708,15709,15710,15711), +PARTITION p3928 VALUES IN (15712,15713,15714,15715), +PARTITION p3929 VALUES IN (15716,15717,15718,15719), +PARTITION p3930 VALUES IN (15720,15721,15722,15723), +PARTITION p3931 VALUES IN (15724,15725,15726,15727), +PARTITION p3932 VALUES IN (15728,15729,15730,15731), +PARTITION p3933 VALUES IN (15732,15733,15734,15735), +PARTITION p3934 VALUES IN (15736,15737,15738,15739), +PARTITION p3935 VALUES IN (15740,15741,15742,15743), +PARTITION p3936 VALUES IN (15744,15745,15746,15747), +PARTITION p3937 VALUES IN (15748,15749,15750,15751), +PARTITION p3938 VALUES IN (15752,15753,15754,15755), +PARTITION p3939 VALUES IN (15756,15757,15758,15759), +PARTITION p3940 VALUES IN (15760,15761,15762,15763), +PARTITION p3941 VALUES IN (15764,15765,15766,15767), +PARTITION p3942 VALUES IN (15768,15769,15770,15771), +PARTITION p3943 VALUES IN (15772,15773,15774,15775), +PARTITION p3944 VALUES IN (15776,15777,15778,15779), +PARTITION p3945 VALUES IN (15780,15781,15782,15783), +PARTITION p3946 VALUES IN (15784,15785,15786,15787), +PARTITION p3947 VALUES IN (15788,15789,15790,15791), +PARTITION p3948 VALUES IN (15792,15793,15794,15795), +PARTITION p3949 VALUES IN (15796,15797,15798,15799), +PARTITION p3950 VALUES IN (15800,15801,15802,15803), +PARTITION p3951 VALUES IN (15804,15805,15806,15807), +PARTITION p3952 VALUES IN (15808,15809,15810,15811), +PARTITION p3953 VALUES IN (15812,15813,15814,15815), +PARTITION p3954 VALUES IN (15816,15817,15818,15819), +PARTITION p3955 VALUES IN (15820,15821,15822,15823), +PARTITION p3956 VALUES IN (15824,15825,15826,15827), +PARTITION p3957 VALUES IN (15828,15829,15830,15831), +PARTITION p3958 VALUES IN (15832,15833,15834,15835), +PARTITION p3959 VALUES IN (15836,15837,15838,15839), +PARTITION p3960 VALUES IN (15840,15841,15842,15843), +PARTITION p3961 VALUES IN (15844,15845,15846,15847), +PARTITION p3962 VALUES IN (15848,15849,15850,15851), +PARTITION p3963 VALUES IN (15852,15853,15854,15855), +PARTITION p3964 VALUES IN (15856,15857,15858,15859), +PARTITION p3965 VALUES IN (15860,15861,15862,15863), +PARTITION p3966 VALUES IN (15864,15865,15866,15867), +PARTITION p3967 VALUES IN (15868,15869,15870,15871), +PARTITION p3968 VALUES IN (15872,15873,15874,15875), +PARTITION p3969 VALUES IN (15876,15877,15878,15879), +PARTITION p3970 VALUES IN (15880,15881,15882,15883), +PARTITION p3971 VALUES IN (15884,15885,15886,15887), +PARTITION p3972 VALUES IN (15888,15889,15890,15891), +PARTITION p3973 VALUES IN (15892,15893,15894,15895), +PARTITION p3974 VALUES IN (15896,15897,15898,15899), +PARTITION p3975 VALUES IN (15900,15901,15902,15903), +PARTITION p3976 VALUES IN (15904,15905,15906,15907), +PARTITION p3977 VALUES IN (15908,15909,15910,15911), +PARTITION p3978 VALUES IN (15912,15913,15914,15915), +PARTITION p3979 VALUES IN (15916,15917,15918,15919), +PARTITION p3980 VALUES IN (15920,15921,15922,15923), +PARTITION p3981 VALUES IN (15924,15925,15926,15927), +PARTITION p3982 VALUES IN (15928,15929,15930,15931), +PARTITION p3983 VALUES IN (15932,15933,15934,15935), +PARTITION p3984 VALUES IN (15936,15937,15938,15939), +PARTITION p3985 VALUES IN (15940,15941,15942,15943), +PARTITION p3986 VALUES IN (15944,15945,15946,15947), +PARTITION p3987 VALUES IN (15948,15949,15950,15951), +PARTITION p3988 VALUES IN (15952,15953,15954,15955), +PARTITION p3989 VALUES IN (15956,15957,15958,15959), +PARTITION p3990 VALUES IN (15960,15961,15962,15963), +PARTITION p3991 VALUES IN (15964,15965,15966,15967), +PARTITION p3992 VALUES IN (15968,15969,15970,15971), +PARTITION p3993 VALUES IN (15972,15973,15974,15975), +PARTITION p3994 VALUES IN (15976,15977,15978,15979), +PARTITION p3995 VALUES IN (15980,15981,15982,15983), +PARTITION p3996 VALUES IN (15984,15985,15986,15987), +PARTITION p3997 VALUES IN (15988,15989,15990,15991), +PARTITION p3998 VALUES IN (15992,15993,15994,15995), +PARTITION p3999 VALUES IN (15996,15997,15998,15999), +PARTITION p4000 VALUES IN (16000,16001,16002,16003), +PARTITION p4001 VALUES IN (16004,16005,16006,16007), +PARTITION p4002 VALUES IN (16008,16009,16010,16011), +PARTITION p4003 VALUES IN (16012,16013,16014,16015), +PARTITION p4004 VALUES IN (16016,16017,16018,16019), +PARTITION p4005 VALUES IN (16020,16021,16022,16023), +PARTITION p4006 VALUES IN (16024,16025,16026,16027), +PARTITION p4007 VALUES IN (16028,16029,16030,16031), +PARTITION p4008 VALUES IN (16032,16033,16034,16035), +PARTITION p4009 VALUES IN (16036,16037,16038,16039), +PARTITION p4010 VALUES IN (16040,16041,16042,16043), +PARTITION p4011 VALUES IN (16044,16045,16046,16047), +PARTITION p4012 VALUES IN (16048,16049,16050,16051), +PARTITION p4013 VALUES IN (16052,16053,16054,16055), +PARTITION p4014 VALUES IN (16056,16057,16058,16059), +PARTITION p4015 VALUES IN (16060,16061,16062,16063), +PARTITION p4016 VALUES IN (16064,16065,16066,16067), +PARTITION p4017 VALUES IN (16068,16069,16070,16071), +PARTITION p4018 VALUES IN (16072,16073,16074,16075), +PARTITION p4019 VALUES IN (16076,16077,16078,16079), +PARTITION p4020 VALUES IN (16080,16081,16082,16083), +PARTITION p4021 VALUES IN (16084,16085,16086,16087), +PARTITION p4022 VALUES IN (16088,16089,16090,16091), +PARTITION p4023 VALUES IN (16092,16093,16094,16095), +PARTITION p4024 VALUES IN (16096,16097,16098,16099), +PARTITION p4025 VALUES IN (16100,16101,16102,16103), +PARTITION p4026 VALUES IN (16104,16105,16106,16107), +PARTITION p4027 VALUES IN (16108,16109,16110,16111), +PARTITION p4028 VALUES IN (16112,16113,16114,16115), +PARTITION p4029 VALUES IN (16116,16117,16118,16119), +PARTITION p4030 VALUES IN (16120,16121,16122,16123), +PARTITION p4031 VALUES IN (16124,16125,16126,16127), +PARTITION p4032 VALUES IN (16128,16129,16130,16131), +PARTITION p4033 VALUES IN (16132,16133,16134,16135), +PARTITION p4034 VALUES IN (16136,16137,16138,16139), +PARTITION p4035 VALUES IN (16140,16141,16142,16143), +PARTITION p4036 VALUES IN (16144,16145,16146,16147), +PARTITION p4037 VALUES IN (16148,16149,16150,16151), +PARTITION p4038 VALUES IN (16152,16153,16154,16155), +PARTITION p4039 VALUES IN (16156,16157,16158,16159), +PARTITION p4040 VALUES IN (16160,16161,16162,16163), +PARTITION p4041 VALUES IN (16164,16165,16166,16167), +PARTITION p4042 VALUES IN (16168,16169,16170,16171), +PARTITION p4043 VALUES IN (16172,16173,16174,16175), +PARTITION p4044 VALUES IN (16176,16177,16178,16179), +PARTITION p4045 VALUES IN (16180,16181,16182,16183), +PARTITION p4046 VALUES IN (16184,16185,16186,16187), +PARTITION p4047 VALUES IN (16188,16189,16190,16191), +PARTITION p4048 VALUES IN (16192,16193,16194,16195), +PARTITION p4049 VALUES IN (16196,16197,16198,16199), +PARTITION p4050 VALUES IN (16200,16201,16202,16203), +PARTITION p4051 VALUES IN (16204,16205,16206,16207), +PARTITION p4052 VALUES IN (16208,16209,16210,16211), +PARTITION p4053 VALUES IN (16212,16213,16214,16215), +PARTITION p4054 VALUES IN (16216,16217,16218,16219), +PARTITION p4055 VALUES IN (16220,16221,16222,16223), +PARTITION p4056 VALUES IN (16224,16225,16226,16227), +PARTITION p4057 VALUES IN (16228,16229,16230,16231), +PARTITION p4058 VALUES IN (16232,16233,16234,16235), +PARTITION p4059 VALUES IN (16236,16237,16238,16239), +PARTITION p4060 VALUES IN (16240,16241,16242,16243), +PARTITION p4061 VALUES IN (16244,16245,16246,16247), +PARTITION p4062 VALUES IN (16248,16249,16250,16251), +PARTITION p4063 VALUES IN (16252,16253,16254,16255), +PARTITION p4064 VALUES IN (16256,16257,16258,16259), +PARTITION p4065 VALUES IN (16260,16261,16262,16263), +PARTITION p4066 VALUES IN (16264,16265,16266,16267), +PARTITION p4067 VALUES IN (16268,16269,16270,16271), +PARTITION p4068 VALUES IN (16272,16273,16274,16275), +PARTITION p4069 VALUES IN (16276,16277,16278,16279), +PARTITION p4070 VALUES IN (16280,16281,16282,16283), +PARTITION p4071 VALUES IN (16284,16285,16286,16287), +PARTITION p4072 VALUES IN (16288,16289,16290,16291), +PARTITION p4073 VALUES IN (16292,16293,16294,16295), +PARTITION p4074 VALUES IN (16296,16297,16298,16299), +PARTITION p4075 VALUES IN (16300,16301,16302,16303), +PARTITION p4076 VALUES IN (16304,16305,16306,16307), +PARTITION p4077 VALUES IN (16308,16309,16310,16311), +PARTITION p4078 VALUES IN (16312,16313,16314,16315), +PARTITION p4079 VALUES IN (16316,16317,16318,16319), +PARTITION p4080 VALUES IN (16320,16321,16322,16323), +PARTITION p4081 VALUES IN (16324,16325,16326,16327), +PARTITION p4082 VALUES IN (16328,16329,16330,16331), +PARTITION p4083 VALUES IN (16332,16333,16334,16335), +PARTITION p4084 VALUES IN (16336,16337,16338,16339), +PARTITION p4085 VALUES IN (16340,16341,16342,16343), +PARTITION p4086 VALUES IN (16344,16345,16346,16347), +PARTITION p4087 VALUES IN (16348,16349,16350,16351), +PARTITION p4088 VALUES IN (16352,16353,16354,16355), +PARTITION p4089 VALUES IN (16356,16357,16358,16359), +PARTITION p4090 VALUES IN (16360,16361,16362,16363), +PARTITION p4091 VALUES IN (16364,16365,16366,16367), +PARTITION p4092 VALUES IN (16368,16369,16370,16371), +PARTITION p4093 VALUES IN (16372,16373,16374,16375), +PARTITION p4094 VALUES IN (16376,16377,16378,16379), +PARTITION p4095 VALUES IN (16380,16381,16382,16383), +PARTITION p4096 VALUES IN (16384,16385,16386,16387), +PARTITION p4097 VALUES IN (16388,16389,16390,16391), +PARTITION p4098 VALUES IN (16392,16393,16394,16395), +PARTITION p4099 VALUES IN (16396,16397,16398,16399), +PARTITION p4100 VALUES IN (16400,16401,16402,16403), +PARTITION p4101 VALUES IN (16404,16405,16406,16407), +PARTITION p4102 VALUES IN (16408,16409,16410,16411), +PARTITION p4103 VALUES IN (16412,16413,16414,16415), +PARTITION p4104 VALUES IN (16416,16417,16418,16419), +PARTITION p4105 VALUES IN (16420,16421,16422,16423), +PARTITION p4106 VALUES IN (16424,16425,16426,16427), +PARTITION p4107 VALUES IN (16428,16429,16430,16431), +PARTITION p4108 VALUES IN (16432,16433,16434,16435), +PARTITION p4109 VALUES IN (16436,16437,16438,16439), +PARTITION p4110 VALUES IN (16440,16441,16442,16443), +PARTITION p4111 VALUES IN (16444,16445,16446,16447), +PARTITION p4112 VALUES IN (16448,16449,16450,16451), +PARTITION p4113 VALUES IN (16452,16453,16454,16455), +PARTITION p4114 VALUES IN (16456,16457,16458,16459), +PARTITION p4115 VALUES IN (16460,16461,16462,16463), +PARTITION p4116 VALUES IN (16464,16465,16466,16467), +PARTITION p4117 VALUES IN (16468,16469,16470,16471), +PARTITION p4118 VALUES IN (16472,16473,16474,16475), +PARTITION p4119 VALUES IN (16476,16477,16478,16479), +PARTITION p4120 VALUES IN (16480,16481,16482,16483), +PARTITION p4121 VALUES IN (16484,16485,16486,16487), +PARTITION p4122 VALUES IN (16488,16489,16490,16491), +PARTITION p4123 VALUES IN (16492,16493,16494,16495), +PARTITION p4124 VALUES IN (16496,16497,16498,16499), +PARTITION p4125 VALUES IN (16500,16501,16502,16503), +PARTITION p4126 VALUES IN (16504,16505,16506,16507), +PARTITION p4127 VALUES IN (16508,16509,16510,16511), +PARTITION p4128 VALUES IN (16512,16513,16514,16515), +PARTITION p4129 VALUES IN (16516,16517,16518,16519), +PARTITION p4130 VALUES IN (16520,16521,16522,16523), +PARTITION p4131 VALUES IN (16524,16525,16526,16527), +PARTITION p4132 VALUES IN (16528,16529,16530,16531), +PARTITION p4133 VALUES IN (16532,16533,16534,16535), +PARTITION p4134 VALUES IN (16536,16537,16538,16539), +PARTITION p4135 VALUES IN (16540,16541,16542,16543), +PARTITION p4136 VALUES IN (16544,16545,16546,16547), +PARTITION p4137 VALUES IN (16548,16549,16550,16551), +PARTITION p4138 VALUES IN (16552,16553,16554,16555), +PARTITION p4139 VALUES IN (16556,16557,16558,16559), +PARTITION p4140 VALUES IN (16560,16561,16562,16563), +PARTITION p4141 VALUES IN (16564,16565,16566,16567), +PARTITION p4142 VALUES IN (16568,16569,16570,16571), +PARTITION p4143 VALUES IN (16572,16573,16574,16575), +PARTITION p4144 VALUES IN (16576,16577,16578,16579), +PARTITION p4145 VALUES IN (16580,16581,16582,16583), +PARTITION p4146 VALUES IN (16584,16585,16586,16587), +PARTITION p4147 VALUES IN (16588,16589,16590,16591), +PARTITION p4148 VALUES IN (16592,16593,16594,16595), +PARTITION p4149 VALUES IN (16596,16597,16598,16599), +PARTITION p4150 VALUES IN (16600,16601,16602,16603), +PARTITION p4151 VALUES IN (16604,16605,16606,16607), +PARTITION p4152 VALUES IN (16608,16609,16610,16611), +PARTITION p4153 VALUES IN (16612,16613,16614,16615), +PARTITION p4154 VALUES IN (16616,16617,16618,16619), +PARTITION p4155 VALUES IN (16620,16621,16622,16623), +PARTITION p4156 VALUES IN (16624,16625,16626,16627), +PARTITION p4157 VALUES IN (16628,16629,16630,16631), +PARTITION p4158 VALUES IN (16632,16633,16634,16635), +PARTITION p4159 VALUES IN (16636,16637,16638,16639), +PARTITION p4160 VALUES IN (16640,16641,16642,16643), +PARTITION p4161 VALUES IN (16644,16645,16646,16647), +PARTITION p4162 VALUES IN (16648,16649,16650,16651), +PARTITION p4163 VALUES IN (16652,16653,16654,16655), +PARTITION p4164 VALUES IN (16656,16657,16658,16659), +PARTITION p4165 VALUES IN (16660,16661,16662,16663), +PARTITION p4166 VALUES IN (16664,16665,16666,16667), +PARTITION p4167 VALUES IN (16668,16669,16670,16671), +PARTITION p4168 VALUES IN (16672,16673,16674,16675), +PARTITION p4169 VALUES IN (16676,16677,16678,16679), +PARTITION p4170 VALUES IN (16680,16681,16682,16683), +PARTITION p4171 VALUES IN (16684,16685,16686,16687), +PARTITION p4172 VALUES IN (16688,16689,16690,16691), +PARTITION p4173 VALUES IN (16692,16693,16694,16695), +PARTITION p4174 VALUES IN (16696,16697,16698,16699), +PARTITION p4175 VALUES IN (16700,16701,16702,16703), +PARTITION p4176 VALUES IN (16704,16705,16706,16707), +PARTITION p4177 VALUES IN (16708,16709,16710,16711), +PARTITION p4178 VALUES IN (16712,16713,16714,16715), +PARTITION p4179 VALUES IN (16716,16717,16718,16719), +PARTITION p4180 VALUES IN (16720,16721,16722,16723), +PARTITION p4181 VALUES IN (16724,16725,16726,16727), +PARTITION p4182 VALUES IN (16728,16729,16730,16731), +PARTITION p4183 VALUES IN (16732,16733,16734,16735), +PARTITION p4184 VALUES IN (16736,16737,16738,16739), +PARTITION p4185 VALUES IN (16740,16741,16742,16743), +PARTITION p4186 VALUES IN (16744,16745,16746,16747), +PARTITION p4187 VALUES IN (16748,16749,16750,16751), +PARTITION p4188 VALUES IN (16752,16753,16754,16755), +PARTITION p4189 VALUES IN (16756,16757,16758,16759), +PARTITION p4190 VALUES IN (16760,16761,16762,16763), +PARTITION p4191 VALUES IN (16764,16765,16766,16767), +PARTITION p4192 VALUES IN (16768,16769,16770,16771), +PARTITION p4193 VALUES IN (16772,16773,16774,16775), +PARTITION p4194 VALUES IN (16776,16777,16778,16779), +PARTITION p4195 VALUES IN (16780,16781,16782,16783), +PARTITION p4196 VALUES IN (16784,16785,16786,16787), +PARTITION p4197 VALUES IN (16788,16789,16790,16791), +PARTITION p4198 VALUES IN (16792,16793,16794,16795), +PARTITION p4199 VALUES IN (16796,16797,16798,16799), +PARTITION p4200 VALUES IN (16800,16801,16802,16803), +PARTITION p4201 VALUES IN (16804,16805,16806,16807), +PARTITION p4202 VALUES IN (16808,16809,16810,16811), +PARTITION p4203 VALUES IN (16812,16813,16814,16815), +PARTITION p4204 VALUES IN (16816,16817,16818,16819), +PARTITION p4205 VALUES IN (16820,16821,16822,16823), +PARTITION p4206 VALUES IN (16824,16825,16826,16827), +PARTITION p4207 VALUES IN (16828,16829,16830,16831), +PARTITION p4208 VALUES IN (16832,16833,16834,16835), +PARTITION p4209 VALUES IN (16836,16837,16838,16839), +PARTITION p4210 VALUES IN (16840,16841,16842,16843), +PARTITION p4211 VALUES IN (16844,16845,16846,16847), +PARTITION p4212 VALUES IN (16848,16849,16850,16851), +PARTITION p4213 VALUES IN (16852,16853,16854,16855), +PARTITION p4214 VALUES IN (16856,16857,16858,16859), +PARTITION p4215 VALUES IN (16860,16861,16862,16863), +PARTITION p4216 VALUES IN (16864,16865,16866,16867), +PARTITION p4217 VALUES IN (16868,16869,16870,16871), +PARTITION p4218 VALUES IN (16872,16873,16874,16875), +PARTITION p4219 VALUES IN (16876,16877,16878,16879), +PARTITION p4220 VALUES IN (16880,16881,16882,16883), +PARTITION p4221 VALUES IN (16884,16885,16886,16887), +PARTITION p4222 VALUES IN (16888,16889,16890,16891), +PARTITION p4223 VALUES IN (16892,16893,16894,16895), +PARTITION p4224 VALUES IN (16896,16897,16898,16899), +PARTITION p4225 VALUES IN (16900,16901,16902,16903), +PARTITION p4226 VALUES IN (16904,16905,16906,16907), +PARTITION p4227 VALUES IN (16908,16909,16910,16911), +PARTITION p4228 VALUES IN (16912,16913,16914,16915), +PARTITION p4229 VALUES IN (16916,16917,16918,16919), +PARTITION p4230 VALUES IN (16920,16921,16922,16923), +PARTITION p4231 VALUES IN (16924,16925,16926,16927), +PARTITION p4232 VALUES IN (16928,16929,16930,16931), +PARTITION p4233 VALUES IN (16932,16933,16934,16935), +PARTITION p4234 VALUES IN (16936,16937,16938,16939), +PARTITION p4235 VALUES IN (16940,16941,16942,16943), +PARTITION p4236 VALUES IN (16944,16945,16946,16947), +PARTITION p4237 VALUES IN (16948,16949,16950,16951), +PARTITION p4238 VALUES IN (16952,16953,16954,16955), +PARTITION p4239 VALUES IN (16956,16957,16958,16959), +PARTITION p4240 VALUES IN (16960,16961,16962,16963), +PARTITION p4241 VALUES IN (16964,16965,16966,16967), +PARTITION p4242 VALUES IN (16968,16969,16970,16971), +PARTITION p4243 VALUES IN (16972,16973,16974,16975), +PARTITION p4244 VALUES IN (16976,16977,16978,16979), +PARTITION p4245 VALUES IN (16980,16981,16982,16983), +PARTITION p4246 VALUES IN (16984,16985,16986,16987), +PARTITION p4247 VALUES IN (16988,16989,16990,16991), +PARTITION p4248 VALUES IN (16992,16993,16994,16995), +PARTITION p4249 VALUES IN (16996,16997,16998,16999), +PARTITION p4250 VALUES IN (17000,17001,17002,17003), +PARTITION p4251 VALUES IN (17004,17005,17006,17007), +PARTITION p4252 VALUES IN (17008,17009,17010,17011), +PARTITION p4253 VALUES IN (17012,17013,17014,17015), +PARTITION p4254 VALUES IN (17016,17017,17018,17019), +PARTITION p4255 VALUES IN (17020,17021,17022,17023), +PARTITION p4256 VALUES IN (17024,17025,17026,17027), +PARTITION p4257 VALUES IN (17028,17029,17030,17031), +PARTITION p4258 VALUES IN (17032,17033,17034,17035), +PARTITION p4259 VALUES IN (17036,17037,17038,17039), +PARTITION p4260 VALUES IN (17040,17041,17042,17043), +PARTITION p4261 VALUES IN (17044,17045,17046,17047), +PARTITION p4262 VALUES IN (17048,17049,17050,17051), +PARTITION p4263 VALUES IN (17052,17053,17054,17055), +PARTITION p4264 VALUES IN (17056,17057,17058,17059), +PARTITION p4265 VALUES IN (17060,17061,17062,17063), +PARTITION p4266 VALUES IN (17064,17065,17066,17067), +PARTITION p4267 VALUES IN (17068,17069,17070,17071), +PARTITION p4268 VALUES IN (17072,17073,17074,17075), +PARTITION p4269 VALUES IN (17076,17077,17078,17079), +PARTITION p4270 VALUES IN (17080,17081,17082,17083), +PARTITION p4271 VALUES IN (17084,17085,17086,17087), +PARTITION p4272 VALUES IN (17088,17089,17090,17091), +PARTITION p4273 VALUES IN (17092,17093,17094,17095), +PARTITION p4274 VALUES IN (17096,17097,17098,17099), +PARTITION p4275 VALUES IN (17100,17101,17102,17103), +PARTITION p4276 VALUES IN (17104,17105,17106,17107), +PARTITION p4277 VALUES IN (17108,17109,17110,17111), +PARTITION p4278 VALUES IN (17112,17113,17114,17115), +PARTITION p4279 VALUES IN (17116,17117,17118,17119), +PARTITION p4280 VALUES IN (17120,17121,17122,17123), +PARTITION p4281 VALUES IN (17124,17125,17126,17127), +PARTITION p4282 VALUES IN (17128,17129,17130,17131), +PARTITION p4283 VALUES IN (17132,17133,17134,17135), +PARTITION p4284 VALUES IN (17136,17137,17138,17139), +PARTITION p4285 VALUES IN (17140,17141,17142,17143), +PARTITION p4286 VALUES IN (17144,17145,17146,17147), +PARTITION p4287 VALUES IN (17148,17149,17150,17151), +PARTITION p4288 VALUES IN (17152,17153,17154,17155), +PARTITION p4289 VALUES IN (17156,17157,17158,17159), +PARTITION p4290 VALUES IN (17160,17161,17162,17163), +PARTITION p4291 VALUES IN (17164,17165,17166,17167), +PARTITION p4292 VALUES IN (17168,17169,17170,17171), +PARTITION p4293 VALUES IN (17172,17173,17174,17175), +PARTITION p4294 VALUES IN (17176,17177,17178,17179), +PARTITION p4295 VALUES IN (17180,17181,17182,17183), +PARTITION p4296 VALUES IN (17184,17185,17186,17187), +PARTITION p4297 VALUES IN (17188,17189,17190,17191), +PARTITION p4298 VALUES IN (17192,17193,17194,17195), +PARTITION p4299 VALUES IN (17196,17197,17198,17199), +PARTITION p4300 VALUES IN (17200,17201,17202,17203), +PARTITION p4301 VALUES IN (17204,17205,17206,17207), +PARTITION p4302 VALUES IN (17208,17209,17210,17211), +PARTITION p4303 VALUES IN (17212,17213,17214,17215), +PARTITION p4304 VALUES IN (17216,17217,17218,17219), +PARTITION p4305 VALUES IN (17220,17221,17222,17223), +PARTITION p4306 VALUES IN (17224,17225,17226,17227), +PARTITION p4307 VALUES IN (17228,17229,17230,17231), +PARTITION p4308 VALUES IN (17232,17233,17234,17235), +PARTITION p4309 VALUES IN (17236,17237,17238,17239), +PARTITION p4310 VALUES IN (17240,17241,17242,17243), +PARTITION p4311 VALUES IN (17244,17245,17246,17247), +PARTITION p4312 VALUES IN (17248,17249,17250,17251), +PARTITION p4313 VALUES IN (17252,17253,17254,17255), +PARTITION p4314 VALUES IN (17256,17257,17258,17259), +PARTITION p4315 VALUES IN (17260,17261,17262,17263), +PARTITION p4316 VALUES IN (17264,17265,17266,17267), +PARTITION p4317 VALUES IN (17268,17269,17270,17271), +PARTITION p4318 VALUES IN (17272,17273,17274,17275), +PARTITION p4319 VALUES IN (17276,17277,17278,17279), +PARTITION p4320 VALUES IN (17280,17281,17282,17283), +PARTITION p4321 VALUES IN (17284,17285,17286,17287), +PARTITION p4322 VALUES IN (17288,17289,17290,17291), +PARTITION p4323 VALUES IN (17292,17293,17294,17295), +PARTITION p4324 VALUES IN (17296,17297,17298,17299), +PARTITION p4325 VALUES IN (17300,17301,17302,17303), +PARTITION p4326 VALUES IN (17304,17305,17306,17307), +PARTITION p4327 VALUES IN (17308,17309,17310,17311), +PARTITION p4328 VALUES IN (17312,17313,17314,17315), +PARTITION p4329 VALUES IN (17316,17317,17318,17319), +PARTITION p4330 VALUES IN (17320,17321,17322,17323), +PARTITION p4331 VALUES IN (17324,17325,17326,17327), +PARTITION p4332 VALUES IN (17328,17329,17330,17331), +PARTITION p4333 VALUES IN (17332,17333,17334,17335), +PARTITION p4334 VALUES IN (17336,17337,17338,17339), +PARTITION p4335 VALUES IN (17340,17341,17342,17343), +PARTITION p4336 VALUES IN (17344,17345,17346,17347), +PARTITION p4337 VALUES IN (17348,17349,17350,17351), +PARTITION p4338 VALUES IN (17352,17353,17354,17355), +PARTITION p4339 VALUES IN (17356,17357,17358,17359), +PARTITION p4340 VALUES IN (17360,17361,17362,17363), +PARTITION p4341 VALUES IN (17364,17365,17366,17367), +PARTITION p4342 VALUES IN (17368,17369,17370,17371), +PARTITION p4343 VALUES IN (17372,17373,17374,17375), +PARTITION p4344 VALUES IN (17376,17377,17378,17379), +PARTITION p4345 VALUES IN (17380,17381,17382,17383), +PARTITION p4346 VALUES IN (17384,17385,17386,17387), +PARTITION p4347 VALUES IN (17388,17389,17390,17391), +PARTITION p4348 VALUES IN (17392,17393,17394,17395), +PARTITION p4349 VALUES IN (17396,17397,17398,17399), +PARTITION p4350 VALUES IN (17400,17401,17402,17403), +PARTITION p4351 VALUES IN (17404,17405,17406,17407), +PARTITION p4352 VALUES IN (17408,17409,17410,17411), +PARTITION p4353 VALUES IN (17412,17413,17414,17415), +PARTITION p4354 VALUES IN (17416,17417,17418,17419), +PARTITION p4355 VALUES IN (17420,17421,17422,17423), +PARTITION p4356 VALUES IN (17424,17425,17426,17427), +PARTITION p4357 VALUES IN (17428,17429,17430,17431), +PARTITION p4358 VALUES IN (17432,17433,17434,17435), +PARTITION p4359 VALUES IN (17436,17437,17438,17439), +PARTITION p4360 VALUES IN (17440,17441,17442,17443), +PARTITION p4361 VALUES IN (17444,17445,17446,17447), +PARTITION p4362 VALUES IN (17448,17449,17450,17451), +PARTITION p4363 VALUES IN (17452,17453,17454,17455), +PARTITION p4364 VALUES IN (17456,17457,17458,17459), +PARTITION p4365 VALUES IN (17460,17461,17462,17463), +PARTITION p4366 VALUES IN (17464,17465,17466,17467), +PARTITION p4367 VALUES IN (17468,17469,17470,17471), +PARTITION p4368 VALUES IN (17472,17473,17474,17475), +PARTITION p4369 VALUES IN (17476,17477,17478,17479), +PARTITION p4370 VALUES IN (17480,17481,17482,17483), +PARTITION p4371 VALUES IN (17484,17485,17486,17487), +PARTITION p4372 VALUES IN (17488,17489,17490,17491), +PARTITION p4373 VALUES IN (17492,17493,17494,17495), +PARTITION p4374 VALUES IN (17496,17497,17498,17499), +PARTITION p4375 VALUES IN (17500,17501,17502,17503), +PARTITION p4376 VALUES IN (17504,17505,17506,17507), +PARTITION p4377 VALUES IN (17508,17509,17510,17511), +PARTITION p4378 VALUES IN (17512,17513,17514,17515), +PARTITION p4379 VALUES IN (17516,17517,17518,17519), +PARTITION p4380 VALUES IN (17520,17521,17522,17523), +PARTITION p4381 VALUES IN (17524,17525,17526,17527), +PARTITION p4382 VALUES IN (17528,17529,17530,17531), +PARTITION p4383 VALUES IN (17532,17533,17534,17535), +PARTITION p4384 VALUES IN (17536,17537,17538,17539), +PARTITION p4385 VALUES IN (17540,17541,17542,17543), +PARTITION p4386 VALUES IN (17544,17545,17546,17547), +PARTITION p4387 VALUES IN (17548,17549,17550,17551), +PARTITION p4388 VALUES IN (17552,17553,17554,17555), +PARTITION p4389 VALUES IN (17556,17557,17558,17559), +PARTITION p4390 VALUES IN (17560,17561,17562,17563), +PARTITION p4391 VALUES IN (17564,17565,17566,17567), +PARTITION p4392 VALUES IN (17568,17569,17570,17571), +PARTITION p4393 VALUES IN (17572,17573,17574,17575), +PARTITION p4394 VALUES IN (17576,17577,17578,17579), +PARTITION p4395 VALUES IN (17580,17581,17582,17583), +PARTITION p4396 VALUES IN (17584,17585,17586,17587), +PARTITION p4397 VALUES IN (17588,17589,17590,17591), +PARTITION p4398 VALUES IN (17592,17593,17594,17595), +PARTITION p4399 VALUES IN (17596,17597,17598,17599), +PARTITION p4400 VALUES IN (17600,17601,17602,17603), +PARTITION p4401 VALUES IN (17604,17605,17606,17607), +PARTITION p4402 VALUES IN (17608,17609,17610,17611), +PARTITION p4403 VALUES IN (17612,17613,17614,17615), +PARTITION p4404 VALUES IN (17616,17617,17618,17619), +PARTITION p4405 VALUES IN (17620,17621,17622,17623), +PARTITION p4406 VALUES IN (17624,17625,17626,17627), +PARTITION p4407 VALUES IN (17628,17629,17630,17631), +PARTITION p4408 VALUES IN (17632,17633,17634,17635), +PARTITION p4409 VALUES IN (17636,17637,17638,17639), +PARTITION p4410 VALUES IN (17640,17641,17642,17643), +PARTITION p4411 VALUES IN (17644,17645,17646,17647), +PARTITION p4412 VALUES IN (17648,17649,17650,17651), +PARTITION p4413 VALUES IN (17652,17653,17654,17655), +PARTITION p4414 VALUES IN (17656,17657,17658,17659), +PARTITION p4415 VALUES IN (17660,17661,17662,17663), +PARTITION p4416 VALUES IN (17664,17665,17666,17667), +PARTITION p4417 VALUES IN (17668,17669,17670,17671), +PARTITION p4418 VALUES IN (17672,17673,17674,17675), +PARTITION p4419 VALUES IN (17676,17677,17678,17679), +PARTITION p4420 VALUES IN (17680,17681,17682,17683), +PARTITION p4421 VALUES IN (17684,17685,17686,17687), +PARTITION p4422 VALUES IN (17688,17689,17690,17691), +PARTITION p4423 VALUES IN (17692,17693,17694,17695), +PARTITION p4424 VALUES IN (17696,17697,17698,17699), +PARTITION p4425 VALUES IN (17700,17701,17702,17703), +PARTITION p4426 VALUES IN (17704,17705,17706,17707), +PARTITION p4427 VALUES IN (17708,17709,17710,17711), +PARTITION p4428 VALUES IN (17712,17713,17714,17715), +PARTITION p4429 VALUES IN (17716,17717,17718,17719), +PARTITION p4430 VALUES IN (17720,17721,17722,17723), +PARTITION p4431 VALUES IN (17724,17725,17726,17727), +PARTITION p4432 VALUES IN (17728,17729,17730,17731), +PARTITION p4433 VALUES IN (17732,17733,17734,17735), +PARTITION p4434 VALUES IN (17736,17737,17738,17739), +PARTITION p4435 VALUES IN (17740,17741,17742,17743), +PARTITION p4436 VALUES IN (17744,17745,17746,17747), +PARTITION p4437 VALUES IN (17748,17749,17750,17751), +PARTITION p4438 VALUES IN (17752,17753,17754,17755), +PARTITION p4439 VALUES IN (17756,17757,17758,17759), +PARTITION p4440 VALUES IN (17760,17761,17762,17763), +PARTITION p4441 VALUES IN (17764,17765,17766,17767), +PARTITION p4442 VALUES IN (17768,17769,17770,17771), +PARTITION p4443 VALUES IN (17772,17773,17774,17775), +PARTITION p4444 VALUES IN (17776,17777,17778,17779), +PARTITION p4445 VALUES IN (17780,17781,17782,17783), +PARTITION p4446 VALUES IN (17784,17785,17786,17787), +PARTITION p4447 VALUES IN (17788,17789,17790,17791), +PARTITION p4448 VALUES IN (17792,17793,17794,17795), +PARTITION p4449 VALUES IN (17796,17797,17798,17799), +PARTITION p4450 VALUES IN (17800,17801,17802,17803), +PARTITION p4451 VALUES IN (17804,17805,17806,17807), +PARTITION p4452 VALUES IN (17808,17809,17810,17811), +PARTITION p4453 VALUES IN (17812,17813,17814,17815), +PARTITION p4454 VALUES IN (17816,17817,17818,17819), +PARTITION p4455 VALUES IN (17820,17821,17822,17823), +PARTITION p4456 VALUES IN (17824,17825,17826,17827), +PARTITION p4457 VALUES IN (17828,17829,17830,17831), +PARTITION p4458 VALUES IN (17832,17833,17834,17835), +PARTITION p4459 VALUES IN (17836,17837,17838,17839), +PARTITION p4460 VALUES IN (17840,17841,17842,17843), +PARTITION p4461 VALUES IN (17844,17845,17846,17847), +PARTITION p4462 VALUES IN (17848,17849,17850,17851), +PARTITION p4463 VALUES IN (17852,17853,17854,17855), +PARTITION p4464 VALUES IN (17856,17857,17858,17859), +PARTITION p4465 VALUES IN (17860,17861,17862,17863), +PARTITION p4466 VALUES IN (17864,17865,17866,17867), +PARTITION p4467 VALUES IN (17868,17869,17870,17871), +PARTITION p4468 VALUES IN (17872,17873,17874,17875), +PARTITION p4469 VALUES IN (17876,17877,17878,17879), +PARTITION p4470 VALUES IN (17880,17881,17882,17883), +PARTITION p4471 VALUES IN (17884,17885,17886,17887), +PARTITION p4472 VALUES IN (17888,17889,17890,17891), +PARTITION p4473 VALUES IN (17892,17893,17894,17895), +PARTITION p4474 VALUES IN (17896,17897,17898,17899), +PARTITION p4475 VALUES IN (17900,17901,17902,17903), +PARTITION p4476 VALUES IN (17904,17905,17906,17907), +PARTITION p4477 VALUES IN (17908,17909,17910,17911), +PARTITION p4478 VALUES IN (17912,17913,17914,17915), +PARTITION p4479 VALUES IN (17916,17917,17918,17919), +PARTITION p4480 VALUES IN (17920,17921,17922,17923), +PARTITION p4481 VALUES IN (17924,17925,17926,17927), +PARTITION p4482 VALUES IN (17928,17929,17930,17931), +PARTITION p4483 VALUES IN (17932,17933,17934,17935), +PARTITION p4484 VALUES IN (17936,17937,17938,17939), +PARTITION p4485 VALUES IN (17940,17941,17942,17943), +PARTITION p4486 VALUES IN (17944,17945,17946,17947), +PARTITION p4487 VALUES IN (17948,17949,17950,17951), +PARTITION p4488 VALUES IN (17952,17953,17954,17955), +PARTITION p4489 VALUES IN (17956,17957,17958,17959), +PARTITION p4490 VALUES IN (17960,17961,17962,17963), +PARTITION p4491 VALUES IN (17964,17965,17966,17967), +PARTITION p4492 VALUES IN (17968,17969,17970,17971), +PARTITION p4493 VALUES IN (17972,17973,17974,17975), +PARTITION p4494 VALUES IN (17976,17977,17978,17979), +PARTITION p4495 VALUES IN (17980,17981,17982,17983), +PARTITION p4496 VALUES IN (17984,17985,17986,17987), +PARTITION p4497 VALUES IN (17988,17989,17990,17991), +PARTITION p4498 VALUES IN (17992,17993,17994,17995), +PARTITION p4499 VALUES IN (17996,17997,17998,17999), +PARTITION p4500 VALUES IN (18000,18001,18002,18003), +PARTITION p4501 VALUES IN (18004,18005,18006,18007), +PARTITION p4502 VALUES IN (18008,18009,18010,18011), +PARTITION p4503 VALUES IN (18012,18013,18014,18015), +PARTITION p4504 VALUES IN (18016,18017,18018,18019), +PARTITION p4505 VALUES IN (18020,18021,18022,18023), +PARTITION p4506 VALUES IN (18024,18025,18026,18027), +PARTITION p4507 VALUES IN (18028,18029,18030,18031), +PARTITION p4508 VALUES IN (18032,18033,18034,18035), +PARTITION p4509 VALUES IN (18036,18037,18038,18039), +PARTITION p4510 VALUES IN (18040,18041,18042,18043), +PARTITION p4511 VALUES IN (18044,18045,18046,18047), +PARTITION p4512 VALUES IN (18048,18049,18050,18051), +PARTITION p4513 VALUES IN (18052,18053,18054,18055), +PARTITION p4514 VALUES IN (18056,18057,18058,18059), +PARTITION p4515 VALUES IN (18060,18061,18062,18063), +PARTITION p4516 VALUES IN (18064,18065,18066,18067), +PARTITION p4517 VALUES IN (18068,18069,18070,18071), +PARTITION p4518 VALUES IN (18072,18073,18074,18075), +PARTITION p4519 VALUES IN (18076,18077,18078,18079), +PARTITION p4520 VALUES IN (18080,18081,18082,18083), +PARTITION p4521 VALUES IN (18084,18085,18086,18087), +PARTITION p4522 VALUES IN (18088,18089,18090,18091), +PARTITION p4523 VALUES IN (18092,18093,18094,18095), +PARTITION p4524 VALUES IN (18096,18097,18098,18099), +PARTITION p4525 VALUES IN (18100,18101,18102,18103), +PARTITION p4526 VALUES IN (18104,18105,18106,18107), +PARTITION p4527 VALUES IN (18108,18109,18110,18111), +PARTITION p4528 VALUES IN (18112,18113,18114,18115), +PARTITION p4529 VALUES IN (18116,18117,18118,18119), +PARTITION p4530 VALUES IN (18120,18121,18122,18123), +PARTITION p4531 VALUES IN (18124,18125,18126,18127), +PARTITION p4532 VALUES IN (18128,18129,18130,18131), +PARTITION p4533 VALUES IN (18132,18133,18134,18135), +PARTITION p4534 VALUES IN (18136,18137,18138,18139), +PARTITION p4535 VALUES IN (18140,18141,18142,18143), +PARTITION p4536 VALUES IN (18144,18145,18146,18147), +PARTITION p4537 VALUES IN (18148,18149,18150,18151), +PARTITION p4538 VALUES IN (18152,18153,18154,18155), +PARTITION p4539 VALUES IN (18156,18157,18158,18159), +PARTITION p4540 VALUES IN (18160,18161,18162,18163), +PARTITION p4541 VALUES IN (18164,18165,18166,18167), +PARTITION p4542 VALUES IN (18168,18169,18170,18171), +PARTITION p4543 VALUES IN (18172,18173,18174,18175), +PARTITION p4544 VALUES IN (18176,18177,18178,18179), +PARTITION p4545 VALUES IN (18180,18181,18182,18183), +PARTITION p4546 VALUES IN (18184,18185,18186,18187), +PARTITION p4547 VALUES IN (18188,18189,18190,18191), +PARTITION p4548 VALUES IN (18192,18193,18194,18195), +PARTITION p4549 VALUES IN (18196,18197,18198,18199), +PARTITION p4550 VALUES IN (18200,18201,18202,18203), +PARTITION p4551 VALUES IN (18204,18205,18206,18207), +PARTITION p4552 VALUES IN (18208,18209,18210,18211), +PARTITION p4553 VALUES IN (18212,18213,18214,18215), +PARTITION p4554 VALUES IN (18216,18217,18218,18219), +PARTITION p4555 VALUES IN (18220,18221,18222,18223), +PARTITION p4556 VALUES IN (18224,18225,18226,18227), +PARTITION p4557 VALUES IN (18228,18229,18230,18231), +PARTITION p4558 VALUES IN (18232,18233,18234,18235), +PARTITION p4559 VALUES IN (18236,18237,18238,18239), +PARTITION p4560 VALUES IN (18240,18241,18242,18243), +PARTITION p4561 VALUES IN (18244,18245,18246,18247), +PARTITION p4562 VALUES IN (18248,18249,18250,18251), +PARTITION p4563 VALUES IN (18252,18253,18254,18255), +PARTITION p4564 VALUES IN (18256,18257,18258,18259), +PARTITION p4565 VALUES IN (18260,18261,18262,18263), +PARTITION p4566 VALUES IN (18264,18265,18266,18267), +PARTITION p4567 VALUES IN (18268,18269,18270,18271), +PARTITION p4568 VALUES IN (18272,18273,18274,18275), +PARTITION p4569 VALUES IN (18276,18277,18278,18279), +PARTITION p4570 VALUES IN (18280,18281,18282,18283), +PARTITION p4571 VALUES IN (18284,18285,18286,18287), +PARTITION p4572 VALUES IN (18288,18289,18290,18291), +PARTITION p4573 VALUES IN (18292,18293,18294,18295), +PARTITION p4574 VALUES IN (18296,18297,18298,18299), +PARTITION p4575 VALUES IN (18300,18301,18302,18303), +PARTITION p4576 VALUES IN (18304,18305,18306,18307), +PARTITION p4577 VALUES IN (18308,18309,18310,18311), +PARTITION p4578 VALUES IN (18312,18313,18314,18315), +PARTITION p4579 VALUES IN (18316,18317,18318,18319), +PARTITION p4580 VALUES IN (18320,18321,18322,18323), +PARTITION p4581 VALUES IN (18324,18325,18326,18327), +PARTITION p4582 VALUES IN (18328,18329,18330,18331), +PARTITION p4583 VALUES IN (18332,18333,18334,18335), +PARTITION p4584 VALUES IN (18336,18337,18338,18339), +PARTITION p4585 VALUES IN (18340,18341,18342,18343), +PARTITION p4586 VALUES IN (18344,18345,18346,18347), +PARTITION p4587 VALUES IN (18348,18349,18350,18351), +PARTITION p4588 VALUES IN (18352,18353,18354,18355), +PARTITION p4589 VALUES IN (18356,18357,18358,18359), +PARTITION p4590 VALUES IN (18360,18361,18362,18363), +PARTITION p4591 VALUES IN (18364,18365,18366,18367), +PARTITION p4592 VALUES IN (18368,18369,18370,18371), +PARTITION p4593 VALUES IN (18372,18373,18374,18375), +PARTITION p4594 VALUES IN (18376,18377,18378,18379), +PARTITION p4595 VALUES IN (18380,18381,18382,18383), +PARTITION p4596 VALUES IN (18384,18385,18386,18387), +PARTITION p4597 VALUES IN (18388,18389,18390,18391), +PARTITION p4598 VALUES IN (18392,18393,18394,18395), +PARTITION p4599 VALUES IN (18396,18397,18398,18399), +PARTITION p4600 VALUES IN (18400,18401,18402,18403), +PARTITION p4601 VALUES IN (18404,18405,18406,18407), +PARTITION p4602 VALUES IN (18408,18409,18410,18411), +PARTITION p4603 VALUES IN (18412,18413,18414,18415), +PARTITION p4604 VALUES IN (18416,18417,18418,18419), +PARTITION p4605 VALUES IN (18420,18421,18422,18423), +PARTITION p4606 VALUES IN (18424,18425,18426,18427), +PARTITION p4607 VALUES IN (18428,18429,18430,18431), +PARTITION p4608 VALUES IN (18432,18433,18434,18435), +PARTITION p4609 VALUES IN (18436,18437,18438,18439), +PARTITION p4610 VALUES IN (18440,18441,18442,18443), +PARTITION p4611 VALUES IN (18444,18445,18446,18447), +PARTITION p4612 VALUES IN (18448,18449,18450,18451), +PARTITION p4613 VALUES IN (18452,18453,18454,18455), +PARTITION p4614 VALUES IN (18456,18457,18458,18459), +PARTITION p4615 VALUES IN (18460,18461,18462,18463), +PARTITION p4616 VALUES IN (18464,18465,18466,18467), +PARTITION p4617 VALUES IN (18468,18469,18470,18471), +PARTITION p4618 VALUES IN (18472,18473,18474,18475), +PARTITION p4619 VALUES IN (18476,18477,18478,18479), +PARTITION p4620 VALUES IN (18480,18481,18482,18483), +PARTITION p4621 VALUES IN (18484,18485,18486,18487), +PARTITION p4622 VALUES IN (18488,18489,18490,18491), +PARTITION p4623 VALUES IN (18492,18493,18494,18495), +PARTITION p4624 VALUES IN (18496,18497,18498,18499), +PARTITION p4625 VALUES IN (18500,18501,18502,18503), +PARTITION p4626 VALUES IN (18504,18505,18506,18507), +PARTITION p4627 VALUES IN (18508,18509,18510,18511), +PARTITION p4628 VALUES IN (18512,18513,18514,18515), +PARTITION p4629 VALUES IN (18516,18517,18518,18519), +PARTITION p4630 VALUES IN (18520,18521,18522,18523), +PARTITION p4631 VALUES IN (18524,18525,18526,18527), +PARTITION p4632 VALUES IN (18528,18529,18530,18531), +PARTITION p4633 VALUES IN (18532,18533,18534,18535), +PARTITION p4634 VALUES IN (18536,18537,18538,18539), +PARTITION p4635 VALUES IN (18540,18541,18542,18543), +PARTITION p4636 VALUES IN (18544,18545,18546,18547), +PARTITION p4637 VALUES IN (18548,18549,18550,18551), +PARTITION p4638 VALUES IN (18552,18553,18554,18555), +PARTITION p4639 VALUES IN (18556,18557,18558,18559), +PARTITION p4640 VALUES IN (18560,18561,18562,18563), +PARTITION p4641 VALUES IN (18564,18565,18566,18567), +PARTITION p4642 VALUES IN (18568,18569,18570,18571), +PARTITION p4643 VALUES IN (18572,18573,18574,18575), +PARTITION p4644 VALUES IN (18576,18577,18578,18579), +PARTITION p4645 VALUES IN (18580,18581,18582,18583), +PARTITION p4646 VALUES IN (18584,18585,18586,18587), +PARTITION p4647 VALUES IN (18588,18589,18590,18591), +PARTITION p4648 VALUES IN (18592,18593,18594,18595), +PARTITION p4649 VALUES IN (18596,18597,18598,18599), +PARTITION p4650 VALUES IN (18600,18601,18602,18603), +PARTITION p4651 VALUES IN (18604,18605,18606,18607), +PARTITION p4652 VALUES IN (18608,18609,18610,18611), +PARTITION p4653 VALUES IN (18612,18613,18614,18615), +PARTITION p4654 VALUES IN (18616,18617,18618,18619), +PARTITION p4655 VALUES IN (18620,18621,18622,18623), +PARTITION p4656 VALUES IN (18624,18625,18626,18627), +PARTITION p4657 VALUES IN (18628,18629,18630,18631), +PARTITION p4658 VALUES IN (18632,18633,18634,18635), +PARTITION p4659 VALUES IN (18636,18637,18638,18639), +PARTITION p4660 VALUES IN (18640,18641,18642,18643), +PARTITION p4661 VALUES IN (18644,18645,18646,18647), +PARTITION p4662 VALUES IN (18648,18649,18650,18651), +PARTITION p4663 VALUES IN (18652,18653,18654,18655), +PARTITION p4664 VALUES IN (18656,18657,18658,18659), +PARTITION p4665 VALUES IN (18660,18661,18662,18663), +PARTITION p4666 VALUES IN (18664,18665,18666,18667), +PARTITION p4667 VALUES IN (18668,18669,18670,18671), +PARTITION p4668 VALUES IN (18672,18673,18674,18675), +PARTITION p4669 VALUES IN (18676,18677,18678,18679), +PARTITION p4670 VALUES IN (18680,18681,18682,18683), +PARTITION p4671 VALUES IN (18684,18685,18686,18687), +PARTITION p4672 VALUES IN (18688,18689,18690,18691), +PARTITION p4673 VALUES IN (18692,18693,18694,18695), +PARTITION p4674 VALUES IN (18696,18697,18698,18699), +PARTITION p4675 VALUES IN (18700,18701,18702,18703), +PARTITION p4676 VALUES IN (18704,18705,18706,18707), +PARTITION p4677 VALUES IN (18708,18709,18710,18711), +PARTITION p4678 VALUES IN (18712,18713,18714,18715), +PARTITION p4679 VALUES IN (18716,18717,18718,18719), +PARTITION p4680 VALUES IN (18720,18721,18722,18723), +PARTITION p4681 VALUES IN (18724,18725,18726,18727), +PARTITION p4682 VALUES IN (18728,18729,18730,18731), +PARTITION p4683 VALUES IN (18732,18733,18734,18735), +PARTITION p4684 VALUES IN (18736,18737,18738,18739), +PARTITION p4685 VALUES IN (18740,18741,18742,18743), +PARTITION p4686 VALUES IN (18744,18745,18746,18747), +PARTITION p4687 VALUES IN (18748,18749,18750,18751), +PARTITION p4688 VALUES IN (18752,18753,18754,18755), +PARTITION p4689 VALUES IN (18756,18757,18758,18759), +PARTITION p4690 VALUES IN (18760,18761,18762,18763), +PARTITION p4691 VALUES IN (18764,18765,18766,18767), +PARTITION p4692 VALUES IN (18768,18769,18770,18771), +PARTITION p4693 VALUES IN (18772,18773,18774,18775), +PARTITION p4694 VALUES IN (18776,18777,18778,18779), +PARTITION p4695 VALUES IN (18780,18781,18782,18783), +PARTITION p4696 VALUES IN (18784,18785,18786,18787), +PARTITION p4697 VALUES IN (18788,18789,18790,18791), +PARTITION p4698 VALUES IN (18792,18793,18794,18795), +PARTITION p4699 VALUES IN (18796,18797,18798,18799), +PARTITION p4700 VALUES IN (18800,18801,18802,18803), +PARTITION p4701 VALUES IN (18804,18805,18806,18807), +PARTITION p4702 VALUES IN (18808,18809,18810,18811), +PARTITION p4703 VALUES IN (18812,18813,18814,18815), +PARTITION p4704 VALUES IN (18816,18817,18818,18819), +PARTITION p4705 VALUES IN (18820,18821,18822,18823), +PARTITION p4706 VALUES IN (18824,18825,18826,18827), +PARTITION p4707 VALUES IN (18828,18829,18830,18831), +PARTITION p4708 VALUES IN (18832,18833,18834,18835), +PARTITION p4709 VALUES IN (18836,18837,18838,18839), +PARTITION p4710 VALUES IN (18840,18841,18842,18843), +PARTITION p4711 VALUES IN (18844,18845,18846,18847), +PARTITION p4712 VALUES IN (18848,18849,18850,18851), +PARTITION p4713 VALUES IN (18852,18853,18854,18855), +PARTITION p4714 VALUES IN (18856,18857,18858,18859), +PARTITION p4715 VALUES IN (18860,18861,18862,18863), +PARTITION p4716 VALUES IN (18864,18865,18866,18867), +PARTITION p4717 VALUES IN (18868,18869,18870,18871), +PARTITION p4718 VALUES IN (18872,18873,18874,18875), +PARTITION p4719 VALUES IN (18876,18877,18878,18879), +PARTITION p4720 VALUES IN (18880,18881,18882,18883), +PARTITION p4721 VALUES IN (18884,18885,18886,18887), +PARTITION p4722 VALUES IN (18888,18889,18890,18891), +PARTITION p4723 VALUES IN (18892,18893,18894,18895), +PARTITION p4724 VALUES IN (18896,18897,18898,18899), +PARTITION p4725 VALUES IN (18900,18901,18902,18903), +PARTITION p4726 VALUES IN (18904,18905,18906,18907), +PARTITION p4727 VALUES IN (18908,18909,18910,18911), +PARTITION p4728 VALUES IN (18912,18913,18914,18915), +PARTITION p4729 VALUES IN (18916,18917,18918,18919), +PARTITION p4730 VALUES IN (18920,18921,18922,18923), +PARTITION p4731 VALUES IN (18924,18925,18926,18927), +PARTITION p4732 VALUES IN (18928,18929,18930,18931), +PARTITION p4733 VALUES IN (18932,18933,18934,18935), +PARTITION p4734 VALUES IN (18936,18937,18938,18939), +PARTITION p4735 VALUES IN (18940,18941,18942,18943), +PARTITION p4736 VALUES IN (18944,18945,18946,18947), +PARTITION p4737 VALUES IN (18948,18949,18950,18951), +PARTITION p4738 VALUES IN (18952,18953,18954,18955), +PARTITION p4739 VALUES IN (18956,18957,18958,18959), +PARTITION p4740 VALUES IN (18960,18961,18962,18963), +PARTITION p4741 VALUES IN (18964,18965,18966,18967), +PARTITION p4742 VALUES IN (18968,18969,18970,18971), +PARTITION p4743 VALUES IN (18972,18973,18974,18975), +PARTITION p4744 VALUES IN (18976,18977,18978,18979), +PARTITION p4745 VALUES IN (18980,18981,18982,18983), +PARTITION p4746 VALUES IN (18984,18985,18986,18987), +PARTITION p4747 VALUES IN (18988,18989,18990,18991), +PARTITION p4748 VALUES IN (18992,18993,18994,18995), +PARTITION p4749 VALUES IN (18996,18997,18998,18999), +PARTITION p4750 VALUES IN (19000,19001,19002,19003), +PARTITION p4751 VALUES IN (19004,19005,19006,19007), +PARTITION p4752 VALUES IN (19008,19009,19010,19011), +PARTITION p4753 VALUES IN (19012,19013,19014,19015), +PARTITION p4754 VALUES IN (19016,19017,19018,19019), +PARTITION p4755 VALUES IN (19020,19021,19022,19023), +PARTITION p4756 VALUES IN (19024,19025,19026,19027), +PARTITION p4757 VALUES IN (19028,19029,19030,19031), +PARTITION p4758 VALUES IN (19032,19033,19034,19035), +PARTITION p4759 VALUES IN (19036,19037,19038,19039), +PARTITION p4760 VALUES IN (19040,19041,19042,19043), +PARTITION p4761 VALUES IN (19044,19045,19046,19047), +PARTITION p4762 VALUES IN (19048,19049,19050,19051), +PARTITION p4763 VALUES IN (19052,19053,19054,19055), +PARTITION p4764 VALUES IN (19056,19057,19058,19059), +PARTITION p4765 VALUES IN (19060,19061,19062,19063), +PARTITION p4766 VALUES IN (19064,19065,19066,19067), +PARTITION p4767 VALUES IN (19068,19069,19070,19071), +PARTITION p4768 VALUES IN (19072,19073,19074,19075), +PARTITION p4769 VALUES IN (19076,19077,19078,19079), +PARTITION p4770 VALUES IN (19080,19081,19082,19083), +PARTITION p4771 VALUES IN (19084,19085,19086,19087), +PARTITION p4772 VALUES IN (19088,19089,19090,19091), +PARTITION p4773 VALUES IN (19092,19093,19094,19095), +PARTITION p4774 VALUES IN (19096,19097,19098,19099), +PARTITION p4775 VALUES IN (19100,19101,19102,19103), +PARTITION p4776 VALUES IN (19104,19105,19106,19107), +PARTITION p4777 VALUES IN (19108,19109,19110,19111), +PARTITION p4778 VALUES IN (19112,19113,19114,19115), +PARTITION p4779 VALUES IN (19116,19117,19118,19119), +PARTITION p4780 VALUES IN (19120,19121,19122,19123), +PARTITION p4781 VALUES IN (19124,19125,19126,19127), +PARTITION p4782 VALUES IN (19128,19129,19130,19131), +PARTITION p4783 VALUES IN (19132,19133,19134,19135), +PARTITION p4784 VALUES IN (19136,19137,19138,19139), +PARTITION p4785 VALUES IN (19140,19141,19142,19143), +PARTITION p4786 VALUES IN (19144,19145,19146,19147), +PARTITION p4787 VALUES IN (19148,19149,19150,19151), +PARTITION p4788 VALUES IN (19152,19153,19154,19155), +PARTITION p4789 VALUES IN (19156,19157,19158,19159), +PARTITION p4790 VALUES IN (19160,19161,19162,19163), +PARTITION p4791 VALUES IN (19164,19165,19166,19167), +PARTITION p4792 VALUES IN (19168,19169,19170,19171), +PARTITION p4793 VALUES IN (19172,19173,19174,19175), +PARTITION p4794 VALUES IN (19176,19177,19178,19179), +PARTITION p4795 VALUES IN (19180,19181,19182,19183), +PARTITION p4796 VALUES IN (19184,19185,19186,19187), +PARTITION p4797 VALUES IN (19188,19189,19190,19191), +PARTITION p4798 VALUES IN (19192,19193,19194,19195), +PARTITION p4799 VALUES IN (19196,19197,19198,19199), +PARTITION p4800 VALUES IN (19200,19201,19202,19203), +PARTITION p4801 VALUES IN (19204,19205,19206,19207), +PARTITION p4802 VALUES IN (19208,19209,19210,19211), +PARTITION p4803 VALUES IN (19212,19213,19214,19215), +PARTITION p4804 VALUES IN (19216,19217,19218,19219), +PARTITION p4805 VALUES IN (19220,19221,19222,19223), +PARTITION p4806 VALUES IN (19224,19225,19226,19227), +PARTITION p4807 VALUES IN (19228,19229,19230,19231), +PARTITION p4808 VALUES IN (19232,19233,19234,19235), +PARTITION p4809 VALUES IN (19236,19237,19238,19239), +PARTITION p4810 VALUES IN (19240,19241,19242,19243), +PARTITION p4811 VALUES IN (19244,19245,19246,19247), +PARTITION p4812 VALUES IN (19248,19249,19250,19251), +PARTITION p4813 VALUES IN (19252,19253,19254,19255), +PARTITION p4814 VALUES IN (19256,19257,19258,19259), +PARTITION p4815 VALUES IN (19260,19261,19262,19263), +PARTITION p4816 VALUES IN (19264,19265,19266,19267), +PARTITION p4817 VALUES IN (19268,19269,19270,19271), +PARTITION p4818 VALUES IN (19272,19273,19274,19275), +PARTITION p4819 VALUES IN (19276,19277,19278,19279), +PARTITION p4820 VALUES IN (19280,19281,19282,19283), +PARTITION p4821 VALUES IN (19284,19285,19286,19287), +PARTITION p4822 VALUES IN (19288,19289,19290,19291), +PARTITION p4823 VALUES IN (19292,19293,19294,19295), +PARTITION p4824 VALUES IN (19296,19297,19298,19299), +PARTITION p4825 VALUES IN (19300,19301,19302,19303), +PARTITION p4826 VALUES IN (19304,19305,19306,19307), +PARTITION p4827 VALUES IN (19308,19309,19310,19311), +PARTITION p4828 VALUES IN (19312,19313,19314,19315), +PARTITION p4829 VALUES IN (19316,19317,19318,19319), +PARTITION p4830 VALUES IN (19320,19321,19322,19323), +PARTITION p4831 VALUES IN (19324,19325,19326,19327), +PARTITION p4832 VALUES IN (19328,19329,19330,19331), +PARTITION p4833 VALUES IN (19332,19333,19334,19335), +PARTITION p4834 VALUES IN (19336,19337,19338,19339), +PARTITION p4835 VALUES IN (19340,19341,19342,19343), +PARTITION p4836 VALUES IN (19344,19345,19346,19347), +PARTITION p4837 VALUES IN (19348,19349,19350,19351), +PARTITION p4838 VALUES IN (19352,19353,19354,19355), +PARTITION p4839 VALUES IN (19356,19357,19358,19359), +PARTITION p4840 VALUES IN (19360,19361,19362,19363), +PARTITION p4841 VALUES IN (19364,19365,19366,19367), +PARTITION p4842 VALUES IN (19368,19369,19370,19371), +PARTITION p4843 VALUES IN (19372,19373,19374,19375), +PARTITION p4844 VALUES IN (19376,19377,19378,19379), +PARTITION p4845 VALUES IN (19380,19381,19382,19383), +PARTITION p4846 VALUES IN (19384,19385,19386,19387), +PARTITION p4847 VALUES IN (19388,19389,19390,19391), +PARTITION p4848 VALUES IN (19392,19393,19394,19395), +PARTITION p4849 VALUES IN (19396,19397,19398,19399), +PARTITION p4850 VALUES IN (19400,19401,19402,19403), +PARTITION p4851 VALUES IN (19404,19405,19406,19407), +PARTITION p4852 VALUES IN (19408,19409,19410,19411), +PARTITION p4853 VALUES IN (19412,19413,19414,19415), +PARTITION p4854 VALUES IN (19416,19417,19418,19419), +PARTITION p4855 VALUES IN (19420,19421,19422,19423), +PARTITION p4856 VALUES IN (19424,19425,19426,19427), +PARTITION p4857 VALUES IN (19428,19429,19430,19431), +PARTITION p4858 VALUES IN (19432,19433,19434,19435), +PARTITION p4859 VALUES IN (19436,19437,19438,19439), +PARTITION p4860 VALUES IN (19440,19441,19442,19443), +PARTITION p4861 VALUES IN (19444,19445,19446,19447), +PARTITION p4862 VALUES IN (19448,19449,19450,19451), +PARTITION p4863 VALUES IN (19452,19453,19454,19455), +PARTITION p4864 VALUES IN (19456,19457,19458,19459), +PARTITION p4865 VALUES IN (19460,19461,19462,19463), +PARTITION p4866 VALUES IN (19464,19465,19466,19467), +PARTITION p4867 VALUES IN (19468,19469,19470,19471), +PARTITION p4868 VALUES IN (19472,19473,19474,19475), +PARTITION p4869 VALUES IN (19476,19477,19478,19479), +PARTITION p4870 VALUES IN (19480,19481,19482,19483), +PARTITION p4871 VALUES IN (19484,19485,19486,19487), +PARTITION p4872 VALUES IN (19488,19489,19490,19491), +PARTITION p4873 VALUES IN (19492,19493,19494,19495), +PARTITION p4874 VALUES IN (19496,19497,19498,19499), +PARTITION p4875 VALUES IN (19500,19501,19502,19503), +PARTITION p4876 VALUES IN (19504,19505,19506,19507), +PARTITION p4877 VALUES IN (19508,19509,19510,19511), +PARTITION p4878 VALUES IN (19512,19513,19514,19515), +PARTITION p4879 VALUES IN (19516,19517,19518,19519), +PARTITION p4880 VALUES IN (19520,19521,19522,19523), +PARTITION p4881 VALUES IN (19524,19525,19526,19527), +PARTITION p4882 VALUES IN (19528,19529,19530,19531), +PARTITION p4883 VALUES IN (19532,19533,19534,19535), +PARTITION p4884 VALUES IN (19536,19537,19538,19539), +PARTITION p4885 VALUES IN (19540,19541,19542,19543), +PARTITION p4886 VALUES IN (19544,19545,19546,19547), +PARTITION p4887 VALUES IN (19548,19549,19550,19551), +PARTITION p4888 VALUES IN (19552,19553,19554,19555), +PARTITION p4889 VALUES IN (19556,19557,19558,19559), +PARTITION p4890 VALUES IN (19560,19561,19562,19563), +PARTITION p4891 VALUES IN (19564,19565,19566,19567), +PARTITION p4892 VALUES IN (19568,19569,19570,19571), +PARTITION p4893 VALUES IN (19572,19573,19574,19575), +PARTITION p4894 VALUES IN (19576,19577,19578,19579), +PARTITION p4895 VALUES IN (19580,19581,19582,19583), +PARTITION p4896 VALUES IN (19584,19585,19586,19587), +PARTITION p4897 VALUES IN (19588,19589,19590,19591), +PARTITION p4898 VALUES IN (19592,19593,19594,19595), +PARTITION p4899 VALUES IN (19596,19597,19598,19599), +PARTITION p4900 VALUES IN (19600,19601,19602,19603), +PARTITION p4901 VALUES IN (19604,19605,19606,19607), +PARTITION p4902 VALUES IN (19608,19609,19610,19611), +PARTITION p4903 VALUES IN (19612,19613,19614,19615), +PARTITION p4904 VALUES IN (19616,19617,19618,19619), +PARTITION p4905 VALUES IN (19620,19621,19622,19623), +PARTITION p4906 VALUES IN (19624,19625,19626,19627), +PARTITION p4907 VALUES IN (19628,19629,19630,19631), +PARTITION p4908 VALUES IN (19632,19633,19634,19635), +PARTITION p4909 VALUES IN (19636,19637,19638,19639), +PARTITION p4910 VALUES IN (19640,19641,19642,19643), +PARTITION p4911 VALUES IN (19644,19645,19646,19647), +PARTITION p4912 VALUES IN (19648,19649,19650,19651), +PARTITION p4913 VALUES IN (19652,19653,19654,19655), +PARTITION p4914 VALUES IN (19656,19657,19658,19659), +PARTITION p4915 VALUES IN (19660,19661,19662,19663), +PARTITION p4916 VALUES IN (19664,19665,19666,19667), +PARTITION p4917 VALUES IN (19668,19669,19670,19671), +PARTITION p4918 VALUES IN (19672,19673,19674,19675), +PARTITION p4919 VALUES IN (19676,19677,19678,19679), +PARTITION p4920 VALUES IN (19680,19681,19682,19683), +PARTITION p4921 VALUES IN (19684,19685,19686,19687), +PARTITION p4922 VALUES IN (19688,19689,19690,19691), +PARTITION p4923 VALUES IN (19692,19693,19694,19695), +PARTITION p4924 VALUES IN (19696,19697,19698,19699), +PARTITION p4925 VALUES IN (19700,19701,19702,19703), +PARTITION p4926 VALUES IN (19704,19705,19706,19707), +PARTITION p4927 VALUES IN (19708,19709,19710,19711), +PARTITION p4928 VALUES IN (19712,19713,19714,19715), +PARTITION p4929 VALUES IN (19716,19717,19718,19719), +PARTITION p4930 VALUES IN (19720,19721,19722,19723), +PARTITION p4931 VALUES IN (19724,19725,19726,19727), +PARTITION p4932 VALUES IN (19728,19729,19730,19731), +PARTITION p4933 VALUES IN (19732,19733,19734,19735), +PARTITION p4934 VALUES IN (19736,19737,19738,19739), +PARTITION p4935 VALUES IN (19740,19741,19742,19743), +PARTITION p4936 VALUES IN (19744,19745,19746,19747), +PARTITION p4937 VALUES IN (19748,19749,19750,19751), +PARTITION p4938 VALUES IN (19752,19753,19754,19755), +PARTITION p4939 VALUES IN (19756,19757,19758,19759), +PARTITION p4940 VALUES IN (19760,19761,19762,19763), +PARTITION p4941 VALUES IN (19764,19765,19766,19767), +PARTITION p4942 VALUES IN (19768,19769,19770,19771), +PARTITION p4943 VALUES IN (19772,19773,19774,19775), +PARTITION p4944 VALUES IN (19776,19777,19778,19779), +PARTITION p4945 VALUES IN (19780,19781,19782,19783), +PARTITION p4946 VALUES IN (19784,19785,19786,19787), +PARTITION p4947 VALUES IN (19788,19789,19790,19791), +PARTITION p4948 VALUES IN (19792,19793,19794,19795), +PARTITION p4949 VALUES IN (19796,19797,19798,19799), +PARTITION p4950 VALUES IN (19800,19801,19802,19803), +PARTITION p4951 VALUES IN (19804,19805,19806,19807), +PARTITION p4952 VALUES IN (19808,19809,19810,19811), +PARTITION p4953 VALUES IN (19812,19813,19814,19815), +PARTITION p4954 VALUES IN (19816,19817,19818,19819), +PARTITION p4955 VALUES IN (19820,19821,19822,19823), +PARTITION p4956 VALUES IN (19824,19825,19826,19827), +PARTITION p4957 VALUES IN (19828,19829,19830,19831), +PARTITION p4958 VALUES IN (19832,19833,19834,19835), +PARTITION p4959 VALUES IN (19836,19837,19838,19839), +PARTITION p4960 VALUES IN (19840,19841,19842,19843), +PARTITION p4961 VALUES IN (19844,19845,19846,19847), +PARTITION p4962 VALUES IN (19848,19849,19850,19851), +PARTITION p4963 VALUES IN (19852,19853,19854,19855), +PARTITION p4964 VALUES IN (19856,19857,19858,19859), +PARTITION p4965 VALUES IN (19860,19861,19862,19863), +PARTITION p4966 VALUES IN (19864,19865,19866,19867), +PARTITION p4967 VALUES IN (19868,19869,19870,19871), +PARTITION p4968 VALUES IN (19872,19873,19874,19875), +PARTITION p4969 VALUES IN (19876,19877,19878,19879), +PARTITION p4970 VALUES IN (19880,19881,19882,19883), +PARTITION p4971 VALUES IN (19884,19885,19886,19887), +PARTITION p4972 VALUES IN (19888,19889,19890,19891), +PARTITION p4973 VALUES IN (19892,19893,19894,19895), +PARTITION p4974 VALUES IN (19896,19897,19898,19899), +PARTITION p4975 VALUES IN (19900,19901,19902,19903), +PARTITION p4976 VALUES IN (19904,19905,19906,19907), +PARTITION p4977 VALUES IN (19908,19909,19910,19911), +PARTITION p4978 VALUES IN (19912,19913,19914,19915), +PARTITION p4979 VALUES IN (19916,19917,19918,19919), +PARTITION p4980 VALUES IN (19920,19921,19922,19923), +PARTITION p4981 VALUES IN (19924,19925,19926,19927), +PARTITION p4982 VALUES IN (19928,19929,19930,19931), +PARTITION p4983 VALUES IN (19932,19933,19934,19935), +PARTITION p4984 VALUES IN (19936,19937,19938,19939), +PARTITION p4985 VALUES IN (19940,19941,19942,19943), +PARTITION p4986 VALUES IN (19944,19945,19946,19947), +PARTITION p4987 VALUES IN (19948,19949,19950,19951), +PARTITION p4988 VALUES IN (19952,19953,19954,19955), +PARTITION p4989 VALUES IN (19956,19957,19958,19959), +PARTITION p4990 VALUES IN (19960,19961,19962,19963), +PARTITION p4991 VALUES IN (19964,19965,19966,19967), +PARTITION p4992 VALUES IN (19968,19969,19970,19971), +PARTITION p4993 VALUES IN (19972,19973,19974,19975), +PARTITION p4994 VALUES IN (19976,19977,19978,19979), +PARTITION p4995 VALUES IN (19980,19981,19982,19983), +PARTITION p4996 VALUES IN (19984,19985,19986,19987), +PARTITION p4997 VALUES IN (19988,19989,19990,19991), +PARTITION p4998 VALUES IN (19992,19993,19994,19995), +PARTITION p4999 VALUES IN (19996,19997,19998,19999), +PARTITION p5000 VALUES IN (20000,20001,20002,20003), +PARTITION p5001 VALUES IN (20004,20005,20006,20007), +PARTITION p5002 VALUES IN (20008,20009,20010,20011), +PARTITION p5003 VALUES IN (20012,20013,20014,20015), +PARTITION p5004 VALUES IN (20016,20017,20018,20019), +PARTITION p5005 VALUES IN (20020,20021,20022,20023), +PARTITION p5006 VALUES IN (20024,20025,20026,20027), +PARTITION p5007 VALUES IN (20028,20029,20030,20031), +PARTITION p5008 VALUES IN (20032,20033,20034,20035), +PARTITION p5009 VALUES IN (20036,20037,20038,20039), +PARTITION p5010 VALUES IN (20040,20041,20042,20043), +PARTITION p5011 VALUES IN (20044,20045,20046,20047), +PARTITION p5012 VALUES IN (20048,20049,20050,20051), +PARTITION p5013 VALUES IN (20052,20053,20054,20055), +PARTITION p5014 VALUES IN (20056,20057,20058,20059), +PARTITION p5015 VALUES IN (20060,20061,20062,20063), +PARTITION p5016 VALUES IN (20064,20065,20066,20067), +PARTITION p5017 VALUES IN (20068,20069,20070,20071), +PARTITION p5018 VALUES IN (20072,20073,20074,20075), +PARTITION p5019 VALUES IN (20076,20077,20078,20079), +PARTITION p5020 VALUES IN (20080,20081,20082,20083), +PARTITION p5021 VALUES IN (20084,20085,20086,20087), +PARTITION p5022 VALUES IN (20088,20089,20090,20091), +PARTITION p5023 VALUES IN (20092,20093,20094,20095), +PARTITION p5024 VALUES IN (20096,20097,20098,20099), +PARTITION p5025 VALUES IN (20100,20101,20102,20103), +PARTITION p5026 VALUES IN (20104,20105,20106,20107), +PARTITION p5027 VALUES IN (20108,20109,20110,20111), +PARTITION p5028 VALUES IN (20112,20113,20114,20115), +PARTITION p5029 VALUES IN (20116,20117,20118,20119), +PARTITION p5030 VALUES IN (20120,20121,20122,20123), +PARTITION p5031 VALUES IN (20124,20125,20126,20127), +PARTITION p5032 VALUES IN (20128,20129,20130,20131), +PARTITION p5033 VALUES IN (20132,20133,20134,20135), +PARTITION p5034 VALUES IN (20136,20137,20138,20139), +PARTITION p5035 VALUES IN (20140,20141,20142,20143), +PARTITION p5036 VALUES IN (20144,20145,20146,20147), +PARTITION p5037 VALUES IN (20148,20149,20150,20151), +PARTITION p5038 VALUES IN (20152,20153,20154,20155), +PARTITION p5039 VALUES IN (20156,20157,20158,20159), +PARTITION p5040 VALUES IN (20160,20161,20162,20163), +PARTITION p5041 VALUES IN (20164,20165,20166,20167), +PARTITION p5042 VALUES IN (20168,20169,20170,20171), +PARTITION p5043 VALUES IN (20172,20173,20174,20175), +PARTITION p5044 VALUES IN (20176,20177,20178,20179), +PARTITION p5045 VALUES IN (20180,20181,20182,20183), +PARTITION p5046 VALUES IN (20184,20185,20186,20187), +PARTITION p5047 VALUES IN (20188,20189,20190,20191), +PARTITION p5048 VALUES IN (20192,20193,20194,20195), +PARTITION p5049 VALUES IN (20196,20197,20198,20199), +PARTITION p5050 VALUES IN (20200,20201,20202,20203), +PARTITION p5051 VALUES IN (20204,20205,20206,20207), +PARTITION p5052 VALUES IN (20208,20209,20210,20211), +PARTITION p5053 VALUES IN (20212,20213,20214,20215), +PARTITION p5054 VALUES IN (20216,20217,20218,20219), +PARTITION p5055 VALUES IN (20220,20221,20222,20223), +PARTITION p5056 VALUES IN (20224,20225,20226,20227), +PARTITION p5057 VALUES IN (20228,20229,20230,20231), +PARTITION p5058 VALUES IN (20232,20233,20234,20235), +PARTITION p5059 VALUES IN (20236,20237,20238,20239), +PARTITION p5060 VALUES IN (20240,20241,20242,20243), +PARTITION p5061 VALUES IN (20244,20245,20246,20247), +PARTITION p5062 VALUES IN (20248,20249,20250,20251), +PARTITION p5063 VALUES IN (20252,20253,20254,20255), +PARTITION p5064 VALUES IN (20256,20257,20258,20259), +PARTITION p5065 VALUES IN (20260,20261,20262,20263), +PARTITION p5066 VALUES IN (20264,20265,20266,20267), +PARTITION p5067 VALUES IN (20268,20269,20270,20271), +PARTITION p5068 VALUES IN (20272,20273,20274,20275), +PARTITION p5069 VALUES IN (20276,20277,20278,20279), +PARTITION p5070 VALUES IN (20280,20281,20282,20283), +PARTITION p5071 VALUES IN (20284,20285,20286,20287), +PARTITION p5072 VALUES IN (20288,20289,20290,20291), +PARTITION p5073 VALUES IN (20292,20293,20294,20295), +PARTITION p5074 VALUES IN (20296,20297,20298,20299), +PARTITION p5075 VALUES IN (20300,20301,20302,20303), +PARTITION p5076 VALUES IN (20304,20305,20306,20307), +PARTITION p5077 VALUES IN (20308,20309,20310,20311), +PARTITION p5078 VALUES IN (20312,20313,20314,20315), +PARTITION p5079 VALUES IN (20316,20317,20318,20319), +PARTITION p5080 VALUES IN (20320,20321,20322,20323), +PARTITION p5081 VALUES IN (20324,20325,20326,20327), +PARTITION p5082 VALUES IN (20328,20329,20330,20331), +PARTITION p5083 VALUES IN (20332,20333,20334,20335), +PARTITION p5084 VALUES IN (20336,20337,20338,20339), +PARTITION p5085 VALUES IN (20340,20341,20342,20343), +PARTITION p5086 VALUES IN (20344,20345,20346,20347), +PARTITION p5087 VALUES IN (20348,20349,20350,20351), +PARTITION p5088 VALUES IN (20352,20353,20354,20355), +PARTITION p5089 VALUES IN (20356,20357,20358,20359), +PARTITION p5090 VALUES IN (20360,20361,20362,20363), +PARTITION p5091 VALUES IN (20364,20365,20366,20367), +PARTITION p5092 VALUES IN (20368,20369,20370,20371), +PARTITION p5093 VALUES IN (20372,20373,20374,20375), +PARTITION p5094 VALUES IN (20376,20377,20378,20379), +PARTITION p5095 VALUES IN (20380,20381,20382,20383), +PARTITION p5096 VALUES IN (20384,20385,20386,20387), +PARTITION p5097 VALUES IN (20388,20389,20390,20391), +PARTITION p5098 VALUES IN (20392,20393,20394,20395), +PARTITION p5099 VALUES IN (20396,20397,20398,20399), +PARTITION p5100 VALUES IN (20400,20401,20402,20403), +PARTITION p5101 VALUES IN (20404,20405,20406,20407), +PARTITION p5102 VALUES IN (20408,20409,20410,20411), +PARTITION p5103 VALUES IN (20412,20413,20414,20415), +PARTITION p5104 VALUES IN (20416,20417,20418,20419), +PARTITION p5105 VALUES IN (20420,20421,20422,20423), +PARTITION p5106 VALUES IN (20424,20425,20426,20427), +PARTITION p5107 VALUES IN (20428,20429,20430,20431), +PARTITION p5108 VALUES IN (20432,20433,20434,20435), +PARTITION p5109 VALUES IN (20436,20437,20438,20439), +PARTITION p5110 VALUES IN (20440,20441,20442,20443), +PARTITION p5111 VALUES IN (20444,20445,20446,20447), +PARTITION p5112 VALUES IN (20448,20449,20450,20451), +PARTITION p5113 VALUES IN (20452,20453,20454,20455), +PARTITION p5114 VALUES IN (20456,20457,20458,20459), +PARTITION p5115 VALUES IN (20460,20461,20462,20463), +PARTITION p5116 VALUES IN (20464,20465,20466,20467), +PARTITION p5117 VALUES IN (20468,20469,20470,20471), +PARTITION p5118 VALUES IN (20472,20473,20474,20475), +PARTITION p5119 VALUES IN (20476,20477,20478,20479), +PARTITION p5120 VALUES IN (20480,20481,20482,20483), +PARTITION p5121 VALUES IN (20484,20485,20486,20487), +PARTITION p5122 VALUES IN (20488,20489,20490,20491), +PARTITION p5123 VALUES IN (20492,20493,20494,20495), +PARTITION p5124 VALUES IN (20496,20497,20498,20499), +PARTITION p5125 VALUES IN (20500,20501,20502,20503), +PARTITION p5126 VALUES IN (20504,20505,20506,20507), +PARTITION p5127 VALUES IN (20508,20509,20510,20511), +PARTITION p5128 VALUES IN (20512,20513,20514,20515), +PARTITION p5129 VALUES IN (20516,20517,20518,20519), +PARTITION p5130 VALUES IN (20520,20521,20522,20523), +PARTITION p5131 VALUES IN (20524,20525,20526,20527), +PARTITION p5132 VALUES IN (20528,20529,20530,20531), +PARTITION p5133 VALUES IN (20532,20533,20534,20535), +PARTITION p5134 VALUES IN (20536,20537,20538,20539), +PARTITION p5135 VALUES IN (20540,20541,20542,20543), +PARTITION p5136 VALUES IN (20544,20545,20546,20547), +PARTITION p5137 VALUES IN (20548,20549,20550,20551), +PARTITION p5138 VALUES IN (20552,20553,20554,20555), +PARTITION p5139 VALUES IN (20556,20557,20558,20559), +PARTITION p5140 VALUES IN (20560,20561,20562,20563), +PARTITION p5141 VALUES IN (20564,20565,20566,20567), +PARTITION p5142 VALUES IN (20568,20569,20570,20571), +PARTITION p5143 VALUES IN (20572,20573,20574,20575), +PARTITION p5144 VALUES IN (20576,20577,20578,20579), +PARTITION p5145 VALUES IN (20580,20581,20582,20583), +PARTITION p5146 VALUES IN (20584,20585,20586,20587), +PARTITION p5147 VALUES IN (20588,20589,20590,20591), +PARTITION p5148 VALUES IN (20592,20593,20594,20595), +PARTITION p5149 VALUES IN (20596,20597,20598,20599), +PARTITION p5150 VALUES IN (20600,20601,20602,20603), +PARTITION p5151 VALUES IN (20604,20605,20606,20607), +PARTITION p5152 VALUES IN (20608,20609,20610,20611), +PARTITION p5153 VALUES IN (20612,20613,20614,20615), +PARTITION p5154 VALUES IN (20616,20617,20618,20619), +PARTITION p5155 VALUES IN (20620,20621,20622,20623), +PARTITION p5156 VALUES IN (20624,20625,20626,20627), +PARTITION p5157 VALUES IN (20628,20629,20630,20631), +PARTITION p5158 VALUES IN (20632,20633,20634,20635), +PARTITION p5159 VALUES IN (20636,20637,20638,20639), +PARTITION p5160 VALUES IN (20640,20641,20642,20643), +PARTITION p5161 VALUES IN (20644,20645,20646,20647), +PARTITION p5162 VALUES IN (20648,20649,20650,20651), +PARTITION p5163 VALUES IN (20652,20653,20654,20655), +PARTITION p5164 VALUES IN (20656,20657,20658,20659), +PARTITION p5165 VALUES IN (20660,20661,20662,20663), +PARTITION p5166 VALUES IN (20664,20665,20666,20667), +PARTITION p5167 VALUES IN (20668,20669,20670,20671), +PARTITION p5168 VALUES IN (20672,20673,20674,20675), +PARTITION p5169 VALUES IN (20676,20677,20678,20679), +PARTITION p5170 VALUES IN (20680,20681,20682,20683), +PARTITION p5171 VALUES IN (20684,20685,20686,20687), +PARTITION p5172 VALUES IN (20688,20689,20690,20691), +PARTITION p5173 VALUES IN (20692,20693,20694,20695), +PARTITION p5174 VALUES IN (20696,20697,20698,20699), +PARTITION p5175 VALUES IN (20700,20701,20702,20703), +PARTITION p5176 VALUES IN (20704,20705,20706,20707), +PARTITION p5177 VALUES IN (20708,20709,20710,20711), +PARTITION p5178 VALUES IN (20712,20713,20714,20715), +PARTITION p5179 VALUES IN (20716,20717,20718,20719), +PARTITION p5180 VALUES IN (20720,20721,20722,20723), +PARTITION p5181 VALUES IN (20724,20725,20726,20727), +PARTITION p5182 VALUES IN (20728,20729,20730,20731), +PARTITION p5183 VALUES IN (20732,20733,20734,20735), +PARTITION p5184 VALUES IN (20736,20737,20738,20739), +PARTITION p5185 VALUES IN (20740,20741,20742,20743), +PARTITION p5186 VALUES IN (20744,20745,20746,20747), +PARTITION p5187 VALUES IN (20748,20749,20750,20751), +PARTITION p5188 VALUES IN (20752,20753,20754,20755), +PARTITION p5189 VALUES IN (20756,20757,20758,20759), +PARTITION p5190 VALUES IN (20760,20761,20762,20763), +PARTITION p5191 VALUES IN (20764,20765,20766,20767), +PARTITION p5192 VALUES IN (20768,20769,20770,20771), +PARTITION p5193 VALUES IN (20772,20773,20774,20775), +PARTITION p5194 VALUES IN (20776,20777,20778,20779), +PARTITION p5195 VALUES IN (20780,20781,20782,20783), +PARTITION p5196 VALUES IN (20784,20785,20786,20787), +PARTITION p5197 VALUES IN (20788,20789,20790,20791), +PARTITION p5198 VALUES IN (20792,20793,20794,20795), +PARTITION p5199 VALUES IN (20796,20797,20798,20799), +PARTITION p5200 VALUES IN (20800,20801,20802,20803), +PARTITION p5201 VALUES IN (20804,20805,20806,20807), +PARTITION p5202 VALUES IN (20808,20809,20810,20811), +PARTITION p5203 VALUES IN (20812,20813,20814,20815), +PARTITION p5204 VALUES IN (20816,20817,20818,20819), +PARTITION p5205 VALUES IN (20820,20821,20822,20823), +PARTITION p5206 VALUES IN (20824,20825,20826,20827), +PARTITION p5207 VALUES IN (20828,20829,20830,20831), +PARTITION p5208 VALUES IN (20832,20833,20834,20835), +PARTITION p5209 VALUES IN (20836,20837,20838,20839), +PARTITION p5210 VALUES IN (20840,20841,20842,20843), +PARTITION p5211 VALUES IN (20844,20845,20846,20847), +PARTITION p5212 VALUES IN (20848,20849,20850,20851), +PARTITION p5213 VALUES IN (20852,20853,20854,20855), +PARTITION p5214 VALUES IN (20856,20857,20858,20859), +PARTITION p5215 VALUES IN (20860,20861,20862,20863), +PARTITION p5216 VALUES IN (20864,20865,20866,20867), +PARTITION p5217 VALUES IN (20868,20869,20870,20871), +PARTITION p5218 VALUES IN (20872,20873,20874,20875), +PARTITION p5219 VALUES IN (20876,20877,20878,20879), +PARTITION p5220 VALUES IN (20880,20881,20882,20883), +PARTITION p5221 VALUES IN (20884,20885,20886,20887), +PARTITION p5222 VALUES IN (20888,20889,20890,20891), +PARTITION p5223 VALUES IN (20892,20893,20894,20895), +PARTITION p5224 VALUES IN (20896,20897,20898,20899), +PARTITION p5225 VALUES IN (20900,20901,20902,20903), +PARTITION p5226 VALUES IN (20904,20905,20906,20907), +PARTITION p5227 VALUES IN (20908,20909,20910,20911), +PARTITION p5228 VALUES IN (20912,20913,20914,20915), +PARTITION p5229 VALUES IN (20916,20917,20918,20919), +PARTITION p5230 VALUES IN (20920,20921,20922,20923), +PARTITION p5231 VALUES IN (20924,20925,20926,20927), +PARTITION p5232 VALUES IN (20928,20929,20930,20931), +PARTITION p5233 VALUES IN (20932,20933,20934,20935), +PARTITION p5234 VALUES IN (20936,20937,20938,20939), +PARTITION p5235 VALUES IN (20940,20941,20942,20943), +PARTITION p5236 VALUES IN (20944,20945,20946,20947), +PARTITION p5237 VALUES IN (20948,20949,20950,20951), +PARTITION p5238 VALUES IN (20952,20953,20954,20955), +PARTITION p5239 VALUES IN (20956,20957,20958,20959), +PARTITION p5240 VALUES IN (20960,20961,20962,20963), +PARTITION p5241 VALUES IN (20964,20965,20966,20967), +PARTITION p5242 VALUES IN (20968,20969,20970,20971), +PARTITION p5243 VALUES IN (20972,20973,20974,20975), +PARTITION p5244 VALUES IN (20976,20977,20978,20979), +PARTITION p5245 VALUES IN (20980,20981,20982,20983), +PARTITION p5246 VALUES IN (20984,20985,20986,20987), +PARTITION p5247 VALUES IN (20988,20989,20990,20991), +PARTITION p5248 VALUES IN (20992,20993,20994,20995), +PARTITION p5249 VALUES IN (20996,20997,20998,20999), +PARTITION p5250 VALUES IN (21000,21001,21002,21003), +PARTITION p5251 VALUES IN (21004,21005,21006,21007), +PARTITION p5252 VALUES IN (21008,21009,21010,21011), +PARTITION p5253 VALUES IN (21012,21013,21014,21015), +PARTITION p5254 VALUES IN (21016,21017,21018,21019), +PARTITION p5255 VALUES IN (21020,21021,21022,21023), +PARTITION p5256 VALUES IN (21024,21025,21026,21027), +PARTITION p5257 VALUES IN (21028,21029,21030,21031), +PARTITION p5258 VALUES IN (21032,21033,21034,21035), +PARTITION p5259 VALUES IN (21036,21037,21038,21039), +PARTITION p5260 VALUES IN (21040,21041,21042,21043), +PARTITION p5261 VALUES IN (21044,21045,21046,21047), +PARTITION p5262 VALUES IN (21048,21049,21050,21051), +PARTITION p5263 VALUES IN (21052,21053,21054,21055), +PARTITION p5264 VALUES IN (21056,21057,21058,21059), +PARTITION p5265 VALUES IN (21060,21061,21062,21063), +PARTITION p5266 VALUES IN (21064,21065,21066,21067), +PARTITION p5267 VALUES IN (21068,21069,21070,21071), +PARTITION p5268 VALUES IN (21072,21073,21074,21075), +PARTITION p5269 VALUES IN (21076,21077,21078,21079), +PARTITION p5270 VALUES IN (21080,21081,21082,21083), +PARTITION p5271 VALUES IN (21084,21085,21086,21087), +PARTITION p5272 VALUES IN (21088,21089,21090,21091), +PARTITION p5273 VALUES IN (21092,21093,21094,21095), +PARTITION p5274 VALUES IN (21096,21097,21098,21099), +PARTITION p5275 VALUES IN (21100,21101,21102,21103), +PARTITION p5276 VALUES IN (21104,21105,21106,21107), +PARTITION p5277 VALUES IN (21108,21109,21110,21111), +PARTITION p5278 VALUES IN (21112,21113,21114,21115), +PARTITION p5279 VALUES IN (21116,21117,21118,21119), +PARTITION p5280 VALUES IN (21120,21121,21122,21123), +PARTITION p5281 VALUES IN (21124,21125,21126,21127), +PARTITION p5282 VALUES IN (21128,21129,21130,21131), +PARTITION p5283 VALUES IN (21132,21133,21134,21135), +PARTITION p5284 VALUES IN (21136,21137,21138,21139), +PARTITION p5285 VALUES IN (21140,21141,21142,21143), +PARTITION p5286 VALUES IN (21144,21145,21146,21147), +PARTITION p5287 VALUES IN (21148,21149,21150,21151), +PARTITION p5288 VALUES IN (21152,21153,21154,21155), +PARTITION p5289 VALUES IN (21156,21157,21158,21159), +PARTITION p5290 VALUES IN (21160,21161,21162,21163), +PARTITION p5291 VALUES IN (21164,21165,21166,21167), +PARTITION p5292 VALUES IN (21168,21169,21170,21171), +PARTITION p5293 VALUES IN (21172,21173,21174,21175), +PARTITION p5294 VALUES IN (21176,21177,21178,21179), +PARTITION p5295 VALUES IN (21180,21181,21182,21183), +PARTITION p5296 VALUES IN (21184,21185,21186,21187), +PARTITION p5297 VALUES IN (21188,21189,21190,21191), +PARTITION p5298 VALUES IN (21192,21193,21194,21195), +PARTITION p5299 VALUES IN (21196,21197,21198,21199), +PARTITION p5300 VALUES IN (21200,21201,21202,21203), +PARTITION p5301 VALUES IN (21204,21205,21206,21207), +PARTITION p5302 VALUES IN (21208,21209,21210,21211), +PARTITION p5303 VALUES IN (21212,21213,21214,21215), +PARTITION p5304 VALUES IN (21216,21217,21218,21219), +PARTITION p5305 VALUES IN (21220,21221,21222,21223), +PARTITION p5306 VALUES IN (21224,21225,21226,21227), +PARTITION p5307 VALUES IN (21228,21229,21230,21231), +PARTITION p5308 VALUES IN (21232,21233,21234,21235), +PARTITION p5309 VALUES IN (21236,21237,21238,21239), +PARTITION p5310 VALUES IN (21240,21241,21242,21243), +PARTITION p5311 VALUES IN (21244,21245,21246,21247), +PARTITION p5312 VALUES IN (21248,21249,21250,21251), +PARTITION p5313 VALUES IN (21252,21253,21254,21255), +PARTITION p5314 VALUES IN (21256,21257,21258,21259), +PARTITION p5315 VALUES IN (21260,21261,21262,21263), +PARTITION p5316 VALUES IN (21264,21265,21266,21267), +PARTITION p5317 VALUES IN (21268,21269,21270,21271), +PARTITION p5318 VALUES IN (21272,21273,21274,21275), +PARTITION p5319 VALUES IN (21276,21277,21278,21279), +PARTITION p5320 VALUES IN (21280,21281,21282,21283), +PARTITION p5321 VALUES IN (21284,21285,21286,21287), +PARTITION p5322 VALUES IN (21288,21289,21290,21291), +PARTITION p5323 VALUES IN (21292,21293,21294,21295), +PARTITION p5324 VALUES IN (21296,21297,21298,21299), +PARTITION p5325 VALUES IN (21300,21301,21302,21303), +PARTITION p5326 VALUES IN (21304,21305,21306,21307), +PARTITION p5327 VALUES IN (21308,21309,21310,21311), +PARTITION p5328 VALUES IN (21312,21313,21314,21315), +PARTITION p5329 VALUES IN (21316,21317,21318,21319), +PARTITION p5330 VALUES IN (21320,21321,21322,21323), +PARTITION p5331 VALUES IN (21324,21325,21326,21327), +PARTITION p5332 VALUES IN (21328,21329,21330,21331), +PARTITION p5333 VALUES IN (21332,21333,21334,21335), +PARTITION p5334 VALUES IN (21336,21337,21338,21339), +PARTITION p5335 VALUES IN (21340,21341,21342,21343), +PARTITION p5336 VALUES IN (21344,21345,21346,21347), +PARTITION p5337 VALUES IN (21348,21349,21350,21351), +PARTITION p5338 VALUES IN (21352,21353,21354,21355), +PARTITION p5339 VALUES IN (21356,21357,21358,21359), +PARTITION p5340 VALUES IN (21360,21361,21362,21363), +PARTITION p5341 VALUES IN (21364,21365,21366,21367), +PARTITION p5342 VALUES IN (21368,21369,21370,21371), +PARTITION p5343 VALUES IN (21372,21373,21374,21375), +PARTITION p5344 VALUES IN (21376,21377,21378,21379), +PARTITION p5345 VALUES IN (21380,21381,21382,21383), +PARTITION p5346 VALUES IN (21384,21385,21386,21387), +PARTITION p5347 VALUES IN (21388,21389,21390,21391), +PARTITION p5348 VALUES IN (21392,21393,21394,21395), +PARTITION p5349 VALUES IN (21396,21397,21398,21399), +PARTITION p5350 VALUES IN (21400,21401,21402,21403), +PARTITION p5351 VALUES IN (21404,21405,21406,21407), +PARTITION p5352 VALUES IN (21408,21409,21410,21411), +PARTITION p5353 VALUES IN (21412,21413,21414,21415), +PARTITION p5354 VALUES IN (21416,21417,21418,21419), +PARTITION p5355 VALUES IN (21420,21421,21422,21423), +PARTITION p5356 VALUES IN (21424,21425,21426,21427), +PARTITION p5357 VALUES IN (21428,21429,21430,21431), +PARTITION p5358 VALUES IN (21432,21433,21434,21435), +PARTITION p5359 VALUES IN (21436,21437,21438,21439), +PARTITION p5360 VALUES IN (21440,21441,21442,21443), +PARTITION p5361 VALUES IN (21444,21445,21446,21447), +PARTITION p5362 VALUES IN (21448,21449,21450,21451), +PARTITION p5363 VALUES IN (21452,21453,21454,21455), +PARTITION p5364 VALUES IN (21456,21457,21458,21459), +PARTITION p5365 VALUES IN (21460,21461,21462,21463), +PARTITION p5366 VALUES IN (21464,21465,21466,21467), +PARTITION p5367 VALUES IN (21468,21469,21470,21471), +PARTITION p5368 VALUES IN (21472,21473,21474,21475), +PARTITION p5369 VALUES IN (21476,21477,21478,21479), +PARTITION p5370 VALUES IN (21480,21481,21482,21483), +PARTITION p5371 VALUES IN (21484,21485,21486,21487), +PARTITION p5372 VALUES IN (21488,21489,21490,21491), +PARTITION p5373 VALUES IN (21492,21493,21494,21495), +PARTITION p5374 VALUES IN (21496,21497,21498,21499), +PARTITION p5375 VALUES IN (21500,21501,21502,21503), +PARTITION p5376 VALUES IN (21504,21505,21506,21507), +PARTITION p5377 VALUES IN (21508,21509,21510,21511), +PARTITION p5378 VALUES IN (21512,21513,21514,21515), +PARTITION p5379 VALUES IN (21516,21517,21518,21519), +PARTITION p5380 VALUES IN (21520,21521,21522,21523), +PARTITION p5381 VALUES IN (21524,21525,21526,21527), +PARTITION p5382 VALUES IN (21528,21529,21530,21531), +PARTITION p5383 VALUES IN (21532,21533,21534,21535), +PARTITION p5384 VALUES IN (21536,21537,21538,21539), +PARTITION p5385 VALUES IN (21540,21541,21542,21543), +PARTITION p5386 VALUES IN (21544,21545,21546,21547), +PARTITION p5387 VALUES IN (21548,21549,21550,21551), +PARTITION p5388 VALUES IN (21552,21553,21554,21555), +PARTITION p5389 VALUES IN (21556,21557,21558,21559), +PARTITION p5390 VALUES IN (21560,21561,21562,21563), +PARTITION p5391 VALUES IN (21564,21565,21566,21567), +PARTITION p5392 VALUES IN (21568,21569,21570,21571), +PARTITION p5393 VALUES IN (21572,21573,21574,21575), +PARTITION p5394 VALUES IN (21576,21577,21578,21579), +PARTITION p5395 VALUES IN (21580,21581,21582,21583), +PARTITION p5396 VALUES IN (21584,21585,21586,21587), +PARTITION p5397 VALUES IN (21588,21589,21590,21591), +PARTITION p5398 VALUES IN (21592,21593,21594,21595), +PARTITION p5399 VALUES IN (21596,21597,21598,21599), +PARTITION p5400 VALUES IN (21600,21601,21602,21603), +PARTITION p5401 VALUES IN (21604,21605,21606,21607), +PARTITION p5402 VALUES IN (21608,21609,21610,21611), +PARTITION p5403 VALUES IN (21612,21613,21614,21615), +PARTITION p5404 VALUES IN (21616,21617,21618,21619), +PARTITION p5405 VALUES IN (21620,21621,21622,21623), +PARTITION p5406 VALUES IN (21624,21625,21626,21627), +PARTITION p5407 VALUES IN (21628,21629,21630,21631), +PARTITION p5408 VALUES IN (21632,21633,21634,21635), +PARTITION p5409 VALUES IN (21636,21637,21638,21639), +PARTITION p5410 VALUES IN (21640,21641,21642,21643), +PARTITION p5411 VALUES IN (21644,21645,21646,21647), +PARTITION p5412 VALUES IN (21648,21649,21650,21651), +PARTITION p5413 VALUES IN (21652,21653,21654,21655), +PARTITION p5414 VALUES IN (21656,21657,21658,21659), +PARTITION p5415 VALUES IN (21660,21661,21662,21663), +PARTITION p5416 VALUES IN (21664,21665,21666,21667), +PARTITION p5417 VALUES IN (21668,21669,21670,21671), +PARTITION p5418 VALUES IN (21672,21673,21674,21675), +PARTITION p5419 VALUES IN (21676,21677,21678,21679), +PARTITION p5420 VALUES IN (21680,21681,21682,21683), +PARTITION p5421 VALUES IN (21684,21685,21686,21687), +PARTITION p5422 VALUES IN (21688,21689,21690,21691), +PARTITION p5423 VALUES IN (21692,21693,21694,21695), +PARTITION p5424 VALUES IN (21696,21697,21698,21699), +PARTITION p5425 VALUES IN (21700,21701,21702,21703), +PARTITION p5426 VALUES IN (21704,21705,21706,21707), +PARTITION p5427 VALUES IN (21708,21709,21710,21711), +PARTITION p5428 VALUES IN (21712,21713,21714,21715), +PARTITION p5429 VALUES IN (21716,21717,21718,21719), +PARTITION p5430 VALUES IN (21720,21721,21722,21723), +PARTITION p5431 VALUES IN (21724,21725,21726,21727), +PARTITION p5432 VALUES IN (21728,21729,21730,21731), +PARTITION p5433 VALUES IN (21732,21733,21734,21735), +PARTITION p5434 VALUES IN (21736,21737,21738,21739), +PARTITION p5435 VALUES IN (21740,21741,21742,21743), +PARTITION p5436 VALUES IN (21744,21745,21746,21747), +PARTITION p5437 VALUES IN (21748,21749,21750,21751), +PARTITION p5438 VALUES IN (21752,21753,21754,21755), +PARTITION p5439 VALUES IN (21756,21757,21758,21759), +PARTITION p5440 VALUES IN (21760,21761,21762,21763), +PARTITION p5441 VALUES IN (21764,21765,21766,21767), +PARTITION p5442 VALUES IN (21768,21769,21770,21771), +PARTITION p5443 VALUES IN (21772,21773,21774,21775), +PARTITION p5444 VALUES IN (21776,21777,21778,21779), +PARTITION p5445 VALUES IN (21780,21781,21782,21783), +PARTITION p5446 VALUES IN (21784,21785,21786,21787), +PARTITION p5447 VALUES IN (21788,21789,21790,21791), +PARTITION p5448 VALUES IN (21792,21793,21794,21795), +PARTITION p5449 VALUES IN (21796,21797,21798,21799), +PARTITION p5450 VALUES IN (21800,21801,21802,21803), +PARTITION p5451 VALUES IN (21804,21805,21806,21807), +PARTITION p5452 VALUES IN (21808,21809,21810,21811), +PARTITION p5453 VALUES IN (21812,21813,21814,21815), +PARTITION p5454 VALUES IN (21816,21817,21818,21819), +PARTITION p5455 VALUES IN (21820,21821,21822,21823), +PARTITION p5456 VALUES IN (21824,21825,21826,21827), +PARTITION p5457 VALUES IN (21828,21829,21830,21831), +PARTITION p5458 VALUES IN (21832,21833,21834,21835), +PARTITION p5459 VALUES IN (21836,21837,21838,21839), +PARTITION p5460 VALUES IN (21840,21841,21842,21843), +PARTITION p5461 VALUES IN (21844,21845,21846,21847), +PARTITION p5462 VALUES IN (21848,21849,21850,21851), +PARTITION p5463 VALUES IN (21852,21853,21854,21855), +PARTITION p5464 VALUES IN (21856,21857,21858,21859), +PARTITION p5465 VALUES IN (21860,21861,21862,21863), +PARTITION p5466 VALUES IN (21864,21865,21866,21867), +PARTITION p5467 VALUES IN (21868,21869,21870,21871), +PARTITION p5468 VALUES IN (21872,21873,21874,21875), +PARTITION p5469 VALUES IN (21876,21877,21878,21879), +PARTITION p5470 VALUES IN (21880,21881,21882,21883), +PARTITION p5471 VALUES IN (21884,21885,21886,21887), +PARTITION p5472 VALUES IN (21888,21889,21890,21891), +PARTITION p5473 VALUES IN (21892,21893,21894,21895), +PARTITION p5474 VALUES IN (21896,21897,21898,21899), +PARTITION p5475 VALUES IN (21900,21901,21902,21903), +PARTITION p5476 VALUES IN (21904,21905,21906,21907), +PARTITION p5477 VALUES IN (21908,21909,21910,21911), +PARTITION p5478 VALUES IN (21912,21913,21914,21915), +PARTITION p5479 VALUES IN (21916,21917,21918,21919), +PARTITION p5480 VALUES IN (21920,21921,21922,21923), +PARTITION p5481 VALUES IN (21924,21925,21926,21927), +PARTITION p5482 VALUES IN (21928,21929,21930,21931), +PARTITION p5483 VALUES IN (21932,21933,21934,21935), +PARTITION p5484 VALUES IN (21936,21937,21938,21939), +PARTITION p5485 VALUES IN (21940,21941,21942,21943), +PARTITION p5486 VALUES IN (21944,21945,21946,21947), +PARTITION p5487 VALUES IN (21948,21949,21950,21951), +PARTITION p5488 VALUES IN (21952,21953,21954,21955), +PARTITION p5489 VALUES IN (21956,21957,21958,21959), +PARTITION p5490 VALUES IN (21960,21961,21962,21963), +PARTITION p5491 VALUES IN (21964,21965,21966,21967), +PARTITION p5492 VALUES IN (21968,21969,21970,21971), +PARTITION p5493 VALUES IN (21972,21973,21974,21975), +PARTITION p5494 VALUES IN (21976,21977,21978,21979), +PARTITION p5495 VALUES IN (21980,21981,21982,21983), +PARTITION p5496 VALUES IN (21984,21985,21986,21987), +PARTITION p5497 VALUES IN (21988,21989,21990,21991), +PARTITION p5498 VALUES IN (21992,21993,21994,21995), +PARTITION p5499 VALUES IN (21996,21997,21998,21999), +PARTITION p5500 VALUES IN (22000,22001,22002,22003), +PARTITION p5501 VALUES IN (22004,22005,22006,22007), +PARTITION p5502 VALUES IN (22008,22009,22010,22011), +PARTITION p5503 VALUES IN (22012,22013,22014,22015), +PARTITION p5504 VALUES IN (22016,22017,22018,22019), +PARTITION p5505 VALUES IN (22020,22021,22022,22023), +PARTITION p5506 VALUES IN (22024,22025,22026,22027), +PARTITION p5507 VALUES IN (22028,22029,22030,22031), +PARTITION p5508 VALUES IN (22032,22033,22034,22035), +PARTITION p5509 VALUES IN (22036,22037,22038,22039), +PARTITION p5510 VALUES IN (22040,22041,22042,22043), +PARTITION p5511 VALUES IN (22044,22045,22046,22047), +PARTITION p5512 VALUES IN (22048,22049,22050,22051), +PARTITION p5513 VALUES IN (22052,22053,22054,22055), +PARTITION p5514 VALUES IN (22056,22057,22058,22059), +PARTITION p5515 VALUES IN (22060,22061,22062,22063), +PARTITION p5516 VALUES IN (22064,22065,22066,22067), +PARTITION p5517 VALUES IN (22068,22069,22070,22071), +PARTITION p5518 VALUES IN (22072,22073,22074,22075), +PARTITION p5519 VALUES IN (22076,22077,22078,22079), +PARTITION p5520 VALUES IN (22080,22081,22082,22083), +PARTITION p5521 VALUES IN (22084,22085,22086,22087), +PARTITION p5522 VALUES IN (22088,22089,22090,22091), +PARTITION p5523 VALUES IN (22092,22093,22094,22095), +PARTITION p5524 VALUES IN (22096,22097,22098,22099), +PARTITION p5525 VALUES IN (22100,22101,22102,22103), +PARTITION p5526 VALUES IN (22104,22105,22106,22107), +PARTITION p5527 VALUES IN (22108,22109,22110,22111), +PARTITION p5528 VALUES IN (22112,22113,22114,22115), +PARTITION p5529 VALUES IN (22116,22117,22118,22119), +PARTITION p5530 VALUES IN (22120,22121,22122,22123), +PARTITION p5531 VALUES IN (22124,22125,22126,22127), +PARTITION p5532 VALUES IN (22128,22129,22130,22131), +PARTITION p5533 VALUES IN (22132,22133,22134,22135), +PARTITION p5534 VALUES IN (22136,22137,22138,22139), +PARTITION p5535 VALUES IN (22140,22141,22142,22143), +PARTITION p5536 VALUES IN (22144,22145,22146,22147), +PARTITION p5537 VALUES IN (22148,22149,22150,22151), +PARTITION p5538 VALUES IN (22152,22153,22154,22155), +PARTITION p5539 VALUES IN (22156,22157,22158,22159), +PARTITION p5540 VALUES IN (22160,22161,22162,22163), +PARTITION p5541 VALUES IN (22164,22165,22166,22167), +PARTITION p5542 VALUES IN (22168,22169,22170,22171), +PARTITION p5543 VALUES IN (22172,22173,22174,22175), +PARTITION p5544 VALUES IN (22176,22177,22178,22179), +PARTITION p5545 VALUES IN (22180,22181,22182,22183), +PARTITION p5546 VALUES IN (22184,22185,22186,22187), +PARTITION p5547 VALUES IN (22188,22189,22190,22191), +PARTITION p5548 VALUES IN (22192,22193,22194,22195), +PARTITION p5549 VALUES IN (22196,22197,22198,22199), +PARTITION p5550 VALUES IN (22200,22201,22202,22203), +PARTITION p5551 VALUES IN (22204,22205,22206,22207), +PARTITION p5552 VALUES IN (22208,22209,22210,22211), +PARTITION p5553 VALUES IN (22212,22213,22214,22215), +PARTITION p5554 VALUES IN (22216,22217,22218,22219), +PARTITION p5555 VALUES IN (22220,22221,22222,22223), +PARTITION p5556 VALUES IN (22224,22225,22226,22227), +PARTITION p5557 VALUES IN (22228,22229,22230,22231), +PARTITION p5558 VALUES IN (22232,22233,22234,22235), +PARTITION p5559 VALUES IN (22236,22237,22238,22239), +PARTITION p5560 VALUES IN (22240,22241,22242,22243), +PARTITION p5561 VALUES IN (22244,22245,22246,22247), +PARTITION p5562 VALUES IN (22248,22249,22250,22251), +PARTITION p5563 VALUES IN (22252,22253,22254,22255), +PARTITION p5564 VALUES IN (22256,22257,22258,22259), +PARTITION p5565 VALUES IN (22260,22261,22262,22263), +PARTITION p5566 VALUES IN (22264,22265,22266,22267), +PARTITION p5567 VALUES IN (22268,22269,22270,22271), +PARTITION p5568 VALUES IN (22272,22273,22274,22275), +PARTITION p5569 VALUES IN (22276,22277,22278,22279), +PARTITION p5570 VALUES IN (22280,22281,22282,22283), +PARTITION p5571 VALUES IN (22284,22285,22286,22287), +PARTITION p5572 VALUES IN (22288,22289,22290,22291), +PARTITION p5573 VALUES IN (22292,22293,22294,22295), +PARTITION p5574 VALUES IN (22296,22297,22298,22299), +PARTITION p5575 VALUES IN (22300,22301,22302,22303), +PARTITION p5576 VALUES IN (22304,22305,22306,22307), +PARTITION p5577 VALUES IN (22308,22309,22310,22311), +PARTITION p5578 VALUES IN (22312,22313,22314,22315), +PARTITION p5579 VALUES IN (22316,22317,22318,22319), +PARTITION p5580 VALUES IN (22320,22321,22322,22323), +PARTITION p5581 VALUES IN (22324,22325,22326,22327), +PARTITION p5582 VALUES IN (22328,22329,22330,22331), +PARTITION p5583 VALUES IN (22332,22333,22334,22335), +PARTITION p5584 VALUES IN (22336,22337,22338,22339), +PARTITION p5585 VALUES IN (22340,22341,22342,22343), +PARTITION p5586 VALUES IN (22344,22345,22346,22347), +PARTITION p5587 VALUES IN (22348,22349,22350,22351), +PARTITION p5588 VALUES IN (22352,22353,22354,22355), +PARTITION p5589 VALUES IN (22356,22357,22358,22359), +PARTITION p5590 VALUES IN (22360,22361,22362,22363), +PARTITION p5591 VALUES IN (22364,22365,22366,22367), +PARTITION p5592 VALUES IN (22368,22369,22370,22371), +PARTITION p5593 VALUES IN (22372,22373,22374,22375), +PARTITION p5594 VALUES IN (22376,22377,22378,22379), +PARTITION p5595 VALUES IN (22380,22381,22382,22383), +PARTITION p5596 VALUES IN (22384,22385,22386,22387), +PARTITION p5597 VALUES IN (22388,22389,22390,22391), +PARTITION p5598 VALUES IN (22392,22393,22394,22395), +PARTITION p5599 VALUES IN (22396,22397,22398,22399), +PARTITION p5600 VALUES IN (22400,22401,22402,22403), +PARTITION p5601 VALUES IN (22404,22405,22406,22407), +PARTITION p5602 VALUES IN (22408,22409,22410,22411), +PARTITION p5603 VALUES IN (22412,22413,22414,22415), +PARTITION p5604 VALUES IN (22416,22417,22418,22419), +PARTITION p5605 VALUES IN (22420,22421,22422,22423), +PARTITION p5606 VALUES IN (22424,22425,22426,22427), +PARTITION p5607 VALUES IN (22428,22429,22430,22431), +PARTITION p5608 VALUES IN (22432,22433,22434,22435), +PARTITION p5609 VALUES IN (22436,22437,22438,22439), +PARTITION p5610 VALUES IN (22440,22441,22442,22443), +PARTITION p5611 VALUES IN (22444,22445,22446,22447), +PARTITION p5612 VALUES IN (22448,22449,22450,22451), +PARTITION p5613 VALUES IN (22452,22453,22454,22455), +PARTITION p5614 VALUES IN (22456,22457,22458,22459), +PARTITION p5615 VALUES IN (22460,22461,22462,22463), +PARTITION p5616 VALUES IN (22464,22465,22466,22467), +PARTITION p5617 VALUES IN (22468,22469,22470,22471), +PARTITION p5618 VALUES IN (22472,22473,22474,22475), +PARTITION p5619 VALUES IN (22476,22477,22478,22479), +PARTITION p5620 VALUES IN (22480,22481,22482,22483), +PARTITION p5621 VALUES IN (22484,22485,22486,22487), +PARTITION p5622 VALUES IN (22488,22489,22490,22491), +PARTITION p5623 VALUES IN (22492,22493,22494,22495), +PARTITION p5624 VALUES IN (22496,22497,22498,22499), +PARTITION p5625 VALUES IN (22500,22501,22502,22503), +PARTITION p5626 VALUES IN (22504,22505,22506,22507), +PARTITION p5627 VALUES IN (22508,22509,22510,22511), +PARTITION p5628 VALUES IN (22512,22513,22514,22515), +PARTITION p5629 VALUES IN (22516,22517,22518,22519), +PARTITION p5630 VALUES IN (22520,22521,22522,22523), +PARTITION p5631 VALUES IN (22524,22525,22526,22527), +PARTITION p5632 VALUES IN (22528,22529,22530,22531), +PARTITION p5633 VALUES IN (22532,22533,22534,22535), +PARTITION p5634 VALUES IN (22536,22537,22538,22539), +PARTITION p5635 VALUES IN (22540,22541,22542,22543), +PARTITION p5636 VALUES IN (22544,22545,22546,22547), +PARTITION p5637 VALUES IN (22548,22549,22550,22551), +PARTITION p5638 VALUES IN (22552,22553,22554,22555), +PARTITION p5639 VALUES IN (22556,22557,22558,22559), +PARTITION p5640 VALUES IN (22560,22561,22562,22563), +PARTITION p5641 VALUES IN (22564,22565,22566,22567), +PARTITION p5642 VALUES IN (22568,22569,22570,22571), +PARTITION p5643 VALUES IN (22572,22573,22574,22575), +PARTITION p5644 VALUES IN (22576,22577,22578,22579), +PARTITION p5645 VALUES IN (22580,22581,22582,22583), +PARTITION p5646 VALUES IN (22584,22585,22586,22587), +PARTITION p5647 VALUES IN (22588,22589,22590,22591), +PARTITION p5648 VALUES IN (22592,22593,22594,22595), +PARTITION p5649 VALUES IN (22596,22597,22598,22599), +PARTITION p5650 VALUES IN (22600,22601,22602,22603), +PARTITION p5651 VALUES IN (22604,22605,22606,22607), +PARTITION p5652 VALUES IN (22608,22609,22610,22611), +PARTITION p5653 VALUES IN (22612,22613,22614,22615), +PARTITION p5654 VALUES IN (22616,22617,22618,22619), +PARTITION p5655 VALUES IN (22620,22621,22622,22623), +PARTITION p5656 VALUES IN (22624,22625,22626,22627), +PARTITION p5657 VALUES IN (22628,22629,22630,22631), +PARTITION p5658 VALUES IN (22632,22633,22634,22635), +PARTITION p5659 VALUES IN (22636,22637,22638,22639), +PARTITION p5660 VALUES IN (22640,22641,22642,22643), +PARTITION p5661 VALUES IN (22644,22645,22646,22647), +PARTITION p5662 VALUES IN (22648,22649,22650,22651), +PARTITION p5663 VALUES IN (22652,22653,22654,22655), +PARTITION p5664 VALUES IN (22656,22657,22658,22659), +PARTITION p5665 VALUES IN (22660,22661,22662,22663), +PARTITION p5666 VALUES IN (22664,22665,22666,22667), +PARTITION p5667 VALUES IN (22668,22669,22670,22671), +PARTITION p5668 VALUES IN (22672,22673,22674,22675), +PARTITION p5669 VALUES IN (22676,22677,22678,22679), +PARTITION p5670 VALUES IN (22680,22681,22682,22683), +PARTITION p5671 VALUES IN (22684,22685,22686,22687), +PARTITION p5672 VALUES IN (22688,22689,22690,22691), +PARTITION p5673 VALUES IN (22692,22693,22694,22695), +PARTITION p5674 VALUES IN (22696,22697,22698,22699), +PARTITION p5675 VALUES IN (22700,22701,22702,22703), +PARTITION p5676 VALUES IN (22704,22705,22706,22707), +PARTITION p5677 VALUES IN (22708,22709,22710,22711), +PARTITION p5678 VALUES IN (22712,22713,22714,22715), +PARTITION p5679 VALUES IN (22716,22717,22718,22719), +PARTITION p5680 VALUES IN (22720,22721,22722,22723), +PARTITION p5681 VALUES IN (22724,22725,22726,22727), +PARTITION p5682 VALUES IN (22728,22729,22730,22731), +PARTITION p5683 VALUES IN (22732,22733,22734,22735), +PARTITION p5684 VALUES IN (22736,22737,22738,22739), +PARTITION p5685 VALUES IN (22740,22741,22742,22743), +PARTITION p5686 VALUES IN (22744,22745,22746,22747), +PARTITION p5687 VALUES IN (22748,22749,22750,22751), +PARTITION p5688 VALUES IN (22752,22753,22754,22755), +PARTITION p5689 VALUES IN (22756,22757,22758,22759), +PARTITION p5690 VALUES IN (22760,22761,22762,22763), +PARTITION p5691 VALUES IN (22764,22765,22766,22767), +PARTITION p5692 VALUES IN (22768,22769,22770,22771), +PARTITION p5693 VALUES IN (22772,22773,22774,22775), +PARTITION p5694 VALUES IN (22776,22777,22778,22779), +PARTITION p5695 VALUES IN (22780,22781,22782,22783), +PARTITION p5696 VALUES IN (22784,22785,22786,22787), +PARTITION p5697 VALUES IN (22788,22789,22790,22791), +PARTITION p5698 VALUES IN (22792,22793,22794,22795), +PARTITION p5699 VALUES IN (22796,22797,22798,22799), +PARTITION p5700 VALUES IN (22800,22801,22802,22803), +PARTITION p5701 VALUES IN (22804,22805,22806,22807), +PARTITION p5702 VALUES IN (22808,22809,22810,22811), +PARTITION p5703 VALUES IN (22812,22813,22814,22815), +PARTITION p5704 VALUES IN (22816,22817,22818,22819), +PARTITION p5705 VALUES IN (22820,22821,22822,22823), +PARTITION p5706 VALUES IN (22824,22825,22826,22827), +PARTITION p5707 VALUES IN (22828,22829,22830,22831), +PARTITION p5708 VALUES IN (22832,22833,22834,22835), +PARTITION p5709 VALUES IN (22836,22837,22838,22839), +PARTITION p5710 VALUES IN (22840,22841,22842,22843), +PARTITION p5711 VALUES IN (22844,22845,22846,22847), +PARTITION p5712 VALUES IN (22848,22849,22850,22851), +PARTITION p5713 VALUES IN (22852,22853,22854,22855), +PARTITION p5714 VALUES IN (22856,22857,22858,22859), +PARTITION p5715 VALUES IN (22860,22861,22862,22863), +PARTITION p5716 VALUES IN (22864,22865,22866,22867), +PARTITION p5717 VALUES IN (22868,22869,22870,22871), +PARTITION p5718 VALUES IN (22872,22873,22874,22875), +PARTITION p5719 VALUES IN (22876,22877,22878,22879), +PARTITION p5720 VALUES IN (22880,22881,22882,22883), +PARTITION p5721 VALUES IN (22884,22885,22886,22887), +PARTITION p5722 VALUES IN (22888,22889,22890,22891), +PARTITION p5723 VALUES IN (22892,22893,22894,22895), +PARTITION p5724 VALUES IN (22896,22897,22898,22899), +PARTITION p5725 VALUES IN (22900,22901,22902,22903), +PARTITION p5726 VALUES IN (22904,22905,22906,22907), +PARTITION p5727 VALUES IN (22908,22909,22910,22911), +PARTITION p5728 VALUES IN (22912,22913,22914,22915), +PARTITION p5729 VALUES IN (22916,22917,22918,22919), +PARTITION p5730 VALUES IN (22920,22921,22922,22923), +PARTITION p5731 VALUES IN (22924,22925,22926,22927), +PARTITION p5732 VALUES IN (22928,22929,22930,22931), +PARTITION p5733 VALUES IN (22932,22933,22934,22935), +PARTITION p5734 VALUES IN (22936,22937,22938,22939), +PARTITION p5735 VALUES IN (22940,22941,22942,22943), +PARTITION p5736 VALUES IN (22944,22945,22946,22947), +PARTITION p5737 VALUES IN (22948,22949,22950,22951), +PARTITION p5738 VALUES IN (22952,22953,22954,22955), +PARTITION p5739 VALUES IN (22956,22957,22958,22959), +PARTITION p5740 VALUES IN (22960,22961,22962,22963), +PARTITION p5741 VALUES IN (22964,22965,22966,22967), +PARTITION p5742 VALUES IN (22968,22969,22970,22971), +PARTITION p5743 VALUES IN (22972,22973,22974,22975), +PARTITION p5744 VALUES IN (22976,22977,22978,22979), +PARTITION p5745 VALUES IN (22980,22981,22982,22983), +PARTITION p5746 VALUES IN (22984,22985,22986,22987), +PARTITION p5747 VALUES IN (22988,22989,22990,22991), +PARTITION p5748 VALUES IN (22992,22993,22994,22995), +PARTITION p5749 VALUES IN (22996,22997,22998,22999), +PARTITION p5750 VALUES IN (23000,23001,23002,23003), +PARTITION p5751 VALUES IN (23004,23005,23006,23007), +PARTITION p5752 VALUES IN (23008,23009,23010,23011), +PARTITION p5753 VALUES IN (23012,23013,23014,23015), +PARTITION p5754 VALUES IN (23016,23017,23018,23019), +PARTITION p5755 VALUES IN (23020,23021,23022,23023), +PARTITION p5756 VALUES IN (23024,23025,23026,23027), +PARTITION p5757 VALUES IN (23028,23029,23030,23031), +PARTITION p5758 VALUES IN (23032,23033,23034,23035), +PARTITION p5759 VALUES IN (23036,23037,23038,23039), +PARTITION p5760 VALUES IN (23040,23041,23042,23043), +PARTITION p5761 VALUES IN (23044,23045,23046,23047), +PARTITION p5762 VALUES IN (23048,23049,23050,23051), +PARTITION p5763 VALUES IN (23052,23053,23054,23055), +PARTITION p5764 VALUES IN (23056,23057,23058,23059), +PARTITION p5765 VALUES IN (23060,23061,23062,23063), +PARTITION p5766 VALUES IN (23064,23065,23066,23067), +PARTITION p5767 VALUES IN (23068,23069,23070,23071), +PARTITION p5768 VALUES IN (23072,23073,23074,23075), +PARTITION p5769 VALUES IN (23076,23077,23078,23079), +PARTITION p5770 VALUES IN (23080,23081,23082,23083), +PARTITION p5771 VALUES IN (23084,23085,23086,23087), +PARTITION p5772 VALUES IN (23088,23089,23090,23091), +PARTITION p5773 VALUES IN (23092,23093,23094,23095), +PARTITION p5774 VALUES IN (23096,23097,23098,23099), +PARTITION p5775 VALUES IN (23100,23101,23102,23103), +PARTITION p5776 VALUES IN (23104,23105,23106,23107), +PARTITION p5777 VALUES IN (23108,23109,23110,23111), +PARTITION p5778 VALUES IN (23112,23113,23114,23115), +PARTITION p5779 VALUES IN (23116,23117,23118,23119), +PARTITION p5780 VALUES IN (23120,23121,23122,23123), +PARTITION p5781 VALUES IN (23124,23125,23126,23127), +PARTITION p5782 VALUES IN (23128,23129,23130,23131), +PARTITION p5783 VALUES IN (23132,23133,23134,23135), +PARTITION p5784 VALUES IN (23136,23137,23138,23139), +PARTITION p5785 VALUES IN (23140,23141,23142,23143), +PARTITION p5786 VALUES IN (23144,23145,23146,23147), +PARTITION p5787 VALUES IN (23148,23149,23150,23151), +PARTITION p5788 VALUES IN (23152,23153,23154,23155), +PARTITION p5789 VALUES IN (23156,23157,23158,23159), +PARTITION p5790 VALUES IN (23160,23161,23162,23163), +PARTITION p5791 VALUES IN (23164,23165,23166,23167), +PARTITION p5792 VALUES IN (23168,23169,23170,23171), +PARTITION p5793 VALUES IN (23172,23173,23174,23175), +PARTITION p5794 VALUES IN (23176,23177,23178,23179), +PARTITION p5795 VALUES IN (23180,23181,23182,23183), +PARTITION p5796 VALUES IN (23184,23185,23186,23187), +PARTITION p5797 VALUES IN (23188,23189,23190,23191), +PARTITION p5798 VALUES IN (23192,23193,23194,23195), +PARTITION p5799 VALUES IN (23196,23197,23198,23199), +PARTITION p5800 VALUES IN (23200,23201,23202,23203), +PARTITION p5801 VALUES IN (23204,23205,23206,23207), +PARTITION p5802 VALUES IN (23208,23209,23210,23211), +PARTITION p5803 VALUES IN (23212,23213,23214,23215), +PARTITION p5804 VALUES IN (23216,23217,23218,23219), +PARTITION p5805 VALUES IN (23220,23221,23222,23223), +PARTITION p5806 VALUES IN (23224,23225,23226,23227), +PARTITION p5807 VALUES IN (23228,23229,23230,23231), +PARTITION p5808 VALUES IN (23232,23233,23234,23235), +PARTITION p5809 VALUES IN (23236,23237,23238,23239), +PARTITION p5810 VALUES IN (23240,23241,23242,23243), +PARTITION p5811 VALUES IN (23244,23245,23246,23247), +PARTITION p5812 VALUES IN (23248,23249,23250,23251), +PARTITION p5813 VALUES IN (23252,23253,23254,23255), +PARTITION p5814 VALUES IN (23256,23257,23258,23259), +PARTITION p5815 VALUES IN (23260,23261,23262,23263), +PARTITION p5816 VALUES IN (23264,23265,23266,23267), +PARTITION p5817 VALUES IN (23268,23269,23270,23271), +PARTITION p5818 VALUES IN (23272,23273,23274,23275), +PARTITION p5819 VALUES IN (23276,23277,23278,23279), +PARTITION p5820 VALUES IN (23280,23281,23282,23283), +PARTITION p5821 VALUES IN (23284,23285,23286,23287), +PARTITION p5822 VALUES IN (23288,23289,23290,23291), +PARTITION p5823 VALUES IN (23292,23293,23294,23295), +PARTITION p5824 VALUES IN (23296,23297,23298,23299), +PARTITION p5825 VALUES IN (23300,23301,23302,23303), +PARTITION p5826 VALUES IN (23304,23305,23306,23307), +PARTITION p5827 VALUES IN (23308,23309,23310,23311), +PARTITION p5828 VALUES IN (23312,23313,23314,23315), +PARTITION p5829 VALUES IN (23316,23317,23318,23319), +PARTITION p5830 VALUES IN (23320,23321,23322,23323), +PARTITION p5831 VALUES IN (23324,23325,23326,23327), +PARTITION p5832 VALUES IN (23328,23329,23330,23331), +PARTITION p5833 VALUES IN (23332,23333,23334,23335), +PARTITION p5834 VALUES IN (23336,23337,23338,23339), +PARTITION p5835 VALUES IN (23340,23341,23342,23343), +PARTITION p5836 VALUES IN (23344,23345,23346,23347), +PARTITION p5837 VALUES IN (23348,23349,23350,23351), +PARTITION p5838 VALUES IN (23352,23353,23354,23355), +PARTITION p5839 VALUES IN (23356,23357,23358,23359), +PARTITION p5840 VALUES IN (23360,23361,23362,23363), +PARTITION p5841 VALUES IN (23364,23365,23366,23367), +PARTITION p5842 VALUES IN (23368,23369,23370,23371), +PARTITION p5843 VALUES IN (23372,23373,23374,23375), +PARTITION p5844 VALUES IN (23376,23377,23378,23379), +PARTITION p5845 VALUES IN (23380,23381,23382,23383), +PARTITION p5846 VALUES IN (23384,23385,23386,23387), +PARTITION p5847 VALUES IN (23388,23389,23390,23391), +PARTITION p5848 VALUES IN (23392,23393,23394,23395), +PARTITION p5849 VALUES IN (23396,23397,23398,23399), +PARTITION p5850 VALUES IN (23400,23401,23402,23403), +PARTITION p5851 VALUES IN (23404,23405,23406,23407), +PARTITION p5852 VALUES IN (23408,23409,23410,23411), +PARTITION p5853 VALUES IN (23412,23413,23414,23415), +PARTITION p5854 VALUES IN (23416,23417,23418,23419), +PARTITION p5855 VALUES IN (23420,23421,23422,23423), +PARTITION p5856 VALUES IN (23424,23425,23426,23427), +PARTITION p5857 VALUES IN (23428,23429,23430,23431), +PARTITION p5858 VALUES IN (23432,23433,23434,23435), +PARTITION p5859 VALUES IN (23436,23437,23438,23439), +PARTITION p5860 VALUES IN (23440,23441,23442,23443), +PARTITION p5861 VALUES IN (23444,23445,23446,23447), +PARTITION p5862 VALUES IN (23448,23449,23450,23451), +PARTITION p5863 VALUES IN (23452,23453,23454,23455), +PARTITION p5864 VALUES IN (23456,23457,23458,23459), +PARTITION p5865 VALUES IN (23460,23461,23462,23463), +PARTITION p5866 VALUES IN (23464,23465,23466,23467), +PARTITION p5867 VALUES IN (23468,23469,23470,23471), +PARTITION p5868 VALUES IN (23472,23473,23474,23475), +PARTITION p5869 VALUES IN (23476,23477,23478,23479), +PARTITION p5870 VALUES IN (23480,23481,23482,23483), +PARTITION p5871 VALUES IN (23484,23485,23486,23487), +PARTITION p5872 VALUES IN (23488,23489,23490,23491), +PARTITION p5873 VALUES IN (23492,23493,23494,23495), +PARTITION p5874 VALUES IN (23496,23497,23498,23499), +PARTITION p5875 VALUES IN (23500,23501,23502,23503), +PARTITION p5876 VALUES IN (23504,23505,23506,23507), +PARTITION p5877 VALUES IN (23508,23509,23510,23511), +PARTITION p5878 VALUES IN (23512,23513,23514,23515), +PARTITION p5879 VALUES IN (23516,23517,23518,23519), +PARTITION p5880 VALUES IN (23520,23521,23522,23523), +PARTITION p5881 VALUES IN (23524,23525,23526,23527), +PARTITION p5882 VALUES IN (23528,23529,23530,23531), +PARTITION p5883 VALUES IN (23532,23533,23534,23535), +PARTITION p5884 VALUES IN (23536,23537,23538,23539), +PARTITION p5885 VALUES IN (23540,23541,23542,23543), +PARTITION p5886 VALUES IN (23544,23545,23546,23547), +PARTITION p5887 VALUES IN (23548,23549,23550,23551), +PARTITION p5888 VALUES IN (23552,23553,23554,23555), +PARTITION p5889 VALUES IN (23556,23557,23558,23559), +PARTITION p5890 VALUES IN (23560,23561,23562,23563), +PARTITION p5891 VALUES IN (23564,23565,23566,23567), +PARTITION p5892 VALUES IN (23568,23569,23570,23571), +PARTITION p5893 VALUES IN (23572,23573,23574,23575), +PARTITION p5894 VALUES IN (23576,23577,23578,23579), +PARTITION p5895 VALUES IN (23580,23581,23582,23583), +PARTITION p5896 VALUES IN (23584,23585,23586,23587), +PARTITION p5897 VALUES IN (23588,23589,23590,23591), +PARTITION p5898 VALUES IN (23592,23593,23594,23595), +PARTITION p5899 VALUES IN (23596,23597,23598,23599), +PARTITION p5900 VALUES IN (23600,23601,23602,23603), +PARTITION p5901 VALUES IN (23604,23605,23606,23607), +PARTITION p5902 VALUES IN (23608,23609,23610,23611), +PARTITION p5903 VALUES IN (23612,23613,23614,23615), +PARTITION p5904 VALUES IN (23616,23617,23618,23619), +PARTITION p5905 VALUES IN (23620,23621,23622,23623), +PARTITION p5906 VALUES IN (23624,23625,23626,23627), +PARTITION p5907 VALUES IN (23628,23629,23630,23631), +PARTITION p5908 VALUES IN (23632,23633,23634,23635), +PARTITION p5909 VALUES IN (23636,23637,23638,23639), +PARTITION p5910 VALUES IN (23640,23641,23642,23643), +PARTITION p5911 VALUES IN (23644,23645,23646,23647), +PARTITION p5912 VALUES IN (23648,23649,23650,23651), +PARTITION p5913 VALUES IN (23652,23653,23654,23655), +PARTITION p5914 VALUES IN (23656,23657,23658,23659), +PARTITION p5915 VALUES IN (23660,23661,23662,23663), +PARTITION p5916 VALUES IN (23664,23665,23666,23667), +PARTITION p5917 VALUES IN (23668,23669,23670,23671), +PARTITION p5918 VALUES IN (23672,23673,23674,23675), +PARTITION p5919 VALUES IN (23676,23677,23678,23679), +PARTITION p5920 VALUES IN (23680,23681,23682,23683), +PARTITION p5921 VALUES IN (23684,23685,23686,23687), +PARTITION p5922 VALUES IN (23688,23689,23690,23691), +PARTITION p5923 VALUES IN (23692,23693,23694,23695), +PARTITION p5924 VALUES IN (23696,23697,23698,23699), +PARTITION p5925 VALUES IN (23700,23701,23702,23703), +PARTITION p5926 VALUES IN (23704,23705,23706,23707), +PARTITION p5927 VALUES IN (23708,23709,23710,23711), +PARTITION p5928 VALUES IN (23712,23713,23714,23715), +PARTITION p5929 VALUES IN (23716,23717,23718,23719), +PARTITION p5930 VALUES IN (23720,23721,23722,23723), +PARTITION p5931 VALUES IN (23724,23725,23726,23727), +PARTITION p5932 VALUES IN (23728,23729,23730,23731), +PARTITION p5933 VALUES IN (23732,23733,23734,23735), +PARTITION p5934 VALUES IN (23736,23737,23738,23739), +PARTITION p5935 VALUES IN (23740,23741,23742,23743), +PARTITION p5936 VALUES IN (23744,23745,23746,23747), +PARTITION p5937 VALUES IN (23748,23749,23750,23751), +PARTITION p5938 VALUES IN (23752,23753,23754,23755), +PARTITION p5939 VALUES IN (23756,23757,23758,23759), +PARTITION p5940 VALUES IN (23760,23761,23762,23763), +PARTITION p5941 VALUES IN (23764,23765,23766,23767), +PARTITION p5942 VALUES IN (23768,23769,23770,23771), +PARTITION p5943 VALUES IN (23772,23773,23774,23775), +PARTITION p5944 VALUES IN (23776,23777,23778,23779), +PARTITION p5945 VALUES IN (23780,23781,23782,23783), +PARTITION p5946 VALUES IN (23784,23785,23786,23787), +PARTITION p5947 VALUES IN (23788,23789,23790,23791), +PARTITION p5948 VALUES IN (23792,23793,23794,23795), +PARTITION p5949 VALUES IN (23796,23797,23798,23799), +PARTITION p5950 VALUES IN (23800,23801,23802,23803), +PARTITION p5951 VALUES IN (23804,23805,23806,23807), +PARTITION p5952 VALUES IN (23808,23809,23810,23811), +PARTITION p5953 VALUES IN (23812,23813,23814,23815), +PARTITION p5954 VALUES IN (23816,23817,23818,23819), +PARTITION p5955 VALUES IN (23820,23821,23822,23823), +PARTITION p5956 VALUES IN (23824,23825,23826,23827), +PARTITION p5957 VALUES IN (23828,23829,23830,23831), +PARTITION p5958 VALUES IN (23832,23833,23834,23835), +PARTITION p5959 VALUES IN (23836,23837,23838,23839), +PARTITION p5960 VALUES IN (23840,23841,23842,23843), +PARTITION p5961 VALUES IN (23844,23845,23846,23847), +PARTITION p5962 VALUES IN (23848,23849,23850,23851), +PARTITION p5963 VALUES IN (23852,23853,23854,23855), +PARTITION p5964 VALUES IN (23856,23857,23858,23859), +PARTITION p5965 VALUES IN (23860,23861,23862,23863), +PARTITION p5966 VALUES IN (23864,23865,23866,23867), +PARTITION p5967 VALUES IN (23868,23869,23870,23871), +PARTITION p5968 VALUES IN (23872,23873,23874,23875), +PARTITION p5969 VALUES IN (23876,23877,23878,23879), +PARTITION p5970 VALUES IN (23880,23881,23882,23883), +PARTITION p5971 VALUES IN (23884,23885,23886,23887), +PARTITION p5972 VALUES IN (23888,23889,23890,23891), +PARTITION p5973 VALUES IN (23892,23893,23894,23895), +PARTITION p5974 VALUES IN (23896,23897,23898,23899), +PARTITION p5975 VALUES IN (23900,23901,23902,23903), +PARTITION p5976 VALUES IN (23904,23905,23906,23907), +PARTITION p5977 VALUES IN (23908,23909,23910,23911), +PARTITION p5978 VALUES IN (23912,23913,23914,23915), +PARTITION p5979 VALUES IN (23916,23917,23918,23919), +PARTITION p5980 VALUES IN (23920,23921,23922,23923), +PARTITION p5981 VALUES IN (23924,23925,23926,23927), +PARTITION p5982 VALUES IN (23928,23929,23930,23931), +PARTITION p5983 VALUES IN (23932,23933,23934,23935), +PARTITION p5984 VALUES IN (23936,23937,23938,23939), +PARTITION p5985 VALUES IN (23940,23941,23942,23943), +PARTITION p5986 VALUES IN (23944,23945,23946,23947), +PARTITION p5987 VALUES IN (23948,23949,23950,23951), +PARTITION p5988 VALUES IN (23952,23953,23954,23955), +PARTITION p5989 VALUES IN (23956,23957,23958,23959), +PARTITION p5990 VALUES IN (23960,23961,23962,23963), +PARTITION p5991 VALUES IN (23964,23965,23966,23967), +PARTITION p5992 VALUES IN (23968,23969,23970,23971), +PARTITION p5993 VALUES IN (23972,23973,23974,23975), +PARTITION p5994 VALUES IN (23976,23977,23978,23979), +PARTITION p5995 VALUES IN (23980,23981,23982,23983), +PARTITION p5996 VALUES IN (23984,23985,23986,23987), +PARTITION p5997 VALUES IN (23988,23989,23990,23991), +PARTITION p5998 VALUES IN (23992,23993,23994,23995), +PARTITION p5999 VALUES IN (23996,23997,23998,23999), +PARTITION p6000 VALUES IN (24000,24001,24002,24003), +PARTITION p6001 VALUES IN (24004,24005,24006,24007), +PARTITION p6002 VALUES IN (24008,24009,24010,24011), +PARTITION p6003 VALUES IN (24012,24013,24014,24015), +PARTITION p6004 VALUES IN (24016,24017,24018,24019), +PARTITION p6005 VALUES IN (24020,24021,24022,24023), +PARTITION p6006 VALUES IN (24024,24025,24026,24027), +PARTITION p6007 VALUES IN (24028,24029,24030,24031), +PARTITION p6008 VALUES IN (24032,24033,24034,24035), +PARTITION p6009 VALUES IN (24036,24037,24038,24039), +PARTITION p6010 VALUES IN (24040,24041,24042,24043), +PARTITION p6011 VALUES IN (24044,24045,24046,24047), +PARTITION p6012 VALUES IN (24048,24049,24050,24051), +PARTITION p6013 VALUES IN (24052,24053,24054,24055), +PARTITION p6014 VALUES IN (24056,24057,24058,24059), +PARTITION p6015 VALUES IN (24060,24061,24062,24063), +PARTITION p6016 VALUES IN (24064,24065,24066,24067), +PARTITION p6017 VALUES IN (24068,24069,24070,24071), +PARTITION p6018 VALUES IN (24072,24073,24074,24075), +PARTITION p6019 VALUES IN (24076,24077,24078,24079), +PARTITION p6020 VALUES IN (24080,24081,24082,24083), +PARTITION p6021 VALUES IN (24084,24085,24086,24087), +PARTITION p6022 VALUES IN (24088,24089,24090,24091), +PARTITION p6023 VALUES IN (24092,24093,24094,24095), +PARTITION p6024 VALUES IN (24096,24097,24098,24099), +PARTITION p6025 VALUES IN (24100,24101,24102,24103), +PARTITION p6026 VALUES IN (24104,24105,24106,24107), +PARTITION p6027 VALUES IN (24108,24109,24110,24111), +PARTITION p6028 VALUES IN (24112,24113,24114,24115), +PARTITION p6029 VALUES IN (24116,24117,24118,24119), +PARTITION p6030 VALUES IN (24120,24121,24122,24123), +PARTITION p6031 VALUES IN (24124,24125,24126,24127), +PARTITION p6032 VALUES IN (24128,24129,24130,24131), +PARTITION p6033 VALUES IN (24132,24133,24134,24135), +PARTITION p6034 VALUES IN (24136,24137,24138,24139), +PARTITION p6035 VALUES IN (24140,24141,24142,24143), +PARTITION p6036 VALUES IN (24144,24145,24146,24147), +PARTITION p6037 VALUES IN (24148,24149,24150,24151), +PARTITION p6038 VALUES IN (24152,24153,24154,24155), +PARTITION p6039 VALUES IN (24156,24157,24158,24159), +PARTITION p6040 VALUES IN (24160,24161,24162,24163), +PARTITION p6041 VALUES IN (24164,24165,24166,24167), +PARTITION p6042 VALUES IN (24168,24169,24170,24171), +PARTITION p6043 VALUES IN (24172,24173,24174,24175), +PARTITION p6044 VALUES IN (24176,24177,24178,24179), +PARTITION p6045 VALUES IN (24180,24181,24182,24183), +PARTITION p6046 VALUES IN (24184,24185,24186,24187), +PARTITION p6047 VALUES IN (24188,24189,24190,24191), +PARTITION p6048 VALUES IN (24192,24193,24194,24195), +PARTITION p6049 VALUES IN (24196,24197,24198,24199), +PARTITION p6050 VALUES IN (24200,24201,24202,24203), +PARTITION p6051 VALUES IN (24204,24205,24206,24207), +PARTITION p6052 VALUES IN (24208,24209,24210,24211), +PARTITION p6053 VALUES IN (24212,24213,24214,24215), +PARTITION p6054 VALUES IN (24216,24217,24218,24219), +PARTITION p6055 VALUES IN (24220,24221,24222,24223), +PARTITION p6056 VALUES IN (24224,24225,24226,24227), +PARTITION p6057 VALUES IN (24228,24229,24230,24231), +PARTITION p6058 VALUES IN (24232,24233,24234,24235), +PARTITION p6059 VALUES IN (24236,24237,24238,24239), +PARTITION p6060 VALUES IN (24240,24241,24242,24243), +PARTITION p6061 VALUES IN (24244,24245,24246,24247), +PARTITION p6062 VALUES IN (24248,24249,24250,24251), +PARTITION p6063 VALUES IN (24252,24253,24254,24255), +PARTITION p6064 VALUES IN (24256,24257,24258,24259), +PARTITION p6065 VALUES IN (24260,24261,24262,24263), +PARTITION p6066 VALUES IN (24264,24265,24266,24267), +PARTITION p6067 VALUES IN (24268,24269,24270,24271), +PARTITION p6068 VALUES IN (24272,24273,24274,24275), +PARTITION p6069 VALUES IN (24276,24277,24278,24279), +PARTITION p6070 VALUES IN (24280,24281,24282,24283), +PARTITION p6071 VALUES IN (24284,24285,24286,24287), +PARTITION p6072 VALUES IN (24288,24289,24290,24291), +PARTITION p6073 VALUES IN (24292,24293,24294,24295), +PARTITION p6074 VALUES IN (24296,24297,24298,24299), +PARTITION p6075 VALUES IN (24300,24301,24302,24303), +PARTITION p6076 VALUES IN (24304,24305,24306,24307), +PARTITION p6077 VALUES IN (24308,24309,24310,24311), +PARTITION p6078 VALUES IN (24312,24313,24314,24315), +PARTITION p6079 VALUES IN (24316,24317,24318,24319), +PARTITION p6080 VALUES IN (24320,24321,24322,24323), +PARTITION p6081 VALUES IN (24324,24325,24326,24327), +PARTITION p6082 VALUES IN (24328,24329,24330,24331), +PARTITION p6083 VALUES IN (24332,24333,24334,24335), +PARTITION p6084 VALUES IN (24336,24337,24338,24339), +PARTITION p6085 VALUES IN (24340,24341,24342,24343), +PARTITION p6086 VALUES IN (24344,24345,24346,24347), +PARTITION p6087 VALUES IN (24348,24349,24350,24351), +PARTITION p6088 VALUES IN (24352,24353,24354,24355), +PARTITION p6089 VALUES IN (24356,24357,24358,24359), +PARTITION p6090 VALUES IN (24360,24361,24362,24363), +PARTITION p6091 VALUES IN (24364,24365,24366,24367), +PARTITION p6092 VALUES IN (24368,24369,24370,24371), +PARTITION p6093 VALUES IN (24372,24373,24374,24375), +PARTITION p6094 VALUES IN (24376,24377,24378,24379), +PARTITION p6095 VALUES IN (24380,24381,24382,24383), +PARTITION p6096 VALUES IN (24384,24385,24386,24387), +PARTITION p6097 VALUES IN (24388,24389,24390,24391), +PARTITION p6098 VALUES IN (24392,24393,24394,24395), +PARTITION p6099 VALUES IN (24396,24397,24398,24399), +PARTITION p6100 VALUES IN (24400,24401,24402,24403), +PARTITION p6101 VALUES IN (24404,24405,24406,24407), +PARTITION p6102 VALUES IN (24408,24409,24410,24411), +PARTITION p6103 VALUES IN (24412,24413,24414,24415), +PARTITION p6104 VALUES IN (24416,24417,24418,24419), +PARTITION p6105 VALUES IN (24420,24421,24422,24423), +PARTITION p6106 VALUES IN (24424,24425,24426,24427), +PARTITION p6107 VALUES IN (24428,24429,24430,24431), +PARTITION p6108 VALUES IN (24432,24433,24434,24435), +PARTITION p6109 VALUES IN (24436,24437,24438,24439), +PARTITION p6110 VALUES IN (24440,24441,24442,24443), +PARTITION p6111 VALUES IN (24444,24445,24446,24447), +PARTITION p6112 VALUES IN (24448,24449,24450,24451), +PARTITION p6113 VALUES IN (24452,24453,24454,24455), +PARTITION p6114 VALUES IN (24456,24457,24458,24459), +PARTITION p6115 VALUES IN (24460,24461,24462,24463), +PARTITION p6116 VALUES IN (24464,24465,24466,24467), +PARTITION p6117 VALUES IN (24468,24469,24470,24471), +PARTITION p6118 VALUES IN (24472,24473,24474,24475), +PARTITION p6119 VALUES IN (24476,24477,24478,24479), +PARTITION p6120 VALUES IN (24480,24481,24482,24483), +PARTITION p6121 VALUES IN (24484,24485,24486,24487), +PARTITION p6122 VALUES IN (24488,24489,24490,24491), +PARTITION p6123 VALUES IN (24492,24493,24494,24495), +PARTITION p6124 VALUES IN (24496,24497,24498,24499), +PARTITION p6125 VALUES IN (24500,24501,24502,24503), +PARTITION p6126 VALUES IN (24504,24505,24506,24507), +PARTITION p6127 VALUES IN (24508,24509,24510,24511), +PARTITION p6128 VALUES IN (24512,24513,24514,24515), +PARTITION p6129 VALUES IN (24516,24517,24518,24519), +PARTITION p6130 VALUES IN (24520,24521,24522,24523), +PARTITION p6131 VALUES IN (24524,24525,24526,24527), +PARTITION p6132 VALUES IN (24528,24529,24530,24531), +PARTITION p6133 VALUES IN (24532,24533,24534,24535), +PARTITION p6134 VALUES IN (24536,24537,24538,24539), +PARTITION p6135 VALUES IN (24540,24541,24542,24543), +PARTITION p6136 VALUES IN (24544,24545,24546,24547), +PARTITION p6137 VALUES IN (24548,24549,24550,24551), +PARTITION p6138 VALUES IN (24552,24553,24554,24555), +PARTITION p6139 VALUES IN (24556,24557,24558,24559), +PARTITION p6140 VALUES IN (24560,24561,24562,24563), +PARTITION p6141 VALUES IN (24564,24565,24566,24567), +PARTITION p6142 VALUES IN (24568,24569,24570,24571), +PARTITION p6143 VALUES IN (24572,24573,24574,24575), +PARTITION p6144 VALUES IN (24576,24577,24578,24579), +PARTITION p6145 VALUES IN (24580,24581,24582,24583), +PARTITION p6146 VALUES IN (24584,24585,24586,24587), +PARTITION p6147 VALUES IN (24588,24589,24590,24591), +PARTITION p6148 VALUES IN (24592,24593,24594,24595), +PARTITION p6149 VALUES IN (24596,24597,24598,24599), +PARTITION p6150 VALUES IN (24600,24601,24602,24603), +PARTITION p6151 VALUES IN (24604,24605,24606,24607), +PARTITION p6152 VALUES IN (24608,24609,24610,24611), +PARTITION p6153 VALUES IN (24612,24613,24614,24615), +PARTITION p6154 VALUES IN (24616,24617,24618,24619), +PARTITION p6155 VALUES IN (24620,24621,24622,24623), +PARTITION p6156 VALUES IN (24624,24625,24626,24627), +PARTITION p6157 VALUES IN (24628,24629,24630,24631), +PARTITION p6158 VALUES IN (24632,24633,24634,24635), +PARTITION p6159 VALUES IN (24636,24637,24638,24639), +PARTITION p6160 VALUES IN (24640,24641,24642,24643), +PARTITION p6161 VALUES IN (24644,24645,24646,24647), +PARTITION p6162 VALUES IN (24648,24649,24650,24651), +PARTITION p6163 VALUES IN (24652,24653,24654,24655), +PARTITION p6164 VALUES IN (24656,24657,24658,24659), +PARTITION p6165 VALUES IN (24660,24661,24662,24663), +PARTITION p6166 VALUES IN (24664,24665,24666,24667), +PARTITION p6167 VALUES IN (24668,24669,24670,24671), +PARTITION p6168 VALUES IN (24672,24673,24674,24675), +PARTITION p6169 VALUES IN (24676,24677,24678,24679), +PARTITION p6170 VALUES IN (24680,24681,24682,24683), +PARTITION p6171 VALUES IN (24684,24685,24686,24687), +PARTITION p6172 VALUES IN (24688,24689,24690,24691), +PARTITION p6173 VALUES IN (24692,24693,24694,24695), +PARTITION p6174 VALUES IN (24696,24697,24698,24699), +PARTITION p6175 VALUES IN (24700,24701,24702,24703), +PARTITION p6176 VALUES IN (24704,24705,24706,24707), +PARTITION p6177 VALUES IN (24708,24709,24710,24711), +PARTITION p6178 VALUES IN (24712,24713,24714,24715), +PARTITION p6179 VALUES IN (24716,24717,24718,24719), +PARTITION p6180 VALUES IN (24720,24721,24722,24723), +PARTITION p6181 VALUES IN (24724,24725,24726,24727), +PARTITION p6182 VALUES IN (24728,24729,24730,24731), +PARTITION p6183 VALUES IN (24732,24733,24734,24735), +PARTITION p6184 VALUES IN (24736,24737,24738,24739), +PARTITION p6185 VALUES IN (24740,24741,24742,24743), +PARTITION p6186 VALUES IN (24744,24745,24746,24747), +PARTITION p6187 VALUES IN (24748,24749,24750,24751), +PARTITION p6188 VALUES IN (24752,24753,24754,24755), +PARTITION p6189 VALUES IN (24756,24757,24758,24759), +PARTITION p6190 VALUES IN (24760,24761,24762,24763), +PARTITION p6191 VALUES IN (24764,24765,24766,24767), +PARTITION p6192 VALUES IN (24768,24769,24770,24771), +PARTITION p6193 VALUES IN (24772,24773,24774,24775), +PARTITION p6194 VALUES IN (24776,24777,24778,24779), +PARTITION p6195 VALUES IN (24780,24781,24782,24783), +PARTITION p6196 VALUES IN (24784,24785,24786,24787), +PARTITION p6197 VALUES IN (24788,24789,24790,24791), +PARTITION p6198 VALUES IN (24792,24793,24794,24795), +PARTITION p6199 VALUES IN (24796,24797,24798,24799), +PARTITION p6200 VALUES IN (24800,24801,24802,24803), +PARTITION p6201 VALUES IN (24804,24805,24806,24807), +PARTITION p6202 VALUES IN (24808,24809,24810,24811), +PARTITION p6203 VALUES IN (24812,24813,24814,24815), +PARTITION p6204 VALUES IN (24816,24817,24818,24819), +PARTITION p6205 VALUES IN (24820,24821,24822,24823), +PARTITION p6206 VALUES IN (24824,24825,24826,24827), +PARTITION p6207 VALUES IN (24828,24829,24830,24831), +PARTITION p6208 VALUES IN (24832,24833,24834,24835), +PARTITION p6209 VALUES IN (24836,24837,24838,24839), +PARTITION p6210 VALUES IN (24840,24841,24842,24843), +PARTITION p6211 VALUES IN (24844,24845,24846,24847), +PARTITION p6212 VALUES IN (24848,24849,24850,24851), +PARTITION p6213 VALUES IN (24852,24853,24854,24855), +PARTITION p6214 VALUES IN (24856,24857,24858,24859), +PARTITION p6215 VALUES IN (24860,24861,24862,24863), +PARTITION p6216 VALUES IN (24864,24865,24866,24867), +PARTITION p6217 VALUES IN (24868,24869,24870,24871), +PARTITION p6218 VALUES IN (24872,24873,24874,24875), +PARTITION p6219 VALUES IN (24876,24877,24878,24879), +PARTITION p6220 VALUES IN (24880,24881,24882,24883), +PARTITION p6221 VALUES IN (24884,24885,24886,24887), +PARTITION p6222 VALUES IN (24888,24889,24890,24891), +PARTITION p6223 VALUES IN (24892,24893,24894,24895), +PARTITION p6224 VALUES IN (24896,24897,24898,24899), +PARTITION p6225 VALUES IN (24900,24901,24902,24903), +PARTITION p6226 VALUES IN (24904,24905,24906,24907), +PARTITION p6227 VALUES IN (24908,24909,24910,24911), +PARTITION p6228 VALUES IN (24912,24913,24914,24915), +PARTITION p6229 VALUES IN (24916,24917,24918,24919), +PARTITION p6230 VALUES IN (24920,24921,24922,24923), +PARTITION p6231 VALUES IN (24924,24925,24926,24927), +PARTITION p6232 VALUES IN (24928,24929,24930,24931), +PARTITION p6233 VALUES IN (24932,24933,24934,24935), +PARTITION p6234 VALUES IN (24936,24937,24938,24939), +PARTITION p6235 VALUES IN (24940,24941,24942,24943), +PARTITION p6236 VALUES IN (24944,24945,24946,24947), +PARTITION p6237 VALUES IN (24948,24949,24950,24951), +PARTITION p6238 VALUES IN (24952,24953,24954,24955), +PARTITION p6239 VALUES IN (24956,24957,24958,24959), +PARTITION p6240 VALUES IN (24960,24961,24962,24963), +PARTITION p6241 VALUES IN (24964,24965,24966,24967), +PARTITION p6242 VALUES IN (24968,24969,24970,24971), +PARTITION p6243 VALUES IN (24972,24973,24974,24975), +PARTITION p6244 VALUES IN (24976,24977,24978,24979), +PARTITION p6245 VALUES IN (24980,24981,24982,24983), +PARTITION p6246 VALUES IN (24984,24985,24986,24987), +PARTITION p6247 VALUES IN (24988,24989,24990,24991), +PARTITION p6248 VALUES IN (24992,24993,24994,24995), +PARTITION p6249 VALUES IN (24996,24997,24998,24999), +PARTITION p6250 VALUES IN (25000,25001,25002,25003), +PARTITION p6251 VALUES IN (25004,25005,25006,25007), +PARTITION p6252 VALUES IN (25008,25009,25010,25011), +PARTITION p6253 VALUES IN (25012,25013,25014,25015), +PARTITION p6254 VALUES IN (25016,25017,25018,25019), +PARTITION p6255 VALUES IN (25020,25021,25022,25023), +PARTITION p6256 VALUES IN (25024,25025,25026,25027), +PARTITION p6257 VALUES IN (25028,25029,25030,25031), +PARTITION p6258 VALUES IN (25032,25033,25034,25035), +PARTITION p6259 VALUES IN (25036,25037,25038,25039), +PARTITION p6260 VALUES IN (25040,25041,25042,25043), +PARTITION p6261 VALUES IN (25044,25045,25046,25047), +PARTITION p6262 VALUES IN (25048,25049,25050,25051), +PARTITION p6263 VALUES IN (25052,25053,25054,25055), +PARTITION p6264 VALUES IN (25056,25057,25058,25059), +PARTITION p6265 VALUES IN (25060,25061,25062,25063), +PARTITION p6266 VALUES IN (25064,25065,25066,25067), +PARTITION p6267 VALUES IN (25068,25069,25070,25071), +PARTITION p6268 VALUES IN (25072,25073,25074,25075), +PARTITION p6269 VALUES IN (25076,25077,25078,25079), +PARTITION p6270 VALUES IN (25080,25081,25082,25083), +PARTITION p6271 VALUES IN (25084,25085,25086,25087), +PARTITION p6272 VALUES IN (25088,25089,25090,25091), +PARTITION p6273 VALUES IN (25092,25093,25094,25095), +PARTITION p6274 VALUES IN (25096,25097,25098,25099), +PARTITION p6275 VALUES IN (25100,25101,25102,25103), +PARTITION p6276 VALUES IN (25104,25105,25106,25107), +PARTITION p6277 VALUES IN (25108,25109,25110,25111), +PARTITION p6278 VALUES IN (25112,25113,25114,25115), +PARTITION p6279 VALUES IN (25116,25117,25118,25119), +PARTITION p6280 VALUES IN (25120,25121,25122,25123), +PARTITION p6281 VALUES IN (25124,25125,25126,25127), +PARTITION p6282 VALUES IN (25128,25129,25130,25131), +PARTITION p6283 VALUES IN (25132,25133,25134,25135), +PARTITION p6284 VALUES IN (25136,25137,25138,25139), +PARTITION p6285 VALUES IN (25140,25141,25142,25143), +PARTITION p6286 VALUES IN (25144,25145,25146,25147), +PARTITION p6287 VALUES IN (25148,25149,25150,25151), +PARTITION p6288 VALUES IN (25152,25153,25154,25155), +PARTITION p6289 VALUES IN (25156,25157,25158,25159), +PARTITION p6290 VALUES IN (25160,25161,25162,25163), +PARTITION p6291 VALUES IN (25164,25165,25166,25167), +PARTITION p6292 VALUES IN (25168,25169,25170,25171), +PARTITION p6293 VALUES IN (25172,25173,25174,25175), +PARTITION p6294 VALUES IN (25176,25177,25178,25179), +PARTITION p6295 VALUES IN (25180,25181,25182,25183), +PARTITION p6296 VALUES IN (25184,25185,25186,25187), +PARTITION p6297 VALUES IN (25188,25189,25190,25191), +PARTITION p6298 VALUES IN (25192,25193,25194,25195), +PARTITION p6299 VALUES IN (25196,25197,25198,25199), +PARTITION p6300 VALUES IN (25200,25201,25202,25203), +PARTITION p6301 VALUES IN (25204,25205,25206,25207), +PARTITION p6302 VALUES IN (25208,25209,25210,25211), +PARTITION p6303 VALUES IN (25212,25213,25214,25215), +PARTITION p6304 VALUES IN (25216,25217,25218,25219), +PARTITION p6305 VALUES IN (25220,25221,25222,25223), +PARTITION p6306 VALUES IN (25224,25225,25226,25227), +PARTITION p6307 VALUES IN (25228,25229,25230,25231), +PARTITION p6308 VALUES IN (25232,25233,25234,25235), +PARTITION p6309 VALUES IN (25236,25237,25238,25239), +PARTITION p6310 VALUES IN (25240,25241,25242,25243), +PARTITION p6311 VALUES IN (25244,25245,25246,25247), +PARTITION p6312 VALUES IN (25248,25249,25250,25251), +PARTITION p6313 VALUES IN (25252,25253,25254,25255), +PARTITION p6314 VALUES IN (25256,25257,25258,25259), +PARTITION p6315 VALUES IN (25260,25261,25262,25263), +PARTITION p6316 VALUES IN (25264,25265,25266,25267), +PARTITION p6317 VALUES IN (25268,25269,25270,25271), +PARTITION p6318 VALUES IN (25272,25273,25274,25275), +PARTITION p6319 VALUES IN (25276,25277,25278,25279), +PARTITION p6320 VALUES IN (25280,25281,25282,25283), +PARTITION p6321 VALUES IN (25284,25285,25286,25287), +PARTITION p6322 VALUES IN (25288,25289,25290,25291), +PARTITION p6323 VALUES IN (25292,25293,25294,25295), +PARTITION p6324 VALUES IN (25296,25297,25298,25299), +PARTITION p6325 VALUES IN (25300,25301,25302,25303), +PARTITION p6326 VALUES IN (25304,25305,25306,25307), +PARTITION p6327 VALUES IN (25308,25309,25310,25311), +PARTITION p6328 VALUES IN (25312,25313,25314,25315), +PARTITION p6329 VALUES IN (25316,25317,25318,25319), +PARTITION p6330 VALUES IN (25320,25321,25322,25323), +PARTITION p6331 VALUES IN (25324,25325,25326,25327), +PARTITION p6332 VALUES IN (25328,25329,25330,25331), +PARTITION p6333 VALUES IN (25332,25333,25334,25335), +PARTITION p6334 VALUES IN (25336,25337,25338,25339), +PARTITION p6335 VALUES IN (25340,25341,25342,25343), +PARTITION p6336 VALUES IN (25344,25345,25346,25347), +PARTITION p6337 VALUES IN (25348,25349,25350,25351), +PARTITION p6338 VALUES IN (25352,25353,25354,25355), +PARTITION p6339 VALUES IN (25356,25357,25358,25359), +PARTITION p6340 VALUES IN (25360,25361,25362,25363), +PARTITION p6341 VALUES IN (25364,25365,25366,25367), +PARTITION p6342 VALUES IN (25368,25369,25370,25371), +PARTITION p6343 VALUES IN (25372,25373,25374,25375), +PARTITION p6344 VALUES IN (25376,25377,25378,25379), +PARTITION p6345 VALUES IN (25380,25381,25382,25383), +PARTITION p6346 VALUES IN (25384,25385,25386,25387), +PARTITION p6347 VALUES IN (25388,25389,25390,25391), +PARTITION p6348 VALUES IN (25392,25393,25394,25395), +PARTITION p6349 VALUES IN (25396,25397,25398,25399), +PARTITION p6350 VALUES IN (25400,25401,25402,25403), +PARTITION p6351 VALUES IN (25404,25405,25406,25407), +PARTITION p6352 VALUES IN (25408,25409,25410,25411), +PARTITION p6353 VALUES IN (25412,25413,25414,25415), +PARTITION p6354 VALUES IN (25416,25417,25418,25419), +PARTITION p6355 VALUES IN (25420,25421,25422,25423), +PARTITION p6356 VALUES IN (25424,25425,25426,25427), +PARTITION p6357 VALUES IN (25428,25429,25430,25431), +PARTITION p6358 VALUES IN (25432,25433,25434,25435), +PARTITION p6359 VALUES IN (25436,25437,25438,25439), +PARTITION p6360 VALUES IN (25440,25441,25442,25443), +PARTITION p6361 VALUES IN (25444,25445,25446,25447), +PARTITION p6362 VALUES IN (25448,25449,25450,25451), +PARTITION p6363 VALUES IN (25452,25453,25454,25455), +PARTITION p6364 VALUES IN (25456,25457,25458,25459), +PARTITION p6365 VALUES IN (25460,25461,25462,25463), +PARTITION p6366 VALUES IN (25464,25465,25466,25467), +PARTITION p6367 VALUES IN (25468,25469,25470,25471), +PARTITION p6368 VALUES IN (25472,25473,25474,25475), +PARTITION p6369 VALUES IN (25476,25477,25478,25479), +PARTITION p6370 VALUES IN (25480,25481,25482,25483), +PARTITION p6371 VALUES IN (25484,25485,25486,25487), +PARTITION p6372 VALUES IN (25488,25489,25490,25491), +PARTITION p6373 VALUES IN (25492,25493,25494,25495), +PARTITION p6374 VALUES IN (25496,25497,25498,25499), +PARTITION p6375 VALUES IN (25500,25501,25502,25503), +PARTITION p6376 VALUES IN (25504,25505,25506,25507), +PARTITION p6377 VALUES IN (25508,25509,25510,25511), +PARTITION p6378 VALUES IN (25512,25513,25514,25515), +PARTITION p6379 VALUES IN (25516,25517,25518,25519), +PARTITION p6380 VALUES IN (25520,25521,25522,25523), +PARTITION p6381 VALUES IN (25524,25525,25526,25527), +PARTITION p6382 VALUES IN (25528,25529,25530,25531), +PARTITION p6383 VALUES IN (25532,25533,25534,25535), +PARTITION p6384 VALUES IN (25536,25537,25538,25539), +PARTITION p6385 VALUES IN (25540,25541,25542,25543), +PARTITION p6386 VALUES IN (25544,25545,25546,25547), +PARTITION p6387 VALUES IN (25548,25549,25550,25551), +PARTITION p6388 VALUES IN (25552,25553,25554,25555), +PARTITION p6389 VALUES IN (25556,25557,25558,25559), +PARTITION p6390 VALUES IN (25560,25561,25562,25563), +PARTITION p6391 VALUES IN (25564,25565,25566,25567), +PARTITION p6392 VALUES IN (25568,25569,25570,25571), +PARTITION p6393 VALUES IN (25572,25573,25574,25575), +PARTITION p6394 VALUES IN (25576,25577,25578,25579), +PARTITION p6395 VALUES IN (25580,25581,25582,25583), +PARTITION p6396 VALUES IN (25584,25585,25586,25587), +PARTITION p6397 VALUES IN (25588,25589,25590,25591), +PARTITION p6398 VALUES IN (25592,25593,25594,25595), +PARTITION p6399 VALUES IN (25596,25597,25598,25599), +PARTITION p6400 VALUES IN (25600,25601,25602,25603), +PARTITION p6401 VALUES IN (25604,25605,25606,25607), +PARTITION p6402 VALUES IN (25608,25609,25610,25611), +PARTITION p6403 VALUES IN (25612,25613,25614,25615), +PARTITION p6404 VALUES IN (25616,25617,25618,25619), +PARTITION p6405 VALUES IN (25620,25621,25622,25623), +PARTITION p6406 VALUES IN (25624,25625,25626,25627), +PARTITION p6407 VALUES IN (25628,25629,25630,25631), +PARTITION p6408 VALUES IN (25632,25633,25634,25635), +PARTITION p6409 VALUES IN (25636,25637,25638,25639), +PARTITION p6410 VALUES IN (25640,25641,25642,25643), +PARTITION p6411 VALUES IN (25644,25645,25646,25647), +PARTITION p6412 VALUES IN (25648,25649,25650,25651), +PARTITION p6413 VALUES IN (25652,25653,25654,25655), +PARTITION p6414 VALUES IN (25656,25657,25658,25659), +PARTITION p6415 VALUES IN (25660,25661,25662,25663), +PARTITION p6416 VALUES IN (25664,25665,25666,25667), +PARTITION p6417 VALUES IN (25668,25669,25670,25671), +PARTITION p6418 VALUES IN (25672,25673,25674,25675), +PARTITION p6419 VALUES IN (25676,25677,25678,25679), +PARTITION p6420 VALUES IN (25680,25681,25682,25683), +PARTITION p6421 VALUES IN (25684,25685,25686,25687), +PARTITION p6422 VALUES IN (25688,25689,25690,25691), +PARTITION p6423 VALUES IN (25692,25693,25694,25695), +PARTITION p6424 VALUES IN (25696,25697,25698,25699), +PARTITION p6425 VALUES IN (25700,25701,25702,25703), +PARTITION p6426 VALUES IN (25704,25705,25706,25707), +PARTITION p6427 VALUES IN (25708,25709,25710,25711), +PARTITION p6428 VALUES IN (25712,25713,25714,25715), +PARTITION p6429 VALUES IN (25716,25717,25718,25719), +PARTITION p6430 VALUES IN (25720,25721,25722,25723), +PARTITION p6431 VALUES IN (25724,25725,25726,25727), +PARTITION p6432 VALUES IN (25728,25729,25730,25731), +PARTITION p6433 VALUES IN (25732,25733,25734,25735), +PARTITION p6434 VALUES IN (25736,25737,25738,25739), +PARTITION p6435 VALUES IN (25740,25741,25742,25743), +PARTITION p6436 VALUES IN (25744,25745,25746,25747), +PARTITION p6437 VALUES IN (25748,25749,25750,25751), +PARTITION p6438 VALUES IN (25752,25753,25754,25755), +PARTITION p6439 VALUES IN (25756,25757,25758,25759), +PARTITION p6440 VALUES IN (25760,25761,25762,25763), +PARTITION p6441 VALUES IN (25764,25765,25766,25767), +PARTITION p6442 VALUES IN (25768,25769,25770,25771), +PARTITION p6443 VALUES IN (25772,25773,25774,25775), +PARTITION p6444 VALUES IN (25776,25777,25778,25779), +PARTITION p6445 VALUES IN (25780,25781,25782,25783), +PARTITION p6446 VALUES IN (25784,25785,25786,25787), +PARTITION p6447 VALUES IN (25788,25789,25790,25791), +PARTITION p6448 VALUES IN (25792,25793,25794,25795), +PARTITION p6449 VALUES IN (25796,25797,25798,25799), +PARTITION p6450 VALUES IN (25800,25801,25802,25803), +PARTITION p6451 VALUES IN (25804,25805,25806,25807), +PARTITION p6452 VALUES IN (25808,25809,25810,25811), +PARTITION p6453 VALUES IN (25812,25813,25814,25815), +PARTITION p6454 VALUES IN (25816,25817,25818,25819), +PARTITION p6455 VALUES IN (25820,25821,25822,25823), +PARTITION p6456 VALUES IN (25824,25825,25826,25827), +PARTITION p6457 VALUES IN (25828,25829,25830,25831), +PARTITION p6458 VALUES IN (25832,25833,25834,25835), +PARTITION p6459 VALUES IN (25836,25837,25838,25839), +PARTITION p6460 VALUES IN (25840,25841,25842,25843), +PARTITION p6461 VALUES IN (25844,25845,25846,25847), +PARTITION p6462 VALUES IN (25848,25849,25850,25851), +PARTITION p6463 VALUES IN (25852,25853,25854,25855), +PARTITION p6464 VALUES IN (25856,25857,25858,25859), +PARTITION p6465 VALUES IN (25860,25861,25862,25863), +PARTITION p6466 VALUES IN (25864,25865,25866,25867), +PARTITION p6467 VALUES IN (25868,25869,25870,25871), +PARTITION p6468 VALUES IN (25872,25873,25874,25875), +PARTITION p6469 VALUES IN (25876,25877,25878,25879), +PARTITION p6470 VALUES IN (25880,25881,25882,25883), +PARTITION p6471 VALUES IN (25884,25885,25886,25887), +PARTITION p6472 VALUES IN (25888,25889,25890,25891), +PARTITION p6473 VALUES IN (25892,25893,25894,25895), +PARTITION p6474 VALUES IN (25896,25897,25898,25899), +PARTITION p6475 VALUES IN (25900,25901,25902,25903), +PARTITION p6476 VALUES IN (25904,25905,25906,25907), +PARTITION p6477 VALUES IN (25908,25909,25910,25911), +PARTITION p6478 VALUES IN (25912,25913,25914,25915), +PARTITION p6479 VALUES IN (25916,25917,25918,25919), +PARTITION p6480 VALUES IN (25920,25921,25922,25923), +PARTITION p6481 VALUES IN (25924,25925,25926,25927), +PARTITION p6482 VALUES IN (25928,25929,25930,25931), +PARTITION p6483 VALUES IN (25932,25933,25934,25935), +PARTITION p6484 VALUES IN (25936,25937,25938,25939), +PARTITION p6485 VALUES IN (25940,25941,25942,25943), +PARTITION p6486 VALUES IN (25944,25945,25946,25947), +PARTITION p6487 VALUES IN (25948,25949,25950,25951), +PARTITION p6488 VALUES IN (25952,25953,25954,25955), +PARTITION p6489 VALUES IN (25956,25957,25958,25959), +PARTITION p6490 VALUES IN (25960,25961,25962,25963), +PARTITION p6491 VALUES IN (25964,25965,25966,25967), +PARTITION p6492 VALUES IN (25968,25969,25970,25971), +PARTITION p6493 VALUES IN (25972,25973,25974,25975), +PARTITION p6494 VALUES IN (25976,25977,25978,25979), +PARTITION p6495 VALUES IN (25980,25981,25982,25983), +PARTITION p6496 VALUES IN (25984,25985,25986,25987), +PARTITION p6497 VALUES IN (25988,25989,25990,25991), +PARTITION p6498 VALUES IN (25992,25993,25994,25995), +PARTITION p6499 VALUES IN (25996,25997,25998,25999), +PARTITION p6500 VALUES IN (26000,26001,26002,26003), +PARTITION p6501 VALUES IN (26004,26005,26006,26007), +PARTITION p6502 VALUES IN (26008,26009,26010,26011), +PARTITION p6503 VALUES IN (26012,26013,26014,26015), +PARTITION p6504 VALUES IN (26016,26017,26018,26019), +PARTITION p6505 VALUES IN (26020,26021,26022,26023), +PARTITION p6506 VALUES IN (26024,26025,26026,26027), +PARTITION p6507 VALUES IN (26028,26029,26030,26031), +PARTITION p6508 VALUES IN (26032,26033,26034,26035), +PARTITION p6509 VALUES IN (26036,26037,26038,26039), +PARTITION p6510 VALUES IN (26040,26041,26042,26043), +PARTITION p6511 VALUES IN (26044,26045,26046,26047), +PARTITION p6512 VALUES IN (26048,26049,26050,26051), +PARTITION p6513 VALUES IN (26052,26053,26054,26055), +PARTITION p6514 VALUES IN (26056,26057,26058,26059), +PARTITION p6515 VALUES IN (26060,26061,26062,26063), +PARTITION p6516 VALUES IN (26064,26065,26066,26067), +PARTITION p6517 VALUES IN (26068,26069,26070,26071), +PARTITION p6518 VALUES IN (26072,26073,26074,26075), +PARTITION p6519 VALUES IN (26076,26077,26078,26079), +PARTITION p6520 VALUES IN (26080,26081,26082,26083), +PARTITION p6521 VALUES IN (26084,26085,26086,26087), +PARTITION p6522 VALUES IN (26088,26089,26090,26091), +PARTITION p6523 VALUES IN (26092,26093,26094,26095), +PARTITION p6524 VALUES IN (26096,26097,26098,26099), +PARTITION p6525 VALUES IN (26100,26101,26102,26103), +PARTITION p6526 VALUES IN (26104,26105,26106,26107), +PARTITION p6527 VALUES IN (26108,26109,26110,26111), +PARTITION p6528 VALUES IN (26112,26113,26114,26115), +PARTITION p6529 VALUES IN (26116,26117,26118,26119), +PARTITION p6530 VALUES IN (26120,26121,26122,26123), +PARTITION p6531 VALUES IN (26124,26125,26126,26127), +PARTITION p6532 VALUES IN (26128,26129,26130,26131), +PARTITION p6533 VALUES IN (26132,26133,26134,26135), +PARTITION p6534 VALUES IN (26136,26137,26138,26139), +PARTITION p6535 VALUES IN (26140,26141,26142,26143), +PARTITION p6536 VALUES IN (26144,26145,26146,26147), +PARTITION p6537 VALUES IN (26148,26149,26150,26151), +PARTITION p6538 VALUES IN (26152,26153,26154,26155), +PARTITION p6539 VALUES IN (26156,26157,26158,26159), +PARTITION p6540 VALUES IN (26160,26161,26162,26163), +PARTITION p6541 VALUES IN (26164,26165,26166,26167), +PARTITION p6542 VALUES IN (26168,26169,26170,26171), +PARTITION p6543 VALUES IN (26172,26173,26174,26175), +PARTITION p6544 VALUES IN (26176,26177,26178,26179), +PARTITION p6545 VALUES IN (26180,26181,26182,26183), +PARTITION p6546 VALUES IN (26184,26185,26186,26187), +PARTITION p6547 VALUES IN (26188,26189,26190,26191), +PARTITION p6548 VALUES IN (26192,26193,26194,26195), +PARTITION p6549 VALUES IN (26196,26197,26198,26199), +PARTITION p6550 VALUES IN (26200,26201,26202,26203), +PARTITION p6551 VALUES IN (26204,26205,26206,26207), +PARTITION p6552 VALUES IN (26208,26209,26210,26211), +PARTITION p6553 VALUES IN (26212,26213,26214,26215), +PARTITION p6554 VALUES IN (26216,26217,26218,26219), +PARTITION p6555 VALUES IN (26220,26221,26222,26223), +PARTITION p6556 VALUES IN (26224,26225,26226,26227), +PARTITION p6557 VALUES IN (26228,26229,26230,26231), +PARTITION p6558 VALUES IN (26232,26233,26234,26235), +PARTITION p6559 VALUES IN (26236,26237,26238,26239), +PARTITION p6560 VALUES IN (26240,26241,26242,26243), +PARTITION p6561 VALUES IN (26244,26245,26246,26247), +PARTITION p6562 VALUES IN (26248,26249,26250,26251), +PARTITION p6563 VALUES IN (26252,26253,26254,26255), +PARTITION p6564 VALUES IN (26256,26257,26258,26259), +PARTITION p6565 VALUES IN (26260,26261,26262,26263), +PARTITION p6566 VALUES IN (26264,26265,26266,26267), +PARTITION p6567 VALUES IN (26268,26269,26270,26271), +PARTITION p6568 VALUES IN (26272,26273,26274,26275), +PARTITION p6569 VALUES IN (26276,26277,26278,26279), +PARTITION p6570 VALUES IN (26280,26281,26282,26283), +PARTITION p6571 VALUES IN (26284,26285,26286,26287), +PARTITION p6572 VALUES IN (26288,26289,26290,26291), +PARTITION p6573 VALUES IN (26292,26293,26294,26295), +PARTITION p6574 VALUES IN (26296,26297,26298,26299), +PARTITION p6575 VALUES IN (26300,26301,26302,26303), +PARTITION p6576 VALUES IN (26304,26305,26306,26307), +PARTITION p6577 VALUES IN (26308,26309,26310,26311), +PARTITION p6578 VALUES IN (26312,26313,26314,26315), +PARTITION p6579 VALUES IN (26316,26317,26318,26319), +PARTITION p6580 VALUES IN (26320,26321,26322,26323), +PARTITION p6581 VALUES IN (26324,26325,26326,26327), +PARTITION p6582 VALUES IN (26328,26329,26330,26331), +PARTITION p6583 VALUES IN (26332,26333,26334,26335), +PARTITION p6584 VALUES IN (26336,26337,26338,26339), +PARTITION p6585 VALUES IN (26340,26341,26342,26343), +PARTITION p6586 VALUES IN (26344,26345,26346,26347), +PARTITION p6587 VALUES IN (26348,26349,26350,26351), +PARTITION p6588 VALUES IN (26352,26353,26354,26355), +PARTITION p6589 VALUES IN (26356,26357,26358,26359), +PARTITION p6590 VALUES IN (26360,26361,26362,26363), +PARTITION p6591 VALUES IN (26364,26365,26366,26367), +PARTITION p6592 VALUES IN (26368,26369,26370,26371), +PARTITION p6593 VALUES IN (26372,26373,26374,26375), +PARTITION p6594 VALUES IN (26376,26377,26378,26379), +PARTITION p6595 VALUES IN (26380,26381,26382,26383), +PARTITION p6596 VALUES IN (26384,26385,26386,26387), +PARTITION p6597 VALUES IN (26388,26389,26390,26391), +PARTITION p6598 VALUES IN (26392,26393,26394,26395), +PARTITION p6599 VALUES IN (26396,26397,26398,26399), +PARTITION p6600 VALUES IN (26400,26401,26402,26403), +PARTITION p6601 VALUES IN (26404,26405,26406,26407), +PARTITION p6602 VALUES IN (26408,26409,26410,26411), +PARTITION p6603 VALUES IN (26412,26413,26414,26415), +PARTITION p6604 VALUES IN (26416,26417,26418,26419), +PARTITION p6605 VALUES IN (26420,26421,26422,26423), +PARTITION p6606 VALUES IN (26424,26425,26426,26427), +PARTITION p6607 VALUES IN (26428,26429,26430,26431), +PARTITION p6608 VALUES IN (26432,26433,26434,26435), +PARTITION p6609 VALUES IN (26436,26437,26438,26439), +PARTITION p6610 VALUES IN (26440,26441,26442,26443), +PARTITION p6611 VALUES IN (26444,26445,26446,26447), +PARTITION p6612 VALUES IN (26448,26449,26450,26451), +PARTITION p6613 VALUES IN (26452,26453,26454,26455), +PARTITION p6614 VALUES IN (26456,26457,26458,26459), +PARTITION p6615 VALUES IN (26460,26461,26462,26463), +PARTITION p6616 VALUES IN (26464,26465,26466,26467), +PARTITION p6617 VALUES IN (26468,26469,26470,26471), +PARTITION p6618 VALUES IN (26472,26473,26474,26475), +PARTITION p6619 VALUES IN (26476,26477,26478,26479), +PARTITION p6620 VALUES IN (26480,26481,26482,26483), +PARTITION p6621 VALUES IN (26484,26485,26486,26487), +PARTITION p6622 VALUES IN (26488,26489,26490,26491), +PARTITION p6623 VALUES IN (26492,26493,26494,26495), +PARTITION p6624 VALUES IN (26496,26497,26498,26499), +PARTITION p6625 VALUES IN (26500,26501,26502,26503), +PARTITION p6626 VALUES IN (26504,26505,26506,26507), +PARTITION p6627 VALUES IN (26508,26509,26510,26511), +PARTITION p6628 VALUES IN (26512,26513,26514,26515), +PARTITION p6629 VALUES IN (26516,26517,26518,26519), +PARTITION p6630 VALUES IN (26520,26521,26522,26523), +PARTITION p6631 VALUES IN (26524,26525,26526,26527), +PARTITION p6632 VALUES IN (26528,26529,26530,26531), +PARTITION p6633 VALUES IN (26532,26533,26534,26535), +PARTITION p6634 VALUES IN (26536,26537,26538,26539), +PARTITION p6635 VALUES IN (26540,26541,26542,26543), +PARTITION p6636 VALUES IN (26544,26545,26546,26547), +PARTITION p6637 VALUES IN (26548,26549,26550,26551), +PARTITION p6638 VALUES IN (26552,26553,26554,26555), +PARTITION p6639 VALUES IN (26556,26557,26558,26559), +PARTITION p6640 VALUES IN (26560,26561,26562,26563), +PARTITION p6641 VALUES IN (26564,26565,26566,26567), +PARTITION p6642 VALUES IN (26568,26569,26570,26571), +PARTITION p6643 VALUES IN (26572,26573,26574,26575), +PARTITION p6644 VALUES IN (26576,26577,26578,26579), +PARTITION p6645 VALUES IN (26580,26581,26582,26583), +PARTITION p6646 VALUES IN (26584,26585,26586,26587), +PARTITION p6647 VALUES IN (26588,26589,26590,26591), +PARTITION p6648 VALUES IN (26592,26593,26594,26595), +PARTITION p6649 VALUES IN (26596,26597,26598,26599), +PARTITION p6650 VALUES IN (26600,26601,26602,26603), +PARTITION p6651 VALUES IN (26604,26605,26606,26607), +PARTITION p6652 VALUES IN (26608,26609,26610,26611), +PARTITION p6653 VALUES IN (26612,26613,26614,26615), +PARTITION p6654 VALUES IN (26616,26617,26618,26619), +PARTITION p6655 VALUES IN (26620,26621,26622,26623), +PARTITION p6656 VALUES IN (26624,26625,26626,26627), +PARTITION p6657 VALUES IN (26628,26629,26630,26631), +PARTITION p6658 VALUES IN (26632,26633,26634,26635), +PARTITION p6659 VALUES IN (26636,26637,26638,26639), +PARTITION p6660 VALUES IN (26640,26641,26642,26643), +PARTITION p6661 VALUES IN (26644,26645,26646,26647), +PARTITION p6662 VALUES IN (26648,26649,26650,26651), +PARTITION p6663 VALUES IN (26652,26653,26654,26655), +PARTITION p6664 VALUES IN (26656,26657,26658,26659), +PARTITION p6665 VALUES IN (26660,26661,26662,26663), +PARTITION p6666 VALUES IN (26664,26665,26666,26667), +PARTITION p6667 VALUES IN (26668,26669,26670,26671), +PARTITION p6668 VALUES IN (26672,26673,26674,26675), +PARTITION p6669 VALUES IN (26676,26677,26678,26679), +PARTITION p6670 VALUES IN (26680,26681,26682,26683), +PARTITION p6671 VALUES IN (26684,26685,26686,26687), +PARTITION p6672 VALUES IN (26688,26689,26690,26691), +PARTITION p6673 VALUES IN (26692,26693,26694,26695), +PARTITION p6674 VALUES IN (26696,26697,26698,26699), +PARTITION p6675 VALUES IN (26700,26701,26702,26703), +PARTITION p6676 VALUES IN (26704,26705,26706,26707), +PARTITION p6677 VALUES IN (26708,26709,26710,26711), +PARTITION p6678 VALUES IN (26712,26713,26714,26715), +PARTITION p6679 VALUES IN (26716,26717,26718,26719), +PARTITION p6680 VALUES IN (26720,26721,26722,26723), +PARTITION p6681 VALUES IN (26724,26725,26726,26727), +PARTITION p6682 VALUES IN (26728,26729,26730,26731), +PARTITION p6683 VALUES IN (26732,26733,26734,26735), +PARTITION p6684 VALUES IN (26736,26737,26738,26739), +PARTITION p6685 VALUES IN (26740,26741,26742,26743), +PARTITION p6686 VALUES IN (26744,26745,26746,26747), +PARTITION p6687 VALUES IN (26748,26749,26750,26751), +PARTITION p6688 VALUES IN (26752,26753,26754,26755), +PARTITION p6689 VALUES IN (26756,26757,26758,26759), +PARTITION p6690 VALUES IN (26760,26761,26762,26763), +PARTITION p6691 VALUES IN (26764,26765,26766,26767), +PARTITION p6692 VALUES IN (26768,26769,26770,26771), +PARTITION p6693 VALUES IN (26772,26773,26774,26775), +PARTITION p6694 VALUES IN (26776,26777,26778,26779), +PARTITION p6695 VALUES IN (26780,26781,26782,26783), +PARTITION p6696 VALUES IN (26784,26785,26786,26787), +PARTITION p6697 VALUES IN (26788,26789,26790,26791), +PARTITION p6698 VALUES IN (26792,26793,26794,26795), +PARTITION p6699 VALUES IN (26796,26797,26798,26799), +PARTITION p6700 VALUES IN (26800,26801,26802,26803), +PARTITION p6701 VALUES IN (26804,26805,26806,26807), +PARTITION p6702 VALUES IN (26808,26809,26810,26811), +PARTITION p6703 VALUES IN (26812,26813,26814,26815), +PARTITION p6704 VALUES IN (26816,26817,26818,26819), +PARTITION p6705 VALUES IN (26820,26821,26822,26823), +PARTITION p6706 VALUES IN (26824,26825,26826,26827), +PARTITION p6707 VALUES IN (26828,26829,26830,26831), +PARTITION p6708 VALUES IN (26832,26833,26834,26835), +PARTITION p6709 VALUES IN (26836,26837,26838,26839), +PARTITION p6710 VALUES IN (26840,26841,26842,26843), +PARTITION p6711 VALUES IN (26844,26845,26846,26847), +PARTITION p6712 VALUES IN (26848,26849,26850,26851), +PARTITION p6713 VALUES IN (26852,26853,26854,26855), +PARTITION p6714 VALUES IN (26856,26857,26858,26859), +PARTITION p6715 VALUES IN (26860,26861,26862,26863), +PARTITION p6716 VALUES IN (26864,26865,26866,26867), +PARTITION p6717 VALUES IN (26868,26869,26870,26871), +PARTITION p6718 VALUES IN (26872,26873,26874,26875), +PARTITION p6719 VALUES IN (26876,26877,26878,26879), +PARTITION p6720 VALUES IN (26880,26881,26882,26883), +PARTITION p6721 VALUES IN (26884,26885,26886,26887), +PARTITION p6722 VALUES IN (26888,26889,26890,26891), +PARTITION p6723 VALUES IN (26892,26893,26894,26895), +PARTITION p6724 VALUES IN (26896,26897,26898,26899), +PARTITION p6725 VALUES IN (26900,26901,26902,26903), +PARTITION p6726 VALUES IN (26904,26905,26906,26907), +PARTITION p6727 VALUES IN (26908,26909,26910,26911), +PARTITION p6728 VALUES IN (26912,26913,26914,26915), +PARTITION p6729 VALUES IN (26916,26917,26918,26919), +PARTITION p6730 VALUES IN (26920,26921,26922,26923), +PARTITION p6731 VALUES IN (26924,26925,26926,26927), +PARTITION p6732 VALUES IN (26928,26929,26930,26931), +PARTITION p6733 VALUES IN (26932,26933,26934,26935), +PARTITION p6734 VALUES IN (26936,26937,26938,26939), +PARTITION p6735 VALUES IN (26940,26941,26942,26943), +PARTITION p6736 VALUES IN (26944,26945,26946,26947), +PARTITION p6737 VALUES IN (26948,26949,26950,26951), +PARTITION p6738 VALUES IN (26952,26953,26954,26955), +PARTITION p6739 VALUES IN (26956,26957,26958,26959), +PARTITION p6740 VALUES IN (26960,26961,26962,26963), +PARTITION p6741 VALUES IN (26964,26965,26966,26967), +PARTITION p6742 VALUES IN (26968,26969,26970,26971), +PARTITION p6743 VALUES IN (26972,26973,26974,26975), +PARTITION p6744 VALUES IN (26976,26977,26978,26979), +PARTITION p6745 VALUES IN (26980,26981,26982,26983), +PARTITION p6746 VALUES IN (26984,26985,26986,26987), +PARTITION p6747 VALUES IN (26988,26989,26990,26991), +PARTITION p6748 VALUES IN (26992,26993,26994,26995), +PARTITION p6749 VALUES IN (26996,26997,26998,26999), +PARTITION p6750 VALUES IN (27000,27001,27002,27003), +PARTITION p6751 VALUES IN (27004,27005,27006,27007), +PARTITION p6752 VALUES IN (27008,27009,27010,27011), +PARTITION p6753 VALUES IN (27012,27013,27014,27015), +PARTITION p6754 VALUES IN (27016,27017,27018,27019), +PARTITION p6755 VALUES IN (27020,27021,27022,27023), +PARTITION p6756 VALUES IN (27024,27025,27026,27027), +PARTITION p6757 VALUES IN (27028,27029,27030,27031), +PARTITION p6758 VALUES IN (27032,27033,27034,27035), +PARTITION p6759 VALUES IN (27036,27037,27038,27039), +PARTITION p6760 VALUES IN (27040,27041,27042,27043), +PARTITION p6761 VALUES IN (27044,27045,27046,27047), +PARTITION p6762 VALUES IN (27048,27049,27050,27051), +PARTITION p6763 VALUES IN (27052,27053,27054,27055), +PARTITION p6764 VALUES IN (27056,27057,27058,27059), +PARTITION p6765 VALUES IN (27060,27061,27062,27063), +PARTITION p6766 VALUES IN (27064,27065,27066,27067), +PARTITION p6767 VALUES IN (27068,27069,27070,27071), +PARTITION p6768 VALUES IN (27072,27073,27074,27075), +PARTITION p6769 VALUES IN (27076,27077,27078,27079), +PARTITION p6770 VALUES IN (27080,27081,27082,27083), +PARTITION p6771 VALUES IN (27084,27085,27086,27087), +PARTITION p6772 VALUES IN (27088,27089,27090,27091), +PARTITION p6773 VALUES IN (27092,27093,27094,27095), +PARTITION p6774 VALUES IN (27096,27097,27098,27099), +PARTITION p6775 VALUES IN (27100,27101,27102,27103), +PARTITION p6776 VALUES IN (27104,27105,27106,27107), +PARTITION p6777 VALUES IN (27108,27109,27110,27111), +PARTITION p6778 VALUES IN (27112,27113,27114,27115), +PARTITION p6779 VALUES IN (27116,27117,27118,27119), +PARTITION p6780 VALUES IN (27120,27121,27122,27123), +PARTITION p6781 VALUES IN (27124,27125,27126,27127), +PARTITION p6782 VALUES IN (27128,27129,27130,27131), +PARTITION p6783 VALUES IN (27132,27133,27134,27135), +PARTITION p6784 VALUES IN (27136,27137,27138,27139), +PARTITION p6785 VALUES IN (27140,27141,27142,27143), +PARTITION p6786 VALUES IN (27144,27145,27146,27147), +PARTITION p6787 VALUES IN (27148,27149,27150,27151), +PARTITION p6788 VALUES IN (27152,27153,27154,27155), +PARTITION p6789 VALUES IN (27156,27157,27158,27159), +PARTITION p6790 VALUES IN (27160,27161,27162,27163), +PARTITION p6791 VALUES IN (27164,27165,27166,27167), +PARTITION p6792 VALUES IN (27168,27169,27170,27171), +PARTITION p6793 VALUES IN (27172,27173,27174,27175), +PARTITION p6794 VALUES IN (27176,27177,27178,27179), +PARTITION p6795 VALUES IN (27180,27181,27182,27183), +PARTITION p6796 VALUES IN (27184,27185,27186,27187), +PARTITION p6797 VALUES IN (27188,27189,27190,27191), +PARTITION p6798 VALUES IN (27192,27193,27194,27195), +PARTITION p6799 VALUES IN (27196,27197,27198,27199), +PARTITION p6800 VALUES IN (27200,27201,27202,27203), +PARTITION p6801 VALUES IN (27204,27205,27206,27207), +PARTITION p6802 VALUES IN (27208,27209,27210,27211), +PARTITION p6803 VALUES IN (27212,27213,27214,27215), +PARTITION p6804 VALUES IN (27216,27217,27218,27219), +PARTITION p6805 VALUES IN (27220,27221,27222,27223), +PARTITION p6806 VALUES IN (27224,27225,27226,27227), +PARTITION p6807 VALUES IN (27228,27229,27230,27231), +PARTITION p6808 VALUES IN (27232,27233,27234,27235), +PARTITION p6809 VALUES IN (27236,27237,27238,27239), +PARTITION p6810 VALUES IN (27240,27241,27242,27243), +PARTITION p6811 VALUES IN (27244,27245,27246,27247), +PARTITION p6812 VALUES IN (27248,27249,27250,27251), +PARTITION p6813 VALUES IN (27252,27253,27254,27255), +PARTITION p6814 VALUES IN (27256,27257,27258,27259), +PARTITION p6815 VALUES IN (27260,27261,27262,27263), +PARTITION p6816 VALUES IN (27264,27265,27266,27267), +PARTITION p6817 VALUES IN (27268,27269,27270,27271), +PARTITION p6818 VALUES IN (27272,27273,27274,27275), +PARTITION p6819 VALUES IN (27276,27277,27278,27279), +PARTITION p6820 VALUES IN (27280,27281,27282,27283), +PARTITION p6821 VALUES IN (27284,27285,27286,27287), +PARTITION p6822 VALUES IN (27288,27289,27290,27291), +PARTITION p6823 VALUES IN (27292,27293,27294,27295), +PARTITION p6824 VALUES IN (27296,27297,27298,27299), +PARTITION p6825 VALUES IN (27300,27301,27302,27303), +PARTITION p6826 VALUES IN (27304,27305,27306,27307), +PARTITION p6827 VALUES IN (27308,27309,27310,27311), +PARTITION p6828 VALUES IN (27312,27313,27314,27315), +PARTITION p6829 VALUES IN (27316,27317,27318,27319), +PARTITION p6830 VALUES IN (27320,27321,27322,27323), +PARTITION p6831 VALUES IN (27324,27325,27326,27327), +PARTITION p6832 VALUES IN (27328,27329,27330,27331), +PARTITION p6833 VALUES IN (27332,27333,27334,27335), +PARTITION p6834 VALUES IN (27336,27337,27338,27339), +PARTITION p6835 VALUES IN (27340,27341,27342,27343), +PARTITION p6836 VALUES IN (27344,27345,27346,27347), +PARTITION p6837 VALUES IN (27348,27349,27350,27351), +PARTITION p6838 VALUES IN (27352,27353,27354,27355), +PARTITION p6839 VALUES IN (27356,27357,27358,27359), +PARTITION p6840 VALUES IN (27360,27361,27362,27363), +PARTITION p6841 VALUES IN (27364,27365,27366,27367), +PARTITION p6842 VALUES IN (27368,27369,27370,27371), +PARTITION p6843 VALUES IN (27372,27373,27374,27375), +PARTITION p6844 VALUES IN (27376,27377,27378,27379), +PARTITION p6845 VALUES IN (27380,27381,27382,27383), +PARTITION p6846 VALUES IN (27384,27385,27386,27387), +PARTITION p6847 VALUES IN (27388,27389,27390,27391), +PARTITION p6848 VALUES IN (27392,27393,27394,27395), +PARTITION p6849 VALUES IN (27396,27397,27398,27399), +PARTITION p6850 VALUES IN (27400,27401,27402,27403), +PARTITION p6851 VALUES IN (27404,27405,27406,27407), +PARTITION p6852 VALUES IN (27408,27409,27410,27411), +PARTITION p6853 VALUES IN (27412,27413,27414,27415), +PARTITION p6854 VALUES IN (27416,27417,27418,27419), +PARTITION p6855 VALUES IN (27420,27421,27422,27423), +PARTITION p6856 VALUES IN (27424,27425,27426,27427), +PARTITION p6857 VALUES IN (27428,27429,27430,27431), +PARTITION p6858 VALUES IN (27432,27433,27434,27435), +PARTITION p6859 VALUES IN (27436,27437,27438,27439), +PARTITION p6860 VALUES IN (27440,27441,27442,27443), +PARTITION p6861 VALUES IN (27444,27445,27446,27447), +PARTITION p6862 VALUES IN (27448,27449,27450,27451), +PARTITION p6863 VALUES IN (27452,27453,27454,27455), +PARTITION p6864 VALUES IN (27456,27457,27458,27459), +PARTITION p6865 VALUES IN (27460,27461,27462,27463), +PARTITION p6866 VALUES IN (27464,27465,27466,27467), +PARTITION p6867 VALUES IN (27468,27469,27470,27471), +PARTITION p6868 VALUES IN (27472,27473,27474,27475), +PARTITION p6869 VALUES IN (27476,27477,27478,27479), +PARTITION p6870 VALUES IN (27480,27481,27482,27483), +PARTITION p6871 VALUES IN (27484,27485,27486,27487), +PARTITION p6872 VALUES IN (27488,27489,27490,27491), +PARTITION p6873 VALUES IN (27492,27493,27494,27495), +PARTITION p6874 VALUES IN (27496,27497,27498,27499), +PARTITION p6875 VALUES IN (27500,27501,27502,27503), +PARTITION p6876 VALUES IN (27504,27505,27506,27507), +PARTITION p6877 VALUES IN (27508,27509,27510,27511), +PARTITION p6878 VALUES IN (27512,27513,27514,27515), +PARTITION p6879 VALUES IN (27516,27517,27518,27519), +PARTITION p6880 VALUES IN (27520,27521,27522,27523), +PARTITION p6881 VALUES IN (27524,27525,27526,27527), +PARTITION p6882 VALUES IN (27528,27529,27530,27531), +PARTITION p6883 VALUES IN (27532,27533,27534,27535), +PARTITION p6884 VALUES IN (27536,27537,27538,27539), +PARTITION p6885 VALUES IN (27540,27541,27542,27543), +PARTITION p6886 VALUES IN (27544,27545,27546,27547), +PARTITION p6887 VALUES IN (27548,27549,27550,27551), +PARTITION p6888 VALUES IN (27552,27553,27554,27555), +PARTITION p6889 VALUES IN (27556,27557,27558,27559), +PARTITION p6890 VALUES IN (27560,27561,27562,27563), +PARTITION p6891 VALUES IN (27564,27565,27566,27567), +PARTITION p6892 VALUES IN (27568,27569,27570,27571), +PARTITION p6893 VALUES IN (27572,27573,27574,27575), +PARTITION p6894 VALUES IN (27576,27577,27578,27579), +PARTITION p6895 VALUES IN (27580,27581,27582,27583), +PARTITION p6896 VALUES IN (27584,27585,27586,27587), +PARTITION p6897 VALUES IN (27588,27589,27590,27591), +PARTITION p6898 VALUES IN (27592,27593,27594,27595), +PARTITION p6899 VALUES IN (27596,27597,27598,27599), +PARTITION p6900 VALUES IN (27600,27601,27602,27603), +PARTITION p6901 VALUES IN (27604,27605,27606,27607), +PARTITION p6902 VALUES IN (27608,27609,27610,27611), +PARTITION p6903 VALUES IN (27612,27613,27614,27615), +PARTITION p6904 VALUES IN (27616,27617,27618,27619), +PARTITION p6905 VALUES IN (27620,27621,27622,27623), +PARTITION p6906 VALUES IN (27624,27625,27626,27627), +PARTITION p6907 VALUES IN (27628,27629,27630,27631), +PARTITION p6908 VALUES IN (27632,27633,27634,27635), +PARTITION p6909 VALUES IN (27636,27637,27638,27639), +PARTITION p6910 VALUES IN (27640,27641,27642,27643), +PARTITION p6911 VALUES IN (27644,27645,27646,27647), +PARTITION p6912 VALUES IN (27648,27649,27650,27651), +PARTITION p6913 VALUES IN (27652,27653,27654,27655), +PARTITION p6914 VALUES IN (27656,27657,27658,27659), +PARTITION p6915 VALUES IN (27660,27661,27662,27663), +PARTITION p6916 VALUES IN (27664,27665,27666,27667), +PARTITION p6917 VALUES IN (27668,27669,27670,27671), +PARTITION p6918 VALUES IN (27672,27673,27674,27675), +PARTITION p6919 VALUES IN (27676,27677,27678,27679), +PARTITION p6920 VALUES IN (27680,27681,27682,27683), +PARTITION p6921 VALUES IN (27684,27685,27686,27687), +PARTITION p6922 VALUES IN (27688,27689,27690,27691), +PARTITION p6923 VALUES IN (27692,27693,27694,27695), +PARTITION p6924 VALUES IN (27696,27697,27698,27699), +PARTITION p6925 VALUES IN (27700,27701,27702,27703), +PARTITION p6926 VALUES IN (27704,27705,27706,27707), +PARTITION p6927 VALUES IN (27708,27709,27710,27711), +PARTITION p6928 VALUES IN (27712,27713,27714,27715), +PARTITION p6929 VALUES IN (27716,27717,27718,27719), +PARTITION p6930 VALUES IN (27720,27721,27722,27723), +PARTITION p6931 VALUES IN (27724,27725,27726,27727), +PARTITION p6932 VALUES IN (27728,27729,27730,27731), +PARTITION p6933 VALUES IN (27732,27733,27734,27735), +PARTITION p6934 VALUES IN (27736,27737,27738,27739), +PARTITION p6935 VALUES IN (27740,27741,27742,27743), +PARTITION p6936 VALUES IN (27744,27745,27746,27747), +PARTITION p6937 VALUES IN (27748,27749,27750,27751), +PARTITION p6938 VALUES IN (27752,27753,27754,27755), +PARTITION p6939 VALUES IN (27756,27757,27758,27759), +PARTITION p6940 VALUES IN (27760,27761,27762,27763), +PARTITION p6941 VALUES IN (27764,27765,27766,27767), +PARTITION p6942 VALUES IN (27768,27769,27770,27771), +PARTITION p6943 VALUES IN (27772,27773,27774,27775), +PARTITION p6944 VALUES IN (27776,27777,27778,27779), +PARTITION p6945 VALUES IN (27780,27781,27782,27783), +PARTITION p6946 VALUES IN (27784,27785,27786,27787), +PARTITION p6947 VALUES IN (27788,27789,27790,27791), +PARTITION p6948 VALUES IN (27792,27793,27794,27795), +PARTITION p6949 VALUES IN (27796,27797,27798,27799), +PARTITION p6950 VALUES IN (27800,27801,27802,27803), +PARTITION p6951 VALUES IN (27804,27805,27806,27807), +PARTITION p6952 VALUES IN (27808,27809,27810,27811), +PARTITION p6953 VALUES IN (27812,27813,27814,27815), +PARTITION p6954 VALUES IN (27816,27817,27818,27819), +PARTITION p6955 VALUES IN (27820,27821,27822,27823), +PARTITION p6956 VALUES IN (27824,27825,27826,27827), +PARTITION p6957 VALUES IN (27828,27829,27830,27831), +PARTITION p6958 VALUES IN (27832,27833,27834,27835), +PARTITION p6959 VALUES IN (27836,27837,27838,27839), +PARTITION p6960 VALUES IN (27840,27841,27842,27843), +PARTITION p6961 VALUES IN (27844,27845,27846,27847), +PARTITION p6962 VALUES IN (27848,27849,27850,27851), +PARTITION p6963 VALUES IN (27852,27853,27854,27855), +PARTITION p6964 VALUES IN (27856,27857,27858,27859), +PARTITION p6965 VALUES IN (27860,27861,27862,27863), +PARTITION p6966 VALUES IN (27864,27865,27866,27867), +PARTITION p6967 VALUES IN (27868,27869,27870,27871), +PARTITION p6968 VALUES IN (27872,27873,27874,27875), +PARTITION p6969 VALUES IN (27876,27877,27878,27879), +PARTITION p6970 VALUES IN (27880,27881,27882,27883), +PARTITION p6971 VALUES IN (27884,27885,27886,27887), +PARTITION p6972 VALUES IN (27888,27889,27890,27891), +PARTITION p6973 VALUES IN (27892,27893,27894,27895), +PARTITION p6974 VALUES IN (27896,27897,27898,27899), +PARTITION p6975 VALUES IN (27900,27901,27902,27903), +PARTITION p6976 VALUES IN (27904,27905,27906,27907), +PARTITION p6977 VALUES IN (27908,27909,27910,27911), +PARTITION p6978 VALUES IN (27912,27913,27914,27915), +PARTITION p6979 VALUES IN (27916,27917,27918,27919), +PARTITION p6980 VALUES IN (27920,27921,27922,27923), +PARTITION p6981 VALUES IN (27924,27925,27926,27927), +PARTITION p6982 VALUES IN (27928,27929,27930,27931), +PARTITION p6983 VALUES IN (27932,27933,27934,27935), +PARTITION p6984 VALUES IN (27936,27937,27938,27939), +PARTITION p6985 VALUES IN (27940,27941,27942,27943), +PARTITION p6986 VALUES IN (27944,27945,27946,27947), +PARTITION p6987 VALUES IN (27948,27949,27950,27951), +PARTITION p6988 VALUES IN (27952,27953,27954,27955), +PARTITION p6989 VALUES IN (27956,27957,27958,27959), +PARTITION p6990 VALUES IN (27960,27961,27962,27963), +PARTITION p6991 VALUES IN (27964,27965,27966,27967), +PARTITION p6992 VALUES IN (27968,27969,27970,27971), +PARTITION p6993 VALUES IN (27972,27973,27974,27975), +PARTITION p6994 VALUES IN (27976,27977,27978,27979), +PARTITION p6995 VALUES IN (27980,27981,27982,27983), +PARTITION p6996 VALUES IN (27984,27985,27986,27987), +PARTITION p6997 VALUES IN (27988,27989,27990,27991), +PARTITION p6998 VALUES IN (27992,27993,27994,27995), +PARTITION p6999 VALUES IN (27996,27997,27998,27999), +PARTITION p7000 VALUES IN (28000,28001,28002,28003), +PARTITION p7001 VALUES IN (28004,28005,28006,28007), +PARTITION p7002 VALUES IN (28008,28009,28010,28011), +PARTITION p7003 VALUES IN (28012,28013,28014,28015), +PARTITION p7004 VALUES IN (28016,28017,28018,28019), +PARTITION p7005 VALUES IN (28020,28021,28022,28023), +PARTITION p7006 VALUES IN (28024,28025,28026,28027), +PARTITION p7007 VALUES IN (28028,28029,28030,28031), +PARTITION p7008 VALUES IN (28032,28033,28034,28035), +PARTITION p7009 VALUES IN (28036,28037,28038,28039), +PARTITION p7010 VALUES IN (28040,28041,28042,28043), +PARTITION p7011 VALUES IN (28044,28045,28046,28047), +PARTITION p7012 VALUES IN (28048,28049,28050,28051), +PARTITION p7013 VALUES IN (28052,28053,28054,28055), +PARTITION p7014 VALUES IN (28056,28057,28058,28059), +PARTITION p7015 VALUES IN (28060,28061,28062,28063), +PARTITION p7016 VALUES IN (28064,28065,28066,28067), +PARTITION p7017 VALUES IN (28068,28069,28070,28071), +PARTITION p7018 VALUES IN (28072,28073,28074,28075), +PARTITION p7019 VALUES IN (28076,28077,28078,28079), +PARTITION p7020 VALUES IN (28080,28081,28082,28083), +PARTITION p7021 VALUES IN (28084,28085,28086,28087), +PARTITION p7022 VALUES IN (28088,28089,28090,28091), +PARTITION p7023 VALUES IN (28092,28093,28094,28095), +PARTITION p7024 VALUES IN (28096,28097,28098,28099), +PARTITION p7025 VALUES IN (28100,28101,28102,28103), +PARTITION p7026 VALUES IN (28104,28105,28106,28107), +PARTITION p7027 VALUES IN (28108,28109,28110,28111), +PARTITION p7028 VALUES IN (28112,28113,28114,28115), +PARTITION p7029 VALUES IN (28116,28117,28118,28119), +PARTITION p7030 VALUES IN (28120,28121,28122,28123), +PARTITION p7031 VALUES IN (28124,28125,28126,28127), +PARTITION p7032 VALUES IN (28128,28129,28130,28131), +PARTITION p7033 VALUES IN (28132,28133,28134,28135), +PARTITION p7034 VALUES IN (28136,28137,28138,28139), +PARTITION p7035 VALUES IN (28140,28141,28142,28143), +PARTITION p7036 VALUES IN (28144,28145,28146,28147), +PARTITION p7037 VALUES IN (28148,28149,28150,28151), +PARTITION p7038 VALUES IN (28152,28153,28154,28155), +PARTITION p7039 VALUES IN (28156,28157,28158,28159), +PARTITION p7040 VALUES IN (28160,28161,28162,28163), +PARTITION p7041 VALUES IN (28164,28165,28166,28167), +PARTITION p7042 VALUES IN (28168,28169,28170,28171), +PARTITION p7043 VALUES IN (28172,28173,28174,28175), +PARTITION p7044 VALUES IN (28176,28177,28178,28179), +PARTITION p7045 VALUES IN (28180,28181,28182,28183), +PARTITION p7046 VALUES IN (28184,28185,28186,28187), +PARTITION p7047 VALUES IN (28188,28189,28190,28191), +PARTITION p7048 VALUES IN (28192,28193,28194,28195), +PARTITION p7049 VALUES IN (28196,28197,28198,28199), +PARTITION p7050 VALUES IN (28200,28201,28202,28203), +PARTITION p7051 VALUES IN (28204,28205,28206,28207), +PARTITION p7052 VALUES IN (28208,28209,28210,28211), +PARTITION p7053 VALUES IN (28212,28213,28214,28215), +PARTITION p7054 VALUES IN (28216,28217,28218,28219), +PARTITION p7055 VALUES IN (28220,28221,28222,28223), +PARTITION p7056 VALUES IN (28224,28225,28226,28227), +PARTITION p7057 VALUES IN (28228,28229,28230,28231), +PARTITION p7058 VALUES IN (28232,28233,28234,28235), +PARTITION p7059 VALUES IN (28236,28237,28238,28239), +PARTITION p7060 VALUES IN (28240,28241,28242,28243), +PARTITION p7061 VALUES IN (28244,28245,28246,28247), +PARTITION p7062 VALUES IN (28248,28249,28250,28251), +PARTITION p7063 VALUES IN (28252,28253,28254,28255), +PARTITION p7064 VALUES IN (28256,28257,28258,28259), +PARTITION p7065 VALUES IN (28260,28261,28262,28263), +PARTITION p7066 VALUES IN (28264,28265,28266,28267), +PARTITION p7067 VALUES IN (28268,28269,28270,28271), +PARTITION p7068 VALUES IN (28272,28273,28274,28275), +PARTITION p7069 VALUES IN (28276,28277,28278,28279), +PARTITION p7070 VALUES IN (28280,28281,28282,28283), +PARTITION p7071 VALUES IN (28284,28285,28286,28287), +PARTITION p7072 VALUES IN (28288,28289,28290,28291), +PARTITION p7073 VALUES IN (28292,28293,28294,28295), +PARTITION p7074 VALUES IN (28296,28297,28298,28299), +PARTITION p7075 VALUES IN (28300,28301,28302,28303), +PARTITION p7076 VALUES IN (28304,28305,28306,28307), +PARTITION p7077 VALUES IN (28308,28309,28310,28311), +PARTITION p7078 VALUES IN (28312,28313,28314,28315), +PARTITION p7079 VALUES IN (28316,28317,28318,28319), +PARTITION p7080 VALUES IN (28320,28321,28322,28323), +PARTITION p7081 VALUES IN (28324,28325,28326,28327), +PARTITION p7082 VALUES IN (28328,28329,28330,28331), +PARTITION p7083 VALUES IN (28332,28333,28334,28335), +PARTITION p7084 VALUES IN (28336,28337,28338,28339), +PARTITION p7085 VALUES IN (28340,28341,28342,28343), +PARTITION p7086 VALUES IN (28344,28345,28346,28347), +PARTITION p7087 VALUES IN (28348,28349,28350,28351), +PARTITION p7088 VALUES IN (28352,28353,28354,28355), +PARTITION p7089 VALUES IN (28356,28357,28358,28359), +PARTITION p7090 VALUES IN (28360,28361,28362,28363), +PARTITION p7091 VALUES IN (28364,28365,28366,28367), +PARTITION p7092 VALUES IN (28368,28369,28370,28371), +PARTITION p7093 VALUES IN (28372,28373,28374,28375), +PARTITION p7094 VALUES IN (28376,28377,28378,28379), +PARTITION p7095 VALUES IN (28380,28381,28382,28383), +PARTITION p7096 VALUES IN (28384,28385,28386,28387), +PARTITION p7097 VALUES IN (28388,28389,28390,28391), +PARTITION p7098 VALUES IN (28392,28393,28394,28395), +PARTITION p7099 VALUES IN (28396,28397,28398,28399), +PARTITION p7100 VALUES IN (28400,28401,28402,28403), +PARTITION p7101 VALUES IN (28404,28405,28406,28407), +PARTITION p7102 VALUES IN (28408,28409,28410,28411), +PARTITION p7103 VALUES IN (28412,28413,28414,28415), +PARTITION p7104 VALUES IN (28416,28417,28418,28419), +PARTITION p7105 VALUES IN (28420,28421,28422,28423), +PARTITION p7106 VALUES IN (28424,28425,28426,28427), +PARTITION p7107 VALUES IN (28428,28429,28430,28431), +PARTITION p7108 VALUES IN (28432,28433,28434,28435), +PARTITION p7109 VALUES IN (28436,28437,28438,28439), +PARTITION p7110 VALUES IN (28440,28441,28442,28443), +PARTITION p7111 VALUES IN (28444,28445,28446,28447), +PARTITION p7112 VALUES IN (28448,28449,28450,28451), +PARTITION p7113 VALUES IN (28452,28453,28454,28455), +PARTITION p7114 VALUES IN (28456,28457,28458,28459), +PARTITION p7115 VALUES IN (28460,28461,28462,28463), +PARTITION p7116 VALUES IN (28464,28465,28466,28467), +PARTITION p7117 VALUES IN (28468,28469,28470,28471), +PARTITION p7118 VALUES IN (28472,28473,28474,28475), +PARTITION p7119 VALUES IN (28476,28477,28478,28479), +PARTITION p7120 VALUES IN (28480,28481,28482,28483), +PARTITION p7121 VALUES IN (28484,28485,28486,28487), +PARTITION p7122 VALUES IN (28488,28489,28490,28491), +PARTITION p7123 VALUES IN (28492,28493,28494,28495), +PARTITION p7124 VALUES IN (28496,28497,28498,28499), +PARTITION p7125 VALUES IN (28500,28501,28502,28503), +PARTITION p7126 VALUES IN (28504,28505,28506,28507), +PARTITION p7127 VALUES IN (28508,28509,28510,28511), +PARTITION p7128 VALUES IN (28512,28513,28514,28515), +PARTITION p7129 VALUES IN (28516,28517,28518,28519), +PARTITION p7130 VALUES IN (28520,28521,28522,28523), +PARTITION p7131 VALUES IN (28524,28525,28526,28527), +PARTITION p7132 VALUES IN (28528,28529,28530,28531), +PARTITION p7133 VALUES IN (28532,28533,28534,28535), +PARTITION p7134 VALUES IN (28536,28537,28538,28539), +PARTITION p7135 VALUES IN (28540,28541,28542,28543), +PARTITION p7136 VALUES IN (28544,28545,28546,28547), +PARTITION p7137 VALUES IN (28548,28549,28550,28551), +PARTITION p7138 VALUES IN (28552,28553,28554,28555), +PARTITION p7139 VALUES IN (28556,28557,28558,28559), +PARTITION p7140 VALUES IN (28560,28561,28562,28563), +PARTITION p7141 VALUES IN (28564,28565,28566,28567), +PARTITION p7142 VALUES IN (28568,28569,28570,28571), +PARTITION p7143 VALUES IN (28572,28573,28574,28575), +PARTITION p7144 VALUES IN (28576,28577,28578,28579), +PARTITION p7145 VALUES IN (28580,28581,28582,28583), +PARTITION p7146 VALUES IN (28584,28585,28586,28587), +PARTITION p7147 VALUES IN (28588,28589,28590,28591), +PARTITION p7148 VALUES IN (28592,28593,28594,28595), +PARTITION p7149 VALUES IN (28596,28597,28598,28599), +PARTITION p7150 VALUES IN (28600,28601,28602,28603), +PARTITION p7151 VALUES IN (28604,28605,28606,28607), +PARTITION p7152 VALUES IN (28608,28609,28610,28611), +PARTITION p7153 VALUES IN (28612,28613,28614,28615), +PARTITION p7154 VALUES IN (28616,28617,28618,28619), +PARTITION p7155 VALUES IN (28620,28621,28622,28623), +PARTITION p7156 VALUES IN (28624,28625,28626,28627), +PARTITION p7157 VALUES IN (28628,28629,28630,28631), +PARTITION p7158 VALUES IN (28632,28633,28634,28635), +PARTITION p7159 VALUES IN (28636,28637,28638,28639), +PARTITION p7160 VALUES IN (28640,28641,28642,28643), +PARTITION p7161 VALUES IN (28644,28645,28646,28647), +PARTITION p7162 VALUES IN (28648,28649,28650,28651), +PARTITION p7163 VALUES IN (28652,28653,28654,28655), +PARTITION p7164 VALUES IN (28656,28657,28658,28659), +PARTITION p7165 VALUES IN (28660,28661,28662,28663), +PARTITION p7166 VALUES IN (28664,28665,28666,28667), +PARTITION p7167 VALUES IN (28668,28669,28670,28671), +PARTITION p7168 VALUES IN (28672,28673,28674,28675), +PARTITION p7169 VALUES IN (28676,28677,28678,28679), +PARTITION p7170 VALUES IN (28680,28681,28682,28683), +PARTITION p7171 VALUES IN (28684,28685,28686,28687), +PARTITION p7172 VALUES IN (28688,28689,28690,28691), +PARTITION p7173 VALUES IN (28692,28693,28694,28695), +PARTITION p7174 VALUES IN (28696,28697,28698,28699), +PARTITION p7175 VALUES IN (28700,28701,28702,28703), +PARTITION p7176 VALUES IN (28704,28705,28706,28707), +PARTITION p7177 VALUES IN (28708,28709,28710,28711), +PARTITION p7178 VALUES IN (28712,28713,28714,28715), +PARTITION p7179 VALUES IN (28716,28717,28718,28719), +PARTITION p7180 VALUES IN (28720,28721,28722,28723), +PARTITION p7181 VALUES IN (28724,28725,28726,28727), +PARTITION p7182 VALUES IN (28728,28729,28730,28731), +PARTITION p7183 VALUES IN (28732,28733,28734,28735), +PARTITION p7184 VALUES IN (28736,28737,28738,28739), +PARTITION p7185 VALUES IN (28740,28741,28742,28743), +PARTITION p7186 VALUES IN (28744,28745,28746,28747), +PARTITION p7187 VALUES IN (28748,28749,28750,28751), +PARTITION p7188 VALUES IN (28752,28753,28754,28755), +PARTITION p7189 VALUES IN (28756,28757,28758,28759), +PARTITION p7190 VALUES IN (28760,28761,28762,28763), +PARTITION p7191 VALUES IN (28764,28765,28766,28767), +PARTITION p7192 VALUES IN (28768,28769,28770,28771), +PARTITION p7193 VALUES IN (28772,28773,28774,28775), +PARTITION p7194 VALUES IN (28776,28777,28778,28779), +PARTITION p7195 VALUES IN (28780,28781,28782,28783), +PARTITION p7196 VALUES IN (28784,28785,28786,28787), +PARTITION p7197 VALUES IN (28788,28789,28790,28791), +PARTITION p7198 VALUES IN (28792,28793,28794,28795), +PARTITION p7199 VALUES IN (28796,28797,28798,28799), +PARTITION p7200 VALUES IN (28800,28801,28802,28803), +PARTITION p7201 VALUES IN (28804,28805,28806,28807), +PARTITION p7202 VALUES IN (28808,28809,28810,28811), +PARTITION p7203 VALUES IN (28812,28813,28814,28815), +PARTITION p7204 VALUES IN (28816,28817,28818,28819), +PARTITION p7205 VALUES IN (28820,28821,28822,28823), +PARTITION p7206 VALUES IN (28824,28825,28826,28827), +PARTITION p7207 VALUES IN (28828,28829,28830,28831), +PARTITION p7208 VALUES IN (28832,28833,28834,28835), +PARTITION p7209 VALUES IN (28836,28837,28838,28839), +PARTITION p7210 VALUES IN (28840,28841,28842,28843), +PARTITION p7211 VALUES IN (28844,28845,28846,28847), +PARTITION p7212 VALUES IN (28848,28849,28850,28851), +PARTITION p7213 VALUES IN (28852,28853,28854,28855), +PARTITION p7214 VALUES IN (28856,28857,28858,28859), +PARTITION p7215 VALUES IN (28860,28861,28862,28863), +PARTITION p7216 VALUES IN (28864,28865,28866,28867), +PARTITION p7217 VALUES IN (28868,28869,28870,28871), +PARTITION p7218 VALUES IN (28872,28873,28874,28875), +PARTITION p7219 VALUES IN (28876,28877,28878,28879), +PARTITION p7220 VALUES IN (28880,28881,28882,28883), +PARTITION p7221 VALUES IN (28884,28885,28886,28887), +PARTITION p7222 VALUES IN (28888,28889,28890,28891), +PARTITION p7223 VALUES IN (28892,28893,28894,28895), +PARTITION p7224 VALUES IN (28896,28897,28898,28899), +PARTITION p7225 VALUES IN (28900,28901,28902,28903), +PARTITION p7226 VALUES IN (28904,28905,28906,28907), +PARTITION p7227 VALUES IN (28908,28909,28910,28911), +PARTITION p7228 VALUES IN (28912,28913,28914,28915), +PARTITION p7229 VALUES IN (28916,28917,28918,28919), +PARTITION p7230 VALUES IN (28920,28921,28922,28923), +PARTITION p7231 VALUES IN (28924,28925,28926,28927), +PARTITION p7232 VALUES IN (28928,28929,28930,28931), +PARTITION p7233 VALUES IN (28932,28933,28934,28935), +PARTITION p7234 VALUES IN (28936,28937,28938,28939), +PARTITION p7235 VALUES IN (28940,28941,28942,28943), +PARTITION p7236 VALUES IN (28944,28945,28946,28947), +PARTITION p7237 VALUES IN (28948,28949,28950,28951), +PARTITION p7238 VALUES IN (28952,28953,28954,28955), +PARTITION p7239 VALUES IN (28956,28957,28958,28959), +PARTITION p7240 VALUES IN (28960,28961,28962,28963), +PARTITION p7241 VALUES IN (28964,28965,28966,28967), +PARTITION p7242 VALUES IN (28968,28969,28970,28971), +PARTITION p7243 VALUES IN (28972,28973,28974,28975), +PARTITION p7244 VALUES IN (28976,28977,28978,28979), +PARTITION p7245 VALUES IN (28980,28981,28982,28983), +PARTITION p7246 VALUES IN (28984,28985,28986,28987), +PARTITION p7247 VALUES IN (28988,28989,28990,28991), +PARTITION p7248 VALUES IN (28992,28993,28994,28995), +PARTITION p7249 VALUES IN (28996,28997,28998,28999), +PARTITION p7250 VALUES IN (29000,29001,29002,29003), +PARTITION p7251 VALUES IN (29004,29005,29006,29007), +PARTITION p7252 VALUES IN (29008,29009,29010,29011), +PARTITION p7253 VALUES IN (29012,29013,29014,29015), +PARTITION p7254 VALUES IN (29016,29017,29018,29019), +PARTITION p7255 VALUES IN (29020,29021,29022,29023), +PARTITION p7256 VALUES IN (29024,29025,29026,29027), +PARTITION p7257 VALUES IN (29028,29029,29030,29031), +PARTITION p7258 VALUES IN (29032,29033,29034,29035), +PARTITION p7259 VALUES IN (29036,29037,29038,29039), +PARTITION p7260 VALUES IN (29040,29041,29042,29043), +PARTITION p7261 VALUES IN (29044,29045,29046,29047), +PARTITION p7262 VALUES IN (29048,29049,29050,29051), +PARTITION p7263 VALUES IN (29052,29053,29054,29055), +PARTITION p7264 VALUES IN (29056,29057,29058,29059), +PARTITION p7265 VALUES IN (29060,29061,29062,29063), +PARTITION p7266 VALUES IN (29064,29065,29066,29067), +PARTITION p7267 VALUES IN (29068,29069,29070,29071), +PARTITION p7268 VALUES IN (29072,29073,29074,29075), +PARTITION p7269 VALUES IN (29076,29077,29078,29079), +PARTITION p7270 VALUES IN (29080,29081,29082,29083), +PARTITION p7271 VALUES IN (29084,29085,29086,29087), +PARTITION p7272 VALUES IN (29088,29089,29090,29091), +PARTITION p7273 VALUES IN (29092,29093,29094,29095), +PARTITION p7274 VALUES IN (29096,29097,29098,29099), +PARTITION p7275 VALUES IN (29100,29101,29102,29103), +PARTITION p7276 VALUES IN (29104,29105,29106,29107), +PARTITION p7277 VALUES IN (29108,29109,29110,29111), +PARTITION p7278 VALUES IN (29112,29113,29114,29115), +PARTITION p7279 VALUES IN (29116,29117,29118,29119), +PARTITION p7280 VALUES IN (29120,29121,29122,29123), +PARTITION p7281 VALUES IN (29124,29125,29126,29127), +PARTITION p7282 VALUES IN (29128,29129,29130,29131), +PARTITION p7283 VALUES IN (29132,29133,29134,29135), +PARTITION p7284 VALUES IN (29136,29137,29138,29139), +PARTITION p7285 VALUES IN (29140,29141,29142,29143), +PARTITION p7286 VALUES IN (29144,29145,29146,29147), +PARTITION p7287 VALUES IN (29148,29149,29150,29151), +PARTITION p7288 VALUES IN (29152,29153,29154,29155), +PARTITION p7289 VALUES IN (29156,29157,29158,29159), +PARTITION p7290 VALUES IN (29160,29161,29162,29163), +PARTITION p7291 VALUES IN (29164,29165,29166,29167), +PARTITION p7292 VALUES IN (29168,29169,29170,29171), +PARTITION p7293 VALUES IN (29172,29173,29174,29175), +PARTITION p7294 VALUES IN (29176,29177,29178,29179), +PARTITION p7295 VALUES IN (29180,29181,29182,29183), +PARTITION p7296 VALUES IN (29184,29185,29186,29187), +PARTITION p7297 VALUES IN (29188,29189,29190,29191), +PARTITION p7298 VALUES IN (29192,29193,29194,29195), +PARTITION p7299 VALUES IN (29196,29197,29198,29199), +PARTITION p7300 VALUES IN (29200,29201,29202,29203), +PARTITION p7301 VALUES IN (29204,29205,29206,29207), +PARTITION p7302 VALUES IN (29208,29209,29210,29211), +PARTITION p7303 VALUES IN (29212,29213,29214,29215), +PARTITION p7304 VALUES IN (29216,29217,29218,29219), +PARTITION p7305 VALUES IN (29220,29221,29222,29223), +PARTITION p7306 VALUES IN (29224,29225,29226,29227), +PARTITION p7307 VALUES IN (29228,29229,29230,29231), +PARTITION p7308 VALUES IN (29232,29233,29234,29235), +PARTITION p7309 VALUES IN (29236,29237,29238,29239), +PARTITION p7310 VALUES IN (29240,29241,29242,29243), +PARTITION p7311 VALUES IN (29244,29245,29246,29247), +PARTITION p7312 VALUES IN (29248,29249,29250,29251), +PARTITION p7313 VALUES IN (29252,29253,29254,29255), +PARTITION p7314 VALUES IN (29256,29257,29258,29259), +PARTITION p7315 VALUES IN (29260,29261,29262,29263), +PARTITION p7316 VALUES IN (29264,29265,29266,29267), +PARTITION p7317 VALUES IN (29268,29269,29270,29271), +PARTITION p7318 VALUES IN (29272,29273,29274,29275), +PARTITION p7319 VALUES IN (29276,29277,29278,29279), +PARTITION p7320 VALUES IN (29280,29281,29282,29283), +PARTITION p7321 VALUES IN (29284,29285,29286,29287), +PARTITION p7322 VALUES IN (29288,29289,29290,29291), +PARTITION p7323 VALUES IN (29292,29293,29294,29295), +PARTITION p7324 VALUES IN (29296,29297,29298,29299), +PARTITION p7325 VALUES IN (29300,29301,29302,29303), +PARTITION p7326 VALUES IN (29304,29305,29306,29307), +PARTITION p7327 VALUES IN (29308,29309,29310,29311), +PARTITION p7328 VALUES IN (29312,29313,29314,29315), +PARTITION p7329 VALUES IN (29316,29317,29318,29319), +PARTITION p7330 VALUES IN (29320,29321,29322,29323), +PARTITION p7331 VALUES IN (29324,29325,29326,29327), +PARTITION p7332 VALUES IN (29328,29329,29330,29331), +PARTITION p7333 VALUES IN (29332,29333,29334,29335), +PARTITION p7334 VALUES IN (29336,29337,29338,29339), +PARTITION p7335 VALUES IN (29340,29341,29342,29343), +PARTITION p7336 VALUES IN (29344,29345,29346,29347), +PARTITION p7337 VALUES IN (29348,29349,29350,29351), +PARTITION p7338 VALUES IN (29352,29353,29354,29355), +PARTITION p7339 VALUES IN (29356,29357,29358,29359), +PARTITION p7340 VALUES IN (29360,29361,29362,29363), +PARTITION p7341 VALUES IN (29364,29365,29366,29367), +PARTITION p7342 VALUES IN (29368,29369,29370,29371), +PARTITION p7343 VALUES IN (29372,29373,29374,29375), +PARTITION p7344 VALUES IN (29376,29377,29378,29379), +PARTITION p7345 VALUES IN (29380,29381,29382,29383), +PARTITION p7346 VALUES IN (29384,29385,29386,29387), +PARTITION p7347 VALUES IN (29388,29389,29390,29391), +PARTITION p7348 VALUES IN (29392,29393,29394,29395), +PARTITION p7349 VALUES IN (29396,29397,29398,29399), +PARTITION p7350 VALUES IN (29400,29401,29402,29403), +PARTITION p7351 VALUES IN (29404,29405,29406,29407), +PARTITION p7352 VALUES IN (29408,29409,29410,29411), +PARTITION p7353 VALUES IN (29412,29413,29414,29415), +PARTITION p7354 VALUES IN (29416,29417,29418,29419), +PARTITION p7355 VALUES IN (29420,29421,29422,29423), +PARTITION p7356 VALUES IN (29424,29425,29426,29427), +PARTITION p7357 VALUES IN (29428,29429,29430,29431), +PARTITION p7358 VALUES IN (29432,29433,29434,29435), +PARTITION p7359 VALUES IN (29436,29437,29438,29439), +PARTITION p7360 VALUES IN (29440,29441,29442,29443), +PARTITION p7361 VALUES IN (29444,29445,29446,29447), +PARTITION p7362 VALUES IN (29448,29449,29450,29451), +PARTITION p7363 VALUES IN (29452,29453,29454,29455), +PARTITION p7364 VALUES IN (29456,29457,29458,29459), +PARTITION p7365 VALUES IN (29460,29461,29462,29463), +PARTITION p7366 VALUES IN (29464,29465,29466,29467), +PARTITION p7367 VALUES IN (29468,29469,29470,29471), +PARTITION p7368 VALUES IN (29472,29473,29474,29475), +PARTITION p7369 VALUES IN (29476,29477,29478,29479), +PARTITION p7370 VALUES IN (29480,29481,29482,29483), +PARTITION p7371 VALUES IN (29484,29485,29486,29487), +PARTITION p7372 VALUES IN (29488,29489,29490,29491), +PARTITION p7373 VALUES IN (29492,29493,29494,29495), +PARTITION p7374 VALUES IN (29496,29497,29498,29499), +PARTITION p7375 VALUES IN (29500,29501,29502,29503), +PARTITION p7376 VALUES IN (29504,29505,29506,29507), +PARTITION p7377 VALUES IN (29508,29509,29510,29511), +PARTITION p7378 VALUES IN (29512,29513,29514,29515), +PARTITION p7379 VALUES IN (29516,29517,29518,29519), +PARTITION p7380 VALUES IN (29520,29521,29522,29523), +PARTITION p7381 VALUES IN (29524,29525,29526,29527), +PARTITION p7382 VALUES IN (29528,29529,29530,29531), +PARTITION p7383 VALUES IN (29532,29533,29534,29535), +PARTITION p7384 VALUES IN (29536,29537,29538,29539), +PARTITION p7385 VALUES IN (29540,29541,29542,29543), +PARTITION p7386 VALUES IN (29544,29545,29546,29547), +PARTITION p7387 VALUES IN (29548,29549,29550,29551), +PARTITION p7388 VALUES IN (29552,29553,29554,29555), +PARTITION p7389 VALUES IN (29556,29557,29558,29559), +PARTITION p7390 VALUES IN (29560,29561,29562,29563), +PARTITION p7391 VALUES IN (29564,29565,29566,29567), +PARTITION p7392 VALUES IN (29568,29569,29570,29571), +PARTITION p7393 VALUES IN (29572,29573,29574,29575), +PARTITION p7394 VALUES IN (29576,29577,29578,29579), +PARTITION p7395 VALUES IN (29580,29581,29582,29583), +PARTITION p7396 VALUES IN (29584,29585,29586,29587), +PARTITION p7397 VALUES IN (29588,29589,29590,29591), +PARTITION p7398 VALUES IN (29592,29593,29594,29595), +PARTITION p7399 VALUES IN (29596,29597,29598,29599), +PARTITION p7400 VALUES IN (29600,29601,29602,29603), +PARTITION p7401 VALUES IN (29604,29605,29606,29607), +PARTITION p7402 VALUES IN (29608,29609,29610,29611), +PARTITION p7403 VALUES IN (29612,29613,29614,29615), +PARTITION p7404 VALUES IN (29616,29617,29618,29619), +PARTITION p7405 VALUES IN (29620,29621,29622,29623), +PARTITION p7406 VALUES IN (29624,29625,29626,29627), +PARTITION p7407 VALUES IN (29628,29629,29630,29631), +PARTITION p7408 VALUES IN (29632,29633,29634,29635), +PARTITION p7409 VALUES IN (29636,29637,29638,29639), +PARTITION p7410 VALUES IN (29640,29641,29642,29643), +PARTITION p7411 VALUES IN (29644,29645,29646,29647), +PARTITION p7412 VALUES IN (29648,29649,29650,29651), +PARTITION p7413 VALUES IN (29652,29653,29654,29655), +PARTITION p7414 VALUES IN (29656,29657,29658,29659), +PARTITION p7415 VALUES IN (29660,29661,29662,29663), +PARTITION p7416 VALUES IN (29664,29665,29666,29667), +PARTITION p7417 VALUES IN (29668,29669,29670,29671), +PARTITION p7418 VALUES IN (29672,29673,29674,29675), +PARTITION p7419 VALUES IN (29676,29677,29678,29679), +PARTITION p7420 VALUES IN (29680,29681,29682,29683), +PARTITION p7421 VALUES IN (29684,29685,29686,29687), +PARTITION p7422 VALUES IN (29688,29689,29690,29691), +PARTITION p7423 VALUES IN (29692,29693,29694,29695), +PARTITION p7424 VALUES IN (29696,29697,29698,29699), +PARTITION p7425 VALUES IN (29700,29701,29702,29703), +PARTITION p7426 VALUES IN (29704,29705,29706,29707), +PARTITION p7427 VALUES IN (29708,29709,29710,29711), +PARTITION p7428 VALUES IN (29712,29713,29714,29715), +PARTITION p7429 VALUES IN (29716,29717,29718,29719), +PARTITION p7430 VALUES IN (29720,29721,29722,29723), +PARTITION p7431 VALUES IN (29724,29725,29726,29727), +PARTITION p7432 VALUES IN (29728,29729,29730,29731), +PARTITION p7433 VALUES IN (29732,29733,29734,29735), +PARTITION p7434 VALUES IN (29736,29737,29738,29739), +PARTITION p7435 VALUES IN (29740,29741,29742,29743), +PARTITION p7436 VALUES IN (29744,29745,29746,29747), +PARTITION p7437 VALUES IN (29748,29749,29750,29751), +PARTITION p7438 VALUES IN (29752,29753,29754,29755), +PARTITION p7439 VALUES IN (29756,29757,29758,29759), +PARTITION p7440 VALUES IN (29760,29761,29762,29763), +PARTITION p7441 VALUES IN (29764,29765,29766,29767), +PARTITION p7442 VALUES IN (29768,29769,29770,29771), +PARTITION p7443 VALUES IN (29772,29773,29774,29775), +PARTITION p7444 VALUES IN (29776,29777,29778,29779), +PARTITION p7445 VALUES IN (29780,29781,29782,29783), +PARTITION p7446 VALUES IN (29784,29785,29786,29787), +PARTITION p7447 VALUES IN (29788,29789,29790,29791), +PARTITION p7448 VALUES IN (29792,29793,29794,29795), +PARTITION p7449 VALUES IN (29796,29797,29798,29799), +PARTITION p7450 VALUES IN (29800,29801,29802,29803), +PARTITION p7451 VALUES IN (29804,29805,29806,29807), +PARTITION p7452 VALUES IN (29808,29809,29810,29811), +PARTITION p7453 VALUES IN (29812,29813,29814,29815), +PARTITION p7454 VALUES IN (29816,29817,29818,29819), +PARTITION p7455 VALUES IN (29820,29821,29822,29823), +PARTITION p7456 VALUES IN (29824,29825,29826,29827), +PARTITION p7457 VALUES IN (29828,29829,29830,29831), +PARTITION p7458 VALUES IN (29832,29833,29834,29835), +PARTITION p7459 VALUES IN (29836,29837,29838,29839), +PARTITION p7460 VALUES IN (29840,29841,29842,29843), +PARTITION p7461 VALUES IN (29844,29845,29846,29847), +PARTITION p7462 VALUES IN (29848,29849,29850,29851), +PARTITION p7463 VALUES IN (29852,29853,29854,29855), +PARTITION p7464 VALUES IN (29856,29857,29858,29859), +PARTITION p7465 VALUES IN (29860,29861,29862,29863), +PARTITION p7466 VALUES IN (29864,29865,29866,29867), +PARTITION p7467 VALUES IN (29868,29869,29870,29871), +PARTITION p7468 VALUES IN (29872,29873,29874,29875), +PARTITION p7469 VALUES IN (29876,29877,29878,29879), +PARTITION p7470 VALUES IN (29880,29881,29882,29883), +PARTITION p7471 VALUES IN (29884,29885,29886,29887), +PARTITION p7472 VALUES IN (29888,29889,29890,29891), +PARTITION p7473 VALUES IN (29892,29893,29894,29895), +PARTITION p7474 VALUES IN (29896,29897,29898,29899), +PARTITION p7475 VALUES IN (29900,29901,29902,29903), +PARTITION p7476 VALUES IN (29904,29905,29906,29907), +PARTITION p7477 VALUES IN (29908,29909,29910,29911), +PARTITION p7478 VALUES IN (29912,29913,29914,29915), +PARTITION p7479 VALUES IN (29916,29917,29918,29919), +PARTITION p7480 VALUES IN (29920,29921,29922,29923), +PARTITION p7481 VALUES IN (29924,29925,29926,29927), +PARTITION p7482 VALUES IN (29928,29929,29930,29931), +PARTITION p7483 VALUES IN (29932,29933,29934,29935), +PARTITION p7484 VALUES IN (29936,29937,29938,29939), +PARTITION p7485 VALUES IN (29940,29941,29942,29943), +PARTITION p7486 VALUES IN (29944,29945,29946,29947), +PARTITION p7487 VALUES IN (29948,29949,29950,29951), +PARTITION p7488 VALUES IN (29952,29953,29954,29955), +PARTITION p7489 VALUES IN (29956,29957,29958,29959), +PARTITION p7490 VALUES IN (29960,29961,29962,29963), +PARTITION p7491 VALUES IN (29964,29965,29966,29967), +PARTITION p7492 VALUES IN (29968,29969,29970,29971), +PARTITION p7493 VALUES IN (29972,29973,29974,29975), +PARTITION p7494 VALUES IN (29976,29977,29978,29979), +PARTITION p7495 VALUES IN (29980,29981,29982,29983), +PARTITION p7496 VALUES IN (29984,29985,29986,29987), +PARTITION p7497 VALUES IN (29988,29989,29990,29991), +PARTITION p7498 VALUES IN (29992,29993,29994,29995), +PARTITION p7499 VALUES IN (29996,29997,29998,29999), +PARTITION p7500 VALUES IN (30000,30001,30002,30003), +PARTITION p7501 VALUES IN (30004,30005,30006,30007), +PARTITION p7502 VALUES IN (30008,30009,30010,30011), +PARTITION p7503 VALUES IN (30012,30013,30014,30015), +PARTITION p7504 VALUES IN (30016,30017,30018,30019), +PARTITION p7505 VALUES IN (30020,30021,30022,30023), +PARTITION p7506 VALUES IN (30024,30025,30026,30027), +PARTITION p7507 VALUES IN (30028,30029,30030,30031), +PARTITION p7508 VALUES IN (30032,30033,30034,30035), +PARTITION p7509 VALUES IN (30036,30037,30038,30039), +PARTITION p7510 VALUES IN (30040,30041,30042,30043), +PARTITION p7511 VALUES IN (30044,30045,30046,30047), +PARTITION p7512 VALUES IN (30048,30049,30050,30051), +PARTITION p7513 VALUES IN (30052,30053,30054,30055), +PARTITION p7514 VALUES IN (30056,30057,30058,30059), +PARTITION p7515 VALUES IN (30060,30061,30062,30063), +PARTITION p7516 VALUES IN (30064,30065,30066,30067), +PARTITION p7517 VALUES IN (30068,30069,30070,30071), +PARTITION p7518 VALUES IN (30072,30073,30074,30075), +PARTITION p7519 VALUES IN (30076,30077,30078,30079), +PARTITION p7520 VALUES IN (30080,30081,30082,30083), +PARTITION p7521 VALUES IN (30084,30085,30086,30087), +PARTITION p7522 VALUES IN (30088,30089,30090,30091), +PARTITION p7523 VALUES IN (30092,30093,30094,30095), +PARTITION p7524 VALUES IN (30096,30097,30098,30099), +PARTITION p7525 VALUES IN (30100,30101,30102,30103), +PARTITION p7526 VALUES IN (30104,30105,30106,30107), +PARTITION p7527 VALUES IN (30108,30109,30110,30111), +PARTITION p7528 VALUES IN (30112,30113,30114,30115), +PARTITION p7529 VALUES IN (30116,30117,30118,30119), +PARTITION p7530 VALUES IN (30120,30121,30122,30123), +PARTITION p7531 VALUES IN (30124,30125,30126,30127), +PARTITION p7532 VALUES IN (30128,30129,30130,30131), +PARTITION p7533 VALUES IN (30132,30133,30134,30135), +PARTITION p7534 VALUES IN (30136,30137,30138,30139), +PARTITION p7535 VALUES IN (30140,30141,30142,30143), +PARTITION p7536 VALUES IN (30144,30145,30146,30147), +PARTITION p7537 VALUES IN (30148,30149,30150,30151), +PARTITION p7538 VALUES IN (30152,30153,30154,30155), +PARTITION p7539 VALUES IN (30156,30157,30158,30159), +PARTITION p7540 VALUES IN (30160,30161,30162,30163), +PARTITION p7541 VALUES IN (30164,30165,30166,30167), +PARTITION p7542 VALUES IN (30168,30169,30170,30171), +PARTITION p7543 VALUES IN (30172,30173,30174,30175), +PARTITION p7544 VALUES IN (30176,30177,30178,30179), +PARTITION p7545 VALUES IN (30180,30181,30182,30183), +PARTITION p7546 VALUES IN (30184,30185,30186,30187), +PARTITION p7547 VALUES IN (30188,30189,30190,30191), +PARTITION p7548 VALUES IN (30192,30193,30194,30195), +PARTITION p7549 VALUES IN (30196,30197,30198,30199), +PARTITION p7550 VALUES IN (30200,30201,30202,30203), +PARTITION p7551 VALUES IN (30204,30205,30206,30207), +PARTITION p7552 VALUES IN (30208,30209,30210,30211), +PARTITION p7553 VALUES IN (30212,30213,30214,30215), +PARTITION p7554 VALUES IN (30216,30217,30218,30219), +PARTITION p7555 VALUES IN (30220,30221,30222,30223), +PARTITION p7556 VALUES IN (30224,30225,30226,30227), +PARTITION p7557 VALUES IN (30228,30229,30230,30231), +PARTITION p7558 VALUES IN (30232,30233,30234,30235), +PARTITION p7559 VALUES IN (30236,30237,30238,30239), +PARTITION p7560 VALUES IN (30240,30241,30242,30243), +PARTITION p7561 VALUES IN (30244,30245,30246,30247), +PARTITION p7562 VALUES IN (30248,30249,30250,30251), +PARTITION p7563 VALUES IN (30252,30253,30254,30255), +PARTITION p7564 VALUES IN (30256,30257,30258,30259), +PARTITION p7565 VALUES IN (30260,30261,30262,30263), +PARTITION p7566 VALUES IN (30264,30265,30266,30267), +PARTITION p7567 VALUES IN (30268,30269,30270,30271), +PARTITION p7568 VALUES IN (30272,30273,30274,30275), +PARTITION p7569 VALUES IN (30276,30277,30278,30279), +PARTITION p7570 VALUES IN (30280,30281,30282,30283), +PARTITION p7571 VALUES IN (30284,30285,30286,30287), +PARTITION p7572 VALUES IN (30288,30289,30290,30291), +PARTITION p7573 VALUES IN (30292,30293,30294,30295), +PARTITION p7574 VALUES IN (30296,30297,30298,30299), +PARTITION p7575 VALUES IN (30300,30301,30302,30303), +PARTITION p7576 VALUES IN (30304,30305,30306,30307), +PARTITION p7577 VALUES IN (30308,30309,30310,30311), +PARTITION p7578 VALUES IN (30312,30313,30314,30315), +PARTITION p7579 VALUES IN (30316,30317,30318,30319), +PARTITION p7580 VALUES IN (30320,30321,30322,30323), +PARTITION p7581 VALUES IN (30324,30325,30326,30327), +PARTITION p7582 VALUES IN (30328,30329,30330,30331), +PARTITION p7583 VALUES IN (30332,30333,30334,30335), +PARTITION p7584 VALUES IN (30336,30337,30338,30339), +PARTITION p7585 VALUES IN (30340,30341,30342,30343), +PARTITION p7586 VALUES IN (30344,30345,30346,30347), +PARTITION p7587 VALUES IN (30348,30349,30350,30351), +PARTITION p7588 VALUES IN (30352,30353,30354,30355), +PARTITION p7589 VALUES IN (30356,30357,30358,30359), +PARTITION p7590 VALUES IN (30360,30361,30362,30363), +PARTITION p7591 VALUES IN (30364,30365,30366,30367), +PARTITION p7592 VALUES IN (30368,30369,30370,30371), +PARTITION p7593 VALUES IN (30372,30373,30374,30375), +PARTITION p7594 VALUES IN (30376,30377,30378,30379), +PARTITION p7595 VALUES IN (30380,30381,30382,30383), +PARTITION p7596 VALUES IN (30384,30385,30386,30387), +PARTITION p7597 VALUES IN (30388,30389,30390,30391), +PARTITION p7598 VALUES IN (30392,30393,30394,30395), +PARTITION p7599 VALUES IN (30396,30397,30398,30399), +PARTITION p7600 VALUES IN (30400,30401,30402,30403), +PARTITION p7601 VALUES IN (30404,30405,30406,30407), +PARTITION p7602 VALUES IN (30408,30409,30410,30411), +PARTITION p7603 VALUES IN (30412,30413,30414,30415), +PARTITION p7604 VALUES IN (30416,30417,30418,30419), +PARTITION p7605 VALUES IN (30420,30421,30422,30423), +PARTITION p7606 VALUES IN (30424,30425,30426,30427), +PARTITION p7607 VALUES IN (30428,30429,30430,30431), +PARTITION p7608 VALUES IN (30432,30433,30434,30435), +PARTITION p7609 VALUES IN (30436,30437,30438,30439), +PARTITION p7610 VALUES IN (30440,30441,30442,30443), +PARTITION p7611 VALUES IN (30444,30445,30446,30447), +PARTITION p7612 VALUES IN (30448,30449,30450,30451), +PARTITION p7613 VALUES IN (30452,30453,30454,30455), +PARTITION p7614 VALUES IN (30456,30457,30458,30459), +PARTITION p7615 VALUES IN (30460,30461,30462,30463), +PARTITION p7616 VALUES IN (30464,30465,30466,30467), +PARTITION p7617 VALUES IN (30468,30469,30470,30471), +PARTITION p7618 VALUES IN (30472,30473,30474,30475), +PARTITION p7619 VALUES IN (30476,30477,30478,30479), +PARTITION p7620 VALUES IN (30480,30481,30482,30483), +PARTITION p7621 VALUES IN (30484,30485,30486,30487), +PARTITION p7622 VALUES IN (30488,30489,30490,30491), +PARTITION p7623 VALUES IN (30492,30493,30494,30495), +PARTITION p7624 VALUES IN (30496,30497,30498,30499), +PARTITION p7625 VALUES IN (30500,30501,30502,30503), +PARTITION p7626 VALUES IN (30504,30505,30506,30507), +PARTITION p7627 VALUES IN (30508,30509,30510,30511), +PARTITION p7628 VALUES IN (30512,30513,30514,30515), +PARTITION p7629 VALUES IN (30516,30517,30518,30519), +PARTITION p7630 VALUES IN (30520,30521,30522,30523), +PARTITION p7631 VALUES IN (30524,30525,30526,30527), +PARTITION p7632 VALUES IN (30528,30529,30530,30531), +PARTITION p7633 VALUES IN (30532,30533,30534,30535), +PARTITION p7634 VALUES IN (30536,30537,30538,30539), +PARTITION p7635 VALUES IN (30540,30541,30542,30543), +PARTITION p7636 VALUES IN (30544,30545,30546,30547), +PARTITION p7637 VALUES IN (30548,30549,30550,30551), +PARTITION p7638 VALUES IN (30552,30553,30554,30555), +PARTITION p7639 VALUES IN (30556,30557,30558,30559), +PARTITION p7640 VALUES IN (30560,30561,30562,30563), +PARTITION p7641 VALUES IN (30564,30565,30566,30567), +PARTITION p7642 VALUES IN (30568,30569,30570,30571), +PARTITION p7643 VALUES IN (30572,30573,30574,30575), +PARTITION p7644 VALUES IN (30576,30577,30578,30579), +PARTITION p7645 VALUES IN (30580,30581,30582,30583), +PARTITION p7646 VALUES IN (30584,30585,30586,30587), +PARTITION p7647 VALUES IN (30588,30589,30590,30591), +PARTITION p7648 VALUES IN (30592,30593,30594,30595), +PARTITION p7649 VALUES IN (30596,30597,30598,30599), +PARTITION p7650 VALUES IN (30600,30601,30602,30603), +PARTITION p7651 VALUES IN (30604,30605,30606,30607), +PARTITION p7652 VALUES IN (30608,30609,30610,30611), +PARTITION p7653 VALUES IN (30612,30613,30614,30615), +PARTITION p7654 VALUES IN (30616,30617,30618,30619), +PARTITION p7655 VALUES IN (30620,30621,30622,30623), +PARTITION p7656 VALUES IN (30624,30625,30626,30627), +PARTITION p7657 VALUES IN (30628,30629,30630,30631), +PARTITION p7658 VALUES IN (30632,30633,30634,30635), +PARTITION p7659 VALUES IN (30636,30637,30638,30639), +PARTITION p7660 VALUES IN (30640,30641,30642,30643), +PARTITION p7661 VALUES IN (30644,30645,30646,30647), +PARTITION p7662 VALUES IN (30648,30649,30650,30651), +PARTITION p7663 VALUES IN (30652,30653,30654,30655), +PARTITION p7664 VALUES IN (30656,30657,30658,30659), +PARTITION p7665 VALUES IN (30660,30661,30662,30663), +PARTITION p7666 VALUES IN (30664,30665,30666,30667), +PARTITION p7667 VALUES IN (30668,30669,30670,30671), +PARTITION p7668 VALUES IN (30672,30673,30674,30675), +PARTITION p7669 VALUES IN (30676,30677,30678,30679), +PARTITION p7670 VALUES IN (30680,30681,30682,30683), +PARTITION p7671 VALUES IN (30684,30685,30686,30687), +PARTITION p7672 VALUES IN (30688,30689,30690,30691), +PARTITION p7673 VALUES IN (30692,30693,30694,30695), +PARTITION p7674 VALUES IN (30696,30697,30698,30699), +PARTITION p7675 VALUES IN (30700,30701,30702,30703), +PARTITION p7676 VALUES IN (30704,30705,30706,30707), +PARTITION p7677 VALUES IN (30708,30709,30710,30711), +PARTITION p7678 VALUES IN (30712,30713,30714,30715), +PARTITION p7679 VALUES IN (30716,30717,30718,30719), +PARTITION p7680 VALUES IN (30720,30721,30722,30723), +PARTITION p7681 VALUES IN (30724,30725,30726,30727), +PARTITION p7682 VALUES IN (30728,30729,30730,30731), +PARTITION p7683 VALUES IN (30732,30733,30734,30735), +PARTITION p7684 VALUES IN (30736,30737,30738,30739), +PARTITION p7685 VALUES IN (30740,30741,30742,30743), +PARTITION p7686 VALUES IN (30744,30745,30746,30747), +PARTITION p7687 VALUES IN (30748,30749,30750,30751), +PARTITION p7688 VALUES IN (30752,30753,30754,30755), +PARTITION p7689 VALUES IN (30756,30757,30758,30759), +PARTITION p7690 VALUES IN (30760,30761,30762,30763), +PARTITION p7691 VALUES IN (30764,30765,30766,30767), +PARTITION p7692 VALUES IN (30768,30769,30770,30771), +PARTITION p7693 VALUES IN (30772,30773,30774,30775), +PARTITION p7694 VALUES IN (30776,30777,30778,30779), +PARTITION p7695 VALUES IN (30780,30781,30782,30783), +PARTITION p7696 VALUES IN (30784,30785,30786,30787), +PARTITION p7697 VALUES IN (30788,30789,30790,30791), +PARTITION p7698 VALUES IN (30792,30793,30794,30795), +PARTITION p7699 VALUES IN (30796,30797,30798,30799), +PARTITION p7700 VALUES IN (30800,30801,30802,30803), +PARTITION p7701 VALUES IN (30804,30805,30806,30807), +PARTITION p7702 VALUES IN (30808,30809,30810,30811), +PARTITION p7703 VALUES IN (30812,30813,30814,30815), +PARTITION p7704 VALUES IN (30816,30817,30818,30819), +PARTITION p7705 VALUES IN (30820,30821,30822,30823), +PARTITION p7706 VALUES IN (30824,30825,30826,30827), +PARTITION p7707 VALUES IN (30828,30829,30830,30831), +PARTITION p7708 VALUES IN (30832,30833,30834,30835), +PARTITION p7709 VALUES IN (30836,30837,30838,30839), +PARTITION p7710 VALUES IN (30840,30841,30842,30843), +PARTITION p7711 VALUES IN (30844,30845,30846,30847), +PARTITION p7712 VALUES IN (30848,30849,30850,30851), +PARTITION p7713 VALUES IN (30852,30853,30854,30855), +PARTITION p7714 VALUES IN (30856,30857,30858,30859), +PARTITION p7715 VALUES IN (30860,30861,30862,30863), +PARTITION p7716 VALUES IN (30864,30865,30866,30867), +PARTITION p7717 VALUES IN (30868,30869,30870,30871), +PARTITION p7718 VALUES IN (30872,30873,30874,30875), +PARTITION p7719 VALUES IN (30876,30877,30878,30879), +PARTITION p7720 VALUES IN (30880,30881,30882,30883), +PARTITION p7721 VALUES IN (30884,30885,30886,30887), +PARTITION p7722 VALUES IN (30888,30889,30890,30891), +PARTITION p7723 VALUES IN (30892,30893,30894,30895), +PARTITION p7724 VALUES IN (30896,30897,30898,30899), +PARTITION p7725 VALUES IN (30900,30901,30902,30903), +PARTITION p7726 VALUES IN (30904,30905,30906,30907), +PARTITION p7727 VALUES IN (30908,30909,30910,30911), +PARTITION p7728 VALUES IN (30912,30913,30914,30915), +PARTITION p7729 VALUES IN (30916,30917,30918,30919), +PARTITION p7730 VALUES IN (30920,30921,30922,30923), +PARTITION p7731 VALUES IN (30924,30925,30926,30927), +PARTITION p7732 VALUES IN (30928,30929,30930,30931), +PARTITION p7733 VALUES IN (30932,30933,30934,30935), +PARTITION p7734 VALUES IN (30936,30937,30938,30939), +PARTITION p7735 VALUES IN (30940,30941,30942,30943), +PARTITION p7736 VALUES IN (30944,30945,30946,30947), +PARTITION p7737 VALUES IN (30948,30949,30950,30951), +PARTITION p7738 VALUES IN (30952,30953,30954,30955), +PARTITION p7739 VALUES IN (30956,30957,30958,30959), +PARTITION p7740 VALUES IN (30960,30961,30962,30963), +PARTITION p7741 VALUES IN (30964,30965,30966,30967), +PARTITION p7742 VALUES IN (30968,30969,30970,30971), +PARTITION p7743 VALUES IN (30972,30973,30974,30975), +PARTITION p7744 VALUES IN (30976,30977,30978,30979), +PARTITION p7745 VALUES IN (30980,30981,30982,30983), +PARTITION p7746 VALUES IN (30984,30985,30986,30987), +PARTITION p7747 VALUES IN (30988,30989,30990,30991), +PARTITION p7748 VALUES IN (30992,30993,30994,30995), +PARTITION p7749 VALUES IN (30996,30997,30998,30999), +PARTITION p7750 VALUES IN (31000,31001,31002,31003), +PARTITION p7751 VALUES IN (31004,31005,31006,31007), +PARTITION p7752 VALUES IN (31008,31009,31010,31011), +PARTITION p7753 VALUES IN (31012,31013,31014,31015), +PARTITION p7754 VALUES IN (31016,31017,31018,31019), +PARTITION p7755 VALUES IN (31020,31021,31022,31023), +PARTITION p7756 VALUES IN (31024,31025,31026,31027), +PARTITION p7757 VALUES IN (31028,31029,31030,31031), +PARTITION p7758 VALUES IN (31032,31033,31034,31035), +PARTITION p7759 VALUES IN (31036,31037,31038,31039), +PARTITION p7760 VALUES IN (31040,31041,31042,31043), +PARTITION p7761 VALUES IN (31044,31045,31046,31047), +PARTITION p7762 VALUES IN (31048,31049,31050,31051), +PARTITION p7763 VALUES IN (31052,31053,31054,31055), +PARTITION p7764 VALUES IN (31056,31057,31058,31059), +PARTITION p7765 VALUES IN (31060,31061,31062,31063), +PARTITION p7766 VALUES IN (31064,31065,31066,31067), +PARTITION p7767 VALUES IN (31068,31069,31070,31071), +PARTITION p7768 VALUES IN (31072,31073,31074,31075), +PARTITION p7769 VALUES IN (31076,31077,31078,31079), +PARTITION p7770 VALUES IN (31080,31081,31082,31083), +PARTITION p7771 VALUES IN (31084,31085,31086,31087), +PARTITION p7772 VALUES IN (31088,31089,31090,31091), +PARTITION p7773 VALUES IN (31092,31093,31094,31095), +PARTITION p7774 VALUES IN (31096,31097,31098,31099), +PARTITION p7775 VALUES IN (31100,31101,31102,31103), +PARTITION p7776 VALUES IN (31104,31105,31106,31107), +PARTITION p7777 VALUES IN (31108,31109,31110,31111), +PARTITION p7778 VALUES IN (31112,31113,31114,31115), +PARTITION p7779 VALUES IN (31116,31117,31118,31119), +PARTITION p7780 VALUES IN (31120,31121,31122,31123), +PARTITION p7781 VALUES IN (31124,31125,31126,31127), +PARTITION p7782 VALUES IN (31128,31129,31130,31131), +PARTITION p7783 VALUES IN (31132,31133,31134,31135), +PARTITION p7784 VALUES IN (31136,31137,31138,31139), +PARTITION p7785 VALUES IN (31140,31141,31142,31143), +PARTITION p7786 VALUES IN (31144,31145,31146,31147), +PARTITION p7787 VALUES IN (31148,31149,31150,31151), +PARTITION p7788 VALUES IN (31152,31153,31154,31155), +PARTITION p7789 VALUES IN (31156,31157,31158,31159), +PARTITION p7790 VALUES IN (31160,31161,31162,31163), +PARTITION p7791 VALUES IN (31164,31165,31166,31167), +PARTITION p7792 VALUES IN (31168,31169,31170,31171), +PARTITION p7793 VALUES IN (31172,31173,31174,31175), +PARTITION p7794 VALUES IN (31176,31177,31178,31179), +PARTITION p7795 VALUES IN (31180,31181,31182,31183), +PARTITION p7796 VALUES IN (31184,31185,31186,31187), +PARTITION p7797 VALUES IN (31188,31189,31190,31191), +PARTITION p7798 VALUES IN (31192,31193,31194,31195), +PARTITION p7799 VALUES IN (31196,31197,31198,31199), +PARTITION p7800 VALUES IN (31200,31201,31202,31203), +PARTITION p7801 VALUES IN (31204,31205,31206,31207), +PARTITION p7802 VALUES IN (31208,31209,31210,31211), +PARTITION p7803 VALUES IN (31212,31213,31214,31215), +PARTITION p7804 VALUES IN (31216,31217,31218,31219), +PARTITION p7805 VALUES IN (31220,31221,31222,31223), +PARTITION p7806 VALUES IN (31224,31225,31226,31227), +PARTITION p7807 VALUES IN (31228,31229,31230,31231), +PARTITION p7808 VALUES IN (31232,31233,31234,31235), +PARTITION p7809 VALUES IN (31236,31237,31238,31239), +PARTITION p7810 VALUES IN (31240,31241,31242,31243), +PARTITION p7811 VALUES IN (31244,31245,31246,31247), +PARTITION p7812 VALUES IN (31248,31249,31250,31251), +PARTITION p7813 VALUES IN (31252,31253,31254,31255), +PARTITION p7814 VALUES IN (31256,31257,31258,31259), +PARTITION p7815 VALUES IN (31260,31261,31262,31263), +PARTITION p7816 VALUES IN (31264,31265,31266,31267), +PARTITION p7817 VALUES IN (31268,31269,31270,31271), +PARTITION p7818 VALUES IN (31272,31273,31274,31275), +PARTITION p7819 VALUES IN (31276,31277,31278,31279), +PARTITION p7820 VALUES IN (31280,31281,31282,31283), +PARTITION p7821 VALUES IN (31284,31285,31286,31287), +PARTITION p7822 VALUES IN (31288,31289,31290,31291), +PARTITION p7823 VALUES IN (31292,31293,31294,31295), +PARTITION p7824 VALUES IN (31296,31297,31298,31299), +PARTITION p7825 VALUES IN (31300,31301,31302,31303), +PARTITION p7826 VALUES IN (31304,31305,31306,31307), +PARTITION p7827 VALUES IN (31308,31309,31310,31311), +PARTITION p7828 VALUES IN (31312,31313,31314,31315), +PARTITION p7829 VALUES IN (31316,31317,31318,31319), +PARTITION p7830 VALUES IN (31320,31321,31322,31323), +PARTITION p7831 VALUES IN (31324,31325,31326,31327), +PARTITION p7832 VALUES IN (31328,31329,31330,31331), +PARTITION p7833 VALUES IN (31332,31333,31334,31335), +PARTITION p7834 VALUES IN (31336,31337,31338,31339), +PARTITION p7835 VALUES IN (31340,31341,31342,31343), +PARTITION p7836 VALUES IN (31344,31345,31346,31347), +PARTITION p7837 VALUES IN (31348,31349,31350,31351), +PARTITION p7838 VALUES IN (31352,31353,31354,31355), +PARTITION p7839 VALUES IN (31356,31357,31358,31359), +PARTITION p7840 VALUES IN (31360,31361,31362,31363), +PARTITION p7841 VALUES IN (31364,31365,31366,31367), +PARTITION p7842 VALUES IN (31368,31369,31370,31371), +PARTITION p7843 VALUES IN (31372,31373,31374,31375), +PARTITION p7844 VALUES IN (31376,31377,31378,31379), +PARTITION p7845 VALUES IN (31380,31381,31382,31383), +PARTITION p7846 VALUES IN (31384,31385,31386,31387), +PARTITION p7847 VALUES IN (31388,31389,31390,31391), +PARTITION p7848 VALUES IN (31392,31393,31394,31395), +PARTITION p7849 VALUES IN (31396,31397,31398,31399), +PARTITION p7850 VALUES IN (31400,31401,31402,31403), +PARTITION p7851 VALUES IN (31404,31405,31406,31407), +PARTITION p7852 VALUES IN (31408,31409,31410,31411), +PARTITION p7853 VALUES IN (31412,31413,31414,31415), +PARTITION p7854 VALUES IN (31416,31417,31418,31419), +PARTITION p7855 VALUES IN (31420,31421,31422,31423), +PARTITION p7856 VALUES IN (31424,31425,31426,31427), +PARTITION p7857 VALUES IN (31428,31429,31430,31431), +PARTITION p7858 VALUES IN (31432,31433,31434,31435), +PARTITION p7859 VALUES IN (31436,31437,31438,31439), +PARTITION p7860 VALUES IN (31440,31441,31442,31443), +PARTITION p7861 VALUES IN (31444,31445,31446,31447), +PARTITION p7862 VALUES IN (31448,31449,31450,31451), +PARTITION p7863 VALUES IN (31452,31453,31454,31455), +PARTITION p7864 VALUES IN (31456,31457,31458,31459), +PARTITION p7865 VALUES IN (31460,31461,31462,31463), +PARTITION p7866 VALUES IN (31464,31465,31466,31467), +PARTITION p7867 VALUES IN (31468,31469,31470,31471), +PARTITION p7868 VALUES IN (31472,31473,31474,31475), +PARTITION p7869 VALUES IN (31476,31477,31478,31479), +PARTITION p7870 VALUES IN (31480,31481,31482,31483), +PARTITION p7871 VALUES IN (31484,31485,31486,31487), +PARTITION p7872 VALUES IN (31488,31489,31490,31491), +PARTITION p7873 VALUES IN (31492,31493,31494,31495), +PARTITION p7874 VALUES IN (31496,31497,31498,31499), +PARTITION p7875 VALUES IN (31500,31501,31502,31503), +PARTITION p7876 VALUES IN (31504,31505,31506,31507), +PARTITION p7877 VALUES IN (31508,31509,31510,31511), +PARTITION p7878 VALUES IN (31512,31513,31514,31515), +PARTITION p7879 VALUES IN (31516,31517,31518,31519), +PARTITION p7880 VALUES IN (31520,31521,31522,31523), +PARTITION p7881 VALUES IN (31524,31525,31526,31527), +PARTITION p7882 VALUES IN (31528,31529,31530,31531), +PARTITION p7883 VALUES IN (31532,31533,31534,31535), +PARTITION p7884 VALUES IN (31536,31537,31538,31539), +PARTITION p7885 VALUES IN (31540,31541,31542,31543), +PARTITION p7886 VALUES IN (31544,31545,31546,31547), +PARTITION p7887 VALUES IN (31548,31549,31550,31551), +PARTITION p7888 VALUES IN (31552,31553,31554,31555), +PARTITION p7889 VALUES IN (31556,31557,31558,31559), +PARTITION p7890 VALUES IN (31560,31561,31562,31563), +PARTITION p7891 VALUES IN (31564,31565,31566,31567), +PARTITION p7892 VALUES IN (31568,31569,31570,31571), +PARTITION p7893 VALUES IN (31572,31573,31574,31575), +PARTITION p7894 VALUES IN (31576,31577,31578,31579), +PARTITION p7895 VALUES IN (31580,31581,31582,31583), +PARTITION p7896 VALUES IN (31584,31585,31586,31587), +PARTITION p7897 VALUES IN (31588,31589,31590,31591), +PARTITION p7898 VALUES IN (31592,31593,31594,31595), +PARTITION p7899 VALUES IN (31596,31597,31598,31599), +PARTITION p7900 VALUES IN (31600,31601,31602,31603), +PARTITION p7901 VALUES IN (31604,31605,31606,31607), +PARTITION p7902 VALUES IN (31608,31609,31610,31611), +PARTITION p7903 VALUES IN (31612,31613,31614,31615), +PARTITION p7904 VALUES IN (31616,31617,31618,31619), +PARTITION p7905 VALUES IN (31620,31621,31622,31623), +PARTITION p7906 VALUES IN (31624,31625,31626,31627), +PARTITION p7907 VALUES IN (31628,31629,31630,31631), +PARTITION p7908 VALUES IN (31632,31633,31634,31635), +PARTITION p7909 VALUES IN (31636,31637,31638,31639), +PARTITION p7910 VALUES IN (31640,31641,31642,31643), +PARTITION p7911 VALUES IN (31644,31645,31646,31647), +PARTITION p7912 VALUES IN (31648,31649,31650,31651), +PARTITION p7913 VALUES IN (31652,31653,31654,31655), +PARTITION p7914 VALUES IN (31656,31657,31658,31659), +PARTITION p7915 VALUES IN (31660,31661,31662,31663), +PARTITION p7916 VALUES IN (31664,31665,31666,31667), +PARTITION p7917 VALUES IN (31668,31669,31670,31671), +PARTITION p7918 VALUES IN (31672,31673,31674,31675), +PARTITION p7919 VALUES IN (31676,31677,31678,31679), +PARTITION p7920 VALUES IN (31680,31681,31682,31683), +PARTITION p7921 VALUES IN (31684,31685,31686,31687), +PARTITION p7922 VALUES IN (31688,31689,31690,31691), +PARTITION p7923 VALUES IN (31692,31693,31694,31695), +PARTITION p7924 VALUES IN (31696,31697,31698,31699), +PARTITION p7925 VALUES IN (31700,31701,31702,31703), +PARTITION p7926 VALUES IN (31704,31705,31706,31707), +PARTITION p7927 VALUES IN (31708,31709,31710,31711), +PARTITION p7928 VALUES IN (31712,31713,31714,31715), +PARTITION p7929 VALUES IN (31716,31717,31718,31719), +PARTITION p7930 VALUES IN (31720,31721,31722,31723), +PARTITION p7931 VALUES IN (31724,31725,31726,31727), +PARTITION p7932 VALUES IN (31728,31729,31730,31731), +PARTITION p7933 VALUES IN (31732,31733,31734,31735), +PARTITION p7934 VALUES IN (31736,31737,31738,31739), +PARTITION p7935 VALUES IN (31740,31741,31742,31743), +PARTITION p7936 VALUES IN (31744,31745,31746,31747), +PARTITION p7937 VALUES IN (31748,31749,31750,31751), +PARTITION p7938 VALUES IN (31752,31753,31754,31755), +PARTITION p7939 VALUES IN (31756,31757,31758,31759), +PARTITION p7940 VALUES IN (31760,31761,31762,31763), +PARTITION p7941 VALUES IN (31764,31765,31766,31767), +PARTITION p7942 VALUES IN (31768,31769,31770,31771), +PARTITION p7943 VALUES IN (31772,31773,31774,31775), +PARTITION p7944 VALUES IN (31776,31777,31778,31779), +PARTITION p7945 VALUES IN (31780,31781,31782,31783), +PARTITION p7946 VALUES IN (31784,31785,31786,31787), +PARTITION p7947 VALUES IN (31788,31789,31790,31791), +PARTITION p7948 VALUES IN (31792,31793,31794,31795), +PARTITION p7949 VALUES IN (31796,31797,31798,31799), +PARTITION p7950 VALUES IN (31800,31801,31802,31803), +PARTITION p7951 VALUES IN (31804,31805,31806,31807), +PARTITION p7952 VALUES IN (31808,31809,31810,31811), +PARTITION p7953 VALUES IN (31812,31813,31814,31815), +PARTITION p7954 VALUES IN (31816,31817,31818,31819), +PARTITION p7955 VALUES IN (31820,31821,31822,31823), +PARTITION p7956 VALUES IN (31824,31825,31826,31827), +PARTITION p7957 VALUES IN (31828,31829,31830,31831), +PARTITION p7958 VALUES IN (31832,31833,31834,31835), +PARTITION p7959 VALUES IN (31836,31837,31838,31839), +PARTITION p7960 VALUES IN (31840,31841,31842,31843), +PARTITION p7961 VALUES IN (31844,31845,31846,31847), +PARTITION p7962 VALUES IN (31848,31849,31850,31851), +PARTITION p7963 VALUES IN (31852,31853,31854,31855), +PARTITION p7964 VALUES IN (31856,31857,31858,31859), +PARTITION p7965 VALUES IN (31860,31861,31862,31863), +PARTITION p7966 VALUES IN (31864,31865,31866,31867), +PARTITION p7967 VALUES IN (31868,31869,31870,31871), +PARTITION p7968 VALUES IN (31872,31873,31874,31875), +PARTITION p7969 VALUES IN (31876,31877,31878,31879), +PARTITION p7970 VALUES IN (31880,31881,31882,31883), +PARTITION p7971 VALUES IN (31884,31885,31886,31887), +PARTITION p7972 VALUES IN (31888,31889,31890,31891), +PARTITION p7973 VALUES IN (31892,31893,31894,31895), +PARTITION p7974 VALUES IN (31896,31897,31898,31899), +PARTITION p7975 VALUES IN (31900,31901,31902,31903), +PARTITION p7976 VALUES IN (31904,31905,31906,31907), +PARTITION p7977 VALUES IN (31908,31909,31910,31911), +PARTITION p7978 VALUES IN (31912,31913,31914,31915), +PARTITION p7979 VALUES IN (31916,31917,31918,31919), +PARTITION p7980 VALUES IN (31920,31921,31922,31923), +PARTITION p7981 VALUES IN (31924,31925,31926,31927), +PARTITION p7982 VALUES IN (31928,31929,31930,31931), +PARTITION p7983 VALUES IN (31932,31933,31934,31935), +PARTITION p7984 VALUES IN (31936,31937,31938,31939), +PARTITION p7985 VALUES IN (31940,31941,31942,31943), +PARTITION p7986 VALUES IN (31944,31945,31946,31947), +PARTITION p7987 VALUES IN (31948,31949,31950,31951), +PARTITION p7988 VALUES IN (31952,31953,31954,31955), +PARTITION p7989 VALUES IN (31956,31957,31958,31959), +PARTITION p7990 VALUES IN (31960,31961,31962,31963), +PARTITION p7991 VALUES IN (31964,31965,31966,31967), +PARTITION p7992 VALUES IN (31968,31969,31970,31971), +PARTITION p7993 VALUES IN (31972,31973,31974,31975), +PARTITION p7994 VALUES IN (31976,31977,31978,31979), +PARTITION p7995 VALUES IN (31980,31981,31982,31983), +PARTITION p7996 VALUES IN (31984,31985,31986,31987), +PARTITION p7997 VALUES IN (31988,31989,31990,31991), +PARTITION p7998 VALUES IN (31992,31993,31994,31995), +PARTITION p7999 VALUES IN (31996,31997,31998,31999), +PARTITION p8000 VALUES IN (32000,32001,32002,32003), +PARTITION p8001 VALUES IN (32004,32005,32006,32007), +PARTITION p8002 VALUES IN (32008,32009,32010,32011), +PARTITION p8003 VALUES IN (32012,32013,32014,32015), +PARTITION p8004 VALUES IN (32016,32017,32018,32019), +PARTITION p8005 VALUES IN (32020,32021,32022,32023), +PARTITION p8006 VALUES IN (32024,32025,32026,32027), +PARTITION p8007 VALUES IN (32028,32029,32030,32031), +PARTITION p8008 VALUES IN (32032,32033,32034,32035), +PARTITION p8009 VALUES IN (32036,32037,32038,32039), +PARTITION p8010 VALUES IN (32040,32041,32042,32043), +PARTITION p8011 VALUES IN (32044,32045,32046,32047), +PARTITION p8012 VALUES IN (32048,32049,32050,32051), +PARTITION p8013 VALUES IN (32052,32053,32054,32055), +PARTITION p8014 VALUES IN (32056,32057,32058,32059), +PARTITION p8015 VALUES IN (32060,32061,32062,32063), +PARTITION p8016 VALUES IN (32064,32065,32066,32067), +PARTITION p8017 VALUES IN (32068,32069,32070,32071), +PARTITION p8018 VALUES IN (32072,32073,32074,32075), +PARTITION p8019 VALUES IN (32076,32077,32078,32079), +PARTITION p8020 VALUES IN (32080,32081,32082,32083), +PARTITION p8021 VALUES IN (32084,32085,32086,32087), +PARTITION p8022 VALUES IN (32088,32089,32090,32091), +PARTITION p8023 VALUES IN (32092,32093,32094,32095), +PARTITION p8024 VALUES IN (32096,32097,32098,32099), +PARTITION p8025 VALUES IN (32100,32101,32102,32103), +PARTITION p8026 VALUES IN (32104,32105,32106,32107), +PARTITION p8027 VALUES IN (32108,32109,32110,32111), +PARTITION p8028 VALUES IN (32112,32113,32114,32115), +PARTITION p8029 VALUES IN (32116,32117,32118,32119), +PARTITION p8030 VALUES IN (32120,32121,32122,32123), +PARTITION p8031 VALUES IN (32124,32125,32126,32127), +PARTITION p8032 VALUES IN (32128,32129,32130,32131), +PARTITION p8033 VALUES IN (32132,32133,32134,32135), +PARTITION p8034 VALUES IN (32136,32137,32138,32139), +PARTITION p8035 VALUES IN (32140,32141,32142,32143), +PARTITION p8036 VALUES IN (32144,32145,32146,32147), +PARTITION p8037 VALUES IN (32148,32149,32150,32151), +PARTITION p8038 VALUES IN (32152,32153,32154,32155), +PARTITION p8039 VALUES IN (32156,32157,32158,32159), +PARTITION p8040 VALUES IN (32160,32161,32162,32163), +PARTITION p8041 VALUES IN (32164,32165,32166,32167), +PARTITION p8042 VALUES IN (32168,32169,32170,32171), +PARTITION p8043 VALUES IN (32172,32173,32174,32175), +PARTITION p8044 VALUES IN (32176,32177,32178,32179), +PARTITION p8045 VALUES IN (32180,32181,32182,32183), +PARTITION p8046 VALUES IN (32184,32185,32186,32187), +PARTITION p8047 VALUES IN (32188,32189,32190,32191), +PARTITION p8048 VALUES IN (32192,32193,32194,32195), +PARTITION p8049 VALUES IN (32196,32197,32198,32199), +PARTITION p8050 VALUES IN (32200,32201,32202,32203), +PARTITION p8051 VALUES IN (32204,32205,32206,32207), +PARTITION p8052 VALUES IN (32208,32209,32210,32211), +PARTITION p8053 VALUES IN (32212,32213,32214,32215), +PARTITION p8054 VALUES IN (32216,32217,32218,32219), +PARTITION p8055 VALUES IN (32220,32221,32222,32223), +PARTITION p8056 VALUES IN (32224,32225,32226,32227), +PARTITION p8057 VALUES IN (32228,32229,32230,32231), +PARTITION p8058 VALUES IN (32232,32233,32234,32235), +PARTITION p8059 VALUES IN (32236,32237,32238,32239), +PARTITION p8060 VALUES IN (32240,32241,32242,32243), +PARTITION p8061 VALUES IN (32244,32245,32246,32247), +PARTITION p8062 VALUES IN (32248,32249,32250,32251), +PARTITION p8063 VALUES IN (32252,32253,32254,32255), +PARTITION p8064 VALUES IN (32256,32257,32258,32259), +PARTITION p8065 VALUES IN (32260,32261,32262,32263), +PARTITION p8066 VALUES IN (32264,32265,32266,32267), +PARTITION p8067 VALUES IN (32268,32269,32270,32271), +PARTITION p8068 VALUES IN (32272,32273,32274,32275), +PARTITION p8069 VALUES IN (32276,32277,32278,32279), +PARTITION p8070 VALUES IN (32280,32281,32282,32283), +PARTITION p8071 VALUES IN (32284,32285,32286,32287), +PARTITION p8072 VALUES IN (32288,32289,32290,32291), +PARTITION p8073 VALUES IN (32292,32293,32294,32295), +PARTITION p8074 VALUES IN (32296,32297,32298,32299), +PARTITION p8075 VALUES IN (32300,32301,32302,32303), +PARTITION p8076 VALUES IN (32304,32305,32306,32307), +PARTITION p8077 VALUES IN (32308,32309,32310,32311), +PARTITION p8078 VALUES IN (32312,32313,32314,32315), +PARTITION p8079 VALUES IN (32316,32317,32318,32319), +PARTITION p8080 VALUES IN (32320,32321,32322,32323), +PARTITION p8081 VALUES IN (32324,32325,32326,32327), +PARTITION p8082 VALUES IN (32328,32329,32330,32331), +PARTITION p8083 VALUES IN (32332,32333,32334,32335), +PARTITION p8084 VALUES IN (32336,32337,32338,32339), +PARTITION p8085 VALUES IN (32340,32341,32342,32343), +PARTITION p8086 VALUES IN (32344,32345,32346,32347), +PARTITION p8087 VALUES IN (32348,32349,32350,32351), +PARTITION p8088 VALUES IN (32352,32353,32354,32355), +PARTITION p8089 VALUES IN (32356,32357,32358,32359), +PARTITION p8090 VALUES IN (32360,32361,32362,32363), +PARTITION p8091 VALUES IN (32364,32365,32366,32367), +PARTITION p8092 VALUES IN (32368,32369,32370,32371), +PARTITION p8093 VALUES IN (32372,32373,32374,32375), +PARTITION p8094 VALUES IN (32376,32377,32378,32379), +PARTITION p8095 VALUES IN (32380,32381,32382,32383), +PARTITION p8096 VALUES IN (32384,32385,32386,32387), +PARTITION p8097 VALUES IN (32388,32389,32390,32391), +PARTITION p8098 VALUES IN (32392,32393,32394,32395), +PARTITION p8099 VALUES IN (32396,32397,32398,32399), +PARTITION p8100 VALUES IN (32400,32401,32402,32403), +PARTITION p8101 VALUES IN (32404,32405,32406,32407), +PARTITION p8102 VALUES IN (32408,32409,32410,32411), +PARTITION p8103 VALUES IN (32412,32413,32414,32415), +PARTITION p8104 VALUES IN (32416,32417,32418,32419), +PARTITION p8105 VALUES IN (32420,32421,32422,32423), +PARTITION p8106 VALUES IN (32424,32425,32426,32427), +PARTITION p8107 VALUES IN (32428,32429,32430,32431), +PARTITION p8108 VALUES IN (32432,32433,32434,32435), +PARTITION p8109 VALUES IN (32436,32437,32438,32439), +PARTITION p8110 VALUES IN (32440,32441,32442,32443), +PARTITION p8111 VALUES IN (32444,32445,32446,32447), +PARTITION p8112 VALUES IN (32448,32449,32450,32451), +PARTITION p8113 VALUES IN (32452,32453,32454,32455), +PARTITION p8114 VALUES IN (32456,32457,32458,32459), +PARTITION p8115 VALUES IN (32460,32461,32462,32463), +PARTITION p8116 VALUES IN (32464,32465,32466,32467), +PARTITION p8117 VALUES IN (32468,32469,32470,32471), +PARTITION p8118 VALUES IN (32472,32473,32474,32475), +PARTITION p8119 VALUES IN (32476,32477,32478,32479), +PARTITION p8120 VALUES IN (32480,32481,32482,32483), +PARTITION p8121 VALUES IN (32484,32485,32486,32487), +PARTITION p8122 VALUES IN (32488,32489,32490,32491), +PARTITION p8123 VALUES IN (32492,32493,32494,32495), +PARTITION p8124 VALUES IN (32496,32497,32498,32499), +PARTITION p8125 VALUES IN (32500,32501,32502,32503), +PARTITION p8126 VALUES IN (32504,32505,32506,32507), +PARTITION p8127 VALUES IN (32508,32509,32510,32511), +PARTITION p8128 VALUES IN (32512,32513,32514,32515), +PARTITION p8129 VALUES IN (32516,32517,32518,32519), +PARTITION p8130 VALUES IN (32520,32521,32522,32523), +PARTITION p8131 VALUES IN (32524,32525,32526,32527), +PARTITION p8132 VALUES IN (32528,32529,32530,32531), +PARTITION p8133 VALUES IN (32532,32533,32534,32535), +PARTITION p8134 VALUES IN (32536,32537,32538,32539), +PARTITION p8135 VALUES IN (32540,32541,32542,32543), +PARTITION p8136 VALUES IN (32544,32545,32546,32547), +PARTITION p8137 VALUES IN (32548,32549,32550,32551), +PARTITION p8138 VALUES IN (32552,32553,32554,32555), +PARTITION p8139 VALUES IN (32556,32557,32558,32559), +PARTITION p8140 VALUES IN (32560,32561,32562,32563), +PARTITION p8141 VALUES IN (32564,32565,32566,32567), +PARTITION p8142 VALUES IN (32568,32569,32570,32571), +PARTITION p8143 VALUES IN (32572,32573,32574,32575), +PARTITION p8144 VALUES IN (32576,32577,32578,32579), +PARTITION p8145 VALUES IN (32580,32581,32582,32583), +PARTITION p8146 VALUES IN (32584,32585,32586,32587), +PARTITION p8147 VALUES IN (32588,32589,32590,32591), +PARTITION p8148 VALUES IN (32592,32593,32594,32595), +PARTITION p8149 VALUES IN (32596,32597,32598,32599), +PARTITION p8150 VALUES IN (32600,32601,32602,32603), +PARTITION p8151 VALUES IN (32604,32605,32606,32607), +PARTITION p8152 VALUES IN (32608,32609,32610,32611), +PARTITION p8153 VALUES IN (32612,32613,32614,32615), +PARTITION p8154 VALUES IN (32616,32617,32618,32619), +PARTITION p8155 VALUES IN (32620,32621,32622,32623), +PARTITION p8156 VALUES IN (32624,32625,32626,32627), +PARTITION p8157 VALUES IN (32628,32629,32630,32631), +PARTITION p8158 VALUES IN (32632,32633,32634,32635), +PARTITION p8159 VALUES IN (32636,32637,32638,32639), +PARTITION p8160 VALUES IN (32640,32641,32642,32643), +PARTITION p8161 VALUES IN (32644,32645,32646,32647), +PARTITION p8162 VALUES IN (32648,32649,32650,32651), +PARTITION p8163 VALUES IN (32652,32653,32654,32655), +PARTITION p8164 VALUES IN (32656,32657,32658,32659), +PARTITION p8165 VALUES IN (32660,32661,32662,32663), +PARTITION p8166 VALUES IN (32664,32665,32666,32667), +PARTITION p8167 VALUES IN (32668,32669,32670,32671), +PARTITION p8168 VALUES IN (32672,32673,32674,32675), +PARTITION p8169 VALUES IN (32676,32677,32678,32679), +PARTITION p8170 VALUES IN (32680,32681,32682,32683), +PARTITION p8171 VALUES IN (32684,32685,32686,32687), +PARTITION p8172 VALUES IN (32688,32689,32690,32691), +PARTITION p8173 VALUES IN (32692,32693,32694,32695), +PARTITION p8174 VALUES IN (32696,32697,32698,32699), +PARTITION p8175 VALUES IN (32700,32701,32702,32703), +PARTITION p8176 VALUES IN (32704,32705,32706,32707), +PARTITION p8177 VALUES IN (32708,32709,32710,32711), +PARTITION p8178 VALUES IN (32712,32713,32714,32715), +PARTITION p8179 VALUES IN (32716,32717,32718,32719), +PARTITION p8180 VALUES IN (32720,32721,32722,32723), +PARTITION p8181 VALUES IN (32724,32725,32726,32727), +PARTITION p8182 VALUES IN (32728,32729,32730,32731), +PARTITION p8183 VALUES IN (32732,32733,32734,32735), +PARTITION p8184 VALUES IN (32736,32737,32738,32739), +PARTITION p8185 VALUES IN (32740,32741,32742,32743), +PARTITION p8186 VALUES IN (32744,32745,32746,32747), +PARTITION p8187 VALUES IN (32748,32749,32750,32751), +PARTITION p8188 VALUES IN (32752,32753,32754,32755), +PARTITION p8189 VALUES IN (32756,32757,32758,32759), +PARTITION p8190 VALUES IN (32760,32761,32762,32763), +PARTITION p8191 VALUES IN (32764,32765,32766,32767) +); +32767 inserts; +select count(*) from t2; +count(*) +32767 +select count(*) from t2 partition (p0); +count(*) +3 +select count(*) from t2 partition (p10); +count(*) +4 +select count(*) from t2 partition (p100); +count(*) +4 +select count(*) from t2 partition (p1000); +count(*) +4 +select count(*) from t2 partition (p4000); +count(*) +4 +select count(*) from t2 partition (p8000); +count(*) +4 +select count(*) from t2 partition (p8191); +count(*) +4 +select * from t2 partition (p0); +a +3 +2 +1 +select * from t2 partition (p10); +a +43 +42 +41 +40 +select * from t2 partition (p100); +a +403 +402 +401 +400 +select * from t2 partition (p1000); +a +4003 +4002 +4001 +4000 +select * from t2 partition (p4000); +a +16003 +16002 +16001 +16000 +select * from t2 partition (p8000); +a +32003 +32002 +32001 +32000 +select * from t2 partition (p8191); +a +32767 +32766 +32765 +32764 +delete from t2 partition (p8191); +select * from t2 partition (p8191); +a +insert into t2 partition (p8191) values (32766),(32767); +select * from t2 partition (p8191); +a +32766 +32767 +update t2 partition (p8191) set a=32765 where a= 32766; +select * from t2 partition (p8191); +a +32765 +32767 +load data infile 'MYSQL_TMP_DIR/data01' into table t2 partition (p8191) fields terminated by ','; +select * from t2 partition (p8191); +a +32765 +32767 +32766 +32764 +drop table t2; diff --git a/mysql-test/suite/tokudb.parts/r-native/partition_max_parts_range_tokudb.result b/mysql-test/suite/tokudb.parts/r-native/partition_max_parts_range_tokudb.result new file mode 100644 index 000000000000..b48c25284c6a --- /dev/null +++ b/mysql-test/suite/tokudb.parts/r-native/partition_max_parts_range_tokudb.result @@ -0,0 +1,8310 @@ +create table t2 (a int) engine='TokuDB' +partition by range (a) ( +PARTITION p0 VALUES LESS THAN (8), +PARTITION p1 VALUES LESS THAN (16), +PARTITION p2 VALUES LESS THAN (24), +PARTITION p3 VALUES LESS THAN (32), +PARTITION p4 VALUES LESS THAN (40), +PARTITION p5 VALUES LESS THAN (48), +PARTITION p6 VALUES LESS THAN (56), +PARTITION p7 VALUES LESS THAN (64), +PARTITION p8 VALUES LESS THAN (72), +PARTITION p9 VALUES LESS THAN (80), +PARTITION p10 VALUES LESS THAN (88), +PARTITION p11 VALUES LESS THAN (96), +PARTITION p12 VALUES LESS THAN (104), +PARTITION p13 VALUES LESS THAN (112), +PARTITION p14 VALUES LESS THAN (120), +PARTITION p15 VALUES LESS THAN (128), +PARTITION p16 VALUES LESS THAN (136), +PARTITION p17 VALUES LESS THAN (144), +PARTITION p18 VALUES LESS THAN (152), +PARTITION p19 VALUES LESS THAN (160), +PARTITION p20 VALUES LESS THAN (168), +PARTITION p21 VALUES LESS THAN (176), +PARTITION p22 VALUES LESS THAN (184), +PARTITION p23 VALUES LESS THAN (192), +PARTITION p24 VALUES LESS THAN (200), +PARTITION p25 VALUES LESS THAN (208), +PARTITION p26 VALUES LESS THAN (216), +PARTITION p27 VALUES LESS THAN (224), +PARTITION p28 VALUES LESS THAN (232), +PARTITION p29 VALUES LESS THAN (240), +PARTITION p30 VALUES LESS THAN (248), +PARTITION p31 VALUES LESS THAN (256), +PARTITION p32 VALUES LESS THAN (264), +PARTITION p33 VALUES LESS THAN (272), +PARTITION p34 VALUES LESS THAN (280), +PARTITION p35 VALUES LESS THAN (288), +PARTITION p36 VALUES LESS THAN (296), +PARTITION p37 VALUES LESS THAN (304), +PARTITION p38 VALUES LESS THAN (312), +PARTITION p39 VALUES LESS THAN (320), +PARTITION p40 VALUES LESS THAN (328), +PARTITION p41 VALUES LESS THAN (336), +PARTITION p42 VALUES LESS THAN (344), +PARTITION p43 VALUES LESS THAN (352), +PARTITION p44 VALUES LESS THAN (360), +PARTITION p45 VALUES LESS THAN (368), +PARTITION p46 VALUES LESS THAN (376), +PARTITION p47 VALUES LESS THAN (384), +PARTITION p48 VALUES LESS THAN (392), +PARTITION p49 VALUES LESS THAN (400), +PARTITION p50 VALUES LESS THAN (408), +PARTITION p51 VALUES LESS THAN (416), +PARTITION p52 VALUES LESS THAN (424), +PARTITION p53 VALUES LESS THAN (432), +PARTITION p54 VALUES LESS THAN (440), +PARTITION p55 VALUES LESS THAN (448), +PARTITION p56 VALUES LESS THAN (456), +PARTITION p57 VALUES LESS THAN (464), +PARTITION p58 VALUES LESS THAN (472), +PARTITION p59 VALUES LESS THAN (480), +PARTITION p60 VALUES LESS THAN (488), +PARTITION p61 VALUES LESS THAN (496), +PARTITION p62 VALUES LESS THAN (504), +PARTITION p63 VALUES LESS THAN (512), +PARTITION p64 VALUES LESS THAN (520), +PARTITION p65 VALUES LESS THAN (528), +PARTITION p66 VALUES LESS THAN (536), +PARTITION p67 VALUES LESS THAN (544), +PARTITION p68 VALUES LESS THAN (552), +PARTITION p69 VALUES LESS THAN (560), +PARTITION p70 VALUES LESS THAN (568), +PARTITION p71 VALUES LESS THAN (576), +PARTITION p72 VALUES LESS THAN (584), +PARTITION p73 VALUES LESS THAN (592), +PARTITION p74 VALUES LESS THAN (600), +PARTITION p75 VALUES LESS THAN (608), +PARTITION p76 VALUES LESS THAN (616), +PARTITION p77 VALUES LESS THAN (624), +PARTITION p78 VALUES LESS THAN (632), +PARTITION p79 VALUES LESS THAN (640), +PARTITION p80 VALUES LESS THAN (648), +PARTITION p81 VALUES LESS THAN (656), +PARTITION p82 VALUES LESS THAN (664), +PARTITION p83 VALUES LESS THAN (672), +PARTITION p84 VALUES LESS THAN (680), +PARTITION p85 VALUES LESS THAN (688), +PARTITION p86 VALUES LESS THAN (696), +PARTITION p87 VALUES LESS THAN (704), +PARTITION p88 VALUES LESS THAN (712), +PARTITION p89 VALUES LESS THAN (720), +PARTITION p90 VALUES LESS THAN (728), +PARTITION p91 VALUES LESS THAN (736), +PARTITION p92 VALUES LESS THAN (744), +PARTITION p93 VALUES LESS THAN (752), +PARTITION p94 VALUES LESS THAN (760), +PARTITION p95 VALUES LESS THAN (768), +PARTITION p96 VALUES LESS THAN (776), +PARTITION p97 VALUES LESS THAN (784), +PARTITION p98 VALUES LESS THAN (792), +PARTITION p99 VALUES LESS THAN (800), +PARTITION p100 VALUES LESS THAN (808), +PARTITION p101 VALUES LESS THAN (816), +PARTITION p102 VALUES LESS THAN (824), +PARTITION p103 VALUES LESS THAN (832), +PARTITION p104 VALUES LESS THAN (840), +PARTITION p105 VALUES LESS THAN (848), +PARTITION p106 VALUES LESS THAN (856), +PARTITION p107 VALUES LESS THAN (864), +PARTITION p108 VALUES LESS THAN (872), +PARTITION p109 VALUES LESS THAN (880), +PARTITION p110 VALUES LESS THAN (888), +PARTITION p111 VALUES LESS THAN (896), +PARTITION p112 VALUES LESS THAN (904), +PARTITION p113 VALUES LESS THAN (912), +PARTITION p114 VALUES LESS THAN (920), +PARTITION p115 VALUES LESS THAN (928), +PARTITION p116 VALUES LESS THAN (936), +PARTITION p117 VALUES LESS THAN (944), +PARTITION p118 VALUES LESS THAN (952), +PARTITION p119 VALUES LESS THAN (960), +PARTITION p120 VALUES LESS THAN (968), +PARTITION p121 VALUES LESS THAN (976), +PARTITION p122 VALUES LESS THAN (984), +PARTITION p123 VALUES LESS THAN (992), +PARTITION p124 VALUES LESS THAN (1000), +PARTITION p125 VALUES LESS THAN (1008), +PARTITION p126 VALUES LESS THAN (1016), +PARTITION p127 VALUES LESS THAN (1024), +PARTITION p128 VALUES LESS THAN (1032), +PARTITION p129 VALUES LESS THAN (1040), +PARTITION p130 VALUES LESS THAN (1048), +PARTITION p131 VALUES LESS THAN (1056), +PARTITION p132 VALUES LESS THAN (1064), +PARTITION p133 VALUES LESS THAN (1072), +PARTITION p134 VALUES LESS THAN (1080), +PARTITION p135 VALUES LESS THAN (1088), +PARTITION p136 VALUES LESS THAN (1096), +PARTITION p137 VALUES LESS THAN (1104), +PARTITION p138 VALUES LESS THAN (1112), +PARTITION p139 VALUES LESS THAN (1120), +PARTITION p140 VALUES LESS THAN (1128), +PARTITION p141 VALUES LESS THAN (1136), +PARTITION p142 VALUES LESS THAN (1144), +PARTITION p143 VALUES LESS THAN (1152), +PARTITION p144 VALUES LESS THAN (1160), +PARTITION p145 VALUES LESS THAN (1168), +PARTITION p146 VALUES LESS THAN (1176), +PARTITION p147 VALUES LESS THAN (1184), +PARTITION p148 VALUES LESS THAN (1192), +PARTITION p149 VALUES LESS THAN (1200), +PARTITION p150 VALUES LESS THAN (1208), +PARTITION p151 VALUES LESS THAN (1216), +PARTITION p152 VALUES LESS THAN (1224), +PARTITION p153 VALUES LESS THAN (1232), +PARTITION p154 VALUES LESS THAN (1240), +PARTITION p155 VALUES LESS THAN (1248), +PARTITION p156 VALUES LESS THAN (1256), +PARTITION p157 VALUES LESS THAN (1264), +PARTITION p158 VALUES LESS THAN (1272), +PARTITION p159 VALUES LESS THAN (1280), +PARTITION p160 VALUES LESS THAN (1288), +PARTITION p161 VALUES LESS THAN (1296), +PARTITION p162 VALUES LESS THAN (1304), +PARTITION p163 VALUES LESS THAN (1312), +PARTITION p164 VALUES LESS THAN (1320), +PARTITION p165 VALUES LESS THAN (1328), +PARTITION p166 VALUES LESS THAN (1336), +PARTITION p167 VALUES LESS THAN (1344), +PARTITION p168 VALUES LESS THAN (1352), +PARTITION p169 VALUES LESS THAN (1360), +PARTITION p170 VALUES LESS THAN (1368), +PARTITION p171 VALUES LESS THAN (1376), +PARTITION p172 VALUES LESS THAN (1384), +PARTITION p173 VALUES LESS THAN (1392), +PARTITION p174 VALUES LESS THAN (1400), +PARTITION p175 VALUES LESS THAN (1408), +PARTITION p176 VALUES LESS THAN (1416), +PARTITION p177 VALUES LESS THAN (1424), +PARTITION p178 VALUES LESS THAN (1432), +PARTITION p179 VALUES LESS THAN (1440), +PARTITION p180 VALUES LESS THAN (1448), +PARTITION p181 VALUES LESS THAN (1456), +PARTITION p182 VALUES LESS THAN (1464), +PARTITION p183 VALUES LESS THAN (1472), +PARTITION p184 VALUES LESS THAN (1480), +PARTITION p185 VALUES LESS THAN (1488), +PARTITION p186 VALUES LESS THAN (1496), +PARTITION p187 VALUES LESS THAN (1504), +PARTITION p188 VALUES LESS THAN (1512), +PARTITION p189 VALUES LESS THAN (1520), +PARTITION p190 VALUES LESS THAN (1528), +PARTITION p191 VALUES LESS THAN (1536), +PARTITION p192 VALUES LESS THAN (1544), +PARTITION p193 VALUES LESS THAN (1552), +PARTITION p194 VALUES LESS THAN (1560), +PARTITION p195 VALUES LESS THAN (1568), +PARTITION p196 VALUES LESS THAN (1576), +PARTITION p197 VALUES LESS THAN (1584), +PARTITION p198 VALUES LESS THAN (1592), +PARTITION p199 VALUES LESS THAN (1600), +PARTITION p200 VALUES LESS THAN (1608), +PARTITION p201 VALUES LESS THAN (1616), +PARTITION p202 VALUES LESS THAN (1624), +PARTITION p203 VALUES LESS THAN (1632), +PARTITION p204 VALUES LESS THAN (1640), +PARTITION p205 VALUES LESS THAN (1648), +PARTITION p206 VALUES LESS THAN (1656), +PARTITION p207 VALUES LESS THAN (1664), +PARTITION p208 VALUES LESS THAN (1672), +PARTITION p209 VALUES LESS THAN (1680), +PARTITION p210 VALUES LESS THAN (1688), +PARTITION p211 VALUES LESS THAN (1696), +PARTITION p212 VALUES LESS THAN (1704), +PARTITION p213 VALUES LESS THAN (1712), +PARTITION p214 VALUES LESS THAN (1720), +PARTITION p215 VALUES LESS THAN (1728), +PARTITION p216 VALUES LESS THAN (1736), +PARTITION p217 VALUES LESS THAN (1744), +PARTITION p218 VALUES LESS THAN (1752), +PARTITION p219 VALUES LESS THAN (1760), +PARTITION p220 VALUES LESS THAN (1768), +PARTITION p221 VALUES LESS THAN (1776), +PARTITION p222 VALUES LESS THAN (1784), +PARTITION p223 VALUES LESS THAN (1792), +PARTITION p224 VALUES LESS THAN (1800), +PARTITION p225 VALUES LESS THAN (1808), +PARTITION p226 VALUES LESS THAN (1816), +PARTITION p227 VALUES LESS THAN (1824), +PARTITION p228 VALUES LESS THAN (1832), +PARTITION p229 VALUES LESS THAN (1840), +PARTITION p230 VALUES LESS THAN (1848), +PARTITION p231 VALUES LESS THAN (1856), +PARTITION p232 VALUES LESS THAN (1864), +PARTITION p233 VALUES LESS THAN (1872), +PARTITION p234 VALUES LESS THAN (1880), +PARTITION p235 VALUES LESS THAN (1888), +PARTITION p236 VALUES LESS THAN (1896), +PARTITION p237 VALUES LESS THAN (1904), +PARTITION p238 VALUES LESS THAN (1912), +PARTITION p239 VALUES LESS THAN (1920), +PARTITION p240 VALUES LESS THAN (1928), +PARTITION p241 VALUES LESS THAN (1936), +PARTITION p242 VALUES LESS THAN (1944), +PARTITION p243 VALUES LESS THAN (1952), +PARTITION p244 VALUES LESS THAN (1960), +PARTITION p245 VALUES LESS THAN (1968), +PARTITION p246 VALUES LESS THAN (1976), +PARTITION p247 VALUES LESS THAN (1984), +PARTITION p248 VALUES LESS THAN (1992), +PARTITION p249 VALUES LESS THAN (2000), +PARTITION p250 VALUES LESS THAN (2008), +PARTITION p251 VALUES LESS THAN (2016), +PARTITION p252 VALUES LESS THAN (2024), +PARTITION p253 VALUES LESS THAN (2032), +PARTITION p254 VALUES LESS THAN (2040), +PARTITION p255 VALUES LESS THAN (2048), +PARTITION p256 VALUES LESS THAN (2056), +PARTITION p257 VALUES LESS THAN (2064), +PARTITION p258 VALUES LESS THAN (2072), +PARTITION p259 VALUES LESS THAN (2080), +PARTITION p260 VALUES LESS THAN (2088), +PARTITION p261 VALUES LESS THAN (2096), +PARTITION p262 VALUES LESS THAN (2104), +PARTITION p263 VALUES LESS THAN (2112), +PARTITION p264 VALUES LESS THAN (2120), +PARTITION p265 VALUES LESS THAN (2128), +PARTITION p266 VALUES LESS THAN (2136), +PARTITION p267 VALUES LESS THAN (2144), +PARTITION p268 VALUES LESS THAN (2152), +PARTITION p269 VALUES LESS THAN (2160), +PARTITION p270 VALUES LESS THAN (2168), +PARTITION p271 VALUES LESS THAN (2176), +PARTITION p272 VALUES LESS THAN (2184), +PARTITION p273 VALUES LESS THAN (2192), +PARTITION p274 VALUES LESS THAN (2200), +PARTITION p275 VALUES LESS THAN (2208), +PARTITION p276 VALUES LESS THAN (2216), +PARTITION p277 VALUES LESS THAN (2224), +PARTITION p278 VALUES LESS THAN (2232), +PARTITION p279 VALUES LESS THAN (2240), +PARTITION p280 VALUES LESS THAN (2248), +PARTITION p281 VALUES LESS THAN (2256), +PARTITION p282 VALUES LESS THAN (2264), +PARTITION p283 VALUES LESS THAN (2272), +PARTITION p284 VALUES LESS THAN (2280), +PARTITION p285 VALUES LESS THAN (2288), +PARTITION p286 VALUES LESS THAN (2296), +PARTITION p287 VALUES LESS THAN (2304), +PARTITION p288 VALUES LESS THAN (2312), +PARTITION p289 VALUES LESS THAN (2320), +PARTITION p290 VALUES LESS THAN (2328), +PARTITION p291 VALUES LESS THAN (2336), +PARTITION p292 VALUES LESS THAN (2344), +PARTITION p293 VALUES LESS THAN (2352), +PARTITION p294 VALUES LESS THAN (2360), +PARTITION p295 VALUES LESS THAN (2368), +PARTITION p296 VALUES LESS THAN (2376), +PARTITION p297 VALUES LESS THAN (2384), +PARTITION p298 VALUES LESS THAN (2392), +PARTITION p299 VALUES LESS THAN (2400), +PARTITION p300 VALUES LESS THAN (2408), +PARTITION p301 VALUES LESS THAN (2416), +PARTITION p302 VALUES LESS THAN (2424), +PARTITION p303 VALUES LESS THAN (2432), +PARTITION p304 VALUES LESS THAN (2440), +PARTITION p305 VALUES LESS THAN (2448), +PARTITION p306 VALUES LESS THAN (2456), +PARTITION p307 VALUES LESS THAN (2464), +PARTITION p308 VALUES LESS THAN (2472), +PARTITION p309 VALUES LESS THAN (2480), +PARTITION p310 VALUES LESS THAN (2488), +PARTITION p311 VALUES LESS THAN (2496), +PARTITION p312 VALUES LESS THAN (2504), +PARTITION p313 VALUES LESS THAN (2512), +PARTITION p314 VALUES LESS THAN (2520), +PARTITION p315 VALUES LESS THAN (2528), +PARTITION p316 VALUES LESS THAN (2536), +PARTITION p317 VALUES LESS THAN (2544), +PARTITION p318 VALUES LESS THAN (2552), +PARTITION p319 VALUES LESS THAN (2560), +PARTITION p320 VALUES LESS THAN (2568), +PARTITION p321 VALUES LESS THAN (2576), +PARTITION p322 VALUES LESS THAN (2584), +PARTITION p323 VALUES LESS THAN (2592), +PARTITION p324 VALUES LESS THAN (2600), +PARTITION p325 VALUES LESS THAN (2608), +PARTITION p326 VALUES LESS THAN (2616), +PARTITION p327 VALUES LESS THAN (2624), +PARTITION p328 VALUES LESS THAN (2632), +PARTITION p329 VALUES LESS THAN (2640), +PARTITION p330 VALUES LESS THAN (2648), +PARTITION p331 VALUES LESS THAN (2656), +PARTITION p332 VALUES LESS THAN (2664), +PARTITION p333 VALUES LESS THAN (2672), +PARTITION p334 VALUES LESS THAN (2680), +PARTITION p335 VALUES LESS THAN (2688), +PARTITION p336 VALUES LESS THAN (2696), +PARTITION p337 VALUES LESS THAN (2704), +PARTITION p338 VALUES LESS THAN (2712), +PARTITION p339 VALUES LESS THAN (2720), +PARTITION p340 VALUES LESS THAN (2728), +PARTITION p341 VALUES LESS THAN (2736), +PARTITION p342 VALUES LESS THAN (2744), +PARTITION p343 VALUES LESS THAN (2752), +PARTITION p344 VALUES LESS THAN (2760), +PARTITION p345 VALUES LESS THAN (2768), +PARTITION p346 VALUES LESS THAN (2776), +PARTITION p347 VALUES LESS THAN (2784), +PARTITION p348 VALUES LESS THAN (2792), +PARTITION p349 VALUES LESS THAN (2800), +PARTITION p350 VALUES LESS THAN (2808), +PARTITION p351 VALUES LESS THAN (2816), +PARTITION p352 VALUES LESS THAN (2824), +PARTITION p353 VALUES LESS THAN (2832), +PARTITION p354 VALUES LESS THAN (2840), +PARTITION p355 VALUES LESS THAN (2848), +PARTITION p356 VALUES LESS THAN (2856), +PARTITION p357 VALUES LESS THAN (2864), +PARTITION p358 VALUES LESS THAN (2872), +PARTITION p359 VALUES LESS THAN (2880), +PARTITION p360 VALUES LESS THAN (2888), +PARTITION p361 VALUES LESS THAN (2896), +PARTITION p362 VALUES LESS THAN (2904), +PARTITION p363 VALUES LESS THAN (2912), +PARTITION p364 VALUES LESS THAN (2920), +PARTITION p365 VALUES LESS THAN (2928), +PARTITION p366 VALUES LESS THAN (2936), +PARTITION p367 VALUES LESS THAN (2944), +PARTITION p368 VALUES LESS THAN (2952), +PARTITION p369 VALUES LESS THAN (2960), +PARTITION p370 VALUES LESS THAN (2968), +PARTITION p371 VALUES LESS THAN (2976), +PARTITION p372 VALUES LESS THAN (2984), +PARTITION p373 VALUES LESS THAN (2992), +PARTITION p374 VALUES LESS THAN (3000), +PARTITION p375 VALUES LESS THAN (3008), +PARTITION p376 VALUES LESS THAN (3016), +PARTITION p377 VALUES LESS THAN (3024), +PARTITION p378 VALUES LESS THAN (3032), +PARTITION p379 VALUES LESS THAN (3040), +PARTITION p380 VALUES LESS THAN (3048), +PARTITION p381 VALUES LESS THAN (3056), +PARTITION p382 VALUES LESS THAN (3064), +PARTITION p383 VALUES LESS THAN (3072), +PARTITION p384 VALUES LESS THAN (3080), +PARTITION p385 VALUES LESS THAN (3088), +PARTITION p386 VALUES LESS THAN (3096), +PARTITION p387 VALUES LESS THAN (3104), +PARTITION p388 VALUES LESS THAN (3112), +PARTITION p389 VALUES LESS THAN (3120), +PARTITION p390 VALUES LESS THAN (3128), +PARTITION p391 VALUES LESS THAN (3136), +PARTITION p392 VALUES LESS THAN (3144), +PARTITION p393 VALUES LESS THAN (3152), +PARTITION p394 VALUES LESS THAN (3160), +PARTITION p395 VALUES LESS THAN (3168), +PARTITION p396 VALUES LESS THAN (3176), +PARTITION p397 VALUES LESS THAN (3184), +PARTITION p398 VALUES LESS THAN (3192), +PARTITION p399 VALUES LESS THAN (3200), +PARTITION p400 VALUES LESS THAN (3208), +PARTITION p401 VALUES LESS THAN (3216), +PARTITION p402 VALUES LESS THAN (3224), +PARTITION p403 VALUES LESS THAN (3232), +PARTITION p404 VALUES LESS THAN (3240), +PARTITION p405 VALUES LESS THAN (3248), +PARTITION p406 VALUES LESS THAN (3256), +PARTITION p407 VALUES LESS THAN (3264), +PARTITION p408 VALUES LESS THAN (3272), +PARTITION p409 VALUES LESS THAN (3280), +PARTITION p410 VALUES LESS THAN (3288), +PARTITION p411 VALUES LESS THAN (3296), +PARTITION p412 VALUES LESS THAN (3304), +PARTITION p413 VALUES LESS THAN (3312), +PARTITION p414 VALUES LESS THAN (3320), +PARTITION p415 VALUES LESS THAN (3328), +PARTITION p416 VALUES LESS THAN (3336), +PARTITION p417 VALUES LESS THAN (3344), +PARTITION p418 VALUES LESS THAN (3352), +PARTITION p419 VALUES LESS THAN (3360), +PARTITION p420 VALUES LESS THAN (3368), +PARTITION p421 VALUES LESS THAN (3376), +PARTITION p422 VALUES LESS THAN (3384), +PARTITION p423 VALUES LESS THAN (3392), +PARTITION p424 VALUES LESS THAN (3400), +PARTITION p425 VALUES LESS THAN (3408), +PARTITION p426 VALUES LESS THAN (3416), +PARTITION p427 VALUES LESS THAN (3424), +PARTITION p428 VALUES LESS THAN (3432), +PARTITION p429 VALUES LESS THAN (3440), +PARTITION p430 VALUES LESS THAN (3448), +PARTITION p431 VALUES LESS THAN (3456), +PARTITION p432 VALUES LESS THAN (3464), +PARTITION p433 VALUES LESS THAN (3472), +PARTITION p434 VALUES LESS THAN (3480), +PARTITION p435 VALUES LESS THAN (3488), +PARTITION p436 VALUES LESS THAN (3496), +PARTITION p437 VALUES LESS THAN (3504), +PARTITION p438 VALUES LESS THAN (3512), +PARTITION p439 VALUES LESS THAN (3520), +PARTITION p440 VALUES LESS THAN (3528), +PARTITION p441 VALUES LESS THAN (3536), +PARTITION p442 VALUES LESS THAN (3544), +PARTITION p443 VALUES LESS THAN (3552), +PARTITION p444 VALUES LESS THAN (3560), +PARTITION p445 VALUES LESS THAN (3568), +PARTITION p446 VALUES LESS THAN (3576), +PARTITION p447 VALUES LESS THAN (3584), +PARTITION p448 VALUES LESS THAN (3592), +PARTITION p449 VALUES LESS THAN (3600), +PARTITION p450 VALUES LESS THAN (3608), +PARTITION p451 VALUES LESS THAN (3616), +PARTITION p452 VALUES LESS THAN (3624), +PARTITION p453 VALUES LESS THAN (3632), +PARTITION p454 VALUES LESS THAN (3640), +PARTITION p455 VALUES LESS THAN (3648), +PARTITION p456 VALUES LESS THAN (3656), +PARTITION p457 VALUES LESS THAN (3664), +PARTITION p458 VALUES LESS THAN (3672), +PARTITION p459 VALUES LESS THAN (3680), +PARTITION p460 VALUES LESS THAN (3688), +PARTITION p461 VALUES LESS THAN (3696), +PARTITION p462 VALUES LESS THAN (3704), +PARTITION p463 VALUES LESS THAN (3712), +PARTITION p464 VALUES LESS THAN (3720), +PARTITION p465 VALUES LESS THAN (3728), +PARTITION p466 VALUES LESS THAN (3736), +PARTITION p467 VALUES LESS THAN (3744), +PARTITION p468 VALUES LESS THAN (3752), +PARTITION p469 VALUES LESS THAN (3760), +PARTITION p470 VALUES LESS THAN (3768), +PARTITION p471 VALUES LESS THAN (3776), +PARTITION p472 VALUES LESS THAN (3784), +PARTITION p473 VALUES LESS THAN (3792), +PARTITION p474 VALUES LESS THAN (3800), +PARTITION p475 VALUES LESS THAN (3808), +PARTITION p476 VALUES LESS THAN (3816), +PARTITION p477 VALUES LESS THAN (3824), +PARTITION p478 VALUES LESS THAN (3832), +PARTITION p479 VALUES LESS THAN (3840), +PARTITION p480 VALUES LESS THAN (3848), +PARTITION p481 VALUES LESS THAN (3856), +PARTITION p482 VALUES LESS THAN (3864), +PARTITION p483 VALUES LESS THAN (3872), +PARTITION p484 VALUES LESS THAN (3880), +PARTITION p485 VALUES LESS THAN (3888), +PARTITION p486 VALUES LESS THAN (3896), +PARTITION p487 VALUES LESS THAN (3904), +PARTITION p488 VALUES LESS THAN (3912), +PARTITION p489 VALUES LESS THAN (3920), +PARTITION p490 VALUES LESS THAN (3928), +PARTITION p491 VALUES LESS THAN (3936), +PARTITION p492 VALUES LESS THAN (3944), +PARTITION p493 VALUES LESS THAN (3952), +PARTITION p494 VALUES LESS THAN (3960), +PARTITION p495 VALUES LESS THAN (3968), +PARTITION p496 VALUES LESS THAN (3976), +PARTITION p497 VALUES LESS THAN (3984), +PARTITION p498 VALUES LESS THAN (3992), +PARTITION p499 VALUES LESS THAN (4000), +PARTITION p500 VALUES LESS THAN (4008), +PARTITION p501 VALUES LESS THAN (4016), +PARTITION p502 VALUES LESS THAN (4024), +PARTITION p503 VALUES LESS THAN (4032), +PARTITION p504 VALUES LESS THAN (4040), +PARTITION p505 VALUES LESS THAN (4048), +PARTITION p506 VALUES LESS THAN (4056), +PARTITION p507 VALUES LESS THAN (4064), +PARTITION p508 VALUES LESS THAN (4072), +PARTITION p509 VALUES LESS THAN (4080), +PARTITION p510 VALUES LESS THAN (4088), +PARTITION p511 VALUES LESS THAN (4096), +PARTITION p512 VALUES LESS THAN (4104), +PARTITION p513 VALUES LESS THAN (4112), +PARTITION p514 VALUES LESS THAN (4120), +PARTITION p515 VALUES LESS THAN (4128), +PARTITION p516 VALUES LESS THAN (4136), +PARTITION p517 VALUES LESS THAN (4144), +PARTITION p518 VALUES LESS THAN (4152), +PARTITION p519 VALUES LESS THAN (4160), +PARTITION p520 VALUES LESS THAN (4168), +PARTITION p521 VALUES LESS THAN (4176), +PARTITION p522 VALUES LESS THAN (4184), +PARTITION p523 VALUES LESS THAN (4192), +PARTITION p524 VALUES LESS THAN (4200), +PARTITION p525 VALUES LESS THAN (4208), +PARTITION p526 VALUES LESS THAN (4216), +PARTITION p527 VALUES LESS THAN (4224), +PARTITION p528 VALUES LESS THAN (4232), +PARTITION p529 VALUES LESS THAN (4240), +PARTITION p530 VALUES LESS THAN (4248), +PARTITION p531 VALUES LESS THAN (4256), +PARTITION p532 VALUES LESS THAN (4264), +PARTITION p533 VALUES LESS THAN (4272), +PARTITION p534 VALUES LESS THAN (4280), +PARTITION p535 VALUES LESS THAN (4288), +PARTITION p536 VALUES LESS THAN (4296), +PARTITION p537 VALUES LESS THAN (4304), +PARTITION p538 VALUES LESS THAN (4312), +PARTITION p539 VALUES LESS THAN (4320), +PARTITION p540 VALUES LESS THAN (4328), +PARTITION p541 VALUES LESS THAN (4336), +PARTITION p542 VALUES LESS THAN (4344), +PARTITION p543 VALUES LESS THAN (4352), +PARTITION p544 VALUES LESS THAN (4360), +PARTITION p545 VALUES LESS THAN (4368), +PARTITION p546 VALUES LESS THAN (4376), +PARTITION p547 VALUES LESS THAN (4384), +PARTITION p548 VALUES LESS THAN (4392), +PARTITION p549 VALUES LESS THAN (4400), +PARTITION p550 VALUES LESS THAN (4408), +PARTITION p551 VALUES LESS THAN (4416), +PARTITION p552 VALUES LESS THAN (4424), +PARTITION p553 VALUES LESS THAN (4432), +PARTITION p554 VALUES LESS THAN (4440), +PARTITION p555 VALUES LESS THAN (4448), +PARTITION p556 VALUES LESS THAN (4456), +PARTITION p557 VALUES LESS THAN (4464), +PARTITION p558 VALUES LESS THAN (4472), +PARTITION p559 VALUES LESS THAN (4480), +PARTITION p560 VALUES LESS THAN (4488), +PARTITION p561 VALUES LESS THAN (4496), +PARTITION p562 VALUES LESS THAN (4504), +PARTITION p563 VALUES LESS THAN (4512), +PARTITION p564 VALUES LESS THAN (4520), +PARTITION p565 VALUES LESS THAN (4528), +PARTITION p566 VALUES LESS THAN (4536), +PARTITION p567 VALUES LESS THAN (4544), +PARTITION p568 VALUES LESS THAN (4552), +PARTITION p569 VALUES LESS THAN (4560), +PARTITION p570 VALUES LESS THAN (4568), +PARTITION p571 VALUES LESS THAN (4576), +PARTITION p572 VALUES LESS THAN (4584), +PARTITION p573 VALUES LESS THAN (4592), +PARTITION p574 VALUES LESS THAN (4600), +PARTITION p575 VALUES LESS THAN (4608), +PARTITION p576 VALUES LESS THAN (4616), +PARTITION p577 VALUES LESS THAN (4624), +PARTITION p578 VALUES LESS THAN (4632), +PARTITION p579 VALUES LESS THAN (4640), +PARTITION p580 VALUES LESS THAN (4648), +PARTITION p581 VALUES LESS THAN (4656), +PARTITION p582 VALUES LESS THAN (4664), +PARTITION p583 VALUES LESS THAN (4672), +PARTITION p584 VALUES LESS THAN (4680), +PARTITION p585 VALUES LESS THAN (4688), +PARTITION p586 VALUES LESS THAN (4696), +PARTITION p587 VALUES LESS THAN (4704), +PARTITION p588 VALUES LESS THAN (4712), +PARTITION p589 VALUES LESS THAN (4720), +PARTITION p590 VALUES LESS THAN (4728), +PARTITION p591 VALUES LESS THAN (4736), +PARTITION p592 VALUES LESS THAN (4744), +PARTITION p593 VALUES LESS THAN (4752), +PARTITION p594 VALUES LESS THAN (4760), +PARTITION p595 VALUES LESS THAN (4768), +PARTITION p596 VALUES LESS THAN (4776), +PARTITION p597 VALUES LESS THAN (4784), +PARTITION p598 VALUES LESS THAN (4792), +PARTITION p599 VALUES LESS THAN (4800), +PARTITION p600 VALUES LESS THAN (4808), +PARTITION p601 VALUES LESS THAN (4816), +PARTITION p602 VALUES LESS THAN (4824), +PARTITION p603 VALUES LESS THAN (4832), +PARTITION p604 VALUES LESS THAN (4840), +PARTITION p605 VALUES LESS THAN (4848), +PARTITION p606 VALUES LESS THAN (4856), +PARTITION p607 VALUES LESS THAN (4864), +PARTITION p608 VALUES LESS THAN (4872), +PARTITION p609 VALUES LESS THAN (4880), +PARTITION p610 VALUES LESS THAN (4888), +PARTITION p611 VALUES LESS THAN (4896), +PARTITION p612 VALUES LESS THAN (4904), +PARTITION p613 VALUES LESS THAN (4912), +PARTITION p614 VALUES LESS THAN (4920), +PARTITION p615 VALUES LESS THAN (4928), +PARTITION p616 VALUES LESS THAN (4936), +PARTITION p617 VALUES LESS THAN (4944), +PARTITION p618 VALUES LESS THAN (4952), +PARTITION p619 VALUES LESS THAN (4960), +PARTITION p620 VALUES LESS THAN (4968), +PARTITION p621 VALUES LESS THAN (4976), +PARTITION p622 VALUES LESS THAN (4984), +PARTITION p623 VALUES LESS THAN (4992), +PARTITION p624 VALUES LESS THAN (5000), +PARTITION p625 VALUES LESS THAN (5008), +PARTITION p626 VALUES LESS THAN (5016), +PARTITION p627 VALUES LESS THAN (5024), +PARTITION p628 VALUES LESS THAN (5032), +PARTITION p629 VALUES LESS THAN (5040), +PARTITION p630 VALUES LESS THAN (5048), +PARTITION p631 VALUES LESS THAN (5056), +PARTITION p632 VALUES LESS THAN (5064), +PARTITION p633 VALUES LESS THAN (5072), +PARTITION p634 VALUES LESS THAN (5080), +PARTITION p635 VALUES LESS THAN (5088), +PARTITION p636 VALUES LESS THAN (5096), +PARTITION p637 VALUES LESS THAN (5104), +PARTITION p638 VALUES LESS THAN (5112), +PARTITION p639 VALUES LESS THAN (5120), +PARTITION p640 VALUES LESS THAN (5128), +PARTITION p641 VALUES LESS THAN (5136), +PARTITION p642 VALUES LESS THAN (5144), +PARTITION p643 VALUES LESS THAN (5152), +PARTITION p644 VALUES LESS THAN (5160), +PARTITION p645 VALUES LESS THAN (5168), +PARTITION p646 VALUES LESS THAN (5176), +PARTITION p647 VALUES LESS THAN (5184), +PARTITION p648 VALUES LESS THAN (5192), +PARTITION p649 VALUES LESS THAN (5200), +PARTITION p650 VALUES LESS THAN (5208), +PARTITION p651 VALUES LESS THAN (5216), +PARTITION p652 VALUES LESS THAN (5224), +PARTITION p653 VALUES LESS THAN (5232), +PARTITION p654 VALUES LESS THAN (5240), +PARTITION p655 VALUES LESS THAN (5248), +PARTITION p656 VALUES LESS THAN (5256), +PARTITION p657 VALUES LESS THAN (5264), +PARTITION p658 VALUES LESS THAN (5272), +PARTITION p659 VALUES LESS THAN (5280), +PARTITION p660 VALUES LESS THAN (5288), +PARTITION p661 VALUES LESS THAN (5296), +PARTITION p662 VALUES LESS THAN (5304), +PARTITION p663 VALUES LESS THAN (5312), +PARTITION p664 VALUES LESS THAN (5320), +PARTITION p665 VALUES LESS THAN (5328), +PARTITION p666 VALUES LESS THAN (5336), +PARTITION p667 VALUES LESS THAN (5344), +PARTITION p668 VALUES LESS THAN (5352), +PARTITION p669 VALUES LESS THAN (5360), +PARTITION p670 VALUES LESS THAN (5368), +PARTITION p671 VALUES LESS THAN (5376), +PARTITION p672 VALUES LESS THAN (5384), +PARTITION p673 VALUES LESS THAN (5392), +PARTITION p674 VALUES LESS THAN (5400), +PARTITION p675 VALUES LESS THAN (5408), +PARTITION p676 VALUES LESS THAN (5416), +PARTITION p677 VALUES LESS THAN (5424), +PARTITION p678 VALUES LESS THAN (5432), +PARTITION p679 VALUES LESS THAN (5440), +PARTITION p680 VALUES LESS THAN (5448), +PARTITION p681 VALUES LESS THAN (5456), +PARTITION p682 VALUES LESS THAN (5464), +PARTITION p683 VALUES LESS THAN (5472), +PARTITION p684 VALUES LESS THAN (5480), +PARTITION p685 VALUES LESS THAN (5488), +PARTITION p686 VALUES LESS THAN (5496), +PARTITION p687 VALUES LESS THAN (5504), +PARTITION p688 VALUES LESS THAN (5512), +PARTITION p689 VALUES LESS THAN (5520), +PARTITION p690 VALUES LESS THAN (5528), +PARTITION p691 VALUES LESS THAN (5536), +PARTITION p692 VALUES LESS THAN (5544), +PARTITION p693 VALUES LESS THAN (5552), +PARTITION p694 VALUES LESS THAN (5560), +PARTITION p695 VALUES LESS THAN (5568), +PARTITION p696 VALUES LESS THAN (5576), +PARTITION p697 VALUES LESS THAN (5584), +PARTITION p698 VALUES LESS THAN (5592), +PARTITION p699 VALUES LESS THAN (5600), +PARTITION p700 VALUES LESS THAN (5608), +PARTITION p701 VALUES LESS THAN (5616), +PARTITION p702 VALUES LESS THAN (5624), +PARTITION p703 VALUES LESS THAN (5632), +PARTITION p704 VALUES LESS THAN (5640), +PARTITION p705 VALUES LESS THAN (5648), +PARTITION p706 VALUES LESS THAN (5656), +PARTITION p707 VALUES LESS THAN (5664), +PARTITION p708 VALUES LESS THAN (5672), +PARTITION p709 VALUES LESS THAN (5680), +PARTITION p710 VALUES LESS THAN (5688), +PARTITION p711 VALUES LESS THAN (5696), +PARTITION p712 VALUES LESS THAN (5704), +PARTITION p713 VALUES LESS THAN (5712), +PARTITION p714 VALUES LESS THAN (5720), +PARTITION p715 VALUES LESS THAN (5728), +PARTITION p716 VALUES LESS THAN (5736), +PARTITION p717 VALUES LESS THAN (5744), +PARTITION p718 VALUES LESS THAN (5752), +PARTITION p719 VALUES LESS THAN (5760), +PARTITION p720 VALUES LESS THAN (5768), +PARTITION p721 VALUES LESS THAN (5776), +PARTITION p722 VALUES LESS THAN (5784), +PARTITION p723 VALUES LESS THAN (5792), +PARTITION p724 VALUES LESS THAN (5800), +PARTITION p725 VALUES LESS THAN (5808), +PARTITION p726 VALUES LESS THAN (5816), +PARTITION p727 VALUES LESS THAN (5824), +PARTITION p728 VALUES LESS THAN (5832), +PARTITION p729 VALUES LESS THAN (5840), +PARTITION p730 VALUES LESS THAN (5848), +PARTITION p731 VALUES LESS THAN (5856), +PARTITION p732 VALUES LESS THAN (5864), +PARTITION p733 VALUES LESS THAN (5872), +PARTITION p734 VALUES LESS THAN (5880), +PARTITION p735 VALUES LESS THAN (5888), +PARTITION p736 VALUES LESS THAN (5896), +PARTITION p737 VALUES LESS THAN (5904), +PARTITION p738 VALUES LESS THAN (5912), +PARTITION p739 VALUES LESS THAN (5920), +PARTITION p740 VALUES LESS THAN (5928), +PARTITION p741 VALUES LESS THAN (5936), +PARTITION p742 VALUES LESS THAN (5944), +PARTITION p743 VALUES LESS THAN (5952), +PARTITION p744 VALUES LESS THAN (5960), +PARTITION p745 VALUES LESS THAN (5968), +PARTITION p746 VALUES LESS THAN (5976), +PARTITION p747 VALUES LESS THAN (5984), +PARTITION p748 VALUES LESS THAN (5992), +PARTITION p749 VALUES LESS THAN (6000), +PARTITION p750 VALUES LESS THAN (6008), +PARTITION p751 VALUES LESS THAN (6016), +PARTITION p752 VALUES LESS THAN (6024), +PARTITION p753 VALUES LESS THAN (6032), +PARTITION p754 VALUES LESS THAN (6040), +PARTITION p755 VALUES LESS THAN (6048), +PARTITION p756 VALUES LESS THAN (6056), +PARTITION p757 VALUES LESS THAN (6064), +PARTITION p758 VALUES LESS THAN (6072), +PARTITION p759 VALUES LESS THAN (6080), +PARTITION p760 VALUES LESS THAN (6088), +PARTITION p761 VALUES LESS THAN (6096), +PARTITION p762 VALUES LESS THAN (6104), +PARTITION p763 VALUES LESS THAN (6112), +PARTITION p764 VALUES LESS THAN (6120), +PARTITION p765 VALUES LESS THAN (6128), +PARTITION p766 VALUES LESS THAN (6136), +PARTITION p767 VALUES LESS THAN (6144), +PARTITION p768 VALUES LESS THAN (6152), +PARTITION p769 VALUES LESS THAN (6160), +PARTITION p770 VALUES LESS THAN (6168), +PARTITION p771 VALUES LESS THAN (6176), +PARTITION p772 VALUES LESS THAN (6184), +PARTITION p773 VALUES LESS THAN (6192), +PARTITION p774 VALUES LESS THAN (6200), +PARTITION p775 VALUES LESS THAN (6208), +PARTITION p776 VALUES LESS THAN (6216), +PARTITION p777 VALUES LESS THAN (6224), +PARTITION p778 VALUES LESS THAN (6232), +PARTITION p779 VALUES LESS THAN (6240), +PARTITION p780 VALUES LESS THAN (6248), +PARTITION p781 VALUES LESS THAN (6256), +PARTITION p782 VALUES LESS THAN (6264), +PARTITION p783 VALUES LESS THAN (6272), +PARTITION p784 VALUES LESS THAN (6280), +PARTITION p785 VALUES LESS THAN (6288), +PARTITION p786 VALUES LESS THAN (6296), +PARTITION p787 VALUES LESS THAN (6304), +PARTITION p788 VALUES LESS THAN (6312), +PARTITION p789 VALUES LESS THAN (6320), +PARTITION p790 VALUES LESS THAN (6328), +PARTITION p791 VALUES LESS THAN (6336), +PARTITION p792 VALUES LESS THAN (6344), +PARTITION p793 VALUES LESS THAN (6352), +PARTITION p794 VALUES LESS THAN (6360), +PARTITION p795 VALUES LESS THAN (6368), +PARTITION p796 VALUES LESS THAN (6376), +PARTITION p797 VALUES LESS THAN (6384), +PARTITION p798 VALUES LESS THAN (6392), +PARTITION p799 VALUES LESS THAN (6400), +PARTITION p800 VALUES LESS THAN (6408), +PARTITION p801 VALUES LESS THAN (6416), +PARTITION p802 VALUES LESS THAN (6424), +PARTITION p803 VALUES LESS THAN (6432), +PARTITION p804 VALUES LESS THAN (6440), +PARTITION p805 VALUES LESS THAN (6448), +PARTITION p806 VALUES LESS THAN (6456), +PARTITION p807 VALUES LESS THAN (6464), +PARTITION p808 VALUES LESS THAN (6472), +PARTITION p809 VALUES LESS THAN (6480), +PARTITION p810 VALUES LESS THAN (6488), +PARTITION p811 VALUES LESS THAN (6496), +PARTITION p812 VALUES LESS THAN (6504), +PARTITION p813 VALUES LESS THAN (6512), +PARTITION p814 VALUES LESS THAN (6520), +PARTITION p815 VALUES LESS THAN (6528), +PARTITION p816 VALUES LESS THAN (6536), +PARTITION p817 VALUES LESS THAN (6544), +PARTITION p818 VALUES LESS THAN (6552), +PARTITION p819 VALUES LESS THAN (6560), +PARTITION p820 VALUES LESS THAN (6568), +PARTITION p821 VALUES LESS THAN (6576), +PARTITION p822 VALUES LESS THAN (6584), +PARTITION p823 VALUES LESS THAN (6592), +PARTITION p824 VALUES LESS THAN (6600), +PARTITION p825 VALUES LESS THAN (6608), +PARTITION p826 VALUES LESS THAN (6616), +PARTITION p827 VALUES LESS THAN (6624), +PARTITION p828 VALUES LESS THAN (6632), +PARTITION p829 VALUES LESS THAN (6640), +PARTITION p830 VALUES LESS THAN (6648), +PARTITION p831 VALUES LESS THAN (6656), +PARTITION p832 VALUES LESS THAN (6664), +PARTITION p833 VALUES LESS THAN (6672), +PARTITION p834 VALUES LESS THAN (6680), +PARTITION p835 VALUES LESS THAN (6688), +PARTITION p836 VALUES LESS THAN (6696), +PARTITION p837 VALUES LESS THAN (6704), +PARTITION p838 VALUES LESS THAN (6712), +PARTITION p839 VALUES LESS THAN (6720), +PARTITION p840 VALUES LESS THAN (6728), +PARTITION p841 VALUES LESS THAN (6736), +PARTITION p842 VALUES LESS THAN (6744), +PARTITION p843 VALUES LESS THAN (6752), +PARTITION p844 VALUES LESS THAN (6760), +PARTITION p845 VALUES LESS THAN (6768), +PARTITION p846 VALUES LESS THAN (6776), +PARTITION p847 VALUES LESS THAN (6784), +PARTITION p848 VALUES LESS THAN (6792), +PARTITION p849 VALUES LESS THAN (6800), +PARTITION p850 VALUES LESS THAN (6808), +PARTITION p851 VALUES LESS THAN (6816), +PARTITION p852 VALUES LESS THAN (6824), +PARTITION p853 VALUES LESS THAN (6832), +PARTITION p854 VALUES LESS THAN (6840), +PARTITION p855 VALUES LESS THAN (6848), +PARTITION p856 VALUES LESS THAN (6856), +PARTITION p857 VALUES LESS THAN (6864), +PARTITION p858 VALUES LESS THAN (6872), +PARTITION p859 VALUES LESS THAN (6880), +PARTITION p860 VALUES LESS THAN (6888), +PARTITION p861 VALUES LESS THAN (6896), +PARTITION p862 VALUES LESS THAN (6904), +PARTITION p863 VALUES LESS THAN (6912), +PARTITION p864 VALUES LESS THAN (6920), +PARTITION p865 VALUES LESS THAN (6928), +PARTITION p866 VALUES LESS THAN (6936), +PARTITION p867 VALUES LESS THAN (6944), +PARTITION p868 VALUES LESS THAN (6952), +PARTITION p869 VALUES LESS THAN (6960), +PARTITION p870 VALUES LESS THAN (6968), +PARTITION p871 VALUES LESS THAN (6976), +PARTITION p872 VALUES LESS THAN (6984), +PARTITION p873 VALUES LESS THAN (6992), +PARTITION p874 VALUES LESS THAN (7000), +PARTITION p875 VALUES LESS THAN (7008), +PARTITION p876 VALUES LESS THAN (7016), +PARTITION p877 VALUES LESS THAN (7024), +PARTITION p878 VALUES LESS THAN (7032), +PARTITION p879 VALUES LESS THAN (7040), +PARTITION p880 VALUES LESS THAN (7048), +PARTITION p881 VALUES LESS THAN (7056), +PARTITION p882 VALUES LESS THAN (7064), +PARTITION p883 VALUES LESS THAN (7072), +PARTITION p884 VALUES LESS THAN (7080), +PARTITION p885 VALUES LESS THAN (7088), +PARTITION p886 VALUES LESS THAN (7096), +PARTITION p887 VALUES LESS THAN (7104), +PARTITION p888 VALUES LESS THAN (7112), +PARTITION p889 VALUES LESS THAN (7120), +PARTITION p890 VALUES LESS THAN (7128), +PARTITION p891 VALUES LESS THAN (7136), +PARTITION p892 VALUES LESS THAN (7144), +PARTITION p893 VALUES LESS THAN (7152), +PARTITION p894 VALUES LESS THAN (7160), +PARTITION p895 VALUES LESS THAN (7168), +PARTITION p896 VALUES LESS THAN (7176), +PARTITION p897 VALUES LESS THAN (7184), +PARTITION p898 VALUES LESS THAN (7192), +PARTITION p899 VALUES LESS THAN (7200), +PARTITION p900 VALUES LESS THAN (7208), +PARTITION p901 VALUES LESS THAN (7216), +PARTITION p902 VALUES LESS THAN (7224), +PARTITION p903 VALUES LESS THAN (7232), +PARTITION p904 VALUES LESS THAN (7240), +PARTITION p905 VALUES LESS THAN (7248), +PARTITION p906 VALUES LESS THAN (7256), +PARTITION p907 VALUES LESS THAN (7264), +PARTITION p908 VALUES LESS THAN (7272), +PARTITION p909 VALUES LESS THAN (7280), +PARTITION p910 VALUES LESS THAN (7288), +PARTITION p911 VALUES LESS THAN (7296), +PARTITION p912 VALUES LESS THAN (7304), +PARTITION p913 VALUES LESS THAN (7312), +PARTITION p914 VALUES LESS THAN (7320), +PARTITION p915 VALUES LESS THAN (7328), +PARTITION p916 VALUES LESS THAN (7336), +PARTITION p917 VALUES LESS THAN (7344), +PARTITION p918 VALUES LESS THAN (7352), +PARTITION p919 VALUES LESS THAN (7360), +PARTITION p920 VALUES LESS THAN (7368), +PARTITION p921 VALUES LESS THAN (7376), +PARTITION p922 VALUES LESS THAN (7384), +PARTITION p923 VALUES LESS THAN (7392), +PARTITION p924 VALUES LESS THAN (7400), +PARTITION p925 VALUES LESS THAN (7408), +PARTITION p926 VALUES LESS THAN (7416), +PARTITION p927 VALUES LESS THAN (7424), +PARTITION p928 VALUES LESS THAN (7432), +PARTITION p929 VALUES LESS THAN (7440), +PARTITION p930 VALUES LESS THAN (7448), +PARTITION p931 VALUES LESS THAN (7456), +PARTITION p932 VALUES LESS THAN (7464), +PARTITION p933 VALUES LESS THAN (7472), +PARTITION p934 VALUES LESS THAN (7480), +PARTITION p935 VALUES LESS THAN (7488), +PARTITION p936 VALUES LESS THAN (7496), +PARTITION p937 VALUES LESS THAN (7504), +PARTITION p938 VALUES LESS THAN (7512), +PARTITION p939 VALUES LESS THAN (7520), +PARTITION p940 VALUES LESS THAN (7528), +PARTITION p941 VALUES LESS THAN (7536), +PARTITION p942 VALUES LESS THAN (7544), +PARTITION p943 VALUES LESS THAN (7552), +PARTITION p944 VALUES LESS THAN (7560), +PARTITION p945 VALUES LESS THAN (7568), +PARTITION p946 VALUES LESS THAN (7576), +PARTITION p947 VALUES LESS THAN (7584), +PARTITION p948 VALUES LESS THAN (7592), +PARTITION p949 VALUES LESS THAN (7600), +PARTITION p950 VALUES LESS THAN (7608), +PARTITION p951 VALUES LESS THAN (7616), +PARTITION p952 VALUES LESS THAN (7624), +PARTITION p953 VALUES LESS THAN (7632), +PARTITION p954 VALUES LESS THAN (7640), +PARTITION p955 VALUES LESS THAN (7648), +PARTITION p956 VALUES LESS THAN (7656), +PARTITION p957 VALUES LESS THAN (7664), +PARTITION p958 VALUES LESS THAN (7672), +PARTITION p959 VALUES LESS THAN (7680), +PARTITION p960 VALUES LESS THAN (7688), +PARTITION p961 VALUES LESS THAN (7696), +PARTITION p962 VALUES LESS THAN (7704), +PARTITION p963 VALUES LESS THAN (7712), +PARTITION p964 VALUES LESS THAN (7720), +PARTITION p965 VALUES LESS THAN (7728), +PARTITION p966 VALUES LESS THAN (7736), +PARTITION p967 VALUES LESS THAN (7744), +PARTITION p968 VALUES LESS THAN (7752), +PARTITION p969 VALUES LESS THAN (7760), +PARTITION p970 VALUES LESS THAN (7768), +PARTITION p971 VALUES LESS THAN (7776), +PARTITION p972 VALUES LESS THAN (7784), +PARTITION p973 VALUES LESS THAN (7792), +PARTITION p974 VALUES LESS THAN (7800), +PARTITION p975 VALUES LESS THAN (7808), +PARTITION p976 VALUES LESS THAN (7816), +PARTITION p977 VALUES LESS THAN (7824), +PARTITION p978 VALUES LESS THAN (7832), +PARTITION p979 VALUES LESS THAN (7840), +PARTITION p980 VALUES LESS THAN (7848), +PARTITION p981 VALUES LESS THAN (7856), +PARTITION p982 VALUES LESS THAN (7864), +PARTITION p983 VALUES LESS THAN (7872), +PARTITION p984 VALUES LESS THAN (7880), +PARTITION p985 VALUES LESS THAN (7888), +PARTITION p986 VALUES LESS THAN (7896), +PARTITION p987 VALUES LESS THAN (7904), +PARTITION p988 VALUES LESS THAN (7912), +PARTITION p989 VALUES LESS THAN (7920), +PARTITION p990 VALUES LESS THAN (7928), +PARTITION p991 VALUES LESS THAN (7936), +PARTITION p992 VALUES LESS THAN (7944), +PARTITION p993 VALUES LESS THAN (7952), +PARTITION p994 VALUES LESS THAN (7960), +PARTITION p995 VALUES LESS THAN (7968), +PARTITION p996 VALUES LESS THAN (7976), +PARTITION p997 VALUES LESS THAN (7984), +PARTITION p998 VALUES LESS THAN (7992), +PARTITION p999 VALUES LESS THAN (8000), +PARTITION p1000 VALUES LESS THAN (8008), +PARTITION p1001 VALUES LESS THAN (8016), +PARTITION p1002 VALUES LESS THAN (8024), +PARTITION p1003 VALUES LESS THAN (8032), +PARTITION p1004 VALUES LESS THAN (8040), +PARTITION p1005 VALUES LESS THAN (8048), +PARTITION p1006 VALUES LESS THAN (8056), +PARTITION p1007 VALUES LESS THAN (8064), +PARTITION p1008 VALUES LESS THAN (8072), +PARTITION p1009 VALUES LESS THAN (8080), +PARTITION p1010 VALUES LESS THAN (8088), +PARTITION p1011 VALUES LESS THAN (8096), +PARTITION p1012 VALUES LESS THAN (8104), +PARTITION p1013 VALUES LESS THAN (8112), +PARTITION p1014 VALUES LESS THAN (8120), +PARTITION p1015 VALUES LESS THAN (8128), +PARTITION p1016 VALUES LESS THAN (8136), +PARTITION p1017 VALUES LESS THAN (8144), +PARTITION p1018 VALUES LESS THAN (8152), +PARTITION p1019 VALUES LESS THAN (8160), +PARTITION p1020 VALUES LESS THAN (8168), +PARTITION p1021 VALUES LESS THAN (8176), +PARTITION p1022 VALUES LESS THAN (8184), +PARTITION p1023 VALUES LESS THAN (8192), +PARTITION p1024 VALUES LESS THAN (8200), +PARTITION p1025 VALUES LESS THAN (8208), +PARTITION p1026 VALUES LESS THAN (8216), +PARTITION p1027 VALUES LESS THAN (8224), +PARTITION p1028 VALUES LESS THAN (8232), +PARTITION p1029 VALUES LESS THAN (8240), +PARTITION p1030 VALUES LESS THAN (8248), +PARTITION p1031 VALUES LESS THAN (8256), +PARTITION p1032 VALUES LESS THAN (8264), +PARTITION p1033 VALUES LESS THAN (8272), +PARTITION p1034 VALUES LESS THAN (8280), +PARTITION p1035 VALUES LESS THAN (8288), +PARTITION p1036 VALUES LESS THAN (8296), +PARTITION p1037 VALUES LESS THAN (8304), +PARTITION p1038 VALUES LESS THAN (8312), +PARTITION p1039 VALUES LESS THAN (8320), +PARTITION p1040 VALUES LESS THAN (8328), +PARTITION p1041 VALUES LESS THAN (8336), +PARTITION p1042 VALUES LESS THAN (8344), +PARTITION p1043 VALUES LESS THAN (8352), +PARTITION p1044 VALUES LESS THAN (8360), +PARTITION p1045 VALUES LESS THAN (8368), +PARTITION p1046 VALUES LESS THAN (8376), +PARTITION p1047 VALUES LESS THAN (8384), +PARTITION p1048 VALUES LESS THAN (8392), +PARTITION p1049 VALUES LESS THAN (8400), +PARTITION p1050 VALUES LESS THAN (8408), +PARTITION p1051 VALUES LESS THAN (8416), +PARTITION p1052 VALUES LESS THAN (8424), +PARTITION p1053 VALUES LESS THAN (8432), +PARTITION p1054 VALUES LESS THAN (8440), +PARTITION p1055 VALUES LESS THAN (8448), +PARTITION p1056 VALUES LESS THAN (8456), +PARTITION p1057 VALUES LESS THAN (8464), +PARTITION p1058 VALUES LESS THAN (8472), +PARTITION p1059 VALUES LESS THAN (8480), +PARTITION p1060 VALUES LESS THAN (8488), +PARTITION p1061 VALUES LESS THAN (8496), +PARTITION p1062 VALUES LESS THAN (8504), +PARTITION p1063 VALUES LESS THAN (8512), +PARTITION p1064 VALUES LESS THAN (8520), +PARTITION p1065 VALUES LESS THAN (8528), +PARTITION p1066 VALUES LESS THAN (8536), +PARTITION p1067 VALUES LESS THAN (8544), +PARTITION p1068 VALUES LESS THAN (8552), +PARTITION p1069 VALUES LESS THAN (8560), +PARTITION p1070 VALUES LESS THAN (8568), +PARTITION p1071 VALUES LESS THAN (8576), +PARTITION p1072 VALUES LESS THAN (8584), +PARTITION p1073 VALUES LESS THAN (8592), +PARTITION p1074 VALUES LESS THAN (8600), +PARTITION p1075 VALUES LESS THAN (8608), +PARTITION p1076 VALUES LESS THAN (8616), +PARTITION p1077 VALUES LESS THAN (8624), +PARTITION p1078 VALUES LESS THAN (8632), +PARTITION p1079 VALUES LESS THAN (8640), +PARTITION p1080 VALUES LESS THAN (8648), +PARTITION p1081 VALUES LESS THAN (8656), +PARTITION p1082 VALUES LESS THAN (8664), +PARTITION p1083 VALUES LESS THAN (8672), +PARTITION p1084 VALUES LESS THAN (8680), +PARTITION p1085 VALUES LESS THAN (8688), +PARTITION p1086 VALUES LESS THAN (8696), +PARTITION p1087 VALUES LESS THAN (8704), +PARTITION p1088 VALUES LESS THAN (8712), +PARTITION p1089 VALUES LESS THAN (8720), +PARTITION p1090 VALUES LESS THAN (8728), +PARTITION p1091 VALUES LESS THAN (8736), +PARTITION p1092 VALUES LESS THAN (8744), +PARTITION p1093 VALUES LESS THAN (8752), +PARTITION p1094 VALUES LESS THAN (8760), +PARTITION p1095 VALUES LESS THAN (8768), +PARTITION p1096 VALUES LESS THAN (8776), +PARTITION p1097 VALUES LESS THAN (8784), +PARTITION p1098 VALUES LESS THAN (8792), +PARTITION p1099 VALUES LESS THAN (8800), +PARTITION p1100 VALUES LESS THAN (8808), +PARTITION p1101 VALUES LESS THAN (8816), +PARTITION p1102 VALUES LESS THAN (8824), +PARTITION p1103 VALUES LESS THAN (8832), +PARTITION p1104 VALUES LESS THAN (8840), +PARTITION p1105 VALUES LESS THAN (8848), +PARTITION p1106 VALUES LESS THAN (8856), +PARTITION p1107 VALUES LESS THAN (8864), +PARTITION p1108 VALUES LESS THAN (8872), +PARTITION p1109 VALUES LESS THAN (8880), +PARTITION p1110 VALUES LESS THAN (8888), +PARTITION p1111 VALUES LESS THAN (8896), +PARTITION p1112 VALUES LESS THAN (8904), +PARTITION p1113 VALUES LESS THAN (8912), +PARTITION p1114 VALUES LESS THAN (8920), +PARTITION p1115 VALUES LESS THAN (8928), +PARTITION p1116 VALUES LESS THAN (8936), +PARTITION p1117 VALUES LESS THAN (8944), +PARTITION p1118 VALUES LESS THAN (8952), +PARTITION p1119 VALUES LESS THAN (8960), +PARTITION p1120 VALUES LESS THAN (8968), +PARTITION p1121 VALUES LESS THAN (8976), +PARTITION p1122 VALUES LESS THAN (8984), +PARTITION p1123 VALUES LESS THAN (8992), +PARTITION p1124 VALUES LESS THAN (9000), +PARTITION p1125 VALUES LESS THAN (9008), +PARTITION p1126 VALUES LESS THAN (9016), +PARTITION p1127 VALUES LESS THAN (9024), +PARTITION p1128 VALUES LESS THAN (9032), +PARTITION p1129 VALUES LESS THAN (9040), +PARTITION p1130 VALUES LESS THAN (9048), +PARTITION p1131 VALUES LESS THAN (9056), +PARTITION p1132 VALUES LESS THAN (9064), +PARTITION p1133 VALUES LESS THAN (9072), +PARTITION p1134 VALUES LESS THAN (9080), +PARTITION p1135 VALUES LESS THAN (9088), +PARTITION p1136 VALUES LESS THAN (9096), +PARTITION p1137 VALUES LESS THAN (9104), +PARTITION p1138 VALUES LESS THAN (9112), +PARTITION p1139 VALUES LESS THAN (9120), +PARTITION p1140 VALUES LESS THAN (9128), +PARTITION p1141 VALUES LESS THAN (9136), +PARTITION p1142 VALUES LESS THAN (9144), +PARTITION p1143 VALUES LESS THAN (9152), +PARTITION p1144 VALUES LESS THAN (9160), +PARTITION p1145 VALUES LESS THAN (9168), +PARTITION p1146 VALUES LESS THAN (9176), +PARTITION p1147 VALUES LESS THAN (9184), +PARTITION p1148 VALUES LESS THAN (9192), +PARTITION p1149 VALUES LESS THAN (9200), +PARTITION p1150 VALUES LESS THAN (9208), +PARTITION p1151 VALUES LESS THAN (9216), +PARTITION p1152 VALUES LESS THAN (9224), +PARTITION p1153 VALUES LESS THAN (9232), +PARTITION p1154 VALUES LESS THAN (9240), +PARTITION p1155 VALUES LESS THAN (9248), +PARTITION p1156 VALUES LESS THAN (9256), +PARTITION p1157 VALUES LESS THAN (9264), +PARTITION p1158 VALUES LESS THAN (9272), +PARTITION p1159 VALUES LESS THAN (9280), +PARTITION p1160 VALUES LESS THAN (9288), +PARTITION p1161 VALUES LESS THAN (9296), +PARTITION p1162 VALUES LESS THAN (9304), +PARTITION p1163 VALUES LESS THAN (9312), +PARTITION p1164 VALUES LESS THAN (9320), +PARTITION p1165 VALUES LESS THAN (9328), +PARTITION p1166 VALUES LESS THAN (9336), +PARTITION p1167 VALUES LESS THAN (9344), +PARTITION p1168 VALUES LESS THAN (9352), +PARTITION p1169 VALUES LESS THAN (9360), +PARTITION p1170 VALUES LESS THAN (9368), +PARTITION p1171 VALUES LESS THAN (9376), +PARTITION p1172 VALUES LESS THAN (9384), +PARTITION p1173 VALUES LESS THAN (9392), +PARTITION p1174 VALUES LESS THAN (9400), +PARTITION p1175 VALUES LESS THAN (9408), +PARTITION p1176 VALUES LESS THAN (9416), +PARTITION p1177 VALUES LESS THAN (9424), +PARTITION p1178 VALUES LESS THAN (9432), +PARTITION p1179 VALUES LESS THAN (9440), +PARTITION p1180 VALUES LESS THAN (9448), +PARTITION p1181 VALUES LESS THAN (9456), +PARTITION p1182 VALUES LESS THAN (9464), +PARTITION p1183 VALUES LESS THAN (9472), +PARTITION p1184 VALUES LESS THAN (9480), +PARTITION p1185 VALUES LESS THAN (9488), +PARTITION p1186 VALUES LESS THAN (9496), +PARTITION p1187 VALUES LESS THAN (9504), +PARTITION p1188 VALUES LESS THAN (9512), +PARTITION p1189 VALUES LESS THAN (9520), +PARTITION p1190 VALUES LESS THAN (9528), +PARTITION p1191 VALUES LESS THAN (9536), +PARTITION p1192 VALUES LESS THAN (9544), +PARTITION p1193 VALUES LESS THAN (9552), +PARTITION p1194 VALUES LESS THAN (9560), +PARTITION p1195 VALUES LESS THAN (9568), +PARTITION p1196 VALUES LESS THAN (9576), +PARTITION p1197 VALUES LESS THAN (9584), +PARTITION p1198 VALUES LESS THAN (9592), +PARTITION p1199 VALUES LESS THAN (9600), +PARTITION p1200 VALUES LESS THAN (9608), +PARTITION p1201 VALUES LESS THAN (9616), +PARTITION p1202 VALUES LESS THAN (9624), +PARTITION p1203 VALUES LESS THAN (9632), +PARTITION p1204 VALUES LESS THAN (9640), +PARTITION p1205 VALUES LESS THAN (9648), +PARTITION p1206 VALUES LESS THAN (9656), +PARTITION p1207 VALUES LESS THAN (9664), +PARTITION p1208 VALUES LESS THAN (9672), +PARTITION p1209 VALUES LESS THAN (9680), +PARTITION p1210 VALUES LESS THAN (9688), +PARTITION p1211 VALUES LESS THAN (9696), +PARTITION p1212 VALUES LESS THAN (9704), +PARTITION p1213 VALUES LESS THAN (9712), +PARTITION p1214 VALUES LESS THAN (9720), +PARTITION p1215 VALUES LESS THAN (9728), +PARTITION p1216 VALUES LESS THAN (9736), +PARTITION p1217 VALUES LESS THAN (9744), +PARTITION p1218 VALUES LESS THAN (9752), +PARTITION p1219 VALUES LESS THAN (9760), +PARTITION p1220 VALUES LESS THAN (9768), +PARTITION p1221 VALUES LESS THAN (9776), +PARTITION p1222 VALUES LESS THAN (9784), +PARTITION p1223 VALUES LESS THAN (9792), +PARTITION p1224 VALUES LESS THAN (9800), +PARTITION p1225 VALUES LESS THAN (9808), +PARTITION p1226 VALUES LESS THAN (9816), +PARTITION p1227 VALUES LESS THAN (9824), +PARTITION p1228 VALUES LESS THAN (9832), +PARTITION p1229 VALUES LESS THAN (9840), +PARTITION p1230 VALUES LESS THAN (9848), +PARTITION p1231 VALUES LESS THAN (9856), +PARTITION p1232 VALUES LESS THAN (9864), +PARTITION p1233 VALUES LESS THAN (9872), +PARTITION p1234 VALUES LESS THAN (9880), +PARTITION p1235 VALUES LESS THAN (9888), +PARTITION p1236 VALUES LESS THAN (9896), +PARTITION p1237 VALUES LESS THAN (9904), +PARTITION p1238 VALUES LESS THAN (9912), +PARTITION p1239 VALUES LESS THAN (9920), +PARTITION p1240 VALUES LESS THAN (9928), +PARTITION p1241 VALUES LESS THAN (9936), +PARTITION p1242 VALUES LESS THAN (9944), +PARTITION p1243 VALUES LESS THAN (9952), +PARTITION p1244 VALUES LESS THAN (9960), +PARTITION p1245 VALUES LESS THAN (9968), +PARTITION p1246 VALUES LESS THAN (9976), +PARTITION p1247 VALUES LESS THAN (9984), +PARTITION p1248 VALUES LESS THAN (9992), +PARTITION p1249 VALUES LESS THAN (10000), +PARTITION p1250 VALUES LESS THAN (10008), +PARTITION p1251 VALUES LESS THAN (10016), +PARTITION p1252 VALUES LESS THAN (10024), +PARTITION p1253 VALUES LESS THAN (10032), +PARTITION p1254 VALUES LESS THAN (10040), +PARTITION p1255 VALUES LESS THAN (10048), +PARTITION p1256 VALUES LESS THAN (10056), +PARTITION p1257 VALUES LESS THAN (10064), +PARTITION p1258 VALUES LESS THAN (10072), +PARTITION p1259 VALUES LESS THAN (10080), +PARTITION p1260 VALUES LESS THAN (10088), +PARTITION p1261 VALUES LESS THAN (10096), +PARTITION p1262 VALUES LESS THAN (10104), +PARTITION p1263 VALUES LESS THAN (10112), +PARTITION p1264 VALUES LESS THAN (10120), +PARTITION p1265 VALUES LESS THAN (10128), +PARTITION p1266 VALUES LESS THAN (10136), +PARTITION p1267 VALUES LESS THAN (10144), +PARTITION p1268 VALUES LESS THAN (10152), +PARTITION p1269 VALUES LESS THAN (10160), +PARTITION p1270 VALUES LESS THAN (10168), +PARTITION p1271 VALUES LESS THAN (10176), +PARTITION p1272 VALUES LESS THAN (10184), +PARTITION p1273 VALUES LESS THAN (10192), +PARTITION p1274 VALUES LESS THAN (10200), +PARTITION p1275 VALUES LESS THAN (10208), +PARTITION p1276 VALUES LESS THAN (10216), +PARTITION p1277 VALUES LESS THAN (10224), +PARTITION p1278 VALUES LESS THAN (10232), +PARTITION p1279 VALUES LESS THAN (10240), +PARTITION p1280 VALUES LESS THAN (10248), +PARTITION p1281 VALUES LESS THAN (10256), +PARTITION p1282 VALUES LESS THAN (10264), +PARTITION p1283 VALUES LESS THAN (10272), +PARTITION p1284 VALUES LESS THAN (10280), +PARTITION p1285 VALUES LESS THAN (10288), +PARTITION p1286 VALUES LESS THAN (10296), +PARTITION p1287 VALUES LESS THAN (10304), +PARTITION p1288 VALUES LESS THAN (10312), +PARTITION p1289 VALUES LESS THAN (10320), +PARTITION p1290 VALUES LESS THAN (10328), +PARTITION p1291 VALUES LESS THAN (10336), +PARTITION p1292 VALUES LESS THAN (10344), +PARTITION p1293 VALUES LESS THAN (10352), +PARTITION p1294 VALUES LESS THAN (10360), +PARTITION p1295 VALUES LESS THAN (10368), +PARTITION p1296 VALUES LESS THAN (10376), +PARTITION p1297 VALUES LESS THAN (10384), +PARTITION p1298 VALUES LESS THAN (10392), +PARTITION p1299 VALUES LESS THAN (10400), +PARTITION p1300 VALUES LESS THAN (10408), +PARTITION p1301 VALUES LESS THAN (10416), +PARTITION p1302 VALUES LESS THAN (10424), +PARTITION p1303 VALUES LESS THAN (10432), +PARTITION p1304 VALUES LESS THAN (10440), +PARTITION p1305 VALUES LESS THAN (10448), +PARTITION p1306 VALUES LESS THAN (10456), +PARTITION p1307 VALUES LESS THAN (10464), +PARTITION p1308 VALUES LESS THAN (10472), +PARTITION p1309 VALUES LESS THAN (10480), +PARTITION p1310 VALUES LESS THAN (10488), +PARTITION p1311 VALUES LESS THAN (10496), +PARTITION p1312 VALUES LESS THAN (10504), +PARTITION p1313 VALUES LESS THAN (10512), +PARTITION p1314 VALUES LESS THAN (10520), +PARTITION p1315 VALUES LESS THAN (10528), +PARTITION p1316 VALUES LESS THAN (10536), +PARTITION p1317 VALUES LESS THAN (10544), +PARTITION p1318 VALUES LESS THAN (10552), +PARTITION p1319 VALUES LESS THAN (10560), +PARTITION p1320 VALUES LESS THAN (10568), +PARTITION p1321 VALUES LESS THAN (10576), +PARTITION p1322 VALUES LESS THAN (10584), +PARTITION p1323 VALUES LESS THAN (10592), +PARTITION p1324 VALUES LESS THAN (10600), +PARTITION p1325 VALUES LESS THAN (10608), +PARTITION p1326 VALUES LESS THAN (10616), +PARTITION p1327 VALUES LESS THAN (10624), +PARTITION p1328 VALUES LESS THAN (10632), +PARTITION p1329 VALUES LESS THAN (10640), +PARTITION p1330 VALUES LESS THAN (10648), +PARTITION p1331 VALUES LESS THAN (10656), +PARTITION p1332 VALUES LESS THAN (10664), +PARTITION p1333 VALUES LESS THAN (10672), +PARTITION p1334 VALUES LESS THAN (10680), +PARTITION p1335 VALUES LESS THAN (10688), +PARTITION p1336 VALUES LESS THAN (10696), +PARTITION p1337 VALUES LESS THAN (10704), +PARTITION p1338 VALUES LESS THAN (10712), +PARTITION p1339 VALUES LESS THAN (10720), +PARTITION p1340 VALUES LESS THAN (10728), +PARTITION p1341 VALUES LESS THAN (10736), +PARTITION p1342 VALUES LESS THAN (10744), +PARTITION p1343 VALUES LESS THAN (10752), +PARTITION p1344 VALUES LESS THAN (10760), +PARTITION p1345 VALUES LESS THAN (10768), +PARTITION p1346 VALUES LESS THAN (10776), +PARTITION p1347 VALUES LESS THAN (10784), +PARTITION p1348 VALUES LESS THAN (10792), +PARTITION p1349 VALUES LESS THAN (10800), +PARTITION p1350 VALUES LESS THAN (10808), +PARTITION p1351 VALUES LESS THAN (10816), +PARTITION p1352 VALUES LESS THAN (10824), +PARTITION p1353 VALUES LESS THAN (10832), +PARTITION p1354 VALUES LESS THAN (10840), +PARTITION p1355 VALUES LESS THAN (10848), +PARTITION p1356 VALUES LESS THAN (10856), +PARTITION p1357 VALUES LESS THAN (10864), +PARTITION p1358 VALUES LESS THAN (10872), +PARTITION p1359 VALUES LESS THAN (10880), +PARTITION p1360 VALUES LESS THAN (10888), +PARTITION p1361 VALUES LESS THAN (10896), +PARTITION p1362 VALUES LESS THAN (10904), +PARTITION p1363 VALUES LESS THAN (10912), +PARTITION p1364 VALUES LESS THAN (10920), +PARTITION p1365 VALUES LESS THAN (10928), +PARTITION p1366 VALUES LESS THAN (10936), +PARTITION p1367 VALUES LESS THAN (10944), +PARTITION p1368 VALUES LESS THAN (10952), +PARTITION p1369 VALUES LESS THAN (10960), +PARTITION p1370 VALUES LESS THAN (10968), +PARTITION p1371 VALUES LESS THAN (10976), +PARTITION p1372 VALUES LESS THAN (10984), +PARTITION p1373 VALUES LESS THAN (10992), +PARTITION p1374 VALUES LESS THAN (11000), +PARTITION p1375 VALUES LESS THAN (11008), +PARTITION p1376 VALUES LESS THAN (11016), +PARTITION p1377 VALUES LESS THAN (11024), +PARTITION p1378 VALUES LESS THAN (11032), +PARTITION p1379 VALUES LESS THAN (11040), +PARTITION p1380 VALUES LESS THAN (11048), +PARTITION p1381 VALUES LESS THAN (11056), +PARTITION p1382 VALUES LESS THAN (11064), +PARTITION p1383 VALUES LESS THAN (11072), +PARTITION p1384 VALUES LESS THAN (11080), +PARTITION p1385 VALUES LESS THAN (11088), +PARTITION p1386 VALUES LESS THAN (11096), +PARTITION p1387 VALUES LESS THAN (11104), +PARTITION p1388 VALUES LESS THAN (11112), +PARTITION p1389 VALUES LESS THAN (11120), +PARTITION p1390 VALUES LESS THAN (11128), +PARTITION p1391 VALUES LESS THAN (11136), +PARTITION p1392 VALUES LESS THAN (11144), +PARTITION p1393 VALUES LESS THAN (11152), +PARTITION p1394 VALUES LESS THAN (11160), +PARTITION p1395 VALUES LESS THAN (11168), +PARTITION p1396 VALUES LESS THAN (11176), +PARTITION p1397 VALUES LESS THAN (11184), +PARTITION p1398 VALUES LESS THAN (11192), +PARTITION p1399 VALUES LESS THAN (11200), +PARTITION p1400 VALUES LESS THAN (11208), +PARTITION p1401 VALUES LESS THAN (11216), +PARTITION p1402 VALUES LESS THAN (11224), +PARTITION p1403 VALUES LESS THAN (11232), +PARTITION p1404 VALUES LESS THAN (11240), +PARTITION p1405 VALUES LESS THAN (11248), +PARTITION p1406 VALUES LESS THAN (11256), +PARTITION p1407 VALUES LESS THAN (11264), +PARTITION p1408 VALUES LESS THAN (11272), +PARTITION p1409 VALUES LESS THAN (11280), +PARTITION p1410 VALUES LESS THAN (11288), +PARTITION p1411 VALUES LESS THAN (11296), +PARTITION p1412 VALUES LESS THAN (11304), +PARTITION p1413 VALUES LESS THAN (11312), +PARTITION p1414 VALUES LESS THAN (11320), +PARTITION p1415 VALUES LESS THAN (11328), +PARTITION p1416 VALUES LESS THAN (11336), +PARTITION p1417 VALUES LESS THAN (11344), +PARTITION p1418 VALUES LESS THAN (11352), +PARTITION p1419 VALUES LESS THAN (11360), +PARTITION p1420 VALUES LESS THAN (11368), +PARTITION p1421 VALUES LESS THAN (11376), +PARTITION p1422 VALUES LESS THAN (11384), +PARTITION p1423 VALUES LESS THAN (11392), +PARTITION p1424 VALUES LESS THAN (11400), +PARTITION p1425 VALUES LESS THAN (11408), +PARTITION p1426 VALUES LESS THAN (11416), +PARTITION p1427 VALUES LESS THAN (11424), +PARTITION p1428 VALUES LESS THAN (11432), +PARTITION p1429 VALUES LESS THAN (11440), +PARTITION p1430 VALUES LESS THAN (11448), +PARTITION p1431 VALUES LESS THAN (11456), +PARTITION p1432 VALUES LESS THAN (11464), +PARTITION p1433 VALUES LESS THAN (11472), +PARTITION p1434 VALUES LESS THAN (11480), +PARTITION p1435 VALUES LESS THAN (11488), +PARTITION p1436 VALUES LESS THAN (11496), +PARTITION p1437 VALUES LESS THAN (11504), +PARTITION p1438 VALUES LESS THAN (11512), +PARTITION p1439 VALUES LESS THAN (11520), +PARTITION p1440 VALUES LESS THAN (11528), +PARTITION p1441 VALUES LESS THAN (11536), +PARTITION p1442 VALUES LESS THAN (11544), +PARTITION p1443 VALUES LESS THAN (11552), +PARTITION p1444 VALUES LESS THAN (11560), +PARTITION p1445 VALUES LESS THAN (11568), +PARTITION p1446 VALUES LESS THAN (11576), +PARTITION p1447 VALUES LESS THAN (11584), +PARTITION p1448 VALUES LESS THAN (11592), +PARTITION p1449 VALUES LESS THAN (11600), +PARTITION p1450 VALUES LESS THAN (11608), +PARTITION p1451 VALUES LESS THAN (11616), +PARTITION p1452 VALUES LESS THAN (11624), +PARTITION p1453 VALUES LESS THAN (11632), +PARTITION p1454 VALUES LESS THAN (11640), +PARTITION p1455 VALUES LESS THAN (11648), +PARTITION p1456 VALUES LESS THAN (11656), +PARTITION p1457 VALUES LESS THAN (11664), +PARTITION p1458 VALUES LESS THAN (11672), +PARTITION p1459 VALUES LESS THAN (11680), +PARTITION p1460 VALUES LESS THAN (11688), +PARTITION p1461 VALUES LESS THAN (11696), +PARTITION p1462 VALUES LESS THAN (11704), +PARTITION p1463 VALUES LESS THAN (11712), +PARTITION p1464 VALUES LESS THAN (11720), +PARTITION p1465 VALUES LESS THAN (11728), +PARTITION p1466 VALUES LESS THAN (11736), +PARTITION p1467 VALUES LESS THAN (11744), +PARTITION p1468 VALUES LESS THAN (11752), +PARTITION p1469 VALUES LESS THAN (11760), +PARTITION p1470 VALUES LESS THAN (11768), +PARTITION p1471 VALUES LESS THAN (11776), +PARTITION p1472 VALUES LESS THAN (11784), +PARTITION p1473 VALUES LESS THAN (11792), +PARTITION p1474 VALUES LESS THAN (11800), +PARTITION p1475 VALUES LESS THAN (11808), +PARTITION p1476 VALUES LESS THAN (11816), +PARTITION p1477 VALUES LESS THAN (11824), +PARTITION p1478 VALUES LESS THAN (11832), +PARTITION p1479 VALUES LESS THAN (11840), +PARTITION p1480 VALUES LESS THAN (11848), +PARTITION p1481 VALUES LESS THAN (11856), +PARTITION p1482 VALUES LESS THAN (11864), +PARTITION p1483 VALUES LESS THAN (11872), +PARTITION p1484 VALUES LESS THAN (11880), +PARTITION p1485 VALUES LESS THAN (11888), +PARTITION p1486 VALUES LESS THAN (11896), +PARTITION p1487 VALUES LESS THAN (11904), +PARTITION p1488 VALUES LESS THAN (11912), +PARTITION p1489 VALUES LESS THAN (11920), +PARTITION p1490 VALUES LESS THAN (11928), +PARTITION p1491 VALUES LESS THAN (11936), +PARTITION p1492 VALUES LESS THAN (11944), +PARTITION p1493 VALUES LESS THAN (11952), +PARTITION p1494 VALUES LESS THAN (11960), +PARTITION p1495 VALUES LESS THAN (11968), +PARTITION p1496 VALUES LESS THAN (11976), +PARTITION p1497 VALUES LESS THAN (11984), +PARTITION p1498 VALUES LESS THAN (11992), +PARTITION p1499 VALUES LESS THAN (12000), +PARTITION p1500 VALUES LESS THAN (12008), +PARTITION p1501 VALUES LESS THAN (12016), +PARTITION p1502 VALUES LESS THAN (12024), +PARTITION p1503 VALUES LESS THAN (12032), +PARTITION p1504 VALUES LESS THAN (12040), +PARTITION p1505 VALUES LESS THAN (12048), +PARTITION p1506 VALUES LESS THAN (12056), +PARTITION p1507 VALUES LESS THAN (12064), +PARTITION p1508 VALUES LESS THAN (12072), +PARTITION p1509 VALUES LESS THAN (12080), +PARTITION p1510 VALUES LESS THAN (12088), +PARTITION p1511 VALUES LESS THAN (12096), +PARTITION p1512 VALUES LESS THAN (12104), +PARTITION p1513 VALUES LESS THAN (12112), +PARTITION p1514 VALUES LESS THAN (12120), +PARTITION p1515 VALUES LESS THAN (12128), +PARTITION p1516 VALUES LESS THAN (12136), +PARTITION p1517 VALUES LESS THAN (12144), +PARTITION p1518 VALUES LESS THAN (12152), +PARTITION p1519 VALUES LESS THAN (12160), +PARTITION p1520 VALUES LESS THAN (12168), +PARTITION p1521 VALUES LESS THAN (12176), +PARTITION p1522 VALUES LESS THAN (12184), +PARTITION p1523 VALUES LESS THAN (12192), +PARTITION p1524 VALUES LESS THAN (12200), +PARTITION p1525 VALUES LESS THAN (12208), +PARTITION p1526 VALUES LESS THAN (12216), +PARTITION p1527 VALUES LESS THAN (12224), +PARTITION p1528 VALUES LESS THAN (12232), +PARTITION p1529 VALUES LESS THAN (12240), +PARTITION p1530 VALUES LESS THAN (12248), +PARTITION p1531 VALUES LESS THAN (12256), +PARTITION p1532 VALUES LESS THAN (12264), +PARTITION p1533 VALUES LESS THAN (12272), +PARTITION p1534 VALUES LESS THAN (12280), +PARTITION p1535 VALUES LESS THAN (12288), +PARTITION p1536 VALUES LESS THAN (12296), +PARTITION p1537 VALUES LESS THAN (12304), +PARTITION p1538 VALUES LESS THAN (12312), +PARTITION p1539 VALUES LESS THAN (12320), +PARTITION p1540 VALUES LESS THAN (12328), +PARTITION p1541 VALUES LESS THAN (12336), +PARTITION p1542 VALUES LESS THAN (12344), +PARTITION p1543 VALUES LESS THAN (12352), +PARTITION p1544 VALUES LESS THAN (12360), +PARTITION p1545 VALUES LESS THAN (12368), +PARTITION p1546 VALUES LESS THAN (12376), +PARTITION p1547 VALUES LESS THAN (12384), +PARTITION p1548 VALUES LESS THAN (12392), +PARTITION p1549 VALUES LESS THAN (12400), +PARTITION p1550 VALUES LESS THAN (12408), +PARTITION p1551 VALUES LESS THAN (12416), +PARTITION p1552 VALUES LESS THAN (12424), +PARTITION p1553 VALUES LESS THAN (12432), +PARTITION p1554 VALUES LESS THAN (12440), +PARTITION p1555 VALUES LESS THAN (12448), +PARTITION p1556 VALUES LESS THAN (12456), +PARTITION p1557 VALUES LESS THAN (12464), +PARTITION p1558 VALUES LESS THAN (12472), +PARTITION p1559 VALUES LESS THAN (12480), +PARTITION p1560 VALUES LESS THAN (12488), +PARTITION p1561 VALUES LESS THAN (12496), +PARTITION p1562 VALUES LESS THAN (12504), +PARTITION p1563 VALUES LESS THAN (12512), +PARTITION p1564 VALUES LESS THAN (12520), +PARTITION p1565 VALUES LESS THAN (12528), +PARTITION p1566 VALUES LESS THAN (12536), +PARTITION p1567 VALUES LESS THAN (12544), +PARTITION p1568 VALUES LESS THAN (12552), +PARTITION p1569 VALUES LESS THAN (12560), +PARTITION p1570 VALUES LESS THAN (12568), +PARTITION p1571 VALUES LESS THAN (12576), +PARTITION p1572 VALUES LESS THAN (12584), +PARTITION p1573 VALUES LESS THAN (12592), +PARTITION p1574 VALUES LESS THAN (12600), +PARTITION p1575 VALUES LESS THAN (12608), +PARTITION p1576 VALUES LESS THAN (12616), +PARTITION p1577 VALUES LESS THAN (12624), +PARTITION p1578 VALUES LESS THAN (12632), +PARTITION p1579 VALUES LESS THAN (12640), +PARTITION p1580 VALUES LESS THAN (12648), +PARTITION p1581 VALUES LESS THAN (12656), +PARTITION p1582 VALUES LESS THAN (12664), +PARTITION p1583 VALUES LESS THAN (12672), +PARTITION p1584 VALUES LESS THAN (12680), +PARTITION p1585 VALUES LESS THAN (12688), +PARTITION p1586 VALUES LESS THAN (12696), +PARTITION p1587 VALUES LESS THAN (12704), +PARTITION p1588 VALUES LESS THAN (12712), +PARTITION p1589 VALUES LESS THAN (12720), +PARTITION p1590 VALUES LESS THAN (12728), +PARTITION p1591 VALUES LESS THAN (12736), +PARTITION p1592 VALUES LESS THAN (12744), +PARTITION p1593 VALUES LESS THAN (12752), +PARTITION p1594 VALUES LESS THAN (12760), +PARTITION p1595 VALUES LESS THAN (12768), +PARTITION p1596 VALUES LESS THAN (12776), +PARTITION p1597 VALUES LESS THAN (12784), +PARTITION p1598 VALUES LESS THAN (12792), +PARTITION p1599 VALUES LESS THAN (12800), +PARTITION p1600 VALUES LESS THAN (12808), +PARTITION p1601 VALUES LESS THAN (12816), +PARTITION p1602 VALUES LESS THAN (12824), +PARTITION p1603 VALUES LESS THAN (12832), +PARTITION p1604 VALUES LESS THAN (12840), +PARTITION p1605 VALUES LESS THAN (12848), +PARTITION p1606 VALUES LESS THAN (12856), +PARTITION p1607 VALUES LESS THAN (12864), +PARTITION p1608 VALUES LESS THAN (12872), +PARTITION p1609 VALUES LESS THAN (12880), +PARTITION p1610 VALUES LESS THAN (12888), +PARTITION p1611 VALUES LESS THAN (12896), +PARTITION p1612 VALUES LESS THAN (12904), +PARTITION p1613 VALUES LESS THAN (12912), +PARTITION p1614 VALUES LESS THAN (12920), +PARTITION p1615 VALUES LESS THAN (12928), +PARTITION p1616 VALUES LESS THAN (12936), +PARTITION p1617 VALUES LESS THAN (12944), +PARTITION p1618 VALUES LESS THAN (12952), +PARTITION p1619 VALUES LESS THAN (12960), +PARTITION p1620 VALUES LESS THAN (12968), +PARTITION p1621 VALUES LESS THAN (12976), +PARTITION p1622 VALUES LESS THAN (12984), +PARTITION p1623 VALUES LESS THAN (12992), +PARTITION p1624 VALUES LESS THAN (13000), +PARTITION p1625 VALUES LESS THAN (13008), +PARTITION p1626 VALUES LESS THAN (13016), +PARTITION p1627 VALUES LESS THAN (13024), +PARTITION p1628 VALUES LESS THAN (13032), +PARTITION p1629 VALUES LESS THAN (13040), +PARTITION p1630 VALUES LESS THAN (13048), +PARTITION p1631 VALUES LESS THAN (13056), +PARTITION p1632 VALUES LESS THAN (13064), +PARTITION p1633 VALUES LESS THAN (13072), +PARTITION p1634 VALUES LESS THAN (13080), +PARTITION p1635 VALUES LESS THAN (13088), +PARTITION p1636 VALUES LESS THAN (13096), +PARTITION p1637 VALUES LESS THAN (13104), +PARTITION p1638 VALUES LESS THAN (13112), +PARTITION p1639 VALUES LESS THAN (13120), +PARTITION p1640 VALUES LESS THAN (13128), +PARTITION p1641 VALUES LESS THAN (13136), +PARTITION p1642 VALUES LESS THAN (13144), +PARTITION p1643 VALUES LESS THAN (13152), +PARTITION p1644 VALUES LESS THAN (13160), +PARTITION p1645 VALUES LESS THAN (13168), +PARTITION p1646 VALUES LESS THAN (13176), +PARTITION p1647 VALUES LESS THAN (13184), +PARTITION p1648 VALUES LESS THAN (13192), +PARTITION p1649 VALUES LESS THAN (13200), +PARTITION p1650 VALUES LESS THAN (13208), +PARTITION p1651 VALUES LESS THAN (13216), +PARTITION p1652 VALUES LESS THAN (13224), +PARTITION p1653 VALUES LESS THAN (13232), +PARTITION p1654 VALUES LESS THAN (13240), +PARTITION p1655 VALUES LESS THAN (13248), +PARTITION p1656 VALUES LESS THAN (13256), +PARTITION p1657 VALUES LESS THAN (13264), +PARTITION p1658 VALUES LESS THAN (13272), +PARTITION p1659 VALUES LESS THAN (13280), +PARTITION p1660 VALUES LESS THAN (13288), +PARTITION p1661 VALUES LESS THAN (13296), +PARTITION p1662 VALUES LESS THAN (13304), +PARTITION p1663 VALUES LESS THAN (13312), +PARTITION p1664 VALUES LESS THAN (13320), +PARTITION p1665 VALUES LESS THAN (13328), +PARTITION p1666 VALUES LESS THAN (13336), +PARTITION p1667 VALUES LESS THAN (13344), +PARTITION p1668 VALUES LESS THAN (13352), +PARTITION p1669 VALUES LESS THAN (13360), +PARTITION p1670 VALUES LESS THAN (13368), +PARTITION p1671 VALUES LESS THAN (13376), +PARTITION p1672 VALUES LESS THAN (13384), +PARTITION p1673 VALUES LESS THAN (13392), +PARTITION p1674 VALUES LESS THAN (13400), +PARTITION p1675 VALUES LESS THAN (13408), +PARTITION p1676 VALUES LESS THAN (13416), +PARTITION p1677 VALUES LESS THAN (13424), +PARTITION p1678 VALUES LESS THAN (13432), +PARTITION p1679 VALUES LESS THAN (13440), +PARTITION p1680 VALUES LESS THAN (13448), +PARTITION p1681 VALUES LESS THAN (13456), +PARTITION p1682 VALUES LESS THAN (13464), +PARTITION p1683 VALUES LESS THAN (13472), +PARTITION p1684 VALUES LESS THAN (13480), +PARTITION p1685 VALUES LESS THAN (13488), +PARTITION p1686 VALUES LESS THAN (13496), +PARTITION p1687 VALUES LESS THAN (13504), +PARTITION p1688 VALUES LESS THAN (13512), +PARTITION p1689 VALUES LESS THAN (13520), +PARTITION p1690 VALUES LESS THAN (13528), +PARTITION p1691 VALUES LESS THAN (13536), +PARTITION p1692 VALUES LESS THAN (13544), +PARTITION p1693 VALUES LESS THAN (13552), +PARTITION p1694 VALUES LESS THAN (13560), +PARTITION p1695 VALUES LESS THAN (13568), +PARTITION p1696 VALUES LESS THAN (13576), +PARTITION p1697 VALUES LESS THAN (13584), +PARTITION p1698 VALUES LESS THAN (13592), +PARTITION p1699 VALUES LESS THAN (13600), +PARTITION p1700 VALUES LESS THAN (13608), +PARTITION p1701 VALUES LESS THAN (13616), +PARTITION p1702 VALUES LESS THAN (13624), +PARTITION p1703 VALUES LESS THAN (13632), +PARTITION p1704 VALUES LESS THAN (13640), +PARTITION p1705 VALUES LESS THAN (13648), +PARTITION p1706 VALUES LESS THAN (13656), +PARTITION p1707 VALUES LESS THAN (13664), +PARTITION p1708 VALUES LESS THAN (13672), +PARTITION p1709 VALUES LESS THAN (13680), +PARTITION p1710 VALUES LESS THAN (13688), +PARTITION p1711 VALUES LESS THAN (13696), +PARTITION p1712 VALUES LESS THAN (13704), +PARTITION p1713 VALUES LESS THAN (13712), +PARTITION p1714 VALUES LESS THAN (13720), +PARTITION p1715 VALUES LESS THAN (13728), +PARTITION p1716 VALUES LESS THAN (13736), +PARTITION p1717 VALUES LESS THAN (13744), +PARTITION p1718 VALUES LESS THAN (13752), +PARTITION p1719 VALUES LESS THAN (13760), +PARTITION p1720 VALUES LESS THAN (13768), +PARTITION p1721 VALUES LESS THAN (13776), +PARTITION p1722 VALUES LESS THAN (13784), +PARTITION p1723 VALUES LESS THAN (13792), +PARTITION p1724 VALUES LESS THAN (13800), +PARTITION p1725 VALUES LESS THAN (13808), +PARTITION p1726 VALUES LESS THAN (13816), +PARTITION p1727 VALUES LESS THAN (13824), +PARTITION p1728 VALUES LESS THAN (13832), +PARTITION p1729 VALUES LESS THAN (13840), +PARTITION p1730 VALUES LESS THAN (13848), +PARTITION p1731 VALUES LESS THAN (13856), +PARTITION p1732 VALUES LESS THAN (13864), +PARTITION p1733 VALUES LESS THAN (13872), +PARTITION p1734 VALUES LESS THAN (13880), +PARTITION p1735 VALUES LESS THAN (13888), +PARTITION p1736 VALUES LESS THAN (13896), +PARTITION p1737 VALUES LESS THAN (13904), +PARTITION p1738 VALUES LESS THAN (13912), +PARTITION p1739 VALUES LESS THAN (13920), +PARTITION p1740 VALUES LESS THAN (13928), +PARTITION p1741 VALUES LESS THAN (13936), +PARTITION p1742 VALUES LESS THAN (13944), +PARTITION p1743 VALUES LESS THAN (13952), +PARTITION p1744 VALUES LESS THAN (13960), +PARTITION p1745 VALUES LESS THAN (13968), +PARTITION p1746 VALUES LESS THAN (13976), +PARTITION p1747 VALUES LESS THAN (13984), +PARTITION p1748 VALUES LESS THAN (13992), +PARTITION p1749 VALUES LESS THAN (14000), +PARTITION p1750 VALUES LESS THAN (14008), +PARTITION p1751 VALUES LESS THAN (14016), +PARTITION p1752 VALUES LESS THAN (14024), +PARTITION p1753 VALUES LESS THAN (14032), +PARTITION p1754 VALUES LESS THAN (14040), +PARTITION p1755 VALUES LESS THAN (14048), +PARTITION p1756 VALUES LESS THAN (14056), +PARTITION p1757 VALUES LESS THAN (14064), +PARTITION p1758 VALUES LESS THAN (14072), +PARTITION p1759 VALUES LESS THAN (14080), +PARTITION p1760 VALUES LESS THAN (14088), +PARTITION p1761 VALUES LESS THAN (14096), +PARTITION p1762 VALUES LESS THAN (14104), +PARTITION p1763 VALUES LESS THAN (14112), +PARTITION p1764 VALUES LESS THAN (14120), +PARTITION p1765 VALUES LESS THAN (14128), +PARTITION p1766 VALUES LESS THAN (14136), +PARTITION p1767 VALUES LESS THAN (14144), +PARTITION p1768 VALUES LESS THAN (14152), +PARTITION p1769 VALUES LESS THAN (14160), +PARTITION p1770 VALUES LESS THAN (14168), +PARTITION p1771 VALUES LESS THAN (14176), +PARTITION p1772 VALUES LESS THAN (14184), +PARTITION p1773 VALUES LESS THAN (14192), +PARTITION p1774 VALUES LESS THAN (14200), +PARTITION p1775 VALUES LESS THAN (14208), +PARTITION p1776 VALUES LESS THAN (14216), +PARTITION p1777 VALUES LESS THAN (14224), +PARTITION p1778 VALUES LESS THAN (14232), +PARTITION p1779 VALUES LESS THAN (14240), +PARTITION p1780 VALUES LESS THAN (14248), +PARTITION p1781 VALUES LESS THAN (14256), +PARTITION p1782 VALUES LESS THAN (14264), +PARTITION p1783 VALUES LESS THAN (14272), +PARTITION p1784 VALUES LESS THAN (14280), +PARTITION p1785 VALUES LESS THAN (14288), +PARTITION p1786 VALUES LESS THAN (14296), +PARTITION p1787 VALUES LESS THAN (14304), +PARTITION p1788 VALUES LESS THAN (14312), +PARTITION p1789 VALUES LESS THAN (14320), +PARTITION p1790 VALUES LESS THAN (14328), +PARTITION p1791 VALUES LESS THAN (14336), +PARTITION p1792 VALUES LESS THAN (14344), +PARTITION p1793 VALUES LESS THAN (14352), +PARTITION p1794 VALUES LESS THAN (14360), +PARTITION p1795 VALUES LESS THAN (14368), +PARTITION p1796 VALUES LESS THAN (14376), +PARTITION p1797 VALUES LESS THAN (14384), +PARTITION p1798 VALUES LESS THAN (14392), +PARTITION p1799 VALUES LESS THAN (14400), +PARTITION p1800 VALUES LESS THAN (14408), +PARTITION p1801 VALUES LESS THAN (14416), +PARTITION p1802 VALUES LESS THAN (14424), +PARTITION p1803 VALUES LESS THAN (14432), +PARTITION p1804 VALUES LESS THAN (14440), +PARTITION p1805 VALUES LESS THAN (14448), +PARTITION p1806 VALUES LESS THAN (14456), +PARTITION p1807 VALUES LESS THAN (14464), +PARTITION p1808 VALUES LESS THAN (14472), +PARTITION p1809 VALUES LESS THAN (14480), +PARTITION p1810 VALUES LESS THAN (14488), +PARTITION p1811 VALUES LESS THAN (14496), +PARTITION p1812 VALUES LESS THAN (14504), +PARTITION p1813 VALUES LESS THAN (14512), +PARTITION p1814 VALUES LESS THAN (14520), +PARTITION p1815 VALUES LESS THAN (14528), +PARTITION p1816 VALUES LESS THAN (14536), +PARTITION p1817 VALUES LESS THAN (14544), +PARTITION p1818 VALUES LESS THAN (14552), +PARTITION p1819 VALUES LESS THAN (14560), +PARTITION p1820 VALUES LESS THAN (14568), +PARTITION p1821 VALUES LESS THAN (14576), +PARTITION p1822 VALUES LESS THAN (14584), +PARTITION p1823 VALUES LESS THAN (14592), +PARTITION p1824 VALUES LESS THAN (14600), +PARTITION p1825 VALUES LESS THAN (14608), +PARTITION p1826 VALUES LESS THAN (14616), +PARTITION p1827 VALUES LESS THAN (14624), +PARTITION p1828 VALUES LESS THAN (14632), +PARTITION p1829 VALUES LESS THAN (14640), +PARTITION p1830 VALUES LESS THAN (14648), +PARTITION p1831 VALUES LESS THAN (14656), +PARTITION p1832 VALUES LESS THAN (14664), +PARTITION p1833 VALUES LESS THAN (14672), +PARTITION p1834 VALUES LESS THAN (14680), +PARTITION p1835 VALUES LESS THAN (14688), +PARTITION p1836 VALUES LESS THAN (14696), +PARTITION p1837 VALUES LESS THAN (14704), +PARTITION p1838 VALUES LESS THAN (14712), +PARTITION p1839 VALUES LESS THAN (14720), +PARTITION p1840 VALUES LESS THAN (14728), +PARTITION p1841 VALUES LESS THAN (14736), +PARTITION p1842 VALUES LESS THAN (14744), +PARTITION p1843 VALUES LESS THAN (14752), +PARTITION p1844 VALUES LESS THAN (14760), +PARTITION p1845 VALUES LESS THAN (14768), +PARTITION p1846 VALUES LESS THAN (14776), +PARTITION p1847 VALUES LESS THAN (14784), +PARTITION p1848 VALUES LESS THAN (14792), +PARTITION p1849 VALUES LESS THAN (14800), +PARTITION p1850 VALUES LESS THAN (14808), +PARTITION p1851 VALUES LESS THAN (14816), +PARTITION p1852 VALUES LESS THAN (14824), +PARTITION p1853 VALUES LESS THAN (14832), +PARTITION p1854 VALUES LESS THAN (14840), +PARTITION p1855 VALUES LESS THAN (14848), +PARTITION p1856 VALUES LESS THAN (14856), +PARTITION p1857 VALUES LESS THAN (14864), +PARTITION p1858 VALUES LESS THAN (14872), +PARTITION p1859 VALUES LESS THAN (14880), +PARTITION p1860 VALUES LESS THAN (14888), +PARTITION p1861 VALUES LESS THAN (14896), +PARTITION p1862 VALUES LESS THAN (14904), +PARTITION p1863 VALUES LESS THAN (14912), +PARTITION p1864 VALUES LESS THAN (14920), +PARTITION p1865 VALUES LESS THAN (14928), +PARTITION p1866 VALUES LESS THAN (14936), +PARTITION p1867 VALUES LESS THAN (14944), +PARTITION p1868 VALUES LESS THAN (14952), +PARTITION p1869 VALUES LESS THAN (14960), +PARTITION p1870 VALUES LESS THAN (14968), +PARTITION p1871 VALUES LESS THAN (14976), +PARTITION p1872 VALUES LESS THAN (14984), +PARTITION p1873 VALUES LESS THAN (14992), +PARTITION p1874 VALUES LESS THAN (15000), +PARTITION p1875 VALUES LESS THAN (15008), +PARTITION p1876 VALUES LESS THAN (15016), +PARTITION p1877 VALUES LESS THAN (15024), +PARTITION p1878 VALUES LESS THAN (15032), +PARTITION p1879 VALUES LESS THAN (15040), +PARTITION p1880 VALUES LESS THAN (15048), +PARTITION p1881 VALUES LESS THAN (15056), +PARTITION p1882 VALUES LESS THAN (15064), +PARTITION p1883 VALUES LESS THAN (15072), +PARTITION p1884 VALUES LESS THAN (15080), +PARTITION p1885 VALUES LESS THAN (15088), +PARTITION p1886 VALUES LESS THAN (15096), +PARTITION p1887 VALUES LESS THAN (15104), +PARTITION p1888 VALUES LESS THAN (15112), +PARTITION p1889 VALUES LESS THAN (15120), +PARTITION p1890 VALUES LESS THAN (15128), +PARTITION p1891 VALUES LESS THAN (15136), +PARTITION p1892 VALUES LESS THAN (15144), +PARTITION p1893 VALUES LESS THAN (15152), +PARTITION p1894 VALUES LESS THAN (15160), +PARTITION p1895 VALUES LESS THAN (15168), +PARTITION p1896 VALUES LESS THAN (15176), +PARTITION p1897 VALUES LESS THAN (15184), +PARTITION p1898 VALUES LESS THAN (15192), +PARTITION p1899 VALUES LESS THAN (15200), +PARTITION p1900 VALUES LESS THAN (15208), +PARTITION p1901 VALUES LESS THAN (15216), +PARTITION p1902 VALUES LESS THAN (15224), +PARTITION p1903 VALUES LESS THAN (15232), +PARTITION p1904 VALUES LESS THAN (15240), +PARTITION p1905 VALUES LESS THAN (15248), +PARTITION p1906 VALUES LESS THAN (15256), +PARTITION p1907 VALUES LESS THAN (15264), +PARTITION p1908 VALUES LESS THAN (15272), +PARTITION p1909 VALUES LESS THAN (15280), +PARTITION p1910 VALUES LESS THAN (15288), +PARTITION p1911 VALUES LESS THAN (15296), +PARTITION p1912 VALUES LESS THAN (15304), +PARTITION p1913 VALUES LESS THAN (15312), +PARTITION p1914 VALUES LESS THAN (15320), +PARTITION p1915 VALUES LESS THAN (15328), +PARTITION p1916 VALUES LESS THAN (15336), +PARTITION p1917 VALUES LESS THAN (15344), +PARTITION p1918 VALUES LESS THAN (15352), +PARTITION p1919 VALUES LESS THAN (15360), +PARTITION p1920 VALUES LESS THAN (15368), +PARTITION p1921 VALUES LESS THAN (15376), +PARTITION p1922 VALUES LESS THAN (15384), +PARTITION p1923 VALUES LESS THAN (15392), +PARTITION p1924 VALUES LESS THAN (15400), +PARTITION p1925 VALUES LESS THAN (15408), +PARTITION p1926 VALUES LESS THAN (15416), +PARTITION p1927 VALUES LESS THAN (15424), +PARTITION p1928 VALUES LESS THAN (15432), +PARTITION p1929 VALUES LESS THAN (15440), +PARTITION p1930 VALUES LESS THAN (15448), +PARTITION p1931 VALUES LESS THAN (15456), +PARTITION p1932 VALUES LESS THAN (15464), +PARTITION p1933 VALUES LESS THAN (15472), +PARTITION p1934 VALUES LESS THAN (15480), +PARTITION p1935 VALUES LESS THAN (15488), +PARTITION p1936 VALUES LESS THAN (15496), +PARTITION p1937 VALUES LESS THAN (15504), +PARTITION p1938 VALUES LESS THAN (15512), +PARTITION p1939 VALUES LESS THAN (15520), +PARTITION p1940 VALUES LESS THAN (15528), +PARTITION p1941 VALUES LESS THAN (15536), +PARTITION p1942 VALUES LESS THAN (15544), +PARTITION p1943 VALUES LESS THAN (15552), +PARTITION p1944 VALUES LESS THAN (15560), +PARTITION p1945 VALUES LESS THAN (15568), +PARTITION p1946 VALUES LESS THAN (15576), +PARTITION p1947 VALUES LESS THAN (15584), +PARTITION p1948 VALUES LESS THAN (15592), +PARTITION p1949 VALUES LESS THAN (15600), +PARTITION p1950 VALUES LESS THAN (15608), +PARTITION p1951 VALUES LESS THAN (15616), +PARTITION p1952 VALUES LESS THAN (15624), +PARTITION p1953 VALUES LESS THAN (15632), +PARTITION p1954 VALUES LESS THAN (15640), +PARTITION p1955 VALUES LESS THAN (15648), +PARTITION p1956 VALUES LESS THAN (15656), +PARTITION p1957 VALUES LESS THAN (15664), +PARTITION p1958 VALUES LESS THAN (15672), +PARTITION p1959 VALUES LESS THAN (15680), +PARTITION p1960 VALUES LESS THAN (15688), +PARTITION p1961 VALUES LESS THAN (15696), +PARTITION p1962 VALUES LESS THAN (15704), +PARTITION p1963 VALUES LESS THAN (15712), +PARTITION p1964 VALUES LESS THAN (15720), +PARTITION p1965 VALUES LESS THAN (15728), +PARTITION p1966 VALUES LESS THAN (15736), +PARTITION p1967 VALUES LESS THAN (15744), +PARTITION p1968 VALUES LESS THAN (15752), +PARTITION p1969 VALUES LESS THAN (15760), +PARTITION p1970 VALUES LESS THAN (15768), +PARTITION p1971 VALUES LESS THAN (15776), +PARTITION p1972 VALUES LESS THAN (15784), +PARTITION p1973 VALUES LESS THAN (15792), +PARTITION p1974 VALUES LESS THAN (15800), +PARTITION p1975 VALUES LESS THAN (15808), +PARTITION p1976 VALUES LESS THAN (15816), +PARTITION p1977 VALUES LESS THAN (15824), +PARTITION p1978 VALUES LESS THAN (15832), +PARTITION p1979 VALUES LESS THAN (15840), +PARTITION p1980 VALUES LESS THAN (15848), +PARTITION p1981 VALUES LESS THAN (15856), +PARTITION p1982 VALUES LESS THAN (15864), +PARTITION p1983 VALUES LESS THAN (15872), +PARTITION p1984 VALUES LESS THAN (15880), +PARTITION p1985 VALUES LESS THAN (15888), +PARTITION p1986 VALUES LESS THAN (15896), +PARTITION p1987 VALUES LESS THAN (15904), +PARTITION p1988 VALUES LESS THAN (15912), +PARTITION p1989 VALUES LESS THAN (15920), +PARTITION p1990 VALUES LESS THAN (15928), +PARTITION p1991 VALUES LESS THAN (15936), +PARTITION p1992 VALUES LESS THAN (15944), +PARTITION p1993 VALUES LESS THAN (15952), +PARTITION p1994 VALUES LESS THAN (15960), +PARTITION p1995 VALUES LESS THAN (15968), +PARTITION p1996 VALUES LESS THAN (15976), +PARTITION p1997 VALUES LESS THAN (15984), +PARTITION p1998 VALUES LESS THAN (15992), +PARTITION p1999 VALUES LESS THAN (16000), +PARTITION p2000 VALUES LESS THAN (16008), +PARTITION p2001 VALUES LESS THAN (16016), +PARTITION p2002 VALUES LESS THAN (16024), +PARTITION p2003 VALUES LESS THAN (16032), +PARTITION p2004 VALUES LESS THAN (16040), +PARTITION p2005 VALUES LESS THAN (16048), +PARTITION p2006 VALUES LESS THAN (16056), +PARTITION p2007 VALUES LESS THAN (16064), +PARTITION p2008 VALUES LESS THAN (16072), +PARTITION p2009 VALUES LESS THAN (16080), +PARTITION p2010 VALUES LESS THAN (16088), +PARTITION p2011 VALUES LESS THAN (16096), +PARTITION p2012 VALUES LESS THAN (16104), +PARTITION p2013 VALUES LESS THAN (16112), +PARTITION p2014 VALUES LESS THAN (16120), +PARTITION p2015 VALUES LESS THAN (16128), +PARTITION p2016 VALUES LESS THAN (16136), +PARTITION p2017 VALUES LESS THAN (16144), +PARTITION p2018 VALUES LESS THAN (16152), +PARTITION p2019 VALUES LESS THAN (16160), +PARTITION p2020 VALUES LESS THAN (16168), +PARTITION p2021 VALUES LESS THAN (16176), +PARTITION p2022 VALUES LESS THAN (16184), +PARTITION p2023 VALUES LESS THAN (16192), +PARTITION p2024 VALUES LESS THAN (16200), +PARTITION p2025 VALUES LESS THAN (16208), +PARTITION p2026 VALUES LESS THAN (16216), +PARTITION p2027 VALUES LESS THAN (16224), +PARTITION p2028 VALUES LESS THAN (16232), +PARTITION p2029 VALUES LESS THAN (16240), +PARTITION p2030 VALUES LESS THAN (16248), +PARTITION p2031 VALUES LESS THAN (16256), +PARTITION p2032 VALUES LESS THAN (16264), +PARTITION p2033 VALUES LESS THAN (16272), +PARTITION p2034 VALUES LESS THAN (16280), +PARTITION p2035 VALUES LESS THAN (16288), +PARTITION p2036 VALUES LESS THAN (16296), +PARTITION p2037 VALUES LESS THAN (16304), +PARTITION p2038 VALUES LESS THAN (16312), +PARTITION p2039 VALUES LESS THAN (16320), +PARTITION p2040 VALUES LESS THAN (16328), +PARTITION p2041 VALUES LESS THAN (16336), +PARTITION p2042 VALUES LESS THAN (16344), +PARTITION p2043 VALUES LESS THAN (16352), +PARTITION p2044 VALUES LESS THAN (16360), +PARTITION p2045 VALUES LESS THAN (16368), +PARTITION p2046 VALUES LESS THAN (16376), +PARTITION p2047 VALUES LESS THAN (16384), +PARTITION p2048 VALUES LESS THAN (16392), +PARTITION p2049 VALUES LESS THAN (16400), +PARTITION p2050 VALUES LESS THAN (16408), +PARTITION p2051 VALUES LESS THAN (16416), +PARTITION p2052 VALUES LESS THAN (16424), +PARTITION p2053 VALUES LESS THAN (16432), +PARTITION p2054 VALUES LESS THAN (16440), +PARTITION p2055 VALUES LESS THAN (16448), +PARTITION p2056 VALUES LESS THAN (16456), +PARTITION p2057 VALUES LESS THAN (16464), +PARTITION p2058 VALUES LESS THAN (16472), +PARTITION p2059 VALUES LESS THAN (16480), +PARTITION p2060 VALUES LESS THAN (16488), +PARTITION p2061 VALUES LESS THAN (16496), +PARTITION p2062 VALUES LESS THAN (16504), +PARTITION p2063 VALUES LESS THAN (16512), +PARTITION p2064 VALUES LESS THAN (16520), +PARTITION p2065 VALUES LESS THAN (16528), +PARTITION p2066 VALUES LESS THAN (16536), +PARTITION p2067 VALUES LESS THAN (16544), +PARTITION p2068 VALUES LESS THAN (16552), +PARTITION p2069 VALUES LESS THAN (16560), +PARTITION p2070 VALUES LESS THAN (16568), +PARTITION p2071 VALUES LESS THAN (16576), +PARTITION p2072 VALUES LESS THAN (16584), +PARTITION p2073 VALUES LESS THAN (16592), +PARTITION p2074 VALUES LESS THAN (16600), +PARTITION p2075 VALUES LESS THAN (16608), +PARTITION p2076 VALUES LESS THAN (16616), +PARTITION p2077 VALUES LESS THAN (16624), +PARTITION p2078 VALUES LESS THAN (16632), +PARTITION p2079 VALUES LESS THAN (16640), +PARTITION p2080 VALUES LESS THAN (16648), +PARTITION p2081 VALUES LESS THAN (16656), +PARTITION p2082 VALUES LESS THAN (16664), +PARTITION p2083 VALUES LESS THAN (16672), +PARTITION p2084 VALUES LESS THAN (16680), +PARTITION p2085 VALUES LESS THAN (16688), +PARTITION p2086 VALUES LESS THAN (16696), +PARTITION p2087 VALUES LESS THAN (16704), +PARTITION p2088 VALUES LESS THAN (16712), +PARTITION p2089 VALUES LESS THAN (16720), +PARTITION p2090 VALUES LESS THAN (16728), +PARTITION p2091 VALUES LESS THAN (16736), +PARTITION p2092 VALUES LESS THAN (16744), +PARTITION p2093 VALUES LESS THAN (16752), +PARTITION p2094 VALUES LESS THAN (16760), +PARTITION p2095 VALUES LESS THAN (16768), +PARTITION p2096 VALUES LESS THAN (16776), +PARTITION p2097 VALUES LESS THAN (16784), +PARTITION p2098 VALUES LESS THAN (16792), +PARTITION p2099 VALUES LESS THAN (16800), +PARTITION p2100 VALUES LESS THAN (16808), +PARTITION p2101 VALUES LESS THAN (16816), +PARTITION p2102 VALUES LESS THAN (16824), +PARTITION p2103 VALUES LESS THAN (16832), +PARTITION p2104 VALUES LESS THAN (16840), +PARTITION p2105 VALUES LESS THAN (16848), +PARTITION p2106 VALUES LESS THAN (16856), +PARTITION p2107 VALUES LESS THAN (16864), +PARTITION p2108 VALUES LESS THAN (16872), +PARTITION p2109 VALUES LESS THAN (16880), +PARTITION p2110 VALUES LESS THAN (16888), +PARTITION p2111 VALUES LESS THAN (16896), +PARTITION p2112 VALUES LESS THAN (16904), +PARTITION p2113 VALUES LESS THAN (16912), +PARTITION p2114 VALUES LESS THAN (16920), +PARTITION p2115 VALUES LESS THAN (16928), +PARTITION p2116 VALUES LESS THAN (16936), +PARTITION p2117 VALUES LESS THAN (16944), +PARTITION p2118 VALUES LESS THAN (16952), +PARTITION p2119 VALUES LESS THAN (16960), +PARTITION p2120 VALUES LESS THAN (16968), +PARTITION p2121 VALUES LESS THAN (16976), +PARTITION p2122 VALUES LESS THAN (16984), +PARTITION p2123 VALUES LESS THAN (16992), +PARTITION p2124 VALUES LESS THAN (17000), +PARTITION p2125 VALUES LESS THAN (17008), +PARTITION p2126 VALUES LESS THAN (17016), +PARTITION p2127 VALUES LESS THAN (17024), +PARTITION p2128 VALUES LESS THAN (17032), +PARTITION p2129 VALUES LESS THAN (17040), +PARTITION p2130 VALUES LESS THAN (17048), +PARTITION p2131 VALUES LESS THAN (17056), +PARTITION p2132 VALUES LESS THAN (17064), +PARTITION p2133 VALUES LESS THAN (17072), +PARTITION p2134 VALUES LESS THAN (17080), +PARTITION p2135 VALUES LESS THAN (17088), +PARTITION p2136 VALUES LESS THAN (17096), +PARTITION p2137 VALUES LESS THAN (17104), +PARTITION p2138 VALUES LESS THAN (17112), +PARTITION p2139 VALUES LESS THAN (17120), +PARTITION p2140 VALUES LESS THAN (17128), +PARTITION p2141 VALUES LESS THAN (17136), +PARTITION p2142 VALUES LESS THAN (17144), +PARTITION p2143 VALUES LESS THAN (17152), +PARTITION p2144 VALUES LESS THAN (17160), +PARTITION p2145 VALUES LESS THAN (17168), +PARTITION p2146 VALUES LESS THAN (17176), +PARTITION p2147 VALUES LESS THAN (17184), +PARTITION p2148 VALUES LESS THAN (17192), +PARTITION p2149 VALUES LESS THAN (17200), +PARTITION p2150 VALUES LESS THAN (17208), +PARTITION p2151 VALUES LESS THAN (17216), +PARTITION p2152 VALUES LESS THAN (17224), +PARTITION p2153 VALUES LESS THAN (17232), +PARTITION p2154 VALUES LESS THAN (17240), +PARTITION p2155 VALUES LESS THAN (17248), +PARTITION p2156 VALUES LESS THAN (17256), +PARTITION p2157 VALUES LESS THAN (17264), +PARTITION p2158 VALUES LESS THAN (17272), +PARTITION p2159 VALUES LESS THAN (17280), +PARTITION p2160 VALUES LESS THAN (17288), +PARTITION p2161 VALUES LESS THAN (17296), +PARTITION p2162 VALUES LESS THAN (17304), +PARTITION p2163 VALUES LESS THAN (17312), +PARTITION p2164 VALUES LESS THAN (17320), +PARTITION p2165 VALUES LESS THAN (17328), +PARTITION p2166 VALUES LESS THAN (17336), +PARTITION p2167 VALUES LESS THAN (17344), +PARTITION p2168 VALUES LESS THAN (17352), +PARTITION p2169 VALUES LESS THAN (17360), +PARTITION p2170 VALUES LESS THAN (17368), +PARTITION p2171 VALUES LESS THAN (17376), +PARTITION p2172 VALUES LESS THAN (17384), +PARTITION p2173 VALUES LESS THAN (17392), +PARTITION p2174 VALUES LESS THAN (17400), +PARTITION p2175 VALUES LESS THAN (17408), +PARTITION p2176 VALUES LESS THAN (17416), +PARTITION p2177 VALUES LESS THAN (17424), +PARTITION p2178 VALUES LESS THAN (17432), +PARTITION p2179 VALUES LESS THAN (17440), +PARTITION p2180 VALUES LESS THAN (17448), +PARTITION p2181 VALUES LESS THAN (17456), +PARTITION p2182 VALUES LESS THAN (17464), +PARTITION p2183 VALUES LESS THAN (17472), +PARTITION p2184 VALUES LESS THAN (17480), +PARTITION p2185 VALUES LESS THAN (17488), +PARTITION p2186 VALUES LESS THAN (17496), +PARTITION p2187 VALUES LESS THAN (17504), +PARTITION p2188 VALUES LESS THAN (17512), +PARTITION p2189 VALUES LESS THAN (17520), +PARTITION p2190 VALUES LESS THAN (17528), +PARTITION p2191 VALUES LESS THAN (17536), +PARTITION p2192 VALUES LESS THAN (17544), +PARTITION p2193 VALUES LESS THAN (17552), +PARTITION p2194 VALUES LESS THAN (17560), +PARTITION p2195 VALUES LESS THAN (17568), +PARTITION p2196 VALUES LESS THAN (17576), +PARTITION p2197 VALUES LESS THAN (17584), +PARTITION p2198 VALUES LESS THAN (17592), +PARTITION p2199 VALUES LESS THAN (17600), +PARTITION p2200 VALUES LESS THAN (17608), +PARTITION p2201 VALUES LESS THAN (17616), +PARTITION p2202 VALUES LESS THAN (17624), +PARTITION p2203 VALUES LESS THAN (17632), +PARTITION p2204 VALUES LESS THAN (17640), +PARTITION p2205 VALUES LESS THAN (17648), +PARTITION p2206 VALUES LESS THAN (17656), +PARTITION p2207 VALUES LESS THAN (17664), +PARTITION p2208 VALUES LESS THAN (17672), +PARTITION p2209 VALUES LESS THAN (17680), +PARTITION p2210 VALUES LESS THAN (17688), +PARTITION p2211 VALUES LESS THAN (17696), +PARTITION p2212 VALUES LESS THAN (17704), +PARTITION p2213 VALUES LESS THAN (17712), +PARTITION p2214 VALUES LESS THAN (17720), +PARTITION p2215 VALUES LESS THAN (17728), +PARTITION p2216 VALUES LESS THAN (17736), +PARTITION p2217 VALUES LESS THAN (17744), +PARTITION p2218 VALUES LESS THAN (17752), +PARTITION p2219 VALUES LESS THAN (17760), +PARTITION p2220 VALUES LESS THAN (17768), +PARTITION p2221 VALUES LESS THAN (17776), +PARTITION p2222 VALUES LESS THAN (17784), +PARTITION p2223 VALUES LESS THAN (17792), +PARTITION p2224 VALUES LESS THAN (17800), +PARTITION p2225 VALUES LESS THAN (17808), +PARTITION p2226 VALUES LESS THAN (17816), +PARTITION p2227 VALUES LESS THAN (17824), +PARTITION p2228 VALUES LESS THAN (17832), +PARTITION p2229 VALUES LESS THAN (17840), +PARTITION p2230 VALUES LESS THAN (17848), +PARTITION p2231 VALUES LESS THAN (17856), +PARTITION p2232 VALUES LESS THAN (17864), +PARTITION p2233 VALUES LESS THAN (17872), +PARTITION p2234 VALUES LESS THAN (17880), +PARTITION p2235 VALUES LESS THAN (17888), +PARTITION p2236 VALUES LESS THAN (17896), +PARTITION p2237 VALUES LESS THAN (17904), +PARTITION p2238 VALUES LESS THAN (17912), +PARTITION p2239 VALUES LESS THAN (17920), +PARTITION p2240 VALUES LESS THAN (17928), +PARTITION p2241 VALUES LESS THAN (17936), +PARTITION p2242 VALUES LESS THAN (17944), +PARTITION p2243 VALUES LESS THAN (17952), +PARTITION p2244 VALUES LESS THAN (17960), +PARTITION p2245 VALUES LESS THAN (17968), +PARTITION p2246 VALUES LESS THAN (17976), +PARTITION p2247 VALUES LESS THAN (17984), +PARTITION p2248 VALUES LESS THAN (17992), +PARTITION p2249 VALUES LESS THAN (18000), +PARTITION p2250 VALUES LESS THAN (18008), +PARTITION p2251 VALUES LESS THAN (18016), +PARTITION p2252 VALUES LESS THAN (18024), +PARTITION p2253 VALUES LESS THAN (18032), +PARTITION p2254 VALUES LESS THAN (18040), +PARTITION p2255 VALUES LESS THAN (18048), +PARTITION p2256 VALUES LESS THAN (18056), +PARTITION p2257 VALUES LESS THAN (18064), +PARTITION p2258 VALUES LESS THAN (18072), +PARTITION p2259 VALUES LESS THAN (18080), +PARTITION p2260 VALUES LESS THAN (18088), +PARTITION p2261 VALUES LESS THAN (18096), +PARTITION p2262 VALUES LESS THAN (18104), +PARTITION p2263 VALUES LESS THAN (18112), +PARTITION p2264 VALUES LESS THAN (18120), +PARTITION p2265 VALUES LESS THAN (18128), +PARTITION p2266 VALUES LESS THAN (18136), +PARTITION p2267 VALUES LESS THAN (18144), +PARTITION p2268 VALUES LESS THAN (18152), +PARTITION p2269 VALUES LESS THAN (18160), +PARTITION p2270 VALUES LESS THAN (18168), +PARTITION p2271 VALUES LESS THAN (18176), +PARTITION p2272 VALUES LESS THAN (18184), +PARTITION p2273 VALUES LESS THAN (18192), +PARTITION p2274 VALUES LESS THAN (18200), +PARTITION p2275 VALUES LESS THAN (18208), +PARTITION p2276 VALUES LESS THAN (18216), +PARTITION p2277 VALUES LESS THAN (18224), +PARTITION p2278 VALUES LESS THAN (18232), +PARTITION p2279 VALUES LESS THAN (18240), +PARTITION p2280 VALUES LESS THAN (18248), +PARTITION p2281 VALUES LESS THAN (18256), +PARTITION p2282 VALUES LESS THAN (18264), +PARTITION p2283 VALUES LESS THAN (18272), +PARTITION p2284 VALUES LESS THAN (18280), +PARTITION p2285 VALUES LESS THAN (18288), +PARTITION p2286 VALUES LESS THAN (18296), +PARTITION p2287 VALUES LESS THAN (18304), +PARTITION p2288 VALUES LESS THAN (18312), +PARTITION p2289 VALUES LESS THAN (18320), +PARTITION p2290 VALUES LESS THAN (18328), +PARTITION p2291 VALUES LESS THAN (18336), +PARTITION p2292 VALUES LESS THAN (18344), +PARTITION p2293 VALUES LESS THAN (18352), +PARTITION p2294 VALUES LESS THAN (18360), +PARTITION p2295 VALUES LESS THAN (18368), +PARTITION p2296 VALUES LESS THAN (18376), +PARTITION p2297 VALUES LESS THAN (18384), +PARTITION p2298 VALUES LESS THAN (18392), +PARTITION p2299 VALUES LESS THAN (18400), +PARTITION p2300 VALUES LESS THAN (18408), +PARTITION p2301 VALUES LESS THAN (18416), +PARTITION p2302 VALUES LESS THAN (18424), +PARTITION p2303 VALUES LESS THAN (18432), +PARTITION p2304 VALUES LESS THAN (18440), +PARTITION p2305 VALUES LESS THAN (18448), +PARTITION p2306 VALUES LESS THAN (18456), +PARTITION p2307 VALUES LESS THAN (18464), +PARTITION p2308 VALUES LESS THAN (18472), +PARTITION p2309 VALUES LESS THAN (18480), +PARTITION p2310 VALUES LESS THAN (18488), +PARTITION p2311 VALUES LESS THAN (18496), +PARTITION p2312 VALUES LESS THAN (18504), +PARTITION p2313 VALUES LESS THAN (18512), +PARTITION p2314 VALUES LESS THAN (18520), +PARTITION p2315 VALUES LESS THAN (18528), +PARTITION p2316 VALUES LESS THAN (18536), +PARTITION p2317 VALUES LESS THAN (18544), +PARTITION p2318 VALUES LESS THAN (18552), +PARTITION p2319 VALUES LESS THAN (18560), +PARTITION p2320 VALUES LESS THAN (18568), +PARTITION p2321 VALUES LESS THAN (18576), +PARTITION p2322 VALUES LESS THAN (18584), +PARTITION p2323 VALUES LESS THAN (18592), +PARTITION p2324 VALUES LESS THAN (18600), +PARTITION p2325 VALUES LESS THAN (18608), +PARTITION p2326 VALUES LESS THAN (18616), +PARTITION p2327 VALUES LESS THAN (18624), +PARTITION p2328 VALUES LESS THAN (18632), +PARTITION p2329 VALUES LESS THAN (18640), +PARTITION p2330 VALUES LESS THAN (18648), +PARTITION p2331 VALUES LESS THAN (18656), +PARTITION p2332 VALUES LESS THAN (18664), +PARTITION p2333 VALUES LESS THAN (18672), +PARTITION p2334 VALUES LESS THAN (18680), +PARTITION p2335 VALUES LESS THAN (18688), +PARTITION p2336 VALUES LESS THAN (18696), +PARTITION p2337 VALUES LESS THAN (18704), +PARTITION p2338 VALUES LESS THAN (18712), +PARTITION p2339 VALUES LESS THAN (18720), +PARTITION p2340 VALUES LESS THAN (18728), +PARTITION p2341 VALUES LESS THAN (18736), +PARTITION p2342 VALUES LESS THAN (18744), +PARTITION p2343 VALUES LESS THAN (18752), +PARTITION p2344 VALUES LESS THAN (18760), +PARTITION p2345 VALUES LESS THAN (18768), +PARTITION p2346 VALUES LESS THAN (18776), +PARTITION p2347 VALUES LESS THAN (18784), +PARTITION p2348 VALUES LESS THAN (18792), +PARTITION p2349 VALUES LESS THAN (18800), +PARTITION p2350 VALUES LESS THAN (18808), +PARTITION p2351 VALUES LESS THAN (18816), +PARTITION p2352 VALUES LESS THAN (18824), +PARTITION p2353 VALUES LESS THAN (18832), +PARTITION p2354 VALUES LESS THAN (18840), +PARTITION p2355 VALUES LESS THAN (18848), +PARTITION p2356 VALUES LESS THAN (18856), +PARTITION p2357 VALUES LESS THAN (18864), +PARTITION p2358 VALUES LESS THAN (18872), +PARTITION p2359 VALUES LESS THAN (18880), +PARTITION p2360 VALUES LESS THAN (18888), +PARTITION p2361 VALUES LESS THAN (18896), +PARTITION p2362 VALUES LESS THAN (18904), +PARTITION p2363 VALUES LESS THAN (18912), +PARTITION p2364 VALUES LESS THAN (18920), +PARTITION p2365 VALUES LESS THAN (18928), +PARTITION p2366 VALUES LESS THAN (18936), +PARTITION p2367 VALUES LESS THAN (18944), +PARTITION p2368 VALUES LESS THAN (18952), +PARTITION p2369 VALUES LESS THAN (18960), +PARTITION p2370 VALUES LESS THAN (18968), +PARTITION p2371 VALUES LESS THAN (18976), +PARTITION p2372 VALUES LESS THAN (18984), +PARTITION p2373 VALUES LESS THAN (18992), +PARTITION p2374 VALUES LESS THAN (19000), +PARTITION p2375 VALUES LESS THAN (19008), +PARTITION p2376 VALUES LESS THAN (19016), +PARTITION p2377 VALUES LESS THAN (19024), +PARTITION p2378 VALUES LESS THAN (19032), +PARTITION p2379 VALUES LESS THAN (19040), +PARTITION p2380 VALUES LESS THAN (19048), +PARTITION p2381 VALUES LESS THAN (19056), +PARTITION p2382 VALUES LESS THAN (19064), +PARTITION p2383 VALUES LESS THAN (19072), +PARTITION p2384 VALUES LESS THAN (19080), +PARTITION p2385 VALUES LESS THAN (19088), +PARTITION p2386 VALUES LESS THAN (19096), +PARTITION p2387 VALUES LESS THAN (19104), +PARTITION p2388 VALUES LESS THAN (19112), +PARTITION p2389 VALUES LESS THAN (19120), +PARTITION p2390 VALUES LESS THAN (19128), +PARTITION p2391 VALUES LESS THAN (19136), +PARTITION p2392 VALUES LESS THAN (19144), +PARTITION p2393 VALUES LESS THAN (19152), +PARTITION p2394 VALUES LESS THAN (19160), +PARTITION p2395 VALUES LESS THAN (19168), +PARTITION p2396 VALUES LESS THAN (19176), +PARTITION p2397 VALUES LESS THAN (19184), +PARTITION p2398 VALUES LESS THAN (19192), +PARTITION p2399 VALUES LESS THAN (19200), +PARTITION p2400 VALUES LESS THAN (19208), +PARTITION p2401 VALUES LESS THAN (19216), +PARTITION p2402 VALUES LESS THAN (19224), +PARTITION p2403 VALUES LESS THAN (19232), +PARTITION p2404 VALUES LESS THAN (19240), +PARTITION p2405 VALUES LESS THAN (19248), +PARTITION p2406 VALUES LESS THAN (19256), +PARTITION p2407 VALUES LESS THAN (19264), +PARTITION p2408 VALUES LESS THAN (19272), +PARTITION p2409 VALUES LESS THAN (19280), +PARTITION p2410 VALUES LESS THAN (19288), +PARTITION p2411 VALUES LESS THAN (19296), +PARTITION p2412 VALUES LESS THAN (19304), +PARTITION p2413 VALUES LESS THAN (19312), +PARTITION p2414 VALUES LESS THAN (19320), +PARTITION p2415 VALUES LESS THAN (19328), +PARTITION p2416 VALUES LESS THAN (19336), +PARTITION p2417 VALUES LESS THAN (19344), +PARTITION p2418 VALUES LESS THAN (19352), +PARTITION p2419 VALUES LESS THAN (19360), +PARTITION p2420 VALUES LESS THAN (19368), +PARTITION p2421 VALUES LESS THAN (19376), +PARTITION p2422 VALUES LESS THAN (19384), +PARTITION p2423 VALUES LESS THAN (19392), +PARTITION p2424 VALUES LESS THAN (19400), +PARTITION p2425 VALUES LESS THAN (19408), +PARTITION p2426 VALUES LESS THAN (19416), +PARTITION p2427 VALUES LESS THAN (19424), +PARTITION p2428 VALUES LESS THAN (19432), +PARTITION p2429 VALUES LESS THAN (19440), +PARTITION p2430 VALUES LESS THAN (19448), +PARTITION p2431 VALUES LESS THAN (19456), +PARTITION p2432 VALUES LESS THAN (19464), +PARTITION p2433 VALUES LESS THAN (19472), +PARTITION p2434 VALUES LESS THAN (19480), +PARTITION p2435 VALUES LESS THAN (19488), +PARTITION p2436 VALUES LESS THAN (19496), +PARTITION p2437 VALUES LESS THAN (19504), +PARTITION p2438 VALUES LESS THAN (19512), +PARTITION p2439 VALUES LESS THAN (19520), +PARTITION p2440 VALUES LESS THAN (19528), +PARTITION p2441 VALUES LESS THAN (19536), +PARTITION p2442 VALUES LESS THAN (19544), +PARTITION p2443 VALUES LESS THAN (19552), +PARTITION p2444 VALUES LESS THAN (19560), +PARTITION p2445 VALUES LESS THAN (19568), +PARTITION p2446 VALUES LESS THAN (19576), +PARTITION p2447 VALUES LESS THAN (19584), +PARTITION p2448 VALUES LESS THAN (19592), +PARTITION p2449 VALUES LESS THAN (19600), +PARTITION p2450 VALUES LESS THAN (19608), +PARTITION p2451 VALUES LESS THAN (19616), +PARTITION p2452 VALUES LESS THAN (19624), +PARTITION p2453 VALUES LESS THAN (19632), +PARTITION p2454 VALUES LESS THAN (19640), +PARTITION p2455 VALUES LESS THAN (19648), +PARTITION p2456 VALUES LESS THAN (19656), +PARTITION p2457 VALUES LESS THAN (19664), +PARTITION p2458 VALUES LESS THAN (19672), +PARTITION p2459 VALUES LESS THAN (19680), +PARTITION p2460 VALUES LESS THAN (19688), +PARTITION p2461 VALUES LESS THAN (19696), +PARTITION p2462 VALUES LESS THAN (19704), +PARTITION p2463 VALUES LESS THAN (19712), +PARTITION p2464 VALUES LESS THAN (19720), +PARTITION p2465 VALUES LESS THAN (19728), +PARTITION p2466 VALUES LESS THAN (19736), +PARTITION p2467 VALUES LESS THAN (19744), +PARTITION p2468 VALUES LESS THAN (19752), +PARTITION p2469 VALUES LESS THAN (19760), +PARTITION p2470 VALUES LESS THAN (19768), +PARTITION p2471 VALUES LESS THAN (19776), +PARTITION p2472 VALUES LESS THAN (19784), +PARTITION p2473 VALUES LESS THAN (19792), +PARTITION p2474 VALUES LESS THAN (19800), +PARTITION p2475 VALUES LESS THAN (19808), +PARTITION p2476 VALUES LESS THAN (19816), +PARTITION p2477 VALUES LESS THAN (19824), +PARTITION p2478 VALUES LESS THAN (19832), +PARTITION p2479 VALUES LESS THAN (19840), +PARTITION p2480 VALUES LESS THAN (19848), +PARTITION p2481 VALUES LESS THAN (19856), +PARTITION p2482 VALUES LESS THAN (19864), +PARTITION p2483 VALUES LESS THAN (19872), +PARTITION p2484 VALUES LESS THAN (19880), +PARTITION p2485 VALUES LESS THAN (19888), +PARTITION p2486 VALUES LESS THAN (19896), +PARTITION p2487 VALUES LESS THAN (19904), +PARTITION p2488 VALUES LESS THAN (19912), +PARTITION p2489 VALUES LESS THAN (19920), +PARTITION p2490 VALUES LESS THAN (19928), +PARTITION p2491 VALUES LESS THAN (19936), +PARTITION p2492 VALUES LESS THAN (19944), +PARTITION p2493 VALUES LESS THAN (19952), +PARTITION p2494 VALUES LESS THAN (19960), +PARTITION p2495 VALUES LESS THAN (19968), +PARTITION p2496 VALUES LESS THAN (19976), +PARTITION p2497 VALUES LESS THAN (19984), +PARTITION p2498 VALUES LESS THAN (19992), +PARTITION p2499 VALUES LESS THAN (20000), +PARTITION p2500 VALUES LESS THAN (20008), +PARTITION p2501 VALUES LESS THAN (20016), +PARTITION p2502 VALUES LESS THAN (20024), +PARTITION p2503 VALUES LESS THAN (20032), +PARTITION p2504 VALUES LESS THAN (20040), +PARTITION p2505 VALUES LESS THAN (20048), +PARTITION p2506 VALUES LESS THAN (20056), +PARTITION p2507 VALUES LESS THAN (20064), +PARTITION p2508 VALUES LESS THAN (20072), +PARTITION p2509 VALUES LESS THAN (20080), +PARTITION p2510 VALUES LESS THAN (20088), +PARTITION p2511 VALUES LESS THAN (20096), +PARTITION p2512 VALUES LESS THAN (20104), +PARTITION p2513 VALUES LESS THAN (20112), +PARTITION p2514 VALUES LESS THAN (20120), +PARTITION p2515 VALUES LESS THAN (20128), +PARTITION p2516 VALUES LESS THAN (20136), +PARTITION p2517 VALUES LESS THAN (20144), +PARTITION p2518 VALUES LESS THAN (20152), +PARTITION p2519 VALUES LESS THAN (20160), +PARTITION p2520 VALUES LESS THAN (20168), +PARTITION p2521 VALUES LESS THAN (20176), +PARTITION p2522 VALUES LESS THAN (20184), +PARTITION p2523 VALUES LESS THAN (20192), +PARTITION p2524 VALUES LESS THAN (20200), +PARTITION p2525 VALUES LESS THAN (20208), +PARTITION p2526 VALUES LESS THAN (20216), +PARTITION p2527 VALUES LESS THAN (20224), +PARTITION p2528 VALUES LESS THAN (20232), +PARTITION p2529 VALUES LESS THAN (20240), +PARTITION p2530 VALUES LESS THAN (20248), +PARTITION p2531 VALUES LESS THAN (20256), +PARTITION p2532 VALUES LESS THAN (20264), +PARTITION p2533 VALUES LESS THAN (20272), +PARTITION p2534 VALUES LESS THAN (20280), +PARTITION p2535 VALUES LESS THAN (20288), +PARTITION p2536 VALUES LESS THAN (20296), +PARTITION p2537 VALUES LESS THAN (20304), +PARTITION p2538 VALUES LESS THAN (20312), +PARTITION p2539 VALUES LESS THAN (20320), +PARTITION p2540 VALUES LESS THAN (20328), +PARTITION p2541 VALUES LESS THAN (20336), +PARTITION p2542 VALUES LESS THAN (20344), +PARTITION p2543 VALUES LESS THAN (20352), +PARTITION p2544 VALUES LESS THAN (20360), +PARTITION p2545 VALUES LESS THAN (20368), +PARTITION p2546 VALUES LESS THAN (20376), +PARTITION p2547 VALUES LESS THAN (20384), +PARTITION p2548 VALUES LESS THAN (20392), +PARTITION p2549 VALUES LESS THAN (20400), +PARTITION p2550 VALUES LESS THAN (20408), +PARTITION p2551 VALUES LESS THAN (20416), +PARTITION p2552 VALUES LESS THAN (20424), +PARTITION p2553 VALUES LESS THAN (20432), +PARTITION p2554 VALUES LESS THAN (20440), +PARTITION p2555 VALUES LESS THAN (20448), +PARTITION p2556 VALUES LESS THAN (20456), +PARTITION p2557 VALUES LESS THAN (20464), +PARTITION p2558 VALUES LESS THAN (20472), +PARTITION p2559 VALUES LESS THAN (20480), +PARTITION p2560 VALUES LESS THAN (20488), +PARTITION p2561 VALUES LESS THAN (20496), +PARTITION p2562 VALUES LESS THAN (20504), +PARTITION p2563 VALUES LESS THAN (20512), +PARTITION p2564 VALUES LESS THAN (20520), +PARTITION p2565 VALUES LESS THAN (20528), +PARTITION p2566 VALUES LESS THAN (20536), +PARTITION p2567 VALUES LESS THAN (20544), +PARTITION p2568 VALUES LESS THAN (20552), +PARTITION p2569 VALUES LESS THAN (20560), +PARTITION p2570 VALUES LESS THAN (20568), +PARTITION p2571 VALUES LESS THAN (20576), +PARTITION p2572 VALUES LESS THAN (20584), +PARTITION p2573 VALUES LESS THAN (20592), +PARTITION p2574 VALUES LESS THAN (20600), +PARTITION p2575 VALUES LESS THAN (20608), +PARTITION p2576 VALUES LESS THAN (20616), +PARTITION p2577 VALUES LESS THAN (20624), +PARTITION p2578 VALUES LESS THAN (20632), +PARTITION p2579 VALUES LESS THAN (20640), +PARTITION p2580 VALUES LESS THAN (20648), +PARTITION p2581 VALUES LESS THAN (20656), +PARTITION p2582 VALUES LESS THAN (20664), +PARTITION p2583 VALUES LESS THAN (20672), +PARTITION p2584 VALUES LESS THAN (20680), +PARTITION p2585 VALUES LESS THAN (20688), +PARTITION p2586 VALUES LESS THAN (20696), +PARTITION p2587 VALUES LESS THAN (20704), +PARTITION p2588 VALUES LESS THAN (20712), +PARTITION p2589 VALUES LESS THAN (20720), +PARTITION p2590 VALUES LESS THAN (20728), +PARTITION p2591 VALUES LESS THAN (20736), +PARTITION p2592 VALUES LESS THAN (20744), +PARTITION p2593 VALUES LESS THAN (20752), +PARTITION p2594 VALUES LESS THAN (20760), +PARTITION p2595 VALUES LESS THAN (20768), +PARTITION p2596 VALUES LESS THAN (20776), +PARTITION p2597 VALUES LESS THAN (20784), +PARTITION p2598 VALUES LESS THAN (20792), +PARTITION p2599 VALUES LESS THAN (20800), +PARTITION p2600 VALUES LESS THAN (20808), +PARTITION p2601 VALUES LESS THAN (20816), +PARTITION p2602 VALUES LESS THAN (20824), +PARTITION p2603 VALUES LESS THAN (20832), +PARTITION p2604 VALUES LESS THAN (20840), +PARTITION p2605 VALUES LESS THAN (20848), +PARTITION p2606 VALUES LESS THAN (20856), +PARTITION p2607 VALUES LESS THAN (20864), +PARTITION p2608 VALUES LESS THAN (20872), +PARTITION p2609 VALUES LESS THAN (20880), +PARTITION p2610 VALUES LESS THAN (20888), +PARTITION p2611 VALUES LESS THAN (20896), +PARTITION p2612 VALUES LESS THAN (20904), +PARTITION p2613 VALUES LESS THAN (20912), +PARTITION p2614 VALUES LESS THAN (20920), +PARTITION p2615 VALUES LESS THAN (20928), +PARTITION p2616 VALUES LESS THAN (20936), +PARTITION p2617 VALUES LESS THAN (20944), +PARTITION p2618 VALUES LESS THAN (20952), +PARTITION p2619 VALUES LESS THAN (20960), +PARTITION p2620 VALUES LESS THAN (20968), +PARTITION p2621 VALUES LESS THAN (20976), +PARTITION p2622 VALUES LESS THAN (20984), +PARTITION p2623 VALUES LESS THAN (20992), +PARTITION p2624 VALUES LESS THAN (21000), +PARTITION p2625 VALUES LESS THAN (21008), +PARTITION p2626 VALUES LESS THAN (21016), +PARTITION p2627 VALUES LESS THAN (21024), +PARTITION p2628 VALUES LESS THAN (21032), +PARTITION p2629 VALUES LESS THAN (21040), +PARTITION p2630 VALUES LESS THAN (21048), +PARTITION p2631 VALUES LESS THAN (21056), +PARTITION p2632 VALUES LESS THAN (21064), +PARTITION p2633 VALUES LESS THAN (21072), +PARTITION p2634 VALUES LESS THAN (21080), +PARTITION p2635 VALUES LESS THAN (21088), +PARTITION p2636 VALUES LESS THAN (21096), +PARTITION p2637 VALUES LESS THAN (21104), +PARTITION p2638 VALUES LESS THAN (21112), +PARTITION p2639 VALUES LESS THAN (21120), +PARTITION p2640 VALUES LESS THAN (21128), +PARTITION p2641 VALUES LESS THAN (21136), +PARTITION p2642 VALUES LESS THAN (21144), +PARTITION p2643 VALUES LESS THAN (21152), +PARTITION p2644 VALUES LESS THAN (21160), +PARTITION p2645 VALUES LESS THAN (21168), +PARTITION p2646 VALUES LESS THAN (21176), +PARTITION p2647 VALUES LESS THAN (21184), +PARTITION p2648 VALUES LESS THAN (21192), +PARTITION p2649 VALUES LESS THAN (21200), +PARTITION p2650 VALUES LESS THAN (21208), +PARTITION p2651 VALUES LESS THAN (21216), +PARTITION p2652 VALUES LESS THAN (21224), +PARTITION p2653 VALUES LESS THAN (21232), +PARTITION p2654 VALUES LESS THAN (21240), +PARTITION p2655 VALUES LESS THAN (21248), +PARTITION p2656 VALUES LESS THAN (21256), +PARTITION p2657 VALUES LESS THAN (21264), +PARTITION p2658 VALUES LESS THAN (21272), +PARTITION p2659 VALUES LESS THAN (21280), +PARTITION p2660 VALUES LESS THAN (21288), +PARTITION p2661 VALUES LESS THAN (21296), +PARTITION p2662 VALUES LESS THAN (21304), +PARTITION p2663 VALUES LESS THAN (21312), +PARTITION p2664 VALUES LESS THAN (21320), +PARTITION p2665 VALUES LESS THAN (21328), +PARTITION p2666 VALUES LESS THAN (21336), +PARTITION p2667 VALUES LESS THAN (21344), +PARTITION p2668 VALUES LESS THAN (21352), +PARTITION p2669 VALUES LESS THAN (21360), +PARTITION p2670 VALUES LESS THAN (21368), +PARTITION p2671 VALUES LESS THAN (21376), +PARTITION p2672 VALUES LESS THAN (21384), +PARTITION p2673 VALUES LESS THAN (21392), +PARTITION p2674 VALUES LESS THAN (21400), +PARTITION p2675 VALUES LESS THAN (21408), +PARTITION p2676 VALUES LESS THAN (21416), +PARTITION p2677 VALUES LESS THAN (21424), +PARTITION p2678 VALUES LESS THAN (21432), +PARTITION p2679 VALUES LESS THAN (21440), +PARTITION p2680 VALUES LESS THAN (21448), +PARTITION p2681 VALUES LESS THAN (21456), +PARTITION p2682 VALUES LESS THAN (21464), +PARTITION p2683 VALUES LESS THAN (21472), +PARTITION p2684 VALUES LESS THAN (21480), +PARTITION p2685 VALUES LESS THAN (21488), +PARTITION p2686 VALUES LESS THAN (21496), +PARTITION p2687 VALUES LESS THAN (21504), +PARTITION p2688 VALUES LESS THAN (21512), +PARTITION p2689 VALUES LESS THAN (21520), +PARTITION p2690 VALUES LESS THAN (21528), +PARTITION p2691 VALUES LESS THAN (21536), +PARTITION p2692 VALUES LESS THAN (21544), +PARTITION p2693 VALUES LESS THAN (21552), +PARTITION p2694 VALUES LESS THAN (21560), +PARTITION p2695 VALUES LESS THAN (21568), +PARTITION p2696 VALUES LESS THAN (21576), +PARTITION p2697 VALUES LESS THAN (21584), +PARTITION p2698 VALUES LESS THAN (21592), +PARTITION p2699 VALUES LESS THAN (21600), +PARTITION p2700 VALUES LESS THAN (21608), +PARTITION p2701 VALUES LESS THAN (21616), +PARTITION p2702 VALUES LESS THAN (21624), +PARTITION p2703 VALUES LESS THAN (21632), +PARTITION p2704 VALUES LESS THAN (21640), +PARTITION p2705 VALUES LESS THAN (21648), +PARTITION p2706 VALUES LESS THAN (21656), +PARTITION p2707 VALUES LESS THAN (21664), +PARTITION p2708 VALUES LESS THAN (21672), +PARTITION p2709 VALUES LESS THAN (21680), +PARTITION p2710 VALUES LESS THAN (21688), +PARTITION p2711 VALUES LESS THAN (21696), +PARTITION p2712 VALUES LESS THAN (21704), +PARTITION p2713 VALUES LESS THAN (21712), +PARTITION p2714 VALUES LESS THAN (21720), +PARTITION p2715 VALUES LESS THAN (21728), +PARTITION p2716 VALUES LESS THAN (21736), +PARTITION p2717 VALUES LESS THAN (21744), +PARTITION p2718 VALUES LESS THAN (21752), +PARTITION p2719 VALUES LESS THAN (21760), +PARTITION p2720 VALUES LESS THAN (21768), +PARTITION p2721 VALUES LESS THAN (21776), +PARTITION p2722 VALUES LESS THAN (21784), +PARTITION p2723 VALUES LESS THAN (21792), +PARTITION p2724 VALUES LESS THAN (21800), +PARTITION p2725 VALUES LESS THAN (21808), +PARTITION p2726 VALUES LESS THAN (21816), +PARTITION p2727 VALUES LESS THAN (21824), +PARTITION p2728 VALUES LESS THAN (21832), +PARTITION p2729 VALUES LESS THAN (21840), +PARTITION p2730 VALUES LESS THAN (21848), +PARTITION p2731 VALUES LESS THAN (21856), +PARTITION p2732 VALUES LESS THAN (21864), +PARTITION p2733 VALUES LESS THAN (21872), +PARTITION p2734 VALUES LESS THAN (21880), +PARTITION p2735 VALUES LESS THAN (21888), +PARTITION p2736 VALUES LESS THAN (21896), +PARTITION p2737 VALUES LESS THAN (21904), +PARTITION p2738 VALUES LESS THAN (21912), +PARTITION p2739 VALUES LESS THAN (21920), +PARTITION p2740 VALUES LESS THAN (21928), +PARTITION p2741 VALUES LESS THAN (21936), +PARTITION p2742 VALUES LESS THAN (21944), +PARTITION p2743 VALUES LESS THAN (21952), +PARTITION p2744 VALUES LESS THAN (21960), +PARTITION p2745 VALUES LESS THAN (21968), +PARTITION p2746 VALUES LESS THAN (21976), +PARTITION p2747 VALUES LESS THAN (21984), +PARTITION p2748 VALUES LESS THAN (21992), +PARTITION p2749 VALUES LESS THAN (22000), +PARTITION p2750 VALUES LESS THAN (22008), +PARTITION p2751 VALUES LESS THAN (22016), +PARTITION p2752 VALUES LESS THAN (22024), +PARTITION p2753 VALUES LESS THAN (22032), +PARTITION p2754 VALUES LESS THAN (22040), +PARTITION p2755 VALUES LESS THAN (22048), +PARTITION p2756 VALUES LESS THAN (22056), +PARTITION p2757 VALUES LESS THAN (22064), +PARTITION p2758 VALUES LESS THAN (22072), +PARTITION p2759 VALUES LESS THAN (22080), +PARTITION p2760 VALUES LESS THAN (22088), +PARTITION p2761 VALUES LESS THAN (22096), +PARTITION p2762 VALUES LESS THAN (22104), +PARTITION p2763 VALUES LESS THAN (22112), +PARTITION p2764 VALUES LESS THAN (22120), +PARTITION p2765 VALUES LESS THAN (22128), +PARTITION p2766 VALUES LESS THAN (22136), +PARTITION p2767 VALUES LESS THAN (22144), +PARTITION p2768 VALUES LESS THAN (22152), +PARTITION p2769 VALUES LESS THAN (22160), +PARTITION p2770 VALUES LESS THAN (22168), +PARTITION p2771 VALUES LESS THAN (22176), +PARTITION p2772 VALUES LESS THAN (22184), +PARTITION p2773 VALUES LESS THAN (22192), +PARTITION p2774 VALUES LESS THAN (22200), +PARTITION p2775 VALUES LESS THAN (22208), +PARTITION p2776 VALUES LESS THAN (22216), +PARTITION p2777 VALUES LESS THAN (22224), +PARTITION p2778 VALUES LESS THAN (22232), +PARTITION p2779 VALUES LESS THAN (22240), +PARTITION p2780 VALUES LESS THAN (22248), +PARTITION p2781 VALUES LESS THAN (22256), +PARTITION p2782 VALUES LESS THAN (22264), +PARTITION p2783 VALUES LESS THAN (22272), +PARTITION p2784 VALUES LESS THAN (22280), +PARTITION p2785 VALUES LESS THAN (22288), +PARTITION p2786 VALUES LESS THAN (22296), +PARTITION p2787 VALUES LESS THAN (22304), +PARTITION p2788 VALUES LESS THAN (22312), +PARTITION p2789 VALUES LESS THAN (22320), +PARTITION p2790 VALUES LESS THAN (22328), +PARTITION p2791 VALUES LESS THAN (22336), +PARTITION p2792 VALUES LESS THAN (22344), +PARTITION p2793 VALUES LESS THAN (22352), +PARTITION p2794 VALUES LESS THAN (22360), +PARTITION p2795 VALUES LESS THAN (22368), +PARTITION p2796 VALUES LESS THAN (22376), +PARTITION p2797 VALUES LESS THAN (22384), +PARTITION p2798 VALUES LESS THAN (22392), +PARTITION p2799 VALUES LESS THAN (22400), +PARTITION p2800 VALUES LESS THAN (22408), +PARTITION p2801 VALUES LESS THAN (22416), +PARTITION p2802 VALUES LESS THAN (22424), +PARTITION p2803 VALUES LESS THAN (22432), +PARTITION p2804 VALUES LESS THAN (22440), +PARTITION p2805 VALUES LESS THAN (22448), +PARTITION p2806 VALUES LESS THAN (22456), +PARTITION p2807 VALUES LESS THAN (22464), +PARTITION p2808 VALUES LESS THAN (22472), +PARTITION p2809 VALUES LESS THAN (22480), +PARTITION p2810 VALUES LESS THAN (22488), +PARTITION p2811 VALUES LESS THAN (22496), +PARTITION p2812 VALUES LESS THAN (22504), +PARTITION p2813 VALUES LESS THAN (22512), +PARTITION p2814 VALUES LESS THAN (22520), +PARTITION p2815 VALUES LESS THAN (22528), +PARTITION p2816 VALUES LESS THAN (22536), +PARTITION p2817 VALUES LESS THAN (22544), +PARTITION p2818 VALUES LESS THAN (22552), +PARTITION p2819 VALUES LESS THAN (22560), +PARTITION p2820 VALUES LESS THAN (22568), +PARTITION p2821 VALUES LESS THAN (22576), +PARTITION p2822 VALUES LESS THAN (22584), +PARTITION p2823 VALUES LESS THAN (22592), +PARTITION p2824 VALUES LESS THAN (22600), +PARTITION p2825 VALUES LESS THAN (22608), +PARTITION p2826 VALUES LESS THAN (22616), +PARTITION p2827 VALUES LESS THAN (22624), +PARTITION p2828 VALUES LESS THAN (22632), +PARTITION p2829 VALUES LESS THAN (22640), +PARTITION p2830 VALUES LESS THAN (22648), +PARTITION p2831 VALUES LESS THAN (22656), +PARTITION p2832 VALUES LESS THAN (22664), +PARTITION p2833 VALUES LESS THAN (22672), +PARTITION p2834 VALUES LESS THAN (22680), +PARTITION p2835 VALUES LESS THAN (22688), +PARTITION p2836 VALUES LESS THAN (22696), +PARTITION p2837 VALUES LESS THAN (22704), +PARTITION p2838 VALUES LESS THAN (22712), +PARTITION p2839 VALUES LESS THAN (22720), +PARTITION p2840 VALUES LESS THAN (22728), +PARTITION p2841 VALUES LESS THAN (22736), +PARTITION p2842 VALUES LESS THAN (22744), +PARTITION p2843 VALUES LESS THAN (22752), +PARTITION p2844 VALUES LESS THAN (22760), +PARTITION p2845 VALUES LESS THAN (22768), +PARTITION p2846 VALUES LESS THAN (22776), +PARTITION p2847 VALUES LESS THAN (22784), +PARTITION p2848 VALUES LESS THAN (22792), +PARTITION p2849 VALUES LESS THAN (22800), +PARTITION p2850 VALUES LESS THAN (22808), +PARTITION p2851 VALUES LESS THAN (22816), +PARTITION p2852 VALUES LESS THAN (22824), +PARTITION p2853 VALUES LESS THAN (22832), +PARTITION p2854 VALUES LESS THAN (22840), +PARTITION p2855 VALUES LESS THAN (22848), +PARTITION p2856 VALUES LESS THAN (22856), +PARTITION p2857 VALUES LESS THAN (22864), +PARTITION p2858 VALUES LESS THAN (22872), +PARTITION p2859 VALUES LESS THAN (22880), +PARTITION p2860 VALUES LESS THAN (22888), +PARTITION p2861 VALUES LESS THAN (22896), +PARTITION p2862 VALUES LESS THAN (22904), +PARTITION p2863 VALUES LESS THAN (22912), +PARTITION p2864 VALUES LESS THAN (22920), +PARTITION p2865 VALUES LESS THAN (22928), +PARTITION p2866 VALUES LESS THAN (22936), +PARTITION p2867 VALUES LESS THAN (22944), +PARTITION p2868 VALUES LESS THAN (22952), +PARTITION p2869 VALUES LESS THAN (22960), +PARTITION p2870 VALUES LESS THAN (22968), +PARTITION p2871 VALUES LESS THAN (22976), +PARTITION p2872 VALUES LESS THAN (22984), +PARTITION p2873 VALUES LESS THAN (22992), +PARTITION p2874 VALUES LESS THAN (23000), +PARTITION p2875 VALUES LESS THAN (23008), +PARTITION p2876 VALUES LESS THAN (23016), +PARTITION p2877 VALUES LESS THAN (23024), +PARTITION p2878 VALUES LESS THAN (23032), +PARTITION p2879 VALUES LESS THAN (23040), +PARTITION p2880 VALUES LESS THAN (23048), +PARTITION p2881 VALUES LESS THAN (23056), +PARTITION p2882 VALUES LESS THAN (23064), +PARTITION p2883 VALUES LESS THAN (23072), +PARTITION p2884 VALUES LESS THAN (23080), +PARTITION p2885 VALUES LESS THAN (23088), +PARTITION p2886 VALUES LESS THAN (23096), +PARTITION p2887 VALUES LESS THAN (23104), +PARTITION p2888 VALUES LESS THAN (23112), +PARTITION p2889 VALUES LESS THAN (23120), +PARTITION p2890 VALUES LESS THAN (23128), +PARTITION p2891 VALUES LESS THAN (23136), +PARTITION p2892 VALUES LESS THAN (23144), +PARTITION p2893 VALUES LESS THAN (23152), +PARTITION p2894 VALUES LESS THAN (23160), +PARTITION p2895 VALUES LESS THAN (23168), +PARTITION p2896 VALUES LESS THAN (23176), +PARTITION p2897 VALUES LESS THAN (23184), +PARTITION p2898 VALUES LESS THAN (23192), +PARTITION p2899 VALUES LESS THAN (23200), +PARTITION p2900 VALUES LESS THAN (23208), +PARTITION p2901 VALUES LESS THAN (23216), +PARTITION p2902 VALUES LESS THAN (23224), +PARTITION p2903 VALUES LESS THAN (23232), +PARTITION p2904 VALUES LESS THAN (23240), +PARTITION p2905 VALUES LESS THAN (23248), +PARTITION p2906 VALUES LESS THAN (23256), +PARTITION p2907 VALUES LESS THAN (23264), +PARTITION p2908 VALUES LESS THAN (23272), +PARTITION p2909 VALUES LESS THAN (23280), +PARTITION p2910 VALUES LESS THAN (23288), +PARTITION p2911 VALUES LESS THAN (23296), +PARTITION p2912 VALUES LESS THAN (23304), +PARTITION p2913 VALUES LESS THAN (23312), +PARTITION p2914 VALUES LESS THAN (23320), +PARTITION p2915 VALUES LESS THAN (23328), +PARTITION p2916 VALUES LESS THAN (23336), +PARTITION p2917 VALUES LESS THAN (23344), +PARTITION p2918 VALUES LESS THAN (23352), +PARTITION p2919 VALUES LESS THAN (23360), +PARTITION p2920 VALUES LESS THAN (23368), +PARTITION p2921 VALUES LESS THAN (23376), +PARTITION p2922 VALUES LESS THAN (23384), +PARTITION p2923 VALUES LESS THAN (23392), +PARTITION p2924 VALUES LESS THAN (23400), +PARTITION p2925 VALUES LESS THAN (23408), +PARTITION p2926 VALUES LESS THAN (23416), +PARTITION p2927 VALUES LESS THAN (23424), +PARTITION p2928 VALUES LESS THAN (23432), +PARTITION p2929 VALUES LESS THAN (23440), +PARTITION p2930 VALUES LESS THAN (23448), +PARTITION p2931 VALUES LESS THAN (23456), +PARTITION p2932 VALUES LESS THAN (23464), +PARTITION p2933 VALUES LESS THAN (23472), +PARTITION p2934 VALUES LESS THAN (23480), +PARTITION p2935 VALUES LESS THAN (23488), +PARTITION p2936 VALUES LESS THAN (23496), +PARTITION p2937 VALUES LESS THAN (23504), +PARTITION p2938 VALUES LESS THAN (23512), +PARTITION p2939 VALUES LESS THAN (23520), +PARTITION p2940 VALUES LESS THAN (23528), +PARTITION p2941 VALUES LESS THAN (23536), +PARTITION p2942 VALUES LESS THAN (23544), +PARTITION p2943 VALUES LESS THAN (23552), +PARTITION p2944 VALUES LESS THAN (23560), +PARTITION p2945 VALUES LESS THAN (23568), +PARTITION p2946 VALUES LESS THAN (23576), +PARTITION p2947 VALUES LESS THAN (23584), +PARTITION p2948 VALUES LESS THAN (23592), +PARTITION p2949 VALUES LESS THAN (23600), +PARTITION p2950 VALUES LESS THAN (23608), +PARTITION p2951 VALUES LESS THAN (23616), +PARTITION p2952 VALUES LESS THAN (23624), +PARTITION p2953 VALUES LESS THAN (23632), +PARTITION p2954 VALUES LESS THAN (23640), +PARTITION p2955 VALUES LESS THAN (23648), +PARTITION p2956 VALUES LESS THAN (23656), +PARTITION p2957 VALUES LESS THAN (23664), +PARTITION p2958 VALUES LESS THAN (23672), +PARTITION p2959 VALUES LESS THAN (23680), +PARTITION p2960 VALUES LESS THAN (23688), +PARTITION p2961 VALUES LESS THAN (23696), +PARTITION p2962 VALUES LESS THAN (23704), +PARTITION p2963 VALUES LESS THAN (23712), +PARTITION p2964 VALUES LESS THAN (23720), +PARTITION p2965 VALUES LESS THAN (23728), +PARTITION p2966 VALUES LESS THAN (23736), +PARTITION p2967 VALUES LESS THAN (23744), +PARTITION p2968 VALUES LESS THAN (23752), +PARTITION p2969 VALUES LESS THAN (23760), +PARTITION p2970 VALUES LESS THAN (23768), +PARTITION p2971 VALUES LESS THAN (23776), +PARTITION p2972 VALUES LESS THAN (23784), +PARTITION p2973 VALUES LESS THAN (23792), +PARTITION p2974 VALUES LESS THAN (23800), +PARTITION p2975 VALUES LESS THAN (23808), +PARTITION p2976 VALUES LESS THAN (23816), +PARTITION p2977 VALUES LESS THAN (23824), +PARTITION p2978 VALUES LESS THAN (23832), +PARTITION p2979 VALUES LESS THAN (23840), +PARTITION p2980 VALUES LESS THAN (23848), +PARTITION p2981 VALUES LESS THAN (23856), +PARTITION p2982 VALUES LESS THAN (23864), +PARTITION p2983 VALUES LESS THAN (23872), +PARTITION p2984 VALUES LESS THAN (23880), +PARTITION p2985 VALUES LESS THAN (23888), +PARTITION p2986 VALUES LESS THAN (23896), +PARTITION p2987 VALUES LESS THAN (23904), +PARTITION p2988 VALUES LESS THAN (23912), +PARTITION p2989 VALUES LESS THAN (23920), +PARTITION p2990 VALUES LESS THAN (23928), +PARTITION p2991 VALUES LESS THAN (23936), +PARTITION p2992 VALUES LESS THAN (23944), +PARTITION p2993 VALUES LESS THAN (23952), +PARTITION p2994 VALUES LESS THAN (23960), +PARTITION p2995 VALUES LESS THAN (23968), +PARTITION p2996 VALUES LESS THAN (23976), +PARTITION p2997 VALUES LESS THAN (23984), +PARTITION p2998 VALUES LESS THAN (23992), +PARTITION p2999 VALUES LESS THAN (24000), +PARTITION p3000 VALUES LESS THAN (24008), +PARTITION p3001 VALUES LESS THAN (24016), +PARTITION p3002 VALUES LESS THAN (24024), +PARTITION p3003 VALUES LESS THAN (24032), +PARTITION p3004 VALUES LESS THAN (24040), +PARTITION p3005 VALUES LESS THAN (24048), +PARTITION p3006 VALUES LESS THAN (24056), +PARTITION p3007 VALUES LESS THAN (24064), +PARTITION p3008 VALUES LESS THAN (24072), +PARTITION p3009 VALUES LESS THAN (24080), +PARTITION p3010 VALUES LESS THAN (24088), +PARTITION p3011 VALUES LESS THAN (24096), +PARTITION p3012 VALUES LESS THAN (24104), +PARTITION p3013 VALUES LESS THAN (24112), +PARTITION p3014 VALUES LESS THAN (24120), +PARTITION p3015 VALUES LESS THAN (24128), +PARTITION p3016 VALUES LESS THAN (24136), +PARTITION p3017 VALUES LESS THAN (24144), +PARTITION p3018 VALUES LESS THAN (24152), +PARTITION p3019 VALUES LESS THAN (24160), +PARTITION p3020 VALUES LESS THAN (24168), +PARTITION p3021 VALUES LESS THAN (24176), +PARTITION p3022 VALUES LESS THAN (24184), +PARTITION p3023 VALUES LESS THAN (24192), +PARTITION p3024 VALUES LESS THAN (24200), +PARTITION p3025 VALUES LESS THAN (24208), +PARTITION p3026 VALUES LESS THAN (24216), +PARTITION p3027 VALUES LESS THAN (24224), +PARTITION p3028 VALUES LESS THAN (24232), +PARTITION p3029 VALUES LESS THAN (24240), +PARTITION p3030 VALUES LESS THAN (24248), +PARTITION p3031 VALUES LESS THAN (24256), +PARTITION p3032 VALUES LESS THAN (24264), +PARTITION p3033 VALUES LESS THAN (24272), +PARTITION p3034 VALUES LESS THAN (24280), +PARTITION p3035 VALUES LESS THAN (24288), +PARTITION p3036 VALUES LESS THAN (24296), +PARTITION p3037 VALUES LESS THAN (24304), +PARTITION p3038 VALUES LESS THAN (24312), +PARTITION p3039 VALUES LESS THAN (24320), +PARTITION p3040 VALUES LESS THAN (24328), +PARTITION p3041 VALUES LESS THAN (24336), +PARTITION p3042 VALUES LESS THAN (24344), +PARTITION p3043 VALUES LESS THAN (24352), +PARTITION p3044 VALUES LESS THAN (24360), +PARTITION p3045 VALUES LESS THAN (24368), +PARTITION p3046 VALUES LESS THAN (24376), +PARTITION p3047 VALUES LESS THAN (24384), +PARTITION p3048 VALUES LESS THAN (24392), +PARTITION p3049 VALUES LESS THAN (24400), +PARTITION p3050 VALUES LESS THAN (24408), +PARTITION p3051 VALUES LESS THAN (24416), +PARTITION p3052 VALUES LESS THAN (24424), +PARTITION p3053 VALUES LESS THAN (24432), +PARTITION p3054 VALUES LESS THAN (24440), +PARTITION p3055 VALUES LESS THAN (24448), +PARTITION p3056 VALUES LESS THAN (24456), +PARTITION p3057 VALUES LESS THAN (24464), +PARTITION p3058 VALUES LESS THAN (24472), +PARTITION p3059 VALUES LESS THAN (24480), +PARTITION p3060 VALUES LESS THAN (24488), +PARTITION p3061 VALUES LESS THAN (24496), +PARTITION p3062 VALUES LESS THAN (24504), +PARTITION p3063 VALUES LESS THAN (24512), +PARTITION p3064 VALUES LESS THAN (24520), +PARTITION p3065 VALUES LESS THAN (24528), +PARTITION p3066 VALUES LESS THAN (24536), +PARTITION p3067 VALUES LESS THAN (24544), +PARTITION p3068 VALUES LESS THAN (24552), +PARTITION p3069 VALUES LESS THAN (24560), +PARTITION p3070 VALUES LESS THAN (24568), +PARTITION p3071 VALUES LESS THAN (24576), +PARTITION p3072 VALUES LESS THAN (24584), +PARTITION p3073 VALUES LESS THAN (24592), +PARTITION p3074 VALUES LESS THAN (24600), +PARTITION p3075 VALUES LESS THAN (24608), +PARTITION p3076 VALUES LESS THAN (24616), +PARTITION p3077 VALUES LESS THAN (24624), +PARTITION p3078 VALUES LESS THAN (24632), +PARTITION p3079 VALUES LESS THAN (24640), +PARTITION p3080 VALUES LESS THAN (24648), +PARTITION p3081 VALUES LESS THAN (24656), +PARTITION p3082 VALUES LESS THAN (24664), +PARTITION p3083 VALUES LESS THAN (24672), +PARTITION p3084 VALUES LESS THAN (24680), +PARTITION p3085 VALUES LESS THAN (24688), +PARTITION p3086 VALUES LESS THAN (24696), +PARTITION p3087 VALUES LESS THAN (24704), +PARTITION p3088 VALUES LESS THAN (24712), +PARTITION p3089 VALUES LESS THAN (24720), +PARTITION p3090 VALUES LESS THAN (24728), +PARTITION p3091 VALUES LESS THAN (24736), +PARTITION p3092 VALUES LESS THAN (24744), +PARTITION p3093 VALUES LESS THAN (24752), +PARTITION p3094 VALUES LESS THAN (24760), +PARTITION p3095 VALUES LESS THAN (24768), +PARTITION p3096 VALUES LESS THAN (24776), +PARTITION p3097 VALUES LESS THAN (24784), +PARTITION p3098 VALUES LESS THAN (24792), +PARTITION p3099 VALUES LESS THAN (24800), +PARTITION p3100 VALUES LESS THAN (24808), +PARTITION p3101 VALUES LESS THAN (24816), +PARTITION p3102 VALUES LESS THAN (24824), +PARTITION p3103 VALUES LESS THAN (24832), +PARTITION p3104 VALUES LESS THAN (24840), +PARTITION p3105 VALUES LESS THAN (24848), +PARTITION p3106 VALUES LESS THAN (24856), +PARTITION p3107 VALUES LESS THAN (24864), +PARTITION p3108 VALUES LESS THAN (24872), +PARTITION p3109 VALUES LESS THAN (24880), +PARTITION p3110 VALUES LESS THAN (24888), +PARTITION p3111 VALUES LESS THAN (24896), +PARTITION p3112 VALUES LESS THAN (24904), +PARTITION p3113 VALUES LESS THAN (24912), +PARTITION p3114 VALUES LESS THAN (24920), +PARTITION p3115 VALUES LESS THAN (24928), +PARTITION p3116 VALUES LESS THAN (24936), +PARTITION p3117 VALUES LESS THAN (24944), +PARTITION p3118 VALUES LESS THAN (24952), +PARTITION p3119 VALUES LESS THAN (24960), +PARTITION p3120 VALUES LESS THAN (24968), +PARTITION p3121 VALUES LESS THAN (24976), +PARTITION p3122 VALUES LESS THAN (24984), +PARTITION p3123 VALUES LESS THAN (24992), +PARTITION p3124 VALUES LESS THAN (25000), +PARTITION p3125 VALUES LESS THAN (25008), +PARTITION p3126 VALUES LESS THAN (25016), +PARTITION p3127 VALUES LESS THAN (25024), +PARTITION p3128 VALUES LESS THAN (25032), +PARTITION p3129 VALUES LESS THAN (25040), +PARTITION p3130 VALUES LESS THAN (25048), +PARTITION p3131 VALUES LESS THAN (25056), +PARTITION p3132 VALUES LESS THAN (25064), +PARTITION p3133 VALUES LESS THAN (25072), +PARTITION p3134 VALUES LESS THAN (25080), +PARTITION p3135 VALUES LESS THAN (25088), +PARTITION p3136 VALUES LESS THAN (25096), +PARTITION p3137 VALUES LESS THAN (25104), +PARTITION p3138 VALUES LESS THAN (25112), +PARTITION p3139 VALUES LESS THAN (25120), +PARTITION p3140 VALUES LESS THAN (25128), +PARTITION p3141 VALUES LESS THAN (25136), +PARTITION p3142 VALUES LESS THAN (25144), +PARTITION p3143 VALUES LESS THAN (25152), +PARTITION p3144 VALUES LESS THAN (25160), +PARTITION p3145 VALUES LESS THAN (25168), +PARTITION p3146 VALUES LESS THAN (25176), +PARTITION p3147 VALUES LESS THAN (25184), +PARTITION p3148 VALUES LESS THAN (25192), +PARTITION p3149 VALUES LESS THAN (25200), +PARTITION p3150 VALUES LESS THAN (25208), +PARTITION p3151 VALUES LESS THAN (25216), +PARTITION p3152 VALUES LESS THAN (25224), +PARTITION p3153 VALUES LESS THAN (25232), +PARTITION p3154 VALUES LESS THAN (25240), +PARTITION p3155 VALUES LESS THAN (25248), +PARTITION p3156 VALUES LESS THAN (25256), +PARTITION p3157 VALUES LESS THAN (25264), +PARTITION p3158 VALUES LESS THAN (25272), +PARTITION p3159 VALUES LESS THAN (25280), +PARTITION p3160 VALUES LESS THAN (25288), +PARTITION p3161 VALUES LESS THAN (25296), +PARTITION p3162 VALUES LESS THAN (25304), +PARTITION p3163 VALUES LESS THAN (25312), +PARTITION p3164 VALUES LESS THAN (25320), +PARTITION p3165 VALUES LESS THAN (25328), +PARTITION p3166 VALUES LESS THAN (25336), +PARTITION p3167 VALUES LESS THAN (25344), +PARTITION p3168 VALUES LESS THAN (25352), +PARTITION p3169 VALUES LESS THAN (25360), +PARTITION p3170 VALUES LESS THAN (25368), +PARTITION p3171 VALUES LESS THAN (25376), +PARTITION p3172 VALUES LESS THAN (25384), +PARTITION p3173 VALUES LESS THAN (25392), +PARTITION p3174 VALUES LESS THAN (25400), +PARTITION p3175 VALUES LESS THAN (25408), +PARTITION p3176 VALUES LESS THAN (25416), +PARTITION p3177 VALUES LESS THAN (25424), +PARTITION p3178 VALUES LESS THAN (25432), +PARTITION p3179 VALUES LESS THAN (25440), +PARTITION p3180 VALUES LESS THAN (25448), +PARTITION p3181 VALUES LESS THAN (25456), +PARTITION p3182 VALUES LESS THAN (25464), +PARTITION p3183 VALUES LESS THAN (25472), +PARTITION p3184 VALUES LESS THAN (25480), +PARTITION p3185 VALUES LESS THAN (25488), +PARTITION p3186 VALUES LESS THAN (25496), +PARTITION p3187 VALUES LESS THAN (25504), +PARTITION p3188 VALUES LESS THAN (25512), +PARTITION p3189 VALUES LESS THAN (25520), +PARTITION p3190 VALUES LESS THAN (25528), +PARTITION p3191 VALUES LESS THAN (25536), +PARTITION p3192 VALUES LESS THAN (25544), +PARTITION p3193 VALUES LESS THAN (25552), +PARTITION p3194 VALUES LESS THAN (25560), +PARTITION p3195 VALUES LESS THAN (25568), +PARTITION p3196 VALUES LESS THAN (25576), +PARTITION p3197 VALUES LESS THAN (25584), +PARTITION p3198 VALUES LESS THAN (25592), +PARTITION p3199 VALUES LESS THAN (25600), +PARTITION p3200 VALUES LESS THAN (25608), +PARTITION p3201 VALUES LESS THAN (25616), +PARTITION p3202 VALUES LESS THAN (25624), +PARTITION p3203 VALUES LESS THAN (25632), +PARTITION p3204 VALUES LESS THAN (25640), +PARTITION p3205 VALUES LESS THAN (25648), +PARTITION p3206 VALUES LESS THAN (25656), +PARTITION p3207 VALUES LESS THAN (25664), +PARTITION p3208 VALUES LESS THAN (25672), +PARTITION p3209 VALUES LESS THAN (25680), +PARTITION p3210 VALUES LESS THAN (25688), +PARTITION p3211 VALUES LESS THAN (25696), +PARTITION p3212 VALUES LESS THAN (25704), +PARTITION p3213 VALUES LESS THAN (25712), +PARTITION p3214 VALUES LESS THAN (25720), +PARTITION p3215 VALUES LESS THAN (25728), +PARTITION p3216 VALUES LESS THAN (25736), +PARTITION p3217 VALUES LESS THAN (25744), +PARTITION p3218 VALUES LESS THAN (25752), +PARTITION p3219 VALUES LESS THAN (25760), +PARTITION p3220 VALUES LESS THAN (25768), +PARTITION p3221 VALUES LESS THAN (25776), +PARTITION p3222 VALUES LESS THAN (25784), +PARTITION p3223 VALUES LESS THAN (25792), +PARTITION p3224 VALUES LESS THAN (25800), +PARTITION p3225 VALUES LESS THAN (25808), +PARTITION p3226 VALUES LESS THAN (25816), +PARTITION p3227 VALUES LESS THAN (25824), +PARTITION p3228 VALUES LESS THAN (25832), +PARTITION p3229 VALUES LESS THAN (25840), +PARTITION p3230 VALUES LESS THAN (25848), +PARTITION p3231 VALUES LESS THAN (25856), +PARTITION p3232 VALUES LESS THAN (25864), +PARTITION p3233 VALUES LESS THAN (25872), +PARTITION p3234 VALUES LESS THAN (25880), +PARTITION p3235 VALUES LESS THAN (25888), +PARTITION p3236 VALUES LESS THAN (25896), +PARTITION p3237 VALUES LESS THAN (25904), +PARTITION p3238 VALUES LESS THAN (25912), +PARTITION p3239 VALUES LESS THAN (25920), +PARTITION p3240 VALUES LESS THAN (25928), +PARTITION p3241 VALUES LESS THAN (25936), +PARTITION p3242 VALUES LESS THAN (25944), +PARTITION p3243 VALUES LESS THAN (25952), +PARTITION p3244 VALUES LESS THAN (25960), +PARTITION p3245 VALUES LESS THAN (25968), +PARTITION p3246 VALUES LESS THAN (25976), +PARTITION p3247 VALUES LESS THAN (25984), +PARTITION p3248 VALUES LESS THAN (25992), +PARTITION p3249 VALUES LESS THAN (26000), +PARTITION p3250 VALUES LESS THAN (26008), +PARTITION p3251 VALUES LESS THAN (26016), +PARTITION p3252 VALUES LESS THAN (26024), +PARTITION p3253 VALUES LESS THAN (26032), +PARTITION p3254 VALUES LESS THAN (26040), +PARTITION p3255 VALUES LESS THAN (26048), +PARTITION p3256 VALUES LESS THAN (26056), +PARTITION p3257 VALUES LESS THAN (26064), +PARTITION p3258 VALUES LESS THAN (26072), +PARTITION p3259 VALUES LESS THAN (26080), +PARTITION p3260 VALUES LESS THAN (26088), +PARTITION p3261 VALUES LESS THAN (26096), +PARTITION p3262 VALUES LESS THAN (26104), +PARTITION p3263 VALUES LESS THAN (26112), +PARTITION p3264 VALUES LESS THAN (26120), +PARTITION p3265 VALUES LESS THAN (26128), +PARTITION p3266 VALUES LESS THAN (26136), +PARTITION p3267 VALUES LESS THAN (26144), +PARTITION p3268 VALUES LESS THAN (26152), +PARTITION p3269 VALUES LESS THAN (26160), +PARTITION p3270 VALUES LESS THAN (26168), +PARTITION p3271 VALUES LESS THAN (26176), +PARTITION p3272 VALUES LESS THAN (26184), +PARTITION p3273 VALUES LESS THAN (26192), +PARTITION p3274 VALUES LESS THAN (26200), +PARTITION p3275 VALUES LESS THAN (26208), +PARTITION p3276 VALUES LESS THAN (26216), +PARTITION p3277 VALUES LESS THAN (26224), +PARTITION p3278 VALUES LESS THAN (26232), +PARTITION p3279 VALUES LESS THAN (26240), +PARTITION p3280 VALUES LESS THAN (26248), +PARTITION p3281 VALUES LESS THAN (26256), +PARTITION p3282 VALUES LESS THAN (26264), +PARTITION p3283 VALUES LESS THAN (26272), +PARTITION p3284 VALUES LESS THAN (26280), +PARTITION p3285 VALUES LESS THAN (26288), +PARTITION p3286 VALUES LESS THAN (26296), +PARTITION p3287 VALUES LESS THAN (26304), +PARTITION p3288 VALUES LESS THAN (26312), +PARTITION p3289 VALUES LESS THAN (26320), +PARTITION p3290 VALUES LESS THAN (26328), +PARTITION p3291 VALUES LESS THAN (26336), +PARTITION p3292 VALUES LESS THAN (26344), +PARTITION p3293 VALUES LESS THAN (26352), +PARTITION p3294 VALUES LESS THAN (26360), +PARTITION p3295 VALUES LESS THAN (26368), +PARTITION p3296 VALUES LESS THAN (26376), +PARTITION p3297 VALUES LESS THAN (26384), +PARTITION p3298 VALUES LESS THAN (26392), +PARTITION p3299 VALUES LESS THAN (26400), +PARTITION p3300 VALUES LESS THAN (26408), +PARTITION p3301 VALUES LESS THAN (26416), +PARTITION p3302 VALUES LESS THAN (26424), +PARTITION p3303 VALUES LESS THAN (26432), +PARTITION p3304 VALUES LESS THAN (26440), +PARTITION p3305 VALUES LESS THAN (26448), +PARTITION p3306 VALUES LESS THAN (26456), +PARTITION p3307 VALUES LESS THAN (26464), +PARTITION p3308 VALUES LESS THAN (26472), +PARTITION p3309 VALUES LESS THAN (26480), +PARTITION p3310 VALUES LESS THAN (26488), +PARTITION p3311 VALUES LESS THAN (26496), +PARTITION p3312 VALUES LESS THAN (26504), +PARTITION p3313 VALUES LESS THAN (26512), +PARTITION p3314 VALUES LESS THAN (26520), +PARTITION p3315 VALUES LESS THAN (26528), +PARTITION p3316 VALUES LESS THAN (26536), +PARTITION p3317 VALUES LESS THAN (26544), +PARTITION p3318 VALUES LESS THAN (26552), +PARTITION p3319 VALUES LESS THAN (26560), +PARTITION p3320 VALUES LESS THAN (26568), +PARTITION p3321 VALUES LESS THAN (26576), +PARTITION p3322 VALUES LESS THAN (26584), +PARTITION p3323 VALUES LESS THAN (26592), +PARTITION p3324 VALUES LESS THAN (26600), +PARTITION p3325 VALUES LESS THAN (26608), +PARTITION p3326 VALUES LESS THAN (26616), +PARTITION p3327 VALUES LESS THAN (26624), +PARTITION p3328 VALUES LESS THAN (26632), +PARTITION p3329 VALUES LESS THAN (26640), +PARTITION p3330 VALUES LESS THAN (26648), +PARTITION p3331 VALUES LESS THAN (26656), +PARTITION p3332 VALUES LESS THAN (26664), +PARTITION p3333 VALUES LESS THAN (26672), +PARTITION p3334 VALUES LESS THAN (26680), +PARTITION p3335 VALUES LESS THAN (26688), +PARTITION p3336 VALUES LESS THAN (26696), +PARTITION p3337 VALUES LESS THAN (26704), +PARTITION p3338 VALUES LESS THAN (26712), +PARTITION p3339 VALUES LESS THAN (26720), +PARTITION p3340 VALUES LESS THAN (26728), +PARTITION p3341 VALUES LESS THAN (26736), +PARTITION p3342 VALUES LESS THAN (26744), +PARTITION p3343 VALUES LESS THAN (26752), +PARTITION p3344 VALUES LESS THAN (26760), +PARTITION p3345 VALUES LESS THAN (26768), +PARTITION p3346 VALUES LESS THAN (26776), +PARTITION p3347 VALUES LESS THAN (26784), +PARTITION p3348 VALUES LESS THAN (26792), +PARTITION p3349 VALUES LESS THAN (26800), +PARTITION p3350 VALUES LESS THAN (26808), +PARTITION p3351 VALUES LESS THAN (26816), +PARTITION p3352 VALUES LESS THAN (26824), +PARTITION p3353 VALUES LESS THAN (26832), +PARTITION p3354 VALUES LESS THAN (26840), +PARTITION p3355 VALUES LESS THAN (26848), +PARTITION p3356 VALUES LESS THAN (26856), +PARTITION p3357 VALUES LESS THAN (26864), +PARTITION p3358 VALUES LESS THAN (26872), +PARTITION p3359 VALUES LESS THAN (26880), +PARTITION p3360 VALUES LESS THAN (26888), +PARTITION p3361 VALUES LESS THAN (26896), +PARTITION p3362 VALUES LESS THAN (26904), +PARTITION p3363 VALUES LESS THAN (26912), +PARTITION p3364 VALUES LESS THAN (26920), +PARTITION p3365 VALUES LESS THAN (26928), +PARTITION p3366 VALUES LESS THAN (26936), +PARTITION p3367 VALUES LESS THAN (26944), +PARTITION p3368 VALUES LESS THAN (26952), +PARTITION p3369 VALUES LESS THAN (26960), +PARTITION p3370 VALUES LESS THAN (26968), +PARTITION p3371 VALUES LESS THAN (26976), +PARTITION p3372 VALUES LESS THAN (26984), +PARTITION p3373 VALUES LESS THAN (26992), +PARTITION p3374 VALUES LESS THAN (27000), +PARTITION p3375 VALUES LESS THAN (27008), +PARTITION p3376 VALUES LESS THAN (27016), +PARTITION p3377 VALUES LESS THAN (27024), +PARTITION p3378 VALUES LESS THAN (27032), +PARTITION p3379 VALUES LESS THAN (27040), +PARTITION p3380 VALUES LESS THAN (27048), +PARTITION p3381 VALUES LESS THAN (27056), +PARTITION p3382 VALUES LESS THAN (27064), +PARTITION p3383 VALUES LESS THAN (27072), +PARTITION p3384 VALUES LESS THAN (27080), +PARTITION p3385 VALUES LESS THAN (27088), +PARTITION p3386 VALUES LESS THAN (27096), +PARTITION p3387 VALUES LESS THAN (27104), +PARTITION p3388 VALUES LESS THAN (27112), +PARTITION p3389 VALUES LESS THAN (27120), +PARTITION p3390 VALUES LESS THAN (27128), +PARTITION p3391 VALUES LESS THAN (27136), +PARTITION p3392 VALUES LESS THAN (27144), +PARTITION p3393 VALUES LESS THAN (27152), +PARTITION p3394 VALUES LESS THAN (27160), +PARTITION p3395 VALUES LESS THAN (27168), +PARTITION p3396 VALUES LESS THAN (27176), +PARTITION p3397 VALUES LESS THAN (27184), +PARTITION p3398 VALUES LESS THAN (27192), +PARTITION p3399 VALUES LESS THAN (27200), +PARTITION p3400 VALUES LESS THAN (27208), +PARTITION p3401 VALUES LESS THAN (27216), +PARTITION p3402 VALUES LESS THAN (27224), +PARTITION p3403 VALUES LESS THAN (27232), +PARTITION p3404 VALUES LESS THAN (27240), +PARTITION p3405 VALUES LESS THAN (27248), +PARTITION p3406 VALUES LESS THAN (27256), +PARTITION p3407 VALUES LESS THAN (27264), +PARTITION p3408 VALUES LESS THAN (27272), +PARTITION p3409 VALUES LESS THAN (27280), +PARTITION p3410 VALUES LESS THAN (27288), +PARTITION p3411 VALUES LESS THAN (27296), +PARTITION p3412 VALUES LESS THAN (27304), +PARTITION p3413 VALUES LESS THAN (27312), +PARTITION p3414 VALUES LESS THAN (27320), +PARTITION p3415 VALUES LESS THAN (27328), +PARTITION p3416 VALUES LESS THAN (27336), +PARTITION p3417 VALUES LESS THAN (27344), +PARTITION p3418 VALUES LESS THAN (27352), +PARTITION p3419 VALUES LESS THAN (27360), +PARTITION p3420 VALUES LESS THAN (27368), +PARTITION p3421 VALUES LESS THAN (27376), +PARTITION p3422 VALUES LESS THAN (27384), +PARTITION p3423 VALUES LESS THAN (27392), +PARTITION p3424 VALUES LESS THAN (27400), +PARTITION p3425 VALUES LESS THAN (27408), +PARTITION p3426 VALUES LESS THAN (27416), +PARTITION p3427 VALUES LESS THAN (27424), +PARTITION p3428 VALUES LESS THAN (27432), +PARTITION p3429 VALUES LESS THAN (27440), +PARTITION p3430 VALUES LESS THAN (27448), +PARTITION p3431 VALUES LESS THAN (27456), +PARTITION p3432 VALUES LESS THAN (27464), +PARTITION p3433 VALUES LESS THAN (27472), +PARTITION p3434 VALUES LESS THAN (27480), +PARTITION p3435 VALUES LESS THAN (27488), +PARTITION p3436 VALUES LESS THAN (27496), +PARTITION p3437 VALUES LESS THAN (27504), +PARTITION p3438 VALUES LESS THAN (27512), +PARTITION p3439 VALUES LESS THAN (27520), +PARTITION p3440 VALUES LESS THAN (27528), +PARTITION p3441 VALUES LESS THAN (27536), +PARTITION p3442 VALUES LESS THAN (27544), +PARTITION p3443 VALUES LESS THAN (27552), +PARTITION p3444 VALUES LESS THAN (27560), +PARTITION p3445 VALUES LESS THAN (27568), +PARTITION p3446 VALUES LESS THAN (27576), +PARTITION p3447 VALUES LESS THAN (27584), +PARTITION p3448 VALUES LESS THAN (27592), +PARTITION p3449 VALUES LESS THAN (27600), +PARTITION p3450 VALUES LESS THAN (27608), +PARTITION p3451 VALUES LESS THAN (27616), +PARTITION p3452 VALUES LESS THAN (27624), +PARTITION p3453 VALUES LESS THAN (27632), +PARTITION p3454 VALUES LESS THAN (27640), +PARTITION p3455 VALUES LESS THAN (27648), +PARTITION p3456 VALUES LESS THAN (27656), +PARTITION p3457 VALUES LESS THAN (27664), +PARTITION p3458 VALUES LESS THAN (27672), +PARTITION p3459 VALUES LESS THAN (27680), +PARTITION p3460 VALUES LESS THAN (27688), +PARTITION p3461 VALUES LESS THAN (27696), +PARTITION p3462 VALUES LESS THAN (27704), +PARTITION p3463 VALUES LESS THAN (27712), +PARTITION p3464 VALUES LESS THAN (27720), +PARTITION p3465 VALUES LESS THAN (27728), +PARTITION p3466 VALUES LESS THAN (27736), +PARTITION p3467 VALUES LESS THAN (27744), +PARTITION p3468 VALUES LESS THAN (27752), +PARTITION p3469 VALUES LESS THAN (27760), +PARTITION p3470 VALUES LESS THAN (27768), +PARTITION p3471 VALUES LESS THAN (27776), +PARTITION p3472 VALUES LESS THAN (27784), +PARTITION p3473 VALUES LESS THAN (27792), +PARTITION p3474 VALUES LESS THAN (27800), +PARTITION p3475 VALUES LESS THAN (27808), +PARTITION p3476 VALUES LESS THAN (27816), +PARTITION p3477 VALUES LESS THAN (27824), +PARTITION p3478 VALUES LESS THAN (27832), +PARTITION p3479 VALUES LESS THAN (27840), +PARTITION p3480 VALUES LESS THAN (27848), +PARTITION p3481 VALUES LESS THAN (27856), +PARTITION p3482 VALUES LESS THAN (27864), +PARTITION p3483 VALUES LESS THAN (27872), +PARTITION p3484 VALUES LESS THAN (27880), +PARTITION p3485 VALUES LESS THAN (27888), +PARTITION p3486 VALUES LESS THAN (27896), +PARTITION p3487 VALUES LESS THAN (27904), +PARTITION p3488 VALUES LESS THAN (27912), +PARTITION p3489 VALUES LESS THAN (27920), +PARTITION p3490 VALUES LESS THAN (27928), +PARTITION p3491 VALUES LESS THAN (27936), +PARTITION p3492 VALUES LESS THAN (27944), +PARTITION p3493 VALUES LESS THAN (27952), +PARTITION p3494 VALUES LESS THAN (27960), +PARTITION p3495 VALUES LESS THAN (27968), +PARTITION p3496 VALUES LESS THAN (27976), +PARTITION p3497 VALUES LESS THAN (27984), +PARTITION p3498 VALUES LESS THAN (27992), +PARTITION p3499 VALUES LESS THAN (28000), +PARTITION p3500 VALUES LESS THAN (28008), +PARTITION p3501 VALUES LESS THAN (28016), +PARTITION p3502 VALUES LESS THAN (28024), +PARTITION p3503 VALUES LESS THAN (28032), +PARTITION p3504 VALUES LESS THAN (28040), +PARTITION p3505 VALUES LESS THAN (28048), +PARTITION p3506 VALUES LESS THAN (28056), +PARTITION p3507 VALUES LESS THAN (28064), +PARTITION p3508 VALUES LESS THAN (28072), +PARTITION p3509 VALUES LESS THAN (28080), +PARTITION p3510 VALUES LESS THAN (28088), +PARTITION p3511 VALUES LESS THAN (28096), +PARTITION p3512 VALUES LESS THAN (28104), +PARTITION p3513 VALUES LESS THAN (28112), +PARTITION p3514 VALUES LESS THAN (28120), +PARTITION p3515 VALUES LESS THAN (28128), +PARTITION p3516 VALUES LESS THAN (28136), +PARTITION p3517 VALUES LESS THAN (28144), +PARTITION p3518 VALUES LESS THAN (28152), +PARTITION p3519 VALUES LESS THAN (28160), +PARTITION p3520 VALUES LESS THAN (28168), +PARTITION p3521 VALUES LESS THAN (28176), +PARTITION p3522 VALUES LESS THAN (28184), +PARTITION p3523 VALUES LESS THAN (28192), +PARTITION p3524 VALUES LESS THAN (28200), +PARTITION p3525 VALUES LESS THAN (28208), +PARTITION p3526 VALUES LESS THAN (28216), +PARTITION p3527 VALUES LESS THAN (28224), +PARTITION p3528 VALUES LESS THAN (28232), +PARTITION p3529 VALUES LESS THAN (28240), +PARTITION p3530 VALUES LESS THAN (28248), +PARTITION p3531 VALUES LESS THAN (28256), +PARTITION p3532 VALUES LESS THAN (28264), +PARTITION p3533 VALUES LESS THAN (28272), +PARTITION p3534 VALUES LESS THAN (28280), +PARTITION p3535 VALUES LESS THAN (28288), +PARTITION p3536 VALUES LESS THAN (28296), +PARTITION p3537 VALUES LESS THAN (28304), +PARTITION p3538 VALUES LESS THAN (28312), +PARTITION p3539 VALUES LESS THAN (28320), +PARTITION p3540 VALUES LESS THAN (28328), +PARTITION p3541 VALUES LESS THAN (28336), +PARTITION p3542 VALUES LESS THAN (28344), +PARTITION p3543 VALUES LESS THAN (28352), +PARTITION p3544 VALUES LESS THAN (28360), +PARTITION p3545 VALUES LESS THAN (28368), +PARTITION p3546 VALUES LESS THAN (28376), +PARTITION p3547 VALUES LESS THAN (28384), +PARTITION p3548 VALUES LESS THAN (28392), +PARTITION p3549 VALUES LESS THAN (28400), +PARTITION p3550 VALUES LESS THAN (28408), +PARTITION p3551 VALUES LESS THAN (28416), +PARTITION p3552 VALUES LESS THAN (28424), +PARTITION p3553 VALUES LESS THAN (28432), +PARTITION p3554 VALUES LESS THAN (28440), +PARTITION p3555 VALUES LESS THAN (28448), +PARTITION p3556 VALUES LESS THAN (28456), +PARTITION p3557 VALUES LESS THAN (28464), +PARTITION p3558 VALUES LESS THAN (28472), +PARTITION p3559 VALUES LESS THAN (28480), +PARTITION p3560 VALUES LESS THAN (28488), +PARTITION p3561 VALUES LESS THAN (28496), +PARTITION p3562 VALUES LESS THAN (28504), +PARTITION p3563 VALUES LESS THAN (28512), +PARTITION p3564 VALUES LESS THAN (28520), +PARTITION p3565 VALUES LESS THAN (28528), +PARTITION p3566 VALUES LESS THAN (28536), +PARTITION p3567 VALUES LESS THAN (28544), +PARTITION p3568 VALUES LESS THAN (28552), +PARTITION p3569 VALUES LESS THAN (28560), +PARTITION p3570 VALUES LESS THAN (28568), +PARTITION p3571 VALUES LESS THAN (28576), +PARTITION p3572 VALUES LESS THAN (28584), +PARTITION p3573 VALUES LESS THAN (28592), +PARTITION p3574 VALUES LESS THAN (28600), +PARTITION p3575 VALUES LESS THAN (28608), +PARTITION p3576 VALUES LESS THAN (28616), +PARTITION p3577 VALUES LESS THAN (28624), +PARTITION p3578 VALUES LESS THAN (28632), +PARTITION p3579 VALUES LESS THAN (28640), +PARTITION p3580 VALUES LESS THAN (28648), +PARTITION p3581 VALUES LESS THAN (28656), +PARTITION p3582 VALUES LESS THAN (28664), +PARTITION p3583 VALUES LESS THAN (28672), +PARTITION p3584 VALUES LESS THAN (28680), +PARTITION p3585 VALUES LESS THAN (28688), +PARTITION p3586 VALUES LESS THAN (28696), +PARTITION p3587 VALUES LESS THAN (28704), +PARTITION p3588 VALUES LESS THAN (28712), +PARTITION p3589 VALUES LESS THAN (28720), +PARTITION p3590 VALUES LESS THAN (28728), +PARTITION p3591 VALUES LESS THAN (28736), +PARTITION p3592 VALUES LESS THAN (28744), +PARTITION p3593 VALUES LESS THAN (28752), +PARTITION p3594 VALUES LESS THAN (28760), +PARTITION p3595 VALUES LESS THAN (28768), +PARTITION p3596 VALUES LESS THAN (28776), +PARTITION p3597 VALUES LESS THAN (28784), +PARTITION p3598 VALUES LESS THAN (28792), +PARTITION p3599 VALUES LESS THAN (28800), +PARTITION p3600 VALUES LESS THAN (28808), +PARTITION p3601 VALUES LESS THAN (28816), +PARTITION p3602 VALUES LESS THAN (28824), +PARTITION p3603 VALUES LESS THAN (28832), +PARTITION p3604 VALUES LESS THAN (28840), +PARTITION p3605 VALUES LESS THAN (28848), +PARTITION p3606 VALUES LESS THAN (28856), +PARTITION p3607 VALUES LESS THAN (28864), +PARTITION p3608 VALUES LESS THAN (28872), +PARTITION p3609 VALUES LESS THAN (28880), +PARTITION p3610 VALUES LESS THAN (28888), +PARTITION p3611 VALUES LESS THAN (28896), +PARTITION p3612 VALUES LESS THAN (28904), +PARTITION p3613 VALUES LESS THAN (28912), +PARTITION p3614 VALUES LESS THAN (28920), +PARTITION p3615 VALUES LESS THAN (28928), +PARTITION p3616 VALUES LESS THAN (28936), +PARTITION p3617 VALUES LESS THAN (28944), +PARTITION p3618 VALUES LESS THAN (28952), +PARTITION p3619 VALUES LESS THAN (28960), +PARTITION p3620 VALUES LESS THAN (28968), +PARTITION p3621 VALUES LESS THAN (28976), +PARTITION p3622 VALUES LESS THAN (28984), +PARTITION p3623 VALUES LESS THAN (28992), +PARTITION p3624 VALUES LESS THAN (29000), +PARTITION p3625 VALUES LESS THAN (29008), +PARTITION p3626 VALUES LESS THAN (29016), +PARTITION p3627 VALUES LESS THAN (29024), +PARTITION p3628 VALUES LESS THAN (29032), +PARTITION p3629 VALUES LESS THAN (29040), +PARTITION p3630 VALUES LESS THAN (29048), +PARTITION p3631 VALUES LESS THAN (29056), +PARTITION p3632 VALUES LESS THAN (29064), +PARTITION p3633 VALUES LESS THAN (29072), +PARTITION p3634 VALUES LESS THAN (29080), +PARTITION p3635 VALUES LESS THAN (29088), +PARTITION p3636 VALUES LESS THAN (29096), +PARTITION p3637 VALUES LESS THAN (29104), +PARTITION p3638 VALUES LESS THAN (29112), +PARTITION p3639 VALUES LESS THAN (29120), +PARTITION p3640 VALUES LESS THAN (29128), +PARTITION p3641 VALUES LESS THAN (29136), +PARTITION p3642 VALUES LESS THAN (29144), +PARTITION p3643 VALUES LESS THAN (29152), +PARTITION p3644 VALUES LESS THAN (29160), +PARTITION p3645 VALUES LESS THAN (29168), +PARTITION p3646 VALUES LESS THAN (29176), +PARTITION p3647 VALUES LESS THAN (29184), +PARTITION p3648 VALUES LESS THAN (29192), +PARTITION p3649 VALUES LESS THAN (29200), +PARTITION p3650 VALUES LESS THAN (29208), +PARTITION p3651 VALUES LESS THAN (29216), +PARTITION p3652 VALUES LESS THAN (29224), +PARTITION p3653 VALUES LESS THAN (29232), +PARTITION p3654 VALUES LESS THAN (29240), +PARTITION p3655 VALUES LESS THAN (29248), +PARTITION p3656 VALUES LESS THAN (29256), +PARTITION p3657 VALUES LESS THAN (29264), +PARTITION p3658 VALUES LESS THAN (29272), +PARTITION p3659 VALUES LESS THAN (29280), +PARTITION p3660 VALUES LESS THAN (29288), +PARTITION p3661 VALUES LESS THAN (29296), +PARTITION p3662 VALUES LESS THAN (29304), +PARTITION p3663 VALUES LESS THAN (29312), +PARTITION p3664 VALUES LESS THAN (29320), +PARTITION p3665 VALUES LESS THAN (29328), +PARTITION p3666 VALUES LESS THAN (29336), +PARTITION p3667 VALUES LESS THAN (29344), +PARTITION p3668 VALUES LESS THAN (29352), +PARTITION p3669 VALUES LESS THAN (29360), +PARTITION p3670 VALUES LESS THAN (29368), +PARTITION p3671 VALUES LESS THAN (29376), +PARTITION p3672 VALUES LESS THAN (29384), +PARTITION p3673 VALUES LESS THAN (29392), +PARTITION p3674 VALUES LESS THAN (29400), +PARTITION p3675 VALUES LESS THAN (29408), +PARTITION p3676 VALUES LESS THAN (29416), +PARTITION p3677 VALUES LESS THAN (29424), +PARTITION p3678 VALUES LESS THAN (29432), +PARTITION p3679 VALUES LESS THAN (29440), +PARTITION p3680 VALUES LESS THAN (29448), +PARTITION p3681 VALUES LESS THAN (29456), +PARTITION p3682 VALUES LESS THAN (29464), +PARTITION p3683 VALUES LESS THAN (29472), +PARTITION p3684 VALUES LESS THAN (29480), +PARTITION p3685 VALUES LESS THAN (29488), +PARTITION p3686 VALUES LESS THAN (29496), +PARTITION p3687 VALUES LESS THAN (29504), +PARTITION p3688 VALUES LESS THAN (29512), +PARTITION p3689 VALUES LESS THAN (29520), +PARTITION p3690 VALUES LESS THAN (29528), +PARTITION p3691 VALUES LESS THAN (29536), +PARTITION p3692 VALUES LESS THAN (29544), +PARTITION p3693 VALUES LESS THAN (29552), +PARTITION p3694 VALUES LESS THAN (29560), +PARTITION p3695 VALUES LESS THAN (29568), +PARTITION p3696 VALUES LESS THAN (29576), +PARTITION p3697 VALUES LESS THAN (29584), +PARTITION p3698 VALUES LESS THAN (29592), +PARTITION p3699 VALUES LESS THAN (29600), +PARTITION p3700 VALUES LESS THAN (29608), +PARTITION p3701 VALUES LESS THAN (29616), +PARTITION p3702 VALUES LESS THAN (29624), +PARTITION p3703 VALUES LESS THAN (29632), +PARTITION p3704 VALUES LESS THAN (29640), +PARTITION p3705 VALUES LESS THAN (29648), +PARTITION p3706 VALUES LESS THAN (29656), +PARTITION p3707 VALUES LESS THAN (29664), +PARTITION p3708 VALUES LESS THAN (29672), +PARTITION p3709 VALUES LESS THAN (29680), +PARTITION p3710 VALUES LESS THAN (29688), +PARTITION p3711 VALUES LESS THAN (29696), +PARTITION p3712 VALUES LESS THAN (29704), +PARTITION p3713 VALUES LESS THAN (29712), +PARTITION p3714 VALUES LESS THAN (29720), +PARTITION p3715 VALUES LESS THAN (29728), +PARTITION p3716 VALUES LESS THAN (29736), +PARTITION p3717 VALUES LESS THAN (29744), +PARTITION p3718 VALUES LESS THAN (29752), +PARTITION p3719 VALUES LESS THAN (29760), +PARTITION p3720 VALUES LESS THAN (29768), +PARTITION p3721 VALUES LESS THAN (29776), +PARTITION p3722 VALUES LESS THAN (29784), +PARTITION p3723 VALUES LESS THAN (29792), +PARTITION p3724 VALUES LESS THAN (29800), +PARTITION p3725 VALUES LESS THAN (29808), +PARTITION p3726 VALUES LESS THAN (29816), +PARTITION p3727 VALUES LESS THAN (29824), +PARTITION p3728 VALUES LESS THAN (29832), +PARTITION p3729 VALUES LESS THAN (29840), +PARTITION p3730 VALUES LESS THAN (29848), +PARTITION p3731 VALUES LESS THAN (29856), +PARTITION p3732 VALUES LESS THAN (29864), +PARTITION p3733 VALUES LESS THAN (29872), +PARTITION p3734 VALUES LESS THAN (29880), +PARTITION p3735 VALUES LESS THAN (29888), +PARTITION p3736 VALUES LESS THAN (29896), +PARTITION p3737 VALUES LESS THAN (29904), +PARTITION p3738 VALUES LESS THAN (29912), +PARTITION p3739 VALUES LESS THAN (29920), +PARTITION p3740 VALUES LESS THAN (29928), +PARTITION p3741 VALUES LESS THAN (29936), +PARTITION p3742 VALUES LESS THAN (29944), +PARTITION p3743 VALUES LESS THAN (29952), +PARTITION p3744 VALUES LESS THAN (29960), +PARTITION p3745 VALUES LESS THAN (29968), +PARTITION p3746 VALUES LESS THAN (29976), +PARTITION p3747 VALUES LESS THAN (29984), +PARTITION p3748 VALUES LESS THAN (29992), +PARTITION p3749 VALUES LESS THAN (30000), +PARTITION p3750 VALUES LESS THAN (30008), +PARTITION p3751 VALUES LESS THAN (30016), +PARTITION p3752 VALUES LESS THAN (30024), +PARTITION p3753 VALUES LESS THAN (30032), +PARTITION p3754 VALUES LESS THAN (30040), +PARTITION p3755 VALUES LESS THAN (30048), +PARTITION p3756 VALUES LESS THAN (30056), +PARTITION p3757 VALUES LESS THAN (30064), +PARTITION p3758 VALUES LESS THAN (30072), +PARTITION p3759 VALUES LESS THAN (30080), +PARTITION p3760 VALUES LESS THAN (30088), +PARTITION p3761 VALUES LESS THAN (30096), +PARTITION p3762 VALUES LESS THAN (30104), +PARTITION p3763 VALUES LESS THAN (30112), +PARTITION p3764 VALUES LESS THAN (30120), +PARTITION p3765 VALUES LESS THAN (30128), +PARTITION p3766 VALUES LESS THAN (30136), +PARTITION p3767 VALUES LESS THAN (30144), +PARTITION p3768 VALUES LESS THAN (30152), +PARTITION p3769 VALUES LESS THAN (30160), +PARTITION p3770 VALUES LESS THAN (30168), +PARTITION p3771 VALUES LESS THAN (30176), +PARTITION p3772 VALUES LESS THAN (30184), +PARTITION p3773 VALUES LESS THAN (30192), +PARTITION p3774 VALUES LESS THAN (30200), +PARTITION p3775 VALUES LESS THAN (30208), +PARTITION p3776 VALUES LESS THAN (30216), +PARTITION p3777 VALUES LESS THAN (30224), +PARTITION p3778 VALUES LESS THAN (30232), +PARTITION p3779 VALUES LESS THAN (30240), +PARTITION p3780 VALUES LESS THAN (30248), +PARTITION p3781 VALUES LESS THAN (30256), +PARTITION p3782 VALUES LESS THAN (30264), +PARTITION p3783 VALUES LESS THAN (30272), +PARTITION p3784 VALUES LESS THAN (30280), +PARTITION p3785 VALUES LESS THAN (30288), +PARTITION p3786 VALUES LESS THAN (30296), +PARTITION p3787 VALUES LESS THAN (30304), +PARTITION p3788 VALUES LESS THAN (30312), +PARTITION p3789 VALUES LESS THAN (30320), +PARTITION p3790 VALUES LESS THAN (30328), +PARTITION p3791 VALUES LESS THAN (30336), +PARTITION p3792 VALUES LESS THAN (30344), +PARTITION p3793 VALUES LESS THAN (30352), +PARTITION p3794 VALUES LESS THAN (30360), +PARTITION p3795 VALUES LESS THAN (30368), +PARTITION p3796 VALUES LESS THAN (30376), +PARTITION p3797 VALUES LESS THAN (30384), +PARTITION p3798 VALUES LESS THAN (30392), +PARTITION p3799 VALUES LESS THAN (30400), +PARTITION p3800 VALUES LESS THAN (30408), +PARTITION p3801 VALUES LESS THAN (30416), +PARTITION p3802 VALUES LESS THAN (30424), +PARTITION p3803 VALUES LESS THAN (30432), +PARTITION p3804 VALUES LESS THAN (30440), +PARTITION p3805 VALUES LESS THAN (30448), +PARTITION p3806 VALUES LESS THAN (30456), +PARTITION p3807 VALUES LESS THAN (30464), +PARTITION p3808 VALUES LESS THAN (30472), +PARTITION p3809 VALUES LESS THAN (30480), +PARTITION p3810 VALUES LESS THAN (30488), +PARTITION p3811 VALUES LESS THAN (30496), +PARTITION p3812 VALUES LESS THAN (30504), +PARTITION p3813 VALUES LESS THAN (30512), +PARTITION p3814 VALUES LESS THAN (30520), +PARTITION p3815 VALUES LESS THAN (30528), +PARTITION p3816 VALUES LESS THAN (30536), +PARTITION p3817 VALUES LESS THAN (30544), +PARTITION p3818 VALUES LESS THAN (30552), +PARTITION p3819 VALUES LESS THAN (30560), +PARTITION p3820 VALUES LESS THAN (30568), +PARTITION p3821 VALUES LESS THAN (30576), +PARTITION p3822 VALUES LESS THAN (30584), +PARTITION p3823 VALUES LESS THAN (30592), +PARTITION p3824 VALUES LESS THAN (30600), +PARTITION p3825 VALUES LESS THAN (30608), +PARTITION p3826 VALUES LESS THAN (30616), +PARTITION p3827 VALUES LESS THAN (30624), +PARTITION p3828 VALUES LESS THAN (30632), +PARTITION p3829 VALUES LESS THAN (30640), +PARTITION p3830 VALUES LESS THAN (30648), +PARTITION p3831 VALUES LESS THAN (30656), +PARTITION p3832 VALUES LESS THAN (30664), +PARTITION p3833 VALUES LESS THAN (30672), +PARTITION p3834 VALUES LESS THAN (30680), +PARTITION p3835 VALUES LESS THAN (30688), +PARTITION p3836 VALUES LESS THAN (30696), +PARTITION p3837 VALUES LESS THAN (30704), +PARTITION p3838 VALUES LESS THAN (30712), +PARTITION p3839 VALUES LESS THAN (30720), +PARTITION p3840 VALUES LESS THAN (30728), +PARTITION p3841 VALUES LESS THAN (30736), +PARTITION p3842 VALUES LESS THAN (30744), +PARTITION p3843 VALUES LESS THAN (30752), +PARTITION p3844 VALUES LESS THAN (30760), +PARTITION p3845 VALUES LESS THAN (30768), +PARTITION p3846 VALUES LESS THAN (30776), +PARTITION p3847 VALUES LESS THAN (30784), +PARTITION p3848 VALUES LESS THAN (30792), +PARTITION p3849 VALUES LESS THAN (30800), +PARTITION p3850 VALUES LESS THAN (30808), +PARTITION p3851 VALUES LESS THAN (30816), +PARTITION p3852 VALUES LESS THAN (30824), +PARTITION p3853 VALUES LESS THAN (30832), +PARTITION p3854 VALUES LESS THAN (30840), +PARTITION p3855 VALUES LESS THAN (30848), +PARTITION p3856 VALUES LESS THAN (30856), +PARTITION p3857 VALUES LESS THAN (30864), +PARTITION p3858 VALUES LESS THAN (30872), +PARTITION p3859 VALUES LESS THAN (30880), +PARTITION p3860 VALUES LESS THAN (30888), +PARTITION p3861 VALUES LESS THAN (30896), +PARTITION p3862 VALUES LESS THAN (30904), +PARTITION p3863 VALUES LESS THAN (30912), +PARTITION p3864 VALUES LESS THAN (30920), +PARTITION p3865 VALUES LESS THAN (30928), +PARTITION p3866 VALUES LESS THAN (30936), +PARTITION p3867 VALUES LESS THAN (30944), +PARTITION p3868 VALUES LESS THAN (30952), +PARTITION p3869 VALUES LESS THAN (30960), +PARTITION p3870 VALUES LESS THAN (30968), +PARTITION p3871 VALUES LESS THAN (30976), +PARTITION p3872 VALUES LESS THAN (30984), +PARTITION p3873 VALUES LESS THAN (30992), +PARTITION p3874 VALUES LESS THAN (31000), +PARTITION p3875 VALUES LESS THAN (31008), +PARTITION p3876 VALUES LESS THAN (31016), +PARTITION p3877 VALUES LESS THAN (31024), +PARTITION p3878 VALUES LESS THAN (31032), +PARTITION p3879 VALUES LESS THAN (31040), +PARTITION p3880 VALUES LESS THAN (31048), +PARTITION p3881 VALUES LESS THAN (31056), +PARTITION p3882 VALUES LESS THAN (31064), +PARTITION p3883 VALUES LESS THAN (31072), +PARTITION p3884 VALUES LESS THAN (31080), +PARTITION p3885 VALUES LESS THAN (31088), +PARTITION p3886 VALUES LESS THAN (31096), +PARTITION p3887 VALUES LESS THAN (31104), +PARTITION p3888 VALUES LESS THAN (31112), +PARTITION p3889 VALUES LESS THAN (31120), +PARTITION p3890 VALUES LESS THAN (31128), +PARTITION p3891 VALUES LESS THAN (31136), +PARTITION p3892 VALUES LESS THAN (31144), +PARTITION p3893 VALUES LESS THAN (31152), +PARTITION p3894 VALUES LESS THAN (31160), +PARTITION p3895 VALUES LESS THAN (31168), +PARTITION p3896 VALUES LESS THAN (31176), +PARTITION p3897 VALUES LESS THAN (31184), +PARTITION p3898 VALUES LESS THAN (31192), +PARTITION p3899 VALUES LESS THAN (31200), +PARTITION p3900 VALUES LESS THAN (31208), +PARTITION p3901 VALUES LESS THAN (31216), +PARTITION p3902 VALUES LESS THAN (31224), +PARTITION p3903 VALUES LESS THAN (31232), +PARTITION p3904 VALUES LESS THAN (31240), +PARTITION p3905 VALUES LESS THAN (31248), +PARTITION p3906 VALUES LESS THAN (31256), +PARTITION p3907 VALUES LESS THAN (31264), +PARTITION p3908 VALUES LESS THAN (31272), +PARTITION p3909 VALUES LESS THAN (31280), +PARTITION p3910 VALUES LESS THAN (31288), +PARTITION p3911 VALUES LESS THAN (31296), +PARTITION p3912 VALUES LESS THAN (31304), +PARTITION p3913 VALUES LESS THAN (31312), +PARTITION p3914 VALUES LESS THAN (31320), +PARTITION p3915 VALUES LESS THAN (31328), +PARTITION p3916 VALUES LESS THAN (31336), +PARTITION p3917 VALUES LESS THAN (31344), +PARTITION p3918 VALUES LESS THAN (31352), +PARTITION p3919 VALUES LESS THAN (31360), +PARTITION p3920 VALUES LESS THAN (31368), +PARTITION p3921 VALUES LESS THAN (31376), +PARTITION p3922 VALUES LESS THAN (31384), +PARTITION p3923 VALUES LESS THAN (31392), +PARTITION p3924 VALUES LESS THAN (31400), +PARTITION p3925 VALUES LESS THAN (31408), +PARTITION p3926 VALUES LESS THAN (31416), +PARTITION p3927 VALUES LESS THAN (31424), +PARTITION p3928 VALUES LESS THAN (31432), +PARTITION p3929 VALUES LESS THAN (31440), +PARTITION p3930 VALUES LESS THAN (31448), +PARTITION p3931 VALUES LESS THAN (31456), +PARTITION p3932 VALUES LESS THAN (31464), +PARTITION p3933 VALUES LESS THAN (31472), +PARTITION p3934 VALUES LESS THAN (31480), +PARTITION p3935 VALUES LESS THAN (31488), +PARTITION p3936 VALUES LESS THAN (31496), +PARTITION p3937 VALUES LESS THAN (31504), +PARTITION p3938 VALUES LESS THAN (31512), +PARTITION p3939 VALUES LESS THAN (31520), +PARTITION p3940 VALUES LESS THAN (31528), +PARTITION p3941 VALUES LESS THAN (31536), +PARTITION p3942 VALUES LESS THAN (31544), +PARTITION p3943 VALUES LESS THAN (31552), +PARTITION p3944 VALUES LESS THAN (31560), +PARTITION p3945 VALUES LESS THAN (31568), +PARTITION p3946 VALUES LESS THAN (31576), +PARTITION p3947 VALUES LESS THAN (31584), +PARTITION p3948 VALUES LESS THAN (31592), +PARTITION p3949 VALUES LESS THAN (31600), +PARTITION p3950 VALUES LESS THAN (31608), +PARTITION p3951 VALUES LESS THAN (31616), +PARTITION p3952 VALUES LESS THAN (31624), +PARTITION p3953 VALUES LESS THAN (31632), +PARTITION p3954 VALUES LESS THAN (31640), +PARTITION p3955 VALUES LESS THAN (31648), +PARTITION p3956 VALUES LESS THAN (31656), +PARTITION p3957 VALUES LESS THAN (31664), +PARTITION p3958 VALUES LESS THAN (31672), +PARTITION p3959 VALUES LESS THAN (31680), +PARTITION p3960 VALUES LESS THAN (31688), +PARTITION p3961 VALUES LESS THAN (31696), +PARTITION p3962 VALUES LESS THAN (31704), +PARTITION p3963 VALUES LESS THAN (31712), +PARTITION p3964 VALUES LESS THAN (31720), +PARTITION p3965 VALUES LESS THAN (31728), +PARTITION p3966 VALUES LESS THAN (31736), +PARTITION p3967 VALUES LESS THAN (31744), +PARTITION p3968 VALUES LESS THAN (31752), +PARTITION p3969 VALUES LESS THAN (31760), +PARTITION p3970 VALUES LESS THAN (31768), +PARTITION p3971 VALUES LESS THAN (31776), +PARTITION p3972 VALUES LESS THAN (31784), +PARTITION p3973 VALUES LESS THAN (31792), +PARTITION p3974 VALUES LESS THAN (31800), +PARTITION p3975 VALUES LESS THAN (31808), +PARTITION p3976 VALUES LESS THAN (31816), +PARTITION p3977 VALUES LESS THAN (31824), +PARTITION p3978 VALUES LESS THAN (31832), +PARTITION p3979 VALUES LESS THAN (31840), +PARTITION p3980 VALUES LESS THAN (31848), +PARTITION p3981 VALUES LESS THAN (31856), +PARTITION p3982 VALUES LESS THAN (31864), +PARTITION p3983 VALUES LESS THAN (31872), +PARTITION p3984 VALUES LESS THAN (31880), +PARTITION p3985 VALUES LESS THAN (31888), +PARTITION p3986 VALUES LESS THAN (31896), +PARTITION p3987 VALUES LESS THAN (31904), +PARTITION p3988 VALUES LESS THAN (31912), +PARTITION p3989 VALUES LESS THAN (31920), +PARTITION p3990 VALUES LESS THAN (31928), +PARTITION p3991 VALUES LESS THAN (31936), +PARTITION p3992 VALUES LESS THAN (31944), +PARTITION p3993 VALUES LESS THAN (31952), +PARTITION p3994 VALUES LESS THAN (31960), +PARTITION p3995 VALUES LESS THAN (31968), +PARTITION p3996 VALUES LESS THAN (31976), +PARTITION p3997 VALUES LESS THAN (31984), +PARTITION p3998 VALUES LESS THAN (31992), +PARTITION p3999 VALUES LESS THAN (32000), +PARTITION p4000 VALUES LESS THAN (32008), +PARTITION p4001 VALUES LESS THAN (32016), +PARTITION p4002 VALUES LESS THAN (32024), +PARTITION p4003 VALUES LESS THAN (32032), +PARTITION p4004 VALUES LESS THAN (32040), +PARTITION p4005 VALUES LESS THAN (32048), +PARTITION p4006 VALUES LESS THAN (32056), +PARTITION p4007 VALUES LESS THAN (32064), +PARTITION p4008 VALUES LESS THAN (32072), +PARTITION p4009 VALUES LESS THAN (32080), +PARTITION p4010 VALUES LESS THAN (32088), +PARTITION p4011 VALUES LESS THAN (32096), +PARTITION p4012 VALUES LESS THAN (32104), +PARTITION p4013 VALUES LESS THAN (32112), +PARTITION p4014 VALUES LESS THAN (32120), +PARTITION p4015 VALUES LESS THAN (32128), +PARTITION p4016 VALUES LESS THAN (32136), +PARTITION p4017 VALUES LESS THAN (32144), +PARTITION p4018 VALUES LESS THAN (32152), +PARTITION p4019 VALUES LESS THAN (32160), +PARTITION p4020 VALUES LESS THAN (32168), +PARTITION p4021 VALUES LESS THAN (32176), +PARTITION p4022 VALUES LESS THAN (32184), +PARTITION p4023 VALUES LESS THAN (32192), +PARTITION p4024 VALUES LESS THAN (32200), +PARTITION p4025 VALUES LESS THAN (32208), +PARTITION p4026 VALUES LESS THAN (32216), +PARTITION p4027 VALUES LESS THAN (32224), +PARTITION p4028 VALUES LESS THAN (32232), +PARTITION p4029 VALUES LESS THAN (32240), +PARTITION p4030 VALUES LESS THAN (32248), +PARTITION p4031 VALUES LESS THAN (32256), +PARTITION p4032 VALUES LESS THAN (32264), +PARTITION p4033 VALUES LESS THAN (32272), +PARTITION p4034 VALUES LESS THAN (32280), +PARTITION p4035 VALUES LESS THAN (32288), +PARTITION p4036 VALUES LESS THAN (32296), +PARTITION p4037 VALUES LESS THAN (32304), +PARTITION p4038 VALUES LESS THAN (32312), +PARTITION p4039 VALUES LESS THAN (32320), +PARTITION p4040 VALUES LESS THAN (32328), +PARTITION p4041 VALUES LESS THAN (32336), +PARTITION p4042 VALUES LESS THAN (32344), +PARTITION p4043 VALUES LESS THAN (32352), +PARTITION p4044 VALUES LESS THAN (32360), +PARTITION p4045 VALUES LESS THAN (32368), +PARTITION p4046 VALUES LESS THAN (32376), +PARTITION p4047 VALUES LESS THAN (32384), +PARTITION p4048 VALUES LESS THAN (32392), +PARTITION p4049 VALUES LESS THAN (32400), +PARTITION p4050 VALUES LESS THAN (32408), +PARTITION p4051 VALUES LESS THAN (32416), +PARTITION p4052 VALUES LESS THAN (32424), +PARTITION p4053 VALUES LESS THAN (32432), +PARTITION p4054 VALUES LESS THAN (32440), +PARTITION p4055 VALUES LESS THAN (32448), +PARTITION p4056 VALUES LESS THAN (32456), +PARTITION p4057 VALUES LESS THAN (32464), +PARTITION p4058 VALUES LESS THAN (32472), +PARTITION p4059 VALUES LESS THAN (32480), +PARTITION p4060 VALUES LESS THAN (32488), +PARTITION p4061 VALUES LESS THAN (32496), +PARTITION p4062 VALUES LESS THAN (32504), +PARTITION p4063 VALUES LESS THAN (32512), +PARTITION p4064 VALUES LESS THAN (32520), +PARTITION p4065 VALUES LESS THAN (32528), +PARTITION p4066 VALUES LESS THAN (32536), +PARTITION p4067 VALUES LESS THAN (32544), +PARTITION p4068 VALUES LESS THAN (32552), +PARTITION p4069 VALUES LESS THAN (32560), +PARTITION p4070 VALUES LESS THAN (32568), +PARTITION p4071 VALUES LESS THAN (32576), +PARTITION p4072 VALUES LESS THAN (32584), +PARTITION p4073 VALUES LESS THAN (32592), +PARTITION p4074 VALUES LESS THAN (32600), +PARTITION p4075 VALUES LESS THAN (32608), +PARTITION p4076 VALUES LESS THAN (32616), +PARTITION p4077 VALUES LESS THAN (32624), +PARTITION p4078 VALUES LESS THAN (32632), +PARTITION p4079 VALUES LESS THAN (32640), +PARTITION p4080 VALUES LESS THAN (32648), +PARTITION p4081 VALUES LESS THAN (32656), +PARTITION p4082 VALUES LESS THAN (32664), +PARTITION p4083 VALUES LESS THAN (32672), +PARTITION p4084 VALUES LESS THAN (32680), +PARTITION p4085 VALUES LESS THAN (32688), +PARTITION p4086 VALUES LESS THAN (32696), +PARTITION p4087 VALUES LESS THAN (32704), +PARTITION p4088 VALUES LESS THAN (32712), +PARTITION p4089 VALUES LESS THAN (32720), +PARTITION p4090 VALUES LESS THAN (32728), +PARTITION p4091 VALUES LESS THAN (32736), +PARTITION p4092 VALUES LESS THAN (32744), +PARTITION p4093 VALUES LESS THAN (32752), +PARTITION p4094 VALUES LESS THAN (32760), +PARTITION p4095 VALUES LESS THAN (32768), +PARTITION p4096 VALUES LESS THAN (32776), +PARTITION p4097 VALUES LESS THAN (32784), +PARTITION p4098 VALUES LESS THAN (32792), +PARTITION p4099 VALUES LESS THAN (32800), +PARTITION p4100 VALUES LESS THAN (32808), +PARTITION p4101 VALUES LESS THAN (32816), +PARTITION p4102 VALUES LESS THAN (32824), +PARTITION p4103 VALUES LESS THAN (32832), +PARTITION p4104 VALUES LESS THAN (32840), +PARTITION p4105 VALUES LESS THAN (32848), +PARTITION p4106 VALUES LESS THAN (32856), +PARTITION p4107 VALUES LESS THAN (32864), +PARTITION p4108 VALUES LESS THAN (32872), +PARTITION p4109 VALUES LESS THAN (32880), +PARTITION p4110 VALUES LESS THAN (32888), +PARTITION p4111 VALUES LESS THAN (32896), +PARTITION p4112 VALUES LESS THAN (32904), +PARTITION p4113 VALUES LESS THAN (32912), +PARTITION p4114 VALUES LESS THAN (32920), +PARTITION p4115 VALUES LESS THAN (32928), +PARTITION p4116 VALUES LESS THAN (32936), +PARTITION p4117 VALUES LESS THAN (32944), +PARTITION p4118 VALUES LESS THAN (32952), +PARTITION p4119 VALUES LESS THAN (32960), +PARTITION p4120 VALUES LESS THAN (32968), +PARTITION p4121 VALUES LESS THAN (32976), +PARTITION p4122 VALUES LESS THAN (32984), +PARTITION p4123 VALUES LESS THAN (32992), +PARTITION p4124 VALUES LESS THAN (33000), +PARTITION p4125 VALUES LESS THAN (33008), +PARTITION p4126 VALUES LESS THAN (33016), +PARTITION p4127 VALUES LESS THAN (33024), +PARTITION p4128 VALUES LESS THAN (33032), +PARTITION p4129 VALUES LESS THAN (33040), +PARTITION p4130 VALUES LESS THAN (33048), +PARTITION p4131 VALUES LESS THAN (33056), +PARTITION p4132 VALUES LESS THAN (33064), +PARTITION p4133 VALUES LESS THAN (33072), +PARTITION p4134 VALUES LESS THAN (33080), +PARTITION p4135 VALUES LESS THAN (33088), +PARTITION p4136 VALUES LESS THAN (33096), +PARTITION p4137 VALUES LESS THAN (33104), +PARTITION p4138 VALUES LESS THAN (33112), +PARTITION p4139 VALUES LESS THAN (33120), +PARTITION p4140 VALUES LESS THAN (33128), +PARTITION p4141 VALUES LESS THAN (33136), +PARTITION p4142 VALUES LESS THAN (33144), +PARTITION p4143 VALUES LESS THAN (33152), +PARTITION p4144 VALUES LESS THAN (33160), +PARTITION p4145 VALUES LESS THAN (33168), +PARTITION p4146 VALUES LESS THAN (33176), +PARTITION p4147 VALUES LESS THAN (33184), +PARTITION p4148 VALUES LESS THAN (33192), +PARTITION p4149 VALUES LESS THAN (33200), +PARTITION p4150 VALUES LESS THAN (33208), +PARTITION p4151 VALUES LESS THAN (33216), +PARTITION p4152 VALUES LESS THAN (33224), +PARTITION p4153 VALUES LESS THAN (33232), +PARTITION p4154 VALUES LESS THAN (33240), +PARTITION p4155 VALUES LESS THAN (33248), +PARTITION p4156 VALUES LESS THAN (33256), +PARTITION p4157 VALUES LESS THAN (33264), +PARTITION p4158 VALUES LESS THAN (33272), +PARTITION p4159 VALUES LESS THAN (33280), +PARTITION p4160 VALUES LESS THAN (33288), +PARTITION p4161 VALUES LESS THAN (33296), +PARTITION p4162 VALUES LESS THAN (33304), +PARTITION p4163 VALUES LESS THAN (33312), +PARTITION p4164 VALUES LESS THAN (33320), +PARTITION p4165 VALUES LESS THAN (33328), +PARTITION p4166 VALUES LESS THAN (33336), +PARTITION p4167 VALUES LESS THAN (33344), +PARTITION p4168 VALUES LESS THAN (33352), +PARTITION p4169 VALUES LESS THAN (33360), +PARTITION p4170 VALUES LESS THAN (33368), +PARTITION p4171 VALUES LESS THAN (33376), +PARTITION p4172 VALUES LESS THAN (33384), +PARTITION p4173 VALUES LESS THAN (33392), +PARTITION p4174 VALUES LESS THAN (33400), +PARTITION p4175 VALUES LESS THAN (33408), +PARTITION p4176 VALUES LESS THAN (33416), +PARTITION p4177 VALUES LESS THAN (33424), +PARTITION p4178 VALUES LESS THAN (33432), +PARTITION p4179 VALUES LESS THAN (33440), +PARTITION p4180 VALUES LESS THAN (33448), +PARTITION p4181 VALUES LESS THAN (33456), +PARTITION p4182 VALUES LESS THAN (33464), +PARTITION p4183 VALUES LESS THAN (33472), +PARTITION p4184 VALUES LESS THAN (33480), +PARTITION p4185 VALUES LESS THAN (33488), +PARTITION p4186 VALUES LESS THAN (33496), +PARTITION p4187 VALUES LESS THAN (33504), +PARTITION p4188 VALUES LESS THAN (33512), +PARTITION p4189 VALUES LESS THAN (33520), +PARTITION p4190 VALUES LESS THAN (33528), +PARTITION p4191 VALUES LESS THAN (33536), +PARTITION p4192 VALUES LESS THAN (33544), +PARTITION p4193 VALUES LESS THAN (33552), +PARTITION p4194 VALUES LESS THAN (33560), +PARTITION p4195 VALUES LESS THAN (33568), +PARTITION p4196 VALUES LESS THAN (33576), +PARTITION p4197 VALUES LESS THAN (33584), +PARTITION p4198 VALUES LESS THAN (33592), +PARTITION p4199 VALUES LESS THAN (33600), +PARTITION p4200 VALUES LESS THAN (33608), +PARTITION p4201 VALUES LESS THAN (33616), +PARTITION p4202 VALUES LESS THAN (33624), +PARTITION p4203 VALUES LESS THAN (33632), +PARTITION p4204 VALUES LESS THAN (33640), +PARTITION p4205 VALUES LESS THAN (33648), +PARTITION p4206 VALUES LESS THAN (33656), +PARTITION p4207 VALUES LESS THAN (33664), +PARTITION p4208 VALUES LESS THAN (33672), +PARTITION p4209 VALUES LESS THAN (33680), +PARTITION p4210 VALUES LESS THAN (33688), +PARTITION p4211 VALUES LESS THAN (33696), +PARTITION p4212 VALUES LESS THAN (33704), +PARTITION p4213 VALUES LESS THAN (33712), +PARTITION p4214 VALUES LESS THAN (33720), +PARTITION p4215 VALUES LESS THAN (33728), +PARTITION p4216 VALUES LESS THAN (33736), +PARTITION p4217 VALUES LESS THAN (33744), +PARTITION p4218 VALUES LESS THAN (33752), +PARTITION p4219 VALUES LESS THAN (33760), +PARTITION p4220 VALUES LESS THAN (33768), +PARTITION p4221 VALUES LESS THAN (33776), +PARTITION p4222 VALUES LESS THAN (33784), +PARTITION p4223 VALUES LESS THAN (33792), +PARTITION p4224 VALUES LESS THAN (33800), +PARTITION p4225 VALUES LESS THAN (33808), +PARTITION p4226 VALUES LESS THAN (33816), +PARTITION p4227 VALUES LESS THAN (33824), +PARTITION p4228 VALUES LESS THAN (33832), +PARTITION p4229 VALUES LESS THAN (33840), +PARTITION p4230 VALUES LESS THAN (33848), +PARTITION p4231 VALUES LESS THAN (33856), +PARTITION p4232 VALUES LESS THAN (33864), +PARTITION p4233 VALUES LESS THAN (33872), +PARTITION p4234 VALUES LESS THAN (33880), +PARTITION p4235 VALUES LESS THAN (33888), +PARTITION p4236 VALUES LESS THAN (33896), +PARTITION p4237 VALUES LESS THAN (33904), +PARTITION p4238 VALUES LESS THAN (33912), +PARTITION p4239 VALUES LESS THAN (33920), +PARTITION p4240 VALUES LESS THAN (33928), +PARTITION p4241 VALUES LESS THAN (33936), +PARTITION p4242 VALUES LESS THAN (33944), +PARTITION p4243 VALUES LESS THAN (33952), +PARTITION p4244 VALUES LESS THAN (33960), +PARTITION p4245 VALUES LESS THAN (33968), +PARTITION p4246 VALUES LESS THAN (33976), +PARTITION p4247 VALUES LESS THAN (33984), +PARTITION p4248 VALUES LESS THAN (33992), +PARTITION p4249 VALUES LESS THAN (34000), +PARTITION p4250 VALUES LESS THAN (34008), +PARTITION p4251 VALUES LESS THAN (34016), +PARTITION p4252 VALUES LESS THAN (34024), +PARTITION p4253 VALUES LESS THAN (34032), +PARTITION p4254 VALUES LESS THAN (34040), +PARTITION p4255 VALUES LESS THAN (34048), +PARTITION p4256 VALUES LESS THAN (34056), +PARTITION p4257 VALUES LESS THAN (34064), +PARTITION p4258 VALUES LESS THAN (34072), +PARTITION p4259 VALUES LESS THAN (34080), +PARTITION p4260 VALUES LESS THAN (34088), +PARTITION p4261 VALUES LESS THAN (34096), +PARTITION p4262 VALUES LESS THAN (34104), +PARTITION p4263 VALUES LESS THAN (34112), +PARTITION p4264 VALUES LESS THAN (34120), +PARTITION p4265 VALUES LESS THAN (34128), +PARTITION p4266 VALUES LESS THAN (34136), +PARTITION p4267 VALUES LESS THAN (34144), +PARTITION p4268 VALUES LESS THAN (34152), +PARTITION p4269 VALUES LESS THAN (34160), +PARTITION p4270 VALUES LESS THAN (34168), +PARTITION p4271 VALUES LESS THAN (34176), +PARTITION p4272 VALUES LESS THAN (34184), +PARTITION p4273 VALUES LESS THAN (34192), +PARTITION p4274 VALUES LESS THAN (34200), +PARTITION p4275 VALUES LESS THAN (34208), +PARTITION p4276 VALUES LESS THAN (34216), +PARTITION p4277 VALUES LESS THAN (34224), +PARTITION p4278 VALUES LESS THAN (34232), +PARTITION p4279 VALUES LESS THAN (34240), +PARTITION p4280 VALUES LESS THAN (34248), +PARTITION p4281 VALUES LESS THAN (34256), +PARTITION p4282 VALUES LESS THAN (34264), +PARTITION p4283 VALUES LESS THAN (34272), +PARTITION p4284 VALUES LESS THAN (34280), +PARTITION p4285 VALUES LESS THAN (34288), +PARTITION p4286 VALUES LESS THAN (34296), +PARTITION p4287 VALUES LESS THAN (34304), +PARTITION p4288 VALUES LESS THAN (34312), +PARTITION p4289 VALUES LESS THAN (34320), +PARTITION p4290 VALUES LESS THAN (34328), +PARTITION p4291 VALUES LESS THAN (34336), +PARTITION p4292 VALUES LESS THAN (34344), +PARTITION p4293 VALUES LESS THAN (34352), +PARTITION p4294 VALUES LESS THAN (34360), +PARTITION p4295 VALUES LESS THAN (34368), +PARTITION p4296 VALUES LESS THAN (34376), +PARTITION p4297 VALUES LESS THAN (34384), +PARTITION p4298 VALUES LESS THAN (34392), +PARTITION p4299 VALUES LESS THAN (34400), +PARTITION p4300 VALUES LESS THAN (34408), +PARTITION p4301 VALUES LESS THAN (34416), +PARTITION p4302 VALUES LESS THAN (34424), +PARTITION p4303 VALUES LESS THAN (34432), +PARTITION p4304 VALUES LESS THAN (34440), +PARTITION p4305 VALUES LESS THAN (34448), +PARTITION p4306 VALUES LESS THAN (34456), +PARTITION p4307 VALUES LESS THAN (34464), +PARTITION p4308 VALUES LESS THAN (34472), +PARTITION p4309 VALUES LESS THAN (34480), +PARTITION p4310 VALUES LESS THAN (34488), +PARTITION p4311 VALUES LESS THAN (34496), +PARTITION p4312 VALUES LESS THAN (34504), +PARTITION p4313 VALUES LESS THAN (34512), +PARTITION p4314 VALUES LESS THAN (34520), +PARTITION p4315 VALUES LESS THAN (34528), +PARTITION p4316 VALUES LESS THAN (34536), +PARTITION p4317 VALUES LESS THAN (34544), +PARTITION p4318 VALUES LESS THAN (34552), +PARTITION p4319 VALUES LESS THAN (34560), +PARTITION p4320 VALUES LESS THAN (34568), +PARTITION p4321 VALUES LESS THAN (34576), +PARTITION p4322 VALUES LESS THAN (34584), +PARTITION p4323 VALUES LESS THAN (34592), +PARTITION p4324 VALUES LESS THAN (34600), +PARTITION p4325 VALUES LESS THAN (34608), +PARTITION p4326 VALUES LESS THAN (34616), +PARTITION p4327 VALUES LESS THAN (34624), +PARTITION p4328 VALUES LESS THAN (34632), +PARTITION p4329 VALUES LESS THAN (34640), +PARTITION p4330 VALUES LESS THAN (34648), +PARTITION p4331 VALUES LESS THAN (34656), +PARTITION p4332 VALUES LESS THAN (34664), +PARTITION p4333 VALUES LESS THAN (34672), +PARTITION p4334 VALUES LESS THAN (34680), +PARTITION p4335 VALUES LESS THAN (34688), +PARTITION p4336 VALUES LESS THAN (34696), +PARTITION p4337 VALUES LESS THAN (34704), +PARTITION p4338 VALUES LESS THAN (34712), +PARTITION p4339 VALUES LESS THAN (34720), +PARTITION p4340 VALUES LESS THAN (34728), +PARTITION p4341 VALUES LESS THAN (34736), +PARTITION p4342 VALUES LESS THAN (34744), +PARTITION p4343 VALUES LESS THAN (34752), +PARTITION p4344 VALUES LESS THAN (34760), +PARTITION p4345 VALUES LESS THAN (34768), +PARTITION p4346 VALUES LESS THAN (34776), +PARTITION p4347 VALUES LESS THAN (34784), +PARTITION p4348 VALUES LESS THAN (34792), +PARTITION p4349 VALUES LESS THAN (34800), +PARTITION p4350 VALUES LESS THAN (34808), +PARTITION p4351 VALUES LESS THAN (34816), +PARTITION p4352 VALUES LESS THAN (34824), +PARTITION p4353 VALUES LESS THAN (34832), +PARTITION p4354 VALUES LESS THAN (34840), +PARTITION p4355 VALUES LESS THAN (34848), +PARTITION p4356 VALUES LESS THAN (34856), +PARTITION p4357 VALUES LESS THAN (34864), +PARTITION p4358 VALUES LESS THAN (34872), +PARTITION p4359 VALUES LESS THAN (34880), +PARTITION p4360 VALUES LESS THAN (34888), +PARTITION p4361 VALUES LESS THAN (34896), +PARTITION p4362 VALUES LESS THAN (34904), +PARTITION p4363 VALUES LESS THAN (34912), +PARTITION p4364 VALUES LESS THAN (34920), +PARTITION p4365 VALUES LESS THAN (34928), +PARTITION p4366 VALUES LESS THAN (34936), +PARTITION p4367 VALUES LESS THAN (34944), +PARTITION p4368 VALUES LESS THAN (34952), +PARTITION p4369 VALUES LESS THAN (34960), +PARTITION p4370 VALUES LESS THAN (34968), +PARTITION p4371 VALUES LESS THAN (34976), +PARTITION p4372 VALUES LESS THAN (34984), +PARTITION p4373 VALUES LESS THAN (34992), +PARTITION p4374 VALUES LESS THAN (35000), +PARTITION p4375 VALUES LESS THAN (35008), +PARTITION p4376 VALUES LESS THAN (35016), +PARTITION p4377 VALUES LESS THAN (35024), +PARTITION p4378 VALUES LESS THAN (35032), +PARTITION p4379 VALUES LESS THAN (35040), +PARTITION p4380 VALUES LESS THAN (35048), +PARTITION p4381 VALUES LESS THAN (35056), +PARTITION p4382 VALUES LESS THAN (35064), +PARTITION p4383 VALUES LESS THAN (35072), +PARTITION p4384 VALUES LESS THAN (35080), +PARTITION p4385 VALUES LESS THAN (35088), +PARTITION p4386 VALUES LESS THAN (35096), +PARTITION p4387 VALUES LESS THAN (35104), +PARTITION p4388 VALUES LESS THAN (35112), +PARTITION p4389 VALUES LESS THAN (35120), +PARTITION p4390 VALUES LESS THAN (35128), +PARTITION p4391 VALUES LESS THAN (35136), +PARTITION p4392 VALUES LESS THAN (35144), +PARTITION p4393 VALUES LESS THAN (35152), +PARTITION p4394 VALUES LESS THAN (35160), +PARTITION p4395 VALUES LESS THAN (35168), +PARTITION p4396 VALUES LESS THAN (35176), +PARTITION p4397 VALUES LESS THAN (35184), +PARTITION p4398 VALUES LESS THAN (35192), +PARTITION p4399 VALUES LESS THAN (35200), +PARTITION p4400 VALUES LESS THAN (35208), +PARTITION p4401 VALUES LESS THAN (35216), +PARTITION p4402 VALUES LESS THAN (35224), +PARTITION p4403 VALUES LESS THAN (35232), +PARTITION p4404 VALUES LESS THAN (35240), +PARTITION p4405 VALUES LESS THAN (35248), +PARTITION p4406 VALUES LESS THAN (35256), +PARTITION p4407 VALUES LESS THAN (35264), +PARTITION p4408 VALUES LESS THAN (35272), +PARTITION p4409 VALUES LESS THAN (35280), +PARTITION p4410 VALUES LESS THAN (35288), +PARTITION p4411 VALUES LESS THAN (35296), +PARTITION p4412 VALUES LESS THAN (35304), +PARTITION p4413 VALUES LESS THAN (35312), +PARTITION p4414 VALUES LESS THAN (35320), +PARTITION p4415 VALUES LESS THAN (35328), +PARTITION p4416 VALUES LESS THAN (35336), +PARTITION p4417 VALUES LESS THAN (35344), +PARTITION p4418 VALUES LESS THAN (35352), +PARTITION p4419 VALUES LESS THAN (35360), +PARTITION p4420 VALUES LESS THAN (35368), +PARTITION p4421 VALUES LESS THAN (35376), +PARTITION p4422 VALUES LESS THAN (35384), +PARTITION p4423 VALUES LESS THAN (35392), +PARTITION p4424 VALUES LESS THAN (35400), +PARTITION p4425 VALUES LESS THAN (35408), +PARTITION p4426 VALUES LESS THAN (35416), +PARTITION p4427 VALUES LESS THAN (35424), +PARTITION p4428 VALUES LESS THAN (35432), +PARTITION p4429 VALUES LESS THAN (35440), +PARTITION p4430 VALUES LESS THAN (35448), +PARTITION p4431 VALUES LESS THAN (35456), +PARTITION p4432 VALUES LESS THAN (35464), +PARTITION p4433 VALUES LESS THAN (35472), +PARTITION p4434 VALUES LESS THAN (35480), +PARTITION p4435 VALUES LESS THAN (35488), +PARTITION p4436 VALUES LESS THAN (35496), +PARTITION p4437 VALUES LESS THAN (35504), +PARTITION p4438 VALUES LESS THAN (35512), +PARTITION p4439 VALUES LESS THAN (35520), +PARTITION p4440 VALUES LESS THAN (35528), +PARTITION p4441 VALUES LESS THAN (35536), +PARTITION p4442 VALUES LESS THAN (35544), +PARTITION p4443 VALUES LESS THAN (35552), +PARTITION p4444 VALUES LESS THAN (35560), +PARTITION p4445 VALUES LESS THAN (35568), +PARTITION p4446 VALUES LESS THAN (35576), +PARTITION p4447 VALUES LESS THAN (35584), +PARTITION p4448 VALUES LESS THAN (35592), +PARTITION p4449 VALUES LESS THAN (35600), +PARTITION p4450 VALUES LESS THAN (35608), +PARTITION p4451 VALUES LESS THAN (35616), +PARTITION p4452 VALUES LESS THAN (35624), +PARTITION p4453 VALUES LESS THAN (35632), +PARTITION p4454 VALUES LESS THAN (35640), +PARTITION p4455 VALUES LESS THAN (35648), +PARTITION p4456 VALUES LESS THAN (35656), +PARTITION p4457 VALUES LESS THAN (35664), +PARTITION p4458 VALUES LESS THAN (35672), +PARTITION p4459 VALUES LESS THAN (35680), +PARTITION p4460 VALUES LESS THAN (35688), +PARTITION p4461 VALUES LESS THAN (35696), +PARTITION p4462 VALUES LESS THAN (35704), +PARTITION p4463 VALUES LESS THAN (35712), +PARTITION p4464 VALUES LESS THAN (35720), +PARTITION p4465 VALUES LESS THAN (35728), +PARTITION p4466 VALUES LESS THAN (35736), +PARTITION p4467 VALUES LESS THAN (35744), +PARTITION p4468 VALUES LESS THAN (35752), +PARTITION p4469 VALUES LESS THAN (35760), +PARTITION p4470 VALUES LESS THAN (35768), +PARTITION p4471 VALUES LESS THAN (35776), +PARTITION p4472 VALUES LESS THAN (35784), +PARTITION p4473 VALUES LESS THAN (35792), +PARTITION p4474 VALUES LESS THAN (35800), +PARTITION p4475 VALUES LESS THAN (35808), +PARTITION p4476 VALUES LESS THAN (35816), +PARTITION p4477 VALUES LESS THAN (35824), +PARTITION p4478 VALUES LESS THAN (35832), +PARTITION p4479 VALUES LESS THAN (35840), +PARTITION p4480 VALUES LESS THAN (35848), +PARTITION p4481 VALUES LESS THAN (35856), +PARTITION p4482 VALUES LESS THAN (35864), +PARTITION p4483 VALUES LESS THAN (35872), +PARTITION p4484 VALUES LESS THAN (35880), +PARTITION p4485 VALUES LESS THAN (35888), +PARTITION p4486 VALUES LESS THAN (35896), +PARTITION p4487 VALUES LESS THAN (35904), +PARTITION p4488 VALUES LESS THAN (35912), +PARTITION p4489 VALUES LESS THAN (35920), +PARTITION p4490 VALUES LESS THAN (35928), +PARTITION p4491 VALUES LESS THAN (35936), +PARTITION p4492 VALUES LESS THAN (35944), +PARTITION p4493 VALUES LESS THAN (35952), +PARTITION p4494 VALUES LESS THAN (35960), +PARTITION p4495 VALUES LESS THAN (35968), +PARTITION p4496 VALUES LESS THAN (35976), +PARTITION p4497 VALUES LESS THAN (35984), +PARTITION p4498 VALUES LESS THAN (35992), +PARTITION p4499 VALUES LESS THAN (36000), +PARTITION p4500 VALUES LESS THAN (36008), +PARTITION p4501 VALUES LESS THAN (36016), +PARTITION p4502 VALUES LESS THAN (36024), +PARTITION p4503 VALUES LESS THAN (36032), +PARTITION p4504 VALUES LESS THAN (36040), +PARTITION p4505 VALUES LESS THAN (36048), +PARTITION p4506 VALUES LESS THAN (36056), +PARTITION p4507 VALUES LESS THAN (36064), +PARTITION p4508 VALUES LESS THAN (36072), +PARTITION p4509 VALUES LESS THAN (36080), +PARTITION p4510 VALUES LESS THAN (36088), +PARTITION p4511 VALUES LESS THAN (36096), +PARTITION p4512 VALUES LESS THAN (36104), +PARTITION p4513 VALUES LESS THAN (36112), +PARTITION p4514 VALUES LESS THAN (36120), +PARTITION p4515 VALUES LESS THAN (36128), +PARTITION p4516 VALUES LESS THAN (36136), +PARTITION p4517 VALUES LESS THAN (36144), +PARTITION p4518 VALUES LESS THAN (36152), +PARTITION p4519 VALUES LESS THAN (36160), +PARTITION p4520 VALUES LESS THAN (36168), +PARTITION p4521 VALUES LESS THAN (36176), +PARTITION p4522 VALUES LESS THAN (36184), +PARTITION p4523 VALUES LESS THAN (36192), +PARTITION p4524 VALUES LESS THAN (36200), +PARTITION p4525 VALUES LESS THAN (36208), +PARTITION p4526 VALUES LESS THAN (36216), +PARTITION p4527 VALUES LESS THAN (36224), +PARTITION p4528 VALUES LESS THAN (36232), +PARTITION p4529 VALUES LESS THAN (36240), +PARTITION p4530 VALUES LESS THAN (36248), +PARTITION p4531 VALUES LESS THAN (36256), +PARTITION p4532 VALUES LESS THAN (36264), +PARTITION p4533 VALUES LESS THAN (36272), +PARTITION p4534 VALUES LESS THAN (36280), +PARTITION p4535 VALUES LESS THAN (36288), +PARTITION p4536 VALUES LESS THAN (36296), +PARTITION p4537 VALUES LESS THAN (36304), +PARTITION p4538 VALUES LESS THAN (36312), +PARTITION p4539 VALUES LESS THAN (36320), +PARTITION p4540 VALUES LESS THAN (36328), +PARTITION p4541 VALUES LESS THAN (36336), +PARTITION p4542 VALUES LESS THAN (36344), +PARTITION p4543 VALUES LESS THAN (36352), +PARTITION p4544 VALUES LESS THAN (36360), +PARTITION p4545 VALUES LESS THAN (36368), +PARTITION p4546 VALUES LESS THAN (36376), +PARTITION p4547 VALUES LESS THAN (36384), +PARTITION p4548 VALUES LESS THAN (36392), +PARTITION p4549 VALUES LESS THAN (36400), +PARTITION p4550 VALUES LESS THAN (36408), +PARTITION p4551 VALUES LESS THAN (36416), +PARTITION p4552 VALUES LESS THAN (36424), +PARTITION p4553 VALUES LESS THAN (36432), +PARTITION p4554 VALUES LESS THAN (36440), +PARTITION p4555 VALUES LESS THAN (36448), +PARTITION p4556 VALUES LESS THAN (36456), +PARTITION p4557 VALUES LESS THAN (36464), +PARTITION p4558 VALUES LESS THAN (36472), +PARTITION p4559 VALUES LESS THAN (36480), +PARTITION p4560 VALUES LESS THAN (36488), +PARTITION p4561 VALUES LESS THAN (36496), +PARTITION p4562 VALUES LESS THAN (36504), +PARTITION p4563 VALUES LESS THAN (36512), +PARTITION p4564 VALUES LESS THAN (36520), +PARTITION p4565 VALUES LESS THAN (36528), +PARTITION p4566 VALUES LESS THAN (36536), +PARTITION p4567 VALUES LESS THAN (36544), +PARTITION p4568 VALUES LESS THAN (36552), +PARTITION p4569 VALUES LESS THAN (36560), +PARTITION p4570 VALUES LESS THAN (36568), +PARTITION p4571 VALUES LESS THAN (36576), +PARTITION p4572 VALUES LESS THAN (36584), +PARTITION p4573 VALUES LESS THAN (36592), +PARTITION p4574 VALUES LESS THAN (36600), +PARTITION p4575 VALUES LESS THAN (36608), +PARTITION p4576 VALUES LESS THAN (36616), +PARTITION p4577 VALUES LESS THAN (36624), +PARTITION p4578 VALUES LESS THAN (36632), +PARTITION p4579 VALUES LESS THAN (36640), +PARTITION p4580 VALUES LESS THAN (36648), +PARTITION p4581 VALUES LESS THAN (36656), +PARTITION p4582 VALUES LESS THAN (36664), +PARTITION p4583 VALUES LESS THAN (36672), +PARTITION p4584 VALUES LESS THAN (36680), +PARTITION p4585 VALUES LESS THAN (36688), +PARTITION p4586 VALUES LESS THAN (36696), +PARTITION p4587 VALUES LESS THAN (36704), +PARTITION p4588 VALUES LESS THAN (36712), +PARTITION p4589 VALUES LESS THAN (36720), +PARTITION p4590 VALUES LESS THAN (36728), +PARTITION p4591 VALUES LESS THAN (36736), +PARTITION p4592 VALUES LESS THAN (36744), +PARTITION p4593 VALUES LESS THAN (36752), +PARTITION p4594 VALUES LESS THAN (36760), +PARTITION p4595 VALUES LESS THAN (36768), +PARTITION p4596 VALUES LESS THAN (36776), +PARTITION p4597 VALUES LESS THAN (36784), +PARTITION p4598 VALUES LESS THAN (36792), +PARTITION p4599 VALUES LESS THAN (36800), +PARTITION p4600 VALUES LESS THAN (36808), +PARTITION p4601 VALUES LESS THAN (36816), +PARTITION p4602 VALUES LESS THAN (36824), +PARTITION p4603 VALUES LESS THAN (36832), +PARTITION p4604 VALUES LESS THAN (36840), +PARTITION p4605 VALUES LESS THAN (36848), +PARTITION p4606 VALUES LESS THAN (36856), +PARTITION p4607 VALUES LESS THAN (36864), +PARTITION p4608 VALUES LESS THAN (36872), +PARTITION p4609 VALUES LESS THAN (36880), +PARTITION p4610 VALUES LESS THAN (36888), +PARTITION p4611 VALUES LESS THAN (36896), +PARTITION p4612 VALUES LESS THAN (36904), +PARTITION p4613 VALUES LESS THAN (36912), +PARTITION p4614 VALUES LESS THAN (36920), +PARTITION p4615 VALUES LESS THAN (36928), +PARTITION p4616 VALUES LESS THAN (36936), +PARTITION p4617 VALUES LESS THAN (36944), +PARTITION p4618 VALUES LESS THAN (36952), +PARTITION p4619 VALUES LESS THAN (36960), +PARTITION p4620 VALUES LESS THAN (36968), +PARTITION p4621 VALUES LESS THAN (36976), +PARTITION p4622 VALUES LESS THAN (36984), +PARTITION p4623 VALUES LESS THAN (36992), +PARTITION p4624 VALUES LESS THAN (37000), +PARTITION p4625 VALUES LESS THAN (37008), +PARTITION p4626 VALUES LESS THAN (37016), +PARTITION p4627 VALUES LESS THAN (37024), +PARTITION p4628 VALUES LESS THAN (37032), +PARTITION p4629 VALUES LESS THAN (37040), +PARTITION p4630 VALUES LESS THAN (37048), +PARTITION p4631 VALUES LESS THAN (37056), +PARTITION p4632 VALUES LESS THAN (37064), +PARTITION p4633 VALUES LESS THAN (37072), +PARTITION p4634 VALUES LESS THAN (37080), +PARTITION p4635 VALUES LESS THAN (37088), +PARTITION p4636 VALUES LESS THAN (37096), +PARTITION p4637 VALUES LESS THAN (37104), +PARTITION p4638 VALUES LESS THAN (37112), +PARTITION p4639 VALUES LESS THAN (37120), +PARTITION p4640 VALUES LESS THAN (37128), +PARTITION p4641 VALUES LESS THAN (37136), +PARTITION p4642 VALUES LESS THAN (37144), +PARTITION p4643 VALUES LESS THAN (37152), +PARTITION p4644 VALUES LESS THAN (37160), +PARTITION p4645 VALUES LESS THAN (37168), +PARTITION p4646 VALUES LESS THAN (37176), +PARTITION p4647 VALUES LESS THAN (37184), +PARTITION p4648 VALUES LESS THAN (37192), +PARTITION p4649 VALUES LESS THAN (37200), +PARTITION p4650 VALUES LESS THAN (37208), +PARTITION p4651 VALUES LESS THAN (37216), +PARTITION p4652 VALUES LESS THAN (37224), +PARTITION p4653 VALUES LESS THAN (37232), +PARTITION p4654 VALUES LESS THAN (37240), +PARTITION p4655 VALUES LESS THAN (37248), +PARTITION p4656 VALUES LESS THAN (37256), +PARTITION p4657 VALUES LESS THAN (37264), +PARTITION p4658 VALUES LESS THAN (37272), +PARTITION p4659 VALUES LESS THAN (37280), +PARTITION p4660 VALUES LESS THAN (37288), +PARTITION p4661 VALUES LESS THAN (37296), +PARTITION p4662 VALUES LESS THAN (37304), +PARTITION p4663 VALUES LESS THAN (37312), +PARTITION p4664 VALUES LESS THAN (37320), +PARTITION p4665 VALUES LESS THAN (37328), +PARTITION p4666 VALUES LESS THAN (37336), +PARTITION p4667 VALUES LESS THAN (37344), +PARTITION p4668 VALUES LESS THAN (37352), +PARTITION p4669 VALUES LESS THAN (37360), +PARTITION p4670 VALUES LESS THAN (37368), +PARTITION p4671 VALUES LESS THAN (37376), +PARTITION p4672 VALUES LESS THAN (37384), +PARTITION p4673 VALUES LESS THAN (37392), +PARTITION p4674 VALUES LESS THAN (37400), +PARTITION p4675 VALUES LESS THAN (37408), +PARTITION p4676 VALUES LESS THAN (37416), +PARTITION p4677 VALUES LESS THAN (37424), +PARTITION p4678 VALUES LESS THAN (37432), +PARTITION p4679 VALUES LESS THAN (37440), +PARTITION p4680 VALUES LESS THAN (37448), +PARTITION p4681 VALUES LESS THAN (37456), +PARTITION p4682 VALUES LESS THAN (37464), +PARTITION p4683 VALUES LESS THAN (37472), +PARTITION p4684 VALUES LESS THAN (37480), +PARTITION p4685 VALUES LESS THAN (37488), +PARTITION p4686 VALUES LESS THAN (37496), +PARTITION p4687 VALUES LESS THAN (37504), +PARTITION p4688 VALUES LESS THAN (37512), +PARTITION p4689 VALUES LESS THAN (37520), +PARTITION p4690 VALUES LESS THAN (37528), +PARTITION p4691 VALUES LESS THAN (37536), +PARTITION p4692 VALUES LESS THAN (37544), +PARTITION p4693 VALUES LESS THAN (37552), +PARTITION p4694 VALUES LESS THAN (37560), +PARTITION p4695 VALUES LESS THAN (37568), +PARTITION p4696 VALUES LESS THAN (37576), +PARTITION p4697 VALUES LESS THAN (37584), +PARTITION p4698 VALUES LESS THAN (37592), +PARTITION p4699 VALUES LESS THAN (37600), +PARTITION p4700 VALUES LESS THAN (37608), +PARTITION p4701 VALUES LESS THAN (37616), +PARTITION p4702 VALUES LESS THAN (37624), +PARTITION p4703 VALUES LESS THAN (37632), +PARTITION p4704 VALUES LESS THAN (37640), +PARTITION p4705 VALUES LESS THAN (37648), +PARTITION p4706 VALUES LESS THAN (37656), +PARTITION p4707 VALUES LESS THAN (37664), +PARTITION p4708 VALUES LESS THAN (37672), +PARTITION p4709 VALUES LESS THAN (37680), +PARTITION p4710 VALUES LESS THAN (37688), +PARTITION p4711 VALUES LESS THAN (37696), +PARTITION p4712 VALUES LESS THAN (37704), +PARTITION p4713 VALUES LESS THAN (37712), +PARTITION p4714 VALUES LESS THAN (37720), +PARTITION p4715 VALUES LESS THAN (37728), +PARTITION p4716 VALUES LESS THAN (37736), +PARTITION p4717 VALUES LESS THAN (37744), +PARTITION p4718 VALUES LESS THAN (37752), +PARTITION p4719 VALUES LESS THAN (37760), +PARTITION p4720 VALUES LESS THAN (37768), +PARTITION p4721 VALUES LESS THAN (37776), +PARTITION p4722 VALUES LESS THAN (37784), +PARTITION p4723 VALUES LESS THAN (37792), +PARTITION p4724 VALUES LESS THAN (37800), +PARTITION p4725 VALUES LESS THAN (37808), +PARTITION p4726 VALUES LESS THAN (37816), +PARTITION p4727 VALUES LESS THAN (37824), +PARTITION p4728 VALUES LESS THAN (37832), +PARTITION p4729 VALUES LESS THAN (37840), +PARTITION p4730 VALUES LESS THAN (37848), +PARTITION p4731 VALUES LESS THAN (37856), +PARTITION p4732 VALUES LESS THAN (37864), +PARTITION p4733 VALUES LESS THAN (37872), +PARTITION p4734 VALUES LESS THAN (37880), +PARTITION p4735 VALUES LESS THAN (37888), +PARTITION p4736 VALUES LESS THAN (37896), +PARTITION p4737 VALUES LESS THAN (37904), +PARTITION p4738 VALUES LESS THAN (37912), +PARTITION p4739 VALUES LESS THAN (37920), +PARTITION p4740 VALUES LESS THAN (37928), +PARTITION p4741 VALUES LESS THAN (37936), +PARTITION p4742 VALUES LESS THAN (37944), +PARTITION p4743 VALUES LESS THAN (37952), +PARTITION p4744 VALUES LESS THAN (37960), +PARTITION p4745 VALUES LESS THAN (37968), +PARTITION p4746 VALUES LESS THAN (37976), +PARTITION p4747 VALUES LESS THAN (37984), +PARTITION p4748 VALUES LESS THAN (37992), +PARTITION p4749 VALUES LESS THAN (38000), +PARTITION p4750 VALUES LESS THAN (38008), +PARTITION p4751 VALUES LESS THAN (38016), +PARTITION p4752 VALUES LESS THAN (38024), +PARTITION p4753 VALUES LESS THAN (38032), +PARTITION p4754 VALUES LESS THAN (38040), +PARTITION p4755 VALUES LESS THAN (38048), +PARTITION p4756 VALUES LESS THAN (38056), +PARTITION p4757 VALUES LESS THAN (38064), +PARTITION p4758 VALUES LESS THAN (38072), +PARTITION p4759 VALUES LESS THAN (38080), +PARTITION p4760 VALUES LESS THAN (38088), +PARTITION p4761 VALUES LESS THAN (38096), +PARTITION p4762 VALUES LESS THAN (38104), +PARTITION p4763 VALUES LESS THAN (38112), +PARTITION p4764 VALUES LESS THAN (38120), +PARTITION p4765 VALUES LESS THAN (38128), +PARTITION p4766 VALUES LESS THAN (38136), +PARTITION p4767 VALUES LESS THAN (38144), +PARTITION p4768 VALUES LESS THAN (38152), +PARTITION p4769 VALUES LESS THAN (38160), +PARTITION p4770 VALUES LESS THAN (38168), +PARTITION p4771 VALUES LESS THAN (38176), +PARTITION p4772 VALUES LESS THAN (38184), +PARTITION p4773 VALUES LESS THAN (38192), +PARTITION p4774 VALUES LESS THAN (38200), +PARTITION p4775 VALUES LESS THAN (38208), +PARTITION p4776 VALUES LESS THAN (38216), +PARTITION p4777 VALUES LESS THAN (38224), +PARTITION p4778 VALUES LESS THAN (38232), +PARTITION p4779 VALUES LESS THAN (38240), +PARTITION p4780 VALUES LESS THAN (38248), +PARTITION p4781 VALUES LESS THAN (38256), +PARTITION p4782 VALUES LESS THAN (38264), +PARTITION p4783 VALUES LESS THAN (38272), +PARTITION p4784 VALUES LESS THAN (38280), +PARTITION p4785 VALUES LESS THAN (38288), +PARTITION p4786 VALUES LESS THAN (38296), +PARTITION p4787 VALUES LESS THAN (38304), +PARTITION p4788 VALUES LESS THAN (38312), +PARTITION p4789 VALUES LESS THAN (38320), +PARTITION p4790 VALUES LESS THAN (38328), +PARTITION p4791 VALUES LESS THAN (38336), +PARTITION p4792 VALUES LESS THAN (38344), +PARTITION p4793 VALUES LESS THAN (38352), +PARTITION p4794 VALUES LESS THAN (38360), +PARTITION p4795 VALUES LESS THAN (38368), +PARTITION p4796 VALUES LESS THAN (38376), +PARTITION p4797 VALUES LESS THAN (38384), +PARTITION p4798 VALUES LESS THAN (38392), +PARTITION p4799 VALUES LESS THAN (38400), +PARTITION p4800 VALUES LESS THAN (38408), +PARTITION p4801 VALUES LESS THAN (38416), +PARTITION p4802 VALUES LESS THAN (38424), +PARTITION p4803 VALUES LESS THAN (38432), +PARTITION p4804 VALUES LESS THAN (38440), +PARTITION p4805 VALUES LESS THAN (38448), +PARTITION p4806 VALUES LESS THAN (38456), +PARTITION p4807 VALUES LESS THAN (38464), +PARTITION p4808 VALUES LESS THAN (38472), +PARTITION p4809 VALUES LESS THAN (38480), +PARTITION p4810 VALUES LESS THAN (38488), +PARTITION p4811 VALUES LESS THAN (38496), +PARTITION p4812 VALUES LESS THAN (38504), +PARTITION p4813 VALUES LESS THAN (38512), +PARTITION p4814 VALUES LESS THAN (38520), +PARTITION p4815 VALUES LESS THAN (38528), +PARTITION p4816 VALUES LESS THAN (38536), +PARTITION p4817 VALUES LESS THAN (38544), +PARTITION p4818 VALUES LESS THAN (38552), +PARTITION p4819 VALUES LESS THAN (38560), +PARTITION p4820 VALUES LESS THAN (38568), +PARTITION p4821 VALUES LESS THAN (38576), +PARTITION p4822 VALUES LESS THAN (38584), +PARTITION p4823 VALUES LESS THAN (38592), +PARTITION p4824 VALUES LESS THAN (38600), +PARTITION p4825 VALUES LESS THAN (38608), +PARTITION p4826 VALUES LESS THAN (38616), +PARTITION p4827 VALUES LESS THAN (38624), +PARTITION p4828 VALUES LESS THAN (38632), +PARTITION p4829 VALUES LESS THAN (38640), +PARTITION p4830 VALUES LESS THAN (38648), +PARTITION p4831 VALUES LESS THAN (38656), +PARTITION p4832 VALUES LESS THAN (38664), +PARTITION p4833 VALUES LESS THAN (38672), +PARTITION p4834 VALUES LESS THAN (38680), +PARTITION p4835 VALUES LESS THAN (38688), +PARTITION p4836 VALUES LESS THAN (38696), +PARTITION p4837 VALUES LESS THAN (38704), +PARTITION p4838 VALUES LESS THAN (38712), +PARTITION p4839 VALUES LESS THAN (38720), +PARTITION p4840 VALUES LESS THAN (38728), +PARTITION p4841 VALUES LESS THAN (38736), +PARTITION p4842 VALUES LESS THAN (38744), +PARTITION p4843 VALUES LESS THAN (38752), +PARTITION p4844 VALUES LESS THAN (38760), +PARTITION p4845 VALUES LESS THAN (38768), +PARTITION p4846 VALUES LESS THAN (38776), +PARTITION p4847 VALUES LESS THAN (38784), +PARTITION p4848 VALUES LESS THAN (38792), +PARTITION p4849 VALUES LESS THAN (38800), +PARTITION p4850 VALUES LESS THAN (38808), +PARTITION p4851 VALUES LESS THAN (38816), +PARTITION p4852 VALUES LESS THAN (38824), +PARTITION p4853 VALUES LESS THAN (38832), +PARTITION p4854 VALUES LESS THAN (38840), +PARTITION p4855 VALUES LESS THAN (38848), +PARTITION p4856 VALUES LESS THAN (38856), +PARTITION p4857 VALUES LESS THAN (38864), +PARTITION p4858 VALUES LESS THAN (38872), +PARTITION p4859 VALUES LESS THAN (38880), +PARTITION p4860 VALUES LESS THAN (38888), +PARTITION p4861 VALUES LESS THAN (38896), +PARTITION p4862 VALUES LESS THAN (38904), +PARTITION p4863 VALUES LESS THAN (38912), +PARTITION p4864 VALUES LESS THAN (38920), +PARTITION p4865 VALUES LESS THAN (38928), +PARTITION p4866 VALUES LESS THAN (38936), +PARTITION p4867 VALUES LESS THAN (38944), +PARTITION p4868 VALUES LESS THAN (38952), +PARTITION p4869 VALUES LESS THAN (38960), +PARTITION p4870 VALUES LESS THAN (38968), +PARTITION p4871 VALUES LESS THAN (38976), +PARTITION p4872 VALUES LESS THAN (38984), +PARTITION p4873 VALUES LESS THAN (38992), +PARTITION p4874 VALUES LESS THAN (39000), +PARTITION p4875 VALUES LESS THAN (39008), +PARTITION p4876 VALUES LESS THAN (39016), +PARTITION p4877 VALUES LESS THAN (39024), +PARTITION p4878 VALUES LESS THAN (39032), +PARTITION p4879 VALUES LESS THAN (39040), +PARTITION p4880 VALUES LESS THAN (39048), +PARTITION p4881 VALUES LESS THAN (39056), +PARTITION p4882 VALUES LESS THAN (39064), +PARTITION p4883 VALUES LESS THAN (39072), +PARTITION p4884 VALUES LESS THAN (39080), +PARTITION p4885 VALUES LESS THAN (39088), +PARTITION p4886 VALUES LESS THAN (39096), +PARTITION p4887 VALUES LESS THAN (39104), +PARTITION p4888 VALUES LESS THAN (39112), +PARTITION p4889 VALUES LESS THAN (39120), +PARTITION p4890 VALUES LESS THAN (39128), +PARTITION p4891 VALUES LESS THAN (39136), +PARTITION p4892 VALUES LESS THAN (39144), +PARTITION p4893 VALUES LESS THAN (39152), +PARTITION p4894 VALUES LESS THAN (39160), +PARTITION p4895 VALUES LESS THAN (39168), +PARTITION p4896 VALUES LESS THAN (39176), +PARTITION p4897 VALUES LESS THAN (39184), +PARTITION p4898 VALUES LESS THAN (39192), +PARTITION p4899 VALUES LESS THAN (39200), +PARTITION p4900 VALUES LESS THAN (39208), +PARTITION p4901 VALUES LESS THAN (39216), +PARTITION p4902 VALUES LESS THAN (39224), +PARTITION p4903 VALUES LESS THAN (39232), +PARTITION p4904 VALUES LESS THAN (39240), +PARTITION p4905 VALUES LESS THAN (39248), +PARTITION p4906 VALUES LESS THAN (39256), +PARTITION p4907 VALUES LESS THAN (39264), +PARTITION p4908 VALUES LESS THAN (39272), +PARTITION p4909 VALUES LESS THAN (39280), +PARTITION p4910 VALUES LESS THAN (39288), +PARTITION p4911 VALUES LESS THAN (39296), +PARTITION p4912 VALUES LESS THAN (39304), +PARTITION p4913 VALUES LESS THAN (39312), +PARTITION p4914 VALUES LESS THAN (39320), +PARTITION p4915 VALUES LESS THAN (39328), +PARTITION p4916 VALUES LESS THAN (39336), +PARTITION p4917 VALUES LESS THAN (39344), +PARTITION p4918 VALUES LESS THAN (39352), +PARTITION p4919 VALUES LESS THAN (39360), +PARTITION p4920 VALUES LESS THAN (39368), +PARTITION p4921 VALUES LESS THAN (39376), +PARTITION p4922 VALUES LESS THAN (39384), +PARTITION p4923 VALUES LESS THAN (39392), +PARTITION p4924 VALUES LESS THAN (39400), +PARTITION p4925 VALUES LESS THAN (39408), +PARTITION p4926 VALUES LESS THAN (39416), +PARTITION p4927 VALUES LESS THAN (39424), +PARTITION p4928 VALUES LESS THAN (39432), +PARTITION p4929 VALUES LESS THAN (39440), +PARTITION p4930 VALUES LESS THAN (39448), +PARTITION p4931 VALUES LESS THAN (39456), +PARTITION p4932 VALUES LESS THAN (39464), +PARTITION p4933 VALUES LESS THAN (39472), +PARTITION p4934 VALUES LESS THAN (39480), +PARTITION p4935 VALUES LESS THAN (39488), +PARTITION p4936 VALUES LESS THAN (39496), +PARTITION p4937 VALUES LESS THAN (39504), +PARTITION p4938 VALUES LESS THAN (39512), +PARTITION p4939 VALUES LESS THAN (39520), +PARTITION p4940 VALUES LESS THAN (39528), +PARTITION p4941 VALUES LESS THAN (39536), +PARTITION p4942 VALUES LESS THAN (39544), +PARTITION p4943 VALUES LESS THAN (39552), +PARTITION p4944 VALUES LESS THAN (39560), +PARTITION p4945 VALUES LESS THAN (39568), +PARTITION p4946 VALUES LESS THAN (39576), +PARTITION p4947 VALUES LESS THAN (39584), +PARTITION p4948 VALUES LESS THAN (39592), +PARTITION p4949 VALUES LESS THAN (39600), +PARTITION p4950 VALUES LESS THAN (39608), +PARTITION p4951 VALUES LESS THAN (39616), +PARTITION p4952 VALUES LESS THAN (39624), +PARTITION p4953 VALUES LESS THAN (39632), +PARTITION p4954 VALUES LESS THAN (39640), +PARTITION p4955 VALUES LESS THAN (39648), +PARTITION p4956 VALUES LESS THAN (39656), +PARTITION p4957 VALUES LESS THAN (39664), +PARTITION p4958 VALUES LESS THAN (39672), +PARTITION p4959 VALUES LESS THAN (39680), +PARTITION p4960 VALUES LESS THAN (39688), +PARTITION p4961 VALUES LESS THAN (39696), +PARTITION p4962 VALUES LESS THAN (39704), +PARTITION p4963 VALUES LESS THAN (39712), +PARTITION p4964 VALUES LESS THAN (39720), +PARTITION p4965 VALUES LESS THAN (39728), +PARTITION p4966 VALUES LESS THAN (39736), +PARTITION p4967 VALUES LESS THAN (39744), +PARTITION p4968 VALUES LESS THAN (39752), +PARTITION p4969 VALUES LESS THAN (39760), +PARTITION p4970 VALUES LESS THAN (39768), +PARTITION p4971 VALUES LESS THAN (39776), +PARTITION p4972 VALUES LESS THAN (39784), +PARTITION p4973 VALUES LESS THAN (39792), +PARTITION p4974 VALUES LESS THAN (39800), +PARTITION p4975 VALUES LESS THAN (39808), +PARTITION p4976 VALUES LESS THAN (39816), +PARTITION p4977 VALUES LESS THAN (39824), +PARTITION p4978 VALUES LESS THAN (39832), +PARTITION p4979 VALUES LESS THAN (39840), +PARTITION p4980 VALUES LESS THAN (39848), +PARTITION p4981 VALUES LESS THAN (39856), +PARTITION p4982 VALUES LESS THAN (39864), +PARTITION p4983 VALUES LESS THAN (39872), +PARTITION p4984 VALUES LESS THAN (39880), +PARTITION p4985 VALUES LESS THAN (39888), +PARTITION p4986 VALUES LESS THAN (39896), +PARTITION p4987 VALUES LESS THAN (39904), +PARTITION p4988 VALUES LESS THAN (39912), +PARTITION p4989 VALUES LESS THAN (39920), +PARTITION p4990 VALUES LESS THAN (39928), +PARTITION p4991 VALUES LESS THAN (39936), +PARTITION p4992 VALUES LESS THAN (39944), +PARTITION p4993 VALUES LESS THAN (39952), +PARTITION p4994 VALUES LESS THAN (39960), +PARTITION p4995 VALUES LESS THAN (39968), +PARTITION p4996 VALUES LESS THAN (39976), +PARTITION p4997 VALUES LESS THAN (39984), +PARTITION p4998 VALUES LESS THAN (39992), +PARTITION p4999 VALUES LESS THAN (40000), +PARTITION p5000 VALUES LESS THAN (40008), +PARTITION p5001 VALUES LESS THAN (40016), +PARTITION p5002 VALUES LESS THAN (40024), +PARTITION p5003 VALUES LESS THAN (40032), +PARTITION p5004 VALUES LESS THAN (40040), +PARTITION p5005 VALUES LESS THAN (40048), +PARTITION p5006 VALUES LESS THAN (40056), +PARTITION p5007 VALUES LESS THAN (40064), +PARTITION p5008 VALUES LESS THAN (40072), +PARTITION p5009 VALUES LESS THAN (40080), +PARTITION p5010 VALUES LESS THAN (40088), +PARTITION p5011 VALUES LESS THAN (40096), +PARTITION p5012 VALUES LESS THAN (40104), +PARTITION p5013 VALUES LESS THAN (40112), +PARTITION p5014 VALUES LESS THAN (40120), +PARTITION p5015 VALUES LESS THAN (40128), +PARTITION p5016 VALUES LESS THAN (40136), +PARTITION p5017 VALUES LESS THAN (40144), +PARTITION p5018 VALUES LESS THAN (40152), +PARTITION p5019 VALUES LESS THAN (40160), +PARTITION p5020 VALUES LESS THAN (40168), +PARTITION p5021 VALUES LESS THAN (40176), +PARTITION p5022 VALUES LESS THAN (40184), +PARTITION p5023 VALUES LESS THAN (40192), +PARTITION p5024 VALUES LESS THAN (40200), +PARTITION p5025 VALUES LESS THAN (40208), +PARTITION p5026 VALUES LESS THAN (40216), +PARTITION p5027 VALUES LESS THAN (40224), +PARTITION p5028 VALUES LESS THAN (40232), +PARTITION p5029 VALUES LESS THAN (40240), +PARTITION p5030 VALUES LESS THAN (40248), +PARTITION p5031 VALUES LESS THAN (40256), +PARTITION p5032 VALUES LESS THAN (40264), +PARTITION p5033 VALUES LESS THAN (40272), +PARTITION p5034 VALUES LESS THAN (40280), +PARTITION p5035 VALUES LESS THAN (40288), +PARTITION p5036 VALUES LESS THAN (40296), +PARTITION p5037 VALUES LESS THAN (40304), +PARTITION p5038 VALUES LESS THAN (40312), +PARTITION p5039 VALUES LESS THAN (40320), +PARTITION p5040 VALUES LESS THAN (40328), +PARTITION p5041 VALUES LESS THAN (40336), +PARTITION p5042 VALUES LESS THAN (40344), +PARTITION p5043 VALUES LESS THAN (40352), +PARTITION p5044 VALUES LESS THAN (40360), +PARTITION p5045 VALUES LESS THAN (40368), +PARTITION p5046 VALUES LESS THAN (40376), +PARTITION p5047 VALUES LESS THAN (40384), +PARTITION p5048 VALUES LESS THAN (40392), +PARTITION p5049 VALUES LESS THAN (40400), +PARTITION p5050 VALUES LESS THAN (40408), +PARTITION p5051 VALUES LESS THAN (40416), +PARTITION p5052 VALUES LESS THAN (40424), +PARTITION p5053 VALUES LESS THAN (40432), +PARTITION p5054 VALUES LESS THAN (40440), +PARTITION p5055 VALUES LESS THAN (40448), +PARTITION p5056 VALUES LESS THAN (40456), +PARTITION p5057 VALUES LESS THAN (40464), +PARTITION p5058 VALUES LESS THAN (40472), +PARTITION p5059 VALUES LESS THAN (40480), +PARTITION p5060 VALUES LESS THAN (40488), +PARTITION p5061 VALUES LESS THAN (40496), +PARTITION p5062 VALUES LESS THAN (40504), +PARTITION p5063 VALUES LESS THAN (40512), +PARTITION p5064 VALUES LESS THAN (40520), +PARTITION p5065 VALUES LESS THAN (40528), +PARTITION p5066 VALUES LESS THAN (40536), +PARTITION p5067 VALUES LESS THAN (40544), +PARTITION p5068 VALUES LESS THAN (40552), +PARTITION p5069 VALUES LESS THAN (40560), +PARTITION p5070 VALUES LESS THAN (40568), +PARTITION p5071 VALUES LESS THAN (40576), +PARTITION p5072 VALUES LESS THAN (40584), +PARTITION p5073 VALUES LESS THAN (40592), +PARTITION p5074 VALUES LESS THAN (40600), +PARTITION p5075 VALUES LESS THAN (40608), +PARTITION p5076 VALUES LESS THAN (40616), +PARTITION p5077 VALUES LESS THAN (40624), +PARTITION p5078 VALUES LESS THAN (40632), +PARTITION p5079 VALUES LESS THAN (40640), +PARTITION p5080 VALUES LESS THAN (40648), +PARTITION p5081 VALUES LESS THAN (40656), +PARTITION p5082 VALUES LESS THAN (40664), +PARTITION p5083 VALUES LESS THAN (40672), +PARTITION p5084 VALUES LESS THAN (40680), +PARTITION p5085 VALUES LESS THAN (40688), +PARTITION p5086 VALUES LESS THAN (40696), +PARTITION p5087 VALUES LESS THAN (40704), +PARTITION p5088 VALUES LESS THAN (40712), +PARTITION p5089 VALUES LESS THAN (40720), +PARTITION p5090 VALUES LESS THAN (40728), +PARTITION p5091 VALUES LESS THAN (40736), +PARTITION p5092 VALUES LESS THAN (40744), +PARTITION p5093 VALUES LESS THAN (40752), +PARTITION p5094 VALUES LESS THAN (40760), +PARTITION p5095 VALUES LESS THAN (40768), +PARTITION p5096 VALUES LESS THAN (40776), +PARTITION p5097 VALUES LESS THAN (40784), +PARTITION p5098 VALUES LESS THAN (40792), +PARTITION p5099 VALUES LESS THAN (40800), +PARTITION p5100 VALUES LESS THAN (40808), +PARTITION p5101 VALUES LESS THAN (40816), +PARTITION p5102 VALUES LESS THAN (40824), +PARTITION p5103 VALUES LESS THAN (40832), +PARTITION p5104 VALUES LESS THAN (40840), +PARTITION p5105 VALUES LESS THAN (40848), +PARTITION p5106 VALUES LESS THAN (40856), +PARTITION p5107 VALUES LESS THAN (40864), +PARTITION p5108 VALUES LESS THAN (40872), +PARTITION p5109 VALUES LESS THAN (40880), +PARTITION p5110 VALUES LESS THAN (40888), +PARTITION p5111 VALUES LESS THAN (40896), +PARTITION p5112 VALUES LESS THAN (40904), +PARTITION p5113 VALUES LESS THAN (40912), +PARTITION p5114 VALUES LESS THAN (40920), +PARTITION p5115 VALUES LESS THAN (40928), +PARTITION p5116 VALUES LESS THAN (40936), +PARTITION p5117 VALUES LESS THAN (40944), +PARTITION p5118 VALUES LESS THAN (40952), +PARTITION p5119 VALUES LESS THAN (40960), +PARTITION p5120 VALUES LESS THAN (40968), +PARTITION p5121 VALUES LESS THAN (40976), +PARTITION p5122 VALUES LESS THAN (40984), +PARTITION p5123 VALUES LESS THAN (40992), +PARTITION p5124 VALUES LESS THAN (41000), +PARTITION p5125 VALUES LESS THAN (41008), +PARTITION p5126 VALUES LESS THAN (41016), +PARTITION p5127 VALUES LESS THAN (41024), +PARTITION p5128 VALUES LESS THAN (41032), +PARTITION p5129 VALUES LESS THAN (41040), +PARTITION p5130 VALUES LESS THAN (41048), +PARTITION p5131 VALUES LESS THAN (41056), +PARTITION p5132 VALUES LESS THAN (41064), +PARTITION p5133 VALUES LESS THAN (41072), +PARTITION p5134 VALUES LESS THAN (41080), +PARTITION p5135 VALUES LESS THAN (41088), +PARTITION p5136 VALUES LESS THAN (41096), +PARTITION p5137 VALUES LESS THAN (41104), +PARTITION p5138 VALUES LESS THAN (41112), +PARTITION p5139 VALUES LESS THAN (41120), +PARTITION p5140 VALUES LESS THAN (41128), +PARTITION p5141 VALUES LESS THAN (41136), +PARTITION p5142 VALUES LESS THAN (41144), +PARTITION p5143 VALUES LESS THAN (41152), +PARTITION p5144 VALUES LESS THAN (41160), +PARTITION p5145 VALUES LESS THAN (41168), +PARTITION p5146 VALUES LESS THAN (41176), +PARTITION p5147 VALUES LESS THAN (41184), +PARTITION p5148 VALUES LESS THAN (41192), +PARTITION p5149 VALUES LESS THAN (41200), +PARTITION p5150 VALUES LESS THAN (41208), +PARTITION p5151 VALUES LESS THAN (41216), +PARTITION p5152 VALUES LESS THAN (41224), +PARTITION p5153 VALUES LESS THAN (41232), +PARTITION p5154 VALUES LESS THAN (41240), +PARTITION p5155 VALUES LESS THAN (41248), +PARTITION p5156 VALUES LESS THAN (41256), +PARTITION p5157 VALUES LESS THAN (41264), +PARTITION p5158 VALUES LESS THAN (41272), +PARTITION p5159 VALUES LESS THAN (41280), +PARTITION p5160 VALUES LESS THAN (41288), +PARTITION p5161 VALUES LESS THAN (41296), +PARTITION p5162 VALUES LESS THAN (41304), +PARTITION p5163 VALUES LESS THAN (41312), +PARTITION p5164 VALUES LESS THAN (41320), +PARTITION p5165 VALUES LESS THAN (41328), +PARTITION p5166 VALUES LESS THAN (41336), +PARTITION p5167 VALUES LESS THAN (41344), +PARTITION p5168 VALUES LESS THAN (41352), +PARTITION p5169 VALUES LESS THAN (41360), +PARTITION p5170 VALUES LESS THAN (41368), +PARTITION p5171 VALUES LESS THAN (41376), +PARTITION p5172 VALUES LESS THAN (41384), +PARTITION p5173 VALUES LESS THAN (41392), +PARTITION p5174 VALUES LESS THAN (41400), +PARTITION p5175 VALUES LESS THAN (41408), +PARTITION p5176 VALUES LESS THAN (41416), +PARTITION p5177 VALUES LESS THAN (41424), +PARTITION p5178 VALUES LESS THAN (41432), +PARTITION p5179 VALUES LESS THAN (41440), +PARTITION p5180 VALUES LESS THAN (41448), +PARTITION p5181 VALUES LESS THAN (41456), +PARTITION p5182 VALUES LESS THAN (41464), +PARTITION p5183 VALUES LESS THAN (41472), +PARTITION p5184 VALUES LESS THAN (41480), +PARTITION p5185 VALUES LESS THAN (41488), +PARTITION p5186 VALUES LESS THAN (41496), +PARTITION p5187 VALUES LESS THAN (41504), +PARTITION p5188 VALUES LESS THAN (41512), +PARTITION p5189 VALUES LESS THAN (41520), +PARTITION p5190 VALUES LESS THAN (41528), +PARTITION p5191 VALUES LESS THAN (41536), +PARTITION p5192 VALUES LESS THAN (41544), +PARTITION p5193 VALUES LESS THAN (41552), +PARTITION p5194 VALUES LESS THAN (41560), +PARTITION p5195 VALUES LESS THAN (41568), +PARTITION p5196 VALUES LESS THAN (41576), +PARTITION p5197 VALUES LESS THAN (41584), +PARTITION p5198 VALUES LESS THAN (41592), +PARTITION p5199 VALUES LESS THAN (41600), +PARTITION p5200 VALUES LESS THAN (41608), +PARTITION p5201 VALUES LESS THAN (41616), +PARTITION p5202 VALUES LESS THAN (41624), +PARTITION p5203 VALUES LESS THAN (41632), +PARTITION p5204 VALUES LESS THAN (41640), +PARTITION p5205 VALUES LESS THAN (41648), +PARTITION p5206 VALUES LESS THAN (41656), +PARTITION p5207 VALUES LESS THAN (41664), +PARTITION p5208 VALUES LESS THAN (41672), +PARTITION p5209 VALUES LESS THAN (41680), +PARTITION p5210 VALUES LESS THAN (41688), +PARTITION p5211 VALUES LESS THAN (41696), +PARTITION p5212 VALUES LESS THAN (41704), +PARTITION p5213 VALUES LESS THAN (41712), +PARTITION p5214 VALUES LESS THAN (41720), +PARTITION p5215 VALUES LESS THAN (41728), +PARTITION p5216 VALUES LESS THAN (41736), +PARTITION p5217 VALUES LESS THAN (41744), +PARTITION p5218 VALUES LESS THAN (41752), +PARTITION p5219 VALUES LESS THAN (41760), +PARTITION p5220 VALUES LESS THAN (41768), +PARTITION p5221 VALUES LESS THAN (41776), +PARTITION p5222 VALUES LESS THAN (41784), +PARTITION p5223 VALUES LESS THAN (41792), +PARTITION p5224 VALUES LESS THAN (41800), +PARTITION p5225 VALUES LESS THAN (41808), +PARTITION p5226 VALUES LESS THAN (41816), +PARTITION p5227 VALUES LESS THAN (41824), +PARTITION p5228 VALUES LESS THAN (41832), +PARTITION p5229 VALUES LESS THAN (41840), +PARTITION p5230 VALUES LESS THAN (41848), +PARTITION p5231 VALUES LESS THAN (41856), +PARTITION p5232 VALUES LESS THAN (41864), +PARTITION p5233 VALUES LESS THAN (41872), +PARTITION p5234 VALUES LESS THAN (41880), +PARTITION p5235 VALUES LESS THAN (41888), +PARTITION p5236 VALUES LESS THAN (41896), +PARTITION p5237 VALUES LESS THAN (41904), +PARTITION p5238 VALUES LESS THAN (41912), +PARTITION p5239 VALUES LESS THAN (41920), +PARTITION p5240 VALUES LESS THAN (41928), +PARTITION p5241 VALUES LESS THAN (41936), +PARTITION p5242 VALUES LESS THAN (41944), +PARTITION p5243 VALUES LESS THAN (41952), +PARTITION p5244 VALUES LESS THAN (41960), +PARTITION p5245 VALUES LESS THAN (41968), +PARTITION p5246 VALUES LESS THAN (41976), +PARTITION p5247 VALUES LESS THAN (41984), +PARTITION p5248 VALUES LESS THAN (41992), +PARTITION p5249 VALUES LESS THAN (42000), +PARTITION p5250 VALUES LESS THAN (42008), +PARTITION p5251 VALUES LESS THAN (42016), +PARTITION p5252 VALUES LESS THAN (42024), +PARTITION p5253 VALUES LESS THAN (42032), +PARTITION p5254 VALUES LESS THAN (42040), +PARTITION p5255 VALUES LESS THAN (42048), +PARTITION p5256 VALUES LESS THAN (42056), +PARTITION p5257 VALUES LESS THAN (42064), +PARTITION p5258 VALUES LESS THAN (42072), +PARTITION p5259 VALUES LESS THAN (42080), +PARTITION p5260 VALUES LESS THAN (42088), +PARTITION p5261 VALUES LESS THAN (42096), +PARTITION p5262 VALUES LESS THAN (42104), +PARTITION p5263 VALUES LESS THAN (42112), +PARTITION p5264 VALUES LESS THAN (42120), +PARTITION p5265 VALUES LESS THAN (42128), +PARTITION p5266 VALUES LESS THAN (42136), +PARTITION p5267 VALUES LESS THAN (42144), +PARTITION p5268 VALUES LESS THAN (42152), +PARTITION p5269 VALUES LESS THAN (42160), +PARTITION p5270 VALUES LESS THAN (42168), +PARTITION p5271 VALUES LESS THAN (42176), +PARTITION p5272 VALUES LESS THAN (42184), +PARTITION p5273 VALUES LESS THAN (42192), +PARTITION p5274 VALUES LESS THAN (42200), +PARTITION p5275 VALUES LESS THAN (42208), +PARTITION p5276 VALUES LESS THAN (42216), +PARTITION p5277 VALUES LESS THAN (42224), +PARTITION p5278 VALUES LESS THAN (42232), +PARTITION p5279 VALUES LESS THAN (42240), +PARTITION p5280 VALUES LESS THAN (42248), +PARTITION p5281 VALUES LESS THAN (42256), +PARTITION p5282 VALUES LESS THAN (42264), +PARTITION p5283 VALUES LESS THAN (42272), +PARTITION p5284 VALUES LESS THAN (42280), +PARTITION p5285 VALUES LESS THAN (42288), +PARTITION p5286 VALUES LESS THAN (42296), +PARTITION p5287 VALUES LESS THAN (42304), +PARTITION p5288 VALUES LESS THAN (42312), +PARTITION p5289 VALUES LESS THAN (42320), +PARTITION p5290 VALUES LESS THAN (42328), +PARTITION p5291 VALUES LESS THAN (42336), +PARTITION p5292 VALUES LESS THAN (42344), +PARTITION p5293 VALUES LESS THAN (42352), +PARTITION p5294 VALUES LESS THAN (42360), +PARTITION p5295 VALUES LESS THAN (42368), +PARTITION p5296 VALUES LESS THAN (42376), +PARTITION p5297 VALUES LESS THAN (42384), +PARTITION p5298 VALUES LESS THAN (42392), +PARTITION p5299 VALUES LESS THAN (42400), +PARTITION p5300 VALUES LESS THAN (42408), +PARTITION p5301 VALUES LESS THAN (42416), +PARTITION p5302 VALUES LESS THAN (42424), +PARTITION p5303 VALUES LESS THAN (42432), +PARTITION p5304 VALUES LESS THAN (42440), +PARTITION p5305 VALUES LESS THAN (42448), +PARTITION p5306 VALUES LESS THAN (42456), +PARTITION p5307 VALUES LESS THAN (42464), +PARTITION p5308 VALUES LESS THAN (42472), +PARTITION p5309 VALUES LESS THAN (42480), +PARTITION p5310 VALUES LESS THAN (42488), +PARTITION p5311 VALUES LESS THAN (42496), +PARTITION p5312 VALUES LESS THAN (42504), +PARTITION p5313 VALUES LESS THAN (42512), +PARTITION p5314 VALUES LESS THAN (42520), +PARTITION p5315 VALUES LESS THAN (42528), +PARTITION p5316 VALUES LESS THAN (42536), +PARTITION p5317 VALUES LESS THAN (42544), +PARTITION p5318 VALUES LESS THAN (42552), +PARTITION p5319 VALUES LESS THAN (42560), +PARTITION p5320 VALUES LESS THAN (42568), +PARTITION p5321 VALUES LESS THAN (42576), +PARTITION p5322 VALUES LESS THAN (42584), +PARTITION p5323 VALUES LESS THAN (42592), +PARTITION p5324 VALUES LESS THAN (42600), +PARTITION p5325 VALUES LESS THAN (42608), +PARTITION p5326 VALUES LESS THAN (42616), +PARTITION p5327 VALUES LESS THAN (42624), +PARTITION p5328 VALUES LESS THAN (42632), +PARTITION p5329 VALUES LESS THAN (42640), +PARTITION p5330 VALUES LESS THAN (42648), +PARTITION p5331 VALUES LESS THAN (42656), +PARTITION p5332 VALUES LESS THAN (42664), +PARTITION p5333 VALUES LESS THAN (42672), +PARTITION p5334 VALUES LESS THAN (42680), +PARTITION p5335 VALUES LESS THAN (42688), +PARTITION p5336 VALUES LESS THAN (42696), +PARTITION p5337 VALUES LESS THAN (42704), +PARTITION p5338 VALUES LESS THAN (42712), +PARTITION p5339 VALUES LESS THAN (42720), +PARTITION p5340 VALUES LESS THAN (42728), +PARTITION p5341 VALUES LESS THAN (42736), +PARTITION p5342 VALUES LESS THAN (42744), +PARTITION p5343 VALUES LESS THAN (42752), +PARTITION p5344 VALUES LESS THAN (42760), +PARTITION p5345 VALUES LESS THAN (42768), +PARTITION p5346 VALUES LESS THAN (42776), +PARTITION p5347 VALUES LESS THAN (42784), +PARTITION p5348 VALUES LESS THAN (42792), +PARTITION p5349 VALUES LESS THAN (42800), +PARTITION p5350 VALUES LESS THAN (42808), +PARTITION p5351 VALUES LESS THAN (42816), +PARTITION p5352 VALUES LESS THAN (42824), +PARTITION p5353 VALUES LESS THAN (42832), +PARTITION p5354 VALUES LESS THAN (42840), +PARTITION p5355 VALUES LESS THAN (42848), +PARTITION p5356 VALUES LESS THAN (42856), +PARTITION p5357 VALUES LESS THAN (42864), +PARTITION p5358 VALUES LESS THAN (42872), +PARTITION p5359 VALUES LESS THAN (42880), +PARTITION p5360 VALUES LESS THAN (42888), +PARTITION p5361 VALUES LESS THAN (42896), +PARTITION p5362 VALUES LESS THAN (42904), +PARTITION p5363 VALUES LESS THAN (42912), +PARTITION p5364 VALUES LESS THAN (42920), +PARTITION p5365 VALUES LESS THAN (42928), +PARTITION p5366 VALUES LESS THAN (42936), +PARTITION p5367 VALUES LESS THAN (42944), +PARTITION p5368 VALUES LESS THAN (42952), +PARTITION p5369 VALUES LESS THAN (42960), +PARTITION p5370 VALUES LESS THAN (42968), +PARTITION p5371 VALUES LESS THAN (42976), +PARTITION p5372 VALUES LESS THAN (42984), +PARTITION p5373 VALUES LESS THAN (42992), +PARTITION p5374 VALUES LESS THAN (43000), +PARTITION p5375 VALUES LESS THAN (43008), +PARTITION p5376 VALUES LESS THAN (43016), +PARTITION p5377 VALUES LESS THAN (43024), +PARTITION p5378 VALUES LESS THAN (43032), +PARTITION p5379 VALUES LESS THAN (43040), +PARTITION p5380 VALUES LESS THAN (43048), +PARTITION p5381 VALUES LESS THAN (43056), +PARTITION p5382 VALUES LESS THAN (43064), +PARTITION p5383 VALUES LESS THAN (43072), +PARTITION p5384 VALUES LESS THAN (43080), +PARTITION p5385 VALUES LESS THAN (43088), +PARTITION p5386 VALUES LESS THAN (43096), +PARTITION p5387 VALUES LESS THAN (43104), +PARTITION p5388 VALUES LESS THAN (43112), +PARTITION p5389 VALUES LESS THAN (43120), +PARTITION p5390 VALUES LESS THAN (43128), +PARTITION p5391 VALUES LESS THAN (43136), +PARTITION p5392 VALUES LESS THAN (43144), +PARTITION p5393 VALUES LESS THAN (43152), +PARTITION p5394 VALUES LESS THAN (43160), +PARTITION p5395 VALUES LESS THAN (43168), +PARTITION p5396 VALUES LESS THAN (43176), +PARTITION p5397 VALUES LESS THAN (43184), +PARTITION p5398 VALUES LESS THAN (43192), +PARTITION p5399 VALUES LESS THAN (43200), +PARTITION p5400 VALUES LESS THAN (43208), +PARTITION p5401 VALUES LESS THAN (43216), +PARTITION p5402 VALUES LESS THAN (43224), +PARTITION p5403 VALUES LESS THAN (43232), +PARTITION p5404 VALUES LESS THAN (43240), +PARTITION p5405 VALUES LESS THAN (43248), +PARTITION p5406 VALUES LESS THAN (43256), +PARTITION p5407 VALUES LESS THAN (43264), +PARTITION p5408 VALUES LESS THAN (43272), +PARTITION p5409 VALUES LESS THAN (43280), +PARTITION p5410 VALUES LESS THAN (43288), +PARTITION p5411 VALUES LESS THAN (43296), +PARTITION p5412 VALUES LESS THAN (43304), +PARTITION p5413 VALUES LESS THAN (43312), +PARTITION p5414 VALUES LESS THAN (43320), +PARTITION p5415 VALUES LESS THAN (43328), +PARTITION p5416 VALUES LESS THAN (43336), +PARTITION p5417 VALUES LESS THAN (43344), +PARTITION p5418 VALUES LESS THAN (43352), +PARTITION p5419 VALUES LESS THAN (43360), +PARTITION p5420 VALUES LESS THAN (43368), +PARTITION p5421 VALUES LESS THAN (43376), +PARTITION p5422 VALUES LESS THAN (43384), +PARTITION p5423 VALUES LESS THAN (43392), +PARTITION p5424 VALUES LESS THAN (43400), +PARTITION p5425 VALUES LESS THAN (43408), +PARTITION p5426 VALUES LESS THAN (43416), +PARTITION p5427 VALUES LESS THAN (43424), +PARTITION p5428 VALUES LESS THAN (43432), +PARTITION p5429 VALUES LESS THAN (43440), +PARTITION p5430 VALUES LESS THAN (43448), +PARTITION p5431 VALUES LESS THAN (43456), +PARTITION p5432 VALUES LESS THAN (43464), +PARTITION p5433 VALUES LESS THAN (43472), +PARTITION p5434 VALUES LESS THAN (43480), +PARTITION p5435 VALUES LESS THAN (43488), +PARTITION p5436 VALUES LESS THAN (43496), +PARTITION p5437 VALUES LESS THAN (43504), +PARTITION p5438 VALUES LESS THAN (43512), +PARTITION p5439 VALUES LESS THAN (43520), +PARTITION p5440 VALUES LESS THAN (43528), +PARTITION p5441 VALUES LESS THAN (43536), +PARTITION p5442 VALUES LESS THAN (43544), +PARTITION p5443 VALUES LESS THAN (43552), +PARTITION p5444 VALUES LESS THAN (43560), +PARTITION p5445 VALUES LESS THAN (43568), +PARTITION p5446 VALUES LESS THAN (43576), +PARTITION p5447 VALUES LESS THAN (43584), +PARTITION p5448 VALUES LESS THAN (43592), +PARTITION p5449 VALUES LESS THAN (43600), +PARTITION p5450 VALUES LESS THAN (43608), +PARTITION p5451 VALUES LESS THAN (43616), +PARTITION p5452 VALUES LESS THAN (43624), +PARTITION p5453 VALUES LESS THAN (43632), +PARTITION p5454 VALUES LESS THAN (43640), +PARTITION p5455 VALUES LESS THAN (43648), +PARTITION p5456 VALUES LESS THAN (43656), +PARTITION p5457 VALUES LESS THAN (43664), +PARTITION p5458 VALUES LESS THAN (43672), +PARTITION p5459 VALUES LESS THAN (43680), +PARTITION p5460 VALUES LESS THAN (43688), +PARTITION p5461 VALUES LESS THAN (43696), +PARTITION p5462 VALUES LESS THAN (43704), +PARTITION p5463 VALUES LESS THAN (43712), +PARTITION p5464 VALUES LESS THAN (43720), +PARTITION p5465 VALUES LESS THAN (43728), +PARTITION p5466 VALUES LESS THAN (43736), +PARTITION p5467 VALUES LESS THAN (43744), +PARTITION p5468 VALUES LESS THAN (43752), +PARTITION p5469 VALUES LESS THAN (43760), +PARTITION p5470 VALUES LESS THAN (43768), +PARTITION p5471 VALUES LESS THAN (43776), +PARTITION p5472 VALUES LESS THAN (43784), +PARTITION p5473 VALUES LESS THAN (43792), +PARTITION p5474 VALUES LESS THAN (43800), +PARTITION p5475 VALUES LESS THAN (43808), +PARTITION p5476 VALUES LESS THAN (43816), +PARTITION p5477 VALUES LESS THAN (43824), +PARTITION p5478 VALUES LESS THAN (43832), +PARTITION p5479 VALUES LESS THAN (43840), +PARTITION p5480 VALUES LESS THAN (43848), +PARTITION p5481 VALUES LESS THAN (43856), +PARTITION p5482 VALUES LESS THAN (43864), +PARTITION p5483 VALUES LESS THAN (43872), +PARTITION p5484 VALUES LESS THAN (43880), +PARTITION p5485 VALUES LESS THAN (43888), +PARTITION p5486 VALUES LESS THAN (43896), +PARTITION p5487 VALUES LESS THAN (43904), +PARTITION p5488 VALUES LESS THAN (43912), +PARTITION p5489 VALUES LESS THAN (43920), +PARTITION p5490 VALUES LESS THAN (43928), +PARTITION p5491 VALUES LESS THAN (43936), +PARTITION p5492 VALUES LESS THAN (43944), +PARTITION p5493 VALUES LESS THAN (43952), +PARTITION p5494 VALUES LESS THAN (43960), +PARTITION p5495 VALUES LESS THAN (43968), +PARTITION p5496 VALUES LESS THAN (43976), +PARTITION p5497 VALUES LESS THAN (43984), +PARTITION p5498 VALUES LESS THAN (43992), +PARTITION p5499 VALUES LESS THAN (44000), +PARTITION p5500 VALUES LESS THAN (44008), +PARTITION p5501 VALUES LESS THAN (44016), +PARTITION p5502 VALUES LESS THAN (44024), +PARTITION p5503 VALUES LESS THAN (44032), +PARTITION p5504 VALUES LESS THAN (44040), +PARTITION p5505 VALUES LESS THAN (44048), +PARTITION p5506 VALUES LESS THAN (44056), +PARTITION p5507 VALUES LESS THAN (44064), +PARTITION p5508 VALUES LESS THAN (44072), +PARTITION p5509 VALUES LESS THAN (44080), +PARTITION p5510 VALUES LESS THAN (44088), +PARTITION p5511 VALUES LESS THAN (44096), +PARTITION p5512 VALUES LESS THAN (44104), +PARTITION p5513 VALUES LESS THAN (44112), +PARTITION p5514 VALUES LESS THAN (44120), +PARTITION p5515 VALUES LESS THAN (44128), +PARTITION p5516 VALUES LESS THAN (44136), +PARTITION p5517 VALUES LESS THAN (44144), +PARTITION p5518 VALUES LESS THAN (44152), +PARTITION p5519 VALUES LESS THAN (44160), +PARTITION p5520 VALUES LESS THAN (44168), +PARTITION p5521 VALUES LESS THAN (44176), +PARTITION p5522 VALUES LESS THAN (44184), +PARTITION p5523 VALUES LESS THAN (44192), +PARTITION p5524 VALUES LESS THAN (44200), +PARTITION p5525 VALUES LESS THAN (44208), +PARTITION p5526 VALUES LESS THAN (44216), +PARTITION p5527 VALUES LESS THAN (44224), +PARTITION p5528 VALUES LESS THAN (44232), +PARTITION p5529 VALUES LESS THAN (44240), +PARTITION p5530 VALUES LESS THAN (44248), +PARTITION p5531 VALUES LESS THAN (44256), +PARTITION p5532 VALUES LESS THAN (44264), +PARTITION p5533 VALUES LESS THAN (44272), +PARTITION p5534 VALUES LESS THAN (44280), +PARTITION p5535 VALUES LESS THAN (44288), +PARTITION p5536 VALUES LESS THAN (44296), +PARTITION p5537 VALUES LESS THAN (44304), +PARTITION p5538 VALUES LESS THAN (44312), +PARTITION p5539 VALUES LESS THAN (44320), +PARTITION p5540 VALUES LESS THAN (44328), +PARTITION p5541 VALUES LESS THAN (44336), +PARTITION p5542 VALUES LESS THAN (44344), +PARTITION p5543 VALUES LESS THAN (44352), +PARTITION p5544 VALUES LESS THAN (44360), +PARTITION p5545 VALUES LESS THAN (44368), +PARTITION p5546 VALUES LESS THAN (44376), +PARTITION p5547 VALUES LESS THAN (44384), +PARTITION p5548 VALUES LESS THAN (44392), +PARTITION p5549 VALUES LESS THAN (44400), +PARTITION p5550 VALUES LESS THAN (44408), +PARTITION p5551 VALUES LESS THAN (44416), +PARTITION p5552 VALUES LESS THAN (44424), +PARTITION p5553 VALUES LESS THAN (44432), +PARTITION p5554 VALUES LESS THAN (44440), +PARTITION p5555 VALUES LESS THAN (44448), +PARTITION p5556 VALUES LESS THAN (44456), +PARTITION p5557 VALUES LESS THAN (44464), +PARTITION p5558 VALUES LESS THAN (44472), +PARTITION p5559 VALUES LESS THAN (44480), +PARTITION p5560 VALUES LESS THAN (44488), +PARTITION p5561 VALUES LESS THAN (44496), +PARTITION p5562 VALUES LESS THAN (44504), +PARTITION p5563 VALUES LESS THAN (44512), +PARTITION p5564 VALUES LESS THAN (44520), +PARTITION p5565 VALUES LESS THAN (44528), +PARTITION p5566 VALUES LESS THAN (44536), +PARTITION p5567 VALUES LESS THAN (44544), +PARTITION p5568 VALUES LESS THAN (44552), +PARTITION p5569 VALUES LESS THAN (44560), +PARTITION p5570 VALUES LESS THAN (44568), +PARTITION p5571 VALUES LESS THAN (44576), +PARTITION p5572 VALUES LESS THAN (44584), +PARTITION p5573 VALUES LESS THAN (44592), +PARTITION p5574 VALUES LESS THAN (44600), +PARTITION p5575 VALUES LESS THAN (44608), +PARTITION p5576 VALUES LESS THAN (44616), +PARTITION p5577 VALUES LESS THAN (44624), +PARTITION p5578 VALUES LESS THAN (44632), +PARTITION p5579 VALUES LESS THAN (44640), +PARTITION p5580 VALUES LESS THAN (44648), +PARTITION p5581 VALUES LESS THAN (44656), +PARTITION p5582 VALUES LESS THAN (44664), +PARTITION p5583 VALUES LESS THAN (44672), +PARTITION p5584 VALUES LESS THAN (44680), +PARTITION p5585 VALUES LESS THAN (44688), +PARTITION p5586 VALUES LESS THAN (44696), +PARTITION p5587 VALUES LESS THAN (44704), +PARTITION p5588 VALUES LESS THAN (44712), +PARTITION p5589 VALUES LESS THAN (44720), +PARTITION p5590 VALUES LESS THAN (44728), +PARTITION p5591 VALUES LESS THAN (44736), +PARTITION p5592 VALUES LESS THAN (44744), +PARTITION p5593 VALUES LESS THAN (44752), +PARTITION p5594 VALUES LESS THAN (44760), +PARTITION p5595 VALUES LESS THAN (44768), +PARTITION p5596 VALUES LESS THAN (44776), +PARTITION p5597 VALUES LESS THAN (44784), +PARTITION p5598 VALUES LESS THAN (44792), +PARTITION p5599 VALUES LESS THAN (44800), +PARTITION p5600 VALUES LESS THAN (44808), +PARTITION p5601 VALUES LESS THAN (44816), +PARTITION p5602 VALUES LESS THAN (44824), +PARTITION p5603 VALUES LESS THAN (44832), +PARTITION p5604 VALUES LESS THAN (44840), +PARTITION p5605 VALUES LESS THAN (44848), +PARTITION p5606 VALUES LESS THAN (44856), +PARTITION p5607 VALUES LESS THAN (44864), +PARTITION p5608 VALUES LESS THAN (44872), +PARTITION p5609 VALUES LESS THAN (44880), +PARTITION p5610 VALUES LESS THAN (44888), +PARTITION p5611 VALUES LESS THAN (44896), +PARTITION p5612 VALUES LESS THAN (44904), +PARTITION p5613 VALUES LESS THAN (44912), +PARTITION p5614 VALUES LESS THAN (44920), +PARTITION p5615 VALUES LESS THAN (44928), +PARTITION p5616 VALUES LESS THAN (44936), +PARTITION p5617 VALUES LESS THAN (44944), +PARTITION p5618 VALUES LESS THAN (44952), +PARTITION p5619 VALUES LESS THAN (44960), +PARTITION p5620 VALUES LESS THAN (44968), +PARTITION p5621 VALUES LESS THAN (44976), +PARTITION p5622 VALUES LESS THAN (44984), +PARTITION p5623 VALUES LESS THAN (44992), +PARTITION p5624 VALUES LESS THAN (45000), +PARTITION p5625 VALUES LESS THAN (45008), +PARTITION p5626 VALUES LESS THAN (45016), +PARTITION p5627 VALUES LESS THAN (45024), +PARTITION p5628 VALUES LESS THAN (45032), +PARTITION p5629 VALUES LESS THAN (45040), +PARTITION p5630 VALUES LESS THAN (45048), +PARTITION p5631 VALUES LESS THAN (45056), +PARTITION p5632 VALUES LESS THAN (45064), +PARTITION p5633 VALUES LESS THAN (45072), +PARTITION p5634 VALUES LESS THAN (45080), +PARTITION p5635 VALUES LESS THAN (45088), +PARTITION p5636 VALUES LESS THAN (45096), +PARTITION p5637 VALUES LESS THAN (45104), +PARTITION p5638 VALUES LESS THAN (45112), +PARTITION p5639 VALUES LESS THAN (45120), +PARTITION p5640 VALUES LESS THAN (45128), +PARTITION p5641 VALUES LESS THAN (45136), +PARTITION p5642 VALUES LESS THAN (45144), +PARTITION p5643 VALUES LESS THAN (45152), +PARTITION p5644 VALUES LESS THAN (45160), +PARTITION p5645 VALUES LESS THAN (45168), +PARTITION p5646 VALUES LESS THAN (45176), +PARTITION p5647 VALUES LESS THAN (45184), +PARTITION p5648 VALUES LESS THAN (45192), +PARTITION p5649 VALUES LESS THAN (45200), +PARTITION p5650 VALUES LESS THAN (45208), +PARTITION p5651 VALUES LESS THAN (45216), +PARTITION p5652 VALUES LESS THAN (45224), +PARTITION p5653 VALUES LESS THAN (45232), +PARTITION p5654 VALUES LESS THAN (45240), +PARTITION p5655 VALUES LESS THAN (45248), +PARTITION p5656 VALUES LESS THAN (45256), +PARTITION p5657 VALUES LESS THAN (45264), +PARTITION p5658 VALUES LESS THAN (45272), +PARTITION p5659 VALUES LESS THAN (45280), +PARTITION p5660 VALUES LESS THAN (45288), +PARTITION p5661 VALUES LESS THAN (45296), +PARTITION p5662 VALUES LESS THAN (45304), +PARTITION p5663 VALUES LESS THAN (45312), +PARTITION p5664 VALUES LESS THAN (45320), +PARTITION p5665 VALUES LESS THAN (45328), +PARTITION p5666 VALUES LESS THAN (45336), +PARTITION p5667 VALUES LESS THAN (45344), +PARTITION p5668 VALUES LESS THAN (45352), +PARTITION p5669 VALUES LESS THAN (45360), +PARTITION p5670 VALUES LESS THAN (45368), +PARTITION p5671 VALUES LESS THAN (45376), +PARTITION p5672 VALUES LESS THAN (45384), +PARTITION p5673 VALUES LESS THAN (45392), +PARTITION p5674 VALUES LESS THAN (45400), +PARTITION p5675 VALUES LESS THAN (45408), +PARTITION p5676 VALUES LESS THAN (45416), +PARTITION p5677 VALUES LESS THAN (45424), +PARTITION p5678 VALUES LESS THAN (45432), +PARTITION p5679 VALUES LESS THAN (45440), +PARTITION p5680 VALUES LESS THAN (45448), +PARTITION p5681 VALUES LESS THAN (45456), +PARTITION p5682 VALUES LESS THAN (45464), +PARTITION p5683 VALUES LESS THAN (45472), +PARTITION p5684 VALUES LESS THAN (45480), +PARTITION p5685 VALUES LESS THAN (45488), +PARTITION p5686 VALUES LESS THAN (45496), +PARTITION p5687 VALUES LESS THAN (45504), +PARTITION p5688 VALUES LESS THAN (45512), +PARTITION p5689 VALUES LESS THAN (45520), +PARTITION p5690 VALUES LESS THAN (45528), +PARTITION p5691 VALUES LESS THAN (45536), +PARTITION p5692 VALUES LESS THAN (45544), +PARTITION p5693 VALUES LESS THAN (45552), +PARTITION p5694 VALUES LESS THAN (45560), +PARTITION p5695 VALUES LESS THAN (45568), +PARTITION p5696 VALUES LESS THAN (45576), +PARTITION p5697 VALUES LESS THAN (45584), +PARTITION p5698 VALUES LESS THAN (45592), +PARTITION p5699 VALUES LESS THAN (45600), +PARTITION p5700 VALUES LESS THAN (45608), +PARTITION p5701 VALUES LESS THAN (45616), +PARTITION p5702 VALUES LESS THAN (45624), +PARTITION p5703 VALUES LESS THAN (45632), +PARTITION p5704 VALUES LESS THAN (45640), +PARTITION p5705 VALUES LESS THAN (45648), +PARTITION p5706 VALUES LESS THAN (45656), +PARTITION p5707 VALUES LESS THAN (45664), +PARTITION p5708 VALUES LESS THAN (45672), +PARTITION p5709 VALUES LESS THAN (45680), +PARTITION p5710 VALUES LESS THAN (45688), +PARTITION p5711 VALUES LESS THAN (45696), +PARTITION p5712 VALUES LESS THAN (45704), +PARTITION p5713 VALUES LESS THAN (45712), +PARTITION p5714 VALUES LESS THAN (45720), +PARTITION p5715 VALUES LESS THAN (45728), +PARTITION p5716 VALUES LESS THAN (45736), +PARTITION p5717 VALUES LESS THAN (45744), +PARTITION p5718 VALUES LESS THAN (45752), +PARTITION p5719 VALUES LESS THAN (45760), +PARTITION p5720 VALUES LESS THAN (45768), +PARTITION p5721 VALUES LESS THAN (45776), +PARTITION p5722 VALUES LESS THAN (45784), +PARTITION p5723 VALUES LESS THAN (45792), +PARTITION p5724 VALUES LESS THAN (45800), +PARTITION p5725 VALUES LESS THAN (45808), +PARTITION p5726 VALUES LESS THAN (45816), +PARTITION p5727 VALUES LESS THAN (45824), +PARTITION p5728 VALUES LESS THAN (45832), +PARTITION p5729 VALUES LESS THAN (45840), +PARTITION p5730 VALUES LESS THAN (45848), +PARTITION p5731 VALUES LESS THAN (45856), +PARTITION p5732 VALUES LESS THAN (45864), +PARTITION p5733 VALUES LESS THAN (45872), +PARTITION p5734 VALUES LESS THAN (45880), +PARTITION p5735 VALUES LESS THAN (45888), +PARTITION p5736 VALUES LESS THAN (45896), +PARTITION p5737 VALUES LESS THAN (45904), +PARTITION p5738 VALUES LESS THAN (45912), +PARTITION p5739 VALUES LESS THAN (45920), +PARTITION p5740 VALUES LESS THAN (45928), +PARTITION p5741 VALUES LESS THAN (45936), +PARTITION p5742 VALUES LESS THAN (45944), +PARTITION p5743 VALUES LESS THAN (45952), +PARTITION p5744 VALUES LESS THAN (45960), +PARTITION p5745 VALUES LESS THAN (45968), +PARTITION p5746 VALUES LESS THAN (45976), +PARTITION p5747 VALUES LESS THAN (45984), +PARTITION p5748 VALUES LESS THAN (45992), +PARTITION p5749 VALUES LESS THAN (46000), +PARTITION p5750 VALUES LESS THAN (46008), +PARTITION p5751 VALUES LESS THAN (46016), +PARTITION p5752 VALUES LESS THAN (46024), +PARTITION p5753 VALUES LESS THAN (46032), +PARTITION p5754 VALUES LESS THAN (46040), +PARTITION p5755 VALUES LESS THAN (46048), +PARTITION p5756 VALUES LESS THAN (46056), +PARTITION p5757 VALUES LESS THAN (46064), +PARTITION p5758 VALUES LESS THAN (46072), +PARTITION p5759 VALUES LESS THAN (46080), +PARTITION p5760 VALUES LESS THAN (46088), +PARTITION p5761 VALUES LESS THAN (46096), +PARTITION p5762 VALUES LESS THAN (46104), +PARTITION p5763 VALUES LESS THAN (46112), +PARTITION p5764 VALUES LESS THAN (46120), +PARTITION p5765 VALUES LESS THAN (46128), +PARTITION p5766 VALUES LESS THAN (46136), +PARTITION p5767 VALUES LESS THAN (46144), +PARTITION p5768 VALUES LESS THAN (46152), +PARTITION p5769 VALUES LESS THAN (46160), +PARTITION p5770 VALUES LESS THAN (46168), +PARTITION p5771 VALUES LESS THAN (46176), +PARTITION p5772 VALUES LESS THAN (46184), +PARTITION p5773 VALUES LESS THAN (46192), +PARTITION p5774 VALUES LESS THAN (46200), +PARTITION p5775 VALUES LESS THAN (46208), +PARTITION p5776 VALUES LESS THAN (46216), +PARTITION p5777 VALUES LESS THAN (46224), +PARTITION p5778 VALUES LESS THAN (46232), +PARTITION p5779 VALUES LESS THAN (46240), +PARTITION p5780 VALUES LESS THAN (46248), +PARTITION p5781 VALUES LESS THAN (46256), +PARTITION p5782 VALUES LESS THAN (46264), +PARTITION p5783 VALUES LESS THAN (46272), +PARTITION p5784 VALUES LESS THAN (46280), +PARTITION p5785 VALUES LESS THAN (46288), +PARTITION p5786 VALUES LESS THAN (46296), +PARTITION p5787 VALUES LESS THAN (46304), +PARTITION p5788 VALUES LESS THAN (46312), +PARTITION p5789 VALUES LESS THAN (46320), +PARTITION p5790 VALUES LESS THAN (46328), +PARTITION p5791 VALUES LESS THAN (46336), +PARTITION p5792 VALUES LESS THAN (46344), +PARTITION p5793 VALUES LESS THAN (46352), +PARTITION p5794 VALUES LESS THAN (46360), +PARTITION p5795 VALUES LESS THAN (46368), +PARTITION p5796 VALUES LESS THAN (46376), +PARTITION p5797 VALUES LESS THAN (46384), +PARTITION p5798 VALUES LESS THAN (46392), +PARTITION p5799 VALUES LESS THAN (46400), +PARTITION p5800 VALUES LESS THAN (46408), +PARTITION p5801 VALUES LESS THAN (46416), +PARTITION p5802 VALUES LESS THAN (46424), +PARTITION p5803 VALUES LESS THAN (46432), +PARTITION p5804 VALUES LESS THAN (46440), +PARTITION p5805 VALUES LESS THAN (46448), +PARTITION p5806 VALUES LESS THAN (46456), +PARTITION p5807 VALUES LESS THAN (46464), +PARTITION p5808 VALUES LESS THAN (46472), +PARTITION p5809 VALUES LESS THAN (46480), +PARTITION p5810 VALUES LESS THAN (46488), +PARTITION p5811 VALUES LESS THAN (46496), +PARTITION p5812 VALUES LESS THAN (46504), +PARTITION p5813 VALUES LESS THAN (46512), +PARTITION p5814 VALUES LESS THAN (46520), +PARTITION p5815 VALUES LESS THAN (46528), +PARTITION p5816 VALUES LESS THAN (46536), +PARTITION p5817 VALUES LESS THAN (46544), +PARTITION p5818 VALUES LESS THAN (46552), +PARTITION p5819 VALUES LESS THAN (46560), +PARTITION p5820 VALUES LESS THAN (46568), +PARTITION p5821 VALUES LESS THAN (46576), +PARTITION p5822 VALUES LESS THAN (46584), +PARTITION p5823 VALUES LESS THAN (46592), +PARTITION p5824 VALUES LESS THAN (46600), +PARTITION p5825 VALUES LESS THAN (46608), +PARTITION p5826 VALUES LESS THAN (46616), +PARTITION p5827 VALUES LESS THAN (46624), +PARTITION p5828 VALUES LESS THAN (46632), +PARTITION p5829 VALUES LESS THAN (46640), +PARTITION p5830 VALUES LESS THAN (46648), +PARTITION p5831 VALUES LESS THAN (46656), +PARTITION p5832 VALUES LESS THAN (46664), +PARTITION p5833 VALUES LESS THAN (46672), +PARTITION p5834 VALUES LESS THAN (46680), +PARTITION p5835 VALUES LESS THAN (46688), +PARTITION p5836 VALUES LESS THAN (46696), +PARTITION p5837 VALUES LESS THAN (46704), +PARTITION p5838 VALUES LESS THAN (46712), +PARTITION p5839 VALUES LESS THAN (46720), +PARTITION p5840 VALUES LESS THAN (46728), +PARTITION p5841 VALUES LESS THAN (46736), +PARTITION p5842 VALUES LESS THAN (46744), +PARTITION p5843 VALUES LESS THAN (46752), +PARTITION p5844 VALUES LESS THAN (46760), +PARTITION p5845 VALUES LESS THAN (46768), +PARTITION p5846 VALUES LESS THAN (46776), +PARTITION p5847 VALUES LESS THAN (46784), +PARTITION p5848 VALUES LESS THAN (46792), +PARTITION p5849 VALUES LESS THAN (46800), +PARTITION p5850 VALUES LESS THAN (46808), +PARTITION p5851 VALUES LESS THAN (46816), +PARTITION p5852 VALUES LESS THAN (46824), +PARTITION p5853 VALUES LESS THAN (46832), +PARTITION p5854 VALUES LESS THAN (46840), +PARTITION p5855 VALUES LESS THAN (46848), +PARTITION p5856 VALUES LESS THAN (46856), +PARTITION p5857 VALUES LESS THAN (46864), +PARTITION p5858 VALUES LESS THAN (46872), +PARTITION p5859 VALUES LESS THAN (46880), +PARTITION p5860 VALUES LESS THAN (46888), +PARTITION p5861 VALUES LESS THAN (46896), +PARTITION p5862 VALUES LESS THAN (46904), +PARTITION p5863 VALUES LESS THAN (46912), +PARTITION p5864 VALUES LESS THAN (46920), +PARTITION p5865 VALUES LESS THAN (46928), +PARTITION p5866 VALUES LESS THAN (46936), +PARTITION p5867 VALUES LESS THAN (46944), +PARTITION p5868 VALUES LESS THAN (46952), +PARTITION p5869 VALUES LESS THAN (46960), +PARTITION p5870 VALUES LESS THAN (46968), +PARTITION p5871 VALUES LESS THAN (46976), +PARTITION p5872 VALUES LESS THAN (46984), +PARTITION p5873 VALUES LESS THAN (46992), +PARTITION p5874 VALUES LESS THAN (47000), +PARTITION p5875 VALUES LESS THAN (47008), +PARTITION p5876 VALUES LESS THAN (47016), +PARTITION p5877 VALUES LESS THAN (47024), +PARTITION p5878 VALUES LESS THAN (47032), +PARTITION p5879 VALUES LESS THAN (47040), +PARTITION p5880 VALUES LESS THAN (47048), +PARTITION p5881 VALUES LESS THAN (47056), +PARTITION p5882 VALUES LESS THAN (47064), +PARTITION p5883 VALUES LESS THAN (47072), +PARTITION p5884 VALUES LESS THAN (47080), +PARTITION p5885 VALUES LESS THAN (47088), +PARTITION p5886 VALUES LESS THAN (47096), +PARTITION p5887 VALUES LESS THAN (47104), +PARTITION p5888 VALUES LESS THAN (47112), +PARTITION p5889 VALUES LESS THAN (47120), +PARTITION p5890 VALUES LESS THAN (47128), +PARTITION p5891 VALUES LESS THAN (47136), +PARTITION p5892 VALUES LESS THAN (47144), +PARTITION p5893 VALUES LESS THAN (47152), +PARTITION p5894 VALUES LESS THAN (47160), +PARTITION p5895 VALUES LESS THAN (47168), +PARTITION p5896 VALUES LESS THAN (47176), +PARTITION p5897 VALUES LESS THAN (47184), +PARTITION p5898 VALUES LESS THAN (47192), +PARTITION p5899 VALUES LESS THAN (47200), +PARTITION p5900 VALUES LESS THAN (47208), +PARTITION p5901 VALUES LESS THAN (47216), +PARTITION p5902 VALUES LESS THAN (47224), +PARTITION p5903 VALUES LESS THAN (47232), +PARTITION p5904 VALUES LESS THAN (47240), +PARTITION p5905 VALUES LESS THAN (47248), +PARTITION p5906 VALUES LESS THAN (47256), +PARTITION p5907 VALUES LESS THAN (47264), +PARTITION p5908 VALUES LESS THAN (47272), +PARTITION p5909 VALUES LESS THAN (47280), +PARTITION p5910 VALUES LESS THAN (47288), +PARTITION p5911 VALUES LESS THAN (47296), +PARTITION p5912 VALUES LESS THAN (47304), +PARTITION p5913 VALUES LESS THAN (47312), +PARTITION p5914 VALUES LESS THAN (47320), +PARTITION p5915 VALUES LESS THAN (47328), +PARTITION p5916 VALUES LESS THAN (47336), +PARTITION p5917 VALUES LESS THAN (47344), +PARTITION p5918 VALUES LESS THAN (47352), +PARTITION p5919 VALUES LESS THAN (47360), +PARTITION p5920 VALUES LESS THAN (47368), +PARTITION p5921 VALUES LESS THAN (47376), +PARTITION p5922 VALUES LESS THAN (47384), +PARTITION p5923 VALUES LESS THAN (47392), +PARTITION p5924 VALUES LESS THAN (47400), +PARTITION p5925 VALUES LESS THAN (47408), +PARTITION p5926 VALUES LESS THAN (47416), +PARTITION p5927 VALUES LESS THAN (47424), +PARTITION p5928 VALUES LESS THAN (47432), +PARTITION p5929 VALUES LESS THAN (47440), +PARTITION p5930 VALUES LESS THAN (47448), +PARTITION p5931 VALUES LESS THAN (47456), +PARTITION p5932 VALUES LESS THAN (47464), +PARTITION p5933 VALUES LESS THAN (47472), +PARTITION p5934 VALUES LESS THAN (47480), +PARTITION p5935 VALUES LESS THAN (47488), +PARTITION p5936 VALUES LESS THAN (47496), +PARTITION p5937 VALUES LESS THAN (47504), +PARTITION p5938 VALUES LESS THAN (47512), +PARTITION p5939 VALUES LESS THAN (47520), +PARTITION p5940 VALUES LESS THAN (47528), +PARTITION p5941 VALUES LESS THAN (47536), +PARTITION p5942 VALUES LESS THAN (47544), +PARTITION p5943 VALUES LESS THAN (47552), +PARTITION p5944 VALUES LESS THAN (47560), +PARTITION p5945 VALUES LESS THAN (47568), +PARTITION p5946 VALUES LESS THAN (47576), +PARTITION p5947 VALUES LESS THAN (47584), +PARTITION p5948 VALUES LESS THAN (47592), +PARTITION p5949 VALUES LESS THAN (47600), +PARTITION p5950 VALUES LESS THAN (47608), +PARTITION p5951 VALUES LESS THAN (47616), +PARTITION p5952 VALUES LESS THAN (47624), +PARTITION p5953 VALUES LESS THAN (47632), +PARTITION p5954 VALUES LESS THAN (47640), +PARTITION p5955 VALUES LESS THAN (47648), +PARTITION p5956 VALUES LESS THAN (47656), +PARTITION p5957 VALUES LESS THAN (47664), +PARTITION p5958 VALUES LESS THAN (47672), +PARTITION p5959 VALUES LESS THAN (47680), +PARTITION p5960 VALUES LESS THAN (47688), +PARTITION p5961 VALUES LESS THAN (47696), +PARTITION p5962 VALUES LESS THAN (47704), +PARTITION p5963 VALUES LESS THAN (47712), +PARTITION p5964 VALUES LESS THAN (47720), +PARTITION p5965 VALUES LESS THAN (47728), +PARTITION p5966 VALUES LESS THAN (47736), +PARTITION p5967 VALUES LESS THAN (47744), +PARTITION p5968 VALUES LESS THAN (47752), +PARTITION p5969 VALUES LESS THAN (47760), +PARTITION p5970 VALUES LESS THAN (47768), +PARTITION p5971 VALUES LESS THAN (47776), +PARTITION p5972 VALUES LESS THAN (47784), +PARTITION p5973 VALUES LESS THAN (47792), +PARTITION p5974 VALUES LESS THAN (47800), +PARTITION p5975 VALUES LESS THAN (47808), +PARTITION p5976 VALUES LESS THAN (47816), +PARTITION p5977 VALUES LESS THAN (47824), +PARTITION p5978 VALUES LESS THAN (47832), +PARTITION p5979 VALUES LESS THAN (47840), +PARTITION p5980 VALUES LESS THAN (47848), +PARTITION p5981 VALUES LESS THAN (47856), +PARTITION p5982 VALUES LESS THAN (47864), +PARTITION p5983 VALUES LESS THAN (47872), +PARTITION p5984 VALUES LESS THAN (47880), +PARTITION p5985 VALUES LESS THAN (47888), +PARTITION p5986 VALUES LESS THAN (47896), +PARTITION p5987 VALUES LESS THAN (47904), +PARTITION p5988 VALUES LESS THAN (47912), +PARTITION p5989 VALUES LESS THAN (47920), +PARTITION p5990 VALUES LESS THAN (47928), +PARTITION p5991 VALUES LESS THAN (47936), +PARTITION p5992 VALUES LESS THAN (47944), +PARTITION p5993 VALUES LESS THAN (47952), +PARTITION p5994 VALUES LESS THAN (47960), +PARTITION p5995 VALUES LESS THAN (47968), +PARTITION p5996 VALUES LESS THAN (47976), +PARTITION p5997 VALUES LESS THAN (47984), +PARTITION p5998 VALUES LESS THAN (47992), +PARTITION p5999 VALUES LESS THAN (48000), +PARTITION p6000 VALUES LESS THAN (48008), +PARTITION p6001 VALUES LESS THAN (48016), +PARTITION p6002 VALUES LESS THAN (48024), +PARTITION p6003 VALUES LESS THAN (48032), +PARTITION p6004 VALUES LESS THAN (48040), +PARTITION p6005 VALUES LESS THAN (48048), +PARTITION p6006 VALUES LESS THAN (48056), +PARTITION p6007 VALUES LESS THAN (48064), +PARTITION p6008 VALUES LESS THAN (48072), +PARTITION p6009 VALUES LESS THAN (48080), +PARTITION p6010 VALUES LESS THAN (48088), +PARTITION p6011 VALUES LESS THAN (48096), +PARTITION p6012 VALUES LESS THAN (48104), +PARTITION p6013 VALUES LESS THAN (48112), +PARTITION p6014 VALUES LESS THAN (48120), +PARTITION p6015 VALUES LESS THAN (48128), +PARTITION p6016 VALUES LESS THAN (48136), +PARTITION p6017 VALUES LESS THAN (48144), +PARTITION p6018 VALUES LESS THAN (48152), +PARTITION p6019 VALUES LESS THAN (48160), +PARTITION p6020 VALUES LESS THAN (48168), +PARTITION p6021 VALUES LESS THAN (48176), +PARTITION p6022 VALUES LESS THAN (48184), +PARTITION p6023 VALUES LESS THAN (48192), +PARTITION p6024 VALUES LESS THAN (48200), +PARTITION p6025 VALUES LESS THAN (48208), +PARTITION p6026 VALUES LESS THAN (48216), +PARTITION p6027 VALUES LESS THAN (48224), +PARTITION p6028 VALUES LESS THAN (48232), +PARTITION p6029 VALUES LESS THAN (48240), +PARTITION p6030 VALUES LESS THAN (48248), +PARTITION p6031 VALUES LESS THAN (48256), +PARTITION p6032 VALUES LESS THAN (48264), +PARTITION p6033 VALUES LESS THAN (48272), +PARTITION p6034 VALUES LESS THAN (48280), +PARTITION p6035 VALUES LESS THAN (48288), +PARTITION p6036 VALUES LESS THAN (48296), +PARTITION p6037 VALUES LESS THAN (48304), +PARTITION p6038 VALUES LESS THAN (48312), +PARTITION p6039 VALUES LESS THAN (48320), +PARTITION p6040 VALUES LESS THAN (48328), +PARTITION p6041 VALUES LESS THAN (48336), +PARTITION p6042 VALUES LESS THAN (48344), +PARTITION p6043 VALUES LESS THAN (48352), +PARTITION p6044 VALUES LESS THAN (48360), +PARTITION p6045 VALUES LESS THAN (48368), +PARTITION p6046 VALUES LESS THAN (48376), +PARTITION p6047 VALUES LESS THAN (48384), +PARTITION p6048 VALUES LESS THAN (48392), +PARTITION p6049 VALUES LESS THAN (48400), +PARTITION p6050 VALUES LESS THAN (48408), +PARTITION p6051 VALUES LESS THAN (48416), +PARTITION p6052 VALUES LESS THAN (48424), +PARTITION p6053 VALUES LESS THAN (48432), +PARTITION p6054 VALUES LESS THAN (48440), +PARTITION p6055 VALUES LESS THAN (48448), +PARTITION p6056 VALUES LESS THAN (48456), +PARTITION p6057 VALUES LESS THAN (48464), +PARTITION p6058 VALUES LESS THAN (48472), +PARTITION p6059 VALUES LESS THAN (48480), +PARTITION p6060 VALUES LESS THAN (48488), +PARTITION p6061 VALUES LESS THAN (48496), +PARTITION p6062 VALUES LESS THAN (48504), +PARTITION p6063 VALUES LESS THAN (48512), +PARTITION p6064 VALUES LESS THAN (48520), +PARTITION p6065 VALUES LESS THAN (48528), +PARTITION p6066 VALUES LESS THAN (48536), +PARTITION p6067 VALUES LESS THAN (48544), +PARTITION p6068 VALUES LESS THAN (48552), +PARTITION p6069 VALUES LESS THAN (48560), +PARTITION p6070 VALUES LESS THAN (48568), +PARTITION p6071 VALUES LESS THAN (48576), +PARTITION p6072 VALUES LESS THAN (48584), +PARTITION p6073 VALUES LESS THAN (48592), +PARTITION p6074 VALUES LESS THAN (48600), +PARTITION p6075 VALUES LESS THAN (48608), +PARTITION p6076 VALUES LESS THAN (48616), +PARTITION p6077 VALUES LESS THAN (48624), +PARTITION p6078 VALUES LESS THAN (48632), +PARTITION p6079 VALUES LESS THAN (48640), +PARTITION p6080 VALUES LESS THAN (48648), +PARTITION p6081 VALUES LESS THAN (48656), +PARTITION p6082 VALUES LESS THAN (48664), +PARTITION p6083 VALUES LESS THAN (48672), +PARTITION p6084 VALUES LESS THAN (48680), +PARTITION p6085 VALUES LESS THAN (48688), +PARTITION p6086 VALUES LESS THAN (48696), +PARTITION p6087 VALUES LESS THAN (48704), +PARTITION p6088 VALUES LESS THAN (48712), +PARTITION p6089 VALUES LESS THAN (48720), +PARTITION p6090 VALUES LESS THAN (48728), +PARTITION p6091 VALUES LESS THAN (48736), +PARTITION p6092 VALUES LESS THAN (48744), +PARTITION p6093 VALUES LESS THAN (48752), +PARTITION p6094 VALUES LESS THAN (48760), +PARTITION p6095 VALUES LESS THAN (48768), +PARTITION p6096 VALUES LESS THAN (48776), +PARTITION p6097 VALUES LESS THAN (48784), +PARTITION p6098 VALUES LESS THAN (48792), +PARTITION p6099 VALUES LESS THAN (48800), +PARTITION p6100 VALUES LESS THAN (48808), +PARTITION p6101 VALUES LESS THAN (48816), +PARTITION p6102 VALUES LESS THAN (48824), +PARTITION p6103 VALUES LESS THAN (48832), +PARTITION p6104 VALUES LESS THAN (48840), +PARTITION p6105 VALUES LESS THAN (48848), +PARTITION p6106 VALUES LESS THAN (48856), +PARTITION p6107 VALUES LESS THAN (48864), +PARTITION p6108 VALUES LESS THAN (48872), +PARTITION p6109 VALUES LESS THAN (48880), +PARTITION p6110 VALUES LESS THAN (48888), +PARTITION p6111 VALUES LESS THAN (48896), +PARTITION p6112 VALUES LESS THAN (48904), +PARTITION p6113 VALUES LESS THAN (48912), +PARTITION p6114 VALUES LESS THAN (48920), +PARTITION p6115 VALUES LESS THAN (48928), +PARTITION p6116 VALUES LESS THAN (48936), +PARTITION p6117 VALUES LESS THAN (48944), +PARTITION p6118 VALUES LESS THAN (48952), +PARTITION p6119 VALUES LESS THAN (48960), +PARTITION p6120 VALUES LESS THAN (48968), +PARTITION p6121 VALUES LESS THAN (48976), +PARTITION p6122 VALUES LESS THAN (48984), +PARTITION p6123 VALUES LESS THAN (48992), +PARTITION p6124 VALUES LESS THAN (49000), +PARTITION p6125 VALUES LESS THAN (49008), +PARTITION p6126 VALUES LESS THAN (49016), +PARTITION p6127 VALUES LESS THAN (49024), +PARTITION p6128 VALUES LESS THAN (49032), +PARTITION p6129 VALUES LESS THAN (49040), +PARTITION p6130 VALUES LESS THAN (49048), +PARTITION p6131 VALUES LESS THAN (49056), +PARTITION p6132 VALUES LESS THAN (49064), +PARTITION p6133 VALUES LESS THAN (49072), +PARTITION p6134 VALUES LESS THAN (49080), +PARTITION p6135 VALUES LESS THAN (49088), +PARTITION p6136 VALUES LESS THAN (49096), +PARTITION p6137 VALUES LESS THAN (49104), +PARTITION p6138 VALUES LESS THAN (49112), +PARTITION p6139 VALUES LESS THAN (49120), +PARTITION p6140 VALUES LESS THAN (49128), +PARTITION p6141 VALUES LESS THAN (49136), +PARTITION p6142 VALUES LESS THAN (49144), +PARTITION p6143 VALUES LESS THAN (49152), +PARTITION p6144 VALUES LESS THAN (49160), +PARTITION p6145 VALUES LESS THAN (49168), +PARTITION p6146 VALUES LESS THAN (49176), +PARTITION p6147 VALUES LESS THAN (49184), +PARTITION p6148 VALUES LESS THAN (49192), +PARTITION p6149 VALUES LESS THAN (49200), +PARTITION p6150 VALUES LESS THAN (49208), +PARTITION p6151 VALUES LESS THAN (49216), +PARTITION p6152 VALUES LESS THAN (49224), +PARTITION p6153 VALUES LESS THAN (49232), +PARTITION p6154 VALUES LESS THAN (49240), +PARTITION p6155 VALUES LESS THAN (49248), +PARTITION p6156 VALUES LESS THAN (49256), +PARTITION p6157 VALUES LESS THAN (49264), +PARTITION p6158 VALUES LESS THAN (49272), +PARTITION p6159 VALUES LESS THAN (49280), +PARTITION p6160 VALUES LESS THAN (49288), +PARTITION p6161 VALUES LESS THAN (49296), +PARTITION p6162 VALUES LESS THAN (49304), +PARTITION p6163 VALUES LESS THAN (49312), +PARTITION p6164 VALUES LESS THAN (49320), +PARTITION p6165 VALUES LESS THAN (49328), +PARTITION p6166 VALUES LESS THAN (49336), +PARTITION p6167 VALUES LESS THAN (49344), +PARTITION p6168 VALUES LESS THAN (49352), +PARTITION p6169 VALUES LESS THAN (49360), +PARTITION p6170 VALUES LESS THAN (49368), +PARTITION p6171 VALUES LESS THAN (49376), +PARTITION p6172 VALUES LESS THAN (49384), +PARTITION p6173 VALUES LESS THAN (49392), +PARTITION p6174 VALUES LESS THAN (49400), +PARTITION p6175 VALUES LESS THAN (49408), +PARTITION p6176 VALUES LESS THAN (49416), +PARTITION p6177 VALUES LESS THAN (49424), +PARTITION p6178 VALUES LESS THAN (49432), +PARTITION p6179 VALUES LESS THAN (49440), +PARTITION p6180 VALUES LESS THAN (49448), +PARTITION p6181 VALUES LESS THAN (49456), +PARTITION p6182 VALUES LESS THAN (49464), +PARTITION p6183 VALUES LESS THAN (49472), +PARTITION p6184 VALUES LESS THAN (49480), +PARTITION p6185 VALUES LESS THAN (49488), +PARTITION p6186 VALUES LESS THAN (49496), +PARTITION p6187 VALUES LESS THAN (49504), +PARTITION p6188 VALUES LESS THAN (49512), +PARTITION p6189 VALUES LESS THAN (49520), +PARTITION p6190 VALUES LESS THAN (49528), +PARTITION p6191 VALUES LESS THAN (49536), +PARTITION p6192 VALUES LESS THAN (49544), +PARTITION p6193 VALUES LESS THAN (49552), +PARTITION p6194 VALUES LESS THAN (49560), +PARTITION p6195 VALUES LESS THAN (49568), +PARTITION p6196 VALUES LESS THAN (49576), +PARTITION p6197 VALUES LESS THAN (49584), +PARTITION p6198 VALUES LESS THAN (49592), +PARTITION p6199 VALUES LESS THAN (49600), +PARTITION p6200 VALUES LESS THAN (49608), +PARTITION p6201 VALUES LESS THAN (49616), +PARTITION p6202 VALUES LESS THAN (49624), +PARTITION p6203 VALUES LESS THAN (49632), +PARTITION p6204 VALUES LESS THAN (49640), +PARTITION p6205 VALUES LESS THAN (49648), +PARTITION p6206 VALUES LESS THAN (49656), +PARTITION p6207 VALUES LESS THAN (49664), +PARTITION p6208 VALUES LESS THAN (49672), +PARTITION p6209 VALUES LESS THAN (49680), +PARTITION p6210 VALUES LESS THAN (49688), +PARTITION p6211 VALUES LESS THAN (49696), +PARTITION p6212 VALUES LESS THAN (49704), +PARTITION p6213 VALUES LESS THAN (49712), +PARTITION p6214 VALUES LESS THAN (49720), +PARTITION p6215 VALUES LESS THAN (49728), +PARTITION p6216 VALUES LESS THAN (49736), +PARTITION p6217 VALUES LESS THAN (49744), +PARTITION p6218 VALUES LESS THAN (49752), +PARTITION p6219 VALUES LESS THAN (49760), +PARTITION p6220 VALUES LESS THAN (49768), +PARTITION p6221 VALUES LESS THAN (49776), +PARTITION p6222 VALUES LESS THAN (49784), +PARTITION p6223 VALUES LESS THAN (49792), +PARTITION p6224 VALUES LESS THAN (49800), +PARTITION p6225 VALUES LESS THAN (49808), +PARTITION p6226 VALUES LESS THAN (49816), +PARTITION p6227 VALUES LESS THAN (49824), +PARTITION p6228 VALUES LESS THAN (49832), +PARTITION p6229 VALUES LESS THAN (49840), +PARTITION p6230 VALUES LESS THAN (49848), +PARTITION p6231 VALUES LESS THAN (49856), +PARTITION p6232 VALUES LESS THAN (49864), +PARTITION p6233 VALUES LESS THAN (49872), +PARTITION p6234 VALUES LESS THAN (49880), +PARTITION p6235 VALUES LESS THAN (49888), +PARTITION p6236 VALUES LESS THAN (49896), +PARTITION p6237 VALUES LESS THAN (49904), +PARTITION p6238 VALUES LESS THAN (49912), +PARTITION p6239 VALUES LESS THAN (49920), +PARTITION p6240 VALUES LESS THAN (49928), +PARTITION p6241 VALUES LESS THAN (49936), +PARTITION p6242 VALUES LESS THAN (49944), +PARTITION p6243 VALUES LESS THAN (49952), +PARTITION p6244 VALUES LESS THAN (49960), +PARTITION p6245 VALUES LESS THAN (49968), +PARTITION p6246 VALUES LESS THAN (49976), +PARTITION p6247 VALUES LESS THAN (49984), +PARTITION p6248 VALUES LESS THAN (49992), +PARTITION p6249 VALUES LESS THAN (50000), +PARTITION p6250 VALUES LESS THAN (50008), +PARTITION p6251 VALUES LESS THAN (50016), +PARTITION p6252 VALUES LESS THAN (50024), +PARTITION p6253 VALUES LESS THAN (50032), +PARTITION p6254 VALUES LESS THAN (50040), +PARTITION p6255 VALUES LESS THAN (50048), +PARTITION p6256 VALUES LESS THAN (50056), +PARTITION p6257 VALUES LESS THAN (50064), +PARTITION p6258 VALUES LESS THAN (50072), +PARTITION p6259 VALUES LESS THAN (50080), +PARTITION p6260 VALUES LESS THAN (50088), +PARTITION p6261 VALUES LESS THAN (50096), +PARTITION p6262 VALUES LESS THAN (50104), +PARTITION p6263 VALUES LESS THAN (50112), +PARTITION p6264 VALUES LESS THAN (50120), +PARTITION p6265 VALUES LESS THAN (50128), +PARTITION p6266 VALUES LESS THAN (50136), +PARTITION p6267 VALUES LESS THAN (50144), +PARTITION p6268 VALUES LESS THAN (50152), +PARTITION p6269 VALUES LESS THAN (50160), +PARTITION p6270 VALUES LESS THAN (50168), +PARTITION p6271 VALUES LESS THAN (50176), +PARTITION p6272 VALUES LESS THAN (50184), +PARTITION p6273 VALUES LESS THAN (50192), +PARTITION p6274 VALUES LESS THAN (50200), +PARTITION p6275 VALUES LESS THAN (50208), +PARTITION p6276 VALUES LESS THAN (50216), +PARTITION p6277 VALUES LESS THAN (50224), +PARTITION p6278 VALUES LESS THAN (50232), +PARTITION p6279 VALUES LESS THAN (50240), +PARTITION p6280 VALUES LESS THAN (50248), +PARTITION p6281 VALUES LESS THAN (50256), +PARTITION p6282 VALUES LESS THAN (50264), +PARTITION p6283 VALUES LESS THAN (50272), +PARTITION p6284 VALUES LESS THAN (50280), +PARTITION p6285 VALUES LESS THAN (50288), +PARTITION p6286 VALUES LESS THAN (50296), +PARTITION p6287 VALUES LESS THAN (50304), +PARTITION p6288 VALUES LESS THAN (50312), +PARTITION p6289 VALUES LESS THAN (50320), +PARTITION p6290 VALUES LESS THAN (50328), +PARTITION p6291 VALUES LESS THAN (50336), +PARTITION p6292 VALUES LESS THAN (50344), +PARTITION p6293 VALUES LESS THAN (50352), +PARTITION p6294 VALUES LESS THAN (50360), +PARTITION p6295 VALUES LESS THAN (50368), +PARTITION p6296 VALUES LESS THAN (50376), +PARTITION p6297 VALUES LESS THAN (50384), +PARTITION p6298 VALUES LESS THAN (50392), +PARTITION p6299 VALUES LESS THAN (50400), +PARTITION p6300 VALUES LESS THAN (50408), +PARTITION p6301 VALUES LESS THAN (50416), +PARTITION p6302 VALUES LESS THAN (50424), +PARTITION p6303 VALUES LESS THAN (50432), +PARTITION p6304 VALUES LESS THAN (50440), +PARTITION p6305 VALUES LESS THAN (50448), +PARTITION p6306 VALUES LESS THAN (50456), +PARTITION p6307 VALUES LESS THAN (50464), +PARTITION p6308 VALUES LESS THAN (50472), +PARTITION p6309 VALUES LESS THAN (50480), +PARTITION p6310 VALUES LESS THAN (50488), +PARTITION p6311 VALUES LESS THAN (50496), +PARTITION p6312 VALUES LESS THAN (50504), +PARTITION p6313 VALUES LESS THAN (50512), +PARTITION p6314 VALUES LESS THAN (50520), +PARTITION p6315 VALUES LESS THAN (50528), +PARTITION p6316 VALUES LESS THAN (50536), +PARTITION p6317 VALUES LESS THAN (50544), +PARTITION p6318 VALUES LESS THAN (50552), +PARTITION p6319 VALUES LESS THAN (50560), +PARTITION p6320 VALUES LESS THAN (50568), +PARTITION p6321 VALUES LESS THAN (50576), +PARTITION p6322 VALUES LESS THAN (50584), +PARTITION p6323 VALUES LESS THAN (50592), +PARTITION p6324 VALUES LESS THAN (50600), +PARTITION p6325 VALUES LESS THAN (50608), +PARTITION p6326 VALUES LESS THAN (50616), +PARTITION p6327 VALUES LESS THAN (50624), +PARTITION p6328 VALUES LESS THAN (50632), +PARTITION p6329 VALUES LESS THAN (50640), +PARTITION p6330 VALUES LESS THAN (50648), +PARTITION p6331 VALUES LESS THAN (50656), +PARTITION p6332 VALUES LESS THAN (50664), +PARTITION p6333 VALUES LESS THAN (50672), +PARTITION p6334 VALUES LESS THAN (50680), +PARTITION p6335 VALUES LESS THAN (50688), +PARTITION p6336 VALUES LESS THAN (50696), +PARTITION p6337 VALUES LESS THAN (50704), +PARTITION p6338 VALUES LESS THAN (50712), +PARTITION p6339 VALUES LESS THAN (50720), +PARTITION p6340 VALUES LESS THAN (50728), +PARTITION p6341 VALUES LESS THAN (50736), +PARTITION p6342 VALUES LESS THAN (50744), +PARTITION p6343 VALUES LESS THAN (50752), +PARTITION p6344 VALUES LESS THAN (50760), +PARTITION p6345 VALUES LESS THAN (50768), +PARTITION p6346 VALUES LESS THAN (50776), +PARTITION p6347 VALUES LESS THAN (50784), +PARTITION p6348 VALUES LESS THAN (50792), +PARTITION p6349 VALUES LESS THAN (50800), +PARTITION p6350 VALUES LESS THAN (50808), +PARTITION p6351 VALUES LESS THAN (50816), +PARTITION p6352 VALUES LESS THAN (50824), +PARTITION p6353 VALUES LESS THAN (50832), +PARTITION p6354 VALUES LESS THAN (50840), +PARTITION p6355 VALUES LESS THAN (50848), +PARTITION p6356 VALUES LESS THAN (50856), +PARTITION p6357 VALUES LESS THAN (50864), +PARTITION p6358 VALUES LESS THAN (50872), +PARTITION p6359 VALUES LESS THAN (50880), +PARTITION p6360 VALUES LESS THAN (50888), +PARTITION p6361 VALUES LESS THAN (50896), +PARTITION p6362 VALUES LESS THAN (50904), +PARTITION p6363 VALUES LESS THAN (50912), +PARTITION p6364 VALUES LESS THAN (50920), +PARTITION p6365 VALUES LESS THAN (50928), +PARTITION p6366 VALUES LESS THAN (50936), +PARTITION p6367 VALUES LESS THAN (50944), +PARTITION p6368 VALUES LESS THAN (50952), +PARTITION p6369 VALUES LESS THAN (50960), +PARTITION p6370 VALUES LESS THAN (50968), +PARTITION p6371 VALUES LESS THAN (50976), +PARTITION p6372 VALUES LESS THAN (50984), +PARTITION p6373 VALUES LESS THAN (50992), +PARTITION p6374 VALUES LESS THAN (51000), +PARTITION p6375 VALUES LESS THAN (51008), +PARTITION p6376 VALUES LESS THAN (51016), +PARTITION p6377 VALUES LESS THAN (51024), +PARTITION p6378 VALUES LESS THAN (51032), +PARTITION p6379 VALUES LESS THAN (51040), +PARTITION p6380 VALUES LESS THAN (51048), +PARTITION p6381 VALUES LESS THAN (51056), +PARTITION p6382 VALUES LESS THAN (51064), +PARTITION p6383 VALUES LESS THAN (51072), +PARTITION p6384 VALUES LESS THAN (51080), +PARTITION p6385 VALUES LESS THAN (51088), +PARTITION p6386 VALUES LESS THAN (51096), +PARTITION p6387 VALUES LESS THAN (51104), +PARTITION p6388 VALUES LESS THAN (51112), +PARTITION p6389 VALUES LESS THAN (51120), +PARTITION p6390 VALUES LESS THAN (51128), +PARTITION p6391 VALUES LESS THAN (51136), +PARTITION p6392 VALUES LESS THAN (51144), +PARTITION p6393 VALUES LESS THAN (51152), +PARTITION p6394 VALUES LESS THAN (51160), +PARTITION p6395 VALUES LESS THAN (51168), +PARTITION p6396 VALUES LESS THAN (51176), +PARTITION p6397 VALUES LESS THAN (51184), +PARTITION p6398 VALUES LESS THAN (51192), +PARTITION p6399 VALUES LESS THAN (51200), +PARTITION p6400 VALUES LESS THAN (51208), +PARTITION p6401 VALUES LESS THAN (51216), +PARTITION p6402 VALUES LESS THAN (51224), +PARTITION p6403 VALUES LESS THAN (51232), +PARTITION p6404 VALUES LESS THAN (51240), +PARTITION p6405 VALUES LESS THAN (51248), +PARTITION p6406 VALUES LESS THAN (51256), +PARTITION p6407 VALUES LESS THAN (51264), +PARTITION p6408 VALUES LESS THAN (51272), +PARTITION p6409 VALUES LESS THAN (51280), +PARTITION p6410 VALUES LESS THAN (51288), +PARTITION p6411 VALUES LESS THAN (51296), +PARTITION p6412 VALUES LESS THAN (51304), +PARTITION p6413 VALUES LESS THAN (51312), +PARTITION p6414 VALUES LESS THAN (51320), +PARTITION p6415 VALUES LESS THAN (51328), +PARTITION p6416 VALUES LESS THAN (51336), +PARTITION p6417 VALUES LESS THAN (51344), +PARTITION p6418 VALUES LESS THAN (51352), +PARTITION p6419 VALUES LESS THAN (51360), +PARTITION p6420 VALUES LESS THAN (51368), +PARTITION p6421 VALUES LESS THAN (51376), +PARTITION p6422 VALUES LESS THAN (51384), +PARTITION p6423 VALUES LESS THAN (51392), +PARTITION p6424 VALUES LESS THAN (51400), +PARTITION p6425 VALUES LESS THAN (51408), +PARTITION p6426 VALUES LESS THAN (51416), +PARTITION p6427 VALUES LESS THAN (51424), +PARTITION p6428 VALUES LESS THAN (51432), +PARTITION p6429 VALUES LESS THAN (51440), +PARTITION p6430 VALUES LESS THAN (51448), +PARTITION p6431 VALUES LESS THAN (51456), +PARTITION p6432 VALUES LESS THAN (51464), +PARTITION p6433 VALUES LESS THAN (51472), +PARTITION p6434 VALUES LESS THAN (51480), +PARTITION p6435 VALUES LESS THAN (51488), +PARTITION p6436 VALUES LESS THAN (51496), +PARTITION p6437 VALUES LESS THAN (51504), +PARTITION p6438 VALUES LESS THAN (51512), +PARTITION p6439 VALUES LESS THAN (51520), +PARTITION p6440 VALUES LESS THAN (51528), +PARTITION p6441 VALUES LESS THAN (51536), +PARTITION p6442 VALUES LESS THAN (51544), +PARTITION p6443 VALUES LESS THAN (51552), +PARTITION p6444 VALUES LESS THAN (51560), +PARTITION p6445 VALUES LESS THAN (51568), +PARTITION p6446 VALUES LESS THAN (51576), +PARTITION p6447 VALUES LESS THAN (51584), +PARTITION p6448 VALUES LESS THAN (51592), +PARTITION p6449 VALUES LESS THAN (51600), +PARTITION p6450 VALUES LESS THAN (51608), +PARTITION p6451 VALUES LESS THAN (51616), +PARTITION p6452 VALUES LESS THAN (51624), +PARTITION p6453 VALUES LESS THAN (51632), +PARTITION p6454 VALUES LESS THAN (51640), +PARTITION p6455 VALUES LESS THAN (51648), +PARTITION p6456 VALUES LESS THAN (51656), +PARTITION p6457 VALUES LESS THAN (51664), +PARTITION p6458 VALUES LESS THAN (51672), +PARTITION p6459 VALUES LESS THAN (51680), +PARTITION p6460 VALUES LESS THAN (51688), +PARTITION p6461 VALUES LESS THAN (51696), +PARTITION p6462 VALUES LESS THAN (51704), +PARTITION p6463 VALUES LESS THAN (51712), +PARTITION p6464 VALUES LESS THAN (51720), +PARTITION p6465 VALUES LESS THAN (51728), +PARTITION p6466 VALUES LESS THAN (51736), +PARTITION p6467 VALUES LESS THAN (51744), +PARTITION p6468 VALUES LESS THAN (51752), +PARTITION p6469 VALUES LESS THAN (51760), +PARTITION p6470 VALUES LESS THAN (51768), +PARTITION p6471 VALUES LESS THAN (51776), +PARTITION p6472 VALUES LESS THAN (51784), +PARTITION p6473 VALUES LESS THAN (51792), +PARTITION p6474 VALUES LESS THAN (51800), +PARTITION p6475 VALUES LESS THAN (51808), +PARTITION p6476 VALUES LESS THAN (51816), +PARTITION p6477 VALUES LESS THAN (51824), +PARTITION p6478 VALUES LESS THAN (51832), +PARTITION p6479 VALUES LESS THAN (51840), +PARTITION p6480 VALUES LESS THAN (51848), +PARTITION p6481 VALUES LESS THAN (51856), +PARTITION p6482 VALUES LESS THAN (51864), +PARTITION p6483 VALUES LESS THAN (51872), +PARTITION p6484 VALUES LESS THAN (51880), +PARTITION p6485 VALUES LESS THAN (51888), +PARTITION p6486 VALUES LESS THAN (51896), +PARTITION p6487 VALUES LESS THAN (51904), +PARTITION p6488 VALUES LESS THAN (51912), +PARTITION p6489 VALUES LESS THAN (51920), +PARTITION p6490 VALUES LESS THAN (51928), +PARTITION p6491 VALUES LESS THAN (51936), +PARTITION p6492 VALUES LESS THAN (51944), +PARTITION p6493 VALUES LESS THAN (51952), +PARTITION p6494 VALUES LESS THAN (51960), +PARTITION p6495 VALUES LESS THAN (51968), +PARTITION p6496 VALUES LESS THAN (51976), +PARTITION p6497 VALUES LESS THAN (51984), +PARTITION p6498 VALUES LESS THAN (51992), +PARTITION p6499 VALUES LESS THAN (52000), +PARTITION p6500 VALUES LESS THAN (52008), +PARTITION p6501 VALUES LESS THAN (52016), +PARTITION p6502 VALUES LESS THAN (52024), +PARTITION p6503 VALUES LESS THAN (52032), +PARTITION p6504 VALUES LESS THAN (52040), +PARTITION p6505 VALUES LESS THAN (52048), +PARTITION p6506 VALUES LESS THAN (52056), +PARTITION p6507 VALUES LESS THAN (52064), +PARTITION p6508 VALUES LESS THAN (52072), +PARTITION p6509 VALUES LESS THAN (52080), +PARTITION p6510 VALUES LESS THAN (52088), +PARTITION p6511 VALUES LESS THAN (52096), +PARTITION p6512 VALUES LESS THAN (52104), +PARTITION p6513 VALUES LESS THAN (52112), +PARTITION p6514 VALUES LESS THAN (52120), +PARTITION p6515 VALUES LESS THAN (52128), +PARTITION p6516 VALUES LESS THAN (52136), +PARTITION p6517 VALUES LESS THAN (52144), +PARTITION p6518 VALUES LESS THAN (52152), +PARTITION p6519 VALUES LESS THAN (52160), +PARTITION p6520 VALUES LESS THAN (52168), +PARTITION p6521 VALUES LESS THAN (52176), +PARTITION p6522 VALUES LESS THAN (52184), +PARTITION p6523 VALUES LESS THAN (52192), +PARTITION p6524 VALUES LESS THAN (52200), +PARTITION p6525 VALUES LESS THAN (52208), +PARTITION p6526 VALUES LESS THAN (52216), +PARTITION p6527 VALUES LESS THAN (52224), +PARTITION p6528 VALUES LESS THAN (52232), +PARTITION p6529 VALUES LESS THAN (52240), +PARTITION p6530 VALUES LESS THAN (52248), +PARTITION p6531 VALUES LESS THAN (52256), +PARTITION p6532 VALUES LESS THAN (52264), +PARTITION p6533 VALUES LESS THAN (52272), +PARTITION p6534 VALUES LESS THAN (52280), +PARTITION p6535 VALUES LESS THAN (52288), +PARTITION p6536 VALUES LESS THAN (52296), +PARTITION p6537 VALUES LESS THAN (52304), +PARTITION p6538 VALUES LESS THAN (52312), +PARTITION p6539 VALUES LESS THAN (52320), +PARTITION p6540 VALUES LESS THAN (52328), +PARTITION p6541 VALUES LESS THAN (52336), +PARTITION p6542 VALUES LESS THAN (52344), +PARTITION p6543 VALUES LESS THAN (52352), +PARTITION p6544 VALUES LESS THAN (52360), +PARTITION p6545 VALUES LESS THAN (52368), +PARTITION p6546 VALUES LESS THAN (52376), +PARTITION p6547 VALUES LESS THAN (52384), +PARTITION p6548 VALUES LESS THAN (52392), +PARTITION p6549 VALUES LESS THAN (52400), +PARTITION p6550 VALUES LESS THAN (52408), +PARTITION p6551 VALUES LESS THAN (52416), +PARTITION p6552 VALUES LESS THAN (52424), +PARTITION p6553 VALUES LESS THAN (52432), +PARTITION p6554 VALUES LESS THAN (52440), +PARTITION p6555 VALUES LESS THAN (52448), +PARTITION p6556 VALUES LESS THAN (52456), +PARTITION p6557 VALUES LESS THAN (52464), +PARTITION p6558 VALUES LESS THAN (52472), +PARTITION p6559 VALUES LESS THAN (52480), +PARTITION p6560 VALUES LESS THAN (52488), +PARTITION p6561 VALUES LESS THAN (52496), +PARTITION p6562 VALUES LESS THAN (52504), +PARTITION p6563 VALUES LESS THAN (52512), +PARTITION p6564 VALUES LESS THAN (52520), +PARTITION p6565 VALUES LESS THAN (52528), +PARTITION p6566 VALUES LESS THAN (52536), +PARTITION p6567 VALUES LESS THAN (52544), +PARTITION p6568 VALUES LESS THAN (52552), +PARTITION p6569 VALUES LESS THAN (52560), +PARTITION p6570 VALUES LESS THAN (52568), +PARTITION p6571 VALUES LESS THAN (52576), +PARTITION p6572 VALUES LESS THAN (52584), +PARTITION p6573 VALUES LESS THAN (52592), +PARTITION p6574 VALUES LESS THAN (52600), +PARTITION p6575 VALUES LESS THAN (52608), +PARTITION p6576 VALUES LESS THAN (52616), +PARTITION p6577 VALUES LESS THAN (52624), +PARTITION p6578 VALUES LESS THAN (52632), +PARTITION p6579 VALUES LESS THAN (52640), +PARTITION p6580 VALUES LESS THAN (52648), +PARTITION p6581 VALUES LESS THAN (52656), +PARTITION p6582 VALUES LESS THAN (52664), +PARTITION p6583 VALUES LESS THAN (52672), +PARTITION p6584 VALUES LESS THAN (52680), +PARTITION p6585 VALUES LESS THAN (52688), +PARTITION p6586 VALUES LESS THAN (52696), +PARTITION p6587 VALUES LESS THAN (52704), +PARTITION p6588 VALUES LESS THAN (52712), +PARTITION p6589 VALUES LESS THAN (52720), +PARTITION p6590 VALUES LESS THAN (52728), +PARTITION p6591 VALUES LESS THAN (52736), +PARTITION p6592 VALUES LESS THAN (52744), +PARTITION p6593 VALUES LESS THAN (52752), +PARTITION p6594 VALUES LESS THAN (52760), +PARTITION p6595 VALUES LESS THAN (52768), +PARTITION p6596 VALUES LESS THAN (52776), +PARTITION p6597 VALUES LESS THAN (52784), +PARTITION p6598 VALUES LESS THAN (52792), +PARTITION p6599 VALUES LESS THAN (52800), +PARTITION p6600 VALUES LESS THAN (52808), +PARTITION p6601 VALUES LESS THAN (52816), +PARTITION p6602 VALUES LESS THAN (52824), +PARTITION p6603 VALUES LESS THAN (52832), +PARTITION p6604 VALUES LESS THAN (52840), +PARTITION p6605 VALUES LESS THAN (52848), +PARTITION p6606 VALUES LESS THAN (52856), +PARTITION p6607 VALUES LESS THAN (52864), +PARTITION p6608 VALUES LESS THAN (52872), +PARTITION p6609 VALUES LESS THAN (52880), +PARTITION p6610 VALUES LESS THAN (52888), +PARTITION p6611 VALUES LESS THAN (52896), +PARTITION p6612 VALUES LESS THAN (52904), +PARTITION p6613 VALUES LESS THAN (52912), +PARTITION p6614 VALUES LESS THAN (52920), +PARTITION p6615 VALUES LESS THAN (52928), +PARTITION p6616 VALUES LESS THAN (52936), +PARTITION p6617 VALUES LESS THAN (52944), +PARTITION p6618 VALUES LESS THAN (52952), +PARTITION p6619 VALUES LESS THAN (52960), +PARTITION p6620 VALUES LESS THAN (52968), +PARTITION p6621 VALUES LESS THAN (52976), +PARTITION p6622 VALUES LESS THAN (52984), +PARTITION p6623 VALUES LESS THAN (52992), +PARTITION p6624 VALUES LESS THAN (53000), +PARTITION p6625 VALUES LESS THAN (53008), +PARTITION p6626 VALUES LESS THAN (53016), +PARTITION p6627 VALUES LESS THAN (53024), +PARTITION p6628 VALUES LESS THAN (53032), +PARTITION p6629 VALUES LESS THAN (53040), +PARTITION p6630 VALUES LESS THAN (53048), +PARTITION p6631 VALUES LESS THAN (53056), +PARTITION p6632 VALUES LESS THAN (53064), +PARTITION p6633 VALUES LESS THAN (53072), +PARTITION p6634 VALUES LESS THAN (53080), +PARTITION p6635 VALUES LESS THAN (53088), +PARTITION p6636 VALUES LESS THAN (53096), +PARTITION p6637 VALUES LESS THAN (53104), +PARTITION p6638 VALUES LESS THAN (53112), +PARTITION p6639 VALUES LESS THAN (53120), +PARTITION p6640 VALUES LESS THAN (53128), +PARTITION p6641 VALUES LESS THAN (53136), +PARTITION p6642 VALUES LESS THAN (53144), +PARTITION p6643 VALUES LESS THAN (53152), +PARTITION p6644 VALUES LESS THAN (53160), +PARTITION p6645 VALUES LESS THAN (53168), +PARTITION p6646 VALUES LESS THAN (53176), +PARTITION p6647 VALUES LESS THAN (53184), +PARTITION p6648 VALUES LESS THAN (53192), +PARTITION p6649 VALUES LESS THAN (53200), +PARTITION p6650 VALUES LESS THAN (53208), +PARTITION p6651 VALUES LESS THAN (53216), +PARTITION p6652 VALUES LESS THAN (53224), +PARTITION p6653 VALUES LESS THAN (53232), +PARTITION p6654 VALUES LESS THAN (53240), +PARTITION p6655 VALUES LESS THAN (53248), +PARTITION p6656 VALUES LESS THAN (53256), +PARTITION p6657 VALUES LESS THAN (53264), +PARTITION p6658 VALUES LESS THAN (53272), +PARTITION p6659 VALUES LESS THAN (53280), +PARTITION p6660 VALUES LESS THAN (53288), +PARTITION p6661 VALUES LESS THAN (53296), +PARTITION p6662 VALUES LESS THAN (53304), +PARTITION p6663 VALUES LESS THAN (53312), +PARTITION p6664 VALUES LESS THAN (53320), +PARTITION p6665 VALUES LESS THAN (53328), +PARTITION p6666 VALUES LESS THAN (53336), +PARTITION p6667 VALUES LESS THAN (53344), +PARTITION p6668 VALUES LESS THAN (53352), +PARTITION p6669 VALUES LESS THAN (53360), +PARTITION p6670 VALUES LESS THAN (53368), +PARTITION p6671 VALUES LESS THAN (53376), +PARTITION p6672 VALUES LESS THAN (53384), +PARTITION p6673 VALUES LESS THAN (53392), +PARTITION p6674 VALUES LESS THAN (53400), +PARTITION p6675 VALUES LESS THAN (53408), +PARTITION p6676 VALUES LESS THAN (53416), +PARTITION p6677 VALUES LESS THAN (53424), +PARTITION p6678 VALUES LESS THAN (53432), +PARTITION p6679 VALUES LESS THAN (53440), +PARTITION p6680 VALUES LESS THAN (53448), +PARTITION p6681 VALUES LESS THAN (53456), +PARTITION p6682 VALUES LESS THAN (53464), +PARTITION p6683 VALUES LESS THAN (53472), +PARTITION p6684 VALUES LESS THAN (53480), +PARTITION p6685 VALUES LESS THAN (53488), +PARTITION p6686 VALUES LESS THAN (53496), +PARTITION p6687 VALUES LESS THAN (53504), +PARTITION p6688 VALUES LESS THAN (53512), +PARTITION p6689 VALUES LESS THAN (53520), +PARTITION p6690 VALUES LESS THAN (53528), +PARTITION p6691 VALUES LESS THAN (53536), +PARTITION p6692 VALUES LESS THAN (53544), +PARTITION p6693 VALUES LESS THAN (53552), +PARTITION p6694 VALUES LESS THAN (53560), +PARTITION p6695 VALUES LESS THAN (53568), +PARTITION p6696 VALUES LESS THAN (53576), +PARTITION p6697 VALUES LESS THAN (53584), +PARTITION p6698 VALUES LESS THAN (53592), +PARTITION p6699 VALUES LESS THAN (53600), +PARTITION p6700 VALUES LESS THAN (53608), +PARTITION p6701 VALUES LESS THAN (53616), +PARTITION p6702 VALUES LESS THAN (53624), +PARTITION p6703 VALUES LESS THAN (53632), +PARTITION p6704 VALUES LESS THAN (53640), +PARTITION p6705 VALUES LESS THAN (53648), +PARTITION p6706 VALUES LESS THAN (53656), +PARTITION p6707 VALUES LESS THAN (53664), +PARTITION p6708 VALUES LESS THAN (53672), +PARTITION p6709 VALUES LESS THAN (53680), +PARTITION p6710 VALUES LESS THAN (53688), +PARTITION p6711 VALUES LESS THAN (53696), +PARTITION p6712 VALUES LESS THAN (53704), +PARTITION p6713 VALUES LESS THAN (53712), +PARTITION p6714 VALUES LESS THAN (53720), +PARTITION p6715 VALUES LESS THAN (53728), +PARTITION p6716 VALUES LESS THAN (53736), +PARTITION p6717 VALUES LESS THAN (53744), +PARTITION p6718 VALUES LESS THAN (53752), +PARTITION p6719 VALUES LESS THAN (53760), +PARTITION p6720 VALUES LESS THAN (53768), +PARTITION p6721 VALUES LESS THAN (53776), +PARTITION p6722 VALUES LESS THAN (53784), +PARTITION p6723 VALUES LESS THAN (53792), +PARTITION p6724 VALUES LESS THAN (53800), +PARTITION p6725 VALUES LESS THAN (53808), +PARTITION p6726 VALUES LESS THAN (53816), +PARTITION p6727 VALUES LESS THAN (53824), +PARTITION p6728 VALUES LESS THAN (53832), +PARTITION p6729 VALUES LESS THAN (53840), +PARTITION p6730 VALUES LESS THAN (53848), +PARTITION p6731 VALUES LESS THAN (53856), +PARTITION p6732 VALUES LESS THAN (53864), +PARTITION p6733 VALUES LESS THAN (53872), +PARTITION p6734 VALUES LESS THAN (53880), +PARTITION p6735 VALUES LESS THAN (53888), +PARTITION p6736 VALUES LESS THAN (53896), +PARTITION p6737 VALUES LESS THAN (53904), +PARTITION p6738 VALUES LESS THAN (53912), +PARTITION p6739 VALUES LESS THAN (53920), +PARTITION p6740 VALUES LESS THAN (53928), +PARTITION p6741 VALUES LESS THAN (53936), +PARTITION p6742 VALUES LESS THAN (53944), +PARTITION p6743 VALUES LESS THAN (53952), +PARTITION p6744 VALUES LESS THAN (53960), +PARTITION p6745 VALUES LESS THAN (53968), +PARTITION p6746 VALUES LESS THAN (53976), +PARTITION p6747 VALUES LESS THAN (53984), +PARTITION p6748 VALUES LESS THAN (53992), +PARTITION p6749 VALUES LESS THAN (54000), +PARTITION p6750 VALUES LESS THAN (54008), +PARTITION p6751 VALUES LESS THAN (54016), +PARTITION p6752 VALUES LESS THAN (54024), +PARTITION p6753 VALUES LESS THAN (54032), +PARTITION p6754 VALUES LESS THAN (54040), +PARTITION p6755 VALUES LESS THAN (54048), +PARTITION p6756 VALUES LESS THAN (54056), +PARTITION p6757 VALUES LESS THAN (54064), +PARTITION p6758 VALUES LESS THAN (54072), +PARTITION p6759 VALUES LESS THAN (54080), +PARTITION p6760 VALUES LESS THAN (54088), +PARTITION p6761 VALUES LESS THAN (54096), +PARTITION p6762 VALUES LESS THAN (54104), +PARTITION p6763 VALUES LESS THAN (54112), +PARTITION p6764 VALUES LESS THAN (54120), +PARTITION p6765 VALUES LESS THAN (54128), +PARTITION p6766 VALUES LESS THAN (54136), +PARTITION p6767 VALUES LESS THAN (54144), +PARTITION p6768 VALUES LESS THAN (54152), +PARTITION p6769 VALUES LESS THAN (54160), +PARTITION p6770 VALUES LESS THAN (54168), +PARTITION p6771 VALUES LESS THAN (54176), +PARTITION p6772 VALUES LESS THAN (54184), +PARTITION p6773 VALUES LESS THAN (54192), +PARTITION p6774 VALUES LESS THAN (54200), +PARTITION p6775 VALUES LESS THAN (54208), +PARTITION p6776 VALUES LESS THAN (54216), +PARTITION p6777 VALUES LESS THAN (54224), +PARTITION p6778 VALUES LESS THAN (54232), +PARTITION p6779 VALUES LESS THAN (54240), +PARTITION p6780 VALUES LESS THAN (54248), +PARTITION p6781 VALUES LESS THAN (54256), +PARTITION p6782 VALUES LESS THAN (54264), +PARTITION p6783 VALUES LESS THAN (54272), +PARTITION p6784 VALUES LESS THAN (54280), +PARTITION p6785 VALUES LESS THAN (54288), +PARTITION p6786 VALUES LESS THAN (54296), +PARTITION p6787 VALUES LESS THAN (54304), +PARTITION p6788 VALUES LESS THAN (54312), +PARTITION p6789 VALUES LESS THAN (54320), +PARTITION p6790 VALUES LESS THAN (54328), +PARTITION p6791 VALUES LESS THAN (54336), +PARTITION p6792 VALUES LESS THAN (54344), +PARTITION p6793 VALUES LESS THAN (54352), +PARTITION p6794 VALUES LESS THAN (54360), +PARTITION p6795 VALUES LESS THAN (54368), +PARTITION p6796 VALUES LESS THAN (54376), +PARTITION p6797 VALUES LESS THAN (54384), +PARTITION p6798 VALUES LESS THAN (54392), +PARTITION p6799 VALUES LESS THAN (54400), +PARTITION p6800 VALUES LESS THAN (54408), +PARTITION p6801 VALUES LESS THAN (54416), +PARTITION p6802 VALUES LESS THAN (54424), +PARTITION p6803 VALUES LESS THAN (54432), +PARTITION p6804 VALUES LESS THAN (54440), +PARTITION p6805 VALUES LESS THAN (54448), +PARTITION p6806 VALUES LESS THAN (54456), +PARTITION p6807 VALUES LESS THAN (54464), +PARTITION p6808 VALUES LESS THAN (54472), +PARTITION p6809 VALUES LESS THAN (54480), +PARTITION p6810 VALUES LESS THAN (54488), +PARTITION p6811 VALUES LESS THAN (54496), +PARTITION p6812 VALUES LESS THAN (54504), +PARTITION p6813 VALUES LESS THAN (54512), +PARTITION p6814 VALUES LESS THAN (54520), +PARTITION p6815 VALUES LESS THAN (54528), +PARTITION p6816 VALUES LESS THAN (54536), +PARTITION p6817 VALUES LESS THAN (54544), +PARTITION p6818 VALUES LESS THAN (54552), +PARTITION p6819 VALUES LESS THAN (54560), +PARTITION p6820 VALUES LESS THAN (54568), +PARTITION p6821 VALUES LESS THAN (54576), +PARTITION p6822 VALUES LESS THAN (54584), +PARTITION p6823 VALUES LESS THAN (54592), +PARTITION p6824 VALUES LESS THAN (54600), +PARTITION p6825 VALUES LESS THAN (54608), +PARTITION p6826 VALUES LESS THAN (54616), +PARTITION p6827 VALUES LESS THAN (54624), +PARTITION p6828 VALUES LESS THAN (54632), +PARTITION p6829 VALUES LESS THAN (54640), +PARTITION p6830 VALUES LESS THAN (54648), +PARTITION p6831 VALUES LESS THAN (54656), +PARTITION p6832 VALUES LESS THAN (54664), +PARTITION p6833 VALUES LESS THAN (54672), +PARTITION p6834 VALUES LESS THAN (54680), +PARTITION p6835 VALUES LESS THAN (54688), +PARTITION p6836 VALUES LESS THAN (54696), +PARTITION p6837 VALUES LESS THAN (54704), +PARTITION p6838 VALUES LESS THAN (54712), +PARTITION p6839 VALUES LESS THAN (54720), +PARTITION p6840 VALUES LESS THAN (54728), +PARTITION p6841 VALUES LESS THAN (54736), +PARTITION p6842 VALUES LESS THAN (54744), +PARTITION p6843 VALUES LESS THAN (54752), +PARTITION p6844 VALUES LESS THAN (54760), +PARTITION p6845 VALUES LESS THAN (54768), +PARTITION p6846 VALUES LESS THAN (54776), +PARTITION p6847 VALUES LESS THAN (54784), +PARTITION p6848 VALUES LESS THAN (54792), +PARTITION p6849 VALUES LESS THAN (54800), +PARTITION p6850 VALUES LESS THAN (54808), +PARTITION p6851 VALUES LESS THAN (54816), +PARTITION p6852 VALUES LESS THAN (54824), +PARTITION p6853 VALUES LESS THAN (54832), +PARTITION p6854 VALUES LESS THAN (54840), +PARTITION p6855 VALUES LESS THAN (54848), +PARTITION p6856 VALUES LESS THAN (54856), +PARTITION p6857 VALUES LESS THAN (54864), +PARTITION p6858 VALUES LESS THAN (54872), +PARTITION p6859 VALUES LESS THAN (54880), +PARTITION p6860 VALUES LESS THAN (54888), +PARTITION p6861 VALUES LESS THAN (54896), +PARTITION p6862 VALUES LESS THAN (54904), +PARTITION p6863 VALUES LESS THAN (54912), +PARTITION p6864 VALUES LESS THAN (54920), +PARTITION p6865 VALUES LESS THAN (54928), +PARTITION p6866 VALUES LESS THAN (54936), +PARTITION p6867 VALUES LESS THAN (54944), +PARTITION p6868 VALUES LESS THAN (54952), +PARTITION p6869 VALUES LESS THAN (54960), +PARTITION p6870 VALUES LESS THAN (54968), +PARTITION p6871 VALUES LESS THAN (54976), +PARTITION p6872 VALUES LESS THAN (54984), +PARTITION p6873 VALUES LESS THAN (54992), +PARTITION p6874 VALUES LESS THAN (55000), +PARTITION p6875 VALUES LESS THAN (55008), +PARTITION p6876 VALUES LESS THAN (55016), +PARTITION p6877 VALUES LESS THAN (55024), +PARTITION p6878 VALUES LESS THAN (55032), +PARTITION p6879 VALUES LESS THAN (55040), +PARTITION p6880 VALUES LESS THAN (55048), +PARTITION p6881 VALUES LESS THAN (55056), +PARTITION p6882 VALUES LESS THAN (55064), +PARTITION p6883 VALUES LESS THAN (55072), +PARTITION p6884 VALUES LESS THAN (55080), +PARTITION p6885 VALUES LESS THAN (55088), +PARTITION p6886 VALUES LESS THAN (55096), +PARTITION p6887 VALUES LESS THAN (55104), +PARTITION p6888 VALUES LESS THAN (55112), +PARTITION p6889 VALUES LESS THAN (55120), +PARTITION p6890 VALUES LESS THAN (55128), +PARTITION p6891 VALUES LESS THAN (55136), +PARTITION p6892 VALUES LESS THAN (55144), +PARTITION p6893 VALUES LESS THAN (55152), +PARTITION p6894 VALUES LESS THAN (55160), +PARTITION p6895 VALUES LESS THAN (55168), +PARTITION p6896 VALUES LESS THAN (55176), +PARTITION p6897 VALUES LESS THAN (55184), +PARTITION p6898 VALUES LESS THAN (55192), +PARTITION p6899 VALUES LESS THAN (55200), +PARTITION p6900 VALUES LESS THAN (55208), +PARTITION p6901 VALUES LESS THAN (55216), +PARTITION p6902 VALUES LESS THAN (55224), +PARTITION p6903 VALUES LESS THAN (55232), +PARTITION p6904 VALUES LESS THAN (55240), +PARTITION p6905 VALUES LESS THAN (55248), +PARTITION p6906 VALUES LESS THAN (55256), +PARTITION p6907 VALUES LESS THAN (55264), +PARTITION p6908 VALUES LESS THAN (55272), +PARTITION p6909 VALUES LESS THAN (55280), +PARTITION p6910 VALUES LESS THAN (55288), +PARTITION p6911 VALUES LESS THAN (55296), +PARTITION p6912 VALUES LESS THAN (55304), +PARTITION p6913 VALUES LESS THAN (55312), +PARTITION p6914 VALUES LESS THAN (55320), +PARTITION p6915 VALUES LESS THAN (55328), +PARTITION p6916 VALUES LESS THAN (55336), +PARTITION p6917 VALUES LESS THAN (55344), +PARTITION p6918 VALUES LESS THAN (55352), +PARTITION p6919 VALUES LESS THAN (55360), +PARTITION p6920 VALUES LESS THAN (55368), +PARTITION p6921 VALUES LESS THAN (55376), +PARTITION p6922 VALUES LESS THAN (55384), +PARTITION p6923 VALUES LESS THAN (55392), +PARTITION p6924 VALUES LESS THAN (55400), +PARTITION p6925 VALUES LESS THAN (55408), +PARTITION p6926 VALUES LESS THAN (55416), +PARTITION p6927 VALUES LESS THAN (55424), +PARTITION p6928 VALUES LESS THAN (55432), +PARTITION p6929 VALUES LESS THAN (55440), +PARTITION p6930 VALUES LESS THAN (55448), +PARTITION p6931 VALUES LESS THAN (55456), +PARTITION p6932 VALUES LESS THAN (55464), +PARTITION p6933 VALUES LESS THAN (55472), +PARTITION p6934 VALUES LESS THAN (55480), +PARTITION p6935 VALUES LESS THAN (55488), +PARTITION p6936 VALUES LESS THAN (55496), +PARTITION p6937 VALUES LESS THAN (55504), +PARTITION p6938 VALUES LESS THAN (55512), +PARTITION p6939 VALUES LESS THAN (55520), +PARTITION p6940 VALUES LESS THAN (55528), +PARTITION p6941 VALUES LESS THAN (55536), +PARTITION p6942 VALUES LESS THAN (55544), +PARTITION p6943 VALUES LESS THAN (55552), +PARTITION p6944 VALUES LESS THAN (55560), +PARTITION p6945 VALUES LESS THAN (55568), +PARTITION p6946 VALUES LESS THAN (55576), +PARTITION p6947 VALUES LESS THAN (55584), +PARTITION p6948 VALUES LESS THAN (55592), +PARTITION p6949 VALUES LESS THAN (55600), +PARTITION p6950 VALUES LESS THAN (55608), +PARTITION p6951 VALUES LESS THAN (55616), +PARTITION p6952 VALUES LESS THAN (55624), +PARTITION p6953 VALUES LESS THAN (55632), +PARTITION p6954 VALUES LESS THAN (55640), +PARTITION p6955 VALUES LESS THAN (55648), +PARTITION p6956 VALUES LESS THAN (55656), +PARTITION p6957 VALUES LESS THAN (55664), +PARTITION p6958 VALUES LESS THAN (55672), +PARTITION p6959 VALUES LESS THAN (55680), +PARTITION p6960 VALUES LESS THAN (55688), +PARTITION p6961 VALUES LESS THAN (55696), +PARTITION p6962 VALUES LESS THAN (55704), +PARTITION p6963 VALUES LESS THAN (55712), +PARTITION p6964 VALUES LESS THAN (55720), +PARTITION p6965 VALUES LESS THAN (55728), +PARTITION p6966 VALUES LESS THAN (55736), +PARTITION p6967 VALUES LESS THAN (55744), +PARTITION p6968 VALUES LESS THAN (55752), +PARTITION p6969 VALUES LESS THAN (55760), +PARTITION p6970 VALUES LESS THAN (55768), +PARTITION p6971 VALUES LESS THAN (55776), +PARTITION p6972 VALUES LESS THAN (55784), +PARTITION p6973 VALUES LESS THAN (55792), +PARTITION p6974 VALUES LESS THAN (55800), +PARTITION p6975 VALUES LESS THAN (55808), +PARTITION p6976 VALUES LESS THAN (55816), +PARTITION p6977 VALUES LESS THAN (55824), +PARTITION p6978 VALUES LESS THAN (55832), +PARTITION p6979 VALUES LESS THAN (55840), +PARTITION p6980 VALUES LESS THAN (55848), +PARTITION p6981 VALUES LESS THAN (55856), +PARTITION p6982 VALUES LESS THAN (55864), +PARTITION p6983 VALUES LESS THAN (55872), +PARTITION p6984 VALUES LESS THAN (55880), +PARTITION p6985 VALUES LESS THAN (55888), +PARTITION p6986 VALUES LESS THAN (55896), +PARTITION p6987 VALUES LESS THAN (55904), +PARTITION p6988 VALUES LESS THAN (55912), +PARTITION p6989 VALUES LESS THAN (55920), +PARTITION p6990 VALUES LESS THAN (55928), +PARTITION p6991 VALUES LESS THAN (55936), +PARTITION p6992 VALUES LESS THAN (55944), +PARTITION p6993 VALUES LESS THAN (55952), +PARTITION p6994 VALUES LESS THAN (55960), +PARTITION p6995 VALUES LESS THAN (55968), +PARTITION p6996 VALUES LESS THAN (55976), +PARTITION p6997 VALUES LESS THAN (55984), +PARTITION p6998 VALUES LESS THAN (55992), +PARTITION p6999 VALUES LESS THAN (56000), +PARTITION p7000 VALUES LESS THAN (56008), +PARTITION p7001 VALUES LESS THAN (56016), +PARTITION p7002 VALUES LESS THAN (56024), +PARTITION p7003 VALUES LESS THAN (56032), +PARTITION p7004 VALUES LESS THAN (56040), +PARTITION p7005 VALUES LESS THAN (56048), +PARTITION p7006 VALUES LESS THAN (56056), +PARTITION p7007 VALUES LESS THAN (56064), +PARTITION p7008 VALUES LESS THAN (56072), +PARTITION p7009 VALUES LESS THAN (56080), +PARTITION p7010 VALUES LESS THAN (56088), +PARTITION p7011 VALUES LESS THAN (56096), +PARTITION p7012 VALUES LESS THAN (56104), +PARTITION p7013 VALUES LESS THAN (56112), +PARTITION p7014 VALUES LESS THAN (56120), +PARTITION p7015 VALUES LESS THAN (56128), +PARTITION p7016 VALUES LESS THAN (56136), +PARTITION p7017 VALUES LESS THAN (56144), +PARTITION p7018 VALUES LESS THAN (56152), +PARTITION p7019 VALUES LESS THAN (56160), +PARTITION p7020 VALUES LESS THAN (56168), +PARTITION p7021 VALUES LESS THAN (56176), +PARTITION p7022 VALUES LESS THAN (56184), +PARTITION p7023 VALUES LESS THAN (56192), +PARTITION p7024 VALUES LESS THAN (56200), +PARTITION p7025 VALUES LESS THAN (56208), +PARTITION p7026 VALUES LESS THAN (56216), +PARTITION p7027 VALUES LESS THAN (56224), +PARTITION p7028 VALUES LESS THAN (56232), +PARTITION p7029 VALUES LESS THAN (56240), +PARTITION p7030 VALUES LESS THAN (56248), +PARTITION p7031 VALUES LESS THAN (56256), +PARTITION p7032 VALUES LESS THAN (56264), +PARTITION p7033 VALUES LESS THAN (56272), +PARTITION p7034 VALUES LESS THAN (56280), +PARTITION p7035 VALUES LESS THAN (56288), +PARTITION p7036 VALUES LESS THAN (56296), +PARTITION p7037 VALUES LESS THAN (56304), +PARTITION p7038 VALUES LESS THAN (56312), +PARTITION p7039 VALUES LESS THAN (56320), +PARTITION p7040 VALUES LESS THAN (56328), +PARTITION p7041 VALUES LESS THAN (56336), +PARTITION p7042 VALUES LESS THAN (56344), +PARTITION p7043 VALUES LESS THAN (56352), +PARTITION p7044 VALUES LESS THAN (56360), +PARTITION p7045 VALUES LESS THAN (56368), +PARTITION p7046 VALUES LESS THAN (56376), +PARTITION p7047 VALUES LESS THAN (56384), +PARTITION p7048 VALUES LESS THAN (56392), +PARTITION p7049 VALUES LESS THAN (56400), +PARTITION p7050 VALUES LESS THAN (56408), +PARTITION p7051 VALUES LESS THAN (56416), +PARTITION p7052 VALUES LESS THAN (56424), +PARTITION p7053 VALUES LESS THAN (56432), +PARTITION p7054 VALUES LESS THAN (56440), +PARTITION p7055 VALUES LESS THAN (56448), +PARTITION p7056 VALUES LESS THAN (56456), +PARTITION p7057 VALUES LESS THAN (56464), +PARTITION p7058 VALUES LESS THAN (56472), +PARTITION p7059 VALUES LESS THAN (56480), +PARTITION p7060 VALUES LESS THAN (56488), +PARTITION p7061 VALUES LESS THAN (56496), +PARTITION p7062 VALUES LESS THAN (56504), +PARTITION p7063 VALUES LESS THAN (56512), +PARTITION p7064 VALUES LESS THAN (56520), +PARTITION p7065 VALUES LESS THAN (56528), +PARTITION p7066 VALUES LESS THAN (56536), +PARTITION p7067 VALUES LESS THAN (56544), +PARTITION p7068 VALUES LESS THAN (56552), +PARTITION p7069 VALUES LESS THAN (56560), +PARTITION p7070 VALUES LESS THAN (56568), +PARTITION p7071 VALUES LESS THAN (56576), +PARTITION p7072 VALUES LESS THAN (56584), +PARTITION p7073 VALUES LESS THAN (56592), +PARTITION p7074 VALUES LESS THAN (56600), +PARTITION p7075 VALUES LESS THAN (56608), +PARTITION p7076 VALUES LESS THAN (56616), +PARTITION p7077 VALUES LESS THAN (56624), +PARTITION p7078 VALUES LESS THAN (56632), +PARTITION p7079 VALUES LESS THAN (56640), +PARTITION p7080 VALUES LESS THAN (56648), +PARTITION p7081 VALUES LESS THAN (56656), +PARTITION p7082 VALUES LESS THAN (56664), +PARTITION p7083 VALUES LESS THAN (56672), +PARTITION p7084 VALUES LESS THAN (56680), +PARTITION p7085 VALUES LESS THAN (56688), +PARTITION p7086 VALUES LESS THAN (56696), +PARTITION p7087 VALUES LESS THAN (56704), +PARTITION p7088 VALUES LESS THAN (56712), +PARTITION p7089 VALUES LESS THAN (56720), +PARTITION p7090 VALUES LESS THAN (56728), +PARTITION p7091 VALUES LESS THAN (56736), +PARTITION p7092 VALUES LESS THAN (56744), +PARTITION p7093 VALUES LESS THAN (56752), +PARTITION p7094 VALUES LESS THAN (56760), +PARTITION p7095 VALUES LESS THAN (56768), +PARTITION p7096 VALUES LESS THAN (56776), +PARTITION p7097 VALUES LESS THAN (56784), +PARTITION p7098 VALUES LESS THAN (56792), +PARTITION p7099 VALUES LESS THAN (56800), +PARTITION p7100 VALUES LESS THAN (56808), +PARTITION p7101 VALUES LESS THAN (56816), +PARTITION p7102 VALUES LESS THAN (56824), +PARTITION p7103 VALUES LESS THAN (56832), +PARTITION p7104 VALUES LESS THAN (56840), +PARTITION p7105 VALUES LESS THAN (56848), +PARTITION p7106 VALUES LESS THAN (56856), +PARTITION p7107 VALUES LESS THAN (56864), +PARTITION p7108 VALUES LESS THAN (56872), +PARTITION p7109 VALUES LESS THAN (56880), +PARTITION p7110 VALUES LESS THAN (56888), +PARTITION p7111 VALUES LESS THAN (56896), +PARTITION p7112 VALUES LESS THAN (56904), +PARTITION p7113 VALUES LESS THAN (56912), +PARTITION p7114 VALUES LESS THAN (56920), +PARTITION p7115 VALUES LESS THAN (56928), +PARTITION p7116 VALUES LESS THAN (56936), +PARTITION p7117 VALUES LESS THAN (56944), +PARTITION p7118 VALUES LESS THAN (56952), +PARTITION p7119 VALUES LESS THAN (56960), +PARTITION p7120 VALUES LESS THAN (56968), +PARTITION p7121 VALUES LESS THAN (56976), +PARTITION p7122 VALUES LESS THAN (56984), +PARTITION p7123 VALUES LESS THAN (56992), +PARTITION p7124 VALUES LESS THAN (57000), +PARTITION p7125 VALUES LESS THAN (57008), +PARTITION p7126 VALUES LESS THAN (57016), +PARTITION p7127 VALUES LESS THAN (57024), +PARTITION p7128 VALUES LESS THAN (57032), +PARTITION p7129 VALUES LESS THAN (57040), +PARTITION p7130 VALUES LESS THAN (57048), +PARTITION p7131 VALUES LESS THAN (57056), +PARTITION p7132 VALUES LESS THAN (57064), +PARTITION p7133 VALUES LESS THAN (57072), +PARTITION p7134 VALUES LESS THAN (57080), +PARTITION p7135 VALUES LESS THAN (57088), +PARTITION p7136 VALUES LESS THAN (57096), +PARTITION p7137 VALUES LESS THAN (57104), +PARTITION p7138 VALUES LESS THAN (57112), +PARTITION p7139 VALUES LESS THAN (57120), +PARTITION p7140 VALUES LESS THAN (57128), +PARTITION p7141 VALUES LESS THAN (57136), +PARTITION p7142 VALUES LESS THAN (57144), +PARTITION p7143 VALUES LESS THAN (57152), +PARTITION p7144 VALUES LESS THAN (57160), +PARTITION p7145 VALUES LESS THAN (57168), +PARTITION p7146 VALUES LESS THAN (57176), +PARTITION p7147 VALUES LESS THAN (57184), +PARTITION p7148 VALUES LESS THAN (57192), +PARTITION p7149 VALUES LESS THAN (57200), +PARTITION p7150 VALUES LESS THAN (57208), +PARTITION p7151 VALUES LESS THAN (57216), +PARTITION p7152 VALUES LESS THAN (57224), +PARTITION p7153 VALUES LESS THAN (57232), +PARTITION p7154 VALUES LESS THAN (57240), +PARTITION p7155 VALUES LESS THAN (57248), +PARTITION p7156 VALUES LESS THAN (57256), +PARTITION p7157 VALUES LESS THAN (57264), +PARTITION p7158 VALUES LESS THAN (57272), +PARTITION p7159 VALUES LESS THAN (57280), +PARTITION p7160 VALUES LESS THAN (57288), +PARTITION p7161 VALUES LESS THAN (57296), +PARTITION p7162 VALUES LESS THAN (57304), +PARTITION p7163 VALUES LESS THAN (57312), +PARTITION p7164 VALUES LESS THAN (57320), +PARTITION p7165 VALUES LESS THAN (57328), +PARTITION p7166 VALUES LESS THAN (57336), +PARTITION p7167 VALUES LESS THAN (57344), +PARTITION p7168 VALUES LESS THAN (57352), +PARTITION p7169 VALUES LESS THAN (57360), +PARTITION p7170 VALUES LESS THAN (57368), +PARTITION p7171 VALUES LESS THAN (57376), +PARTITION p7172 VALUES LESS THAN (57384), +PARTITION p7173 VALUES LESS THAN (57392), +PARTITION p7174 VALUES LESS THAN (57400), +PARTITION p7175 VALUES LESS THAN (57408), +PARTITION p7176 VALUES LESS THAN (57416), +PARTITION p7177 VALUES LESS THAN (57424), +PARTITION p7178 VALUES LESS THAN (57432), +PARTITION p7179 VALUES LESS THAN (57440), +PARTITION p7180 VALUES LESS THAN (57448), +PARTITION p7181 VALUES LESS THAN (57456), +PARTITION p7182 VALUES LESS THAN (57464), +PARTITION p7183 VALUES LESS THAN (57472), +PARTITION p7184 VALUES LESS THAN (57480), +PARTITION p7185 VALUES LESS THAN (57488), +PARTITION p7186 VALUES LESS THAN (57496), +PARTITION p7187 VALUES LESS THAN (57504), +PARTITION p7188 VALUES LESS THAN (57512), +PARTITION p7189 VALUES LESS THAN (57520), +PARTITION p7190 VALUES LESS THAN (57528), +PARTITION p7191 VALUES LESS THAN (57536), +PARTITION p7192 VALUES LESS THAN (57544), +PARTITION p7193 VALUES LESS THAN (57552), +PARTITION p7194 VALUES LESS THAN (57560), +PARTITION p7195 VALUES LESS THAN (57568), +PARTITION p7196 VALUES LESS THAN (57576), +PARTITION p7197 VALUES LESS THAN (57584), +PARTITION p7198 VALUES LESS THAN (57592), +PARTITION p7199 VALUES LESS THAN (57600), +PARTITION p7200 VALUES LESS THAN (57608), +PARTITION p7201 VALUES LESS THAN (57616), +PARTITION p7202 VALUES LESS THAN (57624), +PARTITION p7203 VALUES LESS THAN (57632), +PARTITION p7204 VALUES LESS THAN (57640), +PARTITION p7205 VALUES LESS THAN (57648), +PARTITION p7206 VALUES LESS THAN (57656), +PARTITION p7207 VALUES LESS THAN (57664), +PARTITION p7208 VALUES LESS THAN (57672), +PARTITION p7209 VALUES LESS THAN (57680), +PARTITION p7210 VALUES LESS THAN (57688), +PARTITION p7211 VALUES LESS THAN (57696), +PARTITION p7212 VALUES LESS THAN (57704), +PARTITION p7213 VALUES LESS THAN (57712), +PARTITION p7214 VALUES LESS THAN (57720), +PARTITION p7215 VALUES LESS THAN (57728), +PARTITION p7216 VALUES LESS THAN (57736), +PARTITION p7217 VALUES LESS THAN (57744), +PARTITION p7218 VALUES LESS THAN (57752), +PARTITION p7219 VALUES LESS THAN (57760), +PARTITION p7220 VALUES LESS THAN (57768), +PARTITION p7221 VALUES LESS THAN (57776), +PARTITION p7222 VALUES LESS THAN (57784), +PARTITION p7223 VALUES LESS THAN (57792), +PARTITION p7224 VALUES LESS THAN (57800), +PARTITION p7225 VALUES LESS THAN (57808), +PARTITION p7226 VALUES LESS THAN (57816), +PARTITION p7227 VALUES LESS THAN (57824), +PARTITION p7228 VALUES LESS THAN (57832), +PARTITION p7229 VALUES LESS THAN (57840), +PARTITION p7230 VALUES LESS THAN (57848), +PARTITION p7231 VALUES LESS THAN (57856), +PARTITION p7232 VALUES LESS THAN (57864), +PARTITION p7233 VALUES LESS THAN (57872), +PARTITION p7234 VALUES LESS THAN (57880), +PARTITION p7235 VALUES LESS THAN (57888), +PARTITION p7236 VALUES LESS THAN (57896), +PARTITION p7237 VALUES LESS THAN (57904), +PARTITION p7238 VALUES LESS THAN (57912), +PARTITION p7239 VALUES LESS THAN (57920), +PARTITION p7240 VALUES LESS THAN (57928), +PARTITION p7241 VALUES LESS THAN (57936), +PARTITION p7242 VALUES LESS THAN (57944), +PARTITION p7243 VALUES LESS THAN (57952), +PARTITION p7244 VALUES LESS THAN (57960), +PARTITION p7245 VALUES LESS THAN (57968), +PARTITION p7246 VALUES LESS THAN (57976), +PARTITION p7247 VALUES LESS THAN (57984), +PARTITION p7248 VALUES LESS THAN (57992), +PARTITION p7249 VALUES LESS THAN (58000), +PARTITION p7250 VALUES LESS THAN (58008), +PARTITION p7251 VALUES LESS THAN (58016), +PARTITION p7252 VALUES LESS THAN (58024), +PARTITION p7253 VALUES LESS THAN (58032), +PARTITION p7254 VALUES LESS THAN (58040), +PARTITION p7255 VALUES LESS THAN (58048), +PARTITION p7256 VALUES LESS THAN (58056), +PARTITION p7257 VALUES LESS THAN (58064), +PARTITION p7258 VALUES LESS THAN (58072), +PARTITION p7259 VALUES LESS THAN (58080), +PARTITION p7260 VALUES LESS THAN (58088), +PARTITION p7261 VALUES LESS THAN (58096), +PARTITION p7262 VALUES LESS THAN (58104), +PARTITION p7263 VALUES LESS THAN (58112), +PARTITION p7264 VALUES LESS THAN (58120), +PARTITION p7265 VALUES LESS THAN (58128), +PARTITION p7266 VALUES LESS THAN (58136), +PARTITION p7267 VALUES LESS THAN (58144), +PARTITION p7268 VALUES LESS THAN (58152), +PARTITION p7269 VALUES LESS THAN (58160), +PARTITION p7270 VALUES LESS THAN (58168), +PARTITION p7271 VALUES LESS THAN (58176), +PARTITION p7272 VALUES LESS THAN (58184), +PARTITION p7273 VALUES LESS THAN (58192), +PARTITION p7274 VALUES LESS THAN (58200), +PARTITION p7275 VALUES LESS THAN (58208), +PARTITION p7276 VALUES LESS THAN (58216), +PARTITION p7277 VALUES LESS THAN (58224), +PARTITION p7278 VALUES LESS THAN (58232), +PARTITION p7279 VALUES LESS THAN (58240), +PARTITION p7280 VALUES LESS THAN (58248), +PARTITION p7281 VALUES LESS THAN (58256), +PARTITION p7282 VALUES LESS THAN (58264), +PARTITION p7283 VALUES LESS THAN (58272), +PARTITION p7284 VALUES LESS THAN (58280), +PARTITION p7285 VALUES LESS THAN (58288), +PARTITION p7286 VALUES LESS THAN (58296), +PARTITION p7287 VALUES LESS THAN (58304), +PARTITION p7288 VALUES LESS THAN (58312), +PARTITION p7289 VALUES LESS THAN (58320), +PARTITION p7290 VALUES LESS THAN (58328), +PARTITION p7291 VALUES LESS THAN (58336), +PARTITION p7292 VALUES LESS THAN (58344), +PARTITION p7293 VALUES LESS THAN (58352), +PARTITION p7294 VALUES LESS THAN (58360), +PARTITION p7295 VALUES LESS THAN (58368), +PARTITION p7296 VALUES LESS THAN (58376), +PARTITION p7297 VALUES LESS THAN (58384), +PARTITION p7298 VALUES LESS THAN (58392), +PARTITION p7299 VALUES LESS THAN (58400), +PARTITION p7300 VALUES LESS THAN (58408), +PARTITION p7301 VALUES LESS THAN (58416), +PARTITION p7302 VALUES LESS THAN (58424), +PARTITION p7303 VALUES LESS THAN (58432), +PARTITION p7304 VALUES LESS THAN (58440), +PARTITION p7305 VALUES LESS THAN (58448), +PARTITION p7306 VALUES LESS THAN (58456), +PARTITION p7307 VALUES LESS THAN (58464), +PARTITION p7308 VALUES LESS THAN (58472), +PARTITION p7309 VALUES LESS THAN (58480), +PARTITION p7310 VALUES LESS THAN (58488), +PARTITION p7311 VALUES LESS THAN (58496), +PARTITION p7312 VALUES LESS THAN (58504), +PARTITION p7313 VALUES LESS THAN (58512), +PARTITION p7314 VALUES LESS THAN (58520), +PARTITION p7315 VALUES LESS THAN (58528), +PARTITION p7316 VALUES LESS THAN (58536), +PARTITION p7317 VALUES LESS THAN (58544), +PARTITION p7318 VALUES LESS THAN (58552), +PARTITION p7319 VALUES LESS THAN (58560), +PARTITION p7320 VALUES LESS THAN (58568), +PARTITION p7321 VALUES LESS THAN (58576), +PARTITION p7322 VALUES LESS THAN (58584), +PARTITION p7323 VALUES LESS THAN (58592), +PARTITION p7324 VALUES LESS THAN (58600), +PARTITION p7325 VALUES LESS THAN (58608), +PARTITION p7326 VALUES LESS THAN (58616), +PARTITION p7327 VALUES LESS THAN (58624), +PARTITION p7328 VALUES LESS THAN (58632), +PARTITION p7329 VALUES LESS THAN (58640), +PARTITION p7330 VALUES LESS THAN (58648), +PARTITION p7331 VALUES LESS THAN (58656), +PARTITION p7332 VALUES LESS THAN (58664), +PARTITION p7333 VALUES LESS THAN (58672), +PARTITION p7334 VALUES LESS THAN (58680), +PARTITION p7335 VALUES LESS THAN (58688), +PARTITION p7336 VALUES LESS THAN (58696), +PARTITION p7337 VALUES LESS THAN (58704), +PARTITION p7338 VALUES LESS THAN (58712), +PARTITION p7339 VALUES LESS THAN (58720), +PARTITION p7340 VALUES LESS THAN (58728), +PARTITION p7341 VALUES LESS THAN (58736), +PARTITION p7342 VALUES LESS THAN (58744), +PARTITION p7343 VALUES LESS THAN (58752), +PARTITION p7344 VALUES LESS THAN (58760), +PARTITION p7345 VALUES LESS THAN (58768), +PARTITION p7346 VALUES LESS THAN (58776), +PARTITION p7347 VALUES LESS THAN (58784), +PARTITION p7348 VALUES LESS THAN (58792), +PARTITION p7349 VALUES LESS THAN (58800), +PARTITION p7350 VALUES LESS THAN (58808), +PARTITION p7351 VALUES LESS THAN (58816), +PARTITION p7352 VALUES LESS THAN (58824), +PARTITION p7353 VALUES LESS THAN (58832), +PARTITION p7354 VALUES LESS THAN (58840), +PARTITION p7355 VALUES LESS THAN (58848), +PARTITION p7356 VALUES LESS THAN (58856), +PARTITION p7357 VALUES LESS THAN (58864), +PARTITION p7358 VALUES LESS THAN (58872), +PARTITION p7359 VALUES LESS THAN (58880), +PARTITION p7360 VALUES LESS THAN (58888), +PARTITION p7361 VALUES LESS THAN (58896), +PARTITION p7362 VALUES LESS THAN (58904), +PARTITION p7363 VALUES LESS THAN (58912), +PARTITION p7364 VALUES LESS THAN (58920), +PARTITION p7365 VALUES LESS THAN (58928), +PARTITION p7366 VALUES LESS THAN (58936), +PARTITION p7367 VALUES LESS THAN (58944), +PARTITION p7368 VALUES LESS THAN (58952), +PARTITION p7369 VALUES LESS THAN (58960), +PARTITION p7370 VALUES LESS THAN (58968), +PARTITION p7371 VALUES LESS THAN (58976), +PARTITION p7372 VALUES LESS THAN (58984), +PARTITION p7373 VALUES LESS THAN (58992), +PARTITION p7374 VALUES LESS THAN (59000), +PARTITION p7375 VALUES LESS THAN (59008), +PARTITION p7376 VALUES LESS THAN (59016), +PARTITION p7377 VALUES LESS THAN (59024), +PARTITION p7378 VALUES LESS THAN (59032), +PARTITION p7379 VALUES LESS THAN (59040), +PARTITION p7380 VALUES LESS THAN (59048), +PARTITION p7381 VALUES LESS THAN (59056), +PARTITION p7382 VALUES LESS THAN (59064), +PARTITION p7383 VALUES LESS THAN (59072), +PARTITION p7384 VALUES LESS THAN (59080), +PARTITION p7385 VALUES LESS THAN (59088), +PARTITION p7386 VALUES LESS THAN (59096), +PARTITION p7387 VALUES LESS THAN (59104), +PARTITION p7388 VALUES LESS THAN (59112), +PARTITION p7389 VALUES LESS THAN (59120), +PARTITION p7390 VALUES LESS THAN (59128), +PARTITION p7391 VALUES LESS THAN (59136), +PARTITION p7392 VALUES LESS THAN (59144), +PARTITION p7393 VALUES LESS THAN (59152), +PARTITION p7394 VALUES LESS THAN (59160), +PARTITION p7395 VALUES LESS THAN (59168), +PARTITION p7396 VALUES LESS THAN (59176), +PARTITION p7397 VALUES LESS THAN (59184), +PARTITION p7398 VALUES LESS THAN (59192), +PARTITION p7399 VALUES LESS THAN (59200), +PARTITION p7400 VALUES LESS THAN (59208), +PARTITION p7401 VALUES LESS THAN (59216), +PARTITION p7402 VALUES LESS THAN (59224), +PARTITION p7403 VALUES LESS THAN (59232), +PARTITION p7404 VALUES LESS THAN (59240), +PARTITION p7405 VALUES LESS THAN (59248), +PARTITION p7406 VALUES LESS THAN (59256), +PARTITION p7407 VALUES LESS THAN (59264), +PARTITION p7408 VALUES LESS THAN (59272), +PARTITION p7409 VALUES LESS THAN (59280), +PARTITION p7410 VALUES LESS THAN (59288), +PARTITION p7411 VALUES LESS THAN (59296), +PARTITION p7412 VALUES LESS THAN (59304), +PARTITION p7413 VALUES LESS THAN (59312), +PARTITION p7414 VALUES LESS THAN (59320), +PARTITION p7415 VALUES LESS THAN (59328), +PARTITION p7416 VALUES LESS THAN (59336), +PARTITION p7417 VALUES LESS THAN (59344), +PARTITION p7418 VALUES LESS THAN (59352), +PARTITION p7419 VALUES LESS THAN (59360), +PARTITION p7420 VALUES LESS THAN (59368), +PARTITION p7421 VALUES LESS THAN (59376), +PARTITION p7422 VALUES LESS THAN (59384), +PARTITION p7423 VALUES LESS THAN (59392), +PARTITION p7424 VALUES LESS THAN (59400), +PARTITION p7425 VALUES LESS THAN (59408), +PARTITION p7426 VALUES LESS THAN (59416), +PARTITION p7427 VALUES LESS THAN (59424), +PARTITION p7428 VALUES LESS THAN (59432), +PARTITION p7429 VALUES LESS THAN (59440), +PARTITION p7430 VALUES LESS THAN (59448), +PARTITION p7431 VALUES LESS THAN (59456), +PARTITION p7432 VALUES LESS THAN (59464), +PARTITION p7433 VALUES LESS THAN (59472), +PARTITION p7434 VALUES LESS THAN (59480), +PARTITION p7435 VALUES LESS THAN (59488), +PARTITION p7436 VALUES LESS THAN (59496), +PARTITION p7437 VALUES LESS THAN (59504), +PARTITION p7438 VALUES LESS THAN (59512), +PARTITION p7439 VALUES LESS THAN (59520), +PARTITION p7440 VALUES LESS THAN (59528), +PARTITION p7441 VALUES LESS THAN (59536), +PARTITION p7442 VALUES LESS THAN (59544), +PARTITION p7443 VALUES LESS THAN (59552), +PARTITION p7444 VALUES LESS THAN (59560), +PARTITION p7445 VALUES LESS THAN (59568), +PARTITION p7446 VALUES LESS THAN (59576), +PARTITION p7447 VALUES LESS THAN (59584), +PARTITION p7448 VALUES LESS THAN (59592), +PARTITION p7449 VALUES LESS THAN (59600), +PARTITION p7450 VALUES LESS THAN (59608), +PARTITION p7451 VALUES LESS THAN (59616), +PARTITION p7452 VALUES LESS THAN (59624), +PARTITION p7453 VALUES LESS THAN (59632), +PARTITION p7454 VALUES LESS THAN (59640), +PARTITION p7455 VALUES LESS THAN (59648), +PARTITION p7456 VALUES LESS THAN (59656), +PARTITION p7457 VALUES LESS THAN (59664), +PARTITION p7458 VALUES LESS THAN (59672), +PARTITION p7459 VALUES LESS THAN (59680), +PARTITION p7460 VALUES LESS THAN (59688), +PARTITION p7461 VALUES LESS THAN (59696), +PARTITION p7462 VALUES LESS THAN (59704), +PARTITION p7463 VALUES LESS THAN (59712), +PARTITION p7464 VALUES LESS THAN (59720), +PARTITION p7465 VALUES LESS THAN (59728), +PARTITION p7466 VALUES LESS THAN (59736), +PARTITION p7467 VALUES LESS THAN (59744), +PARTITION p7468 VALUES LESS THAN (59752), +PARTITION p7469 VALUES LESS THAN (59760), +PARTITION p7470 VALUES LESS THAN (59768), +PARTITION p7471 VALUES LESS THAN (59776), +PARTITION p7472 VALUES LESS THAN (59784), +PARTITION p7473 VALUES LESS THAN (59792), +PARTITION p7474 VALUES LESS THAN (59800), +PARTITION p7475 VALUES LESS THAN (59808), +PARTITION p7476 VALUES LESS THAN (59816), +PARTITION p7477 VALUES LESS THAN (59824), +PARTITION p7478 VALUES LESS THAN (59832), +PARTITION p7479 VALUES LESS THAN (59840), +PARTITION p7480 VALUES LESS THAN (59848), +PARTITION p7481 VALUES LESS THAN (59856), +PARTITION p7482 VALUES LESS THAN (59864), +PARTITION p7483 VALUES LESS THAN (59872), +PARTITION p7484 VALUES LESS THAN (59880), +PARTITION p7485 VALUES LESS THAN (59888), +PARTITION p7486 VALUES LESS THAN (59896), +PARTITION p7487 VALUES LESS THAN (59904), +PARTITION p7488 VALUES LESS THAN (59912), +PARTITION p7489 VALUES LESS THAN (59920), +PARTITION p7490 VALUES LESS THAN (59928), +PARTITION p7491 VALUES LESS THAN (59936), +PARTITION p7492 VALUES LESS THAN (59944), +PARTITION p7493 VALUES LESS THAN (59952), +PARTITION p7494 VALUES LESS THAN (59960), +PARTITION p7495 VALUES LESS THAN (59968), +PARTITION p7496 VALUES LESS THAN (59976), +PARTITION p7497 VALUES LESS THAN (59984), +PARTITION p7498 VALUES LESS THAN (59992), +PARTITION p7499 VALUES LESS THAN (60000), +PARTITION p7500 VALUES LESS THAN (60008), +PARTITION p7501 VALUES LESS THAN (60016), +PARTITION p7502 VALUES LESS THAN (60024), +PARTITION p7503 VALUES LESS THAN (60032), +PARTITION p7504 VALUES LESS THAN (60040), +PARTITION p7505 VALUES LESS THAN (60048), +PARTITION p7506 VALUES LESS THAN (60056), +PARTITION p7507 VALUES LESS THAN (60064), +PARTITION p7508 VALUES LESS THAN (60072), +PARTITION p7509 VALUES LESS THAN (60080), +PARTITION p7510 VALUES LESS THAN (60088), +PARTITION p7511 VALUES LESS THAN (60096), +PARTITION p7512 VALUES LESS THAN (60104), +PARTITION p7513 VALUES LESS THAN (60112), +PARTITION p7514 VALUES LESS THAN (60120), +PARTITION p7515 VALUES LESS THAN (60128), +PARTITION p7516 VALUES LESS THAN (60136), +PARTITION p7517 VALUES LESS THAN (60144), +PARTITION p7518 VALUES LESS THAN (60152), +PARTITION p7519 VALUES LESS THAN (60160), +PARTITION p7520 VALUES LESS THAN (60168), +PARTITION p7521 VALUES LESS THAN (60176), +PARTITION p7522 VALUES LESS THAN (60184), +PARTITION p7523 VALUES LESS THAN (60192), +PARTITION p7524 VALUES LESS THAN (60200), +PARTITION p7525 VALUES LESS THAN (60208), +PARTITION p7526 VALUES LESS THAN (60216), +PARTITION p7527 VALUES LESS THAN (60224), +PARTITION p7528 VALUES LESS THAN (60232), +PARTITION p7529 VALUES LESS THAN (60240), +PARTITION p7530 VALUES LESS THAN (60248), +PARTITION p7531 VALUES LESS THAN (60256), +PARTITION p7532 VALUES LESS THAN (60264), +PARTITION p7533 VALUES LESS THAN (60272), +PARTITION p7534 VALUES LESS THAN (60280), +PARTITION p7535 VALUES LESS THAN (60288), +PARTITION p7536 VALUES LESS THAN (60296), +PARTITION p7537 VALUES LESS THAN (60304), +PARTITION p7538 VALUES LESS THAN (60312), +PARTITION p7539 VALUES LESS THAN (60320), +PARTITION p7540 VALUES LESS THAN (60328), +PARTITION p7541 VALUES LESS THAN (60336), +PARTITION p7542 VALUES LESS THAN (60344), +PARTITION p7543 VALUES LESS THAN (60352), +PARTITION p7544 VALUES LESS THAN (60360), +PARTITION p7545 VALUES LESS THAN (60368), +PARTITION p7546 VALUES LESS THAN (60376), +PARTITION p7547 VALUES LESS THAN (60384), +PARTITION p7548 VALUES LESS THAN (60392), +PARTITION p7549 VALUES LESS THAN (60400), +PARTITION p7550 VALUES LESS THAN (60408), +PARTITION p7551 VALUES LESS THAN (60416), +PARTITION p7552 VALUES LESS THAN (60424), +PARTITION p7553 VALUES LESS THAN (60432), +PARTITION p7554 VALUES LESS THAN (60440), +PARTITION p7555 VALUES LESS THAN (60448), +PARTITION p7556 VALUES LESS THAN (60456), +PARTITION p7557 VALUES LESS THAN (60464), +PARTITION p7558 VALUES LESS THAN (60472), +PARTITION p7559 VALUES LESS THAN (60480), +PARTITION p7560 VALUES LESS THAN (60488), +PARTITION p7561 VALUES LESS THAN (60496), +PARTITION p7562 VALUES LESS THAN (60504), +PARTITION p7563 VALUES LESS THAN (60512), +PARTITION p7564 VALUES LESS THAN (60520), +PARTITION p7565 VALUES LESS THAN (60528), +PARTITION p7566 VALUES LESS THAN (60536), +PARTITION p7567 VALUES LESS THAN (60544), +PARTITION p7568 VALUES LESS THAN (60552), +PARTITION p7569 VALUES LESS THAN (60560), +PARTITION p7570 VALUES LESS THAN (60568), +PARTITION p7571 VALUES LESS THAN (60576), +PARTITION p7572 VALUES LESS THAN (60584), +PARTITION p7573 VALUES LESS THAN (60592), +PARTITION p7574 VALUES LESS THAN (60600), +PARTITION p7575 VALUES LESS THAN (60608), +PARTITION p7576 VALUES LESS THAN (60616), +PARTITION p7577 VALUES LESS THAN (60624), +PARTITION p7578 VALUES LESS THAN (60632), +PARTITION p7579 VALUES LESS THAN (60640), +PARTITION p7580 VALUES LESS THAN (60648), +PARTITION p7581 VALUES LESS THAN (60656), +PARTITION p7582 VALUES LESS THAN (60664), +PARTITION p7583 VALUES LESS THAN (60672), +PARTITION p7584 VALUES LESS THAN (60680), +PARTITION p7585 VALUES LESS THAN (60688), +PARTITION p7586 VALUES LESS THAN (60696), +PARTITION p7587 VALUES LESS THAN (60704), +PARTITION p7588 VALUES LESS THAN (60712), +PARTITION p7589 VALUES LESS THAN (60720), +PARTITION p7590 VALUES LESS THAN (60728), +PARTITION p7591 VALUES LESS THAN (60736), +PARTITION p7592 VALUES LESS THAN (60744), +PARTITION p7593 VALUES LESS THAN (60752), +PARTITION p7594 VALUES LESS THAN (60760), +PARTITION p7595 VALUES LESS THAN (60768), +PARTITION p7596 VALUES LESS THAN (60776), +PARTITION p7597 VALUES LESS THAN (60784), +PARTITION p7598 VALUES LESS THAN (60792), +PARTITION p7599 VALUES LESS THAN (60800), +PARTITION p7600 VALUES LESS THAN (60808), +PARTITION p7601 VALUES LESS THAN (60816), +PARTITION p7602 VALUES LESS THAN (60824), +PARTITION p7603 VALUES LESS THAN (60832), +PARTITION p7604 VALUES LESS THAN (60840), +PARTITION p7605 VALUES LESS THAN (60848), +PARTITION p7606 VALUES LESS THAN (60856), +PARTITION p7607 VALUES LESS THAN (60864), +PARTITION p7608 VALUES LESS THAN (60872), +PARTITION p7609 VALUES LESS THAN (60880), +PARTITION p7610 VALUES LESS THAN (60888), +PARTITION p7611 VALUES LESS THAN (60896), +PARTITION p7612 VALUES LESS THAN (60904), +PARTITION p7613 VALUES LESS THAN (60912), +PARTITION p7614 VALUES LESS THAN (60920), +PARTITION p7615 VALUES LESS THAN (60928), +PARTITION p7616 VALUES LESS THAN (60936), +PARTITION p7617 VALUES LESS THAN (60944), +PARTITION p7618 VALUES LESS THAN (60952), +PARTITION p7619 VALUES LESS THAN (60960), +PARTITION p7620 VALUES LESS THAN (60968), +PARTITION p7621 VALUES LESS THAN (60976), +PARTITION p7622 VALUES LESS THAN (60984), +PARTITION p7623 VALUES LESS THAN (60992), +PARTITION p7624 VALUES LESS THAN (61000), +PARTITION p7625 VALUES LESS THAN (61008), +PARTITION p7626 VALUES LESS THAN (61016), +PARTITION p7627 VALUES LESS THAN (61024), +PARTITION p7628 VALUES LESS THAN (61032), +PARTITION p7629 VALUES LESS THAN (61040), +PARTITION p7630 VALUES LESS THAN (61048), +PARTITION p7631 VALUES LESS THAN (61056), +PARTITION p7632 VALUES LESS THAN (61064), +PARTITION p7633 VALUES LESS THAN (61072), +PARTITION p7634 VALUES LESS THAN (61080), +PARTITION p7635 VALUES LESS THAN (61088), +PARTITION p7636 VALUES LESS THAN (61096), +PARTITION p7637 VALUES LESS THAN (61104), +PARTITION p7638 VALUES LESS THAN (61112), +PARTITION p7639 VALUES LESS THAN (61120), +PARTITION p7640 VALUES LESS THAN (61128), +PARTITION p7641 VALUES LESS THAN (61136), +PARTITION p7642 VALUES LESS THAN (61144), +PARTITION p7643 VALUES LESS THAN (61152), +PARTITION p7644 VALUES LESS THAN (61160), +PARTITION p7645 VALUES LESS THAN (61168), +PARTITION p7646 VALUES LESS THAN (61176), +PARTITION p7647 VALUES LESS THAN (61184), +PARTITION p7648 VALUES LESS THAN (61192), +PARTITION p7649 VALUES LESS THAN (61200), +PARTITION p7650 VALUES LESS THAN (61208), +PARTITION p7651 VALUES LESS THAN (61216), +PARTITION p7652 VALUES LESS THAN (61224), +PARTITION p7653 VALUES LESS THAN (61232), +PARTITION p7654 VALUES LESS THAN (61240), +PARTITION p7655 VALUES LESS THAN (61248), +PARTITION p7656 VALUES LESS THAN (61256), +PARTITION p7657 VALUES LESS THAN (61264), +PARTITION p7658 VALUES LESS THAN (61272), +PARTITION p7659 VALUES LESS THAN (61280), +PARTITION p7660 VALUES LESS THAN (61288), +PARTITION p7661 VALUES LESS THAN (61296), +PARTITION p7662 VALUES LESS THAN (61304), +PARTITION p7663 VALUES LESS THAN (61312), +PARTITION p7664 VALUES LESS THAN (61320), +PARTITION p7665 VALUES LESS THAN (61328), +PARTITION p7666 VALUES LESS THAN (61336), +PARTITION p7667 VALUES LESS THAN (61344), +PARTITION p7668 VALUES LESS THAN (61352), +PARTITION p7669 VALUES LESS THAN (61360), +PARTITION p7670 VALUES LESS THAN (61368), +PARTITION p7671 VALUES LESS THAN (61376), +PARTITION p7672 VALUES LESS THAN (61384), +PARTITION p7673 VALUES LESS THAN (61392), +PARTITION p7674 VALUES LESS THAN (61400), +PARTITION p7675 VALUES LESS THAN (61408), +PARTITION p7676 VALUES LESS THAN (61416), +PARTITION p7677 VALUES LESS THAN (61424), +PARTITION p7678 VALUES LESS THAN (61432), +PARTITION p7679 VALUES LESS THAN (61440), +PARTITION p7680 VALUES LESS THAN (61448), +PARTITION p7681 VALUES LESS THAN (61456), +PARTITION p7682 VALUES LESS THAN (61464), +PARTITION p7683 VALUES LESS THAN (61472), +PARTITION p7684 VALUES LESS THAN (61480), +PARTITION p7685 VALUES LESS THAN (61488), +PARTITION p7686 VALUES LESS THAN (61496), +PARTITION p7687 VALUES LESS THAN (61504), +PARTITION p7688 VALUES LESS THAN (61512), +PARTITION p7689 VALUES LESS THAN (61520), +PARTITION p7690 VALUES LESS THAN (61528), +PARTITION p7691 VALUES LESS THAN (61536), +PARTITION p7692 VALUES LESS THAN (61544), +PARTITION p7693 VALUES LESS THAN (61552), +PARTITION p7694 VALUES LESS THAN (61560), +PARTITION p7695 VALUES LESS THAN (61568), +PARTITION p7696 VALUES LESS THAN (61576), +PARTITION p7697 VALUES LESS THAN (61584), +PARTITION p7698 VALUES LESS THAN (61592), +PARTITION p7699 VALUES LESS THAN (61600), +PARTITION p7700 VALUES LESS THAN (61608), +PARTITION p7701 VALUES LESS THAN (61616), +PARTITION p7702 VALUES LESS THAN (61624), +PARTITION p7703 VALUES LESS THAN (61632), +PARTITION p7704 VALUES LESS THAN (61640), +PARTITION p7705 VALUES LESS THAN (61648), +PARTITION p7706 VALUES LESS THAN (61656), +PARTITION p7707 VALUES LESS THAN (61664), +PARTITION p7708 VALUES LESS THAN (61672), +PARTITION p7709 VALUES LESS THAN (61680), +PARTITION p7710 VALUES LESS THAN (61688), +PARTITION p7711 VALUES LESS THAN (61696), +PARTITION p7712 VALUES LESS THAN (61704), +PARTITION p7713 VALUES LESS THAN (61712), +PARTITION p7714 VALUES LESS THAN (61720), +PARTITION p7715 VALUES LESS THAN (61728), +PARTITION p7716 VALUES LESS THAN (61736), +PARTITION p7717 VALUES LESS THAN (61744), +PARTITION p7718 VALUES LESS THAN (61752), +PARTITION p7719 VALUES LESS THAN (61760), +PARTITION p7720 VALUES LESS THAN (61768), +PARTITION p7721 VALUES LESS THAN (61776), +PARTITION p7722 VALUES LESS THAN (61784), +PARTITION p7723 VALUES LESS THAN (61792), +PARTITION p7724 VALUES LESS THAN (61800), +PARTITION p7725 VALUES LESS THAN (61808), +PARTITION p7726 VALUES LESS THAN (61816), +PARTITION p7727 VALUES LESS THAN (61824), +PARTITION p7728 VALUES LESS THAN (61832), +PARTITION p7729 VALUES LESS THAN (61840), +PARTITION p7730 VALUES LESS THAN (61848), +PARTITION p7731 VALUES LESS THAN (61856), +PARTITION p7732 VALUES LESS THAN (61864), +PARTITION p7733 VALUES LESS THAN (61872), +PARTITION p7734 VALUES LESS THAN (61880), +PARTITION p7735 VALUES LESS THAN (61888), +PARTITION p7736 VALUES LESS THAN (61896), +PARTITION p7737 VALUES LESS THAN (61904), +PARTITION p7738 VALUES LESS THAN (61912), +PARTITION p7739 VALUES LESS THAN (61920), +PARTITION p7740 VALUES LESS THAN (61928), +PARTITION p7741 VALUES LESS THAN (61936), +PARTITION p7742 VALUES LESS THAN (61944), +PARTITION p7743 VALUES LESS THAN (61952), +PARTITION p7744 VALUES LESS THAN (61960), +PARTITION p7745 VALUES LESS THAN (61968), +PARTITION p7746 VALUES LESS THAN (61976), +PARTITION p7747 VALUES LESS THAN (61984), +PARTITION p7748 VALUES LESS THAN (61992), +PARTITION p7749 VALUES LESS THAN (62000), +PARTITION p7750 VALUES LESS THAN (62008), +PARTITION p7751 VALUES LESS THAN (62016), +PARTITION p7752 VALUES LESS THAN (62024), +PARTITION p7753 VALUES LESS THAN (62032), +PARTITION p7754 VALUES LESS THAN (62040), +PARTITION p7755 VALUES LESS THAN (62048), +PARTITION p7756 VALUES LESS THAN (62056), +PARTITION p7757 VALUES LESS THAN (62064), +PARTITION p7758 VALUES LESS THAN (62072), +PARTITION p7759 VALUES LESS THAN (62080), +PARTITION p7760 VALUES LESS THAN (62088), +PARTITION p7761 VALUES LESS THAN (62096), +PARTITION p7762 VALUES LESS THAN (62104), +PARTITION p7763 VALUES LESS THAN (62112), +PARTITION p7764 VALUES LESS THAN (62120), +PARTITION p7765 VALUES LESS THAN (62128), +PARTITION p7766 VALUES LESS THAN (62136), +PARTITION p7767 VALUES LESS THAN (62144), +PARTITION p7768 VALUES LESS THAN (62152), +PARTITION p7769 VALUES LESS THAN (62160), +PARTITION p7770 VALUES LESS THAN (62168), +PARTITION p7771 VALUES LESS THAN (62176), +PARTITION p7772 VALUES LESS THAN (62184), +PARTITION p7773 VALUES LESS THAN (62192), +PARTITION p7774 VALUES LESS THAN (62200), +PARTITION p7775 VALUES LESS THAN (62208), +PARTITION p7776 VALUES LESS THAN (62216), +PARTITION p7777 VALUES LESS THAN (62224), +PARTITION p7778 VALUES LESS THAN (62232), +PARTITION p7779 VALUES LESS THAN (62240), +PARTITION p7780 VALUES LESS THAN (62248), +PARTITION p7781 VALUES LESS THAN (62256), +PARTITION p7782 VALUES LESS THAN (62264), +PARTITION p7783 VALUES LESS THAN (62272), +PARTITION p7784 VALUES LESS THAN (62280), +PARTITION p7785 VALUES LESS THAN (62288), +PARTITION p7786 VALUES LESS THAN (62296), +PARTITION p7787 VALUES LESS THAN (62304), +PARTITION p7788 VALUES LESS THAN (62312), +PARTITION p7789 VALUES LESS THAN (62320), +PARTITION p7790 VALUES LESS THAN (62328), +PARTITION p7791 VALUES LESS THAN (62336), +PARTITION p7792 VALUES LESS THAN (62344), +PARTITION p7793 VALUES LESS THAN (62352), +PARTITION p7794 VALUES LESS THAN (62360), +PARTITION p7795 VALUES LESS THAN (62368), +PARTITION p7796 VALUES LESS THAN (62376), +PARTITION p7797 VALUES LESS THAN (62384), +PARTITION p7798 VALUES LESS THAN (62392), +PARTITION p7799 VALUES LESS THAN (62400), +PARTITION p7800 VALUES LESS THAN (62408), +PARTITION p7801 VALUES LESS THAN (62416), +PARTITION p7802 VALUES LESS THAN (62424), +PARTITION p7803 VALUES LESS THAN (62432), +PARTITION p7804 VALUES LESS THAN (62440), +PARTITION p7805 VALUES LESS THAN (62448), +PARTITION p7806 VALUES LESS THAN (62456), +PARTITION p7807 VALUES LESS THAN (62464), +PARTITION p7808 VALUES LESS THAN (62472), +PARTITION p7809 VALUES LESS THAN (62480), +PARTITION p7810 VALUES LESS THAN (62488), +PARTITION p7811 VALUES LESS THAN (62496), +PARTITION p7812 VALUES LESS THAN (62504), +PARTITION p7813 VALUES LESS THAN (62512), +PARTITION p7814 VALUES LESS THAN (62520), +PARTITION p7815 VALUES LESS THAN (62528), +PARTITION p7816 VALUES LESS THAN (62536), +PARTITION p7817 VALUES LESS THAN (62544), +PARTITION p7818 VALUES LESS THAN (62552), +PARTITION p7819 VALUES LESS THAN (62560), +PARTITION p7820 VALUES LESS THAN (62568), +PARTITION p7821 VALUES LESS THAN (62576), +PARTITION p7822 VALUES LESS THAN (62584), +PARTITION p7823 VALUES LESS THAN (62592), +PARTITION p7824 VALUES LESS THAN (62600), +PARTITION p7825 VALUES LESS THAN (62608), +PARTITION p7826 VALUES LESS THAN (62616), +PARTITION p7827 VALUES LESS THAN (62624), +PARTITION p7828 VALUES LESS THAN (62632), +PARTITION p7829 VALUES LESS THAN (62640), +PARTITION p7830 VALUES LESS THAN (62648), +PARTITION p7831 VALUES LESS THAN (62656), +PARTITION p7832 VALUES LESS THAN (62664), +PARTITION p7833 VALUES LESS THAN (62672), +PARTITION p7834 VALUES LESS THAN (62680), +PARTITION p7835 VALUES LESS THAN (62688), +PARTITION p7836 VALUES LESS THAN (62696), +PARTITION p7837 VALUES LESS THAN (62704), +PARTITION p7838 VALUES LESS THAN (62712), +PARTITION p7839 VALUES LESS THAN (62720), +PARTITION p7840 VALUES LESS THAN (62728), +PARTITION p7841 VALUES LESS THAN (62736), +PARTITION p7842 VALUES LESS THAN (62744), +PARTITION p7843 VALUES LESS THAN (62752), +PARTITION p7844 VALUES LESS THAN (62760), +PARTITION p7845 VALUES LESS THAN (62768), +PARTITION p7846 VALUES LESS THAN (62776), +PARTITION p7847 VALUES LESS THAN (62784), +PARTITION p7848 VALUES LESS THAN (62792), +PARTITION p7849 VALUES LESS THAN (62800), +PARTITION p7850 VALUES LESS THAN (62808), +PARTITION p7851 VALUES LESS THAN (62816), +PARTITION p7852 VALUES LESS THAN (62824), +PARTITION p7853 VALUES LESS THAN (62832), +PARTITION p7854 VALUES LESS THAN (62840), +PARTITION p7855 VALUES LESS THAN (62848), +PARTITION p7856 VALUES LESS THAN (62856), +PARTITION p7857 VALUES LESS THAN (62864), +PARTITION p7858 VALUES LESS THAN (62872), +PARTITION p7859 VALUES LESS THAN (62880), +PARTITION p7860 VALUES LESS THAN (62888), +PARTITION p7861 VALUES LESS THAN (62896), +PARTITION p7862 VALUES LESS THAN (62904), +PARTITION p7863 VALUES LESS THAN (62912), +PARTITION p7864 VALUES LESS THAN (62920), +PARTITION p7865 VALUES LESS THAN (62928), +PARTITION p7866 VALUES LESS THAN (62936), +PARTITION p7867 VALUES LESS THAN (62944), +PARTITION p7868 VALUES LESS THAN (62952), +PARTITION p7869 VALUES LESS THAN (62960), +PARTITION p7870 VALUES LESS THAN (62968), +PARTITION p7871 VALUES LESS THAN (62976), +PARTITION p7872 VALUES LESS THAN (62984), +PARTITION p7873 VALUES LESS THAN (62992), +PARTITION p7874 VALUES LESS THAN (63000), +PARTITION p7875 VALUES LESS THAN (63008), +PARTITION p7876 VALUES LESS THAN (63016), +PARTITION p7877 VALUES LESS THAN (63024), +PARTITION p7878 VALUES LESS THAN (63032), +PARTITION p7879 VALUES LESS THAN (63040), +PARTITION p7880 VALUES LESS THAN (63048), +PARTITION p7881 VALUES LESS THAN (63056), +PARTITION p7882 VALUES LESS THAN (63064), +PARTITION p7883 VALUES LESS THAN (63072), +PARTITION p7884 VALUES LESS THAN (63080), +PARTITION p7885 VALUES LESS THAN (63088), +PARTITION p7886 VALUES LESS THAN (63096), +PARTITION p7887 VALUES LESS THAN (63104), +PARTITION p7888 VALUES LESS THAN (63112), +PARTITION p7889 VALUES LESS THAN (63120), +PARTITION p7890 VALUES LESS THAN (63128), +PARTITION p7891 VALUES LESS THAN (63136), +PARTITION p7892 VALUES LESS THAN (63144), +PARTITION p7893 VALUES LESS THAN (63152), +PARTITION p7894 VALUES LESS THAN (63160), +PARTITION p7895 VALUES LESS THAN (63168), +PARTITION p7896 VALUES LESS THAN (63176), +PARTITION p7897 VALUES LESS THAN (63184), +PARTITION p7898 VALUES LESS THAN (63192), +PARTITION p7899 VALUES LESS THAN (63200), +PARTITION p7900 VALUES LESS THAN (63208), +PARTITION p7901 VALUES LESS THAN (63216), +PARTITION p7902 VALUES LESS THAN (63224), +PARTITION p7903 VALUES LESS THAN (63232), +PARTITION p7904 VALUES LESS THAN (63240), +PARTITION p7905 VALUES LESS THAN (63248), +PARTITION p7906 VALUES LESS THAN (63256), +PARTITION p7907 VALUES LESS THAN (63264), +PARTITION p7908 VALUES LESS THAN (63272), +PARTITION p7909 VALUES LESS THAN (63280), +PARTITION p7910 VALUES LESS THAN (63288), +PARTITION p7911 VALUES LESS THAN (63296), +PARTITION p7912 VALUES LESS THAN (63304), +PARTITION p7913 VALUES LESS THAN (63312), +PARTITION p7914 VALUES LESS THAN (63320), +PARTITION p7915 VALUES LESS THAN (63328), +PARTITION p7916 VALUES LESS THAN (63336), +PARTITION p7917 VALUES LESS THAN (63344), +PARTITION p7918 VALUES LESS THAN (63352), +PARTITION p7919 VALUES LESS THAN (63360), +PARTITION p7920 VALUES LESS THAN (63368), +PARTITION p7921 VALUES LESS THAN (63376), +PARTITION p7922 VALUES LESS THAN (63384), +PARTITION p7923 VALUES LESS THAN (63392), +PARTITION p7924 VALUES LESS THAN (63400), +PARTITION p7925 VALUES LESS THAN (63408), +PARTITION p7926 VALUES LESS THAN (63416), +PARTITION p7927 VALUES LESS THAN (63424), +PARTITION p7928 VALUES LESS THAN (63432), +PARTITION p7929 VALUES LESS THAN (63440), +PARTITION p7930 VALUES LESS THAN (63448), +PARTITION p7931 VALUES LESS THAN (63456), +PARTITION p7932 VALUES LESS THAN (63464), +PARTITION p7933 VALUES LESS THAN (63472), +PARTITION p7934 VALUES LESS THAN (63480), +PARTITION p7935 VALUES LESS THAN (63488), +PARTITION p7936 VALUES LESS THAN (63496), +PARTITION p7937 VALUES LESS THAN (63504), +PARTITION p7938 VALUES LESS THAN (63512), +PARTITION p7939 VALUES LESS THAN (63520), +PARTITION p7940 VALUES LESS THAN (63528), +PARTITION p7941 VALUES LESS THAN (63536), +PARTITION p7942 VALUES LESS THAN (63544), +PARTITION p7943 VALUES LESS THAN (63552), +PARTITION p7944 VALUES LESS THAN (63560), +PARTITION p7945 VALUES LESS THAN (63568), +PARTITION p7946 VALUES LESS THAN (63576), +PARTITION p7947 VALUES LESS THAN (63584), +PARTITION p7948 VALUES LESS THAN (63592), +PARTITION p7949 VALUES LESS THAN (63600), +PARTITION p7950 VALUES LESS THAN (63608), +PARTITION p7951 VALUES LESS THAN (63616), +PARTITION p7952 VALUES LESS THAN (63624), +PARTITION p7953 VALUES LESS THAN (63632), +PARTITION p7954 VALUES LESS THAN (63640), +PARTITION p7955 VALUES LESS THAN (63648), +PARTITION p7956 VALUES LESS THAN (63656), +PARTITION p7957 VALUES LESS THAN (63664), +PARTITION p7958 VALUES LESS THAN (63672), +PARTITION p7959 VALUES LESS THAN (63680), +PARTITION p7960 VALUES LESS THAN (63688), +PARTITION p7961 VALUES LESS THAN (63696), +PARTITION p7962 VALUES LESS THAN (63704), +PARTITION p7963 VALUES LESS THAN (63712), +PARTITION p7964 VALUES LESS THAN (63720), +PARTITION p7965 VALUES LESS THAN (63728), +PARTITION p7966 VALUES LESS THAN (63736), +PARTITION p7967 VALUES LESS THAN (63744), +PARTITION p7968 VALUES LESS THAN (63752), +PARTITION p7969 VALUES LESS THAN (63760), +PARTITION p7970 VALUES LESS THAN (63768), +PARTITION p7971 VALUES LESS THAN (63776), +PARTITION p7972 VALUES LESS THAN (63784), +PARTITION p7973 VALUES LESS THAN (63792), +PARTITION p7974 VALUES LESS THAN (63800), +PARTITION p7975 VALUES LESS THAN (63808), +PARTITION p7976 VALUES LESS THAN (63816), +PARTITION p7977 VALUES LESS THAN (63824), +PARTITION p7978 VALUES LESS THAN (63832), +PARTITION p7979 VALUES LESS THAN (63840), +PARTITION p7980 VALUES LESS THAN (63848), +PARTITION p7981 VALUES LESS THAN (63856), +PARTITION p7982 VALUES LESS THAN (63864), +PARTITION p7983 VALUES LESS THAN (63872), +PARTITION p7984 VALUES LESS THAN (63880), +PARTITION p7985 VALUES LESS THAN (63888), +PARTITION p7986 VALUES LESS THAN (63896), +PARTITION p7987 VALUES LESS THAN (63904), +PARTITION p7988 VALUES LESS THAN (63912), +PARTITION p7989 VALUES LESS THAN (63920), +PARTITION p7990 VALUES LESS THAN (63928), +PARTITION p7991 VALUES LESS THAN (63936), +PARTITION p7992 VALUES LESS THAN (63944), +PARTITION p7993 VALUES LESS THAN (63952), +PARTITION p7994 VALUES LESS THAN (63960), +PARTITION p7995 VALUES LESS THAN (63968), +PARTITION p7996 VALUES LESS THAN (63976), +PARTITION p7997 VALUES LESS THAN (63984), +PARTITION p7998 VALUES LESS THAN (63992), +PARTITION p7999 VALUES LESS THAN (64000), +PARTITION p8000 VALUES LESS THAN (64008), +PARTITION p8001 VALUES LESS THAN (64016), +PARTITION p8002 VALUES LESS THAN (64024), +PARTITION p8003 VALUES LESS THAN (64032), +PARTITION p8004 VALUES LESS THAN (64040), +PARTITION p8005 VALUES LESS THAN (64048), +PARTITION p8006 VALUES LESS THAN (64056), +PARTITION p8007 VALUES LESS THAN (64064), +PARTITION p8008 VALUES LESS THAN (64072), +PARTITION p8009 VALUES LESS THAN (64080), +PARTITION p8010 VALUES LESS THAN (64088), +PARTITION p8011 VALUES LESS THAN (64096), +PARTITION p8012 VALUES LESS THAN (64104), +PARTITION p8013 VALUES LESS THAN (64112), +PARTITION p8014 VALUES LESS THAN (64120), +PARTITION p8015 VALUES LESS THAN (64128), +PARTITION p8016 VALUES LESS THAN (64136), +PARTITION p8017 VALUES LESS THAN (64144), +PARTITION p8018 VALUES LESS THAN (64152), +PARTITION p8019 VALUES LESS THAN (64160), +PARTITION p8020 VALUES LESS THAN (64168), +PARTITION p8021 VALUES LESS THAN (64176), +PARTITION p8022 VALUES LESS THAN (64184), +PARTITION p8023 VALUES LESS THAN (64192), +PARTITION p8024 VALUES LESS THAN (64200), +PARTITION p8025 VALUES LESS THAN (64208), +PARTITION p8026 VALUES LESS THAN (64216), +PARTITION p8027 VALUES LESS THAN (64224), +PARTITION p8028 VALUES LESS THAN (64232), +PARTITION p8029 VALUES LESS THAN (64240), +PARTITION p8030 VALUES LESS THAN (64248), +PARTITION p8031 VALUES LESS THAN (64256), +PARTITION p8032 VALUES LESS THAN (64264), +PARTITION p8033 VALUES LESS THAN (64272), +PARTITION p8034 VALUES LESS THAN (64280), +PARTITION p8035 VALUES LESS THAN (64288), +PARTITION p8036 VALUES LESS THAN (64296), +PARTITION p8037 VALUES LESS THAN (64304), +PARTITION p8038 VALUES LESS THAN (64312), +PARTITION p8039 VALUES LESS THAN (64320), +PARTITION p8040 VALUES LESS THAN (64328), +PARTITION p8041 VALUES LESS THAN (64336), +PARTITION p8042 VALUES LESS THAN (64344), +PARTITION p8043 VALUES LESS THAN (64352), +PARTITION p8044 VALUES LESS THAN (64360), +PARTITION p8045 VALUES LESS THAN (64368), +PARTITION p8046 VALUES LESS THAN (64376), +PARTITION p8047 VALUES LESS THAN (64384), +PARTITION p8048 VALUES LESS THAN (64392), +PARTITION p8049 VALUES LESS THAN (64400), +PARTITION p8050 VALUES LESS THAN (64408), +PARTITION p8051 VALUES LESS THAN (64416), +PARTITION p8052 VALUES LESS THAN (64424), +PARTITION p8053 VALUES LESS THAN (64432), +PARTITION p8054 VALUES LESS THAN (64440), +PARTITION p8055 VALUES LESS THAN (64448), +PARTITION p8056 VALUES LESS THAN (64456), +PARTITION p8057 VALUES LESS THAN (64464), +PARTITION p8058 VALUES LESS THAN (64472), +PARTITION p8059 VALUES LESS THAN (64480), +PARTITION p8060 VALUES LESS THAN (64488), +PARTITION p8061 VALUES LESS THAN (64496), +PARTITION p8062 VALUES LESS THAN (64504), +PARTITION p8063 VALUES LESS THAN (64512), +PARTITION p8064 VALUES LESS THAN (64520), +PARTITION p8065 VALUES LESS THAN (64528), +PARTITION p8066 VALUES LESS THAN (64536), +PARTITION p8067 VALUES LESS THAN (64544), +PARTITION p8068 VALUES LESS THAN (64552), +PARTITION p8069 VALUES LESS THAN (64560), +PARTITION p8070 VALUES LESS THAN (64568), +PARTITION p8071 VALUES LESS THAN (64576), +PARTITION p8072 VALUES LESS THAN (64584), +PARTITION p8073 VALUES LESS THAN (64592), +PARTITION p8074 VALUES LESS THAN (64600), +PARTITION p8075 VALUES LESS THAN (64608), +PARTITION p8076 VALUES LESS THAN (64616), +PARTITION p8077 VALUES LESS THAN (64624), +PARTITION p8078 VALUES LESS THAN (64632), +PARTITION p8079 VALUES LESS THAN (64640), +PARTITION p8080 VALUES LESS THAN (64648), +PARTITION p8081 VALUES LESS THAN (64656), +PARTITION p8082 VALUES LESS THAN (64664), +PARTITION p8083 VALUES LESS THAN (64672), +PARTITION p8084 VALUES LESS THAN (64680), +PARTITION p8085 VALUES LESS THAN (64688), +PARTITION p8086 VALUES LESS THAN (64696), +PARTITION p8087 VALUES LESS THAN (64704), +PARTITION p8088 VALUES LESS THAN (64712), +PARTITION p8089 VALUES LESS THAN (64720), +PARTITION p8090 VALUES LESS THAN (64728), +PARTITION p8091 VALUES LESS THAN (64736), +PARTITION p8092 VALUES LESS THAN (64744), +PARTITION p8093 VALUES LESS THAN (64752), +PARTITION p8094 VALUES LESS THAN (64760), +PARTITION p8095 VALUES LESS THAN (64768), +PARTITION p8096 VALUES LESS THAN (64776), +PARTITION p8097 VALUES LESS THAN (64784), +PARTITION p8098 VALUES LESS THAN (64792), +PARTITION p8099 VALUES LESS THAN (64800), +PARTITION p8100 VALUES LESS THAN (64808), +PARTITION p8101 VALUES LESS THAN (64816), +PARTITION p8102 VALUES LESS THAN (64824), +PARTITION p8103 VALUES LESS THAN (64832), +PARTITION p8104 VALUES LESS THAN (64840), +PARTITION p8105 VALUES LESS THAN (64848), +PARTITION p8106 VALUES LESS THAN (64856), +PARTITION p8107 VALUES LESS THAN (64864), +PARTITION p8108 VALUES LESS THAN (64872), +PARTITION p8109 VALUES LESS THAN (64880), +PARTITION p8110 VALUES LESS THAN (64888), +PARTITION p8111 VALUES LESS THAN (64896), +PARTITION p8112 VALUES LESS THAN (64904), +PARTITION p8113 VALUES LESS THAN (64912), +PARTITION p8114 VALUES LESS THAN (64920), +PARTITION p8115 VALUES LESS THAN (64928), +PARTITION p8116 VALUES LESS THAN (64936), +PARTITION p8117 VALUES LESS THAN (64944), +PARTITION p8118 VALUES LESS THAN (64952), +PARTITION p8119 VALUES LESS THAN (64960), +PARTITION p8120 VALUES LESS THAN (64968), +PARTITION p8121 VALUES LESS THAN (64976), +PARTITION p8122 VALUES LESS THAN (64984), +PARTITION p8123 VALUES LESS THAN (64992), +PARTITION p8124 VALUES LESS THAN (65000), +PARTITION p8125 VALUES LESS THAN (65008), +PARTITION p8126 VALUES LESS THAN (65016), +PARTITION p8127 VALUES LESS THAN (65024), +PARTITION p8128 VALUES LESS THAN (65032), +PARTITION p8129 VALUES LESS THAN (65040), +PARTITION p8130 VALUES LESS THAN (65048), +PARTITION p8131 VALUES LESS THAN (65056), +PARTITION p8132 VALUES LESS THAN (65064), +PARTITION p8133 VALUES LESS THAN (65072), +PARTITION p8134 VALUES LESS THAN (65080), +PARTITION p8135 VALUES LESS THAN (65088), +PARTITION p8136 VALUES LESS THAN (65096), +PARTITION p8137 VALUES LESS THAN (65104), +PARTITION p8138 VALUES LESS THAN (65112), +PARTITION p8139 VALUES LESS THAN (65120), +PARTITION p8140 VALUES LESS THAN (65128), +PARTITION p8141 VALUES LESS THAN (65136), +PARTITION p8142 VALUES LESS THAN (65144), +PARTITION p8143 VALUES LESS THAN (65152), +PARTITION p8144 VALUES LESS THAN (65160), +PARTITION p8145 VALUES LESS THAN (65168), +PARTITION p8146 VALUES LESS THAN (65176), +PARTITION p8147 VALUES LESS THAN (65184), +PARTITION p8148 VALUES LESS THAN (65192), +PARTITION p8149 VALUES LESS THAN (65200), +PARTITION p8150 VALUES LESS THAN (65208), +PARTITION p8151 VALUES LESS THAN (65216), +PARTITION p8152 VALUES LESS THAN (65224), +PARTITION p8153 VALUES LESS THAN (65232), +PARTITION p8154 VALUES LESS THAN (65240), +PARTITION p8155 VALUES LESS THAN (65248), +PARTITION p8156 VALUES LESS THAN (65256), +PARTITION p8157 VALUES LESS THAN (65264), +PARTITION p8158 VALUES LESS THAN (65272), +PARTITION p8159 VALUES LESS THAN (65280), +PARTITION p8160 VALUES LESS THAN (65288), +PARTITION p8161 VALUES LESS THAN (65296), +PARTITION p8162 VALUES LESS THAN (65304), +PARTITION p8163 VALUES LESS THAN (65312), +PARTITION p8164 VALUES LESS THAN (65320), +PARTITION p8165 VALUES LESS THAN (65328), +PARTITION p8166 VALUES LESS THAN (65336), +PARTITION p8167 VALUES LESS THAN (65344), +PARTITION p8168 VALUES LESS THAN (65352), +PARTITION p8169 VALUES LESS THAN (65360), +PARTITION p8170 VALUES LESS THAN (65368), +PARTITION p8171 VALUES LESS THAN (65376), +PARTITION p8172 VALUES LESS THAN (65384), +PARTITION p8173 VALUES LESS THAN (65392), +PARTITION p8174 VALUES LESS THAN (65400), +PARTITION p8175 VALUES LESS THAN (65408), +PARTITION p8176 VALUES LESS THAN (65416), +PARTITION p8177 VALUES LESS THAN (65424), +PARTITION p8178 VALUES LESS THAN (65432), +PARTITION p8179 VALUES LESS THAN (65440), +PARTITION p8180 VALUES LESS THAN (65448), +PARTITION p8181 VALUES LESS THAN (65456), +PARTITION p8182 VALUES LESS THAN (65464), +PARTITION p8183 VALUES LESS THAN (65472), +PARTITION p8184 VALUES LESS THAN (65480), +PARTITION p8185 VALUES LESS THAN (65488), +PARTITION p8186 VALUES LESS THAN (65496), +PARTITION p8187 VALUES LESS THAN (65504), +PARTITION p8188 VALUES LESS THAN (65512), +PARTITION p8189 VALUES LESS THAN (65520), +PARTITION p8190 VALUES LESS THAN (65528), +PARTITION p8191 VALUES LESS THAN (65536) +); +65535 inserts; +select count(*) from t2; +count(*) +65535 +select count(*) from t2 partition (p0); +count(*) +7 +select count(*) from t2 partition (p10); +count(*) +8 +select count(*) from t2 partition (p100); +count(*) +8 +select count(*) from t2 partition (p1000); +count(*) +8 +select count(*) from t2 partition (p4000); +count(*) +8 +select count(*) from t2 partition (p8000); +count(*) +8 +select count(*) from t2 partition (p8191); +count(*) +8 +select * from t2 partition (p0); +a +7 +6 +5 +4 +3 +2 +1 +select * from t2 partition (p10); +a +87 +86 +85 +84 +83 +82 +81 +80 +select * from t2 partition (p100); +a +807 +806 +805 +804 +803 +802 +801 +800 +select * from t2 partition (p1000); +a +8007 +8006 +8005 +8004 +8003 +8002 +8001 +8000 +select * from t2 partition (p4000); +a +32007 +32006 +32005 +32004 +32003 +32002 +32001 +32000 +select * from t2 partition (p8000); +a +64007 +64006 +64005 +64004 +64003 +64002 +64001 +64000 +select * from t2 partition (p8191); +a +65535 +65534 +65533 +65532 +65531 +65530 +65529 +65528 +delete from t2 partition (p8191); +select * from t2 partition (p8191); +a +insert into t2 partition (p8191) values (65534), (65535); +select * from t2 partition (p8191); +a +65534 +65535 +update t2 partition (p8191) set a=65533 where a= 65534; +select * from t2 partition (p8191); +a +65533 +65535 +load data infile 'MYSQL_TMP_DIR/data01' into table t2 partition (p8191) fields terminated by ','; +select * from t2 partition (p8191); +a +65533 +65535 +65532 +65534 +drop table t2; diff --git a/mysql-test/suite/tokudb.parts/r-native/partition_max_sub_parts_key_list_tokudb.result b/mysql-test/suite/tokudb.parts/r-native/partition_max_sub_parts_key_list_tokudb.result new file mode 100644 index 000000000000..e403bec400db --- /dev/null +++ b/mysql-test/suite/tokudb.parts/r-native/partition_max_sub_parts_key_list_tokudb.result @@ -0,0 +1,4180 @@ +create table t2 (a int not null, primary key(a)) engine='TokuDB' +partition by list (a) +subpartition by key (a) subpartitions 2 ( +PARTITION p0 VALUES IN (0,1,2,3), +PARTITION p1 VALUES IN (4,5,6,7), +PARTITION p2 VALUES IN (8,9,10,11), +PARTITION p3 VALUES IN (12,13,14,15), +PARTITION p4 VALUES IN (16,17,18,19), +PARTITION p5 VALUES IN (20,21,22,23), +PARTITION p6 VALUES IN (24,25,26,27), +PARTITION p7 VALUES IN (28,29,30,31), +PARTITION p8 VALUES IN (32,33,34,35), +PARTITION p9 VALUES IN (36,37,38,39), +PARTITION p10 VALUES IN (40,41,42,43), +PARTITION p11 VALUES IN (44,45,46,47), +PARTITION p12 VALUES IN (48,49,50,51), +PARTITION p13 VALUES IN (52,53,54,55), +PARTITION p14 VALUES IN (56,57,58,59), +PARTITION p15 VALUES IN (60,61,62,63), +PARTITION p16 VALUES IN (64,65,66,67), +PARTITION p17 VALUES IN (68,69,70,71), +PARTITION p18 VALUES IN (72,73,74,75), +PARTITION p19 VALUES IN (76,77,78,79), +PARTITION p20 VALUES IN (80,81,82,83), +PARTITION p21 VALUES IN (84,85,86,87), +PARTITION p22 VALUES IN (88,89,90,91), +PARTITION p23 VALUES IN (92,93,94,95), +PARTITION p24 VALUES IN (96,97,98,99), +PARTITION p25 VALUES IN (100,101,102,103), +PARTITION p26 VALUES IN (104,105,106,107), +PARTITION p27 VALUES IN (108,109,110,111), +PARTITION p28 VALUES IN (112,113,114,115), +PARTITION p29 VALUES IN (116,117,118,119), +PARTITION p30 VALUES IN (120,121,122,123), +PARTITION p31 VALUES IN (124,125,126,127), +PARTITION p32 VALUES IN (128,129,130,131), +PARTITION p33 VALUES IN (132,133,134,135), +PARTITION p34 VALUES IN (136,137,138,139), +PARTITION p35 VALUES IN (140,141,142,143), +PARTITION p36 VALUES IN (144,145,146,147), +PARTITION p37 VALUES IN (148,149,150,151), +PARTITION p38 VALUES IN (152,153,154,155), +PARTITION p39 VALUES IN (156,157,158,159), +PARTITION p40 VALUES IN (160,161,162,163), +PARTITION p41 VALUES IN (164,165,166,167), +PARTITION p42 VALUES IN (168,169,170,171), +PARTITION p43 VALUES IN (172,173,174,175), +PARTITION p44 VALUES IN (176,177,178,179), +PARTITION p45 VALUES IN (180,181,182,183), +PARTITION p46 VALUES IN (184,185,186,187), +PARTITION p47 VALUES IN (188,189,190,191), +PARTITION p48 VALUES IN (192,193,194,195), +PARTITION p49 VALUES IN (196,197,198,199), +PARTITION p50 VALUES IN (200,201,202,203), +PARTITION p51 VALUES IN (204,205,206,207), +PARTITION p52 VALUES IN (208,209,210,211), +PARTITION p53 VALUES IN (212,213,214,215), +PARTITION p54 VALUES IN (216,217,218,219), +PARTITION p55 VALUES IN (220,221,222,223), +PARTITION p56 VALUES IN (224,225,226,227), +PARTITION p57 VALUES IN (228,229,230,231), +PARTITION p58 VALUES IN (232,233,234,235), +PARTITION p59 VALUES IN (236,237,238,239), +PARTITION p60 VALUES IN (240,241,242,243), +PARTITION p61 VALUES IN (244,245,246,247), +PARTITION p62 VALUES IN (248,249,250,251), +PARTITION p63 VALUES IN (252,253,254,255), +PARTITION p64 VALUES IN (256,257,258,259), +PARTITION p65 VALUES IN (260,261,262,263), +PARTITION p66 VALUES IN (264,265,266,267), +PARTITION p67 VALUES IN (268,269,270,271), +PARTITION p68 VALUES IN (272,273,274,275), +PARTITION p69 VALUES IN (276,277,278,279), +PARTITION p70 VALUES IN (280,281,282,283), +PARTITION p71 VALUES IN (284,285,286,287), +PARTITION p72 VALUES IN (288,289,290,291), +PARTITION p73 VALUES IN (292,293,294,295), +PARTITION p74 VALUES IN (296,297,298,299), +PARTITION p75 VALUES IN (300,301,302,303), +PARTITION p76 VALUES IN (304,305,306,307), +PARTITION p77 VALUES IN (308,309,310,311), +PARTITION p78 VALUES IN (312,313,314,315), +PARTITION p79 VALUES IN (316,317,318,319), +PARTITION p80 VALUES IN (320,321,322,323), +PARTITION p81 VALUES IN (324,325,326,327), +PARTITION p82 VALUES IN (328,329,330,331), +PARTITION p83 VALUES IN (332,333,334,335), +PARTITION p84 VALUES IN (336,337,338,339), +PARTITION p85 VALUES IN (340,341,342,343), +PARTITION p86 VALUES IN (344,345,346,347), +PARTITION p87 VALUES IN (348,349,350,351), +PARTITION p88 VALUES IN (352,353,354,355), +PARTITION p89 VALUES IN (356,357,358,359), +PARTITION p90 VALUES IN (360,361,362,363), +PARTITION p91 VALUES IN (364,365,366,367), +PARTITION p92 VALUES IN (368,369,370,371), +PARTITION p93 VALUES IN (372,373,374,375), +PARTITION p94 VALUES IN (376,377,378,379), +PARTITION p95 VALUES IN (380,381,382,383), +PARTITION p96 VALUES IN (384,385,386,387), +PARTITION p97 VALUES IN (388,389,390,391), +PARTITION p98 VALUES IN (392,393,394,395), +PARTITION p99 VALUES IN (396,397,398,399), +PARTITION p100 VALUES IN (400,401,402,403), +PARTITION p101 VALUES IN (404,405,406,407), +PARTITION p102 VALUES IN (408,409,410,411), +PARTITION p103 VALUES IN (412,413,414,415), +PARTITION p104 VALUES IN (416,417,418,419), +PARTITION p105 VALUES IN (420,421,422,423), +PARTITION p106 VALUES IN (424,425,426,427), +PARTITION p107 VALUES IN (428,429,430,431), +PARTITION p108 VALUES IN (432,433,434,435), +PARTITION p109 VALUES IN (436,437,438,439), +PARTITION p110 VALUES IN (440,441,442,443), +PARTITION p111 VALUES IN (444,445,446,447), +PARTITION p112 VALUES IN (448,449,450,451), +PARTITION p113 VALUES IN (452,453,454,455), +PARTITION p114 VALUES IN (456,457,458,459), +PARTITION p115 VALUES IN (460,461,462,463), +PARTITION p116 VALUES IN (464,465,466,467), +PARTITION p117 VALUES IN (468,469,470,471), +PARTITION p118 VALUES IN (472,473,474,475), +PARTITION p119 VALUES IN (476,477,478,479), +PARTITION p120 VALUES IN (480,481,482,483), +PARTITION p121 VALUES IN (484,485,486,487), +PARTITION p122 VALUES IN (488,489,490,491), +PARTITION p123 VALUES IN (492,493,494,495), +PARTITION p124 VALUES IN (496,497,498,499), +PARTITION p125 VALUES IN (500,501,502,503), +PARTITION p126 VALUES IN (504,505,506,507), +PARTITION p127 VALUES IN (508,509,510,511), +PARTITION p128 VALUES IN (512,513,514,515), +PARTITION p129 VALUES IN (516,517,518,519), +PARTITION p130 VALUES IN (520,521,522,523), +PARTITION p131 VALUES IN (524,525,526,527), +PARTITION p132 VALUES IN (528,529,530,531), +PARTITION p133 VALUES IN (532,533,534,535), +PARTITION p134 VALUES IN (536,537,538,539), +PARTITION p135 VALUES IN (540,541,542,543), +PARTITION p136 VALUES IN (544,545,546,547), +PARTITION p137 VALUES IN (548,549,550,551), +PARTITION p138 VALUES IN (552,553,554,555), +PARTITION p139 VALUES IN (556,557,558,559), +PARTITION p140 VALUES IN (560,561,562,563), +PARTITION p141 VALUES IN (564,565,566,567), +PARTITION p142 VALUES IN (568,569,570,571), +PARTITION p143 VALUES IN (572,573,574,575), +PARTITION p144 VALUES IN (576,577,578,579), +PARTITION p145 VALUES IN (580,581,582,583), +PARTITION p146 VALUES IN (584,585,586,587), +PARTITION p147 VALUES IN (588,589,590,591), +PARTITION p148 VALUES IN (592,593,594,595), +PARTITION p149 VALUES IN (596,597,598,599), +PARTITION p150 VALUES IN (600,601,602,603), +PARTITION p151 VALUES IN (604,605,606,607), +PARTITION p152 VALUES IN (608,609,610,611), +PARTITION p153 VALUES IN (612,613,614,615), +PARTITION p154 VALUES IN (616,617,618,619), +PARTITION p155 VALUES IN (620,621,622,623), +PARTITION p156 VALUES IN (624,625,626,627), +PARTITION p157 VALUES IN (628,629,630,631), +PARTITION p158 VALUES IN (632,633,634,635), +PARTITION p159 VALUES IN (636,637,638,639), +PARTITION p160 VALUES IN (640,641,642,643), +PARTITION p161 VALUES IN (644,645,646,647), +PARTITION p162 VALUES IN (648,649,650,651), +PARTITION p163 VALUES IN (652,653,654,655), +PARTITION p164 VALUES IN (656,657,658,659), +PARTITION p165 VALUES IN (660,661,662,663), +PARTITION p166 VALUES IN (664,665,666,667), +PARTITION p167 VALUES IN (668,669,670,671), +PARTITION p168 VALUES IN (672,673,674,675), +PARTITION p169 VALUES IN (676,677,678,679), +PARTITION p170 VALUES IN (680,681,682,683), +PARTITION p171 VALUES IN (684,685,686,687), +PARTITION p172 VALUES IN (688,689,690,691), +PARTITION p173 VALUES IN (692,693,694,695), +PARTITION p174 VALUES IN (696,697,698,699), +PARTITION p175 VALUES IN (700,701,702,703), +PARTITION p176 VALUES IN (704,705,706,707), +PARTITION p177 VALUES IN (708,709,710,711), +PARTITION p178 VALUES IN (712,713,714,715), +PARTITION p179 VALUES IN (716,717,718,719), +PARTITION p180 VALUES IN (720,721,722,723), +PARTITION p181 VALUES IN (724,725,726,727), +PARTITION p182 VALUES IN (728,729,730,731), +PARTITION p183 VALUES IN (732,733,734,735), +PARTITION p184 VALUES IN (736,737,738,739), +PARTITION p185 VALUES IN (740,741,742,743), +PARTITION p186 VALUES IN (744,745,746,747), +PARTITION p187 VALUES IN (748,749,750,751), +PARTITION p188 VALUES IN (752,753,754,755), +PARTITION p189 VALUES IN (756,757,758,759), +PARTITION p190 VALUES IN (760,761,762,763), +PARTITION p191 VALUES IN (764,765,766,767), +PARTITION p192 VALUES IN (768,769,770,771), +PARTITION p193 VALUES IN (772,773,774,775), +PARTITION p194 VALUES IN (776,777,778,779), +PARTITION p195 VALUES IN (780,781,782,783), +PARTITION p196 VALUES IN (784,785,786,787), +PARTITION p197 VALUES IN (788,789,790,791), +PARTITION p198 VALUES IN (792,793,794,795), +PARTITION p199 VALUES IN (796,797,798,799), +PARTITION p200 VALUES IN (800,801,802,803), +PARTITION p201 VALUES IN (804,805,806,807), +PARTITION p202 VALUES IN (808,809,810,811), +PARTITION p203 VALUES IN (812,813,814,815), +PARTITION p204 VALUES IN (816,817,818,819), +PARTITION p205 VALUES IN (820,821,822,823), +PARTITION p206 VALUES IN (824,825,826,827), +PARTITION p207 VALUES IN (828,829,830,831), +PARTITION p208 VALUES IN (832,833,834,835), +PARTITION p209 VALUES IN (836,837,838,839), +PARTITION p210 VALUES IN (840,841,842,843), +PARTITION p211 VALUES IN (844,845,846,847), +PARTITION p212 VALUES IN (848,849,850,851), +PARTITION p213 VALUES IN (852,853,854,855), +PARTITION p214 VALUES IN (856,857,858,859), +PARTITION p215 VALUES IN (860,861,862,863), +PARTITION p216 VALUES IN (864,865,866,867), +PARTITION p217 VALUES IN (868,869,870,871), +PARTITION p218 VALUES IN (872,873,874,875), +PARTITION p219 VALUES IN (876,877,878,879), +PARTITION p220 VALUES IN (880,881,882,883), +PARTITION p221 VALUES IN (884,885,886,887), +PARTITION p222 VALUES IN (888,889,890,891), +PARTITION p223 VALUES IN (892,893,894,895), +PARTITION p224 VALUES IN (896,897,898,899), +PARTITION p225 VALUES IN (900,901,902,903), +PARTITION p226 VALUES IN (904,905,906,907), +PARTITION p227 VALUES IN (908,909,910,911), +PARTITION p228 VALUES IN (912,913,914,915), +PARTITION p229 VALUES IN (916,917,918,919), +PARTITION p230 VALUES IN (920,921,922,923), +PARTITION p231 VALUES IN (924,925,926,927), +PARTITION p232 VALUES IN (928,929,930,931), +PARTITION p233 VALUES IN (932,933,934,935), +PARTITION p234 VALUES IN (936,937,938,939), +PARTITION p235 VALUES IN (940,941,942,943), +PARTITION p236 VALUES IN (944,945,946,947), +PARTITION p237 VALUES IN (948,949,950,951), +PARTITION p238 VALUES IN (952,953,954,955), +PARTITION p239 VALUES IN (956,957,958,959), +PARTITION p240 VALUES IN (960,961,962,963), +PARTITION p241 VALUES IN (964,965,966,967), +PARTITION p242 VALUES IN (968,969,970,971), +PARTITION p243 VALUES IN (972,973,974,975), +PARTITION p244 VALUES IN (976,977,978,979), +PARTITION p245 VALUES IN (980,981,982,983), +PARTITION p246 VALUES IN (984,985,986,987), +PARTITION p247 VALUES IN (988,989,990,991), +PARTITION p248 VALUES IN (992,993,994,995), +PARTITION p249 VALUES IN (996,997,998,999), +PARTITION p250 VALUES IN (1000,1001,1002,1003), +PARTITION p251 VALUES IN (1004,1005,1006,1007), +PARTITION p252 VALUES IN (1008,1009,1010,1011), +PARTITION p253 VALUES IN (1012,1013,1014,1015), +PARTITION p254 VALUES IN (1016,1017,1018,1019), +PARTITION p255 VALUES IN (1020,1021,1022,1023), +PARTITION p256 VALUES IN (1024,1025,1026,1027), +PARTITION p257 VALUES IN (1028,1029,1030,1031), +PARTITION p258 VALUES IN (1032,1033,1034,1035), +PARTITION p259 VALUES IN (1036,1037,1038,1039), +PARTITION p260 VALUES IN (1040,1041,1042,1043), +PARTITION p261 VALUES IN (1044,1045,1046,1047), +PARTITION p262 VALUES IN (1048,1049,1050,1051), +PARTITION p263 VALUES IN (1052,1053,1054,1055), +PARTITION p264 VALUES IN (1056,1057,1058,1059), +PARTITION p265 VALUES IN (1060,1061,1062,1063), +PARTITION p266 VALUES IN (1064,1065,1066,1067), +PARTITION p267 VALUES IN (1068,1069,1070,1071), +PARTITION p268 VALUES IN (1072,1073,1074,1075), +PARTITION p269 VALUES IN (1076,1077,1078,1079), +PARTITION p270 VALUES IN (1080,1081,1082,1083), +PARTITION p271 VALUES IN (1084,1085,1086,1087), +PARTITION p272 VALUES IN (1088,1089,1090,1091), +PARTITION p273 VALUES IN (1092,1093,1094,1095), +PARTITION p274 VALUES IN (1096,1097,1098,1099), +PARTITION p275 VALUES IN (1100,1101,1102,1103), +PARTITION p276 VALUES IN (1104,1105,1106,1107), +PARTITION p277 VALUES IN (1108,1109,1110,1111), +PARTITION p278 VALUES IN (1112,1113,1114,1115), +PARTITION p279 VALUES IN (1116,1117,1118,1119), +PARTITION p280 VALUES IN (1120,1121,1122,1123), +PARTITION p281 VALUES IN (1124,1125,1126,1127), +PARTITION p282 VALUES IN (1128,1129,1130,1131), +PARTITION p283 VALUES IN (1132,1133,1134,1135), +PARTITION p284 VALUES IN (1136,1137,1138,1139), +PARTITION p285 VALUES IN (1140,1141,1142,1143), +PARTITION p286 VALUES IN (1144,1145,1146,1147), +PARTITION p287 VALUES IN (1148,1149,1150,1151), +PARTITION p288 VALUES IN (1152,1153,1154,1155), +PARTITION p289 VALUES IN (1156,1157,1158,1159), +PARTITION p290 VALUES IN (1160,1161,1162,1163), +PARTITION p291 VALUES IN (1164,1165,1166,1167), +PARTITION p292 VALUES IN (1168,1169,1170,1171), +PARTITION p293 VALUES IN (1172,1173,1174,1175), +PARTITION p294 VALUES IN (1176,1177,1178,1179), +PARTITION p295 VALUES IN (1180,1181,1182,1183), +PARTITION p296 VALUES IN (1184,1185,1186,1187), +PARTITION p297 VALUES IN (1188,1189,1190,1191), +PARTITION p298 VALUES IN (1192,1193,1194,1195), +PARTITION p299 VALUES IN (1196,1197,1198,1199), +PARTITION p300 VALUES IN (1200,1201,1202,1203), +PARTITION p301 VALUES IN (1204,1205,1206,1207), +PARTITION p302 VALUES IN (1208,1209,1210,1211), +PARTITION p303 VALUES IN (1212,1213,1214,1215), +PARTITION p304 VALUES IN (1216,1217,1218,1219), +PARTITION p305 VALUES IN (1220,1221,1222,1223), +PARTITION p306 VALUES IN (1224,1225,1226,1227), +PARTITION p307 VALUES IN (1228,1229,1230,1231), +PARTITION p308 VALUES IN (1232,1233,1234,1235), +PARTITION p309 VALUES IN (1236,1237,1238,1239), +PARTITION p310 VALUES IN (1240,1241,1242,1243), +PARTITION p311 VALUES IN (1244,1245,1246,1247), +PARTITION p312 VALUES IN (1248,1249,1250,1251), +PARTITION p313 VALUES IN (1252,1253,1254,1255), +PARTITION p314 VALUES IN (1256,1257,1258,1259), +PARTITION p315 VALUES IN (1260,1261,1262,1263), +PARTITION p316 VALUES IN (1264,1265,1266,1267), +PARTITION p317 VALUES IN (1268,1269,1270,1271), +PARTITION p318 VALUES IN (1272,1273,1274,1275), +PARTITION p319 VALUES IN (1276,1277,1278,1279), +PARTITION p320 VALUES IN (1280,1281,1282,1283), +PARTITION p321 VALUES IN (1284,1285,1286,1287), +PARTITION p322 VALUES IN (1288,1289,1290,1291), +PARTITION p323 VALUES IN (1292,1293,1294,1295), +PARTITION p324 VALUES IN (1296,1297,1298,1299), +PARTITION p325 VALUES IN (1300,1301,1302,1303), +PARTITION p326 VALUES IN (1304,1305,1306,1307), +PARTITION p327 VALUES IN (1308,1309,1310,1311), +PARTITION p328 VALUES IN (1312,1313,1314,1315), +PARTITION p329 VALUES IN (1316,1317,1318,1319), +PARTITION p330 VALUES IN (1320,1321,1322,1323), +PARTITION p331 VALUES IN (1324,1325,1326,1327), +PARTITION p332 VALUES IN (1328,1329,1330,1331), +PARTITION p333 VALUES IN (1332,1333,1334,1335), +PARTITION p334 VALUES IN (1336,1337,1338,1339), +PARTITION p335 VALUES IN (1340,1341,1342,1343), +PARTITION p336 VALUES IN (1344,1345,1346,1347), +PARTITION p337 VALUES IN (1348,1349,1350,1351), +PARTITION p338 VALUES IN (1352,1353,1354,1355), +PARTITION p339 VALUES IN (1356,1357,1358,1359), +PARTITION p340 VALUES IN (1360,1361,1362,1363), +PARTITION p341 VALUES IN (1364,1365,1366,1367), +PARTITION p342 VALUES IN (1368,1369,1370,1371), +PARTITION p343 VALUES IN (1372,1373,1374,1375), +PARTITION p344 VALUES IN (1376,1377,1378,1379), +PARTITION p345 VALUES IN (1380,1381,1382,1383), +PARTITION p346 VALUES IN (1384,1385,1386,1387), +PARTITION p347 VALUES IN (1388,1389,1390,1391), +PARTITION p348 VALUES IN (1392,1393,1394,1395), +PARTITION p349 VALUES IN (1396,1397,1398,1399), +PARTITION p350 VALUES IN (1400,1401,1402,1403), +PARTITION p351 VALUES IN (1404,1405,1406,1407), +PARTITION p352 VALUES IN (1408,1409,1410,1411), +PARTITION p353 VALUES IN (1412,1413,1414,1415), +PARTITION p354 VALUES IN (1416,1417,1418,1419), +PARTITION p355 VALUES IN (1420,1421,1422,1423), +PARTITION p356 VALUES IN (1424,1425,1426,1427), +PARTITION p357 VALUES IN (1428,1429,1430,1431), +PARTITION p358 VALUES IN (1432,1433,1434,1435), +PARTITION p359 VALUES IN (1436,1437,1438,1439), +PARTITION p360 VALUES IN (1440,1441,1442,1443), +PARTITION p361 VALUES IN (1444,1445,1446,1447), +PARTITION p362 VALUES IN (1448,1449,1450,1451), +PARTITION p363 VALUES IN (1452,1453,1454,1455), +PARTITION p364 VALUES IN (1456,1457,1458,1459), +PARTITION p365 VALUES IN (1460,1461,1462,1463), +PARTITION p366 VALUES IN (1464,1465,1466,1467), +PARTITION p367 VALUES IN (1468,1469,1470,1471), +PARTITION p368 VALUES IN (1472,1473,1474,1475), +PARTITION p369 VALUES IN (1476,1477,1478,1479), +PARTITION p370 VALUES IN (1480,1481,1482,1483), +PARTITION p371 VALUES IN (1484,1485,1486,1487), +PARTITION p372 VALUES IN (1488,1489,1490,1491), +PARTITION p373 VALUES IN (1492,1493,1494,1495), +PARTITION p374 VALUES IN (1496,1497,1498,1499), +PARTITION p375 VALUES IN (1500,1501,1502,1503), +PARTITION p376 VALUES IN (1504,1505,1506,1507), +PARTITION p377 VALUES IN (1508,1509,1510,1511), +PARTITION p378 VALUES IN (1512,1513,1514,1515), +PARTITION p379 VALUES IN (1516,1517,1518,1519), +PARTITION p380 VALUES IN (1520,1521,1522,1523), +PARTITION p381 VALUES IN (1524,1525,1526,1527), +PARTITION p382 VALUES IN (1528,1529,1530,1531), +PARTITION p383 VALUES IN (1532,1533,1534,1535), +PARTITION p384 VALUES IN (1536,1537,1538,1539), +PARTITION p385 VALUES IN (1540,1541,1542,1543), +PARTITION p386 VALUES IN (1544,1545,1546,1547), +PARTITION p387 VALUES IN (1548,1549,1550,1551), +PARTITION p388 VALUES IN (1552,1553,1554,1555), +PARTITION p389 VALUES IN (1556,1557,1558,1559), +PARTITION p390 VALUES IN (1560,1561,1562,1563), +PARTITION p391 VALUES IN (1564,1565,1566,1567), +PARTITION p392 VALUES IN (1568,1569,1570,1571), +PARTITION p393 VALUES IN (1572,1573,1574,1575), +PARTITION p394 VALUES IN (1576,1577,1578,1579), +PARTITION p395 VALUES IN (1580,1581,1582,1583), +PARTITION p396 VALUES IN (1584,1585,1586,1587), +PARTITION p397 VALUES IN (1588,1589,1590,1591), +PARTITION p398 VALUES IN (1592,1593,1594,1595), +PARTITION p399 VALUES IN (1596,1597,1598,1599), +PARTITION p400 VALUES IN (1600,1601,1602,1603), +PARTITION p401 VALUES IN (1604,1605,1606,1607), +PARTITION p402 VALUES IN (1608,1609,1610,1611), +PARTITION p403 VALUES IN (1612,1613,1614,1615), +PARTITION p404 VALUES IN (1616,1617,1618,1619), +PARTITION p405 VALUES IN (1620,1621,1622,1623), +PARTITION p406 VALUES IN (1624,1625,1626,1627), +PARTITION p407 VALUES IN (1628,1629,1630,1631), +PARTITION p408 VALUES IN (1632,1633,1634,1635), +PARTITION p409 VALUES IN (1636,1637,1638,1639), +PARTITION p410 VALUES IN (1640,1641,1642,1643), +PARTITION p411 VALUES IN (1644,1645,1646,1647), +PARTITION p412 VALUES IN (1648,1649,1650,1651), +PARTITION p413 VALUES IN (1652,1653,1654,1655), +PARTITION p414 VALUES IN (1656,1657,1658,1659), +PARTITION p415 VALUES IN (1660,1661,1662,1663), +PARTITION p416 VALUES IN (1664,1665,1666,1667), +PARTITION p417 VALUES IN (1668,1669,1670,1671), +PARTITION p418 VALUES IN (1672,1673,1674,1675), +PARTITION p419 VALUES IN (1676,1677,1678,1679), +PARTITION p420 VALUES IN (1680,1681,1682,1683), +PARTITION p421 VALUES IN (1684,1685,1686,1687), +PARTITION p422 VALUES IN (1688,1689,1690,1691), +PARTITION p423 VALUES IN (1692,1693,1694,1695), +PARTITION p424 VALUES IN (1696,1697,1698,1699), +PARTITION p425 VALUES IN (1700,1701,1702,1703), +PARTITION p426 VALUES IN (1704,1705,1706,1707), +PARTITION p427 VALUES IN (1708,1709,1710,1711), +PARTITION p428 VALUES IN (1712,1713,1714,1715), +PARTITION p429 VALUES IN (1716,1717,1718,1719), +PARTITION p430 VALUES IN (1720,1721,1722,1723), +PARTITION p431 VALUES IN (1724,1725,1726,1727), +PARTITION p432 VALUES IN (1728,1729,1730,1731), +PARTITION p433 VALUES IN (1732,1733,1734,1735), +PARTITION p434 VALUES IN (1736,1737,1738,1739), +PARTITION p435 VALUES IN (1740,1741,1742,1743), +PARTITION p436 VALUES IN (1744,1745,1746,1747), +PARTITION p437 VALUES IN (1748,1749,1750,1751), +PARTITION p438 VALUES IN (1752,1753,1754,1755), +PARTITION p439 VALUES IN (1756,1757,1758,1759), +PARTITION p440 VALUES IN (1760,1761,1762,1763), +PARTITION p441 VALUES IN (1764,1765,1766,1767), +PARTITION p442 VALUES IN (1768,1769,1770,1771), +PARTITION p443 VALUES IN (1772,1773,1774,1775), +PARTITION p444 VALUES IN (1776,1777,1778,1779), +PARTITION p445 VALUES IN (1780,1781,1782,1783), +PARTITION p446 VALUES IN (1784,1785,1786,1787), +PARTITION p447 VALUES IN (1788,1789,1790,1791), +PARTITION p448 VALUES IN (1792,1793,1794,1795), +PARTITION p449 VALUES IN (1796,1797,1798,1799), +PARTITION p450 VALUES IN (1800,1801,1802,1803), +PARTITION p451 VALUES IN (1804,1805,1806,1807), +PARTITION p452 VALUES IN (1808,1809,1810,1811), +PARTITION p453 VALUES IN (1812,1813,1814,1815), +PARTITION p454 VALUES IN (1816,1817,1818,1819), +PARTITION p455 VALUES IN (1820,1821,1822,1823), +PARTITION p456 VALUES IN (1824,1825,1826,1827), +PARTITION p457 VALUES IN (1828,1829,1830,1831), +PARTITION p458 VALUES IN (1832,1833,1834,1835), +PARTITION p459 VALUES IN (1836,1837,1838,1839), +PARTITION p460 VALUES IN (1840,1841,1842,1843), +PARTITION p461 VALUES IN (1844,1845,1846,1847), +PARTITION p462 VALUES IN (1848,1849,1850,1851), +PARTITION p463 VALUES IN (1852,1853,1854,1855), +PARTITION p464 VALUES IN (1856,1857,1858,1859), +PARTITION p465 VALUES IN (1860,1861,1862,1863), +PARTITION p466 VALUES IN (1864,1865,1866,1867), +PARTITION p467 VALUES IN (1868,1869,1870,1871), +PARTITION p468 VALUES IN (1872,1873,1874,1875), +PARTITION p469 VALUES IN (1876,1877,1878,1879), +PARTITION p470 VALUES IN (1880,1881,1882,1883), +PARTITION p471 VALUES IN (1884,1885,1886,1887), +PARTITION p472 VALUES IN (1888,1889,1890,1891), +PARTITION p473 VALUES IN (1892,1893,1894,1895), +PARTITION p474 VALUES IN (1896,1897,1898,1899), +PARTITION p475 VALUES IN (1900,1901,1902,1903), +PARTITION p476 VALUES IN (1904,1905,1906,1907), +PARTITION p477 VALUES IN (1908,1909,1910,1911), +PARTITION p478 VALUES IN (1912,1913,1914,1915), +PARTITION p479 VALUES IN (1916,1917,1918,1919), +PARTITION p480 VALUES IN (1920,1921,1922,1923), +PARTITION p481 VALUES IN (1924,1925,1926,1927), +PARTITION p482 VALUES IN (1928,1929,1930,1931), +PARTITION p483 VALUES IN (1932,1933,1934,1935), +PARTITION p484 VALUES IN (1936,1937,1938,1939), +PARTITION p485 VALUES IN (1940,1941,1942,1943), +PARTITION p486 VALUES IN (1944,1945,1946,1947), +PARTITION p487 VALUES IN (1948,1949,1950,1951), +PARTITION p488 VALUES IN (1952,1953,1954,1955), +PARTITION p489 VALUES IN (1956,1957,1958,1959), +PARTITION p490 VALUES IN (1960,1961,1962,1963), +PARTITION p491 VALUES IN (1964,1965,1966,1967), +PARTITION p492 VALUES IN (1968,1969,1970,1971), +PARTITION p493 VALUES IN (1972,1973,1974,1975), +PARTITION p494 VALUES IN (1976,1977,1978,1979), +PARTITION p495 VALUES IN (1980,1981,1982,1983), +PARTITION p496 VALUES IN (1984,1985,1986,1987), +PARTITION p497 VALUES IN (1988,1989,1990,1991), +PARTITION p498 VALUES IN (1992,1993,1994,1995), +PARTITION p499 VALUES IN (1996,1997,1998,1999), +PARTITION p500 VALUES IN (2000,2001,2002,2003), +PARTITION p501 VALUES IN (2004,2005,2006,2007), +PARTITION p502 VALUES IN (2008,2009,2010,2011), +PARTITION p503 VALUES IN (2012,2013,2014,2015), +PARTITION p504 VALUES IN (2016,2017,2018,2019), +PARTITION p505 VALUES IN (2020,2021,2022,2023), +PARTITION p506 VALUES IN (2024,2025,2026,2027), +PARTITION p507 VALUES IN (2028,2029,2030,2031), +PARTITION p508 VALUES IN (2032,2033,2034,2035), +PARTITION p509 VALUES IN (2036,2037,2038,2039), +PARTITION p510 VALUES IN (2040,2041,2042,2043), +PARTITION p511 VALUES IN (2044,2045,2046,2047), +PARTITION p512 VALUES IN (2048,2049,2050,2051), +PARTITION p513 VALUES IN (2052,2053,2054,2055), +PARTITION p514 VALUES IN (2056,2057,2058,2059), +PARTITION p515 VALUES IN (2060,2061,2062,2063), +PARTITION p516 VALUES IN (2064,2065,2066,2067), +PARTITION p517 VALUES IN (2068,2069,2070,2071), +PARTITION p518 VALUES IN (2072,2073,2074,2075), +PARTITION p519 VALUES IN (2076,2077,2078,2079), +PARTITION p520 VALUES IN (2080,2081,2082,2083), +PARTITION p521 VALUES IN (2084,2085,2086,2087), +PARTITION p522 VALUES IN (2088,2089,2090,2091), +PARTITION p523 VALUES IN (2092,2093,2094,2095), +PARTITION p524 VALUES IN (2096,2097,2098,2099), +PARTITION p525 VALUES IN (2100,2101,2102,2103), +PARTITION p526 VALUES IN (2104,2105,2106,2107), +PARTITION p527 VALUES IN (2108,2109,2110,2111), +PARTITION p528 VALUES IN (2112,2113,2114,2115), +PARTITION p529 VALUES IN (2116,2117,2118,2119), +PARTITION p530 VALUES IN (2120,2121,2122,2123), +PARTITION p531 VALUES IN (2124,2125,2126,2127), +PARTITION p532 VALUES IN (2128,2129,2130,2131), +PARTITION p533 VALUES IN (2132,2133,2134,2135), +PARTITION p534 VALUES IN (2136,2137,2138,2139), +PARTITION p535 VALUES IN (2140,2141,2142,2143), +PARTITION p536 VALUES IN (2144,2145,2146,2147), +PARTITION p537 VALUES IN (2148,2149,2150,2151), +PARTITION p538 VALUES IN (2152,2153,2154,2155), +PARTITION p539 VALUES IN (2156,2157,2158,2159), +PARTITION p540 VALUES IN (2160,2161,2162,2163), +PARTITION p541 VALUES IN (2164,2165,2166,2167), +PARTITION p542 VALUES IN (2168,2169,2170,2171), +PARTITION p543 VALUES IN (2172,2173,2174,2175), +PARTITION p544 VALUES IN (2176,2177,2178,2179), +PARTITION p545 VALUES IN (2180,2181,2182,2183), +PARTITION p546 VALUES IN (2184,2185,2186,2187), +PARTITION p547 VALUES IN (2188,2189,2190,2191), +PARTITION p548 VALUES IN (2192,2193,2194,2195), +PARTITION p549 VALUES IN (2196,2197,2198,2199), +PARTITION p550 VALUES IN (2200,2201,2202,2203), +PARTITION p551 VALUES IN (2204,2205,2206,2207), +PARTITION p552 VALUES IN (2208,2209,2210,2211), +PARTITION p553 VALUES IN (2212,2213,2214,2215), +PARTITION p554 VALUES IN (2216,2217,2218,2219), +PARTITION p555 VALUES IN (2220,2221,2222,2223), +PARTITION p556 VALUES IN (2224,2225,2226,2227), +PARTITION p557 VALUES IN (2228,2229,2230,2231), +PARTITION p558 VALUES IN (2232,2233,2234,2235), +PARTITION p559 VALUES IN (2236,2237,2238,2239), +PARTITION p560 VALUES IN (2240,2241,2242,2243), +PARTITION p561 VALUES IN (2244,2245,2246,2247), +PARTITION p562 VALUES IN (2248,2249,2250,2251), +PARTITION p563 VALUES IN (2252,2253,2254,2255), +PARTITION p564 VALUES IN (2256,2257,2258,2259), +PARTITION p565 VALUES IN (2260,2261,2262,2263), +PARTITION p566 VALUES IN (2264,2265,2266,2267), +PARTITION p567 VALUES IN (2268,2269,2270,2271), +PARTITION p568 VALUES IN (2272,2273,2274,2275), +PARTITION p569 VALUES IN (2276,2277,2278,2279), +PARTITION p570 VALUES IN (2280,2281,2282,2283), +PARTITION p571 VALUES IN (2284,2285,2286,2287), +PARTITION p572 VALUES IN (2288,2289,2290,2291), +PARTITION p573 VALUES IN (2292,2293,2294,2295), +PARTITION p574 VALUES IN (2296,2297,2298,2299), +PARTITION p575 VALUES IN (2300,2301,2302,2303), +PARTITION p576 VALUES IN (2304,2305,2306,2307), +PARTITION p577 VALUES IN (2308,2309,2310,2311), +PARTITION p578 VALUES IN (2312,2313,2314,2315), +PARTITION p579 VALUES IN (2316,2317,2318,2319), +PARTITION p580 VALUES IN (2320,2321,2322,2323), +PARTITION p581 VALUES IN (2324,2325,2326,2327), +PARTITION p582 VALUES IN (2328,2329,2330,2331), +PARTITION p583 VALUES IN (2332,2333,2334,2335), +PARTITION p584 VALUES IN (2336,2337,2338,2339), +PARTITION p585 VALUES IN (2340,2341,2342,2343), +PARTITION p586 VALUES IN (2344,2345,2346,2347), +PARTITION p587 VALUES IN (2348,2349,2350,2351), +PARTITION p588 VALUES IN (2352,2353,2354,2355), +PARTITION p589 VALUES IN (2356,2357,2358,2359), +PARTITION p590 VALUES IN (2360,2361,2362,2363), +PARTITION p591 VALUES IN (2364,2365,2366,2367), +PARTITION p592 VALUES IN (2368,2369,2370,2371), +PARTITION p593 VALUES IN (2372,2373,2374,2375), +PARTITION p594 VALUES IN (2376,2377,2378,2379), +PARTITION p595 VALUES IN (2380,2381,2382,2383), +PARTITION p596 VALUES IN (2384,2385,2386,2387), +PARTITION p597 VALUES IN (2388,2389,2390,2391), +PARTITION p598 VALUES IN (2392,2393,2394,2395), +PARTITION p599 VALUES IN (2396,2397,2398,2399), +PARTITION p600 VALUES IN (2400,2401,2402,2403), +PARTITION p601 VALUES IN (2404,2405,2406,2407), +PARTITION p602 VALUES IN (2408,2409,2410,2411), +PARTITION p603 VALUES IN (2412,2413,2414,2415), +PARTITION p604 VALUES IN (2416,2417,2418,2419), +PARTITION p605 VALUES IN (2420,2421,2422,2423), +PARTITION p606 VALUES IN (2424,2425,2426,2427), +PARTITION p607 VALUES IN (2428,2429,2430,2431), +PARTITION p608 VALUES IN (2432,2433,2434,2435), +PARTITION p609 VALUES IN (2436,2437,2438,2439), +PARTITION p610 VALUES IN (2440,2441,2442,2443), +PARTITION p611 VALUES IN (2444,2445,2446,2447), +PARTITION p612 VALUES IN (2448,2449,2450,2451), +PARTITION p613 VALUES IN (2452,2453,2454,2455), +PARTITION p614 VALUES IN (2456,2457,2458,2459), +PARTITION p615 VALUES IN (2460,2461,2462,2463), +PARTITION p616 VALUES IN (2464,2465,2466,2467), +PARTITION p617 VALUES IN (2468,2469,2470,2471), +PARTITION p618 VALUES IN (2472,2473,2474,2475), +PARTITION p619 VALUES IN (2476,2477,2478,2479), +PARTITION p620 VALUES IN (2480,2481,2482,2483), +PARTITION p621 VALUES IN (2484,2485,2486,2487), +PARTITION p622 VALUES IN (2488,2489,2490,2491), +PARTITION p623 VALUES IN (2492,2493,2494,2495), +PARTITION p624 VALUES IN (2496,2497,2498,2499), +PARTITION p625 VALUES IN (2500,2501,2502,2503), +PARTITION p626 VALUES IN (2504,2505,2506,2507), +PARTITION p627 VALUES IN (2508,2509,2510,2511), +PARTITION p628 VALUES IN (2512,2513,2514,2515), +PARTITION p629 VALUES IN (2516,2517,2518,2519), +PARTITION p630 VALUES IN (2520,2521,2522,2523), +PARTITION p631 VALUES IN (2524,2525,2526,2527), +PARTITION p632 VALUES IN (2528,2529,2530,2531), +PARTITION p633 VALUES IN (2532,2533,2534,2535), +PARTITION p634 VALUES IN (2536,2537,2538,2539), +PARTITION p635 VALUES IN (2540,2541,2542,2543), +PARTITION p636 VALUES IN (2544,2545,2546,2547), +PARTITION p637 VALUES IN (2548,2549,2550,2551), +PARTITION p638 VALUES IN (2552,2553,2554,2555), +PARTITION p639 VALUES IN (2556,2557,2558,2559), +PARTITION p640 VALUES IN (2560,2561,2562,2563), +PARTITION p641 VALUES IN (2564,2565,2566,2567), +PARTITION p642 VALUES IN (2568,2569,2570,2571), +PARTITION p643 VALUES IN (2572,2573,2574,2575), +PARTITION p644 VALUES IN (2576,2577,2578,2579), +PARTITION p645 VALUES IN (2580,2581,2582,2583), +PARTITION p646 VALUES IN (2584,2585,2586,2587), +PARTITION p647 VALUES IN (2588,2589,2590,2591), +PARTITION p648 VALUES IN (2592,2593,2594,2595), +PARTITION p649 VALUES IN (2596,2597,2598,2599), +PARTITION p650 VALUES IN (2600,2601,2602,2603), +PARTITION p651 VALUES IN (2604,2605,2606,2607), +PARTITION p652 VALUES IN (2608,2609,2610,2611), +PARTITION p653 VALUES IN (2612,2613,2614,2615), +PARTITION p654 VALUES IN (2616,2617,2618,2619), +PARTITION p655 VALUES IN (2620,2621,2622,2623), +PARTITION p656 VALUES IN (2624,2625,2626,2627), +PARTITION p657 VALUES IN (2628,2629,2630,2631), +PARTITION p658 VALUES IN (2632,2633,2634,2635), +PARTITION p659 VALUES IN (2636,2637,2638,2639), +PARTITION p660 VALUES IN (2640,2641,2642,2643), +PARTITION p661 VALUES IN (2644,2645,2646,2647), +PARTITION p662 VALUES IN (2648,2649,2650,2651), +PARTITION p663 VALUES IN (2652,2653,2654,2655), +PARTITION p664 VALUES IN (2656,2657,2658,2659), +PARTITION p665 VALUES IN (2660,2661,2662,2663), +PARTITION p666 VALUES IN (2664,2665,2666,2667), +PARTITION p667 VALUES IN (2668,2669,2670,2671), +PARTITION p668 VALUES IN (2672,2673,2674,2675), +PARTITION p669 VALUES IN (2676,2677,2678,2679), +PARTITION p670 VALUES IN (2680,2681,2682,2683), +PARTITION p671 VALUES IN (2684,2685,2686,2687), +PARTITION p672 VALUES IN (2688,2689,2690,2691), +PARTITION p673 VALUES IN (2692,2693,2694,2695), +PARTITION p674 VALUES IN (2696,2697,2698,2699), +PARTITION p675 VALUES IN (2700,2701,2702,2703), +PARTITION p676 VALUES IN (2704,2705,2706,2707), +PARTITION p677 VALUES IN (2708,2709,2710,2711), +PARTITION p678 VALUES IN (2712,2713,2714,2715), +PARTITION p679 VALUES IN (2716,2717,2718,2719), +PARTITION p680 VALUES IN (2720,2721,2722,2723), +PARTITION p681 VALUES IN (2724,2725,2726,2727), +PARTITION p682 VALUES IN (2728,2729,2730,2731), +PARTITION p683 VALUES IN (2732,2733,2734,2735), +PARTITION p684 VALUES IN (2736,2737,2738,2739), +PARTITION p685 VALUES IN (2740,2741,2742,2743), +PARTITION p686 VALUES IN (2744,2745,2746,2747), +PARTITION p687 VALUES IN (2748,2749,2750,2751), +PARTITION p688 VALUES IN (2752,2753,2754,2755), +PARTITION p689 VALUES IN (2756,2757,2758,2759), +PARTITION p690 VALUES IN (2760,2761,2762,2763), +PARTITION p691 VALUES IN (2764,2765,2766,2767), +PARTITION p692 VALUES IN (2768,2769,2770,2771), +PARTITION p693 VALUES IN (2772,2773,2774,2775), +PARTITION p694 VALUES IN (2776,2777,2778,2779), +PARTITION p695 VALUES IN (2780,2781,2782,2783), +PARTITION p696 VALUES IN (2784,2785,2786,2787), +PARTITION p697 VALUES IN (2788,2789,2790,2791), +PARTITION p698 VALUES IN (2792,2793,2794,2795), +PARTITION p699 VALUES IN (2796,2797,2798,2799), +PARTITION p700 VALUES IN (2800,2801,2802,2803), +PARTITION p701 VALUES IN (2804,2805,2806,2807), +PARTITION p702 VALUES IN (2808,2809,2810,2811), +PARTITION p703 VALUES IN (2812,2813,2814,2815), +PARTITION p704 VALUES IN (2816,2817,2818,2819), +PARTITION p705 VALUES IN (2820,2821,2822,2823), +PARTITION p706 VALUES IN (2824,2825,2826,2827), +PARTITION p707 VALUES IN (2828,2829,2830,2831), +PARTITION p708 VALUES IN (2832,2833,2834,2835), +PARTITION p709 VALUES IN (2836,2837,2838,2839), +PARTITION p710 VALUES IN (2840,2841,2842,2843), +PARTITION p711 VALUES IN (2844,2845,2846,2847), +PARTITION p712 VALUES IN (2848,2849,2850,2851), +PARTITION p713 VALUES IN (2852,2853,2854,2855), +PARTITION p714 VALUES IN (2856,2857,2858,2859), +PARTITION p715 VALUES IN (2860,2861,2862,2863), +PARTITION p716 VALUES IN (2864,2865,2866,2867), +PARTITION p717 VALUES IN (2868,2869,2870,2871), +PARTITION p718 VALUES IN (2872,2873,2874,2875), +PARTITION p719 VALUES IN (2876,2877,2878,2879), +PARTITION p720 VALUES IN (2880,2881,2882,2883), +PARTITION p721 VALUES IN (2884,2885,2886,2887), +PARTITION p722 VALUES IN (2888,2889,2890,2891), +PARTITION p723 VALUES IN (2892,2893,2894,2895), +PARTITION p724 VALUES IN (2896,2897,2898,2899), +PARTITION p725 VALUES IN (2900,2901,2902,2903), +PARTITION p726 VALUES IN (2904,2905,2906,2907), +PARTITION p727 VALUES IN (2908,2909,2910,2911), +PARTITION p728 VALUES IN (2912,2913,2914,2915), +PARTITION p729 VALUES IN (2916,2917,2918,2919), +PARTITION p730 VALUES IN (2920,2921,2922,2923), +PARTITION p731 VALUES IN (2924,2925,2926,2927), +PARTITION p732 VALUES IN (2928,2929,2930,2931), +PARTITION p733 VALUES IN (2932,2933,2934,2935), +PARTITION p734 VALUES IN (2936,2937,2938,2939), +PARTITION p735 VALUES IN (2940,2941,2942,2943), +PARTITION p736 VALUES IN (2944,2945,2946,2947), +PARTITION p737 VALUES IN (2948,2949,2950,2951), +PARTITION p738 VALUES IN (2952,2953,2954,2955), +PARTITION p739 VALUES IN (2956,2957,2958,2959), +PARTITION p740 VALUES IN (2960,2961,2962,2963), +PARTITION p741 VALUES IN (2964,2965,2966,2967), +PARTITION p742 VALUES IN (2968,2969,2970,2971), +PARTITION p743 VALUES IN (2972,2973,2974,2975), +PARTITION p744 VALUES IN (2976,2977,2978,2979), +PARTITION p745 VALUES IN (2980,2981,2982,2983), +PARTITION p746 VALUES IN (2984,2985,2986,2987), +PARTITION p747 VALUES IN (2988,2989,2990,2991), +PARTITION p748 VALUES IN (2992,2993,2994,2995), +PARTITION p749 VALUES IN (2996,2997,2998,2999), +PARTITION p750 VALUES IN (3000,3001,3002,3003), +PARTITION p751 VALUES IN (3004,3005,3006,3007), +PARTITION p752 VALUES IN (3008,3009,3010,3011), +PARTITION p753 VALUES IN (3012,3013,3014,3015), +PARTITION p754 VALUES IN (3016,3017,3018,3019), +PARTITION p755 VALUES IN (3020,3021,3022,3023), +PARTITION p756 VALUES IN (3024,3025,3026,3027), +PARTITION p757 VALUES IN (3028,3029,3030,3031), +PARTITION p758 VALUES IN (3032,3033,3034,3035), +PARTITION p759 VALUES IN (3036,3037,3038,3039), +PARTITION p760 VALUES IN (3040,3041,3042,3043), +PARTITION p761 VALUES IN (3044,3045,3046,3047), +PARTITION p762 VALUES IN (3048,3049,3050,3051), +PARTITION p763 VALUES IN (3052,3053,3054,3055), +PARTITION p764 VALUES IN (3056,3057,3058,3059), +PARTITION p765 VALUES IN (3060,3061,3062,3063), +PARTITION p766 VALUES IN (3064,3065,3066,3067), +PARTITION p767 VALUES IN (3068,3069,3070,3071), +PARTITION p768 VALUES IN (3072,3073,3074,3075), +PARTITION p769 VALUES IN (3076,3077,3078,3079), +PARTITION p770 VALUES IN (3080,3081,3082,3083), +PARTITION p771 VALUES IN (3084,3085,3086,3087), +PARTITION p772 VALUES IN (3088,3089,3090,3091), +PARTITION p773 VALUES IN (3092,3093,3094,3095), +PARTITION p774 VALUES IN (3096,3097,3098,3099), +PARTITION p775 VALUES IN (3100,3101,3102,3103), +PARTITION p776 VALUES IN (3104,3105,3106,3107), +PARTITION p777 VALUES IN (3108,3109,3110,3111), +PARTITION p778 VALUES IN (3112,3113,3114,3115), +PARTITION p779 VALUES IN (3116,3117,3118,3119), +PARTITION p780 VALUES IN (3120,3121,3122,3123), +PARTITION p781 VALUES IN (3124,3125,3126,3127), +PARTITION p782 VALUES IN (3128,3129,3130,3131), +PARTITION p783 VALUES IN (3132,3133,3134,3135), +PARTITION p784 VALUES IN (3136,3137,3138,3139), +PARTITION p785 VALUES IN (3140,3141,3142,3143), +PARTITION p786 VALUES IN (3144,3145,3146,3147), +PARTITION p787 VALUES IN (3148,3149,3150,3151), +PARTITION p788 VALUES IN (3152,3153,3154,3155), +PARTITION p789 VALUES IN (3156,3157,3158,3159), +PARTITION p790 VALUES IN (3160,3161,3162,3163), +PARTITION p791 VALUES IN (3164,3165,3166,3167), +PARTITION p792 VALUES IN (3168,3169,3170,3171), +PARTITION p793 VALUES IN (3172,3173,3174,3175), +PARTITION p794 VALUES IN (3176,3177,3178,3179), +PARTITION p795 VALUES IN (3180,3181,3182,3183), +PARTITION p796 VALUES IN (3184,3185,3186,3187), +PARTITION p797 VALUES IN (3188,3189,3190,3191), +PARTITION p798 VALUES IN (3192,3193,3194,3195), +PARTITION p799 VALUES IN (3196,3197,3198,3199), +PARTITION p800 VALUES IN (3200,3201,3202,3203), +PARTITION p801 VALUES IN (3204,3205,3206,3207), +PARTITION p802 VALUES IN (3208,3209,3210,3211), +PARTITION p803 VALUES IN (3212,3213,3214,3215), +PARTITION p804 VALUES IN (3216,3217,3218,3219), +PARTITION p805 VALUES IN (3220,3221,3222,3223), +PARTITION p806 VALUES IN (3224,3225,3226,3227), +PARTITION p807 VALUES IN (3228,3229,3230,3231), +PARTITION p808 VALUES IN (3232,3233,3234,3235), +PARTITION p809 VALUES IN (3236,3237,3238,3239), +PARTITION p810 VALUES IN (3240,3241,3242,3243), +PARTITION p811 VALUES IN (3244,3245,3246,3247), +PARTITION p812 VALUES IN (3248,3249,3250,3251), +PARTITION p813 VALUES IN (3252,3253,3254,3255), +PARTITION p814 VALUES IN (3256,3257,3258,3259), +PARTITION p815 VALUES IN (3260,3261,3262,3263), +PARTITION p816 VALUES IN (3264,3265,3266,3267), +PARTITION p817 VALUES IN (3268,3269,3270,3271), +PARTITION p818 VALUES IN (3272,3273,3274,3275), +PARTITION p819 VALUES IN (3276,3277,3278,3279), +PARTITION p820 VALUES IN (3280,3281,3282,3283), +PARTITION p821 VALUES IN (3284,3285,3286,3287), +PARTITION p822 VALUES IN (3288,3289,3290,3291), +PARTITION p823 VALUES IN (3292,3293,3294,3295), +PARTITION p824 VALUES IN (3296,3297,3298,3299), +PARTITION p825 VALUES IN (3300,3301,3302,3303), +PARTITION p826 VALUES IN (3304,3305,3306,3307), +PARTITION p827 VALUES IN (3308,3309,3310,3311), +PARTITION p828 VALUES IN (3312,3313,3314,3315), +PARTITION p829 VALUES IN (3316,3317,3318,3319), +PARTITION p830 VALUES IN (3320,3321,3322,3323), +PARTITION p831 VALUES IN (3324,3325,3326,3327), +PARTITION p832 VALUES IN (3328,3329,3330,3331), +PARTITION p833 VALUES IN (3332,3333,3334,3335), +PARTITION p834 VALUES IN (3336,3337,3338,3339), +PARTITION p835 VALUES IN (3340,3341,3342,3343), +PARTITION p836 VALUES IN (3344,3345,3346,3347), +PARTITION p837 VALUES IN (3348,3349,3350,3351), +PARTITION p838 VALUES IN (3352,3353,3354,3355), +PARTITION p839 VALUES IN (3356,3357,3358,3359), +PARTITION p840 VALUES IN (3360,3361,3362,3363), +PARTITION p841 VALUES IN (3364,3365,3366,3367), +PARTITION p842 VALUES IN (3368,3369,3370,3371), +PARTITION p843 VALUES IN (3372,3373,3374,3375), +PARTITION p844 VALUES IN (3376,3377,3378,3379), +PARTITION p845 VALUES IN (3380,3381,3382,3383), +PARTITION p846 VALUES IN (3384,3385,3386,3387), +PARTITION p847 VALUES IN (3388,3389,3390,3391), +PARTITION p848 VALUES IN (3392,3393,3394,3395), +PARTITION p849 VALUES IN (3396,3397,3398,3399), +PARTITION p850 VALUES IN (3400,3401,3402,3403), +PARTITION p851 VALUES IN (3404,3405,3406,3407), +PARTITION p852 VALUES IN (3408,3409,3410,3411), +PARTITION p853 VALUES IN (3412,3413,3414,3415), +PARTITION p854 VALUES IN (3416,3417,3418,3419), +PARTITION p855 VALUES IN (3420,3421,3422,3423), +PARTITION p856 VALUES IN (3424,3425,3426,3427), +PARTITION p857 VALUES IN (3428,3429,3430,3431), +PARTITION p858 VALUES IN (3432,3433,3434,3435), +PARTITION p859 VALUES IN (3436,3437,3438,3439), +PARTITION p860 VALUES IN (3440,3441,3442,3443), +PARTITION p861 VALUES IN (3444,3445,3446,3447), +PARTITION p862 VALUES IN (3448,3449,3450,3451), +PARTITION p863 VALUES IN (3452,3453,3454,3455), +PARTITION p864 VALUES IN (3456,3457,3458,3459), +PARTITION p865 VALUES IN (3460,3461,3462,3463), +PARTITION p866 VALUES IN (3464,3465,3466,3467), +PARTITION p867 VALUES IN (3468,3469,3470,3471), +PARTITION p868 VALUES IN (3472,3473,3474,3475), +PARTITION p869 VALUES IN (3476,3477,3478,3479), +PARTITION p870 VALUES IN (3480,3481,3482,3483), +PARTITION p871 VALUES IN (3484,3485,3486,3487), +PARTITION p872 VALUES IN (3488,3489,3490,3491), +PARTITION p873 VALUES IN (3492,3493,3494,3495), +PARTITION p874 VALUES IN (3496,3497,3498,3499), +PARTITION p875 VALUES IN (3500,3501,3502,3503), +PARTITION p876 VALUES IN (3504,3505,3506,3507), +PARTITION p877 VALUES IN (3508,3509,3510,3511), +PARTITION p878 VALUES IN (3512,3513,3514,3515), +PARTITION p879 VALUES IN (3516,3517,3518,3519), +PARTITION p880 VALUES IN (3520,3521,3522,3523), +PARTITION p881 VALUES IN (3524,3525,3526,3527), +PARTITION p882 VALUES IN (3528,3529,3530,3531), +PARTITION p883 VALUES IN (3532,3533,3534,3535), +PARTITION p884 VALUES IN (3536,3537,3538,3539), +PARTITION p885 VALUES IN (3540,3541,3542,3543), +PARTITION p886 VALUES IN (3544,3545,3546,3547), +PARTITION p887 VALUES IN (3548,3549,3550,3551), +PARTITION p888 VALUES IN (3552,3553,3554,3555), +PARTITION p889 VALUES IN (3556,3557,3558,3559), +PARTITION p890 VALUES IN (3560,3561,3562,3563), +PARTITION p891 VALUES IN (3564,3565,3566,3567), +PARTITION p892 VALUES IN (3568,3569,3570,3571), +PARTITION p893 VALUES IN (3572,3573,3574,3575), +PARTITION p894 VALUES IN (3576,3577,3578,3579), +PARTITION p895 VALUES IN (3580,3581,3582,3583), +PARTITION p896 VALUES IN (3584,3585,3586,3587), +PARTITION p897 VALUES IN (3588,3589,3590,3591), +PARTITION p898 VALUES IN (3592,3593,3594,3595), +PARTITION p899 VALUES IN (3596,3597,3598,3599), +PARTITION p900 VALUES IN (3600,3601,3602,3603), +PARTITION p901 VALUES IN (3604,3605,3606,3607), +PARTITION p902 VALUES IN (3608,3609,3610,3611), +PARTITION p903 VALUES IN (3612,3613,3614,3615), +PARTITION p904 VALUES IN (3616,3617,3618,3619), +PARTITION p905 VALUES IN (3620,3621,3622,3623), +PARTITION p906 VALUES IN (3624,3625,3626,3627), +PARTITION p907 VALUES IN (3628,3629,3630,3631), +PARTITION p908 VALUES IN (3632,3633,3634,3635), +PARTITION p909 VALUES IN (3636,3637,3638,3639), +PARTITION p910 VALUES IN (3640,3641,3642,3643), +PARTITION p911 VALUES IN (3644,3645,3646,3647), +PARTITION p912 VALUES IN (3648,3649,3650,3651), +PARTITION p913 VALUES IN (3652,3653,3654,3655), +PARTITION p914 VALUES IN (3656,3657,3658,3659), +PARTITION p915 VALUES IN (3660,3661,3662,3663), +PARTITION p916 VALUES IN (3664,3665,3666,3667), +PARTITION p917 VALUES IN (3668,3669,3670,3671), +PARTITION p918 VALUES IN (3672,3673,3674,3675), +PARTITION p919 VALUES IN (3676,3677,3678,3679), +PARTITION p920 VALUES IN (3680,3681,3682,3683), +PARTITION p921 VALUES IN (3684,3685,3686,3687), +PARTITION p922 VALUES IN (3688,3689,3690,3691), +PARTITION p923 VALUES IN (3692,3693,3694,3695), +PARTITION p924 VALUES IN (3696,3697,3698,3699), +PARTITION p925 VALUES IN (3700,3701,3702,3703), +PARTITION p926 VALUES IN (3704,3705,3706,3707), +PARTITION p927 VALUES IN (3708,3709,3710,3711), +PARTITION p928 VALUES IN (3712,3713,3714,3715), +PARTITION p929 VALUES IN (3716,3717,3718,3719), +PARTITION p930 VALUES IN (3720,3721,3722,3723), +PARTITION p931 VALUES IN (3724,3725,3726,3727), +PARTITION p932 VALUES IN (3728,3729,3730,3731), +PARTITION p933 VALUES IN (3732,3733,3734,3735), +PARTITION p934 VALUES IN (3736,3737,3738,3739), +PARTITION p935 VALUES IN (3740,3741,3742,3743), +PARTITION p936 VALUES IN (3744,3745,3746,3747), +PARTITION p937 VALUES IN (3748,3749,3750,3751), +PARTITION p938 VALUES IN (3752,3753,3754,3755), +PARTITION p939 VALUES IN (3756,3757,3758,3759), +PARTITION p940 VALUES IN (3760,3761,3762,3763), +PARTITION p941 VALUES IN (3764,3765,3766,3767), +PARTITION p942 VALUES IN (3768,3769,3770,3771), +PARTITION p943 VALUES IN (3772,3773,3774,3775), +PARTITION p944 VALUES IN (3776,3777,3778,3779), +PARTITION p945 VALUES IN (3780,3781,3782,3783), +PARTITION p946 VALUES IN (3784,3785,3786,3787), +PARTITION p947 VALUES IN (3788,3789,3790,3791), +PARTITION p948 VALUES IN (3792,3793,3794,3795), +PARTITION p949 VALUES IN (3796,3797,3798,3799), +PARTITION p950 VALUES IN (3800,3801,3802,3803), +PARTITION p951 VALUES IN (3804,3805,3806,3807), +PARTITION p952 VALUES IN (3808,3809,3810,3811), +PARTITION p953 VALUES IN (3812,3813,3814,3815), +PARTITION p954 VALUES IN (3816,3817,3818,3819), +PARTITION p955 VALUES IN (3820,3821,3822,3823), +PARTITION p956 VALUES IN (3824,3825,3826,3827), +PARTITION p957 VALUES IN (3828,3829,3830,3831), +PARTITION p958 VALUES IN (3832,3833,3834,3835), +PARTITION p959 VALUES IN (3836,3837,3838,3839), +PARTITION p960 VALUES IN (3840,3841,3842,3843), +PARTITION p961 VALUES IN (3844,3845,3846,3847), +PARTITION p962 VALUES IN (3848,3849,3850,3851), +PARTITION p963 VALUES IN (3852,3853,3854,3855), +PARTITION p964 VALUES IN (3856,3857,3858,3859), +PARTITION p965 VALUES IN (3860,3861,3862,3863), +PARTITION p966 VALUES IN (3864,3865,3866,3867), +PARTITION p967 VALUES IN (3868,3869,3870,3871), +PARTITION p968 VALUES IN (3872,3873,3874,3875), +PARTITION p969 VALUES IN (3876,3877,3878,3879), +PARTITION p970 VALUES IN (3880,3881,3882,3883), +PARTITION p971 VALUES IN (3884,3885,3886,3887), +PARTITION p972 VALUES IN (3888,3889,3890,3891), +PARTITION p973 VALUES IN (3892,3893,3894,3895), +PARTITION p974 VALUES IN (3896,3897,3898,3899), +PARTITION p975 VALUES IN (3900,3901,3902,3903), +PARTITION p976 VALUES IN (3904,3905,3906,3907), +PARTITION p977 VALUES IN (3908,3909,3910,3911), +PARTITION p978 VALUES IN (3912,3913,3914,3915), +PARTITION p979 VALUES IN (3916,3917,3918,3919), +PARTITION p980 VALUES IN (3920,3921,3922,3923), +PARTITION p981 VALUES IN (3924,3925,3926,3927), +PARTITION p982 VALUES IN (3928,3929,3930,3931), +PARTITION p983 VALUES IN (3932,3933,3934,3935), +PARTITION p984 VALUES IN (3936,3937,3938,3939), +PARTITION p985 VALUES IN (3940,3941,3942,3943), +PARTITION p986 VALUES IN (3944,3945,3946,3947), +PARTITION p987 VALUES IN (3948,3949,3950,3951), +PARTITION p988 VALUES IN (3952,3953,3954,3955), +PARTITION p989 VALUES IN (3956,3957,3958,3959), +PARTITION p990 VALUES IN (3960,3961,3962,3963), +PARTITION p991 VALUES IN (3964,3965,3966,3967), +PARTITION p992 VALUES IN (3968,3969,3970,3971), +PARTITION p993 VALUES IN (3972,3973,3974,3975), +PARTITION p994 VALUES IN (3976,3977,3978,3979), +PARTITION p995 VALUES IN (3980,3981,3982,3983), +PARTITION p996 VALUES IN (3984,3985,3986,3987), +PARTITION p997 VALUES IN (3988,3989,3990,3991), +PARTITION p998 VALUES IN (3992,3993,3994,3995), +PARTITION p999 VALUES IN (3996,3997,3998,3999), +PARTITION p1000 VALUES IN (4000,4001,4002,4003), +PARTITION p1001 VALUES IN (4004,4005,4006,4007), +PARTITION p1002 VALUES IN (4008,4009,4010,4011), +PARTITION p1003 VALUES IN (4012,4013,4014,4015), +PARTITION p1004 VALUES IN (4016,4017,4018,4019), +PARTITION p1005 VALUES IN (4020,4021,4022,4023), +PARTITION p1006 VALUES IN (4024,4025,4026,4027), +PARTITION p1007 VALUES IN (4028,4029,4030,4031), +PARTITION p1008 VALUES IN (4032,4033,4034,4035), +PARTITION p1009 VALUES IN (4036,4037,4038,4039), +PARTITION p1010 VALUES IN (4040,4041,4042,4043), +PARTITION p1011 VALUES IN (4044,4045,4046,4047), +PARTITION p1012 VALUES IN (4048,4049,4050,4051), +PARTITION p1013 VALUES IN (4052,4053,4054,4055), +PARTITION p1014 VALUES IN (4056,4057,4058,4059), +PARTITION p1015 VALUES IN (4060,4061,4062,4063), +PARTITION p1016 VALUES IN (4064,4065,4066,4067), +PARTITION p1017 VALUES IN (4068,4069,4070,4071), +PARTITION p1018 VALUES IN (4072,4073,4074,4075), +PARTITION p1019 VALUES IN (4076,4077,4078,4079), +PARTITION p1020 VALUES IN (4080,4081,4082,4083), +PARTITION p1021 VALUES IN (4084,4085,4086,4087), +PARTITION p1022 VALUES IN (4088,4089,4090,4091), +PARTITION p1023 VALUES IN (4092,4093,4094,4095), +PARTITION p1024 VALUES IN (4096,4097,4098,4099), +PARTITION p1025 VALUES IN (4100,4101,4102,4103), +PARTITION p1026 VALUES IN (4104,4105,4106,4107), +PARTITION p1027 VALUES IN (4108,4109,4110,4111), +PARTITION p1028 VALUES IN (4112,4113,4114,4115), +PARTITION p1029 VALUES IN (4116,4117,4118,4119), +PARTITION p1030 VALUES IN (4120,4121,4122,4123), +PARTITION p1031 VALUES IN (4124,4125,4126,4127), +PARTITION p1032 VALUES IN (4128,4129,4130,4131), +PARTITION p1033 VALUES IN (4132,4133,4134,4135), +PARTITION p1034 VALUES IN (4136,4137,4138,4139), +PARTITION p1035 VALUES IN (4140,4141,4142,4143), +PARTITION p1036 VALUES IN (4144,4145,4146,4147), +PARTITION p1037 VALUES IN (4148,4149,4150,4151), +PARTITION p1038 VALUES IN (4152,4153,4154,4155), +PARTITION p1039 VALUES IN (4156,4157,4158,4159), +PARTITION p1040 VALUES IN (4160,4161,4162,4163), +PARTITION p1041 VALUES IN (4164,4165,4166,4167), +PARTITION p1042 VALUES IN (4168,4169,4170,4171), +PARTITION p1043 VALUES IN (4172,4173,4174,4175), +PARTITION p1044 VALUES IN (4176,4177,4178,4179), +PARTITION p1045 VALUES IN (4180,4181,4182,4183), +PARTITION p1046 VALUES IN (4184,4185,4186,4187), +PARTITION p1047 VALUES IN (4188,4189,4190,4191), +PARTITION p1048 VALUES IN (4192,4193,4194,4195), +PARTITION p1049 VALUES IN (4196,4197,4198,4199), +PARTITION p1050 VALUES IN (4200,4201,4202,4203), +PARTITION p1051 VALUES IN (4204,4205,4206,4207), +PARTITION p1052 VALUES IN (4208,4209,4210,4211), +PARTITION p1053 VALUES IN (4212,4213,4214,4215), +PARTITION p1054 VALUES IN (4216,4217,4218,4219), +PARTITION p1055 VALUES IN (4220,4221,4222,4223), +PARTITION p1056 VALUES IN (4224,4225,4226,4227), +PARTITION p1057 VALUES IN (4228,4229,4230,4231), +PARTITION p1058 VALUES IN (4232,4233,4234,4235), +PARTITION p1059 VALUES IN (4236,4237,4238,4239), +PARTITION p1060 VALUES IN (4240,4241,4242,4243), +PARTITION p1061 VALUES IN (4244,4245,4246,4247), +PARTITION p1062 VALUES IN (4248,4249,4250,4251), +PARTITION p1063 VALUES IN (4252,4253,4254,4255), +PARTITION p1064 VALUES IN (4256,4257,4258,4259), +PARTITION p1065 VALUES IN (4260,4261,4262,4263), +PARTITION p1066 VALUES IN (4264,4265,4266,4267), +PARTITION p1067 VALUES IN (4268,4269,4270,4271), +PARTITION p1068 VALUES IN (4272,4273,4274,4275), +PARTITION p1069 VALUES IN (4276,4277,4278,4279), +PARTITION p1070 VALUES IN (4280,4281,4282,4283), +PARTITION p1071 VALUES IN (4284,4285,4286,4287), +PARTITION p1072 VALUES IN (4288,4289,4290,4291), +PARTITION p1073 VALUES IN (4292,4293,4294,4295), +PARTITION p1074 VALUES IN (4296,4297,4298,4299), +PARTITION p1075 VALUES IN (4300,4301,4302,4303), +PARTITION p1076 VALUES IN (4304,4305,4306,4307), +PARTITION p1077 VALUES IN (4308,4309,4310,4311), +PARTITION p1078 VALUES IN (4312,4313,4314,4315), +PARTITION p1079 VALUES IN (4316,4317,4318,4319), +PARTITION p1080 VALUES IN (4320,4321,4322,4323), +PARTITION p1081 VALUES IN (4324,4325,4326,4327), +PARTITION p1082 VALUES IN (4328,4329,4330,4331), +PARTITION p1083 VALUES IN (4332,4333,4334,4335), +PARTITION p1084 VALUES IN (4336,4337,4338,4339), +PARTITION p1085 VALUES IN (4340,4341,4342,4343), +PARTITION p1086 VALUES IN (4344,4345,4346,4347), +PARTITION p1087 VALUES IN (4348,4349,4350,4351), +PARTITION p1088 VALUES IN (4352,4353,4354,4355), +PARTITION p1089 VALUES IN (4356,4357,4358,4359), +PARTITION p1090 VALUES IN (4360,4361,4362,4363), +PARTITION p1091 VALUES IN (4364,4365,4366,4367), +PARTITION p1092 VALUES IN (4368,4369,4370,4371), +PARTITION p1093 VALUES IN (4372,4373,4374,4375), +PARTITION p1094 VALUES IN (4376,4377,4378,4379), +PARTITION p1095 VALUES IN (4380,4381,4382,4383), +PARTITION p1096 VALUES IN (4384,4385,4386,4387), +PARTITION p1097 VALUES IN (4388,4389,4390,4391), +PARTITION p1098 VALUES IN (4392,4393,4394,4395), +PARTITION p1099 VALUES IN (4396,4397,4398,4399), +PARTITION p1100 VALUES IN (4400,4401,4402,4403), +PARTITION p1101 VALUES IN (4404,4405,4406,4407), +PARTITION p1102 VALUES IN (4408,4409,4410,4411), +PARTITION p1103 VALUES IN (4412,4413,4414,4415), +PARTITION p1104 VALUES IN (4416,4417,4418,4419), +PARTITION p1105 VALUES IN (4420,4421,4422,4423), +PARTITION p1106 VALUES IN (4424,4425,4426,4427), +PARTITION p1107 VALUES IN (4428,4429,4430,4431), +PARTITION p1108 VALUES IN (4432,4433,4434,4435), +PARTITION p1109 VALUES IN (4436,4437,4438,4439), +PARTITION p1110 VALUES IN (4440,4441,4442,4443), +PARTITION p1111 VALUES IN (4444,4445,4446,4447), +PARTITION p1112 VALUES IN (4448,4449,4450,4451), +PARTITION p1113 VALUES IN (4452,4453,4454,4455), +PARTITION p1114 VALUES IN (4456,4457,4458,4459), +PARTITION p1115 VALUES IN (4460,4461,4462,4463), +PARTITION p1116 VALUES IN (4464,4465,4466,4467), +PARTITION p1117 VALUES IN (4468,4469,4470,4471), +PARTITION p1118 VALUES IN (4472,4473,4474,4475), +PARTITION p1119 VALUES IN (4476,4477,4478,4479), +PARTITION p1120 VALUES IN (4480,4481,4482,4483), +PARTITION p1121 VALUES IN (4484,4485,4486,4487), +PARTITION p1122 VALUES IN (4488,4489,4490,4491), +PARTITION p1123 VALUES IN (4492,4493,4494,4495), +PARTITION p1124 VALUES IN (4496,4497,4498,4499), +PARTITION p1125 VALUES IN (4500,4501,4502,4503), +PARTITION p1126 VALUES IN (4504,4505,4506,4507), +PARTITION p1127 VALUES IN (4508,4509,4510,4511), +PARTITION p1128 VALUES IN (4512,4513,4514,4515), +PARTITION p1129 VALUES IN (4516,4517,4518,4519), +PARTITION p1130 VALUES IN (4520,4521,4522,4523), +PARTITION p1131 VALUES IN (4524,4525,4526,4527), +PARTITION p1132 VALUES IN (4528,4529,4530,4531), +PARTITION p1133 VALUES IN (4532,4533,4534,4535), +PARTITION p1134 VALUES IN (4536,4537,4538,4539), +PARTITION p1135 VALUES IN (4540,4541,4542,4543), +PARTITION p1136 VALUES IN (4544,4545,4546,4547), +PARTITION p1137 VALUES IN (4548,4549,4550,4551), +PARTITION p1138 VALUES IN (4552,4553,4554,4555), +PARTITION p1139 VALUES IN (4556,4557,4558,4559), +PARTITION p1140 VALUES IN (4560,4561,4562,4563), +PARTITION p1141 VALUES IN (4564,4565,4566,4567), +PARTITION p1142 VALUES IN (4568,4569,4570,4571), +PARTITION p1143 VALUES IN (4572,4573,4574,4575), +PARTITION p1144 VALUES IN (4576,4577,4578,4579), +PARTITION p1145 VALUES IN (4580,4581,4582,4583), +PARTITION p1146 VALUES IN (4584,4585,4586,4587), +PARTITION p1147 VALUES IN (4588,4589,4590,4591), +PARTITION p1148 VALUES IN (4592,4593,4594,4595), +PARTITION p1149 VALUES IN (4596,4597,4598,4599), +PARTITION p1150 VALUES IN (4600,4601,4602,4603), +PARTITION p1151 VALUES IN (4604,4605,4606,4607), +PARTITION p1152 VALUES IN (4608,4609,4610,4611), +PARTITION p1153 VALUES IN (4612,4613,4614,4615), +PARTITION p1154 VALUES IN (4616,4617,4618,4619), +PARTITION p1155 VALUES IN (4620,4621,4622,4623), +PARTITION p1156 VALUES IN (4624,4625,4626,4627), +PARTITION p1157 VALUES IN (4628,4629,4630,4631), +PARTITION p1158 VALUES IN (4632,4633,4634,4635), +PARTITION p1159 VALUES IN (4636,4637,4638,4639), +PARTITION p1160 VALUES IN (4640,4641,4642,4643), +PARTITION p1161 VALUES IN (4644,4645,4646,4647), +PARTITION p1162 VALUES IN (4648,4649,4650,4651), +PARTITION p1163 VALUES IN (4652,4653,4654,4655), +PARTITION p1164 VALUES IN (4656,4657,4658,4659), +PARTITION p1165 VALUES IN (4660,4661,4662,4663), +PARTITION p1166 VALUES IN (4664,4665,4666,4667), +PARTITION p1167 VALUES IN (4668,4669,4670,4671), +PARTITION p1168 VALUES IN (4672,4673,4674,4675), +PARTITION p1169 VALUES IN (4676,4677,4678,4679), +PARTITION p1170 VALUES IN (4680,4681,4682,4683), +PARTITION p1171 VALUES IN (4684,4685,4686,4687), +PARTITION p1172 VALUES IN (4688,4689,4690,4691), +PARTITION p1173 VALUES IN (4692,4693,4694,4695), +PARTITION p1174 VALUES IN (4696,4697,4698,4699), +PARTITION p1175 VALUES IN (4700,4701,4702,4703), +PARTITION p1176 VALUES IN (4704,4705,4706,4707), +PARTITION p1177 VALUES IN (4708,4709,4710,4711), +PARTITION p1178 VALUES IN (4712,4713,4714,4715), +PARTITION p1179 VALUES IN (4716,4717,4718,4719), +PARTITION p1180 VALUES IN (4720,4721,4722,4723), +PARTITION p1181 VALUES IN (4724,4725,4726,4727), +PARTITION p1182 VALUES IN (4728,4729,4730,4731), +PARTITION p1183 VALUES IN (4732,4733,4734,4735), +PARTITION p1184 VALUES IN (4736,4737,4738,4739), +PARTITION p1185 VALUES IN (4740,4741,4742,4743), +PARTITION p1186 VALUES IN (4744,4745,4746,4747), +PARTITION p1187 VALUES IN (4748,4749,4750,4751), +PARTITION p1188 VALUES IN (4752,4753,4754,4755), +PARTITION p1189 VALUES IN (4756,4757,4758,4759), +PARTITION p1190 VALUES IN (4760,4761,4762,4763), +PARTITION p1191 VALUES IN (4764,4765,4766,4767), +PARTITION p1192 VALUES IN (4768,4769,4770,4771), +PARTITION p1193 VALUES IN (4772,4773,4774,4775), +PARTITION p1194 VALUES IN (4776,4777,4778,4779), +PARTITION p1195 VALUES IN (4780,4781,4782,4783), +PARTITION p1196 VALUES IN (4784,4785,4786,4787), +PARTITION p1197 VALUES IN (4788,4789,4790,4791), +PARTITION p1198 VALUES IN (4792,4793,4794,4795), +PARTITION p1199 VALUES IN (4796,4797,4798,4799), +PARTITION p1200 VALUES IN (4800,4801,4802,4803), +PARTITION p1201 VALUES IN (4804,4805,4806,4807), +PARTITION p1202 VALUES IN (4808,4809,4810,4811), +PARTITION p1203 VALUES IN (4812,4813,4814,4815), +PARTITION p1204 VALUES IN (4816,4817,4818,4819), +PARTITION p1205 VALUES IN (4820,4821,4822,4823), +PARTITION p1206 VALUES IN (4824,4825,4826,4827), +PARTITION p1207 VALUES IN (4828,4829,4830,4831), +PARTITION p1208 VALUES IN (4832,4833,4834,4835), +PARTITION p1209 VALUES IN (4836,4837,4838,4839), +PARTITION p1210 VALUES IN (4840,4841,4842,4843), +PARTITION p1211 VALUES IN (4844,4845,4846,4847), +PARTITION p1212 VALUES IN (4848,4849,4850,4851), +PARTITION p1213 VALUES IN (4852,4853,4854,4855), +PARTITION p1214 VALUES IN (4856,4857,4858,4859), +PARTITION p1215 VALUES IN (4860,4861,4862,4863), +PARTITION p1216 VALUES IN (4864,4865,4866,4867), +PARTITION p1217 VALUES IN (4868,4869,4870,4871), +PARTITION p1218 VALUES IN (4872,4873,4874,4875), +PARTITION p1219 VALUES IN (4876,4877,4878,4879), +PARTITION p1220 VALUES IN (4880,4881,4882,4883), +PARTITION p1221 VALUES IN (4884,4885,4886,4887), +PARTITION p1222 VALUES IN (4888,4889,4890,4891), +PARTITION p1223 VALUES IN (4892,4893,4894,4895), +PARTITION p1224 VALUES IN (4896,4897,4898,4899), +PARTITION p1225 VALUES IN (4900,4901,4902,4903), +PARTITION p1226 VALUES IN (4904,4905,4906,4907), +PARTITION p1227 VALUES IN (4908,4909,4910,4911), +PARTITION p1228 VALUES IN (4912,4913,4914,4915), +PARTITION p1229 VALUES IN (4916,4917,4918,4919), +PARTITION p1230 VALUES IN (4920,4921,4922,4923), +PARTITION p1231 VALUES IN (4924,4925,4926,4927), +PARTITION p1232 VALUES IN (4928,4929,4930,4931), +PARTITION p1233 VALUES IN (4932,4933,4934,4935), +PARTITION p1234 VALUES IN (4936,4937,4938,4939), +PARTITION p1235 VALUES IN (4940,4941,4942,4943), +PARTITION p1236 VALUES IN (4944,4945,4946,4947), +PARTITION p1237 VALUES IN (4948,4949,4950,4951), +PARTITION p1238 VALUES IN (4952,4953,4954,4955), +PARTITION p1239 VALUES IN (4956,4957,4958,4959), +PARTITION p1240 VALUES IN (4960,4961,4962,4963), +PARTITION p1241 VALUES IN (4964,4965,4966,4967), +PARTITION p1242 VALUES IN (4968,4969,4970,4971), +PARTITION p1243 VALUES IN (4972,4973,4974,4975), +PARTITION p1244 VALUES IN (4976,4977,4978,4979), +PARTITION p1245 VALUES IN (4980,4981,4982,4983), +PARTITION p1246 VALUES IN (4984,4985,4986,4987), +PARTITION p1247 VALUES IN (4988,4989,4990,4991), +PARTITION p1248 VALUES IN (4992,4993,4994,4995), +PARTITION p1249 VALUES IN (4996,4997,4998,4999), +PARTITION p1250 VALUES IN (5000,5001,5002,5003), +PARTITION p1251 VALUES IN (5004,5005,5006,5007), +PARTITION p1252 VALUES IN (5008,5009,5010,5011), +PARTITION p1253 VALUES IN (5012,5013,5014,5015), +PARTITION p1254 VALUES IN (5016,5017,5018,5019), +PARTITION p1255 VALUES IN (5020,5021,5022,5023), +PARTITION p1256 VALUES IN (5024,5025,5026,5027), +PARTITION p1257 VALUES IN (5028,5029,5030,5031), +PARTITION p1258 VALUES IN (5032,5033,5034,5035), +PARTITION p1259 VALUES IN (5036,5037,5038,5039), +PARTITION p1260 VALUES IN (5040,5041,5042,5043), +PARTITION p1261 VALUES IN (5044,5045,5046,5047), +PARTITION p1262 VALUES IN (5048,5049,5050,5051), +PARTITION p1263 VALUES IN (5052,5053,5054,5055), +PARTITION p1264 VALUES IN (5056,5057,5058,5059), +PARTITION p1265 VALUES IN (5060,5061,5062,5063), +PARTITION p1266 VALUES IN (5064,5065,5066,5067), +PARTITION p1267 VALUES IN (5068,5069,5070,5071), +PARTITION p1268 VALUES IN (5072,5073,5074,5075), +PARTITION p1269 VALUES IN (5076,5077,5078,5079), +PARTITION p1270 VALUES IN (5080,5081,5082,5083), +PARTITION p1271 VALUES IN (5084,5085,5086,5087), +PARTITION p1272 VALUES IN (5088,5089,5090,5091), +PARTITION p1273 VALUES IN (5092,5093,5094,5095), +PARTITION p1274 VALUES IN (5096,5097,5098,5099), +PARTITION p1275 VALUES IN (5100,5101,5102,5103), +PARTITION p1276 VALUES IN (5104,5105,5106,5107), +PARTITION p1277 VALUES IN (5108,5109,5110,5111), +PARTITION p1278 VALUES IN (5112,5113,5114,5115), +PARTITION p1279 VALUES IN (5116,5117,5118,5119), +PARTITION p1280 VALUES IN (5120,5121,5122,5123), +PARTITION p1281 VALUES IN (5124,5125,5126,5127), +PARTITION p1282 VALUES IN (5128,5129,5130,5131), +PARTITION p1283 VALUES IN (5132,5133,5134,5135), +PARTITION p1284 VALUES IN (5136,5137,5138,5139), +PARTITION p1285 VALUES IN (5140,5141,5142,5143), +PARTITION p1286 VALUES IN (5144,5145,5146,5147), +PARTITION p1287 VALUES IN (5148,5149,5150,5151), +PARTITION p1288 VALUES IN (5152,5153,5154,5155), +PARTITION p1289 VALUES IN (5156,5157,5158,5159), +PARTITION p1290 VALUES IN (5160,5161,5162,5163), +PARTITION p1291 VALUES IN (5164,5165,5166,5167), +PARTITION p1292 VALUES IN (5168,5169,5170,5171), +PARTITION p1293 VALUES IN (5172,5173,5174,5175), +PARTITION p1294 VALUES IN (5176,5177,5178,5179), +PARTITION p1295 VALUES IN (5180,5181,5182,5183), +PARTITION p1296 VALUES IN (5184,5185,5186,5187), +PARTITION p1297 VALUES IN (5188,5189,5190,5191), +PARTITION p1298 VALUES IN (5192,5193,5194,5195), +PARTITION p1299 VALUES IN (5196,5197,5198,5199), +PARTITION p1300 VALUES IN (5200,5201,5202,5203), +PARTITION p1301 VALUES IN (5204,5205,5206,5207), +PARTITION p1302 VALUES IN (5208,5209,5210,5211), +PARTITION p1303 VALUES IN (5212,5213,5214,5215), +PARTITION p1304 VALUES IN (5216,5217,5218,5219), +PARTITION p1305 VALUES IN (5220,5221,5222,5223), +PARTITION p1306 VALUES IN (5224,5225,5226,5227), +PARTITION p1307 VALUES IN (5228,5229,5230,5231), +PARTITION p1308 VALUES IN (5232,5233,5234,5235), +PARTITION p1309 VALUES IN (5236,5237,5238,5239), +PARTITION p1310 VALUES IN (5240,5241,5242,5243), +PARTITION p1311 VALUES IN (5244,5245,5246,5247), +PARTITION p1312 VALUES IN (5248,5249,5250,5251), +PARTITION p1313 VALUES IN (5252,5253,5254,5255), +PARTITION p1314 VALUES IN (5256,5257,5258,5259), +PARTITION p1315 VALUES IN (5260,5261,5262,5263), +PARTITION p1316 VALUES IN (5264,5265,5266,5267), +PARTITION p1317 VALUES IN (5268,5269,5270,5271), +PARTITION p1318 VALUES IN (5272,5273,5274,5275), +PARTITION p1319 VALUES IN (5276,5277,5278,5279), +PARTITION p1320 VALUES IN (5280,5281,5282,5283), +PARTITION p1321 VALUES IN (5284,5285,5286,5287), +PARTITION p1322 VALUES IN (5288,5289,5290,5291), +PARTITION p1323 VALUES IN (5292,5293,5294,5295), +PARTITION p1324 VALUES IN (5296,5297,5298,5299), +PARTITION p1325 VALUES IN (5300,5301,5302,5303), +PARTITION p1326 VALUES IN (5304,5305,5306,5307), +PARTITION p1327 VALUES IN (5308,5309,5310,5311), +PARTITION p1328 VALUES IN (5312,5313,5314,5315), +PARTITION p1329 VALUES IN (5316,5317,5318,5319), +PARTITION p1330 VALUES IN (5320,5321,5322,5323), +PARTITION p1331 VALUES IN (5324,5325,5326,5327), +PARTITION p1332 VALUES IN (5328,5329,5330,5331), +PARTITION p1333 VALUES IN (5332,5333,5334,5335), +PARTITION p1334 VALUES IN (5336,5337,5338,5339), +PARTITION p1335 VALUES IN (5340,5341,5342,5343), +PARTITION p1336 VALUES IN (5344,5345,5346,5347), +PARTITION p1337 VALUES IN (5348,5349,5350,5351), +PARTITION p1338 VALUES IN (5352,5353,5354,5355), +PARTITION p1339 VALUES IN (5356,5357,5358,5359), +PARTITION p1340 VALUES IN (5360,5361,5362,5363), +PARTITION p1341 VALUES IN (5364,5365,5366,5367), +PARTITION p1342 VALUES IN (5368,5369,5370,5371), +PARTITION p1343 VALUES IN (5372,5373,5374,5375), +PARTITION p1344 VALUES IN (5376,5377,5378,5379), +PARTITION p1345 VALUES IN (5380,5381,5382,5383), +PARTITION p1346 VALUES IN (5384,5385,5386,5387), +PARTITION p1347 VALUES IN (5388,5389,5390,5391), +PARTITION p1348 VALUES IN (5392,5393,5394,5395), +PARTITION p1349 VALUES IN (5396,5397,5398,5399), +PARTITION p1350 VALUES IN (5400,5401,5402,5403), +PARTITION p1351 VALUES IN (5404,5405,5406,5407), +PARTITION p1352 VALUES IN (5408,5409,5410,5411), +PARTITION p1353 VALUES IN (5412,5413,5414,5415), +PARTITION p1354 VALUES IN (5416,5417,5418,5419), +PARTITION p1355 VALUES IN (5420,5421,5422,5423), +PARTITION p1356 VALUES IN (5424,5425,5426,5427), +PARTITION p1357 VALUES IN (5428,5429,5430,5431), +PARTITION p1358 VALUES IN (5432,5433,5434,5435), +PARTITION p1359 VALUES IN (5436,5437,5438,5439), +PARTITION p1360 VALUES IN (5440,5441,5442,5443), +PARTITION p1361 VALUES IN (5444,5445,5446,5447), +PARTITION p1362 VALUES IN (5448,5449,5450,5451), +PARTITION p1363 VALUES IN (5452,5453,5454,5455), +PARTITION p1364 VALUES IN (5456,5457,5458,5459), +PARTITION p1365 VALUES IN (5460,5461,5462,5463), +PARTITION p1366 VALUES IN (5464,5465,5466,5467), +PARTITION p1367 VALUES IN (5468,5469,5470,5471), +PARTITION p1368 VALUES IN (5472,5473,5474,5475), +PARTITION p1369 VALUES IN (5476,5477,5478,5479), +PARTITION p1370 VALUES IN (5480,5481,5482,5483), +PARTITION p1371 VALUES IN (5484,5485,5486,5487), +PARTITION p1372 VALUES IN (5488,5489,5490,5491), +PARTITION p1373 VALUES IN (5492,5493,5494,5495), +PARTITION p1374 VALUES IN (5496,5497,5498,5499), +PARTITION p1375 VALUES IN (5500,5501,5502,5503), +PARTITION p1376 VALUES IN (5504,5505,5506,5507), +PARTITION p1377 VALUES IN (5508,5509,5510,5511), +PARTITION p1378 VALUES IN (5512,5513,5514,5515), +PARTITION p1379 VALUES IN (5516,5517,5518,5519), +PARTITION p1380 VALUES IN (5520,5521,5522,5523), +PARTITION p1381 VALUES IN (5524,5525,5526,5527), +PARTITION p1382 VALUES IN (5528,5529,5530,5531), +PARTITION p1383 VALUES IN (5532,5533,5534,5535), +PARTITION p1384 VALUES IN (5536,5537,5538,5539), +PARTITION p1385 VALUES IN (5540,5541,5542,5543), +PARTITION p1386 VALUES IN (5544,5545,5546,5547), +PARTITION p1387 VALUES IN (5548,5549,5550,5551), +PARTITION p1388 VALUES IN (5552,5553,5554,5555), +PARTITION p1389 VALUES IN (5556,5557,5558,5559), +PARTITION p1390 VALUES IN (5560,5561,5562,5563), +PARTITION p1391 VALUES IN (5564,5565,5566,5567), +PARTITION p1392 VALUES IN (5568,5569,5570,5571), +PARTITION p1393 VALUES IN (5572,5573,5574,5575), +PARTITION p1394 VALUES IN (5576,5577,5578,5579), +PARTITION p1395 VALUES IN (5580,5581,5582,5583), +PARTITION p1396 VALUES IN (5584,5585,5586,5587), +PARTITION p1397 VALUES IN (5588,5589,5590,5591), +PARTITION p1398 VALUES IN (5592,5593,5594,5595), +PARTITION p1399 VALUES IN (5596,5597,5598,5599), +PARTITION p1400 VALUES IN (5600,5601,5602,5603), +PARTITION p1401 VALUES IN (5604,5605,5606,5607), +PARTITION p1402 VALUES IN (5608,5609,5610,5611), +PARTITION p1403 VALUES IN (5612,5613,5614,5615), +PARTITION p1404 VALUES IN (5616,5617,5618,5619), +PARTITION p1405 VALUES IN (5620,5621,5622,5623), +PARTITION p1406 VALUES IN (5624,5625,5626,5627), +PARTITION p1407 VALUES IN (5628,5629,5630,5631), +PARTITION p1408 VALUES IN (5632,5633,5634,5635), +PARTITION p1409 VALUES IN (5636,5637,5638,5639), +PARTITION p1410 VALUES IN (5640,5641,5642,5643), +PARTITION p1411 VALUES IN (5644,5645,5646,5647), +PARTITION p1412 VALUES IN (5648,5649,5650,5651), +PARTITION p1413 VALUES IN (5652,5653,5654,5655), +PARTITION p1414 VALUES IN (5656,5657,5658,5659), +PARTITION p1415 VALUES IN (5660,5661,5662,5663), +PARTITION p1416 VALUES IN (5664,5665,5666,5667), +PARTITION p1417 VALUES IN (5668,5669,5670,5671), +PARTITION p1418 VALUES IN (5672,5673,5674,5675), +PARTITION p1419 VALUES IN (5676,5677,5678,5679), +PARTITION p1420 VALUES IN (5680,5681,5682,5683), +PARTITION p1421 VALUES IN (5684,5685,5686,5687), +PARTITION p1422 VALUES IN (5688,5689,5690,5691), +PARTITION p1423 VALUES IN (5692,5693,5694,5695), +PARTITION p1424 VALUES IN (5696,5697,5698,5699), +PARTITION p1425 VALUES IN (5700,5701,5702,5703), +PARTITION p1426 VALUES IN (5704,5705,5706,5707), +PARTITION p1427 VALUES IN (5708,5709,5710,5711), +PARTITION p1428 VALUES IN (5712,5713,5714,5715), +PARTITION p1429 VALUES IN (5716,5717,5718,5719), +PARTITION p1430 VALUES IN (5720,5721,5722,5723), +PARTITION p1431 VALUES IN (5724,5725,5726,5727), +PARTITION p1432 VALUES IN (5728,5729,5730,5731), +PARTITION p1433 VALUES IN (5732,5733,5734,5735), +PARTITION p1434 VALUES IN (5736,5737,5738,5739), +PARTITION p1435 VALUES IN (5740,5741,5742,5743), +PARTITION p1436 VALUES IN (5744,5745,5746,5747), +PARTITION p1437 VALUES IN (5748,5749,5750,5751), +PARTITION p1438 VALUES IN (5752,5753,5754,5755), +PARTITION p1439 VALUES IN (5756,5757,5758,5759), +PARTITION p1440 VALUES IN (5760,5761,5762,5763), +PARTITION p1441 VALUES IN (5764,5765,5766,5767), +PARTITION p1442 VALUES IN (5768,5769,5770,5771), +PARTITION p1443 VALUES IN (5772,5773,5774,5775), +PARTITION p1444 VALUES IN (5776,5777,5778,5779), +PARTITION p1445 VALUES IN (5780,5781,5782,5783), +PARTITION p1446 VALUES IN (5784,5785,5786,5787), +PARTITION p1447 VALUES IN (5788,5789,5790,5791), +PARTITION p1448 VALUES IN (5792,5793,5794,5795), +PARTITION p1449 VALUES IN (5796,5797,5798,5799), +PARTITION p1450 VALUES IN (5800,5801,5802,5803), +PARTITION p1451 VALUES IN (5804,5805,5806,5807), +PARTITION p1452 VALUES IN (5808,5809,5810,5811), +PARTITION p1453 VALUES IN (5812,5813,5814,5815), +PARTITION p1454 VALUES IN (5816,5817,5818,5819), +PARTITION p1455 VALUES IN (5820,5821,5822,5823), +PARTITION p1456 VALUES IN (5824,5825,5826,5827), +PARTITION p1457 VALUES IN (5828,5829,5830,5831), +PARTITION p1458 VALUES IN (5832,5833,5834,5835), +PARTITION p1459 VALUES IN (5836,5837,5838,5839), +PARTITION p1460 VALUES IN (5840,5841,5842,5843), +PARTITION p1461 VALUES IN (5844,5845,5846,5847), +PARTITION p1462 VALUES IN (5848,5849,5850,5851), +PARTITION p1463 VALUES IN (5852,5853,5854,5855), +PARTITION p1464 VALUES IN (5856,5857,5858,5859), +PARTITION p1465 VALUES IN (5860,5861,5862,5863), +PARTITION p1466 VALUES IN (5864,5865,5866,5867), +PARTITION p1467 VALUES IN (5868,5869,5870,5871), +PARTITION p1468 VALUES IN (5872,5873,5874,5875), +PARTITION p1469 VALUES IN (5876,5877,5878,5879), +PARTITION p1470 VALUES IN (5880,5881,5882,5883), +PARTITION p1471 VALUES IN (5884,5885,5886,5887), +PARTITION p1472 VALUES IN (5888,5889,5890,5891), +PARTITION p1473 VALUES IN (5892,5893,5894,5895), +PARTITION p1474 VALUES IN (5896,5897,5898,5899), +PARTITION p1475 VALUES IN (5900,5901,5902,5903), +PARTITION p1476 VALUES IN (5904,5905,5906,5907), +PARTITION p1477 VALUES IN (5908,5909,5910,5911), +PARTITION p1478 VALUES IN (5912,5913,5914,5915), +PARTITION p1479 VALUES IN (5916,5917,5918,5919), +PARTITION p1480 VALUES IN (5920,5921,5922,5923), +PARTITION p1481 VALUES IN (5924,5925,5926,5927), +PARTITION p1482 VALUES IN (5928,5929,5930,5931), +PARTITION p1483 VALUES IN (5932,5933,5934,5935), +PARTITION p1484 VALUES IN (5936,5937,5938,5939), +PARTITION p1485 VALUES IN (5940,5941,5942,5943), +PARTITION p1486 VALUES IN (5944,5945,5946,5947), +PARTITION p1487 VALUES IN (5948,5949,5950,5951), +PARTITION p1488 VALUES IN (5952,5953,5954,5955), +PARTITION p1489 VALUES IN (5956,5957,5958,5959), +PARTITION p1490 VALUES IN (5960,5961,5962,5963), +PARTITION p1491 VALUES IN (5964,5965,5966,5967), +PARTITION p1492 VALUES IN (5968,5969,5970,5971), +PARTITION p1493 VALUES IN (5972,5973,5974,5975), +PARTITION p1494 VALUES IN (5976,5977,5978,5979), +PARTITION p1495 VALUES IN (5980,5981,5982,5983), +PARTITION p1496 VALUES IN (5984,5985,5986,5987), +PARTITION p1497 VALUES IN (5988,5989,5990,5991), +PARTITION p1498 VALUES IN (5992,5993,5994,5995), +PARTITION p1499 VALUES IN (5996,5997,5998,5999), +PARTITION p1500 VALUES IN (6000,6001,6002,6003), +PARTITION p1501 VALUES IN (6004,6005,6006,6007), +PARTITION p1502 VALUES IN (6008,6009,6010,6011), +PARTITION p1503 VALUES IN (6012,6013,6014,6015), +PARTITION p1504 VALUES IN (6016,6017,6018,6019), +PARTITION p1505 VALUES IN (6020,6021,6022,6023), +PARTITION p1506 VALUES IN (6024,6025,6026,6027), +PARTITION p1507 VALUES IN (6028,6029,6030,6031), +PARTITION p1508 VALUES IN (6032,6033,6034,6035), +PARTITION p1509 VALUES IN (6036,6037,6038,6039), +PARTITION p1510 VALUES IN (6040,6041,6042,6043), +PARTITION p1511 VALUES IN (6044,6045,6046,6047), +PARTITION p1512 VALUES IN (6048,6049,6050,6051), +PARTITION p1513 VALUES IN (6052,6053,6054,6055), +PARTITION p1514 VALUES IN (6056,6057,6058,6059), +PARTITION p1515 VALUES IN (6060,6061,6062,6063), +PARTITION p1516 VALUES IN (6064,6065,6066,6067), +PARTITION p1517 VALUES IN (6068,6069,6070,6071), +PARTITION p1518 VALUES IN (6072,6073,6074,6075), +PARTITION p1519 VALUES IN (6076,6077,6078,6079), +PARTITION p1520 VALUES IN (6080,6081,6082,6083), +PARTITION p1521 VALUES IN (6084,6085,6086,6087), +PARTITION p1522 VALUES IN (6088,6089,6090,6091), +PARTITION p1523 VALUES IN (6092,6093,6094,6095), +PARTITION p1524 VALUES IN (6096,6097,6098,6099), +PARTITION p1525 VALUES IN (6100,6101,6102,6103), +PARTITION p1526 VALUES IN (6104,6105,6106,6107), +PARTITION p1527 VALUES IN (6108,6109,6110,6111), +PARTITION p1528 VALUES IN (6112,6113,6114,6115), +PARTITION p1529 VALUES IN (6116,6117,6118,6119), +PARTITION p1530 VALUES IN (6120,6121,6122,6123), +PARTITION p1531 VALUES IN (6124,6125,6126,6127), +PARTITION p1532 VALUES IN (6128,6129,6130,6131), +PARTITION p1533 VALUES IN (6132,6133,6134,6135), +PARTITION p1534 VALUES IN (6136,6137,6138,6139), +PARTITION p1535 VALUES IN (6140,6141,6142,6143), +PARTITION p1536 VALUES IN (6144,6145,6146,6147), +PARTITION p1537 VALUES IN (6148,6149,6150,6151), +PARTITION p1538 VALUES IN (6152,6153,6154,6155), +PARTITION p1539 VALUES IN (6156,6157,6158,6159), +PARTITION p1540 VALUES IN (6160,6161,6162,6163), +PARTITION p1541 VALUES IN (6164,6165,6166,6167), +PARTITION p1542 VALUES IN (6168,6169,6170,6171), +PARTITION p1543 VALUES IN (6172,6173,6174,6175), +PARTITION p1544 VALUES IN (6176,6177,6178,6179), +PARTITION p1545 VALUES IN (6180,6181,6182,6183), +PARTITION p1546 VALUES IN (6184,6185,6186,6187), +PARTITION p1547 VALUES IN (6188,6189,6190,6191), +PARTITION p1548 VALUES IN (6192,6193,6194,6195), +PARTITION p1549 VALUES IN (6196,6197,6198,6199), +PARTITION p1550 VALUES IN (6200,6201,6202,6203), +PARTITION p1551 VALUES IN (6204,6205,6206,6207), +PARTITION p1552 VALUES IN (6208,6209,6210,6211), +PARTITION p1553 VALUES IN (6212,6213,6214,6215), +PARTITION p1554 VALUES IN (6216,6217,6218,6219), +PARTITION p1555 VALUES IN (6220,6221,6222,6223), +PARTITION p1556 VALUES IN (6224,6225,6226,6227), +PARTITION p1557 VALUES IN (6228,6229,6230,6231), +PARTITION p1558 VALUES IN (6232,6233,6234,6235), +PARTITION p1559 VALUES IN (6236,6237,6238,6239), +PARTITION p1560 VALUES IN (6240,6241,6242,6243), +PARTITION p1561 VALUES IN (6244,6245,6246,6247), +PARTITION p1562 VALUES IN (6248,6249,6250,6251), +PARTITION p1563 VALUES IN (6252,6253,6254,6255), +PARTITION p1564 VALUES IN (6256,6257,6258,6259), +PARTITION p1565 VALUES IN (6260,6261,6262,6263), +PARTITION p1566 VALUES IN (6264,6265,6266,6267), +PARTITION p1567 VALUES IN (6268,6269,6270,6271), +PARTITION p1568 VALUES IN (6272,6273,6274,6275), +PARTITION p1569 VALUES IN (6276,6277,6278,6279), +PARTITION p1570 VALUES IN (6280,6281,6282,6283), +PARTITION p1571 VALUES IN (6284,6285,6286,6287), +PARTITION p1572 VALUES IN (6288,6289,6290,6291), +PARTITION p1573 VALUES IN (6292,6293,6294,6295), +PARTITION p1574 VALUES IN (6296,6297,6298,6299), +PARTITION p1575 VALUES IN (6300,6301,6302,6303), +PARTITION p1576 VALUES IN (6304,6305,6306,6307), +PARTITION p1577 VALUES IN (6308,6309,6310,6311), +PARTITION p1578 VALUES IN (6312,6313,6314,6315), +PARTITION p1579 VALUES IN (6316,6317,6318,6319), +PARTITION p1580 VALUES IN (6320,6321,6322,6323), +PARTITION p1581 VALUES IN (6324,6325,6326,6327), +PARTITION p1582 VALUES IN (6328,6329,6330,6331), +PARTITION p1583 VALUES IN (6332,6333,6334,6335), +PARTITION p1584 VALUES IN (6336,6337,6338,6339), +PARTITION p1585 VALUES IN (6340,6341,6342,6343), +PARTITION p1586 VALUES IN (6344,6345,6346,6347), +PARTITION p1587 VALUES IN (6348,6349,6350,6351), +PARTITION p1588 VALUES IN (6352,6353,6354,6355), +PARTITION p1589 VALUES IN (6356,6357,6358,6359), +PARTITION p1590 VALUES IN (6360,6361,6362,6363), +PARTITION p1591 VALUES IN (6364,6365,6366,6367), +PARTITION p1592 VALUES IN (6368,6369,6370,6371), +PARTITION p1593 VALUES IN (6372,6373,6374,6375), +PARTITION p1594 VALUES IN (6376,6377,6378,6379), +PARTITION p1595 VALUES IN (6380,6381,6382,6383), +PARTITION p1596 VALUES IN (6384,6385,6386,6387), +PARTITION p1597 VALUES IN (6388,6389,6390,6391), +PARTITION p1598 VALUES IN (6392,6393,6394,6395), +PARTITION p1599 VALUES IN (6396,6397,6398,6399), +PARTITION p1600 VALUES IN (6400,6401,6402,6403), +PARTITION p1601 VALUES IN (6404,6405,6406,6407), +PARTITION p1602 VALUES IN (6408,6409,6410,6411), +PARTITION p1603 VALUES IN (6412,6413,6414,6415), +PARTITION p1604 VALUES IN (6416,6417,6418,6419), +PARTITION p1605 VALUES IN (6420,6421,6422,6423), +PARTITION p1606 VALUES IN (6424,6425,6426,6427), +PARTITION p1607 VALUES IN (6428,6429,6430,6431), +PARTITION p1608 VALUES IN (6432,6433,6434,6435), +PARTITION p1609 VALUES IN (6436,6437,6438,6439), +PARTITION p1610 VALUES IN (6440,6441,6442,6443), +PARTITION p1611 VALUES IN (6444,6445,6446,6447), +PARTITION p1612 VALUES IN (6448,6449,6450,6451), +PARTITION p1613 VALUES IN (6452,6453,6454,6455), +PARTITION p1614 VALUES IN (6456,6457,6458,6459), +PARTITION p1615 VALUES IN (6460,6461,6462,6463), +PARTITION p1616 VALUES IN (6464,6465,6466,6467), +PARTITION p1617 VALUES IN (6468,6469,6470,6471), +PARTITION p1618 VALUES IN (6472,6473,6474,6475), +PARTITION p1619 VALUES IN (6476,6477,6478,6479), +PARTITION p1620 VALUES IN (6480,6481,6482,6483), +PARTITION p1621 VALUES IN (6484,6485,6486,6487), +PARTITION p1622 VALUES IN (6488,6489,6490,6491), +PARTITION p1623 VALUES IN (6492,6493,6494,6495), +PARTITION p1624 VALUES IN (6496,6497,6498,6499), +PARTITION p1625 VALUES IN (6500,6501,6502,6503), +PARTITION p1626 VALUES IN (6504,6505,6506,6507), +PARTITION p1627 VALUES IN (6508,6509,6510,6511), +PARTITION p1628 VALUES IN (6512,6513,6514,6515), +PARTITION p1629 VALUES IN (6516,6517,6518,6519), +PARTITION p1630 VALUES IN (6520,6521,6522,6523), +PARTITION p1631 VALUES IN (6524,6525,6526,6527), +PARTITION p1632 VALUES IN (6528,6529,6530,6531), +PARTITION p1633 VALUES IN (6532,6533,6534,6535), +PARTITION p1634 VALUES IN (6536,6537,6538,6539), +PARTITION p1635 VALUES IN (6540,6541,6542,6543), +PARTITION p1636 VALUES IN (6544,6545,6546,6547), +PARTITION p1637 VALUES IN (6548,6549,6550,6551), +PARTITION p1638 VALUES IN (6552,6553,6554,6555), +PARTITION p1639 VALUES IN (6556,6557,6558,6559), +PARTITION p1640 VALUES IN (6560,6561,6562,6563), +PARTITION p1641 VALUES IN (6564,6565,6566,6567), +PARTITION p1642 VALUES IN (6568,6569,6570,6571), +PARTITION p1643 VALUES IN (6572,6573,6574,6575), +PARTITION p1644 VALUES IN (6576,6577,6578,6579), +PARTITION p1645 VALUES IN (6580,6581,6582,6583), +PARTITION p1646 VALUES IN (6584,6585,6586,6587), +PARTITION p1647 VALUES IN (6588,6589,6590,6591), +PARTITION p1648 VALUES IN (6592,6593,6594,6595), +PARTITION p1649 VALUES IN (6596,6597,6598,6599), +PARTITION p1650 VALUES IN (6600,6601,6602,6603), +PARTITION p1651 VALUES IN (6604,6605,6606,6607), +PARTITION p1652 VALUES IN (6608,6609,6610,6611), +PARTITION p1653 VALUES IN (6612,6613,6614,6615), +PARTITION p1654 VALUES IN (6616,6617,6618,6619), +PARTITION p1655 VALUES IN (6620,6621,6622,6623), +PARTITION p1656 VALUES IN (6624,6625,6626,6627), +PARTITION p1657 VALUES IN (6628,6629,6630,6631), +PARTITION p1658 VALUES IN (6632,6633,6634,6635), +PARTITION p1659 VALUES IN (6636,6637,6638,6639), +PARTITION p1660 VALUES IN (6640,6641,6642,6643), +PARTITION p1661 VALUES IN (6644,6645,6646,6647), +PARTITION p1662 VALUES IN (6648,6649,6650,6651), +PARTITION p1663 VALUES IN (6652,6653,6654,6655), +PARTITION p1664 VALUES IN (6656,6657,6658,6659), +PARTITION p1665 VALUES IN (6660,6661,6662,6663), +PARTITION p1666 VALUES IN (6664,6665,6666,6667), +PARTITION p1667 VALUES IN (6668,6669,6670,6671), +PARTITION p1668 VALUES IN (6672,6673,6674,6675), +PARTITION p1669 VALUES IN (6676,6677,6678,6679), +PARTITION p1670 VALUES IN (6680,6681,6682,6683), +PARTITION p1671 VALUES IN (6684,6685,6686,6687), +PARTITION p1672 VALUES IN (6688,6689,6690,6691), +PARTITION p1673 VALUES IN (6692,6693,6694,6695), +PARTITION p1674 VALUES IN (6696,6697,6698,6699), +PARTITION p1675 VALUES IN (6700,6701,6702,6703), +PARTITION p1676 VALUES IN (6704,6705,6706,6707), +PARTITION p1677 VALUES IN (6708,6709,6710,6711), +PARTITION p1678 VALUES IN (6712,6713,6714,6715), +PARTITION p1679 VALUES IN (6716,6717,6718,6719), +PARTITION p1680 VALUES IN (6720,6721,6722,6723), +PARTITION p1681 VALUES IN (6724,6725,6726,6727), +PARTITION p1682 VALUES IN (6728,6729,6730,6731), +PARTITION p1683 VALUES IN (6732,6733,6734,6735), +PARTITION p1684 VALUES IN (6736,6737,6738,6739), +PARTITION p1685 VALUES IN (6740,6741,6742,6743), +PARTITION p1686 VALUES IN (6744,6745,6746,6747), +PARTITION p1687 VALUES IN (6748,6749,6750,6751), +PARTITION p1688 VALUES IN (6752,6753,6754,6755), +PARTITION p1689 VALUES IN (6756,6757,6758,6759), +PARTITION p1690 VALUES IN (6760,6761,6762,6763), +PARTITION p1691 VALUES IN (6764,6765,6766,6767), +PARTITION p1692 VALUES IN (6768,6769,6770,6771), +PARTITION p1693 VALUES IN (6772,6773,6774,6775), +PARTITION p1694 VALUES IN (6776,6777,6778,6779), +PARTITION p1695 VALUES IN (6780,6781,6782,6783), +PARTITION p1696 VALUES IN (6784,6785,6786,6787), +PARTITION p1697 VALUES IN (6788,6789,6790,6791), +PARTITION p1698 VALUES IN (6792,6793,6794,6795), +PARTITION p1699 VALUES IN (6796,6797,6798,6799), +PARTITION p1700 VALUES IN (6800,6801,6802,6803), +PARTITION p1701 VALUES IN (6804,6805,6806,6807), +PARTITION p1702 VALUES IN (6808,6809,6810,6811), +PARTITION p1703 VALUES IN (6812,6813,6814,6815), +PARTITION p1704 VALUES IN (6816,6817,6818,6819), +PARTITION p1705 VALUES IN (6820,6821,6822,6823), +PARTITION p1706 VALUES IN (6824,6825,6826,6827), +PARTITION p1707 VALUES IN (6828,6829,6830,6831), +PARTITION p1708 VALUES IN (6832,6833,6834,6835), +PARTITION p1709 VALUES IN (6836,6837,6838,6839), +PARTITION p1710 VALUES IN (6840,6841,6842,6843), +PARTITION p1711 VALUES IN (6844,6845,6846,6847), +PARTITION p1712 VALUES IN (6848,6849,6850,6851), +PARTITION p1713 VALUES IN (6852,6853,6854,6855), +PARTITION p1714 VALUES IN (6856,6857,6858,6859), +PARTITION p1715 VALUES IN (6860,6861,6862,6863), +PARTITION p1716 VALUES IN (6864,6865,6866,6867), +PARTITION p1717 VALUES IN (6868,6869,6870,6871), +PARTITION p1718 VALUES IN (6872,6873,6874,6875), +PARTITION p1719 VALUES IN (6876,6877,6878,6879), +PARTITION p1720 VALUES IN (6880,6881,6882,6883), +PARTITION p1721 VALUES IN (6884,6885,6886,6887), +PARTITION p1722 VALUES IN (6888,6889,6890,6891), +PARTITION p1723 VALUES IN (6892,6893,6894,6895), +PARTITION p1724 VALUES IN (6896,6897,6898,6899), +PARTITION p1725 VALUES IN (6900,6901,6902,6903), +PARTITION p1726 VALUES IN (6904,6905,6906,6907), +PARTITION p1727 VALUES IN (6908,6909,6910,6911), +PARTITION p1728 VALUES IN (6912,6913,6914,6915), +PARTITION p1729 VALUES IN (6916,6917,6918,6919), +PARTITION p1730 VALUES IN (6920,6921,6922,6923), +PARTITION p1731 VALUES IN (6924,6925,6926,6927), +PARTITION p1732 VALUES IN (6928,6929,6930,6931), +PARTITION p1733 VALUES IN (6932,6933,6934,6935), +PARTITION p1734 VALUES IN (6936,6937,6938,6939), +PARTITION p1735 VALUES IN (6940,6941,6942,6943), +PARTITION p1736 VALUES IN (6944,6945,6946,6947), +PARTITION p1737 VALUES IN (6948,6949,6950,6951), +PARTITION p1738 VALUES IN (6952,6953,6954,6955), +PARTITION p1739 VALUES IN (6956,6957,6958,6959), +PARTITION p1740 VALUES IN (6960,6961,6962,6963), +PARTITION p1741 VALUES IN (6964,6965,6966,6967), +PARTITION p1742 VALUES IN (6968,6969,6970,6971), +PARTITION p1743 VALUES IN (6972,6973,6974,6975), +PARTITION p1744 VALUES IN (6976,6977,6978,6979), +PARTITION p1745 VALUES IN (6980,6981,6982,6983), +PARTITION p1746 VALUES IN (6984,6985,6986,6987), +PARTITION p1747 VALUES IN (6988,6989,6990,6991), +PARTITION p1748 VALUES IN (6992,6993,6994,6995), +PARTITION p1749 VALUES IN (6996,6997,6998,6999), +PARTITION p1750 VALUES IN (7000,7001,7002,7003), +PARTITION p1751 VALUES IN (7004,7005,7006,7007), +PARTITION p1752 VALUES IN (7008,7009,7010,7011), +PARTITION p1753 VALUES IN (7012,7013,7014,7015), +PARTITION p1754 VALUES IN (7016,7017,7018,7019), +PARTITION p1755 VALUES IN (7020,7021,7022,7023), +PARTITION p1756 VALUES IN (7024,7025,7026,7027), +PARTITION p1757 VALUES IN (7028,7029,7030,7031), +PARTITION p1758 VALUES IN (7032,7033,7034,7035), +PARTITION p1759 VALUES IN (7036,7037,7038,7039), +PARTITION p1760 VALUES IN (7040,7041,7042,7043), +PARTITION p1761 VALUES IN (7044,7045,7046,7047), +PARTITION p1762 VALUES IN (7048,7049,7050,7051), +PARTITION p1763 VALUES IN (7052,7053,7054,7055), +PARTITION p1764 VALUES IN (7056,7057,7058,7059), +PARTITION p1765 VALUES IN (7060,7061,7062,7063), +PARTITION p1766 VALUES IN (7064,7065,7066,7067), +PARTITION p1767 VALUES IN (7068,7069,7070,7071), +PARTITION p1768 VALUES IN (7072,7073,7074,7075), +PARTITION p1769 VALUES IN (7076,7077,7078,7079), +PARTITION p1770 VALUES IN (7080,7081,7082,7083), +PARTITION p1771 VALUES IN (7084,7085,7086,7087), +PARTITION p1772 VALUES IN (7088,7089,7090,7091), +PARTITION p1773 VALUES IN (7092,7093,7094,7095), +PARTITION p1774 VALUES IN (7096,7097,7098,7099), +PARTITION p1775 VALUES IN (7100,7101,7102,7103), +PARTITION p1776 VALUES IN (7104,7105,7106,7107), +PARTITION p1777 VALUES IN (7108,7109,7110,7111), +PARTITION p1778 VALUES IN (7112,7113,7114,7115), +PARTITION p1779 VALUES IN (7116,7117,7118,7119), +PARTITION p1780 VALUES IN (7120,7121,7122,7123), +PARTITION p1781 VALUES IN (7124,7125,7126,7127), +PARTITION p1782 VALUES IN (7128,7129,7130,7131), +PARTITION p1783 VALUES IN (7132,7133,7134,7135), +PARTITION p1784 VALUES IN (7136,7137,7138,7139), +PARTITION p1785 VALUES IN (7140,7141,7142,7143), +PARTITION p1786 VALUES IN (7144,7145,7146,7147), +PARTITION p1787 VALUES IN (7148,7149,7150,7151), +PARTITION p1788 VALUES IN (7152,7153,7154,7155), +PARTITION p1789 VALUES IN (7156,7157,7158,7159), +PARTITION p1790 VALUES IN (7160,7161,7162,7163), +PARTITION p1791 VALUES IN (7164,7165,7166,7167), +PARTITION p1792 VALUES IN (7168,7169,7170,7171), +PARTITION p1793 VALUES IN (7172,7173,7174,7175), +PARTITION p1794 VALUES IN (7176,7177,7178,7179), +PARTITION p1795 VALUES IN (7180,7181,7182,7183), +PARTITION p1796 VALUES IN (7184,7185,7186,7187), +PARTITION p1797 VALUES IN (7188,7189,7190,7191), +PARTITION p1798 VALUES IN (7192,7193,7194,7195), +PARTITION p1799 VALUES IN (7196,7197,7198,7199), +PARTITION p1800 VALUES IN (7200,7201,7202,7203), +PARTITION p1801 VALUES IN (7204,7205,7206,7207), +PARTITION p1802 VALUES IN (7208,7209,7210,7211), +PARTITION p1803 VALUES IN (7212,7213,7214,7215), +PARTITION p1804 VALUES IN (7216,7217,7218,7219), +PARTITION p1805 VALUES IN (7220,7221,7222,7223), +PARTITION p1806 VALUES IN (7224,7225,7226,7227), +PARTITION p1807 VALUES IN (7228,7229,7230,7231), +PARTITION p1808 VALUES IN (7232,7233,7234,7235), +PARTITION p1809 VALUES IN (7236,7237,7238,7239), +PARTITION p1810 VALUES IN (7240,7241,7242,7243), +PARTITION p1811 VALUES IN (7244,7245,7246,7247), +PARTITION p1812 VALUES IN (7248,7249,7250,7251), +PARTITION p1813 VALUES IN (7252,7253,7254,7255), +PARTITION p1814 VALUES IN (7256,7257,7258,7259), +PARTITION p1815 VALUES IN (7260,7261,7262,7263), +PARTITION p1816 VALUES IN (7264,7265,7266,7267), +PARTITION p1817 VALUES IN (7268,7269,7270,7271), +PARTITION p1818 VALUES IN (7272,7273,7274,7275), +PARTITION p1819 VALUES IN (7276,7277,7278,7279), +PARTITION p1820 VALUES IN (7280,7281,7282,7283), +PARTITION p1821 VALUES IN (7284,7285,7286,7287), +PARTITION p1822 VALUES IN (7288,7289,7290,7291), +PARTITION p1823 VALUES IN (7292,7293,7294,7295), +PARTITION p1824 VALUES IN (7296,7297,7298,7299), +PARTITION p1825 VALUES IN (7300,7301,7302,7303), +PARTITION p1826 VALUES IN (7304,7305,7306,7307), +PARTITION p1827 VALUES IN (7308,7309,7310,7311), +PARTITION p1828 VALUES IN (7312,7313,7314,7315), +PARTITION p1829 VALUES IN (7316,7317,7318,7319), +PARTITION p1830 VALUES IN (7320,7321,7322,7323), +PARTITION p1831 VALUES IN (7324,7325,7326,7327), +PARTITION p1832 VALUES IN (7328,7329,7330,7331), +PARTITION p1833 VALUES IN (7332,7333,7334,7335), +PARTITION p1834 VALUES IN (7336,7337,7338,7339), +PARTITION p1835 VALUES IN (7340,7341,7342,7343), +PARTITION p1836 VALUES IN (7344,7345,7346,7347), +PARTITION p1837 VALUES IN (7348,7349,7350,7351), +PARTITION p1838 VALUES IN (7352,7353,7354,7355), +PARTITION p1839 VALUES IN (7356,7357,7358,7359), +PARTITION p1840 VALUES IN (7360,7361,7362,7363), +PARTITION p1841 VALUES IN (7364,7365,7366,7367), +PARTITION p1842 VALUES IN (7368,7369,7370,7371), +PARTITION p1843 VALUES IN (7372,7373,7374,7375), +PARTITION p1844 VALUES IN (7376,7377,7378,7379), +PARTITION p1845 VALUES IN (7380,7381,7382,7383), +PARTITION p1846 VALUES IN (7384,7385,7386,7387), +PARTITION p1847 VALUES IN (7388,7389,7390,7391), +PARTITION p1848 VALUES IN (7392,7393,7394,7395), +PARTITION p1849 VALUES IN (7396,7397,7398,7399), +PARTITION p1850 VALUES IN (7400,7401,7402,7403), +PARTITION p1851 VALUES IN (7404,7405,7406,7407), +PARTITION p1852 VALUES IN (7408,7409,7410,7411), +PARTITION p1853 VALUES IN (7412,7413,7414,7415), +PARTITION p1854 VALUES IN (7416,7417,7418,7419), +PARTITION p1855 VALUES IN (7420,7421,7422,7423), +PARTITION p1856 VALUES IN (7424,7425,7426,7427), +PARTITION p1857 VALUES IN (7428,7429,7430,7431), +PARTITION p1858 VALUES IN (7432,7433,7434,7435), +PARTITION p1859 VALUES IN (7436,7437,7438,7439), +PARTITION p1860 VALUES IN (7440,7441,7442,7443), +PARTITION p1861 VALUES IN (7444,7445,7446,7447), +PARTITION p1862 VALUES IN (7448,7449,7450,7451), +PARTITION p1863 VALUES IN (7452,7453,7454,7455), +PARTITION p1864 VALUES IN (7456,7457,7458,7459), +PARTITION p1865 VALUES IN (7460,7461,7462,7463), +PARTITION p1866 VALUES IN (7464,7465,7466,7467), +PARTITION p1867 VALUES IN (7468,7469,7470,7471), +PARTITION p1868 VALUES IN (7472,7473,7474,7475), +PARTITION p1869 VALUES IN (7476,7477,7478,7479), +PARTITION p1870 VALUES IN (7480,7481,7482,7483), +PARTITION p1871 VALUES IN (7484,7485,7486,7487), +PARTITION p1872 VALUES IN (7488,7489,7490,7491), +PARTITION p1873 VALUES IN (7492,7493,7494,7495), +PARTITION p1874 VALUES IN (7496,7497,7498,7499), +PARTITION p1875 VALUES IN (7500,7501,7502,7503), +PARTITION p1876 VALUES IN (7504,7505,7506,7507), +PARTITION p1877 VALUES IN (7508,7509,7510,7511), +PARTITION p1878 VALUES IN (7512,7513,7514,7515), +PARTITION p1879 VALUES IN (7516,7517,7518,7519), +PARTITION p1880 VALUES IN (7520,7521,7522,7523), +PARTITION p1881 VALUES IN (7524,7525,7526,7527), +PARTITION p1882 VALUES IN (7528,7529,7530,7531), +PARTITION p1883 VALUES IN (7532,7533,7534,7535), +PARTITION p1884 VALUES IN (7536,7537,7538,7539), +PARTITION p1885 VALUES IN (7540,7541,7542,7543), +PARTITION p1886 VALUES IN (7544,7545,7546,7547), +PARTITION p1887 VALUES IN (7548,7549,7550,7551), +PARTITION p1888 VALUES IN (7552,7553,7554,7555), +PARTITION p1889 VALUES IN (7556,7557,7558,7559), +PARTITION p1890 VALUES IN (7560,7561,7562,7563), +PARTITION p1891 VALUES IN (7564,7565,7566,7567), +PARTITION p1892 VALUES IN (7568,7569,7570,7571), +PARTITION p1893 VALUES IN (7572,7573,7574,7575), +PARTITION p1894 VALUES IN (7576,7577,7578,7579), +PARTITION p1895 VALUES IN (7580,7581,7582,7583), +PARTITION p1896 VALUES IN (7584,7585,7586,7587), +PARTITION p1897 VALUES IN (7588,7589,7590,7591), +PARTITION p1898 VALUES IN (7592,7593,7594,7595), +PARTITION p1899 VALUES IN (7596,7597,7598,7599), +PARTITION p1900 VALUES IN (7600,7601,7602,7603), +PARTITION p1901 VALUES IN (7604,7605,7606,7607), +PARTITION p1902 VALUES IN (7608,7609,7610,7611), +PARTITION p1903 VALUES IN (7612,7613,7614,7615), +PARTITION p1904 VALUES IN (7616,7617,7618,7619), +PARTITION p1905 VALUES IN (7620,7621,7622,7623), +PARTITION p1906 VALUES IN (7624,7625,7626,7627), +PARTITION p1907 VALUES IN (7628,7629,7630,7631), +PARTITION p1908 VALUES IN (7632,7633,7634,7635), +PARTITION p1909 VALUES IN (7636,7637,7638,7639), +PARTITION p1910 VALUES IN (7640,7641,7642,7643), +PARTITION p1911 VALUES IN (7644,7645,7646,7647), +PARTITION p1912 VALUES IN (7648,7649,7650,7651), +PARTITION p1913 VALUES IN (7652,7653,7654,7655), +PARTITION p1914 VALUES IN (7656,7657,7658,7659), +PARTITION p1915 VALUES IN (7660,7661,7662,7663), +PARTITION p1916 VALUES IN (7664,7665,7666,7667), +PARTITION p1917 VALUES IN (7668,7669,7670,7671), +PARTITION p1918 VALUES IN (7672,7673,7674,7675), +PARTITION p1919 VALUES IN (7676,7677,7678,7679), +PARTITION p1920 VALUES IN (7680,7681,7682,7683), +PARTITION p1921 VALUES IN (7684,7685,7686,7687), +PARTITION p1922 VALUES IN (7688,7689,7690,7691), +PARTITION p1923 VALUES IN (7692,7693,7694,7695), +PARTITION p1924 VALUES IN (7696,7697,7698,7699), +PARTITION p1925 VALUES IN (7700,7701,7702,7703), +PARTITION p1926 VALUES IN (7704,7705,7706,7707), +PARTITION p1927 VALUES IN (7708,7709,7710,7711), +PARTITION p1928 VALUES IN (7712,7713,7714,7715), +PARTITION p1929 VALUES IN (7716,7717,7718,7719), +PARTITION p1930 VALUES IN (7720,7721,7722,7723), +PARTITION p1931 VALUES IN (7724,7725,7726,7727), +PARTITION p1932 VALUES IN (7728,7729,7730,7731), +PARTITION p1933 VALUES IN (7732,7733,7734,7735), +PARTITION p1934 VALUES IN (7736,7737,7738,7739), +PARTITION p1935 VALUES IN (7740,7741,7742,7743), +PARTITION p1936 VALUES IN (7744,7745,7746,7747), +PARTITION p1937 VALUES IN (7748,7749,7750,7751), +PARTITION p1938 VALUES IN (7752,7753,7754,7755), +PARTITION p1939 VALUES IN (7756,7757,7758,7759), +PARTITION p1940 VALUES IN (7760,7761,7762,7763), +PARTITION p1941 VALUES IN (7764,7765,7766,7767), +PARTITION p1942 VALUES IN (7768,7769,7770,7771), +PARTITION p1943 VALUES IN (7772,7773,7774,7775), +PARTITION p1944 VALUES IN (7776,7777,7778,7779), +PARTITION p1945 VALUES IN (7780,7781,7782,7783), +PARTITION p1946 VALUES IN (7784,7785,7786,7787), +PARTITION p1947 VALUES IN (7788,7789,7790,7791), +PARTITION p1948 VALUES IN (7792,7793,7794,7795), +PARTITION p1949 VALUES IN (7796,7797,7798,7799), +PARTITION p1950 VALUES IN (7800,7801,7802,7803), +PARTITION p1951 VALUES IN (7804,7805,7806,7807), +PARTITION p1952 VALUES IN (7808,7809,7810,7811), +PARTITION p1953 VALUES IN (7812,7813,7814,7815), +PARTITION p1954 VALUES IN (7816,7817,7818,7819), +PARTITION p1955 VALUES IN (7820,7821,7822,7823), +PARTITION p1956 VALUES IN (7824,7825,7826,7827), +PARTITION p1957 VALUES IN (7828,7829,7830,7831), +PARTITION p1958 VALUES IN (7832,7833,7834,7835), +PARTITION p1959 VALUES IN (7836,7837,7838,7839), +PARTITION p1960 VALUES IN (7840,7841,7842,7843), +PARTITION p1961 VALUES IN (7844,7845,7846,7847), +PARTITION p1962 VALUES IN (7848,7849,7850,7851), +PARTITION p1963 VALUES IN (7852,7853,7854,7855), +PARTITION p1964 VALUES IN (7856,7857,7858,7859), +PARTITION p1965 VALUES IN (7860,7861,7862,7863), +PARTITION p1966 VALUES IN (7864,7865,7866,7867), +PARTITION p1967 VALUES IN (7868,7869,7870,7871), +PARTITION p1968 VALUES IN (7872,7873,7874,7875), +PARTITION p1969 VALUES IN (7876,7877,7878,7879), +PARTITION p1970 VALUES IN (7880,7881,7882,7883), +PARTITION p1971 VALUES IN (7884,7885,7886,7887), +PARTITION p1972 VALUES IN (7888,7889,7890,7891), +PARTITION p1973 VALUES IN (7892,7893,7894,7895), +PARTITION p1974 VALUES IN (7896,7897,7898,7899), +PARTITION p1975 VALUES IN (7900,7901,7902,7903), +PARTITION p1976 VALUES IN (7904,7905,7906,7907), +PARTITION p1977 VALUES IN (7908,7909,7910,7911), +PARTITION p1978 VALUES IN (7912,7913,7914,7915), +PARTITION p1979 VALUES IN (7916,7917,7918,7919), +PARTITION p1980 VALUES IN (7920,7921,7922,7923), +PARTITION p1981 VALUES IN (7924,7925,7926,7927), +PARTITION p1982 VALUES IN (7928,7929,7930,7931), +PARTITION p1983 VALUES IN (7932,7933,7934,7935), +PARTITION p1984 VALUES IN (7936,7937,7938,7939), +PARTITION p1985 VALUES IN (7940,7941,7942,7943), +PARTITION p1986 VALUES IN (7944,7945,7946,7947), +PARTITION p1987 VALUES IN (7948,7949,7950,7951), +PARTITION p1988 VALUES IN (7952,7953,7954,7955), +PARTITION p1989 VALUES IN (7956,7957,7958,7959), +PARTITION p1990 VALUES IN (7960,7961,7962,7963), +PARTITION p1991 VALUES IN (7964,7965,7966,7967), +PARTITION p1992 VALUES IN (7968,7969,7970,7971), +PARTITION p1993 VALUES IN (7972,7973,7974,7975), +PARTITION p1994 VALUES IN (7976,7977,7978,7979), +PARTITION p1995 VALUES IN (7980,7981,7982,7983), +PARTITION p1996 VALUES IN (7984,7985,7986,7987), +PARTITION p1997 VALUES IN (7988,7989,7990,7991), +PARTITION p1998 VALUES IN (7992,7993,7994,7995), +PARTITION p1999 VALUES IN (7996,7997,7998,7999), +PARTITION p2000 VALUES IN (8000,8001,8002,8003), +PARTITION p2001 VALUES IN (8004,8005,8006,8007), +PARTITION p2002 VALUES IN (8008,8009,8010,8011), +PARTITION p2003 VALUES IN (8012,8013,8014,8015), +PARTITION p2004 VALUES IN (8016,8017,8018,8019), +PARTITION p2005 VALUES IN (8020,8021,8022,8023), +PARTITION p2006 VALUES IN (8024,8025,8026,8027), +PARTITION p2007 VALUES IN (8028,8029,8030,8031), +PARTITION p2008 VALUES IN (8032,8033,8034,8035), +PARTITION p2009 VALUES IN (8036,8037,8038,8039), +PARTITION p2010 VALUES IN (8040,8041,8042,8043), +PARTITION p2011 VALUES IN (8044,8045,8046,8047), +PARTITION p2012 VALUES IN (8048,8049,8050,8051), +PARTITION p2013 VALUES IN (8052,8053,8054,8055), +PARTITION p2014 VALUES IN (8056,8057,8058,8059), +PARTITION p2015 VALUES IN (8060,8061,8062,8063), +PARTITION p2016 VALUES IN (8064,8065,8066,8067), +PARTITION p2017 VALUES IN (8068,8069,8070,8071), +PARTITION p2018 VALUES IN (8072,8073,8074,8075), +PARTITION p2019 VALUES IN (8076,8077,8078,8079), +PARTITION p2020 VALUES IN (8080,8081,8082,8083), +PARTITION p2021 VALUES IN (8084,8085,8086,8087), +PARTITION p2022 VALUES IN (8088,8089,8090,8091), +PARTITION p2023 VALUES IN (8092,8093,8094,8095), +PARTITION p2024 VALUES IN (8096,8097,8098,8099), +PARTITION p2025 VALUES IN (8100,8101,8102,8103), +PARTITION p2026 VALUES IN (8104,8105,8106,8107), +PARTITION p2027 VALUES IN (8108,8109,8110,8111), +PARTITION p2028 VALUES IN (8112,8113,8114,8115), +PARTITION p2029 VALUES IN (8116,8117,8118,8119), +PARTITION p2030 VALUES IN (8120,8121,8122,8123), +PARTITION p2031 VALUES IN (8124,8125,8126,8127), +PARTITION p2032 VALUES IN (8128,8129,8130,8131), +PARTITION p2033 VALUES IN (8132,8133,8134,8135), +PARTITION p2034 VALUES IN (8136,8137,8138,8139), +PARTITION p2035 VALUES IN (8140,8141,8142,8143), +PARTITION p2036 VALUES IN (8144,8145,8146,8147), +PARTITION p2037 VALUES IN (8148,8149,8150,8151), +PARTITION p2038 VALUES IN (8152,8153,8154,8155), +PARTITION p2039 VALUES IN (8156,8157,8158,8159), +PARTITION p2040 VALUES IN (8160,8161,8162,8163), +PARTITION p2041 VALUES IN (8164,8165,8166,8167), +PARTITION p2042 VALUES IN (8168,8169,8170,8171), +PARTITION p2043 VALUES IN (8172,8173,8174,8175), +PARTITION p2044 VALUES IN (8176,8177,8178,8179), +PARTITION p2045 VALUES IN (8180,8181,8182,8183), +PARTITION p2046 VALUES IN (8184,8185,8186,8187), +PARTITION p2047 VALUES IN (8188,8189,8190,8191), +PARTITION p2048 VALUES IN (8192,8193,8194,8195), +PARTITION p2049 VALUES IN (8196,8197,8198,8199), +PARTITION p2050 VALUES IN (8200,8201,8202,8203), +PARTITION p2051 VALUES IN (8204,8205,8206,8207), +PARTITION p2052 VALUES IN (8208,8209,8210,8211), +PARTITION p2053 VALUES IN (8212,8213,8214,8215), +PARTITION p2054 VALUES IN (8216,8217,8218,8219), +PARTITION p2055 VALUES IN (8220,8221,8222,8223), +PARTITION p2056 VALUES IN (8224,8225,8226,8227), +PARTITION p2057 VALUES IN (8228,8229,8230,8231), +PARTITION p2058 VALUES IN (8232,8233,8234,8235), +PARTITION p2059 VALUES IN (8236,8237,8238,8239), +PARTITION p2060 VALUES IN (8240,8241,8242,8243), +PARTITION p2061 VALUES IN (8244,8245,8246,8247), +PARTITION p2062 VALUES IN (8248,8249,8250,8251), +PARTITION p2063 VALUES IN (8252,8253,8254,8255), +PARTITION p2064 VALUES IN (8256,8257,8258,8259), +PARTITION p2065 VALUES IN (8260,8261,8262,8263), +PARTITION p2066 VALUES IN (8264,8265,8266,8267), +PARTITION p2067 VALUES IN (8268,8269,8270,8271), +PARTITION p2068 VALUES IN (8272,8273,8274,8275), +PARTITION p2069 VALUES IN (8276,8277,8278,8279), +PARTITION p2070 VALUES IN (8280,8281,8282,8283), +PARTITION p2071 VALUES IN (8284,8285,8286,8287), +PARTITION p2072 VALUES IN (8288,8289,8290,8291), +PARTITION p2073 VALUES IN (8292,8293,8294,8295), +PARTITION p2074 VALUES IN (8296,8297,8298,8299), +PARTITION p2075 VALUES IN (8300,8301,8302,8303), +PARTITION p2076 VALUES IN (8304,8305,8306,8307), +PARTITION p2077 VALUES IN (8308,8309,8310,8311), +PARTITION p2078 VALUES IN (8312,8313,8314,8315), +PARTITION p2079 VALUES IN (8316,8317,8318,8319), +PARTITION p2080 VALUES IN (8320,8321,8322,8323), +PARTITION p2081 VALUES IN (8324,8325,8326,8327), +PARTITION p2082 VALUES IN (8328,8329,8330,8331), +PARTITION p2083 VALUES IN (8332,8333,8334,8335), +PARTITION p2084 VALUES IN (8336,8337,8338,8339), +PARTITION p2085 VALUES IN (8340,8341,8342,8343), +PARTITION p2086 VALUES IN (8344,8345,8346,8347), +PARTITION p2087 VALUES IN (8348,8349,8350,8351), +PARTITION p2088 VALUES IN (8352,8353,8354,8355), +PARTITION p2089 VALUES IN (8356,8357,8358,8359), +PARTITION p2090 VALUES IN (8360,8361,8362,8363), +PARTITION p2091 VALUES IN (8364,8365,8366,8367), +PARTITION p2092 VALUES IN (8368,8369,8370,8371), +PARTITION p2093 VALUES IN (8372,8373,8374,8375), +PARTITION p2094 VALUES IN (8376,8377,8378,8379), +PARTITION p2095 VALUES IN (8380,8381,8382,8383), +PARTITION p2096 VALUES IN (8384,8385,8386,8387), +PARTITION p2097 VALUES IN (8388,8389,8390,8391), +PARTITION p2098 VALUES IN (8392,8393,8394,8395), +PARTITION p2099 VALUES IN (8396,8397,8398,8399), +PARTITION p2100 VALUES IN (8400,8401,8402,8403), +PARTITION p2101 VALUES IN (8404,8405,8406,8407), +PARTITION p2102 VALUES IN (8408,8409,8410,8411), +PARTITION p2103 VALUES IN (8412,8413,8414,8415), +PARTITION p2104 VALUES IN (8416,8417,8418,8419), +PARTITION p2105 VALUES IN (8420,8421,8422,8423), +PARTITION p2106 VALUES IN (8424,8425,8426,8427), +PARTITION p2107 VALUES IN (8428,8429,8430,8431), +PARTITION p2108 VALUES IN (8432,8433,8434,8435), +PARTITION p2109 VALUES IN (8436,8437,8438,8439), +PARTITION p2110 VALUES IN (8440,8441,8442,8443), +PARTITION p2111 VALUES IN (8444,8445,8446,8447), +PARTITION p2112 VALUES IN (8448,8449,8450,8451), +PARTITION p2113 VALUES IN (8452,8453,8454,8455), +PARTITION p2114 VALUES IN (8456,8457,8458,8459), +PARTITION p2115 VALUES IN (8460,8461,8462,8463), +PARTITION p2116 VALUES IN (8464,8465,8466,8467), +PARTITION p2117 VALUES IN (8468,8469,8470,8471), +PARTITION p2118 VALUES IN (8472,8473,8474,8475), +PARTITION p2119 VALUES IN (8476,8477,8478,8479), +PARTITION p2120 VALUES IN (8480,8481,8482,8483), +PARTITION p2121 VALUES IN (8484,8485,8486,8487), +PARTITION p2122 VALUES IN (8488,8489,8490,8491), +PARTITION p2123 VALUES IN (8492,8493,8494,8495), +PARTITION p2124 VALUES IN (8496,8497,8498,8499), +PARTITION p2125 VALUES IN (8500,8501,8502,8503), +PARTITION p2126 VALUES IN (8504,8505,8506,8507), +PARTITION p2127 VALUES IN (8508,8509,8510,8511), +PARTITION p2128 VALUES IN (8512,8513,8514,8515), +PARTITION p2129 VALUES IN (8516,8517,8518,8519), +PARTITION p2130 VALUES IN (8520,8521,8522,8523), +PARTITION p2131 VALUES IN (8524,8525,8526,8527), +PARTITION p2132 VALUES IN (8528,8529,8530,8531), +PARTITION p2133 VALUES IN (8532,8533,8534,8535), +PARTITION p2134 VALUES IN (8536,8537,8538,8539), +PARTITION p2135 VALUES IN (8540,8541,8542,8543), +PARTITION p2136 VALUES IN (8544,8545,8546,8547), +PARTITION p2137 VALUES IN (8548,8549,8550,8551), +PARTITION p2138 VALUES IN (8552,8553,8554,8555), +PARTITION p2139 VALUES IN (8556,8557,8558,8559), +PARTITION p2140 VALUES IN (8560,8561,8562,8563), +PARTITION p2141 VALUES IN (8564,8565,8566,8567), +PARTITION p2142 VALUES IN (8568,8569,8570,8571), +PARTITION p2143 VALUES IN (8572,8573,8574,8575), +PARTITION p2144 VALUES IN (8576,8577,8578,8579), +PARTITION p2145 VALUES IN (8580,8581,8582,8583), +PARTITION p2146 VALUES IN (8584,8585,8586,8587), +PARTITION p2147 VALUES IN (8588,8589,8590,8591), +PARTITION p2148 VALUES IN (8592,8593,8594,8595), +PARTITION p2149 VALUES IN (8596,8597,8598,8599), +PARTITION p2150 VALUES IN (8600,8601,8602,8603), +PARTITION p2151 VALUES IN (8604,8605,8606,8607), +PARTITION p2152 VALUES IN (8608,8609,8610,8611), +PARTITION p2153 VALUES IN (8612,8613,8614,8615), +PARTITION p2154 VALUES IN (8616,8617,8618,8619), +PARTITION p2155 VALUES IN (8620,8621,8622,8623), +PARTITION p2156 VALUES IN (8624,8625,8626,8627), +PARTITION p2157 VALUES IN (8628,8629,8630,8631), +PARTITION p2158 VALUES IN (8632,8633,8634,8635), +PARTITION p2159 VALUES IN (8636,8637,8638,8639), +PARTITION p2160 VALUES IN (8640,8641,8642,8643), +PARTITION p2161 VALUES IN (8644,8645,8646,8647), +PARTITION p2162 VALUES IN (8648,8649,8650,8651), +PARTITION p2163 VALUES IN (8652,8653,8654,8655), +PARTITION p2164 VALUES IN (8656,8657,8658,8659), +PARTITION p2165 VALUES IN (8660,8661,8662,8663), +PARTITION p2166 VALUES IN (8664,8665,8666,8667), +PARTITION p2167 VALUES IN (8668,8669,8670,8671), +PARTITION p2168 VALUES IN (8672,8673,8674,8675), +PARTITION p2169 VALUES IN (8676,8677,8678,8679), +PARTITION p2170 VALUES IN (8680,8681,8682,8683), +PARTITION p2171 VALUES IN (8684,8685,8686,8687), +PARTITION p2172 VALUES IN (8688,8689,8690,8691), +PARTITION p2173 VALUES IN (8692,8693,8694,8695), +PARTITION p2174 VALUES IN (8696,8697,8698,8699), +PARTITION p2175 VALUES IN (8700,8701,8702,8703), +PARTITION p2176 VALUES IN (8704,8705,8706,8707), +PARTITION p2177 VALUES IN (8708,8709,8710,8711), +PARTITION p2178 VALUES IN (8712,8713,8714,8715), +PARTITION p2179 VALUES IN (8716,8717,8718,8719), +PARTITION p2180 VALUES IN (8720,8721,8722,8723), +PARTITION p2181 VALUES IN (8724,8725,8726,8727), +PARTITION p2182 VALUES IN (8728,8729,8730,8731), +PARTITION p2183 VALUES IN (8732,8733,8734,8735), +PARTITION p2184 VALUES IN (8736,8737,8738,8739), +PARTITION p2185 VALUES IN (8740,8741,8742,8743), +PARTITION p2186 VALUES IN (8744,8745,8746,8747), +PARTITION p2187 VALUES IN (8748,8749,8750,8751), +PARTITION p2188 VALUES IN (8752,8753,8754,8755), +PARTITION p2189 VALUES IN (8756,8757,8758,8759), +PARTITION p2190 VALUES IN (8760,8761,8762,8763), +PARTITION p2191 VALUES IN (8764,8765,8766,8767), +PARTITION p2192 VALUES IN (8768,8769,8770,8771), +PARTITION p2193 VALUES IN (8772,8773,8774,8775), +PARTITION p2194 VALUES IN (8776,8777,8778,8779), +PARTITION p2195 VALUES IN (8780,8781,8782,8783), +PARTITION p2196 VALUES IN (8784,8785,8786,8787), +PARTITION p2197 VALUES IN (8788,8789,8790,8791), +PARTITION p2198 VALUES IN (8792,8793,8794,8795), +PARTITION p2199 VALUES IN (8796,8797,8798,8799), +PARTITION p2200 VALUES IN (8800,8801,8802,8803), +PARTITION p2201 VALUES IN (8804,8805,8806,8807), +PARTITION p2202 VALUES IN (8808,8809,8810,8811), +PARTITION p2203 VALUES IN (8812,8813,8814,8815), +PARTITION p2204 VALUES IN (8816,8817,8818,8819), +PARTITION p2205 VALUES IN (8820,8821,8822,8823), +PARTITION p2206 VALUES IN (8824,8825,8826,8827), +PARTITION p2207 VALUES IN (8828,8829,8830,8831), +PARTITION p2208 VALUES IN (8832,8833,8834,8835), +PARTITION p2209 VALUES IN (8836,8837,8838,8839), +PARTITION p2210 VALUES IN (8840,8841,8842,8843), +PARTITION p2211 VALUES IN (8844,8845,8846,8847), +PARTITION p2212 VALUES IN (8848,8849,8850,8851), +PARTITION p2213 VALUES IN (8852,8853,8854,8855), +PARTITION p2214 VALUES IN (8856,8857,8858,8859), +PARTITION p2215 VALUES IN (8860,8861,8862,8863), +PARTITION p2216 VALUES IN (8864,8865,8866,8867), +PARTITION p2217 VALUES IN (8868,8869,8870,8871), +PARTITION p2218 VALUES IN (8872,8873,8874,8875), +PARTITION p2219 VALUES IN (8876,8877,8878,8879), +PARTITION p2220 VALUES IN (8880,8881,8882,8883), +PARTITION p2221 VALUES IN (8884,8885,8886,8887), +PARTITION p2222 VALUES IN (8888,8889,8890,8891), +PARTITION p2223 VALUES IN (8892,8893,8894,8895), +PARTITION p2224 VALUES IN (8896,8897,8898,8899), +PARTITION p2225 VALUES IN (8900,8901,8902,8903), +PARTITION p2226 VALUES IN (8904,8905,8906,8907), +PARTITION p2227 VALUES IN (8908,8909,8910,8911), +PARTITION p2228 VALUES IN (8912,8913,8914,8915), +PARTITION p2229 VALUES IN (8916,8917,8918,8919), +PARTITION p2230 VALUES IN (8920,8921,8922,8923), +PARTITION p2231 VALUES IN (8924,8925,8926,8927), +PARTITION p2232 VALUES IN (8928,8929,8930,8931), +PARTITION p2233 VALUES IN (8932,8933,8934,8935), +PARTITION p2234 VALUES IN (8936,8937,8938,8939), +PARTITION p2235 VALUES IN (8940,8941,8942,8943), +PARTITION p2236 VALUES IN (8944,8945,8946,8947), +PARTITION p2237 VALUES IN (8948,8949,8950,8951), +PARTITION p2238 VALUES IN (8952,8953,8954,8955), +PARTITION p2239 VALUES IN (8956,8957,8958,8959), +PARTITION p2240 VALUES IN (8960,8961,8962,8963), +PARTITION p2241 VALUES IN (8964,8965,8966,8967), +PARTITION p2242 VALUES IN (8968,8969,8970,8971), +PARTITION p2243 VALUES IN (8972,8973,8974,8975), +PARTITION p2244 VALUES IN (8976,8977,8978,8979), +PARTITION p2245 VALUES IN (8980,8981,8982,8983), +PARTITION p2246 VALUES IN (8984,8985,8986,8987), +PARTITION p2247 VALUES IN (8988,8989,8990,8991), +PARTITION p2248 VALUES IN (8992,8993,8994,8995), +PARTITION p2249 VALUES IN (8996,8997,8998,8999), +PARTITION p2250 VALUES IN (9000,9001,9002,9003), +PARTITION p2251 VALUES IN (9004,9005,9006,9007), +PARTITION p2252 VALUES IN (9008,9009,9010,9011), +PARTITION p2253 VALUES IN (9012,9013,9014,9015), +PARTITION p2254 VALUES IN (9016,9017,9018,9019), +PARTITION p2255 VALUES IN (9020,9021,9022,9023), +PARTITION p2256 VALUES IN (9024,9025,9026,9027), +PARTITION p2257 VALUES IN (9028,9029,9030,9031), +PARTITION p2258 VALUES IN (9032,9033,9034,9035), +PARTITION p2259 VALUES IN (9036,9037,9038,9039), +PARTITION p2260 VALUES IN (9040,9041,9042,9043), +PARTITION p2261 VALUES IN (9044,9045,9046,9047), +PARTITION p2262 VALUES IN (9048,9049,9050,9051), +PARTITION p2263 VALUES IN (9052,9053,9054,9055), +PARTITION p2264 VALUES IN (9056,9057,9058,9059), +PARTITION p2265 VALUES IN (9060,9061,9062,9063), +PARTITION p2266 VALUES IN (9064,9065,9066,9067), +PARTITION p2267 VALUES IN (9068,9069,9070,9071), +PARTITION p2268 VALUES IN (9072,9073,9074,9075), +PARTITION p2269 VALUES IN (9076,9077,9078,9079), +PARTITION p2270 VALUES IN (9080,9081,9082,9083), +PARTITION p2271 VALUES IN (9084,9085,9086,9087), +PARTITION p2272 VALUES IN (9088,9089,9090,9091), +PARTITION p2273 VALUES IN (9092,9093,9094,9095), +PARTITION p2274 VALUES IN (9096,9097,9098,9099), +PARTITION p2275 VALUES IN (9100,9101,9102,9103), +PARTITION p2276 VALUES IN (9104,9105,9106,9107), +PARTITION p2277 VALUES IN (9108,9109,9110,9111), +PARTITION p2278 VALUES IN (9112,9113,9114,9115), +PARTITION p2279 VALUES IN (9116,9117,9118,9119), +PARTITION p2280 VALUES IN (9120,9121,9122,9123), +PARTITION p2281 VALUES IN (9124,9125,9126,9127), +PARTITION p2282 VALUES IN (9128,9129,9130,9131), +PARTITION p2283 VALUES IN (9132,9133,9134,9135), +PARTITION p2284 VALUES IN (9136,9137,9138,9139), +PARTITION p2285 VALUES IN (9140,9141,9142,9143), +PARTITION p2286 VALUES IN (9144,9145,9146,9147), +PARTITION p2287 VALUES IN (9148,9149,9150,9151), +PARTITION p2288 VALUES IN (9152,9153,9154,9155), +PARTITION p2289 VALUES IN (9156,9157,9158,9159), +PARTITION p2290 VALUES IN (9160,9161,9162,9163), +PARTITION p2291 VALUES IN (9164,9165,9166,9167), +PARTITION p2292 VALUES IN (9168,9169,9170,9171), +PARTITION p2293 VALUES IN (9172,9173,9174,9175), +PARTITION p2294 VALUES IN (9176,9177,9178,9179), +PARTITION p2295 VALUES IN (9180,9181,9182,9183), +PARTITION p2296 VALUES IN (9184,9185,9186,9187), +PARTITION p2297 VALUES IN (9188,9189,9190,9191), +PARTITION p2298 VALUES IN (9192,9193,9194,9195), +PARTITION p2299 VALUES IN (9196,9197,9198,9199), +PARTITION p2300 VALUES IN (9200,9201,9202,9203), +PARTITION p2301 VALUES IN (9204,9205,9206,9207), +PARTITION p2302 VALUES IN (9208,9209,9210,9211), +PARTITION p2303 VALUES IN (9212,9213,9214,9215), +PARTITION p2304 VALUES IN (9216,9217,9218,9219), +PARTITION p2305 VALUES IN (9220,9221,9222,9223), +PARTITION p2306 VALUES IN (9224,9225,9226,9227), +PARTITION p2307 VALUES IN (9228,9229,9230,9231), +PARTITION p2308 VALUES IN (9232,9233,9234,9235), +PARTITION p2309 VALUES IN (9236,9237,9238,9239), +PARTITION p2310 VALUES IN (9240,9241,9242,9243), +PARTITION p2311 VALUES IN (9244,9245,9246,9247), +PARTITION p2312 VALUES IN (9248,9249,9250,9251), +PARTITION p2313 VALUES IN (9252,9253,9254,9255), +PARTITION p2314 VALUES IN (9256,9257,9258,9259), +PARTITION p2315 VALUES IN (9260,9261,9262,9263), +PARTITION p2316 VALUES IN (9264,9265,9266,9267), +PARTITION p2317 VALUES IN (9268,9269,9270,9271), +PARTITION p2318 VALUES IN (9272,9273,9274,9275), +PARTITION p2319 VALUES IN (9276,9277,9278,9279), +PARTITION p2320 VALUES IN (9280,9281,9282,9283), +PARTITION p2321 VALUES IN (9284,9285,9286,9287), +PARTITION p2322 VALUES IN (9288,9289,9290,9291), +PARTITION p2323 VALUES IN (9292,9293,9294,9295), +PARTITION p2324 VALUES IN (9296,9297,9298,9299), +PARTITION p2325 VALUES IN (9300,9301,9302,9303), +PARTITION p2326 VALUES IN (9304,9305,9306,9307), +PARTITION p2327 VALUES IN (9308,9309,9310,9311), +PARTITION p2328 VALUES IN (9312,9313,9314,9315), +PARTITION p2329 VALUES IN (9316,9317,9318,9319), +PARTITION p2330 VALUES IN (9320,9321,9322,9323), +PARTITION p2331 VALUES IN (9324,9325,9326,9327), +PARTITION p2332 VALUES IN (9328,9329,9330,9331), +PARTITION p2333 VALUES IN (9332,9333,9334,9335), +PARTITION p2334 VALUES IN (9336,9337,9338,9339), +PARTITION p2335 VALUES IN (9340,9341,9342,9343), +PARTITION p2336 VALUES IN (9344,9345,9346,9347), +PARTITION p2337 VALUES IN (9348,9349,9350,9351), +PARTITION p2338 VALUES IN (9352,9353,9354,9355), +PARTITION p2339 VALUES IN (9356,9357,9358,9359), +PARTITION p2340 VALUES IN (9360,9361,9362,9363), +PARTITION p2341 VALUES IN (9364,9365,9366,9367), +PARTITION p2342 VALUES IN (9368,9369,9370,9371), +PARTITION p2343 VALUES IN (9372,9373,9374,9375), +PARTITION p2344 VALUES IN (9376,9377,9378,9379), +PARTITION p2345 VALUES IN (9380,9381,9382,9383), +PARTITION p2346 VALUES IN (9384,9385,9386,9387), +PARTITION p2347 VALUES IN (9388,9389,9390,9391), +PARTITION p2348 VALUES IN (9392,9393,9394,9395), +PARTITION p2349 VALUES IN (9396,9397,9398,9399), +PARTITION p2350 VALUES IN (9400,9401,9402,9403), +PARTITION p2351 VALUES IN (9404,9405,9406,9407), +PARTITION p2352 VALUES IN (9408,9409,9410,9411), +PARTITION p2353 VALUES IN (9412,9413,9414,9415), +PARTITION p2354 VALUES IN (9416,9417,9418,9419), +PARTITION p2355 VALUES IN (9420,9421,9422,9423), +PARTITION p2356 VALUES IN (9424,9425,9426,9427), +PARTITION p2357 VALUES IN (9428,9429,9430,9431), +PARTITION p2358 VALUES IN (9432,9433,9434,9435), +PARTITION p2359 VALUES IN (9436,9437,9438,9439), +PARTITION p2360 VALUES IN (9440,9441,9442,9443), +PARTITION p2361 VALUES IN (9444,9445,9446,9447), +PARTITION p2362 VALUES IN (9448,9449,9450,9451), +PARTITION p2363 VALUES IN (9452,9453,9454,9455), +PARTITION p2364 VALUES IN (9456,9457,9458,9459), +PARTITION p2365 VALUES IN (9460,9461,9462,9463), +PARTITION p2366 VALUES IN (9464,9465,9466,9467), +PARTITION p2367 VALUES IN (9468,9469,9470,9471), +PARTITION p2368 VALUES IN (9472,9473,9474,9475), +PARTITION p2369 VALUES IN (9476,9477,9478,9479), +PARTITION p2370 VALUES IN (9480,9481,9482,9483), +PARTITION p2371 VALUES IN (9484,9485,9486,9487), +PARTITION p2372 VALUES IN (9488,9489,9490,9491), +PARTITION p2373 VALUES IN (9492,9493,9494,9495), +PARTITION p2374 VALUES IN (9496,9497,9498,9499), +PARTITION p2375 VALUES IN (9500,9501,9502,9503), +PARTITION p2376 VALUES IN (9504,9505,9506,9507), +PARTITION p2377 VALUES IN (9508,9509,9510,9511), +PARTITION p2378 VALUES IN (9512,9513,9514,9515), +PARTITION p2379 VALUES IN (9516,9517,9518,9519), +PARTITION p2380 VALUES IN (9520,9521,9522,9523), +PARTITION p2381 VALUES IN (9524,9525,9526,9527), +PARTITION p2382 VALUES IN (9528,9529,9530,9531), +PARTITION p2383 VALUES IN (9532,9533,9534,9535), +PARTITION p2384 VALUES IN (9536,9537,9538,9539), +PARTITION p2385 VALUES IN (9540,9541,9542,9543), +PARTITION p2386 VALUES IN (9544,9545,9546,9547), +PARTITION p2387 VALUES IN (9548,9549,9550,9551), +PARTITION p2388 VALUES IN (9552,9553,9554,9555), +PARTITION p2389 VALUES IN (9556,9557,9558,9559), +PARTITION p2390 VALUES IN (9560,9561,9562,9563), +PARTITION p2391 VALUES IN (9564,9565,9566,9567), +PARTITION p2392 VALUES IN (9568,9569,9570,9571), +PARTITION p2393 VALUES IN (9572,9573,9574,9575), +PARTITION p2394 VALUES IN (9576,9577,9578,9579), +PARTITION p2395 VALUES IN (9580,9581,9582,9583), +PARTITION p2396 VALUES IN (9584,9585,9586,9587), +PARTITION p2397 VALUES IN (9588,9589,9590,9591), +PARTITION p2398 VALUES IN (9592,9593,9594,9595), +PARTITION p2399 VALUES IN (9596,9597,9598,9599), +PARTITION p2400 VALUES IN (9600,9601,9602,9603), +PARTITION p2401 VALUES IN (9604,9605,9606,9607), +PARTITION p2402 VALUES IN (9608,9609,9610,9611), +PARTITION p2403 VALUES IN (9612,9613,9614,9615), +PARTITION p2404 VALUES IN (9616,9617,9618,9619), +PARTITION p2405 VALUES IN (9620,9621,9622,9623), +PARTITION p2406 VALUES IN (9624,9625,9626,9627), +PARTITION p2407 VALUES IN (9628,9629,9630,9631), +PARTITION p2408 VALUES IN (9632,9633,9634,9635), +PARTITION p2409 VALUES IN (9636,9637,9638,9639), +PARTITION p2410 VALUES IN (9640,9641,9642,9643), +PARTITION p2411 VALUES IN (9644,9645,9646,9647), +PARTITION p2412 VALUES IN (9648,9649,9650,9651), +PARTITION p2413 VALUES IN (9652,9653,9654,9655), +PARTITION p2414 VALUES IN (9656,9657,9658,9659), +PARTITION p2415 VALUES IN (9660,9661,9662,9663), +PARTITION p2416 VALUES IN (9664,9665,9666,9667), +PARTITION p2417 VALUES IN (9668,9669,9670,9671), +PARTITION p2418 VALUES IN (9672,9673,9674,9675), +PARTITION p2419 VALUES IN (9676,9677,9678,9679), +PARTITION p2420 VALUES IN (9680,9681,9682,9683), +PARTITION p2421 VALUES IN (9684,9685,9686,9687), +PARTITION p2422 VALUES IN (9688,9689,9690,9691), +PARTITION p2423 VALUES IN (9692,9693,9694,9695), +PARTITION p2424 VALUES IN (9696,9697,9698,9699), +PARTITION p2425 VALUES IN (9700,9701,9702,9703), +PARTITION p2426 VALUES IN (9704,9705,9706,9707), +PARTITION p2427 VALUES IN (9708,9709,9710,9711), +PARTITION p2428 VALUES IN (9712,9713,9714,9715), +PARTITION p2429 VALUES IN (9716,9717,9718,9719), +PARTITION p2430 VALUES IN (9720,9721,9722,9723), +PARTITION p2431 VALUES IN (9724,9725,9726,9727), +PARTITION p2432 VALUES IN (9728,9729,9730,9731), +PARTITION p2433 VALUES IN (9732,9733,9734,9735), +PARTITION p2434 VALUES IN (9736,9737,9738,9739), +PARTITION p2435 VALUES IN (9740,9741,9742,9743), +PARTITION p2436 VALUES IN (9744,9745,9746,9747), +PARTITION p2437 VALUES IN (9748,9749,9750,9751), +PARTITION p2438 VALUES IN (9752,9753,9754,9755), +PARTITION p2439 VALUES IN (9756,9757,9758,9759), +PARTITION p2440 VALUES IN (9760,9761,9762,9763), +PARTITION p2441 VALUES IN (9764,9765,9766,9767), +PARTITION p2442 VALUES IN (9768,9769,9770,9771), +PARTITION p2443 VALUES IN (9772,9773,9774,9775), +PARTITION p2444 VALUES IN (9776,9777,9778,9779), +PARTITION p2445 VALUES IN (9780,9781,9782,9783), +PARTITION p2446 VALUES IN (9784,9785,9786,9787), +PARTITION p2447 VALUES IN (9788,9789,9790,9791), +PARTITION p2448 VALUES IN (9792,9793,9794,9795), +PARTITION p2449 VALUES IN (9796,9797,9798,9799), +PARTITION p2450 VALUES IN (9800,9801,9802,9803), +PARTITION p2451 VALUES IN (9804,9805,9806,9807), +PARTITION p2452 VALUES IN (9808,9809,9810,9811), +PARTITION p2453 VALUES IN (9812,9813,9814,9815), +PARTITION p2454 VALUES IN (9816,9817,9818,9819), +PARTITION p2455 VALUES IN (9820,9821,9822,9823), +PARTITION p2456 VALUES IN (9824,9825,9826,9827), +PARTITION p2457 VALUES IN (9828,9829,9830,9831), +PARTITION p2458 VALUES IN (9832,9833,9834,9835), +PARTITION p2459 VALUES IN (9836,9837,9838,9839), +PARTITION p2460 VALUES IN (9840,9841,9842,9843), +PARTITION p2461 VALUES IN (9844,9845,9846,9847), +PARTITION p2462 VALUES IN (9848,9849,9850,9851), +PARTITION p2463 VALUES IN (9852,9853,9854,9855), +PARTITION p2464 VALUES IN (9856,9857,9858,9859), +PARTITION p2465 VALUES IN (9860,9861,9862,9863), +PARTITION p2466 VALUES IN (9864,9865,9866,9867), +PARTITION p2467 VALUES IN (9868,9869,9870,9871), +PARTITION p2468 VALUES IN (9872,9873,9874,9875), +PARTITION p2469 VALUES IN (9876,9877,9878,9879), +PARTITION p2470 VALUES IN (9880,9881,9882,9883), +PARTITION p2471 VALUES IN (9884,9885,9886,9887), +PARTITION p2472 VALUES IN (9888,9889,9890,9891), +PARTITION p2473 VALUES IN (9892,9893,9894,9895), +PARTITION p2474 VALUES IN (9896,9897,9898,9899), +PARTITION p2475 VALUES IN (9900,9901,9902,9903), +PARTITION p2476 VALUES IN (9904,9905,9906,9907), +PARTITION p2477 VALUES IN (9908,9909,9910,9911), +PARTITION p2478 VALUES IN (9912,9913,9914,9915), +PARTITION p2479 VALUES IN (9916,9917,9918,9919), +PARTITION p2480 VALUES IN (9920,9921,9922,9923), +PARTITION p2481 VALUES IN (9924,9925,9926,9927), +PARTITION p2482 VALUES IN (9928,9929,9930,9931), +PARTITION p2483 VALUES IN (9932,9933,9934,9935), +PARTITION p2484 VALUES IN (9936,9937,9938,9939), +PARTITION p2485 VALUES IN (9940,9941,9942,9943), +PARTITION p2486 VALUES IN (9944,9945,9946,9947), +PARTITION p2487 VALUES IN (9948,9949,9950,9951), +PARTITION p2488 VALUES IN (9952,9953,9954,9955), +PARTITION p2489 VALUES IN (9956,9957,9958,9959), +PARTITION p2490 VALUES IN (9960,9961,9962,9963), +PARTITION p2491 VALUES IN (9964,9965,9966,9967), +PARTITION p2492 VALUES IN (9968,9969,9970,9971), +PARTITION p2493 VALUES IN (9972,9973,9974,9975), +PARTITION p2494 VALUES IN (9976,9977,9978,9979), +PARTITION p2495 VALUES IN (9980,9981,9982,9983), +PARTITION p2496 VALUES IN (9984,9985,9986,9987), +PARTITION p2497 VALUES IN (9988,9989,9990,9991), +PARTITION p2498 VALUES IN (9992,9993,9994,9995), +PARTITION p2499 VALUES IN (9996,9997,9998,9999), +PARTITION p2500 VALUES IN (10000,10001,10002,10003), +PARTITION p2501 VALUES IN (10004,10005,10006,10007), +PARTITION p2502 VALUES IN (10008,10009,10010,10011), +PARTITION p2503 VALUES IN (10012,10013,10014,10015), +PARTITION p2504 VALUES IN (10016,10017,10018,10019), +PARTITION p2505 VALUES IN (10020,10021,10022,10023), +PARTITION p2506 VALUES IN (10024,10025,10026,10027), +PARTITION p2507 VALUES IN (10028,10029,10030,10031), +PARTITION p2508 VALUES IN (10032,10033,10034,10035), +PARTITION p2509 VALUES IN (10036,10037,10038,10039), +PARTITION p2510 VALUES IN (10040,10041,10042,10043), +PARTITION p2511 VALUES IN (10044,10045,10046,10047), +PARTITION p2512 VALUES IN (10048,10049,10050,10051), +PARTITION p2513 VALUES IN (10052,10053,10054,10055), +PARTITION p2514 VALUES IN (10056,10057,10058,10059), +PARTITION p2515 VALUES IN (10060,10061,10062,10063), +PARTITION p2516 VALUES IN (10064,10065,10066,10067), +PARTITION p2517 VALUES IN (10068,10069,10070,10071), +PARTITION p2518 VALUES IN (10072,10073,10074,10075), +PARTITION p2519 VALUES IN (10076,10077,10078,10079), +PARTITION p2520 VALUES IN (10080,10081,10082,10083), +PARTITION p2521 VALUES IN (10084,10085,10086,10087), +PARTITION p2522 VALUES IN (10088,10089,10090,10091), +PARTITION p2523 VALUES IN (10092,10093,10094,10095), +PARTITION p2524 VALUES IN (10096,10097,10098,10099), +PARTITION p2525 VALUES IN (10100,10101,10102,10103), +PARTITION p2526 VALUES IN (10104,10105,10106,10107), +PARTITION p2527 VALUES IN (10108,10109,10110,10111), +PARTITION p2528 VALUES IN (10112,10113,10114,10115), +PARTITION p2529 VALUES IN (10116,10117,10118,10119), +PARTITION p2530 VALUES IN (10120,10121,10122,10123), +PARTITION p2531 VALUES IN (10124,10125,10126,10127), +PARTITION p2532 VALUES IN (10128,10129,10130,10131), +PARTITION p2533 VALUES IN (10132,10133,10134,10135), +PARTITION p2534 VALUES IN (10136,10137,10138,10139), +PARTITION p2535 VALUES IN (10140,10141,10142,10143), +PARTITION p2536 VALUES IN (10144,10145,10146,10147), +PARTITION p2537 VALUES IN (10148,10149,10150,10151), +PARTITION p2538 VALUES IN (10152,10153,10154,10155), +PARTITION p2539 VALUES IN (10156,10157,10158,10159), +PARTITION p2540 VALUES IN (10160,10161,10162,10163), +PARTITION p2541 VALUES IN (10164,10165,10166,10167), +PARTITION p2542 VALUES IN (10168,10169,10170,10171), +PARTITION p2543 VALUES IN (10172,10173,10174,10175), +PARTITION p2544 VALUES IN (10176,10177,10178,10179), +PARTITION p2545 VALUES IN (10180,10181,10182,10183), +PARTITION p2546 VALUES IN (10184,10185,10186,10187), +PARTITION p2547 VALUES IN (10188,10189,10190,10191), +PARTITION p2548 VALUES IN (10192,10193,10194,10195), +PARTITION p2549 VALUES IN (10196,10197,10198,10199), +PARTITION p2550 VALUES IN (10200,10201,10202,10203), +PARTITION p2551 VALUES IN (10204,10205,10206,10207), +PARTITION p2552 VALUES IN (10208,10209,10210,10211), +PARTITION p2553 VALUES IN (10212,10213,10214,10215), +PARTITION p2554 VALUES IN (10216,10217,10218,10219), +PARTITION p2555 VALUES IN (10220,10221,10222,10223), +PARTITION p2556 VALUES IN (10224,10225,10226,10227), +PARTITION p2557 VALUES IN (10228,10229,10230,10231), +PARTITION p2558 VALUES IN (10232,10233,10234,10235), +PARTITION p2559 VALUES IN (10236,10237,10238,10239), +PARTITION p2560 VALUES IN (10240,10241,10242,10243), +PARTITION p2561 VALUES IN (10244,10245,10246,10247), +PARTITION p2562 VALUES IN (10248,10249,10250,10251), +PARTITION p2563 VALUES IN (10252,10253,10254,10255), +PARTITION p2564 VALUES IN (10256,10257,10258,10259), +PARTITION p2565 VALUES IN (10260,10261,10262,10263), +PARTITION p2566 VALUES IN (10264,10265,10266,10267), +PARTITION p2567 VALUES IN (10268,10269,10270,10271), +PARTITION p2568 VALUES IN (10272,10273,10274,10275), +PARTITION p2569 VALUES IN (10276,10277,10278,10279), +PARTITION p2570 VALUES IN (10280,10281,10282,10283), +PARTITION p2571 VALUES IN (10284,10285,10286,10287), +PARTITION p2572 VALUES IN (10288,10289,10290,10291), +PARTITION p2573 VALUES IN (10292,10293,10294,10295), +PARTITION p2574 VALUES IN (10296,10297,10298,10299), +PARTITION p2575 VALUES IN (10300,10301,10302,10303), +PARTITION p2576 VALUES IN (10304,10305,10306,10307), +PARTITION p2577 VALUES IN (10308,10309,10310,10311), +PARTITION p2578 VALUES IN (10312,10313,10314,10315), +PARTITION p2579 VALUES IN (10316,10317,10318,10319), +PARTITION p2580 VALUES IN (10320,10321,10322,10323), +PARTITION p2581 VALUES IN (10324,10325,10326,10327), +PARTITION p2582 VALUES IN (10328,10329,10330,10331), +PARTITION p2583 VALUES IN (10332,10333,10334,10335), +PARTITION p2584 VALUES IN (10336,10337,10338,10339), +PARTITION p2585 VALUES IN (10340,10341,10342,10343), +PARTITION p2586 VALUES IN (10344,10345,10346,10347), +PARTITION p2587 VALUES IN (10348,10349,10350,10351), +PARTITION p2588 VALUES IN (10352,10353,10354,10355), +PARTITION p2589 VALUES IN (10356,10357,10358,10359), +PARTITION p2590 VALUES IN (10360,10361,10362,10363), +PARTITION p2591 VALUES IN (10364,10365,10366,10367), +PARTITION p2592 VALUES IN (10368,10369,10370,10371), +PARTITION p2593 VALUES IN (10372,10373,10374,10375), +PARTITION p2594 VALUES IN (10376,10377,10378,10379), +PARTITION p2595 VALUES IN (10380,10381,10382,10383), +PARTITION p2596 VALUES IN (10384,10385,10386,10387), +PARTITION p2597 VALUES IN (10388,10389,10390,10391), +PARTITION p2598 VALUES IN (10392,10393,10394,10395), +PARTITION p2599 VALUES IN (10396,10397,10398,10399), +PARTITION p2600 VALUES IN (10400,10401,10402,10403), +PARTITION p2601 VALUES IN (10404,10405,10406,10407), +PARTITION p2602 VALUES IN (10408,10409,10410,10411), +PARTITION p2603 VALUES IN (10412,10413,10414,10415), +PARTITION p2604 VALUES IN (10416,10417,10418,10419), +PARTITION p2605 VALUES IN (10420,10421,10422,10423), +PARTITION p2606 VALUES IN (10424,10425,10426,10427), +PARTITION p2607 VALUES IN (10428,10429,10430,10431), +PARTITION p2608 VALUES IN (10432,10433,10434,10435), +PARTITION p2609 VALUES IN (10436,10437,10438,10439), +PARTITION p2610 VALUES IN (10440,10441,10442,10443), +PARTITION p2611 VALUES IN (10444,10445,10446,10447), +PARTITION p2612 VALUES IN (10448,10449,10450,10451), +PARTITION p2613 VALUES IN (10452,10453,10454,10455), +PARTITION p2614 VALUES IN (10456,10457,10458,10459), +PARTITION p2615 VALUES IN (10460,10461,10462,10463), +PARTITION p2616 VALUES IN (10464,10465,10466,10467), +PARTITION p2617 VALUES IN (10468,10469,10470,10471), +PARTITION p2618 VALUES IN (10472,10473,10474,10475), +PARTITION p2619 VALUES IN (10476,10477,10478,10479), +PARTITION p2620 VALUES IN (10480,10481,10482,10483), +PARTITION p2621 VALUES IN (10484,10485,10486,10487), +PARTITION p2622 VALUES IN (10488,10489,10490,10491), +PARTITION p2623 VALUES IN (10492,10493,10494,10495), +PARTITION p2624 VALUES IN (10496,10497,10498,10499), +PARTITION p2625 VALUES IN (10500,10501,10502,10503), +PARTITION p2626 VALUES IN (10504,10505,10506,10507), +PARTITION p2627 VALUES IN (10508,10509,10510,10511), +PARTITION p2628 VALUES IN (10512,10513,10514,10515), +PARTITION p2629 VALUES IN (10516,10517,10518,10519), +PARTITION p2630 VALUES IN (10520,10521,10522,10523), +PARTITION p2631 VALUES IN (10524,10525,10526,10527), +PARTITION p2632 VALUES IN (10528,10529,10530,10531), +PARTITION p2633 VALUES IN (10532,10533,10534,10535), +PARTITION p2634 VALUES IN (10536,10537,10538,10539), +PARTITION p2635 VALUES IN (10540,10541,10542,10543), +PARTITION p2636 VALUES IN (10544,10545,10546,10547), +PARTITION p2637 VALUES IN (10548,10549,10550,10551), +PARTITION p2638 VALUES IN (10552,10553,10554,10555), +PARTITION p2639 VALUES IN (10556,10557,10558,10559), +PARTITION p2640 VALUES IN (10560,10561,10562,10563), +PARTITION p2641 VALUES IN (10564,10565,10566,10567), +PARTITION p2642 VALUES IN (10568,10569,10570,10571), +PARTITION p2643 VALUES IN (10572,10573,10574,10575), +PARTITION p2644 VALUES IN (10576,10577,10578,10579), +PARTITION p2645 VALUES IN (10580,10581,10582,10583), +PARTITION p2646 VALUES IN (10584,10585,10586,10587), +PARTITION p2647 VALUES IN (10588,10589,10590,10591), +PARTITION p2648 VALUES IN (10592,10593,10594,10595), +PARTITION p2649 VALUES IN (10596,10597,10598,10599), +PARTITION p2650 VALUES IN (10600,10601,10602,10603), +PARTITION p2651 VALUES IN (10604,10605,10606,10607), +PARTITION p2652 VALUES IN (10608,10609,10610,10611), +PARTITION p2653 VALUES IN (10612,10613,10614,10615), +PARTITION p2654 VALUES IN (10616,10617,10618,10619), +PARTITION p2655 VALUES IN (10620,10621,10622,10623), +PARTITION p2656 VALUES IN (10624,10625,10626,10627), +PARTITION p2657 VALUES IN (10628,10629,10630,10631), +PARTITION p2658 VALUES IN (10632,10633,10634,10635), +PARTITION p2659 VALUES IN (10636,10637,10638,10639), +PARTITION p2660 VALUES IN (10640,10641,10642,10643), +PARTITION p2661 VALUES IN (10644,10645,10646,10647), +PARTITION p2662 VALUES IN (10648,10649,10650,10651), +PARTITION p2663 VALUES IN (10652,10653,10654,10655), +PARTITION p2664 VALUES IN (10656,10657,10658,10659), +PARTITION p2665 VALUES IN (10660,10661,10662,10663), +PARTITION p2666 VALUES IN (10664,10665,10666,10667), +PARTITION p2667 VALUES IN (10668,10669,10670,10671), +PARTITION p2668 VALUES IN (10672,10673,10674,10675), +PARTITION p2669 VALUES IN (10676,10677,10678,10679), +PARTITION p2670 VALUES IN (10680,10681,10682,10683), +PARTITION p2671 VALUES IN (10684,10685,10686,10687), +PARTITION p2672 VALUES IN (10688,10689,10690,10691), +PARTITION p2673 VALUES IN (10692,10693,10694,10695), +PARTITION p2674 VALUES IN (10696,10697,10698,10699), +PARTITION p2675 VALUES IN (10700,10701,10702,10703), +PARTITION p2676 VALUES IN (10704,10705,10706,10707), +PARTITION p2677 VALUES IN (10708,10709,10710,10711), +PARTITION p2678 VALUES IN (10712,10713,10714,10715), +PARTITION p2679 VALUES IN (10716,10717,10718,10719), +PARTITION p2680 VALUES IN (10720,10721,10722,10723), +PARTITION p2681 VALUES IN (10724,10725,10726,10727), +PARTITION p2682 VALUES IN (10728,10729,10730,10731), +PARTITION p2683 VALUES IN (10732,10733,10734,10735), +PARTITION p2684 VALUES IN (10736,10737,10738,10739), +PARTITION p2685 VALUES IN (10740,10741,10742,10743), +PARTITION p2686 VALUES IN (10744,10745,10746,10747), +PARTITION p2687 VALUES IN (10748,10749,10750,10751), +PARTITION p2688 VALUES IN (10752,10753,10754,10755), +PARTITION p2689 VALUES IN (10756,10757,10758,10759), +PARTITION p2690 VALUES IN (10760,10761,10762,10763), +PARTITION p2691 VALUES IN (10764,10765,10766,10767), +PARTITION p2692 VALUES IN (10768,10769,10770,10771), +PARTITION p2693 VALUES IN (10772,10773,10774,10775), +PARTITION p2694 VALUES IN (10776,10777,10778,10779), +PARTITION p2695 VALUES IN (10780,10781,10782,10783), +PARTITION p2696 VALUES IN (10784,10785,10786,10787), +PARTITION p2697 VALUES IN (10788,10789,10790,10791), +PARTITION p2698 VALUES IN (10792,10793,10794,10795), +PARTITION p2699 VALUES IN (10796,10797,10798,10799), +PARTITION p2700 VALUES IN (10800,10801,10802,10803), +PARTITION p2701 VALUES IN (10804,10805,10806,10807), +PARTITION p2702 VALUES IN (10808,10809,10810,10811), +PARTITION p2703 VALUES IN (10812,10813,10814,10815), +PARTITION p2704 VALUES IN (10816,10817,10818,10819), +PARTITION p2705 VALUES IN (10820,10821,10822,10823), +PARTITION p2706 VALUES IN (10824,10825,10826,10827), +PARTITION p2707 VALUES IN (10828,10829,10830,10831), +PARTITION p2708 VALUES IN (10832,10833,10834,10835), +PARTITION p2709 VALUES IN (10836,10837,10838,10839), +PARTITION p2710 VALUES IN (10840,10841,10842,10843), +PARTITION p2711 VALUES IN (10844,10845,10846,10847), +PARTITION p2712 VALUES IN (10848,10849,10850,10851), +PARTITION p2713 VALUES IN (10852,10853,10854,10855), +PARTITION p2714 VALUES IN (10856,10857,10858,10859), +PARTITION p2715 VALUES IN (10860,10861,10862,10863), +PARTITION p2716 VALUES IN (10864,10865,10866,10867), +PARTITION p2717 VALUES IN (10868,10869,10870,10871), +PARTITION p2718 VALUES IN (10872,10873,10874,10875), +PARTITION p2719 VALUES IN (10876,10877,10878,10879), +PARTITION p2720 VALUES IN (10880,10881,10882,10883), +PARTITION p2721 VALUES IN (10884,10885,10886,10887), +PARTITION p2722 VALUES IN (10888,10889,10890,10891), +PARTITION p2723 VALUES IN (10892,10893,10894,10895), +PARTITION p2724 VALUES IN (10896,10897,10898,10899), +PARTITION p2725 VALUES IN (10900,10901,10902,10903), +PARTITION p2726 VALUES IN (10904,10905,10906,10907), +PARTITION p2727 VALUES IN (10908,10909,10910,10911), +PARTITION p2728 VALUES IN (10912,10913,10914,10915), +PARTITION p2729 VALUES IN (10916,10917,10918,10919), +PARTITION p2730 VALUES IN (10920,10921,10922,10923), +PARTITION p2731 VALUES IN (10924,10925,10926,10927), +PARTITION p2732 VALUES IN (10928,10929,10930,10931), +PARTITION p2733 VALUES IN (10932,10933,10934,10935), +PARTITION p2734 VALUES IN (10936,10937,10938,10939), +PARTITION p2735 VALUES IN (10940,10941,10942,10943), +PARTITION p2736 VALUES IN (10944,10945,10946,10947), +PARTITION p2737 VALUES IN (10948,10949,10950,10951), +PARTITION p2738 VALUES IN (10952,10953,10954,10955), +PARTITION p2739 VALUES IN (10956,10957,10958,10959), +PARTITION p2740 VALUES IN (10960,10961,10962,10963), +PARTITION p2741 VALUES IN (10964,10965,10966,10967), +PARTITION p2742 VALUES IN (10968,10969,10970,10971), +PARTITION p2743 VALUES IN (10972,10973,10974,10975), +PARTITION p2744 VALUES IN (10976,10977,10978,10979), +PARTITION p2745 VALUES IN (10980,10981,10982,10983), +PARTITION p2746 VALUES IN (10984,10985,10986,10987), +PARTITION p2747 VALUES IN (10988,10989,10990,10991), +PARTITION p2748 VALUES IN (10992,10993,10994,10995), +PARTITION p2749 VALUES IN (10996,10997,10998,10999), +PARTITION p2750 VALUES IN (11000,11001,11002,11003), +PARTITION p2751 VALUES IN (11004,11005,11006,11007), +PARTITION p2752 VALUES IN (11008,11009,11010,11011), +PARTITION p2753 VALUES IN (11012,11013,11014,11015), +PARTITION p2754 VALUES IN (11016,11017,11018,11019), +PARTITION p2755 VALUES IN (11020,11021,11022,11023), +PARTITION p2756 VALUES IN (11024,11025,11026,11027), +PARTITION p2757 VALUES IN (11028,11029,11030,11031), +PARTITION p2758 VALUES IN (11032,11033,11034,11035), +PARTITION p2759 VALUES IN (11036,11037,11038,11039), +PARTITION p2760 VALUES IN (11040,11041,11042,11043), +PARTITION p2761 VALUES IN (11044,11045,11046,11047), +PARTITION p2762 VALUES IN (11048,11049,11050,11051), +PARTITION p2763 VALUES IN (11052,11053,11054,11055), +PARTITION p2764 VALUES IN (11056,11057,11058,11059), +PARTITION p2765 VALUES IN (11060,11061,11062,11063), +PARTITION p2766 VALUES IN (11064,11065,11066,11067), +PARTITION p2767 VALUES IN (11068,11069,11070,11071), +PARTITION p2768 VALUES IN (11072,11073,11074,11075), +PARTITION p2769 VALUES IN (11076,11077,11078,11079), +PARTITION p2770 VALUES IN (11080,11081,11082,11083), +PARTITION p2771 VALUES IN (11084,11085,11086,11087), +PARTITION p2772 VALUES IN (11088,11089,11090,11091), +PARTITION p2773 VALUES IN (11092,11093,11094,11095), +PARTITION p2774 VALUES IN (11096,11097,11098,11099), +PARTITION p2775 VALUES IN (11100,11101,11102,11103), +PARTITION p2776 VALUES IN (11104,11105,11106,11107), +PARTITION p2777 VALUES IN (11108,11109,11110,11111), +PARTITION p2778 VALUES IN (11112,11113,11114,11115), +PARTITION p2779 VALUES IN (11116,11117,11118,11119), +PARTITION p2780 VALUES IN (11120,11121,11122,11123), +PARTITION p2781 VALUES IN (11124,11125,11126,11127), +PARTITION p2782 VALUES IN (11128,11129,11130,11131), +PARTITION p2783 VALUES IN (11132,11133,11134,11135), +PARTITION p2784 VALUES IN (11136,11137,11138,11139), +PARTITION p2785 VALUES IN (11140,11141,11142,11143), +PARTITION p2786 VALUES IN (11144,11145,11146,11147), +PARTITION p2787 VALUES IN (11148,11149,11150,11151), +PARTITION p2788 VALUES IN (11152,11153,11154,11155), +PARTITION p2789 VALUES IN (11156,11157,11158,11159), +PARTITION p2790 VALUES IN (11160,11161,11162,11163), +PARTITION p2791 VALUES IN (11164,11165,11166,11167), +PARTITION p2792 VALUES IN (11168,11169,11170,11171), +PARTITION p2793 VALUES IN (11172,11173,11174,11175), +PARTITION p2794 VALUES IN (11176,11177,11178,11179), +PARTITION p2795 VALUES IN (11180,11181,11182,11183), +PARTITION p2796 VALUES IN (11184,11185,11186,11187), +PARTITION p2797 VALUES IN (11188,11189,11190,11191), +PARTITION p2798 VALUES IN (11192,11193,11194,11195), +PARTITION p2799 VALUES IN (11196,11197,11198,11199), +PARTITION p2800 VALUES IN (11200,11201,11202,11203), +PARTITION p2801 VALUES IN (11204,11205,11206,11207), +PARTITION p2802 VALUES IN (11208,11209,11210,11211), +PARTITION p2803 VALUES IN (11212,11213,11214,11215), +PARTITION p2804 VALUES IN (11216,11217,11218,11219), +PARTITION p2805 VALUES IN (11220,11221,11222,11223), +PARTITION p2806 VALUES IN (11224,11225,11226,11227), +PARTITION p2807 VALUES IN (11228,11229,11230,11231), +PARTITION p2808 VALUES IN (11232,11233,11234,11235), +PARTITION p2809 VALUES IN (11236,11237,11238,11239), +PARTITION p2810 VALUES IN (11240,11241,11242,11243), +PARTITION p2811 VALUES IN (11244,11245,11246,11247), +PARTITION p2812 VALUES IN (11248,11249,11250,11251), +PARTITION p2813 VALUES IN (11252,11253,11254,11255), +PARTITION p2814 VALUES IN (11256,11257,11258,11259), +PARTITION p2815 VALUES IN (11260,11261,11262,11263), +PARTITION p2816 VALUES IN (11264,11265,11266,11267), +PARTITION p2817 VALUES IN (11268,11269,11270,11271), +PARTITION p2818 VALUES IN (11272,11273,11274,11275), +PARTITION p2819 VALUES IN (11276,11277,11278,11279), +PARTITION p2820 VALUES IN (11280,11281,11282,11283), +PARTITION p2821 VALUES IN (11284,11285,11286,11287), +PARTITION p2822 VALUES IN (11288,11289,11290,11291), +PARTITION p2823 VALUES IN (11292,11293,11294,11295), +PARTITION p2824 VALUES IN (11296,11297,11298,11299), +PARTITION p2825 VALUES IN (11300,11301,11302,11303), +PARTITION p2826 VALUES IN (11304,11305,11306,11307), +PARTITION p2827 VALUES IN (11308,11309,11310,11311), +PARTITION p2828 VALUES IN (11312,11313,11314,11315), +PARTITION p2829 VALUES IN (11316,11317,11318,11319), +PARTITION p2830 VALUES IN (11320,11321,11322,11323), +PARTITION p2831 VALUES IN (11324,11325,11326,11327), +PARTITION p2832 VALUES IN (11328,11329,11330,11331), +PARTITION p2833 VALUES IN (11332,11333,11334,11335), +PARTITION p2834 VALUES IN (11336,11337,11338,11339), +PARTITION p2835 VALUES IN (11340,11341,11342,11343), +PARTITION p2836 VALUES IN (11344,11345,11346,11347), +PARTITION p2837 VALUES IN (11348,11349,11350,11351), +PARTITION p2838 VALUES IN (11352,11353,11354,11355), +PARTITION p2839 VALUES IN (11356,11357,11358,11359), +PARTITION p2840 VALUES IN (11360,11361,11362,11363), +PARTITION p2841 VALUES IN (11364,11365,11366,11367), +PARTITION p2842 VALUES IN (11368,11369,11370,11371), +PARTITION p2843 VALUES IN (11372,11373,11374,11375), +PARTITION p2844 VALUES IN (11376,11377,11378,11379), +PARTITION p2845 VALUES IN (11380,11381,11382,11383), +PARTITION p2846 VALUES IN (11384,11385,11386,11387), +PARTITION p2847 VALUES IN (11388,11389,11390,11391), +PARTITION p2848 VALUES IN (11392,11393,11394,11395), +PARTITION p2849 VALUES IN (11396,11397,11398,11399), +PARTITION p2850 VALUES IN (11400,11401,11402,11403), +PARTITION p2851 VALUES IN (11404,11405,11406,11407), +PARTITION p2852 VALUES IN (11408,11409,11410,11411), +PARTITION p2853 VALUES IN (11412,11413,11414,11415), +PARTITION p2854 VALUES IN (11416,11417,11418,11419), +PARTITION p2855 VALUES IN (11420,11421,11422,11423), +PARTITION p2856 VALUES IN (11424,11425,11426,11427), +PARTITION p2857 VALUES IN (11428,11429,11430,11431), +PARTITION p2858 VALUES IN (11432,11433,11434,11435), +PARTITION p2859 VALUES IN (11436,11437,11438,11439), +PARTITION p2860 VALUES IN (11440,11441,11442,11443), +PARTITION p2861 VALUES IN (11444,11445,11446,11447), +PARTITION p2862 VALUES IN (11448,11449,11450,11451), +PARTITION p2863 VALUES IN (11452,11453,11454,11455), +PARTITION p2864 VALUES IN (11456,11457,11458,11459), +PARTITION p2865 VALUES IN (11460,11461,11462,11463), +PARTITION p2866 VALUES IN (11464,11465,11466,11467), +PARTITION p2867 VALUES IN (11468,11469,11470,11471), +PARTITION p2868 VALUES IN (11472,11473,11474,11475), +PARTITION p2869 VALUES IN (11476,11477,11478,11479), +PARTITION p2870 VALUES IN (11480,11481,11482,11483), +PARTITION p2871 VALUES IN (11484,11485,11486,11487), +PARTITION p2872 VALUES IN (11488,11489,11490,11491), +PARTITION p2873 VALUES IN (11492,11493,11494,11495), +PARTITION p2874 VALUES IN (11496,11497,11498,11499), +PARTITION p2875 VALUES IN (11500,11501,11502,11503), +PARTITION p2876 VALUES IN (11504,11505,11506,11507), +PARTITION p2877 VALUES IN (11508,11509,11510,11511), +PARTITION p2878 VALUES IN (11512,11513,11514,11515), +PARTITION p2879 VALUES IN (11516,11517,11518,11519), +PARTITION p2880 VALUES IN (11520,11521,11522,11523), +PARTITION p2881 VALUES IN (11524,11525,11526,11527), +PARTITION p2882 VALUES IN (11528,11529,11530,11531), +PARTITION p2883 VALUES IN (11532,11533,11534,11535), +PARTITION p2884 VALUES IN (11536,11537,11538,11539), +PARTITION p2885 VALUES IN (11540,11541,11542,11543), +PARTITION p2886 VALUES IN (11544,11545,11546,11547), +PARTITION p2887 VALUES IN (11548,11549,11550,11551), +PARTITION p2888 VALUES IN (11552,11553,11554,11555), +PARTITION p2889 VALUES IN (11556,11557,11558,11559), +PARTITION p2890 VALUES IN (11560,11561,11562,11563), +PARTITION p2891 VALUES IN (11564,11565,11566,11567), +PARTITION p2892 VALUES IN (11568,11569,11570,11571), +PARTITION p2893 VALUES IN (11572,11573,11574,11575), +PARTITION p2894 VALUES IN (11576,11577,11578,11579), +PARTITION p2895 VALUES IN (11580,11581,11582,11583), +PARTITION p2896 VALUES IN (11584,11585,11586,11587), +PARTITION p2897 VALUES IN (11588,11589,11590,11591), +PARTITION p2898 VALUES IN (11592,11593,11594,11595), +PARTITION p2899 VALUES IN (11596,11597,11598,11599), +PARTITION p2900 VALUES IN (11600,11601,11602,11603), +PARTITION p2901 VALUES IN (11604,11605,11606,11607), +PARTITION p2902 VALUES IN (11608,11609,11610,11611), +PARTITION p2903 VALUES IN (11612,11613,11614,11615), +PARTITION p2904 VALUES IN (11616,11617,11618,11619), +PARTITION p2905 VALUES IN (11620,11621,11622,11623), +PARTITION p2906 VALUES IN (11624,11625,11626,11627), +PARTITION p2907 VALUES IN (11628,11629,11630,11631), +PARTITION p2908 VALUES IN (11632,11633,11634,11635), +PARTITION p2909 VALUES IN (11636,11637,11638,11639), +PARTITION p2910 VALUES IN (11640,11641,11642,11643), +PARTITION p2911 VALUES IN (11644,11645,11646,11647), +PARTITION p2912 VALUES IN (11648,11649,11650,11651), +PARTITION p2913 VALUES IN (11652,11653,11654,11655), +PARTITION p2914 VALUES IN (11656,11657,11658,11659), +PARTITION p2915 VALUES IN (11660,11661,11662,11663), +PARTITION p2916 VALUES IN (11664,11665,11666,11667), +PARTITION p2917 VALUES IN (11668,11669,11670,11671), +PARTITION p2918 VALUES IN (11672,11673,11674,11675), +PARTITION p2919 VALUES IN (11676,11677,11678,11679), +PARTITION p2920 VALUES IN (11680,11681,11682,11683), +PARTITION p2921 VALUES IN (11684,11685,11686,11687), +PARTITION p2922 VALUES IN (11688,11689,11690,11691), +PARTITION p2923 VALUES IN (11692,11693,11694,11695), +PARTITION p2924 VALUES IN (11696,11697,11698,11699), +PARTITION p2925 VALUES IN (11700,11701,11702,11703), +PARTITION p2926 VALUES IN (11704,11705,11706,11707), +PARTITION p2927 VALUES IN (11708,11709,11710,11711), +PARTITION p2928 VALUES IN (11712,11713,11714,11715), +PARTITION p2929 VALUES IN (11716,11717,11718,11719), +PARTITION p2930 VALUES IN (11720,11721,11722,11723), +PARTITION p2931 VALUES IN (11724,11725,11726,11727), +PARTITION p2932 VALUES IN (11728,11729,11730,11731), +PARTITION p2933 VALUES IN (11732,11733,11734,11735), +PARTITION p2934 VALUES IN (11736,11737,11738,11739), +PARTITION p2935 VALUES IN (11740,11741,11742,11743), +PARTITION p2936 VALUES IN (11744,11745,11746,11747), +PARTITION p2937 VALUES IN (11748,11749,11750,11751), +PARTITION p2938 VALUES IN (11752,11753,11754,11755), +PARTITION p2939 VALUES IN (11756,11757,11758,11759), +PARTITION p2940 VALUES IN (11760,11761,11762,11763), +PARTITION p2941 VALUES IN (11764,11765,11766,11767), +PARTITION p2942 VALUES IN (11768,11769,11770,11771), +PARTITION p2943 VALUES IN (11772,11773,11774,11775), +PARTITION p2944 VALUES IN (11776,11777,11778,11779), +PARTITION p2945 VALUES IN (11780,11781,11782,11783), +PARTITION p2946 VALUES IN (11784,11785,11786,11787), +PARTITION p2947 VALUES IN (11788,11789,11790,11791), +PARTITION p2948 VALUES IN (11792,11793,11794,11795), +PARTITION p2949 VALUES IN (11796,11797,11798,11799), +PARTITION p2950 VALUES IN (11800,11801,11802,11803), +PARTITION p2951 VALUES IN (11804,11805,11806,11807), +PARTITION p2952 VALUES IN (11808,11809,11810,11811), +PARTITION p2953 VALUES IN (11812,11813,11814,11815), +PARTITION p2954 VALUES IN (11816,11817,11818,11819), +PARTITION p2955 VALUES IN (11820,11821,11822,11823), +PARTITION p2956 VALUES IN (11824,11825,11826,11827), +PARTITION p2957 VALUES IN (11828,11829,11830,11831), +PARTITION p2958 VALUES IN (11832,11833,11834,11835), +PARTITION p2959 VALUES IN (11836,11837,11838,11839), +PARTITION p2960 VALUES IN (11840,11841,11842,11843), +PARTITION p2961 VALUES IN (11844,11845,11846,11847), +PARTITION p2962 VALUES IN (11848,11849,11850,11851), +PARTITION p2963 VALUES IN (11852,11853,11854,11855), +PARTITION p2964 VALUES IN (11856,11857,11858,11859), +PARTITION p2965 VALUES IN (11860,11861,11862,11863), +PARTITION p2966 VALUES IN (11864,11865,11866,11867), +PARTITION p2967 VALUES IN (11868,11869,11870,11871), +PARTITION p2968 VALUES IN (11872,11873,11874,11875), +PARTITION p2969 VALUES IN (11876,11877,11878,11879), +PARTITION p2970 VALUES IN (11880,11881,11882,11883), +PARTITION p2971 VALUES IN (11884,11885,11886,11887), +PARTITION p2972 VALUES IN (11888,11889,11890,11891), +PARTITION p2973 VALUES IN (11892,11893,11894,11895), +PARTITION p2974 VALUES IN (11896,11897,11898,11899), +PARTITION p2975 VALUES IN (11900,11901,11902,11903), +PARTITION p2976 VALUES IN (11904,11905,11906,11907), +PARTITION p2977 VALUES IN (11908,11909,11910,11911), +PARTITION p2978 VALUES IN (11912,11913,11914,11915), +PARTITION p2979 VALUES IN (11916,11917,11918,11919), +PARTITION p2980 VALUES IN (11920,11921,11922,11923), +PARTITION p2981 VALUES IN (11924,11925,11926,11927), +PARTITION p2982 VALUES IN (11928,11929,11930,11931), +PARTITION p2983 VALUES IN (11932,11933,11934,11935), +PARTITION p2984 VALUES IN (11936,11937,11938,11939), +PARTITION p2985 VALUES IN (11940,11941,11942,11943), +PARTITION p2986 VALUES IN (11944,11945,11946,11947), +PARTITION p2987 VALUES IN (11948,11949,11950,11951), +PARTITION p2988 VALUES IN (11952,11953,11954,11955), +PARTITION p2989 VALUES IN (11956,11957,11958,11959), +PARTITION p2990 VALUES IN (11960,11961,11962,11963), +PARTITION p2991 VALUES IN (11964,11965,11966,11967), +PARTITION p2992 VALUES IN (11968,11969,11970,11971), +PARTITION p2993 VALUES IN (11972,11973,11974,11975), +PARTITION p2994 VALUES IN (11976,11977,11978,11979), +PARTITION p2995 VALUES IN (11980,11981,11982,11983), +PARTITION p2996 VALUES IN (11984,11985,11986,11987), +PARTITION p2997 VALUES IN (11988,11989,11990,11991), +PARTITION p2998 VALUES IN (11992,11993,11994,11995), +PARTITION p2999 VALUES IN (11996,11997,11998,11999), +PARTITION p3000 VALUES IN (12000,12001,12002,12003), +PARTITION p3001 VALUES IN (12004,12005,12006,12007), +PARTITION p3002 VALUES IN (12008,12009,12010,12011), +PARTITION p3003 VALUES IN (12012,12013,12014,12015), +PARTITION p3004 VALUES IN (12016,12017,12018,12019), +PARTITION p3005 VALUES IN (12020,12021,12022,12023), +PARTITION p3006 VALUES IN (12024,12025,12026,12027), +PARTITION p3007 VALUES IN (12028,12029,12030,12031), +PARTITION p3008 VALUES IN (12032,12033,12034,12035), +PARTITION p3009 VALUES IN (12036,12037,12038,12039), +PARTITION p3010 VALUES IN (12040,12041,12042,12043), +PARTITION p3011 VALUES IN (12044,12045,12046,12047), +PARTITION p3012 VALUES IN (12048,12049,12050,12051), +PARTITION p3013 VALUES IN (12052,12053,12054,12055), +PARTITION p3014 VALUES IN (12056,12057,12058,12059), +PARTITION p3015 VALUES IN (12060,12061,12062,12063), +PARTITION p3016 VALUES IN (12064,12065,12066,12067), +PARTITION p3017 VALUES IN (12068,12069,12070,12071), +PARTITION p3018 VALUES IN (12072,12073,12074,12075), +PARTITION p3019 VALUES IN (12076,12077,12078,12079), +PARTITION p3020 VALUES IN (12080,12081,12082,12083), +PARTITION p3021 VALUES IN (12084,12085,12086,12087), +PARTITION p3022 VALUES IN (12088,12089,12090,12091), +PARTITION p3023 VALUES IN (12092,12093,12094,12095), +PARTITION p3024 VALUES IN (12096,12097,12098,12099), +PARTITION p3025 VALUES IN (12100,12101,12102,12103), +PARTITION p3026 VALUES IN (12104,12105,12106,12107), +PARTITION p3027 VALUES IN (12108,12109,12110,12111), +PARTITION p3028 VALUES IN (12112,12113,12114,12115), +PARTITION p3029 VALUES IN (12116,12117,12118,12119), +PARTITION p3030 VALUES IN (12120,12121,12122,12123), +PARTITION p3031 VALUES IN (12124,12125,12126,12127), +PARTITION p3032 VALUES IN (12128,12129,12130,12131), +PARTITION p3033 VALUES IN (12132,12133,12134,12135), +PARTITION p3034 VALUES IN (12136,12137,12138,12139), +PARTITION p3035 VALUES IN (12140,12141,12142,12143), +PARTITION p3036 VALUES IN (12144,12145,12146,12147), +PARTITION p3037 VALUES IN (12148,12149,12150,12151), +PARTITION p3038 VALUES IN (12152,12153,12154,12155), +PARTITION p3039 VALUES IN (12156,12157,12158,12159), +PARTITION p3040 VALUES IN (12160,12161,12162,12163), +PARTITION p3041 VALUES IN (12164,12165,12166,12167), +PARTITION p3042 VALUES IN (12168,12169,12170,12171), +PARTITION p3043 VALUES IN (12172,12173,12174,12175), +PARTITION p3044 VALUES IN (12176,12177,12178,12179), +PARTITION p3045 VALUES IN (12180,12181,12182,12183), +PARTITION p3046 VALUES IN (12184,12185,12186,12187), +PARTITION p3047 VALUES IN (12188,12189,12190,12191), +PARTITION p3048 VALUES IN (12192,12193,12194,12195), +PARTITION p3049 VALUES IN (12196,12197,12198,12199), +PARTITION p3050 VALUES IN (12200,12201,12202,12203), +PARTITION p3051 VALUES IN (12204,12205,12206,12207), +PARTITION p3052 VALUES IN (12208,12209,12210,12211), +PARTITION p3053 VALUES IN (12212,12213,12214,12215), +PARTITION p3054 VALUES IN (12216,12217,12218,12219), +PARTITION p3055 VALUES IN (12220,12221,12222,12223), +PARTITION p3056 VALUES IN (12224,12225,12226,12227), +PARTITION p3057 VALUES IN (12228,12229,12230,12231), +PARTITION p3058 VALUES IN (12232,12233,12234,12235), +PARTITION p3059 VALUES IN (12236,12237,12238,12239), +PARTITION p3060 VALUES IN (12240,12241,12242,12243), +PARTITION p3061 VALUES IN (12244,12245,12246,12247), +PARTITION p3062 VALUES IN (12248,12249,12250,12251), +PARTITION p3063 VALUES IN (12252,12253,12254,12255), +PARTITION p3064 VALUES IN (12256,12257,12258,12259), +PARTITION p3065 VALUES IN (12260,12261,12262,12263), +PARTITION p3066 VALUES IN (12264,12265,12266,12267), +PARTITION p3067 VALUES IN (12268,12269,12270,12271), +PARTITION p3068 VALUES IN (12272,12273,12274,12275), +PARTITION p3069 VALUES IN (12276,12277,12278,12279), +PARTITION p3070 VALUES IN (12280,12281,12282,12283), +PARTITION p3071 VALUES IN (12284,12285,12286,12287), +PARTITION p3072 VALUES IN (12288,12289,12290,12291), +PARTITION p3073 VALUES IN (12292,12293,12294,12295), +PARTITION p3074 VALUES IN (12296,12297,12298,12299), +PARTITION p3075 VALUES IN (12300,12301,12302,12303), +PARTITION p3076 VALUES IN (12304,12305,12306,12307), +PARTITION p3077 VALUES IN (12308,12309,12310,12311), +PARTITION p3078 VALUES IN (12312,12313,12314,12315), +PARTITION p3079 VALUES IN (12316,12317,12318,12319), +PARTITION p3080 VALUES IN (12320,12321,12322,12323), +PARTITION p3081 VALUES IN (12324,12325,12326,12327), +PARTITION p3082 VALUES IN (12328,12329,12330,12331), +PARTITION p3083 VALUES IN (12332,12333,12334,12335), +PARTITION p3084 VALUES IN (12336,12337,12338,12339), +PARTITION p3085 VALUES IN (12340,12341,12342,12343), +PARTITION p3086 VALUES IN (12344,12345,12346,12347), +PARTITION p3087 VALUES IN (12348,12349,12350,12351), +PARTITION p3088 VALUES IN (12352,12353,12354,12355), +PARTITION p3089 VALUES IN (12356,12357,12358,12359), +PARTITION p3090 VALUES IN (12360,12361,12362,12363), +PARTITION p3091 VALUES IN (12364,12365,12366,12367), +PARTITION p3092 VALUES IN (12368,12369,12370,12371), +PARTITION p3093 VALUES IN (12372,12373,12374,12375), +PARTITION p3094 VALUES IN (12376,12377,12378,12379), +PARTITION p3095 VALUES IN (12380,12381,12382,12383), +PARTITION p3096 VALUES IN (12384,12385,12386,12387), +PARTITION p3097 VALUES IN (12388,12389,12390,12391), +PARTITION p3098 VALUES IN (12392,12393,12394,12395), +PARTITION p3099 VALUES IN (12396,12397,12398,12399), +PARTITION p3100 VALUES IN (12400,12401,12402,12403), +PARTITION p3101 VALUES IN (12404,12405,12406,12407), +PARTITION p3102 VALUES IN (12408,12409,12410,12411), +PARTITION p3103 VALUES IN (12412,12413,12414,12415), +PARTITION p3104 VALUES IN (12416,12417,12418,12419), +PARTITION p3105 VALUES IN (12420,12421,12422,12423), +PARTITION p3106 VALUES IN (12424,12425,12426,12427), +PARTITION p3107 VALUES IN (12428,12429,12430,12431), +PARTITION p3108 VALUES IN (12432,12433,12434,12435), +PARTITION p3109 VALUES IN (12436,12437,12438,12439), +PARTITION p3110 VALUES IN (12440,12441,12442,12443), +PARTITION p3111 VALUES IN (12444,12445,12446,12447), +PARTITION p3112 VALUES IN (12448,12449,12450,12451), +PARTITION p3113 VALUES IN (12452,12453,12454,12455), +PARTITION p3114 VALUES IN (12456,12457,12458,12459), +PARTITION p3115 VALUES IN (12460,12461,12462,12463), +PARTITION p3116 VALUES IN (12464,12465,12466,12467), +PARTITION p3117 VALUES IN (12468,12469,12470,12471), +PARTITION p3118 VALUES IN (12472,12473,12474,12475), +PARTITION p3119 VALUES IN (12476,12477,12478,12479), +PARTITION p3120 VALUES IN (12480,12481,12482,12483), +PARTITION p3121 VALUES IN (12484,12485,12486,12487), +PARTITION p3122 VALUES IN (12488,12489,12490,12491), +PARTITION p3123 VALUES IN (12492,12493,12494,12495), +PARTITION p3124 VALUES IN (12496,12497,12498,12499), +PARTITION p3125 VALUES IN (12500,12501,12502,12503), +PARTITION p3126 VALUES IN (12504,12505,12506,12507), +PARTITION p3127 VALUES IN (12508,12509,12510,12511), +PARTITION p3128 VALUES IN (12512,12513,12514,12515), +PARTITION p3129 VALUES IN (12516,12517,12518,12519), +PARTITION p3130 VALUES IN (12520,12521,12522,12523), +PARTITION p3131 VALUES IN (12524,12525,12526,12527), +PARTITION p3132 VALUES IN (12528,12529,12530,12531), +PARTITION p3133 VALUES IN (12532,12533,12534,12535), +PARTITION p3134 VALUES IN (12536,12537,12538,12539), +PARTITION p3135 VALUES IN (12540,12541,12542,12543), +PARTITION p3136 VALUES IN (12544,12545,12546,12547), +PARTITION p3137 VALUES IN (12548,12549,12550,12551), +PARTITION p3138 VALUES IN (12552,12553,12554,12555), +PARTITION p3139 VALUES IN (12556,12557,12558,12559), +PARTITION p3140 VALUES IN (12560,12561,12562,12563), +PARTITION p3141 VALUES IN (12564,12565,12566,12567), +PARTITION p3142 VALUES IN (12568,12569,12570,12571), +PARTITION p3143 VALUES IN (12572,12573,12574,12575), +PARTITION p3144 VALUES IN (12576,12577,12578,12579), +PARTITION p3145 VALUES IN (12580,12581,12582,12583), +PARTITION p3146 VALUES IN (12584,12585,12586,12587), +PARTITION p3147 VALUES IN (12588,12589,12590,12591), +PARTITION p3148 VALUES IN (12592,12593,12594,12595), +PARTITION p3149 VALUES IN (12596,12597,12598,12599), +PARTITION p3150 VALUES IN (12600,12601,12602,12603), +PARTITION p3151 VALUES IN (12604,12605,12606,12607), +PARTITION p3152 VALUES IN (12608,12609,12610,12611), +PARTITION p3153 VALUES IN (12612,12613,12614,12615), +PARTITION p3154 VALUES IN (12616,12617,12618,12619), +PARTITION p3155 VALUES IN (12620,12621,12622,12623), +PARTITION p3156 VALUES IN (12624,12625,12626,12627), +PARTITION p3157 VALUES IN (12628,12629,12630,12631), +PARTITION p3158 VALUES IN (12632,12633,12634,12635), +PARTITION p3159 VALUES IN (12636,12637,12638,12639), +PARTITION p3160 VALUES IN (12640,12641,12642,12643), +PARTITION p3161 VALUES IN (12644,12645,12646,12647), +PARTITION p3162 VALUES IN (12648,12649,12650,12651), +PARTITION p3163 VALUES IN (12652,12653,12654,12655), +PARTITION p3164 VALUES IN (12656,12657,12658,12659), +PARTITION p3165 VALUES IN (12660,12661,12662,12663), +PARTITION p3166 VALUES IN (12664,12665,12666,12667), +PARTITION p3167 VALUES IN (12668,12669,12670,12671), +PARTITION p3168 VALUES IN (12672,12673,12674,12675), +PARTITION p3169 VALUES IN (12676,12677,12678,12679), +PARTITION p3170 VALUES IN (12680,12681,12682,12683), +PARTITION p3171 VALUES IN (12684,12685,12686,12687), +PARTITION p3172 VALUES IN (12688,12689,12690,12691), +PARTITION p3173 VALUES IN (12692,12693,12694,12695), +PARTITION p3174 VALUES IN (12696,12697,12698,12699), +PARTITION p3175 VALUES IN (12700,12701,12702,12703), +PARTITION p3176 VALUES IN (12704,12705,12706,12707), +PARTITION p3177 VALUES IN (12708,12709,12710,12711), +PARTITION p3178 VALUES IN (12712,12713,12714,12715), +PARTITION p3179 VALUES IN (12716,12717,12718,12719), +PARTITION p3180 VALUES IN (12720,12721,12722,12723), +PARTITION p3181 VALUES IN (12724,12725,12726,12727), +PARTITION p3182 VALUES IN (12728,12729,12730,12731), +PARTITION p3183 VALUES IN (12732,12733,12734,12735), +PARTITION p3184 VALUES IN (12736,12737,12738,12739), +PARTITION p3185 VALUES IN (12740,12741,12742,12743), +PARTITION p3186 VALUES IN (12744,12745,12746,12747), +PARTITION p3187 VALUES IN (12748,12749,12750,12751), +PARTITION p3188 VALUES IN (12752,12753,12754,12755), +PARTITION p3189 VALUES IN (12756,12757,12758,12759), +PARTITION p3190 VALUES IN (12760,12761,12762,12763), +PARTITION p3191 VALUES IN (12764,12765,12766,12767), +PARTITION p3192 VALUES IN (12768,12769,12770,12771), +PARTITION p3193 VALUES IN (12772,12773,12774,12775), +PARTITION p3194 VALUES IN (12776,12777,12778,12779), +PARTITION p3195 VALUES IN (12780,12781,12782,12783), +PARTITION p3196 VALUES IN (12784,12785,12786,12787), +PARTITION p3197 VALUES IN (12788,12789,12790,12791), +PARTITION p3198 VALUES IN (12792,12793,12794,12795), +PARTITION p3199 VALUES IN (12796,12797,12798,12799), +PARTITION p3200 VALUES IN (12800,12801,12802,12803), +PARTITION p3201 VALUES IN (12804,12805,12806,12807), +PARTITION p3202 VALUES IN (12808,12809,12810,12811), +PARTITION p3203 VALUES IN (12812,12813,12814,12815), +PARTITION p3204 VALUES IN (12816,12817,12818,12819), +PARTITION p3205 VALUES IN (12820,12821,12822,12823), +PARTITION p3206 VALUES IN (12824,12825,12826,12827), +PARTITION p3207 VALUES IN (12828,12829,12830,12831), +PARTITION p3208 VALUES IN (12832,12833,12834,12835), +PARTITION p3209 VALUES IN (12836,12837,12838,12839), +PARTITION p3210 VALUES IN (12840,12841,12842,12843), +PARTITION p3211 VALUES IN (12844,12845,12846,12847), +PARTITION p3212 VALUES IN (12848,12849,12850,12851), +PARTITION p3213 VALUES IN (12852,12853,12854,12855), +PARTITION p3214 VALUES IN (12856,12857,12858,12859), +PARTITION p3215 VALUES IN (12860,12861,12862,12863), +PARTITION p3216 VALUES IN (12864,12865,12866,12867), +PARTITION p3217 VALUES IN (12868,12869,12870,12871), +PARTITION p3218 VALUES IN (12872,12873,12874,12875), +PARTITION p3219 VALUES IN (12876,12877,12878,12879), +PARTITION p3220 VALUES IN (12880,12881,12882,12883), +PARTITION p3221 VALUES IN (12884,12885,12886,12887), +PARTITION p3222 VALUES IN (12888,12889,12890,12891), +PARTITION p3223 VALUES IN (12892,12893,12894,12895), +PARTITION p3224 VALUES IN (12896,12897,12898,12899), +PARTITION p3225 VALUES IN (12900,12901,12902,12903), +PARTITION p3226 VALUES IN (12904,12905,12906,12907), +PARTITION p3227 VALUES IN (12908,12909,12910,12911), +PARTITION p3228 VALUES IN (12912,12913,12914,12915), +PARTITION p3229 VALUES IN (12916,12917,12918,12919), +PARTITION p3230 VALUES IN (12920,12921,12922,12923), +PARTITION p3231 VALUES IN (12924,12925,12926,12927), +PARTITION p3232 VALUES IN (12928,12929,12930,12931), +PARTITION p3233 VALUES IN (12932,12933,12934,12935), +PARTITION p3234 VALUES IN (12936,12937,12938,12939), +PARTITION p3235 VALUES IN (12940,12941,12942,12943), +PARTITION p3236 VALUES IN (12944,12945,12946,12947), +PARTITION p3237 VALUES IN (12948,12949,12950,12951), +PARTITION p3238 VALUES IN (12952,12953,12954,12955), +PARTITION p3239 VALUES IN (12956,12957,12958,12959), +PARTITION p3240 VALUES IN (12960,12961,12962,12963), +PARTITION p3241 VALUES IN (12964,12965,12966,12967), +PARTITION p3242 VALUES IN (12968,12969,12970,12971), +PARTITION p3243 VALUES IN (12972,12973,12974,12975), +PARTITION p3244 VALUES IN (12976,12977,12978,12979), +PARTITION p3245 VALUES IN (12980,12981,12982,12983), +PARTITION p3246 VALUES IN (12984,12985,12986,12987), +PARTITION p3247 VALUES IN (12988,12989,12990,12991), +PARTITION p3248 VALUES IN (12992,12993,12994,12995), +PARTITION p3249 VALUES IN (12996,12997,12998,12999), +PARTITION p3250 VALUES IN (13000,13001,13002,13003), +PARTITION p3251 VALUES IN (13004,13005,13006,13007), +PARTITION p3252 VALUES IN (13008,13009,13010,13011), +PARTITION p3253 VALUES IN (13012,13013,13014,13015), +PARTITION p3254 VALUES IN (13016,13017,13018,13019), +PARTITION p3255 VALUES IN (13020,13021,13022,13023), +PARTITION p3256 VALUES IN (13024,13025,13026,13027), +PARTITION p3257 VALUES IN (13028,13029,13030,13031), +PARTITION p3258 VALUES IN (13032,13033,13034,13035), +PARTITION p3259 VALUES IN (13036,13037,13038,13039), +PARTITION p3260 VALUES IN (13040,13041,13042,13043), +PARTITION p3261 VALUES IN (13044,13045,13046,13047), +PARTITION p3262 VALUES IN (13048,13049,13050,13051), +PARTITION p3263 VALUES IN (13052,13053,13054,13055), +PARTITION p3264 VALUES IN (13056,13057,13058,13059), +PARTITION p3265 VALUES IN (13060,13061,13062,13063), +PARTITION p3266 VALUES IN (13064,13065,13066,13067), +PARTITION p3267 VALUES IN (13068,13069,13070,13071), +PARTITION p3268 VALUES IN (13072,13073,13074,13075), +PARTITION p3269 VALUES IN (13076,13077,13078,13079), +PARTITION p3270 VALUES IN (13080,13081,13082,13083), +PARTITION p3271 VALUES IN (13084,13085,13086,13087), +PARTITION p3272 VALUES IN (13088,13089,13090,13091), +PARTITION p3273 VALUES IN (13092,13093,13094,13095), +PARTITION p3274 VALUES IN (13096,13097,13098,13099), +PARTITION p3275 VALUES IN (13100,13101,13102,13103), +PARTITION p3276 VALUES IN (13104,13105,13106,13107), +PARTITION p3277 VALUES IN (13108,13109,13110,13111), +PARTITION p3278 VALUES IN (13112,13113,13114,13115), +PARTITION p3279 VALUES IN (13116,13117,13118,13119), +PARTITION p3280 VALUES IN (13120,13121,13122,13123), +PARTITION p3281 VALUES IN (13124,13125,13126,13127), +PARTITION p3282 VALUES IN (13128,13129,13130,13131), +PARTITION p3283 VALUES IN (13132,13133,13134,13135), +PARTITION p3284 VALUES IN (13136,13137,13138,13139), +PARTITION p3285 VALUES IN (13140,13141,13142,13143), +PARTITION p3286 VALUES IN (13144,13145,13146,13147), +PARTITION p3287 VALUES IN (13148,13149,13150,13151), +PARTITION p3288 VALUES IN (13152,13153,13154,13155), +PARTITION p3289 VALUES IN (13156,13157,13158,13159), +PARTITION p3290 VALUES IN (13160,13161,13162,13163), +PARTITION p3291 VALUES IN (13164,13165,13166,13167), +PARTITION p3292 VALUES IN (13168,13169,13170,13171), +PARTITION p3293 VALUES IN (13172,13173,13174,13175), +PARTITION p3294 VALUES IN (13176,13177,13178,13179), +PARTITION p3295 VALUES IN (13180,13181,13182,13183), +PARTITION p3296 VALUES IN (13184,13185,13186,13187), +PARTITION p3297 VALUES IN (13188,13189,13190,13191), +PARTITION p3298 VALUES IN (13192,13193,13194,13195), +PARTITION p3299 VALUES IN (13196,13197,13198,13199), +PARTITION p3300 VALUES IN (13200,13201,13202,13203), +PARTITION p3301 VALUES IN (13204,13205,13206,13207), +PARTITION p3302 VALUES IN (13208,13209,13210,13211), +PARTITION p3303 VALUES IN (13212,13213,13214,13215), +PARTITION p3304 VALUES IN (13216,13217,13218,13219), +PARTITION p3305 VALUES IN (13220,13221,13222,13223), +PARTITION p3306 VALUES IN (13224,13225,13226,13227), +PARTITION p3307 VALUES IN (13228,13229,13230,13231), +PARTITION p3308 VALUES IN (13232,13233,13234,13235), +PARTITION p3309 VALUES IN (13236,13237,13238,13239), +PARTITION p3310 VALUES IN (13240,13241,13242,13243), +PARTITION p3311 VALUES IN (13244,13245,13246,13247), +PARTITION p3312 VALUES IN (13248,13249,13250,13251), +PARTITION p3313 VALUES IN (13252,13253,13254,13255), +PARTITION p3314 VALUES IN (13256,13257,13258,13259), +PARTITION p3315 VALUES IN (13260,13261,13262,13263), +PARTITION p3316 VALUES IN (13264,13265,13266,13267), +PARTITION p3317 VALUES IN (13268,13269,13270,13271), +PARTITION p3318 VALUES IN (13272,13273,13274,13275), +PARTITION p3319 VALUES IN (13276,13277,13278,13279), +PARTITION p3320 VALUES IN (13280,13281,13282,13283), +PARTITION p3321 VALUES IN (13284,13285,13286,13287), +PARTITION p3322 VALUES IN (13288,13289,13290,13291), +PARTITION p3323 VALUES IN (13292,13293,13294,13295), +PARTITION p3324 VALUES IN (13296,13297,13298,13299), +PARTITION p3325 VALUES IN (13300,13301,13302,13303), +PARTITION p3326 VALUES IN (13304,13305,13306,13307), +PARTITION p3327 VALUES IN (13308,13309,13310,13311), +PARTITION p3328 VALUES IN (13312,13313,13314,13315), +PARTITION p3329 VALUES IN (13316,13317,13318,13319), +PARTITION p3330 VALUES IN (13320,13321,13322,13323), +PARTITION p3331 VALUES IN (13324,13325,13326,13327), +PARTITION p3332 VALUES IN (13328,13329,13330,13331), +PARTITION p3333 VALUES IN (13332,13333,13334,13335), +PARTITION p3334 VALUES IN (13336,13337,13338,13339), +PARTITION p3335 VALUES IN (13340,13341,13342,13343), +PARTITION p3336 VALUES IN (13344,13345,13346,13347), +PARTITION p3337 VALUES IN (13348,13349,13350,13351), +PARTITION p3338 VALUES IN (13352,13353,13354,13355), +PARTITION p3339 VALUES IN (13356,13357,13358,13359), +PARTITION p3340 VALUES IN (13360,13361,13362,13363), +PARTITION p3341 VALUES IN (13364,13365,13366,13367), +PARTITION p3342 VALUES IN (13368,13369,13370,13371), +PARTITION p3343 VALUES IN (13372,13373,13374,13375), +PARTITION p3344 VALUES IN (13376,13377,13378,13379), +PARTITION p3345 VALUES IN (13380,13381,13382,13383), +PARTITION p3346 VALUES IN (13384,13385,13386,13387), +PARTITION p3347 VALUES IN (13388,13389,13390,13391), +PARTITION p3348 VALUES IN (13392,13393,13394,13395), +PARTITION p3349 VALUES IN (13396,13397,13398,13399), +PARTITION p3350 VALUES IN (13400,13401,13402,13403), +PARTITION p3351 VALUES IN (13404,13405,13406,13407), +PARTITION p3352 VALUES IN (13408,13409,13410,13411), +PARTITION p3353 VALUES IN (13412,13413,13414,13415), +PARTITION p3354 VALUES IN (13416,13417,13418,13419), +PARTITION p3355 VALUES IN (13420,13421,13422,13423), +PARTITION p3356 VALUES IN (13424,13425,13426,13427), +PARTITION p3357 VALUES IN (13428,13429,13430,13431), +PARTITION p3358 VALUES IN (13432,13433,13434,13435), +PARTITION p3359 VALUES IN (13436,13437,13438,13439), +PARTITION p3360 VALUES IN (13440,13441,13442,13443), +PARTITION p3361 VALUES IN (13444,13445,13446,13447), +PARTITION p3362 VALUES IN (13448,13449,13450,13451), +PARTITION p3363 VALUES IN (13452,13453,13454,13455), +PARTITION p3364 VALUES IN (13456,13457,13458,13459), +PARTITION p3365 VALUES IN (13460,13461,13462,13463), +PARTITION p3366 VALUES IN (13464,13465,13466,13467), +PARTITION p3367 VALUES IN (13468,13469,13470,13471), +PARTITION p3368 VALUES IN (13472,13473,13474,13475), +PARTITION p3369 VALUES IN (13476,13477,13478,13479), +PARTITION p3370 VALUES IN (13480,13481,13482,13483), +PARTITION p3371 VALUES IN (13484,13485,13486,13487), +PARTITION p3372 VALUES IN (13488,13489,13490,13491), +PARTITION p3373 VALUES IN (13492,13493,13494,13495), +PARTITION p3374 VALUES IN (13496,13497,13498,13499), +PARTITION p3375 VALUES IN (13500,13501,13502,13503), +PARTITION p3376 VALUES IN (13504,13505,13506,13507), +PARTITION p3377 VALUES IN (13508,13509,13510,13511), +PARTITION p3378 VALUES IN (13512,13513,13514,13515), +PARTITION p3379 VALUES IN (13516,13517,13518,13519), +PARTITION p3380 VALUES IN (13520,13521,13522,13523), +PARTITION p3381 VALUES IN (13524,13525,13526,13527), +PARTITION p3382 VALUES IN (13528,13529,13530,13531), +PARTITION p3383 VALUES IN (13532,13533,13534,13535), +PARTITION p3384 VALUES IN (13536,13537,13538,13539), +PARTITION p3385 VALUES IN (13540,13541,13542,13543), +PARTITION p3386 VALUES IN (13544,13545,13546,13547), +PARTITION p3387 VALUES IN (13548,13549,13550,13551), +PARTITION p3388 VALUES IN (13552,13553,13554,13555), +PARTITION p3389 VALUES IN (13556,13557,13558,13559), +PARTITION p3390 VALUES IN (13560,13561,13562,13563), +PARTITION p3391 VALUES IN (13564,13565,13566,13567), +PARTITION p3392 VALUES IN (13568,13569,13570,13571), +PARTITION p3393 VALUES IN (13572,13573,13574,13575), +PARTITION p3394 VALUES IN (13576,13577,13578,13579), +PARTITION p3395 VALUES IN (13580,13581,13582,13583), +PARTITION p3396 VALUES IN (13584,13585,13586,13587), +PARTITION p3397 VALUES IN (13588,13589,13590,13591), +PARTITION p3398 VALUES IN (13592,13593,13594,13595), +PARTITION p3399 VALUES IN (13596,13597,13598,13599), +PARTITION p3400 VALUES IN (13600,13601,13602,13603), +PARTITION p3401 VALUES IN (13604,13605,13606,13607), +PARTITION p3402 VALUES IN (13608,13609,13610,13611), +PARTITION p3403 VALUES IN (13612,13613,13614,13615), +PARTITION p3404 VALUES IN (13616,13617,13618,13619), +PARTITION p3405 VALUES IN (13620,13621,13622,13623), +PARTITION p3406 VALUES IN (13624,13625,13626,13627), +PARTITION p3407 VALUES IN (13628,13629,13630,13631), +PARTITION p3408 VALUES IN (13632,13633,13634,13635), +PARTITION p3409 VALUES IN (13636,13637,13638,13639), +PARTITION p3410 VALUES IN (13640,13641,13642,13643), +PARTITION p3411 VALUES IN (13644,13645,13646,13647), +PARTITION p3412 VALUES IN (13648,13649,13650,13651), +PARTITION p3413 VALUES IN (13652,13653,13654,13655), +PARTITION p3414 VALUES IN (13656,13657,13658,13659), +PARTITION p3415 VALUES IN (13660,13661,13662,13663), +PARTITION p3416 VALUES IN (13664,13665,13666,13667), +PARTITION p3417 VALUES IN (13668,13669,13670,13671), +PARTITION p3418 VALUES IN (13672,13673,13674,13675), +PARTITION p3419 VALUES IN (13676,13677,13678,13679), +PARTITION p3420 VALUES IN (13680,13681,13682,13683), +PARTITION p3421 VALUES IN (13684,13685,13686,13687), +PARTITION p3422 VALUES IN (13688,13689,13690,13691), +PARTITION p3423 VALUES IN (13692,13693,13694,13695), +PARTITION p3424 VALUES IN (13696,13697,13698,13699), +PARTITION p3425 VALUES IN (13700,13701,13702,13703), +PARTITION p3426 VALUES IN (13704,13705,13706,13707), +PARTITION p3427 VALUES IN (13708,13709,13710,13711), +PARTITION p3428 VALUES IN (13712,13713,13714,13715), +PARTITION p3429 VALUES IN (13716,13717,13718,13719), +PARTITION p3430 VALUES IN (13720,13721,13722,13723), +PARTITION p3431 VALUES IN (13724,13725,13726,13727), +PARTITION p3432 VALUES IN (13728,13729,13730,13731), +PARTITION p3433 VALUES IN (13732,13733,13734,13735), +PARTITION p3434 VALUES IN (13736,13737,13738,13739), +PARTITION p3435 VALUES IN (13740,13741,13742,13743), +PARTITION p3436 VALUES IN (13744,13745,13746,13747), +PARTITION p3437 VALUES IN (13748,13749,13750,13751), +PARTITION p3438 VALUES IN (13752,13753,13754,13755), +PARTITION p3439 VALUES IN (13756,13757,13758,13759), +PARTITION p3440 VALUES IN (13760,13761,13762,13763), +PARTITION p3441 VALUES IN (13764,13765,13766,13767), +PARTITION p3442 VALUES IN (13768,13769,13770,13771), +PARTITION p3443 VALUES IN (13772,13773,13774,13775), +PARTITION p3444 VALUES IN (13776,13777,13778,13779), +PARTITION p3445 VALUES IN (13780,13781,13782,13783), +PARTITION p3446 VALUES IN (13784,13785,13786,13787), +PARTITION p3447 VALUES IN (13788,13789,13790,13791), +PARTITION p3448 VALUES IN (13792,13793,13794,13795), +PARTITION p3449 VALUES IN (13796,13797,13798,13799), +PARTITION p3450 VALUES IN (13800,13801,13802,13803), +PARTITION p3451 VALUES IN (13804,13805,13806,13807), +PARTITION p3452 VALUES IN (13808,13809,13810,13811), +PARTITION p3453 VALUES IN (13812,13813,13814,13815), +PARTITION p3454 VALUES IN (13816,13817,13818,13819), +PARTITION p3455 VALUES IN (13820,13821,13822,13823), +PARTITION p3456 VALUES IN (13824,13825,13826,13827), +PARTITION p3457 VALUES IN (13828,13829,13830,13831), +PARTITION p3458 VALUES IN (13832,13833,13834,13835), +PARTITION p3459 VALUES IN (13836,13837,13838,13839), +PARTITION p3460 VALUES IN (13840,13841,13842,13843), +PARTITION p3461 VALUES IN (13844,13845,13846,13847), +PARTITION p3462 VALUES IN (13848,13849,13850,13851), +PARTITION p3463 VALUES IN (13852,13853,13854,13855), +PARTITION p3464 VALUES IN (13856,13857,13858,13859), +PARTITION p3465 VALUES IN (13860,13861,13862,13863), +PARTITION p3466 VALUES IN (13864,13865,13866,13867), +PARTITION p3467 VALUES IN (13868,13869,13870,13871), +PARTITION p3468 VALUES IN (13872,13873,13874,13875), +PARTITION p3469 VALUES IN (13876,13877,13878,13879), +PARTITION p3470 VALUES IN (13880,13881,13882,13883), +PARTITION p3471 VALUES IN (13884,13885,13886,13887), +PARTITION p3472 VALUES IN (13888,13889,13890,13891), +PARTITION p3473 VALUES IN (13892,13893,13894,13895), +PARTITION p3474 VALUES IN (13896,13897,13898,13899), +PARTITION p3475 VALUES IN (13900,13901,13902,13903), +PARTITION p3476 VALUES IN (13904,13905,13906,13907), +PARTITION p3477 VALUES IN (13908,13909,13910,13911), +PARTITION p3478 VALUES IN (13912,13913,13914,13915), +PARTITION p3479 VALUES IN (13916,13917,13918,13919), +PARTITION p3480 VALUES IN (13920,13921,13922,13923), +PARTITION p3481 VALUES IN (13924,13925,13926,13927), +PARTITION p3482 VALUES IN (13928,13929,13930,13931), +PARTITION p3483 VALUES IN (13932,13933,13934,13935), +PARTITION p3484 VALUES IN (13936,13937,13938,13939), +PARTITION p3485 VALUES IN (13940,13941,13942,13943), +PARTITION p3486 VALUES IN (13944,13945,13946,13947), +PARTITION p3487 VALUES IN (13948,13949,13950,13951), +PARTITION p3488 VALUES IN (13952,13953,13954,13955), +PARTITION p3489 VALUES IN (13956,13957,13958,13959), +PARTITION p3490 VALUES IN (13960,13961,13962,13963), +PARTITION p3491 VALUES IN (13964,13965,13966,13967), +PARTITION p3492 VALUES IN (13968,13969,13970,13971), +PARTITION p3493 VALUES IN (13972,13973,13974,13975), +PARTITION p3494 VALUES IN (13976,13977,13978,13979), +PARTITION p3495 VALUES IN (13980,13981,13982,13983), +PARTITION p3496 VALUES IN (13984,13985,13986,13987), +PARTITION p3497 VALUES IN (13988,13989,13990,13991), +PARTITION p3498 VALUES IN (13992,13993,13994,13995), +PARTITION p3499 VALUES IN (13996,13997,13998,13999), +PARTITION p3500 VALUES IN (14000,14001,14002,14003), +PARTITION p3501 VALUES IN (14004,14005,14006,14007), +PARTITION p3502 VALUES IN (14008,14009,14010,14011), +PARTITION p3503 VALUES IN (14012,14013,14014,14015), +PARTITION p3504 VALUES IN (14016,14017,14018,14019), +PARTITION p3505 VALUES IN (14020,14021,14022,14023), +PARTITION p3506 VALUES IN (14024,14025,14026,14027), +PARTITION p3507 VALUES IN (14028,14029,14030,14031), +PARTITION p3508 VALUES IN (14032,14033,14034,14035), +PARTITION p3509 VALUES IN (14036,14037,14038,14039), +PARTITION p3510 VALUES IN (14040,14041,14042,14043), +PARTITION p3511 VALUES IN (14044,14045,14046,14047), +PARTITION p3512 VALUES IN (14048,14049,14050,14051), +PARTITION p3513 VALUES IN (14052,14053,14054,14055), +PARTITION p3514 VALUES IN (14056,14057,14058,14059), +PARTITION p3515 VALUES IN (14060,14061,14062,14063), +PARTITION p3516 VALUES IN (14064,14065,14066,14067), +PARTITION p3517 VALUES IN (14068,14069,14070,14071), +PARTITION p3518 VALUES IN (14072,14073,14074,14075), +PARTITION p3519 VALUES IN (14076,14077,14078,14079), +PARTITION p3520 VALUES IN (14080,14081,14082,14083), +PARTITION p3521 VALUES IN (14084,14085,14086,14087), +PARTITION p3522 VALUES IN (14088,14089,14090,14091), +PARTITION p3523 VALUES IN (14092,14093,14094,14095), +PARTITION p3524 VALUES IN (14096,14097,14098,14099), +PARTITION p3525 VALUES IN (14100,14101,14102,14103), +PARTITION p3526 VALUES IN (14104,14105,14106,14107), +PARTITION p3527 VALUES IN (14108,14109,14110,14111), +PARTITION p3528 VALUES IN (14112,14113,14114,14115), +PARTITION p3529 VALUES IN (14116,14117,14118,14119), +PARTITION p3530 VALUES IN (14120,14121,14122,14123), +PARTITION p3531 VALUES IN (14124,14125,14126,14127), +PARTITION p3532 VALUES IN (14128,14129,14130,14131), +PARTITION p3533 VALUES IN (14132,14133,14134,14135), +PARTITION p3534 VALUES IN (14136,14137,14138,14139), +PARTITION p3535 VALUES IN (14140,14141,14142,14143), +PARTITION p3536 VALUES IN (14144,14145,14146,14147), +PARTITION p3537 VALUES IN (14148,14149,14150,14151), +PARTITION p3538 VALUES IN (14152,14153,14154,14155), +PARTITION p3539 VALUES IN (14156,14157,14158,14159), +PARTITION p3540 VALUES IN (14160,14161,14162,14163), +PARTITION p3541 VALUES IN (14164,14165,14166,14167), +PARTITION p3542 VALUES IN (14168,14169,14170,14171), +PARTITION p3543 VALUES IN (14172,14173,14174,14175), +PARTITION p3544 VALUES IN (14176,14177,14178,14179), +PARTITION p3545 VALUES IN (14180,14181,14182,14183), +PARTITION p3546 VALUES IN (14184,14185,14186,14187), +PARTITION p3547 VALUES IN (14188,14189,14190,14191), +PARTITION p3548 VALUES IN (14192,14193,14194,14195), +PARTITION p3549 VALUES IN (14196,14197,14198,14199), +PARTITION p3550 VALUES IN (14200,14201,14202,14203), +PARTITION p3551 VALUES IN (14204,14205,14206,14207), +PARTITION p3552 VALUES IN (14208,14209,14210,14211), +PARTITION p3553 VALUES IN (14212,14213,14214,14215), +PARTITION p3554 VALUES IN (14216,14217,14218,14219), +PARTITION p3555 VALUES IN (14220,14221,14222,14223), +PARTITION p3556 VALUES IN (14224,14225,14226,14227), +PARTITION p3557 VALUES IN (14228,14229,14230,14231), +PARTITION p3558 VALUES IN (14232,14233,14234,14235), +PARTITION p3559 VALUES IN (14236,14237,14238,14239), +PARTITION p3560 VALUES IN (14240,14241,14242,14243), +PARTITION p3561 VALUES IN (14244,14245,14246,14247), +PARTITION p3562 VALUES IN (14248,14249,14250,14251), +PARTITION p3563 VALUES IN (14252,14253,14254,14255), +PARTITION p3564 VALUES IN (14256,14257,14258,14259), +PARTITION p3565 VALUES IN (14260,14261,14262,14263), +PARTITION p3566 VALUES IN (14264,14265,14266,14267), +PARTITION p3567 VALUES IN (14268,14269,14270,14271), +PARTITION p3568 VALUES IN (14272,14273,14274,14275), +PARTITION p3569 VALUES IN (14276,14277,14278,14279), +PARTITION p3570 VALUES IN (14280,14281,14282,14283), +PARTITION p3571 VALUES IN (14284,14285,14286,14287), +PARTITION p3572 VALUES IN (14288,14289,14290,14291), +PARTITION p3573 VALUES IN (14292,14293,14294,14295), +PARTITION p3574 VALUES IN (14296,14297,14298,14299), +PARTITION p3575 VALUES IN (14300,14301,14302,14303), +PARTITION p3576 VALUES IN (14304,14305,14306,14307), +PARTITION p3577 VALUES IN (14308,14309,14310,14311), +PARTITION p3578 VALUES IN (14312,14313,14314,14315), +PARTITION p3579 VALUES IN (14316,14317,14318,14319), +PARTITION p3580 VALUES IN (14320,14321,14322,14323), +PARTITION p3581 VALUES IN (14324,14325,14326,14327), +PARTITION p3582 VALUES IN (14328,14329,14330,14331), +PARTITION p3583 VALUES IN (14332,14333,14334,14335), +PARTITION p3584 VALUES IN (14336,14337,14338,14339), +PARTITION p3585 VALUES IN (14340,14341,14342,14343), +PARTITION p3586 VALUES IN (14344,14345,14346,14347), +PARTITION p3587 VALUES IN (14348,14349,14350,14351), +PARTITION p3588 VALUES IN (14352,14353,14354,14355), +PARTITION p3589 VALUES IN (14356,14357,14358,14359), +PARTITION p3590 VALUES IN (14360,14361,14362,14363), +PARTITION p3591 VALUES IN (14364,14365,14366,14367), +PARTITION p3592 VALUES IN (14368,14369,14370,14371), +PARTITION p3593 VALUES IN (14372,14373,14374,14375), +PARTITION p3594 VALUES IN (14376,14377,14378,14379), +PARTITION p3595 VALUES IN (14380,14381,14382,14383), +PARTITION p3596 VALUES IN (14384,14385,14386,14387), +PARTITION p3597 VALUES IN (14388,14389,14390,14391), +PARTITION p3598 VALUES IN (14392,14393,14394,14395), +PARTITION p3599 VALUES IN (14396,14397,14398,14399), +PARTITION p3600 VALUES IN (14400,14401,14402,14403), +PARTITION p3601 VALUES IN (14404,14405,14406,14407), +PARTITION p3602 VALUES IN (14408,14409,14410,14411), +PARTITION p3603 VALUES IN (14412,14413,14414,14415), +PARTITION p3604 VALUES IN (14416,14417,14418,14419), +PARTITION p3605 VALUES IN (14420,14421,14422,14423), +PARTITION p3606 VALUES IN (14424,14425,14426,14427), +PARTITION p3607 VALUES IN (14428,14429,14430,14431), +PARTITION p3608 VALUES IN (14432,14433,14434,14435), +PARTITION p3609 VALUES IN (14436,14437,14438,14439), +PARTITION p3610 VALUES IN (14440,14441,14442,14443), +PARTITION p3611 VALUES IN (14444,14445,14446,14447), +PARTITION p3612 VALUES IN (14448,14449,14450,14451), +PARTITION p3613 VALUES IN (14452,14453,14454,14455), +PARTITION p3614 VALUES IN (14456,14457,14458,14459), +PARTITION p3615 VALUES IN (14460,14461,14462,14463), +PARTITION p3616 VALUES IN (14464,14465,14466,14467), +PARTITION p3617 VALUES IN (14468,14469,14470,14471), +PARTITION p3618 VALUES IN (14472,14473,14474,14475), +PARTITION p3619 VALUES IN (14476,14477,14478,14479), +PARTITION p3620 VALUES IN (14480,14481,14482,14483), +PARTITION p3621 VALUES IN (14484,14485,14486,14487), +PARTITION p3622 VALUES IN (14488,14489,14490,14491), +PARTITION p3623 VALUES IN (14492,14493,14494,14495), +PARTITION p3624 VALUES IN (14496,14497,14498,14499), +PARTITION p3625 VALUES IN (14500,14501,14502,14503), +PARTITION p3626 VALUES IN (14504,14505,14506,14507), +PARTITION p3627 VALUES IN (14508,14509,14510,14511), +PARTITION p3628 VALUES IN (14512,14513,14514,14515), +PARTITION p3629 VALUES IN (14516,14517,14518,14519), +PARTITION p3630 VALUES IN (14520,14521,14522,14523), +PARTITION p3631 VALUES IN (14524,14525,14526,14527), +PARTITION p3632 VALUES IN (14528,14529,14530,14531), +PARTITION p3633 VALUES IN (14532,14533,14534,14535), +PARTITION p3634 VALUES IN (14536,14537,14538,14539), +PARTITION p3635 VALUES IN (14540,14541,14542,14543), +PARTITION p3636 VALUES IN (14544,14545,14546,14547), +PARTITION p3637 VALUES IN (14548,14549,14550,14551), +PARTITION p3638 VALUES IN (14552,14553,14554,14555), +PARTITION p3639 VALUES IN (14556,14557,14558,14559), +PARTITION p3640 VALUES IN (14560,14561,14562,14563), +PARTITION p3641 VALUES IN (14564,14565,14566,14567), +PARTITION p3642 VALUES IN (14568,14569,14570,14571), +PARTITION p3643 VALUES IN (14572,14573,14574,14575), +PARTITION p3644 VALUES IN (14576,14577,14578,14579), +PARTITION p3645 VALUES IN (14580,14581,14582,14583), +PARTITION p3646 VALUES IN (14584,14585,14586,14587), +PARTITION p3647 VALUES IN (14588,14589,14590,14591), +PARTITION p3648 VALUES IN (14592,14593,14594,14595), +PARTITION p3649 VALUES IN (14596,14597,14598,14599), +PARTITION p3650 VALUES IN (14600,14601,14602,14603), +PARTITION p3651 VALUES IN (14604,14605,14606,14607), +PARTITION p3652 VALUES IN (14608,14609,14610,14611), +PARTITION p3653 VALUES IN (14612,14613,14614,14615), +PARTITION p3654 VALUES IN (14616,14617,14618,14619), +PARTITION p3655 VALUES IN (14620,14621,14622,14623), +PARTITION p3656 VALUES IN (14624,14625,14626,14627), +PARTITION p3657 VALUES IN (14628,14629,14630,14631), +PARTITION p3658 VALUES IN (14632,14633,14634,14635), +PARTITION p3659 VALUES IN (14636,14637,14638,14639), +PARTITION p3660 VALUES IN (14640,14641,14642,14643), +PARTITION p3661 VALUES IN (14644,14645,14646,14647), +PARTITION p3662 VALUES IN (14648,14649,14650,14651), +PARTITION p3663 VALUES IN (14652,14653,14654,14655), +PARTITION p3664 VALUES IN (14656,14657,14658,14659), +PARTITION p3665 VALUES IN (14660,14661,14662,14663), +PARTITION p3666 VALUES IN (14664,14665,14666,14667), +PARTITION p3667 VALUES IN (14668,14669,14670,14671), +PARTITION p3668 VALUES IN (14672,14673,14674,14675), +PARTITION p3669 VALUES IN (14676,14677,14678,14679), +PARTITION p3670 VALUES IN (14680,14681,14682,14683), +PARTITION p3671 VALUES IN (14684,14685,14686,14687), +PARTITION p3672 VALUES IN (14688,14689,14690,14691), +PARTITION p3673 VALUES IN (14692,14693,14694,14695), +PARTITION p3674 VALUES IN (14696,14697,14698,14699), +PARTITION p3675 VALUES IN (14700,14701,14702,14703), +PARTITION p3676 VALUES IN (14704,14705,14706,14707), +PARTITION p3677 VALUES IN (14708,14709,14710,14711), +PARTITION p3678 VALUES IN (14712,14713,14714,14715), +PARTITION p3679 VALUES IN (14716,14717,14718,14719), +PARTITION p3680 VALUES IN (14720,14721,14722,14723), +PARTITION p3681 VALUES IN (14724,14725,14726,14727), +PARTITION p3682 VALUES IN (14728,14729,14730,14731), +PARTITION p3683 VALUES IN (14732,14733,14734,14735), +PARTITION p3684 VALUES IN (14736,14737,14738,14739), +PARTITION p3685 VALUES IN (14740,14741,14742,14743), +PARTITION p3686 VALUES IN (14744,14745,14746,14747), +PARTITION p3687 VALUES IN (14748,14749,14750,14751), +PARTITION p3688 VALUES IN (14752,14753,14754,14755), +PARTITION p3689 VALUES IN (14756,14757,14758,14759), +PARTITION p3690 VALUES IN (14760,14761,14762,14763), +PARTITION p3691 VALUES IN (14764,14765,14766,14767), +PARTITION p3692 VALUES IN (14768,14769,14770,14771), +PARTITION p3693 VALUES IN (14772,14773,14774,14775), +PARTITION p3694 VALUES IN (14776,14777,14778,14779), +PARTITION p3695 VALUES IN (14780,14781,14782,14783), +PARTITION p3696 VALUES IN (14784,14785,14786,14787), +PARTITION p3697 VALUES IN (14788,14789,14790,14791), +PARTITION p3698 VALUES IN (14792,14793,14794,14795), +PARTITION p3699 VALUES IN (14796,14797,14798,14799), +PARTITION p3700 VALUES IN (14800,14801,14802,14803), +PARTITION p3701 VALUES IN (14804,14805,14806,14807), +PARTITION p3702 VALUES IN (14808,14809,14810,14811), +PARTITION p3703 VALUES IN (14812,14813,14814,14815), +PARTITION p3704 VALUES IN (14816,14817,14818,14819), +PARTITION p3705 VALUES IN (14820,14821,14822,14823), +PARTITION p3706 VALUES IN (14824,14825,14826,14827), +PARTITION p3707 VALUES IN (14828,14829,14830,14831), +PARTITION p3708 VALUES IN (14832,14833,14834,14835), +PARTITION p3709 VALUES IN (14836,14837,14838,14839), +PARTITION p3710 VALUES IN (14840,14841,14842,14843), +PARTITION p3711 VALUES IN (14844,14845,14846,14847), +PARTITION p3712 VALUES IN (14848,14849,14850,14851), +PARTITION p3713 VALUES IN (14852,14853,14854,14855), +PARTITION p3714 VALUES IN (14856,14857,14858,14859), +PARTITION p3715 VALUES IN (14860,14861,14862,14863), +PARTITION p3716 VALUES IN (14864,14865,14866,14867), +PARTITION p3717 VALUES IN (14868,14869,14870,14871), +PARTITION p3718 VALUES IN (14872,14873,14874,14875), +PARTITION p3719 VALUES IN (14876,14877,14878,14879), +PARTITION p3720 VALUES IN (14880,14881,14882,14883), +PARTITION p3721 VALUES IN (14884,14885,14886,14887), +PARTITION p3722 VALUES IN (14888,14889,14890,14891), +PARTITION p3723 VALUES IN (14892,14893,14894,14895), +PARTITION p3724 VALUES IN (14896,14897,14898,14899), +PARTITION p3725 VALUES IN (14900,14901,14902,14903), +PARTITION p3726 VALUES IN (14904,14905,14906,14907), +PARTITION p3727 VALUES IN (14908,14909,14910,14911), +PARTITION p3728 VALUES IN (14912,14913,14914,14915), +PARTITION p3729 VALUES IN (14916,14917,14918,14919), +PARTITION p3730 VALUES IN (14920,14921,14922,14923), +PARTITION p3731 VALUES IN (14924,14925,14926,14927), +PARTITION p3732 VALUES IN (14928,14929,14930,14931), +PARTITION p3733 VALUES IN (14932,14933,14934,14935), +PARTITION p3734 VALUES IN (14936,14937,14938,14939), +PARTITION p3735 VALUES IN (14940,14941,14942,14943), +PARTITION p3736 VALUES IN (14944,14945,14946,14947), +PARTITION p3737 VALUES IN (14948,14949,14950,14951), +PARTITION p3738 VALUES IN (14952,14953,14954,14955), +PARTITION p3739 VALUES IN (14956,14957,14958,14959), +PARTITION p3740 VALUES IN (14960,14961,14962,14963), +PARTITION p3741 VALUES IN (14964,14965,14966,14967), +PARTITION p3742 VALUES IN (14968,14969,14970,14971), +PARTITION p3743 VALUES IN (14972,14973,14974,14975), +PARTITION p3744 VALUES IN (14976,14977,14978,14979), +PARTITION p3745 VALUES IN (14980,14981,14982,14983), +PARTITION p3746 VALUES IN (14984,14985,14986,14987), +PARTITION p3747 VALUES IN (14988,14989,14990,14991), +PARTITION p3748 VALUES IN (14992,14993,14994,14995), +PARTITION p3749 VALUES IN (14996,14997,14998,14999), +PARTITION p3750 VALUES IN (15000,15001,15002,15003), +PARTITION p3751 VALUES IN (15004,15005,15006,15007), +PARTITION p3752 VALUES IN (15008,15009,15010,15011), +PARTITION p3753 VALUES IN (15012,15013,15014,15015), +PARTITION p3754 VALUES IN (15016,15017,15018,15019), +PARTITION p3755 VALUES IN (15020,15021,15022,15023), +PARTITION p3756 VALUES IN (15024,15025,15026,15027), +PARTITION p3757 VALUES IN (15028,15029,15030,15031), +PARTITION p3758 VALUES IN (15032,15033,15034,15035), +PARTITION p3759 VALUES IN (15036,15037,15038,15039), +PARTITION p3760 VALUES IN (15040,15041,15042,15043), +PARTITION p3761 VALUES IN (15044,15045,15046,15047), +PARTITION p3762 VALUES IN (15048,15049,15050,15051), +PARTITION p3763 VALUES IN (15052,15053,15054,15055), +PARTITION p3764 VALUES IN (15056,15057,15058,15059), +PARTITION p3765 VALUES IN (15060,15061,15062,15063), +PARTITION p3766 VALUES IN (15064,15065,15066,15067), +PARTITION p3767 VALUES IN (15068,15069,15070,15071), +PARTITION p3768 VALUES IN (15072,15073,15074,15075), +PARTITION p3769 VALUES IN (15076,15077,15078,15079), +PARTITION p3770 VALUES IN (15080,15081,15082,15083), +PARTITION p3771 VALUES IN (15084,15085,15086,15087), +PARTITION p3772 VALUES IN (15088,15089,15090,15091), +PARTITION p3773 VALUES IN (15092,15093,15094,15095), +PARTITION p3774 VALUES IN (15096,15097,15098,15099), +PARTITION p3775 VALUES IN (15100,15101,15102,15103), +PARTITION p3776 VALUES IN (15104,15105,15106,15107), +PARTITION p3777 VALUES IN (15108,15109,15110,15111), +PARTITION p3778 VALUES IN (15112,15113,15114,15115), +PARTITION p3779 VALUES IN (15116,15117,15118,15119), +PARTITION p3780 VALUES IN (15120,15121,15122,15123), +PARTITION p3781 VALUES IN (15124,15125,15126,15127), +PARTITION p3782 VALUES IN (15128,15129,15130,15131), +PARTITION p3783 VALUES IN (15132,15133,15134,15135), +PARTITION p3784 VALUES IN (15136,15137,15138,15139), +PARTITION p3785 VALUES IN (15140,15141,15142,15143), +PARTITION p3786 VALUES IN (15144,15145,15146,15147), +PARTITION p3787 VALUES IN (15148,15149,15150,15151), +PARTITION p3788 VALUES IN (15152,15153,15154,15155), +PARTITION p3789 VALUES IN (15156,15157,15158,15159), +PARTITION p3790 VALUES IN (15160,15161,15162,15163), +PARTITION p3791 VALUES IN (15164,15165,15166,15167), +PARTITION p3792 VALUES IN (15168,15169,15170,15171), +PARTITION p3793 VALUES IN (15172,15173,15174,15175), +PARTITION p3794 VALUES IN (15176,15177,15178,15179), +PARTITION p3795 VALUES IN (15180,15181,15182,15183), +PARTITION p3796 VALUES IN (15184,15185,15186,15187), +PARTITION p3797 VALUES IN (15188,15189,15190,15191), +PARTITION p3798 VALUES IN (15192,15193,15194,15195), +PARTITION p3799 VALUES IN (15196,15197,15198,15199), +PARTITION p3800 VALUES IN (15200,15201,15202,15203), +PARTITION p3801 VALUES IN (15204,15205,15206,15207), +PARTITION p3802 VALUES IN (15208,15209,15210,15211), +PARTITION p3803 VALUES IN (15212,15213,15214,15215), +PARTITION p3804 VALUES IN (15216,15217,15218,15219), +PARTITION p3805 VALUES IN (15220,15221,15222,15223), +PARTITION p3806 VALUES IN (15224,15225,15226,15227), +PARTITION p3807 VALUES IN (15228,15229,15230,15231), +PARTITION p3808 VALUES IN (15232,15233,15234,15235), +PARTITION p3809 VALUES IN (15236,15237,15238,15239), +PARTITION p3810 VALUES IN (15240,15241,15242,15243), +PARTITION p3811 VALUES IN (15244,15245,15246,15247), +PARTITION p3812 VALUES IN (15248,15249,15250,15251), +PARTITION p3813 VALUES IN (15252,15253,15254,15255), +PARTITION p3814 VALUES IN (15256,15257,15258,15259), +PARTITION p3815 VALUES IN (15260,15261,15262,15263), +PARTITION p3816 VALUES IN (15264,15265,15266,15267), +PARTITION p3817 VALUES IN (15268,15269,15270,15271), +PARTITION p3818 VALUES IN (15272,15273,15274,15275), +PARTITION p3819 VALUES IN (15276,15277,15278,15279), +PARTITION p3820 VALUES IN (15280,15281,15282,15283), +PARTITION p3821 VALUES IN (15284,15285,15286,15287), +PARTITION p3822 VALUES IN (15288,15289,15290,15291), +PARTITION p3823 VALUES IN (15292,15293,15294,15295), +PARTITION p3824 VALUES IN (15296,15297,15298,15299), +PARTITION p3825 VALUES IN (15300,15301,15302,15303), +PARTITION p3826 VALUES IN (15304,15305,15306,15307), +PARTITION p3827 VALUES IN (15308,15309,15310,15311), +PARTITION p3828 VALUES IN (15312,15313,15314,15315), +PARTITION p3829 VALUES IN (15316,15317,15318,15319), +PARTITION p3830 VALUES IN (15320,15321,15322,15323), +PARTITION p3831 VALUES IN (15324,15325,15326,15327), +PARTITION p3832 VALUES IN (15328,15329,15330,15331), +PARTITION p3833 VALUES IN (15332,15333,15334,15335), +PARTITION p3834 VALUES IN (15336,15337,15338,15339), +PARTITION p3835 VALUES IN (15340,15341,15342,15343), +PARTITION p3836 VALUES IN (15344,15345,15346,15347), +PARTITION p3837 VALUES IN (15348,15349,15350,15351), +PARTITION p3838 VALUES IN (15352,15353,15354,15355), +PARTITION p3839 VALUES IN (15356,15357,15358,15359), +PARTITION p3840 VALUES IN (15360,15361,15362,15363), +PARTITION p3841 VALUES IN (15364,15365,15366,15367), +PARTITION p3842 VALUES IN (15368,15369,15370,15371), +PARTITION p3843 VALUES IN (15372,15373,15374,15375), +PARTITION p3844 VALUES IN (15376,15377,15378,15379), +PARTITION p3845 VALUES IN (15380,15381,15382,15383), +PARTITION p3846 VALUES IN (15384,15385,15386,15387), +PARTITION p3847 VALUES IN (15388,15389,15390,15391), +PARTITION p3848 VALUES IN (15392,15393,15394,15395), +PARTITION p3849 VALUES IN (15396,15397,15398,15399), +PARTITION p3850 VALUES IN (15400,15401,15402,15403), +PARTITION p3851 VALUES IN (15404,15405,15406,15407), +PARTITION p3852 VALUES IN (15408,15409,15410,15411), +PARTITION p3853 VALUES IN (15412,15413,15414,15415), +PARTITION p3854 VALUES IN (15416,15417,15418,15419), +PARTITION p3855 VALUES IN (15420,15421,15422,15423), +PARTITION p3856 VALUES IN (15424,15425,15426,15427), +PARTITION p3857 VALUES IN (15428,15429,15430,15431), +PARTITION p3858 VALUES IN (15432,15433,15434,15435), +PARTITION p3859 VALUES IN (15436,15437,15438,15439), +PARTITION p3860 VALUES IN (15440,15441,15442,15443), +PARTITION p3861 VALUES IN (15444,15445,15446,15447), +PARTITION p3862 VALUES IN (15448,15449,15450,15451), +PARTITION p3863 VALUES IN (15452,15453,15454,15455), +PARTITION p3864 VALUES IN (15456,15457,15458,15459), +PARTITION p3865 VALUES IN (15460,15461,15462,15463), +PARTITION p3866 VALUES IN (15464,15465,15466,15467), +PARTITION p3867 VALUES IN (15468,15469,15470,15471), +PARTITION p3868 VALUES IN (15472,15473,15474,15475), +PARTITION p3869 VALUES IN (15476,15477,15478,15479), +PARTITION p3870 VALUES IN (15480,15481,15482,15483), +PARTITION p3871 VALUES IN (15484,15485,15486,15487), +PARTITION p3872 VALUES IN (15488,15489,15490,15491), +PARTITION p3873 VALUES IN (15492,15493,15494,15495), +PARTITION p3874 VALUES IN (15496,15497,15498,15499), +PARTITION p3875 VALUES IN (15500,15501,15502,15503), +PARTITION p3876 VALUES IN (15504,15505,15506,15507), +PARTITION p3877 VALUES IN (15508,15509,15510,15511), +PARTITION p3878 VALUES IN (15512,15513,15514,15515), +PARTITION p3879 VALUES IN (15516,15517,15518,15519), +PARTITION p3880 VALUES IN (15520,15521,15522,15523), +PARTITION p3881 VALUES IN (15524,15525,15526,15527), +PARTITION p3882 VALUES IN (15528,15529,15530,15531), +PARTITION p3883 VALUES IN (15532,15533,15534,15535), +PARTITION p3884 VALUES IN (15536,15537,15538,15539), +PARTITION p3885 VALUES IN (15540,15541,15542,15543), +PARTITION p3886 VALUES IN (15544,15545,15546,15547), +PARTITION p3887 VALUES IN (15548,15549,15550,15551), +PARTITION p3888 VALUES IN (15552,15553,15554,15555), +PARTITION p3889 VALUES IN (15556,15557,15558,15559), +PARTITION p3890 VALUES IN (15560,15561,15562,15563), +PARTITION p3891 VALUES IN (15564,15565,15566,15567), +PARTITION p3892 VALUES IN (15568,15569,15570,15571), +PARTITION p3893 VALUES IN (15572,15573,15574,15575), +PARTITION p3894 VALUES IN (15576,15577,15578,15579), +PARTITION p3895 VALUES IN (15580,15581,15582,15583), +PARTITION p3896 VALUES IN (15584,15585,15586,15587), +PARTITION p3897 VALUES IN (15588,15589,15590,15591), +PARTITION p3898 VALUES IN (15592,15593,15594,15595), +PARTITION p3899 VALUES IN (15596,15597,15598,15599), +PARTITION p3900 VALUES IN (15600,15601,15602,15603), +PARTITION p3901 VALUES IN (15604,15605,15606,15607), +PARTITION p3902 VALUES IN (15608,15609,15610,15611), +PARTITION p3903 VALUES IN (15612,15613,15614,15615), +PARTITION p3904 VALUES IN (15616,15617,15618,15619), +PARTITION p3905 VALUES IN (15620,15621,15622,15623), +PARTITION p3906 VALUES IN (15624,15625,15626,15627), +PARTITION p3907 VALUES IN (15628,15629,15630,15631), +PARTITION p3908 VALUES IN (15632,15633,15634,15635), +PARTITION p3909 VALUES IN (15636,15637,15638,15639), +PARTITION p3910 VALUES IN (15640,15641,15642,15643), +PARTITION p3911 VALUES IN (15644,15645,15646,15647), +PARTITION p3912 VALUES IN (15648,15649,15650,15651), +PARTITION p3913 VALUES IN (15652,15653,15654,15655), +PARTITION p3914 VALUES IN (15656,15657,15658,15659), +PARTITION p3915 VALUES IN (15660,15661,15662,15663), +PARTITION p3916 VALUES IN (15664,15665,15666,15667), +PARTITION p3917 VALUES IN (15668,15669,15670,15671), +PARTITION p3918 VALUES IN (15672,15673,15674,15675), +PARTITION p3919 VALUES IN (15676,15677,15678,15679), +PARTITION p3920 VALUES IN (15680,15681,15682,15683), +PARTITION p3921 VALUES IN (15684,15685,15686,15687), +PARTITION p3922 VALUES IN (15688,15689,15690,15691), +PARTITION p3923 VALUES IN (15692,15693,15694,15695), +PARTITION p3924 VALUES IN (15696,15697,15698,15699), +PARTITION p3925 VALUES IN (15700,15701,15702,15703), +PARTITION p3926 VALUES IN (15704,15705,15706,15707), +PARTITION p3927 VALUES IN (15708,15709,15710,15711), +PARTITION p3928 VALUES IN (15712,15713,15714,15715), +PARTITION p3929 VALUES IN (15716,15717,15718,15719), +PARTITION p3930 VALUES IN (15720,15721,15722,15723), +PARTITION p3931 VALUES IN (15724,15725,15726,15727), +PARTITION p3932 VALUES IN (15728,15729,15730,15731), +PARTITION p3933 VALUES IN (15732,15733,15734,15735), +PARTITION p3934 VALUES IN (15736,15737,15738,15739), +PARTITION p3935 VALUES IN (15740,15741,15742,15743), +PARTITION p3936 VALUES IN (15744,15745,15746,15747), +PARTITION p3937 VALUES IN (15748,15749,15750,15751), +PARTITION p3938 VALUES IN (15752,15753,15754,15755), +PARTITION p3939 VALUES IN (15756,15757,15758,15759), +PARTITION p3940 VALUES IN (15760,15761,15762,15763), +PARTITION p3941 VALUES IN (15764,15765,15766,15767), +PARTITION p3942 VALUES IN (15768,15769,15770,15771), +PARTITION p3943 VALUES IN (15772,15773,15774,15775), +PARTITION p3944 VALUES IN (15776,15777,15778,15779), +PARTITION p3945 VALUES IN (15780,15781,15782,15783), +PARTITION p3946 VALUES IN (15784,15785,15786,15787), +PARTITION p3947 VALUES IN (15788,15789,15790,15791), +PARTITION p3948 VALUES IN (15792,15793,15794,15795), +PARTITION p3949 VALUES IN (15796,15797,15798,15799), +PARTITION p3950 VALUES IN (15800,15801,15802,15803), +PARTITION p3951 VALUES IN (15804,15805,15806,15807), +PARTITION p3952 VALUES IN (15808,15809,15810,15811), +PARTITION p3953 VALUES IN (15812,15813,15814,15815), +PARTITION p3954 VALUES IN (15816,15817,15818,15819), +PARTITION p3955 VALUES IN (15820,15821,15822,15823), +PARTITION p3956 VALUES IN (15824,15825,15826,15827), +PARTITION p3957 VALUES IN (15828,15829,15830,15831), +PARTITION p3958 VALUES IN (15832,15833,15834,15835), +PARTITION p3959 VALUES IN (15836,15837,15838,15839), +PARTITION p3960 VALUES IN (15840,15841,15842,15843), +PARTITION p3961 VALUES IN (15844,15845,15846,15847), +PARTITION p3962 VALUES IN (15848,15849,15850,15851), +PARTITION p3963 VALUES IN (15852,15853,15854,15855), +PARTITION p3964 VALUES IN (15856,15857,15858,15859), +PARTITION p3965 VALUES IN (15860,15861,15862,15863), +PARTITION p3966 VALUES IN (15864,15865,15866,15867), +PARTITION p3967 VALUES IN (15868,15869,15870,15871), +PARTITION p3968 VALUES IN (15872,15873,15874,15875), +PARTITION p3969 VALUES IN (15876,15877,15878,15879), +PARTITION p3970 VALUES IN (15880,15881,15882,15883), +PARTITION p3971 VALUES IN (15884,15885,15886,15887), +PARTITION p3972 VALUES IN (15888,15889,15890,15891), +PARTITION p3973 VALUES IN (15892,15893,15894,15895), +PARTITION p3974 VALUES IN (15896,15897,15898,15899), +PARTITION p3975 VALUES IN (15900,15901,15902,15903), +PARTITION p3976 VALUES IN (15904,15905,15906,15907), +PARTITION p3977 VALUES IN (15908,15909,15910,15911), +PARTITION p3978 VALUES IN (15912,15913,15914,15915), +PARTITION p3979 VALUES IN (15916,15917,15918,15919), +PARTITION p3980 VALUES IN (15920,15921,15922,15923), +PARTITION p3981 VALUES IN (15924,15925,15926,15927), +PARTITION p3982 VALUES IN (15928,15929,15930,15931), +PARTITION p3983 VALUES IN (15932,15933,15934,15935), +PARTITION p3984 VALUES IN (15936,15937,15938,15939), +PARTITION p3985 VALUES IN (15940,15941,15942,15943), +PARTITION p3986 VALUES IN (15944,15945,15946,15947), +PARTITION p3987 VALUES IN (15948,15949,15950,15951), +PARTITION p3988 VALUES IN (15952,15953,15954,15955), +PARTITION p3989 VALUES IN (15956,15957,15958,15959), +PARTITION p3990 VALUES IN (15960,15961,15962,15963), +PARTITION p3991 VALUES IN (15964,15965,15966,15967), +PARTITION p3992 VALUES IN (15968,15969,15970,15971), +PARTITION p3993 VALUES IN (15972,15973,15974,15975), +PARTITION p3994 VALUES IN (15976,15977,15978,15979), +PARTITION p3995 VALUES IN (15980,15981,15982,15983), +PARTITION p3996 VALUES IN (15984,15985,15986,15987), +PARTITION p3997 VALUES IN (15988,15989,15990,15991), +PARTITION p3998 VALUES IN (15992,15993,15994,15995), +PARTITION p3999 VALUES IN (15996,15997,15998,15999), +PARTITION p4000 VALUES IN (16000,16001,16002,16003), +PARTITION p4001 VALUES IN (16004,16005,16006,16007), +PARTITION p4002 VALUES IN (16008,16009,16010,16011), +PARTITION p4003 VALUES IN (16012,16013,16014,16015), +PARTITION p4004 VALUES IN (16016,16017,16018,16019), +PARTITION p4005 VALUES IN (16020,16021,16022,16023), +PARTITION p4006 VALUES IN (16024,16025,16026,16027), +PARTITION p4007 VALUES IN (16028,16029,16030,16031), +PARTITION p4008 VALUES IN (16032,16033,16034,16035), +PARTITION p4009 VALUES IN (16036,16037,16038,16039), +PARTITION p4010 VALUES IN (16040,16041,16042,16043), +PARTITION p4011 VALUES IN (16044,16045,16046,16047), +PARTITION p4012 VALUES IN (16048,16049,16050,16051), +PARTITION p4013 VALUES IN (16052,16053,16054,16055), +PARTITION p4014 VALUES IN (16056,16057,16058,16059), +PARTITION p4015 VALUES IN (16060,16061,16062,16063), +PARTITION p4016 VALUES IN (16064,16065,16066,16067), +PARTITION p4017 VALUES IN (16068,16069,16070,16071), +PARTITION p4018 VALUES IN (16072,16073,16074,16075), +PARTITION p4019 VALUES IN (16076,16077,16078,16079), +PARTITION p4020 VALUES IN (16080,16081,16082,16083), +PARTITION p4021 VALUES IN (16084,16085,16086,16087), +PARTITION p4022 VALUES IN (16088,16089,16090,16091), +PARTITION p4023 VALUES IN (16092,16093,16094,16095), +PARTITION p4024 VALUES IN (16096,16097,16098,16099), +PARTITION p4025 VALUES IN (16100,16101,16102,16103), +PARTITION p4026 VALUES IN (16104,16105,16106,16107), +PARTITION p4027 VALUES IN (16108,16109,16110,16111), +PARTITION p4028 VALUES IN (16112,16113,16114,16115), +PARTITION p4029 VALUES IN (16116,16117,16118,16119), +PARTITION p4030 VALUES IN (16120,16121,16122,16123), +PARTITION p4031 VALUES IN (16124,16125,16126,16127), +PARTITION p4032 VALUES IN (16128,16129,16130,16131), +PARTITION p4033 VALUES IN (16132,16133,16134,16135), +PARTITION p4034 VALUES IN (16136,16137,16138,16139), +PARTITION p4035 VALUES IN (16140,16141,16142,16143), +PARTITION p4036 VALUES IN (16144,16145,16146,16147), +PARTITION p4037 VALUES IN (16148,16149,16150,16151), +PARTITION p4038 VALUES IN (16152,16153,16154,16155), +PARTITION p4039 VALUES IN (16156,16157,16158,16159), +PARTITION p4040 VALUES IN (16160,16161,16162,16163), +PARTITION p4041 VALUES IN (16164,16165,16166,16167), +PARTITION p4042 VALUES IN (16168,16169,16170,16171), +PARTITION p4043 VALUES IN (16172,16173,16174,16175), +PARTITION p4044 VALUES IN (16176,16177,16178,16179), +PARTITION p4045 VALUES IN (16180,16181,16182,16183), +PARTITION p4046 VALUES IN (16184,16185,16186,16187), +PARTITION p4047 VALUES IN (16188,16189,16190,16191), +PARTITION p4048 VALUES IN (16192,16193,16194,16195), +PARTITION p4049 VALUES IN (16196,16197,16198,16199), +PARTITION p4050 VALUES IN (16200,16201,16202,16203), +PARTITION p4051 VALUES IN (16204,16205,16206,16207), +PARTITION p4052 VALUES IN (16208,16209,16210,16211), +PARTITION p4053 VALUES IN (16212,16213,16214,16215), +PARTITION p4054 VALUES IN (16216,16217,16218,16219), +PARTITION p4055 VALUES IN (16220,16221,16222,16223), +PARTITION p4056 VALUES IN (16224,16225,16226,16227), +PARTITION p4057 VALUES IN (16228,16229,16230,16231), +PARTITION p4058 VALUES IN (16232,16233,16234,16235), +PARTITION p4059 VALUES IN (16236,16237,16238,16239), +PARTITION p4060 VALUES IN (16240,16241,16242,16243), +PARTITION p4061 VALUES IN (16244,16245,16246,16247), +PARTITION p4062 VALUES IN (16248,16249,16250,16251), +PARTITION p4063 VALUES IN (16252,16253,16254,16255), +PARTITION p4064 VALUES IN (16256,16257,16258,16259), +PARTITION p4065 VALUES IN (16260,16261,16262,16263), +PARTITION p4066 VALUES IN (16264,16265,16266,16267), +PARTITION p4067 VALUES IN (16268,16269,16270,16271), +PARTITION p4068 VALUES IN (16272,16273,16274,16275), +PARTITION p4069 VALUES IN (16276,16277,16278,16279), +PARTITION p4070 VALUES IN (16280,16281,16282,16283), +PARTITION p4071 VALUES IN (16284,16285,16286,16287), +PARTITION p4072 VALUES IN (16288,16289,16290,16291), +PARTITION p4073 VALUES IN (16292,16293,16294,16295), +PARTITION p4074 VALUES IN (16296,16297,16298,16299), +PARTITION p4075 VALUES IN (16300,16301,16302,16303), +PARTITION p4076 VALUES IN (16304,16305,16306,16307), +PARTITION p4077 VALUES IN (16308,16309,16310,16311), +PARTITION p4078 VALUES IN (16312,16313,16314,16315), +PARTITION p4079 VALUES IN (16316,16317,16318,16319), +PARTITION p4080 VALUES IN (16320,16321,16322,16323), +PARTITION p4081 VALUES IN (16324,16325,16326,16327), +PARTITION p4082 VALUES IN (16328,16329,16330,16331), +PARTITION p4083 VALUES IN (16332,16333,16334,16335), +PARTITION p4084 VALUES IN (16336,16337,16338,16339), +PARTITION p4085 VALUES IN (16340,16341,16342,16343), +PARTITION p4086 VALUES IN (16344,16345,16346,16347), +PARTITION p4087 VALUES IN (16348,16349,16350,16351), +PARTITION p4088 VALUES IN (16352,16353,16354,16355), +PARTITION p4089 VALUES IN (16356,16357,16358,16359), +PARTITION p4090 VALUES IN (16360,16361,16362,16363), +PARTITION p4091 VALUES IN (16364,16365,16366,16367), +PARTITION p4092 VALUES IN (16368,16369,16370,16371), +PARTITION p4093 VALUES IN (16372,16373,16374,16375), +PARTITION p4094 VALUES IN (16376,16377,16378,16379), +PARTITION p4095 VALUES IN (16380,16381,16382,16383) +); +16383 inserts; +select count(*) from t2; +count(*) +16383 +select count(*) from t2 partition (p0); +count(*) +3 +select count(*) from t2 partition (p10); +count(*) +4 +select count(*) from t2 partition (p100); +count(*) +4 +select count(*) from t2 partition (p1000); +count(*) +4 +select count(*) from t2 partition (p4000); +count(*) +4 +select count(*) from t2 partition (p4095); +count(*) +4 +select * from t2 partition (p0); +a +1 +3 +2 +select * from t2 partition (p10); +a +41 +43 +40 +42 +select * from t2 partition (p100); +a +400 +401 +402 +403 +select * from t2 partition (p1000); +a +4000 +4001 +4002 +4003 +select * from t2 partition (p4000); +a +16001 +16003 +16000 +16002 +select * from t2 partition (p4095); +a +16380 +16381 +16382 +16383 +delete from t2 partition (p4095); +select * from t2 partition (p4095); +a +insert into t2 partition (p4095) values (16382),(16383); +select * from t2 partition (p4095); +a +16382 +16383 +update t2 partition (p4095) set a=16381 where a= 16382; +select * from t2 partition (p4095); +a +16381 +16383 +load data infile 'MYSQL_TMP_DIR/data01' into table t2 partition (p4095) fields terminated by ','; +select * from t2 partition (p4095); +a +16380 +16381 +16382 +16383 +alter table t2 add partition (partition p4096 values in (16384,16385,16386,16387)); +ERROR HY000: Too many partitions (including subpartitions) were defined +drop table t2; diff --git a/mysql-test/suite/tokudb.parts/r-native/partition_max_sub_parts_key_range_tokudb.result b/mysql-test/suite/tokudb.parts/r-native/partition_max_sub_parts_key_range_tokudb.result new file mode 100644 index 000000000000..7eb45b104c2e --- /dev/null +++ b/mysql-test/suite/tokudb.parts/r-native/partition_max_sub_parts_key_range_tokudb.result @@ -0,0 +1,4205 @@ +create table t2 (a int not null, primary key(a)) engine='TokuDB' +partition by range (a) +subpartition by key (a) +subpartitions 2 ( +PARTITION p0 VALUES LESS THAN (8), +PARTITION p1 VALUES LESS THAN (16), +PARTITION p2 VALUES LESS THAN (24), +PARTITION p3 VALUES LESS THAN (32), +PARTITION p4 VALUES LESS THAN (40), +PARTITION p5 VALUES LESS THAN (48), +PARTITION p6 VALUES LESS THAN (56), +PARTITION p7 VALUES LESS THAN (64), +PARTITION p8 VALUES LESS THAN (72), +PARTITION p9 VALUES LESS THAN (80), +PARTITION p10 VALUES LESS THAN (88), +PARTITION p11 VALUES LESS THAN (96), +PARTITION p12 VALUES LESS THAN (104), +PARTITION p13 VALUES LESS THAN (112), +PARTITION p14 VALUES LESS THAN (120), +PARTITION p15 VALUES LESS THAN (128), +PARTITION p16 VALUES LESS THAN (136), +PARTITION p17 VALUES LESS THAN (144), +PARTITION p18 VALUES LESS THAN (152), +PARTITION p19 VALUES LESS THAN (160), +PARTITION p20 VALUES LESS THAN (168), +PARTITION p21 VALUES LESS THAN (176), +PARTITION p22 VALUES LESS THAN (184), +PARTITION p23 VALUES LESS THAN (192), +PARTITION p24 VALUES LESS THAN (200), +PARTITION p25 VALUES LESS THAN (208), +PARTITION p26 VALUES LESS THAN (216), +PARTITION p27 VALUES LESS THAN (224), +PARTITION p28 VALUES LESS THAN (232), +PARTITION p29 VALUES LESS THAN (240), +PARTITION p30 VALUES LESS THAN (248), +PARTITION p31 VALUES LESS THAN (256), +PARTITION p32 VALUES LESS THAN (264), +PARTITION p33 VALUES LESS THAN (272), +PARTITION p34 VALUES LESS THAN (280), +PARTITION p35 VALUES LESS THAN (288), +PARTITION p36 VALUES LESS THAN (296), +PARTITION p37 VALUES LESS THAN (304), +PARTITION p38 VALUES LESS THAN (312), +PARTITION p39 VALUES LESS THAN (320), +PARTITION p40 VALUES LESS THAN (328), +PARTITION p41 VALUES LESS THAN (336), +PARTITION p42 VALUES LESS THAN (344), +PARTITION p43 VALUES LESS THAN (352), +PARTITION p44 VALUES LESS THAN (360), +PARTITION p45 VALUES LESS THAN (368), +PARTITION p46 VALUES LESS THAN (376), +PARTITION p47 VALUES LESS THAN (384), +PARTITION p48 VALUES LESS THAN (392), +PARTITION p49 VALUES LESS THAN (400), +PARTITION p50 VALUES LESS THAN (408), +PARTITION p51 VALUES LESS THAN (416), +PARTITION p52 VALUES LESS THAN (424), +PARTITION p53 VALUES LESS THAN (432), +PARTITION p54 VALUES LESS THAN (440), +PARTITION p55 VALUES LESS THAN (448), +PARTITION p56 VALUES LESS THAN (456), +PARTITION p57 VALUES LESS THAN (464), +PARTITION p58 VALUES LESS THAN (472), +PARTITION p59 VALUES LESS THAN (480), +PARTITION p60 VALUES LESS THAN (488), +PARTITION p61 VALUES LESS THAN (496), +PARTITION p62 VALUES LESS THAN (504), +PARTITION p63 VALUES LESS THAN (512), +PARTITION p64 VALUES LESS THAN (520), +PARTITION p65 VALUES LESS THAN (528), +PARTITION p66 VALUES LESS THAN (536), +PARTITION p67 VALUES LESS THAN (544), +PARTITION p68 VALUES LESS THAN (552), +PARTITION p69 VALUES LESS THAN (560), +PARTITION p70 VALUES LESS THAN (568), +PARTITION p71 VALUES LESS THAN (576), +PARTITION p72 VALUES LESS THAN (584), +PARTITION p73 VALUES LESS THAN (592), +PARTITION p74 VALUES LESS THAN (600), +PARTITION p75 VALUES LESS THAN (608), +PARTITION p76 VALUES LESS THAN (616), +PARTITION p77 VALUES LESS THAN (624), +PARTITION p78 VALUES LESS THAN (632), +PARTITION p79 VALUES LESS THAN (640), +PARTITION p80 VALUES LESS THAN (648), +PARTITION p81 VALUES LESS THAN (656), +PARTITION p82 VALUES LESS THAN (664), +PARTITION p83 VALUES LESS THAN (672), +PARTITION p84 VALUES LESS THAN (680), +PARTITION p85 VALUES LESS THAN (688), +PARTITION p86 VALUES LESS THAN (696), +PARTITION p87 VALUES LESS THAN (704), +PARTITION p88 VALUES LESS THAN (712), +PARTITION p89 VALUES LESS THAN (720), +PARTITION p90 VALUES LESS THAN (728), +PARTITION p91 VALUES LESS THAN (736), +PARTITION p92 VALUES LESS THAN (744), +PARTITION p93 VALUES LESS THAN (752), +PARTITION p94 VALUES LESS THAN (760), +PARTITION p95 VALUES LESS THAN (768), +PARTITION p96 VALUES LESS THAN (776), +PARTITION p97 VALUES LESS THAN (784), +PARTITION p98 VALUES LESS THAN (792), +PARTITION p99 VALUES LESS THAN (800), +PARTITION p100 VALUES LESS THAN (808), +PARTITION p101 VALUES LESS THAN (816), +PARTITION p102 VALUES LESS THAN (824), +PARTITION p103 VALUES LESS THAN (832), +PARTITION p104 VALUES LESS THAN (840), +PARTITION p105 VALUES LESS THAN (848), +PARTITION p106 VALUES LESS THAN (856), +PARTITION p107 VALUES LESS THAN (864), +PARTITION p108 VALUES LESS THAN (872), +PARTITION p109 VALUES LESS THAN (880), +PARTITION p110 VALUES LESS THAN (888), +PARTITION p111 VALUES LESS THAN (896), +PARTITION p112 VALUES LESS THAN (904), +PARTITION p113 VALUES LESS THAN (912), +PARTITION p114 VALUES LESS THAN (920), +PARTITION p115 VALUES LESS THAN (928), +PARTITION p116 VALUES LESS THAN (936), +PARTITION p117 VALUES LESS THAN (944), +PARTITION p118 VALUES LESS THAN (952), +PARTITION p119 VALUES LESS THAN (960), +PARTITION p120 VALUES LESS THAN (968), +PARTITION p121 VALUES LESS THAN (976), +PARTITION p122 VALUES LESS THAN (984), +PARTITION p123 VALUES LESS THAN (992), +PARTITION p124 VALUES LESS THAN (1000), +PARTITION p125 VALUES LESS THAN (1008), +PARTITION p126 VALUES LESS THAN (1016), +PARTITION p127 VALUES LESS THAN (1024), +PARTITION p128 VALUES LESS THAN (1032), +PARTITION p129 VALUES LESS THAN (1040), +PARTITION p130 VALUES LESS THAN (1048), +PARTITION p131 VALUES LESS THAN (1056), +PARTITION p132 VALUES LESS THAN (1064), +PARTITION p133 VALUES LESS THAN (1072), +PARTITION p134 VALUES LESS THAN (1080), +PARTITION p135 VALUES LESS THAN (1088), +PARTITION p136 VALUES LESS THAN (1096), +PARTITION p137 VALUES LESS THAN (1104), +PARTITION p138 VALUES LESS THAN (1112), +PARTITION p139 VALUES LESS THAN (1120), +PARTITION p140 VALUES LESS THAN (1128), +PARTITION p141 VALUES LESS THAN (1136), +PARTITION p142 VALUES LESS THAN (1144), +PARTITION p143 VALUES LESS THAN (1152), +PARTITION p144 VALUES LESS THAN (1160), +PARTITION p145 VALUES LESS THAN (1168), +PARTITION p146 VALUES LESS THAN (1176), +PARTITION p147 VALUES LESS THAN (1184), +PARTITION p148 VALUES LESS THAN (1192), +PARTITION p149 VALUES LESS THAN (1200), +PARTITION p150 VALUES LESS THAN (1208), +PARTITION p151 VALUES LESS THAN (1216), +PARTITION p152 VALUES LESS THAN (1224), +PARTITION p153 VALUES LESS THAN (1232), +PARTITION p154 VALUES LESS THAN (1240), +PARTITION p155 VALUES LESS THAN (1248), +PARTITION p156 VALUES LESS THAN (1256), +PARTITION p157 VALUES LESS THAN (1264), +PARTITION p158 VALUES LESS THAN (1272), +PARTITION p159 VALUES LESS THAN (1280), +PARTITION p160 VALUES LESS THAN (1288), +PARTITION p161 VALUES LESS THAN (1296), +PARTITION p162 VALUES LESS THAN (1304), +PARTITION p163 VALUES LESS THAN (1312), +PARTITION p164 VALUES LESS THAN (1320), +PARTITION p165 VALUES LESS THAN (1328), +PARTITION p166 VALUES LESS THAN (1336), +PARTITION p167 VALUES LESS THAN (1344), +PARTITION p168 VALUES LESS THAN (1352), +PARTITION p169 VALUES LESS THAN (1360), +PARTITION p170 VALUES LESS THAN (1368), +PARTITION p171 VALUES LESS THAN (1376), +PARTITION p172 VALUES LESS THAN (1384), +PARTITION p173 VALUES LESS THAN (1392), +PARTITION p174 VALUES LESS THAN (1400), +PARTITION p175 VALUES LESS THAN (1408), +PARTITION p176 VALUES LESS THAN (1416), +PARTITION p177 VALUES LESS THAN (1424), +PARTITION p178 VALUES LESS THAN (1432), +PARTITION p179 VALUES LESS THAN (1440), +PARTITION p180 VALUES LESS THAN (1448), +PARTITION p181 VALUES LESS THAN (1456), +PARTITION p182 VALUES LESS THAN (1464), +PARTITION p183 VALUES LESS THAN (1472), +PARTITION p184 VALUES LESS THAN (1480), +PARTITION p185 VALUES LESS THAN (1488), +PARTITION p186 VALUES LESS THAN (1496), +PARTITION p187 VALUES LESS THAN (1504), +PARTITION p188 VALUES LESS THAN (1512), +PARTITION p189 VALUES LESS THAN (1520), +PARTITION p190 VALUES LESS THAN (1528), +PARTITION p191 VALUES LESS THAN (1536), +PARTITION p192 VALUES LESS THAN (1544), +PARTITION p193 VALUES LESS THAN (1552), +PARTITION p194 VALUES LESS THAN (1560), +PARTITION p195 VALUES LESS THAN (1568), +PARTITION p196 VALUES LESS THAN (1576), +PARTITION p197 VALUES LESS THAN (1584), +PARTITION p198 VALUES LESS THAN (1592), +PARTITION p199 VALUES LESS THAN (1600), +PARTITION p200 VALUES LESS THAN (1608), +PARTITION p201 VALUES LESS THAN (1616), +PARTITION p202 VALUES LESS THAN (1624), +PARTITION p203 VALUES LESS THAN (1632), +PARTITION p204 VALUES LESS THAN (1640), +PARTITION p205 VALUES LESS THAN (1648), +PARTITION p206 VALUES LESS THAN (1656), +PARTITION p207 VALUES LESS THAN (1664), +PARTITION p208 VALUES LESS THAN (1672), +PARTITION p209 VALUES LESS THAN (1680), +PARTITION p210 VALUES LESS THAN (1688), +PARTITION p211 VALUES LESS THAN (1696), +PARTITION p212 VALUES LESS THAN (1704), +PARTITION p213 VALUES LESS THAN (1712), +PARTITION p214 VALUES LESS THAN (1720), +PARTITION p215 VALUES LESS THAN (1728), +PARTITION p216 VALUES LESS THAN (1736), +PARTITION p217 VALUES LESS THAN (1744), +PARTITION p218 VALUES LESS THAN (1752), +PARTITION p219 VALUES LESS THAN (1760), +PARTITION p220 VALUES LESS THAN (1768), +PARTITION p221 VALUES LESS THAN (1776), +PARTITION p222 VALUES LESS THAN (1784), +PARTITION p223 VALUES LESS THAN (1792), +PARTITION p224 VALUES LESS THAN (1800), +PARTITION p225 VALUES LESS THAN (1808), +PARTITION p226 VALUES LESS THAN (1816), +PARTITION p227 VALUES LESS THAN (1824), +PARTITION p228 VALUES LESS THAN (1832), +PARTITION p229 VALUES LESS THAN (1840), +PARTITION p230 VALUES LESS THAN (1848), +PARTITION p231 VALUES LESS THAN (1856), +PARTITION p232 VALUES LESS THAN (1864), +PARTITION p233 VALUES LESS THAN (1872), +PARTITION p234 VALUES LESS THAN (1880), +PARTITION p235 VALUES LESS THAN (1888), +PARTITION p236 VALUES LESS THAN (1896), +PARTITION p237 VALUES LESS THAN (1904), +PARTITION p238 VALUES LESS THAN (1912), +PARTITION p239 VALUES LESS THAN (1920), +PARTITION p240 VALUES LESS THAN (1928), +PARTITION p241 VALUES LESS THAN (1936), +PARTITION p242 VALUES LESS THAN (1944), +PARTITION p243 VALUES LESS THAN (1952), +PARTITION p244 VALUES LESS THAN (1960), +PARTITION p245 VALUES LESS THAN (1968), +PARTITION p246 VALUES LESS THAN (1976), +PARTITION p247 VALUES LESS THAN (1984), +PARTITION p248 VALUES LESS THAN (1992), +PARTITION p249 VALUES LESS THAN (2000), +PARTITION p250 VALUES LESS THAN (2008), +PARTITION p251 VALUES LESS THAN (2016), +PARTITION p252 VALUES LESS THAN (2024), +PARTITION p253 VALUES LESS THAN (2032), +PARTITION p254 VALUES LESS THAN (2040), +PARTITION p255 VALUES LESS THAN (2048), +PARTITION p256 VALUES LESS THAN (2056), +PARTITION p257 VALUES LESS THAN (2064), +PARTITION p258 VALUES LESS THAN (2072), +PARTITION p259 VALUES LESS THAN (2080), +PARTITION p260 VALUES LESS THAN (2088), +PARTITION p261 VALUES LESS THAN (2096), +PARTITION p262 VALUES LESS THAN (2104), +PARTITION p263 VALUES LESS THAN (2112), +PARTITION p264 VALUES LESS THAN (2120), +PARTITION p265 VALUES LESS THAN (2128), +PARTITION p266 VALUES LESS THAN (2136), +PARTITION p267 VALUES LESS THAN (2144), +PARTITION p268 VALUES LESS THAN (2152), +PARTITION p269 VALUES LESS THAN (2160), +PARTITION p270 VALUES LESS THAN (2168), +PARTITION p271 VALUES LESS THAN (2176), +PARTITION p272 VALUES LESS THAN (2184), +PARTITION p273 VALUES LESS THAN (2192), +PARTITION p274 VALUES LESS THAN (2200), +PARTITION p275 VALUES LESS THAN (2208), +PARTITION p276 VALUES LESS THAN (2216), +PARTITION p277 VALUES LESS THAN (2224), +PARTITION p278 VALUES LESS THAN (2232), +PARTITION p279 VALUES LESS THAN (2240), +PARTITION p280 VALUES LESS THAN (2248), +PARTITION p281 VALUES LESS THAN (2256), +PARTITION p282 VALUES LESS THAN (2264), +PARTITION p283 VALUES LESS THAN (2272), +PARTITION p284 VALUES LESS THAN (2280), +PARTITION p285 VALUES LESS THAN (2288), +PARTITION p286 VALUES LESS THAN (2296), +PARTITION p287 VALUES LESS THAN (2304), +PARTITION p288 VALUES LESS THAN (2312), +PARTITION p289 VALUES LESS THAN (2320), +PARTITION p290 VALUES LESS THAN (2328), +PARTITION p291 VALUES LESS THAN (2336), +PARTITION p292 VALUES LESS THAN (2344), +PARTITION p293 VALUES LESS THAN (2352), +PARTITION p294 VALUES LESS THAN (2360), +PARTITION p295 VALUES LESS THAN (2368), +PARTITION p296 VALUES LESS THAN (2376), +PARTITION p297 VALUES LESS THAN (2384), +PARTITION p298 VALUES LESS THAN (2392), +PARTITION p299 VALUES LESS THAN (2400), +PARTITION p300 VALUES LESS THAN (2408), +PARTITION p301 VALUES LESS THAN (2416), +PARTITION p302 VALUES LESS THAN (2424), +PARTITION p303 VALUES LESS THAN (2432), +PARTITION p304 VALUES LESS THAN (2440), +PARTITION p305 VALUES LESS THAN (2448), +PARTITION p306 VALUES LESS THAN (2456), +PARTITION p307 VALUES LESS THAN (2464), +PARTITION p308 VALUES LESS THAN (2472), +PARTITION p309 VALUES LESS THAN (2480), +PARTITION p310 VALUES LESS THAN (2488), +PARTITION p311 VALUES LESS THAN (2496), +PARTITION p312 VALUES LESS THAN (2504), +PARTITION p313 VALUES LESS THAN (2512), +PARTITION p314 VALUES LESS THAN (2520), +PARTITION p315 VALUES LESS THAN (2528), +PARTITION p316 VALUES LESS THAN (2536), +PARTITION p317 VALUES LESS THAN (2544), +PARTITION p318 VALUES LESS THAN (2552), +PARTITION p319 VALUES LESS THAN (2560), +PARTITION p320 VALUES LESS THAN (2568), +PARTITION p321 VALUES LESS THAN (2576), +PARTITION p322 VALUES LESS THAN (2584), +PARTITION p323 VALUES LESS THAN (2592), +PARTITION p324 VALUES LESS THAN (2600), +PARTITION p325 VALUES LESS THAN (2608), +PARTITION p326 VALUES LESS THAN (2616), +PARTITION p327 VALUES LESS THAN (2624), +PARTITION p328 VALUES LESS THAN (2632), +PARTITION p329 VALUES LESS THAN (2640), +PARTITION p330 VALUES LESS THAN (2648), +PARTITION p331 VALUES LESS THAN (2656), +PARTITION p332 VALUES LESS THAN (2664), +PARTITION p333 VALUES LESS THAN (2672), +PARTITION p334 VALUES LESS THAN (2680), +PARTITION p335 VALUES LESS THAN (2688), +PARTITION p336 VALUES LESS THAN (2696), +PARTITION p337 VALUES LESS THAN (2704), +PARTITION p338 VALUES LESS THAN (2712), +PARTITION p339 VALUES LESS THAN (2720), +PARTITION p340 VALUES LESS THAN (2728), +PARTITION p341 VALUES LESS THAN (2736), +PARTITION p342 VALUES LESS THAN (2744), +PARTITION p343 VALUES LESS THAN (2752), +PARTITION p344 VALUES LESS THAN (2760), +PARTITION p345 VALUES LESS THAN (2768), +PARTITION p346 VALUES LESS THAN (2776), +PARTITION p347 VALUES LESS THAN (2784), +PARTITION p348 VALUES LESS THAN (2792), +PARTITION p349 VALUES LESS THAN (2800), +PARTITION p350 VALUES LESS THAN (2808), +PARTITION p351 VALUES LESS THAN (2816), +PARTITION p352 VALUES LESS THAN (2824), +PARTITION p353 VALUES LESS THAN (2832), +PARTITION p354 VALUES LESS THAN (2840), +PARTITION p355 VALUES LESS THAN (2848), +PARTITION p356 VALUES LESS THAN (2856), +PARTITION p357 VALUES LESS THAN (2864), +PARTITION p358 VALUES LESS THAN (2872), +PARTITION p359 VALUES LESS THAN (2880), +PARTITION p360 VALUES LESS THAN (2888), +PARTITION p361 VALUES LESS THAN (2896), +PARTITION p362 VALUES LESS THAN (2904), +PARTITION p363 VALUES LESS THAN (2912), +PARTITION p364 VALUES LESS THAN (2920), +PARTITION p365 VALUES LESS THAN (2928), +PARTITION p366 VALUES LESS THAN (2936), +PARTITION p367 VALUES LESS THAN (2944), +PARTITION p368 VALUES LESS THAN (2952), +PARTITION p369 VALUES LESS THAN (2960), +PARTITION p370 VALUES LESS THAN (2968), +PARTITION p371 VALUES LESS THAN (2976), +PARTITION p372 VALUES LESS THAN (2984), +PARTITION p373 VALUES LESS THAN (2992), +PARTITION p374 VALUES LESS THAN (3000), +PARTITION p375 VALUES LESS THAN (3008), +PARTITION p376 VALUES LESS THAN (3016), +PARTITION p377 VALUES LESS THAN (3024), +PARTITION p378 VALUES LESS THAN (3032), +PARTITION p379 VALUES LESS THAN (3040), +PARTITION p380 VALUES LESS THAN (3048), +PARTITION p381 VALUES LESS THAN (3056), +PARTITION p382 VALUES LESS THAN (3064), +PARTITION p383 VALUES LESS THAN (3072), +PARTITION p384 VALUES LESS THAN (3080), +PARTITION p385 VALUES LESS THAN (3088), +PARTITION p386 VALUES LESS THAN (3096), +PARTITION p387 VALUES LESS THAN (3104), +PARTITION p388 VALUES LESS THAN (3112), +PARTITION p389 VALUES LESS THAN (3120), +PARTITION p390 VALUES LESS THAN (3128), +PARTITION p391 VALUES LESS THAN (3136), +PARTITION p392 VALUES LESS THAN (3144), +PARTITION p393 VALUES LESS THAN (3152), +PARTITION p394 VALUES LESS THAN (3160), +PARTITION p395 VALUES LESS THAN (3168), +PARTITION p396 VALUES LESS THAN (3176), +PARTITION p397 VALUES LESS THAN (3184), +PARTITION p398 VALUES LESS THAN (3192), +PARTITION p399 VALUES LESS THAN (3200), +PARTITION p400 VALUES LESS THAN (3208), +PARTITION p401 VALUES LESS THAN (3216), +PARTITION p402 VALUES LESS THAN (3224), +PARTITION p403 VALUES LESS THAN (3232), +PARTITION p404 VALUES LESS THAN (3240), +PARTITION p405 VALUES LESS THAN (3248), +PARTITION p406 VALUES LESS THAN (3256), +PARTITION p407 VALUES LESS THAN (3264), +PARTITION p408 VALUES LESS THAN (3272), +PARTITION p409 VALUES LESS THAN (3280), +PARTITION p410 VALUES LESS THAN (3288), +PARTITION p411 VALUES LESS THAN (3296), +PARTITION p412 VALUES LESS THAN (3304), +PARTITION p413 VALUES LESS THAN (3312), +PARTITION p414 VALUES LESS THAN (3320), +PARTITION p415 VALUES LESS THAN (3328), +PARTITION p416 VALUES LESS THAN (3336), +PARTITION p417 VALUES LESS THAN (3344), +PARTITION p418 VALUES LESS THAN (3352), +PARTITION p419 VALUES LESS THAN (3360), +PARTITION p420 VALUES LESS THAN (3368), +PARTITION p421 VALUES LESS THAN (3376), +PARTITION p422 VALUES LESS THAN (3384), +PARTITION p423 VALUES LESS THAN (3392), +PARTITION p424 VALUES LESS THAN (3400), +PARTITION p425 VALUES LESS THAN (3408), +PARTITION p426 VALUES LESS THAN (3416), +PARTITION p427 VALUES LESS THAN (3424), +PARTITION p428 VALUES LESS THAN (3432), +PARTITION p429 VALUES LESS THAN (3440), +PARTITION p430 VALUES LESS THAN (3448), +PARTITION p431 VALUES LESS THAN (3456), +PARTITION p432 VALUES LESS THAN (3464), +PARTITION p433 VALUES LESS THAN (3472), +PARTITION p434 VALUES LESS THAN (3480), +PARTITION p435 VALUES LESS THAN (3488), +PARTITION p436 VALUES LESS THAN (3496), +PARTITION p437 VALUES LESS THAN (3504), +PARTITION p438 VALUES LESS THAN (3512), +PARTITION p439 VALUES LESS THAN (3520), +PARTITION p440 VALUES LESS THAN (3528), +PARTITION p441 VALUES LESS THAN (3536), +PARTITION p442 VALUES LESS THAN (3544), +PARTITION p443 VALUES LESS THAN (3552), +PARTITION p444 VALUES LESS THAN (3560), +PARTITION p445 VALUES LESS THAN (3568), +PARTITION p446 VALUES LESS THAN (3576), +PARTITION p447 VALUES LESS THAN (3584), +PARTITION p448 VALUES LESS THAN (3592), +PARTITION p449 VALUES LESS THAN (3600), +PARTITION p450 VALUES LESS THAN (3608), +PARTITION p451 VALUES LESS THAN (3616), +PARTITION p452 VALUES LESS THAN (3624), +PARTITION p453 VALUES LESS THAN (3632), +PARTITION p454 VALUES LESS THAN (3640), +PARTITION p455 VALUES LESS THAN (3648), +PARTITION p456 VALUES LESS THAN (3656), +PARTITION p457 VALUES LESS THAN (3664), +PARTITION p458 VALUES LESS THAN (3672), +PARTITION p459 VALUES LESS THAN (3680), +PARTITION p460 VALUES LESS THAN (3688), +PARTITION p461 VALUES LESS THAN (3696), +PARTITION p462 VALUES LESS THAN (3704), +PARTITION p463 VALUES LESS THAN (3712), +PARTITION p464 VALUES LESS THAN (3720), +PARTITION p465 VALUES LESS THAN (3728), +PARTITION p466 VALUES LESS THAN (3736), +PARTITION p467 VALUES LESS THAN (3744), +PARTITION p468 VALUES LESS THAN (3752), +PARTITION p469 VALUES LESS THAN (3760), +PARTITION p470 VALUES LESS THAN (3768), +PARTITION p471 VALUES LESS THAN (3776), +PARTITION p472 VALUES LESS THAN (3784), +PARTITION p473 VALUES LESS THAN (3792), +PARTITION p474 VALUES LESS THAN (3800), +PARTITION p475 VALUES LESS THAN (3808), +PARTITION p476 VALUES LESS THAN (3816), +PARTITION p477 VALUES LESS THAN (3824), +PARTITION p478 VALUES LESS THAN (3832), +PARTITION p479 VALUES LESS THAN (3840), +PARTITION p480 VALUES LESS THAN (3848), +PARTITION p481 VALUES LESS THAN (3856), +PARTITION p482 VALUES LESS THAN (3864), +PARTITION p483 VALUES LESS THAN (3872), +PARTITION p484 VALUES LESS THAN (3880), +PARTITION p485 VALUES LESS THAN (3888), +PARTITION p486 VALUES LESS THAN (3896), +PARTITION p487 VALUES LESS THAN (3904), +PARTITION p488 VALUES LESS THAN (3912), +PARTITION p489 VALUES LESS THAN (3920), +PARTITION p490 VALUES LESS THAN (3928), +PARTITION p491 VALUES LESS THAN (3936), +PARTITION p492 VALUES LESS THAN (3944), +PARTITION p493 VALUES LESS THAN (3952), +PARTITION p494 VALUES LESS THAN (3960), +PARTITION p495 VALUES LESS THAN (3968), +PARTITION p496 VALUES LESS THAN (3976), +PARTITION p497 VALUES LESS THAN (3984), +PARTITION p498 VALUES LESS THAN (3992), +PARTITION p499 VALUES LESS THAN (4000), +PARTITION p500 VALUES LESS THAN (4008), +PARTITION p501 VALUES LESS THAN (4016), +PARTITION p502 VALUES LESS THAN (4024), +PARTITION p503 VALUES LESS THAN (4032), +PARTITION p504 VALUES LESS THAN (4040), +PARTITION p505 VALUES LESS THAN (4048), +PARTITION p506 VALUES LESS THAN (4056), +PARTITION p507 VALUES LESS THAN (4064), +PARTITION p508 VALUES LESS THAN (4072), +PARTITION p509 VALUES LESS THAN (4080), +PARTITION p510 VALUES LESS THAN (4088), +PARTITION p511 VALUES LESS THAN (4096), +PARTITION p512 VALUES LESS THAN (4104), +PARTITION p513 VALUES LESS THAN (4112), +PARTITION p514 VALUES LESS THAN (4120), +PARTITION p515 VALUES LESS THAN (4128), +PARTITION p516 VALUES LESS THAN (4136), +PARTITION p517 VALUES LESS THAN (4144), +PARTITION p518 VALUES LESS THAN (4152), +PARTITION p519 VALUES LESS THAN (4160), +PARTITION p520 VALUES LESS THAN (4168), +PARTITION p521 VALUES LESS THAN (4176), +PARTITION p522 VALUES LESS THAN (4184), +PARTITION p523 VALUES LESS THAN (4192), +PARTITION p524 VALUES LESS THAN (4200), +PARTITION p525 VALUES LESS THAN (4208), +PARTITION p526 VALUES LESS THAN (4216), +PARTITION p527 VALUES LESS THAN (4224), +PARTITION p528 VALUES LESS THAN (4232), +PARTITION p529 VALUES LESS THAN (4240), +PARTITION p530 VALUES LESS THAN (4248), +PARTITION p531 VALUES LESS THAN (4256), +PARTITION p532 VALUES LESS THAN (4264), +PARTITION p533 VALUES LESS THAN (4272), +PARTITION p534 VALUES LESS THAN (4280), +PARTITION p535 VALUES LESS THAN (4288), +PARTITION p536 VALUES LESS THAN (4296), +PARTITION p537 VALUES LESS THAN (4304), +PARTITION p538 VALUES LESS THAN (4312), +PARTITION p539 VALUES LESS THAN (4320), +PARTITION p540 VALUES LESS THAN (4328), +PARTITION p541 VALUES LESS THAN (4336), +PARTITION p542 VALUES LESS THAN (4344), +PARTITION p543 VALUES LESS THAN (4352), +PARTITION p544 VALUES LESS THAN (4360), +PARTITION p545 VALUES LESS THAN (4368), +PARTITION p546 VALUES LESS THAN (4376), +PARTITION p547 VALUES LESS THAN (4384), +PARTITION p548 VALUES LESS THAN (4392), +PARTITION p549 VALUES LESS THAN (4400), +PARTITION p550 VALUES LESS THAN (4408), +PARTITION p551 VALUES LESS THAN (4416), +PARTITION p552 VALUES LESS THAN (4424), +PARTITION p553 VALUES LESS THAN (4432), +PARTITION p554 VALUES LESS THAN (4440), +PARTITION p555 VALUES LESS THAN (4448), +PARTITION p556 VALUES LESS THAN (4456), +PARTITION p557 VALUES LESS THAN (4464), +PARTITION p558 VALUES LESS THAN (4472), +PARTITION p559 VALUES LESS THAN (4480), +PARTITION p560 VALUES LESS THAN (4488), +PARTITION p561 VALUES LESS THAN (4496), +PARTITION p562 VALUES LESS THAN (4504), +PARTITION p563 VALUES LESS THAN (4512), +PARTITION p564 VALUES LESS THAN (4520), +PARTITION p565 VALUES LESS THAN (4528), +PARTITION p566 VALUES LESS THAN (4536), +PARTITION p567 VALUES LESS THAN (4544), +PARTITION p568 VALUES LESS THAN (4552), +PARTITION p569 VALUES LESS THAN (4560), +PARTITION p570 VALUES LESS THAN (4568), +PARTITION p571 VALUES LESS THAN (4576), +PARTITION p572 VALUES LESS THAN (4584), +PARTITION p573 VALUES LESS THAN (4592), +PARTITION p574 VALUES LESS THAN (4600), +PARTITION p575 VALUES LESS THAN (4608), +PARTITION p576 VALUES LESS THAN (4616), +PARTITION p577 VALUES LESS THAN (4624), +PARTITION p578 VALUES LESS THAN (4632), +PARTITION p579 VALUES LESS THAN (4640), +PARTITION p580 VALUES LESS THAN (4648), +PARTITION p581 VALUES LESS THAN (4656), +PARTITION p582 VALUES LESS THAN (4664), +PARTITION p583 VALUES LESS THAN (4672), +PARTITION p584 VALUES LESS THAN (4680), +PARTITION p585 VALUES LESS THAN (4688), +PARTITION p586 VALUES LESS THAN (4696), +PARTITION p587 VALUES LESS THAN (4704), +PARTITION p588 VALUES LESS THAN (4712), +PARTITION p589 VALUES LESS THAN (4720), +PARTITION p590 VALUES LESS THAN (4728), +PARTITION p591 VALUES LESS THAN (4736), +PARTITION p592 VALUES LESS THAN (4744), +PARTITION p593 VALUES LESS THAN (4752), +PARTITION p594 VALUES LESS THAN (4760), +PARTITION p595 VALUES LESS THAN (4768), +PARTITION p596 VALUES LESS THAN (4776), +PARTITION p597 VALUES LESS THAN (4784), +PARTITION p598 VALUES LESS THAN (4792), +PARTITION p599 VALUES LESS THAN (4800), +PARTITION p600 VALUES LESS THAN (4808), +PARTITION p601 VALUES LESS THAN (4816), +PARTITION p602 VALUES LESS THAN (4824), +PARTITION p603 VALUES LESS THAN (4832), +PARTITION p604 VALUES LESS THAN (4840), +PARTITION p605 VALUES LESS THAN (4848), +PARTITION p606 VALUES LESS THAN (4856), +PARTITION p607 VALUES LESS THAN (4864), +PARTITION p608 VALUES LESS THAN (4872), +PARTITION p609 VALUES LESS THAN (4880), +PARTITION p610 VALUES LESS THAN (4888), +PARTITION p611 VALUES LESS THAN (4896), +PARTITION p612 VALUES LESS THAN (4904), +PARTITION p613 VALUES LESS THAN (4912), +PARTITION p614 VALUES LESS THAN (4920), +PARTITION p615 VALUES LESS THAN (4928), +PARTITION p616 VALUES LESS THAN (4936), +PARTITION p617 VALUES LESS THAN (4944), +PARTITION p618 VALUES LESS THAN (4952), +PARTITION p619 VALUES LESS THAN (4960), +PARTITION p620 VALUES LESS THAN (4968), +PARTITION p621 VALUES LESS THAN (4976), +PARTITION p622 VALUES LESS THAN (4984), +PARTITION p623 VALUES LESS THAN (4992), +PARTITION p624 VALUES LESS THAN (5000), +PARTITION p625 VALUES LESS THAN (5008), +PARTITION p626 VALUES LESS THAN (5016), +PARTITION p627 VALUES LESS THAN (5024), +PARTITION p628 VALUES LESS THAN (5032), +PARTITION p629 VALUES LESS THAN (5040), +PARTITION p630 VALUES LESS THAN (5048), +PARTITION p631 VALUES LESS THAN (5056), +PARTITION p632 VALUES LESS THAN (5064), +PARTITION p633 VALUES LESS THAN (5072), +PARTITION p634 VALUES LESS THAN (5080), +PARTITION p635 VALUES LESS THAN (5088), +PARTITION p636 VALUES LESS THAN (5096), +PARTITION p637 VALUES LESS THAN (5104), +PARTITION p638 VALUES LESS THAN (5112), +PARTITION p639 VALUES LESS THAN (5120), +PARTITION p640 VALUES LESS THAN (5128), +PARTITION p641 VALUES LESS THAN (5136), +PARTITION p642 VALUES LESS THAN (5144), +PARTITION p643 VALUES LESS THAN (5152), +PARTITION p644 VALUES LESS THAN (5160), +PARTITION p645 VALUES LESS THAN (5168), +PARTITION p646 VALUES LESS THAN (5176), +PARTITION p647 VALUES LESS THAN (5184), +PARTITION p648 VALUES LESS THAN (5192), +PARTITION p649 VALUES LESS THAN (5200), +PARTITION p650 VALUES LESS THAN (5208), +PARTITION p651 VALUES LESS THAN (5216), +PARTITION p652 VALUES LESS THAN (5224), +PARTITION p653 VALUES LESS THAN (5232), +PARTITION p654 VALUES LESS THAN (5240), +PARTITION p655 VALUES LESS THAN (5248), +PARTITION p656 VALUES LESS THAN (5256), +PARTITION p657 VALUES LESS THAN (5264), +PARTITION p658 VALUES LESS THAN (5272), +PARTITION p659 VALUES LESS THAN (5280), +PARTITION p660 VALUES LESS THAN (5288), +PARTITION p661 VALUES LESS THAN (5296), +PARTITION p662 VALUES LESS THAN (5304), +PARTITION p663 VALUES LESS THAN (5312), +PARTITION p664 VALUES LESS THAN (5320), +PARTITION p665 VALUES LESS THAN (5328), +PARTITION p666 VALUES LESS THAN (5336), +PARTITION p667 VALUES LESS THAN (5344), +PARTITION p668 VALUES LESS THAN (5352), +PARTITION p669 VALUES LESS THAN (5360), +PARTITION p670 VALUES LESS THAN (5368), +PARTITION p671 VALUES LESS THAN (5376), +PARTITION p672 VALUES LESS THAN (5384), +PARTITION p673 VALUES LESS THAN (5392), +PARTITION p674 VALUES LESS THAN (5400), +PARTITION p675 VALUES LESS THAN (5408), +PARTITION p676 VALUES LESS THAN (5416), +PARTITION p677 VALUES LESS THAN (5424), +PARTITION p678 VALUES LESS THAN (5432), +PARTITION p679 VALUES LESS THAN (5440), +PARTITION p680 VALUES LESS THAN (5448), +PARTITION p681 VALUES LESS THAN (5456), +PARTITION p682 VALUES LESS THAN (5464), +PARTITION p683 VALUES LESS THAN (5472), +PARTITION p684 VALUES LESS THAN (5480), +PARTITION p685 VALUES LESS THAN (5488), +PARTITION p686 VALUES LESS THAN (5496), +PARTITION p687 VALUES LESS THAN (5504), +PARTITION p688 VALUES LESS THAN (5512), +PARTITION p689 VALUES LESS THAN (5520), +PARTITION p690 VALUES LESS THAN (5528), +PARTITION p691 VALUES LESS THAN (5536), +PARTITION p692 VALUES LESS THAN (5544), +PARTITION p693 VALUES LESS THAN (5552), +PARTITION p694 VALUES LESS THAN (5560), +PARTITION p695 VALUES LESS THAN (5568), +PARTITION p696 VALUES LESS THAN (5576), +PARTITION p697 VALUES LESS THAN (5584), +PARTITION p698 VALUES LESS THAN (5592), +PARTITION p699 VALUES LESS THAN (5600), +PARTITION p700 VALUES LESS THAN (5608), +PARTITION p701 VALUES LESS THAN (5616), +PARTITION p702 VALUES LESS THAN (5624), +PARTITION p703 VALUES LESS THAN (5632), +PARTITION p704 VALUES LESS THAN (5640), +PARTITION p705 VALUES LESS THAN (5648), +PARTITION p706 VALUES LESS THAN (5656), +PARTITION p707 VALUES LESS THAN (5664), +PARTITION p708 VALUES LESS THAN (5672), +PARTITION p709 VALUES LESS THAN (5680), +PARTITION p710 VALUES LESS THAN (5688), +PARTITION p711 VALUES LESS THAN (5696), +PARTITION p712 VALUES LESS THAN (5704), +PARTITION p713 VALUES LESS THAN (5712), +PARTITION p714 VALUES LESS THAN (5720), +PARTITION p715 VALUES LESS THAN (5728), +PARTITION p716 VALUES LESS THAN (5736), +PARTITION p717 VALUES LESS THAN (5744), +PARTITION p718 VALUES LESS THAN (5752), +PARTITION p719 VALUES LESS THAN (5760), +PARTITION p720 VALUES LESS THAN (5768), +PARTITION p721 VALUES LESS THAN (5776), +PARTITION p722 VALUES LESS THAN (5784), +PARTITION p723 VALUES LESS THAN (5792), +PARTITION p724 VALUES LESS THAN (5800), +PARTITION p725 VALUES LESS THAN (5808), +PARTITION p726 VALUES LESS THAN (5816), +PARTITION p727 VALUES LESS THAN (5824), +PARTITION p728 VALUES LESS THAN (5832), +PARTITION p729 VALUES LESS THAN (5840), +PARTITION p730 VALUES LESS THAN (5848), +PARTITION p731 VALUES LESS THAN (5856), +PARTITION p732 VALUES LESS THAN (5864), +PARTITION p733 VALUES LESS THAN (5872), +PARTITION p734 VALUES LESS THAN (5880), +PARTITION p735 VALUES LESS THAN (5888), +PARTITION p736 VALUES LESS THAN (5896), +PARTITION p737 VALUES LESS THAN (5904), +PARTITION p738 VALUES LESS THAN (5912), +PARTITION p739 VALUES LESS THAN (5920), +PARTITION p740 VALUES LESS THAN (5928), +PARTITION p741 VALUES LESS THAN (5936), +PARTITION p742 VALUES LESS THAN (5944), +PARTITION p743 VALUES LESS THAN (5952), +PARTITION p744 VALUES LESS THAN (5960), +PARTITION p745 VALUES LESS THAN (5968), +PARTITION p746 VALUES LESS THAN (5976), +PARTITION p747 VALUES LESS THAN (5984), +PARTITION p748 VALUES LESS THAN (5992), +PARTITION p749 VALUES LESS THAN (6000), +PARTITION p750 VALUES LESS THAN (6008), +PARTITION p751 VALUES LESS THAN (6016), +PARTITION p752 VALUES LESS THAN (6024), +PARTITION p753 VALUES LESS THAN (6032), +PARTITION p754 VALUES LESS THAN (6040), +PARTITION p755 VALUES LESS THAN (6048), +PARTITION p756 VALUES LESS THAN (6056), +PARTITION p757 VALUES LESS THAN (6064), +PARTITION p758 VALUES LESS THAN (6072), +PARTITION p759 VALUES LESS THAN (6080), +PARTITION p760 VALUES LESS THAN (6088), +PARTITION p761 VALUES LESS THAN (6096), +PARTITION p762 VALUES LESS THAN (6104), +PARTITION p763 VALUES LESS THAN (6112), +PARTITION p764 VALUES LESS THAN (6120), +PARTITION p765 VALUES LESS THAN (6128), +PARTITION p766 VALUES LESS THAN (6136), +PARTITION p767 VALUES LESS THAN (6144), +PARTITION p768 VALUES LESS THAN (6152), +PARTITION p769 VALUES LESS THAN (6160), +PARTITION p770 VALUES LESS THAN (6168), +PARTITION p771 VALUES LESS THAN (6176), +PARTITION p772 VALUES LESS THAN (6184), +PARTITION p773 VALUES LESS THAN (6192), +PARTITION p774 VALUES LESS THAN (6200), +PARTITION p775 VALUES LESS THAN (6208), +PARTITION p776 VALUES LESS THAN (6216), +PARTITION p777 VALUES LESS THAN (6224), +PARTITION p778 VALUES LESS THAN (6232), +PARTITION p779 VALUES LESS THAN (6240), +PARTITION p780 VALUES LESS THAN (6248), +PARTITION p781 VALUES LESS THAN (6256), +PARTITION p782 VALUES LESS THAN (6264), +PARTITION p783 VALUES LESS THAN (6272), +PARTITION p784 VALUES LESS THAN (6280), +PARTITION p785 VALUES LESS THAN (6288), +PARTITION p786 VALUES LESS THAN (6296), +PARTITION p787 VALUES LESS THAN (6304), +PARTITION p788 VALUES LESS THAN (6312), +PARTITION p789 VALUES LESS THAN (6320), +PARTITION p790 VALUES LESS THAN (6328), +PARTITION p791 VALUES LESS THAN (6336), +PARTITION p792 VALUES LESS THAN (6344), +PARTITION p793 VALUES LESS THAN (6352), +PARTITION p794 VALUES LESS THAN (6360), +PARTITION p795 VALUES LESS THAN (6368), +PARTITION p796 VALUES LESS THAN (6376), +PARTITION p797 VALUES LESS THAN (6384), +PARTITION p798 VALUES LESS THAN (6392), +PARTITION p799 VALUES LESS THAN (6400), +PARTITION p800 VALUES LESS THAN (6408), +PARTITION p801 VALUES LESS THAN (6416), +PARTITION p802 VALUES LESS THAN (6424), +PARTITION p803 VALUES LESS THAN (6432), +PARTITION p804 VALUES LESS THAN (6440), +PARTITION p805 VALUES LESS THAN (6448), +PARTITION p806 VALUES LESS THAN (6456), +PARTITION p807 VALUES LESS THAN (6464), +PARTITION p808 VALUES LESS THAN (6472), +PARTITION p809 VALUES LESS THAN (6480), +PARTITION p810 VALUES LESS THAN (6488), +PARTITION p811 VALUES LESS THAN (6496), +PARTITION p812 VALUES LESS THAN (6504), +PARTITION p813 VALUES LESS THAN (6512), +PARTITION p814 VALUES LESS THAN (6520), +PARTITION p815 VALUES LESS THAN (6528), +PARTITION p816 VALUES LESS THAN (6536), +PARTITION p817 VALUES LESS THAN (6544), +PARTITION p818 VALUES LESS THAN (6552), +PARTITION p819 VALUES LESS THAN (6560), +PARTITION p820 VALUES LESS THAN (6568), +PARTITION p821 VALUES LESS THAN (6576), +PARTITION p822 VALUES LESS THAN (6584), +PARTITION p823 VALUES LESS THAN (6592), +PARTITION p824 VALUES LESS THAN (6600), +PARTITION p825 VALUES LESS THAN (6608), +PARTITION p826 VALUES LESS THAN (6616), +PARTITION p827 VALUES LESS THAN (6624), +PARTITION p828 VALUES LESS THAN (6632), +PARTITION p829 VALUES LESS THAN (6640), +PARTITION p830 VALUES LESS THAN (6648), +PARTITION p831 VALUES LESS THAN (6656), +PARTITION p832 VALUES LESS THAN (6664), +PARTITION p833 VALUES LESS THAN (6672), +PARTITION p834 VALUES LESS THAN (6680), +PARTITION p835 VALUES LESS THAN (6688), +PARTITION p836 VALUES LESS THAN (6696), +PARTITION p837 VALUES LESS THAN (6704), +PARTITION p838 VALUES LESS THAN (6712), +PARTITION p839 VALUES LESS THAN (6720), +PARTITION p840 VALUES LESS THAN (6728), +PARTITION p841 VALUES LESS THAN (6736), +PARTITION p842 VALUES LESS THAN (6744), +PARTITION p843 VALUES LESS THAN (6752), +PARTITION p844 VALUES LESS THAN (6760), +PARTITION p845 VALUES LESS THAN (6768), +PARTITION p846 VALUES LESS THAN (6776), +PARTITION p847 VALUES LESS THAN (6784), +PARTITION p848 VALUES LESS THAN (6792), +PARTITION p849 VALUES LESS THAN (6800), +PARTITION p850 VALUES LESS THAN (6808), +PARTITION p851 VALUES LESS THAN (6816), +PARTITION p852 VALUES LESS THAN (6824), +PARTITION p853 VALUES LESS THAN (6832), +PARTITION p854 VALUES LESS THAN (6840), +PARTITION p855 VALUES LESS THAN (6848), +PARTITION p856 VALUES LESS THAN (6856), +PARTITION p857 VALUES LESS THAN (6864), +PARTITION p858 VALUES LESS THAN (6872), +PARTITION p859 VALUES LESS THAN (6880), +PARTITION p860 VALUES LESS THAN (6888), +PARTITION p861 VALUES LESS THAN (6896), +PARTITION p862 VALUES LESS THAN (6904), +PARTITION p863 VALUES LESS THAN (6912), +PARTITION p864 VALUES LESS THAN (6920), +PARTITION p865 VALUES LESS THAN (6928), +PARTITION p866 VALUES LESS THAN (6936), +PARTITION p867 VALUES LESS THAN (6944), +PARTITION p868 VALUES LESS THAN (6952), +PARTITION p869 VALUES LESS THAN (6960), +PARTITION p870 VALUES LESS THAN (6968), +PARTITION p871 VALUES LESS THAN (6976), +PARTITION p872 VALUES LESS THAN (6984), +PARTITION p873 VALUES LESS THAN (6992), +PARTITION p874 VALUES LESS THAN (7000), +PARTITION p875 VALUES LESS THAN (7008), +PARTITION p876 VALUES LESS THAN (7016), +PARTITION p877 VALUES LESS THAN (7024), +PARTITION p878 VALUES LESS THAN (7032), +PARTITION p879 VALUES LESS THAN (7040), +PARTITION p880 VALUES LESS THAN (7048), +PARTITION p881 VALUES LESS THAN (7056), +PARTITION p882 VALUES LESS THAN (7064), +PARTITION p883 VALUES LESS THAN (7072), +PARTITION p884 VALUES LESS THAN (7080), +PARTITION p885 VALUES LESS THAN (7088), +PARTITION p886 VALUES LESS THAN (7096), +PARTITION p887 VALUES LESS THAN (7104), +PARTITION p888 VALUES LESS THAN (7112), +PARTITION p889 VALUES LESS THAN (7120), +PARTITION p890 VALUES LESS THAN (7128), +PARTITION p891 VALUES LESS THAN (7136), +PARTITION p892 VALUES LESS THAN (7144), +PARTITION p893 VALUES LESS THAN (7152), +PARTITION p894 VALUES LESS THAN (7160), +PARTITION p895 VALUES LESS THAN (7168), +PARTITION p896 VALUES LESS THAN (7176), +PARTITION p897 VALUES LESS THAN (7184), +PARTITION p898 VALUES LESS THAN (7192), +PARTITION p899 VALUES LESS THAN (7200), +PARTITION p900 VALUES LESS THAN (7208), +PARTITION p901 VALUES LESS THAN (7216), +PARTITION p902 VALUES LESS THAN (7224), +PARTITION p903 VALUES LESS THAN (7232), +PARTITION p904 VALUES LESS THAN (7240), +PARTITION p905 VALUES LESS THAN (7248), +PARTITION p906 VALUES LESS THAN (7256), +PARTITION p907 VALUES LESS THAN (7264), +PARTITION p908 VALUES LESS THAN (7272), +PARTITION p909 VALUES LESS THAN (7280), +PARTITION p910 VALUES LESS THAN (7288), +PARTITION p911 VALUES LESS THAN (7296), +PARTITION p912 VALUES LESS THAN (7304), +PARTITION p913 VALUES LESS THAN (7312), +PARTITION p914 VALUES LESS THAN (7320), +PARTITION p915 VALUES LESS THAN (7328), +PARTITION p916 VALUES LESS THAN (7336), +PARTITION p917 VALUES LESS THAN (7344), +PARTITION p918 VALUES LESS THAN (7352), +PARTITION p919 VALUES LESS THAN (7360), +PARTITION p920 VALUES LESS THAN (7368), +PARTITION p921 VALUES LESS THAN (7376), +PARTITION p922 VALUES LESS THAN (7384), +PARTITION p923 VALUES LESS THAN (7392), +PARTITION p924 VALUES LESS THAN (7400), +PARTITION p925 VALUES LESS THAN (7408), +PARTITION p926 VALUES LESS THAN (7416), +PARTITION p927 VALUES LESS THAN (7424), +PARTITION p928 VALUES LESS THAN (7432), +PARTITION p929 VALUES LESS THAN (7440), +PARTITION p930 VALUES LESS THAN (7448), +PARTITION p931 VALUES LESS THAN (7456), +PARTITION p932 VALUES LESS THAN (7464), +PARTITION p933 VALUES LESS THAN (7472), +PARTITION p934 VALUES LESS THAN (7480), +PARTITION p935 VALUES LESS THAN (7488), +PARTITION p936 VALUES LESS THAN (7496), +PARTITION p937 VALUES LESS THAN (7504), +PARTITION p938 VALUES LESS THAN (7512), +PARTITION p939 VALUES LESS THAN (7520), +PARTITION p940 VALUES LESS THAN (7528), +PARTITION p941 VALUES LESS THAN (7536), +PARTITION p942 VALUES LESS THAN (7544), +PARTITION p943 VALUES LESS THAN (7552), +PARTITION p944 VALUES LESS THAN (7560), +PARTITION p945 VALUES LESS THAN (7568), +PARTITION p946 VALUES LESS THAN (7576), +PARTITION p947 VALUES LESS THAN (7584), +PARTITION p948 VALUES LESS THAN (7592), +PARTITION p949 VALUES LESS THAN (7600), +PARTITION p950 VALUES LESS THAN (7608), +PARTITION p951 VALUES LESS THAN (7616), +PARTITION p952 VALUES LESS THAN (7624), +PARTITION p953 VALUES LESS THAN (7632), +PARTITION p954 VALUES LESS THAN (7640), +PARTITION p955 VALUES LESS THAN (7648), +PARTITION p956 VALUES LESS THAN (7656), +PARTITION p957 VALUES LESS THAN (7664), +PARTITION p958 VALUES LESS THAN (7672), +PARTITION p959 VALUES LESS THAN (7680), +PARTITION p960 VALUES LESS THAN (7688), +PARTITION p961 VALUES LESS THAN (7696), +PARTITION p962 VALUES LESS THAN (7704), +PARTITION p963 VALUES LESS THAN (7712), +PARTITION p964 VALUES LESS THAN (7720), +PARTITION p965 VALUES LESS THAN (7728), +PARTITION p966 VALUES LESS THAN (7736), +PARTITION p967 VALUES LESS THAN (7744), +PARTITION p968 VALUES LESS THAN (7752), +PARTITION p969 VALUES LESS THAN (7760), +PARTITION p970 VALUES LESS THAN (7768), +PARTITION p971 VALUES LESS THAN (7776), +PARTITION p972 VALUES LESS THAN (7784), +PARTITION p973 VALUES LESS THAN (7792), +PARTITION p974 VALUES LESS THAN (7800), +PARTITION p975 VALUES LESS THAN (7808), +PARTITION p976 VALUES LESS THAN (7816), +PARTITION p977 VALUES LESS THAN (7824), +PARTITION p978 VALUES LESS THAN (7832), +PARTITION p979 VALUES LESS THAN (7840), +PARTITION p980 VALUES LESS THAN (7848), +PARTITION p981 VALUES LESS THAN (7856), +PARTITION p982 VALUES LESS THAN (7864), +PARTITION p983 VALUES LESS THAN (7872), +PARTITION p984 VALUES LESS THAN (7880), +PARTITION p985 VALUES LESS THAN (7888), +PARTITION p986 VALUES LESS THAN (7896), +PARTITION p987 VALUES LESS THAN (7904), +PARTITION p988 VALUES LESS THAN (7912), +PARTITION p989 VALUES LESS THAN (7920), +PARTITION p990 VALUES LESS THAN (7928), +PARTITION p991 VALUES LESS THAN (7936), +PARTITION p992 VALUES LESS THAN (7944), +PARTITION p993 VALUES LESS THAN (7952), +PARTITION p994 VALUES LESS THAN (7960), +PARTITION p995 VALUES LESS THAN (7968), +PARTITION p996 VALUES LESS THAN (7976), +PARTITION p997 VALUES LESS THAN (7984), +PARTITION p998 VALUES LESS THAN (7992), +PARTITION p999 VALUES LESS THAN (8000), +PARTITION p1000 VALUES LESS THAN (8008), +PARTITION p1001 VALUES LESS THAN (8016), +PARTITION p1002 VALUES LESS THAN (8024), +PARTITION p1003 VALUES LESS THAN (8032), +PARTITION p1004 VALUES LESS THAN (8040), +PARTITION p1005 VALUES LESS THAN (8048), +PARTITION p1006 VALUES LESS THAN (8056), +PARTITION p1007 VALUES LESS THAN (8064), +PARTITION p1008 VALUES LESS THAN (8072), +PARTITION p1009 VALUES LESS THAN (8080), +PARTITION p1010 VALUES LESS THAN (8088), +PARTITION p1011 VALUES LESS THAN (8096), +PARTITION p1012 VALUES LESS THAN (8104), +PARTITION p1013 VALUES LESS THAN (8112), +PARTITION p1014 VALUES LESS THAN (8120), +PARTITION p1015 VALUES LESS THAN (8128), +PARTITION p1016 VALUES LESS THAN (8136), +PARTITION p1017 VALUES LESS THAN (8144), +PARTITION p1018 VALUES LESS THAN (8152), +PARTITION p1019 VALUES LESS THAN (8160), +PARTITION p1020 VALUES LESS THAN (8168), +PARTITION p1021 VALUES LESS THAN (8176), +PARTITION p1022 VALUES LESS THAN (8184), +PARTITION p1023 VALUES LESS THAN (8192), +PARTITION p1024 VALUES LESS THAN (8200), +PARTITION p1025 VALUES LESS THAN (8208), +PARTITION p1026 VALUES LESS THAN (8216), +PARTITION p1027 VALUES LESS THAN (8224), +PARTITION p1028 VALUES LESS THAN (8232), +PARTITION p1029 VALUES LESS THAN (8240), +PARTITION p1030 VALUES LESS THAN (8248), +PARTITION p1031 VALUES LESS THAN (8256), +PARTITION p1032 VALUES LESS THAN (8264), +PARTITION p1033 VALUES LESS THAN (8272), +PARTITION p1034 VALUES LESS THAN (8280), +PARTITION p1035 VALUES LESS THAN (8288), +PARTITION p1036 VALUES LESS THAN (8296), +PARTITION p1037 VALUES LESS THAN (8304), +PARTITION p1038 VALUES LESS THAN (8312), +PARTITION p1039 VALUES LESS THAN (8320), +PARTITION p1040 VALUES LESS THAN (8328), +PARTITION p1041 VALUES LESS THAN (8336), +PARTITION p1042 VALUES LESS THAN (8344), +PARTITION p1043 VALUES LESS THAN (8352), +PARTITION p1044 VALUES LESS THAN (8360), +PARTITION p1045 VALUES LESS THAN (8368), +PARTITION p1046 VALUES LESS THAN (8376), +PARTITION p1047 VALUES LESS THAN (8384), +PARTITION p1048 VALUES LESS THAN (8392), +PARTITION p1049 VALUES LESS THAN (8400), +PARTITION p1050 VALUES LESS THAN (8408), +PARTITION p1051 VALUES LESS THAN (8416), +PARTITION p1052 VALUES LESS THAN (8424), +PARTITION p1053 VALUES LESS THAN (8432), +PARTITION p1054 VALUES LESS THAN (8440), +PARTITION p1055 VALUES LESS THAN (8448), +PARTITION p1056 VALUES LESS THAN (8456), +PARTITION p1057 VALUES LESS THAN (8464), +PARTITION p1058 VALUES LESS THAN (8472), +PARTITION p1059 VALUES LESS THAN (8480), +PARTITION p1060 VALUES LESS THAN (8488), +PARTITION p1061 VALUES LESS THAN (8496), +PARTITION p1062 VALUES LESS THAN (8504), +PARTITION p1063 VALUES LESS THAN (8512), +PARTITION p1064 VALUES LESS THAN (8520), +PARTITION p1065 VALUES LESS THAN (8528), +PARTITION p1066 VALUES LESS THAN (8536), +PARTITION p1067 VALUES LESS THAN (8544), +PARTITION p1068 VALUES LESS THAN (8552), +PARTITION p1069 VALUES LESS THAN (8560), +PARTITION p1070 VALUES LESS THAN (8568), +PARTITION p1071 VALUES LESS THAN (8576), +PARTITION p1072 VALUES LESS THAN (8584), +PARTITION p1073 VALUES LESS THAN (8592), +PARTITION p1074 VALUES LESS THAN (8600), +PARTITION p1075 VALUES LESS THAN (8608), +PARTITION p1076 VALUES LESS THAN (8616), +PARTITION p1077 VALUES LESS THAN (8624), +PARTITION p1078 VALUES LESS THAN (8632), +PARTITION p1079 VALUES LESS THAN (8640), +PARTITION p1080 VALUES LESS THAN (8648), +PARTITION p1081 VALUES LESS THAN (8656), +PARTITION p1082 VALUES LESS THAN (8664), +PARTITION p1083 VALUES LESS THAN (8672), +PARTITION p1084 VALUES LESS THAN (8680), +PARTITION p1085 VALUES LESS THAN (8688), +PARTITION p1086 VALUES LESS THAN (8696), +PARTITION p1087 VALUES LESS THAN (8704), +PARTITION p1088 VALUES LESS THAN (8712), +PARTITION p1089 VALUES LESS THAN (8720), +PARTITION p1090 VALUES LESS THAN (8728), +PARTITION p1091 VALUES LESS THAN (8736), +PARTITION p1092 VALUES LESS THAN (8744), +PARTITION p1093 VALUES LESS THAN (8752), +PARTITION p1094 VALUES LESS THAN (8760), +PARTITION p1095 VALUES LESS THAN (8768), +PARTITION p1096 VALUES LESS THAN (8776), +PARTITION p1097 VALUES LESS THAN (8784), +PARTITION p1098 VALUES LESS THAN (8792), +PARTITION p1099 VALUES LESS THAN (8800), +PARTITION p1100 VALUES LESS THAN (8808), +PARTITION p1101 VALUES LESS THAN (8816), +PARTITION p1102 VALUES LESS THAN (8824), +PARTITION p1103 VALUES LESS THAN (8832), +PARTITION p1104 VALUES LESS THAN (8840), +PARTITION p1105 VALUES LESS THAN (8848), +PARTITION p1106 VALUES LESS THAN (8856), +PARTITION p1107 VALUES LESS THAN (8864), +PARTITION p1108 VALUES LESS THAN (8872), +PARTITION p1109 VALUES LESS THAN (8880), +PARTITION p1110 VALUES LESS THAN (8888), +PARTITION p1111 VALUES LESS THAN (8896), +PARTITION p1112 VALUES LESS THAN (8904), +PARTITION p1113 VALUES LESS THAN (8912), +PARTITION p1114 VALUES LESS THAN (8920), +PARTITION p1115 VALUES LESS THAN (8928), +PARTITION p1116 VALUES LESS THAN (8936), +PARTITION p1117 VALUES LESS THAN (8944), +PARTITION p1118 VALUES LESS THAN (8952), +PARTITION p1119 VALUES LESS THAN (8960), +PARTITION p1120 VALUES LESS THAN (8968), +PARTITION p1121 VALUES LESS THAN (8976), +PARTITION p1122 VALUES LESS THAN (8984), +PARTITION p1123 VALUES LESS THAN (8992), +PARTITION p1124 VALUES LESS THAN (9000), +PARTITION p1125 VALUES LESS THAN (9008), +PARTITION p1126 VALUES LESS THAN (9016), +PARTITION p1127 VALUES LESS THAN (9024), +PARTITION p1128 VALUES LESS THAN (9032), +PARTITION p1129 VALUES LESS THAN (9040), +PARTITION p1130 VALUES LESS THAN (9048), +PARTITION p1131 VALUES LESS THAN (9056), +PARTITION p1132 VALUES LESS THAN (9064), +PARTITION p1133 VALUES LESS THAN (9072), +PARTITION p1134 VALUES LESS THAN (9080), +PARTITION p1135 VALUES LESS THAN (9088), +PARTITION p1136 VALUES LESS THAN (9096), +PARTITION p1137 VALUES LESS THAN (9104), +PARTITION p1138 VALUES LESS THAN (9112), +PARTITION p1139 VALUES LESS THAN (9120), +PARTITION p1140 VALUES LESS THAN (9128), +PARTITION p1141 VALUES LESS THAN (9136), +PARTITION p1142 VALUES LESS THAN (9144), +PARTITION p1143 VALUES LESS THAN (9152), +PARTITION p1144 VALUES LESS THAN (9160), +PARTITION p1145 VALUES LESS THAN (9168), +PARTITION p1146 VALUES LESS THAN (9176), +PARTITION p1147 VALUES LESS THAN (9184), +PARTITION p1148 VALUES LESS THAN (9192), +PARTITION p1149 VALUES LESS THAN (9200), +PARTITION p1150 VALUES LESS THAN (9208), +PARTITION p1151 VALUES LESS THAN (9216), +PARTITION p1152 VALUES LESS THAN (9224), +PARTITION p1153 VALUES LESS THAN (9232), +PARTITION p1154 VALUES LESS THAN (9240), +PARTITION p1155 VALUES LESS THAN (9248), +PARTITION p1156 VALUES LESS THAN (9256), +PARTITION p1157 VALUES LESS THAN (9264), +PARTITION p1158 VALUES LESS THAN (9272), +PARTITION p1159 VALUES LESS THAN (9280), +PARTITION p1160 VALUES LESS THAN (9288), +PARTITION p1161 VALUES LESS THAN (9296), +PARTITION p1162 VALUES LESS THAN (9304), +PARTITION p1163 VALUES LESS THAN (9312), +PARTITION p1164 VALUES LESS THAN (9320), +PARTITION p1165 VALUES LESS THAN (9328), +PARTITION p1166 VALUES LESS THAN (9336), +PARTITION p1167 VALUES LESS THAN (9344), +PARTITION p1168 VALUES LESS THAN (9352), +PARTITION p1169 VALUES LESS THAN (9360), +PARTITION p1170 VALUES LESS THAN (9368), +PARTITION p1171 VALUES LESS THAN (9376), +PARTITION p1172 VALUES LESS THAN (9384), +PARTITION p1173 VALUES LESS THAN (9392), +PARTITION p1174 VALUES LESS THAN (9400), +PARTITION p1175 VALUES LESS THAN (9408), +PARTITION p1176 VALUES LESS THAN (9416), +PARTITION p1177 VALUES LESS THAN (9424), +PARTITION p1178 VALUES LESS THAN (9432), +PARTITION p1179 VALUES LESS THAN (9440), +PARTITION p1180 VALUES LESS THAN (9448), +PARTITION p1181 VALUES LESS THAN (9456), +PARTITION p1182 VALUES LESS THAN (9464), +PARTITION p1183 VALUES LESS THAN (9472), +PARTITION p1184 VALUES LESS THAN (9480), +PARTITION p1185 VALUES LESS THAN (9488), +PARTITION p1186 VALUES LESS THAN (9496), +PARTITION p1187 VALUES LESS THAN (9504), +PARTITION p1188 VALUES LESS THAN (9512), +PARTITION p1189 VALUES LESS THAN (9520), +PARTITION p1190 VALUES LESS THAN (9528), +PARTITION p1191 VALUES LESS THAN (9536), +PARTITION p1192 VALUES LESS THAN (9544), +PARTITION p1193 VALUES LESS THAN (9552), +PARTITION p1194 VALUES LESS THAN (9560), +PARTITION p1195 VALUES LESS THAN (9568), +PARTITION p1196 VALUES LESS THAN (9576), +PARTITION p1197 VALUES LESS THAN (9584), +PARTITION p1198 VALUES LESS THAN (9592), +PARTITION p1199 VALUES LESS THAN (9600), +PARTITION p1200 VALUES LESS THAN (9608), +PARTITION p1201 VALUES LESS THAN (9616), +PARTITION p1202 VALUES LESS THAN (9624), +PARTITION p1203 VALUES LESS THAN (9632), +PARTITION p1204 VALUES LESS THAN (9640), +PARTITION p1205 VALUES LESS THAN (9648), +PARTITION p1206 VALUES LESS THAN (9656), +PARTITION p1207 VALUES LESS THAN (9664), +PARTITION p1208 VALUES LESS THAN (9672), +PARTITION p1209 VALUES LESS THAN (9680), +PARTITION p1210 VALUES LESS THAN (9688), +PARTITION p1211 VALUES LESS THAN (9696), +PARTITION p1212 VALUES LESS THAN (9704), +PARTITION p1213 VALUES LESS THAN (9712), +PARTITION p1214 VALUES LESS THAN (9720), +PARTITION p1215 VALUES LESS THAN (9728), +PARTITION p1216 VALUES LESS THAN (9736), +PARTITION p1217 VALUES LESS THAN (9744), +PARTITION p1218 VALUES LESS THAN (9752), +PARTITION p1219 VALUES LESS THAN (9760), +PARTITION p1220 VALUES LESS THAN (9768), +PARTITION p1221 VALUES LESS THAN (9776), +PARTITION p1222 VALUES LESS THAN (9784), +PARTITION p1223 VALUES LESS THAN (9792), +PARTITION p1224 VALUES LESS THAN (9800), +PARTITION p1225 VALUES LESS THAN (9808), +PARTITION p1226 VALUES LESS THAN (9816), +PARTITION p1227 VALUES LESS THAN (9824), +PARTITION p1228 VALUES LESS THAN (9832), +PARTITION p1229 VALUES LESS THAN (9840), +PARTITION p1230 VALUES LESS THAN (9848), +PARTITION p1231 VALUES LESS THAN (9856), +PARTITION p1232 VALUES LESS THAN (9864), +PARTITION p1233 VALUES LESS THAN (9872), +PARTITION p1234 VALUES LESS THAN (9880), +PARTITION p1235 VALUES LESS THAN (9888), +PARTITION p1236 VALUES LESS THAN (9896), +PARTITION p1237 VALUES LESS THAN (9904), +PARTITION p1238 VALUES LESS THAN (9912), +PARTITION p1239 VALUES LESS THAN (9920), +PARTITION p1240 VALUES LESS THAN (9928), +PARTITION p1241 VALUES LESS THAN (9936), +PARTITION p1242 VALUES LESS THAN (9944), +PARTITION p1243 VALUES LESS THAN (9952), +PARTITION p1244 VALUES LESS THAN (9960), +PARTITION p1245 VALUES LESS THAN (9968), +PARTITION p1246 VALUES LESS THAN (9976), +PARTITION p1247 VALUES LESS THAN (9984), +PARTITION p1248 VALUES LESS THAN (9992), +PARTITION p1249 VALUES LESS THAN (10000), +PARTITION p1250 VALUES LESS THAN (10008), +PARTITION p1251 VALUES LESS THAN (10016), +PARTITION p1252 VALUES LESS THAN (10024), +PARTITION p1253 VALUES LESS THAN (10032), +PARTITION p1254 VALUES LESS THAN (10040), +PARTITION p1255 VALUES LESS THAN (10048), +PARTITION p1256 VALUES LESS THAN (10056), +PARTITION p1257 VALUES LESS THAN (10064), +PARTITION p1258 VALUES LESS THAN (10072), +PARTITION p1259 VALUES LESS THAN (10080), +PARTITION p1260 VALUES LESS THAN (10088), +PARTITION p1261 VALUES LESS THAN (10096), +PARTITION p1262 VALUES LESS THAN (10104), +PARTITION p1263 VALUES LESS THAN (10112), +PARTITION p1264 VALUES LESS THAN (10120), +PARTITION p1265 VALUES LESS THAN (10128), +PARTITION p1266 VALUES LESS THAN (10136), +PARTITION p1267 VALUES LESS THAN (10144), +PARTITION p1268 VALUES LESS THAN (10152), +PARTITION p1269 VALUES LESS THAN (10160), +PARTITION p1270 VALUES LESS THAN (10168), +PARTITION p1271 VALUES LESS THAN (10176), +PARTITION p1272 VALUES LESS THAN (10184), +PARTITION p1273 VALUES LESS THAN (10192), +PARTITION p1274 VALUES LESS THAN (10200), +PARTITION p1275 VALUES LESS THAN (10208), +PARTITION p1276 VALUES LESS THAN (10216), +PARTITION p1277 VALUES LESS THAN (10224), +PARTITION p1278 VALUES LESS THAN (10232), +PARTITION p1279 VALUES LESS THAN (10240), +PARTITION p1280 VALUES LESS THAN (10248), +PARTITION p1281 VALUES LESS THAN (10256), +PARTITION p1282 VALUES LESS THAN (10264), +PARTITION p1283 VALUES LESS THAN (10272), +PARTITION p1284 VALUES LESS THAN (10280), +PARTITION p1285 VALUES LESS THAN (10288), +PARTITION p1286 VALUES LESS THAN (10296), +PARTITION p1287 VALUES LESS THAN (10304), +PARTITION p1288 VALUES LESS THAN (10312), +PARTITION p1289 VALUES LESS THAN (10320), +PARTITION p1290 VALUES LESS THAN (10328), +PARTITION p1291 VALUES LESS THAN (10336), +PARTITION p1292 VALUES LESS THAN (10344), +PARTITION p1293 VALUES LESS THAN (10352), +PARTITION p1294 VALUES LESS THAN (10360), +PARTITION p1295 VALUES LESS THAN (10368), +PARTITION p1296 VALUES LESS THAN (10376), +PARTITION p1297 VALUES LESS THAN (10384), +PARTITION p1298 VALUES LESS THAN (10392), +PARTITION p1299 VALUES LESS THAN (10400), +PARTITION p1300 VALUES LESS THAN (10408), +PARTITION p1301 VALUES LESS THAN (10416), +PARTITION p1302 VALUES LESS THAN (10424), +PARTITION p1303 VALUES LESS THAN (10432), +PARTITION p1304 VALUES LESS THAN (10440), +PARTITION p1305 VALUES LESS THAN (10448), +PARTITION p1306 VALUES LESS THAN (10456), +PARTITION p1307 VALUES LESS THAN (10464), +PARTITION p1308 VALUES LESS THAN (10472), +PARTITION p1309 VALUES LESS THAN (10480), +PARTITION p1310 VALUES LESS THAN (10488), +PARTITION p1311 VALUES LESS THAN (10496), +PARTITION p1312 VALUES LESS THAN (10504), +PARTITION p1313 VALUES LESS THAN (10512), +PARTITION p1314 VALUES LESS THAN (10520), +PARTITION p1315 VALUES LESS THAN (10528), +PARTITION p1316 VALUES LESS THAN (10536), +PARTITION p1317 VALUES LESS THAN (10544), +PARTITION p1318 VALUES LESS THAN (10552), +PARTITION p1319 VALUES LESS THAN (10560), +PARTITION p1320 VALUES LESS THAN (10568), +PARTITION p1321 VALUES LESS THAN (10576), +PARTITION p1322 VALUES LESS THAN (10584), +PARTITION p1323 VALUES LESS THAN (10592), +PARTITION p1324 VALUES LESS THAN (10600), +PARTITION p1325 VALUES LESS THAN (10608), +PARTITION p1326 VALUES LESS THAN (10616), +PARTITION p1327 VALUES LESS THAN (10624), +PARTITION p1328 VALUES LESS THAN (10632), +PARTITION p1329 VALUES LESS THAN (10640), +PARTITION p1330 VALUES LESS THAN (10648), +PARTITION p1331 VALUES LESS THAN (10656), +PARTITION p1332 VALUES LESS THAN (10664), +PARTITION p1333 VALUES LESS THAN (10672), +PARTITION p1334 VALUES LESS THAN (10680), +PARTITION p1335 VALUES LESS THAN (10688), +PARTITION p1336 VALUES LESS THAN (10696), +PARTITION p1337 VALUES LESS THAN (10704), +PARTITION p1338 VALUES LESS THAN (10712), +PARTITION p1339 VALUES LESS THAN (10720), +PARTITION p1340 VALUES LESS THAN (10728), +PARTITION p1341 VALUES LESS THAN (10736), +PARTITION p1342 VALUES LESS THAN (10744), +PARTITION p1343 VALUES LESS THAN (10752), +PARTITION p1344 VALUES LESS THAN (10760), +PARTITION p1345 VALUES LESS THAN (10768), +PARTITION p1346 VALUES LESS THAN (10776), +PARTITION p1347 VALUES LESS THAN (10784), +PARTITION p1348 VALUES LESS THAN (10792), +PARTITION p1349 VALUES LESS THAN (10800), +PARTITION p1350 VALUES LESS THAN (10808), +PARTITION p1351 VALUES LESS THAN (10816), +PARTITION p1352 VALUES LESS THAN (10824), +PARTITION p1353 VALUES LESS THAN (10832), +PARTITION p1354 VALUES LESS THAN (10840), +PARTITION p1355 VALUES LESS THAN (10848), +PARTITION p1356 VALUES LESS THAN (10856), +PARTITION p1357 VALUES LESS THAN (10864), +PARTITION p1358 VALUES LESS THAN (10872), +PARTITION p1359 VALUES LESS THAN (10880), +PARTITION p1360 VALUES LESS THAN (10888), +PARTITION p1361 VALUES LESS THAN (10896), +PARTITION p1362 VALUES LESS THAN (10904), +PARTITION p1363 VALUES LESS THAN (10912), +PARTITION p1364 VALUES LESS THAN (10920), +PARTITION p1365 VALUES LESS THAN (10928), +PARTITION p1366 VALUES LESS THAN (10936), +PARTITION p1367 VALUES LESS THAN (10944), +PARTITION p1368 VALUES LESS THAN (10952), +PARTITION p1369 VALUES LESS THAN (10960), +PARTITION p1370 VALUES LESS THAN (10968), +PARTITION p1371 VALUES LESS THAN (10976), +PARTITION p1372 VALUES LESS THAN (10984), +PARTITION p1373 VALUES LESS THAN (10992), +PARTITION p1374 VALUES LESS THAN (11000), +PARTITION p1375 VALUES LESS THAN (11008), +PARTITION p1376 VALUES LESS THAN (11016), +PARTITION p1377 VALUES LESS THAN (11024), +PARTITION p1378 VALUES LESS THAN (11032), +PARTITION p1379 VALUES LESS THAN (11040), +PARTITION p1380 VALUES LESS THAN (11048), +PARTITION p1381 VALUES LESS THAN (11056), +PARTITION p1382 VALUES LESS THAN (11064), +PARTITION p1383 VALUES LESS THAN (11072), +PARTITION p1384 VALUES LESS THAN (11080), +PARTITION p1385 VALUES LESS THAN (11088), +PARTITION p1386 VALUES LESS THAN (11096), +PARTITION p1387 VALUES LESS THAN (11104), +PARTITION p1388 VALUES LESS THAN (11112), +PARTITION p1389 VALUES LESS THAN (11120), +PARTITION p1390 VALUES LESS THAN (11128), +PARTITION p1391 VALUES LESS THAN (11136), +PARTITION p1392 VALUES LESS THAN (11144), +PARTITION p1393 VALUES LESS THAN (11152), +PARTITION p1394 VALUES LESS THAN (11160), +PARTITION p1395 VALUES LESS THAN (11168), +PARTITION p1396 VALUES LESS THAN (11176), +PARTITION p1397 VALUES LESS THAN (11184), +PARTITION p1398 VALUES LESS THAN (11192), +PARTITION p1399 VALUES LESS THAN (11200), +PARTITION p1400 VALUES LESS THAN (11208), +PARTITION p1401 VALUES LESS THAN (11216), +PARTITION p1402 VALUES LESS THAN (11224), +PARTITION p1403 VALUES LESS THAN (11232), +PARTITION p1404 VALUES LESS THAN (11240), +PARTITION p1405 VALUES LESS THAN (11248), +PARTITION p1406 VALUES LESS THAN (11256), +PARTITION p1407 VALUES LESS THAN (11264), +PARTITION p1408 VALUES LESS THAN (11272), +PARTITION p1409 VALUES LESS THAN (11280), +PARTITION p1410 VALUES LESS THAN (11288), +PARTITION p1411 VALUES LESS THAN (11296), +PARTITION p1412 VALUES LESS THAN (11304), +PARTITION p1413 VALUES LESS THAN (11312), +PARTITION p1414 VALUES LESS THAN (11320), +PARTITION p1415 VALUES LESS THAN (11328), +PARTITION p1416 VALUES LESS THAN (11336), +PARTITION p1417 VALUES LESS THAN (11344), +PARTITION p1418 VALUES LESS THAN (11352), +PARTITION p1419 VALUES LESS THAN (11360), +PARTITION p1420 VALUES LESS THAN (11368), +PARTITION p1421 VALUES LESS THAN (11376), +PARTITION p1422 VALUES LESS THAN (11384), +PARTITION p1423 VALUES LESS THAN (11392), +PARTITION p1424 VALUES LESS THAN (11400), +PARTITION p1425 VALUES LESS THAN (11408), +PARTITION p1426 VALUES LESS THAN (11416), +PARTITION p1427 VALUES LESS THAN (11424), +PARTITION p1428 VALUES LESS THAN (11432), +PARTITION p1429 VALUES LESS THAN (11440), +PARTITION p1430 VALUES LESS THAN (11448), +PARTITION p1431 VALUES LESS THAN (11456), +PARTITION p1432 VALUES LESS THAN (11464), +PARTITION p1433 VALUES LESS THAN (11472), +PARTITION p1434 VALUES LESS THAN (11480), +PARTITION p1435 VALUES LESS THAN (11488), +PARTITION p1436 VALUES LESS THAN (11496), +PARTITION p1437 VALUES LESS THAN (11504), +PARTITION p1438 VALUES LESS THAN (11512), +PARTITION p1439 VALUES LESS THAN (11520), +PARTITION p1440 VALUES LESS THAN (11528), +PARTITION p1441 VALUES LESS THAN (11536), +PARTITION p1442 VALUES LESS THAN (11544), +PARTITION p1443 VALUES LESS THAN (11552), +PARTITION p1444 VALUES LESS THAN (11560), +PARTITION p1445 VALUES LESS THAN (11568), +PARTITION p1446 VALUES LESS THAN (11576), +PARTITION p1447 VALUES LESS THAN (11584), +PARTITION p1448 VALUES LESS THAN (11592), +PARTITION p1449 VALUES LESS THAN (11600), +PARTITION p1450 VALUES LESS THAN (11608), +PARTITION p1451 VALUES LESS THAN (11616), +PARTITION p1452 VALUES LESS THAN (11624), +PARTITION p1453 VALUES LESS THAN (11632), +PARTITION p1454 VALUES LESS THAN (11640), +PARTITION p1455 VALUES LESS THAN (11648), +PARTITION p1456 VALUES LESS THAN (11656), +PARTITION p1457 VALUES LESS THAN (11664), +PARTITION p1458 VALUES LESS THAN (11672), +PARTITION p1459 VALUES LESS THAN (11680), +PARTITION p1460 VALUES LESS THAN (11688), +PARTITION p1461 VALUES LESS THAN (11696), +PARTITION p1462 VALUES LESS THAN (11704), +PARTITION p1463 VALUES LESS THAN (11712), +PARTITION p1464 VALUES LESS THAN (11720), +PARTITION p1465 VALUES LESS THAN (11728), +PARTITION p1466 VALUES LESS THAN (11736), +PARTITION p1467 VALUES LESS THAN (11744), +PARTITION p1468 VALUES LESS THAN (11752), +PARTITION p1469 VALUES LESS THAN (11760), +PARTITION p1470 VALUES LESS THAN (11768), +PARTITION p1471 VALUES LESS THAN (11776), +PARTITION p1472 VALUES LESS THAN (11784), +PARTITION p1473 VALUES LESS THAN (11792), +PARTITION p1474 VALUES LESS THAN (11800), +PARTITION p1475 VALUES LESS THAN (11808), +PARTITION p1476 VALUES LESS THAN (11816), +PARTITION p1477 VALUES LESS THAN (11824), +PARTITION p1478 VALUES LESS THAN (11832), +PARTITION p1479 VALUES LESS THAN (11840), +PARTITION p1480 VALUES LESS THAN (11848), +PARTITION p1481 VALUES LESS THAN (11856), +PARTITION p1482 VALUES LESS THAN (11864), +PARTITION p1483 VALUES LESS THAN (11872), +PARTITION p1484 VALUES LESS THAN (11880), +PARTITION p1485 VALUES LESS THAN (11888), +PARTITION p1486 VALUES LESS THAN (11896), +PARTITION p1487 VALUES LESS THAN (11904), +PARTITION p1488 VALUES LESS THAN (11912), +PARTITION p1489 VALUES LESS THAN (11920), +PARTITION p1490 VALUES LESS THAN (11928), +PARTITION p1491 VALUES LESS THAN (11936), +PARTITION p1492 VALUES LESS THAN (11944), +PARTITION p1493 VALUES LESS THAN (11952), +PARTITION p1494 VALUES LESS THAN (11960), +PARTITION p1495 VALUES LESS THAN (11968), +PARTITION p1496 VALUES LESS THAN (11976), +PARTITION p1497 VALUES LESS THAN (11984), +PARTITION p1498 VALUES LESS THAN (11992), +PARTITION p1499 VALUES LESS THAN (12000), +PARTITION p1500 VALUES LESS THAN (12008), +PARTITION p1501 VALUES LESS THAN (12016), +PARTITION p1502 VALUES LESS THAN (12024), +PARTITION p1503 VALUES LESS THAN (12032), +PARTITION p1504 VALUES LESS THAN (12040), +PARTITION p1505 VALUES LESS THAN (12048), +PARTITION p1506 VALUES LESS THAN (12056), +PARTITION p1507 VALUES LESS THAN (12064), +PARTITION p1508 VALUES LESS THAN (12072), +PARTITION p1509 VALUES LESS THAN (12080), +PARTITION p1510 VALUES LESS THAN (12088), +PARTITION p1511 VALUES LESS THAN (12096), +PARTITION p1512 VALUES LESS THAN (12104), +PARTITION p1513 VALUES LESS THAN (12112), +PARTITION p1514 VALUES LESS THAN (12120), +PARTITION p1515 VALUES LESS THAN (12128), +PARTITION p1516 VALUES LESS THAN (12136), +PARTITION p1517 VALUES LESS THAN (12144), +PARTITION p1518 VALUES LESS THAN (12152), +PARTITION p1519 VALUES LESS THAN (12160), +PARTITION p1520 VALUES LESS THAN (12168), +PARTITION p1521 VALUES LESS THAN (12176), +PARTITION p1522 VALUES LESS THAN (12184), +PARTITION p1523 VALUES LESS THAN (12192), +PARTITION p1524 VALUES LESS THAN (12200), +PARTITION p1525 VALUES LESS THAN (12208), +PARTITION p1526 VALUES LESS THAN (12216), +PARTITION p1527 VALUES LESS THAN (12224), +PARTITION p1528 VALUES LESS THAN (12232), +PARTITION p1529 VALUES LESS THAN (12240), +PARTITION p1530 VALUES LESS THAN (12248), +PARTITION p1531 VALUES LESS THAN (12256), +PARTITION p1532 VALUES LESS THAN (12264), +PARTITION p1533 VALUES LESS THAN (12272), +PARTITION p1534 VALUES LESS THAN (12280), +PARTITION p1535 VALUES LESS THAN (12288), +PARTITION p1536 VALUES LESS THAN (12296), +PARTITION p1537 VALUES LESS THAN (12304), +PARTITION p1538 VALUES LESS THAN (12312), +PARTITION p1539 VALUES LESS THAN (12320), +PARTITION p1540 VALUES LESS THAN (12328), +PARTITION p1541 VALUES LESS THAN (12336), +PARTITION p1542 VALUES LESS THAN (12344), +PARTITION p1543 VALUES LESS THAN (12352), +PARTITION p1544 VALUES LESS THAN (12360), +PARTITION p1545 VALUES LESS THAN (12368), +PARTITION p1546 VALUES LESS THAN (12376), +PARTITION p1547 VALUES LESS THAN (12384), +PARTITION p1548 VALUES LESS THAN (12392), +PARTITION p1549 VALUES LESS THAN (12400), +PARTITION p1550 VALUES LESS THAN (12408), +PARTITION p1551 VALUES LESS THAN (12416), +PARTITION p1552 VALUES LESS THAN (12424), +PARTITION p1553 VALUES LESS THAN (12432), +PARTITION p1554 VALUES LESS THAN (12440), +PARTITION p1555 VALUES LESS THAN (12448), +PARTITION p1556 VALUES LESS THAN (12456), +PARTITION p1557 VALUES LESS THAN (12464), +PARTITION p1558 VALUES LESS THAN (12472), +PARTITION p1559 VALUES LESS THAN (12480), +PARTITION p1560 VALUES LESS THAN (12488), +PARTITION p1561 VALUES LESS THAN (12496), +PARTITION p1562 VALUES LESS THAN (12504), +PARTITION p1563 VALUES LESS THAN (12512), +PARTITION p1564 VALUES LESS THAN (12520), +PARTITION p1565 VALUES LESS THAN (12528), +PARTITION p1566 VALUES LESS THAN (12536), +PARTITION p1567 VALUES LESS THAN (12544), +PARTITION p1568 VALUES LESS THAN (12552), +PARTITION p1569 VALUES LESS THAN (12560), +PARTITION p1570 VALUES LESS THAN (12568), +PARTITION p1571 VALUES LESS THAN (12576), +PARTITION p1572 VALUES LESS THAN (12584), +PARTITION p1573 VALUES LESS THAN (12592), +PARTITION p1574 VALUES LESS THAN (12600), +PARTITION p1575 VALUES LESS THAN (12608), +PARTITION p1576 VALUES LESS THAN (12616), +PARTITION p1577 VALUES LESS THAN (12624), +PARTITION p1578 VALUES LESS THAN (12632), +PARTITION p1579 VALUES LESS THAN (12640), +PARTITION p1580 VALUES LESS THAN (12648), +PARTITION p1581 VALUES LESS THAN (12656), +PARTITION p1582 VALUES LESS THAN (12664), +PARTITION p1583 VALUES LESS THAN (12672), +PARTITION p1584 VALUES LESS THAN (12680), +PARTITION p1585 VALUES LESS THAN (12688), +PARTITION p1586 VALUES LESS THAN (12696), +PARTITION p1587 VALUES LESS THAN (12704), +PARTITION p1588 VALUES LESS THAN (12712), +PARTITION p1589 VALUES LESS THAN (12720), +PARTITION p1590 VALUES LESS THAN (12728), +PARTITION p1591 VALUES LESS THAN (12736), +PARTITION p1592 VALUES LESS THAN (12744), +PARTITION p1593 VALUES LESS THAN (12752), +PARTITION p1594 VALUES LESS THAN (12760), +PARTITION p1595 VALUES LESS THAN (12768), +PARTITION p1596 VALUES LESS THAN (12776), +PARTITION p1597 VALUES LESS THAN (12784), +PARTITION p1598 VALUES LESS THAN (12792), +PARTITION p1599 VALUES LESS THAN (12800), +PARTITION p1600 VALUES LESS THAN (12808), +PARTITION p1601 VALUES LESS THAN (12816), +PARTITION p1602 VALUES LESS THAN (12824), +PARTITION p1603 VALUES LESS THAN (12832), +PARTITION p1604 VALUES LESS THAN (12840), +PARTITION p1605 VALUES LESS THAN (12848), +PARTITION p1606 VALUES LESS THAN (12856), +PARTITION p1607 VALUES LESS THAN (12864), +PARTITION p1608 VALUES LESS THAN (12872), +PARTITION p1609 VALUES LESS THAN (12880), +PARTITION p1610 VALUES LESS THAN (12888), +PARTITION p1611 VALUES LESS THAN (12896), +PARTITION p1612 VALUES LESS THAN (12904), +PARTITION p1613 VALUES LESS THAN (12912), +PARTITION p1614 VALUES LESS THAN (12920), +PARTITION p1615 VALUES LESS THAN (12928), +PARTITION p1616 VALUES LESS THAN (12936), +PARTITION p1617 VALUES LESS THAN (12944), +PARTITION p1618 VALUES LESS THAN (12952), +PARTITION p1619 VALUES LESS THAN (12960), +PARTITION p1620 VALUES LESS THAN (12968), +PARTITION p1621 VALUES LESS THAN (12976), +PARTITION p1622 VALUES LESS THAN (12984), +PARTITION p1623 VALUES LESS THAN (12992), +PARTITION p1624 VALUES LESS THAN (13000), +PARTITION p1625 VALUES LESS THAN (13008), +PARTITION p1626 VALUES LESS THAN (13016), +PARTITION p1627 VALUES LESS THAN (13024), +PARTITION p1628 VALUES LESS THAN (13032), +PARTITION p1629 VALUES LESS THAN (13040), +PARTITION p1630 VALUES LESS THAN (13048), +PARTITION p1631 VALUES LESS THAN (13056), +PARTITION p1632 VALUES LESS THAN (13064), +PARTITION p1633 VALUES LESS THAN (13072), +PARTITION p1634 VALUES LESS THAN (13080), +PARTITION p1635 VALUES LESS THAN (13088), +PARTITION p1636 VALUES LESS THAN (13096), +PARTITION p1637 VALUES LESS THAN (13104), +PARTITION p1638 VALUES LESS THAN (13112), +PARTITION p1639 VALUES LESS THAN (13120), +PARTITION p1640 VALUES LESS THAN (13128), +PARTITION p1641 VALUES LESS THAN (13136), +PARTITION p1642 VALUES LESS THAN (13144), +PARTITION p1643 VALUES LESS THAN (13152), +PARTITION p1644 VALUES LESS THAN (13160), +PARTITION p1645 VALUES LESS THAN (13168), +PARTITION p1646 VALUES LESS THAN (13176), +PARTITION p1647 VALUES LESS THAN (13184), +PARTITION p1648 VALUES LESS THAN (13192), +PARTITION p1649 VALUES LESS THAN (13200), +PARTITION p1650 VALUES LESS THAN (13208), +PARTITION p1651 VALUES LESS THAN (13216), +PARTITION p1652 VALUES LESS THAN (13224), +PARTITION p1653 VALUES LESS THAN (13232), +PARTITION p1654 VALUES LESS THAN (13240), +PARTITION p1655 VALUES LESS THAN (13248), +PARTITION p1656 VALUES LESS THAN (13256), +PARTITION p1657 VALUES LESS THAN (13264), +PARTITION p1658 VALUES LESS THAN (13272), +PARTITION p1659 VALUES LESS THAN (13280), +PARTITION p1660 VALUES LESS THAN (13288), +PARTITION p1661 VALUES LESS THAN (13296), +PARTITION p1662 VALUES LESS THAN (13304), +PARTITION p1663 VALUES LESS THAN (13312), +PARTITION p1664 VALUES LESS THAN (13320), +PARTITION p1665 VALUES LESS THAN (13328), +PARTITION p1666 VALUES LESS THAN (13336), +PARTITION p1667 VALUES LESS THAN (13344), +PARTITION p1668 VALUES LESS THAN (13352), +PARTITION p1669 VALUES LESS THAN (13360), +PARTITION p1670 VALUES LESS THAN (13368), +PARTITION p1671 VALUES LESS THAN (13376), +PARTITION p1672 VALUES LESS THAN (13384), +PARTITION p1673 VALUES LESS THAN (13392), +PARTITION p1674 VALUES LESS THAN (13400), +PARTITION p1675 VALUES LESS THAN (13408), +PARTITION p1676 VALUES LESS THAN (13416), +PARTITION p1677 VALUES LESS THAN (13424), +PARTITION p1678 VALUES LESS THAN (13432), +PARTITION p1679 VALUES LESS THAN (13440), +PARTITION p1680 VALUES LESS THAN (13448), +PARTITION p1681 VALUES LESS THAN (13456), +PARTITION p1682 VALUES LESS THAN (13464), +PARTITION p1683 VALUES LESS THAN (13472), +PARTITION p1684 VALUES LESS THAN (13480), +PARTITION p1685 VALUES LESS THAN (13488), +PARTITION p1686 VALUES LESS THAN (13496), +PARTITION p1687 VALUES LESS THAN (13504), +PARTITION p1688 VALUES LESS THAN (13512), +PARTITION p1689 VALUES LESS THAN (13520), +PARTITION p1690 VALUES LESS THAN (13528), +PARTITION p1691 VALUES LESS THAN (13536), +PARTITION p1692 VALUES LESS THAN (13544), +PARTITION p1693 VALUES LESS THAN (13552), +PARTITION p1694 VALUES LESS THAN (13560), +PARTITION p1695 VALUES LESS THAN (13568), +PARTITION p1696 VALUES LESS THAN (13576), +PARTITION p1697 VALUES LESS THAN (13584), +PARTITION p1698 VALUES LESS THAN (13592), +PARTITION p1699 VALUES LESS THAN (13600), +PARTITION p1700 VALUES LESS THAN (13608), +PARTITION p1701 VALUES LESS THAN (13616), +PARTITION p1702 VALUES LESS THAN (13624), +PARTITION p1703 VALUES LESS THAN (13632), +PARTITION p1704 VALUES LESS THAN (13640), +PARTITION p1705 VALUES LESS THAN (13648), +PARTITION p1706 VALUES LESS THAN (13656), +PARTITION p1707 VALUES LESS THAN (13664), +PARTITION p1708 VALUES LESS THAN (13672), +PARTITION p1709 VALUES LESS THAN (13680), +PARTITION p1710 VALUES LESS THAN (13688), +PARTITION p1711 VALUES LESS THAN (13696), +PARTITION p1712 VALUES LESS THAN (13704), +PARTITION p1713 VALUES LESS THAN (13712), +PARTITION p1714 VALUES LESS THAN (13720), +PARTITION p1715 VALUES LESS THAN (13728), +PARTITION p1716 VALUES LESS THAN (13736), +PARTITION p1717 VALUES LESS THAN (13744), +PARTITION p1718 VALUES LESS THAN (13752), +PARTITION p1719 VALUES LESS THAN (13760), +PARTITION p1720 VALUES LESS THAN (13768), +PARTITION p1721 VALUES LESS THAN (13776), +PARTITION p1722 VALUES LESS THAN (13784), +PARTITION p1723 VALUES LESS THAN (13792), +PARTITION p1724 VALUES LESS THAN (13800), +PARTITION p1725 VALUES LESS THAN (13808), +PARTITION p1726 VALUES LESS THAN (13816), +PARTITION p1727 VALUES LESS THAN (13824), +PARTITION p1728 VALUES LESS THAN (13832), +PARTITION p1729 VALUES LESS THAN (13840), +PARTITION p1730 VALUES LESS THAN (13848), +PARTITION p1731 VALUES LESS THAN (13856), +PARTITION p1732 VALUES LESS THAN (13864), +PARTITION p1733 VALUES LESS THAN (13872), +PARTITION p1734 VALUES LESS THAN (13880), +PARTITION p1735 VALUES LESS THAN (13888), +PARTITION p1736 VALUES LESS THAN (13896), +PARTITION p1737 VALUES LESS THAN (13904), +PARTITION p1738 VALUES LESS THAN (13912), +PARTITION p1739 VALUES LESS THAN (13920), +PARTITION p1740 VALUES LESS THAN (13928), +PARTITION p1741 VALUES LESS THAN (13936), +PARTITION p1742 VALUES LESS THAN (13944), +PARTITION p1743 VALUES LESS THAN (13952), +PARTITION p1744 VALUES LESS THAN (13960), +PARTITION p1745 VALUES LESS THAN (13968), +PARTITION p1746 VALUES LESS THAN (13976), +PARTITION p1747 VALUES LESS THAN (13984), +PARTITION p1748 VALUES LESS THAN (13992), +PARTITION p1749 VALUES LESS THAN (14000), +PARTITION p1750 VALUES LESS THAN (14008), +PARTITION p1751 VALUES LESS THAN (14016), +PARTITION p1752 VALUES LESS THAN (14024), +PARTITION p1753 VALUES LESS THAN (14032), +PARTITION p1754 VALUES LESS THAN (14040), +PARTITION p1755 VALUES LESS THAN (14048), +PARTITION p1756 VALUES LESS THAN (14056), +PARTITION p1757 VALUES LESS THAN (14064), +PARTITION p1758 VALUES LESS THAN (14072), +PARTITION p1759 VALUES LESS THAN (14080), +PARTITION p1760 VALUES LESS THAN (14088), +PARTITION p1761 VALUES LESS THAN (14096), +PARTITION p1762 VALUES LESS THAN (14104), +PARTITION p1763 VALUES LESS THAN (14112), +PARTITION p1764 VALUES LESS THAN (14120), +PARTITION p1765 VALUES LESS THAN (14128), +PARTITION p1766 VALUES LESS THAN (14136), +PARTITION p1767 VALUES LESS THAN (14144), +PARTITION p1768 VALUES LESS THAN (14152), +PARTITION p1769 VALUES LESS THAN (14160), +PARTITION p1770 VALUES LESS THAN (14168), +PARTITION p1771 VALUES LESS THAN (14176), +PARTITION p1772 VALUES LESS THAN (14184), +PARTITION p1773 VALUES LESS THAN (14192), +PARTITION p1774 VALUES LESS THAN (14200), +PARTITION p1775 VALUES LESS THAN (14208), +PARTITION p1776 VALUES LESS THAN (14216), +PARTITION p1777 VALUES LESS THAN (14224), +PARTITION p1778 VALUES LESS THAN (14232), +PARTITION p1779 VALUES LESS THAN (14240), +PARTITION p1780 VALUES LESS THAN (14248), +PARTITION p1781 VALUES LESS THAN (14256), +PARTITION p1782 VALUES LESS THAN (14264), +PARTITION p1783 VALUES LESS THAN (14272), +PARTITION p1784 VALUES LESS THAN (14280), +PARTITION p1785 VALUES LESS THAN (14288), +PARTITION p1786 VALUES LESS THAN (14296), +PARTITION p1787 VALUES LESS THAN (14304), +PARTITION p1788 VALUES LESS THAN (14312), +PARTITION p1789 VALUES LESS THAN (14320), +PARTITION p1790 VALUES LESS THAN (14328), +PARTITION p1791 VALUES LESS THAN (14336), +PARTITION p1792 VALUES LESS THAN (14344), +PARTITION p1793 VALUES LESS THAN (14352), +PARTITION p1794 VALUES LESS THAN (14360), +PARTITION p1795 VALUES LESS THAN (14368), +PARTITION p1796 VALUES LESS THAN (14376), +PARTITION p1797 VALUES LESS THAN (14384), +PARTITION p1798 VALUES LESS THAN (14392), +PARTITION p1799 VALUES LESS THAN (14400), +PARTITION p1800 VALUES LESS THAN (14408), +PARTITION p1801 VALUES LESS THAN (14416), +PARTITION p1802 VALUES LESS THAN (14424), +PARTITION p1803 VALUES LESS THAN (14432), +PARTITION p1804 VALUES LESS THAN (14440), +PARTITION p1805 VALUES LESS THAN (14448), +PARTITION p1806 VALUES LESS THAN (14456), +PARTITION p1807 VALUES LESS THAN (14464), +PARTITION p1808 VALUES LESS THAN (14472), +PARTITION p1809 VALUES LESS THAN (14480), +PARTITION p1810 VALUES LESS THAN (14488), +PARTITION p1811 VALUES LESS THAN (14496), +PARTITION p1812 VALUES LESS THAN (14504), +PARTITION p1813 VALUES LESS THAN (14512), +PARTITION p1814 VALUES LESS THAN (14520), +PARTITION p1815 VALUES LESS THAN (14528), +PARTITION p1816 VALUES LESS THAN (14536), +PARTITION p1817 VALUES LESS THAN (14544), +PARTITION p1818 VALUES LESS THAN (14552), +PARTITION p1819 VALUES LESS THAN (14560), +PARTITION p1820 VALUES LESS THAN (14568), +PARTITION p1821 VALUES LESS THAN (14576), +PARTITION p1822 VALUES LESS THAN (14584), +PARTITION p1823 VALUES LESS THAN (14592), +PARTITION p1824 VALUES LESS THAN (14600), +PARTITION p1825 VALUES LESS THAN (14608), +PARTITION p1826 VALUES LESS THAN (14616), +PARTITION p1827 VALUES LESS THAN (14624), +PARTITION p1828 VALUES LESS THAN (14632), +PARTITION p1829 VALUES LESS THAN (14640), +PARTITION p1830 VALUES LESS THAN (14648), +PARTITION p1831 VALUES LESS THAN (14656), +PARTITION p1832 VALUES LESS THAN (14664), +PARTITION p1833 VALUES LESS THAN (14672), +PARTITION p1834 VALUES LESS THAN (14680), +PARTITION p1835 VALUES LESS THAN (14688), +PARTITION p1836 VALUES LESS THAN (14696), +PARTITION p1837 VALUES LESS THAN (14704), +PARTITION p1838 VALUES LESS THAN (14712), +PARTITION p1839 VALUES LESS THAN (14720), +PARTITION p1840 VALUES LESS THAN (14728), +PARTITION p1841 VALUES LESS THAN (14736), +PARTITION p1842 VALUES LESS THAN (14744), +PARTITION p1843 VALUES LESS THAN (14752), +PARTITION p1844 VALUES LESS THAN (14760), +PARTITION p1845 VALUES LESS THAN (14768), +PARTITION p1846 VALUES LESS THAN (14776), +PARTITION p1847 VALUES LESS THAN (14784), +PARTITION p1848 VALUES LESS THAN (14792), +PARTITION p1849 VALUES LESS THAN (14800), +PARTITION p1850 VALUES LESS THAN (14808), +PARTITION p1851 VALUES LESS THAN (14816), +PARTITION p1852 VALUES LESS THAN (14824), +PARTITION p1853 VALUES LESS THAN (14832), +PARTITION p1854 VALUES LESS THAN (14840), +PARTITION p1855 VALUES LESS THAN (14848), +PARTITION p1856 VALUES LESS THAN (14856), +PARTITION p1857 VALUES LESS THAN (14864), +PARTITION p1858 VALUES LESS THAN (14872), +PARTITION p1859 VALUES LESS THAN (14880), +PARTITION p1860 VALUES LESS THAN (14888), +PARTITION p1861 VALUES LESS THAN (14896), +PARTITION p1862 VALUES LESS THAN (14904), +PARTITION p1863 VALUES LESS THAN (14912), +PARTITION p1864 VALUES LESS THAN (14920), +PARTITION p1865 VALUES LESS THAN (14928), +PARTITION p1866 VALUES LESS THAN (14936), +PARTITION p1867 VALUES LESS THAN (14944), +PARTITION p1868 VALUES LESS THAN (14952), +PARTITION p1869 VALUES LESS THAN (14960), +PARTITION p1870 VALUES LESS THAN (14968), +PARTITION p1871 VALUES LESS THAN (14976), +PARTITION p1872 VALUES LESS THAN (14984), +PARTITION p1873 VALUES LESS THAN (14992), +PARTITION p1874 VALUES LESS THAN (15000), +PARTITION p1875 VALUES LESS THAN (15008), +PARTITION p1876 VALUES LESS THAN (15016), +PARTITION p1877 VALUES LESS THAN (15024), +PARTITION p1878 VALUES LESS THAN (15032), +PARTITION p1879 VALUES LESS THAN (15040), +PARTITION p1880 VALUES LESS THAN (15048), +PARTITION p1881 VALUES LESS THAN (15056), +PARTITION p1882 VALUES LESS THAN (15064), +PARTITION p1883 VALUES LESS THAN (15072), +PARTITION p1884 VALUES LESS THAN (15080), +PARTITION p1885 VALUES LESS THAN (15088), +PARTITION p1886 VALUES LESS THAN (15096), +PARTITION p1887 VALUES LESS THAN (15104), +PARTITION p1888 VALUES LESS THAN (15112), +PARTITION p1889 VALUES LESS THAN (15120), +PARTITION p1890 VALUES LESS THAN (15128), +PARTITION p1891 VALUES LESS THAN (15136), +PARTITION p1892 VALUES LESS THAN (15144), +PARTITION p1893 VALUES LESS THAN (15152), +PARTITION p1894 VALUES LESS THAN (15160), +PARTITION p1895 VALUES LESS THAN (15168), +PARTITION p1896 VALUES LESS THAN (15176), +PARTITION p1897 VALUES LESS THAN (15184), +PARTITION p1898 VALUES LESS THAN (15192), +PARTITION p1899 VALUES LESS THAN (15200), +PARTITION p1900 VALUES LESS THAN (15208), +PARTITION p1901 VALUES LESS THAN (15216), +PARTITION p1902 VALUES LESS THAN (15224), +PARTITION p1903 VALUES LESS THAN (15232), +PARTITION p1904 VALUES LESS THAN (15240), +PARTITION p1905 VALUES LESS THAN (15248), +PARTITION p1906 VALUES LESS THAN (15256), +PARTITION p1907 VALUES LESS THAN (15264), +PARTITION p1908 VALUES LESS THAN (15272), +PARTITION p1909 VALUES LESS THAN (15280), +PARTITION p1910 VALUES LESS THAN (15288), +PARTITION p1911 VALUES LESS THAN (15296), +PARTITION p1912 VALUES LESS THAN (15304), +PARTITION p1913 VALUES LESS THAN (15312), +PARTITION p1914 VALUES LESS THAN (15320), +PARTITION p1915 VALUES LESS THAN (15328), +PARTITION p1916 VALUES LESS THAN (15336), +PARTITION p1917 VALUES LESS THAN (15344), +PARTITION p1918 VALUES LESS THAN (15352), +PARTITION p1919 VALUES LESS THAN (15360), +PARTITION p1920 VALUES LESS THAN (15368), +PARTITION p1921 VALUES LESS THAN (15376), +PARTITION p1922 VALUES LESS THAN (15384), +PARTITION p1923 VALUES LESS THAN (15392), +PARTITION p1924 VALUES LESS THAN (15400), +PARTITION p1925 VALUES LESS THAN (15408), +PARTITION p1926 VALUES LESS THAN (15416), +PARTITION p1927 VALUES LESS THAN (15424), +PARTITION p1928 VALUES LESS THAN (15432), +PARTITION p1929 VALUES LESS THAN (15440), +PARTITION p1930 VALUES LESS THAN (15448), +PARTITION p1931 VALUES LESS THAN (15456), +PARTITION p1932 VALUES LESS THAN (15464), +PARTITION p1933 VALUES LESS THAN (15472), +PARTITION p1934 VALUES LESS THAN (15480), +PARTITION p1935 VALUES LESS THAN (15488), +PARTITION p1936 VALUES LESS THAN (15496), +PARTITION p1937 VALUES LESS THAN (15504), +PARTITION p1938 VALUES LESS THAN (15512), +PARTITION p1939 VALUES LESS THAN (15520), +PARTITION p1940 VALUES LESS THAN (15528), +PARTITION p1941 VALUES LESS THAN (15536), +PARTITION p1942 VALUES LESS THAN (15544), +PARTITION p1943 VALUES LESS THAN (15552), +PARTITION p1944 VALUES LESS THAN (15560), +PARTITION p1945 VALUES LESS THAN (15568), +PARTITION p1946 VALUES LESS THAN (15576), +PARTITION p1947 VALUES LESS THAN (15584), +PARTITION p1948 VALUES LESS THAN (15592), +PARTITION p1949 VALUES LESS THAN (15600), +PARTITION p1950 VALUES LESS THAN (15608), +PARTITION p1951 VALUES LESS THAN (15616), +PARTITION p1952 VALUES LESS THAN (15624), +PARTITION p1953 VALUES LESS THAN (15632), +PARTITION p1954 VALUES LESS THAN (15640), +PARTITION p1955 VALUES LESS THAN (15648), +PARTITION p1956 VALUES LESS THAN (15656), +PARTITION p1957 VALUES LESS THAN (15664), +PARTITION p1958 VALUES LESS THAN (15672), +PARTITION p1959 VALUES LESS THAN (15680), +PARTITION p1960 VALUES LESS THAN (15688), +PARTITION p1961 VALUES LESS THAN (15696), +PARTITION p1962 VALUES LESS THAN (15704), +PARTITION p1963 VALUES LESS THAN (15712), +PARTITION p1964 VALUES LESS THAN (15720), +PARTITION p1965 VALUES LESS THAN (15728), +PARTITION p1966 VALUES LESS THAN (15736), +PARTITION p1967 VALUES LESS THAN (15744), +PARTITION p1968 VALUES LESS THAN (15752), +PARTITION p1969 VALUES LESS THAN (15760), +PARTITION p1970 VALUES LESS THAN (15768), +PARTITION p1971 VALUES LESS THAN (15776), +PARTITION p1972 VALUES LESS THAN (15784), +PARTITION p1973 VALUES LESS THAN (15792), +PARTITION p1974 VALUES LESS THAN (15800), +PARTITION p1975 VALUES LESS THAN (15808), +PARTITION p1976 VALUES LESS THAN (15816), +PARTITION p1977 VALUES LESS THAN (15824), +PARTITION p1978 VALUES LESS THAN (15832), +PARTITION p1979 VALUES LESS THAN (15840), +PARTITION p1980 VALUES LESS THAN (15848), +PARTITION p1981 VALUES LESS THAN (15856), +PARTITION p1982 VALUES LESS THAN (15864), +PARTITION p1983 VALUES LESS THAN (15872), +PARTITION p1984 VALUES LESS THAN (15880), +PARTITION p1985 VALUES LESS THAN (15888), +PARTITION p1986 VALUES LESS THAN (15896), +PARTITION p1987 VALUES LESS THAN (15904), +PARTITION p1988 VALUES LESS THAN (15912), +PARTITION p1989 VALUES LESS THAN (15920), +PARTITION p1990 VALUES LESS THAN (15928), +PARTITION p1991 VALUES LESS THAN (15936), +PARTITION p1992 VALUES LESS THAN (15944), +PARTITION p1993 VALUES LESS THAN (15952), +PARTITION p1994 VALUES LESS THAN (15960), +PARTITION p1995 VALUES LESS THAN (15968), +PARTITION p1996 VALUES LESS THAN (15976), +PARTITION p1997 VALUES LESS THAN (15984), +PARTITION p1998 VALUES LESS THAN (15992), +PARTITION p1999 VALUES LESS THAN (16000), +PARTITION p2000 VALUES LESS THAN (16008), +PARTITION p2001 VALUES LESS THAN (16016), +PARTITION p2002 VALUES LESS THAN (16024), +PARTITION p2003 VALUES LESS THAN (16032), +PARTITION p2004 VALUES LESS THAN (16040), +PARTITION p2005 VALUES LESS THAN (16048), +PARTITION p2006 VALUES LESS THAN (16056), +PARTITION p2007 VALUES LESS THAN (16064), +PARTITION p2008 VALUES LESS THAN (16072), +PARTITION p2009 VALUES LESS THAN (16080), +PARTITION p2010 VALUES LESS THAN (16088), +PARTITION p2011 VALUES LESS THAN (16096), +PARTITION p2012 VALUES LESS THAN (16104), +PARTITION p2013 VALUES LESS THAN (16112), +PARTITION p2014 VALUES LESS THAN (16120), +PARTITION p2015 VALUES LESS THAN (16128), +PARTITION p2016 VALUES LESS THAN (16136), +PARTITION p2017 VALUES LESS THAN (16144), +PARTITION p2018 VALUES LESS THAN (16152), +PARTITION p2019 VALUES LESS THAN (16160), +PARTITION p2020 VALUES LESS THAN (16168), +PARTITION p2021 VALUES LESS THAN (16176), +PARTITION p2022 VALUES LESS THAN (16184), +PARTITION p2023 VALUES LESS THAN (16192), +PARTITION p2024 VALUES LESS THAN (16200), +PARTITION p2025 VALUES LESS THAN (16208), +PARTITION p2026 VALUES LESS THAN (16216), +PARTITION p2027 VALUES LESS THAN (16224), +PARTITION p2028 VALUES LESS THAN (16232), +PARTITION p2029 VALUES LESS THAN (16240), +PARTITION p2030 VALUES LESS THAN (16248), +PARTITION p2031 VALUES LESS THAN (16256), +PARTITION p2032 VALUES LESS THAN (16264), +PARTITION p2033 VALUES LESS THAN (16272), +PARTITION p2034 VALUES LESS THAN (16280), +PARTITION p2035 VALUES LESS THAN (16288), +PARTITION p2036 VALUES LESS THAN (16296), +PARTITION p2037 VALUES LESS THAN (16304), +PARTITION p2038 VALUES LESS THAN (16312), +PARTITION p2039 VALUES LESS THAN (16320), +PARTITION p2040 VALUES LESS THAN (16328), +PARTITION p2041 VALUES LESS THAN (16336), +PARTITION p2042 VALUES LESS THAN (16344), +PARTITION p2043 VALUES LESS THAN (16352), +PARTITION p2044 VALUES LESS THAN (16360), +PARTITION p2045 VALUES LESS THAN (16368), +PARTITION p2046 VALUES LESS THAN (16376), +PARTITION p2047 VALUES LESS THAN (16384), +PARTITION p2048 VALUES LESS THAN (16392), +PARTITION p2049 VALUES LESS THAN (16400), +PARTITION p2050 VALUES LESS THAN (16408), +PARTITION p2051 VALUES LESS THAN (16416), +PARTITION p2052 VALUES LESS THAN (16424), +PARTITION p2053 VALUES LESS THAN (16432), +PARTITION p2054 VALUES LESS THAN (16440), +PARTITION p2055 VALUES LESS THAN (16448), +PARTITION p2056 VALUES LESS THAN (16456), +PARTITION p2057 VALUES LESS THAN (16464), +PARTITION p2058 VALUES LESS THAN (16472), +PARTITION p2059 VALUES LESS THAN (16480), +PARTITION p2060 VALUES LESS THAN (16488), +PARTITION p2061 VALUES LESS THAN (16496), +PARTITION p2062 VALUES LESS THAN (16504), +PARTITION p2063 VALUES LESS THAN (16512), +PARTITION p2064 VALUES LESS THAN (16520), +PARTITION p2065 VALUES LESS THAN (16528), +PARTITION p2066 VALUES LESS THAN (16536), +PARTITION p2067 VALUES LESS THAN (16544), +PARTITION p2068 VALUES LESS THAN (16552), +PARTITION p2069 VALUES LESS THAN (16560), +PARTITION p2070 VALUES LESS THAN (16568), +PARTITION p2071 VALUES LESS THAN (16576), +PARTITION p2072 VALUES LESS THAN (16584), +PARTITION p2073 VALUES LESS THAN (16592), +PARTITION p2074 VALUES LESS THAN (16600), +PARTITION p2075 VALUES LESS THAN (16608), +PARTITION p2076 VALUES LESS THAN (16616), +PARTITION p2077 VALUES LESS THAN (16624), +PARTITION p2078 VALUES LESS THAN (16632), +PARTITION p2079 VALUES LESS THAN (16640), +PARTITION p2080 VALUES LESS THAN (16648), +PARTITION p2081 VALUES LESS THAN (16656), +PARTITION p2082 VALUES LESS THAN (16664), +PARTITION p2083 VALUES LESS THAN (16672), +PARTITION p2084 VALUES LESS THAN (16680), +PARTITION p2085 VALUES LESS THAN (16688), +PARTITION p2086 VALUES LESS THAN (16696), +PARTITION p2087 VALUES LESS THAN (16704), +PARTITION p2088 VALUES LESS THAN (16712), +PARTITION p2089 VALUES LESS THAN (16720), +PARTITION p2090 VALUES LESS THAN (16728), +PARTITION p2091 VALUES LESS THAN (16736), +PARTITION p2092 VALUES LESS THAN (16744), +PARTITION p2093 VALUES LESS THAN (16752), +PARTITION p2094 VALUES LESS THAN (16760), +PARTITION p2095 VALUES LESS THAN (16768), +PARTITION p2096 VALUES LESS THAN (16776), +PARTITION p2097 VALUES LESS THAN (16784), +PARTITION p2098 VALUES LESS THAN (16792), +PARTITION p2099 VALUES LESS THAN (16800), +PARTITION p2100 VALUES LESS THAN (16808), +PARTITION p2101 VALUES LESS THAN (16816), +PARTITION p2102 VALUES LESS THAN (16824), +PARTITION p2103 VALUES LESS THAN (16832), +PARTITION p2104 VALUES LESS THAN (16840), +PARTITION p2105 VALUES LESS THAN (16848), +PARTITION p2106 VALUES LESS THAN (16856), +PARTITION p2107 VALUES LESS THAN (16864), +PARTITION p2108 VALUES LESS THAN (16872), +PARTITION p2109 VALUES LESS THAN (16880), +PARTITION p2110 VALUES LESS THAN (16888), +PARTITION p2111 VALUES LESS THAN (16896), +PARTITION p2112 VALUES LESS THAN (16904), +PARTITION p2113 VALUES LESS THAN (16912), +PARTITION p2114 VALUES LESS THAN (16920), +PARTITION p2115 VALUES LESS THAN (16928), +PARTITION p2116 VALUES LESS THAN (16936), +PARTITION p2117 VALUES LESS THAN (16944), +PARTITION p2118 VALUES LESS THAN (16952), +PARTITION p2119 VALUES LESS THAN (16960), +PARTITION p2120 VALUES LESS THAN (16968), +PARTITION p2121 VALUES LESS THAN (16976), +PARTITION p2122 VALUES LESS THAN (16984), +PARTITION p2123 VALUES LESS THAN (16992), +PARTITION p2124 VALUES LESS THAN (17000), +PARTITION p2125 VALUES LESS THAN (17008), +PARTITION p2126 VALUES LESS THAN (17016), +PARTITION p2127 VALUES LESS THAN (17024), +PARTITION p2128 VALUES LESS THAN (17032), +PARTITION p2129 VALUES LESS THAN (17040), +PARTITION p2130 VALUES LESS THAN (17048), +PARTITION p2131 VALUES LESS THAN (17056), +PARTITION p2132 VALUES LESS THAN (17064), +PARTITION p2133 VALUES LESS THAN (17072), +PARTITION p2134 VALUES LESS THAN (17080), +PARTITION p2135 VALUES LESS THAN (17088), +PARTITION p2136 VALUES LESS THAN (17096), +PARTITION p2137 VALUES LESS THAN (17104), +PARTITION p2138 VALUES LESS THAN (17112), +PARTITION p2139 VALUES LESS THAN (17120), +PARTITION p2140 VALUES LESS THAN (17128), +PARTITION p2141 VALUES LESS THAN (17136), +PARTITION p2142 VALUES LESS THAN (17144), +PARTITION p2143 VALUES LESS THAN (17152), +PARTITION p2144 VALUES LESS THAN (17160), +PARTITION p2145 VALUES LESS THAN (17168), +PARTITION p2146 VALUES LESS THAN (17176), +PARTITION p2147 VALUES LESS THAN (17184), +PARTITION p2148 VALUES LESS THAN (17192), +PARTITION p2149 VALUES LESS THAN (17200), +PARTITION p2150 VALUES LESS THAN (17208), +PARTITION p2151 VALUES LESS THAN (17216), +PARTITION p2152 VALUES LESS THAN (17224), +PARTITION p2153 VALUES LESS THAN (17232), +PARTITION p2154 VALUES LESS THAN (17240), +PARTITION p2155 VALUES LESS THAN (17248), +PARTITION p2156 VALUES LESS THAN (17256), +PARTITION p2157 VALUES LESS THAN (17264), +PARTITION p2158 VALUES LESS THAN (17272), +PARTITION p2159 VALUES LESS THAN (17280), +PARTITION p2160 VALUES LESS THAN (17288), +PARTITION p2161 VALUES LESS THAN (17296), +PARTITION p2162 VALUES LESS THAN (17304), +PARTITION p2163 VALUES LESS THAN (17312), +PARTITION p2164 VALUES LESS THAN (17320), +PARTITION p2165 VALUES LESS THAN (17328), +PARTITION p2166 VALUES LESS THAN (17336), +PARTITION p2167 VALUES LESS THAN (17344), +PARTITION p2168 VALUES LESS THAN (17352), +PARTITION p2169 VALUES LESS THAN (17360), +PARTITION p2170 VALUES LESS THAN (17368), +PARTITION p2171 VALUES LESS THAN (17376), +PARTITION p2172 VALUES LESS THAN (17384), +PARTITION p2173 VALUES LESS THAN (17392), +PARTITION p2174 VALUES LESS THAN (17400), +PARTITION p2175 VALUES LESS THAN (17408), +PARTITION p2176 VALUES LESS THAN (17416), +PARTITION p2177 VALUES LESS THAN (17424), +PARTITION p2178 VALUES LESS THAN (17432), +PARTITION p2179 VALUES LESS THAN (17440), +PARTITION p2180 VALUES LESS THAN (17448), +PARTITION p2181 VALUES LESS THAN (17456), +PARTITION p2182 VALUES LESS THAN (17464), +PARTITION p2183 VALUES LESS THAN (17472), +PARTITION p2184 VALUES LESS THAN (17480), +PARTITION p2185 VALUES LESS THAN (17488), +PARTITION p2186 VALUES LESS THAN (17496), +PARTITION p2187 VALUES LESS THAN (17504), +PARTITION p2188 VALUES LESS THAN (17512), +PARTITION p2189 VALUES LESS THAN (17520), +PARTITION p2190 VALUES LESS THAN (17528), +PARTITION p2191 VALUES LESS THAN (17536), +PARTITION p2192 VALUES LESS THAN (17544), +PARTITION p2193 VALUES LESS THAN (17552), +PARTITION p2194 VALUES LESS THAN (17560), +PARTITION p2195 VALUES LESS THAN (17568), +PARTITION p2196 VALUES LESS THAN (17576), +PARTITION p2197 VALUES LESS THAN (17584), +PARTITION p2198 VALUES LESS THAN (17592), +PARTITION p2199 VALUES LESS THAN (17600), +PARTITION p2200 VALUES LESS THAN (17608), +PARTITION p2201 VALUES LESS THAN (17616), +PARTITION p2202 VALUES LESS THAN (17624), +PARTITION p2203 VALUES LESS THAN (17632), +PARTITION p2204 VALUES LESS THAN (17640), +PARTITION p2205 VALUES LESS THAN (17648), +PARTITION p2206 VALUES LESS THAN (17656), +PARTITION p2207 VALUES LESS THAN (17664), +PARTITION p2208 VALUES LESS THAN (17672), +PARTITION p2209 VALUES LESS THAN (17680), +PARTITION p2210 VALUES LESS THAN (17688), +PARTITION p2211 VALUES LESS THAN (17696), +PARTITION p2212 VALUES LESS THAN (17704), +PARTITION p2213 VALUES LESS THAN (17712), +PARTITION p2214 VALUES LESS THAN (17720), +PARTITION p2215 VALUES LESS THAN (17728), +PARTITION p2216 VALUES LESS THAN (17736), +PARTITION p2217 VALUES LESS THAN (17744), +PARTITION p2218 VALUES LESS THAN (17752), +PARTITION p2219 VALUES LESS THAN (17760), +PARTITION p2220 VALUES LESS THAN (17768), +PARTITION p2221 VALUES LESS THAN (17776), +PARTITION p2222 VALUES LESS THAN (17784), +PARTITION p2223 VALUES LESS THAN (17792), +PARTITION p2224 VALUES LESS THAN (17800), +PARTITION p2225 VALUES LESS THAN (17808), +PARTITION p2226 VALUES LESS THAN (17816), +PARTITION p2227 VALUES LESS THAN (17824), +PARTITION p2228 VALUES LESS THAN (17832), +PARTITION p2229 VALUES LESS THAN (17840), +PARTITION p2230 VALUES LESS THAN (17848), +PARTITION p2231 VALUES LESS THAN (17856), +PARTITION p2232 VALUES LESS THAN (17864), +PARTITION p2233 VALUES LESS THAN (17872), +PARTITION p2234 VALUES LESS THAN (17880), +PARTITION p2235 VALUES LESS THAN (17888), +PARTITION p2236 VALUES LESS THAN (17896), +PARTITION p2237 VALUES LESS THAN (17904), +PARTITION p2238 VALUES LESS THAN (17912), +PARTITION p2239 VALUES LESS THAN (17920), +PARTITION p2240 VALUES LESS THAN (17928), +PARTITION p2241 VALUES LESS THAN (17936), +PARTITION p2242 VALUES LESS THAN (17944), +PARTITION p2243 VALUES LESS THAN (17952), +PARTITION p2244 VALUES LESS THAN (17960), +PARTITION p2245 VALUES LESS THAN (17968), +PARTITION p2246 VALUES LESS THAN (17976), +PARTITION p2247 VALUES LESS THAN (17984), +PARTITION p2248 VALUES LESS THAN (17992), +PARTITION p2249 VALUES LESS THAN (18000), +PARTITION p2250 VALUES LESS THAN (18008), +PARTITION p2251 VALUES LESS THAN (18016), +PARTITION p2252 VALUES LESS THAN (18024), +PARTITION p2253 VALUES LESS THAN (18032), +PARTITION p2254 VALUES LESS THAN (18040), +PARTITION p2255 VALUES LESS THAN (18048), +PARTITION p2256 VALUES LESS THAN (18056), +PARTITION p2257 VALUES LESS THAN (18064), +PARTITION p2258 VALUES LESS THAN (18072), +PARTITION p2259 VALUES LESS THAN (18080), +PARTITION p2260 VALUES LESS THAN (18088), +PARTITION p2261 VALUES LESS THAN (18096), +PARTITION p2262 VALUES LESS THAN (18104), +PARTITION p2263 VALUES LESS THAN (18112), +PARTITION p2264 VALUES LESS THAN (18120), +PARTITION p2265 VALUES LESS THAN (18128), +PARTITION p2266 VALUES LESS THAN (18136), +PARTITION p2267 VALUES LESS THAN (18144), +PARTITION p2268 VALUES LESS THAN (18152), +PARTITION p2269 VALUES LESS THAN (18160), +PARTITION p2270 VALUES LESS THAN (18168), +PARTITION p2271 VALUES LESS THAN (18176), +PARTITION p2272 VALUES LESS THAN (18184), +PARTITION p2273 VALUES LESS THAN (18192), +PARTITION p2274 VALUES LESS THAN (18200), +PARTITION p2275 VALUES LESS THAN (18208), +PARTITION p2276 VALUES LESS THAN (18216), +PARTITION p2277 VALUES LESS THAN (18224), +PARTITION p2278 VALUES LESS THAN (18232), +PARTITION p2279 VALUES LESS THAN (18240), +PARTITION p2280 VALUES LESS THAN (18248), +PARTITION p2281 VALUES LESS THAN (18256), +PARTITION p2282 VALUES LESS THAN (18264), +PARTITION p2283 VALUES LESS THAN (18272), +PARTITION p2284 VALUES LESS THAN (18280), +PARTITION p2285 VALUES LESS THAN (18288), +PARTITION p2286 VALUES LESS THAN (18296), +PARTITION p2287 VALUES LESS THAN (18304), +PARTITION p2288 VALUES LESS THAN (18312), +PARTITION p2289 VALUES LESS THAN (18320), +PARTITION p2290 VALUES LESS THAN (18328), +PARTITION p2291 VALUES LESS THAN (18336), +PARTITION p2292 VALUES LESS THAN (18344), +PARTITION p2293 VALUES LESS THAN (18352), +PARTITION p2294 VALUES LESS THAN (18360), +PARTITION p2295 VALUES LESS THAN (18368), +PARTITION p2296 VALUES LESS THAN (18376), +PARTITION p2297 VALUES LESS THAN (18384), +PARTITION p2298 VALUES LESS THAN (18392), +PARTITION p2299 VALUES LESS THAN (18400), +PARTITION p2300 VALUES LESS THAN (18408), +PARTITION p2301 VALUES LESS THAN (18416), +PARTITION p2302 VALUES LESS THAN (18424), +PARTITION p2303 VALUES LESS THAN (18432), +PARTITION p2304 VALUES LESS THAN (18440), +PARTITION p2305 VALUES LESS THAN (18448), +PARTITION p2306 VALUES LESS THAN (18456), +PARTITION p2307 VALUES LESS THAN (18464), +PARTITION p2308 VALUES LESS THAN (18472), +PARTITION p2309 VALUES LESS THAN (18480), +PARTITION p2310 VALUES LESS THAN (18488), +PARTITION p2311 VALUES LESS THAN (18496), +PARTITION p2312 VALUES LESS THAN (18504), +PARTITION p2313 VALUES LESS THAN (18512), +PARTITION p2314 VALUES LESS THAN (18520), +PARTITION p2315 VALUES LESS THAN (18528), +PARTITION p2316 VALUES LESS THAN (18536), +PARTITION p2317 VALUES LESS THAN (18544), +PARTITION p2318 VALUES LESS THAN (18552), +PARTITION p2319 VALUES LESS THAN (18560), +PARTITION p2320 VALUES LESS THAN (18568), +PARTITION p2321 VALUES LESS THAN (18576), +PARTITION p2322 VALUES LESS THAN (18584), +PARTITION p2323 VALUES LESS THAN (18592), +PARTITION p2324 VALUES LESS THAN (18600), +PARTITION p2325 VALUES LESS THAN (18608), +PARTITION p2326 VALUES LESS THAN (18616), +PARTITION p2327 VALUES LESS THAN (18624), +PARTITION p2328 VALUES LESS THAN (18632), +PARTITION p2329 VALUES LESS THAN (18640), +PARTITION p2330 VALUES LESS THAN (18648), +PARTITION p2331 VALUES LESS THAN (18656), +PARTITION p2332 VALUES LESS THAN (18664), +PARTITION p2333 VALUES LESS THAN (18672), +PARTITION p2334 VALUES LESS THAN (18680), +PARTITION p2335 VALUES LESS THAN (18688), +PARTITION p2336 VALUES LESS THAN (18696), +PARTITION p2337 VALUES LESS THAN (18704), +PARTITION p2338 VALUES LESS THAN (18712), +PARTITION p2339 VALUES LESS THAN (18720), +PARTITION p2340 VALUES LESS THAN (18728), +PARTITION p2341 VALUES LESS THAN (18736), +PARTITION p2342 VALUES LESS THAN (18744), +PARTITION p2343 VALUES LESS THAN (18752), +PARTITION p2344 VALUES LESS THAN (18760), +PARTITION p2345 VALUES LESS THAN (18768), +PARTITION p2346 VALUES LESS THAN (18776), +PARTITION p2347 VALUES LESS THAN (18784), +PARTITION p2348 VALUES LESS THAN (18792), +PARTITION p2349 VALUES LESS THAN (18800), +PARTITION p2350 VALUES LESS THAN (18808), +PARTITION p2351 VALUES LESS THAN (18816), +PARTITION p2352 VALUES LESS THAN (18824), +PARTITION p2353 VALUES LESS THAN (18832), +PARTITION p2354 VALUES LESS THAN (18840), +PARTITION p2355 VALUES LESS THAN (18848), +PARTITION p2356 VALUES LESS THAN (18856), +PARTITION p2357 VALUES LESS THAN (18864), +PARTITION p2358 VALUES LESS THAN (18872), +PARTITION p2359 VALUES LESS THAN (18880), +PARTITION p2360 VALUES LESS THAN (18888), +PARTITION p2361 VALUES LESS THAN (18896), +PARTITION p2362 VALUES LESS THAN (18904), +PARTITION p2363 VALUES LESS THAN (18912), +PARTITION p2364 VALUES LESS THAN (18920), +PARTITION p2365 VALUES LESS THAN (18928), +PARTITION p2366 VALUES LESS THAN (18936), +PARTITION p2367 VALUES LESS THAN (18944), +PARTITION p2368 VALUES LESS THAN (18952), +PARTITION p2369 VALUES LESS THAN (18960), +PARTITION p2370 VALUES LESS THAN (18968), +PARTITION p2371 VALUES LESS THAN (18976), +PARTITION p2372 VALUES LESS THAN (18984), +PARTITION p2373 VALUES LESS THAN (18992), +PARTITION p2374 VALUES LESS THAN (19000), +PARTITION p2375 VALUES LESS THAN (19008), +PARTITION p2376 VALUES LESS THAN (19016), +PARTITION p2377 VALUES LESS THAN (19024), +PARTITION p2378 VALUES LESS THAN (19032), +PARTITION p2379 VALUES LESS THAN (19040), +PARTITION p2380 VALUES LESS THAN (19048), +PARTITION p2381 VALUES LESS THAN (19056), +PARTITION p2382 VALUES LESS THAN (19064), +PARTITION p2383 VALUES LESS THAN (19072), +PARTITION p2384 VALUES LESS THAN (19080), +PARTITION p2385 VALUES LESS THAN (19088), +PARTITION p2386 VALUES LESS THAN (19096), +PARTITION p2387 VALUES LESS THAN (19104), +PARTITION p2388 VALUES LESS THAN (19112), +PARTITION p2389 VALUES LESS THAN (19120), +PARTITION p2390 VALUES LESS THAN (19128), +PARTITION p2391 VALUES LESS THAN (19136), +PARTITION p2392 VALUES LESS THAN (19144), +PARTITION p2393 VALUES LESS THAN (19152), +PARTITION p2394 VALUES LESS THAN (19160), +PARTITION p2395 VALUES LESS THAN (19168), +PARTITION p2396 VALUES LESS THAN (19176), +PARTITION p2397 VALUES LESS THAN (19184), +PARTITION p2398 VALUES LESS THAN (19192), +PARTITION p2399 VALUES LESS THAN (19200), +PARTITION p2400 VALUES LESS THAN (19208), +PARTITION p2401 VALUES LESS THAN (19216), +PARTITION p2402 VALUES LESS THAN (19224), +PARTITION p2403 VALUES LESS THAN (19232), +PARTITION p2404 VALUES LESS THAN (19240), +PARTITION p2405 VALUES LESS THAN (19248), +PARTITION p2406 VALUES LESS THAN (19256), +PARTITION p2407 VALUES LESS THAN (19264), +PARTITION p2408 VALUES LESS THAN (19272), +PARTITION p2409 VALUES LESS THAN (19280), +PARTITION p2410 VALUES LESS THAN (19288), +PARTITION p2411 VALUES LESS THAN (19296), +PARTITION p2412 VALUES LESS THAN (19304), +PARTITION p2413 VALUES LESS THAN (19312), +PARTITION p2414 VALUES LESS THAN (19320), +PARTITION p2415 VALUES LESS THAN (19328), +PARTITION p2416 VALUES LESS THAN (19336), +PARTITION p2417 VALUES LESS THAN (19344), +PARTITION p2418 VALUES LESS THAN (19352), +PARTITION p2419 VALUES LESS THAN (19360), +PARTITION p2420 VALUES LESS THAN (19368), +PARTITION p2421 VALUES LESS THAN (19376), +PARTITION p2422 VALUES LESS THAN (19384), +PARTITION p2423 VALUES LESS THAN (19392), +PARTITION p2424 VALUES LESS THAN (19400), +PARTITION p2425 VALUES LESS THAN (19408), +PARTITION p2426 VALUES LESS THAN (19416), +PARTITION p2427 VALUES LESS THAN (19424), +PARTITION p2428 VALUES LESS THAN (19432), +PARTITION p2429 VALUES LESS THAN (19440), +PARTITION p2430 VALUES LESS THAN (19448), +PARTITION p2431 VALUES LESS THAN (19456), +PARTITION p2432 VALUES LESS THAN (19464), +PARTITION p2433 VALUES LESS THAN (19472), +PARTITION p2434 VALUES LESS THAN (19480), +PARTITION p2435 VALUES LESS THAN (19488), +PARTITION p2436 VALUES LESS THAN (19496), +PARTITION p2437 VALUES LESS THAN (19504), +PARTITION p2438 VALUES LESS THAN (19512), +PARTITION p2439 VALUES LESS THAN (19520), +PARTITION p2440 VALUES LESS THAN (19528), +PARTITION p2441 VALUES LESS THAN (19536), +PARTITION p2442 VALUES LESS THAN (19544), +PARTITION p2443 VALUES LESS THAN (19552), +PARTITION p2444 VALUES LESS THAN (19560), +PARTITION p2445 VALUES LESS THAN (19568), +PARTITION p2446 VALUES LESS THAN (19576), +PARTITION p2447 VALUES LESS THAN (19584), +PARTITION p2448 VALUES LESS THAN (19592), +PARTITION p2449 VALUES LESS THAN (19600), +PARTITION p2450 VALUES LESS THAN (19608), +PARTITION p2451 VALUES LESS THAN (19616), +PARTITION p2452 VALUES LESS THAN (19624), +PARTITION p2453 VALUES LESS THAN (19632), +PARTITION p2454 VALUES LESS THAN (19640), +PARTITION p2455 VALUES LESS THAN (19648), +PARTITION p2456 VALUES LESS THAN (19656), +PARTITION p2457 VALUES LESS THAN (19664), +PARTITION p2458 VALUES LESS THAN (19672), +PARTITION p2459 VALUES LESS THAN (19680), +PARTITION p2460 VALUES LESS THAN (19688), +PARTITION p2461 VALUES LESS THAN (19696), +PARTITION p2462 VALUES LESS THAN (19704), +PARTITION p2463 VALUES LESS THAN (19712), +PARTITION p2464 VALUES LESS THAN (19720), +PARTITION p2465 VALUES LESS THAN (19728), +PARTITION p2466 VALUES LESS THAN (19736), +PARTITION p2467 VALUES LESS THAN (19744), +PARTITION p2468 VALUES LESS THAN (19752), +PARTITION p2469 VALUES LESS THAN (19760), +PARTITION p2470 VALUES LESS THAN (19768), +PARTITION p2471 VALUES LESS THAN (19776), +PARTITION p2472 VALUES LESS THAN (19784), +PARTITION p2473 VALUES LESS THAN (19792), +PARTITION p2474 VALUES LESS THAN (19800), +PARTITION p2475 VALUES LESS THAN (19808), +PARTITION p2476 VALUES LESS THAN (19816), +PARTITION p2477 VALUES LESS THAN (19824), +PARTITION p2478 VALUES LESS THAN (19832), +PARTITION p2479 VALUES LESS THAN (19840), +PARTITION p2480 VALUES LESS THAN (19848), +PARTITION p2481 VALUES LESS THAN (19856), +PARTITION p2482 VALUES LESS THAN (19864), +PARTITION p2483 VALUES LESS THAN (19872), +PARTITION p2484 VALUES LESS THAN (19880), +PARTITION p2485 VALUES LESS THAN (19888), +PARTITION p2486 VALUES LESS THAN (19896), +PARTITION p2487 VALUES LESS THAN (19904), +PARTITION p2488 VALUES LESS THAN (19912), +PARTITION p2489 VALUES LESS THAN (19920), +PARTITION p2490 VALUES LESS THAN (19928), +PARTITION p2491 VALUES LESS THAN (19936), +PARTITION p2492 VALUES LESS THAN (19944), +PARTITION p2493 VALUES LESS THAN (19952), +PARTITION p2494 VALUES LESS THAN (19960), +PARTITION p2495 VALUES LESS THAN (19968), +PARTITION p2496 VALUES LESS THAN (19976), +PARTITION p2497 VALUES LESS THAN (19984), +PARTITION p2498 VALUES LESS THAN (19992), +PARTITION p2499 VALUES LESS THAN (20000), +PARTITION p2500 VALUES LESS THAN (20008), +PARTITION p2501 VALUES LESS THAN (20016), +PARTITION p2502 VALUES LESS THAN (20024), +PARTITION p2503 VALUES LESS THAN (20032), +PARTITION p2504 VALUES LESS THAN (20040), +PARTITION p2505 VALUES LESS THAN (20048), +PARTITION p2506 VALUES LESS THAN (20056), +PARTITION p2507 VALUES LESS THAN (20064), +PARTITION p2508 VALUES LESS THAN (20072), +PARTITION p2509 VALUES LESS THAN (20080), +PARTITION p2510 VALUES LESS THAN (20088), +PARTITION p2511 VALUES LESS THAN (20096), +PARTITION p2512 VALUES LESS THAN (20104), +PARTITION p2513 VALUES LESS THAN (20112), +PARTITION p2514 VALUES LESS THAN (20120), +PARTITION p2515 VALUES LESS THAN (20128), +PARTITION p2516 VALUES LESS THAN (20136), +PARTITION p2517 VALUES LESS THAN (20144), +PARTITION p2518 VALUES LESS THAN (20152), +PARTITION p2519 VALUES LESS THAN (20160), +PARTITION p2520 VALUES LESS THAN (20168), +PARTITION p2521 VALUES LESS THAN (20176), +PARTITION p2522 VALUES LESS THAN (20184), +PARTITION p2523 VALUES LESS THAN (20192), +PARTITION p2524 VALUES LESS THAN (20200), +PARTITION p2525 VALUES LESS THAN (20208), +PARTITION p2526 VALUES LESS THAN (20216), +PARTITION p2527 VALUES LESS THAN (20224), +PARTITION p2528 VALUES LESS THAN (20232), +PARTITION p2529 VALUES LESS THAN (20240), +PARTITION p2530 VALUES LESS THAN (20248), +PARTITION p2531 VALUES LESS THAN (20256), +PARTITION p2532 VALUES LESS THAN (20264), +PARTITION p2533 VALUES LESS THAN (20272), +PARTITION p2534 VALUES LESS THAN (20280), +PARTITION p2535 VALUES LESS THAN (20288), +PARTITION p2536 VALUES LESS THAN (20296), +PARTITION p2537 VALUES LESS THAN (20304), +PARTITION p2538 VALUES LESS THAN (20312), +PARTITION p2539 VALUES LESS THAN (20320), +PARTITION p2540 VALUES LESS THAN (20328), +PARTITION p2541 VALUES LESS THAN (20336), +PARTITION p2542 VALUES LESS THAN (20344), +PARTITION p2543 VALUES LESS THAN (20352), +PARTITION p2544 VALUES LESS THAN (20360), +PARTITION p2545 VALUES LESS THAN (20368), +PARTITION p2546 VALUES LESS THAN (20376), +PARTITION p2547 VALUES LESS THAN (20384), +PARTITION p2548 VALUES LESS THAN (20392), +PARTITION p2549 VALUES LESS THAN (20400), +PARTITION p2550 VALUES LESS THAN (20408), +PARTITION p2551 VALUES LESS THAN (20416), +PARTITION p2552 VALUES LESS THAN (20424), +PARTITION p2553 VALUES LESS THAN (20432), +PARTITION p2554 VALUES LESS THAN (20440), +PARTITION p2555 VALUES LESS THAN (20448), +PARTITION p2556 VALUES LESS THAN (20456), +PARTITION p2557 VALUES LESS THAN (20464), +PARTITION p2558 VALUES LESS THAN (20472), +PARTITION p2559 VALUES LESS THAN (20480), +PARTITION p2560 VALUES LESS THAN (20488), +PARTITION p2561 VALUES LESS THAN (20496), +PARTITION p2562 VALUES LESS THAN (20504), +PARTITION p2563 VALUES LESS THAN (20512), +PARTITION p2564 VALUES LESS THAN (20520), +PARTITION p2565 VALUES LESS THAN (20528), +PARTITION p2566 VALUES LESS THAN (20536), +PARTITION p2567 VALUES LESS THAN (20544), +PARTITION p2568 VALUES LESS THAN (20552), +PARTITION p2569 VALUES LESS THAN (20560), +PARTITION p2570 VALUES LESS THAN (20568), +PARTITION p2571 VALUES LESS THAN (20576), +PARTITION p2572 VALUES LESS THAN (20584), +PARTITION p2573 VALUES LESS THAN (20592), +PARTITION p2574 VALUES LESS THAN (20600), +PARTITION p2575 VALUES LESS THAN (20608), +PARTITION p2576 VALUES LESS THAN (20616), +PARTITION p2577 VALUES LESS THAN (20624), +PARTITION p2578 VALUES LESS THAN (20632), +PARTITION p2579 VALUES LESS THAN (20640), +PARTITION p2580 VALUES LESS THAN (20648), +PARTITION p2581 VALUES LESS THAN (20656), +PARTITION p2582 VALUES LESS THAN (20664), +PARTITION p2583 VALUES LESS THAN (20672), +PARTITION p2584 VALUES LESS THAN (20680), +PARTITION p2585 VALUES LESS THAN (20688), +PARTITION p2586 VALUES LESS THAN (20696), +PARTITION p2587 VALUES LESS THAN (20704), +PARTITION p2588 VALUES LESS THAN (20712), +PARTITION p2589 VALUES LESS THAN (20720), +PARTITION p2590 VALUES LESS THAN (20728), +PARTITION p2591 VALUES LESS THAN (20736), +PARTITION p2592 VALUES LESS THAN (20744), +PARTITION p2593 VALUES LESS THAN (20752), +PARTITION p2594 VALUES LESS THAN (20760), +PARTITION p2595 VALUES LESS THAN (20768), +PARTITION p2596 VALUES LESS THAN (20776), +PARTITION p2597 VALUES LESS THAN (20784), +PARTITION p2598 VALUES LESS THAN (20792), +PARTITION p2599 VALUES LESS THAN (20800), +PARTITION p2600 VALUES LESS THAN (20808), +PARTITION p2601 VALUES LESS THAN (20816), +PARTITION p2602 VALUES LESS THAN (20824), +PARTITION p2603 VALUES LESS THAN (20832), +PARTITION p2604 VALUES LESS THAN (20840), +PARTITION p2605 VALUES LESS THAN (20848), +PARTITION p2606 VALUES LESS THAN (20856), +PARTITION p2607 VALUES LESS THAN (20864), +PARTITION p2608 VALUES LESS THAN (20872), +PARTITION p2609 VALUES LESS THAN (20880), +PARTITION p2610 VALUES LESS THAN (20888), +PARTITION p2611 VALUES LESS THAN (20896), +PARTITION p2612 VALUES LESS THAN (20904), +PARTITION p2613 VALUES LESS THAN (20912), +PARTITION p2614 VALUES LESS THAN (20920), +PARTITION p2615 VALUES LESS THAN (20928), +PARTITION p2616 VALUES LESS THAN (20936), +PARTITION p2617 VALUES LESS THAN (20944), +PARTITION p2618 VALUES LESS THAN (20952), +PARTITION p2619 VALUES LESS THAN (20960), +PARTITION p2620 VALUES LESS THAN (20968), +PARTITION p2621 VALUES LESS THAN (20976), +PARTITION p2622 VALUES LESS THAN (20984), +PARTITION p2623 VALUES LESS THAN (20992), +PARTITION p2624 VALUES LESS THAN (21000), +PARTITION p2625 VALUES LESS THAN (21008), +PARTITION p2626 VALUES LESS THAN (21016), +PARTITION p2627 VALUES LESS THAN (21024), +PARTITION p2628 VALUES LESS THAN (21032), +PARTITION p2629 VALUES LESS THAN (21040), +PARTITION p2630 VALUES LESS THAN (21048), +PARTITION p2631 VALUES LESS THAN (21056), +PARTITION p2632 VALUES LESS THAN (21064), +PARTITION p2633 VALUES LESS THAN (21072), +PARTITION p2634 VALUES LESS THAN (21080), +PARTITION p2635 VALUES LESS THAN (21088), +PARTITION p2636 VALUES LESS THAN (21096), +PARTITION p2637 VALUES LESS THAN (21104), +PARTITION p2638 VALUES LESS THAN (21112), +PARTITION p2639 VALUES LESS THAN (21120), +PARTITION p2640 VALUES LESS THAN (21128), +PARTITION p2641 VALUES LESS THAN (21136), +PARTITION p2642 VALUES LESS THAN (21144), +PARTITION p2643 VALUES LESS THAN (21152), +PARTITION p2644 VALUES LESS THAN (21160), +PARTITION p2645 VALUES LESS THAN (21168), +PARTITION p2646 VALUES LESS THAN (21176), +PARTITION p2647 VALUES LESS THAN (21184), +PARTITION p2648 VALUES LESS THAN (21192), +PARTITION p2649 VALUES LESS THAN (21200), +PARTITION p2650 VALUES LESS THAN (21208), +PARTITION p2651 VALUES LESS THAN (21216), +PARTITION p2652 VALUES LESS THAN (21224), +PARTITION p2653 VALUES LESS THAN (21232), +PARTITION p2654 VALUES LESS THAN (21240), +PARTITION p2655 VALUES LESS THAN (21248), +PARTITION p2656 VALUES LESS THAN (21256), +PARTITION p2657 VALUES LESS THAN (21264), +PARTITION p2658 VALUES LESS THAN (21272), +PARTITION p2659 VALUES LESS THAN (21280), +PARTITION p2660 VALUES LESS THAN (21288), +PARTITION p2661 VALUES LESS THAN (21296), +PARTITION p2662 VALUES LESS THAN (21304), +PARTITION p2663 VALUES LESS THAN (21312), +PARTITION p2664 VALUES LESS THAN (21320), +PARTITION p2665 VALUES LESS THAN (21328), +PARTITION p2666 VALUES LESS THAN (21336), +PARTITION p2667 VALUES LESS THAN (21344), +PARTITION p2668 VALUES LESS THAN (21352), +PARTITION p2669 VALUES LESS THAN (21360), +PARTITION p2670 VALUES LESS THAN (21368), +PARTITION p2671 VALUES LESS THAN (21376), +PARTITION p2672 VALUES LESS THAN (21384), +PARTITION p2673 VALUES LESS THAN (21392), +PARTITION p2674 VALUES LESS THAN (21400), +PARTITION p2675 VALUES LESS THAN (21408), +PARTITION p2676 VALUES LESS THAN (21416), +PARTITION p2677 VALUES LESS THAN (21424), +PARTITION p2678 VALUES LESS THAN (21432), +PARTITION p2679 VALUES LESS THAN (21440), +PARTITION p2680 VALUES LESS THAN (21448), +PARTITION p2681 VALUES LESS THAN (21456), +PARTITION p2682 VALUES LESS THAN (21464), +PARTITION p2683 VALUES LESS THAN (21472), +PARTITION p2684 VALUES LESS THAN (21480), +PARTITION p2685 VALUES LESS THAN (21488), +PARTITION p2686 VALUES LESS THAN (21496), +PARTITION p2687 VALUES LESS THAN (21504), +PARTITION p2688 VALUES LESS THAN (21512), +PARTITION p2689 VALUES LESS THAN (21520), +PARTITION p2690 VALUES LESS THAN (21528), +PARTITION p2691 VALUES LESS THAN (21536), +PARTITION p2692 VALUES LESS THAN (21544), +PARTITION p2693 VALUES LESS THAN (21552), +PARTITION p2694 VALUES LESS THAN (21560), +PARTITION p2695 VALUES LESS THAN (21568), +PARTITION p2696 VALUES LESS THAN (21576), +PARTITION p2697 VALUES LESS THAN (21584), +PARTITION p2698 VALUES LESS THAN (21592), +PARTITION p2699 VALUES LESS THAN (21600), +PARTITION p2700 VALUES LESS THAN (21608), +PARTITION p2701 VALUES LESS THAN (21616), +PARTITION p2702 VALUES LESS THAN (21624), +PARTITION p2703 VALUES LESS THAN (21632), +PARTITION p2704 VALUES LESS THAN (21640), +PARTITION p2705 VALUES LESS THAN (21648), +PARTITION p2706 VALUES LESS THAN (21656), +PARTITION p2707 VALUES LESS THAN (21664), +PARTITION p2708 VALUES LESS THAN (21672), +PARTITION p2709 VALUES LESS THAN (21680), +PARTITION p2710 VALUES LESS THAN (21688), +PARTITION p2711 VALUES LESS THAN (21696), +PARTITION p2712 VALUES LESS THAN (21704), +PARTITION p2713 VALUES LESS THAN (21712), +PARTITION p2714 VALUES LESS THAN (21720), +PARTITION p2715 VALUES LESS THAN (21728), +PARTITION p2716 VALUES LESS THAN (21736), +PARTITION p2717 VALUES LESS THAN (21744), +PARTITION p2718 VALUES LESS THAN (21752), +PARTITION p2719 VALUES LESS THAN (21760), +PARTITION p2720 VALUES LESS THAN (21768), +PARTITION p2721 VALUES LESS THAN (21776), +PARTITION p2722 VALUES LESS THAN (21784), +PARTITION p2723 VALUES LESS THAN (21792), +PARTITION p2724 VALUES LESS THAN (21800), +PARTITION p2725 VALUES LESS THAN (21808), +PARTITION p2726 VALUES LESS THAN (21816), +PARTITION p2727 VALUES LESS THAN (21824), +PARTITION p2728 VALUES LESS THAN (21832), +PARTITION p2729 VALUES LESS THAN (21840), +PARTITION p2730 VALUES LESS THAN (21848), +PARTITION p2731 VALUES LESS THAN (21856), +PARTITION p2732 VALUES LESS THAN (21864), +PARTITION p2733 VALUES LESS THAN (21872), +PARTITION p2734 VALUES LESS THAN (21880), +PARTITION p2735 VALUES LESS THAN (21888), +PARTITION p2736 VALUES LESS THAN (21896), +PARTITION p2737 VALUES LESS THAN (21904), +PARTITION p2738 VALUES LESS THAN (21912), +PARTITION p2739 VALUES LESS THAN (21920), +PARTITION p2740 VALUES LESS THAN (21928), +PARTITION p2741 VALUES LESS THAN (21936), +PARTITION p2742 VALUES LESS THAN (21944), +PARTITION p2743 VALUES LESS THAN (21952), +PARTITION p2744 VALUES LESS THAN (21960), +PARTITION p2745 VALUES LESS THAN (21968), +PARTITION p2746 VALUES LESS THAN (21976), +PARTITION p2747 VALUES LESS THAN (21984), +PARTITION p2748 VALUES LESS THAN (21992), +PARTITION p2749 VALUES LESS THAN (22000), +PARTITION p2750 VALUES LESS THAN (22008), +PARTITION p2751 VALUES LESS THAN (22016), +PARTITION p2752 VALUES LESS THAN (22024), +PARTITION p2753 VALUES LESS THAN (22032), +PARTITION p2754 VALUES LESS THAN (22040), +PARTITION p2755 VALUES LESS THAN (22048), +PARTITION p2756 VALUES LESS THAN (22056), +PARTITION p2757 VALUES LESS THAN (22064), +PARTITION p2758 VALUES LESS THAN (22072), +PARTITION p2759 VALUES LESS THAN (22080), +PARTITION p2760 VALUES LESS THAN (22088), +PARTITION p2761 VALUES LESS THAN (22096), +PARTITION p2762 VALUES LESS THAN (22104), +PARTITION p2763 VALUES LESS THAN (22112), +PARTITION p2764 VALUES LESS THAN (22120), +PARTITION p2765 VALUES LESS THAN (22128), +PARTITION p2766 VALUES LESS THAN (22136), +PARTITION p2767 VALUES LESS THAN (22144), +PARTITION p2768 VALUES LESS THAN (22152), +PARTITION p2769 VALUES LESS THAN (22160), +PARTITION p2770 VALUES LESS THAN (22168), +PARTITION p2771 VALUES LESS THAN (22176), +PARTITION p2772 VALUES LESS THAN (22184), +PARTITION p2773 VALUES LESS THAN (22192), +PARTITION p2774 VALUES LESS THAN (22200), +PARTITION p2775 VALUES LESS THAN (22208), +PARTITION p2776 VALUES LESS THAN (22216), +PARTITION p2777 VALUES LESS THAN (22224), +PARTITION p2778 VALUES LESS THAN (22232), +PARTITION p2779 VALUES LESS THAN (22240), +PARTITION p2780 VALUES LESS THAN (22248), +PARTITION p2781 VALUES LESS THAN (22256), +PARTITION p2782 VALUES LESS THAN (22264), +PARTITION p2783 VALUES LESS THAN (22272), +PARTITION p2784 VALUES LESS THAN (22280), +PARTITION p2785 VALUES LESS THAN (22288), +PARTITION p2786 VALUES LESS THAN (22296), +PARTITION p2787 VALUES LESS THAN (22304), +PARTITION p2788 VALUES LESS THAN (22312), +PARTITION p2789 VALUES LESS THAN (22320), +PARTITION p2790 VALUES LESS THAN (22328), +PARTITION p2791 VALUES LESS THAN (22336), +PARTITION p2792 VALUES LESS THAN (22344), +PARTITION p2793 VALUES LESS THAN (22352), +PARTITION p2794 VALUES LESS THAN (22360), +PARTITION p2795 VALUES LESS THAN (22368), +PARTITION p2796 VALUES LESS THAN (22376), +PARTITION p2797 VALUES LESS THAN (22384), +PARTITION p2798 VALUES LESS THAN (22392), +PARTITION p2799 VALUES LESS THAN (22400), +PARTITION p2800 VALUES LESS THAN (22408), +PARTITION p2801 VALUES LESS THAN (22416), +PARTITION p2802 VALUES LESS THAN (22424), +PARTITION p2803 VALUES LESS THAN (22432), +PARTITION p2804 VALUES LESS THAN (22440), +PARTITION p2805 VALUES LESS THAN (22448), +PARTITION p2806 VALUES LESS THAN (22456), +PARTITION p2807 VALUES LESS THAN (22464), +PARTITION p2808 VALUES LESS THAN (22472), +PARTITION p2809 VALUES LESS THAN (22480), +PARTITION p2810 VALUES LESS THAN (22488), +PARTITION p2811 VALUES LESS THAN (22496), +PARTITION p2812 VALUES LESS THAN (22504), +PARTITION p2813 VALUES LESS THAN (22512), +PARTITION p2814 VALUES LESS THAN (22520), +PARTITION p2815 VALUES LESS THAN (22528), +PARTITION p2816 VALUES LESS THAN (22536), +PARTITION p2817 VALUES LESS THAN (22544), +PARTITION p2818 VALUES LESS THAN (22552), +PARTITION p2819 VALUES LESS THAN (22560), +PARTITION p2820 VALUES LESS THAN (22568), +PARTITION p2821 VALUES LESS THAN (22576), +PARTITION p2822 VALUES LESS THAN (22584), +PARTITION p2823 VALUES LESS THAN (22592), +PARTITION p2824 VALUES LESS THAN (22600), +PARTITION p2825 VALUES LESS THAN (22608), +PARTITION p2826 VALUES LESS THAN (22616), +PARTITION p2827 VALUES LESS THAN (22624), +PARTITION p2828 VALUES LESS THAN (22632), +PARTITION p2829 VALUES LESS THAN (22640), +PARTITION p2830 VALUES LESS THAN (22648), +PARTITION p2831 VALUES LESS THAN (22656), +PARTITION p2832 VALUES LESS THAN (22664), +PARTITION p2833 VALUES LESS THAN (22672), +PARTITION p2834 VALUES LESS THAN (22680), +PARTITION p2835 VALUES LESS THAN (22688), +PARTITION p2836 VALUES LESS THAN (22696), +PARTITION p2837 VALUES LESS THAN (22704), +PARTITION p2838 VALUES LESS THAN (22712), +PARTITION p2839 VALUES LESS THAN (22720), +PARTITION p2840 VALUES LESS THAN (22728), +PARTITION p2841 VALUES LESS THAN (22736), +PARTITION p2842 VALUES LESS THAN (22744), +PARTITION p2843 VALUES LESS THAN (22752), +PARTITION p2844 VALUES LESS THAN (22760), +PARTITION p2845 VALUES LESS THAN (22768), +PARTITION p2846 VALUES LESS THAN (22776), +PARTITION p2847 VALUES LESS THAN (22784), +PARTITION p2848 VALUES LESS THAN (22792), +PARTITION p2849 VALUES LESS THAN (22800), +PARTITION p2850 VALUES LESS THAN (22808), +PARTITION p2851 VALUES LESS THAN (22816), +PARTITION p2852 VALUES LESS THAN (22824), +PARTITION p2853 VALUES LESS THAN (22832), +PARTITION p2854 VALUES LESS THAN (22840), +PARTITION p2855 VALUES LESS THAN (22848), +PARTITION p2856 VALUES LESS THAN (22856), +PARTITION p2857 VALUES LESS THAN (22864), +PARTITION p2858 VALUES LESS THAN (22872), +PARTITION p2859 VALUES LESS THAN (22880), +PARTITION p2860 VALUES LESS THAN (22888), +PARTITION p2861 VALUES LESS THAN (22896), +PARTITION p2862 VALUES LESS THAN (22904), +PARTITION p2863 VALUES LESS THAN (22912), +PARTITION p2864 VALUES LESS THAN (22920), +PARTITION p2865 VALUES LESS THAN (22928), +PARTITION p2866 VALUES LESS THAN (22936), +PARTITION p2867 VALUES LESS THAN (22944), +PARTITION p2868 VALUES LESS THAN (22952), +PARTITION p2869 VALUES LESS THAN (22960), +PARTITION p2870 VALUES LESS THAN (22968), +PARTITION p2871 VALUES LESS THAN (22976), +PARTITION p2872 VALUES LESS THAN (22984), +PARTITION p2873 VALUES LESS THAN (22992), +PARTITION p2874 VALUES LESS THAN (23000), +PARTITION p2875 VALUES LESS THAN (23008), +PARTITION p2876 VALUES LESS THAN (23016), +PARTITION p2877 VALUES LESS THAN (23024), +PARTITION p2878 VALUES LESS THAN (23032), +PARTITION p2879 VALUES LESS THAN (23040), +PARTITION p2880 VALUES LESS THAN (23048), +PARTITION p2881 VALUES LESS THAN (23056), +PARTITION p2882 VALUES LESS THAN (23064), +PARTITION p2883 VALUES LESS THAN (23072), +PARTITION p2884 VALUES LESS THAN (23080), +PARTITION p2885 VALUES LESS THAN (23088), +PARTITION p2886 VALUES LESS THAN (23096), +PARTITION p2887 VALUES LESS THAN (23104), +PARTITION p2888 VALUES LESS THAN (23112), +PARTITION p2889 VALUES LESS THAN (23120), +PARTITION p2890 VALUES LESS THAN (23128), +PARTITION p2891 VALUES LESS THAN (23136), +PARTITION p2892 VALUES LESS THAN (23144), +PARTITION p2893 VALUES LESS THAN (23152), +PARTITION p2894 VALUES LESS THAN (23160), +PARTITION p2895 VALUES LESS THAN (23168), +PARTITION p2896 VALUES LESS THAN (23176), +PARTITION p2897 VALUES LESS THAN (23184), +PARTITION p2898 VALUES LESS THAN (23192), +PARTITION p2899 VALUES LESS THAN (23200), +PARTITION p2900 VALUES LESS THAN (23208), +PARTITION p2901 VALUES LESS THAN (23216), +PARTITION p2902 VALUES LESS THAN (23224), +PARTITION p2903 VALUES LESS THAN (23232), +PARTITION p2904 VALUES LESS THAN (23240), +PARTITION p2905 VALUES LESS THAN (23248), +PARTITION p2906 VALUES LESS THAN (23256), +PARTITION p2907 VALUES LESS THAN (23264), +PARTITION p2908 VALUES LESS THAN (23272), +PARTITION p2909 VALUES LESS THAN (23280), +PARTITION p2910 VALUES LESS THAN (23288), +PARTITION p2911 VALUES LESS THAN (23296), +PARTITION p2912 VALUES LESS THAN (23304), +PARTITION p2913 VALUES LESS THAN (23312), +PARTITION p2914 VALUES LESS THAN (23320), +PARTITION p2915 VALUES LESS THAN (23328), +PARTITION p2916 VALUES LESS THAN (23336), +PARTITION p2917 VALUES LESS THAN (23344), +PARTITION p2918 VALUES LESS THAN (23352), +PARTITION p2919 VALUES LESS THAN (23360), +PARTITION p2920 VALUES LESS THAN (23368), +PARTITION p2921 VALUES LESS THAN (23376), +PARTITION p2922 VALUES LESS THAN (23384), +PARTITION p2923 VALUES LESS THAN (23392), +PARTITION p2924 VALUES LESS THAN (23400), +PARTITION p2925 VALUES LESS THAN (23408), +PARTITION p2926 VALUES LESS THAN (23416), +PARTITION p2927 VALUES LESS THAN (23424), +PARTITION p2928 VALUES LESS THAN (23432), +PARTITION p2929 VALUES LESS THAN (23440), +PARTITION p2930 VALUES LESS THAN (23448), +PARTITION p2931 VALUES LESS THAN (23456), +PARTITION p2932 VALUES LESS THAN (23464), +PARTITION p2933 VALUES LESS THAN (23472), +PARTITION p2934 VALUES LESS THAN (23480), +PARTITION p2935 VALUES LESS THAN (23488), +PARTITION p2936 VALUES LESS THAN (23496), +PARTITION p2937 VALUES LESS THAN (23504), +PARTITION p2938 VALUES LESS THAN (23512), +PARTITION p2939 VALUES LESS THAN (23520), +PARTITION p2940 VALUES LESS THAN (23528), +PARTITION p2941 VALUES LESS THAN (23536), +PARTITION p2942 VALUES LESS THAN (23544), +PARTITION p2943 VALUES LESS THAN (23552), +PARTITION p2944 VALUES LESS THAN (23560), +PARTITION p2945 VALUES LESS THAN (23568), +PARTITION p2946 VALUES LESS THAN (23576), +PARTITION p2947 VALUES LESS THAN (23584), +PARTITION p2948 VALUES LESS THAN (23592), +PARTITION p2949 VALUES LESS THAN (23600), +PARTITION p2950 VALUES LESS THAN (23608), +PARTITION p2951 VALUES LESS THAN (23616), +PARTITION p2952 VALUES LESS THAN (23624), +PARTITION p2953 VALUES LESS THAN (23632), +PARTITION p2954 VALUES LESS THAN (23640), +PARTITION p2955 VALUES LESS THAN (23648), +PARTITION p2956 VALUES LESS THAN (23656), +PARTITION p2957 VALUES LESS THAN (23664), +PARTITION p2958 VALUES LESS THAN (23672), +PARTITION p2959 VALUES LESS THAN (23680), +PARTITION p2960 VALUES LESS THAN (23688), +PARTITION p2961 VALUES LESS THAN (23696), +PARTITION p2962 VALUES LESS THAN (23704), +PARTITION p2963 VALUES LESS THAN (23712), +PARTITION p2964 VALUES LESS THAN (23720), +PARTITION p2965 VALUES LESS THAN (23728), +PARTITION p2966 VALUES LESS THAN (23736), +PARTITION p2967 VALUES LESS THAN (23744), +PARTITION p2968 VALUES LESS THAN (23752), +PARTITION p2969 VALUES LESS THAN (23760), +PARTITION p2970 VALUES LESS THAN (23768), +PARTITION p2971 VALUES LESS THAN (23776), +PARTITION p2972 VALUES LESS THAN (23784), +PARTITION p2973 VALUES LESS THAN (23792), +PARTITION p2974 VALUES LESS THAN (23800), +PARTITION p2975 VALUES LESS THAN (23808), +PARTITION p2976 VALUES LESS THAN (23816), +PARTITION p2977 VALUES LESS THAN (23824), +PARTITION p2978 VALUES LESS THAN (23832), +PARTITION p2979 VALUES LESS THAN (23840), +PARTITION p2980 VALUES LESS THAN (23848), +PARTITION p2981 VALUES LESS THAN (23856), +PARTITION p2982 VALUES LESS THAN (23864), +PARTITION p2983 VALUES LESS THAN (23872), +PARTITION p2984 VALUES LESS THAN (23880), +PARTITION p2985 VALUES LESS THAN (23888), +PARTITION p2986 VALUES LESS THAN (23896), +PARTITION p2987 VALUES LESS THAN (23904), +PARTITION p2988 VALUES LESS THAN (23912), +PARTITION p2989 VALUES LESS THAN (23920), +PARTITION p2990 VALUES LESS THAN (23928), +PARTITION p2991 VALUES LESS THAN (23936), +PARTITION p2992 VALUES LESS THAN (23944), +PARTITION p2993 VALUES LESS THAN (23952), +PARTITION p2994 VALUES LESS THAN (23960), +PARTITION p2995 VALUES LESS THAN (23968), +PARTITION p2996 VALUES LESS THAN (23976), +PARTITION p2997 VALUES LESS THAN (23984), +PARTITION p2998 VALUES LESS THAN (23992), +PARTITION p2999 VALUES LESS THAN (24000), +PARTITION p3000 VALUES LESS THAN (24008), +PARTITION p3001 VALUES LESS THAN (24016), +PARTITION p3002 VALUES LESS THAN (24024), +PARTITION p3003 VALUES LESS THAN (24032), +PARTITION p3004 VALUES LESS THAN (24040), +PARTITION p3005 VALUES LESS THAN (24048), +PARTITION p3006 VALUES LESS THAN (24056), +PARTITION p3007 VALUES LESS THAN (24064), +PARTITION p3008 VALUES LESS THAN (24072), +PARTITION p3009 VALUES LESS THAN (24080), +PARTITION p3010 VALUES LESS THAN (24088), +PARTITION p3011 VALUES LESS THAN (24096), +PARTITION p3012 VALUES LESS THAN (24104), +PARTITION p3013 VALUES LESS THAN (24112), +PARTITION p3014 VALUES LESS THAN (24120), +PARTITION p3015 VALUES LESS THAN (24128), +PARTITION p3016 VALUES LESS THAN (24136), +PARTITION p3017 VALUES LESS THAN (24144), +PARTITION p3018 VALUES LESS THAN (24152), +PARTITION p3019 VALUES LESS THAN (24160), +PARTITION p3020 VALUES LESS THAN (24168), +PARTITION p3021 VALUES LESS THAN (24176), +PARTITION p3022 VALUES LESS THAN (24184), +PARTITION p3023 VALUES LESS THAN (24192), +PARTITION p3024 VALUES LESS THAN (24200), +PARTITION p3025 VALUES LESS THAN (24208), +PARTITION p3026 VALUES LESS THAN (24216), +PARTITION p3027 VALUES LESS THAN (24224), +PARTITION p3028 VALUES LESS THAN (24232), +PARTITION p3029 VALUES LESS THAN (24240), +PARTITION p3030 VALUES LESS THAN (24248), +PARTITION p3031 VALUES LESS THAN (24256), +PARTITION p3032 VALUES LESS THAN (24264), +PARTITION p3033 VALUES LESS THAN (24272), +PARTITION p3034 VALUES LESS THAN (24280), +PARTITION p3035 VALUES LESS THAN (24288), +PARTITION p3036 VALUES LESS THAN (24296), +PARTITION p3037 VALUES LESS THAN (24304), +PARTITION p3038 VALUES LESS THAN (24312), +PARTITION p3039 VALUES LESS THAN (24320), +PARTITION p3040 VALUES LESS THAN (24328), +PARTITION p3041 VALUES LESS THAN (24336), +PARTITION p3042 VALUES LESS THAN (24344), +PARTITION p3043 VALUES LESS THAN (24352), +PARTITION p3044 VALUES LESS THAN (24360), +PARTITION p3045 VALUES LESS THAN (24368), +PARTITION p3046 VALUES LESS THAN (24376), +PARTITION p3047 VALUES LESS THAN (24384), +PARTITION p3048 VALUES LESS THAN (24392), +PARTITION p3049 VALUES LESS THAN (24400), +PARTITION p3050 VALUES LESS THAN (24408), +PARTITION p3051 VALUES LESS THAN (24416), +PARTITION p3052 VALUES LESS THAN (24424), +PARTITION p3053 VALUES LESS THAN (24432), +PARTITION p3054 VALUES LESS THAN (24440), +PARTITION p3055 VALUES LESS THAN (24448), +PARTITION p3056 VALUES LESS THAN (24456), +PARTITION p3057 VALUES LESS THAN (24464), +PARTITION p3058 VALUES LESS THAN (24472), +PARTITION p3059 VALUES LESS THAN (24480), +PARTITION p3060 VALUES LESS THAN (24488), +PARTITION p3061 VALUES LESS THAN (24496), +PARTITION p3062 VALUES LESS THAN (24504), +PARTITION p3063 VALUES LESS THAN (24512), +PARTITION p3064 VALUES LESS THAN (24520), +PARTITION p3065 VALUES LESS THAN (24528), +PARTITION p3066 VALUES LESS THAN (24536), +PARTITION p3067 VALUES LESS THAN (24544), +PARTITION p3068 VALUES LESS THAN (24552), +PARTITION p3069 VALUES LESS THAN (24560), +PARTITION p3070 VALUES LESS THAN (24568), +PARTITION p3071 VALUES LESS THAN (24576), +PARTITION p3072 VALUES LESS THAN (24584), +PARTITION p3073 VALUES LESS THAN (24592), +PARTITION p3074 VALUES LESS THAN (24600), +PARTITION p3075 VALUES LESS THAN (24608), +PARTITION p3076 VALUES LESS THAN (24616), +PARTITION p3077 VALUES LESS THAN (24624), +PARTITION p3078 VALUES LESS THAN (24632), +PARTITION p3079 VALUES LESS THAN (24640), +PARTITION p3080 VALUES LESS THAN (24648), +PARTITION p3081 VALUES LESS THAN (24656), +PARTITION p3082 VALUES LESS THAN (24664), +PARTITION p3083 VALUES LESS THAN (24672), +PARTITION p3084 VALUES LESS THAN (24680), +PARTITION p3085 VALUES LESS THAN (24688), +PARTITION p3086 VALUES LESS THAN (24696), +PARTITION p3087 VALUES LESS THAN (24704), +PARTITION p3088 VALUES LESS THAN (24712), +PARTITION p3089 VALUES LESS THAN (24720), +PARTITION p3090 VALUES LESS THAN (24728), +PARTITION p3091 VALUES LESS THAN (24736), +PARTITION p3092 VALUES LESS THAN (24744), +PARTITION p3093 VALUES LESS THAN (24752), +PARTITION p3094 VALUES LESS THAN (24760), +PARTITION p3095 VALUES LESS THAN (24768), +PARTITION p3096 VALUES LESS THAN (24776), +PARTITION p3097 VALUES LESS THAN (24784), +PARTITION p3098 VALUES LESS THAN (24792), +PARTITION p3099 VALUES LESS THAN (24800), +PARTITION p3100 VALUES LESS THAN (24808), +PARTITION p3101 VALUES LESS THAN (24816), +PARTITION p3102 VALUES LESS THAN (24824), +PARTITION p3103 VALUES LESS THAN (24832), +PARTITION p3104 VALUES LESS THAN (24840), +PARTITION p3105 VALUES LESS THAN (24848), +PARTITION p3106 VALUES LESS THAN (24856), +PARTITION p3107 VALUES LESS THAN (24864), +PARTITION p3108 VALUES LESS THAN (24872), +PARTITION p3109 VALUES LESS THAN (24880), +PARTITION p3110 VALUES LESS THAN (24888), +PARTITION p3111 VALUES LESS THAN (24896), +PARTITION p3112 VALUES LESS THAN (24904), +PARTITION p3113 VALUES LESS THAN (24912), +PARTITION p3114 VALUES LESS THAN (24920), +PARTITION p3115 VALUES LESS THAN (24928), +PARTITION p3116 VALUES LESS THAN (24936), +PARTITION p3117 VALUES LESS THAN (24944), +PARTITION p3118 VALUES LESS THAN (24952), +PARTITION p3119 VALUES LESS THAN (24960), +PARTITION p3120 VALUES LESS THAN (24968), +PARTITION p3121 VALUES LESS THAN (24976), +PARTITION p3122 VALUES LESS THAN (24984), +PARTITION p3123 VALUES LESS THAN (24992), +PARTITION p3124 VALUES LESS THAN (25000), +PARTITION p3125 VALUES LESS THAN (25008), +PARTITION p3126 VALUES LESS THAN (25016), +PARTITION p3127 VALUES LESS THAN (25024), +PARTITION p3128 VALUES LESS THAN (25032), +PARTITION p3129 VALUES LESS THAN (25040), +PARTITION p3130 VALUES LESS THAN (25048), +PARTITION p3131 VALUES LESS THAN (25056), +PARTITION p3132 VALUES LESS THAN (25064), +PARTITION p3133 VALUES LESS THAN (25072), +PARTITION p3134 VALUES LESS THAN (25080), +PARTITION p3135 VALUES LESS THAN (25088), +PARTITION p3136 VALUES LESS THAN (25096), +PARTITION p3137 VALUES LESS THAN (25104), +PARTITION p3138 VALUES LESS THAN (25112), +PARTITION p3139 VALUES LESS THAN (25120), +PARTITION p3140 VALUES LESS THAN (25128), +PARTITION p3141 VALUES LESS THAN (25136), +PARTITION p3142 VALUES LESS THAN (25144), +PARTITION p3143 VALUES LESS THAN (25152), +PARTITION p3144 VALUES LESS THAN (25160), +PARTITION p3145 VALUES LESS THAN (25168), +PARTITION p3146 VALUES LESS THAN (25176), +PARTITION p3147 VALUES LESS THAN (25184), +PARTITION p3148 VALUES LESS THAN (25192), +PARTITION p3149 VALUES LESS THAN (25200), +PARTITION p3150 VALUES LESS THAN (25208), +PARTITION p3151 VALUES LESS THAN (25216), +PARTITION p3152 VALUES LESS THAN (25224), +PARTITION p3153 VALUES LESS THAN (25232), +PARTITION p3154 VALUES LESS THAN (25240), +PARTITION p3155 VALUES LESS THAN (25248), +PARTITION p3156 VALUES LESS THAN (25256), +PARTITION p3157 VALUES LESS THAN (25264), +PARTITION p3158 VALUES LESS THAN (25272), +PARTITION p3159 VALUES LESS THAN (25280), +PARTITION p3160 VALUES LESS THAN (25288), +PARTITION p3161 VALUES LESS THAN (25296), +PARTITION p3162 VALUES LESS THAN (25304), +PARTITION p3163 VALUES LESS THAN (25312), +PARTITION p3164 VALUES LESS THAN (25320), +PARTITION p3165 VALUES LESS THAN (25328), +PARTITION p3166 VALUES LESS THAN (25336), +PARTITION p3167 VALUES LESS THAN (25344), +PARTITION p3168 VALUES LESS THAN (25352), +PARTITION p3169 VALUES LESS THAN (25360), +PARTITION p3170 VALUES LESS THAN (25368), +PARTITION p3171 VALUES LESS THAN (25376), +PARTITION p3172 VALUES LESS THAN (25384), +PARTITION p3173 VALUES LESS THAN (25392), +PARTITION p3174 VALUES LESS THAN (25400), +PARTITION p3175 VALUES LESS THAN (25408), +PARTITION p3176 VALUES LESS THAN (25416), +PARTITION p3177 VALUES LESS THAN (25424), +PARTITION p3178 VALUES LESS THAN (25432), +PARTITION p3179 VALUES LESS THAN (25440), +PARTITION p3180 VALUES LESS THAN (25448), +PARTITION p3181 VALUES LESS THAN (25456), +PARTITION p3182 VALUES LESS THAN (25464), +PARTITION p3183 VALUES LESS THAN (25472), +PARTITION p3184 VALUES LESS THAN (25480), +PARTITION p3185 VALUES LESS THAN (25488), +PARTITION p3186 VALUES LESS THAN (25496), +PARTITION p3187 VALUES LESS THAN (25504), +PARTITION p3188 VALUES LESS THAN (25512), +PARTITION p3189 VALUES LESS THAN (25520), +PARTITION p3190 VALUES LESS THAN (25528), +PARTITION p3191 VALUES LESS THAN (25536), +PARTITION p3192 VALUES LESS THAN (25544), +PARTITION p3193 VALUES LESS THAN (25552), +PARTITION p3194 VALUES LESS THAN (25560), +PARTITION p3195 VALUES LESS THAN (25568), +PARTITION p3196 VALUES LESS THAN (25576), +PARTITION p3197 VALUES LESS THAN (25584), +PARTITION p3198 VALUES LESS THAN (25592), +PARTITION p3199 VALUES LESS THAN (25600), +PARTITION p3200 VALUES LESS THAN (25608), +PARTITION p3201 VALUES LESS THAN (25616), +PARTITION p3202 VALUES LESS THAN (25624), +PARTITION p3203 VALUES LESS THAN (25632), +PARTITION p3204 VALUES LESS THAN (25640), +PARTITION p3205 VALUES LESS THAN (25648), +PARTITION p3206 VALUES LESS THAN (25656), +PARTITION p3207 VALUES LESS THAN (25664), +PARTITION p3208 VALUES LESS THAN (25672), +PARTITION p3209 VALUES LESS THAN (25680), +PARTITION p3210 VALUES LESS THAN (25688), +PARTITION p3211 VALUES LESS THAN (25696), +PARTITION p3212 VALUES LESS THAN (25704), +PARTITION p3213 VALUES LESS THAN (25712), +PARTITION p3214 VALUES LESS THAN (25720), +PARTITION p3215 VALUES LESS THAN (25728), +PARTITION p3216 VALUES LESS THAN (25736), +PARTITION p3217 VALUES LESS THAN (25744), +PARTITION p3218 VALUES LESS THAN (25752), +PARTITION p3219 VALUES LESS THAN (25760), +PARTITION p3220 VALUES LESS THAN (25768), +PARTITION p3221 VALUES LESS THAN (25776), +PARTITION p3222 VALUES LESS THAN (25784), +PARTITION p3223 VALUES LESS THAN (25792), +PARTITION p3224 VALUES LESS THAN (25800), +PARTITION p3225 VALUES LESS THAN (25808), +PARTITION p3226 VALUES LESS THAN (25816), +PARTITION p3227 VALUES LESS THAN (25824), +PARTITION p3228 VALUES LESS THAN (25832), +PARTITION p3229 VALUES LESS THAN (25840), +PARTITION p3230 VALUES LESS THAN (25848), +PARTITION p3231 VALUES LESS THAN (25856), +PARTITION p3232 VALUES LESS THAN (25864), +PARTITION p3233 VALUES LESS THAN (25872), +PARTITION p3234 VALUES LESS THAN (25880), +PARTITION p3235 VALUES LESS THAN (25888), +PARTITION p3236 VALUES LESS THAN (25896), +PARTITION p3237 VALUES LESS THAN (25904), +PARTITION p3238 VALUES LESS THAN (25912), +PARTITION p3239 VALUES LESS THAN (25920), +PARTITION p3240 VALUES LESS THAN (25928), +PARTITION p3241 VALUES LESS THAN (25936), +PARTITION p3242 VALUES LESS THAN (25944), +PARTITION p3243 VALUES LESS THAN (25952), +PARTITION p3244 VALUES LESS THAN (25960), +PARTITION p3245 VALUES LESS THAN (25968), +PARTITION p3246 VALUES LESS THAN (25976), +PARTITION p3247 VALUES LESS THAN (25984), +PARTITION p3248 VALUES LESS THAN (25992), +PARTITION p3249 VALUES LESS THAN (26000), +PARTITION p3250 VALUES LESS THAN (26008), +PARTITION p3251 VALUES LESS THAN (26016), +PARTITION p3252 VALUES LESS THAN (26024), +PARTITION p3253 VALUES LESS THAN (26032), +PARTITION p3254 VALUES LESS THAN (26040), +PARTITION p3255 VALUES LESS THAN (26048), +PARTITION p3256 VALUES LESS THAN (26056), +PARTITION p3257 VALUES LESS THAN (26064), +PARTITION p3258 VALUES LESS THAN (26072), +PARTITION p3259 VALUES LESS THAN (26080), +PARTITION p3260 VALUES LESS THAN (26088), +PARTITION p3261 VALUES LESS THAN (26096), +PARTITION p3262 VALUES LESS THAN (26104), +PARTITION p3263 VALUES LESS THAN (26112), +PARTITION p3264 VALUES LESS THAN (26120), +PARTITION p3265 VALUES LESS THAN (26128), +PARTITION p3266 VALUES LESS THAN (26136), +PARTITION p3267 VALUES LESS THAN (26144), +PARTITION p3268 VALUES LESS THAN (26152), +PARTITION p3269 VALUES LESS THAN (26160), +PARTITION p3270 VALUES LESS THAN (26168), +PARTITION p3271 VALUES LESS THAN (26176), +PARTITION p3272 VALUES LESS THAN (26184), +PARTITION p3273 VALUES LESS THAN (26192), +PARTITION p3274 VALUES LESS THAN (26200), +PARTITION p3275 VALUES LESS THAN (26208), +PARTITION p3276 VALUES LESS THAN (26216), +PARTITION p3277 VALUES LESS THAN (26224), +PARTITION p3278 VALUES LESS THAN (26232), +PARTITION p3279 VALUES LESS THAN (26240), +PARTITION p3280 VALUES LESS THAN (26248), +PARTITION p3281 VALUES LESS THAN (26256), +PARTITION p3282 VALUES LESS THAN (26264), +PARTITION p3283 VALUES LESS THAN (26272), +PARTITION p3284 VALUES LESS THAN (26280), +PARTITION p3285 VALUES LESS THAN (26288), +PARTITION p3286 VALUES LESS THAN (26296), +PARTITION p3287 VALUES LESS THAN (26304), +PARTITION p3288 VALUES LESS THAN (26312), +PARTITION p3289 VALUES LESS THAN (26320), +PARTITION p3290 VALUES LESS THAN (26328), +PARTITION p3291 VALUES LESS THAN (26336), +PARTITION p3292 VALUES LESS THAN (26344), +PARTITION p3293 VALUES LESS THAN (26352), +PARTITION p3294 VALUES LESS THAN (26360), +PARTITION p3295 VALUES LESS THAN (26368), +PARTITION p3296 VALUES LESS THAN (26376), +PARTITION p3297 VALUES LESS THAN (26384), +PARTITION p3298 VALUES LESS THAN (26392), +PARTITION p3299 VALUES LESS THAN (26400), +PARTITION p3300 VALUES LESS THAN (26408), +PARTITION p3301 VALUES LESS THAN (26416), +PARTITION p3302 VALUES LESS THAN (26424), +PARTITION p3303 VALUES LESS THAN (26432), +PARTITION p3304 VALUES LESS THAN (26440), +PARTITION p3305 VALUES LESS THAN (26448), +PARTITION p3306 VALUES LESS THAN (26456), +PARTITION p3307 VALUES LESS THAN (26464), +PARTITION p3308 VALUES LESS THAN (26472), +PARTITION p3309 VALUES LESS THAN (26480), +PARTITION p3310 VALUES LESS THAN (26488), +PARTITION p3311 VALUES LESS THAN (26496), +PARTITION p3312 VALUES LESS THAN (26504), +PARTITION p3313 VALUES LESS THAN (26512), +PARTITION p3314 VALUES LESS THAN (26520), +PARTITION p3315 VALUES LESS THAN (26528), +PARTITION p3316 VALUES LESS THAN (26536), +PARTITION p3317 VALUES LESS THAN (26544), +PARTITION p3318 VALUES LESS THAN (26552), +PARTITION p3319 VALUES LESS THAN (26560), +PARTITION p3320 VALUES LESS THAN (26568), +PARTITION p3321 VALUES LESS THAN (26576), +PARTITION p3322 VALUES LESS THAN (26584), +PARTITION p3323 VALUES LESS THAN (26592), +PARTITION p3324 VALUES LESS THAN (26600), +PARTITION p3325 VALUES LESS THAN (26608), +PARTITION p3326 VALUES LESS THAN (26616), +PARTITION p3327 VALUES LESS THAN (26624), +PARTITION p3328 VALUES LESS THAN (26632), +PARTITION p3329 VALUES LESS THAN (26640), +PARTITION p3330 VALUES LESS THAN (26648), +PARTITION p3331 VALUES LESS THAN (26656), +PARTITION p3332 VALUES LESS THAN (26664), +PARTITION p3333 VALUES LESS THAN (26672), +PARTITION p3334 VALUES LESS THAN (26680), +PARTITION p3335 VALUES LESS THAN (26688), +PARTITION p3336 VALUES LESS THAN (26696), +PARTITION p3337 VALUES LESS THAN (26704), +PARTITION p3338 VALUES LESS THAN (26712), +PARTITION p3339 VALUES LESS THAN (26720), +PARTITION p3340 VALUES LESS THAN (26728), +PARTITION p3341 VALUES LESS THAN (26736), +PARTITION p3342 VALUES LESS THAN (26744), +PARTITION p3343 VALUES LESS THAN (26752), +PARTITION p3344 VALUES LESS THAN (26760), +PARTITION p3345 VALUES LESS THAN (26768), +PARTITION p3346 VALUES LESS THAN (26776), +PARTITION p3347 VALUES LESS THAN (26784), +PARTITION p3348 VALUES LESS THAN (26792), +PARTITION p3349 VALUES LESS THAN (26800), +PARTITION p3350 VALUES LESS THAN (26808), +PARTITION p3351 VALUES LESS THAN (26816), +PARTITION p3352 VALUES LESS THAN (26824), +PARTITION p3353 VALUES LESS THAN (26832), +PARTITION p3354 VALUES LESS THAN (26840), +PARTITION p3355 VALUES LESS THAN (26848), +PARTITION p3356 VALUES LESS THAN (26856), +PARTITION p3357 VALUES LESS THAN (26864), +PARTITION p3358 VALUES LESS THAN (26872), +PARTITION p3359 VALUES LESS THAN (26880), +PARTITION p3360 VALUES LESS THAN (26888), +PARTITION p3361 VALUES LESS THAN (26896), +PARTITION p3362 VALUES LESS THAN (26904), +PARTITION p3363 VALUES LESS THAN (26912), +PARTITION p3364 VALUES LESS THAN (26920), +PARTITION p3365 VALUES LESS THAN (26928), +PARTITION p3366 VALUES LESS THAN (26936), +PARTITION p3367 VALUES LESS THAN (26944), +PARTITION p3368 VALUES LESS THAN (26952), +PARTITION p3369 VALUES LESS THAN (26960), +PARTITION p3370 VALUES LESS THAN (26968), +PARTITION p3371 VALUES LESS THAN (26976), +PARTITION p3372 VALUES LESS THAN (26984), +PARTITION p3373 VALUES LESS THAN (26992), +PARTITION p3374 VALUES LESS THAN (27000), +PARTITION p3375 VALUES LESS THAN (27008), +PARTITION p3376 VALUES LESS THAN (27016), +PARTITION p3377 VALUES LESS THAN (27024), +PARTITION p3378 VALUES LESS THAN (27032), +PARTITION p3379 VALUES LESS THAN (27040), +PARTITION p3380 VALUES LESS THAN (27048), +PARTITION p3381 VALUES LESS THAN (27056), +PARTITION p3382 VALUES LESS THAN (27064), +PARTITION p3383 VALUES LESS THAN (27072), +PARTITION p3384 VALUES LESS THAN (27080), +PARTITION p3385 VALUES LESS THAN (27088), +PARTITION p3386 VALUES LESS THAN (27096), +PARTITION p3387 VALUES LESS THAN (27104), +PARTITION p3388 VALUES LESS THAN (27112), +PARTITION p3389 VALUES LESS THAN (27120), +PARTITION p3390 VALUES LESS THAN (27128), +PARTITION p3391 VALUES LESS THAN (27136), +PARTITION p3392 VALUES LESS THAN (27144), +PARTITION p3393 VALUES LESS THAN (27152), +PARTITION p3394 VALUES LESS THAN (27160), +PARTITION p3395 VALUES LESS THAN (27168), +PARTITION p3396 VALUES LESS THAN (27176), +PARTITION p3397 VALUES LESS THAN (27184), +PARTITION p3398 VALUES LESS THAN (27192), +PARTITION p3399 VALUES LESS THAN (27200), +PARTITION p3400 VALUES LESS THAN (27208), +PARTITION p3401 VALUES LESS THAN (27216), +PARTITION p3402 VALUES LESS THAN (27224), +PARTITION p3403 VALUES LESS THAN (27232), +PARTITION p3404 VALUES LESS THAN (27240), +PARTITION p3405 VALUES LESS THAN (27248), +PARTITION p3406 VALUES LESS THAN (27256), +PARTITION p3407 VALUES LESS THAN (27264), +PARTITION p3408 VALUES LESS THAN (27272), +PARTITION p3409 VALUES LESS THAN (27280), +PARTITION p3410 VALUES LESS THAN (27288), +PARTITION p3411 VALUES LESS THAN (27296), +PARTITION p3412 VALUES LESS THAN (27304), +PARTITION p3413 VALUES LESS THAN (27312), +PARTITION p3414 VALUES LESS THAN (27320), +PARTITION p3415 VALUES LESS THAN (27328), +PARTITION p3416 VALUES LESS THAN (27336), +PARTITION p3417 VALUES LESS THAN (27344), +PARTITION p3418 VALUES LESS THAN (27352), +PARTITION p3419 VALUES LESS THAN (27360), +PARTITION p3420 VALUES LESS THAN (27368), +PARTITION p3421 VALUES LESS THAN (27376), +PARTITION p3422 VALUES LESS THAN (27384), +PARTITION p3423 VALUES LESS THAN (27392), +PARTITION p3424 VALUES LESS THAN (27400), +PARTITION p3425 VALUES LESS THAN (27408), +PARTITION p3426 VALUES LESS THAN (27416), +PARTITION p3427 VALUES LESS THAN (27424), +PARTITION p3428 VALUES LESS THAN (27432), +PARTITION p3429 VALUES LESS THAN (27440), +PARTITION p3430 VALUES LESS THAN (27448), +PARTITION p3431 VALUES LESS THAN (27456), +PARTITION p3432 VALUES LESS THAN (27464), +PARTITION p3433 VALUES LESS THAN (27472), +PARTITION p3434 VALUES LESS THAN (27480), +PARTITION p3435 VALUES LESS THAN (27488), +PARTITION p3436 VALUES LESS THAN (27496), +PARTITION p3437 VALUES LESS THAN (27504), +PARTITION p3438 VALUES LESS THAN (27512), +PARTITION p3439 VALUES LESS THAN (27520), +PARTITION p3440 VALUES LESS THAN (27528), +PARTITION p3441 VALUES LESS THAN (27536), +PARTITION p3442 VALUES LESS THAN (27544), +PARTITION p3443 VALUES LESS THAN (27552), +PARTITION p3444 VALUES LESS THAN (27560), +PARTITION p3445 VALUES LESS THAN (27568), +PARTITION p3446 VALUES LESS THAN (27576), +PARTITION p3447 VALUES LESS THAN (27584), +PARTITION p3448 VALUES LESS THAN (27592), +PARTITION p3449 VALUES LESS THAN (27600), +PARTITION p3450 VALUES LESS THAN (27608), +PARTITION p3451 VALUES LESS THAN (27616), +PARTITION p3452 VALUES LESS THAN (27624), +PARTITION p3453 VALUES LESS THAN (27632), +PARTITION p3454 VALUES LESS THAN (27640), +PARTITION p3455 VALUES LESS THAN (27648), +PARTITION p3456 VALUES LESS THAN (27656), +PARTITION p3457 VALUES LESS THAN (27664), +PARTITION p3458 VALUES LESS THAN (27672), +PARTITION p3459 VALUES LESS THAN (27680), +PARTITION p3460 VALUES LESS THAN (27688), +PARTITION p3461 VALUES LESS THAN (27696), +PARTITION p3462 VALUES LESS THAN (27704), +PARTITION p3463 VALUES LESS THAN (27712), +PARTITION p3464 VALUES LESS THAN (27720), +PARTITION p3465 VALUES LESS THAN (27728), +PARTITION p3466 VALUES LESS THAN (27736), +PARTITION p3467 VALUES LESS THAN (27744), +PARTITION p3468 VALUES LESS THAN (27752), +PARTITION p3469 VALUES LESS THAN (27760), +PARTITION p3470 VALUES LESS THAN (27768), +PARTITION p3471 VALUES LESS THAN (27776), +PARTITION p3472 VALUES LESS THAN (27784), +PARTITION p3473 VALUES LESS THAN (27792), +PARTITION p3474 VALUES LESS THAN (27800), +PARTITION p3475 VALUES LESS THAN (27808), +PARTITION p3476 VALUES LESS THAN (27816), +PARTITION p3477 VALUES LESS THAN (27824), +PARTITION p3478 VALUES LESS THAN (27832), +PARTITION p3479 VALUES LESS THAN (27840), +PARTITION p3480 VALUES LESS THAN (27848), +PARTITION p3481 VALUES LESS THAN (27856), +PARTITION p3482 VALUES LESS THAN (27864), +PARTITION p3483 VALUES LESS THAN (27872), +PARTITION p3484 VALUES LESS THAN (27880), +PARTITION p3485 VALUES LESS THAN (27888), +PARTITION p3486 VALUES LESS THAN (27896), +PARTITION p3487 VALUES LESS THAN (27904), +PARTITION p3488 VALUES LESS THAN (27912), +PARTITION p3489 VALUES LESS THAN (27920), +PARTITION p3490 VALUES LESS THAN (27928), +PARTITION p3491 VALUES LESS THAN (27936), +PARTITION p3492 VALUES LESS THAN (27944), +PARTITION p3493 VALUES LESS THAN (27952), +PARTITION p3494 VALUES LESS THAN (27960), +PARTITION p3495 VALUES LESS THAN (27968), +PARTITION p3496 VALUES LESS THAN (27976), +PARTITION p3497 VALUES LESS THAN (27984), +PARTITION p3498 VALUES LESS THAN (27992), +PARTITION p3499 VALUES LESS THAN (28000), +PARTITION p3500 VALUES LESS THAN (28008), +PARTITION p3501 VALUES LESS THAN (28016), +PARTITION p3502 VALUES LESS THAN (28024), +PARTITION p3503 VALUES LESS THAN (28032), +PARTITION p3504 VALUES LESS THAN (28040), +PARTITION p3505 VALUES LESS THAN (28048), +PARTITION p3506 VALUES LESS THAN (28056), +PARTITION p3507 VALUES LESS THAN (28064), +PARTITION p3508 VALUES LESS THAN (28072), +PARTITION p3509 VALUES LESS THAN (28080), +PARTITION p3510 VALUES LESS THAN (28088), +PARTITION p3511 VALUES LESS THAN (28096), +PARTITION p3512 VALUES LESS THAN (28104), +PARTITION p3513 VALUES LESS THAN (28112), +PARTITION p3514 VALUES LESS THAN (28120), +PARTITION p3515 VALUES LESS THAN (28128), +PARTITION p3516 VALUES LESS THAN (28136), +PARTITION p3517 VALUES LESS THAN (28144), +PARTITION p3518 VALUES LESS THAN (28152), +PARTITION p3519 VALUES LESS THAN (28160), +PARTITION p3520 VALUES LESS THAN (28168), +PARTITION p3521 VALUES LESS THAN (28176), +PARTITION p3522 VALUES LESS THAN (28184), +PARTITION p3523 VALUES LESS THAN (28192), +PARTITION p3524 VALUES LESS THAN (28200), +PARTITION p3525 VALUES LESS THAN (28208), +PARTITION p3526 VALUES LESS THAN (28216), +PARTITION p3527 VALUES LESS THAN (28224), +PARTITION p3528 VALUES LESS THAN (28232), +PARTITION p3529 VALUES LESS THAN (28240), +PARTITION p3530 VALUES LESS THAN (28248), +PARTITION p3531 VALUES LESS THAN (28256), +PARTITION p3532 VALUES LESS THAN (28264), +PARTITION p3533 VALUES LESS THAN (28272), +PARTITION p3534 VALUES LESS THAN (28280), +PARTITION p3535 VALUES LESS THAN (28288), +PARTITION p3536 VALUES LESS THAN (28296), +PARTITION p3537 VALUES LESS THAN (28304), +PARTITION p3538 VALUES LESS THAN (28312), +PARTITION p3539 VALUES LESS THAN (28320), +PARTITION p3540 VALUES LESS THAN (28328), +PARTITION p3541 VALUES LESS THAN (28336), +PARTITION p3542 VALUES LESS THAN (28344), +PARTITION p3543 VALUES LESS THAN (28352), +PARTITION p3544 VALUES LESS THAN (28360), +PARTITION p3545 VALUES LESS THAN (28368), +PARTITION p3546 VALUES LESS THAN (28376), +PARTITION p3547 VALUES LESS THAN (28384), +PARTITION p3548 VALUES LESS THAN (28392), +PARTITION p3549 VALUES LESS THAN (28400), +PARTITION p3550 VALUES LESS THAN (28408), +PARTITION p3551 VALUES LESS THAN (28416), +PARTITION p3552 VALUES LESS THAN (28424), +PARTITION p3553 VALUES LESS THAN (28432), +PARTITION p3554 VALUES LESS THAN (28440), +PARTITION p3555 VALUES LESS THAN (28448), +PARTITION p3556 VALUES LESS THAN (28456), +PARTITION p3557 VALUES LESS THAN (28464), +PARTITION p3558 VALUES LESS THAN (28472), +PARTITION p3559 VALUES LESS THAN (28480), +PARTITION p3560 VALUES LESS THAN (28488), +PARTITION p3561 VALUES LESS THAN (28496), +PARTITION p3562 VALUES LESS THAN (28504), +PARTITION p3563 VALUES LESS THAN (28512), +PARTITION p3564 VALUES LESS THAN (28520), +PARTITION p3565 VALUES LESS THAN (28528), +PARTITION p3566 VALUES LESS THAN (28536), +PARTITION p3567 VALUES LESS THAN (28544), +PARTITION p3568 VALUES LESS THAN (28552), +PARTITION p3569 VALUES LESS THAN (28560), +PARTITION p3570 VALUES LESS THAN (28568), +PARTITION p3571 VALUES LESS THAN (28576), +PARTITION p3572 VALUES LESS THAN (28584), +PARTITION p3573 VALUES LESS THAN (28592), +PARTITION p3574 VALUES LESS THAN (28600), +PARTITION p3575 VALUES LESS THAN (28608), +PARTITION p3576 VALUES LESS THAN (28616), +PARTITION p3577 VALUES LESS THAN (28624), +PARTITION p3578 VALUES LESS THAN (28632), +PARTITION p3579 VALUES LESS THAN (28640), +PARTITION p3580 VALUES LESS THAN (28648), +PARTITION p3581 VALUES LESS THAN (28656), +PARTITION p3582 VALUES LESS THAN (28664), +PARTITION p3583 VALUES LESS THAN (28672), +PARTITION p3584 VALUES LESS THAN (28680), +PARTITION p3585 VALUES LESS THAN (28688), +PARTITION p3586 VALUES LESS THAN (28696), +PARTITION p3587 VALUES LESS THAN (28704), +PARTITION p3588 VALUES LESS THAN (28712), +PARTITION p3589 VALUES LESS THAN (28720), +PARTITION p3590 VALUES LESS THAN (28728), +PARTITION p3591 VALUES LESS THAN (28736), +PARTITION p3592 VALUES LESS THAN (28744), +PARTITION p3593 VALUES LESS THAN (28752), +PARTITION p3594 VALUES LESS THAN (28760), +PARTITION p3595 VALUES LESS THAN (28768), +PARTITION p3596 VALUES LESS THAN (28776), +PARTITION p3597 VALUES LESS THAN (28784), +PARTITION p3598 VALUES LESS THAN (28792), +PARTITION p3599 VALUES LESS THAN (28800), +PARTITION p3600 VALUES LESS THAN (28808), +PARTITION p3601 VALUES LESS THAN (28816), +PARTITION p3602 VALUES LESS THAN (28824), +PARTITION p3603 VALUES LESS THAN (28832), +PARTITION p3604 VALUES LESS THAN (28840), +PARTITION p3605 VALUES LESS THAN (28848), +PARTITION p3606 VALUES LESS THAN (28856), +PARTITION p3607 VALUES LESS THAN (28864), +PARTITION p3608 VALUES LESS THAN (28872), +PARTITION p3609 VALUES LESS THAN (28880), +PARTITION p3610 VALUES LESS THAN (28888), +PARTITION p3611 VALUES LESS THAN (28896), +PARTITION p3612 VALUES LESS THAN (28904), +PARTITION p3613 VALUES LESS THAN (28912), +PARTITION p3614 VALUES LESS THAN (28920), +PARTITION p3615 VALUES LESS THAN (28928), +PARTITION p3616 VALUES LESS THAN (28936), +PARTITION p3617 VALUES LESS THAN (28944), +PARTITION p3618 VALUES LESS THAN (28952), +PARTITION p3619 VALUES LESS THAN (28960), +PARTITION p3620 VALUES LESS THAN (28968), +PARTITION p3621 VALUES LESS THAN (28976), +PARTITION p3622 VALUES LESS THAN (28984), +PARTITION p3623 VALUES LESS THAN (28992), +PARTITION p3624 VALUES LESS THAN (29000), +PARTITION p3625 VALUES LESS THAN (29008), +PARTITION p3626 VALUES LESS THAN (29016), +PARTITION p3627 VALUES LESS THAN (29024), +PARTITION p3628 VALUES LESS THAN (29032), +PARTITION p3629 VALUES LESS THAN (29040), +PARTITION p3630 VALUES LESS THAN (29048), +PARTITION p3631 VALUES LESS THAN (29056), +PARTITION p3632 VALUES LESS THAN (29064), +PARTITION p3633 VALUES LESS THAN (29072), +PARTITION p3634 VALUES LESS THAN (29080), +PARTITION p3635 VALUES LESS THAN (29088), +PARTITION p3636 VALUES LESS THAN (29096), +PARTITION p3637 VALUES LESS THAN (29104), +PARTITION p3638 VALUES LESS THAN (29112), +PARTITION p3639 VALUES LESS THAN (29120), +PARTITION p3640 VALUES LESS THAN (29128), +PARTITION p3641 VALUES LESS THAN (29136), +PARTITION p3642 VALUES LESS THAN (29144), +PARTITION p3643 VALUES LESS THAN (29152), +PARTITION p3644 VALUES LESS THAN (29160), +PARTITION p3645 VALUES LESS THAN (29168), +PARTITION p3646 VALUES LESS THAN (29176), +PARTITION p3647 VALUES LESS THAN (29184), +PARTITION p3648 VALUES LESS THAN (29192), +PARTITION p3649 VALUES LESS THAN (29200), +PARTITION p3650 VALUES LESS THAN (29208), +PARTITION p3651 VALUES LESS THAN (29216), +PARTITION p3652 VALUES LESS THAN (29224), +PARTITION p3653 VALUES LESS THAN (29232), +PARTITION p3654 VALUES LESS THAN (29240), +PARTITION p3655 VALUES LESS THAN (29248), +PARTITION p3656 VALUES LESS THAN (29256), +PARTITION p3657 VALUES LESS THAN (29264), +PARTITION p3658 VALUES LESS THAN (29272), +PARTITION p3659 VALUES LESS THAN (29280), +PARTITION p3660 VALUES LESS THAN (29288), +PARTITION p3661 VALUES LESS THAN (29296), +PARTITION p3662 VALUES LESS THAN (29304), +PARTITION p3663 VALUES LESS THAN (29312), +PARTITION p3664 VALUES LESS THAN (29320), +PARTITION p3665 VALUES LESS THAN (29328), +PARTITION p3666 VALUES LESS THAN (29336), +PARTITION p3667 VALUES LESS THAN (29344), +PARTITION p3668 VALUES LESS THAN (29352), +PARTITION p3669 VALUES LESS THAN (29360), +PARTITION p3670 VALUES LESS THAN (29368), +PARTITION p3671 VALUES LESS THAN (29376), +PARTITION p3672 VALUES LESS THAN (29384), +PARTITION p3673 VALUES LESS THAN (29392), +PARTITION p3674 VALUES LESS THAN (29400), +PARTITION p3675 VALUES LESS THAN (29408), +PARTITION p3676 VALUES LESS THAN (29416), +PARTITION p3677 VALUES LESS THAN (29424), +PARTITION p3678 VALUES LESS THAN (29432), +PARTITION p3679 VALUES LESS THAN (29440), +PARTITION p3680 VALUES LESS THAN (29448), +PARTITION p3681 VALUES LESS THAN (29456), +PARTITION p3682 VALUES LESS THAN (29464), +PARTITION p3683 VALUES LESS THAN (29472), +PARTITION p3684 VALUES LESS THAN (29480), +PARTITION p3685 VALUES LESS THAN (29488), +PARTITION p3686 VALUES LESS THAN (29496), +PARTITION p3687 VALUES LESS THAN (29504), +PARTITION p3688 VALUES LESS THAN (29512), +PARTITION p3689 VALUES LESS THAN (29520), +PARTITION p3690 VALUES LESS THAN (29528), +PARTITION p3691 VALUES LESS THAN (29536), +PARTITION p3692 VALUES LESS THAN (29544), +PARTITION p3693 VALUES LESS THAN (29552), +PARTITION p3694 VALUES LESS THAN (29560), +PARTITION p3695 VALUES LESS THAN (29568), +PARTITION p3696 VALUES LESS THAN (29576), +PARTITION p3697 VALUES LESS THAN (29584), +PARTITION p3698 VALUES LESS THAN (29592), +PARTITION p3699 VALUES LESS THAN (29600), +PARTITION p3700 VALUES LESS THAN (29608), +PARTITION p3701 VALUES LESS THAN (29616), +PARTITION p3702 VALUES LESS THAN (29624), +PARTITION p3703 VALUES LESS THAN (29632), +PARTITION p3704 VALUES LESS THAN (29640), +PARTITION p3705 VALUES LESS THAN (29648), +PARTITION p3706 VALUES LESS THAN (29656), +PARTITION p3707 VALUES LESS THAN (29664), +PARTITION p3708 VALUES LESS THAN (29672), +PARTITION p3709 VALUES LESS THAN (29680), +PARTITION p3710 VALUES LESS THAN (29688), +PARTITION p3711 VALUES LESS THAN (29696), +PARTITION p3712 VALUES LESS THAN (29704), +PARTITION p3713 VALUES LESS THAN (29712), +PARTITION p3714 VALUES LESS THAN (29720), +PARTITION p3715 VALUES LESS THAN (29728), +PARTITION p3716 VALUES LESS THAN (29736), +PARTITION p3717 VALUES LESS THAN (29744), +PARTITION p3718 VALUES LESS THAN (29752), +PARTITION p3719 VALUES LESS THAN (29760), +PARTITION p3720 VALUES LESS THAN (29768), +PARTITION p3721 VALUES LESS THAN (29776), +PARTITION p3722 VALUES LESS THAN (29784), +PARTITION p3723 VALUES LESS THAN (29792), +PARTITION p3724 VALUES LESS THAN (29800), +PARTITION p3725 VALUES LESS THAN (29808), +PARTITION p3726 VALUES LESS THAN (29816), +PARTITION p3727 VALUES LESS THAN (29824), +PARTITION p3728 VALUES LESS THAN (29832), +PARTITION p3729 VALUES LESS THAN (29840), +PARTITION p3730 VALUES LESS THAN (29848), +PARTITION p3731 VALUES LESS THAN (29856), +PARTITION p3732 VALUES LESS THAN (29864), +PARTITION p3733 VALUES LESS THAN (29872), +PARTITION p3734 VALUES LESS THAN (29880), +PARTITION p3735 VALUES LESS THAN (29888), +PARTITION p3736 VALUES LESS THAN (29896), +PARTITION p3737 VALUES LESS THAN (29904), +PARTITION p3738 VALUES LESS THAN (29912), +PARTITION p3739 VALUES LESS THAN (29920), +PARTITION p3740 VALUES LESS THAN (29928), +PARTITION p3741 VALUES LESS THAN (29936), +PARTITION p3742 VALUES LESS THAN (29944), +PARTITION p3743 VALUES LESS THAN (29952), +PARTITION p3744 VALUES LESS THAN (29960), +PARTITION p3745 VALUES LESS THAN (29968), +PARTITION p3746 VALUES LESS THAN (29976), +PARTITION p3747 VALUES LESS THAN (29984), +PARTITION p3748 VALUES LESS THAN (29992), +PARTITION p3749 VALUES LESS THAN (30000), +PARTITION p3750 VALUES LESS THAN (30008), +PARTITION p3751 VALUES LESS THAN (30016), +PARTITION p3752 VALUES LESS THAN (30024), +PARTITION p3753 VALUES LESS THAN (30032), +PARTITION p3754 VALUES LESS THAN (30040), +PARTITION p3755 VALUES LESS THAN (30048), +PARTITION p3756 VALUES LESS THAN (30056), +PARTITION p3757 VALUES LESS THAN (30064), +PARTITION p3758 VALUES LESS THAN (30072), +PARTITION p3759 VALUES LESS THAN (30080), +PARTITION p3760 VALUES LESS THAN (30088), +PARTITION p3761 VALUES LESS THAN (30096), +PARTITION p3762 VALUES LESS THAN (30104), +PARTITION p3763 VALUES LESS THAN (30112), +PARTITION p3764 VALUES LESS THAN (30120), +PARTITION p3765 VALUES LESS THAN (30128), +PARTITION p3766 VALUES LESS THAN (30136), +PARTITION p3767 VALUES LESS THAN (30144), +PARTITION p3768 VALUES LESS THAN (30152), +PARTITION p3769 VALUES LESS THAN (30160), +PARTITION p3770 VALUES LESS THAN (30168), +PARTITION p3771 VALUES LESS THAN (30176), +PARTITION p3772 VALUES LESS THAN (30184), +PARTITION p3773 VALUES LESS THAN (30192), +PARTITION p3774 VALUES LESS THAN (30200), +PARTITION p3775 VALUES LESS THAN (30208), +PARTITION p3776 VALUES LESS THAN (30216), +PARTITION p3777 VALUES LESS THAN (30224), +PARTITION p3778 VALUES LESS THAN (30232), +PARTITION p3779 VALUES LESS THAN (30240), +PARTITION p3780 VALUES LESS THAN (30248), +PARTITION p3781 VALUES LESS THAN (30256), +PARTITION p3782 VALUES LESS THAN (30264), +PARTITION p3783 VALUES LESS THAN (30272), +PARTITION p3784 VALUES LESS THAN (30280), +PARTITION p3785 VALUES LESS THAN (30288), +PARTITION p3786 VALUES LESS THAN (30296), +PARTITION p3787 VALUES LESS THAN (30304), +PARTITION p3788 VALUES LESS THAN (30312), +PARTITION p3789 VALUES LESS THAN (30320), +PARTITION p3790 VALUES LESS THAN (30328), +PARTITION p3791 VALUES LESS THAN (30336), +PARTITION p3792 VALUES LESS THAN (30344), +PARTITION p3793 VALUES LESS THAN (30352), +PARTITION p3794 VALUES LESS THAN (30360), +PARTITION p3795 VALUES LESS THAN (30368), +PARTITION p3796 VALUES LESS THAN (30376), +PARTITION p3797 VALUES LESS THAN (30384), +PARTITION p3798 VALUES LESS THAN (30392), +PARTITION p3799 VALUES LESS THAN (30400), +PARTITION p3800 VALUES LESS THAN (30408), +PARTITION p3801 VALUES LESS THAN (30416), +PARTITION p3802 VALUES LESS THAN (30424), +PARTITION p3803 VALUES LESS THAN (30432), +PARTITION p3804 VALUES LESS THAN (30440), +PARTITION p3805 VALUES LESS THAN (30448), +PARTITION p3806 VALUES LESS THAN (30456), +PARTITION p3807 VALUES LESS THAN (30464), +PARTITION p3808 VALUES LESS THAN (30472), +PARTITION p3809 VALUES LESS THAN (30480), +PARTITION p3810 VALUES LESS THAN (30488), +PARTITION p3811 VALUES LESS THAN (30496), +PARTITION p3812 VALUES LESS THAN (30504), +PARTITION p3813 VALUES LESS THAN (30512), +PARTITION p3814 VALUES LESS THAN (30520), +PARTITION p3815 VALUES LESS THAN (30528), +PARTITION p3816 VALUES LESS THAN (30536), +PARTITION p3817 VALUES LESS THAN (30544), +PARTITION p3818 VALUES LESS THAN (30552), +PARTITION p3819 VALUES LESS THAN (30560), +PARTITION p3820 VALUES LESS THAN (30568), +PARTITION p3821 VALUES LESS THAN (30576), +PARTITION p3822 VALUES LESS THAN (30584), +PARTITION p3823 VALUES LESS THAN (30592), +PARTITION p3824 VALUES LESS THAN (30600), +PARTITION p3825 VALUES LESS THAN (30608), +PARTITION p3826 VALUES LESS THAN (30616), +PARTITION p3827 VALUES LESS THAN (30624), +PARTITION p3828 VALUES LESS THAN (30632), +PARTITION p3829 VALUES LESS THAN (30640), +PARTITION p3830 VALUES LESS THAN (30648), +PARTITION p3831 VALUES LESS THAN (30656), +PARTITION p3832 VALUES LESS THAN (30664), +PARTITION p3833 VALUES LESS THAN (30672), +PARTITION p3834 VALUES LESS THAN (30680), +PARTITION p3835 VALUES LESS THAN (30688), +PARTITION p3836 VALUES LESS THAN (30696), +PARTITION p3837 VALUES LESS THAN (30704), +PARTITION p3838 VALUES LESS THAN (30712), +PARTITION p3839 VALUES LESS THAN (30720), +PARTITION p3840 VALUES LESS THAN (30728), +PARTITION p3841 VALUES LESS THAN (30736), +PARTITION p3842 VALUES LESS THAN (30744), +PARTITION p3843 VALUES LESS THAN (30752), +PARTITION p3844 VALUES LESS THAN (30760), +PARTITION p3845 VALUES LESS THAN (30768), +PARTITION p3846 VALUES LESS THAN (30776), +PARTITION p3847 VALUES LESS THAN (30784), +PARTITION p3848 VALUES LESS THAN (30792), +PARTITION p3849 VALUES LESS THAN (30800), +PARTITION p3850 VALUES LESS THAN (30808), +PARTITION p3851 VALUES LESS THAN (30816), +PARTITION p3852 VALUES LESS THAN (30824), +PARTITION p3853 VALUES LESS THAN (30832), +PARTITION p3854 VALUES LESS THAN (30840), +PARTITION p3855 VALUES LESS THAN (30848), +PARTITION p3856 VALUES LESS THAN (30856), +PARTITION p3857 VALUES LESS THAN (30864), +PARTITION p3858 VALUES LESS THAN (30872), +PARTITION p3859 VALUES LESS THAN (30880), +PARTITION p3860 VALUES LESS THAN (30888), +PARTITION p3861 VALUES LESS THAN (30896), +PARTITION p3862 VALUES LESS THAN (30904), +PARTITION p3863 VALUES LESS THAN (30912), +PARTITION p3864 VALUES LESS THAN (30920), +PARTITION p3865 VALUES LESS THAN (30928), +PARTITION p3866 VALUES LESS THAN (30936), +PARTITION p3867 VALUES LESS THAN (30944), +PARTITION p3868 VALUES LESS THAN (30952), +PARTITION p3869 VALUES LESS THAN (30960), +PARTITION p3870 VALUES LESS THAN (30968), +PARTITION p3871 VALUES LESS THAN (30976), +PARTITION p3872 VALUES LESS THAN (30984), +PARTITION p3873 VALUES LESS THAN (30992), +PARTITION p3874 VALUES LESS THAN (31000), +PARTITION p3875 VALUES LESS THAN (31008), +PARTITION p3876 VALUES LESS THAN (31016), +PARTITION p3877 VALUES LESS THAN (31024), +PARTITION p3878 VALUES LESS THAN (31032), +PARTITION p3879 VALUES LESS THAN (31040), +PARTITION p3880 VALUES LESS THAN (31048), +PARTITION p3881 VALUES LESS THAN (31056), +PARTITION p3882 VALUES LESS THAN (31064), +PARTITION p3883 VALUES LESS THAN (31072), +PARTITION p3884 VALUES LESS THAN (31080), +PARTITION p3885 VALUES LESS THAN (31088), +PARTITION p3886 VALUES LESS THAN (31096), +PARTITION p3887 VALUES LESS THAN (31104), +PARTITION p3888 VALUES LESS THAN (31112), +PARTITION p3889 VALUES LESS THAN (31120), +PARTITION p3890 VALUES LESS THAN (31128), +PARTITION p3891 VALUES LESS THAN (31136), +PARTITION p3892 VALUES LESS THAN (31144), +PARTITION p3893 VALUES LESS THAN (31152), +PARTITION p3894 VALUES LESS THAN (31160), +PARTITION p3895 VALUES LESS THAN (31168), +PARTITION p3896 VALUES LESS THAN (31176), +PARTITION p3897 VALUES LESS THAN (31184), +PARTITION p3898 VALUES LESS THAN (31192), +PARTITION p3899 VALUES LESS THAN (31200), +PARTITION p3900 VALUES LESS THAN (31208), +PARTITION p3901 VALUES LESS THAN (31216), +PARTITION p3902 VALUES LESS THAN (31224), +PARTITION p3903 VALUES LESS THAN (31232), +PARTITION p3904 VALUES LESS THAN (31240), +PARTITION p3905 VALUES LESS THAN (31248), +PARTITION p3906 VALUES LESS THAN (31256), +PARTITION p3907 VALUES LESS THAN (31264), +PARTITION p3908 VALUES LESS THAN (31272), +PARTITION p3909 VALUES LESS THAN (31280), +PARTITION p3910 VALUES LESS THAN (31288), +PARTITION p3911 VALUES LESS THAN (31296), +PARTITION p3912 VALUES LESS THAN (31304), +PARTITION p3913 VALUES LESS THAN (31312), +PARTITION p3914 VALUES LESS THAN (31320), +PARTITION p3915 VALUES LESS THAN (31328), +PARTITION p3916 VALUES LESS THAN (31336), +PARTITION p3917 VALUES LESS THAN (31344), +PARTITION p3918 VALUES LESS THAN (31352), +PARTITION p3919 VALUES LESS THAN (31360), +PARTITION p3920 VALUES LESS THAN (31368), +PARTITION p3921 VALUES LESS THAN (31376), +PARTITION p3922 VALUES LESS THAN (31384), +PARTITION p3923 VALUES LESS THAN (31392), +PARTITION p3924 VALUES LESS THAN (31400), +PARTITION p3925 VALUES LESS THAN (31408), +PARTITION p3926 VALUES LESS THAN (31416), +PARTITION p3927 VALUES LESS THAN (31424), +PARTITION p3928 VALUES LESS THAN (31432), +PARTITION p3929 VALUES LESS THAN (31440), +PARTITION p3930 VALUES LESS THAN (31448), +PARTITION p3931 VALUES LESS THAN (31456), +PARTITION p3932 VALUES LESS THAN (31464), +PARTITION p3933 VALUES LESS THAN (31472), +PARTITION p3934 VALUES LESS THAN (31480), +PARTITION p3935 VALUES LESS THAN (31488), +PARTITION p3936 VALUES LESS THAN (31496), +PARTITION p3937 VALUES LESS THAN (31504), +PARTITION p3938 VALUES LESS THAN (31512), +PARTITION p3939 VALUES LESS THAN (31520), +PARTITION p3940 VALUES LESS THAN (31528), +PARTITION p3941 VALUES LESS THAN (31536), +PARTITION p3942 VALUES LESS THAN (31544), +PARTITION p3943 VALUES LESS THAN (31552), +PARTITION p3944 VALUES LESS THAN (31560), +PARTITION p3945 VALUES LESS THAN (31568), +PARTITION p3946 VALUES LESS THAN (31576), +PARTITION p3947 VALUES LESS THAN (31584), +PARTITION p3948 VALUES LESS THAN (31592), +PARTITION p3949 VALUES LESS THAN (31600), +PARTITION p3950 VALUES LESS THAN (31608), +PARTITION p3951 VALUES LESS THAN (31616), +PARTITION p3952 VALUES LESS THAN (31624), +PARTITION p3953 VALUES LESS THAN (31632), +PARTITION p3954 VALUES LESS THAN (31640), +PARTITION p3955 VALUES LESS THAN (31648), +PARTITION p3956 VALUES LESS THAN (31656), +PARTITION p3957 VALUES LESS THAN (31664), +PARTITION p3958 VALUES LESS THAN (31672), +PARTITION p3959 VALUES LESS THAN (31680), +PARTITION p3960 VALUES LESS THAN (31688), +PARTITION p3961 VALUES LESS THAN (31696), +PARTITION p3962 VALUES LESS THAN (31704), +PARTITION p3963 VALUES LESS THAN (31712), +PARTITION p3964 VALUES LESS THAN (31720), +PARTITION p3965 VALUES LESS THAN (31728), +PARTITION p3966 VALUES LESS THAN (31736), +PARTITION p3967 VALUES LESS THAN (31744), +PARTITION p3968 VALUES LESS THAN (31752), +PARTITION p3969 VALUES LESS THAN (31760), +PARTITION p3970 VALUES LESS THAN (31768), +PARTITION p3971 VALUES LESS THAN (31776), +PARTITION p3972 VALUES LESS THAN (31784), +PARTITION p3973 VALUES LESS THAN (31792), +PARTITION p3974 VALUES LESS THAN (31800), +PARTITION p3975 VALUES LESS THAN (31808), +PARTITION p3976 VALUES LESS THAN (31816), +PARTITION p3977 VALUES LESS THAN (31824), +PARTITION p3978 VALUES LESS THAN (31832), +PARTITION p3979 VALUES LESS THAN (31840), +PARTITION p3980 VALUES LESS THAN (31848), +PARTITION p3981 VALUES LESS THAN (31856), +PARTITION p3982 VALUES LESS THAN (31864), +PARTITION p3983 VALUES LESS THAN (31872), +PARTITION p3984 VALUES LESS THAN (31880), +PARTITION p3985 VALUES LESS THAN (31888), +PARTITION p3986 VALUES LESS THAN (31896), +PARTITION p3987 VALUES LESS THAN (31904), +PARTITION p3988 VALUES LESS THAN (31912), +PARTITION p3989 VALUES LESS THAN (31920), +PARTITION p3990 VALUES LESS THAN (31928), +PARTITION p3991 VALUES LESS THAN (31936), +PARTITION p3992 VALUES LESS THAN (31944), +PARTITION p3993 VALUES LESS THAN (31952), +PARTITION p3994 VALUES LESS THAN (31960), +PARTITION p3995 VALUES LESS THAN (31968), +PARTITION p3996 VALUES LESS THAN (31976), +PARTITION p3997 VALUES LESS THAN (31984), +PARTITION p3998 VALUES LESS THAN (31992), +PARTITION p3999 VALUES LESS THAN (32000), +PARTITION p4000 VALUES LESS THAN (32008), +PARTITION p4001 VALUES LESS THAN (32016), +PARTITION p4002 VALUES LESS THAN (32024), +PARTITION p4003 VALUES LESS THAN (32032), +PARTITION p4004 VALUES LESS THAN (32040), +PARTITION p4005 VALUES LESS THAN (32048), +PARTITION p4006 VALUES LESS THAN (32056), +PARTITION p4007 VALUES LESS THAN (32064), +PARTITION p4008 VALUES LESS THAN (32072), +PARTITION p4009 VALUES LESS THAN (32080), +PARTITION p4010 VALUES LESS THAN (32088), +PARTITION p4011 VALUES LESS THAN (32096), +PARTITION p4012 VALUES LESS THAN (32104), +PARTITION p4013 VALUES LESS THAN (32112), +PARTITION p4014 VALUES LESS THAN (32120), +PARTITION p4015 VALUES LESS THAN (32128), +PARTITION p4016 VALUES LESS THAN (32136), +PARTITION p4017 VALUES LESS THAN (32144), +PARTITION p4018 VALUES LESS THAN (32152), +PARTITION p4019 VALUES LESS THAN (32160), +PARTITION p4020 VALUES LESS THAN (32168), +PARTITION p4021 VALUES LESS THAN (32176), +PARTITION p4022 VALUES LESS THAN (32184), +PARTITION p4023 VALUES LESS THAN (32192), +PARTITION p4024 VALUES LESS THAN (32200), +PARTITION p4025 VALUES LESS THAN (32208), +PARTITION p4026 VALUES LESS THAN (32216), +PARTITION p4027 VALUES LESS THAN (32224), +PARTITION p4028 VALUES LESS THAN (32232), +PARTITION p4029 VALUES LESS THAN (32240), +PARTITION p4030 VALUES LESS THAN (32248), +PARTITION p4031 VALUES LESS THAN (32256), +PARTITION p4032 VALUES LESS THAN (32264), +PARTITION p4033 VALUES LESS THAN (32272), +PARTITION p4034 VALUES LESS THAN (32280), +PARTITION p4035 VALUES LESS THAN (32288), +PARTITION p4036 VALUES LESS THAN (32296), +PARTITION p4037 VALUES LESS THAN (32304), +PARTITION p4038 VALUES LESS THAN (32312), +PARTITION p4039 VALUES LESS THAN (32320), +PARTITION p4040 VALUES LESS THAN (32328), +PARTITION p4041 VALUES LESS THAN (32336), +PARTITION p4042 VALUES LESS THAN (32344), +PARTITION p4043 VALUES LESS THAN (32352), +PARTITION p4044 VALUES LESS THAN (32360), +PARTITION p4045 VALUES LESS THAN (32368), +PARTITION p4046 VALUES LESS THAN (32376), +PARTITION p4047 VALUES LESS THAN (32384), +PARTITION p4048 VALUES LESS THAN (32392), +PARTITION p4049 VALUES LESS THAN (32400), +PARTITION p4050 VALUES LESS THAN (32408), +PARTITION p4051 VALUES LESS THAN (32416), +PARTITION p4052 VALUES LESS THAN (32424), +PARTITION p4053 VALUES LESS THAN (32432), +PARTITION p4054 VALUES LESS THAN (32440), +PARTITION p4055 VALUES LESS THAN (32448), +PARTITION p4056 VALUES LESS THAN (32456), +PARTITION p4057 VALUES LESS THAN (32464), +PARTITION p4058 VALUES LESS THAN (32472), +PARTITION p4059 VALUES LESS THAN (32480), +PARTITION p4060 VALUES LESS THAN (32488), +PARTITION p4061 VALUES LESS THAN (32496), +PARTITION p4062 VALUES LESS THAN (32504), +PARTITION p4063 VALUES LESS THAN (32512), +PARTITION p4064 VALUES LESS THAN (32520), +PARTITION p4065 VALUES LESS THAN (32528), +PARTITION p4066 VALUES LESS THAN (32536), +PARTITION p4067 VALUES LESS THAN (32544), +PARTITION p4068 VALUES LESS THAN (32552), +PARTITION p4069 VALUES LESS THAN (32560), +PARTITION p4070 VALUES LESS THAN (32568), +PARTITION p4071 VALUES LESS THAN (32576), +PARTITION p4072 VALUES LESS THAN (32584), +PARTITION p4073 VALUES LESS THAN (32592), +PARTITION p4074 VALUES LESS THAN (32600), +PARTITION p4075 VALUES LESS THAN (32608), +PARTITION p4076 VALUES LESS THAN (32616), +PARTITION p4077 VALUES LESS THAN (32624), +PARTITION p4078 VALUES LESS THAN (32632), +PARTITION p4079 VALUES LESS THAN (32640), +PARTITION p4080 VALUES LESS THAN (32648), +PARTITION p4081 VALUES LESS THAN (32656), +PARTITION p4082 VALUES LESS THAN (32664), +PARTITION p4083 VALUES LESS THAN (32672), +PARTITION p4084 VALUES LESS THAN (32680), +PARTITION p4085 VALUES LESS THAN (32688), +PARTITION p4086 VALUES LESS THAN (32696), +PARTITION p4087 VALUES LESS THAN (32704), +PARTITION p4088 VALUES LESS THAN (32712), +PARTITION p4089 VALUES LESS THAN (32720), +PARTITION p4090 VALUES LESS THAN (32728), +PARTITION p4091 VALUES LESS THAN (32736), +PARTITION p4092 VALUES LESS THAN (32744), +PARTITION p4093 VALUES LESS THAN (32752), +PARTITION p4094 VALUES LESS THAN (32760), +PARTITION p4095 VALUES LESS THAN (32768) +); +32767 inserts; +select count(*) from t2; +count(*) +32767 +select count(*) from t2 partition (p0); +count(*) +7 +select count(*) from t2 partition (p10); +count(*) +8 +select count(*) from t2 partition (p100); +count(*) +8 +select count(*) from t2 partition (p1000); +count(*) +8 +select count(*) from t2 partition (p4000); +count(*) +8 +select count(*) from t2 partition (p4095); +count(*) +8 +select * from t2 partition (p0); +a +1 +3 +5 +7 +2 +4 +6 +select * from t2 partition (p10); +a +81 +83 +85 +87 +80 +82 +84 +86 +select * from t2 partition (p100); +a +800 +801 +802 +803 +804 +805 +806 +807 +select * from t2 partition (p1000); +a +8000 +8001 +8002 +8003 +8004 +8005 +8006 +8007 +select * from t2 partition (p4000); +a +32000 +32001 +32002 +32003 +32004 +32005 +32006 +32007 +select * from t2 partition (p4095); +a +32760 +32761 +32762 +32763 +32764 +32765 +32766 +32767 +delete from t2 partition (p4095); +select * from t2 partition (p4095); +a +insert into t2 partition (p4095) values (32766), (32767); +select * from t2 partition (p4095); +a +32766 +32767 +update t2 partition (p4095) set a=32765 where a= 32767; +select * from t2 partition (p4095); +a +32765 +32766 +load data infile 'MYSQL_TMP_DIR/data01' into table t2 partition (p4095) fields terminated by ','; +select * from t2 partition (p4095); +a +32764 +32765 +32766 +32767 +alter table t2 add partition (partition p4096 values less than (32775)); +ERROR HY000: Too many partitions (including subpartitions) were defined +drop table t2; diff --git a/mysql-test/suite/tokudb.parts/r-native/partition_max_sub_parts_list_tokudb.result b/mysql-test/suite/tokudb.parts/r-native/partition_max_sub_parts_list_tokudb.result new file mode 100644 index 000000000000..984e02db0426 --- /dev/null +++ b/mysql-test/suite/tokudb.parts/r-native/partition_max_sub_parts_list_tokudb.result @@ -0,0 +1,4180 @@ +create table t2 (a int) engine='TokuDB' +partition by list (a) +subpartition by hash (a) subpartitions 2 ( +PARTITION p0 VALUES IN (0,1,2,3), +PARTITION p1 VALUES IN (4,5,6,7), +PARTITION p2 VALUES IN (8,9,10,11), +PARTITION p3 VALUES IN (12,13,14,15), +PARTITION p4 VALUES IN (16,17,18,19), +PARTITION p5 VALUES IN (20,21,22,23), +PARTITION p6 VALUES IN (24,25,26,27), +PARTITION p7 VALUES IN (28,29,30,31), +PARTITION p8 VALUES IN (32,33,34,35), +PARTITION p9 VALUES IN (36,37,38,39), +PARTITION p10 VALUES IN (40,41,42,43), +PARTITION p11 VALUES IN (44,45,46,47), +PARTITION p12 VALUES IN (48,49,50,51), +PARTITION p13 VALUES IN (52,53,54,55), +PARTITION p14 VALUES IN (56,57,58,59), +PARTITION p15 VALUES IN (60,61,62,63), +PARTITION p16 VALUES IN (64,65,66,67), +PARTITION p17 VALUES IN (68,69,70,71), +PARTITION p18 VALUES IN (72,73,74,75), +PARTITION p19 VALUES IN (76,77,78,79), +PARTITION p20 VALUES IN (80,81,82,83), +PARTITION p21 VALUES IN (84,85,86,87), +PARTITION p22 VALUES IN (88,89,90,91), +PARTITION p23 VALUES IN (92,93,94,95), +PARTITION p24 VALUES IN (96,97,98,99), +PARTITION p25 VALUES IN (100,101,102,103), +PARTITION p26 VALUES IN (104,105,106,107), +PARTITION p27 VALUES IN (108,109,110,111), +PARTITION p28 VALUES IN (112,113,114,115), +PARTITION p29 VALUES IN (116,117,118,119), +PARTITION p30 VALUES IN (120,121,122,123), +PARTITION p31 VALUES IN (124,125,126,127), +PARTITION p32 VALUES IN (128,129,130,131), +PARTITION p33 VALUES IN (132,133,134,135), +PARTITION p34 VALUES IN (136,137,138,139), +PARTITION p35 VALUES IN (140,141,142,143), +PARTITION p36 VALUES IN (144,145,146,147), +PARTITION p37 VALUES IN (148,149,150,151), +PARTITION p38 VALUES IN (152,153,154,155), +PARTITION p39 VALUES IN (156,157,158,159), +PARTITION p40 VALUES IN (160,161,162,163), +PARTITION p41 VALUES IN (164,165,166,167), +PARTITION p42 VALUES IN (168,169,170,171), +PARTITION p43 VALUES IN (172,173,174,175), +PARTITION p44 VALUES IN (176,177,178,179), +PARTITION p45 VALUES IN (180,181,182,183), +PARTITION p46 VALUES IN (184,185,186,187), +PARTITION p47 VALUES IN (188,189,190,191), +PARTITION p48 VALUES IN (192,193,194,195), +PARTITION p49 VALUES IN (196,197,198,199), +PARTITION p50 VALUES IN (200,201,202,203), +PARTITION p51 VALUES IN (204,205,206,207), +PARTITION p52 VALUES IN (208,209,210,211), +PARTITION p53 VALUES IN (212,213,214,215), +PARTITION p54 VALUES IN (216,217,218,219), +PARTITION p55 VALUES IN (220,221,222,223), +PARTITION p56 VALUES IN (224,225,226,227), +PARTITION p57 VALUES IN (228,229,230,231), +PARTITION p58 VALUES IN (232,233,234,235), +PARTITION p59 VALUES IN (236,237,238,239), +PARTITION p60 VALUES IN (240,241,242,243), +PARTITION p61 VALUES IN (244,245,246,247), +PARTITION p62 VALUES IN (248,249,250,251), +PARTITION p63 VALUES IN (252,253,254,255), +PARTITION p64 VALUES IN (256,257,258,259), +PARTITION p65 VALUES IN (260,261,262,263), +PARTITION p66 VALUES IN (264,265,266,267), +PARTITION p67 VALUES IN (268,269,270,271), +PARTITION p68 VALUES IN (272,273,274,275), +PARTITION p69 VALUES IN (276,277,278,279), +PARTITION p70 VALUES IN (280,281,282,283), +PARTITION p71 VALUES IN (284,285,286,287), +PARTITION p72 VALUES IN (288,289,290,291), +PARTITION p73 VALUES IN (292,293,294,295), +PARTITION p74 VALUES IN (296,297,298,299), +PARTITION p75 VALUES IN (300,301,302,303), +PARTITION p76 VALUES IN (304,305,306,307), +PARTITION p77 VALUES IN (308,309,310,311), +PARTITION p78 VALUES IN (312,313,314,315), +PARTITION p79 VALUES IN (316,317,318,319), +PARTITION p80 VALUES IN (320,321,322,323), +PARTITION p81 VALUES IN (324,325,326,327), +PARTITION p82 VALUES IN (328,329,330,331), +PARTITION p83 VALUES IN (332,333,334,335), +PARTITION p84 VALUES IN (336,337,338,339), +PARTITION p85 VALUES IN (340,341,342,343), +PARTITION p86 VALUES IN (344,345,346,347), +PARTITION p87 VALUES IN (348,349,350,351), +PARTITION p88 VALUES IN (352,353,354,355), +PARTITION p89 VALUES IN (356,357,358,359), +PARTITION p90 VALUES IN (360,361,362,363), +PARTITION p91 VALUES IN (364,365,366,367), +PARTITION p92 VALUES IN (368,369,370,371), +PARTITION p93 VALUES IN (372,373,374,375), +PARTITION p94 VALUES IN (376,377,378,379), +PARTITION p95 VALUES IN (380,381,382,383), +PARTITION p96 VALUES IN (384,385,386,387), +PARTITION p97 VALUES IN (388,389,390,391), +PARTITION p98 VALUES IN (392,393,394,395), +PARTITION p99 VALUES IN (396,397,398,399), +PARTITION p100 VALUES IN (400,401,402,403), +PARTITION p101 VALUES IN (404,405,406,407), +PARTITION p102 VALUES IN (408,409,410,411), +PARTITION p103 VALUES IN (412,413,414,415), +PARTITION p104 VALUES IN (416,417,418,419), +PARTITION p105 VALUES IN (420,421,422,423), +PARTITION p106 VALUES IN (424,425,426,427), +PARTITION p107 VALUES IN (428,429,430,431), +PARTITION p108 VALUES IN (432,433,434,435), +PARTITION p109 VALUES IN (436,437,438,439), +PARTITION p110 VALUES IN (440,441,442,443), +PARTITION p111 VALUES IN (444,445,446,447), +PARTITION p112 VALUES IN (448,449,450,451), +PARTITION p113 VALUES IN (452,453,454,455), +PARTITION p114 VALUES IN (456,457,458,459), +PARTITION p115 VALUES IN (460,461,462,463), +PARTITION p116 VALUES IN (464,465,466,467), +PARTITION p117 VALUES IN (468,469,470,471), +PARTITION p118 VALUES IN (472,473,474,475), +PARTITION p119 VALUES IN (476,477,478,479), +PARTITION p120 VALUES IN (480,481,482,483), +PARTITION p121 VALUES IN (484,485,486,487), +PARTITION p122 VALUES IN (488,489,490,491), +PARTITION p123 VALUES IN (492,493,494,495), +PARTITION p124 VALUES IN (496,497,498,499), +PARTITION p125 VALUES IN (500,501,502,503), +PARTITION p126 VALUES IN (504,505,506,507), +PARTITION p127 VALUES IN (508,509,510,511), +PARTITION p128 VALUES IN (512,513,514,515), +PARTITION p129 VALUES IN (516,517,518,519), +PARTITION p130 VALUES IN (520,521,522,523), +PARTITION p131 VALUES IN (524,525,526,527), +PARTITION p132 VALUES IN (528,529,530,531), +PARTITION p133 VALUES IN (532,533,534,535), +PARTITION p134 VALUES IN (536,537,538,539), +PARTITION p135 VALUES IN (540,541,542,543), +PARTITION p136 VALUES IN (544,545,546,547), +PARTITION p137 VALUES IN (548,549,550,551), +PARTITION p138 VALUES IN (552,553,554,555), +PARTITION p139 VALUES IN (556,557,558,559), +PARTITION p140 VALUES IN (560,561,562,563), +PARTITION p141 VALUES IN (564,565,566,567), +PARTITION p142 VALUES IN (568,569,570,571), +PARTITION p143 VALUES IN (572,573,574,575), +PARTITION p144 VALUES IN (576,577,578,579), +PARTITION p145 VALUES IN (580,581,582,583), +PARTITION p146 VALUES IN (584,585,586,587), +PARTITION p147 VALUES IN (588,589,590,591), +PARTITION p148 VALUES IN (592,593,594,595), +PARTITION p149 VALUES IN (596,597,598,599), +PARTITION p150 VALUES IN (600,601,602,603), +PARTITION p151 VALUES IN (604,605,606,607), +PARTITION p152 VALUES IN (608,609,610,611), +PARTITION p153 VALUES IN (612,613,614,615), +PARTITION p154 VALUES IN (616,617,618,619), +PARTITION p155 VALUES IN (620,621,622,623), +PARTITION p156 VALUES IN (624,625,626,627), +PARTITION p157 VALUES IN (628,629,630,631), +PARTITION p158 VALUES IN (632,633,634,635), +PARTITION p159 VALUES IN (636,637,638,639), +PARTITION p160 VALUES IN (640,641,642,643), +PARTITION p161 VALUES IN (644,645,646,647), +PARTITION p162 VALUES IN (648,649,650,651), +PARTITION p163 VALUES IN (652,653,654,655), +PARTITION p164 VALUES IN (656,657,658,659), +PARTITION p165 VALUES IN (660,661,662,663), +PARTITION p166 VALUES IN (664,665,666,667), +PARTITION p167 VALUES IN (668,669,670,671), +PARTITION p168 VALUES IN (672,673,674,675), +PARTITION p169 VALUES IN (676,677,678,679), +PARTITION p170 VALUES IN (680,681,682,683), +PARTITION p171 VALUES IN (684,685,686,687), +PARTITION p172 VALUES IN (688,689,690,691), +PARTITION p173 VALUES IN (692,693,694,695), +PARTITION p174 VALUES IN (696,697,698,699), +PARTITION p175 VALUES IN (700,701,702,703), +PARTITION p176 VALUES IN (704,705,706,707), +PARTITION p177 VALUES IN (708,709,710,711), +PARTITION p178 VALUES IN (712,713,714,715), +PARTITION p179 VALUES IN (716,717,718,719), +PARTITION p180 VALUES IN (720,721,722,723), +PARTITION p181 VALUES IN (724,725,726,727), +PARTITION p182 VALUES IN (728,729,730,731), +PARTITION p183 VALUES IN (732,733,734,735), +PARTITION p184 VALUES IN (736,737,738,739), +PARTITION p185 VALUES IN (740,741,742,743), +PARTITION p186 VALUES IN (744,745,746,747), +PARTITION p187 VALUES IN (748,749,750,751), +PARTITION p188 VALUES IN (752,753,754,755), +PARTITION p189 VALUES IN (756,757,758,759), +PARTITION p190 VALUES IN (760,761,762,763), +PARTITION p191 VALUES IN (764,765,766,767), +PARTITION p192 VALUES IN (768,769,770,771), +PARTITION p193 VALUES IN (772,773,774,775), +PARTITION p194 VALUES IN (776,777,778,779), +PARTITION p195 VALUES IN (780,781,782,783), +PARTITION p196 VALUES IN (784,785,786,787), +PARTITION p197 VALUES IN (788,789,790,791), +PARTITION p198 VALUES IN (792,793,794,795), +PARTITION p199 VALUES IN (796,797,798,799), +PARTITION p200 VALUES IN (800,801,802,803), +PARTITION p201 VALUES IN (804,805,806,807), +PARTITION p202 VALUES IN (808,809,810,811), +PARTITION p203 VALUES IN (812,813,814,815), +PARTITION p204 VALUES IN (816,817,818,819), +PARTITION p205 VALUES IN (820,821,822,823), +PARTITION p206 VALUES IN (824,825,826,827), +PARTITION p207 VALUES IN (828,829,830,831), +PARTITION p208 VALUES IN (832,833,834,835), +PARTITION p209 VALUES IN (836,837,838,839), +PARTITION p210 VALUES IN (840,841,842,843), +PARTITION p211 VALUES IN (844,845,846,847), +PARTITION p212 VALUES IN (848,849,850,851), +PARTITION p213 VALUES IN (852,853,854,855), +PARTITION p214 VALUES IN (856,857,858,859), +PARTITION p215 VALUES IN (860,861,862,863), +PARTITION p216 VALUES IN (864,865,866,867), +PARTITION p217 VALUES IN (868,869,870,871), +PARTITION p218 VALUES IN (872,873,874,875), +PARTITION p219 VALUES IN (876,877,878,879), +PARTITION p220 VALUES IN (880,881,882,883), +PARTITION p221 VALUES IN (884,885,886,887), +PARTITION p222 VALUES IN (888,889,890,891), +PARTITION p223 VALUES IN (892,893,894,895), +PARTITION p224 VALUES IN (896,897,898,899), +PARTITION p225 VALUES IN (900,901,902,903), +PARTITION p226 VALUES IN (904,905,906,907), +PARTITION p227 VALUES IN (908,909,910,911), +PARTITION p228 VALUES IN (912,913,914,915), +PARTITION p229 VALUES IN (916,917,918,919), +PARTITION p230 VALUES IN (920,921,922,923), +PARTITION p231 VALUES IN (924,925,926,927), +PARTITION p232 VALUES IN (928,929,930,931), +PARTITION p233 VALUES IN (932,933,934,935), +PARTITION p234 VALUES IN (936,937,938,939), +PARTITION p235 VALUES IN (940,941,942,943), +PARTITION p236 VALUES IN (944,945,946,947), +PARTITION p237 VALUES IN (948,949,950,951), +PARTITION p238 VALUES IN (952,953,954,955), +PARTITION p239 VALUES IN (956,957,958,959), +PARTITION p240 VALUES IN (960,961,962,963), +PARTITION p241 VALUES IN (964,965,966,967), +PARTITION p242 VALUES IN (968,969,970,971), +PARTITION p243 VALUES IN (972,973,974,975), +PARTITION p244 VALUES IN (976,977,978,979), +PARTITION p245 VALUES IN (980,981,982,983), +PARTITION p246 VALUES IN (984,985,986,987), +PARTITION p247 VALUES IN (988,989,990,991), +PARTITION p248 VALUES IN (992,993,994,995), +PARTITION p249 VALUES IN (996,997,998,999), +PARTITION p250 VALUES IN (1000,1001,1002,1003), +PARTITION p251 VALUES IN (1004,1005,1006,1007), +PARTITION p252 VALUES IN (1008,1009,1010,1011), +PARTITION p253 VALUES IN (1012,1013,1014,1015), +PARTITION p254 VALUES IN (1016,1017,1018,1019), +PARTITION p255 VALUES IN (1020,1021,1022,1023), +PARTITION p256 VALUES IN (1024,1025,1026,1027), +PARTITION p257 VALUES IN (1028,1029,1030,1031), +PARTITION p258 VALUES IN (1032,1033,1034,1035), +PARTITION p259 VALUES IN (1036,1037,1038,1039), +PARTITION p260 VALUES IN (1040,1041,1042,1043), +PARTITION p261 VALUES IN (1044,1045,1046,1047), +PARTITION p262 VALUES IN (1048,1049,1050,1051), +PARTITION p263 VALUES IN (1052,1053,1054,1055), +PARTITION p264 VALUES IN (1056,1057,1058,1059), +PARTITION p265 VALUES IN (1060,1061,1062,1063), +PARTITION p266 VALUES IN (1064,1065,1066,1067), +PARTITION p267 VALUES IN (1068,1069,1070,1071), +PARTITION p268 VALUES IN (1072,1073,1074,1075), +PARTITION p269 VALUES IN (1076,1077,1078,1079), +PARTITION p270 VALUES IN (1080,1081,1082,1083), +PARTITION p271 VALUES IN (1084,1085,1086,1087), +PARTITION p272 VALUES IN (1088,1089,1090,1091), +PARTITION p273 VALUES IN (1092,1093,1094,1095), +PARTITION p274 VALUES IN (1096,1097,1098,1099), +PARTITION p275 VALUES IN (1100,1101,1102,1103), +PARTITION p276 VALUES IN (1104,1105,1106,1107), +PARTITION p277 VALUES IN (1108,1109,1110,1111), +PARTITION p278 VALUES IN (1112,1113,1114,1115), +PARTITION p279 VALUES IN (1116,1117,1118,1119), +PARTITION p280 VALUES IN (1120,1121,1122,1123), +PARTITION p281 VALUES IN (1124,1125,1126,1127), +PARTITION p282 VALUES IN (1128,1129,1130,1131), +PARTITION p283 VALUES IN (1132,1133,1134,1135), +PARTITION p284 VALUES IN (1136,1137,1138,1139), +PARTITION p285 VALUES IN (1140,1141,1142,1143), +PARTITION p286 VALUES IN (1144,1145,1146,1147), +PARTITION p287 VALUES IN (1148,1149,1150,1151), +PARTITION p288 VALUES IN (1152,1153,1154,1155), +PARTITION p289 VALUES IN (1156,1157,1158,1159), +PARTITION p290 VALUES IN (1160,1161,1162,1163), +PARTITION p291 VALUES IN (1164,1165,1166,1167), +PARTITION p292 VALUES IN (1168,1169,1170,1171), +PARTITION p293 VALUES IN (1172,1173,1174,1175), +PARTITION p294 VALUES IN (1176,1177,1178,1179), +PARTITION p295 VALUES IN (1180,1181,1182,1183), +PARTITION p296 VALUES IN (1184,1185,1186,1187), +PARTITION p297 VALUES IN (1188,1189,1190,1191), +PARTITION p298 VALUES IN (1192,1193,1194,1195), +PARTITION p299 VALUES IN (1196,1197,1198,1199), +PARTITION p300 VALUES IN (1200,1201,1202,1203), +PARTITION p301 VALUES IN (1204,1205,1206,1207), +PARTITION p302 VALUES IN (1208,1209,1210,1211), +PARTITION p303 VALUES IN (1212,1213,1214,1215), +PARTITION p304 VALUES IN (1216,1217,1218,1219), +PARTITION p305 VALUES IN (1220,1221,1222,1223), +PARTITION p306 VALUES IN (1224,1225,1226,1227), +PARTITION p307 VALUES IN (1228,1229,1230,1231), +PARTITION p308 VALUES IN (1232,1233,1234,1235), +PARTITION p309 VALUES IN (1236,1237,1238,1239), +PARTITION p310 VALUES IN (1240,1241,1242,1243), +PARTITION p311 VALUES IN (1244,1245,1246,1247), +PARTITION p312 VALUES IN (1248,1249,1250,1251), +PARTITION p313 VALUES IN (1252,1253,1254,1255), +PARTITION p314 VALUES IN (1256,1257,1258,1259), +PARTITION p315 VALUES IN (1260,1261,1262,1263), +PARTITION p316 VALUES IN (1264,1265,1266,1267), +PARTITION p317 VALUES IN (1268,1269,1270,1271), +PARTITION p318 VALUES IN (1272,1273,1274,1275), +PARTITION p319 VALUES IN (1276,1277,1278,1279), +PARTITION p320 VALUES IN (1280,1281,1282,1283), +PARTITION p321 VALUES IN (1284,1285,1286,1287), +PARTITION p322 VALUES IN (1288,1289,1290,1291), +PARTITION p323 VALUES IN (1292,1293,1294,1295), +PARTITION p324 VALUES IN (1296,1297,1298,1299), +PARTITION p325 VALUES IN (1300,1301,1302,1303), +PARTITION p326 VALUES IN (1304,1305,1306,1307), +PARTITION p327 VALUES IN (1308,1309,1310,1311), +PARTITION p328 VALUES IN (1312,1313,1314,1315), +PARTITION p329 VALUES IN (1316,1317,1318,1319), +PARTITION p330 VALUES IN (1320,1321,1322,1323), +PARTITION p331 VALUES IN (1324,1325,1326,1327), +PARTITION p332 VALUES IN (1328,1329,1330,1331), +PARTITION p333 VALUES IN (1332,1333,1334,1335), +PARTITION p334 VALUES IN (1336,1337,1338,1339), +PARTITION p335 VALUES IN (1340,1341,1342,1343), +PARTITION p336 VALUES IN (1344,1345,1346,1347), +PARTITION p337 VALUES IN (1348,1349,1350,1351), +PARTITION p338 VALUES IN (1352,1353,1354,1355), +PARTITION p339 VALUES IN (1356,1357,1358,1359), +PARTITION p340 VALUES IN (1360,1361,1362,1363), +PARTITION p341 VALUES IN (1364,1365,1366,1367), +PARTITION p342 VALUES IN (1368,1369,1370,1371), +PARTITION p343 VALUES IN (1372,1373,1374,1375), +PARTITION p344 VALUES IN (1376,1377,1378,1379), +PARTITION p345 VALUES IN (1380,1381,1382,1383), +PARTITION p346 VALUES IN (1384,1385,1386,1387), +PARTITION p347 VALUES IN (1388,1389,1390,1391), +PARTITION p348 VALUES IN (1392,1393,1394,1395), +PARTITION p349 VALUES IN (1396,1397,1398,1399), +PARTITION p350 VALUES IN (1400,1401,1402,1403), +PARTITION p351 VALUES IN (1404,1405,1406,1407), +PARTITION p352 VALUES IN (1408,1409,1410,1411), +PARTITION p353 VALUES IN (1412,1413,1414,1415), +PARTITION p354 VALUES IN (1416,1417,1418,1419), +PARTITION p355 VALUES IN (1420,1421,1422,1423), +PARTITION p356 VALUES IN (1424,1425,1426,1427), +PARTITION p357 VALUES IN (1428,1429,1430,1431), +PARTITION p358 VALUES IN (1432,1433,1434,1435), +PARTITION p359 VALUES IN (1436,1437,1438,1439), +PARTITION p360 VALUES IN (1440,1441,1442,1443), +PARTITION p361 VALUES IN (1444,1445,1446,1447), +PARTITION p362 VALUES IN (1448,1449,1450,1451), +PARTITION p363 VALUES IN (1452,1453,1454,1455), +PARTITION p364 VALUES IN (1456,1457,1458,1459), +PARTITION p365 VALUES IN (1460,1461,1462,1463), +PARTITION p366 VALUES IN (1464,1465,1466,1467), +PARTITION p367 VALUES IN (1468,1469,1470,1471), +PARTITION p368 VALUES IN (1472,1473,1474,1475), +PARTITION p369 VALUES IN (1476,1477,1478,1479), +PARTITION p370 VALUES IN (1480,1481,1482,1483), +PARTITION p371 VALUES IN (1484,1485,1486,1487), +PARTITION p372 VALUES IN (1488,1489,1490,1491), +PARTITION p373 VALUES IN (1492,1493,1494,1495), +PARTITION p374 VALUES IN (1496,1497,1498,1499), +PARTITION p375 VALUES IN (1500,1501,1502,1503), +PARTITION p376 VALUES IN (1504,1505,1506,1507), +PARTITION p377 VALUES IN (1508,1509,1510,1511), +PARTITION p378 VALUES IN (1512,1513,1514,1515), +PARTITION p379 VALUES IN (1516,1517,1518,1519), +PARTITION p380 VALUES IN (1520,1521,1522,1523), +PARTITION p381 VALUES IN (1524,1525,1526,1527), +PARTITION p382 VALUES IN (1528,1529,1530,1531), +PARTITION p383 VALUES IN (1532,1533,1534,1535), +PARTITION p384 VALUES IN (1536,1537,1538,1539), +PARTITION p385 VALUES IN (1540,1541,1542,1543), +PARTITION p386 VALUES IN (1544,1545,1546,1547), +PARTITION p387 VALUES IN (1548,1549,1550,1551), +PARTITION p388 VALUES IN (1552,1553,1554,1555), +PARTITION p389 VALUES IN (1556,1557,1558,1559), +PARTITION p390 VALUES IN (1560,1561,1562,1563), +PARTITION p391 VALUES IN (1564,1565,1566,1567), +PARTITION p392 VALUES IN (1568,1569,1570,1571), +PARTITION p393 VALUES IN (1572,1573,1574,1575), +PARTITION p394 VALUES IN (1576,1577,1578,1579), +PARTITION p395 VALUES IN (1580,1581,1582,1583), +PARTITION p396 VALUES IN (1584,1585,1586,1587), +PARTITION p397 VALUES IN (1588,1589,1590,1591), +PARTITION p398 VALUES IN (1592,1593,1594,1595), +PARTITION p399 VALUES IN (1596,1597,1598,1599), +PARTITION p400 VALUES IN (1600,1601,1602,1603), +PARTITION p401 VALUES IN (1604,1605,1606,1607), +PARTITION p402 VALUES IN (1608,1609,1610,1611), +PARTITION p403 VALUES IN (1612,1613,1614,1615), +PARTITION p404 VALUES IN (1616,1617,1618,1619), +PARTITION p405 VALUES IN (1620,1621,1622,1623), +PARTITION p406 VALUES IN (1624,1625,1626,1627), +PARTITION p407 VALUES IN (1628,1629,1630,1631), +PARTITION p408 VALUES IN (1632,1633,1634,1635), +PARTITION p409 VALUES IN (1636,1637,1638,1639), +PARTITION p410 VALUES IN (1640,1641,1642,1643), +PARTITION p411 VALUES IN (1644,1645,1646,1647), +PARTITION p412 VALUES IN (1648,1649,1650,1651), +PARTITION p413 VALUES IN (1652,1653,1654,1655), +PARTITION p414 VALUES IN (1656,1657,1658,1659), +PARTITION p415 VALUES IN (1660,1661,1662,1663), +PARTITION p416 VALUES IN (1664,1665,1666,1667), +PARTITION p417 VALUES IN (1668,1669,1670,1671), +PARTITION p418 VALUES IN (1672,1673,1674,1675), +PARTITION p419 VALUES IN (1676,1677,1678,1679), +PARTITION p420 VALUES IN (1680,1681,1682,1683), +PARTITION p421 VALUES IN (1684,1685,1686,1687), +PARTITION p422 VALUES IN (1688,1689,1690,1691), +PARTITION p423 VALUES IN (1692,1693,1694,1695), +PARTITION p424 VALUES IN (1696,1697,1698,1699), +PARTITION p425 VALUES IN (1700,1701,1702,1703), +PARTITION p426 VALUES IN (1704,1705,1706,1707), +PARTITION p427 VALUES IN (1708,1709,1710,1711), +PARTITION p428 VALUES IN (1712,1713,1714,1715), +PARTITION p429 VALUES IN (1716,1717,1718,1719), +PARTITION p430 VALUES IN (1720,1721,1722,1723), +PARTITION p431 VALUES IN (1724,1725,1726,1727), +PARTITION p432 VALUES IN (1728,1729,1730,1731), +PARTITION p433 VALUES IN (1732,1733,1734,1735), +PARTITION p434 VALUES IN (1736,1737,1738,1739), +PARTITION p435 VALUES IN (1740,1741,1742,1743), +PARTITION p436 VALUES IN (1744,1745,1746,1747), +PARTITION p437 VALUES IN (1748,1749,1750,1751), +PARTITION p438 VALUES IN (1752,1753,1754,1755), +PARTITION p439 VALUES IN (1756,1757,1758,1759), +PARTITION p440 VALUES IN (1760,1761,1762,1763), +PARTITION p441 VALUES IN (1764,1765,1766,1767), +PARTITION p442 VALUES IN (1768,1769,1770,1771), +PARTITION p443 VALUES IN (1772,1773,1774,1775), +PARTITION p444 VALUES IN (1776,1777,1778,1779), +PARTITION p445 VALUES IN (1780,1781,1782,1783), +PARTITION p446 VALUES IN (1784,1785,1786,1787), +PARTITION p447 VALUES IN (1788,1789,1790,1791), +PARTITION p448 VALUES IN (1792,1793,1794,1795), +PARTITION p449 VALUES IN (1796,1797,1798,1799), +PARTITION p450 VALUES IN (1800,1801,1802,1803), +PARTITION p451 VALUES IN (1804,1805,1806,1807), +PARTITION p452 VALUES IN (1808,1809,1810,1811), +PARTITION p453 VALUES IN (1812,1813,1814,1815), +PARTITION p454 VALUES IN (1816,1817,1818,1819), +PARTITION p455 VALUES IN (1820,1821,1822,1823), +PARTITION p456 VALUES IN (1824,1825,1826,1827), +PARTITION p457 VALUES IN (1828,1829,1830,1831), +PARTITION p458 VALUES IN (1832,1833,1834,1835), +PARTITION p459 VALUES IN (1836,1837,1838,1839), +PARTITION p460 VALUES IN (1840,1841,1842,1843), +PARTITION p461 VALUES IN (1844,1845,1846,1847), +PARTITION p462 VALUES IN (1848,1849,1850,1851), +PARTITION p463 VALUES IN (1852,1853,1854,1855), +PARTITION p464 VALUES IN (1856,1857,1858,1859), +PARTITION p465 VALUES IN (1860,1861,1862,1863), +PARTITION p466 VALUES IN (1864,1865,1866,1867), +PARTITION p467 VALUES IN (1868,1869,1870,1871), +PARTITION p468 VALUES IN (1872,1873,1874,1875), +PARTITION p469 VALUES IN (1876,1877,1878,1879), +PARTITION p470 VALUES IN (1880,1881,1882,1883), +PARTITION p471 VALUES IN (1884,1885,1886,1887), +PARTITION p472 VALUES IN (1888,1889,1890,1891), +PARTITION p473 VALUES IN (1892,1893,1894,1895), +PARTITION p474 VALUES IN (1896,1897,1898,1899), +PARTITION p475 VALUES IN (1900,1901,1902,1903), +PARTITION p476 VALUES IN (1904,1905,1906,1907), +PARTITION p477 VALUES IN (1908,1909,1910,1911), +PARTITION p478 VALUES IN (1912,1913,1914,1915), +PARTITION p479 VALUES IN (1916,1917,1918,1919), +PARTITION p480 VALUES IN (1920,1921,1922,1923), +PARTITION p481 VALUES IN (1924,1925,1926,1927), +PARTITION p482 VALUES IN (1928,1929,1930,1931), +PARTITION p483 VALUES IN (1932,1933,1934,1935), +PARTITION p484 VALUES IN (1936,1937,1938,1939), +PARTITION p485 VALUES IN (1940,1941,1942,1943), +PARTITION p486 VALUES IN (1944,1945,1946,1947), +PARTITION p487 VALUES IN (1948,1949,1950,1951), +PARTITION p488 VALUES IN (1952,1953,1954,1955), +PARTITION p489 VALUES IN (1956,1957,1958,1959), +PARTITION p490 VALUES IN (1960,1961,1962,1963), +PARTITION p491 VALUES IN (1964,1965,1966,1967), +PARTITION p492 VALUES IN (1968,1969,1970,1971), +PARTITION p493 VALUES IN (1972,1973,1974,1975), +PARTITION p494 VALUES IN (1976,1977,1978,1979), +PARTITION p495 VALUES IN (1980,1981,1982,1983), +PARTITION p496 VALUES IN (1984,1985,1986,1987), +PARTITION p497 VALUES IN (1988,1989,1990,1991), +PARTITION p498 VALUES IN (1992,1993,1994,1995), +PARTITION p499 VALUES IN (1996,1997,1998,1999), +PARTITION p500 VALUES IN (2000,2001,2002,2003), +PARTITION p501 VALUES IN (2004,2005,2006,2007), +PARTITION p502 VALUES IN (2008,2009,2010,2011), +PARTITION p503 VALUES IN (2012,2013,2014,2015), +PARTITION p504 VALUES IN (2016,2017,2018,2019), +PARTITION p505 VALUES IN (2020,2021,2022,2023), +PARTITION p506 VALUES IN (2024,2025,2026,2027), +PARTITION p507 VALUES IN (2028,2029,2030,2031), +PARTITION p508 VALUES IN (2032,2033,2034,2035), +PARTITION p509 VALUES IN (2036,2037,2038,2039), +PARTITION p510 VALUES IN (2040,2041,2042,2043), +PARTITION p511 VALUES IN (2044,2045,2046,2047), +PARTITION p512 VALUES IN (2048,2049,2050,2051), +PARTITION p513 VALUES IN (2052,2053,2054,2055), +PARTITION p514 VALUES IN (2056,2057,2058,2059), +PARTITION p515 VALUES IN (2060,2061,2062,2063), +PARTITION p516 VALUES IN (2064,2065,2066,2067), +PARTITION p517 VALUES IN (2068,2069,2070,2071), +PARTITION p518 VALUES IN (2072,2073,2074,2075), +PARTITION p519 VALUES IN (2076,2077,2078,2079), +PARTITION p520 VALUES IN (2080,2081,2082,2083), +PARTITION p521 VALUES IN (2084,2085,2086,2087), +PARTITION p522 VALUES IN (2088,2089,2090,2091), +PARTITION p523 VALUES IN (2092,2093,2094,2095), +PARTITION p524 VALUES IN (2096,2097,2098,2099), +PARTITION p525 VALUES IN (2100,2101,2102,2103), +PARTITION p526 VALUES IN (2104,2105,2106,2107), +PARTITION p527 VALUES IN (2108,2109,2110,2111), +PARTITION p528 VALUES IN (2112,2113,2114,2115), +PARTITION p529 VALUES IN (2116,2117,2118,2119), +PARTITION p530 VALUES IN (2120,2121,2122,2123), +PARTITION p531 VALUES IN (2124,2125,2126,2127), +PARTITION p532 VALUES IN (2128,2129,2130,2131), +PARTITION p533 VALUES IN (2132,2133,2134,2135), +PARTITION p534 VALUES IN (2136,2137,2138,2139), +PARTITION p535 VALUES IN (2140,2141,2142,2143), +PARTITION p536 VALUES IN (2144,2145,2146,2147), +PARTITION p537 VALUES IN (2148,2149,2150,2151), +PARTITION p538 VALUES IN (2152,2153,2154,2155), +PARTITION p539 VALUES IN (2156,2157,2158,2159), +PARTITION p540 VALUES IN (2160,2161,2162,2163), +PARTITION p541 VALUES IN (2164,2165,2166,2167), +PARTITION p542 VALUES IN (2168,2169,2170,2171), +PARTITION p543 VALUES IN (2172,2173,2174,2175), +PARTITION p544 VALUES IN (2176,2177,2178,2179), +PARTITION p545 VALUES IN (2180,2181,2182,2183), +PARTITION p546 VALUES IN (2184,2185,2186,2187), +PARTITION p547 VALUES IN (2188,2189,2190,2191), +PARTITION p548 VALUES IN (2192,2193,2194,2195), +PARTITION p549 VALUES IN (2196,2197,2198,2199), +PARTITION p550 VALUES IN (2200,2201,2202,2203), +PARTITION p551 VALUES IN (2204,2205,2206,2207), +PARTITION p552 VALUES IN (2208,2209,2210,2211), +PARTITION p553 VALUES IN (2212,2213,2214,2215), +PARTITION p554 VALUES IN (2216,2217,2218,2219), +PARTITION p555 VALUES IN (2220,2221,2222,2223), +PARTITION p556 VALUES IN (2224,2225,2226,2227), +PARTITION p557 VALUES IN (2228,2229,2230,2231), +PARTITION p558 VALUES IN (2232,2233,2234,2235), +PARTITION p559 VALUES IN (2236,2237,2238,2239), +PARTITION p560 VALUES IN (2240,2241,2242,2243), +PARTITION p561 VALUES IN (2244,2245,2246,2247), +PARTITION p562 VALUES IN (2248,2249,2250,2251), +PARTITION p563 VALUES IN (2252,2253,2254,2255), +PARTITION p564 VALUES IN (2256,2257,2258,2259), +PARTITION p565 VALUES IN (2260,2261,2262,2263), +PARTITION p566 VALUES IN (2264,2265,2266,2267), +PARTITION p567 VALUES IN (2268,2269,2270,2271), +PARTITION p568 VALUES IN (2272,2273,2274,2275), +PARTITION p569 VALUES IN (2276,2277,2278,2279), +PARTITION p570 VALUES IN (2280,2281,2282,2283), +PARTITION p571 VALUES IN (2284,2285,2286,2287), +PARTITION p572 VALUES IN (2288,2289,2290,2291), +PARTITION p573 VALUES IN (2292,2293,2294,2295), +PARTITION p574 VALUES IN (2296,2297,2298,2299), +PARTITION p575 VALUES IN (2300,2301,2302,2303), +PARTITION p576 VALUES IN (2304,2305,2306,2307), +PARTITION p577 VALUES IN (2308,2309,2310,2311), +PARTITION p578 VALUES IN (2312,2313,2314,2315), +PARTITION p579 VALUES IN (2316,2317,2318,2319), +PARTITION p580 VALUES IN (2320,2321,2322,2323), +PARTITION p581 VALUES IN (2324,2325,2326,2327), +PARTITION p582 VALUES IN (2328,2329,2330,2331), +PARTITION p583 VALUES IN (2332,2333,2334,2335), +PARTITION p584 VALUES IN (2336,2337,2338,2339), +PARTITION p585 VALUES IN (2340,2341,2342,2343), +PARTITION p586 VALUES IN (2344,2345,2346,2347), +PARTITION p587 VALUES IN (2348,2349,2350,2351), +PARTITION p588 VALUES IN (2352,2353,2354,2355), +PARTITION p589 VALUES IN (2356,2357,2358,2359), +PARTITION p590 VALUES IN (2360,2361,2362,2363), +PARTITION p591 VALUES IN (2364,2365,2366,2367), +PARTITION p592 VALUES IN (2368,2369,2370,2371), +PARTITION p593 VALUES IN (2372,2373,2374,2375), +PARTITION p594 VALUES IN (2376,2377,2378,2379), +PARTITION p595 VALUES IN (2380,2381,2382,2383), +PARTITION p596 VALUES IN (2384,2385,2386,2387), +PARTITION p597 VALUES IN (2388,2389,2390,2391), +PARTITION p598 VALUES IN (2392,2393,2394,2395), +PARTITION p599 VALUES IN (2396,2397,2398,2399), +PARTITION p600 VALUES IN (2400,2401,2402,2403), +PARTITION p601 VALUES IN (2404,2405,2406,2407), +PARTITION p602 VALUES IN (2408,2409,2410,2411), +PARTITION p603 VALUES IN (2412,2413,2414,2415), +PARTITION p604 VALUES IN (2416,2417,2418,2419), +PARTITION p605 VALUES IN (2420,2421,2422,2423), +PARTITION p606 VALUES IN (2424,2425,2426,2427), +PARTITION p607 VALUES IN (2428,2429,2430,2431), +PARTITION p608 VALUES IN (2432,2433,2434,2435), +PARTITION p609 VALUES IN (2436,2437,2438,2439), +PARTITION p610 VALUES IN (2440,2441,2442,2443), +PARTITION p611 VALUES IN (2444,2445,2446,2447), +PARTITION p612 VALUES IN (2448,2449,2450,2451), +PARTITION p613 VALUES IN (2452,2453,2454,2455), +PARTITION p614 VALUES IN (2456,2457,2458,2459), +PARTITION p615 VALUES IN (2460,2461,2462,2463), +PARTITION p616 VALUES IN (2464,2465,2466,2467), +PARTITION p617 VALUES IN (2468,2469,2470,2471), +PARTITION p618 VALUES IN (2472,2473,2474,2475), +PARTITION p619 VALUES IN (2476,2477,2478,2479), +PARTITION p620 VALUES IN (2480,2481,2482,2483), +PARTITION p621 VALUES IN (2484,2485,2486,2487), +PARTITION p622 VALUES IN (2488,2489,2490,2491), +PARTITION p623 VALUES IN (2492,2493,2494,2495), +PARTITION p624 VALUES IN (2496,2497,2498,2499), +PARTITION p625 VALUES IN (2500,2501,2502,2503), +PARTITION p626 VALUES IN (2504,2505,2506,2507), +PARTITION p627 VALUES IN (2508,2509,2510,2511), +PARTITION p628 VALUES IN (2512,2513,2514,2515), +PARTITION p629 VALUES IN (2516,2517,2518,2519), +PARTITION p630 VALUES IN (2520,2521,2522,2523), +PARTITION p631 VALUES IN (2524,2525,2526,2527), +PARTITION p632 VALUES IN (2528,2529,2530,2531), +PARTITION p633 VALUES IN (2532,2533,2534,2535), +PARTITION p634 VALUES IN (2536,2537,2538,2539), +PARTITION p635 VALUES IN (2540,2541,2542,2543), +PARTITION p636 VALUES IN (2544,2545,2546,2547), +PARTITION p637 VALUES IN (2548,2549,2550,2551), +PARTITION p638 VALUES IN (2552,2553,2554,2555), +PARTITION p639 VALUES IN (2556,2557,2558,2559), +PARTITION p640 VALUES IN (2560,2561,2562,2563), +PARTITION p641 VALUES IN (2564,2565,2566,2567), +PARTITION p642 VALUES IN (2568,2569,2570,2571), +PARTITION p643 VALUES IN (2572,2573,2574,2575), +PARTITION p644 VALUES IN (2576,2577,2578,2579), +PARTITION p645 VALUES IN (2580,2581,2582,2583), +PARTITION p646 VALUES IN (2584,2585,2586,2587), +PARTITION p647 VALUES IN (2588,2589,2590,2591), +PARTITION p648 VALUES IN (2592,2593,2594,2595), +PARTITION p649 VALUES IN (2596,2597,2598,2599), +PARTITION p650 VALUES IN (2600,2601,2602,2603), +PARTITION p651 VALUES IN (2604,2605,2606,2607), +PARTITION p652 VALUES IN (2608,2609,2610,2611), +PARTITION p653 VALUES IN (2612,2613,2614,2615), +PARTITION p654 VALUES IN (2616,2617,2618,2619), +PARTITION p655 VALUES IN (2620,2621,2622,2623), +PARTITION p656 VALUES IN (2624,2625,2626,2627), +PARTITION p657 VALUES IN (2628,2629,2630,2631), +PARTITION p658 VALUES IN (2632,2633,2634,2635), +PARTITION p659 VALUES IN (2636,2637,2638,2639), +PARTITION p660 VALUES IN (2640,2641,2642,2643), +PARTITION p661 VALUES IN (2644,2645,2646,2647), +PARTITION p662 VALUES IN (2648,2649,2650,2651), +PARTITION p663 VALUES IN (2652,2653,2654,2655), +PARTITION p664 VALUES IN (2656,2657,2658,2659), +PARTITION p665 VALUES IN (2660,2661,2662,2663), +PARTITION p666 VALUES IN (2664,2665,2666,2667), +PARTITION p667 VALUES IN (2668,2669,2670,2671), +PARTITION p668 VALUES IN (2672,2673,2674,2675), +PARTITION p669 VALUES IN (2676,2677,2678,2679), +PARTITION p670 VALUES IN (2680,2681,2682,2683), +PARTITION p671 VALUES IN (2684,2685,2686,2687), +PARTITION p672 VALUES IN (2688,2689,2690,2691), +PARTITION p673 VALUES IN (2692,2693,2694,2695), +PARTITION p674 VALUES IN (2696,2697,2698,2699), +PARTITION p675 VALUES IN (2700,2701,2702,2703), +PARTITION p676 VALUES IN (2704,2705,2706,2707), +PARTITION p677 VALUES IN (2708,2709,2710,2711), +PARTITION p678 VALUES IN (2712,2713,2714,2715), +PARTITION p679 VALUES IN (2716,2717,2718,2719), +PARTITION p680 VALUES IN (2720,2721,2722,2723), +PARTITION p681 VALUES IN (2724,2725,2726,2727), +PARTITION p682 VALUES IN (2728,2729,2730,2731), +PARTITION p683 VALUES IN (2732,2733,2734,2735), +PARTITION p684 VALUES IN (2736,2737,2738,2739), +PARTITION p685 VALUES IN (2740,2741,2742,2743), +PARTITION p686 VALUES IN (2744,2745,2746,2747), +PARTITION p687 VALUES IN (2748,2749,2750,2751), +PARTITION p688 VALUES IN (2752,2753,2754,2755), +PARTITION p689 VALUES IN (2756,2757,2758,2759), +PARTITION p690 VALUES IN (2760,2761,2762,2763), +PARTITION p691 VALUES IN (2764,2765,2766,2767), +PARTITION p692 VALUES IN (2768,2769,2770,2771), +PARTITION p693 VALUES IN (2772,2773,2774,2775), +PARTITION p694 VALUES IN (2776,2777,2778,2779), +PARTITION p695 VALUES IN (2780,2781,2782,2783), +PARTITION p696 VALUES IN (2784,2785,2786,2787), +PARTITION p697 VALUES IN (2788,2789,2790,2791), +PARTITION p698 VALUES IN (2792,2793,2794,2795), +PARTITION p699 VALUES IN (2796,2797,2798,2799), +PARTITION p700 VALUES IN (2800,2801,2802,2803), +PARTITION p701 VALUES IN (2804,2805,2806,2807), +PARTITION p702 VALUES IN (2808,2809,2810,2811), +PARTITION p703 VALUES IN (2812,2813,2814,2815), +PARTITION p704 VALUES IN (2816,2817,2818,2819), +PARTITION p705 VALUES IN (2820,2821,2822,2823), +PARTITION p706 VALUES IN (2824,2825,2826,2827), +PARTITION p707 VALUES IN (2828,2829,2830,2831), +PARTITION p708 VALUES IN (2832,2833,2834,2835), +PARTITION p709 VALUES IN (2836,2837,2838,2839), +PARTITION p710 VALUES IN (2840,2841,2842,2843), +PARTITION p711 VALUES IN (2844,2845,2846,2847), +PARTITION p712 VALUES IN (2848,2849,2850,2851), +PARTITION p713 VALUES IN (2852,2853,2854,2855), +PARTITION p714 VALUES IN (2856,2857,2858,2859), +PARTITION p715 VALUES IN (2860,2861,2862,2863), +PARTITION p716 VALUES IN (2864,2865,2866,2867), +PARTITION p717 VALUES IN (2868,2869,2870,2871), +PARTITION p718 VALUES IN (2872,2873,2874,2875), +PARTITION p719 VALUES IN (2876,2877,2878,2879), +PARTITION p720 VALUES IN (2880,2881,2882,2883), +PARTITION p721 VALUES IN (2884,2885,2886,2887), +PARTITION p722 VALUES IN (2888,2889,2890,2891), +PARTITION p723 VALUES IN (2892,2893,2894,2895), +PARTITION p724 VALUES IN (2896,2897,2898,2899), +PARTITION p725 VALUES IN (2900,2901,2902,2903), +PARTITION p726 VALUES IN (2904,2905,2906,2907), +PARTITION p727 VALUES IN (2908,2909,2910,2911), +PARTITION p728 VALUES IN (2912,2913,2914,2915), +PARTITION p729 VALUES IN (2916,2917,2918,2919), +PARTITION p730 VALUES IN (2920,2921,2922,2923), +PARTITION p731 VALUES IN (2924,2925,2926,2927), +PARTITION p732 VALUES IN (2928,2929,2930,2931), +PARTITION p733 VALUES IN (2932,2933,2934,2935), +PARTITION p734 VALUES IN (2936,2937,2938,2939), +PARTITION p735 VALUES IN (2940,2941,2942,2943), +PARTITION p736 VALUES IN (2944,2945,2946,2947), +PARTITION p737 VALUES IN (2948,2949,2950,2951), +PARTITION p738 VALUES IN (2952,2953,2954,2955), +PARTITION p739 VALUES IN (2956,2957,2958,2959), +PARTITION p740 VALUES IN (2960,2961,2962,2963), +PARTITION p741 VALUES IN (2964,2965,2966,2967), +PARTITION p742 VALUES IN (2968,2969,2970,2971), +PARTITION p743 VALUES IN (2972,2973,2974,2975), +PARTITION p744 VALUES IN (2976,2977,2978,2979), +PARTITION p745 VALUES IN (2980,2981,2982,2983), +PARTITION p746 VALUES IN (2984,2985,2986,2987), +PARTITION p747 VALUES IN (2988,2989,2990,2991), +PARTITION p748 VALUES IN (2992,2993,2994,2995), +PARTITION p749 VALUES IN (2996,2997,2998,2999), +PARTITION p750 VALUES IN (3000,3001,3002,3003), +PARTITION p751 VALUES IN (3004,3005,3006,3007), +PARTITION p752 VALUES IN (3008,3009,3010,3011), +PARTITION p753 VALUES IN (3012,3013,3014,3015), +PARTITION p754 VALUES IN (3016,3017,3018,3019), +PARTITION p755 VALUES IN (3020,3021,3022,3023), +PARTITION p756 VALUES IN (3024,3025,3026,3027), +PARTITION p757 VALUES IN (3028,3029,3030,3031), +PARTITION p758 VALUES IN (3032,3033,3034,3035), +PARTITION p759 VALUES IN (3036,3037,3038,3039), +PARTITION p760 VALUES IN (3040,3041,3042,3043), +PARTITION p761 VALUES IN (3044,3045,3046,3047), +PARTITION p762 VALUES IN (3048,3049,3050,3051), +PARTITION p763 VALUES IN (3052,3053,3054,3055), +PARTITION p764 VALUES IN (3056,3057,3058,3059), +PARTITION p765 VALUES IN (3060,3061,3062,3063), +PARTITION p766 VALUES IN (3064,3065,3066,3067), +PARTITION p767 VALUES IN (3068,3069,3070,3071), +PARTITION p768 VALUES IN (3072,3073,3074,3075), +PARTITION p769 VALUES IN (3076,3077,3078,3079), +PARTITION p770 VALUES IN (3080,3081,3082,3083), +PARTITION p771 VALUES IN (3084,3085,3086,3087), +PARTITION p772 VALUES IN (3088,3089,3090,3091), +PARTITION p773 VALUES IN (3092,3093,3094,3095), +PARTITION p774 VALUES IN (3096,3097,3098,3099), +PARTITION p775 VALUES IN (3100,3101,3102,3103), +PARTITION p776 VALUES IN (3104,3105,3106,3107), +PARTITION p777 VALUES IN (3108,3109,3110,3111), +PARTITION p778 VALUES IN (3112,3113,3114,3115), +PARTITION p779 VALUES IN (3116,3117,3118,3119), +PARTITION p780 VALUES IN (3120,3121,3122,3123), +PARTITION p781 VALUES IN (3124,3125,3126,3127), +PARTITION p782 VALUES IN (3128,3129,3130,3131), +PARTITION p783 VALUES IN (3132,3133,3134,3135), +PARTITION p784 VALUES IN (3136,3137,3138,3139), +PARTITION p785 VALUES IN (3140,3141,3142,3143), +PARTITION p786 VALUES IN (3144,3145,3146,3147), +PARTITION p787 VALUES IN (3148,3149,3150,3151), +PARTITION p788 VALUES IN (3152,3153,3154,3155), +PARTITION p789 VALUES IN (3156,3157,3158,3159), +PARTITION p790 VALUES IN (3160,3161,3162,3163), +PARTITION p791 VALUES IN (3164,3165,3166,3167), +PARTITION p792 VALUES IN (3168,3169,3170,3171), +PARTITION p793 VALUES IN (3172,3173,3174,3175), +PARTITION p794 VALUES IN (3176,3177,3178,3179), +PARTITION p795 VALUES IN (3180,3181,3182,3183), +PARTITION p796 VALUES IN (3184,3185,3186,3187), +PARTITION p797 VALUES IN (3188,3189,3190,3191), +PARTITION p798 VALUES IN (3192,3193,3194,3195), +PARTITION p799 VALUES IN (3196,3197,3198,3199), +PARTITION p800 VALUES IN (3200,3201,3202,3203), +PARTITION p801 VALUES IN (3204,3205,3206,3207), +PARTITION p802 VALUES IN (3208,3209,3210,3211), +PARTITION p803 VALUES IN (3212,3213,3214,3215), +PARTITION p804 VALUES IN (3216,3217,3218,3219), +PARTITION p805 VALUES IN (3220,3221,3222,3223), +PARTITION p806 VALUES IN (3224,3225,3226,3227), +PARTITION p807 VALUES IN (3228,3229,3230,3231), +PARTITION p808 VALUES IN (3232,3233,3234,3235), +PARTITION p809 VALUES IN (3236,3237,3238,3239), +PARTITION p810 VALUES IN (3240,3241,3242,3243), +PARTITION p811 VALUES IN (3244,3245,3246,3247), +PARTITION p812 VALUES IN (3248,3249,3250,3251), +PARTITION p813 VALUES IN (3252,3253,3254,3255), +PARTITION p814 VALUES IN (3256,3257,3258,3259), +PARTITION p815 VALUES IN (3260,3261,3262,3263), +PARTITION p816 VALUES IN (3264,3265,3266,3267), +PARTITION p817 VALUES IN (3268,3269,3270,3271), +PARTITION p818 VALUES IN (3272,3273,3274,3275), +PARTITION p819 VALUES IN (3276,3277,3278,3279), +PARTITION p820 VALUES IN (3280,3281,3282,3283), +PARTITION p821 VALUES IN (3284,3285,3286,3287), +PARTITION p822 VALUES IN (3288,3289,3290,3291), +PARTITION p823 VALUES IN (3292,3293,3294,3295), +PARTITION p824 VALUES IN (3296,3297,3298,3299), +PARTITION p825 VALUES IN (3300,3301,3302,3303), +PARTITION p826 VALUES IN (3304,3305,3306,3307), +PARTITION p827 VALUES IN (3308,3309,3310,3311), +PARTITION p828 VALUES IN (3312,3313,3314,3315), +PARTITION p829 VALUES IN (3316,3317,3318,3319), +PARTITION p830 VALUES IN (3320,3321,3322,3323), +PARTITION p831 VALUES IN (3324,3325,3326,3327), +PARTITION p832 VALUES IN (3328,3329,3330,3331), +PARTITION p833 VALUES IN (3332,3333,3334,3335), +PARTITION p834 VALUES IN (3336,3337,3338,3339), +PARTITION p835 VALUES IN (3340,3341,3342,3343), +PARTITION p836 VALUES IN (3344,3345,3346,3347), +PARTITION p837 VALUES IN (3348,3349,3350,3351), +PARTITION p838 VALUES IN (3352,3353,3354,3355), +PARTITION p839 VALUES IN (3356,3357,3358,3359), +PARTITION p840 VALUES IN (3360,3361,3362,3363), +PARTITION p841 VALUES IN (3364,3365,3366,3367), +PARTITION p842 VALUES IN (3368,3369,3370,3371), +PARTITION p843 VALUES IN (3372,3373,3374,3375), +PARTITION p844 VALUES IN (3376,3377,3378,3379), +PARTITION p845 VALUES IN (3380,3381,3382,3383), +PARTITION p846 VALUES IN (3384,3385,3386,3387), +PARTITION p847 VALUES IN (3388,3389,3390,3391), +PARTITION p848 VALUES IN (3392,3393,3394,3395), +PARTITION p849 VALUES IN (3396,3397,3398,3399), +PARTITION p850 VALUES IN (3400,3401,3402,3403), +PARTITION p851 VALUES IN (3404,3405,3406,3407), +PARTITION p852 VALUES IN (3408,3409,3410,3411), +PARTITION p853 VALUES IN (3412,3413,3414,3415), +PARTITION p854 VALUES IN (3416,3417,3418,3419), +PARTITION p855 VALUES IN (3420,3421,3422,3423), +PARTITION p856 VALUES IN (3424,3425,3426,3427), +PARTITION p857 VALUES IN (3428,3429,3430,3431), +PARTITION p858 VALUES IN (3432,3433,3434,3435), +PARTITION p859 VALUES IN (3436,3437,3438,3439), +PARTITION p860 VALUES IN (3440,3441,3442,3443), +PARTITION p861 VALUES IN (3444,3445,3446,3447), +PARTITION p862 VALUES IN (3448,3449,3450,3451), +PARTITION p863 VALUES IN (3452,3453,3454,3455), +PARTITION p864 VALUES IN (3456,3457,3458,3459), +PARTITION p865 VALUES IN (3460,3461,3462,3463), +PARTITION p866 VALUES IN (3464,3465,3466,3467), +PARTITION p867 VALUES IN (3468,3469,3470,3471), +PARTITION p868 VALUES IN (3472,3473,3474,3475), +PARTITION p869 VALUES IN (3476,3477,3478,3479), +PARTITION p870 VALUES IN (3480,3481,3482,3483), +PARTITION p871 VALUES IN (3484,3485,3486,3487), +PARTITION p872 VALUES IN (3488,3489,3490,3491), +PARTITION p873 VALUES IN (3492,3493,3494,3495), +PARTITION p874 VALUES IN (3496,3497,3498,3499), +PARTITION p875 VALUES IN (3500,3501,3502,3503), +PARTITION p876 VALUES IN (3504,3505,3506,3507), +PARTITION p877 VALUES IN (3508,3509,3510,3511), +PARTITION p878 VALUES IN (3512,3513,3514,3515), +PARTITION p879 VALUES IN (3516,3517,3518,3519), +PARTITION p880 VALUES IN (3520,3521,3522,3523), +PARTITION p881 VALUES IN (3524,3525,3526,3527), +PARTITION p882 VALUES IN (3528,3529,3530,3531), +PARTITION p883 VALUES IN (3532,3533,3534,3535), +PARTITION p884 VALUES IN (3536,3537,3538,3539), +PARTITION p885 VALUES IN (3540,3541,3542,3543), +PARTITION p886 VALUES IN (3544,3545,3546,3547), +PARTITION p887 VALUES IN (3548,3549,3550,3551), +PARTITION p888 VALUES IN (3552,3553,3554,3555), +PARTITION p889 VALUES IN (3556,3557,3558,3559), +PARTITION p890 VALUES IN (3560,3561,3562,3563), +PARTITION p891 VALUES IN (3564,3565,3566,3567), +PARTITION p892 VALUES IN (3568,3569,3570,3571), +PARTITION p893 VALUES IN (3572,3573,3574,3575), +PARTITION p894 VALUES IN (3576,3577,3578,3579), +PARTITION p895 VALUES IN (3580,3581,3582,3583), +PARTITION p896 VALUES IN (3584,3585,3586,3587), +PARTITION p897 VALUES IN (3588,3589,3590,3591), +PARTITION p898 VALUES IN (3592,3593,3594,3595), +PARTITION p899 VALUES IN (3596,3597,3598,3599), +PARTITION p900 VALUES IN (3600,3601,3602,3603), +PARTITION p901 VALUES IN (3604,3605,3606,3607), +PARTITION p902 VALUES IN (3608,3609,3610,3611), +PARTITION p903 VALUES IN (3612,3613,3614,3615), +PARTITION p904 VALUES IN (3616,3617,3618,3619), +PARTITION p905 VALUES IN (3620,3621,3622,3623), +PARTITION p906 VALUES IN (3624,3625,3626,3627), +PARTITION p907 VALUES IN (3628,3629,3630,3631), +PARTITION p908 VALUES IN (3632,3633,3634,3635), +PARTITION p909 VALUES IN (3636,3637,3638,3639), +PARTITION p910 VALUES IN (3640,3641,3642,3643), +PARTITION p911 VALUES IN (3644,3645,3646,3647), +PARTITION p912 VALUES IN (3648,3649,3650,3651), +PARTITION p913 VALUES IN (3652,3653,3654,3655), +PARTITION p914 VALUES IN (3656,3657,3658,3659), +PARTITION p915 VALUES IN (3660,3661,3662,3663), +PARTITION p916 VALUES IN (3664,3665,3666,3667), +PARTITION p917 VALUES IN (3668,3669,3670,3671), +PARTITION p918 VALUES IN (3672,3673,3674,3675), +PARTITION p919 VALUES IN (3676,3677,3678,3679), +PARTITION p920 VALUES IN (3680,3681,3682,3683), +PARTITION p921 VALUES IN (3684,3685,3686,3687), +PARTITION p922 VALUES IN (3688,3689,3690,3691), +PARTITION p923 VALUES IN (3692,3693,3694,3695), +PARTITION p924 VALUES IN (3696,3697,3698,3699), +PARTITION p925 VALUES IN (3700,3701,3702,3703), +PARTITION p926 VALUES IN (3704,3705,3706,3707), +PARTITION p927 VALUES IN (3708,3709,3710,3711), +PARTITION p928 VALUES IN (3712,3713,3714,3715), +PARTITION p929 VALUES IN (3716,3717,3718,3719), +PARTITION p930 VALUES IN (3720,3721,3722,3723), +PARTITION p931 VALUES IN (3724,3725,3726,3727), +PARTITION p932 VALUES IN (3728,3729,3730,3731), +PARTITION p933 VALUES IN (3732,3733,3734,3735), +PARTITION p934 VALUES IN (3736,3737,3738,3739), +PARTITION p935 VALUES IN (3740,3741,3742,3743), +PARTITION p936 VALUES IN (3744,3745,3746,3747), +PARTITION p937 VALUES IN (3748,3749,3750,3751), +PARTITION p938 VALUES IN (3752,3753,3754,3755), +PARTITION p939 VALUES IN (3756,3757,3758,3759), +PARTITION p940 VALUES IN (3760,3761,3762,3763), +PARTITION p941 VALUES IN (3764,3765,3766,3767), +PARTITION p942 VALUES IN (3768,3769,3770,3771), +PARTITION p943 VALUES IN (3772,3773,3774,3775), +PARTITION p944 VALUES IN (3776,3777,3778,3779), +PARTITION p945 VALUES IN (3780,3781,3782,3783), +PARTITION p946 VALUES IN (3784,3785,3786,3787), +PARTITION p947 VALUES IN (3788,3789,3790,3791), +PARTITION p948 VALUES IN (3792,3793,3794,3795), +PARTITION p949 VALUES IN (3796,3797,3798,3799), +PARTITION p950 VALUES IN (3800,3801,3802,3803), +PARTITION p951 VALUES IN (3804,3805,3806,3807), +PARTITION p952 VALUES IN (3808,3809,3810,3811), +PARTITION p953 VALUES IN (3812,3813,3814,3815), +PARTITION p954 VALUES IN (3816,3817,3818,3819), +PARTITION p955 VALUES IN (3820,3821,3822,3823), +PARTITION p956 VALUES IN (3824,3825,3826,3827), +PARTITION p957 VALUES IN (3828,3829,3830,3831), +PARTITION p958 VALUES IN (3832,3833,3834,3835), +PARTITION p959 VALUES IN (3836,3837,3838,3839), +PARTITION p960 VALUES IN (3840,3841,3842,3843), +PARTITION p961 VALUES IN (3844,3845,3846,3847), +PARTITION p962 VALUES IN (3848,3849,3850,3851), +PARTITION p963 VALUES IN (3852,3853,3854,3855), +PARTITION p964 VALUES IN (3856,3857,3858,3859), +PARTITION p965 VALUES IN (3860,3861,3862,3863), +PARTITION p966 VALUES IN (3864,3865,3866,3867), +PARTITION p967 VALUES IN (3868,3869,3870,3871), +PARTITION p968 VALUES IN (3872,3873,3874,3875), +PARTITION p969 VALUES IN (3876,3877,3878,3879), +PARTITION p970 VALUES IN (3880,3881,3882,3883), +PARTITION p971 VALUES IN (3884,3885,3886,3887), +PARTITION p972 VALUES IN (3888,3889,3890,3891), +PARTITION p973 VALUES IN (3892,3893,3894,3895), +PARTITION p974 VALUES IN (3896,3897,3898,3899), +PARTITION p975 VALUES IN (3900,3901,3902,3903), +PARTITION p976 VALUES IN (3904,3905,3906,3907), +PARTITION p977 VALUES IN (3908,3909,3910,3911), +PARTITION p978 VALUES IN (3912,3913,3914,3915), +PARTITION p979 VALUES IN (3916,3917,3918,3919), +PARTITION p980 VALUES IN (3920,3921,3922,3923), +PARTITION p981 VALUES IN (3924,3925,3926,3927), +PARTITION p982 VALUES IN (3928,3929,3930,3931), +PARTITION p983 VALUES IN (3932,3933,3934,3935), +PARTITION p984 VALUES IN (3936,3937,3938,3939), +PARTITION p985 VALUES IN (3940,3941,3942,3943), +PARTITION p986 VALUES IN (3944,3945,3946,3947), +PARTITION p987 VALUES IN (3948,3949,3950,3951), +PARTITION p988 VALUES IN (3952,3953,3954,3955), +PARTITION p989 VALUES IN (3956,3957,3958,3959), +PARTITION p990 VALUES IN (3960,3961,3962,3963), +PARTITION p991 VALUES IN (3964,3965,3966,3967), +PARTITION p992 VALUES IN (3968,3969,3970,3971), +PARTITION p993 VALUES IN (3972,3973,3974,3975), +PARTITION p994 VALUES IN (3976,3977,3978,3979), +PARTITION p995 VALUES IN (3980,3981,3982,3983), +PARTITION p996 VALUES IN (3984,3985,3986,3987), +PARTITION p997 VALUES IN (3988,3989,3990,3991), +PARTITION p998 VALUES IN (3992,3993,3994,3995), +PARTITION p999 VALUES IN (3996,3997,3998,3999), +PARTITION p1000 VALUES IN (4000,4001,4002,4003), +PARTITION p1001 VALUES IN (4004,4005,4006,4007), +PARTITION p1002 VALUES IN (4008,4009,4010,4011), +PARTITION p1003 VALUES IN (4012,4013,4014,4015), +PARTITION p1004 VALUES IN (4016,4017,4018,4019), +PARTITION p1005 VALUES IN (4020,4021,4022,4023), +PARTITION p1006 VALUES IN (4024,4025,4026,4027), +PARTITION p1007 VALUES IN (4028,4029,4030,4031), +PARTITION p1008 VALUES IN (4032,4033,4034,4035), +PARTITION p1009 VALUES IN (4036,4037,4038,4039), +PARTITION p1010 VALUES IN (4040,4041,4042,4043), +PARTITION p1011 VALUES IN (4044,4045,4046,4047), +PARTITION p1012 VALUES IN (4048,4049,4050,4051), +PARTITION p1013 VALUES IN (4052,4053,4054,4055), +PARTITION p1014 VALUES IN (4056,4057,4058,4059), +PARTITION p1015 VALUES IN (4060,4061,4062,4063), +PARTITION p1016 VALUES IN (4064,4065,4066,4067), +PARTITION p1017 VALUES IN (4068,4069,4070,4071), +PARTITION p1018 VALUES IN (4072,4073,4074,4075), +PARTITION p1019 VALUES IN (4076,4077,4078,4079), +PARTITION p1020 VALUES IN (4080,4081,4082,4083), +PARTITION p1021 VALUES IN (4084,4085,4086,4087), +PARTITION p1022 VALUES IN (4088,4089,4090,4091), +PARTITION p1023 VALUES IN (4092,4093,4094,4095), +PARTITION p1024 VALUES IN (4096,4097,4098,4099), +PARTITION p1025 VALUES IN (4100,4101,4102,4103), +PARTITION p1026 VALUES IN (4104,4105,4106,4107), +PARTITION p1027 VALUES IN (4108,4109,4110,4111), +PARTITION p1028 VALUES IN (4112,4113,4114,4115), +PARTITION p1029 VALUES IN (4116,4117,4118,4119), +PARTITION p1030 VALUES IN (4120,4121,4122,4123), +PARTITION p1031 VALUES IN (4124,4125,4126,4127), +PARTITION p1032 VALUES IN (4128,4129,4130,4131), +PARTITION p1033 VALUES IN (4132,4133,4134,4135), +PARTITION p1034 VALUES IN (4136,4137,4138,4139), +PARTITION p1035 VALUES IN (4140,4141,4142,4143), +PARTITION p1036 VALUES IN (4144,4145,4146,4147), +PARTITION p1037 VALUES IN (4148,4149,4150,4151), +PARTITION p1038 VALUES IN (4152,4153,4154,4155), +PARTITION p1039 VALUES IN (4156,4157,4158,4159), +PARTITION p1040 VALUES IN (4160,4161,4162,4163), +PARTITION p1041 VALUES IN (4164,4165,4166,4167), +PARTITION p1042 VALUES IN (4168,4169,4170,4171), +PARTITION p1043 VALUES IN (4172,4173,4174,4175), +PARTITION p1044 VALUES IN (4176,4177,4178,4179), +PARTITION p1045 VALUES IN (4180,4181,4182,4183), +PARTITION p1046 VALUES IN (4184,4185,4186,4187), +PARTITION p1047 VALUES IN (4188,4189,4190,4191), +PARTITION p1048 VALUES IN (4192,4193,4194,4195), +PARTITION p1049 VALUES IN (4196,4197,4198,4199), +PARTITION p1050 VALUES IN (4200,4201,4202,4203), +PARTITION p1051 VALUES IN (4204,4205,4206,4207), +PARTITION p1052 VALUES IN (4208,4209,4210,4211), +PARTITION p1053 VALUES IN (4212,4213,4214,4215), +PARTITION p1054 VALUES IN (4216,4217,4218,4219), +PARTITION p1055 VALUES IN (4220,4221,4222,4223), +PARTITION p1056 VALUES IN (4224,4225,4226,4227), +PARTITION p1057 VALUES IN (4228,4229,4230,4231), +PARTITION p1058 VALUES IN (4232,4233,4234,4235), +PARTITION p1059 VALUES IN (4236,4237,4238,4239), +PARTITION p1060 VALUES IN (4240,4241,4242,4243), +PARTITION p1061 VALUES IN (4244,4245,4246,4247), +PARTITION p1062 VALUES IN (4248,4249,4250,4251), +PARTITION p1063 VALUES IN (4252,4253,4254,4255), +PARTITION p1064 VALUES IN (4256,4257,4258,4259), +PARTITION p1065 VALUES IN (4260,4261,4262,4263), +PARTITION p1066 VALUES IN (4264,4265,4266,4267), +PARTITION p1067 VALUES IN (4268,4269,4270,4271), +PARTITION p1068 VALUES IN (4272,4273,4274,4275), +PARTITION p1069 VALUES IN (4276,4277,4278,4279), +PARTITION p1070 VALUES IN (4280,4281,4282,4283), +PARTITION p1071 VALUES IN (4284,4285,4286,4287), +PARTITION p1072 VALUES IN (4288,4289,4290,4291), +PARTITION p1073 VALUES IN (4292,4293,4294,4295), +PARTITION p1074 VALUES IN (4296,4297,4298,4299), +PARTITION p1075 VALUES IN (4300,4301,4302,4303), +PARTITION p1076 VALUES IN (4304,4305,4306,4307), +PARTITION p1077 VALUES IN (4308,4309,4310,4311), +PARTITION p1078 VALUES IN (4312,4313,4314,4315), +PARTITION p1079 VALUES IN (4316,4317,4318,4319), +PARTITION p1080 VALUES IN (4320,4321,4322,4323), +PARTITION p1081 VALUES IN (4324,4325,4326,4327), +PARTITION p1082 VALUES IN (4328,4329,4330,4331), +PARTITION p1083 VALUES IN (4332,4333,4334,4335), +PARTITION p1084 VALUES IN (4336,4337,4338,4339), +PARTITION p1085 VALUES IN (4340,4341,4342,4343), +PARTITION p1086 VALUES IN (4344,4345,4346,4347), +PARTITION p1087 VALUES IN (4348,4349,4350,4351), +PARTITION p1088 VALUES IN (4352,4353,4354,4355), +PARTITION p1089 VALUES IN (4356,4357,4358,4359), +PARTITION p1090 VALUES IN (4360,4361,4362,4363), +PARTITION p1091 VALUES IN (4364,4365,4366,4367), +PARTITION p1092 VALUES IN (4368,4369,4370,4371), +PARTITION p1093 VALUES IN (4372,4373,4374,4375), +PARTITION p1094 VALUES IN (4376,4377,4378,4379), +PARTITION p1095 VALUES IN (4380,4381,4382,4383), +PARTITION p1096 VALUES IN (4384,4385,4386,4387), +PARTITION p1097 VALUES IN (4388,4389,4390,4391), +PARTITION p1098 VALUES IN (4392,4393,4394,4395), +PARTITION p1099 VALUES IN (4396,4397,4398,4399), +PARTITION p1100 VALUES IN (4400,4401,4402,4403), +PARTITION p1101 VALUES IN (4404,4405,4406,4407), +PARTITION p1102 VALUES IN (4408,4409,4410,4411), +PARTITION p1103 VALUES IN (4412,4413,4414,4415), +PARTITION p1104 VALUES IN (4416,4417,4418,4419), +PARTITION p1105 VALUES IN (4420,4421,4422,4423), +PARTITION p1106 VALUES IN (4424,4425,4426,4427), +PARTITION p1107 VALUES IN (4428,4429,4430,4431), +PARTITION p1108 VALUES IN (4432,4433,4434,4435), +PARTITION p1109 VALUES IN (4436,4437,4438,4439), +PARTITION p1110 VALUES IN (4440,4441,4442,4443), +PARTITION p1111 VALUES IN (4444,4445,4446,4447), +PARTITION p1112 VALUES IN (4448,4449,4450,4451), +PARTITION p1113 VALUES IN (4452,4453,4454,4455), +PARTITION p1114 VALUES IN (4456,4457,4458,4459), +PARTITION p1115 VALUES IN (4460,4461,4462,4463), +PARTITION p1116 VALUES IN (4464,4465,4466,4467), +PARTITION p1117 VALUES IN (4468,4469,4470,4471), +PARTITION p1118 VALUES IN (4472,4473,4474,4475), +PARTITION p1119 VALUES IN (4476,4477,4478,4479), +PARTITION p1120 VALUES IN (4480,4481,4482,4483), +PARTITION p1121 VALUES IN (4484,4485,4486,4487), +PARTITION p1122 VALUES IN (4488,4489,4490,4491), +PARTITION p1123 VALUES IN (4492,4493,4494,4495), +PARTITION p1124 VALUES IN (4496,4497,4498,4499), +PARTITION p1125 VALUES IN (4500,4501,4502,4503), +PARTITION p1126 VALUES IN (4504,4505,4506,4507), +PARTITION p1127 VALUES IN (4508,4509,4510,4511), +PARTITION p1128 VALUES IN (4512,4513,4514,4515), +PARTITION p1129 VALUES IN (4516,4517,4518,4519), +PARTITION p1130 VALUES IN (4520,4521,4522,4523), +PARTITION p1131 VALUES IN (4524,4525,4526,4527), +PARTITION p1132 VALUES IN (4528,4529,4530,4531), +PARTITION p1133 VALUES IN (4532,4533,4534,4535), +PARTITION p1134 VALUES IN (4536,4537,4538,4539), +PARTITION p1135 VALUES IN (4540,4541,4542,4543), +PARTITION p1136 VALUES IN (4544,4545,4546,4547), +PARTITION p1137 VALUES IN (4548,4549,4550,4551), +PARTITION p1138 VALUES IN (4552,4553,4554,4555), +PARTITION p1139 VALUES IN (4556,4557,4558,4559), +PARTITION p1140 VALUES IN (4560,4561,4562,4563), +PARTITION p1141 VALUES IN (4564,4565,4566,4567), +PARTITION p1142 VALUES IN (4568,4569,4570,4571), +PARTITION p1143 VALUES IN (4572,4573,4574,4575), +PARTITION p1144 VALUES IN (4576,4577,4578,4579), +PARTITION p1145 VALUES IN (4580,4581,4582,4583), +PARTITION p1146 VALUES IN (4584,4585,4586,4587), +PARTITION p1147 VALUES IN (4588,4589,4590,4591), +PARTITION p1148 VALUES IN (4592,4593,4594,4595), +PARTITION p1149 VALUES IN (4596,4597,4598,4599), +PARTITION p1150 VALUES IN (4600,4601,4602,4603), +PARTITION p1151 VALUES IN (4604,4605,4606,4607), +PARTITION p1152 VALUES IN (4608,4609,4610,4611), +PARTITION p1153 VALUES IN (4612,4613,4614,4615), +PARTITION p1154 VALUES IN (4616,4617,4618,4619), +PARTITION p1155 VALUES IN (4620,4621,4622,4623), +PARTITION p1156 VALUES IN (4624,4625,4626,4627), +PARTITION p1157 VALUES IN (4628,4629,4630,4631), +PARTITION p1158 VALUES IN (4632,4633,4634,4635), +PARTITION p1159 VALUES IN (4636,4637,4638,4639), +PARTITION p1160 VALUES IN (4640,4641,4642,4643), +PARTITION p1161 VALUES IN (4644,4645,4646,4647), +PARTITION p1162 VALUES IN (4648,4649,4650,4651), +PARTITION p1163 VALUES IN (4652,4653,4654,4655), +PARTITION p1164 VALUES IN (4656,4657,4658,4659), +PARTITION p1165 VALUES IN (4660,4661,4662,4663), +PARTITION p1166 VALUES IN (4664,4665,4666,4667), +PARTITION p1167 VALUES IN (4668,4669,4670,4671), +PARTITION p1168 VALUES IN (4672,4673,4674,4675), +PARTITION p1169 VALUES IN (4676,4677,4678,4679), +PARTITION p1170 VALUES IN (4680,4681,4682,4683), +PARTITION p1171 VALUES IN (4684,4685,4686,4687), +PARTITION p1172 VALUES IN (4688,4689,4690,4691), +PARTITION p1173 VALUES IN (4692,4693,4694,4695), +PARTITION p1174 VALUES IN (4696,4697,4698,4699), +PARTITION p1175 VALUES IN (4700,4701,4702,4703), +PARTITION p1176 VALUES IN (4704,4705,4706,4707), +PARTITION p1177 VALUES IN (4708,4709,4710,4711), +PARTITION p1178 VALUES IN (4712,4713,4714,4715), +PARTITION p1179 VALUES IN (4716,4717,4718,4719), +PARTITION p1180 VALUES IN (4720,4721,4722,4723), +PARTITION p1181 VALUES IN (4724,4725,4726,4727), +PARTITION p1182 VALUES IN (4728,4729,4730,4731), +PARTITION p1183 VALUES IN (4732,4733,4734,4735), +PARTITION p1184 VALUES IN (4736,4737,4738,4739), +PARTITION p1185 VALUES IN (4740,4741,4742,4743), +PARTITION p1186 VALUES IN (4744,4745,4746,4747), +PARTITION p1187 VALUES IN (4748,4749,4750,4751), +PARTITION p1188 VALUES IN (4752,4753,4754,4755), +PARTITION p1189 VALUES IN (4756,4757,4758,4759), +PARTITION p1190 VALUES IN (4760,4761,4762,4763), +PARTITION p1191 VALUES IN (4764,4765,4766,4767), +PARTITION p1192 VALUES IN (4768,4769,4770,4771), +PARTITION p1193 VALUES IN (4772,4773,4774,4775), +PARTITION p1194 VALUES IN (4776,4777,4778,4779), +PARTITION p1195 VALUES IN (4780,4781,4782,4783), +PARTITION p1196 VALUES IN (4784,4785,4786,4787), +PARTITION p1197 VALUES IN (4788,4789,4790,4791), +PARTITION p1198 VALUES IN (4792,4793,4794,4795), +PARTITION p1199 VALUES IN (4796,4797,4798,4799), +PARTITION p1200 VALUES IN (4800,4801,4802,4803), +PARTITION p1201 VALUES IN (4804,4805,4806,4807), +PARTITION p1202 VALUES IN (4808,4809,4810,4811), +PARTITION p1203 VALUES IN (4812,4813,4814,4815), +PARTITION p1204 VALUES IN (4816,4817,4818,4819), +PARTITION p1205 VALUES IN (4820,4821,4822,4823), +PARTITION p1206 VALUES IN (4824,4825,4826,4827), +PARTITION p1207 VALUES IN (4828,4829,4830,4831), +PARTITION p1208 VALUES IN (4832,4833,4834,4835), +PARTITION p1209 VALUES IN (4836,4837,4838,4839), +PARTITION p1210 VALUES IN (4840,4841,4842,4843), +PARTITION p1211 VALUES IN (4844,4845,4846,4847), +PARTITION p1212 VALUES IN (4848,4849,4850,4851), +PARTITION p1213 VALUES IN (4852,4853,4854,4855), +PARTITION p1214 VALUES IN (4856,4857,4858,4859), +PARTITION p1215 VALUES IN (4860,4861,4862,4863), +PARTITION p1216 VALUES IN (4864,4865,4866,4867), +PARTITION p1217 VALUES IN (4868,4869,4870,4871), +PARTITION p1218 VALUES IN (4872,4873,4874,4875), +PARTITION p1219 VALUES IN (4876,4877,4878,4879), +PARTITION p1220 VALUES IN (4880,4881,4882,4883), +PARTITION p1221 VALUES IN (4884,4885,4886,4887), +PARTITION p1222 VALUES IN (4888,4889,4890,4891), +PARTITION p1223 VALUES IN (4892,4893,4894,4895), +PARTITION p1224 VALUES IN (4896,4897,4898,4899), +PARTITION p1225 VALUES IN (4900,4901,4902,4903), +PARTITION p1226 VALUES IN (4904,4905,4906,4907), +PARTITION p1227 VALUES IN (4908,4909,4910,4911), +PARTITION p1228 VALUES IN (4912,4913,4914,4915), +PARTITION p1229 VALUES IN (4916,4917,4918,4919), +PARTITION p1230 VALUES IN (4920,4921,4922,4923), +PARTITION p1231 VALUES IN (4924,4925,4926,4927), +PARTITION p1232 VALUES IN (4928,4929,4930,4931), +PARTITION p1233 VALUES IN (4932,4933,4934,4935), +PARTITION p1234 VALUES IN (4936,4937,4938,4939), +PARTITION p1235 VALUES IN (4940,4941,4942,4943), +PARTITION p1236 VALUES IN (4944,4945,4946,4947), +PARTITION p1237 VALUES IN (4948,4949,4950,4951), +PARTITION p1238 VALUES IN (4952,4953,4954,4955), +PARTITION p1239 VALUES IN (4956,4957,4958,4959), +PARTITION p1240 VALUES IN (4960,4961,4962,4963), +PARTITION p1241 VALUES IN (4964,4965,4966,4967), +PARTITION p1242 VALUES IN (4968,4969,4970,4971), +PARTITION p1243 VALUES IN (4972,4973,4974,4975), +PARTITION p1244 VALUES IN (4976,4977,4978,4979), +PARTITION p1245 VALUES IN (4980,4981,4982,4983), +PARTITION p1246 VALUES IN (4984,4985,4986,4987), +PARTITION p1247 VALUES IN (4988,4989,4990,4991), +PARTITION p1248 VALUES IN (4992,4993,4994,4995), +PARTITION p1249 VALUES IN (4996,4997,4998,4999), +PARTITION p1250 VALUES IN (5000,5001,5002,5003), +PARTITION p1251 VALUES IN (5004,5005,5006,5007), +PARTITION p1252 VALUES IN (5008,5009,5010,5011), +PARTITION p1253 VALUES IN (5012,5013,5014,5015), +PARTITION p1254 VALUES IN (5016,5017,5018,5019), +PARTITION p1255 VALUES IN (5020,5021,5022,5023), +PARTITION p1256 VALUES IN (5024,5025,5026,5027), +PARTITION p1257 VALUES IN (5028,5029,5030,5031), +PARTITION p1258 VALUES IN (5032,5033,5034,5035), +PARTITION p1259 VALUES IN (5036,5037,5038,5039), +PARTITION p1260 VALUES IN (5040,5041,5042,5043), +PARTITION p1261 VALUES IN (5044,5045,5046,5047), +PARTITION p1262 VALUES IN (5048,5049,5050,5051), +PARTITION p1263 VALUES IN (5052,5053,5054,5055), +PARTITION p1264 VALUES IN (5056,5057,5058,5059), +PARTITION p1265 VALUES IN (5060,5061,5062,5063), +PARTITION p1266 VALUES IN (5064,5065,5066,5067), +PARTITION p1267 VALUES IN (5068,5069,5070,5071), +PARTITION p1268 VALUES IN (5072,5073,5074,5075), +PARTITION p1269 VALUES IN (5076,5077,5078,5079), +PARTITION p1270 VALUES IN (5080,5081,5082,5083), +PARTITION p1271 VALUES IN (5084,5085,5086,5087), +PARTITION p1272 VALUES IN (5088,5089,5090,5091), +PARTITION p1273 VALUES IN (5092,5093,5094,5095), +PARTITION p1274 VALUES IN (5096,5097,5098,5099), +PARTITION p1275 VALUES IN (5100,5101,5102,5103), +PARTITION p1276 VALUES IN (5104,5105,5106,5107), +PARTITION p1277 VALUES IN (5108,5109,5110,5111), +PARTITION p1278 VALUES IN (5112,5113,5114,5115), +PARTITION p1279 VALUES IN (5116,5117,5118,5119), +PARTITION p1280 VALUES IN (5120,5121,5122,5123), +PARTITION p1281 VALUES IN (5124,5125,5126,5127), +PARTITION p1282 VALUES IN (5128,5129,5130,5131), +PARTITION p1283 VALUES IN (5132,5133,5134,5135), +PARTITION p1284 VALUES IN (5136,5137,5138,5139), +PARTITION p1285 VALUES IN (5140,5141,5142,5143), +PARTITION p1286 VALUES IN (5144,5145,5146,5147), +PARTITION p1287 VALUES IN (5148,5149,5150,5151), +PARTITION p1288 VALUES IN (5152,5153,5154,5155), +PARTITION p1289 VALUES IN (5156,5157,5158,5159), +PARTITION p1290 VALUES IN (5160,5161,5162,5163), +PARTITION p1291 VALUES IN (5164,5165,5166,5167), +PARTITION p1292 VALUES IN (5168,5169,5170,5171), +PARTITION p1293 VALUES IN (5172,5173,5174,5175), +PARTITION p1294 VALUES IN (5176,5177,5178,5179), +PARTITION p1295 VALUES IN (5180,5181,5182,5183), +PARTITION p1296 VALUES IN (5184,5185,5186,5187), +PARTITION p1297 VALUES IN (5188,5189,5190,5191), +PARTITION p1298 VALUES IN (5192,5193,5194,5195), +PARTITION p1299 VALUES IN (5196,5197,5198,5199), +PARTITION p1300 VALUES IN (5200,5201,5202,5203), +PARTITION p1301 VALUES IN (5204,5205,5206,5207), +PARTITION p1302 VALUES IN (5208,5209,5210,5211), +PARTITION p1303 VALUES IN (5212,5213,5214,5215), +PARTITION p1304 VALUES IN (5216,5217,5218,5219), +PARTITION p1305 VALUES IN (5220,5221,5222,5223), +PARTITION p1306 VALUES IN (5224,5225,5226,5227), +PARTITION p1307 VALUES IN (5228,5229,5230,5231), +PARTITION p1308 VALUES IN (5232,5233,5234,5235), +PARTITION p1309 VALUES IN (5236,5237,5238,5239), +PARTITION p1310 VALUES IN (5240,5241,5242,5243), +PARTITION p1311 VALUES IN (5244,5245,5246,5247), +PARTITION p1312 VALUES IN (5248,5249,5250,5251), +PARTITION p1313 VALUES IN (5252,5253,5254,5255), +PARTITION p1314 VALUES IN (5256,5257,5258,5259), +PARTITION p1315 VALUES IN (5260,5261,5262,5263), +PARTITION p1316 VALUES IN (5264,5265,5266,5267), +PARTITION p1317 VALUES IN (5268,5269,5270,5271), +PARTITION p1318 VALUES IN (5272,5273,5274,5275), +PARTITION p1319 VALUES IN (5276,5277,5278,5279), +PARTITION p1320 VALUES IN (5280,5281,5282,5283), +PARTITION p1321 VALUES IN (5284,5285,5286,5287), +PARTITION p1322 VALUES IN (5288,5289,5290,5291), +PARTITION p1323 VALUES IN (5292,5293,5294,5295), +PARTITION p1324 VALUES IN (5296,5297,5298,5299), +PARTITION p1325 VALUES IN (5300,5301,5302,5303), +PARTITION p1326 VALUES IN (5304,5305,5306,5307), +PARTITION p1327 VALUES IN (5308,5309,5310,5311), +PARTITION p1328 VALUES IN (5312,5313,5314,5315), +PARTITION p1329 VALUES IN (5316,5317,5318,5319), +PARTITION p1330 VALUES IN (5320,5321,5322,5323), +PARTITION p1331 VALUES IN (5324,5325,5326,5327), +PARTITION p1332 VALUES IN (5328,5329,5330,5331), +PARTITION p1333 VALUES IN (5332,5333,5334,5335), +PARTITION p1334 VALUES IN (5336,5337,5338,5339), +PARTITION p1335 VALUES IN (5340,5341,5342,5343), +PARTITION p1336 VALUES IN (5344,5345,5346,5347), +PARTITION p1337 VALUES IN (5348,5349,5350,5351), +PARTITION p1338 VALUES IN (5352,5353,5354,5355), +PARTITION p1339 VALUES IN (5356,5357,5358,5359), +PARTITION p1340 VALUES IN (5360,5361,5362,5363), +PARTITION p1341 VALUES IN (5364,5365,5366,5367), +PARTITION p1342 VALUES IN (5368,5369,5370,5371), +PARTITION p1343 VALUES IN (5372,5373,5374,5375), +PARTITION p1344 VALUES IN (5376,5377,5378,5379), +PARTITION p1345 VALUES IN (5380,5381,5382,5383), +PARTITION p1346 VALUES IN (5384,5385,5386,5387), +PARTITION p1347 VALUES IN (5388,5389,5390,5391), +PARTITION p1348 VALUES IN (5392,5393,5394,5395), +PARTITION p1349 VALUES IN (5396,5397,5398,5399), +PARTITION p1350 VALUES IN (5400,5401,5402,5403), +PARTITION p1351 VALUES IN (5404,5405,5406,5407), +PARTITION p1352 VALUES IN (5408,5409,5410,5411), +PARTITION p1353 VALUES IN (5412,5413,5414,5415), +PARTITION p1354 VALUES IN (5416,5417,5418,5419), +PARTITION p1355 VALUES IN (5420,5421,5422,5423), +PARTITION p1356 VALUES IN (5424,5425,5426,5427), +PARTITION p1357 VALUES IN (5428,5429,5430,5431), +PARTITION p1358 VALUES IN (5432,5433,5434,5435), +PARTITION p1359 VALUES IN (5436,5437,5438,5439), +PARTITION p1360 VALUES IN (5440,5441,5442,5443), +PARTITION p1361 VALUES IN (5444,5445,5446,5447), +PARTITION p1362 VALUES IN (5448,5449,5450,5451), +PARTITION p1363 VALUES IN (5452,5453,5454,5455), +PARTITION p1364 VALUES IN (5456,5457,5458,5459), +PARTITION p1365 VALUES IN (5460,5461,5462,5463), +PARTITION p1366 VALUES IN (5464,5465,5466,5467), +PARTITION p1367 VALUES IN (5468,5469,5470,5471), +PARTITION p1368 VALUES IN (5472,5473,5474,5475), +PARTITION p1369 VALUES IN (5476,5477,5478,5479), +PARTITION p1370 VALUES IN (5480,5481,5482,5483), +PARTITION p1371 VALUES IN (5484,5485,5486,5487), +PARTITION p1372 VALUES IN (5488,5489,5490,5491), +PARTITION p1373 VALUES IN (5492,5493,5494,5495), +PARTITION p1374 VALUES IN (5496,5497,5498,5499), +PARTITION p1375 VALUES IN (5500,5501,5502,5503), +PARTITION p1376 VALUES IN (5504,5505,5506,5507), +PARTITION p1377 VALUES IN (5508,5509,5510,5511), +PARTITION p1378 VALUES IN (5512,5513,5514,5515), +PARTITION p1379 VALUES IN (5516,5517,5518,5519), +PARTITION p1380 VALUES IN (5520,5521,5522,5523), +PARTITION p1381 VALUES IN (5524,5525,5526,5527), +PARTITION p1382 VALUES IN (5528,5529,5530,5531), +PARTITION p1383 VALUES IN (5532,5533,5534,5535), +PARTITION p1384 VALUES IN (5536,5537,5538,5539), +PARTITION p1385 VALUES IN (5540,5541,5542,5543), +PARTITION p1386 VALUES IN (5544,5545,5546,5547), +PARTITION p1387 VALUES IN (5548,5549,5550,5551), +PARTITION p1388 VALUES IN (5552,5553,5554,5555), +PARTITION p1389 VALUES IN (5556,5557,5558,5559), +PARTITION p1390 VALUES IN (5560,5561,5562,5563), +PARTITION p1391 VALUES IN (5564,5565,5566,5567), +PARTITION p1392 VALUES IN (5568,5569,5570,5571), +PARTITION p1393 VALUES IN (5572,5573,5574,5575), +PARTITION p1394 VALUES IN (5576,5577,5578,5579), +PARTITION p1395 VALUES IN (5580,5581,5582,5583), +PARTITION p1396 VALUES IN (5584,5585,5586,5587), +PARTITION p1397 VALUES IN (5588,5589,5590,5591), +PARTITION p1398 VALUES IN (5592,5593,5594,5595), +PARTITION p1399 VALUES IN (5596,5597,5598,5599), +PARTITION p1400 VALUES IN (5600,5601,5602,5603), +PARTITION p1401 VALUES IN (5604,5605,5606,5607), +PARTITION p1402 VALUES IN (5608,5609,5610,5611), +PARTITION p1403 VALUES IN (5612,5613,5614,5615), +PARTITION p1404 VALUES IN (5616,5617,5618,5619), +PARTITION p1405 VALUES IN (5620,5621,5622,5623), +PARTITION p1406 VALUES IN (5624,5625,5626,5627), +PARTITION p1407 VALUES IN (5628,5629,5630,5631), +PARTITION p1408 VALUES IN (5632,5633,5634,5635), +PARTITION p1409 VALUES IN (5636,5637,5638,5639), +PARTITION p1410 VALUES IN (5640,5641,5642,5643), +PARTITION p1411 VALUES IN (5644,5645,5646,5647), +PARTITION p1412 VALUES IN (5648,5649,5650,5651), +PARTITION p1413 VALUES IN (5652,5653,5654,5655), +PARTITION p1414 VALUES IN (5656,5657,5658,5659), +PARTITION p1415 VALUES IN (5660,5661,5662,5663), +PARTITION p1416 VALUES IN (5664,5665,5666,5667), +PARTITION p1417 VALUES IN (5668,5669,5670,5671), +PARTITION p1418 VALUES IN (5672,5673,5674,5675), +PARTITION p1419 VALUES IN (5676,5677,5678,5679), +PARTITION p1420 VALUES IN (5680,5681,5682,5683), +PARTITION p1421 VALUES IN (5684,5685,5686,5687), +PARTITION p1422 VALUES IN (5688,5689,5690,5691), +PARTITION p1423 VALUES IN (5692,5693,5694,5695), +PARTITION p1424 VALUES IN (5696,5697,5698,5699), +PARTITION p1425 VALUES IN (5700,5701,5702,5703), +PARTITION p1426 VALUES IN (5704,5705,5706,5707), +PARTITION p1427 VALUES IN (5708,5709,5710,5711), +PARTITION p1428 VALUES IN (5712,5713,5714,5715), +PARTITION p1429 VALUES IN (5716,5717,5718,5719), +PARTITION p1430 VALUES IN (5720,5721,5722,5723), +PARTITION p1431 VALUES IN (5724,5725,5726,5727), +PARTITION p1432 VALUES IN (5728,5729,5730,5731), +PARTITION p1433 VALUES IN (5732,5733,5734,5735), +PARTITION p1434 VALUES IN (5736,5737,5738,5739), +PARTITION p1435 VALUES IN (5740,5741,5742,5743), +PARTITION p1436 VALUES IN (5744,5745,5746,5747), +PARTITION p1437 VALUES IN (5748,5749,5750,5751), +PARTITION p1438 VALUES IN (5752,5753,5754,5755), +PARTITION p1439 VALUES IN (5756,5757,5758,5759), +PARTITION p1440 VALUES IN (5760,5761,5762,5763), +PARTITION p1441 VALUES IN (5764,5765,5766,5767), +PARTITION p1442 VALUES IN (5768,5769,5770,5771), +PARTITION p1443 VALUES IN (5772,5773,5774,5775), +PARTITION p1444 VALUES IN (5776,5777,5778,5779), +PARTITION p1445 VALUES IN (5780,5781,5782,5783), +PARTITION p1446 VALUES IN (5784,5785,5786,5787), +PARTITION p1447 VALUES IN (5788,5789,5790,5791), +PARTITION p1448 VALUES IN (5792,5793,5794,5795), +PARTITION p1449 VALUES IN (5796,5797,5798,5799), +PARTITION p1450 VALUES IN (5800,5801,5802,5803), +PARTITION p1451 VALUES IN (5804,5805,5806,5807), +PARTITION p1452 VALUES IN (5808,5809,5810,5811), +PARTITION p1453 VALUES IN (5812,5813,5814,5815), +PARTITION p1454 VALUES IN (5816,5817,5818,5819), +PARTITION p1455 VALUES IN (5820,5821,5822,5823), +PARTITION p1456 VALUES IN (5824,5825,5826,5827), +PARTITION p1457 VALUES IN (5828,5829,5830,5831), +PARTITION p1458 VALUES IN (5832,5833,5834,5835), +PARTITION p1459 VALUES IN (5836,5837,5838,5839), +PARTITION p1460 VALUES IN (5840,5841,5842,5843), +PARTITION p1461 VALUES IN (5844,5845,5846,5847), +PARTITION p1462 VALUES IN (5848,5849,5850,5851), +PARTITION p1463 VALUES IN (5852,5853,5854,5855), +PARTITION p1464 VALUES IN (5856,5857,5858,5859), +PARTITION p1465 VALUES IN (5860,5861,5862,5863), +PARTITION p1466 VALUES IN (5864,5865,5866,5867), +PARTITION p1467 VALUES IN (5868,5869,5870,5871), +PARTITION p1468 VALUES IN (5872,5873,5874,5875), +PARTITION p1469 VALUES IN (5876,5877,5878,5879), +PARTITION p1470 VALUES IN (5880,5881,5882,5883), +PARTITION p1471 VALUES IN (5884,5885,5886,5887), +PARTITION p1472 VALUES IN (5888,5889,5890,5891), +PARTITION p1473 VALUES IN (5892,5893,5894,5895), +PARTITION p1474 VALUES IN (5896,5897,5898,5899), +PARTITION p1475 VALUES IN (5900,5901,5902,5903), +PARTITION p1476 VALUES IN (5904,5905,5906,5907), +PARTITION p1477 VALUES IN (5908,5909,5910,5911), +PARTITION p1478 VALUES IN (5912,5913,5914,5915), +PARTITION p1479 VALUES IN (5916,5917,5918,5919), +PARTITION p1480 VALUES IN (5920,5921,5922,5923), +PARTITION p1481 VALUES IN (5924,5925,5926,5927), +PARTITION p1482 VALUES IN (5928,5929,5930,5931), +PARTITION p1483 VALUES IN (5932,5933,5934,5935), +PARTITION p1484 VALUES IN (5936,5937,5938,5939), +PARTITION p1485 VALUES IN (5940,5941,5942,5943), +PARTITION p1486 VALUES IN (5944,5945,5946,5947), +PARTITION p1487 VALUES IN (5948,5949,5950,5951), +PARTITION p1488 VALUES IN (5952,5953,5954,5955), +PARTITION p1489 VALUES IN (5956,5957,5958,5959), +PARTITION p1490 VALUES IN (5960,5961,5962,5963), +PARTITION p1491 VALUES IN (5964,5965,5966,5967), +PARTITION p1492 VALUES IN (5968,5969,5970,5971), +PARTITION p1493 VALUES IN (5972,5973,5974,5975), +PARTITION p1494 VALUES IN (5976,5977,5978,5979), +PARTITION p1495 VALUES IN (5980,5981,5982,5983), +PARTITION p1496 VALUES IN (5984,5985,5986,5987), +PARTITION p1497 VALUES IN (5988,5989,5990,5991), +PARTITION p1498 VALUES IN (5992,5993,5994,5995), +PARTITION p1499 VALUES IN (5996,5997,5998,5999), +PARTITION p1500 VALUES IN (6000,6001,6002,6003), +PARTITION p1501 VALUES IN (6004,6005,6006,6007), +PARTITION p1502 VALUES IN (6008,6009,6010,6011), +PARTITION p1503 VALUES IN (6012,6013,6014,6015), +PARTITION p1504 VALUES IN (6016,6017,6018,6019), +PARTITION p1505 VALUES IN (6020,6021,6022,6023), +PARTITION p1506 VALUES IN (6024,6025,6026,6027), +PARTITION p1507 VALUES IN (6028,6029,6030,6031), +PARTITION p1508 VALUES IN (6032,6033,6034,6035), +PARTITION p1509 VALUES IN (6036,6037,6038,6039), +PARTITION p1510 VALUES IN (6040,6041,6042,6043), +PARTITION p1511 VALUES IN (6044,6045,6046,6047), +PARTITION p1512 VALUES IN (6048,6049,6050,6051), +PARTITION p1513 VALUES IN (6052,6053,6054,6055), +PARTITION p1514 VALUES IN (6056,6057,6058,6059), +PARTITION p1515 VALUES IN (6060,6061,6062,6063), +PARTITION p1516 VALUES IN (6064,6065,6066,6067), +PARTITION p1517 VALUES IN (6068,6069,6070,6071), +PARTITION p1518 VALUES IN (6072,6073,6074,6075), +PARTITION p1519 VALUES IN (6076,6077,6078,6079), +PARTITION p1520 VALUES IN (6080,6081,6082,6083), +PARTITION p1521 VALUES IN (6084,6085,6086,6087), +PARTITION p1522 VALUES IN (6088,6089,6090,6091), +PARTITION p1523 VALUES IN (6092,6093,6094,6095), +PARTITION p1524 VALUES IN (6096,6097,6098,6099), +PARTITION p1525 VALUES IN (6100,6101,6102,6103), +PARTITION p1526 VALUES IN (6104,6105,6106,6107), +PARTITION p1527 VALUES IN (6108,6109,6110,6111), +PARTITION p1528 VALUES IN (6112,6113,6114,6115), +PARTITION p1529 VALUES IN (6116,6117,6118,6119), +PARTITION p1530 VALUES IN (6120,6121,6122,6123), +PARTITION p1531 VALUES IN (6124,6125,6126,6127), +PARTITION p1532 VALUES IN (6128,6129,6130,6131), +PARTITION p1533 VALUES IN (6132,6133,6134,6135), +PARTITION p1534 VALUES IN (6136,6137,6138,6139), +PARTITION p1535 VALUES IN (6140,6141,6142,6143), +PARTITION p1536 VALUES IN (6144,6145,6146,6147), +PARTITION p1537 VALUES IN (6148,6149,6150,6151), +PARTITION p1538 VALUES IN (6152,6153,6154,6155), +PARTITION p1539 VALUES IN (6156,6157,6158,6159), +PARTITION p1540 VALUES IN (6160,6161,6162,6163), +PARTITION p1541 VALUES IN (6164,6165,6166,6167), +PARTITION p1542 VALUES IN (6168,6169,6170,6171), +PARTITION p1543 VALUES IN (6172,6173,6174,6175), +PARTITION p1544 VALUES IN (6176,6177,6178,6179), +PARTITION p1545 VALUES IN (6180,6181,6182,6183), +PARTITION p1546 VALUES IN (6184,6185,6186,6187), +PARTITION p1547 VALUES IN (6188,6189,6190,6191), +PARTITION p1548 VALUES IN (6192,6193,6194,6195), +PARTITION p1549 VALUES IN (6196,6197,6198,6199), +PARTITION p1550 VALUES IN (6200,6201,6202,6203), +PARTITION p1551 VALUES IN (6204,6205,6206,6207), +PARTITION p1552 VALUES IN (6208,6209,6210,6211), +PARTITION p1553 VALUES IN (6212,6213,6214,6215), +PARTITION p1554 VALUES IN (6216,6217,6218,6219), +PARTITION p1555 VALUES IN (6220,6221,6222,6223), +PARTITION p1556 VALUES IN (6224,6225,6226,6227), +PARTITION p1557 VALUES IN (6228,6229,6230,6231), +PARTITION p1558 VALUES IN (6232,6233,6234,6235), +PARTITION p1559 VALUES IN (6236,6237,6238,6239), +PARTITION p1560 VALUES IN (6240,6241,6242,6243), +PARTITION p1561 VALUES IN (6244,6245,6246,6247), +PARTITION p1562 VALUES IN (6248,6249,6250,6251), +PARTITION p1563 VALUES IN (6252,6253,6254,6255), +PARTITION p1564 VALUES IN (6256,6257,6258,6259), +PARTITION p1565 VALUES IN (6260,6261,6262,6263), +PARTITION p1566 VALUES IN (6264,6265,6266,6267), +PARTITION p1567 VALUES IN (6268,6269,6270,6271), +PARTITION p1568 VALUES IN (6272,6273,6274,6275), +PARTITION p1569 VALUES IN (6276,6277,6278,6279), +PARTITION p1570 VALUES IN (6280,6281,6282,6283), +PARTITION p1571 VALUES IN (6284,6285,6286,6287), +PARTITION p1572 VALUES IN (6288,6289,6290,6291), +PARTITION p1573 VALUES IN (6292,6293,6294,6295), +PARTITION p1574 VALUES IN (6296,6297,6298,6299), +PARTITION p1575 VALUES IN (6300,6301,6302,6303), +PARTITION p1576 VALUES IN (6304,6305,6306,6307), +PARTITION p1577 VALUES IN (6308,6309,6310,6311), +PARTITION p1578 VALUES IN (6312,6313,6314,6315), +PARTITION p1579 VALUES IN (6316,6317,6318,6319), +PARTITION p1580 VALUES IN (6320,6321,6322,6323), +PARTITION p1581 VALUES IN (6324,6325,6326,6327), +PARTITION p1582 VALUES IN (6328,6329,6330,6331), +PARTITION p1583 VALUES IN (6332,6333,6334,6335), +PARTITION p1584 VALUES IN (6336,6337,6338,6339), +PARTITION p1585 VALUES IN (6340,6341,6342,6343), +PARTITION p1586 VALUES IN (6344,6345,6346,6347), +PARTITION p1587 VALUES IN (6348,6349,6350,6351), +PARTITION p1588 VALUES IN (6352,6353,6354,6355), +PARTITION p1589 VALUES IN (6356,6357,6358,6359), +PARTITION p1590 VALUES IN (6360,6361,6362,6363), +PARTITION p1591 VALUES IN (6364,6365,6366,6367), +PARTITION p1592 VALUES IN (6368,6369,6370,6371), +PARTITION p1593 VALUES IN (6372,6373,6374,6375), +PARTITION p1594 VALUES IN (6376,6377,6378,6379), +PARTITION p1595 VALUES IN (6380,6381,6382,6383), +PARTITION p1596 VALUES IN (6384,6385,6386,6387), +PARTITION p1597 VALUES IN (6388,6389,6390,6391), +PARTITION p1598 VALUES IN (6392,6393,6394,6395), +PARTITION p1599 VALUES IN (6396,6397,6398,6399), +PARTITION p1600 VALUES IN (6400,6401,6402,6403), +PARTITION p1601 VALUES IN (6404,6405,6406,6407), +PARTITION p1602 VALUES IN (6408,6409,6410,6411), +PARTITION p1603 VALUES IN (6412,6413,6414,6415), +PARTITION p1604 VALUES IN (6416,6417,6418,6419), +PARTITION p1605 VALUES IN (6420,6421,6422,6423), +PARTITION p1606 VALUES IN (6424,6425,6426,6427), +PARTITION p1607 VALUES IN (6428,6429,6430,6431), +PARTITION p1608 VALUES IN (6432,6433,6434,6435), +PARTITION p1609 VALUES IN (6436,6437,6438,6439), +PARTITION p1610 VALUES IN (6440,6441,6442,6443), +PARTITION p1611 VALUES IN (6444,6445,6446,6447), +PARTITION p1612 VALUES IN (6448,6449,6450,6451), +PARTITION p1613 VALUES IN (6452,6453,6454,6455), +PARTITION p1614 VALUES IN (6456,6457,6458,6459), +PARTITION p1615 VALUES IN (6460,6461,6462,6463), +PARTITION p1616 VALUES IN (6464,6465,6466,6467), +PARTITION p1617 VALUES IN (6468,6469,6470,6471), +PARTITION p1618 VALUES IN (6472,6473,6474,6475), +PARTITION p1619 VALUES IN (6476,6477,6478,6479), +PARTITION p1620 VALUES IN (6480,6481,6482,6483), +PARTITION p1621 VALUES IN (6484,6485,6486,6487), +PARTITION p1622 VALUES IN (6488,6489,6490,6491), +PARTITION p1623 VALUES IN (6492,6493,6494,6495), +PARTITION p1624 VALUES IN (6496,6497,6498,6499), +PARTITION p1625 VALUES IN (6500,6501,6502,6503), +PARTITION p1626 VALUES IN (6504,6505,6506,6507), +PARTITION p1627 VALUES IN (6508,6509,6510,6511), +PARTITION p1628 VALUES IN (6512,6513,6514,6515), +PARTITION p1629 VALUES IN (6516,6517,6518,6519), +PARTITION p1630 VALUES IN (6520,6521,6522,6523), +PARTITION p1631 VALUES IN (6524,6525,6526,6527), +PARTITION p1632 VALUES IN (6528,6529,6530,6531), +PARTITION p1633 VALUES IN (6532,6533,6534,6535), +PARTITION p1634 VALUES IN (6536,6537,6538,6539), +PARTITION p1635 VALUES IN (6540,6541,6542,6543), +PARTITION p1636 VALUES IN (6544,6545,6546,6547), +PARTITION p1637 VALUES IN (6548,6549,6550,6551), +PARTITION p1638 VALUES IN (6552,6553,6554,6555), +PARTITION p1639 VALUES IN (6556,6557,6558,6559), +PARTITION p1640 VALUES IN (6560,6561,6562,6563), +PARTITION p1641 VALUES IN (6564,6565,6566,6567), +PARTITION p1642 VALUES IN (6568,6569,6570,6571), +PARTITION p1643 VALUES IN (6572,6573,6574,6575), +PARTITION p1644 VALUES IN (6576,6577,6578,6579), +PARTITION p1645 VALUES IN (6580,6581,6582,6583), +PARTITION p1646 VALUES IN (6584,6585,6586,6587), +PARTITION p1647 VALUES IN (6588,6589,6590,6591), +PARTITION p1648 VALUES IN (6592,6593,6594,6595), +PARTITION p1649 VALUES IN (6596,6597,6598,6599), +PARTITION p1650 VALUES IN (6600,6601,6602,6603), +PARTITION p1651 VALUES IN (6604,6605,6606,6607), +PARTITION p1652 VALUES IN (6608,6609,6610,6611), +PARTITION p1653 VALUES IN (6612,6613,6614,6615), +PARTITION p1654 VALUES IN (6616,6617,6618,6619), +PARTITION p1655 VALUES IN (6620,6621,6622,6623), +PARTITION p1656 VALUES IN (6624,6625,6626,6627), +PARTITION p1657 VALUES IN (6628,6629,6630,6631), +PARTITION p1658 VALUES IN (6632,6633,6634,6635), +PARTITION p1659 VALUES IN (6636,6637,6638,6639), +PARTITION p1660 VALUES IN (6640,6641,6642,6643), +PARTITION p1661 VALUES IN (6644,6645,6646,6647), +PARTITION p1662 VALUES IN (6648,6649,6650,6651), +PARTITION p1663 VALUES IN (6652,6653,6654,6655), +PARTITION p1664 VALUES IN (6656,6657,6658,6659), +PARTITION p1665 VALUES IN (6660,6661,6662,6663), +PARTITION p1666 VALUES IN (6664,6665,6666,6667), +PARTITION p1667 VALUES IN (6668,6669,6670,6671), +PARTITION p1668 VALUES IN (6672,6673,6674,6675), +PARTITION p1669 VALUES IN (6676,6677,6678,6679), +PARTITION p1670 VALUES IN (6680,6681,6682,6683), +PARTITION p1671 VALUES IN (6684,6685,6686,6687), +PARTITION p1672 VALUES IN (6688,6689,6690,6691), +PARTITION p1673 VALUES IN (6692,6693,6694,6695), +PARTITION p1674 VALUES IN (6696,6697,6698,6699), +PARTITION p1675 VALUES IN (6700,6701,6702,6703), +PARTITION p1676 VALUES IN (6704,6705,6706,6707), +PARTITION p1677 VALUES IN (6708,6709,6710,6711), +PARTITION p1678 VALUES IN (6712,6713,6714,6715), +PARTITION p1679 VALUES IN (6716,6717,6718,6719), +PARTITION p1680 VALUES IN (6720,6721,6722,6723), +PARTITION p1681 VALUES IN (6724,6725,6726,6727), +PARTITION p1682 VALUES IN (6728,6729,6730,6731), +PARTITION p1683 VALUES IN (6732,6733,6734,6735), +PARTITION p1684 VALUES IN (6736,6737,6738,6739), +PARTITION p1685 VALUES IN (6740,6741,6742,6743), +PARTITION p1686 VALUES IN (6744,6745,6746,6747), +PARTITION p1687 VALUES IN (6748,6749,6750,6751), +PARTITION p1688 VALUES IN (6752,6753,6754,6755), +PARTITION p1689 VALUES IN (6756,6757,6758,6759), +PARTITION p1690 VALUES IN (6760,6761,6762,6763), +PARTITION p1691 VALUES IN (6764,6765,6766,6767), +PARTITION p1692 VALUES IN (6768,6769,6770,6771), +PARTITION p1693 VALUES IN (6772,6773,6774,6775), +PARTITION p1694 VALUES IN (6776,6777,6778,6779), +PARTITION p1695 VALUES IN (6780,6781,6782,6783), +PARTITION p1696 VALUES IN (6784,6785,6786,6787), +PARTITION p1697 VALUES IN (6788,6789,6790,6791), +PARTITION p1698 VALUES IN (6792,6793,6794,6795), +PARTITION p1699 VALUES IN (6796,6797,6798,6799), +PARTITION p1700 VALUES IN (6800,6801,6802,6803), +PARTITION p1701 VALUES IN (6804,6805,6806,6807), +PARTITION p1702 VALUES IN (6808,6809,6810,6811), +PARTITION p1703 VALUES IN (6812,6813,6814,6815), +PARTITION p1704 VALUES IN (6816,6817,6818,6819), +PARTITION p1705 VALUES IN (6820,6821,6822,6823), +PARTITION p1706 VALUES IN (6824,6825,6826,6827), +PARTITION p1707 VALUES IN (6828,6829,6830,6831), +PARTITION p1708 VALUES IN (6832,6833,6834,6835), +PARTITION p1709 VALUES IN (6836,6837,6838,6839), +PARTITION p1710 VALUES IN (6840,6841,6842,6843), +PARTITION p1711 VALUES IN (6844,6845,6846,6847), +PARTITION p1712 VALUES IN (6848,6849,6850,6851), +PARTITION p1713 VALUES IN (6852,6853,6854,6855), +PARTITION p1714 VALUES IN (6856,6857,6858,6859), +PARTITION p1715 VALUES IN (6860,6861,6862,6863), +PARTITION p1716 VALUES IN (6864,6865,6866,6867), +PARTITION p1717 VALUES IN (6868,6869,6870,6871), +PARTITION p1718 VALUES IN (6872,6873,6874,6875), +PARTITION p1719 VALUES IN (6876,6877,6878,6879), +PARTITION p1720 VALUES IN (6880,6881,6882,6883), +PARTITION p1721 VALUES IN (6884,6885,6886,6887), +PARTITION p1722 VALUES IN (6888,6889,6890,6891), +PARTITION p1723 VALUES IN (6892,6893,6894,6895), +PARTITION p1724 VALUES IN (6896,6897,6898,6899), +PARTITION p1725 VALUES IN (6900,6901,6902,6903), +PARTITION p1726 VALUES IN (6904,6905,6906,6907), +PARTITION p1727 VALUES IN (6908,6909,6910,6911), +PARTITION p1728 VALUES IN (6912,6913,6914,6915), +PARTITION p1729 VALUES IN (6916,6917,6918,6919), +PARTITION p1730 VALUES IN (6920,6921,6922,6923), +PARTITION p1731 VALUES IN (6924,6925,6926,6927), +PARTITION p1732 VALUES IN (6928,6929,6930,6931), +PARTITION p1733 VALUES IN (6932,6933,6934,6935), +PARTITION p1734 VALUES IN (6936,6937,6938,6939), +PARTITION p1735 VALUES IN (6940,6941,6942,6943), +PARTITION p1736 VALUES IN (6944,6945,6946,6947), +PARTITION p1737 VALUES IN (6948,6949,6950,6951), +PARTITION p1738 VALUES IN (6952,6953,6954,6955), +PARTITION p1739 VALUES IN (6956,6957,6958,6959), +PARTITION p1740 VALUES IN (6960,6961,6962,6963), +PARTITION p1741 VALUES IN (6964,6965,6966,6967), +PARTITION p1742 VALUES IN (6968,6969,6970,6971), +PARTITION p1743 VALUES IN (6972,6973,6974,6975), +PARTITION p1744 VALUES IN (6976,6977,6978,6979), +PARTITION p1745 VALUES IN (6980,6981,6982,6983), +PARTITION p1746 VALUES IN (6984,6985,6986,6987), +PARTITION p1747 VALUES IN (6988,6989,6990,6991), +PARTITION p1748 VALUES IN (6992,6993,6994,6995), +PARTITION p1749 VALUES IN (6996,6997,6998,6999), +PARTITION p1750 VALUES IN (7000,7001,7002,7003), +PARTITION p1751 VALUES IN (7004,7005,7006,7007), +PARTITION p1752 VALUES IN (7008,7009,7010,7011), +PARTITION p1753 VALUES IN (7012,7013,7014,7015), +PARTITION p1754 VALUES IN (7016,7017,7018,7019), +PARTITION p1755 VALUES IN (7020,7021,7022,7023), +PARTITION p1756 VALUES IN (7024,7025,7026,7027), +PARTITION p1757 VALUES IN (7028,7029,7030,7031), +PARTITION p1758 VALUES IN (7032,7033,7034,7035), +PARTITION p1759 VALUES IN (7036,7037,7038,7039), +PARTITION p1760 VALUES IN (7040,7041,7042,7043), +PARTITION p1761 VALUES IN (7044,7045,7046,7047), +PARTITION p1762 VALUES IN (7048,7049,7050,7051), +PARTITION p1763 VALUES IN (7052,7053,7054,7055), +PARTITION p1764 VALUES IN (7056,7057,7058,7059), +PARTITION p1765 VALUES IN (7060,7061,7062,7063), +PARTITION p1766 VALUES IN (7064,7065,7066,7067), +PARTITION p1767 VALUES IN (7068,7069,7070,7071), +PARTITION p1768 VALUES IN (7072,7073,7074,7075), +PARTITION p1769 VALUES IN (7076,7077,7078,7079), +PARTITION p1770 VALUES IN (7080,7081,7082,7083), +PARTITION p1771 VALUES IN (7084,7085,7086,7087), +PARTITION p1772 VALUES IN (7088,7089,7090,7091), +PARTITION p1773 VALUES IN (7092,7093,7094,7095), +PARTITION p1774 VALUES IN (7096,7097,7098,7099), +PARTITION p1775 VALUES IN (7100,7101,7102,7103), +PARTITION p1776 VALUES IN (7104,7105,7106,7107), +PARTITION p1777 VALUES IN (7108,7109,7110,7111), +PARTITION p1778 VALUES IN (7112,7113,7114,7115), +PARTITION p1779 VALUES IN (7116,7117,7118,7119), +PARTITION p1780 VALUES IN (7120,7121,7122,7123), +PARTITION p1781 VALUES IN (7124,7125,7126,7127), +PARTITION p1782 VALUES IN (7128,7129,7130,7131), +PARTITION p1783 VALUES IN (7132,7133,7134,7135), +PARTITION p1784 VALUES IN (7136,7137,7138,7139), +PARTITION p1785 VALUES IN (7140,7141,7142,7143), +PARTITION p1786 VALUES IN (7144,7145,7146,7147), +PARTITION p1787 VALUES IN (7148,7149,7150,7151), +PARTITION p1788 VALUES IN (7152,7153,7154,7155), +PARTITION p1789 VALUES IN (7156,7157,7158,7159), +PARTITION p1790 VALUES IN (7160,7161,7162,7163), +PARTITION p1791 VALUES IN (7164,7165,7166,7167), +PARTITION p1792 VALUES IN (7168,7169,7170,7171), +PARTITION p1793 VALUES IN (7172,7173,7174,7175), +PARTITION p1794 VALUES IN (7176,7177,7178,7179), +PARTITION p1795 VALUES IN (7180,7181,7182,7183), +PARTITION p1796 VALUES IN (7184,7185,7186,7187), +PARTITION p1797 VALUES IN (7188,7189,7190,7191), +PARTITION p1798 VALUES IN (7192,7193,7194,7195), +PARTITION p1799 VALUES IN (7196,7197,7198,7199), +PARTITION p1800 VALUES IN (7200,7201,7202,7203), +PARTITION p1801 VALUES IN (7204,7205,7206,7207), +PARTITION p1802 VALUES IN (7208,7209,7210,7211), +PARTITION p1803 VALUES IN (7212,7213,7214,7215), +PARTITION p1804 VALUES IN (7216,7217,7218,7219), +PARTITION p1805 VALUES IN (7220,7221,7222,7223), +PARTITION p1806 VALUES IN (7224,7225,7226,7227), +PARTITION p1807 VALUES IN (7228,7229,7230,7231), +PARTITION p1808 VALUES IN (7232,7233,7234,7235), +PARTITION p1809 VALUES IN (7236,7237,7238,7239), +PARTITION p1810 VALUES IN (7240,7241,7242,7243), +PARTITION p1811 VALUES IN (7244,7245,7246,7247), +PARTITION p1812 VALUES IN (7248,7249,7250,7251), +PARTITION p1813 VALUES IN (7252,7253,7254,7255), +PARTITION p1814 VALUES IN (7256,7257,7258,7259), +PARTITION p1815 VALUES IN (7260,7261,7262,7263), +PARTITION p1816 VALUES IN (7264,7265,7266,7267), +PARTITION p1817 VALUES IN (7268,7269,7270,7271), +PARTITION p1818 VALUES IN (7272,7273,7274,7275), +PARTITION p1819 VALUES IN (7276,7277,7278,7279), +PARTITION p1820 VALUES IN (7280,7281,7282,7283), +PARTITION p1821 VALUES IN (7284,7285,7286,7287), +PARTITION p1822 VALUES IN (7288,7289,7290,7291), +PARTITION p1823 VALUES IN (7292,7293,7294,7295), +PARTITION p1824 VALUES IN (7296,7297,7298,7299), +PARTITION p1825 VALUES IN (7300,7301,7302,7303), +PARTITION p1826 VALUES IN (7304,7305,7306,7307), +PARTITION p1827 VALUES IN (7308,7309,7310,7311), +PARTITION p1828 VALUES IN (7312,7313,7314,7315), +PARTITION p1829 VALUES IN (7316,7317,7318,7319), +PARTITION p1830 VALUES IN (7320,7321,7322,7323), +PARTITION p1831 VALUES IN (7324,7325,7326,7327), +PARTITION p1832 VALUES IN (7328,7329,7330,7331), +PARTITION p1833 VALUES IN (7332,7333,7334,7335), +PARTITION p1834 VALUES IN (7336,7337,7338,7339), +PARTITION p1835 VALUES IN (7340,7341,7342,7343), +PARTITION p1836 VALUES IN (7344,7345,7346,7347), +PARTITION p1837 VALUES IN (7348,7349,7350,7351), +PARTITION p1838 VALUES IN (7352,7353,7354,7355), +PARTITION p1839 VALUES IN (7356,7357,7358,7359), +PARTITION p1840 VALUES IN (7360,7361,7362,7363), +PARTITION p1841 VALUES IN (7364,7365,7366,7367), +PARTITION p1842 VALUES IN (7368,7369,7370,7371), +PARTITION p1843 VALUES IN (7372,7373,7374,7375), +PARTITION p1844 VALUES IN (7376,7377,7378,7379), +PARTITION p1845 VALUES IN (7380,7381,7382,7383), +PARTITION p1846 VALUES IN (7384,7385,7386,7387), +PARTITION p1847 VALUES IN (7388,7389,7390,7391), +PARTITION p1848 VALUES IN (7392,7393,7394,7395), +PARTITION p1849 VALUES IN (7396,7397,7398,7399), +PARTITION p1850 VALUES IN (7400,7401,7402,7403), +PARTITION p1851 VALUES IN (7404,7405,7406,7407), +PARTITION p1852 VALUES IN (7408,7409,7410,7411), +PARTITION p1853 VALUES IN (7412,7413,7414,7415), +PARTITION p1854 VALUES IN (7416,7417,7418,7419), +PARTITION p1855 VALUES IN (7420,7421,7422,7423), +PARTITION p1856 VALUES IN (7424,7425,7426,7427), +PARTITION p1857 VALUES IN (7428,7429,7430,7431), +PARTITION p1858 VALUES IN (7432,7433,7434,7435), +PARTITION p1859 VALUES IN (7436,7437,7438,7439), +PARTITION p1860 VALUES IN (7440,7441,7442,7443), +PARTITION p1861 VALUES IN (7444,7445,7446,7447), +PARTITION p1862 VALUES IN (7448,7449,7450,7451), +PARTITION p1863 VALUES IN (7452,7453,7454,7455), +PARTITION p1864 VALUES IN (7456,7457,7458,7459), +PARTITION p1865 VALUES IN (7460,7461,7462,7463), +PARTITION p1866 VALUES IN (7464,7465,7466,7467), +PARTITION p1867 VALUES IN (7468,7469,7470,7471), +PARTITION p1868 VALUES IN (7472,7473,7474,7475), +PARTITION p1869 VALUES IN (7476,7477,7478,7479), +PARTITION p1870 VALUES IN (7480,7481,7482,7483), +PARTITION p1871 VALUES IN (7484,7485,7486,7487), +PARTITION p1872 VALUES IN (7488,7489,7490,7491), +PARTITION p1873 VALUES IN (7492,7493,7494,7495), +PARTITION p1874 VALUES IN (7496,7497,7498,7499), +PARTITION p1875 VALUES IN (7500,7501,7502,7503), +PARTITION p1876 VALUES IN (7504,7505,7506,7507), +PARTITION p1877 VALUES IN (7508,7509,7510,7511), +PARTITION p1878 VALUES IN (7512,7513,7514,7515), +PARTITION p1879 VALUES IN (7516,7517,7518,7519), +PARTITION p1880 VALUES IN (7520,7521,7522,7523), +PARTITION p1881 VALUES IN (7524,7525,7526,7527), +PARTITION p1882 VALUES IN (7528,7529,7530,7531), +PARTITION p1883 VALUES IN (7532,7533,7534,7535), +PARTITION p1884 VALUES IN (7536,7537,7538,7539), +PARTITION p1885 VALUES IN (7540,7541,7542,7543), +PARTITION p1886 VALUES IN (7544,7545,7546,7547), +PARTITION p1887 VALUES IN (7548,7549,7550,7551), +PARTITION p1888 VALUES IN (7552,7553,7554,7555), +PARTITION p1889 VALUES IN (7556,7557,7558,7559), +PARTITION p1890 VALUES IN (7560,7561,7562,7563), +PARTITION p1891 VALUES IN (7564,7565,7566,7567), +PARTITION p1892 VALUES IN (7568,7569,7570,7571), +PARTITION p1893 VALUES IN (7572,7573,7574,7575), +PARTITION p1894 VALUES IN (7576,7577,7578,7579), +PARTITION p1895 VALUES IN (7580,7581,7582,7583), +PARTITION p1896 VALUES IN (7584,7585,7586,7587), +PARTITION p1897 VALUES IN (7588,7589,7590,7591), +PARTITION p1898 VALUES IN (7592,7593,7594,7595), +PARTITION p1899 VALUES IN (7596,7597,7598,7599), +PARTITION p1900 VALUES IN (7600,7601,7602,7603), +PARTITION p1901 VALUES IN (7604,7605,7606,7607), +PARTITION p1902 VALUES IN (7608,7609,7610,7611), +PARTITION p1903 VALUES IN (7612,7613,7614,7615), +PARTITION p1904 VALUES IN (7616,7617,7618,7619), +PARTITION p1905 VALUES IN (7620,7621,7622,7623), +PARTITION p1906 VALUES IN (7624,7625,7626,7627), +PARTITION p1907 VALUES IN (7628,7629,7630,7631), +PARTITION p1908 VALUES IN (7632,7633,7634,7635), +PARTITION p1909 VALUES IN (7636,7637,7638,7639), +PARTITION p1910 VALUES IN (7640,7641,7642,7643), +PARTITION p1911 VALUES IN (7644,7645,7646,7647), +PARTITION p1912 VALUES IN (7648,7649,7650,7651), +PARTITION p1913 VALUES IN (7652,7653,7654,7655), +PARTITION p1914 VALUES IN (7656,7657,7658,7659), +PARTITION p1915 VALUES IN (7660,7661,7662,7663), +PARTITION p1916 VALUES IN (7664,7665,7666,7667), +PARTITION p1917 VALUES IN (7668,7669,7670,7671), +PARTITION p1918 VALUES IN (7672,7673,7674,7675), +PARTITION p1919 VALUES IN (7676,7677,7678,7679), +PARTITION p1920 VALUES IN (7680,7681,7682,7683), +PARTITION p1921 VALUES IN (7684,7685,7686,7687), +PARTITION p1922 VALUES IN (7688,7689,7690,7691), +PARTITION p1923 VALUES IN (7692,7693,7694,7695), +PARTITION p1924 VALUES IN (7696,7697,7698,7699), +PARTITION p1925 VALUES IN (7700,7701,7702,7703), +PARTITION p1926 VALUES IN (7704,7705,7706,7707), +PARTITION p1927 VALUES IN (7708,7709,7710,7711), +PARTITION p1928 VALUES IN (7712,7713,7714,7715), +PARTITION p1929 VALUES IN (7716,7717,7718,7719), +PARTITION p1930 VALUES IN (7720,7721,7722,7723), +PARTITION p1931 VALUES IN (7724,7725,7726,7727), +PARTITION p1932 VALUES IN (7728,7729,7730,7731), +PARTITION p1933 VALUES IN (7732,7733,7734,7735), +PARTITION p1934 VALUES IN (7736,7737,7738,7739), +PARTITION p1935 VALUES IN (7740,7741,7742,7743), +PARTITION p1936 VALUES IN (7744,7745,7746,7747), +PARTITION p1937 VALUES IN (7748,7749,7750,7751), +PARTITION p1938 VALUES IN (7752,7753,7754,7755), +PARTITION p1939 VALUES IN (7756,7757,7758,7759), +PARTITION p1940 VALUES IN (7760,7761,7762,7763), +PARTITION p1941 VALUES IN (7764,7765,7766,7767), +PARTITION p1942 VALUES IN (7768,7769,7770,7771), +PARTITION p1943 VALUES IN (7772,7773,7774,7775), +PARTITION p1944 VALUES IN (7776,7777,7778,7779), +PARTITION p1945 VALUES IN (7780,7781,7782,7783), +PARTITION p1946 VALUES IN (7784,7785,7786,7787), +PARTITION p1947 VALUES IN (7788,7789,7790,7791), +PARTITION p1948 VALUES IN (7792,7793,7794,7795), +PARTITION p1949 VALUES IN (7796,7797,7798,7799), +PARTITION p1950 VALUES IN (7800,7801,7802,7803), +PARTITION p1951 VALUES IN (7804,7805,7806,7807), +PARTITION p1952 VALUES IN (7808,7809,7810,7811), +PARTITION p1953 VALUES IN (7812,7813,7814,7815), +PARTITION p1954 VALUES IN (7816,7817,7818,7819), +PARTITION p1955 VALUES IN (7820,7821,7822,7823), +PARTITION p1956 VALUES IN (7824,7825,7826,7827), +PARTITION p1957 VALUES IN (7828,7829,7830,7831), +PARTITION p1958 VALUES IN (7832,7833,7834,7835), +PARTITION p1959 VALUES IN (7836,7837,7838,7839), +PARTITION p1960 VALUES IN (7840,7841,7842,7843), +PARTITION p1961 VALUES IN (7844,7845,7846,7847), +PARTITION p1962 VALUES IN (7848,7849,7850,7851), +PARTITION p1963 VALUES IN (7852,7853,7854,7855), +PARTITION p1964 VALUES IN (7856,7857,7858,7859), +PARTITION p1965 VALUES IN (7860,7861,7862,7863), +PARTITION p1966 VALUES IN (7864,7865,7866,7867), +PARTITION p1967 VALUES IN (7868,7869,7870,7871), +PARTITION p1968 VALUES IN (7872,7873,7874,7875), +PARTITION p1969 VALUES IN (7876,7877,7878,7879), +PARTITION p1970 VALUES IN (7880,7881,7882,7883), +PARTITION p1971 VALUES IN (7884,7885,7886,7887), +PARTITION p1972 VALUES IN (7888,7889,7890,7891), +PARTITION p1973 VALUES IN (7892,7893,7894,7895), +PARTITION p1974 VALUES IN (7896,7897,7898,7899), +PARTITION p1975 VALUES IN (7900,7901,7902,7903), +PARTITION p1976 VALUES IN (7904,7905,7906,7907), +PARTITION p1977 VALUES IN (7908,7909,7910,7911), +PARTITION p1978 VALUES IN (7912,7913,7914,7915), +PARTITION p1979 VALUES IN (7916,7917,7918,7919), +PARTITION p1980 VALUES IN (7920,7921,7922,7923), +PARTITION p1981 VALUES IN (7924,7925,7926,7927), +PARTITION p1982 VALUES IN (7928,7929,7930,7931), +PARTITION p1983 VALUES IN (7932,7933,7934,7935), +PARTITION p1984 VALUES IN (7936,7937,7938,7939), +PARTITION p1985 VALUES IN (7940,7941,7942,7943), +PARTITION p1986 VALUES IN (7944,7945,7946,7947), +PARTITION p1987 VALUES IN (7948,7949,7950,7951), +PARTITION p1988 VALUES IN (7952,7953,7954,7955), +PARTITION p1989 VALUES IN (7956,7957,7958,7959), +PARTITION p1990 VALUES IN (7960,7961,7962,7963), +PARTITION p1991 VALUES IN (7964,7965,7966,7967), +PARTITION p1992 VALUES IN (7968,7969,7970,7971), +PARTITION p1993 VALUES IN (7972,7973,7974,7975), +PARTITION p1994 VALUES IN (7976,7977,7978,7979), +PARTITION p1995 VALUES IN (7980,7981,7982,7983), +PARTITION p1996 VALUES IN (7984,7985,7986,7987), +PARTITION p1997 VALUES IN (7988,7989,7990,7991), +PARTITION p1998 VALUES IN (7992,7993,7994,7995), +PARTITION p1999 VALUES IN (7996,7997,7998,7999), +PARTITION p2000 VALUES IN (8000,8001,8002,8003), +PARTITION p2001 VALUES IN (8004,8005,8006,8007), +PARTITION p2002 VALUES IN (8008,8009,8010,8011), +PARTITION p2003 VALUES IN (8012,8013,8014,8015), +PARTITION p2004 VALUES IN (8016,8017,8018,8019), +PARTITION p2005 VALUES IN (8020,8021,8022,8023), +PARTITION p2006 VALUES IN (8024,8025,8026,8027), +PARTITION p2007 VALUES IN (8028,8029,8030,8031), +PARTITION p2008 VALUES IN (8032,8033,8034,8035), +PARTITION p2009 VALUES IN (8036,8037,8038,8039), +PARTITION p2010 VALUES IN (8040,8041,8042,8043), +PARTITION p2011 VALUES IN (8044,8045,8046,8047), +PARTITION p2012 VALUES IN (8048,8049,8050,8051), +PARTITION p2013 VALUES IN (8052,8053,8054,8055), +PARTITION p2014 VALUES IN (8056,8057,8058,8059), +PARTITION p2015 VALUES IN (8060,8061,8062,8063), +PARTITION p2016 VALUES IN (8064,8065,8066,8067), +PARTITION p2017 VALUES IN (8068,8069,8070,8071), +PARTITION p2018 VALUES IN (8072,8073,8074,8075), +PARTITION p2019 VALUES IN (8076,8077,8078,8079), +PARTITION p2020 VALUES IN (8080,8081,8082,8083), +PARTITION p2021 VALUES IN (8084,8085,8086,8087), +PARTITION p2022 VALUES IN (8088,8089,8090,8091), +PARTITION p2023 VALUES IN (8092,8093,8094,8095), +PARTITION p2024 VALUES IN (8096,8097,8098,8099), +PARTITION p2025 VALUES IN (8100,8101,8102,8103), +PARTITION p2026 VALUES IN (8104,8105,8106,8107), +PARTITION p2027 VALUES IN (8108,8109,8110,8111), +PARTITION p2028 VALUES IN (8112,8113,8114,8115), +PARTITION p2029 VALUES IN (8116,8117,8118,8119), +PARTITION p2030 VALUES IN (8120,8121,8122,8123), +PARTITION p2031 VALUES IN (8124,8125,8126,8127), +PARTITION p2032 VALUES IN (8128,8129,8130,8131), +PARTITION p2033 VALUES IN (8132,8133,8134,8135), +PARTITION p2034 VALUES IN (8136,8137,8138,8139), +PARTITION p2035 VALUES IN (8140,8141,8142,8143), +PARTITION p2036 VALUES IN (8144,8145,8146,8147), +PARTITION p2037 VALUES IN (8148,8149,8150,8151), +PARTITION p2038 VALUES IN (8152,8153,8154,8155), +PARTITION p2039 VALUES IN (8156,8157,8158,8159), +PARTITION p2040 VALUES IN (8160,8161,8162,8163), +PARTITION p2041 VALUES IN (8164,8165,8166,8167), +PARTITION p2042 VALUES IN (8168,8169,8170,8171), +PARTITION p2043 VALUES IN (8172,8173,8174,8175), +PARTITION p2044 VALUES IN (8176,8177,8178,8179), +PARTITION p2045 VALUES IN (8180,8181,8182,8183), +PARTITION p2046 VALUES IN (8184,8185,8186,8187), +PARTITION p2047 VALUES IN (8188,8189,8190,8191), +PARTITION p2048 VALUES IN (8192,8193,8194,8195), +PARTITION p2049 VALUES IN (8196,8197,8198,8199), +PARTITION p2050 VALUES IN (8200,8201,8202,8203), +PARTITION p2051 VALUES IN (8204,8205,8206,8207), +PARTITION p2052 VALUES IN (8208,8209,8210,8211), +PARTITION p2053 VALUES IN (8212,8213,8214,8215), +PARTITION p2054 VALUES IN (8216,8217,8218,8219), +PARTITION p2055 VALUES IN (8220,8221,8222,8223), +PARTITION p2056 VALUES IN (8224,8225,8226,8227), +PARTITION p2057 VALUES IN (8228,8229,8230,8231), +PARTITION p2058 VALUES IN (8232,8233,8234,8235), +PARTITION p2059 VALUES IN (8236,8237,8238,8239), +PARTITION p2060 VALUES IN (8240,8241,8242,8243), +PARTITION p2061 VALUES IN (8244,8245,8246,8247), +PARTITION p2062 VALUES IN (8248,8249,8250,8251), +PARTITION p2063 VALUES IN (8252,8253,8254,8255), +PARTITION p2064 VALUES IN (8256,8257,8258,8259), +PARTITION p2065 VALUES IN (8260,8261,8262,8263), +PARTITION p2066 VALUES IN (8264,8265,8266,8267), +PARTITION p2067 VALUES IN (8268,8269,8270,8271), +PARTITION p2068 VALUES IN (8272,8273,8274,8275), +PARTITION p2069 VALUES IN (8276,8277,8278,8279), +PARTITION p2070 VALUES IN (8280,8281,8282,8283), +PARTITION p2071 VALUES IN (8284,8285,8286,8287), +PARTITION p2072 VALUES IN (8288,8289,8290,8291), +PARTITION p2073 VALUES IN (8292,8293,8294,8295), +PARTITION p2074 VALUES IN (8296,8297,8298,8299), +PARTITION p2075 VALUES IN (8300,8301,8302,8303), +PARTITION p2076 VALUES IN (8304,8305,8306,8307), +PARTITION p2077 VALUES IN (8308,8309,8310,8311), +PARTITION p2078 VALUES IN (8312,8313,8314,8315), +PARTITION p2079 VALUES IN (8316,8317,8318,8319), +PARTITION p2080 VALUES IN (8320,8321,8322,8323), +PARTITION p2081 VALUES IN (8324,8325,8326,8327), +PARTITION p2082 VALUES IN (8328,8329,8330,8331), +PARTITION p2083 VALUES IN (8332,8333,8334,8335), +PARTITION p2084 VALUES IN (8336,8337,8338,8339), +PARTITION p2085 VALUES IN (8340,8341,8342,8343), +PARTITION p2086 VALUES IN (8344,8345,8346,8347), +PARTITION p2087 VALUES IN (8348,8349,8350,8351), +PARTITION p2088 VALUES IN (8352,8353,8354,8355), +PARTITION p2089 VALUES IN (8356,8357,8358,8359), +PARTITION p2090 VALUES IN (8360,8361,8362,8363), +PARTITION p2091 VALUES IN (8364,8365,8366,8367), +PARTITION p2092 VALUES IN (8368,8369,8370,8371), +PARTITION p2093 VALUES IN (8372,8373,8374,8375), +PARTITION p2094 VALUES IN (8376,8377,8378,8379), +PARTITION p2095 VALUES IN (8380,8381,8382,8383), +PARTITION p2096 VALUES IN (8384,8385,8386,8387), +PARTITION p2097 VALUES IN (8388,8389,8390,8391), +PARTITION p2098 VALUES IN (8392,8393,8394,8395), +PARTITION p2099 VALUES IN (8396,8397,8398,8399), +PARTITION p2100 VALUES IN (8400,8401,8402,8403), +PARTITION p2101 VALUES IN (8404,8405,8406,8407), +PARTITION p2102 VALUES IN (8408,8409,8410,8411), +PARTITION p2103 VALUES IN (8412,8413,8414,8415), +PARTITION p2104 VALUES IN (8416,8417,8418,8419), +PARTITION p2105 VALUES IN (8420,8421,8422,8423), +PARTITION p2106 VALUES IN (8424,8425,8426,8427), +PARTITION p2107 VALUES IN (8428,8429,8430,8431), +PARTITION p2108 VALUES IN (8432,8433,8434,8435), +PARTITION p2109 VALUES IN (8436,8437,8438,8439), +PARTITION p2110 VALUES IN (8440,8441,8442,8443), +PARTITION p2111 VALUES IN (8444,8445,8446,8447), +PARTITION p2112 VALUES IN (8448,8449,8450,8451), +PARTITION p2113 VALUES IN (8452,8453,8454,8455), +PARTITION p2114 VALUES IN (8456,8457,8458,8459), +PARTITION p2115 VALUES IN (8460,8461,8462,8463), +PARTITION p2116 VALUES IN (8464,8465,8466,8467), +PARTITION p2117 VALUES IN (8468,8469,8470,8471), +PARTITION p2118 VALUES IN (8472,8473,8474,8475), +PARTITION p2119 VALUES IN (8476,8477,8478,8479), +PARTITION p2120 VALUES IN (8480,8481,8482,8483), +PARTITION p2121 VALUES IN (8484,8485,8486,8487), +PARTITION p2122 VALUES IN (8488,8489,8490,8491), +PARTITION p2123 VALUES IN (8492,8493,8494,8495), +PARTITION p2124 VALUES IN (8496,8497,8498,8499), +PARTITION p2125 VALUES IN (8500,8501,8502,8503), +PARTITION p2126 VALUES IN (8504,8505,8506,8507), +PARTITION p2127 VALUES IN (8508,8509,8510,8511), +PARTITION p2128 VALUES IN (8512,8513,8514,8515), +PARTITION p2129 VALUES IN (8516,8517,8518,8519), +PARTITION p2130 VALUES IN (8520,8521,8522,8523), +PARTITION p2131 VALUES IN (8524,8525,8526,8527), +PARTITION p2132 VALUES IN (8528,8529,8530,8531), +PARTITION p2133 VALUES IN (8532,8533,8534,8535), +PARTITION p2134 VALUES IN (8536,8537,8538,8539), +PARTITION p2135 VALUES IN (8540,8541,8542,8543), +PARTITION p2136 VALUES IN (8544,8545,8546,8547), +PARTITION p2137 VALUES IN (8548,8549,8550,8551), +PARTITION p2138 VALUES IN (8552,8553,8554,8555), +PARTITION p2139 VALUES IN (8556,8557,8558,8559), +PARTITION p2140 VALUES IN (8560,8561,8562,8563), +PARTITION p2141 VALUES IN (8564,8565,8566,8567), +PARTITION p2142 VALUES IN (8568,8569,8570,8571), +PARTITION p2143 VALUES IN (8572,8573,8574,8575), +PARTITION p2144 VALUES IN (8576,8577,8578,8579), +PARTITION p2145 VALUES IN (8580,8581,8582,8583), +PARTITION p2146 VALUES IN (8584,8585,8586,8587), +PARTITION p2147 VALUES IN (8588,8589,8590,8591), +PARTITION p2148 VALUES IN (8592,8593,8594,8595), +PARTITION p2149 VALUES IN (8596,8597,8598,8599), +PARTITION p2150 VALUES IN (8600,8601,8602,8603), +PARTITION p2151 VALUES IN (8604,8605,8606,8607), +PARTITION p2152 VALUES IN (8608,8609,8610,8611), +PARTITION p2153 VALUES IN (8612,8613,8614,8615), +PARTITION p2154 VALUES IN (8616,8617,8618,8619), +PARTITION p2155 VALUES IN (8620,8621,8622,8623), +PARTITION p2156 VALUES IN (8624,8625,8626,8627), +PARTITION p2157 VALUES IN (8628,8629,8630,8631), +PARTITION p2158 VALUES IN (8632,8633,8634,8635), +PARTITION p2159 VALUES IN (8636,8637,8638,8639), +PARTITION p2160 VALUES IN (8640,8641,8642,8643), +PARTITION p2161 VALUES IN (8644,8645,8646,8647), +PARTITION p2162 VALUES IN (8648,8649,8650,8651), +PARTITION p2163 VALUES IN (8652,8653,8654,8655), +PARTITION p2164 VALUES IN (8656,8657,8658,8659), +PARTITION p2165 VALUES IN (8660,8661,8662,8663), +PARTITION p2166 VALUES IN (8664,8665,8666,8667), +PARTITION p2167 VALUES IN (8668,8669,8670,8671), +PARTITION p2168 VALUES IN (8672,8673,8674,8675), +PARTITION p2169 VALUES IN (8676,8677,8678,8679), +PARTITION p2170 VALUES IN (8680,8681,8682,8683), +PARTITION p2171 VALUES IN (8684,8685,8686,8687), +PARTITION p2172 VALUES IN (8688,8689,8690,8691), +PARTITION p2173 VALUES IN (8692,8693,8694,8695), +PARTITION p2174 VALUES IN (8696,8697,8698,8699), +PARTITION p2175 VALUES IN (8700,8701,8702,8703), +PARTITION p2176 VALUES IN (8704,8705,8706,8707), +PARTITION p2177 VALUES IN (8708,8709,8710,8711), +PARTITION p2178 VALUES IN (8712,8713,8714,8715), +PARTITION p2179 VALUES IN (8716,8717,8718,8719), +PARTITION p2180 VALUES IN (8720,8721,8722,8723), +PARTITION p2181 VALUES IN (8724,8725,8726,8727), +PARTITION p2182 VALUES IN (8728,8729,8730,8731), +PARTITION p2183 VALUES IN (8732,8733,8734,8735), +PARTITION p2184 VALUES IN (8736,8737,8738,8739), +PARTITION p2185 VALUES IN (8740,8741,8742,8743), +PARTITION p2186 VALUES IN (8744,8745,8746,8747), +PARTITION p2187 VALUES IN (8748,8749,8750,8751), +PARTITION p2188 VALUES IN (8752,8753,8754,8755), +PARTITION p2189 VALUES IN (8756,8757,8758,8759), +PARTITION p2190 VALUES IN (8760,8761,8762,8763), +PARTITION p2191 VALUES IN (8764,8765,8766,8767), +PARTITION p2192 VALUES IN (8768,8769,8770,8771), +PARTITION p2193 VALUES IN (8772,8773,8774,8775), +PARTITION p2194 VALUES IN (8776,8777,8778,8779), +PARTITION p2195 VALUES IN (8780,8781,8782,8783), +PARTITION p2196 VALUES IN (8784,8785,8786,8787), +PARTITION p2197 VALUES IN (8788,8789,8790,8791), +PARTITION p2198 VALUES IN (8792,8793,8794,8795), +PARTITION p2199 VALUES IN (8796,8797,8798,8799), +PARTITION p2200 VALUES IN (8800,8801,8802,8803), +PARTITION p2201 VALUES IN (8804,8805,8806,8807), +PARTITION p2202 VALUES IN (8808,8809,8810,8811), +PARTITION p2203 VALUES IN (8812,8813,8814,8815), +PARTITION p2204 VALUES IN (8816,8817,8818,8819), +PARTITION p2205 VALUES IN (8820,8821,8822,8823), +PARTITION p2206 VALUES IN (8824,8825,8826,8827), +PARTITION p2207 VALUES IN (8828,8829,8830,8831), +PARTITION p2208 VALUES IN (8832,8833,8834,8835), +PARTITION p2209 VALUES IN (8836,8837,8838,8839), +PARTITION p2210 VALUES IN (8840,8841,8842,8843), +PARTITION p2211 VALUES IN (8844,8845,8846,8847), +PARTITION p2212 VALUES IN (8848,8849,8850,8851), +PARTITION p2213 VALUES IN (8852,8853,8854,8855), +PARTITION p2214 VALUES IN (8856,8857,8858,8859), +PARTITION p2215 VALUES IN (8860,8861,8862,8863), +PARTITION p2216 VALUES IN (8864,8865,8866,8867), +PARTITION p2217 VALUES IN (8868,8869,8870,8871), +PARTITION p2218 VALUES IN (8872,8873,8874,8875), +PARTITION p2219 VALUES IN (8876,8877,8878,8879), +PARTITION p2220 VALUES IN (8880,8881,8882,8883), +PARTITION p2221 VALUES IN (8884,8885,8886,8887), +PARTITION p2222 VALUES IN (8888,8889,8890,8891), +PARTITION p2223 VALUES IN (8892,8893,8894,8895), +PARTITION p2224 VALUES IN (8896,8897,8898,8899), +PARTITION p2225 VALUES IN (8900,8901,8902,8903), +PARTITION p2226 VALUES IN (8904,8905,8906,8907), +PARTITION p2227 VALUES IN (8908,8909,8910,8911), +PARTITION p2228 VALUES IN (8912,8913,8914,8915), +PARTITION p2229 VALUES IN (8916,8917,8918,8919), +PARTITION p2230 VALUES IN (8920,8921,8922,8923), +PARTITION p2231 VALUES IN (8924,8925,8926,8927), +PARTITION p2232 VALUES IN (8928,8929,8930,8931), +PARTITION p2233 VALUES IN (8932,8933,8934,8935), +PARTITION p2234 VALUES IN (8936,8937,8938,8939), +PARTITION p2235 VALUES IN (8940,8941,8942,8943), +PARTITION p2236 VALUES IN (8944,8945,8946,8947), +PARTITION p2237 VALUES IN (8948,8949,8950,8951), +PARTITION p2238 VALUES IN (8952,8953,8954,8955), +PARTITION p2239 VALUES IN (8956,8957,8958,8959), +PARTITION p2240 VALUES IN (8960,8961,8962,8963), +PARTITION p2241 VALUES IN (8964,8965,8966,8967), +PARTITION p2242 VALUES IN (8968,8969,8970,8971), +PARTITION p2243 VALUES IN (8972,8973,8974,8975), +PARTITION p2244 VALUES IN (8976,8977,8978,8979), +PARTITION p2245 VALUES IN (8980,8981,8982,8983), +PARTITION p2246 VALUES IN (8984,8985,8986,8987), +PARTITION p2247 VALUES IN (8988,8989,8990,8991), +PARTITION p2248 VALUES IN (8992,8993,8994,8995), +PARTITION p2249 VALUES IN (8996,8997,8998,8999), +PARTITION p2250 VALUES IN (9000,9001,9002,9003), +PARTITION p2251 VALUES IN (9004,9005,9006,9007), +PARTITION p2252 VALUES IN (9008,9009,9010,9011), +PARTITION p2253 VALUES IN (9012,9013,9014,9015), +PARTITION p2254 VALUES IN (9016,9017,9018,9019), +PARTITION p2255 VALUES IN (9020,9021,9022,9023), +PARTITION p2256 VALUES IN (9024,9025,9026,9027), +PARTITION p2257 VALUES IN (9028,9029,9030,9031), +PARTITION p2258 VALUES IN (9032,9033,9034,9035), +PARTITION p2259 VALUES IN (9036,9037,9038,9039), +PARTITION p2260 VALUES IN (9040,9041,9042,9043), +PARTITION p2261 VALUES IN (9044,9045,9046,9047), +PARTITION p2262 VALUES IN (9048,9049,9050,9051), +PARTITION p2263 VALUES IN (9052,9053,9054,9055), +PARTITION p2264 VALUES IN (9056,9057,9058,9059), +PARTITION p2265 VALUES IN (9060,9061,9062,9063), +PARTITION p2266 VALUES IN (9064,9065,9066,9067), +PARTITION p2267 VALUES IN (9068,9069,9070,9071), +PARTITION p2268 VALUES IN (9072,9073,9074,9075), +PARTITION p2269 VALUES IN (9076,9077,9078,9079), +PARTITION p2270 VALUES IN (9080,9081,9082,9083), +PARTITION p2271 VALUES IN (9084,9085,9086,9087), +PARTITION p2272 VALUES IN (9088,9089,9090,9091), +PARTITION p2273 VALUES IN (9092,9093,9094,9095), +PARTITION p2274 VALUES IN (9096,9097,9098,9099), +PARTITION p2275 VALUES IN (9100,9101,9102,9103), +PARTITION p2276 VALUES IN (9104,9105,9106,9107), +PARTITION p2277 VALUES IN (9108,9109,9110,9111), +PARTITION p2278 VALUES IN (9112,9113,9114,9115), +PARTITION p2279 VALUES IN (9116,9117,9118,9119), +PARTITION p2280 VALUES IN (9120,9121,9122,9123), +PARTITION p2281 VALUES IN (9124,9125,9126,9127), +PARTITION p2282 VALUES IN (9128,9129,9130,9131), +PARTITION p2283 VALUES IN (9132,9133,9134,9135), +PARTITION p2284 VALUES IN (9136,9137,9138,9139), +PARTITION p2285 VALUES IN (9140,9141,9142,9143), +PARTITION p2286 VALUES IN (9144,9145,9146,9147), +PARTITION p2287 VALUES IN (9148,9149,9150,9151), +PARTITION p2288 VALUES IN (9152,9153,9154,9155), +PARTITION p2289 VALUES IN (9156,9157,9158,9159), +PARTITION p2290 VALUES IN (9160,9161,9162,9163), +PARTITION p2291 VALUES IN (9164,9165,9166,9167), +PARTITION p2292 VALUES IN (9168,9169,9170,9171), +PARTITION p2293 VALUES IN (9172,9173,9174,9175), +PARTITION p2294 VALUES IN (9176,9177,9178,9179), +PARTITION p2295 VALUES IN (9180,9181,9182,9183), +PARTITION p2296 VALUES IN (9184,9185,9186,9187), +PARTITION p2297 VALUES IN (9188,9189,9190,9191), +PARTITION p2298 VALUES IN (9192,9193,9194,9195), +PARTITION p2299 VALUES IN (9196,9197,9198,9199), +PARTITION p2300 VALUES IN (9200,9201,9202,9203), +PARTITION p2301 VALUES IN (9204,9205,9206,9207), +PARTITION p2302 VALUES IN (9208,9209,9210,9211), +PARTITION p2303 VALUES IN (9212,9213,9214,9215), +PARTITION p2304 VALUES IN (9216,9217,9218,9219), +PARTITION p2305 VALUES IN (9220,9221,9222,9223), +PARTITION p2306 VALUES IN (9224,9225,9226,9227), +PARTITION p2307 VALUES IN (9228,9229,9230,9231), +PARTITION p2308 VALUES IN (9232,9233,9234,9235), +PARTITION p2309 VALUES IN (9236,9237,9238,9239), +PARTITION p2310 VALUES IN (9240,9241,9242,9243), +PARTITION p2311 VALUES IN (9244,9245,9246,9247), +PARTITION p2312 VALUES IN (9248,9249,9250,9251), +PARTITION p2313 VALUES IN (9252,9253,9254,9255), +PARTITION p2314 VALUES IN (9256,9257,9258,9259), +PARTITION p2315 VALUES IN (9260,9261,9262,9263), +PARTITION p2316 VALUES IN (9264,9265,9266,9267), +PARTITION p2317 VALUES IN (9268,9269,9270,9271), +PARTITION p2318 VALUES IN (9272,9273,9274,9275), +PARTITION p2319 VALUES IN (9276,9277,9278,9279), +PARTITION p2320 VALUES IN (9280,9281,9282,9283), +PARTITION p2321 VALUES IN (9284,9285,9286,9287), +PARTITION p2322 VALUES IN (9288,9289,9290,9291), +PARTITION p2323 VALUES IN (9292,9293,9294,9295), +PARTITION p2324 VALUES IN (9296,9297,9298,9299), +PARTITION p2325 VALUES IN (9300,9301,9302,9303), +PARTITION p2326 VALUES IN (9304,9305,9306,9307), +PARTITION p2327 VALUES IN (9308,9309,9310,9311), +PARTITION p2328 VALUES IN (9312,9313,9314,9315), +PARTITION p2329 VALUES IN (9316,9317,9318,9319), +PARTITION p2330 VALUES IN (9320,9321,9322,9323), +PARTITION p2331 VALUES IN (9324,9325,9326,9327), +PARTITION p2332 VALUES IN (9328,9329,9330,9331), +PARTITION p2333 VALUES IN (9332,9333,9334,9335), +PARTITION p2334 VALUES IN (9336,9337,9338,9339), +PARTITION p2335 VALUES IN (9340,9341,9342,9343), +PARTITION p2336 VALUES IN (9344,9345,9346,9347), +PARTITION p2337 VALUES IN (9348,9349,9350,9351), +PARTITION p2338 VALUES IN (9352,9353,9354,9355), +PARTITION p2339 VALUES IN (9356,9357,9358,9359), +PARTITION p2340 VALUES IN (9360,9361,9362,9363), +PARTITION p2341 VALUES IN (9364,9365,9366,9367), +PARTITION p2342 VALUES IN (9368,9369,9370,9371), +PARTITION p2343 VALUES IN (9372,9373,9374,9375), +PARTITION p2344 VALUES IN (9376,9377,9378,9379), +PARTITION p2345 VALUES IN (9380,9381,9382,9383), +PARTITION p2346 VALUES IN (9384,9385,9386,9387), +PARTITION p2347 VALUES IN (9388,9389,9390,9391), +PARTITION p2348 VALUES IN (9392,9393,9394,9395), +PARTITION p2349 VALUES IN (9396,9397,9398,9399), +PARTITION p2350 VALUES IN (9400,9401,9402,9403), +PARTITION p2351 VALUES IN (9404,9405,9406,9407), +PARTITION p2352 VALUES IN (9408,9409,9410,9411), +PARTITION p2353 VALUES IN (9412,9413,9414,9415), +PARTITION p2354 VALUES IN (9416,9417,9418,9419), +PARTITION p2355 VALUES IN (9420,9421,9422,9423), +PARTITION p2356 VALUES IN (9424,9425,9426,9427), +PARTITION p2357 VALUES IN (9428,9429,9430,9431), +PARTITION p2358 VALUES IN (9432,9433,9434,9435), +PARTITION p2359 VALUES IN (9436,9437,9438,9439), +PARTITION p2360 VALUES IN (9440,9441,9442,9443), +PARTITION p2361 VALUES IN (9444,9445,9446,9447), +PARTITION p2362 VALUES IN (9448,9449,9450,9451), +PARTITION p2363 VALUES IN (9452,9453,9454,9455), +PARTITION p2364 VALUES IN (9456,9457,9458,9459), +PARTITION p2365 VALUES IN (9460,9461,9462,9463), +PARTITION p2366 VALUES IN (9464,9465,9466,9467), +PARTITION p2367 VALUES IN (9468,9469,9470,9471), +PARTITION p2368 VALUES IN (9472,9473,9474,9475), +PARTITION p2369 VALUES IN (9476,9477,9478,9479), +PARTITION p2370 VALUES IN (9480,9481,9482,9483), +PARTITION p2371 VALUES IN (9484,9485,9486,9487), +PARTITION p2372 VALUES IN (9488,9489,9490,9491), +PARTITION p2373 VALUES IN (9492,9493,9494,9495), +PARTITION p2374 VALUES IN (9496,9497,9498,9499), +PARTITION p2375 VALUES IN (9500,9501,9502,9503), +PARTITION p2376 VALUES IN (9504,9505,9506,9507), +PARTITION p2377 VALUES IN (9508,9509,9510,9511), +PARTITION p2378 VALUES IN (9512,9513,9514,9515), +PARTITION p2379 VALUES IN (9516,9517,9518,9519), +PARTITION p2380 VALUES IN (9520,9521,9522,9523), +PARTITION p2381 VALUES IN (9524,9525,9526,9527), +PARTITION p2382 VALUES IN (9528,9529,9530,9531), +PARTITION p2383 VALUES IN (9532,9533,9534,9535), +PARTITION p2384 VALUES IN (9536,9537,9538,9539), +PARTITION p2385 VALUES IN (9540,9541,9542,9543), +PARTITION p2386 VALUES IN (9544,9545,9546,9547), +PARTITION p2387 VALUES IN (9548,9549,9550,9551), +PARTITION p2388 VALUES IN (9552,9553,9554,9555), +PARTITION p2389 VALUES IN (9556,9557,9558,9559), +PARTITION p2390 VALUES IN (9560,9561,9562,9563), +PARTITION p2391 VALUES IN (9564,9565,9566,9567), +PARTITION p2392 VALUES IN (9568,9569,9570,9571), +PARTITION p2393 VALUES IN (9572,9573,9574,9575), +PARTITION p2394 VALUES IN (9576,9577,9578,9579), +PARTITION p2395 VALUES IN (9580,9581,9582,9583), +PARTITION p2396 VALUES IN (9584,9585,9586,9587), +PARTITION p2397 VALUES IN (9588,9589,9590,9591), +PARTITION p2398 VALUES IN (9592,9593,9594,9595), +PARTITION p2399 VALUES IN (9596,9597,9598,9599), +PARTITION p2400 VALUES IN (9600,9601,9602,9603), +PARTITION p2401 VALUES IN (9604,9605,9606,9607), +PARTITION p2402 VALUES IN (9608,9609,9610,9611), +PARTITION p2403 VALUES IN (9612,9613,9614,9615), +PARTITION p2404 VALUES IN (9616,9617,9618,9619), +PARTITION p2405 VALUES IN (9620,9621,9622,9623), +PARTITION p2406 VALUES IN (9624,9625,9626,9627), +PARTITION p2407 VALUES IN (9628,9629,9630,9631), +PARTITION p2408 VALUES IN (9632,9633,9634,9635), +PARTITION p2409 VALUES IN (9636,9637,9638,9639), +PARTITION p2410 VALUES IN (9640,9641,9642,9643), +PARTITION p2411 VALUES IN (9644,9645,9646,9647), +PARTITION p2412 VALUES IN (9648,9649,9650,9651), +PARTITION p2413 VALUES IN (9652,9653,9654,9655), +PARTITION p2414 VALUES IN (9656,9657,9658,9659), +PARTITION p2415 VALUES IN (9660,9661,9662,9663), +PARTITION p2416 VALUES IN (9664,9665,9666,9667), +PARTITION p2417 VALUES IN (9668,9669,9670,9671), +PARTITION p2418 VALUES IN (9672,9673,9674,9675), +PARTITION p2419 VALUES IN (9676,9677,9678,9679), +PARTITION p2420 VALUES IN (9680,9681,9682,9683), +PARTITION p2421 VALUES IN (9684,9685,9686,9687), +PARTITION p2422 VALUES IN (9688,9689,9690,9691), +PARTITION p2423 VALUES IN (9692,9693,9694,9695), +PARTITION p2424 VALUES IN (9696,9697,9698,9699), +PARTITION p2425 VALUES IN (9700,9701,9702,9703), +PARTITION p2426 VALUES IN (9704,9705,9706,9707), +PARTITION p2427 VALUES IN (9708,9709,9710,9711), +PARTITION p2428 VALUES IN (9712,9713,9714,9715), +PARTITION p2429 VALUES IN (9716,9717,9718,9719), +PARTITION p2430 VALUES IN (9720,9721,9722,9723), +PARTITION p2431 VALUES IN (9724,9725,9726,9727), +PARTITION p2432 VALUES IN (9728,9729,9730,9731), +PARTITION p2433 VALUES IN (9732,9733,9734,9735), +PARTITION p2434 VALUES IN (9736,9737,9738,9739), +PARTITION p2435 VALUES IN (9740,9741,9742,9743), +PARTITION p2436 VALUES IN (9744,9745,9746,9747), +PARTITION p2437 VALUES IN (9748,9749,9750,9751), +PARTITION p2438 VALUES IN (9752,9753,9754,9755), +PARTITION p2439 VALUES IN (9756,9757,9758,9759), +PARTITION p2440 VALUES IN (9760,9761,9762,9763), +PARTITION p2441 VALUES IN (9764,9765,9766,9767), +PARTITION p2442 VALUES IN (9768,9769,9770,9771), +PARTITION p2443 VALUES IN (9772,9773,9774,9775), +PARTITION p2444 VALUES IN (9776,9777,9778,9779), +PARTITION p2445 VALUES IN (9780,9781,9782,9783), +PARTITION p2446 VALUES IN (9784,9785,9786,9787), +PARTITION p2447 VALUES IN (9788,9789,9790,9791), +PARTITION p2448 VALUES IN (9792,9793,9794,9795), +PARTITION p2449 VALUES IN (9796,9797,9798,9799), +PARTITION p2450 VALUES IN (9800,9801,9802,9803), +PARTITION p2451 VALUES IN (9804,9805,9806,9807), +PARTITION p2452 VALUES IN (9808,9809,9810,9811), +PARTITION p2453 VALUES IN (9812,9813,9814,9815), +PARTITION p2454 VALUES IN (9816,9817,9818,9819), +PARTITION p2455 VALUES IN (9820,9821,9822,9823), +PARTITION p2456 VALUES IN (9824,9825,9826,9827), +PARTITION p2457 VALUES IN (9828,9829,9830,9831), +PARTITION p2458 VALUES IN (9832,9833,9834,9835), +PARTITION p2459 VALUES IN (9836,9837,9838,9839), +PARTITION p2460 VALUES IN (9840,9841,9842,9843), +PARTITION p2461 VALUES IN (9844,9845,9846,9847), +PARTITION p2462 VALUES IN (9848,9849,9850,9851), +PARTITION p2463 VALUES IN (9852,9853,9854,9855), +PARTITION p2464 VALUES IN (9856,9857,9858,9859), +PARTITION p2465 VALUES IN (9860,9861,9862,9863), +PARTITION p2466 VALUES IN (9864,9865,9866,9867), +PARTITION p2467 VALUES IN (9868,9869,9870,9871), +PARTITION p2468 VALUES IN (9872,9873,9874,9875), +PARTITION p2469 VALUES IN (9876,9877,9878,9879), +PARTITION p2470 VALUES IN (9880,9881,9882,9883), +PARTITION p2471 VALUES IN (9884,9885,9886,9887), +PARTITION p2472 VALUES IN (9888,9889,9890,9891), +PARTITION p2473 VALUES IN (9892,9893,9894,9895), +PARTITION p2474 VALUES IN (9896,9897,9898,9899), +PARTITION p2475 VALUES IN (9900,9901,9902,9903), +PARTITION p2476 VALUES IN (9904,9905,9906,9907), +PARTITION p2477 VALUES IN (9908,9909,9910,9911), +PARTITION p2478 VALUES IN (9912,9913,9914,9915), +PARTITION p2479 VALUES IN (9916,9917,9918,9919), +PARTITION p2480 VALUES IN (9920,9921,9922,9923), +PARTITION p2481 VALUES IN (9924,9925,9926,9927), +PARTITION p2482 VALUES IN (9928,9929,9930,9931), +PARTITION p2483 VALUES IN (9932,9933,9934,9935), +PARTITION p2484 VALUES IN (9936,9937,9938,9939), +PARTITION p2485 VALUES IN (9940,9941,9942,9943), +PARTITION p2486 VALUES IN (9944,9945,9946,9947), +PARTITION p2487 VALUES IN (9948,9949,9950,9951), +PARTITION p2488 VALUES IN (9952,9953,9954,9955), +PARTITION p2489 VALUES IN (9956,9957,9958,9959), +PARTITION p2490 VALUES IN (9960,9961,9962,9963), +PARTITION p2491 VALUES IN (9964,9965,9966,9967), +PARTITION p2492 VALUES IN (9968,9969,9970,9971), +PARTITION p2493 VALUES IN (9972,9973,9974,9975), +PARTITION p2494 VALUES IN (9976,9977,9978,9979), +PARTITION p2495 VALUES IN (9980,9981,9982,9983), +PARTITION p2496 VALUES IN (9984,9985,9986,9987), +PARTITION p2497 VALUES IN (9988,9989,9990,9991), +PARTITION p2498 VALUES IN (9992,9993,9994,9995), +PARTITION p2499 VALUES IN (9996,9997,9998,9999), +PARTITION p2500 VALUES IN (10000,10001,10002,10003), +PARTITION p2501 VALUES IN (10004,10005,10006,10007), +PARTITION p2502 VALUES IN (10008,10009,10010,10011), +PARTITION p2503 VALUES IN (10012,10013,10014,10015), +PARTITION p2504 VALUES IN (10016,10017,10018,10019), +PARTITION p2505 VALUES IN (10020,10021,10022,10023), +PARTITION p2506 VALUES IN (10024,10025,10026,10027), +PARTITION p2507 VALUES IN (10028,10029,10030,10031), +PARTITION p2508 VALUES IN (10032,10033,10034,10035), +PARTITION p2509 VALUES IN (10036,10037,10038,10039), +PARTITION p2510 VALUES IN (10040,10041,10042,10043), +PARTITION p2511 VALUES IN (10044,10045,10046,10047), +PARTITION p2512 VALUES IN (10048,10049,10050,10051), +PARTITION p2513 VALUES IN (10052,10053,10054,10055), +PARTITION p2514 VALUES IN (10056,10057,10058,10059), +PARTITION p2515 VALUES IN (10060,10061,10062,10063), +PARTITION p2516 VALUES IN (10064,10065,10066,10067), +PARTITION p2517 VALUES IN (10068,10069,10070,10071), +PARTITION p2518 VALUES IN (10072,10073,10074,10075), +PARTITION p2519 VALUES IN (10076,10077,10078,10079), +PARTITION p2520 VALUES IN (10080,10081,10082,10083), +PARTITION p2521 VALUES IN (10084,10085,10086,10087), +PARTITION p2522 VALUES IN (10088,10089,10090,10091), +PARTITION p2523 VALUES IN (10092,10093,10094,10095), +PARTITION p2524 VALUES IN (10096,10097,10098,10099), +PARTITION p2525 VALUES IN (10100,10101,10102,10103), +PARTITION p2526 VALUES IN (10104,10105,10106,10107), +PARTITION p2527 VALUES IN (10108,10109,10110,10111), +PARTITION p2528 VALUES IN (10112,10113,10114,10115), +PARTITION p2529 VALUES IN (10116,10117,10118,10119), +PARTITION p2530 VALUES IN (10120,10121,10122,10123), +PARTITION p2531 VALUES IN (10124,10125,10126,10127), +PARTITION p2532 VALUES IN (10128,10129,10130,10131), +PARTITION p2533 VALUES IN (10132,10133,10134,10135), +PARTITION p2534 VALUES IN (10136,10137,10138,10139), +PARTITION p2535 VALUES IN (10140,10141,10142,10143), +PARTITION p2536 VALUES IN (10144,10145,10146,10147), +PARTITION p2537 VALUES IN (10148,10149,10150,10151), +PARTITION p2538 VALUES IN (10152,10153,10154,10155), +PARTITION p2539 VALUES IN (10156,10157,10158,10159), +PARTITION p2540 VALUES IN (10160,10161,10162,10163), +PARTITION p2541 VALUES IN (10164,10165,10166,10167), +PARTITION p2542 VALUES IN (10168,10169,10170,10171), +PARTITION p2543 VALUES IN (10172,10173,10174,10175), +PARTITION p2544 VALUES IN (10176,10177,10178,10179), +PARTITION p2545 VALUES IN (10180,10181,10182,10183), +PARTITION p2546 VALUES IN (10184,10185,10186,10187), +PARTITION p2547 VALUES IN (10188,10189,10190,10191), +PARTITION p2548 VALUES IN (10192,10193,10194,10195), +PARTITION p2549 VALUES IN (10196,10197,10198,10199), +PARTITION p2550 VALUES IN (10200,10201,10202,10203), +PARTITION p2551 VALUES IN (10204,10205,10206,10207), +PARTITION p2552 VALUES IN (10208,10209,10210,10211), +PARTITION p2553 VALUES IN (10212,10213,10214,10215), +PARTITION p2554 VALUES IN (10216,10217,10218,10219), +PARTITION p2555 VALUES IN (10220,10221,10222,10223), +PARTITION p2556 VALUES IN (10224,10225,10226,10227), +PARTITION p2557 VALUES IN (10228,10229,10230,10231), +PARTITION p2558 VALUES IN (10232,10233,10234,10235), +PARTITION p2559 VALUES IN (10236,10237,10238,10239), +PARTITION p2560 VALUES IN (10240,10241,10242,10243), +PARTITION p2561 VALUES IN (10244,10245,10246,10247), +PARTITION p2562 VALUES IN (10248,10249,10250,10251), +PARTITION p2563 VALUES IN (10252,10253,10254,10255), +PARTITION p2564 VALUES IN (10256,10257,10258,10259), +PARTITION p2565 VALUES IN (10260,10261,10262,10263), +PARTITION p2566 VALUES IN (10264,10265,10266,10267), +PARTITION p2567 VALUES IN (10268,10269,10270,10271), +PARTITION p2568 VALUES IN (10272,10273,10274,10275), +PARTITION p2569 VALUES IN (10276,10277,10278,10279), +PARTITION p2570 VALUES IN (10280,10281,10282,10283), +PARTITION p2571 VALUES IN (10284,10285,10286,10287), +PARTITION p2572 VALUES IN (10288,10289,10290,10291), +PARTITION p2573 VALUES IN (10292,10293,10294,10295), +PARTITION p2574 VALUES IN (10296,10297,10298,10299), +PARTITION p2575 VALUES IN (10300,10301,10302,10303), +PARTITION p2576 VALUES IN (10304,10305,10306,10307), +PARTITION p2577 VALUES IN (10308,10309,10310,10311), +PARTITION p2578 VALUES IN (10312,10313,10314,10315), +PARTITION p2579 VALUES IN (10316,10317,10318,10319), +PARTITION p2580 VALUES IN (10320,10321,10322,10323), +PARTITION p2581 VALUES IN (10324,10325,10326,10327), +PARTITION p2582 VALUES IN (10328,10329,10330,10331), +PARTITION p2583 VALUES IN (10332,10333,10334,10335), +PARTITION p2584 VALUES IN (10336,10337,10338,10339), +PARTITION p2585 VALUES IN (10340,10341,10342,10343), +PARTITION p2586 VALUES IN (10344,10345,10346,10347), +PARTITION p2587 VALUES IN (10348,10349,10350,10351), +PARTITION p2588 VALUES IN (10352,10353,10354,10355), +PARTITION p2589 VALUES IN (10356,10357,10358,10359), +PARTITION p2590 VALUES IN (10360,10361,10362,10363), +PARTITION p2591 VALUES IN (10364,10365,10366,10367), +PARTITION p2592 VALUES IN (10368,10369,10370,10371), +PARTITION p2593 VALUES IN (10372,10373,10374,10375), +PARTITION p2594 VALUES IN (10376,10377,10378,10379), +PARTITION p2595 VALUES IN (10380,10381,10382,10383), +PARTITION p2596 VALUES IN (10384,10385,10386,10387), +PARTITION p2597 VALUES IN (10388,10389,10390,10391), +PARTITION p2598 VALUES IN (10392,10393,10394,10395), +PARTITION p2599 VALUES IN (10396,10397,10398,10399), +PARTITION p2600 VALUES IN (10400,10401,10402,10403), +PARTITION p2601 VALUES IN (10404,10405,10406,10407), +PARTITION p2602 VALUES IN (10408,10409,10410,10411), +PARTITION p2603 VALUES IN (10412,10413,10414,10415), +PARTITION p2604 VALUES IN (10416,10417,10418,10419), +PARTITION p2605 VALUES IN (10420,10421,10422,10423), +PARTITION p2606 VALUES IN (10424,10425,10426,10427), +PARTITION p2607 VALUES IN (10428,10429,10430,10431), +PARTITION p2608 VALUES IN (10432,10433,10434,10435), +PARTITION p2609 VALUES IN (10436,10437,10438,10439), +PARTITION p2610 VALUES IN (10440,10441,10442,10443), +PARTITION p2611 VALUES IN (10444,10445,10446,10447), +PARTITION p2612 VALUES IN (10448,10449,10450,10451), +PARTITION p2613 VALUES IN (10452,10453,10454,10455), +PARTITION p2614 VALUES IN (10456,10457,10458,10459), +PARTITION p2615 VALUES IN (10460,10461,10462,10463), +PARTITION p2616 VALUES IN (10464,10465,10466,10467), +PARTITION p2617 VALUES IN (10468,10469,10470,10471), +PARTITION p2618 VALUES IN (10472,10473,10474,10475), +PARTITION p2619 VALUES IN (10476,10477,10478,10479), +PARTITION p2620 VALUES IN (10480,10481,10482,10483), +PARTITION p2621 VALUES IN (10484,10485,10486,10487), +PARTITION p2622 VALUES IN (10488,10489,10490,10491), +PARTITION p2623 VALUES IN (10492,10493,10494,10495), +PARTITION p2624 VALUES IN (10496,10497,10498,10499), +PARTITION p2625 VALUES IN (10500,10501,10502,10503), +PARTITION p2626 VALUES IN (10504,10505,10506,10507), +PARTITION p2627 VALUES IN (10508,10509,10510,10511), +PARTITION p2628 VALUES IN (10512,10513,10514,10515), +PARTITION p2629 VALUES IN (10516,10517,10518,10519), +PARTITION p2630 VALUES IN (10520,10521,10522,10523), +PARTITION p2631 VALUES IN (10524,10525,10526,10527), +PARTITION p2632 VALUES IN (10528,10529,10530,10531), +PARTITION p2633 VALUES IN (10532,10533,10534,10535), +PARTITION p2634 VALUES IN (10536,10537,10538,10539), +PARTITION p2635 VALUES IN (10540,10541,10542,10543), +PARTITION p2636 VALUES IN (10544,10545,10546,10547), +PARTITION p2637 VALUES IN (10548,10549,10550,10551), +PARTITION p2638 VALUES IN (10552,10553,10554,10555), +PARTITION p2639 VALUES IN (10556,10557,10558,10559), +PARTITION p2640 VALUES IN (10560,10561,10562,10563), +PARTITION p2641 VALUES IN (10564,10565,10566,10567), +PARTITION p2642 VALUES IN (10568,10569,10570,10571), +PARTITION p2643 VALUES IN (10572,10573,10574,10575), +PARTITION p2644 VALUES IN (10576,10577,10578,10579), +PARTITION p2645 VALUES IN (10580,10581,10582,10583), +PARTITION p2646 VALUES IN (10584,10585,10586,10587), +PARTITION p2647 VALUES IN (10588,10589,10590,10591), +PARTITION p2648 VALUES IN (10592,10593,10594,10595), +PARTITION p2649 VALUES IN (10596,10597,10598,10599), +PARTITION p2650 VALUES IN (10600,10601,10602,10603), +PARTITION p2651 VALUES IN (10604,10605,10606,10607), +PARTITION p2652 VALUES IN (10608,10609,10610,10611), +PARTITION p2653 VALUES IN (10612,10613,10614,10615), +PARTITION p2654 VALUES IN (10616,10617,10618,10619), +PARTITION p2655 VALUES IN (10620,10621,10622,10623), +PARTITION p2656 VALUES IN (10624,10625,10626,10627), +PARTITION p2657 VALUES IN (10628,10629,10630,10631), +PARTITION p2658 VALUES IN (10632,10633,10634,10635), +PARTITION p2659 VALUES IN (10636,10637,10638,10639), +PARTITION p2660 VALUES IN (10640,10641,10642,10643), +PARTITION p2661 VALUES IN (10644,10645,10646,10647), +PARTITION p2662 VALUES IN (10648,10649,10650,10651), +PARTITION p2663 VALUES IN (10652,10653,10654,10655), +PARTITION p2664 VALUES IN (10656,10657,10658,10659), +PARTITION p2665 VALUES IN (10660,10661,10662,10663), +PARTITION p2666 VALUES IN (10664,10665,10666,10667), +PARTITION p2667 VALUES IN (10668,10669,10670,10671), +PARTITION p2668 VALUES IN (10672,10673,10674,10675), +PARTITION p2669 VALUES IN (10676,10677,10678,10679), +PARTITION p2670 VALUES IN (10680,10681,10682,10683), +PARTITION p2671 VALUES IN (10684,10685,10686,10687), +PARTITION p2672 VALUES IN (10688,10689,10690,10691), +PARTITION p2673 VALUES IN (10692,10693,10694,10695), +PARTITION p2674 VALUES IN (10696,10697,10698,10699), +PARTITION p2675 VALUES IN (10700,10701,10702,10703), +PARTITION p2676 VALUES IN (10704,10705,10706,10707), +PARTITION p2677 VALUES IN (10708,10709,10710,10711), +PARTITION p2678 VALUES IN (10712,10713,10714,10715), +PARTITION p2679 VALUES IN (10716,10717,10718,10719), +PARTITION p2680 VALUES IN (10720,10721,10722,10723), +PARTITION p2681 VALUES IN (10724,10725,10726,10727), +PARTITION p2682 VALUES IN (10728,10729,10730,10731), +PARTITION p2683 VALUES IN (10732,10733,10734,10735), +PARTITION p2684 VALUES IN (10736,10737,10738,10739), +PARTITION p2685 VALUES IN (10740,10741,10742,10743), +PARTITION p2686 VALUES IN (10744,10745,10746,10747), +PARTITION p2687 VALUES IN (10748,10749,10750,10751), +PARTITION p2688 VALUES IN (10752,10753,10754,10755), +PARTITION p2689 VALUES IN (10756,10757,10758,10759), +PARTITION p2690 VALUES IN (10760,10761,10762,10763), +PARTITION p2691 VALUES IN (10764,10765,10766,10767), +PARTITION p2692 VALUES IN (10768,10769,10770,10771), +PARTITION p2693 VALUES IN (10772,10773,10774,10775), +PARTITION p2694 VALUES IN (10776,10777,10778,10779), +PARTITION p2695 VALUES IN (10780,10781,10782,10783), +PARTITION p2696 VALUES IN (10784,10785,10786,10787), +PARTITION p2697 VALUES IN (10788,10789,10790,10791), +PARTITION p2698 VALUES IN (10792,10793,10794,10795), +PARTITION p2699 VALUES IN (10796,10797,10798,10799), +PARTITION p2700 VALUES IN (10800,10801,10802,10803), +PARTITION p2701 VALUES IN (10804,10805,10806,10807), +PARTITION p2702 VALUES IN (10808,10809,10810,10811), +PARTITION p2703 VALUES IN (10812,10813,10814,10815), +PARTITION p2704 VALUES IN (10816,10817,10818,10819), +PARTITION p2705 VALUES IN (10820,10821,10822,10823), +PARTITION p2706 VALUES IN (10824,10825,10826,10827), +PARTITION p2707 VALUES IN (10828,10829,10830,10831), +PARTITION p2708 VALUES IN (10832,10833,10834,10835), +PARTITION p2709 VALUES IN (10836,10837,10838,10839), +PARTITION p2710 VALUES IN (10840,10841,10842,10843), +PARTITION p2711 VALUES IN (10844,10845,10846,10847), +PARTITION p2712 VALUES IN (10848,10849,10850,10851), +PARTITION p2713 VALUES IN (10852,10853,10854,10855), +PARTITION p2714 VALUES IN (10856,10857,10858,10859), +PARTITION p2715 VALUES IN (10860,10861,10862,10863), +PARTITION p2716 VALUES IN (10864,10865,10866,10867), +PARTITION p2717 VALUES IN (10868,10869,10870,10871), +PARTITION p2718 VALUES IN (10872,10873,10874,10875), +PARTITION p2719 VALUES IN (10876,10877,10878,10879), +PARTITION p2720 VALUES IN (10880,10881,10882,10883), +PARTITION p2721 VALUES IN (10884,10885,10886,10887), +PARTITION p2722 VALUES IN (10888,10889,10890,10891), +PARTITION p2723 VALUES IN (10892,10893,10894,10895), +PARTITION p2724 VALUES IN (10896,10897,10898,10899), +PARTITION p2725 VALUES IN (10900,10901,10902,10903), +PARTITION p2726 VALUES IN (10904,10905,10906,10907), +PARTITION p2727 VALUES IN (10908,10909,10910,10911), +PARTITION p2728 VALUES IN (10912,10913,10914,10915), +PARTITION p2729 VALUES IN (10916,10917,10918,10919), +PARTITION p2730 VALUES IN (10920,10921,10922,10923), +PARTITION p2731 VALUES IN (10924,10925,10926,10927), +PARTITION p2732 VALUES IN (10928,10929,10930,10931), +PARTITION p2733 VALUES IN (10932,10933,10934,10935), +PARTITION p2734 VALUES IN (10936,10937,10938,10939), +PARTITION p2735 VALUES IN (10940,10941,10942,10943), +PARTITION p2736 VALUES IN (10944,10945,10946,10947), +PARTITION p2737 VALUES IN (10948,10949,10950,10951), +PARTITION p2738 VALUES IN (10952,10953,10954,10955), +PARTITION p2739 VALUES IN (10956,10957,10958,10959), +PARTITION p2740 VALUES IN (10960,10961,10962,10963), +PARTITION p2741 VALUES IN (10964,10965,10966,10967), +PARTITION p2742 VALUES IN (10968,10969,10970,10971), +PARTITION p2743 VALUES IN (10972,10973,10974,10975), +PARTITION p2744 VALUES IN (10976,10977,10978,10979), +PARTITION p2745 VALUES IN (10980,10981,10982,10983), +PARTITION p2746 VALUES IN (10984,10985,10986,10987), +PARTITION p2747 VALUES IN (10988,10989,10990,10991), +PARTITION p2748 VALUES IN (10992,10993,10994,10995), +PARTITION p2749 VALUES IN (10996,10997,10998,10999), +PARTITION p2750 VALUES IN (11000,11001,11002,11003), +PARTITION p2751 VALUES IN (11004,11005,11006,11007), +PARTITION p2752 VALUES IN (11008,11009,11010,11011), +PARTITION p2753 VALUES IN (11012,11013,11014,11015), +PARTITION p2754 VALUES IN (11016,11017,11018,11019), +PARTITION p2755 VALUES IN (11020,11021,11022,11023), +PARTITION p2756 VALUES IN (11024,11025,11026,11027), +PARTITION p2757 VALUES IN (11028,11029,11030,11031), +PARTITION p2758 VALUES IN (11032,11033,11034,11035), +PARTITION p2759 VALUES IN (11036,11037,11038,11039), +PARTITION p2760 VALUES IN (11040,11041,11042,11043), +PARTITION p2761 VALUES IN (11044,11045,11046,11047), +PARTITION p2762 VALUES IN (11048,11049,11050,11051), +PARTITION p2763 VALUES IN (11052,11053,11054,11055), +PARTITION p2764 VALUES IN (11056,11057,11058,11059), +PARTITION p2765 VALUES IN (11060,11061,11062,11063), +PARTITION p2766 VALUES IN (11064,11065,11066,11067), +PARTITION p2767 VALUES IN (11068,11069,11070,11071), +PARTITION p2768 VALUES IN (11072,11073,11074,11075), +PARTITION p2769 VALUES IN (11076,11077,11078,11079), +PARTITION p2770 VALUES IN (11080,11081,11082,11083), +PARTITION p2771 VALUES IN (11084,11085,11086,11087), +PARTITION p2772 VALUES IN (11088,11089,11090,11091), +PARTITION p2773 VALUES IN (11092,11093,11094,11095), +PARTITION p2774 VALUES IN (11096,11097,11098,11099), +PARTITION p2775 VALUES IN (11100,11101,11102,11103), +PARTITION p2776 VALUES IN (11104,11105,11106,11107), +PARTITION p2777 VALUES IN (11108,11109,11110,11111), +PARTITION p2778 VALUES IN (11112,11113,11114,11115), +PARTITION p2779 VALUES IN (11116,11117,11118,11119), +PARTITION p2780 VALUES IN (11120,11121,11122,11123), +PARTITION p2781 VALUES IN (11124,11125,11126,11127), +PARTITION p2782 VALUES IN (11128,11129,11130,11131), +PARTITION p2783 VALUES IN (11132,11133,11134,11135), +PARTITION p2784 VALUES IN (11136,11137,11138,11139), +PARTITION p2785 VALUES IN (11140,11141,11142,11143), +PARTITION p2786 VALUES IN (11144,11145,11146,11147), +PARTITION p2787 VALUES IN (11148,11149,11150,11151), +PARTITION p2788 VALUES IN (11152,11153,11154,11155), +PARTITION p2789 VALUES IN (11156,11157,11158,11159), +PARTITION p2790 VALUES IN (11160,11161,11162,11163), +PARTITION p2791 VALUES IN (11164,11165,11166,11167), +PARTITION p2792 VALUES IN (11168,11169,11170,11171), +PARTITION p2793 VALUES IN (11172,11173,11174,11175), +PARTITION p2794 VALUES IN (11176,11177,11178,11179), +PARTITION p2795 VALUES IN (11180,11181,11182,11183), +PARTITION p2796 VALUES IN (11184,11185,11186,11187), +PARTITION p2797 VALUES IN (11188,11189,11190,11191), +PARTITION p2798 VALUES IN (11192,11193,11194,11195), +PARTITION p2799 VALUES IN (11196,11197,11198,11199), +PARTITION p2800 VALUES IN (11200,11201,11202,11203), +PARTITION p2801 VALUES IN (11204,11205,11206,11207), +PARTITION p2802 VALUES IN (11208,11209,11210,11211), +PARTITION p2803 VALUES IN (11212,11213,11214,11215), +PARTITION p2804 VALUES IN (11216,11217,11218,11219), +PARTITION p2805 VALUES IN (11220,11221,11222,11223), +PARTITION p2806 VALUES IN (11224,11225,11226,11227), +PARTITION p2807 VALUES IN (11228,11229,11230,11231), +PARTITION p2808 VALUES IN (11232,11233,11234,11235), +PARTITION p2809 VALUES IN (11236,11237,11238,11239), +PARTITION p2810 VALUES IN (11240,11241,11242,11243), +PARTITION p2811 VALUES IN (11244,11245,11246,11247), +PARTITION p2812 VALUES IN (11248,11249,11250,11251), +PARTITION p2813 VALUES IN (11252,11253,11254,11255), +PARTITION p2814 VALUES IN (11256,11257,11258,11259), +PARTITION p2815 VALUES IN (11260,11261,11262,11263), +PARTITION p2816 VALUES IN (11264,11265,11266,11267), +PARTITION p2817 VALUES IN (11268,11269,11270,11271), +PARTITION p2818 VALUES IN (11272,11273,11274,11275), +PARTITION p2819 VALUES IN (11276,11277,11278,11279), +PARTITION p2820 VALUES IN (11280,11281,11282,11283), +PARTITION p2821 VALUES IN (11284,11285,11286,11287), +PARTITION p2822 VALUES IN (11288,11289,11290,11291), +PARTITION p2823 VALUES IN (11292,11293,11294,11295), +PARTITION p2824 VALUES IN (11296,11297,11298,11299), +PARTITION p2825 VALUES IN (11300,11301,11302,11303), +PARTITION p2826 VALUES IN (11304,11305,11306,11307), +PARTITION p2827 VALUES IN (11308,11309,11310,11311), +PARTITION p2828 VALUES IN (11312,11313,11314,11315), +PARTITION p2829 VALUES IN (11316,11317,11318,11319), +PARTITION p2830 VALUES IN (11320,11321,11322,11323), +PARTITION p2831 VALUES IN (11324,11325,11326,11327), +PARTITION p2832 VALUES IN (11328,11329,11330,11331), +PARTITION p2833 VALUES IN (11332,11333,11334,11335), +PARTITION p2834 VALUES IN (11336,11337,11338,11339), +PARTITION p2835 VALUES IN (11340,11341,11342,11343), +PARTITION p2836 VALUES IN (11344,11345,11346,11347), +PARTITION p2837 VALUES IN (11348,11349,11350,11351), +PARTITION p2838 VALUES IN (11352,11353,11354,11355), +PARTITION p2839 VALUES IN (11356,11357,11358,11359), +PARTITION p2840 VALUES IN (11360,11361,11362,11363), +PARTITION p2841 VALUES IN (11364,11365,11366,11367), +PARTITION p2842 VALUES IN (11368,11369,11370,11371), +PARTITION p2843 VALUES IN (11372,11373,11374,11375), +PARTITION p2844 VALUES IN (11376,11377,11378,11379), +PARTITION p2845 VALUES IN (11380,11381,11382,11383), +PARTITION p2846 VALUES IN (11384,11385,11386,11387), +PARTITION p2847 VALUES IN (11388,11389,11390,11391), +PARTITION p2848 VALUES IN (11392,11393,11394,11395), +PARTITION p2849 VALUES IN (11396,11397,11398,11399), +PARTITION p2850 VALUES IN (11400,11401,11402,11403), +PARTITION p2851 VALUES IN (11404,11405,11406,11407), +PARTITION p2852 VALUES IN (11408,11409,11410,11411), +PARTITION p2853 VALUES IN (11412,11413,11414,11415), +PARTITION p2854 VALUES IN (11416,11417,11418,11419), +PARTITION p2855 VALUES IN (11420,11421,11422,11423), +PARTITION p2856 VALUES IN (11424,11425,11426,11427), +PARTITION p2857 VALUES IN (11428,11429,11430,11431), +PARTITION p2858 VALUES IN (11432,11433,11434,11435), +PARTITION p2859 VALUES IN (11436,11437,11438,11439), +PARTITION p2860 VALUES IN (11440,11441,11442,11443), +PARTITION p2861 VALUES IN (11444,11445,11446,11447), +PARTITION p2862 VALUES IN (11448,11449,11450,11451), +PARTITION p2863 VALUES IN (11452,11453,11454,11455), +PARTITION p2864 VALUES IN (11456,11457,11458,11459), +PARTITION p2865 VALUES IN (11460,11461,11462,11463), +PARTITION p2866 VALUES IN (11464,11465,11466,11467), +PARTITION p2867 VALUES IN (11468,11469,11470,11471), +PARTITION p2868 VALUES IN (11472,11473,11474,11475), +PARTITION p2869 VALUES IN (11476,11477,11478,11479), +PARTITION p2870 VALUES IN (11480,11481,11482,11483), +PARTITION p2871 VALUES IN (11484,11485,11486,11487), +PARTITION p2872 VALUES IN (11488,11489,11490,11491), +PARTITION p2873 VALUES IN (11492,11493,11494,11495), +PARTITION p2874 VALUES IN (11496,11497,11498,11499), +PARTITION p2875 VALUES IN (11500,11501,11502,11503), +PARTITION p2876 VALUES IN (11504,11505,11506,11507), +PARTITION p2877 VALUES IN (11508,11509,11510,11511), +PARTITION p2878 VALUES IN (11512,11513,11514,11515), +PARTITION p2879 VALUES IN (11516,11517,11518,11519), +PARTITION p2880 VALUES IN (11520,11521,11522,11523), +PARTITION p2881 VALUES IN (11524,11525,11526,11527), +PARTITION p2882 VALUES IN (11528,11529,11530,11531), +PARTITION p2883 VALUES IN (11532,11533,11534,11535), +PARTITION p2884 VALUES IN (11536,11537,11538,11539), +PARTITION p2885 VALUES IN (11540,11541,11542,11543), +PARTITION p2886 VALUES IN (11544,11545,11546,11547), +PARTITION p2887 VALUES IN (11548,11549,11550,11551), +PARTITION p2888 VALUES IN (11552,11553,11554,11555), +PARTITION p2889 VALUES IN (11556,11557,11558,11559), +PARTITION p2890 VALUES IN (11560,11561,11562,11563), +PARTITION p2891 VALUES IN (11564,11565,11566,11567), +PARTITION p2892 VALUES IN (11568,11569,11570,11571), +PARTITION p2893 VALUES IN (11572,11573,11574,11575), +PARTITION p2894 VALUES IN (11576,11577,11578,11579), +PARTITION p2895 VALUES IN (11580,11581,11582,11583), +PARTITION p2896 VALUES IN (11584,11585,11586,11587), +PARTITION p2897 VALUES IN (11588,11589,11590,11591), +PARTITION p2898 VALUES IN (11592,11593,11594,11595), +PARTITION p2899 VALUES IN (11596,11597,11598,11599), +PARTITION p2900 VALUES IN (11600,11601,11602,11603), +PARTITION p2901 VALUES IN (11604,11605,11606,11607), +PARTITION p2902 VALUES IN (11608,11609,11610,11611), +PARTITION p2903 VALUES IN (11612,11613,11614,11615), +PARTITION p2904 VALUES IN (11616,11617,11618,11619), +PARTITION p2905 VALUES IN (11620,11621,11622,11623), +PARTITION p2906 VALUES IN (11624,11625,11626,11627), +PARTITION p2907 VALUES IN (11628,11629,11630,11631), +PARTITION p2908 VALUES IN (11632,11633,11634,11635), +PARTITION p2909 VALUES IN (11636,11637,11638,11639), +PARTITION p2910 VALUES IN (11640,11641,11642,11643), +PARTITION p2911 VALUES IN (11644,11645,11646,11647), +PARTITION p2912 VALUES IN (11648,11649,11650,11651), +PARTITION p2913 VALUES IN (11652,11653,11654,11655), +PARTITION p2914 VALUES IN (11656,11657,11658,11659), +PARTITION p2915 VALUES IN (11660,11661,11662,11663), +PARTITION p2916 VALUES IN (11664,11665,11666,11667), +PARTITION p2917 VALUES IN (11668,11669,11670,11671), +PARTITION p2918 VALUES IN (11672,11673,11674,11675), +PARTITION p2919 VALUES IN (11676,11677,11678,11679), +PARTITION p2920 VALUES IN (11680,11681,11682,11683), +PARTITION p2921 VALUES IN (11684,11685,11686,11687), +PARTITION p2922 VALUES IN (11688,11689,11690,11691), +PARTITION p2923 VALUES IN (11692,11693,11694,11695), +PARTITION p2924 VALUES IN (11696,11697,11698,11699), +PARTITION p2925 VALUES IN (11700,11701,11702,11703), +PARTITION p2926 VALUES IN (11704,11705,11706,11707), +PARTITION p2927 VALUES IN (11708,11709,11710,11711), +PARTITION p2928 VALUES IN (11712,11713,11714,11715), +PARTITION p2929 VALUES IN (11716,11717,11718,11719), +PARTITION p2930 VALUES IN (11720,11721,11722,11723), +PARTITION p2931 VALUES IN (11724,11725,11726,11727), +PARTITION p2932 VALUES IN (11728,11729,11730,11731), +PARTITION p2933 VALUES IN (11732,11733,11734,11735), +PARTITION p2934 VALUES IN (11736,11737,11738,11739), +PARTITION p2935 VALUES IN (11740,11741,11742,11743), +PARTITION p2936 VALUES IN (11744,11745,11746,11747), +PARTITION p2937 VALUES IN (11748,11749,11750,11751), +PARTITION p2938 VALUES IN (11752,11753,11754,11755), +PARTITION p2939 VALUES IN (11756,11757,11758,11759), +PARTITION p2940 VALUES IN (11760,11761,11762,11763), +PARTITION p2941 VALUES IN (11764,11765,11766,11767), +PARTITION p2942 VALUES IN (11768,11769,11770,11771), +PARTITION p2943 VALUES IN (11772,11773,11774,11775), +PARTITION p2944 VALUES IN (11776,11777,11778,11779), +PARTITION p2945 VALUES IN (11780,11781,11782,11783), +PARTITION p2946 VALUES IN (11784,11785,11786,11787), +PARTITION p2947 VALUES IN (11788,11789,11790,11791), +PARTITION p2948 VALUES IN (11792,11793,11794,11795), +PARTITION p2949 VALUES IN (11796,11797,11798,11799), +PARTITION p2950 VALUES IN (11800,11801,11802,11803), +PARTITION p2951 VALUES IN (11804,11805,11806,11807), +PARTITION p2952 VALUES IN (11808,11809,11810,11811), +PARTITION p2953 VALUES IN (11812,11813,11814,11815), +PARTITION p2954 VALUES IN (11816,11817,11818,11819), +PARTITION p2955 VALUES IN (11820,11821,11822,11823), +PARTITION p2956 VALUES IN (11824,11825,11826,11827), +PARTITION p2957 VALUES IN (11828,11829,11830,11831), +PARTITION p2958 VALUES IN (11832,11833,11834,11835), +PARTITION p2959 VALUES IN (11836,11837,11838,11839), +PARTITION p2960 VALUES IN (11840,11841,11842,11843), +PARTITION p2961 VALUES IN (11844,11845,11846,11847), +PARTITION p2962 VALUES IN (11848,11849,11850,11851), +PARTITION p2963 VALUES IN (11852,11853,11854,11855), +PARTITION p2964 VALUES IN (11856,11857,11858,11859), +PARTITION p2965 VALUES IN (11860,11861,11862,11863), +PARTITION p2966 VALUES IN (11864,11865,11866,11867), +PARTITION p2967 VALUES IN (11868,11869,11870,11871), +PARTITION p2968 VALUES IN (11872,11873,11874,11875), +PARTITION p2969 VALUES IN (11876,11877,11878,11879), +PARTITION p2970 VALUES IN (11880,11881,11882,11883), +PARTITION p2971 VALUES IN (11884,11885,11886,11887), +PARTITION p2972 VALUES IN (11888,11889,11890,11891), +PARTITION p2973 VALUES IN (11892,11893,11894,11895), +PARTITION p2974 VALUES IN (11896,11897,11898,11899), +PARTITION p2975 VALUES IN (11900,11901,11902,11903), +PARTITION p2976 VALUES IN (11904,11905,11906,11907), +PARTITION p2977 VALUES IN (11908,11909,11910,11911), +PARTITION p2978 VALUES IN (11912,11913,11914,11915), +PARTITION p2979 VALUES IN (11916,11917,11918,11919), +PARTITION p2980 VALUES IN (11920,11921,11922,11923), +PARTITION p2981 VALUES IN (11924,11925,11926,11927), +PARTITION p2982 VALUES IN (11928,11929,11930,11931), +PARTITION p2983 VALUES IN (11932,11933,11934,11935), +PARTITION p2984 VALUES IN (11936,11937,11938,11939), +PARTITION p2985 VALUES IN (11940,11941,11942,11943), +PARTITION p2986 VALUES IN (11944,11945,11946,11947), +PARTITION p2987 VALUES IN (11948,11949,11950,11951), +PARTITION p2988 VALUES IN (11952,11953,11954,11955), +PARTITION p2989 VALUES IN (11956,11957,11958,11959), +PARTITION p2990 VALUES IN (11960,11961,11962,11963), +PARTITION p2991 VALUES IN (11964,11965,11966,11967), +PARTITION p2992 VALUES IN (11968,11969,11970,11971), +PARTITION p2993 VALUES IN (11972,11973,11974,11975), +PARTITION p2994 VALUES IN (11976,11977,11978,11979), +PARTITION p2995 VALUES IN (11980,11981,11982,11983), +PARTITION p2996 VALUES IN (11984,11985,11986,11987), +PARTITION p2997 VALUES IN (11988,11989,11990,11991), +PARTITION p2998 VALUES IN (11992,11993,11994,11995), +PARTITION p2999 VALUES IN (11996,11997,11998,11999), +PARTITION p3000 VALUES IN (12000,12001,12002,12003), +PARTITION p3001 VALUES IN (12004,12005,12006,12007), +PARTITION p3002 VALUES IN (12008,12009,12010,12011), +PARTITION p3003 VALUES IN (12012,12013,12014,12015), +PARTITION p3004 VALUES IN (12016,12017,12018,12019), +PARTITION p3005 VALUES IN (12020,12021,12022,12023), +PARTITION p3006 VALUES IN (12024,12025,12026,12027), +PARTITION p3007 VALUES IN (12028,12029,12030,12031), +PARTITION p3008 VALUES IN (12032,12033,12034,12035), +PARTITION p3009 VALUES IN (12036,12037,12038,12039), +PARTITION p3010 VALUES IN (12040,12041,12042,12043), +PARTITION p3011 VALUES IN (12044,12045,12046,12047), +PARTITION p3012 VALUES IN (12048,12049,12050,12051), +PARTITION p3013 VALUES IN (12052,12053,12054,12055), +PARTITION p3014 VALUES IN (12056,12057,12058,12059), +PARTITION p3015 VALUES IN (12060,12061,12062,12063), +PARTITION p3016 VALUES IN (12064,12065,12066,12067), +PARTITION p3017 VALUES IN (12068,12069,12070,12071), +PARTITION p3018 VALUES IN (12072,12073,12074,12075), +PARTITION p3019 VALUES IN (12076,12077,12078,12079), +PARTITION p3020 VALUES IN (12080,12081,12082,12083), +PARTITION p3021 VALUES IN (12084,12085,12086,12087), +PARTITION p3022 VALUES IN (12088,12089,12090,12091), +PARTITION p3023 VALUES IN (12092,12093,12094,12095), +PARTITION p3024 VALUES IN (12096,12097,12098,12099), +PARTITION p3025 VALUES IN (12100,12101,12102,12103), +PARTITION p3026 VALUES IN (12104,12105,12106,12107), +PARTITION p3027 VALUES IN (12108,12109,12110,12111), +PARTITION p3028 VALUES IN (12112,12113,12114,12115), +PARTITION p3029 VALUES IN (12116,12117,12118,12119), +PARTITION p3030 VALUES IN (12120,12121,12122,12123), +PARTITION p3031 VALUES IN (12124,12125,12126,12127), +PARTITION p3032 VALUES IN (12128,12129,12130,12131), +PARTITION p3033 VALUES IN (12132,12133,12134,12135), +PARTITION p3034 VALUES IN (12136,12137,12138,12139), +PARTITION p3035 VALUES IN (12140,12141,12142,12143), +PARTITION p3036 VALUES IN (12144,12145,12146,12147), +PARTITION p3037 VALUES IN (12148,12149,12150,12151), +PARTITION p3038 VALUES IN (12152,12153,12154,12155), +PARTITION p3039 VALUES IN (12156,12157,12158,12159), +PARTITION p3040 VALUES IN (12160,12161,12162,12163), +PARTITION p3041 VALUES IN (12164,12165,12166,12167), +PARTITION p3042 VALUES IN (12168,12169,12170,12171), +PARTITION p3043 VALUES IN (12172,12173,12174,12175), +PARTITION p3044 VALUES IN (12176,12177,12178,12179), +PARTITION p3045 VALUES IN (12180,12181,12182,12183), +PARTITION p3046 VALUES IN (12184,12185,12186,12187), +PARTITION p3047 VALUES IN (12188,12189,12190,12191), +PARTITION p3048 VALUES IN (12192,12193,12194,12195), +PARTITION p3049 VALUES IN (12196,12197,12198,12199), +PARTITION p3050 VALUES IN (12200,12201,12202,12203), +PARTITION p3051 VALUES IN (12204,12205,12206,12207), +PARTITION p3052 VALUES IN (12208,12209,12210,12211), +PARTITION p3053 VALUES IN (12212,12213,12214,12215), +PARTITION p3054 VALUES IN (12216,12217,12218,12219), +PARTITION p3055 VALUES IN (12220,12221,12222,12223), +PARTITION p3056 VALUES IN (12224,12225,12226,12227), +PARTITION p3057 VALUES IN (12228,12229,12230,12231), +PARTITION p3058 VALUES IN (12232,12233,12234,12235), +PARTITION p3059 VALUES IN (12236,12237,12238,12239), +PARTITION p3060 VALUES IN (12240,12241,12242,12243), +PARTITION p3061 VALUES IN (12244,12245,12246,12247), +PARTITION p3062 VALUES IN (12248,12249,12250,12251), +PARTITION p3063 VALUES IN (12252,12253,12254,12255), +PARTITION p3064 VALUES IN (12256,12257,12258,12259), +PARTITION p3065 VALUES IN (12260,12261,12262,12263), +PARTITION p3066 VALUES IN (12264,12265,12266,12267), +PARTITION p3067 VALUES IN (12268,12269,12270,12271), +PARTITION p3068 VALUES IN (12272,12273,12274,12275), +PARTITION p3069 VALUES IN (12276,12277,12278,12279), +PARTITION p3070 VALUES IN (12280,12281,12282,12283), +PARTITION p3071 VALUES IN (12284,12285,12286,12287), +PARTITION p3072 VALUES IN (12288,12289,12290,12291), +PARTITION p3073 VALUES IN (12292,12293,12294,12295), +PARTITION p3074 VALUES IN (12296,12297,12298,12299), +PARTITION p3075 VALUES IN (12300,12301,12302,12303), +PARTITION p3076 VALUES IN (12304,12305,12306,12307), +PARTITION p3077 VALUES IN (12308,12309,12310,12311), +PARTITION p3078 VALUES IN (12312,12313,12314,12315), +PARTITION p3079 VALUES IN (12316,12317,12318,12319), +PARTITION p3080 VALUES IN (12320,12321,12322,12323), +PARTITION p3081 VALUES IN (12324,12325,12326,12327), +PARTITION p3082 VALUES IN (12328,12329,12330,12331), +PARTITION p3083 VALUES IN (12332,12333,12334,12335), +PARTITION p3084 VALUES IN (12336,12337,12338,12339), +PARTITION p3085 VALUES IN (12340,12341,12342,12343), +PARTITION p3086 VALUES IN (12344,12345,12346,12347), +PARTITION p3087 VALUES IN (12348,12349,12350,12351), +PARTITION p3088 VALUES IN (12352,12353,12354,12355), +PARTITION p3089 VALUES IN (12356,12357,12358,12359), +PARTITION p3090 VALUES IN (12360,12361,12362,12363), +PARTITION p3091 VALUES IN (12364,12365,12366,12367), +PARTITION p3092 VALUES IN (12368,12369,12370,12371), +PARTITION p3093 VALUES IN (12372,12373,12374,12375), +PARTITION p3094 VALUES IN (12376,12377,12378,12379), +PARTITION p3095 VALUES IN (12380,12381,12382,12383), +PARTITION p3096 VALUES IN (12384,12385,12386,12387), +PARTITION p3097 VALUES IN (12388,12389,12390,12391), +PARTITION p3098 VALUES IN (12392,12393,12394,12395), +PARTITION p3099 VALUES IN (12396,12397,12398,12399), +PARTITION p3100 VALUES IN (12400,12401,12402,12403), +PARTITION p3101 VALUES IN (12404,12405,12406,12407), +PARTITION p3102 VALUES IN (12408,12409,12410,12411), +PARTITION p3103 VALUES IN (12412,12413,12414,12415), +PARTITION p3104 VALUES IN (12416,12417,12418,12419), +PARTITION p3105 VALUES IN (12420,12421,12422,12423), +PARTITION p3106 VALUES IN (12424,12425,12426,12427), +PARTITION p3107 VALUES IN (12428,12429,12430,12431), +PARTITION p3108 VALUES IN (12432,12433,12434,12435), +PARTITION p3109 VALUES IN (12436,12437,12438,12439), +PARTITION p3110 VALUES IN (12440,12441,12442,12443), +PARTITION p3111 VALUES IN (12444,12445,12446,12447), +PARTITION p3112 VALUES IN (12448,12449,12450,12451), +PARTITION p3113 VALUES IN (12452,12453,12454,12455), +PARTITION p3114 VALUES IN (12456,12457,12458,12459), +PARTITION p3115 VALUES IN (12460,12461,12462,12463), +PARTITION p3116 VALUES IN (12464,12465,12466,12467), +PARTITION p3117 VALUES IN (12468,12469,12470,12471), +PARTITION p3118 VALUES IN (12472,12473,12474,12475), +PARTITION p3119 VALUES IN (12476,12477,12478,12479), +PARTITION p3120 VALUES IN (12480,12481,12482,12483), +PARTITION p3121 VALUES IN (12484,12485,12486,12487), +PARTITION p3122 VALUES IN (12488,12489,12490,12491), +PARTITION p3123 VALUES IN (12492,12493,12494,12495), +PARTITION p3124 VALUES IN (12496,12497,12498,12499), +PARTITION p3125 VALUES IN (12500,12501,12502,12503), +PARTITION p3126 VALUES IN (12504,12505,12506,12507), +PARTITION p3127 VALUES IN (12508,12509,12510,12511), +PARTITION p3128 VALUES IN (12512,12513,12514,12515), +PARTITION p3129 VALUES IN (12516,12517,12518,12519), +PARTITION p3130 VALUES IN (12520,12521,12522,12523), +PARTITION p3131 VALUES IN (12524,12525,12526,12527), +PARTITION p3132 VALUES IN (12528,12529,12530,12531), +PARTITION p3133 VALUES IN (12532,12533,12534,12535), +PARTITION p3134 VALUES IN (12536,12537,12538,12539), +PARTITION p3135 VALUES IN (12540,12541,12542,12543), +PARTITION p3136 VALUES IN (12544,12545,12546,12547), +PARTITION p3137 VALUES IN (12548,12549,12550,12551), +PARTITION p3138 VALUES IN (12552,12553,12554,12555), +PARTITION p3139 VALUES IN (12556,12557,12558,12559), +PARTITION p3140 VALUES IN (12560,12561,12562,12563), +PARTITION p3141 VALUES IN (12564,12565,12566,12567), +PARTITION p3142 VALUES IN (12568,12569,12570,12571), +PARTITION p3143 VALUES IN (12572,12573,12574,12575), +PARTITION p3144 VALUES IN (12576,12577,12578,12579), +PARTITION p3145 VALUES IN (12580,12581,12582,12583), +PARTITION p3146 VALUES IN (12584,12585,12586,12587), +PARTITION p3147 VALUES IN (12588,12589,12590,12591), +PARTITION p3148 VALUES IN (12592,12593,12594,12595), +PARTITION p3149 VALUES IN (12596,12597,12598,12599), +PARTITION p3150 VALUES IN (12600,12601,12602,12603), +PARTITION p3151 VALUES IN (12604,12605,12606,12607), +PARTITION p3152 VALUES IN (12608,12609,12610,12611), +PARTITION p3153 VALUES IN (12612,12613,12614,12615), +PARTITION p3154 VALUES IN (12616,12617,12618,12619), +PARTITION p3155 VALUES IN (12620,12621,12622,12623), +PARTITION p3156 VALUES IN (12624,12625,12626,12627), +PARTITION p3157 VALUES IN (12628,12629,12630,12631), +PARTITION p3158 VALUES IN (12632,12633,12634,12635), +PARTITION p3159 VALUES IN (12636,12637,12638,12639), +PARTITION p3160 VALUES IN (12640,12641,12642,12643), +PARTITION p3161 VALUES IN (12644,12645,12646,12647), +PARTITION p3162 VALUES IN (12648,12649,12650,12651), +PARTITION p3163 VALUES IN (12652,12653,12654,12655), +PARTITION p3164 VALUES IN (12656,12657,12658,12659), +PARTITION p3165 VALUES IN (12660,12661,12662,12663), +PARTITION p3166 VALUES IN (12664,12665,12666,12667), +PARTITION p3167 VALUES IN (12668,12669,12670,12671), +PARTITION p3168 VALUES IN (12672,12673,12674,12675), +PARTITION p3169 VALUES IN (12676,12677,12678,12679), +PARTITION p3170 VALUES IN (12680,12681,12682,12683), +PARTITION p3171 VALUES IN (12684,12685,12686,12687), +PARTITION p3172 VALUES IN (12688,12689,12690,12691), +PARTITION p3173 VALUES IN (12692,12693,12694,12695), +PARTITION p3174 VALUES IN (12696,12697,12698,12699), +PARTITION p3175 VALUES IN (12700,12701,12702,12703), +PARTITION p3176 VALUES IN (12704,12705,12706,12707), +PARTITION p3177 VALUES IN (12708,12709,12710,12711), +PARTITION p3178 VALUES IN (12712,12713,12714,12715), +PARTITION p3179 VALUES IN (12716,12717,12718,12719), +PARTITION p3180 VALUES IN (12720,12721,12722,12723), +PARTITION p3181 VALUES IN (12724,12725,12726,12727), +PARTITION p3182 VALUES IN (12728,12729,12730,12731), +PARTITION p3183 VALUES IN (12732,12733,12734,12735), +PARTITION p3184 VALUES IN (12736,12737,12738,12739), +PARTITION p3185 VALUES IN (12740,12741,12742,12743), +PARTITION p3186 VALUES IN (12744,12745,12746,12747), +PARTITION p3187 VALUES IN (12748,12749,12750,12751), +PARTITION p3188 VALUES IN (12752,12753,12754,12755), +PARTITION p3189 VALUES IN (12756,12757,12758,12759), +PARTITION p3190 VALUES IN (12760,12761,12762,12763), +PARTITION p3191 VALUES IN (12764,12765,12766,12767), +PARTITION p3192 VALUES IN (12768,12769,12770,12771), +PARTITION p3193 VALUES IN (12772,12773,12774,12775), +PARTITION p3194 VALUES IN (12776,12777,12778,12779), +PARTITION p3195 VALUES IN (12780,12781,12782,12783), +PARTITION p3196 VALUES IN (12784,12785,12786,12787), +PARTITION p3197 VALUES IN (12788,12789,12790,12791), +PARTITION p3198 VALUES IN (12792,12793,12794,12795), +PARTITION p3199 VALUES IN (12796,12797,12798,12799), +PARTITION p3200 VALUES IN (12800,12801,12802,12803), +PARTITION p3201 VALUES IN (12804,12805,12806,12807), +PARTITION p3202 VALUES IN (12808,12809,12810,12811), +PARTITION p3203 VALUES IN (12812,12813,12814,12815), +PARTITION p3204 VALUES IN (12816,12817,12818,12819), +PARTITION p3205 VALUES IN (12820,12821,12822,12823), +PARTITION p3206 VALUES IN (12824,12825,12826,12827), +PARTITION p3207 VALUES IN (12828,12829,12830,12831), +PARTITION p3208 VALUES IN (12832,12833,12834,12835), +PARTITION p3209 VALUES IN (12836,12837,12838,12839), +PARTITION p3210 VALUES IN (12840,12841,12842,12843), +PARTITION p3211 VALUES IN (12844,12845,12846,12847), +PARTITION p3212 VALUES IN (12848,12849,12850,12851), +PARTITION p3213 VALUES IN (12852,12853,12854,12855), +PARTITION p3214 VALUES IN (12856,12857,12858,12859), +PARTITION p3215 VALUES IN (12860,12861,12862,12863), +PARTITION p3216 VALUES IN (12864,12865,12866,12867), +PARTITION p3217 VALUES IN (12868,12869,12870,12871), +PARTITION p3218 VALUES IN (12872,12873,12874,12875), +PARTITION p3219 VALUES IN (12876,12877,12878,12879), +PARTITION p3220 VALUES IN (12880,12881,12882,12883), +PARTITION p3221 VALUES IN (12884,12885,12886,12887), +PARTITION p3222 VALUES IN (12888,12889,12890,12891), +PARTITION p3223 VALUES IN (12892,12893,12894,12895), +PARTITION p3224 VALUES IN (12896,12897,12898,12899), +PARTITION p3225 VALUES IN (12900,12901,12902,12903), +PARTITION p3226 VALUES IN (12904,12905,12906,12907), +PARTITION p3227 VALUES IN (12908,12909,12910,12911), +PARTITION p3228 VALUES IN (12912,12913,12914,12915), +PARTITION p3229 VALUES IN (12916,12917,12918,12919), +PARTITION p3230 VALUES IN (12920,12921,12922,12923), +PARTITION p3231 VALUES IN (12924,12925,12926,12927), +PARTITION p3232 VALUES IN (12928,12929,12930,12931), +PARTITION p3233 VALUES IN (12932,12933,12934,12935), +PARTITION p3234 VALUES IN (12936,12937,12938,12939), +PARTITION p3235 VALUES IN (12940,12941,12942,12943), +PARTITION p3236 VALUES IN (12944,12945,12946,12947), +PARTITION p3237 VALUES IN (12948,12949,12950,12951), +PARTITION p3238 VALUES IN (12952,12953,12954,12955), +PARTITION p3239 VALUES IN (12956,12957,12958,12959), +PARTITION p3240 VALUES IN (12960,12961,12962,12963), +PARTITION p3241 VALUES IN (12964,12965,12966,12967), +PARTITION p3242 VALUES IN (12968,12969,12970,12971), +PARTITION p3243 VALUES IN (12972,12973,12974,12975), +PARTITION p3244 VALUES IN (12976,12977,12978,12979), +PARTITION p3245 VALUES IN (12980,12981,12982,12983), +PARTITION p3246 VALUES IN (12984,12985,12986,12987), +PARTITION p3247 VALUES IN (12988,12989,12990,12991), +PARTITION p3248 VALUES IN (12992,12993,12994,12995), +PARTITION p3249 VALUES IN (12996,12997,12998,12999), +PARTITION p3250 VALUES IN (13000,13001,13002,13003), +PARTITION p3251 VALUES IN (13004,13005,13006,13007), +PARTITION p3252 VALUES IN (13008,13009,13010,13011), +PARTITION p3253 VALUES IN (13012,13013,13014,13015), +PARTITION p3254 VALUES IN (13016,13017,13018,13019), +PARTITION p3255 VALUES IN (13020,13021,13022,13023), +PARTITION p3256 VALUES IN (13024,13025,13026,13027), +PARTITION p3257 VALUES IN (13028,13029,13030,13031), +PARTITION p3258 VALUES IN (13032,13033,13034,13035), +PARTITION p3259 VALUES IN (13036,13037,13038,13039), +PARTITION p3260 VALUES IN (13040,13041,13042,13043), +PARTITION p3261 VALUES IN (13044,13045,13046,13047), +PARTITION p3262 VALUES IN (13048,13049,13050,13051), +PARTITION p3263 VALUES IN (13052,13053,13054,13055), +PARTITION p3264 VALUES IN (13056,13057,13058,13059), +PARTITION p3265 VALUES IN (13060,13061,13062,13063), +PARTITION p3266 VALUES IN (13064,13065,13066,13067), +PARTITION p3267 VALUES IN (13068,13069,13070,13071), +PARTITION p3268 VALUES IN (13072,13073,13074,13075), +PARTITION p3269 VALUES IN (13076,13077,13078,13079), +PARTITION p3270 VALUES IN (13080,13081,13082,13083), +PARTITION p3271 VALUES IN (13084,13085,13086,13087), +PARTITION p3272 VALUES IN (13088,13089,13090,13091), +PARTITION p3273 VALUES IN (13092,13093,13094,13095), +PARTITION p3274 VALUES IN (13096,13097,13098,13099), +PARTITION p3275 VALUES IN (13100,13101,13102,13103), +PARTITION p3276 VALUES IN (13104,13105,13106,13107), +PARTITION p3277 VALUES IN (13108,13109,13110,13111), +PARTITION p3278 VALUES IN (13112,13113,13114,13115), +PARTITION p3279 VALUES IN (13116,13117,13118,13119), +PARTITION p3280 VALUES IN (13120,13121,13122,13123), +PARTITION p3281 VALUES IN (13124,13125,13126,13127), +PARTITION p3282 VALUES IN (13128,13129,13130,13131), +PARTITION p3283 VALUES IN (13132,13133,13134,13135), +PARTITION p3284 VALUES IN (13136,13137,13138,13139), +PARTITION p3285 VALUES IN (13140,13141,13142,13143), +PARTITION p3286 VALUES IN (13144,13145,13146,13147), +PARTITION p3287 VALUES IN (13148,13149,13150,13151), +PARTITION p3288 VALUES IN (13152,13153,13154,13155), +PARTITION p3289 VALUES IN (13156,13157,13158,13159), +PARTITION p3290 VALUES IN (13160,13161,13162,13163), +PARTITION p3291 VALUES IN (13164,13165,13166,13167), +PARTITION p3292 VALUES IN (13168,13169,13170,13171), +PARTITION p3293 VALUES IN (13172,13173,13174,13175), +PARTITION p3294 VALUES IN (13176,13177,13178,13179), +PARTITION p3295 VALUES IN (13180,13181,13182,13183), +PARTITION p3296 VALUES IN (13184,13185,13186,13187), +PARTITION p3297 VALUES IN (13188,13189,13190,13191), +PARTITION p3298 VALUES IN (13192,13193,13194,13195), +PARTITION p3299 VALUES IN (13196,13197,13198,13199), +PARTITION p3300 VALUES IN (13200,13201,13202,13203), +PARTITION p3301 VALUES IN (13204,13205,13206,13207), +PARTITION p3302 VALUES IN (13208,13209,13210,13211), +PARTITION p3303 VALUES IN (13212,13213,13214,13215), +PARTITION p3304 VALUES IN (13216,13217,13218,13219), +PARTITION p3305 VALUES IN (13220,13221,13222,13223), +PARTITION p3306 VALUES IN (13224,13225,13226,13227), +PARTITION p3307 VALUES IN (13228,13229,13230,13231), +PARTITION p3308 VALUES IN (13232,13233,13234,13235), +PARTITION p3309 VALUES IN (13236,13237,13238,13239), +PARTITION p3310 VALUES IN (13240,13241,13242,13243), +PARTITION p3311 VALUES IN (13244,13245,13246,13247), +PARTITION p3312 VALUES IN (13248,13249,13250,13251), +PARTITION p3313 VALUES IN (13252,13253,13254,13255), +PARTITION p3314 VALUES IN (13256,13257,13258,13259), +PARTITION p3315 VALUES IN (13260,13261,13262,13263), +PARTITION p3316 VALUES IN (13264,13265,13266,13267), +PARTITION p3317 VALUES IN (13268,13269,13270,13271), +PARTITION p3318 VALUES IN (13272,13273,13274,13275), +PARTITION p3319 VALUES IN (13276,13277,13278,13279), +PARTITION p3320 VALUES IN (13280,13281,13282,13283), +PARTITION p3321 VALUES IN (13284,13285,13286,13287), +PARTITION p3322 VALUES IN (13288,13289,13290,13291), +PARTITION p3323 VALUES IN (13292,13293,13294,13295), +PARTITION p3324 VALUES IN (13296,13297,13298,13299), +PARTITION p3325 VALUES IN (13300,13301,13302,13303), +PARTITION p3326 VALUES IN (13304,13305,13306,13307), +PARTITION p3327 VALUES IN (13308,13309,13310,13311), +PARTITION p3328 VALUES IN (13312,13313,13314,13315), +PARTITION p3329 VALUES IN (13316,13317,13318,13319), +PARTITION p3330 VALUES IN (13320,13321,13322,13323), +PARTITION p3331 VALUES IN (13324,13325,13326,13327), +PARTITION p3332 VALUES IN (13328,13329,13330,13331), +PARTITION p3333 VALUES IN (13332,13333,13334,13335), +PARTITION p3334 VALUES IN (13336,13337,13338,13339), +PARTITION p3335 VALUES IN (13340,13341,13342,13343), +PARTITION p3336 VALUES IN (13344,13345,13346,13347), +PARTITION p3337 VALUES IN (13348,13349,13350,13351), +PARTITION p3338 VALUES IN (13352,13353,13354,13355), +PARTITION p3339 VALUES IN (13356,13357,13358,13359), +PARTITION p3340 VALUES IN (13360,13361,13362,13363), +PARTITION p3341 VALUES IN (13364,13365,13366,13367), +PARTITION p3342 VALUES IN (13368,13369,13370,13371), +PARTITION p3343 VALUES IN (13372,13373,13374,13375), +PARTITION p3344 VALUES IN (13376,13377,13378,13379), +PARTITION p3345 VALUES IN (13380,13381,13382,13383), +PARTITION p3346 VALUES IN (13384,13385,13386,13387), +PARTITION p3347 VALUES IN (13388,13389,13390,13391), +PARTITION p3348 VALUES IN (13392,13393,13394,13395), +PARTITION p3349 VALUES IN (13396,13397,13398,13399), +PARTITION p3350 VALUES IN (13400,13401,13402,13403), +PARTITION p3351 VALUES IN (13404,13405,13406,13407), +PARTITION p3352 VALUES IN (13408,13409,13410,13411), +PARTITION p3353 VALUES IN (13412,13413,13414,13415), +PARTITION p3354 VALUES IN (13416,13417,13418,13419), +PARTITION p3355 VALUES IN (13420,13421,13422,13423), +PARTITION p3356 VALUES IN (13424,13425,13426,13427), +PARTITION p3357 VALUES IN (13428,13429,13430,13431), +PARTITION p3358 VALUES IN (13432,13433,13434,13435), +PARTITION p3359 VALUES IN (13436,13437,13438,13439), +PARTITION p3360 VALUES IN (13440,13441,13442,13443), +PARTITION p3361 VALUES IN (13444,13445,13446,13447), +PARTITION p3362 VALUES IN (13448,13449,13450,13451), +PARTITION p3363 VALUES IN (13452,13453,13454,13455), +PARTITION p3364 VALUES IN (13456,13457,13458,13459), +PARTITION p3365 VALUES IN (13460,13461,13462,13463), +PARTITION p3366 VALUES IN (13464,13465,13466,13467), +PARTITION p3367 VALUES IN (13468,13469,13470,13471), +PARTITION p3368 VALUES IN (13472,13473,13474,13475), +PARTITION p3369 VALUES IN (13476,13477,13478,13479), +PARTITION p3370 VALUES IN (13480,13481,13482,13483), +PARTITION p3371 VALUES IN (13484,13485,13486,13487), +PARTITION p3372 VALUES IN (13488,13489,13490,13491), +PARTITION p3373 VALUES IN (13492,13493,13494,13495), +PARTITION p3374 VALUES IN (13496,13497,13498,13499), +PARTITION p3375 VALUES IN (13500,13501,13502,13503), +PARTITION p3376 VALUES IN (13504,13505,13506,13507), +PARTITION p3377 VALUES IN (13508,13509,13510,13511), +PARTITION p3378 VALUES IN (13512,13513,13514,13515), +PARTITION p3379 VALUES IN (13516,13517,13518,13519), +PARTITION p3380 VALUES IN (13520,13521,13522,13523), +PARTITION p3381 VALUES IN (13524,13525,13526,13527), +PARTITION p3382 VALUES IN (13528,13529,13530,13531), +PARTITION p3383 VALUES IN (13532,13533,13534,13535), +PARTITION p3384 VALUES IN (13536,13537,13538,13539), +PARTITION p3385 VALUES IN (13540,13541,13542,13543), +PARTITION p3386 VALUES IN (13544,13545,13546,13547), +PARTITION p3387 VALUES IN (13548,13549,13550,13551), +PARTITION p3388 VALUES IN (13552,13553,13554,13555), +PARTITION p3389 VALUES IN (13556,13557,13558,13559), +PARTITION p3390 VALUES IN (13560,13561,13562,13563), +PARTITION p3391 VALUES IN (13564,13565,13566,13567), +PARTITION p3392 VALUES IN (13568,13569,13570,13571), +PARTITION p3393 VALUES IN (13572,13573,13574,13575), +PARTITION p3394 VALUES IN (13576,13577,13578,13579), +PARTITION p3395 VALUES IN (13580,13581,13582,13583), +PARTITION p3396 VALUES IN (13584,13585,13586,13587), +PARTITION p3397 VALUES IN (13588,13589,13590,13591), +PARTITION p3398 VALUES IN (13592,13593,13594,13595), +PARTITION p3399 VALUES IN (13596,13597,13598,13599), +PARTITION p3400 VALUES IN (13600,13601,13602,13603), +PARTITION p3401 VALUES IN (13604,13605,13606,13607), +PARTITION p3402 VALUES IN (13608,13609,13610,13611), +PARTITION p3403 VALUES IN (13612,13613,13614,13615), +PARTITION p3404 VALUES IN (13616,13617,13618,13619), +PARTITION p3405 VALUES IN (13620,13621,13622,13623), +PARTITION p3406 VALUES IN (13624,13625,13626,13627), +PARTITION p3407 VALUES IN (13628,13629,13630,13631), +PARTITION p3408 VALUES IN (13632,13633,13634,13635), +PARTITION p3409 VALUES IN (13636,13637,13638,13639), +PARTITION p3410 VALUES IN (13640,13641,13642,13643), +PARTITION p3411 VALUES IN (13644,13645,13646,13647), +PARTITION p3412 VALUES IN (13648,13649,13650,13651), +PARTITION p3413 VALUES IN (13652,13653,13654,13655), +PARTITION p3414 VALUES IN (13656,13657,13658,13659), +PARTITION p3415 VALUES IN (13660,13661,13662,13663), +PARTITION p3416 VALUES IN (13664,13665,13666,13667), +PARTITION p3417 VALUES IN (13668,13669,13670,13671), +PARTITION p3418 VALUES IN (13672,13673,13674,13675), +PARTITION p3419 VALUES IN (13676,13677,13678,13679), +PARTITION p3420 VALUES IN (13680,13681,13682,13683), +PARTITION p3421 VALUES IN (13684,13685,13686,13687), +PARTITION p3422 VALUES IN (13688,13689,13690,13691), +PARTITION p3423 VALUES IN (13692,13693,13694,13695), +PARTITION p3424 VALUES IN (13696,13697,13698,13699), +PARTITION p3425 VALUES IN (13700,13701,13702,13703), +PARTITION p3426 VALUES IN (13704,13705,13706,13707), +PARTITION p3427 VALUES IN (13708,13709,13710,13711), +PARTITION p3428 VALUES IN (13712,13713,13714,13715), +PARTITION p3429 VALUES IN (13716,13717,13718,13719), +PARTITION p3430 VALUES IN (13720,13721,13722,13723), +PARTITION p3431 VALUES IN (13724,13725,13726,13727), +PARTITION p3432 VALUES IN (13728,13729,13730,13731), +PARTITION p3433 VALUES IN (13732,13733,13734,13735), +PARTITION p3434 VALUES IN (13736,13737,13738,13739), +PARTITION p3435 VALUES IN (13740,13741,13742,13743), +PARTITION p3436 VALUES IN (13744,13745,13746,13747), +PARTITION p3437 VALUES IN (13748,13749,13750,13751), +PARTITION p3438 VALUES IN (13752,13753,13754,13755), +PARTITION p3439 VALUES IN (13756,13757,13758,13759), +PARTITION p3440 VALUES IN (13760,13761,13762,13763), +PARTITION p3441 VALUES IN (13764,13765,13766,13767), +PARTITION p3442 VALUES IN (13768,13769,13770,13771), +PARTITION p3443 VALUES IN (13772,13773,13774,13775), +PARTITION p3444 VALUES IN (13776,13777,13778,13779), +PARTITION p3445 VALUES IN (13780,13781,13782,13783), +PARTITION p3446 VALUES IN (13784,13785,13786,13787), +PARTITION p3447 VALUES IN (13788,13789,13790,13791), +PARTITION p3448 VALUES IN (13792,13793,13794,13795), +PARTITION p3449 VALUES IN (13796,13797,13798,13799), +PARTITION p3450 VALUES IN (13800,13801,13802,13803), +PARTITION p3451 VALUES IN (13804,13805,13806,13807), +PARTITION p3452 VALUES IN (13808,13809,13810,13811), +PARTITION p3453 VALUES IN (13812,13813,13814,13815), +PARTITION p3454 VALUES IN (13816,13817,13818,13819), +PARTITION p3455 VALUES IN (13820,13821,13822,13823), +PARTITION p3456 VALUES IN (13824,13825,13826,13827), +PARTITION p3457 VALUES IN (13828,13829,13830,13831), +PARTITION p3458 VALUES IN (13832,13833,13834,13835), +PARTITION p3459 VALUES IN (13836,13837,13838,13839), +PARTITION p3460 VALUES IN (13840,13841,13842,13843), +PARTITION p3461 VALUES IN (13844,13845,13846,13847), +PARTITION p3462 VALUES IN (13848,13849,13850,13851), +PARTITION p3463 VALUES IN (13852,13853,13854,13855), +PARTITION p3464 VALUES IN (13856,13857,13858,13859), +PARTITION p3465 VALUES IN (13860,13861,13862,13863), +PARTITION p3466 VALUES IN (13864,13865,13866,13867), +PARTITION p3467 VALUES IN (13868,13869,13870,13871), +PARTITION p3468 VALUES IN (13872,13873,13874,13875), +PARTITION p3469 VALUES IN (13876,13877,13878,13879), +PARTITION p3470 VALUES IN (13880,13881,13882,13883), +PARTITION p3471 VALUES IN (13884,13885,13886,13887), +PARTITION p3472 VALUES IN (13888,13889,13890,13891), +PARTITION p3473 VALUES IN (13892,13893,13894,13895), +PARTITION p3474 VALUES IN (13896,13897,13898,13899), +PARTITION p3475 VALUES IN (13900,13901,13902,13903), +PARTITION p3476 VALUES IN (13904,13905,13906,13907), +PARTITION p3477 VALUES IN (13908,13909,13910,13911), +PARTITION p3478 VALUES IN (13912,13913,13914,13915), +PARTITION p3479 VALUES IN (13916,13917,13918,13919), +PARTITION p3480 VALUES IN (13920,13921,13922,13923), +PARTITION p3481 VALUES IN (13924,13925,13926,13927), +PARTITION p3482 VALUES IN (13928,13929,13930,13931), +PARTITION p3483 VALUES IN (13932,13933,13934,13935), +PARTITION p3484 VALUES IN (13936,13937,13938,13939), +PARTITION p3485 VALUES IN (13940,13941,13942,13943), +PARTITION p3486 VALUES IN (13944,13945,13946,13947), +PARTITION p3487 VALUES IN (13948,13949,13950,13951), +PARTITION p3488 VALUES IN (13952,13953,13954,13955), +PARTITION p3489 VALUES IN (13956,13957,13958,13959), +PARTITION p3490 VALUES IN (13960,13961,13962,13963), +PARTITION p3491 VALUES IN (13964,13965,13966,13967), +PARTITION p3492 VALUES IN (13968,13969,13970,13971), +PARTITION p3493 VALUES IN (13972,13973,13974,13975), +PARTITION p3494 VALUES IN (13976,13977,13978,13979), +PARTITION p3495 VALUES IN (13980,13981,13982,13983), +PARTITION p3496 VALUES IN (13984,13985,13986,13987), +PARTITION p3497 VALUES IN (13988,13989,13990,13991), +PARTITION p3498 VALUES IN (13992,13993,13994,13995), +PARTITION p3499 VALUES IN (13996,13997,13998,13999), +PARTITION p3500 VALUES IN (14000,14001,14002,14003), +PARTITION p3501 VALUES IN (14004,14005,14006,14007), +PARTITION p3502 VALUES IN (14008,14009,14010,14011), +PARTITION p3503 VALUES IN (14012,14013,14014,14015), +PARTITION p3504 VALUES IN (14016,14017,14018,14019), +PARTITION p3505 VALUES IN (14020,14021,14022,14023), +PARTITION p3506 VALUES IN (14024,14025,14026,14027), +PARTITION p3507 VALUES IN (14028,14029,14030,14031), +PARTITION p3508 VALUES IN (14032,14033,14034,14035), +PARTITION p3509 VALUES IN (14036,14037,14038,14039), +PARTITION p3510 VALUES IN (14040,14041,14042,14043), +PARTITION p3511 VALUES IN (14044,14045,14046,14047), +PARTITION p3512 VALUES IN (14048,14049,14050,14051), +PARTITION p3513 VALUES IN (14052,14053,14054,14055), +PARTITION p3514 VALUES IN (14056,14057,14058,14059), +PARTITION p3515 VALUES IN (14060,14061,14062,14063), +PARTITION p3516 VALUES IN (14064,14065,14066,14067), +PARTITION p3517 VALUES IN (14068,14069,14070,14071), +PARTITION p3518 VALUES IN (14072,14073,14074,14075), +PARTITION p3519 VALUES IN (14076,14077,14078,14079), +PARTITION p3520 VALUES IN (14080,14081,14082,14083), +PARTITION p3521 VALUES IN (14084,14085,14086,14087), +PARTITION p3522 VALUES IN (14088,14089,14090,14091), +PARTITION p3523 VALUES IN (14092,14093,14094,14095), +PARTITION p3524 VALUES IN (14096,14097,14098,14099), +PARTITION p3525 VALUES IN (14100,14101,14102,14103), +PARTITION p3526 VALUES IN (14104,14105,14106,14107), +PARTITION p3527 VALUES IN (14108,14109,14110,14111), +PARTITION p3528 VALUES IN (14112,14113,14114,14115), +PARTITION p3529 VALUES IN (14116,14117,14118,14119), +PARTITION p3530 VALUES IN (14120,14121,14122,14123), +PARTITION p3531 VALUES IN (14124,14125,14126,14127), +PARTITION p3532 VALUES IN (14128,14129,14130,14131), +PARTITION p3533 VALUES IN (14132,14133,14134,14135), +PARTITION p3534 VALUES IN (14136,14137,14138,14139), +PARTITION p3535 VALUES IN (14140,14141,14142,14143), +PARTITION p3536 VALUES IN (14144,14145,14146,14147), +PARTITION p3537 VALUES IN (14148,14149,14150,14151), +PARTITION p3538 VALUES IN (14152,14153,14154,14155), +PARTITION p3539 VALUES IN (14156,14157,14158,14159), +PARTITION p3540 VALUES IN (14160,14161,14162,14163), +PARTITION p3541 VALUES IN (14164,14165,14166,14167), +PARTITION p3542 VALUES IN (14168,14169,14170,14171), +PARTITION p3543 VALUES IN (14172,14173,14174,14175), +PARTITION p3544 VALUES IN (14176,14177,14178,14179), +PARTITION p3545 VALUES IN (14180,14181,14182,14183), +PARTITION p3546 VALUES IN (14184,14185,14186,14187), +PARTITION p3547 VALUES IN (14188,14189,14190,14191), +PARTITION p3548 VALUES IN (14192,14193,14194,14195), +PARTITION p3549 VALUES IN (14196,14197,14198,14199), +PARTITION p3550 VALUES IN (14200,14201,14202,14203), +PARTITION p3551 VALUES IN (14204,14205,14206,14207), +PARTITION p3552 VALUES IN (14208,14209,14210,14211), +PARTITION p3553 VALUES IN (14212,14213,14214,14215), +PARTITION p3554 VALUES IN (14216,14217,14218,14219), +PARTITION p3555 VALUES IN (14220,14221,14222,14223), +PARTITION p3556 VALUES IN (14224,14225,14226,14227), +PARTITION p3557 VALUES IN (14228,14229,14230,14231), +PARTITION p3558 VALUES IN (14232,14233,14234,14235), +PARTITION p3559 VALUES IN (14236,14237,14238,14239), +PARTITION p3560 VALUES IN (14240,14241,14242,14243), +PARTITION p3561 VALUES IN (14244,14245,14246,14247), +PARTITION p3562 VALUES IN (14248,14249,14250,14251), +PARTITION p3563 VALUES IN (14252,14253,14254,14255), +PARTITION p3564 VALUES IN (14256,14257,14258,14259), +PARTITION p3565 VALUES IN (14260,14261,14262,14263), +PARTITION p3566 VALUES IN (14264,14265,14266,14267), +PARTITION p3567 VALUES IN (14268,14269,14270,14271), +PARTITION p3568 VALUES IN (14272,14273,14274,14275), +PARTITION p3569 VALUES IN (14276,14277,14278,14279), +PARTITION p3570 VALUES IN (14280,14281,14282,14283), +PARTITION p3571 VALUES IN (14284,14285,14286,14287), +PARTITION p3572 VALUES IN (14288,14289,14290,14291), +PARTITION p3573 VALUES IN (14292,14293,14294,14295), +PARTITION p3574 VALUES IN (14296,14297,14298,14299), +PARTITION p3575 VALUES IN (14300,14301,14302,14303), +PARTITION p3576 VALUES IN (14304,14305,14306,14307), +PARTITION p3577 VALUES IN (14308,14309,14310,14311), +PARTITION p3578 VALUES IN (14312,14313,14314,14315), +PARTITION p3579 VALUES IN (14316,14317,14318,14319), +PARTITION p3580 VALUES IN (14320,14321,14322,14323), +PARTITION p3581 VALUES IN (14324,14325,14326,14327), +PARTITION p3582 VALUES IN (14328,14329,14330,14331), +PARTITION p3583 VALUES IN (14332,14333,14334,14335), +PARTITION p3584 VALUES IN (14336,14337,14338,14339), +PARTITION p3585 VALUES IN (14340,14341,14342,14343), +PARTITION p3586 VALUES IN (14344,14345,14346,14347), +PARTITION p3587 VALUES IN (14348,14349,14350,14351), +PARTITION p3588 VALUES IN (14352,14353,14354,14355), +PARTITION p3589 VALUES IN (14356,14357,14358,14359), +PARTITION p3590 VALUES IN (14360,14361,14362,14363), +PARTITION p3591 VALUES IN (14364,14365,14366,14367), +PARTITION p3592 VALUES IN (14368,14369,14370,14371), +PARTITION p3593 VALUES IN (14372,14373,14374,14375), +PARTITION p3594 VALUES IN (14376,14377,14378,14379), +PARTITION p3595 VALUES IN (14380,14381,14382,14383), +PARTITION p3596 VALUES IN (14384,14385,14386,14387), +PARTITION p3597 VALUES IN (14388,14389,14390,14391), +PARTITION p3598 VALUES IN (14392,14393,14394,14395), +PARTITION p3599 VALUES IN (14396,14397,14398,14399), +PARTITION p3600 VALUES IN (14400,14401,14402,14403), +PARTITION p3601 VALUES IN (14404,14405,14406,14407), +PARTITION p3602 VALUES IN (14408,14409,14410,14411), +PARTITION p3603 VALUES IN (14412,14413,14414,14415), +PARTITION p3604 VALUES IN (14416,14417,14418,14419), +PARTITION p3605 VALUES IN (14420,14421,14422,14423), +PARTITION p3606 VALUES IN (14424,14425,14426,14427), +PARTITION p3607 VALUES IN (14428,14429,14430,14431), +PARTITION p3608 VALUES IN (14432,14433,14434,14435), +PARTITION p3609 VALUES IN (14436,14437,14438,14439), +PARTITION p3610 VALUES IN (14440,14441,14442,14443), +PARTITION p3611 VALUES IN (14444,14445,14446,14447), +PARTITION p3612 VALUES IN (14448,14449,14450,14451), +PARTITION p3613 VALUES IN (14452,14453,14454,14455), +PARTITION p3614 VALUES IN (14456,14457,14458,14459), +PARTITION p3615 VALUES IN (14460,14461,14462,14463), +PARTITION p3616 VALUES IN (14464,14465,14466,14467), +PARTITION p3617 VALUES IN (14468,14469,14470,14471), +PARTITION p3618 VALUES IN (14472,14473,14474,14475), +PARTITION p3619 VALUES IN (14476,14477,14478,14479), +PARTITION p3620 VALUES IN (14480,14481,14482,14483), +PARTITION p3621 VALUES IN (14484,14485,14486,14487), +PARTITION p3622 VALUES IN (14488,14489,14490,14491), +PARTITION p3623 VALUES IN (14492,14493,14494,14495), +PARTITION p3624 VALUES IN (14496,14497,14498,14499), +PARTITION p3625 VALUES IN (14500,14501,14502,14503), +PARTITION p3626 VALUES IN (14504,14505,14506,14507), +PARTITION p3627 VALUES IN (14508,14509,14510,14511), +PARTITION p3628 VALUES IN (14512,14513,14514,14515), +PARTITION p3629 VALUES IN (14516,14517,14518,14519), +PARTITION p3630 VALUES IN (14520,14521,14522,14523), +PARTITION p3631 VALUES IN (14524,14525,14526,14527), +PARTITION p3632 VALUES IN (14528,14529,14530,14531), +PARTITION p3633 VALUES IN (14532,14533,14534,14535), +PARTITION p3634 VALUES IN (14536,14537,14538,14539), +PARTITION p3635 VALUES IN (14540,14541,14542,14543), +PARTITION p3636 VALUES IN (14544,14545,14546,14547), +PARTITION p3637 VALUES IN (14548,14549,14550,14551), +PARTITION p3638 VALUES IN (14552,14553,14554,14555), +PARTITION p3639 VALUES IN (14556,14557,14558,14559), +PARTITION p3640 VALUES IN (14560,14561,14562,14563), +PARTITION p3641 VALUES IN (14564,14565,14566,14567), +PARTITION p3642 VALUES IN (14568,14569,14570,14571), +PARTITION p3643 VALUES IN (14572,14573,14574,14575), +PARTITION p3644 VALUES IN (14576,14577,14578,14579), +PARTITION p3645 VALUES IN (14580,14581,14582,14583), +PARTITION p3646 VALUES IN (14584,14585,14586,14587), +PARTITION p3647 VALUES IN (14588,14589,14590,14591), +PARTITION p3648 VALUES IN (14592,14593,14594,14595), +PARTITION p3649 VALUES IN (14596,14597,14598,14599), +PARTITION p3650 VALUES IN (14600,14601,14602,14603), +PARTITION p3651 VALUES IN (14604,14605,14606,14607), +PARTITION p3652 VALUES IN (14608,14609,14610,14611), +PARTITION p3653 VALUES IN (14612,14613,14614,14615), +PARTITION p3654 VALUES IN (14616,14617,14618,14619), +PARTITION p3655 VALUES IN (14620,14621,14622,14623), +PARTITION p3656 VALUES IN (14624,14625,14626,14627), +PARTITION p3657 VALUES IN (14628,14629,14630,14631), +PARTITION p3658 VALUES IN (14632,14633,14634,14635), +PARTITION p3659 VALUES IN (14636,14637,14638,14639), +PARTITION p3660 VALUES IN (14640,14641,14642,14643), +PARTITION p3661 VALUES IN (14644,14645,14646,14647), +PARTITION p3662 VALUES IN (14648,14649,14650,14651), +PARTITION p3663 VALUES IN (14652,14653,14654,14655), +PARTITION p3664 VALUES IN (14656,14657,14658,14659), +PARTITION p3665 VALUES IN (14660,14661,14662,14663), +PARTITION p3666 VALUES IN (14664,14665,14666,14667), +PARTITION p3667 VALUES IN (14668,14669,14670,14671), +PARTITION p3668 VALUES IN (14672,14673,14674,14675), +PARTITION p3669 VALUES IN (14676,14677,14678,14679), +PARTITION p3670 VALUES IN (14680,14681,14682,14683), +PARTITION p3671 VALUES IN (14684,14685,14686,14687), +PARTITION p3672 VALUES IN (14688,14689,14690,14691), +PARTITION p3673 VALUES IN (14692,14693,14694,14695), +PARTITION p3674 VALUES IN (14696,14697,14698,14699), +PARTITION p3675 VALUES IN (14700,14701,14702,14703), +PARTITION p3676 VALUES IN (14704,14705,14706,14707), +PARTITION p3677 VALUES IN (14708,14709,14710,14711), +PARTITION p3678 VALUES IN (14712,14713,14714,14715), +PARTITION p3679 VALUES IN (14716,14717,14718,14719), +PARTITION p3680 VALUES IN (14720,14721,14722,14723), +PARTITION p3681 VALUES IN (14724,14725,14726,14727), +PARTITION p3682 VALUES IN (14728,14729,14730,14731), +PARTITION p3683 VALUES IN (14732,14733,14734,14735), +PARTITION p3684 VALUES IN (14736,14737,14738,14739), +PARTITION p3685 VALUES IN (14740,14741,14742,14743), +PARTITION p3686 VALUES IN (14744,14745,14746,14747), +PARTITION p3687 VALUES IN (14748,14749,14750,14751), +PARTITION p3688 VALUES IN (14752,14753,14754,14755), +PARTITION p3689 VALUES IN (14756,14757,14758,14759), +PARTITION p3690 VALUES IN (14760,14761,14762,14763), +PARTITION p3691 VALUES IN (14764,14765,14766,14767), +PARTITION p3692 VALUES IN (14768,14769,14770,14771), +PARTITION p3693 VALUES IN (14772,14773,14774,14775), +PARTITION p3694 VALUES IN (14776,14777,14778,14779), +PARTITION p3695 VALUES IN (14780,14781,14782,14783), +PARTITION p3696 VALUES IN (14784,14785,14786,14787), +PARTITION p3697 VALUES IN (14788,14789,14790,14791), +PARTITION p3698 VALUES IN (14792,14793,14794,14795), +PARTITION p3699 VALUES IN (14796,14797,14798,14799), +PARTITION p3700 VALUES IN (14800,14801,14802,14803), +PARTITION p3701 VALUES IN (14804,14805,14806,14807), +PARTITION p3702 VALUES IN (14808,14809,14810,14811), +PARTITION p3703 VALUES IN (14812,14813,14814,14815), +PARTITION p3704 VALUES IN (14816,14817,14818,14819), +PARTITION p3705 VALUES IN (14820,14821,14822,14823), +PARTITION p3706 VALUES IN (14824,14825,14826,14827), +PARTITION p3707 VALUES IN (14828,14829,14830,14831), +PARTITION p3708 VALUES IN (14832,14833,14834,14835), +PARTITION p3709 VALUES IN (14836,14837,14838,14839), +PARTITION p3710 VALUES IN (14840,14841,14842,14843), +PARTITION p3711 VALUES IN (14844,14845,14846,14847), +PARTITION p3712 VALUES IN (14848,14849,14850,14851), +PARTITION p3713 VALUES IN (14852,14853,14854,14855), +PARTITION p3714 VALUES IN (14856,14857,14858,14859), +PARTITION p3715 VALUES IN (14860,14861,14862,14863), +PARTITION p3716 VALUES IN (14864,14865,14866,14867), +PARTITION p3717 VALUES IN (14868,14869,14870,14871), +PARTITION p3718 VALUES IN (14872,14873,14874,14875), +PARTITION p3719 VALUES IN (14876,14877,14878,14879), +PARTITION p3720 VALUES IN (14880,14881,14882,14883), +PARTITION p3721 VALUES IN (14884,14885,14886,14887), +PARTITION p3722 VALUES IN (14888,14889,14890,14891), +PARTITION p3723 VALUES IN (14892,14893,14894,14895), +PARTITION p3724 VALUES IN (14896,14897,14898,14899), +PARTITION p3725 VALUES IN (14900,14901,14902,14903), +PARTITION p3726 VALUES IN (14904,14905,14906,14907), +PARTITION p3727 VALUES IN (14908,14909,14910,14911), +PARTITION p3728 VALUES IN (14912,14913,14914,14915), +PARTITION p3729 VALUES IN (14916,14917,14918,14919), +PARTITION p3730 VALUES IN (14920,14921,14922,14923), +PARTITION p3731 VALUES IN (14924,14925,14926,14927), +PARTITION p3732 VALUES IN (14928,14929,14930,14931), +PARTITION p3733 VALUES IN (14932,14933,14934,14935), +PARTITION p3734 VALUES IN (14936,14937,14938,14939), +PARTITION p3735 VALUES IN (14940,14941,14942,14943), +PARTITION p3736 VALUES IN (14944,14945,14946,14947), +PARTITION p3737 VALUES IN (14948,14949,14950,14951), +PARTITION p3738 VALUES IN (14952,14953,14954,14955), +PARTITION p3739 VALUES IN (14956,14957,14958,14959), +PARTITION p3740 VALUES IN (14960,14961,14962,14963), +PARTITION p3741 VALUES IN (14964,14965,14966,14967), +PARTITION p3742 VALUES IN (14968,14969,14970,14971), +PARTITION p3743 VALUES IN (14972,14973,14974,14975), +PARTITION p3744 VALUES IN (14976,14977,14978,14979), +PARTITION p3745 VALUES IN (14980,14981,14982,14983), +PARTITION p3746 VALUES IN (14984,14985,14986,14987), +PARTITION p3747 VALUES IN (14988,14989,14990,14991), +PARTITION p3748 VALUES IN (14992,14993,14994,14995), +PARTITION p3749 VALUES IN (14996,14997,14998,14999), +PARTITION p3750 VALUES IN (15000,15001,15002,15003), +PARTITION p3751 VALUES IN (15004,15005,15006,15007), +PARTITION p3752 VALUES IN (15008,15009,15010,15011), +PARTITION p3753 VALUES IN (15012,15013,15014,15015), +PARTITION p3754 VALUES IN (15016,15017,15018,15019), +PARTITION p3755 VALUES IN (15020,15021,15022,15023), +PARTITION p3756 VALUES IN (15024,15025,15026,15027), +PARTITION p3757 VALUES IN (15028,15029,15030,15031), +PARTITION p3758 VALUES IN (15032,15033,15034,15035), +PARTITION p3759 VALUES IN (15036,15037,15038,15039), +PARTITION p3760 VALUES IN (15040,15041,15042,15043), +PARTITION p3761 VALUES IN (15044,15045,15046,15047), +PARTITION p3762 VALUES IN (15048,15049,15050,15051), +PARTITION p3763 VALUES IN (15052,15053,15054,15055), +PARTITION p3764 VALUES IN (15056,15057,15058,15059), +PARTITION p3765 VALUES IN (15060,15061,15062,15063), +PARTITION p3766 VALUES IN (15064,15065,15066,15067), +PARTITION p3767 VALUES IN (15068,15069,15070,15071), +PARTITION p3768 VALUES IN (15072,15073,15074,15075), +PARTITION p3769 VALUES IN (15076,15077,15078,15079), +PARTITION p3770 VALUES IN (15080,15081,15082,15083), +PARTITION p3771 VALUES IN (15084,15085,15086,15087), +PARTITION p3772 VALUES IN (15088,15089,15090,15091), +PARTITION p3773 VALUES IN (15092,15093,15094,15095), +PARTITION p3774 VALUES IN (15096,15097,15098,15099), +PARTITION p3775 VALUES IN (15100,15101,15102,15103), +PARTITION p3776 VALUES IN (15104,15105,15106,15107), +PARTITION p3777 VALUES IN (15108,15109,15110,15111), +PARTITION p3778 VALUES IN (15112,15113,15114,15115), +PARTITION p3779 VALUES IN (15116,15117,15118,15119), +PARTITION p3780 VALUES IN (15120,15121,15122,15123), +PARTITION p3781 VALUES IN (15124,15125,15126,15127), +PARTITION p3782 VALUES IN (15128,15129,15130,15131), +PARTITION p3783 VALUES IN (15132,15133,15134,15135), +PARTITION p3784 VALUES IN (15136,15137,15138,15139), +PARTITION p3785 VALUES IN (15140,15141,15142,15143), +PARTITION p3786 VALUES IN (15144,15145,15146,15147), +PARTITION p3787 VALUES IN (15148,15149,15150,15151), +PARTITION p3788 VALUES IN (15152,15153,15154,15155), +PARTITION p3789 VALUES IN (15156,15157,15158,15159), +PARTITION p3790 VALUES IN (15160,15161,15162,15163), +PARTITION p3791 VALUES IN (15164,15165,15166,15167), +PARTITION p3792 VALUES IN (15168,15169,15170,15171), +PARTITION p3793 VALUES IN (15172,15173,15174,15175), +PARTITION p3794 VALUES IN (15176,15177,15178,15179), +PARTITION p3795 VALUES IN (15180,15181,15182,15183), +PARTITION p3796 VALUES IN (15184,15185,15186,15187), +PARTITION p3797 VALUES IN (15188,15189,15190,15191), +PARTITION p3798 VALUES IN (15192,15193,15194,15195), +PARTITION p3799 VALUES IN (15196,15197,15198,15199), +PARTITION p3800 VALUES IN (15200,15201,15202,15203), +PARTITION p3801 VALUES IN (15204,15205,15206,15207), +PARTITION p3802 VALUES IN (15208,15209,15210,15211), +PARTITION p3803 VALUES IN (15212,15213,15214,15215), +PARTITION p3804 VALUES IN (15216,15217,15218,15219), +PARTITION p3805 VALUES IN (15220,15221,15222,15223), +PARTITION p3806 VALUES IN (15224,15225,15226,15227), +PARTITION p3807 VALUES IN (15228,15229,15230,15231), +PARTITION p3808 VALUES IN (15232,15233,15234,15235), +PARTITION p3809 VALUES IN (15236,15237,15238,15239), +PARTITION p3810 VALUES IN (15240,15241,15242,15243), +PARTITION p3811 VALUES IN (15244,15245,15246,15247), +PARTITION p3812 VALUES IN (15248,15249,15250,15251), +PARTITION p3813 VALUES IN (15252,15253,15254,15255), +PARTITION p3814 VALUES IN (15256,15257,15258,15259), +PARTITION p3815 VALUES IN (15260,15261,15262,15263), +PARTITION p3816 VALUES IN (15264,15265,15266,15267), +PARTITION p3817 VALUES IN (15268,15269,15270,15271), +PARTITION p3818 VALUES IN (15272,15273,15274,15275), +PARTITION p3819 VALUES IN (15276,15277,15278,15279), +PARTITION p3820 VALUES IN (15280,15281,15282,15283), +PARTITION p3821 VALUES IN (15284,15285,15286,15287), +PARTITION p3822 VALUES IN (15288,15289,15290,15291), +PARTITION p3823 VALUES IN (15292,15293,15294,15295), +PARTITION p3824 VALUES IN (15296,15297,15298,15299), +PARTITION p3825 VALUES IN (15300,15301,15302,15303), +PARTITION p3826 VALUES IN (15304,15305,15306,15307), +PARTITION p3827 VALUES IN (15308,15309,15310,15311), +PARTITION p3828 VALUES IN (15312,15313,15314,15315), +PARTITION p3829 VALUES IN (15316,15317,15318,15319), +PARTITION p3830 VALUES IN (15320,15321,15322,15323), +PARTITION p3831 VALUES IN (15324,15325,15326,15327), +PARTITION p3832 VALUES IN (15328,15329,15330,15331), +PARTITION p3833 VALUES IN (15332,15333,15334,15335), +PARTITION p3834 VALUES IN (15336,15337,15338,15339), +PARTITION p3835 VALUES IN (15340,15341,15342,15343), +PARTITION p3836 VALUES IN (15344,15345,15346,15347), +PARTITION p3837 VALUES IN (15348,15349,15350,15351), +PARTITION p3838 VALUES IN (15352,15353,15354,15355), +PARTITION p3839 VALUES IN (15356,15357,15358,15359), +PARTITION p3840 VALUES IN (15360,15361,15362,15363), +PARTITION p3841 VALUES IN (15364,15365,15366,15367), +PARTITION p3842 VALUES IN (15368,15369,15370,15371), +PARTITION p3843 VALUES IN (15372,15373,15374,15375), +PARTITION p3844 VALUES IN (15376,15377,15378,15379), +PARTITION p3845 VALUES IN (15380,15381,15382,15383), +PARTITION p3846 VALUES IN (15384,15385,15386,15387), +PARTITION p3847 VALUES IN (15388,15389,15390,15391), +PARTITION p3848 VALUES IN (15392,15393,15394,15395), +PARTITION p3849 VALUES IN (15396,15397,15398,15399), +PARTITION p3850 VALUES IN (15400,15401,15402,15403), +PARTITION p3851 VALUES IN (15404,15405,15406,15407), +PARTITION p3852 VALUES IN (15408,15409,15410,15411), +PARTITION p3853 VALUES IN (15412,15413,15414,15415), +PARTITION p3854 VALUES IN (15416,15417,15418,15419), +PARTITION p3855 VALUES IN (15420,15421,15422,15423), +PARTITION p3856 VALUES IN (15424,15425,15426,15427), +PARTITION p3857 VALUES IN (15428,15429,15430,15431), +PARTITION p3858 VALUES IN (15432,15433,15434,15435), +PARTITION p3859 VALUES IN (15436,15437,15438,15439), +PARTITION p3860 VALUES IN (15440,15441,15442,15443), +PARTITION p3861 VALUES IN (15444,15445,15446,15447), +PARTITION p3862 VALUES IN (15448,15449,15450,15451), +PARTITION p3863 VALUES IN (15452,15453,15454,15455), +PARTITION p3864 VALUES IN (15456,15457,15458,15459), +PARTITION p3865 VALUES IN (15460,15461,15462,15463), +PARTITION p3866 VALUES IN (15464,15465,15466,15467), +PARTITION p3867 VALUES IN (15468,15469,15470,15471), +PARTITION p3868 VALUES IN (15472,15473,15474,15475), +PARTITION p3869 VALUES IN (15476,15477,15478,15479), +PARTITION p3870 VALUES IN (15480,15481,15482,15483), +PARTITION p3871 VALUES IN (15484,15485,15486,15487), +PARTITION p3872 VALUES IN (15488,15489,15490,15491), +PARTITION p3873 VALUES IN (15492,15493,15494,15495), +PARTITION p3874 VALUES IN (15496,15497,15498,15499), +PARTITION p3875 VALUES IN (15500,15501,15502,15503), +PARTITION p3876 VALUES IN (15504,15505,15506,15507), +PARTITION p3877 VALUES IN (15508,15509,15510,15511), +PARTITION p3878 VALUES IN (15512,15513,15514,15515), +PARTITION p3879 VALUES IN (15516,15517,15518,15519), +PARTITION p3880 VALUES IN (15520,15521,15522,15523), +PARTITION p3881 VALUES IN (15524,15525,15526,15527), +PARTITION p3882 VALUES IN (15528,15529,15530,15531), +PARTITION p3883 VALUES IN (15532,15533,15534,15535), +PARTITION p3884 VALUES IN (15536,15537,15538,15539), +PARTITION p3885 VALUES IN (15540,15541,15542,15543), +PARTITION p3886 VALUES IN (15544,15545,15546,15547), +PARTITION p3887 VALUES IN (15548,15549,15550,15551), +PARTITION p3888 VALUES IN (15552,15553,15554,15555), +PARTITION p3889 VALUES IN (15556,15557,15558,15559), +PARTITION p3890 VALUES IN (15560,15561,15562,15563), +PARTITION p3891 VALUES IN (15564,15565,15566,15567), +PARTITION p3892 VALUES IN (15568,15569,15570,15571), +PARTITION p3893 VALUES IN (15572,15573,15574,15575), +PARTITION p3894 VALUES IN (15576,15577,15578,15579), +PARTITION p3895 VALUES IN (15580,15581,15582,15583), +PARTITION p3896 VALUES IN (15584,15585,15586,15587), +PARTITION p3897 VALUES IN (15588,15589,15590,15591), +PARTITION p3898 VALUES IN (15592,15593,15594,15595), +PARTITION p3899 VALUES IN (15596,15597,15598,15599), +PARTITION p3900 VALUES IN (15600,15601,15602,15603), +PARTITION p3901 VALUES IN (15604,15605,15606,15607), +PARTITION p3902 VALUES IN (15608,15609,15610,15611), +PARTITION p3903 VALUES IN (15612,15613,15614,15615), +PARTITION p3904 VALUES IN (15616,15617,15618,15619), +PARTITION p3905 VALUES IN (15620,15621,15622,15623), +PARTITION p3906 VALUES IN (15624,15625,15626,15627), +PARTITION p3907 VALUES IN (15628,15629,15630,15631), +PARTITION p3908 VALUES IN (15632,15633,15634,15635), +PARTITION p3909 VALUES IN (15636,15637,15638,15639), +PARTITION p3910 VALUES IN (15640,15641,15642,15643), +PARTITION p3911 VALUES IN (15644,15645,15646,15647), +PARTITION p3912 VALUES IN (15648,15649,15650,15651), +PARTITION p3913 VALUES IN (15652,15653,15654,15655), +PARTITION p3914 VALUES IN (15656,15657,15658,15659), +PARTITION p3915 VALUES IN (15660,15661,15662,15663), +PARTITION p3916 VALUES IN (15664,15665,15666,15667), +PARTITION p3917 VALUES IN (15668,15669,15670,15671), +PARTITION p3918 VALUES IN (15672,15673,15674,15675), +PARTITION p3919 VALUES IN (15676,15677,15678,15679), +PARTITION p3920 VALUES IN (15680,15681,15682,15683), +PARTITION p3921 VALUES IN (15684,15685,15686,15687), +PARTITION p3922 VALUES IN (15688,15689,15690,15691), +PARTITION p3923 VALUES IN (15692,15693,15694,15695), +PARTITION p3924 VALUES IN (15696,15697,15698,15699), +PARTITION p3925 VALUES IN (15700,15701,15702,15703), +PARTITION p3926 VALUES IN (15704,15705,15706,15707), +PARTITION p3927 VALUES IN (15708,15709,15710,15711), +PARTITION p3928 VALUES IN (15712,15713,15714,15715), +PARTITION p3929 VALUES IN (15716,15717,15718,15719), +PARTITION p3930 VALUES IN (15720,15721,15722,15723), +PARTITION p3931 VALUES IN (15724,15725,15726,15727), +PARTITION p3932 VALUES IN (15728,15729,15730,15731), +PARTITION p3933 VALUES IN (15732,15733,15734,15735), +PARTITION p3934 VALUES IN (15736,15737,15738,15739), +PARTITION p3935 VALUES IN (15740,15741,15742,15743), +PARTITION p3936 VALUES IN (15744,15745,15746,15747), +PARTITION p3937 VALUES IN (15748,15749,15750,15751), +PARTITION p3938 VALUES IN (15752,15753,15754,15755), +PARTITION p3939 VALUES IN (15756,15757,15758,15759), +PARTITION p3940 VALUES IN (15760,15761,15762,15763), +PARTITION p3941 VALUES IN (15764,15765,15766,15767), +PARTITION p3942 VALUES IN (15768,15769,15770,15771), +PARTITION p3943 VALUES IN (15772,15773,15774,15775), +PARTITION p3944 VALUES IN (15776,15777,15778,15779), +PARTITION p3945 VALUES IN (15780,15781,15782,15783), +PARTITION p3946 VALUES IN (15784,15785,15786,15787), +PARTITION p3947 VALUES IN (15788,15789,15790,15791), +PARTITION p3948 VALUES IN (15792,15793,15794,15795), +PARTITION p3949 VALUES IN (15796,15797,15798,15799), +PARTITION p3950 VALUES IN (15800,15801,15802,15803), +PARTITION p3951 VALUES IN (15804,15805,15806,15807), +PARTITION p3952 VALUES IN (15808,15809,15810,15811), +PARTITION p3953 VALUES IN (15812,15813,15814,15815), +PARTITION p3954 VALUES IN (15816,15817,15818,15819), +PARTITION p3955 VALUES IN (15820,15821,15822,15823), +PARTITION p3956 VALUES IN (15824,15825,15826,15827), +PARTITION p3957 VALUES IN (15828,15829,15830,15831), +PARTITION p3958 VALUES IN (15832,15833,15834,15835), +PARTITION p3959 VALUES IN (15836,15837,15838,15839), +PARTITION p3960 VALUES IN (15840,15841,15842,15843), +PARTITION p3961 VALUES IN (15844,15845,15846,15847), +PARTITION p3962 VALUES IN (15848,15849,15850,15851), +PARTITION p3963 VALUES IN (15852,15853,15854,15855), +PARTITION p3964 VALUES IN (15856,15857,15858,15859), +PARTITION p3965 VALUES IN (15860,15861,15862,15863), +PARTITION p3966 VALUES IN (15864,15865,15866,15867), +PARTITION p3967 VALUES IN (15868,15869,15870,15871), +PARTITION p3968 VALUES IN (15872,15873,15874,15875), +PARTITION p3969 VALUES IN (15876,15877,15878,15879), +PARTITION p3970 VALUES IN (15880,15881,15882,15883), +PARTITION p3971 VALUES IN (15884,15885,15886,15887), +PARTITION p3972 VALUES IN (15888,15889,15890,15891), +PARTITION p3973 VALUES IN (15892,15893,15894,15895), +PARTITION p3974 VALUES IN (15896,15897,15898,15899), +PARTITION p3975 VALUES IN (15900,15901,15902,15903), +PARTITION p3976 VALUES IN (15904,15905,15906,15907), +PARTITION p3977 VALUES IN (15908,15909,15910,15911), +PARTITION p3978 VALUES IN (15912,15913,15914,15915), +PARTITION p3979 VALUES IN (15916,15917,15918,15919), +PARTITION p3980 VALUES IN (15920,15921,15922,15923), +PARTITION p3981 VALUES IN (15924,15925,15926,15927), +PARTITION p3982 VALUES IN (15928,15929,15930,15931), +PARTITION p3983 VALUES IN (15932,15933,15934,15935), +PARTITION p3984 VALUES IN (15936,15937,15938,15939), +PARTITION p3985 VALUES IN (15940,15941,15942,15943), +PARTITION p3986 VALUES IN (15944,15945,15946,15947), +PARTITION p3987 VALUES IN (15948,15949,15950,15951), +PARTITION p3988 VALUES IN (15952,15953,15954,15955), +PARTITION p3989 VALUES IN (15956,15957,15958,15959), +PARTITION p3990 VALUES IN (15960,15961,15962,15963), +PARTITION p3991 VALUES IN (15964,15965,15966,15967), +PARTITION p3992 VALUES IN (15968,15969,15970,15971), +PARTITION p3993 VALUES IN (15972,15973,15974,15975), +PARTITION p3994 VALUES IN (15976,15977,15978,15979), +PARTITION p3995 VALUES IN (15980,15981,15982,15983), +PARTITION p3996 VALUES IN (15984,15985,15986,15987), +PARTITION p3997 VALUES IN (15988,15989,15990,15991), +PARTITION p3998 VALUES IN (15992,15993,15994,15995), +PARTITION p3999 VALUES IN (15996,15997,15998,15999), +PARTITION p4000 VALUES IN (16000,16001,16002,16003), +PARTITION p4001 VALUES IN (16004,16005,16006,16007), +PARTITION p4002 VALUES IN (16008,16009,16010,16011), +PARTITION p4003 VALUES IN (16012,16013,16014,16015), +PARTITION p4004 VALUES IN (16016,16017,16018,16019), +PARTITION p4005 VALUES IN (16020,16021,16022,16023), +PARTITION p4006 VALUES IN (16024,16025,16026,16027), +PARTITION p4007 VALUES IN (16028,16029,16030,16031), +PARTITION p4008 VALUES IN (16032,16033,16034,16035), +PARTITION p4009 VALUES IN (16036,16037,16038,16039), +PARTITION p4010 VALUES IN (16040,16041,16042,16043), +PARTITION p4011 VALUES IN (16044,16045,16046,16047), +PARTITION p4012 VALUES IN (16048,16049,16050,16051), +PARTITION p4013 VALUES IN (16052,16053,16054,16055), +PARTITION p4014 VALUES IN (16056,16057,16058,16059), +PARTITION p4015 VALUES IN (16060,16061,16062,16063), +PARTITION p4016 VALUES IN (16064,16065,16066,16067), +PARTITION p4017 VALUES IN (16068,16069,16070,16071), +PARTITION p4018 VALUES IN (16072,16073,16074,16075), +PARTITION p4019 VALUES IN (16076,16077,16078,16079), +PARTITION p4020 VALUES IN (16080,16081,16082,16083), +PARTITION p4021 VALUES IN (16084,16085,16086,16087), +PARTITION p4022 VALUES IN (16088,16089,16090,16091), +PARTITION p4023 VALUES IN (16092,16093,16094,16095), +PARTITION p4024 VALUES IN (16096,16097,16098,16099), +PARTITION p4025 VALUES IN (16100,16101,16102,16103), +PARTITION p4026 VALUES IN (16104,16105,16106,16107), +PARTITION p4027 VALUES IN (16108,16109,16110,16111), +PARTITION p4028 VALUES IN (16112,16113,16114,16115), +PARTITION p4029 VALUES IN (16116,16117,16118,16119), +PARTITION p4030 VALUES IN (16120,16121,16122,16123), +PARTITION p4031 VALUES IN (16124,16125,16126,16127), +PARTITION p4032 VALUES IN (16128,16129,16130,16131), +PARTITION p4033 VALUES IN (16132,16133,16134,16135), +PARTITION p4034 VALUES IN (16136,16137,16138,16139), +PARTITION p4035 VALUES IN (16140,16141,16142,16143), +PARTITION p4036 VALUES IN (16144,16145,16146,16147), +PARTITION p4037 VALUES IN (16148,16149,16150,16151), +PARTITION p4038 VALUES IN (16152,16153,16154,16155), +PARTITION p4039 VALUES IN (16156,16157,16158,16159), +PARTITION p4040 VALUES IN (16160,16161,16162,16163), +PARTITION p4041 VALUES IN (16164,16165,16166,16167), +PARTITION p4042 VALUES IN (16168,16169,16170,16171), +PARTITION p4043 VALUES IN (16172,16173,16174,16175), +PARTITION p4044 VALUES IN (16176,16177,16178,16179), +PARTITION p4045 VALUES IN (16180,16181,16182,16183), +PARTITION p4046 VALUES IN (16184,16185,16186,16187), +PARTITION p4047 VALUES IN (16188,16189,16190,16191), +PARTITION p4048 VALUES IN (16192,16193,16194,16195), +PARTITION p4049 VALUES IN (16196,16197,16198,16199), +PARTITION p4050 VALUES IN (16200,16201,16202,16203), +PARTITION p4051 VALUES IN (16204,16205,16206,16207), +PARTITION p4052 VALUES IN (16208,16209,16210,16211), +PARTITION p4053 VALUES IN (16212,16213,16214,16215), +PARTITION p4054 VALUES IN (16216,16217,16218,16219), +PARTITION p4055 VALUES IN (16220,16221,16222,16223), +PARTITION p4056 VALUES IN (16224,16225,16226,16227), +PARTITION p4057 VALUES IN (16228,16229,16230,16231), +PARTITION p4058 VALUES IN (16232,16233,16234,16235), +PARTITION p4059 VALUES IN (16236,16237,16238,16239), +PARTITION p4060 VALUES IN (16240,16241,16242,16243), +PARTITION p4061 VALUES IN (16244,16245,16246,16247), +PARTITION p4062 VALUES IN (16248,16249,16250,16251), +PARTITION p4063 VALUES IN (16252,16253,16254,16255), +PARTITION p4064 VALUES IN (16256,16257,16258,16259), +PARTITION p4065 VALUES IN (16260,16261,16262,16263), +PARTITION p4066 VALUES IN (16264,16265,16266,16267), +PARTITION p4067 VALUES IN (16268,16269,16270,16271), +PARTITION p4068 VALUES IN (16272,16273,16274,16275), +PARTITION p4069 VALUES IN (16276,16277,16278,16279), +PARTITION p4070 VALUES IN (16280,16281,16282,16283), +PARTITION p4071 VALUES IN (16284,16285,16286,16287), +PARTITION p4072 VALUES IN (16288,16289,16290,16291), +PARTITION p4073 VALUES IN (16292,16293,16294,16295), +PARTITION p4074 VALUES IN (16296,16297,16298,16299), +PARTITION p4075 VALUES IN (16300,16301,16302,16303), +PARTITION p4076 VALUES IN (16304,16305,16306,16307), +PARTITION p4077 VALUES IN (16308,16309,16310,16311), +PARTITION p4078 VALUES IN (16312,16313,16314,16315), +PARTITION p4079 VALUES IN (16316,16317,16318,16319), +PARTITION p4080 VALUES IN (16320,16321,16322,16323), +PARTITION p4081 VALUES IN (16324,16325,16326,16327), +PARTITION p4082 VALUES IN (16328,16329,16330,16331), +PARTITION p4083 VALUES IN (16332,16333,16334,16335), +PARTITION p4084 VALUES IN (16336,16337,16338,16339), +PARTITION p4085 VALUES IN (16340,16341,16342,16343), +PARTITION p4086 VALUES IN (16344,16345,16346,16347), +PARTITION p4087 VALUES IN (16348,16349,16350,16351), +PARTITION p4088 VALUES IN (16352,16353,16354,16355), +PARTITION p4089 VALUES IN (16356,16357,16358,16359), +PARTITION p4090 VALUES IN (16360,16361,16362,16363), +PARTITION p4091 VALUES IN (16364,16365,16366,16367), +PARTITION p4092 VALUES IN (16368,16369,16370,16371), +PARTITION p4093 VALUES IN (16372,16373,16374,16375), +PARTITION p4094 VALUES IN (16376,16377,16378,16379), +PARTITION p4095 VALUES IN (16380,16381,16382,16383) +); +16383 inserts; +select count(*) from t2; +count(*) +16383 +select count(*) from t2 partition (p0); +count(*) +3 +select count(*) from t2 partition (p10); +count(*) +4 +select count(*) from t2 partition (p100); +count(*) +4 +select count(*) from t2 partition (p1000); +count(*) +4 +select count(*) from t2 partition (p4000); +count(*) +4 +select count(*) from t2 partition (p4095); +count(*) +4 +select * from t2 partition (p0); +a +2 +3 +1 +select * from t2 partition (p10); +a +42 +40 +43 +41 +select * from t2 partition (p100); +a +402 +400 +403 +401 +select * from t2 partition (p1000); +a +4002 +4000 +4003 +4001 +select * from t2 partition (p4000); +a +16002 +16000 +16003 +16001 +select * from t2 partition (p4095); +a +16382 +16380 +16383 +16381 +delete from t2 partition (p4095); +select * from t2 partition (p4095); +a +insert into t2 partition (p4095) values (16382),(16383); +select * from t2 partition (p4095); +a +16382 +16383 +update t2 partition (p4095) set a=16381 where a= 16382; +select * from t2 partition (p4095); +a +16383 +16381 +load data infile 'MYSQL_TMP_DIR/data01' into table t2 partition (p4095) fields terminated by ','; +select * from t2 partition (p4095); +a +16380 +16382 +16383 +16381 +alter table t2 add partition (partition p4096 values in (16384,16385,16386,16387)); +ERROR HY000: Too many partitions (including subpartitions) were defined +drop table t2; diff --git a/mysql-test/suite/tokudb.parts/r-native/partition_max_sub_parts_range_tokudb.result b/mysql-test/suite/tokudb.parts/r-native/partition_max_sub_parts_range_tokudb.result new file mode 100644 index 000000000000..9a6aaef04203 --- /dev/null +++ b/mysql-test/suite/tokudb.parts/r-native/partition_max_sub_parts_range_tokudb.result @@ -0,0 +1,4205 @@ +create table t2 (a int) engine='TokuDB' +partition by range (a) +subpartition by hash (a) +subpartitions 2 ( +PARTITION p0 VALUES LESS THAN (8), +PARTITION p1 VALUES LESS THAN (16), +PARTITION p2 VALUES LESS THAN (24), +PARTITION p3 VALUES LESS THAN (32), +PARTITION p4 VALUES LESS THAN (40), +PARTITION p5 VALUES LESS THAN (48), +PARTITION p6 VALUES LESS THAN (56), +PARTITION p7 VALUES LESS THAN (64), +PARTITION p8 VALUES LESS THAN (72), +PARTITION p9 VALUES LESS THAN (80), +PARTITION p10 VALUES LESS THAN (88), +PARTITION p11 VALUES LESS THAN (96), +PARTITION p12 VALUES LESS THAN (104), +PARTITION p13 VALUES LESS THAN (112), +PARTITION p14 VALUES LESS THAN (120), +PARTITION p15 VALUES LESS THAN (128), +PARTITION p16 VALUES LESS THAN (136), +PARTITION p17 VALUES LESS THAN (144), +PARTITION p18 VALUES LESS THAN (152), +PARTITION p19 VALUES LESS THAN (160), +PARTITION p20 VALUES LESS THAN (168), +PARTITION p21 VALUES LESS THAN (176), +PARTITION p22 VALUES LESS THAN (184), +PARTITION p23 VALUES LESS THAN (192), +PARTITION p24 VALUES LESS THAN (200), +PARTITION p25 VALUES LESS THAN (208), +PARTITION p26 VALUES LESS THAN (216), +PARTITION p27 VALUES LESS THAN (224), +PARTITION p28 VALUES LESS THAN (232), +PARTITION p29 VALUES LESS THAN (240), +PARTITION p30 VALUES LESS THAN (248), +PARTITION p31 VALUES LESS THAN (256), +PARTITION p32 VALUES LESS THAN (264), +PARTITION p33 VALUES LESS THAN (272), +PARTITION p34 VALUES LESS THAN (280), +PARTITION p35 VALUES LESS THAN (288), +PARTITION p36 VALUES LESS THAN (296), +PARTITION p37 VALUES LESS THAN (304), +PARTITION p38 VALUES LESS THAN (312), +PARTITION p39 VALUES LESS THAN (320), +PARTITION p40 VALUES LESS THAN (328), +PARTITION p41 VALUES LESS THAN (336), +PARTITION p42 VALUES LESS THAN (344), +PARTITION p43 VALUES LESS THAN (352), +PARTITION p44 VALUES LESS THAN (360), +PARTITION p45 VALUES LESS THAN (368), +PARTITION p46 VALUES LESS THAN (376), +PARTITION p47 VALUES LESS THAN (384), +PARTITION p48 VALUES LESS THAN (392), +PARTITION p49 VALUES LESS THAN (400), +PARTITION p50 VALUES LESS THAN (408), +PARTITION p51 VALUES LESS THAN (416), +PARTITION p52 VALUES LESS THAN (424), +PARTITION p53 VALUES LESS THAN (432), +PARTITION p54 VALUES LESS THAN (440), +PARTITION p55 VALUES LESS THAN (448), +PARTITION p56 VALUES LESS THAN (456), +PARTITION p57 VALUES LESS THAN (464), +PARTITION p58 VALUES LESS THAN (472), +PARTITION p59 VALUES LESS THAN (480), +PARTITION p60 VALUES LESS THAN (488), +PARTITION p61 VALUES LESS THAN (496), +PARTITION p62 VALUES LESS THAN (504), +PARTITION p63 VALUES LESS THAN (512), +PARTITION p64 VALUES LESS THAN (520), +PARTITION p65 VALUES LESS THAN (528), +PARTITION p66 VALUES LESS THAN (536), +PARTITION p67 VALUES LESS THAN (544), +PARTITION p68 VALUES LESS THAN (552), +PARTITION p69 VALUES LESS THAN (560), +PARTITION p70 VALUES LESS THAN (568), +PARTITION p71 VALUES LESS THAN (576), +PARTITION p72 VALUES LESS THAN (584), +PARTITION p73 VALUES LESS THAN (592), +PARTITION p74 VALUES LESS THAN (600), +PARTITION p75 VALUES LESS THAN (608), +PARTITION p76 VALUES LESS THAN (616), +PARTITION p77 VALUES LESS THAN (624), +PARTITION p78 VALUES LESS THAN (632), +PARTITION p79 VALUES LESS THAN (640), +PARTITION p80 VALUES LESS THAN (648), +PARTITION p81 VALUES LESS THAN (656), +PARTITION p82 VALUES LESS THAN (664), +PARTITION p83 VALUES LESS THAN (672), +PARTITION p84 VALUES LESS THAN (680), +PARTITION p85 VALUES LESS THAN (688), +PARTITION p86 VALUES LESS THAN (696), +PARTITION p87 VALUES LESS THAN (704), +PARTITION p88 VALUES LESS THAN (712), +PARTITION p89 VALUES LESS THAN (720), +PARTITION p90 VALUES LESS THAN (728), +PARTITION p91 VALUES LESS THAN (736), +PARTITION p92 VALUES LESS THAN (744), +PARTITION p93 VALUES LESS THAN (752), +PARTITION p94 VALUES LESS THAN (760), +PARTITION p95 VALUES LESS THAN (768), +PARTITION p96 VALUES LESS THAN (776), +PARTITION p97 VALUES LESS THAN (784), +PARTITION p98 VALUES LESS THAN (792), +PARTITION p99 VALUES LESS THAN (800), +PARTITION p100 VALUES LESS THAN (808), +PARTITION p101 VALUES LESS THAN (816), +PARTITION p102 VALUES LESS THAN (824), +PARTITION p103 VALUES LESS THAN (832), +PARTITION p104 VALUES LESS THAN (840), +PARTITION p105 VALUES LESS THAN (848), +PARTITION p106 VALUES LESS THAN (856), +PARTITION p107 VALUES LESS THAN (864), +PARTITION p108 VALUES LESS THAN (872), +PARTITION p109 VALUES LESS THAN (880), +PARTITION p110 VALUES LESS THAN (888), +PARTITION p111 VALUES LESS THAN (896), +PARTITION p112 VALUES LESS THAN (904), +PARTITION p113 VALUES LESS THAN (912), +PARTITION p114 VALUES LESS THAN (920), +PARTITION p115 VALUES LESS THAN (928), +PARTITION p116 VALUES LESS THAN (936), +PARTITION p117 VALUES LESS THAN (944), +PARTITION p118 VALUES LESS THAN (952), +PARTITION p119 VALUES LESS THAN (960), +PARTITION p120 VALUES LESS THAN (968), +PARTITION p121 VALUES LESS THAN (976), +PARTITION p122 VALUES LESS THAN (984), +PARTITION p123 VALUES LESS THAN (992), +PARTITION p124 VALUES LESS THAN (1000), +PARTITION p125 VALUES LESS THAN (1008), +PARTITION p126 VALUES LESS THAN (1016), +PARTITION p127 VALUES LESS THAN (1024), +PARTITION p128 VALUES LESS THAN (1032), +PARTITION p129 VALUES LESS THAN (1040), +PARTITION p130 VALUES LESS THAN (1048), +PARTITION p131 VALUES LESS THAN (1056), +PARTITION p132 VALUES LESS THAN (1064), +PARTITION p133 VALUES LESS THAN (1072), +PARTITION p134 VALUES LESS THAN (1080), +PARTITION p135 VALUES LESS THAN (1088), +PARTITION p136 VALUES LESS THAN (1096), +PARTITION p137 VALUES LESS THAN (1104), +PARTITION p138 VALUES LESS THAN (1112), +PARTITION p139 VALUES LESS THAN (1120), +PARTITION p140 VALUES LESS THAN (1128), +PARTITION p141 VALUES LESS THAN (1136), +PARTITION p142 VALUES LESS THAN (1144), +PARTITION p143 VALUES LESS THAN (1152), +PARTITION p144 VALUES LESS THAN (1160), +PARTITION p145 VALUES LESS THAN (1168), +PARTITION p146 VALUES LESS THAN (1176), +PARTITION p147 VALUES LESS THAN (1184), +PARTITION p148 VALUES LESS THAN (1192), +PARTITION p149 VALUES LESS THAN (1200), +PARTITION p150 VALUES LESS THAN (1208), +PARTITION p151 VALUES LESS THAN (1216), +PARTITION p152 VALUES LESS THAN (1224), +PARTITION p153 VALUES LESS THAN (1232), +PARTITION p154 VALUES LESS THAN (1240), +PARTITION p155 VALUES LESS THAN (1248), +PARTITION p156 VALUES LESS THAN (1256), +PARTITION p157 VALUES LESS THAN (1264), +PARTITION p158 VALUES LESS THAN (1272), +PARTITION p159 VALUES LESS THAN (1280), +PARTITION p160 VALUES LESS THAN (1288), +PARTITION p161 VALUES LESS THAN (1296), +PARTITION p162 VALUES LESS THAN (1304), +PARTITION p163 VALUES LESS THAN (1312), +PARTITION p164 VALUES LESS THAN (1320), +PARTITION p165 VALUES LESS THAN (1328), +PARTITION p166 VALUES LESS THAN (1336), +PARTITION p167 VALUES LESS THAN (1344), +PARTITION p168 VALUES LESS THAN (1352), +PARTITION p169 VALUES LESS THAN (1360), +PARTITION p170 VALUES LESS THAN (1368), +PARTITION p171 VALUES LESS THAN (1376), +PARTITION p172 VALUES LESS THAN (1384), +PARTITION p173 VALUES LESS THAN (1392), +PARTITION p174 VALUES LESS THAN (1400), +PARTITION p175 VALUES LESS THAN (1408), +PARTITION p176 VALUES LESS THAN (1416), +PARTITION p177 VALUES LESS THAN (1424), +PARTITION p178 VALUES LESS THAN (1432), +PARTITION p179 VALUES LESS THAN (1440), +PARTITION p180 VALUES LESS THAN (1448), +PARTITION p181 VALUES LESS THAN (1456), +PARTITION p182 VALUES LESS THAN (1464), +PARTITION p183 VALUES LESS THAN (1472), +PARTITION p184 VALUES LESS THAN (1480), +PARTITION p185 VALUES LESS THAN (1488), +PARTITION p186 VALUES LESS THAN (1496), +PARTITION p187 VALUES LESS THAN (1504), +PARTITION p188 VALUES LESS THAN (1512), +PARTITION p189 VALUES LESS THAN (1520), +PARTITION p190 VALUES LESS THAN (1528), +PARTITION p191 VALUES LESS THAN (1536), +PARTITION p192 VALUES LESS THAN (1544), +PARTITION p193 VALUES LESS THAN (1552), +PARTITION p194 VALUES LESS THAN (1560), +PARTITION p195 VALUES LESS THAN (1568), +PARTITION p196 VALUES LESS THAN (1576), +PARTITION p197 VALUES LESS THAN (1584), +PARTITION p198 VALUES LESS THAN (1592), +PARTITION p199 VALUES LESS THAN (1600), +PARTITION p200 VALUES LESS THAN (1608), +PARTITION p201 VALUES LESS THAN (1616), +PARTITION p202 VALUES LESS THAN (1624), +PARTITION p203 VALUES LESS THAN (1632), +PARTITION p204 VALUES LESS THAN (1640), +PARTITION p205 VALUES LESS THAN (1648), +PARTITION p206 VALUES LESS THAN (1656), +PARTITION p207 VALUES LESS THAN (1664), +PARTITION p208 VALUES LESS THAN (1672), +PARTITION p209 VALUES LESS THAN (1680), +PARTITION p210 VALUES LESS THAN (1688), +PARTITION p211 VALUES LESS THAN (1696), +PARTITION p212 VALUES LESS THAN (1704), +PARTITION p213 VALUES LESS THAN (1712), +PARTITION p214 VALUES LESS THAN (1720), +PARTITION p215 VALUES LESS THAN (1728), +PARTITION p216 VALUES LESS THAN (1736), +PARTITION p217 VALUES LESS THAN (1744), +PARTITION p218 VALUES LESS THAN (1752), +PARTITION p219 VALUES LESS THAN (1760), +PARTITION p220 VALUES LESS THAN (1768), +PARTITION p221 VALUES LESS THAN (1776), +PARTITION p222 VALUES LESS THAN (1784), +PARTITION p223 VALUES LESS THAN (1792), +PARTITION p224 VALUES LESS THAN (1800), +PARTITION p225 VALUES LESS THAN (1808), +PARTITION p226 VALUES LESS THAN (1816), +PARTITION p227 VALUES LESS THAN (1824), +PARTITION p228 VALUES LESS THAN (1832), +PARTITION p229 VALUES LESS THAN (1840), +PARTITION p230 VALUES LESS THAN (1848), +PARTITION p231 VALUES LESS THAN (1856), +PARTITION p232 VALUES LESS THAN (1864), +PARTITION p233 VALUES LESS THAN (1872), +PARTITION p234 VALUES LESS THAN (1880), +PARTITION p235 VALUES LESS THAN (1888), +PARTITION p236 VALUES LESS THAN (1896), +PARTITION p237 VALUES LESS THAN (1904), +PARTITION p238 VALUES LESS THAN (1912), +PARTITION p239 VALUES LESS THAN (1920), +PARTITION p240 VALUES LESS THAN (1928), +PARTITION p241 VALUES LESS THAN (1936), +PARTITION p242 VALUES LESS THAN (1944), +PARTITION p243 VALUES LESS THAN (1952), +PARTITION p244 VALUES LESS THAN (1960), +PARTITION p245 VALUES LESS THAN (1968), +PARTITION p246 VALUES LESS THAN (1976), +PARTITION p247 VALUES LESS THAN (1984), +PARTITION p248 VALUES LESS THAN (1992), +PARTITION p249 VALUES LESS THAN (2000), +PARTITION p250 VALUES LESS THAN (2008), +PARTITION p251 VALUES LESS THAN (2016), +PARTITION p252 VALUES LESS THAN (2024), +PARTITION p253 VALUES LESS THAN (2032), +PARTITION p254 VALUES LESS THAN (2040), +PARTITION p255 VALUES LESS THAN (2048), +PARTITION p256 VALUES LESS THAN (2056), +PARTITION p257 VALUES LESS THAN (2064), +PARTITION p258 VALUES LESS THAN (2072), +PARTITION p259 VALUES LESS THAN (2080), +PARTITION p260 VALUES LESS THAN (2088), +PARTITION p261 VALUES LESS THAN (2096), +PARTITION p262 VALUES LESS THAN (2104), +PARTITION p263 VALUES LESS THAN (2112), +PARTITION p264 VALUES LESS THAN (2120), +PARTITION p265 VALUES LESS THAN (2128), +PARTITION p266 VALUES LESS THAN (2136), +PARTITION p267 VALUES LESS THAN (2144), +PARTITION p268 VALUES LESS THAN (2152), +PARTITION p269 VALUES LESS THAN (2160), +PARTITION p270 VALUES LESS THAN (2168), +PARTITION p271 VALUES LESS THAN (2176), +PARTITION p272 VALUES LESS THAN (2184), +PARTITION p273 VALUES LESS THAN (2192), +PARTITION p274 VALUES LESS THAN (2200), +PARTITION p275 VALUES LESS THAN (2208), +PARTITION p276 VALUES LESS THAN (2216), +PARTITION p277 VALUES LESS THAN (2224), +PARTITION p278 VALUES LESS THAN (2232), +PARTITION p279 VALUES LESS THAN (2240), +PARTITION p280 VALUES LESS THAN (2248), +PARTITION p281 VALUES LESS THAN (2256), +PARTITION p282 VALUES LESS THAN (2264), +PARTITION p283 VALUES LESS THAN (2272), +PARTITION p284 VALUES LESS THAN (2280), +PARTITION p285 VALUES LESS THAN (2288), +PARTITION p286 VALUES LESS THAN (2296), +PARTITION p287 VALUES LESS THAN (2304), +PARTITION p288 VALUES LESS THAN (2312), +PARTITION p289 VALUES LESS THAN (2320), +PARTITION p290 VALUES LESS THAN (2328), +PARTITION p291 VALUES LESS THAN (2336), +PARTITION p292 VALUES LESS THAN (2344), +PARTITION p293 VALUES LESS THAN (2352), +PARTITION p294 VALUES LESS THAN (2360), +PARTITION p295 VALUES LESS THAN (2368), +PARTITION p296 VALUES LESS THAN (2376), +PARTITION p297 VALUES LESS THAN (2384), +PARTITION p298 VALUES LESS THAN (2392), +PARTITION p299 VALUES LESS THAN (2400), +PARTITION p300 VALUES LESS THAN (2408), +PARTITION p301 VALUES LESS THAN (2416), +PARTITION p302 VALUES LESS THAN (2424), +PARTITION p303 VALUES LESS THAN (2432), +PARTITION p304 VALUES LESS THAN (2440), +PARTITION p305 VALUES LESS THAN (2448), +PARTITION p306 VALUES LESS THAN (2456), +PARTITION p307 VALUES LESS THAN (2464), +PARTITION p308 VALUES LESS THAN (2472), +PARTITION p309 VALUES LESS THAN (2480), +PARTITION p310 VALUES LESS THAN (2488), +PARTITION p311 VALUES LESS THAN (2496), +PARTITION p312 VALUES LESS THAN (2504), +PARTITION p313 VALUES LESS THAN (2512), +PARTITION p314 VALUES LESS THAN (2520), +PARTITION p315 VALUES LESS THAN (2528), +PARTITION p316 VALUES LESS THAN (2536), +PARTITION p317 VALUES LESS THAN (2544), +PARTITION p318 VALUES LESS THAN (2552), +PARTITION p319 VALUES LESS THAN (2560), +PARTITION p320 VALUES LESS THAN (2568), +PARTITION p321 VALUES LESS THAN (2576), +PARTITION p322 VALUES LESS THAN (2584), +PARTITION p323 VALUES LESS THAN (2592), +PARTITION p324 VALUES LESS THAN (2600), +PARTITION p325 VALUES LESS THAN (2608), +PARTITION p326 VALUES LESS THAN (2616), +PARTITION p327 VALUES LESS THAN (2624), +PARTITION p328 VALUES LESS THAN (2632), +PARTITION p329 VALUES LESS THAN (2640), +PARTITION p330 VALUES LESS THAN (2648), +PARTITION p331 VALUES LESS THAN (2656), +PARTITION p332 VALUES LESS THAN (2664), +PARTITION p333 VALUES LESS THAN (2672), +PARTITION p334 VALUES LESS THAN (2680), +PARTITION p335 VALUES LESS THAN (2688), +PARTITION p336 VALUES LESS THAN (2696), +PARTITION p337 VALUES LESS THAN (2704), +PARTITION p338 VALUES LESS THAN (2712), +PARTITION p339 VALUES LESS THAN (2720), +PARTITION p340 VALUES LESS THAN (2728), +PARTITION p341 VALUES LESS THAN (2736), +PARTITION p342 VALUES LESS THAN (2744), +PARTITION p343 VALUES LESS THAN (2752), +PARTITION p344 VALUES LESS THAN (2760), +PARTITION p345 VALUES LESS THAN (2768), +PARTITION p346 VALUES LESS THAN (2776), +PARTITION p347 VALUES LESS THAN (2784), +PARTITION p348 VALUES LESS THAN (2792), +PARTITION p349 VALUES LESS THAN (2800), +PARTITION p350 VALUES LESS THAN (2808), +PARTITION p351 VALUES LESS THAN (2816), +PARTITION p352 VALUES LESS THAN (2824), +PARTITION p353 VALUES LESS THAN (2832), +PARTITION p354 VALUES LESS THAN (2840), +PARTITION p355 VALUES LESS THAN (2848), +PARTITION p356 VALUES LESS THAN (2856), +PARTITION p357 VALUES LESS THAN (2864), +PARTITION p358 VALUES LESS THAN (2872), +PARTITION p359 VALUES LESS THAN (2880), +PARTITION p360 VALUES LESS THAN (2888), +PARTITION p361 VALUES LESS THAN (2896), +PARTITION p362 VALUES LESS THAN (2904), +PARTITION p363 VALUES LESS THAN (2912), +PARTITION p364 VALUES LESS THAN (2920), +PARTITION p365 VALUES LESS THAN (2928), +PARTITION p366 VALUES LESS THAN (2936), +PARTITION p367 VALUES LESS THAN (2944), +PARTITION p368 VALUES LESS THAN (2952), +PARTITION p369 VALUES LESS THAN (2960), +PARTITION p370 VALUES LESS THAN (2968), +PARTITION p371 VALUES LESS THAN (2976), +PARTITION p372 VALUES LESS THAN (2984), +PARTITION p373 VALUES LESS THAN (2992), +PARTITION p374 VALUES LESS THAN (3000), +PARTITION p375 VALUES LESS THAN (3008), +PARTITION p376 VALUES LESS THAN (3016), +PARTITION p377 VALUES LESS THAN (3024), +PARTITION p378 VALUES LESS THAN (3032), +PARTITION p379 VALUES LESS THAN (3040), +PARTITION p380 VALUES LESS THAN (3048), +PARTITION p381 VALUES LESS THAN (3056), +PARTITION p382 VALUES LESS THAN (3064), +PARTITION p383 VALUES LESS THAN (3072), +PARTITION p384 VALUES LESS THAN (3080), +PARTITION p385 VALUES LESS THAN (3088), +PARTITION p386 VALUES LESS THAN (3096), +PARTITION p387 VALUES LESS THAN (3104), +PARTITION p388 VALUES LESS THAN (3112), +PARTITION p389 VALUES LESS THAN (3120), +PARTITION p390 VALUES LESS THAN (3128), +PARTITION p391 VALUES LESS THAN (3136), +PARTITION p392 VALUES LESS THAN (3144), +PARTITION p393 VALUES LESS THAN (3152), +PARTITION p394 VALUES LESS THAN (3160), +PARTITION p395 VALUES LESS THAN (3168), +PARTITION p396 VALUES LESS THAN (3176), +PARTITION p397 VALUES LESS THAN (3184), +PARTITION p398 VALUES LESS THAN (3192), +PARTITION p399 VALUES LESS THAN (3200), +PARTITION p400 VALUES LESS THAN (3208), +PARTITION p401 VALUES LESS THAN (3216), +PARTITION p402 VALUES LESS THAN (3224), +PARTITION p403 VALUES LESS THAN (3232), +PARTITION p404 VALUES LESS THAN (3240), +PARTITION p405 VALUES LESS THAN (3248), +PARTITION p406 VALUES LESS THAN (3256), +PARTITION p407 VALUES LESS THAN (3264), +PARTITION p408 VALUES LESS THAN (3272), +PARTITION p409 VALUES LESS THAN (3280), +PARTITION p410 VALUES LESS THAN (3288), +PARTITION p411 VALUES LESS THAN (3296), +PARTITION p412 VALUES LESS THAN (3304), +PARTITION p413 VALUES LESS THAN (3312), +PARTITION p414 VALUES LESS THAN (3320), +PARTITION p415 VALUES LESS THAN (3328), +PARTITION p416 VALUES LESS THAN (3336), +PARTITION p417 VALUES LESS THAN (3344), +PARTITION p418 VALUES LESS THAN (3352), +PARTITION p419 VALUES LESS THAN (3360), +PARTITION p420 VALUES LESS THAN (3368), +PARTITION p421 VALUES LESS THAN (3376), +PARTITION p422 VALUES LESS THAN (3384), +PARTITION p423 VALUES LESS THAN (3392), +PARTITION p424 VALUES LESS THAN (3400), +PARTITION p425 VALUES LESS THAN (3408), +PARTITION p426 VALUES LESS THAN (3416), +PARTITION p427 VALUES LESS THAN (3424), +PARTITION p428 VALUES LESS THAN (3432), +PARTITION p429 VALUES LESS THAN (3440), +PARTITION p430 VALUES LESS THAN (3448), +PARTITION p431 VALUES LESS THAN (3456), +PARTITION p432 VALUES LESS THAN (3464), +PARTITION p433 VALUES LESS THAN (3472), +PARTITION p434 VALUES LESS THAN (3480), +PARTITION p435 VALUES LESS THAN (3488), +PARTITION p436 VALUES LESS THAN (3496), +PARTITION p437 VALUES LESS THAN (3504), +PARTITION p438 VALUES LESS THAN (3512), +PARTITION p439 VALUES LESS THAN (3520), +PARTITION p440 VALUES LESS THAN (3528), +PARTITION p441 VALUES LESS THAN (3536), +PARTITION p442 VALUES LESS THAN (3544), +PARTITION p443 VALUES LESS THAN (3552), +PARTITION p444 VALUES LESS THAN (3560), +PARTITION p445 VALUES LESS THAN (3568), +PARTITION p446 VALUES LESS THAN (3576), +PARTITION p447 VALUES LESS THAN (3584), +PARTITION p448 VALUES LESS THAN (3592), +PARTITION p449 VALUES LESS THAN (3600), +PARTITION p450 VALUES LESS THAN (3608), +PARTITION p451 VALUES LESS THAN (3616), +PARTITION p452 VALUES LESS THAN (3624), +PARTITION p453 VALUES LESS THAN (3632), +PARTITION p454 VALUES LESS THAN (3640), +PARTITION p455 VALUES LESS THAN (3648), +PARTITION p456 VALUES LESS THAN (3656), +PARTITION p457 VALUES LESS THAN (3664), +PARTITION p458 VALUES LESS THAN (3672), +PARTITION p459 VALUES LESS THAN (3680), +PARTITION p460 VALUES LESS THAN (3688), +PARTITION p461 VALUES LESS THAN (3696), +PARTITION p462 VALUES LESS THAN (3704), +PARTITION p463 VALUES LESS THAN (3712), +PARTITION p464 VALUES LESS THAN (3720), +PARTITION p465 VALUES LESS THAN (3728), +PARTITION p466 VALUES LESS THAN (3736), +PARTITION p467 VALUES LESS THAN (3744), +PARTITION p468 VALUES LESS THAN (3752), +PARTITION p469 VALUES LESS THAN (3760), +PARTITION p470 VALUES LESS THAN (3768), +PARTITION p471 VALUES LESS THAN (3776), +PARTITION p472 VALUES LESS THAN (3784), +PARTITION p473 VALUES LESS THAN (3792), +PARTITION p474 VALUES LESS THAN (3800), +PARTITION p475 VALUES LESS THAN (3808), +PARTITION p476 VALUES LESS THAN (3816), +PARTITION p477 VALUES LESS THAN (3824), +PARTITION p478 VALUES LESS THAN (3832), +PARTITION p479 VALUES LESS THAN (3840), +PARTITION p480 VALUES LESS THAN (3848), +PARTITION p481 VALUES LESS THAN (3856), +PARTITION p482 VALUES LESS THAN (3864), +PARTITION p483 VALUES LESS THAN (3872), +PARTITION p484 VALUES LESS THAN (3880), +PARTITION p485 VALUES LESS THAN (3888), +PARTITION p486 VALUES LESS THAN (3896), +PARTITION p487 VALUES LESS THAN (3904), +PARTITION p488 VALUES LESS THAN (3912), +PARTITION p489 VALUES LESS THAN (3920), +PARTITION p490 VALUES LESS THAN (3928), +PARTITION p491 VALUES LESS THAN (3936), +PARTITION p492 VALUES LESS THAN (3944), +PARTITION p493 VALUES LESS THAN (3952), +PARTITION p494 VALUES LESS THAN (3960), +PARTITION p495 VALUES LESS THAN (3968), +PARTITION p496 VALUES LESS THAN (3976), +PARTITION p497 VALUES LESS THAN (3984), +PARTITION p498 VALUES LESS THAN (3992), +PARTITION p499 VALUES LESS THAN (4000), +PARTITION p500 VALUES LESS THAN (4008), +PARTITION p501 VALUES LESS THAN (4016), +PARTITION p502 VALUES LESS THAN (4024), +PARTITION p503 VALUES LESS THAN (4032), +PARTITION p504 VALUES LESS THAN (4040), +PARTITION p505 VALUES LESS THAN (4048), +PARTITION p506 VALUES LESS THAN (4056), +PARTITION p507 VALUES LESS THAN (4064), +PARTITION p508 VALUES LESS THAN (4072), +PARTITION p509 VALUES LESS THAN (4080), +PARTITION p510 VALUES LESS THAN (4088), +PARTITION p511 VALUES LESS THAN (4096), +PARTITION p512 VALUES LESS THAN (4104), +PARTITION p513 VALUES LESS THAN (4112), +PARTITION p514 VALUES LESS THAN (4120), +PARTITION p515 VALUES LESS THAN (4128), +PARTITION p516 VALUES LESS THAN (4136), +PARTITION p517 VALUES LESS THAN (4144), +PARTITION p518 VALUES LESS THAN (4152), +PARTITION p519 VALUES LESS THAN (4160), +PARTITION p520 VALUES LESS THAN (4168), +PARTITION p521 VALUES LESS THAN (4176), +PARTITION p522 VALUES LESS THAN (4184), +PARTITION p523 VALUES LESS THAN (4192), +PARTITION p524 VALUES LESS THAN (4200), +PARTITION p525 VALUES LESS THAN (4208), +PARTITION p526 VALUES LESS THAN (4216), +PARTITION p527 VALUES LESS THAN (4224), +PARTITION p528 VALUES LESS THAN (4232), +PARTITION p529 VALUES LESS THAN (4240), +PARTITION p530 VALUES LESS THAN (4248), +PARTITION p531 VALUES LESS THAN (4256), +PARTITION p532 VALUES LESS THAN (4264), +PARTITION p533 VALUES LESS THAN (4272), +PARTITION p534 VALUES LESS THAN (4280), +PARTITION p535 VALUES LESS THAN (4288), +PARTITION p536 VALUES LESS THAN (4296), +PARTITION p537 VALUES LESS THAN (4304), +PARTITION p538 VALUES LESS THAN (4312), +PARTITION p539 VALUES LESS THAN (4320), +PARTITION p540 VALUES LESS THAN (4328), +PARTITION p541 VALUES LESS THAN (4336), +PARTITION p542 VALUES LESS THAN (4344), +PARTITION p543 VALUES LESS THAN (4352), +PARTITION p544 VALUES LESS THAN (4360), +PARTITION p545 VALUES LESS THAN (4368), +PARTITION p546 VALUES LESS THAN (4376), +PARTITION p547 VALUES LESS THAN (4384), +PARTITION p548 VALUES LESS THAN (4392), +PARTITION p549 VALUES LESS THAN (4400), +PARTITION p550 VALUES LESS THAN (4408), +PARTITION p551 VALUES LESS THAN (4416), +PARTITION p552 VALUES LESS THAN (4424), +PARTITION p553 VALUES LESS THAN (4432), +PARTITION p554 VALUES LESS THAN (4440), +PARTITION p555 VALUES LESS THAN (4448), +PARTITION p556 VALUES LESS THAN (4456), +PARTITION p557 VALUES LESS THAN (4464), +PARTITION p558 VALUES LESS THAN (4472), +PARTITION p559 VALUES LESS THAN (4480), +PARTITION p560 VALUES LESS THAN (4488), +PARTITION p561 VALUES LESS THAN (4496), +PARTITION p562 VALUES LESS THAN (4504), +PARTITION p563 VALUES LESS THAN (4512), +PARTITION p564 VALUES LESS THAN (4520), +PARTITION p565 VALUES LESS THAN (4528), +PARTITION p566 VALUES LESS THAN (4536), +PARTITION p567 VALUES LESS THAN (4544), +PARTITION p568 VALUES LESS THAN (4552), +PARTITION p569 VALUES LESS THAN (4560), +PARTITION p570 VALUES LESS THAN (4568), +PARTITION p571 VALUES LESS THAN (4576), +PARTITION p572 VALUES LESS THAN (4584), +PARTITION p573 VALUES LESS THAN (4592), +PARTITION p574 VALUES LESS THAN (4600), +PARTITION p575 VALUES LESS THAN (4608), +PARTITION p576 VALUES LESS THAN (4616), +PARTITION p577 VALUES LESS THAN (4624), +PARTITION p578 VALUES LESS THAN (4632), +PARTITION p579 VALUES LESS THAN (4640), +PARTITION p580 VALUES LESS THAN (4648), +PARTITION p581 VALUES LESS THAN (4656), +PARTITION p582 VALUES LESS THAN (4664), +PARTITION p583 VALUES LESS THAN (4672), +PARTITION p584 VALUES LESS THAN (4680), +PARTITION p585 VALUES LESS THAN (4688), +PARTITION p586 VALUES LESS THAN (4696), +PARTITION p587 VALUES LESS THAN (4704), +PARTITION p588 VALUES LESS THAN (4712), +PARTITION p589 VALUES LESS THAN (4720), +PARTITION p590 VALUES LESS THAN (4728), +PARTITION p591 VALUES LESS THAN (4736), +PARTITION p592 VALUES LESS THAN (4744), +PARTITION p593 VALUES LESS THAN (4752), +PARTITION p594 VALUES LESS THAN (4760), +PARTITION p595 VALUES LESS THAN (4768), +PARTITION p596 VALUES LESS THAN (4776), +PARTITION p597 VALUES LESS THAN (4784), +PARTITION p598 VALUES LESS THAN (4792), +PARTITION p599 VALUES LESS THAN (4800), +PARTITION p600 VALUES LESS THAN (4808), +PARTITION p601 VALUES LESS THAN (4816), +PARTITION p602 VALUES LESS THAN (4824), +PARTITION p603 VALUES LESS THAN (4832), +PARTITION p604 VALUES LESS THAN (4840), +PARTITION p605 VALUES LESS THAN (4848), +PARTITION p606 VALUES LESS THAN (4856), +PARTITION p607 VALUES LESS THAN (4864), +PARTITION p608 VALUES LESS THAN (4872), +PARTITION p609 VALUES LESS THAN (4880), +PARTITION p610 VALUES LESS THAN (4888), +PARTITION p611 VALUES LESS THAN (4896), +PARTITION p612 VALUES LESS THAN (4904), +PARTITION p613 VALUES LESS THAN (4912), +PARTITION p614 VALUES LESS THAN (4920), +PARTITION p615 VALUES LESS THAN (4928), +PARTITION p616 VALUES LESS THAN (4936), +PARTITION p617 VALUES LESS THAN (4944), +PARTITION p618 VALUES LESS THAN (4952), +PARTITION p619 VALUES LESS THAN (4960), +PARTITION p620 VALUES LESS THAN (4968), +PARTITION p621 VALUES LESS THAN (4976), +PARTITION p622 VALUES LESS THAN (4984), +PARTITION p623 VALUES LESS THAN (4992), +PARTITION p624 VALUES LESS THAN (5000), +PARTITION p625 VALUES LESS THAN (5008), +PARTITION p626 VALUES LESS THAN (5016), +PARTITION p627 VALUES LESS THAN (5024), +PARTITION p628 VALUES LESS THAN (5032), +PARTITION p629 VALUES LESS THAN (5040), +PARTITION p630 VALUES LESS THAN (5048), +PARTITION p631 VALUES LESS THAN (5056), +PARTITION p632 VALUES LESS THAN (5064), +PARTITION p633 VALUES LESS THAN (5072), +PARTITION p634 VALUES LESS THAN (5080), +PARTITION p635 VALUES LESS THAN (5088), +PARTITION p636 VALUES LESS THAN (5096), +PARTITION p637 VALUES LESS THAN (5104), +PARTITION p638 VALUES LESS THAN (5112), +PARTITION p639 VALUES LESS THAN (5120), +PARTITION p640 VALUES LESS THAN (5128), +PARTITION p641 VALUES LESS THAN (5136), +PARTITION p642 VALUES LESS THAN (5144), +PARTITION p643 VALUES LESS THAN (5152), +PARTITION p644 VALUES LESS THAN (5160), +PARTITION p645 VALUES LESS THAN (5168), +PARTITION p646 VALUES LESS THAN (5176), +PARTITION p647 VALUES LESS THAN (5184), +PARTITION p648 VALUES LESS THAN (5192), +PARTITION p649 VALUES LESS THAN (5200), +PARTITION p650 VALUES LESS THAN (5208), +PARTITION p651 VALUES LESS THAN (5216), +PARTITION p652 VALUES LESS THAN (5224), +PARTITION p653 VALUES LESS THAN (5232), +PARTITION p654 VALUES LESS THAN (5240), +PARTITION p655 VALUES LESS THAN (5248), +PARTITION p656 VALUES LESS THAN (5256), +PARTITION p657 VALUES LESS THAN (5264), +PARTITION p658 VALUES LESS THAN (5272), +PARTITION p659 VALUES LESS THAN (5280), +PARTITION p660 VALUES LESS THAN (5288), +PARTITION p661 VALUES LESS THAN (5296), +PARTITION p662 VALUES LESS THAN (5304), +PARTITION p663 VALUES LESS THAN (5312), +PARTITION p664 VALUES LESS THAN (5320), +PARTITION p665 VALUES LESS THAN (5328), +PARTITION p666 VALUES LESS THAN (5336), +PARTITION p667 VALUES LESS THAN (5344), +PARTITION p668 VALUES LESS THAN (5352), +PARTITION p669 VALUES LESS THAN (5360), +PARTITION p670 VALUES LESS THAN (5368), +PARTITION p671 VALUES LESS THAN (5376), +PARTITION p672 VALUES LESS THAN (5384), +PARTITION p673 VALUES LESS THAN (5392), +PARTITION p674 VALUES LESS THAN (5400), +PARTITION p675 VALUES LESS THAN (5408), +PARTITION p676 VALUES LESS THAN (5416), +PARTITION p677 VALUES LESS THAN (5424), +PARTITION p678 VALUES LESS THAN (5432), +PARTITION p679 VALUES LESS THAN (5440), +PARTITION p680 VALUES LESS THAN (5448), +PARTITION p681 VALUES LESS THAN (5456), +PARTITION p682 VALUES LESS THAN (5464), +PARTITION p683 VALUES LESS THAN (5472), +PARTITION p684 VALUES LESS THAN (5480), +PARTITION p685 VALUES LESS THAN (5488), +PARTITION p686 VALUES LESS THAN (5496), +PARTITION p687 VALUES LESS THAN (5504), +PARTITION p688 VALUES LESS THAN (5512), +PARTITION p689 VALUES LESS THAN (5520), +PARTITION p690 VALUES LESS THAN (5528), +PARTITION p691 VALUES LESS THAN (5536), +PARTITION p692 VALUES LESS THAN (5544), +PARTITION p693 VALUES LESS THAN (5552), +PARTITION p694 VALUES LESS THAN (5560), +PARTITION p695 VALUES LESS THAN (5568), +PARTITION p696 VALUES LESS THAN (5576), +PARTITION p697 VALUES LESS THAN (5584), +PARTITION p698 VALUES LESS THAN (5592), +PARTITION p699 VALUES LESS THAN (5600), +PARTITION p700 VALUES LESS THAN (5608), +PARTITION p701 VALUES LESS THAN (5616), +PARTITION p702 VALUES LESS THAN (5624), +PARTITION p703 VALUES LESS THAN (5632), +PARTITION p704 VALUES LESS THAN (5640), +PARTITION p705 VALUES LESS THAN (5648), +PARTITION p706 VALUES LESS THAN (5656), +PARTITION p707 VALUES LESS THAN (5664), +PARTITION p708 VALUES LESS THAN (5672), +PARTITION p709 VALUES LESS THAN (5680), +PARTITION p710 VALUES LESS THAN (5688), +PARTITION p711 VALUES LESS THAN (5696), +PARTITION p712 VALUES LESS THAN (5704), +PARTITION p713 VALUES LESS THAN (5712), +PARTITION p714 VALUES LESS THAN (5720), +PARTITION p715 VALUES LESS THAN (5728), +PARTITION p716 VALUES LESS THAN (5736), +PARTITION p717 VALUES LESS THAN (5744), +PARTITION p718 VALUES LESS THAN (5752), +PARTITION p719 VALUES LESS THAN (5760), +PARTITION p720 VALUES LESS THAN (5768), +PARTITION p721 VALUES LESS THAN (5776), +PARTITION p722 VALUES LESS THAN (5784), +PARTITION p723 VALUES LESS THAN (5792), +PARTITION p724 VALUES LESS THAN (5800), +PARTITION p725 VALUES LESS THAN (5808), +PARTITION p726 VALUES LESS THAN (5816), +PARTITION p727 VALUES LESS THAN (5824), +PARTITION p728 VALUES LESS THAN (5832), +PARTITION p729 VALUES LESS THAN (5840), +PARTITION p730 VALUES LESS THAN (5848), +PARTITION p731 VALUES LESS THAN (5856), +PARTITION p732 VALUES LESS THAN (5864), +PARTITION p733 VALUES LESS THAN (5872), +PARTITION p734 VALUES LESS THAN (5880), +PARTITION p735 VALUES LESS THAN (5888), +PARTITION p736 VALUES LESS THAN (5896), +PARTITION p737 VALUES LESS THAN (5904), +PARTITION p738 VALUES LESS THAN (5912), +PARTITION p739 VALUES LESS THAN (5920), +PARTITION p740 VALUES LESS THAN (5928), +PARTITION p741 VALUES LESS THAN (5936), +PARTITION p742 VALUES LESS THAN (5944), +PARTITION p743 VALUES LESS THAN (5952), +PARTITION p744 VALUES LESS THAN (5960), +PARTITION p745 VALUES LESS THAN (5968), +PARTITION p746 VALUES LESS THAN (5976), +PARTITION p747 VALUES LESS THAN (5984), +PARTITION p748 VALUES LESS THAN (5992), +PARTITION p749 VALUES LESS THAN (6000), +PARTITION p750 VALUES LESS THAN (6008), +PARTITION p751 VALUES LESS THAN (6016), +PARTITION p752 VALUES LESS THAN (6024), +PARTITION p753 VALUES LESS THAN (6032), +PARTITION p754 VALUES LESS THAN (6040), +PARTITION p755 VALUES LESS THAN (6048), +PARTITION p756 VALUES LESS THAN (6056), +PARTITION p757 VALUES LESS THAN (6064), +PARTITION p758 VALUES LESS THAN (6072), +PARTITION p759 VALUES LESS THAN (6080), +PARTITION p760 VALUES LESS THAN (6088), +PARTITION p761 VALUES LESS THAN (6096), +PARTITION p762 VALUES LESS THAN (6104), +PARTITION p763 VALUES LESS THAN (6112), +PARTITION p764 VALUES LESS THAN (6120), +PARTITION p765 VALUES LESS THAN (6128), +PARTITION p766 VALUES LESS THAN (6136), +PARTITION p767 VALUES LESS THAN (6144), +PARTITION p768 VALUES LESS THAN (6152), +PARTITION p769 VALUES LESS THAN (6160), +PARTITION p770 VALUES LESS THAN (6168), +PARTITION p771 VALUES LESS THAN (6176), +PARTITION p772 VALUES LESS THAN (6184), +PARTITION p773 VALUES LESS THAN (6192), +PARTITION p774 VALUES LESS THAN (6200), +PARTITION p775 VALUES LESS THAN (6208), +PARTITION p776 VALUES LESS THAN (6216), +PARTITION p777 VALUES LESS THAN (6224), +PARTITION p778 VALUES LESS THAN (6232), +PARTITION p779 VALUES LESS THAN (6240), +PARTITION p780 VALUES LESS THAN (6248), +PARTITION p781 VALUES LESS THAN (6256), +PARTITION p782 VALUES LESS THAN (6264), +PARTITION p783 VALUES LESS THAN (6272), +PARTITION p784 VALUES LESS THAN (6280), +PARTITION p785 VALUES LESS THAN (6288), +PARTITION p786 VALUES LESS THAN (6296), +PARTITION p787 VALUES LESS THAN (6304), +PARTITION p788 VALUES LESS THAN (6312), +PARTITION p789 VALUES LESS THAN (6320), +PARTITION p790 VALUES LESS THAN (6328), +PARTITION p791 VALUES LESS THAN (6336), +PARTITION p792 VALUES LESS THAN (6344), +PARTITION p793 VALUES LESS THAN (6352), +PARTITION p794 VALUES LESS THAN (6360), +PARTITION p795 VALUES LESS THAN (6368), +PARTITION p796 VALUES LESS THAN (6376), +PARTITION p797 VALUES LESS THAN (6384), +PARTITION p798 VALUES LESS THAN (6392), +PARTITION p799 VALUES LESS THAN (6400), +PARTITION p800 VALUES LESS THAN (6408), +PARTITION p801 VALUES LESS THAN (6416), +PARTITION p802 VALUES LESS THAN (6424), +PARTITION p803 VALUES LESS THAN (6432), +PARTITION p804 VALUES LESS THAN (6440), +PARTITION p805 VALUES LESS THAN (6448), +PARTITION p806 VALUES LESS THAN (6456), +PARTITION p807 VALUES LESS THAN (6464), +PARTITION p808 VALUES LESS THAN (6472), +PARTITION p809 VALUES LESS THAN (6480), +PARTITION p810 VALUES LESS THAN (6488), +PARTITION p811 VALUES LESS THAN (6496), +PARTITION p812 VALUES LESS THAN (6504), +PARTITION p813 VALUES LESS THAN (6512), +PARTITION p814 VALUES LESS THAN (6520), +PARTITION p815 VALUES LESS THAN (6528), +PARTITION p816 VALUES LESS THAN (6536), +PARTITION p817 VALUES LESS THAN (6544), +PARTITION p818 VALUES LESS THAN (6552), +PARTITION p819 VALUES LESS THAN (6560), +PARTITION p820 VALUES LESS THAN (6568), +PARTITION p821 VALUES LESS THAN (6576), +PARTITION p822 VALUES LESS THAN (6584), +PARTITION p823 VALUES LESS THAN (6592), +PARTITION p824 VALUES LESS THAN (6600), +PARTITION p825 VALUES LESS THAN (6608), +PARTITION p826 VALUES LESS THAN (6616), +PARTITION p827 VALUES LESS THAN (6624), +PARTITION p828 VALUES LESS THAN (6632), +PARTITION p829 VALUES LESS THAN (6640), +PARTITION p830 VALUES LESS THAN (6648), +PARTITION p831 VALUES LESS THAN (6656), +PARTITION p832 VALUES LESS THAN (6664), +PARTITION p833 VALUES LESS THAN (6672), +PARTITION p834 VALUES LESS THAN (6680), +PARTITION p835 VALUES LESS THAN (6688), +PARTITION p836 VALUES LESS THAN (6696), +PARTITION p837 VALUES LESS THAN (6704), +PARTITION p838 VALUES LESS THAN (6712), +PARTITION p839 VALUES LESS THAN (6720), +PARTITION p840 VALUES LESS THAN (6728), +PARTITION p841 VALUES LESS THAN (6736), +PARTITION p842 VALUES LESS THAN (6744), +PARTITION p843 VALUES LESS THAN (6752), +PARTITION p844 VALUES LESS THAN (6760), +PARTITION p845 VALUES LESS THAN (6768), +PARTITION p846 VALUES LESS THAN (6776), +PARTITION p847 VALUES LESS THAN (6784), +PARTITION p848 VALUES LESS THAN (6792), +PARTITION p849 VALUES LESS THAN (6800), +PARTITION p850 VALUES LESS THAN (6808), +PARTITION p851 VALUES LESS THAN (6816), +PARTITION p852 VALUES LESS THAN (6824), +PARTITION p853 VALUES LESS THAN (6832), +PARTITION p854 VALUES LESS THAN (6840), +PARTITION p855 VALUES LESS THAN (6848), +PARTITION p856 VALUES LESS THAN (6856), +PARTITION p857 VALUES LESS THAN (6864), +PARTITION p858 VALUES LESS THAN (6872), +PARTITION p859 VALUES LESS THAN (6880), +PARTITION p860 VALUES LESS THAN (6888), +PARTITION p861 VALUES LESS THAN (6896), +PARTITION p862 VALUES LESS THAN (6904), +PARTITION p863 VALUES LESS THAN (6912), +PARTITION p864 VALUES LESS THAN (6920), +PARTITION p865 VALUES LESS THAN (6928), +PARTITION p866 VALUES LESS THAN (6936), +PARTITION p867 VALUES LESS THAN (6944), +PARTITION p868 VALUES LESS THAN (6952), +PARTITION p869 VALUES LESS THAN (6960), +PARTITION p870 VALUES LESS THAN (6968), +PARTITION p871 VALUES LESS THAN (6976), +PARTITION p872 VALUES LESS THAN (6984), +PARTITION p873 VALUES LESS THAN (6992), +PARTITION p874 VALUES LESS THAN (7000), +PARTITION p875 VALUES LESS THAN (7008), +PARTITION p876 VALUES LESS THAN (7016), +PARTITION p877 VALUES LESS THAN (7024), +PARTITION p878 VALUES LESS THAN (7032), +PARTITION p879 VALUES LESS THAN (7040), +PARTITION p880 VALUES LESS THAN (7048), +PARTITION p881 VALUES LESS THAN (7056), +PARTITION p882 VALUES LESS THAN (7064), +PARTITION p883 VALUES LESS THAN (7072), +PARTITION p884 VALUES LESS THAN (7080), +PARTITION p885 VALUES LESS THAN (7088), +PARTITION p886 VALUES LESS THAN (7096), +PARTITION p887 VALUES LESS THAN (7104), +PARTITION p888 VALUES LESS THAN (7112), +PARTITION p889 VALUES LESS THAN (7120), +PARTITION p890 VALUES LESS THAN (7128), +PARTITION p891 VALUES LESS THAN (7136), +PARTITION p892 VALUES LESS THAN (7144), +PARTITION p893 VALUES LESS THAN (7152), +PARTITION p894 VALUES LESS THAN (7160), +PARTITION p895 VALUES LESS THAN (7168), +PARTITION p896 VALUES LESS THAN (7176), +PARTITION p897 VALUES LESS THAN (7184), +PARTITION p898 VALUES LESS THAN (7192), +PARTITION p899 VALUES LESS THAN (7200), +PARTITION p900 VALUES LESS THAN (7208), +PARTITION p901 VALUES LESS THAN (7216), +PARTITION p902 VALUES LESS THAN (7224), +PARTITION p903 VALUES LESS THAN (7232), +PARTITION p904 VALUES LESS THAN (7240), +PARTITION p905 VALUES LESS THAN (7248), +PARTITION p906 VALUES LESS THAN (7256), +PARTITION p907 VALUES LESS THAN (7264), +PARTITION p908 VALUES LESS THAN (7272), +PARTITION p909 VALUES LESS THAN (7280), +PARTITION p910 VALUES LESS THAN (7288), +PARTITION p911 VALUES LESS THAN (7296), +PARTITION p912 VALUES LESS THAN (7304), +PARTITION p913 VALUES LESS THAN (7312), +PARTITION p914 VALUES LESS THAN (7320), +PARTITION p915 VALUES LESS THAN (7328), +PARTITION p916 VALUES LESS THAN (7336), +PARTITION p917 VALUES LESS THAN (7344), +PARTITION p918 VALUES LESS THAN (7352), +PARTITION p919 VALUES LESS THAN (7360), +PARTITION p920 VALUES LESS THAN (7368), +PARTITION p921 VALUES LESS THAN (7376), +PARTITION p922 VALUES LESS THAN (7384), +PARTITION p923 VALUES LESS THAN (7392), +PARTITION p924 VALUES LESS THAN (7400), +PARTITION p925 VALUES LESS THAN (7408), +PARTITION p926 VALUES LESS THAN (7416), +PARTITION p927 VALUES LESS THAN (7424), +PARTITION p928 VALUES LESS THAN (7432), +PARTITION p929 VALUES LESS THAN (7440), +PARTITION p930 VALUES LESS THAN (7448), +PARTITION p931 VALUES LESS THAN (7456), +PARTITION p932 VALUES LESS THAN (7464), +PARTITION p933 VALUES LESS THAN (7472), +PARTITION p934 VALUES LESS THAN (7480), +PARTITION p935 VALUES LESS THAN (7488), +PARTITION p936 VALUES LESS THAN (7496), +PARTITION p937 VALUES LESS THAN (7504), +PARTITION p938 VALUES LESS THAN (7512), +PARTITION p939 VALUES LESS THAN (7520), +PARTITION p940 VALUES LESS THAN (7528), +PARTITION p941 VALUES LESS THAN (7536), +PARTITION p942 VALUES LESS THAN (7544), +PARTITION p943 VALUES LESS THAN (7552), +PARTITION p944 VALUES LESS THAN (7560), +PARTITION p945 VALUES LESS THAN (7568), +PARTITION p946 VALUES LESS THAN (7576), +PARTITION p947 VALUES LESS THAN (7584), +PARTITION p948 VALUES LESS THAN (7592), +PARTITION p949 VALUES LESS THAN (7600), +PARTITION p950 VALUES LESS THAN (7608), +PARTITION p951 VALUES LESS THAN (7616), +PARTITION p952 VALUES LESS THAN (7624), +PARTITION p953 VALUES LESS THAN (7632), +PARTITION p954 VALUES LESS THAN (7640), +PARTITION p955 VALUES LESS THAN (7648), +PARTITION p956 VALUES LESS THAN (7656), +PARTITION p957 VALUES LESS THAN (7664), +PARTITION p958 VALUES LESS THAN (7672), +PARTITION p959 VALUES LESS THAN (7680), +PARTITION p960 VALUES LESS THAN (7688), +PARTITION p961 VALUES LESS THAN (7696), +PARTITION p962 VALUES LESS THAN (7704), +PARTITION p963 VALUES LESS THAN (7712), +PARTITION p964 VALUES LESS THAN (7720), +PARTITION p965 VALUES LESS THAN (7728), +PARTITION p966 VALUES LESS THAN (7736), +PARTITION p967 VALUES LESS THAN (7744), +PARTITION p968 VALUES LESS THAN (7752), +PARTITION p969 VALUES LESS THAN (7760), +PARTITION p970 VALUES LESS THAN (7768), +PARTITION p971 VALUES LESS THAN (7776), +PARTITION p972 VALUES LESS THAN (7784), +PARTITION p973 VALUES LESS THAN (7792), +PARTITION p974 VALUES LESS THAN (7800), +PARTITION p975 VALUES LESS THAN (7808), +PARTITION p976 VALUES LESS THAN (7816), +PARTITION p977 VALUES LESS THAN (7824), +PARTITION p978 VALUES LESS THAN (7832), +PARTITION p979 VALUES LESS THAN (7840), +PARTITION p980 VALUES LESS THAN (7848), +PARTITION p981 VALUES LESS THAN (7856), +PARTITION p982 VALUES LESS THAN (7864), +PARTITION p983 VALUES LESS THAN (7872), +PARTITION p984 VALUES LESS THAN (7880), +PARTITION p985 VALUES LESS THAN (7888), +PARTITION p986 VALUES LESS THAN (7896), +PARTITION p987 VALUES LESS THAN (7904), +PARTITION p988 VALUES LESS THAN (7912), +PARTITION p989 VALUES LESS THAN (7920), +PARTITION p990 VALUES LESS THAN (7928), +PARTITION p991 VALUES LESS THAN (7936), +PARTITION p992 VALUES LESS THAN (7944), +PARTITION p993 VALUES LESS THAN (7952), +PARTITION p994 VALUES LESS THAN (7960), +PARTITION p995 VALUES LESS THAN (7968), +PARTITION p996 VALUES LESS THAN (7976), +PARTITION p997 VALUES LESS THAN (7984), +PARTITION p998 VALUES LESS THAN (7992), +PARTITION p999 VALUES LESS THAN (8000), +PARTITION p1000 VALUES LESS THAN (8008), +PARTITION p1001 VALUES LESS THAN (8016), +PARTITION p1002 VALUES LESS THAN (8024), +PARTITION p1003 VALUES LESS THAN (8032), +PARTITION p1004 VALUES LESS THAN (8040), +PARTITION p1005 VALUES LESS THAN (8048), +PARTITION p1006 VALUES LESS THAN (8056), +PARTITION p1007 VALUES LESS THAN (8064), +PARTITION p1008 VALUES LESS THAN (8072), +PARTITION p1009 VALUES LESS THAN (8080), +PARTITION p1010 VALUES LESS THAN (8088), +PARTITION p1011 VALUES LESS THAN (8096), +PARTITION p1012 VALUES LESS THAN (8104), +PARTITION p1013 VALUES LESS THAN (8112), +PARTITION p1014 VALUES LESS THAN (8120), +PARTITION p1015 VALUES LESS THAN (8128), +PARTITION p1016 VALUES LESS THAN (8136), +PARTITION p1017 VALUES LESS THAN (8144), +PARTITION p1018 VALUES LESS THAN (8152), +PARTITION p1019 VALUES LESS THAN (8160), +PARTITION p1020 VALUES LESS THAN (8168), +PARTITION p1021 VALUES LESS THAN (8176), +PARTITION p1022 VALUES LESS THAN (8184), +PARTITION p1023 VALUES LESS THAN (8192), +PARTITION p1024 VALUES LESS THAN (8200), +PARTITION p1025 VALUES LESS THAN (8208), +PARTITION p1026 VALUES LESS THAN (8216), +PARTITION p1027 VALUES LESS THAN (8224), +PARTITION p1028 VALUES LESS THAN (8232), +PARTITION p1029 VALUES LESS THAN (8240), +PARTITION p1030 VALUES LESS THAN (8248), +PARTITION p1031 VALUES LESS THAN (8256), +PARTITION p1032 VALUES LESS THAN (8264), +PARTITION p1033 VALUES LESS THAN (8272), +PARTITION p1034 VALUES LESS THAN (8280), +PARTITION p1035 VALUES LESS THAN (8288), +PARTITION p1036 VALUES LESS THAN (8296), +PARTITION p1037 VALUES LESS THAN (8304), +PARTITION p1038 VALUES LESS THAN (8312), +PARTITION p1039 VALUES LESS THAN (8320), +PARTITION p1040 VALUES LESS THAN (8328), +PARTITION p1041 VALUES LESS THAN (8336), +PARTITION p1042 VALUES LESS THAN (8344), +PARTITION p1043 VALUES LESS THAN (8352), +PARTITION p1044 VALUES LESS THAN (8360), +PARTITION p1045 VALUES LESS THAN (8368), +PARTITION p1046 VALUES LESS THAN (8376), +PARTITION p1047 VALUES LESS THAN (8384), +PARTITION p1048 VALUES LESS THAN (8392), +PARTITION p1049 VALUES LESS THAN (8400), +PARTITION p1050 VALUES LESS THAN (8408), +PARTITION p1051 VALUES LESS THAN (8416), +PARTITION p1052 VALUES LESS THAN (8424), +PARTITION p1053 VALUES LESS THAN (8432), +PARTITION p1054 VALUES LESS THAN (8440), +PARTITION p1055 VALUES LESS THAN (8448), +PARTITION p1056 VALUES LESS THAN (8456), +PARTITION p1057 VALUES LESS THAN (8464), +PARTITION p1058 VALUES LESS THAN (8472), +PARTITION p1059 VALUES LESS THAN (8480), +PARTITION p1060 VALUES LESS THAN (8488), +PARTITION p1061 VALUES LESS THAN (8496), +PARTITION p1062 VALUES LESS THAN (8504), +PARTITION p1063 VALUES LESS THAN (8512), +PARTITION p1064 VALUES LESS THAN (8520), +PARTITION p1065 VALUES LESS THAN (8528), +PARTITION p1066 VALUES LESS THAN (8536), +PARTITION p1067 VALUES LESS THAN (8544), +PARTITION p1068 VALUES LESS THAN (8552), +PARTITION p1069 VALUES LESS THAN (8560), +PARTITION p1070 VALUES LESS THAN (8568), +PARTITION p1071 VALUES LESS THAN (8576), +PARTITION p1072 VALUES LESS THAN (8584), +PARTITION p1073 VALUES LESS THAN (8592), +PARTITION p1074 VALUES LESS THAN (8600), +PARTITION p1075 VALUES LESS THAN (8608), +PARTITION p1076 VALUES LESS THAN (8616), +PARTITION p1077 VALUES LESS THAN (8624), +PARTITION p1078 VALUES LESS THAN (8632), +PARTITION p1079 VALUES LESS THAN (8640), +PARTITION p1080 VALUES LESS THAN (8648), +PARTITION p1081 VALUES LESS THAN (8656), +PARTITION p1082 VALUES LESS THAN (8664), +PARTITION p1083 VALUES LESS THAN (8672), +PARTITION p1084 VALUES LESS THAN (8680), +PARTITION p1085 VALUES LESS THAN (8688), +PARTITION p1086 VALUES LESS THAN (8696), +PARTITION p1087 VALUES LESS THAN (8704), +PARTITION p1088 VALUES LESS THAN (8712), +PARTITION p1089 VALUES LESS THAN (8720), +PARTITION p1090 VALUES LESS THAN (8728), +PARTITION p1091 VALUES LESS THAN (8736), +PARTITION p1092 VALUES LESS THAN (8744), +PARTITION p1093 VALUES LESS THAN (8752), +PARTITION p1094 VALUES LESS THAN (8760), +PARTITION p1095 VALUES LESS THAN (8768), +PARTITION p1096 VALUES LESS THAN (8776), +PARTITION p1097 VALUES LESS THAN (8784), +PARTITION p1098 VALUES LESS THAN (8792), +PARTITION p1099 VALUES LESS THAN (8800), +PARTITION p1100 VALUES LESS THAN (8808), +PARTITION p1101 VALUES LESS THAN (8816), +PARTITION p1102 VALUES LESS THAN (8824), +PARTITION p1103 VALUES LESS THAN (8832), +PARTITION p1104 VALUES LESS THAN (8840), +PARTITION p1105 VALUES LESS THAN (8848), +PARTITION p1106 VALUES LESS THAN (8856), +PARTITION p1107 VALUES LESS THAN (8864), +PARTITION p1108 VALUES LESS THAN (8872), +PARTITION p1109 VALUES LESS THAN (8880), +PARTITION p1110 VALUES LESS THAN (8888), +PARTITION p1111 VALUES LESS THAN (8896), +PARTITION p1112 VALUES LESS THAN (8904), +PARTITION p1113 VALUES LESS THAN (8912), +PARTITION p1114 VALUES LESS THAN (8920), +PARTITION p1115 VALUES LESS THAN (8928), +PARTITION p1116 VALUES LESS THAN (8936), +PARTITION p1117 VALUES LESS THAN (8944), +PARTITION p1118 VALUES LESS THAN (8952), +PARTITION p1119 VALUES LESS THAN (8960), +PARTITION p1120 VALUES LESS THAN (8968), +PARTITION p1121 VALUES LESS THAN (8976), +PARTITION p1122 VALUES LESS THAN (8984), +PARTITION p1123 VALUES LESS THAN (8992), +PARTITION p1124 VALUES LESS THAN (9000), +PARTITION p1125 VALUES LESS THAN (9008), +PARTITION p1126 VALUES LESS THAN (9016), +PARTITION p1127 VALUES LESS THAN (9024), +PARTITION p1128 VALUES LESS THAN (9032), +PARTITION p1129 VALUES LESS THAN (9040), +PARTITION p1130 VALUES LESS THAN (9048), +PARTITION p1131 VALUES LESS THAN (9056), +PARTITION p1132 VALUES LESS THAN (9064), +PARTITION p1133 VALUES LESS THAN (9072), +PARTITION p1134 VALUES LESS THAN (9080), +PARTITION p1135 VALUES LESS THAN (9088), +PARTITION p1136 VALUES LESS THAN (9096), +PARTITION p1137 VALUES LESS THAN (9104), +PARTITION p1138 VALUES LESS THAN (9112), +PARTITION p1139 VALUES LESS THAN (9120), +PARTITION p1140 VALUES LESS THAN (9128), +PARTITION p1141 VALUES LESS THAN (9136), +PARTITION p1142 VALUES LESS THAN (9144), +PARTITION p1143 VALUES LESS THAN (9152), +PARTITION p1144 VALUES LESS THAN (9160), +PARTITION p1145 VALUES LESS THAN (9168), +PARTITION p1146 VALUES LESS THAN (9176), +PARTITION p1147 VALUES LESS THAN (9184), +PARTITION p1148 VALUES LESS THAN (9192), +PARTITION p1149 VALUES LESS THAN (9200), +PARTITION p1150 VALUES LESS THAN (9208), +PARTITION p1151 VALUES LESS THAN (9216), +PARTITION p1152 VALUES LESS THAN (9224), +PARTITION p1153 VALUES LESS THAN (9232), +PARTITION p1154 VALUES LESS THAN (9240), +PARTITION p1155 VALUES LESS THAN (9248), +PARTITION p1156 VALUES LESS THAN (9256), +PARTITION p1157 VALUES LESS THAN (9264), +PARTITION p1158 VALUES LESS THAN (9272), +PARTITION p1159 VALUES LESS THAN (9280), +PARTITION p1160 VALUES LESS THAN (9288), +PARTITION p1161 VALUES LESS THAN (9296), +PARTITION p1162 VALUES LESS THAN (9304), +PARTITION p1163 VALUES LESS THAN (9312), +PARTITION p1164 VALUES LESS THAN (9320), +PARTITION p1165 VALUES LESS THAN (9328), +PARTITION p1166 VALUES LESS THAN (9336), +PARTITION p1167 VALUES LESS THAN (9344), +PARTITION p1168 VALUES LESS THAN (9352), +PARTITION p1169 VALUES LESS THAN (9360), +PARTITION p1170 VALUES LESS THAN (9368), +PARTITION p1171 VALUES LESS THAN (9376), +PARTITION p1172 VALUES LESS THAN (9384), +PARTITION p1173 VALUES LESS THAN (9392), +PARTITION p1174 VALUES LESS THAN (9400), +PARTITION p1175 VALUES LESS THAN (9408), +PARTITION p1176 VALUES LESS THAN (9416), +PARTITION p1177 VALUES LESS THAN (9424), +PARTITION p1178 VALUES LESS THAN (9432), +PARTITION p1179 VALUES LESS THAN (9440), +PARTITION p1180 VALUES LESS THAN (9448), +PARTITION p1181 VALUES LESS THAN (9456), +PARTITION p1182 VALUES LESS THAN (9464), +PARTITION p1183 VALUES LESS THAN (9472), +PARTITION p1184 VALUES LESS THAN (9480), +PARTITION p1185 VALUES LESS THAN (9488), +PARTITION p1186 VALUES LESS THAN (9496), +PARTITION p1187 VALUES LESS THAN (9504), +PARTITION p1188 VALUES LESS THAN (9512), +PARTITION p1189 VALUES LESS THAN (9520), +PARTITION p1190 VALUES LESS THAN (9528), +PARTITION p1191 VALUES LESS THAN (9536), +PARTITION p1192 VALUES LESS THAN (9544), +PARTITION p1193 VALUES LESS THAN (9552), +PARTITION p1194 VALUES LESS THAN (9560), +PARTITION p1195 VALUES LESS THAN (9568), +PARTITION p1196 VALUES LESS THAN (9576), +PARTITION p1197 VALUES LESS THAN (9584), +PARTITION p1198 VALUES LESS THAN (9592), +PARTITION p1199 VALUES LESS THAN (9600), +PARTITION p1200 VALUES LESS THAN (9608), +PARTITION p1201 VALUES LESS THAN (9616), +PARTITION p1202 VALUES LESS THAN (9624), +PARTITION p1203 VALUES LESS THAN (9632), +PARTITION p1204 VALUES LESS THAN (9640), +PARTITION p1205 VALUES LESS THAN (9648), +PARTITION p1206 VALUES LESS THAN (9656), +PARTITION p1207 VALUES LESS THAN (9664), +PARTITION p1208 VALUES LESS THAN (9672), +PARTITION p1209 VALUES LESS THAN (9680), +PARTITION p1210 VALUES LESS THAN (9688), +PARTITION p1211 VALUES LESS THAN (9696), +PARTITION p1212 VALUES LESS THAN (9704), +PARTITION p1213 VALUES LESS THAN (9712), +PARTITION p1214 VALUES LESS THAN (9720), +PARTITION p1215 VALUES LESS THAN (9728), +PARTITION p1216 VALUES LESS THAN (9736), +PARTITION p1217 VALUES LESS THAN (9744), +PARTITION p1218 VALUES LESS THAN (9752), +PARTITION p1219 VALUES LESS THAN (9760), +PARTITION p1220 VALUES LESS THAN (9768), +PARTITION p1221 VALUES LESS THAN (9776), +PARTITION p1222 VALUES LESS THAN (9784), +PARTITION p1223 VALUES LESS THAN (9792), +PARTITION p1224 VALUES LESS THAN (9800), +PARTITION p1225 VALUES LESS THAN (9808), +PARTITION p1226 VALUES LESS THAN (9816), +PARTITION p1227 VALUES LESS THAN (9824), +PARTITION p1228 VALUES LESS THAN (9832), +PARTITION p1229 VALUES LESS THAN (9840), +PARTITION p1230 VALUES LESS THAN (9848), +PARTITION p1231 VALUES LESS THAN (9856), +PARTITION p1232 VALUES LESS THAN (9864), +PARTITION p1233 VALUES LESS THAN (9872), +PARTITION p1234 VALUES LESS THAN (9880), +PARTITION p1235 VALUES LESS THAN (9888), +PARTITION p1236 VALUES LESS THAN (9896), +PARTITION p1237 VALUES LESS THAN (9904), +PARTITION p1238 VALUES LESS THAN (9912), +PARTITION p1239 VALUES LESS THAN (9920), +PARTITION p1240 VALUES LESS THAN (9928), +PARTITION p1241 VALUES LESS THAN (9936), +PARTITION p1242 VALUES LESS THAN (9944), +PARTITION p1243 VALUES LESS THAN (9952), +PARTITION p1244 VALUES LESS THAN (9960), +PARTITION p1245 VALUES LESS THAN (9968), +PARTITION p1246 VALUES LESS THAN (9976), +PARTITION p1247 VALUES LESS THAN (9984), +PARTITION p1248 VALUES LESS THAN (9992), +PARTITION p1249 VALUES LESS THAN (10000), +PARTITION p1250 VALUES LESS THAN (10008), +PARTITION p1251 VALUES LESS THAN (10016), +PARTITION p1252 VALUES LESS THAN (10024), +PARTITION p1253 VALUES LESS THAN (10032), +PARTITION p1254 VALUES LESS THAN (10040), +PARTITION p1255 VALUES LESS THAN (10048), +PARTITION p1256 VALUES LESS THAN (10056), +PARTITION p1257 VALUES LESS THAN (10064), +PARTITION p1258 VALUES LESS THAN (10072), +PARTITION p1259 VALUES LESS THAN (10080), +PARTITION p1260 VALUES LESS THAN (10088), +PARTITION p1261 VALUES LESS THAN (10096), +PARTITION p1262 VALUES LESS THAN (10104), +PARTITION p1263 VALUES LESS THAN (10112), +PARTITION p1264 VALUES LESS THAN (10120), +PARTITION p1265 VALUES LESS THAN (10128), +PARTITION p1266 VALUES LESS THAN (10136), +PARTITION p1267 VALUES LESS THAN (10144), +PARTITION p1268 VALUES LESS THAN (10152), +PARTITION p1269 VALUES LESS THAN (10160), +PARTITION p1270 VALUES LESS THAN (10168), +PARTITION p1271 VALUES LESS THAN (10176), +PARTITION p1272 VALUES LESS THAN (10184), +PARTITION p1273 VALUES LESS THAN (10192), +PARTITION p1274 VALUES LESS THAN (10200), +PARTITION p1275 VALUES LESS THAN (10208), +PARTITION p1276 VALUES LESS THAN (10216), +PARTITION p1277 VALUES LESS THAN (10224), +PARTITION p1278 VALUES LESS THAN (10232), +PARTITION p1279 VALUES LESS THAN (10240), +PARTITION p1280 VALUES LESS THAN (10248), +PARTITION p1281 VALUES LESS THAN (10256), +PARTITION p1282 VALUES LESS THAN (10264), +PARTITION p1283 VALUES LESS THAN (10272), +PARTITION p1284 VALUES LESS THAN (10280), +PARTITION p1285 VALUES LESS THAN (10288), +PARTITION p1286 VALUES LESS THAN (10296), +PARTITION p1287 VALUES LESS THAN (10304), +PARTITION p1288 VALUES LESS THAN (10312), +PARTITION p1289 VALUES LESS THAN (10320), +PARTITION p1290 VALUES LESS THAN (10328), +PARTITION p1291 VALUES LESS THAN (10336), +PARTITION p1292 VALUES LESS THAN (10344), +PARTITION p1293 VALUES LESS THAN (10352), +PARTITION p1294 VALUES LESS THAN (10360), +PARTITION p1295 VALUES LESS THAN (10368), +PARTITION p1296 VALUES LESS THAN (10376), +PARTITION p1297 VALUES LESS THAN (10384), +PARTITION p1298 VALUES LESS THAN (10392), +PARTITION p1299 VALUES LESS THAN (10400), +PARTITION p1300 VALUES LESS THAN (10408), +PARTITION p1301 VALUES LESS THAN (10416), +PARTITION p1302 VALUES LESS THAN (10424), +PARTITION p1303 VALUES LESS THAN (10432), +PARTITION p1304 VALUES LESS THAN (10440), +PARTITION p1305 VALUES LESS THAN (10448), +PARTITION p1306 VALUES LESS THAN (10456), +PARTITION p1307 VALUES LESS THAN (10464), +PARTITION p1308 VALUES LESS THAN (10472), +PARTITION p1309 VALUES LESS THAN (10480), +PARTITION p1310 VALUES LESS THAN (10488), +PARTITION p1311 VALUES LESS THAN (10496), +PARTITION p1312 VALUES LESS THAN (10504), +PARTITION p1313 VALUES LESS THAN (10512), +PARTITION p1314 VALUES LESS THAN (10520), +PARTITION p1315 VALUES LESS THAN (10528), +PARTITION p1316 VALUES LESS THAN (10536), +PARTITION p1317 VALUES LESS THAN (10544), +PARTITION p1318 VALUES LESS THAN (10552), +PARTITION p1319 VALUES LESS THAN (10560), +PARTITION p1320 VALUES LESS THAN (10568), +PARTITION p1321 VALUES LESS THAN (10576), +PARTITION p1322 VALUES LESS THAN (10584), +PARTITION p1323 VALUES LESS THAN (10592), +PARTITION p1324 VALUES LESS THAN (10600), +PARTITION p1325 VALUES LESS THAN (10608), +PARTITION p1326 VALUES LESS THAN (10616), +PARTITION p1327 VALUES LESS THAN (10624), +PARTITION p1328 VALUES LESS THAN (10632), +PARTITION p1329 VALUES LESS THAN (10640), +PARTITION p1330 VALUES LESS THAN (10648), +PARTITION p1331 VALUES LESS THAN (10656), +PARTITION p1332 VALUES LESS THAN (10664), +PARTITION p1333 VALUES LESS THAN (10672), +PARTITION p1334 VALUES LESS THAN (10680), +PARTITION p1335 VALUES LESS THAN (10688), +PARTITION p1336 VALUES LESS THAN (10696), +PARTITION p1337 VALUES LESS THAN (10704), +PARTITION p1338 VALUES LESS THAN (10712), +PARTITION p1339 VALUES LESS THAN (10720), +PARTITION p1340 VALUES LESS THAN (10728), +PARTITION p1341 VALUES LESS THAN (10736), +PARTITION p1342 VALUES LESS THAN (10744), +PARTITION p1343 VALUES LESS THAN (10752), +PARTITION p1344 VALUES LESS THAN (10760), +PARTITION p1345 VALUES LESS THAN (10768), +PARTITION p1346 VALUES LESS THAN (10776), +PARTITION p1347 VALUES LESS THAN (10784), +PARTITION p1348 VALUES LESS THAN (10792), +PARTITION p1349 VALUES LESS THAN (10800), +PARTITION p1350 VALUES LESS THAN (10808), +PARTITION p1351 VALUES LESS THAN (10816), +PARTITION p1352 VALUES LESS THAN (10824), +PARTITION p1353 VALUES LESS THAN (10832), +PARTITION p1354 VALUES LESS THAN (10840), +PARTITION p1355 VALUES LESS THAN (10848), +PARTITION p1356 VALUES LESS THAN (10856), +PARTITION p1357 VALUES LESS THAN (10864), +PARTITION p1358 VALUES LESS THAN (10872), +PARTITION p1359 VALUES LESS THAN (10880), +PARTITION p1360 VALUES LESS THAN (10888), +PARTITION p1361 VALUES LESS THAN (10896), +PARTITION p1362 VALUES LESS THAN (10904), +PARTITION p1363 VALUES LESS THAN (10912), +PARTITION p1364 VALUES LESS THAN (10920), +PARTITION p1365 VALUES LESS THAN (10928), +PARTITION p1366 VALUES LESS THAN (10936), +PARTITION p1367 VALUES LESS THAN (10944), +PARTITION p1368 VALUES LESS THAN (10952), +PARTITION p1369 VALUES LESS THAN (10960), +PARTITION p1370 VALUES LESS THAN (10968), +PARTITION p1371 VALUES LESS THAN (10976), +PARTITION p1372 VALUES LESS THAN (10984), +PARTITION p1373 VALUES LESS THAN (10992), +PARTITION p1374 VALUES LESS THAN (11000), +PARTITION p1375 VALUES LESS THAN (11008), +PARTITION p1376 VALUES LESS THAN (11016), +PARTITION p1377 VALUES LESS THAN (11024), +PARTITION p1378 VALUES LESS THAN (11032), +PARTITION p1379 VALUES LESS THAN (11040), +PARTITION p1380 VALUES LESS THAN (11048), +PARTITION p1381 VALUES LESS THAN (11056), +PARTITION p1382 VALUES LESS THAN (11064), +PARTITION p1383 VALUES LESS THAN (11072), +PARTITION p1384 VALUES LESS THAN (11080), +PARTITION p1385 VALUES LESS THAN (11088), +PARTITION p1386 VALUES LESS THAN (11096), +PARTITION p1387 VALUES LESS THAN (11104), +PARTITION p1388 VALUES LESS THAN (11112), +PARTITION p1389 VALUES LESS THAN (11120), +PARTITION p1390 VALUES LESS THAN (11128), +PARTITION p1391 VALUES LESS THAN (11136), +PARTITION p1392 VALUES LESS THAN (11144), +PARTITION p1393 VALUES LESS THAN (11152), +PARTITION p1394 VALUES LESS THAN (11160), +PARTITION p1395 VALUES LESS THAN (11168), +PARTITION p1396 VALUES LESS THAN (11176), +PARTITION p1397 VALUES LESS THAN (11184), +PARTITION p1398 VALUES LESS THAN (11192), +PARTITION p1399 VALUES LESS THAN (11200), +PARTITION p1400 VALUES LESS THAN (11208), +PARTITION p1401 VALUES LESS THAN (11216), +PARTITION p1402 VALUES LESS THAN (11224), +PARTITION p1403 VALUES LESS THAN (11232), +PARTITION p1404 VALUES LESS THAN (11240), +PARTITION p1405 VALUES LESS THAN (11248), +PARTITION p1406 VALUES LESS THAN (11256), +PARTITION p1407 VALUES LESS THAN (11264), +PARTITION p1408 VALUES LESS THAN (11272), +PARTITION p1409 VALUES LESS THAN (11280), +PARTITION p1410 VALUES LESS THAN (11288), +PARTITION p1411 VALUES LESS THAN (11296), +PARTITION p1412 VALUES LESS THAN (11304), +PARTITION p1413 VALUES LESS THAN (11312), +PARTITION p1414 VALUES LESS THAN (11320), +PARTITION p1415 VALUES LESS THAN (11328), +PARTITION p1416 VALUES LESS THAN (11336), +PARTITION p1417 VALUES LESS THAN (11344), +PARTITION p1418 VALUES LESS THAN (11352), +PARTITION p1419 VALUES LESS THAN (11360), +PARTITION p1420 VALUES LESS THAN (11368), +PARTITION p1421 VALUES LESS THAN (11376), +PARTITION p1422 VALUES LESS THAN (11384), +PARTITION p1423 VALUES LESS THAN (11392), +PARTITION p1424 VALUES LESS THAN (11400), +PARTITION p1425 VALUES LESS THAN (11408), +PARTITION p1426 VALUES LESS THAN (11416), +PARTITION p1427 VALUES LESS THAN (11424), +PARTITION p1428 VALUES LESS THAN (11432), +PARTITION p1429 VALUES LESS THAN (11440), +PARTITION p1430 VALUES LESS THAN (11448), +PARTITION p1431 VALUES LESS THAN (11456), +PARTITION p1432 VALUES LESS THAN (11464), +PARTITION p1433 VALUES LESS THAN (11472), +PARTITION p1434 VALUES LESS THAN (11480), +PARTITION p1435 VALUES LESS THAN (11488), +PARTITION p1436 VALUES LESS THAN (11496), +PARTITION p1437 VALUES LESS THAN (11504), +PARTITION p1438 VALUES LESS THAN (11512), +PARTITION p1439 VALUES LESS THAN (11520), +PARTITION p1440 VALUES LESS THAN (11528), +PARTITION p1441 VALUES LESS THAN (11536), +PARTITION p1442 VALUES LESS THAN (11544), +PARTITION p1443 VALUES LESS THAN (11552), +PARTITION p1444 VALUES LESS THAN (11560), +PARTITION p1445 VALUES LESS THAN (11568), +PARTITION p1446 VALUES LESS THAN (11576), +PARTITION p1447 VALUES LESS THAN (11584), +PARTITION p1448 VALUES LESS THAN (11592), +PARTITION p1449 VALUES LESS THAN (11600), +PARTITION p1450 VALUES LESS THAN (11608), +PARTITION p1451 VALUES LESS THAN (11616), +PARTITION p1452 VALUES LESS THAN (11624), +PARTITION p1453 VALUES LESS THAN (11632), +PARTITION p1454 VALUES LESS THAN (11640), +PARTITION p1455 VALUES LESS THAN (11648), +PARTITION p1456 VALUES LESS THAN (11656), +PARTITION p1457 VALUES LESS THAN (11664), +PARTITION p1458 VALUES LESS THAN (11672), +PARTITION p1459 VALUES LESS THAN (11680), +PARTITION p1460 VALUES LESS THAN (11688), +PARTITION p1461 VALUES LESS THAN (11696), +PARTITION p1462 VALUES LESS THAN (11704), +PARTITION p1463 VALUES LESS THAN (11712), +PARTITION p1464 VALUES LESS THAN (11720), +PARTITION p1465 VALUES LESS THAN (11728), +PARTITION p1466 VALUES LESS THAN (11736), +PARTITION p1467 VALUES LESS THAN (11744), +PARTITION p1468 VALUES LESS THAN (11752), +PARTITION p1469 VALUES LESS THAN (11760), +PARTITION p1470 VALUES LESS THAN (11768), +PARTITION p1471 VALUES LESS THAN (11776), +PARTITION p1472 VALUES LESS THAN (11784), +PARTITION p1473 VALUES LESS THAN (11792), +PARTITION p1474 VALUES LESS THAN (11800), +PARTITION p1475 VALUES LESS THAN (11808), +PARTITION p1476 VALUES LESS THAN (11816), +PARTITION p1477 VALUES LESS THAN (11824), +PARTITION p1478 VALUES LESS THAN (11832), +PARTITION p1479 VALUES LESS THAN (11840), +PARTITION p1480 VALUES LESS THAN (11848), +PARTITION p1481 VALUES LESS THAN (11856), +PARTITION p1482 VALUES LESS THAN (11864), +PARTITION p1483 VALUES LESS THAN (11872), +PARTITION p1484 VALUES LESS THAN (11880), +PARTITION p1485 VALUES LESS THAN (11888), +PARTITION p1486 VALUES LESS THAN (11896), +PARTITION p1487 VALUES LESS THAN (11904), +PARTITION p1488 VALUES LESS THAN (11912), +PARTITION p1489 VALUES LESS THAN (11920), +PARTITION p1490 VALUES LESS THAN (11928), +PARTITION p1491 VALUES LESS THAN (11936), +PARTITION p1492 VALUES LESS THAN (11944), +PARTITION p1493 VALUES LESS THAN (11952), +PARTITION p1494 VALUES LESS THAN (11960), +PARTITION p1495 VALUES LESS THAN (11968), +PARTITION p1496 VALUES LESS THAN (11976), +PARTITION p1497 VALUES LESS THAN (11984), +PARTITION p1498 VALUES LESS THAN (11992), +PARTITION p1499 VALUES LESS THAN (12000), +PARTITION p1500 VALUES LESS THAN (12008), +PARTITION p1501 VALUES LESS THAN (12016), +PARTITION p1502 VALUES LESS THAN (12024), +PARTITION p1503 VALUES LESS THAN (12032), +PARTITION p1504 VALUES LESS THAN (12040), +PARTITION p1505 VALUES LESS THAN (12048), +PARTITION p1506 VALUES LESS THAN (12056), +PARTITION p1507 VALUES LESS THAN (12064), +PARTITION p1508 VALUES LESS THAN (12072), +PARTITION p1509 VALUES LESS THAN (12080), +PARTITION p1510 VALUES LESS THAN (12088), +PARTITION p1511 VALUES LESS THAN (12096), +PARTITION p1512 VALUES LESS THAN (12104), +PARTITION p1513 VALUES LESS THAN (12112), +PARTITION p1514 VALUES LESS THAN (12120), +PARTITION p1515 VALUES LESS THAN (12128), +PARTITION p1516 VALUES LESS THAN (12136), +PARTITION p1517 VALUES LESS THAN (12144), +PARTITION p1518 VALUES LESS THAN (12152), +PARTITION p1519 VALUES LESS THAN (12160), +PARTITION p1520 VALUES LESS THAN (12168), +PARTITION p1521 VALUES LESS THAN (12176), +PARTITION p1522 VALUES LESS THAN (12184), +PARTITION p1523 VALUES LESS THAN (12192), +PARTITION p1524 VALUES LESS THAN (12200), +PARTITION p1525 VALUES LESS THAN (12208), +PARTITION p1526 VALUES LESS THAN (12216), +PARTITION p1527 VALUES LESS THAN (12224), +PARTITION p1528 VALUES LESS THAN (12232), +PARTITION p1529 VALUES LESS THAN (12240), +PARTITION p1530 VALUES LESS THAN (12248), +PARTITION p1531 VALUES LESS THAN (12256), +PARTITION p1532 VALUES LESS THAN (12264), +PARTITION p1533 VALUES LESS THAN (12272), +PARTITION p1534 VALUES LESS THAN (12280), +PARTITION p1535 VALUES LESS THAN (12288), +PARTITION p1536 VALUES LESS THAN (12296), +PARTITION p1537 VALUES LESS THAN (12304), +PARTITION p1538 VALUES LESS THAN (12312), +PARTITION p1539 VALUES LESS THAN (12320), +PARTITION p1540 VALUES LESS THAN (12328), +PARTITION p1541 VALUES LESS THAN (12336), +PARTITION p1542 VALUES LESS THAN (12344), +PARTITION p1543 VALUES LESS THAN (12352), +PARTITION p1544 VALUES LESS THAN (12360), +PARTITION p1545 VALUES LESS THAN (12368), +PARTITION p1546 VALUES LESS THAN (12376), +PARTITION p1547 VALUES LESS THAN (12384), +PARTITION p1548 VALUES LESS THAN (12392), +PARTITION p1549 VALUES LESS THAN (12400), +PARTITION p1550 VALUES LESS THAN (12408), +PARTITION p1551 VALUES LESS THAN (12416), +PARTITION p1552 VALUES LESS THAN (12424), +PARTITION p1553 VALUES LESS THAN (12432), +PARTITION p1554 VALUES LESS THAN (12440), +PARTITION p1555 VALUES LESS THAN (12448), +PARTITION p1556 VALUES LESS THAN (12456), +PARTITION p1557 VALUES LESS THAN (12464), +PARTITION p1558 VALUES LESS THAN (12472), +PARTITION p1559 VALUES LESS THAN (12480), +PARTITION p1560 VALUES LESS THAN (12488), +PARTITION p1561 VALUES LESS THAN (12496), +PARTITION p1562 VALUES LESS THAN (12504), +PARTITION p1563 VALUES LESS THAN (12512), +PARTITION p1564 VALUES LESS THAN (12520), +PARTITION p1565 VALUES LESS THAN (12528), +PARTITION p1566 VALUES LESS THAN (12536), +PARTITION p1567 VALUES LESS THAN (12544), +PARTITION p1568 VALUES LESS THAN (12552), +PARTITION p1569 VALUES LESS THAN (12560), +PARTITION p1570 VALUES LESS THAN (12568), +PARTITION p1571 VALUES LESS THAN (12576), +PARTITION p1572 VALUES LESS THAN (12584), +PARTITION p1573 VALUES LESS THAN (12592), +PARTITION p1574 VALUES LESS THAN (12600), +PARTITION p1575 VALUES LESS THAN (12608), +PARTITION p1576 VALUES LESS THAN (12616), +PARTITION p1577 VALUES LESS THAN (12624), +PARTITION p1578 VALUES LESS THAN (12632), +PARTITION p1579 VALUES LESS THAN (12640), +PARTITION p1580 VALUES LESS THAN (12648), +PARTITION p1581 VALUES LESS THAN (12656), +PARTITION p1582 VALUES LESS THAN (12664), +PARTITION p1583 VALUES LESS THAN (12672), +PARTITION p1584 VALUES LESS THAN (12680), +PARTITION p1585 VALUES LESS THAN (12688), +PARTITION p1586 VALUES LESS THAN (12696), +PARTITION p1587 VALUES LESS THAN (12704), +PARTITION p1588 VALUES LESS THAN (12712), +PARTITION p1589 VALUES LESS THAN (12720), +PARTITION p1590 VALUES LESS THAN (12728), +PARTITION p1591 VALUES LESS THAN (12736), +PARTITION p1592 VALUES LESS THAN (12744), +PARTITION p1593 VALUES LESS THAN (12752), +PARTITION p1594 VALUES LESS THAN (12760), +PARTITION p1595 VALUES LESS THAN (12768), +PARTITION p1596 VALUES LESS THAN (12776), +PARTITION p1597 VALUES LESS THAN (12784), +PARTITION p1598 VALUES LESS THAN (12792), +PARTITION p1599 VALUES LESS THAN (12800), +PARTITION p1600 VALUES LESS THAN (12808), +PARTITION p1601 VALUES LESS THAN (12816), +PARTITION p1602 VALUES LESS THAN (12824), +PARTITION p1603 VALUES LESS THAN (12832), +PARTITION p1604 VALUES LESS THAN (12840), +PARTITION p1605 VALUES LESS THAN (12848), +PARTITION p1606 VALUES LESS THAN (12856), +PARTITION p1607 VALUES LESS THAN (12864), +PARTITION p1608 VALUES LESS THAN (12872), +PARTITION p1609 VALUES LESS THAN (12880), +PARTITION p1610 VALUES LESS THAN (12888), +PARTITION p1611 VALUES LESS THAN (12896), +PARTITION p1612 VALUES LESS THAN (12904), +PARTITION p1613 VALUES LESS THAN (12912), +PARTITION p1614 VALUES LESS THAN (12920), +PARTITION p1615 VALUES LESS THAN (12928), +PARTITION p1616 VALUES LESS THAN (12936), +PARTITION p1617 VALUES LESS THAN (12944), +PARTITION p1618 VALUES LESS THAN (12952), +PARTITION p1619 VALUES LESS THAN (12960), +PARTITION p1620 VALUES LESS THAN (12968), +PARTITION p1621 VALUES LESS THAN (12976), +PARTITION p1622 VALUES LESS THAN (12984), +PARTITION p1623 VALUES LESS THAN (12992), +PARTITION p1624 VALUES LESS THAN (13000), +PARTITION p1625 VALUES LESS THAN (13008), +PARTITION p1626 VALUES LESS THAN (13016), +PARTITION p1627 VALUES LESS THAN (13024), +PARTITION p1628 VALUES LESS THAN (13032), +PARTITION p1629 VALUES LESS THAN (13040), +PARTITION p1630 VALUES LESS THAN (13048), +PARTITION p1631 VALUES LESS THAN (13056), +PARTITION p1632 VALUES LESS THAN (13064), +PARTITION p1633 VALUES LESS THAN (13072), +PARTITION p1634 VALUES LESS THAN (13080), +PARTITION p1635 VALUES LESS THAN (13088), +PARTITION p1636 VALUES LESS THAN (13096), +PARTITION p1637 VALUES LESS THAN (13104), +PARTITION p1638 VALUES LESS THAN (13112), +PARTITION p1639 VALUES LESS THAN (13120), +PARTITION p1640 VALUES LESS THAN (13128), +PARTITION p1641 VALUES LESS THAN (13136), +PARTITION p1642 VALUES LESS THAN (13144), +PARTITION p1643 VALUES LESS THAN (13152), +PARTITION p1644 VALUES LESS THAN (13160), +PARTITION p1645 VALUES LESS THAN (13168), +PARTITION p1646 VALUES LESS THAN (13176), +PARTITION p1647 VALUES LESS THAN (13184), +PARTITION p1648 VALUES LESS THAN (13192), +PARTITION p1649 VALUES LESS THAN (13200), +PARTITION p1650 VALUES LESS THAN (13208), +PARTITION p1651 VALUES LESS THAN (13216), +PARTITION p1652 VALUES LESS THAN (13224), +PARTITION p1653 VALUES LESS THAN (13232), +PARTITION p1654 VALUES LESS THAN (13240), +PARTITION p1655 VALUES LESS THAN (13248), +PARTITION p1656 VALUES LESS THAN (13256), +PARTITION p1657 VALUES LESS THAN (13264), +PARTITION p1658 VALUES LESS THAN (13272), +PARTITION p1659 VALUES LESS THAN (13280), +PARTITION p1660 VALUES LESS THAN (13288), +PARTITION p1661 VALUES LESS THAN (13296), +PARTITION p1662 VALUES LESS THAN (13304), +PARTITION p1663 VALUES LESS THAN (13312), +PARTITION p1664 VALUES LESS THAN (13320), +PARTITION p1665 VALUES LESS THAN (13328), +PARTITION p1666 VALUES LESS THAN (13336), +PARTITION p1667 VALUES LESS THAN (13344), +PARTITION p1668 VALUES LESS THAN (13352), +PARTITION p1669 VALUES LESS THAN (13360), +PARTITION p1670 VALUES LESS THAN (13368), +PARTITION p1671 VALUES LESS THAN (13376), +PARTITION p1672 VALUES LESS THAN (13384), +PARTITION p1673 VALUES LESS THAN (13392), +PARTITION p1674 VALUES LESS THAN (13400), +PARTITION p1675 VALUES LESS THAN (13408), +PARTITION p1676 VALUES LESS THAN (13416), +PARTITION p1677 VALUES LESS THAN (13424), +PARTITION p1678 VALUES LESS THAN (13432), +PARTITION p1679 VALUES LESS THAN (13440), +PARTITION p1680 VALUES LESS THAN (13448), +PARTITION p1681 VALUES LESS THAN (13456), +PARTITION p1682 VALUES LESS THAN (13464), +PARTITION p1683 VALUES LESS THAN (13472), +PARTITION p1684 VALUES LESS THAN (13480), +PARTITION p1685 VALUES LESS THAN (13488), +PARTITION p1686 VALUES LESS THAN (13496), +PARTITION p1687 VALUES LESS THAN (13504), +PARTITION p1688 VALUES LESS THAN (13512), +PARTITION p1689 VALUES LESS THAN (13520), +PARTITION p1690 VALUES LESS THAN (13528), +PARTITION p1691 VALUES LESS THAN (13536), +PARTITION p1692 VALUES LESS THAN (13544), +PARTITION p1693 VALUES LESS THAN (13552), +PARTITION p1694 VALUES LESS THAN (13560), +PARTITION p1695 VALUES LESS THAN (13568), +PARTITION p1696 VALUES LESS THAN (13576), +PARTITION p1697 VALUES LESS THAN (13584), +PARTITION p1698 VALUES LESS THAN (13592), +PARTITION p1699 VALUES LESS THAN (13600), +PARTITION p1700 VALUES LESS THAN (13608), +PARTITION p1701 VALUES LESS THAN (13616), +PARTITION p1702 VALUES LESS THAN (13624), +PARTITION p1703 VALUES LESS THAN (13632), +PARTITION p1704 VALUES LESS THAN (13640), +PARTITION p1705 VALUES LESS THAN (13648), +PARTITION p1706 VALUES LESS THAN (13656), +PARTITION p1707 VALUES LESS THAN (13664), +PARTITION p1708 VALUES LESS THAN (13672), +PARTITION p1709 VALUES LESS THAN (13680), +PARTITION p1710 VALUES LESS THAN (13688), +PARTITION p1711 VALUES LESS THAN (13696), +PARTITION p1712 VALUES LESS THAN (13704), +PARTITION p1713 VALUES LESS THAN (13712), +PARTITION p1714 VALUES LESS THAN (13720), +PARTITION p1715 VALUES LESS THAN (13728), +PARTITION p1716 VALUES LESS THAN (13736), +PARTITION p1717 VALUES LESS THAN (13744), +PARTITION p1718 VALUES LESS THAN (13752), +PARTITION p1719 VALUES LESS THAN (13760), +PARTITION p1720 VALUES LESS THAN (13768), +PARTITION p1721 VALUES LESS THAN (13776), +PARTITION p1722 VALUES LESS THAN (13784), +PARTITION p1723 VALUES LESS THAN (13792), +PARTITION p1724 VALUES LESS THAN (13800), +PARTITION p1725 VALUES LESS THAN (13808), +PARTITION p1726 VALUES LESS THAN (13816), +PARTITION p1727 VALUES LESS THAN (13824), +PARTITION p1728 VALUES LESS THAN (13832), +PARTITION p1729 VALUES LESS THAN (13840), +PARTITION p1730 VALUES LESS THAN (13848), +PARTITION p1731 VALUES LESS THAN (13856), +PARTITION p1732 VALUES LESS THAN (13864), +PARTITION p1733 VALUES LESS THAN (13872), +PARTITION p1734 VALUES LESS THAN (13880), +PARTITION p1735 VALUES LESS THAN (13888), +PARTITION p1736 VALUES LESS THAN (13896), +PARTITION p1737 VALUES LESS THAN (13904), +PARTITION p1738 VALUES LESS THAN (13912), +PARTITION p1739 VALUES LESS THAN (13920), +PARTITION p1740 VALUES LESS THAN (13928), +PARTITION p1741 VALUES LESS THAN (13936), +PARTITION p1742 VALUES LESS THAN (13944), +PARTITION p1743 VALUES LESS THAN (13952), +PARTITION p1744 VALUES LESS THAN (13960), +PARTITION p1745 VALUES LESS THAN (13968), +PARTITION p1746 VALUES LESS THAN (13976), +PARTITION p1747 VALUES LESS THAN (13984), +PARTITION p1748 VALUES LESS THAN (13992), +PARTITION p1749 VALUES LESS THAN (14000), +PARTITION p1750 VALUES LESS THAN (14008), +PARTITION p1751 VALUES LESS THAN (14016), +PARTITION p1752 VALUES LESS THAN (14024), +PARTITION p1753 VALUES LESS THAN (14032), +PARTITION p1754 VALUES LESS THAN (14040), +PARTITION p1755 VALUES LESS THAN (14048), +PARTITION p1756 VALUES LESS THAN (14056), +PARTITION p1757 VALUES LESS THAN (14064), +PARTITION p1758 VALUES LESS THAN (14072), +PARTITION p1759 VALUES LESS THAN (14080), +PARTITION p1760 VALUES LESS THAN (14088), +PARTITION p1761 VALUES LESS THAN (14096), +PARTITION p1762 VALUES LESS THAN (14104), +PARTITION p1763 VALUES LESS THAN (14112), +PARTITION p1764 VALUES LESS THAN (14120), +PARTITION p1765 VALUES LESS THAN (14128), +PARTITION p1766 VALUES LESS THAN (14136), +PARTITION p1767 VALUES LESS THAN (14144), +PARTITION p1768 VALUES LESS THAN (14152), +PARTITION p1769 VALUES LESS THAN (14160), +PARTITION p1770 VALUES LESS THAN (14168), +PARTITION p1771 VALUES LESS THAN (14176), +PARTITION p1772 VALUES LESS THAN (14184), +PARTITION p1773 VALUES LESS THAN (14192), +PARTITION p1774 VALUES LESS THAN (14200), +PARTITION p1775 VALUES LESS THAN (14208), +PARTITION p1776 VALUES LESS THAN (14216), +PARTITION p1777 VALUES LESS THAN (14224), +PARTITION p1778 VALUES LESS THAN (14232), +PARTITION p1779 VALUES LESS THAN (14240), +PARTITION p1780 VALUES LESS THAN (14248), +PARTITION p1781 VALUES LESS THAN (14256), +PARTITION p1782 VALUES LESS THAN (14264), +PARTITION p1783 VALUES LESS THAN (14272), +PARTITION p1784 VALUES LESS THAN (14280), +PARTITION p1785 VALUES LESS THAN (14288), +PARTITION p1786 VALUES LESS THAN (14296), +PARTITION p1787 VALUES LESS THAN (14304), +PARTITION p1788 VALUES LESS THAN (14312), +PARTITION p1789 VALUES LESS THAN (14320), +PARTITION p1790 VALUES LESS THAN (14328), +PARTITION p1791 VALUES LESS THAN (14336), +PARTITION p1792 VALUES LESS THAN (14344), +PARTITION p1793 VALUES LESS THAN (14352), +PARTITION p1794 VALUES LESS THAN (14360), +PARTITION p1795 VALUES LESS THAN (14368), +PARTITION p1796 VALUES LESS THAN (14376), +PARTITION p1797 VALUES LESS THAN (14384), +PARTITION p1798 VALUES LESS THAN (14392), +PARTITION p1799 VALUES LESS THAN (14400), +PARTITION p1800 VALUES LESS THAN (14408), +PARTITION p1801 VALUES LESS THAN (14416), +PARTITION p1802 VALUES LESS THAN (14424), +PARTITION p1803 VALUES LESS THAN (14432), +PARTITION p1804 VALUES LESS THAN (14440), +PARTITION p1805 VALUES LESS THAN (14448), +PARTITION p1806 VALUES LESS THAN (14456), +PARTITION p1807 VALUES LESS THAN (14464), +PARTITION p1808 VALUES LESS THAN (14472), +PARTITION p1809 VALUES LESS THAN (14480), +PARTITION p1810 VALUES LESS THAN (14488), +PARTITION p1811 VALUES LESS THAN (14496), +PARTITION p1812 VALUES LESS THAN (14504), +PARTITION p1813 VALUES LESS THAN (14512), +PARTITION p1814 VALUES LESS THAN (14520), +PARTITION p1815 VALUES LESS THAN (14528), +PARTITION p1816 VALUES LESS THAN (14536), +PARTITION p1817 VALUES LESS THAN (14544), +PARTITION p1818 VALUES LESS THAN (14552), +PARTITION p1819 VALUES LESS THAN (14560), +PARTITION p1820 VALUES LESS THAN (14568), +PARTITION p1821 VALUES LESS THAN (14576), +PARTITION p1822 VALUES LESS THAN (14584), +PARTITION p1823 VALUES LESS THAN (14592), +PARTITION p1824 VALUES LESS THAN (14600), +PARTITION p1825 VALUES LESS THAN (14608), +PARTITION p1826 VALUES LESS THAN (14616), +PARTITION p1827 VALUES LESS THAN (14624), +PARTITION p1828 VALUES LESS THAN (14632), +PARTITION p1829 VALUES LESS THAN (14640), +PARTITION p1830 VALUES LESS THAN (14648), +PARTITION p1831 VALUES LESS THAN (14656), +PARTITION p1832 VALUES LESS THAN (14664), +PARTITION p1833 VALUES LESS THAN (14672), +PARTITION p1834 VALUES LESS THAN (14680), +PARTITION p1835 VALUES LESS THAN (14688), +PARTITION p1836 VALUES LESS THAN (14696), +PARTITION p1837 VALUES LESS THAN (14704), +PARTITION p1838 VALUES LESS THAN (14712), +PARTITION p1839 VALUES LESS THAN (14720), +PARTITION p1840 VALUES LESS THAN (14728), +PARTITION p1841 VALUES LESS THAN (14736), +PARTITION p1842 VALUES LESS THAN (14744), +PARTITION p1843 VALUES LESS THAN (14752), +PARTITION p1844 VALUES LESS THAN (14760), +PARTITION p1845 VALUES LESS THAN (14768), +PARTITION p1846 VALUES LESS THAN (14776), +PARTITION p1847 VALUES LESS THAN (14784), +PARTITION p1848 VALUES LESS THAN (14792), +PARTITION p1849 VALUES LESS THAN (14800), +PARTITION p1850 VALUES LESS THAN (14808), +PARTITION p1851 VALUES LESS THAN (14816), +PARTITION p1852 VALUES LESS THAN (14824), +PARTITION p1853 VALUES LESS THAN (14832), +PARTITION p1854 VALUES LESS THAN (14840), +PARTITION p1855 VALUES LESS THAN (14848), +PARTITION p1856 VALUES LESS THAN (14856), +PARTITION p1857 VALUES LESS THAN (14864), +PARTITION p1858 VALUES LESS THAN (14872), +PARTITION p1859 VALUES LESS THAN (14880), +PARTITION p1860 VALUES LESS THAN (14888), +PARTITION p1861 VALUES LESS THAN (14896), +PARTITION p1862 VALUES LESS THAN (14904), +PARTITION p1863 VALUES LESS THAN (14912), +PARTITION p1864 VALUES LESS THAN (14920), +PARTITION p1865 VALUES LESS THAN (14928), +PARTITION p1866 VALUES LESS THAN (14936), +PARTITION p1867 VALUES LESS THAN (14944), +PARTITION p1868 VALUES LESS THAN (14952), +PARTITION p1869 VALUES LESS THAN (14960), +PARTITION p1870 VALUES LESS THAN (14968), +PARTITION p1871 VALUES LESS THAN (14976), +PARTITION p1872 VALUES LESS THAN (14984), +PARTITION p1873 VALUES LESS THAN (14992), +PARTITION p1874 VALUES LESS THAN (15000), +PARTITION p1875 VALUES LESS THAN (15008), +PARTITION p1876 VALUES LESS THAN (15016), +PARTITION p1877 VALUES LESS THAN (15024), +PARTITION p1878 VALUES LESS THAN (15032), +PARTITION p1879 VALUES LESS THAN (15040), +PARTITION p1880 VALUES LESS THAN (15048), +PARTITION p1881 VALUES LESS THAN (15056), +PARTITION p1882 VALUES LESS THAN (15064), +PARTITION p1883 VALUES LESS THAN (15072), +PARTITION p1884 VALUES LESS THAN (15080), +PARTITION p1885 VALUES LESS THAN (15088), +PARTITION p1886 VALUES LESS THAN (15096), +PARTITION p1887 VALUES LESS THAN (15104), +PARTITION p1888 VALUES LESS THAN (15112), +PARTITION p1889 VALUES LESS THAN (15120), +PARTITION p1890 VALUES LESS THAN (15128), +PARTITION p1891 VALUES LESS THAN (15136), +PARTITION p1892 VALUES LESS THAN (15144), +PARTITION p1893 VALUES LESS THAN (15152), +PARTITION p1894 VALUES LESS THAN (15160), +PARTITION p1895 VALUES LESS THAN (15168), +PARTITION p1896 VALUES LESS THAN (15176), +PARTITION p1897 VALUES LESS THAN (15184), +PARTITION p1898 VALUES LESS THAN (15192), +PARTITION p1899 VALUES LESS THAN (15200), +PARTITION p1900 VALUES LESS THAN (15208), +PARTITION p1901 VALUES LESS THAN (15216), +PARTITION p1902 VALUES LESS THAN (15224), +PARTITION p1903 VALUES LESS THAN (15232), +PARTITION p1904 VALUES LESS THAN (15240), +PARTITION p1905 VALUES LESS THAN (15248), +PARTITION p1906 VALUES LESS THAN (15256), +PARTITION p1907 VALUES LESS THAN (15264), +PARTITION p1908 VALUES LESS THAN (15272), +PARTITION p1909 VALUES LESS THAN (15280), +PARTITION p1910 VALUES LESS THAN (15288), +PARTITION p1911 VALUES LESS THAN (15296), +PARTITION p1912 VALUES LESS THAN (15304), +PARTITION p1913 VALUES LESS THAN (15312), +PARTITION p1914 VALUES LESS THAN (15320), +PARTITION p1915 VALUES LESS THAN (15328), +PARTITION p1916 VALUES LESS THAN (15336), +PARTITION p1917 VALUES LESS THAN (15344), +PARTITION p1918 VALUES LESS THAN (15352), +PARTITION p1919 VALUES LESS THAN (15360), +PARTITION p1920 VALUES LESS THAN (15368), +PARTITION p1921 VALUES LESS THAN (15376), +PARTITION p1922 VALUES LESS THAN (15384), +PARTITION p1923 VALUES LESS THAN (15392), +PARTITION p1924 VALUES LESS THAN (15400), +PARTITION p1925 VALUES LESS THAN (15408), +PARTITION p1926 VALUES LESS THAN (15416), +PARTITION p1927 VALUES LESS THAN (15424), +PARTITION p1928 VALUES LESS THAN (15432), +PARTITION p1929 VALUES LESS THAN (15440), +PARTITION p1930 VALUES LESS THAN (15448), +PARTITION p1931 VALUES LESS THAN (15456), +PARTITION p1932 VALUES LESS THAN (15464), +PARTITION p1933 VALUES LESS THAN (15472), +PARTITION p1934 VALUES LESS THAN (15480), +PARTITION p1935 VALUES LESS THAN (15488), +PARTITION p1936 VALUES LESS THAN (15496), +PARTITION p1937 VALUES LESS THAN (15504), +PARTITION p1938 VALUES LESS THAN (15512), +PARTITION p1939 VALUES LESS THAN (15520), +PARTITION p1940 VALUES LESS THAN (15528), +PARTITION p1941 VALUES LESS THAN (15536), +PARTITION p1942 VALUES LESS THAN (15544), +PARTITION p1943 VALUES LESS THAN (15552), +PARTITION p1944 VALUES LESS THAN (15560), +PARTITION p1945 VALUES LESS THAN (15568), +PARTITION p1946 VALUES LESS THAN (15576), +PARTITION p1947 VALUES LESS THAN (15584), +PARTITION p1948 VALUES LESS THAN (15592), +PARTITION p1949 VALUES LESS THAN (15600), +PARTITION p1950 VALUES LESS THAN (15608), +PARTITION p1951 VALUES LESS THAN (15616), +PARTITION p1952 VALUES LESS THAN (15624), +PARTITION p1953 VALUES LESS THAN (15632), +PARTITION p1954 VALUES LESS THAN (15640), +PARTITION p1955 VALUES LESS THAN (15648), +PARTITION p1956 VALUES LESS THAN (15656), +PARTITION p1957 VALUES LESS THAN (15664), +PARTITION p1958 VALUES LESS THAN (15672), +PARTITION p1959 VALUES LESS THAN (15680), +PARTITION p1960 VALUES LESS THAN (15688), +PARTITION p1961 VALUES LESS THAN (15696), +PARTITION p1962 VALUES LESS THAN (15704), +PARTITION p1963 VALUES LESS THAN (15712), +PARTITION p1964 VALUES LESS THAN (15720), +PARTITION p1965 VALUES LESS THAN (15728), +PARTITION p1966 VALUES LESS THAN (15736), +PARTITION p1967 VALUES LESS THAN (15744), +PARTITION p1968 VALUES LESS THAN (15752), +PARTITION p1969 VALUES LESS THAN (15760), +PARTITION p1970 VALUES LESS THAN (15768), +PARTITION p1971 VALUES LESS THAN (15776), +PARTITION p1972 VALUES LESS THAN (15784), +PARTITION p1973 VALUES LESS THAN (15792), +PARTITION p1974 VALUES LESS THAN (15800), +PARTITION p1975 VALUES LESS THAN (15808), +PARTITION p1976 VALUES LESS THAN (15816), +PARTITION p1977 VALUES LESS THAN (15824), +PARTITION p1978 VALUES LESS THAN (15832), +PARTITION p1979 VALUES LESS THAN (15840), +PARTITION p1980 VALUES LESS THAN (15848), +PARTITION p1981 VALUES LESS THAN (15856), +PARTITION p1982 VALUES LESS THAN (15864), +PARTITION p1983 VALUES LESS THAN (15872), +PARTITION p1984 VALUES LESS THAN (15880), +PARTITION p1985 VALUES LESS THAN (15888), +PARTITION p1986 VALUES LESS THAN (15896), +PARTITION p1987 VALUES LESS THAN (15904), +PARTITION p1988 VALUES LESS THAN (15912), +PARTITION p1989 VALUES LESS THAN (15920), +PARTITION p1990 VALUES LESS THAN (15928), +PARTITION p1991 VALUES LESS THAN (15936), +PARTITION p1992 VALUES LESS THAN (15944), +PARTITION p1993 VALUES LESS THAN (15952), +PARTITION p1994 VALUES LESS THAN (15960), +PARTITION p1995 VALUES LESS THAN (15968), +PARTITION p1996 VALUES LESS THAN (15976), +PARTITION p1997 VALUES LESS THAN (15984), +PARTITION p1998 VALUES LESS THAN (15992), +PARTITION p1999 VALUES LESS THAN (16000), +PARTITION p2000 VALUES LESS THAN (16008), +PARTITION p2001 VALUES LESS THAN (16016), +PARTITION p2002 VALUES LESS THAN (16024), +PARTITION p2003 VALUES LESS THAN (16032), +PARTITION p2004 VALUES LESS THAN (16040), +PARTITION p2005 VALUES LESS THAN (16048), +PARTITION p2006 VALUES LESS THAN (16056), +PARTITION p2007 VALUES LESS THAN (16064), +PARTITION p2008 VALUES LESS THAN (16072), +PARTITION p2009 VALUES LESS THAN (16080), +PARTITION p2010 VALUES LESS THAN (16088), +PARTITION p2011 VALUES LESS THAN (16096), +PARTITION p2012 VALUES LESS THAN (16104), +PARTITION p2013 VALUES LESS THAN (16112), +PARTITION p2014 VALUES LESS THAN (16120), +PARTITION p2015 VALUES LESS THAN (16128), +PARTITION p2016 VALUES LESS THAN (16136), +PARTITION p2017 VALUES LESS THAN (16144), +PARTITION p2018 VALUES LESS THAN (16152), +PARTITION p2019 VALUES LESS THAN (16160), +PARTITION p2020 VALUES LESS THAN (16168), +PARTITION p2021 VALUES LESS THAN (16176), +PARTITION p2022 VALUES LESS THAN (16184), +PARTITION p2023 VALUES LESS THAN (16192), +PARTITION p2024 VALUES LESS THAN (16200), +PARTITION p2025 VALUES LESS THAN (16208), +PARTITION p2026 VALUES LESS THAN (16216), +PARTITION p2027 VALUES LESS THAN (16224), +PARTITION p2028 VALUES LESS THAN (16232), +PARTITION p2029 VALUES LESS THAN (16240), +PARTITION p2030 VALUES LESS THAN (16248), +PARTITION p2031 VALUES LESS THAN (16256), +PARTITION p2032 VALUES LESS THAN (16264), +PARTITION p2033 VALUES LESS THAN (16272), +PARTITION p2034 VALUES LESS THAN (16280), +PARTITION p2035 VALUES LESS THAN (16288), +PARTITION p2036 VALUES LESS THAN (16296), +PARTITION p2037 VALUES LESS THAN (16304), +PARTITION p2038 VALUES LESS THAN (16312), +PARTITION p2039 VALUES LESS THAN (16320), +PARTITION p2040 VALUES LESS THAN (16328), +PARTITION p2041 VALUES LESS THAN (16336), +PARTITION p2042 VALUES LESS THAN (16344), +PARTITION p2043 VALUES LESS THAN (16352), +PARTITION p2044 VALUES LESS THAN (16360), +PARTITION p2045 VALUES LESS THAN (16368), +PARTITION p2046 VALUES LESS THAN (16376), +PARTITION p2047 VALUES LESS THAN (16384), +PARTITION p2048 VALUES LESS THAN (16392), +PARTITION p2049 VALUES LESS THAN (16400), +PARTITION p2050 VALUES LESS THAN (16408), +PARTITION p2051 VALUES LESS THAN (16416), +PARTITION p2052 VALUES LESS THAN (16424), +PARTITION p2053 VALUES LESS THAN (16432), +PARTITION p2054 VALUES LESS THAN (16440), +PARTITION p2055 VALUES LESS THAN (16448), +PARTITION p2056 VALUES LESS THAN (16456), +PARTITION p2057 VALUES LESS THAN (16464), +PARTITION p2058 VALUES LESS THAN (16472), +PARTITION p2059 VALUES LESS THAN (16480), +PARTITION p2060 VALUES LESS THAN (16488), +PARTITION p2061 VALUES LESS THAN (16496), +PARTITION p2062 VALUES LESS THAN (16504), +PARTITION p2063 VALUES LESS THAN (16512), +PARTITION p2064 VALUES LESS THAN (16520), +PARTITION p2065 VALUES LESS THAN (16528), +PARTITION p2066 VALUES LESS THAN (16536), +PARTITION p2067 VALUES LESS THAN (16544), +PARTITION p2068 VALUES LESS THAN (16552), +PARTITION p2069 VALUES LESS THAN (16560), +PARTITION p2070 VALUES LESS THAN (16568), +PARTITION p2071 VALUES LESS THAN (16576), +PARTITION p2072 VALUES LESS THAN (16584), +PARTITION p2073 VALUES LESS THAN (16592), +PARTITION p2074 VALUES LESS THAN (16600), +PARTITION p2075 VALUES LESS THAN (16608), +PARTITION p2076 VALUES LESS THAN (16616), +PARTITION p2077 VALUES LESS THAN (16624), +PARTITION p2078 VALUES LESS THAN (16632), +PARTITION p2079 VALUES LESS THAN (16640), +PARTITION p2080 VALUES LESS THAN (16648), +PARTITION p2081 VALUES LESS THAN (16656), +PARTITION p2082 VALUES LESS THAN (16664), +PARTITION p2083 VALUES LESS THAN (16672), +PARTITION p2084 VALUES LESS THAN (16680), +PARTITION p2085 VALUES LESS THAN (16688), +PARTITION p2086 VALUES LESS THAN (16696), +PARTITION p2087 VALUES LESS THAN (16704), +PARTITION p2088 VALUES LESS THAN (16712), +PARTITION p2089 VALUES LESS THAN (16720), +PARTITION p2090 VALUES LESS THAN (16728), +PARTITION p2091 VALUES LESS THAN (16736), +PARTITION p2092 VALUES LESS THAN (16744), +PARTITION p2093 VALUES LESS THAN (16752), +PARTITION p2094 VALUES LESS THAN (16760), +PARTITION p2095 VALUES LESS THAN (16768), +PARTITION p2096 VALUES LESS THAN (16776), +PARTITION p2097 VALUES LESS THAN (16784), +PARTITION p2098 VALUES LESS THAN (16792), +PARTITION p2099 VALUES LESS THAN (16800), +PARTITION p2100 VALUES LESS THAN (16808), +PARTITION p2101 VALUES LESS THAN (16816), +PARTITION p2102 VALUES LESS THAN (16824), +PARTITION p2103 VALUES LESS THAN (16832), +PARTITION p2104 VALUES LESS THAN (16840), +PARTITION p2105 VALUES LESS THAN (16848), +PARTITION p2106 VALUES LESS THAN (16856), +PARTITION p2107 VALUES LESS THAN (16864), +PARTITION p2108 VALUES LESS THAN (16872), +PARTITION p2109 VALUES LESS THAN (16880), +PARTITION p2110 VALUES LESS THAN (16888), +PARTITION p2111 VALUES LESS THAN (16896), +PARTITION p2112 VALUES LESS THAN (16904), +PARTITION p2113 VALUES LESS THAN (16912), +PARTITION p2114 VALUES LESS THAN (16920), +PARTITION p2115 VALUES LESS THAN (16928), +PARTITION p2116 VALUES LESS THAN (16936), +PARTITION p2117 VALUES LESS THAN (16944), +PARTITION p2118 VALUES LESS THAN (16952), +PARTITION p2119 VALUES LESS THAN (16960), +PARTITION p2120 VALUES LESS THAN (16968), +PARTITION p2121 VALUES LESS THAN (16976), +PARTITION p2122 VALUES LESS THAN (16984), +PARTITION p2123 VALUES LESS THAN (16992), +PARTITION p2124 VALUES LESS THAN (17000), +PARTITION p2125 VALUES LESS THAN (17008), +PARTITION p2126 VALUES LESS THAN (17016), +PARTITION p2127 VALUES LESS THAN (17024), +PARTITION p2128 VALUES LESS THAN (17032), +PARTITION p2129 VALUES LESS THAN (17040), +PARTITION p2130 VALUES LESS THAN (17048), +PARTITION p2131 VALUES LESS THAN (17056), +PARTITION p2132 VALUES LESS THAN (17064), +PARTITION p2133 VALUES LESS THAN (17072), +PARTITION p2134 VALUES LESS THAN (17080), +PARTITION p2135 VALUES LESS THAN (17088), +PARTITION p2136 VALUES LESS THAN (17096), +PARTITION p2137 VALUES LESS THAN (17104), +PARTITION p2138 VALUES LESS THAN (17112), +PARTITION p2139 VALUES LESS THAN (17120), +PARTITION p2140 VALUES LESS THAN (17128), +PARTITION p2141 VALUES LESS THAN (17136), +PARTITION p2142 VALUES LESS THAN (17144), +PARTITION p2143 VALUES LESS THAN (17152), +PARTITION p2144 VALUES LESS THAN (17160), +PARTITION p2145 VALUES LESS THAN (17168), +PARTITION p2146 VALUES LESS THAN (17176), +PARTITION p2147 VALUES LESS THAN (17184), +PARTITION p2148 VALUES LESS THAN (17192), +PARTITION p2149 VALUES LESS THAN (17200), +PARTITION p2150 VALUES LESS THAN (17208), +PARTITION p2151 VALUES LESS THAN (17216), +PARTITION p2152 VALUES LESS THAN (17224), +PARTITION p2153 VALUES LESS THAN (17232), +PARTITION p2154 VALUES LESS THAN (17240), +PARTITION p2155 VALUES LESS THAN (17248), +PARTITION p2156 VALUES LESS THAN (17256), +PARTITION p2157 VALUES LESS THAN (17264), +PARTITION p2158 VALUES LESS THAN (17272), +PARTITION p2159 VALUES LESS THAN (17280), +PARTITION p2160 VALUES LESS THAN (17288), +PARTITION p2161 VALUES LESS THAN (17296), +PARTITION p2162 VALUES LESS THAN (17304), +PARTITION p2163 VALUES LESS THAN (17312), +PARTITION p2164 VALUES LESS THAN (17320), +PARTITION p2165 VALUES LESS THAN (17328), +PARTITION p2166 VALUES LESS THAN (17336), +PARTITION p2167 VALUES LESS THAN (17344), +PARTITION p2168 VALUES LESS THAN (17352), +PARTITION p2169 VALUES LESS THAN (17360), +PARTITION p2170 VALUES LESS THAN (17368), +PARTITION p2171 VALUES LESS THAN (17376), +PARTITION p2172 VALUES LESS THAN (17384), +PARTITION p2173 VALUES LESS THAN (17392), +PARTITION p2174 VALUES LESS THAN (17400), +PARTITION p2175 VALUES LESS THAN (17408), +PARTITION p2176 VALUES LESS THAN (17416), +PARTITION p2177 VALUES LESS THAN (17424), +PARTITION p2178 VALUES LESS THAN (17432), +PARTITION p2179 VALUES LESS THAN (17440), +PARTITION p2180 VALUES LESS THAN (17448), +PARTITION p2181 VALUES LESS THAN (17456), +PARTITION p2182 VALUES LESS THAN (17464), +PARTITION p2183 VALUES LESS THAN (17472), +PARTITION p2184 VALUES LESS THAN (17480), +PARTITION p2185 VALUES LESS THAN (17488), +PARTITION p2186 VALUES LESS THAN (17496), +PARTITION p2187 VALUES LESS THAN (17504), +PARTITION p2188 VALUES LESS THAN (17512), +PARTITION p2189 VALUES LESS THAN (17520), +PARTITION p2190 VALUES LESS THAN (17528), +PARTITION p2191 VALUES LESS THAN (17536), +PARTITION p2192 VALUES LESS THAN (17544), +PARTITION p2193 VALUES LESS THAN (17552), +PARTITION p2194 VALUES LESS THAN (17560), +PARTITION p2195 VALUES LESS THAN (17568), +PARTITION p2196 VALUES LESS THAN (17576), +PARTITION p2197 VALUES LESS THAN (17584), +PARTITION p2198 VALUES LESS THAN (17592), +PARTITION p2199 VALUES LESS THAN (17600), +PARTITION p2200 VALUES LESS THAN (17608), +PARTITION p2201 VALUES LESS THAN (17616), +PARTITION p2202 VALUES LESS THAN (17624), +PARTITION p2203 VALUES LESS THAN (17632), +PARTITION p2204 VALUES LESS THAN (17640), +PARTITION p2205 VALUES LESS THAN (17648), +PARTITION p2206 VALUES LESS THAN (17656), +PARTITION p2207 VALUES LESS THAN (17664), +PARTITION p2208 VALUES LESS THAN (17672), +PARTITION p2209 VALUES LESS THAN (17680), +PARTITION p2210 VALUES LESS THAN (17688), +PARTITION p2211 VALUES LESS THAN (17696), +PARTITION p2212 VALUES LESS THAN (17704), +PARTITION p2213 VALUES LESS THAN (17712), +PARTITION p2214 VALUES LESS THAN (17720), +PARTITION p2215 VALUES LESS THAN (17728), +PARTITION p2216 VALUES LESS THAN (17736), +PARTITION p2217 VALUES LESS THAN (17744), +PARTITION p2218 VALUES LESS THAN (17752), +PARTITION p2219 VALUES LESS THAN (17760), +PARTITION p2220 VALUES LESS THAN (17768), +PARTITION p2221 VALUES LESS THAN (17776), +PARTITION p2222 VALUES LESS THAN (17784), +PARTITION p2223 VALUES LESS THAN (17792), +PARTITION p2224 VALUES LESS THAN (17800), +PARTITION p2225 VALUES LESS THAN (17808), +PARTITION p2226 VALUES LESS THAN (17816), +PARTITION p2227 VALUES LESS THAN (17824), +PARTITION p2228 VALUES LESS THAN (17832), +PARTITION p2229 VALUES LESS THAN (17840), +PARTITION p2230 VALUES LESS THAN (17848), +PARTITION p2231 VALUES LESS THAN (17856), +PARTITION p2232 VALUES LESS THAN (17864), +PARTITION p2233 VALUES LESS THAN (17872), +PARTITION p2234 VALUES LESS THAN (17880), +PARTITION p2235 VALUES LESS THAN (17888), +PARTITION p2236 VALUES LESS THAN (17896), +PARTITION p2237 VALUES LESS THAN (17904), +PARTITION p2238 VALUES LESS THAN (17912), +PARTITION p2239 VALUES LESS THAN (17920), +PARTITION p2240 VALUES LESS THAN (17928), +PARTITION p2241 VALUES LESS THAN (17936), +PARTITION p2242 VALUES LESS THAN (17944), +PARTITION p2243 VALUES LESS THAN (17952), +PARTITION p2244 VALUES LESS THAN (17960), +PARTITION p2245 VALUES LESS THAN (17968), +PARTITION p2246 VALUES LESS THAN (17976), +PARTITION p2247 VALUES LESS THAN (17984), +PARTITION p2248 VALUES LESS THAN (17992), +PARTITION p2249 VALUES LESS THAN (18000), +PARTITION p2250 VALUES LESS THAN (18008), +PARTITION p2251 VALUES LESS THAN (18016), +PARTITION p2252 VALUES LESS THAN (18024), +PARTITION p2253 VALUES LESS THAN (18032), +PARTITION p2254 VALUES LESS THAN (18040), +PARTITION p2255 VALUES LESS THAN (18048), +PARTITION p2256 VALUES LESS THAN (18056), +PARTITION p2257 VALUES LESS THAN (18064), +PARTITION p2258 VALUES LESS THAN (18072), +PARTITION p2259 VALUES LESS THAN (18080), +PARTITION p2260 VALUES LESS THAN (18088), +PARTITION p2261 VALUES LESS THAN (18096), +PARTITION p2262 VALUES LESS THAN (18104), +PARTITION p2263 VALUES LESS THAN (18112), +PARTITION p2264 VALUES LESS THAN (18120), +PARTITION p2265 VALUES LESS THAN (18128), +PARTITION p2266 VALUES LESS THAN (18136), +PARTITION p2267 VALUES LESS THAN (18144), +PARTITION p2268 VALUES LESS THAN (18152), +PARTITION p2269 VALUES LESS THAN (18160), +PARTITION p2270 VALUES LESS THAN (18168), +PARTITION p2271 VALUES LESS THAN (18176), +PARTITION p2272 VALUES LESS THAN (18184), +PARTITION p2273 VALUES LESS THAN (18192), +PARTITION p2274 VALUES LESS THAN (18200), +PARTITION p2275 VALUES LESS THAN (18208), +PARTITION p2276 VALUES LESS THAN (18216), +PARTITION p2277 VALUES LESS THAN (18224), +PARTITION p2278 VALUES LESS THAN (18232), +PARTITION p2279 VALUES LESS THAN (18240), +PARTITION p2280 VALUES LESS THAN (18248), +PARTITION p2281 VALUES LESS THAN (18256), +PARTITION p2282 VALUES LESS THAN (18264), +PARTITION p2283 VALUES LESS THAN (18272), +PARTITION p2284 VALUES LESS THAN (18280), +PARTITION p2285 VALUES LESS THAN (18288), +PARTITION p2286 VALUES LESS THAN (18296), +PARTITION p2287 VALUES LESS THAN (18304), +PARTITION p2288 VALUES LESS THAN (18312), +PARTITION p2289 VALUES LESS THAN (18320), +PARTITION p2290 VALUES LESS THAN (18328), +PARTITION p2291 VALUES LESS THAN (18336), +PARTITION p2292 VALUES LESS THAN (18344), +PARTITION p2293 VALUES LESS THAN (18352), +PARTITION p2294 VALUES LESS THAN (18360), +PARTITION p2295 VALUES LESS THAN (18368), +PARTITION p2296 VALUES LESS THAN (18376), +PARTITION p2297 VALUES LESS THAN (18384), +PARTITION p2298 VALUES LESS THAN (18392), +PARTITION p2299 VALUES LESS THAN (18400), +PARTITION p2300 VALUES LESS THAN (18408), +PARTITION p2301 VALUES LESS THAN (18416), +PARTITION p2302 VALUES LESS THAN (18424), +PARTITION p2303 VALUES LESS THAN (18432), +PARTITION p2304 VALUES LESS THAN (18440), +PARTITION p2305 VALUES LESS THAN (18448), +PARTITION p2306 VALUES LESS THAN (18456), +PARTITION p2307 VALUES LESS THAN (18464), +PARTITION p2308 VALUES LESS THAN (18472), +PARTITION p2309 VALUES LESS THAN (18480), +PARTITION p2310 VALUES LESS THAN (18488), +PARTITION p2311 VALUES LESS THAN (18496), +PARTITION p2312 VALUES LESS THAN (18504), +PARTITION p2313 VALUES LESS THAN (18512), +PARTITION p2314 VALUES LESS THAN (18520), +PARTITION p2315 VALUES LESS THAN (18528), +PARTITION p2316 VALUES LESS THAN (18536), +PARTITION p2317 VALUES LESS THAN (18544), +PARTITION p2318 VALUES LESS THAN (18552), +PARTITION p2319 VALUES LESS THAN (18560), +PARTITION p2320 VALUES LESS THAN (18568), +PARTITION p2321 VALUES LESS THAN (18576), +PARTITION p2322 VALUES LESS THAN (18584), +PARTITION p2323 VALUES LESS THAN (18592), +PARTITION p2324 VALUES LESS THAN (18600), +PARTITION p2325 VALUES LESS THAN (18608), +PARTITION p2326 VALUES LESS THAN (18616), +PARTITION p2327 VALUES LESS THAN (18624), +PARTITION p2328 VALUES LESS THAN (18632), +PARTITION p2329 VALUES LESS THAN (18640), +PARTITION p2330 VALUES LESS THAN (18648), +PARTITION p2331 VALUES LESS THAN (18656), +PARTITION p2332 VALUES LESS THAN (18664), +PARTITION p2333 VALUES LESS THAN (18672), +PARTITION p2334 VALUES LESS THAN (18680), +PARTITION p2335 VALUES LESS THAN (18688), +PARTITION p2336 VALUES LESS THAN (18696), +PARTITION p2337 VALUES LESS THAN (18704), +PARTITION p2338 VALUES LESS THAN (18712), +PARTITION p2339 VALUES LESS THAN (18720), +PARTITION p2340 VALUES LESS THAN (18728), +PARTITION p2341 VALUES LESS THAN (18736), +PARTITION p2342 VALUES LESS THAN (18744), +PARTITION p2343 VALUES LESS THAN (18752), +PARTITION p2344 VALUES LESS THAN (18760), +PARTITION p2345 VALUES LESS THAN (18768), +PARTITION p2346 VALUES LESS THAN (18776), +PARTITION p2347 VALUES LESS THAN (18784), +PARTITION p2348 VALUES LESS THAN (18792), +PARTITION p2349 VALUES LESS THAN (18800), +PARTITION p2350 VALUES LESS THAN (18808), +PARTITION p2351 VALUES LESS THAN (18816), +PARTITION p2352 VALUES LESS THAN (18824), +PARTITION p2353 VALUES LESS THAN (18832), +PARTITION p2354 VALUES LESS THAN (18840), +PARTITION p2355 VALUES LESS THAN (18848), +PARTITION p2356 VALUES LESS THAN (18856), +PARTITION p2357 VALUES LESS THAN (18864), +PARTITION p2358 VALUES LESS THAN (18872), +PARTITION p2359 VALUES LESS THAN (18880), +PARTITION p2360 VALUES LESS THAN (18888), +PARTITION p2361 VALUES LESS THAN (18896), +PARTITION p2362 VALUES LESS THAN (18904), +PARTITION p2363 VALUES LESS THAN (18912), +PARTITION p2364 VALUES LESS THAN (18920), +PARTITION p2365 VALUES LESS THAN (18928), +PARTITION p2366 VALUES LESS THAN (18936), +PARTITION p2367 VALUES LESS THAN (18944), +PARTITION p2368 VALUES LESS THAN (18952), +PARTITION p2369 VALUES LESS THAN (18960), +PARTITION p2370 VALUES LESS THAN (18968), +PARTITION p2371 VALUES LESS THAN (18976), +PARTITION p2372 VALUES LESS THAN (18984), +PARTITION p2373 VALUES LESS THAN (18992), +PARTITION p2374 VALUES LESS THAN (19000), +PARTITION p2375 VALUES LESS THAN (19008), +PARTITION p2376 VALUES LESS THAN (19016), +PARTITION p2377 VALUES LESS THAN (19024), +PARTITION p2378 VALUES LESS THAN (19032), +PARTITION p2379 VALUES LESS THAN (19040), +PARTITION p2380 VALUES LESS THAN (19048), +PARTITION p2381 VALUES LESS THAN (19056), +PARTITION p2382 VALUES LESS THAN (19064), +PARTITION p2383 VALUES LESS THAN (19072), +PARTITION p2384 VALUES LESS THAN (19080), +PARTITION p2385 VALUES LESS THAN (19088), +PARTITION p2386 VALUES LESS THAN (19096), +PARTITION p2387 VALUES LESS THAN (19104), +PARTITION p2388 VALUES LESS THAN (19112), +PARTITION p2389 VALUES LESS THAN (19120), +PARTITION p2390 VALUES LESS THAN (19128), +PARTITION p2391 VALUES LESS THAN (19136), +PARTITION p2392 VALUES LESS THAN (19144), +PARTITION p2393 VALUES LESS THAN (19152), +PARTITION p2394 VALUES LESS THAN (19160), +PARTITION p2395 VALUES LESS THAN (19168), +PARTITION p2396 VALUES LESS THAN (19176), +PARTITION p2397 VALUES LESS THAN (19184), +PARTITION p2398 VALUES LESS THAN (19192), +PARTITION p2399 VALUES LESS THAN (19200), +PARTITION p2400 VALUES LESS THAN (19208), +PARTITION p2401 VALUES LESS THAN (19216), +PARTITION p2402 VALUES LESS THAN (19224), +PARTITION p2403 VALUES LESS THAN (19232), +PARTITION p2404 VALUES LESS THAN (19240), +PARTITION p2405 VALUES LESS THAN (19248), +PARTITION p2406 VALUES LESS THAN (19256), +PARTITION p2407 VALUES LESS THAN (19264), +PARTITION p2408 VALUES LESS THAN (19272), +PARTITION p2409 VALUES LESS THAN (19280), +PARTITION p2410 VALUES LESS THAN (19288), +PARTITION p2411 VALUES LESS THAN (19296), +PARTITION p2412 VALUES LESS THAN (19304), +PARTITION p2413 VALUES LESS THAN (19312), +PARTITION p2414 VALUES LESS THAN (19320), +PARTITION p2415 VALUES LESS THAN (19328), +PARTITION p2416 VALUES LESS THAN (19336), +PARTITION p2417 VALUES LESS THAN (19344), +PARTITION p2418 VALUES LESS THAN (19352), +PARTITION p2419 VALUES LESS THAN (19360), +PARTITION p2420 VALUES LESS THAN (19368), +PARTITION p2421 VALUES LESS THAN (19376), +PARTITION p2422 VALUES LESS THAN (19384), +PARTITION p2423 VALUES LESS THAN (19392), +PARTITION p2424 VALUES LESS THAN (19400), +PARTITION p2425 VALUES LESS THAN (19408), +PARTITION p2426 VALUES LESS THAN (19416), +PARTITION p2427 VALUES LESS THAN (19424), +PARTITION p2428 VALUES LESS THAN (19432), +PARTITION p2429 VALUES LESS THAN (19440), +PARTITION p2430 VALUES LESS THAN (19448), +PARTITION p2431 VALUES LESS THAN (19456), +PARTITION p2432 VALUES LESS THAN (19464), +PARTITION p2433 VALUES LESS THAN (19472), +PARTITION p2434 VALUES LESS THAN (19480), +PARTITION p2435 VALUES LESS THAN (19488), +PARTITION p2436 VALUES LESS THAN (19496), +PARTITION p2437 VALUES LESS THAN (19504), +PARTITION p2438 VALUES LESS THAN (19512), +PARTITION p2439 VALUES LESS THAN (19520), +PARTITION p2440 VALUES LESS THAN (19528), +PARTITION p2441 VALUES LESS THAN (19536), +PARTITION p2442 VALUES LESS THAN (19544), +PARTITION p2443 VALUES LESS THAN (19552), +PARTITION p2444 VALUES LESS THAN (19560), +PARTITION p2445 VALUES LESS THAN (19568), +PARTITION p2446 VALUES LESS THAN (19576), +PARTITION p2447 VALUES LESS THAN (19584), +PARTITION p2448 VALUES LESS THAN (19592), +PARTITION p2449 VALUES LESS THAN (19600), +PARTITION p2450 VALUES LESS THAN (19608), +PARTITION p2451 VALUES LESS THAN (19616), +PARTITION p2452 VALUES LESS THAN (19624), +PARTITION p2453 VALUES LESS THAN (19632), +PARTITION p2454 VALUES LESS THAN (19640), +PARTITION p2455 VALUES LESS THAN (19648), +PARTITION p2456 VALUES LESS THAN (19656), +PARTITION p2457 VALUES LESS THAN (19664), +PARTITION p2458 VALUES LESS THAN (19672), +PARTITION p2459 VALUES LESS THAN (19680), +PARTITION p2460 VALUES LESS THAN (19688), +PARTITION p2461 VALUES LESS THAN (19696), +PARTITION p2462 VALUES LESS THAN (19704), +PARTITION p2463 VALUES LESS THAN (19712), +PARTITION p2464 VALUES LESS THAN (19720), +PARTITION p2465 VALUES LESS THAN (19728), +PARTITION p2466 VALUES LESS THAN (19736), +PARTITION p2467 VALUES LESS THAN (19744), +PARTITION p2468 VALUES LESS THAN (19752), +PARTITION p2469 VALUES LESS THAN (19760), +PARTITION p2470 VALUES LESS THAN (19768), +PARTITION p2471 VALUES LESS THAN (19776), +PARTITION p2472 VALUES LESS THAN (19784), +PARTITION p2473 VALUES LESS THAN (19792), +PARTITION p2474 VALUES LESS THAN (19800), +PARTITION p2475 VALUES LESS THAN (19808), +PARTITION p2476 VALUES LESS THAN (19816), +PARTITION p2477 VALUES LESS THAN (19824), +PARTITION p2478 VALUES LESS THAN (19832), +PARTITION p2479 VALUES LESS THAN (19840), +PARTITION p2480 VALUES LESS THAN (19848), +PARTITION p2481 VALUES LESS THAN (19856), +PARTITION p2482 VALUES LESS THAN (19864), +PARTITION p2483 VALUES LESS THAN (19872), +PARTITION p2484 VALUES LESS THAN (19880), +PARTITION p2485 VALUES LESS THAN (19888), +PARTITION p2486 VALUES LESS THAN (19896), +PARTITION p2487 VALUES LESS THAN (19904), +PARTITION p2488 VALUES LESS THAN (19912), +PARTITION p2489 VALUES LESS THAN (19920), +PARTITION p2490 VALUES LESS THAN (19928), +PARTITION p2491 VALUES LESS THAN (19936), +PARTITION p2492 VALUES LESS THAN (19944), +PARTITION p2493 VALUES LESS THAN (19952), +PARTITION p2494 VALUES LESS THAN (19960), +PARTITION p2495 VALUES LESS THAN (19968), +PARTITION p2496 VALUES LESS THAN (19976), +PARTITION p2497 VALUES LESS THAN (19984), +PARTITION p2498 VALUES LESS THAN (19992), +PARTITION p2499 VALUES LESS THAN (20000), +PARTITION p2500 VALUES LESS THAN (20008), +PARTITION p2501 VALUES LESS THAN (20016), +PARTITION p2502 VALUES LESS THAN (20024), +PARTITION p2503 VALUES LESS THAN (20032), +PARTITION p2504 VALUES LESS THAN (20040), +PARTITION p2505 VALUES LESS THAN (20048), +PARTITION p2506 VALUES LESS THAN (20056), +PARTITION p2507 VALUES LESS THAN (20064), +PARTITION p2508 VALUES LESS THAN (20072), +PARTITION p2509 VALUES LESS THAN (20080), +PARTITION p2510 VALUES LESS THAN (20088), +PARTITION p2511 VALUES LESS THAN (20096), +PARTITION p2512 VALUES LESS THAN (20104), +PARTITION p2513 VALUES LESS THAN (20112), +PARTITION p2514 VALUES LESS THAN (20120), +PARTITION p2515 VALUES LESS THAN (20128), +PARTITION p2516 VALUES LESS THAN (20136), +PARTITION p2517 VALUES LESS THAN (20144), +PARTITION p2518 VALUES LESS THAN (20152), +PARTITION p2519 VALUES LESS THAN (20160), +PARTITION p2520 VALUES LESS THAN (20168), +PARTITION p2521 VALUES LESS THAN (20176), +PARTITION p2522 VALUES LESS THAN (20184), +PARTITION p2523 VALUES LESS THAN (20192), +PARTITION p2524 VALUES LESS THAN (20200), +PARTITION p2525 VALUES LESS THAN (20208), +PARTITION p2526 VALUES LESS THAN (20216), +PARTITION p2527 VALUES LESS THAN (20224), +PARTITION p2528 VALUES LESS THAN (20232), +PARTITION p2529 VALUES LESS THAN (20240), +PARTITION p2530 VALUES LESS THAN (20248), +PARTITION p2531 VALUES LESS THAN (20256), +PARTITION p2532 VALUES LESS THAN (20264), +PARTITION p2533 VALUES LESS THAN (20272), +PARTITION p2534 VALUES LESS THAN (20280), +PARTITION p2535 VALUES LESS THAN (20288), +PARTITION p2536 VALUES LESS THAN (20296), +PARTITION p2537 VALUES LESS THAN (20304), +PARTITION p2538 VALUES LESS THAN (20312), +PARTITION p2539 VALUES LESS THAN (20320), +PARTITION p2540 VALUES LESS THAN (20328), +PARTITION p2541 VALUES LESS THAN (20336), +PARTITION p2542 VALUES LESS THAN (20344), +PARTITION p2543 VALUES LESS THAN (20352), +PARTITION p2544 VALUES LESS THAN (20360), +PARTITION p2545 VALUES LESS THAN (20368), +PARTITION p2546 VALUES LESS THAN (20376), +PARTITION p2547 VALUES LESS THAN (20384), +PARTITION p2548 VALUES LESS THAN (20392), +PARTITION p2549 VALUES LESS THAN (20400), +PARTITION p2550 VALUES LESS THAN (20408), +PARTITION p2551 VALUES LESS THAN (20416), +PARTITION p2552 VALUES LESS THAN (20424), +PARTITION p2553 VALUES LESS THAN (20432), +PARTITION p2554 VALUES LESS THAN (20440), +PARTITION p2555 VALUES LESS THAN (20448), +PARTITION p2556 VALUES LESS THAN (20456), +PARTITION p2557 VALUES LESS THAN (20464), +PARTITION p2558 VALUES LESS THAN (20472), +PARTITION p2559 VALUES LESS THAN (20480), +PARTITION p2560 VALUES LESS THAN (20488), +PARTITION p2561 VALUES LESS THAN (20496), +PARTITION p2562 VALUES LESS THAN (20504), +PARTITION p2563 VALUES LESS THAN (20512), +PARTITION p2564 VALUES LESS THAN (20520), +PARTITION p2565 VALUES LESS THAN (20528), +PARTITION p2566 VALUES LESS THAN (20536), +PARTITION p2567 VALUES LESS THAN (20544), +PARTITION p2568 VALUES LESS THAN (20552), +PARTITION p2569 VALUES LESS THAN (20560), +PARTITION p2570 VALUES LESS THAN (20568), +PARTITION p2571 VALUES LESS THAN (20576), +PARTITION p2572 VALUES LESS THAN (20584), +PARTITION p2573 VALUES LESS THAN (20592), +PARTITION p2574 VALUES LESS THAN (20600), +PARTITION p2575 VALUES LESS THAN (20608), +PARTITION p2576 VALUES LESS THAN (20616), +PARTITION p2577 VALUES LESS THAN (20624), +PARTITION p2578 VALUES LESS THAN (20632), +PARTITION p2579 VALUES LESS THAN (20640), +PARTITION p2580 VALUES LESS THAN (20648), +PARTITION p2581 VALUES LESS THAN (20656), +PARTITION p2582 VALUES LESS THAN (20664), +PARTITION p2583 VALUES LESS THAN (20672), +PARTITION p2584 VALUES LESS THAN (20680), +PARTITION p2585 VALUES LESS THAN (20688), +PARTITION p2586 VALUES LESS THAN (20696), +PARTITION p2587 VALUES LESS THAN (20704), +PARTITION p2588 VALUES LESS THAN (20712), +PARTITION p2589 VALUES LESS THAN (20720), +PARTITION p2590 VALUES LESS THAN (20728), +PARTITION p2591 VALUES LESS THAN (20736), +PARTITION p2592 VALUES LESS THAN (20744), +PARTITION p2593 VALUES LESS THAN (20752), +PARTITION p2594 VALUES LESS THAN (20760), +PARTITION p2595 VALUES LESS THAN (20768), +PARTITION p2596 VALUES LESS THAN (20776), +PARTITION p2597 VALUES LESS THAN (20784), +PARTITION p2598 VALUES LESS THAN (20792), +PARTITION p2599 VALUES LESS THAN (20800), +PARTITION p2600 VALUES LESS THAN (20808), +PARTITION p2601 VALUES LESS THAN (20816), +PARTITION p2602 VALUES LESS THAN (20824), +PARTITION p2603 VALUES LESS THAN (20832), +PARTITION p2604 VALUES LESS THAN (20840), +PARTITION p2605 VALUES LESS THAN (20848), +PARTITION p2606 VALUES LESS THAN (20856), +PARTITION p2607 VALUES LESS THAN (20864), +PARTITION p2608 VALUES LESS THAN (20872), +PARTITION p2609 VALUES LESS THAN (20880), +PARTITION p2610 VALUES LESS THAN (20888), +PARTITION p2611 VALUES LESS THAN (20896), +PARTITION p2612 VALUES LESS THAN (20904), +PARTITION p2613 VALUES LESS THAN (20912), +PARTITION p2614 VALUES LESS THAN (20920), +PARTITION p2615 VALUES LESS THAN (20928), +PARTITION p2616 VALUES LESS THAN (20936), +PARTITION p2617 VALUES LESS THAN (20944), +PARTITION p2618 VALUES LESS THAN (20952), +PARTITION p2619 VALUES LESS THAN (20960), +PARTITION p2620 VALUES LESS THAN (20968), +PARTITION p2621 VALUES LESS THAN (20976), +PARTITION p2622 VALUES LESS THAN (20984), +PARTITION p2623 VALUES LESS THAN (20992), +PARTITION p2624 VALUES LESS THAN (21000), +PARTITION p2625 VALUES LESS THAN (21008), +PARTITION p2626 VALUES LESS THAN (21016), +PARTITION p2627 VALUES LESS THAN (21024), +PARTITION p2628 VALUES LESS THAN (21032), +PARTITION p2629 VALUES LESS THAN (21040), +PARTITION p2630 VALUES LESS THAN (21048), +PARTITION p2631 VALUES LESS THAN (21056), +PARTITION p2632 VALUES LESS THAN (21064), +PARTITION p2633 VALUES LESS THAN (21072), +PARTITION p2634 VALUES LESS THAN (21080), +PARTITION p2635 VALUES LESS THAN (21088), +PARTITION p2636 VALUES LESS THAN (21096), +PARTITION p2637 VALUES LESS THAN (21104), +PARTITION p2638 VALUES LESS THAN (21112), +PARTITION p2639 VALUES LESS THAN (21120), +PARTITION p2640 VALUES LESS THAN (21128), +PARTITION p2641 VALUES LESS THAN (21136), +PARTITION p2642 VALUES LESS THAN (21144), +PARTITION p2643 VALUES LESS THAN (21152), +PARTITION p2644 VALUES LESS THAN (21160), +PARTITION p2645 VALUES LESS THAN (21168), +PARTITION p2646 VALUES LESS THAN (21176), +PARTITION p2647 VALUES LESS THAN (21184), +PARTITION p2648 VALUES LESS THAN (21192), +PARTITION p2649 VALUES LESS THAN (21200), +PARTITION p2650 VALUES LESS THAN (21208), +PARTITION p2651 VALUES LESS THAN (21216), +PARTITION p2652 VALUES LESS THAN (21224), +PARTITION p2653 VALUES LESS THAN (21232), +PARTITION p2654 VALUES LESS THAN (21240), +PARTITION p2655 VALUES LESS THAN (21248), +PARTITION p2656 VALUES LESS THAN (21256), +PARTITION p2657 VALUES LESS THAN (21264), +PARTITION p2658 VALUES LESS THAN (21272), +PARTITION p2659 VALUES LESS THAN (21280), +PARTITION p2660 VALUES LESS THAN (21288), +PARTITION p2661 VALUES LESS THAN (21296), +PARTITION p2662 VALUES LESS THAN (21304), +PARTITION p2663 VALUES LESS THAN (21312), +PARTITION p2664 VALUES LESS THAN (21320), +PARTITION p2665 VALUES LESS THAN (21328), +PARTITION p2666 VALUES LESS THAN (21336), +PARTITION p2667 VALUES LESS THAN (21344), +PARTITION p2668 VALUES LESS THAN (21352), +PARTITION p2669 VALUES LESS THAN (21360), +PARTITION p2670 VALUES LESS THAN (21368), +PARTITION p2671 VALUES LESS THAN (21376), +PARTITION p2672 VALUES LESS THAN (21384), +PARTITION p2673 VALUES LESS THAN (21392), +PARTITION p2674 VALUES LESS THAN (21400), +PARTITION p2675 VALUES LESS THAN (21408), +PARTITION p2676 VALUES LESS THAN (21416), +PARTITION p2677 VALUES LESS THAN (21424), +PARTITION p2678 VALUES LESS THAN (21432), +PARTITION p2679 VALUES LESS THAN (21440), +PARTITION p2680 VALUES LESS THAN (21448), +PARTITION p2681 VALUES LESS THAN (21456), +PARTITION p2682 VALUES LESS THAN (21464), +PARTITION p2683 VALUES LESS THAN (21472), +PARTITION p2684 VALUES LESS THAN (21480), +PARTITION p2685 VALUES LESS THAN (21488), +PARTITION p2686 VALUES LESS THAN (21496), +PARTITION p2687 VALUES LESS THAN (21504), +PARTITION p2688 VALUES LESS THAN (21512), +PARTITION p2689 VALUES LESS THAN (21520), +PARTITION p2690 VALUES LESS THAN (21528), +PARTITION p2691 VALUES LESS THAN (21536), +PARTITION p2692 VALUES LESS THAN (21544), +PARTITION p2693 VALUES LESS THAN (21552), +PARTITION p2694 VALUES LESS THAN (21560), +PARTITION p2695 VALUES LESS THAN (21568), +PARTITION p2696 VALUES LESS THAN (21576), +PARTITION p2697 VALUES LESS THAN (21584), +PARTITION p2698 VALUES LESS THAN (21592), +PARTITION p2699 VALUES LESS THAN (21600), +PARTITION p2700 VALUES LESS THAN (21608), +PARTITION p2701 VALUES LESS THAN (21616), +PARTITION p2702 VALUES LESS THAN (21624), +PARTITION p2703 VALUES LESS THAN (21632), +PARTITION p2704 VALUES LESS THAN (21640), +PARTITION p2705 VALUES LESS THAN (21648), +PARTITION p2706 VALUES LESS THAN (21656), +PARTITION p2707 VALUES LESS THAN (21664), +PARTITION p2708 VALUES LESS THAN (21672), +PARTITION p2709 VALUES LESS THAN (21680), +PARTITION p2710 VALUES LESS THAN (21688), +PARTITION p2711 VALUES LESS THAN (21696), +PARTITION p2712 VALUES LESS THAN (21704), +PARTITION p2713 VALUES LESS THAN (21712), +PARTITION p2714 VALUES LESS THAN (21720), +PARTITION p2715 VALUES LESS THAN (21728), +PARTITION p2716 VALUES LESS THAN (21736), +PARTITION p2717 VALUES LESS THAN (21744), +PARTITION p2718 VALUES LESS THAN (21752), +PARTITION p2719 VALUES LESS THAN (21760), +PARTITION p2720 VALUES LESS THAN (21768), +PARTITION p2721 VALUES LESS THAN (21776), +PARTITION p2722 VALUES LESS THAN (21784), +PARTITION p2723 VALUES LESS THAN (21792), +PARTITION p2724 VALUES LESS THAN (21800), +PARTITION p2725 VALUES LESS THAN (21808), +PARTITION p2726 VALUES LESS THAN (21816), +PARTITION p2727 VALUES LESS THAN (21824), +PARTITION p2728 VALUES LESS THAN (21832), +PARTITION p2729 VALUES LESS THAN (21840), +PARTITION p2730 VALUES LESS THAN (21848), +PARTITION p2731 VALUES LESS THAN (21856), +PARTITION p2732 VALUES LESS THAN (21864), +PARTITION p2733 VALUES LESS THAN (21872), +PARTITION p2734 VALUES LESS THAN (21880), +PARTITION p2735 VALUES LESS THAN (21888), +PARTITION p2736 VALUES LESS THAN (21896), +PARTITION p2737 VALUES LESS THAN (21904), +PARTITION p2738 VALUES LESS THAN (21912), +PARTITION p2739 VALUES LESS THAN (21920), +PARTITION p2740 VALUES LESS THAN (21928), +PARTITION p2741 VALUES LESS THAN (21936), +PARTITION p2742 VALUES LESS THAN (21944), +PARTITION p2743 VALUES LESS THAN (21952), +PARTITION p2744 VALUES LESS THAN (21960), +PARTITION p2745 VALUES LESS THAN (21968), +PARTITION p2746 VALUES LESS THAN (21976), +PARTITION p2747 VALUES LESS THAN (21984), +PARTITION p2748 VALUES LESS THAN (21992), +PARTITION p2749 VALUES LESS THAN (22000), +PARTITION p2750 VALUES LESS THAN (22008), +PARTITION p2751 VALUES LESS THAN (22016), +PARTITION p2752 VALUES LESS THAN (22024), +PARTITION p2753 VALUES LESS THAN (22032), +PARTITION p2754 VALUES LESS THAN (22040), +PARTITION p2755 VALUES LESS THAN (22048), +PARTITION p2756 VALUES LESS THAN (22056), +PARTITION p2757 VALUES LESS THAN (22064), +PARTITION p2758 VALUES LESS THAN (22072), +PARTITION p2759 VALUES LESS THAN (22080), +PARTITION p2760 VALUES LESS THAN (22088), +PARTITION p2761 VALUES LESS THAN (22096), +PARTITION p2762 VALUES LESS THAN (22104), +PARTITION p2763 VALUES LESS THAN (22112), +PARTITION p2764 VALUES LESS THAN (22120), +PARTITION p2765 VALUES LESS THAN (22128), +PARTITION p2766 VALUES LESS THAN (22136), +PARTITION p2767 VALUES LESS THAN (22144), +PARTITION p2768 VALUES LESS THAN (22152), +PARTITION p2769 VALUES LESS THAN (22160), +PARTITION p2770 VALUES LESS THAN (22168), +PARTITION p2771 VALUES LESS THAN (22176), +PARTITION p2772 VALUES LESS THAN (22184), +PARTITION p2773 VALUES LESS THAN (22192), +PARTITION p2774 VALUES LESS THAN (22200), +PARTITION p2775 VALUES LESS THAN (22208), +PARTITION p2776 VALUES LESS THAN (22216), +PARTITION p2777 VALUES LESS THAN (22224), +PARTITION p2778 VALUES LESS THAN (22232), +PARTITION p2779 VALUES LESS THAN (22240), +PARTITION p2780 VALUES LESS THAN (22248), +PARTITION p2781 VALUES LESS THAN (22256), +PARTITION p2782 VALUES LESS THAN (22264), +PARTITION p2783 VALUES LESS THAN (22272), +PARTITION p2784 VALUES LESS THAN (22280), +PARTITION p2785 VALUES LESS THAN (22288), +PARTITION p2786 VALUES LESS THAN (22296), +PARTITION p2787 VALUES LESS THAN (22304), +PARTITION p2788 VALUES LESS THAN (22312), +PARTITION p2789 VALUES LESS THAN (22320), +PARTITION p2790 VALUES LESS THAN (22328), +PARTITION p2791 VALUES LESS THAN (22336), +PARTITION p2792 VALUES LESS THAN (22344), +PARTITION p2793 VALUES LESS THAN (22352), +PARTITION p2794 VALUES LESS THAN (22360), +PARTITION p2795 VALUES LESS THAN (22368), +PARTITION p2796 VALUES LESS THAN (22376), +PARTITION p2797 VALUES LESS THAN (22384), +PARTITION p2798 VALUES LESS THAN (22392), +PARTITION p2799 VALUES LESS THAN (22400), +PARTITION p2800 VALUES LESS THAN (22408), +PARTITION p2801 VALUES LESS THAN (22416), +PARTITION p2802 VALUES LESS THAN (22424), +PARTITION p2803 VALUES LESS THAN (22432), +PARTITION p2804 VALUES LESS THAN (22440), +PARTITION p2805 VALUES LESS THAN (22448), +PARTITION p2806 VALUES LESS THAN (22456), +PARTITION p2807 VALUES LESS THAN (22464), +PARTITION p2808 VALUES LESS THAN (22472), +PARTITION p2809 VALUES LESS THAN (22480), +PARTITION p2810 VALUES LESS THAN (22488), +PARTITION p2811 VALUES LESS THAN (22496), +PARTITION p2812 VALUES LESS THAN (22504), +PARTITION p2813 VALUES LESS THAN (22512), +PARTITION p2814 VALUES LESS THAN (22520), +PARTITION p2815 VALUES LESS THAN (22528), +PARTITION p2816 VALUES LESS THAN (22536), +PARTITION p2817 VALUES LESS THAN (22544), +PARTITION p2818 VALUES LESS THAN (22552), +PARTITION p2819 VALUES LESS THAN (22560), +PARTITION p2820 VALUES LESS THAN (22568), +PARTITION p2821 VALUES LESS THAN (22576), +PARTITION p2822 VALUES LESS THAN (22584), +PARTITION p2823 VALUES LESS THAN (22592), +PARTITION p2824 VALUES LESS THAN (22600), +PARTITION p2825 VALUES LESS THAN (22608), +PARTITION p2826 VALUES LESS THAN (22616), +PARTITION p2827 VALUES LESS THAN (22624), +PARTITION p2828 VALUES LESS THAN (22632), +PARTITION p2829 VALUES LESS THAN (22640), +PARTITION p2830 VALUES LESS THAN (22648), +PARTITION p2831 VALUES LESS THAN (22656), +PARTITION p2832 VALUES LESS THAN (22664), +PARTITION p2833 VALUES LESS THAN (22672), +PARTITION p2834 VALUES LESS THAN (22680), +PARTITION p2835 VALUES LESS THAN (22688), +PARTITION p2836 VALUES LESS THAN (22696), +PARTITION p2837 VALUES LESS THAN (22704), +PARTITION p2838 VALUES LESS THAN (22712), +PARTITION p2839 VALUES LESS THAN (22720), +PARTITION p2840 VALUES LESS THAN (22728), +PARTITION p2841 VALUES LESS THAN (22736), +PARTITION p2842 VALUES LESS THAN (22744), +PARTITION p2843 VALUES LESS THAN (22752), +PARTITION p2844 VALUES LESS THAN (22760), +PARTITION p2845 VALUES LESS THAN (22768), +PARTITION p2846 VALUES LESS THAN (22776), +PARTITION p2847 VALUES LESS THAN (22784), +PARTITION p2848 VALUES LESS THAN (22792), +PARTITION p2849 VALUES LESS THAN (22800), +PARTITION p2850 VALUES LESS THAN (22808), +PARTITION p2851 VALUES LESS THAN (22816), +PARTITION p2852 VALUES LESS THAN (22824), +PARTITION p2853 VALUES LESS THAN (22832), +PARTITION p2854 VALUES LESS THAN (22840), +PARTITION p2855 VALUES LESS THAN (22848), +PARTITION p2856 VALUES LESS THAN (22856), +PARTITION p2857 VALUES LESS THAN (22864), +PARTITION p2858 VALUES LESS THAN (22872), +PARTITION p2859 VALUES LESS THAN (22880), +PARTITION p2860 VALUES LESS THAN (22888), +PARTITION p2861 VALUES LESS THAN (22896), +PARTITION p2862 VALUES LESS THAN (22904), +PARTITION p2863 VALUES LESS THAN (22912), +PARTITION p2864 VALUES LESS THAN (22920), +PARTITION p2865 VALUES LESS THAN (22928), +PARTITION p2866 VALUES LESS THAN (22936), +PARTITION p2867 VALUES LESS THAN (22944), +PARTITION p2868 VALUES LESS THAN (22952), +PARTITION p2869 VALUES LESS THAN (22960), +PARTITION p2870 VALUES LESS THAN (22968), +PARTITION p2871 VALUES LESS THAN (22976), +PARTITION p2872 VALUES LESS THAN (22984), +PARTITION p2873 VALUES LESS THAN (22992), +PARTITION p2874 VALUES LESS THAN (23000), +PARTITION p2875 VALUES LESS THAN (23008), +PARTITION p2876 VALUES LESS THAN (23016), +PARTITION p2877 VALUES LESS THAN (23024), +PARTITION p2878 VALUES LESS THAN (23032), +PARTITION p2879 VALUES LESS THAN (23040), +PARTITION p2880 VALUES LESS THAN (23048), +PARTITION p2881 VALUES LESS THAN (23056), +PARTITION p2882 VALUES LESS THAN (23064), +PARTITION p2883 VALUES LESS THAN (23072), +PARTITION p2884 VALUES LESS THAN (23080), +PARTITION p2885 VALUES LESS THAN (23088), +PARTITION p2886 VALUES LESS THAN (23096), +PARTITION p2887 VALUES LESS THAN (23104), +PARTITION p2888 VALUES LESS THAN (23112), +PARTITION p2889 VALUES LESS THAN (23120), +PARTITION p2890 VALUES LESS THAN (23128), +PARTITION p2891 VALUES LESS THAN (23136), +PARTITION p2892 VALUES LESS THAN (23144), +PARTITION p2893 VALUES LESS THAN (23152), +PARTITION p2894 VALUES LESS THAN (23160), +PARTITION p2895 VALUES LESS THAN (23168), +PARTITION p2896 VALUES LESS THAN (23176), +PARTITION p2897 VALUES LESS THAN (23184), +PARTITION p2898 VALUES LESS THAN (23192), +PARTITION p2899 VALUES LESS THAN (23200), +PARTITION p2900 VALUES LESS THAN (23208), +PARTITION p2901 VALUES LESS THAN (23216), +PARTITION p2902 VALUES LESS THAN (23224), +PARTITION p2903 VALUES LESS THAN (23232), +PARTITION p2904 VALUES LESS THAN (23240), +PARTITION p2905 VALUES LESS THAN (23248), +PARTITION p2906 VALUES LESS THAN (23256), +PARTITION p2907 VALUES LESS THAN (23264), +PARTITION p2908 VALUES LESS THAN (23272), +PARTITION p2909 VALUES LESS THAN (23280), +PARTITION p2910 VALUES LESS THAN (23288), +PARTITION p2911 VALUES LESS THAN (23296), +PARTITION p2912 VALUES LESS THAN (23304), +PARTITION p2913 VALUES LESS THAN (23312), +PARTITION p2914 VALUES LESS THAN (23320), +PARTITION p2915 VALUES LESS THAN (23328), +PARTITION p2916 VALUES LESS THAN (23336), +PARTITION p2917 VALUES LESS THAN (23344), +PARTITION p2918 VALUES LESS THAN (23352), +PARTITION p2919 VALUES LESS THAN (23360), +PARTITION p2920 VALUES LESS THAN (23368), +PARTITION p2921 VALUES LESS THAN (23376), +PARTITION p2922 VALUES LESS THAN (23384), +PARTITION p2923 VALUES LESS THAN (23392), +PARTITION p2924 VALUES LESS THAN (23400), +PARTITION p2925 VALUES LESS THAN (23408), +PARTITION p2926 VALUES LESS THAN (23416), +PARTITION p2927 VALUES LESS THAN (23424), +PARTITION p2928 VALUES LESS THAN (23432), +PARTITION p2929 VALUES LESS THAN (23440), +PARTITION p2930 VALUES LESS THAN (23448), +PARTITION p2931 VALUES LESS THAN (23456), +PARTITION p2932 VALUES LESS THAN (23464), +PARTITION p2933 VALUES LESS THAN (23472), +PARTITION p2934 VALUES LESS THAN (23480), +PARTITION p2935 VALUES LESS THAN (23488), +PARTITION p2936 VALUES LESS THAN (23496), +PARTITION p2937 VALUES LESS THAN (23504), +PARTITION p2938 VALUES LESS THAN (23512), +PARTITION p2939 VALUES LESS THAN (23520), +PARTITION p2940 VALUES LESS THAN (23528), +PARTITION p2941 VALUES LESS THAN (23536), +PARTITION p2942 VALUES LESS THAN (23544), +PARTITION p2943 VALUES LESS THAN (23552), +PARTITION p2944 VALUES LESS THAN (23560), +PARTITION p2945 VALUES LESS THAN (23568), +PARTITION p2946 VALUES LESS THAN (23576), +PARTITION p2947 VALUES LESS THAN (23584), +PARTITION p2948 VALUES LESS THAN (23592), +PARTITION p2949 VALUES LESS THAN (23600), +PARTITION p2950 VALUES LESS THAN (23608), +PARTITION p2951 VALUES LESS THAN (23616), +PARTITION p2952 VALUES LESS THAN (23624), +PARTITION p2953 VALUES LESS THAN (23632), +PARTITION p2954 VALUES LESS THAN (23640), +PARTITION p2955 VALUES LESS THAN (23648), +PARTITION p2956 VALUES LESS THAN (23656), +PARTITION p2957 VALUES LESS THAN (23664), +PARTITION p2958 VALUES LESS THAN (23672), +PARTITION p2959 VALUES LESS THAN (23680), +PARTITION p2960 VALUES LESS THAN (23688), +PARTITION p2961 VALUES LESS THAN (23696), +PARTITION p2962 VALUES LESS THAN (23704), +PARTITION p2963 VALUES LESS THAN (23712), +PARTITION p2964 VALUES LESS THAN (23720), +PARTITION p2965 VALUES LESS THAN (23728), +PARTITION p2966 VALUES LESS THAN (23736), +PARTITION p2967 VALUES LESS THAN (23744), +PARTITION p2968 VALUES LESS THAN (23752), +PARTITION p2969 VALUES LESS THAN (23760), +PARTITION p2970 VALUES LESS THAN (23768), +PARTITION p2971 VALUES LESS THAN (23776), +PARTITION p2972 VALUES LESS THAN (23784), +PARTITION p2973 VALUES LESS THAN (23792), +PARTITION p2974 VALUES LESS THAN (23800), +PARTITION p2975 VALUES LESS THAN (23808), +PARTITION p2976 VALUES LESS THAN (23816), +PARTITION p2977 VALUES LESS THAN (23824), +PARTITION p2978 VALUES LESS THAN (23832), +PARTITION p2979 VALUES LESS THAN (23840), +PARTITION p2980 VALUES LESS THAN (23848), +PARTITION p2981 VALUES LESS THAN (23856), +PARTITION p2982 VALUES LESS THAN (23864), +PARTITION p2983 VALUES LESS THAN (23872), +PARTITION p2984 VALUES LESS THAN (23880), +PARTITION p2985 VALUES LESS THAN (23888), +PARTITION p2986 VALUES LESS THAN (23896), +PARTITION p2987 VALUES LESS THAN (23904), +PARTITION p2988 VALUES LESS THAN (23912), +PARTITION p2989 VALUES LESS THAN (23920), +PARTITION p2990 VALUES LESS THAN (23928), +PARTITION p2991 VALUES LESS THAN (23936), +PARTITION p2992 VALUES LESS THAN (23944), +PARTITION p2993 VALUES LESS THAN (23952), +PARTITION p2994 VALUES LESS THAN (23960), +PARTITION p2995 VALUES LESS THAN (23968), +PARTITION p2996 VALUES LESS THAN (23976), +PARTITION p2997 VALUES LESS THAN (23984), +PARTITION p2998 VALUES LESS THAN (23992), +PARTITION p2999 VALUES LESS THAN (24000), +PARTITION p3000 VALUES LESS THAN (24008), +PARTITION p3001 VALUES LESS THAN (24016), +PARTITION p3002 VALUES LESS THAN (24024), +PARTITION p3003 VALUES LESS THAN (24032), +PARTITION p3004 VALUES LESS THAN (24040), +PARTITION p3005 VALUES LESS THAN (24048), +PARTITION p3006 VALUES LESS THAN (24056), +PARTITION p3007 VALUES LESS THAN (24064), +PARTITION p3008 VALUES LESS THAN (24072), +PARTITION p3009 VALUES LESS THAN (24080), +PARTITION p3010 VALUES LESS THAN (24088), +PARTITION p3011 VALUES LESS THAN (24096), +PARTITION p3012 VALUES LESS THAN (24104), +PARTITION p3013 VALUES LESS THAN (24112), +PARTITION p3014 VALUES LESS THAN (24120), +PARTITION p3015 VALUES LESS THAN (24128), +PARTITION p3016 VALUES LESS THAN (24136), +PARTITION p3017 VALUES LESS THAN (24144), +PARTITION p3018 VALUES LESS THAN (24152), +PARTITION p3019 VALUES LESS THAN (24160), +PARTITION p3020 VALUES LESS THAN (24168), +PARTITION p3021 VALUES LESS THAN (24176), +PARTITION p3022 VALUES LESS THAN (24184), +PARTITION p3023 VALUES LESS THAN (24192), +PARTITION p3024 VALUES LESS THAN (24200), +PARTITION p3025 VALUES LESS THAN (24208), +PARTITION p3026 VALUES LESS THAN (24216), +PARTITION p3027 VALUES LESS THAN (24224), +PARTITION p3028 VALUES LESS THAN (24232), +PARTITION p3029 VALUES LESS THAN (24240), +PARTITION p3030 VALUES LESS THAN (24248), +PARTITION p3031 VALUES LESS THAN (24256), +PARTITION p3032 VALUES LESS THAN (24264), +PARTITION p3033 VALUES LESS THAN (24272), +PARTITION p3034 VALUES LESS THAN (24280), +PARTITION p3035 VALUES LESS THAN (24288), +PARTITION p3036 VALUES LESS THAN (24296), +PARTITION p3037 VALUES LESS THAN (24304), +PARTITION p3038 VALUES LESS THAN (24312), +PARTITION p3039 VALUES LESS THAN (24320), +PARTITION p3040 VALUES LESS THAN (24328), +PARTITION p3041 VALUES LESS THAN (24336), +PARTITION p3042 VALUES LESS THAN (24344), +PARTITION p3043 VALUES LESS THAN (24352), +PARTITION p3044 VALUES LESS THAN (24360), +PARTITION p3045 VALUES LESS THAN (24368), +PARTITION p3046 VALUES LESS THAN (24376), +PARTITION p3047 VALUES LESS THAN (24384), +PARTITION p3048 VALUES LESS THAN (24392), +PARTITION p3049 VALUES LESS THAN (24400), +PARTITION p3050 VALUES LESS THAN (24408), +PARTITION p3051 VALUES LESS THAN (24416), +PARTITION p3052 VALUES LESS THAN (24424), +PARTITION p3053 VALUES LESS THAN (24432), +PARTITION p3054 VALUES LESS THAN (24440), +PARTITION p3055 VALUES LESS THAN (24448), +PARTITION p3056 VALUES LESS THAN (24456), +PARTITION p3057 VALUES LESS THAN (24464), +PARTITION p3058 VALUES LESS THAN (24472), +PARTITION p3059 VALUES LESS THAN (24480), +PARTITION p3060 VALUES LESS THAN (24488), +PARTITION p3061 VALUES LESS THAN (24496), +PARTITION p3062 VALUES LESS THAN (24504), +PARTITION p3063 VALUES LESS THAN (24512), +PARTITION p3064 VALUES LESS THAN (24520), +PARTITION p3065 VALUES LESS THAN (24528), +PARTITION p3066 VALUES LESS THAN (24536), +PARTITION p3067 VALUES LESS THAN (24544), +PARTITION p3068 VALUES LESS THAN (24552), +PARTITION p3069 VALUES LESS THAN (24560), +PARTITION p3070 VALUES LESS THAN (24568), +PARTITION p3071 VALUES LESS THAN (24576), +PARTITION p3072 VALUES LESS THAN (24584), +PARTITION p3073 VALUES LESS THAN (24592), +PARTITION p3074 VALUES LESS THAN (24600), +PARTITION p3075 VALUES LESS THAN (24608), +PARTITION p3076 VALUES LESS THAN (24616), +PARTITION p3077 VALUES LESS THAN (24624), +PARTITION p3078 VALUES LESS THAN (24632), +PARTITION p3079 VALUES LESS THAN (24640), +PARTITION p3080 VALUES LESS THAN (24648), +PARTITION p3081 VALUES LESS THAN (24656), +PARTITION p3082 VALUES LESS THAN (24664), +PARTITION p3083 VALUES LESS THAN (24672), +PARTITION p3084 VALUES LESS THAN (24680), +PARTITION p3085 VALUES LESS THAN (24688), +PARTITION p3086 VALUES LESS THAN (24696), +PARTITION p3087 VALUES LESS THAN (24704), +PARTITION p3088 VALUES LESS THAN (24712), +PARTITION p3089 VALUES LESS THAN (24720), +PARTITION p3090 VALUES LESS THAN (24728), +PARTITION p3091 VALUES LESS THAN (24736), +PARTITION p3092 VALUES LESS THAN (24744), +PARTITION p3093 VALUES LESS THAN (24752), +PARTITION p3094 VALUES LESS THAN (24760), +PARTITION p3095 VALUES LESS THAN (24768), +PARTITION p3096 VALUES LESS THAN (24776), +PARTITION p3097 VALUES LESS THAN (24784), +PARTITION p3098 VALUES LESS THAN (24792), +PARTITION p3099 VALUES LESS THAN (24800), +PARTITION p3100 VALUES LESS THAN (24808), +PARTITION p3101 VALUES LESS THAN (24816), +PARTITION p3102 VALUES LESS THAN (24824), +PARTITION p3103 VALUES LESS THAN (24832), +PARTITION p3104 VALUES LESS THAN (24840), +PARTITION p3105 VALUES LESS THAN (24848), +PARTITION p3106 VALUES LESS THAN (24856), +PARTITION p3107 VALUES LESS THAN (24864), +PARTITION p3108 VALUES LESS THAN (24872), +PARTITION p3109 VALUES LESS THAN (24880), +PARTITION p3110 VALUES LESS THAN (24888), +PARTITION p3111 VALUES LESS THAN (24896), +PARTITION p3112 VALUES LESS THAN (24904), +PARTITION p3113 VALUES LESS THAN (24912), +PARTITION p3114 VALUES LESS THAN (24920), +PARTITION p3115 VALUES LESS THAN (24928), +PARTITION p3116 VALUES LESS THAN (24936), +PARTITION p3117 VALUES LESS THAN (24944), +PARTITION p3118 VALUES LESS THAN (24952), +PARTITION p3119 VALUES LESS THAN (24960), +PARTITION p3120 VALUES LESS THAN (24968), +PARTITION p3121 VALUES LESS THAN (24976), +PARTITION p3122 VALUES LESS THAN (24984), +PARTITION p3123 VALUES LESS THAN (24992), +PARTITION p3124 VALUES LESS THAN (25000), +PARTITION p3125 VALUES LESS THAN (25008), +PARTITION p3126 VALUES LESS THAN (25016), +PARTITION p3127 VALUES LESS THAN (25024), +PARTITION p3128 VALUES LESS THAN (25032), +PARTITION p3129 VALUES LESS THAN (25040), +PARTITION p3130 VALUES LESS THAN (25048), +PARTITION p3131 VALUES LESS THAN (25056), +PARTITION p3132 VALUES LESS THAN (25064), +PARTITION p3133 VALUES LESS THAN (25072), +PARTITION p3134 VALUES LESS THAN (25080), +PARTITION p3135 VALUES LESS THAN (25088), +PARTITION p3136 VALUES LESS THAN (25096), +PARTITION p3137 VALUES LESS THAN (25104), +PARTITION p3138 VALUES LESS THAN (25112), +PARTITION p3139 VALUES LESS THAN (25120), +PARTITION p3140 VALUES LESS THAN (25128), +PARTITION p3141 VALUES LESS THAN (25136), +PARTITION p3142 VALUES LESS THAN (25144), +PARTITION p3143 VALUES LESS THAN (25152), +PARTITION p3144 VALUES LESS THAN (25160), +PARTITION p3145 VALUES LESS THAN (25168), +PARTITION p3146 VALUES LESS THAN (25176), +PARTITION p3147 VALUES LESS THAN (25184), +PARTITION p3148 VALUES LESS THAN (25192), +PARTITION p3149 VALUES LESS THAN (25200), +PARTITION p3150 VALUES LESS THAN (25208), +PARTITION p3151 VALUES LESS THAN (25216), +PARTITION p3152 VALUES LESS THAN (25224), +PARTITION p3153 VALUES LESS THAN (25232), +PARTITION p3154 VALUES LESS THAN (25240), +PARTITION p3155 VALUES LESS THAN (25248), +PARTITION p3156 VALUES LESS THAN (25256), +PARTITION p3157 VALUES LESS THAN (25264), +PARTITION p3158 VALUES LESS THAN (25272), +PARTITION p3159 VALUES LESS THAN (25280), +PARTITION p3160 VALUES LESS THAN (25288), +PARTITION p3161 VALUES LESS THAN (25296), +PARTITION p3162 VALUES LESS THAN (25304), +PARTITION p3163 VALUES LESS THAN (25312), +PARTITION p3164 VALUES LESS THAN (25320), +PARTITION p3165 VALUES LESS THAN (25328), +PARTITION p3166 VALUES LESS THAN (25336), +PARTITION p3167 VALUES LESS THAN (25344), +PARTITION p3168 VALUES LESS THAN (25352), +PARTITION p3169 VALUES LESS THAN (25360), +PARTITION p3170 VALUES LESS THAN (25368), +PARTITION p3171 VALUES LESS THAN (25376), +PARTITION p3172 VALUES LESS THAN (25384), +PARTITION p3173 VALUES LESS THAN (25392), +PARTITION p3174 VALUES LESS THAN (25400), +PARTITION p3175 VALUES LESS THAN (25408), +PARTITION p3176 VALUES LESS THAN (25416), +PARTITION p3177 VALUES LESS THAN (25424), +PARTITION p3178 VALUES LESS THAN (25432), +PARTITION p3179 VALUES LESS THAN (25440), +PARTITION p3180 VALUES LESS THAN (25448), +PARTITION p3181 VALUES LESS THAN (25456), +PARTITION p3182 VALUES LESS THAN (25464), +PARTITION p3183 VALUES LESS THAN (25472), +PARTITION p3184 VALUES LESS THAN (25480), +PARTITION p3185 VALUES LESS THAN (25488), +PARTITION p3186 VALUES LESS THAN (25496), +PARTITION p3187 VALUES LESS THAN (25504), +PARTITION p3188 VALUES LESS THAN (25512), +PARTITION p3189 VALUES LESS THAN (25520), +PARTITION p3190 VALUES LESS THAN (25528), +PARTITION p3191 VALUES LESS THAN (25536), +PARTITION p3192 VALUES LESS THAN (25544), +PARTITION p3193 VALUES LESS THAN (25552), +PARTITION p3194 VALUES LESS THAN (25560), +PARTITION p3195 VALUES LESS THAN (25568), +PARTITION p3196 VALUES LESS THAN (25576), +PARTITION p3197 VALUES LESS THAN (25584), +PARTITION p3198 VALUES LESS THAN (25592), +PARTITION p3199 VALUES LESS THAN (25600), +PARTITION p3200 VALUES LESS THAN (25608), +PARTITION p3201 VALUES LESS THAN (25616), +PARTITION p3202 VALUES LESS THAN (25624), +PARTITION p3203 VALUES LESS THAN (25632), +PARTITION p3204 VALUES LESS THAN (25640), +PARTITION p3205 VALUES LESS THAN (25648), +PARTITION p3206 VALUES LESS THAN (25656), +PARTITION p3207 VALUES LESS THAN (25664), +PARTITION p3208 VALUES LESS THAN (25672), +PARTITION p3209 VALUES LESS THAN (25680), +PARTITION p3210 VALUES LESS THAN (25688), +PARTITION p3211 VALUES LESS THAN (25696), +PARTITION p3212 VALUES LESS THAN (25704), +PARTITION p3213 VALUES LESS THAN (25712), +PARTITION p3214 VALUES LESS THAN (25720), +PARTITION p3215 VALUES LESS THAN (25728), +PARTITION p3216 VALUES LESS THAN (25736), +PARTITION p3217 VALUES LESS THAN (25744), +PARTITION p3218 VALUES LESS THAN (25752), +PARTITION p3219 VALUES LESS THAN (25760), +PARTITION p3220 VALUES LESS THAN (25768), +PARTITION p3221 VALUES LESS THAN (25776), +PARTITION p3222 VALUES LESS THAN (25784), +PARTITION p3223 VALUES LESS THAN (25792), +PARTITION p3224 VALUES LESS THAN (25800), +PARTITION p3225 VALUES LESS THAN (25808), +PARTITION p3226 VALUES LESS THAN (25816), +PARTITION p3227 VALUES LESS THAN (25824), +PARTITION p3228 VALUES LESS THAN (25832), +PARTITION p3229 VALUES LESS THAN (25840), +PARTITION p3230 VALUES LESS THAN (25848), +PARTITION p3231 VALUES LESS THAN (25856), +PARTITION p3232 VALUES LESS THAN (25864), +PARTITION p3233 VALUES LESS THAN (25872), +PARTITION p3234 VALUES LESS THAN (25880), +PARTITION p3235 VALUES LESS THAN (25888), +PARTITION p3236 VALUES LESS THAN (25896), +PARTITION p3237 VALUES LESS THAN (25904), +PARTITION p3238 VALUES LESS THAN (25912), +PARTITION p3239 VALUES LESS THAN (25920), +PARTITION p3240 VALUES LESS THAN (25928), +PARTITION p3241 VALUES LESS THAN (25936), +PARTITION p3242 VALUES LESS THAN (25944), +PARTITION p3243 VALUES LESS THAN (25952), +PARTITION p3244 VALUES LESS THAN (25960), +PARTITION p3245 VALUES LESS THAN (25968), +PARTITION p3246 VALUES LESS THAN (25976), +PARTITION p3247 VALUES LESS THAN (25984), +PARTITION p3248 VALUES LESS THAN (25992), +PARTITION p3249 VALUES LESS THAN (26000), +PARTITION p3250 VALUES LESS THAN (26008), +PARTITION p3251 VALUES LESS THAN (26016), +PARTITION p3252 VALUES LESS THAN (26024), +PARTITION p3253 VALUES LESS THAN (26032), +PARTITION p3254 VALUES LESS THAN (26040), +PARTITION p3255 VALUES LESS THAN (26048), +PARTITION p3256 VALUES LESS THAN (26056), +PARTITION p3257 VALUES LESS THAN (26064), +PARTITION p3258 VALUES LESS THAN (26072), +PARTITION p3259 VALUES LESS THAN (26080), +PARTITION p3260 VALUES LESS THAN (26088), +PARTITION p3261 VALUES LESS THAN (26096), +PARTITION p3262 VALUES LESS THAN (26104), +PARTITION p3263 VALUES LESS THAN (26112), +PARTITION p3264 VALUES LESS THAN (26120), +PARTITION p3265 VALUES LESS THAN (26128), +PARTITION p3266 VALUES LESS THAN (26136), +PARTITION p3267 VALUES LESS THAN (26144), +PARTITION p3268 VALUES LESS THAN (26152), +PARTITION p3269 VALUES LESS THAN (26160), +PARTITION p3270 VALUES LESS THAN (26168), +PARTITION p3271 VALUES LESS THAN (26176), +PARTITION p3272 VALUES LESS THAN (26184), +PARTITION p3273 VALUES LESS THAN (26192), +PARTITION p3274 VALUES LESS THAN (26200), +PARTITION p3275 VALUES LESS THAN (26208), +PARTITION p3276 VALUES LESS THAN (26216), +PARTITION p3277 VALUES LESS THAN (26224), +PARTITION p3278 VALUES LESS THAN (26232), +PARTITION p3279 VALUES LESS THAN (26240), +PARTITION p3280 VALUES LESS THAN (26248), +PARTITION p3281 VALUES LESS THAN (26256), +PARTITION p3282 VALUES LESS THAN (26264), +PARTITION p3283 VALUES LESS THAN (26272), +PARTITION p3284 VALUES LESS THAN (26280), +PARTITION p3285 VALUES LESS THAN (26288), +PARTITION p3286 VALUES LESS THAN (26296), +PARTITION p3287 VALUES LESS THAN (26304), +PARTITION p3288 VALUES LESS THAN (26312), +PARTITION p3289 VALUES LESS THAN (26320), +PARTITION p3290 VALUES LESS THAN (26328), +PARTITION p3291 VALUES LESS THAN (26336), +PARTITION p3292 VALUES LESS THAN (26344), +PARTITION p3293 VALUES LESS THAN (26352), +PARTITION p3294 VALUES LESS THAN (26360), +PARTITION p3295 VALUES LESS THAN (26368), +PARTITION p3296 VALUES LESS THAN (26376), +PARTITION p3297 VALUES LESS THAN (26384), +PARTITION p3298 VALUES LESS THAN (26392), +PARTITION p3299 VALUES LESS THAN (26400), +PARTITION p3300 VALUES LESS THAN (26408), +PARTITION p3301 VALUES LESS THAN (26416), +PARTITION p3302 VALUES LESS THAN (26424), +PARTITION p3303 VALUES LESS THAN (26432), +PARTITION p3304 VALUES LESS THAN (26440), +PARTITION p3305 VALUES LESS THAN (26448), +PARTITION p3306 VALUES LESS THAN (26456), +PARTITION p3307 VALUES LESS THAN (26464), +PARTITION p3308 VALUES LESS THAN (26472), +PARTITION p3309 VALUES LESS THAN (26480), +PARTITION p3310 VALUES LESS THAN (26488), +PARTITION p3311 VALUES LESS THAN (26496), +PARTITION p3312 VALUES LESS THAN (26504), +PARTITION p3313 VALUES LESS THAN (26512), +PARTITION p3314 VALUES LESS THAN (26520), +PARTITION p3315 VALUES LESS THAN (26528), +PARTITION p3316 VALUES LESS THAN (26536), +PARTITION p3317 VALUES LESS THAN (26544), +PARTITION p3318 VALUES LESS THAN (26552), +PARTITION p3319 VALUES LESS THAN (26560), +PARTITION p3320 VALUES LESS THAN (26568), +PARTITION p3321 VALUES LESS THAN (26576), +PARTITION p3322 VALUES LESS THAN (26584), +PARTITION p3323 VALUES LESS THAN (26592), +PARTITION p3324 VALUES LESS THAN (26600), +PARTITION p3325 VALUES LESS THAN (26608), +PARTITION p3326 VALUES LESS THAN (26616), +PARTITION p3327 VALUES LESS THAN (26624), +PARTITION p3328 VALUES LESS THAN (26632), +PARTITION p3329 VALUES LESS THAN (26640), +PARTITION p3330 VALUES LESS THAN (26648), +PARTITION p3331 VALUES LESS THAN (26656), +PARTITION p3332 VALUES LESS THAN (26664), +PARTITION p3333 VALUES LESS THAN (26672), +PARTITION p3334 VALUES LESS THAN (26680), +PARTITION p3335 VALUES LESS THAN (26688), +PARTITION p3336 VALUES LESS THAN (26696), +PARTITION p3337 VALUES LESS THAN (26704), +PARTITION p3338 VALUES LESS THAN (26712), +PARTITION p3339 VALUES LESS THAN (26720), +PARTITION p3340 VALUES LESS THAN (26728), +PARTITION p3341 VALUES LESS THAN (26736), +PARTITION p3342 VALUES LESS THAN (26744), +PARTITION p3343 VALUES LESS THAN (26752), +PARTITION p3344 VALUES LESS THAN (26760), +PARTITION p3345 VALUES LESS THAN (26768), +PARTITION p3346 VALUES LESS THAN (26776), +PARTITION p3347 VALUES LESS THAN (26784), +PARTITION p3348 VALUES LESS THAN (26792), +PARTITION p3349 VALUES LESS THAN (26800), +PARTITION p3350 VALUES LESS THAN (26808), +PARTITION p3351 VALUES LESS THAN (26816), +PARTITION p3352 VALUES LESS THAN (26824), +PARTITION p3353 VALUES LESS THAN (26832), +PARTITION p3354 VALUES LESS THAN (26840), +PARTITION p3355 VALUES LESS THAN (26848), +PARTITION p3356 VALUES LESS THAN (26856), +PARTITION p3357 VALUES LESS THAN (26864), +PARTITION p3358 VALUES LESS THAN (26872), +PARTITION p3359 VALUES LESS THAN (26880), +PARTITION p3360 VALUES LESS THAN (26888), +PARTITION p3361 VALUES LESS THAN (26896), +PARTITION p3362 VALUES LESS THAN (26904), +PARTITION p3363 VALUES LESS THAN (26912), +PARTITION p3364 VALUES LESS THAN (26920), +PARTITION p3365 VALUES LESS THAN (26928), +PARTITION p3366 VALUES LESS THAN (26936), +PARTITION p3367 VALUES LESS THAN (26944), +PARTITION p3368 VALUES LESS THAN (26952), +PARTITION p3369 VALUES LESS THAN (26960), +PARTITION p3370 VALUES LESS THAN (26968), +PARTITION p3371 VALUES LESS THAN (26976), +PARTITION p3372 VALUES LESS THAN (26984), +PARTITION p3373 VALUES LESS THAN (26992), +PARTITION p3374 VALUES LESS THAN (27000), +PARTITION p3375 VALUES LESS THAN (27008), +PARTITION p3376 VALUES LESS THAN (27016), +PARTITION p3377 VALUES LESS THAN (27024), +PARTITION p3378 VALUES LESS THAN (27032), +PARTITION p3379 VALUES LESS THAN (27040), +PARTITION p3380 VALUES LESS THAN (27048), +PARTITION p3381 VALUES LESS THAN (27056), +PARTITION p3382 VALUES LESS THAN (27064), +PARTITION p3383 VALUES LESS THAN (27072), +PARTITION p3384 VALUES LESS THAN (27080), +PARTITION p3385 VALUES LESS THAN (27088), +PARTITION p3386 VALUES LESS THAN (27096), +PARTITION p3387 VALUES LESS THAN (27104), +PARTITION p3388 VALUES LESS THAN (27112), +PARTITION p3389 VALUES LESS THAN (27120), +PARTITION p3390 VALUES LESS THAN (27128), +PARTITION p3391 VALUES LESS THAN (27136), +PARTITION p3392 VALUES LESS THAN (27144), +PARTITION p3393 VALUES LESS THAN (27152), +PARTITION p3394 VALUES LESS THAN (27160), +PARTITION p3395 VALUES LESS THAN (27168), +PARTITION p3396 VALUES LESS THAN (27176), +PARTITION p3397 VALUES LESS THAN (27184), +PARTITION p3398 VALUES LESS THAN (27192), +PARTITION p3399 VALUES LESS THAN (27200), +PARTITION p3400 VALUES LESS THAN (27208), +PARTITION p3401 VALUES LESS THAN (27216), +PARTITION p3402 VALUES LESS THAN (27224), +PARTITION p3403 VALUES LESS THAN (27232), +PARTITION p3404 VALUES LESS THAN (27240), +PARTITION p3405 VALUES LESS THAN (27248), +PARTITION p3406 VALUES LESS THAN (27256), +PARTITION p3407 VALUES LESS THAN (27264), +PARTITION p3408 VALUES LESS THAN (27272), +PARTITION p3409 VALUES LESS THAN (27280), +PARTITION p3410 VALUES LESS THAN (27288), +PARTITION p3411 VALUES LESS THAN (27296), +PARTITION p3412 VALUES LESS THAN (27304), +PARTITION p3413 VALUES LESS THAN (27312), +PARTITION p3414 VALUES LESS THAN (27320), +PARTITION p3415 VALUES LESS THAN (27328), +PARTITION p3416 VALUES LESS THAN (27336), +PARTITION p3417 VALUES LESS THAN (27344), +PARTITION p3418 VALUES LESS THAN (27352), +PARTITION p3419 VALUES LESS THAN (27360), +PARTITION p3420 VALUES LESS THAN (27368), +PARTITION p3421 VALUES LESS THAN (27376), +PARTITION p3422 VALUES LESS THAN (27384), +PARTITION p3423 VALUES LESS THAN (27392), +PARTITION p3424 VALUES LESS THAN (27400), +PARTITION p3425 VALUES LESS THAN (27408), +PARTITION p3426 VALUES LESS THAN (27416), +PARTITION p3427 VALUES LESS THAN (27424), +PARTITION p3428 VALUES LESS THAN (27432), +PARTITION p3429 VALUES LESS THAN (27440), +PARTITION p3430 VALUES LESS THAN (27448), +PARTITION p3431 VALUES LESS THAN (27456), +PARTITION p3432 VALUES LESS THAN (27464), +PARTITION p3433 VALUES LESS THAN (27472), +PARTITION p3434 VALUES LESS THAN (27480), +PARTITION p3435 VALUES LESS THAN (27488), +PARTITION p3436 VALUES LESS THAN (27496), +PARTITION p3437 VALUES LESS THAN (27504), +PARTITION p3438 VALUES LESS THAN (27512), +PARTITION p3439 VALUES LESS THAN (27520), +PARTITION p3440 VALUES LESS THAN (27528), +PARTITION p3441 VALUES LESS THAN (27536), +PARTITION p3442 VALUES LESS THAN (27544), +PARTITION p3443 VALUES LESS THAN (27552), +PARTITION p3444 VALUES LESS THAN (27560), +PARTITION p3445 VALUES LESS THAN (27568), +PARTITION p3446 VALUES LESS THAN (27576), +PARTITION p3447 VALUES LESS THAN (27584), +PARTITION p3448 VALUES LESS THAN (27592), +PARTITION p3449 VALUES LESS THAN (27600), +PARTITION p3450 VALUES LESS THAN (27608), +PARTITION p3451 VALUES LESS THAN (27616), +PARTITION p3452 VALUES LESS THAN (27624), +PARTITION p3453 VALUES LESS THAN (27632), +PARTITION p3454 VALUES LESS THAN (27640), +PARTITION p3455 VALUES LESS THAN (27648), +PARTITION p3456 VALUES LESS THAN (27656), +PARTITION p3457 VALUES LESS THAN (27664), +PARTITION p3458 VALUES LESS THAN (27672), +PARTITION p3459 VALUES LESS THAN (27680), +PARTITION p3460 VALUES LESS THAN (27688), +PARTITION p3461 VALUES LESS THAN (27696), +PARTITION p3462 VALUES LESS THAN (27704), +PARTITION p3463 VALUES LESS THAN (27712), +PARTITION p3464 VALUES LESS THAN (27720), +PARTITION p3465 VALUES LESS THAN (27728), +PARTITION p3466 VALUES LESS THAN (27736), +PARTITION p3467 VALUES LESS THAN (27744), +PARTITION p3468 VALUES LESS THAN (27752), +PARTITION p3469 VALUES LESS THAN (27760), +PARTITION p3470 VALUES LESS THAN (27768), +PARTITION p3471 VALUES LESS THAN (27776), +PARTITION p3472 VALUES LESS THAN (27784), +PARTITION p3473 VALUES LESS THAN (27792), +PARTITION p3474 VALUES LESS THAN (27800), +PARTITION p3475 VALUES LESS THAN (27808), +PARTITION p3476 VALUES LESS THAN (27816), +PARTITION p3477 VALUES LESS THAN (27824), +PARTITION p3478 VALUES LESS THAN (27832), +PARTITION p3479 VALUES LESS THAN (27840), +PARTITION p3480 VALUES LESS THAN (27848), +PARTITION p3481 VALUES LESS THAN (27856), +PARTITION p3482 VALUES LESS THAN (27864), +PARTITION p3483 VALUES LESS THAN (27872), +PARTITION p3484 VALUES LESS THAN (27880), +PARTITION p3485 VALUES LESS THAN (27888), +PARTITION p3486 VALUES LESS THAN (27896), +PARTITION p3487 VALUES LESS THAN (27904), +PARTITION p3488 VALUES LESS THAN (27912), +PARTITION p3489 VALUES LESS THAN (27920), +PARTITION p3490 VALUES LESS THAN (27928), +PARTITION p3491 VALUES LESS THAN (27936), +PARTITION p3492 VALUES LESS THAN (27944), +PARTITION p3493 VALUES LESS THAN (27952), +PARTITION p3494 VALUES LESS THAN (27960), +PARTITION p3495 VALUES LESS THAN (27968), +PARTITION p3496 VALUES LESS THAN (27976), +PARTITION p3497 VALUES LESS THAN (27984), +PARTITION p3498 VALUES LESS THAN (27992), +PARTITION p3499 VALUES LESS THAN (28000), +PARTITION p3500 VALUES LESS THAN (28008), +PARTITION p3501 VALUES LESS THAN (28016), +PARTITION p3502 VALUES LESS THAN (28024), +PARTITION p3503 VALUES LESS THAN (28032), +PARTITION p3504 VALUES LESS THAN (28040), +PARTITION p3505 VALUES LESS THAN (28048), +PARTITION p3506 VALUES LESS THAN (28056), +PARTITION p3507 VALUES LESS THAN (28064), +PARTITION p3508 VALUES LESS THAN (28072), +PARTITION p3509 VALUES LESS THAN (28080), +PARTITION p3510 VALUES LESS THAN (28088), +PARTITION p3511 VALUES LESS THAN (28096), +PARTITION p3512 VALUES LESS THAN (28104), +PARTITION p3513 VALUES LESS THAN (28112), +PARTITION p3514 VALUES LESS THAN (28120), +PARTITION p3515 VALUES LESS THAN (28128), +PARTITION p3516 VALUES LESS THAN (28136), +PARTITION p3517 VALUES LESS THAN (28144), +PARTITION p3518 VALUES LESS THAN (28152), +PARTITION p3519 VALUES LESS THAN (28160), +PARTITION p3520 VALUES LESS THAN (28168), +PARTITION p3521 VALUES LESS THAN (28176), +PARTITION p3522 VALUES LESS THAN (28184), +PARTITION p3523 VALUES LESS THAN (28192), +PARTITION p3524 VALUES LESS THAN (28200), +PARTITION p3525 VALUES LESS THAN (28208), +PARTITION p3526 VALUES LESS THAN (28216), +PARTITION p3527 VALUES LESS THAN (28224), +PARTITION p3528 VALUES LESS THAN (28232), +PARTITION p3529 VALUES LESS THAN (28240), +PARTITION p3530 VALUES LESS THAN (28248), +PARTITION p3531 VALUES LESS THAN (28256), +PARTITION p3532 VALUES LESS THAN (28264), +PARTITION p3533 VALUES LESS THAN (28272), +PARTITION p3534 VALUES LESS THAN (28280), +PARTITION p3535 VALUES LESS THAN (28288), +PARTITION p3536 VALUES LESS THAN (28296), +PARTITION p3537 VALUES LESS THAN (28304), +PARTITION p3538 VALUES LESS THAN (28312), +PARTITION p3539 VALUES LESS THAN (28320), +PARTITION p3540 VALUES LESS THAN (28328), +PARTITION p3541 VALUES LESS THAN (28336), +PARTITION p3542 VALUES LESS THAN (28344), +PARTITION p3543 VALUES LESS THAN (28352), +PARTITION p3544 VALUES LESS THAN (28360), +PARTITION p3545 VALUES LESS THAN (28368), +PARTITION p3546 VALUES LESS THAN (28376), +PARTITION p3547 VALUES LESS THAN (28384), +PARTITION p3548 VALUES LESS THAN (28392), +PARTITION p3549 VALUES LESS THAN (28400), +PARTITION p3550 VALUES LESS THAN (28408), +PARTITION p3551 VALUES LESS THAN (28416), +PARTITION p3552 VALUES LESS THAN (28424), +PARTITION p3553 VALUES LESS THAN (28432), +PARTITION p3554 VALUES LESS THAN (28440), +PARTITION p3555 VALUES LESS THAN (28448), +PARTITION p3556 VALUES LESS THAN (28456), +PARTITION p3557 VALUES LESS THAN (28464), +PARTITION p3558 VALUES LESS THAN (28472), +PARTITION p3559 VALUES LESS THAN (28480), +PARTITION p3560 VALUES LESS THAN (28488), +PARTITION p3561 VALUES LESS THAN (28496), +PARTITION p3562 VALUES LESS THAN (28504), +PARTITION p3563 VALUES LESS THAN (28512), +PARTITION p3564 VALUES LESS THAN (28520), +PARTITION p3565 VALUES LESS THAN (28528), +PARTITION p3566 VALUES LESS THAN (28536), +PARTITION p3567 VALUES LESS THAN (28544), +PARTITION p3568 VALUES LESS THAN (28552), +PARTITION p3569 VALUES LESS THAN (28560), +PARTITION p3570 VALUES LESS THAN (28568), +PARTITION p3571 VALUES LESS THAN (28576), +PARTITION p3572 VALUES LESS THAN (28584), +PARTITION p3573 VALUES LESS THAN (28592), +PARTITION p3574 VALUES LESS THAN (28600), +PARTITION p3575 VALUES LESS THAN (28608), +PARTITION p3576 VALUES LESS THAN (28616), +PARTITION p3577 VALUES LESS THAN (28624), +PARTITION p3578 VALUES LESS THAN (28632), +PARTITION p3579 VALUES LESS THAN (28640), +PARTITION p3580 VALUES LESS THAN (28648), +PARTITION p3581 VALUES LESS THAN (28656), +PARTITION p3582 VALUES LESS THAN (28664), +PARTITION p3583 VALUES LESS THAN (28672), +PARTITION p3584 VALUES LESS THAN (28680), +PARTITION p3585 VALUES LESS THAN (28688), +PARTITION p3586 VALUES LESS THAN (28696), +PARTITION p3587 VALUES LESS THAN (28704), +PARTITION p3588 VALUES LESS THAN (28712), +PARTITION p3589 VALUES LESS THAN (28720), +PARTITION p3590 VALUES LESS THAN (28728), +PARTITION p3591 VALUES LESS THAN (28736), +PARTITION p3592 VALUES LESS THAN (28744), +PARTITION p3593 VALUES LESS THAN (28752), +PARTITION p3594 VALUES LESS THAN (28760), +PARTITION p3595 VALUES LESS THAN (28768), +PARTITION p3596 VALUES LESS THAN (28776), +PARTITION p3597 VALUES LESS THAN (28784), +PARTITION p3598 VALUES LESS THAN (28792), +PARTITION p3599 VALUES LESS THAN (28800), +PARTITION p3600 VALUES LESS THAN (28808), +PARTITION p3601 VALUES LESS THAN (28816), +PARTITION p3602 VALUES LESS THAN (28824), +PARTITION p3603 VALUES LESS THAN (28832), +PARTITION p3604 VALUES LESS THAN (28840), +PARTITION p3605 VALUES LESS THAN (28848), +PARTITION p3606 VALUES LESS THAN (28856), +PARTITION p3607 VALUES LESS THAN (28864), +PARTITION p3608 VALUES LESS THAN (28872), +PARTITION p3609 VALUES LESS THAN (28880), +PARTITION p3610 VALUES LESS THAN (28888), +PARTITION p3611 VALUES LESS THAN (28896), +PARTITION p3612 VALUES LESS THAN (28904), +PARTITION p3613 VALUES LESS THAN (28912), +PARTITION p3614 VALUES LESS THAN (28920), +PARTITION p3615 VALUES LESS THAN (28928), +PARTITION p3616 VALUES LESS THAN (28936), +PARTITION p3617 VALUES LESS THAN (28944), +PARTITION p3618 VALUES LESS THAN (28952), +PARTITION p3619 VALUES LESS THAN (28960), +PARTITION p3620 VALUES LESS THAN (28968), +PARTITION p3621 VALUES LESS THAN (28976), +PARTITION p3622 VALUES LESS THAN (28984), +PARTITION p3623 VALUES LESS THAN (28992), +PARTITION p3624 VALUES LESS THAN (29000), +PARTITION p3625 VALUES LESS THAN (29008), +PARTITION p3626 VALUES LESS THAN (29016), +PARTITION p3627 VALUES LESS THAN (29024), +PARTITION p3628 VALUES LESS THAN (29032), +PARTITION p3629 VALUES LESS THAN (29040), +PARTITION p3630 VALUES LESS THAN (29048), +PARTITION p3631 VALUES LESS THAN (29056), +PARTITION p3632 VALUES LESS THAN (29064), +PARTITION p3633 VALUES LESS THAN (29072), +PARTITION p3634 VALUES LESS THAN (29080), +PARTITION p3635 VALUES LESS THAN (29088), +PARTITION p3636 VALUES LESS THAN (29096), +PARTITION p3637 VALUES LESS THAN (29104), +PARTITION p3638 VALUES LESS THAN (29112), +PARTITION p3639 VALUES LESS THAN (29120), +PARTITION p3640 VALUES LESS THAN (29128), +PARTITION p3641 VALUES LESS THAN (29136), +PARTITION p3642 VALUES LESS THAN (29144), +PARTITION p3643 VALUES LESS THAN (29152), +PARTITION p3644 VALUES LESS THAN (29160), +PARTITION p3645 VALUES LESS THAN (29168), +PARTITION p3646 VALUES LESS THAN (29176), +PARTITION p3647 VALUES LESS THAN (29184), +PARTITION p3648 VALUES LESS THAN (29192), +PARTITION p3649 VALUES LESS THAN (29200), +PARTITION p3650 VALUES LESS THAN (29208), +PARTITION p3651 VALUES LESS THAN (29216), +PARTITION p3652 VALUES LESS THAN (29224), +PARTITION p3653 VALUES LESS THAN (29232), +PARTITION p3654 VALUES LESS THAN (29240), +PARTITION p3655 VALUES LESS THAN (29248), +PARTITION p3656 VALUES LESS THAN (29256), +PARTITION p3657 VALUES LESS THAN (29264), +PARTITION p3658 VALUES LESS THAN (29272), +PARTITION p3659 VALUES LESS THAN (29280), +PARTITION p3660 VALUES LESS THAN (29288), +PARTITION p3661 VALUES LESS THAN (29296), +PARTITION p3662 VALUES LESS THAN (29304), +PARTITION p3663 VALUES LESS THAN (29312), +PARTITION p3664 VALUES LESS THAN (29320), +PARTITION p3665 VALUES LESS THAN (29328), +PARTITION p3666 VALUES LESS THAN (29336), +PARTITION p3667 VALUES LESS THAN (29344), +PARTITION p3668 VALUES LESS THAN (29352), +PARTITION p3669 VALUES LESS THAN (29360), +PARTITION p3670 VALUES LESS THAN (29368), +PARTITION p3671 VALUES LESS THAN (29376), +PARTITION p3672 VALUES LESS THAN (29384), +PARTITION p3673 VALUES LESS THAN (29392), +PARTITION p3674 VALUES LESS THAN (29400), +PARTITION p3675 VALUES LESS THAN (29408), +PARTITION p3676 VALUES LESS THAN (29416), +PARTITION p3677 VALUES LESS THAN (29424), +PARTITION p3678 VALUES LESS THAN (29432), +PARTITION p3679 VALUES LESS THAN (29440), +PARTITION p3680 VALUES LESS THAN (29448), +PARTITION p3681 VALUES LESS THAN (29456), +PARTITION p3682 VALUES LESS THAN (29464), +PARTITION p3683 VALUES LESS THAN (29472), +PARTITION p3684 VALUES LESS THAN (29480), +PARTITION p3685 VALUES LESS THAN (29488), +PARTITION p3686 VALUES LESS THAN (29496), +PARTITION p3687 VALUES LESS THAN (29504), +PARTITION p3688 VALUES LESS THAN (29512), +PARTITION p3689 VALUES LESS THAN (29520), +PARTITION p3690 VALUES LESS THAN (29528), +PARTITION p3691 VALUES LESS THAN (29536), +PARTITION p3692 VALUES LESS THAN (29544), +PARTITION p3693 VALUES LESS THAN (29552), +PARTITION p3694 VALUES LESS THAN (29560), +PARTITION p3695 VALUES LESS THAN (29568), +PARTITION p3696 VALUES LESS THAN (29576), +PARTITION p3697 VALUES LESS THAN (29584), +PARTITION p3698 VALUES LESS THAN (29592), +PARTITION p3699 VALUES LESS THAN (29600), +PARTITION p3700 VALUES LESS THAN (29608), +PARTITION p3701 VALUES LESS THAN (29616), +PARTITION p3702 VALUES LESS THAN (29624), +PARTITION p3703 VALUES LESS THAN (29632), +PARTITION p3704 VALUES LESS THAN (29640), +PARTITION p3705 VALUES LESS THAN (29648), +PARTITION p3706 VALUES LESS THAN (29656), +PARTITION p3707 VALUES LESS THAN (29664), +PARTITION p3708 VALUES LESS THAN (29672), +PARTITION p3709 VALUES LESS THAN (29680), +PARTITION p3710 VALUES LESS THAN (29688), +PARTITION p3711 VALUES LESS THAN (29696), +PARTITION p3712 VALUES LESS THAN (29704), +PARTITION p3713 VALUES LESS THAN (29712), +PARTITION p3714 VALUES LESS THAN (29720), +PARTITION p3715 VALUES LESS THAN (29728), +PARTITION p3716 VALUES LESS THAN (29736), +PARTITION p3717 VALUES LESS THAN (29744), +PARTITION p3718 VALUES LESS THAN (29752), +PARTITION p3719 VALUES LESS THAN (29760), +PARTITION p3720 VALUES LESS THAN (29768), +PARTITION p3721 VALUES LESS THAN (29776), +PARTITION p3722 VALUES LESS THAN (29784), +PARTITION p3723 VALUES LESS THAN (29792), +PARTITION p3724 VALUES LESS THAN (29800), +PARTITION p3725 VALUES LESS THAN (29808), +PARTITION p3726 VALUES LESS THAN (29816), +PARTITION p3727 VALUES LESS THAN (29824), +PARTITION p3728 VALUES LESS THAN (29832), +PARTITION p3729 VALUES LESS THAN (29840), +PARTITION p3730 VALUES LESS THAN (29848), +PARTITION p3731 VALUES LESS THAN (29856), +PARTITION p3732 VALUES LESS THAN (29864), +PARTITION p3733 VALUES LESS THAN (29872), +PARTITION p3734 VALUES LESS THAN (29880), +PARTITION p3735 VALUES LESS THAN (29888), +PARTITION p3736 VALUES LESS THAN (29896), +PARTITION p3737 VALUES LESS THAN (29904), +PARTITION p3738 VALUES LESS THAN (29912), +PARTITION p3739 VALUES LESS THAN (29920), +PARTITION p3740 VALUES LESS THAN (29928), +PARTITION p3741 VALUES LESS THAN (29936), +PARTITION p3742 VALUES LESS THAN (29944), +PARTITION p3743 VALUES LESS THAN (29952), +PARTITION p3744 VALUES LESS THAN (29960), +PARTITION p3745 VALUES LESS THAN (29968), +PARTITION p3746 VALUES LESS THAN (29976), +PARTITION p3747 VALUES LESS THAN (29984), +PARTITION p3748 VALUES LESS THAN (29992), +PARTITION p3749 VALUES LESS THAN (30000), +PARTITION p3750 VALUES LESS THAN (30008), +PARTITION p3751 VALUES LESS THAN (30016), +PARTITION p3752 VALUES LESS THAN (30024), +PARTITION p3753 VALUES LESS THAN (30032), +PARTITION p3754 VALUES LESS THAN (30040), +PARTITION p3755 VALUES LESS THAN (30048), +PARTITION p3756 VALUES LESS THAN (30056), +PARTITION p3757 VALUES LESS THAN (30064), +PARTITION p3758 VALUES LESS THAN (30072), +PARTITION p3759 VALUES LESS THAN (30080), +PARTITION p3760 VALUES LESS THAN (30088), +PARTITION p3761 VALUES LESS THAN (30096), +PARTITION p3762 VALUES LESS THAN (30104), +PARTITION p3763 VALUES LESS THAN (30112), +PARTITION p3764 VALUES LESS THAN (30120), +PARTITION p3765 VALUES LESS THAN (30128), +PARTITION p3766 VALUES LESS THAN (30136), +PARTITION p3767 VALUES LESS THAN (30144), +PARTITION p3768 VALUES LESS THAN (30152), +PARTITION p3769 VALUES LESS THAN (30160), +PARTITION p3770 VALUES LESS THAN (30168), +PARTITION p3771 VALUES LESS THAN (30176), +PARTITION p3772 VALUES LESS THAN (30184), +PARTITION p3773 VALUES LESS THAN (30192), +PARTITION p3774 VALUES LESS THAN (30200), +PARTITION p3775 VALUES LESS THAN (30208), +PARTITION p3776 VALUES LESS THAN (30216), +PARTITION p3777 VALUES LESS THAN (30224), +PARTITION p3778 VALUES LESS THAN (30232), +PARTITION p3779 VALUES LESS THAN (30240), +PARTITION p3780 VALUES LESS THAN (30248), +PARTITION p3781 VALUES LESS THAN (30256), +PARTITION p3782 VALUES LESS THAN (30264), +PARTITION p3783 VALUES LESS THAN (30272), +PARTITION p3784 VALUES LESS THAN (30280), +PARTITION p3785 VALUES LESS THAN (30288), +PARTITION p3786 VALUES LESS THAN (30296), +PARTITION p3787 VALUES LESS THAN (30304), +PARTITION p3788 VALUES LESS THAN (30312), +PARTITION p3789 VALUES LESS THAN (30320), +PARTITION p3790 VALUES LESS THAN (30328), +PARTITION p3791 VALUES LESS THAN (30336), +PARTITION p3792 VALUES LESS THAN (30344), +PARTITION p3793 VALUES LESS THAN (30352), +PARTITION p3794 VALUES LESS THAN (30360), +PARTITION p3795 VALUES LESS THAN (30368), +PARTITION p3796 VALUES LESS THAN (30376), +PARTITION p3797 VALUES LESS THAN (30384), +PARTITION p3798 VALUES LESS THAN (30392), +PARTITION p3799 VALUES LESS THAN (30400), +PARTITION p3800 VALUES LESS THAN (30408), +PARTITION p3801 VALUES LESS THAN (30416), +PARTITION p3802 VALUES LESS THAN (30424), +PARTITION p3803 VALUES LESS THAN (30432), +PARTITION p3804 VALUES LESS THAN (30440), +PARTITION p3805 VALUES LESS THAN (30448), +PARTITION p3806 VALUES LESS THAN (30456), +PARTITION p3807 VALUES LESS THAN (30464), +PARTITION p3808 VALUES LESS THAN (30472), +PARTITION p3809 VALUES LESS THAN (30480), +PARTITION p3810 VALUES LESS THAN (30488), +PARTITION p3811 VALUES LESS THAN (30496), +PARTITION p3812 VALUES LESS THAN (30504), +PARTITION p3813 VALUES LESS THAN (30512), +PARTITION p3814 VALUES LESS THAN (30520), +PARTITION p3815 VALUES LESS THAN (30528), +PARTITION p3816 VALUES LESS THAN (30536), +PARTITION p3817 VALUES LESS THAN (30544), +PARTITION p3818 VALUES LESS THAN (30552), +PARTITION p3819 VALUES LESS THAN (30560), +PARTITION p3820 VALUES LESS THAN (30568), +PARTITION p3821 VALUES LESS THAN (30576), +PARTITION p3822 VALUES LESS THAN (30584), +PARTITION p3823 VALUES LESS THAN (30592), +PARTITION p3824 VALUES LESS THAN (30600), +PARTITION p3825 VALUES LESS THAN (30608), +PARTITION p3826 VALUES LESS THAN (30616), +PARTITION p3827 VALUES LESS THAN (30624), +PARTITION p3828 VALUES LESS THAN (30632), +PARTITION p3829 VALUES LESS THAN (30640), +PARTITION p3830 VALUES LESS THAN (30648), +PARTITION p3831 VALUES LESS THAN (30656), +PARTITION p3832 VALUES LESS THAN (30664), +PARTITION p3833 VALUES LESS THAN (30672), +PARTITION p3834 VALUES LESS THAN (30680), +PARTITION p3835 VALUES LESS THAN (30688), +PARTITION p3836 VALUES LESS THAN (30696), +PARTITION p3837 VALUES LESS THAN (30704), +PARTITION p3838 VALUES LESS THAN (30712), +PARTITION p3839 VALUES LESS THAN (30720), +PARTITION p3840 VALUES LESS THAN (30728), +PARTITION p3841 VALUES LESS THAN (30736), +PARTITION p3842 VALUES LESS THAN (30744), +PARTITION p3843 VALUES LESS THAN (30752), +PARTITION p3844 VALUES LESS THAN (30760), +PARTITION p3845 VALUES LESS THAN (30768), +PARTITION p3846 VALUES LESS THAN (30776), +PARTITION p3847 VALUES LESS THAN (30784), +PARTITION p3848 VALUES LESS THAN (30792), +PARTITION p3849 VALUES LESS THAN (30800), +PARTITION p3850 VALUES LESS THAN (30808), +PARTITION p3851 VALUES LESS THAN (30816), +PARTITION p3852 VALUES LESS THAN (30824), +PARTITION p3853 VALUES LESS THAN (30832), +PARTITION p3854 VALUES LESS THAN (30840), +PARTITION p3855 VALUES LESS THAN (30848), +PARTITION p3856 VALUES LESS THAN (30856), +PARTITION p3857 VALUES LESS THAN (30864), +PARTITION p3858 VALUES LESS THAN (30872), +PARTITION p3859 VALUES LESS THAN (30880), +PARTITION p3860 VALUES LESS THAN (30888), +PARTITION p3861 VALUES LESS THAN (30896), +PARTITION p3862 VALUES LESS THAN (30904), +PARTITION p3863 VALUES LESS THAN (30912), +PARTITION p3864 VALUES LESS THAN (30920), +PARTITION p3865 VALUES LESS THAN (30928), +PARTITION p3866 VALUES LESS THAN (30936), +PARTITION p3867 VALUES LESS THAN (30944), +PARTITION p3868 VALUES LESS THAN (30952), +PARTITION p3869 VALUES LESS THAN (30960), +PARTITION p3870 VALUES LESS THAN (30968), +PARTITION p3871 VALUES LESS THAN (30976), +PARTITION p3872 VALUES LESS THAN (30984), +PARTITION p3873 VALUES LESS THAN (30992), +PARTITION p3874 VALUES LESS THAN (31000), +PARTITION p3875 VALUES LESS THAN (31008), +PARTITION p3876 VALUES LESS THAN (31016), +PARTITION p3877 VALUES LESS THAN (31024), +PARTITION p3878 VALUES LESS THAN (31032), +PARTITION p3879 VALUES LESS THAN (31040), +PARTITION p3880 VALUES LESS THAN (31048), +PARTITION p3881 VALUES LESS THAN (31056), +PARTITION p3882 VALUES LESS THAN (31064), +PARTITION p3883 VALUES LESS THAN (31072), +PARTITION p3884 VALUES LESS THAN (31080), +PARTITION p3885 VALUES LESS THAN (31088), +PARTITION p3886 VALUES LESS THAN (31096), +PARTITION p3887 VALUES LESS THAN (31104), +PARTITION p3888 VALUES LESS THAN (31112), +PARTITION p3889 VALUES LESS THAN (31120), +PARTITION p3890 VALUES LESS THAN (31128), +PARTITION p3891 VALUES LESS THAN (31136), +PARTITION p3892 VALUES LESS THAN (31144), +PARTITION p3893 VALUES LESS THAN (31152), +PARTITION p3894 VALUES LESS THAN (31160), +PARTITION p3895 VALUES LESS THAN (31168), +PARTITION p3896 VALUES LESS THAN (31176), +PARTITION p3897 VALUES LESS THAN (31184), +PARTITION p3898 VALUES LESS THAN (31192), +PARTITION p3899 VALUES LESS THAN (31200), +PARTITION p3900 VALUES LESS THAN (31208), +PARTITION p3901 VALUES LESS THAN (31216), +PARTITION p3902 VALUES LESS THAN (31224), +PARTITION p3903 VALUES LESS THAN (31232), +PARTITION p3904 VALUES LESS THAN (31240), +PARTITION p3905 VALUES LESS THAN (31248), +PARTITION p3906 VALUES LESS THAN (31256), +PARTITION p3907 VALUES LESS THAN (31264), +PARTITION p3908 VALUES LESS THAN (31272), +PARTITION p3909 VALUES LESS THAN (31280), +PARTITION p3910 VALUES LESS THAN (31288), +PARTITION p3911 VALUES LESS THAN (31296), +PARTITION p3912 VALUES LESS THAN (31304), +PARTITION p3913 VALUES LESS THAN (31312), +PARTITION p3914 VALUES LESS THAN (31320), +PARTITION p3915 VALUES LESS THAN (31328), +PARTITION p3916 VALUES LESS THAN (31336), +PARTITION p3917 VALUES LESS THAN (31344), +PARTITION p3918 VALUES LESS THAN (31352), +PARTITION p3919 VALUES LESS THAN (31360), +PARTITION p3920 VALUES LESS THAN (31368), +PARTITION p3921 VALUES LESS THAN (31376), +PARTITION p3922 VALUES LESS THAN (31384), +PARTITION p3923 VALUES LESS THAN (31392), +PARTITION p3924 VALUES LESS THAN (31400), +PARTITION p3925 VALUES LESS THAN (31408), +PARTITION p3926 VALUES LESS THAN (31416), +PARTITION p3927 VALUES LESS THAN (31424), +PARTITION p3928 VALUES LESS THAN (31432), +PARTITION p3929 VALUES LESS THAN (31440), +PARTITION p3930 VALUES LESS THAN (31448), +PARTITION p3931 VALUES LESS THAN (31456), +PARTITION p3932 VALUES LESS THAN (31464), +PARTITION p3933 VALUES LESS THAN (31472), +PARTITION p3934 VALUES LESS THAN (31480), +PARTITION p3935 VALUES LESS THAN (31488), +PARTITION p3936 VALUES LESS THAN (31496), +PARTITION p3937 VALUES LESS THAN (31504), +PARTITION p3938 VALUES LESS THAN (31512), +PARTITION p3939 VALUES LESS THAN (31520), +PARTITION p3940 VALUES LESS THAN (31528), +PARTITION p3941 VALUES LESS THAN (31536), +PARTITION p3942 VALUES LESS THAN (31544), +PARTITION p3943 VALUES LESS THAN (31552), +PARTITION p3944 VALUES LESS THAN (31560), +PARTITION p3945 VALUES LESS THAN (31568), +PARTITION p3946 VALUES LESS THAN (31576), +PARTITION p3947 VALUES LESS THAN (31584), +PARTITION p3948 VALUES LESS THAN (31592), +PARTITION p3949 VALUES LESS THAN (31600), +PARTITION p3950 VALUES LESS THAN (31608), +PARTITION p3951 VALUES LESS THAN (31616), +PARTITION p3952 VALUES LESS THAN (31624), +PARTITION p3953 VALUES LESS THAN (31632), +PARTITION p3954 VALUES LESS THAN (31640), +PARTITION p3955 VALUES LESS THAN (31648), +PARTITION p3956 VALUES LESS THAN (31656), +PARTITION p3957 VALUES LESS THAN (31664), +PARTITION p3958 VALUES LESS THAN (31672), +PARTITION p3959 VALUES LESS THAN (31680), +PARTITION p3960 VALUES LESS THAN (31688), +PARTITION p3961 VALUES LESS THAN (31696), +PARTITION p3962 VALUES LESS THAN (31704), +PARTITION p3963 VALUES LESS THAN (31712), +PARTITION p3964 VALUES LESS THAN (31720), +PARTITION p3965 VALUES LESS THAN (31728), +PARTITION p3966 VALUES LESS THAN (31736), +PARTITION p3967 VALUES LESS THAN (31744), +PARTITION p3968 VALUES LESS THAN (31752), +PARTITION p3969 VALUES LESS THAN (31760), +PARTITION p3970 VALUES LESS THAN (31768), +PARTITION p3971 VALUES LESS THAN (31776), +PARTITION p3972 VALUES LESS THAN (31784), +PARTITION p3973 VALUES LESS THAN (31792), +PARTITION p3974 VALUES LESS THAN (31800), +PARTITION p3975 VALUES LESS THAN (31808), +PARTITION p3976 VALUES LESS THAN (31816), +PARTITION p3977 VALUES LESS THAN (31824), +PARTITION p3978 VALUES LESS THAN (31832), +PARTITION p3979 VALUES LESS THAN (31840), +PARTITION p3980 VALUES LESS THAN (31848), +PARTITION p3981 VALUES LESS THAN (31856), +PARTITION p3982 VALUES LESS THAN (31864), +PARTITION p3983 VALUES LESS THAN (31872), +PARTITION p3984 VALUES LESS THAN (31880), +PARTITION p3985 VALUES LESS THAN (31888), +PARTITION p3986 VALUES LESS THAN (31896), +PARTITION p3987 VALUES LESS THAN (31904), +PARTITION p3988 VALUES LESS THAN (31912), +PARTITION p3989 VALUES LESS THAN (31920), +PARTITION p3990 VALUES LESS THAN (31928), +PARTITION p3991 VALUES LESS THAN (31936), +PARTITION p3992 VALUES LESS THAN (31944), +PARTITION p3993 VALUES LESS THAN (31952), +PARTITION p3994 VALUES LESS THAN (31960), +PARTITION p3995 VALUES LESS THAN (31968), +PARTITION p3996 VALUES LESS THAN (31976), +PARTITION p3997 VALUES LESS THAN (31984), +PARTITION p3998 VALUES LESS THAN (31992), +PARTITION p3999 VALUES LESS THAN (32000), +PARTITION p4000 VALUES LESS THAN (32008), +PARTITION p4001 VALUES LESS THAN (32016), +PARTITION p4002 VALUES LESS THAN (32024), +PARTITION p4003 VALUES LESS THAN (32032), +PARTITION p4004 VALUES LESS THAN (32040), +PARTITION p4005 VALUES LESS THAN (32048), +PARTITION p4006 VALUES LESS THAN (32056), +PARTITION p4007 VALUES LESS THAN (32064), +PARTITION p4008 VALUES LESS THAN (32072), +PARTITION p4009 VALUES LESS THAN (32080), +PARTITION p4010 VALUES LESS THAN (32088), +PARTITION p4011 VALUES LESS THAN (32096), +PARTITION p4012 VALUES LESS THAN (32104), +PARTITION p4013 VALUES LESS THAN (32112), +PARTITION p4014 VALUES LESS THAN (32120), +PARTITION p4015 VALUES LESS THAN (32128), +PARTITION p4016 VALUES LESS THAN (32136), +PARTITION p4017 VALUES LESS THAN (32144), +PARTITION p4018 VALUES LESS THAN (32152), +PARTITION p4019 VALUES LESS THAN (32160), +PARTITION p4020 VALUES LESS THAN (32168), +PARTITION p4021 VALUES LESS THAN (32176), +PARTITION p4022 VALUES LESS THAN (32184), +PARTITION p4023 VALUES LESS THAN (32192), +PARTITION p4024 VALUES LESS THAN (32200), +PARTITION p4025 VALUES LESS THAN (32208), +PARTITION p4026 VALUES LESS THAN (32216), +PARTITION p4027 VALUES LESS THAN (32224), +PARTITION p4028 VALUES LESS THAN (32232), +PARTITION p4029 VALUES LESS THAN (32240), +PARTITION p4030 VALUES LESS THAN (32248), +PARTITION p4031 VALUES LESS THAN (32256), +PARTITION p4032 VALUES LESS THAN (32264), +PARTITION p4033 VALUES LESS THAN (32272), +PARTITION p4034 VALUES LESS THAN (32280), +PARTITION p4035 VALUES LESS THAN (32288), +PARTITION p4036 VALUES LESS THAN (32296), +PARTITION p4037 VALUES LESS THAN (32304), +PARTITION p4038 VALUES LESS THAN (32312), +PARTITION p4039 VALUES LESS THAN (32320), +PARTITION p4040 VALUES LESS THAN (32328), +PARTITION p4041 VALUES LESS THAN (32336), +PARTITION p4042 VALUES LESS THAN (32344), +PARTITION p4043 VALUES LESS THAN (32352), +PARTITION p4044 VALUES LESS THAN (32360), +PARTITION p4045 VALUES LESS THAN (32368), +PARTITION p4046 VALUES LESS THAN (32376), +PARTITION p4047 VALUES LESS THAN (32384), +PARTITION p4048 VALUES LESS THAN (32392), +PARTITION p4049 VALUES LESS THAN (32400), +PARTITION p4050 VALUES LESS THAN (32408), +PARTITION p4051 VALUES LESS THAN (32416), +PARTITION p4052 VALUES LESS THAN (32424), +PARTITION p4053 VALUES LESS THAN (32432), +PARTITION p4054 VALUES LESS THAN (32440), +PARTITION p4055 VALUES LESS THAN (32448), +PARTITION p4056 VALUES LESS THAN (32456), +PARTITION p4057 VALUES LESS THAN (32464), +PARTITION p4058 VALUES LESS THAN (32472), +PARTITION p4059 VALUES LESS THAN (32480), +PARTITION p4060 VALUES LESS THAN (32488), +PARTITION p4061 VALUES LESS THAN (32496), +PARTITION p4062 VALUES LESS THAN (32504), +PARTITION p4063 VALUES LESS THAN (32512), +PARTITION p4064 VALUES LESS THAN (32520), +PARTITION p4065 VALUES LESS THAN (32528), +PARTITION p4066 VALUES LESS THAN (32536), +PARTITION p4067 VALUES LESS THAN (32544), +PARTITION p4068 VALUES LESS THAN (32552), +PARTITION p4069 VALUES LESS THAN (32560), +PARTITION p4070 VALUES LESS THAN (32568), +PARTITION p4071 VALUES LESS THAN (32576), +PARTITION p4072 VALUES LESS THAN (32584), +PARTITION p4073 VALUES LESS THAN (32592), +PARTITION p4074 VALUES LESS THAN (32600), +PARTITION p4075 VALUES LESS THAN (32608), +PARTITION p4076 VALUES LESS THAN (32616), +PARTITION p4077 VALUES LESS THAN (32624), +PARTITION p4078 VALUES LESS THAN (32632), +PARTITION p4079 VALUES LESS THAN (32640), +PARTITION p4080 VALUES LESS THAN (32648), +PARTITION p4081 VALUES LESS THAN (32656), +PARTITION p4082 VALUES LESS THAN (32664), +PARTITION p4083 VALUES LESS THAN (32672), +PARTITION p4084 VALUES LESS THAN (32680), +PARTITION p4085 VALUES LESS THAN (32688), +PARTITION p4086 VALUES LESS THAN (32696), +PARTITION p4087 VALUES LESS THAN (32704), +PARTITION p4088 VALUES LESS THAN (32712), +PARTITION p4089 VALUES LESS THAN (32720), +PARTITION p4090 VALUES LESS THAN (32728), +PARTITION p4091 VALUES LESS THAN (32736), +PARTITION p4092 VALUES LESS THAN (32744), +PARTITION p4093 VALUES LESS THAN (32752), +PARTITION p4094 VALUES LESS THAN (32760), +PARTITION p4095 VALUES LESS THAN (32768) +); +32767 inserts; +select count(*) from t2; +count(*) +32767 +select count(*) from t2 partition (p0); +count(*) +7 +select count(*) from t2 partition (p10); +count(*) +8 +select count(*) from t2 partition (p100); +count(*) +8 +select count(*) from t2 partition (p1000); +count(*) +8 +select count(*) from t2 partition (p4000); +count(*) +8 +select count(*) from t2 partition (p4095); +count(*) +8 +select * from t2 partition (p0); +a +6 +4 +2 +7 +5 +3 +1 +select * from t2 partition (p10); +a +86 +84 +82 +80 +87 +85 +83 +81 +select * from t2 partition (p100); +a +806 +804 +802 +800 +807 +805 +803 +801 +select * from t2 partition (p1000); +a +8006 +8004 +8002 +8000 +8007 +8005 +8003 +8001 +select * from t2 partition (p4000); +a +32006 +32004 +32002 +32000 +32007 +32005 +32003 +32001 +select * from t2 partition (p4095); +a +32766 +32764 +32762 +32760 +32767 +32765 +32763 +32761 +delete from t2 partition (p4095); +select * from t2 partition (p4095); +a +insert into t2 partition (p4095) values (32766), (32767); +select * from t2 partition (p4095); +a +32766 +32767 +update t2 partition (p4095) set a=32765 where a= 32767; +select * from t2 partition (p4095); +a +32766 +32765 +load data infile 'MYSQL_TMP_DIR/data01' into table t2 partition (p4095) fields terminated by ','; +select * from t2 partition (p4095); +a +32766 +32766 +32764 +32765 +alter table t2 add partition (partition p4096 values less than (32775)); +ERROR HY000: Too many partitions (including subpartitions) were defined +drop table t2; diff --git a/mysql-test/suite/tokudb.parts/r-native/partition_mgm_lc0_tokudb.result b/mysql-test/suite/tokudb.parts/r-native/partition_mgm_lc0_tokudb.result new file mode 100644 index 000000000000..1442a99bbbb8 --- /dev/null +++ b/mysql-test/suite/tokudb.parts/r-native/partition_mgm_lc0_tokudb.result @@ -0,0 +1,1156 @@ +# Creating database MySQL_TEST_DB +CREATE DATABASE MySQL_Test_DB; +USE MySQL_Test_DB; +# 1.0 KEY partitioning mgm +# Creating KEY partitioned table +CREATE TABLE TableA (a INT) +ENGINE = 'TokuDB' +PARTITION BY KEY (a) +(PARTITION parta , +PARTITION partB , +PARTITION Partc , +PARTITION PartD ); +INSERT INTO TableA VALUES (1), (2), (7), (8), (9), (10); +INSERT INTO TableA VALUES (3), (4), (5), (6), (11), (12); +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +# Test of ADD/COALESCE PARTITIONS +# expecting duplicate partition name +ALTER TABLE TableA ADD PARTITION +(PARTITION partA, +PARTITION Parta, +PARTITION PartA); +ERROR HY000: Duplicate partition name partA +ALTER TABLE TableA ADD PARTITION +(PARTITION partE, +PARTITION Partf, +PARTITION PartG); +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `TableA` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +(PARTITION parta ENGINE = TokuDB, + PARTITION partB ENGINE = TokuDB, + PARTITION Partc ENGINE = TokuDB, + PARTITION PartD ENGINE = TokuDB, + PARTITION partE ENGINE = TokuDB, + PARTITION Partf ENGINE = TokuDB, + PARTITION PartG ENGINE = TokuDB) */ +ALTER TABLE TableA COALESCE PARTITION 4; +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `TableA` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +(PARTITION parta ENGINE = TokuDB, + PARTITION partB ENGINE = TokuDB, + PARTITION Partc ENGINE = TokuDB) */ +# Test of EXCHANGE PARTITION WITH TABLE +SELECT PARTITION_NAME, TABLE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA ='MySQL_Test_DB' AND TABLE_NAME = 'TableA'; +PARTITION_NAME TABLE_ROWS +parta 4 +partB 4 +Partc 4 +CREATE TABLE TableB LIKE TableA; +ALTER TABLE TableB REMOVE PARTITIONING; +ALTER TABLE TableA EXCHANGE PARTITION parta WITH TABLE TableB; +SELECT * FROM TableA; +a +1 +12 +2 +3 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `TableA` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +(PARTITION parta ENGINE = TokuDB, + PARTITION partB ENGINE = TokuDB, + PARTITION Partc ENGINE = TokuDB) */ +SELECT * FROM TableB; +a +10 +11 +4 +5 +SHOW CREATE TABLE TableB; +Table Create Table +TableB CREATE TABLE `TableB` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +SELECT PARTITION_NAME, IF(TABLE_ROWS, 'YES', 'NO') AS HAVE_TABLE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA ='MySQL_Test_DB' AND TABLE_NAME = 'TableA'; +PARTITION_NAME HAVE_TABLE_ROWS +parta NO +partB YES +Partc YES +ALTER TABLE TableA EXCHANGE PARTITION parta WITH TABLE TableB; +INSERT INTO TableB VALUES (11); +ALTER TABLE TableA EXCHANGE PARTITION Partc WITH TABLE TableB; +ERROR HY000: Found a row that does not match the partition +DROP TABLE TableB; +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `TableA` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +(PARTITION parta ENGINE = TokuDB, + PARTITION partB ENGINE = TokuDB, + PARTITION Partc ENGINE = TokuDB) */ +# Test of REORGANIZE PARTITIONS +# Should not work on HASH/KEY +ALTER TABLE TableA REORGANIZE PARTITION parta,partB,Partc INTO +(PARTITION PARTA , +PARTITION partc ); +ERROR HY000: REORGANIZE PARTITION can only be used to reorganize partitions not to change their numbers +ALTER TABLE TableA REORGANIZE PARTITION parta,Partc INTO +(PARTITION partB , +PARTITION parta ); +ERROR HY000: When reorganizing a set of partitions they must be in consecutive order +ALTER TABLE TableA REORGANIZE PARTITION parta,partB INTO +(PARTITION partB COMMENT="Previusly named parta", +PARTITION parta COMMENT="Previusly named partB"); +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `TableA` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +(PARTITION partB COMMENT = 'Previusly named parta' ENGINE = TokuDB, + PARTITION parta COMMENT = 'Previusly named partB' ENGINE = TokuDB, + PARTITION Partc ENGINE = TokuDB) */ +# Test of RENAME TABLE +RENAME TABLE TableA to TableB; +SELECT * FROM TableB; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +RENAME TABLE TableB to TableA; +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +# Checking name comparision Upper vs Lower case +# Error if lower_case_table_names != 0 +# lower_case_table_names: 0 +CREATE TABLE tablea (a INT) +ENGINE = 'TokuDB' +PARTITION BY KEY (a) +(PARTITION parta , +PARTITION partB , +PARTITION Partc , +PARTITION PartD ); +INSERT INTO tablea VALUES (1), (2), (7), (8), (9), (10); +SHOW TABLES; +Tables_in_MySQL_Test_DB +TableA +tablea +RENAME TABLE TableA to tableA; +SELECT * FROM tablea; +a +1 +10 +2 +7 +8 +9 +SELECT * FROM tableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +RENAME TABLE tableA to TableA; +SHOW CREATE TABLE tablea; +Table Create Table +tablea CREATE TABLE `tablea` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +(PARTITION parta ENGINE = TokuDB, + PARTITION partB ENGINE = TokuDB, + PARTITION Partc ENGINE = TokuDB, + PARTITION PartD ENGINE = TokuDB) */ +DROP TABLE tablea; +# Test of REMOVE PARTITIONING +ALTER TABLE TableA REMOVE PARTITIONING; +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `TableA` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +# Cleaning up after KEY PARTITIONING test +DROP TABLE TableA; +# 2.0 HASH partitioning mgm +# expecting duplicate partition name +CREATE TABLE TableA (a INT) +ENGINE = 'TokuDB' +PARTITION BY HASH (a) +(PARTITION parta , +PARTITION partA , +PARTITION Parta , +PARTITION PartA ); +ERROR HY000: Duplicate partition name partA +# Creating Hash partitioned table +CREATE TABLE TableA (a INT) +ENGINE = 'TokuDB' +PARTITION BY HASH (a) +(PARTITION parta , +PARTITION partB , +PARTITION Partc , +PARTITION PartD ); +INSERT INTO TableA VALUES (1), (2), (7), (8), (9), (10); +INSERT INTO TableA VALUES (3), (4), (5), (6), (11), (12); +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +# Test of ADD/COALESCE PARTITIONS +# expecting duplicate partition name +ALTER TABLE TableA ADD PARTITION +(PARTITION partA, +PARTITION Parta, +PARTITION PartA); +ERROR HY000: Duplicate partition name partA +ALTER TABLE TableA ADD PARTITION +(PARTITION partE, +PARTITION Partf, +PARTITION PartG); +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `TableA` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (a) +(PARTITION parta ENGINE = TokuDB, + PARTITION partB ENGINE = TokuDB, + PARTITION Partc ENGINE = TokuDB, + PARTITION PartD ENGINE = TokuDB, + PARTITION partE ENGINE = TokuDB, + PARTITION Partf ENGINE = TokuDB, + PARTITION PartG ENGINE = TokuDB) */ +ALTER TABLE TableA COALESCE PARTITION 4; +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `TableA` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (a) +(PARTITION parta ENGINE = TokuDB, + PARTITION partB ENGINE = TokuDB, + PARTITION Partc ENGINE = TokuDB) */ +# Test of REORGANIZE PARTITIONS +# Should not work on HASH/KEY +ALTER TABLE TableA REORGANIZE PARTITION parta,partB,Partc INTO +(PARTITION PARTA , +PARTITION partc ); +ERROR HY000: REORGANIZE PARTITION can only be used to reorganize partitions not to change their numbers +ALTER TABLE TableA REORGANIZE PARTITION parta,Partc INTO +(PARTITION partB , +PARTITION parta ); +ERROR HY000: When reorganizing a set of partitions they must be in consecutive order +ALTER TABLE TableA REORGANIZE PARTITION parta,partB INTO +(PARTITION partB COMMENT="Previusly named parta", +PARTITION parta COMMENT="Previusly named partB"); +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `TableA` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (a) +(PARTITION partB COMMENT = 'Previusly named parta' ENGINE = TokuDB, + PARTITION parta COMMENT = 'Previusly named partB' ENGINE = TokuDB, + PARTITION Partc ENGINE = TokuDB) */ +# Test of RENAME TABLE +RENAME TABLE TableA to TableB; +SELECT * FROM TableB; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +RENAME TABLE TableB to TableA; +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +# Checking name comparision Upper vs Lower case +# Error if lower_case_table_names != 0 +# lower_case_table_names: 0 +CREATE TABLE tablea (a INT) +ENGINE = 'TokuDB' +PARTITION BY HASH (a) +(PARTITION parta , +PARTITION partB , +PARTITION Partc , +PARTITION PartD ); +INSERT INTO tablea VALUES (1), (2), (7), (8), (9), (10); +SHOW TABLES; +Tables_in_MySQL_Test_DB +TableA +tablea +RENAME TABLE TableA to tableA; +SELECT * FROM tablea; +a +1 +10 +2 +7 +8 +9 +SELECT * FROM tableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +RENAME TABLE tableA to TableA; +SHOW CREATE TABLE tablea; +Table Create Table +tablea CREATE TABLE `tablea` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (a) +(PARTITION parta ENGINE = TokuDB, + PARTITION partB ENGINE = TokuDB, + PARTITION Partc ENGINE = TokuDB, + PARTITION PartD ENGINE = TokuDB) */ +DROP TABLE tablea; +# Test of REMOVE PARTITIONING +ALTER TABLE TableA REMOVE PARTITIONING; +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `TableA` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +# Cleaning up after HASH PARTITIONING test +DROP TABLE TableA; +# 3.0 RANGE partitioning mgm +# Creating RANGE partitioned table +CREATE TABLE TableA (a INT) +ENGINE = 'TokuDB' +PARTITION BY RANGE (a) +(PARTITION parta VALUES LESS THAN (4) , +PARTITION partB VALUES LESS THAN (7) , +PARTITION Partc VALUES LESS THAN (10) , +PARTITION PartD VALUES LESS THAN (13) ); +INSERT INTO TableA VALUES (1), (2), (7), (8), (9), (10); +INSERT INTO TableA VALUES (3), (4), (5), (6), (11), (12); +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +# Test of ADD/DROP PARTITIONS +# expecting duplicate partition name +ALTER TABLE TableA ADD PARTITION +(PARTITION partA VALUES LESS THAN (MAXVALUE)); +ERROR HY000: Duplicate partition name partA +ALTER TABLE TableA ADD PARTITION +(PARTITION partE VALUES LESS THAN (16), +PARTITION Partf VALUES LESS THAN (19), +PARTITION PartG VALUES LESS THAN (22)); +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `TableA` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION parta VALUES LESS THAN (4) ENGINE = TokuDB, + PARTITION partB VALUES LESS THAN (7) ENGINE = TokuDB, + PARTITION Partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION PartD VALUES LESS THAN (13) ENGINE = TokuDB, + PARTITION partE VALUES LESS THAN (16) ENGINE = TokuDB, + PARTITION Partf VALUES LESS THAN (19) ENGINE = TokuDB, + PARTITION PartG VALUES LESS THAN (22) ENGINE = TokuDB) */ +ALTER TABLE TableA DROP PARTITION partE, PartG; +ALTER TABLE TableA DROP PARTITION Partf; +ALTER TABLE TableA ADD PARTITION +(PARTITION PartE VALUES LESS THAN (MAXVALUE)); +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `TableA` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION parta VALUES LESS THAN (4) ENGINE = TokuDB, + PARTITION partB VALUES LESS THAN (7) ENGINE = TokuDB, + PARTITION Partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION PartD VALUES LESS THAN (13) ENGINE = TokuDB, + PARTITION PartE VALUES LESS THAN MAXVALUE ENGINE = TokuDB) */ +# Test of REORGANIZE PARTITIONS +# Error since it must reorganize a consecutive range +ALTER TABLE TableA REORGANIZE PARTITION parta,Partc INTO +(PARTITION partB VALUES LESS THAN (3) , +PARTITION parta VALUES LESS THAN (11) ); +ERROR HY000: When reorganizing a set of partitions they must be in consecutive order +ALTER TABLE TableA REORGANIZE PARTITION partB,Partc,PartD,PartE INTO +(PARTITION partD VALUES LESS THAN (8) +COMMENT="Previously partB and partly Partc", +PARTITION partB VALUES LESS THAN (11) +COMMENT="Previously partly Partc and partly PartD", +PARTITION partC VALUES LESS THAN (MAXVALUE) +COMMENT="Previously partly PartD"); +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `TableA` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION parta VALUES LESS THAN (4) ENGINE = TokuDB, + PARTITION partD VALUES LESS THAN (8) COMMENT = 'Previously partB and partly Partc' ENGINE = TokuDB, + PARTITION partB VALUES LESS THAN (11) COMMENT = 'Previously partly Partc and partly PartD' ENGINE = TokuDB, + PARTITION partC VALUES LESS THAN MAXVALUE COMMENT = 'Previously partly PartD' ENGINE = TokuDB) */ +# Test of RENAME TABLE +RENAME TABLE TableA to TableB; +SELECT * FROM TableB; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +RENAME TABLE TableB to TableA; +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +# Checking name comparision Upper vs Lower case +# Error if lower_case_table_names != 0 +# lower_case_table_names: 0 +CREATE TABLE tablea (a INT) +ENGINE = 'TokuDB' +PARTITION BY RANGE (a) +(PARTITION parta VALUES LESS THAN (4) , +PARTITION partB VALUES LESS THAN (7) , +PARTITION Partc VALUES LESS THAN (10) , +PARTITION PartD VALUES LESS THAN (13) ); +INSERT INTO tablea VALUES (1), (2), (7), (8), (9), (10); +SHOW TABLES; +Tables_in_MySQL_Test_DB +TableA +tablea +RENAME TABLE TableA to tableA; +SELECT * FROM tablea; +a +1 +10 +2 +7 +8 +9 +SELECT * FROM tableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +RENAME TABLE tableA to TableA; +SHOW CREATE TABLE tablea; +Table Create Table +tablea CREATE TABLE `tablea` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION parta VALUES LESS THAN (4) ENGINE = TokuDB, + PARTITION partB VALUES LESS THAN (7) ENGINE = TokuDB, + PARTITION Partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION PartD VALUES LESS THAN (13) ENGINE = TokuDB) */ +DROP TABLE tablea; +# Test of REMOVE PARTITIONING +ALTER TABLE TableA REMOVE PARTITIONING; +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `TableA` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +# Cleaning up after RANGE PARTITIONING test +DROP TABLE TableA; +# 4.0 LIST partitioning mgm +# Creating LIST partitioned table +CREATE TABLE TableA (a INT) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION parta VALUES IN (1,8,9) , +PARTITION partB VALUES IN (2,10,11) , +PARTITION Partc VALUES IN (3,4,7) , +PARTITION PartD VALUES IN (5,6,12) ); +INSERT INTO TableA VALUES (1), (2), (7), (8), (9), (10); +INSERT INTO TableA VALUES (3), (4), (5), (6), (11), (12); +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +# Test of ADD/DROP PARTITIONS +# expecting duplicate partition name +ALTER TABLE TableA ADD PARTITION +(PARTITION partA VALUES IN (0)); +ERROR HY000: Duplicate partition name partA +ALTER TABLE TableA ADD PARTITION +(PARTITION partE VALUES IN (16), +PARTITION Partf VALUES IN (19), +PARTITION PartG VALUES IN (22)); +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `TableA` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION parta VALUES IN (1,8,9) ENGINE = TokuDB, + PARTITION partB VALUES IN (2,10,11) ENGINE = TokuDB, + PARTITION Partc VALUES IN (3,4,7) ENGINE = TokuDB, + PARTITION PartD VALUES IN (5,6,12) ENGINE = TokuDB, + PARTITION partE VALUES IN (16) ENGINE = TokuDB, + PARTITION Partf VALUES IN (19) ENGINE = TokuDB, + PARTITION PartG VALUES IN (22) ENGINE = TokuDB) */ +ALTER TABLE TableA DROP PARTITION partE, PartG; +ALTER TABLE TableA DROP PARTITION Partf; +ALTER TABLE TableA ADD PARTITION +(PARTITION PartE VALUES IN (13)); +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `TableA` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION parta VALUES IN (1,8,9) ENGINE = TokuDB, + PARTITION partB VALUES IN (2,10,11) ENGINE = TokuDB, + PARTITION Partc VALUES IN (3,4,7) ENGINE = TokuDB, + PARTITION PartD VALUES IN (5,6,12) ENGINE = TokuDB, + PARTITION PartE VALUES IN (13) ENGINE = TokuDB) */ +# Test of REORGANIZE PARTITIONS +ALTER TABLE TableA REORGANIZE PARTITION parta,Partc INTO +(PARTITION Partc VALUES IN (1,7) +COMMENT = "Mix 1 of old parta and Partc", +PARTITION partF VALUES IN (3,9) +COMMENT = "Mix 2 of old parta and Partc", +PARTITION parta VALUES IN (4,8) +COMMENT = "Mix 3 of old parta and Partc"); +ERROR HY000: When reorganizing a set of partitions they must be in consecutive order +ALTER TABLE TableA REORGANIZE PARTITION parta,partB,Partc INTO +(PARTITION Partc VALUES IN (1,7) +COMMENT = "Mix 1 of old parta and Partc", +PARTITION parta VALUES IN (3,9) +COMMENT = "Mix 2 of old parta and Partc", +PARTITION partB VALUES IN (4,8) +COMMENT = "Mix 3 of old parta and Partc"); +SELECT * FROM TableA; +a +1 +12 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `TableA` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION Partc VALUES IN (1,7) COMMENT = 'Mix 1 of old parta and Partc' ENGINE = TokuDB, + PARTITION parta VALUES IN (3,9) COMMENT = 'Mix 2 of old parta and Partc' ENGINE = TokuDB, + PARTITION partB VALUES IN (4,8) COMMENT = 'Mix 3 of old parta and Partc' ENGINE = TokuDB, + PARTITION PartD VALUES IN (5,6,12) ENGINE = TokuDB, + PARTITION PartE VALUES IN (13) ENGINE = TokuDB) */ +# Test of RENAME TABLE +RENAME TABLE TableA to TableB; +SELECT * FROM TableB; +a +1 +12 +3 +4 +5 +6 +7 +8 +9 +RENAME TABLE TableB to TableA; +SELECT * FROM TableA; +a +1 +12 +3 +4 +5 +6 +7 +8 +9 +# Checking name comparision Upper vs Lower case +# Error if lower_case_table_names != 0 +# lower_case_table_names: 0 +CREATE TABLE tablea (a INT) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION parta VALUES IN (1,8,9) , +PARTITION partB VALUES IN (2,10,11) , +PARTITION Partc VALUES IN (3,4,7) , +PARTITION PartD VALUES IN (5,6,12) ); +INSERT INTO tablea VALUES (1), (2), (7), (8), (9), (10); +SHOW TABLES; +Tables_in_MySQL_Test_DB +TableA +tablea +RENAME TABLE TableA to tableA; +SELECT * FROM tablea; +a +1 +10 +2 +7 +8 +9 +SELECT * FROM tableA; +a +1 +12 +3 +4 +5 +6 +7 +8 +9 +RENAME TABLE tableA to TableA; +SHOW CREATE TABLE tablea; +Table Create Table +tablea CREATE TABLE `tablea` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION parta VALUES IN (1,8,9) ENGINE = TokuDB, + PARTITION partB VALUES IN (2,10,11) ENGINE = TokuDB, + PARTITION Partc VALUES IN (3,4,7) ENGINE = TokuDB, + PARTITION PartD VALUES IN (5,6,12) ENGINE = TokuDB) */ +DROP TABLE tablea; +# Test of REMOVE PARTITIONING +ALTER TABLE TableA REMOVE PARTITIONING; +SELECT * FROM TableA; +a +1 +12 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `TableA` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +# Cleaning up after LIST PARTITIONING test +DROP TABLE TableA; +# Testing TRUNCATE PARTITION +CREATE TABLE t1 +(a BIGINT AUTO_INCREMENT PRIMARY KEY, +b VARCHAR(255)) +ENGINE = 'TokuDB' +PARTITION BY RANGE (a) +(PARTITION LT1000 VALUES LESS THAN (1000), +PARTITION LT2000 VALUES LESS THAN (2000), +PARTITION MAX VALUES LESS THAN MAXVALUE); +INSERT INTO t1 VALUES (NULL, "First"), (NULL, "Second"), (999, "Last in LT1000"), (NULL, "First in LT2000"), (NULL, "Second in LT2000"), (1999, "Last in LT2000"), (NULL, "First in MAX"), (NULL, "Second in MAX"); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` bigint(20) NOT NULL AUTO_INCREMENT, + `b` varchar(255) DEFAULT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB AUTO_INCREMENT=2002 DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION LT1000 VALUES LESS THAN (1000) ENGINE = TokuDB, + PARTITION LT2000 VALUES LESS THAN (2000) ENGINE = TokuDB, + PARTITION MAX VALUES LESS THAN MAXVALUE ENGINE = TokuDB) */ +SELECT * FROM t1 ORDER BY a; +a b +1 First +2 Second +999 Last in LT1000 +1000 First in LT2000 +1001 Second in LT2000 +1999 Last in LT2000 +2000 First in MAX +2001 Second in MAX +ALTER TABLE t1 ANALYZE PARTITION MAX; +Table Op Msg_type Msg_text +MySQL_Test_DB.t1 analyze status OK +# Truncate without FLUSH +ALTER TABLE t1 TRUNCATE PARTITION MAX; +INSERT INTO t1 VALUES (NULL, "First after TRUNCATE MAX (1)"); +SELECT * FROM t1 WHERE a >= 2000; +a b +2000 First after TRUNCATE MAX (1) +# Truncate with FLUSH after +ALTER TABLE t1 TRUNCATE PARTITION MAX; +FLUSH TABLES; +INSERT INTO t1 VALUES (NULL, "First after TRUNCATE MAX (2)"); +SELECT * FROM t1 WHERE a >= 2000; +a b +2000 First after TRUNCATE MAX (2) +# Truncate with FLUSH before +FLUSH TABLES; +ALTER TABLE t1 TRUNCATE PARTITION MAX; +INSERT INTO t1 VALUES (NULL, "First after TRUNCATE MAX (3)"); +SELECT * FROM t1 WHERE a >= 2000; +a b +2000 First after TRUNCATE MAX (3) +# Truncate with FLUSH after INSERT +FLUSH TABLES; +ALTER TABLE t1 TRUNCATE PARTITION MAX; +INSERT INTO t1 VALUES (NULL, "First after TRUNCATE MAX (4)"); +SELECT * FROM t1 WHERE a >= 2000; +a b +2000 First after TRUNCATE MAX (4) +# Truncate without FLUSH +ALTER TABLE t1 TRUNCATE PARTITION LT1000; +INSERT INTO t1 VALUES (NULL, "First after TRUNCATE LT1000 (1)"); +SELECT * FROM t1 ORDER BY a; +a b +1000 First in LT2000 +1001 Second in LT2000 +1999 Last in LT2000 +2000 First after TRUNCATE MAX (4) +2001 First after TRUNCATE LT1000 (1) +# Truncate with FLUSH after +ALTER TABLE t1 TRUNCATE PARTITION LT1000; +FLUSH TABLES; +INSERT INTO t1 VALUES (NULL, "First after TRUNCATE LT1000 (2)"); +SELECT * FROM t1 ORDER BY a; +a b +1000 First in LT2000 +1001 Second in LT2000 +1999 Last in LT2000 +2000 First after TRUNCATE MAX (4) +2001 First after TRUNCATE LT1000 (1) +2002 First after TRUNCATE LT1000 (2) +# Truncate with FLUSH before +FLUSH TABLES; +ALTER TABLE t1 TRUNCATE PARTITION LT1000; +INSERT INTO t1 VALUES (NULL, "First after TRUNCATE LT1000 (3)"); +SELECT * FROM t1 ORDER BY a; +a b +1000 First in LT2000 +1001 Second in LT2000 +1999 Last in LT2000 +2000 First after TRUNCATE MAX (4) +2001 First after TRUNCATE LT1000 (1) +2002 First after TRUNCATE LT1000 (2) +2003 First after TRUNCATE LT1000 (3) +# Truncate with FLUSH after INSERT +FLUSH TABLES; +ALTER TABLE t1 TRUNCATE PARTITION LT1000; +INSERT INTO t1 VALUES (NULL, "First after TRUNCATE LT1000 (4)"); +SELECT * FROM t1 ORDER BY a; +a b +1000 First in LT2000 +1001 Second in LT2000 +1999 Last in LT2000 +2000 First after TRUNCATE MAX (4) +2001 First after TRUNCATE LT1000 (1) +2002 First after TRUNCATE LT1000 (2) +2003 First after TRUNCATE LT1000 (3) +2004 First after TRUNCATE LT1000 (4) +# Truncate without FLUSH +ALTER TABLE t1 TRUNCATE PARTITION LT2000; +INSERT INTO t1 VALUES (NULL, "First after TRUNCATE LT2000 (1)"); +SELECT * FROM t1 ORDER BY a; +a b +2000 First after TRUNCATE MAX (4) +2001 First after TRUNCATE LT1000 (1) +2002 First after TRUNCATE LT1000 (2) +2003 First after TRUNCATE LT1000 (3) +2004 First after TRUNCATE LT1000 (4) +2005 First after TRUNCATE LT2000 (1) +# Truncate with FLUSH after +ALTER TABLE t1 TRUNCATE PARTITION LT2000; +FLUSH TABLES; +INSERT INTO t1 VALUES (NULL, "First after TRUNCATE LT2000 (2)"); +SELECT * FROM t1 ORDER BY a; +a b +2000 First after TRUNCATE MAX (4) +2001 First after TRUNCATE LT1000 (1) +2002 First after TRUNCATE LT1000 (2) +2003 First after TRUNCATE LT1000 (3) +2004 First after TRUNCATE LT1000 (4) +2005 First after TRUNCATE LT2000 (1) +2006 First after TRUNCATE LT2000 (2) +# Truncate with FLUSH before +FLUSH TABLES; +ALTER TABLE t1 TRUNCATE PARTITION LT2000; +INSERT INTO t1 VALUES (NULL, "First after TRUNCATE LT2000 (3)"); +SELECT * FROM t1 ORDER BY a; +a b +2000 First after TRUNCATE MAX (4) +2001 First after TRUNCATE LT1000 (1) +2002 First after TRUNCATE LT1000 (2) +2003 First after TRUNCATE LT1000 (3) +2004 First after TRUNCATE LT1000 (4) +2005 First after TRUNCATE LT2000 (1) +2006 First after TRUNCATE LT2000 (2) +2007 First after TRUNCATE LT2000 (3) +# Truncate with FLUSH after INSERT +FLUSH TABLES; +ALTER TABLE t1 TRUNCATE PARTITION LT2000; +INSERT INTO t1 VALUES (NULL, "First after TRUNCATE LT2000 (4)"); +SELECT * FROM t1 ORDER BY a; +a b +2000 First after TRUNCATE MAX (4) +2001 First after TRUNCATE LT1000 (1) +2002 First after TRUNCATE LT1000 (2) +2003 First after TRUNCATE LT1000 (3) +2004 First after TRUNCATE LT1000 (4) +2005 First after TRUNCATE LT2000 (1) +2006 First after TRUNCATE LT2000 (2) +2007 First after TRUNCATE LT2000 (3) +2008 First after TRUNCATE LT2000 (4) +DROP TABLE t1; +# Cleaning up before exit +USE test; +DROP DATABASE MySQL_Test_DB; diff --git a/mysql-test/suite/tokudb.parts/r-native/partition_mgm_lc10_tokudb.result b/mysql-test/suite/tokudb.parts/r-native/partition_mgm_lc10_tokudb.result new file mode 100644 index 000000000000..84d350fcdfab --- /dev/null +++ b/mysql-test/suite/tokudb.parts/r-native/partition_mgm_lc10_tokudb.result @@ -0,0 +1,1085 @@ +# Creating database MySQL_TEST_DB +CREATE DATABASE MySQL_Test_DB; +USE MySQL_Test_DB; +# 1.0 KEY partitioning mgm +# Creating KEY partitioned table +CREATE TABLE TableA (a INT) +ENGINE = 'TokuDB' +PARTITION BY KEY (a) +(PARTITION parta , +PARTITION partB , +PARTITION Partc , +PARTITION PartD ); +INSERT INTO TableA VALUES (1), (2), (7), (8), (9), (10); +INSERT INTO TableA VALUES (3), (4), (5), (6), (11), (12); +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +# Test of ADD/COALESCE PARTITIONS +# expecting duplicate partition name +ALTER TABLE TableA ADD PARTITION +(PARTITION partA, +PARTITION Parta, +PARTITION PartA); +ERROR HY000: Duplicate partition name partA +ALTER TABLE TableA ADD PARTITION +(PARTITION partE, +PARTITION Partf, +PARTITION PartG); +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `TableA` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +(PARTITION parta ENGINE = TokuDB, + PARTITION partB ENGINE = TokuDB, + PARTITION Partc ENGINE = TokuDB, + PARTITION PartD ENGINE = TokuDB, + PARTITION partE ENGINE = TokuDB, + PARTITION Partf ENGINE = TokuDB, + PARTITION PartG ENGINE = TokuDB) */ +ALTER TABLE TableA COALESCE PARTITION 4; +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `TableA` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +(PARTITION parta ENGINE = TokuDB, + PARTITION partB ENGINE = TokuDB, + PARTITION Partc ENGINE = TokuDB) */ +# Test of EXCHANGE PARTITION WITH TABLE +# Test of REORGANIZE PARTITIONS +# Should not work on HASH/KEY +ALTER TABLE TableA REORGANIZE PARTITION parta,partB,Partc INTO +(PARTITION PARTA , +PARTITION partc ); +ERROR HY000: REORGANIZE PARTITION can only be used to reorganize partitions not to change their numbers +ALTER TABLE TableA REORGANIZE PARTITION parta,Partc INTO +(PARTITION partB , +PARTITION parta ); +ERROR HY000: When reorganizing a set of partitions they must be in consecutive order +ALTER TABLE TableA REORGANIZE PARTITION parta,partB INTO +(PARTITION partB COMMENT="Previusly named parta", +PARTITION parta COMMENT="Previusly named partB"); +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `TableA` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +(PARTITION partB COMMENT = 'Previusly named parta' ENGINE = TokuDB, + PARTITION parta COMMENT = 'Previusly named partB' ENGINE = TokuDB, + PARTITION Partc ENGINE = TokuDB) */ +# Test of RENAME TABLE +RENAME TABLE TableA to TableB; +SELECT * FROM TableB; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +RENAME TABLE TableB to TableA; +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +# Checking name comparision Upper vs Lower case +# Error if lower_case_table_names != 0 +# lower_case_table_names: 0 +CREATE TABLE tablea (a INT) +ENGINE = 'TokuDB' +PARTITION BY KEY (a) +(PARTITION parta , +PARTITION partB , +PARTITION Partc , +PARTITION PartD ); +INSERT INTO tablea VALUES (1), (2), (7), (8), (9), (10); +SHOW TABLES; +Tables_in_MySQL_Test_DB +TableA +tablea +RENAME TABLE TableA to tableA; +SELECT * FROM tablea; +a +1 +10 +2 +7 +8 +9 +SELECT * FROM tableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +RENAME TABLE tableA to TableA; +SHOW CREATE TABLE tablea; +Table Create Table +tablea CREATE TABLE `tablea` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +(PARTITION parta ENGINE = TokuDB, + PARTITION partB ENGINE = TokuDB, + PARTITION Partc ENGINE = TokuDB, + PARTITION PartD ENGINE = TokuDB) */ +DROP TABLE tablea; +# Test of REMOVE PARTITIONING +ALTER TABLE TableA REMOVE PARTITIONING; +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `TableA` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +# Cleaning up after KEY PARTITIONING test +DROP TABLE TableA; +# 2.0 HASH partitioning mgm +# expecting duplicate partition name +CREATE TABLE TableA (a INT) +ENGINE = 'TokuDB' +PARTITION BY HASH (a) +(PARTITION parta , +PARTITION partA , +PARTITION Parta , +PARTITION PartA ); +ERROR HY000: Duplicate partition name partA +# Creating Hash partitioned table +CREATE TABLE TableA (a INT) +ENGINE = 'TokuDB' +PARTITION BY HASH (a) +(PARTITION parta , +PARTITION partB , +PARTITION Partc , +PARTITION PartD ); +INSERT INTO TableA VALUES (1), (2), (7), (8), (9), (10); +INSERT INTO TableA VALUES (3), (4), (5), (6), (11), (12); +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +# Test of ADD/COALESCE PARTITIONS +# expecting duplicate partition name +ALTER TABLE TableA ADD PARTITION +(PARTITION partA, +PARTITION Parta, +PARTITION PartA); +ERROR HY000: Duplicate partition name partA +ALTER TABLE TableA ADD PARTITION +(PARTITION partE, +PARTITION Partf, +PARTITION PartG); +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `TableA` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (a) +(PARTITION parta ENGINE = TokuDB, + PARTITION partB ENGINE = TokuDB, + PARTITION Partc ENGINE = TokuDB, + PARTITION PartD ENGINE = TokuDB, + PARTITION partE ENGINE = TokuDB, + PARTITION Partf ENGINE = TokuDB, + PARTITION PartG ENGINE = TokuDB) */ +ALTER TABLE TableA COALESCE PARTITION 4; +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `TableA` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (a) +(PARTITION parta ENGINE = TokuDB, + PARTITION partB ENGINE = TokuDB, + PARTITION Partc ENGINE = TokuDB) */ +# Test of REORGANIZE PARTITIONS +# Should not work on HASH/KEY +ALTER TABLE TableA REORGANIZE PARTITION parta,partB,Partc INTO +(PARTITION PARTA , +PARTITION partc ); +ERROR HY000: REORGANIZE PARTITION can only be used to reorganize partitions not to change their numbers +ALTER TABLE TableA REORGANIZE PARTITION parta,Partc INTO +(PARTITION partB , +PARTITION parta ); +ERROR HY000: When reorganizing a set of partitions they must be in consecutive order +ALTER TABLE TableA REORGANIZE PARTITION parta,partB INTO +(PARTITION partB COMMENT="Previusly named parta", +PARTITION parta COMMENT="Previusly named partB"); +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `TableA` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (a) +(PARTITION partB COMMENT = 'Previusly named parta' ENGINE = TokuDB, + PARTITION parta COMMENT = 'Previusly named partB' ENGINE = TokuDB, + PARTITION Partc ENGINE = TokuDB) */ +# Test of RENAME TABLE +RENAME TABLE TableA to TableB; +SELECT * FROM TableB; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +RENAME TABLE TableB to TableA; +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +# Checking name comparision Upper vs Lower case +# Error if lower_case_table_names != 0 +# lower_case_table_names: 0 +CREATE TABLE tablea (a INT) +ENGINE = 'TokuDB' +PARTITION BY HASH (a) +(PARTITION parta , +PARTITION partB , +PARTITION Partc , +PARTITION PartD ); +INSERT INTO tablea VALUES (1), (2), (7), (8), (9), (10); +SHOW TABLES; +Tables_in_MySQL_Test_DB +TableA +tablea +RENAME TABLE TableA to tableA; +SELECT * FROM tablea; +a +1 +10 +2 +7 +8 +9 +SELECT * FROM tableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +RENAME TABLE tableA to TableA; +SHOW CREATE TABLE tablea; +Table Create Table +tablea CREATE TABLE `tablea` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (a) +(PARTITION parta ENGINE = TokuDB, + PARTITION partB ENGINE = TokuDB, + PARTITION Partc ENGINE = TokuDB, + PARTITION PartD ENGINE = TokuDB) */ +DROP TABLE tablea; +# Test of REMOVE PARTITIONING +ALTER TABLE TableA REMOVE PARTITIONING; +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `TableA` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +# Cleaning up after HASH PARTITIONING test +DROP TABLE TableA; +# 3.0 RANGE partitioning mgm +# Creating RANGE partitioned table +CREATE TABLE TableA (a INT) +ENGINE = 'TokuDB' +PARTITION BY RANGE (a) +(PARTITION parta VALUES LESS THAN (4) , +PARTITION partB VALUES LESS THAN (7) , +PARTITION Partc VALUES LESS THAN (10) , +PARTITION PartD VALUES LESS THAN (13) ); +INSERT INTO TableA VALUES (1), (2), (7), (8), (9), (10); +INSERT INTO TableA VALUES (3), (4), (5), (6), (11), (12); +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +# Test of ADD/DROP PARTITIONS +# expecting duplicate partition name +ALTER TABLE TableA ADD PARTITION +(PARTITION partA VALUES LESS THAN (MAXVALUE)); +ERROR HY000: Duplicate partition name partA +ALTER TABLE TableA ADD PARTITION +(PARTITION partE VALUES LESS THAN (16), +PARTITION Partf VALUES LESS THAN (19), +PARTITION PartG VALUES LESS THAN (22)); +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `TableA` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION parta VALUES LESS THAN (4) ENGINE = TokuDB, + PARTITION partB VALUES LESS THAN (7) ENGINE = TokuDB, + PARTITION Partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION PartD VALUES LESS THAN (13) ENGINE = TokuDB, + PARTITION partE VALUES LESS THAN (16) ENGINE = TokuDB, + PARTITION Partf VALUES LESS THAN (19) ENGINE = TokuDB, + PARTITION PartG VALUES LESS THAN (22) ENGINE = TokuDB) */ +ALTER TABLE TableA DROP PARTITION partE, PartG; +ALTER TABLE TableA DROP PARTITION Partf; +ALTER TABLE TableA ADD PARTITION +(PARTITION PartE VALUES LESS THAN (MAXVALUE)); +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `TableA` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION parta VALUES LESS THAN (4) ENGINE = TokuDB, + PARTITION partB VALUES LESS THAN (7) ENGINE = TokuDB, + PARTITION Partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION PartD VALUES LESS THAN (13) ENGINE = TokuDB, + PARTITION PartE VALUES LESS THAN MAXVALUE ENGINE = TokuDB) */ +# Test of REORGANIZE PARTITIONS +# Error since it must reorganize a consecutive range +ALTER TABLE TableA REORGANIZE PARTITION parta,Partc INTO +(PARTITION partB VALUES LESS THAN (3) , +PARTITION parta VALUES LESS THAN (11) ); +ERROR HY000: When reorganizing a set of partitions they must be in consecutive order +ALTER TABLE TableA REORGANIZE PARTITION partB,Partc,PartD,PartE INTO +(PARTITION partD VALUES LESS THAN (8) +COMMENT="Previously partB and partly Partc", +PARTITION partB VALUES LESS THAN (11) +COMMENT="Previously partly Partc and partly PartD", +PARTITION partC VALUES LESS THAN (MAXVALUE) +COMMENT="Previously partly PartD"); +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `TableA` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION parta VALUES LESS THAN (4) ENGINE = TokuDB, + PARTITION partD VALUES LESS THAN (8) COMMENT = 'Previously partB and partly Partc' ENGINE = TokuDB, + PARTITION partB VALUES LESS THAN (11) COMMENT = 'Previously partly Partc and partly PartD' ENGINE = TokuDB, + PARTITION partC VALUES LESS THAN MAXVALUE COMMENT = 'Previously partly PartD' ENGINE = TokuDB) */ +# Test of RENAME TABLE +RENAME TABLE TableA to TableB; +SELECT * FROM TableB; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +RENAME TABLE TableB to TableA; +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +# Checking name comparision Upper vs Lower case +# Error if lower_case_table_names != 0 +# lower_case_table_names: 0 +CREATE TABLE tablea (a INT) +ENGINE = 'TokuDB' +PARTITION BY RANGE (a) +(PARTITION parta VALUES LESS THAN (4) , +PARTITION partB VALUES LESS THAN (7) , +PARTITION Partc VALUES LESS THAN (10) , +PARTITION PartD VALUES LESS THAN (13) ); +INSERT INTO tablea VALUES (1), (2), (7), (8), (9), (10); +SHOW TABLES; +Tables_in_MySQL_Test_DB +TableA +tablea +RENAME TABLE TableA to tableA; +SELECT * FROM tablea; +a +1 +10 +2 +7 +8 +9 +SELECT * FROM tableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +RENAME TABLE tableA to TableA; +SHOW CREATE TABLE tablea; +Table Create Table +tablea CREATE TABLE `tablea` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION parta VALUES LESS THAN (4) ENGINE = TokuDB, + PARTITION partB VALUES LESS THAN (7) ENGINE = TokuDB, + PARTITION Partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION PartD VALUES LESS THAN (13) ENGINE = TokuDB) */ +DROP TABLE tablea; +# Test of REMOVE PARTITIONING +ALTER TABLE TableA REMOVE PARTITIONING; +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `TableA` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +# Cleaning up after RANGE PARTITIONING test +DROP TABLE TableA; +# 4.0 LIST partitioning mgm +# Creating LIST partitioned table +CREATE TABLE TableA (a INT) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION parta VALUES IN (1,8,9) , +PARTITION partB VALUES IN (2,10,11) , +PARTITION Partc VALUES IN (3,4,7) , +PARTITION PartD VALUES IN (5,6,12) ); +INSERT INTO TableA VALUES (1), (2), (7), (8), (9), (10); +INSERT INTO TableA VALUES (3), (4), (5), (6), (11), (12); +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +# Test of ADD/DROP PARTITIONS +# expecting duplicate partition name +ALTER TABLE TableA ADD PARTITION +(PARTITION partA VALUES IN (0)); +ERROR HY000: Duplicate partition name partA +ALTER TABLE TableA ADD PARTITION +(PARTITION partE VALUES IN (16), +PARTITION Partf VALUES IN (19), +PARTITION PartG VALUES IN (22)); +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `TableA` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION parta VALUES IN (1,8,9) ENGINE = TokuDB, + PARTITION partB VALUES IN (2,10,11) ENGINE = TokuDB, + PARTITION Partc VALUES IN (3,4,7) ENGINE = TokuDB, + PARTITION PartD VALUES IN (5,6,12) ENGINE = TokuDB, + PARTITION partE VALUES IN (16) ENGINE = TokuDB, + PARTITION Partf VALUES IN (19) ENGINE = TokuDB, + PARTITION PartG VALUES IN (22) ENGINE = TokuDB) */ +ALTER TABLE TableA DROP PARTITION partE, PartG; +ALTER TABLE TableA DROP PARTITION Partf; +ALTER TABLE TableA ADD PARTITION +(PARTITION PartE VALUES IN (13)); +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `TableA` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION parta VALUES IN (1,8,9) ENGINE = TokuDB, + PARTITION partB VALUES IN (2,10,11) ENGINE = TokuDB, + PARTITION Partc VALUES IN (3,4,7) ENGINE = TokuDB, + PARTITION PartD VALUES IN (5,6,12) ENGINE = TokuDB, + PARTITION PartE VALUES IN (13) ENGINE = TokuDB) */ +# Test of REORGANIZE PARTITIONS +ALTER TABLE TableA REORGANIZE PARTITION parta,Partc INTO +(PARTITION Partc VALUES IN (1,7) +COMMENT = "Mix 1 of old parta and Partc", +PARTITION partF VALUES IN (3,9) +COMMENT = "Mix 2 of old parta and Partc", +PARTITION parta VALUES IN (4,8) +COMMENT = "Mix 3 of old parta and Partc"); +ERROR HY000: When reorganizing a set of partitions they must be in consecutive order +ALTER TABLE TableA REORGANIZE PARTITION parta,partB,Partc INTO +(PARTITION Partc VALUES IN (1,7) +COMMENT = "Mix 1 of old parta and Partc", +PARTITION parta VALUES IN (3,9) +COMMENT = "Mix 2 of old parta and Partc", +PARTITION partB VALUES IN (4,8) +COMMENT = "Mix 3 of old parta and Partc"); +SELECT * FROM TableA; +a +1 +12 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `TableA` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION Partc VALUES IN (1,7) COMMENT = 'Mix 1 of old parta and Partc' ENGINE = TokuDB, + PARTITION parta VALUES IN (3,9) COMMENT = 'Mix 2 of old parta and Partc' ENGINE = TokuDB, + PARTITION partB VALUES IN (4,8) COMMENT = 'Mix 3 of old parta and Partc' ENGINE = TokuDB, + PARTITION PartD VALUES IN (5,6,12) ENGINE = TokuDB, + PARTITION PartE VALUES IN (13) ENGINE = TokuDB) */ +# Test of RENAME TABLE +RENAME TABLE TableA to TableB; +SELECT * FROM TableB; +a +1 +12 +3 +4 +5 +6 +7 +8 +9 +RENAME TABLE TableB to TableA; +SELECT * FROM TableA; +a +1 +12 +3 +4 +5 +6 +7 +8 +9 +# Checking name comparision Upper vs Lower case +# Error if lower_case_table_names != 0 +# lower_case_table_names: 0 +CREATE TABLE tablea (a INT) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION parta VALUES IN (1,8,9) , +PARTITION partB VALUES IN (2,10,11) , +PARTITION Partc VALUES IN (3,4,7) , +PARTITION PartD VALUES IN (5,6,12) ); +INSERT INTO tablea VALUES (1), (2), (7), (8), (9), (10); +SHOW TABLES; +Tables_in_MySQL_Test_DB +TableA +tablea +RENAME TABLE TableA to tableA; +SELECT * FROM tablea; +a +1 +10 +2 +7 +8 +9 +SELECT * FROM tableA; +a +1 +12 +3 +4 +5 +6 +7 +8 +9 +RENAME TABLE tableA to TableA; +SHOW CREATE TABLE tablea; +Table Create Table +tablea CREATE TABLE `tablea` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION parta VALUES IN (1,8,9) ENGINE = TokuDB, + PARTITION partB VALUES IN (2,10,11) ENGINE = TokuDB, + PARTITION Partc VALUES IN (3,4,7) ENGINE = TokuDB, + PARTITION PartD VALUES IN (5,6,12) ENGINE = TokuDB) */ +DROP TABLE tablea; +# Test of REMOVE PARTITIONING +ALTER TABLE TableA REMOVE PARTITIONING; +SELECT * FROM TableA; +a +1 +12 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `TableA` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +# Cleaning up after LIST PARTITIONING test +DROP TABLE TableA; +# Testing TRUNCATE PARTITION +CREATE TABLE t1 +(a BIGINT AUTO_INCREMENT PRIMARY KEY, +b VARCHAR(255)) +ENGINE = 'TokuDB' +PARTITION BY RANGE (a) +(PARTITION LT1000 VALUES LESS THAN (1000), +PARTITION LT2000 VALUES LESS THAN (2000), +PARTITION MAX VALUES LESS THAN MAXVALUE); +INSERT INTO t1 VALUES (NULL, "First"), (NULL, "Second"), (999, "Last in LT1000"), (NULL, "First in LT2000"), (NULL, "Second in LT2000"), (1999, "Last in LT2000"), (NULL, "First in MAX"), (NULL, "Second in MAX"); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` bigint(20) NOT NULL AUTO_INCREMENT, + `b` varchar(255) DEFAULT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB AUTO_INCREMENT=2002 DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION LT1000 VALUES LESS THAN (1000) ENGINE = TokuDB, + PARTITION LT2000 VALUES LESS THAN (2000) ENGINE = TokuDB, + PARTITION MAX VALUES LESS THAN MAXVALUE ENGINE = TokuDB) */ +SELECT * FROM t1 ORDER BY a; +a b +1 First +2 Second +999 Last in LT1000 +1000 First in LT2000 +1001 Second in LT2000 +1999 Last in LT2000 +2000 First in MAX +2001 Second in MAX +ALTER TABLE t1 ANALYZE PARTITION MAX; +Table Op Msg_type Msg_text +MySQL_Test_DB.t1 analyze status OK +# Truncate without FLUSH +ALTER TABLE t1 TRUNCATE PARTITION MAX; +INSERT INTO t1 VALUES (NULL, "First after TRUNCATE MAX (1)"); +SELECT * FROM t1 WHERE a >= 2000; +a b +2000 First after TRUNCATE MAX (1) +# Truncate with FLUSH after +ALTER TABLE t1 TRUNCATE PARTITION MAX; +FLUSH TABLES; +INSERT INTO t1 VALUES (NULL, "First after TRUNCATE MAX (2)"); +SELECT * FROM t1 WHERE a >= 2000; +a b +2000 First after TRUNCATE MAX (2) +# Truncate with FLUSH before +FLUSH TABLES; +ALTER TABLE t1 TRUNCATE PARTITION MAX; +INSERT INTO t1 VALUES (NULL, "First after TRUNCATE MAX (3)"); +SELECT * FROM t1 WHERE a >= 2000; +a b +2000 First after TRUNCATE MAX (3) +# Truncate with FLUSH after INSERT +FLUSH TABLES; +ALTER TABLE t1 TRUNCATE PARTITION MAX; +INSERT INTO t1 VALUES (NULL, "First after TRUNCATE MAX (4)"); +SELECT * FROM t1 WHERE a >= 2000; +a b +2000 First after TRUNCATE MAX (4) +# Truncate without FLUSH +ALTER TABLE t1 TRUNCATE PARTITION LT1000; +INSERT INTO t1 VALUES (NULL, "First after TRUNCATE LT1000 (1)"); +SELECT * FROM t1 ORDER BY a; +a b +1000 First in LT2000 +1001 Second in LT2000 +1999 Last in LT2000 +2000 First after TRUNCATE MAX (4) +2001 First after TRUNCATE LT1000 (1) +# Truncate with FLUSH after +ALTER TABLE t1 TRUNCATE PARTITION LT1000; +FLUSH TABLES; +INSERT INTO t1 VALUES (NULL, "First after TRUNCATE LT1000 (2)"); +SELECT * FROM t1 ORDER BY a; +a b +1000 First in LT2000 +1001 Second in LT2000 +1999 Last in LT2000 +2000 First after TRUNCATE MAX (4) +2001 First after TRUNCATE LT1000 (1) +2002 First after TRUNCATE LT1000 (2) +# Truncate with FLUSH before +FLUSH TABLES; +ALTER TABLE t1 TRUNCATE PARTITION LT1000; +INSERT INTO t1 VALUES (NULL, "First after TRUNCATE LT1000 (3)"); +SELECT * FROM t1 ORDER BY a; +a b +1000 First in LT2000 +1001 Second in LT2000 +1999 Last in LT2000 +2000 First after TRUNCATE MAX (4) +2001 First after TRUNCATE LT1000 (1) +2002 First after TRUNCATE LT1000 (2) +2003 First after TRUNCATE LT1000 (3) +# Truncate with FLUSH after INSERT +FLUSH TABLES; +ALTER TABLE t1 TRUNCATE PARTITION LT1000; +INSERT INTO t1 VALUES (NULL, "First after TRUNCATE LT1000 (4)"); +SELECT * FROM t1 ORDER BY a; +a b +1000 First in LT2000 +1001 Second in LT2000 +1999 Last in LT2000 +2000 First after TRUNCATE MAX (4) +2001 First after TRUNCATE LT1000 (1) +2002 First after TRUNCATE LT1000 (2) +2003 First after TRUNCATE LT1000 (3) +2004 First after TRUNCATE LT1000 (4) +# Truncate without FLUSH +ALTER TABLE t1 TRUNCATE PARTITION LT2000; +INSERT INTO t1 VALUES (NULL, "First after TRUNCATE LT2000 (1)"); +SELECT * FROM t1 ORDER BY a; +a b +2000 First after TRUNCATE MAX (4) +2001 First after TRUNCATE LT1000 (1) +2002 First after TRUNCATE LT1000 (2) +2003 First after TRUNCATE LT1000 (3) +2004 First after TRUNCATE LT1000 (4) +2005 First after TRUNCATE LT2000 (1) +# Truncate with FLUSH after +ALTER TABLE t1 TRUNCATE PARTITION LT2000; +FLUSH TABLES; +INSERT INTO t1 VALUES (NULL, "First after TRUNCATE LT2000 (2)"); +SELECT * FROM t1 ORDER BY a; +a b +2000 First after TRUNCATE MAX (4) +2001 First after TRUNCATE LT1000 (1) +2002 First after TRUNCATE LT1000 (2) +2003 First after TRUNCATE LT1000 (3) +2004 First after TRUNCATE LT1000 (4) +2005 First after TRUNCATE LT2000 (1) +2006 First after TRUNCATE LT2000 (2) +# Truncate with FLUSH before +FLUSH TABLES; +ALTER TABLE t1 TRUNCATE PARTITION LT2000; +INSERT INTO t1 VALUES (NULL, "First after TRUNCATE LT2000 (3)"); +SELECT * FROM t1 ORDER BY a; +a b +2000 First after TRUNCATE MAX (4) +2001 First after TRUNCATE LT1000 (1) +2002 First after TRUNCATE LT1000 (2) +2003 First after TRUNCATE LT1000 (3) +2004 First after TRUNCATE LT1000 (4) +2005 First after TRUNCATE LT2000 (1) +2006 First after TRUNCATE LT2000 (2) +2007 First after TRUNCATE LT2000 (3) +# Truncate with FLUSH after INSERT +FLUSH TABLES; +ALTER TABLE t1 TRUNCATE PARTITION LT2000; +INSERT INTO t1 VALUES (NULL, "First after TRUNCATE LT2000 (4)"); +SELECT * FROM t1 ORDER BY a; +a b +2000 First after TRUNCATE MAX (4) +2001 First after TRUNCATE LT1000 (1) +2002 First after TRUNCATE LT1000 (2) +2003 First after TRUNCATE LT1000 (3) +2004 First after TRUNCATE LT1000 (4) +2005 First after TRUNCATE LT2000 (1) +2006 First after TRUNCATE LT2000 (2) +2007 First after TRUNCATE LT2000 (3) +2008 First after TRUNCATE LT2000 (4) +DROP TABLE t1; +# Cleaning up before exit +USE test; +DROP DATABASE MySQL_Test_DB; diff --git a/mysql-test/suite/tokudb.parts/r-native/partition_mgm_lc1_tokudb.result b/mysql-test/suite/tokudb.parts/r-native/partition_mgm_lc1_tokudb.result new file mode 100644 index 000000000000..0a882a532e53 --- /dev/null +++ b/mysql-test/suite/tokudb.parts/r-native/partition_mgm_lc1_tokudb.result @@ -0,0 +1,1123 @@ +# Creating database MySQL_TEST_DB +CREATE DATABASE MySQL_Test_DB; +USE MySQL_Test_DB; +# 1.0 KEY partitioning mgm +# Creating KEY partitioned table +CREATE TABLE TableA (a INT) +ENGINE = 'TokuDB' +PARTITION BY KEY (a) +(PARTITION parta , +PARTITION partB , +PARTITION Partc , +PARTITION PartD ); +INSERT INTO TableA VALUES (1), (2), (7), (8), (9), (10); +INSERT INTO TableA VALUES (3), (4), (5), (6), (11), (12); +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +# Test of ADD/COALESCE PARTITIONS +# expecting duplicate partition name +ALTER TABLE TableA ADD PARTITION +(PARTITION partA, +PARTITION Parta, +PARTITION PartA); +ERROR HY000: Duplicate partition name partA +ALTER TABLE TableA ADD PARTITION +(PARTITION partE, +PARTITION Partf, +PARTITION PartG); +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `tablea` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +(PARTITION parta ENGINE = TokuDB, + PARTITION partB ENGINE = TokuDB, + PARTITION Partc ENGINE = TokuDB, + PARTITION PartD ENGINE = TokuDB, + PARTITION partE ENGINE = TokuDB, + PARTITION Partf ENGINE = TokuDB, + PARTITION PartG ENGINE = TokuDB) */ +ALTER TABLE TableA COALESCE PARTITION 4; +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `tablea` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +(PARTITION parta ENGINE = TokuDB, + PARTITION partB ENGINE = TokuDB, + PARTITION Partc ENGINE = TokuDB) */ +# Test of EXCHANGE PARTITION WITH TABLE +SELECT PARTITION_NAME, TABLE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA ='MySQL_Test_DB' AND TABLE_NAME = 'TableA'; +PARTITION_NAME TABLE_ROWS +parta 4 +partB 4 +Partc 4 +CREATE TABLE TableB LIKE TableA; +ALTER TABLE TableB REMOVE PARTITIONING; +ALTER TABLE TableA EXCHANGE PARTITION parta WITH TABLE TableB; +SELECT * FROM TableA; +a +1 +12 +2 +3 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `tablea` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +(PARTITION parta ENGINE = TokuDB, + PARTITION partB ENGINE = TokuDB, + PARTITION Partc ENGINE = TokuDB) */ +SELECT * FROM TableB; +a +10 +11 +4 +5 +SHOW CREATE TABLE TableB; +Table Create Table +TableB CREATE TABLE `tableb` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +SELECT PARTITION_NAME, IF(TABLE_ROWS, 'YES', 'NO') AS HAVE_TABLE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA ='MySQL_Test_DB' AND TABLE_NAME = 'TableA'; +PARTITION_NAME HAVE_TABLE_ROWS +parta NO +partB YES +Partc YES +ALTER TABLE TableA EXCHANGE PARTITION parta WITH TABLE TableB; +INSERT INTO TableB VALUES (11); +ALTER TABLE TableA EXCHANGE PARTITION Partc WITH TABLE TableB; +ERROR HY000: Found a row that does not match the partition +DROP TABLE TableB; +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `tablea` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +(PARTITION parta ENGINE = TokuDB, + PARTITION partB ENGINE = TokuDB, + PARTITION Partc ENGINE = TokuDB) */ +# Test of REORGANIZE PARTITIONS +# Should not work on HASH/KEY +ALTER TABLE TableA REORGANIZE PARTITION parta,partB,Partc INTO +(PARTITION PARTA , +PARTITION partc ); +ERROR HY000: REORGANIZE PARTITION can only be used to reorganize partitions not to change their numbers +ALTER TABLE TableA REORGANIZE PARTITION parta,Partc INTO +(PARTITION partB , +PARTITION parta ); +ERROR HY000: When reorganizing a set of partitions they must be in consecutive order +ALTER TABLE TableA REORGANIZE PARTITION parta,partB INTO +(PARTITION partB COMMENT="Previusly named parta", +PARTITION parta COMMENT="Previusly named partB"); +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `tablea` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +(PARTITION partB COMMENT = 'Previusly named parta' ENGINE = TokuDB, + PARTITION parta COMMENT = 'Previusly named partB' ENGINE = TokuDB, + PARTITION Partc ENGINE = TokuDB) */ +# Test of RENAME TABLE +RENAME TABLE TableA to TableB; +SELECT * FROM TableB; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +RENAME TABLE TableB to TableA; +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +# Checking name comparision Upper vs Lower case +# Error if lower_case_table_names != 0 +# lower_case_table_names: 1 +CREATE TABLE tablea (a INT) +ENGINE = 'TokuDB' +PARTITION BY KEY (a) +(PARTITION parta , +PARTITION partB , +PARTITION Partc , +PARTITION PartD ); +ERROR 42S01: Table 'tablea' already exists +SHOW TABLES; +Tables_in_mysql_test_db +tablea +RENAME TABLE TableA to tablea; +ERROR 42S01: Table 'tablea' already exists +RENAME TABLE tablea to TableA; +ERROR 42S01: Table 'tablea' already exists +SELECT * FROM tablea; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE tablea; +Table Create Table +tablea CREATE TABLE `tablea` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +(PARTITION partB COMMENT = 'Previusly named parta' ENGINE = TokuDB, + PARTITION parta COMMENT = 'Previusly named partB' ENGINE = TokuDB, + PARTITION Partc ENGINE = TokuDB) */ +# Test of REMOVE PARTITIONING +ALTER TABLE TableA REMOVE PARTITIONING; +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `tablea` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +# Cleaning up after KEY PARTITIONING test +DROP TABLE TableA; +# 2.0 HASH partitioning mgm +# expecting duplicate partition name +CREATE TABLE TableA (a INT) +ENGINE = 'TokuDB' +PARTITION BY HASH (a) +(PARTITION parta , +PARTITION partA , +PARTITION Parta , +PARTITION PartA ); +ERROR HY000: Duplicate partition name partA +# Creating Hash partitioned table +CREATE TABLE TableA (a INT) +ENGINE = 'TokuDB' +PARTITION BY HASH (a) +(PARTITION parta , +PARTITION partB , +PARTITION Partc , +PARTITION PartD ); +INSERT INTO TableA VALUES (1), (2), (7), (8), (9), (10); +INSERT INTO TableA VALUES (3), (4), (5), (6), (11), (12); +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +# Test of ADD/COALESCE PARTITIONS +# expecting duplicate partition name +ALTER TABLE TableA ADD PARTITION +(PARTITION partA, +PARTITION Parta, +PARTITION PartA); +ERROR HY000: Duplicate partition name partA +ALTER TABLE TableA ADD PARTITION +(PARTITION partE, +PARTITION Partf, +PARTITION PartG); +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `tablea` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (a) +(PARTITION parta ENGINE = TokuDB, + PARTITION partB ENGINE = TokuDB, + PARTITION Partc ENGINE = TokuDB, + PARTITION PartD ENGINE = TokuDB, + PARTITION partE ENGINE = TokuDB, + PARTITION Partf ENGINE = TokuDB, + PARTITION PartG ENGINE = TokuDB) */ +ALTER TABLE TableA COALESCE PARTITION 4; +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `tablea` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (a) +(PARTITION parta ENGINE = TokuDB, + PARTITION partB ENGINE = TokuDB, + PARTITION Partc ENGINE = TokuDB) */ +# Test of REORGANIZE PARTITIONS +# Should not work on HASH/KEY +ALTER TABLE TableA REORGANIZE PARTITION parta,partB,Partc INTO +(PARTITION PARTA , +PARTITION partc ); +ERROR HY000: REORGANIZE PARTITION can only be used to reorganize partitions not to change their numbers +ALTER TABLE TableA REORGANIZE PARTITION parta,Partc INTO +(PARTITION partB , +PARTITION parta ); +ERROR HY000: When reorganizing a set of partitions they must be in consecutive order +ALTER TABLE TableA REORGANIZE PARTITION parta,partB INTO +(PARTITION partB COMMENT="Previusly named parta", +PARTITION parta COMMENT="Previusly named partB"); +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `tablea` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (a) +(PARTITION partB COMMENT = 'Previusly named parta' ENGINE = TokuDB, + PARTITION parta COMMENT = 'Previusly named partB' ENGINE = TokuDB, + PARTITION Partc ENGINE = TokuDB) */ +# Test of RENAME TABLE +RENAME TABLE TableA to TableB; +SELECT * FROM TableB; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +RENAME TABLE TableB to TableA; +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +# Checking name comparision Upper vs Lower case +# Error if lower_case_table_names != 0 +# lower_case_table_names: 1 +CREATE TABLE tablea (a INT) +ENGINE = 'TokuDB' +PARTITION BY HASH (a) +(PARTITION parta , +PARTITION partB , +PARTITION Partc , +PARTITION PartD ); +ERROR 42S01: Table 'tablea' already exists +SHOW TABLES; +Tables_in_mysql_test_db +tablea +RENAME TABLE TableA to tablea; +ERROR 42S01: Table 'tablea' already exists +RENAME TABLE tablea to TableA; +ERROR 42S01: Table 'tablea' already exists +SELECT * FROM tablea; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE tablea; +Table Create Table +tablea CREATE TABLE `tablea` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (a) +(PARTITION partB COMMENT = 'Previusly named parta' ENGINE = TokuDB, + PARTITION parta COMMENT = 'Previusly named partB' ENGINE = TokuDB, + PARTITION Partc ENGINE = TokuDB) */ +# Test of REMOVE PARTITIONING +ALTER TABLE TableA REMOVE PARTITIONING; +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `tablea` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +# Cleaning up after HASH PARTITIONING test +DROP TABLE TableA; +# 3.0 RANGE partitioning mgm +# Creating RANGE partitioned table +CREATE TABLE TableA (a INT) +ENGINE = 'TokuDB' +PARTITION BY RANGE (a) +(PARTITION parta VALUES LESS THAN (4) , +PARTITION partB VALUES LESS THAN (7) , +PARTITION Partc VALUES LESS THAN (10) , +PARTITION PartD VALUES LESS THAN (13) ); +INSERT INTO TableA VALUES (1), (2), (7), (8), (9), (10); +INSERT INTO TableA VALUES (3), (4), (5), (6), (11), (12); +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +# Test of ADD/DROP PARTITIONS +# expecting duplicate partition name +ALTER TABLE TableA ADD PARTITION +(PARTITION partA VALUES LESS THAN (MAXVALUE)); +ERROR HY000: Duplicate partition name partA +ALTER TABLE TableA ADD PARTITION +(PARTITION partE VALUES LESS THAN (16), +PARTITION Partf VALUES LESS THAN (19), +PARTITION PartG VALUES LESS THAN (22)); +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `tablea` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION parta VALUES LESS THAN (4) ENGINE = TokuDB, + PARTITION partB VALUES LESS THAN (7) ENGINE = TokuDB, + PARTITION Partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION PartD VALUES LESS THAN (13) ENGINE = TokuDB, + PARTITION partE VALUES LESS THAN (16) ENGINE = TokuDB, + PARTITION Partf VALUES LESS THAN (19) ENGINE = TokuDB, + PARTITION PartG VALUES LESS THAN (22) ENGINE = TokuDB) */ +ALTER TABLE TableA DROP PARTITION partE, PartG; +ALTER TABLE TableA DROP PARTITION Partf; +ALTER TABLE TableA ADD PARTITION +(PARTITION PartE VALUES LESS THAN (MAXVALUE)); +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `tablea` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION parta VALUES LESS THAN (4) ENGINE = TokuDB, + PARTITION partB VALUES LESS THAN (7) ENGINE = TokuDB, + PARTITION Partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION PartD VALUES LESS THAN (13) ENGINE = TokuDB, + PARTITION PartE VALUES LESS THAN MAXVALUE ENGINE = TokuDB) */ +# Test of REORGANIZE PARTITIONS +# Error since it must reorganize a consecutive range +ALTER TABLE TableA REORGANIZE PARTITION parta,Partc INTO +(PARTITION partB VALUES LESS THAN (3) , +PARTITION parta VALUES LESS THAN (11) ); +ERROR HY000: When reorganizing a set of partitions they must be in consecutive order +ALTER TABLE TableA REORGANIZE PARTITION partB,Partc,PartD,PartE INTO +(PARTITION partD VALUES LESS THAN (8) +COMMENT="Previously partB and partly Partc", +PARTITION partB VALUES LESS THAN (11) +COMMENT="Previously partly Partc and partly PartD", +PARTITION partC VALUES LESS THAN (MAXVALUE) +COMMENT="Previously partly PartD"); +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `tablea` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION parta VALUES LESS THAN (4) ENGINE = TokuDB, + PARTITION partD VALUES LESS THAN (8) COMMENT = 'Previously partB and partly Partc' ENGINE = TokuDB, + PARTITION partB VALUES LESS THAN (11) COMMENT = 'Previously partly Partc and partly PartD' ENGINE = TokuDB, + PARTITION partC VALUES LESS THAN MAXVALUE COMMENT = 'Previously partly PartD' ENGINE = TokuDB) */ +# Test of RENAME TABLE +RENAME TABLE TableA to TableB; +SELECT * FROM TableB; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +RENAME TABLE TableB to TableA; +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +# Checking name comparision Upper vs Lower case +# Error if lower_case_table_names != 0 +# lower_case_table_names: 1 +CREATE TABLE tablea (a INT) +ENGINE = 'TokuDB' +PARTITION BY RANGE (a) +(PARTITION parta VALUES LESS THAN (4) , +PARTITION partB VALUES LESS THAN (7) , +PARTITION Partc VALUES LESS THAN (10) , +PARTITION PartD VALUES LESS THAN (13) ); +ERROR 42S01: Table 'tablea' already exists +SHOW TABLES; +Tables_in_mysql_test_db +tablea +RENAME TABLE TableA to tablea; +ERROR 42S01: Table 'tablea' already exists +RENAME TABLE tablea to TableA; +ERROR 42S01: Table 'tablea' already exists +SELECT * FROM tablea; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE tablea; +Table Create Table +tablea CREATE TABLE `tablea` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION parta VALUES LESS THAN (4) ENGINE = TokuDB, + PARTITION partD VALUES LESS THAN (8) COMMENT = 'Previously partB and partly Partc' ENGINE = TokuDB, + PARTITION partB VALUES LESS THAN (11) COMMENT = 'Previously partly Partc and partly PartD' ENGINE = TokuDB, + PARTITION partC VALUES LESS THAN MAXVALUE COMMENT = 'Previously partly PartD' ENGINE = TokuDB) */ +# Test of REMOVE PARTITIONING +ALTER TABLE TableA REMOVE PARTITIONING; +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `tablea` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +# Cleaning up after RANGE PARTITIONING test +DROP TABLE TableA; +# 4.0 LIST partitioning mgm +# Creating LIST partitioned table +CREATE TABLE TableA (a INT) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION parta VALUES IN (1,8,9) , +PARTITION partB VALUES IN (2,10,11) , +PARTITION Partc VALUES IN (3,4,7) , +PARTITION PartD VALUES IN (5,6,12) ); +INSERT INTO TableA VALUES (1), (2), (7), (8), (9), (10); +INSERT INTO TableA VALUES (3), (4), (5), (6), (11), (12); +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +# Test of ADD/DROP PARTITIONS +# expecting duplicate partition name +ALTER TABLE TableA ADD PARTITION +(PARTITION partA VALUES IN (0)); +ERROR HY000: Duplicate partition name partA +ALTER TABLE TableA ADD PARTITION +(PARTITION partE VALUES IN (16), +PARTITION Partf VALUES IN (19), +PARTITION PartG VALUES IN (22)); +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `tablea` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION parta VALUES IN (1,8,9) ENGINE = TokuDB, + PARTITION partB VALUES IN (2,10,11) ENGINE = TokuDB, + PARTITION Partc VALUES IN (3,4,7) ENGINE = TokuDB, + PARTITION PartD VALUES IN (5,6,12) ENGINE = TokuDB, + PARTITION partE VALUES IN (16) ENGINE = TokuDB, + PARTITION Partf VALUES IN (19) ENGINE = TokuDB, + PARTITION PartG VALUES IN (22) ENGINE = TokuDB) */ +ALTER TABLE TableA DROP PARTITION partE, PartG; +ALTER TABLE TableA DROP PARTITION Partf; +ALTER TABLE TableA ADD PARTITION +(PARTITION PartE VALUES IN (13)); +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `tablea` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION parta VALUES IN (1,8,9) ENGINE = TokuDB, + PARTITION partB VALUES IN (2,10,11) ENGINE = TokuDB, + PARTITION Partc VALUES IN (3,4,7) ENGINE = TokuDB, + PARTITION PartD VALUES IN (5,6,12) ENGINE = TokuDB, + PARTITION PartE VALUES IN (13) ENGINE = TokuDB) */ +# Test of REORGANIZE PARTITIONS +ALTER TABLE TableA REORGANIZE PARTITION parta,Partc INTO +(PARTITION Partc VALUES IN (1,7) +COMMENT = "Mix 1 of old parta and Partc", +PARTITION partF VALUES IN (3,9) +COMMENT = "Mix 2 of old parta and Partc", +PARTITION parta VALUES IN (4,8) +COMMENT = "Mix 3 of old parta and Partc"); +ERROR HY000: When reorganizing a set of partitions they must be in consecutive order +ALTER TABLE TableA REORGANIZE PARTITION parta,partB,Partc INTO +(PARTITION Partc VALUES IN (1,7) +COMMENT = "Mix 1 of old parta and Partc", +PARTITION parta VALUES IN (3,9) +COMMENT = "Mix 2 of old parta and Partc", +PARTITION partB VALUES IN (4,8) +COMMENT = "Mix 3 of old parta and Partc"); +SELECT * FROM TableA; +a +1 +12 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `tablea` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION Partc VALUES IN (1,7) COMMENT = 'Mix 1 of old parta and Partc' ENGINE = TokuDB, + PARTITION parta VALUES IN (3,9) COMMENT = 'Mix 2 of old parta and Partc' ENGINE = TokuDB, + PARTITION partB VALUES IN (4,8) COMMENT = 'Mix 3 of old parta and Partc' ENGINE = TokuDB, + PARTITION PartD VALUES IN (5,6,12) ENGINE = TokuDB, + PARTITION PartE VALUES IN (13) ENGINE = TokuDB) */ +# Test of RENAME TABLE +RENAME TABLE TableA to TableB; +SELECT * FROM TableB; +a +1 +12 +3 +4 +5 +6 +7 +8 +9 +RENAME TABLE TableB to TableA; +SELECT * FROM TableA; +a +1 +12 +3 +4 +5 +6 +7 +8 +9 +# Checking name comparision Upper vs Lower case +# Error if lower_case_table_names != 0 +# lower_case_table_names: 1 +CREATE TABLE tablea (a INT) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION parta VALUES IN (1,8,9) , +PARTITION partB VALUES IN (2,10,11) , +PARTITION Partc VALUES IN (3,4,7) , +PARTITION PartD VALUES IN (5,6,12) ); +ERROR 42S01: Table 'tablea' already exists +SHOW TABLES; +Tables_in_mysql_test_db +tablea +RENAME TABLE TableA to tablea; +ERROR 42S01: Table 'tablea' already exists +RENAME TABLE tablea to TableA; +ERROR 42S01: Table 'tablea' already exists +SELECT * FROM tablea; +a +1 +12 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE tablea; +Table Create Table +tablea CREATE TABLE `tablea` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION Partc VALUES IN (1,7) COMMENT = 'Mix 1 of old parta and Partc' ENGINE = TokuDB, + PARTITION parta VALUES IN (3,9) COMMENT = 'Mix 2 of old parta and Partc' ENGINE = TokuDB, + PARTITION partB VALUES IN (4,8) COMMENT = 'Mix 3 of old parta and Partc' ENGINE = TokuDB, + PARTITION PartD VALUES IN (5,6,12) ENGINE = TokuDB, + PARTITION PartE VALUES IN (13) ENGINE = TokuDB) */ +# Test of REMOVE PARTITIONING +ALTER TABLE TableA REMOVE PARTITIONING; +SELECT * FROM TableA; +a +1 +12 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `tablea` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +# Cleaning up after LIST PARTITIONING test +DROP TABLE TableA; +# Testing TRUNCATE PARTITION +CREATE TABLE t1 +(a BIGINT AUTO_INCREMENT PRIMARY KEY, +b VARCHAR(255)) +ENGINE = 'TokuDB' +PARTITION BY RANGE (a) +(PARTITION LT1000 VALUES LESS THAN (1000), +PARTITION LT2000 VALUES LESS THAN (2000), +PARTITION MAX VALUES LESS THAN MAXVALUE); +INSERT INTO t1 VALUES (NULL, "First"), (NULL, "Second"), (999, "Last in LT1000"), (NULL, "First in LT2000"), (NULL, "Second in LT2000"), (1999, "Last in LT2000"), (NULL, "First in MAX"), (NULL, "Second in MAX"); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` bigint(20) NOT NULL AUTO_INCREMENT, + `b` varchar(255) DEFAULT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB AUTO_INCREMENT=2002 DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION LT1000 VALUES LESS THAN (1000) ENGINE = TokuDB, + PARTITION LT2000 VALUES LESS THAN (2000) ENGINE = TokuDB, + PARTITION MAX VALUES LESS THAN MAXVALUE ENGINE = TokuDB) */ +SELECT * FROM t1 ORDER BY a; +a b +1 First +2 Second +999 Last in LT1000 +1000 First in LT2000 +1001 Second in LT2000 +1999 Last in LT2000 +2000 First in MAX +2001 Second in MAX +ALTER TABLE t1 ANALYZE PARTITION MAX; +Table Op Msg_type Msg_text +mysql_test_db.t1 analyze status OK +# Truncate without FLUSH +ALTER TABLE t1 TRUNCATE PARTITION MAX; +INSERT INTO t1 VALUES (NULL, "First after TRUNCATE MAX (1)"); +SELECT * FROM t1 WHERE a >= 2000; +a b +2000 First after TRUNCATE MAX (1) +# Truncate with FLUSH after +ALTER TABLE t1 TRUNCATE PARTITION MAX; +FLUSH TABLES; +INSERT INTO t1 VALUES (NULL, "First after TRUNCATE MAX (2)"); +SELECT * FROM t1 WHERE a >= 2000; +a b +2000 First after TRUNCATE MAX (2) +# Truncate with FLUSH before +FLUSH TABLES; +ALTER TABLE t1 TRUNCATE PARTITION MAX; +INSERT INTO t1 VALUES (NULL, "First after TRUNCATE MAX (3)"); +SELECT * FROM t1 WHERE a >= 2000; +a b +2000 First after TRUNCATE MAX (3) +# Truncate with FLUSH after INSERT +FLUSH TABLES; +ALTER TABLE t1 TRUNCATE PARTITION MAX; +INSERT INTO t1 VALUES (NULL, "First after TRUNCATE MAX (4)"); +SELECT * FROM t1 WHERE a >= 2000; +a b +2000 First after TRUNCATE MAX (4) +# Truncate without FLUSH +ALTER TABLE t1 TRUNCATE PARTITION LT1000; +INSERT INTO t1 VALUES (NULL, "First after TRUNCATE LT1000 (1)"); +SELECT * FROM t1 ORDER BY a; +a b +1000 First in LT2000 +1001 Second in LT2000 +1999 Last in LT2000 +2000 First after TRUNCATE MAX (4) +2001 First after TRUNCATE LT1000 (1) +# Truncate with FLUSH after +ALTER TABLE t1 TRUNCATE PARTITION LT1000; +FLUSH TABLES; +INSERT INTO t1 VALUES (NULL, "First after TRUNCATE LT1000 (2)"); +SELECT * FROM t1 ORDER BY a; +a b +1000 First in LT2000 +1001 Second in LT2000 +1999 Last in LT2000 +2000 First after TRUNCATE MAX (4) +2001 First after TRUNCATE LT1000 (1) +2002 First after TRUNCATE LT1000 (2) +# Truncate with FLUSH before +FLUSH TABLES; +ALTER TABLE t1 TRUNCATE PARTITION LT1000; +INSERT INTO t1 VALUES (NULL, "First after TRUNCATE LT1000 (3)"); +SELECT * FROM t1 ORDER BY a; +a b +1000 First in LT2000 +1001 Second in LT2000 +1999 Last in LT2000 +2000 First after TRUNCATE MAX (4) +2001 First after TRUNCATE LT1000 (1) +2002 First after TRUNCATE LT1000 (2) +2003 First after TRUNCATE LT1000 (3) +# Truncate with FLUSH after INSERT +FLUSH TABLES; +ALTER TABLE t1 TRUNCATE PARTITION LT1000; +INSERT INTO t1 VALUES (NULL, "First after TRUNCATE LT1000 (4)"); +SELECT * FROM t1 ORDER BY a; +a b +1000 First in LT2000 +1001 Second in LT2000 +1999 Last in LT2000 +2000 First after TRUNCATE MAX (4) +2001 First after TRUNCATE LT1000 (1) +2002 First after TRUNCATE LT1000 (2) +2003 First after TRUNCATE LT1000 (3) +2004 First after TRUNCATE LT1000 (4) +# Truncate without FLUSH +ALTER TABLE t1 TRUNCATE PARTITION LT2000; +INSERT INTO t1 VALUES (NULL, "First after TRUNCATE LT2000 (1)"); +SELECT * FROM t1 ORDER BY a; +a b +2000 First after TRUNCATE MAX (4) +2001 First after TRUNCATE LT1000 (1) +2002 First after TRUNCATE LT1000 (2) +2003 First after TRUNCATE LT1000 (3) +2004 First after TRUNCATE LT1000 (4) +2005 First after TRUNCATE LT2000 (1) +# Truncate with FLUSH after +ALTER TABLE t1 TRUNCATE PARTITION LT2000; +FLUSH TABLES; +INSERT INTO t1 VALUES (NULL, "First after TRUNCATE LT2000 (2)"); +SELECT * FROM t1 ORDER BY a; +a b +2000 First after TRUNCATE MAX (4) +2001 First after TRUNCATE LT1000 (1) +2002 First after TRUNCATE LT1000 (2) +2003 First after TRUNCATE LT1000 (3) +2004 First after TRUNCATE LT1000 (4) +2005 First after TRUNCATE LT2000 (1) +2006 First after TRUNCATE LT2000 (2) +# Truncate with FLUSH before +FLUSH TABLES; +ALTER TABLE t1 TRUNCATE PARTITION LT2000; +INSERT INTO t1 VALUES (NULL, "First after TRUNCATE LT2000 (3)"); +SELECT * FROM t1 ORDER BY a; +a b +2000 First after TRUNCATE MAX (4) +2001 First after TRUNCATE LT1000 (1) +2002 First after TRUNCATE LT1000 (2) +2003 First after TRUNCATE LT1000 (3) +2004 First after TRUNCATE LT1000 (4) +2005 First after TRUNCATE LT2000 (1) +2006 First after TRUNCATE LT2000 (2) +2007 First after TRUNCATE LT2000 (3) +# Truncate with FLUSH after INSERT +FLUSH TABLES; +ALTER TABLE t1 TRUNCATE PARTITION LT2000; +INSERT INTO t1 VALUES (NULL, "First after TRUNCATE LT2000 (4)"); +SELECT * FROM t1 ORDER BY a; +a b +2000 First after TRUNCATE MAX (4) +2001 First after TRUNCATE LT1000 (1) +2002 First after TRUNCATE LT1000 (2) +2003 First after TRUNCATE LT1000 (3) +2004 First after TRUNCATE LT1000 (4) +2005 First after TRUNCATE LT2000 (1) +2006 First after TRUNCATE LT2000 (2) +2007 First after TRUNCATE LT2000 (3) +2008 First after TRUNCATE LT2000 (4) +DROP TABLE t1; +# Cleaning up before exit +USE test; +DROP DATABASE MySQL_Test_DB; diff --git a/mysql-test/suite/tokudb.parts/r-native/partition_mgm_lc2_tokudb.result b/mysql-test/suite/tokudb.parts/r-native/partition_mgm_lc2_tokudb.result new file mode 100644 index 000000000000..2bada637ab19 --- /dev/null +++ b/mysql-test/suite/tokudb.parts/r-native/partition_mgm_lc2_tokudb.result @@ -0,0 +1,1123 @@ +# Creating database MySQL_TEST_DB +CREATE DATABASE MySQL_Test_DB; +USE MySQL_Test_DB; +# 1.0 KEY partitioning mgm +# Creating KEY partitioned table +CREATE TABLE TableA (a INT) +ENGINE = 'TokuDB' +PARTITION BY KEY (a) +(PARTITION parta , +PARTITION partB , +PARTITION Partc , +PARTITION PartD ); +INSERT INTO TableA VALUES (1), (2), (7), (8), (9), (10); +INSERT INTO TableA VALUES (3), (4), (5), (6), (11), (12); +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +# Test of ADD/COALESCE PARTITIONS +# expecting duplicate partition name +ALTER TABLE TableA ADD PARTITION +(PARTITION partA, +PARTITION Parta, +PARTITION PartA); +ERROR HY000: Duplicate partition name partA +ALTER TABLE TableA ADD PARTITION +(PARTITION partE, +PARTITION Partf, +PARTITION PartG); +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `TableA` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +(PARTITION parta ENGINE = TokuDB, + PARTITION partB ENGINE = TokuDB, + PARTITION Partc ENGINE = TokuDB, + PARTITION PartD ENGINE = TokuDB, + PARTITION partE ENGINE = TokuDB, + PARTITION Partf ENGINE = TokuDB, + PARTITION PartG ENGINE = TokuDB) */ +ALTER TABLE TableA COALESCE PARTITION 4; +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `TableA` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +(PARTITION parta ENGINE = TokuDB, + PARTITION partB ENGINE = TokuDB, + PARTITION Partc ENGINE = TokuDB) */ +# Test of EXCHANGE PARTITION WITH TABLE +SELECT PARTITION_NAME, TABLE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA ='MySQL_Test_DB' AND TABLE_NAME = 'TableA'; +PARTITION_NAME TABLE_ROWS +parta 4 +partB 4 +Partc 4 +CREATE TABLE TableB LIKE TableA; +ALTER TABLE TableB REMOVE PARTITIONING; +ALTER TABLE TableA EXCHANGE PARTITION parta WITH TABLE TableB; +SELECT * FROM TableA; +a +1 +12 +2 +3 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `TableA` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +(PARTITION parta ENGINE = TokuDB, + PARTITION partB ENGINE = TokuDB, + PARTITION Partc ENGINE = TokuDB) */ +SELECT * FROM TableB; +a +10 +11 +4 +5 +SHOW CREATE TABLE TableB; +Table Create Table +TableB CREATE TABLE `TableB` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +SELECT PARTITION_NAME, IF(TABLE_ROWS, 'YES', 'NO') AS HAVE_TABLE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA ='MySQL_Test_DB' AND TABLE_NAME = 'TableA'; +PARTITION_NAME HAVE_TABLE_ROWS +parta NO +partB YES +Partc YES +ALTER TABLE TableA EXCHANGE PARTITION parta WITH TABLE TableB; +INSERT INTO TableB VALUES (11); +ALTER TABLE TableA EXCHANGE PARTITION Partc WITH TABLE TableB; +ERROR HY000: Found a row that does not match the partition +DROP TABLE TableB; +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `TableA` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +(PARTITION parta ENGINE = TokuDB, + PARTITION partB ENGINE = TokuDB, + PARTITION Partc ENGINE = TokuDB) */ +# Test of REORGANIZE PARTITIONS +# Should not work on HASH/KEY +ALTER TABLE TableA REORGANIZE PARTITION parta,partB,Partc INTO +(PARTITION PARTA , +PARTITION partc ); +ERROR HY000: REORGANIZE PARTITION can only be used to reorganize partitions not to change their numbers +ALTER TABLE TableA REORGANIZE PARTITION parta,Partc INTO +(PARTITION partB , +PARTITION parta ); +ERROR HY000: When reorganizing a set of partitions they must be in consecutive order +ALTER TABLE TableA REORGANIZE PARTITION parta,partB INTO +(PARTITION partB COMMENT="Previusly named parta", +PARTITION parta COMMENT="Previusly named partB"); +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `TableA` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +(PARTITION partB COMMENT = 'Previusly named parta' ENGINE = TokuDB, + PARTITION parta COMMENT = 'Previusly named partB' ENGINE = TokuDB, + PARTITION Partc ENGINE = TokuDB) */ +# Test of RENAME TABLE +RENAME TABLE TableA to TableB; +SELECT * FROM TableB; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +RENAME TABLE TableB to TableA; +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +# Checking name comparision Upper vs Lower case +# Error if lower_case_table_names != 0 +# lower_case_table_names: 2 +CREATE TABLE tablea (a INT) +ENGINE = 'TokuDB' +PARTITION BY KEY (a) +(PARTITION parta , +PARTITION partB , +PARTITION Partc , +PARTITION PartD ); +ERROR 42S01: Table 'tablea' already exists +SHOW TABLES; +Tables_in_mysql_test_db +TableA +RENAME TABLE TableA to tablea; +ERROR 42S01: Table 'tablea' already exists +RENAME TABLE tablea to TableA; +ERROR 42S01: Table 'TableA' already exists +SELECT * FROM tablea; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE tablea; +Table Create Table +tablea CREATE TABLE `tablea` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a) +(PARTITION partB COMMENT = 'Previusly named parta' ENGINE = TokuDB, + PARTITION parta COMMENT = 'Previusly named partB' ENGINE = TokuDB, + PARTITION Partc ENGINE = TokuDB) */ +# Test of REMOVE PARTITIONING +ALTER TABLE TableA REMOVE PARTITIONING; +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `TableA` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +# Cleaning up after KEY PARTITIONING test +DROP TABLE TableA; +# 2.0 HASH partitioning mgm +# expecting duplicate partition name +CREATE TABLE TableA (a INT) +ENGINE = 'TokuDB' +PARTITION BY HASH (a) +(PARTITION parta , +PARTITION partA , +PARTITION Parta , +PARTITION PartA ); +ERROR HY000: Duplicate partition name partA +# Creating Hash partitioned table +CREATE TABLE TableA (a INT) +ENGINE = 'TokuDB' +PARTITION BY HASH (a) +(PARTITION parta , +PARTITION partB , +PARTITION Partc , +PARTITION PartD ); +INSERT INTO TableA VALUES (1), (2), (7), (8), (9), (10); +INSERT INTO TableA VALUES (3), (4), (5), (6), (11), (12); +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +# Test of ADD/COALESCE PARTITIONS +# expecting duplicate partition name +ALTER TABLE TableA ADD PARTITION +(PARTITION partA, +PARTITION Parta, +PARTITION PartA); +ERROR HY000: Duplicate partition name partA +ALTER TABLE TableA ADD PARTITION +(PARTITION partE, +PARTITION Partf, +PARTITION PartG); +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `TableA` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (a) +(PARTITION parta ENGINE = TokuDB, + PARTITION partB ENGINE = TokuDB, + PARTITION Partc ENGINE = TokuDB, + PARTITION PartD ENGINE = TokuDB, + PARTITION partE ENGINE = TokuDB, + PARTITION Partf ENGINE = TokuDB, + PARTITION PartG ENGINE = TokuDB) */ +ALTER TABLE TableA COALESCE PARTITION 4; +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `TableA` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (a) +(PARTITION parta ENGINE = TokuDB, + PARTITION partB ENGINE = TokuDB, + PARTITION Partc ENGINE = TokuDB) */ +# Test of REORGANIZE PARTITIONS +# Should not work on HASH/KEY +ALTER TABLE TableA REORGANIZE PARTITION parta,partB,Partc INTO +(PARTITION PARTA , +PARTITION partc ); +ERROR HY000: REORGANIZE PARTITION can only be used to reorganize partitions not to change their numbers +ALTER TABLE TableA REORGANIZE PARTITION parta,Partc INTO +(PARTITION partB , +PARTITION parta ); +ERROR HY000: When reorganizing a set of partitions they must be in consecutive order +ALTER TABLE TableA REORGANIZE PARTITION parta,partB INTO +(PARTITION partB COMMENT="Previusly named parta", +PARTITION parta COMMENT="Previusly named partB"); +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `TableA` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (a) +(PARTITION partB COMMENT = 'Previusly named parta' ENGINE = TokuDB, + PARTITION parta COMMENT = 'Previusly named partB' ENGINE = TokuDB, + PARTITION Partc ENGINE = TokuDB) */ +# Test of RENAME TABLE +RENAME TABLE TableA to TableB; +SELECT * FROM TableB; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +RENAME TABLE TableB to TableA; +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +# Checking name comparision Upper vs Lower case +# Error if lower_case_table_names != 0 +# lower_case_table_names: 2 +CREATE TABLE tablea (a INT) +ENGINE = 'TokuDB' +PARTITION BY HASH (a) +(PARTITION parta , +PARTITION partB , +PARTITION Partc , +PARTITION PartD ); +ERROR 42S01: Table 'tablea' already exists +SHOW TABLES; +Tables_in_mysql_test_db +TableA +RENAME TABLE TableA to tablea; +ERROR 42S01: Table 'tablea' already exists +RENAME TABLE tablea to TableA; +ERROR 42S01: Table 'TableA' already exists +SELECT * FROM tablea; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE tablea; +Table Create Table +tablea CREATE TABLE `tablea` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (a) +(PARTITION partB COMMENT = 'Previusly named parta' ENGINE = TokuDB, + PARTITION parta COMMENT = 'Previusly named partB' ENGINE = TokuDB, + PARTITION Partc ENGINE = TokuDB) */ +# Test of REMOVE PARTITIONING +ALTER TABLE TableA REMOVE PARTITIONING; +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `TableA` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +# Cleaning up after HASH PARTITIONING test +DROP TABLE TableA; +# 3.0 RANGE partitioning mgm +# Creating RANGE partitioned table +CREATE TABLE TableA (a INT) +ENGINE = 'TokuDB' +PARTITION BY RANGE (a) +(PARTITION parta VALUES LESS THAN (4) , +PARTITION partB VALUES LESS THAN (7) , +PARTITION Partc VALUES LESS THAN (10) , +PARTITION PartD VALUES LESS THAN (13) ); +INSERT INTO TableA VALUES (1), (2), (7), (8), (9), (10); +INSERT INTO TableA VALUES (3), (4), (5), (6), (11), (12); +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +# Test of ADD/DROP PARTITIONS +# expecting duplicate partition name +ALTER TABLE TableA ADD PARTITION +(PARTITION partA VALUES LESS THAN (MAXVALUE)); +ERROR HY000: Duplicate partition name partA +ALTER TABLE TableA ADD PARTITION +(PARTITION partE VALUES LESS THAN (16), +PARTITION Partf VALUES LESS THAN (19), +PARTITION PartG VALUES LESS THAN (22)); +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `TableA` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION parta VALUES LESS THAN (4) ENGINE = TokuDB, + PARTITION partB VALUES LESS THAN (7) ENGINE = TokuDB, + PARTITION Partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION PartD VALUES LESS THAN (13) ENGINE = TokuDB, + PARTITION partE VALUES LESS THAN (16) ENGINE = TokuDB, + PARTITION Partf VALUES LESS THAN (19) ENGINE = TokuDB, + PARTITION PartG VALUES LESS THAN (22) ENGINE = TokuDB) */ +ALTER TABLE TableA DROP PARTITION partE, PartG; +ALTER TABLE TableA DROP PARTITION Partf; +ALTER TABLE TableA ADD PARTITION +(PARTITION PartE VALUES LESS THAN (MAXVALUE)); +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `TableA` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION parta VALUES LESS THAN (4) ENGINE = TokuDB, + PARTITION partB VALUES LESS THAN (7) ENGINE = TokuDB, + PARTITION Partc VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION PartD VALUES LESS THAN (13) ENGINE = TokuDB, + PARTITION PartE VALUES LESS THAN MAXVALUE ENGINE = TokuDB) */ +# Test of REORGANIZE PARTITIONS +# Error since it must reorganize a consecutive range +ALTER TABLE TableA REORGANIZE PARTITION parta,Partc INTO +(PARTITION partB VALUES LESS THAN (3) , +PARTITION parta VALUES LESS THAN (11) ); +ERROR HY000: When reorganizing a set of partitions they must be in consecutive order +ALTER TABLE TableA REORGANIZE PARTITION partB,Partc,PartD,PartE INTO +(PARTITION partD VALUES LESS THAN (8) +COMMENT="Previously partB and partly Partc", +PARTITION partB VALUES LESS THAN (11) +COMMENT="Previously partly Partc and partly PartD", +PARTITION partC VALUES LESS THAN (MAXVALUE) +COMMENT="Previously partly PartD"); +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `TableA` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION parta VALUES LESS THAN (4) ENGINE = TokuDB, + PARTITION partD VALUES LESS THAN (8) COMMENT = 'Previously partB and partly Partc' ENGINE = TokuDB, + PARTITION partB VALUES LESS THAN (11) COMMENT = 'Previously partly Partc and partly PartD' ENGINE = TokuDB, + PARTITION partC VALUES LESS THAN MAXVALUE COMMENT = 'Previously partly PartD' ENGINE = TokuDB) */ +# Test of RENAME TABLE +RENAME TABLE TableA to TableB; +SELECT * FROM TableB; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +RENAME TABLE TableB to TableA; +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +# Checking name comparision Upper vs Lower case +# Error if lower_case_table_names != 0 +# lower_case_table_names: 2 +CREATE TABLE tablea (a INT) +ENGINE = 'TokuDB' +PARTITION BY RANGE (a) +(PARTITION parta VALUES LESS THAN (4) , +PARTITION partB VALUES LESS THAN (7) , +PARTITION Partc VALUES LESS THAN (10) , +PARTITION PartD VALUES LESS THAN (13) ); +ERROR 42S01: Table 'tablea' already exists +SHOW TABLES; +Tables_in_mysql_test_db +TableA +RENAME TABLE TableA to tablea; +ERROR 42S01: Table 'tablea' already exists +RENAME TABLE tablea to TableA; +ERROR 42S01: Table 'TableA' already exists +SELECT * FROM tablea; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE tablea; +Table Create Table +tablea CREATE TABLE `tablea` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION parta VALUES LESS THAN (4) ENGINE = TokuDB, + PARTITION partD VALUES LESS THAN (8) COMMENT = 'Previously partB and partly Partc' ENGINE = TokuDB, + PARTITION partB VALUES LESS THAN (11) COMMENT = 'Previously partly Partc and partly PartD' ENGINE = TokuDB, + PARTITION partC VALUES LESS THAN MAXVALUE COMMENT = 'Previously partly PartD' ENGINE = TokuDB) */ +# Test of REMOVE PARTITIONING +ALTER TABLE TableA REMOVE PARTITIONING; +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `TableA` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +# Cleaning up after RANGE PARTITIONING test +DROP TABLE TableA; +# 4.0 LIST partitioning mgm +# Creating LIST partitioned table +CREATE TABLE TableA (a INT) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION parta VALUES IN (1,8,9) , +PARTITION partB VALUES IN (2,10,11) , +PARTITION Partc VALUES IN (3,4,7) , +PARTITION PartD VALUES IN (5,6,12) ); +INSERT INTO TableA VALUES (1), (2), (7), (8), (9), (10); +INSERT INTO TableA VALUES (3), (4), (5), (6), (11), (12); +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +# Test of ADD/DROP PARTITIONS +# expecting duplicate partition name +ALTER TABLE TableA ADD PARTITION +(PARTITION partA VALUES IN (0)); +ERROR HY000: Duplicate partition name partA +ALTER TABLE TableA ADD PARTITION +(PARTITION partE VALUES IN (16), +PARTITION Partf VALUES IN (19), +PARTITION PartG VALUES IN (22)); +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `TableA` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION parta VALUES IN (1,8,9) ENGINE = TokuDB, + PARTITION partB VALUES IN (2,10,11) ENGINE = TokuDB, + PARTITION Partc VALUES IN (3,4,7) ENGINE = TokuDB, + PARTITION PartD VALUES IN (5,6,12) ENGINE = TokuDB, + PARTITION partE VALUES IN (16) ENGINE = TokuDB, + PARTITION Partf VALUES IN (19) ENGINE = TokuDB, + PARTITION PartG VALUES IN (22) ENGINE = TokuDB) */ +ALTER TABLE TableA DROP PARTITION partE, PartG; +ALTER TABLE TableA DROP PARTITION Partf; +ALTER TABLE TableA ADD PARTITION +(PARTITION PartE VALUES IN (13)); +SELECT * FROM TableA; +a +1 +10 +11 +12 +2 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `TableA` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION parta VALUES IN (1,8,9) ENGINE = TokuDB, + PARTITION partB VALUES IN (2,10,11) ENGINE = TokuDB, + PARTITION Partc VALUES IN (3,4,7) ENGINE = TokuDB, + PARTITION PartD VALUES IN (5,6,12) ENGINE = TokuDB, + PARTITION PartE VALUES IN (13) ENGINE = TokuDB) */ +# Test of REORGANIZE PARTITIONS +ALTER TABLE TableA REORGANIZE PARTITION parta,Partc INTO +(PARTITION Partc VALUES IN (1,7) +COMMENT = "Mix 1 of old parta and Partc", +PARTITION partF VALUES IN (3,9) +COMMENT = "Mix 2 of old parta and Partc", +PARTITION parta VALUES IN (4,8) +COMMENT = "Mix 3 of old parta and Partc"); +ERROR HY000: When reorganizing a set of partitions they must be in consecutive order +ALTER TABLE TableA REORGANIZE PARTITION parta,partB,Partc INTO +(PARTITION Partc VALUES IN (1,7) +COMMENT = "Mix 1 of old parta and Partc", +PARTITION parta VALUES IN (3,9) +COMMENT = "Mix 2 of old parta and Partc", +PARTITION partB VALUES IN (4,8) +COMMENT = "Mix 3 of old parta and Partc"); +SELECT * FROM TableA; +a +1 +12 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `TableA` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION Partc VALUES IN (1,7) COMMENT = 'Mix 1 of old parta and Partc' ENGINE = TokuDB, + PARTITION parta VALUES IN (3,9) COMMENT = 'Mix 2 of old parta and Partc' ENGINE = TokuDB, + PARTITION partB VALUES IN (4,8) COMMENT = 'Mix 3 of old parta and Partc' ENGINE = TokuDB, + PARTITION PartD VALUES IN (5,6,12) ENGINE = TokuDB, + PARTITION PartE VALUES IN (13) ENGINE = TokuDB) */ +# Test of RENAME TABLE +RENAME TABLE TableA to TableB; +SELECT * FROM TableB; +a +1 +12 +3 +4 +5 +6 +7 +8 +9 +RENAME TABLE TableB to TableA; +SELECT * FROM TableA; +a +1 +12 +3 +4 +5 +6 +7 +8 +9 +# Checking name comparision Upper vs Lower case +# Error if lower_case_table_names != 0 +# lower_case_table_names: 2 +CREATE TABLE tablea (a INT) +ENGINE = 'TokuDB' +PARTITION BY LIST (a) +(PARTITION parta VALUES IN (1,8,9) , +PARTITION partB VALUES IN (2,10,11) , +PARTITION Partc VALUES IN (3,4,7) , +PARTITION PartD VALUES IN (5,6,12) ); +ERROR 42S01: Table 'tablea' already exists +SHOW TABLES; +Tables_in_mysql_test_db +TableA +RENAME TABLE TableA to tablea; +ERROR 42S01: Table 'tablea' already exists +RENAME TABLE tablea to TableA; +ERROR 42S01: Table 'TableA' already exists +SELECT * FROM tablea; +a +1 +12 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE tablea; +Table Create Table +tablea CREATE TABLE `tablea` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (a) +(PARTITION Partc VALUES IN (1,7) COMMENT = 'Mix 1 of old parta and Partc' ENGINE = TokuDB, + PARTITION parta VALUES IN (3,9) COMMENT = 'Mix 2 of old parta and Partc' ENGINE = TokuDB, + PARTITION partB VALUES IN (4,8) COMMENT = 'Mix 3 of old parta and Partc' ENGINE = TokuDB, + PARTITION PartD VALUES IN (5,6,12) ENGINE = TokuDB, + PARTITION PartE VALUES IN (13) ENGINE = TokuDB) */ +# Test of REMOVE PARTITIONING +ALTER TABLE TableA REMOVE PARTITIONING; +SELECT * FROM TableA; +a +1 +12 +3 +4 +5 +6 +7 +8 +9 +SHOW CREATE TABLE TableA; +Table Create Table +TableA CREATE TABLE `TableA` ( + `a` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +# Cleaning up after LIST PARTITIONING test +DROP TABLE TableA; +# Testing TRUNCATE PARTITION +CREATE TABLE t1 +(a BIGINT AUTO_INCREMENT PRIMARY KEY, +b VARCHAR(255)) +ENGINE = 'TokuDB' +PARTITION BY RANGE (a) +(PARTITION LT1000 VALUES LESS THAN (1000), +PARTITION LT2000 VALUES LESS THAN (2000), +PARTITION MAX VALUES LESS THAN MAXVALUE); +INSERT INTO t1 VALUES (NULL, "First"), (NULL, "Second"), (999, "Last in LT1000"), (NULL, "First in LT2000"), (NULL, "Second in LT2000"), (1999, "Last in LT2000"), (NULL, "First in MAX"), (NULL, "Second in MAX"); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` bigint(20) NOT NULL AUTO_INCREMENT, + `b` varchar(255) DEFAULT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB AUTO_INCREMENT=2002 DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION LT1000 VALUES LESS THAN (1000) ENGINE = TokuDB, + PARTITION LT2000 VALUES LESS THAN (2000) ENGINE = TokuDB, + PARTITION MAX VALUES LESS THAN MAXVALUE ENGINE = TokuDB) */ +SELECT * FROM t1 ORDER BY a; +a b +1 First +2 Second +999 Last in LT1000 +1000 First in LT2000 +1001 Second in LT2000 +1999 Last in LT2000 +2000 First in MAX +2001 Second in MAX +ALTER TABLE t1 ANALYZE PARTITION MAX; +Table Op Msg_type Msg_text +mysql_test_db.t1 analyze status OK +# Truncate without FLUSH +ALTER TABLE t1 TRUNCATE PARTITION MAX; +INSERT INTO t1 VALUES (NULL, "First after TRUNCATE MAX (1)"); +SELECT * FROM t1 WHERE a >= 2000; +a b +2000 First after TRUNCATE MAX (1) +# Truncate with FLUSH after +ALTER TABLE t1 TRUNCATE PARTITION MAX; +FLUSH TABLES; +INSERT INTO t1 VALUES (NULL, "First after TRUNCATE MAX (2)"); +SELECT * FROM t1 WHERE a >= 2000; +a b +2000 First after TRUNCATE MAX (2) +# Truncate with FLUSH before +FLUSH TABLES; +ALTER TABLE t1 TRUNCATE PARTITION MAX; +INSERT INTO t1 VALUES (NULL, "First after TRUNCATE MAX (3)"); +SELECT * FROM t1 WHERE a >= 2000; +a b +2000 First after TRUNCATE MAX (3) +# Truncate with FLUSH after INSERT +FLUSH TABLES; +ALTER TABLE t1 TRUNCATE PARTITION MAX; +INSERT INTO t1 VALUES (NULL, "First after TRUNCATE MAX (4)"); +SELECT * FROM t1 WHERE a >= 2000; +a b +2000 First after TRUNCATE MAX (4) +# Truncate without FLUSH +ALTER TABLE t1 TRUNCATE PARTITION LT1000; +INSERT INTO t1 VALUES (NULL, "First after TRUNCATE LT1000 (1)"); +SELECT * FROM t1 ORDER BY a; +a b +1000 First in LT2000 +1001 Second in LT2000 +1999 Last in LT2000 +2000 First after TRUNCATE MAX (4) +2001 First after TRUNCATE LT1000 (1) +# Truncate with FLUSH after +ALTER TABLE t1 TRUNCATE PARTITION LT1000; +FLUSH TABLES; +INSERT INTO t1 VALUES (NULL, "First after TRUNCATE LT1000 (2)"); +SELECT * FROM t1 ORDER BY a; +a b +1000 First in LT2000 +1001 Second in LT2000 +1999 Last in LT2000 +2000 First after TRUNCATE MAX (4) +2001 First after TRUNCATE LT1000 (1) +2002 First after TRUNCATE LT1000 (2) +# Truncate with FLUSH before +FLUSH TABLES; +ALTER TABLE t1 TRUNCATE PARTITION LT1000; +INSERT INTO t1 VALUES (NULL, "First after TRUNCATE LT1000 (3)"); +SELECT * FROM t1 ORDER BY a; +a b +1000 First in LT2000 +1001 Second in LT2000 +1999 Last in LT2000 +2000 First after TRUNCATE MAX (4) +2001 First after TRUNCATE LT1000 (1) +2002 First after TRUNCATE LT1000 (2) +2003 First after TRUNCATE LT1000 (3) +# Truncate with FLUSH after INSERT +FLUSH TABLES; +ALTER TABLE t1 TRUNCATE PARTITION LT1000; +INSERT INTO t1 VALUES (NULL, "First after TRUNCATE LT1000 (4)"); +SELECT * FROM t1 ORDER BY a; +a b +1000 First in LT2000 +1001 Second in LT2000 +1999 Last in LT2000 +2000 First after TRUNCATE MAX (4) +2001 First after TRUNCATE LT1000 (1) +2002 First after TRUNCATE LT1000 (2) +2003 First after TRUNCATE LT1000 (3) +2004 First after TRUNCATE LT1000 (4) +# Truncate without FLUSH +ALTER TABLE t1 TRUNCATE PARTITION LT2000; +INSERT INTO t1 VALUES (NULL, "First after TRUNCATE LT2000 (1)"); +SELECT * FROM t1 ORDER BY a; +a b +2000 First after TRUNCATE MAX (4) +2001 First after TRUNCATE LT1000 (1) +2002 First after TRUNCATE LT1000 (2) +2003 First after TRUNCATE LT1000 (3) +2004 First after TRUNCATE LT1000 (4) +2005 First after TRUNCATE LT2000 (1) +# Truncate with FLUSH after +ALTER TABLE t1 TRUNCATE PARTITION LT2000; +FLUSH TABLES; +INSERT INTO t1 VALUES (NULL, "First after TRUNCATE LT2000 (2)"); +SELECT * FROM t1 ORDER BY a; +a b +2000 First after TRUNCATE MAX (4) +2001 First after TRUNCATE LT1000 (1) +2002 First after TRUNCATE LT1000 (2) +2003 First after TRUNCATE LT1000 (3) +2004 First after TRUNCATE LT1000 (4) +2005 First after TRUNCATE LT2000 (1) +2006 First after TRUNCATE LT2000 (2) +# Truncate with FLUSH before +FLUSH TABLES; +ALTER TABLE t1 TRUNCATE PARTITION LT2000; +INSERT INTO t1 VALUES (NULL, "First after TRUNCATE LT2000 (3)"); +SELECT * FROM t1 ORDER BY a; +a b +2000 First after TRUNCATE MAX (4) +2001 First after TRUNCATE LT1000 (1) +2002 First after TRUNCATE LT1000 (2) +2003 First after TRUNCATE LT1000 (3) +2004 First after TRUNCATE LT1000 (4) +2005 First after TRUNCATE LT2000 (1) +2006 First after TRUNCATE LT2000 (2) +2007 First after TRUNCATE LT2000 (3) +# Truncate with FLUSH after INSERT +FLUSH TABLES; +ALTER TABLE t1 TRUNCATE PARTITION LT2000; +INSERT INTO t1 VALUES (NULL, "First after TRUNCATE LT2000 (4)"); +SELECT * FROM t1 ORDER BY a; +a b +2000 First after TRUNCATE MAX (4) +2001 First after TRUNCATE LT1000 (1) +2002 First after TRUNCATE LT1000 (2) +2003 First after TRUNCATE LT1000 (3) +2004 First after TRUNCATE LT1000 (4) +2005 First after TRUNCATE LT2000 (1) +2006 First after TRUNCATE LT2000 (2) +2007 First after TRUNCATE LT2000 (3) +2008 First after TRUNCATE LT2000 (4) +DROP TABLE t1; +# Cleaning up before exit +USE test; +DROP DATABASE MySQL_Test_DB; diff --git a/mysql-test/suite/tokudb.parts/r-native/partition_reorganize_tokudb.result b/mysql-test/suite/tokudb.parts/r-native/partition_reorganize_tokudb.result new file mode 100644 index 000000000000..3e5fc1c4feae --- /dev/null +++ b/mysql-test/suite/tokudb.parts/r-native/partition_reorganize_tokudb.result @@ -0,0 +1,197 @@ +SET default_storage_engine=TokuDB; +SET SESSION innodb_strict_mode = ON; +SET GLOBAL innodb_file_per_table=ON; +SET GLOBAL innodb_file_format=barracuda; +# +# CREATE a table with SUBPARTITIONS +# +CREATE TABLE emp ( +id INT NOT NULL, +store_name VARCHAR(30), +parts VARCHAR(30), +store_id INT +) engine TokuDB +PARTITION BY RANGE(store_id) SUBPARTITION BY HASH(store_id) +( +PARTITION northeast VALUES LESS THAN (50) +DATA DIRECTORY = 'MYSQL_TMP_DIR/alt_dir_northeast' + (SUBPARTITION ne0, SUBPARTITION ne1), +PARTITION southwest VALUES LESS THAN (100) +DATA DIRECTORY = 'MYSQL_TMP_DIR/alt_dir_southwest' + (SUBPARTITION sw2, SUBPARTITION sw3) +); +INSERT INTO emp values(1,'Oracle','NUT',10); +INSERT INTO emp values(2,'SAP','BOLT',40); +INSERT INTO emp values(3,'IBM','NAIL',60); +INSERT INTO emp values(4,'SUN','SCREW',90); +SELECT * FROM emp; +id store_name parts store_id +1 Oracle NUT 10 +2 SAP BOLT 40 +3 IBM NAIL 60 +4 SUN SCREW 90 +SHOW CREATE TABLE emp; +Table Create Table +emp CREATE TABLE `emp` ( + `id` int(11) NOT NULL, + `store_name` varchar(30) DEFAULT NULL, + `parts` varchar(30) DEFAULT NULL, + `store_id` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (store_id) +SUBPARTITION BY HASH (store_id) +(PARTITION northeast VALUES LESS THAN (50) + (SUBPARTITION ne0 DATA DIRECTORY = 'MYSQL_TMP_DIR/alt_dir_northeast' ENGINE = TokuDB, + SUBPARTITION ne1 DATA DIRECTORY = 'MYSQL_TMP_DIR/alt_dir_northeast' ENGINE = TokuDB), + PARTITION southwest VALUES LESS THAN (100) + (SUBPARTITION sw2 DATA DIRECTORY = 'MYSQL_TMP_DIR/alt_dir_southwest' ENGINE = TokuDB, + SUBPARTITION sw3 DATA DIRECTORY = 'MYSQL_TMP_DIR/alt_dir_southwest' ENGINE = TokuDB)) */ +SELECT name,n_cols,file_format,row_format +FROM information_schema.innodb_sys_tables +WHERE name LIKE 'test%' ORDER BY name; +name n_cols file_format row_format +test/emp#p#northeast#sp#ne0 7 Antelope Compact +test/emp#p#northeast#sp#ne1 7 Antelope Compact +test/emp#p#southwest#sp#sw2 7 Antelope Compact +test/emp#p#southwest#sp#sw3 7 Antelope Compact +SELECT name,file_format,row_format +FROM information_schema.innodb_sys_tablespaces +WHERE name LIKE 'test%' ORDER BY name; +name file_format row_format +test/emp#p#northeast#sp#ne0 Antelope Compact or Redundant +test/emp#p#northeast#sp#ne1 Antelope Compact or Redundant +test/emp#p#southwest#sp#sw2 Antelope Compact or Redundant +test/emp#p#southwest#sp#sw3 Antelope Compact or Redundant +SELECT path FROM information_schema.innodb_sys_datafiles +WHERE path LIKE '%test%' ORDER BY space; +path +MYSQL_TMP_DIR/alt_dir_northeast/test/emp#p#northeast#sp#ne0.ibd +MYSQL_TMP_DIR/alt_dir_northeast/test/emp#p#northeast#sp#ne1.ibd +MYSQL_TMP_DIR/alt_dir_southwest/test/emp#p#southwest#sp#sw2.ibd +MYSQL_TMP_DIR/alt_dir_southwest/test/emp#p#southwest#sp#sw3.ibd +---- MYSQLD_DATADIR/test +emp#p#northeast#sp#ne0.isl +emp#p#northeast#sp#ne1.isl +emp#p#southwest#sp#sw2.isl +emp#p#southwest#sp#sw3.isl +emp.frm +emp.par +---- MYSQL_TMP_DIR/alt_dir_northeast/test +emp#p#northeast#sp#ne0.ibd +emp#p#northeast#sp#ne1.ibd +---- MYSQL_TMP_DIR/alt_dir_southwest/test +emp#p#southwest#sp#sw2.ibd +emp#p#southwest#sp#sw3.ibd +# +# REORGANIZE the PARTITIONS and SUBPARTITIONS +# +ALTER TABLE emp REORGANIZE PARTITION northeast INTO +( +PARTITION east VALUES LESS THAN (25) +DATA DIRECTORY = 'MYSQL_TMP_DIR/alt_dir_east' + (SUBPARTITION e0, SUBPARTITION e1), +PARTITION north VALUES LESS THAN (50) +DATA DIRECTORY = 'MYSQL_TMP_DIR/alt_dir_north' + (SUBPARTITION n0, SUBPARTITION n1) +); +ALTER TABLE emp REORGANIZE PARTITION southwest INTO +( +PARTITION west VALUES LESS THAN (75) +DATA DIRECTORY = 'MYSQL_TMP_DIR/alt_dir_west' + (SUBPARTITION w0, SUBPARTITION w1), +PARTITION south VALUES LESS THAN (100) +DATA DIRECTORY = 'MYSQL_TMP_DIR/alt_dir_south' + (SUBPARTITION s0, SUBPARTITION s1) +); +SELECT * FROM emp; +id store_name parts store_id +1 Oracle NUT 10 +2 SAP BOLT 40 +3 IBM NAIL 60 +4 SUN SCREW 90 +SHOW CREATE TABLE emp; +Table Create Table +emp CREATE TABLE `emp` ( + `id` int(11) NOT NULL, + `store_name` varchar(30) DEFAULT NULL, + `parts` varchar(30) DEFAULT NULL, + `store_id` int(11) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (store_id) +SUBPARTITION BY HASH (store_id) +(PARTITION east VALUES LESS THAN (25) + (SUBPARTITION e0 DATA DIRECTORY = 'MYSQL_TMP_DIR/alt_dir_east' ENGINE = TokuDB, + SUBPARTITION e1 DATA DIRECTORY = 'MYSQL_TMP_DIR/alt_dir_east' ENGINE = TokuDB), + PARTITION north VALUES LESS THAN (50) + (SUBPARTITION n0 DATA DIRECTORY = 'MYSQL_TMP_DIR/alt_dir_north' ENGINE = TokuDB, + SUBPARTITION n1 DATA DIRECTORY = 'MYSQL_TMP_DIR/alt_dir_north' ENGINE = TokuDB), + PARTITION west VALUES LESS THAN (75) + (SUBPARTITION w0 DATA DIRECTORY = 'MYSQL_TMP_DIR/alt_dir_west' ENGINE = TokuDB, + SUBPARTITION w1 DATA DIRECTORY = 'MYSQL_TMP_DIR/alt_dir_west' ENGINE = TokuDB), + PARTITION south VALUES LESS THAN (100) + (SUBPARTITION s0 DATA DIRECTORY = 'MYSQL_TMP_DIR/alt_dir_south' ENGINE = TokuDB, + SUBPARTITION s1 DATA DIRECTORY = 'MYSQL_TMP_DIR/alt_dir_south' ENGINE = TokuDB)) */ +SELECT name,n_cols,file_format,row_format +FROM information_schema.innodb_sys_tables +WHERE name LIKE 'test%' ORDER BY name; +name n_cols file_format row_format +test/emp#p#east#sp#e0 7 Antelope Compact +test/emp#p#east#sp#e1 7 Antelope Compact +test/emp#p#north#sp#n0 7 Antelope Compact +test/emp#p#north#sp#n1 7 Antelope Compact +test/emp#p#south#sp#s0 7 Antelope Compact +test/emp#p#south#sp#s1 7 Antelope Compact +test/emp#p#west#sp#w0 7 Antelope Compact +test/emp#p#west#sp#w1 7 Antelope Compact +SELECT name,file_format,row_format +FROM information_schema.innodb_sys_tablespaces +WHERE name LIKE 'test%' ORDER BY name; +name file_format row_format +test/emp#p#east#sp#e0 Antelope Compact or Redundant +test/emp#p#east#sp#e1 Antelope Compact or Redundant +test/emp#p#north#sp#n0 Antelope Compact or Redundant +test/emp#p#north#sp#n1 Antelope Compact or Redundant +test/emp#p#south#sp#s0 Antelope Compact or Redundant +test/emp#p#south#sp#s1 Antelope Compact or Redundant +test/emp#p#west#sp#w0 Antelope Compact or Redundant +test/emp#p#west#sp#w1 Antelope Compact or Redundant +SELECT path FROM information_schema.innodb_sys_datafiles +WHERE path LIKE '%test%' ORDER BY space; +path +MYSQL_TMP_DIR/alt_dir_east/test/emp#p#east#sp#e0.ibd +MYSQL_TMP_DIR/alt_dir_east/test/emp#p#east#sp#e1.ibd +MYSQL_TMP_DIR/alt_dir_north/test/emp#p#north#sp#n0.ibd +MYSQL_TMP_DIR/alt_dir_north/test/emp#p#north#sp#n1.ibd +MYSQL_TMP_DIR/alt_dir_west/test/emp#p#west#sp#w0.ibd +MYSQL_TMP_DIR/alt_dir_west/test/emp#p#west#sp#w1.ibd +MYSQL_TMP_DIR/alt_dir_south/test/emp#p#south#sp#s0.ibd +MYSQL_TMP_DIR/alt_dir_south/test/emp#p#south#sp#s1.ibd +---- MYSQLD_DATADIR/test +emp#p#east#sp#e0.isl +emp#p#east#sp#e1.isl +emp#p#north#sp#n0.isl +emp#p#north#sp#n1.isl +emp#p#south#sp#s0.isl +emp#p#south#sp#s1.isl +emp#p#west#sp#w0.isl +emp#p#west#sp#w1.isl +emp.frm +emp.par +---- MYSQL_TMP_DIR/alt_dir_northeast/test +---- MYSQL_TMP_DIR/alt_dir_southwest/test +---- MYSQL_TMP_DIR/alt_dir_east/test +emp#p#east#sp#e0.ibd +emp#p#east#sp#e1.ibd +---- MYSQL_TMP_DIR/alt_dir_north/test +emp#p#north#sp#n0.ibd +emp#p#north#sp#n1.ibd +---- MYSQL_TMP_DIR/alt_dir_west/test +emp#p#west#sp#w0.ibd +emp#p#west#sp#w1.ibd +---- MYSQL_TMP_DIR/alt_dir_south/test +emp#p#south#sp#s0.ibd +emp#p#south#sp#s1.ibd +DROP TABLE emp; +# +# Cleanup +# diff --git a/mysql-test/suite/tokudb.parts/r-native/partition_special_tokudb.result b/mysql-test/suite/tokudb.parts/r-native/partition_special_tokudb.result new file mode 100644 index 000000000000..628c7f8978f6 --- /dev/null +++ b/mysql-test/suite/tokudb.parts/r-native/partition_special_tokudb.result @@ -0,0 +1,285 @@ +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='TokuDB' +partition by key (a,b,c,d) ( +partition pa1 max_rows=20 min_rows=2, +partition pa2 max_rows=30 min_rows=3, +partition pa3 max_rows=30 min_rows=4, +partition pa4 max_rows=40 min_rows=2); +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, + PRIMARY KEY (`a`,`b`,`c`,`d`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a,b,c,d) +(PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 ENGINE = TokuDB, + PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 ENGINE = TokuDB, + PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 ENGINE = TokuDB, + PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 ENGINE = TokuDB) */ +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 +1983-12-31 cdef srtbvsr w +1980-10-14 fgbbd dtzndtz w +1975-01-01 abcde abcde m +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 +drop 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, e int not null, f decimal (18,2) not null, g bigint not null, h tinyint not null, i char(255), primary key(a,b,c,d,e,f,g,h)) engine='TokuDB' +partition by key(a,b,c,d,e,f,g,h) ( +partition pa1 max_rows=20 min_rows=2, +partition pa2 max_rows=30 min_rows=3, +partition pa3 max_rows=30 min_rows=4, +partition pa4 max_rows=40 min_rows=2); +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, + `e` int(11) NOT NULL, + `f` decimal(18,2) NOT NULL, + `g` bigint(20) NOT NULL, + `h` tinyint(4) NOT NULL, + `i` char(255) DEFAULT NULL, + PRIMARY KEY (`a`,`b`,`c`,`d`,`e`,`f`,`g`,`h`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a,b,c,d,e,f,g,h) +(PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 ENGINE = TokuDB, + PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 ENGINE = TokuDB, + PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 ENGINE = TokuDB, + PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 ENGINE = TokuDB) */ +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'), +('1980-10-14', 'fgbbd', 'dtzndtz', 'w', 67856, 5463354.67, 3567845333, 124, 'd,f söierugsig msireg siug ei5ggth lrutluitgzeöjrtnb.rkjthuekuhzrkuthgjdnffjmbr'), +('2000-06-15', 'jukg','zikhuk','m', 45675, 6465754.13, 435242623462, 18, 'pib mdotkbm.m' ); +select * from t1; +a b c d e f g h i +1980-10-14 fgbbd dtzndtz w 67856 5463354.67 3567845333 124 d,f söierugsig msireg siug ei5ggth lrutluitgzeöjrtnb.rkjthuekuhzrkuthgjdnffjmbr +1983-12-31 cdef srtbvsr w 45634 13452.56 3452346456 127 liuugbzvdmrlti b itiortudirtfgtibm dfi +1975-01-01 abcde abcde m 1234 123.45 32412341234 113 tbhth nrzh ztfghgfh fzh ftzhj fztjh +2000-06-15 jukg zikhuk m 45675 6465754.13 435242623462 18 pib mdotkbm.m +select * from t1 where a<19851231; +a b c d e f g h i +1975-01-01 abcde abcde m 1234 123.45 32412341234 113 tbhth nrzh ztfghgfh fzh ftzhj fztjh +1980-10-14 fgbbd dtzndtz w 67856 5463354.67 3567845333 124 d,f söierugsig msireg siug ei5ggth lrutluitgzeöjrtnb.rkjthuekuhzrkuthgjdnffjmbr +1983-12-31 cdef srtbvsr w 45634 13452.56 3452346456 127 liuugbzvdmrlti b itiortudirtfgtibm dfi +drop 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, e int not null, f decimal (18,2) not null, g bigint not null, h tinyint not null, a1 date not null, b1 varchar(50) not null, c1 varchar(50) not null, d1 enum('m', 'w') not null, e1 int not null, f1 decimal (18,2) not null, g1 bigint not null, h1 tinyint not null, i char(255), primary key(a,b,c,d,e,f,g,h,a1,b1,c1,d1,e1,f1,g1,h1)) engine='TokuDB' +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, +partition pa2 max_rows=30 min_rows=3, +partition pa3 max_rows=30 min_rows=4, +partition pa4 max_rows=40 min_rows=2); +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, + `e` int(11) NOT NULL, + `f` decimal(18,2) NOT NULL, + `g` bigint(20) NOT NULL, + `h` tinyint(4) NOT NULL, + `a1` date NOT NULL, + `b1` varchar(50) NOT NULL, + `c1` varchar(50) NOT NULL, + `d1` enum('m','w') NOT NULL, + `e1` int(11) NOT NULL, + `f1` decimal(18,2) NOT NULL, + `g1` bigint(20) NOT NULL, + `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=TokuDB 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 ENGINE = TokuDB, + PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 ENGINE = TokuDB, + PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 ENGINE = TokuDB, + PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 ENGINE = TokuDB) */ +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'), +('1980-10-14', 'fgbbd', 'dtzndtz', 'w', 67856, 5463354.67, 3567845333, 124,'1980-10-14', 'fgbbd', 'dtzndtz', 'w', 67856, 5463354.67, 3567845333, 124, 'd,f söierugsig msireg siug ei5ggth lrutluitgzeöjrtnb.rkjthuekuhzrkuthgjdnffjmbr'), +('2000-06-15', 'jukg','zikhuk','m', 45675, 6465754.13, 435242623462, 18, '2000-06-15', 'jukg','zikhuk','m', 45675, 6465754.13, 435242623462, 18, 'pib mdotkbm.m'); +select * from t1; +a b c d e f g h a1 b1 c1 d1 e1 f1 g1 h1 i +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 +1980-10-14 fgbbd dtzndtz w 67856 5463354.67 3567845333 124 1980-10-14 fgbbd dtzndtz w 67856 5463354.67 3567845333 124 d,f söierugsig msireg siug ei5ggth lrutluitgzeöjrtnb.rkjthuekuhzrkuthgjdnffjmbr +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 +2000-06-15 jukg zikhuk m 45675 6465754.13 435242623462 18 2000-06-15 jukg zikhuk m 45675 6465754.13 435242623462 18 pib mdotkbm.m +select * from t1 where a<19851231; +a b c d e f g h a1 b1 c1 d1 e1 f1 g1 h1 i +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 +1980-10-14 fgbbd dtzndtz w 67856 5463354.67 3567845333 124 1980-10-14 fgbbd dtzndtz w 67856 5463354.67 3567845333 124 d,f söierugsig msireg siug ei5ggth lrutluitgzeöjrtnb.rkjthuekuhzrkuthgjdnffjmbr +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 +drop 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, e int not null, f decimal (18,2) not null, g bigint not null, h tinyint not null, a1 date not null, b1 varchar(50) not null, c1 varchar(50) not null, d1 enum('m', 'w') not null, e1 int not null, f1 decimal (18,2) not null, g1 bigint not null, h1 tinyint not null, a2 date not null, b2 varchar(50) not null, c2 varchar(50) not null, d2 enum('m', 'w') not null, e2 int not null, f2 decimal (18,2) not null, g2 bigint not null, h2 tinyint not null, a3 date not null, b3 varchar(50) not null, c3 varchar(50) not null, d3 enum('m', 'w') not null, e3 int not null, f3 decimal (18,2) not null, g3 bigint not null, h3 tinyint not null, i char(255), primary key(a,b,c,d,e,f,g,h,a1,b1,c1,d1,e1,f1,g1,h1,a2,b2,c2,d2,e2,f2,g2,h2,a3,b3,c3,d3,e3,f3,g3,h3)) engine='TokuDB' +partition by key(a,b,c,d,e,f,g,h,a1,b1,c1,d1,e1,f1,g1,h1,a2,b2,c2,d2,e2,f2,g2,h2,a3,b3,c3,d3,e3,f3,g3,h3) ( +partition pa1 max_rows=20 min_rows=2, +partition pa2 max_rows=30 min_rows=3, +partition pa3 max_rows=30 min_rows=4, +partition pa4 max_rows=40 min_rows=2); +ERROR HY000: Too many fields in 'list of partition fields' +create table t1 (a date not null, b varchar(50) not null, c varchar(50) not null, d enum('m', 'w') not null, e int not null, f decimal (18,2) not null, g bigint not null, h tinyint not null, a1 date not null, b1 varchar(50) not null, c1 varchar(50) not null, d1 enum('m', 'w') not null, e1 int not null, f1 decimal (18,2) not null, g1 bigint not null, h1 tinyint not null, a2 date not null, b2 varchar(50) not null, c2 varchar(50) not null, d2 enum('m', 'w') not null, e2 int not null, f2 decimal (18,2) not null, g2 bigint not null, h2 tinyint not null, a3 date not null, b3 varchar(50) not null, c3 varchar(50) not null, d3 enum('m', 'w') not null, e3 int not null, f3 decimal (18,2) not null, g3 bigint not null, h3 tinyint not null, i char(255), primary key(a,b,c,d,e,f,g,h,a1,b1,c1,d1,e1,f1,g1,h1)) engine='TokuDB' +partition by key(a,b,c,d,e,f,g,h) ( +partition pa1 max_rows=20 min_rows=2, +partition pa2 max_rows=30 min_rows=3, +partition pa3 max_rows=30 min_rows=4, +partition pa4 max_rows=40 min_rows=2); +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, + `e` int(11) NOT NULL, + `f` decimal(18,2) NOT NULL, + `g` bigint(20) NOT NULL, + `h` tinyint(4) NOT NULL, + `a1` date NOT NULL, + `b1` varchar(50) NOT NULL, + `c1` varchar(50) NOT NULL, + `d1` enum('m','w') NOT NULL, + `e1` int(11) NOT NULL, + `f1` decimal(18,2) NOT NULL, + `g1` bigint(20) NOT NULL, + `h1` tinyint(4) NOT NULL, + `a2` date NOT NULL, + `b2` varchar(50) NOT NULL, + `c2` varchar(50) NOT NULL, + `d2` enum('m','w') NOT NULL, + `e2` int(11) NOT NULL, + `f2` decimal(18,2) NOT NULL, + `g2` bigint(20) NOT NULL, + `h2` tinyint(4) NOT NULL, + `a3` date NOT NULL, + `b3` varchar(50) NOT NULL, + `c3` varchar(50) NOT NULL, + `d3` enum('m','w') NOT NULL, + `e3` int(11) NOT NULL, + `f3` decimal(18,2) NOT NULL, + `g3` bigint(20) NOT NULL, + `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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (a,b,c,d,e,f,g,h) +(PARTITION pa1 MAX_ROWS = 20 MIN_ROWS = 2 ENGINE = TokuDB, + PARTITION pa2 MAX_ROWS = 30 MIN_ROWS = 3 ENGINE = TokuDB, + PARTITION pa3 MAX_ROWS = 30 MIN_ROWS = 4 ENGINE = TokuDB, + PARTITION pa4 MAX_ROWS = 40 MIN_ROWS = 2 ENGINE = TokuDB) */ +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'), +('1980-10-14', 'fgbbd', 'dtzndtz', 'w', 67856, 5463354.67, 3567845333, 124, '1980-10-14', 'fgbbd', 'dtzndtz', 'w', 67856, 5463354.67, 3567845333, 124, '1980-10-14', 'fgbbd', 'dtzndtz', 'w', 67856, 5463354.67, 3567845333, 124, '1980-10-14', 'fgbbd', 'dtzndtz', 'w', 67856, 5463354.67, 3567845333, 124, 'd,f söierugsig msireg siug ei5ggth lrutluitgzeöjrtnb.rkjthuekuhzrkuthgjdnffjmbr'), +('2000-06-15', 'jukg','zikhuk','m', 45675, 6465754.13, 435242623462, 18, '2000-06-15', 'jukg','zikhuk','m', 45675, 6465754.13, 435242623462, 18, '2000-06-15', 'jukg','zikhuk','m', 45675, 6465754.13, 435242623462, 18, '2000-06-15', 'jukg','zikhuk','m', 45675, 6465754.13, 435242623462, 18, 'pib mdotkbm.m'); +select * from t1; +a b c d e f g h a1 b1 c1 d1 e1 f1 g1 h1 a2 b2 c2 d2 e2 f2 g2 h2 a3 b3 c3 d3 e3 f3 g3 h3 i +1980-10-14 fgbbd dtzndtz w 67856 5463354.67 3567845333 124 1980-10-14 fgbbd dtzndtz w 67856 5463354.67 3567845333 124 1980-10-14 fgbbd dtzndtz w 67856 5463354.67 3567845333 124 1980-10-14 fgbbd dtzndtz w 67856 5463354.67 3567845333 124 d,f söierugsig msireg siug ei5ggth lrutluitgzeöjrtnb.rkjthuekuhzrkuthgjdnffjmbr +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 +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 +2000-06-15 jukg zikhuk m 45675 6465754.13 435242623462 18 2000-06-15 jukg zikhuk m 45675 6465754.13 435242623462 18 2000-06-15 jukg zikhuk m 45675 6465754.13 435242623462 18 2000-06-15 jukg zikhuk m 45675 6465754.13 435242623462 18 pib mdotkbm.m +select * from t1 where a<19851231; +a b c d e f g h a1 b1 c1 d1 e1 f1 g1 h1 a2 b2 c2 d2 e2 f2 g2 h2 a3 b3 c3 d3 e3 f3 g3 h3 i +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 +1980-10-14 fgbbd dtzndtz w 67856 5463354.67 3567845333 124 1980-10-14 fgbbd dtzndtz w 67856 5463354.67 3567845333 124 1980-10-14 fgbbd dtzndtz w 67856 5463354.67 3567845333 124 1980-10-14 fgbbd dtzndtz w 67856 5463354.67 3567845333 124 d,f söierugsig msireg siug ei5ggth lrutluitgzeöjrtnb.rkjthuekuhzrkuthgjdnffjmbr +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 +drop table t1; +# Bug#34604 - Assertion 'inited==RND' failed in handler::ha_rnd_end +CREATE TABLE t1 ( +a INT AUTO_INCREMENT, +b VARCHAR(255), +PRIMARY KEY (a)) +ENGINE = TokuDB +PARTITION BY HASH (a) +PARTITIONS 2; +SET autocommit=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES (NULL, 'first row t2'); +SET autocommit=OFF; +SET SESSION lock_wait_timeout= 1; +ALTER TABLE t1 AUTO_INCREMENT = 10; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +DROP TABLE t1; +# +# Bug#53676: Unexpected errors and possible table corruption on +# ADD PARTITION and LOCK TABLE +CREATE TABLE t1 ( i INT NOT NULL AUTO_INCREMENT PRIMARY KEY, f INT ) +ENGINE = TokuDB PARTITION BY HASH(i) PARTITIONS 2; +SET lock_wait_timeout = 2; +#Connection 1 locks the table +LOCK TABLE t1 READ; +# Connection 2 tries to add partitions: +# First attempt: lock wait timeout (as expected) +ALTER TABLE t1 ADD PARTITION PARTITIONS 2; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +# Second attempt: says that partition already exists +ALTER TABLE t1 ADD PARTITION PARTITIONS 2; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +# Connection 1 unlocks the table and locks it again: +UNLOCK TABLES; +LOCK TABLE t1 READ; +# Connection 2 tries again to add partitions: +# Third attempt: says that the table does not exist +ALTER TABLE t1 ADD PARTITION PARTITIONS 2; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +# Check table returns the same (not after fixing bug#56172!) +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +UNLOCK TABLES; +DROP TABLE t1; +CREATE TABLE t2 ( i INT NOT NULL AUTO_INCREMENT PRIMARY KEY, f INT ) +ENGINE = TokuDB PARTITION BY HASH(i) PARTITIONS 2; +SET lock_wait_timeout = 2; +LOCK TABLE t2 READ; +ALTER TABLE t2 ADD PARTITION PARTITIONS 2; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +ALTER TABLE t2 ADD PARTITION PARTITIONS 2; +UNLOCK TABLES; +CHECK TABLE t2; +Table Op Msg_type Msg_text +test.t2 check status OK +SELECT * FROM t2; +i f +DROP TABLE t2; +CREATE TABLE t3 ( i INT NOT NULL AUTO_INCREMENT PRIMARY KEY, f INT ) +ENGINE = TokuDB PARTITION BY HASH(i) PARTITIONS 2; +SET lock_wait_timeout = 2; +# Connection 1 locks the table +LOCK TABLE t3 READ; +# Connection 2 tries to add partitions (timeout): +ALTER TABLE t3 ADD PARTITION PARTITIONS 2; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +SET lock_wait_timeout = 2; +# Connection 3 tries to add partitions (partition already exists): +ALTER TABLE t3 ADD PARTITION PARTITIONS 2; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +# Connection 4 tries to rename the table: +RENAME TABLE t3 TO t4; +# Connection 1 unlocks the table: +UNLOCK TABLES; +# Connection 4 gets error on rename: +# SHOW TABLES returns the table (not renamed): +SHOW TABLES; +Tables_in_test +t4 +# Connection 5 attempts to read from the table (table does not exist): +SELECT * FROM t3; +ERROR 42S02: Table 'test.t3' doesn't exist +DROP TABLE t4; diff --git a/mysql-test/suite/tokudb.parts/r-native/partition_syntax_tokudb.result b/mysql-test/suite/tokudb.parts/r-native/partition_syntax_tokudb.result new file mode 100644 index 000000000000..d4febdfa8e7c --- /dev/null +++ b/mysql-test/suite/tokudb.parts/r-native/partition_syntax_tokudb.result @@ -0,0 +1,1891 @@ +SET @max_row = 20; +SET @@session.default_storage_engine = 'TokuDB'; + +#------------------------------------------------------------------------ +# 0. Setting of auxiliary variables + Creation of an auxiliary tables +# needed in many testcases +#------------------------------------------------------------------------ +SELECT @max_row DIV 2 INTO @max_row_div2; +SELECT @max_row DIV 3 INTO @max_row_div3; +SELECT @max_row DIV 4 INTO @max_row_div4; +SET @max_int_4 = 2147483647; +DROP TABLE IF EXISTS t0_template; +CREATE TABLE t0_template ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) , +PRIMARY KEY(f_int1)) +ENGINE = MEMORY; +# Logging of INSERTs into t0_template suppressed +DROP TABLE IF EXISTS t0_definition; +CREATE TABLE t0_definition ( +state CHAR(3), +create_command VARBINARY(5000), +file_list VARBINARY(10000), +PRIMARY KEY (state) +) ENGINE = MEMORY; +DROP TABLE IF EXISTS t0_aux; +CREATE TABLE t0_aux ( f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) ) +ENGINE = MEMORY; +SET AUTOCOMMIT= 1; +SET @@session.sql_mode= ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +# End of basic preparations needed for all tests +#----------------------------------------------- + +#======================================================================== +# 1. Any PRIMARY KEYs or UNIQUE INDEXes must contain the columns used +# within the partitioning functions +#======================================================================== +DROP TABLE IF EXISTS t1; +#------------------------------------------------------------------------ +# 1.1 column of partitioning function not included in PRIMARY KEY +# PARTITION BY HASH/KEY/LIST/RANGE +#------------------------------------------------------------------------ +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000), +PRIMARY KEY (f_int2) +) +PARTITION BY HASH(f_int1) PARTITIONS 2; +ERROR HY000: A PRIMARY KEY must include all columns in the table's partitioning function +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000), +PRIMARY KEY (f_int2) +) +PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2; +ERROR HY000: A PRIMARY KEY must include all columns in the table's partitioning function +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000), +PRIMARY KEY (f_int2) +) +PARTITION BY KEY(f_int1) PARTITIONS 2; +ERROR HY000: A PRIMARY KEY must include all columns in the table's partitioning function +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000), +PRIMARY KEY (f_int2) +) +PARTITION BY KEY(f_int1,f_int2) PARTITIONS 2; +ERROR HY000: A PRIMARY KEY must include all columns in the table's partitioning function +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000), +PRIMARY KEY (f_int2) +) +PARTITION BY LIST(f_int1) +(PARTITION part1 VALUES IN (1)); +ERROR HY000: A PRIMARY KEY must include all columns in the table's partitioning function +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000), +PRIMARY KEY (f_int2) +) +PARTITION BY LIST(f_int1 + f_int2) +(PARTITION part1 VALUES IN (1)); +ERROR HY000: A PRIMARY KEY must include all columns in the table's partitioning function +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000), +PRIMARY KEY (f_int2) +) +PARTITION BY RANGE(f_int1) +(PARTITION part1 VALUES LESS THAN (1)); +ERROR HY000: A PRIMARY KEY must include all columns in the table's partitioning function +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000), +PRIMARY KEY (f_int2) +) +PARTITION BY RANGE(f_int1 + f_int2) +(PARTITION part1 VALUES LESS THAN (1)); +ERROR HY000: A PRIMARY KEY must include all columns in the table's partitioning function +#------------------------------------------------------------------------ +# 1.2 column of partitioning function not included in UNIQUE INDEX +# PARTITION BY HASH/KEY/LIST/RANGE +# Variant a) Without additional PRIMARY KEY +# Variant b) With correct additional PRIMARY KEY +# Variant 1) one column in partitioning function +# Variant 2) two columns in partitioning function +#------------------------------------------------------------------------ +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000), +UNIQUE INDEX (f_int2) +) +PARTITION BY HASH(f_int1) PARTITIONS 2; +ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000), +PRIMARY KEY(f_int1,f_int2), UNIQUE INDEX (f_int2) +) +PARTITION BY HASH(f_int1) PARTITIONS 2; +ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000), +UNIQUE INDEX (f_int2) +) +PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2; +ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000), +PRIMARY KEY(f_int1,f_int2), UNIQUE INDEX (f_int2) +) +PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2; +ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000), +UNIQUE INDEX (f_int2) +) +PARTITION BY KEY(f_int1) PARTITIONS 2; +ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000), +PRIMARY KEY(f_int1,f_int2), UNIQUE INDEX (f_int2) +) +PARTITION BY KEY(f_int1) PARTITIONS 2; +ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000), +UNIQUE INDEX (f_int2) +) +PARTITION BY KEY(f_int1,f_int2) PARTITIONS 2; +ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000), +PRIMARY KEY(f_int1,f_int2), UNIQUE INDEX (f_int2) +) +PARTITION BY KEY(f_int1,f_int2) PARTITIONS 2; +ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000), +UNIQUE INDEX (f_int2) +) +PARTITION BY LIST(MOD(f_int1,3)) +(PARTITION partN VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +PARTITION part2 VALUES IN (2)); +ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000), +PRIMARY KEY(f_int1,f_int2), UNIQUE INDEX (f_int2) +) +PARTITION BY LIST(MOD(f_int1,3)) +(PARTITION partN VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +PARTITION part2 VALUES IN (2)); +ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000), +UNIQUE INDEX (f_int2) +) +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)); +ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000), +PRIMARY KEY(f_int1,f_int2), UNIQUE INDEX (f_int2) +) +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)); +ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000), +UNIQUE INDEX (f_int2) +) +PARTITION BY RANGE(f_int1) +(PARTITION part1 VALUES LESS THAN (1), +PARTITION part2 VALUES LESS THAN (2147483646)); +ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000), +PRIMARY KEY(f_int1,f_int2), UNIQUE INDEX (f_int2) +) +PARTITION BY RANGE(f_int1) +(PARTITION part1 VALUES LESS THAN (1), +PARTITION part2 VALUES LESS THAN (2147483646)); +ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000), +UNIQUE INDEX (f_int2) +) +PARTITION BY RANGE(f_int1 + f_int2) +(PARTITION part1 VALUES LESS THAN (1), +PARTITION part2 VALUES LESS THAN (2147483646)); +ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000), +PRIMARY KEY(f_int1,f_int2), UNIQUE INDEX (f_int2) +) +PARTITION BY RANGE(f_int1 + f_int2) +(PARTITION part1 VALUES LESS THAN (1), +PARTITION part2 VALUES LESS THAN (2147483646)); +ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function +#------------------------------------------------------------------------ +# 1.3 column of subpartitioning function not included in PRIMARY KEY +# PARTITION BY RANGE/LIST -- SUBPARTITION BY HASH/KEY +#------------------------------------------------------------------------ +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000), +PRIMARY KEY (f_int2) +) +PARTITION BY RANGE(f_int2) SUBPARTITION BY HASH(f_int1) +(PARTITION part1 VALUES LESS THAN (1) +(SUBPARTITION subpart1)); +ERROR HY000: A PRIMARY KEY must include all columns in the table's partitioning function +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000), +PRIMARY KEY (f_int2) +) +PARTITION BY RANGE(f_int2) SUBPARTITION BY KEY(f_int1) +(PARTITION part1 VALUES LESS THAN (1) +(SUBPARTITION subpart1)); +ERROR HY000: A PRIMARY KEY must include all columns in the table's partitioning function +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000), +PRIMARY KEY (f_int2) +) +PARTITION BY LIST(f_int2) SUBPARTITION BY HASH(f_int1) +(PARTITION part1 VALUES IN (1) +(SUBPARTITION subpart1)); +ERROR HY000: A PRIMARY KEY must include all columns in the table's partitioning function +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000), +PRIMARY KEY (f_int2) +) +PARTITION BY LIST(f_int2) SUBPARTITION BY KEY(f_int1) +(PARTITION part1 VALUES IN (1) +(SUBPARTITION subpart1)); +ERROR HY000: A PRIMARY KEY must include all columns in the table's partitioning function +#------------------------------------------------------------------------ +# 1.4 column of subpartitioning function not included in UNIQUE INDEX +# PARTITION BY RANGE/LIST -- SUBPARTITION BY HASH/KEY +# Variant a) Without additional PRIMARY KEY +# Variant b) With correct additional PRIMARY KEY +#------------------------------------------------------------------------ +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000), +UNIQUE INDEX (f_int2) +) +PARTITION BY RANGE(f_int2) +SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 3 +(PARTITION part1 VALUES LESS THAN (1), +PARTITION part2 VALUES LESS THAN (2147483646)); +ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000), +PRIMARY KEY(f_int1,f_int2), UNIQUE INDEX (f_int2) +) +PARTITION BY RANGE(f_int2) +SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 3 +(PARTITION part1 VALUES LESS THAN (1), +PARTITION part2 VALUES LESS THAN (2147483646)); +ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000), +UNIQUE INDEX (f_int2) +) +PARTITION BY RANGE(f_int2) +SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 +(PARTITION part1 VALUES LESS THAN (1), +PARTITION part2 VALUES LESS THAN (2147483646)); +ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000), +PRIMARY KEY(f_int1,f_int2), UNIQUE INDEX (f_int2) +) +PARTITION BY RANGE(f_int2) +SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3 +(PARTITION part1 VALUES LESS THAN (1), +PARTITION part2 VALUES LESS THAN (2147483646)); +ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000), +UNIQUE INDEX (f_int2) +) +PARTITION BY LIST(MOD(f_int2,3)) +SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 +(PARTITION partN VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +PARTITION part2 VALUES IN (2)); +ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000), +PRIMARY KEY(f_int1,f_int2), UNIQUE INDEX (f_int2) +) +PARTITION BY LIST(MOD(f_int2,3)) +SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 +(PARTITION partN VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +PARTITION part2 VALUES IN (2)); +ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000), +UNIQUE INDEX (f_int2) +) +PARTITION BY LIST(MOD(f_int2,3)) +SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 2 +(PARTITION partN VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +PARTITION part2 VALUES IN (2)); +ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000), +PRIMARY KEY(f_int1,f_int2), UNIQUE INDEX (f_int2) +) +PARTITION BY LIST(MOD(f_int2,3)) +SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 2 +(PARTITION partN VALUES IN (NULL), +PARTITION part0 VALUES IN (0), +PARTITION part1 VALUES IN (1), +PARTITION part2 VALUES IN (2)); +ERROR HY000: A UNIQUE INDEX must include all columns in the table's partitioning function + +#======================================================================== +# 2 Some properties around subpartitioning +#======================================================================== +#------------------------------------------------------------------------ +# 2.1 Subpartioned table without subpartitioning rule must be rejected +#------------------------------------------------------------------------ +DROP TABLE IF EXISTS t1; +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) +( PARTITION part1 VALUES LESS THAN (1000) (SUBPARTITION subpart11)); +ERROR HY000: It is only possible to mix RANGE/LIST partitioning with HASH/KEY partitioning for subpartitioning +#------------------------------------------------------------------------ +# 2.2 Every partition must have the same number of subpartitions. +# This is a limitation of MySQL 5.1, which could be removed in +# later releases. +#------------------------------------------------------------------------ +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000), +PRIMARY KEY (f_int1) +) +PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1) +( +PARTITION part1 VALUES LESS THAN (0) +(SUBPARTITION subpart1), +PARTITION part2 VALUES LESS THAN (5) +(SUBPARTITION subpart1, SUBPARTITION subpart2)); +ERROR 42000: Wrong number of subpartitions defined, mismatch with previous setting near '))' at line 14 + +#======================================================================== +# 3 VALUES clauses +#======================================================================== +#------------------------------------------------------------------------ +# 3.1 The constants in VALUES IN clauses must differ +#------------------------------------------------------------------------ +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +) +PARTITION BY LIST(MOD(f_int1,2)) +( PARTITION part1 VALUES IN (-1), +PARTITION part2 VALUES IN (0), +PARTITION part3 VALUES IN (-1)); +ERROR HY000: Multiple definition of same constant in list partitioning +CREATE TABLE t1 (f1 BIGINT, f2 BIGINT) +PARTITION BY RANGE(f1) +(PARTITION part1 VALUES LESS THAN (0), +PARTITION part2 VALUES LESS THAN (0), +PARTITION part3 VALUES LESS THAN (10000)); +ERROR HY000: VALUES LESS THAN value must be strictly increasing for each partition +#------------------------------------------------------------------------ +# 3.2 The constants in VALUES LESS must be in increasing order +#------------------------------------------------------------------------ +CREATE TABLE t1 (f1 BIGINT, f2 BIGINT) +PARTITION BY RANGE(f1) +(PARTITION part1 VALUES LESS THAN (0), +PARTITION part2 VALUES LESS THAN (-1), +PARTITION part3 VALUES LESS THAN (10000)); +ERROR HY000: VALUES LESS THAN value must be strictly increasing for each partition +#------------------------------------------------------------------------ +# 3.3 LIST partitions must be defined with VALUES IN +#------------------------------------------------------------------------ +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +) +PARTITION BY LIST(MOD(f_int1,2)) +( PARTITION part1 VALUES LESS THAN (-1), +PARTITION part2 VALUES LESS THAN (0), +PARTITION part3 VALUES LESS THAN (1000)); +ERROR HY000: Only RANGE PARTITIONING can use VALUES LESS THAN in partition definition +#------------------------------------------------------------------------ +# 3.4 RANGE partitions must be defined with VALUES LESS THAN +#------------------------------------------------------------------------ +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) +( PARTITION part1 VALUES IN (-1), +PARTITION part2 VALUES IN (0), +PARTITION part3 VALUES IN (1000)); +ERROR HY000: Only LIST PARTITIONING can use VALUES IN in partition definition +#------------------------------------------------------------------------ +# 3.5 Use of NULL in VALUES clauses +#------------------------------------------------------------------------ +# 3.5.1 NULL in RANGE partitioning clause +# 3.5.1.1 VALUE LESS THAN (NULL) is not allowed +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) +( PARTITION part1 VALUES LESS THAN (NULL), +PARTITION part2 VALUES LESS THAN (1000)); +ERROR HY000: Not allowed to use NULL value in VALUES LESS THAN +# 3.5.1.2 VALUE LESS THAN (NULL) is not allowed +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) +( PARTITION part1 VALUES LESS THAN (NULL), +PARTITION part2 VALUES LESS THAN (1000)); +ERROR HY000: Not allowed to use NULL value in VALUES LESS THAN +# 3.5.2 NULL in LIST partitioning clause +# 3.5.2.1 VALUE IN (NULL) +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +) +PARTITION BY LIST(MOD(f_int1,2)) +( PARTITION part1 VALUES IN (NULL), +PARTITION part2 VALUES IN (0), +PARTITION part3 VALUES IN (1)); +DROP TABLE t1; +# 3.5.2.2 VALUE IN (NULL) +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +) +PARTITION BY LIST(MOD(f_int1,2)) +( PARTITION part1 VALUES IN (NULL), +PARTITION part3 VALUES IN (1)); +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1,2)) +(PARTITION part1 VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part3 VALUES IN (1) ENGINE = TokuDB) */ + +DROP TABLE t1; +# 3.5.3 Reveal that IN (...NULL) is not mapped to IN(0) +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +) +PARTITION BY LIST(MOD(f_int1,2)) +( PARTITION part1 VALUES IN (NULL), +PARTITION part2 VALUES IN (0), +PARTITION part3 VALUES IN (1)); +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY LIST (MOD(f_int1,2)) +(PARTITION part1 VALUES IN (NULL) ENGINE = TokuDB, + PARTITION part2 VALUES IN (0) ENGINE = TokuDB, + PARTITION part3 VALUES IN (1) ENGINE = TokuDB) */ + +DROP TABLE t1; + +#======================================================================== +# 4. Check assigning the number of partitions and subpartitions +# with and without named partitions/subpartitions +#======================================================================== +DROP TABLE IF EXISTS t1; +#------------------------------------------------------------------------ +# 4.1 (positive) without partition/subpartition number assignment +#------------------------------------------------------------------------ +# 4.1.1 no partition number, no named partitions +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); +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1) */ + +DROP TABLE t1; +# 4.1.2 no partition number, named partitions +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) (PARTITION part1, PARTITION part2); +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1) +(PARTITION part1 ENGINE = TokuDB, + PARTITION part2 ENGINE = TokuDB) */ + +DROP TABLE t1; +# 4.1.3 variations on no partition/subpartition number, named partitions, +# different subpartitions are/are not named +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) (PARTITION part1 VALUES LESS THAN (10), PARTITION part2 VALUES LESS THAN (20), PARTITION part3 VALUES LESS THAN (2147483646)) ; +DROP TABLE t1; +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) (PARTITION part1 VALUES LESS THAN (10), PARTITION part2 VALUES LESS THAN (20), PARTITION part3 VALUES LESS THAN (2147483646) +(SUBPARTITION subpart31 , SUBPARTITION subpart32 )) ; +ERROR 42000: Wrong number of subpartitions defined, mismatch with previous setting near 'SUBPARTITION subpart31 , SUBPARTITION subpart32 ))' at line 7 +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) (PARTITION part1 VALUES LESS THAN (10), PARTITION part2 VALUES LESS THAN (20) +(SUBPARTITION subpart21 , SUBPARTITION subpart22 ), PARTITION part3 VALUES LESS THAN (2147483646)) ; +ERROR 42000: Wrong number of subpartitions defined, mismatch with previous setting near 'SUBPARTITION subpart21 , SUBPARTITION subpart22 ), PARTITION part3 VALUES LESS T' at line 7 +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) (PARTITION part1 VALUES LESS THAN (10), PARTITION part2 VALUES LESS THAN (20) +(SUBPARTITION subpart21 , SUBPARTITION subpart22 ), PARTITION part3 VALUES LESS THAN (2147483646) +(SUBPARTITION subpart31 , SUBPARTITION subpart32 )) ; +ERROR 42000: Wrong number of subpartitions defined, mismatch with previous setting near 'SUBPARTITION subpart21 , SUBPARTITION subpart22 ), PARTITION part3 VALUES LESS T' at line 7 +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) (PARTITION part1 VALUES LESS THAN (10) +(SUBPARTITION subpart11 , SUBPARTITION subpart12 ), PARTITION part2 VALUES LESS THAN (20), PARTITION part3 VALUES LESS THAN (2147483646)) ; +ERROR 42000: Wrong number of subpartitions defined, mismatch with previous setting near ' PARTITION part3 VALUES LESS THAN (2147483646))' at line 7 +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) (PARTITION part1 VALUES LESS THAN (10) +(SUBPARTITION subpart11 , SUBPARTITION subpart12 ), PARTITION part2 VALUES LESS THAN (20), PARTITION part3 VALUES LESS THAN (2147483646) +(SUBPARTITION subpart31 , SUBPARTITION subpart32 )) ; +ERROR 42000: Wrong number of subpartitions defined, mismatch with previous setting near ' PARTITION part3 VALUES LESS THAN (2147483646) +(SUBPARTITION subpart31 , SUBPART' at line 7 +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) (PARTITION part1 VALUES LESS THAN (10) +(SUBPARTITION subpart11 , SUBPARTITION subpart12 ), PARTITION part2 VALUES LESS THAN (20) +(SUBPARTITION subpart21 , SUBPARTITION subpart22 ), PARTITION part3 VALUES LESS THAN (2147483646)) ; +ERROR 42000: Wrong number of subpartitions defined, mismatch with previous setting near ')' 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) (PARTITION part1 VALUES LESS THAN (10) +(SUBPARTITION subpart11 , SUBPARTITION subpart12 ), PARTITION part2 VALUES LESS THAN (20) +(SUBPARTITION subpart21 , SUBPARTITION subpart22 ), PARTITION part3 VALUES LESS THAN (2147483646) +(SUBPARTITION subpart31 , SUBPARTITION subpart32 )) ; +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY HASH (f_int1) +(PARTITION part1 VALUES LESS THAN (10) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part2 VALUES LESS THAN (20) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB), + PARTITION part3 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart31 ENGINE = TokuDB, + SUBPARTITION subpart32 ENGINE = TokuDB)) */ + +DROP TABLE t1; +#------------------------------------------------------------------------ +# 4.2 partition/subpartition numbers good and bad values and notations +#------------------------------------------------------------------------ +DROP TABLE IF EXISTS t1; +# 4.2.1 partition/subpartition numbers INTEGER notation +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; +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1) +PARTITIONS 2 */ + +DROP TABLE t1; +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 2 +(PARTITION part1 VALUES LESS THAN (10), +PARTITION part2 VALUES LESS THAN (2147483646)); +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY HASH (f_int1) +SUBPARTITIONS 2 +(PARTITION part1 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION part2 VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +DROP TABLE t1; +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 1; +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1) +PARTITIONS 1 */ + +DROP TABLE t1; +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 +(PARTITION part1 VALUES LESS THAN (10), +PARTITION part2 VALUES LESS THAN (2147483646)); +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY HASH (f_int1) +SUBPARTITIONS 1 +(PARTITION part1 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION part2 VALUES LESS THAN (2147483646) ENGINE = TokuDB) */ + +DROP TABLE t1; +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; +ERROR HY000: Number of partitions = 0 is not an allowed value +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 +(PARTITION part1 VALUES LESS THAN (10), +PARTITION part2 VALUES LESS THAN (2147483646)); +ERROR HY000: Number of subpartitions = 0 is not an allowed value +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 -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 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 +(PARTITION part1 VALUES LESS THAN (10), +PARTITION part2 VALUES LESS THAN (2147483646)); +ERROR 42000: You 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 (10), +PARTITION part2 VALUES LESS THAN (214' 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 1000000; +ERROR HY000: Too many partitions (including subpartitions) were defined +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 1000000 +(PARTITION part1 VALUES LESS THAN (10), +PARTITION part2 VALUES LESS THAN (2147483646)); +ERROR HY000: Too many partitions (including subpartitions) were defined +# 4.2.2 partition/subpartition numbers DECIMAL notation +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.0; +ERROR 42000: Only integers allowed as number here near '2.0' 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 2.0 +(PARTITION part1 VALUES LESS THAN (10), +PARTITION part2 VALUES LESS THAN (2147483646)); +ERROR 42000: Only integers allowed as number here near '2.0 +(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 -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 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 -2.0 +(PARTITION part1 VALUES LESS THAN (10), +PARTITION part2 VALUES LESS THAN (2147483646)); +ERROR 42000: You 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 (10), +PARTITION part2 VALUES LESS THAN (2' 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.0; +ERROR 42000: Only integers allowed as number here near '0.0' 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.0 +(PARTITION part1 VALUES LESS THAN (10), +PARTITION part2 VALUES LESS THAN (2147483646)); +ERROR 42000: Only integers allowed as number here near '0.0 +(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 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 ( +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 999999999999999999999999999999.999999999999999999999999999999 +(PARTITION part1 VALUES LESS THAN (10), +PARTITION part2 VALUES LESS THAN (2147483646)); +ERROR 42000: Only integers allowed as number here near '999999999999999999999999999999.999999999999999999999999999999 +(PARTITION part1 V' 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.000000000000000000000000000001; +ERROR 42000: Only integers allowed as number here near '0.000000000000000000000000000001' 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.000000000000000000000000000001 +(PARTITION part1 VALUES LESS THAN (10), +PARTITION part2 VALUES LESS THAN (2147483646)); +ERROR 42000: Only integers allowed as number here near '0.000000000000000000000000000001 +(PARTITION part1 VALUES LESS THAN (10), +PARTITI' at line 9 +# 4.2.3 partition/subpartition numbers FLOAT notation +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: Only integers allowed as number here near '2.0E+0' 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 2.0E+0 +(PARTITION part1 VALUES LESS THAN (10), +PARTITION part2 VALUES LESS THAN (2147483646)); +ERROR 42000: Only integers allowed as number here near '2.0E+0 +(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.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 ( +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 -2.0E+0 +(PARTITION part1 VALUES LESS THAN (10), +PARTITION part2 VALUES LESS THAN (2147483646)); +ERROR 42000: You 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 +(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.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 ( +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.0E+300 +(PARTITION part1 VALUES LESS THAN (10), +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, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +) +PARTITION BY HASH(f_int1) 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 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 '2' +(PARTITION part1 VALUES LESS THAN (10), +PARTITION part2 VALUES LESS THAN (2147483646)); +ERROR 42000: You 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 (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 '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 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 '2.0' +(PARTITION part1 VALUES LESS THAN (10), +PARTITION part2 VALUES LESS THAN (2147483646)); +ERROR 42000: You 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 (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.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 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: You 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 (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 '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 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 '2A' +(PARTITION part1 VALUES LESS THAN (10), +PARTITION part2 VALUES LESS THAN (2147483646)); +ERROR 42000: You 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 (10), +PARTITION part2 VALUES LESS THAN (2' 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 '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 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 'A2' +(PARTITION part1 VALUES LESS THAN (10), +PARTITION part2 VALUES LESS THAN (2147483646)); +ERROR 42000: You 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 (10), +PARTITION part2 VALUES LESS THAN (2' 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 ''; +ERROR 42000: You 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 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 '' +(PARTITION part1 VALUES LESS THAN (10), +PARTITION part2 VALUES LESS THAN (2147483646)); +ERROR 42000: You 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 (10), +PARTITION part2 VALUES LESS THAN (214' 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 '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 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 'GARBAGE' +(PARTITION part1 VALUES LESS THAN (10), +PARTITION part2 VALUES LESS THAN (2147483646)); +ERROR 42000: You 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 (10), +PARTITION part2 VALUES LESS TH' at line 9 +# 4.2.5 partition/subpartition numbers other notations +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 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 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 2A +(PARTITION part1 VALUES LESS THAN (10), +PARTITION part2 VALUES LESS THAN (2147483646)); +ERROR 42000: You 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 (10), +PARTITION part2 VALUES LESS THAN (214' 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 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 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 A2 +(PARTITION part1 VALUES LESS THAN (10), +PARTITION part2 VALUES LESS THAN (2147483646)); +ERROR 42000: You 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 (10), +PARTITION part2 VALUES LESS THAN (214' 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 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 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 GARBAGE +(PARTITION part1 VALUES LESS THAN (10), +PARTITION part2 VALUES LESS THAN (2147483646)); +ERROR 42000: You 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 (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"; +ERROR 42000: You 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 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 "2" +(PARTITION part1 VALUES LESS THAN (10), +PARTITION part2 VALUES LESS THAN (2147483646)); +ERROR 42000: You 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 (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 "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 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 "2A" +(PARTITION part1 VALUES LESS THAN (10), +PARTITION part2 VALUES LESS THAN (2147483646)); +ERROR 42000: You 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 (10), +PARTITION part2 VALUES LESS THAN (2' 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 "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 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 "A2" +(PARTITION part1 VALUES LESS THAN (10), +PARTITION part2 VALUES LESS THAN (2147483646)); +ERROR 42000: You 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 (10), +PARTITION part2 VALUES LESS THAN (2' 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 "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 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 "GARBAGE" +(PARTITION part1 VALUES LESS THAN (10), +PARTITION part2 VALUES LESS THAN (2147483646)); +ERROR 42000: You 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 (10), +PARTITION part2 VALUES LESS TH' at line 9 +# 4.2.6 (negative) partition/subpartition numbers per @variables +SET @aux = 5; +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 @aux; +ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@aux' 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 @aux = 5 +(PARTITION part1 VALUES LESS THAN (10), +PARTITION part2 VALUES LESS THAN (2147483646)); +ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@aux = 5 +(PARTITION part1 VALUES LESS THAN (10), +PARTITION part2 VALUES LESS THA' at line 9 +#------------------------------------------------------------------------ +# 4.3 Mixups of assigned partition/subpartition numbers and names +#------------------------------------------------------------------------ +# 4.3.1 (positive) number of partition/subpartition +# = number of named partition/subpartition +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 ( PARTITION part1, PARTITION part2 ) ; +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (f_int1) +(PARTITION part1 ENGINE = TokuDB, + PARTITION part2 ENGINE = TokuDB) */ + +DROP TABLE t1; +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) PARTITIONS 2 +SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 +( PARTITION part1 VALUES LESS THAN (1000) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (2147483646) +(SUBPARTITION subpart21, SUBPARTITION subpart22) +); +create_command +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=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (f_int1) +SUBPARTITION BY HASH (f_int1) +(PARTITION part1 VALUES LESS THAN (1000) + (SUBPARTITION subpart11 ENGINE = TokuDB, + SUBPARTITION subpart12 ENGINE = TokuDB), + PARTITION part2 VALUES LESS THAN (2147483646) + (SUBPARTITION subpart21 ENGINE = TokuDB, + SUBPARTITION subpart22 ENGINE = TokuDB)) */ + +DROP TABLE t1; +# 4.3.2 (positive) number of partition/subpartition , +# 0 (= no) named partition/subpartition +# already checked above +# 4.3.3 (negative) number of partitions/subpartitions +# > number of named partitions/subpartitions +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 ( PARTITION part1 ) ; +ERROR 42000: Wrong number of partitions defined, mismatch with previous setting near ')' 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 2 +( PARTITION part1 VALUES LESS THAN (1000) +(SUBPARTITION subpart11 ), +PARTITION part2 VALUES LESS THAN (2147483646) +(SUBPARTITION subpart21, SUBPARTITION subpart22) +); +ERROR 42000: Wrong number of subpartitions defined, mismatch with previous setting near '), +PARTITION part2 VALUES LESS THAN (2147483646) +(SUBPARTITION subpart21, SUBPAR' at line 11 +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 2 +( PARTITION part1 VALUES LESS THAN (1000) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (2000) +(SUBPARTITION subpart21 ), +PARTITION part3 VALUES LESS THAN (2147483646) +(SUBPARTITION subpart31, SUBPARTITION subpart32) +); +ERROR 42000: Wrong number of subpartitions defined, mismatch with previous setting near '), +PARTITION part3 VALUES LESS THAN (2147483646) +(SUBPARTITION subpart31, SUBPAR' at line 13 +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) PARTITIONS 2 +SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2 +( PARTITION part1 VALUES LESS THAN (1000) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (2147483646) +(SUBPARTITION subpart21 ) +); +ERROR 42000: Wrong number of subpartitions defined, mismatch with previous setting near ') +)' at line 13 +# 4.3.4 (negative) number of partitions < number of named partitions +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 1 ( PARTITION part1, PARTITION part2 ) ; +ERROR 42000: Wrong number of partitions defined, mismatch with previous setting near ')' 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 +( PARTITION part1 VALUES LESS THAN (1000) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (2147483646) +(SUBPARTITION subpart21, SUBPARTITION subpart22) +); +ERROR 42000: Wrong number of subpartitions defined, mismatch with previous setting near '), +PARTITION part2 VALUES LESS THAN (2147483646) +(SUBPARTITION subpart21, SUBPAR' at line 11 +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 +( PARTITION part1 VALUES LESS THAN (1000) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (2000) +(SUBPARTITION subpart21 ), +PARTITION part3 VALUES LESS THAN (2147483646) +(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 11 +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 +( PARTITION part1 VALUES LESS THAN (1000) +(SUBPARTITION subpart11, SUBPARTITION subpart12), +PARTITION part2 VALUES LESS THAN (2147483646) +(SUBPARTITION subpart21, SUBPARTITION subpart22) +); +ERROR 42000: Wrong number of subpartitions defined, mismatch with previous setting near '), +PARTITION part2 VALUES LESS THAN (2147483646) +(SUBPARTITION subpart21, SUBPAR' at line 11 + +#======================================================================== +# 5. Checks of logical partition/subpartition name +# file name clashes during CREATE TABLE +#======================================================================== +DROP TABLE IF EXISTS t1; +#------------------------------------------------------------------------ +# 5.1 (negative) A partition/subpartition name used more than once +#------------------------------------------------------------------------ +# 5.1.1 duplicate partition name +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) (PARTITION part1, PARTITION part1); +ERROR HY000: Duplicate partition name part1 +# 5.1.2 duplicate subpartition name +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) +( PARTITION part1 VALUES LESS THAN (1000) +(SUBPARTITION subpart11, SUBPARTITION subpart11) +); +ERROR HY000: Duplicate partition name subpart11 +DROP VIEW IF EXISTS v1; +DROP TABLE IF EXISTS t1; +DROP TABLE IF EXISTS t0_aux; +DROP TABLE IF EXISTS t0_definition; +DROP TABLE IF EXISTS t0_template; diff --git a/mysql-test/suite/tokudb.parts/r-native/partition_value_tokudb.result b/mysql-test/suite/tokudb.parts/r-native/partition_value_tokudb.result new file mode 100644 index 000000000000..716f80d57770 --- /dev/null +++ b/mysql-test/suite/tokudb.parts/r-native/partition_value_tokudb.result @@ -0,0 +1,222 @@ +SET @max_row = 20; +SET @@session.storage_engine = 'TokuDB'; + +#------------------------------------------------------------------------ +# 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 +#------------------------------------------------------------------------ +SELECT @max_row DIV 2 INTO @max_row_div2; +SELECT @max_row DIV 3 INTO @max_row_div3; +SELECT @max_row DIV 4 INTO @max_row_div4; +SET @max_int_4 = 2147483647; +DROP TABLE IF EXISTS t0_template; +CREATE TABLE t0_template ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) , +PRIMARY KEY(f_int1)) +ENGINE = MEMORY; +# Logging of INSERTs into t0_template suppressed +DROP TABLE IF EXISTS t0_definition; +CREATE TABLE t0_definition ( +state CHAR(3), +create_command VARBINARY(5000), +file_list VARBINARY(5000), +PRIMARY KEY (state) +) ENGINE = MEMORY; +DROP TABLE IF EXISTS t0_aux; +CREATE TABLE t0_aux ( f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) ) +ENGINE = MEMORY; +SET AUTOCOMMIT= 1; +SET @@session.sql_mode= ''; +# End of basic preparations needed for all tests +#----------------------------------------------- + +#======================================================================== +# Calculation of "exotic" results within the partition function +# outside of SIGNED BIGINT value range, 0, NULL +# column used in partitioning function has type CHAR +#======================================================================== +# 1. HASH() +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +) +PARTITION BY HASH(CAST(f_char1 AS SIGNED INTEGER) * CAST(5.0E+18 AS SIGNED INTEGER)) PARTITIONS 8; +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +VALUES(2147483646,2147483646,'2147483646','2147483646','#2147483646#'); +SELECT COUNT(*) = 1 FROM t1 WHERE f_char1 = '2147483646'; +COUNT(*) = 1 +1 +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +VALUES(-2147483646,-2147483646,'-2147483646','-2147483646','#-2147483646#'); +SELECT COUNT(*) = 1 FROM t1 WHERE f_char1 = '-2147483646'; +COUNT(*) = 1 +1 +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +VALUES(0,0,'0','0','#0#'); +SELECT COUNT(*) = 1 FROM t1 WHERE f_char1 = '0'; +COUNT(*) = 1 +1 +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +VALUES(NULL,NULL,NULL,NULL,NULL); +SELECT COUNT(*) = 1 FROM t1 WHERE f_char1 IS NULL; +COUNT(*) = 1 +1 +DROP TABLE t1; +# 2. RANGE() +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +) +PARTITION BY RANGE(CAST(f_char1 AS SIGNED INTEGER) * CAST(5.0E+18 AS SIGNED INTEGER)) +(PARTITION p0 VALUES LESS THAN (0), +PARTITION p1 VALUES LESS THAN (1000000), +PARTITION p2 VALUES LESS THAN MAXVALUE); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +VALUES(2147483646,2147483646,'2147483646','2147483646','#2147483646#'); +SELECT COUNT(*) = 1 FROM t1 WHERE f_char1 = '2147483646'; +COUNT(*) = 1 +1 +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +VALUES(-2147483646,-2147483646,'-2147483646','-2147483646','#-2147483646#'); +SELECT COUNT(*) = 1 FROM t1 WHERE f_char1 = '-2147483646'; +COUNT(*) = 1 +1 +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +VALUES(0,0,'0','0','#0#'); +SELECT COUNT(*) = 1 FROM t1 WHERE f_char1 = '0'; +COUNT(*) = 1 +1 +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +VALUES(NULL,NULL,NULL,NULL,NULL); +SELECT COUNT(*) = 1 FROM t1 WHERE f_char1 IS NULL; +COUNT(*) = 1 +1 +DROP TABLE t1; +# 3. LIST() +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +) +PARTITION BY LIST(CAST(f_char1 AS SIGNED INTEGER) * CAST(5.0E+18 AS SIGNED INTEGER)) +(PARTITION p0 VALUES IN (0), +PARTITION p1 VALUES IN (NULL), +PARTITION p2 VALUES IN (CAST( 2147483646 AS SIGNED INTEGER) * CAST(5.0E+18 AS SIGNED INTEGER)), +PARTITION p3 VALUES IN (CAST(-2147483646 AS SIGNED INTEGER) * CAST(5.0E+18 AS SIGNED INTEGER))); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +VALUES(2147483646,2147483646,'2147483646','2147483646','#2147483646#'); +SELECT COUNT(*) = 1 FROM t1 WHERE f_char1 = '2147483646'; +COUNT(*) = 1 +1 +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +VALUES(-2147483646,-2147483646,'-2147483646','-2147483646','#-2147483646#'); +SELECT COUNT(*) = 1 FROM t1 WHERE f_char1 = '-2147483646'; +COUNT(*) = 1 +1 +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +VALUES(0,0,'0','0','#0#'); +SELECT COUNT(*) = 1 FROM t1 WHERE f_char1 = '0'; +COUNT(*) = 1 +1 +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +VALUES(NULL,NULL,NULL,NULL,NULL); +SELECT COUNT(*) = 1 FROM t1 WHERE f_char1 IS NULL; +COUNT(*) = 1 +1 +DROP TABLE t1; +# 4. Partition by RANGE(...) subpartition by HASH() +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +) +PARTITION BY RANGE(CAST(f_char1 AS SIGNED INTEGER)) +SUBPARTITION BY HASH(CAST(f_char2 AS SIGNED INTEGER) * CAST(5.0E+18 AS SIGNED INTEGER)) SUBPARTITIONS 4 +(PARTITION p0 VALUES LESS THAN (0), +PARTITION p1 VALUES LESS THAN MAXVALUE); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +VALUES(2147483646,2147483646,'1','2147483646','#2147483646#'); +SELECT COUNT(*) = 1 FROM t1 WHERE f_char2 = '2147483646'; +COUNT(*) = 1 +1 +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +VALUES(-2147483646,-2147483646,'-1','-2147483646','#-2147483646#'); +SELECT COUNT(*) = 1 FROM t1 WHERE f_char2 = '-2147483646'; +COUNT(*) = 1 +1 +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +VALUES(0,0,'0','0','#0#'); +SELECT COUNT(*) = 1 FROM t1 WHERE f_char2 = '0'; +COUNT(*) = 1 +1 +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +VALUES(NULL,NULL,NULL,NULL,NULL); +SELECT COUNT(*) = 1 FROM t1 WHERE f_char2 IS NULL; +COUNT(*) = 1 +1 +DROP TABLE t1; +# 5. Partition by LIST(...) subpartition by HASH() +CREATE TABLE t1 ( +f_int1 INTEGER, +f_int2 INTEGER, +f_char1 CHAR(20), +f_char2 CHAR(20), +f_charbig VARCHAR(1000) +) +PARTITION BY LIST(CAST(f_char1 AS SIGNED INTEGER)) +SUBPARTITION BY HASH(CAST(f_char2 AS SIGNED INTEGER) * CAST(5.0E+18 AS SIGNED INTEGER)) SUBPARTITIONS 4 +(PARTITION p0 VALUES IN (NULL), +PARTITION p1 VALUES IN (1)); +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +VALUES(2147483646,2147483646,'1','2147483646','#2147483646#'); +SELECT COUNT(*) = 1 FROM t1 WHERE f_char2 = '2147483646'; +COUNT(*) = 1 +1 +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +VALUES(-2147483646,-2147483646,'1','-2147483646','#-2147483646#'); +SELECT COUNT(*) = 1 FROM t1 WHERE f_char2 = '-2147483646'; +COUNT(*) = 1 +1 +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +VALUES(0,0,'1','0','#0#'); +SELECT COUNT(*) = 1 FROM t1 WHERE f_char2 = '0'; +COUNT(*) = 1 +1 +INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig) +VALUES(NULL,NULL,NULL,NULL,NULL); +SELECT COUNT(*) = 1 FROM t1 WHERE f_char2 IS NULL; +COUNT(*) = 1 +1 +DROP TABLE t1; +DROP VIEW IF EXISTS v1; +DROP TABLE IF EXISTS t1; +DROP TABLE IF EXISTS t0_aux; +DROP TABLE IF EXISTS t0_definition; +DROP TABLE IF EXISTS t0_template; diff --git a/mysql-test/suite/tokudb.parts/r-native/upgrade_from_prev_ver.result b/mysql-test/suite/tokudb.parts/r-native/upgrade_from_prev_ver.result new file mode 100644 index 000000000000..fdc49416da08 --- /dev/null +++ b/mysql-test/suite/tokudb.parts/r-native/upgrade_from_prev_ver.result @@ -0,0 +1,155 @@ +# Copy the remote tablespace & DB zip files from suite location to working location. +# Check that the file exists in the working folder. +# Stop DB server which was created by MTR default +######### +# Test for "ALTER TABLE ... UPGRADE PARTITIONING" +### +# Unzip the zip file. +# Create a bootstrap file in temp location +MYSQL_TMP_DIR/bootstrap.log +# restart: +# Check test table before upgrade +SHOW CREATE TABLE test.t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(10) unsigned NOT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (100) ENGINE = TokuDB, + PARTITION p1 VALUES LESS THAN (200) ENGINE = TokuDB, + PARTITION p2 VALUES LESS THAN (300) ENGINE = TokuDB, + PARTITION p3 VALUES LESS THAN (400) ENGINE = TokuDB) */ +Warnings: +Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. +SELECT * FROM test.t1 ORDER BY a; +a +50 +55 +250 +255 +350 +355 +t1.frm +t1.par +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb +t1_P_p2_main_id.tokudb +t1_P_p2_status_id.tokudb +t1_P_p3_main_id.tokudb +t1_P_p3_status_id.tokudb +# Upgrade +ALTER TABLE test.t1 UPGRADE PARTITIONING; +Warnings: +Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. +# Check test table after upgrade +SHOW CREATE TABLE test.t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(10) unsigned NOT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (100) ENGINE = TokuDB, + PARTITION p1 VALUES LESS THAN (200) ENGINE = TokuDB, + PARTITION p2 VALUES LESS THAN (300) ENGINE = TokuDB, + PARTITION p3 VALUES LESS THAN (400) ENGINE = TokuDB) */ +SELECT * FROM test.t1 ORDER BY a; +a +50 +55 +250 +255 +350 +355 +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb +t1_P_p2_main_id.tokudb +t1_P_p2_status_id.tokudb +t1_P_p3_main_id.tokudb +t1_P_p3_status_id.tokudb +# Stop the server +# Remove data directory +######### +# Test for upgrade partitioning with mysql_upgrade +### +# Unzip the zip file. +# restart: +# Execute mysql_upgrade +mysql.columns_priv OK +mysql.db OK +mysql.engine_cost OK +mysql.event OK +mysql.func OK +mysql.general_log OK +mysql.gtid_executed OK +mysql.help_category OK +mysql.help_keyword OK +mysql.help_relation OK +mysql.help_topic OK +mysql.innodb_index_stats OK +mysql.innodb_table_stats OK +mysql.ndb_binlog_index OK +mysql.plugin OK +mysql.proc OK +mysql.procs_priv OK +mysql.proxies_priv OK +mysql.server_cost OK +mysql.servers OK +mysql.slave_master_info OK +mysql.slave_relay_log_info OK +mysql.slave_worker_info OK +mysql.slow_log OK +mysql.tables_priv OK +mysql.time_zone OK +mysql.time_zone_leap_second OK +mysql.time_zone_name OK +mysql.time_zone_transition OK +mysql.time_zone_transition_type OK +mysql.user OK +sys.sys_config OK +test.t1 +error : Partitioning upgrade required. Please dump/reload to fix it or do: ALTER TABLE `test`.`t1` UPGRADE PARTITIONING +warning : The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. + +Upgrading tables +Running : ALTER TABLE `test`.`t1` UPGRADE PARTITIONING +status : OK +# Check test table after upgrade +SHOW CREATE TABLE test.t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(10) unsigned NOT NULL, + PRIMARY KEY (`a`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (100) ENGINE = TokuDB, + PARTITION p1 VALUES LESS THAN (200) ENGINE = TokuDB, + PARTITION p2 VALUES LESS THAN (300) ENGINE = TokuDB, + PARTITION p3 VALUES LESS THAN (400) ENGINE = TokuDB) */ +SELECT * FROM test.t1 ORDER BY a; +a +50 +55 +250 +255 +350 +355 +t1.frm +t1_P_p0_main_id.tokudb +t1_P_p0_status_id.tokudb +t1_P_p1_main_id.tokudb +t1_P_p1_status_id.tokudb +t1_P_p2_main_id.tokudb +t1_P_p2_status_id.tokudb +t1_P_p3_main_id.tokudb +t1_P_p3_status_id.tokudb +# Stop the server +# Remove copied files +# Restart the server with default options. +# restart diff --git a/mysql-test/suite/tokudb.parts/t/disable_native_partitioning.test b/mysql-test/suite/tokudb.parts/t/disable_native_partitioning.test new file mode 100644 index 000000000000..c2d742e00b35 --- /dev/null +++ b/mysql-test/suite/tokudb.parts/t/disable_native_partitioning.test @@ -0,0 +1,6 @@ +--source include/have_tokudb.inc +--source ../include/have_native_partitioning.inc + +--let $disable_native_partition_opt = "tokudb_enable_native_partition" +--let $engine = TokuDB +--source ../../parts/inc/disable_native_partitioning.inc diff --git a/mysql-test/suite/tokudb.parts/t/upgrade_from_prev_ver.test b/mysql-test/suite/tokudb.parts/t/upgrade_from_prev_ver.test new file mode 100644 index 000000000000..4c439bba2b02 --- /dev/null +++ b/mysql-test/suite/tokudb.parts/t/upgrade_from_prev_ver.test @@ -0,0 +1,32 @@ +--source include/have_util_unzip.inc +--source include/have_tokudb.inc +--source ../include/have_native_partitioning.inc + +#Zipped data directory was created with default 16K page size +#Innodb does not recognizes partition table created in linux from windows +#due to difference in path format. +--source include/not_windows.inc + +--source ../../parts/inc/update_parts_from_prev_ver_suppressions.inc + +--let $ADDITIONAL_OPTS=--loose-tokudb-dir-per-db=1 +--let $DATA_DIR_NAME=data_prev_ver_part_tokudb + +# Set different paths for --datadir +--let $MYSQLD_DATADIR1=$MYSQL_TMP_DIR/$DATA_DIR_NAME +--let $DATA_ARCH_PATH=$MYSQL_TMP_DIR/$DATA_DIR_NAME.zip + +--echo # Copy the remote tablespace & DB zip files from suite location to working location. +--copy_file $MYSQLTEST_VARDIR/std_data/$DATA_DIR_NAME.zip $DATA_ARCH_PATH + +--echo # Check that the file exists in the working folder. +--file_exists $DATA_ARCH_PATH + +--echo # Stop DB server which was created by MTR default +--source include/shutdown_mysqld.inc + +--source ../../parts/inc/upgrade_parts_from_prev_ver_alter.inc +--source ../../parts/inc/upgrade_parts_from_prev_ver_mysql_upgrade.inc + +--echo # Restart the server with default options. +--source include/start_mysqld.inc diff --git a/mysql-test/suite/tokudb.rpl/combinations b/mysql-test/suite/tokudb.rpl/combinations index 07042c2cbecd..9d9d3d85c164 100644 --- a/mysql-test/suite/tokudb.rpl/combinations +++ b/mysql-test/suite/tokudb.rpl/combinations @@ -6,3 +6,21 @@ binlog-format=statement [mix] binlog-format=mixed + +[row-native-partitioning] +loose-tokudb-enable-native-partition=on +mtr-result-dir = r-native-partitioning +mtr-tests-list = rpl_extra_col_slave_tokudb,rpl_partition_tokudb,rpl_tokudb_bug28430,rpl_tokudb_rfr_partition_table +binlog-format=row + +[stmt-native-partitioning] +loose-tokudb-enable-native-partition=on +mtr-result-dir = r-native-partitioning +mtr-tests-list = rpl_partition_tokudb +binlog-format=statement + +[mix-native-partitioning] +loose-tokudb-enable-native-partition=on +mtr-result-dir = r-native-partitioning +mtr-tests-list = rpl_partition_tokudb,rpl_tokudb_bug28430 +binlog-format=mixed diff --git a/mysql-test/suite/tokudb.rpl/r-native-partitioning/rpl_extra_col_slave_tokudb.result b/mysql-test/suite/tokudb.rpl/r-native-partitioning/rpl_extra_col_slave_tokudb.result new file mode 100644 index 000000000000..2ca4a7e2fa8c --- /dev/null +++ b/mysql-test/suite/tokudb.rpl/r-native-partitioning/rpl_extra_col_slave_tokudb.result @@ -0,0 +1,556 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +call mtr.add_suppression("Slave: Unknown table 'test.t6' Error_code: 1051"); +call mtr.add_suppression("Slave SQL.*Column [0-9] of table .test.t[0-9]*. cannot be converted from type.* Error_code: 1677"); +call mtr.add_suppression("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state"); +**** Diff Table Def Start **** +*** On Slave *** +STOP SLAVE; +SET @saved_slave_type_conversions = @@slave_type_conversions; +SET GLOBAL SLAVE_TYPE_CONVERSIONS = 'ALL_NON_LOSSY'; +CREATE TABLE t1 (a INT, b INT PRIMARY KEY, c CHAR(20), +d FLOAT DEFAULT '2.00', +e CHAR(4) DEFAULT 'TEST') +ENGINE='TokuDB'; +*** Create t1 on Master *** +CREATE TABLE t1 (a INT PRIMARY KEY, b INT, c CHAR(10) +) ENGINE='TokuDB'; +*** Start Slave *** +include/rpl_reset.inc +*** Master Data Insert *** +INSERT INTO t1 () VALUES(1,2,'TEXAS'),(2,1,'AUSTIN'),(3,4,'QA'); +SELECT * FROM t1 ORDER BY a; +a b c +1 2 TEXAS +2 1 AUSTIN +3 4 QA +*** Select from slave *** +SELECT * FROM t1 ORDER BY a; +a b c d e +1 2 TEXAS 2 TEST +2 1 AUSTIN 2 TEST +3 4 QA 2 TEST +SET GLOBAL SLAVE_TYPE_CONVERSIONS = @saved_slave_type_conversions; +*** Drop t1 *** +DROP TABLE t1; +*** Create t2 on slave *** +STOP SLAVE; +CREATE TABLE t2 (a INT, b INT PRIMARY KEY, c CHAR(5), +d FLOAT DEFAULT '2.00', +e CHAR(5) DEFAULT 'TEST2') +ENGINE='TokuDB'; +*** Create t2 on Master *** +CREATE TABLE t2 (a INT PRIMARY KEY, b INT, c CHAR(10) +) ENGINE='TokuDB'; +*** Start Slave *** +include/rpl_reset.inc +*** Master Data Insert *** +INSERT INTO t2 () VALUES(1,2,'Kyle, TEX'),(2,1,'JOE AUSTIN'),(3,4,'QA TESTING'); +SELECT * FROM t2 ORDER BY a; +a b c +1 2 Kyle, TEX +2 1 JOE AUSTIN +3 4 QA TESTING +include/wait_for_slave_sql_error.inc [errno=1677] +STOP SLAVE; +include/rpl_reset.inc +SELECT * FROM t2 ORDER BY a; +a b c d e +*** Drop t2 *** +DROP TABLE t2; +*** Create t3 on slave *** +STOP SLAVE; +CREATE TABLE t3 (a INT, b INT PRIMARY KEY, c CHAR(20), +d FLOAT DEFAULT '2.00', +e CHAR(5) DEFAULT 'TEST2') +ENGINE='TokuDB'; +*** Create t3 on Master *** +CREATE TABLE t3 (a BLOB, b INT PRIMARY KEY, c CHAR(20) +) ENGINE='TokuDB'; +*** Start Slave *** +include/rpl_reset.inc +*** Master Data Insert *** +set @b1 = 'b1'; +set @b1 = concat(@b1,@b1); +INSERT INTO t3 () VALUES(@b1,2,'Kyle, TEX'),(@b1,1,'JOE AUSTIN'),(@b1,4,'QA TESTING'); +****************************************************************** +*** Expect slave to fail with Error ER_SLAVE_CONVERSION_FAILED *** +****************************************************************** +include/wait_for_slave_sql_error_and_skip.inc [errno=1677] +*** Drop t3 *** +DROP TABLE t3; +*** Create t4 on slave *** +STOP SLAVE; +CREATE TABLE t4 (a INT, b INT PRIMARY KEY, c CHAR(20), +d FLOAT DEFAULT '2.00', +e CHAR(5) DEFAULT 'TEST2') +ENGINE='TokuDB'; +*** Create t4 on Master *** +CREATE TABLE t4 (a DECIMAL(8,2), b INT PRIMARY KEY, c CHAR(20) +) ENGINE='TokuDB'; +*** Start Slave *** +include/rpl_reset.inc +*** Master Data Insert *** +INSERT INTO t4 () VALUES(100.22,2,'Kyle, TEX'),(200.26,1,'JOE AUSTIN'), +(30000.22,4,'QA TESTING'); +****************************************************************** +*** Expect slave to fail with Error ER_SLAVE_CONVERSION_FAILED *** +****************************************************************** +include/wait_for_slave_sql_error_and_skip.inc [errno=1677] +*** Drop t4 *** +DROP TABLE t4; +*** Create t5 on slave *** +STOP SLAVE; +CREATE TABLE t5 (a INT PRIMARY KEY, b CHAR(5), +c FLOAT, d INT, e DOUBLE, +f DECIMAL(8,2))ENGINE='TokuDB'; +*** Create t5 on Master *** +CREATE TABLE t5 (a INT PRIMARY KEY, b VARCHAR(6), +c DECIMAL(8,2), d BIT, e BLOB, +f FLOAT) ENGINE='TokuDB'; +*** Start Slave *** +include/rpl_reset.inc +*** Master Data Insert *** +INSERT INTO t5 () VALUES(1,'Kyle',200.23,1,'b1b1',23.00098), +(2,'JOE',300.01,0,'b2b2',1.0000009); +****************************************************************** +*** Expect slave to fail with Error ER_SLAVE_CONVERSION_FAILED *** +****************************************************************** +include/wait_for_slave_sql_error_and_skip.inc [errno=1677] +*** Drop t5 *** +DROP TABLE t5; +*** Create t6 on slave *** +STOP SLAVE; +CREATE TABLE t6 (a INT PRIMARY KEY, b CHAR(5), +c FLOAT, d INT)ENGINE='TokuDB'; +*** Create t6 on Master *** +CREATE TABLE t6 (a INT PRIMARY KEY, b VARCHAR(6), +c DECIMAL(8,2), d BIT +) ENGINE='TokuDB'; +*** Start Slave *** +include/rpl_reset.inc +*** Master Data Insert *** +INSERT INTO t6 () VALUES(1,'Kyle',200.23,1), +(2,'JOE',300.01,0); +****************************************************************** +*** Expect slave to fail with Error ER_SLAVE_CONVERSION_FAILED *** +****************************************************************** +include/wait_for_slave_sql_error_and_skip.inc [errno=1677] +*** Drop t6 *** +include/rpl_reset.inc +DROP TABLE t6; +**** Diff Table Def End **** +**** Extra Colums Start **** +*** Create t7 on slave *** +STOP SLAVE; +SET sql_mode = 'NO_ENGINE_SUBSTITUTION'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +CREATE TABLE t7 (a INT KEY, b BLOB, c CHAR(5), +d TIMESTAMP NULL DEFAULT '0000-00-00 00:00:00', +e CHAR(20) DEFAULT 'Extra Column Testing') +ENGINE='TokuDB'; +*** Create t7 on Master *** +CREATE TABLE t7 (a INT PRIMARY KEY, b BLOB, c CHAR(5) +) ENGINE='TokuDB'; +*** Start Slave *** +include/rpl_reset.inc +*** Master Data Insert *** +set @b1 = 'b1'; +set @b1 = concat(@b1,@b1); +INSERT INTO t7 () VALUES(1,@b1,'Kyle'),(2,@b1,'JOE'),(3,@b1,'QA'); +SELECT * FROM t7 ORDER BY a; +a b c +1 b1b1 Kyle +2 b1b1 JOE +3 b1b1 QA +*** Select from slave *** +SELECT * FROM t7 ORDER BY a; +a b c d e +1 b1b1 Kyle 0000-00-00 00:00:00 Extra Column Testing +2 b1b1 JOE 0000-00-00 00:00:00 Extra Column Testing +3 b1b1 QA 0000-00-00 00:00:00 Extra Column Testing +*** Drop t7 *** +DROP TABLE t7; +*** Create t8 on slave *** +STOP SLAVE; +CREATE TABLE t8 (a INT KEY, b BLOB, c CHAR(5), +d TIMESTAMP NULL DEFAULT '0000-00-00 00:00:00', +e INT)ENGINE='TokuDB'; +SET sql_mode = default; +*** Create t8 on Master *** +CREATE TABLE t8 (a INT PRIMARY KEY, b BLOB, c CHAR(5) +) ENGINE='TokuDB'; +*** Start Slave *** +include/rpl_reset.inc +*** Master Data Insert *** +set @b1 = 'b1b1b1b1'; +set @b1 = concat(@b1,@b1); +INSERT INTO t8 () VALUES(1,@b1,'Kyle'),(2,@b1,'JOE'),(3,@b1,'QA'); +*** Drop t8 *** +DROP TABLE t8; +STOP SLAVE; +CREATE TABLE t9 (a INT KEY, b BLOB, c CHAR(5), +d TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP +ON UPDATE CURRENT_TIMESTAMP, +e INT NOT NULL, +f text not null, +g text, +h blob not null, +i blob) ENGINE='TokuDB'; +*** Create t9 on Master *** +CREATE TABLE t9 (a INT PRIMARY KEY, b BLOB, c CHAR(5) +) ENGINE='TokuDB'; +*** Start Slave *** +include/rpl_reset.inc +*** Master Data Insert *** +set @b1 = 'b1b1b1b1'; +set @b1 = concat(@b1,@b1); +INSERT INTO t9 () VALUES(1,@b1,'Kyle'),(2,@b1,'JOE'),(3,@b1,'QA'); +select * from t9; +a b c d e f g h i +1 b1b1b1b1b1b1b1b1 Kyle CURRENT_TIMESTAMP 0 NULL NULL +2 b1b1b1b1b1b1b1b1 JOE CURRENT_TIMESTAMP 0 NULL NULL +3 b1b1b1b1b1b1b1b1 QA CURRENT_TIMESTAMP 0 NULL NULL +include/assert.inc [The values of column 'd' should have non-zero timetsamp.] +DROP TABLE t9; +*** Create t10 on slave *** +STOP SLAVE; +CREATE TABLE t10 (a INT KEY, b BLOB, f DOUBLE DEFAULT '233', +c CHAR(5), e INT DEFAULT '1')ENGINE='TokuDB'; +*** Create t10 on Master *** +CREATE TABLE t10 (a INT PRIMARY KEY, b BLOB, c CHAR(5) +) ENGINE='TokuDB'; +*** Start Slave *** +include/rpl_reset.inc +*** Master Data Insert *** +set @b1 = 'b1b1b1b1'; +set @b1 = concat(@b1,@b1); +INSERT INTO t10 () VALUES(1,@b1,'Kyle'),(2,@b1,'JOE'),(3,@b1,'QA'); +****************************************************************** +*** Expect slave to fail with Error ER_SLAVE_CONVERSION_FAILED *** +****************************************************************** +include/wait_for_slave_sql_error_and_skip.inc [errno=1677] +*** Drop t10 *** +DROP TABLE t10; +*** Create t11 on slave *** +STOP SLAVE; +CREATE TABLE t11 (a INT KEY, b BLOB, f INT, +c CHAR(5) DEFAULT 'test', e INT DEFAULT '1')ENGINE='TokuDB'; +*** Create t11 on Master *** +CREATE TABLE t11 (a INT PRIMARY KEY, b BLOB, c VARCHAR(254) +) ENGINE='TokuDB'; +*** Start Slave *** +include/rpl_reset.inc +*** Master Data Insert *** +set @b1 = 'b1b1b1b1'; +set @b1 = concat(@b1,@b1); +INSERT INTO t11 () VALUES(1,@b1,'Kyle'),(2,@b1,'JOE'),(3,@b1,'QA'); +****************************************************************** +*** Expect slave to fail with Error ER_SLAVE_CONVERSION_FAILED *** +****************************************************************** +include/wait_for_slave_sql_error_and_skip.inc [errno=1677] +*** Drop t11 *** +DROP TABLE t11; +*** Create t12 on slave *** +STOP SLAVE; +CREATE TABLE t12 (a INT KEY, b BLOB, f TEXT, +c CHAR(5) DEFAULT 'test', e INT DEFAULT '1')ENGINE='TokuDB'; +*** Create t12 on Master *** +CREATE TABLE t12 (a INT PRIMARY KEY, b BLOB, c BLOB +) ENGINE='TokuDB'; +*** Start Slave *** +include/rpl_reset.inc +*** Master Data Insert *** +set @b1 = 'b1b1b1b1'; +set @b1 = concat(@b1,@b1); +INSERT INTO t12 () VALUES(1,@b1,'Kyle'),(2,@b1,'JOE'),(3,@b1,'QA'); +SELECT * FROM t12 ORDER BY a; +a b c +1 b1b1b1b1b1b1b1b1 Kyle +2 b1b1b1b1b1b1b1b1 JOE +3 b1b1b1b1b1b1b1b1 QA +*** Select on Slave *** +SELECT * FROM t12 ORDER BY a; +a b f c e +1 b1b1b1b1b1b1b1b1 Kyle test 1 +2 b1b1b1b1b1b1b1b1 JOE test 1 +3 b1b1b1b1b1b1b1b1 QA test 1 +*** Drop t12 *** +DROP TABLE t12; +**** Extra Colums End **** +*** BUG 22177 Start *** +*** Create t13 on slave *** +STOP SLAVE; +CREATE TABLE t13 (a INT KEY, b BLOB, c CHAR(5), +d INT DEFAULT '1', +e TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP +)ENGINE='TokuDB'; +*** Create t13 on Master *** +CREATE TABLE t13 (a INT PRIMARY KEY, b BLOB, c CHAR(5) +) ENGINE='TokuDB'; +*** Start Slave *** +include/rpl_reset.inc +*** Master Data Insert *** +set @b1 = 'b1b1b1b1'; +set @b1 = concat(@b1,@b1); +INSERT INTO t13 () VALUES(1,@b1,'Kyle'),(2,@b1,'JOE'),(3,@b1,'QA'); +SELECT * FROM t13 ORDER BY a; +a b c +1 b1b1b1b1b1b1b1b1 Kyle +2 b1b1b1b1b1b1b1b1 JOE +3 b1b1b1b1b1b1b1b1 QA +*** Select on Slave **** +SELECT * FROM t13 ORDER BY a; +a b c d e +1 b1b1b1b1b1b1b1b1 Kyle 1 CURRENT_TIMESTAMP +2 b1b1b1b1b1b1b1b1 JOE 1 CURRENT_TIMESTAMP +3 b1b1b1b1b1b1b1b1 QA 1 CURRENT_TIMESTAMP +*** Drop t13 *** +DROP TABLE t13; +*** 22117 END *** +*** Alter Master Table Testing Start *** +*** Create t14 on slave *** +STOP SLAVE; +CREATE TABLE t14 (c1 INT KEY, c4 BLOB, c5 CHAR(5), +c6 INT DEFAULT '1', +c7 TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP +)ENGINE='TokuDB'; +*** Create t14 on Master *** +CREATE TABLE t14 (c1 INT PRIMARY KEY, c4 BLOB, c5 CHAR(5) +) ENGINE='TokuDB'; +*** Start Slave *** +include/rpl_reset.inc +*** 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'), +(2,2.00,'This Test Should work',@b1,'JOE'), +(3,3.00,'If is does not, I will open a bug',@b1,'QA'); +SELECT * FROM t14 ORDER BY c1; +c1 c2 c3 c4 c5 +1 1.00 Replication Testing Extra Col b1b1b1b1b1b1b1b1 Kyle +2 2.00 This Test Should work b1b1b1b1b1b1b1b1 JOE +3 3.00 If is does not, I will open a bug b1b1b1b1b1b1b1b1 QA +*** Select on Slave **** +SELECT * FROM t14 ORDER BY c1; +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; +CREATE TABLE t14a (c1 INT KEY, c4 BLOB, c5 CHAR(5), +c6 INT DEFAULT '1', +c7 TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP +)ENGINE='TokuDB'; +*** Create t14a on Master *** +CREATE TABLE t14a (c1 INT PRIMARY KEY, c4 BLOB, c5 CHAR(5) +) ENGINE='TokuDB'; +*** Start Slave *** +include/rpl_reset.inc +*** 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; +*** Master Drop c5 *** +ALTER TABLE t14a DROP COLUMN c5; +*** Start Slave *** +include/rpl_reset.inc +*** 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 +DROP TABLE t14a; +*** connect to master and drop columns *** +ALTER TABLE t14 DROP COLUMN c2; +ALTER TABLE t14 DROP COLUMN c4; +*** Select from Master *** +SELECT * FROM t14 ORDER BY c1; +c1 c3 c5 +1 Replication Testing Extra Col Kyle +2 This Test Should work JOE +3 If is does not, I will open a bug QA +*** Select from Slave *** +SELECT * FROM t14 ORDER BY c1; +c1 c3 c5 c6 c7 +1 Replication Testing Extra Col Kyle 1 CURRENT_TIMESTAMP +2 This Test Should work JOE 1 CURRENT_TIMESTAMP +3 If is does not, I will open a bug QA 1 CURRENT_TIMESTAMP +*** Drop t14 *** +DROP TABLE t14; +*** Create t15 on slave *** +STOP SLAVE; +CREATE TABLE t15 (c1 INT KEY, c2 DECIMAL(8,2), c3 TEXT, +c4 BLOB, c5 CHAR(5), +c6 INT DEFAULT '1', +c7 TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP +)ENGINE='TokuDB'; +*** Create t15 on Master *** +CREATE TABLE t15 (c1 INT PRIMARY KEY, c2 DECIMAL(8,2), c3 TEXT, +c4 BLOB, c5 CHAR(5)) ENGINE='TokuDB'; +*** Start Slave *** +include/rpl_reset.inc +call mtr.add_suppression("Error .Unknown table .t6.. on query.* Error_code: 1051"); +call mtr.add_suppression("Error .Duplicate column name .c6.. on query.* Error_code: 1060"); +call mtr.add_suppression("Table definition on master and slave does not match: Column . ...e mismatch.* Error_code: 1535"); +*** Master Data Insert *** +set @b1 = 'b1b1b1b1'; +set @b1 = concat(@b1,@b1); +INSERT INTO t15 () VALUES(1,1.00,'Replication Testing Extra Col',@b1,'Kyle'), +(2,2.00,'This Test Should work',@b1,'JOE'), +(3,3.00,'If is does not, I will open a bug',@b1,'QA'); +SELECT * FROM t15 ORDER BY c1; +c1 c2 c3 c4 c5 +1 1.00 Replication Testing Extra Col b1b1b1b1b1b1b1b1 Kyle +2 2.00 This Test Should work b1b1b1b1b1b1b1b1 JOE +3 3.00 If is does not, I will open a bug b1b1b1b1b1b1b1b1 QA +*** Select on Slave **** +SELECT * FROM t15 ORDER BY c1; +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 +*** Add column on master that is a Extra on Slave *** +ALTER TABLE t15 ADD COLUMN c6 INT AFTER c5; +******************************************************** +*** Expect slave to fail with Error ER_DUP_FIELDNAME *** +******************************************************** +include/wait_for_slave_sql_error_and_skip.inc [errno=1060] +*** Try to insert in master **** +INSERT INTO t15 () VALUES(5,2.00,'Replication Testing',@b1,'Buda',2); +SELECT * FROM t15 ORDER BY c1; +c1 c2 c3 c4 c5 c6 +1 1.00 Replication Testing Extra Col b1b1b1b1b1b1b1b1 Kyle NULL +2 2.00 This Test Should work b1b1b1b1b1b1b1b1 JOE NULL +3 3.00 If is does not, I will open a bug b1b1b1b1b1b1b1b1 QA NULL +5 2.00 Replication Testing b1b1b1b1b1b1b1b1 Buda 2 +*** Try to select from slave **** +SELECT * FROM t15 ORDER BY c1; +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 *** +STOP SLAVE; +CREATE TABLE t16 (c1 INT KEY, c2 DECIMAL(8,2), c3 TEXT, +c4 BLOB, c5 CHAR(5), +c6 INT DEFAULT '1', +c7 TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP +)ENGINE='TokuDB'; +*** Create t16 on Master *** +CREATE TABLE t16 (c1 INT PRIMARY KEY, c2 DECIMAL(8,2), c3 TEXT, +c4 BLOB, c5 CHAR(5))ENGINE='TokuDB'; +*** Start Slave *** +include/rpl_reset.inc +*** Master Data Insert *** +set @b1 = 'b1b1b1b1'; +set @b1 = concat(@b1,@b1); +INSERT INTO t16 () VALUES(1,1.00,'Replication Testing Extra Col',@b1,'Kyle'), +(2,2.00,'This Test Should work',@b1,'JOE'), +(3,3.00,'If is does not, I will open a bug',@b1,'QA'); +SELECT * FROM t16 ORDER BY c1; +c1 c2 c3 c4 c5 +1 1.00 Replication Testing Extra Col b1b1b1b1b1b1b1b1 Kyle +2 2.00 This Test Should work b1b1b1b1b1b1b1b1 JOE +3 3.00 If is does not, I will open a bug b1b1b1b1b1b1b1b1 QA +*** Select on Slave **** +SELECT * FROM t16 ORDER BY c1; +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 +*** Add Partition on master *** +ALTER TABLE t16 PARTITION BY KEY(c1) PARTITIONS 4; +INSERT INTO t16 () VALUES(4,1.00,'Replication Rocks',@b1,'Omer'); +SHOW CREATE TABLE t16; +Table Create Table +t16 CREATE TABLE `t16` ( + `c1` int(11) NOT NULL, + `c2` decimal(8,2) DEFAULT NULL, + `c3` text, + `c4` blob, + `c5` char(5) DEFAULT NULL, + PRIMARY KEY (`c1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (c1) +PARTITIONS 4 */ +*** Show table on Slave **** +SHOW CREATE TABLE t16; +Table Create Table +t16 CREATE TABLE `t16` ( + `c1` int(11) NOT NULL, + `c2` decimal(8,2) DEFAULT NULL, + `c3` text, + `c4` blob, + `c5` char(5) DEFAULT NULL, + `c6` int(11) DEFAULT '1', + `c7` timestamp NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`c1`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (c1) +PARTITIONS 4 */ +*** DROP TABLE t16 *** +DROP TABLE t16; +*** Alter Master End *** +*** Create t17 on slave *** +STOP SLAVE; +CREATE TABLE t17 (a SMALLINT, b INT PRIMARY KEY, c CHAR(5), +d FLOAT DEFAULT '2.00', +e CHAR(5) DEFAULT 'TEST2') +ENGINE='TokuDB'; +*** Create t17 on Master *** +CREATE TABLE t17 (a BIGINT PRIMARY KEY, b INT, c CHAR(10) +) ENGINE='TokuDB'; +*** Start Slave *** +include/rpl_reset.inc +*** Master Data Insert *** +INSERT INTO t17 () VALUES(9223372036854775807,2,'Kyle, TEX'); +****************************************************************** +*** Expect slave to fail with Error ER_SLAVE_CONVERSION_FAILED *** +****************************************************************** +include/wait_for_slave_sql_error_and_skip.inc [errno=1677] +** DROP table t17 *** +DROP TABLE t17; +include/rpl_end.inc diff --git a/mysql-test/suite/tokudb.rpl/r-native-partitioning/rpl_partition_tokudb.result b/mysql-test/suite/tokudb.rpl/r-native-partitioning/rpl_partition_tokudb.result new file mode 100644 index 000000000000..e8df7d24acfa --- /dev/null +++ b/mysql-test/suite/tokudb.rpl/r-native-partitioning/rpl_partition_tokudb.result @@ -0,0 +1,151 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +use test; +CREATE TABLE test.regular_tbl(id INT NOT NULL AUTO_INCREMENT, +dt TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE +CURRENT_TIMESTAMP, user CHAR(255), uuidf VARBINARY(255), +fkid INT, filler VARCHAR(255), +PRIMARY KEY(id)) +ENGINE=TokuDB; +CREATE TABLE test.byrange_tbl(id INT NOT NULL AUTO_INCREMENT, +dt TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE +CURRENT_TIMESTAMP, user CHAR(255), uuidf VARBINARY(255), +fkid INT, filler VARCHAR(255), +PRIMARY KEY(id)) +ENGINE=TokuDB +PARTITION BY RANGE(id) +(PARTITION pa100 values less than (100), +PARTITION paMax values less than MAXVALUE); +CREATE PROCEDURE test.proc_norm() +BEGIN +DECLARE ins_count INT DEFAULT 99; +DECLARE cur_user VARCHAR(255); +DECLARE local_uuid VARCHAR(255); +SET cur_user= "current_user@localhost"; +SET local_uuid= "36774b1c-6374-11df-a2ca-0ef7ac7a5f6c"; +WHILE ins_count > 0 DO +# Must use local variables for statment based replication +INSERT INTO test.regular_tbl VALUES (NULL, NOW(), cur_user, local_uuid, +ins_count,'Non partitioned table! Going to test replication for MySQL'); +SET ins_count = ins_count - 1; +END WHILE; +END| +CREATE PROCEDURE test.proc_byrange() +BEGIN +DECLARE ins_count INT DEFAULT 200; +DECLARE cur_user VARCHAR(255); +DECLARE local_uuid VARCHAR(255); +SET cur_user= "current_user@localhost"; +SET local_uuid= "36774b1c-6374-11df-a2ca-0ef7ac7a5f6c"; +WHILE ins_count > 0 DO +INSERT INTO test.byrange_tbl VALUES (NULL, NOW(), cur_user, local_uuid, +ins_count + 100,'Partitioned table! Going to test replication for MySQL'); +SET ins_count = ins_count - 1; +END WHILE; +END| +CALL test.proc_norm(); +SELECT count(*) as "Master regular" FROM test.regular_tbl; +Master regular +99 +CALL test.proc_byrange(); +SELECT count(*) as "Master byrange" FROM test.byrange_tbl; +Master byrange +200 +show create table test.byrange_tbl; +Table Create Table +byrange_tbl CREATE TABLE `byrange_tbl` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `dt` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `user` char(255) DEFAULT NULL, + `uuidf` varbinary(255) DEFAULT NULL, + `fkid` int(11) DEFAULT NULL, + `filler` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=TokuDB AUTO_INCREMENT=201 DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (id) +(PARTITION pa100 VALUES LESS THAN (100) ENGINE = TokuDB, + PARTITION paMax VALUES LESS THAN MAXVALUE ENGINE = TokuDB) */ +show create table test.regular_tbl; +Table Create Table +regular_tbl CREATE TABLE `regular_tbl` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `dt` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `user` char(255) DEFAULT NULL, + `uuidf` varbinary(255) DEFAULT NULL, + `fkid` int(11) DEFAULT NULL, + `filler` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=TokuDB AUTO_INCREMENT=100 DEFAULT CHARSET=latin1 +ALTER TABLE test.byrange_tbl EXCHANGE PARTITION pa100 WITH TABLE test.regular_tbl; +SELECT * FROM test.byrange_tbl ORDER BY fkid LIMIT 2; +id dt user uuidf fkid filler +99 date-time USER UUID 1 Non partitioned table! Going to test replication for MySQL +98 date-time USER UUID 2 Non partitioned table! Going to test replication for MySQL +SELECT * FROM test.byrange_tbl ORDER BY fkid DESC LIMIT 2; +id dt user uuidf fkid filler +100 date-time USER UUID 201 Partitioned table! Going to test replication for MySQL +101 date-time USER UUID 200 Partitioned table! Going to test replication for MySQL +SELECT * FROM test.regular_tbl ORDER BY fkid LIMIT 2; +id dt user uuidf fkid filler +99 date-time USER UUID 202 Partitioned table! Going to test replication for MySQL +98 date-time USER UUID 203 Partitioned table! Going to test replication for MySQL +SELECT * FROM test.regular_tbl ORDER BY fkid DESC LIMIT 2; +id dt user uuidf fkid filler +1 date-time USER UUID 300 Partitioned table! Going to test replication for MySQL +2 date-time USER UUID 299 Partitioned table! Going to test replication for MySQL +include/sync_slave_sql_with_master.inc +show create table test.byrange_tbl; +Table Create Table +byrange_tbl CREATE TABLE `byrange_tbl` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `dt` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `user` char(255) DEFAULT NULL, + `uuidf` varbinary(255) DEFAULT NULL, + `fkid` int(11) DEFAULT NULL, + `filler` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=TokuDB AUTO_INCREMENT=201 DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (id) +(PARTITION pa100 VALUES LESS THAN (100) ENGINE = TokuDB, + PARTITION paMax VALUES LESS THAN MAXVALUE ENGINE = TokuDB) */ +show create table test.regular_tbl; +Table Create Table +regular_tbl CREATE TABLE `regular_tbl` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `dt` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `user` char(255) DEFAULT NULL, + `uuidf` varbinary(255) DEFAULT NULL, + `fkid` int(11) DEFAULT NULL, + `filler` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=TokuDB AUTO_INCREMENT=100 DEFAULT CHARSET=latin1 +SELECT count(*) "Slave norm" FROM test.regular_tbl; +Slave norm +99 +SELECT count(*) "Slave byrange" FROM test.byrange_tbl; +Slave byrange +200 +SELECT * FROM test.byrange_tbl ORDER BY fkid LIMIT 2; +id dt user uuidf fkid filler +99 date-time USER UUID 1 Non partitioned table! Going to test replication for MySQL +98 date-time USER UUID 2 Non partitioned table! Going to test replication for MySQL +SELECT * FROM test.byrange_tbl ORDER BY fkid DESC LIMIT 2; +id dt user uuidf fkid filler +100 date-time USER UUID 201 Partitioned table! Going to test replication for MySQL +101 date-time USER UUID 200 Partitioned table! Going to test replication for MySQL +SELECT * FROM test.regular_tbl ORDER BY fkid LIMIT 2; +id dt user uuidf fkid filler +99 date-time USER UUID 202 Partitioned table! Going to test replication for MySQL +98 date-time USER UUID 203 Partitioned table! Going to test replication for MySQL +SELECT * FROM test.regular_tbl ORDER BY fkid DESC LIMIT 2; +id dt user uuidf fkid filler +1 date-time USER UUID 300 Partitioned table! Going to test replication for MySQL +2 date-time USER UUID 299 Partitioned table! Going to test replication for MySQL +DROP PROCEDURE test.proc_norm; +DROP PROCEDURE test.proc_byrange; +DROP TABLE test.regular_tbl; +DROP TABLE test.byrange_tbl; +include/rpl_end.inc diff --git a/mysql-test/suite/tokudb.rpl/r-native-partitioning/rpl_tokudb_bug28430.result b/mysql-test/suite/tokudb.rpl/r-native-partitioning/rpl_tokudb_bug28430.result new file mode 100644 index 000000000000..009c020b496f --- /dev/null +++ b/mysql-test/suite/tokudb.rpl/r-native-partitioning/rpl_tokudb_bug28430.result @@ -0,0 +1,145 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +use test; +CREATE TABLE test.regular_tbl(id MEDIUMINT NOT NULL AUTO_INCREMENT, +dt TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON +UPDATE CURRENT_TIMESTAMP, user CHAR(255), uuidf LONGBLOB, +fkid MEDIUMINT, filler VARCHAR(255), +PRIMARY KEY(id)) ENGINE=TokuDB; +CREATE TABLE test.bykey_tbl(id MEDIUMINT NOT NULL AUTO_INCREMENT, +dt TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE +CURRENT_TIMESTAMP, user CHAR(255), uuidf LONGBLOB, +fkid MEDIUMINT, filler VARCHAR(255), +PRIMARY KEY(id)) ENGINE=TokuDB +PARTITION BY KEY(id) partitions 5; +CREATE TABLE test.byrange_tbl(id MEDIUMINT NOT NULL AUTO_INCREMENT, +dt TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE +CURRENT_TIMESTAMP, user CHAR(255), uuidf LONGBLOB, +fkid MEDIUMINT, filler VARCHAR(255), +PRIMARY KEY(id)) ENGINE=TokuDB +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); +CREATE PROCEDURE test.proc_norm() +BEGIN +DECLARE ins_count INT DEFAULT 1000; +DECLARE del_count INT; +DECLARE cur_user VARCHAR(255); +DECLARE local_uuid VARCHAR(255); +DECLARE local_time TIMESTAMP; +SET local_time= NOW(); +SET cur_user= CURRENT_USER(); +SET local_uuid= UUID(); +WHILE ins_count > 0 DO +INSERT INTO test.regular_tbl VALUES (NULL, NOW(), USER() , UUID(), +ins_count,'Going to test MBR for MySQL'); +SET ins_count = ins_count - 1; +END WHILE; +SELECT MAX(id) FROM test.regular_tbl INTO del_count; +WHILE del_count > 0 DO +DELETE FROM test.regular_tbl WHERE id = del_count; +SET del_count = del_count - 2; +END WHILE; +END| +CREATE PROCEDURE test.proc_bykey() +BEGIN +DECLARE ins_count INT DEFAULT 1000; +DECLARE del_count INT; +DECLARE cur_user VARCHAR(255); +DECLARE local_uuid VARCHAR(255); +DECLARE local_time TIMESTAMP; +SET local_time= NOW(); +SET cur_user= CURRENT_USER(); +SET local_uuid= UUID(); +WHILE ins_count > 0 DO +INSERT INTO test.bykey_tbl VALUES (NULL, NOW(), USER() , UUID(), +ins_count,'Going to test MBR for MySQL'); +SET ins_count = ins_count - 1; +END WHILE; +SELECT MAX(id) FROM test.bykey_tbl INTO del_count; +WHILE del_count > 0 DO +DELETE FROM test.bykey_tbl WHERE id = del_count; +SET del_count = del_count - 2; +END WHILE; +END| +CREATE PROCEDURE test.proc_byrange() +BEGIN +DECLARE ins_count INT DEFAULT 1000; +DECLARE del_count INT; +DECLARE cur_user VARCHAR(255); +DECLARE local_uuid VARCHAR(255); +DECLARE local_time TIMESTAMP; +SET local_time= NOW(); +SET cur_user = CURRENT_USER(); +SET local_uuid=UUID(); +WHILE ins_count > 0 DO +INSERT INTO test.byrange_tbl VALUES (NULL, NOW(), USER(), UUID(), +ins_count,'Going to test MBR for MySQL'); +SET ins_count = ins_count - 1; +END WHILE; +SELECT MAX(id) FROM test.byrange_tbl INTO del_count; +WHILE del_count > 0 DO +DELETE FROM test.byrange_tbl WHERE id = del_count; +SET del_count = del_count - 2; +END WHILE; +END| +CALL test.proc_norm(); +SELECT count(*) as "Master regular" FROM test.regular_tbl; +Master regular 500 +CALL test.proc_bykey(); +SELECT count(*) as "Master bykey" FROM test.bykey_tbl; +Master bykey 500 +CALL test.proc_byrange(); +SELECT count(*) as "Master byrange" FROM test.byrange_tbl; +Master byrange 500 +show create table test.byrange_tbl; +Table byrange_tbl +Create Table CREATE TABLE `byrange_tbl` ( + `id` mediumint(9) NOT NULL AUTO_INCREMENT, + `dt` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `user` char(255) DEFAULT NULL, + `uuidf` longblob, + `fkid` mediumint(9) DEFAULT NULL, + `filler` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=TokuDB AUTO_INCREMENT=1001 DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (id) +SUBPARTITION BY HASH (id) +SUBPARTITIONS 2 +(PARTITION pa1 VALUES LESS THAN (10) ENGINE = TokuDB, + PARTITION pa2 VALUES LESS THAN (20) ENGINE = TokuDB, + PARTITION pa3 VALUES LESS THAN (30) ENGINE = TokuDB, + PARTITION pa4 VALUES LESS THAN (40) ENGINE = TokuDB, + PARTITION pa5 VALUES LESS THAN (50) ENGINE = TokuDB, + PARTITION pa6 VALUES LESS THAN (60) ENGINE = TokuDB, + PARTITION pa7 VALUES LESS THAN (70) ENGINE = TokuDB, + PARTITION pa8 VALUES LESS THAN (80) ENGINE = TokuDB, + PARTITION pa9 VALUES LESS THAN (90) ENGINE = TokuDB, + PARTITION pa10 VALUES LESS THAN (100) ENGINE = TokuDB, + PARTITION pa11 VALUES LESS THAN MAXVALUE ENGINE = TokuDB) */ +SELECT count(*) "Slave norm" FROM test.regular_tbl; +Slave norm 500 +SELECT count(*) "Slave bykey" FROM test.bykey_tbl; +Slave bykey 500 +SELECT count(*) "Slave byrange" FROM test.byrange_tbl; +Slave byrange 500 +DROP PROCEDURE test.proc_norm; +DROP PROCEDURE test.proc_bykey; +DROP PROCEDURE test.proc_byrange; +DROP TABLE test.regular_tbl; +DROP TABLE test.bykey_tbl; +DROP TABLE test.byrange_tbl; +include/rpl_end.inc diff --git a/mysql-test/suite/tokudb.rpl/r-native-partitioning/rpl_tokudb_rfr_partition_table.result b/mysql-test/suite/tokudb.rpl/r-native-partitioning/rpl_tokudb_rfr_partition_table.result new file mode 100644 index 000000000000..4594959c6d0b --- /dev/null +++ b/mysql-test/suite/tokudb.rpl/r-native-partitioning/rpl_tokudb_rfr_partition_table.result @@ -0,0 +1,36 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +call mtr.add_suppression(".*read free replication is disabled for TokuDB table.*continue with rows lookup"); +CREATE TABLE t1 (id int(11) NOT NULL, pid int(11), PRIMARY KEY (id)) ENGINE=TokuDB +PARTITION BY RANGE (id) +(PARTITION p_1 VALUES LESS THAN (10) ENGINE = TokuDB, +PARTITION p_2 VALUES LESS THAN (20) ENGINE = TokuDB, +PARTITION p_all VALUES LESS THAN MAXVALUE ENGINE = TokuDB); +insert into t1 values (1, 1), (2, 2), (3, 3), (11, 11), (12, 12), (13, 13); +CREATE TABLE t2 (id int(11) NOT NULL, pid int(11), key idx_1(id)) ENGINE=TokuDB +PARTITION BY RANGE (id) +(PARTITION p_1 VALUES LESS THAN (10) ENGINE = TokuDB, +PARTITION p_2 VALUES LESS THAN (20) ENGINE = TokuDB, +PARTITION p_all VALUES LESS THAN MAXVALUE ENGINE = TokuDB); +insert into t2 values (1, 1), (2, 2), (3, 3), (11, 11), (12, 12), (13, 13); +include/stop_slave.inc +set global debug= "+d,tokudb_crash_if_rpl_looks_up_row,tokudb_crash_if_rpl_does_uniqueness_check"; +include/start_slave.inc +insert into t1 values(21, 21); +delete from t1 where id = 11; +update t1 set pid = 2 where id = 1; +include/diff_tables.inc [master:test.t1, slave:test.t1] +insert into t2 values(21, 21); +delete from t2 where id = 11; +update t2 set pid = 2 where id = 1; +include/diff_tables.inc [master:test.t2, slave:test.t2] +drop table t1; +drop table t2; +include/stop_slave.inc +set global debug= "-d,tokudb_crash_if_rpl_looks_up_row,tokudb_crash_if_rpl_does_uniqueness_check"; +set global debug= @saved_debug; +include/start_slave.inc +include/rpl_end.inc diff --git a/mysql-test/suite/tokudb.sys_vars/r/tokudb_enable_native_partition.result b/mysql-test/suite/tokudb.sys_vars/r/tokudb_enable_native_partition.result new file mode 100644 index 000000000000..d0425c11d086 --- /dev/null +++ b/mysql-test/suite/tokudb.sys_vars/r/tokudb_enable_native_partition.result @@ -0,0 +1,48 @@ +SELECT COUNT(@@GLOBAL.tokudb_enable_native_partition); +COUNT(@@GLOBAL.tokudb_enable_native_partition) +1 +1 Expected +SELECT @@GLOBAL.tokudb_enable_native_partition; +@@GLOBAL.tokudb_enable_native_partition +0 +0 Expected +SET @@GLOBAL.tokudb_enable_native_partition=1; +ERROR HY000: Variable 'tokudb_enable_native_partition' is a read only variable +Expected error 'Read only variable' +SELECT COUNT(@@GLOBAL.tokudb_enable_native_partition); +COUNT(@@GLOBAL.tokudb_enable_native_partition) +1 +1 Expected +SELECT @@GLOBAL.tokudb_enable_native_partition= VARIABLE_VALUE +FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES +WHERE VARIABLE_NAME='tokudb_enable_native_partition'; +@@GLOBAL.tokudb_enable_native_partition= VARIABLE_VALUE +1 +1 Expected +SELECT COUNT(@@GLOBAL.tokudb_enable_native_partition); +COUNT(@@GLOBAL.tokudb_enable_native_partition) +1 +1 Expected +SELECT COUNT(VARIABLE_VALUE) +FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES +WHERE VARIABLE_NAME='tokudb_enable_native_partition'; +COUNT(VARIABLE_VALUE) +1 +1 Expected +SELECT @@tokudb_enable_native_partition= @@GLOBAL.tokudb_enable_native_partition; +@@tokudb_enable_native_partition= @@GLOBAL.tokudb_enable_native_partition +1 +1 Expected +SELECT COUNT(@@tokudb_enable_native_partition); +COUNT(@@tokudb_enable_native_partition) +1 +1 Expected +SELECT COUNT(@@local.tokudb_enable_native_partition); +ERROR HY000: Variable 'tokudb_enable_native_partition' is a GLOBAL variable +Expected error 'Variable is a GLOBAL variable' +SELECT COUNT(@@SESSION.tokudb_enable_native_partition); +ERROR HY000: Variable 'tokudb_enable_native_partition' is a GLOBAL variable +Expected error 'Variable is a GLOBAL variable' +SELECT tokudb_enable_native_partition= @@SESSION.tokudb_enable_native_partition; +ERROR 42S22: Unknown column 'tokudb_enable_native_partition' in 'field list' +Expected error 'Unknown column' diff --git a/mysql-test/suite/tokudb.sys_vars/t/tokudb_enable_native_partition.test b/mysql-test/suite/tokudb.sys_vars/t/tokudb_enable_native_partition.test new file mode 100644 index 000000000000..b568cb6e5739 --- /dev/null +++ b/mysql-test/suite/tokudb.sys_vars/t/tokudb_enable_native_partition.test @@ -0,0 +1,67 @@ +--source include/have_tokudb.inc + +#################################################################### +# Displaying default value # +#################################################################### +SELECT COUNT(@@GLOBAL.tokudb_enable_native_partition); +--echo 1 Expected + +SELECT @@GLOBAL.tokudb_enable_native_partition; +--echo 0 Expected + +#################################################################### +# Check if Value cannot be set # +#################################################################### + +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +SET @@GLOBAL.tokudb_enable_native_partition=1; +--echo Expected error 'Read only variable' + +SELECT COUNT(@@GLOBAL.tokudb_enable_native_partition); +--echo 1 Expected + +################################################################# +# Check if the value in GLOBAL Table matches value in variable # +################################################################# + +--disable_warnings +SELECT @@GLOBAL.tokudb_enable_native_partition= VARIABLE_VALUE +FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES +WHERE VARIABLE_NAME='tokudb_enable_native_partition'; +--enable_warnings +--echo 1 Expected + +SELECT COUNT(@@GLOBAL.tokudb_enable_native_partition); +--echo 1 Expected + +--disable_warnings +SELECT COUNT(VARIABLE_VALUE) +FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES +WHERE VARIABLE_NAME='tokudb_enable_native_partition'; +--enable_warnings +--echo 1 Expected + +################################################################################ +# Check if accessing variable with and without GLOBAL point to same variable # +################################################################################ +SELECT @@tokudb_enable_native_partition= @@GLOBAL.tokudb_enable_native_partition; +--echo 1 Expected + +################################################################################ +# Check if tokudb_enable_native_partition can be accessed with and without @@ sign # +################################################################################ + +SELECT COUNT(@@tokudb_enable_native_partition); +--echo 1 Expected + +--Error ER_INCORRECT_GLOBAL_LOCAL_VAR +SELECT COUNT(@@local.tokudb_enable_native_partition); +--echo Expected error 'Variable is a GLOBAL variable' + +--Error ER_INCORRECT_GLOBAL_LOCAL_VAR +SELECT COUNT(@@SESSION.tokudb_enable_native_partition); +--echo Expected error 'Variable is a GLOBAL variable' + +--Error ER_BAD_FIELD_ERROR +SELECT tokudb_enable_native_partition= @@SESSION.tokudb_enable_native_partition; +--echo Expected error 'Unknown column' diff --git a/mysql-test/suite/tokudb/combinations b/mysql-test/suite/tokudb/combinations new file mode 100644 index 000000000000..2321bc8d8afb --- /dev/null +++ b/mysql-test/suite/tokudb/combinations @@ -0,0 +1,7 @@ +[non-native-partitioning] +loose-tokudb-enable-native-partition=off + +[native-partitioning] +loose-tokudb-enable-native-partition=on +mtr-result-dir = r-native-partitioning +mtr-tests-list = bug-1657908,cluster_key_part,gap_lock_error,type_temporal_fractional diff --git a/mysql-test/suite/tokudb/r-native-partitioning/bug-1657908.result b/mysql-test/suite/tokudb/r-native-partitioning/bug-1657908.result new file mode 100644 index 000000000000..1d86478d8333 --- /dev/null +++ b/mysql-test/suite/tokudb/r-native-partitioning/bug-1657908.result @@ -0,0 +1,70 @@ +SET GLOBAL tokudb_dir_per_db=ON; +CREATE PROCEDURE create_table() +BEGIN +CREATE TABLE test.t1 ( +a INT +) ENGINE = TokuDB +PARTITION BY RANGE (a) +(PARTITION p100 VALUES LESS THAN (100) ENGINE = TokuDB, +PARTITION p_to_del VALUES LESS THAN (200) ENGINE = TokuDB, +PARTITION p300 VALUES LESS THAN (300) ENGINE = TokuDB, +PARTITION p400 VALUES LESS THAN (400) ENGINE = TokuDB +); +END| +### Create partitioned table +CALL create_table(); +## Looking for *.tokudb files in data_dir +## Looking for *.tokudb files in data_dir/test +t1_P_p100_main_id.tokudb +t1_P_p100_status_id.tokudb +t1_P_p300_main_id.tokudb +t1_P_p300_status_id.tokudb +t1_P_p400_main_id.tokudb +t1_P_p400_status_id.tokudb +t1_P_p_to_del_main_id.tokudb +t1_P_p_to_del_status_id.tokudb +### Stop server +### Remove 'main' file of one of the partitions +### Start server +### Make sure 'main' partition file is deleted +## Looking for *.tokudb files in data_dir +## Looking for *.tokudb files in data_dir/test +t1_P_p100_main_id.tokudb +t1_P_p100_status_id.tokudb +t1_P_p300_main_id.tokudb +t1_P_p300_status_id.tokudb +t1_P_p400_main_id.tokudb +t1_P_p400_status_id.tokudb +t1_P_p_to_del_status_id.tokudb +### Make sure the table still exists +SHOW TABLES; +Tables_in_test +t1 +### Drop table +DROP TABLE t1; +### Make sure the table is dropped +SHOW TABLES; +Tables_in_test +### Check what files still exist after DROP TABLE +## Looking for *.tokudb files in data_dir +## Looking for *.tokudb files in data_dir/test +### Remove the rest of the files +### Make sure there are no tokudb files +## Looking for *.tokudb files in data_dir +## Looking for *.tokudb files in data_dir/test +### Create the same table once more +CALL create_table(); +## Looking for *.tokudb files in data_dir +## Looking for *.tokudb files in data_dir/test +t1_P_p100_main_id.tokudb +t1_P_p100_status_id.tokudb +t1_P_p300_main_id.tokudb +t1_P_p300_status_id.tokudb +t1_P_p400_main_id.tokudb +t1_P_p400_status_id.tokudb +t1_P_p_to_del_main_id.tokudb +t1_P_p_to_del_status_id.tokudb +### Restore state +DROP TABLE t1; +DROP PROCEDURE create_table; +SET GLOBAL tokudb_dir_per_db=default; diff --git a/mysql-test/suite/tokudb/r-native-partitioning/cluster_key_part.result b/mysql-test/suite/tokudb/r-native-partitioning/cluster_key_part.result new file mode 100644 index 000000000000..b16b69af0252 --- /dev/null +++ b/mysql-test/suite/tokudb/r-native-partitioning/cluster_key_part.result @@ -0,0 +1,792 @@ +set default_storage_engine='tokudb'; +DROP TABLE IF EXISTS t; +CREATE TABLE t (a INT NOT NULL AUTO_INCREMENT, b INT, PRIMARY KEY(a), CLUSTERING KEY b(b)) ENGINE=TokuDB +PARTITION BY RANGE(a) (PARTITION p0 VALUES LESS THAN (100) ENGINE = TokuDB, PARTITION p2 VALUES LESS THAN MAXVALUE ENGINE = TokuDB); +SHOW CREATE TABLE t; +Table Create Table +t CREATE TABLE `t` ( + `a` int(11) NOT NULL AUTO_INCREMENT, + `b` int(11) DEFAULT NULL, + PRIMARY KEY (`a`), + CLUSTERING KEY `b` (`b`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (a) +(PARTITION p0 VALUES LESS THAN (100) ENGINE = TokuDB, + PARTITION p2 VALUES LESS THAN MAXVALUE ENGINE = TokuDB) */ +DROP TABLE t; +CREATE TABLE t (x INT NOT NULL, y INT NOT NULL, PRIMARY KEY(x)) +PARTITION BY HASH(x) PARTITIONS 2; +SHOW CREATE TABLE t; +Table Create Table +t CREATE TABLE `t` ( + `x` int(11) NOT NULL, + `y` int(11) NOT NULL, + PRIMARY KEY (`x`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (x) +PARTITIONS 2 */ +ALTER TABLE t ADD CLUSTERING KEY(y); +SHOW CREATE TABLE t; +Table Create Table +t CREATE TABLE `t` ( + `x` int(11) NOT NULL, + `y` int(11) NOT NULL, + PRIMARY KEY (`x`), + CLUSTERING KEY `y` (`y`) +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY HASH (x) +PARTITIONS 2 */ +DROP TABLE t; +CREATE TABLE t1(a INT, b INT, c INT, d INT, PRIMARY KEY(a,b,c), CLUSTERING KEY(b), KEY (c)) ENGINE=TOKUDB +PARTITION BY RANGE(a) (PARTITION p0 VALUES LESS THAN (5) ENGINE = TOKUDB, PARTITION p2 VALUES LESS THAN MAXVALUE ENGINE = TOKUDB); +insert into t1 values (1,10,100,1000),(2,20,200,2000),(3,30,300,3000),(4,40,400,4000),(5,50,500,5000),(6,60,600,6000),(7,70,700,7000),(8,80,800,8000),(9,90,900,9000); +explain select * from t1 where a > 5; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p2 range PRIMARY PRIMARY 4 NULL; 4 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d` from `test`.`t1` where (`test`.`t1`.`a` > 5) +select * from t1 where a > 5; +a b c d +6 60 600 6000 +7 70 700 7000 +8 80 800 8000 +9 90 900 9000 +explain select * from t1 where b > 30; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0,p2 range b b 4 NULL; 2 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d` from `test`.`t1` where (`test`.`t1`.`b` > 30) +select * from t1 where b > 30; +a b c d +4 40 400 4000 +5 50 500 5000 +6 60 600 6000 +7 70 700 7000 +8 80 800 8000 +9 90 900 9000 +explain select * from t1 where c > 750; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0,p2 range c c 4 NULL; 2 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d` from `test`.`t1` where (`test`.`t1`.`c` > 750) +select * from t1 where c > 750; +a b c d +8 80 800 8000 +9 90 900 9000 +explain select a from t1 where a > 8; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p2 range PRIMARY PRIMARY 4 NULL; 1 100.00 Using where; Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a` from `test`.`t1` where (`test`.`t1`.`a` > 8) +select a from t1 where a > 8; +a +9 +explain select a,b from t1 where b > 30; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0,p2 range b b 4 NULL; 2 100.00 Using where; Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t1` where (`test`.`t1`.`b` > 30) +select a,b from t1 where b > 30; +a b +4 40 +5 50 +6 60 +7 70 +8 80 +9 90 +explain select a,b from t1 where c > 750; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0,p2 range c c 4 NULL; 2 100.00 Using where; Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t1` where (`test`.`t1`.`c` > 750) +select a,c from t1 where c > 750; +a c +8 800 +9 900 +alter table t1 add clustering index bdca(b,d,c,a); +insert into t1 values (10,10,10,10); +alter table t1 drop index bdca; +alter table t1 drop primary key; +explain select * from t1 where a > 5; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p2 ALL NULL NULL NULL NULL; 6 33.33 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d` from `test`.`t1` where (`test`.`t1`.`a` > 5) +select * from t1 where a > 5; +a b c d +6 60 600 6000 +7 70 700 7000 +8 80 800 8000 +9 90 900 9000 +10 10 10 10 +explain select * from t1 where b > 30; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0,p2 range b b 4 NULL; 8 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d` from `test`.`t1` where (`test`.`t1`.`b` > 30) +select * from t1 where b > 30; +a b c d +4 40 400 4000 +5 50 500 5000 +6 60 600 6000 +7 70 700 7000 +8 80 800 8000 +9 90 900 9000 +explain select * from t1 where c > 750; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0,p2 range c c 4 NULL; 3 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d` from `test`.`t1` where (`test`.`t1`.`c` > 750) +select * from t1 where c > 750; +a b c d +8 80 800 8000 +9 90 900 9000 +explain select b from t1 where b > 30; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0,p2 range b b 4 NULL; 8 100.00 Using where; Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`b` AS `b` from `test`.`t1` where (`test`.`t1`.`b` > 30) +select b from t1 where b > 30; +b +40 +50 +60 +70 +80 +90 +explain select b from t1 where c > 750; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0,p2 range c c 4 NULL; 3 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`b` AS `b` from `test`.`t1` where (`test`.`t1`.`c` > 750) +select c from t1 where c > 750; +c +800 +900 +alter table t1 add e varchar(20); +alter table t1 add primary key (a,b,c); +explain select * from t1 where a > 5; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p2 range PRIMARY PRIMARY 4 NULL; 5 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t1`.`e` AS `e` from `test`.`t1` where (`test`.`t1`.`a` > 5) +select * from t1 where a > 5; +a b c d e +6 60 600 6000 NULL +7 70 700 7000 NULL +8 80 800 8000 NULL +9 90 900 9000 NULL +10 10 10 10 NULL +explain select * from t1 where b > 30; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0,p2 range b b 4 NULL; 8 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t1`.`e` AS `e` from `test`.`t1` where (`test`.`t1`.`b` > 30) +select * from t1 where b > 30; +a b c d e +4 40 400 4000 NULL +5 50 500 5000 NULL +6 60 600 6000 NULL +7 70 700 7000 NULL +8 80 800 8000 NULL +9 90 900 9000 NULL +explain select * from t1 where c > 750; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0,p2 range c c 4 NULL; 3 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t1`.`e` AS `e` from `test`.`t1` where (`test`.`t1`.`c` > 750) +select * from t1 where c > 750; +a b c d e +8 80 800 8000 NULL +9 90 900 9000 NULL +explain select a from t1 where a > 8; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p2 range PRIMARY PRIMARY 4 NULL; 2 100.00 Using where; Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a` from `test`.`t1` where (`test`.`t1`.`a` > 8) +select a from t1 where a > 8; +a +9 +10 +explain select a,b from t1 where b > 30; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0,p2 range b b 4 NULL; 8 100.00 Using where; Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t1` where (`test`.`t1`.`b` > 30) +select a,b from t1 where b > 30; +a b +4 40 +5 50 +6 60 +7 70 +8 80 +9 90 +explain select a,b from t1 where c > 750; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0,p2 range c c 4 NULL; 3 100.00 Using where; Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t1` where (`test`.`t1`.`c` > 750) +select a,c from t1 where c > 750; +a c +8 800 +9 900 +alter table t1 drop primary key; +explain select * from t1 where a > 5; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p2 ALL NULL NULL NULL NULL; 6 33.33 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t1`.`e` AS `e` from `test`.`t1` where (`test`.`t1`.`a` > 5) +select * from t1 where a > 5; +a b c d e +6 60 600 6000 NULL +7 70 700 7000 NULL +8 80 800 8000 NULL +9 90 900 9000 NULL +10 10 10 10 NULL +explain select * from t1 where b > 30; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0,p2 range b b 4 NULL; 8 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t1`.`e` AS `e` from `test`.`t1` where (`test`.`t1`.`b` > 30) +select * from t1 where b > 30; +a b c d e +4 40 400 4000 NULL +5 50 500 5000 NULL +6 60 600 6000 NULL +7 70 700 7000 NULL +8 80 800 8000 NULL +9 90 900 9000 NULL +explain select * from t1 where c > 750; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0,p2 range c c 4 NULL; 3 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t1`.`e` AS `e` from `test`.`t1` where (`test`.`t1`.`c` > 750) +select * from t1 where c > 750; +a b c d e +8 80 800 8000 NULL +9 90 900 9000 NULL +explain select b from t1 where b > 30; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0,p2 range b b 4 NULL; 8 100.00 Using where; Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`b` AS `b` from `test`.`t1` where (`test`.`t1`.`b` > 30) +select b from t1 where b > 30; +b +40 +50 +60 +70 +80 +90 +explain select b from t1 where c > 750; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0,p2 range c c 4 NULL; 3 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`b` AS `b` from `test`.`t1` where (`test`.`t1`.`c` > 750) +select c from t1 where c > 750; +c +800 +900 +DROP TABLE t1; +CREATE TABLE t1(a INT, b INT, c INT, d INT, PRIMARY KEY(a,b,c), CLUSTERING KEY(b), KEY (c)) ENGINE=TOKUDB +PARTITION BY RANGE(b) (PARTITION p0 VALUES LESS THAN (50) ENGINE = TOKUDB, PARTITION p2 VALUES LESS THAN MAXVALUE ENGINE = TOKUDB); +insert into t1 values (1,10,100,1000),(2,20,200,2000),(3,30,300,3000),(4,40,400,4000),(5,50,500,5000),(6,60,600,6000),(7,70,700,7000),(8,80,800,8000),(9,90,900,9000); +explain select * from t1 where a > 5; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0,p2 range PRIMARY PRIMARY 4 NULL; 2 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d` from `test`.`t1` where (`test`.`t1`.`a` > 5) +select * from t1 where a > 5; +a b c d +6 60 600 6000 +7 70 700 7000 +8 80 800 8000 +9 90 900 9000 +explain select * from t1 where b > 30; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0,p2 range b b 4 NULL; 2 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d` from `test`.`t1` where (`test`.`t1`.`b` > 30) +select * from t1 where b > 30; +a b c d +4 40 400 4000 +5 50 500 5000 +6 60 600 6000 +7 70 700 7000 +8 80 800 8000 +9 90 900 9000 +explain select * from t1 where c > 750; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0,p2 range c c 4 NULL; 2 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d` from `test`.`t1` where (`test`.`t1`.`c` > 750) +select * from t1 where c > 750; +a b c d +8 80 800 8000 +9 90 900 9000 +explain select a from t1 where a > 8; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0,p2 range PRIMARY PRIMARY 4 NULL; 2 100.00 Using where; Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a` from `test`.`t1` where (`test`.`t1`.`a` > 8) +select a from t1 where a > 8; +a +9 +explain select a,b from t1 where b > 30; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0,p2 range b b 4 NULL; 2 100.00 Using where; Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t1` where (`test`.`t1`.`b` > 30) +select a,b from t1 where b > 30; +a b +4 40 +5 50 +6 60 +7 70 +8 80 +9 90 +explain select a,b from t1 where c > 750; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0,p2 range c c 4 NULL; 2 100.00 Using where; Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t1` where (`test`.`t1`.`c` > 750) +select a,c from t1 where c > 750; +a c +8 800 +9 900 +alter table t1 add clustering index bdca(b,d,c,a); +insert into t1 values (10,10,10,10); +alter table t1 drop index bdca; +alter table t1 drop primary key; +explain select * from t1 where a > 5; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0,p2 ALL NULL NULL NULL NULL; 10 33.33 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d` from `test`.`t1` where (`test`.`t1`.`a` > 5) +select * from t1 where a > 5; +a b c d +10 10 10 10 +6 60 600 6000 +7 70 700 7000 +8 80 800 8000 +9 90 900 9000 +explain select * from t1 where b > 30; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0,p2 range b b 4 NULL; 2 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d` from `test`.`t1` where (`test`.`t1`.`b` > 30) +select * from t1 where b > 30; +a b c d +4 40 400 4000 +5 50 500 5000 +6 60 600 6000 +7 70 700 7000 +8 80 800 8000 +9 90 900 9000 +explain select * from t1 where c > 750; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0,p2 range c c 4 NULL; 2 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d` from `test`.`t1` where (`test`.`t1`.`c` > 750) +select * from t1 where c > 750; +a b c d +8 80 800 8000 +9 90 900 9000 +explain select b from t1 where b > 30; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0,p2 range b b 4 NULL; 2 100.00 Using where; Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`b` AS `b` from `test`.`t1` where (`test`.`t1`.`b` > 30) +select b from t1 where b > 30; +b +40 +50 +60 +70 +80 +90 +explain select b from t1 where c > 750; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0,p2 range c c 4 NULL; 2 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`b` AS `b` from `test`.`t1` where (`test`.`t1`.`c` > 750) +select c from t1 where c > 750; +c +800 +900 +alter table t1 add e varchar(20); +alter table t1 add primary key (a,b,c); +explain select * from t1 where a > 5; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0,p2 range PRIMARY PRIMARY 4 NULL; 2 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t1`.`e` AS `e` from `test`.`t1` where (`test`.`t1`.`a` > 5) +select * from t1 where a > 5; +a b c d e +10 10 10 10 NULL +6 60 600 6000 NULL +7 70 700 7000 NULL +8 80 800 8000 NULL +9 90 900 9000 NULL +explain select * from t1 where b > 30; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0,p2 range b b 4 NULL; 2 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t1`.`e` AS `e` from `test`.`t1` where (`test`.`t1`.`b` > 30) +select * from t1 where b > 30; +a b c d e +4 40 400 4000 NULL +5 50 500 5000 NULL +6 60 600 6000 NULL +7 70 700 7000 NULL +8 80 800 8000 NULL +9 90 900 9000 NULL +explain select * from t1 where c > 750; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0,p2 range c c 4 NULL; 2 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t1`.`e` AS `e` from `test`.`t1` where (`test`.`t1`.`c` > 750) +select * from t1 where c > 750; +a b c d e +8 80 800 8000 NULL +9 90 900 9000 NULL +explain select a from t1 where a > 8; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0,p2 range PRIMARY PRIMARY 4 NULL; 2 100.00 Using where; Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a` from `test`.`t1` where (`test`.`t1`.`a` > 8) +select a from t1 where a > 8; +a +10 +9 +explain select a,b from t1 where b > 30; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0,p2 range b b 4 NULL; 2 100.00 Using where; Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t1` where (`test`.`t1`.`b` > 30) +select a,b from t1 where b > 30; +a b +4 40 +5 50 +6 60 +7 70 +8 80 +9 90 +explain select a,b from t1 where c > 750; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0,p2 range c c 4 NULL; 2 100.00 Using where; Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t1` where (`test`.`t1`.`c` > 750) +select a,c from t1 where c > 750; +a c +8 800 +9 900 +alter table t1 drop primary key; +explain select * from t1 where a > 5; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0,p2 ALL NULL NULL NULL NULL; 10 33.33 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t1`.`e` AS `e` from `test`.`t1` where (`test`.`t1`.`a` > 5) +select * from t1 where a > 5; +a b c d e +10 10 10 10 NULL +6 60 600 6000 NULL +7 70 700 7000 NULL +8 80 800 8000 NULL +9 90 900 9000 NULL +explain select * from t1 where b > 30; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0,p2 range b b 4 NULL; 2 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t1`.`e` AS `e` from `test`.`t1` where (`test`.`t1`.`b` > 30) +select * from t1 where b > 30; +a b c d e +4 40 400 4000 NULL +5 50 500 5000 NULL +6 60 600 6000 NULL +7 70 700 7000 NULL +8 80 800 8000 NULL +9 90 900 9000 NULL +explain select * from t1 where c > 750; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0,p2 range c c 4 NULL; 2 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t1`.`e` AS `e` from `test`.`t1` where (`test`.`t1`.`c` > 750) +select * from t1 where c > 750; +a b c d e +8 80 800 8000 NULL +9 90 900 9000 NULL +explain select b from t1 where b > 30; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0,p2 range b b 4 NULL; 2 100.00 Using where; Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`b` AS `b` from `test`.`t1` where (`test`.`t1`.`b` > 30) +select b from t1 where b > 30; +b +40 +50 +60 +70 +80 +90 +explain select b from t1 where c > 750; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0,p2 range c c 4 NULL; 2 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`b` AS `b` from `test`.`t1` where (`test`.`t1`.`c` > 750) +select c from t1 where c > 750; +c +800 +900 +DROP TABLE t1; +CREATE TABLE t1(a INT, b INT, c INT, d INT, PRIMARY KEY(a,b,c), CLUSTERING KEY(b), KEY (c)) ENGINE=TOKUDB +PARTITION BY RANGE(c) (PARTITION p0 VALUES LESS THAN (500) ENGINE = TOKUDB, PARTITION p2 VALUES LESS THAN MAXVALUE ENGINE = TOKUDB); +insert into t1 values (1,10,100,1000),(2,20,200,2000),(3,30,300,3000),(4,40,400,4000),(5,50,500,5000),(6,60,600,6000),(7,70,700,7000),(8,80,800,8000),(9,90,900,9000); +explain select * from t1 where a > 5; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0,p2 range PRIMARY PRIMARY 4 NULL; 2 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d` from `test`.`t1` where (`test`.`t1`.`a` > 5) +select * from t1 where a > 5; +a b c d +6 60 600 6000 +7 70 700 7000 +8 80 800 8000 +9 90 900 9000 +explain select * from t1 where b > 30; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0,p2 range b b 4 NULL; 2 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d` from `test`.`t1` where (`test`.`t1`.`b` > 30) +select * from t1 where b > 30; +a b c d +4 40 400 4000 +5 50 500 5000 +6 60 600 6000 +7 70 700 7000 +8 80 800 8000 +9 90 900 9000 +explain select * from t1 where c > 750; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p2 range c c 4 NULL; 2 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d` from `test`.`t1` where (`test`.`t1`.`c` > 750) +select * from t1 where c > 750; +a b c d +8 80 800 8000 +9 90 900 9000 +explain select a from t1 where a > 8; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0,p2 range PRIMARY PRIMARY 4 NULL; 2 100.00 Using where; Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a` from `test`.`t1` where (`test`.`t1`.`a` > 8) +select a from t1 where a > 8; +a +9 +explain select a,b from t1 where b > 30; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0,p2 range b b 4 NULL; 2 100.00 Using where; Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t1` where (`test`.`t1`.`b` > 30) +select a,b from t1 where b > 30; +a b +4 40 +5 50 +6 60 +7 70 +8 80 +9 90 +explain select a,b from t1 where c > 750; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p2 range c c 4 NULL; 2 100.00 Using where; Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t1` where (`test`.`t1`.`c` > 750) +select a,c from t1 where c > 750; +a c +8 800 +9 900 +alter table t1 add clustering index bdca(b,d,c,a); +insert into t1 values (10,10,10,10); +alter table t1 drop index bdca; +alter table t1 drop primary key; +explain select * from t1 where a > 5; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0,p2 ALL NULL NULL NULL NULL; 10 33.33 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d` from `test`.`t1` where (`test`.`t1`.`a` > 5) +select * from t1 where a > 5; +a b c d +10 10 10 10 +6 60 600 6000 +7 70 700 7000 +8 80 800 8000 +9 90 900 9000 +explain select * from t1 where b > 30; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0,p2 range b b 4 NULL; 2 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d` from `test`.`t1` where (`test`.`t1`.`b` > 30) +select * from t1 where b > 30; +a b c d +4 40 400 4000 +5 50 500 5000 +6 60 600 6000 +7 70 700 7000 +8 80 800 8000 +9 90 900 9000 +explain select * from t1 where c > 750; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p2 range c c 4 NULL; 2 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d` from `test`.`t1` where (`test`.`t1`.`c` > 750) +select * from t1 where c > 750; +a b c d +8 80 800 8000 +9 90 900 9000 +explain select b from t1 where b > 30; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0,p2 range b b 4 NULL; 2 100.00 Using where; Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`b` AS `b` from `test`.`t1` where (`test`.`t1`.`b` > 30) +select b from t1 where b > 30; +b +40 +50 +60 +70 +80 +90 +explain select b from t1 where c > 750; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p2 range c c 4 NULL; 2 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`b` AS `b` from `test`.`t1` where (`test`.`t1`.`c` > 750) +select c from t1 where c > 750; +c +800 +900 +alter table t1 add e varchar(20); +alter table t1 add primary key (a,b,c); +explain select * from t1 where a > 5; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0,p2 range PRIMARY PRIMARY 4 NULL; 2 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t1`.`e` AS `e` from `test`.`t1` where (`test`.`t1`.`a` > 5) +select * from t1 where a > 5; +a b c d e +10 10 10 10 NULL +6 60 600 6000 NULL +7 70 700 7000 NULL +8 80 800 8000 NULL +9 90 900 9000 NULL +explain select * from t1 where b > 30; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0,p2 range b b 4 NULL; 2 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t1`.`e` AS `e` from `test`.`t1` where (`test`.`t1`.`b` > 30) +select * from t1 where b > 30; +a b c d e +4 40 400 4000 NULL +5 50 500 5000 NULL +6 60 600 6000 NULL +7 70 700 7000 NULL +8 80 800 8000 NULL +9 90 900 9000 NULL +explain select * from t1 where c > 750; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p2 range c c 4 NULL; 2 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t1`.`e` AS `e` from `test`.`t1` where (`test`.`t1`.`c` > 750) +select * from t1 where c > 750; +a b c d e +8 80 800 8000 NULL +9 90 900 9000 NULL +explain select a from t1 where a > 8; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0,p2 range PRIMARY PRIMARY 4 NULL; 2 100.00 Using where; Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a` from `test`.`t1` where (`test`.`t1`.`a` > 8) +select a from t1 where a > 8; +a +10 +9 +explain select a,b from t1 where b > 30; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0,p2 range b b 4 NULL; 2 100.00 Using where; Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t1` where (`test`.`t1`.`b` > 30) +select a,b from t1 where b > 30; +a b +4 40 +5 50 +6 60 +7 70 +8 80 +9 90 +explain select a,b from t1 where c > 750; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p2 range c c 4 NULL; 2 100.00 Using where; Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t1` where (`test`.`t1`.`c` > 750) +select a,c from t1 where c > 750; +a c +8 800 +9 900 +alter table t1 drop primary key; +explain select * from t1 where a > 5; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0,p2 ALL NULL NULL NULL NULL; 10 33.33 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t1`.`e` AS `e` from `test`.`t1` where (`test`.`t1`.`a` > 5) +select * from t1 where a > 5; +a b c d e +10 10 10 10 NULL +6 60 600 6000 NULL +7 70 700 7000 NULL +8 80 800 8000 NULL +9 90 900 9000 NULL +explain select * from t1 where b > 30; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0,p2 range b b 4 NULL; 2 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t1`.`e` AS `e` from `test`.`t1` where (`test`.`t1`.`b` > 30) +select * from t1 where b > 30; +a b c d e +4 40 400 4000 NULL +5 50 500 5000 NULL +6 60 600 6000 NULL +7 70 700 7000 NULL +8 80 800 8000 NULL +9 90 900 9000 NULL +explain select * from t1 where c > 750; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p2 range c c 4 NULL; 2 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d`,`test`.`t1`.`e` AS `e` from `test`.`t1` where (`test`.`t1`.`c` > 750) +select * from t1 where c > 750; +a b c d e +8 80 800 8000 NULL +9 90 900 9000 NULL +explain select b from t1 where b > 30; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p0,p2 range b b 4 NULL; 2 100.00 Using where; Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`b` AS `b` from `test`.`t1` where (`test`.`t1`.`b` > 30) +select b from t1 where b > 30; +b +40 +50 +60 +70 +80 +90 +explain select b from t1 where c > 750; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 p2 range c c 4 NULL; 2 100.00 Using where +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`b` AS `b` from `test`.`t1` where (`test`.`t1`.`c` > 750) +select c from t1 where c > 750; +c +800 +900 +DROP TABLE t1; diff --git a/mysql-test/suite/tokudb/r-native-partitioning/gap_lock_error.result b/mysql-test/suite/tokudb/r-native-partitioning/gap_lock_error.result new file mode 100644 index 000000000000..2994280303f6 --- /dev/null +++ b/mysql-test/suite/tokudb/r-native-partitioning/gap_lock_error.result @@ -0,0 +1,469 @@ +CREATE TABLE gap1 (id1 INT, id2 INT, id3 INT, c1 INT, value INT, +PRIMARY KEY (id1, id2, id3), +INDEX i (c1)) ENGINE=tokudb; +CREATE TABLE gap2 like gap1; +CREATE TABLE gap3 (id INT, value INT, +PRIMARY KEY (id), +UNIQUE KEY ui(value)) ENGINE=tokudb; +CREATE TABLE gap4 (id INT, value INT, +PRIMARY KEY (id)) ENGINE=tokudb +PARTITION BY HASH(id) PARTITIONS 2; +insert into gap3 values (1,1), (2,2),(3,3),(4,4),(5,5); +insert into gap4 values (1,1), (2,2),(3,3),(4,4),(5,5); +set session autocommit=0; +select * from gap1 limit 1 for update; +id1 id2 id3 c1 value +0 0 1 1 1 +select * from gap1 where value != 100 limit 1 for update; +id1 id2 id3 c1 value +0 0 1 1 1 +select * from gap1 where id1=1 for update; +id1 id2 id3 c1 value +1 0 2 2 2 +1 0 3 3 3 +select * from gap1 where id1=1 and id2= 1 for update; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2= 1 and id3 != 1 for update; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2= 1 and id3 +between 1 and 3 for update; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2= 1 order by id3 asc +limit 1 for update; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2= 1 order by id3 desc +limit 1 for update; +id1 id2 id3 c1 value +select * from gap1 order by id1 asc limit 1 for update; +id1 id2 id3 c1 value +0 0 1 1 1 +select * from gap1 order by id1 asc, id2 asc, id3 asc limit 1 for update; +id1 id2 id3 c1 value +0 0 1 1 1 +select * from gap1 order by id1 desc limit 1 for update; +id1 id2 id3 c1 value +500 100 1000 1000 1000 +select * from gap1 order by id1 desc, id2 desc, id3 desc +limit 1 for update; +id1 id2 id3 c1 value +500 100 1000 1000 1000 +select * from gap1 force index(i) where c1=1 for update; +id1 id2 id3 c1 value +0 0 1 1 1 +select * from gap3 force index(ui) where value=1 for update; +id value +1 1 +select * from gap1 where id1=1 and id2=1 and id3=1 for update; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2=1 and id3 in (1, 2, 3) for update; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2=1 and id3=1 and value=1 +order by c1 for update; +id1 id2 id3 c1 value +select * from gap3 where id=1 for update; +id value +1 1 +select * from gap4 where id=1 for update; +id value +1 1 +select * from gap4 where id in (1, 2, 3) for update; +id value +1 1 +2 2 +3 3 +select * from gap4 for update; +id value +2 2 +4 4 +1 1 +3 3 +5 5 +select * from gap4 where id between 3 and 7 for update; +id value +4 4 +3 3 +5 5 +set session autocommit=1; +select * from gap1 limit 1 for update; +id1 id2 id3 c1 value +0 0 1 1 1 +select * from gap1 where value != 100 limit 1 for update; +id1 id2 id3 c1 value +0 0 1 1 1 +select * from gap1 where id1=1 for update; +id1 id2 id3 c1 value +1 0 2 2 2 +1 0 3 3 3 +select * from gap1 where id1=1 and id2= 1 for update; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2= 1 and id3 != 1 for update; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2= 1 and id3 +between 1 and 3 for update; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2= 1 order by id3 asc +limit 1 for update; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2= 1 order by id3 desc +limit 1 for update; +id1 id2 id3 c1 value +select * from gap1 order by id1 asc limit 1 for update; +id1 id2 id3 c1 value +0 0 1 1 1 +select * from gap1 order by id1 asc, id2 asc, id3 asc limit 1 for update; +id1 id2 id3 c1 value +0 0 1 1 1 +select * from gap1 order by id1 desc limit 1 for update; +id1 id2 id3 c1 value +500 100 1000 1000 1000 +select * from gap1 order by id1 desc, id2 desc, id3 desc +limit 1 for update; +id1 id2 id3 c1 value +500 100 1000 1000 1000 +select * from gap1 force index(i) where c1=1 for update; +id1 id2 id3 c1 value +0 0 1 1 1 +select * from gap3 force index(ui) where value=1 for update; +id value +1 1 +select * from gap1 where id1=1 and id2=1 and id3=1 for update; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2=1 and id3 in (1, 2, 3) for update; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2=1 and id3=1 and value=1 +order by c1 for update; +id1 id2 id3 c1 value +select * from gap3 where id=1 for update; +id value +1 1 +select * from gap4 where id=1 for update; +id value +1 1 +select * from gap4 where id in (1, 2, 3) for update; +id value +1 1 +2 2 +3 3 +select * from gap4 for update; +id value +2 2 +4 4 +1 1 +3 3 +5 5 +select * from gap4 where id between 3 and 7 for update; +id value +4 4 +3 3 +5 5 +set session autocommit=0; +select * from gap1 limit 1 lock in share mode; +id1 id2 id3 c1 value +0 0 1 1 1 +select * from gap1 where value != 100 limit 1 lock in share mode; +id1 id2 id3 c1 value +0 0 1 1 1 +select * from gap1 where id1=1 lock in share mode; +id1 id2 id3 c1 value +1 0 2 2 2 +1 0 3 3 3 +select * from gap1 where id1=1 and id2= 1 lock in share mode; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2= 1 and id3 != 1 lock in share mode; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2= 1 and id3 +between 1 and 3 lock in share mode; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2= 1 order by id3 asc +limit 1 lock in share mode; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2= 1 order by id3 desc +limit 1 lock in share mode; +id1 id2 id3 c1 value +select * from gap1 order by id1 asc limit 1 lock in share mode; +id1 id2 id3 c1 value +0 0 1 1 1 +select * from gap1 order by id1 asc, id2 asc, id3 asc limit 1 lock in share mode; +id1 id2 id3 c1 value +0 0 1 1 1 +select * from gap1 order by id1 desc limit 1 lock in share mode; +id1 id2 id3 c1 value +500 100 1000 1000 1000 +select * from gap1 order by id1 desc, id2 desc, id3 desc +limit 1 lock in share mode; +id1 id2 id3 c1 value +500 100 1000 1000 1000 +select * from gap1 force index(i) where c1=1 lock in share mode; +id1 id2 id3 c1 value +0 0 1 1 1 +select * from gap3 force index(ui) where value=1 lock in share mode; +id value +1 1 +select * from gap1 where id1=1 and id2=1 and id3=1 lock in share mode; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2=1 and id3 in (1, 2, 3) lock in share mode; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2=1 and id3=1 and value=1 +order by c1 lock in share mode; +id1 id2 id3 c1 value +select * from gap3 where id=1 lock in share mode; +id value +1 1 +select * from gap4 where id=1 lock in share mode; +id value +1 1 +select * from gap4 where id in (1, 2, 3) lock in share mode; +id value +1 1 +2 2 +3 3 +select * from gap4 lock in share mode; +id value +2 2 +4 4 +1 1 +3 3 +5 5 +select * from gap4 where id between 3 and 7 lock in share mode; +id value +4 4 +3 3 +5 5 +set session autocommit=1; +select * from gap1 limit 1 lock in share mode; +id1 id2 id3 c1 value +0 0 1 1 1 +select * from gap1 where value != 100 limit 1 lock in share mode; +id1 id2 id3 c1 value +0 0 1 1 1 +select * from gap1 where id1=1 lock in share mode; +id1 id2 id3 c1 value +1 0 2 2 2 +1 0 3 3 3 +select * from gap1 where id1=1 and id2= 1 lock in share mode; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2= 1 and id3 != 1 lock in share mode; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2= 1 and id3 +between 1 and 3 lock in share mode; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2= 1 order by id3 asc +limit 1 lock in share mode; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2= 1 order by id3 desc +limit 1 lock in share mode; +id1 id2 id3 c1 value +select * from gap1 order by id1 asc limit 1 lock in share mode; +id1 id2 id3 c1 value +0 0 1 1 1 +select * from gap1 order by id1 asc, id2 asc, id3 asc limit 1 lock in share mode; +id1 id2 id3 c1 value +0 0 1 1 1 +select * from gap1 order by id1 desc limit 1 lock in share mode; +id1 id2 id3 c1 value +500 100 1000 1000 1000 +select * from gap1 order by id1 desc, id2 desc, id3 desc +limit 1 lock in share mode; +id1 id2 id3 c1 value +500 100 1000 1000 1000 +select * from gap1 force index(i) where c1=1 lock in share mode; +id1 id2 id3 c1 value +0 0 1 1 1 +select * from gap3 force index(ui) where value=1 lock in share mode; +id value +1 1 +select * from gap1 where id1=1 and id2=1 and id3=1 lock in share mode; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2=1 and id3 in (1, 2, 3) lock in share mode; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2=1 and id3=1 and value=1 +order by c1 lock in share mode; +id1 id2 id3 c1 value +select * from gap3 where id=1 lock in share mode; +id value +1 1 +select * from gap4 where id=1 lock in share mode; +id value +1 1 +select * from gap4 where id in (1, 2, 3) lock in share mode; +id value +1 1 +2 2 +3 3 +select * from gap4 lock in share mode; +id value +2 2 +4 4 +1 1 +3 3 +5 5 +select * from gap4 where id between 3 and 7 lock in share mode; +id value +4 4 +3 3 +5 5 +set session autocommit=0; +select * from gap1 limit 1 ; +id1 id2 id3 c1 value +0 0 1 1 1 +select * from gap1 where value != 100 limit 1 ; +id1 id2 id3 c1 value +0 0 1 1 1 +select * from gap1 where id1=1 ; +id1 id2 id3 c1 value +1 0 2 2 2 +1 0 3 3 3 +select * from gap1 where id1=1 and id2= 1 ; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2= 1 and id3 != 1 ; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2= 1 and id3 +between 1 and 3 ; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2= 1 order by id3 asc +limit 1 ; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2= 1 order by id3 desc +limit 1 ; +id1 id2 id3 c1 value +select * from gap1 order by id1 asc limit 1 ; +id1 id2 id3 c1 value +0 0 1 1 1 +select * from gap1 order by id1 asc, id2 asc, id3 asc limit 1 ; +id1 id2 id3 c1 value +0 0 1 1 1 +select * from gap1 order by id1 desc limit 1 ; +id1 id2 id3 c1 value +500 100 1000 1000 1000 +select * from gap1 order by id1 desc, id2 desc, id3 desc +limit 1 ; +id1 id2 id3 c1 value +500 100 1000 1000 1000 +select * from gap1 force index(i) where c1=1 ; +id1 id2 id3 c1 value +0 0 1 1 1 +select * from gap3 force index(ui) where value=1 ; +id value +1 1 +select * from gap1 where id1=1 and id2=1 and id3=1 ; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2=1 and id3 in (1, 2, 3) ; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2=1 and id3=1 and value=1 +order by c1 ; +id1 id2 id3 c1 value +select * from gap3 where id=1 ; +id value +1 1 +select * from gap4 where id=1 ; +id value +1 1 +select * from gap4 where id in (1, 2, 3) ; +id value +1 1 +2 2 +3 3 +select * from gap4 ; +id value +2 2 +4 4 +1 1 +3 3 +5 5 +select * from gap4 where id between 3 and 7 ; +id value +4 4 +3 3 +5 5 +set session autocommit=1; +select * from gap1 limit 1 ; +id1 id2 id3 c1 value +0 0 1 1 1 +select * from gap1 where value != 100 limit 1 ; +id1 id2 id3 c1 value +0 0 1 1 1 +select * from gap1 where id1=1 ; +id1 id2 id3 c1 value +1 0 2 2 2 +1 0 3 3 3 +select * from gap1 where id1=1 and id2= 1 ; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2= 1 and id3 != 1 ; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2= 1 and id3 +between 1 and 3 ; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2= 1 order by id3 asc +limit 1 ; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2= 1 order by id3 desc +limit 1 ; +id1 id2 id3 c1 value +select * from gap1 order by id1 asc limit 1 ; +id1 id2 id3 c1 value +0 0 1 1 1 +select * from gap1 order by id1 asc, id2 asc, id3 asc limit 1 ; +id1 id2 id3 c1 value +0 0 1 1 1 +select * from gap1 order by id1 desc limit 1 ; +id1 id2 id3 c1 value +500 100 1000 1000 1000 +select * from gap1 order by id1 desc, id2 desc, id3 desc +limit 1 ; +id1 id2 id3 c1 value +500 100 1000 1000 1000 +select * from gap1 force index(i) where c1=1 ; +id1 id2 id3 c1 value +0 0 1 1 1 +select * from gap3 force index(ui) where value=1 ; +id value +1 1 +select * from gap1 where id1=1 and id2=1 and id3=1 ; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2=1 and id3 in (1, 2, 3) ; +id1 id2 id3 c1 value +select * from gap1 where id1=1 and id2=1 and id3=1 and value=1 +order by c1 ; +id1 id2 id3 c1 value +select * from gap3 where id=1 ; +id value +1 1 +select * from gap4 where id=1 ; +id value +1 1 +select * from gap4 where id in (1, 2, 3) ; +id value +1 1 +2 2 +3 3 +select * from gap4 ; +id value +2 2 +4 4 +1 1 +3 3 +5 5 +select * from gap4 where id between 3 and 7 ; +id value +4 4 +3 3 +5 5 +set session autocommit=0; +insert into gap1 (id1, id2, id3) values (-1,-1,-1); +insert into gap1 (id1, id2, id3) values (-1,-1,-1) +on duplicate key update value=100; +update gap1 set value=100 where id1=1; +update gap1 set value=100 where id1=1 and id2=1 and id3=1; +delete from gap1 where id1=2; +delete from gap1 where id1=-1 and id2=-1 and id3=-1; +commit; +set session autocommit=1; +insert into gap1 (id1, id2, id3) values (-1,-1,-1); +insert into gap1 (id1, id2, id3) values (-1,-1,-1) +on duplicate key update value=100; +update gap1 set value=100 where id1=1; +update gap1 set value=100 where id1=1 and id2=1 and id3=1; +delete from gap1 where id1=2; +delete from gap1 where id1=-1 and id2=-1 and id3=-1; +commit; +drop table gap1, gap2, gap3, gap4; diff --git a/mysql-test/suite/tokudb/r-native-partitioning/type_temporal_fractional.result b/mysql-test/suite/tokudb/r-native-partitioning/type_temporal_fractional.result new file mode 100644 index 000000000000..b980c9165d4a --- /dev/null +++ b/mysql-test/suite/tokudb/r-native-partitioning/type_temporal_fractional.result @@ -0,0 +1,16798 @@ +set default_storage_engine='tokudb'; +DROP TABLE IF EXISTS t1, t2; +SET NAMES latin1; +# +# Testing functions CURRENT_TIME and CURRENT_TIMESTAMP +# +SELECT CURRENT_TIME(6) RLIKE '^[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{6}$'; +CURRENT_TIME(6) RLIKE '^[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{6}$' +1 +SELECT CURRENT_TIMESTAMP(6) RLIKE '^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{6}$'; +CURRENT_TIMESTAMP(6) RLIKE '^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{6}$' +1 +SELECT LEFT(CURRENT_TIME(6), 8) = CONCAT(CURRENT_TIME); +LEFT(CURRENT_TIME(6), 8) = CONCAT(CURRENT_TIME) +1 +SELECT LEFT(CURRENT_TIMESTAMP(6), 8) = CONCAT(CURRENT_TIMESTAMP); +LEFT(CURRENT_TIMESTAMP(6), 8) = CONCAT(CURRENT_TIMESTAMP) +0 +SELECT RIGHT(CURRENT_TIME(6), 7) = RIGHT(CURRENT_TIMESTAMP(6), 7); +RIGHT(CURRENT_TIME(6), 7) = RIGHT(CURRENT_TIMESTAMP(6), 7) +1 +SELECT CURRENT_TIMESTAMP(6)=TIMESTAMP(CURRENT_DATE, CURRENT_TIME(6)); +CURRENT_TIMESTAMP(6)=TIMESTAMP(CURRENT_DATE, CURRENT_TIME(6)) +1 +SELECT CURRENT_TIMESTAMP(6)=NOW(6); +CURRENT_TIMESTAMP(6)=NOW(6) +1 +SELECT CURRENT_TIMESTAMP(6)=LOCALTIME(6); +CURRENT_TIMESTAMP(6)=LOCALTIME(6) +1 +SELECT CURRENT_TIMESTAMP(6)=LOCALTIMESTAMP(6); +CURRENT_TIMESTAMP(6)=LOCALTIMESTAMP(6) +1 +SELECT CURRENT_TIMESTAMP(6)<=SYSDATE(6); +CURRENT_TIMESTAMP(6)<=SYSDATE(6) +1 +SELECT CURRENT_TIMESTAMP(6)<=SYSDATE(6) + 0; +CURRENT_TIMESTAMP(6)<=SYSDATE(6) + 0 +1 +SELECT MICROSECOND(CURRENT_TIME(6))=MICROSECOND(UTC_TIME(6)); +MICROSECOND(CURRENT_TIME(6))=MICROSECOND(UTC_TIME(6)) +1 +SELECT MICROSECOND(CURRENT_TIMESTAMP(6))=MICROSECOND(UTC_TIMESTAMP(6)); +MICROSECOND(CURRENT_TIMESTAMP(6))=MICROSECOND(UTC_TIMESTAMP(6)) +1 +CREATE TABLE t1 AS +SELECT +CONCAT(CURRENT_TIME()), CONCAT(CURRENT_TIME(6)), +CONCAT(UTC_TIME()), CONCAT(UTC_TIME(6)), +CONCAT(CURRENT_TIMESTAMP()), CONCAT(CURRENT_TIMESTAMP(6)), +CONCAT(UTC_TIMESTAMP()), CONCAT(UTC_TIMESTAMP(6)), +CONCAT(LOCALTIME()), CONCAT(LOCALTIME(6)), +CONCAT(LOCALTIMESTAMP()), CONCAT(LOCALTIMESTAMP(6)), +CONCAT(SYSDATE()), CONCAT(SYSDATE(6)); +DESCRIBE t1; +Field Type Null Key Default Extra +CONCAT(CURRENT_TIME()) varchar(8) YES NULL +CONCAT(CURRENT_TIME(6)) varchar(15) YES NULL +CONCAT(UTC_TIME()) varchar(8) YES NULL +CONCAT(UTC_TIME(6)) varchar(15) YES NULL +CONCAT(CURRENT_TIMESTAMP()) varchar(19) YES NULL +CONCAT(CURRENT_TIMESTAMP(6)) varchar(26) YES NULL +CONCAT(UTC_TIMESTAMP()) varchar(19) YES NULL +CONCAT(UTC_TIMESTAMP(6)) varchar(26) YES NULL +CONCAT(LOCALTIME()) varchar(19) YES NULL +CONCAT(LOCALTIME(6)) varchar(26) YES NULL +CONCAT(LOCALTIMESTAMP()) varchar(19) YES NULL +CONCAT(LOCALTIMESTAMP(6)) varchar(26) YES NULL +CONCAT(SYSDATE()) varchar(19) YES NULL +CONCAT(SYSDATE(6)) varchar(26) YES NULL +DROP TABLE t1; +CREATE TABLE t1 AS SELECT +NOW(0), NOW(1), NOW(2), NOW(3), NOW(4), NOW(5), NOW(6); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `NOW(0)` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `NOW(1)` datetime(1) NOT NULL DEFAULT '0000-00-00 00:00:00.0', + `NOW(2)` datetime(2) NOT NULL DEFAULT '0000-00-00 00:00:00.00', + `NOW(3)` datetime(3) NOT NULL DEFAULT '0000-00-00 00:00:00.000', + `NOW(4)` datetime(4) NOT NULL DEFAULT '0000-00-00 00:00:00.0000', + `NOW(5)` datetime(5) NOT NULL DEFAULT '0000-00-00 00:00:00.00000', + `NOW(6)` datetime(6) NOT NULL DEFAULT '0000-00-00 00:00:00.000000' +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT +SYSDATE(0), +SYSDATE(1), SYSDATE(2), SYSDATE(3), +SYSDATE(4), SYSDATE(5), SYSDATE(6); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `SYSDATE(0)` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `SYSDATE(1)` datetime(1) NOT NULL DEFAULT '0000-00-00 00:00:00.0', + `SYSDATE(2)` datetime(2) NOT NULL DEFAULT '0000-00-00 00:00:00.00', + `SYSDATE(3)` datetime(3) NOT NULL DEFAULT '0000-00-00 00:00:00.000', + `SYSDATE(4)` datetime(4) NOT NULL DEFAULT '0000-00-00 00:00:00.0000', + `SYSDATE(5)` datetime(5) NOT NULL DEFAULT '0000-00-00 00:00:00.00000', + `SYSDATE(6)` datetime(6) NOT NULL DEFAULT '0000-00-00 00:00:00.000000' +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT +FROM_UNIXTIME(1), +FROM_UNIXTIME(1.1), FROM_UNIXTIME(1.12), FROM_UNIXTIME(1.123), +FROM_UNIXTIME(1.1234), FROM_UNIXTIME(1.12345), FROM_UNIXTIME(1.123456), +FROM_UNIXTIME(1.1234567); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `FROM_UNIXTIME(1)` datetime DEFAULT NULL, + `FROM_UNIXTIME(1.1)` datetime(1) DEFAULT NULL, + `FROM_UNIXTIME(1.12)` datetime(2) DEFAULT NULL, + `FROM_UNIXTIME(1.123)` datetime(3) DEFAULT NULL, + `FROM_UNIXTIME(1.1234)` datetime(4) DEFAULT NULL, + `FROM_UNIXTIME(1.12345)` datetime(5) DEFAULT NULL, + `FROM_UNIXTIME(1.123456)` datetime(6) DEFAULT NULL, + `FROM_UNIXTIME(1.1234567)` datetime(6) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t1; +# +# Testing rounding from VARCHAR and TIME(6) to TIME(N) +# +CREATE TABLE t1 (a VARCHAR(32), +t6 TIME(6), t5 TIME(5), t4 TIME(4), +t3 TIME(3), t2 TIME(2), t1 TIME(1), +t0 TIME); +INSERT INTO t1 (a) VALUES ('10:10:10.999999'); +INSERT INTO t1 (a) VALUES ('10:10:10.999994'); +INSERT INTO t1 (a) VALUES ('10:10:10.999949'); +INSERT INTO t1 (a) VALUES ('10:10:10.999499'); +INSERT INTO t1 (a) VALUES ('10:10:10.994999'); +INSERT INTO t1 (a) VALUES ('10:10:10.949999'); +INSERT INTO t1 (a) VALUES ('10:10:10.499999'); +UPDATE t1 SET t0=a, t1=a, t2=a, t3=a, t4=a, t5=a, t6=a; +SELECT * FROM t1;; +a 10:10:10.999999 +t6 10:10:10.999999 +t5 10:10:11.00000 +t4 10:10:11.0000 +t3 10:10:11.000 +t2 10:10:11.00 +t1 10:10:11.0 +t0 10:10:11 +a 10:10:10.999994 +t6 10:10:10.999994 +t5 10:10:10.99999 +t4 10:10:11.0000 +t3 10:10:11.000 +t2 10:10:11.00 +t1 10:10:11.0 +t0 10:10:11 +a 10:10:10.999949 +t6 10:10:10.999949 +t5 10:10:10.99995 +t4 10:10:10.9999 +t3 10:10:11.000 +t2 10:10:11.00 +t1 10:10:11.0 +t0 10:10:11 +a 10:10:10.999499 +t6 10:10:10.999499 +t5 10:10:10.99950 +t4 10:10:10.9995 +t3 10:10:10.999 +t2 10:10:11.00 +t1 10:10:11.0 +t0 10:10:11 +a 10:10:10.994999 +t6 10:10:10.994999 +t5 10:10:10.99500 +t4 10:10:10.9950 +t3 10:10:10.995 +t2 10:10:10.99 +t1 10:10:11.0 +t0 10:10:11 +a 10:10:10.949999 +t6 10:10:10.949999 +t5 10:10:10.95000 +t4 10:10:10.9500 +t3 10:10:10.950 +t2 10:10:10.95 +t1 10:10:10.9 +t0 10:10:11 +a 10:10:10.499999 +t6 10:10:10.499999 +t5 10:10:10.50000 +t4 10:10:10.5000 +t3 10:10:10.500 +t2 10:10:10.50 +t1 10:10:10.5 +t0 10:10:10 +ALTER TABLE t1 MODIFY a TIME(6); +UPDATE t1 SET t0=a, t1=a, t2=a, t3=a, t4=a, t5=a, t6=a; +SELECT * FROM t1;; +a 10:10:10.999999 +t6 10:10:10.999999 +t5 10:10:11.00000 +t4 10:10:11.0000 +t3 10:10:11.000 +t2 10:10:11.00 +t1 10:10:11.0 +t0 10:10:11 +a 10:10:10.999994 +t6 10:10:10.999994 +t5 10:10:10.99999 +t4 10:10:11.0000 +t3 10:10:11.000 +t2 10:10:11.00 +t1 10:10:11.0 +t0 10:10:11 +a 10:10:10.999949 +t6 10:10:10.999949 +t5 10:10:10.99995 +t4 10:10:10.9999 +t3 10:10:11.000 +t2 10:10:11.00 +t1 10:10:11.0 +t0 10:10:11 +a 10:10:10.999499 +t6 10:10:10.999499 +t5 10:10:10.99950 +t4 10:10:10.9995 +t3 10:10:10.999 +t2 10:10:11.00 +t1 10:10:11.0 +t0 10:10:11 +a 10:10:10.994999 +t6 10:10:10.994999 +t5 10:10:10.99500 +t4 10:10:10.9950 +t3 10:10:10.995 +t2 10:10:10.99 +t1 10:10:11.0 +t0 10:10:11 +a 10:10:10.949999 +t6 10:10:10.949999 +t5 10:10:10.95000 +t4 10:10:10.9500 +t3 10:10:10.950 +t2 10:10:10.95 +t1 10:10:10.9 +t0 10:10:11 +a 10:10:10.499999 +t6 10:10:10.499999 +t5 10:10:10.50000 +t4 10:10:10.5000 +t3 10:10:10.500 +t2 10:10:10.50 +t1 10:10:10.5 +t0 10:10:10 +DROP TABLE t1; +# +# Testing rounding from TIME(N) to INT +# +CREATE TABLE t1 (a INT, b TIME(6)); +INSERT INTO t1 (b) VALUES ('10:10:59.500000'); +INSERT INTO t1 (b) VALUES ('10:10:10.500000'); +INSERT INTO t1 (b) VALUES ('10:10:10.499999'); +INSERT INTO t1 (b) VALUES ('-10:10:59.500000'); +INSERT INTO t1 (b) VALUES ('-10:10:10.500000'); +INSERT INTO t1 (b) VALUES ('-10:10:10.499999'); +UPDATE t1 SET a=b; +SELECT * FROM t1; +a b +101100 10:10:59.500000 +101011 10:10:10.500000 +101010 10:10:10.499999 +-101100 -10:10:59.500000 +-101011 -10:10:10.500000 +-101010 -10:10:10.499999 +DROP TABLE t1; +CREATE TABLE t1 (a INT); +INSERT INTO t1 VALUES (TIME'01:59:59.499999'); +INSERT INTO t1 VALUES (TIME'01:59:59.500000'); +SELECT * FROM t1; +a +15959 +20000 +DROP TABLE t1; +# +# Inserting TIME into a REAL column +# +CREATE TABLE t1 (a REAL); +INSERT INTO t1 VALUES (TIME'01:02:03.123'); +SELECT * FROM t1; +a +10203.123 +DROP TABLE t1; +# +# Testing rounding when altering TIME(N) to a smaller size +# +CREATE TABLE t1 (a TIME(6)); +INSERT INTO t1 VALUES ('10:10:10.999999'); +ALTER TABLE t1 MODIFY a TIME(5); +SELECT * FROM t1; +a +10:10:10.99999 +DROP TABLE t1; +CREATE TABLE t1 (a TIME(6)); +INSERT INTO t1 VALUES ('10:10:10.999999'); +ALTER TABLE t1 MODIFY a TIME; +SELECT * FROM t1; +a +10:10:11 +DROP TABLE t1; +# +# Testing rounding from DATETIME(6) to TIME(N) +# +CREATE TABLE t1 (a DATETIME(6), +t6 TIME(6), t5 TIME(5), t4 TIME(4), +t3 TIME(3), t2 TIME(2), t1 TIME(1), +t0 TIME); +INSERT INTO t1 (a) VALUES ('2001-01-01 10:10:10.999999'); +INSERT INTO t1 (a) VALUES ('2001-01-01 10:10:10.999994'); +INSERT INTO t1 (a) VALUES ('2001-01-01 10:10:10.999949'); +INSERT INTO t1 (a) VALUES ('2001-01-01 10:10:10.999499'); +INSERT INTO t1 (a) VALUES ('2001-01-01 10:10:10.994999'); +INSERT INTO t1 (a) VALUES ('2001-01-01 10:10:10.949999'); +INSERT INTO t1 (a) VALUES ('2001-01-01 10:10:10.499999'); +UPDATE t1 SET t0=a, t1=a, t2=a, t3=a, t4=a, t5=a, t6=a; +SELECT * FROM t1;; +a 2001-01-01 10:10:10.999999 +t6 10:10:10.999999 +t5 10:10:11.00000 +t4 10:10:11.0000 +t3 10:10:11.000 +t2 10:10:11.00 +t1 10:10:11.0 +t0 10:10:11 +a 2001-01-01 10:10:10.999994 +t6 10:10:10.999994 +t5 10:10:10.99999 +t4 10:10:11.0000 +t3 10:10:11.000 +t2 10:10:11.00 +t1 10:10:11.0 +t0 10:10:11 +a 2001-01-01 10:10:10.999949 +t6 10:10:10.999949 +t5 10:10:10.99995 +t4 10:10:10.9999 +t3 10:10:11.000 +t2 10:10:11.00 +t1 10:10:11.0 +t0 10:10:11 +a 2001-01-01 10:10:10.999499 +t6 10:10:10.999499 +t5 10:10:10.99950 +t4 10:10:10.9995 +t3 10:10:10.999 +t2 10:10:11.00 +t1 10:10:11.0 +t0 10:10:11 +a 2001-01-01 10:10:10.994999 +t6 10:10:10.994999 +t5 10:10:10.99500 +t4 10:10:10.9950 +t3 10:10:10.995 +t2 10:10:10.99 +t1 10:10:11.0 +t0 10:10:11 +a 2001-01-01 10:10:10.949999 +t6 10:10:10.949999 +t5 10:10:10.95000 +t4 10:10:10.9500 +t3 10:10:10.950 +t2 10:10:10.95 +t1 10:10:10.9 +t0 10:10:11 +a 2001-01-01 10:10:10.499999 +t6 10:10:10.499999 +t5 10:10:10.50000 +t4 10:10:10.5000 +t3 10:10:10.500 +t2 10:10:10.50 +t1 10:10:10.5 +t0 10:10:10 +DROP TABLE t1; +# +# Testing rounding from DECIMAL and DOUBLE to TIME(N) +# +CREATE TABLE t1 (a DECIMAL(30,6), +t6 TIME(6), t5 TIME(5), t4 TIME(4), +t3 TIME(3), t2 TIME(2), t1 TIME(1), +t0 TIME); +INSERT INTO t1 (a) VALUES (101010.999999); +INSERT INTO t1 (a) VALUES (101010.999994); +INSERT INTO t1 (a) VALUES (101010.999949); +INSERT INTO t1 (a) VALUES (101010.999499); +INSERT INTO t1 (a) VALUES (101010.994999); +INSERT INTO t1 (a) VALUES (101010.949999); +INSERT INTO t1 (a) VALUES (101010.499999); +UPDATE t1 SET t0=a, t1=a, t2=a, t3=a, t4=a, t5=a, t6=a; +SELECT * FROM t1;; +a 101010.999999 +t6 10:10:10.999999 +t5 10:10:11.00000 +t4 10:10:11.0000 +t3 10:10:11.000 +t2 10:10:11.00 +t1 10:10:11.0 +t0 10:10:11 +a 101010.999994 +t6 10:10:10.999994 +t5 10:10:10.99999 +t4 10:10:11.0000 +t3 10:10:11.000 +t2 10:10:11.00 +t1 10:10:11.0 +t0 10:10:11 +a 101010.999949 +t6 10:10:10.999949 +t5 10:10:10.99995 +t4 10:10:10.9999 +t3 10:10:11.000 +t2 10:10:11.00 +t1 10:10:11.0 +t0 10:10:11 +a 101010.999499 +t6 10:10:10.999499 +t5 10:10:10.99950 +t4 10:10:10.9995 +t3 10:10:10.999 +t2 10:10:11.00 +t1 10:10:11.0 +t0 10:10:11 +a 101010.994999 +t6 10:10:10.994999 +t5 10:10:10.99500 +t4 10:10:10.9950 +t3 10:10:10.995 +t2 10:10:10.99 +t1 10:10:11.0 +t0 10:10:11 +a 101010.949999 +t6 10:10:10.949999 +t5 10:10:10.95000 +t4 10:10:10.9500 +t3 10:10:10.950 +t2 10:10:10.95 +t1 10:10:10.9 +t0 10:10:11 +a 101010.499999 +t6 10:10:10.499999 +t5 10:10:10.50000 +t4 10:10:10.5000 +t3 10:10:10.500 +t2 10:10:10.50 +t1 10:10:10.5 +t0 10:10:10 +ALTER TABLE t1 MODIFY a DOUBLE; +UPDATE t1 SET t0=a, t1=a, t2=a, t3=a, t4=a, t5=a, t6=a; +SELECT * FROM t1;; +a 101010.999999 +t6 10:10:10.999999 +t5 10:10:11.00000 +t4 10:10:11.0000 +t3 10:10:11.000 +t2 10:10:11.00 +t1 10:10:11.0 +t0 10:10:11 +a 101010.999994 +t6 10:10:10.999994 +t5 10:10:10.99999 +t4 10:10:11.0000 +t3 10:10:11.000 +t2 10:10:11.00 +t1 10:10:11.0 +t0 10:10:11 +a 101010.999949 +t6 10:10:10.999949 +t5 10:10:10.99995 +t4 10:10:10.9999 +t3 10:10:11.000 +t2 10:10:11.00 +t1 10:10:11.0 +t0 10:10:11 +a 101010.999499 +t6 10:10:10.999499 +t5 10:10:10.99950 +t4 10:10:10.9995 +t3 10:10:10.999 +t2 10:10:11.00 +t1 10:10:11.0 +t0 10:10:11 +a 101010.994999 +t6 10:10:10.994999 +t5 10:10:10.99500 +t4 10:10:10.9950 +t3 10:10:10.995 +t2 10:10:10.99 +t1 10:10:11.0 +t0 10:10:11 +a 101010.949999 +t6 10:10:10.949999 +t5 10:10:10.95000 +t4 10:10:10.9500 +t3 10:10:10.950 +t2 10:10:10.95 +t1 10:10:10.9 +t0 10:10:11 +a 101010.499999 +t6 10:10:10.499999 +t5 10:10:10.50000 +t4 10:10:10.5000 +t3 10:10:10.500 +t2 10:10:10.50 +t1 10:10:10.5 +t0 10:10:10 +DROP TABLE t1; +# +# Testing rounding when casting from DECIMAL to TIME(N) +# +CREATE TABLE t1 (a DECIMAL(23,4)); +INSERT INTO t1 VALUES (NULL),(101010.9999),(-101010.9999); +INSERT INTO t1 VALUES (9999999999999999999999.1); +ERROR 22003: Out of range value for column 'a' at row 1 +INSERT INTO t1 VALUES (999999.1); +SELECT a, CAST(a AS TIME(3)) FROM t1; +a CAST(a AS TIME(3)) +NULL NULL +101010.9999 10:10:11.000 +-101010.9999 -10:10:11.000 +999999.1000 NULL +Warnings: +Warning 1292 Truncated incorrect time value: '999999.1000' +DROP TABLE t1; +# +# Testing that CAST converts days to hours, while EXTRACT/HOUR do not +# +SELECT CAST('1 00:00:00' as TIME), EXTRACT(HOUR FROM '1 00:00:00'), HOUR('1 00:00:00'); +CAST('1 00:00:00' as TIME) EXTRACT(HOUR FROM '1 00:00:00') HOUR('1 00:00:00') +24:00:00 24 24 +CREATE TABLE t1 (a VARCHAR(30)); +INSERT INTO t1 VALUES ('1 00:00:00'); +SELECT CAST(a AS TIME), EXTRACT(HOUR FROM a), HOUR(a) FROM t1; +CAST(a AS TIME) EXTRACT(HOUR FROM a) HOUR(a) +24:00:00 24 24 +DROP TABLE t1; +# +# Testing rounding with CAST +# +CREATE TABLE t1 (a TIME(6)); +INSERT INTO t1 VALUES ('10:10:10.999999'); +INSERT INTO t1 VALUES ('10:10:10.999998'); +INSERT INTO t1 VALUES ('10:10:10.999997'); +INSERT INTO t1 VALUES ('10:10:10.999996'); +INSERT INTO t1 VALUES ('10:10:10.999995'); +INSERT INTO t1 VALUES ('10:10:10.999994'); +INSERT INTO t1 VALUES ('10:10:10.999993'); +INSERT INTO t1 VALUES ('10:10:10.999992'); +INSERT INTO t1 VALUES ('10:10:10.999991'); +INSERT INTO t1 VALUES ('10:10:10.999990'); +SELECT a, CAST(a AS TIME(5)) FROM t1; +a CAST(a AS TIME(5)) +10:10:10.999999 10:10:11.00000 +10:10:10.999998 10:10:11.00000 +10:10:10.999997 10:10:11.00000 +10:10:10.999996 10:10:11.00000 +10:10:10.999995 10:10:11.00000 +10:10:10.999994 10:10:10.99999 +10:10:10.999993 10:10:10.99999 +10:10:10.999992 10:10:10.99999 +10:10:10.999991 10:10:10.99999 +10:10:10.999990 10:10:10.99999 +UPDATE t1 SET a=-a; +SELECT a, CAST(a AS TIME(5)) FROM t1; +a CAST(a AS TIME(5)) +-10:10:10.999999 -10:10:11.00000 +-10:10:10.999998 -10:10:11.00000 +-10:10:10.999997 -10:10:11.00000 +-10:10:10.999996 -10:10:11.00000 +-10:10:10.999995 -10:10:11.00000 +-10:10:10.999994 -10:10:10.99999 +-10:10:10.999993 -10:10:10.99999 +-10:10:10.999992 -10:10:10.99999 +-10:10:10.999991 -10:10:10.99999 +-10:10:10.999990 -10:10:10.99999 +DROP TABLE t1; +CREATE TABLE t1 (a TIME(5)); +INSERT INTO t1 VALUES ('10:10:10.99999'); +INSERT INTO t1 VALUES ('10:10:10.99998'); +INSERT INTO t1 VALUES ('10:10:10.99997'); +INSERT INTO t1 VALUES ('10:10:10.99996'); +INSERT INTO t1 VALUES ('10:10:10.99995'); +INSERT INTO t1 VALUES ('10:10:10.99994'); +INSERT INTO t1 VALUES ('10:10:10.99993'); +INSERT INTO t1 VALUES ('10:10:10.99992'); +INSERT INTO t1 VALUES ('10:10:10.99991'); +INSERT INTO t1 VALUES ('10:10:10.99990'); +SELECT a, CAST(a AS TIME(4)) FROM t1; +a CAST(a AS TIME(4)) +10:10:10.99999 10:10:11.0000 +10:10:10.99998 10:10:11.0000 +10:10:10.99997 10:10:11.0000 +10:10:10.99996 10:10:11.0000 +10:10:10.99995 10:10:11.0000 +10:10:10.99994 10:10:10.9999 +10:10:10.99993 10:10:10.9999 +10:10:10.99992 10:10:10.9999 +10:10:10.99991 10:10:10.9999 +10:10:10.99990 10:10:10.9999 +UPDATE t1 SET a=-a; +SELECT a, CAST(a AS TIME(4)) FROM t1; +a CAST(a AS TIME(4)) +-10:10:10.99999 -10:10:11.0000 +-10:10:10.99998 -10:10:11.0000 +-10:10:10.99997 -10:10:11.0000 +-10:10:10.99996 -10:10:11.0000 +-10:10:10.99995 -10:10:11.0000 +-10:10:10.99994 -10:10:10.9999 +-10:10:10.99993 -10:10:10.9999 +-10:10:10.99992 -10:10:10.9999 +-10:10:10.99991 -10:10:10.9999 +-10:10:10.99990 -10:10:10.9999 +DROP TABLE t1; +CREATE TABLE t1 (a TIME(4)); +INSERT INTO t1 VALUES ('10:10:10.9999'); +INSERT INTO t1 VALUES ('10:10:10.9998'); +INSERT INTO t1 VALUES ('10:10:10.9997'); +INSERT INTO t1 VALUES ('10:10:10.9996'); +INSERT INTO t1 VALUES ('10:10:10.9995'); +INSERT INTO t1 VALUES ('10:10:10.9994'); +INSERT INTO t1 VALUES ('10:10:10.9993'); +INSERT INTO t1 VALUES ('10:10:10.9992'); +INSERT INTO t1 VALUES ('10:10:10.9991'); +INSERT INTO t1 VALUES ('10:10:10.9990'); +SELECT a, CAST(a AS TIME(3)) FROM t1; +a CAST(a AS TIME(3)) +10:10:10.9999 10:10:11.000 +10:10:10.9998 10:10:11.000 +10:10:10.9997 10:10:11.000 +10:10:10.9996 10:10:11.000 +10:10:10.9995 10:10:11.000 +10:10:10.9994 10:10:10.999 +10:10:10.9993 10:10:10.999 +10:10:10.9992 10:10:10.999 +10:10:10.9991 10:10:10.999 +10:10:10.9990 10:10:10.999 +UPDATE t1 SET a=-a; +SELECT a, CAST(a AS TIME(3)) FROM t1; +a CAST(a AS TIME(3)) +-10:10:10.9999 -10:10:11.000 +-10:10:10.9998 -10:10:11.000 +-10:10:10.9997 -10:10:11.000 +-10:10:10.9996 -10:10:11.000 +-10:10:10.9995 -10:10:11.000 +-10:10:10.9994 -10:10:10.999 +-10:10:10.9993 -10:10:10.999 +-10:10:10.9992 -10:10:10.999 +-10:10:10.9991 -10:10:10.999 +-10:10:10.9990 -10:10:10.999 +DROP TABLE t1; +CREATE TABLE t1 (a TIME(3)); +INSERT INTO t1 VALUES ('10:10:10.999'); +INSERT INTO t1 VALUES ('10:10:10.998'); +INSERT INTO t1 VALUES ('10:10:10.997'); +INSERT INTO t1 VALUES ('10:10:10.996'); +INSERT INTO t1 VALUES ('10:10:10.995'); +INSERT INTO t1 VALUES ('10:10:10.994'); +INSERT INTO t1 VALUES ('10:10:10.993'); +INSERT INTO t1 VALUES ('10:10:10.992'); +INSERT INTO t1 VALUES ('10:10:10.991'); +INSERT INTO t1 VALUES ('10:10:10.990'); +SELECT a, CAST(a AS TIME(2)) FROM t1; +a CAST(a AS TIME(2)) +10:10:10.999 10:10:11.00 +10:10:10.998 10:10:11.00 +10:10:10.997 10:10:11.00 +10:10:10.996 10:10:11.00 +10:10:10.995 10:10:11.00 +10:10:10.994 10:10:10.99 +10:10:10.993 10:10:10.99 +10:10:10.992 10:10:10.99 +10:10:10.991 10:10:10.99 +10:10:10.990 10:10:10.99 +UPDATE t1 SET a=-a; +SELECT a, CAST(a AS TIME(2)) FROM t1; +a CAST(a AS TIME(2)) +-10:10:10.999 -10:10:11.00 +-10:10:10.998 -10:10:11.00 +-10:10:10.997 -10:10:11.00 +-10:10:10.996 -10:10:11.00 +-10:10:10.995 -10:10:11.00 +-10:10:10.994 -10:10:10.99 +-10:10:10.993 -10:10:10.99 +-10:10:10.992 -10:10:10.99 +-10:10:10.991 -10:10:10.99 +-10:10:10.990 -10:10:10.99 +DROP TABLE t1; +CREATE TABLE t1 (a TIME(2)); +INSERT INTO t1 VALUES ('10:10:10.99'); +INSERT INTO t1 VALUES ('10:10:10.98'); +INSERT INTO t1 VALUES ('10:10:10.97'); +INSERT INTO t1 VALUES ('10:10:10.96'); +INSERT INTO t1 VALUES ('10:10:10.95'); +INSERT INTO t1 VALUES ('10:10:10.94'); +INSERT INTO t1 VALUES ('10:10:10.93'); +INSERT INTO t1 VALUES ('10:10:10.92'); +INSERT INTO t1 VALUES ('10:10:10.91'); +INSERT INTO t1 VALUES ('10:10:10.90'); +SELECT a, CAST(a AS TIME(1)) FROM t1; +a CAST(a AS TIME(1)) +10:10:10.99 10:10:11.0 +10:10:10.98 10:10:11.0 +10:10:10.97 10:10:11.0 +10:10:10.96 10:10:11.0 +10:10:10.95 10:10:11.0 +10:10:10.94 10:10:10.9 +10:10:10.93 10:10:10.9 +10:10:10.92 10:10:10.9 +10:10:10.91 10:10:10.9 +10:10:10.90 10:10:10.9 +UPDATE t1 SET a=-a; +SELECT a, CAST(a AS TIME(1)) FROM t1; +a CAST(a AS TIME(1)) +-10:10:10.99 -10:10:11.0 +-10:10:10.98 -10:10:11.0 +-10:10:10.97 -10:10:11.0 +-10:10:10.96 -10:10:11.0 +-10:10:10.95 -10:10:11.0 +-10:10:10.94 -10:10:10.9 +-10:10:10.93 -10:10:10.9 +-10:10:10.92 -10:10:10.9 +-10:10:10.91 -10:10:10.9 +-10:10:10.90 -10:10:10.9 +DROP TABLE t1; +CREATE TABLE t1 (a TIME(1)); +INSERT INTO t1 VALUES ('10:10:10.9'); +INSERT INTO t1 VALUES ('10:10:10.8'); +INSERT INTO t1 VALUES ('10:10:10.7'); +INSERT INTO t1 VALUES ('10:10:10.6'); +INSERT INTO t1 VALUES ('10:10:10.5'); +INSERT INTO t1 VALUES ('10:10:10.4'); +INSERT INTO t1 VALUES ('10:10:10.3'); +INSERT INTO t1 VALUES ('10:10:10.2'); +INSERT INTO t1 VALUES ('10:10:10.1'); +INSERT INTO t1 VALUES ('10:10:10.0'); +SELECT a, CAST(a AS TIME) FROM t1; +a CAST(a AS TIME) +10:10:10.9 10:10:11 +10:10:10.8 10:10:11 +10:10:10.7 10:10:11 +10:10:10.6 10:10:11 +10:10:10.5 10:10:11 +10:10:10.4 10:10:10 +10:10:10.3 10:10:10 +10:10:10.2 10:10:10 +10:10:10.1 10:10:10 +10:10:10.0 10:10:10 +UPDATE t1 SET a=-a; +SELECT a, CAST(a AS TIME) FROM t1; +a CAST(a AS TIME) +-10:10:10.9 -10:10:11 +-10:10:10.8 -10:10:11 +-10:10:10.7 -10:10:11 +-10:10:10.6 -10:10:11 +-10:10:10.5 -10:10:11 +-10:10:10.4 -10:10:10 +-10:10:10.3 -10:10:10 +-10:10:10.2 -10:10:10 +-10:10:10.1 -10:10:10 +-10:10:10.0 -10:10:10 +DROP TABLE t1; +# +# Testing rounding with FROM_UNIXTIME +# +SET time_zone='+00:00'; +CREATE TABLE t1 (a DECIMAL(20,7)); +INSERT INTO t1 VALUES +(2147483647.999999), +(2147483647.9999990), +(2147483647.9999991), +(2147483647.9999992), +(2147483647.9999993), +(2147483647.9999994), +(2147483647.9999995), +(2147483647.9999996), +(2147483647.9999997), +(2147483647.9999998), +(2147483647.9999999); +SELECT a, FROM_UNIXTIME(a) FROM t1; +a FROM_UNIXTIME(a) +2147483647.9999990 2038-01-19 03:14:07.999999 +2147483647.9999990 2038-01-19 03:14:07.999999 +2147483647.9999991 2038-01-19 03:14:07.999999 +2147483647.9999992 2038-01-19 03:14:07.999999 +2147483647.9999993 2038-01-19 03:14:07.999999 +2147483647.9999994 2038-01-19 03:14:07.999999 +2147483647.9999995 2038-01-19 03:14:08.000000 +2147483647.9999996 2038-01-19 03:14:08.000000 +2147483647.9999997 2038-01-19 03:14:08.000000 +2147483647.9999998 2038-01-19 03:14:08.000000 +2147483647.9999999 2038-01-19 03:14:08.000000 +DROP TABLE t1; +SET time_zone=DEFAULT; +# +# Testing internal representation format for TIME(N) +# +CREATE TABLE t1 (a6 VARCHAR(32)); +INSERT INTO t1 VALUES ('00:00:00.000000'); +INSERT INTO t1 VALUES ('00:00:00.000001'); +INSERT INTO t1 VALUES ('00:00:00.000002'); +INSERT INTO t1 VALUES ('00:00:00.000003'); +INSERT INTO t1 VALUES ('00:00:00.000004'); +INSERT INTO t1 VALUES ('00:00:00.000005'); +INSERT INTO t1 VALUES ('00:00:00.000006'); +INSERT INTO t1 VALUES ('00:00:00.000007'); +INSERT INTO t1 VALUES ('00:00:00.000008'); +INSERT INTO t1 VALUES ('00:00:00.000009'); +INSERT INTO t1 VALUES ('00:00:00.000010'); +INSERT INTO t1 VALUES ('00:00:00.000011'); +INSERT INTO t1 VALUES ('00:00:00.000012'); +INSERT INTO t1 VALUES ('00:00:00.000013'); +INSERT INTO t1 VALUES ('00:00:00.000014'); +INSERT INTO t1 VALUES ('00:00:00.000015'); +INSERT INTO t1 VALUES ('00:00:00.000016'); +INSERT INTO t1 VALUES ('00:00:00.000099'); +INSERT INTO t1 VALUES ('00:00:00.000999'); +INSERT INTO t1 VALUES ('00:00:00.009999'); +INSERT INTO t1 VALUES ('00:00:00.099999'); +INSERT INTO t1 VALUES ('00:00:00.100000'); +INSERT INTO t1 VALUES ('00:00:00.900000'); +INSERT INTO t1 VALUES ('00:00:00.990000'); +INSERT INTO t1 VALUES ('00:00:00.999000'); +INSERT INTO t1 VALUES ('00:00:00.999900'); +INSERT INTO t1 VALUES ('00:00:00.999990'); +INSERT INTO t1 VALUES ('00:00:00.999999'); +INSERT INTO t1 VALUES ('00:00:01.000000'); +INSERT INTO t1 VALUES ('00:00:01.000001'); +INSERT INTO t1 VALUES ('00:00:01.000002'); +INSERT INTO t1 VALUES ('00:00:01.000003'); +INSERT INTO t1 VALUES ('00:00:01.000004'); +INSERT INTO t1 VALUES ('00:00:01.000005'); +INSERT INTO t1 VALUES ('00:00:01.000006'); +INSERT INTO t1 VALUES ('00:00:01.000007'); +INSERT INTO t1 VALUES ('00:00:01.000008'); +INSERT INTO t1 VALUES ('00:00:01.000009'); +INSERT INTO t1 VALUES ('00:00:01.000010'); +INSERT INTO t1 VALUES ('00:00:01.000011'); +INSERT INTO t1 VALUES ('00:00:01.000012'); +INSERT INTO t1 VALUES ('00:00:01.000013'); +INSERT INTO t1 VALUES ('00:00:01.000014'); +INSERT INTO t1 VALUES ('00:00:01.000015'); +INSERT INTO t1 VALUES ('00:00:01.000016'); +INSERT INTO t1 VALUES ('00:00:01.000099'); +INSERT INTO t1 VALUES ('00:00:01.000999'); +INSERT INTO t1 VALUES ('00:00:01.009999'); +INSERT INTO t1 VALUES ('00:00:01.090000'); +INSERT INTO t1 VALUES ('00:00:01.099999'); +INSERT INTO t1 VALUES ('00:00:01.100000'); +INSERT INTO t1 VALUES ('00:00:01.900000'); +INSERT INTO t1 VALUES ('00:00:01.990000'); +INSERT INTO t1 VALUES ('00:00:01.999000'); +INSERT INTO t1 VALUES ('00:00:01.999900'); +INSERT INTO t1 VALUES ('00:00:01.999990'); +INSERT INTO t1 VALUES ('00:00:01.999999'); +INSERT INTO t1 VALUES ('00:01:00.000001'); +INSERT INTO t1 VALUES ('00:01:00.000008'); +INSERT INTO t1 VALUES ('00:01:00.000015'); +INSERT INTO t1 VALUES ('00:01:00.000016'); +INSERT INTO t1 VALUES ('00:01:00.000099'); +INSERT INTO t1 VALUES ('00:01:00.000999'); +INSERT INTO t1 VALUES ('00:01:00.009999'); +INSERT INTO t1 VALUES ('00:01:00.099999'); +INSERT INTO t1 VALUES ('00:01:00.100000'); +INSERT INTO t1 VALUES ('00:01:00.900000'); +INSERT INTO t1 VALUES ('00:01:00.999999'); +INSERT INTO t1 VALUES ('01:00:00.000001'); +INSERT INTO t1 VALUES ('01:00:00.000008'); +INSERT INTO t1 VALUES ('01:00:00.000015'); +INSERT INTO t1 VALUES ('01:00:00.000016'); +INSERT INTO t1 VALUES ('01:00:00.000099'); +INSERT INTO t1 VALUES ('01:00:00.000999'); +INSERT INTO t1 VALUES ('01:00:00.009999'); +INSERT INTO t1 VALUES ('01:00:00.099999'); +INSERT INTO t1 VALUES ('01:00:00.100000'); +INSERT INTO t1 VALUES ('01:00:00.900000'); +INSERT INTO t1 VALUES ('01:00:00.990000'); +INSERT INTO t1 VALUES ('01:00:00.999000'); +INSERT INTO t1 VALUES ('01:00:00.999900'); +INSERT INTO t1 VALUES ('01:00:00.999990'); +INSERT INTO t1 VALUES ('01:00:00.999999'); +INSERT INTO t1 VALUES ('838:59:58.000001'); +INSERT INTO t1 VALUES ('838:59:58.000008'); +INSERT INTO t1 VALUES ('838:59:58.000015'); +INSERT INTO t1 VALUES ('838:59:58.000016'); +INSERT INTO t1 VALUES ('838:59:58.000099'); +INSERT INTO t1 VALUES ('838:59:58.000999'); +INSERT INTO t1 VALUES ('838:59:58.009999'); +INSERT INTO t1 VALUES ('838:59:58.099999'); +INSERT INTO t1 VALUES ('838:59:58.100000'); +INSERT INTO t1 VALUES ('838:59:58.900000'); +INSERT INTO t1 VALUES ('838:59:58.990000'); +INSERT INTO t1 VALUES ('838:59:58.999000'); +INSERT INTO t1 VALUES ('838:59:58.999900'); +INSERT INTO t1 VALUES ('838:59:58.999990'); +INSERT INTO t1 VALUES ('838:59:58.999999'); +INSERT INTO t1 VALUES ('838:59:59.000000'); +INSERT INTO t1 SELECT CONCAT('-', a6) FROM t1; +ALTER TABLE t1 +ADD a0 VARCHAR(32), +ADD a1 VARCHAR(32), ADD a2 VARCHAR(32), ADD a3 VARCHAR(32), +ADD a4 VARCHAR(32), ADD a5 VARCHAR(32), +ADD t0 TIME(0), +ADD t1 TIME(1), ADD t2 TIME(2), ADD t3 TIME(3), +ADD t4 TIME(4), ADD t5 TIME(5), ADD t6 TIME(6); +UPDATE t1 SET +a0=LEFT(a6, LENGTH(a6) - 6), +a1=LEFT(a6, LENGTH(a6) - 5), +a2=LEFT(a6, LENGTH(a6) - 4), +a3=LEFT(a6, LENGTH(a6) - 3), +a4=LEFT(a6, LENGTH(a6) - 2), +a5=LEFT(a6, LENGTH(a6) - 1); +UPDATE t1 SET t0=a0, t1=a1, t2=a2, t3=a3, t4=a4, t5=a5, t6= a6; +SELECT a6, t6, HEX(WEIGHT_STRING(t6)) FROM t1 ORDER BY t6; +a6 t6 HEX(WEIGHT_STRING(t6)) +-838:59:59.000000 -838:59:59.000000 4B9105000000 +-838:59:58.999999 -838:59:58.999999 4B9105F0BDC1 +-838:59:58.999990 -838:59:58.999990 4B9105F0BDCA +-838:59:58.999900 -838:59:58.999900 4B9105F0BE24 +-838:59:58.999000 -838:59:58.999000 4B9105F0C1A8 +-838:59:58.990000 -838:59:58.990000 4B9105F0E4D0 +-838:59:58.900000 -838:59:58.900000 4B9105F24460 +-838:59:58.100000 -838:59:58.100000 4B9105FE7960 +-838:59:58.099999 -838:59:58.099999 4B9105FE7961 +-838:59:58.009999 -838:59:58.009999 4B9105FFD8F1 +-838:59:58.000999 -838:59:58.000999 4B9105FFFC19 +-838:59:58.000099 -838:59:58.000099 4B9105FFFF9D +-838:59:58.000016 -838:59:58.000016 4B9105FFFFF0 +-838:59:58.000015 -838:59:58.000015 4B9105FFFFF1 +-838:59:58.000008 -838:59:58.000008 4B9105FFFFF8 +-838:59:58.000001 -838:59:58.000001 4B9105FFFFFF +-01:00:00.999999 -01:00:00.999999 7FEFFFF0BDC1 +-01:00:00.999990 -01:00:00.999990 7FEFFFF0BDCA +-01:00:00.999900 -01:00:00.999900 7FEFFFF0BE24 +-01:00:00.999000 -01:00:00.999000 7FEFFFF0C1A8 +-01:00:00.990000 -01:00:00.990000 7FEFFFF0E4D0 +-01:00:00.900000 -01:00:00.900000 7FEFFFF24460 +-01:00:00.100000 -01:00:00.100000 7FEFFFFE7960 +-01:00:00.099999 -01:00:00.099999 7FEFFFFE7961 +-01:00:00.009999 -01:00:00.009999 7FEFFFFFD8F1 +-01:00:00.000999 -01:00:00.000999 7FEFFFFFFC19 +-01:00:00.000099 -01:00:00.000099 7FEFFFFFFF9D +-01:00:00.000016 -01:00:00.000016 7FEFFFFFFFF0 +-01:00:00.000015 -01:00:00.000015 7FEFFFFFFFF1 +-01:00:00.000008 -01:00:00.000008 7FEFFFFFFFF8 +-01:00:00.000001 -01:00:00.000001 7FEFFFFFFFFF +-00:01:00.999999 -00:01:00.999999 7FFFBFF0BDC1 +-00:01:00.900000 -00:01:00.900000 7FFFBFF24460 +-00:01:00.100000 -00:01:00.100000 7FFFBFFE7960 +-00:01:00.099999 -00:01:00.099999 7FFFBFFE7961 +-00:01:00.009999 -00:01:00.009999 7FFFBFFFD8F1 +-00:01:00.000999 -00:01:00.000999 7FFFBFFFFC19 +-00:01:00.000099 -00:01:00.000099 7FFFBFFFFF9D +-00:01:00.000016 -00:01:00.000016 7FFFBFFFFFF0 +-00:01:00.000015 -00:01:00.000015 7FFFBFFFFFF1 +-00:01:00.000008 -00:01:00.000008 7FFFBFFFFFF8 +-00:01:00.000001 -00:01:00.000001 7FFFBFFFFFFF +-00:00:01.999999 -00:00:01.999999 7FFFFEF0BDC1 +-00:00:01.999990 -00:00:01.999990 7FFFFEF0BDCA +-00:00:01.999900 -00:00:01.999900 7FFFFEF0BE24 +-00:00:01.999000 -00:00:01.999000 7FFFFEF0C1A8 +-00:00:01.990000 -00:00:01.990000 7FFFFEF0E4D0 +-00:00:01.900000 -00:00:01.900000 7FFFFEF24460 +-00:00:01.100000 -00:00:01.100000 7FFFFEFE7960 +-00:00:01.099999 -00:00:01.099999 7FFFFEFE7961 +-00:00:01.090000 -00:00:01.090000 7FFFFEFEA070 +-00:00:01.009999 -00:00:01.009999 7FFFFEFFD8F1 +-00:00:01.000999 -00:00:01.000999 7FFFFEFFFC19 +-00:00:01.000099 -00:00:01.000099 7FFFFEFFFF9D +-00:00:01.000016 -00:00:01.000016 7FFFFEFFFFF0 +-00:00:01.000015 -00:00:01.000015 7FFFFEFFFFF1 +-00:00:01.000014 -00:00:01.000014 7FFFFEFFFFF2 +-00:00:01.000013 -00:00:01.000013 7FFFFEFFFFF3 +-00:00:01.000012 -00:00:01.000012 7FFFFEFFFFF4 +-00:00:01.000011 -00:00:01.000011 7FFFFEFFFFF5 +-00:00:01.000010 -00:00:01.000010 7FFFFEFFFFF6 +-00:00:01.000009 -00:00:01.000009 7FFFFEFFFFF7 +-00:00:01.000008 -00:00:01.000008 7FFFFEFFFFF8 +-00:00:01.000007 -00:00:01.000007 7FFFFEFFFFF9 +-00:00:01.000006 -00:00:01.000006 7FFFFEFFFFFA +-00:00:01.000005 -00:00:01.000005 7FFFFEFFFFFB +-00:00:01.000004 -00:00:01.000004 7FFFFEFFFFFC +-00:00:01.000003 -00:00:01.000003 7FFFFEFFFFFD +-00:00:01.000002 -00:00:01.000002 7FFFFEFFFFFE +-00:00:01.000001 -00:00:01.000001 7FFFFEFFFFFF +-00:00:01.000000 -00:00:01.000000 7FFFFF000000 +-00:00:00.999999 -00:00:00.999999 7FFFFFF0BDC1 +-00:00:00.999990 -00:00:00.999990 7FFFFFF0BDCA +-00:00:00.999900 -00:00:00.999900 7FFFFFF0BE24 +-00:00:00.999000 -00:00:00.999000 7FFFFFF0C1A8 +-00:00:00.990000 -00:00:00.990000 7FFFFFF0E4D0 +-00:00:00.900000 -00:00:00.900000 7FFFFFF24460 +-00:00:00.100000 -00:00:00.100000 7FFFFFFE7960 +-00:00:00.099999 -00:00:00.099999 7FFFFFFE7961 +-00:00:00.009999 -00:00:00.009999 7FFFFFFFD8F1 +-00:00:00.000999 -00:00:00.000999 7FFFFFFFFC19 +-00:00:00.000099 -00:00:00.000099 7FFFFFFFFF9D +-00:00:00.000016 -00:00:00.000016 7FFFFFFFFFF0 +-00:00:00.000015 -00:00:00.000015 7FFFFFFFFFF1 +-00:00:00.000014 -00:00:00.000014 7FFFFFFFFFF2 +-00:00:00.000013 -00:00:00.000013 7FFFFFFFFFF3 +-00:00:00.000012 -00:00:00.000012 7FFFFFFFFFF4 +-00:00:00.000011 -00:00:00.000011 7FFFFFFFFFF5 +-00:00:00.000010 -00:00:00.000010 7FFFFFFFFFF6 +-00:00:00.000009 -00:00:00.000009 7FFFFFFFFFF7 +-00:00:00.000008 -00:00:00.000008 7FFFFFFFFFF8 +-00:00:00.000007 -00:00:00.000007 7FFFFFFFFFF9 +-00:00:00.000006 -00:00:00.000006 7FFFFFFFFFFA +-00:00:00.000005 -00:00:00.000005 7FFFFFFFFFFB +-00:00:00.000004 -00:00:00.000004 7FFFFFFFFFFC +-00:00:00.000003 -00:00:00.000003 7FFFFFFFFFFD +-00:00:00.000002 -00:00:00.000002 7FFFFFFFFFFE +-00:00:00.000001 -00:00:00.000001 7FFFFFFFFFFF +00:00:00.000000 00:00:00.000000 800000000000 +-00:00:00.000000 00:00:00.000000 800000000000 +00:00:00.000001 00:00:00.000001 800000000001 +00:00:00.000002 00:00:00.000002 800000000002 +00:00:00.000003 00:00:00.000003 800000000003 +00:00:00.000004 00:00:00.000004 800000000004 +00:00:00.000005 00:00:00.000005 800000000005 +00:00:00.000006 00:00:00.000006 800000000006 +00:00:00.000007 00:00:00.000007 800000000007 +00:00:00.000008 00:00:00.000008 800000000008 +00:00:00.000009 00:00:00.000009 800000000009 +00:00:00.000010 00:00:00.000010 80000000000A +00:00:00.000011 00:00:00.000011 80000000000B +00:00:00.000012 00:00:00.000012 80000000000C +00:00:00.000013 00:00:00.000013 80000000000D +00:00:00.000014 00:00:00.000014 80000000000E +00:00:00.000015 00:00:00.000015 80000000000F +00:00:00.000016 00:00:00.000016 800000000010 +00:00:00.000099 00:00:00.000099 800000000063 +00:00:00.000999 00:00:00.000999 8000000003E7 +00:00:00.009999 00:00:00.009999 80000000270F +00:00:00.099999 00:00:00.099999 80000001869F +00:00:00.100000 00:00:00.100000 8000000186A0 +00:00:00.900000 00:00:00.900000 8000000DBBA0 +00:00:00.990000 00:00:00.990000 8000000F1B30 +00:00:00.999000 00:00:00.999000 8000000F3E58 +00:00:00.999900 00:00:00.999900 8000000F41DC +00:00:00.999990 00:00:00.999990 8000000F4236 +00:00:00.999999 00:00:00.999999 8000000F423F +00:00:01.000000 00:00:01.000000 800001000000 +00:00:01.000001 00:00:01.000001 800001000001 +00:00:01.000002 00:00:01.000002 800001000002 +00:00:01.000003 00:00:01.000003 800001000003 +00:00:01.000004 00:00:01.000004 800001000004 +00:00:01.000005 00:00:01.000005 800001000005 +00:00:01.000006 00:00:01.000006 800001000006 +00:00:01.000007 00:00:01.000007 800001000007 +00:00:01.000008 00:00:01.000008 800001000008 +00:00:01.000009 00:00:01.000009 800001000009 +00:00:01.000010 00:00:01.000010 80000100000A +00:00:01.000011 00:00:01.000011 80000100000B +00:00:01.000012 00:00:01.000012 80000100000C +00:00:01.000013 00:00:01.000013 80000100000D +00:00:01.000014 00:00:01.000014 80000100000E +00:00:01.000015 00:00:01.000015 80000100000F +00:00:01.000016 00:00:01.000016 800001000010 +00:00:01.000099 00:00:01.000099 800001000063 +00:00:01.000999 00:00:01.000999 8000010003E7 +00:00:01.009999 00:00:01.009999 80000100270F +00:00:01.090000 00:00:01.090000 800001015F90 +00:00:01.099999 00:00:01.099999 80000101869F +00:00:01.100000 00:00:01.100000 8000010186A0 +00:00:01.900000 00:00:01.900000 8000010DBBA0 +00:00:01.990000 00:00:01.990000 8000010F1B30 +00:00:01.999000 00:00:01.999000 8000010F3E58 +00:00:01.999900 00:00:01.999900 8000010F41DC +00:00:01.999990 00:00:01.999990 8000010F4236 +00:00:01.999999 00:00:01.999999 8000010F423F +00:01:00.000001 00:01:00.000001 800040000001 +00:01:00.000008 00:01:00.000008 800040000008 +00:01:00.000015 00:01:00.000015 80004000000F +00:01:00.000016 00:01:00.000016 800040000010 +00:01:00.000099 00:01:00.000099 800040000063 +00:01:00.000999 00:01:00.000999 8000400003E7 +00:01:00.009999 00:01:00.009999 80004000270F +00:01:00.099999 00:01:00.099999 80004001869F +00:01:00.100000 00:01:00.100000 8000400186A0 +00:01:00.900000 00:01:00.900000 8000400DBBA0 +00:01:00.999999 00:01:00.999999 8000400F423F +01:00:00.000001 01:00:00.000001 801000000001 +01:00:00.000008 01:00:00.000008 801000000008 +01:00:00.000015 01:00:00.000015 80100000000F +01:00:00.000016 01:00:00.000016 801000000010 +01:00:00.000099 01:00:00.000099 801000000063 +01:00:00.000999 01:00:00.000999 8010000003E7 +01:00:00.009999 01:00:00.009999 80100000270F +01:00:00.099999 01:00:00.099999 80100001869F +01:00:00.100000 01:00:00.100000 8010000186A0 +01:00:00.900000 01:00:00.900000 8010000DBBA0 +01:00:00.990000 01:00:00.990000 8010000F1B30 +01:00:00.999000 01:00:00.999000 8010000F3E58 +01:00:00.999900 01:00:00.999900 8010000F41DC +01:00:00.999990 01:00:00.999990 8010000F4236 +01:00:00.999999 01:00:00.999999 8010000F423F +838:59:58.000001 838:59:58.000001 B46EFA000001 +838:59:58.000008 838:59:58.000008 B46EFA000008 +838:59:58.000015 838:59:58.000015 B46EFA00000F +838:59:58.000016 838:59:58.000016 B46EFA000010 +838:59:58.000099 838:59:58.000099 B46EFA000063 +838:59:58.000999 838:59:58.000999 B46EFA0003E7 +838:59:58.009999 838:59:58.009999 B46EFA00270F +838:59:58.099999 838:59:58.099999 B46EFA01869F +838:59:58.100000 838:59:58.100000 B46EFA0186A0 +838:59:58.900000 838:59:58.900000 B46EFA0DBBA0 +838:59:58.990000 838:59:58.990000 B46EFA0F1B30 +838:59:58.999000 838:59:58.999000 B46EFA0F3E58 +838:59:58.999900 838:59:58.999900 B46EFA0F41DC +838:59:58.999990 838:59:58.999990 B46EFA0F4236 +838:59:58.999999 838:59:58.999999 B46EFA0F423F +838:59:59.000000 838:59:59.000000 B46EFB000000 +SELECT a5, t5, HEX(WEIGHT_STRING(t5)) FROM t1 ORDER BY t5, a6; +a5 t5 HEX(WEIGHT_STRING(t5)) +-838:59:59.00000 -838:59:59.00000 4B9105000000 +-838:59:58.99999 -838:59:58.99999 4B9105F0BDCA +-838:59:58.99999 -838:59:58.99999 4B9105F0BDCA +-838:59:58.99990 -838:59:58.99990 4B9105F0BE24 +-838:59:58.99900 -838:59:58.99900 4B9105F0C1A8 +-838:59:58.99000 -838:59:58.99000 4B9105F0E4D0 +-838:59:58.90000 -838:59:58.90000 4B9105F24460 +-838:59:58.10000 -838:59:58.10000 4B9105FE7960 +-838:59:58.09999 -838:59:58.09999 4B9105FE796A +-838:59:58.00999 -838:59:58.00999 4B9105FFD8FA +-838:59:58.00099 -838:59:58.00099 4B9105FFFC22 +-838:59:58.00009 -838:59:58.00009 4B9105FFFFA6 +-838:59:58.00001 -838:59:58.00001 4B9105FFFFF6 +-838:59:58.00001 -838:59:58.00001 4B9105FFFFF6 +-838:59:58.00000 -838:59:58.00000 4B9106000000 +-838:59:58.00000 -838:59:58.00000 4B9106000000 +-01:00:00.99999 -01:00:00.99999 7FEFFFF0BDCA +-01:00:00.99999 -01:00:00.99999 7FEFFFF0BDCA +-01:00:00.99990 -01:00:00.99990 7FEFFFF0BE24 +-01:00:00.99900 -01:00:00.99900 7FEFFFF0C1A8 +-01:00:00.99000 -01:00:00.99000 7FEFFFF0E4D0 +-01:00:00.90000 -01:00:00.90000 7FEFFFF24460 +-01:00:00.10000 -01:00:00.10000 7FEFFFFE7960 +-01:00:00.09999 -01:00:00.09999 7FEFFFFE796A +-01:00:00.00999 -01:00:00.00999 7FEFFFFFD8FA +-01:00:00.00099 -01:00:00.00099 7FEFFFFFFC22 +-01:00:00.00009 -01:00:00.00009 7FEFFFFFFFA6 +-01:00:00.00001 -01:00:00.00001 7FEFFFFFFFF6 +-01:00:00.00001 -01:00:00.00001 7FEFFFFFFFF6 +-01:00:00.00000 -01:00:00.00000 7FF000000000 +-01:00:00.00000 -01:00:00.00000 7FF000000000 +-00:01:00.99999 -00:01:00.99999 7FFFBFF0BDCA +-00:01:00.90000 -00:01:00.90000 7FFFBFF24460 +-00:01:00.10000 -00:01:00.10000 7FFFBFFE7960 +-00:01:00.09999 -00:01:00.09999 7FFFBFFE796A +-00:01:00.00999 -00:01:00.00999 7FFFBFFFD8FA +-00:01:00.00099 -00:01:00.00099 7FFFBFFFFC22 +-00:01:00.00009 -00:01:00.00009 7FFFBFFFFFA6 +-00:01:00.00001 -00:01:00.00001 7FFFBFFFFFF6 +-00:01:00.00001 -00:01:00.00001 7FFFBFFFFFF6 +-00:01:00.00000 -00:01:00.00000 7FFFC0000000 +-00:01:00.00000 -00:01:00.00000 7FFFC0000000 +-00:00:01.99999 -00:00:01.99999 7FFFFEF0BDCA +-00:00:01.99999 -00:00:01.99999 7FFFFEF0BDCA +-00:00:01.99990 -00:00:01.99990 7FFFFEF0BE24 +-00:00:01.99900 -00:00:01.99900 7FFFFEF0C1A8 +-00:00:01.99000 -00:00:01.99000 7FFFFEF0E4D0 +-00:00:01.90000 -00:00:01.90000 7FFFFEF24460 +-00:00:01.10000 -00:00:01.10000 7FFFFEFE7960 +-00:00:01.09999 -00:00:01.09999 7FFFFEFE796A +-00:00:01.09000 -00:00:01.09000 7FFFFEFEA070 +-00:00:01.00999 -00:00:01.00999 7FFFFEFFD8FA +-00:00:01.00099 -00:00:01.00099 7FFFFEFFFC22 +-00:00:01.00009 -00:00:01.00009 7FFFFEFFFFA6 +-00:00:01.00001 -00:00:01.00001 7FFFFEFFFFF6 +-00:00:01.00001 -00:00:01.00001 7FFFFEFFFFF6 +-00:00:01.00001 -00:00:01.00001 7FFFFEFFFFF6 +-00:00:01.00001 -00:00:01.00001 7FFFFEFFFFF6 +-00:00:01.00001 -00:00:01.00001 7FFFFEFFFFF6 +-00:00:01.00001 -00:00:01.00001 7FFFFEFFFFF6 +-00:00:01.00001 -00:00:01.00001 7FFFFEFFFFF6 +-00:00:01.00000 -00:00:01.00000 7FFFFF000000 +-00:00:01.00000 -00:00:01.00000 7FFFFF000000 +-00:00:01.00000 -00:00:01.00000 7FFFFF000000 +-00:00:01.00000 -00:00:01.00000 7FFFFF000000 +-00:00:01.00000 -00:00:01.00000 7FFFFF000000 +-00:00:01.00000 -00:00:01.00000 7FFFFF000000 +-00:00:01.00000 -00:00:01.00000 7FFFFF000000 +-00:00:01.00000 -00:00:01.00000 7FFFFF000000 +-00:00:01.00000 -00:00:01.00000 7FFFFF000000 +-00:00:01.00000 -00:00:01.00000 7FFFFF000000 +-00:00:00.99999 -00:00:00.99999 7FFFFFF0BDCA +-00:00:00.99999 -00:00:00.99999 7FFFFFF0BDCA +-00:00:00.99990 -00:00:00.99990 7FFFFFF0BE24 +-00:00:00.99900 -00:00:00.99900 7FFFFFF0C1A8 +-00:00:00.99000 -00:00:00.99000 7FFFFFF0E4D0 +-00:00:00.90000 -00:00:00.90000 7FFFFFF24460 +-00:00:00.10000 -00:00:00.10000 7FFFFFFE7960 +-00:00:00.09999 -00:00:00.09999 7FFFFFFE796A +-00:00:00.00999 -00:00:00.00999 7FFFFFFFD8FA +-00:00:00.00099 -00:00:00.00099 7FFFFFFFFC22 +-00:00:00.00009 -00:00:00.00009 7FFFFFFFFFA6 +-00:00:00.00001 -00:00:00.00001 7FFFFFFFFFF6 +-00:00:00.00001 -00:00:00.00001 7FFFFFFFFFF6 +-00:00:00.00001 -00:00:00.00001 7FFFFFFFFFF6 +-00:00:00.00001 -00:00:00.00001 7FFFFFFFFFF6 +-00:00:00.00001 -00:00:00.00001 7FFFFFFFFFF6 +-00:00:00.00001 -00:00:00.00001 7FFFFFFFFFF6 +-00:00:00.00001 -00:00:00.00001 7FFFFFFFFFF6 +-00:00:00.00000 00:00:00.00000 800000000000 +-00:00:00.00000 00:00:00.00000 800000000000 +-00:00:00.00000 00:00:00.00000 800000000000 +-00:00:00.00000 00:00:00.00000 800000000000 +-00:00:00.00000 00:00:00.00000 800000000000 +-00:00:00.00000 00:00:00.00000 800000000000 +-00:00:00.00000 00:00:00.00000 800000000000 +-00:00:00.00000 00:00:00.00000 800000000000 +-00:00:00.00000 00:00:00.00000 800000000000 +-00:00:00.00000 00:00:00.00000 800000000000 +00:00:00.00000 00:00:00.00000 800000000000 +00:00:00.00000 00:00:00.00000 800000000000 +00:00:00.00000 00:00:00.00000 800000000000 +00:00:00.00000 00:00:00.00000 800000000000 +00:00:00.00000 00:00:00.00000 800000000000 +00:00:00.00000 00:00:00.00000 800000000000 +00:00:00.00000 00:00:00.00000 800000000000 +00:00:00.00000 00:00:00.00000 800000000000 +00:00:00.00000 00:00:00.00000 800000000000 +00:00:00.00000 00:00:00.00000 800000000000 +00:00:00.00001 00:00:00.00001 80000000000A +00:00:00.00001 00:00:00.00001 80000000000A +00:00:00.00001 00:00:00.00001 80000000000A +00:00:00.00001 00:00:00.00001 80000000000A +00:00:00.00001 00:00:00.00001 80000000000A +00:00:00.00001 00:00:00.00001 80000000000A +00:00:00.00001 00:00:00.00001 80000000000A +00:00:00.00009 00:00:00.00009 80000000005A +00:00:00.00099 00:00:00.00099 8000000003DE +00:00:00.00999 00:00:00.00999 800000002706 +00:00:00.09999 00:00:00.09999 800000018696 +00:00:00.10000 00:00:00.10000 8000000186A0 +00:00:00.90000 00:00:00.90000 8000000DBBA0 +00:00:00.99000 00:00:00.99000 8000000F1B30 +00:00:00.99900 00:00:00.99900 8000000F3E58 +00:00:00.99990 00:00:00.99990 8000000F41DC +00:00:00.99999 00:00:00.99999 8000000F4236 +00:00:00.99999 00:00:00.99999 8000000F4236 +00:00:01.00000 00:00:01.00000 800001000000 +00:00:01.00000 00:00:01.00000 800001000000 +00:00:01.00000 00:00:01.00000 800001000000 +00:00:01.00000 00:00:01.00000 800001000000 +00:00:01.00000 00:00:01.00000 800001000000 +00:00:01.00000 00:00:01.00000 800001000000 +00:00:01.00000 00:00:01.00000 800001000000 +00:00:01.00000 00:00:01.00000 800001000000 +00:00:01.00000 00:00:01.00000 800001000000 +00:00:01.00000 00:00:01.00000 800001000000 +00:00:01.00001 00:00:01.00001 80000100000A +00:00:01.00001 00:00:01.00001 80000100000A +00:00:01.00001 00:00:01.00001 80000100000A +00:00:01.00001 00:00:01.00001 80000100000A +00:00:01.00001 00:00:01.00001 80000100000A +00:00:01.00001 00:00:01.00001 80000100000A +00:00:01.00001 00:00:01.00001 80000100000A +00:00:01.00009 00:00:01.00009 80000100005A +00:00:01.00099 00:00:01.00099 8000010003DE +00:00:01.00999 00:00:01.00999 800001002706 +00:00:01.09000 00:00:01.09000 800001015F90 +00:00:01.09999 00:00:01.09999 800001018696 +00:00:01.10000 00:00:01.10000 8000010186A0 +00:00:01.90000 00:00:01.90000 8000010DBBA0 +00:00:01.99000 00:00:01.99000 8000010F1B30 +00:00:01.99900 00:00:01.99900 8000010F3E58 +00:00:01.99990 00:00:01.99990 8000010F41DC +00:00:01.99999 00:00:01.99999 8000010F4236 +00:00:01.99999 00:00:01.99999 8000010F4236 +00:01:00.00000 00:01:00.00000 800040000000 +00:01:00.00000 00:01:00.00000 800040000000 +00:01:00.00001 00:01:00.00001 80004000000A +00:01:00.00001 00:01:00.00001 80004000000A +00:01:00.00009 00:01:00.00009 80004000005A +00:01:00.00099 00:01:00.00099 8000400003DE +00:01:00.00999 00:01:00.00999 800040002706 +00:01:00.09999 00:01:00.09999 800040018696 +00:01:00.10000 00:01:00.10000 8000400186A0 +00:01:00.90000 00:01:00.90000 8000400DBBA0 +00:01:00.99999 00:01:00.99999 8000400F4236 +01:00:00.00000 01:00:00.00000 801000000000 +01:00:00.00000 01:00:00.00000 801000000000 +01:00:00.00001 01:00:00.00001 80100000000A +01:00:00.00001 01:00:00.00001 80100000000A +01:00:00.00009 01:00:00.00009 80100000005A +01:00:00.00099 01:00:00.00099 8010000003DE +01:00:00.00999 01:00:00.00999 801000002706 +01:00:00.09999 01:00:00.09999 801000018696 +01:00:00.10000 01:00:00.10000 8010000186A0 +01:00:00.90000 01:00:00.90000 8010000DBBA0 +01:00:00.99000 01:00:00.99000 8010000F1B30 +01:00:00.99900 01:00:00.99900 8010000F3E58 +01:00:00.99990 01:00:00.99990 8010000F41DC +01:00:00.99999 01:00:00.99999 8010000F4236 +01:00:00.99999 01:00:00.99999 8010000F4236 +838:59:58.00000 838:59:58.00000 B46EFA000000 +838:59:58.00000 838:59:58.00000 B46EFA000000 +838:59:58.00001 838:59:58.00001 B46EFA00000A +838:59:58.00001 838:59:58.00001 B46EFA00000A +838:59:58.00009 838:59:58.00009 B46EFA00005A +838:59:58.00099 838:59:58.00099 B46EFA0003DE +838:59:58.00999 838:59:58.00999 B46EFA002706 +838:59:58.09999 838:59:58.09999 B46EFA018696 +838:59:58.10000 838:59:58.10000 B46EFA0186A0 +838:59:58.90000 838:59:58.90000 B46EFA0DBBA0 +838:59:58.99000 838:59:58.99000 B46EFA0F1B30 +838:59:58.99900 838:59:58.99900 B46EFA0F3E58 +838:59:58.99990 838:59:58.99990 B46EFA0F41DC +838:59:58.99999 838:59:58.99999 B46EFA0F4236 +838:59:58.99999 838:59:58.99999 B46EFA0F4236 +838:59:59.00000 838:59:59.00000 B46EFB000000 +SELECT a4, t4, HEX(WEIGHT_STRING(t4)) FROM t1 ORDER BY t4, a6; +a4 t4 HEX(WEIGHT_STRING(t4)) +-838:59:59.0000 -838:59:59.0000 4B91050000 +-838:59:58.9999 -838:59:58.9999 4B9105D8F1 +-838:59:58.9999 -838:59:58.9999 4B9105D8F1 +-838:59:58.9999 -838:59:58.9999 4B9105D8F1 +-838:59:58.9990 -838:59:58.9990 4B9105D8FA +-838:59:58.9900 -838:59:58.9900 4B9105D954 +-838:59:58.9000 -838:59:58.9000 4B9105DCD8 +-838:59:58.1000 -838:59:58.1000 4B9105FC18 +-838:59:58.0999 -838:59:58.0999 4B9105FC19 +-838:59:58.0099 -838:59:58.0099 4B9105FF9D +-838:59:58.0009 -838:59:58.0009 4B9105FFF7 +-838:59:58.0000 -838:59:58.0000 4B91060000 +-838:59:58.0000 -838:59:58.0000 4B91060000 +-838:59:58.0000 -838:59:58.0000 4B91060000 +-838:59:58.0000 -838:59:58.0000 4B91060000 +-838:59:58.0000 -838:59:58.0000 4B91060000 +-01:00:00.9999 -01:00:00.9999 7FEFFFD8F1 +-01:00:00.9999 -01:00:00.9999 7FEFFFD8F1 +-01:00:00.9999 -01:00:00.9999 7FEFFFD8F1 +-01:00:00.9990 -01:00:00.9990 7FEFFFD8FA +-01:00:00.9900 -01:00:00.9900 7FEFFFD954 +-01:00:00.9000 -01:00:00.9000 7FEFFFDCD8 +-01:00:00.1000 -01:00:00.1000 7FEFFFFC18 +-01:00:00.0999 -01:00:00.0999 7FEFFFFC19 +-01:00:00.0099 -01:00:00.0099 7FEFFFFF9D +-01:00:00.0009 -01:00:00.0009 7FEFFFFFF7 +-01:00:00.0000 -01:00:00.0000 7FF0000000 +-01:00:00.0000 -01:00:00.0000 7FF0000000 +-01:00:00.0000 -01:00:00.0000 7FF0000000 +-01:00:00.0000 -01:00:00.0000 7FF0000000 +-01:00:00.0000 -01:00:00.0000 7FF0000000 +-00:01:00.9999 -00:01:00.9999 7FFFBFD8F1 +-00:01:00.9000 -00:01:00.9000 7FFFBFDCD8 +-00:01:00.1000 -00:01:00.1000 7FFFBFFC18 +-00:01:00.0999 -00:01:00.0999 7FFFBFFC19 +-00:01:00.0099 -00:01:00.0099 7FFFBFFF9D +-00:01:00.0009 -00:01:00.0009 7FFFBFFFF7 +-00:01:00.0000 -00:01:00.0000 7FFFC00000 +-00:01:00.0000 -00:01:00.0000 7FFFC00000 +-00:01:00.0000 -00:01:00.0000 7FFFC00000 +-00:01:00.0000 -00:01:00.0000 7FFFC00000 +-00:01:00.0000 -00:01:00.0000 7FFFC00000 +-00:00:01.9999 -00:00:01.9999 7FFFFED8F1 +-00:00:01.9999 -00:00:01.9999 7FFFFED8F1 +-00:00:01.9999 -00:00:01.9999 7FFFFED8F1 +-00:00:01.9990 -00:00:01.9990 7FFFFED8FA +-00:00:01.9900 -00:00:01.9900 7FFFFED954 +-00:00:01.9000 -00:00:01.9000 7FFFFEDCD8 +-00:00:01.1000 -00:00:01.1000 7FFFFEFC18 +-00:00:01.0999 -00:00:01.0999 7FFFFEFC19 +-00:00:01.0900 -00:00:01.0900 7FFFFEFC7C +-00:00:01.0099 -00:00:01.0099 7FFFFEFF9D +-00:00:01.0009 -00:00:01.0009 7FFFFEFFF7 +-00:00:01.0000 -00:00:01.0000 7FFFFF0000 +-00:00:01.0000 -00:00:01.0000 7FFFFF0000 +-00:00:01.0000 -00:00:01.0000 7FFFFF0000 +-00:00:01.0000 -00:00:01.0000 7FFFFF0000 +-00:00:01.0000 -00:00:01.0000 7FFFFF0000 +-00:00:01.0000 -00:00:01.0000 7FFFFF0000 +-00:00:01.0000 -00:00:01.0000 7FFFFF0000 +-00:00:01.0000 -00:00:01.0000 7FFFFF0000 +-00:00:01.0000 -00:00:01.0000 7FFFFF0000 +-00:00:01.0000 -00:00:01.0000 7FFFFF0000 +-00:00:01.0000 -00:00:01.0000 7FFFFF0000 +-00:00:01.0000 -00:00:01.0000 7FFFFF0000 +-00:00:01.0000 -00:00:01.0000 7FFFFF0000 +-00:00:01.0000 -00:00:01.0000 7FFFFF0000 +-00:00:01.0000 -00:00:01.0000 7FFFFF0000 +-00:00:01.0000 -00:00:01.0000 7FFFFF0000 +-00:00:01.0000 -00:00:01.0000 7FFFFF0000 +-00:00:01.0000 -00:00:01.0000 7FFFFF0000 +-00:00:00.9999 -00:00:00.9999 7FFFFFD8F1 +-00:00:00.9999 -00:00:00.9999 7FFFFFD8F1 +-00:00:00.9999 -00:00:00.9999 7FFFFFD8F1 +-00:00:00.9990 -00:00:00.9990 7FFFFFD8FA +-00:00:00.9900 -00:00:00.9900 7FFFFFD954 +-00:00:00.9000 -00:00:00.9000 7FFFFFDCD8 +-00:00:00.1000 -00:00:00.1000 7FFFFFFC18 +-00:00:00.0999 -00:00:00.0999 7FFFFFFC19 +-00:00:00.0099 -00:00:00.0099 7FFFFFFF9D +-00:00:00.0009 -00:00:00.0009 7FFFFFFFF7 +-00:00:00.0000 00:00:00.0000 8000000000 +-00:00:00.0000 00:00:00.0000 8000000000 +-00:00:00.0000 00:00:00.0000 8000000000 +-00:00:00.0000 00:00:00.0000 8000000000 +-00:00:00.0000 00:00:00.0000 8000000000 +-00:00:00.0000 00:00:00.0000 8000000000 +-00:00:00.0000 00:00:00.0000 8000000000 +-00:00:00.0000 00:00:00.0000 8000000000 +-00:00:00.0000 00:00:00.0000 8000000000 +-00:00:00.0000 00:00:00.0000 8000000000 +-00:00:00.0000 00:00:00.0000 8000000000 +-00:00:00.0000 00:00:00.0000 8000000000 +-00:00:00.0000 00:00:00.0000 8000000000 +-00:00:00.0000 00:00:00.0000 8000000000 +-00:00:00.0000 00:00:00.0000 8000000000 +-00:00:00.0000 00:00:00.0000 8000000000 +-00:00:00.0000 00:00:00.0000 8000000000 +-00:00:00.0000 00:00:00.0000 8000000000 +00:00:00.0000 00:00:00.0000 8000000000 +00:00:00.0000 00:00:00.0000 8000000000 +00:00:00.0000 00:00:00.0000 8000000000 +00:00:00.0000 00:00:00.0000 8000000000 +00:00:00.0000 00:00:00.0000 8000000000 +00:00:00.0000 00:00:00.0000 8000000000 +00:00:00.0000 00:00:00.0000 8000000000 +00:00:00.0000 00:00:00.0000 8000000000 +00:00:00.0000 00:00:00.0000 8000000000 +00:00:00.0000 00:00:00.0000 8000000000 +00:00:00.0000 00:00:00.0000 8000000000 +00:00:00.0000 00:00:00.0000 8000000000 +00:00:00.0000 00:00:00.0000 8000000000 +00:00:00.0000 00:00:00.0000 8000000000 +00:00:00.0000 00:00:00.0000 8000000000 +00:00:00.0000 00:00:00.0000 8000000000 +00:00:00.0000 00:00:00.0000 8000000000 +00:00:00.0000 00:00:00.0000 8000000000 +00:00:00.0009 00:00:00.0009 8000000009 +00:00:00.0099 00:00:00.0099 8000000063 +00:00:00.0999 00:00:00.0999 80000003E7 +00:00:00.1000 00:00:00.1000 80000003E8 +00:00:00.9000 00:00:00.9000 8000002328 +00:00:00.9900 00:00:00.9900 80000026AC +00:00:00.9990 00:00:00.9990 8000002706 +00:00:00.9999 00:00:00.9999 800000270F +00:00:00.9999 00:00:00.9999 800000270F +00:00:00.9999 00:00:00.9999 800000270F +00:00:01.0000 00:00:01.0000 8000010000 +00:00:01.0000 00:00:01.0000 8000010000 +00:00:01.0000 00:00:01.0000 8000010000 +00:00:01.0000 00:00:01.0000 8000010000 +00:00:01.0000 00:00:01.0000 8000010000 +00:00:01.0000 00:00:01.0000 8000010000 +00:00:01.0000 00:00:01.0000 8000010000 +00:00:01.0000 00:00:01.0000 8000010000 +00:00:01.0000 00:00:01.0000 8000010000 +00:00:01.0000 00:00:01.0000 8000010000 +00:00:01.0000 00:00:01.0000 8000010000 +00:00:01.0000 00:00:01.0000 8000010000 +00:00:01.0000 00:00:01.0000 8000010000 +00:00:01.0000 00:00:01.0000 8000010000 +00:00:01.0000 00:00:01.0000 8000010000 +00:00:01.0000 00:00:01.0000 8000010000 +00:00:01.0000 00:00:01.0000 8000010000 +00:00:01.0000 00:00:01.0000 8000010000 +00:00:01.0009 00:00:01.0009 8000010009 +00:00:01.0099 00:00:01.0099 8000010063 +00:00:01.0900 00:00:01.0900 8000010384 +00:00:01.0999 00:00:01.0999 80000103E7 +00:00:01.1000 00:00:01.1000 80000103E8 +00:00:01.9000 00:00:01.9000 8000012328 +00:00:01.9900 00:00:01.9900 80000126AC +00:00:01.9990 00:00:01.9990 8000012706 +00:00:01.9999 00:00:01.9999 800001270F +00:00:01.9999 00:00:01.9999 800001270F +00:00:01.9999 00:00:01.9999 800001270F +00:01:00.0000 00:01:00.0000 8000400000 +00:01:00.0000 00:01:00.0000 8000400000 +00:01:00.0000 00:01:00.0000 8000400000 +00:01:00.0000 00:01:00.0000 8000400000 +00:01:00.0000 00:01:00.0000 8000400000 +00:01:00.0009 00:01:00.0009 8000400009 +00:01:00.0099 00:01:00.0099 8000400063 +00:01:00.0999 00:01:00.0999 80004003E7 +00:01:00.1000 00:01:00.1000 80004003E8 +00:01:00.9000 00:01:00.9000 8000402328 +00:01:00.9999 00:01:00.9999 800040270F +01:00:00.0000 01:00:00.0000 8010000000 +01:00:00.0000 01:00:00.0000 8010000000 +01:00:00.0000 01:00:00.0000 8010000000 +01:00:00.0000 01:00:00.0000 8010000000 +01:00:00.0000 01:00:00.0000 8010000000 +01:00:00.0009 01:00:00.0009 8010000009 +01:00:00.0099 01:00:00.0099 8010000063 +01:00:00.0999 01:00:00.0999 80100003E7 +01:00:00.1000 01:00:00.1000 80100003E8 +01:00:00.9000 01:00:00.9000 8010002328 +01:00:00.9900 01:00:00.9900 80100026AC +01:00:00.9990 01:00:00.9990 8010002706 +01:00:00.9999 01:00:00.9999 801000270F +01:00:00.9999 01:00:00.9999 801000270F +01:00:00.9999 01:00:00.9999 801000270F +838:59:58.0000 838:59:58.0000 B46EFA0000 +838:59:58.0000 838:59:58.0000 B46EFA0000 +838:59:58.0000 838:59:58.0000 B46EFA0000 +838:59:58.0000 838:59:58.0000 B46EFA0000 +838:59:58.0000 838:59:58.0000 B46EFA0000 +838:59:58.0009 838:59:58.0009 B46EFA0009 +838:59:58.0099 838:59:58.0099 B46EFA0063 +838:59:58.0999 838:59:58.0999 B46EFA03E7 +838:59:58.1000 838:59:58.1000 B46EFA03E8 +838:59:58.9000 838:59:58.9000 B46EFA2328 +838:59:58.9900 838:59:58.9900 B46EFA26AC +838:59:58.9990 838:59:58.9990 B46EFA2706 +838:59:58.9999 838:59:58.9999 B46EFA270F +838:59:58.9999 838:59:58.9999 B46EFA270F +838:59:58.9999 838:59:58.9999 B46EFA270F +838:59:59.0000 838:59:59.0000 B46EFB0000 +SELECT a3, t3, HEX(WEIGHT_STRING(t3)) FROM t1 ORDER BY t3, a6; +a3 t3 HEX(WEIGHT_STRING(t3)) +-838:59:59.000 -838:59:59.000 4B91050000 +-838:59:58.999 -838:59:58.999 4B9105D8FA +-838:59:58.999 -838:59:58.999 4B9105D8FA +-838:59:58.999 -838:59:58.999 4B9105D8FA +-838:59:58.999 -838:59:58.999 4B9105D8FA +-838:59:58.990 -838:59:58.990 4B9105D954 +-838:59:58.900 -838:59:58.900 4B9105DCD8 +-838:59:58.100 -838:59:58.100 4B9105FC18 +-838:59:58.099 -838:59:58.099 4B9105FC22 +-838:59:58.009 -838:59:58.009 4B9105FFA6 +-838:59:58.000 -838:59:58.000 4B91060000 +-838:59:58.000 -838:59:58.000 4B91060000 +-838:59:58.000 -838:59:58.000 4B91060000 +-838:59:58.000 -838:59:58.000 4B91060000 +-838:59:58.000 -838:59:58.000 4B91060000 +-838:59:58.000 -838:59:58.000 4B91060000 +-01:00:00.999 -01:00:00.999 7FEFFFD8FA +-01:00:00.999 -01:00:00.999 7FEFFFD8FA +-01:00:00.999 -01:00:00.999 7FEFFFD8FA +-01:00:00.999 -01:00:00.999 7FEFFFD8FA +-01:00:00.990 -01:00:00.990 7FEFFFD954 +-01:00:00.900 -01:00:00.900 7FEFFFDCD8 +-01:00:00.100 -01:00:00.100 7FEFFFFC18 +-01:00:00.099 -01:00:00.099 7FEFFFFC22 +-01:00:00.009 -01:00:00.009 7FEFFFFFA6 +-01:00:00.000 -01:00:00.000 7FF0000000 +-01:00:00.000 -01:00:00.000 7FF0000000 +-01:00:00.000 -01:00:00.000 7FF0000000 +-01:00:00.000 -01:00:00.000 7FF0000000 +-01:00:00.000 -01:00:00.000 7FF0000000 +-01:00:00.000 -01:00:00.000 7FF0000000 +-00:01:00.999 -00:01:00.999 7FFFBFD8FA +-00:01:00.900 -00:01:00.900 7FFFBFDCD8 +-00:01:00.100 -00:01:00.100 7FFFBFFC18 +-00:01:00.099 -00:01:00.099 7FFFBFFC22 +-00:01:00.009 -00:01:00.009 7FFFBFFFA6 +-00:01:00.000 -00:01:00.000 7FFFC00000 +-00:01:00.000 -00:01:00.000 7FFFC00000 +-00:01:00.000 -00:01:00.000 7FFFC00000 +-00:01:00.000 -00:01:00.000 7FFFC00000 +-00:01:00.000 -00:01:00.000 7FFFC00000 +-00:01:00.000 -00:01:00.000 7FFFC00000 +-00:00:01.999 -00:00:01.999 7FFFFED8FA +-00:00:01.999 -00:00:01.999 7FFFFED8FA +-00:00:01.999 -00:00:01.999 7FFFFED8FA +-00:00:01.999 -00:00:01.999 7FFFFED8FA +-00:00:01.990 -00:00:01.990 7FFFFED954 +-00:00:01.900 -00:00:01.900 7FFFFEDCD8 +-00:00:01.100 -00:00:01.100 7FFFFEFC18 +-00:00:01.099 -00:00:01.099 7FFFFEFC22 +-00:00:01.090 -00:00:01.090 7FFFFEFC7C +-00:00:01.009 -00:00:01.009 7FFFFEFFA6 +-00:00:01.000 -00:00:01.000 7FFFFF0000 +-00:00:01.000 -00:00:01.000 7FFFFF0000 +-00:00:01.000 -00:00:01.000 7FFFFF0000 +-00:00:01.000 -00:00:01.000 7FFFFF0000 +-00:00:01.000 -00:00:01.000 7FFFFF0000 +-00:00:01.000 -00:00:01.000 7FFFFF0000 +-00:00:01.000 -00:00:01.000 7FFFFF0000 +-00:00:01.000 -00:00:01.000 7FFFFF0000 +-00:00:01.000 -00:00:01.000 7FFFFF0000 +-00:00:01.000 -00:00:01.000 7FFFFF0000 +-00:00:01.000 -00:00:01.000 7FFFFF0000 +-00:00:01.000 -00:00:01.000 7FFFFF0000 +-00:00:01.000 -00:00:01.000 7FFFFF0000 +-00:00:01.000 -00:00:01.000 7FFFFF0000 +-00:00:01.000 -00:00:01.000 7FFFFF0000 +-00:00:01.000 -00:00:01.000 7FFFFF0000 +-00:00:01.000 -00:00:01.000 7FFFFF0000 +-00:00:01.000 -00:00:01.000 7FFFFF0000 +-00:00:01.000 -00:00:01.000 7FFFFF0000 +-00:00:00.999 -00:00:00.999 7FFFFFD8FA +-00:00:00.999 -00:00:00.999 7FFFFFD8FA +-00:00:00.999 -00:00:00.999 7FFFFFD8FA +-00:00:00.999 -00:00:00.999 7FFFFFD8FA +-00:00:00.990 -00:00:00.990 7FFFFFD954 +-00:00:00.900 -00:00:00.900 7FFFFFDCD8 +-00:00:00.100 -00:00:00.100 7FFFFFFC18 +-00:00:00.099 -00:00:00.099 7FFFFFFC22 +-00:00:00.009 -00:00:00.009 7FFFFFFFA6 +-00:00:00.000 00:00:00.000 8000000000 +-00:00:00.000 00:00:00.000 8000000000 +-00:00:00.000 00:00:00.000 8000000000 +-00:00:00.000 00:00:00.000 8000000000 +-00:00:00.000 00:00:00.000 8000000000 +-00:00:00.000 00:00:00.000 8000000000 +-00:00:00.000 00:00:00.000 8000000000 +-00:00:00.000 00:00:00.000 8000000000 +-00:00:00.000 00:00:00.000 8000000000 +-00:00:00.000 00:00:00.000 8000000000 +-00:00:00.000 00:00:00.000 8000000000 +-00:00:00.000 00:00:00.000 8000000000 +-00:00:00.000 00:00:00.000 8000000000 +-00:00:00.000 00:00:00.000 8000000000 +-00:00:00.000 00:00:00.000 8000000000 +-00:00:00.000 00:00:00.000 8000000000 +-00:00:00.000 00:00:00.000 8000000000 +-00:00:00.000 00:00:00.000 8000000000 +-00:00:00.000 00:00:00.000 8000000000 +00:00:00.000 00:00:00.000 8000000000 +00:00:00.000 00:00:00.000 8000000000 +00:00:00.000 00:00:00.000 8000000000 +00:00:00.000 00:00:00.000 8000000000 +00:00:00.000 00:00:00.000 8000000000 +00:00:00.000 00:00:00.000 8000000000 +00:00:00.000 00:00:00.000 8000000000 +00:00:00.000 00:00:00.000 8000000000 +00:00:00.000 00:00:00.000 8000000000 +00:00:00.000 00:00:00.000 8000000000 +00:00:00.000 00:00:00.000 8000000000 +00:00:00.000 00:00:00.000 8000000000 +00:00:00.000 00:00:00.000 8000000000 +00:00:00.000 00:00:00.000 8000000000 +00:00:00.000 00:00:00.000 8000000000 +00:00:00.000 00:00:00.000 8000000000 +00:00:00.000 00:00:00.000 8000000000 +00:00:00.000 00:00:00.000 8000000000 +00:00:00.000 00:00:00.000 8000000000 +00:00:00.009 00:00:00.009 800000005A +00:00:00.099 00:00:00.099 80000003DE +00:00:00.100 00:00:00.100 80000003E8 +00:00:00.900 00:00:00.900 8000002328 +00:00:00.990 00:00:00.990 80000026AC +00:00:00.999 00:00:00.999 8000002706 +00:00:00.999 00:00:00.999 8000002706 +00:00:00.999 00:00:00.999 8000002706 +00:00:00.999 00:00:00.999 8000002706 +00:00:01.000 00:00:01.000 8000010000 +00:00:01.000 00:00:01.000 8000010000 +00:00:01.000 00:00:01.000 8000010000 +00:00:01.000 00:00:01.000 8000010000 +00:00:01.000 00:00:01.000 8000010000 +00:00:01.000 00:00:01.000 8000010000 +00:00:01.000 00:00:01.000 8000010000 +00:00:01.000 00:00:01.000 8000010000 +00:00:01.000 00:00:01.000 8000010000 +00:00:01.000 00:00:01.000 8000010000 +00:00:01.000 00:00:01.000 8000010000 +00:00:01.000 00:00:01.000 8000010000 +00:00:01.000 00:00:01.000 8000010000 +00:00:01.000 00:00:01.000 8000010000 +00:00:01.000 00:00:01.000 8000010000 +00:00:01.000 00:00:01.000 8000010000 +00:00:01.000 00:00:01.000 8000010000 +00:00:01.000 00:00:01.000 8000010000 +00:00:01.000 00:00:01.000 8000010000 +00:00:01.009 00:00:01.009 800001005A +00:00:01.090 00:00:01.090 8000010384 +00:00:01.099 00:00:01.099 80000103DE +00:00:01.100 00:00:01.100 80000103E8 +00:00:01.900 00:00:01.900 8000012328 +00:00:01.990 00:00:01.990 80000126AC +00:00:01.999 00:00:01.999 8000012706 +00:00:01.999 00:00:01.999 8000012706 +00:00:01.999 00:00:01.999 8000012706 +00:00:01.999 00:00:01.999 8000012706 +00:01:00.000 00:01:00.000 8000400000 +00:01:00.000 00:01:00.000 8000400000 +00:01:00.000 00:01:00.000 8000400000 +00:01:00.000 00:01:00.000 8000400000 +00:01:00.000 00:01:00.000 8000400000 +00:01:00.000 00:01:00.000 8000400000 +00:01:00.009 00:01:00.009 800040005A +00:01:00.099 00:01:00.099 80004003DE +00:01:00.100 00:01:00.100 80004003E8 +00:01:00.900 00:01:00.900 8000402328 +00:01:00.999 00:01:00.999 8000402706 +01:00:00.000 01:00:00.000 8010000000 +01:00:00.000 01:00:00.000 8010000000 +01:00:00.000 01:00:00.000 8010000000 +01:00:00.000 01:00:00.000 8010000000 +01:00:00.000 01:00:00.000 8010000000 +01:00:00.000 01:00:00.000 8010000000 +01:00:00.009 01:00:00.009 801000005A +01:00:00.099 01:00:00.099 80100003DE +01:00:00.100 01:00:00.100 80100003E8 +01:00:00.900 01:00:00.900 8010002328 +01:00:00.990 01:00:00.990 80100026AC +01:00:00.999 01:00:00.999 8010002706 +01:00:00.999 01:00:00.999 8010002706 +01:00:00.999 01:00:00.999 8010002706 +01:00:00.999 01:00:00.999 8010002706 +838:59:58.000 838:59:58.000 B46EFA0000 +838:59:58.000 838:59:58.000 B46EFA0000 +838:59:58.000 838:59:58.000 B46EFA0000 +838:59:58.000 838:59:58.000 B46EFA0000 +838:59:58.000 838:59:58.000 B46EFA0000 +838:59:58.000 838:59:58.000 B46EFA0000 +838:59:58.009 838:59:58.009 B46EFA005A +838:59:58.099 838:59:58.099 B46EFA03DE +838:59:58.100 838:59:58.100 B46EFA03E8 +838:59:58.900 838:59:58.900 B46EFA2328 +838:59:58.990 838:59:58.990 B46EFA26AC +838:59:58.999 838:59:58.999 B46EFA2706 +838:59:58.999 838:59:58.999 B46EFA2706 +838:59:58.999 838:59:58.999 B46EFA2706 +838:59:58.999 838:59:58.999 B46EFA2706 +838:59:59.000 838:59:59.000 B46EFB0000 +SELECT a2, t2, HEX(WEIGHT_STRING(t2)) FROM t1 ORDER BY t2, a6; +a2 t2 HEX(WEIGHT_STRING(t2)) +-838:59:59.00 -838:59:59.00 4B910500 +-838:59:58.99 -838:59:58.99 4B91059D +-838:59:58.99 -838:59:58.99 4B91059D +-838:59:58.99 -838:59:58.99 4B91059D +-838:59:58.99 -838:59:58.99 4B91059D +-838:59:58.99 -838:59:58.99 4B91059D +-838:59:58.90 -838:59:58.90 4B9105A6 +-838:59:58.10 -838:59:58.10 4B9105F6 +-838:59:58.09 -838:59:58.09 4B9105F7 +-838:59:58.00 -838:59:58.00 4B910600 +-838:59:58.00 -838:59:58.00 4B910600 +-838:59:58.00 -838:59:58.00 4B910600 +-838:59:58.00 -838:59:58.00 4B910600 +-838:59:58.00 -838:59:58.00 4B910600 +-838:59:58.00 -838:59:58.00 4B910600 +-838:59:58.00 -838:59:58.00 4B910600 +-01:00:00.99 -01:00:00.99 7FEFFF9D +-01:00:00.99 -01:00:00.99 7FEFFF9D +-01:00:00.99 -01:00:00.99 7FEFFF9D +-01:00:00.99 -01:00:00.99 7FEFFF9D +-01:00:00.99 -01:00:00.99 7FEFFF9D +-01:00:00.90 -01:00:00.90 7FEFFFA6 +-01:00:00.10 -01:00:00.10 7FEFFFF6 +-01:00:00.09 -01:00:00.09 7FEFFFF7 +-01:00:00.00 -01:00:00.00 7FF00000 +-01:00:00.00 -01:00:00.00 7FF00000 +-01:00:00.00 -01:00:00.00 7FF00000 +-01:00:00.00 -01:00:00.00 7FF00000 +-01:00:00.00 -01:00:00.00 7FF00000 +-01:00:00.00 -01:00:00.00 7FF00000 +-01:00:00.00 -01:00:00.00 7FF00000 +-00:01:00.99 -00:01:00.99 7FFFBF9D +-00:01:00.90 -00:01:00.90 7FFFBFA6 +-00:01:00.10 -00:01:00.10 7FFFBFF6 +-00:01:00.09 -00:01:00.09 7FFFBFF7 +-00:01:00.00 -00:01:00.00 7FFFC000 +-00:01:00.00 -00:01:00.00 7FFFC000 +-00:01:00.00 -00:01:00.00 7FFFC000 +-00:01:00.00 -00:01:00.00 7FFFC000 +-00:01:00.00 -00:01:00.00 7FFFC000 +-00:01:00.00 -00:01:00.00 7FFFC000 +-00:01:00.00 -00:01:00.00 7FFFC000 +-00:00:01.99 -00:00:01.99 7FFFFE9D +-00:00:01.99 -00:00:01.99 7FFFFE9D +-00:00:01.99 -00:00:01.99 7FFFFE9D +-00:00:01.99 -00:00:01.99 7FFFFE9D +-00:00:01.99 -00:00:01.99 7FFFFE9D +-00:00:01.90 -00:00:01.90 7FFFFEA6 +-00:00:01.10 -00:00:01.10 7FFFFEF6 +-00:00:01.09 -00:00:01.09 7FFFFEF7 +-00:00:01.09 -00:00:01.09 7FFFFEF7 +-00:00:01.00 -00:00:01.00 7FFFFF00 +-00:00:01.00 -00:00:01.00 7FFFFF00 +-00:00:01.00 -00:00:01.00 7FFFFF00 +-00:00:01.00 -00:00:01.00 7FFFFF00 +-00:00:01.00 -00:00:01.00 7FFFFF00 +-00:00:01.00 -00:00:01.00 7FFFFF00 +-00:00:01.00 -00:00:01.00 7FFFFF00 +-00:00:01.00 -00:00:01.00 7FFFFF00 +-00:00:01.00 -00:00:01.00 7FFFFF00 +-00:00:01.00 -00:00:01.00 7FFFFF00 +-00:00:01.00 -00:00:01.00 7FFFFF00 +-00:00:01.00 -00:00:01.00 7FFFFF00 +-00:00:01.00 -00:00:01.00 7FFFFF00 +-00:00:01.00 -00:00:01.00 7FFFFF00 +-00:00:01.00 -00:00:01.00 7FFFFF00 +-00:00:01.00 -00:00:01.00 7FFFFF00 +-00:00:01.00 -00:00:01.00 7FFFFF00 +-00:00:01.00 -00:00:01.00 7FFFFF00 +-00:00:01.00 -00:00:01.00 7FFFFF00 +-00:00:01.00 -00:00:01.00 7FFFFF00 +-00:00:00.99 -00:00:00.99 7FFFFF9D +-00:00:00.99 -00:00:00.99 7FFFFF9D +-00:00:00.99 -00:00:00.99 7FFFFF9D +-00:00:00.99 -00:00:00.99 7FFFFF9D +-00:00:00.99 -00:00:00.99 7FFFFF9D +-00:00:00.90 -00:00:00.90 7FFFFFA6 +-00:00:00.10 -00:00:00.10 7FFFFFF6 +-00:00:00.09 -00:00:00.09 7FFFFFF7 +-00:00:00.00 00:00:00.00 80000000 +-00:00:00.00 00:00:00.00 80000000 +-00:00:00.00 00:00:00.00 80000000 +-00:00:00.00 00:00:00.00 80000000 +-00:00:00.00 00:00:00.00 80000000 +-00:00:00.00 00:00:00.00 80000000 +-00:00:00.00 00:00:00.00 80000000 +-00:00:00.00 00:00:00.00 80000000 +-00:00:00.00 00:00:00.00 80000000 +-00:00:00.00 00:00:00.00 80000000 +-00:00:00.00 00:00:00.00 80000000 +-00:00:00.00 00:00:00.00 80000000 +-00:00:00.00 00:00:00.00 80000000 +-00:00:00.00 00:00:00.00 80000000 +-00:00:00.00 00:00:00.00 80000000 +-00:00:00.00 00:00:00.00 80000000 +-00:00:00.00 00:00:00.00 80000000 +-00:00:00.00 00:00:00.00 80000000 +-00:00:00.00 00:00:00.00 80000000 +-00:00:00.00 00:00:00.00 80000000 +00:00:00.00 00:00:00.00 80000000 +00:00:00.00 00:00:00.00 80000000 +00:00:00.00 00:00:00.00 80000000 +00:00:00.00 00:00:00.00 80000000 +00:00:00.00 00:00:00.00 80000000 +00:00:00.00 00:00:00.00 80000000 +00:00:00.00 00:00:00.00 80000000 +00:00:00.00 00:00:00.00 80000000 +00:00:00.00 00:00:00.00 80000000 +00:00:00.00 00:00:00.00 80000000 +00:00:00.00 00:00:00.00 80000000 +00:00:00.00 00:00:00.00 80000000 +00:00:00.00 00:00:00.00 80000000 +00:00:00.00 00:00:00.00 80000000 +00:00:00.00 00:00:00.00 80000000 +00:00:00.00 00:00:00.00 80000000 +00:00:00.00 00:00:00.00 80000000 +00:00:00.00 00:00:00.00 80000000 +00:00:00.00 00:00:00.00 80000000 +00:00:00.00 00:00:00.00 80000000 +00:00:00.09 00:00:00.09 80000009 +00:00:00.10 00:00:00.10 8000000A +00:00:00.90 00:00:00.90 8000005A +00:00:00.99 00:00:00.99 80000063 +00:00:00.99 00:00:00.99 80000063 +00:00:00.99 00:00:00.99 80000063 +00:00:00.99 00:00:00.99 80000063 +00:00:00.99 00:00:00.99 80000063 +00:00:01.00 00:00:01.00 80000100 +00:00:01.00 00:00:01.00 80000100 +00:00:01.00 00:00:01.00 80000100 +00:00:01.00 00:00:01.00 80000100 +00:00:01.00 00:00:01.00 80000100 +00:00:01.00 00:00:01.00 80000100 +00:00:01.00 00:00:01.00 80000100 +00:00:01.00 00:00:01.00 80000100 +00:00:01.00 00:00:01.00 80000100 +00:00:01.00 00:00:01.00 80000100 +00:00:01.00 00:00:01.00 80000100 +00:00:01.00 00:00:01.00 80000100 +00:00:01.00 00:00:01.00 80000100 +00:00:01.00 00:00:01.00 80000100 +00:00:01.00 00:00:01.00 80000100 +00:00:01.00 00:00:01.00 80000100 +00:00:01.00 00:00:01.00 80000100 +00:00:01.00 00:00:01.00 80000100 +00:00:01.00 00:00:01.00 80000100 +00:00:01.00 00:00:01.00 80000100 +00:00:01.09 00:00:01.09 80000109 +00:00:01.09 00:00:01.09 80000109 +00:00:01.10 00:00:01.10 8000010A +00:00:01.90 00:00:01.90 8000015A +00:00:01.99 00:00:01.99 80000163 +00:00:01.99 00:00:01.99 80000163 +00:00:01.99 00:00:01.99 80000163 +00:00:01.99 00:00:01.99 80000163 +00:00:01.99 00:00:01.99 80000163 +00:01:00.00 00:01:00.00 80004000 +00:01:00.00 00:01:00.00 80004000 +00:01:00.00 00:01:00.00 80004000 +00:01:00.00 00:01:00.00 80004000 +00:01:00.00 00:01:00.00 80004000 +00:01:00.00 00:01:00.00 80004000 +00:01:00.00 00:01:00.00 80004000 +00:01:00.09 00:01:00.09 80004009 +00:01:00.10 00:01:00.10 8000400A +00:01:00.90 00:01:00.90 8000405A +00:01:00.99 00:01:00.99 80004063 +01:00:00.00 01:00:00.00 80100000 +01:00:00.00 01:00:00.00 80100000 +01:00:00.00 01:00:00.00 80100000 +01:00:00.00 01:00:00.00 80100000 +01:00:00.00 01:00:00.00 80100000 +01:00:00.00 01:00:00.00 80100000 +01:00:00.00 01:00:00.00 80100000 +01:00:00.09 01:00:00.09 80100009 +01:00:00.10 01:00:00.10 8010000A +01:00:00.90 01:00:00.90 8010005A +01:00:00.99 01:00:00.99 80100063 +01:00:00.99 01:00:00.99 80100063 +01:00:00.99 01:00:00.99 80100063 +01:00:00.99 01:00:00.99 80100063 +01:00:00.99 01:00:00.99 80100063 +838:59:58.00 838:59:58.00 B46EFA00 +838:59:58.00 838:59:58.00 B46EFA00 +838:59:58.00 838:59:58.00 B46EFA00 +838:59:58.00 838:59:58.00 B46EFA00 +838:59:58.00 838:59:58.00 B46EFA00 +838:59:58.00 838:59:58.00 B46EFA00 +838:59:58.00 838:59:58.00 B46EFA00 +838:59:58.09 838:59:58.09 B46EFA09 +838:59:58.10 838:59:58.10 B46EFA0A +838:59:58.90 838:59:58.90 B46EFA5A +838:59:58.99 838:59:58.99 B46EFA63 +838:59:58.99 838:59:58.99 B46EFA63 +838:59:58.99 838:59:58.99 B46EFA63 +838:59:58.99 838:59:58.99 B46EFA63 +838:59:58.99 838:59:58.99 B46EFA63 +838:59:59.00 838:59:59.00 B46EFB00 +SELECT a1, t1, HEX(WEIGHT_STRING(t1)) FROM t1 ORDER BY t1, a6; +a1 t1 HEX(WEIGHT_STRING(t1)) +-838:59:59.0 -838:59:59.0 4B910500 +-838:59:58.9 -838:59:58.9 4B9105A6 +-838:59:58.9 -838:59:58.9 4B9105A6 +-838:59:58.9 -838:59:58.9 4B9105A6 +-838:59:58.9 -838:59:58.9 4B9105A6 +-838:59:58.9 -838:59:58.9 4B9105A6 +-838:59:58.9 -838:59:58.9 4B9105A6 +-838:59:58.1 -838:59:58.1 4B9105F6 +-838:59:58.0 -838:59:58.0 4B910600 +-838:59:58.0 -838:59:58.0 4B910600 +-838:59:58.0 -838:59:58.0 4B910600 +-838:59:58.0 -838:59:58.0 4B910600 +-838:59:58.0 -838:59:58.0 4B910600 +-838:59:58.0 -838:59:58.0 4B910600 +-838:59:58.0 -838:59:58.0 4B910600 +-838:59:58.0 -838:59:58.0 4B910600 +-01:00:00.9 -01:00:00.9 7FEFFFA6 +-01:00:00.9 -01:00:00.9 7FEFFFA6 +-01:00:00.9 -01:00:00.9 7FEFFFA6 +-01:00:00.9 -01:00:00.9 7FEFFFA6 +-01:00:00.9 -01:00:00.9 7FEFFFA6 +-01:00:00.9 -01:00:00.9 7FEFFFA6 +-01:00:00.1 -01:00:00.1 7FEFFFF6 +-01:00:00.0 -01:00:00.0 7FF00000 +-01:00:00.0 -01:00:00.0 7FF00000 +-01:00:00.0 -01:00:00.0 7FF00000 +-01:00:00.0 -01:00:00.0 7FF00000 +-01:00:00.0 -01:00:00.0 7FF00000 +-01:00:00.0 -01:00:00.0 7FF00000 +-01:00:00.0 -01:00:00.0 7FF00000 +-01:00:00.0 -01:00:00.0 7FF00000 +-00:01:00.9 -00:01:00.9 7FFFBFA6 +-00:01:00.9 -00:01:00.9 7FFFBFA6 +-00:01:00.1 -00:01:00.1 7FFFBFF6 +-00:01:00.0 -00:01:00.0 7FFFC000 +-00:01:00.0 -00:01:00.0 7FFFC000 +-00:01:00.0 -00:01:00.0 7FFFC000 +-00:01:00.0 -00:01:00.0 7FFFC000 +-00:01:00.0 -00:01:00.0 7FFFC000 +-00:01:00.0 -00:01:00.0 7FFFC000 +-00:01:00.0 -00:01:00.0 7FFFC000 +-00:01:00.0 -00:01:00.0 7FFFC000 +-00:00:01.9 -00:00:01.9 7FFFFEA6 +-00:00:01.9 -00:00:01.9 7FFFFEA6 +-00:00:01.9 -00:00:01.9 7FFFFEA6 +-00:00:01.9 -00:00:01.9 7FFFFEA6 +-00:00:01.9 -00:00:01.9 7FFFFEA6 +-00:00:01.9 -00:00:01.9 7FFFFEA6 +-00:00:01.1 -00:00:01.1 7FFFFEF6 +-00:00:01.0 -00:00:01.0 7FFFFF00 +-00:00:01.0 -00:00:01.0 7FFFFF00 +-00:00:01.0 -00:00:01.0 7FFFFF00 +-00:00:01.0 -00:00:01.0 7FFFFF00 +-00:00:01.0 -00:00:01.0 7FFFFF00 +-00:00:01.0 -00:00:01.0 7FFFFF00 +-00:00:01.0 -00:00:01.0 7FFFFF00 +-00:00:01.0 -00:00:01.0 7FFFFF00 +-00:00:01.0 -00:00:01.0 7FFFFF00 +-00:00:01.0 -00:00:01.0 7FFFFF00 +-00:00:01.0 -00:00:01.0 7FFFFF00 +-00:00:01.0 -00:00:01.0 7FFFFF00 +-00:00:01.0 -00:00:01.0 7FFFFF00 +-00:00:01.0 -00:00:01.0 7FFFFF00 +-00:00:01.0 -00:00:01.0 7FFFFF00 +-00:00:01.0 -00:00:01.0 7FFFFF00 +-00:00:01.0 -00:00:01.0 7FFFFF00 +-00:00:01.0 -00:00:01.0 7FFFFF00 +-00:00:01.0 -00:00:01.0 7FFFFF00 +-00:00:01.0 -00:00:01.0 7FFFFF00 +-00:00:01.0 -00:00:01.0 7FFFFF00 +-00:00:01.0 -00:00:01.0 7FFFFF00 +-00:00:00.9 -00:00:00.9 7FFFFFA6 +-00:00:00.9 -00:00:00.9 7FFFFFA6 +-00:00:00.9 -00:00:00.9 7FFFFFA6 +-00:00:00.9 -00:00:00.9 7FFFFFA6 +-00:00:00.9 -00:00:00.9 7FFFFFA6 +-00:00:00.9 -00:00:00.9 7FFFFFA6 +-00:00:00.1 -00:00:00.1 7FFFFFF6 +-00:00:00.0 00:00:00.0 80000000 +-00:00:00.0 00:00:00.0 80000000 +-00:00:00.0 00:00:00.0 80000000 +-00:00:00.0 00:00:00.0 80000000 +-00:00:00.0 00:00:00.0 80000000 +-00:00:00.0 00:00:00.0 80000000 +-00:00:00.0 00:00:00.0 80000000 +-00:00:00.0 00:00:00.0 80000000 +-00:00:00.0 00:00:00.0 80000000 +-00:00:00.0 00:00:00.0 80000000 +-00:00:00.0 00:00:00.0 80000000 +-00:00:00.0 00:00:00.0 80000000 +-00:00:00.0 00:00:00.0 80000000 +-00:00:00.0 00:00:00.0 80000000 +-00:00:00.0 00:00:00.0 80000000 +-00:00:00.0 00:00:00.0 80000000 +-00:00:00.0 00:00:00.0 80000000 +-00:00:00.0 00:00:00.0 80000000 +-00:00:00.0 00:00:00.0 80000000 +-00:00:00.0 00:00:00.0 80000000 +-00:00:00.0 00:00:00.0 80000000 +00:00:00.0 00:00:00.0 80000000 +00:00:00.0 00:00:00.0 80000000 +00:00:00.0 00:00:00.0 80000000 +00:00:00.0 00:00:00.0 80000000 +00:00:00.0 00:00:00.0 80000000 +00:00:00.0 00:00:00.0 80000000 +00:00:00.0 00:00:00.0 80000000 +00:00:00.0 00:00:00.0 80000000 +00:00:00.0 00:00:00.0 80000000 +00:00:00.0 00:00:00.0 80000000 +00:00:00.0 00:00:00.0 80000000 +00:00:00.0 00:00:00.0 80000000 +00:00:00.0 00:00:00.0 80000000 +00:00:00.0 00:00:00.0 80000000 +00:00:00.0 00:00:00.0 80000000 +00:00:00.0 00:00:00.0 80000000 +00:00:00.0 00:00:00.0 80000000 +00:00:00.0 00:00:00.0 80000000 +00:00:00.0 00:00:00.0 80000000 +00:00:00.0 00:00:00.0 80000000 +00:00:00.0 00:00:00.0 80000000 +00:00:00.1 00:00:00.1 8000000A +00:00:00.9 00:00:00.9 8000005A +00:00:00.9 00:00:00.9 8000005A +00:00:00.9 00:00:00.9 8000005A +00:00:00.9 00:00:00.9 8000005A +00:00:00.9 00:00:00.9 8000005A +00:00:00.9 00:00:00.9 8000005A +00:00:01.0 00:00:01.0 80000100 +00:00:01.0 00:00:01.0 80000100 +00:00:01.0 00:00:01.0 80000100 +00:00:01.0 00:00:01.0 80000100 +00:00:01.0 00:00:01.0 80000100 +00:00:01.0 00:00:01.0 80000100 +00:00:01.0 00:00:01.0 80000100 +00:00:01.0 00:00:01.0 80000100 +00:00:01.0 00:00:01.0 80000100 +00:00:01.0 00:00:01.0 80000100 +00:00:01.0 00:00:01.0 80000100 +00:00:01.0 00:00:01.0 80000100 +00:00:01.0 00:00:01.0 80000100 +00:00:01.0 00:00:01.0 80000100 +00:00:01.0 00:00:01.0 80000100 +00:00:01.0 00:00:01.0 80000100 +00:00:01.0 00:00:01.0 80000100 +00:00:01.0 00:00:01.0 80000100 +00:00:01.0 00:00:01.0 80000100 +00:00:01.0 00:00:01.0 80000100 +00:00:01.0 00:00:01.0 80000100 +00:00:01.0 00:00:01.0 80000100 +00:00:01.1 00:00:01.1 8000010A +00:00:01.9 00:00:01.9 8000015A +00:00:01.9 00:00:01.9 8000015A +00:00:01.9 00:00:01.9 8000015A +00:00:01.9 00:00:01.9 8000015A +00:00:01.9 00:00:01.9 8000015A +00:00:01.9 00:00:01.9 8000015A +00:01:00.0 00:01:00.0 80004000 +00:01:00.0 00:01:00.0 80004000 +00:01:00.0 00:01:00.0 80004000 +00:01:00.0 00:01:00.0 80004000 +00:01:00.0 00:01:00.0 80004000 +00:01:00.0 00:01:00.0 80004000 +00:01:00.0 00:01:00.0 80004000 +00:01:00.0 00:01:00.0 80004000 +00:01:00.1 00:01:00.1 8000400A +00:01:00.9 00:01:00.9 8000405A +00:01:00.9 00:01:00.9 8000405A +01:00:00.0 01:00:00.0 80100000 +01:00:00.0 01:00:00.0 80100000 +01:00:00.0 01:00:00.0 80100000 +01:00:00.0 01:00:00.0 80100000 +01:00:00.0 01:00:00.0 80100000 +01:00:00.0 01:00:00.0 80100000 +01:00:00.0 01:00:00.0 80100000 +01:00:00.0 01:00:00.0 80100000 +01:00:00.1 01:00:00.1 8010000A +01:00:00.9 01:00:00.9 8010005A +01:00:00.9 01:00:00.9 8010005A +01:00:00.9 01:00:00.9 8010005A +01:00:00.9 01:00:00.9 8010005A +01:00:00.9 01:00:00.9 8010005A +01:00:00.9 01:00:00.9 8010005A +838:59:58.0 838:59:58.0 B46EFA00 +838:59:58.0 838:59:58.0 B46EFA00 +838:59:58.0 838:59:58.0 B46EFA00 +838:59:58.0 838:59:58.0 B46EFA00 +838:59:58.0 838:59:58.0 B46EFA00 +838:59:58.0 838:59:58.0 B46EFA00 +838:59:58.0 838:59:58.0 B46EFA00 +838:59:58.0 838:59:58.0 B46EFA00 +838:59:58.1 838:59:58.1 B46EFA0A +838:59:58.9 838:59:58.9 B46EFA5A +838:59:58.9 838:59:58.9 B46EFA5A +838:59:58.9 838:59:58.9 B46EFA5A +838:59:58.9 838:59:58.9 B46EFA5A +838:59:58.9 838:59:58.9 B46EFA5A +838:59:58.9 838:59:58.9 B46EFA5A +838:59:59.0 838:59:59.0 B46EFB00 +CREATE VIEW v1 AS +SELECT a6, t0, t1, t2, t3, t4, t5, t6, +HEX(WEIGHT_STRING(t0)) as wst0, +HEX(WEIGHT_STRING(t1)) as wst1, +HEX(WEIGHT_STRING(t2)) as wst2, +HEX(WEIGHT_STRING(t3)) as wst3, +HEX(WEIGHT_STRING(t4)) as wst4, +HEX(WEIGHT_STRING(t5)) as wst5, +HEX(WEIGHT_STRING(t6)) as wst6 +FROM t1; +SELECT * FROM v1 WHERE a6 LIKE '%.999999' ORDER BY a6, t6;; +a6 -00:00:00.999999 +t0 00:00:00 +t1 -00:00:00.9 +t2 -00:00:00.99 +t3 -00:00:00.999 +t4 -00:00:00.9999 +t5 -00:00:00.99999 +t6 -00:00:00.999999 +wst0 800000 +wst1 7FFFFFA6 +wst2 7FFFFF9D +wst3 7FFFFFD8FA +wst4 7FFFFFD8F1 +wst5 7FFFFFF0BDCA +wst6 7FFFFFF0BDC1 +a6 -00:00:01.999999 +t0 -00:00:01 +t1 -00:00:01.9 +t2 -00:00:01.99 +t3 -00:00:01.999 +t4 -00:00:01.9999 +t5 -00:00:01.99999 +t6 -00:00:01.999999 +wst0 7FFFFF +wst1 7FFFFEA6 +wst2 7FFFFE9D +wst3 7FFFFED8FA +wst4 7FFFFED8F1 +wst5 7FFFFEF0BDCA +wst6 7FFFFEF0BDC1 +a6 -00:01:00.999999 +t0 -00:01:00 +t1 -00:01:00.9 +t2 -00:01:00.99 +t3 -00:01:00.999 +t4 -00:01:00.9999 +t5 -00:01:00.99999 +t6 -00:01:00.999999 +wst0 7FFFC0 +wst1 7FFFBFA6 +wst2 7FFFBF9D +wst3 7FFFBFD8FA +wst4 7FFFBFD8F1 +wst5 7FFFBFF0BDCA +wst6 7FFFBFF0BDC1 +a6 -01:00:00.999999 +t0 -01:00:00 +t1 -01:00:00.9 +t2 -01:00:00.99 +t3 -01:00:00.999 +t4 -01:00:00.9999 +t5 -01:00:00.99999 +t6 -01:00:00.999999 +wst0 7FF000 +wst1 7FEFFFA6 +wst2 7FEFFF9D +wst3 7FEFFFD8FA +wst4 7FEFFFD8F1 +wst5 7FEFFFF0BDCA +wst6 7FEFFFF0BDC1 +a6 -838:59:58.999999 +t0 -838:59:58 +t1 -838:59:58.9 +t2 -838:59:58.99 +t3 -838:59:58.999 +t4 -838:59:58.9999 +t5 -838:59:58.99999 +t6 -838:59:58.999999 +wst0 4B9106 +wst1 4B9105A6 +wst2 4B91059D +wst3 4B9105D8FA +wst4 4B9105D8F1 +wst5 4B9105F0BDCA +wst6 4B9105F0BDC1 +a6 00:00:00.999999 +t0 00:00:00 +t1 00:00:00.9 +t2 00:00:00.99 +t3 00:00:00.999 +t4 00:00:00.9999 +t5 00:00:00.99999 +t6 00:00:00.999999 +wst0 800000 +wst1 8000005A +wst2 80000063 +wst3 8000002706 +wst4 800000270F +wst5 8000000F4236 +wst6 8000000F423F +a6 00:00:01.999999 +t0 00:00:01 +t1 00:00:01.9 +t2 00:00:01.99 +t3 00:00:01.999 +t4 00:00:01.9999 +t5 00:00:01.99999 +t6 00:00:01.999999 +wst0 800001 +wst1 8000015A +wst2 80000163 +wst3 8000012706 +wst4 800001270F +wst5 8000010F4236 +wst6 8000010F423F +a6 00:01:00.999999 +t0 00:01:00 +t1 00:01:00.9 +t2 00:01:00.99 +t3 00:01:00.999 +t4 00:01:00.9999 +t5 00:01:00.99999 +t6 00:01:00.999999 +wst0 800040 +wst1 8000405A +wst2 80004063 +wst3 8000402706 +wst4 800040270F +wst5 8000400F4236 +wst6 8000400F423F +a6 01:00:00.999999 +t0 01:00:00 +t1 01:00:00.9 +t2 01:00:00.99 +t3 01:00:00.999 +t4 01:00:00.9999 +t5 01:00:00.99999 +t6 01:00:00.999999 +wst0 801000 +wst1 8010005A +wst2 80100063 +wst3 8010002706 +wst4 801000270F +wst5 8010000F4236 +wst6 8010000F423F +a6 838:59:58.999999 +t0 838:59:58 +t1 838:59:58.9 +t2 838:59:58.99 +t3 838:59:58.999 +t4 838:59:58.9999 +t5 838:59:58.99999 +t6 838:59:58.999999 +wst0 B46EFA +wst1 B46EFA5A +wst2 B46EFA63 +wst3 B46EFA2706 +wst4 B46EFA270F +wst5 B46EFA0F4236 +wst6 B46EFA0F423F +SELECT * FROM v1 WHERE a6 LIKE '%.000000' ORDER BY a6, t6;; +a6 -00:00:00.000000 +t0 00:00:00 +t1 00:00:00.0 +t2 00:00:00.00 +t3 00:00:00.000 +t4 00:00:00.0000 +t5 00:00:00.00000 +t6 00:00:00.000000 +wst0 800000 +wst1 80000000 +wst2 80000000 +wst3 8000000000 +wst4 8000000000 +wst5 800000000000 +wst6 800000000000 +a6 -00:00:01.000000 +t0 -00:00:01 +t1 -00:00:01.0 +t2 -00:00:01.00 +t3 -00:00:01.000 +t4 -00:00:01.0000 +t5 -00:00:01.00000 +t6 -00:00:01.000000 +wst0 7FFFFF +wst1 7FFFFF00 +wst2 7FFFFF00 +wst3 7FFFFF0000 +wst4 7FFFFF0000 +wst5 7FFFFF000000 +wst6 7FFFFF000000 +a6 -838:59:59.000000 +t0 -838:59:59 +t1 -838:59:59.0 +t2 -838:59:59.00 +t3 -838:59:59.000 +t4 -838:59:59.0000 +t5 -838:59:59.00000 +t6 -838:59:59.000000 +wst0 4B9105 +wst1 4B910500 +wst2 4B910500 +wst3 4B91050000 +wst4 4B91050000 +wst5 4B9105000000 +wst6 4B9105000000 +a6 00:00:00.000000 +t0 00:00:00 +t1 00:00:00.0 +t2 00:00:00.00 +t3 00:00:00.000 +t4 00:00:00.0000 +t5 00:00:00.00000 +t6 00:00:00.000000 +wst0 800000 +wst1 80000000 +wst2 80000000 +wst3 8000000000 +wst4 8000000000 +wst5 800000000000 +wst6 800000000000 +a6 00:00:01.000000 +t0 00:00:01 +t1 00:00:01.0 +t2 00:00:01.00 +t3 00:00:01.000 +t4 00:00:01.0000 +t5 00:00:01.00000 +t6 00:00:01.000000 +wst0 800001 +wst1 80000100 +wst2 80000100 +wst3 8000010000 +wst4 8000010000 +wst5 800001000000 +wst6 800001000000 +a6 838:59:59.000000 +t0 838:59:59 +t1 838:59:59.0 +t2 838:59:59.00 +t3 838:59:59.000 +t4 838:59:59.0000 +t5 838:59:59.00000 +t6 838:59:59.000000 +wst0 B46EFB +wst1 B46EFB00 +wst2 B46EFB00 +wst3 B46EFB0000 +wst4 B46EFB0000 +wst5 B46EFB000000 +wst6 B46EFB000000 +SELECT * FROM v1 WHERE a6 LIKE '%.100000' ORDER BY a6, t6;; +a6 -00:00:00.100000 +t0 00:00:00 +t1 -00:00:00.1 +t2 -00:00:00.10 +t3 -00:00:00.100 +t4 -00:00:00.1000 +t5 -00:00:00.10000 +t6 -00:00:00.100000 +wst0 800000 +wst1 7FFFFFF6 +wst2 7FFFFFF6 +wst3 7FFFFFFC18 +wst4 7FFFFFFC18 +wst5 7FFFFFFE7960 +wst6 7FFFFFFE7960 +a6 -00:00:01.100000 +t0 -00:00:01 +t1 -00:00:01.1 +t2 -00:00:01.10 +t3 -00:00:01.100 +t4 -00:00:01.1000 +t5 -00:00:01.10000 +t6 -00:00:01.100000 +wst0 7FFFFF +wst1 7FFFFEF6 +wst2 7FFFFEF6 +wst3 7FFFFEFC18 +wst4 7FFFFEFC18 +wst5 7FFFFEFE7960 +wst6 7FFFFEFE7960 +a6 -00:01:00.100000 +t0 -00:01:00 +t1 -00:01:00.1 +t2 -00:01:00.10 +t3 -00:01:00.100 +t4 -00:01:00.1000 +t5 -00:01:00.10000 +t6 -00:01:00.100000 +wst0 7FFFC0 +wst1 7FFFBFF6 +wst2 7FFFBFF6 +wst3 7FFFBFFC18 +wst4 7FFFBFFC18 +wst5 7FFFBFFE7960 +wst6 7FFFBFFE7960 +a6 -01:00:00.100000 +t0 -01:00:00 +t1 -01:00:00.1 +t2 -01:00:00.10 +t3 -01:00:00.100 +t4 -01:00:00.1000 +t5 -01:00:00.10000 +t6 -01:00:00.100000 +wst0 7FF000 +wst1 7FEFFFF6 +wst2 7FEFFFF6 +wst3 7FEFFFFC18 +wst4 7FEFFFFC18 +wst5 7FEFFFFE7960 +wst6 7FEFFFFE7960 +a6 -838:59:58.100000 +t0 -838:59:58 +t1 -838:59:58.1 +t2 -838:59:58.10 +t3 -838:59:58.100 +t4 -838:59:58.1000 +t5 -838:59:58.10000 +t6 -838:59:58.100000 +wst0 4B9106 +wst1 4B9105F6 +wst2 4B9105F6 +wst3 4B9105FC18 +wst4 4B9105FC18 +wst5 4B9105FE7960 +wst6 4B9105FE7960 +a6 00:00:00.100000 +t0 00:00:00 +t1 00:00:00.1 +t2 00:00:00.10 +t3 00:00:00.100 +t4 00:00:00.1000 +t5 00:00:00.10000 +t6 00:00:00.100000 +wst0 800000 +wst1 8000000A +wst2 8000000A +wst3 80000003E8 +wst4 80000003E8 +wst5 8000000186A0 +wst6 8000000186A0 +a6 00:00:01.100000 +t0 00:00:01 +t1 00:00:01.1 +t2 00:00:01.10 +t3 00:00:01.100 +t4 00:00:01.1000 +t5 00:00:01.10000 +t6 00:00:01.100000 +wst0 800001 +wst1 8000010A +wst2 8000010A +wst3 80000103E8 +wst4 80000103E8 +wst5 8000010186A0 +wst6 8000010186A0 +a6 00:01:00.100000 +t0 00:01:00 +t1 00:01:00.1 +t2 00:01:00.10 +t3 00:01:00.100 +t4 00:01:00.1000 +t5 00:01:00.10000 +t6 00:01:00.100000 +wst0 800040 +wst1 8000400A +wst2 8000400A +wst3 80004003E8 +wst4 80004003E8 +wst5 8000400186A0 +wst6 8000400186A0 +a6 01:00:00.100000 +t0 01:00:00 +t1 01:00:00.1 +t2 01:00:00.10 +t3 01:00:00.100 +t4 01:00:00.1000 +t5 01:00:00.10000 +t6 01:00:00.100000 +wst0 801000 +wst1 8010000A +wst2 8010000A +wst3 80100003E8 +wst4 80100003E8 +wst5 8010000186A0 +wst6 8010000186A0 +a6 838:59:58.100000 +t0 838:59:58 +t1 838:59:58.1 +t2 838:59:58.10 +t3 838:59:58.100 +t4 838:59:58.1000 +t5 838:59:58.10000 +t6 838:59:58.100000 +wst0 B46EFA +wst1 B46EFA0A +wst2 B46EFA0A +wst3 B46EFA03E8 +wst4 B46EFA03E8 +wst5 B46EFA0186A0 +wst6 B46EFA0186A0 +DROP VIEW v1; +DROP TABLE t1; +# +# Testing that TIME(0) is a synonym to non-fractional TIME +# +CREATE TABLE t1 (a TIME(0) NOT NULL); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` time NOT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t1; +# +# Testing bad FSPs +# +CREATE TABLE t1 (a TIME(-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 1 +CREATE TABLE t1 (a TIME(7)); +ERROR 42000: Too-big precision 7 specified for 'a'. Maximum is 6. +CREATE TABLE t1 (a TIME(31)); +ERROR 42000: Too-big precision 31 specified for 'a'. Maximum is 6. +# +# Testing bad FSPs with TIME functions +# +SELECT CURTIME(-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 1 +SELECT CURTIME(7); +ERROR 42000: Too-big precision 7 specified for 'curtime'. Maximum is 6. +SELECT CURTIME(31); +ERROR 42000: Too-big precision 31 specified for 'curtime'. Maximum is 6. +# +# Testing INSERT, ORDER, KEY, BETWEEN, comparison +# +CREATE TABLE t1 (a TIME(6) NOT NULL); +INSERT INTO t1 VALUES ('-838:59:59.000000'); +INSERT INTO t1 VALUES ('-01:00:00.999999'); +INSERT INTO t1 VALUES ('-01:00:00.000001'); +INSERT INTO t1 VALUES ('-01:00:00.000000'); +INSERT INTO t1 VALUES ('-00:00:00.000001'); +INSERT INTO t1 VALUES ('00:00:00.000000'); +INSERT INTO t1 VALUES ('23:59:59.999999'); +INSERT INTO t1 VALUES ('01:02:03'); +INSERT INTO t1 VALUES ('01:02:03.4'); +INSERT INTO t1 VALUES ('01:02:03.45'); +INSERT INTO t1 VALUES ('01:02:03.456'); +INSERT INTO t1 VALUES ('01:02:03.4567'); +INSERT INTO t1 VALUES ('01:02:03.45678'); +INSERT INTO t1 VALUES ('01:02:03.4567891'); +INSERT INTO t1 VALUES ('838:59:59.000000'); +SELECT * FROM t1; +a +-838:59:59.000000 +-01:00:00.999999 +-01:00:00.000001 +-01:00:00.000000 +-00:00:00.000001 +00:00:00.000000 +23:59:59.999999 +01:02:03.000000 +01:02:03.400000 +01:02:03.450000 +01:02:03.456000 +01:02:03.456700 +01:02:03.456780 +01:02:03.456789 +838:59:59.000000 +SELECT * FROM t1 ORDER BY a DESC; +a +838:59:59.000000 +23:59:59.999999 +01:02:03.456789 +01:02:03.456780 +01:02:03.456700 +01:02:03.456000 +01:02:03.450000 +01:02:03.400000 +01:02:03.000000 +00:00:00.000000 +-00:00:00.000001 +-01:00:00.000000 +-01:00:00.000001 +-01:00:00.999999 +-838:59:59.000000 +SELECT * FROM t1 WHERE a='01:02:03.45'; +a +01:02:03.450000 +SELECT * FROM t1 WHERE a='01:02:03.4567'; +a +01:02:03.456700 +SELECT * FROM t1 WHERE a='01:02:03.45670'; +a +01:02:03.456700 +SELECT * FROM t1 WHERE a='01:02:03.456700'; +a +01:02:03.456700 +SELECT * FROM t1 WHERE a BETWEEN '01:02:00' AND '01:03:00'; +a +01:02:03.000000 +01:02:03.400000 +01:02:03.450000 +01:02:03.456000 +01:02:03.456700 +01:02:03.456780 +01:02:03.456789 +SELECT * FROM t1 WHERE a BETWEEN TIME'01:02:03.456' AND TIME'01:02:03.45678'; +a +01:02:03.456000 +01:02:03.456700 +01:02:03.456780 +ALTER TABLE t1 ADD KEY(a); +SELECT * FROM t1 ORDER BY a; +a +-838:59:59.000000 +-01:00:00.999999 +-01:00:00.000001 +-01:00:00.000000 +-00:00:00.000001 +00:00:00.000000 +01:02:03.000000 +01:02:03.400000 +01:02:03.450000 +01:02:03.456000 +01:02:03.456700 +01:02:03.456780 +01:02:03.456789 +23:59:59.999999 +838:59:59.000000 +SELECT * FROM t1 ORDER BY a DESC; +a +838:59:59.000000 +23:59:59.999999 +01:02:03.456789 +01:02:03.456780 +01:02:03.456700 +01:02:03.456000 +01:02:03.450000 +01:02:03.400000 +01:02:03.000000 +00:00:00.000000 +-00:00:00.000001 +-01:00:00.000000 +-01:00:00.000001 +-01:00:00.999999 +-838:59:59.000000 +EXPLAIN SELECT * FROM t1 WHERE a='01:02:03.456700'; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 NULL ref a a 6 const 1 100.00 Using where; Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a` from `test`.`t1` where (`test`.`t1`.`a` = '01:02:03.456700') +SELECT * FROM t1 WHERE a='01:02:03.456700'; +a +01:02:03.456700 +SELECT * FROM t1 WHERE a BETWEEN '01:02:00' AND '01:03:00'; +a +01:02:03.000000 +01:02:03.400000 +01:02:03.450000 +01:02:03.456000 +01:02:03.456700 +01:02:03.456780 +01:02:03.456789 +SELECT * FROM t1 WHERE a BETWEEN TIME'01:02:03.456' AND TIME'01:02:03.45678'; +a +01:02:03.456000 +01:02:03.456700 +01:02:03.456780 +DROP TABLE t1; +# +# Testing TIME with days +# +CREATE TABLE t1 (a TIME(6)); +INSERT INTO t1 VALUES ('00:00:00'); +INSERT INTO t1 VALUES ('-24:00:00'), ('24:00:00'); +INSERT INTO t1 VALUES ('-1 00:00:00'), ('1 00:00:00'); +INSERT INTO t1 VALUES ('-10 00:00:00'), ('10 00:00:00'); +SELECT * FROM t1 ORDER BY a; +a +-240:00:00.000000 +-24:00:00.000000 +-24:00:00.000000 +00:00:00.000000 +24:00:00.000000 +24:00:00.000000 +240:00:00.000000 +DROP TABLE t1; +# +# Testing rare formats +# +CREATE TABLE t1 (a TIME(6)); +INSERT INTO t1 VALUES (1122), ('1:2:3'), ('112233'),('-00:00:00'),('-00:00:00.000000'); +SELECT * FROM t1 ORDER BY a; +a +00:00:00.000000 +00:00:00.000000 +00:11:22.000000 +01:02:03.000000 +11:22:33.000000 +DROP TABLE t1; +# +# Testing bad values +# +CREATE TABLE t1 (a TIME(6)); +INSERT INTO t1 VALUES (106060); +ERROR 22007: Incorrect time value: '106060' for column 'a' at row 1 +INSERT INTO t1 VALUES (106060.0); +ERROR 22007: Incorrect time value: '106060.0' for column 'a' at row 1 +INSERT INTO t1 VALUES (106060e0); +ERROR 22007: Incorrect time value: '106060' for column 'a' at row 1 +INSERT INTO t1 VALUES ('106060'); +ERROR 22007: Incorrect time value: '106060' for column 'a' at row 1 +SELECT * FROM t1; +a +DROP TABLE t1; +# +# Testing bad values with TRADITIONAL mode +# +SET sql_mode=traditional; +CREATE TABLE t1 (a TIME(6)); +INSERT INTO t1 VALUES ('00:00:00.111111 xxx'); +ERROR 22007: Incorrect time value: '00:00:00.111111 xxx' for column 'a' at row 1 +INSERT INTO t1 VALUES (106060); +ERROR 22007: Incorrect time value: '106060' for column 'a' at row 1 +INSERT INTO t1 VALUES (106060.0); +ERROR 22007: Incorrect time value: '106060.0' for column 'a' at row 1 +INSERT INTO t1 VALUES (106060e0); +ERROR 22007: Incorrect time value: '106060' for column 'a' at row 1 +INSERT INTO t1 VALUES ('106060'); +ERROR 22007: Incorrect time value: '106060' for column 'a' at row 1 +INSERT INTO t1 VALUES ('838:59:59.0000009'); +ERROR 22007: Incorrect time value: '838:59:59.0000009' for column 'a' at row 1 +INSERT INTO t1 VALUES ('-838:59:59.0000009'); +ERROR 22007: Incorrect time value: '-838:59:59.0000009' for column 'a' at row 1 +INSERT INTO t1 VALUES (CAST(0xFFFFFFFF00000000 AS SIGNED)); +ERROR 22007: Incorrect time value: '-4294967296' for column 'a' at row 1 +INSERT INTO t1 VALUES (CAST(0xFFFFFFFF00000000 AS UNSIGNED)); +ERROR 22007: Incorrect time value: '18446744069414584320' for column 'a' at row 1 +SELECT * FROM t1; +a +DROP TABLE t1; +SET sql_mode=default; +# +# Testing rounding +# +CREATE TABLE t1 (a TIME(6)); +INSERT INTO t1 VALUES (105959.1234567); +INSERT INTO t1 VALUES ('00:00:00.1111110'); +INSERT INTO t1 VALUES ('00:00:00.1111111'); +INSERT INTO t1 VALUES ('00:00:00.1111114'); +INSERT INTO t1 VALUES ('00:00:00.1111115'); +INSERT INTO t1 VALUES ('00:00:00.1111119'); +SELECT * FROM t1; +a +10:59:59.123457 +00:00:00.111111 +00:00:00.111111 +00:00:00.111111 +00:00:00.111112 +00:00:00.111112 +DELETE FROM t1; +INSERT INTO t1 VALUES (0.1111110); +INSERT INTO t1 VALUES (0.1111111); +INSERT INTO t1 VALUES (0.1111114); +INSERT INTO t1 VALUES (0.1111115); +INSERT INTO t1 VALUES (0.1111119); +SELECT * FROM t1; +a +00:00:00.111111 +00:00:00.111111 +00:00:00.111111 +00:00:00.111112 +00:00:00.111112 +DELETE FROM t1; +INSERT INTO t1 VALUES (0.1111110e0); +INSERT INTO t1 VALUES (0.1111111e0); +INSERT INTO t1 VALUES (0.1111114e0); +INSERT INTO t1 VALUES (0.1111115e0); +INSERT INTO t1 VALUES (0.1111119e0); +SELECT * FROM t1; +a +00:00:00.111111 +00:00:00.111111 +00:00:00.111111 +00:00:00.111112 +00:00:00.111112 +DROP TABLE t1; +# +# Testing huge values +# +CREATE TABLE t1 (a TIME(6)); +INSERT INTO t1 VALUES (CAST(0xFFFFFFFF00000000 AS SIGNED)); +ERROR 22007: Incorrect time value: '-4294967296' for column 'a' at row 1 +INSERT INTO t1 VALUES (CAST(0xFFFFFFFF00000000 AS UNSIGNED)); +ERROR 22007: Incorrect time value: '18446744069414584320' for column 'a' at row 1 +INSERT INTO t1 VALUES ( 100000000000000000.1); +ERROR 22007: Incorrect time value: '100000000000000000.1' for column 'a' at row 1 +INSERT INTO t1 VALUES ( 100000000000000000.1e0); +ERROR 22007: Incorrect time value: '1e17' for column 'a' at row 1 +INSERT INTO t1 VALUES (-100000000000000000.1); +ERROR 22007: Incorrect time value: '-100000000000000000.1' for column 'a' at row 1 +INSERT INTO t1 VALUES (-100000000000000000.1e0); +ERROR 22007: Incorrect time value: '-1e17' for column 'a' at row 1 +INSERT INTO t1 VALUES (1000000000.0 * 1000000000); +ERROR 22007: Incorrect time value: '1000000000000000000.0' for column 'a' at row 1 +INSERT INTO t1 VALUES (-1000000000.0 * 1000000000); +ERROR 22007: Incorrect time value: '-1000000000000000000.0' for column 'a' at row 1 +SELECT * FROM t1; +a +DROP TABLE t1; +# +# Testing truncation warnings +# +CREATE TABLE t1 (a TIME(6)); +INSERT INTO t1 VALUES ('00:00:00.111111 xxx'); +ERROR 22007: Incorrect time value: '00:00:00.111111 xxx' for column 'a' at row 1 +SELECT * FROM t1; +a +DROP TABLE t1; +# +# Testing IN +# +CREATE TABLE t1 (a TIME(6)); +INSERT INTO t1 VALUES ('-99:00:00.000000'); +INSERT INTO t1 VALUES ('-99:00:00.000001'); +INSERT INTO t1 VALUES ('-99:00:00.000002'); +INSERT INTO t1 VALUES ('-00:00:00.000001'); +INSERT INTO t1 VALUES ('-00:00:00.000002'); +INSERT INTO t1 VALUES ('00:00:00.000000'); +INSERT INTO t1 VALUES ('00:00:00.000001'); +INSERT INTO t1 VALUES ('00:00:00.000002'); +INSERT INTO t1 VALUES ('10:00:00.000000'); +INSERT INTO t1 VALUES ('10:00:00.000001'); +INSERT INTO t1 VALUES ('10:00:00.000002'); +INSERT INTO t1 VALUES ('99:00:00.000000'); +INSERT INTO t1 VALUES ('99:00:00.000001'); +INSERT INTO t1 VALUES ('99:00:00.000002'); +SELECT * FROM t1 WHERE a IN ('00:00:00', '-99:00:00.000001', '99:00:00.000002'); +a +-99:00:00.000001 +00:00:00.000000 +99:00:00.000002 +SELECT * FROM t1 WHERE a IN (0, -990000, 990000); +a +-99:00:00.000000 +00:00:00.000000 +99:00:00.000000 +SELECT * FROM t1 WHERE a IN (0.000001, -990000.000001, 990000.000001); +a +-99:00:00.000001 +00:00:00.000001 +99:00:00.000001 +# +# Testing Item_temporal_with_ref::print +# +EXPLAIN EXTENDED SELECT * FROM t1 WHERE a IN (990000,0); +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 14 20.00 Using where +Warnings: +Warning 1681 'EXTENDED' is deprecated and will be removed in a future release. +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a` from `test`.`t1` where (`test`.`t1`.`a` in ('99:00:00.000000','00:00:00.000000')) +# +# Testing IN with index: field->store_packed +# +ALTER TABLE t1 ADD KEY(a); +SELECT * FROM t1 WHERE a IN ('00:00:00', '-99:00:00.000001', '99:00:00.000002'); +a +-99:00:00.000001 +00:00:00.000000 +99:00:00.000002 +SELECT * FROM t1 WHERE a IN (0, -990000, 990000); +a +-99:00:00.000000 +00:00:00.000000 +99:00:00.000000 +SELECT * FROM t1 WHERE a IN (0.000001, -990000.000001, 990000.000001); +a +-99:00:00.000001 +00:00:00.000001 +99:00:00.000001 +DROP TABLE t1; +# +# Testing CREATE TABLE LIKE +# +CREATE TABLE t1 (a TIME(6)); +CREATE TABLE t2 LIKE t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` time(6) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t2, t1; +# +# Testing CREATE TABLE .. SELECT +# +CREATE TABLE t1 (a TIME(6)); +CREATE TABLE t2 AS SELECT * FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` time(6) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t2, t1; +# +# Testing JOIN between TIME(6) and TIME(6) +# +CREATE TABLE t1 (a TIME(6)); +INSERT INTO t1 VALUES ('00:01:03.1'); +INSERT INTO t1 VALUES ('00:01:03.12'); +INSERT INTO t1 VALUES ('00:01:03.123'); +INSERT INTO t1 VALUES ('00:01:03.1234'); +INSERT INTO t1 VALUES ('00:01:03.12345'); +INSERT INTO t1 VALUES ('00:01:03.123456'); +CREATE TABLE t2 (a TIME(6)); +INSERT INTO t2 SELECT * FROM t1; +SELECT * FROM t1, t2 WHERE t1.a=t2.a ORDER BY t1.a, t2.a; +a a +00:01:03.100000 00:01:03.100000 +00:01:03.120000 00:01:03.120000 +00:01:03.123000 00:01:03.123000 +00:01:03.123400 00:01:03.123400 +00:01:03.123450 00:01:03.123450 +00:01:03.123456 00:01:03.123456 +ALTER TABLE t1 ADD KEY(a); +SELECT * FROM t1, t2 WHERE t1.a=t2.a ORDER BY t1.a, t2.a; +a a +00:01:03.100000 00:01:03.100000 +00:01:03.120000 00:01:03.120000 +00:01:03.123000 00:01:03.123000 +00:01:03.123400 00:01:03.123400 +00:01:03.123450 00:01:03.123450 +00:01:03.123456 00:01:03.123456 +ALTER TABLE t2 ADD KEY(a); +SELECT * FROM t1, t2 WHERE t1.a=t2.a ORDER BY t1.a, t2.a; +a a +00:01:03.100000 00:01:03.100000 +00:01:03.120000 00:01:03.120000 +00:01:03.123000 00:01:03.123000 +00:01:03.123400 00:01:03.123400 +00:01:03.123450 00:01:03.123450 +00:01:03.123456 00:01:03.123456 +ALTER TABLE t1 DROP KEY a; +SELECT * FROM t1, t2 WHERE t1.a=t2.a ORDER BY t1.a, t2.a; +a a +00:01:03.100000 00:01:03.100000 +00:01:03.120000 00:01:03.120000 +00:01:03.123000 00:01:03.123000 +00:01:03.123400 00:01:03.123400 +00:01:03.123450 00:01:03.123450 +00:01:03.123456 00:01:03.123456 +DROP TABLE t2; +DROP TABLE t1; +# +# Testing JOIN between TIME and TIME(6) +# +CREATE TABLE t1 (a TIME(6)); +INSERT INTO t1 VALUES ('-836:59:59.000000'); +INSERT INTO t1 VALUES ('10:11:12.000000'); +INSERT INTO t1 VALUES ('10:11:12.000001'); +INSERT INTO t1 VALUES ('10:11:12.000002'); +INSERT INTO t1 VALUES ('10:11:13.000000'); +INSERT INTO t1 VALUES ('10:11:13.000001'); +INSERT INTO t1 VALUES ('10:11:13.000002'); +INSERT INTO t1 VALUES ('835:59:59.999999'); +INSERT INTO t1 VALUES ('836:59:59.000000'); +CREATE TABLE t2 (a TIME); +INSERT INTO t2 VALUES ('10:11:12'); +INSERT INTO t2 VALUES ('10:11:13'); +INSERT INTO t2 VALUES ('-836:59:59'); +INSERT INTO t2 VALUES ('836:59:59'); +SELECT * FROM t1, t2 WHERE t1.a=t2.a ORDER BY t1.a, t2.a; +a a +-836:59:59.000000 -836:59:59 +10:11:12.000000 10:11:12 +10:11:13.000000 10:11:13 +836:59:59.000000 836:59:59 +ALTER TABLE t1 ADD KEY(a); +ALTER TABLE t2 ADD KEY(a); +SELECT * FROM t1, t2 WHERE t1.a=t2.a ORDER BY t1.a, t2.a; +a a +-836:59:59.000000 -836:59:59 +10:11:12.000000 10:11:12 +10:11:13.000000 10:11:13 +836:59:59.000000 836:59:59 +DROP TABLE t2, t1; +# +# Testing unique index +# +CREATE TABLE t1 (a TIME(6), UNIQUE(a)); +INSERT INTO t1 VALUES ('00:01:02'); +INSERT INTO t1 VALUES ('00:01:02.1'); +INSERT INTO t1 VALUES ('00:01:02.12'); +INSERT INTO t1 VALUES ('00:01:02.123'); +INSERT INTO t1 VALUES ('00:01:02.1234'); +INSERT INTO t1 VALUES ('00:01:02.12345'); +INSERT INTO t1 VALUES ('00:01:02.12345'); +ERROR 23000: Duplicate entry '00:01:02.123450' for key 'a' +DROP TABLE t1; +# +# Testing GROUP BY +# +CREATE TABLE t1 (a TIME(6)); +INSERT INTO t1 VALUES ('00:01:02'); +INSERT INTO t1 VALUES ('00:01:02.0'); +INSERT INTO t1 VALUES ('00:01:02.01'); +INSERT INTO t1 VALUES ('00:01:02.010'); +INSERT INTO t1 VALUES ('00:01:02.02'); +INSERT INTO t1 VALUES ('00:01:02.020'); +SELECT a, COUNT(*) FROM t1 GROUP BY a; +a COUNT(*) +00:01:02.000000 2 +00:01:02.010000 2 +00:01:02.020000 2 +DROP TABLE t1; +# +# Testing MIN() and MAX() +# +CREATE TABLE t1 (a INT, b TIME(6)); +INSERT INTO t1 VALUES (1, '00:01:02.000001'); +INSERT INTO t1 VALUES (1, '00:01:02'); +INSERT INTO t1 VALUES (2, '10:01:02'); +INSERT INTO t1 VALUES (2, '10:01:02.000001'); +INSERT INTO t1 VALUES (3, '10:11:02'); +INSERT INTO t1 VALUES (3, '10:11:02.000001'); +SELECT MIN(b), MAX(b) FROM t1; +MIN(b) MAX(b) +00:01:02.000000 10:11:02.000001 +SELECT a, MIN(b), MAX(b) FROM t1 GROUP BY a; +a MIN(b) MAX(b) +1 00:01:02.000000 00:01:02.000001 +2 10:01:02.000000 10:01:02.000001 +3 10:11:02.000000 10:11:02.000001 +UPDATE t1 SET b=-b; +SELECT MIN(b), MAX(b) FROM t1; +MIN(b) MAX(b) +-10:11:02.000001 -00:01:02.000000 +SELECT a, MIN(b), MAX(b) FROM t1 GROUP BY a; +a MIN(b) MAX(b) +1 -00:01:02.000001 -00:01:02.000000 +2 -10:01:02.000001 -10:01:02.000000 +3 -10:11:02.000001 -10:11:02.000000 +DROP TABLE t1; +# +# Testing MIN(TIME) and MAX(TIME) in arithmetic expressions and CAST +# This covers Item_sum_hybrid::val_int(), val_real(), val_decimal() +# +CREATE TABLE t1 +( +t0 TIME, +t1 TIME(1), t2 TIME(2), t3 TIME(3), +t4 TIME(4), t5 TIME(5), t6 TIME(6) +); +INSERT INTO t1 VALUES +( +'10:10:10', +'10:10:10.9', '10:10:10.99', '10:10:10.999', +'10:10:10.9999', '10:10:10.99999', '10:10:10.999999' +); +CREATE TABLE t2 AS +SELECT +MAX(t0) + 1, +MAX(t1) + 1, MAX(t2) + 1, MAX(t3) + 1, +MAX(t4) + 1, MAX(t5) + 1, MAX(t6) + 1 +FROM t1; +SHOW COLUMNS FROM t2; +Field Type Null Key Default Extra +MAX(t0) + 1 int(9) YES NULL +MAX(t1) + 1 decimal(9,1) YES NULL +MAX(t2) + 1 decimal(10,2) YES NULL +MAX(t3) + 1 decimal(11,3) YES NULL +MAX(t4) + 1 decimal(12,4) YES NULL +MAX(t5) + 1 decimal(13,5) YES NULL +MAX(t6) + 1 decimal(14,6) YES NULL +SELECT * FROM t2; +MAX(t0) + 1 MAX(t1) + 1 MAX(t2) + 1 MAX(t3) + 1 MAX(t4) + 1 MAX(t5) + 1 MAX(t6) + 1 +101011 101011.9 101011.99 101011.999 101011.9999 101011.99999 101011.999999 +DROP TABLE t2; +CREATE TABLE t2 AS +SELECT +MAX(t0) + 1.1, +MAX(t1) + 1.1, MAX(t2) + 1.1, MAX(t3) + 1.1, +MAX(t4) + 1.1, MAX(t5) + 1.1, MAX(t6) + 1.1 +FROM t1; +SHOW COLUMNS FROM t2; +Field Type Null Key Default Extra +MAX(t0) + 1.1 decimal(9,1) YES NULL +MAX(t1) + 1.1 decimal(9,1) YES NULL +MAX(t2) + 1.1 decimal(10,2) YES NULL +MAX(t3) + 1.1 decimal(11,3) YES NULL +MAX(t4) + 1.1 decimal(12,4) YES NULL +MAX(t5) + 1.1 decimal(13,5) YES NULL +MAX(t6) + 1.1 decimal(14,6) YES NULL +SELECT * FROM t2; +MAX(t0) + 1.1 MAX(t1) + 1.1 MAX(t2) + 1.1 MAX(t3) + 1.1 MAX(t4) + 1.1 MAX(t5) + 1.1 MAX(t6) + 1.1 +101011.1 101012.0 101012.09 101012.099 101012.0999 101012.09999 101012.099999 +DROP TABLE t2; +CREATE TABLE t2 AS +SELECT +MAX(t0) + 1.0e0, +MAX(t1) + 1.0e0, MAX(t2) + 1.0e0, MAX(t3) + 1.0e0, +MAX(t4) + 1.0e0, MAX(t5) + 1.0e0, MAX(t6) + 1.0e0 +FROM t1; +SHOW COLUMNS FROM t2; +Field Type Null Key Default Extra +MAX(t0) + 1.0e0 double YES NULL +MAX(t1) + 1.0e0 double YES NULL +MAX(t2) + 1.0e0 double YES NULL +MAX(t3) + 1.0e0 double YES NULL +MAX(t4) + 1.0e0 double YES NULL +MAX(t5) + 1.0e0 double YES NULL +MAX(t6) + 1.0e0 double YES NULL +SELECT * FROM t2; +MAX(t0) + 1.0e0 MAX(t1) + 1.0e0 MAX(t2) + 1.0e0 MAX(t3) + 1.0e0 MAX(t4) + 1.0e0 MAX(t5) + 1.0e0 MAX(t6) + 1.0e0 +101011 101011.9 101011.99 101011.999 101011.9999 101011.99999 101011.999999 +DROP TABLE t2; +SELECT +MAX(t0) + 1, +MAX(t1) + 1, MAX(t2) + 1, MAX(t3) + 1, +MAX(t4) + 1, MAX(t5) + 1, MAX(t6) + 1 +FROM t1; +MAX(t0) + 1 MAX(t1) + 1 MAX(t2) + 1 MAX(t3) + 1 MAX(t4) + 1 MAX(t5) + 1 MAX(t6) + 1 +101011 101011.9 101011.99 101011.999 101011.9999 101011.99999 101011.999999 +SELECT +CAST(MAX(t0) AS SIGNED), +CAST(MAX(t1) AS SIGNED), CAST(MAX(t2) AS SIGNED), CAST(MAX(t3) AS SIGNED), +CAST(MAX(t4) AS SIGNED), CAST(MAX(t5) AS SIGNED), CAST(MAX(t6) AS SIGNED) +FROM t1; +CAST(MAX(t0) AS SIGNED) CAST(MAX(t1) AS SIGNED) CAST(MAX(t2) AS SIGNED) CAST(MAX(t3) AS SIGNED) CAST(MAX(t4) AS SIGNED) CAST(MAX(t5) AS SIGNED) CAST(MAX(t6) AS SIGNED) +101010 101011 101011 101011 101011 101011 101011 +DROP TABLE t1; +# +# Testing LEAST, GREATEST +# +SELECT LEAST(CAST('00:00:00.1' as TIME(6)), '00:00:01.1') AS a; +a +00:00:00.100000 +SELECT LEAST(TIME'00:00:00.1', TIME'00:00:00.12') AS a; +a +00:00:00.10 +SELECT GREATEST(CAST('00:00:00.1' as TIME(6)), '00:00:01.1') AS a; +a +00:00:01.1 +SELECT GREATEST(TIME'00:00:00.1', TIME'00:00:00.12') AS a; +a +00:00:00.12 +CREATE TABLE t1 AS SELECT +LEAST(TIME'00:00:00.1', TIME'00:00:00.12'), +GREATEST(TIME'00:00:00.1', TIME'00:00:00.12'); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `LEAST(TIME'00:00:00.1', TIME'00:00:00.12')` time(2) NOT NULL DEFAULT '00:00:00.00', + `GREATEST(TIME'00:00:00.1', TIME'00:00:00.12')` time(2) NOT NULL DEFAULT '00:00:00.00' +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t1; +# +# Testing INSERT with near-maximum and near-minimum supported values. +# +CREATE TABLE t1 (a TIME(6)); +INSERT INTO t1 VALUES ('838:59:59.999999'); +ERROR 22007: Incorrect time value: '838:59:59.999999' for column 'a' at row 1 +INSERT INTO t1 VALUES ('838:59:59'); +INSERT INTO t1 VALUES ('838:59:59.0000001'); +INSERT INTO t1 VALUES ('838:59:59.0000002'); +INSERT INTO t1 VALUES ('838:59:59.0000003'); +INSERT INTO t1 VALUES ('838:59:59.0000004'); +INSERT INTO t1 VALUES ('838:59:59.0000005'); +ERROR 22007: Incorrect time value: '838:59:59.0000005' for column 'a' at row 1 +INSERT INTO t1 VALUES ('838:59:59.0000006'); +ERROR 22007: Incorrect time value: '838:59:59.0000006' for column 'a' at row 1 +INSERT INTO t1 VALUES ('838:59:59.0000007'); +ERROR 22007: Incorrect time value: '838:59:59.0000007' for column 'a' at row 1 +INSERT INTO t1 VALUES ('838:59:59.0000008'); +ERROR 22007: Incorrect time value: '838:59:59.0000008' for column 'a' at row 1 +INSERT INTO t1 VALUES ('838:59:59.0000009'); +ERROR 22007: Incorrect time value: '838:59:59.0000009' for column 'a' at row 1 +INSERT INTO t1 VALUES ('838:59:59.1'); +ERROR 22007: Incorrect time value: '838:59:59.1' for column 'a' at row 1 +INSERT INTO t1 VALUES ('839:00:00'); +ERROR 22007: Incorrect time value: '839:00:00' for column 'a' at row 1 +INSERT INTO t1 VALUES ('-838:59:59'); +INSERT INTO t1 VALUES ('-838:59:59.0000001'); +INSERT INTO t1 VALUES ('-838:59:59.0000002'); +INSERT INTO t1 VALUES ('-838:59:59.0000003'); +INSERT INTO t1 VALUES ('-838:59:59.0000004'); +INSERT INTO t1 VALUES ('-838:59:59.0000005'); +ERROR 22007: Incorrect time value: '-838:59:59.0000005' for column 'a' at row 1 +INSERT INTO t1 VALUES ('-838:59:59.0000006'); +ERROR 22007: Incorrect time value: '-838:59:59.0000006' for column 'a' at row 1 +INSERT INTO t1 VALUES ('-838:59:59.0000007'); +ERROR 22007: Incorrect time value: '-838:59:59.0000007' for column 'a' at row 1 +INSERT INTO t1 VALUES ('-838:59:59.0000008'); +ERROR 22007: Incorrect time value: '-838:59:59.0000008' for column 'a' at row 1 +INSERT INTO t1 VALUES ('-838:59:59.0000009'); +ERROR 22007: Incorrect time value: '-838:59:59.0000009' for column 'a' at row 1 +INSERT INTO t1 VALUES ('-838:59:59.000001'); +ERROR 22007: Incorrect time value: '-838:59:59.000001' for column 'a' at row 1 +INSERT INTO t1 VALUES ('-838:59:59.999999'); +ERROR 22007: Incorrect time value: '-838:59:59.999999' for column 'a' at row 1 +INSERT INTO t1 VALUES ('-839:00:00'); +ERROR 22007: Incorrect time value: '-839:00:00' for column 'a' at row 1 +INSERT INTO t1 VALUES ('-839:00:00.1'); +ERROR 22007: Incorrect time value: '-839:00:00.1' for column 'a' at row 1 +INSERT INTO t1 VALUES ('-838:59:59.999999'); +ERROR 22007: Incorrect time value: '-838:59:59.999999' for column 'a' at row 1 +SELECT * FROM t1; +a +838:59:59.000000 +838:59:59.000000 +838:59:59.000000 +838:59:59.000000 +838:59:59.000000 +-838:59:59.000000 +-838:59:59.000000 +-838:59:59.000000 +-838:59:59.000000 +-838:59:59.000000 +DROP TABLE t1; +# +# Testing integer INSERT value +# +CREATE TABLE t1 (a TIME(6)); +INSERT INTO t1 VALUES (20203); +INSERT INTO t1 VALUES (8385959); +INSERT INTO t1 VALUES (8390000); +ERROR 22007: Incorrect time value: '8390000' for column 'a' at row 1 +INSERT INTO t1 VALUES (-8385959); +INSERT INTO t1 VALUES (-8390000); +ERROR 22007: Incorrect time value: '-8390000' for column 'a' at row 1 +SELECT * FROM t1; +a +02:02:03.000000 +838:59:59.000000 +-838:59:59.000000 +DROP TABLE t1; +# +# Testing decimal INSERT values +# +CREATE TABLE t1 (a TIME(6)); +INSERT INTO t1 VALUES (20203.4); +INSERT INTO t1 VALUES (20203.45); +INSERT INTO t1 VALUES (20203.456); +INSERT INTO t1 VALUES (20203.4567); +INSERT INTO t1 VALUES (20203.45678); +INSERT INTO t1 VALUES (20203.456789); +INSERT INTO t1 VALUES (20203.4567894); +INSERT INTO t1 VALUES (20203.4567895); +INSERT INTO t1 VALUES (20203.4567896); +INSERT INTO t1 VALUES (20203.456789678); +INSERT INTO t1 VALUES (8385959.999999); +ERROR 22007: Incorrect time value: '8385959.999999' for column 'a' at row 1 +INSERT INTO t1 VALUES (8385959.000000); +INSERT INTO t1 VALUES (8385959.0000001); +INSERT INTO t1 VALUES (8385959.0000002); +INSERT INTO t1 VALUES (8385959.0000003); +INSERT INTO t1 VALUES (8385959.0000004); +INSERT INTO t1 VALUES (8385959.0000005); +ERROR 22007: Incorrect time value: '8385959.0000005' for column 'a' at row 1 +INSERT INTO t1 VALUES (8385959.0000006); +ERROR 22007: Incorrect time value: '8385959.0000006' for column 'a' at row 1 +INSERT INTO t1 VALUES (8385959.0000007); +ERROR 22007: Incorrect time value: '8385959.0000007' for column 'a' at row 1 +INSERT INTO t1 VALUES (8385959.0000008); +ERROR 22007: Incorrect time value: '8385959.0000008' for column 'a' at row 1 +INSERT INTO t1 VALUES (8385959.0000009); +ERROR 22007: Incorrect time value: '8385959.0000009' for column 'a' at row 1 +INSERT INTO t1 VALUES (8385959.000001); +ERROR 22007: Incorrect time value: '8385959.000001' for column 'a' at row 1 +INSERT INTO t1 VALUES (8390000.000000); +ERROR 22007: Incorrect time value: '8390000.000000' for column 'a' at row 1 +INSERT INTO t1 VALUES (-8385959.000000); +INSERT INTO t1 VALUES (-8385959.0000001); +INSERT INTO t1 VALUES (-8385959.0000002); +INSERT INTO t1 VALUES (-8385959.0000003); +INSERT INTO t1 VALUES (-8385959.0000004); +INSERT INTO t1 VALUES (-8385959.0000005); +ERROR 22007: Incorrect time value: '-8385959.0000005' for column 'a' at row 1 +INSERT INTO t1 VALUES (-8385959.0000006); +ERROR 22007: Incorrect time value: '-8385959.0000006' for column 'a' at row 1 +INSERT INTO t1 VALUES (-8385959.0000007); +ERROR 22007: Incorrect time value: '-8385959.0000007' for column 'a' at row 1 +INSERT INTO t1 VALUES (-8385959.0000008); +ERROR 22007: Incorrect time value: '-8385959.0000008' for column 'a' at row 1 +INSERT INTO t1 VALUES (-8385959.0000009); +ERROR 22007: Incorrect time value: '-8385959.0000009' for column 'a' at row 1 +INSERT INTO t1 VALUES (-8385959.000001); +ERROR 22007: Incorrect time value: '-8385959.000001' for column 'a' at row 1 +INSERT INTO t1 VALUES (-8390000.000000); +ERROR 22007: Incorrect time value: '-8390000.000000' for column 'a' at row 1 +INSERT INTO t1 VALUES (-8385959.999999); +ERROR 22007: Incorrect time value: '-8385959.999999' for column 'a' at row 1 +SELECT * FROM t1; +a +02:02:03.400000 +02:02:03.450000 +02:02:03.456000 +02:02:03.456700 +02:02:03.456780 +02:02:03.456789 +02:02:03.456789 +02:02:03.456790 +02:02:03.456790 +02:02:03.456790 +838:59:59.000000 +838:59:59.000000 +838:59:59.000000 +838:59:59.000000 +838:59:59.000000 +-838:59:59.000000 +-838:59:59.000000 +-838:59:59.000000 +-838:59:59.000000 +-838:59:59.000000 +DROP TABLE t1; +# +# Testing double INSERT values +# +CREATE TABLE t1 (a TIME(6)); +INSERT INTO t1 VALUES (123.4567e-3); +INSERT INTO t1 VALUES (123.4567e-2); +INSERT INTO t1 VALUES (123.4567e-1); +INSERT INTO t1 VALUES (123.4567e0); +INSERT INTO t1 VALUES (123.4567e1); +INSERT INTO t1 VALUES (123.4567e2); +INSERT INTO t1 VALUES (123.4567e3); +INSERT INTO t1 VALUES (8385959.999999e0); +ERROR 22007: Incorrect time value: '8385959.999999' for column 'a' at row 1 +INSERT INTO t1 VALUES (8385959e0); +INSERT INTO t1 VALUES (8385959.1e0); +ERROR 22007: Incorrect time value: '8385959.1' for column 'a' at row 1 +INSERT INTO t1 VALUES (8390000.0e0); +ERROR 22007: Incorrect time value: '8390000' for column 'a' at row 1 +INSERT INTO t1 VALUES (-8385959.0e0); +INSERT INTO t1 VALUES (-8385959.1e0); +ERROR 22007: Incorrect time value: '-8385959.1' for column 'a' at row 1 +INSERT INTO t1 VALUES (-8385959.999999e0); +ERROR 22007: Incorrect time value: '-8385959.999999' for column 'a' at row 1 +INSERT INTO t1 VALUES (-8390000.0e0); +ERROR 22007: Incorrect time value: '-8390000' for column 'a' at row 1 +SELECT * FROM t1; +a +00:00:00.123457 +00:00:01.234567 +00:00:12.345670 +00:01:23.456700 +00:12:34.567000 +01:23:45.670000 +12:34:56.700000 +838:59:59.000000 +-838:59:59.000000 +DROP TABLE t1; +# +# Testing UPDATE between TIME(6) and TIME/INT/DECIMAL/FLOAT +# +CREATE TABLE t1 (t0 TIME, t6 TIME(6), i INT, d DECIMAL(20,6), f DOUBLE); +INSERT INTO t1 (t0) VALUES ('11:22:33'); +UPDATE t1 SET t6=t0, i=t0, d=t0, f=t0; +SELECT * FROM t1; +t0 t6 i d f +11:22:33 11:22:33.000000 112233 112233.000000 112233 +UPDATE t1 SET t6='11:22:33.123'; +UPDATE t1 SET t0=t6, i=t6, d=t6, f=t6; +SELECT * FROM t1; +t0 t6 i d f +11:22:33 11:22:33.123000 112233 112233.123000 112233.123 +UPDATE t1 SET i=112233, d=112233.123, f=112233.123; +UPDATE t1 SET t6=i; +SELECT t6 FROM t1; +t6 +11:22:33.000000 +UPDATE t1 SET t6=d; +SELECT t6 FROM t1; +t6 +11:22:33.123000 +UPDATE t1 SET t6=f; +SELECT t6 FROM t1; +t6 +11:22:33.123000 +DROP TABLE t1; +# +# Testing JOIN with comparison between TIME(6) and INT +# +CREATE TABLE t1 (a TIME(6)); +INSERT INTO t1 VALUES ('11:22:33'); +INSERT INTO t1 VALUES ('11:22:33.123'); +INSERT INTO t1 VALUES ('-11:22:33'); +INSERT INTO t1 VALUES ('-11:22:33.123456'); +CREATE TABLE t2 (b INT); +INSERT INTO t2 VALUES (112233); +INSERT INTO t2 VALUES (-112233); +SELECT * FROM t1, t2 WHERE a=b; +a b +11:22:33.000000 112233 +-11:22:33.000000 -112233 +DROP TABLE t1, t2; +# +# Testing JOIN with comparison between TIME(6) and DECIMAL(20,6) +# +CREATE TABLE t1 (a TIME(6)); +INSERT INTO t1 VALUES ('11:22:33'); +INSERT INTO t1 VALUES ('11:22:33.123'); +INSERT INTO t1 VALUES ('-11:22:33'); +INSERT INTO t1 VALUES ('-11:22:33.123456'); +CREATE TABLE t2 (b DECIMAL(20,6)); +INSERT INTO t2 VALUES (112233.123); +INSERT INTO t2 VALUES (-112233.123456); +SELECT * FROM t1, t2 WHERE a=b; +a b +11:22:33.123000 112233.123000 +-11:22:33.123456 -112233.123456 +DROP TABLE t1, t2; +# +# Testing JOIN with comparison between TIME(6) and DECIMAL(20,3) +# +CREATE TABLE t1 (a TIME(6)); +INSERT INTO t1 VALUES ('11:22:33'); +INSERT INTO t1 VALUES ('11:22:33.123'); +INSERT INTO t1 VALUES ('-11:22:33'); +INSERT INTO t1 VALUES ('-11:22:33.123456'); +CREATE TABLE t2 (b DECIMAL(20,3)); +INSERT INTO t2 VALUES (112233.123); +INSERT INTO t2 VALUES (-112233.123456); +Warnings: +Note 1265 Data truncated for column 'b' at row 1 +SELECT * FROM t1, t2 WHERE a=b; +a b +11:22:33.123000 112233.123 +DROP TABLE t1, t2; +# +# Testing JOIN with comparison between TIME(6) and DOUBLE +# +CREATE TABLE t1 (a TIME(6)); +INSERT INTO t1 VALUES ('11:22:33'); +INSERT INTO t1 VALUES ('11:22:33.123'); +INSERT INTO t1 VALUES ('-11:22:33'); +INSERT INTO t1 VALUES ('-11:22:33.123456'); +CREATE TABLE t2 (b DOUBLE); +INSERT INTO t2 VALUES (112233.123); +INSERT INTO t2 VALUES (-112233.123456); +SELECT * FROM t1, t2 WHERE a=b; +a b +11:22:33.123000 112233.123 +-11:22:33.123456 -112233.123456 +DROP TABLE t1, t2; +# +# Testing JOIN with comparison between TIME(6) and VARCHAR +# +CREATE TABLE t1 (a TIME(6)); +INSERT INTO t1 VALUES ('11:22:33'); +INSERT INTO t1 VALUES ('11:22:33.123'); +INSERT INTO t1 VALUES ('-11:22:33'); +INSERT INTO t1 VALUES ('-11:22:33.123456'); +CREATE TABLE t2 (b VARCHAR(20)); +INSERT INTO t2 VALUES ('11:22:33.123'); +INSERT INTO t2 VALUES ('-11:22:33.123456'); +SELECT * FROM t1, t2 WHERE a=b; +a b +-11:22:33.123456 -11:22:33.123456 +DROP TABLE t1, t2; +# +# Testing arithmetic with INT, DECIMAL, FLOAT +# +CREATE TABLE t1 (a TIME(6)); +INSERT INTO t1 VALUES ('-00:00:00.000001'); +INSERT INTO t1 VALUES ('00:00:00.000000'); +INSERT INTO t1 VALUES ('00:00:00.000001'); +SELECT a, a + 0, a + 1, a + 1.0, a + 1e0 FROM t1; +a a + 0 a + 1 a + 1.0 a + 1e0 +-00:00:00.000001 -0.000001 0.999999 0.999999 0.999999 +00:00:00.000000 0.000000 1.000000 1.000000 1 +00:00:00.000001 0.000001 1.000001 1.000001 1.000001 +CREATE TABLE t2 AS SELECT a + 1 AS i, a + 1.0 AS d, a + 1e0 AS f FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `i` decimal(14,6) DEFAULT NULL, + `d` decimal(14,6) DEFAULT NULL, + `f` double DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t1, t2; +# +# Testing that TIME behaves as INT/DECIMAL for numeric arithmetic +# +CREATE TABLE t1 (t0 TIME, t3 TIME(3), t6 TIME(6)); +CREATE TABLE t2 AS SELECT +t0 + 1, t3 + 1, t6 + 1, +t0 - 1, t3 - 1, t6 - 1, +t0 * 1, t3 * 1, t6 * 1, +t0 / 1, t3 / 1, t6 / 1, +TIME'10:10:10' + 1, +TIME'10:10:10.123' + 1, +TIME'10:10:10.123456' + 1, +TIME'10:10:10' - 1, +TIME'10:10:10.123' - 1, +TIME'10:10:10.123456' - 1, +TIME'10:10:10' * 1, +TIME'10:10:10.123' * 1, +TIME'10:10:10.123456' * 1, +TIME'10:10:10' / 1, +TIME'10:10:10.123' / 1, +TIME'10:10:10.123456' / 1 +FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `t0 + 1` int(9) DEFAULT NULL, + `t3 + 1` decimal(11,3) DEFAULT NULL, + `t6 + 1` decimal(14,6) DEFAULT NULL, + `t0 - 1` int(9) DEFAULT NULL, + `t3 - 1` decimal(11,3) DEFAULT NULL, + `t6 - 1` decimal(14,6) DEFAULT NULL, + `t0 * 1` int(9) DEFAULT NULL, + `t3 * 1` decimal(11,3) DEFAULT NULL, + `t6 * 1` decimal(14,6) DEFAULT NULL, + `t0 / 1` decimal(11,4) DEFAULT NULL, + `t3 / 1` decimal(14,7) DEFAULT NULL, + `t6 / 1` decimal(17,10) DEFAULT NULL, + `TIME'10:10:10' + 1` int(9) NOT NULL DEFAULT '0', + `TIME'10:10:10.123' + 1` decimal(11,3) NOT NULL DEFAULT '0.000', + `TIME'10:10:10.123456' + 1` decimal(14,6) NOT NULL DEFAULT '0.000000', + `TIME'10:10:10' - 1` int(9) NOT NULL DEFAULT '0', + `TIME'10:10:10.123' - 1` decimal(11,3) NOT NULL DEFAULT '0.000', + `TIME'10:10:10.123456' - 1` decimal(14,6) NOT NULL DEFAULT '0.000000', + `TIME'10:10:10' * 1` int(9) NOT NULL DEFAULT '0', + `TIME'10:10:10.123' * 1` decimal(11,3) NOT NULL DEFAULT '0.000', + `TIME'10:10:10.123456' * 1` decimal(14,6) NOT NULL DEFAULT '0.000000', + `TIME'10:10:10' / 1` decimal(11,4) DEFAULT NULL, + `TIME'10:10:10.123' / 1` decimal(14,7) DEFAULT NULL, + `TIME'10:10:10.123456' / 1` decimal(17,10) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t2; +DROP TABLE t1; +# +# Testing that TIME behaves as DECIMAL for SUM() and AVG() +# +SET @t='800:11:12.123456'; +CREATE TABLE t1 (t0 TIME, t3 TIME(3), t6 TIME(6)); +INSERT INTO t1 VALUES (@t, @t, @t); +SELECT MIN(t0), MAX(t0), AVG(t0), SUM(t0) FROM t1; +MIN(t0) 800:11:12 +MAX(t0) 800:11:12 +AVG(t0) 8001112.0000 +SUM(t0) 8001112 +SELECT MIN(t3), MAX(t3), AVG(t3), SUM(t3) FROM t1; +MIN(t3) 800:11:12.123 +MAX(t3) 800:11:12.123 +AVG(t3) 8001112.1230000 +SUM(t3) 8001112.123 +SELECT MIN(t6), MAX(t6), AVG(t6), SUM(t6) FROM t1; +MIN(t6) 800:11:12.123456 +MAX(t6) 800:11:12.123456 +AVG(t6) 8001112.1234560000 +SUM(t6) 8001112.123456 +SET @t='800:11:12.000000'; +INSERT INTO t1 VALUES (@t, @t, @t); +SELECT MIN(t0), MAX(t0), AVG(t0), SUM(t0) FROM t1; +MIN(t0) 800:11:12 +MAX(t0) 800:11:12 +AVG(t0) 8001112.0000 +SUM(t0) 16002224 +SELECT MIN(t3), MAX(t3), AVG(t3), SUM(t3) FROM t1; +MIN(t3) 800:11:12.000 +MAX(t3) 800:11:12.123 +AVG(t3) 8001112.0615000 +SUM(t3) 16002224.123 +SELECT MIN(t6), MAX(t6), AVG(t6), SUM(t6) FROM t1; +MIN(t6) 800:11:12.000000 +MAX(t6) 800:11:12.123456 +AVG(t6) 8001112.0617280000 +SUM(t6) 16002224.123456 +CREATE TABLE t2 AS SELECT +MIN(t0), MAX(t0), AVG(t0), SUM(t0), +MIN(t3), MAX(t3), AVG(t3), SUM(t3), +MIN(t6), MAX(t6), AVG(t6), SUM(t6) +FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `MIN(t0)` time DEFAULT NULL, + `MAX(t0)` time DEFAULT NULL, + `AVG(t0)` decimal(11,4) DEFAULT NULL, + `SUM(t0)` decimal(29,0) DEFAULT NULL, + `MIN(t3)` time(3) DEFAULT NULL, + `MAX(t3)` time(3) DEFAULT NULL, + `AVG(t3)` decimal(14,7) DEFAULT NULL, + `SUM(t3)` decimal(32,3) DEFAULT NULL, + `MIN(t6)` time(6) DEFAULT NULL, + `MAX(t6)` time(6) DEFAULT NULL, + `AVG(t6)` decimal(17,10) DEFAULT NULL, + `SUM(t6)` decimal(35,6) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t2; +DROP TABLE t1; +# +# Testing functions ADDTIME, SUBTIME, TIMEDIFF +# +CREATE TABLE t1 (a TIME(6)); +INSERT INTO t1 VALUES ('-01:00:00.000001'); +INSERT INTO t1 VALUES ('-01:00:00.000000'); +INSERT INTO t1 VALUES ('-00:00:00.000001'); +INSERT INTO t1 VALUES ('00:00:00.000000'); +INSERT INTO t1 VALUES ('00:00:00.000001'); +INSERT INTO t1 VALUES ('01:00:00.000000'); +INSERT INTO t1 VALUES ('01:00:00.000001'); +SELECT ADDTIME(a, '00:00:00.000001') FROM t1; +ADDTIME(a, '00:00:00.000001') +-01:00:00.000000 +-00:59:59.999999 +00:00:00.000000 +00:00:00.000001 +00:00:00.000002 +01:00:00.000001 +01:00:00.000002 +SELECT ADDTIME(a, '10:00:00.000001') FROM t1; +ADDTIME(a, '10:00:00.000001') +09:00:00.000000 +09:00:00.000001 +10:00:00.000000 +10:00:00.000001 +10:00:00.000002 +11:00:00.000001 +11:00:00.000002 +SELECT ADDTIME(a, a) FROM t1; +ADDTIME(a, a) +-02:00:00.000002 +-02:00:00.000000 +-00:00:00.000002 +00:00:00.000000 +00:00:00.000002 +02:00:00.000000 +02:00:00.000002 +SELECT SUBTIME(a, '00:00:00.000001') FROM t1; +SUBTIME(a, '00:00:00.000001') +-01:00:00.000002 +-01:00:00.000001 +-00:00:00.000002 +-00:00:00.000001 +00:00:00.000000 +00:59:59.999999 +01:00:00.000000 +SELECT SUBTIME(a, '10:00:00.000001') FROM t1; +SUBTIME(a, '10:00:00.000001') +-11:00:00.000002 +-11:00:00.000001 +-10:00:00.000002 +-10:00:00.000001 +-10:00:00.000000 +-09:00:00.000001 +-09:00:00.000000 +SELECT SUBTIME(a, a) FROM t1; +SUBTIME(a, a) +00:00:00.000000 +00:00:00.000000 +00:00:00.000000 +00:00:00.000000 +00:00:00.000000 +00:00:00.000000 +00:00:00.000000 +SELECT TIMEDIFF(a, '00:00:00.000001') FROM t1; +TIMEDIFF(a, '00:00:00.000001') +-01:00:00.000002 +-01:00:00.000001 +-00:00:00.000002 +-00:00:00.000001 +00:00:00.000000 +00:59:59.999999 +01:00:00.000000 +SELECT TIMEDIFF('00:00:00.000001', a) FROM t1; +TIMEDIFF('00:00:00.000001', a) +01:00:00.000002 +01:00:00.000001 +00:00:00.000002 +00:00:00.000001 +00:00:00.000000 +-00:59:59.999999 +-01:00:00.000000 +SELECT TIMEDIFF(a, a) FROM t1; +TIMEDIFF(a, a) +00:00:00.000000 +00:00:00.000000 +00:00:00.000000 +00:00:00.000000 +00:00:00.000000 +00:00:00.000000 +00:00:00.000000 +SELECT TIMEDIFF(CAST(a AS TIME(0)), CAST('10:10:10' AS TIME(0))) FROM t1; +TIMEDIFF(CAST(a AS TIME(0)), CAST('10:10:10' AS TIME(0))) +-11:10:10 +-11:10:10 +-10:10:10 +-10:10:10 +-10:10:10 +-09:10:10 +-09:10:10 +CREATE TABLE t2 AS SELECT +ADDTIME(a, '00:00:00.000001'), +ADDTIME(a,a), +SUBTIME(a, '00:00:00.000001'), +SUBTIME(a,a), +TIMEDIFF(a,'00:00:00.000001'), +TIMEDIFF(a,a), +TIMEDIFF(CAST(a AS TIME(0)), CAST('10:10:10' AS TIME(0))) +FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `ADDTIME(a, '00:00:00.000001')` time(6) DEFAULT NULL, + `ADDTIME(a,a)` time(6) DEFAULT NULL, + `SUBTIME(a, '00:00:00.000001')` time(6) DEFAULT NULL, + `SUBTIME(a,a)` time(6) DEFAULT NULL, + `TIMEDIFF(a,'00:00:00.000001')` time(6) DEFAULT NULL, + `TIMEDIFF(a,a)` time(6) DEFAULT NULL, + `TIMEDIFF(CAST(a AS TIME(0)), CAST('10:10:10' AS TIME(0)))` time DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t2; +CREATE TABLE t2 AS SELECT MAX(ADDTIME(a, '00:00:00.1')) FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `MAX(ADDTIME(a, '00:00:00.1'))` time(6) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +SELECT * FROM t2; +MAX(ADDTIME(a, '00:00:00.1')) +01:00:00.100001 +DROP TABLE t2; +DROP TABLE t1; +SELECT TIMEDIFF(TIME'00:00:00', TIME'00:00:00'); +TIMEDIFF(TIME'00:00:00', TIME'00:00:00') +00:00:00 +SELECT TIMEDIFF(TIME'00:00:00', TIME'00:00:00.0'); +TIMEDIFF(TIME'00:00:00', TIME'00:00:00.0') +00:00:00.0 +SELECT TIMEDIFF(TIME'00:00:00', TIME'00:00:00.00'); +TIMEDIFF(TIME'00:00:00', TIME'00:00:00.00') +00:00:00.00 +SELECT TIMEDIFF(TIME'00:00:00', TIME'00:00:00.000'); +TIMEDIFF(TIME'00:00:00', TIME'00:00:00.000') +00:00:00.000 +SELECT TIMEDIFF(TIME'00:00:00', TIME'00:00:00.0000'); +TIMEDIFF(TIME'00:00:00', TIME'00:00:00.0000') +00:00:00.0000 +SELECT TIMEDIFF(TIME'00:00:00', TIME'00:00:00.00000'); +TIMEDIFF(TIME'00:00:00', TIME'00:00:00.00000') +00:00:00.00000 +SELECT TIMEDIFF(TIME'00:00:00', TIME'00:00:00.000000'); +TIMEDIFF(TIME'00:00:00', TIME'00:00:00.000000') +00:00:00.000000 +SELECT TIMEDIFF(TIME'00:00:00.0', TIME'00:00:00'); +TIMEDIFF(TIME'00:00:00.0', TIME'00:00:00') +00:00:00.0 +SELECT TIMEDIFF(TIME'00:00:00.00', TIME'00:00:00'); +TIMEDIFF(TIME'00:00:00.00', TIME'00:00:00') +00:00:00.00 +SELECT TIMEDIFF(TIME'00:00:00.000', TIME'00:00:00'); +TIMEDIFF(TIME'00:00:00.000', TIME'00:00:00') +00:00:00.000 +SELECT TIMEDIFF(TIME'00:00:00.0000', TIME'00:00:00'); +TIMEDIFF(TIME'00:00:00.0000', TIME'00:00:00') +00:00:00.0000 +SELECT TIMEDIFF(TIME'00:00:00.00000', TIME'00:00:00'); +TIMEDIFF(TIME'00:00:00.00000', TIME'00:00:00') +00:00:00.00000 +SELECT TIMEDIFF(TIME'00:00:00.000000', TIME'00:00:00'); +TIMEDIFF(TIME'00:00:00.000000', TIME'00:00:00') +00:00:00.000000 +CREATE TABLE t1 AS SELECT +TIMEDIFF(TIME'00:00:00', TIME'00:00:00'), +TIMEDIFF(TIME'00:00:00', TIME'00:00:00.0'), +TIMEDIFF(TIME'00:00:00', TIME'00:00:00.00'), +TIMEDIFF(TIME'00:00:00', TIME'00:00:00.000'), +TIMEDIFF(TIME'00:00:00', TIME'00:00:00.0000'), +TIMEDIFF(TIME'00:00:00', TIME'00:00:00.00000'), +TIMEDIFF(TIME'00:00:00', TIME'00:00:00.000000'), +TIMEDIFF(TIME'00:00:00.0', TIME'00:00:00'), +TIMEDIFF(TIME'00:00:00.00', TIME'00:00:00'), +TIMEDIFF(TIME'00:00:00.000', TIME'00:00:00'), +TIMEDIFF(TIME'00:00:00.0000', TIME'00:00:00'), +TIMEDIFF(TIME'00:00:00.00000', TIME'00:00:00'), +TIMEDIFF(TIME'00:00:00.000000', TIME'00:00:00'); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `TIMEDIFF(TIME'00:00:00', TIME'00:00:00')` time DEFAULT NULL, + `TIMEDIFF(TIME'00:00:00', TIME'00:00:00.0')` time(1) DEFAULT NULL, + `TIMEDIFF(TIME'00:00:00', TIME'00:00:00.00')` time(2) DEFAULT NULL, + `TIMEDIFF(TIME'00:00:00', TIME'00:00:00.000')` time(3) DEFAULT NULL, + `TIMEDIFF(TIME'00:00:00', TIME'00:00:00.0000')` time(4) DEFAULT NULL, + `TIMEDIFF(TIME'00:00:00', TIME'00:00:00.00000')` time(5) DEFAULT NULL, + `TIMEDIFF(TIME'00:00:00', TIME'00:00:00.000000')` time(6) DEFAULT NULL, + `TIMEDIFF(TIME'00:00:00.0', TIME'00:00:00')` time(1) DEFAULT NULL, + `TIMEDIFF(TIME'00:00:00.00', TIME'00:00:00')` time(2) DEFAULT NULL, + `TIMEDIFF(TIME'00:00:00.000', TIME'00:00:00')` time(3) DEFAULT NULL, + `TIMEDIFF(TIME'00:00:00.0000', TIME'00:00:00')` time(4) DEFAULT NULL, + `TIMEDIFF(TIME'00:00:00.00000', TIME'00:00:00')` time(5) DEFAULT NULL, + `TIMEDIFF(TIME'00:00:00.000000', TIME'00:00:00')` time(6) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t1; +SELECT ADDTIME(TIME'00:00:00', TIME'00:00:00'); +ADDTIME(TIME'00:00:00', TIME'00:00:00') +00:00:00 +SELECT ADDTIME(TIME'00:00:00', TIME'00:00:00.0'); +ADDTIME(TIME'00:00:00', TIME'00:00:00.0') +00:00:00.0 +SELECT ADDTIME(TIME'00:00:00', TIME'00:00:00.00'); +ADDTIME(TIME'00:00:00', TIME'00:00:00.00') +00:00:00.00 +SELECT ADDTIME(TIME'00:00:00', TIME'00:00:00.000'); +ADDTIME(TIME'00:00:00', TIME'00:00:00.000') +00:00:00.000 +SELECT ADDTIME(TIME'00:00:00', TIME'00:00:00.0000'); +ADDTIME(TIME'00:00:00', TIME'00:00:00.0000') +00:00:00.0000 +SELECT ADDTIME(TIME'00:00:00', TIME'00:00:00.00000'); +ADDTIME(TIME'00:00:00', TIME'00:00:00.00000') +00:00:00.00000 +SELECT ADDTIME(TIME'00:00:00', TIME'00:00:00.000000'); +ADDTIME(TIME'00:00:00', TIME'00:00:00.000000') +00:00:00.000000 +SELECT ADDTIME(TIME'00:00:00.0', TIME'00:00:00'); +ADDTIME(TIME'00:00:00.0', TIME'00:00:00') +00:00:00.0 +SELECT ADDTIME(TIME'00:00:00.00', TIME'00:00:00'); +ADDTIME(TIME'00:00:00.00', TIME'00:00:00') +00:00:00.00 +SELECT ADDTIME(TIME'00:00:00.000', TIME'00:00:00'); +ADDTIME(TIME'00:00:00.000', TIME'00:00:00') +00:00:00.000 +SELECT ADDTIME(TIME'00:00:00.0000', TIME'00:00:00'); +ADDTIME(TIME'00:00:00.0000', TIME'00:00:00') +00:00:00.0000 +SELECT ADDTIME(TIME'00:00:00.00000', TIME'00:00:00'); +ADDTIME(TIME'00:00:00.00000', TIME'00:00:00') +00:00:00.00000 +SELECT ADDTIME(TIME'00:00:00.000000', TIME'00:00:00'); +ADDTIME(TIME'00:00:00.000000', TIME'00:00:00') +00:00:00.000000 +SELECT SUBTIME(TIME'00:00:00', TIME'00:00:00'); +SUBTIME(TIME'00:00:00', TIME'00:00:00') +00:00:00 +SELECT SUBTIME(TIME'00:00:00', TIME'00:00:00.0'); +SUBTIME(TIME'00:00:00', TIME'00:00:00.0') +00:00:00.0 +SELECT SUBTIME(TIME'00:00:00', TIME'00:00:00.00'); +SUBTIME(TIME'00:00:00', TIME'00:00:00.00') +00:00:00.00 +SELECT SUBTIME(TIME'00:00:00', TIME'00:00:00.000'); +SUBTIME(TIME'00:00:00', TIME'00:00:00.000') +00:00:00.000 +SELECT SUBTIME(TIME'00:00:00', TIME'00:00:00.0000'); +SUBTIME(TIME'00:00:00', TIME'00:00:00.0000') +00:00:00.0000 +SELECT SUBTIME(TIME'00:00:00', TIME'00:00:00.00000'); +SUBTIME(TIME'00:00:00', TIME'00:00:00.00000') +00:00:00.00000 +SELECT SUBTIME(TIME'00:00:00', TIME'00:00:00.000000'); +SUBTIME(TIME'00:00:00', TIME'00:00:00.000000') +00:00:00.000000 +SELECT SUBTIME(TIME'00:00:00.0', TIME'00:00:00'); +SUBTIME(TIME'00:00:00.0', TIME'00:00:00') +00:00:00.0 +SELECT SUBTIME(TIME'00:00:00.00', TIME'00:00:00'); +SUBTIME(TIME'00:00:00.00', TIME'00:00:00') +00:00:00.00 +SELECT SUBTIME(TIME'00:00:00.000', TIME'00:00:00'); +SUBTIME(TIME'00:00:00.000', TIME'00:00:00') +00:00:00.000 +SELECT SUBTIME(TIME'00:00:00.0000', TIME'00:00:00'); +SUBTIME(TIME'00:00:00.0000', TIME'00:00:00') +00:00:00.0000 +SELECT SUBTIME(TIME'00:00:00.00000', TIME'00:00:00'); +SUBTIME(TIME'00:00:00.00000', TIME'00:00:00') +00:00:00.00000 +SELECT SUBTIME(TIME'00:00:00.000000', TIME'00:00:00'); +SUBTIME(TIME'00:00:00.000000', TIME'00:00:00') +00:00:00.000000 +# +# Testing TIME + INTERVAL +# +SELECT CAST('00:00:00' AS TIME) + INTERVAL 2000 HOUR; +CAST('00:00:00' AS TIME) + INTERVAL 2000 HOUR +NULL +Warnings: +Warning 1441 Datetime function: time field overflow +SELECT CAST('00:00:00' AS TIME) + INTERVAL 34 DAY; +CAST('00:00:00' AS TIME) + INTERVAL 34 DAY +816:00:00 +SELECT CAST('00:00:00' AS TIME) + INTERVAL 35 DAY; +CAST('00:00:00' AS TIME) + INTERVAL 35 DAY +NULL +Warnings: +Warning 1441 Datetime function: time field overflow +SELECT CAST('00:00:00' AS TIME) + INTERVAL 1 MONTH; +CAST('00:00:00' AS TIME) + INTERVAL 1 MONTH +NULL +Warnings: +Warning 1441 Datetime function: time field overflow +SELECT CAST('00:00:00' AS TIME) + INTERVAL 1 YEAR; +CAST('00:00:00' AS TIME) + INTERVAL 1 YEAR +NULL +Warnings: +Warning 1441 Datetime function: time field overflow +SET @@timestamp=UNIX_TIMESTAMP('2001-01-01 00:00:00'); +SELECT CAST(CAST('00:00:00.123456' AS TIME(6)) + INTERVAL 1 DAY AS DATETIME(6)); +CAST(CAST('00:00:00.123456' AS TIME(6)) + INTERVAL 1 DAY AS DATETIME(6)) +2001-01-02 00:00:00.123456 +SET @@timestamp=default; +SELECT CAST(CAST('2001-01-01 00:00:00.123456' AS DATETIME(6)) + INTERVAL 30 HOUR AS TIME(6)); +CAST(CAST('2001-01-01 00:00:00.123456' AS DATETIME(6)) + INTERVAL 30 HOUR AS TIME(6)) +06:00:00.123456 +CREATE TABLE t1 (a TIME(6)); +INSERT INTO t1 VALUES ('-10:00:00.1'), ('00:00:00.1'), ('10:00:00.1'); +SELECT a, a + INTERVAL 1 HOUR, a - INTERVAL 1 HOUR FROM t1; +a a + INTERVAL 1 HOUR a - INTERVAL 1 HOUR +-10:00:00.100000 -09:00:00.100000 -11:00:00.100000 +00:00:00.100000 01:00:00.100000 -00:59:59.900000 +10:00:00.100000 11:00:00.100000 09:00:00.100000 +SELECT a, a + INTERVAL 1 SECOND, a - INTERVAL 1 SECOND FROM t1; +a a + INTERVAL 1 SECOND a - INTERVAL 1 SECOND +-10:00:00.100000 -09:59:59.100000 -10:00:01.100000 +00:00:00.100000 00:00:01.100000 -00:00:00.900000 +10:00:00.100000 10:00:01.100000 09:59:59.100000 +SELECT a, a + INTERVAL 1.1 SECOND, a - INTERVAL 1.1 SECOND FROM t1; +a a + INTERVAL 1.1 SECOND a - INTERVAL 1.1 SECOND +-10:00:00.100000 -09:59:59.000000 -10:00:01.200000 +00:00:00.100000 00:00:01.200000 -00:00:01.000000 +10:00:00.100000 10:00:01.200000 09:59:59.000000 +CREATE TABLE t2 AS SELECT +a + INTERVAL 1 HOUR, +a - INTERVAL 1 HOUR, +a + INTERVAL 1 SECOND, +a - INTERVAL 1 SECOND, +a + INTERVAL 1.1 SECOND, +a - INTERVAL 1.1 SECOND +FROM t1; +DESCRIBE t2; +Field Type Null Key Default Extra +a + INTERVAL 1 HOUR time(6) YES NULL +a - INTERVAL 1 HOUR time(6) YES NULL +a + INTERVAL 1 SECOND time(6) YES NULL +a - INTERVAL 1 SECOND time(6) YES NULL +a + INTERVAL 1.1 SECOND time(6) YES NULL +a - INTERVAL 1.1 SECOND time(6) YES NULL +DROP TABLE t2; +ALTER TABLE t1 MODIFY a TIME; +SELECT a, a + INTERVAL 1 HOUR, a - INTERVAL 1 HOUR FROM t1; +a a + INTERVAL 1 HOUR a - INTERVAL 1 HOUR +-10:00:00 -09:00:00 -11:00:00 +00:00:00 01:00:00 -01:00:00 +10:00:00 11:00:00 09:00:00 +SELECT a, a + INTERVAL 1 SECOND, a - INTERVAL 1 SECOND FROM t1; +a a + INTERVAL 1 SECOND a - INTERVAL 1 SECOND +-10:00:00 -09:59:59 -10:00:01 +00:00:00 00:00:01 -00:00:01 +10:00:00 10:00:01 09:59:59 +SELECT a, a + INTERVAL 1.1 SECOND, a - INTERVAL 1.1 SECOND FROM t1; +a a + INTERVAL 1.1 SECOND a - INTERVAL 1.1 SECOND +-10:00:00 -09:59:58.9 -10:00:01.1 +00:00:00 00:00:01.1 -00:00:01.1 +10:00:00 10:00:01.1 09:59:58.9 +CREATE TABLE t2 AS SELECT +a + INTERVAL 1 HOUR, +a - INTERVAL 1 HOUR, +a + INTERVAL 1 SECOND, +a - INTERVAL 1 SECOND, +a + INTERVAL 1.1 SECOND, +a - INTERVAL 1.1 SECOND +FROM t1; +DESCRIBE t2; +Field Type Null Key Default Extra +a + INTERVAL 1 HOUR time YES NULL +a - INTERVAL 1 HOUR time YES NULL +a + INTERVAL 1 SECOND time YES NULL +a - INTERVAL 1 SECOND time YES NULL +a + INTERVAL 1.1 SECOND time(1) YES NULL +a - INTERVAL 1.1 SECOND time(1) YES NULL +DROP TABLE t2; +DROP TABLE t1; +# +# Testing SEC_TO_TIME +# +CREATE TABLE t1 AS SELECT SEC_TO_TIME(3661), CAST(SEC_TO_TIME(3661) AS CHAR); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `SEC_TO_TIME(3661)` time DEFAULT NULL, + `CAST(SEC_TO_TIME(3661) AS CHAR)` varchar(10) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +SELECT * FROM t1; +SEC_TO_TIME(3661) CAST(SEC_TO_TIME(3661) AS CHAR) +01:01:01 01:01:01 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT +SEC_TO_TIME(3661.1), +SEC_TO_TIME(3661.11), +SEC_TO_TIME(3661.111), +SEC_TO_TIME(3661.1111), +SEC_TO_TIME(3661.11111), +SEC_TO_TIME(3661.111111), +SEC_TO_TIME(3661.1111111); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `SEC_TO_TIME(3661.1)` time(1) DEFAULT NULL, + `SEC_TO_TIME(3661.11)` time(2) DEFAULT NULL, + `SEC_TO_TIME(3661.111)` time(3) DEFAULT NULL, + `SEC_TO_TIME(3661.1111)` time(4) DEFAULT NULL, + `SEC_TO_TIME(3661.11111)` time(5) DEFAULT NULL, + `SEC_TO_TIME(3661.111111)` time(6) DEFAULT NULL, + `SEC_TO_TIME(3661.1111111)` time(6) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +SELECT * FROM t1; +SEC_TO_TIME(3661.1) SEC_TO_TIME(3661.11) SEC_TO_TIME(3661.111) SEC_TO_TIME(3661.1111) SEC_TO_TIME(3661.11111) SEC_TO_TIME(3661.111111) SEC_TO_TIME(3661.1111111) +01:01:01.1 01:01:01.11 01:01:01.111 01:01:01.1111 01:01:01.11111 01:01:01.111111 01:01:01.111111 +DROP TABLE t1; +# +# Testing copy from TIME to TIME(6) and vice versa +# +CREATE TABLE t1 (a TIME(6), b TIME); +INSERT INTO t1 VALUES ('01:02:03.123456', '00:00:00'); +UPDATE t1 SET b=a; +SELECT * FROM t1; +a b +01:02:03.123456 01:02:03 +UPDATE t1 SET b='10:11:12'; +UPDATE t1 SET a=b; +SELECT * FROM t1; +a b +10:11:12.000000 10:11:12 +DROP TABLE t1; +# +# Testing ALTER from TIME(6) to TIME and vice versa +# +CREATE TABLE t1 (a TIME); +INSERT INTO t1 VALUES ('01:02:03'); +ALTER TABLE t1 MODIFY a TIME(6); +SELECT * FROM t1; +a +01:02:03.000000 +UPDATE t1 SET a='01:03:03.456'; +SELECT * FROM t1; +a +01:03:03.456000 +ALTER TABLE t1 MODIFY a TIME; +SELECT * FROM t1; +a +01:03:03 +DROP TABLE t1; +# +# Testing ALTER between TIME and INT +# +CREATE TABLE t1 (a TIME, b TIME(6)); +INSERT INTO t1 VALUES ('11:22:33', '11:22:33'); +ALTER TABLE t1 MODIFY a INT, MODIFY b INT; +SELECT * FROM t1; +a b +112233 112233 +UPDATE t1 SET a=112233, b=112233; +ALTER TABLE t1 MODIFY a TIME, MODIFY b TIME(6); +SELECT * FROM t1; +a b +11:22:33 11:22:33.000000 +DROP TABLE t1; +# +# Testing ALTER between TIME and DOUBLE +# +CREATE TABLE t1 (a TIME, b TIME(6)); +INSERT INTO t1 VALUES ('11:22:33', '11:22:33.1234'); +ALTER TABLE t1 MODIFY a DOUBLE, MODIFY b DOUBLE; +SELECT * FROM t1; +a b +112233 112233.1234 +UPDATE t1 SET a=112233, b=112233.1234; +ALTER TABLE t1 MODIFY a TIME, MODIFY b TIME(6); +SELECT * FROM t1; +a b +11:22:33 11:22:33.123400 +DROP TABLE t1; +# +# Testing ALTER between TIME and DECIMAL +# +CREATE TABLE t1 (a TIME, b TIME(6)); +INSERT INTO t1 VALUES ('11:22:33', '11:22:33.1234'); +ALTER TABLE t1 MODIFY a DECIMAL(20,6), MODIFY b DECIMAL(20,6); +SELECT * FROM t1; +a b +112233.000000 112233.123400 +UPDATE t1 SET a=112233, b=112233.1234; +ALTER TABLE t1 MODIFY a TIME, MODIFY b TIME(6); +SELECT * FROM t1; +a b +11:22:33 11:22:33.123400 +DROP TABLE t1; +# +# Testing ALTER from TIME to various other temporal types +# +SET @@timestamp=UNIX_TIMESTAMP('2001-01-01 00:00:00'); +CREATE TABLE t1 (a TIME(6), b TIME(6), c TIME(6)); +INSERT INTO t1 VALUES ('10:10:10.1', '10:10:10.1', '10:10:10.1'); +INSERT INTO t1 VALUES ('34:10:10.1', '34:10:10.1', '34:10:10.1'); +ALTER TABLE t1 MODIFY a DATETIME(6), MODIFY b TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6), MODIFY c DATE; +Warnings: +Note 1292 Incorrect date value: '10:10:10' for column 'c' at row 1 +Note 1292 Incorrect date value: '34:10:10' for column 'c' at row 2 +SELECT * FROM t1; +a b c +2001-01-01 10:10:10.100000 2001-01-01 10:10:10.100000 2001-01-01 +2001-01-02 10:10:10.100000 2001-01-02 10:10:10.100000 2001-01-02 +DROP TABLE t1; +SET @@timestamp=default; +# +# Testing UPDATE from TIME to various other temporal types +# +SET @@timestamp=UNIX_TIMESTAMP('2001-01-01 00:00:00'); +CREATE TABLE t1 (t6 TIME(6), d DATE, ts6 TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6), dt6 DATETIME(6)); +INSERT INTO t1 (t6) VALUES ('10:10:10.1'), ('34:10:10.1'); +UPDATE t1 SET d=t6, ts6=t6, dt6=t6; +Warnings: +Note 1292 Incorrect date value: '10:10:10' for column 'd' at row 1 +Note 1292 Incorrect date value: '34:10:10' for column 'd' at row 2 +SELECT * FROM t1; +t6 d ts6 dt6 +10:10:10.100000 2001-01-01 2001-01-01 10:10:10.100000 2001-01-01 10:10:10.100000 +34:10:10.100000 2001-01-02 2001-01-02 10:10:10.100000 2001-01-02 10:10:10.100000 +DROP TABLE t1; +SET @@timestamp=default; +# +# Testing EXPLAIN EXTENDED SELECT for CAST(TIME(N)) +# +EXPLAIN EXTENDED SELECT CAST('10:10:10' AS TIME); +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL No tables used +Warnings: +Warning 1681 'EXTENDED' is deprecated and will be removed in a future release. +Note 1003 /* select#1 */ select cast('10:10:10' as time) AS `CAST('10:10:10' AS TIME)` +EXPLAIN EXTENDED SELECT CAST('10:10:10' AS TIME(0)); +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL No tables used +Warnings: +Warning 1681 'EXTENDED' is deprecated and will be removed in a future release. +Note 1003 /* select#1 */ select cast('10:10:10' as time) AS `CAST('10:10:10' AS TIME(0))` +EXPLAIN EXTENDED SELECT CAST('10:10:10' AS TIME(1)); +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL No tables used +Warnings: +Warning 1681 'EXTENDED' is deprecated and will be removed in a future release. +Note 1003 /* select#1 */ select cast('10:10:10' as time(1)) AS `CAST('10:10:10' AS TIME(1))` +EXPLAIN EXTENDED SELECT CAST('10:10:10' AS TIME(2)); +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL No tables used +Warnings: +Warning 1681 'EXTENDED' is deprecated and will be removed in a future release. +Note 1003 /* select#1 */ select cast('10:10:10' as time(2)) AS `CAST('10:10:10' AS TIME(2))` +EXPLAIN EXTENDED SELECT CAST('10:10:10' AS TIME(3)); +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL No tables used +Warnings: +Warning 1681 'EXTENDED' is deprecated and will be removed in a future release. +Note 1003 /* select#1 */ select cast('10:10:10' as time(3)) AS `CAST('10:10:10' AS TIME(3))` +EXPLAIN EXTENDED SELECT CAST('10:10:10' AS TIME(4)); +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL No tables used +Warnings: +Warning 1681 'EXTENDED' is deprecated and will be removed in a future release. +Note 1003 /* select#1 */ select cast('10:10:10' as time(4)) AS `CAST('10:10:10' AS TIME(4))` +EXPLAIN EXTENDED SELECT CAST('10:10:10' AS TIME(5)); +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL No tables used +Warnings: +Warning 1681 'EXTENDED' is deprecated and will be removed in a future release. +Note 1003 /* select#1 */ select cast('10:10:10' as time(5)) AS `CAST('10:10:10' AS TIME(5))` +EXPLAIN EXTENDED SELECT CAST('10:10:10' AS TIME(6)); +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL No tables used +Warnings: +Warning 1681 'EXTENDED' is deprecated and will be removed in a future release. +Note 1003 /* select#1 */ select cast('10:10:10' as time(6)) AS `CAST('10:10:10' AS TIME(6))` +# +# Testing CAST with bad FSPs +# +SELECT CAST(1 AS TIME(-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 1 +SELECT CAST(1 AS TIME(7)); +ERROR 42000: Too-big precision 7 specified for 'CAST'. Maximum is 6. +SELECT CAST(1 AS TIME(31)); +ERROR 42000: Too-big precision 31 specified for 'CAST'. Maximum is 6. +# +# Testing conversion from TIME(6) to INT +# +CREATE TABLE t1 (a TIME(6)); +INSERT INTO t1 VALUES ('10:10:58.499'); +INSERT INTO t1 VALUES ('10:10:58.999'); +INSERT INTO t1 VALUES ('10:10:59.499'); +INSERT INTO t1 VALUES ('10:10:59.999'); +INSERT INTO t1 VALUES ('-10:10:58.499'); +INSERT INTO t1 VALUES ('-10:10:58.999'); +INSERT INTO t1 VALUES ('-10:10:59.499'); +INSERT INTO t1 VALUES ('-10:10:59.999'); +ALTER TABLE t1 ADD b BIGINT, ADD c TIME(6); +UPDATE t1 SET b=a, c=a; +ALTER TABLE t1 MODIFY c BIGINT; +SELECT a, CAST(a AS SIGNED), b, c FROM t1; +a CAST(a AS SIGNED) b c +10:10:58.499000 101058 101058 101058 +10:10:58.999000 101059 101059 101059 +10:10:59.499000 101059 101059 101059 +10:10:59.999000 101100 101100 101100 +-10:10:58.499000 -101058 -101058 -101058 +-10:10:58.999000 -101059 -101059 -101059 +-10:10:59.499000 -101059 -101059 -101059 +-10:10:59.999000 -101100 -101100 -101100 +DROP TABLE t1; +# +# Testing INT value and CAST of TIME(6) to various other types +# +CREATE TABLE t1 (a TIME(6)); +INSERT INTO t1 VALUES ('11:22:33.123'); +INSERT INTO t1 VALUES ('11:22:33.999'); +INSERT INTO t1 VALUES ('-11:22:33.123'); +INSERT INTO t1 VALUES ('-11:22:33.999'); +INSERT INTO t1 VALUES ('-836:56:56.999999'); +SELECT a << 0 FROM t1; +a << 0 +112233 +112234 +18446744073709439383 +18446744073709439382 +18446744073701185959 +SELECT CAST(a AS SIGNED) FROM t1; +CAST(a AS SIGNED) +112233 +112234 +-112233 +-112234 +-8365657 +SELECT CAST(a AS UNSIGNED) FROM t1; +CAST(a AS UNSIGNED) +112233 +112234 +18446744073709439383 +18446744073709439382 +18446744073701185959 +SELECT CAST(a AS DECIMAL(20,6)) FROM t1; +CAST(a AS DECIMAL(20,6)) +112233.123000 +112233.999000 +-112233.123000 +-112233.999000 +-8365656.999999 +SELECT CAST(a AS DECIMAL(20,3)) FROM t1; +CAST(a AS DECIMAL(20,3)) +112233.123 +112233.999 +-112233.123 +-112233.999 +-8365657.000 +SELECT CAST(a AS CHAR) FROM t1; +CAST(a AS CHAR) +11:22:33.123000 +11:22:33.999000 +-11:22:33.123000 +-11:22:33.999000 +-836:56:56.999999 +SELECT CAST(a AS CHAR(6)) FROM t1; +CAST(a AS CHAR(6)) +11:22: +11:22: +-11:22 +-11:22 +-836:5 +Warnings: +Warning 1292 Truncated incorrect CHAR(6) value: '11:22:33.123000' +Warning 1292 Truncated incorrect CHAR(6) value: '11:22:33.999000' +Warning 1292 Truncated incorrect CHAR(6) value: '-11:22:33.123000' +Warning 1292 Truncated incorrect CHAR(6) value: '-11:22:33.999000' +Warning 1292 Truncated incorrect CHAR(6) value: '-836:56:56.999999' +CREATE TABLE t2 AS SELECT CAST(a AS CHAR) AS a FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` varchar(17) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +SELECT a, LENGTH(a) FROM t2; +a LENGTH(a) +11:22:33.123000 15 +11:22:33.999000 15 +-11:22:33.123000 16 +-11:22:33.999000 16 +-836:56:56.999999 17 +DROP TABLE t2; +DROP TABLE t1; +# +# Testing DEFAULT value +# +CREATE TABLE t1 (a TIME(6) NOT NULL DEFAULT '11:22:33.123456'); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` time(6) NOT NULL DEFAULT '11:22:33.123456' +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t1; +# +# Mixing TIME(6) with another TIME(6) in IF +# +CREATE TABLE t1 (a TIME(6), b TIME(6)); +CREATE TABLE t2 AS SELECT IF(1, a, b) AS a FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` time(6) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t2; +DROP TABLE t1; +# +# Mixing TIME(N) with TIME(M) in IF +# +CREATE TABLE t1 (a TIME(1), b TIME(2)); +CREATE TABLE t2 AS SELECT IF(1, a, b) AS a FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` time(2) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t2; +DROP TABLE t1; +# +# Mixing varios TIME(N) in CASE +# +CREATE TABLE t1 (t0 TIME, t1 TIME(1), t3 TIME(3), t4 TIME(4), t6 TIME(6)); +CREATE TABLE t2 AS SELECT +CASE WHEN 1 THEN t0 ELSE t1 END, +CASE WHEN 1 THEN t0 ELSE t3 END, +CASE WHEN 1 THEN t0 ELSE t4 END, +CASE WHEN 1 THEN t0 ELSE t6 END, +CASE WHEN 1 THEN t1 ELSE t0 END, +CASE WHEN 1 THEN t1 ELSE t3 END, +CASE WHEN 1 THEN t1 ELSE t4 END, +CASE WHEN 1 THEN t1 ELSE t6 END, +CASE WHEN 1 THEN t3 ELSE t0 END, +CASE WHEN 1 THEN t3 ELSE t1 END, +CASE WHEN 1 THEN t3 ELSE t4 END, +CASE WHEN 1 THEN t3 ELSE t6 END, +CASE WHEN 1 THEN t4 ELSE t0 END, +CASE WHEN 1 THEN t4 ELSE t1 END, +CASE WHEN 1 THEN t4 ELSE t3 END, +CASE WHEN 1 THEN t4 ELSE t6 END, +CASE WHEN 1 THEN t6 ELSE t0 END, +CASE WHEN 1 THEN t6 ELSE t1 END, +CASE WHEN 1 THEN t6 ELSE t3 END, +CASE WHEN 1 THEN t6 ELSE t4 END +FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `CASE WHEN 1 THEN t0 ELSE t1 END` time(1) DEFAULT NULL, + `CASE WHEN 1 THEN t0 ELSE t3 END` time(3) DEFAULT NULL, + `CASE WHEN 1 THEN t0 ELSE t4 END` time(4) DEFAULT NULL, + `CASE WHEN 1 THEN t0 ELSE t6 END` time(6) DEFAULT NULL, + `CASE WHEN 1 THEN t1 ELSE t0 END` time(1) DEFAULT NULL, + `CASE WHEN 1 THEN t1 ELSE t3 END` time(3) DEFAULT NULL, + `CASE WHEN 1 THEN t1 ELSE t4 END` time(4) DEFAULT NULL, + `CASE WHEN 1 THEN t1 ELSE t6 END` time(6) DEFAULT NULL, + `CASE WHEN 1 THEN t3 ELSE t0 END` time(3) DEFAULT NULL, + `CASE WHEN 1 THEN t3 ELSE t1 END` time(3) DEFAULT NULL, + `CASE WHEN 1 THEN t3 ELSE t4 END` time(4) DEFAULT NULL, + `CASE WHEN 1 THEN t3 ELSE t6 END` time(6) DEFAULT NULL, + `CASE WHEN 1 THEN t4 ELSE t0 END` time(4) DEFAULT NULL, + `CASE WHEN 1 THEN t4 ELSE t1 END` time(4) DEFAULT NULL, + `CASE WHEN 1 THEN t4 ELSE t3 END` time(4) DEFAULT NULL, + `CASE WHEN 1 THEN t4 ELSE t6 END` time(6) DEFAULT NULL, + `CASE WHEN 1 THEN t6 ELSE t0 END` time(6) DEFAULT NULL, + `CASE WHEN 1 THEN t6 ELSE t1 END` time(6) DEFAULT NULL, + `CASE WHEN 1 THEN t6 ELSE t3 END` time(6) DEFAULT NULL, + `CASE WHEN 1 THEN t6 ELSE t4 END` time(6) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t2; +DROP TABLE t1; +# +# Mixing various TIME(N) in COALESCE +# +CREATE TABLE t1 (a TIME(6), b TIME(6), c TIME, d TIME, e TIME(3), f TIME(4)); +CREATE TABLE t2 AS SELECT +COALESCE(a,b), COALESCE(c,b), +COALESCE(c,d), COALESCE(e,f), +COALESCE(c,e), COALESCE(c,f) +FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `COALESCE(a,b)` time(6) DEFAULT NULL, + `COALESCE(c,b)` time(6) DEFAULT NULL, + `COALESCE(c,d)` time DEFAULT NULL, + `COALESCE(e,f)` time(4) DEFAULT NULL, + `COALESCE(c,e)` time(3) DEFAULT NULL, + `COALESCE(c,f)` time(4) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t2; +CREATE TABLE t2 AS SELECT +CONCAT(COALESCE(a, b)), CONCAT(COALESCE(c, b)), +CONCAT(COALESCE(c, d)), CONCAT(COALESCE(e, f)), +CONCAT(COALESCE(c, e)), CONCAT(COALESCE(c, f)) +FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `CONCAT(COALESCE(a, b))` varchar(17) DEFAULT NULL, + `CONCAT(COALESCE(c, b))` varchar(17) DEFAULT NULL, + `CONCAT(COALESCE(c, d))` varchar(10) DEFAULT NULL, + `CONCAT(COALESCE(e, f))` varchar(15) DEFAULT NULL, + `CONCAT(COALESCE(c, e))` varchar(14) DEFAULT NULL, + `CONCAT(COALESCE(c, f))` varchar(15) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t2; +DROP TABLE t1; +# +# Mixing TIME(6) NOT NULL with another TIME(6) NOT NULL +# +CREATE TABLE t1 (a TIME(6) NOT NULL, b TIME(6) NOT NULL); +CREATE TABLE t2 AS SELECT IF(1, a, b) AS a FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` time(6) NOT NULL DEFAULT '00:00:00.000000' +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t2; +DROP TABLE t1; +# +# UNION between TIME(6) and TIME(6) +# +CREATE TABLE t1 (a TIME(6) NOT NULL, b TIME(6) NOT NULL); +INSERT INTO t1 VALUES ('11:22:33.123456', '00:11:22.123456'); +CREATE TABLE t2 AS SELECT a FROM t1 UNION SELECT b FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` time(6) NOT NULL DEFAULT '00:00:00.000000' +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +SELECT * FROM t2 ORDER BY a; +a +00:11:22.123456 +11:22:33.123456 +DROP TABLE t2; +DROP TABLE t1; +# +# UNION between TIME(6) and TIME +# +CREATE TABLE t1 (t0 TIME NOT NULL, t6 TIME(6) NOT NULL, t3 TIME(3), t4 TIME(4)); +INSERT INTO t1 VALUES +('11:22:33.123456', '00:11:22.123456', '00:11:23.123', '00:11:24.123'); +CREATE TABLE t2 AS SELECT t0 FROM t1 UNION SELECT t6 FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `t0` time(6) NOT NULL DEFAULT '00:00:00.000000' +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +SELECT * FROM t2 ORDER BY t0; +t0 +00:11:22.123456 +11:22:33.000000 +DROP TABLE t2; +CREATE TABLE t2 AS SELECT t6 FROM t1 UNION SELECT t0 FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `t6` time(6) NOT NULL DEFAULT '00:00:00.000000' +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +SELECT * FROM t2 ORDER BY t6; +t6 +00:11:22.123456 +11:22:33.000000 +DROP TABLE t2; +CREATE TABLE t2 AS SELECT t3 FROM t1 UNION SELECT t4 FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `t3` time(4) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +SELECT * FROM t2 ORDER BY t3; +t3 +00:11:23.1230 +00:11:24.1230 +DROP TABLE t2; +DROP TABLE t1; +# +# UNION between TIME(6) and various other types +# +CREATE TABLE t1 (a TIME(6), b INT, c DOUBLE, d DECIMAL(20,6), e VARCHAR(20)); +CREATE TABLE t2 AS SELECT a FROM t1 UNION SELECT b FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` varchar(17) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t2; +CREATE TABLE t2 AS SELECT a FROM t1 UNION SELECT c FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` varchar(22) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t2; +CREATE TABLE t2 AS SELECT a FROM t1 UNION SELECT d FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` varchar(22) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t2; +CREATE TABLE t2 AS SELECT a FROM t1 UNION SELECT e FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` varchar(20) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t2; +DROP TABLE t1; +# +# Testing TIME(6) field in combination with TIME type functions +# +CREATE TABLE t1 (a TIME(6), b TIME(6)); +INSERT INTO t1 VALUES ('10:00:00.123456', '00:00:00.123456'); +INSERT INTO t1 VALUES ('10:00:00', '00:00:00'); +SELECT * FROM t1 WHERE a=ADDTIME(b, '10:00:00'); +a b +10:00:00.123456 00:00:00.123456 +10:00:00.000000 00:00:00.000000 +SELECT * FROM t1 WHERE b=TIMEDIFF(a, '10:00:00'); +a b +10:00:00.123456 00:00:00.123456 +10:00:00.000000 00:00:00.000000 +SELECT a FROM t1 WHERE a=MAKETIME(10,0,0); +a +10:00:00.000000 +SELECT a FROM t1 WHERE a=SEC_TO_TIME(36000); +a +10:00:00.000000 +DELETE FROM t1; +INSERT INTO t1 VALUES (CURTIME(), CURTIME()); +SELECT COUNT(*) FROM t1 WHERE a <= CURTIME(); +COUNT(*) +1 +DROP TABLE t1; +# +# ORDER BY a TIME(6) function +# +CREATE TABLE t1(a TIME(6)); +INSERT INTO t1 (a) VALUES ('835:00:00.000002'); +INSERT INTO t1 (a) VALUES ('835:00:00.000000'); +INSERT INTO t1 (a) VALUES ('835:00:00.000001'); +INSERT INTO t1 (a) VALUES ('00:00:00.000003'); +INSERT INTO t1 (a) VALUES ('00:00:00.000000'); +INSERT INTO t1 (a) VALUES ('00:00:00.000001'); +INSERT INTO t1 (a) VALUES ('-836:00:00.000000'); +INSERT INTO t1 (a) VALUES ('-836:00:00.000001'); +INSERT INTO t1 (a) VALUES ('-836:00:00.000002'); +SELECT * FROM t1 ORDER BY ADDTIME(a, '00:00:00'); +a +-836:00:00.000002 +-836:00:00.000001 +-836:00:00.000000 +00:00:00.000000 +00:00:00.000001 +00:00:00.000003 +835:00:00.000000 +835:00:00.000001 +835:00:00.000002 +SELECT * FROM t1 ORDER BY TIMEDIFF(a, '00:00:00'); +a +-836:00:00.000002 +-836:00:00.000001 +-836:00:00.000000 +00:00:00.000000 +00:00:00.000001 +00:00:00.000003 +835:00:00.000000 +835:00:00.000001 +835:00:00.000002 +SELECT * FROM t1 ORDER BY ADDTIME(a, '00:00:00') DESC; +a +835:00:00.000002 +835:00:00.000001 +835:00:00.000000 +00:00:00.000003 +00:00:00.000001 +00:00:00.000000 +-836:00:00.000000 +-836:00:00.000001 +-836:00:00.000002 +SELECT * FROM t1 ORDER BY TIMEDIFF(a, '00:00:00') DESC; +a +835:00:00.000002 +835:00:00.000001 +835:00:00.000000 +00:00:00.000003 +00:00:00.000001 +00:00:00.000000 +-836:00:00.000000 +-836:00:00.000001 +-836:00:00.000002 +DROP TABLE t1; +# +# Testing partitions +# +CREATE TABLE t1 (a TIME(6)) PARTITION BY KEY(a) PARTITIONS 4; +INSERT INTO t1 VALUES ('00:00:00.000000'); +INSERT INTO t1 VALUES ('00:00:00.000001'); +INSERT INTO t1 VALUES ('00:00:00.000002'); +INSERT INTO t1 VALUES ('00:00:00.000003'); +INSERT INTO t1 VALUES ('00:00:00.000004'); +INSERT INTO t1 VALUES ('00:00:00.000005'); +INSERT INTO t1 VALUES ('00:00:00.000006'); +INSERT INTO t1 VALUES ('00:00:00.000010'); +INSERT INTO t1 VALUES ('00:00:00.000011'); +INSERT INTO t1 VALUES ('00:00:00.000012'); +INSERT INTO t1 VALUES ('00:00:00.000013'); +INSERT INTO t1 VALUES ('00:00:00.000014'); +INSERT INTO t1 VALUES ('00:00:00.000015'); +INSERT INTO t1 VALUES ('00:00:00.000016'); +INSERT INTO t1 VALUES ('00:00:00.000110'); +INSERT INTO t1 VALUES ('00:00:00.000111'); +INSERT INTO t1 VALUES ('00:00:00.000112'); +INSERT INTO t1 VALUES ('00:00:00.000113'); +INSERT INTO t1 VALUES ('00:00:00.000114'); +INSERT INTO t1 VALUES ('00:00:00.000115'); +INSERT INTO t1 VALUES ('00:00:00.000116'); +INSERT INTO t1 VALUES ('00:00:00.000210'); +INSERT INTO t1 VALUES ('00:00:00.000211'); +INSERT INTO t1 VALUES ('00:00:00.000212'); +INSERT INTO t1 VALUES ('00:00:00.000213'); +INSERT INTO t1 VALUES ('00:00:00.000214'); +INSERT INTO t1 VALUES ('00:00:00.000215'); +INSERT INTO t1 VALUES ('00:00:00.000216'); +INSERT INTO t1 VALUES ('00:00:01.000000'); +INSERT INTO t1 VALUES ('00:00:01.000001'); +INSERT INTO t1 VALUES ('00:00:01.000002'); +INSERT INTO t1 VALUES ('00:00:01.000003'); +INSERT INTO t1 VALUES ('00:00:01.000004'); +INSERT INTO t1 VALUES ('00:00:01.000005'); +INSERT INTO t1 VALUES ('00:00:01.000006'); +INSERT INTO t1 VALUES ('00:00:02.000000'); +INSERT INTO t1 VALUES ('00:00:02.000001'); +INSERT INTO t1 VALUES ('00:00:02.000002'); +INSERT INTO t1 VALUES ('00:00:02.000003'); +INSERT INTO t1 VALUES ('00:00:02.000004'); +INSERT INTO t1 VALUES ('00:00:02.000005'); +INSERT INTO t1 VALUES ('00:00:02.000006'); +SELECT * FROM t1 PARTITION(p0); +a +00:00:01.000002 +00:00:01.000006 +SELECT * FROM t1 PARTITION(p1); +a +00:00:00.000000 +00:00:00.000001 +00:00:00.000002 +00:00:00.000003 +00:00:00.000004 +00:00:00.000005 +00:00:00.000006 +00:00:00.000010 +00:00:00.000011 +00:00:00.000012 +00:00:00.000013 +00:00:00.000014 +00:00:00.000015 +00:00:00.000016 +00:00:00.000110 +00:00:00.000111 +00:00:00.000112 +00:00:00.000113 +00:00:00.000114 +00:00:00.000115 +00:00:00.000116 +00:00:00.000210 +00:00:00.000211 +00:00:00.000212 +00:00:00.000213 +00:00:00.000214 +00:00:00.000215 +00:00:00.000216 +00:00:01.000003 +00:00:02.000001 +00:00:02.000003 +00:00:02.000005 +SELECT * FROM t1 PARTITION(p2); +a +00:00:01.000000 +00:00:01.000004 +SELECT * FROM t1 PARTITION(p3); +a +00:00:01.000001 +00:00:01.000005 +00:00:02.000000 +00:00:02.000002 +00:00:02.000004 +00:00:02.000006 +ALTER TABLE t1 PARTITION BY RANGE COLUMNS (a) +( +PARTITION p0 VALUES LESS THAN ('00:00:00.000200'), +PARTITION p1 VALUES LESS THAN ('00:00:01'), +PARTITION p2 VALUES LESS THAN ('00:00:02.000003'), +PARTITION p3 VALUES LESS THAN MAXVALUE +); +SELECT * FROM t1 PARTITION(p0); +a +00:00:00.000000 +00:00:00.000001 +00:00:00.000002 +00:00:00.000003 +00:00:00.000004 +00:00:00.000005 +00:00:00.000006 +00:00:00.000010 +00:00:00.000011 +00:00:00.000012 +00:00:00.000013 +00:00:00.000014 +00:00:00.000015 +00:00:00.000016 +00:00:00.000110 +00:00:00.000111 +00:00:00.000112 +00:00:00.000113 +00:00:00.000114 +00:00:00.000115 +00:00:00.000116 +SELECT * FROM t1 PARTITION(p1); +a +00:00:00.000210 +00:00:00.000211 +00:00:00.000212 +00:00:00.000213 +00:00:00.000214 +00:00:00.000215 +00:00:00.000216 +SELECT * FROM t1 PARTITION(p2); +a +00:00:01.000002 +00:00:01.000006 +00:00:01.000003 +00:00:02.000001 +00:00:01.000000 +00:00:01.000004 +00:00:01.000001 +00:00:01.000005 +00:00:02.000000 +00:00:02.000002 +SELECT * FROM t1 PARTITION(p3); +a +00:00:02.000003 +00:00:02.000005 +00:00:02.000004 +00:00:02.000006 +DROP TABLE t1; +# +# Checking that a TIME literal can be a partition LESS value +# +CREATE TABLE t1 (s1 TIME(6)) +PARTITION BY RANGE COLUMNS (s1) +(PARTITION p1 VALUES LESS THAN (TIME'01:01:01.000001')); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `s1` time(6) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +/*!50500 PARTITION BY RANGE COLUMNS(s1) +(PARTITION p1 VALUES LESS THAN ('01:01:01.000001') ENGINE = TokuDB) */ +DROP TABLE t1; +# +# Testing MAKETIME() +# +CREATE TABLE t1 AS +SELECT +CAST(MAKETIME(1, 1, 1) AS TIME) as a, +CAST(MAKETIME(1, 1, 1) AS CHAR) as b; +SELECT MAKETIME(1, 1, 1); +MAKETIME(1, 1, 1) +01:01:01 +SELECT MAKETIME(1, 1, 1.0); +MAKETIME(1, 1, 1.0) +01:01:01.0 +SELECT MAKETIME(1, 1, 1.00); +MAKETIME(1, 1, 1.00) +01:01:01.00 +SELECT MAKETIME(1, 1, 1.000); +MAKETIME(1, 1, 1.000) +01:01:01.000 +SELECT MAKETIME(1, 1, 1.0000); +MAKETIME(1, 1, 1.0000) +01:01:01.0000 +SELECT MAKETIME(1, 1, 1.00000); +MAKETIME(1, 1, 1.00000) +01:01:01.00000 +SELECT MAKETIME(1, 1, 1.000000); +MAKETIME(1, 1, 1.000000) +01:01:01.000000 +SELECT MAKETIME(0, 0, -0.123); +MAKETIME(0, 0, -0.123) +NULL +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` time DEFAULT NULL, + `b` varchar(10) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT +MAKETIME(1, 1, 1), +MAKETIME(1, 1, 1.0), +MAKETIME(1, 1, 1.00), +MAKETIME(1, 1, 1.000), +MAKETIME(1, 1, 1.0000), +MAKETIME(1, 1, 1.00000), +MAKETIME(1, 1, 1.000000); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `MAKETIME(1, 1, 1)` time DEFAULT NULL, + `MAKETIME(1, 1, 1.0)` time(1) DEFAULT NULL, + `MAKETIME(1, 1, 1.00)` time(2) DEFAULT NULL, + `MAKETIME(1, 1, 1.000)` time(3) DEFAULT NULL, + `MAKETIME(1, 1, 1.0000)` time(4) DEFAULT NULL, + `MAKETIME(1, 1, 1.00000)` time(5) DEFAULT NULL, + `MAKETIME(1, 1, 1.000000)` time(6) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t1; +# +# Testing rounding with MAKETIME() +# +CREATE TABLE t1 (hour INT, minute INT, second DECIMAL(23,7)); +INSERT INTO t1 VALUES +(836, 59, 59.999999), +(836, 59, 59.9999990), +(836, 59, 59.9999991), +(836, 59, 59.9999992), +(836, 59, 59.9999993), +(836, 59, 59.9999995), +(836, 59, 59.9999996), +(836, 59, 59.9999997), +(836, 59, 59.9999998), +(836, 59, 59.9999999); +SELECT hour, minute, second, MAKETIME(hour, minute, second) FROM t1; +hour minute second MAKETIME(hour, minute, second) +836 59 59.9999990 836:59:59.999999 +836 59 59.9999990 836:59:59.999999 +836 59 59.9999991 836:59:59.999999 +836 59 59.9999992 836:59:59.999999 +836 59 59.9999993 836:59:59.999999 +836 59 59.9999995 837:00:00.000000 +836 59 59.9999996 837:00:00.000000 +836 59 59.9999997 837:00:00.000000 +836 59 59.9999998 837:00:00.000000 +836 59 59.9999999 837:00:00.000000 +SELECT hour + 1, minute, second, MAKETIME(hour + 1, minute, second) FROM t1; +hour + 1 minute second MAKETIME(hour + 1, minute, second) +837 59 59.9999990 837:59:59.999999 +837 59 59.9999990 837:59:59.999999 +837 59 59.9999991 837:59:59.999999 +837 59 59.9999992 837:59:59.999999 +837 59 59.9999993 837:59:59.999999 +837 59 59.9999995 838:00:00.000000 +837 59 59.9999996 838:00:00.000000 +837 59 59.9999997 838:00:00.000000 +837 59 59.9999998 838:00:00.000000 +837 59 59.9999999 838:00:00.000000 +SELECT -hour, minute, second, MAKETIME(-hour, minute, second) FROM t1; +-hour minute second MAKETIME(-hour, minute, second) +-836 59 59.9999990 -836:59:59.999999 +-836 59 59.9999990 -836:59:59.999999 +-836 59 59.9999991 -836:59:59.999999 +-836 59 59.9999992 -836:59:59.999999 +-836 59 59.9999993 -836:59:59.999999 +-836 59 59.9999995 -837:00:00.000000 +-836 59 59.9999996 -837:00:00.000000 +-836 59 59.9999997 -837:00:00.000000 +-836 59 59.9999998 -837:00:00.000000 +-836 59 59.9999999 -837:00:00.000000 +SELECT -hour - 1, minute, second, MAKETIME(-hour - 1, minute, second) FROM t1; +-hour - 1 minute second MAKETIME(-hour - 1, minute, second) +-837 59 59.9999990 -837:59:59.999999 +-837 59 59.9999990 -837:59:59.999999 +-837 59 59.9999991 -837:59:59.999999 +-837 59 59.9999992 -837:59:59.999999 +-837 59 59.9999993 -837:59:59.999999 +-837 59 59.9999995 -838:00:00.000000 +-837 59 59.9999996 -838:00:00.000000 +-837 59 59.9999997 -838:00:00.000000 +-837 59 59.9999998 -838:00:00.000000 +-837 59 59.9999999 -838:00:00.000000 +DROP TABLE t1; +SELECT MAKETIME(838, 59, 59.0000005); +MAKETIME(838, 59, 59.0000005) +838:59:59.000000 +Warnings: +Warning 1292 Truncated incorrect time value: '838:59:59.0000005' +SELECT MAKETIME(838, 59, 59.00000056); +MAKETIME(838, 59, 59.00000056) +838:59:59.000000 +Warnings: +Warning 1292 Truncated incorrect time value: '838:59:59.00000056' +SELECT MAKETIME(838, 59, 59.000000567); +MAKETIME(838, 59, 59.000000567) +838:59:59.000000 +Warnings: +Warning 1292 Truncated incorrect time value: '838:59:59.000000567' +SELECT MAKETIME(838, 59, 59.0000005678); +MAKETIME(838, 59, 59.0000005678) +838:59:59.000000 +Warnings: +Warning 1292 Truncated incorrect time value: '838:59:59.000000567' +SELECT MAKETIME(838, 59, 59.00000056789); +MAKETIME(838, 59, 59.00000056789) +838:59:59.000000 +Warnings: +Warning 1292 Truncated incorrect time value: '838:59:59.000000567' +# +# Testing CAST to TIME and TIME(6) +# +CREATE TABLE t1 AS SELECT +CAST(1 AS TIME), +CAST(1.1 AS TIME), +CAST('1' AS TIME), +CAST(1e0 AS TIME), +CAST(1 AS TIME(0)), +CAST(1.1 AS TIME(0)), +CAST('1' AS TIME(0)), +CAST(1e0 AS TIME(0)), +CAST(1 AS TIME(6)), +CAST(1.1 AS TIME(6)), +CAST('1' AS TIME(6)), +CAST(1e0 AS TIME(6)); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `CAST(1 AS TIME)` time DEFAULT NULL, + `CAST(1.1 AS TIME)` time DEFAULT NULL, + `CAST('1' AS TIME)` time DEFAULT NULL, + `CAST(1e0 AS TIME)` time DEFAULT NULL, + `CAST(1 AS TIME(0))` time DEFAULT NULL, + `CAST(1.1 AS TIME(0))` time DEFAULT NULL, + `CAST('1' AS TIME(0))` time DEFAULT NULL, + `CAST(1e0 AS TIME(0))` time DEFAULT NULL, + `CAST(1 AS TIME(6))` time(6) DEFAULT NULL, + `CAST(1.1 AS TIME(6))` time(6) DEFAULT NULL, + `CAST('1' AS TIME(6))` time(6) DEFAULT NULL, + `CAST(1e0 AS TIME(6))` time(6) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT +CAST(100000000 AS TIME), +CAST(100000000 AS TIME(0)), +CAST(100000000 AS TIME(6)); +ERROR 22007: Truncated incorrect time value: '100000000' +CREATE TABLE t1 (a TIME, b TIME(6)); +INSERT INTO t1 VALUES ('11:22:33', '11:22:33.123456'); +CREATE TABLE t2 AS SELECT CAST(a AS TIME), CAST(b AS TIME) FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `CAST(a AS TIME)` time DEFAULT NULL, + `CAST(b AS TIME)` time DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t2; +CREATE TABLE t2 AS SELECT CAST(a AS TIME(0)), CAST(b AS TIME(0)) FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `CAST(a AS TIME(0))` time DEFAULT NULL, + `CAST(b AS TIME(0))` time DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t2; +CREATE TABLE t2 AS SELECT CAST(a AS TIME(6)), CAST(b AS TIME(6)) FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `CAST(a AS TIME(6))` time(6) DEFAULT NULL, + `CAST(b AS TIME(6))` time(6) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t2; +# +# Testing Item_time_typecast::val_str +# +SELECT CONCAT(CAST(a AS TIME(0))), CONCAT(CAST(b AS TIME(0))) FROM t1; +CONCAT(CAST(a AS TIME(0))) CONCAT(CAST(b AS TIME(0))) +11:22:33 11:22:33 +SELECT CONCAT(CAST(a AS TIME(6))), CONCAT(CAST(b AS TIME(6))) FROM t1; +CONCAT(CAST(a AS TIME(6))) CONCAT(CAST(b AS TIME(6))) +11:22:33.000000 11:22:33.123456 +SELECT CONCAT(CAST(a AS TIME)), CONCAT(CAST(b AS TIME)) FROM t1; +CONCAT(CAST(a AS TIME)) CONCAT(CAST(b AS TIME)) +11:22:33 11:22:33 +# +# Testing Item_time_typecast::get_time +# +SELECT CAST(a AS TIME(0)), CAST(b AS TIME(0)) FROM t1; +CAST(a AS TIME(0)) CAST(b AS TIME(0)) +11:22:33 11:22:33 +SELECT CAST(a AS TIME(6)), CAST(b AS TIME(6)) FROM t1; +CAST(a AS TIME(6)) CAST(b AS TIME(6)) +11:22:33.000000 11:22:33.123456 +SELECT CAST(a AS TIME), CAST(b AS TIME) FROM t1; +CAST(a AS TIME) CAST(b AS TIME) +11:22:33 11:22:33 +DROP TABLE t1; +# +# Testing Item_time_typecast::val_int +# +SELECT CAST('10:11:12' AS TIME(0)) + 1; +CAST('10:11:12' AS TIME(0)) + 1 +101113 +# +# Testing Item_time_typecast::val_decimal +# +SELECT CAST('10:11:12' AS TIME(6)) + 1; +CAST('10:11:12' AS TIME(6)) + 1 +101113.000000 +# +# Testing function TIME(expr) +# +CREATE TABLE t1 AS SELECT +TIME(101), +TIME(101.1), +TIME(101.12), +TIME(101.123), +TIME(101.1234), +TIME(101.12345), +TIME(101.123456), +TIME('00:01:01'), +TIME('00:01:01.1'), +TIME('00:01:01.12'), +TIME('00:01:01.123'), +TIME('00:01:01.1234'), +TIME('00:01:01.12345'), +TIME('00:01:01.123456'), +TIME(CONCAT('00:01:01', '')), +TIME(CONCAT('00:01:01', '.1')), +TIME(CONCAT('00:01:01', '.12')), +TIME(CONCAT('00:01:01', '.123')), +TIME(CONCAT('00:01:01', '.1234')), +TIME(CONCAT('00:01:01', '.12345')), +TIME(CONCAT('00:01:01', '.123456')), +TIME(TIME'00:01:01'), +TIME(TIME'00:01:01.1'), +TIME(TIME'00:01:01.12'), +TIME(TIME'00:01:01.123'), +TIME(TIME'00:01:01.1234'), +TIME(TIME'00:01:01.12345'), +TIME(TIME'00:01:01.123456'), +TIME(TIMESTAMP('2001-01-01 00:00:00')), +TIME(TIMESTAMP('2001-01-01 00:00:00.1')), +TIME(TIMESTAMP('2001-01-01 00:00:00.12')), +TIME(TIMESTAMP('2001-01-01 00:00:00.123')), +TIME(TIMESTAMP('2001-01-01 00:00:00.1234')), +TIME(TIMESTAMP('2001-01-01 00:00:00.12345')), +TIME(TIMESTAMP('2001-01-01 00:00:00.123456')); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `TIME(101)` time DEFAULT NULL, + `TIME(101.1)` time(1) DEFAULT NULL, + `TIME(101.12)` time(2) DEFAULT NULL, + `TIME(101.123)` time(3) DEFAULT NULL, + `TIME(101.1234)` time(4) DEFAULT NULL, + `TIME(101.12345)` time(5) DEFAULT NULL, + `TIME(101.123456)` time(6) DEFAULT NULL, + `TIME('00:01:01')` time DEFAULT NULL, + `TIME('00:01:01.1')` time(1) DEFAULT NULL, + `TIME('00:01:01.12')` time(2) DEFAULT NULL, + `TIME('00:01:01.123')` time(3) DEFAULT NULL, + `TIME('00:01:01.1234')` time(4) DEFAULT NULL, + `TIME('00:01:01.12345')` time(5) DEFAULT NULL, + `TIME('00:01:01.123456')` time(6) DEFAULT NULL, + `TIME(CONCAT('00:01:01', ''))` time DEFAULT NULL, + `TIME(CONCAT('00:01:01', '.1'))` time(1) DEFAULT NULL, + `TIME(CONCAT('00:01:01', '.12'))` time(2) DEFAULT NULL, + `TIME(CONCAT('00:01:01', '.123'))` time(3) DEFAULT NULL, + `TIME(CONCAT('00:01:01', '.1234'))` time(4) DEFAULT NULL, + `TIME(CONCAT('00:01:01', '.12345'))` time(5) DEFAULT NULL, + `TIME(CONCAT('00:01:01', '.123456'))` time(6) DEFAULT NULL, + `TIME(TIME'00:01:01')` time DEFAULT NULL, + `TIME(TIME'00:01:01.1')` time(1) DEFAULT NULL, + `TIME(TIME'00:01:01.12')` time(2) DEFAULT NULL, + `TIME(TIME'00:01:01.123')` time(3) DEFAULT NULL, + `TIME(TIME'00:01:01.1234')` time(4) DEFAULT NULL, + `TIME(TIME'00:01:01.12345')` time(5) DEFAULT NULL, + `TIME(TIME'00:01:01.123456')` time(6) DEFAULT NULL, + `TIME(TIMESTAMP('2001-01-01 00:00:00'))` time DEFAULT NULL, + `TIME(TIMESTAMP('2001-01-01 00:00:00.1'))` time(1) DEFAULT NULL, + `TIME(TIMESTAMP('2001-01-01 00:00:00.12'))` time(2) DEFAULT NULL, + `TIME(TIMESTAMP('2001-01-01 00:00:00.123'))` time(3) DEFAULT NULL, + `TIME(TIMESTAMP('2001-01-01 00:00:00.1234'))` time(4) DEFAULT NULL, + `TIME(TIMESTAMP('2001-01-01 00:00:00.12345'))` time(5) DEFAULT NULL, + `TIME(TIMESTAMP('2001-01-01 00:00:00.123456'))` time(6) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t1; +# +# Testing comparison between a TIME(6) field and a TIME(N) type cast +# +CREATE TABLE t1 (a TIME(6)); +INSERT INTO t1 VALUES ('10:11:12.000000'); +INSERT INTO t1 VALUES ('10:11:12.000001'); +INSERT INTO t1 VALUES ('10:11:12.000002'); +INSERT INTO t1 VALUES ('10:11:12.000003'); +SELECT * FROM t1 WHERE a=CAST('10:11:12.000003' AS TIME(6)); +a +10:11:12.000003 +SELECT * FROM t1 WHERE a=CAST('10:11:12.000003' AS TIME(0)); +a +10:11:12.000000 +DROP TABLE t1; +# +# Testing comparison between CAST(x AS TIME(N)) +# +SELECT CAST('10:11:12.123' AS TIME(0)) = 101112; +CAST('10:11:12.123' AS TIME(0)) = 101112 +1 +SELECT CAST(101112.123 AS TIME(0)) = 101112; +CAST(101112.123 AS TIME(0)) = 101112 +1 +SELECT CAST(101112.123e0 AS TIME(0)) = 101112; +CAST(101112.123e0 AS TIME(0)) = 101112 +1 +# +# Testing Item_time_typecast::val_int_packed() +# +CREATE TABLE t1 (a TIME, b TIME(6)); +INSERT INTO t1 VALUES ('24:00:00', '24:00:00.123456'); +SELECT CAST('24:00:00' AS TIME) = (SELECT a FROM t1); +CAST('24:00:00' AS TIME) = (SELECT a FROM t1) +1 +SELECT CAST('24:00:00' AS TIME(6)) = (SELECT a FROM t1); +CAST('24:00:00' AS TIME(6)) = (SELECT a FROM t1) +1 +SELECT CAST('24:00:00.123456' AS TIME(0)) = (SELECT a FROM t1); +CAST('24:00:00.123456' AS TIME(0)) = (SELECT a FROM t1) +1 +SELECT CAST('24:00:00.123456' AS TIME(6)) = (SELECT b FROM t1); +CAST('24:00:00.123456' AS TIME(6)) = (SELECT b FROM t1) +1 +DROP TABLE t1; +# +# Testing function MICROSECOND +# +CREATE TABLE t1 (a TIME(6)); +INSERT INTO t1 VALUES ('-11:12:13.000001'); +INSERT INTO t1 VALUES ('11:12:13.000001'); +INSERT INTO t1 VALUES ('11:12:13.100001'); +INSERT INTO t1 VALUES ('11:12:13.999999'); +SELECT a, MICROSECOND(a) FROM t1; +a MICROSECOND(a) +-11:12:13.000001 1 +11:12:13.000001 1 +11:12:13.100001 100001 +11:12:13.999999 999999 +SELECT a, EXTRACT(MICROSECOND FROM a) FROM t1; +a EXTRACT(MICROSECOND FROM a) +-11:12:13.000001 -1 +11:12:13.000001 1 +11:12:13.100001 100001 +11:12:13.999999 999999 +DROP TABLE t1; +SELECT MICROSECOND(CAST(123.456 AS TIME(6))); +MICROSECOND(CAST(123.456 AS TIME(6))) +456000 +SELECT EXTRACT(MICROSECOND FROM CAST(123.456 AS TIME(6))); +EXTRACT(MICROSECOND FROM CAST(123.456 AS TIME(6))) +456000 +# +# Testing PS +# +CREATE TABLE t1 (a TIME(6)); +PREPARE stmt FROM 'INSERT INTO t1 VALUES (?)'; +SET @a='11:22:33.123456'; +SET @b=112233.123456; +SET @c=112233.123456e0; +EXECUTE stmt USING @a; +DEALLOCATE PREPARE stmt; +SELECT * FROM t1; +a +11:22:33.123456 +PREPARE stmt FROM 'SELECT * FROM t1 WHERE a=?'; +EXECUTE stmt USING @a; +a +11:22:33.123456 +EXECUTE stmt USING @b; +a +11:22:33.123456 +EXECUTE stmt USING @c; +a +11:22:33.123456 +DEALLOCATE PREPARE stmt; +DROP TABLE t1; +# +# Testing TIME(6) and user variables +# +CREATE TABLE t1 (a TIME(6)); +INSERT INTO t1 VALUES ('11:22:33.123456'); +SET @a='11:22:33.123456'; +SELECT * FROM t1 WHERE a=@a; +a +11:22:33.123456 +SET @a=112233.123456; +SELECT * FROM t1 WHERE a=@a; +a +11:22:33.123456 +SET @a=112233.123456e0; +SELECT * FROM t1 WHERE a=@a; +a +11:22:33.123456 +SET @a=NULL; +SELECT a INTO @a FROM t1 LIMIT 1; +SELECT @a; +@a +11:22:33.123456 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT @a AS a; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` longtext +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +SELECT * FROM t1; +a +11:22:33.123456 +DROP TABLE t1; +# +# Testing SP +# +CREATE PROCEDURE p1 () +BEGIN +DECLARE a TIME(6); +SET a='11:22:33.123'; +SELECT a; +END// +SHOW CREATE PROCEDURE p1// +Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation +p1 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` PROCEDURE `p1`() +BEGIN +DECLARE a TIME(6); +SET a='11:22:33.123'; +SELECT a; +END latin1 latin1_swedish_ci latin1_swedish_ci +CALL p1// +a +11:22:33.123000 +DROP PROCEDURE p1// +CREATE PROCEDURE p1 (a TIME(6)) +BEGIN +SELECT a; +END// +SHOW CREATE PROCEDURE p1// +Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation +p1 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` PROCEDURE `p1`(a TIME(6)) +BEGIN +SELECT a; +END latin1 latin1_swedish_ci latin1_swedish_ci +CALL p1(112233)// +a +11:22:33.000000 +CALL p1(112233.123)// +a +11:22:33.123000 +CALL p1(112233.123e0)// +a +11:22:33.123000 +CALL p1('11:22:33.123')// +a +11:22:33.123000 +DROP PROCEDURE p1// +CREATE PROCEDURE p1() +BEGIN +DECLARE a TIME(6); +CREATE TABLE t1 AS SELECT a; +SHOW CREATE TABLE t1; +DROP TABLE t1; +END// +SHOW CREATE PROCEDURE p1// +Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation +p1 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` PROCEDURE `p1`() +BEGIN +DECLARE a TIME(6); +CREATE TABLE t1 AS SELECT a; +SHOW CREATE TABLE t1; +DROP TABLE t1; +END latin1 latin1_swedish_ci latin1_swedish_ci +CALL p1// +Table Create Table +t1 CREATE TABLE `t1` ( + `a` time(6) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +DROP PROCEDURE p1// +CREATE FUNCTION p1 (a TIME(6)) RETURNS TIME(6) +BEGIN +RETURN a; +END// +SHOW CREATE FUNCTION p1// +Function sql_mode Create Function character_set_client collation_connection Database Collation +p1 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` FUNCTION `p1`(a TIME(6)) RETURNS time(6) +BEGIN +RETURN a; +END latin1 latin1_swedish_ci latin1_swedish_ci +SELECT p1(112233.123)// +p1(112233.123) +11:22:33.123000 +DROP FUNCTION p1// +# +# Testing INFORMATION_SCHEMA.COLUMNS +# +CREATE TABLE t1 (a TIME(6)); +SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='t1';; +TABLE_CATALOG def +TABLE_SCHEMA test +TABLE_NAME t1 +COLUMN_NAME a +ORDINAL_POSITION 1 +COLUMN_DEFAULT NULL +IS_NULLABLE YES +DATA_TYPE time +CHARACTER_MAXIMUM_LENGTH NULL +CHARACTER_OCTET_LENGTH NULL +NUMERIC_PRECISION NULL +NUMERIC_SCALE NULL +DATETIME_PRECISION 6 +CHARACTER_SET_NAME NULL +COLLATION_NAME NULL +COLUMN_TYPE time(6) +COLUMN_KEY +EXTRA +PRIVILEGES # +COLUMN_COMMENT +GENERATION_EXPRESSION +DROP TABLE t1; +# +# SELECT from a subquery +# +CREATE TABLE t1 (a TIME(6)); +INSERT INTO t1 VALUES ('00:00:00.123456'), ('11:11:11.123456'); +SELECT * FROM (SELECT * FROM t1) t12; +a +00:00:00.123456 +11:11:11.123456 +DROP TABLE t1; +# +# Testing IN and = subqueries +# +CREATE TABLE t1 (a TIME(6)); +INSERT INTO t1 VALUES ('00:00:00.123456'), ('11:11:11.123456'); +SELECT * FROM t1 WHERE a IN (SELECT MIN(a) FROM t1); +a +00:00:00.123456 +SELECT * FROM t1 WHERE a = (SELECT a FROM t1 ORDER BY a DESC LIMIT 1); +a +11:11:11.123456 +DROP TABLE t1; +# +# Testing IN subquery + GROUP +# +CREATE TABLE t1 (id INT, a TIME(6)); +INSERT INTO t1 VALUES (1,'00:00:00.123456'), (1,'11:00:00.123456'); +INSERT INTO t1 VALUES (2,'00:01:00.123456'), (2,'11:01:00.123456'); +INSERT INTO t1 VALUES (3, NULL); +SELECT * FROM t1 WHERE a IN (SELECT MAX(a) FROM t1 GROUP BY id); +id a +1 11:00:00.123456 +2 11:01:00.123456 +DROP TABLE t1; +# +# Testing VIEW +# +CREATE TABLE t1 (a TIME(6)); +INSERT INTO t1 VALUES ('00:00:00.123456'), ('11:11:11.123456'); +CREATE VIEW v1 AS SELECT a FROM t1; +SELECT * FROM v1 WHERE a='00:00:00.123456'; +a +00:00:00.123456 +SELECT MIN(a), MAX(a) FROM v1; +MIN(a) MAX(a) +00:00:00.123456 11:11:11.123456 +SELECT * FROM t1 WHERE a IN (SELECT MAX(a) FROM v1); +a +11:11:11.123456 +DROP VIEW v1; +CREATE VIEW v1 AS SELECT MAX(a) AS a FROM t1; +SELECT * FROM v1; +a +11:11:11.123456 +SELECT * FROM t1 WHERE a=(SELECT a FROM v1); +a +11:11:11.123456 +DROP VIEW v1; +DROP TABLE t1; +# +# Testing hybrid functions in TIME context +# +SELECT DATE_ADD(TIME'00:00:00.0', INTERVAL 10.1 SECOND); +DATE_ADD(TIME'00:00:00.0', INTERVAL 10.1 SECOND) +00:00:10.1 +SELECT DATE_ADD(TIME'00:00:00.0', INTERVAL 10000000.1 SECOND); +DATE_ADD(TIME'00:00:00.0', INTERVAL 10000000.1 SECOND) +NULL +Warnings: +Warning 1441 Datetime function: time field overflow +SELECT DATE_ADD(TIME'00:00:00.0', INTERVAL 100000000000000000.1 SECOND); +DATE_ADD(TIME'00:00:00.0', INTERVAL 100000000000000000.1 SECOND) +NULL +Warnings: +Warning 1441 Datetime function: time field overflow +SELECT DATE_ADD(TIME'00:00:00.0', INTERVAL 1000000000000000000000.1 SECOND); +DATE_ADD(TIME'00:00:00.0', INTERVAL 1000000000000000000000.1 SECOND) +00:00:00.0 +Warnings: +Warning 1292 Truncated incorrect DECIMAL value: '1000000000000000000000.1' +CREATE TABLE t1 AS SELECT +DATE_ADD(TIME'00:00:00', INTERVAL 1 SECOND) AS t0s0, +DATE_ADD(TIME'00:00:00', INTERVAL 1.1 SECOND) AS t0s1, +DATE_ADD(TIME'00:00:00', INTERVAL 1.12 SECOND) AS t0s2, +DATE_ADD(TIME'00:00:00', INTERVAL 1.123 SECOND) AS t0s3, +DATE_ADD(TIME'00:00:00', INTERVAL 1.1234 SECOND) AS t0s4, +DATE_ADD(TIME'00:00:00', INTERVAL 1.12345 SECOND) AS t0s5, +DATE_ADD(TIME'00:00:00', INTERVAL 1.123456 SECOND) AS t0s6, +DATE_ADD(TIME'00:00:00.1', INTERVAL 1 SECOND) AS t1s0, +DATE_ADD(TIME'00:00:00.12', INTERVAL 1 SECOND) AS t2s0, +DATE_ADD(TIME'00:00:00.123', INTERVAL 1 SECOND) AS t3s0, +DATE_ADD(TIME'00:00:00.1234', INTERVAL 1 SECOND) AS t4s0, +DATE_ADD(TIME'00:00:00.12345', INTERVAL 1 SECOND) AS t5s0, +DATE_ADD(TIME'00:00:00.123456', INTERVAL 1 SECOND) AS t6s0, +DATE_ADD(TIME'00:00:00', INTERVAL 1 MICROSECOND) AS t0ms; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `t0s0` time DEFAULT NULL, + `t0s1` time(1) DEFAULT NULL, + `t0s2` time(2) DEFAULT NULL, + `t0s3` time(3) DEFAULT NULL, + `t0s4` time(4) DEFAULT NULL, + `t0s5` time(5) DEFAULT NULL, + `t0s6` time(6) DEFAULT NULL, + `t1s0` time(1) DEFAULT NULL, + `t2s0` time(2) DEFAULT NULL, + `t3s0` time(3) DEFAULT NULL, + `t4s0` time(4) DEFAULT NULL, + `t5s0` time(5) DEFAULT NULL, + `t6s0` time(6) DEFAULT NULL, + `t0ms` time(6) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT +ADDTIME(TIME'00:00:00', TIME'00:00:01') AS t0s0, +ADDTIME(TIME'00:00:00', TIME'00:00:01.1') AS t0s1, +ADDTIME(TIME'00:00:00', TIME'00:00:01.12') AS t0s2, +ADDTIME(TIME'00:00:00', TIME'00:00:01.123') AS t0s3, +ADDTIME(TIME'00:00:00', TIME'00:00:01.1234') AS t0s4, +ADDTIME(TIME'00:00:00', TIME'00:00:01.12345') AS t0s5, +ADDTIME(TIME'00:00:00', TIME'00:00:01.123457') AS t0s6, +ADDTIME(TIME'00:00:00.1', TIME '00:00:00') AS t1s0, +ADDTIME(TIME'00:00:00.12', TIME '00:00:00') AS t2s0, +ADDTIME(TIME'00:00:00.123', TIME '00:00:00') AS t3s0, +ADDTIME(TIME'00:00:00.1234', TIME '00:00:00') AS t4s0, +ADDTIME(TIME'00:00:00.12345', TIME '00:00:00') AS t5s0, +ADDTIME(TIME'00:00:00.123456', TIME '00:00:00') AS t6s0; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `t0s0` time DEFAULT NULL, + `t0s1` time(1) DEFAULT NULL, + `t0s2` time(2) DEFAULT NULL, + `t0s3` time(3) DEFAULT NULL, + `t0s4` time(4) DEFAULT NULL, + `t0s5` time(5) DEFAULT NULL, + `t0s6` time(6) DEFAULT NULL, + `t1s0` time(1) DEFAULT NULL, + `t2s0` time(2) DEFAULT NULL, + `t3s0` time(3) DEFAULT NULL, + `t4s0` time(4) DEFAULT NULL, + `t5s0` time(5) DEFAULT NULL, + `t6s0` time(6) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t1; +# +# Testing that CAST from various fields to TIME rounds. +# This tests Field::get_time(). +CREATE TABLE t1 (a VARCHAR(32)); +INSERT INTO t1 VALUES +('838:59:58.0000009'), ('838:59:58.9'), +('-838:59:58.0000009'), ('-838:59:58.9'), +('10:10:10.9999994'), ('10:10:10.9999995'), +('-10:10:10.9999994'), ('-10:10:10.9999995'); +SELECT a, CAST(a AS TIME), CAST(a AS TIME(6)) FROM t1; +a CAST(a AS TIME) CAST(a AS TIME(6)) +838:59:58.0000009 838:59:58 838:59:58.000001 +838:59:58.9 838:59:59 838:59:58.900000 +-838:59:58.0000009 -838:59:58 -838:59:58.000001 +-838:59:58.9 -838:59:59 -838:59:58.900000 +10:10:10.9999994 10:10:11 10:10:10.999999 +10:10:10.9999995 10:10:11 10:10:11.000000 +-10:10:10.9999994 -10:10:11 -10:10:10.999999 +-10:10:10.9999995 -10:10:11 -10:10:11.000000 +DROP TABLE t1; +CREATE TABLE t1 (a DECIMAL(30,7)); +INSERT INTO t1 VALUES +(8385958.0000009), (8385958.9), +(-8385958.0000009), (-8385958.9), +(101010.9999994), (101010.9999995), +(-101010.9999994), (-101010.9999995); +SELECT a, CAST(a AS TIME), CAST(a AS TIME(6)) FROM t1; +a CAST(a AS TIME) CAST(a AS TIME(6)) +8385958.0000009 838:59:58 838:59:58.000001 +8385958.9000000 838:59:59 838:59:58.900000 +-8385958.0000009 -838:59:58 -838:59:58.000001 +-8385958.9000000 -838:59:59 -838:59:58.900000 +101010.9999994 10:10:11 10:10:10.999999 +101010.9999995 10:10:11 10:10:11.000000 +-101010.9999994 -10:10:11 -10:10:10.999999 +-101010.9999995 -10:10:11 -10:10:11.000000 +ALTER TABLE t1 MODIFY a DOUBLE; +SELECT a, CAST(a AS TIME), CAST(a AS TIME(6)) FROM t1; +a CAST(a AS TIME) CAST(a AS TIME(6)) +8385958.0000009 838:59:58 838:59:58.000001 +8385958.9 838:59:59 838:59:58.900000 +-8385958.0000009 -838:59:58 -838:59:58.000001 +-8385958.9 -838:59:59 -838:59:58.900000 +101010.9999994 10:10:11 10:10:10.999999 +101010.9999995 10:10:11 10:10:11.000000 +-101010.9999994 -10:10:11 -10:10:10.999999 +-101010.9999995 -10:10:11 -10:10:11.000000 +DROP TABLE t1; +# +# Testing that Item::get_time() rounds +# +SELECT +CAST('10:10:10.9999994' AS TIME), +CAST('10:10:10.9999995' AS TIME), +CAST('10:10:10.9999994' AS TIME(6)), +CAST('10:10:10.9999995' AS TIME(6)), +CAST(101010.9999994 AS TIME), +CAST(101010.9999995 AS TIME), +CAST(101010.9999994 AS TIME(6)), +CAST(101010.9999995 AS TIME(6)); +CAST('10:10:10.9999994' AS TIME) 10:10:11 +CAST('10:10:10.9999995' AS TIME) 10:10:11 +CAST('10:10:10.9999994' AS TIME(6)) 10:10:10.999999 +CAST('10:10:10.9999995' AS TIME(6)) 10:10:11.000000 +CAST(101010.9999994 AS TIME) 10:10:11 +CAST(101010.9999995 AS TIME) 10:10:11 +CAST(101010.9999994 AS TIME(6)) 10:10:10.999999 +CAST(101010.9999995 AS TIME(6)) 10:10:11.000000 +# +# Testing that comparison rounds +# +CREATE TABLE t1 (t0 TIME, t6 TIME(6)); +INSERT INTO t1 VALUES ('00:00:00', '00:00:00.999999'); +INSERT INTO t1 VALUES ('00:00:01', '00:00:01.000000'); +SELECT t0 FROM t1 WHERE t6='00:00:00.9999998'; +t0 +00:00:01 +SELECT t6 FROM t1 WHERE t6='00:00:00.9999998'; +t6 +00:00:01.000000 +DROP TABLE t1; +# +# Testing that EXTRACT rounds +# +SELECT +EXTRACT(MICROSECOND FROM '00:00:00.9999994'), +EXTRACT(MICROSECOND FROM '00:00:00.9999995'), +EXTRACT(MICROSECOND FROM 0.9999994), +EXTRACT(MICROSECOND FROM 0.9999995); +EXTRACT(MICROSECOND FROM '00:00:00.9999994') 999999 +EXTRACT(MICROSECOND FROM '00:00:00.9999995') 0 +EXTRACT(MICROSECOND FROM 0.9999994) 999999 +EXTRACT(MICROSECOND FROM 0.9999995) 0 +# +# Testing that DATETIME(0) is a synonym to non-fractional DATETIME +# +CREATE TABLE t1 (a DATETIME(0) NOT NULL); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` datetime NOT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t1; +# +# Testing internal representation format for DATETIME(N) +# +CREATE TABLE t1 (a6 VARCHAR(32)); +INSERT INTO t1 VALUES ('0000-00-00 00:00:00.000000'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:00.000001'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:00.000002'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:00.000003'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:00.000004'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:00.000005'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:00.000006'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:00.000007'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:00.000008'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:00.000009'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:00.000010'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:00.000011'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:00.000012'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:00.000013'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:00.000014'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:00.000015'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:00.000016'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:00.000099'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:00.000999'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:00.009999'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:00.099999'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:00.100000'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:00.900000'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:00.990000'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:00.999000'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:00.999900'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:00.999990'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:00.999999'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:01.000000'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:01.000001'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:01.000002'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:01.000003'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:01.000004'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:01.000005'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:01.000006'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:01.000007'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:01.000008'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:01.000009'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:01.000010'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:01.000011'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:01.000012'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:01.000013'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:01.000014'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:01.000015'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:01.000016'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:01.000099'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:01.000999'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:01.009999'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:01.090000'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:01.099999'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:01.100000'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:01.900000'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:01.990000'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:01.999000'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:01.999900'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:01.999990'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:01.999999'); +INSERT INTO t1 VALUES ('0000-00-00 00:01:00.000001'); +INSERT INTO t1 VALUES ('0000-00-00 00:01:00.000008'); +INSERT INTO t1 VALUES ('0000-00-00 00:01:00.000015'); +INSERT INTO t1 VALUES ('0000-00-00 00:01:00.000016'); +INSERT INTO t1 VALUES ('0000-00-00 00:01:00.000099'); +INSERT INTO t1 VALUES ('0000-00-00 00:01:00.000999'); +INSERT INTO t1 VALUES ('0000-00-00 00:01:00.009999'); +INSERT INTO t1 VALUES ('0000-00-00 00:01:00.099999'); +INSERT INTO t1 VALUES ('0000-00-00 00:01:00.100000'); +INSERT INTO t1 VALUES ('0000-00-00 00:01:00.900000'); +INSERT INTO t1 VALUES ('0000-00-00 00:01:00.999999'); +INSERT INTO t1 VALUES ('0000-00-00 01:00:00.000001'); +INSERT INTO t1 VALUES ('0000-00-00 01:00:00.000008'); +INSERT INTO t1 VALUES ('0000-00-00 01:00:00.000015'); +INSERT INTO t1 VALUES ('0000-00-00 01:00:00.000016'); +INSERT INTO t1 VALUES ('0000-00-00 01:00:00.000099'); +INSERT INTO t1 VALUES ('0000-00-00 01:00:00.000999'); +INSERT INTO t1 VALUES ('0000-00-00 01:00:00.009999'); +INSERT INTO t1 VALUES ('0000-00-00 01:00:00.099999'); +INSERT INTO t1 VALUES ('0000-00-00 01:00:00.100000'); +INSERT INTO t1 VALUES ('0000-00-00 01:00:00.900000'); +INSERT INTO t1 VALUES ('0000-00-00 01:00:00.990000'); +INSERT INTO t1 VALUES ('0000-00-00 01:00:00.999000'); +INSERT INTO t1 VALUES ('0000-00-00 01:00:00.999900'); +INSERT INTO t1 VALUES ('0000-00-00 01:00:00.999990'); +INSERT INTO t1 VALUES ('0000-00-00 01:00:00.999999'); +INSERT INTO t1 VALUES ('1001-01-01 00:00:00.000001'); +INSERT INTO t1 VALUES ('1001-01-01 00:00:00.000008'); +INSERT INTO t1 VALUES ('1001-01-01 00:00:00.000015'); +INSERT INTO t1 VALUES ('1001-01-01 00:00:00.000016'); +INSERT INTO t1 VALUES ('1001-01-01 00:00:00.000099'); +INSERT INTO t1 VALUES ('1001-01-01 00:00:00.000999'); +INSERT INTO t1 VALUES ('1001-01-01 00:00:00.009999'); +INSERT INTO t1 VALUES ('1001-01-01 00:00:00.099999'); +INSERT INTO t1 VALUES ('1001-01-01 00:00:00.100000'); +INSERT INTO t1 VALUES ('1001-01-01 00:00:00.900000'); +INSERT INTO t1 VALUES ('1001-01-01 00:00:00.990000'); +INSERT INTO t1 VALUES ('1001-01-01 00:00:00.999000'); +INSERT INTO t1 VALUES ('1001-01-01 00:00:00.999900'); +INSERT INTO t1 VALUES ('1001-01-01 00:00:00.999990'); +INSERT INTO t1 VALUES ('1001-01-01 00:00:00.999999'); +INSERT INTO t1 VALUES ('2001-01-01 23:59:58.000001'); +INSERT INTO t1 VALUES ('2001-01-01 23:59:58.000008'); +INSERT INTO t1 VALUES ('2001-01-01 23:59:58.000015'); +INSERT INTO t1 VALUES ('2001-01-01 23:59:58.000016'); +INSERT INTO t1 VALUES ('2001-01-01 23:59:58.000099'); +INSERT INTO t1 VALUES ('2001-01-01 23:59:58.000999'); +INSERT INTO t1 VALUES ('2001-01-01 23:59:58.009999'); +INSERT INTO t1 VALUES ('2001-01-01 23:59:58.099999'); +INSERT INTO t1 VALUES ('2001-01-01 23:59:58.100000'); +INSERT INTO t1 VALUES ('2001-01-01 23:59:58.900000'); +INSERT INTO t1 VALUES ('2001-01-01 23:59:58.990000'); +INSERT INTO t1 VALUES ('2001-01-01 23:59:58.999000'); +INSERT INTO t1 VALUES ('2001-01-01 23:59:58.999900'); +INSERT INTO t1 VALUES ('2001-01-01 23:59:58.999990'); +INSERT INTO t1 VALUES ('2001-01-01 23:59:58.999999'); +INSERT INTO t1 VALUES ('2001-01-01 23:59:59.000000'); +INSERT INTO t1 VALUES ('9999-12-31 23:59:58.000001'); +INSERT INTO t1 VALUES ('9999-12-31 23:59:58.000008'); +INSERT INTO t1 VALUES ('9999-12-31 23:59:58.000015'); +INSERT INTO t1 VALUES ('9999-12-31 23:59:58.000016'); +INSERT INTO t1 VALUES ('9999-12-31 23:59:58.000099'); +INSERT INTO t1 VALUES ('9999-12-31 23:59:58.000999'); +INSERT INTO t1 VALUES ('9999-12-31 23:59:58.009999'); +INSERT INTO t1 VALUES ('9999-12-31 23:59:58.099999'); +INSERT INTO t1 VALUES ('9999-12-31 23:59:58.100000'); +INSERT INTO t1 VALUES ('9999-12-31 23:59:58.900000'); +INSERT INTO t1 VALUES ('9999-12-31 23:59:58.990000'); +INSERT INTO t1 VALUES ('9999-12-31 23:59:58.999000'); +INSERT INTO t1 VALUES ('9999-12-31 23:59:58.999900'); +INSERT INTO t1 VALUES ('9999-12-31 23:59:58.999990'); +INSERT INTO t1 VALUES ('9999-12-31 23:59:58.999999'); +INSERT INTO t1 VALUES ('9999-12-31 23:59:59.000000'); +ALTER TABLE t1 +ADD a0 VARCHAR(32), +ADD a1 VARCHAR(32), ADD a2 VARCHAR(32), ADD a3 VARCHAR(32), +ADD a4 VARCHAR(32), ADD a5 VARCHAR(32), +ADD d0 DATETIME(0), +ADD d1 DATETIME(1), ADD d2 DATETIME(2), ADD d3 DATETIME(3), +ADD d4 DATETIME(4), ADD d5 DATETIME(5), ADD d6 DATETIME(6); +UPDATE t1 SET +a0= LEFT(a6, LENGTH(a6) - 6), +a1= LEFT(a6, LENGTH(a6) - 5), +a2= LEFT(a6, LENGTH(a6) - 4), +a3= LEFT(a6, LENGTH(a6) - 3), +a4= LEFT(a6, LENGTH(a6) - 2), +a5= LEFT(a6, LENGTH(a6) - 1); +UPDATE t1 SET d0= a0, d1= a1, d2= a2, d3= a3, d4= a4, d5= a5, d6= a6; +ERROR 22007: Incorrect datetime value: '0000-00-00 00:00:00.' for column 'd0' at row 1 +SELECT a6, d6, HEX(WEIGHT_STRING(d6)) FROM t1 ORDER BY d6; +a6 d6 HEX(WEIGHT_STRING(d6)) +0000-00-00 00:00:00.000000 NULL NULL +0000-00-00 00:00:00.000001 NULL NULL +0000-00-00 00:00:00.000002 NULL NULL +0000-00-00 00:00:00.000003 NULL NULL +0000-00-00 00:00:00.000004 NULL NULL +0000-00-00 00:00:00.000005 NULL NULL +0000-00-00 00:00:00.000006 NULL NULL +0000-00-00 00:00:00.000007 NULL NULL +0000-00-00 00:00:00.000008 NULL NULL +0000-00-00 00:00:00.000009 NULL NULL +0000-00-00 00:00:00.000010 NULL NULL +0000-00-00 00:00:00.000011 NULL NULL +0000-00-00 00:00:00.000012 NULL NULL +0000-00-00 00:00:00.000013 NULL NULL +0000-00-00 00:00:00.000014 NULL NULL +0000-00-00 00:00:00.000015 NULL NULL +0000-00-00 00:00:00.000016 NULL NULL +0000-00-00 00:00:00.000099 NULL NULL +0000-00-00 00:00:00.000999 NULL NULL +0000-00-00 00:00:00.009999 NULL NULL +0000-00-00 00:00:00.099999 NULL NULL +0000-00-00 00:00:00.100000 NULL NULL +0000-00-00 00:00:00.900000 NULL NULL +0000-00-00 00:00:00.990000 NULL NULL +0000-00-00 00:00:00.999000 NULL NULL +0000-00-00 00:00:00.999900 NULL NULL +0000-00-00 00:00:00.999990 NULL NULL +0000-00-00 00:00:00.999999 NULL NULL +0000-00-00 00:00:01.000000 NULL NULL +0000-00-00 00:00:01.000001 NULL NULL +0000-00-00 00:00:01.000002 NULL NULL +0000-00-00 00:00:01.000003 NULL NULL +0000-00-00 00:00:01.000004 NULL NULL +0000-00-00 00:00:01.000005 NULL NULL +0000-00-00 00:00:01.000006 NULL NULL +0000-00-00 00:00:01.000007 NULL NULL +0000-00-00 00:00:01.000008 NULL NULL +0000-00-00 00:00:01.000009 NULL NULL +0000-00-00 00:00:01.000010 NULL NULL +0000-00-00 00:00:01.000011 NULL NULL +0000-00-00 00:00:01.000012 NULL NULL +0000-00-00 00:00:01.000013 NULL NULL +0000-00-00 00:00:01.000014 NULL NULL +0000-00-00 00:00:01.000015 NULL NULL +0000-00-00 00:00:01.000016 NULL NULL +0000-00-00 00:00:01.000099 NULL NULL +0000-00-00 00:00:01.000999 NULL NULL +0000-00-00 00:00:01.009999 NULL NULL +0000-00-00 00:00:01.090000 NULL NULL +0000-00-00 00:00:01.099999 NULL NULL +0000-00-00 00:00:01.100000 NULL NULL +0000-00-00 00:00:01.900000 NULL NULL +0000-00-00 00:00:01.990000 NULL NULL +0000-00-00 00:00:01.999000 NULL NULL +0000-00-00 00:00:01.999900 NULL NULL +0000-00-00 00:00:01.999990 NULL NULL +0000-00-00 00:00:01.999999 NULL NULL +0000-00-00 00:01:00.000001 NULL NULL +0000-00-00 00:01:00.000008 NULL NULL +0000-00-00 00:01:00.000015 NULL NULL +0000-00-00 00:01:00.000016 NULL NULL +0000-00-00 00:01:00.000099 NULL NULL +0000-00-00 00:01:00.000999 NULL NULL +0000-00-00 00:01:00.009999 NULL NULL +0000-00-00 00:01:00.099999 NULL NULL +0000-00-00 00:01:00.100000 NULL NULL +0000-00-00 00:01:00.900000 NULL NULL +0000-00-00 00:01:00.999999 NULL NULL +0000-00-00 01:00:00.000001 NULL NULL +0000-00-00 01:00:00.000008 NULL NULL +0000-00-00 01:00:00.000015 NULL NULL +0000-00-00 01:00:00.000016 NULL NULL +0000-00-00 01:00:00.000099 NULL NULL +0000-00-00 01:00:00.000999 NULL NULL +0000-00-00 01:00:00.009999 NULL NULL +0000-00-00 01:00:00.099999 NULL NULL +0000-00-00 01:00:00.100000 NULL NULL +0000-00-00 01:00:00.900000 NULL NULL +0000-00-00 01:00:00.990000 NULL NULL +0000-00-00 01:00:00.999000 NULL NULL +0000-00-00 01:00:00.999900 NULL NULL +0000-00-00 01:00:00.999990 NULL NULL +0000-00-00 01:00:00.999999 NULL NULL +1001-01-01 00:00:00.000001 NULL NULL +1001-01-01 00:00:00.000008 NULL NULL +1001-01-01 00:00:00.000015 NULL NULL +1001-01-01 00:00:00.000016 NULL NULL +1001-01-01 00:00:00.000099 NULL NULL +1001-01-01 00:00:00.000999 NULL NULL +1001-01-01 00:00:00.009999 NULL NULL +1001-01-01 00:00:00.099999 NULL NULL +1001-01-01 00:00:00.100000 NULL NULL +1001-01-01 00:00:00.900000 NULL NULL +1001-01-01 00:00:00.990000 NULL NULL +1001-01-01 00:00:00.999000 NULL NULL +1001-01-01 00:00:00.999900 NULL NULL +1001-01-01 00:00:00.999990 NULL NULL +1001-01-01 00:00:00.999999 NULL NULL +2001-01-01 23:59:58.000001 NULL NULL +2001-01-01 23:59:58.000008 NULL NULL +2001-01-01 23:59:58.000015 NULL NULL +2001-01-01 23:59:58.000016 NULL NULL +2001-01-01 23:59:58.000099 NULL NULL +2001-01-01 23:59:58.000999 NULL NULL +2001-01-01 23:59:58.009999 NULL NULL +2001-01-01 23:59:58.099999 NULL NULL +2001-01-01 23:59:58.100000 NULL NULL +2001-01-01 23:59:58.900000 NULL NULL +2001-01-01 23:59:58.990000 NULL NULL +2001-01-01 23:59:58.999000 NULL NULL +2001-01-01 23:59:58.999900 NULL NULL +2001-01-01 23:59:58.999990 NULL NULL +2001-01-01 23:59:58.999999 NULL NULL +2001-01-01 23:59:59.000000 NULL NULL +9999-12-31 23:59:58.000001 NULL NULL +9999-12-31 23:59:58.000008 NULL NULL +9999-12-31 23:59:58.000015 NULL NULL +9999-12-31 23:59:58.000016 NULL NULL +9999-12-31 23:59:58.000099 NULL NULL +9999-12-31 23:59:58.000999 NULL NULL +9999-12-31 23:59:58.009999 NULL NULL +9999-12-31 23:59:58.099999 NULL NULL +9999-12-31 23:59:58.100000 NULL NULL +9999-12-31 23:59:58.900000 NULL NULL +9999-12-31 23:59:58.990000 NULL NULL +9999-12-31 23:59:58.999000 NULL NULL +9999-12-31 23:59:58.999900 NULL NULL +9999-12-31 23:59:58.999990 NULL NULL +9999-12-31 23:59:58.999999 NULL NULL +9999-12-31 23:59:59.000000 NULL NULL +SELECT a5, d5, HEX(WEIGHT_STRING(d5)) FROM t1 ORDER BY d5, a6; +a5 d5 HEX(WEIGHT_STRING(d5)) +0000-00-00 00:00:00.00000 NULL NULL +0000-00-00 00:00:00.00000 NULL NULL +0000-00-00 00:00:00.00000 NULL NULL +0000-00-00 00:00:00.00000 NULL NULL +0000-00-00 00:00:00.00000 NULL NULL +0000-00-00 00:00:00.00000 NULL NULL +0000-00-00 00:00:00.00000 NULL NULL +0000-00-00 00:00:00.00000 NULL NULL +0000-00-00 00:00:00.00000 NULL NULL +0000-00-00 00:00:00.00000 NULL NULL +0000-00-00 00:00:00.00001 NULL NULL +0000-00-00 00:00:00.00001 NULL NULL +0000-00-00 00:00:00.00001 NULL NULL +0000-00-00 00:00:00.00001 NULL NULL +0000-00-00 00:00:00.00001 NULL NULL +0000-00-00 00:00:00.00001 NULL NULL +0000-00-00 00:00:00.00001 NULL NULL +0000-00-00 00:00:00.00009 NULL NULL +0000-00-00 00:00:00.00099 NULL NULL +0000-00-00 00:00:00.00999 NULL NULL +0000-00-00 00:00:00.09999 NULL NULL +0000-00-00 00:00:00.10000 NULL NULL +0000-00-00 00:00:00.90000 NULL NULL +0000-00-00 00:00:00.99000 NULL NULL +0000-00-00 00:00:00.99900 NULL NULL +0000-00-00 00:00:00.99990 NULL NULL +0000-00-00 00:00:00.99999 NULL NULL +0000-00-00 00:00:00.99999 NULL NULL +0000-00-00 00:00:01.00000 NULL NULL +0000-00-00 00:00:01.00000 NULL NULL +0000-00-00 00:00:01.00000 NULL NULL +0000-00-00 00:00:01.00000 NULL NULL +0000-00-00 00:00:01.00000 NULL NULL +0000-00-00 00:00:01.00000 NULL NULL +0000-00-00 00:00:01.00000 NULL NULL +0000-00-00 00:00:01.00000 NULL NULL +0000-00-00 00:00:01.00000 NULL NULL +0000-00-00 00:00:01.00000 NULL NULL +0000-00-00 00:00:01.00001 NULL NULL +0000-00-00 00:00:01.00001 NULL NULL +0000-00-00 00:00:01.00001 NULL NULL +0000-00-00 00:00:01.00001 NULL NULL +0000-00-00 00:00:01.00001 NULL NULL +0000-00-00 00:00:01.00001 NULL NULL +0000-00-00 00:00:01.00001 NULL NULL +0000-00-00 00:00:01.00009 NULL NULL +0000-00-00 00:00:01.00099 NULL NULL +0000-00-00 00:00:01.00999 NULL NULL +0000-00-00 00:00:01.09000 NULL NULL +0000-00-00 00:00:01.09999 NULL NULL +0000-00-00 00:00:01.10000 NULL NULL +0000-00-00 00:00:01.90000 NULL NULL +0000-00-00 00:00:01.99000 NULL NULL +0000-00-00 00:00:01.99900 NULL NULL +0000-00-00 00:00:01.99990 NULL NULL +0000-00-00 00:00:01.99999 NULL NULL +0000-00-00 00:00:01.99999 NULL NULL +0000-00-00 00:01:00.00000 NULL NULL +0000-00-00 00:01:00.00000 NULL NULL +0000-00-00 00:01:00.00001 NULL NULL +0000-00-00 00:01:00.00001 NULL NULL +0000-00-00 00:01:00.00009 NULL NULL +0000-00-00 00:01:00.00099 NULL NULL +0000-00-00 00:01:00.00999 NULL NULL +0000-00-00 00:01:00.09999 NULL NULL +0000-00-00 00:01:00.10000 NULL NULL +0000-00-00 00:01:00.90000 NULL NULL +0000-00-00 00:01:00.99999 NULL NULL +0000-00-00 01:00:00.00000 NULL NULL +0000-00-00 01:00:00.00000 NULL NULL +0000-00-00 01:00:00.00001 NULL NULL +0000-00-00 01:00:00.00001 NULL NULL +0000-00-00 01:00:00.00009 NULL NULL +0000-00-00 01:00:00.00099 NULL NULL +0000-00-00 01:00:00.00999 NULL NULL +0000-00-00 01:00:00.09999 NULL NULL +0000-00-00 01:00:00.10000 NULL NULL +0000-00-00 01:00:00.90000 NULL NULL +0000-00-00 01:00:00.99000 NULL NULL +0000-00-00 01:00:00.99900 NULL NULL +0000-00-00 01:00:00.99990 NULL NULL +0000-00-00 01:00:00.99999 NULL NULL +0000-00-00 01:00:00.99999 NULL NULL +1001-01-01 00:00:00.00000 NULL NULL +1001-01-01 00:00:00.00000 NULL NULL +1001-01-01 00:00:00.00001 NULL NULL +1001-01-01 00:00:00.00001 NULL NULL +1001-01-01 00:00:00.00009 NULL NULL +1001-01-01 00:00:00.00099 NULL NULL +1001-01-01 00:00:00.00999 NULL NULL +1001-01-01 00:00:00.09999 NULL NULL +1001-01-01 00:00:00.10000 NULL NULL +1001-01-01 00:00:00.90000 NULL NULL +1001-01-01 00:00:00.99000 NULL NULL +1001-01-01 00:00:00.99900 NULL NULL +1001-01-01 00:00:00.99990 NULL NULL +1001-01-01 00:00:00.99999 NULL NULL +1001-01-01 00:00:00.99999 NULL NULL +2001-01-01 23:59:58.00000 NULL NULL +2001-01-01 23:59:58.00000 NULL NULL +2001-01-01 23:59:58.00001 NULL NULL +2001-01-01 23:59:58.00001 NULL NULL +2001-01-01 23:59:58.00009 NULL NULL +2001-01-01 23:59:58.00099 NULL NULL +2001-01-01 23:59:58.00999 NULL NULL +2001-01-01 23:59:58.09999 NULL NULL +2001-01-01 23:59:58.10000 NULL NULL +2001-01-01 23:59:58.90000 NULL NULL +2001-01-01 23:59:58.99000 NULL NULL +2001-01-01 23:59:58.99900 NULL NULL +2001-01-01 23:59:58.99990 NULL NULL +2001-01-01 23:59:58.99999 NULL NULL +2001-01-01 23:59:58.99999 NULL NULL +2001-01-01 23:59:59.00000 NULL NULL +9999-12-31 23:59:58.00000 NULL NULL +9999-12-31 23:59:58.00000 NULL NULL +9999-12-31 23:59:58.00001 NULL NULL +9999-12-31 23:59:58.00001 NULL NULL +9999-12-31 23:59:58.00009 NULL NULL +9999-12-31 23:59:58.00099 NULL NULL +9999-12-31 23:59:58.00999 NULL NULL +9999-12-31 23:59:58.09999 NULL NULL +9999-12-31 23:59:58.10000 NULL NULL +9999-12-31 23:59:58.90000 NULL NULL +9999-12-31 23:59:58.99000 NULL NULL +9999-12-31 23:59:58.99900 NULL NULL +9999-12-31 23:59:58.99990 NULL NULL +9999-12-31 23:59:58.99999 NULL NULL +9999-12-31 23:59:58.99999 NULL NULL +9999-12-31 23:59:59.00000 NULL NULL +SELECT a4, d4, HEX(WEIGHT_STRING(d4)) FROM t1 ORDER BY d4, a6; +a4 d4 HEX(WEIGHT_STRING(d4)) +0000-00-00 00:00:00.0000 NULL NULL +0000-00-00 00:00:00.0000 NULL NULL +0000-00-00 00:00:00.0000 NULL NULL +0000-00-00 00:00:00.0000 NULL NULL +0000-00-00 00:00:00.0000 NULL NULL +0000-00-00 00:00:00.0000 NULL NULL +0000-00-00 00:00:00.0000 NULL NULL +0000-00-00 00:00:00.0000 NULL NULL +0000-00-00 00:00:00.0000 NULL NULL +0000-00-00 00:00:00.0000 NULL NULL +0000-00-00 00:00:00.0000 NULL NULL +0000-00-00 00:00:00.0000 NULL NULL +0000-00-00 00:00:00.0000 NULL NULL +0000-00-00 00:00:00.0000 NULL NULL +0000-00-00 00:00:00.0000 NULL NULL +0000-00-00 00:00:00.0000 NULL NULL +0000-00-00 00:00:00.0000 NULL NULL +0000-00-00 00:00:00.0000 NULL NULL +0000-00-00 00:00:00.0009 NULL NULL +0000-00-00 00:00:00.0099 NULL NULL +0000-00-00 00:00:00.0999 NULL NULL +0000-00-00 00:00:00.1000 NULL NULL +0000-00-00 00:00:00.9000 NULL NULL +0000-00-00 00:00:00.9900 NULL NULL +0000-00-00 00:00:00.9990 NULL NULL +0000-00-00 00:00:00.9999 NULL NULL +0000-00-00 00:00:00.9999 NULL NULL +0000-00-00 00:00:00.9999 NULL NULL +0000-00-00 00:00:01.0000 NULL NULL +0000-00-00 00:00:01.0000 NULL NULL +0000-00-00 00:00:01.0000 NULL NULL +0000-00-00 00:00:01.0000 NULL NULL +0000-00-00 00:00:01.0000 NULL NULL +0000-00-00 00:00:01.0000 NULL NULL +0000-00-00 00:00:01.0000 NULL NULL +0000-00-00 00:00:01.0000 NULL NULL +0000-00-00 00:00:01.0000 NULL NULL +0000-00-00 00:00:01.0000 NULL NULL +0000-00-00 00:00:01.0000 NULL NULL +0000-00-00 00:00:01.0000 NULL NULL +0000-00-00 00:00:01.0000 NULL NULL +0000-00-00 00:00:01.0000 NULL NULL +0000-00-00 00:00:01.0000 NULL NULL +0000-00-00 00:00:01.0000 NULL NULL +0000-00-00 00:00:01.0000 NULL NULL +0000-00-00 00:00:01.0000 NULL NULL +0000-00-00 00:00:01.0009 NULL NULL +0000-00-00 00:00:01.0099 NULL NULL +0000-00-00 00:00:01.0900 NULL NULL +0000-00-00 00:00:01.0999 NULL NULL +0000-00-00 00:00:01.1000 NULL NULL +0000-00-00 00:00:01.9000 NULL NULL +0000-00-00 00:00:01.9900 NULL NULL +0000-00-00 00:00:01.9990 NULL NULL +0000-00-00 00:00:01.9999 NULL NULL +0000-00-00 00:00:01.9999 NULL NULL +0000-00-00 00:00:01.9999 NULL NULL +0000-00-00 00:01:00.0000 NULL NULL +0000-00-00 00:01:00.0000 NULL NULL +0000-00-00 00:01:00.0000 NULL NULL +0000-00-00 00:01:00.0000 NULL NULL +0000-00-00 00:01:00.0000 NULL NULL +0000-00-00 00:01:00.0009 NULL NULL +0000-00-00 00:01:00.0099 NULL NULL +0000-00-00 00:01:00.0999 NULL NULL +0000-00-00 00:01:00.1000 NULL NULL +0000-00-00 00:01:00.9000 NULL NULL +0000-00-00 00:01:00.9999 NULL NULL +0000-00-00 01:00:00.0000 NULL NULL +0000-00-00 01:00:00.0000 NULL NULL +0000-00-00 01:00:00.0000 NULL NULL +0000-00-00 01:00:00.0000 NULL NULL +0000-00-00 01:00:00.0000 NULL NULL +0000-00-00 01:00:00.0009 NULL NULL +0000-00-00 01:00:00.0099 NULL NULL +0000-00-00 01:00:00.0999 NULL NULL +0000-00-00 01:00:00.1000 NULL NULL +0000-00-00 01:00:00.9000 NULL NULL +0000-00-00 01:00:00.9900 NULL NULL +0000-00-00 01:00:00.9990 NULL NULL +0000-00-00 01:00:00.9999 NULL NULL +0000-00-00 01:00:00.9999 NULL NULL +0000-00-00 01:00:00.9999 NULL NULL +1001-01-01 00:00:00.0000 NULL NULL +1001-01-01 00:00:00.0000 NULL NULL +1001-01-01 00:00:00.0000 NULL NULL +1001-01-01 00:00:00.0000 NULL NULL +1001-01-01 00:00:00.0000 NULL NULL +1001-01-01 00:00:00.0009 NULL NULL +1001-01-01 00:00:00.0099 NULL NULL +1001-01-01 00:00:00.0999 NULL NULL +1001-01-01 00:00:00.1000 NULL NULL +1001-01-01 00:00:00.9000 NULL NULL +1001-01-01 00:00:00.9900 NULL NULL +1001-01-01 00:00:00.9990 NULL NULL +1001-01-01 00:00:00.9999 NULL NULL +1001-01-01 00:00:00.9999 NULL NULL +1001-01-01 00:00:00.9999 NULL NULL +2001-01-01 23:59:58.0000 NULL NULL +2001-01-01 23:59:58.0000 NULL NULL +2001-01-01 23:59:58.0000 NULL NULL +2001-01-01 23:59:58.0000 NULL NULL +2001-01-01 23:59:58.0000 NULL NULL +2001-01-01 23:59:58.0009 NULL NULL +2001-01-01 23:59:58.0099 NULL NULL +2001-01-01 23:59:58.0999 NULL NULL +2001-01-01 23:59:58.1000 NULL NULL +2001-01-01 23:59:58.9000 NULL NULL +2001-01-01 23:59:58.9900 NULL NULL +2001-01-01 23:59:58.9990 NULL NULL +2001-01-01 23:59:58.9999 NULL NULL +2001-01-01 23:59:58.9999 NULL NULL +2001-01-01 23:59:58.9999 NULL NULL +2001-01-01 23:59:59.0000 NULL NULL +9999-12-31 23:59:58.0000 NULL NULL +9999-12-31 23:59:58.0000 NULL NULL +9999-12-31 23:59:58.0000 NULL NULL +9999-12-31 23:59:58.0000 NULL NULL +9999-12-31 23:59:58.0000 NULL NULL +9999-12-31 23:59:58.0009 NULL NULL +9999-12-31 23:59:58.0099 NULL NULL +9999-12-31 23:59:58.0999 NULL NULL +9999-12-31 23:59:58.1000 NULL NULL +9999-12-31 23:59:58.9000 NULL NULL +9999-12-31 23:59:58.9900 NULL NULL +9999-12-31 23:59:58.9990 NULL NULL +9999-12-31 23:59:58.9999 NULL NULL +9999-12-31 23:59:58.9999 NULL NULL +9999-12-31 23:59:58.9999 NULL NULL +9999-12-31 23:59:59.0000 NULL NULL +SELECT a3, d3, HEX(WEIGHT_STRING(d3)) FROM t1 ORDER BY d3, a6; +a3 d3 HEX(WEIGHT_STRING(d3)) +0000-00-00 00:00:00.000 NULL NULL +0000-00-00 00:00:00.000 NULL NULL +0000-00-00 00:00:00.000 NULL NULL +0000-00-00 00:00:00.000 NULL NULL +0000-00-00 00:00:00.000 NULL NULL +0000-00-00 00:00:00.000 NULL NULL +0000-00-00 00:00:00.000 NULL NULL +0000-00-00 00:00:00.000 NULL NULL +0000-00-00 00:00:00.000 NULL NULL +0000-00-00 00:00:00.000 NULL NULL +0000-00-00 00:00:00.000 NULL NULL +0000-00-00 00:00:00.000 NULL NULL +0000-00-00 00:00:00.000 NULL NULL +0000-00-00 00:00:00.000 NULL NULL +0000-00-00 00:00:00.000 NULL NULL +0000-00-00 00:00:00.000 NULL NULL +0000-00-00 00:00:00.000 NULL NULL +0000-00-00 00:00:00.000 NULL NULL +0000-00-00 00:00:00.000 NULL NULL +0000-00-00 00:00:00.009 NULL NULL +0000-00-00 00:00:00.099 NULL NULL +0000-00-00 00:00:00.100 NULL NULL +0000-00-00 00:00:00.900 NULL NULL +0000-00-00 00:00:00.990 NULL NULL +0000-00-00 00:00:00.999 NULL NULL +0000-00-00 00:00:00.999 NULL NULL +0000-00-00 00:00:00.999 NULL NULL +0000-00-00 00:00:00.999 NULL NULL +0000-00-00 00:00:01.000 NULL NULL +0000-00-00 00:00:01.000 NULL NULL +0000-00-00 00:00:01.000 NULL NULL +0000-00-00 00:00:01.000 NULL NULL +0000-00-00 00:00:01.000 NULL NULL +0000-00-00 00:00:01.000 NULL NULL +0000-00-00 00:00:01.000 NULL NULL +0000-00-00 00:00:01.000 NULL NULL +0000-00-00 00:00:01.000 NULL NULL +0000-00-00 00:00:01.000 NULL NULL +0000-00-00 00:00:01.000 NULL NULL +0000-00-00 00:00:01.000 NULL NULL +0000-00-00 00:00:01.000 NULL NULL +0000-00-00 00:00:01.000 NULL NULL +0000-00-00 00:00:01.000 NULL NULL +0000-00-00 00:00:01.000 NULL NULL +0000-00-00 00:00:01.000 NULL NULL +0000-00-00 00:00:01.000 NULL NULL +0000-00-00 00:00:01.000 NULL NULL +0000-00-00 00:00:01.009 NULL NULL +0000-00-00 00:00:01.090 NULL NULL +0000-00-00 00:00:01.099 NULL NULL +0000-00-00 00:00:01.100 NULL NULL +0000-00-00 00:00:01.900 NULL NULL +0000-00-00 00:00:01.990 NULL NULL +0000-00-00 00:00:01.999 NULL NULL +0000-00-00 00:00:01.999 NULL NULL +0000-00-00 00:00:01.999 NULL NULL +0000-00-00 00:00:01.999 NULL NULL +0000-00-00 00:01:00.000 NULL NULL +0000-00-00 00:01:00.000 NULL NULL +0000-00-00 00:01:00.000 NULL NULL +0000-00-00 00:01:00.000 NULL NULL +0000-00-00 00:01:00.000 NULL NULL +0000-00-00 00:01:00.000 NULL NULL +0000-00-00 00:01:00.009 NULL NULL +0000-00-00 00:01:00.099 NULL NULL +0000-00-00 00:01:00.100 NULL NULL +0000-00-00 00:01:00.900 NULL NULL +0000-00-00 00:01:00.999 NULL NULL +0000-00-00 01:00:00.000 NULL NULL +0000-00-00 01:00:00.000 NULL NULL +0000-00-00 01:00:00.000 NULL NULL +0000-00-00 01:00:00.000 NULL NULL +0000-00-00 01:00:00.000 NULL NULL +0000-00-00 01:00:00.000 NULL NULL +0000-00-00 01:00:00.009 NULL NULL +0000-00-00 01:00:00.099 NULL NULL +0000-00-00 01:00:00.100 NULL NULL +0000-00-00 01:00:00.900 NULL NULL +0000-00-00 01:00:00.990 NULL NULL +0000-00-00 01:00:00.999 NULL NULL +0000-00-00 01:00:00.999 NULL NULL +0000-00-00 01:00:00.999 NULL NULL +0000-00-00 01:00:00.999 NULL NULL +1001-01-01 00:00:00.000 NULL NULL +1001-01-01 00:00:00.000 NULL NULL +1001-01-01 00:00:00.000 NULL NULL +1001-01-01 00:00:00.000 NULL NULL +1001-01-01 00:00:00.000 NULL NULL +1001-01-01 00:00:00.000 NULL NULL +1001-01-01 00:00:00.009 NULL NULL +1001-01-01 00:00:00.099 NULL NULL +1001-01-01 00:00:00.100 NULL NULL +1001-01-01 00:00:00.900 NULL NULL +1001-01-01 00:00:00.990 NULL NULL +1001-01-01 00:00:00.999 NULL NULL +1001-01-01 00:00:00.999 NULL NULL +1001-01-01 00:00:00.999 NULL NULL +1001-01-01 00:00:00.999 NULL NULL +2001-01-01 23:59:58.000 NULL NULL +2001-01-01 23:59:58.000 NULL NULL +2001-01-01 23:59:58.000 NULL NULL +2001-01-01 23:59:58.000 NULL NULL +2001-01-01 23:59:58.000 NULL NULL +2001-01-01 23:59:58.000 NULL NULL +2001-01-01 23:59:58.009 NULL NULL +2001-01-01 23:59:58.099 NULL NULL +2001-01-01 23:59:58.100 NULL NULL +2001-01-01 23:59:58.900 NULL NULL +2001-01-01 23:59:58.990 NULL NULL +2001-01-01 23:59:58.999 NULL NULL +2001-01-01 23:59:58.999 NULL NULL +2001-01-01 23:59:58.999 NULL NULL +2001-01-01 23:59:58.999 NULL NULL +2001-01-01 23:59:59.000 NULL NULL +9999-12-31 23:59:58.000 NULL NULL +9999-12-31 23:59:58.000 NULL NULL +9999-12-31 23:59:58.000 NULL NULL +9999-12-31 23:59:58.000 NULL NULL +9999-12-31 23:59:58.000 NULL NULL +9999-12-31 23:59:58.000 NULL NULL +9999-12-31 23:59:58.009 NULL NULL +9999-12-31 23:59:58.099 NULL NULL +9999-12-31 23:59:58.100 NULL NULL +9999-12-31 23:59:58.900 NULL NULL +9999-12-31 23:59:58.990 NULL NULL +9999-12-31 23:59:58.999 NULL NULL +9999-12-31 23:59:58.999 NULL NULL +9999-12-31 23:59:58.999 NULL NULL +9999-12-31 23:59:58.999 NULL NULL +9999-12-31 23:59:59.000 NULL NULL +SELECT a2, d2, HEX(WEIGHT_STRING(d2)) FROM t1 ORDER BY d2, a6; +a2 d2 HEX(WEIGHT_STRING(d2)) +0000-00-00 00:00:00.00 NULL NULL +0000-00-00 00:00:00.00 NULL NULL +0000-00-00 00:00:00.00 NULL NULL +0000-00-00 00:00:00.00 NULL NULL +0000-00-00 00:00:00.00 NULL NULL +0000-00-00 00:00:00.00 NULL NULL +0000-00-00 00:00:00.00 NULL NULL +0000-00-00 00:00:00.00 NULL NULL +0000-00-00 00:00:00.00 NULL NULL +0000-00-00 00:00:00.00 NULL NULL +0000-00-00 00:00:00.00 NULL NULL +0000-00-00 00:00:00.00 NULL NULL +0000-00-00 00:00:00.00 NULL NULL +0000-00-00 00:00:00.00 NULL NULL +0000-00-00 00:00:00.00 NULL NULL +0000-00-00 00:00:00.00 NULL NULL +0000-00-00 00:00:00.00 NULL NULL +0000-00-00 00:00:00.00 NULL NULL +0000-00-00 00:00:00.00 NULL NULL +0000-00-00 00:00:00.00 NULL NULL +0000-00-00 00:00:00.09 NULL NULL +0000-00-00 00:00:00.10 NULL NULL +0000-00-00 00:00:00.90 NULL NULL +0000-00-00 00:00:00.99 NULL NULL +0000-00-00 00:00:00.99 NULL NULL +0000-00-00 00:00:00.99 NULL NULL +0000-00-00 00:00:00.99 NULL NULL +0000-00-00 00:00:00.99 NULL NULL +0000-00-00 00:00:01.00 NULL NULL +0000-00-00 00:00:01.00 NULL NULL +0000-00-00 00:00:01.00 NULL NULL +0000-00-00 00:00:01.00 NULL NULL +0000-00-00 00:00:01.00 NULL NULL +0000-00-00 00:00:01.00 NULL NULL +0000-00-00 00:00:01.00 NULL NULL +0000-00-00 00:00:01.00 NULL NULL +0000-00-00 00:00:01.00 NULL NULL +0000-00-00 00:00:01.00 NULL NULL +0000-00-00 00:00:01.00 NULL NULL +0000-00-00 00:00:01.00 NULL NULL +0000-00-00 00:00:01.00 NULL NULL +0000-00-00 00:00:01.00 NULL NULL +0000-00-00 00:00:01.00 NULL NULL +0000-00-00 00:00:01.00 NULL NULL +0000-00-00 00:00:01.00 NULL NULL +0000-00-00 00:00:01.00 NULL NULL +0000-00-00 00:00:01.00 NULL NULL +0000-00-00 00:00:01.00 NULL NULL +0000-00-00 00:00:01.09 NULL NULL +0000-00-00 00:00:01.09 NULL NULL +0000-00-00 00:00:01.10 NULL NULL +0000-00-00 00:00:01.90 NULL NULL +0000-00-00 00:00:01.99 NULL NULL +0000-00-00 00:00:01.99 NULL NULL +0000-00-00 00:00:01.99 NULL NULL +0000-00-00 00:00:01.99 NULL NULL +0000-00-00 00:00:01.99 NULL NULL +0000-00-00 00:01:00.00 NULL NULL +0000-00-00 00:01:00.00 NULL NULL +0000-00-00 00:01:00.00 NULL NULL +0000-00-00 00:01:00.00 NULL NULL +0000-00-00 00:01:00.00 NULL NULL +0000-00-00 00:01:00.00 NULL NULL +0000-00-00 00:01:00.00 NULL NULL +0000-00-00 00:01:00.09 NULL NULL +0000-00-00 00:01:00.10 NULL NULL +0000-00-00 00:01:00.90 NULL NULL +0000-00-00 00:01:00.99 NULL NULL +0000-00-00 01:00:00.00 NULL NULL +0000-00-00 01:00:00.00 NULL NULL +0000-00-00 01:00:00.00 NULL NULL +0000-00-00 01:00:00.00 NULL NULL +0000-00-00 01:00:00.00 NULL NULL +0000-00-00 01:00:00.00 NULL NULL +0000-00-00 01:00:00.00 NULL NULL +0000-00-00 01:00:00.09 NULL NULL +0000-00-00 01:00:00.10 NULL NULL +0000-00-00 01:00:00.90 NULL NULL +0000-00-00 01:00:00.99 NULL NULL +0000-00-00 01:00:00.99 NULL NULL +0000-00-00 01:00:00.99 NULL NULL +0000-00-00 01:00:00.99 NULL NULL +0000-00-00 01:00:00.99 NULL NULL +1001-01-01 00:00:00.00 NULL NULL +1001-01-01 00:00:00.00 NULL NULL +1001-01-01 00:00:00.00 NULL NULL +1001-01-01 00:00:00.00 NULL NULL +1001-01-01 00:00:00.00 NULL NULL +1001-01-01 00:00:00.00 NULL NULL +1001-01-01 00:00:00.00 NULL NULL +1001-01-01 00:00:00.09 NULL NULL +1001-01-01 00:00:00.10 NULL NULL +1001-01-01 00:00:00.90 NULL NULL +1001-01-01 00:00:00.99 NULL NULL +1001-01-01 00:00:00.99 NULL NULL +1001-01-01 00:00:00.99 NULL NULL +1001-01-01 00:00:00.99 NULL NULL +1001-01-01 00:00:00.99 NULL NULL +2001-01-01 23:59:58.00 NULL NULL +2001-01-01 23:59:58.00 NULL NULL +2001-01-01 23:59:58.00 NULL NULL +2001-01-01 23:59:58.00 NULL NULL +2001-01-01 23:59:58.00 NULL NULL +2001-01-01 23:59:58.00 NULL NULL +2001-01-01 23:59:58.00 NULL NULL +2001-01-01 23:59:58.09 NULL NULL +2001-01-01 23:59:58.10 NULL NULL +2001-01-01 23:59:58.90 NULL NULL +2001-01-01 23:59:58.99 NULL NULL +2001-01-01 23:59:58.99 NULL NULL +2001-01-01 23:59:58.99 NULL NULL +2001-01-01 23:59:58.99 NULL NULL +2001-01-01 23:59:58.99 NULL NULL +2001-01-01 23:59:59.00 NULL NULL +9999-12-31 23:59:58.00 NULL NULL +9999-12-31 23:59:58.00 NULL NULL +9999-12-31 23:59:58.00 NULL NULL +9999-12-31 23:59:58.00 NULL NULL +9999-12-31 23:59:58.00 NULL NULL +9999-12-31 23:59:58.00 NULL NULL +9999-12-31 23:59:58.00 NULL NULL +9999-12-31 23:59:58.09 NULL NULL +9999-12-31 23:59:58.10 NULL NULL +9999-12-31 23:59:58.90 NULL NULL +9999-12-31 23:59:58.99 NULL NULL +9999-12-31 23:59:58.99 NULL NULL +9999-12-31 23:59:58.99 NULL NULL +9999-12-31 23:59:58.99 NULL NULL +9999-12-31 23:59:58.99 NULL NULL +9999-12-31 23:59:59.00 NULL NULL +SELECT a1, d1, HEX(WEIGHT_STRING(d1)) FROM t1 ORDER BY d1, a6; +a1 d1 HEX(WEIGHT_STRING(d1)) +0000-00-00 00:00:00.0 NULL NULL +0000-00-00 00:00:00.0 NULL NULL +0000-00-00 00:00:00.0 NULL NULL +0000-00-00 00:00:00.0 NULL NULL +0000-00-00 00:00:00.0 NULL NULL +0000-00-00 00:00:00.0 NULL NULL +0000-00-00 00:00:00.0 NULL NULL +0000-00-00 00:00:00.0 NULL NULL +0000-00-00 00:00:00.0 NULL NULL +0000-00-00 00:00:00.0 NULL NULL +0000-00-00 00:00:00.0 NULL NULL +0000-00-00 00:00:00.0 NULL NULL +0000-00-00 00:00:00.0 NULL NULL +0000-00-00 00:00:00.0 NULL NULL +0000-00-00 00:00:00.0 NULL NULL +0000-00-00 00:00:00.0 NULL NULL +0000-00-00 00:00:00.0 NULL NULL +0000-00-00 00:00:00.0 NULL NULL +0000-00-00 00:00:00.0 NULL NULL +0000-00-00 00:00:00.0 NULL NULL +0000-00-00 00:00:00.0 NULL NULL +0000-00-00 00:00:00.1 NULL NULL +0000-00-00 00:00:00.9 NULL NULL +0000-00-00 00:00:00.9 NULL NULL +0000-00-00 00:00:00.9 NULL NULL +0000-00-00 00:00:00.9 NULL NULL +0000-00-00 00:00:00.9 NULL NULL +0000-00-00 00:00:00.9 NULL NULL +0000-00-00 00:00:01.0 NULL NULL +0000-00-00 00:00:01.0 NULL NULL +0000-00-00 00:00:01.0 NULL NULL +0000-00-00 00:00:01.0 NULL NULL +0000-00-00 00:00:01.0 NULL NULL +0000-00-00 00:00:01.0 NULL NULL +0000-00-00 00:00:01.0 NULL NULL +0000-00-00 00:00:01.0 NULL NULL +0000-00-00 00:00:01.0 NULL NULL +0000-00-00 00:00:01.0 NULL NULL +0000-00-00 00:00:01.0 NULL NULL +0000-00-00 00:00:01.0 NULL NULL +0000-00-00 00:00:01.0 NULL NULL +0000-00-00 00:00:01.0 NULL NULL +0000-00-00 00:00:01.0 NULL NULL +0000-00-00 00:00:01.0 NULL NULL +0000-00-00 00:00:01.0 NULL NULL +0000-00-00 00:00:01.0 NULL NULL +0000-00-00 00:00:01.0 NULL NULL +0000-00-00 00:00:01.0 NULL NULL +0000-00-00 00:00:01.0 NULL NULL +0000-00-00 00:00:01.0 NULL NULL +0000-00-00 00:00:01.1 NULL NULL +0000-00-00 00:00:01.9 NULL NULL +0000-00-00 00:00:01.9 NULL NULL +0000-00-00 00:00:01.9 NULL NULL +0000-00-00 00:00:01.9 NULL NULL +0000-00-00 00:00:01.9 NULL NULL +0000-00-00 00:00:01.9 NULL NULL +0000-00-00 00:01:00.0 NULL NULL +0000-00-00 00:01:00.0 NULL NULL +0000-00-00 00:01:00.0 NULL NULL +0000-00-00 00:01:00.0 NULL NULL +0000-00-00 00:01:00.0 NULL NULL +0000-00-00 00:01:00.0 NULL NULL +0000-00-00 00:01:00.0 NULL NULL +0000-00-00 00:01:00.0 NULL NULL +0000-00-00 00:01:00.1 NULL NULL +0000-00-00 00:01:00.9 NULL NULL +0000-00-00 00:01:00.9 NULL NULL +0000-00-00 01:00:00.0 NULL NULL +0000-00-00 01:00:00.0 NULL NULL +0000-00-00 01:00:00.0 NULL NULL +0000-00-00 01:00:00.0 NULL NULL +0000-00-00 01:00:00.0 NULL NULL +0000-00-00 01:00:00.0 NULL NULL +0000-00-00 01:00:00.0 NULL NULL +0000-00-00 01:00:00.0 NULL NULL +0000-00-00 01:00:00.1 NULL NULL +0000-00-00 01:00:00.9 NULL NULL +0000-00-00 01:00:00.9 NULL NULL +0000-00-00 01:00:00.9 NULL NULL +0000-00-00 01:00:00.9 NULL NULL +0000-00-00 01:00:00.9 NULL NULL +0000-00-00 01:00:00.9 NULL NULL +1001-01-01 00:00:00.0 NULL NULL +1001-01-01 00:00:00.0 NULL NULL +1001-01-01 00:00:00.0 NULL NULL +1001-01-01 00:00:00.0 NULL NULL +1001-01-01 00:00:00.0 NULL NULL +1001-01-01 00:00:00.0 NULL NULL +1001-01-01 00:00:00.0 NULL NULL +1001-01-01 00:00:00.0 NULL NULL +1001-01-01 00:00:00.1 NULL NULL +1001-01-01 00:00:00.9 NULL NULL +1001-01-01 00:00:00.9 NULL NULL +1001-01-01 00:00:00.9 NULL NULL +1001-01-01 00:00:00.9 NULL NULL +1001-01-01 00:00:00.9 NULL NULL +1001-01-01 00:00:00.9 NULL NULL +2001-01-01 23:59:58.0 NULL NULL +2001-01-01 23:59:58.0 NULL NULL +2001-01-01 23:59:58.0 NULL NULL +2001-01-01 23:59:58.0 NULL NULL +2001-01-01 23:59:58.0 NULL NULL +2001-01-01 23:59:58.0 NULL NULL +2001-01-01 23:59:58.0 NULL NULL +2001-01-01 23:59:58.0 NULL NULL +2001-01-01 23:59:58.1 NULL NULL +2001-01-01 23:59:58.9 NULL NULL +2001-01-01 23:59:58.9 NULL NULL +2001-01-01 23:59:58.9 NULL NULL +2001-01-01 23:59:58.9 NULL NULL +2001-01-01 23:59:58.9 NULL NULL +2001-01-01 23:59:58.9 NULL NULL +2001-01-01 23:59:59.0 NULL NULL +9999-12-31 23:59:58.0 NULL NULL +9999-12-31 23:59:58.0 NULL NULL +9999-12-31 23:59:58.0 NULL NULL +9999-12-31 23:59:58.0 NULL NULL +9999-12-31 23:59:58.0 NULL NULL +9999-12-31 23:59:58.0 NULL NULL +9999-12-31 23:59:58.0 NULL NULL +9999-12-31 23:59:58.0 NULL NULL +9999-12-31 23:59:58.1 NULL NULL +9999-12-31 23:59:58.9 NULL NULL +9999-12-31 23:59:58.9 NULL NULL +9999-12-31 23:59:58.9 NULL NULL +9999-12-31 23:59:58.9 NULL NULL +9999-12-31 23:59:58.9 NULL NULL +9999-12-31 23:59:58.9 NULL NULL +9999-12-31 23:59:59.0 NULL NULL +SELECT a0, d0, HEX(WEIGHT_STRING(d0)) FROM t1 ORDER BY d0, a6; +a0 d0 HEX(WEIGHT_STRING(d0)) +0000-00-00 00:00:00. NULL NULL +0000-00-00 00:00:00. NULL NULL +0000-00-00 00:00:00. NULL NULL +0000-00-00 00:00:00. NULL NULL +0000-00-00 00:00:00. NULL NULL +0000-00-00 00:00:00. NULL NULL +0000-00-00 00:00:00. NULL NULL +0000-00-00 00:00:00. NULL NULL +0000-00-00 00:00:00. NULL NULL +0000-00-00 00:00:00. NULL NULL +0000-00-00 00:00:00. NULL NULL +0000-00-00 00:00:00. NULL NULL +0000-00-00 00:00:00. NULL NULL +0000-00-00 00:00:00. NULL NULL +0000-00-00 00:00:00. NULL NULL +0000-00-00 00:00:00. NULL NULL +0000-00-00 00:00:00. NULL NULL +0000-00-00 00:00:00. NULL NULL +0000-00-00 00:00:00. NULL NULL +0000-00-00 00:00:00. NULL NULL +0000-00-00 00:00:00. NULL NULL +0000-00-00 00:00:00. NULL NULL +0000-00-00 00:00:00. NULL NULL +0000-00-00 00:00:00. NULL NULL +0000-00-00 00:00:00. NULL NULL +0000-00-00 00:00:00. NULL NULL +0000-00-00 00:00:00. NULL NULL +0000-00-00 00:00:00. NULL NULL +0000-00-00 00:00:01. NULL NULL +0000-00-00 00:00:01. NULL NULL +0000-00-00 00:00:01. NULL NULL +0000-00-00 00:00:01. NULL NULL +0000-00-00 00:00:01. NULL NULL +0000-00-00 00:00:01. NULL NULL +0000-00-00 00:00:01. NULL NULL +0000-00-00 00:00:01. NULL NULL +0000-00-00 00:00:01. NULL NULL +0000-00-00 00:00:01. NULL NULL +0000-00-00 00:00:01. NULL NULL +0000-00-00 00:00:01. NULL NULL +0000-00-00 00:00:01. NULL NULL +0000-00-00 00:00:01. NULL NULL +0000-00-00 00:00:01. NULL NULL +0000-00-00 00:00:01. NULL NULL +0000-00-00 00:00:01. NULL NULL +0000-00-00 00:00:01. NULL NULL +0000-00-00 00:00:01. NULL NULL +0000-00-00 00:00:01. NULL NULL +0000-00-00 00:00:01. NULL NULL +0000-00-00 00:00:01. NULL NULL +0000-00-00 00:00:01. NULL NULL +0000-00-00 00:00:01. NULL NULL +0000-00-00 00:00:01. NULL NULL +0000-00-00 00:00:01. NULL NULL +0000-00-00 00:00:01. NULL NULL +0000-00-00 00:00:01. NULL NULL +0000-00-00 00:00:01. NULL NULL +0000-00-00 00:01:00. NULL NULL +0000-00-00 00:01:00. NULL NULL +0000-00-00 00:01:00. NULL NULL +0000-00-00 00:01:00. NULL NULL +0000-00-00 00:01:00. NULL NULL +0000-00-00 00:01:00. NULL NULL +0000-00-00 00:01:00. NULL NULL +0000-00-00 00:01:00. NULL NULL +0000-00-00 00:01:00. NULL NULL +0000-00-00 00:01:00. NULL NULL +0000-00-00 00:01:00. NULL NULL +0000-00-00 01:00:00. NULL NULL +0000-00-00 01:00:00. NULL NULL +0000-00-00 01:00:00. NULL NULL +0000-00-00 01:00:00. NULL NULL +0000-00-00 01:00:00. NULL NULL +0000-00-00 01:00:00. NULL NULL +0000-00-00 01:00:00. NULL NULL +0000-00-00 01:00:00. NULL NULL +0000-00-00 01:00:00. NULL NULL +0000-00-00 01:00:00. NULL NULL +0000-00-00 01:00:00. NULL NULL +0000-00-00 01:00:00. NULL NULL +0000-00-00 01:00:00. NULL NULL +0000-00-00 01:00:00. NULL NULL +0000-00-00 01:00:00. NULL NULL +1001-01-01 00:00:00. NULL NULL +1001-01-01 00:00:00. NULL NULL +1001-01-01 00:00:00. NULL NULL +1001-01-01 00:00:00. NULL NULL +1001-01-01 00:00:00. NULL NULL +1001-01-01 00:00:00. NULL NULL +1001-01-01 00:00:00. NULL NULL +1001-01-01 00:00:00. NULL NULL +1001-01-01 00:00:00. NULL NULL +1001-01-01 00:00:00. NULL NULL +1001-01-01 00:00:00. NULL NULL +1001-01-01 00:00:00. NULL NULL +1001-01-01 00:00:00. NULL NULL +1001-01-01 00:00:00. NULL NULL +1001-01-01 00:00:00. NULL NULL +2001-01-01 23:59:58. NULL NULL +2001-01-01 23:59:58. NULL NULL +2001-01-01 23:59:58. NULL NULL +2001-01-01 23:59:58. NULL NULL +2001-01-01 23:59:58. NULL NULL +2001-01-01 23:59:58. NULL NULL +2001-01-01 23:59:58. NULL NULL +2001-01-01 23:59:58. NULL NULL +2001-01-01 23:59:58. NULL NULL +2001-01-01 23:59:58. NULL NULL +2001-01-01 23:59:58. NULL NULL +2001-01-01 23:59:58. NULL NULL +2001-01-01 23:59:58. NULL NULL +2001-01-01 23:59:58. NULL NULL +2001-01-01 23:59:58. NULL NULL +2001-01-01 23:59:59. NULL NULL +9999-12-31 23:59:58. NULL NULL +9999-12-31 23:59:58. NULL NULL +9999-12-31 23:59:58. NULL NULL +9999-12-31 23:59:58. NULL NULL +9999-12-31 23:59:58. NULL NULL +9999-12-31 23:59:58. NULL NULL +9999-12-31 23:59:58. NULL NULL +9999-12-31 23:59:58. NULL NULL +9999-12-31 23:59:58. NULL NULL +9999-12-31 23:59:58. NULL NULL +9999-12-31 23:59:58. NULL NULL +9999-12-31 23:59:58. NULL NULL +9999-12-31 23:59:58. NULL NULL +9999-12-31 23:59:58. NULL NULL +9999-12-31 23:59:58. NULL NULL +9999-12-31 23:59:59. NULL NULL +CREATE VIEW v1 AS +SELECT a6, d0, d1, d2, d3, d4, d5, d6, +HEX(WEIGHT_STRING(d0)) as wst0, +HEX(WEIGHT_STRING(d1)) as wst1, +HEX(WEIGHT_STRING(d2)) as wst2, +HEX(WEIGHT_STRING(d3)) as wst3, +HEX(WEIGHT_STRING(d4)) as wst4, +HEX(WEIGHT_STRING(d5)) as wst5, +HEX(WEIGHT_STRING(d6)) as wst6 +FROM t1; +SELECT * FROM v1 WHERE a6 LIKE '%.999999' ORDER BY a6, d6;; +a6 0000-00-00 00:00:00.999999 +d0 NULL +d1 NULL +d2 NULL +d3 NULL +d4 NULL +d5 NULL +d6 NULL +wst0 NULL +wst1 NULL +wst2 NULL +wst3 NULL +wst4 NULL +wst5 NULL +wst6 NULL +a6 0000-00-00 00:00:01.999999 +d0 NULL +d1 NULL +d2 NULL +d3 NULL +d4 NULL +d5 NULL +d6 NULL +wst0 NULL +wst1 NULL +wst2 NULL +wst3 NULL +wst4 NULL +wst5 NULL +wst6 NULL +a6 0000-00-00 00:01:00.999999 +d0 NULL +d1 NULL +d2 NULL +d3 NULL +d4 NULL +d5 NULL +d6 NULL +wst0 NULL +wst1 NULL +wst2 NULL +wst3 NULL +wst4 NULL +wst5 NULL +wst6 NULL +a6 0000-00-00 01:00:00.999999 +d0 NULL +d1 NULL +d2 NULL +d3 NULL +d4 NULL +d5 NULL +d6 NULL +wst0 NULL +wst1 NULL +wst2 NULL +wst3 NULL +wst4 NULL +wst5 NULL +wst6 NULL +a6 1001-01-01 00:00:00.999999 +d0 NULL +d1 NULL +d2 NULL +d3 NULL +d4 NULL +d5 NULL +d6 NULL +wst0 NULL +wst1 NULL +wst2 NULL +wst3 NULL +wst4 NULL +wst5 NULL +wst6 NULL +a6 2001-01-01 23:59:58.999999 +d0 NULL +d1 NULL +d2 NULL +d3 NULL +d4 NULL +d5 NULL +d6 NULL +wst0 NULL +wst1 NULL +wst2 NULL +wst3 NULL +wst4 NULL +wst5 NULL +wst6 NULL +a6 9999-12-31 23:59:58.999999 +d0 NULL +d1 NULL +d2 NULL +d3 NULL +d4 NULL +d5 NULL +d6 NULL +wst0 NULL +wst1 NULL +wst2 NULL +wst3 NULL +wst4 NULL +wst5 NULL +wst6 NULL +SELECT * FROM v1 WHERE a6 LIKE '%.000000' ORDER BY a6, d6;; +a6 0000-00-00 00:00:00.000000 +d0 NULL +d1 NULL +d2 NULL +d3 NULL +d4 NULL +d5 NULL +d6 NULL +wst0 NULL +wst1 NULL +wst2 NULL +wst3 NULL +wst4 NULL +wst5 NULL +wst6 NULL +a6 0000-00-00 00:00:01.000000 +d0 NULL +d1 NULL +d2 NULL +d3 NULL +d4 NULL +d5 NULL +d6 NULL +wst0 NULL +wst1 NULL +wst2 NULL +wst3 NULL +wst4 NULL +wst5 NULL +wst6 NULL +a6 2001-01-01 23:59:59.000000 +d0 NULL +d1 NULL +d2 NULL +d3 NULL +d4 NULL +d5 NULL +d6 NULL +wst0 NULL +wst1 NULL +wst2 NULL +wst3 NULL +wst4 NULL +wst5 NULL +wst6 NULL +a6 9999-12-31 23:59:59.000000 +d0 NULL +d1 NULL +d2 NULL +d3 NULL +d4 NULL +d5 NULL +d6 NULL +wst0 NULL +wst1 NULL +wst2 NULL +wst3 NULL +wst4 NULL +wst5 NULL +wst6 NULL +SELECT * FROM v1 WHERE a6 LIKE '%.100000' ORDER BY a6, d6;; +a6 0000-00-00 00:00:00.100000 +d0 NULL +d1 NULL +d2 NULL +d3 NULL +d4 NULL +d5 NULL +d6 NULL +wst0 NULL +wst1 NULL +wst2 NULL +wst3 NULL +wst4 NULL +wst5 NULL +wst6 NULL +a6 0000-00-00 00:00:01.100000 +d0 NULL +d1 NULL +d2 NULL +d3 NULL +d4 NULL +d5 NULL +d6 NULL +wst0 NULL +wst1 NULL +wst2 NULL +wst3 NULL +wst4 NULL +wst5 NULL +wst6 NULL +a6 0000-00-00 00:01:00.100000 +d0 NULL +d1 NULL +d2 NULL +d3 NULL +d4 NULL +d5 NULL +d6 NULL +wst0 NULL +wst1 NULL +wst2 NULL +wst3 NULL +wst4 NULL +wst5 NULL +wst6 NULL +a6 0000-00-00 01:00:00.100000 +d0 NULL +d1 NULL +d2 NULL +d3 NULL +d4 NULL +d5 NULL +d6 NULL +wst0 NULL +wst1 NULL +wst2 NULL +wst3 NULL +wst4 NULL +wst5 NULL +wst6 NULL +a6 1001-01-01 00:00:00.100000 +d0 NULL +d1 NULL +d2 NULL +d3 NULL +d4 NULL +d5 NULL +d6 NULL +wst0 NULL +wst1 NULL +wst2 NULL +wst3 NULL +wst4 NULL +wst5 NULL +wst6 NULL +a6 2001-01-01 23:59:58.100000 +d0 NULL +d1 NULL +d2 NULL +d3 NULL +d4 NULL +d5 NULL +d6 NULL +wst0 NULL +wst1 NULL +wst2 NULL +wst3 NULL +wst4 NULL +wst5 NULL +wst6 NULL +a6 9999-12-31 23:59:58.100000 +d0 NULL +d1 NULL +d2 NULL +d3 NULL +d4 NULL +d5 NULL +d6 NULL +wst0 NULL +wst1 NULL +wst2 NULL +wst3 NULL +wst4 NULL +wst5 NULL +wst6 NULL +DROP VIEW v1; +DROP TABLE t1; +# +# Testing bad FSPs +# +CREATE TABLE t1 (a DATETIME(-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 1 +CREATE TABLE t1 (a DATETIME(7)); +ERROR 42000: Too-big precision 7 specified for 'a'. Maximum is 6. +CREATE TABLE t1 (a DATETIME(31)); +ERROR 42000: Too-big precision 31 specified for 'a'. Maximum is 6. +# +# Testing bad FSPs with DATETIME functions +# +SELECT SYSDATE(-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 1 +SELECT SYSDATE(7); +ERROR 42000: Too-big precision 7 specified for 'sysdate'. Maximum is 6. +SELECT SYSDATE(31); +ERROR 42000: Too-big precision 31 specified for 'sysdate'. Maximum is 6. +SELECT NOW(-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 1 +SELECT NOW(7); +ERROR 42000: Too-big precision 7 specified for 'now'. Maximum is 6. +SELECT NOW(31); +ERROR 42000: Too-big precision 31 specified for 'now'. Maximum is 6. +# +# Testing INSERT, ORDER, KEY, BETWEEN, comparison +# +CREATE TABLE t1 (a DATETIME(6) NOT NULL); +INSERT INTO t1 VALUES ('0000-00-00 00:00:00.000000'); +ERROR 22007: Incorrect datetime value: '0000-00-00 00:00:00.000000' for column 'a' at row 1 +INSERT INTO t1 VALUES ('0000-00-00 23:59:59.999999'); +ERROR 22007: Incorrect datetime value: '0000-00-00 23:59:59.999999' for column 'a' at row 1 +INSERT INTO t1 VALUES ('2000-01-01 01:02:03'); +INSERT INTO t1 VALUES ('2000-01-01 01:02:03.4'); +INSERT INTO t1 VALUES ('2000-01-01 01:02:03.45'); +INSERT INTO t1 VALUES ('2000-01-01 01:02:03.456'); +INSERT INTO t1 VALUES ('2000-01-01 01:02:03.4567'); +INSERT INTO t1 VALUES ('2000-01-01 01:02:03.45678'); +INSERT INTO t1 VALUES ('2000-01-01 01:02:03.4567891'); +INSERT INTO t1 VALUES ('9999-12-31 23:59:59.000000'); +SELECT * FROM t1; +a +2000-01-01 01:02:03.000000 +2000-01-01 01:02:03.400000 +2000-01-01 01:02:03.450000 +2000-01-01 01:02:03.456000 +2000-01-01 01:02:03.456700 +2000-01-01 01:02:03.456780 +2000-01-01 01:02:03.456789 +9999-12-31 23:59:59.000000 +SELECT * FROM t1 ORDER BY a DESC; +a +9999-12-31 23:59:59.000000 +2000-01-01 01:02:03.456789 +2000-01-01 01:02:03.456780 +2000-01-01 01:02:03.456700 +2000-01-01 01:02:03.456000 +2000-01-01 01:02:03.450000 +2000-01-01 01:02:03.400000 +2000-01-01 01:02:03.000000 +SELECT * FROM t1 WHERE a='2000-01-01 01:02:03.45'; +a +2000-01-01 01:02:03.450000 +SELECT * FROM t1 WHERE a='2000-01-01 01:02:03.4567'; +a +2000-01-01 01:02:03.456700 +SELECT * FROM t1 WHERE a='2000-01-01 01:02:03.45670'; +a +2000-01-01 01:02:03.456700 +SELECT * FROM t1 WHERE a='2000-01-01 01:02:03.456700'; +a +2000-01-01 01:02:03.456700 +SELECT * FROM t1 WHERE a BETWEEN '2000-01-01 01:02:00' AND '2000-01-01 01:03:00'; +a +2000-01-01 01:02:03.000000 +2000-01-01 01:02:03.400000 +2000-01-01 01:02:03.450000 +2000-01-01 01:02:03.456000 +2000-01-01 01:02:03.456700 +2000-01-01 01:02:03.456780 +2000-01-01 01:02:03.456789 +ALTER TABLE t1 ADD KEY(a); +SELECT * FROM t1 ORDER BY a; +a +2000-01-01 01:02:03.000000 +2000-01-01 01:02:03.400000 +2000-01-01 01:02:03.450000 +2000-01-01 01:02:03.456000 +2000-01-01 01:02:03.456700 +2000-01-01 01:02:03.456780 +2000-01-01 01:02:03.456789 +9999-12-31 23:59:59.000000 +SELECT * FROM t1 ORDER BY a DESC; +a +9999-12-31 23:59:59.000000 +2000-01-01 01:02:03.456789 +2000-01-01 01:02:03.456780 +2000-01-01 01:02:03.456700 +2000-01-01 01:02:03.456000 +2000-01-01 01:02:03.450000 +2000-01-01 01:02:03.400000 +2000-01-01 01:02:03.000000 +EXPLAIN SELECT * FROM t1 WHERE a='2000-01-01 01:02:03.456700'; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 NULL ref a a 8 const 1 100.00 Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a` from `test`.`t1` where (`test`.`t1`.`a` = '2000-01-01 01:02:03.456700') +SELECT * FROM t1 WHERE a='2000-01-01 01:02:03.456700'; +a +2000-01-01 01:02:03.456700 +SELECT * FROM t1 WHERE a BETWEEN '2000-01-01 01:02:00' AND '2000-01-01 01:03:00'; +a +2000-01-01 01:02:03.000000 +2000-01-01 01:02:03.400000 +2000-01-01 01:02:03.450000 +2000-01-01 01:02:03.456000 +2000-01-01 01:02:03.456700 +2000-01-01 01:02:03.456780 +2000-01-01 01:02:03.456789 +SELECT * FROM t1 WHERE a BETWEEN TIMESTAMP'2000-01-01 01:02:03.456' AND TIMESTAMP'2000-01-01 01:02:03.45678'; +a +2000-01-01 01:02:03.456000 +2000-01-01 01:02:03.456700 +2000-01-01 01:02:03.456780 +DROP TABLE t1; +# +# Tesint range: stored_field_cmp_to_item +# +CREATE TABLE t1 (a datetime(6), key(a)); +INSERT INTO t1 VALUES +('2000-01-01 00:00:00'), ('2000-01-01 00:00:00'), +('2000-01-01 00:00:01'), ('2000-01-01 00:00:01'); +SELECT * FROM t1 WHERE a >= 20000101000000; +a +2000-01-01 00:00:00.000000 +2000-01-01 00:00:00.000000 +2000-01-01 00:00:01.000000 +2000-01-01 00:00:01.000000 +SELECT * FROM t1 WHERE a >= 20000101000000.0; +a +2000-01-01 00:00:00.000000 +2000-01-01 00:00:00.000000 +2000-01-01 00:00:01.000000 +2000-01-01 00:00:01.000000 +UPDATE t1 SET a=ADDTIME(a, 0.000001); +SELECT * FROM t1; +a +2000-01-01 00:00:00.000001 +2000-01-01 00:00:00.000001 +2000-01-01 00:00:01.000001 +2000-01-01 00:00:01.000001 +SELECT * FROM t1 WHERE a >= 20000101000000.000001; +a +2000-01-01 00:00:00.000001 +2000-01-01 00:00:00.000001 +2000-01-01 00:00:01.000001 +2000-01-01 00:00:01.000001 +DROP TABLE t1; +# +# Rare DATETIME formats +# +CREATE TABLE t1 (a DATETIME(6)); +INSERT INTO t1 VALUES (101.101); +ERROR 22007: Incorrect datetime value: '101.101' for column 'a' at row 1 +INSERT INTO t1 VALUES (990101.102); +ERROR 22007: Incorrect datetime value: '990101.102' for column 'a' at row 1 +INSERT INTO t1 VALUES ('990101.103'); +INSERT INTO t1 VALUES (131.104); +ERROR 22007: Incorrect datetime value: '131.104' for column 'a' at row 1 +INSERT INTO t1 VALUES ('000131.105'); +SELECT * FROM t1; +a +1999-01-01 10:03:00.000000 +2000-01-31 10:05:00.000000 +DROP TABLE t1; +# +# Testing bad values +# +CREATE TABLE t1 (a DATETIME(6)); +INSERT INTO t1 VALUES ('xxxx'); +ERROR 22007: Incorrect datetime value: 'xxxx' for column 'a' at row 1 +INSERT INTO t1 VALUES ('1999-01-01 00:00:00.123456 xxx'); +ERROR 22007: Incorrect datetime value: '1999-01-01 00:00:00.123456 xxx' for column 'a' at row 1 +INSERT INTO t1 VALUES ('1999-01-01 00:00:00 xxx'); +ERROR 22007: Incorrect datetime value: '1999-01-01 00:00:00 xxx' for column 'a' at row 1 +INSERT INTO t1 VALUES ('1999-01-01 xxx'); +ERROR 22007: Incorrect datetime value: '1999-01-01 xxx' for column 'a' at row 1 +INSERT INTO t1 VALUES ('1999-00-00 00:00:00'); +ERROR 22007: Incorrect datetime value: '1999-00-00 00:00:00' for column 'a' at row 1 +INSERT INTO t1 VALUES ('-0000-00-00'); +ERROR 22007: Incorrect datetime value: '-0000-00-00' for column 'a' at row 1 +INSERT INTO t1 VALUES ('-0000-00-00 00:00:00'); +ERROR 22007: Incorrect datetime value: '-0000-00-00 00:00:00' for column 'a' at row 1 +INSERT INTO t1 VALUES ('-0000-00-00 00:00:00.000000'); +ERROR 22007: Incorrect datetime value: '-0000-00-00 00:00:00.000000' for column 'a' at row 1 +INSERT INTO t1 VALUES (-0.1); +ERROR 22007: Incorrect datetime value: '-0.1' for column 'a' at row 1 +INSERT INTO t1 VALUES (-1.0); +ERROR 22007: Incorrect datetime value: '-1.0' for column 'a' at row 1 +INSERT INTO t1 VALUES (-1.1); +ERROR 22007: Incorrect datetime value: '-1.1' for column 'a' at row 1 +INSERT INTO t1 VALUES (-0.1e0); +ERROR 22007: Incorrect datetime value: '-0.1' for column 'a' at row 1 +INSERT INTO t1 VALUES (-1.0e0); +ERROR 22007: Incorrect datetime value: '-1' for column 'a' at row 1 +INSERT INTO t1 VALUES (-1.1e0); +ERROR 22007: Incorrect datetime value: '-1.1' for column 'a' at row 1 +SELECT * FROM t1; +a +DROP TABLE t1; +# +# Testing huge values +# +CREATE TABLE t1 (a DATETIME(6)); +INSERT INTO t1 VALUES (CAST(0xFFFFFFFF00000000 AS SIGNED)); +ERROR 22007: Incorrect datetime value: '-4294967296' for column 'a' at row 1 +INSERT INTO t1 VALUES (CAST(0xFFFFFFFF00000000 AS UNSIGNED)); +ERROR 22007: Incorrect datetime value: '18446744069414584320' for column 'a' at row 1 +INSERT INTO t1 VALUES ( 100000000000000000.1); +ERROR 22007: Incorrect datetime value: '100000000000000000.1' for column 'a' at row 1 +INSERT INTO t1 VALUES ( 100000000000000000.1e0); +ERROR 22007: Incorrect datetime value: '1e17' for column 'a' at row 1 +INSERT INTO t1 VALUES (-100000000000000000.1); +ERROR 22007: Incorrect datetime value: '-100000000000000000.1' for column 'a' at row 1 +INSERT INTO t1 VALUES (-100000000000000000.1e0); +ERROR 22007: Incorrect datetime value: '-1e17' for column 'a' at row 1 +SELECT * FROM t1; +a +DROP TABLE t1; +# +# Testing values with zeros in dates +# +SET sql_mode=no_zero_in_date; +Warnings: +Warning 3135 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release. +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +CREATE TABLE t1 (a DATETIME, b DATETIME(6)); +INSERT INTO t1 VALUES ('1999-00-00 00:00:00', '1999-00-00 00:00:00'); +Warnings: +Warning 1264 Out of range value for column 'a' at row 1 +Warning 1264 Out of range value for column 'b' at row 1 +SELECT * FROM t1; +a b +0000-00-00 00:00:00 0000-00-00 00:00:00.000000 +DROP TABLE t1; +SET sql_mode=default; +# +# Testing bad values with TRADITIONAL mode +# +SET sql_mode=traditional; +CREATE TABLE t1 (a DATETIME, b DATETIME(6)); +INSERT INTO t1 VALUES ('xxx', NULL); +ERROR 22007: Incorrect datetime value: 'xxx' for column 'a' at row 1 +INSERT INTO t1 VALUES (NULL,'xxx'); +ERROR 22007: Incorrect datetime value: 'xxx' for column 'b' at row 1 +INSERT INTO t1 VALUES ('1999-01-01 00:00:00 xxx', NULL); +ERROR 22007: Incorrect datetime value: '1999-01-01 00:00:00 xxx' for column 'a' at row 1 +INSERT INTO t1 VALUES ('1999-00-00 00:00:00 xxx', NULL); +ERROR 22007: Incorrect datetime value: '1999-00-00 00:00:00 xxx' for column 'a' at row 1 +INSERT INTO t1 VALUES (NULL, '1999-00-00 00:00:00 xxx'); +ERROR 22007: Incorrect datetime value: '1999-00-00 00:00:00 xxx' for column 'b' at row 1 +INSERT INTO t1 VALUES ('1999-00-00 xxx', NULL); +ERROR 22007: Incorrect datetime value: '1999-00-00 xxx' for column 'a' at row 1 +INSERT INTO t1 VALUES (NULL, '1999-00-00 xxx'); +ERROR 22007: Incorrect datetime value: '1999-00-00 xxx' for column 'b' at row 1 +INSERT INTO t1 VALUES ('1999-00-00 00:00:00', NULL); +ERROR 22007: Incorrect datetime value: '1999-00-00 00:00:00' for column 'a' at row 1 +INSERT INTO t1 VALUES (NULL, '1999-00-00 00:00:00'); +ERROR 22007: Incorrect datetime value: '1999-00-00 00:00:00' for column 'b' at row 1 +INSERT INTO t1 VALUES (NULL, TIMESTAMP('0000-00-00 10:00:00')); +ERROR 22007: Incorrect datetime value: '0000-00-00 10:00:00.000000' for column 'b' at row 1 +INSERT INTO t1 VALUES (NULL, 199991231000000); +ERROR 22007: Incorrect datetime value: '199991231000000' for column 'b' at row 1 +INSERT INTO t1 VALUES (NULL, -0.1); +ERROR 22007: Incorrect datetime value: '-0.1' for column 'b' at row 1 +INSERT INTO t1 VALUES (NULL, -1.0); +ERROR 22007: Incorrect datetime value: '-1.0' for column 'b' at row 1 +INSERT INTO t1 VALUES (NULL, -1.1); +ERROR 22007: Incorrect datetime value: '-1.1' for column 'b' at row 1 +INSERT INTO t1 VALUES (NULL, -0.1e0); +ERROR 22007: Incorrect datetime value: '-0.1' for column 'b' at row 1 +INSERT INTO t1 VALUES (NULL, -1.0e0); +ERROR 22007: Incorrect datetime value: '-1' for column 'b' at row 1 +INSERT INTO t1 VALUES (NULL, -1.1e0); +ERROR 22007: Incorrect datetime value: '-1.1' for column 'b' at row 1 +INSERT INTO t1 VALUES (NULL, CAST(0xFFFFFFFF00000000 AS SIGNED)); +ERROR 22007: Incorrect datetime value: '-4294967296' for column 'b' at row 1 +INSERT INTO t1 VALUES (NULL, CAST(0xFFFFFFFF00000000 AS UNSIGNED)); +ERROR 22007: Incorrect datetime value: '18446744069414584320' for column 'b' at row 1 +SELECT * FROM t1; +a b +DROP TABLE t1; +SET sql_mode=default; +# +# Testing rounding +# +CREATE TABLE t1 (a DATETIME(6)); +INSERT INTO t1 VALUES (20010101100000.1234567); +INSERT INTO t1 VALUES (20010228235959.9999997); +INSERT INTO t1 VALUES (99990228235959.9999997); +INSERT INTO t1 VALUES (99991231235959.9999997); +ERROR 22008: Datetime function: datetime field overflow +INSERT INTO t1 VALUES ('2001-01-01 10:00:00.1234567'); +INSERT INTO t1 VALUES ('2001-02-28 23:59:59.9999997'); +INSERT INTO t1 VALUES ('9999-02-28 23:59:59.9999997'); +INSERT INTO t1 VALUES ('9999-12-31 23:59:59.9999997'); +ERROR 22008: Datetime function: datetime field overflow +SELECT * FROM t1; +a +2001-01-01 10:00:00.123457 +2001-03-01 00:00:00.000000 +9999-03-01 00:00:00.000000 +2001-01-01 10:00:00.123457 +2001-03-01 00:00:00.000000 +9999-03-01 00:00:00.000000 +DROP TABLE t1; +# +# Testing rounding when altering DATETIME(N) to a smaller size +# +CREATE TABLE t1 (a DATETIME(6)); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.999999'); +ALTER TABLE t1 MODIFY a DATETIME(5); +SELECT * FROM t1; +a +2001-01-01 10:10:10.99999 +DROP TABLE t1; +CREATE TABLE t1 (a DATETIME(6)); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.999999'); +ALTER TABLE t1 MODIFY a TIME; +SELECT * FROM t1; +a +10:10:11 +DROP TABLE t1; +# +# Testing rounding from VARCHAR and DATETIME(6) to DATETIME(N) +# +CREATE TABLE t1 (a VARCHAR(32), +t6 DATETIME(6), t5 DATETIME(5), t4 DATETIME(4), +t3 DATETIME(3), t2 DATETIME(2), t1 DATETIME(1), +t0 DATETIME); +INSERT INTO t1 (a) VALUES ('2001-01-01 10:10:10.999999'); +INSERT INTO t1 (a) VALUES ('2001-01-01 10:10:10.999994'); +INSERT INTO t1 (a) VALUES ('2001-01-01 10:10:10.999949'); +INSERT INTO t1 (a) VALUES ('2001-01-01 10:10:10.999499'); +INSERT INTO t1 (a) VALUES ('2001-01-01 10:10:10.994999'); +INSERT INTO t1 (a) VALUES ('2001-01-01 10:10:10.949999'); +INSERT INTO t1 (a) VALUES ('2001-01-01 10:10:10.499999'); +UPDATE t1 SET t0=a, t1=a, t2=a, t3=a, t4=a, t5=a, t6=a; +SELECT * FROM t1;; +a 2001-01-01 10:10:10.999999 +t6 2001-01-01 10:10:10.999999 +t5 2001-01-01 10:10:11.00000 +t4 2001-01-01 10:10:11.0000 +t3 2001-01-01 10:10:11.000 +t2 2001-01-01 10:10:11.00 +t1 2001-01-01 10:10:11.0 +t0 2001-01-01 10:10:11 +a 2001-01-01 10:10:10.999994 +t6 2001-01-01 10:10:10.999994 +t5 2001-01-01 10:10:10.99999 +t4 2001-01-01 10:10:11.0000 +t3 2001-01-01 10:10:11.000 +t2 2001-01-01 10:10:11.00 +t1 2001-01-01 10:10:11.0 +t0 2001-01-01 10:10:11 +a 2001-01-01 10:10:10.999949 +t6 2001-01-01 10:10:10.999949 +t5 2001-01-01 10:10:10.99995 +t4 2001-01-01 10:10:10.9999 +t3 2001-01-01 10:10:11.000 +t2 2001-01-01 10:10:11.00 +t1 2001-01-01 10:10:11.0 +t0 2001-01-01 10:10:11 +a 2001-01-01 10:10:10.999499 +t6 2001-01-01 10:10:10.999499 +t5 2001-01-01 10:10:10.99950 +t4 2001-01-01 10:10:10.9995 +t3 2001-01-01 10:10:10.999 +t2 2001-01-01 10:10:11.00 +t1 2001-01-01 10:10:11.0 +t0 2001-01-01 10:10:11 +a 2001-01-01 10:10:10.994999 +t6 2001-01-01 10:10:10.994999 +t5 2001-01-01 10:10:10.99500 +t4 2001-01-01 10:10:10.9950 +t3 2001-01-01 10:10:10.995 +t2 2001-01-01 10:10:10.99 +t1 2001-01-01 10:10:11.0 +t0 2001-01-01 10:10:11 +a 2001-01-01 10:10:10.949999 +t6 2001-01-01 10:10:10.949999 +t5 2001-01-01 10:10:10.95000 +t4 2001-01-01 10:10:10.9500 +t3 2001-01-01 10:10:10.950 +t2 2001-01-01 10:10:10.95 +t1 2001-01-01 10:10:10.9 +t0 2001-01-01 10:10:11 +a 2001-01-01 10:10:10.499999 +t6 2001-01-01 10:10:10.499999 +t5 2001-01-01 10:10:10.50000 +t4 2001-01-01 10:10:10.5000 +t3 2001-01-01 10:10:10.500 +t2 2001-01-01 10:10:10.50 +t1 2001-01-01 10:10:10.5 +t0 2001-01-01 10:10:10 +ALTER TABLE t1 MODIFY a DATETIME(6); +UPDATE t1 SET t0=a, t1=a, t2=a, t3=a, t4=a, t5=a, t6=a; +SELECT * FROM t1;; +a 2001-01-01 10:10:10.999999 +t6 2001-01-01 10:10:10.999999 +t5 2001-01-01 10:10:11.00000 +t4 2001-01-01 10:10:11.0000 +t3 2001-01-01 10:10:11.000 +t2 2001-01-01 10:10:11.00 +t1 2001-01-01 10:10:11.0 +t0 2001-01-01 10:10:11 +a 2001-01-01 10:10:10.999994 +t6 2001-01-01 10:10:10.999994 +t5 2001-01-01 10:10:10.99999 +t4 2001-01-01 10:10:11.0000 +t3 2001-01-01 10:10:11.000 +t2 2001-01-01 10:10:11.00 +t1 2001-01-01 10:10:11.0 +t0 2001-01-01 10:10:11 +a 2001-01-01 10:10:10.999949 +t6 2001-01-01 10:10:10.999949 +t5 2001-01-01 10:10:10.99995 +t4 2001-01-01 10:10:10.9999 +t3 2001-01-01 10:10:11.000 +t2 2001-01-01 10:10:11.00 +t1 2001-01-01 10:10:11.0 +t0 2001-01-01 10:10:11 +a 2001-01-01 10:10:10.999499 +t6 2001-01-01 10:10:10.999499 +t5 2001-01-01 10:10:10.99950 +t4 2001-01-01 10:10:10.9995 +t3 2001-01-01 10:10:10.999 +t2 2001-01-01 10:10:11.00 +t1 2001-01-01 10:10:11.0 +t0 2001-01-01 10:10:11 +a 2001-01-01 10:10:10.994999 +t6 2001-01-01 10:10:10.994999 +t5 2001-01-01 10:10:10.99500 +t4 2001-01-01 10:10:10.9950 +t3 2001-01-01 10:10:10.995 +t2 2001-01-01 10:10:10.99 +t1 2001-01-01 10:10:11.0 +t0 2001-01-01 10:10:11 +a 2001-01-01 10:10:10.949999 +t6 2001-01-01 10:10:10.949999 +t5 2001-01-01 10:10:10.95000 +t4 2001-01-01 10:10:10.9500 +t3 2001-01-01 10:10:10.950 +t2 2001-01-01 10:10:10.95 +t1 2001-01-01 10:10:10.9 +t0 2001-01-01 10:10:11 +a 2001-01-01 10:10:10.499999 +t6 2001-01-01 10:10:10.499999 +t5 2001-01-01 10:10:10.50000 +t4 2001-01-01 10:10:10.5000 +t3 2001-01-01 10:10:10.500 +t2 2001-01-01 10:10:10.50 +t1 2001-01-01 10:10:10.5 +t0 2001-01-01 10:10:10 +DROP TABLE t1; +# +# Testing rounding from DATETIME(N) to BIGINT +# +CREATE TABLE t1 (a BIGINT, b DATETIME(6)); +INSERT INTO t1 (b) VALUES ('2001-01-01 10:10:59.500000'); +INSERT INTO t1 (b) VALUES ('2001-01-01 10:10:10.500000'); +INSERT INTO t1 (b) VALUES ('2001-01-01 10:10:10.499999'); +UPDATE t1 SET a=b; +SELECT * FROM t1; +a b +20010101101100 2001-01-01 10:10:59.500000 +20010101101011 2001-01-01 10:10:10.500000 +20010101101010 2001-01-01 10:10:10.499999 +DROP TABLE t1; +# +# Testing rounding from TIME(6) to DATETIME(N) +# +SET timestamp=UNIX_TIMESTAMP('2001-01-01 00:00:00'); +CREATE TABLE t1 (a TIME(6), +t6 DATETIME(6), t5 DATETIME(5), t4 DATETIME(4), +t3 DATETIME(3), t2 DATETIME(2), t1 DATETIME(1), +t0 DATETIME); +INSERT INTO t1 (a) VALUES ('10:10:10.999999'); +INSERT INTO t1 (a) VALUES ('10:10:10.999994'); +INSERT INTO t1 (a) VALUES ('10:10:10.999949'); +INSERT INTO t1 (a) VALUES ('10:10:10.999499'); +INSERT INTO t1 (a) VALUES ('10:10:10.994999'); +INSERT INTO t1 (a) VALUES ('10:10:10.949999'); +INSERT INTO t1 (a) VALUES ('10:10:10.499999'); +UPDATE t1 SET t0=a, t1=a, t2=a, t3=a, t4=a, t5=a, t6=a; +SELECT * FROM t1;; +a 10:10:10.999999 +t6 2001-01-01 10:10:10.999999 +t5 2001-01-01 10:10:11.00000 +t4 2001-01-01 10:10:11.0000 +t3 2001-01-01 10:10:11.000 +t2 2001-01-01 10:10:11.00 +t1 2001-01-01 10:10:11.0 +t0 2001-01-01 10:10:11 +a 10:10:10.999994 +t6 2001-01-01 10:10:10.999994 +t5 2001-01-01 10:10:10.99999 +t4 2001-01-01 10:10:11.0000 +t3 2001-01-01 10:10:11.000 +t2 2001-01-01 10:10:11.00 +t1 2001-01-01 10:10:11.0 +t0 2001-01-01 10:10:11 +a 10:10:10.999949 +t6 2001-01-01 10:10:10.999949 +t5 2001-01-01 10:10:10.99995 +t4 2001-01-01 10:10:10.9999 +t3 2001-01-01 10:10:11.000 +t2 2001-01-01 10:10:11.00 +t1 2001-01-01 10:10:11.0 +t0 2001-01-01 10:10:11 +a 10:10:10.999499 +t6 2001-01-01 10:10:10.999499 +t5 2001-01-01 10:10:10.99950 +t4 2001-01-01 10:10:10.9995 +t3 2001-01-01 10:10:10.999 +t2 2001-01-01 10:10:11.00 +t1 2001-01-01 10:10:11.0 +t0 2001-01-01 10:10:11 +a 10:10:10.994999 +t6 2001-01-01 10:10:10.994999 +t5 2001-01-01 10:10:10.99500 +t4 2001-01-01 10:10:10.9950 +t3 2001-01-01 10:10:10.995 +t2 2001-01-01 10:10:10.99 +t1 2001-01-01 10:10:11.0 +t0 2001-01-01 10:10:11 +a 10:10:10.949999 +t6 2001-01-01 10:10:10.949999 +t5 2001-01-01 10:10:10.95000 +t4 2001-01-01 10:10:10.9500 +t3 2001-01-01 10:10:10.950 +t2 2001-01-01 10:10:10.95 +t1 2001-01-01 10:10:10.9 +t0 2001-01-01 10:10:11 +a 10:10:10.499999 +t6 2001-01-01 10:10:10.499999 +t5 2001-01-01 10:10:10.50000 +t4 2001-01-01 10:10:10.5000 +t3 2001-01-01 10:10:10.500 +t2 2001-01-01 10:10:10.50 +t1 2001-01-01 10:10:10.5 +t0 2001-01-01 10:10:10 +DROP TABLE t1; +SET timestamp=default; +# +# Testing rounding from DECIMAL to DATETIME(N) +# +CREATE TABLE t1 (a DECIMAL(30,6), +t6 DATETIME(6), t5 DATETIME(5), t4 DATETIME(4), +t3 DATETIME(3), t2 DATETIME(2), t1 DATETIME(1), +t0 DATETIME); +INSERT INTO t1 (a) VALUES (20010101101010.999999); +INSERT INTO t1 (a) VALUES (20010101101010.999994); +INSERT INTO t1 (a) VALUES (20010101101010.999949); +INSERT INTO t1 (a) VALUES (20010101101010.999499); +INSERT INTO t1 (a) VALUES (20010101101010.994999); +INSERT INTO t1 (a) VALUES (20010101101010.949999); +INSERT INTO t1 (a) VALUES (20010101101010.499999); +UPDATE t1 SET t0=a, t1=a, t2=a, t3=a, t4=a, t5=a, t6=a; +SELECT * FROM t1;; +a 20010101101010.999999 +t6 2001-01-01 10:10:10.999999 +t5 2001-01-01 10:10:11.00000 +t4 2001-01-01 10:10:11.0000 +t3 2001-01-01 10:10:11.000 +t2 2001-01-01 10:10:11.00 +t1 2001-01-01 10:10:11.0 +t0 2001-01-01 10:10:11 +a 20010101101010.999994 +t6 2001-01-01 10:10:10.999994 +t5 2001-01-01 10:10:10.99999 +t4 2001-01-01 10:10:11.0000 +t3 2001-01-01 10:10:11.000 +t2 2001-01-01 10:10:11.00 +t1 2001-01-01 10:10:11.0 +t0 2001-01-01 10:10:11 +a 20010101101010.999949 +t6 2001-01-01 10:10:10.999949 +t5 2001-01-01 10:10:10.99995 +t4 2001-01-01 10:10:10.9999 +t3 2001-01-01 10:10:11.000 +t2 2001-01-01 10:10:11.00 +t1 2001-01-01 10:10:11.0 +t0 2001-01-01 10:10:11 +a 20010101101010.999499 +t6 2001-01-01 10:10:10.999499 +t5 2001-01-01 10:10:10.99950 +t4 2001-01-01 10:10:10.9995 +t3 2001-01-01 10:10:10.999 +t2 2001-01-01 10:10:11.00 +t1 2001-01-01 10:10:11.0 +t0 2001-01-01 10:10:11 +a 20010101101010.994999 +t6 2001-01-01 10:10:10.994999 +t5 2001-01-01 10:10:10.99500 +t4 2001-01-01 10:10:10.9950 +t3 2001-01-01 10:10:10.995 +t2 2001-01-01 10:10:10.99 +t1 2001-01-01 10:10:11.0 +t0 2001-01-01 10:10:11 +a 20010101101010.949999 +t6 2001-01-01 10:10:10.949999 +t5 2001-01-01 10:10:10.95000 +t4 2001-01-01 10:10:10.9500 +t3 2001-01-01 10:10:10.950 +t2 2001-01-01 10:10:10.95 +t1 2001-01-01 10:10:10.9 +t0 2001-01-01 10:10:11 +a 20010101101010.499999 +t6 2001-01-01 10:10:10.499999 +t5 2001-01-01 10:10:10.50000 +t4 2001-01-01 10:10:10.5000 +t3 2001-01-01 10:10:10.500 +t2 2001-01-01 10:10:10.50 +t1 2001-01-01 10:10:10.5 +t0 2001-01-01 10:10:10 +DROP TABLE t1; +# +# Testing truncation warnings +# +CREATE TABLE t1 (a DATETIME(6)); +INSERT INTO t1 VALUES ('0000-00-00 00:00:00.111111 xxx'); +ERROR 22007: Incorrect datetime value: '0000-00-00 00:00:00.111111 xxx' for column 'a' at row 1 +INSERT INTO t1 VALUES ('0000-00-00 00:00:00.1111110'); +ERROR 22007: Incorrect datetime value: '0000-00-00 00:00:00.1111110' for column 'a' at row 1 +INSERT INTO t1 VALUES ('0000-00-00 00:00:00.1111111'); +ERROR 22007: Incorrect datetime value: '0000-00-00 00:00:00.1111111' for column 'a' at row 1 +INSERT INTO t1 VALUES ('0000-00-00 00:00:00.1111114'); +ERROR 22007: Incorrect datetime value: '0000-00-00 00:00:00.1111114' for column 'a' at row 1 +INSERT INTO t1 VALUES ('0000-00-00 00:00:00.1111115'); +ERROR 22007: Incorrect datetime value: '0000-00-00 00:00:00.1111115' for column 'a' at row 1 +INSERT INTO t1 VALUES ('0000-00-00 00:00:00.1111119'); +ERROR 22007: Incorrect datetime value: '0000-00-00 00:00:00.1111119' for column 'a' at row 1 +SELECT * FROM t1; +a +DELETE FROM t1; +INSERT INTO t1 VALUES (0.1111110); +ERROR 22007: Incorrect datetime value: '0.1111110' for column 'a' at row 1 +INSERT INTO t1 VALUES (0.1111111); +ERROR 22007: Incorrect datetime value: '0.1111111' for column 'a' at row 1 +INSERT INTO t1 VALUES (0.1111114); +ERROR 22007: Incorrect datetime value: '0.1111114' for column 'a' at row 1 +INSERT INTO t1 VALUES (0.1111115); +ERROR 22007: Incorrect datetime value: '0.1111115' for column 'a' at row 1 +INSERT INTO t1 VALUES (0.1111119); +ERROR 22007: Incorrect datetime value: '0.1111119' for column 'a' at row 1 +SELECT * FROM t1; +a +DELETE FROM t1; +INSERT INTO t1 VALUES (0.1111110e0); +ERROR 22007: Incorrect datetime value: '0.111111' for column 'a' at row 1 +INSERT INTO t1 VALUES (0.1111111e0); +ERROR 22007: Incorrect datetime value: '0.1111111' for column 'a' at row 1 +INSERT INTO t1 VALUES (0.1111114e0); +ERROR 22007: Incorrect datetime value: '0.1111114' for column 'a' at row 1 +INSERT INTO t1 VALUES (0.1111115e0); +ERROR 22007: Incorrect datetime value: '0.1111115' for column 'a' at row 1 +INSERT INTO t1 VALUES (0.1111119e0); +ERROR 22007: Incorrect datetime value: '0.1111119' for column 'a' at row 1 +SELECT * FROM t1; +a +DROP TABLE t1; +# +# Testing implicit CAST from TIME to DATETIME +# +SET @@timestamp=UNIX_TIMESTAMP('2008-01-03 10:20:30.1'); +CREATE TABLE t1 (a DATETIME(6)); +INSERT INTO t1 VALUES (CURRENT_TIME), (CURRENT_TIME(6)); +INSERT INTO t1 VALUES (TIME'08:00:00.123456'), (TIME'240:00:00.000001'); +INSERT INTO t1 VALUES (TIME'-10:00:00.000001'), (TIME'-240:00:00.000001'); +SELECT * FROM t1; +a +2008-01-03 10:20:30.000000 +2008-01-03 10:20:30.100000 +2008-01-03 08:00:00.123456 +2008-01-13 00:00:00.000001 +2008-01-02 13:59:59.999999 +2007-12-23 23:59:59.999999 +DROP TABLE t1; +SET @@timestamp=default; +# +# Testing IN +# +CREATE TABLE t1 (a DATETIME(6)); +INSERT INTO t1 VALUES ('0000-00-00 00:00:00.000000'); +ERROR 22007: Incorrect datetime value: '0000-00-00 00:00:00.000000' for column 'a' at row 1 +INSERT INTO t1 VALUES ('0000-00-00 00:00:00.000001'); +ERROR 22007: Incorrect datetime value: '0000-00-00 00:00:00.000001' for column 'a' at row 1 +INSERT INTO t1 VALUES ('2000-01-01 00:00:00.000000'); +INSERT INTO t1 VALUES ('2000-01-01 00:00:00.000001'); +INSERT INTO t1 VALUES ('2000-01-01 00:00:00.000002'); +INSERT INTO t1 VALUES ('2000-01-01 10:00:00.000000'); +INSERT INTO t1 VALUES ('2000-01-01 10:00:00.000001'); +INSERT INTO t1 VALUES ('2000-01-01 10:00:00.000002'); +INSERT INTO t1 VALUES ('2000-01-01 23:00:00.000000'); +INSERT INTO t1 VALUES ('2000-01-01 23:00:00.000001'); +INSERT INTO t1 VALUES ('2000-01-01 23:00:00.000002'); +SELECT * FROM t1 WHERE a IN ('2000-01-01 00:00:00', '0000-00-00 00:00:00.000001', '2000-01-01 23:00:00.000002'); +a +2000-01-01 00:00:00.000000 +2000-01-01 23:00:00.000002 +Warnings: +Warning 1292 Incorrect datetime value: '0000-00-00 00:00:00.000001' for column 'a' at row 1 +SELECT * FROM t1 WHERE a IN (0, 20000101000000, 20000101230000); +a +2000-01-01 00:00:00.000000 +2000-01-01 23:00:00.000000 +SELECT * FROM t1 WHERE a IN (0.000001, 20000101000000.000001, 20000101230000.000001); +a +2000-01-01 00:00:00.000001 +2000-01-01 23:00:00.000001 +SELECT * FROM t1 WHERE a IN (0e0, 0.000001e0); +a +# +# Testing Item_temporal_with_ref::print +# +EXPLAIN EXTENDED SELECT * FROM t1 WHERE a IN (0.000001,0); +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 9 22.22 Using where +Warnings: +Warning 1681 'EXTENDED' is deprecated and will be removed in a future release. +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a` from `test`.`t1` where (`test`.`t1`.`a` in ('0000-00-00 00:00:00.000001','0000-00-00 00:00:00.000000')) +# +# Testing IN with index: involves field->store_packed() +# +ALTER TABLE t1 ADD KEY(a); +SELECT * FROM t1 WHERE a IN ('2000-01-01 00:00:00', '0000-00-00 00:00:00.000001','2000-01-01 23:00:00.000002'); +a +2000-01-01 00:00:00.000000 +2000-01-01 23:00:00.000002 +Warnings: +Warning 1292 Incorrect datetime value: '0000-00-00 00:00:00.000001' for column 'a' at row 1 +SELECT * FROM t1 WHERE a IN (0, 20000101000000, 20000101230000); +a +2000-01-01 00:00:00.000000 +2000-01-01 23:00:00.000000 +SELECT * FROM t1 WHERE a IN (0.000001, 20000101000000.000001, 20000101230000.000001); +a +2000-01-01 00:00:00.000001 +2000-01-01 23:00:00.000001 +SELECT * FROM t1 WHERE a IN (0e0, 0.000001e0); +a +DROP TABLE t1; +# +# Testing CREATE TABLE LIKE +# +CREATE TABLE t1 (a DATETIME(6)); +CREATE TABLE t2 LIKE t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` datetime(6) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t2, t1; +# +# Testing CREATE TABLE .. SELECT +# +CREATE TABLE t1 (a DATETIME(6)); +CREATE TABLE t2 AS SELECT * FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` datetime(6) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t2, t1; +# +# Testing JOIN between DATETIME(6) and DATETIME(6) +# +CREATE TABLE t1 (a DATETIME(6)); +INSERT INTO t1 VALUES ('2000-01-01 00:01:03.1'); +INSERT INTO t1 VALUES ('2000-01-01 00:01:03.12'); +INSERT INTO t1 VALUES ('2000-01-01 00:01:03.123'); +INSERT INTO t1 VALUES ('2000-01-01 00:01:03.1234'); +INSERT INTO t1 VALUES ('2000-01-01 00:01:03.12345'); +INSERT INTO t1 VALUES ('2000-01-01 00:01:03.123456'); +CREATE TABLE t2 (a DATETIME(6)); +INSERT INTO t2 SELECT * FROM t1; +SELECT * FROM t1, t2 WHERE t1.a=t2.a ORDER BY t1.a, t2.a; +a a +2000-01-01 00:01:03.100000 2000-01-01 00:01:03.100000 +2000-01-01 00:01:03.120000 2000-01-01 00:01:03.120000 +2000-01-01 00:01:03.123000 2000-01-01 00:01:03.123000 +2000-01-01 00:01:03.123400 2000-01-01 00:01:03.123400 +2000-01-01 00:01:03.123450 2000-01-01 00:01:03.123450 +2000-01-01 00:01:03.123456 2000-01-01 00:01:03.123456 +ALTER TABLE t1 ADD KEY(a); +SELECT * FROM t1, t2 WHERE t1.a=t2.a ORDER BY t1.a, t2.a; +a a +2000-01-01 00:01:03.100000 2000-01-01 00:01:03.100000 +2000-01-01 00:01:03.120000 2000-01-01 00:01:03.120000 +2000-01-01 00:01:03.123000 2000-01-01 00:01:03.123000 +2000-01-01 00:01:03.123400 2000-01-01 00:01:03.123400 +2000-01-01 00:01:03.123450 2000-01-01 00:01:03.123450 +2000-01-01 00:01:03.123456 2000-01-01 00:01:03.123456 +ALTER TABLE t2 ADD KEY(a); +SELECT * FROM t1, t2 WHERE t1.a=t2.a ORDER BY t1.a, t2.a; +a a +2000-01-01 00:01:03.100000 2000-01-01 00:01:03.100000 +2000-01-01 00:01:03.120000 2000-01-01 00:01:03.120000 +2000-01-01 00:01:03.123000 2000-01-01 00:01:03.123000 +2000-01-01 00:01:03.123400 2000-01-01 00:01:03.123400 +2000-01-01 00:01:03.123450 2000-01-01 00:01:03.123450 +2000-01-01 00:01:03.123456 2000-01-01 00:01:03.123456 +ALTER TABLE t1 DROP KEY a; +SELECT * FROM t1, t2 WHERE t1.a=t2.a ORDER BY t1.a, t2.a; +a a +2000-01-01 00:01:03.100000 2000-01-01 00:01:03.100000 +2000-01-01 00:01:03.120000 2000-01-01 00:01:03.120000 +2000-01-01 00:01:03.123000 2000-01-01 00:01:03.123000 +2000-01-01 00:01:03.123400 2000-01-01 00:01:03.123400 +2000-01-01 00:01:03.123450 2000-01-01 00:01:03.123450 +2000-01-01 00:01:03.123456 2000-01-01 00:01:03.123456 +DROP TABLE t2; +DROP TABLE t1; +# +# Testing JOIN between DATETIME and DATETIME(6) +# +CREATE TABLE t1 (a DATETIME(6)); +INSERT INTO t1 VALUES ('0000-00-00 23:59:59.000000'); +ERROR 22007: Incorrect datetime value: '0000-00-00 23:59:59.000000' for column 'a' at row 1 +INSERT INTO t1 VALUES ('2000-01-01 10:11:12.000000'); +INSERT INTO t1 VALUES ('2000-01-01 10:11:12.000001'); +INSERT INTO t1 VALUES ('2000-01-01 10:11:12.000002'); +INSERT INTO t1 VALUES ('2000-01-01 10:11:13.000000'); +INSERT INTO t1 VALUES ('2000-01-01 10:11:13.000001'); +INSERT INTO t1 VALUES ('2000-01-01 10:11:13.000002'); +INSERT INTO t1 VALUES ('2000-01-01 23:59:59.999999'); +INSERT INTO t1 VALUES ('2000-01-01 23:59:59.000000'); +CREATE TABLE t2 (a DATETIME); +INSERT INTO t2 VALUES ('2000-01-01 10:11:12'); +INSERT INTO t2 VALUES ('2000-01-01 10:11:13'); +INSERT INTO t2 VALUES ('0000-00-00 23:59:59'); +ERROR 22007: Incorrect datetime value: '0000-00-00 23:59:59' for column 'a' at row 1 +INSERT INTO t2 VALUES ('2000-01-01 23:59:59'); +SELECT * FROM t1, t2 WHERE t1.a=t2.a ORDER BY t1.a, t2.a; +a a +2000-01-01 10:11:12.000000 2000-01-01 10:11:12 +2000-01-01 10:11:13.000000 2000-01-01 10:11:13 +2000-01-01 23:59:59.000000 2000-01-01 23:59:59 +ALTER TABLE t1 ADD KEY(a); +ALTER TABLE t2 ADD KEY(a); +SELECT * FROM t1, t2 WHERE t1.a=t2.a ORDER BY t1.a, t2.a; +a a +2000-01-01 10:11:12.000000 2000-01-01 10:11:12 +2000-01-01 10:11:13.000000 2000-01-01 10:11:13 +2000-01-01 23:59:59.000000 2000-01-01 23:59:59 +DROP TABLE t2, t1; +# +# Testing unique index +# +CREATE TABLE t1 (a DATETIME(6), UNIQUE(a)); +INSERT INTO t1 VALUES ('2000-01-01 00:01:02'); +INSERT INTO t1 VALUES ('2000-01-01 00:01:02.1'); +INSERT INTO t1 VALUES ('2000-01-01 00:01:02.12'); +INSERT INTO t1 VALUES ('2000-01-01 00:01:02.123'); +INSERT INTO t1 VALUES ('2000-01-01 00:01:02.1234'); +INSERT INTO t1 VALUES ('2000-01-01 00:01:02.12345'); +INSERT INTO t1 VALUES ('2000-01-01 00:01:02.12345'); +ERROR 23000: Duplicate entry '2000-01-01 00:01:02.123450' for key 'a' +DROP TABLE t1; +# +# Testing GROUP BY +# +CREATE TABLE t1 (a DATETIME(6)); +INSERT INTO t1 VALUES ('2000-01-01 00:01:02'); +INSERT INTO t1 VALUES ('2000-01-01 00:01:02.0'); +INSERT INTO t1 VALUES ('2000-01-01 00:01:02.01'); +INSERT INTO t1 VALUES ('2000-01-01 00:01:02.010'); +INSERT INTO t1 VALUES ('2000-01-01 00:01:02.02'); +INSERT INTO t1 VALUES ('2000-01-01 00:01:02.020'); +SELECT a, COUNT(*) FROM t1 GROUP BY a; +a COUNT(*) +2000-01-01 00:01:02.000000 2 +2000-01-01 00:01:02.010000 2 +2000-01-01 00:01:02.020000 2 +DROP TABLE t1; +# +# Testing MIN() and MAX() +# +CREATE TABLE t1 (a INT, b DATETIME(6)); +INSERT INTO t1 VALUES (1, '2001-01-01 00:01:02.000001'); +INSERT INTO t1 VALUES (1, '2001-01-01 00:01:02'); +INSERT INTO t1 VALUES (2, '2001-01-01 10:01:02'); +INSERT INTO t1 VALUES (2, '2001-01-01 10:01:02.000001'); +INSERT INTO t1 VALUES (3, '2001-01-01 10:11:02'); +INSERT INTO t1 VALUES (3, '2001-01-01 10:11:02.000001'); +SELECT MIN(b), MAX(b) FROM t1; +MIN(b) MAX(b) +2001-01-01 00:01:02.000000 2001-01-01 10:11:02.000001 +SELECT a, MIN(b), MAX(b) FROM t1 GROUP BY a; +a MIN(b) MAX(b) +1 2001-01-01 00:01:02.000000 2001-01-01 00:01:02.000001 +2 2001-01-01 10:01:02.000000 2001-01-01 10:01:02.000001 +3 2001-01-01 10:11:02.000000 2001-01-01 10:11:02.000001 +DROP TABLE t1; +# +# Testing MIN(DATETIME) and MAX(DATETIME) in arithmetic expressions and CAST +# This covers Item_sum_hybrid::val_int(), val_real(), val_decimal() +# +CREATE TABLE t1 +( +t0 DATETIME, +t1 DATETIME(1), t2 DATETIME(2), t3 DATETIME(3), +t4 DATETIME(4), t5 DATETIME(5), t6 DATETIME(6) +); +INSERT INTO t1 VALUES +( +'2001-01-01 10:10:10', +'2001-01-01 10:10:10.9', '2001-01-01 10:10:10.99', '2001-01-01 10:10:10.999', +'2001-01-01 10:10:10.9999', '2001-01-01 10:10:10.99999', '2001-01-01 10:10:10.999999' +); +CREATE TABLE t2 AS +SELECT +MAX(t0) + 1, +MAX(t1) + 1, MAX(t2) + 1, MAX(t3) + 1, +MAX(t4) + 1, MAX(t5) + 1, MAX(t6) + 1 +FROM t1; +SHOW COLUMNS FROM t2; +Field Type Null Key Default Extra +MAX(t0) + 1 bigint(16) YES NULL +MAX(t1) + 1 decimal(16,1) YES NULL +MAX(t2) + 1 decimal(17,2) YES NULL +MAX(t3) + 1 decimal(18,3) YES NULL +MAX(t4) + 1 decimal(19,4) YES NULL +MAX(t5) + 1 decimal(20,5) YES NULL +MAX(t6) + 1 decimal(21,6) YES NULL +SELECT * FROM t2; +MAX(t0) + 1 MAX(t1) + 1 MAX(t2) + 1 MAX(t3) + 1 MAX(t4) + 1 MAX(t5) + 1 MAX(t6) + 1 +20010101101011 20010101101011.9 20010101101011.99 20010101101011.999 20010101101011.9999 20010101101011.99999 20010101101011.999999 +DROP TABLE t2; +CREATE TABLE t2 AS +SELECT +MAX(t0) + 1.1, +MAX(t1) + 1.1, MAX(t2) + 1.1, MAX(t3) + 1.1, +MAX(t4) + 1.1, MAX(t5) + 1.1, MAX(t6) + 1.1 +FROM t1; +SHOW COLUMNS FROM t2; +Field Type Null Key Default Extra +MAX(t0) + 1.1 decimal(16,1) YES NULL +MAX(t1) + 1.1 decimal(16,1) YES NULL +MAX(t2) + 1.1 decimal(17,2) YES NULL +MAX(t3) + 1.1 decimal(18,3) YES NULL +MAX(t4) + 1.1 decimal(19,4) YES NULL +MAX(t5) + 1.1 decimal(20,5) YES NULL +MAX(t6) + 1.1 decimal(21,6) YES NULL +SELECT * FROM t2; +MAX(t0) + 1.1 MAX(t1) + 1.1 MAX(t2) + 1.1 MAX(t3) + 1.1 MAX(t4) + 1.1 MAX(t5) + 1.1 MAX(t6) + 1.1 +20010101101011.1 20010101101012.0 20010101101012.09 20010101101012.099 20010101101012.0999 20010101101012.09999 20010101101012.099999 +DROP TABLE t2; +CREATE TABLE t2 AS +SELECT +MAX(t0) + 1.0e0, +MAX(t1) + 1.0e0, MAX(t2) + 1.0e0, MAX(t3) + 1.0e0, +MAX(t4) + 1.0e0, MAX(t5) + 1.0e0, MAX(t6) + 1.0e0 +FROM t1; +SHOW COLUMNS FROM t2; +Field Type Null Key Default Extra +MAX(t0) + 1.0e0 double YES NULL +MAX(t1) + 1.0e0 double YES NULL +MAX(t2) + 1.0e0 double YES NULL +MAX(t3) + 1.0e0 double YES NULL +MAX(t4) + 1.0e0 double YES NULL +MAX(t5) + 1.0e0 double YES NULL +MAX(t6) + 1.0e0 double YES NULL +DROP TABLE t2; +SELECT +MAX(t0) + 1, +MAX(t1) + 1, MAX(t2) + 1, MAX(t3) + 1, +MAX(t4) + 1, MAX(t5) + 1, MAX(t6) + 1 +FROM t1; +MAX(t0) + 1 MAX(t1) + 1 MAX(t2) + 1 MAX(t3) + 1 MAX(t4) + 1 MAX(t5) + 1 MAX(t6) + 1 +20010101101011 20010101101011.9 20010101101011.99 20010101101011.999 20010101101011.9999 20010101101011.99999 20010101101011.999999 +SELECT +CAST(MAX(t0) AS SIGNED), +CAST(MAX(t1) AS SIGNED), CAST(MAX(t2) AS SIGNED), CAST(MAX(t3) AS SIGNED), +CAST(MAX(t4) AS SIGNED), CAST(MAX(t5) AS SIGNED), CAST(MAX(t6) AS SIGNED) +FROM t1; +CAST(MAX(t0) AS SIGNED) CAST(MAX(t1) AS SIGNED) CAST(MAX(t2) AS SIGNED) CAST(MAX(t3) AS SIGNED) CAST(MAX(t4) AS SIGNED) CAST(MAX(t5) AS SIGNED) CAST(MAX(t6) AS SIGNED) +20010101101010 20010101101011 20010101101011 20010101101011 20010101101011 20010101101011 20010101101011 +DROP TABLE t1; +# +# Testing LEAST +# +SELECT LEAST(TIMESTAMP'2001-01-01 00:00:00.1', TIMESTAMP'2001-01-01 00:00:00.2'); +LEAST(TIMESTAMP'2001-01-01 00:00:00.1', TIMESTAMP'2001-01-01 00:00:00.2') +2001-01-01 00:00:00.1 +SELECT LEAST(TIMESTAMP'2001-01-01 00:00:00.1', TIMESTAMP'2001-01-01 00:00:00.2') + 1; +LEAST(TIMESTAMP'2001-01-01 00:00:00.1', TIMESTAMP'2001-01-01 00:00:00.2') + 1 +20010101000001.1 +SELECT LEAST(TIMESTAMP'2001-01-01 00:00:00.1', TIMESTAMP'2001-01-01 00:00:00.2') + 1.0; +LEAST(TIMESTAMP'2001-01-01 00:00:00.1', TIMESTAMP'2001-01-01 00:00:00.2') + 1.0 +20010101000001.1 +SELECT LEAST(TIMESTAMP'2001-01-01 00:00:00.1', TIMESTAMP'2001-01-01 00:00:00.2') + 1e0; +LEAST(TIMESTAMP'2001-01-01 00:00:00.1', TIMESTAMP'2001-01-01 00:00:00.2') + 1e0 +20010101000001.1 +SELECT LEAST(CAST('2001-01-01 00:00:00.1' as DATETIME(6)), '2001-01-02 00:00:00.1') AS a; +a +2001-01-01 00:00:00.100000 +SELECT LEAST(CAST('2001-01-01 00:00:00.1' as DATETIME(6)), '2001-01-02 00:00:00.1') + 0 AS a; +a +20010101000000.1 +SELECT CAST(LEAST(CAST('2001-01-01 00:00:00.1' as DATETIME(6)), '2001-01-02 00:00:00.1') AS SIGNED) AS a; +a +20010101000000 +SELECT CAST(LEAST(CAST('2001-01-01 00:00:00.1' as DATETIME(6)), '2001-01-02 00:00:00.1') AS DECIMAL(30,6)) AS a; +a +20010101000000.100000 +SELECT GREATEST(CAST('2001-01-01 00:00:00.1' as DATETIME(6)), '2001-01-02 00:00:00.1') AS a; +a +2001-01-02 00:00:00.1 +SELECT GREATEST(CAST('2001-01-01 00:00:00.1' as DATETIME(6)), '2001-01-02 00:00:00.1') + 0 AS a; +a +20010102000000.1 +SELECT CAST(GREATEST(CAST('2001-01-01 00:00:00.1' as DATETIME(6)), '2001-01-02 00:00:00.1') AS SIGNED) AS a; +a +20010102000000 +SELECT CAST(GREATEST(CAST('2001-01-01 00:00:00.1' as DATETIME(6)), '2001-01-02 00:00:00.1') AS DECIMAL(30,6)) AS a; +a +20010102000000.100000 +CREATE TABLE t1 AS SELECT +LEAST(CAST('2001-01-01 00:00:00' AS DATETIME(1)), +CAST('2001-01-01 00:00:00' AS DATETIME(2))) AS l, +GREATEST(CAST('2001-01-01 00:00:00' AS DATETIME(1)), +CAST('2001-01-01 00:00:00' AS DATETIME(2))) AS g; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `l` datetime(2) DEFAULT NULL, + `g` datetime(2) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t1; +# +# Testing INSERT, MAX and MIN values +# +CREATE TABLE t1 (a DATETIME(6)); +INSERT INTO t1 VALUES ('9999-12-31 23:59:59'); +INSERT INTO t1 VALUES ('9999-12-31 23:59:59.1'); +INSERT INTO t1 VALUES ('9999-12-31 24:00:00'); +ERROR 22007: Incorrect datetime value: '9999-12-31 24:00:00' for column 'a' at row 1 +SELECT * FROM t1; +a +9999-12-31 23:59:59.000000 +9999-12-31 23:59:59.100000 +DROP TABLE t1; +# +# Testing integer INSERT values +# +CREATE TABLE t1 (a DATETIME(6)); +INSERT INTO t1 VALUES (19990102); +INSERT INTO t1 VALUES (19990102112233); +INSERT INTO t1 VALUES (100000101112233); +ERROR 22007: Incorrect datetime value: '100000101112233' for column 'a' at row 1 +INSERT INTO t1 VALUES (0); +ERROR 22007: Incorrect datetime value: '0' for column 'a' at row 1 +INSERT INTO t1 VALUES (-1); +ERROR 22007: Incorrect datetime value: '-1' for column 'a' at row 1 +SELECT * FROM t1; +a +1999-01-02 00:00:00.000000 +1999-01-02 11:22:33.000000 +DROP TABLE t1; +# +# Testing decimal INSERT values +# +CREATE TABLE t1 (a DATETIME(6)); +INSERT INTO t1 VALUES (20010101223344.4); +INSERT INTO t1 VALUES (20010101223344.45); +INSERT INTO t1 VALUES (20010101223344.456); +INSERT INTO t1 VALUES (20010101223344.4567); +INSERT INTO t1 VALUES (20010101223344.45678); +INSERT INTO t1 VALUES (20010101223344.456789); +INSERT INTO t1 VALUES (2001010120203.4567894); +INSERT INTO t1 VALUES (2001010120203.4567895); +INSERT INTO t1 VALUES (2001010120203.4567896); +INSERT INTO t1 VALUES (2001010120203.456789678); +INSERT INTO t1 VALUES (200101018385959.000000); +ERROR 22007: Incorrect datetime value: '200101018385959.000000' for column 'a' at row 1 +INSERT INTO t1 VALUES (-200101018385959.000000); +ERROR 22007: Incorrect datetime value: '-200101018385959.000000' for column 'a' at row 1 +SELECT * FROM t1; +a +2001-01-01 22:33:44.400000 +2001-01-01 22:33:44.450000 +2001-01-01 22:33:44.456000 +2001-01-01 22:33:44.456700 +2001-01-01 22:33:44.456780 +2001-01-01 22:33:44.456789 +0200-10-10 12:02:03.456789 +0200-10-10 12:02:03.456790 +0200-10-10 12:02:03.456790 +0200-10-10 12:02:03.456790 +DROP TABLE t1; +# +# Testing double INSERT values +# +CREATE TABLE t1 (a DATETIME(6)); +INSERT INTO t1 VALUES (112.233e-3); +ERROR 22007: Incorrect datetime value: '0.112233' for column 'a' at row 1 +INSERT INTO t1 VALUES (112.223e-2); +ERROR 22007: Incorrect datetime value: '1.12223' for column 'a' at row 1 +INSERT INTO t1 VALUES (112.233e-1); +ERROR 22007: Incorrect datetime value: '11.2233' for column 'a' at row 1 +INSERT INTO t1 VALUES (112.233e0); +ERROR 22007: Incorrect datetime value: '112.233' for column 'a' at row 1 +INSERT INTO t1 VALUES (112.233e1); +ERROR 22007: Incorrect datetime value: '1122.33' for column 'a' at row 1 +INSERT INTO t1 VALUES (112.233e2); +ERROR 22007: Incorrect datetime value: '11223.3' for column 'a' at row 1 +INSERT INTO t1 VALUES (112.233e3); +ERROR 22007: Incorrect datetime value: '112233' for column 'a' at row 1 +INSERT INTO t1 VALUES (112.233e4); +ERROR 22007: Incorrect datetime value: '1122330' for column 'a' at row 1 +INSERT INTO t1 VALUES (-123.456e0); +ERROR 22007: Incorrect datetime value: '-123.456' for column 'a' at row 1 +SELECT * FROM t1; +a +DROP TABLE t1; +# +# Testing UPDATE between DATETIME(6) and DATETIME/BIGINT/DECIMAL/DOUBLE +# +CREATE TABLE t1 (t0 DATETIME, t6 DATETIME(6), i BIGINT, d DECIMAL(20,6), f DOUBLE); +INSERT INTO t1 (t0) VALUES ('1971-01-01 11:22:33'); +UPDATE t1 SET t6=t0, i=t0, d=t0, f=t0; +SELECT * FROM t1; +t0 t6 i d f +1971-01-01 11:22:33 1971-01-01 11:22:33.000000 19710101112233 19710101112233.000000 19710101112233 +UPDATE t1 SET t6='1971-01-01 11:22:33.1'; +UPDATE t1 SET t0=t6, i=t6, d=t6, f=t6; +SELECT * FROM t1; +t0 t6 i d f +1971-01-01 11:22:33 1971-01-01 11:22:33.100000 19710101112233 19710101112233.100000 19710101112233.1 +UPDATE t1 SET i=20000101112233, d=20001010112233.1, f=00001010112233.1; +UPDATE t1 SET t6=i; +SELECT t6 FROM t1; +t6 +2000-01-01 11:22:33.000000 +UPDATE t1 SET t6=d; +SELECT t6 FROM t1; +t6 +2000-10-10 11:22:33.100000 +UPDATE t1 SET t6=f; +SELECT t6 FROM t1; +t6 +2000-10-10 11:22:33.100000 +DROP TABLE t1; +# +# Testing JOIN with comparison between DATETIME(6) and DATE +# +CREATE TABLE t1 (a DATETIME(6)); +INSERT INTO t1 VALUES ('2000-01-01 00:00:00.000000'); +INSERT INTO t1 VALUES ('2000-01-01 00:00:00.000001'); +INSERT INTO t1 VALUES ('2000-01-02 00:00:00.000000'); +CREATE TABLE t2 (a DATE); +INSERT INTO t2 VALUES ('2000-01-01'); +INSERT INTO t2 VALUES ('2000-01-02'); +SELECT * FROM t1, t2 WHERE t1.a=t2.a ORDER BY t1.a, t2.a; +a a +2000-01-01 00:00:00.000000 2000-01-01 +2000-01-02 00:00:00.000000 2000-01-02 +ALTER TABLE t2 MODIFY a DATETIME(6); +SELECT * FROM t1, t2 WHERE t1.a=CAST(t2.a AS DATE) ORDER BY t1.a, t2.a; +a a +2000-01-01 00:00:00.000000 2000-01-01 00:00:00.000000 +2000-01-02 00:00:00.000000 2000-01-02 00:00:00.000000 +DROP TABLE t2; +DROP TABLE t1; +# +# Testing JOIN with comparison between DATETIME(6) and BIGINT +# +CREATE TABLE t1 (a DATETIME(6)); +INSERT INTO t1 VALUES ('2000-01-01 00:00:00'); +INSERT INTO t1 VALUES ('2000-01-01 11:22:33'); +INSERT INTO t1 VALUES ('2000-01-01 11:22:33.123'); +CREATE TABLE t2 (b BIGINT); +INSERT INTO t2 VALUES (20000101); +INSERT INTO t2 VALUES (20000101112233); +SELECT * FROM t1, t2 WHERE a=b; +a b +2000-01-01 11:22:33.000000 20000101112233 +DROP TABLE t1, t2; +# +# Testing JOIN with comparison between DATETIME(6) and DECIMAL(20,6) +# +CREATE TABLE t1 (a DATETIME(6)); +INSERT INTO t1 VALUES ('2001-01-01 11:22:33'); +INSERT INTO t1 VALUES ('2001-01-01 11:22:33.123'); +INSERT INTO t1 VALUES ('2001-01-01 11:22:33.123456'); +CREATE TABLE t2 (b DECIMAL(20,6)); +INSERT INTO t2 VALUES (20010101112233); +INSERT INTO t2 VALUES (20010101112233.123); +INSERT INTO t2 VALUES (20010101112233.123456); +SELECT * FROM t1, t2 WHERE a=b; +a b +2001-01-01 11:22:33.000000 20010101112233.000000 +2001-01-01 11:22:33.123000 20010101112233.123000 +2001-01-01 11:22:33.123456 20010101112233.123456 +DROP TABLE t1, t2; +# +# Testing JOIN with comparison between DATETIME(6) and DECIMAL(20,3) +# +CREATE TABLE t1 (a DATETIME(6)); +INSERT INTO t1 VALUES ('2001-01-01 11:22:33'); +INSERT INTO t1 VALUES ('2001-01-01 11:22:33.123'); +INSERT INTO t1 VALUES ('2001-01-01 11:22:33.123456'); +CREATE TABLE t2 (b DECIMAL(20,3)); +INSERT INTO t2 VALUES (20010101112233); +INSERT INTO t2 VALUES (20010101112233.123); +SELECT * FROM t1, t2 WHERE a=b; +a b +2001-01-01 11:22:33.000000 20010101112233.000 +2001-01-01 11:22:33.123000 20010101112233.123 +DROP TABLE t1, t2; +# +# Testing JOIN with comparison between DATETIME(6) and DOUBLE +# +CREATE TABLE t1 (a DATETIME(6)); +INSERT INTO t1 VALUES ('1971-01-01 11:22:33'); +INSERT INTO t1 VALUES ('1971-01-01 11:22:33.123'); +INSERT INTO t1 VALUES ('1971-01-01 11:22:33.123456'); +CREATE TABLE t2 (b DOUBLE); +INSERT INTO t2 VALUES (112233); +INSERT INTO t2 VALUES (112233.123); +INSERT INTO t2 VALUES (112233.123456); +SELECT * FROM t1, t2 WHERE a=b; +a b +DROP TABLE t1, t2; +# +# Testing JOIN with comparison between DATETIME(6) and VARCHAR +# +CREATE TABLE t1 (a DATETIME(6)); +INSERT INTO t1 VALUES ('2001-01-01 11:22:33'); +INSERT INTO t1 VALUES ('2001-01-01 11:22:33.123'); +CREATE TABLE t2 (b VARCHAR(64)); +INSERT INTO t2 VALUES ('2001-01-01 11:22:33.123'); +INSERT INTO t2 VALUES ('2001-01-01 11:22:33.1230'); +INSERT INTO t2 VALUES ('2001-01-01 11:22:33.12300'); +INSERT INTO t2 VALUES ('2001-01-01 11:22:33.123000'); +INSERT INTO t2 VALUES ('2001-01-01 11:22:33'); +INSERT INTO t2 VALUES ('2001-01-01 11:22:33.'); +INSERT INTO t2 VALUES ('2001-01-01 11:22:33.0'); +INSERT INTO t2 VALUES ('2001-01-01 11:22:33.00'); +INSERT INTO t2 VALUES ('2001-01-01 11:22:33.000'); +INSERT INTO t2 VALUES ('2001-01-01 11:22:33.0000'); +INSERT INTO t2 VALUES ('2001-01-01 11:22:33.00000'); +INSERT INTO t2 VALUES ('2001-01-01 11:22:33.000000'); +SELECT * FROM t1, t2 WHERE a=b ORDER BY BINARY a, BINARY b; +a b +2001-01-01 11:22:33.000000 2001-01-01 11:22:33 +2001-01-01 11:22:33.000000 2001-01-01 11:22:33. +2001-01-01 11:22:33.000000 2001-01-01 11:22:33.0 +2001-01-01 11:22:33.000000 2001-01-01 11:22:33.00 +2001-01-01 11:22:33.000000 2001-01-01 11:22:33.000 +2001-01-01 11:22:33.000000 2001-01-01 11:22:33.0000 +2001-01-01 11:22:33.000000 2001-01-01 11:22:33.00000 +2001-01-01 11:22:33.000000 2001-01-01 11:22:33.000000 +2001-01-01 11:22:33.123000 2001-01-01 11:22:33.123 +2001-01-01 11:22:33.123000 2001-01-01 11:22:33.1230 +2001-01-01 11:22:33.123000 2001-01-01 11:22:33.12300 +2001-01-01 11:22:33.123000 2001-01-01 11:22:33.123000 +ALTER TABLE t1 ADD KEY (a); +SELECT * FROM t1, t2 WHERE a=b ORDER BY BINARY a, BINARY b; +a b +2001-01-01 11:22:33.000000 2001-01-01 11:22:33 +2001-01-01 11:22:33.000000 2001-01-01 11:22:33. +2001-01-01 11:22:33.000000 2001-01-01 11:22:33.0 +2001-01-01 11:22:33.000000 2001-01-01 11:22:33.00 +2001-01-01 11:22:33.000000 2001-01-01 11:22:33.000 +2001-01-01 11:22:33.000000 2001-01-01 11:22:33.0000 +2001-01-01 11:22:33.000000 2001-01-01 11:22:33.00000 +2001-01-01 11:22:33.000000 2001-01-01 11:22:33.000000 +2001-01-01 11:22:33.123000 2001-01-01 11:22:33.123 +2001-01-01 11:22:33.123000 2001-01-01 11:22:33.1230 +2001-01-01 11:22:33.123000 2001-01-01 11:22:33.12300 +2001-01-01 11:22:33.123000 2001-01-01 11:22:33.123000 +ALTER TABLE t2 ADD KEY(b); +SELECT * FROM t1, t2 WHERE a=b ORDER BY BINARY a, BINARY b; +a b +2001-01-01 11:22:33.000000 2001-01-01 11:22:33 +2001-01-01 11:22:33.000000 2001-01-01 11:22:33. +2001-01-01 11:22:33.000000 2001-01-01 11:22:33.0 +2001-01-01 11:22:33.000000 2001-01-01 11:22:33.00 +2001-01-01 11:22:33.000000 2001-01-01 11:22:33.000 +2001-01-01 11:22:33.000000 2001-01-01 11:22:33.0000 +2001-01-01 11:22:33.000000 2001-01-01 11:22:33.00000 +2001-01-01 11:22:33.000000 2001-01-01 11:22:33.000000 +2001-01-01 11:22:33.123000 2001-01-01 11:22:33.123 +2001-01-01 11:22:33.123000 2001-01-01 11:22:33.1230 +2001-01-01 11:22:33.123000 2001-01-01 11:22:33.12300 +2001-01-01 11:22:33.123000 2001-01-01 11:22:33.123000 +ALTER TABLE t1 DROP KEY a; +SELECT * FROM t1, t2 WHERE a=b ORDER BY BINARY a, BINARY b; +a b +2001-01-01 11:22:33.000000 2001-01-01 11:22:33 +2001-01-01 11:22:33.000000 2001-01-01 11:22:33. +2001-01-01 11:22:33.000000 2001-01-01 11:22:33.0 +2001-01-01 11:22:33.000000 2001-01-01 11:22:33.00 +2001-01-01 11:22:33.000000 2001-01-01 11:22:33.000 +2001-01-01 11:22:33.000000 2001-01-01 11:22:33.0000 +2001-01-01 11:22:33.000000 2001-01-01 11:22:33.00000 +2001-01-01 11:22:33.000000 2001-01-01 11:22:33.000000 +2001-01-01 11:22:33.123000 2001-01-01 11:22:33.123 +2001-01-01 11:22:33.123000 2001-01-01 11:22:33.1230 +2001-01-01 11:22:33.123000 2001-01-01 11:22:33.12300 +2001-01-01 11:22:33.123000 2001-01-01 11:22:33.123000 +DROP TABLE t1, t2; +# +# Testing arithmetic with INT, DECIMAL, FLOAT +# +CREATE TABLE t1 (a DATETIME(6)); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000000'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000001'); +SELECT a, a + 0, a + 1, a + 1.0, a + 1e0 FROM t1; +a a + 0 a + 1 a + 1.0 a + 1e0 +2001-01-01 00:00:00.000000 20010101000000.000000 20010101000001.000000 20010101000001.000000 20010101000001 +2001-01-01 00:00:00.000001 20010101000000.000001 20010101000001.000001 20010101000001.000001 20010101000001 +CREATE TABLE t2 AS SELECT a + 1 AS i, a + 1.0 AS d, a + 1e0 AS f FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `i` decimal(21,6) DEFAULT NULL, + `d` decimal(21,6) DEFAULT NULL, + `f` double DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t1, t2; +# +# Testing that DATETIME behaves as INT/DECIMAL for numeric arithmetic +# +CREATE TABLE t1 (t0 DATETIME, t3 DATETIME(3), t6 DATETIME(6)); +CREATE TABLE t2 AS SELECT +t0 + 1, t3 + 1, t6 + 1, +t0 - 1, t3 - 1, t6 - 1, +t0 * 1, t3 * 1, t6 * 1, +t0 / 1, t3 / 1, t6 / 1, +TIMESTAMP'2001-01-01 10:10:10' + 1, +TIMESTAMP'2001-01-01 10:10:10.123' + 1, +TIMESTAMP'2001-01-01 10:10:10.123456' + 1, +TIMESTAMP'2001-01-01 10:10:10' - 1, +TIMESTAMP'2001-01-01 10:10:10.123' - 1, +TIMESTAMP'2001-01-01 10:10:10.123456' - 1, +TIMESTAMP'2001-01-01 10:10:10' * 1, +TIMESTAMP'2001-01-01 10:10:10.123' * 1, +TIMESTAMP'2001-01-01 10:10:10.123456' * 1, +TIMESTAMP'2001-01-01 10:10:10' / 1, +TIMESTAMP'2001-01-01 10:10:10.123' / 1, +TIMESTAMP'2001-01-01 10:10:10.123456' / 1 +FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `t0 + 1` bigint(16) DEFAULT NULL, + `t3 + 1` decimal(18,3) DEFAULT NULL, + `t6 + 1` decimal(21,6) DEFAULT NULL, + `t0 - 1` bigint(16) DEFAULT NULL, + `t3 - 1` decimal(18,3) DEFAULT NULL, + `t6 - 1` decimal(21,6) DEFAULT NULL, + `t0 * 1` bigint(16) DEFAULT NULL, + `t3 * 1` decimal(18,3) DEFAULT NULL, + `t6 * 1` decimal(21,6) DEFAULT NULL, + `t0 / 1` decimal(18,4) DEFAULT NULL, + `t3 / 1` decimal(21,7) DEFAULT NULL, + `t6 / 1` decimal(24,10) DEFAULT NULL, + `TIMESTAMP'2001-01-01 10:10:10' + 1` bigint(16) NOT NULL DEFAULT '0', + `TIMESTAMP'2001-01-01 10:10:10.123' + 1` decimal(18,3) NOT NULL DEFAULT '0.000', + `TIMESTAMP'2001-01-01 10:10:10.123456' + 1` decimal(21,6) NOT NULL DEFAULT '0.000000', + `TIMESTAMP'2001-01-01 10:10:10' - 1` bigint(16) NOT NULL DEFAULT '0', + `TIMESTAMP'2001-01-01 10:10:10.123' - 1` decimal(18,3) NOT NULL DEFAULT '0.000', + `TIMESTAMP'2001-01-01 10:10:10.123456' - 1` decimal(21,6) NOT NULL DEFAULT '0.000000', + `TIMESTAMP'2001-01-01 10:10:10' * 1` bigint(16) NOT NULL DEFAULT '0', + `TIMESTAMP'2001-01-01 10:10:10.123' * 1` decimal(18,3) NOT NULL DEFAULT '0.000', + `TIMESTAMP'2001-01-01 10:10:10.123456' * 1` decimal(21,6) NOT NULL DEFAULT '0.000000', + `TIMESTAMP'2001-01-01 10:10:10' / 1` decimal(18,4) DEFAULT NULL, + `TIMESTAMP'2001-01-01 10:10:10.123' / 1` decimal(21,7) DEFAULT NULL, + `TIMESTAMP'2001-01-01 10:10:10.123456' / 1` decimal(24,10) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t2; +DROP TABLE t1; +# +# Testing that DATETIME behaves as DECIMAL for SUM() and AVG() +# +SET @t='2010-01-01 00:11:12.123456'; +CREATE TABLE t1 (t0 DATETIME, t3 DATETIME(3), t6 DATETIME(6)); +INSERT INTO t1 VALUES (@t, @t, @t); +SELECT MIN(t0), MAX(t0), AVG(t0), SUM(t0) FROM t1; +MIN(t0) 2010-01-01 00:11:12 +MAX(t0) 2010-01-01 00:11:12 +AVG(t0) 20100101001112.0000 +SUM(t0) 20100101001112 +SELECT MIN(t3), MAX(t3), AVG(t3), SUM(t3) FROM t1; +MIN(t3) 2010-01-01 00:11:12.123 +MAX(t3) 2010-01-01 00:11:12.123 +AVG(t3) 20100101001112.1230000 +SUM(t3) 20100101001112.123 +SELECT MIN(t6), MAX(t6), AVG(t6), SUM(t6) FROM t1; +MIN(t6) 2010-01-01 00:11:12.123456 +MAX(t6) 2010-01-01 00:11:12.123456 +AVG(t6) 20100101001112.1234560000 +SUM(t6) 20100101001112.123456 +SET @t='2010-01-01 00:11:12.000000'; +INSERT INTO t1 VALUES (@t, @t, @t); +SELECT MIN(t0), MAX(t0), AVG(t0), SUM(t0) FROM t1; +MIN(t0) 2010-01-01 00:11:12 +MAX(t0) 2010-01-01 00:11:12 +AVG(t0) 20100101001112.0000 +SUM(t0) 40200202002224 +SELECT MIN(t3), MAX(t3), AVG(t3), SUM(t3) FROM t1; +MIN(t3) 2010-01-01 00:11:12.000 +MAX(t3) 2010-01-01 00:11:12.123 +AVG(t3) 20100101001112.0615000 +SUM(t3) 40200202002224.123 +SELECT MIN(t6), MAX(t6), AVG(t6), SUM(t6) FROM t1; +MIN(t6) 2010-01-01 00:11:12.000000 +MAX(t6) 2010-01-01 00:11:12.123456 +AVG(t6) 20100101001112.0617280000 +SUM(t6) 40200202002224.123456 +CREATE TABLE t2 AS SELECT +MIN(t0), MAX(t0), AVG(t0), SUM(t0), +MIN(t3), MAX(t3), AVG(t3), SUM(t3), +MIN(t6), MAX(t6), AVG(t6), SUM(t6) +FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `MIN(t0)` datetime DEFAULT NULL, + `MAX(t0)` datetime DEFAULT NULL, + `AVG(t0)` decimal(18,4) DEFAULT NULL, + `SUM(t0)` decimal(36,0) DEFAULT NULL, + `MIN(t3)` datetime(3) DEFAULT NULL, + `MAX(t3)` datetime(3) DEFAULT NULL, + `AVG(t3)` decimal(21,7) DEFAULT NULL, + `SUM(t3)` decimal(39,3) DEFAULT NULL, + `MIN(t6)` datetime(6) DEFAULT NULL, + `MAX(t6)` datetime(6) DEFAULT NULL, + `AVG(t6)` decimal(24,10) DEFAULT NULL, + `SUM(t6)` decimal(42,6) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t2; +DROP TABLE t1; +# +# Testing functions ADDTIME, SUBTIME, TIMESTAMP, TIMEDIFF, DATE_ADD/SUB +# +CREATE TABLE t1 (a DATETIME(6)); +INSERT INTO t1 VALUES ('1000-01-01 01:00:00.000000'); +INSERT INTO t1 VALUES ('1000-01-01 01:00:00.000001'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000000'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000001'); +INSERT INTO t1 VALUES ('2001-01-01 01:00:00.000000'); +INSERT INTO t1 VALUES ('2001-01-01 01:00:00.000001'); +SELECT ADDTIME(a, '00:00:00.000001') FROM t1 ORDER BY a; +ADDTIME(a, '00:00:00.000001') +1000-01-01 01:00:00.000001 +1000-01-01 01:00:00.000002 +2001-01-01 00:00:00.000001 +2001-01-01 00:00:00.000002 +2001-01-01 01:00:00.000001 +2001-01-01 01:00:00.000002 +SELECT ADDTIME(a, '10:00:00.000001') FROM t1 ORDER BY a; +ADDTIME(a, '10:00:00.000001') +1000-01-01 11:00:00.000001 +1000-01-01 11:00:00.000002 +2001-01-01 10:00:00.000001 +2001-01-01 10:00:00.000002 +2001-01-01 11:00:00.000001 +2001-01-01 11:00:00.000002 +SELECT ADDTIME(CAST(a AS DATETIME(0)), 100000) FROM t1 ORDER BY a; +ADDTIME(CAST(a AS DATETIME(0)), 100000) +1000-01-01 11:00:00 +1000-01-01 11:00:00 +2001-01-01 10:00:00 +2001-01-01 10:00:00 +2001-01-01 11:00:00 +2001-01-01 11:00:00 +SELECT ADDTIME(CAST(a AS DATETIME(0)), 100000.1) FROM t1 ORDER BY a; +ADDTIME(CAST(a AS DATETIME(0)), 100000.1) +1000-01-01 11:00:00.1 +1000-01-01 11:00:00.1 +2001-01-01 10:00:00.1 +2001-01-01 10:00:00.1 +2001-01-01 11:00:00.1 +2001-01-01 11:00:00.1 +SELECT a, ADDTIME(CAST(a AS DATETIME(0)), CAST('10:00:00' AS TIME(0))) FROM t1 ORDER BY a; +a ADDTIME(CAST(a AS DATETIME(0)), CAST('10:00:00' AS TIME(0))) +1000-01-01 01:00:00.000000 1000-01-01 11:00:00 +1000-01-01 01:00:00.000001 1000-01-01 11:00:00 +2001-01-01 00:00:00.000000 2001-01-01 10:00:00 +2001-01-01 00:00:00.000001 2001-01-01 10:00:00 +2001-01-01 01:00:00.000000 2001-01-01 11:00:00 +2001-01-01 01:00:00.000001 2001-01-01 11:00:00 +SELECT a, ADDTIME(CAST(a AS DATETIME(6)), CAST('10:00:00' AS TIME(0))) FROM t1 ORDER BY a; +a ADDTIME(CAST(a AS DATETIME(6)), CAST('10:00:00' AS TIME(0))) +1000-01-01 01:00:00.000000 1000-01-01 11:00:00.000000 +1000-01-01 01:00:00.000001 1000-01-01 11:00:00.000001 +2001-01-01 00:00:00.000000 2001-01-01 10:00:00.000000 +2001-01-01 00:00:00.000001 2001-01-01 10:00:00.000001 +2001-01-01 01:00:00.000000 2001-01-01 11:00:00.000000 +2001-01-01 01:00:00.000001 2001-01-01 11:00:00.000001 +SELECT a, ADDTIME(CAST(a AS DATETIME(0)), CAST('10:00:00' AS TIME(6))) FROM t1 ORDER BY a; +a ADDTIME(CAST(a AS DATETIME(0)), CAST('10:00:00' AS TIME(6))) +1000-01-01 01:00:00.000000 1000-01-01 11:00:00.000000 +1000-01-01 01:00:00.000001 1000-01-01 11:00:00.000000 +2001-01-01 00:00:00.000000 2001-01-01 10:00:00.000000 +2001-01-01 00:00:00.000001 2001-01-01 10:00:00.000000 +2001-01-01 01:00:00.000000 2001-01-01 11:00:00.000000 +2001-01-01 01:00:00.000001 2001-01-01 11:00:00.000000 +SELECT ADDTIME(a, a) FROM t1 ORDER BY a; +ADDTIME(a, a) +NULL +NULL +NULL +NULL +NULL +NULL +CREATE TABLE t2 AS SELECT +ADDTIME(a, '00:00:00.000001'), +ADDTIME(a, '10:00:00.000001'), +ADDTIME(CAST(a AS DATETIME(0)), 100000), +ADDTIME(CAST(a AS DATETIME(0)), 100000.1), +ADDTIME(CAST(a AS DATETIME(0)), CAST('10:00:00' AS TIME(0))), +ADDTIME(CAST(a AS DATETIME(6)), CAST('10:00:00' AS TIME(0))), +ADDTIME(CAST(a AS DATETIME(0)), CAST('10:00:00' AS TIME(6))) +FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `ADDTIME(a, '00:00:00.000001')` datetime(6) DEFAULT NULL, + `ADDTIME(a, '10:00:00.000001')` datetime(6) DEFAULT NULL, + `ADDTIME(CAST(a AS DATETIME(0)), 100000)` datetime DEFAULT NULL, + `ADDTIME(CAST(a AS DATETIME(0)), 100000.1)` datetime(1) DEFAULT NULL, + `ADDTIME(CAST(a AS DATETIME(0)), CAST('10:00:00' AS TIME(0)))` datetime DEFAULT NULL, + `ADDTIME(CAST(a AS DATETIME(6)), CAST('10:00:00' AS TIME(0)))` datetime(6) DEFAULT NULL, + `ADDTIME(CAST(a AS DATETIME(0)), CAST('10:00:00' AS TIME(6)))` datetime(6) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t2; +SELECT TIMESTAMP(a, '10:00:00') FROM t1; +TIMESTAMP(a, '10:00:00') +1000-01-01 11:00:00.000000 +1000-01-01 11:00:00.000001 +2001-01-01 10:00:00.000000 +2001-01-01 10:00:00.000001 +2001-01-01 11:00:00.000000 +2001-01-01 11:00:00.000001 +SELECT TIMESTAMP(CAST(a AS DATETIME(0)), CAST('00:00:00' AS TIME(0))) FROM t1; +TIMESTAMP(CAST(a AS DATETIME(0)), CAST('00:00:00' AS TIME(0))) +1000-01-01 01:00:00 +1000-01-01 01:00:00 +2001-01-01 00:00:00 +2001-01-01 00:00:00 +2001-01-01 01:00:00 +2001-01-01 01:00:00 +SELECT TIMESTAMP(CAST(a AS DATETIME(6)), CAST('00:00:00' AS TIME(0))) FROM t1; +TIMESTAMP(CAST(a AS DATETIME(6)), CAST('00:00:00' AS TIME(0))) +1000-01-01 01:00:00.000000 +1000-01-01 01:00:00.000001 +2001-01-01 00:00:00.000000 +2001-01-01 00:00:00.000001 +2001-01-01 01:00:00.000000 +2001-01-01 01:00:00.000001 +SELECT TIMESTAMP(CAST(a AS DATETIME(0)), CAST('00:00:00' AS TIME(6))) FROM t1; +TIMESTAMP(CAST(a AS DATETIME(0)), CAST('00:00:00' AS TIME(6))) +1000-01-01 01:00:00.000000 +1000-01-01 01:00:00.000000 +2001-01-01 00:00:00.000000 +2001-01-01 00:00:00.000000 +2001-01-01 01:00:00.000000 +2001-01-01 01:00:00.000000 +CREATE TABLE t2 AS SELECT +TIMESTAMP(a, '10:00:00'), +TIMESTAMP(CAST(a AS DATETIME(0)), CAST('00:00:00' AS TIME(0))), +TIMESTAMP(CAST(a AS DATETIME(6)), CAST('00:00:00' AS TIME(0))), +TIMESTAMP(CAST(a AS DATETIME(0)), CAST('00:00:00' AS TIME(6))) +FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `TIMESTAMP(a, '10:00:00')` datetime(6) DEFAULT NULL, + `TIMESTAMP(CAST(a AS DATETIME(0)), CAST('00:00:00' AS TIME(0)))` datetime DEFAULT NULL, + `TIMESTAMP(CAST(a AS DATETIME(6)), CAST('00:00:00' AS TIME(0)))` datetime(6) DEFAULT NULL, + `TIMESTAMP(CAST(a AS DATETIME(0)), CAST('00:00:00' AS TIME(6)))` datetime(6) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t2; +SELECT SUBTIME(a, '00:00:00.000001') FROM t1 ORDER BY a; +SUBTIME(a, '00:00:00.000001') +1000-01-01 00:59:59.999999 +1000-01-01 01:00:00.000000 +2000-12-31 23:59:59.999999 +2001-01-01 00:00:00.000000 +2001-01-01 00:59:59.999999 +2001-01-01 01:00:00.000000 +SELECT SUBTIME(a, '10:00:00.000001') FROM t1 ORDER BY a; +SUBTIME(a, '10:00:00.000001') +0999-12-31 14:59:59.999999 +0999-12-31 15:00:00.000000 +2000-12-31 13:59:59.999999 +2000-12-31 14:00:00.000000 +2000-12-31 14:59:59.999999 +2000-12-31 15:00:00.000000 +SELECT SUBTIME(a, a) FROM t1 ORDER BY a; +SUBTIME(a, a) +NULL +NULL +NULL +NULL +NULL +NULL +SELECT DATE_ADD(a, INTERVAL 1 MINUTE) FROM t1 ORDER BY a; +DATE_ADD(a, INTERVAL 1 MINUTE) +1000-01-01 01:01:00.000000 +1000-01-01 01:01:00.000001 +2001-01-01 00:01:00.000000 +2001-01-01 00:01:00.000001 +2001-01-01 01:01:00.000000 +2001-01-01 01:01:00.000001 +SELECT DATE_SUB(a, INTERVAL 1 MINUTE) FROM t1 ORDER BY a; +DATE_SUB(a, INTERVAL 1 MINUTE) +1000-01-01 00:59:00.000000 +1000-01-01 00:59:00.000001 +2000-12-31 23:59:00.000000 +2000-12-31 23:59:00.000001 +2001-01-01 00:59:00.000000 +2001-01-01 00:59:00.000001 +SELECT a, DATE_ADD(a, INTERVAL 1.1 SECOND) FROM t1 ORDER BY a; +a DATE_ADD(a, INTERVAL 1.1 SECOND) +1000-01-01 01:00:00.000000 1000-01-01 01:00:01.100000 +1000-01-01 01:00:00.000001 1000-01-01 01:00:01.100001 +2001-01-01 00:00:00.000000 2001-01-01 00:00:01.100000 +2001-01-01 00:00:00.000001 2001-01-01 00:00:01.100001 +2001-01-01 01:00:00.000000 2001-01-01 01:00:01.100000 +2001-01-01 01:00:00.000001 2001-01-01 01:00:01.100001 +SELECT a, DATE_ADD(a, INTERVAL 1.000009 SECOND) FROM t1 ORDER BY a; +a DATE_ADD(a, INTERVAL 1.000009 SECOND) +1000-01-01 01:00:00.000000 1000-01-01 01:00:01.000009 +1000-01-01 01:00:00.000001 1000-01-01 01:00:01.000010 +2001-01-01 00:00:00.000000 2001-01-01 00:00:01.000009 +2001-01-01 00:00:00.000001 2001-01-01 00:00:01.000010 +2001-01-01 01:00:00.000000 2001-01-01 01:00:01.000009 +2001-01-01 01:00:00.000001 2001-01-01 01:00:01.000010 +SELECT a, DATE_SUB(a, INTERVAL 1.1 SECOND) FROM t1 ORDER BY a; +a DATE_SUB(a, INTERVAL 1.1 SECOND) +1000-01-01 01:00:00.000000 1000-01-01 00:59:58.900000 +1000-01-01 01:00:00.000001 1000-01-01 00:59:58.900001 +2001-01-01 00:00:00.000000 2000-12-31 23:59:58.900000 +2001-01-01 00:00:00.000001 2000-12-31 23:59:58.900001 +2001-01-01 01:00:00.000000 2001-01-01 00:59:58.900000 +2001-01-01 01:00:00.000001 2001-01-01 00:59:58.900001 +SELECT a, DATE_SUB(a, INTERVAL 1.000009 SECOND) FROM t1 ORDER BY a; +a DATE_SUB(a, INTERVAL 1.000009 SECOND) +1000-01-01 01:00:00.000000 1000-01-01 00:59:58.999991 +1000-01-01 01:00:00.000001 1000-01-01 00:59:58.999992 +2001-01-01 00:00:00.000000 2000-12-31 23:59:58.999991 +2001-01-01 00:00:00.000001 2000-12-31 23:59:58.999992 +2001-01-01 01:00:00.000000 2001-01-01 00:59:58.999991 +2001-01-01 01:00:00.000001 2001-01-01 00:59:58.999992 +SELECT a, DATE_ADD(a, INTERVAL -0.1 SECOND) FROM t1 ORDER BY a; +a DATE_ADD(a, INTERVAL -0.1 SECOND) +1000-01-01 01:00:00.000000 1000-01-01 00:59:59.900000 +1000-01-01 01:00:00.000001 1000-01-01 00:59:59.900001 +2001-01-01 00:00:00.000000 2000-12-31 23:59:59.900000 +2001-01-01 00:00:00.000001 2000-12-31 23:59:59.900001 +2001-01-01 01:00:00.000000 2001-01-01 00:59:59.900000 +2001-01-01 01:00:00.000001 2001-01-01 00:59:59.900001 +SELECT a, DATE_SUB(a, INTERVAL -0.1 SECOND) FROM t1 ORDER BY a; +a DATE_SUB(a, INTERVAL -0.1 SECOND) +1000-01-01 01:00:00.000000 1000-01-01 01:00:00.100000 +1000-01-01 01:00:00.000001 1000-01-01 01:00:00.100001 +2001-01-01 00:00:00.000000 2001-01-01 00:00:00.100000 +2001-01-01 00:00:00.000001 2001-01-01 00:00:00.100001 +2001-01-01 01:00:00.000000 2001-01-01 01:00:00.100000 +2001-01-01 01:00:00.000001 2001-01-01 01:00:00.100001 +SELECT DATE_ADD(CAST(a AS DATETIME), INTERVAL 1 MINUTE) FROM t1 ORDER BY a; +DATE_ADD(CAST(a AS DATETIME), INTERVAL 1 MINUTE) +1000-01-01 01:01:00 +1000-01-01 01:01:00 +2001-01-01 00:01:00 +2001-01-01 00:01:00 +2001-01-01 01:01:00 +2001-01-01 01:01:00 +SELECT DATE_SUB(CAST(a AS DATETIME), INTERVAL 1 MINUTE) FROM t1 ORDER BY a; +DATE_SUB(CAST(a AS DATETIME), INTERVAL 1 MINUTE) +1000-01-01 00:59:00 +1000-01-01 00:59:00 +2000-12-31 23:59:00 +2000-12-31 23:59:00 +2001-01-01 00:59:00 +2001-01-01 00:59:00 +SELECT DATE_ADD(CAST(a AS DATETIME), INTERVAL 1 MICROSECOND) FROM t1 ORDER BY a; +DATE_ADD(CAST(a AS DATETIME), INTERVAL 1 MICROSECOND) +1000-01-01 01:00:00.000001 +1000-01-01 01:00:00.000001 +2001-01-01 00:00:00.000001 +2001-01-01 00:00:00.000001 +2001-01-01 01:00:00.000001 +2001-01-01 01:00:00.000001 +SELECT DATE_SUB(CAST(a AS DATETIME), INTERVAL 1 MICROSECOND) FROM t1 ORDER BY a; +DATE_SUB(CAST(a AS DATETIME), INTERVAL 1 MICROSECOND) +1000-01-01 00:59:59.999999 +1000-01-01 00:59:59.999999 +2000-12-31 23:59:59.999999 +2000-12-31 23:59:59.999999 +2001-01-01 00:59:59.999999 +2001-01-01 00:59:59.999999 +CREATE TABLE t2 AS SELECT +DATE_ADD(a, INTERVAL 1 SECOND), +DATE_SUB(a, INTERVAL 1 SECOND), +DATE_ADD(CAST(a AS DATETIME), INTERVAL 1 SECOND), +DATE_SUB(CAST(a AS DATETIME), INTERVAL 1 SECOND), +DATE_ADD(CAST(a AS DATETIME), INTERVAL 1 MICROSECOND), +DATE_SUB(CAST(a AS DATETIME), INTERVAL 1 MICROSECOND) +FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `DATE_ADD(a, INTERVAL 1 SECOND)` datetime(6) DEFAULT NULL, + `DATE_SUB(a, INTERVAL 1 SECOND)` datetime(6) DEFAULT NULL, + `DATE_ADD(CAST(a AS DATETIME), INTERVAL 1 SECOND)` datetime DEFAULT NULL, + `DATE_SUB(CAST(a AS DATETIME), INTERVAL 1 SECOND)` datetime DEFAULT NULL, + `DATE_ADD(CAST(a AS DATETIME), INTERVAL 1 MICROSECOND)` datetime(6) DEFAULT NULL, + `DATE_SUB(CAST(a AS DATETIME), INTERVAL 1 MICROSECOND)` datetime(6) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t2; +CREATE TABLE t2 AS SELECT MAX(ADDTIME(a, '00:00:00.1')) FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `MAX(ADDTIME(a, '00:00:00.1'))` datetime(6) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +SELECT * FROM t2; +MAX(ADDTIME(a, '00:00:00.1')) +2001-01-01 01:00:00.100001 +DROP TABLE t2; +DROP TABLE t1; +CREATE TABLE t1 AS SELECT +DATE_ADD(TIMESTAMP'2001-01-01 00:00:00', INTERVAL 1 SECOND) AS t0s0, +DATE_ADD(TIMESTAMP'2001-01-01 00:00:00', INTERVAL 1.1 SECOND) AS t0s1, +DATE_ADD(TIMESTAMP'2001-01-01 00:00:00', INTERVAL 1.12 SECOND) AS t0s2, +DATE_ADD(TIMESTAMP'2001-01-01 00:00:00', INTERVAL 1.123 SECOND) AS t0s3, +DATE_ADD(TIMESTAMP'2001-01-01 00:00:00', INTERVAL 1.1234 SECOND) AS t0s4, +DATE_ADD(TIMESTAMP'2001-01-01 00:00:00', INTERVAL 1.12345 SECOND) AS t0s5, +DATE_ADD(TIMESTAMP'2001-01-01 00:00:00', INTERVAL 1.123456 SECOND) AS t0s6, +DATE_ADD(TIMESTAMP'2001-01-01 00:00:00.1', INTERVAL 1 SECOND) AS t1s0, +DATE_ADD(TIMESTAMP'2001-01-01 00:00:00.12', INTERVAL 1 SECOND) AS t2s0, +DATE_ADD(TIMESTAMP'2001-01-01 00:00:00.123', INTERVAL 1 SECOND) AS t3s0, +DATE_ADD(TIMESTAMP'2001-01-01 00:00:00.1234', INTERVAL 1 SECOND) AS t4s0, +DATE_ADD(TIMESTAMP'2001-01-01 00:00:00.12345', INTERVAL 1 SECOND) AS t5s0, +DATE_ADD(TIMESTAMP'2001-01-01 00:00:00.123456', INTERVAL 1 SECOND) AS t6s0, +DATE_ADD(TIMESTAMP'2001-01-01 00:00:00', INTERVAL 1 MICROSECOND) AS t0ms; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `t0s0` datetime DEFAULT NULL, + `t0s1` datetime(1) DEFAULT NULL, + `t0s2` datetime(2) DEFAULT NULL, + `t0s3` datetime(3) DEFAULT NULL, + `t0s4` datetime(4) DEFAULT NULL, + `t0s5` datetime(5) DEFAULT NULL, + `t0s6` datetime(6) DEFAULT NULL, + `t1s0` datetime(1) DEFAULT NULL, + `t2s0` datetime(2) DEFAULT NULL, + `t3s0` datetime(3) DEFAULT NULL, + `t4s0` datetime(4) DEFAULT NULL, + `t5s0` datetime(5) DEFAULT NULL, + `t6s0` datetime(6) DEFAULT NULL, + `t0ms` datetime(6) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT +CONVERT_TZ(TIMESTAMP'2001-01-01 00:00:00', '+00:00', '+01:00') AS d0, +CONVERT_TZ(TIMESTAMP'2001-01-01 00:00:00.1', '+00:00', '+01:00') AS d1, +CONVERT_TZ(TIMESTAMP'2001-01-01 00:00:00.12', '+00:00', '+01:00') AS d2, +CONVERT_TZ(TIMESTAMP'2001-01-01 00:00:00.123', '+00:00', '+01:00') AS d3, +CONVERT_TZ(TIMESTAMP'2001-01-01 00:00:00.1234', '+00:00', '+01:00') AS d4, +CONVERT_TZ(TIMESTAMP'2001-01-01 00:00:00.12345', '+00:00', '+01:00') AS d5, +CONVERT_TZ(TIMESTAMP'2001-01-01 00:00:00.123456', '+00:00', '+01:00') AS d6; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `d0` datetime DEFAULT NULL, + `d1` datetime(1) DEFAULT NULL, + `d2` datetime(2) DEFAULT NULL, + `d3` datetime(3) DEFAULT NULL, + `d4` datetime(4) DEFAULT NULL, + `d5` datetime(5) DEFAULT NULL, + `d6` datetime(6) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t1; +# +# Testing copy from DATETIME to DATETIME(6) and vice versa +# +CREATE TABLE t1 (a DATETIME(6), b DATETIME); +INSERT INTO t1 VALUES ('2001-01-01 01:02:03.123456','1971-01-01 00:00:00'); +UPDATE t1 SET b=a; +SELECT * FROM t1; +a b +2001-01-01 01:02:03.123456 2001-01-01 01:02:03 +UPDATE t1 SET b='2002-02-02 10:11:12'; +UPDATE t1 SET a=b; +SELECT * FROM t1; +a b +2002-02-02 10:11:12.000000 2002-02-02 10:11:12 +DROP TABLE t1; +# +# Testing ALTER from DATETIME(6) to DATETIME and vice versa +# +CREATE TABLE t1 (a DATETIME); +INSERT INTO t1 VALUES ('2000-01-01 01:02:03'); +ALTER TABLE t1 MODIFY a DATETIME(6); +SELECT * FROM t1; +a +2000-01-01 01:02:03.000000 +UPDATE t1 SET a='2000-01-01 01:03:03.456'; +SELECT * FROM t1; +a +2000-01-01 01:03:03.456000 +ALTER TABLE t1 MODIFY a DATETIME; +SELECT * FROM t1; +a +2000-01-01 01:03:03 +DROP TABLE t1; +# +# Testing ALTER between DATETIME and BIGINT +# +CREATE TABLE t1 (a DATETIME, b DATETIME(6)); +INSERT INTO t1 VALUES ('2000-01-01 11:22:33', '2000-01-01 11:22:33'); +ALTER TABLE t1 MODIFY a BIGINT, MODIFY b BIGINT; +SELECT * FROM t1; +a b +20000101112233 20000101112233 +UPDATE t1 SET a=20000101112233, b=20000101112233; +ALTER TABLE t1 MODIFY a DATETIME, MODIFY b DATETIME(6); +SELECT * FROM t1; +a b +2000-01-01 11:22:33 2000-01-01 11:22:33.000000 +DROP TABLE t1; +# +# Testing ALTER between DATETIME(6) and DOUBLE +# +CREATE TABLE t1 (a DATETIME, b DATETIME(6)); +INSERT INTO t1 VALUES ('1971-01-01 11:22:33', '1971-01-01 11:22:33.1234'); +ALTER TABLE t1 MODIFY a DOUBLE, MODIFY b DOUBLE; +SELECT * FROM t1; +a b +19710101112233 19710101112233.125 +UPDATE t1 SET a=20010101101112, b=20010101101112.1; +ALTER TABLE t1 MODIFY a DATETIME, MODIFY b DATETIME(6); +SELECT * FROM t1; +a b +2001-01-01 10:11:12 2001-01-01 10:11:12.100000 +DROP TABLE t1; +# +# Testing ALTER between DATETIME(6) and DECIMAL +# +CREATE TABLE t1 (a DATETIME, b DATETIME(6)); +INSERT INTO t1 VALUES ('2001-01-01 11:22:33', '2001-01-01 11:22:33.1234'); +ALTER TABLE t1 MODIFY a DECIMAL(30,6), MODIFY b DECIMAL(30,6); +SELECT * FROM t1; +a b +20010101112233.000000 20010101112233.123400 +UPDATE t1 SET a=20010101112233, b=20010101112233.1234; +ALTER TABLE t1 MODIFY a DATETIME, MODIFY b DATETIME(6); +SELECT * FROM t1; +a b +2001-01-01 11:22:33 2001-01-01 11:22:33.123400 +DROP TABLE t1; +# +# Testing ALTER from DATETIME to various other temporal types +# +CREATE TABLE t1 (a DATETIME(6), b DATETIME(6), c DATETIME(6)); +INSERT INTO t1 VALUES +('2001-01-01 10:10:10.1', '2001-01-01 10:10:10.1', '2001-01-01 10:10:10.1'); +ALTER TABLE t1 MODIFY a TIME(6), MODIFY b TIMESTAMP(6), MODIFY c DATE; +Warnings: +Note 1292 Incorrect date value: '2001-01-01 10:10:10' for column 'c' at row 1 +SELECT * FROM t1; +a b c +10:10:10.100000 2001-01-01 10:10:10.100000 2001-01-01 +DROP TABLE t1; +# +# Testing EXPLAIN EXTENDED SELECT for CAST(DATETIME(N)) +# +EXPLAIN EXTENDED SELECT CAST('10:10:10' AS DATETIME); +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL No tables used +Warnings: +Warning 1681 'EXTENDED' is deprecated and will be removed in a future release. +Note 1003 /* select#1 */ select cast('10:10:10' as datetime) AS `CAST('10:10:10' AS DATETIME)` +EXPLAIN EXTENDED SELECT CAST('10:10:10' AS DATETIME(0)); +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL No tables used +Warnings: +Warning 1681 'EXTENDED' is deprecated and will be removed in a future release. +Note 1003 /* select#1 */ select cast('10:10:10' as datetime) AS `CAST('10:10:10' AS DATETIME(0))` +EXPLAIN EXTENDED SELECT CAST('10:10:10' AS DATETIME(1)); +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL No tables used +Warnings: +Warning 1681 'EXTENDED' is deprecated and will be removed in a future release. +Note 1003 /* select#1 */ select cast('10:10:10' as datetime(1)) AS `CAST('10:10:10' AS DATETIME(1))` +EXPLAIN EXTENDED SELECT CAST('10:10:10' AS DATETIME(2)); +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL No tables used +Warnings: +Warning 1681 'EXTENDED' is deprecated and will be removed in a future release. +Note 1003 /* select#1 */ select cast('10:10:10' as datetime(2)) AS `CAST('10:10:10' AS DATETIME(2))` +EXPLAIN EXTENDED SELECT CAST('10:10:10' AS DATETIME(3)); +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL No tables used +Warnings: +Warning 1681 'EXTENDED' is deprecated and will be removed in a future release. +Note 1003 /* select#1 */ select cast('10:10:10' as datetime(3)) AS `CAST('10:10:10' AS DATETIME(3))` +EXPLAIN EXTENDED SELECT CAST('10:10:10' AS DATETIME(4)); +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL No tables used +Warnings: +Warning 1681 'EXTENDED' is deprecated and will be removed in a future release. +Note 1003 /* select#1 */ select cast('10:10:10' as datetime(4)) AS `CAST('10:10:10' AS DATETIME(4))` +EXPLAIN EXTENDED SELECT CAST('10:10:10' AS DATETIME(5)); +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL No tables used +Warnings: +Warning 1681 'EXTENDED' is deprecated and will be removed in a future release. +Note 1003 /* select#1 */ select cast('10:10:10' as datetime(5)) AS `CAST('10:10:10' AS DATETIME(5))` +EXPLAIN EXTENDED SELECT CAST('10:10:10' AS DATETIME(6)); +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL No tables used +Warnings: +Warning 1681 'EXTENDED' is deprecated and will be removed in a future release. +Note 1003 /* select#1 */ select cast('10:10:10' as datetime(6)) AS `CAST('10:10:10' AS DATETIME(6))` +# +# Testing CAST with bad FSPs +# +SELECT CAST(1 AS DATETIME(-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 1 +SELECT CAST(1 AS DATETIME(7)); +ERROR 42000: Too-big precision 7 specified for 'CAST'. Maximum is 6. +SELECT CAST(1 AS DATETIME(31)); +ERROR 42000: Too-big precision 31 specified for 'CAST'. Maximum is 6. +# +# Testing conversion from DATETIME(6) to INT +# +CREATE TABLE t1 (a DATETIME(6)); +INSERT INTO t1 VALUES ('2001-01-01 10:10:58.499'); +INSERT INTO t1 VALUES ('2001-01-01 10:10:58.999'); +INSERT INTO t1 VALUES ('2001-01-01 10:10:59.499'); +INSERT INTO t1 VALUES ('2001-01-01 10:10:59.999'); +INSERT INTO t1 VALUES ('2001-12-31 23:59:58.499'); +INSERT INTO t1 VALUES ('2001-12-31 23:59:58.999'); +INSERT INTO t1 VALUES ('2001-12-31 23:59:59.499'); +INSERT INTO t1 VALUES ('2001-12-31 23:59:59.999'); +ALTER TABLE t1 ADD b BIGINT, ADD c DATETIME(6); +UPDATE t1 SET b=a, c=a; +ALTER TABLE t1 MODIFY c BIGINT; +SELECT a, CAST(a AS SIGNED), b, c FROM t1; +a CAST(a AS SIGNED) b c +2001-01-01 10:10:58.499000 20010101101058 20010101101058 20010101101058 +2001-01-01 10:10:58.999000 20010101101059 20010101101059 20010101101059 +2001-01-01 10:10:59.499000 20010101101059 20010101101059 20010101101059 +2001-01-01 10:10:59.999000 20010101101100 20010101101100 20010101101100 +2001-12-31 23:59:58.499000 20011231235958 20011231235958 20011231235958 +2001-12-31 23:59:58.999000 20011231235959 20011231235959 20011231235959 +2001-12-31 23:59:59.499000 20011231235959 20011231235959 20011231235959 +2001-12-31 23:59:59.999000 20020101000000 20020101000000 20020101000000 +DROP TABLE t1; +# +# Testing INT value and CAST of DATETIME(6) to various other types +# +CREATE TABLE t1 (a DATETIME(6)); +INSERT INTO t1 VALUES ('2001-01-01 11:22:33.123'); +INSERT INTO t1 VALUES ('2001-01-01 11:22:33.999'); +INSERT INTO t1 VALUES ('2001-12-31 23:59:58.499'); +INSERT INTO t1 VALUES ('2001-12-31 23:59:58.999'); +INSERT INTO t1 VALUES ('2001-12-31 23:59:59.499'); +INSERT INTO t1 VALUES ('2001-12-31 23:59:59.999'); +SELECT a << 0 FROM t1; +a << 0 +20010101112233 +20010101112234 +20011231235958 +20011231235959 +20011231235959 +20020101000000 +SELECT CAST(a AS SIGNED) FROM t1; +CAST(a AS SIGNED) +20010101112233 +20010101112234 +20011231235958 +20011231235959 +20011231235959 +20020101000000 +SELECT CAST(a AS UNSIGNED) FROM t1; +CAST(a AS UNSIGNED) +20010101112233 +20010101112234 +20011231235958 +20011231235959 +20011231235959 +20020101000000 +SELECT CAST(a AS DECIMAL(30,6)) FROM t1; +CAST(a AS DECIMAL(30,6)) +20010101112233.123000 +20010101112233.999000 +20011231235958.499000 +20011231235958.999000 +20011231235959.499000 +20011231235959.999000 +SELECT CAST(a AS DECIMAL(30,3)) FROM t1; +CAST(a AS DECIMAL(30,3)) +20010101112233.123 +20010101112233.999 +20011231235958.499 +20011231235958.999 +20011231235959.499 +20011231235959.999 +SELECT CAST(a AS CHAR) FROM t1; +CAST(a AS CHAR) +2001-01-01 11:22:33.123000 +2001-01-01 11:22:33.999000 +2001-12-31 23:59:58.499000 +2001-12-31 23:59:58.999000 +2001-12-31 23:59:59.499000 +2001-12-31 23:59:59.999000 +SELECT CAST(a AS CHAR(6)) FROM t1; +CAST(a AS CHAR(6)) +2001-0 +2001-0 +2001-1 +2001-1 +2001-1 +2001-1 +Warnings: +Warning 1292 Truncated incorrect CHAR(6) value: '2001-01-01 11:22:33.123000' +Warning 1292 Truncated incorrect CHAR(6) value: '2001-01-01 11:22:33.999000' +Warning 1292 Truncated incorrect CHAR(6) value: '2001-12-31 23:59:58.499000' +Warning 1292 Truncated incorrect CHAR(6) value: '2001-12-31 23:59:58.999000' +Warning 1292 Truncated incorrect CHAR(6) value: '2001-12-31 23:59:59.499000' +Warning 1292 Truncated incorrect CHAR(6) value: '2001-12-31 23:59:59.999000' +CREATE TABLE t2 AS SELECT CAST(a AS CHAR) AS a FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` varchar(26) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +SELECT a, LENGTH(a) FROM t2; +a LENGTH(a) +2001-01-01 11:22:33.123000 26 +2001-01-01 11:22:33.999000 26 +2001-12-31 23:59:58.499000 26 +2001-12-31 23:59:58.999000 26 +2001-12-31 23:59:59.499000 26 +2001-12-31 23:59:59.999000 26 +DROP TABLE t2; +DROP TABLE t1; +# +# Testing explicit CAST from TIME to DATETIME +# +SET @@timestamp=UNIX_TIMESTAMP('2001-01-01 00:00:00'); +CREATE TABLE t1 (a TIME, b TIME(6), c INT, d VARCHAR(32), e INT); +INSERT INTO t1 VALUES ('15:00:00', '15:00:00.123456', 150000, '15:00:00', 15*3600); +INSERT INTO t1 VALUES ('45:00:00', '45:00:00.123456', 450000, '45:00:00', 45*3600); +INSERT INTO t1 VALUES ('-15:00:00', '-15:00:00.123456', -150000, '-15:00:00', -15*3600); +INSERT INTO t1 VALUES ('-45:00:00', '-45:00:00.123456', -450000, '-45:00:00', -45*3600); +SELECT a, CAST(a AS DATETIME), CAST(b AS DATETIME), CAST(c AS DATETIME), CAST(d AS DATETIME), CAST(SEC_TO_TIME(e) AS DATETIME), CAST(CAST(a AS TIME) AS DATETIME) FROM t1;; +a 15:00:00 +CAST(a AS DATETIME) 2001-01-01 15:00:00 +CAST(b AS DATETIME) 2001-01-01 15:00:00 +CAST(c AS DATETIME) 2015-00-00 00:00:00 +CAST(d AS DATETIME) 2015-00-00 00:00:00 +CAST(SEC_TO_TIME(e) AS DATETIME) 2001-01-01 15:00:00 +CAST(CAST(a AS TIME) AS DATETIME) 2001-01-01 15:00:00 +a 45:00:00 +CAST(a AS DATETIME) 2001-01-02 21:00:00 +CAST(b AS DATETIME) 2001-01-02 21:00:00 +CAST(c AS DATETIME) 2045-00-00 00:00:00 +CAST(d AS DATETIME) 2045-00-00 00:00:00 +CAST(SEC_TO_TIME(e) AS DATETIME) 2001-01-02 21:00:00 +CAST(CAST(a AS TIME) AS DATETIME) 2001-01-02 21:00:00 +a -15:00:00 +CAST(a AS DATETIME) 2000-12-31 09:00:00 +CAST(b AS DATETIME) 2000-12-31 09:00:00 +CAST(c AS DATETIME) NULL +CAST(d AS DATETIME) NULL +CAST(SEC_TO_TIME(e) AS DATETIME) 2000-12-31 09:00:00 +CAST(CAST(a AS TIME) AS DATETIME) 2000-12-31 09:00:00 +a -45:00:00 +CAST(a AS DATETIME) 2000-12-30 03:00:00 +CAST(b AS DATETIME) 2000-12-30 03:00:00 +CAST(c AS DATETIME) NULL +CAST(d AS DATETIME) NULL +CAST(SEC_TO_TIME(e) AS DATETIME) 2000-12-30 03:00:00 +CAST(CAST(a AS TIME) AS DATETIME) 2000-12-30 03:00:00 +Warnings: +Level Warning +Code 1292 +Message Incorrect datetime value: '-150000' +Level Warning +Code 1292 +Message Incorrect datetime value: '-15:00:00' +Level Warning +Code 1292 +Message Incorrect datetime value: '-450000' +Level Warning +Code 1292 +Message Incorrect datetime value: '-45:00:00' +SELECT a, CAST(a AS DATETIME(6)), CAST(b AS DATETIME(6)), CAST(c AS DATETIME(6)), CAST(d AS DATETIME(6)), CAST(SEC_TO_TIME(e) AS DATETIME(6)), CAST(CAST(a AS TIME) AS DATETIME(6)) FROM t1;; +a 15:00:00 +CAST(a AS DATETIME(6)) 2001-01-01 15:00:00.000000 +CAST(b AS DATETIME(6)) 2001-01-01 15:00:00.123456 +CAST(c AS DATETIME(6)) 2015-00-00 00:00:00.000000 +CAST(d AS DATETIME(6)) 2015-00-00 00:00:00.000000 +CAST(SEC_TO_TIME(e) AS DATETIME(6)) 2001-01-01 15:00:00.000000 +CAST(CAST(a AS TIME) AS DATETIME(6)) 2001-01-01 15:00:00.000000 +a 45:00:00 +CAST(a AS DATETIME(6)) 2001-01-02 21:00:00.000000 +CAST(b AS DATETIME(6)) 2001-01-02 21:00:00.123456 +CAST(c AS DATETIME(6)) 2045-00-00 00:00:00.000000 +CAST(d AS DATETIME(6)) 2045-00-00 00:00:00.000000 +CAST(SEC_TO_TIME(e) AS DATETIME(6)) 2001-01-02 21:00:00.000000 +CAST(CAST(a AS TIME) AS DATETIME(6)) 2001-01-02 21:00:00.000000 +a -15:00:00 +CAST(a AS DATETIME(6)) 2000-12-31 09:00:00.000000 +CAST(b AS DATETIME(6)) 2000-12-31 08:59:59.876544 +CAST(c AS DATETIME(6)) NULL +CAST(d AS DATETIME(6)) NULL +CAST(SEC_TO_TIME(e) AS DATETIME(6)) 2000-12-31 09:00:00.000000 +CAST(CAST(a AS TIME) AS DATETIME(6)) 2000-12-31 09:00:00.000000 +a -45:00:00 +CAST(a AS DATETIME(6)) 2000-12-30 03:00:00.000000 +CAST(b AS DATETIME(6)) 2000-12-30 02:59:59.876544 +CAST(c AS DATETIME(6)) NULL +CAST(d AS DATETIME(6)) NULL +CAST(SEC_TO_TIME(e) AS DATETIME(6)) 2000-12-30 03:00:00.000000 +CAST(CAST(a AS TIME) AS DATETIME(6)) 2000-12-30 03:00:00.000000 +Warnings: +Level Warning +Code 1292 +Message Incorrect datetime value: '-150000' +Level Warning +Code 1292 +Message Incorrect datetime value: '-15:00:00' +Level Warning +Code 1292 +Message Incorrect datetime value: '-450000' +Level Warning +Code 1292 +Message Incorrect datetime value: '-45:00:00' +DROP TABLE t1; +SET @@timestamp=default; +# +# Testing comparison between TIME and DATETIME +# This tests Field_time[f]::val_date_temporal() +# +SET @@timestamp=UNIX_TIMESTAMP('2001-01-01 10:20:30.123'); +CREATE TABLE t1 (a TIME, b DATETIME, a6 TIME(6), b6 DATETIME(6)); +INSERT INTO t1 VALUES +(current_time, current_timestamp, current_time(6), current_timestamp(6)); +SELECT a, b FROM t1 WHERE a=b; +a b +10:20:30 2001-01-01 10:20:30 +SELECT a6, b6 FROM t1 WHERE a6=b6; +a6 b6 +10:20:30.123000 2001-01-01 10:20:30.123000 +# In this query both expressions make DATETIME data type +SELECT LEAST(a,b), LEAST(b,a) FROM t1; +LEAST(a,b) LEAST(b,a) +2001-01-01 10:20:30 2001-01-01 10:20:30 +SELECT CONCAT(LEAST(a,b)), CONCAT(LEAST(b,a)) FROM t1; +CONCAT(LEAST(a,b)) CONCAT(LEAST(b,a)) +2001-01-01 10:20:30 2001-01-01 10:20:30 +# In this query all expressions make VARCHAR data type +# So the result format depends on which value wins, with the first value having higher precedence: +SELECT LEAST(a,b,'2001-01-02'), LEAST(b,a,'2001-01-02'), LEAST(a,b,'2000-01-01') FROM t1; +LEAST(a,b,'2001-01-02') LEAST(b,a,'2001-01-02') LEAST(a,b,'2000-01-01') +10:20:30 2001-01-01 10:20:30 2000-01-01 +# More tests with LEAST: +SELECT a, b FROM t1 WHERE a=LEAST(a,a); +a b +10:20:30 2001-01-01 10:20:30 +SELECT a, b FROM t1 WHERE a=LEAST(a,b); +a b +10:20:30 2001-01-01 10:20:30 +DROP TABLE t1; +SET @@timestamp=DEFAULT; +# +# Comparison between DATETIME column and constant TIME epxression +# +CREATE TABLE t1 (a DATETIME(6)); +SET @@timestamp=UNIX_TIMESTAMP('2010-01-01 10:50:50.123'); +SELECT NOW(6); +NOW(6) +2010-01-01 10:50:50.123000 +INSERT INTO t1 VALUES (CURRENT_TIMESTAMP(6)), ('2010-01-01 00:00:00'); +SELECT * FROM t1 WHERE a=TIME'10:50:50.123'; +a +2010-01-01 10:50:50.123000 +SELECT * FROM t1 WHERE a=CURRENT_TIME(6); +a +2010-01-01 10:50:50.123000 +SELECT * FROM t1 WHERE a=CAST('10:50:50.123' AS TIME(6)); +a +2010-01-01 10:50:50.123000 +SELECT * FROM t1 WHERE a=MAKETIME(10,50,50.123); +a +2010-01-01 10:50:50.123000 +SELECT * FROM t1 WHERE a=SEC_TO_TIME(39050.123); +a +2010-01-01 10:50:50.123000 +SELECT * FROM t1 WHERE TIME'10:50:50.123'=a; +a +2010-01-01 10:50:50.123000 +SELECT * FROM t1 WHERE CURRENT_TIME(6)=a; +a +2010-01-01 10:50:50.123000 +SELECT * FROM t1 WHERE CAST('10:50:50.123' AS TIME(6))=a; +a +2010-01-01 10:50:50.123000 +SELECT * FROM t1 WHERE MAKETIME(10,50,50.123)=a; +a +2010-01-01 10:50:50.123000 +SELECT * FROM t1 WHERE SEC_TO_TIME(39050.123)=a; +a +2010-01-01 10:50:50.123000 +DROP TABLE t1; +SET @@timestamp=DEFAULT; +# +# BETWEEN for combinations of DATETIME and TIME +# +SET @@timestamp=UNIX_TIMESTAMP('2010-01-01 10:50:50.123'); +CREATE TABLE t1 (a DATETIME(6)); +INSERT INTO t1 VALUES +('2010-01-01 10:50:50.100'), ('2010-01-01 10:50:50.123'), ('2010-01-01 10:50:50.200'); +SELECT * FROM t1 WHERE a BETWEEN TIME'10:50:50.120' AND TIME'10:50:50.123'; +a +2010-01-01 10:50:50.123000 +SELECT * FROM t1 WHERE a BETWEEN TIMESTAMP'2010-01-01 10:50:50.120' AND TIME'10:50:50.123'; +a +2010-01-01 10:50:50.123000 +SELECT * FROM t1 WHERE a BETWEEN TIME'10:50:50.120' AND TIMESTAMP'2010-01-01 10:50:50.123'; +a +2010-01-01 10:50:50.123000 +ALTER TABLE t1 MODIFY a TIME(6); +SELECT * FROM t1; +a +10:50:50.100000 +10:50:50.123000 +10:50:50.200000 +SELECT * FROM t1 WHERE a BETWEEN TIME'10:50:50.120' AND TIME'10:50:50.123'; +a +10:50:50.123000 +SELECT * FROM t1 WHERE a BETWEEN TIMESTAMP'2010-01-01 10:50:50.120' AND TIME'10:50:50.123'; +a +10:50:50.123000 +SELECT * FROM t1 WHERE a BETWEEN TIME'10:50:50.120' AND TIMESTAMP'2010-01-01 10:50:50.123'; +a +10:50:50.123000 +DROP TABLE t1; +SET @@timestamp=DEFAULT; +CREATE TABLE t1 (c INT, d VARCHAR(32)); +INSERT INTO t1 VALUES (156060, '15:60:60'); +SELECT CAST(c AS DATETIME), CAST(d AS DATETIME) FROM t1; +CAST(c AS DATETIME) CAST(d AS DATETIME) +NULL NULL +Warnings: +Warning 1292 Incorrect datetime value: '156060' +Warning 1292 Incorrect datetime value: '15:60:60' +SELECT CAST(c AS DATETIME(6)), CAST(d AS DATETIME(6)) FROM t1; +CAST(c AS DATETIME(6)) CAST(d AS DATETIME(6)) +NULL NULL +Warnings: +Warning 1292 Incorrect datetime value: '156060' +Warning 1292 Incorrect datetime value: '15:60:60' +DROP TABLE t1; +# +# Testing function TIMESTAMP(expr) +# +CREATE TABLE t1 AS SELECT +TIMESTAMP(20010101101010), +TIMESTAMP(20010101101010.1), +TIMESTAMP(20010101101010.12), +TIMESTAMP(20010101101010.123), +TIMESTAMP(20010101101010.1234), +TIMESTAMP(20010101101010.12345), +TIMESTAMP(20010101101010.123456), +TIMESTAMP('2001-01-01 00:01:01'), +TIMESTAMP('2001-01-01 00:01:01.1'), +TIMESTAMP('2001-01-01 00:01:01.12'), +TIMESTAMP('2001-01-01 00:01:01.123'), +TIMESTAMP('2001-01-01 00:01:01.1234'), +TIMESTAMP('2001-01-01 00:01:01.12345'), +TIMESTAMP('2001-01-01 00:01:01.123456'), +TIMESTAMP(CONCAT('2001-01-01 00:01:01','')), +TIMESTAMP(CONCAT('2001-01-01 00:01:01','.1')), +TIMESTAMP(CONCAT('2001-01-01 00:01:01','.12')), +TIMESTAMP(CONCAT('2001-01-01 00:01:01','.123')), +TIMESTAMP(CONCAT('2001-01-01 00:01:01','.1234')), +TIMESTAMP(CONCAT('2001-01-01 00:01:01','.12345')), +TIMESTAMP(CONCAT('2001-01-01 00:01:01','.123456')), +TIMESTAMP(TIME'00:01:01'), +TIMESTAMP(TIME'00:01:01.1'), +TIMESTAMP(TIME'00:01:01.12'), +TIMESTAMP(TIME'00:01:01.123'), +TIMESTAMP(TIME'00:01:01.1234'), +TIMESTAMP(TIME'00:01:01.12345'), +TIMESTAMP(TIME'00:01:01.123456'), +TIMESTAMP(TIMESTAMP('2001-01-01 00:00:00')), +TIMESTAMP(TIMESTAMP('2001-01-01 00:00:00.1')), +TIMESTAMP(TIMESTAMP('2001-01-01 00:00:00.12')), +TIMESTAMP(TIMESTAMP('2001-01-01 00:00:00.123')), +TIMESTAMP(TIMESTAMP('2001-01-01 00:00:00.1234')), +TIMESTAMP(TIMESTAMP('2001-01-01 00:00:00.12345')), +TIMESTAMP(TIMESTAMP('2001-01-01 00:00:00.123456')); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `TIMESTAMP(20010101101010)` datetime DEFAULT NULL, + `TIMESTAMP(20010101101010.1)` datetime(1) DEFAULT NULL, + `TIMESTAMP(20010101101010.12)` datetime(2) DEFAULT NULL, + `TIMESTAMP(20010101101010.123)` datetime(3) DEFAULT NULL, + `TIMESTAMP(20010101101010.1234)` datetime(4) DEFAULT NULL, + `TIMESTAMP(20010101101010.12345)` datetime(5) DEFAULT NULL, + `TIMESTAMP(20010101101010.123456)` datetime(6) DEFAULT NULL, + `TIMESTAMP('2001-01-01 00:01:01')` datetime DEFAULT NULL, + `TIMESTAMP('2001-01-01 00:01:01.1')` datetime(1) DEFAULT NULL, + `TIMESTAMP('2001-01-01 00:01:01.12')` datetime(2) DEFAULT NULL, + `TIMESTAMP('2001-01-01 00:01:01.123')` datetime(3) DEFAULT NULL, + `TIMESTAMP('2001-01-01 00:01:01.1234')` datetime(4) DEFAULT NULL, + `TIMESTAMP('2001-01-01 00:01:01.12345')` datetime(5) DEFAULT NULL, + `TIMESTAMP('2001-01-01 00:01:01.123456')` datetime(6) DEFAULT NULL, + `TIMESTAMP(CONCAT('2001-01-01 00:01:01',''))` datetime DEFAULT NULL, + `TIMESTAMP(CONCAT('2001-01-01 00:01:01','.1'))` datetime(1) DEFAULT NULL, + `TIMESTAMP(CONCAT('2001-01-01 00:01:01','.12'))` datetime(2) DEFAULT NULL, + `TIMESTAMP(CONCAT('2001-01-01 00:01:01','.123'))` datetime(3) DEFAULT NULL, + `TIMESTAMP(CONCAT('2001-01-01 00:01:01','.1234'))` datetime(4) DEFAULT NULL, + `TIMESTAMP(CONCAT('2001-01-01 00:01:01','.12345'))` datetime(5) DEFAULT NULL, + `TIMESTAMP(CONCAT('2001-01-01 00:01:01','.123456'))` datetime(6) DEFAULT NULL, + `TIMESTAMP(TIME'00:01:01')` datetime DEFAULT NULL, + `TIMESTAMP(TIME'00:01:01.1')` datetime(1) DEFAULT NULL, + `TIMESTAMP(TIME'00:01:01.12')` datetime(2) DEFAULT NULL, + `TIMESTAMP(TIME'00:01:01.123')` datetime(3) DEFAULT NULL, + `TIMESTAMP(TIME'00:01:01.1234')` datetime(4) DEFAULT NULL, + `TIMESTAMP(TIME'00:01:01.12345')` datetime(5) DEFAULT NULL, + `TIMESTAMP(TIME'00:01:01.123456')` datetime(6) DEFAULT NULL, + `TIMESTAMP(TIMESTAMP('2001-01-01 00:00:00'))` datetime DEFAULT NULL, + `TIMESTAMP(TIMESTAMP('2001-01-01 00:00:00.1'))` datetime(1) DEFAULT NULL, + `TIMESTAMP(TIMESTAMP('2001-01-01 00:00:00.12'))` datetime(2) DEFAULT NULL, + `TIMESTAMP(TIMESTAMP('2001-01-01 00:00:00.123'))` datetime(3) DEFAULT NULL, + `TIMESTAMP(TIMESTAMP('2001-01-01 00:00:00.1234'))` datetime(4) DEFAULT NULL, + `TIMESTAMP(TIMESTAMP('2001-01-01 00:00:00.12345'))` datetime(5) DEFAULT NULL, + `TIMESTAMP(TIMESTAMP('2001-01-01 00:00:00.123456'))` datetime(6) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t1; +# +# Testing DEFAULT value +# +CREATE TABLE t1 (a DATETIME(6) NOT NULL DEFAULT '2000-01-01 11:22:33.123456'); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` datetime(6) NOT NULL DEFAULT '2000-01-01 11:22:33.123456' +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t1; +# +# Mixing varios DATETIME(N) in CASE +# +CREATE TABLE t1 ( +t0 DATETIME, t1 DATETIME(1), t3 DATETIME(3),t4 DATETIME(4), t6 DATETIME(6)); +CREATE TABLE t2 AS SELECT +CASE WHEN 1 THEN t0 ELSE t1 END, +CASE WHEN 1 THEN t0 ELSE t3 END, +CASE WHEN 1 THEN t0 ELSE t4 END, +CASE WHEN 1 THEN t0 ELSE t6 END, +CASE WHEN 1 THEN t1 ELSE t0 END, +CASE WHEN 1 THEN t1 ELSE t3 END, +CASE WHEN 1 THEN t1 ELSE t4 END, +CASE WHEN 1 THEN t1 ELSE t6 END, +CASE WHEN 1 THEN t3 ELSE t0 END, +CASE WHEN 1 THEN t3 ELSE t1 END, +CASE WHEN 1 THEN t3 ELSE t4 END, +CASE WHEN 1 THEN t3 ELSE t6 END, +CASE WHEN 1 THEN t4 ELSE t0 END, +CASE WHEN 1 THEN t4 ELSE t1 END, +CASE WHEN 1 THEN t4 ELSE t3 END, +CASE WHEN 1 THEN t4 ELSE t6 END, +CASE WHEN 1 THEN t6 ELSE t0 END, +CASE WHEN 1 THEN t6 ELSE t1 END, +CASE WHEN 1 THEN t6 ELSE t3 END, +CASE WHEN 1 THEN t6 ELSE t4 END +FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `CASE WHEN 1 THEN t0 ELSE t1 END` datetime(1) DEFAULT NULL, + `CASE WHEN 1 THEN t0 ELSE t3 END` datetime(3) DEFAULT NULL, + `CASE WHEN 1 THEN t0 ELSE t4 END` datetime(4) DEFAULT NULL, + `CASE WHEN 1 THEN t0 ELSE t6 END` datetime(6) DEFAULT NULL, + `CASE WHEN 1 THEN t1 ELSE t0 END` datetime(1) DEFAULT NULL, + `CASE WHEN 1 THEN t1 ELSE t3 END` datetime(3) DEFAULT NULL, + `CASE WHEN 1 THEN t1 ELSE t4 END` datetime(4) DEFAULT NULL, + `CASE WHEN 1 THEN t1 ELSE t6 END` datetime(6) DEFAULT NULL, + `CASE WHEN 1 THEN t3 ELSE t0 END` datetime(3) DEFAULT NULL, + `CASE WHEN 1 THEN t3 ELSE t1 END` datetime(3) DEFAULT NULL, + `CASE WHEN 1 THEN t3 ELSE t4 END` datetime(4) DEFAULT NULL, + `CASE WHEN 1 THEN t3 ELSE t6 END` datetime(6) DEFAULT NULL, + `CASE WHEN 1 THEN t4 ELSE t0 END` datetime(4) DEFAULT NULL, + `CASE WHEN 1 THEN t4 ELSE t1 END` datetime(4) DEFAULT NULL, + `CASE WHEN 1 THEN t4 ELSE t3 END` datetime(4) DEFAULT NULL, + `CASE WHEN 1 THEN t4 ELSE t6 END` datetime(6) DEFAULT NULL, + `CASE WHEN 1 THEN t6 ELSE t0 END` datetime(6) DEFAULT NULL, + `CASE WHEN 1 THEN t6 ELSE t1 END` datetime(6) DEFAULT NULL, + `CASE WHEN 1 THEN t6 ELSE t3 END` datetime(6) DEFAULT NULL, + `CASE WHEN 1 THEN t6 ELSE t4 END` datetime(6) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t2; +DROP TABLE t1; +# +# Mixing various DATETTIME(N) in COALESCE +# +CREATE TABLE t1 ( +a DATETIME(6), +b DATETIME(6), +c DATETIME, +d DATETIME, +e DATETIME(3), +f DATETIME(4)); +CREATE TABLE t2 AS SELECT +COALESCE(a, b), COALESCE(c, b), +COALESCE(c, d), COALESCE(e, f), +COALESCE(c, e), COALESCE(c, f) +FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `COALESCE(a, b)` datetime(6) DEFAULT NULL, + `COALESCE(c, b)` datetime(6) DEFAULT NULL, + `COALESCE(c, d)` datetime DEFAULT NULL, + `COALESCE(e, f)` datetime(4) DEFAULT NULL, + `COALESCE(c, e)` datetime(3) DEFAULT NULL, + `COALESCE(c, f)` datetime(4) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t2; +CREATE TABLE t2 AS SELECT +CONCAT(COALESCE(a, b)), CONCAT(COALESCE(c, b)), +CONCAT(COALESCE(c, d)), CONCAT(COALESCE(e, f)), +CONCAT(COALESCE(c, e)), CONCAT(COALESCE(c, f)) +FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `CONCAT(COALESCE(a, b))` varchar(26) DEFAULT NULL, + `CONCAT(COALESCE(c, b))` varchar(26) DEFAULT NULL, + `CONCAT(COALESCE(c, d))` varchar(19) DEFAULT NULL, + `CONCAT(COALESCE(e, f))` varchar(24) DEFAULT NULL, + `CONCAT(COALESCE(c, e))` varchar(23) DEFAULT NULL, + `CONCAT(COALESCE(c, f))` varchar(24) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t2; +DROP TABLE t1; +# +# Mixing DATETIME(6) with another DATETIME(6) in IF +# +CREATE TABLE t1 (a DATETIME(6), b DATETIME(6)); +CREATE TABLE t2 AS SELECT IF(1, a, b) AS a FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` datetime(6) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t2; +DROP TABLE t1; +# +# Mixing DATETIME(N) with DATETIME(M) in IF +# +CREATE TABLE t1 (a DATETIME(1), b DATETIME(2)); +CREATE TABLE t2 AS SELECT IF(1, a, b), IF(1, b, a) FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `IF(1, a, b)` datetime(2) DEFAULT NULL, + `IF(1, b, a)` datetime(2) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t2; +DROP TABLE t1; +# +# Mixing DATETIME(6) NOT NULL with another DATETIME(6) NOT NULL +# +CREATE TABLE t1 (a DATETIME(6) NOT NULL, b DATETIME(6) NOT NULL); +CREATE TABLE t2 AS SELECT IF(1, a, b) AS a FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` datetime(6) NOT NULL DEFAULT '0000-00-00 00:00:00.000000' +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t2; +DROP TABLE t1; +# +# UNION between DATETIME(n) +# +CREATE TABLE t1 (t0 DATETIME, t1 DATETIME(1), t3 DATETIME(3), t4 DATETIME(4)); +CREATE TABLE t2 AS SELECT t0 FROM t1 UNION SELECT t1 FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `t0` datetime(1) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t2; +CREATE TABLE t2 AS SELECT t1 FROM t1 UNION SELECT t3 FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `t1` datetime(3) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t2; +CREATE TABLE t2 AS SELECT t3 FROM t1 UNION SELECT t4 FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `t3` datetime(4) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t2; +DROP TABLE t1; +# +# UNION between DATETIME(6) and various other types +# +CREATE TABLE t1 (a DATETIME(6), b BIGINT, c DOUBLE, d DECIMAL(20,6), e VARCHAR(20)); +CREATE TABLE t2 AS SELECT a FROM t1 UNION SELECT b FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` varchar(26) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t2; +CREATE TABLE t2 AS SELECT a FROM t1 UNION SELECT c FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` varchar(26) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t2; +CREATE TABLE t2 AS SELECT a FROM t1 UNION SELECT d FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` varchar(26) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t2; +CREATE TABLE t2 AS SELECT a FROM t1 UNION SELECT e FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` varchar(26) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t2; +DROP TABLE t1; +# +# Testing DATETIME(6) field in combination with DATETIME type functions +# +CREATE TABLE t1 (a DATETIME(6), b TIME(6)); +INSERT INTO t1 VALUES ('2001-01-01 10:00:00.123456', '10:00:00.123456'); +INSERT INTO t1 VALUES ('2001-01-01 10:00:00', '10:00:00'); +SELECT * FROM t1 WHERE a=TIMESTAMP('2001-01-01', b); +a b +2001-01-01 10:00:00.123456 10:00:00.123456 +2001-01-01 10:00:00.000000 10:00:00.000000 +SELECT * FROM t1 WHERE a=ADDTIME('2001-01-01 00:00:00', '10:00:00'); +a b +2001-01-01 10:00:00.000000 10:00:00.000000 +SELECT * FROM t1 WHERE a=ADDTIME('2001-01-01 00:00:00', '10:00:00.123456'); +a b +2001-01-01 10:00:00.123456 10:00:00.123456 +DELETE FROM t1; +INSERT INTO t1 VALUES (CURRENT_TIMESTAMP, CURRENT_TIME); +SELECT COUNT(*) FROM t1 WHERE a <= CURRENT_TIMESTAMP; +COUNT(*) +1 +SELECT COUNT(*) FROM t1 WHERE a >= SUBTIME(CURRENT_TIMESTAMP, '10:00:00'); +COUNT(*) +1 +DROP TABLE t1; +# +# ORDER BY DATETIME(6) function +# +CREATE TABLE t1(a DATETIME(6)); +INSERT INTO t1 (a) VALUES ('9999-12-31 00:00:00.000002'); +INSERT INTO t1 (a) VALUES ('9999-12-31 00:00:00.000001'); +INSERT INTO t1 (a) VALUES ('9999-12-31 00:00:00.000000'); +INSERT INTO t1 (a) VALUES ('9999-12-31 23:59:59.000001'); +INSERT INTO t1 (a) VALUES ('2001-01-01 00:00:00.000003'); +INSERT INTO t1 (a) VALUES ('2001-01-01 00:00:00.000000'); +INSERT INTO t1 (a) VALUES ('2001-01-01 00:00:00.000001'); +SELECT * FROM t1 ORDER BY ADDTIME(a, '00:00:00'); +a +2001-01-01 00:00:00.000000 +2001-01-01 00:00:00.000001 +2001-01-01 00:00:00.000003 +9999-12-31 00:00:00.000000 +9999-12-31 00:00:00.000001 +9999-12-31 00:00:00.000002 +9999-12-31 23:59:59.000001 +SELECT * FROM t1 ORDER BY ADDTIME(a, '00:00:00') DESC; +a +9999-12-31 23:59:59.000001 +9999-12-31 00:00:00.000002 +9999-12-31 00:00:00.000001 +9999-12-31 00:00:00.000000 +2001-01-01 00:00:00.000003 +2001-01-01 00:00:00.000001 +2001-01-01 00:00:00.000000 +DROP TABLE t1; +# +# Testing partitions +# +CREATE TABLE t1 (a DATETIME(6)) PARTITION BY KEY(a) PARTITIONS 4; +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000000'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000001'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000002'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000003'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000004'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000005'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000006'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000010'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000011'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000012'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000013'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000014'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000015'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000016'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000110'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000111'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000112'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000113'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000114'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000115'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000116'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000210'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000211'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000212'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000213'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000214'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000215'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000216'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:01.000000'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:01.000001'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:01.000002'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:01.000003'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:01.000004'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:01.000005'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:01.000006'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:02.000000'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:02.000001'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:02.000002'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:02.000003'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:02.000004'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:02.000005'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:02.000006'); +SELECT * FROM t1 PARTITION(p0); +a +2001-01-01 00:00:01.000000 +2001-01-01 00:00:01.000004 +SELECT * FROM t1 PARTITION(p1); +a +2001-01-01 00:00:01.000001 +2001-01-01 00:00:01.000005 +2001-01-01 00:00:02.000000 +2001-01-01 00:00:02.000002 +2001-01-01 00:00:02.000004 +2001-01-01 00:00:02.000006 +SELECT * FROM t1 PARTITION(p2); +a +2001-01-01 00:00:01.000002 +2001-01-01 00:00:01.000006 +SELECT * FROM t1 PARTITION(p3); +a +2001-01-01 00:00:00.000000 +2001-01-01 00:00:00.000001 +2001-01-01 00:00:00.000002 +2001-01-01 00:00:00.000003 +2001-01-01 00:00:00.000004 +2001-01-01 00:00:00.000005 +2001-01-01 00:00:00.000006 +2001-01-01 00:00:00.000010 +2001-01-01 00:00:00.000011 +2001-01-01 00:00:00.000012 +2001-01-01 00:00:00.000013 +2001-01-01 00:00:00.000014 +2001-01-01 00:00:00.000015 +2001-01-01 00:00:00.000016 +2001-01-01 00:00:00.000110 +2001-01-01 00:00:00.000111 +2001-01-01 00:00:00.000112 +2001-01-01 00:00:00.000113 +2001-01-01 00:00:00.000114 +2001-01-01 00:00:00.000115 +2001-01-01 00:00:00.000116 +2001-01-01 00:00:00.000210 +2001-01-01 00:00:00.000211 +2001-01-01 00:00:00.000212 +2001-01-01 00:00:00.000213 +2001-01-01 00:00:00.000214 +2001-01-01 00:00:00.000215 +2001-01-01 00:00:00.000216 +2001-01-01 00:00:01.000003 +2001-01-01 00:00:02.000001 +2001-01-01 00:00:02.000003 +2001-01-01 00:00:02.000005 +ALTER TABLE t1 PARTITION BY RANGE COLUMNS (a) +( +PARTITION p0 VALUES LESS THAN ('2001-01-01 00:00:00.000200'), +PARTITION p1 VALUES LESS THAN ('2001-01-01 00:00:01'), +PARTITION p2 VALUES LESS THAN ('2001-01-01 00:00:02.000003'), +PARTITION p3 VALUES LESS THAN MAXVALUE +); +SELECT * FROM t1 PARTITION(p0); +a +2001-01-01 00:00:00.000000 +2001-01-01 00:00:00.000001 +2001-01-01 00:00:00.000002 +2001-01-01 00:00:00.000003 +2001-01-01 00:00:00.000004 +2001-01-01 00:00:00.000005 +2001-01-01 00:00:00.000006 +2001-01-01 00:00:00.000010 +2001-01-01 00:00:00.000011 +2001-01-01 00:00:00.000012 +2001-01-01 00:00:00.000013 +2001-01-01 00:00:00.000014 +2001-01-01 00:00:00.000015 +2001-01-01 00:00:00.000016 +2001-01-01 00:00:00.000110 +2001-01-01 00:00:00.000111 +2001-01-01 00:00:00.000112 +2001-01-01 00:00:00.000113 +2001-01-01 00:00:00.000114 +2001-01-01 00:00:00.000115 +2001-01-01 00:00:00.000116 +SELECT * FROM t1 PARTITION(p1); +a +2001-01-01 00:00:00.000210 +2001-01-01 00:00:00.000211 +2001-01-01 00:00:00.000212 +2001-01-01 00:00:00.000213 +2001-01-01 00:00:00.000214 +2001-01-01 00:00:00.000215 +2001-01-01 00:00:00.000216 +SELECT * FROM t1 PARTITION(p2); +a +2001-01-01 00:00:01.000000 +2001-01-01 00:00:01.000004 +2001-01-01 00:00:01.000001 +2001-01-01 00:00:01.000005 +2001-01-01 00:00:02.000000 +2001-01-01 00:00:02.000002 +2001-01-01 00:00:01.000002 +2001-01-01 00:00:01.000006 +2001-01-01 00:00:01.000003 +2001-01-01 00:00:02.000001 +SELECT * FROM t1 PARTITION(p3); +a +2001-01-01 00:00:02.000004 +2001-01-01 00:00:02.000006 +2001-01-01 00:00:02.000003 +2001-01-01 00:00:02.000005 +DROP TABLE t1; +# +# Checking that DATETIME/DATE literals can be a partition LESS value +# +CREATE TABLE t1 (s1 DATETIME(6)) +PARTITION BY RANGE COLUMNS (s1) +(PARTITION p1 VALUES LESS THAN (TIMESTAMP'2001-01-01 01:01:01.000001'), +PARTITION p2 VALUES LESS THAN (DATE'2002-01-01')); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `s1` datetime(6) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +/*!50500 PARTITION BY RANGE COLUMNS(s1) +(PARTITION p1 VALUES LESS THAN ('2001-01-01 01:01:01.000001') ENGINE = ENGINE, + PARTITION p2 VALUES LESS THAN ('2002-01-01') ENGINE = ENGINE) */ +DROP TABLE t1; +# +# Testing CAST to DATETIME and DATETIME(6) +# +CREATE TABLE t1 AS SELECT +CAST(111 AS DATETIME), +CAST(111.1 AS DATETIME), +CAST('20001111' AS DATETIME), +CAST(111e0 AS DATETIME), +CAST(111 AS DATETIME(0)), +CAST(111.1 AS DATETIME(0)), +CAST('20001111' AS DATETIME(0)), +CAST(111e0 AS DATETIME(0)), +CAST(111 AS DATETIME(6)), +CAST(111.1 AS DATETIME(6)), +CAST('20001111' AS DATETIME(6)), +CAST(111e0 AS DATETIME(6)); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `CAST(111 AS DATETIME)` datetime DEFAULT NULL, + `CAST(111.1 AS DATETIME)` datetime DEFAULT NULL, + `CAST('20001111' AS DATETIME)` datetime DEFAULT NULL, + `CAST(111e0 AS DATETIME)` datetime DEFAULT NULL, + `CAST(111 AS DATETIME(0))` datetime DEFAULT NULL, + `CAST(111.1 AS DATETIME(0))` datetime DEFAULT NULL, + `CAST('20001111' AS DATETIME(0))` datetime DEFAULT NULL, + `CAST(111e0 AS DATETIME(0))` datetime DEFAULT NULL, + `CAST(111 AS DATETIME(6))` datetime(6) DEFAULT NULL, + `CAST(111.1 AS DATETIME(6))` datetime(6) DEFAULT NULL, + `CAST('20001111' AS DATETIME(6))` datetime(6) DEFAULT NULL, + `CAST(111e0 AS DATETIME(6))` datetime(6) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT +CAST(100000000 AS DATETIME), +CAST(100000000 AS DATETIME(0)), +CAST(100000000 AS DATETIME(6)); +ERROR 22007: Incorrect datetime value: '100000000' +CREATE TABLE t1 (a DATETIME, b DATETIME(6)); +INSERT INTO t1 VALUES ('2001-01-01 11:22:33', '2001-01-01 11:22:33.123456'); +CREATE TABLE t2 AS SELECT CAST(a AS DATETIME), CAST(b AS DATETIME) FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `CAST(a AS DATETIME)` datetime DEFAULT NULL, + `CAST(b AS DATETIME)` datetime DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t2; +CREATE TABLE t2 AS SELECT CAST(a AS DATETIME(0)), CAST(b AS DATETIME(0)) FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `CAST(a AS DATETIME(0))` datetime DEFAULT NULL, + `CAST(b AS DATETIME(0))` datetime DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t2; +CREATE TABLE t2 AS SELECT CAST(a AS DATETIME(6)), CAST(b AS DATETIME(6)) FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `CAST(a AS DATETIME(6))` datetime(6) DEFAULT NULL, + `CAST(b AS DATETIME(6))` datetime(6) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t2; +# +# Testing Item_datetime_typecast::val_str +# +SELECT CONCAT(CAST(a AS DATETIME(0))), CONCAT(CAST(b AS DATETIME(0))) FROM t1; +CONCAT(CAST(a AS DATETIME(0))) CONCAT(CAST(b AS DATETIME(0))) +2001-01-01 11:22:33 2001-01-01 11:22:33 +SELECT CONCAT(CAST(a AS DATETIME(6))), CONCAT(CAST(b AS DATETIME(6))) FROM t1; +CONCAT(CAST(a AS DATETIME(6))) CONCAT(CAST(b AS DATETIME(6))) +2001-01-01 11:22:33.000000 2001-01-01 11:22:33.123456 +SELECT CONCAT(CAST(a AS DATETIME)), CONCAT(CAST(b AS DATETIME)) FROM t1; +CONCAT(CAST(a AS DATETIME)) CONCAT(CAST(b AS DATETIME)) +2001-01-01 11:22:33 2001-01-01 11:22:33 +# +# Testing Item_datetime_typecast::get_time +# +SELECT CAST(a AS DATETIME(0)), CAST(b AS DATETIME(0)) FROM t1; +CAST(a AS DATETIME(0)) CAST(b AS DATETIME(0)) +2001-01-01 11:22:33 2001-01-01 11:22:33 +SELECT CAST(a AS DATETIME(6)), CAST(b AS DATETIME(6)) FROM t1; +CAST(a AS DATETIME(6)) CAST(b AS DATETIME(6)) +2001-01-01 11:22:33.000000 2001-01-01 11:22:33.123456 +SELECT CAST(a AS DATETIME), CAST(b AS DATETIME) FROM t1; +CAST(a AS DATETIME) CAST(b AS DATETIME) +2001-01-01 11:22:33 2001-01-01 11:22:33 +DROP TABLE t1; +# +# Testing Item_datetime_typecast::val_int +# +SELECT CAST('2001-01-01 10:11:12' AS DATETIME(0)) + 1; +CAST('2001-01-01 10:11:12' AS DATETIME(0)) + 1 +20010101101113 +# +# Testing Item_time_typecast::val_decimal +# +SELECT CAST('2001-01-01 10:11:12' AS DATETIME(6)) + 1; +CAST('2001-01-01 10:11:12' AS DATETIME(6)) + 1 +20010101101113.000000 +# +# Testing CAST from numeric types to DATETIME +# +CREATE TABLE t1 (bi BIGINT, d DOUBLE, dc DECIMAL(30,6)); +INSERT INTO t1 VALUES (10101101112, 10101101112.1, 10101101112.1); +INSERT INTO t1 VALUES (20010101101112, 20010101101112.1, 20010101101112.1); +SELECT +CAST(bi AS DATETIME(1)), +CAST(d AS DATETIME(1)), +CAST(dc AS DATETIME(1)), +CAST(10101101112 AS DATETIME(1)), +CAST(10101101112.1 AS DATETIME(1)), +CAST(20010101101112 AS DATETIME(1)), +CAST(20010101101112.1 AS DATETIME(1)) +FROM t1; +CAST(bi AS DATETIME(1)) 2001-01-01 10:11:12.0 +CAST(d AS DATETIME(1)) 2001-01-01 10:11:12.1 +CAST(dc AS DATETIME(1)) 2001-01-01 10:11:12.1 +CAST(10101101112 AS DATETIME(1)) 2001-01-01 10:11:12.0 +CAST(10101101112.1 AS DATETIME(1)) 2001-01-01 10:11:12.1 +CAST(20010101101112 AS DATETIME(1)) 2001-01-01 10:11:12.0 +CAST(20010101101112.1 AS DATETIME(1)) 2001-01-01 10:11:12.1 +CAST(bi AS DATETIME(1)) 2001-01-01 10:11:12.0 +CAST(d AS DATETIME(1)) 2001-01-01 10:11:12.1 +CAST(dc AS DATETIME(1)) 2001-01-01 10:11:12.1 +CAST(10101101112 AS DATETIME(1)) 2001-01-01 10:11:12.0 +CAST(10101101112.1 AS DATETIME(1)) 2001-01-01 10:11:12.1 +CAST(20010101101112 AS DATETIME(1)) 2001-01-01 10:11:12.0 +CAST(20010101101112.1 AS DATETIME(1)) 2001-01-01 10:11:12.1 +DROP TABLE t1; +SELECT CAST(1e300 AS DATETIME); +CAST(1e300 AS DATETIME) +NULL +Warnings: +Warning 1292 Incorrect datetime value: '1e300' +SELECT CAST(999999999999999999999999.999 AS DATETIME); +CAST(999999999999999999999999.999 AS DATETIME) +NULL +Warnings: +Warning 1292 Incorrect datetime value: '999999999999999999999999.999' +SELECT CAST(9223372036854775807 AS DATETIME); +CAST(9223372036854775807 AS DATETIME) +NULL +Warnings: +Warning 1292 Incorrect datetime value: '9223372036854775807' +# +# Testing comparison between a DATETIME(6) field and a DATETIME(N) type cast +# +CREATE TABLE t1 (a DATETIME(6)); +INSERT INTO t1 VALUES ('2001-01-01 10:11:12.000000'); +INSERT INTO t1 VALUES ('2001-01-01 10:11:12.000001'); +INSERT INTO t1 VALUES ('2001-01-01 10:11:12.000002'); +INSERT INTO t1 VALUES ('2001-01-01 10:11:12.000003'); +SELECT * FROM t1 WHERE a=CAST('2001-01-01 10:11:12.000003' AS DATETIME(6)); +a +2001-01-01 10:11:12.000003 +SELECT * FROM t1 WHERE a=CAST('2001-01-01 10:11:12.000003' AS DATETIME(0)); +a +2001-01-01 10:11:12.000000 +DROP TABLE t1; +# +# Testing comparison between CAST(x AS DATETIME(N)) and INT +# +SELECT CAST('2001-01-01 10:11:12.123' AS DATETIME(0)) = 20010101101112; +CAST('2001-01-01 10:11:12.123' AS DATETIME(0)) = 20010101101112 +1 +SELECT CAST(20010101101112.123 AS DATETIME(0)) = 20010101101112; +CAST(20010101101112.123 AS DATETIME(0)) = 20010101101112 +1 +SELECT CAST(00010101101112.123e0 AS DATETIME(0)) = 20010101101112; +CAST(00010101101112.123e0 AS DATETIME(0)) = 20010101101112 +1 +# +# Testing Item_time_typecast::val_int_packed() +# +CREATE TABLE t1 (a DATETIME, b DATETIME(6)); +INSERT INTO t1 VALUES ('2001-01-01 23:00:00', '2001-01-01 23:00:00.123456'); +SELECT CAST('2001-01-01 23:00:00' AS DATETIME) = (SELECT a FROM t1); +CAST('2001-01-01 23:00:00' AS DATETIME) = (SELECT a FROM t1) +1 +SELECT CAST('2001-01-01 23:00:00' AS DATETIME(6)) = (SELECT a FROM t1); +CAST('2001-01-01 23:00:00' AS DATETIME(6)) = (SELECT a FROM t1) +1 +SELECT CAST('2001-01-01 23:00:00.123456' AS DATETIME(0)) = (SELECT a FROM t1); +CAST('2001-01-01 23:00:00.123456' AS DATETIME(0)) = (SELECT a FROM t1) +1 +SELECT CAST('2001-01-01 23:00:00.123456' AS DATETIME(6)) = (SELECT b FROM t1); +CAST('2001-01-01 23:00:00.123456' AS DATETIME(6)) = (SELECT b FROM t1) +1 +DROP TABLE t1; +# +# Testing function MICROSECOND +# +CREATE TABLE t1 (a DATETIME(6)); +INSERT INTO t1 VALUES ('2001-01-01 11:12:13.000001'); +INSERT INTO t1 VALUES ('2001-01-01 11:12:13.100001'); +INSERT INTO t1 VALUES ('2001-01-01 11:12:13.999999'); +SELECT a, MICROSECOND(a) FROM t1; +a MICROSECOND(a) +2001-01-01 11:12:13.000001 1 +2001-01-01 11:12:13.100001 100001 +2001-01-01 11:12:13.999999 999999 +SELECT a, EXTRACT(MICROSECOND FROM a) FROM t1; +a EXTRACT(MICROSECOND FROM a) +2001-01-01 11:12:13.000001 1 +2001-01-01 11:12:13.100001 100001 +2001-01-01 11:12:13.999999 999999 +DROP TABLE t1; +SELECT MICROSECOND(CAST(20010101235959.456 AS DATETIME(6))); +MICROSECOND(CAST(20010101235959.456 AS DATETIME(6))) +456000 +SELECT EXTRACT(MICROSECOND FROM CAST(20010101235959.456 AS DATETIME(6))); +EXTRACT(MICROSECOND FROM CAST(20010101235959.456 AS DATETIME(6))) +456000 +# +# Testing PS +# +CREATE TABLE t1 (a DATETIME(6)); +PREPARE stmt FROM 'INSERT INTO t1 VALUES (?)'; +SET @a='2001-01-01 11:22:33.123456'; +SET @b=20010101112233.123456; +SET @c=0.123456e0; +EXECUTE stmt USING @a; +EXECUTE stmt USING @c; +ERROR 22007: Incorrect datetime value: '0.123456' for column 'a' at row 1 +DEALLOCATE PREPARE stmt; +SELECT * FROM t1; +a +2001-01-01 11:22:33.123456 +PREPARE stmt FROM 'SELECT * FROM t1 WHERE a=?'; +EXECUTE stmt USING @a; +a +2001-01-01 11:22:33.123456 +EXECUTE stmt USING @b; +a +2001-01-01 11:22:33.123456 +EXECUTE stmt USING @c; +a +DEALLOCATE PREPARE stmt; +DROP TABLE t1; +# +# Testing DATETIME(6) and user variables +# +CREATE TABLE t1 (a DATETIME(6)); +INSERT INTO t1 VALUES ('2001-01-01 11:22:33.123456'); +INSERT INTO t1 VALUES ('1971-01-01 00:00:00.123456'); +SET @a='2001-01-01 11:22:33.123456'; +SELECT * FROM t1 WHERE a=@a; +a +2001-01-01 11:22:33.123456 +SET @a=20010101112233.123456; +SELECT * FROM t1 WHERE a=@a; +a +2001-01-01 11:22:33.123456 +SET @a=0.123456e0; +SELECT * FROM t1 WHERE a=@a; +a +SET @a=NULL; +SELECT a INTO @a FROM t1 LIMIT 1; +SELECT @a; +@a +2001-01-01 11:22:33.123456 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT @a AS a; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` longtext +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +SELECT * FROM t1; +a +2001-01-01 11:22:33.123456 +DROP TABLE t1; +# +# Testing SP +# +CREATE PROCEDURE p1 () +BEGIN +DECLARE a DATETIME(6); +SET a='2001-01-01 11:22:33.123'; +SELECT a; +END// +SHOW CREATE PROCEDURE p1// +Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation +p1 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` PROCEDURE `p1`() +BEGIN +DECLARE a DATETIME(6); +SET a='2001-01-01 11:22:33.123'; +SELECT a; +END latin1 latin1_swedish_ci latin1_swedish_ci +CALL p1// +a +2001-01-01 11:22:33.123000 +DROP PROCEDURE p1// +CREATE PROCEDURE p1 (a DATETIME(6)) +BEGIN +SELECT a; +END// +SHOW CREATE PROCEDURE p1// +Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation +p1 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` PROCEDURE `p1`(a DATETIME(6)) +BEGIN +SELECT a; +END latin1 latin1_swedish_ci latin1_swedish_ci +CALL p1(20010101112233)// +a +2001-01-01 11:22:33.000000 +CALL p1(20010101112233.123)// +a +2001-01-01 11:22:33.123000 +CALL p1(0.123e0)// +ERROR 22007: Incorrect datetime value: '0.123' for column 'a' at row 1 +CALL p1('2001-01-01 11:22:33.123')// +a +2001-01-01 11:22:33.123000 +DROP PROCEDURE p1// +CREATE PROCEDURE p1() +BEGIN +DECLARE a DATETIME(6); +CREATE TABLE t1 AS SELECT a; +SHOW CREATE TABLE t1; +DROP TABLE t1; +END// +SHOW CREATE PROCEDURE p1// +Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation +p1 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` PROCEDURE `p1`() +BEGIN +DECLARE a DATETIME(6); +CREATE TABLE t1 AS SELECT a; +SHOW CREATE TABLE t1; +DROP TABLE t1; +END latin1 latin1_swedish_ci latin1_swedish_ci +CALL p1// +Table Create Table +t1 CREATE TABLE `t1` ( + `a` datetime(6) DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +DROP PROCEDURE p1// +CREATE FUNCTION p1 (a DATETIME(6)) RETURNS DATETIME(6) +BEGIN +RETURN a; +END// +SHOW CREATE FUNCTION p1// +Function sql_mode Create Function character_set_client collation_connection Database Collation +p1 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` FUNCTION `p1`(a DATETIME(6)) RETURNS datetime(6) +BEGIN +RETURN a; +END latin1 latin1_swedish_ci latin1_swedish_ci +SELECT p1(20010101112233)// +p1(20010101112233) +2001-01-01 11:22:33.000000 +SELECT p1(20010101112233.123)// +p1(20010101112233.123) +2001-01-01 11:22:33.123000 +DROP FUNCTION p1// +# +# Testing INFORMATION_SCHEMA.COLUMNS +# +CREATE TABLE t1 (a DATETIME(6)); +SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='t1';; +TABLE_CATALOG def +TABLE_SCHEMA test +TABLE_NAME t1 +COLUMN_NAME a +ORDINAL_POSITION 1 +COLUMN_DEFAULT NULL +IS_NULLABLE YES +DATA_TYPE datetime +CHARACTER_MAXIMUM_LENGTH NULL +CHARACTER_OCTET_LENGTH NULL +NUMERIC_PRECISION NULL +NUMERIC_SCALE NULL +DATETIME_PRECISION 6 +CHARACTER_SET_NAME NULL +COLLATION_NAME NULL +COLUMN_TYPE datetime(6) +COLUMN_KEY +EXTRA +PRIVILEGES # +COLUMN_COMMENT +GENERATION_EXPRESSION +DROP TABLE t1; +# +# SELECT from a subquery +# +CREATE TABLE t1 (a DATETIME(6)); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.123456'), ('2001-01-01 11:11:11.123456'); +SELECT * FROM (SELECT * FROM t1) t12; +a +2001-01-01 00:00:00.123456 +2001-01-01 11:11:11.123456 +DROP TABLE t1; +# +# Testing IN and = subqueries +# +CREATE TABLE t1 (a DATETIME(6)); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.123456'), ('2001-01-01 11:11:11.123456'); +SELECT * FROM t1 WHERE a IN (SELECT MIN(a) FROM t1); +a +2001-01-01 00:00:00.123456 +SELECT * FROM t1 WHERE a = (SELECT a FROM t1 ORDER BY a DESC LIMIT 1); +a +2001-01-01 11:11:11.123456 +DROP TABLE t1; +# +# Testing IN subquery + GROUP +# +CREATE TABLE t1 (id INT, a DATETIME(6)); +INSERT INTO t1 VALUES (1, '2001-01-01 00:00:00.123456'), (1, '2001-01-01 11:00:00.123456'); +INSERT INTO t1 VALUES (2, '2001-01-01 00:01:00.123456'), (2, '2001-01-01 11:01:00.123456'); +INSERT INTO t1 VALUES (3, NULL); +SELECT * FROM t1 WHERE a IN (SELECT MAX(a) FROM t1 GROUP BY id); +id a +1 2001-01-01 11:00:00.123456 +2 2001-01-01 11:01:00.123456 +DROP TABLE t1; +# +# Testing VIEW +# +CREATE TABLE t1 (a DATETIME(6)); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.123456'), ('2001-01-01 11:11:11.123456'); +CREATE VIEW v1 AS SELECT a FROM t1; +SELECT * FROM v1 WHERE a='2001-01-01 00:00:00.123456'; +a +2001-01-01 00:00:00.123456 +SELECT MIN(a), MAX(a) FROM v1; +MIN(a) MAX(a) +2001-01-01 00:00:00.123456 2001-01-01 11:11:11.123456 +SELECT * FROM t1 WHERE a IN (SELECT MAX(a) FROM v1); +a +2001-01-01 11:11:11.123456 +DROP VIEW v1; +CREATE VIEW v1 AS SELECT MAX(a) AS a FROM t1; +SELECT * FROM v1; +a +2001-01-01 11:11:11.123456 +SELECT * FROM t1 WHERE a=(SELECT a FROM v1); +a +2001-01-01 11:11:11.123456 +DROP VIEW v1; +DROP TABLE t1; +# +# Testing that CAST from various fields to DATETIME rounds. +# This tests Field::get_date(). +# +CREATE TABLE t1 (a VARCHAR(32)); +INSERT INTO t1 VALUES +('9999-12-31 23:59:59.0000009'), ('9999-12-31 23:59:59.9'), +('2001-01-01 10:10:10.9999994'), ('2001-01-01 10:10:10.9999995'); +SELECT a, CAST(a AS DATETIME), CAST(a AS DATETIME(6)) FROM t1; +a CAST(a AS DATETIME) CAST(a AS DATETIME(6)) +9999-12-31 23:59:59.0000009 9999-12-31 23:59:59 9999-12-31 23:59:59.000001 +9999-12-31 23:59:59.9 NULL 9999-12-31 23:59:59.900000 +2001-01-01 10:10:10.9999994 2001-01-01 10:10:11 2001-01-01 10:10:10.999999 +2001-01-01 10:10:10.9999995 2001-01-01 10:10:11 2001-01-01 10:10:11.000000 +Warnings: +Warning 1441 Datetime function: datetime field overflow +DROP TABLE t1; +CREATE TABLE t1 (a DECIMAL(30, 7)); +INSERT INTO t1 VALUES +(99991231235959.0000009), (99991231235959.9), +(20010101101010.9999994), (20010101101010.9999995); +SELECT a, CAST(a AS DATETIME), CAST(a AS DATETIME(6)) FROM t1; +a CAST(a AS DATETIME) CAST(a AS DATETIME(6)) +99991231235959.0000009 9999-12-31 23:59:59 9999-12-31 23:59:59.000001 +99991231235959.9000000 NULL 9999-12-31 23:59:59.900000 +20010101101010.9999994 2001-01-01 10:10:11 2001-01-01 10:10:10.999999 +20010101101010.9999995 2001-01-01 10:10:11 2001-01-01 10:10:11.000000 +Warnings: +Warning 1441 Datetime function: datetime field overflow +DROP TABLE t1; +# +# Testing rounding with CAST +# +CREATE TABLE t1 (a DATETIME(6)); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.999999'); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.999998'); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.999997'); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.999996'); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.999995'); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.999994'); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.999993'); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.999992'); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.999991'); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.999990'); +SELECT a, CAST(a AS DATETIME(5)) FROM t1; +a CAST(a AS DATETIME(5)) +2001-01-01 10:10:10.999999 2001-01-01 10:10:11.00000 +2001-01-01 10:10:10.999998 2001-01-01 10:10:11.00000 +2001-01-01 10:10:10.999997 2001-01-01 10:10:11.00000 +2001-01-01 10:10:10.999996 2001-01-01 10:10:11.00000 +2001-01-01 10:10:10.999995 2001-01-01 10:10:11.00000 +2001-01-01 10:10:10.999994 2001-01-01 10:10:10.99999 +2001-01-01 10:10:10.999993 2001-01-01 10:10:10.99999 +2001-01-01 10:10:10.999992 2001-01-01 10:10:10.99999 +2001-01-01 10:10:10.999991 2001-01-01 10:10:10.99999 +2001-01-01 10:10:10.999990 2001-01-01 10:10:10.99999 +DROP TABLE t1; +CREATE TABLE t1 (a DATETIME(5)); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.99999'); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.99998'); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.99997'); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.99996'); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.99995'); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.99994'); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.99993'); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.99992'); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.99991'); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.99990'); +SELECT a, CAST(a AS DATETIME(4)) FROM t1; +a CAST(a AS DATETIME(4)) +2001-01-01 10:10:10.99999 2001-01-01 10:10:11.0000 +2001-01-01 10:10:10.99998 2001-01-01 10:10:11.0000 +2001-01-01 10:10:10.99997 2001-01-01 10:10:11.0000 +2001-01-01 10:10:10.99996 2001-01-01 10:10:11.0000 +2001-01-01 10:10:10.99995 2001-01-01 10:10:11.0000 +2001-01-01 10:10:10.99994 2001-01-01 10:10:10.9999 +2001-01-01 10:10:10.99993 2001-01-01 10:10:10.9999 +2001-01-01 10:10:10.99992 2001-01-01 10:10:10.9999 +2001-01-01 10:10:10.99991 2001-01-01 10:10:10.9999 +2001-01-01 10:10:10.99990 2001-01-01 10:10:10.9999 +DROP TABLE t1; +CREATE TABLE t1 (a DATETIME(4)); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.9999'); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.9998'); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.9997'); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.9996'); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.9995'); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.9994'); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.9993'); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.9992'); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.9991'); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.9990'); +SELECT a, CAST(a AS DATETIME(3)) FROM t1; +a CAST(a AS DATETIME(3)) +2001-01-01 10:10:10.9999 2001-01-01 10:10:11.000 +2001-01-01 10:10:10.9998 2001-01-01 10:10:11.000 +2001-01-01 10:10:10.9997 2001-01-01 10:10:11.000 +2001-01-01 10:10:10.9996 2001-01-01 10:10:11.000 +2001-01-01 10:10:10.9995 2001-01-01 10:10:11.000 +2001-01-01 10:10:10.9994 2001-01-01 10:10:10.999 +2001-01-01 10:10:10.9993 2001-01-01 10:10:10.999 +2001-01-01 10:10:10.9992 2001-01-01 10:10:10.999 +2001-01-01 10:10:10.9991 2001-01-01 10:10:10.999 +2001-01-01 10:10:10.9990 2001-01-01 10:10:10.999 +DROP TABLE t1; +CREATE TABLE t1 (a DATETIME(3)); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.999'); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.998'); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.997'); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.996'); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.995'); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.994'); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.993'); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.992'); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.991'); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.990'); +SELECT a, CAST(a AS DATETIME(2)) FROM t1; +a CAST(a AS DATETIME(2)) +2001-01-01 10:10:10.999 2001-01-01 10:10:11.00 +2001-01-01 10:10:10.998 2001-01-01 10:10:11.00 +2001-01-01 10:10:10.997 2001-01-01 10:10:11.00 +2001-01-01 10:10:10.996 2001-01-01 10:10:11.00 +2001-01-01 10:10:10.995 2001-01-01 10:10:11.00 +2001-01-01 10:10:10.994 2001-01-01 10:10:10.99 +2001-01-01 10:10:10.993 2001-01-01 10:10:10.99 +2001-01-01 10:10:10.992 2001-01-01 10:10:10.99 +2001-01-01 10:10:10.991 2001-01-01 10:10:10.99 +2001-01-01 10:10:10.990 2001-01-01 10:10:10.99 +DROP TABLE t1; +CREATE TABLE t1 (a DATETIME(2)); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.99'); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.98'); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.97'); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.96'); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.95'); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.94'); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.93'); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.92'); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.91'); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.90'); +SELECT a, CAST(a AS DATETIME(1)) FROM t1; +a CAST(a AS DATETIME(1)) +2001-01-01 10:10:10.99 2001-01-01 10:10:11.0 +2001-01-01 10:10:10.98 2001-01-01 10:10:11.0 +2001-01-01 10:10:10.97 2001-01-01 10:10:11.0 +2001-01-01 10:10:10.96 2001-01-01 10:10:11.0 +2001-01-01 10:10:10.95 2001-01-01 10:10:11.0 +2001-01-01 10:10:10.94 2001-01-01 10:10:10.9 +2001-01-01 10:10:10.93 2001-01-01 10:10:10.9 +2001-01-01 10:10:10.92 2001-01-01 10:10:10.9 +2001-01-01 10:10:10.91 2001-01-01 10:10:10.9 +2001-01-01 10:10:10.90 2001-01-01 10:10:10.9 +DROP TABLE t1; +CREATE TABLE t1 (a DATETIME(1)); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.9'); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.8'); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.7'); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.6'); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.5'); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.4'); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.3'); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.2'); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.1'); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.0'); +SELECT a, CAST(a AS DATETIME) FROM t1; +a CAST(a AS DATETIME) +2001-01-01 10:10:10.9 2001-01-01 10:10:11 +2001-01-01 10:10:10.8 2001-01-01 10:10:11 +2001-01-01 10:10:10.7 2001-01-01 10:10:11 +2001-01-01 10:10:10.6 2001-01-01 10:10:11 +2001-01-01 10:10:10.5 2001-01-01 10:10:11 +2001-01-01 10:10:10.4 2001-01-01 10:10:10 +2001-01-01 10:10:10.3 2001-01-01 10:10:10 +2001-01-01 10:10:10.2 2001-01-01 10:10:10 +2001-01-01 10:10:10.1 2001-01-01 10:10:10 +2001-01-01 10:10:10.0 2001-01-01 10:10:10 +DROP TABLE t1; +# +# Testing that Item::get_date() rounds +# +SELECT +CAST('2001-01-01 10:10:10.9999994' AS DATETIME), +CAST('2001-01-01 10:10:10.9999995' AS DATETIME), +CAST('2001-01-01 10:10:10.9999994' AS DATETIME(6)), +CAST('2001-01-01 10:10:10.9999995' AS DATETIME(6)), +CAST(20010101101010.9999994 AS DATETIME), +CAST(20010101101010.9999995 AS DATETIME), +CAST(20010101101010.9999994 AS DATETIME(6)), +CAST(20010101101010.9999995 AS DATETIME(6)); +CAST('2001-01-01 10:10:10.9999994' AS DATETIME) 2001-01-01 10:10:11 +CAST('2001-01-01 10:10:10.9999995' AS DATETIME) 2001-01-01 10:10:11 +CAST('2001-01-01 10:10:10.9999994' AS DATETIME(6)) 2001-01-01 10:10:10.999999 +CAST('2001-01-01 10:10:10.9999995' AS DATETIME(6)) 2001-01-01 10:10:11.000000 +CAST(20010101101010.9999994 AS DATETIME) 2001-01-01 10:10:11 +CAST(20010101101010.9999995 AS DATETIME) 2001-01-01 10:10:11 +CAST(20010101101010.9999994 AS DATETIME(6)) 2001-01-01 10:10:10.999999 +CAST(20010101101010.9999995 AS DATETIME(6)) 2001-01-01 10:10:11.000000 +# +# Testing that comparison rounds +# +CREATE TABLE t1 (t0 DATETIME, t6 DATETIME(6)); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00', '2001-01-01 00:00:00.999999'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:01', '2001-01-01 00:00:01.000000'); +SELECT t0 FROM t1 WHERE t6='2001-01-01 00:00:00.9999998'; +t0 +2001-01-01 00:00:01 +SELECT t6 FROM t1 WHERE t6='2001-01-01 00:00:00.9999998'; +t6 +2001-01-01 00:00:01.000000 +DROP TABLE t1; +# +# Testing that EXTRACT rounds +# +SELECT +EXTRACT(MICROSECOND FROM '2001-01-01 00:00:00.9999994'), +EXTRACT(MICROSECOND FROM '2001-01-01 00:00:00.9999995'), +EXTRACT(MICROSECOND FROM 20010101000000.9999994), +EXTRACT(MICROSECOND FROM 20010101000000.9999995); +EXTRACT(MICROSECOND FROM '2001-01-01 00:00:00.9999994') 999999 +EXTRACT(MICROSECOND FROM '2001-01-01 00:00:00.9999995') 0 +EXTRACT(MICROSECOND FROM 20010101000000.9999994) 999999 +EXTRACT(MICROSECOND FROM 20010101000000.9999995) 0 +# +# Testing that TIMESTAMP(0) is a synonym to non-fractional TIMESTAMP +# +CREATE TABLE t1 (a TIMESTAMP(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0)); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t1; +# +# Testing internal representation format for DATETIME(N) +# +SET time_zone='+00:00'; +CREATE TABLE t1 (a6 VARCHAR(32)); +INSERT INTO t1 VALUES ('1970-01-01 00:00:01.000000'); +INSERT INTO t1 VALUES ('1970-01-01 00:00:01.000001'); +INSERT INTO t1 VALUES ('1970-01-01 00:00:01.000002'); +INSERT INTO t1 VALUES ('1970-01-01 00:00:01.000003'); +INSERT INTO t1 VALUES ('1970-01-01 00:00:01.000004'); +INSERT INTO t1 VALUES ('1970-01-01 00:00:01.000005'); +INSERT INTO t1 VALUES ('1970-01-01 00:00:01.000006'); +INSERT INTO t1 VALUES ('1970-01-01 00:00:01.000007'); +INSERT INTO t1 VALUES ('1970-01-01 00:00:01.000008'); +INSERT INTO t1 VALUES ('1970-01-01 00:00:01.000009'); +INSERT INTO t1 VALUES ('1970-01-01 00:00:01.000010'); +INSERT INTO t1 VALUES ('1970-01-01 00:00:01.000011'); +INSERT INTO t1 VALUES ('1970-01-01 00:00:01.000012'); +INSERT INTO t1 VALUES ('1970-01-01 00:00:01.000013'); +INSERT INTO t1 VALUES ('1970-01-01 00:00:01.000014'); +INSERT INTO t1 VALUES ('1970-01-01 00:00:01.000015'); +INSERT INTO t1 VALUES ('1970-01-01 00:00:01.000016'); +INSERT INTO t1 VALUES ('1970-01-01 00:00:01.000099'); +INSERT INTO t1 VALUES ('1970-01-01 00:00:01.000999'); +INSERT INTO t1 VALUES ('1970-01-01 00:00:01.009999'); +INSERT INTO t1 VALUES ('1970-01-01 00:00:01.099999'); +INSERT INTO t1 VALUES ('1970-01-01 00:00:01.100000'); +INSERT INTO t1 VALUES ('1970-01-01 00:00:01.900000'); +INSERT INTO t1 VALUES ('1970-01-01 00:00:01.990000'); +INSERT INTO t1 VALUES ('1970-01-01 00:00:01.999000'); +INSERT INTO t1 VALUES ('1970-01-01 00:00:01.999900'); +INSERT INTO t1 VALUES ('1970-01-01 00:00:01.999990'); +INSERT INTO t1 VALUES ('1970-01-01 00:00:01.999999'); +INSERT INTO t1 VALUES ('1970-01-01 00:00:02.000000'); +INSERT INTO t1 VALUES ('1970-01-01 00:00:02.000001'); +INSERT INTO t1 VALUES ('1970-01-01 00:00:02.000002'); +INSERT INTO t1 VALUES ('1970-01-01 00:00:02.000003'); +INSERT INTO t1 VALUES ('1970-01-01 00:00:02.000004'); +INSERT INTO t1 VALUES ('1970-01-01 00:00:02.000005'); +INSERT INTO t1 VALUES ('1970-01-01 00:00:02.000006'); +INSERT INTO t1 VALUES ('1970-01-01 00:00:02.000007'); +INSERT INTO t1 VALUES ('1970-01-01 00:00:02.000008'); +INSERT INTO t1 VALUES ('1970-01-01 00:00:02.000009'); +INSERT INTO t1 VALUES ('1970-01-01 00:00:02.000010'); +INSERT INTO t1 VALUES ('1970-01-01 00:00:02.000011'); +INSERT INTO t1 VALUES ('1970-01-01 00:00:02.000012'); +INSERT INTO t1 VALUES ('1970-01-01 00:00:02.000013'); +INSERT INTO t1 VALUES ('1970-01-01 00:00:02.000014'); +INSERT INTO t1 VALUES ('1970-01-01 00:00:02.000015'); +INSERT INTO t1 VALUES ('1970-01-01 00:00:02.000016'); +INSERT INTO t1 VALUES ('1970-01-01 00:00:02.000099'); +INSERT INTO t1 VALUES ('1970-01-01 00:00:02.000999'); +INSERT INTO t1 VALUES ('1970-01-01 00:00:02.009999'); +INSERT INTO t1 VALUES ('1970-01-01 00:00:02.090000'); +INSERT INTO t1 VALUES ('1970-01-01 00:00:02.099999'); +INSERT INTO t1 VALUES ('1970-01-01 00:00:02.100000'); +INSERT INTO t1 VALUES ('1970-01-01 00:00:02.900000'); +INSERT INTO t1 VALUES ('1970-01-01 00:00:02.990000'); +INSERT INTO t1 VALUES ('1970-01-01 00:00:02.999000'); +INSERT INTO t1 VALUES ('1970-01-01 00:00:02.999900'); +INSERT INTO t1 VALUES ('1970-01-01 00:00:02.999990'); +INSERT INTO t1 VALUES ('1970-01-01 00:00:02.999999'); +INSERT INTO t1 VALUES ('1970-01-01 00:01:00.000001'); +INSERT INTO t1 VALUES ('1970-01-01 00:01:00.000008'); +INSERT INTO t1 VALUES ('1970-01-01 00:01:00.000015'); +INSERT INTO t1 VALUES ('1970-01-01 00:01:00.000016'); +INSERT INTO t1 VALUES ('1970-01-01 00:01:00.000099'); +INSERT INTO t1 VALUES ('1970-01-01 00:01:00.000999'); +INSERT INTO t1 VALUES ('1970-01-01 00:01:00.009999'); +INSERT INTO t1 VALUES ('1970-01-01 00:01:00.099999'); +INSERT INTO t1 VALUES ('1970-01-01 00:01:00.100000'); +INSERT INTO t1 VALUES ('1970-01-01 00:01:00.900000'); +INSERT INTO t1 VALUES ('1970-01-01 00:01:00.999999'); +INSERT INTO t1 VALUES ('1970-01-01 01:00:00.000001'); +INSERT INTO t1 VALUES ('1970-01-01 01:00:00.000008'); +INSERT INTO t1 VALUES ('1970-01-01 01:00:00.000015'); +INSERT INTO t1 VALUES ('1970-01-01 01:00:00.000016'); +INSERT INTO t1 VALUES ('1970-01-01 01:00:00.000099'); +INSERT INTO t1 VALUES ('1970-01-01 01:00:00.000999'); +INSERT INTO t1 VALUES ('1970-01-01 01:00:00.009999'); +INSERT INTO t1 VALUES ('1970-01-01 01:00:00.099999'); +INSERT INTO t1 VALUES ('1970-01-01 01:00:00.100000'); +INSERT INTO t1 VALUES ('1970-01-01 01:00:00.900000'); +INSERT INTO t1 VALUES ('1970-01-01 01:00:00.990000'); +INSERT INTO t1 VALUES ('1970-01-01 01:00:00.999000'); +INSERT INTO t1 VALUES ('1970-01-01 01:00:00.999900'); +INSERT INTO t1 VALUES ('1970-01-01 01:00:00.999990'); +INSERT INTO t1 VALUES ('1970-01-01 01:00:00.999999'); +INSERT INTO t1 VALUES ('2001-01-01 23:59:58.000001'); +INSERT INTO t1 VALUES ('2001-01-01 23:59:58.000008'); +INSERT INTO t1 VALUES ('2001-01-01 23:59:58.000015'); +INSERT INTO t1 VALUES ('2001-01-01 23:59:58.000016'); +INSERT INTO t1 VALUES ('2001-01-01 23:59:58.000099'); +INSERT INTO t1 VALUES ('2001-01-01 23:59:58.000999'); +INSERT INTO t1 VALUES ('2001-01-01 23:59:58.009999'); +INSERT INTO t1 VALUES ('2001-01-01 23:59:58.099999'); +INSERT INTO t1 VALUES ('2001-01-01 23:59:58.100000'); +INSERT INTO t1 VALUES ('2001-01-01 23:59:58.900000'); +INSERT INTO t1 VALUES ('2001-01-01 23:59:58.990000'); +INSERT INTO t1 VALUES ('2001-01-01 23:59:58.999000'); +INSERT INTO t1 VALUES ('2001-01-01 23:59:58.999900'); +INSERT INTO t1 VALUES ('2001-01-01 23:59:58.999990'); +INSERT INTO t1 VALUES ('2001-01-01 23:59:58.999999'); +INSERT INTO t1 VALUES ('2001-01-01 23:59:59.000000'); +INSERT INTO t1 VALUES ('2037-01-01 23:59:58.000001'); +INSERT INTO t1 VALUES ('2037-01-01 23:59:58.000008'); +INSERT INTO t1 VALUES ('2037-01-01 23:59:58.000015'); +INSERT INTO t1 VALUES ('2037-01-01 23:59:58.000016'); +INSERT INTO t1 VALUES ('2037-01-01 23:59:58.000099'); +INSERT INTO t1 VALUES ('2037-01-01 23:59:58.000999'); +INSERT INTO t1 VALUES ('2037-01-01 23:59:58.009999'); +INSERT INTO t1 VALUES ('2037-01-01 23:59:58.099999'); +INSERT INTO t1 VALUES ('2037-01-01 23:59:58.100000'); +INSERT INTO t1 VALUES ('2037-01-01 23:59:58.900000'); +INSERT INTO t1 VALUES ('2037-01-01 23:59:58.990000'); +INSERT INTO t1 VALUES ('2037-01-01 23:59:58.999000'); +INSERT INTO t1 VALUES ('2037-01-01 23:59:58.999900'); +INSERT INTO t1 VALUES ('2037-01-01 23:59:58.999990'); +INSERT INTO t1 VALUES ('2037-01-01 23:59:58.999999'); +INSERT INTO t1 VALUES ('2037-01-01 23:59:59.000000'); +ALTER TABLE t1 +ADD a0 VARCHAR(32), +ADD a1 VARCHAR(32), ADD a2 VARCHAR(32), ADD a3 VARCHAR(32), +ADD a4 VARCHAR(32), ADD a5 VARCHAR(32), +ADD d0 TIMESTAMP(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0), +ADD d1 TIMESTAMP(1) DEFAULT CURRENT_TIMESTAMP(1), +ADD d2 TIMESTAMP(2) DEFAULT CURRENT_TIMESTAMP(2), +ADD d3 TIMESTAMP(3) DEFAULT CURRENT_TIMESTAMP(3), +ADD d4 TIMESTAMP(4) DEFAULT CURRENT_TIMESTAMP(4), +ADD d5 TIMESTAMP(5) DEFAULT CURRENT_TIMESTAMP(5), +ADD d6 TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(6); +UPDATE t1 SET +a0= LEFT(a6, LENGTH(a6) - 6), +a1= LEFT(a6, LENGTH(a6) - 5), +a2= LEFT(a6, LENGTH(a6) - 4), +a3= LEFT(a6, LENGTH(a6) - 3), +a4= LEFT(a6, LENGTH(a6) - 2), +a5= LEFT(a6, LENGTH(a6) - 1); +UPDATE t1 SET d0= a0, d1= a1, d2= a2, d3= a3, d4= a4, d5= a5, d6= a6; +SELECT a6, d6, HEX(WEIGHT_STRING(d6)) FROM t1 ORDER BY d6; +a6 d6 HEX(WEIGHT_STRING(d6)) +1970-01-01 00:00:01.000000 1970-01-01 00:00:01.000000 00000001000000 +1970-01-01 00:00:01.000001 1970-01-01 00:00:01.000001 00000001000001 +1970-01-01 00:00:01.000002 1970-01-01 00:00:01.000002 00000001000002 +1970-01-01 00:00:01.000003 1970-01-01 00:00:01.000003 00000001000003 +1970-01-01 00:00:01.000004 1970-01-01 00:00:01.000004 00000001000004 +1970-01-01 00:00:01.000005 1970-01-01 00:00:01.000005 00000001000005 +1970-01-01 00:00:01.000006 1970-01-01 00:00:01.000006 00000001000006 +1970-01-01 00:00:01.000007 1970-01-01 00:00:01.000007 00000001000007 +1970-01-01 00:00:01.000008 1970-01-01 00:00:01.000008 00000001000008 +1970-01-01 00:00:01.000009 1970-01-01 00:00:01.000009 00000001000009 +1970-01-01 00:00:01.000010 1970-01-01 00:00:01.000010 0000000100000A +1970-01-01 00:00:01.000011 1970-01-01 00:00:01.000011 0000000100000B +1970-01-01 00:00:01.000012 1970-01-01 00:00:01.000012 0000000100000C +1970-01-01 00:00:01.000013 1970-01-01 00:00:01.000013 0000000100000D +1970-01-01 00:00:01.000014 1970-01-01 00:00:01.000014 0000000100000E +1970-01-01 00:00:01.000015 1970-01-01 00:00:01.000015 0000000100000F +1970-01-01 00:00:01.000016 1970-01-01 00:00:01.000016 00000001000010 +1970-01-01 00:00:01.000099 1970-01-01 00:00:01.000099 00000001000063 +1970-01-01 00:00:01.000999 1970-01-01 00:00:01.000999 000000010003E7 +1970-01-01 00:00:01.009999 1970-01-01 00:00:01.009999 0000000100270F +1970-01-01 00:00:01.099999 1970-01-01 00:00:01.099999 0000000101869F +1970-01-01 00:00:01.100000 1970-01-01 00:00:01.100000 000000010186A0 +1970-01-01 00:00:01.900000 1970-01-01 00:00:01.900000 000000010DBBA0 +1970-01-01 00:00:01.990000 1970-01-01 00:00:01.990000 000000010F1B30 +1970-01-01 00:00:01.999000 1970-01-01 00:00:01.999000 000000010F3E58 +1970-01-01 00:00:01.999900 1970-01-01 00:00:01.999900 000000010F41DC +1970-01-01 00:00:01.999990 1970-01-01 00:00:01.999990 000000010F4236 +1970-01-01 00:00:01.999999 1970-01-01 00:00:01.999999 000000010F423F +1970-01-01 00:00:02.000000 1970-01-01 00:00:02.000000 00000002000000 +1970-01-01 00:00:02.000001 1970-01-01 00:00:02.000001 00000002000001 +1970-01-01 00:00:02.000002 1970-01-01 00:00:02.000002 00000002000002 +1970-01-01 00:00:02.000003 1970-01-01 00:00:02.000003 00000002000003 +1970-01-01 00:00:02.000004 1970-01-01 00:00:02.000004 00000002000004 +1970-01-01 00:00:02.000005 1970-01-01 00:00:02.000005 00000002000005 +1970-01-01 00:00:02.000006 1970-01-01 00:00:02.000006 00000002000006 +1970-01-01 00:00:02.000007 1970-01-01 00:00:02.000007 00000002000007 +1970-01-01 00:00:02.000008 1970-01-01 00:00:02.000008 00000002000008 +1970-01-01 00:00:02.000009 1970-01-01 00:00:02.000009 00000002000009 +1970-01-01 00:00:02.000010 1970-01-01 00:00:02.000010 0000000200000A +1970-01-01 00:00:02.000011 1970-01-01 00:00:02.000011 0000000200000B +1970-01-01 00:00:02.000012 1970-01-01 00:00:02.000012 0000000200000C +1970-01-01 00:00:02.000013 1970-01-01 00:00:02.000013 0000000200000D +1970-01-01 00:00:02.000014 1970-01-01 00:00:02.000014 0000000200000E +1970-01-01 00:00:02.000015 1970-01-01 00:00:02.000015 0000000200000F +1970-01-01 00:00:02.000016 1970-01-01 00:00:02.000016 00000002000010 +1970-01-01 00:00:02.000099 1970-01-01 00:00:02.000099 00000002000063 +1970-01-01 00:00:02.000999 1970-01-01 00:00:02.000999 000000020003E7 +1970-01-01 00:00:02.009999 1970-01-01 00:00:02.009999 0000000200270F +1970-01-01 00:00:02.090000 1970-01-01 00:00:02.090000 00000002015F90 +1970-01-01 00:00:02.099999 1970-01-01 00:00:02.099999 0000000201869F +1970-01-01 00:00:02.100000 1970-01-01 00:00:02.100000 000000020186A0 +1970-01-01 00:00:02.900000 1970-01-01 00:00:02.900000 000000020DBBA0 +1970-01-01 00:00:02.990000 1970-01-01 00:00:02.990000 000000020F1B30 +1970-01-01 00:00:02.999000 1970-01-01 00:00:02.999000 000000020F3E58 +1970-01-01 00:00:02.999900 1970-01-01 00:00:02.999900 000000020F41DC +1970-01-01 00:00:02.999990 1970-01-01 00:00:02.999990 000000020F4236 +1970-01-01 00:00:02.999999 1970-01-01 00:00:02.999999 000000020F423F +1970-01-01 00:01:00.000001 1970-01-01 00:01:00.000001 0000003C000001 +1970-01-01 00:01:00.000008 1970-01-01 00:01:00.000008 0000003C000008 +1970-01-01 00:01:00.000015 1970-01-01 00:01:00.000015 0000003C00000F +1970-01-01 00:01:00.000016 1970-01-01 00:01:00.000016 0000003C000010 +1970-01-01 00:01:00.000099 1970-01-01 00:01:00.000099 0000003C000063 +1970-01-01 00:01:00.000999 1970-01-01 00:01:00.000999 0000003C0003E7 +1970-01-01 00:01:00.009999 1970-01-01 00:01:00.009999 0000003C00270F +1970-01-01 00:01:00.099999 1970-01-01 00:01:00.099999 0000003C01869F +1970-01-01 00:01:00.100000 1970-01-01 00:01:00.100000 0000003C0186A0 +1970-01-01 00:01:00.900000 1970-01-01 00:01:00.900000 0000003C0DBBA0 +1970-01-01 00:01:00.999999 1970-01-01 00:01:00.999999 0000003C0F423F +1970-01-01 01:00:00.000001 1970-01-01 01:00:00.000001 00000E10000001 +1970-01-01 01:00:00.000008 1970-01-01 01:00:00.000008 00000E10000008 +1970-01-01 01:00:00.000015 1970-01-01 01:00:00.000015 00000E1000000F +1970-01-01 01:00:00.000016 1970-01-01 01:00:00.000016 00000E10000010 +1970-01-01 01:00:00.000099 1970-01-01 01:00:00.000099 00000E10000063 +1970-01-01 01:00:00.000999 1970-01-01 01:00:00.000999 00000E100003E7 +1970-01-01 01:00:00.009999 1970-01-01 01:00:00.009999 00000E1000270F +1970-01-01 01:00:00.099999 1970-01-01 01:00:00.099999 00000E1001869F +1970-01-01 01:00:00.100000 1970-01-01 01:00:00.100000 00000E100186A0 +1970-01-01 01:00:00.900000 1970-01-01 01:00:00.900000 00000E100DBBA0 +1970-01-01 01:00:00.990000 1970-01-01 01:00:00.990000 00000E100F1B30 +1970-01-01 01:00:00.999000 1970-01-01 01:00:00.999000 00000E100F3E58 +1970-01-01 01:00:00.999900 1970-01-01 01:00:00.999900 00000E100F41DC +1970-01-01 01:00:00.999990 1970-01-01 01:00:00.999990 00000E100F4236 +1970-01-01 01:00:00.999999 1970-01-01 01:00:00.999999 00000E100F423F +2001-01-01 23:59:58.000001 2001-01-01 23:59:58.000001 3A5119FE000001 +2001-01-01 23:59:58.000008 2001-01-01 23:59:58.000008 3A5119FE000008 +2001-01-01 23:59:58.000015 2001-01-01 23:59:58.000015 3A5119FE00000F +2001-01-01 23:59:58.000016 2001-01-01 23:59:58.000016 3A5119FE000010 +2001-01-01 23:59:58.000099 2001-01-01 23:59:58.000099 3A5119FE000063 +2001-01-01 23:59:58.000999 2001-01-01 23:59:58.000999 3A5119FE0003E7 +2001-01-01 23:59:58.009999 2001-01-01 23:59:58.009999 3A5119FE00270F +2001-01-01 23:59:58.099999 2001-01-01 23:59:58.099999 3A5119FE01869F +2001-01-01 23:59:58.100000 2001-01-01 23:59:58.100000 3A5119FE0186A0 +2001-01-01 23:59:58.900000 2001-01-01 23:59:58.900000 3A5119FE0DBBA0 +2001-01-01 23:59:58.990000 2001-01-01 23:59:58.990000 3A5119FE0F1B30 +2001-01-01 23:59:58.999000 2001-01-01 23:59:58.999000 3A5119FE0F3E58 +2001-01-01 23:59:58.999900 2001-01-01 23:59:58.999900 3A5119FE0F41DC +2001-01-01 23:59:58.999990 2001-01-01 23:59:58.999990 3A5119FE0F4236 +2001-01-01 23:59:58.999999 2001-01-01 23:59:58.999999 3A5119FE0F423F +2001-01-01 23:59:59.000000 2001-01-01 23:59:59.000000 3A5119FF000000 +2037-01-01 23:59:58.000001 2037-01-01 23:59:58.000001 7E08357E000001 +2037-01-01 23:59:58.000008 2037-01-01 23:59:58.000008 7E08357E000008 +2037-01-01 23:59:58.000015 2037-01-01 23:59:58.000015 7E08357E00000F +2037-01-01 23:59:58.000016 2037-01-01 23:59:58.000016 7E08357E000010 +2037-01-01 23:59:58.000099 2037-01-01 23:59:58.000099 7E08357E000063 +2037-01-01 23:59:58.000999 2037-01-01 23:59:58.000999 7E08357E0003E7 +2037-01-01 23:59:58.009999 2037-01-01 23:59:58.009999 7E08357E00270F +2037-01-01 23:59:58.099999 2037-01-01 23:59:58.099999 7E08357E01869F +2037-01-01 23:59:58.100000 2037-01-01 23:59:58.100000 7E08357E0186A0 +2037-01-01 23:59:58.900000 2037-01-01 23:59:58.900000 7E08357E0DBBA0 +2037-01-01 23:59:58.990000 2037-01-01 23:59:58.990000 7E08357E0F1B30 +2037-01-01 23:59:58.999000 2037-01-01 23:59:58.999000 7E08357E0F3E58 +2037-01-01 23:59:58.999900 2037-01-01 23:59:58.999900 7E08357E0F41DC +2037-01-01 23:59:58.999990 2037-01-01 23:59:58.999990 7E08357E0F4236 +2037-01-01 23:59:58.999999 2037-01-01 23:59:58.999999 7E08357E0F423F +2037-01-01 23:59:59.000000 2037-01-01 23:59:59.000000 7E08357F000000 +SELECT a5, d5, HEX(WEIGHT_STRING(d5)) FROM t1 ORDER BY d5, a6; +a5 d5 HEX(WEIGHT_STRING(d5)) +1970-01-01 00:00:01.00000 1970-01-01 00:00:01.00000 00000001000000 +1970-01-01 00:00:01.00000 1970-01-01 00:00:01.00000 00000001000000 +1970-01-01 00:00:01.00000 1970-01-01 00:00:01.00000 00000001000000 +1970-01-01 00:00:01.00000 1970-01-01 00:00:01.00000 00000001000000 +1970-01-01 00:00:01.00000 1970-01-01 00:00:01.00000 00000001000000 +1970-01-01 00:00:01.00000 1970-01-01 00:00:01.00000 00000001000000 +1970-01-01 00:00:01.00000 1970-01-01 00:00:01.00000 00000001000000 +1970-01-01 00:00:01.00000 1970-01-01 00:00:01.00000 00000001000000 +1970-01-01 00:00:01.00000 1970-01-01 00:00:01.00000 00000001000000 +1970-01-01 00:00:01.00000 1970-01-01 00:00:01.00000 00000001000000 +1970-01-01 00:00:01.00001 1970-01-01 00:00:01.00001 0000000100000A +1970-01-01 00:00:01.00001 1970-01-01 00:00:01.00001 0000000100000A +1970-01-01 00:00:01.00001 1970-01-01 00:00:01.00001 0000000100000A +1970-01-01 00:00:01.00001 1970-01-01 00:00:01.00001 0000000100000A +1970-01-01 00:00:01.00001 1970-01-01 00:00:01.00001 0000000100000A +1970-01-01 00:00:01.00001 1970-01-01 00:00:01.00001 0000000100000A +1970-01-01 00:00:01.00001 1970-01-01 00:00:01.00001 0000000100000A +1970-01-01 00:00:01.00009 1970-01-01 00:00:01.00009 0000000100005A +1970-01-01 00:00:01.00099 1970-01-01 00:00:01.00099 000000010003DE +1970-01-01 00:00:01.00999 1970-01-01 00:00:01.00999 00000001002706 +1970-01-01 00:00:01.09999 1970-01-01 00:00:01.09999 00000001018696 +1970-01-01 00:00:01.10000 1970-01-01 00:00:01.10000 000000010186A0 +1970-01-01 00:00:01.90000 1970-01-01 00:00:01.90000 000000010DBBA0 +1970-01-01 00:00:01.99000 1970-01-01 00:00:01.99000 000000010F1B30 +1970-01-01 00:00:01.99900 1970-01-01 00:00:01.99900 000000010F3E58 +1970-01-01 00:00:01.99990 1970-01-01 00:00:01.99990 000000010F41DC +1970-01-01 00:00:01.99999 1970-01-01 00:00:01.99999 000000010F4236 +1970-01-01 00:00:01.99999 1970-01-01 00:00:01.99999 000000010F4236 +1970-01-01 00:00:02.00000 1970-01-01 00:00:02.00000 00000002000000 +1970-01-01 00:00:02.00000 1970-01-01 00:00:02.00000 00000002000000 +1970-01-01 00:00:02.00000 1970-01-01 00:00:02.00000 00000002000000 +1970-01-01 00:00:02.00000 1970-01-01 00:00:02.00000 00000002000000 +1970-01-01 00:00:02.00000 1970-01-01 00:00:02.00000 00000002000000 +1970-01-01 00:00:02.00000 1970-01-01 00:00:02.00000 00000002000000 +1970-01-01 00:00:02.00000 1970-01-01 00:00:02.00000 00000002000000 +1970-01-01 00:00:02.00000 1970-01-01 00:00:02.00000 00000002000000 +1970-01-01 00:00:02.00000 1970-01-01 00:00:02.00000 00000002000000 +1970-01-01 00:00:02.00000 1970-01-01 00:00:02.00000 00000002000000 +1970-01-01 00:00:02.00001 1970-01-01 00:00:02.00001 0000000200000A +1970-01-01 00:00:02.00001 1970-01-01 00:00:02.00001 0000000200000A +1970-01-01 00:00:02.00001 1970-01-01 00:00:02.00001 0000000200000A +1970-01-01 00:00:02.00001 1970-01-01 00:00:02.00001 0000000200000A +1970-01-01 00:00:02.00001 1970-01-01 00:00:02.00001 0000000200000A +1970-01-01 00:00:02.00001 1970-01-01 00:00:02.00001 0000000200000A +1970-01-01 00:00:02.00001 1970-01-01 00:00:02.00001 0000000200000A +1970-01-01 00:00:02.00009 1970-01-01 00:00:02.00009 0000000200005A +1970-01-01 00:00:02.00099 1970-01-01 00:00:02.00099 000000020003DE +1970-01-01 00:00:02.00999 1970-01-01 00:00:02.00999 00000002002706 +1970-01-01 00:00:02.09000 1970-01-01 00:00:02.09000 00000002015F90 +1970-01-01 00:00:02.09999 1970-01-01 00:00:02.09999 00000002018696 +1970-01-01 00:00:02.10000 1970-01-01 00:00:02.10000 000000020186A0 +1970-01-01 00:00:02.90000 1970-01-01 00:00:02.90000 000000020DBBA0 +1970-01-01 00:00:02.99000 1970-01-01 00:00:02.99000 000000020F1B30 +1970-01-01 00:00:02.99900 1970-01-01 00:00:02.99900 000000020F3E58 +1970-01-01 00:00:02.99990 1970-01-01 00:00:02.99990 000000020F41DC +1970-01-01 00:00:02.99999 1970-01-01 00:00:02.99999 000000020F4236 +1970-01-01 00:00:02.99999 1970-01-01 00:00:02.99999 000000020F4236 +1970-01-01 00:01:00.00000 1970-01-01 00:01:00.00000 0000003C000000 +1970-01-01 00:01:00.00000 1970-01-01 00:01:00.00000 0000003C000000 +1970-01-01 00:01:00.00001 1970-01-01 00:01:00.00001 0000003C00000A +1970-01-01 00:01:00.00001 1970-01-01 00:01:00.00001 0000003C00000A +1970-01-01 00:01:00.00009 1970-01-01 00:01:00.00009 0000003C00005A +1970-01-01 00:01:00.00099 1970-01-01 00:01:00.00099 0000003C0003DE +1970-01-01 00:01:00.00999 1970-01-01 00:01:00.00999 0000003C002706 +1970-01-01 00:01:00.09999 1970-01-01 00:01:00.09999 0000003C018696 +1970-01-01 00:01:00.10000 1970-01-01 00:01:00.10000 0000003C0186A0 +1970-01-01 00:01:00.90000 1970-01-01 00:01:00.90000 0000003C0DBBA0 +1970-01-01 00:01:00.99999 1970-01-01 00:01:00.99999 0000003C0F4236 +1970-01-01 01:00:00.00000 1970-01-01 01:00:00.00000 00000E10000000 +1970-01-01 01:00:00.00000 1970-01-01 01:00:00.00000 00000E10000000 +1970-01-01 01:00:00.00001 1970-01-01 01:00:00.00001 00000E1000000A +1970-01-01 01:00:00.00001 1970-01-01 01:00:00.00001 00000E1000000A +1970-01-01 01:00:00.00009 1970-01-01 01:00:00.00009 00000E1000005A +1970-01-01 01:00:00.00099 1970-01-01 01:00:00.00099 00000E100003DE +1970-01-01 01:00:00.00999 1970-01-01 01:00:00.00999 00000E10002706 +1970-01-01 01:00:00.09999 1970-01-01 01:00:00.09999 00000E10018696 +1970-01-01 01:00:00.10000 1970-01-01 01:00:00.10000 00000E100186A0 +1970-01-01 01:00:00.90000 1970-01-01 01:00:00.90000 00000E100DBBA0 +1970-01-01 01:00:00.99000 1970-01-01 01:00:00.99000 00000E100F1B30 +1970-01-01 01:00:00.99900 1970-01-01 01:00:00.99900 00000E100F3E58 +1970-01-01 01:00:00.99990 1970-01-01 01:00:00.99990 00000E100F41DC +1970-01-01 01:00:00.99999 1970-01-01 01:00:00.99999 00000E100F4236 +1970-01-01 01:00:00.99999 1970-01-01 01:00:00.99999 00000E100F4236 +2001-01-01 23:59:58.00000 2001-01-01 23:59:58.00000 3A5119FE000000 +2001-01-01 23:59:58.00000 2001-01-01 23:59:58.00000 3A5119FE000000 +2001-01-01 23:59:58.00001 2001-01-01 23:59:58.00001 3A5119FE00000A +2001-01-01 23:59:58.00001 2001-01-01 23:59:58.00001 3A5119FE00000A +2001-01-01 23:59:58.00009 2001-01-01 23:59:58.00009 3A5119FE00005A +2001-01-01 23:59:58.00099 2001-01-01 23:59:58.00099 3A5119FE0003DE +2001-01-01 23:59:58.00999 2001-01-01 23:59:58.00999 3A5119FE002706 +2001-01-01 23:59:58.09999 2001-01-01 23:59:58.09999 3A5119FE018696 +2001-01-01 23:59:58.10000 2001-01-01 23:59:58.10000 3A5119FE0186A0 +2001-01-01 23:59:58.90000 2001-01-01 23:59:58.90000 3A5119FE0DBBA0 +2001-01-01 23:59:58.99000 2001-01-01 23:59:58.99000 3A5119FE0F1B30 +2001-01-01 23:59:58.99900 2001-01-01 23:59:58.99900 3A5119FE0F3E58 +2001-01-01 23:59:58.99990 2001-01-01 23:59:58.99990 3A5119FE0F41DC +2001-01-01 23:59:58.99999 2001-01-01 23:59:58.99999 3A5119FE0F4236 +2001-01-01 23:59:58.99999 2001-01-01 23:59:58.99999 3A5119FE0F4236 +2001-01-01 23:59:59.00000 2001-01-01 23:59:59.00000 3A5119FF000000 +2037-01-01 23:59:58.00000 2037-01-01 23:59:58.00000 7E08357E000000 +2037-01-01 23:59:58.00000 2037-01-01 23:59:58.00000 7E08357E000000 +2037-01-01 23:59:58.00001 2037-01-01 23:59:58.00001 7E08357E00000A +2037-01-01 23:59:58.00001 2037-01-01 23:59:58.00001 7E08357E00000A +2037-01-01 23:59:58.00009 2037-01-01 23:59:58.00009 7E08357E00005A +2037-01-01 23:59:58.00099 2037-01-01 23:59:58.00099 7E08357E0003DE +2037-01-01 23:59:58.00999 2037-01-01 23:59:58.00999 7E08357E002706 +2037-01-01 23:59:58.09999 2037-01-01 23:59:58.09999 7E08357E018696 +2037-01-01 23:59:58.10000 2037-01-01 23:59:58.10000 7E08357E0186A0 +2037-01-01 23:59:58.90000 2037-01-01 23:59:58.90000 7E08357E0DBBA0 +2037-01-01 23:59:58.99000 2037-01-01 23:59:58.99000 7E08357E0F1B30 +2037-01-01 23:59:58.99900 2037-01-01 23:59:58.99900 7E08357E0F3E58 +2037-01-01 23:59:58.99990 2037-01-01 23:59:58.99990 7E08357E0F41DC +2037-01-01 23:59:58.99999 2037-01-01 23:59:58.99999 7E08357E0F4236 +2037-01-01 23:59:58.99999 2037-01-01 23:59:58.99999 7E08357E0F4236 +2037-01-01 23:59:59.00000 2037-01-01 23:59:59.00000 7E08357F000000 +SELECT a4, d4, HEX(WEIGHT_STRING(d4)) FROM t1 ORDER BY d4, a6; +a4 d4 HEX(WEIGHT_STRING(d4)) +1970-01-01 00:00:01.0000 1970-01-01 00:00:01.0000 000000010000 +1970-01-01 00:00:01.0000 1970-01-01 00:00:01.0000 000000010000 +1970-01-01 00:00:01.0000 1970-01-01 00:00:01.0000 000000010000 +1970-01-01 00:00:01.0000 1970-01-01 00:00:01.0000 000000010000 +1970-01-01 00:00:01.0000 1970-01-01 00:00:01.0000 000000010000 +1970-01-01 00:00:01.0000 1970-01-01 00:00:01.0000 000000010000 +1970-01-01 00:00:01.0000 1970-01-01 00:00:01.0000 000000010000 +1970-01-01 00:00:01.0000 1970-01-01 00:00:01.0000 000000010000 +1970-01-01 00:00:01.0000 1970-01-01 00:00:01.0000 000000010000 +1970-01-01 00:00:01.0000 1970-01-01 00:00:01.0000 000000010000 +1970-01-01 00:00:01.0000 1970-01-01 00:00:01.0000 000000010000 +1970-01-01 00:00:01.0000 1970-01-01 00:00:01.0000 000000010000 +1970-01-01 00:00:01.0000 1970-01-01 00:00:01.0000 000000010000 +1970-01-01 00:00:01.0000 1970-01-01 00:00:01.0000 000000010000 +1970-01-01 00:00:01.0000 1970-01-01 00:00:01.0000 000000010000 +1970-01-01 00:00:01.0000 1970-01-01 00:00:01.0000 000000010000 +1970-01-01 00:00:01.0000 1970-01-01 00:00:01.0000 000000010000 +1970-01-01 00:00:01.0000 1970-01-01 00:00:01.0000 000000010000 +1970-01-01 00:00:01.0009 1970-01-01 00:00:01.0009 000000010009 +1970-01-01 00:00:01.0099 1970-01-01 00:00:01.0099 000000010063 +1970-01-01 00:00:01.0999 1970-01-01 00:00:01.0999 0000000103E7 +1970-01-01 00:00:01.1000 1970-01-01 00:00:01.1000 0000000103E8 +1970-01-01 00:00:01.9000 1970-01-01 00:00:01.9000 000000012328 +1970-01-01 00:00:01.9900 1970-01-01 00:00:01.9900 0000000126AC +1970-01-01 00:00:01.9990 1970-01-01 00:00:01.9990 000000012706 +1970-01-01 00:00:01.9999 1970-01-01 00:00:01.9999 00000001270F +1970-01-01 00:00:01.9999 1970-01-01 00:00:01.9999 00000001270F +1970-01-01 00:00:01.9999 1970-01-01 00:00:01.9999 00000001270F +1970-01-01 00:00:02.0000 1970-01-01 00:00:02.0000 000000020000 +1970-01-01 00:00:02.0000 1970-01-01 00:00:02.0000 000000020000 +1970-01-01 00:00:02.0000 1970-01-01 00:00:02.0000 000000020000 +1970-01-01 00:00:02.0000 1970-01-01 00:00:02.0000 000000020000 +1970-01-01 00:00:02.0000 1970-01-01 00:00:02.0000 000000020000 +1970-01-01 00:00:02.0000 1970-01-01 00:00:02.0000 000000020000 +1970-01-01 00:00:02.0000 1970-01-01 00:00:02.0000 000000020000 +1970-01-01 00:00:02.0000 1970-01-01 00:00:02.0000 000000020000 +1970-01-01 00:00:02.0000 1970-01-01 00:00:02.0000 000000020000 +1970-01-01 00:00:02.0000 1970-01-01 00:00:02.0000 000000020000 +1970-01-01 00:00:02.0000 1970-01-01 00:00:02.0000 000000020000 +1970-01-01 00:00:02.0000 1970-01-01 00:00:02.0000 000000020000 +1970-01-01 00:00:02.0000 1970-01-01 00:00:02.0000 000000020000 +1970-01-01 00:00:02.0000 1970-01-01 00:00:02.0000 000000020000 +1970-01-01 00:00:02.0000 1970-01-01 00:00:02.0000 000000020000 +1970-01-01 00:00:02.0000 1970-01-01 00:00:02.0000 000000020000 +1970-01-01 00:00:02.0000 1970-01-01 00:00:02.0000 000000020000 +1970-01-01 00:00:02.0000 1970-01-01 00:00:02.0000 000000020000 +1970-01-01 00:00:02.0009 1970-01-01 00:00:02.0009 000000020009 +1970-01-01 00:00:02.0099 1970-01-01 00:00:02.0099 000000020063 +1970-01-01 00:00:02.0900 1970-01-01 00:00:02.0900 000000020384 +1970-01-01 00:00:02.0999 1970-01-01 00:00:02.0999 0000000203E7 +1970-01-01 00:00:02.1000 1970-01-01 00:00:02.1000 0000000203E8 +1970-01-01 00:00:02.9000 1970-01-01 00:00:02.9000 000000022328 +1970-01-01 00:00:02.9900 1970-01-01 00:00:02.9900 0000000226AC +1970-01-01 00:00:02.9990 1970-01-01 00:00:02.9990 000000022706 +1970-01-01 00:00:02.9999 1970-01-01 00:00:02.9999 00000002270F +1970-01-01 00:00:02.9999 1970-01-01 00:00:02.9999 00000002270F +1970-01-01 00:00:02.9999 1970-01-01 00:00:02.9999 00000002270F +1970-01-01 00:01:00.0000 1970-01-01 00:01:00.0000 0000003C0000 +1970-01-01 00:01:00.0000 1970-01-01 00:01:00.0000 0000003C0000 +1970-01-01 00:01:00.0000 1970-01-01 00:01:00.0000 0000003C0000 +1970-01-01 00:01:00.0000 1970-01-01 00:01:00.0000 0000003C0000 +1970-01-01 00:01:00.0000 1970-01-01 00:01:00.0000 0000003C0000 +1970-01-01 00:01:00.0009 1970-01-01 00:01:00.0009 0000003C0009 +1970-01-01 00:01:00.0099 1970-01-01 00:01:00.0099 0000003C0063 +1970-01-01 00:01:00.0999 1970-01-01 00:01:00.0999 0000003C03E7 +1970-01-01 00:01:00.1000 1970-01-01 00:01:00.1000 0000003C03E8 +1970-01-01 00:01:00.9000 1970-01-01 00:01:00.9000 0000003C2328 +1970-01-01 00:01:00.9999 1970-01-01 00:01:00.9999 0000003C270F +1970-01-01 01:00:00.0000 1970-01-01 01:00:00.0000 00000E100000 +1970-01-01 01:00:00.0000 1970-01-01 01:00:00.0000 00000E100000 +1970-01-01 01:00:00.0000 1970-01-01 01:00:00.0000 00000E100000 +1970-01-01 01:00:00.0000 1970-01-01 01:00:00.0000 00000E100000 +1970-01-01 01:00:00.0000 1970-01-01 01:00:00.0000 00000E100000 +1970-01-01 01:00:00.0009 1970-01-01 01:00:00.0009 00000E100009 +1970-01-01 01:00:00.0099 1970-01-01 01:00:00.0099 00000E100063 +1970-01-01 01:00:00.0999 1970-01-01 01:00:00.0999 00000E1003E7 +1970-01-01 01:00:00.1000 1970-01-01 01:00:00.1000 00000E1003E8 +1970-01-01 01:00:00.9000 1970-01-01 01:00:00.9000 00000E102328 +1970-01-01 01:00:00.9900 1970-01-01 01:00:00.9900 00000E1026AC +1970-01-01 01:00:00.9990 1970-01-01 01:00:00.9990 00000E102706 +1970-01-01 01:00:00.9999 1970-01-01 01:00:00.9999 00000E10270F +1970-01-01 01:00:00.9999 1970-01-01 01:00:00.9999 00000E10270F +1970-01-01 01:00:00.9999 1970-01-01 01:00:00.9999 00000E10270F +2001-01-01 23:59:58.0000 2001-01-01 23:59:58.0000 3A5119FE0000 +2001-01-01 23:59:58.0000 2001-01-01 23:59:58.0000 3A5119FE0000 +2001-01-01 23:59:58.0000 2001-01-01 23:59:58.0000 3A5119FE0000 +2001-01-01 23:59:58.0000 2001-01-01 23:59:58.0000 3A5119FE0000 +2001-01-01 23:59:58.0000 2001-01-01 23:59:58.0000 3A5119FE0000 +2001-01-01 23:59:58.0009 2001-01-01 23:59:58.0009 3A5119FE0009 +2001-01-01 23:59:58.0099 2001-01-01 23:59:58.0099 3A5119FE0063 +2001-01-01 23:59:58.0999 2001-01-01 23:59:58.0999 3A5119FE03E7 +2001-01-01 23:59:58.1000 2001-01-01 23:59:58.1000 3A5119FE03E8 +2001-01-01 23:59:58.9000 2001-01-01 23:59:58.9000 3A5119FE2328 +2001-01-01 23:59:58.9900 2001-01-01 23:59:58.9900 3A5119FE26AC +2001-01-01 23:59:58.9990 2001-01-01 23:59:58.9990 3A5119FE2706 +2001-01-01 23:59:58.9999 2001-01-01 23:59:58.9999 3A5119FE270F +2001-01-01 23:59:58.9999 2001-01-01 23:59:58.9999 3A5119FE270F +2001-01-01 23:59:58.9999 2001-01-01 23:59:58.9999 3A5119FE270F +2001-01-01 23:59:59.0000 2001-01-01 23:59:59.0000 3A5119FF0000 +2037-01-01 23:59:58.0000 2037-01-01 23:59:58.0000 7E08357E0000 +2037-01-01 23:59:58.0000 2037-01-01 23:59:58.0000 7E08357E0000 +2037-01-01 23:59:58.0000 2037-01-01 23:59:58.0000 7E08357E0000 +2037-01-01 23:59:58.0000 2037-01-01 23:59:58.0000 7E08357E0000 +2037-01-01 23:59:58.0000 2037-01-01 23:59:58.0000 7E08357E0000 +2037-01-01 23:59:58.0009 2037-01-01 23:59:58.0009 7E08357E0009 +2037-01-01 23:59:58.0099 2037-01-01 23:59:58.0099 7E08357E0063 +2037-01-01 23:59:58.0999 2037-01-01 23:59:58.0999 7E08357E03E7 +2037-01-01 23:59:58.1000 2037-01-01 23:59:58.1000 7E08357E03E8 +2037-01-01 23:59:58.9000 2037-01-01 23:59:58.9000 7E08357E2328 +2037-01-01 23:59:58.9900 2037-01-01 23:59:58.9900 7E08357E26AC +2037-01-01 23:59:58.9990 2037-01-01 23:59:58.9990 7E08357E2706 +2037-01-01 23:59:58.9999 2037-01-01 23:59:58.9999 7E08357E270F +2037-01-01 23:59:58.9999 2037-01-01 23:59:58.9999 7E08357E270F +2037-01-01 23:59:58.9999 2037-01-01 23:59:58.9999 7E08357E270F +2037-01-01 23:59:59.0000 2037-01-01 23:59:59.0000 7E08357F0000 +SELECT a3, d3, HEX(WEIGHT_STRING(d3)) FROM t1 ORDER BY d3, a6; +a3 d3 HEX(WEIGHT_STRING(d3)) +1970-01-01 00:00:01.000 1970-01-01 00:00:01.000 000000010000 +1970-01-01 00:00:01.000 1970-01-01 00:00:01.000 000000010000 +1970-01-01 00:00:01.000 1970-01-01 00:00:01.000 000000010000 +1970-01-01 00:00:01.000 1970-01-01 00:00:01.000 000000010000 +1970-01-01 00:00:01.000 1970-01-01 00:00:01.000 000000010000 +1970-01-01 00:00:01.000 1970-01-01 00:00:01.000 000000010000 +1970-01-01 00:00:01.000 1970-01-01 00:00:01.000 000000010000 +1970-01-01 00:00:01.000 1970-01-01 00:00:01.000 000000010000 +1970-01-01 00:00:01.000 1970-01-01 00:00:01.000 000000010000 +1970-01-01 00:00:01.000 1970-01-01 00:00:01.000 000000010000 +1970-01-01 00:00:01.000 1970-01-01 00:00:01.000 000000010000 +1970-01-01 00:00:01.000 1970-01-01 00:00:01.000 000000010000 +1970-01-01 00:00:01.000 1970-01-01 00:00:01.000 000000010000 +1970-01-01 00:00:01.000 1970-01-01 00:00:01.000 000000010000 +1970-01-01 00:00:01.000 1970-01-01 00:00:01.000 000000010000 +1970-01-01 00:00:01.000 1970-01-01 00:00:01.000 000000010000 +1970-01-01 00:00:01.000 1970-01-01 00:00:01.000 000000010000 +1970-01-01 00:00:01.000 1970-01-01 00:00:01.000 000000010000 +1970-01-01 00:00:01.000 1970-01-01 00:00:01.000 000000010000 +1970-01-01 00:00:01.009 1970-01-01 00:00:01.009 00000001005A +1970-01-01 00:00:01.099 1970-01-01 00:00:01.099 0000000103DE +1970-01-01 00:00:01.100 1970-01-01 00:00:01.100 0000000103E8 +1970-01-01 00:00:01.900 1970-01-01 00:00:01.900 000000012328 +1970-01-01 00:00:01.990 1970-01-01 00:00:01.990 0000000126AC +1970-01-01 00:00:01.999 1970-01-01 00:00:01.999 000000012706 +1970-01-01 00:00:01.999 1970-01-01 00:00:01.999 000000012706 +1970-01-01 00:00:01.999 1970-01-01 00:00:01.999 000000012706 +1970-01-01 00:00:01.999 1970-01-01 00:00:01.999 000000012706 +1970-01-01 00:00:02.000 1970-01-01 00:00:02.000 000000020000 +1970-01-01 00:00:02.000 1970-01-01 00:00:02.000 000000020000 +1970-01-01 00:00:02.000 1970-01-01 00:00:02.000 000000020000 +1970-01-01 00:00:02.000 1970-01-01 00:00:02.000 000000020000 +1970-01-01 00:00:02.000 1970-01-01 00:00:02.000 000000020000 +1970-01-01 00:00:02.000 1970-01-01 00:00:02.000 000000020000 +1970-01-01 00:00:02.000 1970-01-01 00:00:02.000 000000020000 +1970-01-01 00:00:02.000 1970-01-01 00:00:02.000 000000020000 +1970-01-01 00:00:02.000 1970-01-01 00:00:02.000 000000020000 +1970-01-01 00:00:02.000 1970-01-01 00:00:02.000 000000020000 +1970-01-01 00:00:02.000 1970-01-01 00:00:02.000 000000020000 +1970-01-01 00:00:02.000 1970-01-01 00:00:02.000 000000020000 +1970-01-01 00:00:02.000 1970-01-01 00:00:02.000 000000020000 +1970-01-01 00:00:02.000 1970-01-01 00:00:02.000 000000020000 +1970-01-01 00:00:02.000 1970-01-01 00:00:02.000 000000020000 +1970-01-01 00:00:02.000 1970-01-01 00:00:02.000 000000020000 +1970-01-01 00:00:02.000 1970-01-01 00:00:02.000 000000020000 +1970-01-01 00:00:02.000 1970-01-01 00:00:02.000 000000020000 +1970-01-01 00:00:02.000 1970-01-01 00:00:02.000 000000020000 +1970-01-01 00:00:02.009 1970-01-01 00:00:02.009 00000002005A +1970-01-01 00:00:02.090 1970-01-01 00:00:02.090 000000020384 +1970-01-01 00:00:02.099 1970-01-01 00:00:02.099 0000000203DE +1970-01-01 00:00:02.100 1970-01-01 00:00:02.100 0000000203E8 +1970-01-01 00:00:02.900 1970-01-01 00:00:02.900 000000022328 +1970-01-01 00:00:02.990 1970-01-01 00:00:02.990 0000000226AC +1970-01-01 00:00:02.999 1970-01-01 00:00:02.999 000000022706 +1970-01-01 00:00:02.999 1970-01-01 00:00:02.999 000000022706 +1970-01-01 00:00:02.999 1970-01-01 00:00:02.999 000000022706 +1970-01-01 00:00:02.999 1970-01-01 00:00:02.999 000000022706 +1970-01-01 00:01:00.000 1970-01-01 00:01:00.000 0000003C0000 +1970-01-01 00:01:00.000 1970-01-01 00:01:00.000 0000003C0000 +1970-01-01 00:01:00.000 1970-01-01 00:01:00.000 0000003C0000 +1970-01-01 00:01:00.000 1970-01-01 00:01:00.000 0000003C0000 +1970-01-01 00:01:00.000 1970-01-01 00:01:00.000 0000003C0000 +1970-01-01 00:01:00.000 1970-01-01 00:01:00.000 0000003C0000 +1970-01-01 00:01:00.009 1970-01-01 00:01:00.009 0000003C005A +1970-01-01 00:01:00.099 1970-01-01 00:01:00.099 0000003C03DE +1970-01-01 00:01:00.100 1970-01-01 00:01:00.100 0000003C03E8 +1970-01-01 00:01:00.900 1970-01-01 00:01:00.900 0000003C2328 +1970-01-01 00:01:00.999 1970-01-01 00:01:00.999 0000003C2706 +1970-01-01 01:00:00.000 1970-01-01 01:00:00.000 00000E100000 +1970-01-01 01:00:00.000 1970-01-01 01:00:00.000 00000E100000 +1970-01-01 01:00:00.000 1970-01-01 01:00:00.000 00000E100000 +1970-01-01 01:00:00.000 1970-01-01 01:00:00.000 00000E100000 +1970-01-01 01:00:00.000 1970-01-01 01:00:00.000 00000E100000 +1970-01-01 01:00:00.000 1970-01-01 01:00:00.000 00000E100000 +1970-01-01 01:00:00.009 1970-01-01 01:00:00.009 00000E10005A +1970-01-01 01:00:00.099 1970-01-01 01:00:00.099 00000E1003DE +1970-01-01 01:00:00.100 1970-01-01 01:00:00.100 00000E1003E8 +1970-01-01 01:00:00.900 1970-01-01 01:00:00.900 00000E102328 +1970-01-01 01:00:00.990 1970-01-01 01:00:00.990 00000E1026AC +1970-01-01 01:00:00.999 1970-01-01 01:00:00.999 00000E102706 +1970-01-01 01:00:00.999 1970-01-01 01:00:00.999 00000E102706 +1970-01-01 01:00:00.999 1970-01-01 01:00:00.999 00000E102706 +1970-01-01 01:00:00.999 1970-01-01 01:00:00.999 00000E102706 +2001-01-01 23:59:58.000 2001-01-01 23:59:58.000 3A5119FE0000 +2001-01-01 23:59:58.000 2001-01-01 23:59:58.000 3A5119FE0000 +2001-01-01 23:59:58.000 2001-01-01 23:59:58.000 3A5119FE0000 +2001-01-01 23:59:58.000 2001-01-01 23:59:58.000 3A5119FE0000 +2001-01-01 23:59:58.000 2001-01-01 23:59:58.000 3A5119FE0000 +2001-01-01 23:59:58.000 2001-01-01 23:59:58.000 3A5119FE0000 +2001-01-01 23:59:58.009 2001-01-01 23:59:58.009 3A5119FE005A +2001-01-01 23:59:58.099 2001-01-01 23:59:58.099 3A5119FE03DE +2001-01-01 23:59:58.100 2001-01-01 23:59:58.100 3A5119FE03E8 +2001-01-01 23:59:58.900 2001-01-01 23:59:58.900 3A5119FE2328 +2001-01-01 23:59:58.990 2001-01-01 23:59:58.990 3A5119FE26AC +2001-01-01 23:59:58.999 2001-01-01 23:59:58.999 3A5119FE2706 +2001-01-01 23:59:58.999 2001-01-01 23:59:58.999 3A5119FE2706 +2001-01-01 23:59:58.999 2001-01-01 23:59:58.999 3A5119FE2706 +2001-01-01 23:59:58.999 2001-01-01 23:59:58.999 3A5119FE2706 +2001-01-01 23:59:59.000 2001-01-01 23:59:59.000 3A5119FF0000 +2037-01-01 23:59:58.000 2037-01-01 23:59:58.000 7E08357E0000 +2037-01-01 23:59:58.000 2037-01-01 23:59:58.000 7E08357E0000 +2037-01-01 23:59:58.000 2037-01-01 23:59:58.000 7E08357E0000 +2037-01-01 23:59:58.000 2037-01-01 23:59:58.000 7E08357E0000 +2037-01-01 23:59:58.000 2037-01-01 23:59:58.000 7E08357E0000 +2037-01-01 23:59:58.000 2037-01-01 23:59:58.000 7E08357E0000 +2037-01-01 23:59:58.009 2037-01-01 23:59:58.009 7E08357E005A +2037-01-01 23:59:58.099 2037-01-01 23:59:58.099 7E08357E03DE +2037-01-01 23:59:58.100 2037-01-01 23:59:58.100 7E08357E03E8 +2037-01-01 23:59:58.900 2037-01-01 23:59:58.900 7E08357E2328 +2037-01-01 23:59:58.990 2037-01-01 23:59:58.990 7E08357E26AC +2037-01-01 23:59:58.999 2037-01-01 23:59:58.999 7E08357E2706 +2037-01-01 23:59:58.999 2037-01-01 23:59:58.999 7E08357E2706 +2037-01-01 23:59:58.999 2037-01-01 23:59:58.999 7E08357E2706 +2037-01-01 23:59:58.999 2037-01-01 23:59:58.999 7E08357E2706 +2037-01-01 23:59:59.000 2037-01-01 23:59:59.000 7E08357F0000 +SELECT a2, d2, HEX(WEIGHT_STRING(d2)) FROM t1 ORDER BY d2, a6; +a2 d2 HEX(WEIGHT_STRING(d2)) +1970-01-01 00:00:01.00 1970-01-01 00:00:01.00 0000000100 +1970-01-01 00:00:01.00 1970-01-01 00:00:01.00 0000000100 +1970-01-01 00:00:01.00 1970-01-01 00:00:01.00 0000000100 +1970-01-01 00:00:01.00 1970-01-01 00:00:01.00 0000000100 +1970-01-01 00:00:01.00 1970-01-01 00:00:01.00 0000000100 +1970-01-01 00:00:01.00 1970-01-01 00:00:01.00 0000000100 +1970-01-01 00:00:01.00 1970-01-01 00:00:01.00 0000000100 +1970-01-01 00:00:01.00 1970-01-01 00:00:01.00 0000000100 +1970-01-01 00:00:01.00 1970-01-01 00:00:01.00 0000000100 +1970-01-01 00:00:01.00 1970-01-01 00:00:01.00 0000000100 +1970-01-01 00:00:01.00 1970-01-01 00:00:01.00 0000000100 +1970-01-01 00:00:01.00 1970-01-01 00:00:01.00 0000000100 +1970-01-01 00:00:01.00 1970-01-01 00:00:01.00 0000000100 +1970-01-01 00:00:01.00 1970-01-01 00:00:01.00 0000000100 +1970-01-01 00:00:01.00 1970-01-01 00:00:01.00 0000000100 +1970-01-01 00:00:01.00 1970-01-01 00:00:01.00 0000000100 +1970-01-01 00:00:01.00 1970-01-01 00:00:01.00 0000000100 +1970-01-01 00:00:01.00 1970-01-01 00:00:01.00 0000000100 +1970-01-01 00:00:01.00 1970-01-01 00:00:01.00 0000000100 +1970-01-01 00:00:01.00 1970-01-01 00:00:01.00 0000000100 +1970-01-01 00:00:01.09 1970-01-01 00:00:01.09 0000000109 +1970-01-01 00:00:01.10 1970-01-01 00:00:01.10 000000010A +1970-01-01 00:00:01.90 1970-01-01 00:00:01.90 000000015A +1970-01-01 00:00:01.99 1970-01-01 00:00:01.99 0000000163 +1970-01-01 00:00:01.99 1970-01-01 00:00:01.99 0000000163 +1970-01-01 00:00:01.99 1970-01-01 00:00:01.99 0000000163 +1970-01-01 00:00:01.99 1970-01-01 00:00:01.99 0000000163 +1970-01-01 00:00:01.99 1970-01-01 00:00:01.99 0000000163 +1970-01-01 00:00:02.00 1970-01-01 00:00:02.00 0000000200 +1970-01-01 00:00:02.00 1970-01-01 00:00:02.00 0000000200 +1970-01-01 00:00:02.00 1970-01-01 00:00:02.00 0000000200 +1970-01-01 00:00:02.00 1970-01-01 00:00:02.00 0000000200 +1970-01-01 00:00:02.00 1970-01-01 00:00:02.00 0000000200 +1970-01-01 00:00:02.00 1970-01-01 00:00:02.00 0000000200 +1970-01-01 00:00:02.00 1970-01-01 00:00:02.00 0000000200 +1970-01-01 00:00:02.00 1970-01-01 00:00:02.00 0000000200 +1970-01-01 00:00:02.00 1970-01-01 00:00:02.00 0000000200 +1970-01-01 00:00:02.00 1970-01-01 00:00:02.00 0000000200 +1970-01-01 00:00:02.00 1970-01-01 00:00:02.00 0000000200 +1970-01-01 00:00:02.00 1970-01-01 00:00:02.00 0000000200 +1970-01-01 00:00:02.00 1970-01-01 00:00:02.00 0000000200 +1970-01-01 00:00:02.00 1970-01-01 00:00:02.00 0000000200 +1970-01-01 00:00:02.00 1970-01-01 00:00:02.00 0000000200 +1970-01-01 00:00:02.00 1970-01-01 00:00:02.00 0000000200 +1970-01-01 00:00:02.00 1970-01-01 00:00:02.00 0000000200 +1970-01-01 00:00:02.00 1970-01-01 00:00:02.00 0000000200 +1970-01-01 00:00:02.00 1970-01-01 00:00:02.00 0000000200 +1970-01-01 00:00:02.00 1970-01-01 00:00:02.00 0000000200 +1970-01-01 00:00:02.09 1970-01-01 00:00:02.09 0000000209 +1970-01-01 00:00:02.09 1970-01-01 00:00:02.09 0000000209 +1970-01-01 00:00:02.10 1970-01-01 00:00:02.10 000000020A +1970-01-01 00:00:02.90 1970-01-01 00:00:02.90 000000025A +1970-01-01 00:00:02.99 1970-01-01 00:00:02.99 0000000263 +1970-01-01 00:00:02.99 1970-01-01 00:00:02.99 0000000263 +1970-01-01 00:00:02.99 1970-01-01 00:00:02.99 0000000263 +1970-01-01 00:00:02.99 1970-01-01 00:00:02.99 0000000263 +1970-01-01 00:00:02.99 1970-01-01 00:00:02.99 0000000263 +1970-01-01 00:01:00.00 1970-01-01 00:01:00.00 0000003C00 +1970-01-01 00:01:00.00 1970-01-01 00:01:00.00 0000003C00 +1970-01-01 00:01:00.00 1970-01-01 00:01:00.00 0000003C00 +1970-01-01 00:01:00.00 1970-01-01 00:01:00.00 0000003C00 +1970-01-01 00:01:00.00 1970-01-01 00:01:00.00 0000003C00 +1970-01-01 00:01:00.00 1970-01-01 00:01:00.00 0000003C00 +1970-01-01 00:01:00.00 1970-01-01 00:01:00.00 0000003C00 +1970-01-01 00:01:00.09 1970-01-01 00:01:00.09 0000003C09 +1970-01-01 00:01:00.10 1970-01-01 00:01:00.10 0000003C0A +1970-01-01 00:01:00.90 1970-01-01 00:01:00.90 0000003C5A +1970-01-01 00:01:00.99 1970-01-01 00:01:00.99 0000003C63 +1970-01-01 01:00:00.00 1970-01-01 01:00:00.00 00000E1000 +1970-01-01 01:00:00.00 1970-01-01 01:00:00.00 00000E1000 +1970-01-01 01:00:00.00 1970-01-01 01:00:00.00 00000E1000 +1970-01-01 01:00:00.00 1970-01-01 01:00:00.00 00000E1000 +1970-01-01 01:00:00.00 1970-01-01 01:00:00.00 00000E1000 +1970-01-01 01:00:00.00 1970-01-01 01:00:00.00 00000E1000 +1970-01-01 01:00:00.00 1970-01-01 01:00:00.00 00000E1000 +1970-01-01 01:00:00.09 1970-01-01 01:00:00.09 00000E1009 +1970-01-01 01:00:00.10 1970-01-01 01:00:00.10 00000E100A +1970-01-01 01:00:00.90 1970-01-01 01:00:00.90 00000E105A +1970-01-01 01:00:00.99 1970-01-01 01:00:00.99 00000E1063 +1970-01-01 01:00:00.99 1970-01-01 01:00:00.99 00000E1063 +1970-01-01 01:00:00.99 1970-01-01 01:00:00.99 00000E1063 +1970-01-01 01:00:00.99 1970-01-01 01:00:00.99 00000E1063 +1970-01-01 01:00:00.99 1970-01-01 01:00:00.99 00000E1063 +2001-01-01 23:59:58.00 2001-01-01 23:59:58.00 3A5119FE00 +2001-01-01 23:59:58.00 2001-01-01 23:59:58.00 3A5119FE00 +2001-01-01 23:59:58.00 2001-01-01 23:59:58.00 3A5119FE00 +2001-01-01 23:59:58.00 2001-01-01 23:59:58.00 3A5119FE00 +2001-01-01 23:59:58.00 2001-01-01 23:59:58.00 3A5119FE00 +2001-01-01 23:59:58.00 2001-01-01 23:59:58.00 3A5119FE00 +2001-01-01 23:59:58.00 2001-01-01 23:59:58.00 3A5119FE00 +2001-01-01 23:59:58.09 2001-01-01 23:59:58.09 3A5119FE09 +2001-01-01 23:59:58.10 2001-01-01 23:59:58.10 3A5119FE0A +2001-01-01 23:59:58.90 2001-01-01 23:59:58.90 3A5119FE5A +2001-01-01 23:59:58.99 2001-01-01 23:59:58.99 3A5119FE63 +2001-01-01 23:59:58.99 2001-01-01 23:59:58.99 3A5119FE63 +2001-01-01 23:59:58.99 2001-01-01 23:59:58.99 3A5119FE63 +2001-01-01 23:59:58.99 2001-01-01 23:59:58.99 3A5119FE63 +2001-01-01 23:59:58.99 2001-01-01 23:59:58.99 3A5119FE63 +2001-01-01 23:59:59.00 2001-01-01 23:59:59.00 3A5119FF00 +2037-01-01 23:59:58.00 2037-01-01 23:59:58.00 7E08357E00 +2037-01-01 23:59:58.00 2037-01-01 23:59:58.00 7E08357E00 +2037-01-01 23:59:58.00 2037-01-01 23:59:58.00 7E08357E00 +2037-01-01 23:59:58.00 2037-01-01 23:59:58.00 7E08357E00 +2037-01-01 23:59:58.00 2037-01-01 23:59:58.00 7E08357E00 +2037-01-01 23:59:58.00 2037-01-01 23:59:58.00 7E08357E00 +2037-01-01 23:59:58.00 2037-01-01 23:59:58.00 7E08357E00 +2037-01-01 23:59:58.09 2037-01-01 23:59:58.09 7E08357E09 +2037-01-01 23:59:58.10 2037-01-01 23:59:58.10 7E08357E0A +2037-01-01 23:59:58.90 2037-01-01 23:59:58.90 7E08357E5A +2037-01-01 23:59:58.99 2037-01-01 23:59:58.99 7E08357E63 +2037-01-01 23:59:58.99 2037-01-01 23:59:58.99 7E08357E63 +2037-01-01 23:59:58.99 2037-01-01 23:59:58.99 7E08357E63 +2037-01-01 23:59:58.99 2037-01-01 23:59:58.99 7E08357E63 +2037-01-01 23:59:58.99 2037-01-01 23:59:58.99 7E08357E63 +2037-01-01 23:59:59.00 2037-01-01 23:59:59.00 7E08357F00 +SELECT a1, d1, HEX(WEIGHT_STRING(d1)) FROM t1 ORDER BY d1, a6; +a1 d1 HEX(WEIGHT_STRING(d1)) +1970-01-01 00:00:01.0 1970-01-01 00:00:01.0 0000000100 +1970-01-01 00:00:01.0 1970-01-01 00:00:01.0 0000000100 +1970-01-01 00:00:01.0 1970-01-01 00:00:01.0 0000000100 +1970-01-01 00:00:01.0 1970-01-01 00:00:01.0 0000000100 +1970-01-01 00:00:01.0 1970-01-01 00:00:01.0 0000000100 +1970-01-01 00:00:01.0 1970-01-01 00:00:01.0 0000000100 +1970-01-01 00:00:01.0 1970-01-01 00:00:01.0 0000000100 +1970-01-01 00:00:01.0 1970-01-01 00:00:01.0 0000000100 +1970-01-01 00:00:01.0 1970-01-01 00:00:01.0 0000000100 +1970-01-01 00:00:01.0 1970-01-01 00:00:01.0 0000000100 +1970-01-01 00:00:01.0 1970-01-01 00:00:01.0 0000000100 +1970-01-01 00:00:01.0 1970-01-01 00:00:01.0 0000000100 +1970-01-01 00:00:01.0 1970-01-01 00:00:01.0 0000000100 +1970-01-01 00:00:01.0 1970-01-01 00:00:01.0 0000000100 +1970-01-01 00:00:01.0 1970-01-01 00:00:01.0 0000000100 +1970-01-01 00:00:01.0 1970-01-01 00:00:01.0 0000000100 +1970-01-01 00:00:01.0 1970-01-01 00:00:01.0 0000000100 +1970-01-01 00:00:01.0 1970-01-01 00:00:01.0 0000000100 +1970-01-01 00:00:01.0 1970-01-01 00:00:01.0 0000000100 +1970-01-01 00:00:01.0 1970-01-01 00:00:01.0 0000000100 +1970-01-01 00:00:01.0 1970-01-01 00:00:01.0 0000000100 +1970-01-01 00:00:01.1 1970-01-01 00:00:01.1 000000010A +1970-01-01 00:00:01.9 1970-01-01 00:00:01.9 000000015A +1970-01-01 00:00:01.9 1970-01-01 00:00:01.9 000000015A +1970-01-01 00:00:01.9 1970-01-01 00:00:01.9 000000015A +1970-01-01 00:00:01.9 1970-01-01 00:00:01.9 000000015A +1970-01-01 00:00:01.9 1970-01-01 00:00:01.9 000000015A +1970-01-01 00:00:01.9 1970-01-01 00:00:01.9 000000015A +1970-01-01 00:00:02.0 1970-01-01 00:00:02.0 0000000200 +1970-01-01 00:00:02.0 1970-01-01 00:00:02.0 0000000200 +1970-01-01 00:00:02.0 1970-01-01 00:00:02.0 0000000200 +1970-01-01 00:00:02.0 1970-01-01 00:00:02.0 0000000200 +1970-01-01 00:00:02.0 1970-01-01 00:00:02.0 0000000200 +1970-01-01 00:00:02.0 1970-01-01 00:00:02.0 0000000200 +1970-01-01 00:00:02.0 1970-01-01 00:00:02.0 0000000200 +1970-01-01 00:00:02.0 1970-01-01 00:00:02.0 0000000200 +1970-01-01 00:00:02.0 1970-01-01 00:00:02.0 0000000200 +1970-01-01 00:00:02.0 1970-01-01 00:00:02.0 0000000200 +1970-01-01 00:00:02.0 1970-01-01 00:00:02.0 0000000200 +1970-01-01 00:00:02.0 1970-01-01 00:00:02.0 0000000200 +1970-01-01 00:00:02.0 1970-01-01 00:00:02.0 0000000200 +1970-01-01 00:00:02.0 1970-01-01 00:00:02.0 0000000200 +1970-01-01 00:00:02.0 1970-01-01 00:00:02.0 0000000200 +1970-01-01 00:00:02.0 1970-01-01 00:00:02.0 0000000200 +1970-01-01 00:00:02.0 1970-01-01 00:00:02.0 0000000200 +1970-01-01 00:00:02.0 1970-01-01 00:00:02.0 0000000200 +1970-01-01 00:00:02.0 1970-01-01 00:00:02.0 0000000200 +1970-01-01 00:00:02.0 1970-01-01 00:00:02.0 0000000200 +1970-01-01 00:00:02.0 1970-01-01 00:00:02.0 0000000200 +1970-01-01 00:00:02.0 1970-01-01 00:00:02.0 0000000200 +1970-01-01 00:00:02.1 1970-01-01 00:00:02.1 000000020A +1970-01-01 00:00:02.9 1970-01-01 00:00:02.9 000000025A +1970-01-01 00:00:02.9 1970-01-01 00:00:02.9 000000025A +1970-01-01 00:00:02.9 1970-01-01 00:00:02.9 000000025A +1970-01-01 00:00:02.9 1970-01-01 00:00:02.9 000000025A +1970-01-01 00:00:02.9 1970-01-01 00:00:02.9 000000025A +1970-01-01 00:00:02.9 1970-01-01 00:00:02.9 000000025A +1970-01-01 00:01:00.0 1970-01-01 00:01:00.0 0000003C00 +1970-01-01 00:01:00.0 1970-01-01 00:01:00.0 0000003C00 +1970-01-01 00:01:00.0 1970-01-01 00:01:00.0 0000003C00 +1970-01-01 00:01:00.0 1970-01-01 00:01:00.0 0000003C00 +1970-01-01 00:01:00.0 1970-01-01 00:01:00.0 0000003C00 +1970-01-01 00:01:00.0 1970-01-01 00:01:00.0 0000003C00 +1970-01-01 00:01:00.0 1970-01-01 00:01:00.0 0000003C00 +1970-01-01 00:01:00.0 1970-01-01 00:01:00.0 0000003C00 +1970-01-01 00:01:00.1 1970-01-01 00:01:00.1 0000003C0A +1970-01-01 00:01:00.9 1970-01-01 00:01:00.9 0000003C5A +1970-01-01 00:01:00.9 1970-01-01 00:01:00.9 0000003C5A +1970-01-01 01:00:00.0 1970-01-01 01:00:00.0 00000E1000 +1970-01-01 01:00:00.0 1970-01-01 01:00:00.0 00000E1000 +1970-01-01 01:00:00.0 1970-01-01 01:00:00.0 00000E1000 +1970-01-01 01:00:00.0 1970-01-01 01:00:00.0 00000E1000 +1970-01-01 01:00:00.0 1970-01-01 01:00:00.0 00000E1000 +1970-01-01 01:00:00.0 1970-01-01 01:00:00.0 00000E1000 +1970-01-01 01:00:00.0 1970-01-01 01:00:00.0 00000E1000 +1970-01-01 01:00:00.0 1970-01-01 01:00:00.0 00000E1000 +1970-01-01 01:00:00.1 1970-01-01 01:00:00.1 00000E100A +1970-01-01 01:00:00.9 1970-01-01 01:00:00.9 00000E105A +1970-01-01 01:00:00.9 1970-01-01 01:00:00.9 00000E105A +1970-01-01 01:00:00.9 1970-01-01 01:00:00.9 00000E105A +1970-01-01 01:00:00.9 1970-01-01 01:00:00.9 00000E105A +1970-01-01 01:00:00.9 1970-01-01 01:00:00.9 00000E105A +1970-01-01 01:00:00.9 1970-01-01 01:00:00.9 00000E105A +2001-01-01 23:59:58.0 2001-01-01 23:59:58.0 3A5119FE00 +2001-01-01 23:59:58.0 2001-01-01 23:59:58.0 3A5119FE00 +2001-01-01 23:59:58.0 2001-01-01 23:59:58.0 3A5119FE00 +2001-01-01 23:59:58.0 2001-01-01 23:59:58.0 3A5119FE00 +2001-01-01 23:59:58.0 2001-01-01 23:59:58.0 3A5119FE00 +2001-01-01 23:59:58.0 2001-01-01 23:59:58.0 3A5119FE00 +2001-01-01 23:59:58.0 2001-01-01 23:59:58.0 3A5119FE00 +2001-01-01 23:59:58.0 2001-01-01 23:59:58.0 3A5119FE00 +2001-01-01 23:59:58.1 2001-01-01 23:59:58.1 3A5119FE0A +2001-01-01 23:59:58.9 2001-01-01 23:59:58.9 3A5119FE5A +2001-01-01 23:59:58.9 2001-01-01 23:59:58.9 3A5119FE5A +2001-01-01 23:59:58.9 2001-01-01 23:59:58.9 3A5119FE5A +2001-01-01 23:59:58.9 2001-01-01 23:59:58.9 3A5119FE5A +2001-01-01 23:59:58.9 2001-01-01 23:59:58.9 3A5119FE5A +2001-01-01 23:59:58.9 2001-01-01 23:59:58.9 3A5119FE5A +2001-01-01 23:59:59.0 2001-01-01 23:59:59.0 3A5119FF00 +2037-01-01 23:59:58.0 2037-01-01 23:59:58.0 7E08357E00 +2037-01-01 23:59:58.0 2037-01-01 23:59:58.0 7E08357E00 +2037-01-01 23:59:58.0 2037-01-01 23:59:58.0 7E08357E00 +2037-01-01 23:59:58.0 2037-01-01 23:59:58.0 7E08357E00 +2037-01-01 23:59:58.0 2037-01-01 23:59:58.0 7E08357E00 +2037-01-01 23:59:58.0 2037-01-01 23:59:58.0 7E08357E00 +2037-01-01 23:59:58.0 2037-01-01 23:59:58.0 7E08357E00 +2037-01-01 23:59:58.0 2037-01-01 23:59:58.0 7E08357E00 +2037-01-01 23:59:58.1 2037-01-01 23:59:58.1 7E08357E0A +2037-01-01 23:59:58.9 2037-01-01 23:59:58.9 7E08357E5A +2037-01-01 23:59:58.9 2037-01-01 23:59:58.9 7E08357E5A +2037-01-01 23:59:58.9 2037-01-01 23:59:58.9 7E08357E5A +2037-01-01 23:59:58.9 2037-01-01 23:59:58.9 7E08357E5A +2037-01-01 23:59:58.9 2037-01-01 23:59:58.9 7E08357E5A +2037-01-01 23:59:58.9 2037-01-01 23:59:58.9 7E08357E5A +2037-01-01 23:59:59.0 2037-01-01 23:59:59.0 7E08357F00 +SELECT a0, d0, HEX(WEIGHT_STRING(d0)) FROM t1 ORDER BY d0, a6; +a0 d0 HEX(WEIGHT_STRING(d0)) +1970-01-01 00:00:01. 1970-01-01 00:00:01 00000001 +1970-01-01 00:00:01. 1970-01-01 00:00:01 00000001 +1970-01-01 00:00:01. 1970-01-01 00:00:01 00000001 +1970-01-01 00:00:01. 1970-01-01 00:00:01 00000001 +1970-01-01 00:00:01. 1970-01-01 00:00:01 00000001 +1970-01-01 00:00:01. 1970-01-01 00:00:01 00000001 +1970-01-01 00:00:01. 1970-01-01 00:00:01 00000001 +1970-01-01 00:00:01. 1970-01-01 00:00:01 00000001 +1970-01-01 00:00:01. 1970-01-01 00:00:01 00000001 +1970-01-01 00:00:01. 1970-01-01 00:00:01 00000001 +1970-01-01 00:00:01. 1970-01-01 00:00:01 00000001 +1970-01-01 00:00:01. 1970-01-01 00:00:01 00000001 +1970-01-01 00:00:01. 1970-01-01 00:00:01 00000001 +1970-01-01 00:00:01. 1970-01-01 00:00:01 00000001 +1970-01-01 00:00:01. 1970-01-01 00:00:01 00000001 +1970-01-01 00:00:01. 1970-01-01 00:00:01 00000001 +1970-01-01 00:00:01. 1970-01-01 00:00:01 00000001 +1970-01-01 00:00:01. 1970-01-01 00:00:01 00000001 +1970-01-01 00:00:01. 1970-01-01 00:00:01 00000001 +1970-01-01 00:00:01. 1970-01-01 00:00:01 00000001 +1970-01-01 00:00:01. 1970-01-01 00:00:01 00000001 +1970-01-01 00:00:01. 1970-01-01 00:00:01 00000001 +1970-01-01 00:00:01. 1970-01-01 00:00:01 00000001 +1970-01-01 00:00:01. 1970-01-01 00:00:01 00000001 +1970-01-01 00:00:01. 1970-01-01 00:00:01 00000001 +1970-01-01 00:00:01. 1970-01-01 00:00:01 00000001 +1970-01-01 00:00:01. 1970-01-01 00:00:01 00000001 +1970-01-01 00:00:01. 1970-01-01 00:00:01 00000001 +1970-01-01 00:00:02. 1970-01-01 00:00:02 00000002 +1970-01-01 00:00:02. 1970-01-01 00:00:02 00000002 +1970-01-01 00:00:02. 1970-01-01 00:00:02 00000002 +1970-01-01 00:00:02. 1970-01-01 00:00:02 00000002 +1970-01-01 00:00:02. 1970-01-01 00:00:02 00000002 +1970-01-01 00:00:02. 1970-01-01 00:00:02 00000002 +1970-01-01 00:00:02. 1970-01-01 00:00:02 00000002 +1970-01-01 00:00:02. 1970-01-01 00:00:02 00000002 +1970-01-01 00:00:02. 1970-01-01 00:00:02 00000002 +1970-01-01 00:00:02. 1970-01-01 00:00:02 00000002 +1970-01-01 00:00:02. 1970-01-01 00:00:02 00000002 +1970-01-01 00:00:02. 1970-01-01 00:00:02 00000002 +1970-01-01 00:00:02. 1970-01-01 00:00:02 00000002 +1970-01-01 00:00:02. 1970-01-01 00:00:02 00000002 +1970-01-01 00:00:02. 1970-01-01 00:00:02 00000002 +1970-01-01 00:00:02. 1970-01-01 00:00:02 00000002 +1970-01-01 00:00:02. 1970-01-01 00:00:02 00000002 +1970-01-01 00:00:02. 1970-01-01 00:00:02 00000002 +1970-01-01 00:00:02. 1970-01-01 00:00:02 00000002 +1970-01-01 00:00:02. 1970-01-01 00:00:02 00000002 +1970-01-01 00:00:02. 1970-01-01 00:00:02 00000002 +1970-01-01 00:00:02. 1970-01-01 00:00:02 00000002 +1970-01-01 00:00:02. 1970-01-01 00:00:02 00000002 +1970-01-01 00:00:02. 1970-01-01 00:00:02 00000002 +1970-01-01 00:00:02. 1970-01-01 00:00:02 00000002 +1970-01-01 00:00:02. 1970-01-01 00:00:02 00000002 +1970-01-01 00:00:02. 1970-01-01 00:00:02 00000002 +1970-01-01 00:00:02. 1970-01-01 00:00:02 00000002 +1970-01-01 00:00:02. 1970-01-01 00:00:02 00000002 +1970-01-01 00:01:00. 1970-01-01 00:01:00 0000003C +1970-01-01 00:01:00. 1970-01-01 00:01:00 0000003C +1970-01-01 00:01:00. 1970-01-01 00:01:00 0000003C +1970-01-01 00:01:00. 1970-01-01 00:01:00 0000003C +1970-01-01 00:01:00. 1970-01-01 00:01:00 0000003C +1970-01-01 00:01:00. 1970-01-01 00:01:00 0000003C +1970-01-01 00:01:00. 1970-01-01 00:01:00 0000003C +1970-01-01 00:01:00. 1970-01-01 00:01:00 0000003C +1970-01-01 00:01:00. 1970-01-01 00:01:00 0000003C +1970-01-01 00:01:00. 1970-01-01 00:01:00 0000003C +1970-01-01 00:01:00. 1970-01-01 00:01:00 0000003C +1970-01-01 01:00:00. 1970-01-01 01:00:00 00000E10 +1970-01-01 01:00:00. 1970-01-01 01:00:00 00000E10 +1970-01-01 01:00:00. 1970-01-01 01:00:00 00000E10 +1970-01-01 01:00:00. 1970-01-01 01:00:00 00000E10 +1970-01-01 01:00:00. 1970-01-01 01:00:00 00000E10 +1970-01-01 01:00:00. 1970-01-01 01:00:00 00000E10 +1970-01-01 01:00:00. 1970-01-01 01:00:00 00000E10 +1970-01-01 01:00:00. 1970-01-01 01:00:00 00000E10 +1970-01-01 01:00:00. 1970-01-01 01:00:00 00000E10 +1970-01-01 01:00:00. 1970-01-01 01:00:00 00000E10 +1970-01-01 01:00:00. 1970-01-01 01:00:00 00000E10 +1970-01-01 01:00:00. 1970-01-01 01:00:00 00000E10 +1970-01-01 01:00:00. 1970-01-01 01:00:00 00000E10 +1970-01-01 01:00:00. 1970-01-01 01:00:00 00000E10 +1970-01-01 01:00:00. 1970-01-01 01:00:00 00000E10 +2001-01-01 23:59:58. 2001-01-01 23:59:58 3A5119FE +2001-01-01 23:59:58. 2001-01-01 23:59:58 3A5119FE +2001-01-01 23:59:58. 2001-01-01 23:59:58 3A5119FE +2001-01-01 23:59:58. 2001-01-01 23:59:58 3A5119FE +2001-01-01 23:59:58. 2001-01-01 23:59:58 3A5119FE +2001-01-01 23:59:58. 2001-01-01 23:59:58 3A5119FE +2001-01-01 23:59:58. 2001-01-01 23:59:58 3A5119FE +2001-01-01 23:59:58. 2001-01-01 23:59:58 3A5119FE +2001-01-01 23:59:58. 2001-01-01 23:59:58 3A5119FE +2001-01-01 23:59:58. 2001-01-01 23:59:58 3A5119FE +2001-01-01 23:59:58. 2001-01-01 23:59:58 3A5119FE +2001-01-01 23:59:58. 2001-01-01 23:59:58 3A5119FE +2001-01-01 23:59:58. 2001-01-01 23:59:58 3A5119FE +2001-01-01 23:59:58. 2001-01-01 23:59:58 3A5119FE +2001-01-01 23:59:58. 2001-01-01 23:59:58 3A5119FE +2001-01-01 23:59:59. 2001-01-01 23:59:59 3A5119FF +2037-01-01 23:59:58. 2037-01-01 23:59:58 7E08357E +2037-01-01 23:59:58. 2037-01-01 23:59:58 7E08357E +2037-01-01 23:59:58. 2037-01-01 23:59:58 7E08357E +2037-01-01 23:59:58. 2037-01-01 23:59:58 7E08357E +2037-01-01 23:59:58. 2037-01-01 23:59:58 7E08357E +2037-01-01 23:59:58. 2037-01-01 23:59:58 7E08357E +2037-01-01 23:59:58. 2037-01-01 23:59:58 7E08357E +2037-01-01 23:59:58. 2037-01-01 23:59:58 7E08357E +2037-01-01 23:59:58. 2037-01-01 23:59:58 7E08357E +2037-01-01 23:59:58. 2037-01-01 23:59:58 7E08357E +2037-01-01 23:59:58. 2037-01-01 23:59:58 7E08357E +2037-01-01 23:59:58. 2037-01-01 23:59:58 7E08357E +2037-01-01 23:59:58. 2037-01-01 23:59:58 7E08357E +2037-01-01 23:59:58. 2037-01-01 23:59:58 7E08357E +2037-01-01 23:59:58. 2037-01-01 23:59:58 7E08357E +2037-01-01 23:59:59. 2037-01-01 23:59:59 7E08357F +CREATE VIEW v1 AS +SELECT a6, d0, d1, d2, d3, d4, d5, d6, +HEX(WEIGHT_STRING(d0)) as wst0, +HEX(WEIGHT_STRING(d1)) as wst1, +HEX(WEIGHT_STRING(d2)) as wst2, +HEX(WEIGHT_STRING(d3)) as wst3, +HEX(WEIGHT_STRING(d4)) as wst4, +HEX(WEIGHT_STRING(d5)) as wst5, +HEX(WEIGHT_STRING(d6)) as wst6 +FROM t1; +SELECT * FROM v1 WHERE a6 LIKE '%.999999' ORDER BY a6, d6;; +a6 1970-01-01 00:00:01.999999 +d0 1970-01-01 00:00:01 +d1 1970-01-01 00:00:01.9 +d2 1970-01-01 00:00:01.99 +d3 1970-01-01 00:00:01.999 +d4 1970-01-01 00:00:01.9999 +d5 1970-01-01 00:00:01.99999 +d6 1970-01-01 00:00:01.999999 +wst0 00000001 +wst1 000000015A +wst2 0000000163 +wst3 000000012706 +wst4 00000001270F +wst5 000000010F4236 +wst6 000000010F423F +a6 1970-01-01 00:00:02.999999 +d0 1970-01-01 00:00:02 +d1 1970-01-01 00:00:02.9 +d2 1970-01-01 00:00:02.99 +d3 1970-01-01 00:00:02.999 +d4 1970-01-01 00:00:02.9999 +d5 1970-01-01 00:00:02.99999 +d6 1970-01-01 00:00:02.999999 +wst0 00000002 +wst1 000000025A +wst2 0000000263 +wst3 000000022706 +wst4 00000002270F +wst5 000000020F4236 +wst6 000000020F423F +a6 1970-01-01 00:01:00.999999 +d0 1970-01-01 00:01:00 +d1 1970-01-01 00:01:00.9 +d2 1970-01-01 00:01:00.99 +d3 1970-01-01 00:01:00.999 +d4 1970-01-01 00:01:00.9999 +d5 1970-01-01 00:01:00.99999 +d6 1970-01-01 00:01:00.999999 +wst0 0000003C +wst1 0000003C5A +wst2 0000003C63 +wst3 0000003C2706 +wst4 0000003C270F +wst5 0000003C0F4236 +wst6 0000003C0F423F +a6 1970-01-01 01:00:00.999999 +d0 1970-01-01 01:00:00 +d1 1970-01-01 01:00:00.9 +d2 1970-01-01 01:00:00.99 +d3 1970-01-01 01:00:00.999 +d4 1970-01-01 01:00:00.9999 +d5 1970-01-01 01:00:00.99999 +d6 1970-01-01 01:00:00.999999 +wst0 00000E10 +wst1 00000E105A +wst2 00000E1063 +wst3 00000E102706 +wst4 00000E10270F +wst5 00000E100F4236 +wst6 00000E100F423F +a6 2001-01-01 23:59:58.999999 +d0 2001-01-01 23:59:58 +d1 2001-01-01 23:59:58.9 +d2 2001-01-01 23:59:58.99 +d3 2001-01-01 23:59:58.999 +d4 2001-01-01 23:59:58.9999 +d5 2001-01-01 23:59:58.99999 +d6 2001-01-01 23:59:58.999999 +wst0 3A5119FE +wst1 3A5119FE5A +wst2 3A5119FE63 +wst3 3A5119FE2706 +wst4 3A5119FE270F +wst5 3A5119FE0F4236 +wst6 3A5119FE0F423F +a6 2037-01-01 23:59:58.999999 +d0 2037-01-01 23:59:58 +d1 2037-01-01 23:59:58.9 +d2 2037-01-01 23:59:58.99 +d3 2037-01-01 23:59:58.999 +d4 2037-01-01 23:59:58.9999 +d5 2037-01-01 23:59:58.99999 +d6 2037-01-01 23:59:58.999999 +wst0 7E08357E +wst1 7E08357E5A +wst2 7E08357E63 +wst3 7E08357E2706 +wst4 7E08357E270F +wst5 7E08357E0F4236 +wst6 7E08357E0F423F +SELECT * FROM v1 WHERE a6 LIKE '%.000000' ORDER BY a6, d6;; +a6 1970-01-01 00:00:01.000000 +d0 1970-01-01 00:00:01 +d1 1970-01-01 00:00:01.0 +d2 1970-01-01 00:00:01.00 +d3 1970-01-01 00:00:01.000 +d4 1970-01-01 00:00:01.0000 +d5 1970-01-01 00:00:01.00000 +d6 1970-01-01 00:00:01.000000 +wst0 00000001 +wst1 0000000100 +wst2 0000000100 +wst3 000000010000 +wst4 000000010000 +wst5 00000001000000 +wst6 00000001000000 +a6 1970-01-01 00:00:02.000000 +d0 1970-01-01 00:00:02 +d1 1970-01-01 00:00:02.0 +d2 1970-01-01 00:00:02.00 +d3 1970-01-01 00:00:02.000 +d4 1970-01-01 00:00:02.0000 +d5 1970-01-01 00:00:02.00000 +d6 1970-01-01 00:00:02.000000 +wst0 00000002 +wst1 0000000200 +wst2 0000000200 +wst3 000000020000 +wst4 000000020000 +wst5 00000002000000 +wst6 00000002000000 +a6 2001-01-01 23:59:59.000000 +d0 2001-01-01 23:59:59 +d1 2001-01-01 23:59:59.0 +d2 2001-01-01 23:59:59.00 +d3 2001-01-01 23:59:59.000 +d4 2001-01-01 23:59:59.0000 +d5 2001-01-01 23:59:59.00000 +d6 2001-01-01 23:59:59.000000 +wst0 3A5119FF +wst1 3A5119FF00 +wst2 3A5119FF00 +wst3 3A5119FF0000 +wst4 3A5119FF0000 +wst5 3A5119FF000000 +wst6 3A5119FF000000 +a6 2037-01-01 23:59:59.000000 +d0 2037-01-01 23:59:59 +d1 2037-01-01 23:59:59.0 +d2 2037-01-01 23:59:59.00 +d3 2037-01-01 23:59:59.000 +d4 2037-01-01 23:59:59.0000 +d5 2037-01-01 23:59:59.00000 +d6 2037-01-01 23:59:59.000000 +wst0 7E08357F +wst1 7E08357F00 +wst2 7E08357F00 +wst3 7E08357F0000 +wst4 7E08357F0000 +wst5 7E08357F000000 +wst6 7E08357F000000 +SELECT * FROM v1 WHERE a6 LIKE '%.100000' ORDER BY a6, d6;; +a6 1970-01-01 00:00:01.100000 +d0 1970-01-01 00:00:01 +d1 1970-01-01 00:00:01.1 +d2 1970-01-01 00:00:01.10 +d3 1970-01-01 00:00:01.100 +d4 1970-01-01 00:00:01.1000 +d5 1970-01-01 00:00:01.10000 +d6 1970-01-01 00:00:01.100000 +wst0 00000001 +wst1 000000010A +wst2 000000010A +wst3 0000000103E8 +wst4 0000000103E8 +wst5 000000010186A0 +wst6 000000010186A0 +a6 1970-01-01 00:00:02.100000 +d0 1970-01-01 00:00:02 +d1 1970-01-01 00:00:02.1 +d2 1970-01-01 00:00:02.10 +d3 1970-01-01 00:00:02.100 +d4 1970-01-01 00:00:02.1000 +d5 1970-01-01 00:00:02.10000 +d6 1970-01-01 00:00:02.100000 +wst0 00000002 +wst1 000000020A +wst2 000000020A +wst3 0000000203E8 +wst4 0000000203E8 +wst5 000000020186A0 +wst6 000000020186A0 +a6 1970-01-01 00:01:00.100000 +d0 1970-01-01 00:01:00 +d1 1970-01-01 00:01:00.1 +d2 1970-01-01 00:01:00.10 +d3 1970-01-01 00:01:00.100 +d4 1970-01-01 00:01:00.1000 +d5 1970-01-01 00:01:00.10000 +d6 1970-01-01 00:01:00.100000 +wst0 0000003C +wst1 0000003C0A +wst2 0000003C0A +wst3 0000003C03E8 +wst4 0000003C03E8 +wst5 0000003C0186A0 +wst6 0000003C0186A0 +a6 1970-01-01 01:00:00.100000 +d0 1970-01-01 01:00:00 +d1 1970-01-01 01:00:00.1 +d2 1970-01-01 01:00:00.10 +d3 1970-01-01 01:00:00.100 +d4 1970-01-01 01:00:00.1000 +d5 1970-01-01 01:00:00.10000 +d6 1970-01-01 01:00:00.100000 +wst0 00000E10 +wst1 00000E100A +wst2 00000E100A +wst3 00000E1003E8 +wst4 00000E1003E8 +wst5 00000E100186A0 +wst6 00000E100186A0 +a6 2001-01-01 23:59:58.100000 +d0 2001-01-01 23:59:58 +d1 2001-01-01 23:59:58.1 +d2 2001-01-01 23:59:58.10 +d3 2001-01-01 23:59:58.100 +d4 2001-01-01 23:59:58.1000 +d5 2001-01-01 23:59:58.10000 +d6 2001-01-01 23:59:58.100000 +wst0 3A5119FE +wst1 3A5119FE0A +wst2 3A5119FE0A +wst3 3A5119FE03E8 +wst4 3A5119FE03E8 +wst5 3A5119FE0186A0 +wst6 3A5119FE0186A0 +a6 2037-01-01 23:59:58.100000 +d0 2037-01-01 23:59:58 +d1 2037-01-01 23:59:58.1 +d2 2037-01-01 23:59:58.10 +d3 2037-01-01 23:59:58.100 +d4 2037-01-01 23:59:58.1000 +d5 2037-01-01 23:59:58.10000 +d6 2037-01-01 23:59:58.100000 +wst0 7E08357E +wst1 7E08357E0A +wst2 7E08357E0A +wst3 7E08357E03E8 +wst4 7E08357E03E8 +wst5 7E08357E0186A0 +wst6 7E08357E0186A0 +DROP VIEW v1; +DROP TABLE t1; +SET time_zone=default; +# +# Testing bad FSPs +# +CREATE TABLE t1 (a TIMESTAMP(-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 1 +CREATE TABLE t1 (a TIMESTAMP(7)); +ERROR 42000: Too-big precision 7 specified for 'a'. Maximum is 6. +CREATE TABLE t1 (a TIMESTAMP(31)); +ERROR 42000: Too-big precision 31 specified for 'a'. Maximum is 6. +# +# Testing rounding when altering TIMESTAMP(N) to a smaller size +# +CREATE TABLE t1 (a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.999999'); +ALTER TABLE t1 MODIFY a TIMESTAMP(5); +SELECT * FROM t1; +a +2001-01-01 10:10:10.99999 +DROP TABLE t1; +CREATE TABLE t1 (a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)); +INSERT INTO t1 VALUES ('2001-01-01 10:10:10.999999'); +ALTER TABLE t1 MODIFY a TIME; +SELECT * FROM t1; +a +10:10:11 +DROP TABLE t1; +# +# Testing rounding from VARCHAR and DATETIME(6) to TIMESTAMP(N) +# +CREATE TABLE t1 (a VARCHAR(32), +t6 TIMESTAMP(6) NULL DEFAULT NULL, +t5 TIMESTAMP(5) NULL DEFAULT NULL, +t4 TIMESTAMP(4) NULL DEFAULT NULL, +t3 TIMESTAMP(3) NULL DEFAULT NULL, +t2 TIMESTAMP(2) NULL DEFAULT NULL, +t1 TIMESTAMP(1) NULL DEFAULT NULL, +t0 TIMESTAMP NULL DEFAULT NULL); +INSERT INTO t1 (a) VALUES ('2001-01-01 10:10:10.999999'); +INSERT INTO t1 (a) VALUES ('2001-01-01 10:10:10.999994'); +INSERT INTO t1 (a) VALUES ('2001-01-01 10:10:10.999949'); +INSERT INTO t1 (a) VALUES ('2001-01-01 10:10:10.999499'); +INSERT INTO t1 (a) VALUES ('2001-01-01 10:10:10.994999'); +INSERT INTO t1 (a) VALUES ('2001-01-01 10:10:10.949999'); +INSERT INTO t1 (a) VALUES ('2001-01-01 10:10:10.499999'); +UPDATE t1 SET t0=a, t1=a, t2=a, t3=a, t4=a, t5=a, t6=a; +SELECT * FROM t1;; +a 2001-01-01 10:10:10.999999 +t6 2001-01-01 10:10:10.999999 +t5 2001-01-01 10:10:11.00000 +t4 2001-01-01 10:10:11.0000 +t3 2001-01-01 10:10:11.000 +t2 2001-01-01 10:10:11.00 +t1 2001-01-01 10:10:11.0 +t0 2001-01-01 10:10:11 +a 2001-01-01 10:10:10.999994 +t6 2001-01-01 10:10:10.999994 +t5 2001-01-01 10:10:10.99999 +t4 2001-01-01 10:10:11.0000 +t3 2001-01-01 10:10:11.000 +t2 2001-01-01 10:10:11.00 +t1 2001-01-01 10:10:11.0 +t0 2001-01-01 10:10:11 +a 2001-01-01 10:10:10.999949 +t6 2001-01-01 10:10:10.999949 +t5 2001-01-01 10:10:10.99995 +t4 2001-01-01 10:10:10.9999 +t3 2001-01-01 10:10:11.000 +t2 2001-01-01 10:10:11.00 +t1 2001-01-01 10:10:11.0 +t0 2001-01-01 10:10:11 +a 2001-01-01 10:10:10.999499 +t6 2001-01-01 10:10:10.999499 +t5 2001-01-01 10:10:10.99950 +t4 2001-01-01 10:10:10.9995 +t3 2001-01-01 10:10:10.999 +t2 2001-01-01 10:10:11.00 +t1 2001-01-01 10:10:11.0 +t0 2001-01-01 10:10:11 +a 2001-01-01 10:10:10.994999 +t6 2001-01-01 10:10:10.994999 +t5 2001-01-01 10:10:10.99500 +t4 2001-01-01 10:10:10.9950 +t3 2001-01-01 10:10:10.995 +t2 2001-01-01 10:10:10.99 +t1 2001-01-01 10:10:11.0 +t0 2001-01-01 10:10:11 +a 2001-01-01 10:10:10.949999 +t6 2001-01-01 10:10:10.949999 +t5 2001-01-01 10:10:10.95000 +t4 2001-01-01 10:10:10.9500 +t3 2001-01-01 10:10:10.950 +t2 2001-01-01 10:10:10.95 +t1 2001-01-01 10:10:10.9 +t0 2001-01-01 10:10:11 +a 2001-01-01 10:10:10.499999 +t6 2001-01-01 10:10:10.499999 +t5 2001-01-01 10:10:10.50000 +t4 2001-01-01 10:10:10.5000 +t3 2001-01-01 10:10:10.500 +t2 2001-01-01 10:10:10.50 +t1 2001-01-01 10:10:10.5 +t0 2001-01-01 10:10:10 +ALTER TABLE t1 MODIFY a TIMESTAMP(6); +UPDATE t1 SET t0=a, t1=a, t2=a, t3=a, t4=a, t5=a, t6=a; +SELECT * FROM t1;; +a 2001-01-01 10:10:10.999999 +t6 2001-01-01 10:10:10.999999 +t5 2001-01-01 10:10:11.00000 +t4 2001-01-01 10:10:11.0000 +t3 2001-01-01 10:10:11.000 +t2 2001-01-01 10:10:11.00 +t1 2001-01-01 10:10:11.0 +t0 2001-01-01 10:10:11 +a 2001-01-01 10:10:10.999994 +t6 2001-01-01 10:10:10.999994 +t5 2001-01-01 10:10:10.99999 +t4 2001-01-01 10:10:11.0000 +t3 2001-01-01 10:10:11.000 +t2 2001-01-01 10:10:11.00 +t1 2001-01-01 10:10:11.0 +t0 2001-01-01 10:10:11 +a 2001-01-01 10:10:10.999949 +t6 2001-01-01 10:10:10.999949 +t5 2001-01-01 10:10:10.99995 +t4 2001-01-01 10:10:10.9999 +t3 2001-01-01 10:10:11.000 +t2 2001-01-01 10:10:11.00 +t1 2001-01-01 10:10:11.0 +t0 2001-01-01 10:10:11 +a 2001-01-01 10:10:10.999499 +t6 2001-01-01 10:10:10.999499 +t5 2001-01-01 10:10:10.99950 +t4 2001-01-01 10:10:10.9995 +t3 2001-01-01 10:10:10.999 +t2 2001-01-01 10:10:11.00 +t1 2001-01-01 10:10:11.0 +t0 2001-01-01 10:10:11 +a 2001-01-01 10:10:10.994999 +t6 2001-01-01 10:10:10.994999 +t5 2001-01-01 10:10:10.99500 +t4 2001-01-01 10:10:10.9950 +t3 2001-01-01 10:10:10.995 +t2 2001-01-01 10:10:10.99 +t1 2001-01-01 10:10:11.0 +t0 2001-01-01 10:10:11 +a 2001-01-01 10:10:10.949999 +t6 2001-01-01 10:10:10.949999 +t5 2001-01-01 10:10:10.95000 +t4 2001-01-01 10:10:10.9500 +t3 2001-01-01 10:10:10.950 +t2 2001-01-01 10:10:10.95 +t1 2001-01-01 10:10:10.9 +t0 2001-01-01 10:10:11 +a 2001-01-01 10:10:10.499999 +t6 2001-01-01 10:10:10.499999 +t5 2001-01-01 10:10:10.50000 +t4 2001-01-01 10:10:10.5000 +t3 2001-01-01 10:10:10.500 +t2 2001-01-01 10:10:10.50 +t1 2001-01-01 10:10:10.5 +t0 2001-01-01 10:10:10 +DROP TABLE t1; +# +# Testing rounding from TIMESTAMP(N) to BIGINT +# +CREATE TABLE t1 (a BIGINT, b TIMESTAMP(6) NULL DEFAULT NULL); +INSERT INTO t1 (b) VALUES ('2001-01-01 10:10:59.500000'); +INSERT INTO t1 (b) VALUES ('2001-01-01 10:10:10.500000'); +INSERT INTO t1 (b) VALUES ('2001-01-01 10:10:10.499999'); +UPDATE t1 SET a=b; +SELECT * FROM t1; +a b +20010101101100 2001-01-01 10:10:59.500000 +20010101101011 2001-01-01 10:10:10.500000 +20010101101010 2001-01-01 10:10:10.499999 +DROP TABLE t1; +# +# Testing rounding from TIME(6) to TIMESTAMP(N) +# +SET timestamp=UNIX_TIMESTAMP('2001-01-01 00:00:00'); +CREATE TABLE t1 (a TIME(6), +t6 TIMESTAMP(6) NULL, +t5 TIMESTAMP(5) NULL, +t4 TIMESTAMP(4) NULL, +t3 TIMESTAMP(3) NULL, +t2 TIMESTAMP(2) NULL, +t1 TIMESTAMP(1) NULL, +t0 TIMESTAMP NULL); +INSERT INTO t1 (a) VALUES ('10:10:10.999999'); +INSERT INTO t1 (a) VALUES ('10:10:10.999994'); +INSERT INTO t1 (a) VALUES ('10:10:10.999949'); +INSERT INTO t1 (a) VALUES ('10:10:10.999499'); +INSERT INTO t1 (a) VALUES ('10:10:10.994999'); +INSERT INTO t1 (a) VALUES ('10:10:10.949999'); +INSERT INTO t1 (a) VALUES ('10:10:10.499999'); +UPDATE t1 SET t0=a, t1=a, t2=a, t3=a, t4=a, t5=a, t6=a; +SELECT * FROM t1;; +a 10:10:10.999999 +t6 2001-01-01 10:10:10.999999 +t5 2001-01-01 10:10:11.00000 +t4 2001-01-01 10:10:11.0000 +t3 2001-01-01 10:10:11.000 +t2 2001-01-01 10:10:11.00 +t1 2001-01-01 10:10:11.0 +t0 2001-01-01 10:10:11 +a 10:10:10.999994 +t6 2001-01-01 10:10:10.999994 +t5 2001-01-01 10:10:10.99999 +t4 2001-01-01 10:10:11.0000 +t3 2001-01-01 10:10:11.000 +t2 2001-01-01 10:10:11.00 +t1 2001-01-01 10:10:11.0 +t0 2001-01-01 10:10:11 +a 10:10:10.999949 +t6 2001-01-01 10:10:10.999949 +t5 2001-01-01 10:10:10.99995 +t4 2001-01-01 10:10:10.9999 +t3 2001-01-01 10:10:11.000 +t2 2001-01-01 10:10:11.00 +t1 2001-01-01 10:10:11.0 +t0 2001-01-01 10:10:11 +a 10:10:10.999499 +t6 2001-01-01 10:10:10.999499 +t5 2001-01-01 10:10:10.99950 +t4 2001-01-01 10:10:10.9995 +t3 2001-01-01 10:10:10.999 +t2 2001-01-01 10:10:11.00 +t1 2001-01-01 10:10:11.0 +t0 2001-01-01 10:10:11 +a 10:10:10.994999 +t6 2001-01-01 10:10:10.994999 +t5 2001-01-01 10:10:10.99500 +t4 2001-01-01 10:10:10.9950 +t3 2001-01-01 10:10:10.995 +t2 2001-01-01 10:10:10.99 +t1 2001-01-01 10:10:11.0 +t0 2001-01-01 10:10:11 +a 10:10:10.949999 +t6 2001-01-01 10:10:10.949999 +t5 2001-01-01 10:10:10.95000 +t4 2001-01-01 10:10:10.9500 +t3 2001-01-01 10:10:10.950 +t2 2001-01-01 10:10:10.95 +t1 2001-01-01 10:10:10.9 +t0 2001-01-01 10:10:11 +a 10:10:10.499999 +t6 2001-01-01 10:10:10.499999 +t5 2001-01-01 10:10:10.50000 +t4 2001-01-01 10:10:10.5000 +t3 2001-01-01 10:10:10.500 +t2 2001-01-01 10:10:10.50 +t1 2001-01-01 10:10:10.5 +t0 2001-01-01 10:10:10 +DROP TABLE t1; +SET timestamp=default; +# +# Testing rounding from DECIMAL to TIMESTAMP(N) +# +CREATE TABLE t1 (a DECIMAL(30,6), +t6 TIMESTAMP(6) NULL, +t5 TIMESTAMP(5) NULL, +t4 TIMESTAMP(4) NULL, +t3 TIMESTAMP(3) NULL, +t2 TIMESTAMP(2) NULL, +t1 TIMESTAMP(1) NULL, +t0 TIMESTAMP NULL); +INSERT INTO t1 (a) VALUES (20010101101010.999999); +INSERT INTO t1 (a) VALUES (20010101101010.999994); +INSERT INTO t1 (a) VALUES (20010101101010.999949); +INSERT INTO t1 (a) VALUES (20010101101010.999499); +INSERT INTO t1 (a) VALUES (20010101101010.994999); +INSERT INTO t1 (a) VALUES (20010101101010.949999); +INSERT INTO t1 (a) VALUES (20010101101010.499999); +UPDATE t1 SET t0=a, t1=a, t2=a, t3=a, t4=a, t5=a, t6=a; +SELECT * FROM t1;; +a 20010101101010.999999 +t6 2001-01-01 10:10:10.999999 +t5 2001-01-01 10:10:11.00000 +t4 2001-01-01 10:10:11.0000 +t3 2001-01-01 10:10:11.000 +t2 2001-01-01 10:10:11.00 +t1 2001-01-01 10:10:11.0 +t0 2001-01-01 10:10:11 +a 20010101101010.999994 +t6 2001-01-01 10:10:10.999994 +t5 2001-01-01 10:10:10.99999 +t4 2001-01-01 10:10:11.0000 +t3 2001-01-01 10:10:11.000 +t2 2001-01-01 10:10:11.00 +t1 2001-01-01 10:10:11.0 +t0 2001-01-01 10:10:11 +a 20010101101010.999949 +t6 2001-01-01 10:10:10.999949 +t5 2001-01-01 10:10:10.99995 +t4 2001-01-01 10:10:10.9999 +t3 2001-01-01 10:10:11.000 +t2 2001-01-01 10:10:11.00 +t1 2001-01-01 10:10:11.0 +t0 2001-01-01 10:10:11 +a 20010101101010.999499 +t6 2001-01-01 10:10:10.999499 +t5 2001-01-01 10:10:10.99950 +t4 2001-01-01 10:10:10.9995 +t3 2001-01-01 10:10:10.999 +t2 2001-01-01 10:10:11.00 +t1 2001-01-01 10:10:11.0 +t0 2001-01-01 10:10:11 +a 20010101101010.994999 +t6 2001-01-01 10:10:10.994999 +t5 2001-01-01 10:10:10.99500 +t4 2001-01-01 10:10:10.9950 +t3 2001-01-01 10:10:10.995 +t2 2001-01-01 10:10:10.99 +t1 2001-01-01 10:10:11.0 +t0 2001-01-01 10:10:11 +a 20010101101010.949999 +t6 2001-01-01 10:10:10.949999 +t5 2001-01-01 10:10:10.95000 +t4 2001-01-01 10:10:10.9500 +t3 2001-01-01 10:10:10.950 +t2 2001-01-01 10:10:10.95 +t1 2001-01-01 10:10:10.9 +t0 2001-01-01 10:10:11 +a 20010101101010.499999 +t6 2001-01-01 10:10:10.499999 +t5 2001-01-01 10:10:10.50000 +t4 2001-01-01 10:10:10.5000 +t3 2001-01-01 10:10:10.500 +t2 2001-01-01 10:10:10.50 +t1 2001-01-01 10:10:10.5 +t0 2001-01-01 10:10:10 +DROP TABLE t1; +# +# Testing INSERT, ORDER, KEY, BETWEEN, comparison +# +CREATE TABLE t1 (a TIMESTAMP(6) NOT NULL); +INSERT INTO t1 VALUES ('1971-01-01 00:00:00.000000'); +INSERT INTO t1 VALUES ('1971-01-01 23:59:59.999999'); +INSERT INTO t1 VALUES ('2000-01-01 01:02:03'); +INSERT INTO t1 VALUES ('2000-01-01 01:02:03.4'); +INSERT INTO t1 VALUES ('2000-01-01 01:02:03.45'); +INSERT INTO t1 VALUES ('2000-01-01 01:02:03.456'); +INSERT INTO t1 VALUES ('2000-01-01 01:02:03.4567'); +INSERT INTO t1 VALUES ('2000-01-01 01:02:03.45678'); +INSERT INTO t1 VALUES ('2000-01-01 01:02:03.4567891'); +INSERT INTO t1 VALUES ('2015-12-31 23:59:59.000000'); +SELECT * FROM t1; +a +1971-01-01 00:00:00.000000 +1971-01-01 23:59:59.999999 +2000-01-01 01:02:03.000000 +2000-01-01 01:02:03.400000 +2000-01-01 01:02:03.450000 +2000-01-01 01:02:03.456000 +2000-01-01 01:02:03.456700 +2000-01-01 01:02:03.456780 +2000-01-01 01:02:03.456789 +2015-12-31 23:59:59.000000 +SELECT * FROM t1 ORDER BY a DESC; +a +2015-12-31 23:59:59.000000 +2000-01-01 01:02:03.456789 +2000-01-01 01:02:03.456780 +2000-01-01 01:02:03.456700 +2000-01-01 01:02:03.456000 +2000-01-01 01:02:03.450000 +2000-01-01 01:02:03.400000 +2000-01-01 01:02:03.000000 +1971-01-01 23:59:59.999999 +1971-01-01 00:00:00.000000 +SELECT * FROM t1 WHERE a='2000-01-01 01:02:03.45'; +a +2000-01-01 01:02:03.450000 +SELECT * FROM t1 WHERE a='2000-01-01 01:02:03.4567'; +a +2000-01-01 01:02:03.456700 +SELECT * FROM t1 WHERE a='2000-01-01 01:02:03.45670'; +a +2000-01-01 01:02:03.456700 +SELECT * FROM t1 WHERE a='2000-01-01 01:02:03.456700'; +a +2000-01-01 01:02:03.456700 +SELECT * FROM t1 WHERE a BETWEEN '2000-01-01 01:02:00' AND '2000-01-01 01:03:00'; +a +2000-01-01 01:02:03.000000 +2000-01-01 01:02:03.400000 +2000-01-01 01:02:03.450000 +2000-01-01 01:02:03.456000 +2000-01-01 01:02:03.456700 +2000-01-01 01:02:03.456780 +2000-01-01 01:02:03.456789 +ALTER TABLE t1 ADD KEY(a); +SELECT * FROM t1 ORDER BY a; +a +1971-01-01 00:00:00.000000 +1971-01-01 23:59:59.999999 +2000-01-01 01:02:03.000000 +2000-01-01 01:02:03.400000 +2000-01-01 01:02:03.450000 +2000-01-01 01:02:03.456000 +2000-01-01 01:02:03.456700 +2000-01-01 01:02:03.456780 +2000-01-01 01:02:03.456789 +2015-12-31 23:59:59.000000 +SELECT * FROM t1 ORDER BY a DESC; +a +2015-12-31 23:59:59.000000 +2000-01-01 01:02:03.456789 +2000-01-01 01:02:03.456780 +2000-01-01 01:02:03.456700 +2000-01-01 01:02:03.456000 +2000-01-01 01:02:03.450000 +2000-01-01 01:02:03.400000 +2000-01-01 01:02:03.000000 +1971-01-01 23:59:59.999999 +1971-01-01 00:00:00.000000 +EXPLAIN SELECT * FROM t1 WHERE a='2000-01-01 01:02:03.456700'; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE t1 NULL ref a a 7 const 1 100.00 Using index +Warnings: +Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a` from `test`.`t1` where (`test`.`t1`.`a` = '2000-01-01 01:02:03.456700') +SELECT * FROM t1 WHERE a='2000-01-01 01:02:03.456700'; +a +2000-01-01 01:02:03.456700 +SELECT * FROM t1 WHERE a BETWEEN '2000-01-01 01:02:00' AND '2000-01-01 01:03:00'; +a +2000-01-01 01:02:03.000000 +2000-01-01 01:02:03.400000 +2000-01-01 01:02:03.450000 +2000-01-01 01:02:03.456000 +2000-01-01 01:02:03.456700 +2000-01-01 01:02:03.456780 +2000-01-01 01:02:03.456789 +SELECT * FROM t1 WHERE a BETWEEN TIMESTAMP'2000-01-01 01:02:03.456' AND '2000-01-01 01:02:03.45678'; +a +2000-01-01 01:02:03.456000 +2000-01-01 01:02:03.456700 +2000-01-01 01:02:03.456780 +DROP TABLE t1; +# +# Testing range: stored_field_cmp_to_item +# +CREATE TABLE t1 (a datetime(6), key(a)); +INSERT INTO t1 VALUES +('2000-01-01 00:00:00'), ('2000-01-01 00:00:00'), +('2000-01-01 00:00:01'), ('2000-01-01 00:00:01'); +SELECT * FROM t1 WHERE a >= 20000101000000; +a +2000-01-01 00:00:00.000000 +2000-01-01 00:00:00.000000 +2000-01-01 00:00:01.000000 +2000-01-01 00:00:01.000000 +SELECT * FROM t1 WHERE a >= 20000101000000.0; +a +2000-01-01 00:00:00.000000 +2000-01-01 00:00:00.000000 +2000-01-01 00:00:01.000000 +2000-01-01 00:00:01.000000 +UPDATE t1 SET a=ADDTIME(a, 0.000001); +SELECT * FROM t1; +a +2000-01-01 00:00:00.000001 +2000-01-01 00:00:00.000001 +2000-01-01 00:00:01.000001 +2000-01-01 00:00:01.000001 +SELECT * FROM t1 WHERE a >= 20000101000000.000001; +a +2000-01-01 00:00:00.000001 +2000-01-01 00:00:00.000001 +2000-01-01 00:00:01.000001 +2000-01-01 00:00:01.000001 +DROP TABLE t1; +# +# Rare TIMESTAMP formats +# +CREATE TABLE t1 (a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)); +INSERT INTO t1 VALUES (101.101); +ERROR 22007: Incorrect datetime value: '101.101' for column 'a' at row 1 +INSERT INTO t1 VALUES (990101.102); +ERROR 22007: Incorrect datetime value: '990101.102' for column 'a' at row 1 +INSERT INTO t1 VALUES ('990101.103'); +INSERT INTO t1 VALUES (131.104); +ERROR 22007: Incorrect datetime value: '131.104' for column 'a' at row 1 +INSERT INTO t1 VALUES ('000131.105'); +SELECT * FROM t1; +a +1999-01-01 10:03:00.000000 +2000-01-31 10:05:00.000000 +DROP TABLE t1; +# +# Testing bad values +# +CREATE TABLE t1 (a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)); +INSERT INTO t1 VALUES ('xxxx'); +ERROR 22007: Incorrect datetime value: 'xxxx' for column 'a' at row 1 +INSERT INTO t1 VALUES ('1999-01-01 00:00:00.123456 xxx'); +ERROR 22007: Incorrect datetime value: '1999-01-01 00:00:00.123456 xxx' for column 'a' at row 1 +INSERT INTO t1 VALUES ('1999-01-01 00:00:00 xxx'); +ERROR 22007: Incorrect datetime value: '1999-01-01 00:00:00 xxx' for column 'a' at row 1 +INSERT INTO t1 VALUES ('1999-01-01 xxx'); +ERROR 22007: Incorrect datetime value: '1999-01-01 xxx' for column 'a' at row 1 +INSERT INTO t1 VALUES ('0000-00-00 00:00:00.123'); +ERROR 22007: Incorrect datetime value: '0000-00-00 00:00:00.123' for column 'a' at row 1 +INSERT INTO t1 VALUES (0.123); +ERROR 22007: Incorrect datetime value: '0.123' for column 'a' at row 1 +INSERT INTO t1 VALUES (0.123e0); +ERROR 22007: Incorrect datetime value: '0.123' for column 'a' at row 1 +INSERT INTO t1 VALUES (CAST('0000-00-00 00:00:00.123' AS DATETIME(6))); +ERROR 22007: Incorrect datetime value: '0000-00-00 00:00:00.123000' for column 'a' at row 1 +SELECT * FROM t1; +a +DROP TABLE t1; +# +# Testing huge values +# +CREATE TABLE t1 (a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)); +INSERT INTO t1 VALUES ( 100000000000000000.1); +ERROR 22007: Incorrect datetime value: '100000000000000000.1' for column 'a' at row 1 +INSERT INTO t1 VALUES ( 100000000000000000.1e0); +ERROR 22007: Incorrect datetime value: '1e17' for column 'a' at row 1 +INSERT INTO t1 VALUES (-100000000000000000.1); +ERROR 22007: Incorrect datetime value: '-100000000000000000.1' for column 'a' at row 1 +INSERT INTO t1 VALUES (-100000000000000000.1e0); +ERROR 22007: Incorrect datetime value: '-1e17' for column 'a' at row 1 +INSERT INTO t1 VALUES (CAST(0xFFFFFFFF00000000 AS SIGNED)); +ERROR 22007: Incorrect datetime value: '-4294967296' for column 'a' at row 1 +INSERT INTO t1 VALUES (CAST(0xFFFFFFFF00000000 AS UNSIGNED)); +ERROR 22007: Incorrect datetime value: '18446744069414584320' for column 'a' at row 1 +SELECT * FROM t1; +a +DROP TABLE t1; +# +# Testing implicit CAST from TIME to TIMESTAMP +# +SET time_zone='+00:00'; +SET @@timestamp=UNIX_TIMESTAMP('2008-01-03 10:20:30.1'); +CREATE TABLE t1 (a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)); +INSERT INTO t1 VALUES (CURRENT_TIME), (CURRENT_TIME(6)); +INSERT INTO t1 VALUES (TIME'08:00:00.123456'), (TIME'240:00:00.000001'); +INSERT INTO t1 VALUES (TIME'-10:00:00.000001'), (TIME'-240:00:00.000001'); +SELECT CURRENT_DATE, CURRENT_TIME(6); +CURRENT_DATE CURRENT_TIME(6) +2008-01-03 10:20:30.100000 +SELECT a, HEX(WEIGHT_STRING(a)) FROM t1; +a HEX(WEIGHT_STRING(a)) +2008-01-03 10:20:30.000000 477CB6EE000000 +2008-01-03 10:20:30.100000 477CB6EE0186A0 +2008-01-03 08:00:00.123456 477C960001E240 +2008-01-13 00:00:00.000001 47895480000001 +2008-01-02 13:59:59.999999 477B98DF0F423F +2007-12-23 23:59:59.999999 476EF67F0F423F +DELETE FROM t1; +SET time_zone='-12:00'; +INSERT INTO t1 VALUES (CURRENT_TIME), (CURRENT_TIME(6)); +INSERT INTO t1 VALUES (TIME'08:00:00.123456'), (TIME'240:00:00.000001'); +INSERT INTO t1 VALUES (TIME'-10:00:00.000001'), (TIME'-240:00:00.000001'); +SELECT CURRENT_DATE, CURRENT_TIME(6); +CURRENT_DATE CURRENT_TIME(6) +2008-01-02 22:20:30.100000 +SELECT a, HEX(WEIGHT_STRING(a)) FROM t1; +a HEX(WEIGHT_STRING(a)) +2008-01-02 22:20:30.000000 477CB6EE000000 +2008-01-02 22:20:30.100000 477CB6EE0186A0 +2008-01-02 08:00:00.123456 477BED4001E240 +2008-01-12 00:00:00.000001 4788ABC0000001 +2008-01-01 13:59:59.999999 477AF01F0F423F +2007-12-22 23:59:59.999999 476E4DBF0F423F +SET time_zone='+00:00'; +SELECT CURRENT_DATE, CURRENT_TIME(6); +CURRENT_DATE CURRENT_TIME(6) +2008-01-03 10:20:30.100000 +SELECT a, HEX(WEIGHT_STRING(a)) FROM t1; +a HEX(WEIGHT_STRING(a)) +2008-01-03 10:20:30.000000 477CB6EE000000 +2008-01-03 10:20:30.100000 477CB6EE0186A0 +2008-01-02 20:00:00.123456 477BED4001E240 +2008-01-12 12:00:00.000001 4788ABC0000001 +2008-01-02 01:59:59.999999 477AF01F0F423F +2007-12-23 11:59:59.999999 476E4DBF0F423F +DROP TABLE t1; +SET time_zone=default; +SET @@timestamp=default; +# +# Testing IN +# +CREATE TABLE t1 (a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)); +INSERT INTO t1 VALUES ('1971-01-01 00:00:00.000000'); +INSERT INTO t1 VALUES ('1971-01-01 00:00:00.000001'); +INSERT INTO t1 VALUES ('2000-01-01 00:00:00.000000'); +INSERT INTO t1 VALUES ('2000-01-01 00:00:00.000001'); +INSERT INTO t1 VALUES ('2000-01-01 00:00:00.000002'); +INSERT INTO t1 VALUES ('2000-01-01 10:00:00.000000'); +INSERT INTO t1 VALUES ('2000-01-01 10:00:00.000001'); +INSERT INTO t1 VALUES ('2000-01-01 10:00:00.000002'); +INSERT INTO t1 VALUES ('2000-01-01 23:00:00.000000'); +INSERT INTO t1 VALUES ('2000-01-01 23:00:00.000001'); +INSERT INTO t1 VALUES ('2000-01-01 23:00:00.000002'); +SELECT * FROM t1; +a +1971-01-01 00:00:00.000000 +1971-01-01 00:00:00.000001 +2000-01-01 00:00:00.000000 +2000-01-01 00:00:00.000001 +2000-01-01 00:00:00.000002 +2000-01-01 10:00:00.000000 +2000-01-01 10:00:00.000001 +2000-01-01 10:00:00.000002 +2000-01-01 23:00:00.000000 +2000-01-01 23:00:00.000001 +2000-01-01 23:00:00.000002 +SELECT * FROM t1 WHERE a IN ('2000-01-01 00:00:00', '1971-01-01 00:00:00.000001', '2000-01-01 23:00:00.000002'); +a +1971-01-01 00:00:00.000001 +2000-01-01 00:00:00.000000 +2000-01-01 23:00:00.000002 +SELECT * FROM t1 WHERE a IN (0, 20000101000000, 20000101230000); +a +2000-01-01 00:00:00.000000 +2000-01-01 23:00:00.000000 +SELECT * FROM t1 WHERE a=0.1; +a +Warnings: +Warning 1292 Incorrect datetime value: '0.1' for column 'a' at row 1 +SELECT * FROM t1 WHERE a IN (0.1); +a +Warnings: +Warning 1292 Incorrect datetime value: '0.1' for column 'a' at row 1 +SELECT * FROM t1 WHERE a IN (20000101000000.000001, 20000101230000.000001); +a +2000-01-01 00:00:00.000001 +2000-01-01 23:00:00.000001 +SELECT * FROM t1 WHERE +a IN (0.000001, 20000101000000.000001, 20000101230000.000001); +a +Warnings: +Warning 1292 Incorrect datetime value: '0.000001' for column 'a' at row 1 +SELECT * FROM t1 WHERE a IN (0e0, 0.000001e0); +a +Warnings: +Warning 1292 Incorrect datetime value: '0.000001' for column 'a' at row 1 +# +# Testing IN with index: involves field->store_packed() +# +ALTER TABLE t1 ADD KEY(a); +SELECT * FROM t1 WHERE a IN ('2000-01-01 00:00:00', '1971-01-01 00:00:00.000001', '2000-01-01 23:00:00.000002'); +a +1971-01-01 00:00:00.000001 +2000-01-01 00:00:00.000000 +2000-01-01 23:00:00.000002 +SELECT * FROM t1 WHERE a IN (0, 20000101000000, 20000101230000); +a +2000-01-01 00:00:00.000000 +2000-01-01 23:00:00.000000 +SELECT * FROM t1 WHERE a IN (0.000001, 20000101000000.000001, 20000101230000.000001); +a +Warnings: +Warning 1292 Incorrect datetime value: '0.000001' for column 'a' at row 1 +SELECT * FROM t1 WHERE a IN (20000101000000.000001, 20000101230000.000001); +a +2000-01-01 00:00:00.000001 +2000-01-01 23:00:00.000001 +SELECT * FROM t1 WHERE a IN (0e0, 0.000001e0); +a +Warnings: +Warning 1292 Incorrect datetime value: '0.000001' for column 'a' at row 1 +DROP TABLE t1; +# +# Testing CREATE TABLE LIKE +# +CREATE TABLE t1 (a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)); +CREATE TABLE t2 LIKE t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t2, t1; +# +# Testing CREATE TABLE .. SELECT +# +CREATE TABLE t1 (a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)); +CREATE TABLE t2 AS SELECT * FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t2, t1; +# +# Testing JOIN between TIMESTAMP(6) and TIMESTAMP(6) +# +CREATE TABLE t1 (a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)); +INSERT INTO t1 VALUES ('2000-01-01 00:01:03.1'); +INSERT INTO t1 VALUES ('2000-01-01 00:01:03.12'); +INSERT INTO t1 VALUES ('2000-01-01 00:01:03.123'); +INSERT INTO t1 VALUES ('2000-01-01 00:01:03.1234'); +INSERT INTO t1 VALUES ('2000-01-01 00:01:03.12345'); +INSERT INTO t1 VALUES ('2000-01-01 00:01:03.123456'); +CREATE TABLE t2 (a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)); +INSERT INTO t2 SELECT * FROM t1; +SELECT * FROM t1, t2 WHERE t1.a=t2.a ORDER BY t1.a, t2.a; +a a +2000-01-01 00:01:03.100000 2000-01-01 00:01:03.100000 +2000-01-01 00:01:03.120000 2000-01-01 00:01:03.120000 +2000-01-01 00:01:03.123000 2000-01-01 00:01:03.123000 +2000-01-01 00:01:03.123400 2000-01-01 00:01:03.123400 +2000-01-01 00:01:03.123450 2000-01-01 00:01:03.123450 +2000-01-01 00:01:03.123456 2000-01-01 00:01:03.123456 +ALTER TABLE t1 ADD KEY(a); +SELECT * FROM t1, t2 WHERE t1.a=t2.a ORDER BY t1.a, t2.a; +a a +2000-01-01 00:01:03.100000 2000-01-01 00:01:03.100000 +2000-01-01 00:01:03.120000 2000-01-01 00:01:03.120000 +2000-01-01 00:01:03.123000 2000-01-01 00:01:03.123000 +2000-01-01 00:01:03.123400 2000-01-01 00:01:03.123400 +2000-01-01 00:01:03.123450 2000-01-01 00:01:03.123450 +2000-01-01 00:01:03.123456 2000-01-01 00:01:03.123456 +ALTER TABLE t2 ADD KEY(a); +SELECT * FROM t1, t2 WHERE t1.a=t2.a ORDER BY t1.a, t2.a; +a a +2000-01-01 00:01:03.100000 2000-01-01 00:01:03.100000 +2000-01-01 00:01:03.120000 2000-01-01 00:01:03.120000 +2000-01-01 00:01:03.123000 2000-01-01 00:01:03.123000 +2000-01-01 00:01:03.123400 2000-01-01 00:01:03.123400 +2000-01-01 00:01:03.123450 2000-01-01 00:01:03.123450 +2000-01-01 00:01:03.123456 2000-01-01 00:01:03.123456 +ALTER TABLE t1 DROP KEY a; +SELECT * FROM t1, t2 WHERE t1.a=t2.a ORDER BY t1.a, t2.a; +a a +2000-01-01 00:01:03.100000 2000-01-01 00:01:03.100000 +2000-01-01 00:01:03.120000 2000-01-01 00:01:03.120000 +2000-01-01 00:01:03.123000 2000-01-01 00:01:03.123000 +2000-01-01 00:01:03.123400 2000-01-01 00:01:03.123400 +2000-01-01 00:01:03.123450 2000-01-01 00:01:03.123450 +2000-01-01 00:01:03.123456 2000-01-01 00:01:03.123456 +DROP TABLE t2; +DROP TABLE t1; +# +# Testing JOIN between TIMESTAMP and TIMESTAMP(6) +# +CREATE TABLE t1 (a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)); +INSERT INTO t1 VALUES ('1971-01-01 23:59:59.000000'); +INSERT INTO t1 VALUES ('2000-01-01 10:11:12.000000'); +INSERT INTO t1 VALUES ('2000-01-01 10:11:12.000001'); +INSERT INTO t1 VALUES ('2000-01-01 10:11:12.000002'); +INSERT INTO t1 VALUES ('2000-01-01 10:11:13.000000'); +INSERT INTO t1 VALUES ('2000-01-01 10:11:13.000001'); +INSERT INTO t1 VALUES ('2000-01-01 10:11:13.000002'); +INSERT INTO t1 VALUES ('2000-01-01 23:59:59.999999'); +INSERT INTO t1 VALUES ('2000-01-01 23:59:59.000000'); +CREATE TABLE t2 (a TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP); +INSERT INTO t2 VALUES ('2000-01-01 10:11:12'); +INSERT INTO t2 VALUES ('2000-01-01 10:11:13'); +INSERT INTO t2 VALUES ('1971-01-01 23:59:59'); +INSERT INTO t2 VALUES ('2000-01-01 23:59:59'); +SELECT * FROM t1, t2 WHERE t1.a=t2.a ORDER BY t1.a, t2.a; +a a +1971-01-01 23:59:59.000000 1971-01-01 23:59:59 +2000-01-01 10:11:12.000000 2000-01-01 10:11:12 +2000-01-01 10:11:13.000000 2000-01-01 10:11:13 +2000-01-01 23:59:59.000000 2000-01-01 23:59:59 +ALTER TABLE t1 ADD KEY(a); +ALTER TABLE t2 ADD KEY(a); +SELECT * FROM t1, t2 WHERE t1.a=t2.a ORDER BY t1.a, t2.a; +a a +1971-01-01 23:59:59.000000 1971-01-01 23:59:59 +2000-01-01 10:11:12.000000 2000-01-01 10:11:12 +2000-01-01 10:11:13.000000 2000-01-01 10:11:13 +2000-01-01 23:59:59.000000 2000-01-01 23:59:59 +DROP TABLE t2, t1; +# +# Testing unique index +# +CREATE TABLE t1 (a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6), UNIQUE(a)); +INSERT INTO t1 VALUES ('2000-01-01 00:01:02'); +INSERT INTO t1 VALUES ('2000-01-01 00:01:02.1'); +INSERT INTO t1 VALUES ('2000-01-01 00:01:02.12'); +INSERT INTO t1 VALUES ('2000-01-01 00:01:02.123'); +INSERT INTO t1 VALUES ('2000-01-01 00:01:02.1234'); +INSERT INTO t1 VALUES ('2000-01-01 00:01:02.12345'); +INSERT INTO t1 VALUES ('2000-01-01 00:01:02.12345'); +ERROR 23000: Duplicate entry '2000-01-01 00:01:02.123450' for key 'a' +DROP TABLE t1; +# +# Testing GROUP BY +# +CREATE TABLE t1 (a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)); +INSERT INTO t1 VALUES ('2000-01-01 00:01:02'); +INSERT INTO t1 VALUES ('2000-01-01 00:01:02.0'); +INSERT INTO t1 VALUES ('2000-01-01 00:01:02.01'); +INSERT INTO t1 VALUES ('2000-01-01 00:01:02.010'); +INSERT INTO t1 VALUES ('2000-01-01 00:01:02.02'); +INSERT INTO t1 VALUES ('2000-01-01 00:01:02.020'); +SELECT a, COUNT(*) FROM t1 GROUP BY a; +a COUNT(*) +2000-01-01 00:01:02.000000 2 +2000-01-01 00:01:02.010000 2 +2000-01-01 00:01:02.020000 2 +DROP TABLE t1; +# +# Testing MIN() and MAX() +# +CREATE TABLE t1 (a INT, b TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)); +INSERT INTO t1 VALUES (1, '2001-01-01 00:01:02.000001'); +INSERT INTO t1 VALUES (1, '2001-01-01 00:01:02'); +INSERT INTO t1 VALUES (2, '2001-01-01 10:01:02'); +INSERT INTO t1 VALUES (2, '2001-01-01 10:01:02.000001'); +INSERT INTO t1 VALUES (3, '2001-01-01 10:11:02'); +INSERT INTO t1 VALUES (3, '2001-01-01 10:11:02.000001'); +SELECT MIN(b), MAX(b) FROM t1; +MIN(b) MAX(b) +2001-01-01 00:01:02.000000 2001-01-01 10:11:02.000001 +SELECT a, MIN(b), MAX(b) FROM t1 GROUP BY a; +a MIN(b) MAX(b) +1 2001-01-01 00:01:02.000000 2001-01-01 00:01:02.000001 +2 2001-01-01 10:01:02.000000 2001-01-01 10:01:02.000001 +3 2001-01-01 10:11:02.000000 2001-01-01 10:11:02.000001 +DROP TABLE t1; +# +# Testing LEAST +# +CREATE TABLE t1 (a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.1'); +SELECT LEAST(a, '2001-01-02 00:00:00.1') AS a FROM t1; +a +2001-01-01 00:00:00.100000 +SELECT LEAST(a, '2001-01-02 00:00:00.1') + 0 AS a FROM t1; +a +20010101000000.1 +SELECT CAST(LEAST(a, '2001-01-02 00:00:00.1') AS SIGNED) AS a FROM t1; +a +20010101000000 +SELECT CAST(LEAST(a, '2001-01-02 00:00:00.1') AS DECIMAL(30,6)) AS a FROM t1; +a +20010101000000.100000 +SELECT GREATEST(a, '2001-01-02 00:00:00.1') AS a FROM t1; +a +2001-01-02 00:00:00.1 +SELECT GREATEST(a, '2001-01-02 00:00:00.1') + 0 AS a FROM t1; +a +20010102000000.1 +SELECT CAST(GREATEST(a, '2001-01-02 00:00:00.1') AS SIGNED) AS a FROM t1; +a +20010102000000 +SELECT CAST(GREATEST(a, '2001-01-02 00:00:00.1') AS DECIMAL(30,6)) AS a FROM t1; +a +20010102000000.100000 +DROP TABLE t1; +# +# Testing INSERT, MAX and MIN values +# '1970-01-01 00:00:01.000000' UTC to '2038-01-19 03:14:07.999999' UTC +# +SET time_zone='+00:00'; +CREATE TABLE t1 (a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)); +INSERT INTO t1 VALUES ('2038-01-19 03:14:07'); +INSERT INTO t1 VALUES ('2038-01-19 03:14:07.999999'); +INSERT INTO t1 VALUES ('2038-01-19 03:14:08'); +ERROR 22007: Incorrect datetime value: '2038-01-19 03:14:08' for column 'a' at row 1 +INSERT INTO t1 VALUES ('1971-01-01 00:00:00'); +INSERT INTO t1 VALUES ('1971-01-01 00:00:00.999999'); +INSERT INTO t1 VALUES ('1971-01-01 00:00:01'); +SELECT * FROM t1; +a +2038-01-19 03:14:07.000000 +2038-01-19 03:14:07.999999 +1971-01-01 00:00:00.000000 +1971-01-01 00:00:00.999999 +1971-01-01 00:00:01.000000 +DROP TABLE t1; +# +# Testing bad values +# +CREATE TABLE t1 (a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)); +INSERT INTO t1 VALUES ('0000-00-00 00:00:00.1'); +ERROR 22007: Incorrect datetime value: '0000-00-00 00:00:00.1' for column 'a' at row 1 +INSERT INTO t1 VALUES ('0000-00-00 00:00:01.1'); +ERROR 22007: Incorrect datetime value: '0000-00-00 00:00:01.1' for column 'a' at row 1 +INSERT INTO t1 VALUES (0.1); +ERROR 22007: Incorrect datetime value: '0.1' for column 'a' at row 1 +INSERT INTO t1 VALUES (1.1); +ERROR 22007: Incorrect datetime value: '1.1' for column 'a' at row 1 +INSERT INTO t1 VALUES (0.1e0); +ERROR 22007: Incorrect datetime value: '0.1' for column 'a' at row 1 +INSERT INTO t1 VALUES (1.1e0); +ERROR 22007: Incorrect datetime value: '1.1' for column 'a' at row 1 +INSERT INTO t1 VALUES (-0.1); +ERROR 22007: Incorrect datetime value: '-0.1' for column 'a' at row 1 +INSERT INTO t1 VALUES (-1.0); +ERROR 22007: Incorrect datetime value: '-1.0' for column 'a' at row 1 +INSERT INTO t1 VALUES (-1.1); +ERROR 22007: Incorrect datetime value: '-1.1' for column 'a' at row 1 +INSERT INTO t1 VALUES (-0.1e0); +ERROR 22007: Incorrect datetime value: '-0.1' for column 'a' at row 1 +INSERT INTO t1 VALUES (-1.0e0); +ERROR 22007: Incorrect datetime value: '-1' for column 'a' at row 1 +INSERT INTO t1 VALUES (-1.1e0); +ERROR 22007: Incorrect datetime value: '-1.1' for column 'a' at row 1 +SELECT * FROM t1; +a +DROP TABLE t1; +# +# Testing integer INSERT value +# +CREATE TABLE t1 (a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)); +INSERT INTO t1 VALUES (19990102); +INSERT INTO t1 VALUES (19990102112233); +INSERT INTO t1 VALUES (100000101112233); +ERROR 22007: Incorrect datetime value: '100000101112233' for column 'a' at row 1 +INSERT INTO t1 VALUES (0); +ERROR 22007: Incorrect datetime value: '0' for column 'a' at row 1 +INSERT INTO t1 VALUES (-1); +ERROR 22007: Incorrect datetime value: '-1' for column 'a' at row 1 +SELECT * FROM t1; +a +1999-01-02 00:00:00.000000 +1999-01-02 11:22:33.000000 +DROP TABLE t1; +# +# Testing decimal INSERT values +# +CREATE TABLE t1 (a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)); +INSERT INTO t1 VALUES (20010101223344.4); +INSERT INTO t1 VALUES (20010101223344.45); +INSERT INTO t1 VALUES (20010101223344.456); +INSERT INTO t1 VALUES (20010101223344.4567); +INSERT INTO t1 VALUES (20010101223344.45678); +INSERT INTO t1 VALUES (20010101223344.456789); +INSERT INTO t1 VALUES (20010101202030.4567894); +INSERT INTO t1 VALUES (20010101202030.4567895); +INSERT INTO t1 VALUES (20010101202030.4567896); +INSERT INTO t1 VALUES (20010101202030.456789678); +INSERT INTO t1 VALUES (200101018385959.000000); +ERROR 22007: Incorrect datetime value: '200101018385959.000000' for column 'a' at row 1 +INSERT INTO t1 VALUES (-200101018385959.000000); +ERROR 22007: Incorrect datetime value: '-200101018385959.000000' for column 'a' at row 1 +SELECT * FROM t1; +a +2001-01-01 22:33:44.400000 +2001-01-01 22:33:44.450000 +2001-01-01 22:33:44.456000 +2001-01-01 22:33:44.456700 +2001-01-01 22:33:44.456780 +2001-01-01 22:33:44.456789 +2001-01-01 20:20:30.456789 +2001-01-01 20:20:30.456790 +2001-01-01 20:20:30.456790 +2001-01-01 20:20:30.456790 +DROP TABLE t1; +# +# Testing double INSERT values +# +CREATE TABLE t1 (a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)); +INSERT INTO t1 VALUES (112.233e-3); +ERROR 22007: Incorrect datetime value: '0.112233' for column 'a' at row 1 +INSERT INTO t1 VALUES (112.223e-2); +ERROR 22007: Incorrect datetime value: '1.12223' for column 'a' at row 1 +INSERT INTO t1 VALUES (112.233e-1); +ERROR 22007: Incorrect datetime value: '11.2233' for column 'a' at row 1 +INSERT INTO t1 VALUES (112.233e0); +ERROR 22007: Incorrect datetime value: '112.233' for column 'a' at row 1 +INSERT INTO t1 VALUES (112.233e1); +ERROR 22007: Incorrect datetime value: '1122.33' for column 'a' at row 1 +INSERT INTO t1 VALUES (112.233e2); +ERROR 22007: Incorrect datetime value: '11223.3' for column 'a' at row 1 +INSERT INTO t1 VALUES (112.233e3); +ERROR 22007: Incorrect datetime value: '112233' for column 'a' at row 1 +INSERT INTO t1 VALUES (112.233e4); +ERROR 22007: Incorrect datetime value: '1122330' for column 'a' at row 1 +INSERT INTO t1 VALUES (-123.456e0); +ERROR 22007: Incorrect datetime value: '-123.456' for column 'a' at row 1 +SELECT * FROM t1; +a +DROP TABLE t1; +# +# Testing UPDATE between TIMESTAMP(6) and TIMESTAMP/BIGINT/DECIMAL/DOUBLE +# +CREATE TABLE t1 (t0 TIMESTAMP NULL, t6 TIMESTAMP(6) NULL, i BIGINT, d DECIMAL(20,6), f DOUBLE); +INSERT INTO t1 (t0) VALUES ('2000-01-01 11:22:33'); +UPDATE t1 SET t6=t0, i=t0, d=t0, f=t0; +SELECT t6, i, d FROM t1; +t6 i d +2000-01-01 11:22:33.000000 20000101112233 20000101112233.000000 +UPDATE t1 SET t6='2001-02-02 11:22:33.1'; +UPDATE t1 SET t0=t6, i=t6, d=t6, f=t6; +SELECT * FROM t1; +t0 t6 i d f +2001-02-02 11:22:33 2001-02-02 11:22:33.100000 20010202112233 20010202112233.100000 20010202112233.1 +UPDATE t1 SET i=20000101112233, d=20001010112233.1, f=00001010112233.1; +UPDATE t1 SET t6=i; +SELECT t6 FROM t1; +t6 +2000-01-01 11:22:33.000000 +UPDATE t1 SET t6=d; +SELECT t6 FROM t1; +t6 +2000-10-10 11:22:33.100000 +UPDATE t1 SET t6=f; +SELECT t6 FROM t1; +t6 +2000-10-10 11:22:33.100000 +DROP TABLE t1; +# +# Testing JOIN with comparison between TIMESTAMP(6) and DATE +# +CREATE TABLE t1 (a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)); +INSERT INTO t1 VALUES ('2000-01-01 00:00:00.000000'); +INSERT INTO t1 VALUES ('2000-01-01 00:00:00.000001'); +INSERT INTO t1 VALUES ('2000-01-02 00:00:00.000000'); +CREATE TABLE t2 (a DATE); +INSERT INTO t2 VALUES ('2000-01-01'); +INSERT INTO t2 VALUES ('2000-01-02'); +SELECT * FROM t1, t2 WHERE t1.a=t2.a ORDER BY t1.a, t2.a; +a a +2000-01-01 00:00:00.000000 2000-01-01 +2000-01-02 00:00:00.000000 2000-01-02 +ALTER TABLE t2 MODIFY a TIMESTAMP(6); +SELECT * FROM t1, t2 WHERE t1.a=CAST(t2.a AS DATE) ORDER BY t1.a, t2.a; +a a +2000-01-01 00:00:00.000000 2000-01-01 00:00:00.000000 +2000-01-02 00:00:00.000000 2000-01-02 00:00:00.000000 +DROP TABLE t2; +DROP TABLE t1; +# +# Testing JOIN with comparison between TIMESTAMP(6) and BIGINT +# +CREATE TABLE t1 (a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)); +INSERT INTO t1 VALUES ('2000-01-01 00:00:00'); +INSERT INTO t1 VALUES ('2000-01-01 11:22:33'); +INSERT INTO t1 VALUES ('2000-01-01 11:22:33.123'); +CREATE TABLE t2 (b BIGINT); +INSERT INTO t2 VALUES (20000101); +INSERT INTO t2 VALUES (20000101112233); +SELECT * FROM t1, t2 WHERE a=b; +a b +2000-01-01 11:22:33.000000 20000101112233 +DROP TABLE t1, t2; +# +# Testing JOIN with comparison between TIMESTAMP(6) and DECIMAL(20,6) +# +CREATE TABLE t1 (a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)); +INSERT INTO t1 VALUES ('2001-01-01 11:22:33'); +INSERT INTO t1 VALUES ('2001-01-01 11:22:33.123'); +INSERT INTO t1 VALUES ('2001-01-01 11:22:33.123456'); +CREATE TABLE t2 (b DECIMAL(20,6)); +INSERT INTO t2 VALUES (20010101112233); +INSERT INTO t2 VALUES (20010101112233.123); +INSERT INTO t2 VALUES (20010101112233.123456); +SELECT * FROM t1, t2 WHERE a=b; +a b +2001-01-01 11:22:33.000000 20010101112233.000000 +2001-01-01 11:22:33.123000 20010101112233.123000 +2001-01-01 11:22:33.123456 20010101112233.123456 +DROP TABLE t1, t2; +# +# Testing JOIN with comparison between TIMESTAMP(6) and DECIMAL(20,3) +# +CREATE TABLE t1 (a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)); +INSERT INTO t1 VALUES ('2001-01-01 11:22:33'); +INSERT INTO t1 VALUES ('2001-01-01 11:22:33.123'); +INSERT INTO t1 VALUES ('2001-01-01 11:22:33.123456'); +CREATE TABLE t2 (b DECIMAL(20,3)); +INSERT INTO t2 VALUES (20010101112233); +INSERT INTO t2 VALUES (20010101112233.123); +SELECT * FROM t1, t2 WHERE a=b; +a b +2001-01-01 11:22:33.000000 20010101112233.000 +2001-01-01 11:22:33.123000 20010101112233.123 +DROP TABLE t1, t2; +# +# Testing JOIN with comparison between TIMESTAMP(6) and DOUBLE +# +CREATE TABLE t1 (a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)); +INSERT INTO t1 VALUES ('2000-01-01 11:22:33'); +INSERT INTO t1 VALUES ('2000-01-01 11:22:33.1'); +INSERT INTO t1 VALUES ('2000-01-01 11:22:33.12'); +CREATE TABLE t2 (b DOUBLE); +INSERT INTO t2 VALUES (20000101112233); +INSERT INTO t2 VALUES (20000101112233.1); +INSERT INTO t2 VALUES (20000101112233.12); +SELECT * FROM t2; +b +20000101112233 +20000101112233.1 +20000101112233.12 +SELECT * FROM t1, t2 WHERE a=b; +a b +2000-01-01 11:22:33.000000 20000101112233 +2000-01-01 11:22:33.100000 20000101112233.1 +2000-01-01 11:22:33.120000 20000101112233.12 +DROP TABLE t1, t2; +# +# Testing JOIN with comparison between TIMESTAMP(6) and VARCHAR +# +CREATE TABLE t1 (a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)); +INSERT INTO t1 VALUES ('2001-01-01 11:22:33'); +INSERT INTO t1 VALUES ('2001-01-01 11:22:33.123'); +CREATE TABLE t2 (b VARCHAR(64)); +INSERT INTO t2 VALUES ('2001-01-01 11:22:33.123'); +INSERT INTO t2 VALUES ('2001-01-01 11:22:33.1230'); +INSERT INTO t2 VALUES ('2001-01-01 11:22:33.12300'); +INSERT INTO t2 VALUES ('2001-01-01 11:22:33.123000'); +INSERT INTO t2 VALUES ('2001-01-01 11:22:33'); +INSERT INTO t2 VALUES ('2001-01-01 11:22:33.'); +INSERT INTO t2 VALUES ('2001-01-01 11:22:33.0'); +INSERT INTO t2 VALUES ('2001-01-01 11:22:33.00'); +INSERT INTO t2 VALUES ('2001-01-01 11:22:33.000'); +INSERT INTO t2 VALUES ('2001-01-01 11:22:33.0000'); +INSERT INTO t2 VALUES ('2001-01-01 11:22:33.00000'); +INSERT INTO t2 VALUES ('2001-01-01 11:22:33.000000'); +SELECT * FROM t1, t2 WHERE a=b ORDER BY BINARY a, BINARY b; +a b +2001-01-01 11:22:33.000000 2001-01-01 11:22:33 +2001-01-01 11:22:33.000000 2001-01-01 11:22:33. +2001-01-01 11:22:33.000000 2001-01-01 11:22:33.0 +2001-01-01 11:22:33.000000 2001-01-01 11:22:33.00 +2001-01-01 11:22:33.000000 2001-01-01 11:22:33.000 +2001-01-01 11:22:33.000000 2001-01-01 11:22:33.0000 +2001-01-01 11:22:33.000000 2001-01-01 11:22:33.00000 +2001-01-01 11:22:33.000000 2001-01-01 11:22:33.000000 +2001-01-01 11:22:33.123000 2001-01-01 11:22:33.123 +2001-01-01 11:22:33.123000 2001-01-01 11:22:33.1230 +2001-01-01 11:22:33.123000 2001-01-01 11:22:33.12300 +2001-01-01 11:22:33.123000 2001-01-01 11:22:33.123000 +ALTER TABLE t1 ADD KEY (a); +SELECT * FROM t1, t2 WHERE a=b ORDER BY BINARY a, BINARY b; +a b +2001-01-01 11:22:33.000000 2001-01-01 11:22:33 +2001-01-01 11:22:33.000000 2001-01-01 11:22:33. +2001-01-01 11:22:33.000000 2001-01-01 11:22:33.0 +2001-01-01 11:22:33.000000 2001-01-01 11:22:33.00 +2001-01-01 11:22:33.000000 2001-01-01 11:22:33.000 +2001-01-01 11:22:33.000000 2001-01-01 11:22:33.0000 +2001-01-01 11:22:33.000000 2001-01-01 11:22:33.00000 +2001-01-01 11:22:33.000000 2001-01-01 11:22:33.000000 +2001-01-01 11:22:33.123000 2001-01-01 11:22:33.123 +2001-01-01 11:22:33.123000 2001-01-01 11:22:33.1230 +2001-01-01 11:22:33.123000 2001-01-01 11:22:33.12300 +2001-01-01 11:22:33.123000 2001-01-01 11:22:33.123000 +ALTER TABLE t2 ADD KEY (b); +SELECT * FROM t1, t2 WHERE a=b ORDER BY BINARY a, BINARY b; +a b +2001-01-01 11:22:33.000000 2001-01-01 11:22:33 +2001-01-01 11:22:33.000000 2001-01-01 11:22:33. +2001-01-01 11:22:33.000000 2001-01-01 11:22:33.0 +2001-01-01 11:22:33.000000 2001-01-01 11:22:33.00 +2001-01-01 11:22:33.000000 2001-01-01 11:22:33.000 +2001-01-01 11:22:33.000000 2001-01-01 11:22:33.0000 +2001-01-01 11:22:33.000000 2001-01-01 11:22:33.00000 +2001-01-01 11:22:33.000000 2001-01-01 11:22:33.000000 +2001-01-01 11:22:33.123000 2001-01-01 11:22:33.123 +2001-01-01 11:22:33.123000 2001-01-01 11:22:33.1230 +2001-01-01 11:22:33.123000 2001-01-01 11:22:33.12300 +2001-01-01 11:22:33.123000 2001-01-01 11:22:33.123000 +ALTER TABLE t1 DROP KEY a; +SELECT * FROM t1, t2 WHERE a=b ORDER BY BINARY a, BINARY b; +a b +2001-01-01 11:22:33.000000 2001-01-01 11:22:33 +2001-01-01 11:22:33.000000 2001-01-01 11:22:33. +2001-01-01 11:22:33.000000 2001-01-01 11:22:33.0 +2001-01-01 11:22:33.000000 2001-01-01 11:22:33.00 +2001-01-01 11:22:33.000000 2001-01-01 11:22:33.000 +2001-01-01 11:22:33.000000 2001-01-01 11:22:33.0000 +2001-01-01 11:22:33.000000 2001-01-01 11:22:33.00000 +2001-01-01 11:22:33.000000 2001-01-01 11:22:33.000000 +2001-01-01 11:22:33.123000 2001-01-01 11:22:33.123 +2001-01-01 11:22:33.123000 2001-01-01 11:22:33.1230 +2001-01-01 11:22:33.123000 2001-01-01 11:22:33.12300 +2001-01-01 11:22:33.123000 2001-01-01 11:22:33.123000 +DROP TABLE t1, t2; +# +# Testing arithmetic with INT, DECIMAL, FLOAT +# +CREATE TABLE t1 (a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000000'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000001'); +SELECT a, a + 0, a + 1, a + 1.0, a + 1e0 FROM t1; +a a + 0 a + 1 a + 1.0 a + 1e0 +2001-01-01 00:00:00.000000 20010101000000.000000 20010101000001.000000 20010101000001.000000 20010101000001 +2001-01-01 00:00:00.000001 20010101000000.000001 20010101000001.000001 20010101000001.000001 20010101000001 +CREATE TABLE t2 AS SELECT a + 1 AS i, a + 1.0 AS d, a + 1e0 AS f FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `i` decimal(21,6) NOT NULL DEFAULT '0.000000', + `d` decimal(21,6) NOT NULL DEFAULT '0.000000', + `f` double NOT NULL DEFAULT '0' +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t1, t2; +# +# Testing that TIMESTAMP behaves as INT/DECIMAL for numeric arithmetic +# +CREATE TABLE t1 (t0 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, t3 TIMESTAMP(3) NOT NULL DEFAULT '1971-01-01 00:00:00', t6 TIMESTAMP(6) NOT NULL DEFAULT '1971-01-01 00:00:00'); +CREATE TABLE t2 AS SELECT +t0 + 1, t3 + 1, t6 + 1, +t0 - 1, t3 - 1, t6 - 1, +t0 * 1, t3 * 1, t6 * 1, +t0 / 1, t3 / 1, t6 / 1, +TIMESTAMP'2001-01-01 10:10:10' + 1, +TIMESTAMP'2001-01-01 10:10:10.123' + 1, +TIMESTAMP'2001-01-01 10:10:10.123456' + 1, +TIMESTAMP'2001-01-01 10:10:10' - 1, +TIMESTAMP'2001-01-01 10:10:10.123' - 1, +TIMESTAMP'2001-01-01 10:10:10.123456' - 1, +TIMESTAMP'2001-01-01 10:10:10' * 1, +TIMESTAMP'2001-01-01 10:10:10.123' * 1, +TIMESTAMP'2001-01-01 10:10:10.123456' * 1, +TIMESTAMP'2001-01-01 10:10:10' / 1, +TIMESTAMP'2001-01-01 10:10:10.123' / 1, +TIMESTAMP'2001-01-01 10:10:10.123456' / 1 +FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `t0 + 1` bigint(16) NOT NULL DEFAULT '0', + `t3 + 1` decimal(18,3) NOT NULL DEFAULT '0.000', + `t6 + 1` decimal(21,6) NOT NULL DEFAULT '0.000000', + `t0 - 1` bigint(16) NOT NULL DEFAULT '0', + `t3 - 1` decimal(18,3) NOT NULL DEFAULT '0.000', + `t6 - 1` decimal(21,6) NOT NULL DEFAULT '0.000000', + `t0 * 1` bigint(16) NOT NULL DEFAULT '0', + `t3 * 1` decimal(18,3) NOT NULL DEFAULT '0.000', + `t6 * 1` decimal(21,6) NOT NULL DEFAULT '0.000000', + `t0 / 1` decimal(18,4) DEFAULT NULL, + `t3 / 1` decimal(21,7) DEFAULT NULL, + `t6 / 1` decimal(24,10) DEFAULT NULL, + `TIMESTAMP'2001-01-01 10:10:10' + 1` bigint(16) NOT NULL DEFAULT '0', + `TIMESTAMP'2001-01-01 10:10:10.123' + 1` decimal(18,3) NOT NULL DEFAULT '0.000', + `TIMESTAMP'2001-01-01 10:10:10.123456' + 1` decimal(21,6) NOT NULL DEFAULT '0.000000', + `TIMESTAMP'2001-01-01 10:10:10' - 1` bigint(16) NOT NULL DEFAULT '0', + `TIMESTAMP'2001-01-01 10:10:10.123' - 1` decimal(18,3) NOT NULL DEFAULT '0.000', + `TIMESTAMP'2001-01-01 10:10:10.123456' - 1` decimal(21,6) NOT NULL DEFAULT '0.000000', + `TIMESTAMP'2001-01-01 10:10:10' * 1` bigint(16) NOT NULL DEFAULT '0', + `TIMESTAMP'2001-01-01 10:10:10.123' * 1` decimal(18,3) NOT NULL DEFAULT '0.000', + `TIMESTAMP'2001-01-01 10:10:10.123456' * 1` decimal(21,6) NOT NULL DEFAULT '0.000000', + `TIMESTAMP'2001-01-01 10:10:10' / 1` decimal(18,4) DEFAULT NULL, + `TIMESTAMP'2001-01-01 10:10:10.123' / 1` decimal(21,7) DEFAULT NULL, + `TIMESTAMP'2001-01-01 10:10:10.123456' / 1` decimal(24,10) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t2; +DROP TABLE t1; +# +# Testing that TIMESTAMP behaves as DECIMAL for SUM() and AVG() +# +SET @t='2010-01-01 00:11:12.123456'; +CREATE TABLE t1 (t0 DATETIME, t3 DATETIME(3), t6 DATETIME(6)); +INSERT INTO t1 VALUES (@t, @t, @t); +SELECT MIN(t0), MAX(t0), AVG(t0), SUM(t0) FROM t1; +MIN(t0) 2010-01-01 00:11:12 +MAX(t0) 2010-01-01 00:11:12 +AVG(t0) 20100101001112.0000 +SUM(t0) 20100101001112 +SELECT MIN(t3), MAX(t3), AVG(t3), SUM(t3) FROM t1; +MIN(t3) 2010-01-01 00:11:12.123 +MAX(t3) 2010-01-01 00:11:12.123 +AVG(t3) 20100101001112.1230000 +SUM(t3) 20100101001112.123 +SELECT MIN(t6), MAX(t6), AVG(t6), SUM(t6) FROM t1; +MIN(t6) 2010-01-01 00:11:12.123456 +MAX(t6) 2010-01-01 00:11:12.123456 +AVG(t6) 20100101001112.1234560000 +SUM(t6) 20100101001112.123456 +SET @t='2010-01-01 00:11:12.000000'; +INSERT INTO t1 VALUES (@t, @t, @t); +SELECT MIN(t0), MAX(t0), AVG(t0), SUM(t0) FROM t1; +MIN(t0) 2010-01-01 00:11:12 +MAX(t0) 2010-01-01 00:11:12 +AVG(t0) 20100101001112.0000 +SUM(t0) 40200202002224 +SELECT MIN(t3), MAX(t3), AVG(t3), SUM(t3) FROM t1; +MIN(t3) 2010-01-01 00:11:12.000 +MAX(t3) 2010-01-01 00:11:12.123 +AVG(t3) 20100101001112.0615000 +SUM(t3) 40200202002224.123 +SELECT MIN(t6), MAX(t6), AVG(t6), SUM(t6) FROM t1; +MIN(t6) 2010-01-01 00:11:12.000000 +MAX(t6) 2010-01-01 00:11:12.123456 +AVG(t6) 20100101001112.0617280000 +SUM(t6) 40200202002224.123456 +CREATE TABLE t2 AS SELECT +MIN(t0), MAX(t0), AVG(t0), SUM(t0), +MIN(t3), MAX(t3), AVG(t3), SUM(t3), +MIN(t6), MAX(t6), AVG(t6), SUM(t6) +FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `MIN(t0)` datetime DEFAULT NULL, + `MAX(t0)` datetime DEFAULT NULL, + `AVG(t0)` decimal(18,4) DEFAULT NULL, + `SUM(t0)` decimal(36,0) DEFAULT NULL, + `MIN(t3)` datetime(3) DEFAULT NULL, + `MAX(t3)` datetime(3) DEFAULT NULL, + `AVG(t3)` decimal(21,7) DEFAULT NULL, + `SUM(t3)` decimal(39,3) DEFAULT NULL, + `MIN(t6)` datetime(6) DEFAULT NULL, + `MAX(t6)` datetime(6) DEFAULT NULL, + `AVG(t6)` decimal(24,10) DEFAULT NULL, + `SUM(t6)` decimal(42,6) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t2; +DROP TABLE t1; +# +# Testing functions ADDTIME, SUBTIME, TIMESTAMP, TIMEDIFF, DATE_ADD/SUB +# +CREATE TABLE t1 (a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)); +INSERT INTO t1 VALUES ('1970-01-01 01:00:01.000000'); +INSERT INTO t1 VALUES ('1970-01-01 01:00:01.000001'); +INSERT INTO t1 VALUES ('1971-01-01 01:00:00.000000'); +INSERT INTO t1 VALUES ('1971-01-01 01:00:00.000001'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000000'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000001'); +INSERT INTO t1 VALUES ('2001-01-01 01:00:00.000000'); +INSERT INTO t1 VALUES ('2001-01-01 01:00:00.000001'); +SELECT ADDTIME(a, '00:00:00.000001') FROM t1 ORDER BY a; +ADDTIME(a, '00:00:00.000001') +1970-01-01 01:00:01.000001 +1970-01-01 01:00:01.000002 +1971-01-01 01:00:00.000001 +1971-01-01 01:00:00.000002 +2001-01-01 00:00:00.000001 +2001-01-01 00:00:00.000002 +2001-01-01 01:00:00.000001 +2001-01-01 01:00:00.000002 +SELECT ADDTIME(a, '10:00:00.000001') FROM t1 ORDER BY a; +ADDTIME(a, '10:00:00.000001') +1970-01-01 11:00:01.000001 +1970-01-01 11:00:01.000002 +1971-01-01 11:00:00.000001 +1971-01-01 11:00:00.000002 +2001-01-01 10:00:00.000001 +2001-01-01 10:00:00.000002 +2001-01-01 11:00:00.000001 +2001-01-01 11:00:00.000002 +SELECT ADDTIME(CAST(a AS DATETIME(0)), 100000) FROM t1 ORDER BY a; +ADDTIME(CAST(a AS DATETIME(0)), 100000) +1970-01-01 11:00:01 +1970-01-01 11:00:01 +1971-01-01 11:00:00 +1971-01-01 11:00:00 +2001-01-01 10:00:00 +2001-01-01 10:00:00 +2001-01-01 11:00:00 +2001-01-01 11:00:00 +SELECT ADDTIME(CAST(a AS DATETIME(0)), 100000.1) FROM t1 ORDER BY a; +ADDTIME(CAST(a AS DATETIME(0)), 100000.1) +1970-01-01 11:00:01.1 +1970-01-01 11:00:01.1 +1971-01-01 11:00:00.1 +1971-01-01 11:00:00.1 +2001-01-01 10:00:00.1 +2001-01-01 10:00:00.1 +2001-01-01 11:00:00.1 +2001-01-01 11:00:00.1 +SELECT a, ADDTIME(CAST(a AS DATETIME(0)), CAST('10:00:00' AS TIME(0))) FROM t1 ORDER BY a; +a ADDTIME(CAST(a AS DATETIME(0)), CAST('10:00:00' AS TIME(0))) +1970-01-01 01:00:01.000000 1970-01-01 11:00:01 +1970-01-01 01:00:01.000001 1970-01-01 11:00:01 +1971-01-01 01:00:00.000000 1971-01-01 11:00:00 +1971-01-01 01:00:00.000001 1971-01-01 11:00:00 +2001-01-01 00:00:00.000000 2001-01-01 10:00:00 +2001-01-01 00:00:00.000001 2001-01-01 10:00:00 +2001-01-01 01:00:00.000000 2001-01-01 11:00:00 +2001-01-01 01:00:00.000001 2001-01-01 11:00:00 +SELECT a, ADDTIME(CAST(a AS DATETIME(6)), CAST('10:00:00' AS TIME(0))) FROM t1 ORDER BY a; +a ADDTIME(CAST(a AS DATETIME(6)), CAST('10:00:00' AS TIME(0))) +1970-01-01 01:00:01.000000 1970-01-01 11:00:01.000000 +1970-01-01 01:00:01.000001 1970-01-01 11:00:01.000001 +1971-01-01 01:00:00.000000 1971-01-01 11:00:00.000000 +1971-01-01 01:00:00.000001 1971-01-01 11:00:00.000001 +2001-01-01 00:00:00.000000 2001-01-01 10:00:00.000000 +2001-01-01 00:00:00.000001 2001-01-01 10:00:00.000001 +2001-01-01 01:00:00.000000 2001-01-01 11:00:00.000000 +2001-01-01 01:00:00.000001 2001-01-01 11:00:00.000001 +SELECT a, ADDTIME(CAST(a AS DATETIME(0)), CAST('10:00:00' AS TIME(6))) FROM t1 ORDER BY a; +a ADDTIME(CAST(a AS DATETIME(0)), CAST('10:00:00' AS TIME(6))) +1970-01-01 01:00:01.000000 1970-01-01 11:00:01.000000 +1970-01-01 01:00:01.000001 1970-01-01 11:00:01.000000 +1971-01-01 01:00:00.000000 1971-01-01 11:00:00.000000 +1971-01-01 01:00:00.000001 1971-01-01 11:00:00.000000 +2001-01-01 00:00:00.000000 2001-01-01 10:00:00.000000 +2001-01-01 00:00:00.000001 2001-01-01 10:00:00.000000 +2001-01-01 01:00:00.000000 2001-01-01 11:00:00.000000 +2001-01-01 01:00:00.000001 2001-01-01 11:00:00.000000 +SELECT ADDTIME(a, a) FROM t1 ORDER BY a; +ADDTIME(a, a) +NULL +NULL +NULL +NULL +NULL +NULL +NULL +NULL +CREATE TABLE t2 AS SELECT +ADDTIME(a, '00:00:00.000001'), +ADDTIME(a, '10:00:00.000001'), +ADDTIME(CAST(a AS DATETIME(0)), 100000), +ADDTIME(CAST(a AS DATETIME(0)), 100000.1), +ADDTIME(a,a) +FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `ADDTIME(a, '00:00:00.000001')` datetime(6) DEFAULT NULL, + `ADDTIME(a, '10:00:00.000001')` datetime(6) DEFAULT NULL, + `ADDTIME(CAST(a AS DATETIME(0)), 100000)` datetime DEFAULT NULL, + `ADDTIME(CAST(a AS DATETIME(0)), 100000.1)` datetime(1) DEFAULT NULL, + `ADDTIME(a,a)` datetime(6) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t2; +SELECT TIMESTAMP(a, '10:00:00') FROM t1; +TIMESTAMP(a, '10:00:00') +1970-01-01 11:00:01.000000 +1970-01-01 11:00:01.000001 +1971-01-01 11:00:00.000000 +1971-01-01 11:00:00.000001 +2001-01-01 10:00:00.000000 +2001-01-01 10:00:00.000001 +2001-01-01 11:00:00.000000 +2001-01-01 11:00:00.000001 +SELECT TIMESTAMP(CAST(a AS DATETIME(0)), CAST('00:00:00' AS TIME(0))) FROM t1; +TIMESTAMP(CAST(a AS DATETIME(0)), CAST('00:00:00' AS TIME(0))) +1970-01-01 01:00:01 +1970-01-01 01:00:01 +1971-01-01 01:00:00 +1971-01-01 01:00:00 +2001-01-01 00:00:00 +2001-01-01 00:00:00 +2001-01-01 01:00:00 +2001-01-01 01:00:00 +SELECT TIMESTAMP(CAST(a AS DATETIME(6)), CAST('00:00:00' AS TIME(0))) FROM t1; +TIMESTAMP(CAST(a AS DATETIME(6)), CAST('00:00:00' AS TIME(0))) +1970-01-01 01:00:01.000000 +1970-01-01 01:00:01.000001 +1971-01-01 01:00:00.000000 +1971-01-01 01:00:00.000001 +2001-01-01 00:00:00.000000 +2001-01-01 00:00:00.000001 +2001-01-01 01:00:00.000000 +2001-01-01 01:00:00.000001 +SELECT TIMESTAMP(CAST(a AS DATETIME(0)), CAST('00:00:00' AS TIME(6))) FROM t1; +TIMESTAMP(CAST(a AS DATETIME(0)), CAST('00:00:00' AS TIME(6))) +1970-01-01 01:00:01.000000 +1970-01-01 01:00:01.000000 +1971-01-01 01:00:00.000000 +1971-01-01 01:00:00.000000 +2001-01-01 00:00:00.000000 +2001-01-01 00:00:00.000000 +2001-01-01 01:00:00.000000 +2001-01-01 01:00:00.000000 +CREATE TABLE t2 AS SELECT +TIMESTAMP(a, '10:00:00'), +TIMESTAMP(CAST(a AS DATETIME(0)), CAST('00:00:00' AS TIME(0))), +TIMESTAMP(CAST(a AS DATETIME(6)), CAST('00:00:00' AS TIME(0))), +TIMESTAMP(CAST(a AS DATETIME(0)), CAST('00:00:00' AS TIME(6))) +FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `TIMESTAMP(a, '10:00:00')` datetime(6) DEFAULT NULL, + `TIMESTAMP(CAST(a AS DATETIME(0)), CAST('00:00:00' AS TIME(0)))` datetime DEFAULT NULL, + `TIMESTAMP(CAST(a AS DATETIME(6)), CAST('00:00:00' AS TIME(0)))` datetime(6) DEFAULT NULL, + `TIMESTAMP(CAST(a AS DATETIME(0)), CAST('00:00:00' AS TIME(6)))` datetime(6) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t2; +SELECT SUBTIME(a, '00:00:00.000001') FROM t1 ORDER BY a; +SUBTIME(a, '00:00:00.000001') +1970-01-01 01:00:00.999999 +1970-01-01 01:00:01.000000 +1971-01-01 00:59:59.999999 +1971-01-01 01:00:00.000000 +2000-12-31 23:59:59.999999 +2001-01-01 00:00:00.000000 +2001-01-01 00:59:59.999999 +2001-01-01 01:00:00.000000 +SELECT SUBTIME(a, '10:00:00.000001') FROM t1 ORDER BY a; +SUBTIME(a, '10:00:00.000001') +1969-12-31 15:00:00.999999 +1969-12-31 15:00:01.000000 +1970-12-31 14:59:59.999999 +1970-12-31 15:00:00.000000 +2000-12-31 13:59:59.999999 +2000-12-31 14:00:00.000000 +2000-12-31 14:59:59.999999 +2000-12-31 15:00:00.000000 +SELECT SUBTIME(a, a) FROM t1 ORDER BY a; +SUBTIME(a, a) +NULL +NULL +NULL +NULL +NULL +NULL +NULL +NULL +CREATE TABLE t2 AS SELECT +SUBTIME(a, '00:00:00.000001'), +SUBTIME(a, '10:00:00.000001'), +SUBTIME(CAST(a AS DATETIME(0)), 100000), +SUBTIME(CAST(a AS DATETIME(0)), 100000.1), +SUBTIME(a,a) +FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `SUBTIME(a, '00:00:00.000001')` datetime(6) DEFAULT NULL, + `SUBTIME(a, '10:00:00.000001')` datetime(6) DEFAULT NULL, + `SUBTIME(CAST(a AS DATETIME(0)), 100000)` datetime DEFAULT NULL, + `SUBTIME(CAST(a AS DATETIME(0)), 100000.1)` datetime(1) DEFAULT NULL, + `SUBTIME(a,a)` datetime(6) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t2; +SELECT DATE_ADD(a, INTERVAL 1 MINUTE) FROM t1 ORDER BY a; +DATE_ADD(a, INTERVAL 1 MINUTE) +1970-01-01 01:01:01.000000 +1970-01-01 01:01:01.000001 +1971-01-01 01:01:00.000000 +1971-01-01 01:01:00.000001 +2001-01-01 00:01:00.000000 +2001-01-01 00:01:00.000001 +2001-01-01 01:01:00.000000 +2001-01-01 01:01:00.000001 +SELECT DATE_SUB(a, INTERVAL 1 MINUTE) FROM t1 ORDER BY a; +DATE_SUB(a, INTERVAL 1 MINUTE) +1970-01-01 00:59:01.000000 +1970-01-01 00:59:01.000001 +1971-01-01 00:59:00.000000 +1971-01-01 00:59:00.000001 +2000-12-31 23:59:00.000000 +2000-12-31 23:59:00.000001 +2001-01-01 00:59:00.000000 +2001-01-01 00:59:00.000001 +SELECT DATE_ADD(CAST(a AS DATETIME), INTERVAL 1 MINUTE) FROM t1 ORDER BY a; +DATE_ADD(CAST(a AS DATETIME), INTERVAL 1 MINUTE) +1970-01-01 01:01:01 +1970-01-01 01:01:01 +1971-01-01 01:01:00 +1971-01-01 01:01:00 +2001-01-01 00:01:00 +2001-01-01 00:01:00 +2001-01-01 01:01:00 +2001-01-01 01:01:00 +SELECT DATE_SUB(CAST(a AS DATETIME), INTERVAL 1 MINUTE) FROM t1 ORDER BY a; +DATE_SUB(CAST(a AS DATETIME), INTERVAL 1 MINUTE) +1970-01-01 00:59:01 +1970-01-01 00:59:01 +1971-01-01 00:59:00 +1971-01-01 00:59:00 +2000-12-31 23:59:00 +2000-12-31 23:59:00 +2001-01-01 00:59:00 +2001-01-01 00:59:00 +SELECT DATE_ADD(CAST(a AS DATETIME), INTERVAL 1 MICROSECOND) FROM t1 ORDER BY a; +DATE_ADD(CAST(a AS DATETIME), INTERVAL 1 MICROSECOND) +1970-01-01 01:00:01.000001 +1970-01-01 01:00:01.000001 +1971-01-01 01:00:00.000001 +1971-01-01 01:00:00.000001 +2001-01-01 00:00:00.000001 +2001-01-01 00:00:00.000001 +2001-01-01 01:00:00.000001 +2001-01-01 01:00:00.000001 +SELECT DATE_SUB(CAST(a AS DATETIME), INTERVAL 1 MICROSECOND) FROM t1 ORDER BY a; +DATE_SUB(CAST(a AS DATETIME), INTERVAL 1 MICROSECOND) +1970-01-01 01:00:00.999999 +1970-01-01 01:00:00.999999 +1971-01-01 00:59:59.999999 +1971-01-01 00:59:59.999999 +2000-12-31 23:59:59.999999 +2000-12-31 23:59:59.999999 +2001-01-01 00:59:59.999999 +2001-01-01 00:59:59.999999 +SELECT a, DATE_ADD(a, INTERVAL -0.1 SECOND) FROM t1 ORDER BY a; +a DATE_ADD(a, INTERVAL -0.1 SECOND) +1970-01-01 01:00:01.000000 1970-01-01 01:00:00.900000 +1970-01-01 01:00:01.000001 1970-01-01 01:00:00.900001 +1971-01-01 01:00:00.000000 1971-01-01 00:59:59.900000 +1971-01-01 01:00:00.000001 1971-01-01 00:59:59.900001 +2001-01-01 00:00:00.000000 2000-12-31 23:59:59.900000 +2001-01-01 00:00:00.000001 2000-12-31 23:59:59.900001 +2001-01-01 01:00:00.000000 2001-01-01 00:59:59.900000 +2001-01-01 01:00:00.000001 2001-01-01 00:59:59.900001 +SELECT a, DATE_SUB(a, INTERVAL -0.1 SECOND) FROM t1 ORDER BY a; +a DATE_SUB(a, INTERVAL -0.1 SECOND) +1970-01-01 01:00:01.000000 1970-01-01 01:00:01.100000 +1970-01-01 01:00:01.000001 1970-01-01 01:00:01.100001 +1971-01-01 01:00:00.000000 1971-01-01 01:00:00.100000 +1971-01-01 01:00:00.000001 1971-01-01 01:00:00.100001 +2001-01-01 00:00:00.000000 2001-01-01 00:00:00.100000 +2001-01-01 00:00:00.000001 2001-01-01 00:00:00.100001 +2001-01-01 01:00:00.000000 2001-01-01 01:00:00.100000 +2001-01-01 01:00:00.000001 2001-01-01 01:00:00.100001 +CREATE TABLE t2 AS SELECT +DATE_ADD(a, INTERVAL 1 SECOND), +DATE_SUB(a, INTERVAL 1 SECOND), +DATE_ADD(CAST(a AS DATETIME), INTERVAL 1 SECOND), +DATE_SUB(CAST(a AS DATETIME), INTERVAL 1 SECOND), +DATE_ADD(CAST(a AS DATETIME), INTERVAL 1 MICROSECOND), +DATE_SUB(CAST(a AS DATETIME), INTERVAL 1 MICROSECOND) +FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `DATE_ADD(a, INTERVAL 1 SECOND)` datetime(6) DEFAULT NULL, + `DATE_SUB(a, INTERVAL 1 SECOND)` datetime(6) DEFAULT NULL, + `DATE_ADD(CAST(a AS DATETIME), INTERVAL 1 SECOND)` datetime DEFAULT NULL, + `DATE_SUB(CAST(a AS DATETIME), INTERVAL 1 SECOND)` datetime DEFAULT NULL, + `DATE_ADD(CAST(a AS DATETIME), INTERVAL 1 MICROSECOND)` datetime(6) DEFAULT NULL, + `DATE_SUB(CAST(a AS DATETIME), INTERVAL 1 MICROSECOND)` datetime(6) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t2; +CREATE TABLE t2 AS SELECT MAX(DATE_ADD(a, INTERVAL 1 MINUTE)) FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `MAX(DATE_ADD(a, INTERVAL 1 MINUTE))` datetime(6) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +SELECT * FROM t2; +MAX(DATE_ADD(a, INTERVAL 1 MINUTE)) +2001-01-01 01:01:00.000001 +DROP TABLE t2; +DROP TABLE t1; +# +# Testing explicit CAST of datetime hybrid functions to DATETIME +# +SET @@timestamp=UNIX_TIMESTAMP('2001-01-01 00:00:00'); +SELECT CAST(ADDTIME('20:10:10', 10) AS DATETIME); +CAST(ADDTIME('20:10:10', 10) AS DATETIME) +2001-01-01 20:10:20 +SELECT CAST(CAST('10:10:20' AS TIME) + INTERVAL 10 HOUR AS DATETIME); +CAST(CAST('10:10:20' AS TIME) + INTERVAL 10 HOUR AS DATETIME) +2001-01-01 20:10:20 +SELECT CAST(CAST('10:10:20' AS TIME(6)) + INTERVAL 10 HOUR AS DATETIME); +CAST(CAST('10:10:20' AS TIME(6)) + INTERVAL 10 HOUR AS DATETIME) +2001-01-01 20:10:20 +SELECT CAST(STR_TO_DATE('23:59:01','%H:%i:%s') AS DATETIME); +CAST(STR_TO_DATE('23:59:01','%H:%i:%s') AS DATETIME) +NULL +Warnings: +Warning 1411 Incorrect datetime value: '23:59:01' for function str_to_date +SELECT CAST(STR_TO_DATE('23:59:01.123','%H:%i:%s.%f') AS DATETIME(6)); +CAST(STR_TO_DATE('23:59:01.123','%H:%i:%s.%f') AS DATETIME(6)) +NULL +Warnings: +Warning 1411 Incorrect datetime value: '23:59:01.123' for function str_to_date +SELECT CAST(ADDTIME('40:10:10', 10) as DATETIME); +CAST(ADDTIME('40:10:10', 10) as DATETIME) +2001-01-02 16:10:20 +SELECT CAST(CAST('10:10:20' AS TIME) + INTERVAL 30 HOUR AS DATETIME); +CAST(CAST('10:10:20' AS TIME) + INTERVAL 30 HOUR AS DATETIME) +2001-01-02 16:10:20 +SELECT CAST(CAST('10:10:20' AS TIME(6)) + INTERVAL 30 HOUR AS DATETIME); +CAST(CAST('10:10:20' AS TIME(6)) + INTERVAL 30 HOUR AS DATETIME) +2001-01-02 16:10:20 +SET @@timestamp=default; +# +# Testing copy from TIMESTAMP to TIMESTAMP(6) and vice versa +# +CREATE TABLE t1 (a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6), b TIMESTAMP NOT NULL DEFAULT '1971-01-01 00:00:00.000000'); +INSERT INTO t1 VALUES ('2001-01-01 01:02:03.123456', '1971-01-01 00:00:00'); +UPDATE t1 SET b=a; +SELECT b FROM t1; +b +2001-01-01 01:02:03 +UPDATE t1 SET b='2002-02-02 10:11:12'; +UPDATE t1 SET a=b; +SELECT a FROM t1; +a +2002-02-02 10:11:12.000000 +DROP TABLE t1; +# +# Testing ALTER from TIMESTAMP(6) to TIMESTAMP and vice versa +# +CREATE TABLE t1 (a TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP); +INSERT INTO t1 VALUES ('2000-01-01 01:02:03'); +ALTER TABLE t1 MODIFY a TIMESTAMP(6); +SELECT * FROM t1; +a +2000-01-01 01:02:03.000000 +UPDATE t1 SET a='2000-01-01 01:03:03.456'; +SELECT * FROM t1; +a +2000-01-01 01:03:03.456000 +ALTER TABLE t1 MODIFY a TIMESTAMP; +SELECT * FROM t1; +a +2000-01-01 01:03:03 +DROP TABLE t1; +# +# Testing ALTER between TIMESTAMP and BIGINT +# +CREATE TABLE t1 (a TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, b TIMESTAMP(6) NOT NULL DEFAULT '1971-01-01 00:00:00.000000'); +INSERT INTO t1 VALUES ('2000-01-01 11:22:33', '2000-01-01 11:22:33'); +ALTER TABLE t1 MODIFY a BIGINT, MODIFY b BIGINT; +SELECT * FROM t1; +a b +20000101112233 20000101112233 +UPDATE t1 SET a=20000101112233, b=20000101112233; +ALTER TABLE t1 MODIFY a TIMESTAMP, MODIFY b TIMESTAMP(6) NULL; +SELECT * FROM t1; +a b +2000-01-01 11:22:33 2000-01-01 11:22:33.000000 +DROP TABLE t1; +# +# Testing ALTER between TIMESTAMP(6) and DOUBLE +# +CREATE TABLE t1 (a TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, b TIMESTAMP(6) NOT NULL DEFAULT '1971-01-01 00:00:00.000000'); +INSERT INTO t1 VALUES ('2001-01-01 11:22:33', '2001-01-01 11:22:33.1234'); +ALTER TABLE t1 MODIFY a DOUBLE, MODIFY b DOUBLE; +SELECT * FROM t1; +a b +20010101112233 20010101112233.125 +UPDATE t1 SET a=20010101101112, b=20010101101112.1; +ALTER TABLE t1 MODIFY a TIMESTAMP, MODIFY b TIMESTAMP(6) NULL; +SELECT * FROM t1; +a b +2001-01-01 10:11:12 2001-01-01 10:11:12.100000 +DROP TABLE t1; +# +# Testing ALTER between TIMESTAMP(6) and DECIMAL +# +CREATE TABLE t1 (a TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, b TIMESTAMP(6) NOT NULL DEFAULT '1971-01-01 00:00:00'); +INSERT INTO t1 VALUES ('2001-01-01 11:22:33', '2001-01-01 11:22:33.1234'); +ALTER TABLE t1 MODIFY a DECIMAL(30,6), MODIFY b DECIMAL(30,6); +SELECT * FROM t1; +a b +20010101112233.000000 20010101112233.123400 +UPDATE t1 SET a=20010101112233, b=20010101112233.1234; +ALTER TABLE t1 MODIFY a TIMESTAMP, MODIFY b TIMESTAMP(6) NULL; +SELECT * FROM t1; +a b +2001-01-01 11:22:33 2001-01-01 11:22:33.123400 +DROP TABLE t1; +# +# Testing ALTER from TIMESTAMP to various other temporal types +# +CREATE TABLE t1 (a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6), b TIMESTAMP(6) NOT NULL DEFAULT '1971-01-01 00:00:00', c TIMESTAMP(6) NOT NULL DEFAULT '1971-01-01 00:00:00'); +INSERT INTO t1 VALUES +('2001-01-01 10:10:10.1', '2001-01-01 10:10:10.1', '2001-01-01 10:10:10.1'); +ALTER TABLE t1 MODIFY a TIME(6), MODIFY b DATETIME(6), MODIFY c DATE; +Warnings: +Note 1292 Incorrect date value: '2001-01-01 10:10:10' for column 'c' at row 1 +SELECT * FROM t1; +a b c +10:10:10.100000 2001-01-01 10:10:10.100000 2001-01-01 +DROP TABLE t1; +# +# Testing INT value and CAST of TIMESTAMP(6) to various other types +# +CREATE TABLE t1 (a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)); +INSERT INTO t1 VALUES ('2001-01-01 11:22:33.123'); +SELECT CAST(a AS DATETIME) FROM t1; +CAST(a AS DATETIME) +2001-01-01 11:22:33 +SELECT CAST(a AS DATETIME(6)) FROM t1; +CAST(a AS DATETIME(6)) +2001-01-01 11:22:33.123000 +SELECT CAST(a AS TIME) FROM t1; +CAST(a AS TIME) +11:22:33 +SELECT CAST(a AS TIME(6)) FROM t1; +CAST(a AS TIME(6)) +11:22:33.123000 +SELECT a << 0 FROM t1; +a << 0 +20010101112233 +SELECT CAST(a AS SIGNED) FROM t1; +CAST(a AS SIGNED) +20010101112233 +SELECT CAST(a AS UNSIGNED) FROM t1; +CAST(a AS UNSIGNED) +20010101112233 +SELECT CAST(a AS DECIMAL(30,6)) FROM t1; +CAST(a AS DECIMAL(30,6)) +20010101112233.123000 +SELECT CAST(a AS DECIMAL(30,3)) FROM t1; +CAST(a AS DECIMAL(30,3)) +20010101112233.123 +SELECT CAST(a AS CHAR) FROM t1; +CAST(a AS CHAR) +2001-01-01 11:22:33.123000 +SELECT CAST(a AS CHAR(6)) FROM t1; +CAST(a AS CHAR(6)) +2001-0 +Warnings: +Warning 1292 Truncated incorrect CHAR(6) value: '2001-01-01 11:22:33.123000' +CREATE TABLE t2 AS SELECT CAST(a AS CHAR) AS a FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` varchar(26) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +SELECT a, LENGTH(a) FROM t2; +a LENGTH(a) +2001-01-01 11:22:33.123000 26 +DROP TABLE t2; +DROP TABLE t1; +# +# Testing that default precision in "DEFAULT CURRENT_TIMESTAMP(N)" +# and "ON UPDATE CURRENT_TIMESTAMP(N)" is the same to the precision +# of the field itself. +# +CREATE TABLE t1 (a TIMESTAMP(1) NOT NULL DEFAULT CURRENT_TIMESTAMP(1) ON UPDATE CURRENT_TIMESTAMP(1)); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` timestamp(1) NOT NULL DEFAULT CURRENT_TIMESTAMP(1) ON UPDATE CURRENT_TIMESTAMP(1) +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t1; +CREATE TABLE t1 (a TIMESTAMP(2) NOT NULL DEFAULT CURRENT_TIMESTAMP(2) ON UPDATE CURRENT_TIMESTAMP(2)); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` timestamp(2) NOT NULL DEFAULT CURRENT_TIMESTAMP(2) ON UPDATE CURRENT_TIMESTAMP(2) +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t1; +CREATE TABLE t1 (a TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3)); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t1; +CREATE TABLE t1 (a TIMESTAMP(4) NOT NULL DEFAULT CURRENT_TIMESTAMP(4) ON UPDATE CURRENT_TIMESTAMP(4)); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` timestamp(4) NOT NULL DEFAULT CURRENT_TIMESTAMP(4) ON UPDATE CURRENT_TIMESTAMP(4) +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t1; +CREATE TABLE t1 (a TIMESTAMP(5) NOT NULL DEFAULT CURRENT_TIMESTAMP(5) ON UPDATE CURRENT_TIMESTAMP(5)); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` timestamp(5) NOT NULL DEFAULT CURRENT_TIMESTAMP(5) ON UPDATE CURRENT_TIMESTAMP(5) +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t1; +CREATE TABLE t1 (a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t1; +# +# Testing DEFAULT value +# +CREATE TABLE t1 (a TIMESTAMP(6) NOT NULL DEFAULT '2000-01-01 11:22:33.123456'); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` timestamp(6) NOT NULL DEFAULT '2000-01-01 11:22:33.123456' +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t1; +# +# Testing DEFAULT CURRENT_TIMESTAMP +# +CREATE TABLE t1 (a TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP(0)); +DROP TABLE t1; +CREATE TABLE t1 (a TIMESTAMP DEFAULT CURRENT_TIMESTAMP(1)); +ERROR 42000: Invalid default value for 'a' +CREATE TABLE t1 (a TIMESTAMP DEFAULT CURRENT_TIMESTAMP(2)); +ERROR 42000: Invalid default value for 'a' +CREATE TABLE t1 (a TIMESTAMP DEFAULT CURRENT_TIMESTAMP(3)); +ERROR 42000: Invalid default value for 'a' +CREATE TABLE t1 (a TIMESTAMP DEFAULT CURRENT_TIMESTAMP(4)); +ERROR 42000: Invalid default value for 'a' +CREATE TABLE t1 (a TIMESTAMP DEFAULT CURRENT_TIMESTAMP(5)); +ERROR 42000: Invalid default value for 'a' +CREATE TABLE t1 (a TIMESTAMP DEFAULT CURRENT_TIMESTAMP(6)); +ERROR 42000: Invalid default value for 'a' +CREATE TABLE t1 (a TIMESTAMP(3) DEFAULT CURRENT_TIMESTAMP); +ERROR 42000: Invalid default value for 'a' +CREATE TABLE t1 (a TIMESTAMP(3) DEFAULT CURRENT_TIMESTAMP(0)); +ERROR 42000: Invalid default value for 'a' +CREATE TABLE t1 (a TIMESTAMP(3) DEFAULT CURRENT_TIMESTAMP(1)); +ERROR 42000: Invalid default value for 'a' +CREATE TABLE t1 (a TIMESTAMP(3) DEFAULT CURRENT_TIMESTAMP(2)); +ERROR 42000: Invalid default value for 'a' +CREATE TABLE t1 (a TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3)); +SHOW COLUMNS FROM t1; +Field Type Null Key Default Extra +a timestamp(3) NO CURRENT_TIMESTAMP(3) +DROP TABLE t1; +CREATE TABLE t1 (a TIMESTAMP(3) DEFAULT CURRENT_TIMESTAMP(4)); +ERROR 42000: Invalid default value for 'a' +CREATE TABLE t1 (a TIMESTAMP(3) DEFAULT CURRENT_TIMESTAMP(5)); +ERROR 42000: Invalid default value for 'a' +CREATE TABLE t1 (a TIMESTAMP(3) DEFAULT CURRENT_TIMESTAMP(6)); +ERROR 42000: Invalid default value for 'a' +CREATE TABLE t1 (a TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP); +ERROR 42000: Invalid default value for 'a' +CREATE TABLE t1 (a TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(0)); +ERROR 42000: Invalid default value for 'a' +CREATE TABLE t1 (a TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(1)); +ERROR 42000: Invalid default value for 'a' +CREATE TABLE t1 (a TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(2)); +ERROR 42000: Invalid default value for 'a' +CREATE TABLE t1 (a TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(4)); +ERROR 42000: Invalid default value for 'a' +CREATE TABLE t1 (a TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(5)); +ERROR 42000: Invalid default value for 'a' +CREATE TABLE t1 (a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6)); +SHOW COLUMNS FROM t1; +Field Type Null Key Default Extra +a timestamp(6) NO CURRENT_TIMESTAMP(6) +DROP TABLE t1; +CREATE TABLE t1 (a DATETIME DEFAULT CURRENT_TIMESTAMP(0)); +DROP TABLE t1; +CREATE TABLE t1 (a DATETIME DEFAULT CURRENT_TIMESTAMP(1)); +ERROR 42000: Invalid default value for 'a' +CREATE TABLE t1 (a DATETIME DEFAULT CURRENT_TIMESTAMP(2)); +ERROR 42000: Invalid default value for 'a' +CREATE TABLE t1 (a DATETIME DEFAULT CURRENT_TIMESTAMP(3)); +ERROR 42000: Invalid default value for 'a' +CREATE TABLE t1 (a DATETIME DEFAULT CURRENT_TIMESTAMP(4)); +ERROR 42000: Invalid default value for 'a' +CREATE TABLE t1 (a DATETIME DEFAULT CURRENT_TIMESTAMP(5)); +ERROR 42000: Invalid default value for 'a' +CREATE TABLE t1 (a DATETIME DEFAULT CURRENT_TIMESTAMP(6)); +ERROR 42000: Invalid default value for 'a' +CREATE TABLE t1 (a DATETIME(3) DEFAULT CURRENT_TIMESTAMP); +ERROR 42000: Invalid default value for 'a' +CREATE TABLE t1 (a DATETIME(3) DEFAULT CURRENT_TIMESTAMP(0)); +ERROR 42000: Invalid default value for 'a' +CREATE TABLE t1 (a DATETIME(3) DEFAULT CURRENT_TIMESTAMP(1)); +ERROR 42000: Invalid default value for 'a' +CREATE TABLE t1 (a DATETIME(3) DEFAULT CURRENT_TIMESTAMP(2)); +ERROR 42000: Invalid default value for 'a' +CREATE TABLE t1 (a DATETIME(3) DEFAULT CURRENT_TIMESTAMP(3)); +SHOW COLUMNS FROM t1; +Field Type Null Key Default Extra +a datetime(3) YES CURRENT_TIMESTAMP(3) +DROP TABLE t1; +CREATE TABLE t1 (a DATETIME(3) DEFAULT CURRENT_TIMESTAMP(4)); +ERROR 42000: Invalid default value for 'a' +CREATE TABLE t1 (a DATETIME(3) DEFAULT CURRENT_TIMESTAMP(5)); +ERROR 42000: Invalid default value for 'a' +CREATE TABLE t1 (a DATETIME(3) DEFAULT CURRENT_TIMESTAMP(6)); +ERROR 42000: Invalid default value for 'a' +CREATE TABLE t1 (a DATETIME(6) DEFAULT CURRENT_TIMESTAMP); +ERROR 42000: Invalid default value for 'a' +CREATE TABLE t1 (a DATETIME(6) DEFAULT CURRENT_TIMESTAMP(0)); +ERROR 42000: Invalid default value for 'a' +CREATE TABLE t1 (a DATETIME(6) DEFAULT CURRENT_TIMESTAMP(1)); +ERROR 42000: Invalid default value for 'a' +CREATE TABLE t1 (a DATETIME(6) DEFAULT CURRENT_TIMESTAMP(2)); +ERROR 42000: Invalid default value for 'a' +CREATE TABLE t1 (a DATETIME(6) DEFAULT CURRENT_TIMESTAMP(4)); +ERROR 42000: Invalid default value for 'a' +CREATE TABLE t1 (a DATETIME(6) DEFAULT CURRENT_TIMESTAMP(5)); +ERROR 42000: Invalid default value for 'a' +CREATE TABLE t1 (a DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6)); +SHOW COLUMNS FROM t1; +Field Type Null Key Default Extra +a datetime(6) YES CURRENT_TIMESTAMP(6) +DROP TABLE t1; +# +# Testing that DEFAULT CURRENT_TIMESTAMP(n) truncates rather than rounds +# +SET timestamp=UNIX_TIMESTAMP('2001-01-01 00:00:00.999999'); +CREATE TABLE t1 ( +a TIMESTAMP(2) NOT NULL DEFAULT CURRENT_TIMESTAMP(2) ON UPDATE CURRENT_TIMESTAMP(2), +b DATETIME(2) DEFAULT CURRENT_TIMESTAMP(2) +); +INSERT INTO t1 VALUES (DEFAULT, DEFAULT); +INSERT INTO t1 VALUES (); +SELECT CURRENT_TIMESTAMP(6); +CURRENT_TIMESTAMP(6) +2001-01-01 00:00:00.999999 +SELECT * FROM t1; +a b +2001-01-01 00:00:00.99 2001-01-01 00:00:00.99 +2001-01-01 00:00:00.99 2001-01-01 00:00:00.99 +DROP TABLE t1; +SET timestamp=DEFAULT; +# +# Testing ON UPDATE CURRENT_TIMESTAMP +# +CREATE TABLE t1 (a TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP); +ERROR HY000: Invalid ON UPDATE clause for 'a' column +CREATE TABLE t1 (a TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(0)); +ERROR HY000: Invalid ON UPDATE clause for 'a' column +CREATE TABLE t1 (a TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(1)); +ERROR HY000: Invalid ON UPDATE clause for 'a' column +CREATE TABLE t1 (a TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(2)); +ERROR HY000: Invalid ON UPDATE clause for 'a' column +CREATE TABLE t1 (a TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(4)); +ERROR HY000: Invalid ON UPDATE clause for 'a' column +CREATE TABLE t1 (a TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(5)); +ERROR HY000: Invalid ON UPDATE clause for 'a' column +CREATE TABLE t1 (a TIMESTAMP(6) NOT NULL DEFAULT '1971-01-01 00:00:00.000000' ON UPDATE CURRENT_TIMESTAMP(6)); +SHOW COLUMNS FROM t1; +Field Type Null Key Default Extra +a timestamp(6) NO 1971-01-01 00:00:00.000000 on update CURRENT_TIMESTAMP(6) +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` timestamp(6) NOT NULL DEFAULT '1971-01-01 00:00:00.000000' ON UPDATE CURRENT_TIMESTAMP(6) +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t1; +CREATE TABLE t1 (a DATETIME(6) ON UPDATE CURRENT_TIMESTAMP); +ERROR HY000: Invalid ON UPDATE clause for 'a' column +CREATE TABLE t1 (a DATETIME(6) ON UPDATE CURRENT_TIMESTAMP(0)); +ERROR HY000: Invalid ON UPDATE clause for 'a' column +CREATE TABLE t1 (a DATETIME(6) ON UPDATE CURRENT_TIMESTAMP(1)); +ERROR HY000: Invalid ON UPDATE clause for 'a' column +CREATE TABLE t1 (a DATETIME(6) ON UPDATE CURRENT_TIMESTAMP(2)); +ERROR HY000: Invalid ON UPDATE clause for 'a' column +CREATE TABLE t1 (a DATETIME(6) ON UPDATE CURRENT_TIMESTAMP(4)); +ERROR HY000: Invalid ON UPDATE clause for 'a' column +CREATE TABLE t1 (a DATETIME(6) ON UPDATE CURRENT_TIMESTAMP(5)); +ERROR HY000: Invalid ON UPDATE clause for 'a' column +CREATE TABLE t1 (a DATETIME(6) ON UPDATE CURRENT_TIMESTAMP(6)); +SHOW COLUMNS FROM t1; +Field Type Null Key Default Extra +a datetime(6) YES NULL on update CURRENT_TIMESTAMP(6) +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` datetime(6) DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP(6) +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t1; +# +# Testing partitions +# +CREATE TABLE t1 (a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)) PARTITION BY KEY(a) PARTITIONS 4; +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000000'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000001'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000002'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000003'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000004'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000005'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000006'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000010'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000011'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000012'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000013'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000014'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000015'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000016'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000110'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000111'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000112'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000113'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000114'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000115'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000116'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000210'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000211'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000212'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000213'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000214'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000215'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000216'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:01.000000'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:01.000001'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:01.000002'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:01.000003'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:01.000004'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:01.000005'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:01.000006'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:02.000000'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:02.000001'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:02.000002'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:02.000003'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:02.000004'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:02.000005'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:02.000006'); +SELECT * FROM t1 PARTITION(p0); +a +2001-01-01 00:00:00.000003 +2001-01-01 00:00:00.000011 +2001-01-01 00:00:00.000015 +2001-01-01 00:00:00.000111 +2001-01-01 00:00:00.000115 +2001-01-01 00:00:00.000211 +2001-01-01 00:00:00.000215 +2001-01-01 00:00:01.000003 +2001-01-01 00:00:02.000003 +SELECT * FROM t1 PARTITION(p1); +a +2001-01-01 00:00:00.000000 +2001-01-01 00:00:00.000004 +2001-01-01 00:00:00.000012 +2001-01-01 00:00:00.000016 +2001-01-01 00:00:00.000112 +2001-01-01 00:00:00.000116 +2001-01-01 00:00:00.000212 +2001-01-01 00:00:00.000216 +2001-01-01 00:00:01.000002 +2001-01-01 00:00:01.000006 +2001-01-01 00:00:02.000000 +2001-01-01 00:00:02.000004 +SELECT * FROM t1 PARTITION(p2); +a +2001-01-01 00:00:00.000001 +2001-01-01 00:00:00.000005 +2001-01-01 00:00:00.000013 +2001-01-01 00:00:00.000113 +2001-01-01 00:00:00.000213 +2001-01-01 00:00:01.000001 +2001-01-01 00:00:01.000005 +2001-01-01 00:00:02.000001 +2001-01-01 00:00:02.000005 +SELECT * FROM t1 PARTITION(p3); +a +2001-01-01 00:00:00.000002 +2001-01-01 00:00:00.000006 +2001-01-01 00:00:00.000010 +2001-01-01 00:00:00.000014 +2001-01-01 00:00:00.000110 +2001-01-01 00:00:00.000114 +2001-01-01 00:00:00.000210 +2001-01-01 00:00:00.000214 +2001-01-01 00:00:01.000000 +2001-01-01 00:00:01.000004 +2001-01-01 00:00:02.000002 +2001-01-01 00:00:02.000006 +ALTER TABLE t1 PARTITION BY RANGE COLUMNS (a) +( +PARTITION p0 VALUES LESS THAN ('2001-01-01 00:00:00.000200'), +PARTITION p1 VALUES LESS THAN ('2001-01-01 00:00:01'), +PARTITION p2 VALUES LESS THAN ('2001-01-01 00:00:02.000003'), +PARTITION p3 VALUES LESS THAN MAXVALUE +); +ERROR HY000: Field 'a' is of a not allowed type for this type of partitioning +SELECT * FROM t1 PARTITION(p0); +a +2001-01-01 00:00:00.000003 +2001-01-01 00:00:00.000011 +2001-01-01 00:00:00.000015 +2001-01-01 00:00:00.000111 +2001-01-01 00:00:00.000115 +2001-01-01 00:00:00.000211 +2001-01-01 00:00:00.000215 +2001-01-01 00:00:01.000003 +2001-01-01 00:00:02.000003 +SELECT * FROM t1 PARTITION(p1); +a +2001-01-01 00:00:00.000000 +2001-01-01 00:00:00.000004 +2001-01-01 00:00:00.000012 +2001-01-01 00:00:00.000016 +2001-01-01 00:00:00.000112 +2001-01-01 00:00:00.000116 +2001-01-01 00:00:00.000212 +2001-01-01 00:00:00.000216 +2001-01-01 00:00:01.000002 +2001-01-01 00:00:01.000006 +2001-01-01 00:00:02.000000 +2001-01-01 00:00:02.000004 +SELECT * FROM t1 PARTITION(p2); +a +2001-01-01 00:00:00.000001 +2001-01-01 00:00:00.000005 +2001-01-01 00:00:00.000013 +2001-01-01 00:00:00.000113 +2001-01-01 00:00:00.000213 +2001-01-01 00:00:01.000001 +2001-01-01 00:00:01.000005 +2001-01-01 00:00:02.000001 +2001-01-01 00:00:02.000005 +SELECT * FROM t1 PARTITION(p3); +a +2001-01-01 00:00:00.000002 +2001-01-01 00:00:00.000006 +2001-01-01 00:00:00.000010 +2001-01-01 00:00:00.000014 +2001-01-01 00:00:00.000110 +2001-01-01 00:00:00.000114 +2001-01-01 00:00:00.000210 +2001-01-01 00:00:00.000214 +2001-01-01 00:00:01.000000 +2001-01-01 00:00:01.000004 +2001-01-01 00:00:02.000002 +2001-01-01 00:00:02.000006 +DROP TABLE t1; +# +# CAST from TIMESTAMP to TATETIME +# +CREATE TABLE t1 (a TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, b TIMESTAMP(6) NOT NULL DEFAULT '1971-01-01 00:00:00'); +INSERT INTO t1 VALUES ('2001-01-01 11:22:33', '2001-01-01 11:22:33.123456'); +CREATE TABLE t2 AS SELECT CAST(a AS DATETIME), CAST(b AS DATETIME) FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `CAST(a AS DATETIME)` datetime DEFAULT NULL, + `CAST(b AS DATETIME)` datetime DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +SELECT * FROM t2; +CAST(a AS DATETIME) CAST(b AS DATETIME) +2001-01-01 11:22:33 2001-01-01 11:22:33 +DROP TABLE t2; +CREATE TABLE t2 AS SELECT CAST(a AS DATETIME(0)), CAST(b AS DATETIME(0)) FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `CAST(a AS DATETIME(0))` datetime DEFAULT NULL, + `CAST(b AS DATETIME(0))` datetime DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +SELECT * FROM t2; +CAST(a AS DATETIME(0)) CAST(b AS DATETIME(0)) +2001-01-01 11:22:33 2001-01-01 11:22:33 +DROP TABLE t2; +CREATE TABLE t2 AS SELECT CAST(a AS DATETIME(6)), CAST(b AS DATETIME(6)) FROM t1; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `CAST(a AS DATETIME(6))` datetime(6) DEFAULT NULL, + `CAST(b AS DATETIME(6))` datetime(6) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +SELECT * FROM t2; +CAST(a AS DATETIME(6)) CAST(b AS DATETIME(6)) +2001-01-01 11:22:33.000000 2001-01-01 11:22:33.123456 +DROP TABLE t2; +DROP TABLE t1; +# +# Testing comparison between a TIMESTAMP(6) field and a DATETIME(N) cast +# +CREATE TABLE t1 (a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)); +INSERT INTO t1 VALUES ('2001-01-01 10:11:12.000000'); +INSERT INTO t1 VALUES ('2001-01-01 10:11:12.000001'); +INSERT INTO t1 VALUES ('2001-01-01 10:11:12.000002'); +INSERT INTO t1 VALUES ('2001-01-01 10:11:12.000003'); +SELECT * FROM t1 WHERE a=CAST('2001-01-01 10:11:12.000003' AS DATETIME(6)); +a +2001-01-01 10:11:12.000003 +SELECT * FROM t1 WHERE a=CAST('2001-01-01 10:11:12.000003' AS DATETIME(0)); +a +2001-01-01 10:11:12.000000 +DROP TABLE t1; +# +# Testing TIMESTAMP subquery in combination with CAST to DATETIME(N) +# +CREATE TABLE t1 (a TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, b TIMESTAMP(6) NOT NULL DEFAULT '1971-01-01 00:00:00'); +INSERT INTO t1 VALUES ('2001-01-01 23:00:00', '2001-01-01 23:00:00.123456'); +SELECT CAST('2001-01-01 23:00:00' AS DATETIME) = (SELECT a FROM t1); +CAST('2001-01-01 23:00:00' AS DATETIME) = (SELECT a FROM t1) +1 +SELECT CAST('2001-01-01 23:00:00' AS DATETIME(6)) = (SELECT a FROM t1); +CAST('2001-01-01 23:00:00' AS DATETIME(6)) = (SELECT a FROM t1) +1 +SELECT CAST('2001-01-01 23:00:00.123456' AS DATETIME(0)) = (SELECT a FROM t1); +CAST('2001-01-01 23:00:00.123456' AS DATETIME(0)) = (SELECT a FROM t1) +1 +SELECT CAST('2001-01-01 23:00:00.123456' AS DATETIME(6)) = (SELECT b FROM t1); +CAST('2001-01-01 23:00:00.123456' AS DATETIME(6)) = (SELECT b FROM t1) +1 +DROP TABLE t1; +# +# Testing TIMESTAMP column with function MICROSECOND +# +CREATE TABLE t1 (a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)); +INSERT INTO t1 VALUES ('2001-01-01 11:12:13.000001'); +INSERT INTO t1 VALUES ('2001-01-01 11:12:13.100001'); +INSERT INTO t1 VALUES ('2001-01-01 11:12:13.999999'); +SELECT a, MICROSECOND(a) FROM t1; +a MICROSECOND(a) +2001-01-01 11:12:13.000001 1 +2001-01-01 11:12:13.100001 100001 +2001-01-01 11:12:13.999999 999999 +SELECT a, EXTRACT(MICROSECOND FROM a) FROM t1; +a EXTRACT(MICROSECOND FROM a) +2001-01-01 11:12:13.000001 1 +2001-01-01 11:12:13.100001 100001 +2001-01-01 11:12:13.999999 999999 +DROP TABLE t1; +# +# Testing PS +# +CREATE TABLE t1 (a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)); +PREPARE stmt FROM 'INSERT INTO t1 VALUES (?)'; +SET @a='2001-01-01 11:22:33.123456'; +SET @b=20010101112233.123456; +SET @c=0.123456e0; +EXECUTE stmt USING @a; +EXECUTE stmt USING @c; +ERROR 22007: Incorrect datetime value: '0.123456' for column 'a' at row 1 +DEALLOCATE PREPARE stmt; +SELECT * FROM t1; +a +2001-01-01 11:22:33.123456 +PREPARE stmt FROM 'SELECT * FROM t1 WHERE a=?'; +EXECUTE stmt USING @a; +a +2001-01-01 11:22:33.123456 +EXECUTE stmt USING @b; +a +2001-01-01 11:22:33.123456 +EXECUTE stmt USING @c; +a +Warnings: +Warning 1292 Incorrect datetime value: '0.123456' for column 'a' at row 1 +DEALLOCATE PREPARE stmt; +DROP TABLE t1; +# +# Testing TIMESTAMP(6) and user variables +# +CREATE TABLE t1 (a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)); +INSERT INTO t1 VALUES ('2001-01-01 11:22:33.123456'); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.100000'); +SELECT * FROM t1; +a +2001-01-01 11:22:33.123456 +2001-01-01 00:00:00.100000 +SET @a='2001-01-01 11:22:33.123456'; +SELECT * FROM t1 WHERE a=@a; +a +2001-01-01 11:22:33.123456 +SET @a=20010101112233.123456; +SELECT * FROM t1 WHERE a=@a; +a +2001-01-01 11:22:33.123456 +SET @a=20010101000000.1e0; +SELECT @a; +@a +20010101000000.1 +SELECT * FROM t1 WHERE a=@a; +a +SET @a=NULL; +SELECT a INTO @a FROM t1 LIMIT 1; +SELECT @a; +@a +2001-01-01 11:22:33.123456 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT @a AS a; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` longtext +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +SELECT * FROM t1; +a +2001-01-01 11:22:33.123456 +DROP TABLE t1; +# +# Testing SP +# +CREATE PROCEDURE p1 () +BEGIN +DECLARE a TIMESTAMP(6); +SET a='2001-01-01 11:22:33.123'; +SELECT a; +END// +SHOW CREATE PROCEDURE p1// +Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation +p1 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` PROCEDURE `p1`() +BEGIN +DECLARE a TIMESTAMP(6); +SET a='2001-01-01 11:22:33.123'; +SELECT a; +END latin1 latin1_swedish_ci latin1_swedish_ci +CALL p1// +a +2001-01-01 11:22:33.123000 +DROP PROCEDURE p1// +CREATE PROCEDURE p1 (a TIMESTAMP(6)) +BEGIN +SELECT a; +END// +SHOW CREATE PROCEDURE p1// +Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation +p1 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` PROCEDURE `p1`(a TIMESTAMP(6)) +BEGIN +SELECT a; +END latin1 latin1_swedish_ci latin1_swedish_ci +CALL p1(20010101112233)// +a +2001-01-01 11:22:33.000000 +CALL p1(20010101112233.123)// +a +2001-01-01 11:22:33.123000 +CALL p1(0.123e0)// +ERROR 22007: Incorrect datetime value: '0.123' for column 'a' at row 1 +CALL p1('2001-01-01 11:22:33.123')// +a +2001-01-01 11:22:33.123000 +DROP PROCEDURE p1// +CREATE PROCEDURE p1() +BEGIN +DECLARE a TIMESTAMP(6); +CREATE TABLE t1 AS SELECT a; +# replace_regex /ENGINE=[a-zA-Z]*/ENGINE=ENGINE/; +SHOW CREATE TABLE t1; +DROP TABLE t1; +END// +SHOW CREATE PROCEDURE p1// +Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation +p1 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` PROCEDURE `p1`() +BEGIN +DECLARE a TIMESTAMP(6); +CREATE TABLE t1 AS SELECT a; +# replace_regex /ENGINE=[a-zA-Z]*/ENGINE=ENGINE/; +SHOW CREATE TABLE t1; +DROP TABLE t1; +END latin1 latin1_swedish_ci latin1_swedish_ci +CALL p1// +Table Create Table +t1 CREATE TABLE `t1` ( + `a` timestamp(6) NULL DEFAULT NULL +) ENGINE=TokuDB DEFAULT CHARSET=latin1 +DROP PROCEDURE p1// +CREATE FUNCTION p1 (a TIMESTAMP(6)) RETURNS TIMESTAMP(6) +BEGIN +RETURN a; +END// +SHOW CREATE FUNCTION p1// +Function sql_mode Create Function character_set_client collation_connection Database Collation +p1 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` FUNCTION `p1`(a TIMESTAMP(6)) RETURNS timestamp(6) +BEGIN +RETURN a; +END latin1 latin1_swedish_ci latin1_swedish_ci +SELECT p1(20010101112233)// +p1(20010101112233) +2001-01-01 11:22:33.000000 +SELECT p1(20010101112233.123)// +p1(20010101112233.123) +2001-01-01 11:22:33.123000 +DROP FUNCTION p1// +# +# Testing INFORMATION_SCHEMA.COLUMNS +# +CREATE TABLE t1 (a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)); +SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='t1';; +TABLE_CATALOG def +TABLE_SCHEMA test +TABLE_NAME t1 +COLUMN_NAME a +ORDINAL_POSITION 1 +COLUMN_DEFAULT CURRENT_TIMESTAMP(6) +IS_NULLABLE NO +DATA_TYPE timestamp +CHARACTER_MAXIMUM_LENGTH NULL +CHARACTER_OCTET_LENGTH NULL +NUMERIC_PRECISION NULL +NUMERIC_SCALE NULL +DATETIME_PRECISION 6 +CHARACTER_SET_NAME NULL +COLLATION_NAME NULL +COLUMN_TYPE timestamp(6) +COLUMN_KEY +EXTRA on update CURRENT_TIMESTAMP(6) +PRIVILEGES # +COLUMN_COMMENT +GENERATION_EXPRESSION +DROP TABLE t1; +# +# SELECT from a subquery +# +CREATE TABLE t1 (a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.123456'), ('2001-01-01 11:11:11.123456'); +SELECT * FROM (SELECT * FROM t1) t12; +a +2001-01-01 00:00:00.123456 +2001-01-01 11:11:11.123456 +DROP TABLE t1; +# +# Testing IN and = subqueries +# +CREATE TABLE t1 (a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.123456'), ('2001-01-01 11:11:11.123456'); +SELECT * FROM t1 WHERE a IN (SELECT MIN(a) FROM t1); +a +2001-01-01 00:00:00.123456 +SELECT * FROM t1 WHERE a = (SELECT a FROM t1 ORDER BY a DESC LIMIT 1); +a +2001-01-01 11:11:11.123456 +DROP TABLE t1; +# +# Testing IN subquery + GROUP +# +CREATE TABLE t1 (id INT, a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)); +INSERT INTO t1 VALUES (1, '2001-01-01 00:00:00.123456'), (1, '2001-01-01 11:00:00.123456'); +INSERT INTO t1 VALUES (2, '2001-01-01 00:01:00.123456'), (2, '2001-01-01 11:01:00.123456'); +SELECT * FROM t1 WHERE a IN (SELECT MAX(a) FROM t1 GROUP BY id); +id a +1 2001-01-01 11:00:00.123456 +2 2001-01-01 11:01:00.123456 +DROP TABLE t1; +# +# Testing VIEW +# +CREATE TABLE t1 (a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.123456'), ('2001-01-01 11:11:11.123456'); +CREATE VIEW v1 AS SELECT a FROM t1; +SELECT * FROM v1 WHERE a='2001-01-01 00:00:00.123456'; +a +2001-01-01 00:00:00.123456 +SELECT MIN(a), MAX(a) FROM v1; +MIN(a) MAX(a) +2001-01-01 00:00:00.123456 2001-01-01 11:11:11.123456 +SELECT * FROM t1 WHERE a IN (SELECT MAX(a) FROM v1); +a +2001-01-01 11:11:11.123456 +DROP VIEW v1; +CREATE VIEW v1 AS SELECT MAX(a) AS a FROM t1; +SELECT * FROM v1; +a +2001-01-01 11:11:11.123456 +SELECT * FROM t1 WHERE a=(SELECT a FROM v1); +a +2001-01-01 11:11:11.123456 +DROP VIEW v1; +DROP TABLE t1; +# +# Testing default value +# +CREATE TABLE t1 (a DATETIME(6), b TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)); +INSERT INTO t1 (a) VALUES (CURRENT_TIMESTAMP(6)); +SELECT a=b FROM t1; +a=b +1 +DROP TABLE t1; +SET time_zone=DEFAULT; +CREATE TABLE t1 (a DATETIME(6), b TIME(6)); +INSERT INTO t1 VALUES ('1212-12-12 21:21:21.555555', '00:00:00.21'); +INSERT INTO t1 VALUES ('9999-12-31 23:59:59.999999', '00:00:00.000001'); +SELECT a + b FROM t1; +a + b +12121212212121.765555 +99991231235960.000000 +DROP TABLE t1; +# +# Testing that IF always returns correct number of decimal digits +# +SET timestamp=UNIX_TIMESTAMP('2011-11-10 18:04:30'); +CREATE TABLE t1 (dt2 DATETIME(2), t3 TIME(3), d DATE); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.12', '00:00:00.567', '2002-01-01'); +SELECT if(0, dt2, t3), CONCAT(if(0, dt2, t3)) FROM t1; +if(0, dt2, t3) CONCAT(if(0, dt2, t3)) +2011-11-10 00:00:00.567 2011-11-10 00:00:00.567 +SELECT if(1, dt2, t3), CONCAT(if(1, dt2, t3)) FROM t1; +if(1, dt2, t3) CONCAT(if(1, dt2, t3)) +2001-01-01 00:00:00.120 2001-01-01 00:00:00.120 +SELECT if(0, t3, dt2), CONCAT(if(0, t3, dt2)) FROM t1; +if(0, t3, dt2) CONCAT(if(0, t3, dt2)) +2001-01-01 00:00:00.120 2001-01-01 00:00:00.120 +SELECT if(1, t3, dt2), CONCAT(if(1, t3, dt2)) FROM t1; +if(1, t3, dt2) CONCAT(if(1, t3, dt2)) +2011-11-10 00:00:00.567 2011-11-10 00:00:00.567 +SELECT if(0, t3, d), CONCAT(if(0, t3, d)) FROM t1; +if(0, t3, d) CONCAT(if(0, t3, d)) +2002-01-01 00:00:00.000 2002-01-01 00:00:00.000 +SELECT if(1, t3, d), CONCAT(if(1, t3, d)) FROM t1; +if(1, t3, d) CONCAT(if(1, t3, d)) +2011-11-10 00:00:00.567 2011-11-10 00:00:00.567 +SELECT if(0, d, t3), CONCAT(if(0, d, t3)) FROM t1; +if(0, d, t3) CONCAT(if(0, d, t3)) +2011-11-10 00:00:00.567 2011-11-10 00:00:00.567 +SELECT if(1, d, t3), CONCAT(if(1, d, t3)) FROM t1; +if(1, d, t3) CONCAT(if(1, d, t3)) +2002-01-01 00:00:00.000 2002-01-01 00:00:00.000 +DROP TABLE t1; +SET timestamp=DEFAULT; +# +# Testing that CASE always returns correct number of decimal digits +# +SET timestamp=UNIX_TIMESTAMP('2011-11-10 18:04:30'); +CREATE TABLE t1 (dt2 DATETIME(2), t3 TIME(3), d DATE); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.12', '00:00:00.567', '2002-01-01'); +SELECT CASE WHEN 0 THEN dt2 ELSE t3 END FROM t1; +CASE WHEN 0 THEN dt2 ELSE t3 END +2011-11-10 00:00:00.567 +SELECT CONCAT(CASE WHEN 0 THEN dt2 ELSE t3 END) FROM t1; +CONCAT(CASE WHEN 0 THEN dt2 ELSE t3 END) +2011-11-10 00:00:00.567 +SELECT CASE WHEN 1 THEN dt2 ELSE t3 END FROM t1; +CASE WHEN 1 THEN dt2 ELSE t3 END +2001-01-01 00:00:00.120 +SELECT CONCAT(CASE WHEN 1 THEN dt2 ELSE t3 END) FROM t1; +CONCAT(CASE WHEN 1 THEN dt2 ELSE t3 END) +2001-01-01 00:00:00.120 +SELECT CASE WHEN 0 THEN t3 ELSE dt2 END FROM t1; +CASE WHEN 0 THEN t3 ELSE dt2 END +2001-01-01 00:00:00.120 +SELECT CONCAT(CASE WHEN 0 THEN t3 ELSE dt2 END) FROM t1; +CONCAT(CASE WHEN 0 THEN t3 ELSE dt2 END) +2001-01-01 00:00:00.120 +SELECT CASE WHEN 1 THEN t3 ELSE dt2 END FROM t1; +CASE WHEN 1 THEN t3 ELSE dt2 END +2011-11-10 00:00:00.567 +SELECT CONCAT(CASE WHEN 1 THEN t3 ELSE dt2 END) FROM t1; +CONCAT(CASE WHEN 1 THEN t3 ELSE dt2 END) +2011-11-10 00:00:00.567 +SELECT CASE WHEN 0 THEN d ELSE t3 END FROM t1; +CASE WHEN 0 THEN d ELSE t3 END +2011-11-10 00:00:00.567 +SELECT CONCAT(CASE WHEN 0 THEN d ELSE t3 END) FROM t1; +CONCAT(CASE WHEN 0 THEN d ELSE t3 END) +2011-11-10 00:00:00.567 +SELECT CASE WHEN 1 THEN d ELSE t3 END FROM t1; +CASE WHEN 1 THEN d ELSE t3 END +2002-01-01 00:00:00.000 +SELECT CONCAT(CASE WHEN 1 THEN d ELSE t3 END) FROM t1; +CONCAT(CASE WHEN 1 THEN d ELSE t3 END) +2002-01-01 00:00:00.000 +SELECT CASE WHEN 0 THEN t3 ELSE d END FROM t1; +CASE WHEN 0 THEN t3 ELSE d END +2002-01-01 00:00:00.000 +SELECT CONCAT(CASE WHEN 0 THEN t3 ELSE d END) FROM t1; +CONCAT(CASE WHEN 0 THEN t3 ELSE d END) +2002-01-01 00:00:00.000 +SELECT CASE WHEN 1 THEN t3 ELSE d END FROM t1; +CASE WHEN 1 THEN t3 ELSE d END +2011-11-10 00:00:00.567 +SELECT CONCAT(CASE WHEN 1 THEN t3 ELSE d END) FROM t1; +CONCAT(CASE WHEN 1 THEN t3 ELSE d END) +2011-11-10 00:00:00.567 +DROP TABLE t1; +SET timestamp=DEFAULT; +# +# Testing that COALESCE always returns correct number of decimal digits +# +SET timestamp=UNIX_TIMESTAMP('2011-11-10 18:04:30'); +CREATE TABLE t1 (dt2 DATETIME(2), t3 TIME(3), d DATE); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.12', '00:00:00.567', '2002-01-01'); +SELECT COALESCE(dt2, t3) FROM t1; +COALESCE(dt2, t3) +2001-01-01 00:00:00.120 +SELECT CONCAT(COALESCE(dt2, t3)) FROM t1; +CONCAT(COALESCE(dt2, t3)) +2001-01-01 00:00:00.120 +SELECT COALESCE(t3, dt2) FROM t1; +COALESCE(t3, dt2) +2011-11-10 00:00:00.567 +SELECT CONCAT(COALESCE(t3, dt2)) FROM t1; +CONCAT(COALESCE(t3, dt2)) +2011-11-10 00:00:00.567 +SELECT COALESCE(d, t3) FROM t1; +COALESCE(d, t3) +2002-01-01 00:00:00.000 +SELECT CONCAT(COALESCE(d, t3)) FROM t1; +CONCAT(COALESCE(d, t3)) +2002-01-01 00:00:00.000 +SELECT COALESCE(t3, d) FROM t1; +COALESCE(t3, d) +2011-11-10 00:00:00.567 +SELECT CONCAT(COALESCE(t3, d)) FROM t1; +CONCAT(COALESCE(t3, d)) +2011-11-10 00:00:00.567 +DROP TABLE t1; +SET timestamp=DEFAULT; +# +# Testing that IFNULL always returns correct number of decimal digits +# +SET timestamp=UNIX_TIMESTAMP('2011-11-10 18:04:30'); +CREATE TABLE t1 (dt2 DATETIME(2), t3 TIME(3), d DATE); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.12', '00:00:00.567', '2002-01-01'); +SELECT IFNULL(dt2, t3) FROM t1; +IFNULL(dt2, t3) +2001-01-01 00:00:00.120 +SELECT CONCAT(IFNULL(dt2, t3)) FROM t1; +CONCAT(IFNULL(dt2, t3)) +2001-01-01 00:00:00.120 +SELECT IFNULL(t3, dt2) FROM t1; +IFNULL(t3, dt2) +2011-11-10 00:00:00.567 +SELECT CONCAT(IFNULL(t3, dt2)) FROM t1; +CONCAT(IFNULL(t3, dt2)) +2011-11-10 00:00:00.567 +SELECT IFNULL(d, t3) FROM t1; +IFNULL(d, t3) +2002-01-01 00:00:00.000 +SELECT CONCAT(IFNULL(d, t3)) FROM t1; +CONCAT(IFNULL(d, t3)) +2002-01-01 00:00:00.000 +SELECT IFNULL(t3, d) FROM t1; +IFNULL(t3, d) +2011-11-10 00:00:00.567 +SELECT CONCAT(IFNULL(t3, d)) FROM t1; +CONCAT(IFNULL(t3, d)) +2011-11-10 00:00:00.567 +DROP TABLE t1; +SET timestamp=DEFAULT; +# +# Testing that LEAST always returns correct number of decimal digits +# +SET timestamp=UNIX_TIMESTAMP('2011-11-10 18:04:30'); +CREATE TABLE t1 (dt2 DATETIME(2), t3 TIME(3), d DATE); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.12', '00:00:00.567', '2002-01-01'); +INSERT INTO t1 VALUES ('2012-01-01 00:00:00.12', '00:00:00.567', '2013-01-01'); +SELECT LEAST(dt2, t3) FROM t1; +LEAST(dt2, t3) +2001-01-01 00:00:00.120 +2011-11-10 00:00:00.567 +SELECT CONCAT(LEAST(dt2, t3)) FROM t1; +CONCAT(LEAST(dt2, t3)) +2001-01-01 00:00:00.120 +2011-11-10 00:00:00.567 +SELECT LEAST(t3, dt2) FROM t1; +LEAST(t3, dt2) +2001-01-01 00:00:00.120 +2011-11-10 00:00:00.567 +SELECT CONCAT(LEAST(t3, dt2)) FROM t1; +CONCAT(LEAST(t3, dt2)) +2001-01-01 00:00:00.120 +2011-11-10 00:00:00.567 +SELECT LEAST(d, t3) FROM t1; +LEAST(d, t3) +2002-01-01 00:00:00.000 +2011-11-10 00:00:00.567 +SELECT CONCAT(LEAST(d, t3)) FROM t1; +CONCAT(LEAST(d, t3)) +2002-01-01 00:00:00.000 +2011-11-10 00:00:00.567 +SELECT LEAST(t3, d) FROM t1; +LEAST(t3, d) +2002-01-01 00:00:00.000 +2011-11-10 00:00:00.567 +SELECT CONCAT(LEAST(t3, d)) FROM t1; +CONCAT(LEAST(t3, d)) +2002-01-01 00:00:00.000 +2011-11-10 00:00:00.567 +DROP TABLE t1; +SET timestamp=DEFAULT; +# +# Testing that GREATEST always returns correct number of decimal digits +# +SET timestamp=UNIX_TIMESTAMP('2011-11-10 18:04:30'); +CREATE TABLE t1 (dt2 DATETIME(2), t3 TIME(3), d DATE); +INSERT INTO t1 VALUES ('2001-01-01 00:00:00.12', '00:00:00.567', '2002-01-01'); +INSERT INTO t1 VALUES ('2012-01-01 00:00:00.12', '00:00:00.567', '2013-01-01'); +SELECT GREATEST(dt2, t3) FROM t1; +GREATEST(dt2, t3) +2011-11-10 00:00:00.567 +2012-01-01 00:00:00.120 +SELECT CONCAT(GREATEST(dt2, t3)) FROM t1; +CONCAT(GREATEST(dt2, t3)) +2011-11-10 00:00:00.567 +2012-01-01 00:00:00.120 +SELECT GREATEST(t3, dt2) FROM t1; +GREATEST(t3, dt2) +2011-11-10 00:00:00.567 +2012-01-01 00:00:00.120 +SELECT CONCAT(GREATEST(t3, dt2)) FROM t1; +CONCAT(GREATEST(t3, dt2)) +2011-11-10 00:00:00.567 +2012-01-01 00:00:00.120 +SELECT GREATEST(d, t3) FROM t1; +GREATEST(d, t3) +2011-11-10 00:00:00.567 +2013-01-01 00:00:00.000 +SELECT CONCAT(GREATEST(d, t3)) FROM t1; +CONCAT(GREATEST(d, t3)) +2011-11-10 00:00:00.567 +2013-01-01 00:00:00.000 +SELECT GREATEST(t3, d) FROM t1; +GREATEST(t3, d) +2011-11-10 00:00:00.567 +2013-01-01 00:00:00.000 +SELECT CONCAT(GREATEST(t3, d)) FROM t1; +CONCAT(GREATEST(t3, d)) +2011-11-10 00:00:00.567 +2013-01-01 00:00:00.000 +DROP TABLE t1; +SET timestamp=DEFAULT; +# +# Testing that hybrid type functions correctly convert +# from DATETIME to TIME +# +CREATE TABLE t1 (a DATETIME(3)); +INSERT INTO t1 VALUES ('2001-01-01 10:20:30.123'); +SELECT CAST(IF(0, a, a) AS TIME(6)) FROM t1; +CAST(IF(0, a, a) AS TIME(6)) +10:20:30.123000 +SELECT CAST(COALESCE(a, a) AS TIME(6)) FROM t1; +CAST(COALESCE(a, a) AS TIME(6)) +10:20:30.123000 +SELECT CAST(IFNULL(a, a) AS TIME(6)) FROM t1; +CAST(IFNULL(a, a) AS TIME(6)) +10:20:30.123000 +SELECT CAST(CASE WHEN 0 THEN a ELSE a END AS TIME(6)) FROM t1; +CAST(CASE WHEN 0 THEN a ELSE a END AS TIME(6)) +10:20:30.123000 +SELECT CAST(GREATEST(a, a) AS TIME(6)) FROM t1; +CAST(GREATEST(a, a) AS TIME(6)) +10:20:30.123000 +SELECT CAST(LEAST(a, a) AS TIME(6)) FROM t1; +CAST(LEAST(a, a) AS TIME(6)) +10:20:30.123000 +DROP TABLE t1; +# +# Testing that hybrid type functions correctly convert +# from TIME to DATETIME +# +SET timestamp=UNIX_TIMESTAMP('2011-11-10 00:00:00'); +CREATE TABLE t1 (a TIME(3)); +INSERT INTO t1 VALUES ('10:20:30.123'); +SELECT CAST(IF(0, a, a) AS DATETIME(6)) FROM t1; +CAST(IF(0, a, a) AS DATETIME(6)) +2011-11-10 10:20:30.123000 +SELECT CAST(COALESCE(a, a) AS DATETIME(6)) FROM t1; +CAST(COALESCE(a, a) AS DATETIME(6)) +2011-11-10 10:20:30.123000 +SELECT CAST(IFNULL(a, a) AS DATETIME(6)) FROM t1; +CAST(IFNULL(a, a) AS DATETIME(6)) +2011-11-10 10:20:30.123000 +SELECT CAST(CASE WHEN 0 THEN a ELSE a END AS DATETIME(6)) FROM t1; +CAST(CASE WHEN 0 THEN a ELSE a END AS DATETIME(6)) +2011-11-10 10:20:30.123000 +SELECT CAST(GREATEST(a, a) AS DATETIME(6)) FROM t1; +CAST(GREATEST(a, a) AS DATETIME(6)) +2011-11-10 10:20:30.123000 +SELECT CAST(LEAST(a, a) AS DATETIME(6)) FROM t1; +CAST(LEAST(a, a) AS DATETIME(6)) +2011-11-10 10:20:30.123000 +DROP TABLE t1; +SET timestamp=DEFAULT; +# +# Storing TIME functions into VARCHAR column +# +SET @@timestamp=1000000000; +CREATE TABLE t1 (a VARCHAR(32)); +INSERT INTO t1 VALUES (CAST('00:00:00' AS TIME)); +INSERT INTO t1 VALUES (CAST('00:00:00' AS TIME(6))); +SELECT * FROM t1; +a +00:00:00 +00:00:00.000000 +DELETE FROM t1; +INSERT INTO t1 VALUES (SEC_TO_TIME(10)); +INSERT INTO t1 VALUES (SEC_TO_TIME(-0.1)); +INSERT INTO t1 VALUES (SEC_TO_TIME(-0.01)); +INSERT INTO t1 VALUES (SEC_TO_TIME(-0.001)); +INSERT INTO t1 VALUES (SEC_TO_TIME(-0.0001)); +INSERT INTO t1 VALUES (SEC_TO_TIME(-0.00001)); +INSERT INTO t1 VALUES (SEC_TO_TIME(-0.000001)); +INSERT INTO t1 VALUES (SEC_TO_TIME(10.0)); +INSERT INTO t1 VALUES (SEC_TO_TIME(10.1)); +INSERT INTO t1 VALUES (SEC_TO_TIME(10.12)); +INSERT INTO t1 VALUES (SEC_TO_TIME(10.123)); +INSERT INTO t1 VALUES (SEC_TO_TIME(10.1234)); +INSERT INTO t1 VALUES (SEC_TO_TIME(10.12345)); +INSERT INTO t1 VALUES (SEC_TO_TIME(10.123456)); +SELECT * FROM t1; +a +00:00:10 +-00:00:00.1 +-00:00:00.01 +-00:00:00.001 +-00:00:00.0001 +-00:00:00.00001 +-00:00:00.000001 +00:00:10.0 +00:00:10.1 +00:00:10.12 +00:00:10.123 +00:00:10.1234 +00:00:10.12345 +00:00:10.123456 +DELETE FROM t1; +INSERT INTO t1 VALUES (TIMEDIFF(NOW(), NOW())); +INSERT INTO t1 VALUES (TIMEDIFF(NOW(6), NOW(6))); +SELECT * FROM t1; +a +00:00:00 +00:00:00.000000 +DELETE FROM t1; +INSERT INTO t1 VALUES (MAKETIME(10, 10, 10)); +INSERT INTO t1 VALUES (MAKETIME(10, 10, 10.1)); +INSERT INTO t1 VALUES (MAKETIME(10, 10, 10.12)); +INSERT INTO t1 VALUES (MAKETIME(10, 10, 10.123)); +INSERT INTO t1 VALUES (MAKETIME(10, 10, 10.1234)); +INSERT INTO t1 VALUES (MAKETIME(10, 10, 10.12345)); +INSERT INTO t1 VALUES (MAKETIME(10, 10, 10.123456)); +SELECT * FROM t1; +a +10:10:10 +10:10:10.1 +10:10:10.12 +10:10:10.123 +10:10:10.1234 +10:10:10.12345 +10:10:10.123456 +DELETE FROM t1; +INSERT INTO t1 VALUES (CURRENT_TIME()); +INSERT INTO t1 VALUES (CURRENT_TIME(6)); +SELECT LENGTH(a) FROM t1; +LENGTH(a) +8 +15 +DELETE FROM t1; +DROP TABLE t1; +SET @@timestamp=default; +# +# Storing DATETIME functions into VARCHAR column +# +SET @@time_zone='+00:00'; +SET @@timestamp=1000000000; +CREATE TABLE t1 (a VARCHAR(32)); +INSERT INTO t1 VALUES (CAST('2001-01-01 00:00:00' AS DATETIME)); +INSERT INTO t1 VALUES (CAST('2001-01-01 00:00:00' AS DATETIME(6))); +SELECT * FROM t1; +a +2001-01-01 00:00:00 +2001-01-01 00:00:00.000000 +DELETE FROM t1; +INSERT INTO t1 VALUES (FROM_UNIXTIME(1000000000)); +INSERT INTO t1 VALUES (FROM_UNIXTIME(1000000000.0)); +INSERT INTO t1 VALUES (FROM_UNIXTIME(1000000000.1)); +INSERT INTO t1 VALUES (FROM_UNIXTIME(1000000000.12)); +INSERT INTO t1 VALUES (FROM_UNIXTIME(1000000000.123)); +INSERT INTO t1 VALUES (FROM_UNIXTIME(1000000000.1234)); +INSERT INTO t1 VALUES (FROM_UNIXTIME(1000000000.12345)); +INSERT INTO t1 VALUES (FROM_UNIXTIME(1000000000.123456)); +SELECT * FROM t1; +a +2001-09-09 01:46:40 +2001-09-09 01:46:40.0 +2001-09-09 01:46:40.1 +2001-09-09 01:46:40.12 +2001-09-09 01:46:40.123 +2001-09-09 01:46:40.1234 +2001-09-09 01:46:40.12345 +2001-09-09 01:46:40.123456 +DELETE FROM t1; +INSERT INTO t1 VALUES (CONVERT_TZ(CAST('2001-01-01 00:00:00' AS DATETIME), '+00:00', '+10:00')); +INSERT INTO t1 VALUES (CONVERT_TZ(CAST('2001-01-01 00:00:00' AS DATETIME(6)), '+00:00', '+10:00')); +SELECT * FROM t1; +a +2001-01-01 10:00:00 +2001-01-01 10:00:00.000000 +DELETE FROM t1; +INSERT INTO t1 VALUES (CURRENT_TIMESTAMP()); +INSERT INTO t1 VALUES (CURRENT_TIMESTAMP(6)); +SELECT LENGTH(a) FROM t1; +LENGTH(a) +19 +26 +DELETE FROM t1; +DROP TABLE t1; +SET @@timestamp=default; +SET @@time_zone=default; +# +# Storing DATE/TIME hybrid functions into VARCHAR column +# +SET @@time_zone='+00:00'; +SET @@timestamp=1000000000; +CREATE TABLE t1 (a VARCHAR(32)); +INSERT INTO t1 VALUES (ADDTIME('10:10:10', 10)); +INSERT INTO t1 VALUES (ADDTIME('10:10:10', 10.123456)); +INSERT INTO t1 VALUES (ADDTIME('10:10:10.000000', 10)); +INSERT INTO t1 VALUES (ADDTIME('10:10:10.123456', 10)); +SELECT * FROM t1; +a +10:10:20 +10:10:20.123456 +10:10:20 +10:10:20.123456 +DELETE FROM t1; +INSERT INTO t1 VALUES (ADDTIME(CURRENT_TIME, 10)); +INSERT INTO t1 VALUES (ADDTIME(CURRENT_TIME, 10.123456)); +INSERT INTO t1 VALUES (ADDTIME(CURRENT_TIMESTAMP, 10)); +INSERT INTO t1 VALUES (ADDTIME(CURRENT_TIMESTAMP, 10.123456)); +SELECT * FROM t1; +a +01:46:50 +01:46:50.123456 +2001-09-09 01:46:50 +2001-09-09 01:46:50.123456 +DELETE FROM t1; +INSERT INTO t1 VALUES(DATE_ADD('2001-01-01 00:00:00', INTERVAL 1 SECOND)); +INSERT INTO t1 VALUES(DATE_ADD('2001-01-01 00:00:00', INTERVAL 1.1 SECOND)); +INSERT INTO t1 VALUES(DATE_ADD('2001-01-01 00:00:00.000000', INTERVAL 1 SECOND)); +INSERT INTO t1 VALUES(DATE_ADD('2001-01-01 00:00:00.123456', INTERVAL 1 SECOND)); +SELECT * FROM t1; +a +2001-01-01 00:00:01 +2001-01-01 00:00:01.100000 +2001-01-01 00:00:01 +2001-01-01 00:00:01.123456 +DELETE FROM t1; +INSERT INTO t1 VALUES(DATE_ADD(CAST('2001-01-01 00:00:00' AS DATETIME), INTERVAL 1 SECOND)); +INSERT INTO t1 VALUES(DATE_ADD(CAST('2001-01-01 00:00:00' AS DATETIME(6)), INTERVAL 1 SECOND)); +INSERT INTO t1 VALUES(DATE_ADD(CAST('2001-01-01 00:00:00' AS DATETIME), INTERVAL 1.1 SECOND)); +INSERT INTO t1 VALUES(DATE_ADD(CAST('2001-01-01 00:00:00' AS DATETIME(6)), INTERVAL 1.1 SECOND)); +SELECT * FROM t1; +a +2001-01-01 00:00:01 +2001-01-01 00:00:01.000000 +2001-01-01 00:00:01.1 +2001-01-01 00:00:01.100000 +DELETE FROM t1; +INSERT INTO t1 VALUES(DATE_ADD(CAST('00:00:00' AS TIME), INTERVAL 1 SECOND)); +INSERT INTO t1 VALUES(DATE_ADD(CAST('00:00:00' AS TIME(6)), INTERVAL 1 SECOND)); +INSERT INTO t1 VALUES(DATE_ADD(CAST('00:00:00' AS TIME), INTERVAL 1.1 SECOND)); +INSERT INTO t1 VALUES(DATE_ADD(CAST('00:00:00' AS TIME(6)), INTERVAL 1.1 SECOND)); +SELECT * FROM t1; +a +00:00:01 +00:00:01.000000 +00:00:01.1 +00:00:01.100000 +DELETE FROM t1; +INSERT INTO t1 VALUES (STR_TO_DATE('2000', '%Y')); +ERROR HY000: Incorrect datetime value: '2000' for function str_to_date +INSERT INTO t1 VALUES (STR_TO_DATE('2000 10', '%Y %h')); +ERROR HY000: Incorrect datetime value: '2000 10' for function str_to_date +INSERT INTO t1 VALUES (STR_TO_DATE('2000 10 000000', '%Y %h %f')); +ERROR HY000: Incorrect datetime value: '2000 10 000000' for function str_to_date +INSERT INTO t1 VALUES (STR_TO_DATE('2000 10 123456', '%Y %h %f')); +ERROR HY000: Incorrect datetime value: '2000 10 123456' for function str_to_date +INSERT INTO t1 VALUES (STR_TO_DATE('2000 10 000000', '2000 %h 000000')); +ERROR HY000: Incorrect datetime value: '2000 10 000000' for function str_to_date +INSERT INTO t1 VALUES (STR_TO_DATE('2000 10 123456', '2000 %h 123456')); +ERROR HY000: Incorrect datetime value: '2000 10 123456' for function str_to_date +INSERT INTO t1 VALUES (STR_TO_DATE('2000 10 000000', '2000 %h %f')); +ERROR HY000: Incorrect datetime value: '2000 10 000000' for function str_to_date +INSERT INTO t1 VALUES (STR_TO_DATE('2000 10 123456', '2000 %h %f')); +ERROR HY000: Incorrect datetime value: '2000 10 123456' for function str_to_date +SELECT * FROM t1; +a +DELETE FROM t1; +DROP TABLE t1; +SET @@timestamp=default; +SET @@time_zone=default; +# +# Testing ALTER from DATE to various other temporal types +# +CREATE TABLE t1 (a DATE, b DATE, c DATE); +INSERT INTO t1 VALUES ('2001-01-01', '2001-01-01', '2001-01-01'); +ALTER TABLE t1 MODIFY a DATETIME(6), MODIFY b TIMESTAMP(6), MODIFY c TIME(6); +SELECT * FROM t1; +a b c +2001-01-01 00:00:00.000000 2001-01-01 00:00:00.000000 00:00:00.000000 +DROP TABLE t1; +# +# Examples from the WL#946 section "Literals" +# +CREATE TABLE t1 (datetime_column DATETIME(1)); +INSERT INTO t1 VALUES ('0000/1/1T1.23'); +SELECT * FROM t1; +datetime_column +0000-01-01 01:23:00.0 +DROP TABLE t1; +CREATE TABLE t1 (datetime_column DATETIME(1)); +INSERT INTO t1 VALUES ('1111.11.11 11.11.11.55'); +SELECT * FROM t1; +datetime_column +1111-11-11 11:11:11.6 +DROP TABLE t1; +CREATE TABLE t1 (time_column TIME(1)); +INSERT INTO t1 VALUES ('1.1'); +SELECT * FROM t1; +time_column +00:00:01.1 +DROP TABLE t1; +CREATE TABLE t1 (time_column TIME(1)); +INSERT INTO t1 VALUES ('1:2:3:4'); +ERROR 22007: Incorrect time value: '1:2:3:4' for column 'time_column' at row 1 +SELECT * FROM t1; +time_column +DROP TABLE t1; +CREATE TABLE t1 (datetime_column DATETIME(2)); +INSERT INTO t1 VALUES ('73-1-1 1:1:1.2'); +SELECT * FROM t1; +datetime_column +1973-01-01 01:01:01.20 +DROP TABLE t1; +CREATE TABLE t1 (datetime_column DATETIME(2)); +INSERT INTO t1 VALUES (1101010101.55); +SELECT * FROM t1; +datetime_column +2000-11-01 01:01:01.55 +DROP TABLE t1; +SELECT TIMEDIFF('00:00:00.1', '00:00:00.3'); +TIMEDIFF('00:00:00.1', '00:00:00.3') +-00:00:00.2 +# +# Examples from the WL#946 section "Treat like decimals" +# +CREATE TABLE t1 (time_column TIME(6)); +INSERT INTO t1 SET time_column=TIME'1.000001'; +SELECT * FROM t1; +time_column +00:00:01.000001 +DROP TABLE t1; +CREATE TABLE t1 (time_column TIME(6)); +INSERT INTO t1 SET time_column=TIME'1.0000005'; +SELECT * FROM t1; +time_column +00:00:01.000001 +DROP TABLE t1; +CREATE TABLE t1 (time_column TIME(6)); +INSERT INTO t1 SET time_column=TIME'1.0000005' + 0.000001; +SELECT * FROM t1; +time_column +00:00:01.000002 +DROP TABLE t1; +SELECT TIME'00:00:00.1' = TIME'00:00:00.100'; +TIME'00:00:00.1' = TIME'00:00:00.100' +1 +CREATE TABLE t1 (timestamp_column TIMESTAMP(0)); +INSERT INTO t1 SET timestamp_column = '2005-01-01 23:59:59.9'; +SELECT * FROM t1; +timestamp_column +2005-01-02 00:00:00 +DROP TABLE t1; +# +# Examples from the WL#946 section "Behaviour changes" +# +CREATE TABLE t1 AS SELECT +TIME'10:10:10' + INTERVAL 1 SECOND, +ADDTIME(TIME'10:10:10', '1.1'); +SHOW COLUMNS FROM t1; +Field Type Null Key Default Extra +TIME'10:10:10' + INTERVAL 1 SECOND time YES NULL +ADDTIME(TIME'10:10:10', '1.1') time(1) YES NULL +DROP TABLE t1; +SELECT TIME'10:10:10' + INTERVAL .6 SECOND; +TIME'10:10:10' + INTERVAL .6 SECOND +10:10:10.6 +SELECT TIME('20:20:20') + INTERVAL .4 SECOND; +TIME('20:20:20') + INTERVAL .4 SECOND +20:20:20.4 +CREATE TABLE t1 AS SELECT +TIMESTAMP'2001-01-01 00:00:00' + INTERVAL 1 MICROSECOND AS a; +SHOW COLUMNS FROM t1; +Field Type Null Key Default Extra +a datetime(6) YES NULL +DROP TABLE t1; +SELECT ADDTIME('9999-01-01 00:00:00', '.1'); +ADDTIME('9999-01-01 00:00:00', '.1') +9999-01-01 00:00:00.100000 +SELECT ADDTIME(TIMESTAMP'9999-01-01 00:00:00', '.1'); +ADDTIME(TIMESTAMP'9999-01-01 00:00:00', '.1') +9999-01-01 00:00:00.1 +SET timestamp=UNIX_TIMESTAMP('2001-01-01 10:20:30'); +SELECT CURRENT_TIME(6), CURRENT_TIME; +CURRENT_TIME(6) CURRENT_TIME +10:20:30.000000 10:20:30 +SET timestamp=DEFAULT; +SET time_zone='+00:00'; +SELECT FROM_UNIXTIME(0.5); +FROM_UNIXTIME(0.5) +1970-01-01 00:00:00.5 +SET time_zone=DEFAULT; +CREATE TABLE t1 (s1 DATETIME); +INSERT INTO t1 VALUES ('2000-12-31 23:59:59.9'); +SELECT * FROM t1; +s1 +2001-01-01 00:00:00 +DROP TABLE t1; +SELECT SEC_TO_TIME(36000.123); +SEC_TO_TIME(36000.123) +10:00:00.123 +SET timestamp=1308300674; +SELECT @@timestamp; +@@timestamp +1308300674.000000 +CREATE TABLE t1 AS SELECT @@timestamp; +SHOW COLUMNS FROM t1; +Field Type Null Key Default Extra +@@timestamp double(21,6) YES NULL +DROP TABLE t1; +SET timestamp=DEFAULT; +# +# Examples from the WL#946 section "Metadata" +# +CREATE TABLE t1 (a TIME(3)); +SHOW COLUMNS FROM t1; +Field Type Null Key Default Extra +a time(3) YES NULL +DESC t1; +Field Type Null Key Default Extra +a time(3) YES NULL +SHOW FIELDS FROM t1; +Field Type Null Key Default Extra +a time(3) YES NULL +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` time(3) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +DROP TABLE t1; +# +# Bug#12546965 - 60990: INCORRECT DATE COMPARISON +# +CREATE TABLE t1 +(first_usage DATE, last_recharge DATETIME, life_time SMALLINT(4) UNSIGNED); +INSERT INTO t1 VALUES ('2011-04-27', null, 900); +SELECT +DATE_ADD(GREATEST(first_usage, IFNULL(last_recharge, first_usage)), INTERVAL life_time DAY ) as dt, +DATE_ADD(GREATEST(first_usage, IFNULL(last_recharge, first_usage)), INTERVAL life_time DAY ) < +DATE('2011-04-28') as exp FROM t1; +dt exp +2013-10-13 00:00:00 0 +DROP TABLE t1; +# +# Bug 12565857 - 61193: INCORRECT ROUNDING OF DATE DECIMAL(17,3) +# +SELECT TIME(20110512154559.616), +DATE(20110512154559.616), DATE(FLOOR(20110512154559.616)); +TIME(20110512154559.616) DATE(20110512154559.616) DATE(FLOOR(20110512154559.616)) +15:45:59.616 2011-05-12 2011-05-12 +# +# "SELECT 3 IN (SELECT MAX(a) FROM t1)" returned 0 instead of NULL +# at some point of WL#946 development. +# This case is not covered elsewhere in the tests. +# +CREATE TABLE t1 (a INT); +SELECT 3 IN (SELECT MAX(a) FROM t1); +3 IN (SELECT MAX(a) FROM t1) +NULL +DROP TABLE t1; +CREATE TABLE t1(s1 DATETIME(6), s2 TIME(6)); +INSERT INTO t1 VALUES ('1212-12-12 21:21:21.555555', '00:00:00.21'); +SELECT s1 + s2 FROM t1; +s1 + s2 +12121212212121.765555 +DROP TABLE t1; +CREATE TABLE t1 (s1 TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)); +INSERT INTO t1 VALUES ('1971-01-01 00:00:00.0000099'); +SELECT * FROM t1; +s1 +1971-01-01 00:00:00.000010 +DROP TABLE t1; +SET @@timestamp=UNIX_TIMESTAMP('2001-01-01 10:00:00'); +CREATE TABLE t1 (s0 TIMESTAMP(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0), s6 TIMESTAMP(6) NOT NULL DEFAULT '1971-01-01 00:00:00'); +INSERT INTO t1 VALUES (TIME'11:11:11.123456', TIME'11:11:11.123456'); +SELECT * FROM t1; +s0 s6 +2001-01-01 11:11:11 2001-01-01 11:11:11.123456 +DROP TABLE t1; +SET @@timestamp=default; +SET sql_mode='' /* not 'no_zero_in_date' */; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +CREATE TABLE t1 (s1 DATETIME); +INSERT INTO t1 VALUES ('1000-00-01 00:00:00'); +INSERT INTO t1 VALUES (TIMESTAMP'1000-00-01 00:00:00'); +SELECT * FROM t1; +s1 +1000-00-01 00:00:00 +1000-00-01 00:00:00 +DROP TABLE t1; +SET sql_mode=default; +SELECT SYSDATE(6) LIKE '____-__-__ __:__:__.______'; +SYSDATE(6) LIKE '____-__-__ __:__:__.______' +1 +SELECT SYSDATE(6) NOT LIKE '%.000000' || SYSDATE(6) NOT LIKE '%.000000'; +SYSDATE(6) NOT LIKE '%.000000' || SYSDATE(6) NOT LIKE '%.000000' +1 +CREATE TABLE t1 (s1 DATETIME(2)); +INSERT INTO t1 VALUES ('1970-01-01 11:11:11.1234'); +SELECT * FROM t1; +s1 +1970-01-01 11:11:11.12 +DROP TABLE t1; +CREATE TABLE t1 (s1 DATETIME(2)); +INSERT INTO t1 VALUES (TIMESTAMP '0001-01-01 00:00:00.05'); +SELECT TIMESTAMPADD(second, 1, s1) FROM t1; +TIMESTAMPADD(second, 1, s1) +0001-01-01 00:00:01.05 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT TIME'11:11:11.1234567'; +SHOW COLUMNS FROM t1; +Field Type Null Key Default Extra +TIME'11:11:11.1234567' time(6) NO 00:00:00.000000 +SELECT * FROM t1; +TIME'11:11:11.1234567' +11:11:11.123457 +DROP TABLE t1; +CREATE TABLE t1 (s1 datetime(6)); +INSERT INTO t1 VALUES ('2011-05-18 16:17:11.291816'); +SELECT MAX(s1), MAX(s1 + 0), MAX(s1) FROM t1; +MAX(s1) MAX(s1 + 0) MAX(s1) +2011-05-18 16:17:11.291816 20110518161711.291816 2011-05-18 16:17:11.291816 +DROP TABLE t1; +SELECT TIMESTAMP'2011-05-18 16:17:11.'; +TIMESTAMP'2011-05-18 16:17:11.' +2011-05-18 16:17:11 +SELECT TIMESTAMP('2011-05-18 16:17:11.2', '11.29'); +TIMESTAMP('2011-05-18 16:17:11.2', '11.29') +2011-05-18 16:17:22.49 +SELECT TIMESTAMPADD(second, 1, '2011-05-18 16:17:11.0'); +TIMESTAMPADD(second, 1, '2011-05-18 16:17:11.0') +2011-05-18 16:17:12 +SELECT DATE_ADD('2011-05-18 16:17:11.0', INTERVAL 1 SECOND); +DATE_ADD('2011-05-18 16:17:11.0', INTERVAL 1 SECOND) +2011-05-18 16:17:12 +SELECT TIMESTAMPADD(second, 1.1, '2011-05-18 16:17:11.0'); +TIMESTAMPADD(second, 1.1, '2011-05-18 16:17:11.0') +2011-05-18 16:17:12.100000 +SELECT DATE_ADD('2011-05-18 16:17:11.0', INTERVAL 1.1 SECOND); +DATE_ADD('2011-05-18 16:17:11.0', INTERVAL 1.1 SECOND) +2011-05-18 16:17:12.100000 +CREATE TABLE t1 (time_column TIME(6)); +INSERT INTO t1 VALUES (0); +UPDATE t1 SET time_column=TIME '1.0000005'; +SELECT * FROM t1; +time_column +00:00:01.000001 +DROP TABLE t1; +CREATE TABLE t1 (time_column TIME(6)); +INSERT INTO t1 VALUES (0); +UPDATE t1 SET time_column=TIME '1.0000005' + 0.000001; +SELECT * FROM t1; +time_column +00:00:01.000002 +DROP TABLE t1; +CREATE TABLE t1 (timestamp_column TIMESTAMP(0)); +INSERT INTO t1 VALUES (DEFAULT); +UPDATE t1 SET timestamp_column = '2005-01-01 23:59:59.9'; +SELECT * FROM t1; +timestamp_column +2005-01-02 00:00:00 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT TIME('00:00:00.123'); +SHOW COLUMNS FROM t1; +Field Type Null Key Default Extra +TIME('00:00:00.123') time(3) YES NULL +SELECT * FROM t1; +TIME('00:00:00.123') +00:00:00.123 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT TIMESTAMP('2000-01-01 00:00:00.123'); +SHOW COLUMNS FROM t1; +Field Type Null Key Default Extra +TIMESTAMP('2000-01-01 00:00:00.123') datetime(3) YES NULL +SELECT * FROM t1; +TIMESTAMP('2000-01-01 00:00:00.123') +2000-01-01 00:00:00.123 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT TIME'10:20:30.1234567'; +SHOW COLUMNS FROM t1; +Field Type Null Key Default Extra +TIME'10:20:30.1234567' time(6) NO 00:00:00.000000 +SELECT * FROM t1; +TIME'10:20:30.1234567' +10:20:30.123457 +DROP TABLE t1; +CREATE TABLE t1 (a TIME(1)); +INSERT INTO t1 VALUES ('1.1'); +SELECT * FROM t1; +a +00:00:01.1 +DROP TABLE t1; +SET time_zone='+00:00'; +SET @@timestamp=UNIX_TIMESTAMP('2011-09-21 20:40:05.123456'); +CREATE TABLE t1 AS SELECT UNIX_TIMESTAMP(CURRENT_TIMESTAMP(6)); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `UNIX_TIMESTAMP(CURRENT_TIMESTAMP(6))` decimal(16,6) NOT NULL DEFAULT '0.000000' +) ENGINE=ENGINE DEFAULT CHARSET=latin1 +SELECT * FROM t1; +UNIX_TIMESTAMP(CURRENT_TIMESTAMP(6)) +1316637605.123456 +DROP TABLE t1; +SET @@timestamp=DEFAULT; +SET time_zone=DEFAULT; +SET @@timestamp=UNIX_TIMESTAMP('1970-01-02 03:04:05.123456'); +SELECT FROM_UNIXTIME(@@timestamp); +FROM_UNIXTIME(@@timestamp) +1970-01-02 03:04:05.123456 +SET @@timestamp=default; +# +# Bugs found by Saikumar during testing. +# The below function calls made server crash. +# +SET TIMESTAMP=UNIX_TIMESTAMP('2001-01-01 00:00:00'); +SELECT ADDTIME(UTC_DATE, '23:28:14.014837') FROM dual; +ADDTIME(UTC_DATE, '23:28:14.014837') +23:28:14.014837 +SELECT SUBTIME(UTC_DATE, '04:44:03.014042') FROM dual ; +SUBTIME(UTC_DATE, '04:44:03.014042') +-04:44:03.014042 +SELECT TIMEDIFF(CURRENT_DATE, '2004-12-07') FROM dual; +TIMEDIFF(CURRENT_DATE, '2004-12-07') +-838:59:59 +Warnings: +Warning 1292 Truncated incorrect time value: '-34464:00:00' +SELECT TIMEDIFF('0000-00-00 00:00:00.00000', UTC_DATE) FROM dual; +TIMEDIFF('0000-00-00 00:00:00.00000', UTC_DATE) +NULL +Warnings: +Warning 1292 Incorrect datetime value: '0000-00-00 00:00:00.00000' +SELECT TIME(CURRENT_DATE) FROM dual; +TIME(CURRENT_DATE) +00:00:00 +CREATE TABLE t1 ( +pk TIMESTAMP(1) NOT NULL DEFAULT '1971-01-01 00:00:00.0', +PRIMARY KEY (pk) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY KEY (pk)PARTITIONS 2 */; +INSERT INTO t1 VALUES ('2011-07-13 13:17:58.3'), ('2011-07-13 13:17:59.3'); +SELECT EXTRACT(HOUR_SECOND FROM CURRENT_DATE) FROM t1; +EXTRACT(HOUR_SECOND FROM CURRENT_DATE) +0 +0 +DROP TABLE t1; +SET TIMESTAMP=DEFAULT; +# +# bug8 +# +CREATE TABLE t1 ( +col_time_3_not_null_key time(3) NOT NULL, +col_datetime_4_not_null_key datetime(4) NOT NULL, +KEY col_time_3_not_null_key (col_time_3_not_null_key), +KEY col_datetime_4_not_null_key (col_datetime_4_not_null_key)); +SELECT col_time_3_not_null_key +FROM t1 +WHERE col_datetime_4_not_null_key > 7; +col_time_3_not_null_key +Warnings: +Warning 1292 Incorrect datetime value: '7' for column 'col_datetime_4_not_null_key' at row 1 +Warning 1292 Incorrect datetime value: '7' for column 'col_datetime_4_not_null_key' at row 1 +DROP TABLE t1; +# +# bug9 +# +CREATE TABLE t1 ( col_time_3_key time(3) DEFAULT NULL, col_datetime_5_not_null datetime(5) NOT NULL, pk datetime(6) NOT NULL DEFAULT '1971-01-01 00:00:00.000000', PRIMARY KEY (pk), KEY col_time_3_key (col_time_3_key)); +INSERT INTO t1 VALUES +(NULL,'2003-02-10 18:14:45.03977','2011-07-16 20:53:44.979841'), +('07:57:19.051','1971-01-01 00:00:00.00000','2011-07-16 20:53:45.979841'), +('05:18:39.031','1971-01-01 00:00:00.00000','2011-07-16 20:53:46.979841'), +('12:15:34.041','2001-12-22 00:00:00.00000','2011-07-16 20:53:47.979841'), +('03:40:59.005','1971-01-01 00:00:00.00000','2011-07-16 20:53:48.979841'), +('01:41:57.004','1971-01-01 00:00:00.00000','2011-07-16 20:53:49.979841'); +SELECT col_datetime_5_not_null +FROM t1 +WHERE TIMESTAMPADD(QUARTER, 5, col_time_3_key); +col_datetime_5_not_null +Warnings: +Warning 1441 Datetime function: time field overflow +Warning 1441 Datetime function: time field overflow +Warning 1441 Datetime function: time field overflow +Warning 1441 Datetime function: time field overflow +Warning 1441 Datetime function: time field overflow +DROP TABLE t1; +# +# bug10 +# +CREATE TABLE t1 ( +col_time_1_not_null_key time(1) NOT NULL, +col_time_2_key time(2) DEFAULT NULL, +col_datetime_6_not_null_key datetime(6) NOT NULL, +col_datetime_4_not_null_key datetime(4) NOT NULL, +col_datetime_6_key datetime(6) DEFAULT NULL, +col_timestamp_4_key timestamp(4) NULL DEFAULT '1971-01-01 00:00:00.0000', +col_timestamp_5_key timestamp(5) NULL DEFAULT '1971-01-01 00:00:00.00000', +col_datetime_key datetime DEFAULT NULL, +col_datetime_5_not_null_key datetime(5) NOT NULL, +col_time_5_key time(5) DEFAULT NULL, +col_datetime_3_key datetime(3) DEFAULT NULL, +pk datetime NOT NULL DEFAULT '1971-01-01 00:00:00', +col_time_not_null_key time NOT NULL, +col_time_4_not_null_key time(4) NOT NULL, +PRIMARY KEY (pk), +KEY col_time_1_not_null_key (col_time_1_not_null_key), +KEY col_time_2_key (col_time_2_key), +KEY col_datetime_6_not_null_key (col_datetime_6_not_null_key), +KEY col_datetime_4_not_null_key (col_datetime_4_not_null_key), +KEY col_datetime_6_key (col_datetime_6_key), +KEY col_timestamp_4_key (col_timestamp_4_key), +KEY col_timestamp_5_key (col_timestamp_5_key), +KEY col_datetime_key (col_datetime_key), +KEY col_datetime_5_not_null_key (col_datetime_5_not_null_key), +KEY col_time_5_key (col_time_5_key), +KEY col_datetime_3_key (col_datetime_3_key), +KEY col_time_not_null_key (col_time_not_null_key), +KEY col_time_4_not_null_key (col_time_4_not_null_key)) +/*!50100 PARTITION BY KEY (pk)PARTITIONS 2 */; +SELECT ANY_VALUE(col_datetime_3_key) , COUNT( col_timestamp_5_key ) +FROM t1 FORCE KEY +(PRIMARY, col_datetime_5_not_null_key, col_datetime_6_key, col_time_5_key, col_time_2_key) +WHERE +(col_time_4_not_null_key NOT +BETWEEN '2002-01-01 21:50:38.023562' AND '20090504151448.022774' + AND col_time_1_not_null_key IN +('2000-07-13 21:35:51.034786', +'2004-10-13 19:51:18.029716', +'2001-11-23 10:22:42.001689', +'2001-12-07 06:56:47.034426', +'20081109153313.042580' + ) +) +AND +(col_timestamp_4_key BETWEEN '1971-01-01 00:00:00' AND '2008-06-16 10:42:11.032174' + OR +col_time_not_null_key BETWEEN '2007-02-13 14:29:42.008072' AND '2009-05-18 17:06:18.036503' + ) +AND +( +(col_datetime_key <> '2004-09-06 19:57:07.024714') +AND col_datetime_5_not_null_key NOT IN +('20061212182915.005997', +'1971-01-01 00:00:00', +'20000920051358.001283', +'2000-09-03 00:07:36.061713' + ) +) +AND +(col_datetime_4_not_null_key IS NULL OR col_time_5_key BETWEEN '20051201163954.001782' AND '1971-01-01 00:00:00') +GROUP BY col_datetime_6_not_null_key; +ANY_VALUE(col_datetime_3_key) COUNT( col_timestamp_5_key ) +Warnings: +Note 1292 Incorrect time value: '2002-01-01 21:50:38.023562' for column 'col_time_4_not_null_key' at row 1 +Note 1292 Incorrect time value: '20090504151448.022774' for column 'col_time_4_not_null_key' at row 1 +Note 1292 Incorrect time value: '2000-07-13 21:35:51.034786' for column 'col_time_1_not_null_key' at row 1 +Note 1292 Incorrect time value: '2004-10-13 19:51:18.029716' for column 'col_time_1_not_null_key' at row 1 +Note 1292 Incorrect time value: '2001-11-23 10:22:42.001689' for column 'col_time_1_not_null_key' at row 1 +Note 1292 Incorrect time value: '2001-12-07 06:56:47.034426' for column 'col_time_1_not_null_key' at row 1 +Note 1292 Incorrect time value: '20081109153313.042580' for column 'col_time_1_not_null_key' at row 1 +Note 1292 Incorrect time value: '2007-02-13 14:29:42.008072' for column 'col_time_not_null_key' at row 1 +Note 1292 Incorrect time value: '2009-05-18 17:06:18.036503' for column 'col_time_not_null_key' at row 1 +Note 1292 Incorrect time value: '20051201163954.001782' for column 'col_time_5_key' at row 1 +Note 1292 Incorrect time value: '1971-01-01 00:00:00' for column 'col_time_5_key' at row 1 +DROP TABLE t1; +# +# bug11 +# +CREATE TABLE t1 ( +col_time_5 time(5) DEFAULT NULL, +col_time_1_not_null time(1) NOT NULL, +col_time_2_key time(2) DEFAULT NULL, +col_timestamp_2_not_null timestamp(2) NULL DEFAULT '1971-01-01 00:00:00.00', +col_datetime_not_null datetime NOT NULL, +col_timestamp_3_not_null_key timestamp(3) NULL DEFAULT '1971-01-01 00:00:00.000', +col_datetime_5_key datetime(5) DEFAULT NULL, +pk time(3) NOT NULL DEFAULT '00:00:00.000', +PRIMARY KEY (pk), +KEY col_time_2_key (col_time_2_key), +KEY col_timestamp_3_not_null_key (col_timestamp_3_not_null_key), +KEY col_datetime_5_key (col_datetime_5_key)) +/*!50100 PARTITION BY KEY (pk)PARTITIONS 2 */; +INSERT INTO t1 VALUES ( +'00:20:00.00000', +'15:50:06.1', +'00:20:07.00', +'1971-01-01 00:00:00.00', +'2009-07-16 09:31:21', +'2009-10-14 21:00:00.000', +'1971-01-01 00:00:00.00000', +'22:59:36.734'); +SELECT col_datetime_5_key AS c1 +FROM t1 +WHERE col_datetime_not_null NOT BETWEEN col_time_5 AND +LEAST(col_time_1_not_null, +ADDDATE(CAST(col_time_2_key AS DATE), +col_timestamp_2_not_null)) +ORDER BY 1; +c1 +1971-01-01 00:00:00.00000 +Warnings: +Warning 1441 Datetime function: datetime field overflow +DROP TABLE t1; +# +# bug13 +# +SET timestamp=UNIX_TIMESTAMP('2011-07-31 10:00:00'); +CREATE TABLE t1 ( +col_datetime_2_not_null_key datetime(2) NOT NULL, +col_datetime_5 datetime(5) DEFAULT NULL, +col_time_key time DEFAULT NULL, +col_time_not_null time NOT NULL, +pk datetime(5) NOT NULL DEFAULT '1971-01-01 00:00:00.00000', +PRIMARY KEY (pk), +KEY col_datetime_2_not_null_key (col_datetime_2_not_null_key), +KEY col_time_key (col_time_key)); +INSERT INTO t1 VALUES +('2001-10-20 00:00:00.00','2001-09-20 11:18:18.03630','03:00:10','00:20:01','2011-07-19 17:37:06.26725'), +('1971-01-01 00:00:00.00','1971-01-01 00:00:00.00000','08:30:41','00:20:01','2011-07-19 17:37:07.26725'), +('1971-01-01 00:00:00.00','1971-01-01 00:00:00.00000','20:07:31','01:12:26','2011-07-19 17:37:08.26725'), +('2000-01-14 17:55:57.03','1971-01-01 00:00:00.00000','00:20:04','14:35:10','2011-07-19 17:37:09.26725'), +('2006-12-27 07:25:14.04',NULL,'08:07:59','07:58:50','2011-07-19 17:37:10.26725'), +('2000-10-17 22:03:12.01','1971-01-01 00:00:00.00000','00:20:02','23:21:51','2011-07-19 17:37:11.26725'), +('1971-01-01 00:00:00.00','1971-01-01 00:00:00.00000','00:20:05','00:20:04','2011-07-19 17:37:12.26725'), +('1971-01-01 00:00:00.00','1971-01-01 00:00:00.00000','00:20:04','23:19:52','2011-07-19 17:37:13.26725'), +('1971-01-01 00:00:00.00','2008-06-04 23:05:50.03642','00:20:03','22:28:03','2011-07-19 17:37:14.26725'), +('2000-10-22 23:52:09.01',NULL,'00:20:07','00:20:07','2011-07-19 17:37:15.26725'); +SELECT col_datetime_2_not_null_key AS c1, col_time_not_null AS c2 +FROM t1 +WHERE +pk = LEAST(STR_TO_DATE(DATE_FORMAT(col_time_key, +CONCAT_WS( ':','%I','%m' )) , +CONCAT_WS('-','%y','%H','%V','%k','%k' )), +'0000-00-00') +OR +col_datetime_5 = CURRENT_DATE() +ORDER BY 1; +c1 c2 +Warnings: +Warning 1411 Incorrect datetime value: '03:07' for function str_to_date +Warning 1411 Incorrect datetime value: '03:07' for function str_to_date +Warning 1411 Incorrect datetime value: '08:07' for function str_to_date +Warning 1411 Incorrect datetime value: '08:07' for function str_to_date +Warning 1411 Incorrect datetime value: '08:07' for function str_to_date +Warning 1411 Incorrect datetime value: '08:07' for function str_to_date +Warning 1411 Incorrect datetime value: '12:07' for function str_to_date +Warning 1411 Incorrect datetime value: '12:07' for function str_to_date +Warning 1411 Incorrect datetime value: '08:07' for function str_to_date +Warning 1411 Incorrect datetime value: '08:07' for function str_to_date +Warning 1411 Incorrect datetime value: '12:07' for function str_to_date +Warning 1411 Incorrect datetime value: '12:07' for function str_to_date +Warning 1411 Incorrect datetime value: '12:07' for function str_to_date +Warning 1411 Incorrect datetime value: '12:07' for function str_to_date +Warning 1411 Incorrect datetime value: '12:07' for function str_to_date +Warning 1411 Incorrect datetime value: '12:07' for function str_to_date +Warning 1411 Incorrect datetime value: '12:07' for function str_to_date +Warning 1411 Incorrect datetime value: '12:07' for function str_to_date +Warning 1411 Incorrect datetime value: '12:07' for function str_to_date +Warning 1411 Incorrect datetime value: '12:07' for function str_to_date +DROP TABLE t1; +SET timestamp=DEFAULT; +# +# bug15 +# +CREATE TABLE t1 ( +col_datetime_5 datetime(5) DEFAULT NULL, +col_timestamp_6_key timestamp(6) NOT NULL DEFAULT '1971-01-01 00:00:00.000000', +col_time_2_not_null time(2) NOT NULL, +KEY col_timestamp_6_key (col_timestamp_6_key)) +ENGINE=MEMORY DEFAULT CHARSET=latin1; +INSERT INTO t1 VALUES (current_timestamp(5),current_timestamp(6),current_time(6)); +SELECT col_datetime_5 AS c1 FROM t1 +WHERE col_time_2_not_null = GREATEST(CURRENT_DATE(),col_timestamp_6_key) +ORDER BY 1; +c1 +DROP TABLE t1; +SET @@time_zone='+00:00'; +CREATE TABLE t1 (col_datetime_4_not_null DATETIME(4) NOT NULL); +INSERT INTO t1 VALUES +('1971-01-01 00:00:00.0000'),('2006-05-12 07:06:44.0441'),('2007-11-08 00:00:00.0000'), +('2007-07-23 00:00:00.0000'),('2006-01-10 22:19:14.0158'),('2006-09-13 18:54:05.0013'), +('2002-03-26 00:00:00.0000'),('2002-10-22 10:53:06.0151'),('1971-01-01 00:00:00.0000'), +('2001-06-04 00:00:00.0000'),('1971-01-01 00:00:00.0000'),('2000-12-11 10:47:58.0505'), +('2009-04-21 20:01:40.0570'),('2007-03-12 10:48:41.0031'),('1971-01-01 00:00:00.0000'), +('2009-06-22 00:00:00.0000'),('2008-01-21 15:28:44.0592'),('2003-10-05 00:43:55.0577'), +('2002-11-04 00:46:30.0630'),('2006-01-19 11:38:03.0378'),('1971-01-01 00:00:00.0000'), +('2001-02-04 00:00:00.0000'),('2004-10-22 21:59:04.0394'),('2006-03-20 18:54:13.0139'), +('2004-06-09 03:17:31.0403'),('1971-01-01 00:00:00.0000'),('2003-06-01 17:59:12.0365'), +('1971-01-01 00:00:00.0000'),('2009-06-15 08:58:58.0329'),('1971-01-01 00:00:00.0000'), +('2004-03-26 00:00:00.0000'),('2009-04-27 00:00:00.0000'),('2000-09-07 00:00:00.0000'), +('2006-11-04 00:51:03.0501'),('2005-02-20 00:30:47.0647'),('1971-01-01 00:00:00.0000'), +('2004-12-07 00:00:00.0000'),('1971-01-01 00:00:00.0000'),('1971-01-01 00:00:00.0000'), +('2002-08-17 00:27:20.0536'),('2006-10-12 12:12:28.0337'),('1971-01-01 00:00:00.0000'), +('1971-01-01 00:00:00.0000'),('2009-09-09 14:16:05.0354'),('2000-02-25 00:00:00.0000'), +('2003-12-16 05:38:37.0626'),('2000-10-05 03:46:43.0067'),('1971-01-01 00:00:00.0000'), +('2000-10-08 06:45:51.0547'),('1971-01-01 00:00:00.0000'),('2000-04-06 01:46:21.0620'), +('2001-08-10 23:15:40.0304'),('2001-06-24 10:14:00.0497'),('1971-01-01 00:00:00.0000'), +('1971-01-01 00:00:00.0000'),('2004-10-22 00:00:00.0000'),('1971-01-01 00:00:00.0000'), +('1971-01-01 00:00:00.0000'),('2005-08-23 06:34:23.0058'),('2005-03-28 18:34:18.0138'), +('2004-05-18 00:00:00.0000'); +SELECT UNIX_TIMESTAMP(col_datetime_4_not_null) FROM t1 ORDER BY 1; +UNIX_TIMESTAMP(col_datetime_4_not_null) +31536000.0000 +31536000.0000 +31536000.0000 +31536000.0000 +31536000.0000 +31536000.0000 +31536000.0000 +31536000.0000 +31536000.0000 +31536000.0000 +31536000.0000 +31536000.0000 +31536000.0000 +31536000.0000 +31536000.0000 +31536000.0000 +31536000.0000 +31536000.0000 +31536000.0000 +951436800.0000 +954985581.0620 +968284800.0000 +970717603.0067 +970987551.0547 +976531678.0505 +981244800.0000 +991612800.0000 +993377640.0497 +997485340.0304 +1017100800.0000 +1029544040.0536 +1035283986.0151 +1036370790.0630 +1054490352.0365 +1065314635.0577 +1071553117.0626 +1080259200.0000 +1084838400.0000 +1086751051.0403 +1098403200.0000 +1098482344.0394 +1102377600.0000 +1108859447.0647 +1112034858.0138 +1124778863.0058 +1136931554.0158 +1137670683.0378 +1142880853.0139 +1147417604.0441 +1158173645.0013 +1160655148.0337 +1162601463.0501 +1173696521.0031 +1185148800.0000 +1194480000.0000 +1200929324.0592 +1240344100.0570 +1240790400.0000 +1245056338.0329 +1245628800.0000 +1252505765.0354 +DROP TABLE t1; +SET @@time_zone=DEFAULT; +SET @@timestamp=UNIX_TIMESTAMP('2011-09-21 10:20:30.123456'); +CREATE TABLE t1 +( +col_timestamp_4_not_null_key TIMESTAMP(4) NULL DEFAULT '1971-01-01 00:00:00.0000', +col_datetime_6_not_null DATETIME(6) NOT NULL, +col_time_2_not_null TIME(2) NOT NULL, +pk TIME(5) NOT NULL DEFAULT '00:00:00.00000', +col_timestamp_5_not_null_key TIMESTAMP(5) NULL DEFAULT '1971-01-01 00:00:00.00000', +PRIMARY KEY (pk), +KEY col_timestamp_4_not_null_key (col_timestamp_4_not_null_key), +KEY col_timestamp_5_not_null_key (col_timestamp_5_not_null_key) +) /*!50100 PARTITION BY KEY (pk)PARTITIONS 2 */; +SELECT +LEAST('2008-05-18', LOCALTIMESTAMP(), col_timestamp_5_not_null_key ) AS c1 +FROM t1 +WHERE col_time_2_not_null = TIME +(STR_TO_DATE +(DATE_FORMAT +(DATE('2009-05-04'), +CONCAT_WS(':', '%M', '%a', '%x', '%S', '%j' )), +CONCAT_WS('-', '%V', '%S', '%U' ))) +AND +col_timestamp_4_not_null_key +BETWEEN CURDATE() +AND STR_TO_DATE(DATE_FORMAT(col_datetime_6_not_null, +CONCAT_WS('-', '%I', '%S', '%v' )), +CONCAT_WS('-', '%V', '%H' )); +c1 +Warnings: +Warning 1411 Incorrect datetime value: 'May:Mon:2009:00:124' for function str_to_date +Warning 1411 Incorrect datetime value: 'May:Mon:2009:00:124' for function str_to_date +DROP TABLE t1; +SET @@timestamp=DEFAULT; +SET @@timestamp= UNIX_TIMESTAMP('2011-09-21 08:20:30.123456'); +CREATE TABLE t1 ( +col_datetime_6 DATETIME(6) DEFAULT NULL, +col_time_1_key TIME(1) DEFAULT NULL, +col_time_4_key TIME(4) DEFAULT NULL, +col_time_1 TIME(1) DEFAULT NULL, +pk TIME(4) NOT NULL DEFAULT '00:00:00.0000', +col_time_2_key TIME(2) DEFAULT NULL, +col_datetime DATETIME DEFAULT NULL, +col_datetime_5_not_null DATETIME(5) NOT NULL, +col_time_3_key TIME(3) DEFAULT NULL, +col_time_3 TIME(3) DEFAULT NULL, +PRIMARY KEY (pk), +KEY col_time_1_key (col_time_1_key), +KEY col_time_4_key (col_time_4_key), +KEY col_time_2_key (col_time_2_key), +KEY col_time_3_key (col_time_3_key) +)/*!50100 PARTITION BY KEY (pk)PARTITIONS 2 */; +INSERT INTO t1 VALUES ('2004-06-28 22:47:21.052552','17:11:33.0','00:20:09.0000','00:20:04.0','02:05:58.4461','08:36:44.02','1971-01-01 00:00:00','1971-01-01 00:00:00.00000','02:17:50.049','07:31:13.030'); +SELECT col_datetime_6 AS c1, col_datetime AS c2 +FROM t1 +WHERE col_time_2_key +NOT BETWEEN +SUBTIME(DATE('0000-00-00 00:00:00'), '19:30:30.005477' ) +AND CURRENT_TIME() +ORDER BY +col_time_1, col_time_3, col_datetime_6, col_time_3_key, +col_datetime_5_not_null, col_time_1_key, col_time_4_key; +c1 c2 +2004-06-28 22:47:21.052552 1971-01-01 00:00:00 +DROP TABLE t1; +SET @@timestamp=DEFAULT; +SET @@timestamp=UNIX_TIMESTAMP('2011-09-21 10:20:30'); +CREATE TABLE t1 ( +col_time_6_not_null_key TIME(6) NOT NULL, +col_time_not_null TIME NOT NULL, +pk TIME(4) NOT NULL DEFAULT '00:00:00.0000', +col_time_key TIME DEFAULT NULL, +col_time_2_not_null_key TIME(2) NOT NULL, +col_time_4 TIME(4) DEFAULT NULL, +col_time_3_not_null TIME(3) NOT NULL, +col_datetime_2 DATETIME(2) DEFAULT NULL, +PRIMARY KEY (pk), +KEY col_time_6_not_null_key (col_time_6_not_null_key), +KEY col_time_key (col_time_key), +KEY col_time_2_not_null_key (col_time_2_not_null_key) +) /*!50100 PARTITION BY KEY (pk)PARTITIONS 2 */; +INSERT INTO t1 VALUES ( +CURRENT_TIME(4), +CURRENT_TIME(), +CURRENT_TIME(4), +CURRENT_TIME(), +CURRENT_TIME(2), +CURRENT_TIME(4), +CURRENT_TIME(3), +CURRENT_TIMESTAMP(2)); +SELECT col_datetime_2 AS c1, col_time_not_null AS c2 +FROM t1 +WHERE +col_time_6_not_null_key > +COALESCE(col_time_2_not_null_key, col_time_4, col_time_not_null, col_time_3_not_null) +ORDER BY 1; +c1 c2 +DROP TABLE t1; +SET @@timestamp=DEFAULT; +CREATE TABLE t1 ( +col_time_6_not_null_key TIME(6) NOT NULL, +col_time_5_key TIME(5) DEFAULT NULL, +col_timestamp TIMESTAMP NULL DEFAULT '1971-01-01 00:00:00', +col_time_key TIME DEFAULT NULL, +col_datetime_key DATETIME DEFAULT NULL, +col_time_not_null TIME NOT NULL, +pk TIMESTAMP(4) NOT NULL DEFAULT '1971-01-01 00:00:00.0000', +PRIMARY KEY (pk), +KEY col_time_6_not_null_key (col_time_6_not_null_key), +KEY col_time_5_key (col_time_5_key), +KEY col_time_key (col_time_key), +KEY col_datetime_key (col_datetime_key) +) /*!50100 PARTITION BY KEY (pk)PARTITIONS 2 */; +INSERT INTO t1 VALUES +('03:07:29.013169',NULL,'1971-01-01 00:00:00','18:29:54','2000-06-10 19:41:30', +'13:56:51','2011-09-07 23:08:20.8362'),('00:20:06.000000','08:25:11.04580', +'2009-06-16 04:33:32','00:20:04','2004-08-23 21:05:10','00:20:06', +'2011-09-07 23:08:22.8362'),('00:20:03.000000','00:20:07.00000', +'2007-05-28 13:16:25','00:26:33','1971-01-01 00:00:00','01:04:48', +'2011-09-07 23:08:24.8362'),('19:48:23.009935','00:20:07.00000', +'2009-04-09 13:29:15','00:20:01',NULL,'21:43:24','2011-09-07 23:08:26.8362'), +('00:20:01.000000','22:27:30.00296','2009-03-21 23:00:46',NULL,'2003-01-23 14:57:31', +'00:20:09','2011-09-07 23:08:28.8362'),('23:09:37.056340','07:01:38.05720', +'2006-01-25 15:25:59','00:20:05',NULL,'05:10:32','2011-09-07 23:08:19.8362'), +('09:44:10.025082','00:20:07.00000','2009-01-06 18:48:29','00:20:02', +'1971-01-01 00:00:00','00:20:00','2011-09-07 23:08:21.8362'), +('23:02:50.013380','22:48:12.05831',NULL,NULL,'2003-11-18 04:32:18','00:20:06', +'2011-09-07 23:08:23.8362'),('00:20:01.000000','16:19:55.00007', +'1971-01-01 00:00:00','07:55:21','1971-01-01 00:00:00','14:48:29', +'2011-09-07 23:08:25.8362'),('06:00:36.034953','00:20:01.00000','2007-03-15 21:00:00', +'00:20:01',NULL,'23:29:59','2011-09-07 23:08:27.8362'); +SELECT col_time_5_key AS c1, col_time_key AS c2, col_timestamp AS c3 +FROM t1 +WHERE col_time_not_null +NOT BETWEEN EXTRACT(YEAR_MONTH FROM '1971-01-01 00:00:00') +AND COALESCE (col_time_6_not_null_key, col_datetime_key) +ORDER BY 1, 2; +c1 c2 c3 +NULL 18:29:54 1971-01-01 00:00:00 +00:20:07.00000 00:20:02 2009-01-06 18:48:29 +00:20:07.00000 00:26:33 2007-05-28 13:16:25 +07:01:38.05720 00:20:05 2006-01-25 15:25:59 +08:25:11.04580 00:20:04 2009-06-16 04:33:32 +16:19:55.00007 07:55:21 1971-01-01 00:00:00 +22:27:30.00296 NULL 2009-03-21 23:00:46 +22:48:12.05831 NULL NULL +Warnings: +Warning 1292 Incorrect time value: '197101' for column 'col_time_not_null' at row 1 +DROP TABLE t1; +SET @@timestamp=UNIX_TIMESTAMP('2011-09-21 10:20:30.123456'); +CREATE TABLE t1 ( +col_time_5_not_null TIME(5) NOT NULL, +col_timestamp_4_not_null_key TIMESTAMP(4) NOT NULL DEFAULT '1971-01-01 00:00:00.0000', +col_timestamp_1 TIMESTAMP(1) NOT NULL DEFAULT '1971-01-01 00:00:00.0', +pk TIMESTAMP NOT NULL DEFAULT '1971-01-01 00:00:00', +col_date_key date DEFAULT NULL, +col_time TIME DEFAULT NULL, +col_timestamp TIMESTAMP NOT NULL DEFAULT '1971-01-01 00:00:00', +col_time_3_not_null_key TIME(3) NOT NULL, +PRIMARY KEY (pk), +KEY col_timestamp_4_not_null_key (col_timestamp_4_not_null_key), +KEY col_date_key (col_date_key), +KEY col_time_3_not_null_key (col_time_3_not_null_key) +) ENGINE=MEMORY /*!50100 PARTITION BY KEY (pk)PARTITIONS 2 */; +Warnings: +Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. +INSERT INTO t1 VALUES ( +CURRENT_TIME(5), +CURRENT_TIMESTAMP(4), +CURRENT_TIMESTAMP(1), +CURRENT_TIMESTAMP(), +CURRENT_DATE(), +CURRENT_TIME(), +CURRENT_TIMESTAMP(),CURRENT_TIME()); +Warnings: +Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. +SELECT col_time_3_not_null_key AS c1 +FROM t1 +WHERE col_timestamp <> col_date_key +AND col_time <=> MAKETIME(24, 60, 4) +ORDER BY 1; +c1 +DROP TABLE t1; +SET @@timestamp=DEFAULT; +SET @@timestamp=UNIX_TIMESTAMP('2011-09-21 09:30:40'); +CREATE TABLE t1 ( +col_datetime_5 DATETIME(5) DEFAULT NULL, +col_time_2_key TIME(2) DEFAULT NULL, +col_time_3_not_null TIME(3) NOT NULL, +col_timestamp_1 TIMESTAMP(1) NOT NULL DEFAULT '1971-01-01 00:00:00.0', +col_time_4_key TIME(4) DEFAULT NULL, +col_datetime_3_key DATETIME(3) DEFAULT NULL, +col_time_not_null TIME NOT NULL, +col_time_6_key TIME(6) DEFAULT NULL, +col_time_5_not_null TIME(5) NOT NULL, +col_datetime_2_not_null DATETIME(2) NOT NULL, +col_datetime_4 DATETIME(4) DEFAULT NULL, +col_time_5 TIME(5) DEFAULT NULL, +col_datetime_3 DATETIME(3) DEFAULT NULL, +col_timestamp_2_not_null_key TIMESTAMP(2) NOT NULL DEFAULT '1971-01-01 00:00:00.00', +col_time_3_key TIME(3) DEFAULT NULL, +col_time_6_not_null_key TIME(6) NOT NULL, +col_timestamp_2_key TIMESTAMP(2) NOT NULL DEFAULT '1971-01-01 00:00:00.00', +col_timestamp_3 TIMESTAMP(3) NOT NULL DEFAULT '1971-01-01 00:00:00.000', +col_timestamp_6 TIMESTAMP(6) NOT NULL DEFAULT '1971-01-01 00:00:00.000000', +col_date date DEFAULT NULL, +col_timestamp_3_not_null TIMESTAMP(3) NOT NULL DEFAULT '1971-01-01 00:00:00.000', +col_datetime_1_not_null_key DATETIME(1) NOT NULL, +KEY col_time_2_key (col_time_2_key), +KEY col_time_4_key (col_time_4_key), +KEY col_datetime_3_key (col_datetime_3_key), +KEY col_time_6_key (col_time_6_key), +KEY col_timestamp_2_not_null_key (col_timestamp_2_not_null_key), +KEY col_time_3_key (col_time_3_key), +KEY col_time_6_not_null_key (col_time_6_not_null_key), +KEY col_timestamp_2_key (col_timestamp_2_key), +KEY col_datetime_1_not_null_key (col_datetime_1_not_null_key) +); +INSERT INTO t1 VALUES +('1971-01-01 00:00:00.00000','00:20:08.00','00:20:01.000','1971-01-01 00:00:00.0','00:20:01.0000','1971-01-01 00:00:00.000','00:20:04','09:45:20.061990','00:20:09.00000','1971-01-01 00:00:00.00','1971-01-01 00:00:00.0000','00:20:04.00000','2001-05-23 09:36:42.052','2009-01-05 21:00:00.00','00:20:05.000','14:46:32.052047','2002-11-17 18:55:09.02','1971-01-01 00:00:00.000','2008-09-13 21:00:00.000000','2008-08-19','2007-02-10 21:00:00.000','1971-01-01 00:00:00.0'), +('2000-07-14 05:54:53.06239','00:20:05.00','00:20:05.000','1999-12-31 21:00:00.0','07:03:39.0208','2000-08-23 21:06:58.019','00:20:04','00:20:02.000000','15:44:52.01936','2005-11-17 00:00:00.00','2004-08-13 00:00:00.0000','06:06:48.02990','2006-09-05 02:09:02.053','2002-05-20 13:05:03.02','16:55:37.028','18:50:32.053805','2006-07-19 07:48:53.03','2007-03-18 04:55:22.063','2005-03-03 01:11:52.063987','2000-11-21','2006-01-03 23:43:37.061','2004-03-24 11:09:52.0'), +('1971-01-01 00:00:00.00000','18:28:33.04','00:20:01.000','2000-01-26 21:00:00.0','00:20:04.0000','1971-01-01 00:00:00.000','00:20:04','05:34:26.042699','00:40:37.02528','1971-01-01 00:00:00.00','2005-10-05 00:00:00.0000','23:03:38.03254','2002-07-10 00:00:00.000','2004-08-17 21:00:00.00','00:20:09.000','00:20:02.000000','2007-04-28 12:39:49.01','2009-10-19 21:00:00.000','2002-10-15 22:19:51.010640','2004-09-02','2000-06-03 21:00:00.000','2006-01-21 21:56:34.1'), +('2002-06-04 00:00:00.00000','17:18:15.01','00:20:07.000','1971-01-01 00:00:00.0','00:20:08.0000','1971-01-01 00:00:00.000','00:20:02','03:08:54.060553','07:16:55.00371','2004-05-23 00:18:17.06','2006-10-15 07:36:25.0250','21:17:33.03725','1971-01-01 00:00:00.000','2006-01-09 21:00:00.00','17:37:00.021','20:34:56.023570','2006-07-19 12:40:27.03','1971-01-01 00:00:00.000','1971-01-01 00:00:00.000000','1971-01-01','2001-02-17 08:11:26.052','1971-01-01 00:00:00.0'), +('2008-06-08 06:20:14.03026','00:20:02.00','00:20:09.000','2005-04-05 12:46:20.0','17:11:24.0634','2002-11-21 00:00:00.000','10:43:56','00:20:08.000000','00:20:07.00000','2008-05-13 10:13:26.06','2001-04-17 00:00:00.0000','01:47:22.02812','2009-09-16 14:44:14.026','1971-01-01 00:00:00.00','00:20:01.000','01:09:04.037569','2004-07-22 03:01:37.04','1971-01-01 00:00:00.000','2001-05-21 21:00:00.000000','1971-01-01','1971-01-01 00:00:00.000','1971-01-01 00:00:00.0'), +('1971-01-01 00:00:00.00000','00:20:08.00','12:51:21.056','1971-01-01 00:00:00.0','00:39:29.0565','2003-01-04 00:00:00.000','01:19:53','00:20:05.000000','17:19:59.03478','2001-07-12 00:00:00.00','2008-12-16 13:56:12.0187','00:21:45.00721','1971-01-01 00:00:00.000','1971-01-01 00:00:00.00','13:54:49.005','00:20:07.000000','2004-02-23 10:21:57.02','1971-01-01 00:00:00.000','1971-01-01 00:00:00.000000','2005-10-10','2000-07-10 21:37:07.038','1971-01-01 00:00:00.0'), +('1971-01-01 00:00:00.00000','23:11:02.06','00:20:04.000','2002-09-06 08:31:08.0','20:03:26.0050','1971-01-01 00:00:00.000','09:40:06','17:18:46.036378','01:21:25.03109','1971-01-01 00:00:00.00','2005-11-11 12:10:13.0077','00:20:09.00000','1971-01-01 00:00:00.000','1971-01-01 00:00:00.00','09:04:28.034','00:20:08.000000','1971-01-01 00:00:00.00','2009-07-28 08:02:12.002','1971-01-01 00:00:00.000000','2005-04-06','2006-06-09 07:10:23.064','1971-01-01 00:00:00.0'), +('1971-01-01 00:00:00.00000','00:20:09.00','04:15:43.040','2002-09-15 21:00:00.0','00:20:03.0000','1971-01-01 00:00:00.000','11:07:33','00:20:00.000000','00:20:09.00000','1971-01-01 00:00:00.00','1971-01-01 00:00:00.0000','04:06:54.01875','2001-12-06 21:09:30.042','2002-09-23 22:33:09.03','13:56:42.014','07:56:26.029465','1971-01-01 00:00:00.00','2001-05-19 19:41:58.064','2006-03-28 06:12:25.002048','1971-01-01','1971-01-01 00:00:00.000','1971-01-01 00:00:00.0'), +('2008-05-22 00:00:00.00000','21:46:17.04','00:20:00.000','2004-05-01 21:00:00.0','00:20:04.0000','1971-01-01 00:00:00.000','16:08:23','00:20:00.000000','00:39:12.04586','2001-08-25 00:00:00.00','2003-09-08 20:19:27.0197','16:01:03.03502','2005-02-14 00:00:00.000','1971-01-01 00:00:00.00','13:29:52.038','00:20:02.000000','2004-10-07 23:51:00.06','2009-02-03 23:21:26.017','1971-01-01 00:00:00.000000','1971-01-01','1971-01-01 00:00:00.000','2004-09-13 00:00:00.0'), +('2005-10-13 00:00:00.00000','00:20:08.00','18:41:54.050','2007-09-10 21:00:00.0','01:55:43.0424','1971-01-01 00:00:00.000','00:20:07','06:49:20.035790','00:20:04.00000','1971-01-01 00:00:00.00','2008-02-13 10:19:26.0346','00:20:01.00000','1971-01-01 00:00:00.000','1971-01-01 00:00:00.00','15:01:22.011','18:47:41.003944','2008-02-11 21:00:00.00','1971-01-01 00:00:00.000','2005-02-17 12:54:03.001418','2000-08-18','1971-01-01 00:00:00.000','2004-09-19 23:37:42.0'); +SELECT col_timestamp_3 AS c1, col_date AS c2, CURTIME() AS c3 +FROM t1 +WHERE col_time_3_not_null NOT IN +(col_time_not_null, +CAST(col_time_5 AS DATETIME(3)), +MAKEDATE(DAYOFMONTH('2002-09-13'), DATEDIFF('2009-12-15', col_timestamp_6)), +CURRENT_DATE()) +AND +col_time_3_key NOT +BETWEEN LEAST(CURRENT_TIME(), TIMESTAMPADD(HOUR, 187, MAKETIME(209, 60, 1))) +AND CURTIME() +AND col_datetime_2_not_null NOT IN +(DATE('2009-03-28'), col_timestamp_2_not_null_key, +ADDDATE(col_timestamp_2_key, 28), +col_datetime_3, +UTC_DATE()) +OR col_time_6_key IS NOT NULL +AND col_timestamp_3_not_null IN +(col_timestamp_1, col_datetime_3_key, col_time_4_key) +OR col_time_6_not_null_key +BETWEEN TIMESTAMP('1971-01-01', '16:50:23.062015') +AND col_datetime_5 +AND col_datetime_4 >= col_time_2_key +AND col_time_5_not_null +BETWEEN col_timestamp_3_not_null +AND col_datetime_1_not_null_key +ORDER BY col_time_4_key, col_datetime_3_key; +c1 c2 c3 +2001-05-19 19:41:58.064 1971-01-01 09:30:40 +2009-02-03 23:21:26.017 1971-01-01 09:30:40 +1971-01-01 00:00:00.000 1971-01-01 09:30:40 +1971-01-01 00:00:00.000 2005-10-10 09:30:40 +1971-01-01 00:00:00.000 2000-08-18 09:30:40 +2007-03-18 04:55:22.063 2000-11-21 09:30:40 +DROP TABLE t1; +SET @@timestamp=DEFAULT; +CREATE TABLE t1 ( +col_datetime_1_key DATETIME(1) DEFAULT NULL, +col_time_5_not_null_key TIME(5) NOT NULL, +col_datetime_2_not_null DATETIME(2) NOT NULL, +pk DATETIME(2) NOT NULL DEFAULT '1971-01-01 00:00:00.00', +col_time_2_not_null_key TIME(2) NOT NULL, +col_time_2_key TIME(2) DEFAULT NULL, +col_timestamp_3_not_null TIMESTAMP(3) NOT NULL DEFAULT '1971-01-01 00:00:00.000', +col_timestamp_4 TIMESTAMP(4) NOT NULL DEFAULT '1971-01-01 00:00:00.0000', +PRIMARY KEY (pk), +KEY col_datetime_1_key (col_datetime_1_key), +KEY col_time_5_not_null_key (col_time_5_not_null_key), +KEY col_time_2_not_null_key (col_time_2_not_null_key), +KEY col_time_2_key (col_time_2_key) +)/*!50100 PARTITION BY KEY (pk)PARTITIONS 2 */; +INSERT INTO t1 VALUES ('2007-11-05 00:00:00.0','00:20:01.00000','1971-01-01 00:00:00.00','1971-01-01 00:00:00.00','00:20:08.00','07:54:36.06','1971-01-01 00:00:00.000','2008-02-19 21:00:00.0000'),('2001-09-22 23:10:01.0','00:20:00.00000','1971-01-01 00:00:00.00','2011-09-09 20:59:53.03','00:20:01.00','00:20:02.00','1971-01-01 00:00:00.000','2003-07-11 13:55:04.0379'),('2007-10-20 00:00:00.0','22:15:28.06072','1971-01-01 00:00:00.00','2011-09-09 20:59:54.03','00:20:03.00','00:20:07.00','1971-01-01 00:00:00.000','1971-01-01 00:00:00.0000'),('1971-01-01 00:00:00.0','00:20:03.00000','2009-01-27 00:00:00.00','2011-09-09 20:59:55.03','03:34:18.06','14:32:24.01','1971-01-01 00:00:00.000','2003-11-17 09:58:11.0160'),('2008-04-10 00:00:00.0','00:20:05.00000','2004-10-16 01:19:20.06','2011-09-09 20:59:56.03','21:14:08.05','02:32:00.04','2008-09-15 17:48:32.047','2003-01-16 21:00:00.0000'),('1971-01-01 00:00:00.0','00:20:03.00000','1971-01-01 00:00:00.00','2011-09-09 20:59:57.03','00:20:05.00','22:08:39.02','1971-01-01 00:00:00.000','2003-03-19 02:39:29.0637'),('2009-04-10 21:16:38.0','00:20:07.00000','2001-05-17 15:25:33.04','2011-09-09 20:59:58.03','00:20:05.00','09:36:28.04','2005-01-12 10:44:24.031','1971-01-01 00:00:00.0000'),('2001-06-10 20:23:08.0','07:38:25.03484','2002-06-22 00:00:00.00','2011-09-09 20:59:59.03','02:05:30.01','04:24:09.06','2002-05-25 21:00:00.000','2006-05-16 06:48:03.0399'); +SELECT +col_datetime_2_not_null AS c1, +col_time_2_key AS c2, +col_time_5_not_null_key AS c3 +FROM t1 +WHERE col_time_2_not_null_key NOT IN +(TIMESTAMP(MAKEDATE(19 + 0, 213)), +MAKEDATE(46, DATEDIFF('1971-01-01 00:00:00', '1971-01-01 00:00:00'))) +AND col_datetime_1_key IS NULL +OR col_timestamp_4 < col_timestamp_3_not_null +ORDER BY 1; +c1 c2 c3 +2001-05-17 15:25:33.04 09:36:28.04 00:20:07.00000 +2004-10-16 01:19:20.06 02:32:00.04 00:20:05.00000 +DROP TABLE t1; +SET @@timestamp=UNIX_TIMESTAMP('2011-09-21 10:20:30.123456'); +CREATE TABLE t1 ( +col_time_1_not_null TIME(1) NOT NULL, +col_time_6 TIME(6) DEFAULT NULL, +col_datetime_6_not_null_key DATETIME(6) NOT NULL, +col_timestamp_key TIMESTAMP NULL DEFAULT '1971-01-01 00:00:00', +col_timestamp_2 TIMESTAMP(2) NULL DEFAULT '1971-01-01 00:00:00.00', +col_timestamp_not_null TIMESTAMP NULL DEFAULT '1971-01-01 00:00:00', +col_timestamp TIMESTAMP NULL DEFAULT '1971-01-01 00:00:00', +pk DATETIME(3) NOT NULL DEFAULT '1971-01-01 00:00:00.000', +col_time_6_not_null TIME(6) NOT NULL, +col_datetime_3_not_null DATETIME(3) NOT NULL, +PRIMARY KEY (pk), +KEY col_datetime_6_not_null_key (col_datetime_6_not_null_key), +KEY col_timestamp_key (col_timestamp_key) +) /*!50100 PARTITION BY KEY (pk)PARTITIONS 2 */; +INSERT INTO t1 VALUES ( +CURRENT_TIME(1), +CURRENT_TIME(6), +CURRENT_TIMESTAMP(6), +CURRENT_TIMESTAMP(), +CURRENT_TIMESTAMP(2), +CURRENT_TIMESTAMP(), +CURRENT_TIMESTAMP, +CURRENT_TIMESTAMP(3), +CURRENT_TIME(6), +CURRENT_TIMESTAMP(3)); +SELECT col_timestamp_not_null AS c1, col_datetime_6_not_null_key AS c2 +FROM t1 +WHERE col_timestamp IS NOT NULL +AND col_timestamp_2 <> col_time_1_not_null +AND col_timestamp_key BETWEEN col_datetime_3_not_null AND CURRENT_TIME() +OR col_time_6_not_null != LEAST(col_time_6, UTC_TIME()); +c1 c2 +2011-09-21 10:20:30 2011-09-21 10:20:30.123456 +DROP TABLE t1; +SET @@timestamp=DEFAULT; +SET @@timestamp=UNIX_TIMESTAMP('2011-09-21 10:20:30.123456'); +CREATE TABLE t1 ( +col_timestamp_2 TIMESTAMP(2) NOT NULL DEFAULT '1971-01-01 00:00:00.00', +col_datetime_5 DATETIME(5) DEFAULT NULL, +col_time_3 TIME(3) DEFAULT NULL, +col_time_4_not_null TIME(4) NOT NULL, +col_datetime_5_not_null DATETIME(5) NOT NULL, +col_timestamp_5_key TIMESTAMP(5) NOT NULL DEFAULT '1971-01-01 00:00:00.00000', +col_time_1_not_null_key TIME(1) NOT NULL, +col_datetime DATETIME DEFAULT NULL, +col_timestamp_4 TIMESTAMP(4) NOT NULL DEFAULT '1971-01-01 00:00:00.0000', +KEY col_timestamp_5_key (col_timestamp_5_key), +KEY col_time_1_not_null_key (col_time_1_not_null_key) +); +INSERT INTO t1 VALUES ( +CURRENT_TIMESTAMP(2), +CURRENT_TIMESTAMP(5), +CURRENT_TIME(3), +CURRENT_TIME(4), +CURRENT_TIMESTAMP(5), +CURRENT_TIMESTAMP(5), +CURRENT_TIME(1), +CURRENT_TIMESTAMP(), +CURRENT_TIMESTAMP(4)); +SELECT col_datetime_5_not_null AS c1, col_time_1_not_null_key AS c2 +FROM t1 +WHERE +col_time_4_not_null = MAKETIME(24, 60, 3 ) +AND +col_time_3 NOT IN ( +col_datetime_5, +UTC_DATE(), +col_timestamp_5_key, +ADDDATE('1971-01-01 00:00:00', +DATEDIFF('2001-09-21',FROM_UNIXTIME(1018888192, +CONCAT_WS('-','%s','%V','%u')))), +col_timestamp_4) +AND +col_timestamp_2 NOT BETWEEN col_datetime AND '2005-09-12' +ORDER BY 1; +c1 c2 +SELECT col_datetime_5_not_null AS c1, col_time_1_not_null_key AS c2 +FROM t1 +WHERE col_time_4_not_null=MAKETIME(24,60, 3) +AND col_time_3 NOT IN +(col_datetime_5, UTC_DATE(), col_timestamp_5_key, col_timestamp_4) +AND +col_timestamp_2 NOT BETWEEN col_datetime AND '2005-09-12' +ORDER BY 1; +c1 c2 +DROP TABLE t1; +SET @@timestamp=DEFAULT; +SET @@timestamp=UNIX_TIMESTAMP('2011-09-21 10:20:30.123456'); +CREATE TABLE t1 ( +col_time_4_key TIME(4) DEFAULT NULL, +col_datetime_4_not_null DATETIME(4) NOT NULL, +col_timestamp_5 TIMESTAMP(5) NOT NULL DEFAULT '1971-01-01 00:00:00.00000', +col_datetime_not_null_key DATETIME NOT NULL, +col_timestamp_key TIMESTAMP NOT NULL DEFAULT '1971-01-01 00:00:00', +KEY col_time_4_key (col_time_4_key), +KEY col_datetime_not_null_key (col_datetime_not_null_key), +KEY col_timestamp_key (col_timestamp_key) +); +INSERT INTO t1 VALUES ('00:20:08.0000','1971-01-01 00:00:00.0000','1971-01-01 00:00:00.00000','1971-01-01 00:00:00','2006-10-24 21:00:00'),('19:24:23.0232','2006-12-11 22:04:06.0393','2004-12-08 21:00:00.00000','2009-06-04 03:01:35','2003-08-19 21:00:00'); +SELECT UNIX_TIMESTAMP(col_datetime_4_not_null) AS c1 +FROM t1 +WHERE col_time_4_key NOT +BETWEEN '2001-07-06' + AND LEAST(FROM_DAYS(col_timestamp_key), col_timestamp_5) +OR CONVERT_TZ(MAKETIME(24, 5, 7), 'Japan', 'Japan') IS NULL +OR CURRENT_TIMESTAMP() IS NOT NULL +OR col_datetime_not_null_key >= UTC_TIME() +ORDER BY 1 ; +c1 +31525200.0000 +1165863846.0393 +DROP TABLE t1; +SET @@timestamp=DEFAULT; +CREATE TABLE t1 ( +col_time_not_null_key TIME NOT NULL, +col_datetime_5_not_null_key DATETIME(5) NOT NULL, +col_timestamp_6_key TIMESTAMP(6) NOT NULL DEFAULT '1971-01-01 00:00:00.000000', +col_time_1 TIME(1) DEFAULT NULL, +pk DATETIME(1) NOT NULL DEFAULT '1971-01-01 00:00:00.0', +col_time_2_key TIME(2) DEFAULT NULL, +PRIMARY KEY (pk), +KEY col_time_not_null_key (col_time_not_null_key), +KEY col_datetime_5_not_null_key (col_datetime_5_not_null_key), +KEY col_timestamp_6_key (col_timestamp_6_key), +KEY col_time_2_key (col_time_2_key) +)/*!50100 PARTITION BY KEY (pk)PARTITIONS 2 */; +INSERT INTO t1 VALUES ('00:20:02','2007-08-09 05:14:12.05054','2007-06-20 21:00:00.000000','06:16:36.0','2011-09-09 21:37:45.2','19:15:37.02'),('18:00:14','1971-01-01 00:00:00.00000','2000-12-10 12:35:01.029761','00:20:04.0','2011-09-09 21:37:46.2','06:21:03.03'); +SELECT col_time_1 AS c1 +FROM t1 +WHERE col_time_not_null_key <= col_timestamp_6_key +AND col_time_2_key > SUBTIME('2006-07-16', '05:05:02.040778') +ORDER BY col_datetime_5_not_null_key, col_time_1; +c1 +DROP TABLE t1; +CREATE TABLE t1 ( +col_timestamp_3_not_null_key timestamp(3) NULL DEFAULT '1971-01-01 00:00:00.000', +pk time(1) NOT NULL DEFAULT '00:00:00.0', +col_datetime_6 datetime(6) DEFAULT NULL, +col_time_5_not_null_key time(5) NOT NULL, +col_timestamp_1_not_null_key timestamp(1) NULL DEFAULT '1971-01-01 00:00:00.0', +col_datetime_4_key datetime(4) DEFAULT NULL, +col_time_2_not_null_key time(2) NOT NULL, +PRIMARY KEY (pk), +KEY col_timestamp_3_not_null_key (col_timestamp_3_not_null_key), +KEY col_time_5_not_null_key (col_time_5_not_null_key), +KEY col_timestamp_1_not_null_key (col_timestamp_1_not_null_key), +KEY col_datetime_4_key (col_datetime_4_key), +KEY col_time_2_not_null_key (col_time_2_not_null_key) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (pk)PARTITIONS 2 */; +INSERT INTO t1 VALUES ('1971-01-01 00:00:00.000','14:09:27.6','1971-01-01 00:00:00.000000','18:38:36.04289','2003-07-01 21:00:00.0','2009-09-15 09:25:49.0110','15:47:52.01'); +INSERT INTO t1 VALUES ('2004-04-08 23:25:16.012','14:09:26.6',NULL,'05:45:23.05509','2008-12-11 21:00:00.0','2001-04-23 20:41:27.0470','05:09:23.04'); +SELECT SUBTIME(col_timestamp_3_not_null_key , SYSDATE()) AS c1 FROM t1 +WHERE col_timestamp_1_not_null_key NOT IN +(col_datetime_4_key , GREATEST(DATE('2006-04-26'), UTC_DATE())) +ORDER BY col_datetime_6 , col_time_2_not_null_key , col_time_5_not_null_key; +DROP TABLE t1; +CREATE TABLE t1 ( +col_time_1_not_null_key time(1) NOT NULL, +pk timestamp NOT NULL DEFAULT '1971-01-01 00:00:00', +col_datetime_3_not_null_key datetime(3) NOT NULL, +col_time_2_key time(2) DEFAULT NULL, +PRIMARY KEY (pk), +KEY col_time_1_not_null_key (col_time_1_not_null_key), +KEY col_datetime_3_not_null_key (col_datetime_3_not_null_key), +KEY col_time_2_key (col_time_2_key) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY KEY (pk)PARTITIONS 2 */; +Warnings: +Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. +INSERT INTO t1 VALUES ('00:20:05.0','1999-12-31 21:00:01','1971-01-01 00:00:00.000','04:25:59.01'); +Warnings: +Warning 1287 The partition engine, used by table 'test.t1', is deprecated and will be removed in a future release. Please use native partitioning instead. +INSERT INTO t1 VALUES ('00:15:56.0','1999-12-31 21:00:03','1971-01-01 00:00:00.000','00:20:06.00'); +INSERT INTO t1 VALUES ('00:20:03.0','1999-12-31 21:00:05','2002-10-18 16:08:58.006','00:20:00.00'); +INSERT INTO t1 VALUES ('00:20:09.0','1999-12-31 21:00:07','2002-11-11 17:21:02.045','18:39:12.05'); +INSERT INTO t1 VALUES ('13:51:22.0','1999-12-31 21:00:09','2002-08-07 10:27:35.055','00:20:07.00'); +INSERT INTO t1 VALUES ('00:20:06.0','1971-01-01 00:00:00','2003-08-12 00:00:00.000','20:35:34.01'); +SELECT col_time_1_not_null_key AS c1 +FROM t1 +WHERE col_datetime_3_not_null_key NOT IN +(LEAST( DATE('1971-01-01 00:00:00'), CURDATE()), col_time_2_key); +DROP TABLE t1; +SET timestamp=UNIX_TIMESTAMP('2001-11-07 15:13:00'); +CREATE TABLE t1 ( +col_time_3_not_null time(3) NOT NULL, +col_datetime_4_not_null_key datetime(4) NOT NULL, +col_datetime_key datetime DEFAULT NULL, +col_time_1_key time(1) DEFAULT NULL, +col_time_5 time(5) DEFAULT NULL, +col_timestamp_6_not_null_key timestamp(6) NULL DEFAULT '1971-01-01 00:00:00.000000', +pk datetime(6) NOT NULL DEFAULT '1971-01-01 00:00:00.000000', +PRIMARY KEY (pk), +KEY col_datetime_4_not_null_key (col_datetime_4_not_null_key), +KEY col_datetime_key (col_datetime_key), +KEY col_time_1_key (col_time_1_key), +KEY col_timestamp_6_not_null_key (col_timestamp_6_not_null_key)); +INSERT INTO t1 VALUES ('12:52:24.022','1971-01-01 00:00:00.0000','2003-05-24 00:00:00','00:20:09.0','15:11:20.03463','1971-01-01 00:00:00.000000','2011-11-07 12:01:35.111932'); +INSERT INTO t1 VALUES ('18:52:49.043','2000-10-13 00:00:00.0000','2005-07-22 00:00:00',NULL,'08:19:02.03845','2000-09-20 03:26:09.009008','2011-11-07 12:01:36.111932'); +INSERT INTO t1 VALUES ('23:46:05.010','2005-12-27 04:06:15.0087','1971-01-01 00:00:00','23:40:13.0','08:30:24.03114','1971-01-01 00:00:00.000000','2011-11-07 12:01:37.111932'); +INSERT INTO t1 VALUES ('00:20:05.000','2009-06-01 08:01:58.0532','2007-03-26 12:18:48','00:20:03.0','20:32:22.04519','2000-08-19 21:00:00.000000','2011-11-07 12:01:38.111932'); +INSERT INTO t1 VALUES ('00:20:05.000','2002-05-01 00:00:00.0000','1971-01-01 00:00:00','04:31:10.0','00:20:04.00000','1971-01-01 00:00:00.000000','2011-11-07 12:01:39.111932'); +INSERT INTO t1 VALUES ('00:20:06.000','2007-07-25 22:20:58.0023','1971-01-01 00:00:00','00:23:16.1',NULL,'2008-03-19 16:17:15.042024','2011-11-07 12:01:40.111932'); +INSERT INTO t1 VALUES ('02:55:32.040','1971-01-01 00:00:00.0000',NULL,'00:20:02.0','08:45:57.00998','2009-06-25 10:21:16.011345','2011-11-07 12:01:41.111932'); +INSERT INTO t1 VALUES ('00:20:06.000','2009-01-07 01:12:15.0324','2000-05-26 00:00:00','17:41:45.1','00:20:07.00000','1971-01-01 00:00:00.000000','2011-11-07 12:01:42.111932'); +INSERT INTO t1 VALUES ('12:01:30.061','2009-04-01 00:00:00.0000','2001-05-08 05:31:04','07:43:41.1','11:12:29.03251','2009-12-22 17:45:46.040987','2011-11-07 12:01:43.111932'); +INSERT INTO t1 VALUES ('00:16:22.057','2005-05-10 00:18:58.0345',NULL,'02:24:15.0',NULL,'2008-02-14 20:55:46.023678','2011-11-07 12:01:44.111932'); +INSERT INTO t1 VALUES ('06:54:17.018','2002-12-27 12:28:03.0382','1971-01-01 00:00:00','19:19:54.0','01:42:30.03406','1971-01-01 00:00:00.000000','2011-11-07 12:01:45.111932'); +INSERT INTO t1 VALUES ('00:20:04.000','2007-03-11 00:00:00.0000','1971-01-01 00:00:00',NULL,'13:12:03.05778','2005-02-19 02:31:13.046418','2011-11-07 12:01:46.111932'); +INSERT INTO t1 VALUES ('00:20:01.000','2009-08-13 00:00:00.0000','1971-01-01 00:00:00','00:20:02.0',NULL,'2008-05-21 10:53:59.004633','2011-11-07 12:01:47.111932'); +INSERT INTO t1 VALUES ('02:44:13.025','2001-07-02 14:06:37.0411','2009-04-01 00:43:45','00:20:07.0','16:15:02.01279','2004-07-28 17:34:20.031118','2011-11-07 12:01:48.111932'); +INSERT INTO t1 VALUES ('14:51:02.019','2006-02-24 04:12:05.0014','1971-01-01 00:00:00','00:20:08.0','00:20:09.00000','2001-04-25 21:00:00.000000','2011-11-07 12:01:49.111932'); +SELECT +col_timestamp_6_not_null_key AS c1, +col_datetime_key AS c2, +UTC_DATE() AS c3 +FROM t1 +WHERE col_time_1_key BETWEEN +TIMESTAMPADD(MONTH, 38 ,CONVERT_TZ( DATE(MAKEDATE(207, 38 )), '+00:00','+04:00')) +AND LOCALTIMESTAMP() +ORDER BY col_datetime_4_not_null_key , col_time_5 , col_time_3_not_null; +c1 c2 c3 +2009-06-25 10:21:16.011345 NULL 2001-11-07 +1971-01-01 00:00:00.000000 2003-05-24 00:00:00 2001-11-07 +2004-07-28 17:34:20.031118 2009-04-01 00:43:45 2001-11-07 +1971-01-01 00:00:00.000000 1971-01-01 00:00:00 2001-11-07 +2008-02-14 20:55:46.023678 NULL 2001-11-07 +2001-04-25 21:00:00.000000 1971-01-01 00:00:00 2001-11-07 +2008-03-19 16:17:15.042024 1971-01-01 00:00:00 2001-11-07 +2009-12-22 17:45:46.040987 2001-05-08 05:31:04 2001-11-07 +2000-08-19 21:00:00.000000 2007-03-26 12:18:48 2001-11-07 +2008-05-21 10:53:59.004633 1971-01-01 00:00:00 2001-11-07 +DROP TABLE t1; +SET timestamp=DEFAULT; +# +# Bug#13359097 ASSERT FAILURE IN MAKE_SORTKEY +# +SET timestamp=UNIX_TIMESTAMP('2011-11-01 17:48:00'); +CREATE TABLE t1 ( +pk time(6) NOT NULL DEFAULT '00:00:00.000000', +col_date_not_null date NOT NULL, +PRIMARY KEY (pk) +); +INSERT INTO t1 VALUES ('00:00:00.000000','2001-09-10'); +INSERT INTO t1 VALUES ('12:07:41.148239','2000-05-23'); +SELECT GREATEST('2004-04-07', COALESCE (pk, col_date_not_null)) FROM t1 ORDER BY 1; +GREATEST('2004-04-07', COALESCE (pk, col_date_not_null)) +2011-11-01 00:00:00.000000 +2011-11-01 12:07:41.148239 +DROP TABLE t1; +SET timestamp=DEFAULT; +# +# BUG 13385275 - ASSERT FAILURE IN TIME_FROM_LONGLONG_PACKED +# +CREATE TABLE t1 ( +col_date_not_null_key date NOT NULL, +KEY col_date_not_null_key (col_date_not_null_key)); +INSERT INTO t1 VALUES ('1971-01-01'), ('2000-11-20'); +SELECT ADDTIME(GREATEST(col_date_not_null_key, '2007-03-11 08:51:19.009408'), +'12:20:40.029940') +FROM t1; +ADDTIME(GREATEST(col_date_not_null_key, '2007-03-11 08:51:19.009408'), +'12:20:40.029940') +21:11:59.039348 +21:11:59.039348 +DROP TABLE t1; +# +# BUG#13386657 ASSERT FAILURE IN ITEM::GET_DATE_FROM_NON_TEMPORAL +# +CREATE TABLE t1 ( +col_time_5_not_null_key time(5) NOT NULL, +col_datetime_4 datetime(4) DEFAULT NULL, +col_timestamp_1_not_null_key timestamp(1) NULL DEFAULT '1971-01-01 00:00:00.0', +col_datetime_3_not_null_key datetime(3) NOT NULL, +KEY col_time_5_not_null_key (col_time_5_not_null_key), +KEY col_timestamp_1_not_null_key (col_timestamp_1_not_null_key), +KEY col_datetime_3_not_null_key (col_datetime_3_not_null_key)); +INSERT INTO t1 VALUES ('15:01:38.00004','1971-01-01 00:00:00.0000','2005-06-08 16:51:23.0','1971-01-01 00:00:00.000'); +SELECT col_datetime_4 +FROM t1 +WHERE col_datetime_3_not_null_key IN +(COALESCE (col_timestamp_1_not_null_key), col_time_5_not_null_key); +col_datetime_4 +DROP TABLE t1; +CREATE TABLE t1 (a TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3)); +INSERT INTO t1 VALUES ('2001-01-01 10:20:30.999'); +SELECT CAST(COALESCE(a,a) AS CHAR) FROM t1; +CAST(COALESCE(a,a) AS CHAR) +2001-01-01 10:20:30.999 +SELECT CAST(COALESCE(a,a) AS SIGNED) FROM t1; +CAST(COALESCE(a,a) AS SIGNED) +20010101102031 +SELECT CAST(COALESCE(a,a) AS DECIMAL(25,3)) FROM t1; +CAST(COALESCE(a,a) AS DECIMAL(25,3)) +20010101102030.999 +SELECT CAST(COALESCE(a,a) AS DATETIME(6)) FROM t1; +CAST(COALESCE(a,a) AS DATETIME(6)) +2001-01-01 10:20:30.999000 +SELECT CAST(COALESCE(a,a) AS TIME(6)) FROM t1; +CAST(COALESCE(a,a) AS TIME(6)) +10:20:30.999000 +SELECT ROUND(COALESCE(a,a)) FROM t1; +ROUND(COALESCE(a,a)) +20010101102031 +DROP TABLE t1; +# +# Bug#13391370 ASSERT FAILURE IN TIME_TO_LONGLONG_DATETIME_PACKED +# +SET timestamp=UNIX_TIMESTAMP('2011-11-15 16:25:30'); +CREATE TABLE t1 ( +col_time_2_not_null time(2) NOT NULL, +col_timestamp_1_not_null timestamp(1) NULL DEFAULT '1971-01-01 00:00:00.0', +col_datetime_1 datetime(1) DEFAULT NULL, +col_timestamp_4_not_null timestamp(4) NULL DEFAULT '1971-01-01 00:00:00.0000', +col_timestamp_6_not_null_key timestamp(6) NULL DEFAULT '1971-01-01 00:00:00.000000', +col_date date DEFAULT NULL, +KEY col_timestamp_6_not_null_key (col_timestamp_6_not_null_key)); +DELETE FROM t1; +INSERT INTO t1 VALUES ('00:20:09.00','2008-02-09 00:19:47.1','1971-01-01 00:00:00.0','2009-03-13 00:56:44.0401','2008-10-17 09:43:02.051040','2000-11-13'); +INSERT INTO t1 VALUES ('00:20:04.00','1971-01-01 00:00:00.0','1971-01-01 00:00:00.0','1971-01-01 00:00:00.0000','1971-01-01 00:00:00.000000','2006-11-14'); +INSERT INTO t1 VALUES ('15:54:14.06','2003-04-19 04:55:47.0',NULL,'1971-01-01 00:00:00.0000','2009-12-27 02:49:14.005722','1971-01-01'); +INSERT INTO t1 VALUES ('04:58:16.02','2004-02-17 21:00:00.0',NULL,'1971-01-01 00:00:00.0000','2001-10-07 11:02:50.054375','2000-04-10'); +INSERT INTO t1 VALUES ('10:34:28.04','2006-10-16 21:00:00.0',NULL,'1971-01-01 00:00:00.0000','2008-05-17 05:14:50.028683','1971-01-01'); +INSERT INTO t1 VALUES ('14:17:38.04','2001-06-24 04:33:25.0','2008-09-05 21:25:39.0','1971-01-01 00:00:00.0000','1971-01-01 00:00:00.000000',NULL); +INSERT INTO t1 VALUES ('00:20:06.00','2005-06-26 22:52:46.0','1971-01-01 00:00:00.0','2000-09-11 02:51:17.0211','1971-01-01 00:00:00.000000','2006-10-10'); +INSERT INTO t1 VALUES ('00:09:41.03','1971-01-01 00:00:00.0','2008-02-16 19:59:19.0','2000-10-21 21:00:00.0000','2006-11-14 10:22:27.009969','1971-01-01'); +INSERT INTO t1 VALUES ('16:57:08.01','2009-05-13 21:03:39.0','2004-01-12 11:46:42.0','2000-02-28 10:51:01.0152','2001-05-10 14:21:38.022082',NULL); +INSERT INTO t1 VALUES ('19:02:15.03','1971-01-01 00:00:00.0','2009-07-16 20:15:38.1','1971-01-01 00:00:00.0000','1971-01-01 00:00:00.000000',NULL); +SELECT +SUBTIME('2002-04-08 06:05:42.056589', '01:26:40.063385') AS c1 +FROM +t1 +WHERE +col_timestamp_6_not_null_key IN ( +LEAST(col_datetime_1, MAKETIME(24,8,0), +ADDTIME(NOW(),'06:07:21.061946'), col_time_2_not_null), +DATE ('2005-11-03'), +CURTIME(), +COALESCE(col_timestamp_4_not_null, TIMESTAMP('2003-09-10'))) +ORDER BY +col_date, +col_timestamp_1_not_null; +c1 +2002-04-08 04:39:01.993204 +2002-04-08 04:39:01.993204 +2002-04-08 04:39:01.993204 +2002-04-08 04:39:01.993204 +DROP TABLE t1; +CREATE TABLE t1 (a datetime(1)); +INSERT INTO t1 VALUES ('2006-11-14 10:22:27.009969'); +SELECT * FROM t1 +WHERE timestamp'2006-11-14 10:22:27.009969' IN (LEAST(a, MAKETIME(24,8,0))); +a +DROP TABLE t1; +SET timestamp=DEFAULT; +# +# Bug#13384069 - EMBEDED UPDATE WITH CAST AND DATETIME WITH FSP DOES NOT WORK +# +CREATE TABLE t1 ( +pk timestamp(2) NOT NULL DEFAULT '1971-01-01 00:00:00.00', +col_datetime_6 datetime(6) DEFAULT NULL, +PRIMARY KEY (pk)); +INSERT INTO t1 VALUES ('2011-11-11 17:59:41.12','1971-01-01 00:00:00.000000'); +SELECT col_datetime_6, CAST(col_datetime_6 AS DATETIME(2)) AS c1 FROM t1; +col_datetime_6 c1 +1971-01-01 00:00:00.000000 1971-01-01 00:00:00.00 +CREATE TABLE t2 AS SELECT CAST(col_datetime_6 AS DATETIME(2)) AS c1 FROM t1; +SELECT * FROM t2; +c1 +1971-01-01 00:00:00.00 +UPDATE t2 SET c1=(SELECT CAST(col_datetime_6 AS DATETIME(2)) AS c1 FROM t1); +SELECT * FROM t2; +c1 +1971-01-01 00:00:00.00 +DROP TABLE t1, t2; +CREATE TABLE t1 (a DATE); +INSERT INTO t1 VALUES ('1971-01-01'); +SELECT CAST(COALESCE(a,a) AS SIGNED) FROM t1; +CAST(COALESCE(a,a) AS SIGNED) +19710101 +SELECT CAST(COALESCE(a,a) AS CHAR) FROM t1; +CAST(COALESCE(a,a) AS CHAR) +1971-01-01 +SELECT CAST(COALESCE(a,a) AS DECIMAL(25,3)) FROM t1; +CAST(COALESCE(a,a) AS DECIMAL(25,3)) +19710101.000 +SELECT CAST(COALESCE(a,a) AS DATETIME(6)) FROM t1; +CAST(COALESCE(a,a) AS DATETIME(6)) +1971-01-01 00:00:00.000000 +SELECT CAST(COALESCE(a,a) AS TIME(6)) FROM t1; +CAST(COALESCE(a,a) AS TIME(6)) +00:00:00.000000 +SELECT ROUND(COALESCE(a,a)) FROM t1; +ROUND(COALESCE(a,a)) +19710101 +DROP TABLE t1; +CREATE TABLE t1 (a DATETIME); +INSERT INTO t1 VALUES ('1971-01-01 00:00:00'); +SELECT CAST(COALESCE(a,a) AS SIGNED) FROM t1; +CAST(COALESCE(a,a) AS SIGNED) +19710101000000 +SELECT CAST(COALESCE(a,a) AS CHAR) FROM t1; +CAST(COALESCE(a,a) AS CHAR) +1971-01-01 00:00:00 +SELECT CAST(COALESCE(a,a) AS DECIMAL(25,3)) FROM t1; +CAST(COALESCE(a,a) AS DECIMAL(25,3)) +19710101000000.000 +SELECT CAST(COALESCE(a,a) AS DATETIME(6)) FROM t1; +CAST(COALESCE(a,a) AS DATETIME(6)) +1971-01-01 00:00:00.000000 +SELECT CAST(COALESCE(a,a) AS TIME(6)) FROM t1; +CAST(COALESCE(a,a) AS TIME(6)) +00:00:00.000000 +SELECT ROUND(COALESCE(a,a)) FROM t1; +ROUND(COALESCE(a,a)) +19710101000000 +DROP TABLE t1; +# +# Bug#13383838 - DELETE DOESN'T EMPTY RECORDS WHEN CAST WITH DATETIME TYPE IN EMBEDED SELECT +# +CREATE TABLE t1 ( +pk timestamp(2) NOT NULL DEFAULT '1971-01-01 00:00:00.00', +col_datetime_6 datetime(6) DEFAULT NULL, +PRIMARY KEY (pk)); +INSERT INTO t1 VALUES ('2011-11-11 17:59:41.12','1971-01-01 00:00:00.000000'); +CREATE TABLE t2 SELECT CAST(col_datetime_6 AS DATETIME) AS c1 FROM t1; +UPDATE t2 SET c1=(SELECT CAST(col_datetime_6 AS DATETIME) AS c1 FROM t1) +WHERE c1 IN (SELECT CAST(col_datetime_6 AS DATETIME) AS c1 FROM t1); +SELECT * FROM t2 WHERE c1 IN (SELECT CAST( col_datetime_6 AS DATETIME ) AS c1 FROM t1); +c1 +1971-01-01 00:00:00 +DELETE FROM t2 WHERE c1 IN (SELECT CAST( col_datetime_6 AS DATETIME ) AS c1 FROM t1); +SELECT COUNT(*) FROM t2; +COUNT(*) +0 +DROP TABLE t1, t2; +CREATE TABLE t1 ( +pk timestamp(2) NOT NULL DEFAULT '1971-01-01 00:00:00.00', +col_date date DEFAULT NULL, +PRIMARY KEY (pk)); +INSERT INTO t1 VALUES ('2011-11-11 17:59:41.12','1971-01-01'); +CREATE TABLE t2 SELECT CAST(col_date AS DATE) AS c1 FROM t1; +UPDATE t2 SET c1=(SELECT CAST(col_date AS DATE) AS c1 FROM t1) +WHERE c1 IN (SELECT CAST(col_date AS DATE) AS c1 FROM t1); +SELECT * FROM t2 WHERE c1 IN (SELECT CAST(col_date AS DATE) AS c1 FROM t1); +c1 +1971-01-01 +DELETE FROM t2 WHERE c1 IN (SELECT CAST(col_date AS DATE) AS c1 FROM t1); +SELECT COUNT(*) FROM t2; +COUNT(*) +0 +DROP TABLE t1, t2; +# +# Bug#13392141 ASSERT FAILURE IN SEC_SINCE_EPOCH +# +SELECT CONVERT_TZ(TIMESTAMP'2021-01-01 00:00:00', '+00:00', '+7:5'); +CONVERT_TZ(TIMESTAMP'2021-01-01 00:00:00', '+00:00', '+7:5') +2021-01-01 07:05:00 +SELECT CONVERT_TZ(DATE'2021-01-01', '+00:00', '+7:5'); +CONVERT_TZ(DATE'2021-01-01', '+00:00', '+7:5') +2021-01-01 07:05:00 +SELECT CONVERT_TZ(GREATEST(DATE('2021-01-01'),DATE('2021-01-01')),'+00:00','+7:5'); +CONVERT_TZ(GREATEST(DATE('2021-01-01'),DATE('2021-01-01')),'+00:00','+7:5') +2021-01-01 07:05:00 +SET timestamp=UNIX_TIMESTAMP('2011-11-16 17:28:30'); +DROP TABLE IF EXISTS t1; +Warnings: +Note 1051 Unknown table 'test.t1' +CREATE TABLE t1 ( +col_timestamp_2_not_null_key timestamp(2) NULL DEFAULT '1971-01-01 00:00:00.00', +pk time NOT NULL DEFAULT '00:00:00', +PRIMARY KEY (pk), +KEY col_timestamp_2_not_null_key (col_timestamp_2_not_null_key)); +INSERT INTO t1 VALUES ('1971-01-01 00:00:00.00','18:49:56'); +INSERT INTO t1 VALUES ('1971-01-01 00:00:00.00','18:49:58'); +INSERT INTO t1 VALUES ('1971-01-01 00:00:00.00','18:50:00'); +INSERT INTO t1 VALUES ('1971-01-01 00:00:00.00','18:50:02'); +INSERT INTO t1 VALUES ('1971-01-01 00:00:00.00','18:50:03'); +INSERT INTO t1 VALUES ('1971-01-01 00:00:00.00','18:50:05'); +INSERT INTO t1 VALUES ('1971-01-01 00:00:00.00','18:50:12'); +INSERT INTO t1 VALUES ('1971-01-01 00:00:00.00','18:50:14'); +INSERT INTO t1 VALUES ('1971-01-01 00:00:00.00','18:50:18'); +INSERT INTO t1 VALUES ('1971-01-01 00:00:00.00','18:50:19'); +INSERT INTO t1 VALUES ('1971-01-01 00:00:00.00','18:50:23'); +INSERT INTO t1 VALUES ('1971-01-01 00:00:00.00','18:50:24'); +INSERT INTO t1 VALUES ('1971-01-01 00:00:00.00','18:50:28'); +INSERT INTO t1 VALUES ('1971-01-01 00:00:00.00','18:50:30'); +INSERT INTO t1 VALUES ('1971-01-01 00:00:00.00','18:50:34'); +INSERT INTO t1 VALUES ('1971-01-01 00:00:00.00','18:50:35'); +INSERT INTO t1 VALUES ('1971-01-01 00:00:00.00','18:50:37'); +INSERT INTO t1 VALUES ('1971-01-01 00:00:00.00','18:50:38'); +INSERT INTO t1 VALUES ('1971-01-01 00:00:00.00','18:50:46'); +INSERT INTO t1 VALUES ('1971-01-01 00:00:00.00','18:50:47'); +INSERT INTO t1 VALUES ('1971-01-01 00:00:00.00','18:50:50'); +INSERT INTO t1 VALUES ('1971-01-01 00:00:00.00','18:50:52'); +INSERT INTO t1 VALUES ('2000-05-24 21:00:00.00','18:50:11'); +INSERT INTO t1 VALUES ('2000-08-09 13:04:19.05','18:50:32'); +INSERT INTO t1 VALUES ('2000-10-05 09:01:10.01','18:50:42'); +INSERT INTO t1 VALUES ('2000-12-08 03:00:13.05','18:50:04'); +INSERT INTO t1 VALUES ('2001-03-02 07:52:23.01','18:50:44'); +INSERT INTO t1 VALUES ('2001-04-24 10:01:32.05','18:50:49'); +INSERT INTO t1 VALUES ('2003-02-18 14:31:23.06','18:50:39'); +INSERT INTO t1 VALUES ('2003-03-07 21:00:00.00','18:50:29'); +INSERT INTO t1 VALUES ('2003-04-16 21:00:00.00','18:50:17'); +INSERT INTO t1 VALUES ('2003-08-10 21:00:00.00','18:50:36'); +INSERT INTO t1 VALUES ('2003-11-24 06:30:37.06','18:49:53'); +INSERT INTO t1 VALUES ('2003-12-01 21:00:00.00','18:50:41'); +INSERT INTO t1 VALUES ('2004-05-16 19:56:24.05','18:50:31'); +INSERT INTO t1 VALUES ('2004-05-27 18:45:05.06','18:50:08'); +INSERT INTO t1 VALUES ('2004-06-05 22:51:19.04','18:50:20'); +INSERT INTO t1 VALUES ('2004-10-16 21:00:00.00','18:49:54'); +INSERT INTO t1 VALUES ('2004-11-02 21:00:00.00','18:50:51'); +INSERT INTO t1 VALUES ('2005-02-23 00:35:02.05','18:50:07'); +INSERT INTO t1 VALUES ('2005-08-15 16:33:48.01','18:50:43'); +INSERT INTO t1 VALUES ('2006-03-14 21:15:50.03','18:50:33'); +INSERT INTO t1 VALUES ('2006-04-24 18:46:21.06','18:50:01'); +INSERT INTO t1 VALUES ('2006-05-14 01:54:29.01','18:50:40'); +INSERT INTO t1 VALUES ('2006-08-23 22:33:51.02','18:50:06'); +INSERT INTO t1 VALUES ('2006-11-15 02:06:29.02','18:49:59'); +INSERT INTO t1 VALUES ('2006-11-28 11:32:09.03','18:50:15'); +INSERT INTO t1 VALUES ('2007-01-19 18:45:01.00','18:50:25'); +INSERT INTO t1 VALUES ('2007-01-23 18:04:25.01','18:50:27'); +INSERT INTO t1 VALUES ('2007-06-20 18:42:45.01','18:50:48'); +INSERT INTO t1 VALUES ('2007-08-27 21:00:00.00','18:50:22'); +INSERT INTO t1 VALUES ('2007-10-11 09:54:15.02','18:50:45'); +INSERT INTO t1 VALUES ('2008-01-24 18:55:00.04','18:50:10'); +INSERT INTO t1 VALUES ('2008-03-03 16:06:21.03','18:50:16'); +INSERT INTO t1 VALUES ('2008-03-23 21:00:00.00','18:50:26'); +INSERT INTO t1 VALUES ('2008-05-28 10:12:34.06','18:49:57'); +INSERT INTO t1 VALUES ('2009-06-09 21:31:23.04','18:50:21'); +INSERT INTO t1 VALUES ('2009-06-14 09:15:36.06','18:50:09'); +INSERT INTO t1 VALUES ('2009-06-30 23:31:57.01','18:49:55'); +INSERT INTO t1 VALUES ('2009-12-25 17:54:17.00','18:50:13'); +INSERT INTO t1 VALUES ('2005-12-15 18:49:06.05','00:00:00'); +SELECT col_timestamp_2_not_null_key +FROM t1 +WHERE CONVERT_TZ(GREATEST('2005-11-05 18:16:50.055749', STR_TO_DATE(CURRENT_TIME, '%Y')), +'+00:00', CONCAT('+', CONCAT_WS(':', 7, 5))); +col_timestamp_2_not_null_key +Warnings: +Warning 1292 Truncated incorrect date value: '17:28:30' +Warning 1411 Incorrect datetime value: '17:28:30' for function str_to_date +Warning 1292 Truncated incorrect date value: '17:28:30' +Warning 1411 Incorrect datetime value: '17:28:30' for function str_to_date +DROP TABLE t1; +SET timestamp=DEFAULT; +# +# Bug#13365131 - VALGRIND: CONDITIONAL JUMP OR MOVE DEPENDS ON UNINITIALISED IN MY_TIME_COMPARE +# +CREATE TABLE t1 ( +col_time_not_null_key time not null, +col_timestamp_6_not_null_key timestamp(6) not null NULL DEFAULT '1971-01-01 00:00:00', +col_datetime_6_not_null_key datetime(6) not null, +col_datetime_6_key datetime(6), +col_time_3_not_null_key time(3) not null, +col_datetime_3_key datetime(3), +key (col_datetime_6_not_null_key), +key (col_datetime_3_key)) ENGINE=innodb; +CREATE OR REPLACE VIEW v1 AS SELECT * FROM t1; +SELECT col_datetime_3_key AS c1 FROM v1 +WHERE SYSDATE() IS NULL +OR col_datetime_6_not_null_key < TIMEDIFF('1971-01-01','2002-11-24' ) +AND col_timestamp_6_not_null_key IS NULL; +c1 +Warnings: +Warning 1292 Truncated incorrect time value: '1971-01-01' +Warning 1292 Truncated incorrect time value: '1971-01-01' +Warning 1292 Truncated incorrect time value: '1971-01-01' +DROP VIEW v1; +DROP TABLE t1; +# +# Bug#13401354 ITEM->FIELD_TYPE() == MYSQL_TYPE_TIME || ITEM->FIELD_TYPE() == MYSQL_TYPE_NULL +# +CREATE TABLE t1 (col_time_not_null TIME NOT NULL); +SELECT * FROM t1 +WHERE col_time_not_null = DATE(NULL) AND col_time_not_null = TIME(NULL); +col_time_not_null +DROP TABLE t1; +CREATE TABLE t1 ( +col_date DATE, +col_time_not_null TIME not null, +pk TIMESTAMP(6), +col_timestamp_3_not_null_key TIMESTAMP(3) NOT NULL DEFAULT '1971-01-01 00:00:00', +col_date_not_null DATE NOT NULL, +col_time_3_key TIME(3), +col_timestamp_6_key TIMESTAMP(6) NOT NULL DEFAULT '1971-01-01 00:00:00', +col_datetime DATETIME, +col_datetime_6 DATETIME(6), +col_timestamp_3_key TIMESTAMP(3) NOT NULL DEFAULT '1971-01-01 00:00:00', +col_time_6_not_null TIME(6) NOT NULL, +col_time_6 TIME(6), +col_time_6_not_null_key TIME(6) NOT NULL, +col_datetime_not_null DATETIME NOT NULL, +col_datetime_3_not_null_key DATETIME(3) NOT NULL, +KEY (col_datetime_3_not_null_key)); +SELECT col_time_6 AS c1, NOW() AS c2 FROM t1 +WHERE +col_datetime_not_null BETWEEN SUBTIME('1971-01-01','00:00:00') AND col_date_not_null +AND +col_time_not_null=STR_TO_DATE(DATE_FORMAT(TIME('00:00:00.000000'),CONCAT_WS('-','%s','%k' )),CONCAT_WS(':','%i','%M')) +AND +col_date BETWEEN UNIX_TIMESTAMP('1971-01-01 00:00:00') AND col_timestamp_3_key +AND +col_datetime_6 NOT IN (col_time_6_not_null,'1971-01-01') +AND +col_time_not_null = TIMEDIFF(CURDATE(),'00:00:00.000000') +AND +col_time_3_key NOT IN (col_timestamp_6_key,pk) +AND +col_timestamp_3_not_null_key < col_datetime; +c1 c2 +Warnings: +Warning 1411 Incorrect datetime value: '00-0' for function str_to_date +Warning 1411 Incorrect datetime value: '00-0' for function str_to_date +Warning 1292 Incorrect date value: '31525200' for column 'col_date' at row 1 +Warning 1292 Incorrect datetime value: '00:00:00.000000' +Warning 1292 Incorrect datetime value: '00:00:00.000000' +DROP TABLE t1; +# +# Bug#13399082 - ASSERTION `MON > 0 && MON < 13' FAILED IN TZTIME.CC | SEC_SINCE_EPOCH +# +SET TIME_ZONE='+02:00'; +SELECT UNIX_TIMESTAMP(STR_TO_DATE('2020','%Y')); +UNIX_TIMESTAMP(STR_TO_DATE('2020','%Y')) +NULL +Warnings: +Warning 1411 Incorrect datetime value: '2020' for function str_to_date +SET TIME_ZONE=DEFAULT; +# This should return NULL +CREATE TABLE t1 (a INT); +INSERT INTO t1 VALUES(NULL); +SELECT UNIX_TIMESTAMP(a) FROM t1; +UNIX_TIMESTAMP(a) +NULL +DROP TABLE t1; +SELECT UNIX_TIMESTAMP(NULL); +UNIX_TIMESTAMP(NULL) +NULL +SELECT UNIX_TIMESTAMP(DATE(NULL)); +UNIX_TIMESTAMP(DATE(NULL)) +NULL +SELECT UNIX_TIMESTAMP(TIME(NULL)); +UNIX_TIMESTAMP(TIME(NULL)) +NULL +SELECT UNIX_TIMESTAMP(TIMESTAMP(NULL)); +UNIX_TIMESTAMP(TIMESTAMP(NULL)) +NULL +SELECT CONCAT(UNIX_TIMESTAMP(NULL)); +CONCAT(UNIX_TIMESTAMP(NULL)) +NULL +SELECT CAST(UNIX_TIMESTAMP(NULL) AS SIGNED); +CAST(UNIX_TIMESTAMP(NULL) AS SIGNED) +NULL +SELECT CAST(UNIX_TIMESTAMP(NULL) AS DECIMAL(23,6)); +CAST(UNIX_TIMESTAMP(NULL) AS DECIMAL(23,6)) +NULL +# This should return 0 +CREATE TABLE t1 (a VARCHAR(30)); +INSERT INTO t1 VALUES +('0000-01-01 00:00:00'),('2001-00-01 00:00:01'),('2001-01-00 00:00:00'), +('1971-01-01 00:00:01'),('1971-01-01 00:00:00.1'); +SELECT UNIX_TIMESTAMP(a) FROM t1; +UNIX_TIMESTAMP(a) +0.000000 +0.000000 +0.000000 +31525201.000000 +31525200.100000 +DROP TABLE t1; +SELECT UNIX_TIMESTAMP('0000-01-01 00:00:00'); +UNIX_TIMESTAMP('0000-01-01 00:00:00') +0 +SELECT UNIX_TIMESTAMP('2001-00-01 00:00:00'); +UNIX_TIMESTAMP('2001-00-01 00:00:00') +0 +SELECT UNIX_TIMESTAMP('2001-01-00 00:00:00'); +UNIX_TIMESTAMP('2001-01-00 00:00:00') +0 +SELECT UNIX_TIMESTAMP('1971-01-01 10:10:20'); +UNIX_TIMESTAMP('1971-01-01 10:10:20') +31561820 +SELECT UNIX_TIMESTAMP('1971-01-01 00:00:00.1'); +UNIX_TIMESTAMP('1971-01-01 00:00:00.1') +31525200.1 +SELECT UNIX_TIMESTAMP(TIMESTAMP'1971-01-01 10:10:20'); +UNIX_TIMESTAMP(TIMESTAMP'1971-01-01 10:10:20') +31561820 +SELECT UNIX_TIMESTAMP(TIMESTAMP'1971-01-01 00:00:00.1'); +UNIX_TIMESTAMP(TIMESTAMP'1971-01-01 00:00:00.1') +31525200.1 +SELECT UNIX_TIMESTAMP(TIMESTAMP('1971-01-01 10:10:20')); +UNIX_TIMESTAMP(TIMESTAMP('1971-01-01 10:10:20')) +31561820 +SELECT UNIX_TIMESTAMP(TIMESTAMP('1971-01-01 00:00:00.1')); +UNIX_TIMESTAMP(TIMESTAMP('1971-01-01 00:00:00.1')) +31525200.1 +# +# Bug#13354387 - CRASH IN IN MY_DECIMAL::OPERATOR FOR VIEW AND FUNCTION UNIX_TIMESTAMP +# +SET timestamp=UNIX_TIMESTAMP('2011-11-18 14:36:00'); +CREATE TABLE t1 ( +pk time(2) NOT NULL DEFAULT '00:00:00.00', +col_timestamp_3_not_null timestamp(3) NULL DEFAULT '1971-01-01 00:00:00.000', +col_datetime_1_key datetime(1) DEFAULT NULL, +col_datetime_6_not_null_key datetime(6) NOT NULL, +col_datetime_2_not_null datetime(2) NOT NULL, +PRIMARY KEY (pk), +KEY col_datetime_1_key (col_datetime_1_key), +KEY col_datetime_6_not_null_key (col_datetime_6_not_null_key)) +ENGINE=MyISAM DEFAULT CHARSET=latin1; +INSERT INTO t1 VALUES ('19:14:35.36','1971-01-01 00:00:00.000','1971-01-01 00:00:00.0','2000-08-28 07:34:20.051690','2009-09-20 07:32:39.06'); +INSERT INTO t1 VALUES ('19:14:37.36','2005-07-04 08:03:50.051','1971-01-01 00:00:00.0','1971-01-01 00:00:00.000000','1971-01-01 00:00:00.00'); +INSERT INTO t1 VALUES ('19:14:39.36','1971-01-01 00:00:00.000',NULL,'2005-10-11 07:24:45.059064','2009-11-19 00:00:00.00'); +INSERT INTO t1 VALUES ('19:14:41.36','2005-11-22 21:00:00.000',NULL,'1971-01-01 00:00:00.000000','1971-01-01 00:00:00.00'); +INSERT INTO t1 VALUES ('19:14:43.36','2009-11-06 21:00:00.000','2007-07-03 11:13:08.0','2002-09-02 00:17:37.037583','2003-09-25 09:29:41.00'); +INSERT INTO t1 VALUES ('19:14:36.36','2009-08-15 05:43:18.029','2009-01-18 00:00:00.0','1971-01-01 00:00:00.000000','2007-07-20 08:31:37.02'); +INSERT INTO t1 VALUES ('19:14:38.36','1971-01-01 00:00:00.000','1971-01-01 00:00:00.0','1971-01-01 00:00:00.000000','2004-08-16 05:11:47.04'); +INSERT INTO t1 VALUES ('19:14:40.36','2000-04-16 21:00:00.000',NULL,'2004-04-27 00:00:00.000000','2009-06-03 00:18:49.04'); +INSERT INTO t1 VALUES ('19:14:42.36','2009-01-18 20:46:41.035','2003-03-23 11:37:04.0','1971-01-01 00:00:00.000000','2009-12-26 00:00:00.00'); +INSERT INTO t1 VALUES ('19:14:44.36','1971-01-01 00:00:00.000','1971-01-01 00:00:00.0','2005-09-14 15:13:53.062460','1971-01-01 00:00:00.00'); +CREATE OR REPLACE VIEW v1 AS SELECT * FROM t1; +SELECT UNIX_TIMESTAMP(col_datetime_2_not_null) AS c1 +FROM v1 +WHERE col_datetime_6_not_null_key > col_datetime_1_key +AND col_timestamp_3_not_null IS NOT NULL +ORDER BY 1; +c1 +31525200.00 +1253421159.06 +DROP VIEW v1; +DROP TABLE t1; +SET timestamp=DEFAULT; +# +# Bug#13394031 VALGRIND: CONDITIONAL JUMP/MOVE DEPENDS ON UNINITIALISED IN FIELD::IS_REAL_NULL +# +CREATE TABLE t1 ( +pk time, +c_timestamp timestamp NULL DEFAULT '1971-01-01 00:00:00', +c_time time, +primary key (pk), +key (c_timestamp) +) ENGINE=INNODB; +INSERT INTO t1 VALUES +(SEC_TO_TIME(2),'20000627024305.040518','00:00:00.000000'), +(SEC_TO_TIME(4),'1971-01-01','20010412233415.034269'), +(SEC_TO_TIME(46),'20030628121312.000376','20020323065409.039577'), +(SEC_TO_TIME(48),'20071219173306.048009',NULL), +(SEC_TO_TIME(50),'1971-01-01',NULL); +Warnings: +Note 1292 Incorrect time value: '20010412233415.034269' for column 'c_time' at row 2 +Note 1292 Incorrect time value: '20020323065409.039577' for column 'c_time' at row 3 +SELECT c_time FROM t1; +c_time +00:00:00 +23:34:15 +06:54:09 +NULL +NULL +SELECT c_time AS c1 FROM t1 +WHERE c_timestamp NOT IN (NULL, '1971-01-01 00:00:00'); +c1 +DROP TABLE t1; +# +# Various tests for better gcov coverage +# +# +# Comparing DATETIME value to TIME(NULL) +# +SELECT TIMESTAMP'2001-01-01 00:00:00' = TIME(NULL); +TIMESTAMP'2001-01-01 00:00:00' = TIME(NULL) +NULL +SELECT SEC_TO_TIME(3200399.999999); +SEC_TO_TIME(3200399.999999) +838:59:59.000000 +Warnings: +Warning 1292 Truncated incorrect time value: '3200399.999999' +SELECT SEC_TO_TIME(3200399.000001); +SEC_TO_TIME(3200399.000001) +838:59:59.000000 +Warnings: +Warning 1292 Truncated incorrect time value: '3200399.000001' +SELECT SEC_TO_TIME(-3200399.999999); +SEC_TO_TIME(-3200399.999999) +-838:59:59.000000 +Warnings: +Warning 1292 Truncated incorrect time value: '-3200399.999999' +SELECT SEC_TO_TIME(-3200399.000001); +SEC_TO_TIME(-3200399.000001) +-838:59:59.000000 +Warnings: +Warning 1292 Truncated incorrect time value: '-3200399.000001' +# +# BUG#13451866 - DIFFERENCE IN RESULTS WHEN USING +# EXTRACT( MINUTE_MICROSECOND ) +# +CREATE TABLE t1 (a DATETIME(6) DEFAULT NULL); +INSERT INTO t1 VALUES ('1971-01-01 00:00:00.000000'); +SELECT * FROM t1; +a +1971-01-01 00:00:00.000000 +SELECT EXTRACT(MINUTE_MICROSECOND FROM a) FROM t1; +EXTRACT(MINUTE_MICROSECOND FROM a) +0 +SELECT EXTRACT(MINUTE_MICROSECOND FROM '1971-01-01 00:00:00.000000'); +EXTRACT(MINUTE_MICROSECOND FROM '1971-01-01 00:00:00.000000') +0 +DROP TABLE t1; +# +# BUG#13436875 - ASSERTION '!ARGS[0]->IS_TEMPORAL() || +# !ARGS[1]->IS_TEMPORAL()' +# +CREATE TABLE t1 (a DATETIME NOT NULL); +SELECT 1 FROM t1 WHERE GREATEST(a, a) / a; +1 +SELECT 1 FROM t1 WHERE LEAST(a, a) / a; +1 +SELECT 1 FROM t1 WHERE COALESCE(a, a) / a; +1 +SELECT 1 FROM t1 WHERE IF(0, a, a) / a; +1 +SELECT 1 FROM t1 WHERE IFNULL(a, a) / a; +1 +SELECT 1 FROM t1 WHERE CASE WHEN 0 then a ELSE a END / a; +1 +SELECT 1 FROM t1 WHERE (SELECT a FROM t1) / a; +1 +DROP TABLE t1; +# +# BUG#13616434 ASSERTION FAILED: NANOSECONDS < 1000000000 +# +SELECT +EXTRACT(DAY FROM (-0.1111111111)), +EXTRACT(YEAR FROM (-0.1111111)), +EXTRACT(YEAR_MONTH FROM (-0.1111111111)), +EXTRACT(DAY FROM (-0.1111111)), +EXTRACT(QUARTER FROM (-0.1111111111)), +EXTRACT(MONTH FROM (-0.1111111)), +EXTRACT(WEEK FROM (-0.1111111)), +DATE(-0.1111111), +QUARTER(-0.1111111111), +TIMESTAMP(-0.1111111111), +LAST_DAY(-0.1111111111), +DAY(-0.1111111111), +MONTH(-0.1111111111), +YEAR(-0.1111111), +DAYOFMONTH(-0.1111111111), +TIMESTAMP((-0.1111111111),'{$x'), +DATE_FORMAT(-0.1111111111,'+'), +CONVERT(-0.1111111,DATE), +CAST(-0.1111111111 AS DATE); +EXTRACT(DAY FROM (-0.1111111111)) EXTRACT(YEAR FROM (-0.1111111)) EXTRACT(YEAR_MONTH FROM (-0.1111111111)) EXTRACT(DAY FROM (-0.1111111)) EXTRACT(QUARTER FROM (-0.1111111111)) EXTRACT(MONTH FROM (-0.1111111)) EXTRACT(WEEK FROM (-0.1111111)) DATE(-0.1111111) QUARTER(-0.1111111111) TIMESTAMP(-0.1111111111) LAST_DAY(-0.1111111111) DAY(-0.1111111111) MONTH(-0.1111111111) YEAR(-0.1111111) DAYOFMONTH(-0.1111111111) TIMESTAMP((-0.1111111111),'{$x') DATE_FORMAT(-0.1111111111,'+') CONVERT(-0.1111111,DATE) CAST(-0.1111111111 AS DATE) +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL +Warnings: +Warning 1292 Incorrect datetime value: '-0.1111111111' +Warning 1292 Incorrect datetime value: '-0.1111111' +Warning 1292 Incorrect datetime value: '-0.1111111111' +Warning 1292 Incorrect datetime value: '-0.1111111' +Warning 1292 Incorrect datetime value: '-0.1111111111' +Warning 1292 Incorrect datetime value: '-0.1111111' +Warning 1292 Incorrect datetime value: '-0.1111111' +Warning 1292 Incorrect datetime value: '-0.1111111' +Warning 1292 Incorrect datetime value: '-0.1111111111' +Warning 1292 Incorrect datetime value: '-0.1111111111' +Warning 1292 Incorrect datetime value: '-0.1111111111' +Warning 1292 Incorrect datetime value: '-0.1111111111' +Warning 1292 Incorrect datetime value: '-0.1111111111' +Warning 1292 Incorrect datetime value: '-0.1111111' +Warning 1292 Incorrect datetime value: '-0.1111111111' +Warning 1292 Incorrect datetime value: '-0.1111111111' +Warning 1292 Incorrect datetime value: '-0.1111111111' +Warning 1292 Incorrect datetime value: '-0.1111111' +Warning 1292 Incorrect datetime value: '-0.1111111111' +# +# Bug#13375823 - FSP(DECIMAL) RESULT DIFFERENCE WITH QUERY USING UNION ALL +# +CREATE TABLE t1 (a DATETIME(3) NOT NULL); +INSERT INTO t1 VALUES ('2000-07-16 05:58:04.035'); +INSERT INTO t1 VALUES ('2008-08-21 00:00:00.000'); +INSERT INTO t1 VALUES ('1971-01-01 00:00:00.000'); +# Testing INT number +SELECT GREATEST(a, 1323) FROM t1; +GREATEST(a, 1323) +20000716055804.035 +20080821000000.000 +19710101000000.000 +(SELECT GREATEST(a, 1323) FROM t1) UNION ALL (SELECT GREATEST(a, 1323) FROM t1 LIMIT 0); +GREATEST(a, 1323) +20000716055804.035 +20080821000000.000 +19710101000000.000 +SELECT LEAST(a, 1323) FROM t1; +LEAST(a, 1323) +1323.000 +1323.000 +1323.000 +(SELECT LEAST(a, 1323) FROM t1) UNION ALL (SELECT LEAST(a, 1323) FROM t1 LIMIT 0); +LEAST(a, 1323) +1323.000 +1323.000 +1323.000 +# Testing DECIMAL number +SELECT GREATEST(a, 1323.123456) FROM t1; +GREATEST(a, 1323.123456) +20000716055804.035000 +20080821000000.000000 +19710101000000.000000 +(SELECT GREATEST(a, 1323.123456) FROM t1) UNION ALL (SELECT GREATEST(a, 1323.123456) FROM t1 LIMIT 0); +GREATEST(a, 1323.123456) +20000716055804.035000 +20080821000000.000000 +19710101000000.000000 +SELECT LEAST(a, 1323.123456) FROM t1; +LEAST(a, 1323.123456) +1323.123456 +1323.123456 +1323.123456 +(SELECT LEAST(a, 1323.123456) FROM t1) UNION ALL (SELECT LEAST(a, 1323.123456) FROM t1 LIMIT 0); +LEAST(a, 1323.123456) +1323.123456 +1323.123456 +1323.123456 +# Testing REAL number +SELECT GREATEST(a, 1323e0) FROM t1; +GREATEST(a, 1323e0) +20000716055804.035 +20080821000000 +19710101000000 +(SELECT GREATEST(a, 1323e0) FROM t1) UNION ALL (SELECT GREATEST(a, 1323e0) FROM t1 LIMIT 0); +GREATEST(a, 1323e0) +20000716055804.035 +20080821000000 +19710101000000 +SELECT LEAST(a, 1323e0) FROM t1; +LEAST(a, 1323e0) +1323 +1323 +1323 +(SELECT LEAST(a, 1323e0) FROM t1) UNION ALL (SELECT LEAST(a, 1323e0) FROM t1 LIMIT 0); +LEAST(a, 1323e0) +1323 +1323 +1323 +DROP TABLE t1; +# Make sure precision of 6 fractional digits does not get lost +CREATE TABLE t1 (a DATETIME(6)); +INSERT INTO t1 VALUES ('2001-01-01 01:01:01.123456'); +SELECT GREATEST(a,10), LEAST(a,10) FROM t1; +GREATEST(a,10) LEAST(a,10) +20010101010101.123456 10.000000 +DROP TABLE t1; +# +# Bug#13976233 ASSERTION FAILED: !CHECK_TIME_MMSSFF_RANGE(LTIME), FILE SQL_TIME.CC, LINE 304 +# +SELECT SECOND(4.99999999991e0); +SECOND(4.99999999991e0) +5 +SELECT SECOND(-4.99999999991e0); +SECOND(-4.99999999991e0) +5 +SELECT SECOND(TRUNCATE('5',180)); +SECOND(TRUNCATE('5',180)) +5 +# +# Bug#17080703 INCONSISTENT DATETIME CONVERSIONS WITH FRACTIONAL SECONDS +# +# Test for TIMESTAMP datatype. +SELECT TIMESTAMP '20130710010203'; +TIMESTAMP '20130710010203' +2013-07-10 01:02:03 +SELECT TIMESTAMP '201307100102031'; +ERROR HY000: Incorrect DATETIME value: '201307100102031' +SELECT TIMESTAMP '2013071001020312'; +ERROR HY000: Incorrect DATETIME value: '2013071001020312' +SELECT TIMESTAMP '20130710010203123'; +ERROR HY000: Incorrect DATETIME value: '20130710010203123' +SELECT TIMESTAMP '201307100102031234'; +ERROR HY000: Incorrect DATETIME value: '201307100102031234' +SELECT TIMESTAMP '2013071001020312345'; +ERROR HY000: Incorrect DATETIME value: '2013071001020312345' +SELECT TIMESTAMP '20130710010203123456'; +ERROR HY000: Incorrect DATETIME value: '20130710010203123456' +# Test non decimal point as delimiter for fractional seconds. +SELECT TIMESTAMP '2013:07:10 01:02:03:04'; +ERROR HY000: Incorrect DATETIME value: '2013:07:10 01:02:03:04' +# Test for invalid seconds >= 60 properly separated by decimal point with fractions. +SELECT TIMESTAMP '2013:07:10 01.02.131'; +ERROR HY000: Incorrect DATETIME value: '2013:07:10 01.02.131' +SELECT TIMESTAMP '2013:07:10 01.02.131.2'; +ERROR HY000: Incorrect DATETIME value: '2013:07:10 01.02.131.2' +SELECT TIMESTAMP '2013:07:10 01.02.0312.3'; +ERROR HY000: Incorrect DATETIME value: '2013:07:10 01.02.0312.3' +SELECT TIMESTAMP '2013.07.10 01.02.131.23456'; +ERROR HY000: Incorrect DATETIME value: '2013.07.10 01.02.131.23456' +SELECT TIMESTAMP '201307100102031.'; +ERROR HY000: Incorrect DATETIME value: '201307100102031.' +SELECT TIMESTAMP '2012071001021.1'; +ERROR HY000: Incorrect DATETIME value: '2012071001021.1' +# Test for valid seconds properly separated by decimal point with fractions. +SELECT TIMESTAMP '2013:07:10 01.02.0.31'; +TIMESTAMP '2013:07:10 01.02.0.31' +2013-07-10 01:02:00.31 +SELECT TIMESTAMP '20130710010203.'; +TIMESTAMP '20130710010203.' +2013-07-10 01:02:03 +# Test for valid seconds properly separated by decimal point with fractions. +SELECT TIMESTAMP '20130710010203.1'; +TIMESTAMP '20130710010203.1' +2013-07-10 01:02:03.1 +SELECT TIMESTAMP '20130710010203.12'; +TIMESTAMP '20130710010203.12' +2013-07-10 01:02:03.12 +SELECT TIMESTAMP '20130710010203.123'; +TIMESTAMP '20130710010203.123' +2013-07-10 01:02:03.123 +SELECT TIMESTAMP '20130710010203.1234'; +TIMESTAMP '20130710010203.1234' +2013-07-10 01:02:03.1234 +SELECT TIMESTAMP '20130710010203.12345'; +TIMESTAMP '20130710010203.12345' +2013-07-10 01:02:03.12345 +SELECT TIMESTAMP '20130710010203.123456'; +TIMESTAMP '20130710010203.123456' +2013-07-10 01:02:03.123456 +SELECT TIMESTAMP '20130710010203.1234567'; +TIMESTAMP '20130710010203.1234567' +2013-07-10 01:02:03.123457 +# Test for valid time literals in insert operation. +CREATE TABLE t(key1 INT UNIQUE, col TIMESTAMP(6)); +INSERT INTO t VALUES (1, '20130710010203.1'), (2, '20130710010203.12'), (3, '20130710010203.123'), (4, '20130710010203.1234'), +(5,'20130710010203.12345'), (6, '20130710010203.123456'), (7, '201207100102'); +SELECT * FROM t ORDER BY key1; +key1 col +1 2013-07-10 01:02:03.100000 +2 2013-07-10 01:02:03.120000 +3 2013-07-10 01:02:03.123000 +4 2013-07-10 01:02:03.123400 +5 2013-07-10 01:02:03.123450 +6 2013-07-10 01:02:03.123456 +7 2020-12-07 10:01:02.000000 +DELETE FROM t; +# Test for invalid time literals in insert operation. +INSERT INTO t VALUES (1, '201307100102031'), (2, '2013071001020312'), (3, '20130710010203123'), (4, '201307100102031234'), +(5, '2013071001020312345'), (6, '20130710010203123456'), (7, '2013:07:10 01.02.031'), (8, '2013:07:10 01.02.031.2'), +(9, '2013:07:10 01.02.0312.3'), (10, '2012071001021.1'), (11, '2012071001021'); +ERROR 22007: Incorrect datetime value: '201307100102031' for column 'col' at row 1 +SELECT * FROM t ORDER BY key1; +key1 col +DROP TABLE t; +# Test for DATETIME datatype. +# Test for valid time literals in insert operation. +CREATE TABLE t(key1 INT UNIQUE, col DATETIME(6)); +INSERT INTO t VALUES (1, '20130710010203.1'), (2, '20130710010203.12'), (3, '20130710010203.123'), (4, '20130710010203.1234'), +(5, '20130710010203.12345'), (6, '20130710010203.123456'), (7, '201207100102'); +SELECT * FROM t ORDER BY key1; +key1 col +1 2013-07-10 01:02:03.100000 +2 2013-07-10 01:02:03.120000 +3 2013-07-10 01:02:03.123000 +4 2013-07-10 01:02:03.123400 +5 2013-07-10 01:02:03.123450 +6 2013-07-10 01:02:03.123456 +7 2020-12-07 10:01:02.000000 +DELETE FROM t; +# Test for invalid time literals in insert operation. +INSERT INTO t VALUES (1, '201307100102031'), (2, '2013071001020312'), (3, '20130710010203123'), (4, '201307100102031234'), +(5, '2013071001020312345'), (6, '20130710010203123456'), (7, '2013:07:10 01.02.031'), (8, '2013:07:10 01.02.031.2'), +(9, '2013:07:10 01.02.0312.3'), (10, '2012071001021.1'), (11, '2012071001021'); +ERROR 22007: Incorrect datetime value: '201307100102031' for column 'col' at row 1 +SELECT * FROM t ORDER BY key1; +key1 col +DROP TABLE t; +# Test for TIME datatype. +SELECT TIME '010203'; +TIME '010203' +01:02:03 +SELECT TIME '1010203'; +TIME '1010203' +101:02:03 +SELECT TIME '01010203'; +TIME '01010203' +101:02:03 +SELECT TIME '10102031'; +ERROR HY000: Incorrect TIME value: '10102031' +SELECT TIME '101020312'; +ERROR HY000: Incorrect TIME value: '101020312' +SELECT TIME '1010203123'; +ERROR HY000: Incorrect TIME value: '1010203123' +SELECT TIME '10102031234'; +ERROR HY000: Incorrect TIME value: '10102031234' +SELECT TIME '101020312345'; +ERROR HY000: Incorrect TIME value: '101020312345' +SELECT TIME '1010203123456'; +ERROR HY000: Incorrect TIME value: '1010203123456' +# Test non decimal point as delimiter for fractional seconds. +SELECT TIME '01:02:03:04'; +ERROR HY000: Incorrect TIME value: '01:02:03:04' +# Test for invalid seconds >= 60 properly separated by decimal point with fractions. +SELECT TIME '01:02:131'; +ERROR HY000: Incorrect TIME value: '01:02:131' +SELECT TIME '01:02:131.2'; +ERROR HY000: Incorrect TIME value: '01:02:131.2' +SELECT TIME '01:02:0312.3'; +ERROR HY000: Incorrect TIME value: '01:02:0312.3' +SELECT TIME '01:02:131.23456'; +ERROR HY000: Incorrect TIME value: '01:02:131.23456' +SELECT TIME '11102031.'; +ERROR HY000: Incorrect TIME value: '11102031.' +# Test for valid seconds properly separated by decimal point with fractions. +SELECT TIME '01:02:0.31'; +TIME '01:02:0.31' +01:02:00.31 +SELECT TIME '010203.'; +TIME '010203.' +01:02:03 +# Test for valid seconds properly separated by decimal point with fractions. +SELECT TIME '110203.1'; +TIME '110203.1' +11:02:03.1 +SELECT TIME '010203.12'; +TIME '010203.12' +01:02:03.12 +SELECT TIME '010203.123'; +TIME '010203.123' +01:02:03.123 +SELECT TIME '010203.1234'; +TIME '010203.1234' +01:02:03.1234 +SELECT TIME '010203.12345'; +TIME '010203.12345' +01:02:03.12345 +SELECT TIME '010203.123456'; +TIME '010203.123456' +01:02:03.123456 +SELECT TIME '010203.1234567'; +TIME '010203.1234567' +01:02:03.123457 +SELECT TIME '01021.1'; +TIME '01021.1' +00:10:21.1 +# Test for valid time literals in insert operation. +CREATE TABLE t(key1 INT UNIQUE, col TIME(6)); +INSERT INTO t VALUES (1, '010203.1'), (2, '010203.12'), (3, '010203.123'), (4, '010203.1234'), +(5, '010203.12345'), (6, '010203.123456'), (7, '0203.123456'), (8, '03.123456'), (9, '0.123456'); +SELECT * FROM t ORDER BY key1; +key1 col +1 01:02:03.100000 +2 01:02:03.120000 +3 01:02:03.123000 +4 01:02:03.123400 +5 01:02:03.123450 +6 01:02:03.123456 +7 00:02:03.123456 +8 00:00:03.123456 +9 00:00:00.123456 +DELETE FROM t; +# Test for invalid time literals in insert operation. +INSERT INTO t VALUES (1, '0102031'), (2, '01020312'), (3, '010203123'), (4, '0102031234'), +(5, '01020312345'), (6, '010203123456'), (7, '01:02:031'), (8, '01:02:031.2'), +(9, '01:02:0312.3'); +ERROR 22007: Incorrect time value: '010203123' for column 'col' at row 3 +SELECT * FROM t ORDER BY key1; +key1 col +DROP TABLE t; +# End of 5.6 tests diff --git a/mysys/my_handler_errors.h b/mysys/my_handler_errors.h index d8489217b518..6e7ac63f1b1d 100644 --- a/mysys/my_handler_errors.h +++ b/mysys/my_handler_errors.h @@ -105,7 +105,8 @@ static const char *handler_error_messages[]= "Incorrect file name", "Operation is not allowed", "Compute generate value failed", - "Destination schema does not exist" + "Destination schema does not exist", + "Partitioning can't be initialized" }; extern void my_handler_error_register(void); diff --git a/sql/CMakeLists.txt b/sql/CMakeLists.txt index a30c61a275e0..3e38e8fe1f8b 100644 --- a/sql/CMakeLists.txt +++ b/sql/CMakeLists.txt @@ -465,6 +465,17 @@ ELSE() SET(MYSQLD_SOURCE main.cc ${DTRACE_PROBES_ALL}) ENDIF() +# partition_base.cc contains c++11 code, which can be compiled on all +# platforms supported for TokuDB and MyRocks +IF (HAVE_STDCXX11) + LIST(APPEND MYSQLD_SOURCE partitioning/partition_base.cc) + ADD_COMPILE_FLAGS(partitioning/partition_base.cc + COMPILE_FLAGS -std=gnu++11 -Wno-deprecated-declarations) +ELSE () + MESSAGE(WARNING + "-std=gnu++11 support is required to build TokuDB/RocksDB native partitioning") +ENDIF () + MYSQL_ADD_EXECUTABLE(mysqld ${MYSQLD_SOURCE} DESTINATION ${INSTALL_SBINDIR} COMPONENT Server) diff --git a/sql/partitioning/partition_base.cc b/sql/partitioning/partition_base.cc new file mode 100644 index 000000000000..cca4df0d7f52 --- /dev/null +++ b/sql/partitioning/partition_base.cc @@ -0,0 +1,5467 @@ +/* + Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved. + + 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 engine need server classes (like THD etc.) which only is defined if + MYSQL_SERVER define is set! +*/ +#define MYSQL_SERVER 1 +#include "sql_parse.h" // append_file_to_dir +#include "partition_info.h" // partition_info +#include "partition_base.h" +#include "pfs_file_provider.h" +#include "mysql/psi/mysql_file.h" + +#include "sql_table.h" // tablename_to_filename +#include "key.h" // key_rec_cmp, field_unpack +#include "sql_show.h" // append_identifier +#include "sql_admin.h" // SQL_ADMIN_MSG_TEXT_SIZE +#include "myisam.h" // TT_FOR_UPGRADE +#include "sql_plugin.h" // plugin_unlock_list +#include "log.h" // sql_print_error + + +#include +#include +#include +#include + + +#include "debug_sync.h" +#ifndef DBUG_OFF +#include "sql_test.h" // print_where +#endif + +#include "pfs_file_provider.h" +#include "mysql/psi/mysql_file.h" + +using std::max; +using std::min; + + +namespace native_part { + +/* First 4 bytes in the .par file is the number of 32-bit words in the file */ +#define PAR_WORD_SIZE 4 +/* offset to the .par file checksum */ +#define PAR_CHECKSUM_OFFSET 4 +/* offset to the total number of partitions */ +#define PAR_NUM_PARTS_OFFSET 8 +/* offset to the engines array */ +#define PAR_ENGINES_OFFSET 12 +#define PARTITION_ENABLED_TABLE_FLAGS \ + (HA_FILE_BASED | HA_REC_NOT_IN_SEQ | HA_CAN_REPAIR) +#define PARTITION_DISABLED_TABLE_FLAGS \ + (HA_CAN_GEOMETRY | HA_CAN_FULLTEXT | HA_DUPLICATE_POS | \ + HA_READ_BEFORE_WRITE_REMOVAL) +/** operation names for the enum_part_operation. */ +static const char *opt_op_name[]= { + "optimize", "analyze", "check", "repair", + "assign_to_keycache", "preload_keys"}; + +/**************************************************************************** + MODULE create/delete handler object +****************************************************************************/ + +static PSI_memory_key key_memory_Partition_base_engine_array; +static PSI_memory_key key_memory_Partition_base_part_ids; +PSI_file_key key_file_Partition_base_par; + + +static void get_db_table_name_from_canonical_name(const char *canonical_name, + char * db_name_buf, + size_t db_name_buf_len, + char * table_name_buf, + size_t table_name_buf_len) +{ + DBUG_ASSERT(canonical_name); + DBUG_ASSERT(db_name_buf); + DBUG_ASSERT(db_name_buf_len); + DBUG_ASSERT(db_name_buf_len); + DBUG_ASSERT(table_name_buf); + + const char *db_name_begin= strchr(canonical_name, FN_LIBCHAR); + const char *db_name_end= strrchr(canonical_name, FN_LIBCHAR); + + DBUG_ASSERT(db_name_begin); + DBUG_ASSERT(db_name_end); + DBUG_ASSERT(db_name_begin != db_name_end); + + ++db_name_begin; + size_t db_name_size= db_name_end - db_name_begin; + + DBUG_ASSERT(db_name_size + 1 < db_name_buf_len); + + memcpy(db_name_buf, db_name_begin, db_name_size); + db_name_buf[db_name_size]= '\0'; + + const char *table_name= db_name_end + 1; + DBUG_ASSERT(*table_name); + size_t table_name_size= strlen(table_name); + DBUG_ASSERT(table_name_size + 1 < table_name_buf_len); + + memcpy(table_name_buf, table_name, table_name_size); + table_name_buf[table_name_size]= '\0'; +} + +bool get_part_str_for_path(const char *path, std::string &result) +{ + // Check for .frm file existence + MY_STAT frm_stat_info; + if (!my_stat(path, &frm_stat_info, MYF(0))) + { + // if .frm file does not exist don't treat it as error + return (my_errno() == ENOENT); + } + + // First, we open the file, and return upon failure. No need to close + // the file in this case. + File file= mysql_file_open(key_file_frm, path, O_RDONLY | O_SHARE, MYF(0)); + if (file < 0) + return false; + BOOST_SCOPE_EXIT_ALL(&) { mysql_file_close(file, MYF(MY_WME)); }; + + // Next, we read the header and do some basic verification of the + // header fields. + uchar head[64]; + if (mysql_file_read(file, head, sizeof(head), MYF(MY_NABP))) + return false; + + if (!strncmp((char *)head, "TYPE=VIEW\n", strlen("TYPE=VIEW\n"))) + return true; + + if (head[0] != (uchar)254 || head[1] != 1 || + !(head[2] == FRM_VER || head[2] == FRM_VER + 1 || + (head[2] >= FRM_VER + 3 && head[2] <= FRM_VER + 4))) + return false; + + // For other engines, and for cluster tables with version >= 50120, we + // continue by checking that we have an extra data segment and a proper + // form position. + const ulong pos= get_form_pos(file, head); //< Position of form info + const uint n_length= uint4korr(head + 55); //< Length of extra segment + if (n_length == 0 || pos == 0) + { + // We close the file and return success, as we no form info + // or extra segment. + return false; + } + + mysql_file_seek(file, pos, MY_SEEK_SET, MYF(0)); + + uchar *extra_segment_buff= static_cast( + my_malloc(key_memory_frm_extra_segment_buff, n_length, MYF(MY_WME))); + std::unique_ptr extra_segment_buff_uptr( + extra_segment_buff, my_free); + + const uint reclength= uint2korr(head + 16); + const uint record_offset= + uint2korr(head + 6) + + ((uint2korr(head + 14) == 0xffff ? uint4korr(head + 47) + : uint2korr(head + 14))); + + uchar forminfo[288]; + + if (!mysql_file_read(file, forminfo, sizeof(forminfo), MYF(MY_NABP)) && + extra_segment_buff && + !mysql_file_pread(file, extra_segment_buff, n_length, + record_offset + reclength, MYF(MY_NABP))) + { + const uchar *next_chunk= extra_segment_buff; //< Read pos + const uchar *buff_end= extra_segment_buff + n_length; //< Buffer end + + next_chunk+= uint2korr(next_chunk) + 2; // Connect string + if (next_chunk + 2 < buff_end) + next_chunk+= uint2korr(next_chunk) + 2; // DB type + if (next_chunk + 5 < buff_end) // Partitioning + { + uint32 partition_info_str_len= uint4korr(next_chunk); + if (partition_info_str_len) + result.assign(reinterpret_cast(next_chunk + 4), + partition_info_str_len); + } + } + + return true; +} + +bool get_part_str_for_table(const char *name, std::string &result) +{ + char db_name[FN_REFLEN + 1]; + char table_name[FN_REFLEN + 1]; + get_db_table_name_from_canonical_name(name, db_name, sizeof(db_name), + table_name, sizeof(table_name)); + + // Prepare the path to the .FRM file and open the file + char path[FN_REFLEN + 1]; //< Path to .FRM file + bool temp_table= (bool)is_prefix(table_name, tmp_file_prefix); + build_table_filename(path, sizeof(path) - 1, db_name, table_name, reg_ext, + temp_table ? FN_IS_TMP : 0); + + return get_part_str_for_path(path, result); +} + + +partition_info *parse_partition_info(THD * thd, + const std::string &partition_info_str) +{ + DBUG_ASSERT(thd); + + const CHARSET_INFO *old_character_set_client= + thd->variables.character_set_client; + + LEX * old_lex= thd->lex; + LEX lex; + st_select_lex_unit unit(CTX_NONE); + st_select_lex select(nullptr, nullptr, nullptr, nullptr, nullptr, nullptr); + lex.new_static_query(&unit, &select); + + sql_digest_state * parent_digest= thd->m_digest; + PSI_statement_locker *parent_locker= thd->m_statement_psi; + + thd->variables.character_set_client= system_charset_info; + thd->lex= &lex; + BOOST_SCOPE_EXIT_ALL(&) + { + thd->lex= old_lex; + thd->variables.character_set_client= old_character_set_client; + }; + + Parser_state parser_state; + if (parser_state.init(thd, partition_info_str.c_str(), + partition_info_str.size())) + return nullptr; + + /* It will be deallocated when the thread's mem_root is freed */ + lex.part_info= + new partition_info(); /* Indicates MYSQLparse from this place */ + if (!lex.part_info) + { + mem_alloc_error(sizeof(partition_info)); + return nullptr; + } + + thd->m_digest= nullptr; + thd->m_statement_psi= nullptr; + BOOST_SCOPE_EXIT_ALL(&) + { + thd->free_items(); + thd->m_digest= parent_digest; + thd->m_statement_psi= parent_locker; + }; + + if (parse_sql(thd, &parser_state, nullptr) || + lex.part_info->fix_parser_data(thd)) + return nullptr; + + if (lex.part_info->set_up_defaults_for_partitioning(nullptr, nullptr, 0)) + return nullptr; + + return lex.part_info; +} + +static void part_name(char *out_buf, const char *path, + const partition_element *parent_elem, + const partition_element *elem) +{ + static const char * sp_prefix= "#SP#"; + static const size_t sp_prefix_length= 4; + + char part_name[FN_REFLEN]; + size_t part_name_length= tablename_to_filename( + parent_elem ? parent_elem->partition_name : elem->partition_name, + part_name, FN_REFLEN); + if (parent_elem) + { + DBUG_ASSERT(part_name_length + sp_prefix_length < sizeof(part_name)); + strncat(part_name, sp_prefix, sizeof(part_name) - part_name_length - 1); + part_name_length+= sp_prefix_length; + char subpart_name[FN_REFLEN]; + size_t subpart_name_length= + tablename_to_filename(elem->partition_name, subpart_name, FN_REFLEN); + DBUG_ASSERT(part_name_length + subpart_name_length < sizeof(part_name)); + strncat(part_name, subpart_name, + sizeof(part_name) - part_name_length - 1); + part_name_length+= subpart_name_length; + } + + create_partition_name(out_buf, path, part_name, NORMAL_PART_NAME, false); +} + +Parts_share_refs::Parts_share_refs() : num_parts(0), ha_shares(nullptr) {} + + +Parts_share_refs::~Parts_share_refs() +{ + if (ha_shares) + { + for (uint i= 0; i < num_parts; i++) + if (ha_shares[i]) + delete ha_shares[i]; + delete[] ha_shares; + } +} + +bool Parts_share_refs::init(uint arg_num_parts) +{ + DBUG_ASSERT(!num_parts && !ha_shares); + num_parts= arg_num_parts; + /* Allocate an array of Handler_share pointers */ + ha_shares= new Handler_share *[num_parts]; + if (!ha_shares) + { + num_parts= 0; + return true; + } + memset(ha_shares, 0, sizeof(Handler_share *) * num_parts); + return false; +} + + +Partition_base_share::Partition_base_share() + : Partition_share(), partitions_share_refs(nullptr) +{ +} + + +Partition_base_share::~Partition_base_share() +{ + if (partitions_share_refs) + delete partitions_share_refs; +} + + +/** + Initialize and allocate space for partitions shares. + + @param num_parts Number of partitions to allocate storage for. + + @return Operation status. + @retval true Failure (out of memory). + @retval false Success. +*/ + +bool Partition_base_share::init(uint num_parts) +{ + DBUG_ENTER("Partition_base_share::init"); + partitions_share_refs= new Parts_share_refs; + if (!partitions_share_refs) + DBUG_RETURN(true); + if (partitions_share_refs->init(num_parts)) + { + delete partitions_share_refs; + DBUG_RETURN(true); + } + DBUG_RETURN(false); +} + + +const uint32 Partition_base::NO_CURRENT_PART_ID= NOT_A_PARTITION_ID; + +/* + Constructor method + + SYNOPSIS + Partition_base() + table Table object + + RETURN VALUE + NONE +*/ + +Partition_base::Partition_base(handlerton *hton, TABLE_SHARE *share) + : handler(hton, share), Partition_helper(this) +{ + DBUG_ENTER("Partition_base::Partition_base(table)"); + init_handler_variables(); + DBUG_VOID_RETURN; +} + + +/** + Partition_base constructor method used by Partition_base::clone() + + @param hton Handlerton (partition_hton) + @param share Table share object + @param part_info_arg partition_info to use + @param clone_arg Partition_base to clone + @param clme_mem_root_arg MEM_ROOT to use + + @return New partition handler +*/ + +Partition_base::Partition_base(handlerton *hton, TABLE_SHARE *share, + partition_info *part_info_arg, + Partition_base *clone_arg, + MEM_ROOT * clone_mem_root_arg) + : handler(hton, share), Partition_helper(this) +{ + DBUG_ENTER("Partition_base::Partition_base(clone)"); + init_handler_variables(); + m_part_info= part_info_arg; + m_is_sub_partitioned= m_part_info->is_sub_partitioned(); + m_is_clone_of= clone_arg; + m_clone_mem_root= clone_mem_root_arg; + part_share= clone_arg->part_share; + m_tot_parts= clone_arg->m_tot_parts; + m_pkey_is_clustered= clone_arg->primary_key_is_clustered(); + DBUG_VOID_RETURN; +} + +/* + Initialize handler object + + SYNOPSIS + init_handler_variables() + + RETURN VALUE + NONE +*/ + +void Partition_base::init_handler_variables() +{ + active_index= MAX_KEY; + m_mode= 0; + m_open_test_lock= 0; + m_file= nullptr; + m_file_tot_parts= 0; + m_tot_parts= 0; + m_pkey_is_clustered= 0; + m_handler_status= handler_not_initialized; + m_part_func_monotonicity_info= NON_MONOTONIC; + /* + this allows blackhole to work properly + */ + m_is_clone_of= nullptr; + m_clone_mem_root= nullptr; + part_share= nullptr; + m_new_partitions_share_refs.empty(); + m_part_ids_sorted_by_num_of_records= nullptr; + m_new_file= nullptr; + m_num_new_partitions= 0; + m_indexes_are_disabled= false; +} + + +const char *Partition_base::table_type() const +{ + // we can do this since we only support a single engine type + return m_file[0]->table_type(); +} + + +/* + Destructor method + + SYNOPSIS + ~Partition_base() + + RETURN VALUE + NONE +*/ + +Partition_base::~Partition_base() +{ + DBUG_ENTER("Partition_base::~Partition_base()"); + if (m_new_partitions_share_refs.elements) + m_new_partitions_share_refs.delete_elements(); + if (m_file != nullptr) + { + uint i; + for (i= 0; i < m_tot_parts; i++) + delete m_file[i]; + } + my_free(m_part_ids_sorted_by_num_of_records); + + DBUG_VOID_RETURN; +} + +bool Partition_base::init_with_fields() +{ + /* Partition info has not yet been initialized, just return true */ + if (m_handler_status != handler_initialized) + return false; + /* Pass the call to each partition */ + for (uint i= 0; i < m_tot_parts; i++) + { + if (m_file[i]->init_with_fields()) + return true; + } + /* Re-read table flags in case init_with_fields caused it to change */ + cached_table_flags= + (m_file[0]->ha_table_flags() & ~(PARTITION_DISABLED_TABLE_FLAGS)) | + PARTITION_ENABLED_TABLE_FLAGS; + return false; +} + +template +bool Partition_base::foreach_partition(const Fn &fn) +{ + DBUG_ASSERT(m_part_info); + List_iterator_fast part_it(m_part_info->partitions); + for (uint i= 0; i < m_part_info->num_parts; ++i) + { + partition_element *part_elem= part_it++; + if (m_is_sub_partitioned) + { + List_iterator_fast sub_it(part_elem->subpartitions); + for (uint j= 0; j < m_part_info->num_subparts; ++j) + { + partition_element *sub_part_elem= sub_it++; + if (!fn(part_elem, sub_part_elem)) + return false; + } + } + else + { + if (!fn(nullptr, part_elem)) + return false; + } + } + return true; +} + + +/* + Initialize partition handler object + + SYNOPSIS + initialize_partition() + mem_root Allocate memory through this + + RETURN VALUE + 1 Error + 0 Success + + DESCRIPTION + + The partition handler is only a layer on top of other engines. Thus it + can't really perform anything without the underlying handlers. Thus we + add this method as part of the allocation of a handler object. + + 1) Allocation of underlying handlers + If we have access to the partition info we will allocate one handler + instance for each partition. + 2) Allocation without partition info + The cases where we don't have access to this information is when called + in preparation for delete_table and rename_table and in that case we + only need to set HA_FILE_BASED. In that case we will use the .par file + that contains information about the partitions and their engines and + the names of each partition. + 3) Table flags initialisation + We need also to set table flags for the partition handler. This is not + static since it depends on what storage engines are used as underlying + handlers. + The table flags is set in this routine to simulate the behaviour of a + normal storage engine + The flag HA_FILE_BASED will be set independent of the underlying handlers + 4) Index flags initialisation + When knowledge exists on the indexes it is also possible to initialize the + index flags. Again the index flags must be initialized by using the under- + lying handlers since this is storage engine dependent. + The flag HA_READ_ORDER will be reset for the time being to indicate no + ordered output is available from partition handler indexes. Later a merge + sort will be performed using the underlying handlers. + 5) primary_key_is_clustered, has_transactions and low_byte_first is + calculated here. + +*/ + +bool Partition_base::initialize_partition(MEM_ROOT *mem_root) +{ + handler **file_array, *file; + ulonglong check_table_flags; + DBUG_ENTER("Partition_base::initialize_partition"); + + if (Partition_helper::init_partitioning(mem_root)) + { + DBUG_RETURN(true); + } + if (m_part_info) + { + DBUG_ASSERT(m_tot_parts > 0); + if (new_handlers_from_part_info(mem_root)) + DBUG_RETURN(true); + } + else if (!table_share || !table_share->normalized_path.str) + { + /* + Called with dummy table share (delete, rename and alter table). + Don't need to set-up anything. + */ + DBUG_RETURN(false); + } + /* + We create all underlying table handlers here. We do it in this special + method to be able to report allocation errors. + + Set up low_byte_first, primary_key_is_clustered and + has_transactions since they are called often in all kinds of places, + other parameters are calculated on demand. + Verify that all partitions have the same table_flags. + */ + check_table_flags= m_file[0]->ha_table_flags(); + m_pkey_is_clustered= true; + file_array= m_file; + do + { + file= *file_array; + if (!file->primary_key_is_clustered()) + m_pkey_is_clustered= false; + if (check_table_flags != file->ha_table_flags()) + { + my_error(ER_MIX_HANDLER_ERROR, MYF(0)); + DBUG_RETURN(true); + } + } while (*(++file_array)); + m_handler_status= handler_initialized; + DBUG_RETURN(false); +} + +/**************************************************************************** + MODULE meta data changes +****************************************************************************/ +/* + Delete a table + + SYNOPSIS + delete_table() + name Full path of table name + + RETURN VALUE + >0 Error + 0 Success + + DESCRIPTION + Used to delete a table. By the time delete_table() has been called all + opened references to this table will have been closed (and your globally + shared references released. The variable name will just be the name of + the table. You will need to remove any files you have created at this + point. + + If you do not implement this, the default delete_table() is called from + handler.cc and it will delete all files with the file extentions returned + by bas_ext(). + + Called from handler.cc by delete_table and ha_create_table(). Only used + during create if the table_flag HA_DROP_BEFORE_CREATE was specified for + the storage engine. +*/ + +int Partition_base::delete_table(const char *name) +{ + DBUG_ENTER("Partition_base::delete_table"); + + DBUG_RETURN(del_ren_table(name, nullptr)); +} + + +/* + Rename a table + + SYNOPSIS + rename_table() + from Full path of old table name + to Full path of new table name + + RETURN VALUE + >0 Error + 0 Success + + DESCRIPTION + Renames a table from one name to another from alter table call. + + If you do not implement this, the default rename_table() is called from + handler.cc and it will rename all files with the file extentions returned + by bas_ext(). + + Called from sql_table.cc by mysql_rename_table(). +*/ + +int Partition_base::rename_table(const char *from, const char *to) +{ + DBUG_ENTER("Partition_base::rename_table"); + + DBUG_RETURN(del_ren_table(from, to)); +} + + +/* + Create a partitioned table + + SYNOPSIS + create() + name Full path of table name + table_arg Table object + create_info Create info generated for CREATE TABLE + + RETURN VALUE + >0 Error + 0 Success + + DESCRIPTION + create() is called to create a table. The variable name will have the name + of the table. When create() is called you do not need to worry about + opening the table. Also, the FRM file will have already been created so + adjusting create_info will not do you any good. You can overwrite the frm + file at this point if you wish to change the table definition, but there + are no methods currently provided for doing that. + + Called from handler.cc by ha_create_table(). +*/ + +int Partition_base::create(const char *name, TABLE *table_arg, + HA_CREATE_INFO *create_info) +{ + int error; + char name_lc_buff[FN_REFLEN]; + std::vector part_name_collection; + const char * path; + List_iterator_fast part_it(m_part_info->partitions); + partition_element table_level_options; + handler ** file, **abort_file; + THD * thd= ha_thd(); + TABLE_SHARE * share= table_arg->s; + DBUG_ENTER("Partition_base::create"); + + DBUG_ASSERT(*fn_rext((char *)name) == '\0'); + + /* Not allowed to create temporary partitioned tables */ + if (create_info && create_info->options & HA_LEX_CREATE_TMP_TABLE) + { + my_error(ER_PARTITION_NO_TEMPORARY, MYF(0)); + DBUG_RETURN(true); + } + + /* + To initialize partitioning and part_share we need to have m_part_info + filled in. + */ + if (initialize_partition(&table_share->mem_root) || init_part_share()) + DBUG_RETURN(true); + file= m_file; + /* + Since Partition_base has HA_FILE_BASED, it must alter underlying table names + if they do not have HA_FILE_BASED and lower_case_table_names == 2. + See Bug#37402, for Mac OS X. + The appended #P#[#SP#] will remain in current case. + Using the first partitions handler, since mixing handlers is not allowed. + */ + path= get_canonical_filename(*file, name, name_lc_buff); + table_level_options.set_from_info(create_info); + + + if (foreach_partition([&](partition_element *parent_elem, + partition_element *part_elem) -> bool { + + char name_buff[FN_REFLEN]; + part_name(name_buff, path, parent_elem, part_elem); + if ((error= set_up_table_before_create(thd, share, name_buff, + create_info, part_elem)) || + ((error= (*file)->ha_create(name_buff, table_arg, create_info)))) + return false; + + table_level_options.put_to_info(create_info); + ++file; + part_name_collection.push_back(name_buff); + return true; + })) + DBUG_RETURN(0); + + auto part_name_i= part_name_collection.cbegin(); + for (abort_file= file, file= m_file; file < abort_file; + ++file, ++part_name_i) + { + (void)(*file)->ha_delete_table(part_name_i->c_str()); + } + handler::delete_table(name); + DBUG_RETURN(error); +} + +/** This function reads zip dict-related info from partition handlers. +It may do nothing if individual handlers do not support COMPRESSED_COLUMNS. + +@param thd Thread handler. +@param part_name Must be always nullptr. +*/ +void Partition_base::update_field_defs_with_zip_dict_info( + THD *thd, const char *part_name_arg) +{ + DBUG_ENTER("Partition_base::update_field_defs_with_zip_dict_info"); + DBUG_ASSERT(part_name_arg == nullptr); + char full_name[FN_REFLEN]; + + List_iterator_fast part_it(m_part_info->partitions); + partition_element *part_elem= part_it++; + if (m_is_sub_partitioned) + { + List_iterator_fast parent_it(part_elem->subpartitions); + partition_element *parent_elem= parent_it++; + part_name(full_name, table_share->path.str, parent_elem, part_elem); + } + else + { + part_name(full_name, table_share->path.str, nullptr, part_elem); + } + + /* + As table structure is the same for all partitions, + we can use the first partition for this function. + */ + DBUG_ASSERT(m_file); + DBUG_ASSERT(m_file[0]); + + m_file[0]->update_field_defs_with_zip_dict_info(thd, full_name); + + DBUG_VOID_RETURN; +} + + +/* + Optimize table + + SYNOPSIS + optimize() + thd Thread object + check_opt Check/analyze/repair/optimize options + + RETURN VALUES + >0 Error + 0 Success +*/ + +int Partition_base::optimize(THD *thd, HA_CHECK_OPT *check_opt) +{ + DBUG_ENTER("Partition_base::optimize"); + + DBUG_RETURN(handle_opt_partitions(thd, check_opt, OPTIMIZE_PARTS)); +} + + +/* + Analyze table + + SYNOPSIS + analyze() + thd Thread object + check_opt Check/analyze/repair/optimize options + + RETURN VALUES + >0 Error + 0 Success +*/ + +int Partition_base::analyze(THD *thd, HA_CHECK_OPT *check_opt) +{ + DBUG_ENTER("Partition_base::analyze"); + + int result= handle_opt_partitions(thd, check_opt, ANALYZE_PARTS); + + if ((result == 0) && m_file[0] && + (m_file[0]->ha_table_flags() & HA_ONLINE_ANALYZE)) + { + /* If this is ANALYZE TABLE that will not force table definition cache + eviction, update statistics for the partition handler. */ + this->info(HA_STATUS_CONST | HA_STATUS_VARIABLE | HA_STATUS_NO_LOCK); + } + + DBUG_RETURN(result); +} + + +/* + Check table + + SYNOPSIS + check() + thd Thread object + check_opt Check/analyze/repair/optimize options + + RETURN VALUES + >0 Error + 0 Success +*/ + +int Partition_base::check(THD *thd, HA_CHECK_OPT *check_opt) +{ + DBUG_ENTER("Partition_base::check"); + + DBUG_RETURN(handle_opt_partitions(thd, check_opt, CHECK_PARTS)); +} + + +/* + Repair table + + SYNOPSIS + repair() + thd Thread object + check_opt Check/analyze/repair/optimize options + + RETURN VALUES + >0 Error + 0 Success +*/ + +int Partition_base::repair(THD *thd, HA_CHECK_OPT *check_opt) +{ + DBUG_ENTER("Partition_base::repair"); + + DBUG_RETURN(handle_opt_partitions(thd, check_opt, REPAIR_PARTS)); +} + +/** + Assign to keycache + + @param thd Thread object + @param check_opt Check/analyze/repair/optimize options + + @return + @retval >0 Error + @retval 0 Success +*/ + +int Partition_base::assign_to_keycache(THD *thd, HA_CHECK_OPT *check_opt) +{ + DBUG_ENTER("Partition_base::assign_to_keycache"); + + DBUG_RETURN(handle_opt_partitions(thd, check_opt, ASSIGN_KEYCACHE_PARTS)); +} + + +/** + Preload to keycache + + @param thd Thread object + @param check_opt Check/analyze/repair/optimize options + + @return + @retval >0 Error + @retval 0 Success +*/ + +int Partition_base::preload_keys(THD *thd, HA_CHECK_OPT *check_opt) +{ + DBUG_ENTER("Partition_base::preload_keys"); + + DBUG_RETURN(handle_opt_partitions(thd, check_opt, PRELOAD_KEYS_PARTS)); +} + + +/* + Handle optimize/analyze/check/repair of one partition + + SYNOPSIS + handle_opt_part() + thd Thread object + check_opt Options + file Handler object of partition + flag Optimize/Analyze/Check/Repair flag + + RETURN VALUE + >0 Failure + 0 Success +*/ + +int Partition_base::handle_opt_part(THD *thd, HA_CHECK_OPT *check_opt, + uint part_id, + enum_part_operation operation) +{ + int error; + handler *file= m_file[part_id]; + DBUG_ENTER("handle_opt_part"); + DBUG_PRINT("enter", ("operation = %u", operation)); + + if (operation == OPTIMIZE_PARTS) + error= file->ha_optimize(thd, check_opt); + else if (operation == ANALYZE_PARTS) + error= file->ha_analyze(thd, check_opt); + else if (operation == CHECK_PARTS) + { + error= file->ha_check(thd, check_opt); + if (!error || error == HA_ADMIN_ALREADY_DONE || + error == HA_ADMIN_NOT_IMPLEMENTED) + { + if (check_opt->flags & (T_MEDIUM | T_EXTEND)) + error= Partition_helper::check_misplaced_rows(part_id, false); + } + } + else if (operation == REPAIR_PARTS) + { + error= file->ha_repair(thd, check_opt); + if (!error || error == HA_ADMIN_ALREADY_DONE || + error == HA_ADMIN_NOT_IMPLEMENTED) + { + if (check_opt->flags & (T_MEDIUM | T_EXTEND)) + error= Partition_helper::check_misplaced_rows(part_id, true); + } + } + else if (operation == ASSIGN_KEYCACHE_PARTS) + error= file->assign_to_keycache(thd, check_opt); + else if (operation == PRELOAD_KEYS_PARTS) + error= file->preload_keys(thd, check_opt); + else + { + DBUG_ASSERT(false); + error= 1; + } + if (error == HA_ADMIN_ALREADY_DONE) + error= 0; + DBUG_RETURN(error); +} + + +/* + Handle optimize/analyze/check/repair of partitions + + SYNOPSIS + handle_opt_partitions() + thd Thread object + check_opt Options + operation Optimize/Analyze/Check/Repair flag + + RETURN VALUE + >0 Failure + 0 Success +*/ + +int Partition_base::handle_opt_partitions(THD *thd, HA_CHECK_OPT *check_opt, + enum_part_operation operation) +{ + List_iterator part_it(m_part_info->partitions); + uint num_parts= m_part_info->num_parts; + uint num_subparts= m_part_info->num_subparts; + uint i= 0; + bool use_all_parts= + !(thd->lex->alter_info.flags & Alter_info::ALTER_ADMIN_PARTITION); + int error; + DBUG_ENTER("Partition_base::handle_opt_partitions"); + DBUG_PRINT("enter", ("operation= %u", operation)); + + do + { + partition_element *part_elem= part_it++; + /* + when ALTER TABLE PARTITION ... + it should only do named [sub]partitions, otherwise all partitions + */ + if (m_is_sub_partitioned) + { + List_iterator subpart_it(part_elem->subpartitions); + partition_element * sub_elem; + uint j= 0, part; + do + { + sub_elem= subpart_it++; + if (use_all_parts || part_elem->part_state == PART_ADMIN || + sub_elem->part_state == PART_ADMIN) + { + part= i * num_subparts + j; + DBUG_PRINT("info", ("Optimize subpartition %u (%s)", part, + sub_elem->partition_name)); + if ((error= handle_opt_part(thd, check_opt, part, operation))) + { + /* print a line which partition the error belongs to */ + if (error != HA_ADMIN_NOT_IMPLEMENTED && + error != HA_ADMIN_ALREADY_DONE && error != HA_ADMIN_TRY_ALTER) + { + print_admin_msg( + thd, MI_MAX_MSG_BUF, "error", table_share->db.str, + table->alias, opt_op_name[operation], + "Subpartition %s returned error", sub_elem->partition_name); + } + /* reset part_state for the remaining partitions */ + do + { + if (sub_elem->part_state == PART_ADMIN) + sub_elem->part_state= PART_NORMAL; + } while ((sub_elem= subpart_it++)); + if (part_elem->part_state == PART_ADMIN) + part_elem->part_state= PART_NORMAL; + + while ((part_elem= part_it++)) + { + List_iterator s_it(part_elem->subpartitions); + while ((sub_elem= s_it++)) + { + if (sub_elem->part_state == PART_ADMIN) + sub_elem->part_state= PART_NORMAL; + } + if (part_elem->part_state == PART_ADMIN) + part_elem->part_state= PART_NORMAL; + } + DBUG_RETURN(error); + } + sub_elem->part_state= PART_NORMAL; + } + } while (++j < num_subparts); + part_elem->part_state= PART_NORMAL; + } + else + { + if (use_all_parts || part_elem->part_state == PART_ADMIN) + { + DBUG_PRINT("info", ("Optimize partition %u (%s)", i, + part_elem->partition_name)); + if ((error= handle_opt_part(thd, check_opt, i, operation))) + { + /* print a line which partition the error belongs to */ + if (error != HA_ADMIN_NOT_IMPLEMENTED && + error != HA_ADMIN_ALREADY_DONE && error != HA_ADMIN_TRY_ALTER) + { + print_admin_msg(thd, MI_MAX_MSG_BUF, "error", table_share->db.str, + table->alias, opt_op_name[operation], + "Partition %s returned error", + part_elem->partition_name); + } + /* reset part_state for the remaining partitions */ + do + { + if (part_elem->part_state == PART_ADMIN) + part_elem->part_state= PART_NORMAL; + } while ((part_elem= part_it++)); + DBUG_RETURN(error); + } + } + part_elem->part_state= PART_NORMAL; + } + } while (++i < num_parts); + DBUG_RETURN(false); +} + + +/** + @brief Check and repair the table if neccesary + + @param thd Thread object + + @retval true Error/Not supported + @retval false Success + + @note Called if open_table_from_share fails and ::is_crashed(). +*/ + +bool Partition_base::check_and_repair(THD *thd) +{ + handler **file= m_file; + DBUG_ENTER("Partition_base::check_and_repair"); + + do + { + if ((*file)->ha_check_and_repair(thd)) + DBUG_RETURN(true); + } while (*(++file)); + DBUG_RETURN(false); +} + + +/** + @breif Check if the table can be automatically repaired + + @retval true Can be auto repaired + @retval false Cannot be auto repaired +*/ + +bool Partition_base::auto_repair() const +{ + DBUG_ENTER("Partition_base::auto_repair"); + + /* + As long as we only support one storage engine per table, + we can use the first partition for this function. + */ + DBUG_RETURN(m_file[0]->auto_repair()); +} + + +/** + @breif Check if the table is crashed + + @retval true Crashed + @retval false Not crashed +*/ + +bool Partition_base::is_crashed() const +{ + handler **file= m_file; + DBUG_ENTER("Partition_base::is_crashed"); + + do + { + if ((*file)->is_crashed()) + DBUG_RETURN(true); + } while (*(++file)); + DBUG_RETURN(false); +} + + +/** + Prepare for creating new partitions during ALTER TABLE ... PARTITION. + + @param num_partitions Number of new partitions to be created. + @param only_create True if only creating the partition + (no open/lock is needed). + @param disable_non_uniq_indexes True if non unique indexes are disabled. + + @return Operation status. + @retval 0 Success. + @retval != 0 Error code. +*/ + +int Partition_base::prepare_for_new_partitions(uint num_partitions, + bool only_create) +{ + size_t alloc_size= num_partitions * sizeof(handler *); + DBUG_ENTER("Partition_base::prepare_for_new_partition"); + m_new_file= static_cast(my_malloc( + key_memory_Partition_base_engine_array, alloc_size, MYF(MY_WME))); + if (!m_new_file) + { + DBUG_RETURN(HA_ERR_OUT_OF_MEM); + } + memset(m_new_file, 0, alloc_size); + m_num_new_partitions= num_partitions; + m_indexes_are_disabled= indexes_are_disabled(); + DBUG_RETURN(0); +} + + +/** + Creating a new partition + + Used during fast_alter_part_table (ALTER TABLE ... ADD/DROP... PARTITION). + + @param table Table object. + @param create_info Create info from CREATE TABLE. + @param part_name Partition name. + @param new_part_id Partition id in m_new_file array. + @param p_elem Partition element. + + @return Operation status + @retval 0 Success + @retval >0 Error +*/ + +int Partition_base::create_new_partition(TABLE * tbl, + HA_CREATE_INFO * create_info, + const char * part_name, + uint new_part_id, + partition_element *p_elem) +{ + int error; + THD * thd= ha_thd(); + TABLE_SHARE * share= tbl->s; + handler * file; + Parts_share_refs *p_share_refs; + DBUG_ENTER("Partition_base::create_new_partition"); + + file= get_file_handler(share, thd->mem_root); + if (!file) + { + mem_alloc_error(sizeof(Partition_base)); + DBUG_RETURN(HA_ERR_OUT_OF_MEM); + } + + /* + The Handler_shares for each partition's handler can be allocated + within this handler, since there will not be any more instances of the + new partitions, until the table is reopened after the ALTER succeeded. + */ + p_share_refs= new Parts_share_refs; + if (!p_share_refs) + { + mem_alloc_error(sizeof(Parts_share_refs)); + DBUG_RETURN(HA_ERR_OUT_OF_MEM); + } + if (p_share_refs->init(1)) + { + mem_alloc_error(sizeof(Parts_share_refs)); + DBUG_RETURN(HA_ERR_OUT_OF_MEM); + } + if (m_new_partitions_share_refs.push_back(p_share_refs)) + { + mem_alloc_error(sizeof(Parts_share_refs)); + DBUG_RETURN(HA_ERR_OUT_OF_MEM); + } + if (file->set_ha_share_ref(&p_share_refs->ha_shares[0])) + { + DBUG_RETURN(HA_ERR_INITIALIZATION); + } + + if ((error= file->ha_create(part_name, tbl, create_info))) + { + /* + Added for safety, InnoDB reports HA_ERR_FOUND_DUPP_KEY + if the table/partition already exists. + If we return that error code, then print_error would try to + get_dup_key on a non-existing partition. + So return a more reasonable error code. + */ + if (error == HA_ERR_FOUND_DUPP_KEY) + error= HA_ERR_TABLE_EXIST; + goto error_create; + } + DBUG_PRINT("info", ("partition %s created", part_name)); + if ((error= file->ha_open(tbl, part_name, m_mode, + m_open_test_lock | HA_OPEN_NO_PSI_CALL))) + { + goto error_open; + } + DBUG_PRINT("info", ("partition %s opened", part_name)); + + /* + Note: if you plan to add another call that may return failure, + better to do it before external_lock() as close_new_partitions() + assumes that external_lock() is last call that may fail here. + Otherwise see description for close_new_partitions(). + */ + if ((error= file->ha_external_lock(ha_thd(), F_WRLCK))) + { + goto error_external_lock; + } + DBUG_PRINT("info", ("partition %s external locked", part_name)); + + if (m_indexes_are_disabled) + { + file->ha_disable_indexes(m_indexes_are_disabled); + } + + m_new_file[new_part_id]= file; + DBUG_RETURN(0); +error_external_lock: + (void)file->ha_close(); +error_open: + (void)file->ha_delete_table(part_name); +error_create: + DBUG_RETURN(error); +} + + +/** Insert a row to the new partition. + @param part_id Partition to insert into. + + @return Operation status. + @retval 0 Success + @retval != 0 Error code +*/ +int Partition_base::write_row_in_new_part(uint part_id) +{ + int error; + THD *thd= ha_thd(); + DBUG_ENTER("Partition_base::write_row_in_new_part"); + m_last_part= part_id; + + if (!m_new_file[part_id]) + { + /* Altered partition contains misplaced row. */ + m_err_rec= table->record[0]; + DBUG_RETURN(HA_ERR_ROW_IN_WRONG_PARTITION); + } + + tmp_disable_binlog(thd); /* Do not replicate the low-level changes. */ + error= m_new_file[part_id]->ha_write_row(table->record[0]); + reenable_binlog(thd); + DBUG_RETURN(error); +} + + +/* + Close and unlock all created partitions. + + So they can be renamed and included in the altered table + or deleted by the ddl-log in case of failure. +*/ + +void Partition_base::close_new_partitions() +{ + DBUG_ENTER("Partition_base::close_new_partitions"); + + THD *thd; + if (m_new_file) + { + thd= ha_thd(); + handler **file= &m_new_file[m_num_new_partitions - 1]; + for (; m_new_file <= file; file--) + { + if (*file == nullptr) + { + /* Not a new partition, skip it. */ + continue; + } + (*file)->ha_external_lock(thd, F_UNLCK); + (*file)->ha_close(); + delete *file; + } + my_free(m_new_file); + m_new_file= nullptr; + } + DBUG_VOID_RETURN; +} + + +/* + Update create info as part of ALTER TABLE + + SYNOPSIS + update_create_info() + create_info Create info from ALTER TABLE + + RETURN VALUE + NONE + + DESCRIPTION + Forward this handler call to the storage engine foreach + partition handler. The data_file_name for each partition may + need to be reset if the tablespace was moved. Use a dummy + HA_CREATE_INFO structure and transfer necessary data. +*/ + +void Partition_base::update_create_info(HA_CREATE_INFO *create_info) +{ + DBUG_ENTER("Partition_base::update_create_info"); + + /* + Fix for bug#38751, some engines needs info-calls in ALTER. + Archive need this since it flushes in ::info. + HA_STATUS_AUTO is optimized so it will not always be forwarded + to all partitions, but HA_STATUS_VARIABLE will. + */ + info(HA_STATUS_VARIABLE); + + info(HA_STATUS_AUTO); + + if (!(create_info->used_fields & HA_CREATE_USED_AUTO)) + create_info->auto_increment_value= stats.auto_increment_value; + + /* + DATA DIRECTORY and INDEX DIRECTORY are never applied to the whole + partitioned table, only its parts. + */ + bool from_alter= (create_info->data_file_name == (const char *)-1); + create_info->data_file_name= create_info->index_file_name= nullptr; + + /* + We do not need to update the individual partition DATA DIRECTORY settings + since they can be changed by ALTER TABLE ... REORGANIZE PARTITIONS. + */ + if (from_alter) + DBUG_VOID_RETURN; + + /* + send Handler::update_create_info() to the storage engine for each + partition that currently has a handler object. Using a dummy + HA_CREATE_INFO structure to collect DATA and INDEX DIRECTORYs. + */ + + List_iterator part_it(m_part_info->partitions); + partition_element * part_elem, *sub_elem; + uint num_subparts= m_part_info->num_subparts; + uint num_parts= + num_subparts ? m_file_tot_parts / num_subparts : m_file_tot_parts; + HA_CREATE_INFO dummy_info; + memset(&dummy_info, 0, sizeof(dummy_info)); + + /* + Since update_create_info() can be called from mysql_prepare_alter_table() + when not all handlers are set up, we look for that condition first. + If all handlers are not available, do not call update_create_info for any. + */ + uint i, j, part; + for (i= 0; i < num_parts; i++) + { + part_elem= part_it++; + if (!part_elem) + DBUG_VOID_RETURN; + if (m_is_sub_partitioned) + { + List_iterator subpart_it(part_elem->subpartitions); + for (j= 0; j < num_subparts; j++) + { + sub_elem= subpart_it++; + if (!sub_elem) + DBUG_VOID_RETURN; + part= i * num_subparts + j; + if (part >= m_file_tot_parts || !m_file[part]) + DBUG_VOID_RETURN; + } + } + else + { + if (!m_file[i]) + DBUG_VOID_RETURN; + } + } + part_it.rewind(); + + for (i= 0; i < num_parts; i++) + { + part_elem= part_it++; + DBUG_ASSERT(part_elem); + if (m_is_sub_partitioned) + { + List_iterator subpart_it(part_elem->subpartitions); + for (j= 0; j < num_subparts; j++) + { + sub_elem= subpart_it++; + DBUG_ASSERT(sub_elem); + part= i * num_subparts + j; + DBUG_ASSERT(part < m_file_tot_parts && m_file[part]); + if (ha_legacy_type(m_file[part]->ht) == DB_TYPE_INNODB) + { + dummy_info.data_file_name= dummy_info.index_file_name= nullptr; + m_file[part]->update_create_info(&dummy_info); + + if (dummy_info.data_file_name || sub_elem->data_file_name) + { + sub_elem->data_file_name= (char *)dummy_info.data_file_name; + } + if (dummy_info.index_file_name || sub_elem->index_file_name) + { + sub_elem->index_file_name= (char *)dummy_info.index_file_name; + } + } + } + } + else + { + DBUG_ASSERT(m_file[i]); + if (ha_legacy_type(m_file[i]->ht) == DB_TYPE_INNODB) + { + dummy_info.data_file_name= dummy_info.index_file_name= nullptr; + m_file[i]->update_create_info(&dummy_info); + if (dummy_info.data_file_name || part_elem->data_file_name) + { + part_elem->data_file_name= (char *)dummy_info.data_file_name; + } + if (dummy_info.index_file_name || part_elem->index_file_name) + { + part_elem->index_file_name= (char *)dummy_info.index_file_name; + } + } + } + } + DBUG_VOID_RETURN; +} + + +/** + Change the internal TABLE_SHARE pointer + + @param table_arg TABLE object + @param share New share to use + + @note Is used in error handling in ha_delete_table. + All handlers should exist (lock_partitions should not be used) +*/ + +void Partition_base::change_table_ptr(TABLE *table_arg, TABLE_SHARE *share) +{ + handler **file_array; + table= table_arg; + table_share= share; + /* + m_file can be nullptr when using an old cached table in DROP TABLE, when the + table just has REMOVED PARTITIONING, see Bug#42438 + */ + if (m_file) + { + file_array= m_file; + DBUG_ASSERT(*file_array); + do + { + (*file_array)->change_table_ptr(table_arg, share); + } while (*(++file_array)); + } +} + +/** + Handle delete and rename table + + @param from Full path of old table + @param to Full path of new table + + @return Operation status + @retval >0 Error + @retval 0 Success + + @note Common routine to handle delete_table and rename_table. + The routine uses the partition handler file to get the + names of the partition instances. Both these routines + are called after creating the handler without table + object and thus the file is needed to discover the + names of the partitions and the underlying storage engines. +*/ + +int Partition_base::del_ren_table(const char *from, const char *to) +{ + const char *from_path; + const char *to_path= nullptr; + char from_lc_buff[FN_REFLEN]; + char to_lc_buff[FN_REFLEN]; + int error= 0; + int save_error= 0; + handler ** file= m_file; + /* + Since Partition_base has HA_FILE_BASED, it must alter underlying table names + if they do not have HA_FILE_BASED and lower_case_table_names == 2. + See Bug#37402, for Mac OS X. + The appended #P#[#SP#] will remain in current case. + Using the first partitions handler, since mixing handlers is not allowed. + */ + from_path= get_canonical_filename(*file, from, from_lc_buff); + if (to != nullptr) + to_path= get_canonical_filename(*file, to, to_lc_buff); + + if (!foreach_partition([&](const partition_element *parent_part_elem, + const partition_element *part_elem) -> bool { + char from_buff[FN_REFLEN]; + part_name(from_buff, from_path, parent_part_elem, part_elem); + if (!to) + { + error= (*(file++))->ha_delete_table(from_buff); + if (error) + save_error= error; + } + else + { + char to_buff[FN_REFLEN]; + part_name(to_buff, to_path, parent_part_elem, part_elem); + error= (*(file++))->ha_rename_table(from_buff, to_buff); + if (error) + return false; + } + return true; + })) + goto rename_error; + + if (!to) + { + /* Delete the partition-specific files. If error, break.*/ + if ((error= handler::delete_table(from))) + return error; + } + else + { + /* Rename the partition-specific files. If error, break.*/ + if ((error= handler::rename_table(from, to))) + { + /* Try to revert everything, ignore errors */ + (void)handler::rename_table(to, from); + goto rename_error; + } + } + + return save_error; + +rename_error: + handler **abort_file= m_file; + (void)foreach_partition([&](const partition_element *parent_part_elem, + const partition_element *part_elem) -> bool { + char from_buff[FN_REFLEN]; + char to_buff[FN_REFLEN]; + if (abort_file >= file) + return false; + /* Revert the rename, back from 'to' to the original 'from' */ + part_name(from_buff, from_path, parent_part_elem, part_elem); + part_name(to_buff, to_path, parent_part_elem, part_elem); + /* Ignore error here */ + (void)(*(abort_file++))->ha_rename_table(to_buff, from_buff); + return true; + }); + return error; +} + + +/* + Create underlying handler objects from partition info + + SYNOPSIS + new_handlers_from_part_info() + mem_root Allocate memory through this + + RETURN VALUE + true Error + false Success +*/ + +bool Partition_base::new_handlers_from_part_info(MEM_ROOT *mem_root) +{ + uint i, j, part_count; + uint alloc_len= (m_tot_parts + 1) * sizeof(handler *); + List_iterator_fast part_it(m_part_info->partitions); + DBUG_ENTER("Partition_base::new_handlers_from_part_info"); + + if (!(m_file= (handler **)alloc_root(mem_root, alloc_len))) + { + mem_alloc_error(alloc_len); + goto error_end; + } + m_file_tot_parts= m_tot_parts; + memset(m_file, 0, alloc_len); + DBUG_ASSERT(m_part_info->num_parts > 0); + DBUG_ASSERT(m_part_info->num_parts == m_part_info->partitions.elements); + + i= 0; + part_count= 0; + /* + Don't know the size of the underlying storage engine, invent a number of + bytes allocated for error message if allocation fails + */ + do + { + if (m_is_sub_partitioned) + { + for (j= 0; j < m_part_info->num_subparts; j++) + { + if (!(m_file[part_count++]= get_file_handler(table_share, mem_root))) + goto error; + } + } + else + { + if (!(m_file[part_count++]= get_file_handler(table_share, mem_root))) + goto error; + } + } while (++i < m_part_info->num_parts); + DBUG_RETURN(false); +error: + mem_alloc_error(sizeof(handler)); +error_end: + DBUG_RETURN(true); +} + +/**************************************************************************** + MODULE open/close object +****************************************************************************/ + +/** + Set Handler_share pointer. + + @param ha_share_arg Where to store/retrieve the Partitioning_share pointer + to be shared by all instances of the same table. + + @note: the function can be called before partition info is set, but + Handler_share must be set for each partittion file in m_file, + that is why the initial function was splitted into two functions: + set_ha_share_ref() and init_part_share(). The latter is invoked after + m_file initialization. + + @return Operation status + @retval true Failure + @retval false Sucess +*/ + +bool Partition_base::set_ha_share_ref(Handler_share **ha_share_arg) +{ + DBUG_ENTER("Partition_base::set_ha_share_ref"); + DBUG_ASSERT(!part_share); + DBUG_ASSERT(table_share); + DBUG_ASSERT(!m_is_clone_of); + + if (handler::set_ha_share_ref(ha_share_arg)) + DBUG_RETURN(true); + DBUG_RETURN(false); +} + + +/** + Allocate Handler_share pointers for each partition and set those. + + @return Operation status + @retval true Failure + @retval false Sucess +*/ + +bool Partition_base::init_part_share() +{ + DBUG_ENTER("Partition_base::init_part_share"); + DBUG_ASSERT(!part_share); + DBUG_ASSERT(table_share); + DBUG_ASSERT(!m_is_clone_of); + DBUG_ASSERT(m_tot_parts); + + if (!(part_share= get_share())) + DBUG_RETURN(true); + DBUG_ASSERT(part_share->partitions_share_refs); + DBUG_ASSERT(part_share->partitions_share_refs->num_parts >= m_tot_parts); + Handler_share **ha_shares= part_share->partitions_share_refs->ha_shares; + for (uint i= 0; i < m_tot_parts; i++) + { + if (m_file[i]->set_ha_share_ref(&ha_shares[i])) + DBUG_RETURN(true); + } + DBUG_RETURN(false); +} + +/** + Get the PARTITION_SHARE for the table. + + @return Operation status + @retval true Error + @retval false Success + + @note Gets or initializes the Partition_base_share object used by partitioning. + The Partition_base_share is used for handling the auto_increment etc. +*/ + +Partition_base_share *Partition_base::get_share() +{ + Partition_base_share *tmp_share; + DBUG_ENTER("Partition_base::get_share"); + DBUG_ASSERT(table_share); + + lock_shared_ha_data(); + if (!(tmp_share= static_cast(get_ha_share_ptr()))) + { + tmp_share= new Partition_base_share; + if (!tmp_share) + goto err; + if (tmp_share->init(m_tot_parts)) + { + delete tmp_share; + tmp_share= nullptr; + goto err; + } + if (table && table->found_next_number_field && + tmp_share->init_auto_inc_mutex(table_share)) + { + delete tmp_share; + tmp_share= nullptr; + goto err; + } + + set_ha_share_ptr(static_cast(tmp_share)); + } +err: + unlock_shared_ha_data(); + DBUG_RETURN(tmp_share); +} + + +/** + Helper function for freeing all internal bitmaps. +*/ + +void Partition_base::free_partition_bitmaps() +{ + /* Initialize the bitmap we use to minimize ha_start_bulk_insert calls */ + bitmap_free(&m_bulk_insert_started); + bitmap_free(&m_locked_partitions); + bitmap_free(&m_partitions_to_reset); +} + + +/** + Helper function for initializing all internal bitmaps. +*/ + +bool Partition_base::init_partition_bitmaps() +{ + DBUG_ENTER("Partition_base::init_partition_bitmaps"); + /* Initialize the bitmap we use to minimize ha_start_bulk_insert calls */ + if (bitmap_init(&m_bulk_insert_started, nullptr, m_tot_parts + 1, false)) + DBUG_RETURN(true); + bitmap_clear_all(&m_bulk_insert_started); + + /* Initialize the bitmap we use to keep track of locked partitions */ + if (bitmap_init(&m_locked_partitions, nullptr, m_tot_parts, false)) + { + bitmap_free(&m_bulk_insert_started); + DBUG_RETURN(true); + } + bitmap_clear_all(&m_locked_partitions); + + /* + Initialize the bitmap we use to keep track of partitions which may have + something to reset in ha_reset(). + */ + if (bitmap_init(&m_partitions_to_reset, nullptr, m_tot_parts, false)) + { + bitmap_free(&m_bulk_insert_started); + bitmap_free(&m_locked_partitions); + DBUG_RETURN(true); + } + bitmap_clear_all(&m_partitions_to_reset); + + /* Initialize the bitmap for read/lock_partitions */ + if (!m_is_clone_of) + { + DBUG_ASSERT(!m_clone_mem_root); + if (m_part_info->set_partition_bitmaps(nullptr)) + { + free_partition_bitmaps(); + DBUG_RETURN(true); + } + } + DBUG_RETURN(false); +} + + +/* + Open handler object + + SYNOPSIS + open() + name Full path of table name + mode Open mode flags + test_if_locked ? + + RETURN VALUE + >0 Error + 0 Success + + DESCRIPTION + Used for opening tables. The name will be the name of the file. + A table is opened when it needs to be opened. For instance + when a request comes in for a select on the table (tables are not + open and closed for each request, they are cached). + + Called from handler.cc by handler::ha_open(). The server opens all tables + by calling ha_open() which then calls the handler specific open(). +*/ + +int Partition_base::open(const char *name, int mode, uint test_if_locked) +{ + int error= HA_ERR_INITIALIZATION; + handler **file; + ulonglong check_table_flags; + DBUG_ENTER("Partition_base::open"); + + DBUG_ASSERT(table->s == table_share); + DBUG_ASSERT(m_part_info); + ref_length= 0; + m_mode= mode; + m_open_test_lock= test_if_locked; + + /* The following functions must be called only after m_part_info set */ + if (initialize_partition(&table_share->mem_root) || init_part_share() || + init_with_fields()) + DBUG_RETURN(true); + + /* Check/update the partition share. */ + lock_shared_ha_data(); + if (part_share->populate_partition_name_hash(m_part_info)) + { + unlock_shared_ha_data(); + DBUG_RETURN(HA_ERR_INITIALIZATION); + } + if (!part_share->auto_inc_mutex && table->found_next_number_field) + { + if (part_share->init_auto_inc_mutex(table_share)) + { + unlock_shared_ha_data(); + DBUG_RETURN(HA_ERR_INITIALIZATION); + } + } + unlock_shared_ha_data(); + + if (open_partitioning(part_share)) + { + goto err; + } + DBUG_ASSERT(!m_file_tot_parts || m_file_tot_parts == m_tot_parts); + if (!m_part_ids_sorted_by_num_of_records) + { + if (!(m_part_ids_sorted_by_num_of_records= + (uint32 *)my_malloc(key_memory_Partition_base_part_ids, + m_tot_parts * sizeof(uint32), MYF(MY_WME)))) + { + goto err; + } + uint32 i; + /* Initialize it with all partition ids. */ + for (i= 0; i < m_tot_parts; i++) + m_part_ids_sorted_by_num_of_records[i]= i; + } + + if (init_partition_bitmaps()) + { + goto err; + } + + DBUG_ASSERT(m_part_info); + + if (m_is_clone_of) + { + uint alloc_len; + DBUG_ASSERT(m_clone_mem_root); + /* Allocate an array of handler pointers for the partitions handlers. */ + alloc_len= (m_tot_parts + 1) * sizeof(handler *); + if (!(m_file= (handler **)alloc_root(m_clone_mem_root, alloc_len))) + { + error= HA_ERR_INITIALIZATION; + goto err_alloc; + } + memset(m_file, 0, alloc_len); + /* + Populate them by cloning the original partitions. This also opens them. + Note that file->ref is allocated too. + */ + file= m_is_clone_of->m_file; + + handler **this_file= m_file; + handler **cloned_file= m_is_clone_of->m_file; + + if (!foreach_partition([&](const partition_element *parent_part_elem, + const partition_element *part_elem) -> bool { + char name_buff[FN_REFLEN]; + part_name(name_buff, name, parent_part_elem, part_elem); + if (!(*this_file= + (*cloned_file)->clone(name_buff, m_clone_mem_root))) + { + error= HA_ERR_INITIALIZATION; + file= this_file; + return false; + } + ++this_file; + ++cloned_file; + return true; + })) + goto err_handler; + } + else + { + file= m_file; + + if (!foreach_partition([&](const partition_element *parent_part_elem, + const partition_element *part_elem) -> bool { + char name_buff[FN_REFLEN]; + part_name(name_buff, name, parent_part_elem, part_elem); + if ((error= (*file)->ha_open(table, name_buff, mode, + test_if_locked | HA_OPEN_NO_PSI_CALL))) + return false; + ++file; + return true; + })) + goto err_handler; + } + + file= m_file; + ref_length= (*file)->ref_length; + check_table_flags= + (((*file)->ha_table_flags() & ~(PARTITION_DISABLED_TABLE_FLAGS)) | + (PARTITION_ENABLED_TABLE_FLAGS)); + while (*(++file)) + { + /* MyISAM can have smaller ref_length for partitions with MAX_ROWS set */ + set_if_bigger(ref_length, ((*file)->ref_length)); + /* + Verify that all partitions have the same set of table flags. + Mask all flags that partitioning enables/disables. + */ + if (check_table_flags != + (((*file)->ha_table_flags() & ~(PARTITION_DISABLED_TABLE_FLAGS)) | + (PARTITION_ENABLED_TABLE_FLAGS))) + { + error= HA_ERR_INITIALIZATION; + /* set file to last handler, so all of them are closed */ + file= &m_file[m_tot_parts - 1]; + goto err_handler; + } + } + key_used_on_scan= m_file[0]->key_used_on_scan; + implicit_emptied= m_file[0]->implicit_emptied; + ref_length+= PARTITION_BYTES_IN_POS; + + + /* + Some handlers update statistics as part of the open call. This will in + some cases corrupt the statistics of the partition handler and thus + to ensure we have correct statistics we call info from open after + calling open on all individual handlers. + */ + m_handler_status= handler_opened; + if (m_part_info->part_expr) + m_part_func_monotonicity_info= + m_part_info->part_expr->get_monotonicity_info(); + else if (m_part_info->list_of_part_fields) + m_part_func_monotonicity_info= MONOTONIC_STRICT_INCREASING; + info(HA_STATUS_VARIABLE | HA_STATUS_CONST); + DBUG_RETURN(0); + +err_handler: + DEBUG_SYNC(ha_thd(), "partition_open_error"); + while (file-- != m_file) + (*file)->ha_close(); +err_alloc: + free_partition_bitmaps(); +err: + close_partitioning(); + + DBUG_RETURN(error); +} + + +/* + Close handler object + + SYNOPSIS + close() + + RETURN VALUE + >0 Error code + 0 Success + + DESCRIPTION + Called from sql_base.cc, sql_select.cc, and table.cc. + In sql_select.cc it is only used to close up temporary tables or during + the process where a temporary table is converted over to being a + myisam table. + For sql_base.cc look at close_data_tables(). +*/ + +int Partition_base::close(void) +{ + handler **file; + DBUG_ENTER("Partition_base::close"); + + DBUG_ASSERT(table->s == table_share); + close_partitioning(); + free_partition_bitmaps(); + DBUG_ASSERT(m_part_info); + file= m_file; + + do + { + (*file)->ha_close(); + } while (*(++file)); + + m_handler_status= handler_closed; + DBUG_RETURN(0); +} + +/**************************************************************************** + MODULE start/end statement +****************************************************************************/ +/* + A number of methods to define various constants for the handler. In + the case of the partition handler we need to use some max and min + of the underlying handlers in most cases. +*/ + +/* + Set external locks on table + + SYNOPSIS + external_lock() + thd Thread object + lock_type Type of external lock + + RETURN VALUE + >0 Error code + 0 Success + + DESCRIPTION + First you should go read the section "locking functions for mysql" in + lock.cc to understand this. + This create a lock on the table. If you are implementing a storage engine + that can handle transactions look at ha_berkeley.cc to see how you will + want to go about doing this. Otherwise you should consider calling + flock() here. + Originally this method was used to set locks on file level to enable + several MySQL Servers to work on the same data. For transactional + engines it has been "abused" to also mean start and end of statements + to enable proper rollback of statements and transactions. When LOCK + TABLES has been issued the start_stmt method takes over the role of + indicating start of statement but in this case there is no end of + statement indicator(?). + + Called from lock.cc by lock_external() and unlock_external(). Also called + from sql_table.cc by copy_data_between_tables(). +*/ + +int Partition_base::external_lock(THD *thd, int lock_type) +{ + uint error; + uint i, first_used_partition; + MY_BITMAP *used_partitions; + DBUG_ENTER("Partition_base::external_lock"); + + DBUG_ASSERT(!m_auto_increment_lock && !m_auto_increment_safe_stmt_log_lock); + + if (lock_type == F_UNLCK) + used_partitions= &m_locked_partitions; + else + used_partitions= &(m_part_info->lock_partitions); + + first_used_partition= bitmap_get_first_set(used_partitions); + + for (i= first_used_partition; i < m_tot_parts; + i= bitmap_get_next_set(used_partitions, i)) + { + DBUG_PRINT("info", ("external_lock(thd, %d) part %d", lock_type, i)); + if ((error= m_file[i]->ha_external_lock(thd, lock_type))) + { + if (lock_type != F_UNLCK) + goto err_handler; + } + DBUG_PRINT("info", ("external_lock part %u lock %d", i, lock_type)); + if (lock_type != F_UNLCK) + bitmap_set_bit(&m_locked_partitions, i); + } + if (lock_type == F_UNLCK) + { + bitmap_clear_all(used_partitions); + } + else + { + /* Add touched partitions to be included in reset(). */ + bitmap_union(&m_partitions_to_reset, used_partitions); + } + + DBUG_RETURN(0); + +err_handler: + uint j; + for (j= first_used_partition; j < i; + j= bitmap_get_next_set(&m_locked_partitions, j)) + { + (void)m_file[j]->ha_external_lock(thd, F_UNLCK); + } + bitmap_clear_all(&m_locked_partitions); + DBUG_RETURN(error); +} + + +/* + Get the lock(s) for the table and perform conversion of locks if needed + + SYNOPSIS + store_lock() + thd Thread object + to Lock object array + lock_type Table lock type + + RETURN VALUE + >0 Error code + 0 Success + + DESCRIPTION + The idea with handler::store_lock() is the following: + + The statement decided which locks we should need for the table + for updates/deletes/inserts we get WRITE locks, for SELECT... we get + read locks. + + Before adding the lock into the table lock handler (see thr_lock.c) + mysqld calls store lock with the requested locks. Store lock can now + modify a write lock to a read lock (or some other lock), ignore the + lock (if we don't want to use MySQL table locks at all) or add locks + for many tables (like we do when we are using a MERGE handler). + + Berkeley DB for partition changes all WRITE locks to TL_WRITE_ALLOW_WRITE + (which signals that we are doing WRITES, but we are still allowing other + reader's and writer's. + + When releasing locks, store_lock() is also called. In this case one + usually doesn't have to do anything. + + store_lock is called when holding a global mutex to ensure that only + one thread at a time changes the locking information of tables. + + In some exceptional cases MySQL may send a request for a TL_IGNORE; + This means that we are requesting the same lock as last time and this + should also be ignored. (This may happen when someone does a flush + table when we have opened a part of the tables, in which case mysqld + closes and reopens the tables and tries to get the same locks as last + time). In the future we will probably try to remove this. + + Called from lock.cc by get_lock_data(). +*/ + +THR_LOCK_DATA **Partition_base::store_lock(THD *thd, THR_LOCK_DATA **to, + enum thr_lock_type lock_type) +{ + uint i; + DBUG_ENTER("Partition_base::store_lock"); + DBUG_ASSERT(thd == current_thd); + + /* + This can be called from get_lock_data() in mysql_lock_abort_for_thread(), + even when thd != table->in_use. In that case don't use partition pruning, + but use all partitions instead to avoid using another threads structures. + */ + if (thd != table->in_use) + { + for (i= 0; i < m_tot_parts; i++) + to= m_file[i]->store_lock(thd, to, lock_type); + } + else + { + for (i= bitmap_get_first_set(&(m_part_info->lock_partitions)); + i < m_tot_parts; + i= bitmap_get_next_set(&m_part_info->lock_partitions, i)) + { + DBUG_PRINT("info", ("store lock %d iteration", i)); + to= m_file[i]->store_lock(thd, to, lock_type); + } + } + DBUG_RETURN(to); +} + +/* + Start a statement when table is locked + + SYNOPSIS + start_stmt() + thd Thread object + lock_type Type of external lock + + RETURN VALUE + >0 Error code + 0 Success + + DESCRIPTION + This method is called instead of external lock when the table is locked + before the statement is executed. +*/ + +int Partition_base::start_stmt(THD *thd, thr_lock_type lock_type) +{ + int error= 0; + uint i; + /* Assert that read_partitions is included in lock_partitions */ + DBUG_ASSERT(bitmap_is_subset(&m_part_info->read_partitions, + &m_part_info->lock_partitions)); + /* + m_locked_partitions is set in previous external_lock/LOCK TABLES. + Current statement's lock requests must not include any partitions + not previously locked. + */ + DBUG_ASSERT( + bitmap_is_subset(&m_part_info->lock_partitions, &m_locked_partitions)); + DBUG_ENTER("Partition_base::start_stmt"); + + for (i= bitmap_get_first_set(&(m_part_info->lock_partitions)); + i < m_tot_parts; + i= bitmap_get_next_set(&m_part_info->lock_partitions, i)) + { + if ((error= m_file[i]->start_stmt(thd, lock_type))) + break; + /* Add partition to be called in reset(). */ + bitmap_set_bit(&m_partitions_to_reset, i); + } + DBUG_RETURN(error); +} + + +/** + Get number of lock objects returned in store_lock + + @returns Number of locks returned in call to store_lock + + @desc + Returns the number of store locks needed in call to store lock. + We return number of partitions we will lock multiplied with number of + locks needed by each partition. Assists the above functions in allocating + sufficient space for lock structures. +*/ + +uint Partition_base::lock_count() const +{ + DBUG_ENTER("Partition_base::lock_count"); + /* + The caller want to know the upper bound, to allocate enough memory. + There is no performance lost if we simply return maximum number locks + needed, only some minor over allocation of memory in get_lock_data(). + + Also notice that this may be called for another thread != table->in_use, + when mysql_lock_abort_for_thread() is called. So this is more safe, then + using number of partitions after pruning. + */ + if (m_file && m_file[0]) + DBUG_RETURN(m_tot_parts * m_file[0]->lock_count()); + DBUG_RETURN(0); +} + + +/* + Unlock last accessed row + + SYNOPSIS + unlock_row() + + RETURN VALUE + NONE + + DESCRIPTION + Record currently processed was not in the result set of the statement + and is thus unlocked. Used for UPDATE and DELETE queries. +*/ + +void Partition_base::unlock_row() +{ + DBUG_ENTER("Partition_base::unlock_row"); + m_file[m_last_part]->unlock_row(); + DBUG_VOID_RETURN; +} + +/** + Check if semi consistent read was used + + SYNOPSIS + was_semi_consistent_read() + + RETURN VALUE + true Previous read was a semi consistent read + false Previous read was not a semi consistent read + + DESCRIPTION + See handler.h: + 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 + function. MySQL must NOT try to update this optimistic value. If the + optimistic value does not match the WHERE condition, MySQL can decide to + skip over this row. Currently only works for InnoDB. This can be used to + avoid unnecessary lock waits. + + If this method returns nonzero, it will also signal the storage + engine that the next read will be a locking re-read of the row. +*/ +bool Partition_base::was_semi_consistent_read() +{ + DBUG_ENTER("Partition_base::was_semi_consistent_read"); + DBUG_ASSERT(m_last_part < m_tot_parts && + m_part_info->is_partition_used(m_last_part)); + DBUG_RETURN(m_file[m_last_part]->was_semi_consistent_read()); +} + +/** + Use semi consistent read if possible + + SYNOPSIS + try_semi_consistent_read() + yes Turn on semi consistent read + + RETURN VALUE + NONE + + DESCRIPTION + See handler.h: + 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 + the last committed row value under the cursor. + Note: prune_partitions are already called before this call, so using + pruning is OK. +*/ +void Partition_base::try_semi_consistent_read(bool yes) +{ + uint i; + DBUG_ENTER("Partition_base::try_semi_consistent_read"); + + i= m_part_info->get_first_used_partition(); + DBUG_ASSERT(i != MY_BIT_NONE); + for (; i < m_tot_parts; i= m_part_info->get_next_used_partition(i)) + { + m_file[i]->try_semi_consistent_read(yes); + } + DBUG_VOID_RETURN; +} + + +/**************************************************************************** + MODULE change record +****************************************************************************/ + +/** Insert a row to the partition. + @param part_id Partition to insert into. + @param buf The row in MySQL Row Format. + + @return Operation status. + @retval 0 Success + @retval != 0 Error code +*/ +int Partition_base::write_row_in_part(uint part_id, uchar *buf) +{ + int error; + THD *thd= ha_thd(); + DBUG_ENTER("Partition_base::write_row_in_part"); + m_last_part= part_id; + start_part_bulk_insert(thd, part_id); + + tmp_disable_binlog(thd); /* Do not replicate the low-level changes. */ + error= m_file[part_id]->ha_write_row(buf); + reenable_binlog(thd); + DBUG_RETURN(error); +} + + +int Partition_base::update_row_in_part(uint part_id, const uchar *old_data, + uchar *new_data) +{ + int error; + THD *thd= ha_thd(); + DBUG_ENTER("Partition_base::update_row_in_part"); + start_part_bulk_insert(thd, part_id); + tmp_disable_binlog(thd); /* Do not replicate the low-level changes. */ + error= m_file[part_id]->ha_update_row(old_data, new_data); + reenable_binlog(thd); + DBUG_RETURN(error); +} + + +/** + Delete an existing row in the partition. + + This will delete a row. buf will contain a copy of the row to be deleted. + The server will call this right after the current row has been read + (from either a previous rnd_xxx() or index_xxx() call). + If you keep a pointer to the last row or can access a primary key it will + make doing the deletion quite a bit easier. + Keep in mind that the server does no guarantee consecutive deletions. + ORDER BY clauses can be used. + + buf is either record[0] or record[1] + + @param part_id The partition to delete the row from. + @param buf The record in MySQL Row Format. + + @return Operation status. + @retval 0 Success + @retval != 0 Error code +*/ + +int Partition_base::delete_row_in_part(uint part_id, const uchar *buf) +{ + int error; + THD *thd= ha_thd(); + DBUG_ENTER("Partition_base::delete_row_in_part"); + + m_last_part= part_id; + /* Do not replicate low level changes, already registered in ha_* wrapper. */ + tmp_disable_binlog(thd); + error= m_file[part_id]->ha_delete_row(buf); + reenable_binlog(thd); + DBUG_RETURN(error); +} + + +/* + Delete all rows in a table + + SYNOPSIS + delete_all_rows() + + RETURN VALUE + >0 Error Code + 0 Success + + DESCRIPTION + Used to delete all rows in a table. Both for cases of truncate and + for cases where the optimizer realizes that all rows will be + removed as a result of a SQL statement. + + Called from item_sum.cc by Item_func_group_concat::clear(), + Item_sum_count_distinct::clear(), and Item_func_group_concat::clear(). + Called from sql_delete.cc by mysql_delete(). + Called from sql_select.cc by JOIN::reset(). + Called from sql_union.cc by st_select_lex_unit::exec(). +*/ + +int Partition_base::delete_all_rows() +{ + int error; + uint i; + DBUG_ENTER("Partition_base::delete_all_rows"); + + for (i= m_part_info->get_first_used_partition(); i < m_tot_parts; + i= m_part_info->get_next_used_partition(i)) + { + /* Can be pruned, like DELETE FROM t PARTITION (pX) */ + if ((error= m_file[i]->ha_delete_all_rows())) + DBUG_RETURN(error); + } + DBUG_RETURN(0); +} + + +/** + Manually truncate the table. + + @retval 0 Success. + @retval > 0 Error code. +*/ + +int Partition_base::truncate() +{ + int error; + handler **file; + DBUG_ENTER("Partition_base::truncate"); + + /* + TRUNCATE also means resetting auto_increment. Hence, reset + it so that it will be initialized again at the next use. + */ + if (table->found_next_number_field) + { + // TODO: Create Partition_helper::reset_auto_inc(). + lock_auto_increment(); + part_share->next_auto_inc_val= 0; + part_share->auto_inc_initialized= false; + unlock_auto_increment(); + } + + file= m_file; + do + { + if ((error= (*file)->ha_truncate())) + DBUG_RETURN(error); + } while (*(++file)); + DBUG_RETURN(0); +} + + +/** + Truncate a set of specific partitions. + + @remark Auto increment value will be truncated in that partition as well! + + ALTER TABLE t TRUNCATE PARTITION ... +*/ + +int Partition_base::truncate_partition_low() +{ + int error= 0; + List_iterator part_it(m_part_info->partitions); + uint i= 0; + DBUG_ENTER("Partition_base::truncate_partition"); + + /* + TRUNCATE also means resetting auto_increment. Hence, reset + it so that it will be initialized again at the next use. + */ + if (table->found_next_number_field) + { + lock_auto_increment(); + part_share->next_auto_inc_val= 0; + part_share->auto_inc_initialized= false; + unlock_auto_increment(); + } + + for (i= m_part_info->get_first_used_partition(); i < m_tot_parts; + i= m_part_info->get_next_used_partition(i)) + { + DBUG_PRINT("info", ("truncate partition %u", i)); + if ((error= m_file[i]->ha_truncate())) + break; + } + if (error) + { + /* Reset to PART_NORMAL. */ + set_all_part_state(m_part_info, PART_NORMAL); + } + DBUG_RETURN(error); +} + + +/* + Start a large batch of insert rows + + SYNOPSIS + start_bulk_insert() + rows Number of rows to insert + + RETURN VALUE + NONE + + DESCRIPTION + rows == 0 means we will probably insert many rows +*/ +void Partition_base::start_bulk_insert(ha_rows rows) +{ + DBUG_ENTER("Partition_base::start_bulk_insert"); + + m_bulk_inserted_rows= 0; + bitmap_clear_all(&m_bulk_insert_started); + /* use the last bit for marking if bulk_insert_started was called */ + bitmap_set_bit(&m_bulk_insert_started, m_tot_parts); + DBUG_VOID_RETURN; +} + + +/* + Check if start_bulk_insert has been called for this partition, + if not, call it and mark it called +*/ +void Partition_base::start_part_bulk_insert(THD *thd, uint part_id) +{ + long old_buffer_size; + if (!bitmap_is_set(&m_bulk_insert_started, part_id) && + bitmap_is_set(&m_bulk_insert_started, m_tot_parts)) + { + DBUG_ASSERT(bitmap_is_set(&(m_part_info->lock_partitions), part_id)); + old_buffer_size= thd->variables.read_buff_size; + /* Update read_buffer_size for this partition */ + thd->variables.read_buff_size= estimate_read_buffer_size(old_buffer_size); + m_file[part_id]->ha_start_bulk_insert(guess_bulk_insert_rows()); + bitmap_set_bit(&m_bulk_insert_started, part_id); + thd->variables.read_buff_size= old_buffer_size; + } + m_bulk_inserted_rows++; +} + +/* + Estimate the read buffer size for each partition. + SYNOPSIS + Partition_base::estimate_read_buffer_size() + original_size read buffer size originally set for the server + RETURN VALUE + estimated buffer size. + DESCRIPTION + If the estimated number of rows to insert is less than 10 (but not 0) + the new buffer size is same as original buffer size. + In case of first partition of when partition function is monotonic + new buffer size is same as the original buffer size. + For rest of the partition total buffer of 10*original_size is divided + equally if number of partition is more than 10 other wise each partition + will be allowed to use original buffer size. +*/ +long Partition_base::estimate_read_buffer_size(long original_size) +{ + /* + If number of rows to insert is less than 10, but not 0, + return original buffer size. + */ + if (estimation_rows_to_insert && (estimation_rows_to_insert < 10)) + return (original_size); + /* + If first insert/partition and monotonic partition function, + allow using buffer size originally set. + */ + if (!m_bulk_inserted_rows && + m_part_func_monotonicity_info != NON_MONOTONIC && m_tot_parts > 1) + return original_size; + /* + Allow total buffer used in all partition to go up to 10*read_buffer_size. + 11*read_buffer_size in case of monotonic partition function. + */ + + if (m_tot_parts < 10) + return original_size; + return (original_size * 10 / m_tot_parts); +} + +/* + Try to predict the number of inserts into this partition. + + If less than 10 rows (including 0 which means Unknown) + just give that as a guess + If monotonic partitioning function was used + guess that 50 % of the inserts goes to the first partition + For all other cases, guess on equal distribution between the partitions +*/ +ha_rows Partition_base::guess_bulk_insert_rows() +{ + DBUG_ENTER("guess_bulk_insert_rows"); + + if (estimation_rows_to_insert < 10) + DBUG_RETURN(estimation_rows_to_insert); + + /* If first insert/partition and monotonic partition function, guess 50%. */ + if (!m_bulk_inserted_rows && + m_part_func_monotonicity_info != NON_MONOTONIC && m_tot_parts > 1) + DBUG_RETURN(estimation_rows_to_insert / 2); + + /* Else guess on equal distribution (+1 is to avoid returning 0/Unknown) */ + if (m_bulk_inserted_rows < estimation_rows_to_insert) + DBUG_RETURN( + ((estimation_rows_to_insert - m_bulk_inserted_rows) / m_tot_parts) + + 1); + /* The estimation was wrong, must say 'Unknown' */ + DBUG_RETURN(0); +} + + +/** + Finish a large batch of insert rows. + + @return Operation status. + @retval 0 Success + @retval != 0 Error code +*/ + +int Partition_base::end_bulk_insert() +{ + int error= 0; + uint i; + DBUG_ENTER("Partition_base::end_bulk_insert"); + + if (!bitmap_is_set(&m_bulk_insert_started, m_tot_parts)) + { + DBUG_ASSERT(0); + DBUG_RETURN(error); + } + + for (i= bitmap_get_first_set(&m_bulk_insert_started); i < m_tot_parts; + i= bitmap_get_next_set(&m_bulk_insert_started, i)) + { + int tmp; + if ((tmp= m_file[i]->ha_end_bulk_insert())) + error= tmp; + } + bitmap_clear_all(&m_bulk_insert_started); + DBUG_EXECUTE_IF("Partition_base_end_bulk_insert_fail", { + error= 1; + set_my_errno(EPERM); + }); + DBUG_RETURN(error); +} + + +/**************************************************************************** + MODULE full table scan +****************************************************************************/ + +/** + Initialize partition for random reads. + + rnd_init() is called when the server wants the storage engine to do a + table scan or when the server wants to access data through rnd_pos. + + When scan is used we will scan one handler partition at a time. + When preparing for rnd_pos we will initialize all handler partitions. + No extra cache handling is needed when scanning is not performed. + + Before initializing we will call rnd_end to ensure that we clean up from + any previous incarnation of a table scan. + + @param part_id partition to initialize. + @param scan false for initialize for random reads through rnd_pos() + true for initialize for random scan through rnd_next(). + + @return Operation status. + @retval 0 Success + @retval != 0 Error code +*/ + +int Partition_base::rnd_init_in_part(uint part_id, bool scan) +{ + return m_file[part_id]->ha_rnd_init(scan); +} + + +/** + End of a partition scan. + + @return Operation status. + @retval 0 Success + @retval != 0 Error code +*/ + +int Partition_base::rnd_end_in_part(uint part_id, bool scan) +{ + return m_file[part_id]->ha_rnd_end(); +} + + +/** + Read next row during full partition scan (scan in random row order). + + This is called for each row of the table scan. When you run out of records + you should return HA_ERR_END_OF_FILE. + The Field structure for the table is the key to getting data into buf + in a manner that will allow the server to understand it. + + @param[in] part_id Partition to read from. + @param[in,out] buf buffer that should be filled with data. + + @return Operation status. + @retval 0 Success + @retval != 0 Error code +*/ + +int Partition_base::rnd_next_in_part(uint part_id, uchar *buf) +{ + return m_file[part_id]->ha_rnd_next(buf); +} + + +/** + Save position of current row. + + position() is called after each call to rnd_next() if the data needs + to be ordered. + + The server uses ref to store data. ref_length in the above case is + the size needed to store current_position. ref is just a byte array + that the server will maintain. If you are using offsets to mark rows, then + current_position should be the offset. If it is a primary key like in + InnoDB, then it needs to be a primary key. + + @param record Current record in MySQL Row Format. + + @note m_last_part must be set (normally done by + Partition_helper::return_top_record()). +*/ + +void Partition_base::position_in_last_part(uchar *ref, const uchar *record) +{ + handler *file= m_file[m_last_part]; + file->position(record); + memcpy(ref, file->ref, file->ref_length); + /* MyISAM partitions can have different ref_length depending on MAX_ROWS! */ + uint pad_length= ref_length - PARTITION_BYTES_IN_POS - file->ref_length; + if (pad_length) + memset((ref + PARTITION_BYTES_IN_POS + file->ref_length), 0, pad_length); +} + + +/** + Read row from partition using position. + + This is like rnd_next, but you are given a position to use to determine + the row. The position will be pointing to data of length handler::ref_length + that handler::ref was set by position(record). Tables clustered on primary + key usually use the full primary key as reference (like InnoDB). Heap based + tables usually returns offset in heap file (like MyISAM). + + @param[in] part_id Partition to read from. + @param[in,out] buf Buffer to fill with record in MySQL format. + @param[in] pos Position (data pointed to from ::ref) from position(). + + @return Operation status. + @retval 0 Success + @retval != 0 Error code +*/ + +int Partition_base::rnd_pos_in_part(uint part_id, uchar *buf, uchar *pos) +{ + return m_file[part_id]->ha_rnd_pos(buf, pos); +} + + +/**************************************************************************** + MODULE index scan +****************************************************************************/ +/* + Positions an index cursor to the index specified in the handle. Fetches the + row if available. If the key value is null, begin at the first key of the + index. +*/ + +/** Compare key and rowid. + Helper function for sorting records in the priority queue. + a/b points to table->record[0] rows which must have the + key fields set. The bytes before a and b store the handler::ref. + This is used for comparing/sorting rows first according to + KEY and if same KEY, by handler::ref (rowid). + + @param key_info Null terminated array of index information + @param a Pointer to record+ref in first record + @param b Pointer to record+ref in second record + + @return Return value is SIGN(first_rec - second_rec) + @retval 0 Keys are equal + @retval -1 second_rec is greater than first_rec + @retval +1 first_rec is greater than second_rec +*/ + +static int key_and_ref_cmp(KEY **key_info, uchar *a, uchar *b) +{ + int cmp= key_rec_cmp(key_info, a, b); + if (cmp) + return cmp; + /* + We must compare by handler::ref, which is added before the record, + in the priority queue. + */ + KEY **key= key_info; + uint ref_length= (*key)->table->file->ref_length; + return (*key)->table->file->cmp_ref(a - ref_length, b - ref_length); +} + + +/** + Initialize partition before start of index scan. + + @param part Partition to initialize the index in. + @param inx Index number. + @param sorted Is rows to be returned in sorted order. + + @return Operation status + @retval 0 Success + @retval != 0 Error code +*/ + +int Partition_base::index_init_in_part(uint part, uint keynr, bool sorted) +{ + return m_file[part]->ha_index_init(keynr, sorted); +} + + +/** + End of index scan in a partition. + + index_end_in_part is called at the end of an index scan to clean up any + things needed to clean up. + + @return Operation status. + @retval 0 Success + @retval != 0 Error code +*/ + +int Partition_base::index_end_in_part(uint part) +{ + return m_file[part]->ha_index_end(); +} + + +/** + Read one record in an index scan and start an index scan in one partition. + + index_read_map_in_part starts a new index scan using a start key. + index_read_map_in_part can be restarted without calling index_end on + the previous index scan and without calling index_init. + In this case the index_read_map_in_part is on the same index as the previous + index_scan. This is particularly used in conjunction with multi read ranges. + + @param[in] part Partition to read from. + @param[in,out] buf Read row in MySQL Row Format + @param[in] key Key parts in consecutive order + @param[in] keypart_map Which part of key is used + @param[in] find_flag What type of key condition is used + + @return Operation status. + @retval 0 Success + @retval != 0 Error code +*/ + +int Partition_base::index_read_map_in_part(uint part, uchar *buf, + const uchar * key, + key_part_map keypart_map, + enum ha_rkey_function find_flag) +{ + return m_file[part]->ha_index_read_map(buf, key, keypart_map, find_flag); +} + + +/** + Start an index scan from leftmost record and return first record. + + index_first() asks for the first key in the index. + This is similar to index_read except that there is no start key since + the scan starts from the leftmost entry and proceeds forward with + index_next. + + @param[in] part Partition to read from. + @param[in,out] buf Read row in MySQL Row Format. + + @return Operation status. + @retval 0 Success + @retval != 0 Error code +*/ + +int Partition_base::index_first_in_part(uint part, uchar *buf) +{ + return m_file[part]->ha_index_first(buf); +} + + +/** + Start an index scan from rightmost record and return first record. + + index_last() asks for the last key in the index. + This is similar to index_read except that there is no start key since + the scan starts from the rightmost entry and proceeds forward with + index_prev. + + @param[in] part Partition to read from. + @param[in,out] buf Read row in MySQL Row Format. + + @return Operation status. + @retval 0 Success + @retval != 0 Error code +*/ + +int Partition_base::index_last_in_part(uint part, uchar *buf) +{ + return m_file[part]->ha_index_last(buf); +} + + +/** + Read last using key. + + This is used in join_read_last_key to optimize away an ORDER BY. + Can only be used on indexes supporting HA_READ_ORDER. + + @param[in,out] buf Read row in MySQL Row Format + @param[in] key Key + @param[in] keypart_map Which part of key is used + + @return Operation status. + @retval 0 Success + @retval != 0 Error code +*/ + +int Partition_base::index_read_last_map_in_part(uint part, uchar *buf, + const uchar *key, + key_part_map keypart_map) +{ + return m_file[part]->ha_index_read_last_map(buf, key, keypart_map); +} + + +/** + Read index by key and keymap in a partition. + + @param[in] part Index to read from + @param[in,out] buf Read row in MySQL Row Format + @param[in] index Index to read from + @param[in] key Key + @param[in] keypart_map Which part of key is used + @param[in] find_flag Direction/how to search. + + @return Operation status. + @retval 0 Success + @retval != 0 Error code +*/ + +int Partition_base::index_read_idx_map_in_part( + uint part, uchar *buf, uint index, const uchar *key, + key_part_map keypart_map, enum ha_rkey_function find_flag) +{ + return m_file[part]->ha_index_read_idx_map(buf, index, key, keypart_map, + find_flag); +} + + +/** + Read next record in a forward index scan. + + Used to read forward through the index (left to right, low to high). + + @param[in] part Partition to read from. + @param[in,out] buf Read row in MySQL Row Format. + + @return Operation status. + @retval 0 Success + @retval != 0 Error code +*/ + +int Partition_base::index_next_in_part(uint part, uchar *buf) +{ + return m_file[part]->ha_index_next(buf); +} + + +/** + Read next same record in partition. + + This routine is used to read the next but only if the key is the same + as supplied in the call. + + @param[in] part Partition to read from. + @param[in,out] buf Read row in MySQL Row Format. + @param[in] key Key. + @param[in] keylen Length of key. + + @return Operation status. + @retval 0 Success + @retval != 0 Error code +*/ + +int Partition_base::index_next_same_in_part(uint part, uchar *buf, + const uchar *key, uint length) +{ + return m_file[part]->ha_index_next_same(buf, key, length); +} + + +/** + Read next record when performing index scan backwards. + + Used to read backwards through the index (right to left, high to low). + + @param[in,out] buf Read row in MySQL Row Format. + + @return Operation status. + @retval 0 Success + @retval != 0 Error code +*/ + +int Partition_base::index_prev_in_part(uint part, uchar *buf) +{ + return m_file[part]->ha_index_prev(buf); +} + + +/** + Start a read of one range with start and end key. + + @param part_id Partition to start in. + @param start_key Specification of start key. + @param end_key Specification of end key. + @param eq_range_arg Is it equal range. + @param sorted Should records be returned in sorted order. + + @return Operation status. + @retval 0 Success + @retval != 0 Error code +*/ + +int Partition_base::read_range_first_in_part(uint part_id, uchar *buf, + const key_range *start_key, + const key_range *end_key, + bool eq_range_arg, bool sorted) +{ + int error; + error= m_file[part_id]->read_range_first(start_key, end_key, eq_range_arg, + sorted); + if (!error && buf != nullptr) + { + memcpy(buf, table->record[0], m_rec_length); + } + return error; +} + + +/** + Read next record in read of a range with start and end key in partition. + + @param part Partition to read from. + + @return Operation status. + @retval 0 Success + @retval != 0 Error code +*/ + +int Partition_base::read_range_next_in_part(uint part, uchar *buf) +{ + int error; + error= m_file[part]->read_range_next(); + if (!error && buf != nullptr) + { + memcpy(buf, table->record[0], m_rec_length); + } + return error; +} + +bool Partition_base::has_gap_locks() const +{ + /* Pass the call to each partition */ + for (uint i= 0; i < m_tot_parts; i++) + { + if (!m_file[i]->has_gap_locks()) + return false; + } + return true; +} + +/**************************************************************************** + MODULE information calls +****************************************************************************/ + +/* + These are all first approximations of the extra, info, scan_time + and read_time calls +*/ + +/** + Helper function for sorting according to number of rows in descending order. +*/ + +int Partition_base::compare_number_of_records(Partition_base *me, + const uint32 * a, + const uint32 * b) +{ + handler **file= me->m_file; + /* Note: sorting in descending order! */ + if (file[*a]->stats.records > file[*b]->stats.records) + return -1; + if (file[*a]->stats.records < file[*b]->stats.records) + return 1; + return 0; +} + + +/* + General method to gather info from handler + + SYNOPSIS + info() + flag Specifies what info is requested + + RETURN VALUE + NONE + + DESCRIPTION + ::info() is used to return information to the optimizer. + Currently this table handler doesn't implement most of the fields + really needed. SHOW also makes use of this data + Another note, if your handler doesn't proved exact record count, + you will probably want to have the following in your code: + if (records < 2) + records = 2; + The reason is that the server will optimize for cases of only a single + record. If in a table scan you don't know the number of records + it will probably be better to set records to two so you can return + as many records as you need. + + Along with records a few more variables you may wish to set are: + records + deleted + data_file_length + index_file_length + delete_length + check_time + Take a look at the public variables in handler.h for more information. + + Called in: + filesort.cc + ha_heap.cc + item_sum.cc + opt_sum.cc + sql_delete.cc + sql_delete.cc + sql_derived.cc + sql_select.cc + sql_select.cc + sql_select.cc + sql_select.cc + sql_select.cc + sql_show.cc + sql_show.cc + sql_show.cc + sql_show.cc + sql_table.cc + sql_union.cc + sql_update.cc + + Some flags that are not implemented + HA_STATUS_POS: + This parameter is never used from the MySQL Server. It is checked in a + place in MyISAM so could potentially be used by MyISAM specific + programs. + HA_STATUS_NO_LOCK: + This is declared and often used. It's only used by MyISAM. + It means that MySQL doesn't need the absolute latest statistics + information. This may save the handler from doing internal locks while + retrieving statistics data. +*/ + +int Partition_base::info(uint flag) +{ + uint no_lock_flag= flag & HA_STATUS_NO_LOCK; + uint extra_var_flag= flag & HA_STATUS_VARIABLE_EXTRA; + int res, error= 0; + DBUG_ENTER("Partition_base::info"); + +#ifndef DBUG_OFF + if (bitmap_is_set_all(&(m_part_info->read_partitions))) + DBUG_PRINT("info", ("All partitions are used")); +#endif /* DBUG_OFF */ + if (flag & HA_STATUS_AUTO) + { + DBUG_PRINT("info", ("HA_STATUS_AUTO")); + if (!table->found_next_number_field) + { + stats.auto_increment_value= 0; + } + else + { + /* Must lock to avoid two concurrent initializations. */ + lock_auto_increment(); + if (part_share->auto_inc_initialized) + { + stats.auto_increment_value= part_share->next_auto_inc_val; + } + else + { + error= initialize_auto_increment(no_lock_flag != 0); + } + unlock_auto_increment(); + } + } + if (flag & HA_STATUS_VARIABLE) + { + uint i; + DBUG_PRINT("info", ("HA_STATUS_VARIABLE")); + /* + Calculates statistical variables + records: Estimate of number records in table + We report sum (always at least 2 if not empty) + deleted: Estimate of number holes in the table due to + deletes + We report sum + data_file_length: Length of data file, in principle bytes in table + We report sum + index_file_length: Length of index file, in principle bytes in + indexes in the table + We report sum + delete_length: Length of free space easily used by new records in table + We report sum + mean_record_length:Mean record length in the table + We calculate this + check_time: Time of last check (only applicable to MyISAM) + We report last time of all underlying handlers + */ + handler *file; + stats.records= 0; + stats.deleted= 0; + stats.data_file_length= 0; + stats.index_file_length= 0; + stats.check_time= 0; + stats.delete_length= 0; + for (i= m_part_info->get_first_used_partition(); i < m_tot_parts; + i= m_part_info->get_next_used_partition(i)) + { + file= m_file[i]; + res= file->info(HA_STATUS_VARIABLE | no_lock_flag | extra_var_flag); + if (res && !error) + { + error= res; + } + stats.records+= file->stats.records; + stats.deleted+= file->stats.deleted; + stats.data_file_length+= file->stats.data_file_length; + stats.index_file_length+= file->stats.index_file_length; + stats.delete_length+= file->stats.delete_length; + if (file->stats.check_time > stats.check_time) + stats.check_time= file->stats.check_time; + } + if (stats.records && stats.records < 2 && + !(m_file[0]->ha_table_flags() & HA_STATS_RECORDS_IS_EXACT)) + stats.records= 2; + if (stats.records > 0) + stats.mean_rec_length= (ulong)(stats.data_file_length / stats.records); + else + stats.mean_rec_length= 0; + } + if (flag & HA_STATUS_CONST) + { + DBUG_PRINT("info", ("HA_STATUS_CONST")); + /* + Recalculate loads of constant variables. MyISAM also sets things + directly on the table share object. + + Check whether this should be fixed since handlers should not + change things directly on the table object. + + Monty comment: This should NOT be changed! It's the handlers + responsibility to correct table->s->keys_xxxx information if keys + have been disabled. + + The most important parameters set here is records per key on + all indexes. block_size and primar key ref_length. + + For each index there is an array of rec_per_key. + As an example if we have an index with three attributes a,b and c + we will have an array of 3 rec_per_key. + rec_per_key[0] is an estimate of number of records divided by + number of unique values of the field a. + rec_per_key[1] is an estimate of the number of records divided + by the number of unique combinations of the fields a and b. + rec_per_key[2] is an estimate of the number of records divided + by the number of unique combinations of the fields a,b and c. + + Many handlers only set the value of rec_per_key when all fields + are bound (rec_per_key[2] in the example above). + + If the handler doesn't support statistics, it should set all of the + above to 0. + + We first scans through all partitions to get the one holding most rows. + We will then allow the handler with the most rows to set + the rec_per_key and use this as an estimate on the total table. + + max_data_file_length: Maximum data file length + We ignore it, is only used in + SHOW TABLE STATUS + max_index_file_length: Maximum index file length + We ignore it since it is never used + block_size: Block size used + We set it to the value of the first handler + ref_length: We set this to the value calculated + and stored in local object + create_time: Creation time of table + + So we calculate these constants by using the variables from the + handler with most rows. + */ + handler * file, **file_array; + ulonglong max_records= 0; + uint32 i= 0; + uint32 handler_instance= 0; + + file_array= m_file; + do + { + file= *file_array; + /* Get variables if not already done */ + if (!(flag & HA_STATUS_VARIABLE) || + !m_part_info->is_partition_used(file_array - m_file)) + { + res= file->info(HA_STATUS_VARIABLE | no_lock_flag | extra_var_flag); + if (res && !error) + { + error= res; + } + } + if (file->stats.records > max_records) + { + max_records= file->stats.records; + handler_instance= i; + } + i++; + } while (*(++file_array)); + /* + Sort the array of part_ids by number of records in + in descending order. + */ + my_qsort2((void *)m_part_ids_sorted_by_num_of_records, m_tot_parts, + sizeof(uint32), (qsort2_cmp)compare_number_of_records, this); + + file= m_file[handler_instance]; + res= file->info(HA_STATUS_CONST | no_lock_flag); + if (res && !error) + { + error= res; + } + stats.block_size= file->stats.block_size; + stats.create_time= file->stats.create_time; + } + if (flag & HA_STATUS_ERRKEY) + { + handler *file= m_file[m_last_part]; + DBUG_PRINT("info", ("info: HA_STATUS_ERRKEY")); + /* + This flag is used to get index number of the unique index that + reported duplicate key + We will report the errkey on the last handler used and ignore the rest + Note: all engines does not support HA_STATUS_ERRKEY, so set errkey. + */ + file->errkey= errkey; + res= file->info(HA_STATUS_ERRKEY | no_lock_flag); + if (res && !error) + { + error= res; + } + errkey= file->errkey; + } + if (flag & HA_STATUS_TIME) + { + DBUG_PRINT("info", ("info: HA_STATUS_TIME")); + /* + This flag is used to set the latest update time of the table. + Used by SHOW commands + We will report the maximum of these times + */ + stats.update_time= 0; + for (uint i= m_part_info->get_first_used_partition(); i < m_tot_parts; + i= m_part_info->get_next_used_partition(i)) + { + handler *file= m_file[i]; + res= file->info(HA_STATUS_TIME | no_lock_flag); + if (res && !error) + { + error= res; + } + if (file->stats.update_time > stats.update_time) + stats.update_time= file->stats.update_time; + } + } + DBUG_RETURN(error); +} + + +void Partition_base::get_dynamic_partition_info(ha_statistics *stat_info, + ha_checksum * check_sum, + uint part_id) +{ + handler *file= m_file[part_id]; + DBUG_ASSERT(bitmap_is_set(&(m_part_info->read_partitions), part_id)); + file->info(HA_STATUS_TIME | HA_STATUS_VARIABLE | HA_STATUS_VARIABLE_EXTRA | + HA_STATUS_NO_LOCK); + + stat_info->records= file->stats.records; + stat_info->mean_rec_length= file->stats.mean_rec_length; + stat_info->data_file_length= file->stats.data_file_length; + stat_info->max_data_file_length= file->stats.max_data_file_length; + stat_info->index_file_length= file->stats.index_file_length; + stat_info->delete_length= file->stats.delete_length; + stat_info->create_time= static_cast(file->stats.create_time); + stat_info->update_time= file->stats.update_time; + stat_info->check_time= file->stats.check_time; + *check_sum= 0; + if (file->ha_table_flags() & HA_HAS_CHECKSUM) + *check_sum= file->checksum(); + return; +} + + +/** + General function to prepare handler for certain behavior. + + @param[in] operation operation to execute + + @return status + @retval 0 success + @retval >0 error code + + @detail + + extra() is called whenever the server wishes to send a hint to + the storage engine. The MyISAM engine implements the most hints. + + We divide the parameters into the following categories: + 1) Operations used by most handlers + 2) Operations used by some non-MyISAM handlers + 3) Operations used only by MyISAM + 4) Operations only used by temporary tables for query processing + 5) Operations only used by MyISAM internally + 6) Operations not used at all + 7) Operations only used by federated tables for query processing + 8) Operations only used by NDB + 9) Operations only used by MERGE + 10) Operations only used by InnoDB + 11) Operations only used by partitioning + + The partition handler need to handle category 1), 2), 3), 10) and 11). + + 1) Operations used by most handlers + ----------------------------------- + HA_EXTRA_RESET: + This option is used by most handlers and it resets the handler state + to the same state as after an open call. This includes releasing + any READ CACHE or WRITE CACHE or other internal buffer used. + + It is called from the reset method in the handler interface. There are + three instances where this is called. + 1) After completing a INSERT ... SELECT ... query the handler for the + table inserted into is reset + 2) It is called from close_thread_table which in turn is called from + close_thread_tables except in the case where the tables are locked + in which case ha_commit_stmt is called instead. + It is only called from here if refresh_version hasn't changed and the + table is not an old table when calling close_thread_table. + close_thread_tables is called from many places as a general clean up + function after completing a query. + 3) It is called when deleting the QUICK_RANGE_SELECT object if the + QUICK_RANGE_SELECT object had its own handler object. It is called + immediatley before close of this local handler object. + HA_EXTRA_KEYREAD: + HA_EXTRA_NO_KEYREAD: + These parameters are used to provide an optimisation hint to the handler. + If HA_EXTRA_KEYREAD is set it is enough to read the index fields, for + many handlers this means that the index-only scans can be used and it + is not necessary to use the real records to satisfy this part of the + query. Index-only scans is a very important optimisation for disk-based + indexes. For main-memory indexes most indexes contain a reference to the + record and thus KEYREAD only says that it is enough to read key fields. + HA_EXTRA_NO_KEYREAD disables this for the handler, also HA_EXTRA_RESET + will disable this option. + The handler will set HA_KEYREAD_ONLY in its table flags to indicate this + feature is supported. + HA_EXTRA_FLUSH: + Indication to flush tables to disk, is supposed to be used to + ensure disk based tables are flushed at end of query execution. + Currently is never used. + HA_EXTRA_PREPARE_FOR_RENAME: + Informs the handler we are about to attempt a rename of the table. + For handlers that have share open files (MyISAM key-file and + Archive writer) they must close the files before rename is possible + on Windows. This handler will only forward this call, since during + ALTER TABLE ... ADD/DROP/REORGANIZE/COALESCE/... PARTITION we will + close and remove all instances before rename/drop and does not need + special treatment for this flag. + HA_EXTRA_FORCE_REOPEN: + Only used by MyISAM and Archive, called when altering table, + closing tables to enforce a reopen of the table files. + This handler will only forward this call, since during + ALTER TABLE ... ADD/DROP/REORGANIZE/COALESCE/... PARTITION we will + close and remove all instances before rename/drop and does not need + special treatment for this flag. + + 2) Operations used by some non-MyISAM handlers + ---------------------------------------------- + HA_EXTRA_KEYREAD_PRESERVE_FIELDS: + This is a strictly InnoDB feature that is more or less undocumented. + When it is activated InnoDB copies field by field from its fetch + cache instead of all fields in one memcpy. Have no idea what the + purpose of this is. + Cut from include/my_base.h: + When using HA_EXTRA_KEYREAD, overwrite only key member fields and keep + other fields intact. When this is off (by default) InnoDB will use memcpy + to overwrite entire row. + HA_EXTRA_IGNORE_DUP_KEY: + HA_EXTRA_NO_IGNORE_DUP_KEY: + Informs the handler to we will not stop the transaction if we get an + duplicate key errors during insert/upate. + Always called in pair, triggered by INSERT IGNORE and other similar + SQL constructs. + Not used by MyISAM. + + 3) Operations used only by MyISAM + --------------------------------- + HA_EXTRA_NORMAL: + Only used in MyISAM to reset quick mode, not implemented by any other + handler. Quick mode is also reset in MyISAM by HA_EXTRA_RESET. + + It is called after completing a successful DELETE query if the QUICK + option is set. + + HA_EXTRA_QUICK: + When the user does DELETE QUICK FROM table where-clause; this extra + option is called before the delete query is performed and + HA_EXTRA_NORMAL is called after the delete query is completed. + Temporary tables used internally in MySQL always set this option + + The meaning of quick mode is that when deleting in a B-tree no merging + of leafs is performed. This is a common method and many large DBMS's + actually only support this quick mode since it is very difficult to + merge leaves in a tree used by many threads concurrently. + + HA_EXTRA_CACHE: + This flag is usually set with extra_opt along with a cache size. + The size of this buffer is set by the user variable + record_buffer_size. The value of this cache size is the amount of + data read from disk in each fetch when performing a table scan. + This means that before scanning a table it is normal to call + extra with HA_EXTRA_CACHE and when the scan is completed to call + HA_EXTRA_NO_CACHE to release the cache memory. + + Some special care is taken when using this extra parameter since there + could be a write ongoing on the table in the same statement. In this + one has to take special care since there might be a WRITE CACHE as + well. HA_EXTRA_CACHE specifies using a READ CACHE and using + READ CACHE and WRITE CACHE at the same time is not possible. + + Only MyISAM currently use this option. + + It is set when doing full table scans using rr_sequential and + reset when completing such a scan with end_read_record + (resetting means calling extra with HA_EXTRA_NO_CACHE). + + It is set in filesort.cc for MyISAM internal tables and it is set in + a multi-update where HA_EXTRA_CACHE is called on a temporary result + table and after that ha_rnd_init(0) on table to be updated + and immediately after that HA_EXTRA_NO_CACHE on table to be updated. + + Apart from that it is always used from init_read_record but not when + used from UPDATE statements. It is not used from DELETE statements + with ORDER BY and LIMIT but it is used in normal scan loop in DELETE + statements. The reason here is that DELETE's in MyISAM doesn't move + existings data rows. + + It is also set in copy_data_between_tables when scanning the old table + to copy over to the new table. + And it is set in join_init_read_record where quick objects are used + to perform a scan on the table. In this case the full table scan can + even be performed multiple times as part of the nested loop join. + + For purposes of the partition handler it is obviously necessary to have + special treatment of this extra call. If we would simply pass this + extra call down to each handler we would allocate + cache size * no of partitions amount of memory and this is not + necessary since we will only scan one partition at a time when doing + full table scans. + + Thus we treat it by first checking whether we have MyISAM handlers in + the table, if not we simply ignore the call and if we have we will + record the call but will not call any underlying handler yet. Then + when performing the sequential scan we will check this recorded value + and call extra_opt whenever we start scanning a new partition. + + HA_EXTRA_NO_CACHE: + When performing a UNION SELECT HA_EXTRA_NO_CACHE is called from the + flush method in the Query_result_union class. + See HA_EXTRA_RESET_STATE for use in conjunction with delete_all_rows(). + + It should be ok to call HA_EXTRA_NO_CACHE on all underlying handlers + if they are MyISAM handlers. Other handlers we can ignore the call + for. If no cache is in use they will quickly return after finding + this out. And we also ensure that all caches are disabled and no one + is left by mistake. + In the future this call will probably be deleted and we will instead call + ::reset(); + + HA_EXTRA_WRITE_CACHE: + See above, called from various places. It is mostly used when we + do INSERT ... SELECT + No special handling to save cache space is developed currently. + + HA_EXTRA_PREPARE_FOR_UPDATE: + This is called as part of a multi-table update. When the table to be + updated is also scanned then this informs MyISAM handler to drop any + caches if dynamic records are used (fixed size records do not care + about this call). We pass this along to the first partition to scan, and + flag that it is to be called after HA_EXTRA_CACHE when moving to the next + partition to scan. + + HA_EXTRA_PREPARE_FOR_DROP: + Only used by MyISAM, called in preparation for a DROP TABLE. + It's used mostly by Windows that cannot handle dropping an open file. + On other platforms it has the same effect as HA_EXTRA_FORCE_REOPEN. + + HA_EXTRA_READCHECK: + HA_EXTRA_NO_READCHECK: + Only one call to HA_EXTRA_NO_READCHECK from ha_open where it says that + this is not needed in SQL. The reason for this call is that MyISAM sets + the READ_CHECK_USED in the open call so the call is needed for MyISAM + to reset this feature. + The idea with this parameter was to inform of doing/not doing a read + check before applying an update. Since SQL always performs a read before + applying the update No Read Check is needed in MyISAM as well. + + This is a cut from Docs/myisam.txt + Sometimes you might want to force an update without checking whether + another user has changed the record since you last read it. This is + somewhat dangerous, so it should ideally not be used. That can be + accomplished by wrapping the mi_update() call in two calls to mi_extra(), + using these functions: + HA_EXTRA_NO_READCHECK=5 No readcheck on update + HA_EXTRA_READCHECK=6 Use readcheck (def) + + + 4) Operations only used by temporary tables for query processing + ---------------------------------------------------------------- + HA_EXTRA_RESET_STATE: + Same as reset() except that buffers are not released. If there is + a READ CACHE it is reinit'ed. A cache is reinit'ed to restart reading + or to change type of cache between READ CACHE and WRITE CACHE. + + This extra function is always called immediately before calling + delete_all_rows on the handler for temporary tables. + There are cases however when HA_EXTRA_RESET_STATE isn't called in + a similar case for a temporary table in sql_union.cc and in two other + cases HA_EXTRA_NO_CACHE is called before and HA_EXTRA_WRITE_CACHE + called afterwards. + The case with HA_EXTRA_NO_CACHE and HA_EXTRA_WRITE_CACHE means + disable caching, delete all rows and enable WRITE CACHE. This is + used for temporary tables containing distinct sums and a + functional group. + + The only case that delete_all_rows is called on non-temporary tables + is in sql_delete.cc when DELETE FROM table; is called by a user. + In this case no special extra calls are performed before or after this + call. + + The partition handler should not need to bother about this one. It + should never be called. + + HA_EXTRA_NO_ROWS: + Don't insert rows indication to HEAP and MyISAM, only used by temporary + tables used in query processing. + Not handled by partition handler. + + 5) Operations only used by MyISAM internally + -------------------------------------------- + HA_EXTRA_REINIT_CACHE: + This call reinitializes the READ CACHE described above if there is one + and otherwise the call is ignored. + + We can thus safely call it on all underlying handlers if they are + MyISAM handlers. It is however never called so we don't handle it at all. + HA_EXTRA_FLUSH_CACHE: + Flush WRITE CACHE in MyISAM. It is only from one place in the code. + This is in sql_insert.cc where it is called if the table_flags doesn't + contain HA_DUPLICATE_POS. The only handler having the HA_DUPLICATE_POS + set is the MyISAM handler and so the only handler not receiving this + call is MyISAM. + Thus in effect this call is called but never used. Could be removed + from sql_insert.cc + HA_EXTRA_NO_USER_CHANGE: + Only used by MyISAM, never called. + Simulates lock_type as locked. + HA_EXTRA_WAIT_LOCK: + HA_EXTRA_WAIT_NOLOCK: + Only used by MyISAM, called from MyISAM handler but never from server + code on top of the handler. + Sets lock_wait on/off + HA_EXTRA_NO_KEYS: + Only used MyISAM, only used internally in MyISAM handler, never called + from server level. + HA_EXTRA_KEYREAD_CHANGE_POS: + HA_EXTRA_REMEMBER_POS: + HA_EXTRA_RESTORE_POS: + HA_EXTRA_PRELOAD_BUFFER_SIZE: + HA_EXTRA_CHANGE_KEY_TO_DUP: + HA_EXTRA_CHANGE_KEY_TO_UNIQUE: + Only used by MyISAM, never called. + + 6) Operations not used at all + ----------------------------- + HA_EXTRA_KEY_CACHE: + HA_EXTRA_NO_KEY_CACHE: + This parameters are no longer used and could be removed. + + 7) Operations only used by federated tables for query processing + ---------------------------------------------------------------- + HA_EXTRA_INSERT_WITH_UPDATE: + Inform handler that an "INSERT...ON DUPLICATE KEY UPDATE" will be + executed. This condition is unset by HA_EXTRA_NO_IGNORE_DUP_KEY. + + 8) Operations only used by NDB + ------------------------------ + HA_EXTRA_DELETE_CANNOT_BATCH: + HA_EXTRA_UPDATE_CANNOT_BATCH: + Inform handler that delete_row()/update_row() cannot batch deletes/updates + and should perform them immediately. This may be needed when table has + AFTER DELETE/UPDATE triggers which access to subject table. + These flags are reset by the handler::extra(HA_EXTRA_RESET) call. + + 9) Operations only used by MERGE + ------------------------------ + HA_EXTRA_ADD_CHILDREN_LIST: + HA_EXTRA_ATTACH_CHILDREN: + HA_EXTRA_IS_ATTACHED_CHILDREN: + HA_EXTRA_DETACH_CHILDREN: + Special actions for MERGE tables. Ignore. + + 10) Operations only used by InnoDB + ---------------------------------- + HA_EXTRA_EXPORT: + Prepare table for export + (e.g. quiesce the table and write table metadata). + + 11) Operations only used by partitioning + ------------------------------ + HA_EXTRA_SECONDARY_SORT_ROWID: + INDEX_MERGE type of execution, needs to do secondary sort by + ROWID (handler::ref). +*/ + +int Partition_base::extra(enum ha_extra_function operation) +{ + DBUG_ENTER("Partition_base:extra"); + DBUG_PRINT("info", ("operation: %d", (int)operation)); + + switch (operation) + { + /* Category 1), used by most handlers */ + case HA_EXTRA_KEYREAD: + case HA_EXTRA_NO_KEYREAD: + case HA_EXTRA_FLUSH: + case HA_EXTRA_PREPARE_FOR_RENAME: + case HA_EXTRA_FORCE_REOPEN: + DBUG_RETURN(loop_extra(operation)); + break; + + /* Category 2), used by non-MyISAM handlers */ + case HA_EXTRA_IGNORE_DUP_KEY: + case HA_EXTRA_NO_IGNORE_DUP_KEY: + case HA_EXTRA_KEYREAD_PRESERVE_FIELDS: + { + DBUG_RETURN(loop_extra(operation)); + break; + } + + /* Category 3), used by MyISAM handlers */ + case HA_EXTRA_PREPARE_FOR_UPDATE: + case HA_EXTRA_NORMAL: + case HA_EXTRA_QUICK: + case HA_EXTRA_PREPARE_FOR_DROP: + case HA_EXTRA_FLUSH_CACHE: + case HA_EXTRA_NO_READCHECK: + case HA_EXTRA_CACHE: + case HA_EXTRA_NO_CACHE: + case HA_EXTRA_WRITE_CACHE: + { + /* Ignore MyISAM-specific extras */ + break; + } + case HA_EXTRA_IGNORE_NO_KEY: + case HA_EXTRA_NO_IGNORE_NO_KEY: + { + /* + Ignore as these are specific to NDB for handling + idempotency + */ + break; + } + case HA_EXTRA_WRITE_CAN_REPLACE: + case HA_EXTRA_WRITE_CANNOT_REPLACE: + { + /* + Informs handler that write_row() can replace rows which conflict + with row being inserted by PK/unique key without reporting error + to the SQL-layer. + + This optimization is not safe for partitioned table in general case + since we may have to put new version of row into partition which is + different from partition in which old version resides (for example + when we partition by non-PK column or by some column which is not + part of unique key which were violated). + And since NDB which is the only engine at the moment that supports + this optimization handles partitioning on its own we simple disable + it here. (BTW for NDB this optimization is safe since it supports + only KEY partitioning and won't use this optimization for tables + which have additional unique constraints). + */ + break; + } + /* Category 7), used by federated handlers */ + case HA_EXTRA_INSERT_WITH_UPDATE: + DBUG_RETURN(loop_extra(operation)); + /* Category 8) Operations only used by NDB */ + case HA_EXTRA_DELETE_CANNOT_BATCH: + case HA_EXTRA_UPDATE_CANNOT_BATCH: + { + /* Currently only NDB use the *_CANNOT_BATCH */ + break; + } + /* Category 9) Operations only used by MERGE */ + case HA_EXTRA_ADD_CHILDREN_LIST: + case HA_EXTRA_ATTACH_CHILDREN: + case HA_EXTRA_IS_ATTACHED_CHILDREN: + case HA_EXTRA_DETACH_CHILDREN: + { + /* Special actions for MERGE tables. Ignore. */ + break; + } + /* + http://dev.mysql.com/doc/refman/5.1/en/partitioning-limitations.html + says we no longer support logging to partitioned tables, so we fail + here. + */ + case HA_EXTRA_MARK_AS_LOG_TABLE: + DBUG_RETURN(ER_UNSUPORTED_LOG_ENGINE); + /* Category 10), used by InnoDB handlers */ + case HA_EXTRA_EXPORT: + DBUG_RETURN(loop_extra(operation)); + /* Category 11) Operations only used by partitioning. */ + case HA_EXTRA_SECONDARY_SORT_ROWID: + { + // TODO: Remove this and add a flag to index_init instead, + // so we can avoid allocating ref_length bytes for every used partition + // in init_record_priority_queue()! + /* index_init(sorted=true) must have been called! */ + DBUG_ASSERT(m_ordered); + DBUG_ASSERT(m_ordered_rec_buffer); + /* No index_read call must have been done! */ + DBUG_ASSERT(m_queue->empty()); + /* If not PK is set as secondary sort, do secondary sort by rowid/ref. */ + if (!m_curr_key_info[1]) + { + m_ref_usage= Partition_helper::REF_USED_FOR_SORT; + m_queue->m_fun= key_and_ref_cmp; + } + break; + } + default: + { + /* Temporary crash to discover what is wrong */ + DBUG_ASSERT(0); + break; + } + } + DBUG_RETURN(0); +} + + +/** + Special extra call to reset extra parameters + + @return Operation status. + @retval >0 Error code + @retval 0 Success + + @note Called at end of each statement to reset buffers. + To avoid excessive calls, the m_partitions_to_reset bitmap keep records + of which partitions that have been used in extra(), external_lock() or + start_stmt() and is needed to be called. +*/ + +int Partition_base::reset(void) +{ + int result= 0; + int tmp; + uint i; + DBUG_ENTER("Partition_base::reset"); + + for (i= bitmap_get_first_set(&m_partitions_to_reset); i < m_tot_parts; + i= bitmap_get_next_set(&m_partitions_to_reset, i)) + { + if ((tmp= m_file[i]->ha_reset())) + result= tmp; + } + bitmap_clear_all(&m_partitions_to_reset); + DBUG_RETURN(result); +} + +/* + Call extra on all partitions + + SYNOPSIS + loop_extra() + operation extra operation type + + RETURN VALUE + >0 Error code + 0 Success +*/ + +int Partition_base::loop_extra(enum ha_extra_function operation) +{ + int result= 0, tmp; + uint i; + DBUG_ENTER("Partition_base::loop_extra()"); + + for (i= bitmap_get_first_set(&m_part_info->lock_partitions); + i < m_tot_parts; + i= bitmap_get_next_set(&m_part_info->lock_partitions, i)) + { + if ((tmp= m_file[i]->extra(operation))) + result= tmp; + } + /* Add all used partitions to be called in reset(). */ + bitmap_union(&m_partitions_to_reset, &m_part_info->lock_partitions); + DBUG_RETURN(result); +} + + +/**************************************************************************** + MODULE optimiser support +****************************************************************************/ + +/** + Get keys to use for scanning. + + @return key_map of keys usable for scanning + + @note No need to use read_partitions here, since it does not depend on + which partitions is used, only which storage engine used. +*/ + +const key_map *Partition_base::keys_to_use_for_scanning() +{ + DBUG_ENTER("Partition_base::keys_to_use_for_scanning"); + DBUG_RETURN(m_file[0]->keys_to_use_for_scanning()); +} + + +/** + Minimum number of rows to base optimizer estimate on. +*/ + +ha_rows Partition_base::min_rows_for_estimate() +{ + uint i, max_used_partitions, tot_used_partitions; + DBUG_ENTER("Partition_base::min_rows_for_estimate"); + + tot_used_partitions= m_part_info->num_partitions_used(); + + /* + All partitions might have been left as unused during partition pruning + due to, for example, an impossible WHERE condition. Nonetheless, the + optimizer might still attempt to perform (e.g. range) analysis where an + estimate of the the number of rows is calculated using records_in_range. + Hence, to handle this and other possible cases, use zero as the minimum + number of rows to base the estimate on if no partition is being used. + */ + if (!tot_used_partitions) + DBUG_RETURN(0); + + /* + Allow O(log2(tot_partitions)) increase in number of used partitions. + This gives O(tot_rows/log2(tot_partitions)) rows to base the estimate on. + I.e when the total number of partitions doubles, allow one more + partition to be checked. + */ + i= 2; + max_used_partitions= 1; + while (i < m_tot_parts) + { + max_used_partitions++; + i= i << 1; + } + if (max_used_partitions > tot_used_partitions) + max_used_partitions= tot_used_partitions; + + /* stats.records is already updated by the info(HA_STATUS_VARIABLE) call. */ + DBUG_PRINT("info", ("max_used_partitions: %u tot_rows: %lu", + max_used_partitions, (ulong)stats.records)); + DBUG_PRINT( + "info", + ("tot_used_partitions: %u min_rows_to_check: %lu", tot_used_partitions, + (ulong)stats.records * max_used_partitions / tot_used_partitions)); + DBUG_RETURN(stats.records * max_used_partitions / tot_used_partitions); +} + + +/** + Get the biggest used partition. + + Starting at the N:th biggest partition and skips all non used + partitions, returning the biggest used partition found + + @param[in,out] part_index Skip the *part_index biggest partitions + + @return The biggest used partition with index not lower than *part_index. + @retval NO_CURRENT_PART_ID No more partition used. + @retval != NO_CURRENT_PART_ID partition id of biggest used partition with + index >= *part_index supplied. Note that + *part_index will be updated to the next + partition index to use. +*/ + +uint Partition_base::get_biggest_used_partition(uint *part_index) +{ + uint part_id; + while ((*part_index) < m_tot_parts) + { + part_id= m_part_ids_sorted_by_num_of_records[(*part_index)++]; + if (m_part_info->is_partition_used(part_id)) + return part_id; + } + return NO_CURRENT_PART_ID; +} + + +/* + Return time for a scan of the table + + SYNOPSIS + scan_time() + + RETURN VALUE + time for scan +*/ + +double Partition_base::scan_time() +{ + double scan_time= 0; + uint i; + DBUG_ENTER("Partition_base::scan_time"); + + for (i= m_part_info->get_first_used_partition(); i < m_tot_parts; + i= m_part_info->get_next_used_partition(i)) + scan_time+= m_file[i]->scan_time(); + DBUG_RETURN(scan_time); +} + + +/** + Find number of records in a range. + @param inx Index number + @param min_key Start of range + @param max_key End of range + + @return Number of rows in range. + + Given a starting key, and an ending key estimate the number of rows that + will exist between the two. max_key may be empty which in case determine + if start_key matches any rows. +*/ + +ha_rows Partition_base::records_in_range(uint inx, key_range *min_key, + key_range *max_key) +{ + ha_rows min_rows_to_check, rows, estimated_rows= 0, checked_rows= 0; + uint partition_index= 0, part_id; + DBUG_ENTER("Partition_base::records_in_range"); + + min_rows_to_check= min_rows_for_estimate(); + + while ((part_id= get_biggest_used_partition(&partition_index)) != + NO_CURRENT_PART_ID) + { + rows= m_file[part_id]->records_in_range(inx, min_key, max_key); + + DBUG_PRINT("info", ("part %u match %lu rows of %lu", part_id, (ulong)rows, + (ulong)m_file[part_id]->stats.records)); + + if (rows == HA_POS_ERROR) + DBUG_RETURN(HA_POS_ERROR); + estimated_rows+= rows; + checked_rows+= m_file[part_id]->stats.records; + /* + Returning 0 means no rows can be found, so we must continue + this loop as long as we have estimated_rows == 0. + Also many engines return 1 to indicate that there may exist + a matching row, we do not normalize this by dividing by number of + used partitions, but leave it to be returned as a sum, which will + reflect that we will need to scan each partition's index. + + Note that this statistics may not always be correct, so we must + continue even if the current partition has 0 rows, since we might have + deleted rows from the current partition, or inserted to the next + partition. + */ + if (estimated_rows && checked_rows && checked_rows >= min_rows_to_check) + { + DBUG_PRINT( + "info", + ("records_in_range(inx %u): %lu (%lu * %lu / %lu)", inx, + (ulong)(estimated_rows * stats.records / checked_rows), + (ulong)estimated_rows, (ulong)stats.records, (ulong)checked_rows)); + DBUG_RETURN(estimated_rows * stats.records / checked_rows); + } + } + DBUG_PRINT("info", + ("records_in_range(inx %u): %lu", inx, (ulong)estimated_rows)); + DBUG_RETURN(estimated_rows); +} + + +/** + Estimate upper bound of number of rows. + + @return Number of rows. +*/ + +ha_rows Partition_base::estimate_rows_upper_bound() +{ + ha_rows rows, tot_rows= 0; + handler **file= m_file; + DBUG_ENTER("Partition_base::estimate_rows_upper_bound"); + + do + { + if (m_part_info->is_partition_used(file - m_file)) + { + rows= (*file)->estimate_rows_upper_bound(); + if (rows == HA_POS_ERROR) + DBUG_RETURN(HA_POS_ERROR); + tot_rows+= rows; + } + } while (*(++file)); + DBUG_RETURN(tot_rows); +} + + +/* + Get time to read + + SYNOPSIS + read_time() + index Index number used + ranges Number of ranges + rows Number of rows + + RETURN VALUE + time for read + + DESCRIPTION + This will be optimised later to include whether or not the index can + be used with partitioning. To achieve we need to add another parameter + that specifies how many of the index fields that are bound in the ranges. + Possibly added as a new call to handlers. +*/ + +double Partition_base::read_time(uint index, uint ranges, ha_rows rows) +{ + DBUG_ENTER("Partition_base::read_time"); + + DBUG_RETURN(m_file[0]->read_time(index, ranges, rows)); +} + + +/** + Number of rows in table. see handler.h + @param[out] num_rows Number of records in the table (after pruning!) + @return possible error code. +*/ + +int Partition_base::records(ha_rows *num_rows) +{ + ha_rows tot_rows= 0; + uint i; + DBUG_ENTER("Partition_base::records"); + + for (i= m_part_info->get_first_used_partition(); i < m_tot_parts; + i= m_part_info->get_next_used_partition(i)) + { + int error= m_file[i]->ha_records(num_rows); + if (error != 0) + DBUG_RETURN(error); + tot_rows+= *num_rows; + } + *num_rows= tot_rows; + DBUG_RETURN(0); +} + + +/* + Is it ok to switch to a new engine for this table + + SYNOPSIS + can_switch_engine() + + RETURN VALUE + true Ok + false Not ok + + DESCRIPTION + Used to ensure that tables with foreign key constraints are not moved + to engines without foreign key support. +*/ + +bool Partition_base::can_switch_engines() +{ + handler **file; + DBUG_ENTER("Partition_base::can_switch_engines"); + + file= m_file; + do + { + if (!(*file)->can_switch_engines()) + { + DBUG_ASSERT(0); // A Partition_base table should never have FKs!!! + DBUG_RETURN(false); + } + } while (*(++file)); + DBUG_RETURN(true); +} + + +/* + Is table cache supported + + SYNOPSIS + table_cache_type() + +*/ + +uint8 Partition_base::table_cache_type() +{ + DBUG_ENTER("Partition_base::table_cache_type"); + + DBUG_RETURN(m_file[0]->table_cache_type()); +} + + +/**************************************************************************** + MODULE print messages +****************************************************************************/ + +const char *Partition_base::index_type(uint inx) +{ + uint first_used_partition; + DBUG_ENTER("Partition_base::index_type"); + + first_used_partition= m_part_info->get_first_used_partition(); + + if (first_used_partition == MY_BIT_NONE) + { + DBUG_ASSERT(0); // How can this happen? + DBUG_RETURN(handler::index_type(inx)); + } + + DBUG_RETURN(m_file[first_used_partition]->index_type(inx)); +} + + +enum row_type Partition_base::get_row_type() const +{ + uint i; + enum row_type type; + DBUG_ENTER("Partition_base::get_row_type"); + + i= m_part_info->get_first_used_partition(); + DBUG_ASSERT(i < m_tot_parts); + if (i >= m_tot_parts) + DBUG_RETURN(ROW_TYPE_NOT_USED); + + type= m_file[i]->get_row_type(); + DBUG_PRINT("info", ("partition %u, row_type: %d", i, type)); + + for (i= bitmap_get_next_set(&m_part_info->lock_partitions, i); + i < m_tot_parts; + i= bitmap_get_next_set(&m_part_info->lock_partitions, i)) + { + enum row_type part_type= m_file[i]->get_row_type(); + DBUG_PRINT("info", ("partition %u, row_type: %d", i, type)); + if (part_type != type) + DBUG_RETURN(ROW_TYPE_NOT_USED); + } + + DBUG_RETURN(type); +} + +void Partition_base::print_error(int error, myf errflag) +{ + DBUG_ENTER("Partition_base::print_error"); + if (print_partition_error(error, errflag)) + { + /* Not a partitioning error. */ + /* In case m_file has not been initialized, like in bug#42438 */ + if (m_file) + { + if (m_last_part >= m_tot_parts) + { + m_last_part= 0; + } + m_file[m_last_part]->print_error(error, errflag); + } + else + handler::print_error(error, errflag); + } + DBUG_VOID_RETURN; +} + + +bool Partition_base::get_error_message(int error, String *buf) +{ + DBUG_ENTER("Partition_base::get_error_message"); + + /* Should probably look for my own errors first */ + + /* In case m_file has not been initialized, like in bug#42438 */ + if (m_file) + DBUG_RETURN(m_file[m_last_part]->get_error_message(error, buf)); + DBUG_RETURN(handler::get_error_message(error, buf)); +} + + +/**************************************************************************** + MODULE in-place ALTER +****************************************************************************/ +/** + Get table flags. +*/ + +handler::Table_flags Partition_base::table_flags() const +{ + uint first_used_partition= 0; + DBUG_ENTER("Partition_base::table_flags"); + if (m_handler_status < handler_initialized || + m_handler_status >= handler_closed) + DBUG_RETURN(PARTITION_ENABLED_TABLE_FLAGS); + + if (get_lock_type() != F_UNLCK) + { + /* + The flags are cached after external_lock, and may depend on isolation + level. So we should use a locked partition to get the correct flags. + */ + first_used_partition= bitmap_get_first_set(&m_part_info->lock_partitions); + if (first_used_partition == MY_BIT_NONE) + first_used_partition= 0; + } + DBUG_RETURN((m_file[first_used_partition]->ha_table_flags() & + ~(PARTITION_DISABLED_TABLE_FLAGS)) | + (PARTITION_ENABLED_TABLE_FLAGS)); +} + + +/** + check if copy of data is needed in alter table. +*/ +bool Partition_base::check_if_incompatible_data(HA_CREATE_INFO *create_info, + uint table_changes) +{ + handler **file; + bool ret= COMPATIBLE_DATA_YES; + + /* + The check for any partitioning related changes have already been done + in mysql_alter_table (by fix_partition_func), so it is only up to + the underlying handlers. + */ + for (file= m_file; *file; file++) + if ((ret= (*file)->check_if_incompatible_data( + create_info, table_changes)) != COMPATIBLE_DATA_YES) + break; + return ret; +} + + +/** + Support of in-place alter table. +*/ + +/** + Helper class for in-place alter, see handler.h +*/ + +class Partition_base_inplace_ctx : public inplace_alter_handler_ctx { + public: + inplace_alter_handler_ctx **handler_ctx_array; + + private: + uint m_tot_parts; + + public: + Partition_base_inplace_ctx(THD *thd, uint tot_parts) + : inplace_alter_handler_ctx(), + handler_ctx_array(nullptr), + m_tot_parts(tot_parts) + { + } + + ~Partition_base_inplace_ctx() override + { + if (handler_ctx_array) + { + for (uint index= 0; index < m_tot_parts; index++) + delete handler_ctx_array[index]; + } + } +}; + + +enum_alter_inplace_result Partition_base::check_if_supported_inplace_alter( + TABLE *altered_table, Alter_inplace_info *ha_alter_info) +{ + uint index= 0; + enum_alter_inplace_result result= HA_ALTER_INPLACE_NO_LOCK; + Partition_base_inplace_ctx *part_inplace_ctx; + bool first_is_set= false; + THD * thd= ha_thd(); + + DBUG_ENTER("Partition_base::check_if_supported_inplace_alter"); + /* + Support inplace change of KEY () -> KEY ALGORITHM = N () + and UPGRADE PARTITIONING. + Any other change would set partition_changed in + prep_alter_part_table() in mysql_alter_table(). + */ + if (ha_alter_info->alter_info->flags == Alter_info::ALTER_PARTITION || + ha_alter_info->alter_info->flags == + Alter_info::ALTER_UPGRADE_PARTITIONING) + DBUG_RETURN(HA_ALTER_INPLACE_NO_LOCK); + + /* We cannot allow INPLACE to change order of KEY partitioning fields! */ + if (ha_alter_info->handler_flags & + Alter_inplace_info::ALTER_STORED_COLUMN_ORDER) + { + if (!m_part_info->same_key_column_order( + &ha_alter_info->alter_info->create_list)) + { + DBUG_RETURN(HA_ALTER_INPLACE_NOT_SUPPORTED); + } + } + + part_inplace_ctx= + new (thd->mem_root) Partition_base_inplace_ctx(thd, m_tot_parts); + if (!part_inplace_ctx) + DBUG_RETURN(HA_ALTER_ERROR); + + part_inplace_ctx->handler_ctx_array= + (inplace_alter_handler_ctx **)thd->alloc( + sizeof(inplace_alter_handler_ctx *) * (m_tot_parts + 1)); + if (!part_inplace_ctx->handler_ctx_array) + DBUG_RETURN(HA_ALTER_ERROR); + + /* Set all to nullptr, including the terminating one. */ + for (index= 0; index <= m_tot_parts; index++) + part_inplace_ctx->handler_ctx_array[index]= nullptr; + + for (index= 0; index < m_tot_parts; index++) + { + enum_alter_inplace_result p_result= + m_file[index]->check_if_supported_inplace_alter(altered_table, + ha_alter_info); + part_inplace_ctx->handler_ctx_array[index]= ha_alter_info->handler_ctx; + + if (index == 0) + { + first_is_set= (ha_alter_info->handler_ctx != nullptr); + } + else if (first_is_set != (ha_alter_info->handler_ctx != nullptr)) + { + /* Either none or all partitions must set handler_ctx! */ + DBUG_ASSERT(0); + DBUG_RETURN(HA_ALTER_ERROR); + } + if (p_result < result) + result= p_result; + if (result == HA_ALTER_ERROR) + break; + } + + ha_alter_info->handler_ctx= part_inplace_ctx; + /* + To indicate for future inplace calls that there are several + partitions/handlers that need to be committed together, + we set group_commit_ctx to the nullptr terminated array of + the partitions handlers. + */ + ha_alter_info->group_commit_ctx= part_inplace_ctx->handler_ctx_array; + + DBUG_RETURN(result); +} + + +bool Partition_base::prepare_inplace_alter_table( + TABLE *altered_table, Alter_inplace_info *ha_alter_info) +{ + uint index= 0; + bool error= false; + Partition_base_inplace_ctx *part_inplace_ctx; + + DBUG_ENTER("Partition_base::prepare_inplace_alter_table"); + + /* + Changing to similar partitioning, only update metadata. + Non allowed changes would be catched in prep_alter_part_table(). + */ + if (ha_alter_info->alter_info->flags == Alter_info::ALTER_PARTITION || + ha_alter_info->alter_info->flags == + Alter_info::ALTER_UPGRADE_PARTITIONING) + DBUG_RETURN(false); + + part_inplace_ctx= static_cast( + ha_alter_info->handler_ctx); + + for (index= 0; index < m_tot_parts && !error; index++) + { + ha_alter_info->handler_ctx= part_inplace_ctx->handler_ctx_array[index]; + if (m_file[index]->ha_prepare_inplace_alter_table(altered_table, + ha_alter_info)) + error= true; + part_inplace_ctx->handler_ctx_array[index]= ha_alter_info->handler_ctx; + } + ha_alter_info->handler_ctx= part_inplace_ctx; + + DBUG_RETURN(error); +} + + +bool Partition_base::inplace_alter_table(TABLE * altered_table, + Alter_inplace_info *ha_alter_info) +{ + uint index= 0; + bool error= false; + Partition_base_inplace_ctx *part_inplace_ctx; + + DBUG_ENTER("Partition_base::inplace_alter_table"); + + /* + Changing to similar partitioning, only update metadata. + Non allowed changes would be catched in prep_alter_part_table(). + */ + if (ha_alter_info->alter_info->flags == Alter_info::ALTER_PARTITION || + ha_alter_info->alter_info->flags == + Alter_info::ALTER_UPGRADE_PARTITIONING) + DBUG_RETURN(false); + + part_inplace_ctx= static_cast( + ha_alter_info->handler_ctx); + + for (index= 0; index < m_tot_parts && !error; index++) + { + ha_alter_info->handler_ctx= part_inplace_ctx->handler_ctx_array[index]; + if (m_file[index]->ha_inplace_alter_table(altered_table, ha_alter_info)) + error= true; + part_inplace_ctx->handler_ctx_array[index]= ha_alter_info->handler_ctx; + } + ha_alter_info->handler_ctx= part_inplace_ctx; + + DBUG_RETURN(error); +} + + +/* + Note that this function will try rollback failed ADD INDEX by + executing DROP INDEX for the indexes that were committed (if any) + before the error occured. This means that the underlying storage + engine must be able to drop index in-place with X-lock held. + (As X-lock will be held here if new indexes are to be committed) +*/ +bool Partition_base::commit_inplace_alter_table( + TABLE *altered_table, Alter_inplace_info *ha_alter_info, bool commit) +{ + Partition_base_inplace_ctx *part_inplace_ctx; + bool error= false; + + DBUG_ENTER("Partition_base::commit_inplace_alter_table"); + + /* + Changing to similar partitioning, only update metadata. + Non allowed changes would be catched in prep_alter_part_table(). + */ + if (ha_alter_info->alter_info->flags == Alter_info::ALTER_PARTITION || + ha_alter_info->alter_info->flags == + Alter_info::ALTER_UPGRADE_PARTITIONING) + DBUG_RETURN(false); + + part_inplace_ctx= static_cast( + ha_alter_info->handler_ctx); + + if (commit) + { + DBUG_ASSERT(ha_alter_info->group_commit_ctx == + part_inplace_ctx->handler_ctx_array); + ha_alter_info->handler_ctx= part_inplace_ctx->handler_ctx_array[0]; + error= m_file[0]->ha_commit_inplace_alter_table(altered_table, + ha_alter_info, commit); + if (error) + goto end; + if (ha_alter_info->group_commit_ctx) + { + /* + If ha_alter_info->group_commit_ctx is not set to nullptr, + then the engine did only commit the first partition! + The engine is probably new, since both innodb and the default + implementation of handler::commit_inplace_alter_table sets it to nullptr + and simply return false, since it allows metadata changes only. + Loop over all other partitions as to follow the protocol! + */ + uint i; + DBUG_ASSERT(0); + for (i= 1; i < m_tot_parts; i++) + { + ha_alter_info->handler_ctx= part_inplace_ctx->handler_ctx_array[i]; + error|= m_file[i]->ha_commit_inplace_alter_table(altered_table, + ha_alter_info, true); + } + } + } + else + { + uint i; + for (i= 0; i < m_tot_parts; i++) + { + /* Rollback, commit == false, is done for each partition! */ + ha_alter_info->handler_ctx= part_inplace_ctx->handler_ctx_array[i]; + if (m_file[i]->ha_commit_inplace_alter_table(altered_table, + ha_alter_info, false)) + error= true; + } + } +end: + ha_alter_info->handler_ctx= part_inplace_ctx; + + DBUG_RETURN(error); +} + + +void Partition_base::notify_table_changed() +{ + handler **file; + + DBUG_ENTER("Partition_base::notify_table_changed"); + + for (file= m_file; *file; file++) + (*file)->ha_notify_table_changed(); + + DBUG_VOID_RETURN; +} + +int Partition_base::discard_or_import_tablespace(my_bool discard) +{ + int error= 0; + uint i; + + DBUG_ENTER("Partition_base::discard_or_import_tablespace"); + + for (i= m_part_info->get_first_used_partition(); i < m_tot_parts; + i= m_part_info->get_next_used_partition(i)) + { + error= m_file[i]->ha_discard_or_import_tablespace(discard); + if (error) + break; + } + + DBUG_RETURN(error); +} + + +uint Partition_base::min_of_the_max_uint(uint (handler::*operator_func)(void) + const) const +{ + handler **file; + uint min_of_the_max= ((*m_file)->*operator_func)(); + + for (file= m_file + 1; *file; file++) + { + uint tmp= ((*file)->*operator_func)(); + set_if_smaller(min_of_the_max, tmp); + } + return min_of_the_max; +} + + +uint Partition_base::min_of_the_max_uint( + HA_CREATE_INFO *create_info, + uint (handler::*operator_func)(HA_CREATE_INFO *) const) const +{ + handler **file; + uint min_of_the_max= ((*m_file)->*operator_func)(create_info); + + for (file= m_file+1; *file; file++) + { + uint tmp= ((*file)->*operator_func)(create_info); + set_if_smaller(min_of_the_max, tmp); + } + return min_of_the_max; +} + + +uint Partition_base::max_supported_key_parts() const +{ + return min_of_the_max_uint(&handler::max_supported_key_parts); +} + + +uint Partition_base::max_supported_key_length() const +{ + return min_of_the_max_uint(&handler::max_supported_key_length); +} + + +uint Partition_base::max_supported_key_part_length( + HA_CREATE_INFO *create_info) const +{ + return + min_of_the_max_uint(create_info, &handler::max_supported_key_part_length); +} + + +uint Partition_base::max_supported_record_length() const +{ + return min_of_the_max_uint(&handler::max_supported_record_length); +} + + +uint Partition_base::max_supported_keys() const +{ + return min_of_the_max_uint(&handler::max_supported_keys); +} + + +uint Partition_base::extra_rec_buf_length() const +{ + handler **file; + uint max= (*m_file)->extra_rec_buf_length(); + + for (file= m_file, file++; *file; file++) + if (max < (*file)->extra_rec_buf_length()) + max= (*file)->extra_rec_buf_length(); + return max; +} + + +uint Partition_base::min_record_length(uint options) const +{ + handler **file; + uint max= (*m_file)->min_record_length(options); + + for (file= m_file, file++; *file; file++) + if (max < (*file)->min_record_length(options)) + max= (*file)->min_record_length(options); + return max; +} + + +/**************************************************************************** + MODULE compare records +****************************************************************************/ +/* + Compare two positions + + SYNOPSIS + cmp_ref() + ref1 First position + ref2 Second position + + RETURN VALUE + <0 ref1 < ref2 + 0 Equal + >0 ref1 > ref2 + + DESCRIPTION + We get two references and need to check if those records are the same. + If they belong to different partitions we decide that they are not + the same record. Otherwise we use the particular handler to decide if + they are the same. Sort in partition id order if not equal. +*/ + +int Partition_base::cmp_ref(const uchar *ref1, const uchar *ref2) +{ + int cmp; + my_ptrdiff_t diff1, diff2; + DBUG_ENTER("Partition_base::cmp_ref"); + + cmp= m_file[0]->cmp_ref((ref1 + PARTITION_BYTES_IN_POS), + (ref2 + PARTITION_BYTES_IN_POS)); + if (cmp) + DBUG_RETURN(cmp); + + if ((ref1[0] == ref2[0]) && (ref1[1] == ref2[1])) + { + /* This means that the references are same and are in same partition.*/ + DBUG_RETURN(0); + } + + diff1= ref2[1] - ref1[1]; + diff2= ref2[0] - ref1[0]; + if (diff1 > 0) + { + DBUG_RETURN(-1); + } + if (diff1 < 0) + { + DBUG_RETURN(+1); + } + if (diff2 > 0) + { + DBUG_RETURN(-1); + } + DBUG_RETURN(+1); +} + + +/**************************************************************************** + MODULE condition pushdown +****************************************************************************/ + + +/** + Index condition pushdown registation + @param keyno Key number for the condition + @param idx_cond Item tree of the condition to test + + @return Remainder of non handled condition + + @note Only handles full condition or nothing at all. MyISAM and InnoDB + both only supports full or nothing. +*/ +Item *Partition_base::idx_cond_push(uint keyno, Item *idx_cond) +{ + uint i; + Item *res; + DBUG_ENTER("Partition_base::idx_cond_push"); + DBUG_EXECUTE("where", print_where(idx_cond, "cond", QT_ORDINARY);); + DBUG_PRINT("info", ("keyno: %u, active_index: %u", keyno, active_index)); + DBUG_ASSERT(pushed_idx_cond == nullptr); + + for (i= m_part_info->get_first_used_partition(); i < m_tot_parts; + i= m_part_info->get_next_used_partition(i)) + { + res= m_file[i]->idx_cond_push(keyno, idx_cond); + if (res) + { + uint j; + /* + All partitions has the same structure, so if the first partition + succeeds, then the rest will also succeed. + */ + DBUG_ASSERT(i == m_part_info->get_first_used_partition()); + /* Only supports entire index conditions or no conditions! */ + DBUG_ASSERT(res == idx_cond); + if (res != idx_cond) + m_file[i]->cancel_pushed_idx_cond(); + /* cancel previous calls. */ + for (j= m_part_info->get_first_used_partition(); + j < i; // No need for cancel i, since no support + j= m_part_info->get_next_used_partition(j)) + { + m_file[j]->cancel_pushed_idx_cond(); + } + DBUG_RETURN(idx_cond); + } + } + DBUG_ASSERT(pushed_idx_cond_keyno == MAX_KEY); + pushed_idx_cond= idx_cond; + pushed_idx_cond_keyno= keyno; + DBUG_PRINT("info", ("Index condition pushdown used for keyno: %u", keyno)); + DBUG_RETURN(nullptr); +} + + +/** Reset information about pushed index conditions */ +void Partition_base::cancel_pushed_idx_cond() +{ + uint i; + DBUG_ENTER("Partition_base::cancel_pushed_idx_cond"); + if (pushed_idx_cond) + { + for (i= m_part_info->get_first_used_partition(); i < m_tot_parts; + i= m_part_info->get_next_used_partition(i)) + { + m_file[i]->cancel_pushed_idx_cond(); + } + pushed_idx_cond= nullptr; + pushed_idx_cond_keyno= MAX_KEY; + } + + DBUG_VOID_RETURN; +} + + +/**************************************************************************** + MODULE auto increment +****************************************************************************/ + +/** + Initialize the shared auto increment value. + + @param no_lock If HA_STATUS_NO_LOCK should be used in info(HA_STATUS_AUTO). + + Also sets stats.auto_increment_value. +*/ + +inline int Partition_base::initialize_auto_increment(bool no_lock) +{ + DBUG_ENTER("Partition_base::initialize_auto_increment"); +#ifndef DBUG_OFF + if (table_share->tmp_table == NO_TMP_TABLE) + { + mysql_mutex_assert_owner(part_share->auto_inc_mutex); + } +#endif + DBUG_ASSERT(!part_share->auto_inc_initialized); + + /* + The auto-inc mutex in the table_share is locked, so we do not need + to have the handlers locked. + HA_STATUS_NO_LOCK is not checked, since we cannot skip locking + the mutex, because it is initialized. + */ + handler * file, **file_array; + ulonglong auto_increment_value= 0; + uint no_lock_flag= no_lock ? HA_STATUS_NO_LOCK : 0; + int ret_error, error= 0; + file_array= m_file; + DBUG_PRINT("info", ("checking all partitions for auto_increment_value")); + do + { + file= *file_array; + ret_error= file->info(HA_STATUS_AUTO | no_lock_flag); + set_if_bigger(auto_increment_value, file->stats.auto_increment_value); + if (ret_error && !error) + { + error= ret_error; + } + } while (*(++file_array)); + + DBUG_ASSERT(auto_increment_value); + stats.auto_increment_value= auto_increment_value; + /* + We only use the cached auto inc value if it is + the first part of the key. + */ + if (table_share->next_number_keypart == 0) + { + DBUG_ASSERT(part_share->next_auto_inc_val <= auto_increment_value); + part_share->next_auto_inc_val= auto_increment_value; + part_share->auto_inc_initialized= true; + DBUG_PRINT("info", ("initializing next_auto_inc_val to %lu", + (ulong)part_share->next_auto_inc_val)); + } + DBUG_RETURN(error); +} + + +/** + This method is called by update_auto_increment which in turn is called + by the individual handlers as part of write_row. We use the + part_share->next_auto_inc_val, or search all + partitions for the highest auto_increment_value if not initialized or + if auto_increment field is a secondary part of a key, we must search + every partition when holding a mutex to be sure of correctness. +*/ + +void Partition_base::get_auto_increment(ulonglong offset, ulonglong increment, + ulonglong nb_desired_values, + ulonglong *first_value, + ulonglong *nb_reserved_values) +{ + DBUG_ENTER("Partition_base::get_auto_increment"); + DBUG_PRINT("info", ("offset: %lu inc: %lu desired_values: %lu " + "first_value: %lu", + (ulong)offset, (ulong)increment, + (ulong)nb_desired_values, (ulong)*first_value)); + DBUG_ASSERT(increment && nb_desired_values); + *first_value= 0; + if (table->s->next_number_keypart) + { + /* + next_number_keypart is != 0 if the auto_increment column is a secondary + column in the index (it is allowed in MyISAM) + */ + DBUG_PRINT("info", ("next_number_keypart != 0")); + ulonglong nb_reserved_values_part; + ulonglong first_value_part, max_first_value; + handler **file= m_file; + first_value_part= max_first_value= *first_value; + /* Must lock and find highest value among all partitions. */ + lock_auto_increment(); + do + { + /* Only nb_desired_values = 1 makes sense */ + (*file)->get_auto_increment(offset, increment, 1, &first_value_part, + &nb_reserved_values_part); + if (first_value_part == ULLONG_MAX) // error in one partition + { + *first_value= first_value_part; + /* log that the error was between table/partition handler */ + sql_print_error("Partition failed to reserve auto_increment value"); + unlock_auto_increment(); + DBUG_VOID_RETURN; + } + DBUG_PRINT("info", ("first_value_part: %lu", (ulong)first_value_part)); + set_if_bigger(max_first_value, first_value_part); + } while (*(++file)); + *first_value= max_first_value; + *nb_reserved_values= 1; + unlock_auto_increment(); + } + else + { + Partition_helper::get_auto_increment_first_field( + increment, nb_desired_values, first_value, nb_reserved_values); + } + DBUG_VOID_RETURN; +} + +void Partition_base::release_auto_increment_all_parts() +{ + uint i; + DBUG_ENTER("Partition_base::release_auto_increment_all_parts"); + + DBUG_ASSERT(table->s->next_number_keypart); + for (i= m_part_info->get_first_used_partition(); i < m_tot_parts; + i= bitmap_get_next_set(&m_part_info->lock_partitions, i)) + { + m_file[i]->ha_release_auto_increment(); + } + DBUG_VOID_RETURN; +} + +/**************************************************************************** + MODULE initialize handler for HANDLER call +****************************************************************************/ + +void Partition_base::init_table_handle_for_HANDLER() +{ + uint i; + for (i= m_part_info->get_first_used_partition(); i < m_tot_parts; + i= m_part_info->get_next_used_partition(i)) + m_file[i]->init_table_handle_for_HANDLER(); + return; +} + + +/** + Return the checksum of the partition. + + @param part_id Partition to checksum. + + @return Checksum or 0 if not supported. +*/ + +ha_checksum Partition_base::checksum_in_part(uint part_id) const +{ + if ((table_flags() & HA_HAS_CHECKSUM)) + { + return m_file[part_id]->checksum(); + } + return 0; +} + +/**************************************************************************** + MODULE enable/disable indexes +****************************************************************************/ + +/* + Disable indexes for a while + SYNOPSIS + disable_indexes() + mode Mode + RETURN VALUES + 0 Success + != 0 Error +*/ + +int Partition_base::disable_indexes(uint mode) +{ + handler **file; + int error= 0; + + DBUG_ASSERT(bitmap_is_set_all(&(m_part_info->lock_partitions))); + for (file= m_file; *file; file++) + { + if ((error= (*file)->ha_disable_indexes(mode))) + break; + } + return error; +} + + +/* + Enable indexes again + SYNOPSIS + enable_indexes() + mode Mode + RETURN VALUES + 0 Success + != 0 Error +*/ + +int Partition_base::enable_indexes(uint mode) +{ + handler **file; + int error= 0; + + DBUG_ASSERT(bitmap_is_set_all(&(m_part_info->lock_partitions))); + for (file= m_file; *file; file++) + { + if ((error= (*file)->ha_enable_indexes(mode))) + break; + } + return error; +} + + +/* + Check if indexes are disabled + SYNOPSIS + indexes_are_disabled() + + RETURN VALUES + 0 Indexes are enabled + != 0 Indexes are disabled +*/ + +int Partition_base::indexes_are_disabled(void) +{ + handler **file; + int error= 0; + + DBUG_ASSERT(bitmap_is_set_all(&(m_part_info->lock_partitions))); + for (file= m_file; *file; file++) + { + if ((error= (*file)->indexes_are_disabled())) + break; + } + return error; +} + + +#define KEY_PARTITIONING_CHANGED_STR \ + "KEY () partitioning changed, please run:\n" \ + "ALTER TABLE %s.%s ALGORITHM = INPLACE %s" + +int Partition_base::check_for_upgrade(HA_CHECK_OPT *check_opt) +{ + int error= HA_ADMIN_NEEDS_CHECK; + DBUG_ENTER("Partition_base::check_for_upgrade"); + + /* + This is called even without FOR UPGRADE, + if the .frm version is lower than the current version. + In that case return that it needs checking! + */ + if (!(check_opt->sql_flags & TT_FOR_UPGRADE)) + { + if (m_file[0]->ht->partition_flags) + DBUG_RETURN(HA_ADMIN_NEEDS_UPG_PART); + + DBUG_RETURN(error); + } + + if (m_file[0]->ht->partition_flags) + { + /* No longer needs Partition_base. */ + error= HA_ADMIN_NEEDS_UPG_PART; + } + + DBUG_RETURN(error); +} + +/* + We don't know which partition table will be updated before executing + Write_rows_log_event, so update all partitions. +*/ +void Partition_base::rpl_before_write_rows() +{ + uint i; + for (i= 0; i < m_tot_parts; i++) + { + m_file[i]->rpl_before_write_rows(); + } +} + +/* + Clear flag of all partitions after executing Write_rows_log_event. +*/ +void Partition_base::rpl_after_write_rows() +{ + uint i; + for (i= 0; i < m_tot_parts; i++) + { + m_file[i]->rpl_after_write_rows(); + } +} + +/* + We don't know which partition table will be updated before executing + Delete_rows_log_event, so update all partitions. +*/ +void Partition_base::rpl_before_delete_rows() +{ + uint i; + for (i= 0; i < m_tot_parts; i++) + { + m_file[i]->rpl_before_delete_rows(); + } +} + +/* + Clear flag of all partitions after executing Delete_rows_log_event. +*/ +void Partition_base::rpl_after_delete_rows() +{ + uint i; + for (i= 0; i < m_tot_parts; i++) + { + m_file[i]->rpl_after_delete_rows(); + } +} + +/* + We don't know which partition table will be updated before executing + Update_rows_log_event, so update all partitions. +*/ +void Partition_base::rpl_before_update_rows() +{ + uint i; + for (i= 0; i < m_tot_parts; i++) + { + m_file[i]->rpl_before_update_rows(); + } +} + +/* + Clear flag of all partitions after executing Update_rows_log_event. +*/ +void Partition_base::rpl_after_update_rows() +{ + uint i; + for (i= 0; i < m_tot_parts; i++) + { + m_file[i]->rpl_after_update_rows(); + } +} + +/* + Check whether we need to perform row lookup when executing + Update_rows_log_event or Delete_rows_log_event. Use the 1st + partition is enough, see @c ha_tokudb::rpl_lookup_rows(). +*/ +bool Partition_base::rpl_lookup_rows() +{ + return m_file[0]->rpl_lookup_rows(); +} + +/* + Query storage engine to see if it can support handling specific replication + method in its current configuration. +*/ +bool Partition_base::rpl_can_handle_stm_event() const +{ + return m_file[0]->rpl_can_handle_stm_event(); +} + +} // namespace native_part diff --git a/sql/partitioning/partition_base.h b/sql/partitioning/partition_base.h new file mode 100644 index 000000000000..62b700c97586 --- /dev/null +++ b/sql/partitioning/partition_base.h @@ -0,0 +1,1091 @@ +#ifndef PARTITION_BASE_INCLUDED +#define PARTITION_BASE_INCLUDED + +/* + Copyright (c) 2005, 2017, Oracle and/or its affiliates. All rights reserved. + + 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 */ + +#include "item.h" +#include "table.h" +#include "partitioning/partition_handler.h" /* Partition_handler */ + +namespace native_part { + +/** class where to save partitions Handler_share's */ +class Parts_share_refs { + public: + uint num_parts; /**< Size of ha_share array */ + Handler_share **ha_shares; /**< Storage for each part */ + Parts_share_refs(); + ~Parts_share_refs(); + bool init(uint arg_num_parts); +}; + + +/** + Partition specific Handler_share. +*/ +class Partition_base_share : public Partition_share { + public: + /** Storage for each partitions Handler_share */ + Parts_share_refs *partitions_share_refs; + Partition_base_share(); + ~Partition_base_share() override; + bool init(uint num_parts); +}; + +class Partition_base : public handler, + public Partition_helper, + public Partition_handler { + public: + bool init_partitioning(MEM_ROOT *mem_root) + { + return Partition_helper::init_partitioning(mem_root); + } + + private: + virtual handler *get_file_handler(TABLE_SHARE *share, MEM_ROOT *alloc)= 0; + + private: + /* Data for the partition handler */ + int m_mode; // Open mode + uint m_open_test_lock; // Open test_if_locked + protected: + handler **m_file; // Array of references to handler inst. + private: + uint m_file_tot_parts; // Debug + enum enum_handler_status { + handler_not_initialized= 0, + handler_initialized, + handler_opened, + handler_closed + }; + enum_handler_status m_handler_status; + + /** + Array of new partitions used during + fast_alter_part_table() / ALTER TABLE ... ADD/DROP/REORGANIZE... PARTITION. + */ + handler **m_new_file; + /** Maximum of new partitions in m_new_file. */ + uint m_num_new_partitions; + /** True if the new partitions should be created but not opened and locked. */ + bool m_new_parts_open_only; + /** cached value of indexes_are_disabled(). */ + int m_indexes_are_disabled; + /* + If set, this object was created with Partition_base::clone and doesn't + "own" the m_part_info structure. + */ + Partition_base *m_is_clone_of; + MEM_ROOT * m_clone_mem_root; + + void init_handler_variables(); + /* + Variables for lock structures. + */ + THR_LOCK_DATA lock; /* MySQL lock */ + + /** For optimizing ha_start_bulk_insert calls */ + MY_BITMAP m_bulk_insert_started; + ha_rows m_bulk_inserted_rows; + /** used for prediction of start_bulk_insert rows */ + enum_monotonicity_info m_part_func_monotonicity_info; + /** keep track of locked partitions */ + MY_BITMAP m_locked_partitions; + /** Stores shared auto_increment etc. */ + Partition_base_share *part_share; + /** Temporary storage for new partitions Handler_shares during ALTER */ + List m_new_partitions_share_refs; + /** Sorted array of partition ids in descending order of number of rows. */ + uint32 *m_part_ids_sorted_by_num_of_records; + /* Compare function for my_qsort2, for reversed order. */ + static int compare_number_of_records(Partition_base *me, const uint32 *a, + const uint32 *b); + /** keep track of partitions to call ha_reset */ + MY_BITMAP m_partitions_to_reset; + + public: + handler *clone(const char *name, MEM_ROOT *mem_root)override = 0; + /* + ------------------------------------------------------------------------- + MODULE create/delete handler object + ------------------------------------------------------------------------- + Object create/delete method. The normal called when a table object + exists. There is also a method to create the handler object with only + partition information. This is used from mysql_create_table when the + table is to be created and the engine type is deduced to be the + partition handler. + ------------------------------------------------------------------------- + */ + Partition_base(handlerton *hton, TABLE_SHARE *table); + Partition_base(handlerton *hton, TABLE_SHARE *share, + partition_info *part_info_arg, Partition_base *clone_arg, + MEM_ROOT *clone_mem_root_arg); + ~Partition_base() override; + bool init_with_fields() override; + /* + A partition handler has no characteristics in itself. It only inherits + those from the underlying handlers. Here we set-up those constants to + enable later calls of the methods to retrieve constants from the under- + lying handlers. Returns false if not successful. + */ + bool initialize_partition(MEM_ROOT *mem_root) override; + /* + ------------------------------------------------------------------------- + MODULE meta data changes + ------------------------------------------------------------------------- + Meta data routines to CREATE, DROP, RENAME table and often used at + ALTER TABLE (update_create_info used from ALTER TABLE and SHOW ..). + + create_handler_files is called before opening a new handler object + with openfrm to call create. It is used to create any local handler + object needed in opening the object in openfrm + ------------------------------------------------------------------------- + */ + int delete_table(const char *from) override; + int rename_table(const char *from, const char *to) override; + int create(const char *name, TABLE *form, + HA_CREATE_INFO *create_info) override; + void update_create_info(HA_CREATE_INFO *create_info) override; + int change_partitions_low(HA_CREATE_INFO *create_info, const char *path, + ulonglong *const copied, ulonglong *const deleted) override + { + return Partition_helper::change_partitions(create_info, path, copied, + deleted); + } + + /** This function reads zip dict-related info from partition handlers. + It may do nothing if individual handlers do not support COMPRESSED_COLUMNS. + + @param thd Thread handler + @param part_name Must be always nullptr. + */ + void update_field_defs_with_zip_dict_info(THD * thd, + const char *part_name) override; + + private: + template + bool foreach_partition(const Fn &fn); + + void change_table_ptr(TABLE *table_arg, TABLE_SHARE *share) override; + bool check_if_incompatible_data(HA_CREATE_INFO *create_info, + uint table_changes) override; + int prepare_for_new_partitions(uint num_partitions, bool only_create) override; + int create_new_partition(TABLE *table, HA_CREATE_INFO *create_info, + const char *part_name, uint new_part_id, + partition_element *p_elem) override; + int write_row_in_new_part(uint part_id) override; + void close_new_partitions() override; + /* + delete_table and rename_table uses very similar logic which + is packed into this routine. + */ + int del_ren_table(const char *from, const char *to); + bool setup_engine_array(MEM_ROOT *mem_root); + bool new_handlers_from_part_info(MEM_ROOT *mem_root); + partition_element * find_partition_element(uint part_id); + bool populate_partition_name_hash(); + Partition_base_share *get_share(); + bool set_ha_share_ref(Handler_share **ha_share) override; + bool init_part_share(); + void fix_data_dir(char *path); + bool init_partition_bitmaps(); + void free_partition_bitmaps(); + + public: + /* + ------------------------------------------------------------------------- + MODULE open/close object + ------------------------------------------------------------------------- + Open and close handler object to ensure all underlying files and + objects allocated and deallocated for query handling is handled + properly. + ------------------------------------------------------------------------- + + A handler object is opened as part of its initialisation and before + being used for normal queries (not before meta-data changes always. + If the object was opened it will also be closed before being deleted. + */ + int open(const char *name, int mode, uint test_if_locked) override; + int close(void) override; + + /* + ------------------------------------------------------------------------- + MODULE start/end statement + ------------------------------------------------------------------------- + This module contains methods that are used to understand start/end of + statements, transaction boundaries, and aid for proper concurrency + control. + The partition handler need not implement abort and commit since this + will be handled by any underlying handlers implementing transactions. + There is only one call to each handler type involved per transaction + and these go directly to the handlers supporting transactions + currently InnoDB, BDB and NDB). + ------------------------------------------------------------------------- + */ + THR_LOCK_DATA **store_lock(THD *thd, THR_LOCK_DATA **to, + enum thr_lock_type lock_type) override; + int external_lock(THD *thd, int lock_type) override; + /* + When table is locked a statement is started by calling start_stmt + instead of external_lock + */ + int start_stmt(THD *thd, thr_lock_type lock_type) override; + /* + Lock count is number of locked underlying handlers (I assume) + */ + uint lock_count(void) const override; + /* + Call to unlock rows not to be updated in transaction + */ + void unlock_row() override; + /* + Check if semi consistent read + */ + bool was_semi_consistent_read() override; + /* + Call to hint about semi consistent read + */ + void try_semi_consistent_read(bool) override; + + /* + ------------------------------------------------------------------------- + MODULE change record + ------------------------------------------------------------------------- + This part of the handler interface is used to change the records + after INSERT, DELETE, UPDATE, REPLACE method calls but also other + special meta-data operations as ALTER TABLE, LOAD DATA, TRUNCATE. + ------------------------------------------------------------------------- + + These methods are used for insert (write_row), update (update_row) + and delete (delete_row). All methods to change data always work on + one row at a time. update_row and delete_row also contains the old + row. + delete_all_rows will delete all rows in the table in one call as a + special optimization for DELETE from table; + + Bulk inserts are supported if all underlying handlers support it. + start_bulk_insert and end_bulk_insert is called before and after a + number of calls to write_row. + */ + int write_row(uchar *buf) override { return Partition_helper::ph_write_row(buf); } + int update_row(const uchar *old_data, uchar *new_data) override + { + return Partition_helper::ph_update_row(old_data, new_data, + rpl_lookup_rows()); + } + int delete_row(const uchar *buf) override + { + return Partition_helper::ph_delete_row(buf, rpl_lookup_rows()); + } + int delete_all_rows(void) override; + int truncate() override; + void start_bulk_insert(ha_rows rows) override; + int end_bulk_insert() override; + + private: + ha_rows guess_bulk_insert_rows(); + void start_part_bulk_insert(THD *thd, uint part_id); + long estimate_read_buffer_size(long original_size); + + public: + /* + Method for truncating a specific partition. + (i.e. ALTER TABLE t1 TRUNCATE PARTITION p). + + @remark This method is a partitioning-specific hook + and thus not a member of the general SE API. + */ + int truncate_partition_low() override; + + bool is_ignorable_error(int error) override + { + /* + Ignore the following errors during table copying on altering. + */ + return (handler::is_ignorable_error(error) || + error == HA_ERR_NO_PARTITION_FOUND || + error == HA_ERR_NOT_IN_LOCK_PARTITIONS); + } + + + /* + ------------------------------------------------------------------------- + MODULE full table scan + ------------------------------------------------------------------------- + This module is used for the most basic access method for any table + handler. This is to fetch all data through a full table scan. No + indexes are needed to implement this part. + It contains one method to start the scan (rnd_init) that can also be + called multiple times (typical in a nested loop join). Then proceeding + to the next record (rnd_next) and closing the scan (rnd_end). + To remember a record for later access there is a method (position) + and there is a method used to retrieve the record based on the stored + position. + The position can be a file position, a primary key, a ROWID dependent + on the handler below. + ------------------------------------------------------------------------- + */ + /* + unlike index_init(), 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 + */ + int rnd_init(bool scan) override { return Partition_helper::ph_rnd_init(scan); } + int rnd_end() override { return Partition_helper::ph_rnd_end(); } + int rnd_next(uchar *buf) override { return Partition_helper::ph_rnd_next(buf); } + int rnd_pos(uchar *buf, uchar *pos) override + { + return Partition_helper::ph_rnd_pos(buf, pos); + } + int rnd_pos_by_record(uchar *record) override + { + if (unlikely(get_part_for_delete(record, m_table->record[0], m_part_info, + &m_last_part))) + { + return (HA_ERR_INTERNAL_ERROR); + } + return (m_file[m_last_part]->rnd_pos_by_record(record)); + } + void position(const uchar *record) override + { + return Partition_helper::ph_position(record); + } + + /* + ------------------------------------------------------------------------- + MODULE index scan + ------------------------------------------------------------------------- + This part of the handler interface is used to perform access through + indexes. The interface is defined as a scan interface but the handler + can also use key lookup if the index is a unique index or a primary + key index. + Index scans are mostly useful for SELECT queries but are an important + part also of UPDATE, DELETE, REPLACE and CREATE TABLE table AS SELECT + and so forth. + Naturally an index is needed for an index scan and indexes can either + be ordered, hash based. Some ordered indexes can return data in order + but not necessarily all of them. + There are many flags that define the behavior of indexes in the + various handlers. These methods are found in the optimizer module. + ------------------------------------------------------------------------- + + index_read is called to start a scan of an index. The find_flag defines + the semantics of the scan. These flags are defined in + include/my_base.h + index_read_idx is the same but also initializes index before calling doing + the same thing as index_read. Thus it is similar to index_init followed + by index_read. This is also how we implement it. + + index_read/index_read_idx does also return the first row. Thus for + key lookups, the index_read will be the only call to the handler in + the index scan. + + index_init initializes an index before using it and index_end does + any end processing needed. + */ + int index_read_map(uchar *buf, const uchar *key, key_part_map keypart_map, + enum ha_rkey_function find_flag) override + { + return Partition_helper::ph_index_read_map(buf, key, keypart_map, + find_flag); + } + int index_init(uint idx, bool sorted) override + { + return Partition_helper::ph_index_init(idx, sorted); + } + int index_end() override { return Partition_helper::ph_index_end(); } + + /** + @brief + Positions an index cursor to the index specified in the hanlde. Fetches the + row if available. If the key value is null, begin at first key of the + index. + */ + int index_read_idx_map(uchar *buf, uint index, const uchar *key, + key_part_map keypart_map, + enum ha_rkey_function find_flag) override + { + return Partition_helper::ph_index_read_idx_map(buf, index, key, + keypart_map, find_flag); + } + /* + These methods are used to jump to next or previous entry in the index + scan. There are also methods to jump to first and last entry. + */ + int index_next(uchar *buf) override { return Partition_helper::ph_index_next(buf); } + int index_prev(uchar *buf) override { return Partition_helper::ph_index_prev(buf); } + int index_first(uchar *buf) override + { + return Partition_helper::ph_index_first(buf); + } + int index_last(uchar *buf) override { return Partition_helper::ph_index_last(buf); } + int index_next_same(uchar *buf, const uchar *key, uint keylen) override + { + return Partition_helper::ph_index_next_same(buf, key, keylen); + } + int index_read_last_map(uchar *buf, const uchar *key, + key_part_map keypart_map) override + { + return Partition_helper::ph_index_read_last_map(buf, key, keypart_map); + } + + int read_range_first(const key_range *start_key, const key_range *end_key, + bool eq_range, bool sorted) override + { + return Partition_helper::ph_read_range_first(start_key, end_key, eq_range, + sorted); + } + int read_range_next() override { + return Partition_helper::ph_read_range_next(); + } + bool has_gap_locks() const override; + + public: + /* + ------------------------------------------------------------------------- + MODULE information calls + ------------------------------------------------------------------------- + This calls are used to inform the handler of specifics of the ongoing + scans and other actions. Most of these are used for optimisation + purposes. + ------------------------------------------------------------------------- + */ + int info(uint) override; + void get_dynamic_partition_info(ha_statistics *stat_info, + ha_checksum *check_sum, + uint part_id) override; + int extra(enum ha_extra_function operation) override; + int reset(void) override; + + private: + static const uint NO_CURRENT_PART_ID; + int loop_extra(enum ha_extra_function operation); + + public: + /* + ------------------------------------------------------------------------- + MODULE optimizer support + ------------------------------------------------------------------------- + */ + + /* + NOTE !!!!!! + ------------------------------------------------------------------------- + ------------------------------------------------------------------------- + One important part of the public handler interface that is not depicted in + the methods is the attribute records which is defined in the base class. + This is looked upon directly and is set by calling info(HA_STATUS_INFO) ? + ------------------------------------------------------------------------- + */ + + private: + /* Helper functions for optimizer hints. */ + ha_rows min_rows_for_estimate(); + uint get_biggest_used_partition(uint *part_index); + + public: + /* + keys_to_use_for_scanning can probably be implemented as the + intersection of all underlying handlers if mixed handlers are used. + This method is used to derive whether an index can be used for + index-only scanning when performing an ORDER BY query. + Only called from one place in sql_select.cc + */ + const key_map *keys_to_use_for_scanning() override; + + /* + Called in test_quick_select to determine if indexes should be used. + */ + double scan_time() override; + + /* + The next method will never be called if you do not implement indexes. + */ + double read_time(uint index, uint ranges, ha_rows rows) override; + /* + For the given range how many records are estimated to be in this range. + Used by optimizer to calculate cost of using a particular index. + */ + ha_rows records_in_range(uint inx, key_range *min_key, + key_range *max_key) override; + + /* + Upper bound of number records returned in scan is sum of all + underlying handlers. + */ + ha_rows estimate_rows_upper_bound() override; + + /* + table_cache_type is implemented by the underlying handler but all + underlying handlers must have the same implementation for it to work. + */ + uint8 table_cache_type() override; + int records(ha_rows *num_rows) override; + + /* Calculate hash value for PARTITION BY KEY tables. */ + uint32 calculate_key_hash_value(Field **field_array) override + { + return ph_calculate_key_hash_value(field_array); + } + + /* + ------------------------------------------------------------------------- + MODULE print messages + ------------------------------------------------------------------------- + This module contains various methods that returns text messages for + table types, index type and error messages. + ------------------------------------------------------------------------- + */ + /* + The name of the index type that will be used for display + Here we must ensure that all handlers use the same index type + for each index created. + */ + const char *index_type(uint inx) override; + + /* The name of the table type that will be used for display purposes */ + const char *table_type() const override; + + /* The name of the row type used for the underlying tables. */ + enum row_type get_row_type() const override; + + /* + Handler specific error messages + */ + void print_error(int error, myf errflag) override; + bool get_error_message(int error, String *buf) override; + /* + ------------------------------------------------------------------------- + MODULE handler characteristics + ------------------------------------------------------------------------- + This module contains a number of methods defining limitations and + characteristics of the handler. The partition handler will calculate + this characteristics based on underlying handler characteristics. + ------------------------------------------------------------------------- + + This is a list of flags that says what the storage engine + implements. The current table flags are documented in handler.h + The partition handler will support whatever the underlying handlers + support except when specifically mentioned below about exceptions + to this rule. + NOTE: This cannot be cached since it can depend on TRANSACTION ISOLATION + LEVEL which is dynamic, see bug#39084. + + HA_TABLE_SCAN_ON_INDEX: + Used to avoid scanning full tables on an index. If this flag is set then + the handler always has a primary key (hidden if not defined) and this + index is used for scanning rather than a full table scan in all + situations. + (InnoDB, BDB, Federated) + + HA_REC_NOT_IN_SEQ: + This flag is set for handlers that cannot guarantee that the rows are + returned accroding to incremental positions (0, 1, 2, 3...). + This also means that rnd_next() should return HA_ERR_RECORD_DELETED + if it finds a deleted row. + (MyISAM (not fixed length row), BDB, HEAP, NDB, InooDB) + + HA_CAN_GEOMETRY: + Can the storage engine handle spatial data. + Used to check that no spatial attributes are declared unless + the storage engine is capable of handling it. + (MyISAM) + + HA_FAST_KEY_READ: + Setting this flag indicates that the handler is equally fast in + finding a row by key as by position. + This flag is used in a very special situation in conjunction with + filesort's. For further explanation see intro to init_read_record. + (BDB, HEAP, InnoDB) + + HA_NULL_IN_KEY: + Is NULL values allowed in indexes. + If this is not allowed then it is not possible to use an index on a + nullptrable field. + (BDB, HEAP, MyISAM, NDB, InnoDB) + + HA_DUPLICATE_POS: + Tells that we can the position for the conflicting duplicate key + record is stored in table->file->dupp_ref. (insert uses rnd_pos() on + this to find the duplicated row) + (MyISAM) + + HA_CAN_INDEX_BLOBS: + Is the storage engine capable of defining an index of a prefix on + a BLOB attribute. + (BDB, Federated, MyISAM, InnoDB) + + HA_AUTO_PART_KEY: + Auto increment fields can be part of a multi-part key. For second part + auto-increment keys, the auto_incrementing is done in handler.cc + (BDB, Federated, MyISAM, NDB) + + HA_REQUIRE_PRIMARY_KEY: + Can't define a table without primary key (and cannot handle a table + with hidden primary key) + (No handler has this limitation currently) + + HA_STATS_RECORDS_IS_EXACT: + Does the counter of records after the info call specify an exact + value or not. If it does this flag is set. + Only MyISAM and HEAP uses exact count. + + HA_PRIMARY_KEY_IN_READ_INDEX: + This parameter is set when the handler will also return the primary key + when doing read-only-key on another index. + + HA_NOT_DELETE_WITH_CACHE: + Seems to be an old MyISAM feature that is no longer used. No handler + has it defined but it is checked in init_read_record. + Further investigation needed. + (No handler defines it) + + HA_NO_PREFIX_CHAR_KEYS: + Indexes on prefixes of character fields is not allowed. + (NDB) + + HA_CAN_FULLTEXT: + Does the storage engine support fulltext indexes + The partition handler will start by not supporting fulltext indexes. + (MyISAM) + + HA_CAN_SQL_HANDLER: + Can the HANDLER interface in the MySQL API be used towards this + storage engine. + (MyISAM, InnoDB) + + HA_NO_AUTO_INCREMENT: + Set if the storage engine does not support auto increment fields. + (Currently not set by any handler) + + HA_HAS_CHECKSUM: + Special MyISAM feature. Has special SQL support in CREATE TABLE. + No special handling needed by partition handler. + (MyISAM) + + HA_FILE_BASED: + Should file names always be in lower case (used by engines + that map table names to file names. + Since partition handler has a local file this flag is set. + (BDB, Federated, MyISAM) + + HA_CAN_BIT_FIELD: + Is the storage engine capable of handling bit fields? + (MyISAM, NDB) + + HA_PRIMARY_KEY_REQUIRED_FOR_POSITION: + Does the storage engine need a PK for position? + (InnoDB) + + HA_FILE_BASED is always set for partition handler since we use a + special file for handling names of partitions, engine types. + HA_REC_NOT_IN_SEQ is always set for partition handler since we cannot + guarantee that the records will be returned in sequence. + HA_CAN_GEOMETRY, HA_CAN_FULLTEXT, HA_DUPLICATE_POS, + HA_PRIMARY_KEY_REQUIRED_FOR_POSITION is disabled + until further investigated. + */ + Table_flags table_flags() const override; + + /* + This is a bitmap of flags that says how the storage engine + implements indexes. The current index flags are documented in + handler.h. If you do not implement indexes, just return zero + here. + + part is the key part to check. First key part is 0 + If all_parts it's set, MySQL want to know the flags for the combined + index up to and including 'part'. + + HA_READ_NEXT: + Does the index support read next, this is assumed in the server + code and never checked so all indexes must support this. + Note that the handler can be used even if it doesn't have any index. + (BDB, HEAP, MyISAM, Federated, NDB, InnoDB) + + HA_READ_PREV: + Can the index be used to scan backwards. + (BDB, HEAP, MyISAM, NDB, InnoDB) + + HA_READ_ORDER: + Can the index deliver its record in index order. Typically true for + all ordered indexes and not true for hash indexes. + In first step this is not true for partition handler until a merge + sort has been implemented in partition handler. + Used to set keymap part_of_sortkey + This keymap is only used to find indexes usable for resolving an ORDER BY + in the query. Thus in most cases index_read will work just fine without + order in result production. When this flag is set it is however safe to + order all output started by index_read since most engines do this. With + read_multi_range calls there is a specific flag setting order or not + order so in those cases ordering of index output can be avoided. + (BDB, InnoDB, HEAP, MyISAM, NDB) + + HA_READ_RANGE: + Specify whether index can handle ranges, typically true for all + ordered indexes and not true for hash indexes. + Used by optimiser to check if ranges (as key >= 5) can be optimised + by index. + (BDB, InnoDB, NDB, MyISAM, HEAP) + + HA_ONLY_WHOLE_INDEX: + Can't use part key searches. This is typically true for hash indexes + and typically not true for ordered indexes. + (Federated, NDB, HEAP) + + HA_KEYREAD_ONLY: + Does the storage engine support index-only scans on this index. + Enables use of HA_EXTRA_KEYREAD and HA_EXTRA_NO_KEYREAD + Used to set key_map keys_for_keyread and to check in optimiser for + index-only scans. When doing a read under HA_EXTRA_KEYREAD the handler + only have to fill in the columns the key covers. If + HA_PRIMARY_KEY_IN_READ_INDEX is set then also the PRIMARY KEY columns + must be updated in the row. + (BDB, InnoDB, MyISAM) + */ + ulong index_flags(uint inx, uint part, bool all_parts) const override + { + return m_file[0]->index_flags(inx, part, all_parts); + } + /* + unireg.cc will call the following to make sure that the storage engine + can handle the data it is about to send. + + The maximum supported values is the minimum of all handlers in the table + */ + uint min_of_the_max_uint(uint (handler::*operator_func)(void) const) const; + uint min_of_the_max_uint( + HA_CREATE_INFO *create_info, + uint (handler::*operator_func)(HA_CREATE_INFO *) const) const; + uint max_supported_record_length() const override; + uint max_supported_keys() const override; + uint max_supported_key_parts() const override; + uint max_supported_key_length() const override; + uint max_supported_key_part_length( + HA_CREATE_INFO *create_info) const override; + + /* + The extra record buffer length is the maximum needed by all handlers. + The minimum record length is the maximum of all involved handlers. + */ + uint extra_rec_buf_length() const override; + uint min_record_length(uint options) const override; + + /* + Primary key is clustered can only be true if all underlying handlers have + this feature. + */ + bool primary_key_is_clustered() const override + { + return m_pkey_is_clustered; + } + + /* + ------------------------------------------------------------------------- + MODULE compare records + ------------------------------------------------------------------------- + cmp_ref checks if two references are the same. For most handlers this is + a simple memcmp of the reference. However some handlers use primary key + as reference and this can be the same even if memcmp says they are + different. This is due to character sets and end spaces and so forth. + For the partition handler the reference is first two bytes providing the + partition identity of the referred record and then the reference of the + underlying handler. + Thus cmp_ref for the partition handler always returns false for records + not in the same partition and uses cmp_ref on the underlying handler + to check whether the rest of the reference part is also the same. + ------------------------------------------------------------------------- + */ + int cmp_ref(const uchar *ref1, const uchar *ref2) override; + + /* + ------------------------------------------------------------------------- + MODULE condition pushdown + ------------------------------------------------------------------------- + cond_push + ------------------------------------------------------------------------- + */ + + /* No support of engine condition pushdown yet! */ + //const Item *cond_push(const Item *cond); + //void cond_pop(); + /* Only Index condition pushdown is supported currently. */ + Item *idx_cond_push(uint keyno, Item *idx_cond) override; + void cancel_pushed_idx_cond() override; + /* No support of pushed joins yet! */ + //uint number_of_pushed_joins() + //virtual const TABLE* root_of_pushed_join() const + //virtual const TABLE* parent_of_pushed_join() const + //virtual int index_read_pushed(uchar * buf, const uchar * key, + //key_part_map keypart_map) + //virtual int index_next_pushed(uchar * buf) + + + /* + ------------------------------------------------------------------------- + MODULE auto increment + ------------------------------------------------------------------------- + This module is used to handle the support of auto increments. + + This variable in the handler is used as part of the handler interface + It is maintained by the parent handler object and should not be + touched by child handler objects (see handler.cc for its use). + + auto_increment_column_changed + ------------------------------------------------------------------------- + */ + void get_auto_increment(ulonglong offset, ulonglong increment, + ulonglong nb_desired_values, + ulonglong *first_value, + ulonglong *nb_reserved_values) override; + void release_auto_increment() override + { + Partition_helper::ph_release_auto_increment(); + } + /** Release the auto increment for all underlying partitions. */ + void release_auto_increment_all_parts() override; + + public: + /* + ------------------------------------------------------------------------- + MODULE initialize handler for HANDLER call + ------------------------------------------------------------------------- + This method is a special InnoDB method called before a HANDLER query. + ------------------------------------------------------------------------- + */ + void init_table_handle_for_HANDLER() override; + + /* + The remainder of this file defines the handler methods not implemented + by the partition handler + */ + + /* + ------------------------------------------------------------------------- + MODULE foreign key support + ------------------------------------------------------------------------- + The following methods are used to implement foreign keys as supported by + InnoDB. Implement this ?? + get_foreign_key_create_info is used by SHOW CREATE TABLE to get a textual + description of how the CREATE TABLE part to define FOREIGN KEY's is done. + free_foreign_key_create_info is used to free the memory area that provided + this description. + can_switch_engines checks if it is ok to switch to a new engine based on + the foreign key info in the table. + ------------------------------------------------------------------------- + + virtual char* get_foreign_key_create_info() + virtual void free_foreign_key_create_info(char* str) + + virtual int get_foreign_key_list(THD *thd, + List *f_key_list) + virtual uint referenced_by_foreign_key() + */ + bool can_switch_engines() override; + /* + ------------------------------------------------------------------------- + MODULE fulltext index + ------------------------------------------------------------------------- + Fulltext stuff not yet. + ------------------------------------------------------------------------- + virtual int ft_init() { return HA_ERR_WRONG_COMMAND; } + virtual FT_INFO *ft_init_ext(uint flags,uint inx,const uchar *key, + uint keylen) + { return nullptr; } + virtual int ft_read(uchar *buf) { return HA_ERR_WRONG_COMMAND; } + */ + + /* + ------------------------------------------------------------------------- + MODULE in-place ALTER TABLE + ------------------------------------------------------------------------- + These methods are in the handler interface. (used by innodb-plugin) + They are used for in-place alter table: + ------------------------------------------------------------------------- + */ + enum_alter_inplace_result check_if_supported_inplace_alter( + TABLE *altered_table, Alter_inplace_info *ha_alter_info) override; + bool prepare_inplace_alter_table(TABLE * altered_table, + Alter_inplace_info *ha_alter_info) override; + bool inplace_alter_table(TABLE * altered_table, + Alter_inplace_info *ha_alter_info) override; + bool commit_inplace_alter_table(TABLE * altered_table, + Alter_inplace_info *ha_alter_info, + bool commit) override; + void notify_table_changed() override; + + /* + ------------------------------------------------------------------------- + MODULE tablespace support + ------------------------------------------------------------------------- + */ + int discard_or_import_tablespace(my_bool discard) override; + + /* + ------------------------------------------------------------------------- + MODULE admin MyISAM + ------------------------------------------------------------------------- + + ------------------------------------------------------------------------- + OPTIMIZE TABLE, CHECK TABLE, ANALYZE TABLE and REPAIR TABLE are + mapped to a routine that handles looping over a given set of + partitions and those routines send a flag indicating to execute on + all partitions. + ------------------------------------------------------------------------- + */ + int optimize(THD *thd, HA_CHECK_OPT *check_opt) override; + int analyze(THD *thd, HA_CHECK_OPT *check_opt) override; + int check(THD *thd, HA_CHECK_OPT *check_opt) override; + int repair(THD *thd, HA_CHECK_OPT *check_opt) override; + bool check_and_repair(THD *thd) override; + bool auto_repair() const override; + bool is_crashed() const override; + int check_for_upgrade(HA_CHECK_OPT *check_opt) override; + + private: + int handle_opt_partitions(THD *thd, HA_CHECK_OPT *check_opt, + enum_part_operation operation); + int handle_opt_part(THD *thd, HA_CHECK_OPT *check_opt, uint part_id, + enum_part_operation operation); + + public: + /* + ------------------------------------------------------------------------- + Admin commands not supported currently (almost purely MyISAM routines) + This means that the following methods are not implemented: + ------------------------------------------------------------------------- + + virtual int backup(TD* thd, HA_CHECK_OPT *check_opt); + virtual int restore(THD* thd, HA_CHECK_OPT *check_opt); + virtual int dump(THD* thd, int fd = -1); + virtual int net_read_dump(NET* net); + */ + ha_checksum checksum() const override { return Partition_helper::ph_checksum(); } + /* Enabled keycache for performance reasons, WL#4571 */ + int assign_to_keycache(THD *thd, HA_CHECK_OPT *check_opt) override; + int preload_keys(THD *thd, HA_CHECK_OPT *check_opt) override; + + /* + ------------------------------------------------------------------------- + MODULE enable/disable indexes + ------------------------------------------------------------------------- + Enable/Disable Indexes are only supported by HEAP and MyISAM. + ------------------------------------------------------------------------- + */ + int disable_indexes(uint mode) override; + int enable_indexes(uint mode) override; + int indexes_are_disabled(void) override; + + /* + ------------------------------------------------------------------------- + MODULE append_create_info + ------------------------------------------------------------------------- + append_create_info is only used by MyISAM MERGE tables and the partition + handler will not support this handler as underlying handler. + Implement this?? + ------------------------------------------------------------------------- + virtual void append_create_info(String *packet) + */ + + /* For TokuDB Read Free Replication */ + void rpl_before_write_rows() override; + void rpl_after_write_rows() override; + void rpl_before_delete_rows() override; + void rpl_after_delete_rows() override; + void rpl_before_update_rows() override; + void rpl_after_update_rows() override; + bool rpl_lookup_rows() override; + + /* For MyRocks Writebatch Replication validation */ + bool rpl_can_handle_stm_event() const override; + + /* + ------------------------------------------------------------------------- + MODULE partitioning specific handler API + ------------------------------------------------------------------------- + */ + handler * get_handler() override { return static_cast(this); } + Partition_handler *get_partition_handler() override + { + return static_cast(this); + } + void set_part_info(partition_info *part_info, bool early) override + { + Partition_helper::set_part_info_low(part_info, early); + } + uint alter_flags(uint flags MY_ATTRIBUTE((unused))) const override + { + return (HA_PARTITION_FUNCTION_SUPPORTED | HA_FAST_CHANGE_PARTITION); + } + + private: + /* private support functions for Partition_helper: */ + int write_row_in_part(uint part_id, uchar *buf) override; + int update_row_in_part(uint part_id, const uchar *old_data, + uchar *new_data) override; + int delete_row_in_part(uint part_id, const uchar *buf) override; + int rnd_init_in_part(uint part_id, bool table_scan) override; + int rnd_next_in_part(uint part_id, uchar *buf) override; + int rnd_end_in_part(uint part_id, bool scan) override; + void position_in_last_part(uchar *ref, const uchar *record) override; + int rnd_pos_in_part(uint part_id, uchar *buf, uchar *pos) override; + int index_init_in_part(uint part, uint keynr, bool sorted) override; + int index_end_in_part(uint part) override; + int index_last_in_part(uint part, uchar *buf) override; + int index_first_in_part(uint part, uchar *buf) override; + int index_prev_in_part(uint part, uchar *buf) override; + int index_next_in_part(uint part, uchar *buf) override; + int index_next_same_in_part(uint part, uchar *buf, const uchar *key, + uint length) override; + int index_read_map_in_part(uint part, uchar *buf, const uchar *key, + key_part_map keypart_map, + enum ha_rkey_function find_flag) override; + int index_read_idx_map_in_part(uint part, uchar *buf, uint index, + const uchar *key, key_part_map keypart_map, + enum ha_rkey_function find_flag) override; + int index_read_last_map_in_part(uint part, uchar *buf, const uchar *key, + key_part_map keypart_map) override; + int read_range_first_in_part(uint part_id, uchar *buf, + const key_range *start_key, + const key_range *end_key, bool eq_range_arg, + bool sorted) override; + int read_range_next_in_part(uint part, uchar *buf) override; + ha_checksum checksum_in_part(uint part_id) const override; + int initialize_auto_increment(bool no_lock) override; + /* + Access methods to protected areas in handler to avoid adding + friend class Partition_helper in class handler. + */ + THD * get_thd() const override { return ha_thd(); } + TABLE *get_table() const override { return table; } + bool get_eq_range() const override { return eq_range; } + void set_eq_range(bool eq_range_arg) override { eq_range= eq_range_arg; } + void set_range_key_part(KEY_PART_INFO *key_part) override + { + range_key_part= key_part; + } +}; + +bool get_part_str_for_path(const char *path, std::string &result); +bool get_part_str_for_table(const char *name, std::string &result); +partition_info *parse_partition_info(THD * thd, + const std::string &partition_info_str); +} // namespace native_part +#endif /* PARTITION_BASE_INCLUDED */ diff --git a/sql/sql_table.cc b/sql/sql_table.cc index 8c89d11effb6..e3aaae2b6cdc 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -2966,24 +2966,34 @@ bool quick_rm_table(THD *thd, handlerton *base, const char *db, const char *table_name, uint flags) { char path[FN_REFLEN + 1]; + char frm_path[FN_REFLEN + 1]; bool error= 0; DBUG_ENTER("quick_rm_table"); - - size_t path_length= build_table_filename(path, sizeof(path) - 1, - db, table_name, reg_ext, flags); - if (mysql_file_delete(key_file_frm, path, MYF(0))) - error= 1; /* purecov: inspected */ - path[path_length - reg_ext_length]= '\0'; // Remove reg_ext + /* + Remove *.frm file at the end of the procedure to let + storage engine to read some info from the file + (for example, partition info). + */ + size_t path_length= build_table_filename(path, sizeof(path) - 1, db, + table_name, reg_ext, flags); + strncpy(frm_path, path, sizeof(frm_path) - 1); + path[path_length - reg_ext_length]= '\0'; // Remove reg_ext if (flags & NO_HA_TABLE) { handler *file= get_new_handler((TABLE_SHARE*) 0, thd->mem_root, base); if (!file) - DBUG_RETURN(true); - (void) file->ha_create_handler_files(path, NULL, CHF_DELETE_FLAG, NULL); + { + error|= true; + goto exit; + } + (void)file->ha_create_handler_files(path, NULL, CHF_DELETE_FLAG, NULL); delete file; } if (!(flags & (FRM_ONLY|NO_HA_TABLE))) error|= ha_delete_table(current_thd, base, path, db, table_name, 0); +exit: + if (mysql_file_delete(key_file_frm, frm_path, MYF(0))) + error|= true; /* purecov: inspected */ DBUG_RETURN(error); } diff --git a/sql/table.cc b/sql/table.cc index 15ddfc6f0821..de91f4083d9f 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -98,8 +98,6 @@ static Item *create_view_field(THD *thd, TABLE_LIST *view, Item **field_ref, inline bool is_system_table_name(const char *name, size_t length); -static ulong get_form_pos(File file, uchar *head); - /************************************************************************** Object_creation_ctx implementation. **************************************************************************/ @@ -3658,7 +3656,7 @@ void free_blob_buffers_and_reset(TABLE *table, uint32 size) @retval The form position. */ -static ulong get_form_pos(File file, uchar *head) +ulong get_form_pos(File file, uchar *head) { uchar *pos, *buf; uint names, length; diff --git a/sql/table.h b/sql/table.h index 80aa9850f14f..d57a2b9ae8b8 100644 --- a/sql/table.h +++ b/sql/table.h @@ -3067,6 +3067,7 @@ bool update_generated_write_fields(const MY_BITMAP *bitmap, TABLE *table); bool update_generated_read_fields(uchar *buf, TABLE *table, uint active_index= MAX_KEY); +ulong get_form_pos(File file, uchar *head); #endif /* MYSQL_CLIENT */ #endif /* TABLE_INCLUDED */ diff --git a/storage/rocksdb/CMakeLists.txt b/storage/rocksdb/CMakeLists.txt index cd2b1a496d86..0803efd163ea 100644 --- a/storage/rocksdb/CMakeLists.txt +++ b/storage/rocksdb/CMakeLists.txt @@ -179,6 +179,7 @@ SET(ROCKSDB_SOURCES rdb_sst_info.cc rdb_sst_info.h rdb_utils.cc rdb_utils.h rdb_buff.h rdb_threads.cc rdb_threads.h + ha_rockspart.cc ha_rockspart.h ${ROCKSDB_LIB_SOURCES} ) diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index 13e7df92d90c..be95e4b84bea 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -41,6 +41,7 @@ #include "mysql/thread_pool_priv.h" #include "mysys_err.h" #include "sql_audit.h" +#include "sql_partition.h" #include "sql_table.h" // Both MySQL and RocksDB define the same constant. To avoid compilation errors @@ -64,6 +65,7 @@ /* MyRocks includes */ #include "./event_listener.h" #include "./ha_rocksdb_proto.h" +#include "./ha_rockspart.h" #include "./logger.h" #include "./rdb_cf_manager.h" #include "./rdb_cf_options.h" @@ -469,6 +471,7 @@ static char *rocksdb_strict_collation_exceptions = nullptr; static my_bool rocksdb_collect_sst_properties = TRUE; static my_bool rocksdb_force_flush_memtable_now_var = FALSE; static my_bool rocksdb_force_flush_memtable_and_lzero_now_var = FALSE; +static my_bool rocksdb_enable_native_partition = FALSE; static my_bool rocksdb_enable_ttl = TRUE; static my_bool rocksdb_enable_ttl_read_filtering = TRUE; static int rocksdb_debug_ttl_rec_ts = 0; @@ -1298,6 +1301,12 @@ static MYSQL_SYSVAR_BOOL(pause_background_work, rocksdb_pause_background_work, "Disable all rocksdb background operations", nullptr, rocksdb_set_pause_background_work, false); +static MYSQL_SYSVAR_BOOL( + enable_native_partition, rocksdb_enable_native_partition, + PLUGIN_VAR_READONLY, + "Enable native partitioning", nullptr, + nullptr, false); + static MYSQL_SYSVAR_BOOL( enable_ttl, rocksdb_enable_ttl, PLUGIN_VAR_RQCMDARG, "Enable expired TTL records to be dropped during compaction.", nullptr, @@ -1628,6 +1637,7 @@ static struct st_mysql_sys_var *rocksdb_system_variables[] = { MYSQL_SYSVAR(collect_sst_properties), MYSQL_SYSVAR(force_flush_memtable_now), MYSQL_SYSVAR(force_flush_memtable_and_lzero_now), + MYSQL_SYSVAR(enable_native_partition), MYSQL_SYSVAR(enable_ttl), MYSQL_SYSVAR(enable_ttl_read_filtering), MYSQL_SYSVAR(debug_ttl_rec_ts), @@ -3837,6 +3847,8 @@ static rocksdb::Status check_rocksdb_options_compatibility( return status; } +static uint rocksdb_partition_flags() { return (HA_CANNOT_PARTITION_FK); } + /* Storage Engine initialization function, invoked when plugin is loaded. */ @@ -3917,6 +3929,9 @@ static int rocksdb_init_func(void *const p) { rocksdb_hton->flags = HTON_TEMPORARY_NOT_SUPPORTED | HTON_SUPPORTS_EXTENDED_KEYS | HTON_CAN_RECREATE; + if (rocksdb_enable_native_partition) + rocksdb_hton->partition_flags = rocksdb_partition_flags; + DBUG_ASSERT(!mysqld_embedded); if (rocksdb_db_options->max_open_files > (long) open_files_limit) { @@ -4767,6 +4782,18 @@ void Rdb_open_tables_map::release_table_handler( static handler *rocksdb_create_handler(my_core::handlerton *const hton, my_core::TABLE_SHARE *const table_arg, my_core::MEM_ROOT *const mem_root) { + + if (rocksdb_enable_native_partition && + table_arg && table_arg->db_type() == rocksdb_hton && + table_arg->partition_info_str && table_arg->partition_info_str_len) { + ha_rockspart *file = new (mem_root) ha_rockspart(hton, table_arg); + if (file && file->init_partitioning(mem_root)) { + delete file; + return nullptr; + } + return (file); + } + return new (mem_root) ha_rocksdb(hton, table_arg); } @@ -4814,7 +4841,8 @@ bool ha_rocksdb::init_with_fields() { const uint pk = table_share->primary_key; if (pk != MAX_KEY) { const uint key_parts = table_share->key_info[pk].user_defined_key_parts; - check_keyread_allowed(pk /*PK*/, key_parts - 1, true); + check_keyread_allowed(m_pk_can_be_decoded, table_share, pk /*PK*/, + key_parts - 1, true); } else m_pk_can_be_decoded = false; @@ -6863,8 +6891,9 @@ int ha_rocksdb::create(const char *const name, TABLE *const table_arg, See comment in ha_rocksdb::index_flags() for details. */ -bool ha_rocksdb::check_keyread_allowed(uint inx, uint part, - bool all_parts) const { +bool ha_rocksdb::check_keyread_allowed(bool &pk_can_be_decoded, + const TABLE_SHARE *table_share, uint inx, + uint part, bool all_parts) { bool res = true; KEY *const key_info = &table_share->key_info[inx]; @@ -6890,7 +6919,7 @@ bool ha_rocksdb::check_keyread_allowed(uint inx, uint part, const uint pk = table_share->primary_key; if (inx == pk && all_parts && part + 1 == table_share->key_info[pk].user_defined_key_parts) { - m_pk_can_be_decoded = res; + pk_can_be_decoded = res; } return res; @@ -7212,13 +7241,16 @@ int ha_rocksdb::read_row_from_secondary_key(uchar *const buf, yet). */ -ulong ha_rocksdb::index_flags(uint inx, uint part, bool all_parts) const { +ulong ha_rocksdb::index_flags(bool &pk_can_be_decoded, + const TABLE_SHARE *table_share, uint inx, + uint part, bool all_parts) { DBUG_ENTER_FUNC(); ulong base_flags = HA_READ_NEXT | // doesn't seem to be used HA_READ_ORDER | HA_READ_RANGE | HA_READ_PREV; - if (check_keyread_allowed(inx, part, all_parts)) + if (check_keyread_allowed(pk_can_be_decoded, table_share, inx, part, + all_parts)) base_flags |= HA_KEYREAD_ONLY; if (inx == table_share->primary_key) { @@ -7240,6 +7272,10 @@ ulong ha_rocksdb::index_flags(uint inx, uint part, bool all_parts) const { DBUG_RETURN(base_flags); } +ulong ha_rocksdb::index_flags(uint inx, uint part, bool all_parts) const { + return index_flags(m_pk_can_be_decoded, table_share, inx, part, all_parts); +} + /** @brief Read next index tuple through the secondary index. @@ -10146,7 +10182,7 @@ Rdb_tbl_def *ha_rocksdb::get_table_if_exists(const char *const tablename) { other HA_ERR error code (can be SE-specific) */ -int ha_rocksdb::delete_table(const char *const tablename) { +int ha_rocksdb::delete_non_partitioned_table(const char *const tablename) { DBUG_ENTER_FUNC(); DBUG_ASSERT(tablename != nullptr); @@ -10176,6 +10212,44 @@ int ha_rocksdb::delete_table(const char *const tablename) { DBUG_RETURN(HA_EXIT_SUCCESS); } +static int init_partition_handler(THD *thd, const std::string &partition_string, + ha_rockspart &file) { + DBUG_ASSERT(thd); + MEM_ROOT *mem_root = thd->mem_root; + + partition_info *part_info = + native_part::parse_partition_info(thd, partition_string); + + if (file.init_partitioning(mem_root)) + return HA_ERR_CANNOT_INITIALIZE_PARTITIONING; + + file.set_part_info(part_info, false); + + if (file.initialize_partition(mem_root)) + return HA_ERR_CANNOT_INITIALIZE_PARTITIONING; + + return 0; +} + +int ha_rocksdb::delete_partitioned_table( + const char *const tablename, const std::string &partition_info_str) { + ha_rockspart file(rocksdb_hton, nullptr); + int result = init_partition_handler(ha_thd(), partition_info_str, file); + if (result) + return result; + return file.delete_table(tablename); +} + +int ha_rocksdb::delete_table(const char *const tablename) { + DBUG_ASSERT(tablename); + std::string partition_info_str; + if (!native_part::get_part_str_for_table(tablename, partition_info_str)) + return HA_ERR_TABLE_CORRUPT; + if (partition_info_str.empty()) + return delete_non_partitioned_table(tablename); + return delete_partitioned_table(tablename, partition_info_str); +} + int ha_rocksdb::remove_rows(Rdb_tbl_def *const tbl) { const rocksdb::WriteOptions wo = rdb_get_rocksdb_write_options(handler::ha_thd()); @@ -10236,12 +10310,23 @@ int ha_rocksdb::remove_rows(Rdb_tbl_def *const tbl) { return HA_EXIT_SUCCESS; } +int ha_rocksdb::rename_partitioned_table(const char *const from, + const char *const to, + const std::string &partition_string) { + ha_rockspart file(rocksdb_hton, nullptr); + int result = init_partition_handler(ha_thd(), partition_string, file); + if (result) + return result; + return file.rename_table(from, to); +} + /** @return HA_EXIT_SUCCESS OK other HA_ERR error code (cannot be SE-specific) */ -int ha_rocksdb::rename_table(const char *const from, const char *const to) { +int ha_rocksdb::rename_non_partitioned_table(const char *const from, + const char *const to) { DBUG_ENTER_FUNC(); DBUG_ASSERT(from != nullptr); @@ -10298,6 +10383,17 @@ int ha_rocksdb::rename_table(const char *const from, const char *const to) { DBUG_RETURN(rc); } +int ha_rocksdb::rename_table(const char *const from, const char *const to) { + DBUG_ASSERT(from); + DBUG_ASSERT(to); + std::string partition_info_str; + if (!native_part::get_part_str_for_table(from, partition_info_str)) + return HA_ERR_TABLE_CORRUPT; + if (partition_info_str.empty()) + return rename_non_partitioned_table(from, to); + return rename_partitioned_table(from, to, partition_info_str); +} + /** check_if_incompatible_data() called if ALTER TABLE can't detect otherwise if new and old definition are compatible diff --git a/storage/rocksdb/ha_rocksdb.h b/storage/rocksdb/ha_rocksdb.h index 33f153e6866d..a316e4334934 100644 --- a/storage/rocksdb/ha_rocksdb.h +++ b/storage/rocksdb/ha_rocksdb.h @@ -499,7 +499,9 @@ class ha_rocksdb : public my_core::handler { /* Array of index descriptors */ std::shared_ptr *m_key_descr_arr; - bool check_keyread_allowed(uint inx, uint part, bool all_parts) const; + static bool check_keyread_allowed(bool &pk_can_be_decoded, + const TABLE_SHARE *table_share, uint inx, + uint part, bool all_parts); /* Number of key parts in PK. This is the same as @@ -835,6 +837,10 @@ class ha_rocksdb : public my_core::handler { bool init_with_fields() override; + static ulong index_flags(bool &pk_can_be_decoded, + const TABLE_SHARE *table_share, uint inx, uint part, + bool all_parts); + /** @brief This is a bitmap of flags that indicates how the storage engine implements indexes. The current index flags are documented in @@ -865,8 +871,16 @@ class ha_rocksdb : public my_core::handler { return m_store_row_debug_checksums && (rand() % 100 < m_checksums_pct); } - int rename_table(const char *const from, const char *const to) override - MY_ATTRIBUTE((__warn_unused_result__)); + MY_NODISCARD + int rename_partitioned_table(const char *const from, const char *const to, + const std::string &partition_string); + + MY_NODISCARD + int rename_non_partitioned_table(const char *const from, + const char *const to); + + MY_NODISCARD + int rename_table(const char *const from, const char *const to) override; int convert_blob_from_storage_format(my_core::Field_blob *const blob, Rdb_string_reader *const reader, @@ -1231,7 +1245,8 @@ class ha_rocksdb : public my_core::handler { int finalize_bulk_load(bool print_client_error = true) MY_ATTRIBUTE((__warn_unused_result__)); -public: + public: + void set_pk_can_be_decoded(bool flag) { m_pk_can_be_decoded = flag; } int index_init(uint idx, bool sorted) override MY_ATTRIBUTE((__warn_unused_result__)); int index_end() override MY_ATTRIBUTE((__warn_unused_result__)); @@ -1285,6 +1300,11 @@ class ha_rocksdb : public my_core::handler { ha_rows records_in_range(uint inx, key_range *const min_key, key_range *const max_key) override MY_ATTRIBUTE((__warn_unused_result__)); + int delete_non_partitioned_table(const char *const from) + MY_ATTRIBUTE((__warn_unused_result__)); + int delete_partitioned_table(const char *const from, + const std::string &partition_info_str) + MY_ATTRIBUTE((__warn_unused_result__)); int delete_table(const char *const from) override MY_ATTRIBUTE((__warn_unused_result__)); int create(const char *const name, TABLE *const form, diff --git a/storage/rocksdb/ha_rockspart.cc b/storage/rocksdb/ha_rockspart.cc new file mode 100644 index 000000000000..acef83711054 --- /dev/null +++ b/storage/rocksdb/ha_rockspart.cc @@ -0,0 +1,122 @@ +/* Copyright (C) 2018 Percona + + 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 Street, Fifth Floor, Boston, MA 02110-1301, + USA */ + +#define MYSQL_SERVER 1 + +#include "ha_rockspart.h" +#include "../../sql/table.h" +#include "ha_rocksdb.h" +#include "item.h" + +using myrocks::ha_rocksdb; +namespace myrocks { +extern handlerton *rocksdb_hton; +} + +handler *ha_rockspart::get_file_handler(TABLE_SHARE *share, MEM_ROOT *alloc) { + ha_rocksdb *file = new (alloc) ha_rocksdb(myrocks::rocksdb_hton, share); + file->init(); + return file; +} + +void ha_rockspart::set_pk_can_be_decoded_for_each_partition() { + for (auto file = reinterpret_cast(m_file); *file; file++) + (*file)->set_pk_can_be_decoded(m_pk_can_be_decoded); +} + +int ha_rockspart::open(const char *name, int mode, uint test_if_locked) { + int result = native_part::Partition_base::open(name, mode, test_if_locked); + set_pk_can_be_decoded_for_each_partition(); + return result; +} + +int ha_rockspart::create(const char *name, TABLE *form, + HA_CREATE_INFO *create_info) { + int result = native_part::Partition_base::create(name, form, create_info); + set_pk_can_be_decoded_for_each_partition(); + return result; +} + +/** + Clone the open and locked partitioning handler. + + @param mem_root MEM_ROOT to use. + + @return Pointer to the successfully created clone or nullptr + + @details + This function creates a new native_part::Partition_base handler as a + clone/copy. The original (this) must already be opened and locked. The clone + will use the originals m_part_info. It also allocates memory for ref + + ref_dup. In native_part::Partition_base::open() it will clone its original + handlers partitions which will allocate then on the correct MEM_ROOT and also + open them. +*/ + +handler *ha_rockspart::clone(const char *name, MEM_ROOT *mem_root) { + ha_rockspart *new_handler; + + DBUG_ENTER("native_part::Partition_base::clone"); + + /* If this->table == nullptr, then the current handler has been created but not + opened. Prohibit cloning such handler. */ + if (!table) + DBUG_RETURN(nullptr); + + new_handler = + new (mem_root) ha_rockspart(ht, table_share, m_part_info, this, mem_root); + if (!new_handler) + DBUG_RETURN(nullptr); + + /* + We will not clone each partition's handler here, it will be done in + native_part::Partition_base::open() for clones. Also set_ha_share_ref is not + needed here, since 1) ha_share is copied in the constructor used above 2) + each partition's cloned handler will set it from its original. + */ + + /* + Allocate new_handler->ref here because otherwise ha_open will allocate it + on this->table->mem_root and we will not be able to reclaim that memory + when the clone handler object is destroyed. + */ + if (!(new_handler->ref = + (uchar *)alloc_root(mem_root, ALIGN_SIZE(ref_length) * 2))) + goto err; + + if (new_handler->ha_open(table, name, table->db_stat, + HA_OPEN_IGNORE_IF_LOCKED | HA_OPEN_NO_PSI_CALL)) + goto err; + + new_handler->m_pk_can_be_decoded = m_pk_can_be_decoded; + new_handler->set_pk_can_be_decoded_for_each_partition(); + + DBUG_RETURN((handler *)new_handler); + +err: + delete new_handler; + DBUG_RETURN(nullptr); +} + +ulong ha_rockspart::index_flags(uint idx, uint part, bool all_parts) const { + return myrocks::ha_rocksdb::index_flags(m_pk_can_be_decoded, table_share, idx, + part, all_parts); +} + +const char **ha_rockspart::bas_ext() const { + static const char *null_ext = nullptr; + return &null_ext; +} diff --git a/storage/rocksdb/ha_rockspart.h b/storage/rocksdb/ha_rockspart.h new file mode 100644 index 000000000000..ab9d95874dfb --- /dev/null +++ b/storage/rocksdb/ha_rockspart.h @@ -0,0 +1,48 @@ +/* Copyright (C) 2018 Percona + + 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 Street, Fifth Floor, Boston, MA 02110-1301, + USA */ + +#pragma once + +#include "partitioning/partition_base.h" + +/* This class must contain engine-specific functions for partitioning */ +class ha_rockspart : public native_part::Partition_base { + public: + ha_rockspart(handlerton *hton, TABLE_SHARE *table_arg) + : native_part::Partition_base(hton, table_arg){}; + + ha_rockspart(handlerton *hton, TABLE_SHARE *share, + partition_info *part_info_arg, + native_part::Partition_base *clone_arg, + MEM_ROOT *clone_mem_root_arg) + : native_part::Partition_base(hton, share, part_info_arg, clone_arg, + clone_mem_root_arg) {} + + ~ha_rockspart() {} + + int open(const char *name, int mode, uint test_if_locked) override; + int create(const char *name, TABLE *form, + HA_CREATE_INFO *create_info) override; + + private: + virtual handler *get_file_handler(TABLE_SHARE *share, MEM_ROOT *alloc); + virtual handler *clone(const char *name, MEM_ROOT *mem_root); + virtual ulong index_flags(uint inx, uint part, bool all_parts) const; + virtual const char **bas_ext() const; + + void set_pk_can_be_decoded_for_each_partition(); + mutable bool m_pk_can_be_decoded = false; +}; diff --git a/storage/rocksdb/rdb_datadic.cc b/storage/rocksdb/rdb_datadic.cc index e4e5698ea38b..b7ce3e1d7dbc 100644 --- a/storage/rocksdb/rdb_datadic.cc +++ b/storage/rocksdb/rdb_datadic.cc @@ -46,6 +46,8 @@ #include "./rdb_psi.h" #include "./rdb_utils.h" +#include "partitioning/partition_base.h" + namespace myrocks { void get_mem_comparable_space(const CHARSET_INFO *cs, @@ -4196,6 +4198,17 @@ bool Rdb_validate_tbls::check_frm_file(const std::string &fullpath, return false; } + std::string partition_info_str; + if (!native_part::get_part_str_for_path(fullfilename.c_ptr(), + partition_info_str)) { + sql_print_warning("RocksDB: can't read partition info string from %s", + fullfilename.ptr()); + return false; + } + + if (!partition_info_str.empty()) + eng_type = DB_TYPE_PARTITION_DB; + if (type == FRMTYPE_TABLE) { /* For a RocksDB table do we have a reference in the data dictionary? */ if (eng_type == DB_TYPE_ROCKSDB) { diff --git a/storage/tokudb/ha_tokudb.cc b/storage/tokudb/ha_tokudb.cc index 3a1ed20f7232..49b6baab64ef 100644 --- a/storage/tokudb/ha_tokudb.cc +++ b/storage/tokudb/ha_tokudb.cc @@ -24,12 +24,20 @@ Copyright (c) 2006, 2015, Percona and/or its affiliates. All rights reserved. #ident "Copyright (c) 2006, 2015, Percona and/or its affiliates. All rights reserved." #include "hatoku_hton.h" -#include "hatoku_cmp.h" #include "tokudb_buffer.h" #include "tokudb_status.h" -#include "tokudb_card.h" #include "ha_tokudb.h" +#include "ha_tokupart.h" +#include "hatoku_cmp.h" +#include "partition_info.h" +#include "partitioning/partition_base.h" #include "sql_db.h" +#include "sql_parse.h" +#include "sql_table.h" +#include "table.h" +#include "tokudb_card.h" + +#include "mysql/psi/mysql_file.h" pfs_key_t ha_tokudb_mutex_key; pfs_key_t num_DBs_lock_key; @@ -7556,16 +7564,7 @@ int ha_tokudb::delete_or_rename_table (const char* from_name, const char* to_nam return error; } - -// -// Drops table -// Parameters: -// [in] name - name of table to be deleted -// Returns: -// 0 on success -// error otherwise -// -int ha_tokudb::delete_table(const char *name) { +int ha_tokudb::delete_non_partitioned_table(const char* name) { TOKUDB_HANDLER_DBUG_ENTER("%s", name); TOKUDB_SHARE* share = TOKUDB_SHARE::get_share(name, NULL, false); if (share) { @@ -7590,7 +7589,49 @@ int ha_tokudb::delete_table(const char *name) { TOKUDB_HANDLER_DBUG_RETURN(error); } -static bool tokudb_check_db_dir_exist_from_table_name(const char *table_name) { +int ha_tokudb::delete_rename_partitioned_table( + const char* from, + const char* to, + const std::string& partition_info_str) { + THD* thd = ha_thd(); + DBUG_ASSERT(thd); + MEM_ROOT* mem_root = thd->mem_root; + + partition_info* part_info = + native_part::parse_partition_info(ha_thd(), partition_info_str); + ha_tokupart file(tokudb_hton, nullptr); + if (file.init_partitioning(mem_root)) + return HA_ERR_CANNOT_INITIALIZE_PARTITIONING; + + file.set_part_info(part_info, false); + if (file.initialize_partition(mem_root)) + return HA_ERR_CANNOT_INITIALIZE_PARTITIONING; + + if (to) + return file.rename_table(from, to); + + return file.delete_table(from); +} + +// +// Drops table +// Parameters: +// [in] name - name of table to be deleted +// Returns: +// 0 on success +// error otherwise +// +int ha_tokudb::delete_table(const char* name) { + DBUG_ASSERT(name); + std::string partition_info_str; + if (!native_part::get_part_str_for_table(name, partition_info_str)) + return HA_ERR_TABLE_CORRUPT; + if (partition_info_str.empty()) + return delete_non_partitioned_table(name); + return delete_rename_partitioned_table(name, nullptr, partition_info_str); +} + +static bool tokudb_check_db_dir_exist_from_table_name(const char* table_name) { DBUG_ASSERT(table_name); bool mysql_dir_exists; char db_name[FN_REFLEN]; @@ -7618,16 +7659,7 @@ static bool tokudb_check_db_dir_exist_from_table_name(const char *table_name) { return mysql_dir_exists; } -// -// renames table from "from" to "to" -// Parameters: -// [in] name - old name of table -// [in] to - new name of table -// Returns: -// 0 on success -// error otherwise -// -int ha_tokudb::rename_table(const char *from, const char *to) { +int ha_tokudb::rename_non_partitioned_table(const char* from, const char* to) { TOKUDB_HANDLER_DBUG_ENTER("%s %s", from, to); TOKUDB_SHARE* share = TOKUDB_SHARE::get_share(from, NULL, false); if (share) { @@ -7663,6 +7695,25 @@ int ha_tokudb::rename_table(const char *from, const char *to) { TOKUDB_HANDLER_DBUG_RETURN(error); } +// +// renames table from "from" to "to" +// Parameters: +// [in] name - old name of table +// [in] to - new name of table +// Returns: +// 0 on success +// error otherwise +// +int ha_tokudb::rename_table(const char* from, const char* to) { + DBUG_ASSERT(from); + DBUG_ASSERT(to); + std::string partition_info_str; + if (!native_part::get_part_str_for_table(from, partition_info_str)) + return DB_NOTFOUND; // TODO: set correct error code here + if (partition_info_str.empty()) + return rename_non_partitioned_table(from, to); + return delete_rename_partitioned_table(from, to, partition_info_str); +} /* Returns estimate on number of seeks it will take to read through the table @@ -8898,6 +8949,7 @@ bool ha_tokudb::rpl_lookup_rows() { #include "ha_tokudb_mrr_mysql.cc" // handlerton +#include "ha_tokupart.cc" #include "hatoku_hton.cc" // generate template functions diff --git a/storage/tokudb/ha_tokudb.h b/storage/tokudb/ha_tokudb.h index df4a0b5d9557..a600d0e4fc75 100644 --- a/storage/tokudb/ha_tokudb.h +++ b/storage/tokudb/ha_tokudb.h @@ -1002,10 +1002,19 @@ class ha_tokudb : public handler { List &update_values, DB_TXN *txn); #endif // defined(TOKU_INCLUDE_UPSERT) && TOKU_INCLUDE_UPSERT -public: - // mysql sometimes retires a txn before a cursor that references the txn is closed. - // for example, commit is sometimes called before index_end. the following methods - // put the handler on a list of handlers that get cleaned up when the txn is retired. + MY_NODISCARD int delete_non_partitioned_table(const char* name); + MY_NODISCARD int delete_rename_partitioned_table( + const char* from, + const char* to, + const std::string& partition_info_str); + MY_NODISCARD int rename_non_partitioned_table(const char* from, + const char* to); + + public: + // mysql sometimes retires a txn before a cursor that references the txn is + // closed. for example, commit is sometimes called before index_end. the + // following methods put the handler on a list of handlers that get cleaned + // up when the txn is retired. void cleanup_txn(DB_TXN *txn); private: LIST trx_handler_list; diff --git a/storage/tokudb/ha_tokupart.cc b/storage/tokudb/ha_tokupart.cc new file mode 100644 index 000000000000..e42f77422c0a --- /dev/null +++ b/storage/tokudb/ha_tokupart.cc @@ -0,0 +1,98 @@ +/* Copyright (C) 2018 Percona + + 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 Street, Fifth Floor, Boston, MA 02110-1301, + USA */ + +handler *ha_tokupart::get_file_handler(TABLE_SHARE *share, MEM_ROOT *alloc) { + ha_tokudb *file = new (alloc) ha_tokudb(tokudb_hton, share); + file->init(); + return file; +} + +/** + Clone the open and locked partitioning handler. + + @param mem_root MEM_ROOT to use. + + @return Pointer to the successfully created clone or nullptr + + @details + This function creates a new native_part::Partition_base handler as a + clone/copy. The original (this) must already be opened and locked. The clone + will use the originals m_part_info. It also allocates memory for ref + + ref_dup. In native_part::Partition_base::open() it will clone its original + handlers partitions which will allocate then on the correct MEM_ROOT and also + open them. +*/ + +handler *ha_tokupart::clone(const char *name, MEM_ROOT *mem_root) { + ha_tokupart *new_handler; + + DBUG_ENTER("native_part::Partition_base::clone"); + + /* If this->table == nullptr, then the current handler has been created but not + opened. Prohibit cloning such handler. */ + if (!table) + DBUG_RETURN(nullptr); + + new_handler = new (mem_root) + ha_tokupart(ht, table_share, m_part_info, this, mem_root); + if (!new_handler) + DBUG_RETURN(nullptr); + + /* + We will not clone each partition's handler here, it will be done in + native_part::Partition_base::open() for clones. Also set_ha_share_ref is + not needed here, since 1) ha_share is copied in the constructor used above + 2) each partition's cloned handler will set it from its original. + */ + + /* + Allocate new_handler->ref here because otherwise ha_open will allocate it + on this->table->mem_root and we will not be able to reclaim that memory + when the clone handler object is destroyed. + */ + if (!(new_handler->ref = + (uchar *)alloc_root(mem_root, ALIGN_SIZE(ref_length) * 2))) + goto err; + + if (new_handler->ha_open(table, + name, + table->db_stat, + HA_OPEN_IGNORE_IF_LOCKED | HA_OPEN_NO_PSI_CALL)) + goto err; + + DBUG_RETURN((handler *)new_handler); + +err: + delete new_handler; + DBUG_RETURN(nullptr); +} + +ulong ha_tokupart::index_flags(uint idx, uint part, bool all_parts) const { + TOKUDB_HANDLER_DBUG_ENTER(""); + assert_always(table_share); + ulong flags = (HA_READ_NEXT | HA_READ_PREV | HA_READ_ORDER | + HA_KEYREAD_ONLY | HA_READ_RANGE | HA_DO_INDEX_COND_PUSHDOWN); + if (key_is_clustering(&table_share->key_info[idx])) { + flags |= HA_CLUSTERED_INDEX; + } + DBUG_RETURN(flags); +} + +const char **ha_tokupart::bas_ext() const { + static const char *null_ext = nullptr; + TOKUDB_HANDLER_DBUG_ENTER(""); + DBUG_RETURN(&null_ext); +} diff --git a/storage/tokudb/ha_tokupart.h b/storage/tokudb/ha_tokupart.h new file mode 100644 index 000000000000..1b5ae6cf8ea5 --- /dev/null +++ b/storage/tokudb/ha_tokupart.h @@ -0,0 +1,48 @@ +/* Copyright (C) 2018 Percona + + 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 Street, Fifth Floor, Boston, MA 02110-1301, + USA */ + +#ifndef _HA_TOKUPART_H +#define _HA_TOKUPART_H + +#include "partitioning/partition_base.h" + +/* This class must contain engine-specific functions for partitioning */ +class ha_tokupart : public native_part::Partition_base { + public: + ha_tokupart(handlerton *hton, TABLE_SHARE *table_arg) + : native_part::Partition_base(hton, table_arg){}; + + ha_tokupart(handlerton *hton, + TABLE_SHARE *share, + partition_info *part_info_arg, + native_part::Partition_base *clone_arg, + MEM_ROOT *clone_mem_root_arg) + : native_part::Partition_base(hton, + share, + part_info_arg, + clone_arg, + clone_mem_root_arg) {} + + ~ha_tokupart() {} + + private: + virtual handler *get_file_handler(TABLE_SHARE *share, MEM_ROOT *alloc); + virtual handler *clone(const char *name, MEM_ROOT *mem_root); + virtual ulong index_flags(uint inx, uint part, bool all_parts) const; + virtual const char **bas_ext() const; +}; + +#endif // _HA_TOKUPART_H diff --git a/storage/tokudb/hatoku_hton.cc b/storage/tokudb/hatoku_hton.cc index 64942ae8889b..0cd973babbcc 100644 --- a/storage/tokudb/hatoku_hton.cc +++ b/storage/tokudb/hatoku_hton.cc @@ -31,6 +31,7 @@ Copyright (c) 2006, 2015, Percona and/or its affiliates. All rights reserved. #include #include "my_tree.h" +#include "sql_partition.h" #define TOKU_METADB_NAME "tokudb_meta" @@ -53,15 +54,16 @@ typedef struct savepoint_info { bool in_sub_stmt; } *SP_INFO, SP_INFO_T; -static handler* tokudb_create_handler( - handlerton* hton, - TABLE_SHARE* table, - MEM_ROOT* mem_root); +static handler* tokudb_create_handler(handlerton* hton, + TABLE_SHARE* table, + MEM_ROOT* mem_root); + +/** Return partitioning flags. */ +static uint tokudb_partition_flags(); -static void tokudb_print_error( - const DB_ENV* db_env, - const char* db_errpfx, - const char* buffer); +static void tokudb_print_error(const DB_ENV* db_env, + const char* db_errpfx, + const char* buffer); static void tokudb_cleanup_log_files(void); static int tokudb_end(handlerton* hton, ha_panic_function type); static bool tokudb_flush_logs(handlerton* hton, bool binlog_group_commit); @@ -352,6 +354,8 @@ static int tokudb_init_func(void *p) { #endif tokudb_hton->create = tokudb_create_handler; + if (tokudb::sysvars::enable_native_partition) + tokudb_hton->partition_flags = tokudb_partition_flags; tokudb_hton->close_connection = tokudb_close_connection; tokudb_hton->kill_connection = tokudb_kill_connection; @@ -655,11 +659,25 @@ static int tokudb_done_func(TOKUDB_UNUSED(void* p)) { TOKUDB_DBUG_RETURN(0); } -static handler* tokudb_create_handler( - handlerton* hton, - TABLE_SHARE* table, - MEM_ROOT* mem_root) { - return new(mem_root) ha_tokudb(hton, table); +static handler* tokudb_create_handler(handlerton* hton, + TABLE_SHARE* table, + MEM_ROOT* mem_root) { + if (tokudb::sysvars::enable_native_partition && + table && table->db_type() == tokudb_hton && table->partition_info_str && + table->partition_info_str_len) { + ha_tokupart* file = new (mem_root) ha_tokupart(hton, table); + if (file && file->init_partitioning(mem_root)) { + delete file; + return nullptr; + } + return (file); + } + + return new (mem_root) ha_tokudb(hton, table); +} + +static uint tokudb_partition_flags() { + return (HA_CAN_EXCHANGE_PARTITION | HA_CANNOT_PARTITION_FK); } int tokudb_end(TOKUDB_UNUSED(handlerton* hton), diff --git a/storage/tokudb/tokudb_sysvars.cc b/storage/tokudb/tokudb_sysvars.cc index 0118137419c1..426035b8bfff 100644 --- a/storage/tokudb/tokudb_sysvars.cc +++ b/storage/tokudb/tokudb_sysvars.cc @@ -63,6 +63,7 @@ ulong debug = 0; my_bool debug_pause_background_job_manager = FALSE; #endif // defined(TOKUDB_DEBUG) && TOKUDB_DEBUG my_bool directio = FALSE; +my_bool enable_native_partition = FALSE; my_bool enable_partial_eviction = TRUE; // file system reserve as a percentage of total disk space int fs_reserve_percent = 0; @@ -263,6 +264,15 @@ static MYSQL_SYSVAR_BOOL( NULL, FALSE); +static MYSQL_SYSVAR_BOOL( + enable_native_partition, + enable_native_partition, + PLUGIN_VAR_READONLY, + "enable native partitioning", + NULL, + NULL, + FALSE); + static void enable_partial_eviction_update( TOKUDB_UNUSED(THD* thd), TOKUDB_UNUSED(st_mysql_sys_var* sys_var), @@ -958,6 +968,7 @@ st_mysql_sys_var* system_variables[] = { MYSQL_SYSVAR(data_dir), MYSQL_SYSVAR(debug), MYSQL_SYSVAR(directio), + MYSQL_SYSVAR(enable_native_partition), MYSQL_SYSVAR(enable_partial_eviction), MYSQL_SYSVAR(fs_reserve_percent), MYSQL_SYSVAR(fsync_log_period), diff --git a/storage/tokudb/tokudb_sysvars.h b/storage/tokudb/tokudb_sysvars.h index 113d7edcfdf4..a69cd6f69c10 100644 --- a/storage/tokudb/tokudb_sysvars.h +++ b/storage/tokudb/tokudb_sysvars.h @@ -72,6 +72,7 @@ extern my_bool compress_buffers_before_eviction; extern char* data_dir; extern ulong debug; extern my_bool directio; +extern my_bool enable_native_partition; extern my_bool enable_partial_eviction; extern int fs_reserve_percent; extern uint fsync_log_period; From edc9526d29004be4f21b65a005b91452e9bbbe76 Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Thu, 18 Oct 2018 11:21:01 -0700 Subject: [PATCH 1169/1221] PS-4937 : rocksdb_update_cf_options is useless when specified in my.cnf or on command line. - Added PLUGIN_VAR_NOCMDOPT to rocksdb_update_cf_options to prevent its use in my.cnf or command line. --- storage/rocksdb/ha_rocksdb.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index 582f24b85da1..61f663094fc2 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -1214,7 +1214,8 @@ static MYSQL_SYSVAR_STR(override_cf_options, rocksdb_override_cf_options, ""); static MYSQL_SYSVAR_STR(update_cf_options, rocksdb_update_cf_options, - PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_MEMALLOC, + PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_MEMALLOC | + PLUGIN_VAR_NOCMDOPT, "Option updates per column family for RocksDB", rocksdb_validate_update_cf_options, rocksdb_set_update_cf_options, nullptr); From 853dd48d3548fbbdaac71cab421a09f060172cad Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Thu, 18 Oct 2018 15:16:56 -0700 Subject: [PATCH 1170/1221] PS-4946 : Add option to prevent implicit creation of column family in MyRocks - Added new option rocksdb_no_create_column_family to prevent a user from creating a new column family that is not already named in the rocksdb_override_cf_options. When enabled, users will get an error if they specify a non-existing column family in an index comment on CREATE or ALTER table for a MyRocks table. --- ...cksdb_no_create_column_family_basic.result | 7 +++ ...rocksdb_no_create_column_family_basic.test | 6 +++ mysql-test/suite/rocksdb/r/rocksdb.result | 1 + .../suite/rocksdb/r/rocksdb_cf_options.result | 11 ++++- .../suite/rocksdb/t/rocksdb_cf_options.test | 27 ++++++++++- storage/rocksdb/ha_rocksdb.cc | 11 ++++- storage/rocksdb/rdb_cf_manager.cc | 45 +++++++++++-------- storage/rocksdb/rdb_cf_manager.h | 4 +- storage/rocksdb/rdb_cf_options.cc | 9 ++-- storage/rocksdb/rdb_cf_options.h | 8 ++-- storage/rocksdb/rdb_datadic.cc | 3 +- 11 files changed, 102 insertions(+), 30 deletions(-) create mode 100644 mysql-test/suite/rocksdb.sys_vars/r/rocksdb_no_create_column_family_basic.result create mode 100644 mysql-test/suite/rocksdb.sys_vars/t/rocksdb_no_create_column_family_basic.test diff --git a/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_no_create_column_family_basic.result b/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_no_create_column_family_basic.result new file mode 100644 index 000000000000..3b8a8dc8f88b --- /dev/null +++ b/mysql-test/suite/rocksdb.sys_vars/r/rocksdb_no_create_column_family_basic.result @@ -0,0 +1,7 @@ +SET @start_global_value = @@global.ROCKSDB_NO_CREATE_COLUMN_FAMILY; +SELECT @start_global_value; +@start_global_value +0 +"Trying to set variable @@global.ROCKSDB_NO_CREATE_COLUMN_FAMILY to 444. It should fail because it is readonly." +SET @@global.ROCKSDB_NO_CREATE_COLUMN_FAMILY = 444; +ERROR HY000: Variable 'rocksdb_no_create_column_family' is a read only variable diff --git a/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_no_create_column_family_basic.test b/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_no_create_column_family_basic.test new file mode 100644 index 000000000000..29e455b85c06 --- /dev/null +++ b/mysql-test/suite/rocksdb.sys_vars/t/rocksdb_no_create_column_family_basic.test @@ -0,0 +1,6 @@ +--source include/have_rocksdb.inc + +--let $sys_var=ROCKSDB_NO_CREATE_COLUMN_FAMILY +--let $read_only=1 +--let $session=0 +--source ../include/rocksdb_sys_var.inc diff --git a/mysql-test/suite/rocksdb/r/rocksdb.result b/mysql-test/suite/rocksdb/r/rocksdb.result index 97bc305d2eb4..218c44ce84f1 100644 --- a/mysql-test/suite/rocksdb/r/rocksdb.result +++ b/mysql-test/suite/rocksdb/r/rocksdb.result @@ -967,6 +967,7 @@ rocksdb_merge_combine_read_size 1073741824 rocksdb_merge_tmp_file_removal_delay_ms 0 rocksdb_new_table_reader_for_compaction_inputs OFF rocksdb_no_block_cache OFF +rocksdb_no_create_column_family OFF rocksdb_override_cf_options rocksdb_paranoid_checks ON rocksdb_pause_background_work ON diff --git a/mysql-test/suite/rocksdb/r/rocksdb_cf_options.result b/mysql-test/suite/rocksdb/r/rocksdb_cf_options.result index 99a5dbf16060..a33e3ade7b43 100644 --- a/mysql-test/suite/rocksdb/r/rocksdb_cf_options.result +++ b/mysql-test/suite/rocksdb/r/rocksdb_cf_options.result @@ -59,6 +59,15 @@ z WRITE_BUFFER_SIZE 12582912 __system__ MAX_BYTES_FOR_LEVEL_MULTIPLIER 10.000000 __system__ TARGET_FILE_SIZE_BASE 1048576 __system__ WRITE_BUFFER_SIZE 12582912 +# restart:--rocksdb_no_create_column_family=1 --rocksdb_override_cf_options=cf3={write_buffer_size=8m;target_file_size_base=2m};cf4={write_buffer_size=16m;max_bytes_for_level_multiplier=8}; +include/assert.inc ["Expected cf3 and cf4 to not exist"] +create table t4 (a int, +primary key (a) comment 'cf3') engine=rocksdb; +include/assert.inc ["Expected cf3 to exist"] +create table t5 (a int, +primary key (a) comment 'nobodyknows') engine=rocksdb; +ERROR HY000: Incorrect arguments to CREATE | ALTER - can not find column family for storing index data and creation is not allowed. +include/assert.inc ["Expected cf4 to NOT exist"] # restart -drop table t1,t2,t3; +drop table t1,t2,t3,t4; diff --git a/mysql-test/suite/rocksdb/t/rocksdb_cf_options.test b/mysql-test/suite/rocksdb/t/rocksdb_cf_options.test index b9355f7b45ca..37973d3a4b7c 100644 --- a/mysql-test/suite/rocksdb/t/rocksdb_cf_options.test +++ b/mysql-test/suite/rocksdb/t/rocksdb_cf_options.test @@ -49,6 +49,30 @@ select cf_name, option_type, value 'MAX_BYTES_FOR_LEVEL_MULTIPLIER') order by cf_name, option_type; +# restart with no_create_column_family and column family options for new cf which is not yet created + +--let $restart_parameters=restart:--rocksdb_no_create_column_family=1 --rocksdb_override_cf_options=cf3={write_buffer_size=8m;target_file_size_base=2m};cf4={write_buffer_size=16m;max_bytes_for_level_multiplier=8}; +--source include/restart_mysqld.inc + +--let $assert_text="Expected cf3 and cf4 to not exist" +--let $assert_cond="[select count(distinct cf_name) from information_schema.rocksdb_cf_options where cf_name in (\'cf3\', \'cf4\')]" = 0 +--source include/assert.inc + +create table t4 (a int, + primary key (a) comment 'cf3') engine=rocksdb; + +--let $assert_text="Expected cf3 to exist" +--let $assert_cond="[select count(distinct cf_name) from information_schema.rocksdb_cf_options where cf_name in (\'cf3\')]" = 1 +--source include/assert.inc + +--error ER_WRONG_ARGUMENTS +create table t5 (a int, + primary key (a) comment 'nobodyknows') engine=rocksdb; + +--let $assert_text="Expected cf4 to NOT exist" +--let $assert_cond="[select count(distinct cf_name) from information_schema.rocksdb_cf_options where cf_name in (\'cf4\')]" = 0 +--source include/assert.inc + # syntax error in options (no equal sign) --exec echo "restart:--rocksdb_override_cf_options=cf1" > $_expect_file_name @@ -73,5 +97,4 @@ select cf_name, option_type, value --source include/restart_mysqld.inc --echo -drop table t1,t2,t3; - +drop table t1,t2,t3,t4; diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index 61f663094fc2..5fb327aac8e0 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -500,6 +500,7 @@ static uint64_t rocksdb_write_policy = rocksdb::TxnDBWritePolicy::WRITE_COMMITTED; static my_bool rocksdb_error_on_suboptimal_collation = FALSE; static uint32_t rocksdb_stats_recalc_rate = 0; +static my_bool rocksdb_no_create_column_family = FALSE; std::atomic rocksdb_row_lock_deadlocks(0); std::atomic rocksdb_row_lock_wait_timeouts(0); @@ -1519,6 +1520,12 @@ static MYSQL_SYSVAR_BOOL(error_on_suboptimal_collation, "collation is used", nullptr, nullptr, false); +static MYSQL_SYSVAR_BOOL( + no_create_column_family, rocksdb_no_create_column_family, + PLUGIN_VAR_OPCMDARG | PLUGIN_VAR_READONLY, + "Do not allow creation of new Column Families through index comments.", + nullptr, nullptr, false); + static const int ROCKSDB_ASSUMED_KEY_VALUE_DISK_SIZE = 100; static struct st_mysql_sys_var *rocksdb_system_variables[] = { @@ -1666,6 +1673,7 @@ static struct st_mysql_sys_var *rocksdb_system_variables[] = { MYSQL_SYSVAR(large_prefix), MYSQL_SYSVAR(allow_to_start_after_corruption), MYSQL_SYSVAR(error_on_suboptimal_collation), + MYSQL_SYSVAR(no_create_column_family), MYSQL_SYSVAR(stats_recalc_rate), nullptr}; @@ -6241,7 +6249,8 @@ int ha_rocksdb::create_cfs( // Here's how `get_or_create_cf` will use the input parameters: // // `cf_name` - will be used as a CF name. - cf_handle = cf_manager.get_or_create_cf(rdb, cf_name); + cf_handle = cf_manager.get_or_create_cf(rdb, cf_name, + !rocksdb_no_create_column_family); if (!cf_handle) { DBUG_RETURN(HA_EXIT_FAILURE); diff --git a/storage/rocksdb/rdb_cf_manager.cc b/storage/rocksdb/rdb_cf_manager.cc index 51069dc6dd6e..a1e762ee7ca8 100644 --- a/storage/rocksdb/rdb_cf_manager.cc +++ b/storage/rocksdb/rdb_cf_manager.cc @@ -67,14 +67,14 @@ void Rdb_cf_manager::cleanup() { /* @brief - Find column family by name. If it doesn't exist, create it + Find column family by name. If it doesn't exist, maybe create it @detail See Rdb_cf_manager::get_cf */ rocksdb::ColumnFamilyHandle * Rdb_cf_manager::get_or_create_cf(rocksdb::DB *const rdb, - const std::string &cf_name_arg) { + const std::string &cf_name_arg, bool create) { DBUG_ASSERT(rdb != nullptr); rocksdb::ColumnFamilyHandle *cf_handle = nullptr; @@ -97,23 +97,32 @@ Rdb_cf_manager::get_or_create_cf(rocksdb::DB *const rdb, } else { /* Create a Column Family. */ rocksdb::ColumnFamilyOptions opts; - m_cf_options->get_cf_options(cf_name, &opts); - - // NO_LINT_DEBUG - sql_print_information("RocksDB: creating a column family %s", - cf_name.c_str()); - sql_print_information(" write_buffer_size=%ld", opts.write_buffer_size); - sql_print_information(" target_file_size_base=%" PRIu64, - opts.target_file_size_base); - - const rocksdb::Status s = - rdb->CreateColumnFamily(opts, cf_name, &cf_handle); - - if (s.ok()) { - m_cf_name_map[cf_handle->GetName()] = cf_handle; - m_cf_id_map[cf_handle->GetID()] = cf_handle; + bool cf_name_found = m_cf_options->get_cf_options(cf_name, &opts); + + if (create || cf_name_found) { + // NO_LINT_DEBUG + sql_print_information("RocksDB: creating a column family %s", + cf_name.c_str()); + sql_print_information(" write_buffer_size=%ld", + opts.write_buffer_size); + sql_print_information(" target_file_size_base=%" PRIu64, + opts.target_file_size_base); + + const rocksdb::Status s = + rdb->CreateColumnFamily(opts, cf_name, &cf_handle); + + if (s.ok()) { + m_cf_name_map[cf_handle->GetName()] = cf_handle; + m_cf_id_map[cf_handle->GetID()] = cf_handle; + } else { + cf_handle = nullptr; + } } else { - cf_handle = nullptr; + RDB_MUTEX_UNLOCK_CHECK(m_mutex); + my_error(ER_WRONG_ARGUMENTS, MYF(0), + "CREATE | ALTER - can not find column family for storing index " + "data and creation is not allowed."); + return nullptr; } } diff --git a/storage/rocksdb/rdb_cf_manager.h b/storage/rocksdb/rdb_cf_manager.h index 43e7af45481f..e241dbc38593 100644 --- a/storage/rocksdb/rdb_cf_manager.h +++ b/storage/rocksdb/rdb_cf_manager.h @@ -73,9 +73,11 @@ class Rdb_cf_manager { /* Used by CREATE TABLE. - cf_name=nullptr means use default column family + - create=true means create cf if missing, otherwise return nullptr */ rocksdb::ColumnFamilyHandle *get_or_create_cf(rocksdb::DB *const rdb, - const std::string &cf_name); + const std::string &cf_name, + bool create); /* Used by table open */ rocksdb::ColumnFamilyHandle *get_cf(const std::string &cf_name) const; diff --git a/storage/rocksdb/rdb_cf_options.cc b/storage/rocksdb/rdb_cf_options.cc index 3e973d1e7c92..b25af49e6a93 100644 --- a/storage/rocksdb/rdb_cf_options.cc +++ b/storage/rocksdb/rdb_cf_options.cc @@ -68,7 +68,7 @@ bool Rdb_cf_options::init( return true; } -void Rdb_cf_options::get(const std::string &cf_name, +bool Rdb_cf_options::get(const std::string &cf_name, rocksdb::ColumnFamilyOptions *const opts) { DBUG_ASSERT(opts != nullptr); @@ -80,7 +80,9 @@ void Rdb_cf_options::get(const std::string &cf_name, if (it != m_name_map.end()) { rocksdb::GetColumnFamilyOptionsFromString(*opts, it->second, opts); + return true; } + return false; } void Rdb_cf_options::update(const std::string &cf_name, @@ -330,16 +332,17 @@ Rdb_cf_options::get_cf_merge_operator(const std::string &cf_name) { : nullptr; } -void Rdb_cf_options::get_cf_options(const std::string &cf_name, +bool Rdb_cf_options::get_cf_options(const std::string &cf_name, rocksdb::ColumnFamilyOptions *const opts) { DBUG_ASSERT(opts != nullptr); *opts = m_default_cf_opts; - get(cf_name, opts); + bool ret = get(cf_name, opts); // Set the comparator according to 'rev:' opts->comparator = get_cf_comparator(cf_name); opts->merge_operator = get_cf_merge_operator(cf_name); + return ret; } } // namespace myrocks diff --git a/storage/rocksdb/rdb_cf_options.h b/storage/rocksdb/rdb_cf_options.h index 9aae8aded06c..2d80125d06a2 100644 --- a/storage/rocksdb/rdb_cf_options.h +++ b/storage/rocksdb/rdb_cf_options.h @@ -46,8 +46,9 @@ class Rdb_cf_options { Rdb_cf_options &operator=(const Rdb_cf_options &) = delete; Rdb_cf_options() = default; - void get(const std::string &cf_name, - rocksdb::ColumnFamilyOptions *const opts); + /* bool true return indicates cf_name was found */ + MY_NODISCARD bool get(const std::string &cf_name, + rocksdb::ColumnFamilyOptions *const opts); void update(const std::string &cf_name, const std::string &cf_options); @@ -67,7 +68,8 @@ class Rdb_cf_options { std::shared_ptr get_cf_merge_operator(const std::string &cf_name); - void get_cf_options(const std::string &cf_name, + /* bool true return indicates cf_name was found, otherwise default */ + bool get_cf_options(const std::string &cf_name, rocksdb::ColumnFamilyOptions *const opts); static bool parse_cf_options(const std::string &cf_options, diff --git a/storage/rocksdb/rdb_datadic.cc b/storage/rocksdb/rdb_datadic.cc index e4e5698ea38b..5270c5ff7a1a 100644 --- a/storage/rocksdb/rdb_datadic.cc +++ b/storage/rocksdb/rdb_datadic.cc @@ -4895,7 +4895,8 @@ bool Rdb_dict_manager::init(rocksdb::TransactionDB *const rdb_dict, m_db = rdb_dict; - m_system_cfh = cf_manager->get_or_create_cf(m_db, DEFAULT_SYSTEM_CF_NAME); + m_system_cfh = + cf_manager->get_or_create_cf(m_db, DEFAULT_SYSTEM_CF_NAME, true); rocksdb::ColumnFamilyHandle *default_cfh = cf_manager->get_cf(DEFAULT_CF_NAME); From af35f12167b7fd0e59163b8b754a5d4a0ea4f404 Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Mon, 22 Oct 2018 11:01:39 -0700 Subject: [PATCH 1171/1221] PS-4953 : rocksdb.truncate_table3 unstable - Test is missing error log suppressions that will occur if test is run on a clean data-dir. Added missing suppressions. --- mysql-test/suite/rocksdb/r/truncate_table3.result | 2 ++ mysql-test/suite/rocksdb/t/truncate_table3.test | 2 ++ 2 files changed, 4 insertions(+) diff --git a/mysql-test/suite/rocksdb/r/truncate_table3.result b/mysql-test/suite/rocksdb/r/truncate_table3.result index 79ffbb71795a..b37b0df44e00 100644 --- a/mysql-test/suite/rocksdb/r/truncate_table3.result +++ b/mysql-test/suite/rocksdb/r/truncate_table3.result @@ -1,3 +1,5 @@ +call mtr.add_suppression("Column family 'cf1' not found"); +call mtr.add_suppression("Column family 'rev:cf2' not found"); set global rocksdb_compact_cf = 'cf1'; set global rocksdb_compact_cf = 'rev:cf2'; set global rocksdb_signal_drop_index_thread = 1; diff --git a/mysql-test/suite/rocksdb/t/truncate_table3.test b/mysql-test/suite/rocksdb/t/truncate_table3.test index 898e43c54962..b4c420472472 100644 --- a/mysql-test/suite/rocksdb/t/truncate_table3.test +++ b/mysql-test/suite/rocksdb/t/truncate_table3.test @@ -1,5 +1,7 @@ --source include/have_rocksdb.inc +call mtr.add_suppression("Column family 'cf1' not found"); +call mtr.add_suppression("Column family 'rev:cf2' not found"); -- let $truncate_table = 1 -- let $drop_table = 0 -- source suite/rocksdb/include/drop_table3.inc From c3c13f9fcbb5261d4c0dd67a27f8985d2a394aeb Mon Sep 17 00:00:00 2001 From: Vlad Lesin Date: Tue, 23 Oct 2018 14:12:27 +0300 Subject: [PATCH 1172/1221] Post-push fix for for PS-3889: add 'override' specifier for Partition_base descendants and remove HA_CREATE_INFO object clearing with memset(). --- sql/partitioning/partition_base.cc | 1 - storage/rocksdb/ha_rockspart.h | 10 +++++----- storage/tokudb/ha_tokupart.h | 10 +++++----- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/sql/partitioning/partition_base.cc b/sql/partitioning/partition_base.cc index cca4df0d7f52..0858e3bc7fe2 100644 --- a/sql/partitioning/partition_base.cc +++ b/sql/partitioning/partition_base.cc @@ -1473,7 +1473,6 @@ void Partition_base::update_create_info(HA_CREATE_INFO *create_info) uint num_parts= num_subparts ? m_file_tot_parts / num_subparts : m_file_tot_parts; HA_CREATE_INFO dummy_info; - memset(&dummy_info, 0, sizeof(dummy_info)); /* Since update_create_info() can be called from mysql_prepare_alter_table() diff --git a/storage/rocksdb/ha_rockspart.h b/storage/rocksdb/ha_rockspart.h index ab9d95874dfb..85b9145e0407 100644 --- a/storage/rocksdb/ha_rockspart.h +++ b/storage/rocksdb/ha_rockspart.h @@ -31,17 +31,17 @@ class ha_rockspart : public native_part::Partition_base { : native_part::Partition_base(hton, share, part_info_arg, clone_arg, clone_mem_root_arg) {} - ~ha_rockspart() {} + ~ha_rockspart() override {} int open(const char *name, int mode, uint test_if_locked) override; int create(const char *name, TABLE *form, HA_CREATE_INFO *create_info) override; private: - virtual handler *get_file_handler(TABLE_SHARE *share, MEM_ROOT *alloc); - virtual handler *clone(const char *name, MEM_ROOT *mem_root); - virtual ulong index_flags(uint inx, uint part, bool all_parts) const; - virtual const char **bas_ext() const; + handler *get_file_handler(TABLE_SHARE *share, MEM_ROOT *alloc) override; + handler *clone(const char *name, MEM_ROOT *mem_root) override; + ulong index_flags(uint inx, uint part, bool all_parts) const override; + const char **bas_ext() const override; void set_pk_can_be_decoded_for_each_partition(); mutable bool m_pk_can_be_decoded = false; diff --git a/storage/tokudb/ha_tokupart.h b/storage/tokudb/ha_tokupart.h index 1b5ae6cf8ea5..fe1ff11ddc78 100644 --- a/storage/tokudb/ha_tokupart.h +++ b/storage/tokudb/ha_tokupart.h @@ -36,13 +36,13 @@ class ha_tokupart : public native_part::Partition_base { clone_arg, clone_mem_root_arg) {} - ~ha_tokupart() {} + ~ha_tokupart() override {} private: - virtual handler *get_file_handler(TABLE_SHARE *share, MEM_ROOT *alloc); - virtual handler *clone(const char *name, MEM_ROOT *mem_root); - virtual ulong index_flags(uint inx, uint part, bool all_parts) const; - virtual const char **bas_ext() const; + handler *get_file_handler(TABLE_SHARE *share, MEM_ROOT *alloc) override; + handler *clone(const char *name, MEM_ROOT *mem_root) override; + ulong index_flags(uint inx, uint part, bool all_parts) const override; + const char **bas_ext() const override; }; #endif // _HA_TOKUPART_H From 58363baefba0dd7f7c0e32d702a9f089a47d93a3 Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Thu, 25 Oct 2018 18:04:28 +0000 Subject: [PATCH 1173/1221] PS-4961 : Fix MyRocks compilation errors for Ubuntu 18.10 gcc 8.2.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Fixed error storage/rocksdb/ha_rocksdb.cc:561:70: error: type qualifiers ignored on cast result type [-Werror=ignored-qualifiers] - Fixed error storage/rocksdb/rdb_datadic.cc:1108:78: error: type qualifiers ignored on cast result type [-Werror=ignored-qualifiers] - Fixed error storage/rocksdb/rdb_threads.cc:29:71: error: type qualifiers ignored on cast result type [-Werror=ignored-qualifiers] - Fixed error storage/rocksdb/rdb_datadic.cc:124:44: error: ‘void* memcpy(void*, const void*, size_t)’ writing to an object of type ‘class myrocks::Rdb_field_packing’ with no trivial copy-assignment [-Werror=class-memaccess] --- storage/rocksdb/ha_rocksdb.cc | 2 +- storage/rocksdb/rdb_datadic.cc | 49 +++++++++++++++++++++++++--------- storage/rocksdb/rdb_datadic.h | 4 +-- storage/rocksdb/rdb_threads.cc | 2 +- 4 files changed, 41 insertions(+), 16 deletions(-) diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index 11d14e4d7d7e..905bc7bfda25 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -558,7 +558,7 @@ static void rocksdb_set_rocksdb_info_log_level( RDB_MUTEX_LOCK_CHECK(rdb_sysvars_mutex); rocksdb_info_log_level = *static_cast(save); rocksdb_db_options->info_log->SetInfoLogLevel( - static_cast(rocksdb_info_log_level)); + static_cast(rocksdb_info_log_level)); RDB_MUTEX_UNLOCK_CHECK(rdb_sysvars_mutex); } diff --git a/storage/rocksdb/rdb_datadic.cc b/storage/rocksdb/rdb_datadic.cc index 0112122d3d02..3ee80061211b 100644 --- a/storage/rocksdb/rdb_datadic.cc +++ b/storage/rocksdb/rdb_datadic.cc @@ -97,7 +97,7 @@ Rdb_key_def::Rdb_key_def(const Rdb_key_def &k) m_stats(k.m_stats), m_index_flags_bitmap(k.m_index_flags_bitmap), m_ttl_rec_offset(k.m_ttl_rec_offset), m_ttl_duration(k.m_ttl_duration), m_ttl_column(k.m_ttl_column), m_pk_part_no(k.m_pk_part_no), - m_pack_info(k.m_pack_info), m_keyno(k.m_keyno), + m_pack_info(nullptr), m_keyno(k.m_keyno), m_key_parts(k.m_key_parts), m_ttl_pk_key_part_offset(k.m_ttl_pk_key_part_offset), m_ttl_field_offset(UINT_MAX), m_prefix_extractor(k.m_prefix_extractor), @@ -115,13 +115,11 @@ Rdb_key_def::Rdb_key_def(const Rdb_key_def &k) if (k.m_pack_info) { const size_t size = sizeof(Rdb_field_packing) * k.m_key_parts; #ifdef HAVE_PSI_INTERFACE - m_pack_info = static_cast( - my_malloc(rdb_datadic_memory_key, size, MYF(0))); + void* buf = my_malloc(rdb_datadic_memory_key, size, MYF(0)); #else - m_pack_info = static_cast( - my_malloc(PSI_NOT_INSTRUMENTED, size, MYF(0))); + void* buf = my_malloc(PSI_NOT_INSTRUMENTED, size, MYF(0)); #endif - memcpy(m_pack_info, k.m_pack_info, size); + m_pack_info = new (buf) Rdb_field_packing(*k.m_pack_info); } if (k.m_pk_part_no) { @@ -143,7 +141,10 @@ Rdb_key_def::~Rdb_key_def() { my_free(m_pk_part_no); m_pk_part_no = nullptr; - my_free(m_pack_info); + if (m_pack_info) { + m_pack_info->~Rdb_field_packing(); + my_free(m_pack_info); + } m_pack_info = nullptr; } @@ -218,12 +219,11 @@ void Rdb_key_def::setup(const TABLE *const tbl, const size_t size = sizeof(Rdb_field_packing) * m_key_parts; #ifdef HAVE_PSI_INTERFACE - m_pack_info = static_cast( - my_malloc(rdb_datadic_memory_key, size, MYF(0))); + void* buf = my_malloc(rdb_datadic_memory_key, size, MYF(0)); #else - m_pack_info = static_cast( - my_malloc(PSI_NOT_INSTRUMENTED, size, MYF(0))); + void* buf = my_malloc(PSI_NOT_INSTRUMENTED, size, MYF(0)); #endif + m_pack_info = new (buf) Rdb_field_packing; /* Guaranteed not to error here as checks have been made already during @@ -1105,7 +1105,7 @@ uint Rdb_key_def::pack_record( // Insert TTL timestamp if (has_ttl() && ttl_bytes) { write_index_flag_field(unpack_info, - reinterpret_cast(ttl_bytes), + reinterpret_cast(ttl_bytes), Rdb_key_def::TTL_FLAG); } } @@ -3585,6 +3585,31 @@ static int get_segment_size_from_collation(const CHARSET_INFO *const cs) { return ret; } +Rdb_field_packing::Rdb_field_packing(const Rdb_field_packing &o) + : m_max_image_len(o.m_max_image_len), + m_unpack_data_len(o.m_unpack_data_len), + m_unpack_data_offset(o.m_unpack_data_offset), + m_maybe_null(o.m_maybe_null), m_varchar_charset(o.m_varchar_charset), + m_segment_size(o.m_segment_size), + m_unpack_info_uses_two_bytes(o.m_unpack_info_uses_two_bytes), + m_covered(o.m_covered), space_xfrm(o.space_xfrm), + space_xfrm_len(o.space_xfrm_len), space_mb_len(o.space_mb_len), + m_charset_codec(o.m_charset_codec), + m_unpack_info_stores_value(o.m_unpack_info_stores_value), + m_pack_func(o.m_pack_func), + m_make_unpack_info_func(o.m_make_unpack_info_func), + m_unpack_func(o.m_unpack_func), m_skip_func(o.m_skip_func), + m_keynr(o.m_keynr), m_key_part(o.m_key_part) {} + +Rdb_field_packing::Rdb_field_packing() + : m_max_image_len(0), m_unpack_data_len(0), m_unpack_data_offset(0), + m_maybe_null(false), m_varchar_charset(nullptr), m_segment_size(0), + m_unpack_info_uses_two_bytes(false), m_covered(false), + space_xfrm(nullptr), space_xfrm_len(0), space_mb_len(0), + m_charset_codec(nullptr), m_unpack_info_stores_value(false), + m_pack_func(nullptr), m_make_unpack_info_func(nullptr), + m_unpack_func(nullptr), m_skip_func(nullptr), m_keynr(0), m_key_part(0) {} + /* @brief Setup packing of index field into its mem-comparable form diff --git a/storage/rocksdb/rdb_datadic.h b/storage/rocksdb/rdb_datadic.h index aeb2b22c3425..a75e4f4761b4 100644 --- a/storage/rocksdb/rdb_datadic.h +++ b/storage/rocksdb/rdb_datadic.h @@ -885,9 +885,9 @@ extern std::array class Rdb_field_packing { public: - Rdb_field_packing(const Rdb_field_packing &) = delete; + Rdb_field_packing(const Rdb_field_packing &); Rdb_field_packing &operator=(const Rdb_field_packing &) = delete; - Rdb_field_packing() = default; + Rdb_field_packing(); /* Length of mem-comparable image of the field, in bytes */ int m_max_image_len; diff --git a/storage/rocksdb/rdb_threads.cc b/storage/rocksdb/rdb_threads.cc index ff6b7b07a003..e918fd653890 100644 --- a/storage/rocksdb/rdb_threads.cc +++ b/storage/rocksdb/rdb_threads.cc @@ -26,7 +26,7 @@ namespace myrocks { void *Rdb_thread::thread_func(void *const thread_ptr) { DBUG_ASSERT(thread_ptr != nullptr); - Rdb_thread *const thread = static_cast(thread_ptr); + Rdb_thread *const thread = static_cast(thread_ptr); if (!thread->m_run_once.exchange(true)) { thread->run(); thread->uninit(); From 3c560657188b0d97c88f6a091ab1943a9a36a5dd Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Thu, 25 Oct 2018 21:39:59 +0000 Subject: [PATCH 1174/1221] PS-4960 : Fix PerconaFT compilation errors for Ubuntu 18.10 gcc 8.2.0 - Advance git submodule commit pointer to pick up FT layer fixes. --- storage/tokudb/PerconaFT | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage/tokudb/PerconaFT b/storage/tokudb/PerconaFT index 8ff18ff1d135..5fa6f64e600f 160000 --- a/storage/tokudb/PerconaFT +++ b/storage/tokudb/PerconaFT @@ -1 +1 @@ -Subproject commit 8ff18ff1d135a8a5d6e745cf2c4dbf5684fcebd9 +Subproject commit 5fa6f64e600fe2d0fcd42e694ae8d241c9c4cdba From c7f44ee3974df2ffe9938f673d25cd5e47beeae1 Mon Sep 17 00:00:00 2001 From: Robert Golebiowski Date: Thu, 16 Nov 2017 17:53:11 +0100 Subject: [PATCH 1175/1221] PS-3829 : Innodb key rotation. ALPHA MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR implements Encryption threads for encryption/re-encryption/decryption of innodb tablespaces. It is based on MariaDB implementation ported from Google's patch. With this WL user can: 1) Change default KEYRING encryption key 2) Create a new table with KEYRING 3) Encrypt offline already existing tables with KEYRING (with alter) 4) Encrypt/re-encrypt online already existing tables with KEYRING (with innodb_online_encryption, innodb_online_encryption_rotate_key_age variables and innodb_online_encryption_threads) – including tables already encrypted with Master Key encryption. 5) Re-encrypt online already encrypted tables with newer version of encryption key (with variables innodb_online_encryption variable, innodb_online_encryption_threads, innodb_online_encryption_rotate_key_age). This WL also fixed the following bugs reported to MariaDB: (MDEV-17231) Encryption threads keep re-encrypting/encrypting corrupted pages (MDEV-17235) Data dictonary is not updated with encryption flags (MDEV-17234) In memory crypt_data is updated before page0 is updated (MDEV-17233) Page 0 is updated more than once when encryption completes (MDEV-17230) encryption_key_id from alter is ignored by encryption threads (MDEV-17229) Encryption threads ignore innodb_default_encryption_key_id --- include/create_info_encryption_key.h | 25 + include/my_base.h | 3 + include/system_key.h | 5 +- mysql-test/include/search_pattern_in_file.inc | 19 +- mysql-test/include/table_encrypt_1_small.inc | 50 + mysql-test/include/table_encrypt_2.inc | 8 +- mysql-test/mysql-test-run.pl | 2 +- mysql-test/r/mysqlshow.result | 14 +- mysql-test/r/opt_hints_pfs.result | 16 +- mysql-test/std_data/keys2.txt | Bin 0 -> 795 bytes mysql-test/std_data/keys3.txt | Bin 0 -> 603 bytes .../encryption/r/create_or_replace.result | 22 + .../encryption/r/encrypt_and_grep.result | 115 + .../encryption/r/encryption_force.result | 63 + .../encryption/r/encryption_rotation.result | 3 + .../encryption/r/innodb-bad-key-change.result | 79 + .../r/innodb-bad-key-change3.result | 39 + .../r/innodb-bad-key-change4.result | 28 + .../r/innodb-corrupt-row-compressed.result | 25 + .../r/innodb-encryption-alter.result | 36 + .../r/innodb-first-page-read.result | 95 + .../encryption/r/innodb-force-corrupt.result | 353 + .../r/innodb-key-rotation-disable.result | 53 + .../encryption/r/innodb-missing-key.result | 543 + .../r/innodb-page_encryption.result | 269 + .../innodb-page_encryption_compression.result | 4069 +++++++ .../encryption/r/innodb-read-only.result | 4 + .../encryption/r/innodb-redo-nokeys.result | 36 + .../encryption/r/innodb_aborted_flush.result | 89 + .../suite/encryption/r/innodb_alters.result | 268 + .../encryption/r/innodb_default_key.result | 94 + .../innodb_encryption-page-compression.result | 161 + .../encryption/r/innodb_encryption.result | 160 + ...odb_encryption_aborted_key_rotation.result | 66 + ..._encryption_aborted_key_rotation_mk.result | 66 + ...ted_key_rotation_mk_page_compressed.result | 66 + ...rted_key_rotation_mk_row_compressed.result | 66 + ...borted_key_rotation_page_compressed.result | 66 + ...aborted_key_rotation_row_compressed.result | 66 + .../innodb_encryption_aborted_rotation.result | 138 + ...aborted_rotation_mk_page_compressed.result | 138 + ...on_aborted_rotation_page_compressed.result | 138 + ...ion_aborted_rotation_row_compressed.result | 138 + .../r/innodb_encryption_discard_import.result | 437 + .../r/innodb_encryption_row_compressed.result | 139 + ...encryption_row_compressed_big_table.result | 10019 ++++++++++++++++ ...encryption_row_compressed_corrupted.result | 139 + .../r/innodb_encryption_tables.result | 170 + .../encryption/r/innodb_first_page.result | 4 + .../encryption/r/innodb_lotoftables.result | 129 + .../r/innodb_onlinealter_encryption.result | 127 + .../innodb_page_encryption_key_change.result | 167 + ...ion_mk_to_rk_post_enc_checksum_fail.result | 26 + .../encryption/r/uninstall_keyring.result | 102 + mysql-test/suite/encryption/t/.swp | Bin 0 -> 12288 bytes .../encryption/t/create_or_replace-master.opt | 3 + .../suite/encryption/t/create_or_replace.test | 155 + .../encryption/t/encrypt_and_grep-master.opt | 6 + .../suite/encryption/t/encrypt_and_grep.test | 361 + .../encryption/t/encryption_force-master.opt | 5 + .../suite/encryption/t/encryption_force.test | 56 + .../t/encryption_rotation-master.opt | 4 + .../encryption/t/encryption_rotation.test | 9 + .../t/innodb-bad-key-change-master.opt | 6 + .../encryption/t/innodb-bad-key-change.test | 127 + .../encryption/t/innodb-bad-key-change2.test | 110 + .../t/innodb-bad-key-change3-master.opt | 4 + .../encryption/t/innodb-bad-key-change3.test | 62 + .../t/innodb-bad-key-change4-master.opt | 7 + .../encryption/t/innodb-bad-key-change4.test | 53 + .../innodb-corrupt-row-compressed-master.opt | 3 + .../t/innodb-corrupt-row-compressed.test | 85 + .../t/innodb-encryption-alter-master.opt | 3 + .../encryption/t/innodb-encryption-alter.test | 90 + .../t/innodb-first-page-read-master.opt | 6 + .../encryption/t/innodb-first-page-read.test | 122 + .../t/innodb-force-corrupt-master.opt | 4 + .../encryption/t/innodb-force-corrupt.test | 166 + .../t/innodb-key-rotation-disable-master.opt | 6 + .../t/innodb-key-rotation-disable.test | 94 + .../t/innodb-key-rotation-master.opt | 6 + .../encryption/t/innodb-key-rotation.test | 528 + .../t/innodb-missing-key-master.opt | 6 + .../encryption/t/innodb-missing-key.test | 86 + .../t/innodb-page_encryption-32k-master.opt | 5 + .../t/innodb-page_encryption-32k.test | 91 + .../t/innodb-page_encryption-master.opt | 3 + .../encryption/t/innodb-page_encryption.test | 143 + ...odb-page_encryption_compression-master.opt | 4 + .../t/innodb-page_encryption_compression.test | 76 + .../encryption/t/innodb-read-only-master.opt | 5 + .../suite/encryption/t/innodb-read-only.test | 34 + .../t/innodb-redo-nokeys-master.opt | 6 + .../encryption/t/innodb-redo-nokeys.test | 109 + .../t/innodb-spatial-index-master.opt | 6 + .../encryption/t/innodb-spatial-index.test | 89 + .../t/innodb_aborted_flush-master.opt | 5 + .../encryption/t/innodb_aborted_flush.test | 205 + .../t/innodb_alter_mk_to_rk-master.opt | 3 + .../encryption/t/innodb_alter_mk_to_rk.test | 96 + .../encryption/t/innodb_alters-master.opt | 3 + .../suite/encryption/t/innodb_alters.test | 272 + .../t/innodb_default_key-master.opt | 3 + .../encryption/t/innodb_default_key.test | 106 + .../encryption/t/innodb_encryption-master.opt | 6 + ...odb_encryption-page-compression-master.opt | 6 + .../t/innodb_encryption-page-compression.test | 173 + .../suite/encryption/t/innodb_encryption.opt | 8 + .../suite/encryption/t/innodb_encryption.test | 87 + ...encryption_aborted_key_rotation-master.opt | 6 + ...innodb_encryption_aborted_key_rotation.inc | 127 + ...nnodb_encryption_aborted_key_rotation.test | 3 + ...ryption_aborted_key_rotation_mk-master.opt | 6 + ...db_encryption_aborted_key_rotation_mk.test | 3 + ...key_rotation_mk_page_compressed-master.opt | 6 + ...orted_key_rotation_mk_page_compressed.test | 2 + ..._key_rotation_mk_row_compressed-master.opt | 6 + ...borted_key_rotation_mk_row_compressed.test | 3 + ...ed_key_rotation_page_compressed-master.opt | 6 + ..._aborted_key_rotation_page_compressed.test | 2 + ...ted_key_rotation_row_compressed-master.opt | 6 + ...n_aborted_key_rotation_row_compressed.test | 2 + ...odb_encryption_aborted_rotation-master.opt | 5 + .../t/innodb_encryption_aborted_rotation.inc | 363 + .../t/innodb_encryption_aborted_rotation.test | 6 + ..._encryption_aborted_rotation_mk-master.opt | 5 + ...innodb_encryption_aborted_rotation_mk.test | 6 + ...ted_rotation_mk_page_compressed-master.opt | 5 + ...n_aborted_rotation_mk_page_compressed.test | 6 + ...rted_rotation_mk_row_compressed-master.opt | 5 + ...on_aborted_rotation_mk_row_compressed.test | 6 + ...borted_rotation_page_compressed-master.opt | 5 + ...tion_aborted_rotation_page_compressed.test | 6 + ...aborted_rotation_row_compressed-master.opt | 5 + ...ption_aborted_rotation_row_compressed.test | 6 + ...nnodb_encryption_discard_import-master.opt | 5 + .../t/innodb_encryption_discard_import.test | 611 + ...nnodb_encryption_row_compressed-master.opt | 4 + .../t/innodb_encryption_row_compressed.test | 111 + ...yption_row_compressed_big_table-master.opt | 3 + ...b_encryption_row_compressed_big_table.test | 39 + ...yption_row_compressed_corrupted-master.opt | 4 + ...b_encryption_row_compressed_corrupted.test | 112 + .../t/innodb_encryption_tables-master.opt | 6 + .../t/innodb_encryption_tables.test | 97 + .../encryption/t/innodb_first_page-master.opt | 4 + .../suite/encryption/t/innodb_first_page.test | 22 + .../t/innodb_lotoftables-master.opt | 5 + .../encryption/t/innodb_lotoftables.test | 273 + .../innodb_onlinealter_encryption-master.opt | 6 + .../t/innodb_onlinealter_encryption.test | 143 + ...nodb_page_encryption_key_change-master.opt | 4 + .../t/innodb_page_encryption_key_change.test | 91 + .../t/innodb_rotation_mk_to_rk-master.opt | 4 + .../t/innodb_rotation_mk_to_rk.test | 242 + ...mk_to_rk_post_enc_checksum_fail-master.opt | 4 + ...ation_mk_to_rk_post_enc_checksum_fail.test | 119 + .../t/table_encrypt_2_rotated_keys-master.opt | 2 + .../encryption/t/uninstall_keyring-master.opt | 6 + .../suite/encryption/t/uninstall_keyring.test | 189 + mysql-test/suite/federated/federated.result | 4 +- .../suite/innodb/r/innodb_bug14147491.result | 24 +- .../innodb/r/innodb_row_log_encryption.result | 1 + mysql-test/suite/innodb/r/monitor.result | 3 + .../innodb/r/percona_force_encryption.result | 8 +- .../r/percona_sys_tablespace_encrypt.result | 4 +- .../r/table_encrypt_1_rotated_keys.result | 276 + .../innodb/r/table_encrypt_2_keyring.result | 139 + .../r/table_encrypt_2_rotated_keys.result | 144 + .../r/table_encrypt_3_rotated_keys.result | 1415 +++ .../r/table_encrypt_4_rotated_keys.result | 153 + .../r/table_encrypt_5_rotated_keys.result | 1053 ++ .../innodb/t/innodb-import-partition.test | 2 + .../suite/innodb/t/innodb-wl5522-debug.test | 3 +- mysql-test/suite/innodb/t/innodb-wl5522.test | 3 + .../suite/innodb/t/innodb-wl6045-1-master.opt | 2 - .../suite/innodb/t/innodb-wl6045-1.test | 225 - .../innodb/t/innodb_bug14147491-master.opt | 6 +- .../suite/innodb/t/innodb_bug14147491.test | 67 +- .../innodb/t/innodb_rename_index_err.test | 5 +- .../t/table_encrypt_1_rotated_keys_small.test | 3 + .../suite/innodb/t/table_encrypt_2.test | 1 + .../t/table_encrypt_2_keyring-master.opt | 2 + .../suite/innodb_zip/t/wl5522_debug_zip.test | 3 + mysql-test/suite/innodb_zip/t/wl5522_zip.test | 4 +- .../suite/perfschema/t/show_sanity.test | 12 + .../r/optional_columns.result | 18 +- ...rypted_master_switch_to_unencrypted.result | 2 +- ...ncrypted_master_switch_to_unencrypted.test | 2 +- ...odb_default_encryption_key_id_basic.result | 3 + ...odb_encryption_rotate_key_age_basic.result | 3 + ...nodb_encryption_rotation_iops_basic.result | 3 + .../r/innodb_encryption_threads_basic.result | 3 + .../r/innodb_monitor_disable_basic.result | 3 + .../r/innodb_monitor_enable_basic.result | 3 + .../r/innodb_monitor_reset_all_basic.result | 3 + .../r/innodb_monitor_reset_basic.result | 3 + ...nnodb_default_encryption_key_id_basic.test | 5 + ...nnodb_encryption_rotate_key_age_basic.test | 5 + ...innodb_encryption_rotation_iops_basic.test | 5 + .../t/innodb_encryption_threads_basic.test | 5 + mysys/system_key.c | 32 +- .../keyring/common/system_keys_container.cc | 2 +- .../mtr/innodb_row_log_encryption.result | 1 + .../tests/mtr/table_encrypt_2.test | 1 + .../mtr/table_encrypt_2_keyring-master.opt | 2 + .../tests/mtr/table_encrypt_2_keyring.result | 142 + .../tests/mtr/table_encrypt_2_keyring.test | 37 + .../x/tests/mtr/r/performance_schema.result | 4 +- regex/CMakeLists.txt | 2 + sql/binlog.cc | 2 +- sql/handler.h | 4 + sql/item_keyring_func.cc | 10 +- sql/lex.h | 1 + sql/share/errmsg-utf8.txt | 12 +- sql/sql_class.cc | 81 + sql/sql_class.h | 2 + sql/sql_plugin.cc | 38 +- sql/sql_show.cc | 19 +- sql/sql_table.cc | 16 + sql/sql_yacc.yy | 8 + sql/table.cc | 10 + sql/table.h | 2 + sql/unireg.cc | 14 + storage/innobase/CMakeLists.txt | 1 + storage/innobase/api/api0api.cc | 6 +- storage/innobase/btr/btr0btr.cc | 84 +- storage/innobase/btr/btr0bulk.cc | 11 +- storage/innobase/btr/btr0cur.cc | 191 +- storage/innobase/btr/btr0pcur.cc | 3 + storage/innobase/buf/buf0buf.cc | 241 +- storage/innobase/buf/buf0checksum.cc | 22 + storage/innobase/buf/buf0dblwr.cc | 13 +- storage/innobase/buf/buf0flu.cc | 10 +- storage/innobase/buf/buf0lru.cc | 5 +- storage/innobase/buf/buf0rea.cc | 79 +- storage/innobase/dict/dict0crea.cc | 38 +- storage/innobase/dict/dict0dict.cc | 18 +- storage/innobase/dict/dict0load.cc | 41 +- storage/innobase/dict/dict0mem.cc | 2 + storage/innobase/dict/dict0stats.cc | 66 +- storage/innobase/fil/fil0crypt.cc | 2996 +++++ storage/innobase/fil/fil0fil.cc | 789 +- storage/innobase/fsp/fsp0file.cc | 199 +- storage/innobase/fsp/fsp0fsp.cc | 15 +- storage/innobase/fsp/fsp0space.cc | 3 +- storage/innobase/fsp/fsp0sysspace.cc | 8 +- storage/innobase/fts/fts0fts.cc | 8 +- storage/innobase/handler/ha_innodb.cc | 720 +- storage/innobase/handler/ha_innodb.h | 13 +- storage/innobase/handler/ha_innopart.cc | 4 +- storage/innobase/handler/handler0alter.cc | 204 +- storage/innobase/handler/i_s.cc | 331 + storage/innobase/handler/i_s.h | 3 + storage/innobase/ibuf/ibuf0ibuf.cc | 29 +- storage/innobase/include/btr0btr.h | 8 +- storage/innobase/include/btr0btr.ic | 14 +- storage/innobase/include/btr0bulk.h | 13 +- storage/innobase/include/btr0cur.h | 4 +- storage/innobase/include/btr0pcur.h | 6 +- storage/innobase/include/btr0pcur.ic | 32 +- storage/innobase/include/buf0buf.h | 39 +- storage/innobase/include/buf0checksum.h | 8 + storage/innobase/include/buf0flu.h | 6 + storage/innobase/include/buf0flu.ic | 7 +- storage/innobase/include/buf0rea.h | 8 +- storage/innobase/include/db0err.h | 9 + storage/innobase/include/dict0crea.h | 14 +- storage/innobase/include/dict0dict.h | 9 + storage/innobase/include/dict0load.h | 2 +- storage/innobase/include/dict0mem.h | 41 +- storage/innobase/include/dict0stats.h | 11 + storage/innobase/include/fil0crypt.h | 619 + storage/innobase/include/fil0crypt.ic | 81 + storage/innobase/include/fil0fil.h | 205 +- storage/innobase/include/fil0rkinfo.h | 30 + storage/innobase/include/fsp0file.h | 31 +- storage/innobase/include/fsp0fsp.h | 2 + storage/innobase/include/ha_prototypes.h | 11 + storage/innobase/include/ibuf0ibuf.h | 5 +- storage/innobase/include/log0recv.h | 4 + storage/innobase/include/mtr0mtr.h | 1 + storage/innobase/include/os0file.h | 274 +- storage/innobase/include/page0cur.ic | 6 +- storage/innobase/include/row0mysql.h | 8 +- storage/innobase/include/row0quiesce.h | 1 + storage/innobase/include/row0trunc.h | 4 + storage/innobase/include/srv0mon.h | 5 + storage/innobase/include/srv0srv.h | 48 +- storage/innobase/include/sync0types.h | 5 + storage/innobase/lock/lock0lock.cc | 10 +- storage/innobase/log/log0log.cc | 12 +- storage/innobase/log/log0recv.cc | 116 +- storage/innobase/os/os0file.cc | 723 +- storage/innobase/page/page0cur.cc | 2 +- storage/innobase/pars/pars0pars.cc | 2 +- storage/innobase/row/row0import.cc | 77 +- storage/innobase/row/row0ins.cc | 27 +- storage/innobase/row/row0log.cc | 4 +- storage/innobase/row/row0merge.cc | 19 +- storage/innobase/row/row0mysql.cc | 95 +- storage/innobase/row/row0purge.cc | 2 +- storage/innobase/row/row0quiesce.cc | 23 +- storage/innobase/row/row0sel.cc | 62 +- storage/innobase/row/row0trunc.cc | 32 +- storage/innobase/row/row0uins.cc | 2 +- storage/innobase/row/row0umod.cc | 2 +- storage/innobase/srv/srv0mon.cc | 29 + storage/innobase/srv/srv0srv.cc | 29 + storage/innobase/srv/srv0start.cc | 22 +- storage/innobase/sync/sync0debug.cc | 12 + storage/innobase/trx/trx0trx.cc | 2 +- storage/innobase/ut/ut0ut.cc | 6 +- unittest/gunit/keyring/keyring-api-t.cc | 70 +- unittest/gunit/keyring/keys_container-t.cc | 22 +- .../keyring_vault/vault_keyring-api-t.cc | 10 +- 316 files changed, 37635 insertions(+), 1154 deletions(-) create mode 100644 include/create_info_encryption_key.h create mode 100644 mysql-test/include/table_encrypt_1_small.inc create mode 100644 mysql-test/std_data/keys2.txt create mode 100644 mysql-test/std_data/keys3.txt create mode 100644 mysql-test/suite/encryption/r/create_or_replace.result create mode 100644 mysql-test/suite/encryption/r/encrypt_and_grep.result create mode 100644 mysql-test/suite/encryption/r/encryption_force.result create mode 100644 mysql-test/suite/encryption/r/encryption_rotation.result create mode 100644 mysql-test/suite/encryption/r/innodb-bad-key-change.result create mode 100644 mysql-test/suite/encryption/r/innodb-bad-key-change3.result create mode 100644 mysql-test/suite/encryption/r/innodb-bad-key-change4.result create mode 100644 mysql-test/suite/encryption/r/innodb-corrupt-row-compressed.result create mode 100644 mysql-test/suite/encryption/r/innodb-encryption-alter.result create mode 100644 mysql-test/suite/encryption/r/innodb-first-page-read.result create mode 100644 mysql-test/suite/encryption/r/innodb-force-corrupt.result create mode 100644 mysql-test/suite/encryption/r/innodb-key-rotation-disable.result create mode 100644 mysql-test/suite/encryption/r/innodb-missing-key.result create mode 100644 mysql-test/suite/encryption/r/innodb-page_encryption.result create mode 100644 mysql-test/suite/encryption/r/innodb-page_encryption_compression.result create mode 100644 mysql-test/suite/encryption/r/innodb-read-only.result create mode 100644 mysql-test/suite/encryption/r/innodb-redo-nokeys.result create mode 100644 mysql-test/suite/encryption/r/innodb_aborted_flush.result create mode 100644 mysql-test/suite/encryption/r/innodb_alters.result create mode 100644 mysql-test/suite/encryption/r/innodb_default_key.result create mode 100644 mysql-test/suite/encryption/r/innodb_encryption-page-compression.result create mode 100644 mysql-test/suite/encryption/r/innodb_encryption.result create mode 100644 mysql-test/suite/encryption/r/innodb_encryption_aborted_key_rotation.result create mode 100644 mysql-test/suite/encryption/r/innodb_encryption_aborted_key_rotation_mk.result create mode 100644 mysql-test/suite/encryption/r/innodb_encryption_aborted_key_rotation_mk_page_compressed.result create mode 100644 mysql-test/suite/encryption/r/innodb_encryption_aborted_key_rotation_mk_row_compressed.result create mode 100644 mysql-test/suite/encryption/r/innodb_encryption_aborted_key_rotation_page_compressed.result create mode 100644 mysql-test/suite/encryption/r/innodb_encryption_aborted_key_rotation_row_compressed.result create mode 100644 mysql-test/suite/encryption/r/innodb_encryption_aborted_rotation.result create mode 100644 mysql-test/suite/encryption/r/innodb_encryption_aborted_rotation_mk_page_compressed.result create mode 100644 mysql-test/suite/encryption/r/innodb_encryption_aborted_rotation_page_compressed.result create mode 100644 mysql-test/suite/encryption/r/innodb_encryption_aborted_rotation_row_compressed.result create mode 100644 mysql-test/suite/encryption/r/innodb_encryption_discard_import.result create mode 100644 mysql-test/suite/encryption/r/innodb_encryption_row_compressed.result create mode 100644 mysql-test/suite/encryption/r/innodb_encryption_row_compressed_big_table.result create mode 100644 mysql-test/suite/encryption/r/innodb_encryption_row_compressed_corrupted.result create mode 100644 mysql-test/suite/encryption/r/innodb_encryption_tables.result create mode 100644 mysql-test/suite/encryption/r/innodb_first_page.result create mode 100644 mysql-test/suite/encryption/r/innodb_lotoftables.result create mode 100644 mysql-test/suite/encryption/r/innodb_onlinealter_encryption.result create mode 100644 mysql-test/suite/encryption/r/innodb_page_encryption_key_change.result create mode 100644 mysql-test/suite/encryption/r/innodb_rotation_mk_to_rk_post_enc_checksum_fail.result create mode 100644 mysql-test/suite/encryption/r/uninstall_keyring.result create mode 100644 mysql-test/suite/encryption/t/.swp create mode 100644 mysql-test/suite/encryption/t/create_or_replace-master.opt create mode 100644 mysql-test/suite/encryption/t/create_or_replace.test create mode 100644 mysql-test/suite/encryption/t/encrypt_and_grep-master.opt create mode 100644 mysql-test/suite/encryption/t/encrypt_and_grep.test create mode 100644 mysql-test/suite/encryption/t/encryption_force-master.opt create mode 100644 mysql-test/suite/encryption/t/encryption_force.test create mode 100644 mysql-test/suite/encryption/t/encryption_rotation-master.opt create mode 100644 mysql-test/suite/encryption/t/encryption_rotation.test create mode 100644 mysql-test/suite/encryption/t/innodb-bad-key-change-master.opt create mode 100644 mysql-test/suite/encryption/t/innodb-bad-key-change.test create mode 100644 mysql-test/suite/encryption/t/innodb-bad-key-change2.test create mode 100644 mysql-test/suite/encryption/t/innodb-bad-key-change3-master.opt create mode 100644 mysql-test/suite/encryption/t/innodb-bad-key-change3.test create mode 100644 mysql-test/suite/encryption/t/innodb-bad-key-change4-master.opt create mode 100644 mysql-test/suite/encryption/t/innodb-bad-key-change4.test create mode 100644 mysql-test/suite/encryption/t/innodb-corrupt-row-compressed-master.opt create mode 100644 mysql-test/suite/encryption/t/innodb-corrupt-row-compressed.test create mode 100644 mysql-test/suite/encryption/t/innodb-encryption-alter-master.opt create mode 100644 mysql-test/suite/encryption/t/innodb-encryption-alter.test create mode 100644 mysql-test/suite/encryption/t/innodb-first-page-read-master.opt create mode 100644 mysql-test/suite/encryption/t/innodb-first-page-read.test create mode 100644 mysql-test/suite/encryption/t/innodb-force-corrupt-master.opt create mode 100644 mysql-test/suite/encryption/t/innodb-force-corrupt.test create mode 100644 mysql-test/suite/encryption/t/innodb-key-rotation-disable-master.opt create mode 100644 mysql-test/suite/encryption/t/innodb-key-rotation-disable.test create mode 100644 mysql-test/suite/encryption/t/innodb-key-rotation-master.opt create mode 100644 mysql-test/suite/encryption/t/innodb-key-rotation.test create mode 100644 mysql-test/suite/encryption/t/innodb-missing-key-master.opt create mode 100644 mysql-test/suite/encryption/t/innodb-missing-key.test create mode 100644 mysql-test/suite/encryption/t/innodb-page_encryption-32k-master.opt create mode 100644 mysql-test/suite/encryption/t/innodb-page_encryption-32k.test create mode 100644 mysql-test/suite/encryption/t/innodb-page_encryption-master.opt create mode 100644 mysql-test/suite/encryption/t/innodb-page_encryption.test create mode 100644 mysql-test/suite/encryption/t/innodb-page_encryption_compression-master.opt create mode 100644 mysql-test/suite/encryption/t/innodb-page_encryption_compression.test create mode 100644 mysql-test/suite/encryption/t/innodb-read-only-master.opt create mode 100644 mysql-test/suite/encryption/t/innodb-read-only.test create mode 100644 mysql-test/suite/encryption/t/innodb-redo-nokeys-master.opt create mode 100644 mysql-test/suite/encryption/t/innodb-redo-nokeys.test create mode 100644 mysql-test/suite/encryption/t/innodb-spatial-index-master.opt create mode 100644 mysql-test/suite/encryption/t/innodb-spatial-index.test create mode 100644 mysql-test/suite/encryption/t/innodb_aborted_flush-master.opt create mode 100644 mysql-test/suite/encryption/t/innodb_aborted_flush.test create mode 100644 mysql-test/suite/encryption/t/innodb_alter_mk_to_rk-master.opt create mode 100644 mysql-test/suite/encryption/t/innodb_alter_mk_to_rk.test create mode 100644 mysql-test/suite/encryption/t/innodb_alters-master.opt create mode 100644 mysql-test/suite/encryption/t/innodb_alters.test create mode 100644 mysql-test/suite/encryption/t/innodb_default_key-master.opt create mode 100644 mysql-test/suite/encryption/t/innodb_default_key.test create mode 100644 mysql-test/suite/encryption/t/innodb_encryption-master.opt create mode 100644 mysql-test/suite/encryption/t/innodb_encryption-page-compression-master.opt create mode 100644 mysql-test/suite/encryption/t/innodb_encryption-page-compression.test create mode 100644 mysql-test/suite/encryption/t/innodb_encryption.opt create mode 100644 mysql-test/suite/encryption/t/innodb_encryption.test create mode 100644 mysql-test/suite/encryption/t/innodb_encryption_aborted_key_rotation-master.opt create mode 100644 mysql-test/suite/encryption/t/innodb_encryption_aborted_key_rotation.inc create mode 100644 mysql-test/suite/encryption/t/innodb_encryption_aborted_key_rotation.test create mode 100644 mysql-test/suite/encryption/t/innodb_encryption_aborted_key_rotation_mk-master.opt create mode 100644 mysql-test/suite/encryption/t/innodb_encryption_aborted_key_rotation_mk.test create mode 100644 mysql-test/suite/encryption/t/innodb_encryption_aborted_key_rotation_mk_page_compressed-master.opt create mode 100644 mysql-test/suite/encryption/t/innodb_encryption_aborted_key_rotation_mk_page_compressed.test create mode 100644 mysql-test/suite/encryption/t/innodb_encryption_aborted_key_rotation_mk_row_compressed-master.opt create mode 100644 mysql-test/suite/encryption/t/innodb_encryption_aborted_key_rotation_mk_row_compressed.test create mode 100644 mysql-test/suite/encryption/t/innodb_encryption_aborted_key_rotation_page_compressed-master.opt create mode 100644 mysql-test/suite/encryption/t/innodb_encryption_aborted_key_rotation_page_compressed.test create mode 100644 mysql-test/suite/encryption/t/innodb_encryption_aborted_key_rotation_row_compressed-master.opt create mode 100644 mysql-test/suite/encryption/t/innodb_encryption_aborted_key_rotation_row_compressed.test create mode 100644 mysql-test/suite/encryption/t/innodb_encryption_aborted_rotation-master.opt create mode 100644 mysql-test/suite/encryption/t/innodb_encryption_aborted_rotation.inc create mode 100644 mysql-test/suite/encryption/t/innodb_encryption_aborted_rotation.test create mode 100644 mysql-test/suite/encryption/t/innodb_encryption_aborted_rotation_mk-master.opt create mode 100644 mysql-test/suite/encryption/t/innodb_encryption_aborted_rotation_mk.test create mode 100644 mysql-test/suite/encryption/t/innodb_encryption_aborted_rotation_mk_page_compressed-master.opt create mode 100644 mysql-test/suite/encryption/t/innodb_encryption_aborted_rotation_mk_page_compressed.test create mode 100644 mysql-test/suite/encryption/t/innodb_encryption_aborted_rotation_mk_row_compressed-master.opt create mode 100644 mysql-test/suite/encryption/t/innodb_encryption_aborted_rotation_mk_row_compressed.test create mode 100644 mysql-test/suite/encryption/t/innodb_encryption_aborted_rotation_page_compressed-master.opt create mode 100644 mysql-test/suite/encryption/t/innodb_encryption_aborted_rotation_page_compressed.test create mode 100644 mysql-test/suite/encryption/t/innodb_encryption_aborted_rotation_row_compressed-master.opt create mode 100644 mysql-test/suite/encryption/t/innodb_encryption_aborted_rotation_row_compressed.test create mode 100644 mysql-test/suite/encryption/t/innodb_encryption_discard_import-master.opt create mode 100644 mysql-test/suite/encryption/t/innodb_encryption_discard_import.test create mode 100644 mysql-test/suite/encryption/t/innodb_encryption_row_compressed-master.opt create mode 100644 mysql-test/suite/encryption/t/innodb_encryption_row_compressed.test create mode 100644 mysql-test/suite/encryption/t/innodb_encryption_row_compressed_big_table-master.opt create mode 100644 mysql-test/suite/encryption/t/innodb_encryption_row_compressed_big_table.test create mode 100644 mysql-test/suite/encryption/t/innodb_encryption_row_compressed_corrupted-master.opt create mode 100644 mysql-test/suite/encryption/t/innodb_encryption_row_compressed_corrupted.test create mode 100644 mysql-test/suite/encryption/t/innodb_encryption_tables-master.opt create mode 100644 mysql-test/suite/encryption/t/innodb_encryption_tables.test create mode 100644 mysql-test/suite/encryption/t/innodb_first_page-master.opt create mode 100644 mysql-test/suite/encryption/t/innodb_first_page.test create mode 100644 mysql-test/suite/encryption/t/innodb_lotoftables-master.opt create mode 100644 mysql-test/suite/encryption/t/innodb_lotoftables.test create mode 100644 mysql-test/suite/encryption/t/innodb_onlinealter_encryption-master.opt create mode 100644 mysql-test/suite/encryption/t/innodb_onlinealter_encryption.test create mode 100644 mysql-test/suite/encryption/t/innodb_page_encryption_key_change-master.opt create mode 100644 mysql-test/suite/encryption/t/innodb_page_encryption_key_change.test create mode 100644 mysql-test/suite/encryption/t/innodb_rotation_mk_to_rk-master.opt create mode 100644 mysql-test/suite/encryption/t/innodb_rotation_mk_to_rk.test create mode 100644 mysql-test/suite/encryption/t/innodb_rotation_mk_to_rk_post_enc_checksum_fail-master.opt create mode 100644 mysql-test/suite/encryption/t/innodb_rotation_mk_to_rk_post_enc_checksum_fail.test create mode 100644 mysql-test/suite/encryption/t/table_encrypt_2_rotated_keys-master.opt create mode 100644 mysql-test/suite/encryption/t/uninstall_keyring-master.opt create mode 100644 mysql-test/suite/encryption/t/uninstall_keyring.test create mode 100644 mysql-test/suite/innodb/r/table_encrypt_1_rotated_keys.result create mode 100644 mysql-test/suite/innodb/r/table_encrypt_2_keyring.result create mode 100644 mysql-test/suite/innodb/r/table_encrypt_2_rotated_keys.result create mode 100644 mysql-test/suite/innodb/r/table_encrypt_3_rotated_keys.result create mode 100644 mysql-test/suite/innodb/r/table_encrypt_4_rotated_keys.result create mode 100644 mysql-test/suite/innodb/r/table_encrypt_5_rotated_keys.result delete mode 100644 mysql-test/suite/innodb/t/innodb-wl6045-1-master.opt delete mode 100644 mysql-test/suite/innodb/t/innodb-wl6045-1.test create mode 100644 mysql-test/suite/innodb/t/table_encrypt_1_rotated_keys_small.test create mode 100644 mysql-test/suite/innodb/t/table_encrypt_2_keyring-master.opt create mode 100644 mysql-test/suite/sys_vars/r/innodb_default_encryption_key_id_basic.result create mode 100644 mysql-test/suite/sys_vars/r/innodb_encryption_rotate_key_age_basic.result create mode 100644 mysql-test/suite/sys_vars/r/innodb_encryption_rotation_iops_basic.result create mode 100644 mysql-test/suite/sys_vars/r/innodb_encryption_threads_basic.result create mode 100644 mysql-test/suite/sys_vars/t/innodb_default_encryption_key_id_basic.test create mode 100644 mysql-test/suite/sys_vars/t/innodb_encryption_rotate_key_age_basic.test create mode 100644 mysql-test/suite/sys_vars/t/innodb_encryption_rotation_iops_basic.test create mode 100644 mysql-test/suite/sys_vars/t/innodb_encryption_threads_basic.test create mode 100644 plugin/keyring_vault/tests/mtr/table_encrypt_2_keyring-master.opt create mode 100644 plugin/keyring_vault/tests/mtr/table_encrypt_2_keyring.result create mode 100644 plugin/keyring_vault/tests/mtr/table_encrypt_2_keyring.test create mode 100644 storage/innobase/fil/fil0crypt.cc create mode 100644 storage/innobase/include/fil0crypt.h create mode 100644 storage/innobase/include/fil0crypt.ic create mode 100644 storage/innobase/include/fil0rkinfo.h diff --git a/include/create_info_encryption_key.h b/include/create_info_encryption_key.h new file mode 100644 index 000000000000..437d6b8654ed --- /dev/null +++ b/include/create_info_encryption_key.h @@ -0,0 +1,25 @@ +#ifndef create_info_encryption_key_h +#define create_info_encryption_key_h + +//#ifndef UNIV_INNOCHECKSUM + +struct CreateInfoEncryptionKeyId +{ + CreateInfoEncryptionKeyId(bool was_encryption_key_id_set, + uint encryption_key_id) + : was_encryption_key_id_set(was_encryption_key_id_set) + , encryption_key_id(encryption_key_id) + {} + + CreateInfoEncryptionKeyId() + : was_encryption_key_id_set(false) + , encryption_key_id(FIL_DEFAULT_ENCRYPTION_KEY) + {} + + bool was_encryption_key_id_set; + uint encryption_key_id; +}; + +//#endif // UNIV_INNOCHECKSUM + +#endif diff --git a/include/my_base.h b/include/my_base.h index ef4225efa33d..9c05302f298f 100644 --- a/include/my_base.h +++ b/include/my_base.h @@ -507,6 +507,9 @@ is the global server default. */ /* Number of different errors */ #define HA_ERR_ERRORS (HA_ERR_LAST - HA_ERR_FIRST + 1) +#define HA_ERR_DECRYPTION_FAILED 500 /* Table encrypted but decypt failed */ + + /* Other constants */ #define HA_NAMELEN 64 /* Max length of saved filename */ diff --git a/include/system_key.h b/include/system_key.h index d3e4ac02e73f..8119b6020d1d 100644 --- a/include/system_key.h +++ b/include/system_key.h @@ -21,8 +21,9 @@ C_MODE_START #define PERCONA_BINLOG_KEY_NAME "percona_binlog" -extern const size_t valid_percona_system_keys_size; -extern const char* valid_percona_system_keys[]; +#define PERCONA_INNODB_KEY_NAME "percona_innodb" + +my_bool is_valid_percona_system_key(const char *key_name, size_t *key_length); /** A convenience function that extracts key's data and key's version from system key. diff --git a/mysql-test/include/search_pattern_in_file.inc b/mysql-test/include/search_pattern_in_file.inc index 2e7e5c44d45a..c5ae2e0d1064 100644 --- a/mysql-test/include/search_pattern_in_file.inc +++ b/mysql-test/include/search_pattern_in_file.inc @@ -59,9 +59,12 @@ # perl; + use strict; die "SEARCH_FILE not set" unless $ENV{'SEARCH_FILE'}; my $print_search_result= $ENV{PRINT_SEARCH_RESULT} or 0; + my $abort_on= $ENV{ABORT_ON} or "NOT_FOUND"; + #my $abort_on_found= $ENV{ABORT_ON_FOUND} or 0; my @search_files= glob($ENV{'SEARCH_FILE'}); my $search_pattern= $ENV{'SEARCH_PATTERN'} or die "SEARCH_PATTERN not set"; my $file_content= ""; @@ -76,12 +79,20 @@ perl; } close(FILE); } - if ( $print_search_result ) { + + if ( $print_search_result == 0 ) { + if ( $abort_on eq "NOT_FOUND" and $found == 0 ) { + die ("# ERROR: Non of the files do not contain the expected pattern $search_pattern\n"); + } + if ( $abort_on eq "FOUND" and $found ) { + die ("# ERROR: Some of the files contain pattern that we expected not to find $search_pattern\n"); + } + } else { my $res=$found ? "FOUND" : "NOT FOUND"; $ENV{SEARCH_FILE} =~ s{^.*?([^/\\]+)$}{$1}; print "$res /$search_pattern/ in $ENV{SEARCH_FILE}\n"; } - elsif ( $found == 0 ) { - die("# ERROR: Non of the files do not contain the expected pattern $search_pattern\n"); - } + #elsif ( $found == 0 and $abort_on_found eq "Disabled" ) { + #die("# ERROR: Non of the files do not contain the expected pattern $search_pattern\n"); + #} EOF diff --git a/mysql-test/include/table_encrypt_1_small.inc b/mysql-test/include/table_encrypt_1_small.inc new file mode 100644 index 000000000000..d009a964a305 --- /dev/null +++ b/mysql-test/include/table_encrypt_1_small.inc @@ -0,0 +1,50 @@ +# InnoDB transparent tablespace data encryption +# This test case will test basic encryption support features. + +--source include/no_valgrind_without_big.inc +--source include/have_innodb.inc +--source include/not_embedded.inc +--source include/have_innodb_max_16k.inc +--source include/have_debug.inc + +# Create a table with encryption, should fail since keyring is not +# loaded +call mtr.add_suppression("\\[Error\\] InnoDB: Encryption can't find master key, please check the keyring plugin is loaded."); +call mtr.add_suppression("\\[ERROR\\] InnoDB: Failed to find tablespace for table `\.\.*`\.`\.\.*` in the cache."); +call mtr.add_suppression("\\[ERROR\\] InnoDB: Operating system error number 2 in a file operation."); +call mtr.add_suppression("\\[ERROR\\] InnoDB: The error means the system cannot find the path specified."); +call mtr.add_suppression("\\[ERROR\\] InnoDB: Could not find a valid tablespace file for"); +call mtr.add_suppression("ibd can't be decrypted , please confirm the keyfile is match and keyring plugin is loaded."); +call mtr.add_suppression("\\[Warning\\] InnoDB: Ignoring tablespace .* because it could not be opened"); +call mtr.add_suppression("\\[ERROR\\] InnoDB: If you are installing InnoDB, remember that you must create directories yourself, InnoDB does not create them."); + +--let $restart_parameters="$KEYRING_RESTART_PARAM" +--let $restart_hide_args= 1 +--source include/restart_mysqld.inc + +--disable_warnings +DROP TABLE IF EXISTS t1; +--enable_warnings + +let $innodb_file_per_table = `SELECT @@innodb_file_per_table`; +SET GLOBAL innodb_file_per_table=ON; + +eval CREATE TABLE t1 (id int unsigned NOT NULL auto_increment PRIMARY KEY, val varchar(20) NOT NULL) ENCRYPTION="$encryption_type" ENGINE=InnoDB; + +INSERT INTO t1 (val) VALUES ('Sydney'), ('Melbourne'), ('Brisbane'), ('Perth'), ('Adelaide'); + +#ALTER TABLE t1 ENCRYPTION = "KEYRING"; +#ALTER TABLE t1 ENCRYPTION = 'Y'; + +#ALTER TABLE t1 ADD COLUMN is_capital char(1) NOT NULL DEFAULT 'N' AFTER val; +#SHOW CREATE TABLE t1; + +LET $MYSQLD_DATADIR = `select @@datadir`; +let SEARCH_FILE = $MYSQLD_DATADIR/test/t1.ibd; +let SEARCH_PATTERN=Sydney; +# The string should not be found, since it's encrypted. +--source include/search_pattern.inc + +# Cleanup +eval SET GLOBAL innodb_file_per_table=$innodb_file_per_table; +DROP TABLE t1; diff --git a/mysql-test/include/table_encrypt_2.inc b/mysql-test/include/table_encrypt_2.inc index 9233a44043cc..a6f9f27438dd 100644 --- a/mysql-test/include/table_encrypt_2.inc +++ b/mysql-test/include/table_encrypt_2.inc @@ -1,7 +1,7 @@ # InnoDB transparent tablespace data encryption # This test case will test basic encryption support features. -CREATE TABLE t1(c1 int) ENGINE=InnoDB ENCRYPTION="Y"; +eval CREATE TABLE t1(c1 int) ENGINE=InnoDB ENCRYPTION="$encryption_type"; DROP TABLE t1; @@ -20,7 +20,7 @@ SET GLOBAL innodb_file_per_table = 1; SELECT @@innodb_file_per_table; # Create a table with encryption -CREATE TABLE t1(c1 INT, c2 char(20)) ENCRYPTION="Y" ENGINE = InnoDB; +eval CREATE TABLE t1(c1 INT, c2 char(20)) ENCRYPTION="$encryption_type" ENGINE = InnoDB; SHOW CREATE TABLE t1; INSERT INTO t1 VALUES(0, "aaaaa"); @@ -55,7 +55,7 @@ ALTER INSTANCE ROTATE INNODB MASTER KEY; DROP TABLE t1; # Crash/recovery test. -CREATE TABLE t1(c1 INT, c2 char(20)) ENCRYPTION="Y" ENGINE = InnoDB; +eval CREATE TABLE t1(c1 INT, c2 char(20)) ENCRYPTION="$encryption_type" ENGINE = InnoDB; INSERT INTO t1 VALUES(0, "aaaaa"); INSERT INTO t1 VALUES(1, "bbbbb"); @@ -86,7 +86,7 @@ SET block_encryption_mode = 'aes-256-cbc'; --disable_warnings DROP DATABASE IF EXISTS tde_db; CREATE DATABASE tde_db; -CREATE TABLE tde_db.t1(c1 INT PRIMARY KEY, c2 char(50)) ENCRYPTION = 'Y' ENGINE = InnoDB; +eval CREATE TABLE tde_db.t1(c1 INT PRIMARY KEY, c2 char(50)) ENCRYPTION = '$encryption_type' ENGINE = InnoDB; --enable_warnings # INSERT INTO tde_db.t1 VALUES(0, 'abc'); diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index aca63d7d3b2a..8cbca7ed8649 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -169,7 +169,7 @@ END # If you add a new suite, please check TEST_DIRS in Makefile.am. # -my $DEFAULT_SUITES= "main,sys_vars,binlog,binlog_encryption,rpl_encryption," +my $DEFAULT_SUITES= "main,sys_vars,binlog,binlog_encryption,rpl_encryption,encryption," ."federated,gis,rpl,innodb,innodb_gis," ."innodb_fts,innodb_zip,innodb_undo,innodb_stress,perfschema,funcs_1," ."funcs_2,opt_trace,parts,auth_sec,query_rewrite_plugins,gcol,sysschema," diff --git a/mysql-test/r/mysqlshow.result b/mysql-test/r/mysqlshow.result index a87805cd6c8d..a120afe62115 100644 --- a/mysql-test/r/mysqlshow.result +++ b/mysql-test/r/mysqlshow.result @@ -121,7 +121,7 @@ Database: information_schema | INNODB_CMP_RESET | | INNODB_SYS_DATAFILES | | XTRADB_READ_VIEW | -| INNODB_SYS_VIRTUAL | +| INNODB_SYS_TABLESTATS | | XTRADB_RSEG | | INNODB_BUFFER_PAGE | | INNODB_TRX | @@ -131,7 +131,7 @@ Database: information_schema | INNODB_LOCKS | | INNODB_LOCK_WAITS | | XTRADB_INTERNAL_HASH_TABLES | -| INNODB_SYS_INDEXES | +| INNODB_TABLESPACES_ENCRYPTION | | INNODB_CMPMEM_RESET | | INNODB_SYS_FIELDS | | XTRADB_ZIP_DICT | @@ -152,7 +152,8 @@ Database: information_schema | INNODB_SYS_COLUMNS | | INNODB_FT_CONFIG | | XTRADB_ZIP_DICT_COLS | -| INNODB_SYS_TABLESTATS | +| INNODB_SYS_INDEXES | +| INNODB_SYS_VIRTUAL | +---------------------------------------+ Database: INFORMATION_SCHEMA +---------------------------------------+ @@ -200,7 +201,7 @@ Database: INFORMATION_SCHEMA | INNODB_CMP_RESET | | INNODB_SYS_DATAFILES | | XTRADB_READ_VIEW | -| INNODB_SYS_VIRTUAL | +| INNODB_SYS_TABLESTATS | | XTRADB_RSEG | | INNODB_BUFFER_PAGE | | INNODB_TRX | @@ -210,7 +211,7 @@ Database: INFORMATION_SCHEMA | INNODB_LOCKS | | INNODB_LOCK_WAITS | | XTRADB_INTERNAL_HASH_TABLES | -| INNODB_SYS_INDEXES | +| INNODB_TABLESPACES_ENCRYPTION | | INNODB_CMPMEM_RESET | | INNODB_SYS_FIELDS | | XTRADB_ZIP_DICT | @@ -231,7 +232,8 @@ Database: INFORMATION_SCHEMA | INNODB_SYS_COLUMNS | | INNODB_FT_CONFIG | | XTRADB_ZIP_DICT_COLS | -| INNODB_SYS_TABLESTATS | +| INNODB_SYS_INDEXES | +| INNODB_SYS_VIRTUAL | +---------------------------------------+ Wildcard: inf_rmation_schema +--------------------+ diff --git a/mysql-test/r/opt_hints_pfs.result b/mysql-test/r/opt_hints_pfs.result index 00a58b13bbf2..e43b819ccaca 100644 --- a/mysql-test/r/opt_hints_pfs.result +++ b/mysql-test/r/opt_hints_pfs.result @@ -8,8 +8,8 @@ SELECT * FROM t1; SELECT /*+ */ * FROM t1; SELECT digest, digest_text FROM performance_schema.events_statements_history ORDER BY timer_start DESC LIMIT 2; digest digest_text -7813b9aec0c09117f127053b466bb3e0 SELECT * FROM `t1` -7813b9aec0c09117f127053b466bb3e0 SELECT * FROM `t1` +008e63017f2468d2f16f5172af64a001 SELECT * FROM `t1` +008e63017f2468d2f16f5172af64a001 SELECT * FROM `t1` # Digests should be different: SELECT * FROM t1, t2; SELECT /*+ @@ -33,19 +33,19 @@ SUBQUERY(t1) */ * FROM t1, t2; SELECT digest, digest_text FROM performance_schema.events_statements_history ORDER BY timer_start DESC LIMIT 2; digest digest_text -5873dbf27c6f838d5ce06c692ee7f2b1 SELECT /*+ BKA ( `t1`@`qb1` ) BNL ( @`qb1` `t1` ) DUPSWEEDOUT FIRSTMATCH INTOEXISTS LOOSESCAN MATERIALIZATION MRR ( `t1` ) NO_BKA ( `t2` ) NO_BNL ( `t2` ) NO_ICP ( `t2` ) NO_MRR ( `t2` ) NO_RANGE_OPTIMIZATION ( `t2` ) NO_SEMIJOIN ( `t2` ) QB_NAME ( `qb1` ) SEMIJOIN ( `t1` ) SUBQUERY ( `t1` ) */ * FROM `t1` , `t2` -c2eecd9ef952755ec648eb7406354e72 SELECT * FROM `t1` , `t2` +e6bab229a5969540cf7c80f2192ecfbc SELECT /*+ BKA ( `t1`@`qb1` ) BNL ( @`qb1` `t1` ) DUPSWEEDOUT FIRSTMATCH INTOEXISTS LOOSESCAN MATERIALIZATION MRR ( `t1` ) NO_BKA ( `t2` ) NO_BNL ( `t2` ) NO_ICP ( `t2` ) NO_MRR ( `t2` ) NO_RANGE_OPTIMIZATION ( `t2` ) NO_SEMIJOIN ( `t2` ) QB_NAME ( `qb1` ) SEMIJOIN ( `t1` ) SUBQUERY ( `t1` ) */ * FROM `t1` , `t2` +7f97a4520a86d2261d6a0e49902d1081 SELECT * FROM `t1` , `t2` SELECT * FROM t2, t1; SELECT /*+ MAX_EXECUTION_TIME(10) */ * FROM t2, t1; SELECT digest, digest_text FROM performance_schema.events_statements_history ORDER BY timer_start DESC LIMIT 2; digest digest_text -c58f25464cd266d708f88b7a3c48a166 SELECT /*+ MAX_EXECUTION_TIME (?) */ * FROM `t2` , `t1` -531f2cca2dc0bca50a1208c81e130676 SELECT * FROM `t2` , `t1` +0537c682529951572f816ad552e388d4 SELECT /*+ MAX_EXECUTION_TIME (?) */ * FROM `t2` , `t1` +d0802028ada67e69fdff6375d47d0614 SELECT * FROM `t2` , `t1` SELECT 1; SELECT /*+ bad_hint_also_goes_to_digest */ 1; SELECT digest, digest_text FROM performance_schema.events_statements_history ORDER BY timer_start DESC LIMIT 2; digest digest_text -9c363c2243b369eb9d9d8130a7b278d9 SELECT /*+ `bad_hint_also_goes_to_digest` */ ? -24e5a8c19fe8009f403640dabf2a9e0f SELECT ? +e5c09badfc97b3ffaf95c0dfdeae496c SELECT /*+ `bad_hint_also_goes_to_digest` */ ? +3fff4c5a5ca5e1e484663cab257efd1e SELECT ? DROP TABLE t1, t2; # diff --git a/mysql-test/std_data/keys2.txt b/mysql-test/std_data/keys2.txt new file mode 100644 index 0000000000000000000000000000000000000000..8f936ef5334b7ff23606ee44b1cf2f48d84fe141 GIT binary patch literal 795 zcmeZHtt`sSOIJwC%t=)!OD!tS%+Iqj)H6t6fB<1A%?zbslme7dkXn?SpO+Y)nU|NJ zlB8>7U}fm&8vJh>dyZ({?){E^hWS&Mt!F%PW>(rWlL>Dt`0w&Z^6af-U`T-K7lP76 znr{L&-f-`YQ=L{BdfS!EBkVSPextmFZBn|J{uVxC$upl?J7j@ol4-sv*!;L_ry7#2 z+uC)k9{n{GRPy%l-7VByY_wwep@T>7x9rLz-+Uvm`7@H|FZwSX{I1&Kph4xN6Y)hh z`JZ&^zJ`CvKfw`v|I7^X%{K#^|KM)F3! URlxAcr&{5W$5S{%o%F@+iA_jOS*;srCg8c{WCe}cl%+y;Xwx;g`;cZKQ9I9O@Qhr(R?GY z`E~z7MeGY+)+`KPttc+0zBi%XS=d)p#lS-*YYUofu< zXSv8{!Q1h_a!*KQ|I^NfyxP5q&E%VJ3^xDt{_orQ#V>N|H~UYS;vd0inlW$xiQawl z1D0BrJvThmO1}99VDo1r&tLRkI{00+#X*D0NhjiqZ1O+p)O`*Al7E6D`2Lw0 tHvhrhe#e)a{w_S*Fm-7Tt9Ra$vuSMcKX~=GU9kM_KVPB;Xuhkz8vu?|m*)Tg literal 0 HcmV?d00001 diff --git a/mysql-test/suite/encryption/r/create_or_replace.result b/mysql-test/suite/encryption/r/create_or_replace.result new file mode 100644 index 000000000000..af27626a7563 --- /dev/null +++ b/mysql-test/suite/encryption/r/create_or_replace.result @@ -0,0 +1,22 @@ +SET default_storage_engine = InnoDB; +CREATE TABLE t1 (pk INT PRIMARY KEY, c VARCHAR(256)); +CREATE TABLE t2 AS SELECT * FROM t1; +drop table t1,t2; +SET GLOBAL innodb_encryption_threads = 0; +SET GLOBAL innodb_encryption_threads = 4; +CREATE TABLE `table10_int_autoinc` (`col_int_key` int, pk int auto_increment, `col_int` int, key (`col_int_key` ),primary key (pk)) engine=innodb; +INSERT /*! IGNORE */ INTO table10_int_autoinc VALUES (NULL, NULL, -474021888) , (1, NULL, NULL) , (1141047296, NULL, NULL) , (NULL, NULL, NULL) , (NULL, NULL, 1) , (NULL, NULL, 9) , (0, NULL, 1225785344) , (NULL, NULL, 1574174720) , (2, NULL, NULL) , (6, NULL, 3); +CREATE TABLE `table1_int_autoinc` (`col_int_key` int, pk int auto_increment, `col_int` int,key (`col_int_key` ), primary key (pk)) engine=innodb; +CREATE TABLE `table0_int_autoinc` (`col_int_key` int, pk int auto_increment, `col_int` int, key (`col_int_key` ),primary key (pk)) engine=innodb; +INSERT /*! IGNORE */ INTO table1_int_autoinc VALUES (4, NULL, NULL); +INSERT IGNORE INTO `table0_int_autoinc` ( `col_int_key` ) VALUES ( 1 ), ( 3 ), ( 4 ), ( 1 ); +INSERT IGNORE INTO `table1_int_autoinc` ( `col_int` ) VALUES ( 1 ), ( 0 ), ( 7 ), ( 9 ); +INSERT IGNORE INTO `table10_int_autoinc` ( `col_int` ) VALUES ( 6 ), ( 2 ), ( 3 ), ( 6 ); +drop table if exists create_or_replace_t, table1_int_autoinc, table0_int_autoinc, table10_int_autoinc; +SET GLOBAL innodb_encrypt_tables = ONLINE_FROM_KEYRING_TO_UNENCRYPTED; +SET GLOBAL innodb_encryption_threads = 4; +# Wait max 10 min for key encryption threads to decrypt all spaces +# Success! +SET GLOBAL innodb_encryption_threads = 0; +SET GLOBAL innodb_encrypt_tables = ONLINE_FROM_KEYRING_TO_UNENCRYPTED; +# restart diff --git a/mysql-test/suite/encryption/r/encrypt_and_grep.result b/mysql-test/suite/encryption/r/encrypt_and_grep.result new file mode 100644 index 000000000000..a9e52ed6214a --- /dev/null +++ b/mysql-test/suite/encryption/r/encrypt_and_grep.result @@ -0,0 +1,115 @@ +SET @@global.keyring_file_data="MYSQL_TMP_DIR/mysecret_keyring"; +SET GLOBAL innodb_file_per_table = ON; +SET GLOBAL innodb_file_format = `Barracuda`; +create table t1 (a varchar(255)) engine=innodb encryption='KEYRING'; +create table t2 (a varchar(255)) engine=innodb; +show warnings; +Level Code Message +create table t3 (a varchar(255)) engine=innodb encryption='N'; +create table t4 (a varchar(255)) engine=innodb encryption='KEYRING' encryption_key_id=5; +CREATE TABLESPACE ts_encrypted ADD DATAFILE 'ts_encrypted.ibd' ENCRYPTION="Y" ENGINE="InnoDB"; +CREATE TABLE t5 (a varchar(255)) TABLESPACE ts_encrypted ENCRYPTION="Y" ENGINE="InnoDB"; +CREATE TABLESPACE ts_rk_encrypted ADD DATAFILE 'ts_rk_encrypted.ibd' ENCRYPTION='KEYRING' ENGINE="InnoDB"; +ERROR HY000: Invalid encryption option. +create table t6 (a varchar(255)) engine=innodb; +insert t1 values (repeat('foobarsecret', 12)); +insert t2 values (repeat('tempsecret', 12)); +insert t3 values (repeat('dummysecret', 12)); +insert t4 values (repeat('verysecret', 12)); +insert t5 values (repeat('moresecret', 12)); +insert t6 values (repeat('sooosecret', 12)); +select * from t1; +a +foobarsecretfoobarsecretfoobarsecretfoobarsecretfoobarsecretfoobarsecretfoobarsecretfoobarsecretfoobarsecretfoobarsecretfoobarsecretfoobarsecret +select * from t2; +a +tempsecrettempsecrettempsecrettempsecrettempsecrettempsecrettempsecrettempsecrettempsecrettempsecrettempsecrettempsecret +select * from t3; +a +dummysecretdummysecretdummysecretdummysecretdummysecretdummysecretdummysecretdummysecretdummysecretdummysecretdummysecretdummysecret +select * from t4; +a +verysecretverysecretverysecretverysecretverysecretverysecretverysecretverysecretverysecretverysecretverysecretverysecret +select * from t5; +a +moresecretmoresecretmoresecretmoresecretmoresecretmoresecretmoresecretmoresecretmoresecretmoresecretmoresecretmoresecret +select * from t6; +a +sooosecretsooosecretsooosecretsooosecretsooosecretsooosecretsooosecretsooosecretsooosecretsooosecretsooosecretsooosecret +ALTER TABLE t4 ENCRYPTION='N', ALGORITHM=INPLACE; +ALTER TABLE t4 ENCRYPTION='KEYRING', ALGORITHM=INPLACE; +# ibdata1 expecting NOT_FOUND +# It should be possible to mark table as not encrypted with INPLACE algorithm, given table is +# is currently not encrypted +ALTER TABLE t6 ENCRYPTION='N', ALGORITHM=INPLACE; +ALTER TABLE t6 ENCRYPTION='KEYRING', ALGORITHM=INPLACE; +# Wait max 10 min for key encryption threads to encrypt all spaces + +include/assert.inc [All encrypted tables should have encrypted flag set, apart from t3] +SHOW CREATE TABLE INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES; +Table Create Table +INNODB_SYS_TABLESPACES CREATE TEMPORARY TABLE `INNODB_SYS_TABLESPACES` ( + `SPACE` int(11) unsigned NOT NULL DEFAULT '0', + `NAME` varchar(655) NOT NULL DEFAULT '', + `FLAG` int(11) unsigned NOT NULL DEFAULT '0', + `FILE_FORMAT` varchar(10) DEFAULT NULL, + `ROW_FORMAT` varchar(22) DEFAULT NULL, + `PAGE_SIZE` int(11) unsigned NOT NULL DEFAULT '0', + `ZIP_PAGE_SIZE` int(11) unsigned NOT NULL DEFAULT '0', + `SPACE_TYPE` varchar(10) DEFAULT NULL, + `FS_BLOCK_SIZE` int(11) unsigned NOT NULL DEFAULT '0', + `FILE_SIZE` bigint(21) unsigned NOT NULL DEFAULT '0', + `ALLOCATED_SIZE` bigint(21) unsigned NOT NULL DEFAULT '0' +) ENGINE=MEMORY DEFAULT CHARSET=utf8 +SHOW CREATE TABLE INFORMATION_SCHEMA.INNODB_SYS_TABLES; +Table Create Table +INNODB_SYS_TABLES CREATE TEMPORARY TABLE `INNODB_SYS_TABLES` ( + `TABLE_ID` bigint(21) unsigned NOT NULL DEFAULT '0', + `NAME` varchar(655) NOT NULL DEFAULT '', + `FLAG` int(11) NOT NULL DEFAULT '0', + `N_COLS` int(11) NOT NULL DEFAULT '0', + `SPACE` int(11) NOT NULL DEFAULT '0', + `FILE_FORMAT` varchar(10) DEFAULT NULL, + `ROW_FORMAT` varchar(12) DEFAULT NULL, + `ZIP_PAGE_SIZE` int(11) unsigned NOT NULL DEFAULT '0', + `SPACE_TYPE` varchar(10) DEFAULT NULL +) ENGINE=MEMORY DEFAULT CHARSET=utf8 +# t1 yes on expecting NOT FOUND +# t2 ... on expecting NOT FOUND +# t3 no on expecting FOUND +# t4 no on expecting NOT FOUND +# ibdata1 expecting NOT FOUND +# ts_encrypted expecting NOT FOUND +# restart:--early-plugin-load=keyring_file=keyring_file.so --loose-keyring_file_data=MYSQL_TMP_DIR/mysecret_keyring KEYRING_PLUGIN_OPT --innodb-encrypt-tables=ONLINE_TO_KEYRING --innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=1 +# Now turn off encryption and wait for threads to decrypt everything +SET GLOBAL innodb_encrypt_tables = ONLINE_FROM_KEYRING_TO_UNENCRYPTED; +# Only three tables should stayed encrypted - the ones with explicite encryption +include/assert.inc [Only two tables should stayed encrypted - the ones with explicite encryption t1 and t4] +# t1 yes on expecting NOT FOUND +# t2 ... default expecting FOUND +# t3 no on expecting FOUND +# t1 yes on expecting NOT FOUND +# ibdata1 expecting NOT FOUND +# restart:--early-plugin-load=keyring_file=keyring_file.so --loose-keyring_file_data=MYSQL_TMP_DIR/mysecret_keyring KEYRING_PLUGIN_OPT --innodb-encrypt-tables=ONLINE_TO_KEYRING --innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=4 +# Now turn on encryption and wait for threads to encrypt all spaces +SET GLOBAL innodb_encrypt_tables = ONLINE_TO_KEYRING; +# Wait max 10 min for key encryption threads to encrypt all spaces +include/assert.inc [Only one table should stay unencrypted i.e. t3] +# t1 yes on expecting NOT FOUND +# t2 ... on expecting NOT FOUND +# t3 no on expecting FOUND +# t1 yes on expecting NOT FOUND +# ibdata1 expecting NOT FOUND +# restart:--early-plugin-load=keyring_file=keyring_file.so --loose-keyring_file_data=MYSQL_TMP_DIR/mysecret_keyring KEYRING_PLUGIN_OPT --innodb-encrypt-tables=ONLINE_TO_KEYRING --innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=4 +alter table t1 encryption='n'; +alter table t4 encryption='n'; +# Wait max 10 min for key encryption threads to encrypt all spaces (apart from t1,t3 and t4) +include/assert.inc [All spaces apart from t1, t3 and t4 should got encrypted] +# t1 yes on expecting FOUND +# t2 ... on expecting NOT FOUND +# t3 no on expecting FOUND +# t4 no on expecting FOUND +# ibdata1 expecting NOT FOUND +# restart:--early-plugin-load=keyring_file=keyring_file.so --loose-keyring_file_data=MYSQL_TMP_DIR/mysecret_keyring KEYRING_PLUGIN_OPT --innodb-encrypt-tables=ONLINE_TO_KEYRING --innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=4 +drop table t1, t2, t3, t4, t5, t6; +drop tablespace ts_encrypted; diff --git a/mysql-test/suite/encryption/r/encryption_force.result b/mysql-test/suite/encryption/r/encryption_force.result new file mode 100644 index 000000000000..b851ffe798fe --- /dev/null +++ b/mysql-test/suite/encryption/r/encryption_force.result @@ -0,0 +1,63 @@ +select @@innodb_encrypt_tables; +@@innodb_encrypt_tables +KEYRING_FORCE +set global innodb_encrypt_tables='KEYRING_FORCE'; +create table t1 (a int) engine=innodb encryption='KEYRING'; +create table t2 (a varchar(255)) engine=innodb; +create table t3 (a int) engine=innodb encryption='N'; +ERROR HY000: InnoDB: Only KEYRING encrypted tables (ENCRYPTION='KEYRING') can be created with innodb_encrypt_tables=KEYRING_FORCE. +create table t4 (a int) engine=innodb encryption='KEYRING' partition by hash(a) partitions 2; +create table t5 (a int) engine=innodb encryption='N' partition by hash(a) partitions 2; +ERROR HY000: InnoDB: Only KEYRING encrypted tables (ENCRYPTION='KEYRING') can be created with innodb_encrypt_tables=KEYRING_FORCE. +set global innodb_encrypt_tables='KEYRING_ON'; +create table t3 (a int) engine=innodb encryption='N'; +set global innodb_encrypt_tables='KEYRING_FORCE'; +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=0 +show create table t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` varchar(255) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=0 +show create table t3; +Table Create Table +t3 CREATE TABLE `t3` ( + `a` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='N' +show create table t4; +Table Create Table +t4 CREATE TABLE `t4` ( + `a` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=0 +/*!50100 PARTITION BY HASH (a) +PARTITIONS 2 */ +alter table t1 encryption='N'; +ERROR HY000: InnoDB: Only KEYRING encrypted tables (ENCRYPTION='KEYRING') can be created with innodb_encrypt_tables=KEYRING_FORCE. +alter table t2 encryption='KEYRING'; +alter table t3 encryption='KEYRING'; +alter table t4 encryption='N'; +ERROR HY000: InnoDB: Only KEYRING encrypted tables (ENCRYPTION='KEYRING') can be created with innodb_encrypt_tables=KEYRING_FORCE. +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=0 +show create table t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` varchar(255) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=0 +show create table t3; +Table Create Table +t3 CREATE TABLE `t3` ( + `a` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=0 +insert t2 values (repeat('tempsecret', 12)); +# restart +drop table t1; +drop table t2; +drop table t3; +drop table t4; diff --git a/mysql-test/suite/encryption/r/encryption_rotation.result b/mysql-test/suite/encryption/r/encryption_rotation.result new file mode 100644 index 000000000000..55a4a398049f --- /dev/null +++ b/mysql-test/suite/encryption/r/encryption_rotation.result @@ -0,0 +1,3 @@ +CREATE TABLE t1 (pk INT PRIMARY KEY, f VARCHAR(8)) ENGINE=InnoDB ENCRYPTION='Y'; +ALTER TABLE t1 ENCRYPTION='N'; +DROP TABLE t1; diff --git a/mysql-test/suite/encryption/r/innodb-bad-key-change.result b/mysql-test/suite/encryption/r/innodb-bad-key-change.result new file mode 100644 index 000000000000..ea191e9a2240 --- /dev/null +++ b/mysql-test/suite/encryption/r/innodb-bad-key-change.result @@ -0,0 +1,79 @@ +call mtr.add_suppression("Plugin 'file_key_management' init function returned error"); +call mtr.add_suppression("Plugin 'file_key_management' registration.*failed"); +call mtr.add_suppression("InnoDB: The page \\[page id: space=[1-9][0-9]*, page number=[1-9][0-9]*\\] in file '.*test.t[12]\\.ibd' cannot be decrypted\\."); +call mtr.add_suppression("failed to read or decrypt \\[page id: space=[1-9][0-9]*, page number=[1-9][0-9]*\\]"); +call mtr.add_suppression("File '.*mysql-test.std_data.keysbad3\\.txt' not found"); +call mtr.add_suppression("\\[Error\\] InnoDB: Page is still encrypted"); +call mtr.add_suppression("\\[Warning\\] InnoDB: Table is encrypted but encryption service or used key_id is not available\. Can't continue reading table\."); +call mtr.add_suppression("\\[Warning\\] InnoDB: Cannot save statistics for table `test`\.`t2` because file \./test/t2\.ibd cannot be decrypted\."); +call mtr.add_suppression("\\[Warning\\] InnoDB: Table in tablespace is encrypted but encryption service or used key_id is not available\. Can't continue reading table\."); +# Start server with keys2.txt +# restart:--keyring-file-data=MYSQLTEST_VARDIR/std_data/keys2.txt +SET GLOBAL innodb_file_per_table = ON; +CREATE TABLE t1 (c VARCHAR(8)) ENGINE=InnoDB ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=2; +INSERT INTO t1 VALUES ('foobar'); +ALTER TABLE t1 ADD COLUMN c2 INT; +INSERT INTO t1 VALUES ('foobar',2); +SELECT * FROM t1; +c c2 +foobar NULL +foobar 2 +TRUNCATE TABLE t1; +SELECT * FROM t1; +c c2 +INSERT INTO t1 VALUES ('foobar',1); +INSERT INTO t1 VALUES ('foobar',2); +FLUSH TABLE WITH READ LOCK; +SELECT * FROM t1; +c c2 +foobar 1 +foobar 2 + +# Restart server with keysbad3.txt +# restart:--keyring-file-data=MYSQLTEST_VARDIR/std_data/keysbad3.txt +SELECT * FROM t1; +ERROR HY000: Got error 500 'Table encrypted but decryption failed. This could be because correct encryption management plugin is not loaded, used encryption key is not available or encryption method does not match.' from InnoDB +# restart:--keyring-file-data=MYSQLTEST_VARDIR/std_data/keysbad3.txt +DROP TABLE t1; +# Start server with keys3.txt +# restart:--keyring-file-data=MYSQLTEST_VARDIR/std_data/keys3.txt +SET GLOBAL innodb_stats_persistent=OFF; +SET SESSION innodb_default_encryption_key_id=5; +CREATE TABLE t2 (c VARCHAR(8), id int not null primary key, b int, key(b)) ENGINE=InnoDB ENCRYPTION='KEYRING'; +INSERT INTO t2 VALUES ('foobar',1,2); + +# Restart server with keys2.txt +# restart:--keyring-file-data=MYSQLTEST_VARDIR/std_data/keys2.txt +SET GLOBAL innodb_stats_persistent=ON; +SELECT * FROM t2; +ERROR HY000: Got error 500 'Table encrypted but decryption failed. This could be because correct encryption management plugin is not loaded, used encryption key is not available or encryption method does not match.' from InnoDB +SELECT * FROM t2 where id = 1; +ERROR HY000: Got error 500 'Table encrypted but decryption failed. This could be because correct encryption management plugin is not loaded, used encryption key is not available or encryption method does not match.' from InnoDB +SELECT * FROM t2 where b = 1; +ERROR HY000: Got error 500 'Table encrypted but decryption failed. This could be because correct encryption management plugin is not loaded, used encryption key is not available or encryption method does not match.' from InnoDB +INSERT INTO t2 VALUES ('tmp',3,3); +ERROR HY000: Got error 500 'Table encrypted but decryption failed. This could be because correct encryption management plugin is not loaded, used encryption key is not available or encryption method does not match.' from InnoDB +DELETE FROM t2 where b = 3; +ERROR HY000: Got error 500 'Table encrypted but decryption failed. This could be because correct encryption management plugin is not loaded, used encryption key is not available or encryption method does not match.' from InnoDB +DELETE FROM t2 where id = 3; +ERROR HY000: Got error 500 'Table encrypted but decryption failed. This could be because correct encryption management plugin is not loaded, used encryption key is not available or encryption method does not match.' from InnoDB +UPDATE t2 set b = b +1; +ERROR HY000: Got error 500 'Table encrypted but decryption failed. This could be because correct encryption management plugin is not loaded, used encryption key is not available or encryption method does not match.' from InnoDB +OPTIMIZE TABLE t2; +Table Op Msg_type Msg_text +test.t2 optimize Warning Table t2 in file ./test/t2.ibd is encrypted but encryption service or used key_id is not available. Can't continue reading table. +test.t2 optimize Error Got error 500 'Table encrypted but decryption failed. This could be because correct encryption management plugin is not loaded, used encryption key is not available or encryption method does not match.' from InnoDB +test.t2 optimize error Corrupt +ALTER TABLE t2 ADD COLUMN d INT; +ERROR HY000: Got error 500 'Table encrypted but decryption failed. This could be because correct encryption management plugin is not loaded, used encryption key is not available or encryption method does not match.' from InnoDB +ANALYZE TABLE t2; +Table Op Msg_type Msg_text +test.t2 analyze Warning Table t2 in file ./test/t2.ibd is encrypted but encryption service or used key_id is not available. Can't continue reading table. +test.t2 analyze Error Got error 500 'Table encrypted but decryption failed. This could be because correct encryption management plugin is not loaded, used encryption key is not available or encryption method does not match.' from InnoDB +test.t2 analyze error Corrupt +TRUNCATE TABLE t2; +ERROR HY000: Got error 500 'Table encrypted but decryption failed. This could be because correct encryption management plugin is not loaded, used encryption key is not available or encryption method does not match.' from InnoDB +DROP TABLE t2; + +# Start server with keys2.txt +# restart:--keyring-file-data=MYSQLTEST_VARDIR/std_data/keys2.txt diff --git a/mysql-test/suite/encryption/r/innodb-bad-key-change3.result b/mysql-test/suite/encryption/r/innodb-bad-key-change3.result new file mode 100644 index 000000000000..19ac2f041370 --- /dev/null +++ b/mysql-test/suite/encryption/r/innodb-bad-key-change3.result @@ -0,0 +1,39 @@ +call mtr.add_suppression("cannot be decrypted. Are you using correct keyring that contain the"); +call mtr.add_suppression("InnoDB: Tablespace for table .* is set as discarded."); +call mtr.add_suppression("InnoDB: Cannot calculate statistics for table .* because the .ibd file is missing. Please refer to .* for how to resolve the issue."); +CREATE TABLE t1 (pk INT PRIMARY KEY, f VARCHAR(255)) ENGINE=InnoDB ROW_FORMAT=COMPRESSED ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=4; +SHOW WARNINGS; +Level Code Message +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `pk` int(11) NOT NULL, + `f` varchar(255) DEFAULT NULL, + PRIMARY KEY (`pk`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPRESSED ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=4 +INSERT INTO t1 VALUES (1,'foobar'),(2,'barfoo'); +FLUSH TABLE t1 FOR EXPORT; +# List before copying files +t1.cfg +t1.frm +t1.ibd +backup: t1 +UNLOCK TABLES; +ALTER TABLE t1 DISCARD TABLESPACE; +restore: t1 .ibd and .cfg files +# restart:--keyring-file-data=MYSQLTEST_VARDIR/keys2.txt +ALTER TABLE t1 IMPORT TABLESPACE; +ERROR HY000: Got error 500 'Table encrypted but decryption failed. This could be because correct encryption management plugin is not loaded, used encryption key is not available or encryption method does not match.' from InnoDB +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `pk` int(11) NOT NULL, + `f` varchar(255) DEFAULT NULL, + PRIMARY KEY (`pk`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPRESSED ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=4 +SELECT * FROM t1; +ERROR HY000: Tablespace has been discarded for table 't1' +# Tablespaces should be still encrypted +# t1 yes on expecting NOT FOUND +# restart: --keyring-file-data=MYSQLTEST_VARDIR/keys1.txt +DROP TABLE t1; diff --git a/mysql-test/suite/encryption/r/innodb-bad-key-change4.result b/mysql-test/suite/encryption/r/innodb-bad-key-change4.result new file mode 100644 index 000000000000..2ac52051123c --- /dev/null +++ b/mysql-test/suite/encryption/r/innodb-bad-key-change4.result @@ -0,0 +1,28 @@ +call mtr.add_suppression("InnoDB: The page \\[page id: space=[1-9][0-9]*, page number=[1-9][0-9]*\\] in file '.*test.t1\\.ibd' cannot be decrypted\\."); +call mtr.add_suppression("failed to read or decrypt \\[page id: space=[1-9][0-9]*, page number=[1-9][0-9]*\\]"); +call mtr.add_suppression("\\[Error\\] InnoDB: Page is still encrypted"); +call mtr.add_suppression("\\[Warning\\] InnoDB: Table is encrypted but encryption service or used key_id is not available\. Can't continue reading table\."); +# restart:--keyring-file-data=MYSQLTEST_VARDIR/std_data/keys2.txt +SET GLOBAL innodb_file_per_table = ON; +CREATE TABLE t1 (pk INT PRIMARY KEY, f VARCHAR(8)) ENGINE=InnoDB ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=4; +INSERT INTO t1 VALUES (1,'foo'),(2,'bar'); +# restart:--keyring-file-data=MYSQLTEST_VARDIR/std_data/keys3.txt +OPTIMIZE TABLE t1; +Table Op Msg_type Msg_text +test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize error Got error 500 'Table encrypted but decryption failed. This could be because correct encryption management plugin is not loaded, used encryption key is not available or encryption method does not match.' from InnoDB +test.t1 optimize status Operation failed +Warnings: +Error 1296 Got error 500 'Table encrypted but decryption failed. This could be because correct encryption management plugin is not loaded, used encryption key is not available or encryption method does not match.' from InnoDB +SHOW WARNINGS; +Level Code Message +Error 1296 Got error 500 'Table encrypted but decryption failed. This could be because correct encryption management plugin is not loaded, used encryption key is not available or encryption method does not match.' from InnoDB +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check Warning Table test/t1 is encrypted but encryption service or used key_id is not available. Can't continue checking table. +test.t1 check error Corrupt +SHOW WARNINGS; +Level Code Message +# restart:--keyring-file-data=MYSQLTEST_VARDIR/std_data/keys2.txt +call mtr.add_suppression("\\[Warning\\] InnoDB: Table in tablespace is encrypted .*"); +DROP TABLE t1; diff --git a/mysql-test/suite/encryption/r/innodb-corrupt-row-compressed.result b/mysql-test/suite/encryption/r/innodb-corrupt-row-compressed.result new file mode 100644 index 000000000000..c053a4379eb1 --- /dev/null +++ b/mysql-test/suite/encryption/r/innodb-corrupt-row-compressed.result @@ -0,0 +1,25 @@ +call mtr.add_suppression("InnoDB: The page \\[page id: space=[1-9][0-9]*, page number=[1-9][0-9]*\\] in file '.*test.t[123]\\.ibd' cannot be decrypted\\."); +call mtr.add_suppression("failed to read or decrypt \\[page id: space=[1-9][0-9]*, page number=[1-9][0-9]*\\]"); +SET GLOBAL innodb_file_per_table = ON; +# Create and populate tables to be corrupted +CREATE TABLE t1 (a INT AUTO_INCREMENT PRIMARY KEY, b TEXT,c char(200)) ENGINE=InnoDB ENCRYPTION='KEYRING' ; +CREATE TABLE t2 (a INT AUTO_INCREMENT PRIMARY KEY, b TEXT,c char(200)) ENGINE=InnoDB row_format=compressed ENCRYPTION='KEYRING'; +CREATE TABLE t3 (a INT AUTO_INCREMENT PRIMARY KEY, b TEXT, c char(200)) ENGINE=InnoDB COMPRESSION="zlib" ENCRYPTION='KEYRING'; +BEGIN; +INSERT INTO t1 (b,c) VALUES ('corrupt me','secret'); +INSERT INTO t1 (b,c) VALUES ('corrupt me','moresecretmoresecret'); +INSERT INTO t2 select * from t1; +INSERT INTO t3 select * from t1; +COMMIT; +# Backup tables before corrupting +# Corrupt tables +# restart +SELECT * FROM t1; +ERROR HY000: Got error 500 'Table encrypted but decryption failed. This could be because correct encryption management plugin is not loaded, used encryption key is not available or encryption method does not match.' from InnoDB +SELECT * FROM t2; +ERROR HY000: Got error 500 'Table encrypted but decryption failed. This could be because correct encryption management plugin is not loaded, used encryption key is not available or encryption method does not match.' from InnoDB +SELECT * FROM t3; +ERROR HY000: Got error 500 'Table encrypted but decryption failed. This could be because correct encryption management plugin is not loaded, used encryption key is not available or encryption method does not match.' from InnoDB +# Restore the original tables +# restart +DROP TABLE t1,t2,t3; diff --git a/mysql-test/suite/encryption/r/innodb-encryption-alter.result b/mysql-test/suite/encryption/r/innodb-encryption-alter.result new file mode 100644 index 000000000000..013fef90dd8a --- /dev/null +++ b/mysql-test/suite/encryption/r/innodb-encryption-alter.result @@ -0,0 +1,36 @@ +SET GLOBAL innodb_encrypt_tables = ONLINE_TO_KEYRING; +SET GLOBAL innodb_encryption_threads = 4; +CREATE TABLE t1 (pk INT PRIMARY KEY AUTO_INCREMENT, c VARCHAR(256)) ENGINE=INNODB encryption='N' ENCRYPTION_KEY_ID=4; +Warnings: +Warning 140 InnoDB: Ignored ENCRYPTION_KEY_ID 4 when encryption is disabled. +DROP TABLE t1; +CREATE TABLE t1 (pk INT PRIMARY KEY AUTO_INCREMENT, c VARCHAR(256)) ENGINE=INNODB; +DROP TABLE t1; +CREATE TABLE t1 (pk INT PRIMARY KEY AUTO_INCREMENT, c VARCHAR(256)) ENGINE=INNODB encryption='KEYRING'; +DROP TABLE t1; +set innodb_default_encryption_key_id = 4; +CREATE TABLE t1 (pk INT PRIMARY KEY AUTO_INCREMENT, c VARCHAR(256)) ENGINE=INNODB encryption='KEYRING'; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `pk` int(11) NOT NULL AUTO_INCREMENT, + `c` varchar(256) DEFAULT NULL, + PRIMARY KEY (`pk`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=4 +DROP TABLE t1; +CREATE TABLE t1 (pk INT PRIMARY KEY AUTO_INCREMENT, c VARCHAR(256)) ENGINE=INNODB; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `pk` int(11) NOT NULL AUTO_INCREMENT, + `c` varchar(256) DEFAULT NULL, + PRIMARY KEY (`pk`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION_KEY_ID=4 +CREATE TABLE t2 (pk INT PRIMARY KEY AUTO_INCREMENT, c VARCHAR(256)) ENGINE=INNODB encryption='N' ENCRYPTION_KEY_ID=1; +Warnings: +Warning 140 InnoDB: Ignored ENCRYPTION_KEY_ID 1 when encryption is disabled. +ALTER TABLE t1 ENCRYPTION_KEY_ID=99; +SHOW WARNINGS; +Level Code Message +set innodb_default_encryption_key_id = 1; +drop table t1,t2; diff --git a/mysql-test/suite/encryption/r/innodb-first-page-read.result b/mysql-test/suite/encryption/r/innodb-first-page-read.result new file mode 100644 index 000000000000..049952f27444 --- /dev/null +++ b/mysql-test/suite/encryption/r/innodb-first-page-read.result @@ -0,0 +1,95 @@ +SET GLOBAL innodb_file_format = `Barracuda`; +SET GLOBAL innodb_file_per_table = ON; +FLUSH STATUS; +create database innodb_test; +use innodb_test; +create table innodb_normal(c1 bigint not null, b char(200)) engine=innodb; +create table innodb_compact(c1 bigint not null, b char(200)) engine=innodb row_format=compact; +create table innodb_dynamic(c1 bigint not null, b char(200)) engine=innodb row_format=dynamic; +create table innodb_compressed(c1 bigint not null, b char(200)) engine=innodb row_format=compressed; +create table innodb_compressed1(c1 bigint not null, b char(200)) engine=innodb row_format=compressed key_block_size=1; +create table innodb_compressed2(c1 bigint not null, b char(200)) engine=innodb row_format=compressed key_block_size=2; +create table innodb_compressed4(c1 bigint not null, b char(200)) engine=innodb row_format=compressed key_block_size=4; +create table innodb_compressed8(c1 bigint not null, b char(200)) engine=innodb row_format=compressed key_block_size=8; +create table innodb_compressed16(c1 bigint not null, b char(200)) engine=innodb row_format=compressed key_block_size=16; +create table innodb_redundant(c1 bigint not null, b char(200)) engine=innodb row_format=redundant; +create table innodb_pagecomp(c1 bigint not null, b char(200)) engine=innodb COMPRESSION="zlib"; +create table innodb_pagecomp1(c1 bigint not null, b char(200)) engine=innodb COMPRESSION="zlib"; +create table innodb_pagecomp2(c1 bigint not null, b char(200)) engine=innodb COMPRESSION="zlib"; +create table innodb_pagecomp3(c1 bigint not null, b char(200)) engine=innodb COMPRESSION="zlib"; +create table innodb_pagecomp4(c1 bigint not null, b char(200)) engine=innodb COMPRESSION="zlib"; +create table innodb_pagecomp5(c1 bigint not null, b char(200)) engine=innodb COMPRESSION="zlib"; +create table innodb_pagecomp6(c1 bigint not null, b char(200)) engine=innodb COMPRESSION="zlib"; +create table innodb_pagecomp7(c1 bigint not null, b char(200)) engine=innodb COMPRESSION="zlib"; +create table innodb_pagecomp8(c1 bigint not null, b char(200)) engine=innodb COMPRESSION="zlib"; +create table innodb_pagecomp9(c1 bigint not null, b char(200)) engine=innodb COMPRESSION="zlib"; +create table innodb_datadir1(c1 bigint not null, b char(200)) engine=innodb DATA DIRECTORY='MYSQL_TMP_DIR'; +create table innodb_datadir2(c1 bigint not null, b char(200)) engine=innodb row_format=compressed DATA DIRECTORY='MYSQL_TMP_DIR'; +create table innodb_datadir3(c1 bigint not null, b char(200)) engine=innodb COMPRESSION="zlib" DATA DIRECTORY='MYSQL_TMP_DIR'; +begin; +insert into innodb_normal values (1,'secret'); +insert into innodb_compact select * from innodb_normal; +insert into innodb_dynamic select * from innodb_normal; +insert into innodb_compressed select * from innodb_normal; +insert into innodb_compressed1 select * from innodb_normal; +insert into innodb_compressed2 select * from innodb_normal; +insert into innodb_compressed4 select * from innodb_normal; +insert into innodb_compressed8 select * from innodb_normal; +insert into innodb_compressed16 select * from innodb_normal; +insert into innodb_redundant select * from innodb_normal; +insert into innodb_pagecomp select * from innodb_normal; +insert into innodb_pagecomp1 select * from innodb_normal; +insert into innodb_pagecomp2 select * from innodb_normal; +insert into innodb_pagecomp3 select * from innodb_normal; +insert into innodb_pagecomp4 select * from innodb_normal; +insert into innodb_pagecomp5 select * from innodb_normal; +insert into innodb_pagecomp6 select * from innodb_normal; +insert into innodb_pagecomp7 select * from innodb_normal; +insert into innodb_pagecomp8 select * from innodb_normal; +insert into innodb_pagecomp9 select * from innodb_normal; +insert into innodb_datadir1 select * from innodb_normal; +insert into innodb_datadir2 select * from innodb_normal; +insert into innodb_datadir3 select * from innodb_normal; +commit; +FLUSH STATUS; +# Restart server and see how many page 0's are read +# restart +# result should be less than number of tables in both innodb_test and mysql databases +SELECT VARIABLE_VALUE <= 51 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'innodb_pages0_read'; +VARIABLE_VALUE <= 51 +1 +Warnings: +Warning 1287 'INFORMATION_SCHEMA.GLOBAL_STATUS' is deprecated and will be removed in a future release. Please use performance_schema.global_status instead +SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'innodb_pages0_read'; +VARIABLE_VALUE +44 +Warnings: +Warning 1287 'INFORMATION_SCHEMA.GLOBAL_STATUS' is deprecated and will be removed in a future release. Please use performance_schema.global_status instead +set global innodb_encrypt_tables=ONLINE_FROM_KEYRING_TO_UNENCRYPTED; +# wait until tables are decrypted +SELECT VARIABLE_VALUE <= 51 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'innodb_pages0_read'; +VARIABLE_VALUE <= 51 +1 +Warnings: +Warning 1287 'INFORMATION_SCHEMA.GLOBAL_STATUS' is deprecated and will be removed in a future release. Please use performance_schema.global_status instead +FLUSH STATUS; +# restart and see number read page 0 +# restart +# Since we have restarted the server with encryption threads disabled - the tables from innodb_test database +# should not have been accessed on server startup - thus selecting from any of those tables should increase +# innodb_pages0_read only by one +SELECT VARIABLE_VALUE <= 31 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'innodb_pages0_read'; +VARIABLE_VALUE <= 31 +0 +Warnings: +Warning 1287 'INFORMATION_SCHEMA.GLOBAL_STATUS' is deprecated and will be removed in a future release. Please use performance_schema.global_status instead +select * from innodb_test.innodb_compact; +c1 b +1 secret +SELECT VARIABLE_VALUE= 44 + 1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'innodb_pages0_read'; +VARIABLE_VALUE= 44 + 1 +0 +Warnings: +Warning 1287 'INFORMATION_SCHEMA.GLOBAL_STATUS' is deprecated and will be removed in a future release. Please use performance_schema.global_status instead +drop database innodb_test; +FLUSH STATUS; diff --git a/mysql-test/suite/encryption/r/innodb-force-corrupt.result b/mysql-test/suite/encryption/r/innodb-force-corrupt.result new file mode 100644 index 000000000000..c723fa54f3f7 --- /dev/null +++ b/mysql-test/suite/encryption/r/innodb-force-corrupt.result @@ -0,0 +1,353 @@ +call mtr.add_suppression("InnoDB: The page \\[page id: space=[1-9][0-9]*, page number=[1-9][0-9]*\\] in file '.*test.t[123]\\.ibd' cannot be decrypted\\."); +call mtr.add_suppression("failed to read or decrypt \\[page id: space=[1-9][0-9]*, page number=[1-9][0-9]*\\]"); +call mtr.add_suppression("\\[Error\\] InnoDB: Page is still encrypted"); +call mtr.add_suppression("\\[ERROR\\] InnoDB: Post - encryption checksum verification failed - decryption failed for space id"); +call mtr.add_suppression("\\[ERROR\\] InnoDB: Encryption can't find tablespace key, please check the keyring plugin is loaded\."); +call mtr.add_suppression("\\[Warning\\] InnoDB: Table is encrypted but encryption service or used key_id is not available\. Can't continue reading table\."); +SET GLOBAL innodb_file_per_table = ON; +# Create and populate tables to be corrupted +CREATE TABLE t1 (a INT AUTO_INCREMENT PRIMARY KEY, b TEXT,c char(200)) ENGINE=InnoDB ENCRYPTION='KEYRING' ; +CREATE TABLE t2 (a INT AUTO_INCREMENT PRIMARY KEY, b TEXT,c char(200)) ENGINE=InnoDB row_format=compressed ENCRYPTION='KEYRING'; +CREATE TABLE t3 (a INT AUTO_INCREMENT PRIMARY KEY, b TEXT, c char(200)) ENGINE=InnoDB COMPRESSION="zlib" ENCRYPTION='KEYRING'; +BEGIN; +INSERT INTO t1 (b,c) VALUES ('corrupt me','secret'); +INSERT INTO t1 (b,c) VALUES ('corrupt me','moresecretmoresecret'); +INSERT INTO t2 select * from t1; +INSERT INTO t3 select * from t1; +COMMIT; +# Backup tables before corrupting +# 1 Corrupt the page data - i.e. page after the header +# restart +SELECT * FROM t1; +ERROR HY000: Got error 500 'Table encrypted but decryption failed. This could be because correct encryption management plugin is not loaded, used encryption key is not available or encryption method does not match.' from InnoDB +SELECT * FROM t2; +ERROR HY000: Got error 500 'Table encrypted but decryption failed. This could be because correct encryption management plugin is not loaded, used encryption key is not available or encryption method does not match.' from InnoDB +SELECT * FROM t3; +ERROR HY000: Got error 500 'Table encrypted but decryption failed. This could be because correct encryption management plugin is not loaded, used encryption key is not available or encryption method does not match.' from InnoDB +# let's check for the presense of the warning +# Restore the original tables +# restart +# Check that after restoring tables can be read +SELECT * FROM t1; +a b c +1 corrupt me secret +2 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +3 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +4 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +5 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +6 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +7 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +8 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +9 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +10 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +11 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +12 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +13 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +14 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +15 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +16 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +17 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +18 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +19 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +20 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +21 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +22 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +23 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +24 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +25 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +26 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +27 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +28 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +29 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +30 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +31 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +32 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +33 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +34 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +35 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +36 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +37 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +38 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +39 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +40 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +41 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +42 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +43 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +44 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +45 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +46 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +47 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +48 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +49 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +50 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +51 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +52 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +53 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +54 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +55 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +56 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +57 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +58 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +59 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +60 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +61 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +62 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +63 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +64 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +65 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +66 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +67 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +68 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +69 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +70 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +71 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +72 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +73 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +74 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +75 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +76 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +77 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +78 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +79 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +80 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +81 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +82 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +83 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +84 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +85 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +86 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +87 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +88 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +89 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +90 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +91 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +92 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +93 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +94 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +95 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +96 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +97 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +98 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +99 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +100 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +101 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +102 corrupt me moresecretmoresecret +SELECT * FROM t2; +a b c +1 corrupt me secret +2 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +3 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +4 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +5 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +6 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +7 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +8 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +9 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +10 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +11 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +12 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +13 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +14 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +15 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +16 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +17 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +18 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +19 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +20 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +21 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +22 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +23 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +24 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +25 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +26 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +27 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +28 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +29 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +30 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +31 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +32 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +33 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +34 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +35 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +36 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +37 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +38 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +39 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +40 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +41 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +42 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +43 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +44 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +45 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +46 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +47 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +48 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +49 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +50 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +51 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +52 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +53 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +54 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +55 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +56 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +57 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +58 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +59 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +60 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +61 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +62 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +63 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +64 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +65 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +66 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +67 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +68 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +69 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +70 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +71 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +72 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +73 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +74 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +75 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +76 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +77 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +78 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +79 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +80 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +81 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +82 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +83 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +84 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +85 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +86 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +87 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +88 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +89 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +90 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +91 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +92 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +93 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +94 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +95 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +96 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +97 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +98 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +99 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +100 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +101 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +102 corrupt me moresecretmoresecret +SELECT * FROM t3; +a b c +1 corrupt me secret +2 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +3 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +4 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +5 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +6 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +7 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +8 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +9 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +10 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +11 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +12 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +13 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +14 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +15 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +16 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +17 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +18 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +19 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +20 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +21 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +22 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +23 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +24 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +25 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +26 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +27 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +28 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +29 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +30 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +31 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +32 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +33 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +34 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +35 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +36 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +37 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +38 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +39 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +40 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +41 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +42 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +43 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +44 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +45 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +46 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +47 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +48 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +49 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +50 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +51 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +52 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +53 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +54 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +55 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +56 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +57 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +58 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +59 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +60 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +61 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +62 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +63 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +64 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +65 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +66 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +67 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +68 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +69 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +70 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +71 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +72 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +73 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +74 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +75 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +76 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +77 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +78 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +79 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +80 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +81 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +82 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +83 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +84 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +85 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +86 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +87 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +88 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +89 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +90 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +91 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +92 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +93 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +94 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +95 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +96 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +97 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +98 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +99 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +100 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +101 abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc secretsecret +102 corrupt me moresecretmoresecret +# 2 Corrupt the page header - encryption key's version +# restart +SELECT * FROM t1; +ERROR HY000: Got error 500 'Table encrypted but decryption failed. This could be because correct encryption management plugin is not loaded, used encryption key is not available or encryption method does not match.' from InnoDB +SELECT * FROM t2; +ERROR HY000: Got error 500 'Table encrypted but decryption failed. This could be because correct encryption management plugin is not loaded, used encryption key is not available or encryption method does not match.' from InnoDB +SELECT * FROM t3; +ERROR HY000: Got error 500 'Table encrypted but decryption failed. This could be because correct encryption management plugin is not loaded, used encryption key is not available or encryption method does not match.' from InnoDB +# Restore the original tables +# restart +DROP TABLE t1,t2,t3; diff --git a/mysql-test/suite/encryption/r/innodb-key-rotation-disable.result b/mysql-test/suite/encryption/r/innodb-key-rotation-disable.result new file mode 100644 index 000000000000..2d4523286017 --- /dev/null +++ b/mysql-test/suite/encryption/r/innodb-key-rotation-disable.result @@ -0,0 +1,53 @@ +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; +NAME +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; +NAME +create database enctests; +use enctests; +create table t1(a int not null primary key, b char(200)) engine=innodb; +create table t2(a int not null primary key, b char(200)) engine=innodb row_format=compressed; +create table t3(a int not null primary key, b char(200)) engine=innodb COMPRESSION="zlib"; +create table t4(a int not null primary key, b char(200)) engine=innodb encryption='KEYRING'; +create table t5(a int not null primary key, b char(200)) engine=innodb encryption='KEYRING' row_format=compressed; +create table t6(a int not null primary key, b char(200)) engine=innodb encryption='KEYRING' COMPRESSION="zlib"; +create table t7(a int not null primary key, b char(200)) engine=innodb encryption='N'; +create table t8(a int not null primary key, b char(200)) engine=innodb encryption='N' row_format=compressed; +create table t9(a int not null primary key, b char(200)) engine=innodb encryption='N' COMPRESSION="zlib"; +insert into t1 values (1, 'secredmessage'); +insert into t2 values (1, 'secredmessage'); +insert into t3 values (1, 'secredmessagecompressedaaaaaaaaabbbbbbbbbbbbbbccccccccccccccc'); +insert into t4 values (1, 'secredmessage'); +insert into t5 values (1, 'secredmessage'); +insert into t6 values (1, 'secredmessagecompressedaaaaaaaaabbbbbbbbbbbbbbccccccccccccccc'); +insert into t7 values (1, 'publicmessage'); +insert into t8 values (1, 'publicmessage'); +insert into t9 values (1, 'pugliccompressedaaaaaaaaabbbbbbbbbbbbbbccccccccccccccc'); +# should list tables t7-t9 +SELECT NAME,ENCRYPTION_SCHEME,CURRENT_KEY_ID FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 AND NAME LIKE 'enctests%'; +NAME ENCRYPTION_SCHEME CURRENT_KEY_ID +enctests/t7 0 0 +enctests/t8 0 0 +enctests/t9 0 0 +# should list tables t1-t6 +SELECT NAME,ENCRYPTION_SCHEME,CURRENT_KEY_ID FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0 and NAME LIKE 'enctests%'; +NAME ENCRYPTION_SCHEME CURRENT_KEY_ID +enctests/t1 1 0 +enctests/t2 1 0 +enctests/t3 1 0 +enctests/t4 1 0 +enctests/t5 1 0 +enctests/t6 1 0 +SET GLOBAL innodb_encryption_threads=0; +SET GLOBAL innodb_encrypt_tables=ONLINE_FROM_KEYRING_TO_UNENCRYPTED; +SET GLOBAL innodb_encrypt_tables=ONLINE_TO_KEYRING; +# t1 default on expecting NOT FOUND +# t2 default on expecting NOT FOUND +# t3 default on expecting NOT FOUND +# t4 on expecting NOT FOUND +# t5 on expecting NOT FOUND +# t6 on expecting NOT FOUND +# t7 off expecting FOUND +# t8 row compressed expecting FOUND +# t9 page compressed expecting NOT FOUND +# restart +drop database enctests; diff --git a/mysql-test/suite/encryption/r/innodb-missing-key.result b/mysql-test/suite/encryption/r/innodb-missing-key.result new file mode 100644 index 000000000000..6e54b0793d8a --- /dev/null +++ b/mysql-test/suite/encryption/r/innodb-missing-key.result @@ -0,0 +1,543 @@ +call mtr.add_suppression("InnoDB: The page \\[page id: space=[1-9][0-9]*, page number=[1-9][0-9]*\\] in file '.*test.t[123]\\.ibd' cannot be decrypted\\."); +call mtr.add_suppression("failed to read or decrypt \\[page id: space=[1-9][0-9]*, page number=[1-9][0-9]*\\]"); +call mtr.add_suppression("\\[Error\\] InnoDB: Page is still encrypted"); +call mtr.add_suppression("\\[Warning\\] InnoDB: Table is encrypted but encryption service or used key_id is not available\. Can't continue reading table\."); +CREATE TABLE t1(a int not null primary key, b varchar(128)) engine=innodb ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=7; +CREATE TABLE t2(a int not null primary key, b varchar(128)) engine=innodb ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=6; +CREATE TABLE t3(a int not null primary key, b varchar(128)) engine=innodb ENCRYPTION='N'; +insert into t1 values (500, 'thisissecretmessage'); +insert into t1 values (499, 'thisissecretmessage'); +insert into t1 values (498, 'thisissecretmessage'); +insert into t1 values (497, 'thisissecretmessage'); +insert into t1 values (496, 'thisissecretmessage'); +insert into t1 values (495, 'thisissecretmessage'); +insert into t1 values (494, 'thisissecretmessage'); +insert into t1 values (493, 'thisissecretmessage'); +insert into t1 values (492, 'thisissecretmessage'); +insert into t1 values (491, 'thisissecretmessage'); +insert into t1 values (490, 'thisissecretmessage'); +insert into t1 values (489, 'thisissecretmessage'); +insert into t1 values (488, 'thisissecretmessage'); +insert into t1 values (487, 'thisissecretmessage'); +insert into t1 values (486, 'thisissecretmessage'); +insert into t1 values (485, 'thisissecretmessage'); +insert into t1 values (484, 'thisissecretmessage'); +insert into t1 values (483, 'thisissecretmessage'); +insert into t1 values (482, 'thisissecretmessage'); +insert into t1 values (481, 'thisissecretmessage'); +insert into t1 values (480, 'thisissecretmessage'); +insert into t1 values (479, 'thisissecretmessage'); +insert into t1 values (478, 'thisissecretmessage'); +insert into t1 values (477, 'thisissecretmessage'); +insert into t1 values (476, 'thisissecretmessage'); +insert into t1 values (475, 'thisissecretmessage'); +insert into t1 values (474, 'thisissecretmessage'); +insert into t1 values (473, 'thisissecretmessage'); +insert into t1 values (472, 'thisissecretmessage'); +insert into t1 values (471, 'thisissecretmessage'); +insert into t1 values (470, 'thisissecretmessage'); +insert into t1 values (469, 'thisissecretmessage'); +insert into t1 values (468, 'thisissecretmessage'); +insert into t1 values (467, 'thisissecretmessage'); +insert into t1 values (466, 'thisissecretmessage'); +insert into t1 values (465, 'thisissecretmessage'); +insert into t1 values (464, 'thisissecretmessage'); +insert into t1 values (463, 'thisissecretmessage'); +insert into t1 values (462, 'thisissecretmessage'); +insert into t1 values (461, 'thisissecretmessage'); +insert into t1 values (460, 'thisissecretmessage'); +insert into t1 values (459, 'thisissecretmessage'); +insert into t1 values (458, 'thisissecretmessage'); +insert into t1 values (457, 'thisissecretmessage'); +insert into t1 values (456, 'thisissecretmessage'); +insert into t1 values (455, 'thisissecretmessage'); +insert into t1 values (454, 'thisissecretmessage'); +insert into t1 values (453, 'thisissecretmessage'); +insert into t1 values (452, 'thisissecretmessage'); +insert into t1 values (451, 'thisissecretmessage'); +insert into t1 values (450, 'thisissecretmessage'); +insert into t1 values (449, 'thisissecretmessage'); +insert into t1 values (448, 'thisissecretmessage'); +insert into t1 values (447, 'thisissecretmessage'); +insert into t1 values (446, 'thisissecretmessage'); +insert into t1 values (445, 'thisissecretmessage'); +insert into t1 values (444, 'thisissecretmessage'); +insert into t1 values (443, 'thisissecretmessage'); +insert into t1 values (442, 'thisissecretmessage'); +insert into t1 values (441, 'thisissecretmessage'); +insert into t1 values (440, 'thisissecretmessage'); +insert into t1 values (439, 'thisissecretmessage'); +insert into t1 values (438, 'thisissecretmessage'); +insert into t1 values (437, 'thisissecretmessage'); +insert into t1 values (436, 'thisissecretmessage'); +insert into t1 values (435, 'thisissecretmessage'); +insert into t1 values (434, 'thisissecretmessage'); +insert into t1 values (433, 'thisissecretmessage'); +insert into t1 values (432, 'thisissecretmessage'); +insert into t1 values (431, 'thisissecretmessage'); +insert into t1 values (430, 'thisissecretmessage'); +insert into t1 values (429, 'thisissecretmessage'); +insert into t1 values (428, 'thisissecretmessage'); +insert into t1 values (427, 'thisissecretmessage'); +insert into t1 values (426, 'thisissecretmessage'); +insert into t1 values (425, 'thisissecretmessage'); +insert into t1 values (424, 'thisissecretmessage'); +insert into t1 values (423, 'thisissecretmessage'); +insert into t1 values (422, 'thisissecretmessage'); +insert into t1 values (421, 'thisissecretmessage'); +insert into t1 values (420, 'thisissecretmessage'); +insert into t1 values (419, 'thisissecretmessage'); +insert into t1 values (418, 'thisissecretmessage'); +insert into t1 values (417, 'thisissecretmessage'); +insert into t1 values (416, 'thisissecretmessage'); +insert into t1 values (415, 'thisissecretmessage'); +insert into t1 values (414, 'thisissecretmessage'); +insert into t1 values (413, 'thisissecretmessage'); +insert into t1 values (412, 'thisissecretmessage'); +insert into t1 values (411, 'thisissecretmessage'); +insert into t1 values (410, 'thisissecretmessage'); +insert into t1 values (409, 'thisissecretmessage'); +insert into t1 values (408, 'thisissecretmessage'); +insert into t1 values (407, 'thisissecretmessage'); +insert into t1 values (406, 'thisissecretmessage'); +insert into t1 values (405, 'thisissecretmessage'); +insert into t1 values (404, 'thisissecretmessage'); +insert into t1 values (403, 'thisissecretmessage'); +insert into t1 values (402, 'thisissecretmessage'); +insert into t1 values (401, 'thisissecretmessage'); +insert into t1 values (400, 'thisissecretmessage'); +insert into t1 values (399, 'thisissecretmessage'); +insert into t1 values (398, 'thisissecretmessage'); +insert into t1 values (397, 'thisissecretmessage'); +insert into t1 values (396, 'thisissecretmessage'); +insert into t1 values (395, 'thisissecretmessage'); +insert into t1 values (394, 'thisissecretmessage'); +insert into t1 values (393, 'thisissecretmessage'); +insert into t1 values (392, 'thisissecretmessage'); +insert into t1 values (391, 'thisissecretmessage'); +insert into t1 values (390, 'thisissecretmessage'); +insert into t1 values (389, 'thisissecretmessage'); +insert into t1 values (388, 'thisissecretmessage'); +insert into t1 values (387, 'thisissecretmessage'); +insert into t1 values (386, 'thisissecretmessage'); +insert into t1 values (385, 'thisissecretmessage'); +insert into t1 values (384, 'thisissecretmessage'); +insert into t1 values (383, 'thisissecretmessage'); +insert into t1 values (382, 'thisissecretmessage'); +insert into t1 values (381, 'thisissecretmessage'); +insert into t1 values (380, 'thisissecretmessage'); +insert into t1 values (379, 'thisissecretmessage'); +insert into t1 values (378, 'thisissecretmessage'); +insert into t1 values (377, 'thisissecretmessage'); +insert into t1 values (376, 'thisissecretmessage'); +insert into t1 values (375, 'thisissecretmessage'); +insert into t1 values (374, 'thisissecretmessage'); +insert into t1 values (373, 'thisissecretmessage'); +insert into t1 values (372, 'thisissecretmessage'); +insert into t1 values (371, 'thisissecretmessage'); +insert into t1 values (370, 'thisissecretmessage'); +insert into t1 values (369, 'thisissecretmessage'); +insert into t1 values (368, 'thisissecretmessage'); +insert into t1 values (367, 'thisissecretmessage'); +insert into t1 values (366, 'thisissecretmessage'); +insert into t1 values (365, 'thisissecretmessage'); +insert into t1 values (364, 'thisissecretmessage'); +insert into t1 values (363, 'thisissecretmessage'); +insert into t1 values (362, 'thisissecretmessage'); +insert into t1 values (361, 'thisissecretmessage'); +insert into t1 values (360, 'thisissecretmessage'); +insert into t1 values (359, 'thisissecretmessage'); +insert into t1 values (358, 'thisissecretmessage'); +insert into t1 values (357, 'thisissecretmessage'); +insert into t1 values (356, 'thisissecretmessage'); +insert into t1 values (355, 'thisissecretmessage'); +insert into t1 values (354, 'thisissecretmessage'); +insert into t1 values (353, 'thisissecretmessage'); +insert into t1 values (352, 'thisissecretmessage'); +insert into t1 values (351, 'thisissecretmessage'); +insert into t1 values (350, 'thisissecretmessage'); +insert into t1 values (349, 'thisissecretmessage'); +insert into t1 values (348, 'thisissecretmessage'); +insert into t1 values (347, 'thisissecretmessage'); +insert into t1 values (346, 'thisissecretmessage'); +insert into t1 values (345, 'thisissecretmessage'); +insert into t1 values (344, 'thisissecretmessage'); +insert into t1 values (343, 'thisissecretmessage'); +insert into t1 values (342, 'thisissecretmessage'); +insert into t1 values (341, 'thisissecretmessage'); +insert into t1 values (340, 'thisissecretmessage'); +insert into t1 values (339, 'thisissecretmessage'); +insert into t1 values (338, 'thisissecretmessage'); +insert into t1 values (337, 'thisissecretmessage'); +insert into t1 values (336, 'thisissecretmessage'); +insert into t1 values (335, 'thisissecretmessage'); +insert into t1 values (334, 'thisissecretmessage'); +insert into t1 values (333, 'thisissecretmessage'); +insert into t1 values (332, 'thisissecretmessage'); +insert into t1 values (331, 'thisissecretmessage'); +insert into t1 values (330, 'thisissecretmessage'); +insert into t1 values (329, 'thisissecretmessage'); +insert into t1 values (328, 'thisissecretmessage'); +insert into t1 values (327, 'thisissecretmessage'); +insert into t1 values (326, 'thisissecretmessage'); +insert into t1 values (325, 'thisissecretmessage'); +insert into t1 values (324, 'thisissecretmessage'); +insert into t1 values (323, 'thisissecretmessage'); +insert into t1 values (322, 'thisissecretmessage'); +insert into t1 values (321, 'thisissecretmessage'); +insert into t1 values (320, 'thisissecretmessage'); +insert into t1 values (319, 'thisissecretmessage'); +insert into t1 values (318, 'thisissecretmessage'); +insert into t1 values (317, 'thisissecretmessage'); +insert into t1 values (316, 'thisissecretmessage'); +insert into t1 values (315, 'thisissecretmessage'); +insert into t1 values (314, 'thisissecretmessage'); +insert into t1 values (313, 'thisissecretmessage'); +insert into t1 values (312, 'thisissecretmessage'); +insert into t1 values (311, 'thisissecretmessage'); +insert into t1 values (310, 'thisissecretmessage'); +insert into t1 values (309, 'thisissecretmessage'); +insert into t1 values (308, 'thisissecretmessage'); +insert into t1 values (307, 'thisissecretmessage'); +insert into t1 values (306, 'thisissecretmessage'); +insert into t1 values (305, 'thisissecretmessage'); +insert into t1 values (304, 'thisissecretmessage'); +insert into t1 values (303, 'thisissecretmessage'); +insert into t1 values (302, 'thisissecretmessage'); +insert into t1 values (301, 'thisissecretmessage'); +insert into t1 values (300, 'thisissecretmessage'); +insert into t1 values (299, 'thisissecretmessage'); +insert into t1 values (298, 'thisissecretmessage'); +insert into t1 values (297, 'thisissecretmessage'); +insert into t1 values (296, 'thisissecretmessage'); +insert into t1 values (295, 'thisissecretmessage'); +insert into t1 values (294, 'thisissecretmessage'); +insert into t1 values (293, 'thisissecretmessage'); +insert into t1 values (292, 'thisissecretmessage'); +insert into t1 values (291, 'thisissecretmessage'); +insert into t1 values (290, 'thisissecretmessage'); +insert into t1 values (289, 'thisissecretmessage'); +insert into t1 values (288, 'thisissecretmessage'); +insert into t1 values (287, 'thisissecretmessage'); +insert into t1 values (286, 'thisissecretmessage'); +insert into t1 values (285, 'thisissecretmessage'); +insert into t1 values (284, 'thisissecretmessage'); +insert into t1 values (283, 'thisissecretmessage'); +insert into t1 values (282, 'thisissecretmessage'); +insert into t1 values (281, 'thisissecretmessage'); +insert into t1 values (280, 'thisissecretmessage'); +insert into t1 values (279, 'thisissecretmessage'); +insert into t1 values (278, 'thisissecretmessage'); +insert into t1 values (277, 'thisissecretmessage'); +insert into t1 values (276, 'thisissecretmessage'); +insert into t1 values (275, 'thisissecretmessage'); +insert into t1 values (274, 'thisissecretmessage'); +insert into t1 values (273, 'thisissecretmessage'); +insert into t1 values (272, 'thisissecretmessage'); +insert into t1 values (271, 'thisissecretmessage'); +insert into t1 values (270, 'thisissecretmessage'); +insert into t1 values (269, 'thisissecretmessage'); +insert into t1 values (268, 'thisissecretmessage'); +insert into t1 values (267, 'thisissecretmessage'); +insert into t1 values (266, 'thisissecretmessage'); +insert into t1 values (265, 'thisissecretmessage'); +insert into t1 values (264, 'thisissecretmessage'); +insert into t1 values (263, 'thisissecretmessage'); +insert into t1 values (262, 'thisissecretmessage'); +insert into t1 values (261, 'thisissecretmessage'); +insert into t1 values (260, 'thisissecretmessage'); +insert into t1 values (259, 'thisissecretmessage'); +insert into t1 values (258, 'thisissecretmessage'); +insert into t1 values (257, 'thisissecretmessage'); +insert into t1 values (256, 'thisissecretmessage'); +insert into t1 values (255, 'thisissecretmessage'); +insert into t1 values (254, 'thisissecretmessage'); +insert into t1 values (253, 'thisissecretmessage'); +insert into t1 values (252, 'thisissecretmessage'); +insert into t1 values (251, 'thisissecretmessage'); +insert into t1 values (250, 'thisissecretmessage'); +insert into t1 values (249, 'thisissecretmessage'); +insert into t1 values (248, 'thisissecretmessage'); +insert into t1 values (247, 'thisissecretmessage'); +insert into t1 values (246, 'thisissecretmessage'); +insert into t1 values (245, 'thisissecretmessage'); +insert into t1 values (244, 'thisissecretmessage'); +insert into t1 values (243, 'thisissecretmessage'); +insert into t1 values (242, 'thisissecretmessage'); +insert into t1 values (241, 'thisissecretmessage'); +insert into t1 values (240, 'thisissecretmessage'); +insert into t1 values (239, 'thisissecretmessage'); +insert into t1 values (238, 'thisissecretmessage'); +insert into t1 values (237, 'thisissecretmessage'); +insert into t1 values (236, 'thisissecretmessage'); +insert into t1 values (235, 'thisissecretmessage'); +insert into t1 values (234, 'thisissecretmessage'); +insert into t1 values (233, 'thisissecretmessage'); +insert into t1 values (232, 'thisissecretmessage'); +insert into t1 values (231, 'thisissecretmessage'); +insert into t1 values (230, 'thisissecretmessage'); +insert into t1 values (229, 'thisissecretmessage'); +insert into t1 values (228, 'thisissecretmessage'); +insert into t1 values (227, 'thisissecretmessage'); +insert into t1 values (226, 'thisissecretmessage'); +insert into t1 values (225, 'thisissecretmessage'); +insert into t1 values (224, 'thisissecretmessage'); +insert into t1 values (223, 'thisissecretmessage'); +insert into t1 values (222, 'thisissecretmessage'); +insert into t1 values (221, 'thisissecretmessage'); +insert into t1 values (220, 'thisissecretmessage'); +insert into t1 values (219, 'thisissecretmessage'); +insert into t1 values (218, 'thisissecretmessage'); +insert into t1 values (217, 'thisissecretmessage'); +insert into t1 values (216, 'thisissecretmessage'); +insert into t1 values (215, 'thisissecretmessage'); +insert into t1 values (214, 'thisissecretmessage'); +insert into t1 values (213, 'thisissecretmessage'); +insert into t1 values (212, 'thisissecretmessage'); +insert into t1 values (211, 'thisissecretmessage'); +insert into t1 values (210, 'thisissecretmessage'); +insert into t1 values (209, 'thisissecretmessage'); +insert into t1 values (208, 'thisissecretmessage'); +insert into t1 values (207, 'thisissecretmessage'); +insert into t1 values (206, 'thisissecretmessage'); +insert into t1 values (205, 'thisissecretmessage'); +insert into t1 values (204, 'thisissecretmessage'); +insert into t1 values (203, 'thisissecretmessage'); +insert into t1 values (202, 'thisissecretmessage'); +insert into t1 values (201, 'thisissecretmessage'); +insert into t1 values (200, 'thisissecretmessage'); +insert into t1 values (199, 'thisissecretmessage'); +insert into t1 values (198, 'thisissecretmessage'); +insert into t1 values (197, 'thisissecretmessage'); +insert into t1 values (196, 'thisissecretmessage'); +insert into t1 values (195, 'thisissecretmessage'); +insert into t1 values (194, 'thisissecretmessage'); +insert into t1 values (193, 'thisissecretmessage'); +insert into t1 values (192, 'thisissecretmessage'); +insert into t1 values (191, 'thisissecretmessage'); +insert into t1 values (190, 'thisissecretmessage'); +insert into t1 values (189, 'thisissecretmessage'); +insert into t1 values (188, 'thisissecretmessage'); +insert into t1 values (187, 'thisissecretmessage'); +insert into t1 values (186, 'thisissecretmessage'); +insert into t1 values (185, 'thisissecretmessage'); +insert into t1 values (184, 'thisissecretmessage'); +insert into t1 values (183, 'thisissecretmessage'); +insert into t1 values (182, 'thisissecretmessage'); +insert into t1 values (181, 'thisissecretmessage'); +insert into t1 values (180, 'thisissecretmessage'); +insert into t1 values (179, 'thisissecretmessage'); +insert into t1 values (178, 'thisissecretmessage'); +insert into t1 values (177, 'thisissecretmessage'); +insert into t1 values (176, 'thisissecretmessage'); +insert into t1 values (175, 'thisissecretmessage'); +insert into t1 values (174, 'thisissecretmessage'); +insert into t1 values (173, 'thisissecretmessage'); +insert into t1 values (172, 'thisissecretmessage'); +insert into t1 values (171, 'thisissecretmessage'); +insert into t1 values (170, 'thisissecretmessage'); +insert into t1 values (169, 'thisissecretmessage'); +insert into t1 values (168, 'thisissecretmessage'); +insert into t1 values (167, 'thisissecretmessage'); +insert into t1 values (166, 'thisissecretmessage'); +insert into t1 values (165, 'thisissecretmessage'); +insert into t1 values (164, 'thisissecretmessage'); +insert into t1 values (163, 'thisissecretmessage'); +insert into t1 values (162, 'thisissecretmessage'); +insert into t1 values (161, 'thisissecretmessage'); +insert into t1 values (160, 'thisissecretmessage'); +insert into t1 values (159, 'thisissecretmessage'); +insert into t1 values (158, 'thisissecretmessage'); +insert into t1 values (157, 'thisissecretmessage'); +insert into t1 values (156, 'thisissecretmessage'); +insert into t1 values (155, 'thisissecretmessage'); +insert into t1 values (154, 'thisissecretmessage'); +insert into t1 values (153, 'thisissecretmessage'); +insert into t1 values (152, 'thisissecretmessage'); +insert into t1 values (151, 'thisissecretmessage'); +insert into t1 values (150, 'thisissecretmessage'); +insert into t1 values (149, 'thisissecretmessage'); +insert into t1 values (148, 'thisissecretmessage'); +insert into t1 values (147, 'thisissecretmessage'); +insert into t1 values (146, 'thisissecretmessage'); +insert into t1 values (145, 'thisissecretmessage'); +insert into t1 values (144, 'thisissecretmessage'); +insert into t1 values (143, 'thisissecretmessage'); +insert into t1 values (142, 'thisissecretmessage'); +insert into t1 values (141, 'thisissecretmessage'); +insert into t1 values (140, 'thisissecretmessage'); +insert into t1 values (139, 'thisissecretmessage'); +insert into t1 values (138, 'thisissecretmessage'); +insert into t1 values (137, 'thisissecretmessage'); +insert into t1 values (136, 'thisissecretmessage'); +insert into t1 values (135, 'thisissecretmessage'); +insert into t1 values (134, 'thisissecretmessage'); +insert into t1 values (133, 'thisissecretmessage'); +insert into t1 values (132, 'thisissecretmessage'); +insert into t1 values (131, 'thisissecretmessage'); +insert into t1 values (130, 'thisissecretmessage'); +insert into t1 values (129, 'thisissecretmessage'); +insert into t1 values (128, 'thisissecretmessage'); +insert into t1 values (127, 'thisissecretmessage'); +insert into t1 values (126, 'thisissecretmessage'); +insert into t1 values (125, 'thisissecretmessage'); +insert into t1 values (124, 'thisissecretmessage'); +insert into t1 values (123, 'thisissecretmessage'); +insert into t1 values (122, 'thisissecretmessage'); +insert into t1 values (121, 'thisissecretmessage'); +insert into t1 values (120, 'thisissecretmessage'); +insert into t1 values (119, 'thisissecretmessage'); +insert into t1 values (118, 'thisissecretmessage'); +insert into t1 values (117, 'thisissecretmessage'); +insert into t1 values (116, 'thisissecretmessage'); +insert into t1 values (115, 'thisissecretmessage'); +insert into t1 values (114, 'thisissecretmessage'); +insert into t1 values (113, 'thisissecretmessage'); +insert into t1 values (112, 'thisissecretmessage'); +insert into t1 values (111, 'thisissecretmessage'); +insert into t1 values (110, 'thisissecretmessage'); +insert into t1 values (109, 'thisissecretmessage'); +insert into t1 values (108, 'thisissecretmessage'); +insert into t1 values (107, 'thisissecretmessage'); +insert into t1 values (106, 'thisissecretmessage'); +insert into t1 values (105, 'thisissecretmessage'); +insert into t1 values (104, 'thisissecretmessage'); +insert into t1 values (103, 'thisissecretmessage'); +insert into t1 values (102, 'thisissecretmessage'); +insert into t1 values (101, 'thisissecretmessage'); +insert into t1 values (100, 'thisissecretmessage'); +insert into t1 values (99, 'thisissecretmessage'); +insert into t1 values (98, 'thisissecretmessage'); +insert into t1 values (97, 'thisissecretmessage'); +insert into t1 values (96, 'thisissecretmessage'); +insert into t1 values (95, 'thisissecretmessage'); +insert into t1 values (94, 'thisissecretmessage'); +insert into t1 values (93, 'thisissecretmessage'); +insert into t1 values (92, 'thisissecretmessage'); +insert into t1 values (91, 'thisissecretmessage'); +insert into t1 values (90, 'thisissecretmessage'); +insert into t1 values (89, 'thisissecretmessage'); +insert into t1 values (88, 'thisissecretmessage'); +insert into t1 values (87, 'thisissecretmessage'); +insert into t1 values (86, 'thisissecretmessage'); +insert into t1 values (85, 'thisissecretmessage'); +insert into t1 values (84, 'thisissecretmessage'); +insert into t1 values (83, 'thisissecretmessage'); +insert into t1 values (82, 'thisissecretmessage'); +insert into t1 values (81, 'thisissecretmessage'); +insert into t1 values (80, 'thisissecretmessage'); +insert into t1 values (79, 'thisissecretmessage'); +insert into t1 values (78, 'thisissecretmessage'); +insert into t1 values (77, 'thisissecretmessage'); +insert into t1 values (76, 'thisissecretmessage'); +insert into t1 values (75, 'thisissecretmessage'); +insert into t1 values (74, 'thisissecretmessage'); +insert into t1 values (73, 'thisissecretmessage'); +insert into t1 values (72, 'thisissecretmessage'); +insert into t1 values (71, 'thisissecretmessage'); +insert into t1 values (70, 'thisissecretmessage'); +insert into t1 values (69, 'thisissecretmessage'); +insert into t1 values (68, 'thisissecretmessage'); +insert into t1 values (67, 'thisissecretmessage'); +insert into t1 values (66, 'thisissecretmessage'); +insert into t1 values (65, 'thisissecretmessage'); +insert into t1 values (64, 'thisissecretmessage'); +insert into t1 values (63, 'thisissecretmessage'); +insert into t1 values (62, 'thisissecretmessage'); +insert into t1 values (61, 'thisissecretmessage'); +insert into t1 values (60, 'thisissecretmessage'); +insert into t1 values (59, 'thisissecretmessage'); +insert into t1 values (58, 'thisissecretmessage'); +insert into t1 values (57, 'thisissecretmessage'); +insert into t1 values (56, 'thisissecretmessage'); +insert into t1 values (55, 'thisissecretmessage'); +insert into t1 values (54, 'thisissecretmessage'); +insert into t1 values (53, 'thisissecretmessage'); +insert into t1 values (52, 'thisissecretmessage'); +insert into t1 values (51, 'thisissecretmessage'); +insert into t1 values (50, 'thisissecretmessage'); +insert into t1 values (49, 'thisissecretmessage'); +insert into t1 values (48, 'thisissecretmessage'); +insert into t1 values (47, 'thisissecretmessage'); +insert into t1 values (46, 'thisissecretmessage'); +insert into t1 values (45, 'thisissecretmessage'); +insert into t1 values (44, 'thisissecretmessage'); +insert into t1 values (43, 'thisissecretmessage'); +insert into t1 values (42, 'thisissecretmessage'); +insert into t1 values (41, 'thisissecretmessage'); +insert into t1 values (40, 'thisissecretmessage'); +insert into t1 values (39, 'thisissecretmessage'); +insert into t1 values (38, 'thisissecretmessage'); +insert into t1 values (37, 'thisissecretmessage'); +insert into t1 values (36, 'thisissecretmessage'); +insert into t1 values (35, 'thisissecretmessage'); +insert into t1 values (34, 'thisissecretmessage'); +insert into t1 values (33, 'thisissecretmessage'); +insert into t1 values (32, 'thisissecretmessage'); +insert into t1 values (31, 'thisissecretmessage'); +insert into t1 values (30, 'thisissecretmessage'); +insert into t1 values (29, 'thisissecretmessage'); +insert into t1 values (28, 'thisissecretmessage'); +insert into t1 values (27, 'thisissecretmessage'); +insert into t1 values (26, 'thisissecretmessage'); +insert into t1 values (25, 'thisissecretmessage'); +insert into t1 values (24, 'thisissecretmessage'); +insert into t1 values (23, 'thisissecretmessage'); +insert into t1 values (22, 'thisissecretmessage'); +insert into t1 values (21, 'thisissecretmessage'); +insert into t1 values (20, 'thisissecretmessage'); +insert into t1 values (19, 'thisissecretmessage'); +insert into t1 values (18, 'thisissecretmessage'); +insert into t1 values (17, 'thisissecretmessage'); +insert into t1 values (16, 'thisissecretmessage'); +insert into t1 values (15, 'thisissecretmessage'); +insert into t1 values (14, 'thisissecretmessage'); +insert into t1 values (13, 'thisissecretmessage'); +insert into t1 values (12, 'thisissecretmessage'); +insert into t1 values (11, 'thisissecretmessage'); +insert into t1 values (10, 'thisissecretmessage'); +insert into t1 values (9, 'thisissecretmessage'); +insert into t1 values (8, 'thisissecretmessage'); +insert into t1 values (7, 'thisissecretmessage'); +insert into t1 values (6, 'thisissecretmessage'); +insert into t1 values (5, 'thisissecretmessage'); +insert into t1 values (4, 'thisissecretmessage'); +insert into t1 values (3, 'thisissecretmessage'); +insert into t1 values (2, 'thisissecretmessage'); +insert into t1 values (1, 'thisissecretmessage'); +INSERT INTO t2 SELECT * FROM t1; +INSERT INTO t3 SELECT * FROM t1; + +# Restart server with keys3.txt +# restart:--keyring-file-data=MYSQLTEST_VARDIR/std_data/keys3.txt +set global innodb_encryption_rotate_key_age = 1; +use test; +CREATE TABLE t4(a int not null primary key, b varchar(128)) engine=innodb ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=6; +SELECT SLEEP(5); +SLEEP(5) +0 +SELECT COUNT(1) FROM t3; +COUNT(1) +500 +SELECT COUNT(1) FROM t2; +COUNT(1) +500 +SELECT COUNT(1) FROM t2,t1 where t2.a = t1.a; +ERROR HY000: Got error 500 'Table encrypted but decryption failed. This could be because correct encryption management plugin is not loaded, used encryption key is not available or encryption method does not match.' from InnoDB +SELECT COUNT(1) FROM t1 where b = 'ab'; +ERROR HY000: Got error 500 'Table encrypted but decryption failed. This could be because correct encryption management plugin is not loaded, used encryption key is not available or encryption method does not match.' from InnoDB +SELECT COUNT(1) FROM t1; +ERROR HY000: Got error 500 'Table encrypted but decryption failed. This could be because correct encryption management plugin is not loaded, used encryption key is not available or encryption method does not match.' from InnoDB + +# Start server with keys2.txt +# restart:--keyring-file-data=MYSQLTEST_VARDIR/std_data/keys2.txt +SELECT COUNT(1) FROM t1; +COUNT(1) +500 +SELECT COUNT(1) FROM t2; +COUNT(1) +500 +SELECT COUNT(1) FROM t3; +COUNT(1) +500 +DROP TABLE t1, t2, t3; diff --git a/mysql-test/suite/encryption/r/innodb-page_encryption.result b/mysql-test/suite/encryption/r/innodb-page_encryption.result new file mode 100644 index 000000000000..49d218fc7abf --- /dev/null +++ b/mysql-test/suite/encryption/r/innodb-page_encryption.result @@ -0,0 +1,269 @@ +create table innodb_normal(c1 bigint not null, b char(200)) engine=innodb; +create table innodb_compact(c1 bigint not null, b char(200)) engine=innodb row_format=compact ENCRYPTION='KEYRING' encryption_key_id=1; +create table innodb_compressed(c1 bigint not null, b char(200)) engine=innodb row_format=compressed ENCRYPTION='KEYRING' encryption_key_id=2; +create table innodb_dynamic(c1 bigint not null, b char(200)) engine=innodb row_format=dynamic ENCRYPTION='KEYRING' encryption_key_id=33; +create table innodb_redundant(c1 bigint not null, b char(200)) engine=innodb row_format=redundant ENCRYPTION='KEYRING' encryption_key_id=4; +set innodb_default_encryption_key_id = 5; +create table innodb_defkey(c1 bigint not null, b char(200)) engine=innodb ENCRYPTION='KEYRING'; +show create table innodb_defkey; +Table Create Table +innodb_defkey CREATE TABLE `innodb_defkey` ( + `c1` bigint(20) NOT NULL, + `b` char(200) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=5 +show create table innodb_compact; +Table Create Table +innodb_compact CREATE TABLE `innodb_compact` ( + `c1` bigint(20) NOT NULL, + `b` char(200) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=1 +show create table innodb_compressed; +Table Create Table +innodb_compressed CREATE TABLE `innodb_compressed` ( + `c1` bigint(20) NOT NULL, + `b` char(200) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPRESSED ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=2 +show create table innodb_dynamic; +Table Create Table +innodb_dynamic CREATE TABLE `innodb_dynamic` ( + `c1` bigint(20) NOT NULL, + `b` char(200) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=33 +show create table innodb_redundant; +Table Create Table +innodb_redundant CREATE TABLE `innodb_redundant` ( + `c1` bigint(20) NOT NULL, + `b` char(200) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=REDUNDANT ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=4 +create procedure innodb_insert_proc (repeat_count int) +begin +declare current_num int; +set current_num = 0; +while current_num < repeat_count do +insert into innodb_normal values(current_num, substring(MD5(RAND()), -64)); +set current_num = current_num + 1; +end while; +end// +commit; +set autocommit=0; +call innodb_insert_proc(2000); +commit; +set autocommit=1; +insert into innodb_compact select * from innodb_normal; +insert into innodb_compressed select * from innodb_normal; +insert into innodb_dynamic select * from innodb_normal; +insert into innodb_redundant select * from innodb_normal; +insert into innodb_defkey select * from innodb_normal; +update innodb_normal set c1 = c1 +1; +update innodb_compact set c1 = c1 + 1; +update innodb_compressed set c1 = c1 + 1; +update innodb_dynamic set c1 = c1 + 1; +update innodb_redundant set c1 = c1 + 1; +update innodb_defkey set c1 = c1 + 1; +select count(*) from innodb_compact where c1 < 1500000; +count(*) +2000 +select count(*) from innodb_compressed where c1 < 1500000; +count(*) +2000 +select count(*) from innodb_dynamic where c1 < 1500000; +count(*) +2000 +select count(*) from innodb_redundant where c1 < 1500000; +count(*) +2000 +select count(*) from innodb_defkey where c1 < 1500000; +count(*) +2000 +select count(*) from innodb_compact t1, innodb_normal t2 where +t1.c1 = t2.c1 and t1.b = t2.b; +count(*) +2000 +select count(*) from innodb_dynamic t1, innodb_normal t2 where +t1.c1 = t2.c1 and t1.b = t2.b; +count(*) +2000 +select count(*) from innodb_compressed t1, innodb_normal t2 where +t1.c1 = t2.c1 and t1.b = t2.b; +count(*) +2000 +select count(*) from innodb_redundant t1, innodb_normal t2 where +t1.c1 = t2.c1 and t1.b = t2.b; +count(*) +2000 +select count(*) from innodb_defkey t1, innodb_normal t2 where +t1.c1 = t2.c1 and t1.b = t2.b; +count(*) +2000 +SELECT variable_value >= 0 FROM information_schema.global_status WHERE variable_name = 'innodb_num_pages_encrypted'; +variable_value >= 0 +1 +Warnings: +Warning 1287 'INFORMATION_SCHEMA.GLOBAL_STATUS' is deprecated and will be removed in a future release. Please use performance_schema.global_status instead +SELECT variable_value >= 0 FROM information_schema.global_status WHERE variable_name = 'innodb_num_pages_decrypted'; +variable_value >= 0 +1 +Warnings: +Warning 1287 'INFORMATION_SCHEMA.GLOBAL_STATUS' is deprecated and will be removed in a future release. Please use performance_schema.global_status instead +# restart +update innodb_normal set c1 = c1 +1; +update innodb_compact set c1 = c1 + 1; +update innodb_compressed set c1 = c1 + 1; +update innodb_dynamic set c1 = c1 + 1; +update innodb_redundant set c1 = c1 + 1; +update innodb_defkey set c1 = c1 + 1; +select count(*) from innodb_compact where c1 < 1500000; +count(*) +2000 +select count(*) from innodb_compressed where c1 < 1500000; +count(*) +2000 +select count(*) from innodb_dynamic where c1 < 1500000; +count(*) +2000 +select count(*) from innodb_redundant where c1 < 1500000; +count(*) +2000 +select count(*) from innodb_defkey where c1 < 1500000; +count(*) +2000 +select count(*) from innodb_compact t1, innodb_normal t2 where +t1.c1 = t2.c1 and t1.b = t2.b; +count(*) +2000 +select count(*) from innodb_dynamic t1, innodb_normal t2 where +t1.c1 = t2.c1 and t1.b = t2.b; +count(*) +2000 +select count(*) from innodb_compressed t1, innodb_normal t2 where +t1.c1 = t2.c1 and t1.b = t2.b; +count(*) +2000 +select count(*) from innodb_redundant t1, innodb_normal t2 where +t1.c1 = t2.c1 and t1.b = t2.b; +count(*) +2000 +select count(*) from innodb_defkey t1, innodb_normal t2 where +t1.c1 = t2.c1 and t1.b = t2.b; +count(*) +2000 +set innodb_default_encryption_key_id = DEFAULT; +SELECT variable_value >= 0 FROM information_schema.global_status WHERE variable_name = 'innodb_num_pages_encrypted'; +variable_value >= 0 +1 +Warnings: +Warning 1287 'INFORMATION_SCHEMA.GLOBAL_STATUS' is deprecated and will be removed in a future release. Please use performance_schema.global_status instead +SELECT variable_value >= 0 FROM information_schema.global_status WHERE variable_name = 'innodb_num_pages_decrypted'; +variable_value >= 0 +1 +Warnings: +Warning 1287 'INFORMATION_SCHEMA.GLOBAL_STATUS' is deprecated and will be removed in a future release. Please use performance_schema.global_status instead +alter table innodb_compact engine=innodb encryption='KEYRING'; +show create table innodb_compact; +Table Create Table +innodb_compact CREATE TABLE `innodb_compact` ( + `c1` bigint(20) NOT NULL, + `b` char(200) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=1 +alter table innodb_compressed engine=innodb encryption='KEYRING'; +show create table innodb_compressed; +Table Create Table +innodb_compressed CREATE TABLE `innodb_compressed` ( + `c1` bigint(20) NOT NULL, + `b` char(200) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPRESSED ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=2 +alter table innodb_dynamic engine=innodb encryption='KEYRING'; +show create table innodb_dynamic; +Table Create Table +innodb_dynamic CREATE TABLE `innodb_dynamic` ( + `c1` bigint(20) NOT NULL, + `b` char(200) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=33 +alter table innodb_redundant engine=innodb encryption='KEYRING'; +show create table innodb_redundant; +Table Create Table +innodb_redundant CREATE TABLE `innodb_redundant` ( + `c1` bigint(20) NOT NULL, + `b` char(200) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=REDUNDANT ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=4 +# restart +show create table innodb_compact; +Table Create Table +innodb_compact CREATE TABLE `innodb_compact` ( + `c1` bigint(20) NOT NULL, + `b` char(200) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=1 +show create table innodb_compressed; +Table Create Table +innodb_compressed CREATE TABLE `innodb_compressed` ( + `c1` bigint(20) NOT NULL, + `b` char(200) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPRESSED ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=2 +show create table innodb_dynamic; +Table Create Table +innodb_dynamic CREATE TABLE `innodb_dynamic` ( + `c1` bigint(20) NOT NULL, + `b` char(200) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=33 +show create table innodb_redundant; +Table Create Table +innodb_redundant CREATE TABLE `innodb_redundant` ( + `c1` bigint(20) NOT NULL, + `b` char(200) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=REDUNDANT ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=4 +show create table innodb_defkey; +Table Create Table +innodb_defkey CREATE TABLE `innodb_defkey` ( + `c1` bigint(20) NOT NULL, + `b` char(200) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=5 +update innodb_normal set c1 = c1 +1; +update innodb_compact set c1 = c1 + 1; +update innodb_compressed set c1 = c1 + 1; +update innodb_dynamic set c1 = c1 + 1; +update innodb_redundant set c1 = c1 + 1; +select count(*) from innodb_compact where c1 < 1500000; +count(*) +2000 +select count(*) from innodb_compressed where c1 < 1500000; +count(*) +2000 +select count(*) from innodb_dynamic where c1 < 1500000; +count(*) +2000 +select count(*) from innodb_redundant where c1 < 1500000; +count(*) +2000 +select count(*) from innodb_compact t1, innodb_normal t2 where +t1.c1 = t2.c1 and t1.b = t2.b; +count(*) +2000 +select count(*) from innodb_dynamic t1, innodb_normal t2 where +t1.c1 = t2.c1 and t1.b = t2.b; +count(*) +2000 +select count(*) from innodb_compressed t1, innodb_normal t2 where +t1.c1 = t2.c1 and t1.b = t2.b; +count(*) +2000 +select count(*) from innodb_redundant t1, innodb_normal t2 where +t1.c1 = t2.c1 and t1.b = t2.b; +count(*) +2000 +SELECT variable_value >= 0 FROM information_schema.global_status WHERE variable_name = 'innodb_num_pages_encrypted'; +variable_value >= 0 +1 +Warnings: +Warning 1287 'INFORMATION_SCHEMA.GLOBAL_STATUS' is deprecated and will be removed in a future release. Please use performance_schema.global_status instead +SELECT variable_value >= 0 FROM information_schema.global_status WHERE variable_name = 'innodb_num_pages_decrypted'; +variable_value >= 0 +1 +Warnings: +Warning 1287 'INFORMATION_SCHEMA.GLOBAL_STATUS' is deprecated and will be removed in a future release. Please use performance_schema.global_status instead +drop procedure innodb_insert_proc; +drop table innodb_normal; +drop table innodb_compact; +drop table innodb_compressed; +drop table innodb_dynamic; +drop table innodb_redundant; +drop table innodb_defkey; diff --git a/mysql-test/suite/encryption/r/innodb-page_encryption_compression.result b/mysql-test/suite/encryption/r/innodb-page_encryption_compression.result new file mode 100644 index 000000000000..a418f3618a6f --- /dev/null +++ b/mysql-test/suite/encryption/r/innodb-page_encryption_compression.result @@ -0,0 +1,4069 @@ +create table innodb_normal(c1 bigint not null, b char(200)) engine=innodb COMPRESSION="zlib"; +show warnings; +Level Code Message +create table innodb_compact(c1 bigint not null, b char(200)) engine=innodb row_format=compact ENCRYPTION='KEYRING' encryption_key_id=1 COMPRESSION="zlib"; +create table innodb_dynamic(c1 bigint not null, b char(200)) engine=innodb row_format=dynamic ENCRYPTION='KEYRING' encryption_key_id=2 COMPRESSION="zlib"; +show create table innodb_normal; +Table Create Table +innodb_normal CREATE TABLE `innodb_normal` ( + `c1` bigint(20) NOT NULL, + `b` char(200) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMPRESSION='zlib' +show create table innodb_compact; +Table Create Table +innodb_compact CREATE TABLE `innodb_compact` ( + `c1` bigint(20) NOT NULL, + `b` char(200) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT COMPRESSION='zlib' ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=1 +show create table innodb_dynamic; +Table Create Table +innodb_dynamic CREATE TABLE `innodb_dynamic` ( + `c1` bigint(20) NOT NULL, + `b` char(200) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC COMPRESSION='zlib' ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=2 +create procedure innodb_insert_proc (repeat_count int) +begin +declare current_num int; +set current_num = 0; +while current_num < repeat_count do +insert into innodb_normal values(current_num, substring(MD5(RAND()), -128)); +set current_num = current_num + 1; +end while; +end// +commit; +begin; +call innodb_insert_proc(2000); +insert into innodb_compact select * from innodb_normal; +insert into innodb_dynamic select * from innodb_normal; +commit; +# restart:--innodb-encrypt-tables=ONLINE_FROM_KEYRING_TO_UNENCRYPTED +select * from innodb_compact; +c1 b +0 +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 +select * from innodb_dynamic; +c1 b +0 +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 +set innodb_default_encryption_key_id = DEFAULT; +alter table innodb_normal engine=innodb COMPRESSION="zlib"; +show create table innodb_normal; +Table Create Table +innodb_normal CREATE TABLE `innodb_normal` ( + `c1` bigint(20) NOT NULL, + `b` char(200) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMPRESSION='zlib' +alter table innodb_compact engine=innodb encryption='KEYRING' COMPRESSION="zlib"; +show create table innodb_compact; +Table Create Table +innodb_compact CREATE TABLE `innodb_compact` ( + `c1` bigint(20) NOT NULL, + `b` char(200) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT COMPRESSION='zlib' ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=1 +alter table innodb_dynamic engine=innodb encryption='KEYRING' COMPRESSION="zlib"; +show create table innodb_dynamic; +Table Create Table +innodb_dynamic CREATE TABLE `innodb_dynamic` ( + `c1` bigint(20) NOT NULL, + `b` char(200) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC COMPRESSION='zlib' ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=2 +drop procedure innodb_insert_proc; +drop table innodb_normal; +drop table innodb_compact; +drop table innodb_dynamic; diff --git a/mysql-test/suite/encryption/r/innodb-read-only.result b/mysql-test/suite/encryption/r/innodb-read-only.result new file mode 100644 index 000000000000..b5b1fb0fedcd --- /dev/null +++ b/mysql-test/suite/encryption/r/innodb-read-only.result @@ -0,0 +1,4 @@ +# Wait max 10 min for key encryption threads to encrypt all spaces +# Success! +# restart:--innodb-read-only=1 --innodb-encrypt-tables=ONLINE_TO_KEYRING +# All done diff --git a/mysql-test/suite/encryption/r/innodb-redo-nokeys.result b/mysql-test/suite/encryption/r/innodb-redo-nokeys.result new file mode 100644 index 000000000000..ab5fad3fba83 --- /dev/null +++ b/mysql-test/suite/encryption/r/innodb-redo-nokeys.result @@ -0,0 +1,36 @@ +call mtr.add_suppression("mysqld: File .*"); +call mtr.add_suppression("Plugin 'file_key_management' .*"); +call mtr.add_suppression("InnoDB: cannot enable encryption, encryption plugin is not available"); +call mtr.add_suppression("Plugin 'InnoDB' init function returned error."); +call mtr.add_suppression("Plugin 'InnoDB' registration as a STORAGE ENGINE failed."); +call mtr.add_suppression("InnoDB: The page \\[page id: space=[0-9]+, page number=[0-9]+\\] in file '.*test.t[1-4]\\.ibd' cannot be decrypted\\."); +call mtr.add_suppression("failed to read or decrypt \\[page id: space=[1-9][0-9]*, page number=[1-9][0-9]*\\]"); +# Restart mysqld --file-key-management-filename=keys2.txt +SET GLOBAL innodb_file_per_table = ON; +create table t1(a int not null primary key, c char(200), b blob, index(b(10))) engine=innodb row_format=compressed ENCRYPTION='KEYRING' encryption_key_id=20; +create table t2(a int not null primary key, c char(200), b blob, index(b(10))) engine=innodb row_format=compressed; +create table t3(a int not null primary key, c char(200), b blob, index(b(10))) engine=innodb ENCRYPTION='KEYRING' encryption_key_id=20; +create table t4(a int not null primary key, c char(200), b blob, index(b(10))) engine=innodb; +begin; +insert into t2 select * from t1; +insert into t3 select * from t1; +insert into t4 select * from t1; +commit; +SET GLOBAL innodb_flush_log_at_trx_commit=1; +begin; +update t1 set c = repeat('secret3', 20); +update t2 set c = repeat('secret4', 20); +update t3 set c = repeat('secret4', 20); +update t4 set c = repeat('secret4', 20); +insert into t1 (a,c,b) values (21, repeat('secret5',20), repeat('secret6',6000)); +insert into t2 (a,c,b) values (21, repeat('secret7',20), repeat('secret8',6000)); +insert into t3 (a,c,b) values (21, repeat('secret9',20), repeat('secre10',6000)); +insert into t4 (a,c,b) values (21, repeat('secre11',20), repeat('secre12',6000)); +COMMIT; +# Kill the server +# Robert: After no_checkpoint_end +# restart +# Robert: After start_mysqld.inc +# Restart mysqld +# restart:--early-plugin-load=keyring_file=keyring_file.so --keyring-file-data=/home/rob/git/5.7_rotated_tablespaces_bld/mysql-test/var/std_data/keys2.txt +drop table t1, t2,t3,t4; diff --git a/mysql-test/suite/encryption/r/innodb_aborted_flush.result b/mysql-test/suite/encryption/r/innodb_aborted_flush.result new file mode 100644 index 000000000000..693a01a64d35 --- /dev/null +++ b/mysql-test/suite/encryption/r/innodb_aborted_flush.result @@ -0,0 +1,89 @@ +# restart:--innodb-encryption-threads=0 --log-error=MYSQL_TMP_DIR/my_restart.err +CREATE TABLE t1 (a VARCHAR(255)) ENGINE=InnoDB; +CREATE TABLE t2 (a VARCHAR(255)) ENGINE=InnoDB; +CREATE TABLE t3 (a VARCHAR(255)) ENGINE=InnoDB; +CREATE TABLE t4 (a VARCHAR(255)) ENGINE=InnoDB; +insert t1 values (repeat('foobarsecret', 12)); +insert t2 values (repeat('tempsecret', 12)); +insert t3 values (repeat('dummysecret', 12)); +insert t4 values (repeat('verysecret', 12)); +include/assert.inc [Make sure all tables have encrypted flag disabled] +# We should encrypt all tables apart from t3 +SET GLOBAL debug="+d,fail_encryption_flag_update_on_t3"; +# Enable encryption +SET GLOBAL innodb_encryption_rotate_key_age=15; +SET GLOBAL innodb_encryption_threads = 4; +SET GLOBAL innodb_encrypt_tables = ONLINE_TO_KEYRING; +# Wait for all tables to get encrypted +include/assert.inc [Make sure only t3's encryption flag is not set] +# Disable encryption +SET GLOBAL innodb_encryption_threads = 0; +SET GLOBAL debug="-d,fail_encryption_flag_update_on_t3"; +# Check that error message about t3 being removed from encryption rotation is present in error log +# On restart all tables with encrypted flag set should get validated against Data Dictionary. Let's check there is +# no error related to encryption flag mismatch between DD and ibd file. +# restart:--innodb-encryption-threads=0 --log-error=MYSQL_TMP_DIR/my_restart.err +SELECT * FROM t1; +a +foobarsecretfoobarsecretfoobarsecretfoobarsecretfoobarsecretfoobarsecretfoobarsecretfoobarsecretfoobarsecretfoobarsecretfoobarsecretfoobarsecret +SELECT * FROM t2; +a +tempsecrettempsecrettempsecrettempsecrettempsecrettempsecrettempsecrettempsecrettempsecrettempsecrettempsecrettempsecret +SELECT * FROM t3; +a +dummysecretdummysecretdummysecretdummysecretdummysecretdummysecretdummysecretdummysecretdummysecretdummysecretdummysecretdummysecret +SELECT * FROM t4; +a +verysecretverysecretverysecretverysecretverysecretverysecretverysecretverysecretverysecretverysecretverysecretverysecret +include/assert.inc [Make sure only t3's encryption flag is not set] +# restart:--innodb-encryption-threads=4 --innodb-encrypt-tables=ONLINE_TO_KEYRING +# Wait for all tables to get encrypted +include/assert.inc [Make sure all tablespaces have encryption flag set] +# restart:--innodb-encryption-threads=0 --innodb-encrypt-tables=ONLINE_FROM_KEYRING_TO_UNENCRYPTED --log-error=MYSQL_TMP_DIR/my_restart2.err +DROP TABLE t1,t2,t3,t4; +# Recreate t1..t4 inside a tablespace +CREATE TABLESPACE ts_1 ADD DATAFILE 'ts_1.ibd' ENGINE="InnoDB"; +CREATE TABLE t1 (a varchar(255)) TABLESPACE ts_1 ENGINE="InnoDB"; +CREATE TABLE t2 (a varchar(255)) TABLESPACE ts_1 ENGINE="InnoDB"; +CREATE TABLE t3 (a varchar(255)) TABLESPACE ts_1 ENGINE="InnoDB"; +CREATE TABLE t4 (a varchar(255)) TABLESPACE ts_1 ENGINE="InnoDB"; +CREATE TABLE t5 (a varchar(255)) ENGINE="InnoDB"; +insert t1 values (repeat('foobarsecret', 12)); +insert t2 values (repeat('tempsecret', 12)); +insert t3 values (repeat('dummysecret', 12)); +insert t4 values (repeat('verysecret', 12)); +include/assert.inc [Make sure ts_1's encryption flag is not set] +# Since t3 flag's update will fail, the tablespace ts_1's flag should remain unencrypted +SET GLOBAL debug="+d,fail_encryption_flag_update_on_t3"; +# Enable encryption +SET GLOBAL innodb_encryption_rotate_key_age=15; +SET GLOBAL innodb_encryption_threads = 1; +SET GLOBAL innodb_encrypt_tables = ONLINE_TO_KEYRING; +# Wait for all tables to get encrypted (apart from ts_1) +# Disable encryption +SET GLOBAL innodb_encryption_threads = 0; +SET GLOBAL debug="-d,fail_encryption_flag_update_on_t3"; +include/assert.inc [Make sure only ts_1's encryption flag is not set] +# Check that error message about ts_1 being removed from encryption rotation is present in error log +# On restart all tables with encrypted flag set should get validated against Data Dictionary. Let's check there is +# no error related to encryption flag mismatch between DD and ibd file. +# restart:--innodb-encryption-threads=0 --log-error=MYSQL_TMP_DIR/my_restart.err +SELECT * FROM t1; +a +foobarsecretfoobarsecretfoobarsecretfoobarsecretfoobarsecretfoobarsecretfoobarsecretfoobarsecretfoobarsecretfoobarsecretfoobarsecretfoobarsecret +SELECT * FROM t2; +a +tempsecrettempsecrettempsecrettempsecrettempsecrettempsecrettempsecrettempsecrettempsecrettempsecrettempsecrettempsecret +SELECT * FROM t3; +a +dummysecretdummysecretdummysecretdummysecretdummysecretdummysecretdummysecretdummysecretdummysecretdummysecretdummysecretdummysecret +SELECT * FROM t4; +a +verysecretverysecretverysecretverysecretverysecretverysecretverysecretverysecretverysecretverysecretverysecretverysecret +include/assert.inc [Make sure only ts_1's encryption flag is not set] +# Turn ON encryption and check that ts_1 gets successfully encrypted after the restart. +# restart:--innodb-encryption-threads=4 --innodb-encrypt-tables=ONLINE_TO_KEYRING +# Wait for all tables to get encrypted +include/assert.inc [Make sure all tablespaces have encryption flag set] +DROP TABLE t1,t2,t3,t4; +DROP TABLESPACE ts_1; diff --git a/mysql-test/suite/encryption/r/innodb_alters.result b/mysql-test/suite/encryption/r/innodb_alters.result new file mode 100644 index 000000000000..2b434725f9ce --- /dev/null +++ b/mysql-test/suite/encryption/r/innodb_alters.result @@ -0,0 +1,268 @@ +SET @@global.keyring_file_data="MYSQL_TMP_DIR/mysecret_keyring"; +SET GLOBAL innodb_file_per_table = ON; +SET GLOBAL innodb_file_format = `Barracuda`; +create table t1 (a varchar(255)) engine=innodb; +include/assert.inc [Table t1 should be included in INNODB_TABLESPACES_ENCRYPTION yet - since it is not RK] +insert t1 values (repeat('foobarsecret', 12)); +select * from t1; +a +foobarsecretfoobarsecretfoobarsecretfoobarsecretfoobarsecretfoobarsecretfoobarsecretfoobarsecretfoobarsecretfoobarsecretfoobarsecretfoobarsecret +# 1. Alter from unencrypted to RK +ALTER TABLE t1 encryption='KEYRING'; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` varchar(255) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=0 +SELECT * FROM t1; +a +foobarsecretfoobarsecretfoobarsecretfoobarsecretfoobarsecretfoobarsecretfoobarsecretfoobarsecretfoobarsecretfoobarsecretfoobarsecretfoobarsecret +include/assert.inc [Table t1 should be the only one appearing in INNODB_TABLESPACES_ENCRYPTION] +CREATE TABLE t2 (a varchar(255)) engine=innodb encryption='y'; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` varchar(255) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='y' +INSERT t2 VALUES (repeat('foobarsecret', 12)); +include/assert.inc [Table t2 should not be included in INNODB_TABLESPACES_ENCRYPTION - since it is not RK] +# 2. Alter from MK encryption to RK +ALTER TABLE t2 encryption='KEYRING'; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` varchar(255) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=0 +SELECT * FROM t2; +a +foobarsecretfoobarsecretfoobarsecretfoobarsecretfoobarsecretfoobarsecretfoobarsecretfoobarsecretfoobarsecretfoobarsecretfoobarsecretfoobarsecret +include/assert.inc [Table t2 should be included in INNODB_TABLESPACES_ENCRYPTION with MIN_KEY_VERION 1 (encrypted)] +# 3. Alter from RK to MK +ALTER TABLE t1 encryption='Y'; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` varchar(255) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='Y' +SELECT * FROM t1; +a +foobarsecretfoobarsecretfoobarsecretfoobarsecretfoobarsecretfoobarsecretfoobarsecretfoobarsecretfoobarsecretfoobarsecretfoobarsecretfoobarsecret +include/assert.inc [Table t1 has been re_encrypted to Master key encryption - should disappear from INNODB_TABLESPACES_ENCRYPTION => thus only t2 should remain] +# 4. Alter from MK to unencrypted +ALTER TABLE t1 encryption='n'; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` varchar(255) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='n' +include/assert.inc [t1 should be marked as unencrypted in INNODB_TABLESPACES_ENCRYPTION] +SELECT NAME, MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION; +NAME MIN_KEY_VERSION +test/t2 1 +# 5. Alter from unencrypted to RK +ALTER TABLE t1 ENCRYPTION='KEYRING'; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` varchar(255) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=0 +include/assert.inc [Table t1 should be included in INNODB_TABLESPACES_ENCRYPTION] +# 6. Alter from RK to unencrypted +ALTER TABLE t1 ENCRYPTION='n'; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` varchar(255) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='n' +include/assert.inc [Table t1 should appear in INNODB_TABLESPACES_ENCRYPTION but with MIN_KEY_VERSION (0) UNENCRYPTED] +# 7. Alter to RK INPLACE +ALTER TABLE t1 ENCRYPTION='KEYRING', ALGORITHM=INPLACE; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` varchar(255) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=0 +include/assert.inc [Table t1 should appear in INNODB_TABLESPACES_ENCRYPTION with MIN_KEY_VERSION (1) ENCRYPTED] +# 8. Alter to UNENCRYPTED INPLACE +ALTER TABLE t1 ENCRYPTION='N', ALGORITHM=INPLACE; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` varchar(255) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='N' +include/assert.inc [Table t1 should appear in INNODB_TABLESPACES_ENCRYPTION with MIN_KEY_VERSION (0) UNENCRYPTED] +# 9. Alter ENCRYPTION_KEY_ID +ALTER TABLE t1 ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=5; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` varchar(255) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=5 +include/assert.inc [Table t1 should appear in INNODB_TABLESPACES_ENCRYPTION with MIN_KEY_VERSION (1) ENCRYPTED KEY_ID =5] +# 10. Alter ENCRYPTION_KEY_ID INPLACE +ALTER TABLE t1 ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=6, ALGORITHM=INPLACE; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` varchar(255) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=6 +include/assert.inc [Table t1 should appear in INNODB_TABLESPACES_ENCRYPTION with MIN_KEY_VERSION (1) ENCRYPTED KEY_ID =6] +ALTER TABLE t1 ENCRYPTION_KEY_ID=8; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` varchar(255) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=8 +include/assert.inc [Table t1 should appear in INNODB_TABLESPACES_ENCRYPTION with MIN_KEY_VERSION (1) ENCRYPTED KEY_ID =8] +SELECT * FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION; +SPACE NAME ENCRYPTION_SCHEME KEYSERVER_REQUESTS MIN_KEY_VERSION CURRENT_KEY_VERSION KEY_ROTATION_PAGE_NUMBER KEY_ROTATION_MAX_PAGE_NUMBER CURRENT_KEY_ID ROTATING_OR_FLUSHING +26 test/t2 1 0 1 1 NULL NULL 0 0 +35 test/t1 1 0 1 1 NULL NULL 8 0 +ALTER TABLE t1 ENCRYPTION_KEY_ID=9, ALGORITHM=INPLACE; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` varchar(255) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=9 +SELECT * FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION; +SPACE NAME ENCRYPTION_SCHEME KEYSERVER_REQUESTS MIN_KEY_VERSION CURRENT_KEY_VERSION KEY_ROTATION_PAGE_NUMBER KEY_ROTATION_MAX_PAGE_NUMBER CURRENT_KEY_ID ROTATING_OR_FLUSHING +26 test/t2 1 0 1 1 NULL NULL 0 0 +36 test/t1 1 0 1 1 NULL NULL 9 0 +include/assert.inc [Table t1 should appear in INNODB_TABLESPACES_ENCRYPTION with MIN_KEY_VERSION (1) ENCRYPTED KEY_ID =9] +# It should not be possible to alter table to Master Key encryption INPLACE +ALTER TABLE t1 ENCRYPTION='Y', ALGORITHM=INPLACE; +ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Cannot alter encryption attribute by inplace algorithm.. Try ALGORITHM=COPY. +# It should not be possible to decrypt with ENCRYPTION_KEY_ID set +ALTER TABLE t1 ENCRYPTION='N' ENCRYPTION_KEY_ID=6; +Warnings: +Warning 140 InnoDB: Ignored ENCRYPTION_KEY_ID 6 when encryption is disabled. +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` varchar(255) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='N' +ALTER TABLE t1 ENCRYPTION='N'; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` varchar(255) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='N' +CREATE TABLE t3 (a varchar(255)) engine=innodb; +SHOW CREATE TABLE t3; +Table Create Table +t3 CREATE TABLE `t3` ( + `a` varchar(255) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +INSERT t3 VALUES (repeat('foobarsecret', 12)); +CREATE TABLE t_rk_with_encryption_key_id (a varchar(255)) engine=innodb ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=5; +CREATE TABLE t_alter_encryption_key_id (a varchar(255)) engine=innodb; +CREATE TABLE t_alter_to_rk (a varchar(255)) engine=innodb; +ALTER TABLE t_alter_to_rk ENCRYPTION='KEYRING'; +ALTER TABLE t_alter_encryption_key_id ENCRYPTION_KEY_ID = 6; +SHOW CREATE TABLE t_alter_encryption_key_id; +Table Create Table +t_alter_encryption_key_id CREATE TABLE `t_alter_encryption_key_id` ( + `a` varchar(255) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION_KEY_ID=6 +SHOW CREATE TABLE t_alter_to_rk; +Table Create Table +t_alter_to_rk CREATE TABLE `t_alter_to_rk` ( + `a` varchar(255) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=0 +# Testing alters with innodb-encrypt-tables ONLINE_TO_KEYRING +# restart:--innodb-encrypt-tables=ONLINE_TO_KEYRING --innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=4 +# Check that tables' definitions are correct after the reset +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` varchar(255) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='N' +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` varchar(255) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=0 +SHOW CREATE TABLE t3; +Table Create Table +t3 CREATE TABLE `t3` ( + `a` varchar(255) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +SHOW CREATE TABLE t_rk_with_encryption_key_id; +Table Create Table +t_rk_with_encryption_key_id CREATE TABLE `t_rk_with_encryption_key_id` ( + `a` varchar(255) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=5 +SHOW CREATE TABLE t_alter_to_rk; +Table Create Table +t_alter_to_rk CREATE TABLE `t_alter_to_rk` ( + `a` varchar(255) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=0 +SHOW CREATE TABLE t_alter_encryption_key_id; +Table Create Table +t_alter_encryption_key_id CREATE TABLE `t_alter_encryption_key_id` ( + `a` varchar(255) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION_KEY_ID=6 +#Wait for all tables to get encrypted (apart from t1) +# Alter ENCRYPTION_KEY_ID when t3 was encrypted with encryption thread +ALTER TABLE t3 ENCRYPTION_KEY_ID=3; +SHOW CREATE TABLE t3; +Table Create Table +t3 CREATE TABLE `t3` ( + `a` varchar(255) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION_KEY_ID=3 +include/assert.inc [Table t3 should appear in INNODB_TABLESPACES_ENCRYPTION with MIN_KEY_VERSION (1) ENCRYPTED KEY_ID =3] +# Alter ENCRYPTION_KEY_ID INPLACE when t3 was encrypted with encryption thread +ALTER TABLE t3 ENCRYPTION_KEY_ID=4, ALGORITHM=INPLACE; +SHOW CREATE TABLE t3; +Table Create Table +t3 CREATE TABLE `t3` ( + `a` varchar(255) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION_KEY_ID=4 +include/assert.inc [Table t3 should appear in INNODB_TABLESPACES_ENCRYPTION with MIN_KEY_VERSION (1) ENCRYPTED KEY_ID =4] +# Now decrypt t3. It should it should still be possible to change the ENCRYPTION_KEY_ID. +SET GLOBAL innodb_encrypt_tables=ONLINE_FROM_KEYRING_TO_UNENCRYPTED; +#Wait for all tables to get decrypted (apart from t2, t_rk_with_encryption_key_id, t_alter_to_rk) +# Alter ENCRYPTION_KEY_ID of unencrypted table. The key_id 5 should be used during encryption with encryption +# threads. However note that t3 was already encrypted with rotated threads. +ALTER TABLE t3 ENCRYPTION_KEY_ID=5, ALGORITHM=INPLACE; +SHOW CREATE TABLE t3; +Table Create Table +t3 CREATE TABLE `t3` ( + `a` varchar(255) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION_KEY_ID=5 +include/assert.inc [Table t3 should appear in INNODB_TABLESPACES_ENCRYPTION with MIN_KEY_VERSION (0 => UNECRYPTED) AND ENCRYPTED KEY_ID=5] +# After the re-encryption t3 should get encrypted with key 5 +SET GLOBAL innodb_encrypt_tables=ONLINE_TO_KEYRING; +#Wait for all tables to get encrypted (apart from t1) +include/assert.inc [Table t3 should appear in INNODB_TABLESPACES_ENCRYPTION with MIN_KEY_VERSION (1) ENCRYPTED KEY_ID =5] +SHOW CREATE TABLE t3; +Table Create Table +t3 CREATE TABLE `t3` ( + `a` varchar(255) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION_KEY_ID=5 +# Testing if alter encryption_encryption_key_id works on tables which was not previously encrypted with KEYRING +# i.e. on plain innodb tables. +# Turn off encryption threads and encryption +SET GLOBAL innodb_encryption_threads=0; +SET GLOBAL innodb_encrypt_tables=ONLINE_FROM_KEYRING_TO_UNENCRYPTED; +CREATE TABLE t4 (a varchar(255)) engine=innodb; +SHOW CREATE TABLE t4; +Table Create Table +t4 CREATE TABLE `t4` ( + `a` varchar(255) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +INSERT t4 VALUES (repeat('foobarsecret', 12)); +include/assert.inc [Table t4 should NOT appear in INNODB_TABLESPACES_ENCRYPTION] +ALTER TABLE t4 ENCRYPTION_KEY_ID=6; +SHOW CREATE TABLE t4; +Table Create Table +t4 CREATE TABLE `t4` ( + `a` varchar(255) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION_KEY_ID=6 +include/assert.inc [Table t4 should appear in INNODB_TABLESPACES_ENCRYPTION with MIN_KEY_VERSION (0 => UNENCRYPTED) AND ENCRYPTION_KEY_ID =6] +# Encrypt all tables and check if t4 got encrypted with ENCRYPTION KEY 6 +SET GLOBAL innodb_encryption_threads=4; +SET GLOBAL innodb_encrypt_tables=ONLINE_TO_KEYRING; +#Wait for all tables to get encrypted (apart from t1) +include/assert.inc [Table t4 should appear in INNODB_TABLESPACES_ENCRYPTION with MIN_KEY_VERSION (1 => ENCRYPTED) AND ENCRYPTION_KEY_ID =6] +drop table t1,t2,t3,t4,t_rk_with_encryption_key_id,t_alter_to_rk,t_alter_encryption_key_id; diff --git a/mysql-test/suite/encryption/r/innodb_default_key.result b/mysql-test/suite/encryption/r/innodb_default_key.result new file mode 100644 index 000000000000..ad17bdc8c070 --- /dev/null +++ b/mysql-test/suite/encryption/r/innodb_default_key.result @@ -0,0 +1,94 @@ +SET GLOBAL innodb_file_per_table = ON; +SET GLOBAL innodb_file_format = `Barracuda`; +SET GLOBAL innodb_encrypt_tables = ONLINE_FROM_KEYRING_TO_UNENCRYPTED; +SET GLOBAL innodb_encryption_threads= 0; +# Encryption disabled, innodb_default_encryption_key_id set default. Create table KEYRING should assign ENCRYPION_KEY_ID=0 +CREATE TABLE t1 (a varchar(255)) ENCRYPTION="KEYRING" ENGINE=innodb; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` varchar(255) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=0 +include/assert.inc [Table t1 should be included in INNODB_TABLESPACES_ENCRYPTION with MIN_KEY_VERION 1 (encrypted) and CURRENT_KEY_ID = 0] +# Alter to diffrent ENCRYPTION_KEY_ID should work +ALTER TABLE t1 ENCRYPTION_KEY_ID=1; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` varchar(255) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=1 +include/assert.inc [Table t1 should be included in INNODB_TABLESPACES_ENCRYPTION with MIN_KEY_VERION 1 (encrypted) and CURRENT_KEY_ID = 1] +# Encryption disabled, innodb_default_encryption_key_id set to 5. Create table KEYRING should assign ENCRYPION_KEY_ID=5 +SET SESSION innodb_default_encryption_key_id = 5; +CREATE TABLE t2 (a varchar(255)) ENCRYPTION="KEYRING" ENGINE=innodb; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` varchar(255) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=5 +include/assert.inc [Table t2 should be included in INNODB_TABLESPACES_ENCRYPTION with MIN_KEY_VERION 1 (encrypted) and CURRENT_KEY_ID = 5] +# Alter to diffrent ENCRYPTION_KEY_ID should work +ALTER TABLE t2 ENCRYPTION_KEY_ID=6; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` varchar(255) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=6 +include/assert.inc [Table t2 should be included in INNODB_TABLESPACES_ENCRYPTION with MIN_KEY_VERION 1 (encrypted) and CURRENT_KEY_ID = 6] +# Create table t3 (unencrypted), create table t4 with MK encryption, set global innodb_default_encryption_key_id to 8. +CREATE TABLE t3 (a varchar(255)) ENGINE=innodb; +CREATE TABLE t4 (a varchar(255)) ENCRYPTION="Y" ENGINE=innodb; +SET GLOBAL innodb_default_encryption_key_id = 8; +# Turn on encryption. t3 and t4 should get encrypted with key 8. +SET GLOBAL innodb_encrypt_tables = ONLINE_TO_KEYRING; +SET GLOBAL innodb_encryption_threads= 4; +#Wait for all tables to get encrypted (with arificial innodb_system) +include/assert.inc [Table t3 should be included in INNODB_TABLESPACES_ENCRYPTION with MIN_KEY_VERION 1 (encrypted) and CURRENT_KEY_ID = 8] +include/assert.inc [Table t4 should be included in INNODB_TABLESPACES_ENCRYPTION with MIN_KEY_VERION 1 (encrypted) and CURRENT_KEY_ID = 8] +SHOW CREATE TABLE t3; +Table Create Table +t3 CREATE TABLE `t3` ( + `a` varchar(255) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +SHOW CREATE TABLE t4; +Table Create Table +t4 CREATE TABLE `t4` ( + `a` varchar(255) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='Y' +# Change innodb_default_encryption_key_id to 5, create table t5. It should from the begining be encrypted with key 5. +SET SESSION innodb_default_encryption_key_id = 5; +CREATE TABLE t5 (a varchar(255)) ENGINE=innodb; +SHOW CREATE TABLE t5; +Table Create Table +t5 CREATE TABLE `t5` ( + `a` varchar(255) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION_KEY_ID=5 +include/assert.inc [Table t5 should be included in INNODB_TABLESPACES_ENCRYPTION with MIN_KEY_VERION 1 (encrypted) and CURRENT_KEY_ID = 5] +# Turn off encryption, create table t6 (unencrypted), create table t7 with MK encryption, restart server with innodb_default_key = 6 and encryption enabled. t6 and t7 should get encrypted with key 6. +SET GLOBAL innodb_encryption_threads= 0; +SET GLOBAL innodb_encrypt_tables = ONLINE_FROM_KEYRING_TO_UNENCRYPTED; +CREATE TABLE t6 (a varchar(255)) ENGINE=innodb; +SHOW CREATE TABLE t6; +Table Create Table +t6 CREATE TABLE `t6` ( + `a` varchar(255) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +CREATE TABLE t7 (a varchar(255)) ENCRYPTION="Y" ENGINE=innodb; +SHOW CREATE TABLE t7; +Table Create Table +t7 CREATE TABLE `t7` ( + `a` varchar(255) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='Y' +include/assert.inc [Table t6 and t7 should NOT be included in INNODB_TABLESPACES_ENCRYPTION] +# restart:--innodb-encrypt-tables=ONLINE_TO_KEYRING --innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=4 --innodb-default-encryption-key-id=6 +#Wait for all tables to get encrypted (with arificial innodb_system) +include/assert.inc [Table t6 should be included in INNODB_TABLESPACES_ENCRYPTION with MIN_KEY_VERION 1 (encrypted) and CURRENT_KEY_ID = 6] +# Both statements should produce warnings +CREATE TABLE t8 (a varchar(255)) ENCRYPTION="Y" ENCRYPTION_KEY_ID=5 ENGINE=innodb; +Warnings: +Warning 140 InnoDB: Ignored ENCRYPTION_KEY_ID 5 when Master Key encryption is enabled. +CREATE TABLE t9 (a varchar(255)) ENCRYPTION="N" ENCRYPTION_KEY_ID=5 ENGINE=innodb; +Warnings: +Warning 140 InnoDB: Ignored ENCRYPTION_KEY_ID 5 when encryption is disabled. +include/assert.inc [Table t7 should be included in INNODB_TABLESPACES_ENCRYPTION with MIN_KEY_VERION 1 (encrypted) and CURRENT_KEY_ID = 6] +drop table t1,t2,t3,t4,t5,t6,t7,t8,t9; diff --git a/mysql-test/suite/encryption/r/innodb_encryption-page-compression.result b/mysql-test/suite/encryption/r/innodb_encryption-page-compression.result new file mode 100644 index 000000000000..93bb0e7a46c1 --- /dev/null +++ b/mysql-test/suite/encryption/r/innodb_encryption-page-compression.result @@ -0,0 +1,161 @@ +SET GLOBAL innodb_encryption_threads = 4; +create table innodb_normal (c1 int, b char(20)) engine=innodb; +create table innodb_page_compressed1 (c1 int, b char(20)) engine=innodb COMPRESSION="zlib"; +show create table innodb_page_compressed1; +Table Create Table +innodb_page_compressed1 CREATE TABLE `innodb_page_compressed1` ( + `c1` int(11) DEFAULT NULL, + `b` char(20) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMPRESSION='zlib' ENCRYPTION_KEY_ID=0 +create table innodb_page_compressed2 (c1 int, b char(20)) engine=innodb COMPRESSION="zlib"; +show create table innodb_page_compressed2; +Table Create Table +innodb_page_compressed2 CREATE TABLE `innodb_page_compressed2` ( + `c1` int(11) DEFAULT NULL, + `b` char(20) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMPRESSION='zlib' ENCRYPTION_KEY_ID=0 +create table innodb_page_compressed3 (c1 int, b char(20)) engine=innodb COMPRESSION="zlib"; +show create table innodb_page_compressed3; +Table Create Table +innodb_page_compressed3 CREATE TABLE `innodb_page_compressed3` ( + `c1` int(11) DEFAULT NULL, + `b` char(20) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMPRESSION='zlib' ENCRYPTION_KEY_ID=0 +create table innodb_page_compressed4 (c1 int, b char(20)) engine=innodb COMPRESSION="zlib"; +show create table innodb_page_compressed4; +Table Create Table +innodb_page_compressed4 CREATE TABLE `innodb_page_compressed4` ( + `c1` int(11) DEFAULT NULL, + `b` char(20) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMPRESSION='zlib' ENCRYPTION_KEY_ID=0 +create table innodb_page_compressed5 (c1 int, b char(20)) engine=innodb COMPRESSION="zlib"; +show create table innodb_page_compressed5; +Table Create Table +innodb_page_compressed5 CREATE TABLE `innodb_page_compressed5` ( + `c1` int(11) DEFAULT NULL, + `b` char(20) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMPRESSION='zlib' ENCRYPTION_KEY_ID=0 +create table innodb_page_compressed6 (c1 int, b char(20)) engine=innodb COMPRESSION="zlib"; +show create table innodb_page_compressed6; +Table Create Table +innodb_page_compressed6 CREATE TABLE `innodb_page_compressed6` ( + `c1` int(11) DEFAULT NULL, + `b` char(20) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMPRESSION='zlib' ENCRYPTION_KEY_ID=0 +create table innodb_page_compressed7 (c1 int, b char(20)) engine=innodb COMPRESSION="zlib"; +show create table innodb_page_compressed7; +Table Create Table +innodb_page_compressed7 CREATE TABLE `innodb_page_compressed7` ( + `c1` int(11) DEFAULT NULL, + `b` char(20) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMPRESSION='zlib' ENCRYPTION_KEY_ID=0 +create table innodb_page_compressed8 (c1 int, b char(20)) engine=innodb COMPRESSION="zlib"; +show create table innodb_page_compressed8; +Table Create Table +innodb_page_compressed8 CREATE TABLE `innodb_page_compressed8` ( + `c1` int(11) DEFAULT NULL, + `b` char(20) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMPRESSION='zlib' ENCRYPTION_KEY_ID=0 +create table innodb_page_compressed9 (c1 int, b char(20)) engine=innodb COMPRESSION="zlib"; +show create table innodb_page_compressed9; +Table Create Table +innodb_page_compressed9 CREATE TABLE `innodb_page_compressed9` ( + `c1` int(11) DEFAULT NULL, + `b` char(20) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMPRESSION='zlib' ENCRYPTION_KEY_ID=0 +create procedure innodb_insert_proc (repeat_count int) +begin +declare current_num int; +set current_num = 0; +while current_num < repeat_count do +insert into innodb_normal values(current_num,'testing..'); +set current_num = current_num + 1; +end while; +end// +commit; +begin; +call innodb_insert_proc(2000); +insert into innodb_page_compressed1 select * from innodb_normal; +insert into innodb_page_compressed2 select * from innodb_normal; +insert into innodb_page_compressed3 select * from innodb_normal; +insert into innodb_page_compressed4 select * from innodb_normal; +insert into innodb_page_compressed5 select * from innodb_normal; +insert into innodb_page_compressed6 select * from innodb_normal; +insert into innodb_page_compressed7 select * from innodb_normal; +insert into innodb_page_compressed8 select * from innodb_normal; +insert into innodb_page_compressed9 select * from innodb_normal; +commit; +select count(*) from innodb_page_compressed1 where c1 < 500000; +count(*) +2000 +select count(*) from innodb_page_compressed2 where c1 < 500000; +count(*) +2000 +select count(*) from innodb_page_compressed3 where c1 < 500000; +count(*) +2000 +select count(*) from innodb_page_compressed4 where c1 < 500000; +count(*) +2000 +select count(*) from innodb_page_compressed5 where c1 < 500000; +count(*) +2000 +select count(*) from innodb_page_compressed6 where c1 < 500000; +count(*) +2000 +select count(*) from innodb_page_compressed7 where c1 < 500000; +count(*) +2000 +select count(*) from innodb_page_compressed8 where c1 < 500000; +count(*) +2000 +select count(*) from innodb_page_compressed9 where c1 < 500000; +count(*) +2000 +flush tables innodb_page_compressed1, innodb_page_compressed2, +innodb_page_compressed3, innodb_page_compressed4, +innodb_page_compressed5, innodb_page_compressed6, +innodb_page_compressed7, innodb_page_compressed8, +innodb_page_compressed9 for export; +unlock tables; +# Wait until dirty pages are compressed and encrypted +SELECT variable_value > 0 FROM information_schema.global_status WHERE variable_name = 'innodb_num_pages_encrypted'; +variable_value > 0 +1 +Warnings: +Warning 1287 'INFORMATION_SCHEMA.GLOBAL_STATUS' is deprecated and will be removed in a future release. Please use performance_schema.global_status instead +# restart +SET GLOBAL innodb_encryption_threads = 4; +SET GLOBAL innodb_encrypt_tables = ONLINE_FROM_KEYRING_TO_UNENCRYPTED; +update innodb_page_compressed1 set c1 = c1 + 1; +update innodb_page_compressed2 set c1 = c1 + 1; +update innodb_page_compressed3 set c1 = c1 + 1; +update innodb_page_compressed4 set c1 = c1 + 1; +update innodb_page_compressed5 set c1 = c1 + 1; +update innodb_page_compressed6 set c1 = c1 + 1; +update innodb_page_compressed7 set c1 = c1 + 1; +update innodb_page_compressed8 set c1 = c1 + 1; +update innodb_page_compressed9 set c1 = c1 + 1; +flush tables innodb_page_compressed1, innodb_page_compressed2, +innodb_page_compressed3, innodb_page_compressed4, +innodb_page_compressed5, innodb_page_compressed6, +innodb_page_compressed7, innodb_page_compressed8, +innodb_page_compressed9 for export; +unlock tables; +# Wait until dirty pages are compressed and encrypted 2 +SELECT variable_value > 0 FROM information_schema.global_status WHERE variable_name = 'innodb_num_pages_decrypted'; +variable_value > 0 +1 +Warnings: +Warning 1287 'INFORMATION_SCHEMA.GLOBAL_STATUS' is deprecated and will be removed in a future release. Please use performance_schema.global_status instead +drop procedure innodb_insert_proc; +drop table innodb_normal; +drop table innodb_page_compressed1; +drop table innodb_page_compressed2; +drop table innodb_page_compressed3; +drop table innodb_page_compressed4; +drop table innodb_page_compressed5; +drop table innodb_page_compressed6; +drop table innodb_page_compressed7; +drop table innodb_page_compressed8; +drop table innodb_page_compressed9; diff --git a/mysql-test/suite/encryption/r/innodb_encryption.result b/mysql-test/suite/encryption/r/innodb_encryption.result new file mode 100644 index 000000000000..fb0fa709b365 --- /dev/null +++ b/mysql-test/suite/encryption/r/innodb_encryption.result @@ -0,0 +1,160 @@ +SET @start_global_value = @@global.innodb_encryption_threads; +SHOW VARIABLES LIKE 'innodb_encrypt%'; +Variable_name Value +innodb_encrypt_online_alter_logs OFF +innodb_encrypt_tables ON +innodb_encryption_rotate_key_age 15 +innodb_encryption_rotation_iops 100 +innodb_encryption_threads 4 +SET GLOBAL innodb_encrypt_tables = ONLINE_TO_KEYRING; +# Wait max 10 min for key encryption threads to encrypt all spaces +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; +NAME +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; +NAME +mysql/plugin +mysql/servers +mysql/help_topic +mysql/help_category +mysql/help_relation +mysql/help_keyword +mysql/time_zone_name +mysql/time_zone +mysql/time_zone_transition +mysql/time_zone_transition_type +mysql/time_zone_leap_second +mysql/innodb_table_stats +mysql/innodb_index_stats +mysql/slave_relay_log_info +mysql/slave_master_info +mysql/slave_worker_info +mysql/gtid_executed +mysql/server_cost +mysql/engine_cost +sys/sys_config +innodb_system +# Success! +# Now turn off encryption and wait for threads to decrypt everything +SET GLOBAL innodb_encrypt_tables = ONLINE_FROM_KEYRING_TO_UNENCRYPTED; +# Wait max 10 min for key encryption threads to decrypt all spaces +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; +NAME +mysql/plugin +mysql/servers +mysql/help_topic +mysql/help_category +mysql/help_relation +mysql/help_keyword +mysql/time_zone_name +mysql/time_zone +mysql/time_zone_transition +mysql/time_zone_transition_type +mysql/time_zone_leap_second +mysql/innodb_table_stats +mysql/innodb_index_stats +mysql/slave_relay_log_info +mysql/slave_master_info +mysql/slave_worker_info +mysql/gtid_executed +mysql/server_cost +mysql/engine_cost +sys/sys_config +innodb_system +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; +NAME +# Success! +# Shutdown innodb_encryption_threads +SET GLOBAL innodb_encryption_threads=0; +# Turn on encryption +# since threads are off tables should remain unencrypted +SET GLOBAL innodb_encrypt_tables = ONLINE_TO_KEYRING; +# Wait 15s to check that nothing gets encrypted +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; +NAME +mysql/plugin +mysql/servers +mysql/help_topic +mysql/help_category +mysql/help_relation +mysql/help_keyword +mysql/time_zone_name +mysql/time_zone +mysql/time_zone_transition +mysql/time_zone_transition_type +mysql/time_zone_leap_second +mysql/innodb_table_stats +mysql/innodb_index_stats +mysql/slave_relay_log_info +mysql/slave_master_info +mysql/slave_worker_info +mysql/gtid_executed +mysql/server_cost +mysql/engine_cost +sys/sys_config +innodb_system +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; +NAME +# Success! +# Startup innodb_encryption_threads +SET GLOBAL innodb_encryption_threads=@start_global_value; +# Wait max 10 min for key encryption threads to encrypt all spaces +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; +NAME +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; +NAME +mysql/plugin +mysql/servers +mysql/help_topic +mysql/help_category +mysql/help_relation +mysql/help_keyword +mysql/time_zone_name +mysql/time_zone +mysql/time_zone_transition +mysql/time_zone_transition_type +mysql/time_zone_leap_second +mysql/innodb_table_stats +mysql/innodb_index_stats +mysql/slave_relay_log_info +mysql/slave_master_info +mysql/slave_worker_info +mysql/gtid_executed +mysql/server_cost +mysql/engine_cost +sys/sys_config +innodb_system +# Success! +# Restart mysqld --innodb_encrypt_tables=0 --innodb_encryption_threads=0 +# restart:--innodb-encryption-threads=0 --innodb-encrypt-tables=ONLINE_FROM_KEYRING_TO_UNENCRYPTED +SHOW VARIABLES LIKE 'innodb_encrypt%'; +Variable_name Value +innodb_encrypt_online_alter_logs OFF +innodb_encrypt_tables ONLINE_FROM_KEYRING_TO_UNENCRYPTED +innodb_encryption_rotate_key_age 15 +innodb_encryption_rotation_iops 100 +innodb_encryption_threads 0 +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; +NAME +mysql/plugin +mysql/servers +mysql/help_topic +mysql/help_category +mysql/help_relation +mysql/help_keyword +mysql/time_zone_name +mysql/time_zone +mysql/time_zone_transition +mysql/time_zone_transition_type +mysql/time_zone_leap_second +mysql/innodb_table_stats +mysql/innodb_index_stats +mysql/slave_relay_log_info +mysql/slave_master_info +mysql/slave_worker_info +mysql/gtid_executed +mysql/server_cost +mysql/engine_cost +sys/sys_config +innodb_system +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; +NAME diff --git a/mysql-test/suite/encryption/r/innodb_encryption_aborted_key_rotation.result b/mysql-test/suite/encryption/r/innodb_encryption_aborted_key_rotation.result new file mode 100644 index 000000000000..217da8558380 --- /dev/null +++ b/mysql-test/suite/encryption/r/innodb_encryption_aborted_key_rotation.result @@ -0,0 +1,66 @@ +SET GLOBAL innodb_encryption_threads=4; +CREATE TABLE t1 (id INT NOT NULL PRIMARY KEY, a VARCHAR(255)) ENGINE=InnoDB ENCRYPTION='KEYRING'; +create procedure innodb_insert_proc (repeat_count int) +begin +declare current_num int; +set current_num = 0; +while current_num < repeat_count do +insert into t1 values (current_num,repeat('foobar',42)); +set current_num = current_num + 1; +end while; +end// +commit; +set autocommit=0; +call innodb_insert_proc(30000); +commit; +set autocommit=1; +include/assert.inc [Make sure t1 is encrypted] +# Wait for all tables to get encrypted +# We want only first 100 pages to be rotated +SET GLOBAL debug="+d,rotate_only_first_100_pages_from_t1"; +include/assert.inc [Make sure re-encryption will happen per every key rotation] +include/assert.inc [Successful rotation of percona_innodb-0 to version 2] +# Table t1 should have min_key_version = 1 assigned and ROTATIONG_OR_FLUSHING=1 <= this means that only 100 pages +# have been rotatted. +# Disable rotation threads +SET GLOBAL innodb_encryption_threads = 0; +# Disable rotation of only first 100 pages +SET GLOBAL debug="-d,rotate_only_first_100_pages_from_t1"; +# Make sure that t1 is still encrypted +# t1 is only half rotatted, now we will check if the encryption can be completed after the restart +# restart:--innodb-encryption-threads=4 +# All tables should get encrypted. 21 + 1 - because INNODB_TABLESPACES_ENCRYPTION contains artificial table +# innodb_system +SELECT * FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION; +SPACE NAME ENCRYPTION_SCHEME KEYSERVER_REQUESTS MIN_KEY_VERSION CURRENT_KEY_VERSION KEY_ROTATION_PAGE_NUMBER KEY_ROTATION_MAX_PAGE_NUMBER CURRENT_KEY_ID ROTATING_OR_FLUSHING +2 mysql/plugin 1 0 2 2 NULL NULL 0 0 +3 mysql/servers 1 0 2 2 NULL NULL 0 0 +4 mysql/help_topic 1 0 2 2 NULL NULL 0 0 +5 mysql/help_category 1 0 2 2 NULL NULL 0 0 +6 mysql/help_relation 1 0 2 2 NULL NULL 0 0 +7 mysql/help_keyword 1 0 2 2 NULL NULL 0 0 +8 mysql/time_zone_name 1 0 2 2 NULL NULL 0 0 +9 mysql/time_zone 1 0 2 2 NULL NULL 0 0 +10 mysql/time_zone_transition 1 0 2 2 NULL NULL 0 0 +11 mysql/time_zone_transition_type 1 0 2 2 NULL NULL 0 0 +12 mysql/time_zone_leap_second 1 0 2 2 NULL NULL 0 0 +13 mysql/innodb_table_stats 1 0 2 2 NULL NULL 0 0 +14 mysql/innodb_index_stats 1 0 2 2 NULL NULL 0 0 +15 mysql/slave_relay_log_info 1 0 2 2 NULL NULL 0 0 +16 mysql/slave_master_info 1 0 2 2 NULL NULL 0 0 +17 mysql/slave_worker_info 1 0 2 2 NULL NULL 0 0 +18 mysql/gtid_executed 1 0 2 2 NULL NULL 0 0 +19 mysql/server_cost 1 0 2 2 NULL NULL 0 0 +20 mysql/engine_cost 1 0 2 2 NULL NULL 0 0 +21 sys/sys_config 1 0 2 2 NULL NULL 0 0 +23 test/t1 1 0 2 2 NULL NULL 0 0 +0 innodb_system 1 0 2 2 NULL NULL 0 0 +# Make sure t1 is encrypted +# All tables should get encrypted. 21 + 1 - because INNODB_TABLESPACES_ENCRYPTION contains artificial table +# innodb_system +SET GLOBAL innodb_encrypt_tables=ONLINE_FROM_KEYRING_TO_UNENCRYPTED; +# All tables should get decrypted, apart from t1. +SET GLOBAL innodb_encryption_threads=0; +SET GLOBAL innodb_encrypt_tables=ONLINE_TO_KEYRING; +DROP TABLE t1; +DROP PROCEDURE innodb_insert_proc; diff --git a/mysql-test/suite/encryption/r/innodb_encryption_aborted_key_rotation_mk.result b/mysql-test/suite/encryption/r/innodb_encryption_aborted_key_rotation_mk.result new file mode 100644 index 000000000000..c70476e10e4e --- /dev/null +++ b/mysql-test/suite/encryption/r/innodb_encryption_aborted_key_rotation_mk.result @@ -0,0 +1,66 @@ +SET GLOBAL innodb_encryption_threads=4; +CREATE TABLE t1 (id INT NOT NULL PRIMARY KEY, a VARCHAR(255)) ENGINE=InnoDB ENCRYPTION='Y' ENCRYPTION='KEYRING'; +create procedure innodb_insert_proc (repeat_count int) +begin +declare current_num int; +set current_num = 0; +while current_num < repeat_count do +insert into t1 values (current_num,repeat('foobar',42)); +set current_num = current_num + 1; +end while; +end// +commit; +set autocommit=0; +call innodb_insert_proc(30000); +commit; +set autocommit=1; +include/assert.inc [Make sure t1 is encrypted] +# Wait for all tables to get encrypted +# We want only first 100 pages to be rotated +SET GLOBAL debug="+d,rotate_only_first_100_pages_from_t1"; +include/assert.inc [Make sure re-encryption will happen per every key rotation] +include/assert.inc [Successful rotation of percona_innodb-0 to version 2] +# Table t1 should have min_key_version = 1 assigned and ROTATIONG_OR_FLUSHING=1 <= this means that only 100 pages +# have been rotatted. +# Disable rotation threads +SET GLOBAL innodb_encryption_threads = 0; +# Disable rotation of only first 100 pages +SET GLOBAL debug="-d,rotate_only_first_100_pages_from_t1"; +# Make sure that t1 is still encrypted +# t1 is only half rotatted, now we will check if the encryption can be completed after the restart +# restart:--innodb-encryption-threads=4 +# All tables should get encrypted. 21 + 1 - because INNODB_TABLESPACES_ENCRYPTION contains artificial table +# innodb_system +SELECT * FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION; +SPACE NAME ENCRYPTION_SCHEME KEYSERVER_REQUESTS MIN_KEY_VERSION CURRENT_KEY_VERSION KEY_ROTATION_PAGE_NUMBER KEY_ROTATION_MAX_PAGE_NUMBER CURRENT_KEY_ID ROTATING_OR_FLUSHING +2 mysql/plugin 1 0 2 2 NULL NULL 0 0 +3 mysql/servers 1 0 2 2 NULL NULL 0 0 +4 mysql/help_topic 1 0 2 2 NULL NULL 0 0 +5 mysql/help_category 1 0 2 2 NULL NULL 0 0 +6 mysql/help_relation 1 0 2 2 NULL NULL 0 0 +7 mysql/help_keyword 1 0 2 2 NULL NULL 0 0 +8 mysql/time_zone_name 1 0 2 2 NULL NULL 0 0 +9 mysql/time_zone 1 0 2 2 NULL NULL 0 0 +10 mysql/time_zone_transition 1 0 2 2 NULL NULL 0 0 +11 mysql/time_zone_transition_type 1 0 2 2 NULL NULL 0 0 +12 mysql/time_zone_leap_second 1 0 2 2 NULL NULL 0 0 +13 mysql/innodb_table_stats 1 0 2 2 NULL NULL 0 0 +14 mysql/innodb_index_stats 1 0 2 2 NULL NULL 0 0 +15 mysql/slave_relay_log_info 1 0 2 2 NULL NULL 0 0 +16 mysql/slave_master_info 1 0 2 2 NULL NULL 0 0 +17 mysql/slave_worker_info 1 0 2 2 NULL NULL 0 0 +18 mysql/gtid_executed 1 0 2 2 NULL NULL 0 0 +19 mysql/server_cost 1 0 2 2 NULL NULL 0 0 +20 mysql/engine_cost 1 0 2 2 NULL NULL 0 0 +21 sys/sys_config 1 0 2 2 NULL NULL 0 0 +23 test/t1 1 0 2 2 NULL NULL 0 0 +0 innodb_system 1 0 2 2 NULL NULL 0 0 +# Make sure t1 is encrypted +# All tables should get encrypted. 21 + 1 - because INNODB_TABLESPACES_ENCRYPTION contains artificial table +# innodb_system +SET GLOBAL innodb_encrypt_tables=ONLINE_FROM_KEYRING_TO_UNENCRYPTED; +# All tables should get decrypted, apart from t1. +SET GLOBAL innodb_encryption_threads=0; +SET GLOBAL innodb_encrypt_tables=ONLINE_TO_KEYRING; +DROP TABLE t1; +DROP PROCEDURE innodb_insert_proc; diff --git a/mysql-test/suite/encryption/r/innodb_encryption_aborted_key_rotation_mk_page_compressed.result b/mysql-test/suite/encryption/r/innodb_encryption_aborted_key_rotation_mk_page_compressed.result new file mode 100644 index 000000000000..572ff0d2fdac --- /dev/null +++ b/mysql-test/suite/encryption/r/innodb_encryption_aborted_key_rotation_mk_page_compressed.result @@ -0,0 +1,66 @@ +SET GLOBAL innodb_encryption_threads=4; +CREATE TABLE t1 (id INT NOT NULL PRIMARY KEY, a VARCHAR(255)) ENGINE=InnoDB ENCRYPTION='Y' COMPRESSION="zlib" ENCRYPTION='KEYRING'; +create procedure innodb_insert_proc (repeat_count int) +begin +declare current_num int; +set current_num = 0; +while current_num < repeat_count do +insert into t1 values (current_num,repeat('foobar',42)); +set current_num = current_num + 1; +end while; +end// +commit; +set autocommit=0; +call innodb_insert_proc(30000); +commit; +set autocommit=1; +include/assert.inc [Make sure t1 is encrypted] +# Wait for all tables to get encrypted +# We want only first 100 pages to be rotated +SET GLOBAL debug="+d,rotate_only_first_100_pages_from_t1"; +include/assert.inc [Make sure re-encryption will happen per every key rotation] +include/assert.inc [Successful rotation of percona_innodb-0 to version 2] +# Table t1 should have min_key_version = 1 assigned and ROTATIONG_OR_FLUSHING=1 <= this means that only 100 pages +# have been rotatted. +# Disable rotation threads +SET GLOBAL innodb_encryption_threads = 0; +# Disable rotation of only first 100 pages +SET GLOBAL debug="-d,rotate_only_first_100_pages_from_t1"; +# Make sure that t1 is still encrypted +# t1 is only half rotatted, now we will check if the encryption can be completed after the restart +# restart:--innodb-encryption-threads=4 +# All tables should get encrypted. 21 + 1 - because INNODB_TABLESPACES_ENCRYPTION contains artificial table +# innodb_system +SELECT * FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION; +SPACE NAME ENCRYPTION_SCHEME KEYSERVER_REQUESTS MIN_KEY_VERSION CURRENT_KEY_VERSION KEY_ROTATION_PAGE_NUMBER KEY_ROTATION_MAX_PAGE_NUMBER CURRENT_KEY_ID ROTATING_OR_FLUSHING +2 mysql/plugin 1 0 2 2 NULL NULL 0 0 +3 mysql/servers 1 0 2 2 NULL NULL 0 0 +4 mysql/help_topic 1 0 2 2 NULL NULL 0 0 +5 mysql/help_category 1 0 2 2 NULL NULL 0 0 +6 mysql/help_relation 1 0 2 2 NULL NULL 0 0 +7 mysql/help_keyword 1 0 2 2 NULL NULL 0 0 +8 mysql/time_zone_name 1 0 2 2 NULL NULL 0 0 +9 mysql/time_zone 1 0 2 2 NULL NULL 0 0 +10 mysql/time_zone_transition 1 0 2 2 NULL NULL 0 0 +11 mysql/time_zone_transition_type 1 0 2 2 NULL NULL 0 0 +12 mysql/time_zone_leap_second 1 0 2 2 NULL NULL 0 0 +13 mysql/innodb_table_stats 1 0 2 2 NULL NULL 0 0 +14 mysql/innodb_index_stats 1 0 2 2 NULL NULL 0 0 +15 mysql/slave_relay_log_info 1 0 2 2 NULL NULL 0 0 +16 mysql/slave_master_info 1 0 2 2 NULL NULL 0 0 +17 mysql/slave_worker_info 1 0 2 2 NULL NULL 0 0 +18 mysql/gtid_executed 1 0 2 2 NULL NULL 0 0 +19 mysql/server_cost 1 0 2 2 NULL NULL 0 0 +20 mysql/engine_cost 1 0 2 2 NULL NULL 0 0 +21 sys/sys_config 1 0 2 2 NULL NULL 0 0 +23 test/t1 1 0 2 2 NULL NULL 0 0 +0 innodb_system 1 0 2 2 NULL NULL 0 0 +# Make sure t1 is encrypted +# All tables should get encrypted. 21 + 1 - because INNODB_TABLESPACES_ENCRYPTION contains artificial table +# innodb_system +SET GLOBAL innodb_encrypt_tables=ONLINE_FROM_KEYRING_TO_UNENCRYPTED; +# All tables should get decrypted, apart from t1. +SET GLOBAL innodb_encryption_threads=0; +SET GLOBAL innodb_encrypt_tables=ONLINE_TO_KEYRING; +DROP TABLE t1; +DROP PROCEDURE innodb_insert_proc; diff --git a/mysql-test/suite/encryption/r/innodb_encryption_aborted_key_rotation_mk_row_compressed.result b/mysql-test/suite/encryption/r/innodb_encryption_aborted_key_rotation_mk_row_compressed.result new file mode 100644 index 000000000000..74779fe281b5 --- /dev/null +++ b/mysql-test/suite/encryption/r/innodb_encryption_aborted_key_rotation_mk_row_compressed.result @@ -0,0 +1,66 @@ +SET GLOBAL innodb_encryption_threads=4; +CREATE TABLE t1 (id INT NOT NULL PRIMARY KEY, a VARCHAR(255)) ENGINE=InnoDB ENCRYPTION='Y' row_format=compressed ENCRYPTION='KEYRING'; +create procedure innodb_insert_proc (repeat_count int) +begin +declare current_num int; +set current_num = 0; +while current_num < repeat_count do +insert into t1 values (current_num,repeat('foobar',42)); +set current_num = current_num + 1; +end while; +end// +commit; +set autocommit=0; +call innodb_insert_proc(30000); +commit; +set autocommit=1; +include/assert.inc [Make sure t1 is encrypted] +# Wait for all tables to get encrypted +# We want only first 100 pages to be rotated +SET GLOBAL debug="+d,rotate_only_first_100_pages_from_t1"; +include/assert.inc [Make sure re-encryption will happen per every key rotation] +include/assert.inc [Successful rotation of percona_innodb-0 to version 2] +# Table t1 should have min_key_version = 1 assigned and ROTATIONG_OR_FLUSHING=1 <= this means that only 100 pages +# have been rotatted. +# Disable rotation threads +SET GLOBAL innodb_encryption_threads = 0; +# Disable rotation of only first 100 pages +SET GLOBAL debug="-d,rotate_only_first_100_pages_from_t1"; +# Make sure that t1 is still encrypted +# t1 is only half rotatted, now we will check if the encryption can be completed after the restart +# restart:--innodb-encryption-threads=4 +# All tables should get encrypted. 21 + 1 - because INNODB_TABLESPACES_ENCRYPTION contains artificial table +# innodb_system +SELECT * FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION; +SPACE NAME ENCRYPTION_SCHEME KEYSERVER_REQUESTS MIN_KEY_VERSION CURRENT_KEY_VERSION KEY_ROTATION_PAGE_NUMBER KEY_ROTATION_MAX_PAGE_NUMBER CURRENT_KEY_ID ROTATING_OR_FLUSHING +2 mysql/plugin 1 0 2 2 NULL NULL 0 0 +3 mysql/servers 1 0 2 2 NULL NULL 0 0 +4 mysql/help_topic 1 0 2 2 NULL NULL 0 0 +5 mysql/help_category 1 0 2 2 NULL NULL 0 0 +6 mysql/help_relation 1 0 2 2 NULL NULL 0 0 +7 mysql/help_keyword 1 0 2 2 NULL NULL 0 0 +8 mysql/time_zone_name 1 0 2 2 NULL NULL 0 0 +9 mysql/time_zone 1 0 2 2 NULL NULL 0 0 +10 mysql/time_zone_transition 1 0 2 2 NULL NULL 0 0 +11 mysql/time_zone_transition_type 1 0 2 2 NULL NULL 0 0 +12 mysql/time_zone_leap_second 1 0 2 2 NULL NULL 0 0 +13 mysql/innodb_table_stats 1 0 2 2 NULL NULL 0 0 +14 mysql/innodb_index_stats 1 0 2 2 NULL NULL 0 0 +15 mysql/slave_relay_log_info 1 0 2 2 NULL NULL 0 0 +16 mysql/slave_master_info 1 0 2 2 NULL NULL 0 0 +17 mysql/slave_worker_info 1 0 2 2 NULL NULL 0 0 +18 mysql/gtid_executed 1 0 2 2 NULL NULL 0 0 +19 mysql/server_cost 1 0 2 2 NULL NULL 0 0 +20 mysql/engine_cost 1 0 2 2 NULL NULL 0 0 +21 sys/sys_config 1 0 2 2 NULL NULL 0 0 +23 test/t1 1 0 2 2 NULL NULL 0 0 +0 innodb_system 1 0 2 2 NULL NULL 0 0 +# Make sure t1 is encrypted +# All tables should get encrypted. 21 + 1 - because INNODB_TABLESPACES_ENCRYPTION contains artificial table +# innodb_system +SET GLOBAL innodb_encrypt_tables=ONLINE_FROM_KEYRING_TO_UNENCRYPTED; +# All tables should get decrypted, apart from t1. +SET GLOBAL innodb_encryption_threads=0; +SET GLOBAL innodb_encrypt_tables=ONLINE_TO_KEYRING; +DROP TABLE t1; +DROP PROCEDURE innodb_insert_proc; diff --git a/mysql-test/suite/encryption/r/innodb_encryption_aborted_key_rotation_page_compressed.result b/mysql-test/suite/encryption/r/innodb_encryption_aborted_key_rotation_page_compressed.result new file mode 100644 index 000000000000..953cb98bc04c --- /dev/null +++ b/mysql-test/suite/encryption/r/innodb_encryption_aborted_key_rotation_page_compressed.result @@ -0,0 +1,66 @@ +SET GLOBAL innodb_encryption_threads=4; +CREATE TABLE t1 (id INT NOT NULL PRIMARY KEY, a VARCHAR(255)) ENGINE=InnoDB COMPRESSION="zlib" ENCRYPTION='KEYRING'; +create procedure innodb_insert_proc (repeat_count int) +begin +declare current_num int; +set current_num = 0; +while current_num < repeat_count do +insert into t1 values (current_num,repeat('foobar',42)); +set current_num = current_num + 1; +end while; +end// +commit; +set autocommit=0; +call innodb_insert_proc(30000); +commit; +set autocommit=1; +include/assert.inc [Make sure t1 is encrypted] +# Wait for all tables to get encrypted +# We want only first 100 pages to be rotated +SET GLOBAL debug="+d,rotate_only_first_100_pages_from_t1"; +include/assert.inc [Make sure re-encryption will happen per every key rotation] +include/assert.inc [Successful rotation of percona_innodb-0 to version 2] +# Table t1 should have min_key_version = 1 assigned and ROTATIONG_OR_FLUSHING=1 <= this means that only 100 pages +# have been rotatted. +# Disable rotation threads +SET GLOBAL innodb_encryption_threads = 0; +# Disable rotation of only first 100 pages +SET GLOBAL debug="-d,rotate_only_first_100_pages_from_t1"; +# Make sure that t1 is still encrypted +# t1 is only half rotatted, now we will check if the encryption can be completed after the restart +# restart:--innodb-encryption-threads=4 +# All tables should get encrypted. 21 + 1 - because INNODB_TABLESPACES_ENCRYPTION contains artificial table +# innodb_system +SELECT * FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION; +SPACE NAME ENCRYPTION_SCHEME KEYSERVER_REQUESTS MIN_KEY_VERSION CURRENT_KEY_VERSION KEY_ROTATION_PAGE_NUMBER KEY_ROTATION_MAX_PAGE_NUMBER CURRENT_KEY_ID ROTATING_OR_FLUSHING +2 mysql/plugin 1 0 2 2 NULL NULL 0 0 +3 mysql/servers 1 0 2 2 NULL NULL 0 0 +4 mysql/help_topic 1 0 2 2 NULL NULL 0 0 +5 mysql/help_category 1 0 2 2 NULL NULL 0 0 +6 mysql/help_relation 1 0 2 2 NULL NULL 0 0 +7 mysql/help_keyword 1 0 2 2 NULL NULL 0 0 +8 mysql/time_zone_name 1 0 2 2 NULL NULL 0 0 +9 mysql/time_zone 1 0 2 2 NULL NULL 0 0 +10 mysql/time_zone_transition 1 0 2 2 NULL NULL 0 0 +11 mysql/time_zone_transition_type 1 0 2 2 NULL NULL 0 0 +12 mysql/time_zone_leap_second 1 0 2 2 NULL NULL 0 0 +13 mysql/innodb_table_stats 1 0 2 2 NULL NULL 0 0 +14 mysql/innodb_index_stats 1 0 2 2 NULL NULL 0 0 +15 mysql/slave_relay_log_info 1 0 2 2 NULL NULL 0 0 +16 mysql/slave_master_info 1 0 2 2 NULL NULL 0 0 +17 mysql/slave_worker_info 1 0 2 2 NULL NULL 0 0 +18 mysql/gtid_executed 1 0 2 2 NULL NULL 0 0 +19 mysql/server_cost 1 0 2 2 NULL NULL 0 0 +20 mysql/engine_cost 1 0 2 2 NULL NULL 0 0 +21 sys/sys_config 1 0 2 2 NULL NULL 0 0 +23 test/t1 1 0 2 2 NULL NULL 0 0 +0 innodb_system 1 0 2 2 NULL NULL 0 0 +# Make sure t1 is encrypted +# All tables should get encrypted. 21 + 1 - because INNODB_TABLESPACES_ENCRYPTION contains artificial table +# innodb_system +SET GLOBAL innodb_encrypt_tables=ONLINE_FROM_KEYRING_TO_UNENCRYPTED; +# All tables should get decrypted, apart from t1. +SET GLOBAL innodb_encryption_threads=0; +SET GLOBAL innodb_encrypt_tables=ONLINE_TO_KEYRING; +DROP TABLE t1; +DROP PROCEDURE innodb_insert_proc; diff --git a/mysql-test/suite/encryption/r/innodb_encryption_aborted_key_rotation_row_compressed.result b/mysql-test/suite/encryption/r/innodb_encryption_aborted_key_rotation_row_compressed.result new file mode 100644 index 000000000000..eb10d2f4df9a --- /dev/null +++ b/mysql-test/suite/encryption/r/innodb_encryption_aborted_key_rotation_row_compressed.result @@ -0,0 +1,66 @@ +SET GLOBAL innodb_encryption_threads=4; +CREATE TABLE t1 (id INT NOT NULL PRIMARY KEY, a VARCHAR(255)) ENGINE=InnoDB row_format=compressed ENCRYPTION='KEYRING'; +create procedure innodb_insert_proc (repeat_count int) +begin +declare current_num int; +set current_num = 0; +while current_num < repeat_count do +insert into t1 values (current_num,repeat('foobar',42)); +set current_num = current_num + 1; +end while; +end// +commit; +set autocommit=0; +call innodb_insert_proc(30000); +commit; +set autocommit=1; +include/assert.inc [Make sure t1 is encrypted] +# Wait for all tables to get encrypted +# We want only first 100 pages to be rotated +SET GLOBAL debug="+d,rotate_only_first_100_pages_from_t1"; +include/assert.inc [Make sure re-encryption will happen per every key rotation] +include/assert.inc [Successful rotation of percona_innodb-0 to version 2] +# Table t1 should have min_key_version = 1 assigned and ROTATIONG_OR_FLUSHING=1 <= this means that only 100 pages +# have been rotatted. +# Disable rotation threads +SET GLOBAL innodb_encryption_threads = 0; +# Disable rotation of only first 100 pages +SET GLOBAL debug="-d,rotate_only_first_100_pages_from_t1"; +# Make sure that t1 is still encrypted +# t1 is only half rotatted, now we will check if the encryption can be completed after the restart +# restart:--innodb-encryption-threads=4 +# All tables should get encrypted. 21 + 1 - because INNODB_TABLESPACES_ENCRYPTION contains artificial table +# innodb_system +SELECT * FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION; +SPACE NAME ENCRYPTION_SCHEME KEYSERVER_REQUESTS MIN_KEY_VERSION CURRENT_KEY_VERSION KEY_ROTATION_PAGE_NUMBER KEY_ROTATION_MAX_PAGE_NUMBER CURRENT_KEY_ID ROTATING_OR_FLUSHING +2 mysql/plugin 1 0 2 2 NULL NULL 0 0 +3 mysql/servers 1 0 2 2 NULL NULL 0 0 +4 mysql/help_topic 1 0 2 2 NULL NULL 0 0 +5 mysql/help_category 1 0 2 2 NULL NULL 0 0 +6 mysql/help_relation 1 0 2 2 NULL NULL 0 0 +7 mysql/help_keyword 1 0 2 2 NULL NULL 0 0 +8 mysql/time_zone_name 1 0 2 2 NULL NULL 0 0 +9 mysql/time_zone 1 0 2 2 NULL NULL 0 0 +10 mysql/time_zone_transition 1 0 2 2 NULL NULL 0 0 +11 mysql/time_zone_transition_type 1 0 2 2 NULL NULL 0 0 +12 mysql/time_zone_leap_second 1 0 2 2 NULL NULL 0 0 +13 mysql/innodb_table_stats 1 0 2 2 NULL NULL 0 0 +14 mysql/innodb_index_stats 1 0 2 2 NULL NULL 0 0 +15 mysql/slave_relay_log_info 1 0 2 2 NULL NULL 0 0 +16 mysql/slave_master_info 1 0 2 2 NULL NULL 0 0 +17 mysql/slave_worker_info 1 0 2 2 NULL NULL 0 0 +18 mysql/gtid_executed 1 0 2 2 NULL NULL 0 0 +19 mysql/server_cost 1 0 2 2 NULL NULL 0 0 +20 mysql/engine_cost 1 0 2 2 NULL NULL 0 0 +21 sys/sys_config 1 0 2 2 NULL NULL 0 0 +23 test/t1 1 0 2 2 NULL NULL 0 0 +0 innodb_system 1 0 2 2 NULL NULL 0 0 +# Make sure t1 is encrypted +# All tables should get encrypted. 21 + 1 - because INNODB_TABLESPACES_ENCRYPTION contains artificial table +# innodb_system +SET GLOBAL innodb_encrypt_tables=ONLINE_FROM_KEYRING_TO_UNENCRYPTED; +# All tables should get decrypted, apart from t1. +SET GLOBAL innodb_encryption_threads=0; +SET GLOBAL innodb_encrypt_tables=ONLINE_TO_KEYRING; +DROP TABLE t1; +DROP PROCEDURE innodb_insert_proc; diff --git a/mysql-test/suite/encryption/r/innodb_encryption_aborted_rotation.result b/mysql-test/suite/encryption/r/innodb_encryption_aborted_rotation.result new file mode 100644 index 000000000000..bc1411c097fc --- /dev/null +++ b/mysql-test/suite/encryption/r/innodb_encryption_aborted_rotation.result @@ -0,0 +1,138 @@ +# First we try rotation unencrypted => encrypted +CREATE TABLE t1 (id INT NOT NULL PRIMARY KEY, a VARCHAR(255)) ENGINE=InnoDB ; +create procedure innodb_insert_proc (repeat_count int) +begin +declare current_num int; +set current_num = 0; +while current_num < repeat_count do +insert into t1 values (current_num,repeat('foobar',42)); +set current_num = current_num + 1; +end while; +end// +commit; +set autocommit=0; +call innodb_insert_proc(30000); +commit; +set autocommit=1; +include/assert.inc [Make sure encryption is disabled] +include/assert.inc [Make sure t1 is unencrypted] +# We want only first 100 pages to be rotated +SET GLOBAL debug="+d,rotate_only_first_100_pages_from_t1"; +# Start rotation unnencrypted => encrypted (tables do not have crypt data stored in page 0) +SET GLOBAL innodb_encryption_threads = 4; +SET GLOBAL innodb_encrypt_tables=ON; +# Wait max 10 min for key encryption threads to encrypt all spaces +# Table t1 should have min_key_version = 0 assigned and ROTATIONG_OR_FLUSHING=1 <= this means that only 100 pages +# have been rotatted. +# Disable rotation threads +SET GLOBAL innodb_encryption_threads = 0; +# Disable rotation of only first 100 pages +SET GLOBAL debug="-d,rotate_only_first_100_pages_from_t1"; +# Make sure that t1 still contains foobar - as it is only encrypted in half +# unless originaly table was compressed or MK encrypted - then it does not +# make sense to check the table as table will not contain plaintext +# t1 is only half rotatted, now we will check if the encryption can be completed after the restart +# restart:--innodb-encrypt-tables=ON --innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=4 +# All tables should get encrypted. 21 + 1 - because INNODB_TABLESPACES_ENCRYPTION contains artificial table +# innodb_system +SELECT * FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION; +SPACE NAME ENCRYPTION_SCHEME KEYSERVER_REQUESTS MIN_KEY_VERSION CURRENT_KEY_VERSION KEY_ROTATION_PAGE_NUMBER KEY_ROTATION_MAX_PAGE_NUMBER CURRENT_KEY_ID ROTATING_OR_FLUSHING +2 mysql/plugin 1 0 1 1 NULL NULL 0 0 +3 mysql/servers 1 0 1 1 NULL NULL 0 0 +4 mysql/help_topic 1 0 1 1 NULL NULL 0 0 +5 mysql/help_category 1 0 1 1 NULL NULL 0 0 +6 mysql/help_relation 1 0 1 1 NULL NULL 0 0 +7 mysql/help_keyword 1 0 1 1 NULL NULL 0 0 +8 mysql/time_zone_name 1 0 1 1 NULL NULL 0 0 +9 mysql/time_zone 1 0 1 1 NULL NULL 0 0 +10 mysql/time_zone_transition 1 0 1 1 NULL NULL 0 0 +11 mysql/time_zone_transition_type 1 0 1 1 NULL NULL 0 0 +12 mysql/time_zone_leap_second 1 0 1 1 NULL NULL 0 0 +13 mysql/innodb_table_stats 1 0 1 1 NULL NULL 0 0 +14 mysql/innodb_index_stats 1 0 1 1 NULL NULL 0 0 +15 mysql/slave_relay_log_info 1 0 1 1 NULL NULL 0 0 +16 mysql/slave_master_info 1 0 1 1 NULL NULL 0 0 +17 mysql/slave_worker_info 1 0 1 1 NULL NULL 0 0 +18 mysql/gtid_executed 1 0 1 1 NULL NULL 0 0 +19 mysql/server_cost 1 0 1 1 NULL NULL 0 0 +20 mysql/engine_cost 1 0 1 1 NULL NULL 0 0 +21 sys/sys_config 1 0 1 1 NULL NULL 0 0 +23 test/t1 1 0 1 1 NULL NULL 0 0 +0 innodb_system 1 0 1 1 NULL NULL 0 0 +# Make sure t1 is encrypted +# Now we try rotation encrypted => unencrypted +# Enable rotation of only first 100 pages +SET GLOBAL debug="+d,rotate_only_first_100_pages_from_t1"; +SET GLOBAL innodb_encrypt_tables=OFF; +# Table t1 should have min_key_version = 1 assigned and ROTATING_OR_FLUSHING=1 <= this means that only 100 pages +# have been rotatted. +# Disable rotation threads +SET GLOBAL innodb_encryption_threads = 0; +# Disable rotation of only first 100 pages +SET GLOBAL debug="-d,rotate_only_first_100_pages_from_t1"; +# Make sure that t1 contains foobar - as it is only decrypted in half +# t1 is only half rotatted, now we will check if the decryption can be completed after the restart +# restart:--innodb-encrypt-tables=OFF --innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=4 +# Make sure that t1 contains foobar - as it is decrypted +# Now we try rotation => unencrypted => encrypted (now tables have crypt data in page 0) +# Enable rotation of only first 100 pages +SET GLOBAL debug="+d,rotate_only_first_100_pages_from_t1"; +SET GLOBAL innodb_encrypt_tables=ON; +# Table t1 should have min_key_version = 0 assigned and ROTATING_OR_FLUSHING=1 <= this means that only 100 pages +# have been rotatted. +# Disable rotation threads +SET GLOBAL innodb_encryption_threads = 0; +# Disable rotation of only first 100 pages +SET GLOBAL debug="-d,rotate_only_first_100_pages_from_t1"; +# Make sure that t1 contains foobar - as it is only encrypted in half +# t1 is only half rotatted, now we will check if the decryption can be completed after the restart +# restart:--innodb-encrypt-tables=ON --innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=4 +# Make sure that t1 does not contain foobar - as it is encrypted +# After table has been rotated there is update to DD and after that +# there is update to page0 of the table. When a crash occures after DD update we will go out of sync with table's +# flags stored in page 0 of the table. Server discover that and puts a warning into the error log. page0 should get +# updated correctly after the restart. Server will discover that the rotation of the table has not been completed +# and will update page 0. +# In order to check this behavior we will first rotate encrypted=>unencrypted and we will make server commit suicide +# after DD update and before page 0 update. +SET GLOBAL debug="+d,crash_on_t1_flush_after_dd_update"; +SET GLOBAL innodb_encrypt_tables=OFF; +# Make sure that t1 has been decrypted +# First restart the server after crash so any redo logs for t1 were proceed. If there are any logs available +# t1 will be opened without validating idb file to DD. +# restart:--innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=0 +SET GLOBAL debug="-d,crash_on_t1_flush_after_dd_update"; +# Now restart the server and select from t1. Validation of t1's flags should proceed. +# It should be discovered that there is mismatch of flags in t1. However it shoud be possible to use +# the table. There should be a warning message in the error log file. +# restart:--innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=0 --log-error=/home/rob/git/5.7_rotated_tablespaces_bld/mysql-test/var/tmp/my_restart.err +SELECT COUNT(1) FROM t1; +COUNT(1) +30000 +# Restart and finish up the rotation +# restart:--innodb-encrypt-tables=OFF --innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=4 +# restart:--innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=0 --log-error=/home/rob/git/5.7_rotated_tablespaces_bld/mysql-test/var/tmp/my_restart.err +SELECT COUNT(1) FROM t1; +COUNT(1) +30000 +# Now we need to test the rotation unencrypted=>encrypted, when we get a crash after all pages +# got rotated and DD was updated but before updating page 0 +# restart:--innodb-encrypt-tables=ON --innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=0 +SET GLOBAL debug="+d,crash_on_t1_flush_after_dd_update"; +SET GLOBAL innodb_encryption_threads=4; +# First restart the server after crash so any redo logs for t1 were proceed. If there are any logs available +# t1 will be opened without validating idb file to DD. +# restart:--innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=0 +SET GLOBAL debug="-d,crash_on_t1_flush_after_dd_update"; +# Make sure that t1 has been encrypted +# Now start the server and select from t1. Validation of t1's flags should proceed. +# It should be discovered that there is mismatch of flags in t1. However it shoud be possible to use +# the table. There should be a warning message in the error log file. +# restart:--innodb-encryption-threads=0 --log-error=/home/rob/git/5.7_rotated_tablespaces_bld/mysql-test/var/tmp/my_restart.err --loose-keyring_file_data=/home/rob/git/5.7_rotated_tablespaces_bld/mysql-test/var/tmp/mysecret_keyring --early-plugin-load=keyring_file=keyring_file.so +SELECT COUNT(1) FROM t1; +COUNT(1) +30000 +# Restart and finish up the rotation +# restart:--innodb-encrypt-tables=ON --innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=4 +DROP TABLE t1; +DROP PROCEDURE innodb_insert_proc; diff --git a/mysql-test/suite/encryption/r/innodb_encryption_aborted_rotation_mk_page_compressed.result b/mysql-test/suite/encryption/r/innodb_encryption_aborted_rotation_mk_page_compressed.result new file mode 100644 index 000000000000..74a43a0edeed --- /dev/null +++ b/mysql-test/suite/encryption/r/innodb_encryption_aborted_rotation_mk_page_compressed.result @@ -0,0 +1,138 @@ +# First we try rotation unencrypted => encrypted +CREATE TABLE t1 (id INT NOT NULL PRIMARY KEY, a VARCHAR(255)) ENGINE=InnoDB COMPRESSION="zlib" ENCRYPTION='Y'; +create procedure innodb_insert_proc (repeat_count int) +begin +declare current_num int; +set current_num = 0; +while current_num < repeat_count do +insert into t1 values (current_num,repeat('foobar',42)); +set current_num = current_num + 1; +end while; +end// +commit; +set autocommit=0; +call innodb_insert_proc(30000); +commit; +set autocommit=1; +include/assert.inc [Make sure encryption is disabled] +include/assert.inc [Make sure t1 is encrypted] +# We want only first 100 pages to be rotated +SET GLOBAL debug="+d,rotate_only_first_100_pages_from_t1"; +# Start rotation unnencrypted => encrypted (tables do not have crypt data stored in page 0) +SET GLOBAL innodb_encryption_threads = 4; +SET GLOBAL innodb_encrypt_tables=ON; +# Wait max 10 min for key encryption threads to encrypt all spaces +# Table t1 should have min_key_version = 0 assigned and ROTATIONG_OR_FLUSHING=1 <= this means that only 100 pages +# have been rotatted. +# Disable rotation threads +SET GLOBAL innodb_encryption_threads = 0; +# Disable rotation of only first 100 pages +SET GLOBAL debug="-d,rotate_only_first_100_pages_from_t1"; +# Make sure that t1 still contains foobar - as it is only encrypted in half +# unless originaly table was compressed or MK encrypted - then it does not +# make sense to check the table as table will not contain plaintext +# t1 is only half rotatted, now we will check if the encryption can be completed after the restart +# restart:--innodb-encrypt-tables=ON --innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=4 +# All tables should get encrypted. 21 + 1 - because INNODB_TABLESPACES_ENCRYPTION contains artificial table +# innodb_system +SELECT * FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION; +SPACE NAME ENCRYPTION_SCHEME KEYSERVER_REQUESTS MIN_KEY_VERSION CURRENT_KEY_VERSION KEY_ROTATION_PAGE_NUMBER KEY_ROTATION_MAX_PAGE_NUMBER CURRENT_KEY_ID ROTATING_OR_FLUSHING +2 mysql/plugin 1 0 1 1 NULL NULL 0 0 +3 mysql/servers 1 0 1 1 NULL NULL 0 0 +4 mysql/help_topic 1 0 1 1 NULL NULL 0 0 +5 mysql/help_category 1 0 1 1 NULL NULL 0 0 +6 mysql/help_relation 1 0 1 1 NULL NULL 0 0 +7 mysql/help_keyword 1 0 1 1 NULL NULL 0 0 +8 mysql/time_zone_name 1 0 1 1 NULL NULL 0 0 +9 mysql/time_zone 1 0 1 1 NULL NULL 0 0 +10 mysql/time_zone_transition 1 0 1 1 NULL NULL 0 0 +11 mysql/time_zone_transition_type 1 0 1 1 NULL NULL 0 0 +12 mysql/time_zone_leap_second 1 0 1 1 NULL NULL 0 0 +13 mysql/innodb_table_stats 1 0 1 1 NULL NULL 0 0 +14 mysql/innodb_index_stats 1 0 1 1 NULL NULL 0 0 +15 mysql/slave_relay_log_info 1 0 1 1 NULL NULL 0 0 +16 mysql/slave_master_info 1 0 1 1 NULL NULL 0 0 +17 mysql/slave_worker_info 1 0 1 1 NULL NULL 0 0 +18 mysql/gtid_executed 1 0 1 1 NULL NULL 0 0 +19 mysql/server_cost 1 0 1 1 NULL NULL 0 0 +20 mysql/engine_cost 1 0 1 1 NULL NULL 0 0 +21 sys/sys_config 1 0 1 1 NULL NULL 0 0 +23 test/t1 1 0 1 1 NULL NULL 0 0 +0 innodb_system 1 0 1 1 NULL NULL 0 0 +# Make sure t1 is encrypted +# Now we try rotation encrypted => unencrypted +# Enable rotation of only first 100 pages +SET GLOBAL debug="+d,rotate_only_first_100_pages_from_t1"; +SET GLOBAL innodb_encrypt_tables=OFF; +# Table t1 should have min_key_version = 1 assigned and ROTATING_OR_FLUSHING=1 <= this means that only 100 pages +# have been rotatted. +# Disable rotation threads +SET GLOBAL innodb_encryption_threads = 0; +# Disable rotation of only first 100 pages +SET GLOBAL debug="-d,rotate_only_first_100_pages_from_t1"; +# Make sure that t1 contains foobar - as it is only decrypted in half +# t1 is only half rotatted, now we will check if the decryption can be completed after the restart +# restart:--innodb-encrypt-tables=OFF --innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=4 +# Make sure that t1 contains foobar - as it is decrypted +# Now we try rotation => unencrypted => encrypted (now tables have crypt data in page 0) +# Enable rotation of only first 100 pages +SET GLOBAL debug="+d,rotate_only_first_100_pages_from_t1"; +SET GLOBAL innodb_encrypt_tables=ON; +# Table t1 should have min_key_version = 0 assigned and ROTATING_OR_FLUSHING=1 <= this means that only 100 pages +# have been rotatted. +# Disable rotation threads +SET GLOBAL innodb_encryption_threads = 0; +# Disable rotation of only first 100 pages +SET GLOBAL debug="-d,rotate_only_first_100_pages_from_t1"; +# Make sure that t1 contains foobar - as it is only encrypted in half +# t1 is only half rotatted, now we will check if the decryption can be completed after the restart +# restart:--innodb-encrypt-tables=ON --innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=4 +# Make sure that t1 does not contain foobar - as it is encrypted +# After table has been rotated there is update to DD and after that +# there is update to page0 of the table. When a crash occures after DD update we will go out of sync with table's +# flags stored in page 0 of the table. Server discover that and puts a warning into the error log. page0 should get +# updated correctly after the restart. Server will discover that the rotation of the table has not been completed +# and will update page 0. +# In order to check this behavior we will first rotate encrypted=>unencrypted and we will make server commit suicide +# after DD update and before page 0 update. +SET GLOBAL debug="+d,crash_on_t1_flush_after_dd_update"; +SET GLOBAL innodb_encrypt_tables=OFF; +# Make sure that t1 has been decrypted +# First restart the server after crash so any redo logs for t1 were proceed. If there are any logs available +# t1 will be opened without validating idb file to DD. +# restart:--innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=0 +SET GLOBAL debug="-d,crash_on_t1_flush_after_dd_update"; +# Now restart the server and select from t1. Validation of t1's flags should proceed. +# It should be discovered that there is mismatch of flags in t1. However it shoud be possible to use +# the table. There should be a warning message in the error log file. +# restart:--innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=0 --log-error=/home/rob/git/5.7_rotated_tablespaces_bld/mysql-test/var/tmp/my_restart.err +SELECT COUNT(1) FROM t1; +COUNT(1) +30000 +# Restart and finish up the rotation +# restart:--innodb-encrypt-tables=OFF --innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=4 +# restart:--innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=0 --log-error=/home/rob/git/5.7_rotated_tablespaces_bld/mysql-test/var/tmp/my_restart.err +SELECT COUNT(1) FROM t1; +COUNT(1) +30000 +# Now we need to test the rotation unencrypted=>encrypted, when we get a crash after all pages +# got rotated and DD was updated but before updating page 0 +# restart:--innodb-encrypt-tables=ON --innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=0 +SET GLOBAL debug="+d,crash_on_t1_flush_after_dd_update"; +SET GLOBAL innodb_encryption_threads=4; +# First restart the server after crash so any redo logs for t1 were proceed. If there are any logs available +# t1 will be opened without validating idb file to DD. +# restart:--innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=0 +SET GLOBAL debug="-d,crash_on_t1_flush_after_dd_update"; +# Make sure that t1 has been encrypted +# Now start the server and select from t1. Validation of t1's flags should proceed. +# It should be discovered that there is mismatch of flags in t1. However it shoud be possible to use +# the table. There should be a warning message in the error log file. +# restart:--innodb-encryption-threads=0 --log-error=/home/rob/git/5.7_rotated_tablespaces_bld/mysql-test/var/tmp/my_restart.err --loose-keyring_file_data=/home/rob/git/5.7_rotated_tablespaces_bld/mysql-test/var/tmp/mysecret_keyring --early-plugin-load=keyring_file=keyring_file.so +SELECT COUNT(1) FROM t1; +COUNT(1) +30000 +# Restart and finish up the rotation +# restart:--innodb-encrypt-tables=ON --innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=4 +DROP TABLE t1; +DROP PROCEDURE innodb_insert_proc; diff --git a/mysql-test/suite/encryption/r/innodb_encryption_aborted_rotation_page_compressed.result b/mysql-test/suite/encryption/r/innodb_encryption_aborted_rotation_page_compressed.result new file mode 100644 index 000000000000..b7b984f1015c --- /dev/null +++ b/mysql-test/suite/encryption/r/innodb_encryption_aborted_rotation_page_compressed.result @@ -0,0 +1,138 @@ +# First we try rotation unencrypted => encrypted +CREATE TABLE t1 (id INT NOT NULL PRIMARY KEY, a VARCHAR(255)) ENGINE=InnoDB COMPRESSION="zlib"; +create procedure innodb_insert_proc (repeat_count int) +begin +declare current_num int; +set current_num = 0; +while current_num < repeat_count do +insert into t1 values (current_num,repeat('foobar',42)); +set current_num = current_num + 1; +end while; +end// +commit; +set autocommit=0; +call innodb_insert_proc(30000); +commit; +set autocommit=1; +include/assert.inc [Make sure encryption is disabled] +include/assert.inc [Make sure t1 is unencrypted] +# We want only first 100 pages to be rotated +SET GLOBAL debug="+d,rotate_only_first_100_pages_from_t1"; +# Start rotation unnencrypted => encrypted (tables do not have crypt data stored in page 0) +SET GLOBAL innodb_encryption_threads = 4; +SET GLOBAL innodb_encrypt_tables=ON; +# Wait max 10 min for key encryption threads to encrypt all spaces +# Table t1 should have min_key_version = 0 assigned and ROTATIONG_OR_FLUSHING=1 <= this means that only 100 pages +# have been rotatted. +# Disable rotation threads +SET GLOBAL innodb_encryption_threads = 0; +# Disable rotation of only first 100 pages +SET GLOBAL debug="-d,rotate_only_first_100_pages_from_t1"; +# Make sure that t1 still contains foobar - as it is only encrypted in half +# unless originaly table was compressed or MK encrypted - then it does not +# make sense to check the table as table will not contain plaintext +# t1 is only half rotatted, now we will check if the encryption can be completed after the restart +# restart:--innodb-encrypt-tables=ON --innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=4 +# All tables should get encrypted. 21 + 1 - because INNODB_TABLESPACES_ENCRYPTION contains artificial table +# innodb_system +SELECT * FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION; +SPACE NAME ENCRYPTION_SCHEME KEYSERVER_REQUESTS MIN_KEY_VERSION CURRENT_KEY_VERSION KEY_ROTATION_PAGE_NUMBER KEY_ROTATION_MAX_PAGE_NUMBER CURRENT_KEY_ID ROTATING_OR_FLUSHING +2 mysql/plugin 1 0 1 1 NULL NULL 0 0 +3 mysql/servers 1 0 1 1 NULL NULL 0 0 +4 mysql/help_topic 1 0 1 1 NULL NULL 0 0 +5 mysql/help_category 1 0 1 1 NULL NULL 0 0 +6 mysql/help_relation 1 0 1 1 NULL NULL 0 0 +7 mysql/help_keyword 1 0 1 1 NULL NULL 0 0 +8 mysql/time_zone_name 1 0 1 1 NULL NULL 0 0 +9 mysql/time_zone 1 0 1 1 NULL NULL 0 0 +10 mysql/time_zone_transition 1 0 1 1 NULL NULL 0 0 +11 mysql/time_zone_transition_type 1 0 1 1 NULL NULL 0 0 +12 mysql/time_zone_leap_second 1 0 1 1 NULL NULL 0 0 +13 mysql/innodb_table_stats 1 0 1 1 NULL NULL 0 0 +14 mysql/innodb_index_stats 1 0 1 1 NULL NULL 0 0 +15 mysql/slave_relay_log_info 1 0 1 1 NULL NULL 0 0 +16 mysql/slave_master_info 1 0 1 1 NULL NULL 0 0 +17 mysql/slave_worker_info 1 0 1 1 NULL NULL 0 0 +18 mysql/gtid_executed 1 0 1 1 NULL NULL 0 0 +19 mysql/server_cost 1 0 1 1 NULL NULL 0 0 +20 mysql/engine_cost 1 0 1 1 NULL NULL 0 0 +21 sys/sys_config 1 0 1 1 NULL NULL 0 0 +23 test/t1 1 0 1 1 NULL NULL 0 0 +0 innodb_system 1 0 1 1 NULL NULL 0 0 +# Make sure t1 is encrypted +# Now we try rotation encrypted => unencrypted +# Enable rotation of only first 100 pages +SET GLOBAL debug="+d,rotate_only_first_100_pages_from_t1"; +SET GLOBAL innodb_encrypt_tables=OFF; +# Table t1 should have min_key_version = 1 assigned and ROTATING_OR_FLUSHING=1 <= this means that only 100 pages +# have been rotatted. +# Disable rotation threads +SET GLOBAL innodb_encryption_threads = 0; +# Disable rotation of only first 100 pages +SET GLOBAL debug="-d,rotate_only_first_100_pages_from_t1"; +# Make sure that t1 contains foobar - as it is only decrypted in half +# t1 is only half rotatted, now we will check if the decryption can be completed after the restart +# restart:--innodb-encrypt-tables=OFF --innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=4 +# Make sure that t1 contains foobar - as it is decrypted +# Now we try rotation => unencrypted => encrypted (now tables have crypt data in page 0) +# Enable rotation of only first 100 pages +SET GLOBAL debug="+d,rotate_only_first_100_pages_from_t1"; +SET GLOBAL innodb_encrypt_tables=ON; +# Table t1 should have min_key_version = 0 assigned and ROTATING_OR_FLUSHING=1 <= this means that only 100 pages +# have been rotatted. +# Disable rotation threads +SET GLOBAL innodb_encryption_threads = 0; +# Disable rotation of only first 100 pages +SET GLOBAL debug="-d,rotate_only_first_100_pages_from_t1"; +# Make sure that t1 contains foobar - as it is only encrypted in half +# t1 is only half rotatted, now we will check if the decryption can be completed after the restart +# restart:--innodb-encrypt-tables=ON --innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=4 +# Make sure that t1 does not contain foobar - as it is encrypted +# After table has been rotated there is update to DD and after that +# there is update to page0 of the table. When a crash occures after DD update we will go out of sync with table's +# flags stored in page 0 of the table. Server discover that and puts a warning into the error log. page0 should get +# updated correctly after the restart. Server will discover that the rotation of the table has not been completed +# and will update page 0. +# In order to check this behavior we will first rotate encrypted=>unencrypted and we will make server commit suicide +# after DD update and before page 0 update. +SET GLOBAL debug="+d,crash_on_t1_flush_after_dd_update"; +SET GLOBAL innodb_encrypt_tables=OFF; +# Make sure that t1 has been decrypted +# First restart the server after crash so any redo logs for t1 were proceed. If there are any logs available +# t1 will be opened without validating idb file to DD. +# restart:--innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=0 +SET GLOBAL debug="-d,crash_on_t1_flush_after_dd_update"; +# Now restart the server and select from t1. Validation of t1's flags should proceed. +# It should be discovered that there is mismatch of flags in t1. However it shoud be possible to use +# the table. There should be a warning message in the error log file. +# restart:--innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=0 --log-error=/home/rob/git/5.7_rotated_tablespaces_bld/mysql-test/var/tmp/my_restart.err +SELECT COUNT(1) FROM t1; +COUNT(1) +30000 +# Restart and finish up the rotation +# restart:--innodb-encrypt-tables=OFF --innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=4 +# restart:--innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=0 --log-error=/home/rob/git/5.7_rotated_tablespaces_bld/mysql-test/var/tmp/my_restart.err +SELECT COUNT(1) FROM t1; +COUNT(1) +30000 +# Now we need to test the rotation unencrypted=>encrypted, when we get a crash after all pages +# got rotated and DD was updated but before updating page 0 +# restart:--innodb-encrypt-tables=ON --innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=0 +SET GLOBAL debug="+d,crash_on_t1_flush_after_dd_update"; +SET GLOBAL innodb_encryption_threads=4; +# First restart the server after crash so any redo logs for t1 were proceed. If there are any logs available +# t1 will be opened without validating idb file to DD. +# restart:--innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=0 +SET GLOBAL debug="-d,crash_on_t1_flush_after_dd_update"; +# Make sure that t1 has been encrypted +# Now start the server and select from t1. Validation of t1's flags should proceed. +# It should be discovered that there is mismatch of flags in t1. However it shoud be possible to use +# the table. There should be a warning message in the error log file. +# restart:--innodb-encryption-threads=0 --log-error=/home/rob/git/5.7_rotated_tablespaces_bld/mysql-test/var/tmp/my_restart.err --loose-keyring_file_data=/home/rob/git/5.7_rotated_tablespaces_bld/mysql-test/var/tmp/mysecret_keyring --early-plugin-load=keyring_file=keyring_file.so +SELECT COUNT(1) FROM t1; +COUNT(1) +30000 +# Restart and finish up the rotation +# restart:--innodb-encrypt-tables=ON --innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=4 +DROP TABLE t1; +DROP PROCEDURE innodb_insert_proc; diff --git a/mysql-test/suite/encryption/r/innodb_encryption_aborted_rotation_row_compressed.result b/mysql-test/suite/encryption/r/innodb_encryption_aborted_rotation_row_compressed.result new file mode 100644 index 000000000000..bfda40f5226d --- /dev/null +++ b/mysql-test/suite/encryption/r/innodb_encryption_aborted_rotation_row_compressed.result @@ -0,0 +1,138 @@ +# First we try rotation unencrypted => encrypted +CREATE TABLE t1 (id INT NOT NULL PRIMARY KEY, a VARCHAR(255)) ENGINE=InnoDB row_format=compressed; +create procedure innodb_insert_proc (repeat_count int) +begin +declare current_num int; +set current_num = 0; +while current_num < repeat_count do +insert into t1 values (current_num,repeat('foobar',42)); +set current_num = current_num + 1; +end while; +end// +commit; +set autocommit=0; +call innodb_insert_proc(30000); +commit; +set autocommit=1; +include/assert.inc [Make sure encryption is disabled] +include/assert.inc [Make sure t1 is unencrypted] +# We want only first 100 pages to be rotated +SET GLOBAL debug="+d,rotate_only_first_100_pages_from_t1"; +# Start rotation unnencrypted => encrypted (tables do not have crypt data stored in page 0) +SET GLOBAL innodb_encryption_threads = 4; +SET GLOBAL innodb_encrypt_tables=ON; +# Wait max 10 min for key encryption threads to encrypt all spaces +# Table t1 should have min_key_version = 0 assigned and ROTATIONG_OR_FLUSHING=1 <= this means that only 100 pages +# have been rotatted. +# Disable rotation threads +SET GLOBAL innodb_encryption_threads = 0; +# Disable rotation of only first 100 pages +SET GLOBAL debug="-d,rotate_only_first_100_pages_from_t1"; +# Make sure that t1 still contains foobar - as it is only encrypted in half +# unless originaly table was compressed or MK encrypted - then it does not +# make sense to check the table as table will not contain plaintext +# t1 is only half rotatted, now we will check if the encryption can be completed after the restart +# restart:--innodb-encrypt-tables=ON --innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=4 +# All tables should get encrypted. 21 + 1 - because INNODB_TABLESPACES_ENCRYPTION contains artificial table +# innodb_system +SELECT * FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION; +SPACE NAME ENCRYPTION_SCHEME KEYSERVER_REQUESTS MIN_KEY_VERSION CURRENT_KEY_VERSION KEY_ROTATION_PAGE_NUMBER KEY_ROTATION_MAX_PAGE_NUMBER CURRENT_KEY_ID ROTATING_OR_FLUSHING +2 mysql/plugin 1 0 1 1 NULL NULL 0 0 +3 mysql/servers 1 0 1 1 NULL NULL 0 0 +4 mysql/help_topic 1 0 1 1 NULL NULL 0 0 +5 mysql/help_category 1 0 1 1 NULL NULL 0 0 +6 mysql/help_relation 1 0 1 1 NULL NULL 0 0 +7 mysql/help_keyword 1 0 1 1 NULL NULL 0 0 +8 mysql/time_zone_name 1 0 1 1 NULL NULL 0 0 +9 mysql/time_zone 1 0 1 1 NULL NULL 0 0 +10 mysql/time_zone_transition 1 0 1 1 NULL NULL 0 0 +11 mysql/time_zone_transition_type 1 0 1 1 NULL NULL 0 0 +12 mysql/time_zone_leap_second 1 0 1 1 NULL NULL 0 0 +13 mysql/innodb_table_stats 1 0 1 1 NULL NULL 0 0 +14 mysql/innodb_index_stats 1 0 1 1 NULL NULL 0 0 +15 mysql/slave_relay_log_info 1 0 1 1 NULL NULL 0 0 +16 mysql/slave_master_info 1 0 1 1 NULL NULL 0 0 +17 mysql/slave_worker_info 1 0 1 1 NULL NULL 0 0 +18 mysql/gtid_executed 1 0 1 1 NULL NULL 0 0 +19 mysql/server_cost 1 0 1 1 NULL NULL 0 0 +20 mysql/engine_cost 1 0 1 1 NULL NULL 0 0 +21 sys/sys_config 1 0 1 1 NULL NULL 0 0 +23 test/t1 1 0 1 1 NULL NULL 0 0 +0 innodb_system 1 0 1 1 NULL NULL 0 0 +# Make sure t1 is encrypted +# Now we try rotation encrypted => unencrypted +# Enable rotation of only first 100 pages +SET GLOBAL debug="+d,rotate_only_first_100_pages_from_t1"; +SET GLOBAL innodb_encrypt_tables=OFF; +# Table t1 should have min_key_version = 1 assigned and ROTATING_OR_FLUSHING=1 <= this means that only 100 pages +# have been rotatted. +# Disable rotation threads +SET GLOBAL innodb_encryption_threads = 0; +# Disable rotation of only first 100 pages +SET GLOBAL debug="-d,rotate_only_first_100_pages_from_t1"; +# Make sure that t1 contains foobar - as it is only decrypted in half +# t1 is only half rotatted, now we will check if the decryption can be completed after the restart +# restart:--innodb-encrypt-tables=OFF --innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=4 +# Make sure that t1 contains foobar - as it is decrypted +# Now we try rotation => unencrypted => encrypted (now tables have crypt data in page 0) +# Enable rotation of only first 100 pages +SET GLOBAL debug="+d,rotate_only_first_100_pages_from_t1"; +SET GLOBAL innodb_encrypt_tables=ON; +# Table t1 should have min_key_version = 0 assigned and ROTATING_OR_FLUSHING=1 <= this means that only 100 pages +# have been rotatted. +# Disable rotation threads +SET GLOBAL innodb_encryption_threads = 0; +# Disable rotation of only first 100 pages +SET GLOBAL debug="-d,rotate_only_first_100_pages_from_t1"; +# Make sure that t1 contains foobar - as it is only encrypted in half +# t1 is only half rotatted, now we will check if the decryption can be completed after the restart +# restart:--innodb-encrypt-tables=ON --innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=4 +# Make sure that t1 does not contain foobar - as it is encrypted +# After table has been rotated there is update to DD and after that +# there is update to page0 of the table. When a crash occures after DD update we will go out of sync with table's +# flags stored in page 0 of the table. Server discover that and puts a warning into the error log. page0 should get +# updated correctly after the restart. Server will discover that the rotation of the table has not been completed +# and will update page 0. +# In order to check this behavior we will first rotate encrypted=>unencrypted and we will make server commit suicide +# after DD update and before page 0 update. +SET GLOBAL debug="+d,crash_on_t1_flush_after_dd_update"; +SET GLOBAL innodb_encrypt_tables=OFF; +# Make sure that t1 has been decrypted +# First restart the server after crash so any redo logs for t1 were proceed. If there are any logs available +# t1 will be opened without validating idb file to DD. +# restart:--innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=0 +SET GLOBAL debug="-d,crash_on_t1_flush_after_dd_update"; +# Now restart the server and select from t1. Validation of t1's flags should proceed. +# It should be discovered that there is mismatch of flags in t1. However it shoud be possible to use +# the table. There should be a warning message in the error log file. +# restart:--innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=0 --log-error=/home/rob/git/5.7_rotated_tablespaces_bld/mysql-test/var/tmp/my_restart.err +SELECT COUNT(1) FROM t1; +COUNT(1) +30000 +# Restart and finish up the rotation +# restart:--innodb-encrypt-tables=OFF --innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=4 +# restart:--innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=0 --log-error=/home/rob/git/5.7_rotated_tablespaces_bld/mysql-test/var/tmp/my_restart.err +SELECT COUNT(1) FROM t1; +COUNT(1) +30000 +# Now we need to test the rotation unencrypted=>encrypted, when we get a crash after all pages +# got rotated and DD was updated but before updating page 0 +# restart:--innodb-encrypt-tables=ON --innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=0 +SET GLOBAL debug="+d,crash_on_t1_flush_after_dd_update"; +SET GLOBAL innodb_encryption_threads=4; +# First restart the server after crash so any redo logs for t1 were proceed. If there are any logs available +# t1 will be opened without validating idb file to DD. +# restart:--innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=0 +SET GLOBAL debug="-d,crash_on_t1_flush_after_dd_update"; +# Make sure that t1 has been encrypted +# Now start the server and select from t1. Validation of t1's flags should proceed. +# It should be discovered that there is mismatch of flags in t1. However it shoud be possible to use +# the table. There should be a warning message in the error log file. +# restart:--innodb-encryption-threads=0 --log-error=/home/rob/git/5.7_rotated_tablespaces_bld/mysql-test/var/tmp/my_restart.err --loose-keyring_file_data=/home/rob/git/5.7_rotated_tablespaces_bld/mysql-test/var/tmp/mysecret_keyring --early-plugin-load=keyring_file=keyring_file.so +SELECT COUNT(1) FROM t1; +COUNT(1) +30000 +# Restart and finish up the rotation +# restart:--innodb-encrypt-tables=ON --innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=4 +DROP TABLE t1; +DROP PROCEDURE innodb_insert_proc; diff --git a/mysql-test/suite/encryption/r/innodb_encryption_discard_import.result b/mysql-test/suite/encryption/r/innodb_encryption_discard_import.result new file mode 100644 index 000000000000..f07d431c8faf --- /dev/null +++ b/mysql-test/suite/encryption/r/innodb_encryption_discard_import.result @@ -0,0 +1,437 @@ +call mtr.add_suppression("\\[Warning\\] InnoDB: Tablespace for table `[^`]+`.`[^`]+` is set as discarded\\."); +call mtr.add_suppression("\\[Warning\\] InnoDB: Page [[:digit:]]+ at offset [[:digit:]]+ looks corrupted in file"); +call mtr.add_suppression("\\[ERROR\\] InnoDB: os_file_read\\(\\) failed"); +CREATE TABLE t1 (id INT NOT NULL PRIMARY KEY, a VARCHAR(255)) ENGINE=InnoDB ENCRYPTION='KEYRING'; +CREATE TABLE t2 (id INT NOT NULL PRIMARY KEY, a VARCHAR(255)) ENGINE=InnoDB ENCRYPTION='Y'; +CREATE TABLE t3 (id INT NOT NULL PRIMARY KEY, a VARCHAR(255)) ENGINE=InnoDB COMPRESSION="zlib" ENCRYPTION='KEYRING'; +CREATE TABLE t4 (id INT NOT NULL PRIMARY KEY, a VARCHAR(255)) ENGINE=InnoDB COMPRESSION="zlib"; +CREATE TABLE t5 (id INT NOT NULL PRIMARY KEY, a VARCHAR(255)) ENGINE=InnoDB ROW_FORMAT=COMPRESSED ENCRYPTION='KEYRING'; +CREATE TABLE t6 (id INT NOT NULL PRIMARY KEY, a VARCHAR(255)) ENGINE=InnoDB ROW_FORMAT=COMPRESSED; +CREATE TABLE t7 (id INT NOT NULL PRIMARY KEY, a VARCHAR(255)) ENGINE=InnoDB ENCRYPTION='N'; +CREATE TABLE t8 (id INT NOT NULL PRIMARY KEY, a VARCHAR(255)) ENGINE=InnoDB; +CREATE PROCEDURE innodb_insert_proc(repeat_count INT) +BEGIN +DECLARE current_num INT; +SET current_num = 0; +WHILE current_num < repeat_count DO +INSERT INTO t1 VALUES (current_num, REPEAT('foobar', 42)); +INSERT INTO t2 VALUES (current_num, REPEAT('temp' , 42)); +INSERT INTO t3 VALUES (current_num, REPEAT('barfoo', 42)); +INSERT INTO t4 VALUES (current_num, REPEAT('secret', 42)); +INSERT INTO t5 VALUES (current_num, REPEAT('fbar' , 42)); +INSERT INTO t6 VALUES (current_num, REPEAT('barf' , 42)); +INSERT INTO t7 VALUES (current_num, REPEAT('barb' , 42)); +INSERT INTO t8 VALUES (current_num, REPEAT('baba' , 42)); +SET current_num = current_num + 1; +END WHILE; +END// +COMMIT; +SET autocommit = 0; +CALL innodb_insert_proc(10000); +COMMIT; +SET autocommit = 1; +# Wait max 2 min for key encryption threads to encrypt all spaces +include/assert.inc [Make sure t7 is not encrypted] +# tablespaces should be now encrypted +t1.frm +t1.ibd +t2.frm +t2.ibd +t3.frm +t3.ibd +t4.frm +t4.ibd +t5.frm +t5.ibd +t6.frm +t6.ibd +t7.frm +t7.ibd +t8.frm +t8.ibd +FLUSH TABLES t1, t2, t3, t4, t5, t6, t7, t8 FOR EXPORT; +backup: t1 +backup: t2 +backup: t3 +backup: t4 +backup: t5 +backup: t6 +backup: t7 +backup: t8 +t1.cfg +t1.frm +t1.ibd +t2.cfg +t2.frm +t2.ibd +t3.cfg +t3.frm +t3.ibd +t4.cfg +t4.frm +t4.ibd +t5.cfg +t5.frm +t5.ibd +t6.cfg +t6.frm +t6.ibd +t7.cfg +t7.frm +t7.ibd +t8.cfg +t8.frm +t8.ibd +UNLOCK TABLES; +ALTER TABLE t1 DISCARD TABLESPACE; +ALTER TABLE t2 DISCARD TABLESPACE; +ALTER TABLE t3 DISCARD TABLESPACE; +ALTER TABLE t4 DISCARD TABLESPACE; +ALTER TABLE t5 DISCARD TABLESPACE; +ALTER TABLE t6 DISCARD TABLESPACE; +ALTER TABLE t7 DISCARD TABLESPACE; +ALTER TABLE t8 DISCARD TABLESPACE; +restore: t1 .ibd and .cfg files +restore: t2 .ibd and .cfg files +restore: t3 .ibd and .cfg files +restore: t4 .ibd and .cfg files +restore: t5 .ibd and .cfg files +restore: t6 .ibd and .cfg files +restore: t7 .ibd and .cfg files +restore: t8 .ibd and .cfg files +ALTER TABLE t1 IMPORT TABLESPACE; +include/assert.inc [Make sure t1 is readable] +ALTER TABLE t2 IMPORT TABLESPACE; +include/assert.inc [Make sure t2 is readable] +ALTER TABLE t3 IMPORT TABLESPACE; +include/assert.inc [Make sure t3 is readable] +ALTER TABLE t4 IMPORT TABLESPACE; +include/assert.inc [Make sure t4 is readable] +ALTER TABLE t5 IMPORT TABLESPACE; +include/assert.inc [Make sure t5 is readable] +ALTER TABLE t6 IMPORT TABLESPACE; +include/assert.inc [Make sure t6 is readable] +ALTER TABLE t7 IMPORT TABLESPACE; +include/assert.inc [Make sure t7 is readable] +ALTER TABLE t8 IMPORT TABLESPACE; +include/assert.inc [Make sure t8 is readable] +# tablespaces should remain encrypted after import, apart from t7 +ALTER TABLE t1 ENGINE InnoDB; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int(11) NOT NULL, + `a` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=0 +ALTER TABLE t2 ENGINE InnoDB; +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `id` int(11) NOT NULL, + `a` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='Y' +ALTER TABLE t3 ENGINE InnoDB; +SHOW CREATE TABLE t3; +Table Create Table +t3 CREATE TABLE `t3` ( + `id` int(11) NOT NULL, + `a` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMPRESSION='zlib' ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=0 +ALTER TABLE t4 ENGINE InnoDB; +SHOW CREATE TABLE t4; +Table Create Table +t4 CREATE TABLE `t4` ( + `id` int(11) NOT NULL, + `a` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMPRESSION='zlib' ENCRYPTION_KEY_ID=0 +ALTER TABLE t5 ENGINE InnoDB; +SHOW CREATE TABLE t5; +Table Create Table +t5 CREATE TABLE `t5` ( + `id` int(11) NOT NULL, + `a` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPRESSED ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=0 +ALTER TABLE t6 ENGINE InnoDB; +SHOW CREATE TABLE t6; +Table Create Table +t6 CREATE TABLE `t6` ( + `id` int(11) NOT NULL, + `a` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPRESSED ENCRYPTION_KEY_ID=0 +ALTER TABLE t7 ENGINE InnoDB; +SHOW CREATE TABLE t7; +Table Create Table +t7 CREATE TABLE `t7` ( + `id` int(11) NOT NULL, + `a` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='N' +ALTER TABLE t8 ENGINE InnoDB; +SHOW CREATE TABLE t8; +Table Create Table +t8 CREATE TABLE `t8` ( + `id` int(11) NOT NULL, + `a` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION_KEY_ID=0 +# Restarting server +# restart +# Done restarting server +# Verify that tables are still usable +include/assert.inc [Make sure t1 is readable] +include/assert.inc [Make sure t2 is readable] +include/assert.inc [Make sure t3 is readable] +include/assert.inc [Make sure t4 is readable] +include/assert.inc [Make sure t5 is readable] +include/assert.inc [Make sure t6 is readable] +include/assert.inc [Make sure t7 is readable] +include/assert.inc [Make sure t8 is readable] +# Tablespaces should be encrypted after restart +include/assert.inc [Make sure all tables, apart from t7, are encrypted] +t1.cfg +t1.frm +t1.ibd +t2.cfg +t2.frm +t2.ibd +t3.cfg +t3.frm +t3.ibd +t4.cfg +t4.frm +t4.ibd +t5.cfg +t5.frm +t5.ibd +t6.cfg +t6.frm +t6.ibd +t7.cfg +t7.frm +t7.ibd +t8.cfg +t8.frm +t8.ibd +FLUSH TABLES t1, t2, t3, t4, t5, t6, t7, t8 FOR EXPORT; +backup: t1 +backup: t2 +backup: t3 +backup: t4 +backup: t5 +backup: t6 +backup: t7 +backup: t8 +t1.cfg +t1.frm +t1.ibd +t2.cfg +t2.frm +t2.ibd +t3.cfg +t3.frm +t3.ibd +t4.cfg +t4.frm +t4.ibd +t5.cfg +t5.frm +t5.ibd +t6.cfg +t6.frm +t6.ibd +t7.cfg +t7.frm +t7.ibd +t8.cfg +t8.frm +t8.ibd +UNLOCK TABLES; +ALTER TABLE t1 DISCARD TABLESPACE; +ALTER TABLE t2 DISCARD TABLESPACE; +ALTER TABLE t3 DISCARD TABLESPACE; +ALTER TABLE t4 DISCARD TABLESPACE; +ALTER TABLE t5 DISCARD TABLESPACE; +ALTER TABLE t6 DISCARD TABLESPACE; +ALTER TABLE t7 DISCARD TABLESPACE; +ALTER TABLE t8 DISCARD TABLESPACE; +restore: t1 .ibd and .cfg files +restore: t2 .ibd and .cfg files +restore: t3 .ibd and .cfg files +restore: t4 .ibd and .cfg files +restore: t5 .ibd and .cfg files +restore: t6 .ibd and .cfg files +restore: t7 .ibd and .cfg files +restore: t8 .ibd and .cfg files +# Disable rotation threads +SET GLOBAL innodb_encryption_threads = 0; +SET GLOBAL innodb_encrypt_tables = OFF; +ALTER TABLE t1 IMPORT TABLESPACE; +include/assert.inc [Make sure t1 has encrypted flag set after importing] +include/assert.inc [Make sure t1 is visible in INNODB_SYS_TABLESPACES with MIN_KEY_VERSION = 1] +include/assert.inc [Make sure t1 is readable] +ALTER TABLE t2 IMPORT TABLESPACE; +include/assert.inc [Make sure t2 has encrypted flag set after importing] +include/assert.inc [Make sure t2 is visible in INNODB_SYS_TABLESPACES with MIN_KEY_VERSION = 1] +include/assert.inc [Make sure t2 is readable] +ALTER TABLE t3 IMPORT TABLESPACE; +include/assert.inc [Make sure t3 has encrypted flag set after importing] +include/assert.inc [Make sure t3 is visible in INNODB_SYS_TABLESPACES with MIN_KEY_VERSION = 1] +include/assert.inc [Make sure t3 is readable] +ALTER TABLE t4 IMPORT TABLESPACE; +include/assert.inc [Make sure t4 has encrypted flag set after importing] +include/assert.inc [Make sure t4 is visible in INNODB_SYS_TABLESPACES with MIN_KEY_VERSION = 1] +include/assert.inc [Make sure t4 is readable] +ALTER TABLE t5 IMPORT TABLESPACE; +include/assert.inc [Make sure t5 has encrypted flag set after importing] +include/assert.inc [Make sure t5 is visible in INNODB_SYS_TABLESPACES with MIN_KEY_VERSION = 1] +include/assert.inc [Make sure t5 is readable] +ALTER TABLE t6 IMPORT TABLESPACE; +include/assert.inc [Make sure t6 has encrypted flag set after importing] +include/assert.inc [Make sure t6 is visible in INNODB_SYS_TABLESPACES with MIN_KEY_VERSION = 1] +include/assert.inc [Make sure t6 is readable] +ALTER TABLE t7 IMPORT TABLESPACE; +include/assert.inc [Make sure t7 does not have encrypted flag set after importing] +include/assert.inc [Make sure t7 is visible in INNODB_SYS_TABLESPACES with MIN_KEY_VERSION = 0 (i.e. unencrypted)] +include/assert.inc [Make sure t7 is readable] +ALTER TABLE t8 IMPORT TABLESPACE; +include/assert.inc [Make sure t8 has encrypted flag set after importing] +include/assert.inc [Make sure t8 is visible in INNODB_SYS_TABLESPACES with MIN_KEY_VERSION = 1] +include/assert.inc [Make sure t8 is readable] +# tablespaces should be encrypted, apart from t7 +SET GLOBAL innodb_encryption_threads = 4; +# Wait max 2 min for key encryption threads to decrypt all spaces, apart from t1, t3 and t5 +include/assert.inc [Make sure t1 has encrypted flag set] +include/assert.inc [Make sure t1 is visible in INNODB_SYS_TABLESPACES with MIN_KEY_VERSION = 1] +include/assert.inc [Make sure t1 is readable] +include/assert.inc [Make sure t2 does not have encrypted flag set] +include/assert.inc [Make sure t2 is visible in INNODB_SYS_TABLESPACES with MIN_KEY_VERSION = 0] +include/assert.inc [Make sure t2 is readable] +include/assert.inc [Make sure t3 has encrypted flag set] +include/assert.inc [Make sure t3 is visible in INNODB_SYS_TABLESPACES with MIN_KEY_VERSION = 1] +include/assert.inc [Make sure t3 is readable] +include/assert.inc [Make sure t4 does not have encrypted flag set] +include/assert.inc [Make sure t4 is visible in INNODB_SYS_TABLESPACES with MIN_KEY_VERSION = 0] +include/assert.inc [Make sure t4 is readable] +include/assert.inc [Make sure t5 has encrypted flag set] +include/assert.inc [Make sure t5 is visible in INNODB_SYS_TABLESPACES with MIN_KEY_VERSION = 1] +include/assert.inc [Make sure t5 is readable] +include/assert.inc [Make sure t6 does not have encrypted flag set] +include/assert.inc [Make sure t6 is visible in INNODB_SYS_TABLESPACES with MIN_KEY_VERSION = 0] +include/assert.inc [Make sure t6 is readable] +include/assert.inc [Make sure t7 does not have encrypted flag set] +include/assert.inc [Make sure t7 is visible in INNODB_SYS_TABLESPACES with MIN_KEY_VERSION = 0 (i.e. unencrypted)] +include/assert.inc [Make sure t7 is readable] +include/assert.inc [Make sure t8 does not have encrypted flag set] +include/assert.inc [Make sure t8 is visible in INNODB_SYS_TABLESPACES with MIN_KEY_VERSION = 0] +include/assert.inc [Make sure t8 is readable] +# tablespaces should not be encrypted, apart from t1,t3 and t5 +# Now let's backup keyring file, change encryption key id of encrypt-able tables (all but t7) +# export and dicard them. Next restart the server with backuped keyring file and make sure that +# server starts, but tables cannot be imported gracefully +SET GLOBAL innodb_encrypt_tables = ONLINE_TO_KEYRING; +# Wait max 2 min for key encryption threads to encrypt all spaces +ALTER TABLE t1 encryption_key_id = 5; +ALTER TABLE t2 encryption_key_id = 5; +Warnings: +Warning 140 InnoDB: Ignored ENCRYPTION_KEY_ID 5 when Master Key encryption is enabled. +ALTER TABLE t3 encryption_key_id = 5; +ALTER TABLE t4 encryption_key_id = 5; +ALTER TABLE t5 encryption_key_id = 5; +ALTER TABLE t6 encryption_key_id = 5; +ALTER TABLE t8 encryption_key_id = 5; +t1.cfg +t1.frm +t1.ibd +t2.cfg +t2.frm +t2.ibd +t3.cfg +t3.frm +t3.ibd +t4.cfg +t4.frm +t4.ibd +t5.cfg +t5.frm +t5.ibd +t6.cfg +t6.frm +t6.ibd +t7.cfg +t7.frm +t7.ibd +t8.cfg +t8.frm +t8.ibd +FLUSH TABLES t1, t2, t3, t4, t5, t6, t8 FOR EXPORT; +backup: t1 +backup: t2 +backup: t3 +backup: t4 +backup: t5 +backup: t6 +backup: t8 +t1.cfg +t1.frm +t1.ibd +t2.cfg +t2.frm +t2.ibd +t3.cfg +t3.frm +t3.ibd +t4.cfg +t4.frm +t4.ibd +t5.cfg +t5.frm +t5.ibd +t6.cfg +t6.frm +t6.ibd +t7.cfg +t7.frm +t7.ibd +t8.cfg +t8.frm +t8.ibd +UNLOCK TABLES; +ALTER TABLE t1 DISCARD TABLESPACE; +ALTER TABLE t2 DISCARD TABLESPACE; +ALTER TABLE t3 DISCARD TABLESPACE; +ALTER TABLE t4 DISCARD TABLESPACE; +ALTER TABLE t5 DISCARD TABLESPACE; +ALTER TABLE t6 DISCARD TABLESPACE; +ALTER TABLE t8 DISCARD TABLESPACE; +restore: t1 .ibd and .cfg files +restore: t2 .ibd and .cfg files +restore: t3 .ibd and .cfg files +restore: t4 .ibd and .cfg files +restore: t5 .ibd and .cfg files +restore: t6 .ibd and .cfg files +restore: t8 .ibd and .cfg files +# restart:--loose-keyring_file_data=/home/yura/addon/percona-build-5.7-debug_min/mysql-test/var/tmp/mysecret_keyring_backup +ALTER TABLE t1 IMPORT TABLESPACE; +ERROR HY000: Internal error: Cannot reset LSNs in table `test`.`t1` : Data structure corruption +ALTER TABLE t2 IMPORT TABLESPACE; +Warnings: +Warning 1814 InnoDB: Tablespace has been discarded for table 't2' +ALTER TABLE t3 IMPORT TABLESPACE; +ERROR HY000: Internal error: Cannot reset LSNs in table `test`.`t3` : Page decompress failed after reading from disk +ALTER TABLE t4 IMPORT TABLESPACE; +ERROR HY000: Internal error: Cannot reset LSNs in table `test`.`t4` : Page decompress failed after reading from disk +ALTER TABLE t5 IMPORT TABLESPACE; +ERROR HY000: Internal error: Cannot reset LSNs in table `test`.`t5` : Data structure corruption +ALTER TABLE t6 IMPORT TABLESPACE; +ERROR HY000: Internal error: Cannot reset LSNs in table `test`.`t6` : Data structure corruption +ALTER TABLE t8 IMPORT TABLESPACE; +ERROR HY000: Internal error: Cannot reset LSNs in table `test`.`t8` : Data structure corruption +# restart:--loose-keyring_file_data=/home/yura/addon/percona-build-5.7-debug_min/mysql-test/var/tmp/mysecret_keyring +DROP PROCEDURE innodb_insert_proc; +DROP TABLE t1, t2, t3, t4, t5, t6, t7, t8; diff --git a/mysql-test/suite/encryption/r/innodb_encryption_row_compressed.result b/mysql-test/suite/encryption/r/innodb_encryption_row_compressed.result new file mode 100644 index 000000000000..1a3ff90d9c03 --- /dev/null +++ b/mysql-test/suite/encryption/r/innodb_encryption_row_compressed.result @@ -0,0 +1,139 @@ +create table innodb_compressed1(c1 bigint not null primary key, d int, a varchar(20), b char(200)) engine=innodb row_format=compressed ENCRYPTION='KEYRING'; +create table innodb_compressed2(c1 bigint not null primary key, d int, a varchar(20), b char(200)) engine=innodb row_format=compressed key_block_size=1 ENCRYPTION='KEYRING'; +create table innodb_compressed3(c1 bigint not null primary key, d int, a varchar(20), b char(200)) engine=innodb row_format=compressed key_block_size=2 ENCRYPTION='KEYRING'; +create table innodb_compressed4(c1 bigint not null primary key, d int, a varchar(20), b char(200)) engine=innodb row_format=compressed key_block_size=4 ENCRYPTION='KEYRING'; +insert into innodb_compressed1 values (1, 20, 'private', 'evenmoreprivate'); +insert into innodb_compressed1 values (2, 20, 'private', 'evenmoreprivate'); +insert into innodb_compressed1 values (3, 30, 'private', 'evenmoreprivate'); +insert into innodb_compressed1 values (4, 30, 'private', 'evenmoreprivate'); +insert into innodb_compressed1 values (5, 30, 'private', 'evenmoreprivate'); +insert into innodb_compressed1 values (6, 30, 'private', 'evenmoreprivate'); +insert into innodb_compressed1 values (7, 30, 'private', 'evenmoreprivate'); +insert into innodb_compressed1 values (8, 20, 'private', 'evenmoreprivate'); +insert into innodb_compressed1 values (9, 20, 'private', 'evenmoreprivate'); +insert into innodb_compressed1 values (10, 20, 'private', 'evenmoreprivate'); +insert into innodb_compressed2 select * from innodb_compressed1; +insert into innodb_compressed3 select * from innodb_compressed1; +insert into innodb_compressed4 select * from innodb_compressed1; +# restart +# t1 yes on expecting NOT FOUND +# t2 yes on expecting NOT FOUND +# t3 yes on expecting NOT FOUND +# t4 yes on expecting NOT FOUND +select * from innodb_compressed1 where d = 20; +c1 d a b +1 20 private evenmoreprivate +2 20 private evenmoreprivate +8 20 private evenmoreprivate +9 20 private evenmoreprivate +10 20 private evenmoreprivate +select * from innodb_compressed1 where d = 30; +c1 d a b +3 30 private evenmoreprivate +4 30 private evenmoreprivate +5 30 private evenmoreprivate +6 30 private evenmoreprivate +7 30 private evenmoreprivate +select * from innodb_compressed2 where d = 20; +c1 d a b +1 20 private evenmoreprivate +2 20 private evenmoreprivate +8 20 private evenmoreprivate +9 20 private evenmoreprivate +10 20 private evenmoreprivate +select * from innodb_compressed2 where d = 30; +c1 d a b +3 30 private evenmoreprivate +4 30 private evenmoreprivate +5 30 private evenmoreprivate +6 30 private evenmoreprivate +7 30 private evenmoreprivate +select * from innodb_compressed3 where d = 20; +c1 d a b +1 20 private evenmoreprivate +2 20 private evenmoreprivate +8 20 private evenmoreprivate +9 20 private evenmoreprivate +10 20 private evenmoreprivate +select * from innodb_compressed3 where d = 30; +c1 d a b +3 30 private evenmoreprivate +4 30 private evenmoreprivate +5 30 private evenmoreprivate +6 30 private evenmoreprivate +7 30 private evenmoreprivate +select * from innodb_compressed4 where d = 20; +c1 d a b +1 20 private evenmoreprivate +2 20 private evenmoreprivate +8 20 private evenmoreprivate +9 20 private evenmoreprivate +10 20 private evenmoreprivate +select * from innodb_compressed4 where d = 30; +c1 d a b +3 30 private evenmoreprivate +4 30 private evenmoreprivate +5 30 private evenmoreprivate +6 30 private evenmoreprivate +7 30 private evenmoreprivate +update innodb_compressed1 set d = d + 10 where d = 30; +update innodb_compressed2 set d = d + 10 where d = 30; +update innodb_compressed3 set d = d + 10 where d = 30; +update innodb_compressed4 set d = d + 10 where d = 30; +insert into innodb_compressed1 values (20, 60, 'newprivate', 'newevenmoreprivate'); +insert into innodb_compressed2 values (20, 60, 'newprivate', 'newevenmoreprivate'); +insert into innodb_compressed3 values (20, 60, 'newprivate', 'newevenmoreprivate'); +insert into innodb_compressed4 values (20, 60, 'newprivate', 'newevenmoreprivate'); +# t1 yes on expecting NOT FOUND +# t2 yes on expecting NOT FOUND +# t3 yes on expecting NOT FOUND +# t4 yes on expecting NOT FOUND +# restart +select * from innodb_compressed1 where d = 40; +c1 d a b +3 40 private evenmoreprivate +4 40 private evenmoreprivate +5 40 private evenmoreprivate +6 40 private evenmoreprivate +7 40 private evenmoreprivate +select * from innodb_compressed1 where d = 60; +c1 d a b +20 60 newprivate newevenmoreprivate +select * from innodb_compressed2 where d = 40; +c1 d a b +3 40 private evenmoreprivate +4 40 private evenmoreprivate +5 40 private evenmoreprivate +6 40 private evenmoreprivate +7 40 private evenmoreprivate +select * from innodb_compressed2 where d = 60; +c1 d a b +20 60 newprivate newevenmoreprivate +select * from innodb_compressed3 where d = 40; +c1 d a b +3 40 private evenmoreprivate +4 40 private evenmoreprivate +5 40 private evenmoreprivate +6 40 private evenmoreprivate +7 40 private evenmoreprivate +select * from innodb_compressed3 where d = 60; +c1 d a b +20 60 newprivate newevenmoreprivate +select * from innodb_compressed4 where d = 40; +c1 d a b +3 40 private evenmoreprivate +4 40 private evenmoreprivate +5 40 private evenmoreprivate +6 40 private evenmoreprivate +7 40 private evenmoreprivate +select * from innodb_compressed4 where d = 60; +c1 d a b +20 60 newprivate newevenmoreprivate +# t1 yes on expecting NOT FOUND +# t2 yes on expecting NOT FOUND +# t3 yes on expecting NOT FOUND +# t4 yes on expecting NOT FOUND +drop table innodb_compressed1; +drop table innodb_compressed2; +drop table innodb_compressed3; +drop table innodb_compressed4; diff --git a/mysql-test/suite/encryption/r/innodb_encryption_row_compressed_big_table.result b/mysql-test/suite/encryption/r/innodb_encryption_row_compressed_big_table.result new file mode 100644 index 000000000000..bf0bdba8a34d --- /dev/null +++ b/mysql-test/suite/encryption/r/innodb_encryption_row_compressed_big_table.result @@ -0,0 +1,10019 @@ +CREATE TABLE t1 (id INT NOT NULL PRIMARY KEY, a VARCHAR(255)) ENGINE=InnoDB row_format=compressed encryption='KEYRING'; +create procedure innodb_insert_proc (repeat_count int) +begin +declare current_num int; +set current_num = 0; +while current_num < repeat_count do +insert into t1 values (current_num,repeat('barfoo',42)); +set current_num = current_num + 1; +end while; +end// +commit; +set autocommit=0; +call innodb_insert_proc(10000); +commit; +set autocommit=1; +# restart +select * from t1; +id a +0 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +10 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +11 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +12 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +13 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +14 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +15 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +16 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +17 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +18 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +19 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +20 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +21 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +22 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +23 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +24 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +25 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +26 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +27 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +28 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +29 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +30 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +31 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +32 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +33 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +34 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +35 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +36 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +37 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +38 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +39 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +40 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +41 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +42 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +43 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +44 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +45 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +46 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +47 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +48 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +49 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +50 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +51 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +52 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +53 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +54 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +55 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +56 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +57 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +58 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +59 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +60 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +61 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +62 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +63 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +64 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +65 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +66 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +67 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +68 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +69 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +70 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +71 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +72 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +73 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +74 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +75 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +76 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +77 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +78 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +79 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +80 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +81 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +82 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +83 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +84 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +85 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +86 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +87 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +88 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +89 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +90 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +91 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +92 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +93 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +94 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +95 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +96 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +97 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +98 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +99 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +100 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +101 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +102 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +103 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +104 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +105 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +106 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +107 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +108 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +109 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +110 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +111 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +112 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +113 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +114 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +115 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +116 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +117 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +118 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +119 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +120 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +121 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +122 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +123 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +124 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +125 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +126 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +127 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +128 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +129 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +130 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +131 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +132 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +133 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +134 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +135 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +136 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +137 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +138 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +139 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +140 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +141 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +142 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +143 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +144 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +145 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +146 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +147 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +148 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +149 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +150 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +151 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +152 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +153 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +154 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +155 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +156 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +157 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +158 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +159 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +160 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +161 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +162 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +163 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +164 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +165 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +166 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +167 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +168 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +169 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +170 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +171 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +172 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +173 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +174 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +175 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +176 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +177 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +178 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +179 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +180 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +181 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +182 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +183 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +184 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +185 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +186 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +187 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +188 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +189 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +190 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +191 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +192 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +193 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +194 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +195 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +196 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +197 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +198 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +199 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +200 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +201 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +202 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +203 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +204 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +205 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +206 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +207 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +208 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +209 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +210 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +211 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +212 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +213 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +214 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +215 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +216 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +217 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +218 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +219 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +220 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +221 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +222 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +223 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +224 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +225 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +226 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +227 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +228 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +229 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +230 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +231 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +232 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +233 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +234 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +235 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +236 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +237 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +238 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +239 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +240 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +241 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +242 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +243 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +244 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +245 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +246 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +247 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +248 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +249 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +250 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +251 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +252 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +253 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +254 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +255 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +256 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +257 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +258 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +259 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +260 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +261 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +262 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +263 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +264 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +265 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +266 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +267 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +268 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +269 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +270 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +271 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +272 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +273 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +274 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +275 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +276 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +277 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +278 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +279 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +280 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +281 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +282 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +283 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +284 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +285 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +286 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +287 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +288 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +289 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +290 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +291 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +292 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +293 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +294 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +295 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +296 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +297 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +298 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +299 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +300 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +301 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +302 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +303 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +304 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +305 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +306 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +307 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +308 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +309 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +310 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +311 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +312 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +313 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +314 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +315 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +316 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +317 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +318 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +319 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +320 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +321 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +322 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +323 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +324 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +325 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +326 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +327 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +328 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +329 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +330 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +331 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +332 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +333 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +334 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +335 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +336 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +337 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +338 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +339 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +340 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +341 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +342 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +343 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +344 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +345 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +346 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +347 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +348 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +349 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +350 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +351 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +352 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +353 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +354 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +355 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +356 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +357 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +358 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +359 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +360 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +361 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +362 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +363 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +364 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +365 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +366 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +367 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +368 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +369 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +370 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +371 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +372 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +373 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +374 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +375 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +376 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +377 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +378 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +379 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +380 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +381 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +382 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +383 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +384 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +385 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +386 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +387 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +388 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +389 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +390 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +391 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +392 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +393 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +394 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +395 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +396 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +397 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +398 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +399 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +400 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +401 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +402 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +403 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +404 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +405 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +406 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +407 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +408 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +409 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +410 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +411 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +412 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +413 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +414 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +415 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +416 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +417 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +418 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +419 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +420 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +421 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +422 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +423 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +424 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +425 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +426 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +427 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +428 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +429 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +430 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +431 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +432 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +433 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +434 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +435 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +436 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +437 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +438 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +439 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +440 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +441 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +442 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +443 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +444 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +445 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +446 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +447 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +448 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +449 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +450 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +451 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +452 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +453 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +454 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +455 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +456 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +457 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +458 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +459 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +460 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +461 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +462 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +463 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +464 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +465 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +466 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +467 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +468 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +469 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +470 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +471 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +472 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +473 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +474 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +475 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +476 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +477 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +478 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +479 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +480 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +481 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +482 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +483 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +484 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +485 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +486 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +487 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +488 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +489 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +490 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +491 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +492 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +493 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +494 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +495 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +496 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +497 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +498 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +499 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +500 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +501 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +502 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +503 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +504 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +505 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +506 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +507 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +508 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +509 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +510 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +511 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +512 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +513 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +514 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +515 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +516 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +517 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +518 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +519 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +520 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +521 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +522 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +523 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +524 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +525 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +526 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +527 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +528 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +529 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +530 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +531 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +532 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +533 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +534 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +535 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +536 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +537 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +538 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +539 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +540 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +541 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +542 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +543 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +544 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +545 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +546 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +547 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +548 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +549 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +550 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +551 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +552 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +553 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +554 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +555 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +556 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +557 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +558 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +559 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +560 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +561 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +562 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +563 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +564 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +565 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +566 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +567 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +568 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +569 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +570 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +571 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +572 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +573 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +574 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +575 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +576 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +577 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +578 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +579 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +580 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +581 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +582 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +583 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +584 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +585 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +586 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +587 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +588 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +589 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +590 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +591 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +592 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +593 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +594 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +595 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +596 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +597 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +598 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +599 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +600 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +601 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +602 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +603 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +604 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +605 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +606 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +607 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +608 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +609 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +610 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +611 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +612 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +613 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +614 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +615 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +616 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +617 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +618 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +619 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +620 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +621 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +622 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +623 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +624 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +625 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +626 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +627 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +628 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +629 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +630 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +631 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +632 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +633 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +634 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +635 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +636 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +637 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +638 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +639 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +640 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +641 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +642 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +643 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +644 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +645 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +646 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +647 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +648 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +649 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +650 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +651 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +652 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +653 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +654 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +655 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +656 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +657 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +658 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +659 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +660 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +661 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +662 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +663 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +664 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +665 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +666 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +667 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +668 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +669 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +670 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +671 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +672 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +673 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +674 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +675 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +676 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +677 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +678 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +679 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +680 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +681 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +682 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +683 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +684 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +685 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +686 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +687 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +688 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +689 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +690 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +691 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +692 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +693 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +694 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +695 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +696 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +697 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +698 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +699 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +700 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +701 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +702 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +703 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +704 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +705 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +706 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +707 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +708 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +709 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +710 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +711 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +712 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +713 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +714 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +715 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +716 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +717 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +718 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +719 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +720 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +721 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +722 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +723 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +724 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +725 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +726 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +727 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +728 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +729 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +730 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +731 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +732 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +733 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +734 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +735 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +736 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +737 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +738 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +739 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +740 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +741 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +742 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +743 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +744 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +745 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +746 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +747 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +748 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +749 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +750 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +751 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +752 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +753 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +754 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +755 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +756 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +757 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +758 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +759 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +760 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +761 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +762 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +763 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +764 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +765 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +766 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +767 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +768 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +769 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +770 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +771 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +772 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +773 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +774 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +775 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +776 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +777 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +778 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +779 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +780 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +781 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +782 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +783 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +784 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +785 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +786 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +787 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +788 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +789 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +790 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +791 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +792 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +793 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +794 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +795 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +796 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +797 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +798 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +799 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +800 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +801 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +802 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +803 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +804 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +805 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +806 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +807 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +808 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +809 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +810 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +811 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +812 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +813 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +814 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +815 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +816 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +817 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +818 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +819 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +820 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +821 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +822 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +823 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +824 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +825 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +826 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +827 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +828 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +829 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +830 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +831 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +832 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +833 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +834 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +835 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +836 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +837 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +838 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +839 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +840 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +841 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +842 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +843 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +844 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +845 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +846 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +847 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +848 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +849 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +850 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +851 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +852 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +853 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +854 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +855 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +856 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +857 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +858 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +859 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +860 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +861 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +862 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +863 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +864 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +865 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +866 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +867 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +868 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +869 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +870 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +871 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +872 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +873 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +874 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +875 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +876 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +877 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +878 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +879 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +880 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +881 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +882 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +883 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +884 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +885 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +886 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +887 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +888 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +889 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +890 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +891 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +892 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +893 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +894 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +895 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +896 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +897 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +898 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +899 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +900 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +901 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +902 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +903 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +904 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +905 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +906 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +907 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +908 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +909 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +910 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +911 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +912 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +913 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +914 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +915 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +916 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +917 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +918 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +919 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +920 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +921 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +922 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +923 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +924 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +925 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +926 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +927 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +928 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +929 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +930 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +931 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +932 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +933 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +934 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +935 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +936 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +937 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +938 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +939 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +940 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +941 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +942 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +943 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +944 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +945 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +946 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +947 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +948 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +949 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +950 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +951 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +952 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +953 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +954 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +955 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +956 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +957 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +958 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +959 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +960 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +961 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +962 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +963 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +964 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +965 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +966 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +967 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +968 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +969 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +970 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +971 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +972 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +973 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +974 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +975 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +976 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +977 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +978 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +979 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +980 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +981 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +982 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +983 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +984 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +985 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +986 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +987 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +988 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +989 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +990 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +991 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +992 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +993 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +994 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +995 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +996 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +997 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +998 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +999 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1000 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1001 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1002 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1003 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1004 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1005 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1006 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1007 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1008 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1009 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1010 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1011 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1012 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1013 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1014 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1015 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1016 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1017 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1018 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1019 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1020 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1021 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1022 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1023 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1024 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1025 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1026 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1027 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1028 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1029 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1030 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1031 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1032 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1033 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1034 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1035 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1036 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1037 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1038 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1039 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1040 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1041 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1042 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1043 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1044 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1045 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1046 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1047 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1048 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1049 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1050 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1051 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1052 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1053 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1054 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1055 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1056 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1057 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1058 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1059 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1060 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1061 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1062 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1063 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1064 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1065 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1066 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1067 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1068 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1069 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1070 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1071 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1072 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1073 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1074 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1075 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1076 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1077 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1078 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1079 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1080 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1081 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1082 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1083 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1084 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1085 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1086 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1087 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1088 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1089 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1090 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1091 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1092 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1093 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1094 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1095 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1096 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1097 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1098 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1099 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1100 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1101 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1102 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1103 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1104 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1105 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1106 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1107 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1108 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1109 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1110 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1111 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1112 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1113 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1114 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1115 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1116 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1117 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1118 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1119 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1120 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1121 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1122 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1123 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1124 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1125 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1126 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1127 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1128 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1129 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1130 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1131 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1132 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1133 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1134 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1135 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1136 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1137 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1138 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1139 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1140 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1141 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1142 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1143 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1144 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1145 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1146 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1147 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1148 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1149 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1150 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1151 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1152 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1153 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1154 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1155 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1156 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1157 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1158 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1159 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1160 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1161 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1162 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1163 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1164 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1165 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1166 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1167 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1168 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1169 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1170 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1171 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1172 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1173 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1174 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1175 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1176 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1177 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1178 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1179 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1180 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1181 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1182 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1183 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1184 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1185 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1186 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1187 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1188 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1189 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1190 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1191 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1192 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1193 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1194 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1195 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1196 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1197 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1198 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1199 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1200 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1201 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1202 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1203 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1204 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1205 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1206 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1207 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1208 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1209 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1210 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1211 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1212 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1213 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1214 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1215 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1216 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1217 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1218 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1219 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1220 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1221 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1222 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1223 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1224 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1225 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1226 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1227 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1228 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1229 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1230 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1231 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1232 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1233 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1234 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1235 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1236 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1237 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1238 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1239 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1240 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1241 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1242 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1243 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1244 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1245 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1246 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1247 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1248 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1249 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1250 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1251 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1252 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1253 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1254 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1255 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1256 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1257 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1258 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1259 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1260 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1261 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1262 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1263 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1264 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1265 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1266 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1267 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1268 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1269 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1270 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1271 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1272 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1273 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1274 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1275 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1276 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1277 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1278 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1279 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1280 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1281 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1282 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1283 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1284 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1285 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1286 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1287 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1288 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1289 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1290 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1291 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1292 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1293 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1294 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1295 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1296 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1297 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1298 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1299 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1300 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1301 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1302 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1303 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1304 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1305 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1306 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1307 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1308 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1309 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1310 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1311 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1312 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1313 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1314 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1315 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1316 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1317 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1318 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1319 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1320 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1321 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1322 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1323 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1324 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1325 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1326 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1327 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1328 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1329 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1330 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1331 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1332 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1333 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1334 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1335 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1336 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1337 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1338 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1339 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1340 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1341 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1342 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1343 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1344 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1345 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1346 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1347 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1348 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1349 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1350 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1351 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1352 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1353 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1354 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1355 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1356 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1357 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1358 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1359 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1360 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1361 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1362 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1363 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1364 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1365 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1366 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1367 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1368 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1369 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1370 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1371 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1372 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1373 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1374 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1375 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1376 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1377 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1378 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1379 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1380 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1381 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1382 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1383 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1384 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1385 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1386 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1387 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1388 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1389 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1390 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1391 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1392 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1393 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1394 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1395 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1396 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1397 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1398 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1399 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1400 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1401 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1402 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1403 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1404 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1405 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1406 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1407 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1408 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1409 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1410 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1411 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1412 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1413 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1414 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1415 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1416 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1417 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1418 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1419 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1420 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1421 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1422 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1423 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1424 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1425 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1426 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1427 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1428 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1429 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1430 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1431 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1432 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1433 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1434 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1435 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1436 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1437 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1438 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1439 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1440 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1441 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1442 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1443 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1444 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1445 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1446 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1447 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1448 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1449 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1450 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1451 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1452 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1453 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1454 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1455 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1456 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1457 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1458 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1459 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1460 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1461 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1462 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1463 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1464 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1465 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1466 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1467 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1468 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1469 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1470 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1471 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1472 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1473 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1474 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1475 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1476 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1477 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1478 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1479 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1480 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1481 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1482 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1483 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1484 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1485 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1486 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1487 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1488 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1489 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1490 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1491 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1492 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1493 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1494 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1495 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1496 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1497 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1498 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1499 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1500 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1501 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1502 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1503 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1504 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1505 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1506 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1507 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1508 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1509 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1510 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1511 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1512 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1513 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1514 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1515 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1516 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1517 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1518 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1519 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1520 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1521 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1522 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1523 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1524 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1525 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1526 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1527 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1528 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1529 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1530 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1531 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1532 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1533 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1534 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1535 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1536 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1537 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1538 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1539 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1540 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1541 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1542 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1543 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1544 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1545 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1546 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1547 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1548 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1549 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1550 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1551 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1552 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1553 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1554 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1555 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1556 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1557 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1558 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1559 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1560 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1561 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1562 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1563 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1564 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1565 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1566 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1567 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1568 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1569 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1570 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1571 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1572 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1573 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1574 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1575 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1576 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1577 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1578 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1579 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1580 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1581 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1582 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1583 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1584 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1585 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1586 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1587 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1588 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1589 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1590 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1591 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1592 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1593 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1594 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1595 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1596 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1597 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1598 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1599 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1600 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1601 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1602 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1603 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1604 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1605 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1606 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1607 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1608 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1609 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1610 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1611 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1612 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1613 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1614 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1615 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1616 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1617 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1618 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1619 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1620 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1621 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1622 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1623 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1624 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1625 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1626 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1627 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1628 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1629 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1630 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1631 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1632 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1633 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1634 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1635 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1636 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1637 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1638 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1639 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1640 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1641 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1642 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1643 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1644 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1645 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1646 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1647 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1648 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1649 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1650 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1651 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1652 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1653 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1654 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1655 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1656 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1657 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1658 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1659 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1660 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1661 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1662 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1663 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1664 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1665 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1666 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1667 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1668 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1669 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1670 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1671 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1672 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1673 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1674 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1675 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1676 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1677 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1678 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1679 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1680 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1681 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1682 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1683 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1684 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1685 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1686 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1687 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1688 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1689 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1690 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1691 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1692 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1693 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1694 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1695 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1696 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1697 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1698 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1699 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1700 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1701 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1702 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1703 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1704 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1705 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1706 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1707 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1708 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1709 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1710 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1711 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1712 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1713 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1714 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1715 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1716 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1717 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1718 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1719 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1720 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1721 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1722 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1723 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1724 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1725 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1726 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1727 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1728 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1729 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1730 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1731 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1732 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1733 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1734 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1735 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1736 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1737 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1738 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1739 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1740 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1741 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1742 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1743 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1744 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1745 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1746 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1747 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1748 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1749 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1750 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1751 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1752 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1753 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1754 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1755 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1756 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1757 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1758 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1759 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1760 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1761 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1762 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1763 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1764 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1765 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1766 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1767 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1768 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1769 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1770 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1771 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1772 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1773 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1774 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1775 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1776 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1777 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1778 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1779 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1780 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1781 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1782 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1783 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1784 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1785 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1786 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1787 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1788 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1789 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1790 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1791 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1792 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1793 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1794 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1795 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1796 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1797 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1798 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1799 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1800 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1801 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1802 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1803 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1804 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1805 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1806 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1807 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1808 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1809 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1810 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1811 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1812 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1813 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1814 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1815 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1816 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1817 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1818 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1819 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1820 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1821 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1822 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1823 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1824 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1825 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1826 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1827 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1828 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1829 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1830 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1831 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1832 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1833 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1834 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1835 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1836 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1837 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1838 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1839 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1840 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1841 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1842 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1843 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1844 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1845 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1846 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1847 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1848 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1849 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1850 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1851 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1852 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1853 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1854 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1855 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1856 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1857 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1858 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1859 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1860 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1861 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1862 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1863 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1864 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1865 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1866 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1867 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1868 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1869 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1870 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1871 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1872 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1873 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1874 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1875 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1876 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1877 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1878 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1879 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1880 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1881 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1882 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1883 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1884 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1885 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1886 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1887 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1888 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1889 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1890 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1891 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1892 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1893 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1894 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1895 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1896 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1897 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1898 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1899 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1900 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1901 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1902 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1903 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1904 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1905 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1906 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1907 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1908 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1909 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1910 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1911 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1912 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1913 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1914 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1915 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1916 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1917 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1918 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1919 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1920 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1921 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1922 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1923 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1924 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1925 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1926 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1927 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1928 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1929 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1930 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1931 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1932 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1933 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1934 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1935 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1936 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1937 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1938 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1939 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1940 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1941 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1942 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1943 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1944 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1945 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1946 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1947 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1948 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1949 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1950 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1951 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1952 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1953 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1954 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1955 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1956 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1957 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1958 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1959 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1960 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1961 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1962 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1963 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1964 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1965 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1966 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1967 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1968 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1969 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1970 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1971 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1972 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1973 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1974 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1975 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1976 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1977 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1978 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1979 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1980 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1981 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1982 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1983 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1984 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1985 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1986 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1987 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1988 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1989 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1990 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1991 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1992 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1993 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1994 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1995 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1996 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1997 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1998 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +1999 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2000 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2001 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2002 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2003 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2004 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2005 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2006 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2007 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2008 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2009 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2010 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2011 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2012 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2013 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2014 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2015 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2016 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2017 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2018 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2019 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2020 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2021 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2022 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2023 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2024 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2025 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2026 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2027 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2028 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2029 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2030 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2031 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2032 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2033 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2034 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2035 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2036 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2037 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2038 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2039 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2040 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2041 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2042 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2043 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2044 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2045 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2046 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2047 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2048 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2049 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2050 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2051 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2052 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2053 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2054 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2055 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2056 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2057 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2058 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2059 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2060 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2061 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2062 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2063 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2064 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2065 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2066 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2067 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2068 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2069 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2070 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2071 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2072 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2073 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2074 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2075 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2076 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2077 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2078 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2079 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2080 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2081 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2082 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2083 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2084 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2085 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2086 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2087 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2088 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2089 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2090 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2091 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2092 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2093 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2094 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2095 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2096 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2097 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2098 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2099 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2100 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2101 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2102 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2103 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2104 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2105 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2106 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2107 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2108 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2109 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2110 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2111 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2112 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2113 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2114 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2115 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2116 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2117 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2118 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2119 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2120 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2121 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2122 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2123 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2124 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2125 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2126 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2127 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2128 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2129 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2130 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2131 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2132 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2133 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2134 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2135 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2136 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2137 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2138 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2139 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2140 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2141 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2142 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2143 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2144 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2145 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2146 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2147 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2148 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2149 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2150 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2151 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2152 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2153 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2154 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2155 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2156 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2157 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2158 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2159 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2160 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2161 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2162 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2163 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2164 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2165 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2166 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2167 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2168 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2169 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2170 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2171 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2172 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2173 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2174 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2175 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2176 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2177 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2178 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2179 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2180 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2181 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2182 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2183 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2184 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2185 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2186 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2187 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2188 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2189 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2190 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2191 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2192 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2193 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2194 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2195 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2196 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2197 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2198 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2199 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2200 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2201 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2202 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2203 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2204 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2205 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2206 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2207 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2208 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2209 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2210 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2211 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2212 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2213 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2214 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2215 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2216 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2217 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2218 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2219 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2220 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2221 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2222 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2223 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2224 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2225 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2226 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2227 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2228 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2229 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2230 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2231 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2232 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2233 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2234 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2235 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2236 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2237 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2238 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2239 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2240 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2241 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2242 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2243 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2244 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2245 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2246 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2247 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2248 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2249 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2250 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2251 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2252 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2253 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2254 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2255 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2256 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2257 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2258 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2259 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2260 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2261 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2262 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2263 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2264 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2265 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2266 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2267 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2268 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2269 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2270 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2271 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2272 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2273 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2274 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2275 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2276 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2277 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2278 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2279 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2280 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2281 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2282 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2283 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2284 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2285 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2286 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2287 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2288 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2289 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2290 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2291 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2292 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2293 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2294 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2295 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2296 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2297 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2298 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2299 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2300 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2301 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2302 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2303 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2304 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2305 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2306 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2307 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2308 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2309 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2310 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2311 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2312 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2313 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2314 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2315 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2316 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2317 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2318 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2319 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2320 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2321 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2322 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2323 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2324 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2325 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2326 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2327 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2328 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2329 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2330 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2331 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2332 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2333 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2334 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2335 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2336 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2337 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2338 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2339 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2340 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2341 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2342 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2343 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2344 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2345 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2346 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2347 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2348 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2349 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2350 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2351 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2352 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2353 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2354 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2355 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2356 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2357 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2358 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2359 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2360 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2361 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2362 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2363 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2364 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2365 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2366 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2367 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2368 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2369 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2370 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2371 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2372 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2373 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2374 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2375 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2376 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2377 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2378 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2379 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2380 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2381 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2382 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2383 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2384 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2385 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2386 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2387 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2388 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2389 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2390 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2391 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2392 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2393 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2394 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2395 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2396 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2397 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2398 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2399 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2400 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2401 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2402 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2403 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2404 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2405 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2406 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2407 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2408 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2409 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2410 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2411 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2412 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2413 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2414 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2415 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2416 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2417 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2418 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2419 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2420 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2421 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2422 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2423 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2424 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2425 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2426 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2427 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2428 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2429 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2430 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2431 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2432 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2433 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2434 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2435 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2436 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2437 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2438 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2439 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2440 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2441 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2442 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2443 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2444 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2445 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2446 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2447 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2448 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2449 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2450 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2451 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2452 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2453 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2454 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2455 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2456 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2457 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2458 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2459 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2460 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2461 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2462 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2463 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2464 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2465 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2466 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2467 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2468 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2469 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2470 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2471 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2472 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2473 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2474 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2475 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2476 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2477 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2478 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2479 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2480 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2481 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2482 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2483 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2484 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2485 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2486 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2487 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2488 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2489 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2490 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2491 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2492 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2493 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2494 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2495 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2496 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2497 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2498 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2499 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2500 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2501 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2502 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2503 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2504 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2505 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2506 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2507 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2508 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2509 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2510 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2511 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2512 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2513 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2514 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2515 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2516 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2517 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2518 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2519 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2520 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2521 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2522 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2523 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2524 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2525 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2526 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2527 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2528 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2529 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2530 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2531 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2532 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2533 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2534 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2535 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2536 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2537 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2538 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2539 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2540 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2541 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2542 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2543 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2544 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2545 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2546 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2547 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2548 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2549 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2550 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2551 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2552 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2553 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2554 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2555 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2556 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2557 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2558 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2559 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2560 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2561 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2562 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2563 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2564 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2565 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2566 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2567 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2568 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2569 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2570 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2571 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2572 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2573 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2574 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2575 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2576 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2577 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2578 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2579 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2580 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2581 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2582 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2583 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2584 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2585 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2586 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2587 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2588 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2589 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2590 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2591 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2592 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2593 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2594 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2595 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2596 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2597 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2598 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2599 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2600 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2601 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2602 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2603 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2604 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2605 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2606 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2607 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2608 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2609 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2610 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2611 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2612 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2613 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2614 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2615 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2616 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2617 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2618 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2619 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2620 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2621 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2622 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2623 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2624 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2625 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2626 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2627 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2628 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2629 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2630 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2631 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2632 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2633 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2634 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2635 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2636 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2637 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2638 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2639 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2640 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2641 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2642 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2643 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2644 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2645 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2646 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2647 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2648 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2649 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2650 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2651 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2652 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2653 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2654 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2655 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2656 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2657 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2658 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2659 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2660 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2661 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2662 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2663 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2664 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2665 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2666 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2667 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2668 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2669 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2670 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2671 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2672 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2673 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2674 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2675 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2676 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2677 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2678 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2679 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2680 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2681 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2682 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2683 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2684 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2685 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2686 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2687 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2688 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2689 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2690 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2691 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2692 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2693 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2694 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2695 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2696 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2697 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2698 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2699 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2700 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2701 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2702 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2703 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2704 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2705 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2706 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2707 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2708 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2709 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2710 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2711 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2712 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2713 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2714 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2715 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2716 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2717 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2718 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2719 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2720 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2721 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2722 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2723 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2724 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2725 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2726 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2727 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2728 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2729 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2730 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2731 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2732 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2733 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2734 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2735 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2736 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2737 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2738 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2739 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2740 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2741 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2742 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2743 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2744 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2745 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2746 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2747 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2748 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2749 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2750 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2751 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2752 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2753 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2754 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2755 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2756 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2757 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2758 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2759 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2760 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2761 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2762 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2763 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2764 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2765 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2766 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2767 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2768 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2769 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2770 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2771 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2772 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2773 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2774 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2775 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2776 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2777 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2778 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2779 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2780 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2781 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2782 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2783 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2784 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2785 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2786 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2787 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2788 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2789 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2790 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2791 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2792 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2793 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2794 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2795 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2796 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2797 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2798 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2799 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2800 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2801 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2802 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2803 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2804 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2805 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2806 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2807 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2808 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2809 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2810 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2811 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2812 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2813 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2814 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2815 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2816 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2817 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2818 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2819 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2820 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2821 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2822 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2823 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2824 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2825 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2826 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2827 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2828 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2829 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2830 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2831 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2832 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2833 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2834 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2835 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2836 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2837 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2838 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2839 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2840 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2841 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2842 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2843 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2844 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2845 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2846 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2847 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2848 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2849 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2850 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2851 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2852 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2853 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2854 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2855 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2856 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2857 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2858 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2859 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2860 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2861 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2862 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2863 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2864 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2865 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2866 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2867 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2868 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2869 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2870 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2871 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2872 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2873 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2874 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2875 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2876 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2877 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2878 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2879 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2880 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2881 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2882 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2883 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2884 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2885 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2886 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2887 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2888 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2889 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2890 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2891 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2892 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2893 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2894 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2895 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2896 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2897 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2898 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2899 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2900 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2901 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2902 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2903 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2904 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2905 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2906 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2907 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2908 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2909 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2910 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2911 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2912 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2913 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2914 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2915 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2916 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2917 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2918 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2919 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2920 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2921 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2922 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2923 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2924 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2925 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2926 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2927 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2928 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2929 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2930 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2931 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2932 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2933 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2934 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2935 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2936 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2937 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2938 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2939 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2940 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2941 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2942 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2943 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2944 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2945 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2946 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2947 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2948 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2949 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2950 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2951 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2952 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2953 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2954 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2955 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2956 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2957 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2958 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2959 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2960 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2961 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2962 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2963 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2964 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2965 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2966 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2967 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2968 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2969 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2970 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2971 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2972 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2973 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2974 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2975 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2976 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2977 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2978 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2979 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2980 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2981 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2982 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2983 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2984 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2985 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2986 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2987 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2988 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2989 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2990 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2991 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2992 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2993 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2994 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2995 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2996 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2997 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2998 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +2999 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3000 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3001 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3002 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3003 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3004 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3005 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3006 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3007 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3008 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3009 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3010 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3011 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3012 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3013 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3014 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3015 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3016 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3017 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3018 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3019 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3020 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3021 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3022 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3023 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3024 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3025 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3026 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3027 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3028 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3029 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3030 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3031 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3032 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3033 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3034 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3035 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3036 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3037 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3038 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3039 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3040 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3041 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3042 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3043 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3044 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3045 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3046 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3047 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3048 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3049 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3050 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3051 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3052 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3053 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3054 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3055 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3056 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3057 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3058 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3059 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3060 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3061 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3062 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3063 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3064 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3065 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3066 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3067 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3068 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3069 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3070 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3071 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3072 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3073 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3074 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3075 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3076 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3077 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3078 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3079 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3080 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3081 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3082 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3083 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3084 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3085 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3086 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3087 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3088 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3089 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3090 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3091 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3092 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3093 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3094 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3095 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3096 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3097 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3098 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3099 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3100 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3101 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3102 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3103 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3104 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3105 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3106 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3107 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3108 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3109 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3110 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3111 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3112 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3113 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3114 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3115 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3116 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3117 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3118 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3119 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3120 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3121 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3122 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3123 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3124 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3125 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3126 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3127 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3128 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3129 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3130 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3131 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3132 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3133 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3134 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3135 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3136 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3137 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3138 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3139 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3140 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3141 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3142 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3143 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3144 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3145 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3146 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3147 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3148 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3149 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3150 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3151 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3152 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3153 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3154 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3155 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3156 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3157 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3158 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3159 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3160 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3161 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3162 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3163 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3164 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3165 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3166 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3167 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3168 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3169 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3170 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3171 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3172 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3173 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3174 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3175 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3176 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3177 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3178 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3179 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3180 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3181 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3182 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3183 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3184 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3185 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3186 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3187 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3188 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3189 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3190 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3191 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3192 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3193 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3194 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3195 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3196 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3197 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3198 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3199 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3200 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3201 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3202 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3203 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3204 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3205 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3206 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3207 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3208 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3209 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3210 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3211 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3212 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3213 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3214 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3215 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3216 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3217 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3218 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3219 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3220 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3221 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3222 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3223 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3224 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3225 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3226 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3227 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3228 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3229 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3230 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3231 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3232 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3233 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3234 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3235 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3236 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3237 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3238 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3239 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3240 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3241 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3242 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3243 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3244 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3245 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3246 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3247 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3248 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3249 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3250 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3251 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3252 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3253 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3254 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3255 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3256 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3257 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3258 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3259 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3260 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3261 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3262 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3263 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3264 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3265 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3266 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3267 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3268 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3269 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3270 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3271 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3272 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3273 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3274 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3275 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3276 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3277 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3278 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3279 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3280 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3281 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3282 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3283 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3284 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3285 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3286 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3287 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3288 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3289 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3290 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3291 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3292 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3293 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3294 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3295 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3296 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3297 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3298 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3299 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3300 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3301 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3302 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3303 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3304 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3305 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3306 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3307 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3308 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3309 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3310 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3311 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3312 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3313 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3314 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3315 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3316 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3317 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3318 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3319 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3320 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3321 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3322 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3323 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3324 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3325 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3326 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3327 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3328 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3329 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3330 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3331 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3332 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3333 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3334 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3335 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3336 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3337 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3338 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3339 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3340 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3341 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3342 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3343 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3344 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3345 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3346 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3347 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3348 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3349 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3350 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3351 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3352 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3353 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3354 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3355 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3356 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3357 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3358 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3359 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3360 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3361 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3362 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3363 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3364 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3365 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3366 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3367 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3368 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3369 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3370 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3371 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3372 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3373 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3374 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3375 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3376 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3377 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3378 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3379 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3380 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3381 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3382 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3383 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3384 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3385 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3386 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3387 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3388 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3389 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3390 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3391 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3392 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3393 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3394 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3395 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3396 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3397 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3398 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3399 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3400 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3401 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3402 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3403 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3404 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3405 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3406 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3407 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3408 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3409 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3410 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3411 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3412 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3413 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3414 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3415 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3416 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3417 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3418 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3419 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3420 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3421 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3422 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3423 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3424 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3425 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3426 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3427 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3428 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3429 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3430 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3431 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3432 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3433 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3434 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3435 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3436 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3437 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3438 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3439 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3440 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3441 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3442 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3443 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3444 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3445 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3446 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3447 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3448 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3449 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3450 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3451 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3452 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3453 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3454 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3455 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3456 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3457 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3458 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3459 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3460 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3461 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3462 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3463 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3464 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3465 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3466 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3467 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3468 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3469 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3470 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3471 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3472 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3473 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3474 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3475 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3476 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3477 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3478 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3479 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3480 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3481 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3482 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3483 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3484 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3485 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3486 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3487 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3488 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3489 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3490 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3491 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3492 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3493 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3494 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3495 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3496 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3497 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3498 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3499 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3500 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3501 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3502 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3503 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3504 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3505 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3506 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3507 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3508 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3509 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3510 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3511 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3512 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3513 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3514 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3515 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3516 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3517 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3518 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3519 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3520 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3521 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3522 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3523 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3524 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3525 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3526 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3527 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3528 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3529 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3530 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3531 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3532 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3533 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3534 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3535 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3536 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3537 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3538 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3539 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3540 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3541 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3542 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3543 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3544 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3545 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3546 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3547 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3548 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3549 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3550 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3551 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3552 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3553 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3554 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3555 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3556 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3557 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3558 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3559 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3560 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3561 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3562 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3563 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3564 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3565 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3566 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3567 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3568 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3569 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3570 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3571 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3572 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3573 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3574 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3575 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3576 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3577 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3578 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3579 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3580 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3581 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3582 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3583 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3584 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3585 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3586 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3587 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3588 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3589 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3590 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3591 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3592 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3593 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3594 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3595 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3596 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3597 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3598 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3599 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3600 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3601 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3602 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3603 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3604 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3605 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3606 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3607 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3608 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3609 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3610 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3611 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3612 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3613 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3614 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3615 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3616 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3617 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3618 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3619 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3620 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3621 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3622 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3623 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3624 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3625 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3626 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3627 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3628 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3629 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3630 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3631 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3632 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3633 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3634 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3635 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3636 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3637 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3638 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3639 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3640 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3641 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3642 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3643 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3644 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3645 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3646 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3647 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3648 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3649 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3650 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3651 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3652 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3653 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3654 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3655 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3656 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3657 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3658 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3659 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3660 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3661 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3662 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3663 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3664 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3665 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3666 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3667 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3668 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3669 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3670 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3671 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3672 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3673 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3674 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3675 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3676 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3677 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3678 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3679 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3680 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3681 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3682 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3683 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3684 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3685 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3686 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3687 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3688 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3689 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3690 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3691 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3692 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3693 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3694 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3695 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3696 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3697 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3698 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3699 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3700 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3701 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3702 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3703 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3704 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3705 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3706 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3707 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3708 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3709 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3710 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3711 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3712 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3713 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3714 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3715 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3716 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3717 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3718 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3719 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3720 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3721 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3722 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3723 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3724 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3725 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3726 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3727 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3728 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3729 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3730 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3731 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3732 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3733 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3734 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3735 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3736 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3737 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3738 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3739 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3740 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3741 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3742 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3743 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3744 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3745 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3746 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3747 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3748 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3749 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3750 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3751 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3752 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3753 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3754 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3755 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3756 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3757 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3758 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3759 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3760 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3761 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3762 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3763 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3764 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3765 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3766 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3767 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3768 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3769 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3770 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3771 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3772 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3773 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3774 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3775 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3776 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3777 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3778 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3779 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3780 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3781 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3782 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3783 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3784 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3785 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3786 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3787 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3788 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3789 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3790 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3791 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3792 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3793 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3794 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3795 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3796 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3797 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3798 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3799 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3800 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3801 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3802 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3803 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3804 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3805 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3806 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3807 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3808 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3809 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3810 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3811 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3812 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3813 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3814 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3815 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3816 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3817 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3818 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3819 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3820 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3821 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3822 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3823 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3824 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3825 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3826 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3827 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3828 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3829 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3830 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3831 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3832 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3833 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3834 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3835 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3836 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3837 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3838 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3839 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3840 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3841 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3842 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3843 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3844 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3845 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3846 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3847 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3848 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3849 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3850 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3851 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3852 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3853 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3854 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3855 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3856 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3857 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3858 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3859 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3860 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3861 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3862 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3863 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3864 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3865 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3866 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3867 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3868 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3869 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3870 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3871 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3872 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3873 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3874 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3875 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3876 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3877 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3878 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3879 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3880 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3881 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3882 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3883 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3884 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3885 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3886 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3887 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3888 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3889 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3890 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3891 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3892 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3893 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3894 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3895 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3896 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3897 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3898 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3899 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3900 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3901 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3902 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3903 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3904 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3905 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3906 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3907 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3908 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3909 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3910 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3911 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3912 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3913 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3914 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3915 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3916 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3917 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3918 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3919 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3920 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3921 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3922 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3923 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3924 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3925 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3926 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3927 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3928 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3929 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3930 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3931 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3932 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3933 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3934 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3935 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3936 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3937 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3938 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3939 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3940 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3941 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3942 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3943 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3944 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3945 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3946 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3947 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3948 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3949 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3950 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3951 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3952 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3953 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3954 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3955 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3956 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3957 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3958 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3959 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3960 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3961 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3962 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3963 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3964 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3965 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3966 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3967 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3968 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3969 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3970 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3971 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3972 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3973 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3974 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3975 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3976 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3977 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3978 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3979 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3980 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3981 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3982 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3983 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3984 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3985 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3986 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3987 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3988 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3989 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3990 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3991 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3992 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3993 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3994 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3995 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3996 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3997 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3998 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +3999 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4000 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4001 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4002 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4003 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4004 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4005 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4006 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4007 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4008 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4009 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4010 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4011 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4012 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4013 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4014 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4015 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4016 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4017 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4018 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4019 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4020 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4021 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4022 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4023 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4024 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4025 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4026 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4027 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4028 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4029 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4030 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4031 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4032 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4033 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4034 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4035 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4036 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4037 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4038 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4039 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4040 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4041 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4042 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4043 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4044 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4045 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4046 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4047 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4048 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4049 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4050 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4051 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4052 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4053 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4054 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4055 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4056 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4057 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4058 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4059 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4060 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4061 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4062 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4063 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4064 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4065 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4066 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4067 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4068 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4069 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4070 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4071 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4072 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4073 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4074 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4075 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4076 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4077 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4078 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4079 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4080 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4081 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4082 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4083 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4084 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4085 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4086 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4087 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4088 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4089 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4090 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4091 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4092 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4093 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4094 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4095 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4096 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4097 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4098 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4099 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4100 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4101 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4102 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4103 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4104 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4105 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4106 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4107 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4108 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4109 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4110 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4111 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4112 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4113 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4114 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4115 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4116 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4117 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4118 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4119 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4120 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4121 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4122 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4123 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4124 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4125 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4126 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4127 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4128 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4129 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4130 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4131 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4132 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4133 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4134 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4135 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4136 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4137 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4138 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4139 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4140 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4141 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4142 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4143 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4144 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4145 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4146 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4147 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4148 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4149 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4150 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4151 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4152 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4153 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4154 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4155 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4156 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4157 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4158 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4159 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4160 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4161 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4162 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4163 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4164 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4165 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4166 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4167 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4168 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4169 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4170 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4171 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4172 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4173 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4174 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4175 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4176 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4177 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4178 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4179 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4180 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4181 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4182 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4183 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4184 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4185 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4186 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4187 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4188 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4189 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4190 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4191 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4192 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4193 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4194 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4195 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4196 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4197 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4198 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4199 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4200 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4201 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4202 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4203 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4204 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4205 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4206 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4207 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4208 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4209 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4210 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4211 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4212 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4213 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4214 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4215 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4216 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4217 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4218 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4219 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4220 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4221 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4222 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4223 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4224 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4225 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4226 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4227 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4228 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4229 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4230 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4231 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4232 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4233 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4234 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4235 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4236 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4237 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4238 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4239 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4240 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4241 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4242 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4243 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4244 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4245 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4246 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4247 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4248 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4249 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4250 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4251 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4252 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4253 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4254 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4255 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4256 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4257 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4258 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4259 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4260 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4261 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4262 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4263 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4264 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4265 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4266 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4267 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4268 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4269 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4270 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4271 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4272 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4273 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4274 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4275 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4276 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4277 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4278 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4279 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4280 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4281 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4282 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4283 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4284 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4285 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4286 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4287 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4288 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4289 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4290 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4291 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4292 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4293 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4294 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4295 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4296 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4297 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4298 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4299 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4300 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4301 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4302 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4303 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4304 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4305 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4306 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4307 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4308 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4309 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4310 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4311 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4312 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4313 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4314 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4315 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4316 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4317 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4318 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4319 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4320 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4321 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4322 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4323 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4324 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4325 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4326 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4327 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4328 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4329 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4330 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4331 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4332 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4333 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4334 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4335 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4336 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4337 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4338 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4339 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4340 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4341 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4342 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4343 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4344 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4345 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4346 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4347 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4348 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4349 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4350 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4351 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4352 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4353 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4354 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4355 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4356 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4357 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4358 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4359 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4360 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4361 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4362 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4363 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4364 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4365 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4366 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4367 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4368 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4369 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4370 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4371 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4372 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4373 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4374 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4375 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4376 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4377 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4378 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4379 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4380 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4381 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4382 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4383 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4384 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4385 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4386 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4387 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4388 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4389 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4390 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4391 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4392 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4393 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4394 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4395 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4396 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4397 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4398 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4399 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4400 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4401 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4402 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4403 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4404 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4405 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4406 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4407 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4408 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4409 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4410 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4411 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4412 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4413 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4414 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4415 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4416 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4417 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4418 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4419 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4420 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4421 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4422 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4423 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4424 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4425 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4426 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4427 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4428 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4429 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4430 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4431 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4432 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4433 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4434 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4435 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4436 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4437 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4438 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4439 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4440 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4441 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4442 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4443 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4444 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4445 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4446 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4447 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4448 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4449 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4450 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4451 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4452 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4453 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4454 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4455 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4456 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4457 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4458 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4459 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4460 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4461 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4462 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4463 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4464 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4465 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4466 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4467 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4468 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4469 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4470 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4471 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4472 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4473 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4474 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4475 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4476 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4477 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4478 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4479 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4480 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4481 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4482 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4483 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4484 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4485 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4486 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4487 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4488 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4489 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4490 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4491 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4492 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4493 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4494 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4495 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4496 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4497 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4498 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4499 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4500 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4501 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4502 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4503 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4504 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4505 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4506 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4507 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4508 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4509 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4510 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4511 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4512 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4513 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4514 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4515 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4516 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4517 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4518 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4519 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4520 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4521 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4522 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4523 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4524 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4525 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4526 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4527 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4528 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4529 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4530 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4531 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4532 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4533 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4534 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4535 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4536 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4537 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4538 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4539 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4540 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4541 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4542 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4543 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4544 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4545 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4546 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4547 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4548 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4549 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4550 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4551 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4552 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4553 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4554 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4555 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4556 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4557 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4558 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4559 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4560 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4561 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4562 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4563 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4564 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4565 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4566 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4567 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4568 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4569 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4570 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4571 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4572 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4573 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4574 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4575 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4576 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4577 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4578 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4579 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4580 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4581 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4582 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4583 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4584 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4585 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4586 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4587 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4588 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4589 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4590 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4591 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4592 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4593 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4594 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4595 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4596 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4597 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4598 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4599 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4600 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4601 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4602 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4603 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4604 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4605 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4606 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4607 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4608 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4609 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4610 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4611 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4612 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4613 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4614 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4615 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4616 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4617 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4618 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4619 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4620 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4621 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4622 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4623 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4624 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4625 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4626 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4627 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4628 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4629 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4630 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4631 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4632 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4633 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4634 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4635 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4636 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4637 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4638 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4639 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4640 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4641 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4642 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4643 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4644 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4645 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4646 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4647 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4648 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4649 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4650 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4651 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4652 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4653 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4654 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4655 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4656 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4657 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4658 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4659 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4660 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4661 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4662 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4663 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4664 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4665 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4666 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4667 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4668 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4669 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4670 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4671 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4672 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4673 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4674 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4675 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4676 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4677 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4678 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4679 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4680 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4681 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4682 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4683 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4684 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4685 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4686 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4687 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4688 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4689 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4690 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4691 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4692 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4693 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4694 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4695 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4696 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4697 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4698 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4699 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4700 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4701 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4702 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4703 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4704 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4705 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4706 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4707 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4708 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4709 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4710 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4711 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4712 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4713 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4714 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4715 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4716 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4717 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4718 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4719 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4720 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4721 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4722 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4723 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4724 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4725 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4726 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4727 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4728 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4729 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4730 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4731 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4732 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4733 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4734 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4735 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4736 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4737 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4738 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4739 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4740 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4741 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4742 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4743 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4744 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4745 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4746 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4747 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4748 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4749 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4750 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4751 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4752 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4753 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4754 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4755 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4756 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4757 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4758 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4759 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4760 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4761 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4762 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4763 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4764 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4765 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4766 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4767 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4768 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4769 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4770 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4771 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4772 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4773 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4774 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4775 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4776 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4777 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4778 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4779 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4780 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4781 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4782 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4783 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4784 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4785 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4786 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4787 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4788 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4789 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4790 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4791 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4792 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4793 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4794 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4795 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4796 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4797 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4798 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4799 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4800 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4801 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4802 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4803 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4804 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4805 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4806 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4807 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4808 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4809 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4810 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4811 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4812 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4813 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4814 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4815 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4816 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4817 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4818 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4819 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4820 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4821 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4822 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4823 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4824 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4825 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4826 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4827 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4828 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4829 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4830 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4831 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4832 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4833 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4834 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4835 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4836 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4837 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4838 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4839 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4840 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4841 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4842 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4843 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4844 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4845 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4846 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4847 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4848 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4849 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4850 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4851 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4852 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4853 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4854 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4855 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4856 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4857 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4858 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4859 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4860 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4861 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4862 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4863 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4864 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4865 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4866 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4867 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4868 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4869 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4870 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4871 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4872 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4873 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4874 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4875 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4876 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4877 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4878 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4879 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4880 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4881 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4882 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4883 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4884 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4885 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4886 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4887 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4888 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4889 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4890 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4891 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4892 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4893 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4894 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4895 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4896 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4897 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4898 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4899 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4900 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4901 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4902 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4903 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4904 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4905 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4906 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4907 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4908 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4909 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4910 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4911 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4912 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4913 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4914 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4915 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4916 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4917 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4918 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4919 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4920 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4921 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4922 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4923 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4924 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4925 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4926 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4927 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4928 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4929 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4930 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4931 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4932 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4933 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4934 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4935 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4936 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4937 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4938 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4939 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4940 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4941 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4942 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4943 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4944 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4945 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4946 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4947 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4948 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4949 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4950 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4951 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4952 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4953 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4954 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4955 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4956 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4957 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4958 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4959 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4960 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4961 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4962 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4963 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4964 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4965 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4966 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4967 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4968 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4969 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4970 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4971 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4972 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4973 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4974 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4975 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4976 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4977 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4978 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4979 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4980 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4981 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4982 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4983 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4984 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4985 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4986 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4987 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4988 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4989 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4990 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4991 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4992 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4993 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4994 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4995 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4996 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4997 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4998 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +4999 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5000 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5001 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5002 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5003 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5004 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5005 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5006 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5007 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5008 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5009 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5010 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5011 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5012 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5013 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5014 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5015 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5016 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5017 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5018 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5019 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5020 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5021 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5022 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5023 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5024 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5025 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5026 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5027 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5028 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5029 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5030 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5031 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5032 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5033 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5034 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5035 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5036 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5037 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5038 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5039 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5040 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5041 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5042 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5043 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5044 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5045 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5046 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5047 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5048 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5049 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5050 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5051 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5052 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5053 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5054 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5055 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5056 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5057 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5058 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5059 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5060 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5061 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5062 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5063 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5064 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5065 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5066 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5067 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5068 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5069 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5070 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5071 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5072 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5073 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5074 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5075 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5076 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5077 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5078 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5079 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5080 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5081 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5082 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5083 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5084 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5085 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5086 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5087 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5088 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5089 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5090 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5091 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5092 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5093 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5094 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5095 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5096 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5097 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5098 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5099 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5100 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5101 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5102 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5103 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5104 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5105 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5106 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5107 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5108 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5109 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5110 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5111 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5112 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5113 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5114 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5115 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5116 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5117 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5118 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5119 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5120 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5121 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5122 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5123 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5124 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5125 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5126 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5127 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5128 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5129 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5130 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5131 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5132 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5133 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5134 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5135 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5136 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5137 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5138 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5139 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5140 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5141 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5142 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5143 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5144 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5145 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5146 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5147 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5148 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5149 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5150 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5151 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5152 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5153 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5154 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5155 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5156 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5157 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5158 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5159 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5160 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5161 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5162 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5163 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5164 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5165 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5166 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5167 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5168 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5169 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5170 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5171 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5172 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5173 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5174 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5175 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5176 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5177 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5178 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5179 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5180 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5181 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5182 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5183 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5184 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5185 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5186 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5187 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5188 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5189 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5190 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5191 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5192 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5193 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5194 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5195 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5196 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5197 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5198 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5199 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5200 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5201 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5202 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5203 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5204 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5205 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5206 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5207 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5208 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5209 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5210 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5211 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5212 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5213 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5214 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5215 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5216 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5217 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5218 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5219 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5220 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5221 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5222 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5223 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5224 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5225 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5226 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5227 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5228 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5229 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5230 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5231 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5232 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5233 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5234 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5235 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5236 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5237 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5238 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5239 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5240 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5241 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5242 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5243 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5244 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5245 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5246 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5247 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5248 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5249 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5250 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5251 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5252 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5253 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5254 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5255 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5256 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5257 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5258 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5259 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5260 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5261 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5262 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5263 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5264 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5265 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5266 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5267 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5268 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5269 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5270 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5271 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5272 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5273 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5274 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5275 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5276 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5277 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5278 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5279 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5280 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5281 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5282 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5283 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5284 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5285 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5286 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5287 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5288 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5289 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5290 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5291 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5292 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5293 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5294 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5295 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5296 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5297 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5298 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5299 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5300 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5301 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5302 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5303 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5304 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5305 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5306 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5307 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5308 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5309 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5310 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5311 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5312 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5313 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5314 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5315 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5316 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5317 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5318 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5319 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5320 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5321 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5322 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5323 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5324 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5325 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5326 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5327 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5328 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5329 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5330 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5331 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5332 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5333 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5334 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5335 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5336 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5337 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5338 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5339 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5340 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5341 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5342 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5343 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5344 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5345 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5346 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5347 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5348 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5349 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5350 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5351 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5352 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5353 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5354 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5355 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5356 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5357 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5358 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5359 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5360 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5361 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5362 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5363 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5364 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5365 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5366 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5367 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5368 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5369 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5370 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5371 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5372 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5373 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5374 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5375 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5376 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5377 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5378 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5379 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5380 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5381 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5382 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5383 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5384 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5385 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5386 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5387 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5388 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5389 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5390 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5391 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5392 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5393 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5394 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5395 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5396 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5397 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5398 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5399 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5400 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5401 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5402 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5403 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5404 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5405 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5406 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5407 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5408 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5409 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5410 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5411 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5412 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5413 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5414 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5415 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5416 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5417 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5418 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5419 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5420 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5421 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5422 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5423 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5424 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5425 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5426 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5427 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5428 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5429 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5430 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5431 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5432 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5433 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5434 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5435 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5436 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5437 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5438 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5439 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5440 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5441 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5442 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5443 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5444 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5445 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5446 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5447 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5448 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5449 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5450 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5451 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5452 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5453 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5454 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5455 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5456 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5457 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5458 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5459 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5460 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5461 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5462 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5463 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5464 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5465 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5466 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5467 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5468 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5469 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5470 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5471 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5472 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5473 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5474 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5475 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5476 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5477 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5478 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5479 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5480 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5481 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5482 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5483 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5484 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5485 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5486 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5487 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5488 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5489 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5490 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5491 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5492 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5493 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5494 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5495 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5496 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5497 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5498 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5499 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5500 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5501 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5502 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5503 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5504 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5505 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5506 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5507 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5508 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5509 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5510 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5511 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5512 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5513 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5514 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5515 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5516 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5517 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5518 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5519 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5520 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5521 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5522 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5523 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5524 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5525 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5526 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5527 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5528 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5529 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5530 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5531 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5532 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5533 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5534 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5535 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5536 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5537 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5538 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5539 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5540 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5541 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5542 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5543 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5544 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5545 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5546 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5547 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5548 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5549 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5550 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5551 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5552 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5553 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5554 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5555 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5556 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5557 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5558 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5559 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5560 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5561 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5562 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5563 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5564 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5565 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5566 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5567 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5568 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5569 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5570 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5571 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5572 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5573 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5574 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5575 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5576 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5577 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5578 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5579 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5580 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5581 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5582 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5583 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5584 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5585 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5586 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5587 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5588 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5589 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5590 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5591 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5592 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5593 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5594 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5595 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5596 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5597 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5598 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5599 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5600 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5601 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5602 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5603 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5604 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5605 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5606 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5607 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5608 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5609 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5610 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5611 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5612 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5613 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5614 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5615 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5616 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5617 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5618 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5619 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5620 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5621 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5622 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5623 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5624 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5625 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5626 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5627 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5628 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5629 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5630 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5631 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5632 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5633 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5634 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5635 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5636 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5637 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5638 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5639 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5640 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5641 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5642 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5643 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5644 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5645 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5646 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5647 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5648 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5649 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5650 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5651 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5652 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5653 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5654 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5655 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5656 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5657 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5658 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5659 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5660 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5661 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5662 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5663 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5664 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5665 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5666 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5667 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5668 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5669 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5670 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5671 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5672 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5673 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5674 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5675 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5676 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5677 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5678 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5679 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5680 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5681 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5682 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5683 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5684 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5685 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5686 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5687 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5688 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5689 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5690 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5691 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5692 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5693 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5694 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5695 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5696 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5697 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5698 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5699 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5700 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5701 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5702 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5703 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5704 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5705 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5706 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5707 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5708 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5709 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5710 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5711 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5712 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5713 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5714 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5715 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5716 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5717 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5718 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5719 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5720 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5721 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5722 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5723 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5724 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5725 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5726 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5727 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5728 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5729 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5730 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5731 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5732 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5733 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5734 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5735 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5736 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5737 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5738 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5739 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5740 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5741 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5742 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5743 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5744 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5745 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5746 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5747 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5748 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5749 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5750 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5751 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5752 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5753 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5754 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5755 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5756 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5757 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5758 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5759 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5760 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5761 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5762 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5763 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5764 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5765 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5766 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5767 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5768 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5769 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5770 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5771 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5772 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5773 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5774 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5775 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5776 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5777 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5778 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5779 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5780 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5781 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5782 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5783 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5784 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5785 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5786 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5787 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5788 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5789 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5790 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5791 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5792 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5793 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5794 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5795 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5796 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5797 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5798 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5799 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5800 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5801 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5802 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5803 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5804 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5805 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5806 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5807 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5808 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5809 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5810 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5811 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5812 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5813 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5814 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5815 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5816 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5817 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5818 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5819 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5820 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5821 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5822 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5823 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5824 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5825 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5826 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5827 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5828 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5829 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5830 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5831 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5832 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5833 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5834 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5835 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5836 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5837 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5838 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5839 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5840 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5841 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5842 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5843 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5844 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5845 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5846 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5847 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5848 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5849 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5850 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5851 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5852 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5853 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5854 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5855 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5856 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5857 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5858 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5859 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5860 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5861 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5862 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5863 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5864 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5865 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5866 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5867 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5868 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5869 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5870 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5871 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5872 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5873 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5874 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5875 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5876 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5877 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5878 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5879 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5880 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5881 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5882 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5883 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5884 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5885 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5886 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5887 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5888 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5889 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5890 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5891 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5892 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5893 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5894 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5895 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5896 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5897 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5898 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5899 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5900 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5901 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5902 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5903 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5904 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5905 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5906 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5907 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5908 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5909 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5910 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5911 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5912 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5913 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5914 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5915 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5916 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5917 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5918 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5919 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5920 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5921 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5922 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5923 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5924 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5925 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5926 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5927 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5928 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5929 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5930 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5931 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5932 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5933 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5934 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5935 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5936 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5937 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5938 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5939 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5940 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5941 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5942 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5943 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5944 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5945 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5946 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5947 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5948 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5949 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5950 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5951 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5952 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5953 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5954 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5955 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5956 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5957 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5958 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5959 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5960 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5961 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5962 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5963 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5964 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5965 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5966 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5967 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5968 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5969 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5970 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5971 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5972 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5973 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5974 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5975 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5976 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5977 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5978 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5979 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5980 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5981 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5982 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5983 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5984 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5985 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5986 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5987 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5988 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5989 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5990 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5991 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5992 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5993 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5994 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5995 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5996 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5997 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5998 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +5999 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6000 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6001 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6002 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6003 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6004 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6005 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6006 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6007 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6008 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6009 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6010 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6011 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6012 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6013 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6014 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6015 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6016 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6017 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6018 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6019 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6020 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6021 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6022 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6023 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6024 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6025 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6026 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6027 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6028 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6029 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6030 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6031 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6032 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6033 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6034 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6035 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6036 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6037 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6038 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6039 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6040 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6041 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6042 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6043 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6044 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6045 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6046 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6047 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6048 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6049 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6050 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6051 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6052 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6053 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6054 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6055 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6056 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6057 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6058 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6059 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6060 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6061 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6062 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6063 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6064 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6065 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6066 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6067 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6068 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6069 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6070 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6071 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6072 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6073 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6074 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6075 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6076 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6077 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6078 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6079 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6080 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6081 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6082 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6083 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6084 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6085 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6086 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6087 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6088 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6089 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6090 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6091 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6092 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6093 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6094 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6095 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6096 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6097 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6098 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6099 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6100 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6101 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6102 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6103 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6104 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6105 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6106 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6107 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6108 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6109 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6110 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6111 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6112 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6113 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6114 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6115 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6116 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6117 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6118 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6119 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6120 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6121 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6122 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6123 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6124 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6125 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6126 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6127 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6128 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6129 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6130 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6131 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6132 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6133 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6134 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6135 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6136 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6137 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6138 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6139 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6140 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6141 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6142 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6143 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6144 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6145 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6146 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6147 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6148 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6149 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6150 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6151 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6152 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6153 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6154 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6155 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6156 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6157 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6158 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6159 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6160 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6161 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6162 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6163 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6164 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6165 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6166 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6167 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6168 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6169 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6170 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6171 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6172 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6173 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6174 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6175 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6176 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6177 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6178 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6179 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6180 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6181 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6182 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6183 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6184 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6185 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6186 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6187 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6188 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6189 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6190 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6191 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6192 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6193 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6194 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6195 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6196 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6197 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6198 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6199 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6200 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6201 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6202 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6203 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6204 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6205 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6206 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6207 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6208 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6209 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6210 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6211 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6212 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6213 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6214 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6215 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6216 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6217 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6218 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6219 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6220 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6221 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6222 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6223 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6224 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6225 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6226 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6227 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6228 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6229 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6230 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6231 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6232 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6233 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6234 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6235 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6236 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6237 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6238 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6239 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6240 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6241 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6242 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6243 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6244 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6245 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6246 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6247 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6248 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6249 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6250 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6251 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6252 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6253 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6254 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6255 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6256 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6257 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6258 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6259 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6260 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6261 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6262 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6263 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6264 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6265 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6266 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6267 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6268 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6269 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6270 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6271 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6272 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6273 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6274 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6275 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6276 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6277 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6278 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6279 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6280 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6281 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6282 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6283 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6284 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6285 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6286 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6287 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6288 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6289 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6290 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6291 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6292 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6293 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6294 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6295 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6296 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6297 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6298 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6299 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6300 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6301 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6302 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6303 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6304 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6305 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6306 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6307 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6308 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6309 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6310 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6311 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6312 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6313 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6314 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6315 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6316 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6317 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6318 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6319 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6320 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6321 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6322 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6323 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6324 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6325 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6326 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6327 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6328 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6329 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6330 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6331 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6332 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6333 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6334 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6335 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6336 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6337 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6338 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6339 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6340 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6341 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6342 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6343 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6344 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6345 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6346 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6347 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6348 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6349 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6350 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6351 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6352 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6353 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6354 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6355 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6356 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6357 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6358 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6359 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6360 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6361 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6362 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6363 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6364 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6365 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6366 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6367 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6368 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6369 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6370 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6371 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6372 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6373 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6374 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6375 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6376 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6377 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6378 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6379 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6380 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6381 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6382 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6383 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6384 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6385 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6386 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6387 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6388 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6389 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6390 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6391 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6392 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6393 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6394 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6395 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6396 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6397 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6398 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6399 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6400 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6401 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6402 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6403 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6404 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6405 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6406 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6407 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6408 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6409 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6410 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6411 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6412 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6413 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6414 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6415 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6416 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6417 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6418 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6419 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6420 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6421 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6422 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6423 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6424 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6425 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6426 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6427 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6428 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6429 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6430 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6431 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6432 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6433 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6434 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6435 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6436 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6437 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6438 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6439 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6440 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6441 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6442 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6443 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6444 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6445 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6446 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6447 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6448 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6449 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6450 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6451 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6452 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6453 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6454 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6455 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6456 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6457 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6458 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6459 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6460 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6461 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6462 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6463 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6464 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6465 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6466 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6467 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6468 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6469 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6470 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6471 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6472 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6473 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6474 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6475 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6476 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6477 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6478 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6479 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6480 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6481 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6482 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6483 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6484 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6485 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6486 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6487 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6488 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6489 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6490 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6491 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6492 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6493 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6494 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6495 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6496 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6497 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6498 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6499 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6500 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6501 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6502 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6503 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6504 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6505 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6506 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6507 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6508 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6509 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6510 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6511 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6512 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6513 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6514 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6515 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6516 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6517 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6518 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6519 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6520 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6521 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6522 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6523 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6524 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6525 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6526 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6527 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6528 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6529 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6530 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6531 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6532 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6533 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6534 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6535 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6536 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6537 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6538 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6539 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6540 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6541 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6542 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6543 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6544 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6545 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6546 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6547 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6548 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6549 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6550 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6551 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6552 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6553 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6554 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6555 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6556 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6557 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6558 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6559 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6560 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6561 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6562 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6563 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6564 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6565 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6566 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6567 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6568 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6569 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6570 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6571 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6572 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6573 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6574 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6575 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6576 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6577 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6578 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6579 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6580 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6581 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6582 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6583 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6584 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6585 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6586 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6587 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6588 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6589 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6590 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6591 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6592 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6593 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6594 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6595 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6596 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6597 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6598 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6599 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6600 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6601 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6602 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6603 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6604 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6605 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6606 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6607 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6608 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6609 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6610 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6611 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6612 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6613 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6614 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6615 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6616 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6617 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6618 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6619 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6620 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6621 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6622 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6623 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6624 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6625 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6626 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6627 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6628 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6629 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6630 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6631 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6632 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6633 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6634 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6635 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6636 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6637 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6638 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6639 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6640 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6641 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6642 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6643 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6644 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6645 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6646 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6647 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6648 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6649 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6650 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6651 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6652 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6653 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6654 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6655 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6656 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6657 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6658 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6659 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6660 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6661 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6662 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6663 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6664 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6665 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6666 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6667 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6668 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6669 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6670 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6671 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6672 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6673 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6674 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6675 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6676 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6677 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6678 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6679 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6680 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6681 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6682 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6683 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6684 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6685 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6686 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6687 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6688 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6689 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6690 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6691 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6692 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6693 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6694 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6695 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6696 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6697 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6698 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6699 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6700 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6701 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6702 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6703 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6704 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6705 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6706 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6707 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6708 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6709 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6710 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6711 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6712 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6713 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6714 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6715 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6716 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6717 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6718 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6719 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6720 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6721 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6722 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6723 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6724 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6725 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6726 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6727 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6728 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6729 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6730 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6731 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6732 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6733 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6734 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6735 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6736 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6737 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6738 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6739 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6740 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6741 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6742 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6743 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6744 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6745 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6746 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6747 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6748 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6749 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6750 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6751 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6752 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6753 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6754 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6755 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6756 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6757 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6758 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6759 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6760 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6761 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6762 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6763 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6764 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6765 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6766 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6767 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6768 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6769 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6770 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6771 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6772 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6773 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6774 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6775 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6776 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6777 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6778 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6779 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6780 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6781 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6782 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6783 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6784 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6785 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6786 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6787 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6788 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6789 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6790 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6791 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6792 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6793 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6794 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6795 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6796 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6797 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6798 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6799 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6800 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6801 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6802 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6803 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6804 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6805 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6806 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6807 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6808 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6809 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6810 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6811 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6812 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6813 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6814 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6815 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6816 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6817 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6818 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6819 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6820 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6821 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6822 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6823 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6824 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6825 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6826 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6827 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6828 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6829 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6830 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6831 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6832 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6833 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6834 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6835 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6836 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6837 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6838 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6839 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6840 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6841 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6842 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6843 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6844 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6845 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6846 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6847 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6848 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6849 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6850 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6851 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6852 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6853 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6854 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6855 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6856 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6857 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6858 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6859 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6860 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6861 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6862 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6863 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6864 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6865 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6866 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6867 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6868 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6869 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6870 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6871 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6872 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6873 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6874 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6875 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6876 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6877 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6878 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6879 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6880 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6881 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6882 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6883 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6884 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6885 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6886 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6887 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6888 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6889 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6890 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6891 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6892 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6893 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6894 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6895 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6896 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6897 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6898 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6899 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6900 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6901 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6902 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6903 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6904 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6905 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6906 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6907 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6908 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6909 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6910 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6911 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6912 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6913 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6914 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6915 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6916 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6917 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6918 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6919 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6920 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6921 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6922 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6923 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6924 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6925 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6926 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6927 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6928 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6929 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6930 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6931 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6932 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6933 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6934 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6935 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6936 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6937 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6938 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6939 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6940 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6941 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6942 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6943 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6944 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6945 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6946 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6947 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6948 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6949 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6950 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6951 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6952 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6953 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6954 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6955 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6956 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6957 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6958 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6959 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6960 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6961 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6962 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6963 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6964 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6965 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6966 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6967 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6968 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6969 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6970 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6971 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6972 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6973 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6974 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6975 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6976 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6977 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6978 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6979 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6980 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6981 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6982 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6983 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6984 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6985 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6986 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6987 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6988 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6989 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6990 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6991 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6992 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6993 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6994 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6995 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6996 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6997 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6998 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +6999 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7000 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7001 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7002 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7003 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7004 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7005 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7006 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7007 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7008 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7009 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7010 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7011 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7012 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7013 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7014 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7015 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7016 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7017 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7018 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7019 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7020 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7021 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7022 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7023 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7024 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7025 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7026 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7027 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7028 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7029 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7030 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7031 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7032 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7033 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7034 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7035 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7036 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7037 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7038 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7039 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7040 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7041 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7042 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7043 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7044 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7045 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7046 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7047 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7048 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7049 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7050 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7051 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7052 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7053 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7054 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7055 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7056 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7057 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7058 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7059 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7060 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7061 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7062 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7063 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7064 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7065 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7066 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7067 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7068 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7069 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7070 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7071 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7072 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7073 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7074 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7075 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7076 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7077 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7078 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7079 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7080 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7081 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7082 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7083 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7084 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7085 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7086 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7087 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7088 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7089 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7090 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7091 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7092 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7093 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7094 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7095 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7096 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7097 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7098 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7099 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7100 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7101 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7102 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7103 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7104 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7105 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7106 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7107 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7108 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7109 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7110 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7111 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7112 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7113 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7114 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7115 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7116 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7117 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7118 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7119 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7120 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7121 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7122 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7123 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7124 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7125 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7126 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7127 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7128 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7129 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7130 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7131 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7132 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7133 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7134 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7135 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7136 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7137 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7138 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7139 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7140 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7141 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7142 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7143 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7144 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7145 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7146 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7147 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7148 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7149 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7150 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7151 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7152 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7153 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7154 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7155 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7156 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7157 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7158 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7159 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7160 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7161 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7162 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7163 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7164 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7165 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7166 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7167 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7168 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7169 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7170 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7171 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7172 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7173 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7174 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7175 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7176 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7177 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7178 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7179 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7180 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7181 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7182 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7183 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7184 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7185 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7186 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7187 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7188 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7189 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7190 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7191 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7192 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7193 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7194 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7195 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7196 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7197 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7198 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7199 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7200 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7201 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7202 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7203 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7204 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7205 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7206 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7207 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7208 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7209 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7210 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7211 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7212 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7213 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7214 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7215 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7216 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7217 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7218 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7219 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7220 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7221 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7222 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7223 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7224 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7225 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7226 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7227 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7228 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7229 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7230 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7231 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7232 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7233 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7234 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7235 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7236 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7237 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7238 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7239 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7240 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7241 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7242 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7243 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7244 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7245 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7246 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7247 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7248 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7249 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7250 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7251 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7252 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7253 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7254 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7255 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7256 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7257 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7258 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7259 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7260 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7261 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7262 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7263 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7264 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7265 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7266 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7267 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7268 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7269 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7270 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7271 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7272 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7273 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7274 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7275 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7276 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7277 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7278 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7279 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7280 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7281 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7282 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7283 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7284 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7285 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7286 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7287 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7288 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7289 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7290 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7291 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7292 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7293 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7294 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7295 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7296 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7297 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7298 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7299 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7300 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7301 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7302 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7303 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7304 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7305 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7306 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7307 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7308 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7309 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7310 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7311 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7312 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7313 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7314 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7315 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7316 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7317 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7318 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7319 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7320 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7321 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7322 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7323 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7324 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7325 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7326 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7327 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7328 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7329 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7330 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7331 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7332 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7333 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7334 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7335 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7336 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7337 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7338 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7339 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7340 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7341 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7342 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7343 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7344 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7345 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7346 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7347 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7348 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7349 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7350 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7351 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7352 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7353 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7354 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7355 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7356 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7357 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7358 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7359 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7360 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7361 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7362 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7363 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7364 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7365 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7366 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7367 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7368 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7369 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7370 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7371 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7372 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7373 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7374 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7375 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7376 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7377 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7378 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7379 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7380 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7381 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7382 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7383 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7384 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7385 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7386 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7387 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7388 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7389 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7390 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7391 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7392 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7393 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7394 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7395 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7396 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7397 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7398 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7399 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7400 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7401 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7402 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7403 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7404 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7405 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7406 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7407 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7408 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7409 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7410 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7411 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7412 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7413 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7414 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7415 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7416 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7417 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7418 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7419 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7420 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7421 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7422 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7423 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7424 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7425 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7426 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7427 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7428 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7429 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7430 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7431 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7432 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7433 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7434 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7435 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7436 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7437 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7438 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7439 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7440 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7441 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7442 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7443 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7444 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7445 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7446 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7447 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7448 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7449 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7450 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7451 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7452 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7453 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7454 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7455 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7456 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7457 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7458 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7459 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7460 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7461 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7462 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7463 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7464 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7465 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7466 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7467 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7468 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7469 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7470 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7471 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7472 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7473 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7474 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7475 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7476 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7477 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7478 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7479 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7480 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7481 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7482 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7483 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7484 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7485 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7486 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7487 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7488 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7489 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7490 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7491 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7492 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7493 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7494 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7495 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7496 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7497 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7498 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7499 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7500 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7501 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7502 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7503 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7504 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7505 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7506 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7507 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7508 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7509 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7510 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7511 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7512 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7513 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7514 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7515 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7516 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7517 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7518 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7519 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7520 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7521 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7522 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7523 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7524 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7525 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7526 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7527 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7528 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7529 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7530 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7531 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7532 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7533 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7534 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7535 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7536 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7537 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7538 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7539 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7540 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7541 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7542 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7543 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7544 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7545 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7546 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7547 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7548 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7549 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7550 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7551 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7552 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7553 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7554 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7555 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7556 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7557 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7558 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7559 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7560 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7561 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7562 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7563 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7564 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7565 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7566 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7567 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7568 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7569 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7570 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7571 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7572 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7573 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7574 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7575 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7576 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7577 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7578 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7579 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7580 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7581 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7582 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7583 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7584 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7585 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7586 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7587 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7588 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7589 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7590 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7591 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7592 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7593 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7594 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7595 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7596 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7597 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7598 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7599 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7600 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7601 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7602 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7603 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7604 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7605 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7606 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7607 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7608 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7609 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7610 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7611 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7612 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7613 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7614 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7615 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7616 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7617 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7618 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7619 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7620 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7621 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7622 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7623 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7624 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7625 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7626 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7627 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7628 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7629 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7630 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7631 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7632 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7633 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7634 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7635 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7636 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7637 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7638 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7639 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7640 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7641 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7642 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7643 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7644 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7645 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7646 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7647 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7648 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7649 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7650 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7651 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7652 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7653 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7654 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7655 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7656 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7657 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7658 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7659 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7660 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7661 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7662 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7663 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7664 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7665 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7666 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7667 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7668 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7669 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7670 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7671 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7672 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7673 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7674 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7675 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7676 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7677 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7678 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7679 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7680 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7681 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7682 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7683 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7684 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7685 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7686 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7687 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7688 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7689 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7690 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7691 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7692 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7693 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7694 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7695 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7696 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7697 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7698 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7699 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7700 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7701 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7702 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7703 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7704 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7705 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7706 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7707 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7708 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7709 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7710 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7711 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7712 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7713 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7714 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7715 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7716 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7717 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7718 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7719 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7720 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7721 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7722 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7723 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7724 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7725 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7726 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7727 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7728 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7729 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7730 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7731 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7732 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7733 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7734 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7735 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7736 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7737 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7738 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7739 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7740 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7741 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7742 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7743 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7744 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7745 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7746 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7747 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7748 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7749 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7750 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7751 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7752 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7753 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7754 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7755 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7756 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7757 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7758 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7759 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7760 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7761 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7762 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7763 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7764 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7765 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7766 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7767 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7768 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7769 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7770 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7771 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7772 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7773 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7774 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7775 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7776 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7777 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7778 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7779 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7780 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7781 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7782 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7783 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7784 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7785 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7786 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7787 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7788 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7789 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7790 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7791 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7792 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7793 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7794 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7795 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7796 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7797 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7798 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7799 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7800 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7801 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7802 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7803 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7804 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7805 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7806 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7807 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7808 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7809 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7810 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7811 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7812 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7813 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7814 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7815 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7816 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7817 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7818 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7819 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7820 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7821 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7822 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7823 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7824 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7825 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7826 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7827 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7828 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7829 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7830 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7831 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7832 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7833 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7834 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7835 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7836 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7837 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7838 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7839 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7840 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7841 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7842 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7843 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7844 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7845 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7846 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7847 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7848 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7849 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7850 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7851 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7852 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7853 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7854 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7855 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7856 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7857 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7858 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7859 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7860 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7861 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7862 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7863 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7864 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7865 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7866 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7867 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7868 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7869 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7870 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7871 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7872 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7873 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7874 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7875 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7876 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7877 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7878 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7879 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7880 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7881 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7882 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7883 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7884 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7885 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7886 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7887 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7888 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7889 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7890 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7891 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7892 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7893 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7894 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7895 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7896 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7897 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7898 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7899 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7900 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7901 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7902 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7903 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7904 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7905 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7906 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7907 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7908 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7909 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7910 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7911 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7912 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7913 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7914 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7915 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7916 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7917 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7918 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7919 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7920 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7921 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7922 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7923 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7924 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7925 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7926 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7927 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7928 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7929 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7930 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7931 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7932 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7933 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7934 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7935 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7936 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7937 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7938 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7939 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7940 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7941 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7942 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7943 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7944 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7945 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7946 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7947 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7948 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7949 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7950 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7951 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7952 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7953 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7954 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7955 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7956 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7957 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7958 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7959 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7960 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7961 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7962 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7963 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7964 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7965 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7966 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7967 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7968 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7969 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7970 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7971 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7972 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7973 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7974 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7975 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7976 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7977 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7978 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7979 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7980 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7981 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7982 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7983 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7984 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7985 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7986 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7987 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7988 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7989 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7990 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7991 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7992 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7993 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7994 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7995 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7996 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7997 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7998 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +7999 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8000 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8001 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8002 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8003 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8004 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8005 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8006 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8007 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8008 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8009 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8010 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8011 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8012 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8013 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8014 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8015 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8016 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8017 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8018 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8019 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8020 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8021 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8022 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8023 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8024 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8025 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8026 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8027 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8028 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8029 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8030 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8031 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8032 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8033 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8034 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8035 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8036 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8037 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8038 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8039 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8040 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8041 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8042 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8043 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8044 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8045 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8046 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8047 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8048 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8049 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8050 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8051 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8052 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8053 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8054 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8055 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8056 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8057 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8058 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8059 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8060 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8061 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8062 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8063 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8064 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8065 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8066 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8067 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8068 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8069 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8070 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8071 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8072 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8073 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8074 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8075 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8076 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8077 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8078 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8079 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8080 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8081 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8082 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8083 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8084 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8085 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8086 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8087 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8088 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8089 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8090 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8091 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8092 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8093 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8094 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8095 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8096 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8097 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8098 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8099 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8100 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8101 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8102 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8103 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8104 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8105 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8106 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8107 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8108 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8109 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8110 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8111 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8112 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8113 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8114 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8115 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8116 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8117 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8118 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8119 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8120 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8121 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8122 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8123 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8124 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8125 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8126 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8127 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8128 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8129 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8130 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8131 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8132 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8133 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8134 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8135 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8136 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8137 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8138 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8139 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8140 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8141 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8142 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8143 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8144 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8145 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8146 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8147 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8148 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8149 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8150 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8151 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8152 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8153 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8154 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8155 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8156 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8157 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8158 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8159 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8160 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8161 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8162 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8163 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8164 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8165 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8166 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8167 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8168 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8169 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8170 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8171 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8172 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8173 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8174 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8175 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8176 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8177 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8178 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8179 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8180 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8181 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8182 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8183 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8184 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8185 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8186 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8187 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8188 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8189 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8190 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8191 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8192 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8193 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8194 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8195 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8196 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8197 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8198 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8199 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8200 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8201 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8202 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8203 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8204 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8205 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8206 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8207 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8208 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8209 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8210 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8211 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8212 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8213 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8214 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8215 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8216 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8217 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8218 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8219 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8220 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8221 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8222 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8223 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8224 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8225 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8226 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8227 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8228 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8229 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8230 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8231 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8232 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8233 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8234 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8235 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8236 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8237 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8238 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8239 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8240 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8241 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8242 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8243 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8244 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8245 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8246 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8247 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8248 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8249 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8250 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8251 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8252 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8253 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8254 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8255 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8256 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8257 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8258 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8259 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8260 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8261 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8262 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8263 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8264 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8265 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8266 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8267 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8268 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8269 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8270 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8271 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8272 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8273 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8274 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8275 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8276 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8277 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8278 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8279 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8280 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8281 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8282 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8283 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8284 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8285 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8286 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8287 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8288 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8289 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8290 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8291 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8292 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8293 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8294 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8295 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8296 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8297 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8298 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8299 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8300 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8301 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8302 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8303 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8304 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8305 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8306 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8307 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8308 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8309 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8310 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8311 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8312 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8313 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8314 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8315 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8316 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8317 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8318 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8319 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8320 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8321 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8322 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8323 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8324 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8325 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8326 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8327 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8328 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8329 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8330 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8331 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8332 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8333 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8334 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8335 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8336 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8337 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8338 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8339 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8340 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8341 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8342 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8343 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8344 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8345 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8346 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8347 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8348 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8349 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8350 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8351 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8352 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8353 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8354 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8355 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8356 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8357 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8358 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8359 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8360 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8361 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8362 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8363 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8364 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8365 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8366 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8367 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8368 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8369 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8370 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8371 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8372 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8373 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8374 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8375 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8376 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8377 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8378 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8379 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8380 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8381 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8382 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8383 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8384 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8385 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8386 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8387 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8388 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8389 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8390 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8391 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8392 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8393 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8394 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8395 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8396 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8397 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8398 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8399 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8400 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8401 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8402 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8403 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8404 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8405 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8406 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8407 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8408 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8409 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8410 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8411 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8412 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8413 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8414 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8415 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8416 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8417 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8418 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8419 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8420 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8421 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8422 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8423 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8424 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8425 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8426 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8427 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8428 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8429 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8430 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8431 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8432 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8433 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8434 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8435 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8436 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8437 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8438 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8439 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8440 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8441 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8442 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8443 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8444 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8445 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8446 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8447 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8448 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8449 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8450 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8451 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8452 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8453 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8454 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8455 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8456 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8457 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8458 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8459 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8460 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8461 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8462 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8463 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8464 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8465 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8466 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8467 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8468 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8469 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8470 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8471 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8472 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8473 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8474 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8475 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8476 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8477 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8478 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8479 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8480 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8481 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8482 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8483 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8484 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8485 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8486 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8487 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8488 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8489 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8490 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8491 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8492 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8493 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8494 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8495 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8496 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8497 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8498 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8499 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8500 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8501 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8502 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8503 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8504 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8505 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8506 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8507 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8508 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8509 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8510 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8511 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8512 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8513 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8514 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8515 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8516 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8517 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8518 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8519 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8520 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8521 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8522 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8523 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8524 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8525 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8526 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8527 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8528 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8529 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8530 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8531 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8532 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8533 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8534 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8535 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8536 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8537 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8538 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8539 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8540 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8541 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8542 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8543 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8544 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8545 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8546 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8547 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8548 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8549 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8550 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8551 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8552 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8553 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8554 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8555 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8556 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8557 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8558 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8559 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8560 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8561 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8562 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8563 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8564 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8565 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8566 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8567 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8568 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8569 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8570 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8571 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8572 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8573 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8574 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8575 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8576 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8577 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8578 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8579 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8580 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8581 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8582 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8583 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8584 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8585 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8586 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8587 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8588 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8589 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8590 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8591 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8592 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8593 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8594 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8595 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8596 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8597 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8598 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8599 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8600 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8601 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8602 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8603 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8604 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8605 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8606 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8607 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8608 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8609 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8610 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8611 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8612 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8613 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8614 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8615 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8616 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8617 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8618 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8619 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8620 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8621 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8622 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8623 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8624 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8625 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8626 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8627 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8628 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8629 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8630 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8631 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8632 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8633 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8634 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8635 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8636 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8637 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8638 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8639 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8640 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8641 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8642 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8643 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8644 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8645 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8646 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8647 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8648 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8649 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8650 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8651 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8652 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8653 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8654 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8655 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8656 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8657 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8658 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8659 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8660 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8661 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8662 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8663 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8664 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8665 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8666 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8667 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8668 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8669 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8670 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8671 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8672 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8673 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8674 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8675 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8676 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8677 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8678 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8679 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8680 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8681 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8682 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8683 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8684 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8685 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8686 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8687 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8688 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8689 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8690 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8691 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8692 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8693 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8694 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8695 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8696 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8697 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8698 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8699 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8700 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8701 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8702 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8703 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8704 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8705 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8706 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8707 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8708 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8709 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8710 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8711 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8712 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8713 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8714 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8715 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8716 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8717 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8718 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8719 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8720 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8721 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8722 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8723 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8724 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8725 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8726 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8727 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8728 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8729 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8730 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8731 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8732 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8733 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8734 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8735 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8736 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8737 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8738 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8739 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8740 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8741 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8742 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8743 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8744 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8745 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8746 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8747 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8748 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8749 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8750 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8751 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8752 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8753 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8754 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8755 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8756 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8757 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8758 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8759 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8760 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8761 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8762 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8763 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8764 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8765 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8766 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8767 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8768 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8769 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8770 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8771 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8772 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8773 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8774 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8775 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8776 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8777 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8778 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8779 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8780 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8781 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8782 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8783 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8784 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8785 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8786 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8787 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8788 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8789 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8790 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8791 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8792 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8793 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8794 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8795 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8796 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8797 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8798 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8799 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8800 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8801 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8802 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8803 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8804 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8805 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8806 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8807 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8808 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8809 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8810 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8811 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8812 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8813 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8814 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8815 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8816 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8817 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8818 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8819 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8820 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8821 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8822 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8823 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8824 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8825 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8826 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8827 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8828 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8829 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8830 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8831 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8832 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8833 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8834 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8835 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8836 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8837 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8838 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8839 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8840 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8841 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8842 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8843 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8844 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8845 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8846 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8847 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8848 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8849 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8850 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8851 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8852 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8853 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8854 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8855 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8856 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8857 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8858 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8859 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8860 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8861 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8862 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8863 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8864 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8865 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8866 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8867 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8868 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8869 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8870 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8871 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8872 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8873 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8874 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8875 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8876 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8877 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8878 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8879 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8880 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8881 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8882 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8883 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8884 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8885 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8886 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8887 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8888 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8889 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8890 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8891 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8892 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8893 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8894 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8895 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8896 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8897 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8898 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8899 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8900 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8901 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8902 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8903 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8904 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8905 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8906 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8907 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8908 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8909 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8910 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8911 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8912 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8913 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8914 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8915 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8916 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8917 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8918 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8919 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8920 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8921 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8922 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8923 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8924 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8925 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8926 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8927 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8928 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8929 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8930 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8931 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8932 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8933 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8934 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8935 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8936 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8937 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8938 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8939 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8940 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8941 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8942 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8943 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8944 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8945 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8946 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8947 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8948 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8949 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8950 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8951 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8952 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8953 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8954 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8955 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8956 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8957 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8958 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8959 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8960 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8961 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8962 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8963 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8964 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8965 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8966 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8967 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8968 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8969 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8970 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8971 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8972 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8973 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8974 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8975 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8976 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8977 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8978 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8979 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8980 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8981 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8982 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8983 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8984 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8985 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8986 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8987 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8988 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8989 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8990 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8991 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8992 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8993 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8994 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8995 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8996 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8997 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8998 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +8999 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9000 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9001 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9002 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9003 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9004 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9005 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9006 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9007 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9008 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9009 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9010 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9011 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9012 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9013 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9014 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9015 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9016 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9017 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9018 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9019 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9020 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9021 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9022 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9023 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9024 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9025 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9026 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9027 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9028 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9029 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9030 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9031 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9032 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9033 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9034 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9035 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9036 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9037 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9038 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9039 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9040 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9041 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9042 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9043 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9044 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9045 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9046 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9047 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9048 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9049 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9050 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9051 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9052 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9053 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9054 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9055 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9056 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9057 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9058 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9059 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9060 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9061 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9062 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9063 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9064 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9065 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9066 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9067 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9068 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9069 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9070 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9071 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9072 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9073 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9074 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9075 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9076 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9077 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9078 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9079 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9080 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9081 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9082 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9083 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9084 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9085 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9086 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9087 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9088 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9089 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9090 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9091 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9092 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9093 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9094 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9095 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9096 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9097 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9098 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9099 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9100 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9101 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9102 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9103 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9104 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9105 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9106 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9107 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9108 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9109 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9110 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9111 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9112 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9113 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9114 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9115 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9116 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9117 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9118 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9119 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9120 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9121 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9122 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9123 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9124 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9125 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9126 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9127 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9128 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9129 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9130 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9131 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9132 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9133 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9134 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9135 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9136 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9137 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9138 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9139 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9140 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9141 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9142 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9143 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9144 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9145 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9146 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9147 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9148 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9149 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9150 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9151 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9152 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9153 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9154 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9155 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9156 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9157 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9158 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9159 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9160 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9161 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9162 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9163 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9164 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9165 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9166 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9167 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9168 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9169 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9170 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9171 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9172 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9173 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9174 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9175 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9176 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9177 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9178 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9179 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9180 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9181 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9182 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9183 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9184 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9185 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9186 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9187 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9188 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9189 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9190 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9191 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9192 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9193 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9194 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9195 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9196 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9197 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9198 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9199 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9200 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9201 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9202 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9203 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9204 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9205 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9206 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9207 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9208 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9209 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9210 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9211 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9212 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9213 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9214 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9215 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9216 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9217 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9218 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9219 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9220 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9221 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9222 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9223 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9224 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9225 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9226 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9227 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9228 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9229 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9230 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9231 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9232 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9233 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9234 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9235 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9236 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9237 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9238 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9239 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9240 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9241 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9242 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9243 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9244 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9245 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9246 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9247 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9248 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9249 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9250 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9251 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9252 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9253 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9254 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9255 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9256 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9257 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9258 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9259 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9260 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9261 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9262 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9263 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9264 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9265 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9266 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9267 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9268 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9269 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9270 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9271 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9272 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9273 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9274 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9275 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9276 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9277 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9278 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9279 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9280 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9281 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9282 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9283 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9284 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9285 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9286 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9287 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9288 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9289 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9290 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9291 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9292 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9293 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9294 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9295 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9296 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9297 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9298 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9299 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9300 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9301 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9302 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9303 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9304 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9305 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9306 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9307 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9308 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9309 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9310 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9311 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9312 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9313 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9314 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9315 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9316 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9317 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9318 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9319 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9320 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9321 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9322 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9323 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9324 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9325 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9326 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9327 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9328 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9329 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9330 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9331 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9332 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9333 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9334 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9335 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9336 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9337 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9338 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9339 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9340 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9341 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9342 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9343 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9344 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9345 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9346 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9347 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9348 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9349 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9350 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9351 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9352 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9353 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9354 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9355 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9356 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9357 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9358 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9359 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9360 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9361 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9362 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9363 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9364 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9365 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9366 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9367 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9368 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9369 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9370 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9371 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9372 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9373 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9374 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9375 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9376 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9377 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9378 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9379 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9380 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9381 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9382 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9383 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9384 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9385 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9386 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9387 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9388 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9389 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9390 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9391 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9392 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9393 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9394 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9395 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9396 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9397 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9398 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9399 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9400 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9401 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9402 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9403 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9404 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9405 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9406 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9407 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9408 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9409 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9410 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9411 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9412 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9413 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9414 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9415 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9416 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9417 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9418 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9419 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9420 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9421 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9422 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9423 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9424 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9425 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9426 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9427 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9428 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9429 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9430 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9431 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9432 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9433 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9434 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9435 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9436 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9437 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9438 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9439 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9440 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9441 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9442 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9443 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9444 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9445 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9446 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9447 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9448 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9449 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9450 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9451 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9452 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9453 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9454 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9455 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9456 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9457 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9458 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9459 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9460 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9461 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9462 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9463 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9464 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9465 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9466 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9467 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9468 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9469 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9470 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9471 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9472 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9473 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9474 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9475 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9476 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9477 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9478 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9479 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9480 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9481 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9482 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9483 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9484 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9485 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9486 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9487 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9488 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9489 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9490 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9491 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9492 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9493 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9494 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9495 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9496 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9497 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9498 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9499 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9500 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9501 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9502 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9503 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9504 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9505 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9506 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9507 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9508 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9509 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9510 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9511 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9512 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9513 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9514 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9515 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9516 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9517 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9518 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9519 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9520 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9521 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9522 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9523 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9524 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9525 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9526 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9527 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9528 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9529 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9530 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9531 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9532 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9533 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9534 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9535 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9536 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9537 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9538 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9539 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9540 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9541 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9542 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9543 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9544 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9545 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9546 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9547 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9548 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9549 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9550 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9551 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9552 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9553 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9554 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9555 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9556 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9557 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9558 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9559 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9560 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9561 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9562 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9563 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9564 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9565 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9566 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9567 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9568 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9569 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9570 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9571 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9572 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9573 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9574 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9575 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9576 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9577 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9578 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9579 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9580 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9581 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9582 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9583 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9584 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9585 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9586 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9587 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9588 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9589 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9590 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9591 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9592 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9593 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9594 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9595 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9596 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9597 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9598 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9599 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9600 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9601 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9602 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9603 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9604 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9605 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9606 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9607 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9608 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9609 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9610 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9611 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9612 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9613 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9614 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9615 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9616 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9617 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9618 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9619 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9620 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9621 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9622 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9623 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9624 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9625 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9626 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9627 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9628 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9629 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9630 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9631 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9632 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9633 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9634 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9635 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9636 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9637 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9638 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9639 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9640 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9641 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9642 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9643 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9644 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9645 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9646 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9647 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9648 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9649 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9650 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9651 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9652 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9653 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9654 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9655 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9656 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9657 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9658 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9659 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9660 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9661 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9662 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9663 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9664 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9665 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9666 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9667 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9668 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9669 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9670 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9671 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9672 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9673 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9674 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9675 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9676 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9677 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9678 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9679 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9680 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9681 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9682 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9683 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9684 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9685 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9686 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9687 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9688 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9689 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9690 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9691 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9692 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9693 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9694 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9695 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9696 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9697 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9698 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9699 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9700 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9701 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9702 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9703 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9704 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9705 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9706 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9707 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9708 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9709 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9710 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9711 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9712 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9713 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9714 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9715 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9716 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9717 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9718 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9719 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9720 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9721 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9722 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9723 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9724 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9725 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9726 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9727 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9728 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9729 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9730 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9731 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9732 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9733 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9734 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9735 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9736 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9737 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9738 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9739 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9740 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9741 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9742 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9743 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9744 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9745 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9746 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9747 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9748 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9749 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9750 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9751 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9752 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9753 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9754 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9755 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9756 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9757 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9758 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9759 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9760 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9761 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9762 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9763 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9764 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9765 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9766 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9767 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9768 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9769 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9770 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9771 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9772 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9773 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9774 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9775 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9776 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9777 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9778 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9779 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9780 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9781 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9782 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9783 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9784 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9785 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9786 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9787 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9788 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9789 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9790 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9791 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9792 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9793 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9794 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9795 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9796 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9797 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9798 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9799 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9800 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9801 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9802 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9803 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9804 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9805 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9806 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9807 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9808 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9809 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9810 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9811 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9812 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9813 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9814 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9815 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9816 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9817 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9818 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9819 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9820 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9821 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9822 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9823 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9824 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9825 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9826 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9827 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9828 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9829 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9830 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9831 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9832 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9833 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9834 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9835 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9836 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9837 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9838 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9839 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9840 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9841 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9842 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9843 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9844 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9845 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9846 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9847 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9848 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9849 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9850 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9851 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9852 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9853 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9854 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9855 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9856 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9857 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9858 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9859 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9860 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9861 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9862 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9863 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9864 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9865 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9866 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9867 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9868 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9869 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9870 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9871 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9872 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9873 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9874 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9875 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9876 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9877 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9878 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9879 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9880 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9881 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9882 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9883 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9884 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9885 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9886 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9887 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9888 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9889 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9890 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9891 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9892 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9893 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9894 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9895 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9896 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9897 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9898 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9899 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9900 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9901 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9902 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9903 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9904 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9905 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9906 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9907 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9908 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9909 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9910 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9911 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9912 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9913 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9914 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9915 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9916 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9917 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9918 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9919 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9920 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9921 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9922 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9923 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9924 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9925 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9926 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9927 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9928 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9929 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9930 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9931 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9932 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9933 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9934 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9935 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9936 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9937 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9938 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9939 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9940 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9941 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9942 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9943 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9944 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9945 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9946 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9947 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9948 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9949 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9950 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9951 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9952 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9953 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9954 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9955 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9956 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9957 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9958 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9959 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9960 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9961 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9962 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9963 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9964 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9965 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9966 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9967 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9968 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9969 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9970 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9971 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9972 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9973 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9974 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9975 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9976 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9977 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9978 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9979 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9980 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9981 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9982 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9983 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9984 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9985 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9986 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9987 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9988 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9989 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9990 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9991 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9992 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9993 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9994 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9995 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9996 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9997 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9998 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +9999 barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo +drop table t1; diff --git a/mysql-test/suite/encryption/r/innodb_encryption_row_compressed_corrupted.result b/mysql-test/suite/encryption/r/innodb_encryption_row_compressed_corrupted.result new file mode 100644 index 000000000000..1a3ff90d9c03 --- /dev/null +++ b/mysql-test/suite/encryption/r/innodb_encryption_row_compressed_corrupted.result @@ -0,0 +1,139 @@ +create table innodb_compressed1(c1 bigint not null primary key, d int, a varchar(20), b char(200)) engine=innodb row_format=compressed ENCRYPTION='KEYRING'; +create table innodb_compressed2(c1 bigint not null primary key, d int, a varchar(20), b char(200)) engine=innodb row_format=compressed key_block_size=1 ENCRYPTION='KEYRING'; +create table innodb_compressed3(c1 bigint not null primary key, d int, a varchar(20), b char(200)) engine=innodb row_format=compressed key_block_size=2 ENCRYPTION='KEYRING'; +create table innodb_compressed4(c1 bigint not null primary key, d int, a varchar(20), b char(200)) engine=innodb row_format=compressed key_block_size=4 ENCRYPTION='KEYRING'; +insert into innodb_compressed1 values (1, 20, 'private', 'evenmoreprivate'); +insert into innodb_compressed1 values (2, 20, 'private', 'evenmoreprivate'); +insert into innodb_compressed1 values (3, 30, 'private', 'evenmoreprivate'); +insert into innodb_compressed1 values (4, 30, 'private', 'evenmoreprivate'); +insert into innodb_compressed1 values (5, 30, 'private', 'evenmoreprivate'); +insert into innodb_compressed1 values (6, 30, 'private', 'evenmoreprivate'); +insert into innodb_compressed1 values (7, 30, 'private', 'evenmoreprivate'); +insert into innodb_compressed1 values (8, 20, 'private', 'evenmoreprivate'); +insert into innodb_compressed1 values (9, 20, 'private', 'evenmoreprivate'); +insert into innodb_compressed1 values (10, 20, 'private', 'evenmoreprivate'); +insert into innodb_compressed2 select * from innodb_compressed1; +insert into innodb_compressed3 select * from innodb_compressed1; +insert into innodb_compressed4 select * from innodb_compressed1; +# restart +# t1 yes on expecting NOT FOUND +# t2 yes on expecting NOT FOUND +# t3 yes on expecting NOT FOUND +# t4 yes on expecting NOT FOUND +select * from innodb_compressed1 where d = 20; +c1 d a b +1 20 private evenmoreprivate +2 20 private evenmoreprivate +8 20 private evenmoreprivate +9 20 private evenmoreprivate +10 20 private evenmoreprivate +select * from innodb_compressed1 where d = 30; +c1 d a b +3 30 private evenmoreprivate +4 30 private evenmoreprivate +5 30 private evenmoreprivate +6 30 private evenmoreprivate +7 30 private evenmoreprivate +select * from innodb_compressed2 where d = 20; +c1 d a b +1 20 private evenmoreprivate +2 20 private evenmoreprivate +8 20 private evenmoreprivate +9 20 private evenmoreprivate +10 20 private evenmoreprivate +select * from innodb_compressed2 where d = 30; +c1 d a b +3 30 private evenmoreprivate +4 30 private evenmoreprivate +5 30 private evenmoreprivate +6 30 private evenmoreprivate +7 30 private evenmoreprivate +select * from innodb_compressed3 where d = 20; +c1 d a b +1 20 private evenmoreprivate +2 20 private evenmoreprivate +8 20 private evenmoreprivate +9 20 private evenmoreprivate +10 20 private evenmoreprivate +select * from innodb_compressed3 where d = 30; +c1 d a b +3 30 private evenmoreprivate +4 30 private evenmoreprivate +5 30 private evenmoreprivate +6 30 private evenmoreprivate +7 30 private evenmoreprivate +select * from innodb_compressed4 where d = 20; +c1 d a b +1 20 private evenmoreprivate +2 20 private evenmoreprivate +8 20 private evenmoreprivate +9 20 private evenmoreprivate +10 20 private evenmoreprivate +select * from innodb_compressed4 where d = 30; +c1 d a b +3 30 private evenmoreprivate +4 30 private evenmoreprivate +5 30 private evenmoreprivate +6 30 private evenmoreprivate +7 30 private evenmoreprivate +update innodb_compressed1 set d = d + 10 where d = 30; +update innodb_compressed2 set d = d + 10 where d = 30; +update innodb_compressed3 set d = d + 10 where d = 30; +update innodb_compressed4 set d = d + 10 where d = 30; +insert into innodb_compressed1 values (20, 60, 'newprivate', 'newevenmoreprivate'); +insert into innodb_compressed2 values (20, 60, 'newprivate', 'newevenmoreprivate'); +insert into innodb_compressed3 values (20, 60, 'newprivate', 'newevenmoreprivate'); +insert into innodb_compressed4 values (20, 60, 'newprivate', 'newevenmoreprivate'); +# t1 yes on expecting NOT FOUND +# t2 yes on expecting NOT FOUND +# t3 yes on expecting NOT FOUND +# t4 yes on expecting NOT FOUND +# restart +select * from innodb_compressed1 where d = 40; +c1 d a b +3 40 private evenmoreprivate +4 40 private evenmoreprivate +5 40 private evenmoreprivate +6 40 private evenmoreprivate +7 40 private evenmoreprivate +select * from innodb_compressed1 where d = 60; +c1 d a b +20 60 newprivate newevenmoreprivate +select * from innodb_compressed2 where d = 40; +c1 d a b +3 40 private evenmoreprivate +4 40 private evenmoreprivate +5 40 private evenmoreprivate +6 40 private evenmoreprivate +7 40 private evenmoreprivate +select * from innodb_compressed2 where d = 60; +c1 d a b +20 60 newprivate newevenmoreprivate +select * from innodb_compressed3 where d = 40; +c1 d a b +3 40 private evenmoreprivate +4 40 private evenmoreprivate +5 40 private evenmoreprivate +6 40 private evenmoreprivate +7 40 private evenmoreprivate +select * from innodb_compressed3 where d = 60; +c1 d a b +20 60 newprivate newevenmoreprivate +select * from innodb_compressed4 where d = 40; +c1 d a b +3 40 private evenmoreprivate +4 40 private evenmoreprivate +5 40 private evenmoreprivate +6 40 private evenmoreprivate +7 40 private evenmoreprivate +select * from innodb_compressed4 where d = 60; +c1 d a b +20 60 newprivate newevenmoreprivate +# t1 yes on expecting NOT FOUND +# t2 yes on expecting NOT FOUND +# t3 yes on expecting NOT FOUND +# t4 yes on expecting NOT FOUND +drop table innodb_compressed1; +drop table innodb_compressed2; +drop table innodb_compressed3; +drop table innodb_compressed4; diff --git a/mysql-test/suite/encryption/r/innodb_encryption_tables.result b/mysql-test/suite/encryption/r/innodb_encryption_tables.result new file mode 100644 index 000000000000..04805239345d --- /dev/null +++ b/mysql-test/suite/encryption/r/innodb_encryption_tables.result @@ -0,0 +1,170 @@ +create table innodb_normal(c1 bigint not null, b char(200)) engine=innodb; +create table innodb_compact(c1 bigint not null, b char(200)) engine=innodb row_format=compact; +create table innodb_dynamic(c1 bigint not null, b char(200)) engine=innodb row_format=dynamic; +create table innodb_compressed(c1 bigint not null, b char(200)) engine=innodb row_format=compressed; +create table innodb_redundant(c1 bigint not null, b char(200)) engine=innodb row_format=redundant; +show warnings; +Level Code Message +show create table innodb_normal; +Table Create Table +innodb_normal CREATE TABLE `innodb_normal` ( + `c1` bigint(20) NOT NULL, + `b` char(200) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION_KEY_ID=0 +show create table innodb_compact; +Table Create Table +innodb_compact CREATE TABLE `innodb_compact` ( + `c1` bigint(20) NOT NULL, + `b` char(200) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT ENCRYPTION_KEY_ID=0 +show create table innodb_dynamic; +Table Create Table +innodb_dynamic CREATE TABLE `innodb_dynamic` ( + `c1` bigint(20) NOT NULL, + `b` char(200) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC ENCRYPTION_KEY_ID=0 +show create table innodb_compressed; +Table Create Table +innodb_compressed CREATE TABLE `innodb_compressed` ( + `c1` bigint(20) NOT NULL, + `b` char(200) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPRESSED ENCRYPTION_KEY_ID=0 +show create table innodb_redundant; +Table Create Table +innodb_redundant CREATE TABLE `innodb_redundant` ( + `c1` bigint(20) NOT NULL, + `b` char(200) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=REDUNDANT ENCRYPTION_KEY_ID=0 +create procedure innodb_insert_proc (repeat_count int) +begin +declare current_num int; +set current_num = 0; +while current_num < repeat_count do +insert into innodb_normal values(current_num, substring(MD5(RAND()), -64)); +set current_num = current_num + 1; +end while; +end// +commit; +set autocommit=0; +call innodb_insert_proc(2000); +commit; +set autocommit=1; +insert into innodb_compact select * from innodb_normal; +insert into innodb_dynamic select * from innodb_normal; +insert into innodb_compressed select * from innodb_normal; +insert into innodb_redundant select * from innodb_normal; +update innodb_normal set c1 = c1 + 1; +update innodb_compact set c1 = c1 + 1; +update innodb_dynamic set c1 = c1 + 1; +update innodb_compressed set c1 = c1 + 1; +update innodb_redundant set c1 = c1 + 1; +select count(*) from innodb_normal; +count(*) +2000 +select count(*) from innodb_compact where c1 < 1500000; +count(*) +2000 +select count(*) from innodb_dynamic where c1 < 1500000; +count(*) +2000 +select count(*) from innodb_compressed where c1 < 1500000; +count(*) +2000 +select count(*) from innodb_redundant where c1 < 1500000; +count(*) +2000 +select count(*) from innodb_compact t1, innodb_normal t2 where +t1.c1 = t2.c1 and t1.b = t2.b; +count(*) +2000 +select count(*) from innodb_dynamic t1, innodb_normal t2 where +t1.c1 = t2.c1 and t1.b = t2.b; +count(*) +2000 +select count(*) from innodb_compressed t1, innodb_normal t2 where +t1.c1 = t2.c1 and t1.b = t2.b; +count(*) +2000 +select count(*) from innodb_redundant t1, innodb_normal t2 where +t1.c1 = t2.c1 and t1.b = t2.b; +count(*) +2000 +SELECT variable_value >= 0 FROM information_schema.global_status WHERE variable_name = 'innodb_num_pages_encrypted'; +variable_value >= 0 +1 +Warnings: +Warning 1287 'INFORMATION_SCHEMA.GLOBAL_STATUS' is deprecated and will be removed in a future release. Please use performance_schema.global_status instead +SELECT variable_value >= 0 FROM information_schema.global_status WHERE variable_name = 'innodb_num_pages_decrypted'; +variable_value >= 0 +1 +Warnings: +Warning 1287 'INFORMATION_SCHEMA.GLOBAL_STATUS' is deprecated and will be removed in a future release. Please use performance_schema.global_status instead +SELECT variable_value >= 0 FROM information_schema.global_status WHERE variable_name = 'innodb_num_pages_page_compressed'; +variable_value >= 0 +Warnings: +Warning 1287 'INFORMATION_SCHEMA.GLOBAL_STATUS' is deprecated and will be removed in a future release. Please use performance_schema.global_status instead +SELECT variable_value >= 0 FROM information_schema.global_status WHERE variable_name = 'innodb_num_pages_page_decompressed'; +variable_value >= 0 +Warnings: +Warning 1287 'INFORMATION_SCHEMA.GLOBAL_STATUS' is deprecated and will be removed in a future release. Please use performance_schema.global_status instead +# restart +update innodb_normal set c1 = c1 + 1; +update innodb_compact set c1 = c1 + 1; +update innodb_dynamic set c1 = c1 + 1; +update innodb_compressed set c1 = c1 + 1; +update innodb_redundant set c1 = c1 + 1; +select count(*) from innodb_normal; +count(*) +2000 +select count(*) from innodb_compact where c1 < 1500000; +count(*) +2000 +select count(*) from innodb_dynamic where c1 < 1500000; +count(*) +2000 +select count(*) from innodb_compressed where c1 < 1500000; +count(*) +2000 +select count(*) from innodb_redundant where c1 < 1500000; +count(*) +2000 +select count(*) from innodb_compact t1, innodb_normal t2 where +t1.c1 = t2.c1 and t1.b = t2.b; +count(*) +2000 +select count(*) from innodb_dynamic t1, innodb_normal t2 where +t1.c1 = t2.c1 and t1.b = t2.b; +count(*) +2000 +select count(*) from innodb_compressed t1, innodb_normal t2 where +t1.c1 = t2.c1 and t1.b = t2.b; +count(*) +2000 +select count(*) from innodb_redundant t1, innodb_normal t2 where +t1.c1 = t2.c1 and t1.b = t2.b; +count(*) +2000 +SELECT variable_value >= 0 FROM information_schema.global_status WHERE variable_name = 'innodb_num_pages_encrypted'; +variable_value >= 0 +1 +Warnings: +Warning 1287 'INFORMATION_SCHEMA.GLOBAL_STATUS' is deprecated and will be removed in a future release. Please use performance_schema.global_status instead +SELECT variable_value >= 0 FROM information_schema.global_status WHERE variable_name = 'innodb_num_pages_decrypted'; +variable_value >= 0 +1 +Warnings: +Warning 1287 'INFORMATION_SCHEMA.GLOBAL_STATUS' is deprecated and will be removed in a future release. Please use performance_schema.global_status instead +SELECT variable_value >= 0 FROM information_schema.global_status WHERE variable_name = 'innodb_num_pages_page_compressed'; +variable_value >= 0 +Warnings: +Warning 1287 'INFORMATION_SCHEMA.GLOBAL_STATUS' is deprecated and will be removed in a future release. Please use performance_schema.global_status instead +SELECT variable_value >= 0 FROM information_schema.global_status WHERE variable_name = 'innodb_num_pages_page_decompressed'; +variable_value >= 0 +Warnings: +Warning 1287 'INFORMATION_SCHEMA.GLOBAL_STATUS' is deprecated and will be removed in a future release. Please use performance_schema.global_status instead +drop procedure innodb_insert_proc; +drop table innodb_normal; +drop table innodb_compact; +drop table innodb_dynamic; +drop table innodb_compressed; +drop table innodb_redundant; diff --git a/mysql-test/suite/encryption/r/innodb_first_page.result b/mysql-test/suite/encryption/r/innodb_first_page.result new file mode 100644 index 000000000000..cf576947d9d3 --- /dev/null +++ b/mysql-test/suite/encryption/r/innodb_first_page.result @@ -0,0 +1,4 @@ +# restart +create table t1 (a int); +# restart +drop table t1; diff --git a/mysql-test/suite/encryption/r/innodb_lotoftables.result b/mysql-test/suite/encryption/r/innodb_lotoftables.result new file mode 100644 index 000000000000..aa4e70be6e8a --- /dev/null +++ b/mysql-test/suite/encryption/r/innodb_lotoftables.result @@ -0,0 +1,129 @@ +SET GLOBAL innodb_fast_shutdown=0; +# restart +SHOW VARIABLES LIKE 'innodb_encrypt%'; +Variable_name Value +innodb_encrypt_online_alter_logs OFF +innodb_encrypt_tables ONLINE_FROM_KEYRING_TO_UNENCRYPTED +innodb_encryption_rotate_key_age 1 +innodb_encryption_rotation_iops 100 +innodb_encryption_threads 0 +create database innodb_encrypted_1; +use innodb_encrypted_1; +show status like 'innodb_pages0_read%'; +Variable_name Value +Innodb_pages0_read 20 +set autocommit=0; +set autocommit=1; +commit work; +show status like 'innodb_pages0_read%'; +Variable_name Value +Innodb_pages0_read 20 +# should be empty +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE NAME LIKE 'innodb_encrypted%'; +NAME +create database innodb_encrypted_2; +use innodb_encrypted_2; +show status like 'innodb_pages0_read%'; +Variable_name Value +Innodb_pages0_read 21 +set autocommit=0; +commit work; +set autocommit=1; +show status like 'innodb_pages0_read%'; +Variable_name Value +Innodb_pages0_read 21 +# should contain 100 tables +include/assert.inc [Should contain 100 tables] +include/assert.inc [Should contain 0 tables] +create database innodb_encrypted_3; +use innodb_encrypted_3; +show status like 'innodb_pages0_read%'; +Variable_name Value +Innodb_pages0_read 21 +set autocommit=0; +commit work; +set autocommit=1; +show status like 'innodb_pages0_read%'; +Variable_name Value +Innodb_pages0_read 21 +# should contain 100 tables +include/assert.inc [Should contain 100 tables] +include/assert.inc [Should contain 100 tables] +use test; +show status like 'innodb_pages0_read%'; +Variable_name Value +Innodb_pages0_read 21 +SET GLOBAL innodb_encrypt_tables = ONLINE_TO_KEYRING; +SET GLOBAL innodb_encryption_threads=4; +#tables in innodb_encrypted_1 and innodb_encrypted_2 should be encrypted +# should contain 100 tables +include/assert.inc [Should contain 100 tables] +# should contain 100 tables +include/assert.inc [Should contain 100 tables] +# should contain 100 unencrypted tables +include/assert.inc [Should contain 100 unencrypted tables] +# Success! +# Restart mysqld --innodb_encrypt_tables=0 --innodb_encryption_threads=0 +# restart:--innodb_encrypt_tables=ONLINE_FROM_KEYRING_TO_UNENCRYPTED --innodb_encryption_threads=0 +# Restart Success! +show status like 'innodb_pages0_read%'; +Variable_name Value +Innodb_pages0_read 122 +show status like 'innodb_pages0_read%'; +Variable_name Value +Innodb_pages0_read 122 +use test; +show status like 'innodb_pages0_read%'; +Variable_name Value +Innodb_pages0_read 122 +use innodb_encrypted_1; +show status like 'innodb_pages0_read%'; +Variable_name Value +Innodb_pages0_read 122 +use innodb_encrypted_2; +show status like 'innodb_pages0_read%'; +Variable_name Value +Innodb_pages0_read 122 +use innodb_encrypted_3; +show status like 'innodb_pages0_read%'; +Variable_name Value +Innodb_pages0_read 122 +use innodb_encrypted_1; +show status like 'innodb_pages0_read%'; +Variable_name Value +Innodb_pages0_read 122 +show status like 'innodb_pages0_read%'; +Variable_name Value +Innodb_pages0_read 122 +use innodb_encrypted_2; +show status like 'innodb_pages0_read%'; +Variable_name Value +Innodb_pages0_read 122 +show status like 'innodb_pages0_read%'; +Variable_name Value +Innodb_pages0_read 222 +use innodb_encrypted_3; +show status like 'innodb_pages0_read%'; +Variable_name Value +Innodb_pages0_read 222 +show status like 'innodb_pages0_read%'; +Variable_name Value +Innodb_pages0_read 321 +#tables in innodb_encrypted_1 and innodb_encrypted_2 should remain encrypted as there is no active +#encryption thread +# should contain 200 tables +include/assert.inc [Should contain 200 tables] +# should contain 100 unencrypted tables +include/assert.inc [Should contain 100 unencrypted tables] +SET GLOBAL innodb_encrypt_tables = ONLINE_FROM_KEYRING_TO_UNENCRYPTED; +SET GLOBAL innodb_encryption_threads=4; +# should contain 100 unencrypted tables +include/assert.inc [Should contain 100 unencrypted tables] +# should contain 100 encrypted tables +include/assert.inc [Should contain 100 tables] +# should contain 100 unencrypted tables +include/assert.inc [Should contain 100 unencrypted tables] +use test; +drop database innodb_encrypted_1; +drop database innodb_encrypted_2; +drop database innodb_encrypted_3; diff --git a/mysql-test/suite/encryption/r/innodb_onlinealter_encryption.result b/mysql-test/suite/encryption/r/innodb_onlinealter_encryption.result new file mode 100644 index 000000000000..fad2455eedae --- /dev/null +++ b/mysql-test/suite/encryption/r/innodb_onlinealter_encryption.result @@ -0,0 +1,127 @@ +CREATE TABLE t1 (id INT NOT NULL PRIMARY KEY, a VARCHAR(255)) ENGINE=InnoDB encryption='KEYRING'; +CREATE TABLE t2 (id INT NOT NULL PRIMARY KEY, a VARCHAR(255)) ENGINE=InnoDB; +CREATE TABLE t3 (id INT, a VARCHAR(255)) ENGINE=InnoDB encryption='KEYRING'; +CREATE TABLE t4 (id INT, a VARCHAR(255)) engine=InnoDB; +CREATE TABLE t5 (id INT NOT NULL PRIMARY KEY, a TEXT(500), b VARCHAR(255), FULLTEXT(b)) ENGINE=InnoDB encryption='KEYRING'; +CREATE TABLE t6 (id INT, a TEXT(500), b VARCHAR(255), FULLTEXT(b)) ENGINE=InnoDB; +CREATE TABLE t7 (id INT NOT NULL PRIMARY KEY, a VARCHAR(255)) ENGINE=InnoDB row_format=compressed encryption='KEYRING'; +create procedure innodb_insert_proc (repeat_count int) +begin +declare current_num int; +set current_num = 0; +while current_num < repeat_count do +insert into t1 values (current_num,repeat('foobar',12)); +insert into t2 values (current_num,repeat('tempsecret', 12)); +insert into t3 values (current_num,repeat('barfoo',42)); +insert into t4 values (current_num,repeat('repeat',42)); +insert into t5 values (current_num,substring('A BC DEF GHIJ KLM NOPQRS TUV WXYZ 012 3456789', rand()*36+1, 100), repeat('author new',22)); +insert into t6 values (current_num,substring('A BC DEF GHIJ KLM NOPQRS TUV WXYZ 012 3456789', rand()*36+1, 100), repeat('mangled old',22)); +insert into t7 values (current_num,repeat('mysql',42)); +set current_num = current_num + 1; +end while; +end// +commit; +set autocommit=0; +call innodb_insert_proc(1500); +commit; +set autocommit=1; +# Wait max 10 min for key encryption threads to encrypt all test/t_ tables (all should have MIN_KEY_VERSION 1 assigned) +# t1 yes on expecting NOT FOUND +# t2 ... on expecting NOT FOUND +# t3 ... on expecting NOT FOUND +# t4 ... on expecting NOT FOUND +# t5 ... on expecting NOT FOUND +# t6 ... on expecting NOT FOUND +# t7 ... on expecting NOT FOUND +# restart: +SET GLOBAL innodb_file_format = `Barracuda`; +SET GLOBAL innodb_file_per_table = ON; +ALTER TABLE t1 ADD COLUMN b int default 2; +ALTER TABLE t2 ADD COLUMN b int default 2; +ALTER TABLE t7 ADD COLUMN b int default 2; +ALTER TABLE t1 ADD KEY a(a), ADD KEY b(b); +ALTER TABLE t2 ADD KEY a(a), ADD KEY b(b); +ALTER TABLE t3 ADD COLUMN c int default 5; +ALTER TABLE t4 ADD COLUMN c int default 5; +ALTER TABLE t3 ADD KEY (a), ADD KEY c(c); +ALTER TABLE t4 ADD KEY (a), ADD KEY c(c); +ALTER TABLE t5 ADD FULLTEXT(a); +ALTER TABLE t6 ADD FULLTEXT(a); +ALTER TABLE t7 ADD KEY a(a), ADD key b(b); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int(11) NOT NULL, + `a` varchar(255) DEFAULT NULL, + `b` int(11) DEFAULT '2', + PRIMARY KEY (`id`), + KEY `a` (`a`), + KEY `b` (`b`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=0 +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `id` int(11) NOT NULL, + `a` varchar(255) DEFAULT NULL, + `b` int(11) DEFAULT '2', + PRIMARY KEY (`id`), + KEY `a` (`a`), + KEY `b` (`b`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION_KEY_ID=0 +SHOW CREATE TABLE t3; +Table Create Table +t3 CREATE TABLE `t3` ( + `id` int(11) DEFAULT NULL, + `a` varchar(255) DEFAULT NULL, + `c` int(11) DEFAULT '5', + KEY `a` (`a`), + KEY `c` (`c`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=0 +SHOW CREATE TABLE t4; +Table Create Table +t4 CREATE TABLE `t4` ( + `id` int(11) DEFAULT NULL, + `a` varchar(255) DEFAULT NULL, + `c` int(11) DEFAULT '5', + KEY `a` (`a`), + KEY `c` (`c`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION_KEY_ID=0 +SHOW CREATE TABLE t5; +Table Create Table +t5 CREATE TABLE `t5` ( + `id` int(11) NOT NULL, + `a` text, + `b` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`), + FULLTEXT KEY `b` (`b`), + FULLTEXT KEY `a` (`a`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=0 +SHOW CREATE TABLE t6; +Table Create Table +t6 CREATE TABLE `t6` ( + `id` int(11) DEFAULT NULL, + `a` text, + `b` varchar(255) DEFAULT NULL, + FULLTEXT KEY `b` (`b`), + FULLTEXT KEY `a` (`a`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION_KEY_ID=0 +SHOW CREATE TABLE t7; +Table Create Table +t7 CREATE TABLE `t7` ( + `id` int(11) NOT NULL, + `a` varchar(255) DEFAULT NULL, + `b` int(11) DEFAULT '2', + PRIMARY KEY (`id`), + KEY `a` (`a`), + KEY `b` (`b`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPRESSED ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=0 +# t1 yes on expecting NOT FOUND +# t2 ... on expecting NOT FOUND +# t3 ... on expecting NOT FOUND +# t4 ... on expecting NOT FOUND +# t5 ... on expecting NOT FOUND +# t6 ... on expecting NOT FOUND +# t7 ... on expecting NOT FOUND +# restart:--early-plugin-load=keyring_file=KEYRING_PLUGIN --loose-keyring_file_data=MYSQL_TMP_DIR/mysecret_keyring KEYRING_PLUGIN_OPT --innodb-encrypt-tables=ONLINE_TO_KEYRING --innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=4 +DROP PROCEDURE innodb_insert_proc; +DROP TABLE t1, t2, t3, t4, t5, t6, t7; diff --git a/mysql-test/suite/encryption/r/innodb_page_encryption_key_change.result b/mysql-test/suite/encryption/r/innodb_page_encryption_key_change.result new file mode 100644 index 000000000000..b538db0804e6 --- /dev/null +++ b/mysql-test/suite/encryption/r/innodb_page_encryption_key_change.result @@ -0,0 +1,167 @@ +# Restart mysqld --loose-file-key-management-filename=keys2.txt +# restart:--keyring-file-data=MYSQLTEST_VARDIR/std_data/keys2.txt +create table innodb_normal(c1 bigint not null, b char(200)) engine=innodb; +show warnings; +Level Code Message +create table innodb_compact(c1 bigint not null, b char(200)) engine=innodb row_format=compact ENCRYPTION='KEYRING' encryption_key_id=2; +show warnings; +Level Code Message +create table innodb_compressed(c1 bigint not null, b char(200)) engine=innodb row_format=compressed ENCRYPTION='KEYRING' encryption_key_id=3; +show warnings; +Level Code Message +create table innodb_dynamic(c1 bigint not null, b char(200)) engine=innodb row_format=dynamic ENCRYPTION='KEYRING' encryption_key_id=4; +show warnings; +Level Code Message +create table innodb_redundant(c1 bigint not null, b char(200)) engine=innodb row_format=redundant ENCRYPTION='KEYRING' encryption_key_id=5; +show warnings; +Level Code Message +insert into innodb_normal values (1,'test1'),(2,'foo'),(3,'bar'),(4,'mariadb'); +insert into innodb_compact select * from innodb_normal; +insert into innodb_compressed select * from innodb_normal; +insert into innodb_dynamic select * from innodb_normal; +insert into innodb_redundant select * from innodb_normal; +SELECT variable_value >= 0 FROM information_schema.global_status WHERE variable_name = 'innodb_num_pages_encrypted'; +variable_value >= 0 +1 +Warnings: +Warning 1287 'INFORMATION_SCHEMA.GLOBAL_STATUS' is deprecated and will be removed in a future release. Please use performance_schema.global_status instead +SELECT variable_value >= 0 FROM information_schema.global_status WHERE variable_name = 'innodb_num_pages_decrypted'; +variable_value >= 0 +1 +Warnings: +Warning 1287 'INFORMATION_SCHEMA.GLOBAL_STATUS' is deprecated and will be removed in a future release. Please use performance_schema.global_status instead +alter table innodb_compact engine=innodb encryption_key_id = 6; +alter table innodb_compressed engine=innodb encryption_key_id = 6; +alter table innodb_dynamic engine=innodb encryption_key_id = 6; +alter table innodb_redundant engine=innodb encryption_key_id = 6; +select * from innodb_normal; +c1 b +1 test1 +2 foo +3 bar +4 mariadb +select * from innodb_compact; +c1 b +1 test1 +2 foo +3 bar +4 mariadb +select * from innodb_compressed; +c1 b +1 test1 +2 foo +3 bar +4 mariadb +select * from innodb_dynamic; +c1 b +1 test1 +2 foo +3 bar +4 mariadb +select * from innodb_redundant; +c1 b +1 test1 +2 foo +3 bar +4 mariadb +SELECT variable_value >= 0 FROM information_schema.global_status WHERE variable_name = 'innodb_num_pages_encrypted'; +variable_value >= 0 +1 +Warnings: +Warning 1287 'INFORMATION_SCHEMA.GLOBAL_STATUS' is deprecated and will be removed in a future release. Please use performance_schema.global_status instead +SELECT variable_value >= 0 FROM information_schema.global_status WHERE variable_name = 'innodb_num_pages_decrypted'; +variable_value >= 0 +1 +Warnings: +Warning 1287 'INFORMATION_SCHEMA.GLOBAL_STATUS' is deprecated and will be removed in a future release. Please use performance_schema.global_status instead +# Restart mysqld --loose-file-key-management-filename=keys3.txt +# restart:--keyring-file-data=MYSQLTEST_VARDIR/std_data/keys3.txt +select * from innodb_normal; +c1 b +1 test1 +2 foo +3 bar +4 mariadb +select * from innodb_compact; +c1 b +1 test1 +2 foo +3 bar +4 mariadb +select * from innodb_compressed; +c1 b +1 test1 +2 foo +3 bar +4 mariadb +select * from innodb_dynamic; +c1 b +1 test1 +2 foo +3 bar +4 mariadb +select * from innodb_redundant; +c1 b +1 test1 +2 foo +3 bar +4 mariadb +SELECT variable_value >= 0 FROM information_schema.global_status WHERE variable_name = 'innodb_num_pages_encrypted'; +variable_value >= 0 +1 +Warnings: +Warning 1287 'INFORMATION_SCHEMA.GLOBAL_STATUS' is deprecated and will be removed in a future release. Please use performance_schema.global_status instead +SELECT variable_value >= 0 FROM information_schema.global_status WHERE variable_name = 'innodb_num_pages_decrypted'; +variable_value >= 0 +1 +Warnings: +Warning 1287 'INFORMATION_SCHEMA.GLOBAL_STATUS' is deprecated and will be removed in a future release. Please use performance_schema.global_status instead +alter table innodb_compact engine=innodb encryption_key_id = 2; +alter table innodb_compressed engine=innodb encryption_key_id = 3; +alter table innodb_dynamic engine=innodb encryption_key_id = 4; +alter table innodb_redundant engine=innodb encryption_key_id = 5; +select * from innodb_normal; +c1 b +1 test1 +2 foo +3 bar +4 mariadb +select * from innodb_compact; +c1 b +1 test1 +2 foo +3 bar +4 mariadb +select * from innodb_compressed; +c1 b +1 test1 +2 foo +3 bar +4 mariadb +select * from innodb_dynamic; +c1 b +1 test1 +2 foo +3 bar +4 mariadb +select * from innodb_redundant; +c1 b +1 test1 +2 foo +3 bar +4 mariadb +SELECT variable_value >= 0 FROM information_schema.global_status WHERE variable_name = 'innodb_num_pages_encrypted'; +variable_value >= 0 +1 +Warnings: +Warning 1287 'INFORMATION_SCHEMA.GLOBAL_STATUS' is deprecated and will be removed in a future release. Please use performance_schema.global_status instead +SELECT variable_value >= 0 FROM information_schema.global_status WHERE variable_name = 'innodb_num_pages_decrypted'; +variable_value >= 0 +1 +Warnings: +Warning 1287 'INFORMATION_SCHEMA.GLOBAL_STATUS' is deprecated and will be removed in a future release. Please use performance_schema.global_status instead +drop table innodb_normal; +drop table innodb_compact; +drop table innodb_compressed; +drop table innodb_dynamic; +drop table innodb_redundant; diff --git a/mysql-test/suite/encryption/r/innodb_rotation_mk_to_rk_post_enc_checksum_fail.result b/mysql-test/suite/encryption/r/innodb_rotation_mk_to_rk_post_enc_checksum_fail.result new file mode 100644 index 000000000000..c91d8950c57b --- /dev/null +++ b/mysql-test/suite/encryption/r/innodb_rotation_mk_to_rk_post_enc_checksum_fail.result @@ -0,0 +1,26 @@ +SET @@global.keyring_file_data="MYSQL_TMP_DIR/mysecret_keyring"; +SET GLOBAL innodb_file_per_table = ON; +SET GLOBAL innodb_file_format = `Barracuda`; +create table t1 (a TEXT) engine=innodb encryption='Y'; +BEGIN; +INSERT INTO t1 (a) VALUES ('foobarsecret'); +COMMIT; +# restart:--early-plugin-load=keyring_file=keyring_file.so --loose-keyring_file_data=/home/rob/git/5.7_rotated_tablespaces_bld/mysql-test/var/tmp/mysecret_keyring --plugin-dir=/home/rob/git/5.7_rotated_tablespaces_bld/plugin/keyring --innodb-encrypt-tables=ON --innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=1 +# Wait max 10 min for key encryption threads to encrypt all spaces + +include/assert.inc [All encrypted tables should have encrypted flag set] +# Backup t1 before corrupting +# Corrupt t1 +# Now restart server with encryption turned off and wait for threads to decrypt everything +# Apart from t1 which is corrupted and it should not be possible to decrypt this table +# restart:--early-plugin-load=keyring_file=keyring_file.so --loose-keyring_file_data=/home/rob/git/5.7_rotated_tablespaces_bld/mysql-test/var/tmp/mysecret_keyring --plugin-dir=/home/rob/git/5.7_rotated_tablespaces_bld/plugin/keyring --innodb-encrypt-tables=OFF --innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=1 +include/assert.inc [Table t1 should stayed encrypted as some of its pages were corrupted] +include/assert.inc [Table t1 should be the only one with encrypted flag set] +SELECT * FROM t1; +ERROR HY000: Got error 500 'Table encrypted but decryption failed. This could be because correct encryption management plugin is not loaded, used encryption key is not available or encryption method does not match.' from InnoDB +# Restore the original t1 +# restart:--early-plugin-load=keyring_file=keyring_file.so --loose-keyring_file_data=/home/rob/git/5.7_rotated_tablespaces_bld/mysql-test/var/tmp/mysecret_keyring --plugin-dir=/home/rob/git/5.7_rotated_tablespaces_bld/plugin/keyring --innodb-encrypt-tables=OFF --innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=1 +SELECT COUNT(*) FROM t1; +COUNT(*) +101 +DROP TABLE t1; diff --git a/mysql-test/suite/encryption/r/uninstall_keyring.result b/mysql-test/suite/encryption/r/uninstall_keyring.result new file mode 100644 index 000000000000..fc4808920bf7 --- /dev/null +++ b/mysql-test/suite/encryption/r/uninstall_keyring.result @@ -0,0 +1,102 @@ +call mtr.add_suppression("\\[Error\\] InnoDB: Encryption can't generate tablespace key"); +call mtr.add_suppression("\\[ERROR\\] Plugin keyring_file reported: 'File .*keyring' not found .*"); +call mtr.add_suppression("keyring_file initialization failure. Please check if the keyring_file_data points to readable keyring file or keyring file can be created in the specified location. The keyring_file will stay unusable until correct path to the keyring file gets provided"); +call mtr.add_suppression("is encrypted but encryption service or used key_id 0 is not available"); +call mtr.add_suppression("Ignoring tablespace `test/t1` because it could not be opened"); +call mtr.add_suppression("Ignoring tablespace `test/t2` because it could not be opened"); +call mtr.add_suppression("Ignoring tablespace `test/t_mk` because it could not be opened"); +call mtr.add_suppression("Failed to find tablespace for table `test`\.`t1` in the cache"); +call mtr.add_suppression("Failed to find tablespace for table `test`\.`t2` in the cache"); +call mtr.add_suppression("Failed to find tablespace for table `test`\.`t_mk` in the cache"); +call mtr.add_suppression("\\[ERROR\\] Function 'keyring_file' already exists"); +call mtr.add_suppression("\\[Warning\\] Couldn't load plugin named 'keyring_file' with soname 'keyring_file\.so'\."); +call mtr.add_suppression("\\[ERROR\\] InnoDB: Encryption can't find tablespace key, please check the keyring plugin is loaded\."); +# Wait max 10 min for key encryption threads to encrypt all spaces +# Encryption threads turned on, try uninstalling keyring +UNINSTALL PLUGIN keyring_file; +ERROR HY000: Plugin 'keyring_file' cannot be uninstalled now. Plugin is busy, it cannot be uninstalled. +# Turn off encryption threads, uninstall keyring +SET GLOBAL innodb_encryption_threads=0; +UNINSTALL PLUGIN keyring_file; +# Turn on encryption back - should not be possible as there is keyring plugin installed +SET GLOBAL innodb_encryption_threads=1; +ERROR HY000: InnoDB: cannot enable encryption threads, keyring plugin is not available +# Install keyring plugin and turn encryption threads back on +INSTALL PLUGIN keyring_file SONAME 'keyring_file.so'; +SET GLOBAL innodb_encryption_threads=4; +CREATE table t_mk (a varchar(255)) engine=innodb; +# Turn off encryption threads, uninstall keyring. Check CREATE, ALTER etc. +SET GLOBAL innodb_encryption_threads=0; +SET GLOBAL innodb_encrypt_tables=ONLINE_FROM_KEYRING_TO_UNENCRYPTED; +UNINSTALL PLUGIN keyring_file; +CREATE TABLE t1 (a varchar(255)) engine=innodb encryption='KEYRING'; +ERROR HY000: Seems that keyring is down. It is not possible to create encrypted tables without keyring. Please install a keyring and try again. +CREATE TABLE t2 (a varchar(255)) engine=innodb; +ALTER TABLE t2 ENCRYPTION='KEYRING'; +ERROR HY000: Seems that keyring is down. It is not possible to encrypt table without keyring. Please install a keyring and try again. +ALTER TABLE t_mk ENCRYPTION='KEYRING'; +ERROR HY000: Seems that keyring is down. It is not possible to encrypt table without keyring. Please install a keyring and try again. +# Decrypt all tables. The restart without keyring plugin functional should work as there should not be +# any system tables left encrypted with KEYRING +INSTALL PLUGIN keyring_file SONAME 'keyring_file.so'; +SET GLOBAL innodb_encryption_threads=4; +SET GLOBAL innodb_encrypt_tables=ONLINE_FROM_KEYRING_TO_UNENCRYPTED; +# Wait max 10 min for key encryption threads to decrypt all spaces +SET GLOBAL innodb_encryption_threads=0; +UNINSTALL PLUGIN keyring_file; +#It should not be possible to start server with encryption threads > 0 and no keyring installed +# It should not be possible to start server with encryption threads > 0 and keyring not properly +# intialized +# Check that keyring_file was not properly intialized by checking error log +# We should get error in error log as that it is not possible to start encryption threads +# when keyring is not properly initialized. +# Start with keyring plugin installed but not functional (impossible keyring file path). Enabling encryption threads should not be possible as well as creating tables encrypted with KEYRING. +# restart:--early-plugin-load=keyring_file=keyring_file.so --loose-keyring_file_data=/homeless/root/mysecret_keyring KEYRING_PLUGIN_OPT --innodb-encrypt-tables=ONLINE_FROM_KEYRING_TO_UNENCRYPTED --innodb-encryption-threads=0 --log-error=MYSQL_TMP_DIR/my_restart.err --innodb-encrypt-tables=OFF +SET GLOBAL innodb_encryption_threads=1; +ERROR HY000: InnoDB: keyring plugin is installed but it seems it was not properly initialized. Cannot enable encryption threads. +CREATE TABLE t1 (a varchar(255)) engine=innodb encryption='KEYRING'; +ERROR HY000: Seems that keyring is down. It is not possible to create encrypted tables without keyring. Please install a keyring and try again. +ALTER TABLE t2 ENCRYPTION='KEYRING'; +ERROR HY000: Seems that keyring is down. It is not possible to encrypt table without keyring. Please install a keyring and try again. +ALTER TABLE t_mk ENCRYPTION='KEYRING'; +ERROR HY000: Seems that keyring is down. It is not possible to encrypt table without keyring. Please install a keyring and try again. +# Set valid keyring file path and try above operations +SET @@global.keyring_file_data= 'MYSQL_TMP_DIR/mysecret_keyring'; +SET GLOBAL innodb_encryption_threads=1; +CREATE TABLE t1 (a varchar(255)) engine=innodb encryption='KEYRING'; +ALTER TABLE t2 ENCRYPTION='KEYRING'; +ALTER TABLE t_mk ENCRYPTION='KEYRING'; +INSERT t2 VALUES (repeat('foobarsecret', 12)); +SET GLOBAL innodb_encryption_threads=0; +UNINSTALL PLUGIN keyring_file; +ALTER TABLE t2 ENCRYPTION='N'; +ERROR HY000: Cannot find key to decrypt table to ALTER. Please make sure that keyring is installed and key used to encrypt table is available. +INSTALL PLUGIN keyring_file SONAME 'keyring_file.so'; +Warnings: +Warning 29 File '/homeless/root/mysecret_keyring' not found (Errcode: 2 - No such file or directory) +SET @@global.keyring_file_data= 'MYSQL_TMP_DIR/mysecret_keyring'; +# restart:--early-plugin-load=keyring_file=keyring_file.so --loose-keyring_file_data=/homeless/root/mysecret_keyring KEYRING_PLUGIN_OPT --innodb-encrypt-tables=ONLINE_FROM_KEYRING_TO_UNENCRYPTED --innodb-encryption-threads=0 +ALTER TABLE t2 ENCRYPTION='N'; +ERROR HY000: Got error 500 'Table encrypted but decryption failed. This could be because correct encryption management plugin is not loaded, used encryption key is not available or encryption method does not match.' from InnoDB +DROP TABLE t1,t2,t_mk; +CREATE TABLE t1 (a varchar(255)) engine=innodb; +INSERT t1 VALUES (repeat('foobarsecret', 12)); +CREATE TABLE t2 (a varchar(255)) engine=innodb; +INSERT t2 VALUES (repeat('foobarsecret', 12)); +CREATE TABLE t3 (a varchar(255)) engine=innodb; +INSERT t3 VALUES (repeat('foobarsecret', 12)); +CREATE TABLE t4 (a varchar(255)) engine=innodb; +INSERT t4 VALUES (repeat('foobarsecret', 12)); +CREATE TABLE t5 (a varchar(255)) engine=innodb; +INSERT t5 VALUES (repeat('foobarsecret', 12)); +CREATE TABLE t6 (a varchar(255)) engine=innodb; +INSERT t6 VALUES (repeat('foobarsecret', 12)); +SET @@global.keyring_file_data= 'MYSQL_TMP_DIR/mysecret_keyring'; +SET GLOBAL innodb_encryption_threads=3; +SET GLOBAL innodb_encrypt_tables=ONLINE_TO_KEYRING; +CREATE TABLE t7 (a varchar(255)) engine=innodb; +INSERT t7 VALUES (repeat('foobarsecret', 12)); +SET GLOBAL innodb_encryption_threads=0; +UNINSTALL PLUGIN keyring_file; +# restart:--innodb-encrypt-tables=ONLINE_FROM_KEYRING_TO_UNENCRYPTED --innodb-encryption-threads=0 +DROP TABLE t1,t2,t3,t4,t5,t6,t7; diff --git a/mysql-test/suite/encryption/t/.swp b/mysql-test/suite/encryption/t/.swp new file mode 100644 index 0000000000000000000000000000000000000000..be666fc408d28b8c7900582796e252fd11d49a1d GIT binary patch literal 12288 zcmeI%I|{-;5P;!PD=S4W;GV2q1s}0tg_000Iagkb*!IX5?u4X5-$uIA%U#oDvW~009IL zKmY**5I_I{1Q0;r2L;@v$f+Q5HqYb#fAal*Gx;@H|G|54WCRdE009ILKmY**5I_I{ r1pZE-uGHH1gQZrHt2f>*bQj)EdH!O%52JP9%ex?6RGVPc8x2M76d)!% literal 0 HcmV?d00001 diff --git a/mysql-test/suite/encryption/t/create_or_replace-master.opt b/mysql-test/suite/encryption/t/create_or_replace-master.opt new file mode 100644 index 000000000000..e7783ed63dd3 --- /dev/null +++ b/mysql-test/suite/encryption/t/create_or_replace-master.opt @@ -0,0 +1,3 @@ +$KEYRING_PLUGIN_OPT +--early-plugin-load="keyring_file=$KEYRING_PLUGIN" +--loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring diff --git a/mysql-test/suite/encryption/t/create_or_replace.test b/mysql-test/suite/encryption/t/create_or_replace.test new file mode 100644 index 000000000000..9f7b061d1061 --- /dev/null +++ b/mysql-test/suite/encryption/t/create_or_replace.test @@ -0,0 +1,155 @@ +--source include/have_innodb.inc +#--source include/have_file_key_management_plugin.inc +--source include/not_embedded.inc +# This is needed for longer testcase timeout at least P7/P8 +--source include/big_test.inc + +# +# MDEV-8164: Server crashes in pfs_mutex_enter_func after fil_crypt_is_closing or alike +# +SET default_storage_engine = InnoDB; + +CREATE TABLE t1 (pk INT PRIMARY KEY, c VARCHAR(256)); +CREATE TABLE t2 AS SELECT * FROM t1; + +--disable_abort_on_error +--disable_warnings +--disable_query_log + +let $i = 40; +while ($i) +{ +SET GLOBAL innodb_encrypt_tables = ONLINE_TO_KEYRING; +SET GLOBAL innodb_encryption_threads = 1; +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 AS SELECT * FROM t2; +DROP TABLE IF EXISTS t2; +CREATE TABLE t2 AS SELECT * FROM t1; +SET GLOBAL innodb_encryption_rotation_iops = 100; +SET GLOBAL innodb_encrypt_tables = ONLINE_FROM_KEYRING_TO_UNENCRYPTED; +DROP TABLE IF EXISTS t2; +CREATE TABLE t2 AS SELECT * FROM t1; +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 AS SELECT * FROM t2; +dec $i; +} + +--enable_abort_on_error +--enable_warnings +--enable_query_log + +drop table t1,t2; +SET GLOBAL innodb_encryption_threads = 0; + +# +# MDEV-8173: InnoDB; Failing assertion: crypt_data->type == 1 +# + +SET GLOBAL innodb_encryption_threads = 4; + +CREATE TABLE `table10_int_autoinc` (`col_int_key` int, pk int auto_increment, `col_int` int, key (`col_int_key` ),primary key (pk)) engine=innodb; +INSERT /*! IGNORE */ INTO table10_int_autoinc VALUES (NULL, NULL, -474021888) , (1, NULL, NULL) , (1141047296, NULL, NULL) , (NULL, NULL, NULL) , (NULL, NULL, 1) , (NULL, NULL, 9) , (0, NULL, 1225785344) , (NULL, NULL, 1574174720) , (2, NULL, NULL) , (6, NULL, 3); + +CREATE TABLE `table1_int_autoinc` (`col_int_key` int, pk int auto_increment, `col_int` int,key (`col_int_key` ), primary key (pk)) engine=innodb; + +CREATE TABLE `table0_int_autoinc` (`col_int_key` int, pk int auto_increment, `col_int` int, key (`col_int_key` ),primary key (pk)) engine=innodb; + +INSERT /*! IGNORE */ INTO table1_int_autoinc VALUES (4, NULL, NULL); +INSERT IGNORE INTO `table0_int_autoinc` ( `col_int_key` ) VALUES ( 1 ), ( 3 ), ( 4 ), ( 1 ); +INSERT IGNORE INTO `table1_int_autoinc` ( `col_int` ) VALUES ( 1 ), ( 0 ), ( 7 ), ( 9 ); +INSERT IGNORE INTO `table10_int_autoinc` ( `col_int` ) VALUES ( 6 ), ( 2 ), ( 3 ), ( 6 ); + +--connect (con1,localhost,root,,test) +--connect (con2,localhost,root,,test) + +--disable_abort_on_error +--disable_warnings +--disable_query_log + +#let $i = 500; +let $i = 100; +while ($i) +{ +connection con1; +send SET GLOBAL innodb_encrypt_tables = ONLINE_TO_KEYRING; +connection default; +DROP TABLE IF EXISTS create_or_replace_t; +CREATE TABLE IF NOT EXISTS create_or_replace_t AS SELECT * FROM table1_int_autoinc; +connection con2; +DROP TABLE IF EXISTS create_or_replace_t; +send CREATE TABLE IF NOT EXISTS create_or_replace_t AS SELECT * FROM table10_int_autoinc; +connection default; +DROP TABLE IF EXISTS create_or_replace_t; +send CREATE TABLE IF NOT EXISTS create_or_replace_t AS SELECT * FROM table0_int_autoinc; +connection con1; +--reap; +send SET GLOBAL innodb_encrypt_tables = ONLINE_FROM_KEYRING_TO_UNENCRYPTED; +connection con2; +--reap; +connection default; +--reap; +DROP TABLE IF EXISTS create_or_replace_t; +send CREATE TABLE IF NOT EXISTS create_or_replace_t AS SELECT * FROM table1_int_autoinc; +connection con2; +DROP TABLE IF EXISTS create_or_replace_t; +send CREATE TABLE IF NOT EXISTS create_or_replace_t AS SELECT * FROM table10_int_autoinc; +connection con1; +--reap; +send SET GLOBAL innodb_encrypt_tables = ONLINE_TO_KEYRING; +connection default; +--reap; +DROP TABLE IF EXISTS create_or_replace_t; +send CREATE TABLE IF NOT EXISTS create_or_replace_t AS SELECT * FROM table1_int_autoinc; +connection con2; +--reap; +DROP TABLE IF EXISTS create_or_replace_t; +CREATE TABLE IF NOT EXISTS create_or_replace_t AS SELECT * FROM table10_int_autoinc; +DROP TABLE IF EXISTS create_or_replace_t; +CREATE TABLE IF NOT EXISTS create_or_replace_t AS SELECT * FROM table0_int_autoinc; +connection con1; +--reap; +connection default; +--reap; +dec $i; +} + +--enable_query_log +connection default; +drop table if exists create_or_replace_t, table1_int_autoinc, table0_int_autoinc, table10_int_autoinc; +--disconnect con1 +--disconnect con2 +--enable_abort_on_error +--enable_warnings + +SET GLOBAL innodb_encrypt_tables = ONLINE_FROM_KEYRING_TO_UNENCRYPTED; +SET GLOBAL innodb_encryption_threads = 4; + +--echo # Wait max 10 min for key encryption threads to decrypt all spaces +let $cnt=600; +while ($cnt) +{ + let $success=`SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0`; + if ($success) + { + let $cnt=0; + } + if (!$success) + { + real_sleep 1; + dec $cnt; + } +} +if (!$success) +{ + SELECT * FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION; + SHOW STATUS LIKE 'innodb_encryption%'; + -- die Timeout waiting for encryption threads +} +--echo # Success! + +SET GLOBAL innodb_encryption_threads = 0; +SET GLOBAL innodb_encrypt_tables = ONLINE_FROM_KEYRING_TO_UNENCRYPTED; + +# Make sure that all dirty pages are flushed + +-- source include/restart_mysqld.inc diff --git a/mysql-test/suite/encryption/t/encrypt_and_grep-master.opt b/mysql-test/suite/encryption/t/encrypt_and_grep-master.opt new file mode 100644 index 000000000000..d466209803a6 --- /dev/null +++ b/mysql-test/suite/encryption/t/encrypt_and_grep-master.opt @@ -0,0 +1,6 @@ +$KEYRING_PLUGIN_OPT +--early-plugin-load="keyring_file=$KEYRING_PLUGIN" +--loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring +--innodb-encrypt-tables=ONLINE_TO_KEYRING +--innodb-encryption-rotate-key-age=15 +--innodb-encryption-threads=4 diff --git a/mysql-test/suite/encryption/t/encrypt_and_grep.test b/mysql-test/suite/encryption/t/encrypt_and_grep.test new file mode 100644 index 000000000000..25dc716c8493 --- /dev/null +++ b/mysql-test/suite/encryption/t/encrypt_and_grep.test @@ -0,0 +1,361 @@ +--skip # Test unstable on Jenkins +-- source include/have_innodb.inc +#-- source include/have_file_key_management_plugin.inc + +# embedded does not support restart +-- source include/not_embedded.inc + +#--echo $KEYRING_PLUGIN_OPT +#--echo $KEYRING_PLUGIN_LOAD + +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR +eval SET @@global.keyring_file_data="$MYSQL_TMP_DIR/mysecret_keyring"; + +# +# MDEV-8138: strange results from encrypt-and-grep test +# +--let $MYSQLD_DATADIR=`select @@datadir` +#TODO: Robert - dlaczego tu jest ibdata1 +--let ib1_IBD = $MYSQLD_DATADIR/ibdata1 +--let t1_IBD = $MYSQLD_DATADIR/test/t1.ibd +--let t2_IBD = $MYSQLD_DATADIR/test/t2.ibd +--let t3_IBD = $MYSQLD_DATADIR/test/t3.ibd +--let t4_IBD = $MYSQLD_DATADIR/test/t4.ibd +--let ts_encrypted_IBD = $MYSQLD_DATADIR/ts_encrypted.ibd +--let SEARCH_RANGE = 10000000 + +--disable_warnings +SET GLOBAL innodb_file_per_table = ON; +SET GLOBAL innodb_file_format = `Barracuda`; +--enable_warnings + +create table t1 (a varchar(255)) engine=innodb encryption='KEYRING'; +create table t2 (a varchar(255)) engine=innodb; +show warnings; +create table t3 (a varchar(255)) engine=innodb encryption='N'; +create table t4 (a varchar(255)) engine=innodb encryption='KEYRING' encryption_key_id=5; + +CREATE TABLESPACE ts_encrypted ADD DATAFILE 'ts_encrypted.ibd' ENCRYPTION="Y" ENGINE="InnoDB"; +CREATE TABLE t5 (a varchar(255)) TABLESPACE ts_encrypted ENCRYPTION="Y" ENGINE="InnoDB"; + +--error ER_INVALID_ENCRYPTION_OPTION +CREATE TABLESPACE ts_rk_encrypted ADD DATAFILE 'ts_rk_encrypted.ibd' ENCRYPTION='KEYRING' ENGINE="InnoDB"; + +create table t6 (a varchar(255)) engine=innodb; +#create table t5 (a varchar(255)) engine=innodb encryption='Y'; + +insert t1 values (repeat('foobarsecret', 12)); +insert t2 values (repeat('tempsecret', 12)); +insert t3 values (repeat('dummysecret', 12)); +insert t4 values (repeat('verysecret', 12)); +insert t5 values (repeat('moresecret', 12)); +insert t6 values (repeat('sooosecret', 12)); + +select * from t1; +select * from t2; +select * from t3; +select * from t4; +select * from t5; +select * from t6; + +ALTER TABLE t4 ENCRYPTION='N', ALGORITHM=INPLACE; +--let SEARCH_PATTERN=verysecret +--let ABORT_ON=NOT_FOUND +--let SEARCH_FILE=$t4_IBD +--source include/search_pattern_in_file.inc + +ALTER TABLE t4 ENCRYPTION='KEYRING', ALGORITHM=INPLACE; +--echo # ibdata1 expecting NOT_FOUND +--let ABORT_ON=FOUND +--let SEARCH_PATTERN=verysecret +--let SEARCH_FILE=$t4_IBD +--source include/search_pattern_in_file.inc + +--echo # It should be possible to mark table as not encrypted with INPLACE algorithm, given table is +--echo # is currently not encrypted +ALTER TABLE t6 ENCRYPTION='N', ALGORITHM=INPLACE; + +ALTER TABLE t6 ENCRYPTION='KEYRING', ALGORITHM=INPLACE; + + + +--let encrypted_tables_count=`select count(*) from INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES` +--echo # Wait max 10 min for key encryption threads to encrypt all spaces +--echo $encrypted_tables_counts +--let $wait_timeout= 600 +--let $wait_condition=SELECT COUNT(*) = $encrypted_tables_count FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 1 +--source include/wait_condition.inc + +#SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE FLAG = 8225; +--let $assert_text= All encrypted tables should have encrypted flag set, apart from t3 +#--let $assert_cond= "[SELECT COUNT(*) = $encrypted_tables_count - 1] FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE FLAG = 8225" = 1 +# encryted_tables_count - 1 here, as INNODB_SYS_TABLESPACES does not include innodb_system +--let $assert_cond= "[SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE ((FLAG & 8192) = 8192)]" = $encrypted_tables_count - 1 +--source include/assert.inc + +#SELECT COUNT(*) FROM SYS_TABLES WHERE + +#select table_name, table_schema from information_schema.tables; + +#SELECT NAME, MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; +#SELECT NAME, MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; +#SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES; +#SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES; + +#create table t5 (a varchar(255)) engine=innodb encryption='Y'; + +#SELECT * FROM SYS_TABLESPACES; +#SELECT * FROM SYS_TABLES; + +SHOW CREATE TABLE INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES; +SHOW CREATE TABLE INFORMATION_SCHEMA.INNODB_SYS_TABLES; + + +--source include/shutdown_mysqld.inc + +--let SEARCH_PATTERN=foobarsecret +--let ABORT_ON=FOUND +#--let ABORT_ON_NOT_FOUND=0 +#--let ABORT_ON_FOUND=1 +--echo # t1 yes on expecting NOT FOUND +--let SEARCH_FILE=$t1_IBD +--source include/search_pattern_in_file.inc +--let SEARCH_PATTERN=tempsecret +--echo # t2 ... on expecting NOT FOUND +--let SEARCH_FILE=$t2_IBD +--source include/search_pattern_in_file.inc +--let ABORT_ON=NOT_FOUND +--let SEARCH_PATTERN=dummysecret +--echo # t3 no on expecting FOUND +--let SEARCH_FILE=$t3_IBD +--source include/search_pattern_in_file.inc +--let SEARCH_PATTERN=verysecret +--let ABORT_ON=FOUND +--echo # t4 no on expecting NOT FOUND +--let SEARCH_FILE=$t4_IBD +--source include/search_pattern_in_file.inc +--let SEARCH_PATTERN=foobarsecret +--let ABORT_ON=FOUND +--echo # ibdata1 expecting NOT FOUND +-- let SEARCH_FILE=$ib1_IBD +-- source include/search_pattern_in_file.inc +--echo # ts_encrypted expecting NOT FOUND +--let ABORT_ON=FOUND +--let SEARCH_FILE=$ts_encrypted_IBD +--let SEARCH_PATTERN=moresecret +--source include/search_pattern_in_file.inc + + +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR $KEYRING_PLUGIN_OPT KEYRING_PLUGIN_OPT +--let $restart_parameters=restart:--early-plugin-load="keyring_file=$KEYRING_PLUGIN" --loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring $KEYRING_PLUGIN_OPT --innodb-encrypt-tables=ONLINE_TO_KEYRING --innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=1 +-- source include/start_mysqld.inc + +--echo # Now turn off encryption and wait for threads to decrypt everything + +#SELECT NAME, MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; +#SELECT NAME, MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; + +#SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES; +#SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES; + +SET GLOBAL innodb_encrypt_tables = ONLINE_FROM_KEYRING_TO_UNENCRYPTED; + +#--sleep 10 + +#SELECT NAME, MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; +#SELECT NAME, MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; + +#SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES; +#SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES; + +#echo ======alll-from-information_schema==== +#select * from information_schema.tables where engine = 'InnoDB'; +--echo # Only three tables should stayed encrypted - the ones with explicite encryption +#--let $wait_condition=SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 AND ROTATING_OR_FLUSHING = 0 +--let $wait_timeout= 600 +--let $wait_condition=SELECT COUNT(*) = 3 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 1 +--source include/wait_condition.inc + +#SELECT NAME, MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; +#SELECT NAME, MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; + +#SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES; +#SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES; + +--let $assert_text= Only two tables should stayed encrypted - the ones with explicite encryption t1 and t4 + +--let $assert_cond= "[SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE ((FLAG & 8192) = 8192)]" = 3 +--source include/assert.inc + +#--die +# +#--sleep 70 + +#SELECT NAME, MIN_KEY_VERSION, ROTATING_OR_FLUSHING FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; +#SELECT NAME, MIN_KEY_VERSION, ROTATING_OR_FLUSHING FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; + +#SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES; +#SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES; + +#--die + + +--source include/shutdown_mysqld.inc + +--let SEARCH_PATTERN=foobarsecret +--let ABORT_ON=FOUND +--echo # t1 yes on expecting NOT FOUND +--let SEARCH_FILE=$t1_IBD +--source include/search_pattern_in_file.inc +--let SEARCH_PATTERN=tempsecret +--let ABORT_ON=NOT_FOUND +--echo # t2 ... default expecting FOUND +--let SEARCH_FILE=$t2_IBD +--source include/search_pattern_in_file.inc +--let SEARCH_PATTERN=dummysecret +--let ABORT_ON=NOT_FOUND +--echo # t3 no on expecting FOUND +--let SEARCH_FILE=$t3_IBD +--source include/search_pattern_in_file.inc +--let SEARCH_PATTERN=verysecret +--let ABORT_ON=FOUND +--echo # t1 yes on expecting NOT FOUND +--let SEARCH_FILE=$t4_IBD +--source include/search_pattern_in_file.inc +--let SEARCH_PATTERN=foobarsecret +--let ABORT_ON=FOUND +--echo # ibdata1 expecting NOT FOUND +--let SEARCH_FILE=$ib1_IBD +--source include/search_pattern_in_file.inc +--let ABORT_ON=NOT_FOUND +--let SEARCH_FILE=$ts_encrypted_IBD +--let SEARCH_PATTERN=moresecret +--source include/search_pattern_in_file.inc + + +--let $restart_parameters=restart:--early-plugin-load="keyring_file=$KEYRING_PLUGIN" --loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring $KEYRING_PLUGIN_OPT --innodb-encrypt-tables=ONLINE_TO_KEYRING --innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=4 + +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR $KEYRING_PLUGIN_OPT KEYRING_PLUGIN_OPT +-- source include/start_mysqld.inc + +--echo # Now turn on encryption and wait for threads to encrypt all spaces +SET GLOBAL innodb_encrypt_tables = ONLINE_TO_KEYRING; + + +--echo # Wait max 10 min for key encryption threads to encrypt all spaces +--let $wait_timeout= 600 +--let $wait_condition=SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 +--source include/wait_condition.inc + +--let $assert_text= Only one table should stay unencrypted i.e. t3 +--let $assert_cond= "[SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE ((FLAG & 8192) = 0)]" = 1 +--source include/assert.inc + +#SELECT NAME, MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; +#SELECT NAME, MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; + +#SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES; +#SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES; + +--source include/shutdown_mysqld.inc + +--let SEARCH_PATTERN=foobarsecret +--let ABORT_ON=FOUND +--echo # t1 yes on expecting NOT FOUND +-- let SEARCH_FILE=$t1_IBD +-- source include/search_pattern_in_file.inc +--let SEARCH_PATTERN=tempsecret +--let ABORT_ON=FOUND +--echo # t2 ... on expecting NOT FOUND +-- let SEARCH_FILE=$t2_IBD +-- source include/search_pattern_in_file.inc +--let SEARCH_PATTERN=dummysecret +--let ABORT_ON=NOT_FOUND +--echo # t3 no on expecting FOUND +-- let SEARCH_FILE=$t3_IBD +-- source include/search_pattern_in_file.inc +--let SEARCH_PATTERN=verysecret +--let ABORT_ON=FOUND +--echo # t1 yes on expecting NOT FOUND +--let SEARCH_FILE=$t4_IBD +--source include/search_pattern_in_file.inc +--let SEARCH_PATTERN=foobarsecret +--let ABORT_ON=FOUND +--echo # ibdata1 expecting NOT FOUND +--let SEARCH_FILE=$ib1_IBD +--source include/search_pattern_in_file.inc +--let ABORT_ON=FOUND +--let SEARCH_FILE=$ts_encrypted_IBD +--let SEARCH_PATTERN=moresecret +--source include/search_pattern_in_file.inc + +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR $KEYRING_PLUGIN_OPT KEYRING_PLUGIN_OPT +--source include/start_mysqld.inc + +alter table t1 encryption='n'; +alter table t4 encryption='n'; + +#--sleep 15 +#SELECT * FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION; +#SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES; +#SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES; + +--echo # Wait max 10 min for key encryption threads to encrypt all spaces (apart from t1,t3 and t4) +--let $wait_timeout= 600 +--let $wait_condition=SELECT COUNT(*) = 3 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 +--source include/wait_condition.inc + +#SELECT NAME, MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; +#SELECT NAME, MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; + +#SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES; +#SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES; + +--let $assert_text= All spaces apart from t1, t3 and t4 should got encrypted +--let $assert_cond= "[SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE ((FLAG & 8192) = 0)]" = 3 +--source include/assert.inc + +#SELECT NAME, MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; +#SELECT NAME, MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; + +#SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES; +#SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES; + +--source include/shutdown_mysqld.inc + +--let SEARCH_PATTERN=foobarsecret +--let ABORT_ON=NOT_FOUND +--echo # t1 yes on expecting FOUND +-- let SEARCH_FILE=$t1_IBD +-- source include/search_pattern_in_file.inc +--let SEARCH_PATTERN=tempsecret +--let ABORT_ON=FOUND +--echo # t2 ... on expecting NOT FOUND +-- let SEARCH_FILE=$t2_IBD +-- source include/search_pattern_in_file.inc +--let SEARCH_PATTERN=dummysecret +--let ABORT_ON=NOT_FOUND +--echo # t3 no on expecting FOUND +--let SEARCH_FILE=$t3_IBD +--source include/search_pattern_in_file.inc +--let SEARCH_PATTERN=verysecret +--let ABORT_ON=NOT_FOUND +--echo # t4 no on expecting FOUND +--let SEARCH_FILE=$t4_IBD +--source include/search_pattern_in_file.inc +--let SEARCH_PATTERN=foobarsecret +--let ABORT_ON=FOUND +--echo # ibdata1 expecting NOT FOUND +--let ABORT_ON=FOUND +--let SEARCH_FILE=$ib1_IBD +--source include/search_pattern_in_file.inc +--let ABORT_ON=FOUND +--let SEARCH_FILE=$ts_encrypted_IBD +--let SEARCH_PATTERN=moresecret +--source include/search_pattern_in_file.inc + +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR $KEYRING_PLUGIN_OPT KEYRING_PLUGIN_OPT +--source include/start_mysqld.inc + +drop table t1, t2, t3, t4, t5, t6; +drop tablespace ts_encrypted; diff --git a/mysql-test/suite/encryption/t/encryption_force-master.opt b/mysql-test/suite/encryption/t/encryption_force-master.opt new file mode 100644 index 000000000000..027b6f4ad44b --- /dev/null +++ b/mysql-test/suite/encryption/t/encryption_force-master.opt @@ -0,0 +1,5 @@ +$KEYRING_PLUGIN_OPT +--early-plugin-load="keyring_file=$KEYRING_PLUGIN" +--loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring +--innodb-encrypt-tables=KEYRING_FORCE + diff --git a/mysql-test/suite/encryption/t/encryption_force.test b/mysql-test/suite/encryption/t/encryption_force.test new file mode 100644 index 000000000000..acd5808c3117 --- /dev/null +++ b/mysql-test/suite/encryption/t/encryption_force.test @@ -0,0 +1,56 @@ +-- source include/have_innodb.inc +-- source include/have_partition.inc +# embedded does not support restart +-- source include/not_embedded.inc + +select @@innodb_encrypt_tables; + +set global innodb_encrypt_tables='KEYRING_FORCE'; + +create table t1 (a int) engine=innodb encryption='KEYRING'; +create table t2 (a varchar(255)) engine=innodb; +--error ER_INVALID_ENCRYPTION_OPTION +create table t3 (a int) engine=innodb encryption='N'; + +create table t4 (a int) engine=innodb encryption='KEYRING' partition by hash(a) partitions 2; +--error ER_INVALID_ENCRYPTION_OPTION +create table t5 (a int) engine=innodb encryption='N' partition by hash(a) partitions 2; + +set global innodb_encrypt_tables='KEYRING_ON'; +create table t3 (a int) engine=innodb encryption='N'; +set global innodb_encrypt_tables='KEYRING_FORCE'; + +show create table t1; +show create table t2; +show create table t3; +show create table t4; + +--error ER_INVALID_ENCRYPTION_OPTION +alter table t1 encryption='N'; +alter table t2 encryption='KEYRING'; +alter table t3 encryption='KEYRING'; +--error ER_INVALID_ENCRYPTION_OPTION +alter table t4 encryption='N'; + +show create table t1; +show create table t2; +show create table t3; + +insert t2 values (repeat('tempsecret', 12)); + +--let $MYSQLD_DATADIR=`select @@datadir` +--let t2_IBD = $MYSQLD_DATADIR/test/t2.ibd + +--source include/shutdown_mysqld.inc + +--let SEARCH_PATTERN=tempsecret +--let ABORT_ON=FOUND +--let SEARCH_FILE=$t2_IBD +--source include/search_pattern_in_file.inc + +-- source include/start_mysqld.inc + +drop table t1; +drop table t2; +drop table t3; +drop table t4; diff --git a/mysql-test/suite/encryption/t/encryption_rotation-master.opt b/mysql-test/suite/encryption/t/encryption_rotation-master.opt new file mode 100644 index 000000000000..39fefbeaec1f --- /dev/null +++ b/mysql-test/suite/encryption/t/encryption_rotation-master.opt @@ -0,0 +1,4 @@ +$KEYRING_PLUGIN_OPT +--early-plugin-load="keyring_file=$KEYRING_PLUGIN" +--loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring +--innodb-encrypt-tables=OFF diff --git a/mysql-test/suite/encryption/t/encryption_rotation.test b/mysql-test/suite/encryption/t/encryption_rotation.test new file mode 100644 index 000000000000..4364e239e1f7 --- /dev/null +++ b/mysql-test/suite/encryption/t/encryption_rotation.test @@ -0,0 +1,9 @@ +--source include/have_innodb.inc +--source include/not_embedded.inc + +CREATE TABLE t1 (pk INT PRIMARY KEY, f VARCHAR(8)) ENGINE=InnoDB ENCRYPTION='Y'; + +#ALTER TABLE t1 ENCRYPTION='KEYRING'; +ALTER TABLE t1 ENCRYPTION='N'; + +DROP TABLE t1; diff --git a/mysql-test/suite/encryption/t/innodb-bad-key-change-master.opt b/mysql-test/suite/encryption/t/innodb-bad-key-change-master.opt new file mode 100644 index 000000000000..3a55f970f7fc --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb-bad-key-change-master.opt @@ -0,0 +1,6 @@ +$KEYRING_PLUGIN_OPT +--early-plugin-load="keyring_file=$KEYRING_PLUGIN" +--loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring +--loose-innodb-buffer-pool-stats +--loose-innodb-buffer-page +--loose-innodb-buffer-page-lru diff --git a/mysql-test/suite/encryption/t/innodb-bad-key-change.test b/mysql-test/suite/encryption/t/innodb-bad-key-change.test new file mode 100644 index 000000000000..e253139f97ab --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb-bad-key-change.test @@ -0,0 +1,127 @@ +-- source include/have_innodb.inc +#-- source include/have_file_key_management_plugin.inc +# embedded does not support restart +-- source include/not_embedded.inc +--source include/have_64bit.inc + +# +# MDEV-8588: Assertion failure in file ha_innodb.cc line 21140 if at least one encrypted +# table exists and encryption service is not available. +# + +call mtr.add_suppression("Plugin 'file_key_management' init function returned error"); +call mtr.add_suppression("Plugin 'file_key_management' registration.*failed"); +call mtr.add_suppression("InnoDB: The page \\[page id: space=[1-9][0-9]*, page number=[1-9][0-9]*\\] in file '.*test.t[12]\\.ibd' cannot be decrypted\\."); +call mtr.add_suppression("failed to read or decrypt \\[page id: space=[1-9][0-9]*, page number=[1-9][0-9]*\\]"); +call mtr.add_suppression("File '.*mysql-test.std_data.keysbad3\\.txt' not found"); + +call mtr.add_suppression("\\[Error\\] InnoDB: Page is still encrypted"); +call mtr.add_suppression("\\[Warning\\] InnoDB: Table is encrypted but encryption service or used key_id is not available\. Can't continue reading table\."); +call mtr.add_suppression("\\[Warning\\] InnoDB: Cannot save statistics for table `test`\.`t2` because file \./test/t2\.ibd cannot be decrypted\."); +call mtr.add_suppression("\\[Warning\\] InnoDB: Table in tablespace is encrypted but encryption service or used key_id is not available\. Can't continue reading table\."); + +--echo # Start server with keys2.txt +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--let $restart_parameters=restart:--keyring-file-data=$MYSQLTEST_VARDIR/std_data/keys2.txt +--source include/restart_mysqld.inc + +SET GLOBAL innodb_file_per_table = ON; + +CREATE TABLE t1 (c VARCHAR(8)) ENGINE=InnoDB ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=2; +INSERT INTO t1 VALUES ('foobar'); +ALTER TABLE t1 ADD COLUMN c2 INT; +INSERT INTO t1 VALUES ('foobar',2); +SELECT * FROM t1; +TRUNCATE TABLE t1; +SELECT * FROM t1; +INSERT INTO t1 VALUES ('foobar',1); +INSERT INTO t1 VALUES ('foobar',2); +FLUSH TABLE WITH READ LOCK; +SELECT * FROM t1; + +--echo +--echo # Restart server with keysbad3.txt +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--let $restart_parameters=restart:--keyring-file-data=$MYSQLTEST_VARDIR/std_data/keysbad3.txt +--source include/restart_mysqld.inc + +--disable_warnings +--error ER_GET_ERRMSG +SELECT * FROM t1; +--enable_warnings + +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--let $restart_parameters=restart:--keyring-file-data=$MYSQLTEST_VARDIR/std_data/keysbad3.txt +--source include/restart_mysqld.inc + +--disable_warnings +--replace_regex /tablespace [0-9]*/tablespace / +DROP TABLE t1; +--enable_warnings + +# +# MDEV-8591: Database page corruption on disk or a failed space, Assertion failure in file buf0buf.cc +# line 2856 on querying a table using wrong default encryption key +# + +--echo # Start server with keys3.txt +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +-- let $restart_parameters=restart:--keyring-file-data=$MYSQLTEST_VARDIR/std_data/keys3.txt +-- source include/restart_mysqld.inc + +SET GLOBAL innodb_stats_persistent=OFF; + +SET SESSION innodb_default_encryption_key_id=5; +CREATE TABLE t2 (c VARCHAR(8), id int not null primary key, b int, key(b)) ENGINE=InnoDB ENCRYPTION='KEYRING'; + +INSERT INTO t2 VALUES ('foobar',1,2); + +--echo +--echo # Restart server with keys2.txt +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +-- let $restart_parameters=restart:--keyring-file-data=$MYSQLTEST_VARDIR/std_data/keys2.txt +-- source include/restart_mysqld.inc + +SET GLOBAL innodb_stats_persistent=ON; + +--disable_warnings +--error ER_GET_ERRMSG +SELECT * FROM t2; + +--error ER_GET_ERRMSG +SELECT * FROM t2 where id = 1; + +--error ER_GET_ERRMSG +SELECT * FROM t2 where b = 1; + +--replace_regex /tablespace [0-9]*/tablespace / +--error ER_GET_ERRMSG +INSERT INTO t2 VALUES ('tmp',3,3); + +--error ER_GET_ERRMSG +DELETE FROM t2 where b = 3; + +--error ER_GET_ERRMSG +DELETE FROM t2 where id = 3; + +--error ER_GET_ERRMSG +UPDATE t2 set b = b +1; + +OPTIMIZE TABLE t2; + +--error ER_GET_ERRMSG +ALTER TABLE t2 ADD COLUMN d INT; + +ANALYZE TABLE t2; + +--error ER_GET_ERRMSG +TRUNCATE TABLE t2; + +DROP TABLE t2; +--enable_warnings + +--echo +--echo # Start server with keys2.txt +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +-- let $restart_parameters=restart:--keyring-file-data=$MYSQLTEST_VARDIR/std_data/keys2.txt +-- source include/restart_mysqld.inc diff --git a/mysql-test/suite/encryption/t/innodb-bad-key-change2.test b/mysql-test/suite/encryption/t/innodb-bad-key-change2.test new file mode 100644 index 000000000000..32e9c1c4aa60 --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb-bad-key-change2.test @@ -0,0 +1,110 @@ +--skip +--source include/have_innodb.inc +# embedded does not support restart +-- source include/not_embedded.inc +#-- source filekeys_plugin_exists.inc +# +# MDEV-8750: Server crashes in page_cur_is_after_last on altering table using a wrong encryption key +# MDEV-8769: Server crash at file btr0btr.ic line 122 when defragmenting encrypted table using incorrect keys +# MDEV-8768: Server crash at file btr0btr.ic line 122 when checking encrypted table using incorrect keys +# MDEV-8727: Server/InnoDB hangs on shutdown after trying to read an encrypted table with a wrong key +# +call mtr.add_suppression("InnoDB: The page \\[page id: space=[1-9][0-9]*, page number=[1-9][0-9]*\\] in file '.*test.t1(new)?\\.ibd' cannot be decrypted\\."); +call mtr.add_suppression("failed to read or decrypt \\[page id: space=[1-9][0-9]*, page number=[1-9][0-9]*\\]"); +# Suppression for builds where file_key_management plugin is linked statically +call mtr.add_suppression("Couldn't load plugins from 'file_key_management"); +call mtr.add_suppression("InnoDB: Tablespace for table \`test\`.\`t1\` is set as discarded\\."); + +SET GLOBAL innodb_stats_persistent=OFF; + +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--let $restart_parameters=restart:--keyring-file-data=$MYSQLTEST_VARDIR/std_data/keys2.txt +#--let $restart_parameters=--plugin-load-add=file_key_management.so --file-key-management --file-key-management-filename=$MYSQLTEST_VARDIR/std_data/keys2.txt +--source include/restart_mysqld.inc + +SET GLOBAL innodb_stats_persistent=OFF; +SET GLOBAL innodb_file_per_table = ON; + +CREATE TABLE t1 (pk INT PRIMARY KEY, f VARCHAR(8)) ENGINE=InnoDB ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=4; +INSERT INTO t1 VALUES (1,'foo'),(2,'bar'); + +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--let $restart_parameters=restart:--keyring-file-data=$MYSQLTEST_VARDIR/std_data/keys3.txt +##--let $restart_parameters=--plugin-load-add=file_key_management.so --file-key-management --file-key-management-filename=$MYSQLTEST_VARDIR/std_data/keys3.txt +--source include/restart_mysqld.inc + +SET GLOBAL innodb_stats_persistent=OFF; +--error ER_GET_ERRMSG +SELECT * FROM t1; +--replace_regex /(tablespace|key_id) [1-9][0-9]*/\1 / +SHOW WARNINGS; +--error ER_GET_ERRMSG +ALTER TABLE t1 ENGINE=InnoDB; +--replace_regex /(tablespace|key_id) [1-9][0-9]*/\1 / +SHOW WARNINGS; + +OPTIMIZE TABLE t1; +--replace_regex /(tablespace|key_id) [1-9][0-9]*/\1 / +SHOW WARNINGS; + +CHECK TABLE t1; +--replace_regex /(tablespace|key_id) [1-9][0-9]*/\1 / +SHOW WARNINGS; + +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--let $restart_parameters=restart:--keyring-file-data=$MYSQLTEST_VARDIR/std_data/keys2.txt +--source include/restart_mysqld.inc + +SET GLOBAL innodb_stats_persistent=OFF; +let MYSQLD_DATADIR =`SELECT @@datadir`; + +FLUSH TABLES t1 FOR EXPORT; +perl; +do "$ENV{MYSQL_TEST_DIR}/include/innodb-util.inc"; +ib_backup_tablespaces("test", "t1"); +EOF +UNLOCK TABLES; + +#--die + +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--let $restart_parameters=restart:--keyring-file-data=$MYSQLTEST_VARDIR/std_data/keys3.txt +--source include/restart_mysqld.inc + +SET GLOBAL innodb_stats_persistent=OFF; +# Discard should pass even with incorrect keys +--replace_regex /(tablespace|key_id) [1-9][0-9]*/\1 / +ALTER TABLE t1 DISCARD TABLESPACE; + +perl; +do "$ENV{MYSQL_TEST_DIR}/include/innodb-util.inc"; +ib_discard_tablespaces("test", "t1"); +ib_restore_tablespaces("test", "t1"); +EOF + + +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--let $restart_parameters=restart:--keyring-file-data=$MYSQLTEST_VARDIR/std_data/keys2.txt +#--let $restart_parameters=--plugin-load-add=file_key_management.so --file-key-management --file-key-management-filename=$MYSQLTEST_VARDIR/std_data/keys2.txt +--source include/restart_mysqld.inc + +SET GLOBAL innodb_stats_persistent=OFF; +ALTER TABLE t1 IMPORT TABLESPACE; +SHOW CREATE TABLE t1; + +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--let $restart_parameters=restart: --innodb-encrypt-tables --keyring-file-data=$MYSQLTEST_VARDIR/std_data/keys3.txt +#--let $restart_parameters= --innodb-encrypt-tables --plugin-load-add=file_key_management.so --file-key-management --file-key-management-filename=$MYSQLTEST_VARDIR/std_data/keys3.txt +--source include/restart_mysqld.inc + +SET GLOBAL innodb_stats_persistent=OFF; +# Rename table should pass even with incorrect keys +RENAME TABLE t1 TO t1new; +--replace_regex /(tablespace|key_id) [1-9][0-9]*/\1 / + +# Alter table rename is not allowed with incorrect keys +--error ER_GET_ERRMSG +ALTER TABLE t1new RENAME TO t2new; +# Drop should pass even with incorrect keys +--replace_regex /(tablespace|key_id) [1-9][0-9]*/\1 / +DROP TABLE t1new; diff --git a/mysql-test/suite/encryption/t/innodb-bad-key-change3-master.opt b/mysql-test/suite/encryption/t/innodb-bad-key-change3-master.opt new file mode 100644 index 000000000000..9bad0e569b45 --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb-bad-key-change3-master.opt @@ -0,0 +1,4 @@ +$KEYRING_PLUGIN_OPT +--early-plugin-load="keyring_file=$KEYRING_PLUGIN" +--loose-keyring_file_data=$MYSQLTEST_VARDIR/keys1.txt +--innodb-encrypt-tables=OFF diff --git a/mysql-test/suite/encryption/t/innodb-bad-key-change3.test b/mysql-test/suite/encryption/t/innodb-bad-key-change3.test new file mode 100644 index 000000000000..036e8370d94d --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb-bad-key-change3.test @@ -0,0 +1,62 @@ +--source include/have_innodb.inc +# embedded does not support restart +-- source include/not_embedded.inc +-- source include/not_valgrind.inc + +call mtr.add_suppression("cannot be decrypted. Are you using correct keyring that contain the"); +call mtr.add_suppression("InnoDB: Tablespace for table .* is set as discarded."); +call mtr.add_suppression("InnoDB: Cannot calculate statistics for table .* because the .ibd file is missing. Please refer to .* for how to resolve the issue."); + + +CREATE TABLE t1 (pk INT PRIMARY KEY, f VARCHAR(255)) ENGINE=InnoDB ROW_FORMAT=COMPRESSED ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=4; +SHOW WARNINGS; +SHOW CREATE TABLE t1; +INSERT INTO t1 VALUES (1,'foobar'),(2,'barfoo'); +let MYSQLD_DATADIR =`SELECT @@datadir`; +FLUSH TABLE t1 FOR EXPORT; +--echo # List before copying files +--list_files $MYSQLD_DATADIR/test +perl; +do "$ENV{MYSQL_TEST_DIR}/include/innodb-util.inc"; +ib_backup_tablespaces("test", "t1"); +EOF +UNLOCK TABLES; + +ALTER TABLE t1 DISCARD TABLESPACE; + +perl; +do "$ENV{MYSQL_TEST_DIR}/include/innodb-util.inc"; +ib_discard_tablespaces("test", "t1"); +ib_restore_tablespaces("test", "t1"); +EOF + +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--let $restart_parameters=restart:--keyring-file-data=$MYSQLTEST_VARDIR/keys2.txt +--source include/restart_mysqld.inc + +--let MYSQLD_DATADIR =`SELECT @@datadir` +--let t1_IBD = $MYSQLD_DATADIR/test/t1.ibd + +--error ER_GET_ERRMSG +ALTER TABLE t1 IMPORT TABLESPACE; +SHOW CREATE TABLE t1; +--error ER_TABLESPACE_DISCARDED +SELECT * FROM t1; +--echo # Tablespaces should be still encrypted + +--let SEARCH_PATTERN=foobar +--let ABORT_ON=FOUND +--echo # t1 yes on expecting NOT FOUND +--let SEARCH_FILE=$t1_IBD +--source include/search_pattern_in_file.inc + +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--let $restart_parameters=restart: --keyring-file-data=$MYSQLTEST_VARDIR/keys1.txt +--source include/restart_mysqld.inc + +DROP TABLE t1; + +# reset system + +--remove_file $MYSQLTEST_VARDIR/keys1.txt +--remove_file $MYSQLTEST_VARDIR/keys2.txt diff --git a/mysql-test/suite/encryption/t/innodb-bad-key-change4-master.opt b/mysql-test/suite/encryption/t/innodb-bad-key-change4-master.opt new file mode 100644 index 000000000000..76d01dc144ae --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb-bad-key-change4-master.opt @@ -0,0 +1,7 @@ +$KEYRING_PLUGIN_OPT +--early-plugin-load="keyring_file=$KEYRING_PLUGIN" +--loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring +--innodb-encrypt-tables=ONLINE_FROM_KEYRING_TO_UNENCRYPTED +--loose-innodb-buffer-pool-stats +--loose-innodb-buffer-page +--loose-innodb-buffer-page-lru diff --git a/mysql-test/suite/encryption/t/innodb-bad-key-change4.test b/mysql-test/suite/encryption/t/innodb-bad-key-change4.test new file mode 100644 index 000000000000..e3053d077f67 --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb-bad-key-change4.test @@ -0,0 +1,53 @@ +--source include/have_64bit.inc +--source include/have_innodb.inc +# embedded does not support restart +-- source include/not_embedded.inc +# +# MDEV-8769: Server crash at file btr0btr.ic line 122 when defragmenting encrypted table using incorrect keys +# MDEV-8768: Server crash at file btr0btr.ic line 122 when checking encrypted table using incorrect keys +# + +call mtr.add_suppression("InnoDB: The page \\[page id: space=[1-9][0-9]*, page number=[1-9][0-9]*\\] in file '.*test.t1\\.ibd' cannot be decrypted\\."); +call mtr.add_suppression("failed to read or decrypt \\[page id: space=[1-9][0-9]*, page number=[1-9][0-9]*\\]"); + +call mtr.add_suppression("\\[Error\\] InnoDB: Page is still encrypted"); +call mtr.add_suppression("\\[Warning\\] InnoDB: Table is encrypted but encryption service or used key_id is not available\. Can't continue reading table\."); + +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--let $restart_parameters=restart:--keyring-file-data=$MYSQLTEST_VARDIR/std_data/keys2.txt +--source include/restart_mysqld.inc + +SET GLOBAL innodb_file_per_table = ON; +#SET GLOBAL innodb_stats_persistent=OFF; + +CREATE TABLE t1 (pk INT PRIMARY KEY, f VARCHAR(8)) ENGINE=InnoDB ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=4; +INSERT INTO t1 VALUES (1,'foo'),(2,'bar'); + +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--let $restart_parameters=restart:--keyring-file-data=$MYSQLTEST_VARDIR/std_data/keys3.txt +--source include/restart_mysqld.inc + +#--let $restart_parameters=--plugin-load-add=file_key_management.so --file-key-management --file-key-management-filename=$MYSQLTEST_VARDIR/std_data/keys3.txt +#--source include/restart_mysqld.inc + +#SET GLOBAL innodb_stats_persistent=OFF; +--replace_regex /(tablespace|key_id) [1-9][0-9]*/\1 / +OPTIMIZE TABLE t1; +--replace_regex /(tablespace|key_id) [1-9][0-9]*/\1 / +SHOW WARNINGS; + +--replace_regex /(tablespace|key_id) [1-9][0-9]*/\1 / +CHECK TABLE t1; +--replace_regex /(tablespace|key_id) [1-9][0-9]*/\1 / +SHOW WARNINGS; + +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--let $restart_parameters=restart:--keyring-file-data=$MYSQLTEST_VARDIR/std_data/keys2.txt +--source include/restart_mysqld.inc + +call mtr.add_suppression("\\[Warning\\] InnoDB: Table in tablespace is encrypted .*"); +#SET GLOBAL innodb_stats_persistent=OFF; +#--let $restart_parameters=--plugin-load-add=file_key_management.so --file-key-management --file-key-management-filename=$MYSQLTEST_VARDIR/std_data/keys2.txt +#--source include/restart_mysqld.inc + +DROP TABLE t1; diff --git a/mysql-test/suite/encryption/t/innodb-corrupt-row-compressed-master.opt b/mysql-test/suite/encryption/t/innodb-corrupt-row-compressed-master.opt new file mode 100644 index 000000000000..e7783ed63dd3 --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb-corrupt-row-compressed-master.opt @@ -0,0 +1,3 @@ +$KEYRING_PLUGIN_OPT +--early-plugin-load="keyring_file=$KEYRING_PLUGIN" +--loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring diff --git a/mysql-test/suite/encryption/t/innodb-corrupt-row-compressed.test b/mysql-test/suite/encryption/t/innodb-corrupt-row-compressed.test new file mode 100644 index 000000000000..f549eb7f4bb0 --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb-corrupt-row-compressed.test @@ -0,0 +1,85 @@ +--skip +# +# MDEV-11759: Encryption code in MariaDB 10.1/10.2 causes compatibility problems +# + +-- source include/have_innodb.inc +#-- source include/have_file_key_management_plugin.inc +# Don't test under embedded +-- source include/not_embedded.inc + +call mtr.add_suppression("InnoDB: The page \\[page id: space=[1-9][0-9]*, page number=[1-9][0-9]*\\] in file '.*test.t[123]\\.ibd' cannot be decrypted\\."); +call mtr.add_suppression("failed to read or decrypt \\[page id: space=[1-9][0-9]*, page number=[1-9][0-9]*\\]"); + +SET GLOBAL innodb_file_per_table = ON; +#set global innodb_compression_algorithm = 1; + +--echo # Create and populate tables to be corrupted +CREATE TABLE t1 (a INT AUTO_INCREMENT PRIMARY KEY, b TEXT,c char(200)) ENGINE=InnoDB ENCRYPTION='KEYRING' ; +CREATE TABLE t2 (a INT AUTO_INCREMENT PRIMARY KEY, b TEXT,c char(200)) ENGINE=InnoDB row_format=compressed ENCRYPTION='KEYRING'; +CREATE TABLE t3 (a INT AUTO_INCREMENT PRIMARY KEY, b TEXT, c char(200)) ENGINE=InnoDB COMPRESSION="zlib" ENCRYPTION='KEYRING'; +BEGIN; +INSERT INTO t1 (b,c) VALUES ('corrupt me','secret'); +--disable_query_log +--let $i = 100 +while ($i) +{ + INSERT INTO t1 (b,c) VALUES (REPEAT('abcabcabc', 100),'secretsecret'); + dec $i; +} +--enable_query_log + +INSERT INTO t1 (b,c) VALUES ('corrupt me','moresecretmoresecret'); +INSERT INTO t2 select * from t1; +INSERT INTO t3 select * from t1; +COMMIT; + +let INNODB_PAGE_SIZE=`select @@innodb_page_size`; +let MYSQLD_DATADIR=`select @@datadir`; + +--source include/shutdown_mysqld.inc + +--echo # Backup tables before corrupting +--copy_file $MYSQLD_DATADIR/test/t1.ibd $MYSQLD_DATADIR/test/t1.ibd.backup +--copy_file $MYSQLD_DATADIR/test/t2.ibd $MYSQLD_DATADIR/test/t2.ibd.backup +--copy_file $MYSQLD_DATADIR/test/t3.ibd $MYSQLD_DATADIR/test/t3.ibd.backup + +--echo # Corrupt tables + +perl; +open(FILE, "+<", "$ENV{MYSQLD_DATADIR}/test/t1.ibd") or die "open"; +binmode FILE; +seek(FILE, $ENV{'INNODB_PAGE_SIZE'} * 3 + 26, SEEK_SET) or die "seek"; +print FILE pack("H*", "c00lcafedeadb017"); +close FILE or die "close"; +open(FILE, "+<", "$ENV{MYSQLD_DATADIR}/test/t2.ibd") or die "open"; +binmode FILE; +seek(FILE, $ENV{'INNODB_PAGE_SIZE'} * 3 + 26, SEEK_SET) or die "seek"; +print FILE pack("H*", "c00lcafedeadb017"); +close FILE or die "close"; +open(FILE, "+<", "$ENV{MYSQLD_DATADIR}/test/t3.ibd") or die "open"; +binmode FILE; +seek(FILE, $ENV{'INNODB_PAGE_SIZE'} * 3 + 38, SEEK_SET) or die "seek"; +print FILE pack("H*", "c00lcafedeadb017"); +close FILE or die "close"; +EOF + +--source include/start_mysqld.inc + +--error ER_GET_ERRMSG +SELECT * FROM t1; +--error ER_GET_ERRMSG +SELECT * FROM t2; +--error ER_GET_ERRMSG +SELECT * FROM t3; + +--source include/shutdown_mysqld.inc + +--echo # Restore the original tables +--move_file $MYSQLD_DATADIR/test/t1.ibd.backup $MYSQLD_DATADIR/test/t1.ibd +--move_file $MYSQLD_DATADIR/test/t2.ibd.backup $MYSQLD_DATADIR/test/t2.ibd +--move_file $MYSQLD_DATADIR/test/t3.ibd.backup $MYSQLD_DATADIR/test/t3.ibd + +--source include/start_mysqld.inc + +DROP TABLE t1,t2,t3; diff --git a/mysql-test/suite/encryption/t/innodb-encryption-alter-master.opt b/mysql-test/suite/encryption/t/innodb-encryption-alter-master.opt new file mode 100644 index 000000000000..e7783ed63dd3 --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb-encryption-alter-master.opt @@ -0,0 +1,3 @@ +$KEYRING_PLUGIN_OPT +--early-plugin-load="keyring_file=$KEYRING_PLUGIN" +--loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring diff --git a/mysql-test/suite/encryption/t/innodb-encryption-alter.test b/mysql-test/suite/encryption/t/innodb-encryption-alter.test new file mode 100644 index 000000000000..9b29f96672da --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb-encryption-alter.test @@ -0,0 +1,90 @@ +--source include/have_innodb.inc +#-- source include/have_file_key_management_plugin.inc + +# +# MDEV-8817: Failing assertion: new_state->key_version != ENCRYPTION_KEY_VERSION_INVALID +# + +let $encrypt_tables = `SELECT @@innodb_encrypt_tables`; +let $threads = `SELECT @@innodb_encryption_threads`; + +SET GLOBAL innodb_encrypt_tables = ONLINE_TO_KEYRING; +SET GLOBAL innodb_encryption_threads = 4; + +CREATE TABLE t1 (pk INT PRIMARY KEY AUTO_INCREMENT, c VARCHAR(256)) ENGINE=INNODB encryption='N' ENCRYPTION_KEY_ID=4; +DROP TABLE t1; +#set innodb_default_encryption_key_id = 99; +#--error 1005 +CREATE TABLE t1 (pk INT PRIMARY KEY AUTO_INCREMENT, c VARCHAR(256)) ENGINE=INNODB; +#SHOW WARNINGS; +#--error 1005 +DROP TABLE t1; +CREATE TABLE t1 (pk INT PRIMARY KEY AUTO_INCREMENT, c VARCHAR(256)) ENGINE=INNODB encryption='KEYRING'; +#SHOW WARNINGS; +DROP TABLE t1; +set innodb_default_encryption_key_id = 4; +CREATE TABLE t1 (pk INT PRIMARY KEY AUTO_INCREMENT, c VARCHAR(256)) ENGINE=INNODB encryption='KEYRING'; +SHOW CREATE TABLE t1; +DROP TABLE t1; +CREATE TABLE t1 (pk INT PRIMARY KEY AUTO_INCREMENT, c VARCHAR(256)) ENGINE=INNODB; +SHOW CREATE TABLE t1; +CREATE TABLE t2 (pk INT PRIMARY KEY AUTO_INCREMENT, c VARCHAR(256)) ENGINE=INNODB encryption='N' ENCRYPTION_KEY_ID=1; +#--error ER_ILLEGAL_HA_CREATE_OPTION +ALTER TABLE t1 ENCRYPTION_KEY_ID=99; +SHOW WARNINGS; +set innodb_default_encryption_key_id = 1; + + +--disable_warnings +--disable_query_log +let $i = 400; +while ($i) +{ +INSERT INTO t1 values(NULL, substring(MD5(RAND()), -128)); +dec $i; +} +commit; +INSERT INTO t2 select * from t1; + +--disable_abort_on_error + +--connect (con1,localhost,root,,test) +--connect (con2,localhost,root,,test) + +let $i = 50; +while ($i) +{ +connection con1; +send ALTER TABLE t1 encryption='N' ENCRYPTION_KEY_ID=1; +connection con2; +send ALTER TABLE t1 encryption='KEYRING' ENCRYPTION_KEY_ID=4; +connection default; +send ALTER TABLE t2 encryption='N' ENCRYPTION_KEY_ID=1; +connection con1; +--reap; +ALTER TABLE t1 encryption='N' ENCRYPTION_KEY_ID=1; +connection con2; +--reap +ALTER TABLE t1 encryption='KEYRING' ENCRYPTION_KEY_ID=4; +connection default; +--reap +ALTER TABLE t2 encryption='KEYRING' ENCRYPTION_KEY_ID=1; +ALTER TABLE t1 encryption='N' ENCRYPTION_KEY_ID=1; +dec $i; +} + +connection default; +--disconnect con1 +--disconnect con2 + +--enable_abort_on_error +--enable_warnings +--enable_query_log + +drop table t1,t2; + +# reset system +--disable_query_log +EVAL SET GLOBAL innodb_encrypt_tables = $encrypt_tables; +EVAL SET GLOBAL innodb_encryption_threads = $threads; +--enable_query_log diff --git a/mysql-test/suite/encryption/t/innodb-first-page-read-master.opt b/mysql-test/suite/encryption/t/innodb-first-page-read-master.opt new file mode 100644 index 000000000000..d466209803a6 --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb-first-page-read-master.opt @@ -0,0 +1,6 @@ +$KEYRING_PLUGIN_OPT +--early-plugin-load="keyring_file=$KEYRING_PLUGIN" +--loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring +--innodb-encrypt-tables=ONLINE_TO_KEYRING +--innodb-encryption-rotate-key-age=15 +--innodb-encryption-threads=4 diff --git a/mysql-test/suite/encryption/t/innodb-first-page-read.test b/mysql-test/suite/encryption/t/innodb-first-page-read.test new file mode 100644 index 000000000000..45a777894a18 --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb-first-page-read.test @@ -0,0 +1,122 @@ +--skip +-- source include/have_innodb.inc +#-- source include/have_file_key_management_plugin.inc +-- source include/not_embedded.inc + +--disable_warnings +SET GLOBAL innodb_file_format = `Barracuda`; +SET GLOBAL innodb_file_per_table = ON; +--enable_warnings + +FLUSH STATUS; + +create database innodb_test; +use innodb_test; +create table innodb_normal(c1 bigint not null, b char(200)) engine=innodb; +create table innodb_compact(c1 bigint not null, b char(200)) engine=innodb row_format=compact; +create table innodb_dynamic(c1 bigint not null, b char(200)) engine=innodb row_format=dynamic; +create table innodb_compressed(c1 bigint not null, b char(200)) engine=innodb row_format=compressed; +create table innodb_compressed1(c1 bigint not null, b char(200)) engine=innodb row_format=compressed key_block_size=1; +create table innodb_compressed2(c1 bigint not null, b char(200)) engine=innodb row_format=compressed key_block_size=2; +create table innodb_compressed4(c1 bigint not null, b char(200)) engine=innodb row_format=compressed key_block_size=4; +create table innodb_compressed8(c1 bigint not null, b char(200)) engine=innodb row_format=compressed key_block_size=8; +create table innodb_compressed16(c1 bigint not null, b char(200)) engine=innodb row_format=compressed key_block_size=16; +create table innodb_redundant(c1 bigint not null, b char(200)) engine=innodb row_format=redundant; +create table innodb_pagecomp(c1 bigint not null, b char(200)) engine=innodb COMPRESSION="zlib"; +create table innodb_pagecomp1(c1 bigint not null, b char(200)) engine=innodb COMPRESSION="zlib"; +create table innodb_pagecomp2(c1 bigint not null, b char(200)) engine=innodb COMPRESSION="zlib"; +create table innodb_pagecomp3(c1 bigint not null, b char(200)) engine=innodb COMPRESSION="zlib"; +create table innodb_pagecomp4(c1 bigint not null, b char(200)) engine=innodb COMPRESSION="zlib"; +create table innodb_pagecomp5(c1 bigint not null, b char(200)) engine=innodb COMPRESSION="zlib"; +create table innodb_pagecomp6(c1 bigint not null, b char(200)) engine=innodb COMPRESSION="zlib"; +create table innodb_pagecomp7(c1 bigint not null, b char(200)) engine=innodb COMPRESSION="zlib"; +create table innodb_pagecomp8(c1 bigint not null, b char(200)) engine=innodb COMPRESSION="zlib"; +create table innodb_pagecomp9(c1 bigint not null, b char(200)) engine=innodb COMPRESSION="zlib"; + +let $number_of_tables_that_could_be_opened=`SELECT COUNT(DISTINCT TABLE_NAME) FROM information_schema.tables WHERE table_schema='mysql' OR table_schema='innodb_test'`; + +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR +eval create table innodb_datadir1(c1 bigint not null, b char(200)) engine=innodb DATA DIRECTORY='$MYSQL_TMP_DIR'; +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR +eval create table innodb_datadir2(c1 bigint not null, b char(200)) engine=innodb row_format=compressed DATA DIRECTORY='$MYSQL_TMP_DIR'; +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR +eval create table innodb_datadir3(c1 bigint not null, b char(200)) engine=innodb COMPRESSION="zlib" DATA DIRECTORY='$MYSQL_TMP_DIR'; + +begin; +insert into innodb_normal values (1,'secret'); +insert into innodb_compact select * from innodb_normal; +insert into innodb_dynamic select * from innodb_normal; +insert into innodb_compressed select * from innodb_normal; +insert into innodb_compressed1 select * from innodb_normal; +insert into innodb_compressed2 select * from innodb_normal; +insert into innodb_compressed4 select * from innodb_normal; +insert into innodb_compressed8 select * from innodb_normal; +insert into innodb_compressed16 select * from innodb_normal; +insert into innodb_redundant select * from innodb_normal; +insert into innodb_pagecomp select * from innodb_normal; +insert into innodb_pagecomp1 select * from innodb_normal; +insert into innodb_pagecomp2 select * from innodb_normal; +insert into innodb_pagecomp3 select * from innodb_normal; +insert into innodb_pagecomp4 select * from innodb_normal; +insert into innodb_pagecomp5 select * from innodb_normal; +insert into innodb_pagecomp6 select * from innodb_normal; +insert into innodb_pagecomp7 select * from innodb_normal; +insert into innodb_pagecomp8 select * from innodb_normal; +insert into innodb_pagecomp9 select * from innodb_normal; +insert into innodb_datadir1 select * from innodb_normal; +insert into innodb_datadir2 select * from innodb_normal; +insert into innodb_datadir3 select * from innodb_normal; +commit; + +FLUSH STATUS; + +--echo # Restart server and see how many page 0's are read +--source include/restart_mysqld.inc + +--echo # result should be less than number of tables in both innodb_test and mysql databases + +eval SELECT VARIABLE_VALUE <= $number_of_tables_that_could_be_opened FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'innodb_pages0_read'; + +SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'innodb_pages0_read'; + +set global innodb_encrypt_tables=ONLINE_FROM_KEYRING_TO_UNENCRYPTED; + +--echo # wait until tables are decrypted +--let $wait_condition=SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0 +--source include/wait_condition.inc + +#--sleep 20 +#SELECT * FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; + +eval SELECT VARIABLE_VALUE <= $number_of_tables_that_could_be_opened FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'innodb_pages0_read'; +#use innodb_test; +#SELECT VARIABLE_VALUE <= 29 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'innodb_pages0_read'; +#use test; +#SELECT VARIABLE_VALUE <= 29 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'innodb_pages0_read'; + +#SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'innodb_pages0_read'; +#use innodb_test; +#SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'innodb_pages0_read'; +#use test; +#SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'innodb_pages0_read'; + +FLUSH STATUS; + +--echo # restart and see number read page 0 +-- source include/restart_mysqld.inc + +--echo # Since we have restarted the server with encryption threads disabled - the tables from innodb_test database +--echo # should not have been accessed on server startup - thus selecting from any of those tables should increase +--echo # innodb_pages0_read only by one + +--let $number_of_tables_in_mysql_db=`SELECT COUNT(DISTINCT TABLE_NAME) FROM information_schema.tables WHERE table_schema='mysql'` +eval SELECT VARIABLE_VALUE <= $number_of_tables_in_mysql_db FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'innodb_pages0_read'; + +--let $number_of_pages0_read=`SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'innodb_pages0_read'` + +select * from innodb_test.innodb_compact; + +eval SELECT VARIABLE_VALUE= $number_of_pages0_read + 1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'innodb_pages0_read'; + +drop database innodb_test; +FLUSH STATUS; diff --git a/mysql-test/suite/encryption/t/innodb-force-corrupt-master.opt b/mysql-test/suite/encryption/t/innodb-force-corrupt-master.opt new file mode 100644 index 000000000000..122f8d0e7f27 --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb-force-corrupt-master.opt @@ -0,0 +1,4 @@ +$KEYRING_PLUGIN_OPT +--early-plugin-load="keyring_file=$KEYRING_PLUGIN" +--loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring +--innodb_doublewrite=0 diff --git a/mysql-test/suite/encryption/t/innodb-force-corrupt.test b/mysql-test/suite/encryption/t/innodb-force-corrupt.test new file mode 100644 index 000000000000..bae6910a0424 --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb-force-corrupt.test @@ -0,0 +1,166 @@ +# +# MDEV-11759: Encryption code in MariaDB 10.1/10.2 causes compatibility problems +# + +-- source include/have_innodb.inc +#-- source include/have_file_key_management_plugin.inc +# Don't test under embedded +-- source include/not_embedded.inc + +call mtr.add_suppression("InnoDB: The page \\[page id: space=[1-9][0-9]*, page number=[1-9][0-9]*\\] in file '.*test.t[123]\\.ibd' cannot be decrypted\\."); +call mtr.add_suppression("failed to read or decrypt \\[page id: space=[1-9][0-9]*, page number=[1-9][0-9]*\\]"); + +call mtr.add_suppression("\\[Error\\] InnoDB: Page is still encrypted"); +call mtr.add_suppression("\\[ERROR\\] InnoDB: Post - encryption checksum verification failed - decryption failed for space id"); +call mtr.add_suppression("\\[ERROR\\] InnoDB: Encryption can't find tablespace key, please check the keyring plugin is loaded\."); +call mtr.add_suppression("\\[Warning\\] InnoDB: Table is encrypted but encryption service or used key_id is not available\. Can't continue reading table\."); + +SET GLOBAL innodb_file_per_table = ON; +#set global innodb_compression_algorithm = 1; + +--echo # Create and populate tables to be corrupted +# Corruption of this table will cause post-encryption checksum validation to fail on decrypt. +CREATE TABLE t1 (a INT AUTO_INCREMENT PRIMARY KEY, b TEXT,c char(200)) ENGINE=InnoDB ENCRYPTION='KEYRING' ; +# Corruption of this table will NOT cause post-encryption checksum validation. However the innodb checksum validation will fail. +# Post-encryption checksum is XORed with innodb checksum - so it is not possible to validate post-encryption checksum for zipped pages. +CREATE TABLE t2 (a INT AUTO_INCREMENT PRIMARY KEY, b TEXT,c char(200)) ENGINE=InnoDB row_format=compressed ENCRYPTION='KEYRING'; +--disable_warnings # Disabling warnings as punch hole get generate ones when compression is enabled and + # filesystem is not supporting them +# Corruption of this table will cause post-encryption checksum validation to fail on decrypt. +CREATE TABLE t3 (a INT AUTO_INCREMENT PRIMARY KEY, b TEXT, c char(200)) ENGINE=InnoDB COMPRESSION="zlib" ENCRYPTION='KEYRING'; +--enable_warnings + +BEGIN; +INSERT INTO t1 (b,c) VALUES ('corrupt me','secret'); +--disable_query_log +--let $i = 100 +while ($i) +{ + INSERT INTO t1 (b,c) VALUES (REPEAT('abcabcabc', 100),'secretsecret'); + dec $i; +} +--enable_query_log + +INSERT INTO t1 (b,c) VALUES ('corrupt me','moresecretmoresecret'); +INSERT INTO t2 select * from t1; +INSERT INTO t3 select * from t1; +COMMIT; + +let INNODB_PAGE_SIZE=`select @@innodb_page_size`; +let MYSQLD_DATADIR=`select @@datadir`; + +--source include/shutdown_mysqld.inc + +--echo # Backup tables before corrupting +--copy_file $MYSQLD_DATADIR/test/t1.ibd $MYSQLD_DATADIR/test/t1.ibd.backup +--copy_file $MYSQLD_DATADIR/test/t2.ibd $MYSQLD_DATADIR/test/t2.ibd.backup +--copy_file $MYSQLD_DATADIR/test/t3.ibd $MYSQLD_DATADIR/test/t3.ibd.backup + +--echo # 1 Corrupt the page data - i.e. page after the header + +perl; +open(FILE, "+<", "$ENV{MYSQLD_DATADIR}/test/t1.ibd") or die "open"; +binmode FILE; +seek(FILE, $ENV{'INNODB_PAGE_SIZE'} * 3 + 38, SEEK_SET) or die "seek"; +print FILE pack("H*", "c00lcafedeadb017"); +close FILE or die "close"; +open(FILE, "+<", "$ENV{MYSQLD_DATADIR}/test/t2.ibd") or die "open"; +binmode FILE; +seek(FILE, $ENV{'INNODB_PAGE_SIZE'} * 3 + 38, SEEK_SET) or die "seek"; +print FILE pack("H*", "c00lcafedeadb017"); +close FILE or die "close"; +open(FILE, "+<", "$ENV{MYSQLD_DATADIR}/test/t3.ibd") or die "open"; +binmode FILE; +seek(FILE, $ENV{'INNODB_PAGE_SIZE'} * 3 + 46, SEEK_SET) or die "seek"; +print FILE pack("H*", "c00lcafedeadb017"); +close FILE or die "close"; +EOF + +--source include/start_mysqld.inc + +--error ER_GET_ERRMSG +SELECT * FROM t1; +--error ER_GET_ERRMSG +SELECT * FROM t2; +--error ER_GET_ERRMSG +SELECT * FROM t3; + +--source include/shutdown_mysqld.inc + +--echo # let's check for the presense of the warning +let server_log= $MYSQLTEST_VARDIR/log/mysqld.1.err; +# $server_log has to be processed by include/search_pattern_in_file.inc which +# contains Perl code requiring that the environment variable SEARCH_FILE points +# to this file. +let SEARCH_FILE= $server_log; + +--let SEARCH_PATTERN= User entry 'B19011337_ohash'@'localhost' has a deprecated pre-4.1 password. The user will be ignored and no one can login with this user anymore. +--source include/search_pattern_in_file.inc + +--let SEARCH_PATTERN= 1. Stop +--source include/search_pattern_in_file.inc + +--let SEARCH_PATTERN= 2. Run +--source include/search_pattern_in_file.inc + +--let SEARCH_PATTERN= 3. Restart +--source include/search_pattern_in_file.inc + + +--echo # Restore the original tables +--remove_file $MYSQLD_DATADIR/test/t1.ibd +--remove_file $MYSQLD_DATADIR/test/t2.ibd +--remove_file $MYSQLD_DATADIR/test/t3.ibd +--copy_file $MYSQLD_DATADIR/test/t1.ibd.backup $MYSQLD_DATADIR/test/t1.ibd +--copy_file $MYSQLD_DATADIR/test/t2.ibd.backup $MYSQLD_DATADIR/test/t2.ibd +--copy_file $MYSQLD_DATADIR/test/t3.ibd.backup $MYSQLD_DATADIR/test/t3.ibd + +--source include/start_mysqld.inc + +--echo # Check that after restoring tables can be read + +SELECT * FROM t1; +SELECT * FROM t2; +SELECT * FROM t3; + +--source include/shutdown_mysqld.inc + +--echo # 2 Corrupt the page header - encryption key's version + +perl; +open(FILE, "+<", "$ENV{MYSQLD_DATADIR}/test/t1.ibd") or die "open"; +binmode FILE; +seek(FILE, $ENV{'INNODB_PAGE_SIZE'} * 3 + 26, SEEK_SET) or die "seek"; +print FILE pack("H*", "c00lcafedeadb017"); +close FILE or die "close"; +open(FILE, "+<", "$ENV{MYSQLD_DATADIR}/test/t2.ibd") or die "open"; +binmode FILE; +seek(FILE, $ENV{'INNODB_PAGE_SIZE'} * 3 + 26, SEEK_SET) or die "seek"; +print FILE pack("H*", "c00lcafedeadb017"); +close FILE or die "close"; +open(FILE, "+<", "$ENV{MYSQLD_DATADIR}/test/t3.ibd") or die "open"; +binmode FILE; +seek(FILE, $ENV{'INNODB_PAGE_SIZE'} * 3 + 38, SEEK_SET) or die "seek"; +print FILE pack("H*", "c00lcafedeadb017"); +close FILE or die "close"; +EOF + +--source include/start_mysqld.inc + +--error ER_GET_ERRMSG +SELECT * FROM t1; +--error ER_GET_ERRMSG +SELECT * FROM t2; +--error ER_GET_ERRMSG +SELECT * FROM t3; + +--source include/shutdown_mysqld.inc + +--echo # Restore the original tables +--move_file $MYSQLD_DATADIR/test/t1.ibd.backup $MYSQLD_DATADIR/test/t1.ibd +--move_file $MYSQLD_DATADIR/test/t2.ibd.backup $MYSQLD_DATADIR/test/t2.ibd +--move_file $MYSQLD_DATADIR/test/t3.ibd.backup $MYSQLD_DATADIR/test/t3.ibd + +--source include/start_mysqld.inc + +DROP TABLE t1,t2,t3; diff --git a/mysql-test/suite/encryption/t/innodb-key-rotation-disable-master.opt b/mysql-test/suite/encryption/t/innodb-key-rotation-disable-master.opt new file mode 100644 index 000000000000..86ff5e23f923 --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb-key-rotation-disable-master.opt @@ -0,0 +1,6 @@ +$KEYRING_PLUGIN_OPT +--early-plugin-load="keyring_file=$KEYRING_PLUGIN" +--loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring +--innodb-encrypt-tables=ONLINE_TO_KEYRING +--innodb-encryption-rotate-key-age=0 +--innodb-encryption-threads=4 diff --git a/mysql-test/suite/encryption/t/innodb-key-rotation-disable.test b/mysql-test/suite/encryption/t/innodb-key-rotation-disable.test new file mode 100644 index 000000000000..bb92897c825c --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb-key-rotation-disable.test @@ -0,0 +1,94 @@ +-- source include/have_innodb.inc +#-- source include/have_file_key_management_plugin.inc +# not embedded because of restarts +-- source include/not_embedded.inc + +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; + +--disable_query_log +--disable_warnings +let $encryption = `SELECT @@innodb_encrypt_tables`; +SET GLOBAL innodb_file_format = `Barracuda`; +SET GLOBAL innodb_file_per_table = ON; +# zlib +#set global innodb_compression_algorithm = 1; +--enable_warnings +--enable_query_log + +create database enctests; +use enctests; +--disable_warnings # Disabling warnings as punch hole get generate ones when compression is enabled and + # filesystem is not supporting them +create table t1(a int not null primary key, b char(200)) engine=innodb; +create table t2(a int not null primary key, b char(200)) engine=innodb row_format=compressed; +create table t3(a int not null primary key, b char(200)) engine=innodb COMPRESSION="zlib"; +create table t4(a int not null primary key, b char(200)) engine=innodb encryption='KEYRING'; +create table t5(a int not null primary key, b char(200)) engine=innodb encryption='KEYRING' row_format=compressed; +create table t6(a int not null primary key, b char(200)) engine=innodb encryption='KEYRING' COMPRESSION="zlib"; +create table t7(a int not null primary key, b char(200)) engine=innodb encryption='N'; +create table t8(a int not null primary key, b char(200)) engine=innodb encryption='N' row_format=compressed; +create table t9(a int not null primary key, b char(200)) engine=innodb encryption='N' COMPRESSION="zlib"; +--enable_warnings + +insert into t1 values (1, 'secredmessage'); +insert into t2 values (1, 'secredmessage'); +insert into t3 values (1, 'secredmessagecompressedaaaaaaaaabbbbbbbbbbbbbbccccccccccccccc'); +insert into t4 values (1, 'secredmessage'); +insert into t5 values (1, 'secredmessage'); +insert into t6 values (1, 'secredmessagecompressedaaaaaaaaabbbbbbbbbbbbbbccccccccccccccc'); +insert into t7 values (1, 'publicmessage'); +insert into t8 values (1, 'publicmessage'); +insert into t9 values (1, 'pugliccompressedaaaaaaaaabbbbbbbbbbbbbbccccccccccccccc'); + +--echo # should list tables t7-t9 +SELECT NAME,ENCRYPTION_SCHEME,CURRENT_KEY_ID FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 AND NAME LIKE 'enctests%'; +--echo # should list tables t1-t6 +SELECT NAME,ENCRYPTION_SCHEME,CURRENT_KEY_ID FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0 and NAME LIKE 'enctests%'; + +# Check if changing encrypt variable is still possible even though key rotation is disabled +SET GLOBAL innodb_encryption_threads=0; +SET GLOBAL innodb_encrypt_tables=ONLINE_FROM_KEYRING_TO_UNENCRYPTED; +SET GLOBAL innodb_encrypt_tables=ONLINE_TO_KEYRING; + +--let $MYSQLD_DATADIR=`select @@datadir` + +-- source include/shutdown_mysqld.inc + +--let SEARCH_RANGE = 10000000 +--let SEARCH_PATTERN=secred +--echo # t1 default on expecting NOT FOUND +--let ABORT_ON=FOUND +--let SEARCH_FILE=$MYSQLD_DATADIR/enctests/t1.ibd +--source include/search_pattern_in_file.inc +--echo # t2 default on expecting NOT FOUND +--let SEARCH_FILE=$MYSQLD_DATADIR/enctests/t2.ibd +--source include/search_pattern_in_file.inc +--echo # t3 default on expecting NOT FOUND +--let SEARCH_FILE=$MYSQLD_DATADIR/enctests/t3.ibd +--source include/search_pattern_in_file.inc +--echo # t4 on expecting NOT FOUND +--let SEARCH_FILE=$MYSQLD_DATADIR/enctests/t4.ibd +--source include/search_pattern_in_file.inc +--echo # t5 on expecting NOT FOUND +--let SEARCH_FILE=$MYSQLD_DATADIR/enctests/t5.ibd +--source include/search_pattern_in_file.inc +--echo # t6 on expecting NOT FOUND +--let SEARCH_FILE=$MYSQLD_DATADIR/enctests/t6.ibd +--source include/search_pattern_in_file.inc +--let SEARCH_PATTERN=public +--echo # t7 off expecting FOUND +--let ABORT_ON=NOT_FOUND +--let SEARCH_FILE=$MYSQLD_DATADIR/enctests/t7.ibd +--source include/search_pattern_in_file.inc +--echo # t8 row compressed expecting FOUND +--let SEARCH_FILE=$MYSQLD_DATADIR/enctests/t8.ibd +--source include/search_pattern_in_file.inc +--echo # t9 page compressed expecting NOT FOUND +--let ABORT_ON=FOUND +--let SEARCH_FILE=$MYSQLD_DATADIR/enctests/t9.ibd +--source include/search_pattern_in_file.inc + +--source include/start_mysqld.inc + +drop database enctests; diff --git a/mysql-test/suite/encryption/t/innodb-key-rotation-master.opt b/mysql-test/suite/encryption/t/innodb-key-rotation-master.opt new file mode 100644 index 000000000000..7b1dbf0d92ad --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb-key-rotation-master.opt @@ -0,0 +1,6 @@ +$KEYRING_PLUGIN_OPT +--early-plugin-load="keyring_file=$KEYRING_PLUGIN" +--loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring +--innodb-encryption-rotate-key-age=2 +--innodb-encryption-threads=4 +--innodb-encrypt-tables=ON diff --git a/mysql-test/suite/encryption/t/innodb-key-rotation.test b/mysql-test/suite/encryption/t/innodb-key-rotation.test new file mode 100644 index 000000000000..5329321c0e90 --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb-key-rotation.test @@ -0,0 +1,528 @@ +--skip +-- source include/have_innodb.inc +-- source include/not_embedded.inc + +#--echo $KEYRING_PLUGIN_OPT +#--echo $KEYRING_PLUGIN_LOAD + +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR +eval SET @@global.keyring_file_data="$MYSQL_TMP_DIR/mysecret_keyring"; + +#SHOW PLUGINS; +# +# MDEV-8138: strange results from encrypt-and-grep test +# +--let $MYSQLD_DATADIR=`select @@datadir` +#TODO: Robert - dlaczego tu jest ibdata1 +--let ib1_IBD = $MYSQLD_DATADIR/ibdata1 +--let t1_IBD = $MYSQLD_DATADIR/test/t1.ibd +--let t2_IBD = $MYSQLD_DATADIR/test/t2.ibd +--let t3_IBD = $MYSQLD_DATADIR/test/t3.ibd +--let t4_IBD = $MYSQLD_DATADIR/test/t4.ibd +--let t6_IBD = $MYSQLD_DATADIR/test/t6.ibd +--let SEARCH_RANGE = 10000000 + +--disable_warnings +SET GLOBAL innodb_file_per_table = ON; +SET GLOBAL innodb_file_format = `Barracuda`; +--enable_warnings + +create table t1 (a varchar(255)) engine=innodb encryption='KEYRING'; +create table t2 (a varchar(255)) engine=innodb encryption_key_id=5; +create table t3 (a varchar(255)) engine=innodb; +create table t4 (a varchar(255)) engine=innodb encryption='Y'; # MK encryption - should get re-encrypted to KEYRING +create table t5 (a varchar(255)) engine=innodb; +create table t6 (a varchar(255)) engine=innodb encryption='N'; + +insert t1 values (repeat('foobarsecret', 12)); +insert t2 values (repeat('tempsecret', 12)); +insert t3 values (repeat('dummysecret', 12)); +insert t4 values (repeat('verysecret', 12)); +insert t5 values (repeat('sooosecret', 12)); +insert t6 values (repeat('nosecret', 12)); + + +--let $tables_count= `select count(*) from information_schema.tables where engine = 'InnoDB' and table_schema <> 'information_schema'` +--let $wait_timeout= 600 +# Encrypted tables count should be equal all tables ($tables_count) - because INNODB_TABLESPACES_ENCRYPTION +# contains an artificial tabe innodb_system and t6 should stay unencrypted +--let $wait_condition=SELECT COUNT(*) = $tables_count FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 1 +--source include/wait_condition.inc + +SELECT * FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION; + +--let $assert_text= Successful rotation of percona_innodb-0 to version 2 +--let $assert_cond= "[SELECT rotate_system_key\\(\\"percona_innodb-0\\"\\) = 1]" = 1 +--source include/assert.inc + +--echo # Just make sure that none of the table started re-encrypting +--sleep 5 # Give a bit of time for re-encryption thread + +--let $assert_text= None of the tables should get re-encrypted with version 2 +--let $assert_cond= "[SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 2]" = 0 +--source include/assert.inc + +--let $assert_text= Successful rotation of percona_innodb-0 to version 3 +--let $assert_cond= "[SELECT rotate_system_key\\(\\"percona_innodb-0\\"\\) = 1]" = 1 +--source include/assert.inc + +--let $tables_count= `select count(*) from information_schema.tables where engine = 'InnoDB' and table_schema <> 'information_schema'` +--let $wait_timeout= 600 +# We should have $tables_count - 1 tables encrypted with version 3 (because of additional innodb_system table) +# of default innodb key (id = 0) and one table t2 encrypted with version 0 of key 5 and t6 unencrypted +--let $wait_condition=SELECT COUNT(*) = $tables_count - 1 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 3 +--source include/wait_condition.inc + +--let $assert_text= table t2 should not get re-encrypted as key 5 is still in version 1 +--let $assert_cond= "[SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 1 and name=\\'test/t2\\' AND CURRENT_KEY_ID = 5]" = 1 +--source include/assert.inc + +--let $assert_text= table t6 should stay unencrypted +--let $assert_cond= "[SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0]" = 1 +--source include/assert.inc + +--echo # Now, let's rotate key 5 twice + +--let $assert_text= Successful rotation of percona_innodb-5 to version 2 +--let $assert_cond= "[SELECT rotate_system_key\\(\\"percona_innodb-5\\"\\) = 1]" = 1 +--source include/assert.inc + +--let $assert_text= Successful rotation of percona_innodb-5 to version 3 +--let $assert_cond= "[SELECT rotate_system_key\\(\\"percona_innodb-5\\"\\) = 1]" = 1 +--source include/assert.inc + +--let $wait_timeout= 600 + --let $wait_condition=SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 3 AND CURRENT_KEY_ID = 5 +--source include/wait_condition.inc + +--echo # Setting innodb_encryption_rotate_key_age to 1. Now each key rotation should result +--echo # in re-encryption of the table +SET GLOBAL innodb_encryption_rotate_key_age = 1; + +--let $assert_text= Successful rotation of percona_innodb-0 to version 4 +--let $assert_cond= "[SELECT rotate_system_key\\(\\"percona_innodb-0\\"\\) = 1]" = 1 +--source include/assert.inc + +--let $tables_count= `select count(*) from information_schema.tables where engine = 'InnoDB' and table_schema <> 'information_schema'` +--let $wait_timeout= 600 +# We should have $tables_count - 1 tables encrypted with version 4 (because of additional innodb_system table) +# of default innodb key (id = 0) and one table t2 encrypted with version 3 of key 5 and t6 should stay +# unencrypted + --let $wait_condition=SELECT COUNT(*) = $tables_count - 1 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 4 +--source include/wait_condition.inc + +--let $assert_text= table t2 should not get re-encrypted as key 5 is still in version 3 +--let $assert_cond= "[SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 3 and name=\\'test/t2\\' AND CURRENT_KEY_ID = 5]" = 1 +--source include/assert.inc + +--echo # Rotate key 5 to version 4 => this should trigger table t2 re-encryption +--let $assert_text= Successful rotation of percona_innodb-5 to version 4 +--let $assert_cond= "[SELECT rotate_system_key\\(\\"percona_innodb-5\\"\\) = 1]" = 1 +--source include/assert.inc + +--let $wait_timeout= 600 +--let $wait_condition=SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 4 AND CURRENT_KEY_ID = 5 +--source include/wait_condition.inc + +--echo # Now turn the re-encryption off by setting innodb_encryption_rotate_key_age to 0 +SET GLOBAL innodb_encryption_rotate_key_age = 0; + +--echo # Rotating key should not cause any re-encryption + +--let $assert_text= Successful rotation of percona_innodb-0 to version 5 +--let $assert_cond= "[SELECT rotate_system_key\\(\\"percona_innodb-0\\"\\) = 1]" = 1 +--source include/assert.inc + +--echo # Rotate key 5 to version 5 => this should trigger table t2 re-encryption +--let $assert_text= Successful rotation of percona_innodb-5 to version 5 +--let $assert_cond= "[SELECT rotate_system_key\\(\\"percona_innodb-5\\"\\) = 1]" = 1 +--source include/assert.inc + +--echo # Just make sure that none of the table started re-encrypting +--sleep 5 # Give a bit of time for re-encryption thread + +--let $assert_text= All tables should be still encrypted with key version 4 at most. +--let $assert_cond= "[SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION > 4]" = 0 +--source include/assert.inc + +--echo #Make sure t6 is still unencrypted + +--let $assert_text= table t6 should stay unencrypted +--let $assert_cond= "[SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0]" = 1 +--source include/assert.inc + +--echo # Now let's alter t6 so it become encrypted + +alter table t6 encryption='KEYRING'; + +--echo # t6 should get rebuilt with latest version of percona_innodb-0, i.e. version 5 + +--let $assert_text= table t6 should get rebuilt with latest version of percona_innodb-0, i.e. version 5 +--let $assert_cond= "[SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 5 and name=\\'test/t6\\' AND CURRENT_KEY_ID = 0]" = 1 +--source include/assert.inc + +--echo # Now change t6's encryption key to a new one 6 - it should have version 1 + +alter table t6 encryption_key_id = 6; + +--let $assert_text= table t6 should get rebuilt with latest version of percona_innodb-6, i.e. version 1 +--let $assert_cond= "[SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 1 and name=\\'test/t6\\' AND CURRENT_KEY_ID = 6]" = 1 +--source include/assert.inc + +--echo # Now change t6's encryption key to an existing key 5. It should have its latest +--echo # key_version assigned, i.e. 5 + +alter table t6 encryption_key_id = 5; + +--let $assert_text= table t6 should get rebuilt with latest version of percona_innodb-5, i.e. version 5 +--let $assert_cond= "[SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 5 and name=\\'test/t6\\' AND CURRENT_KEY_ID = 5]" = 1 +--source include/assert.inc + +--echo # Turn off encryption for t6 +alter table t6 encryption='N'; + +--echo # Wait for t6 to get decrypted + +#--let $wait_timeout= 600 +#--let $wait_condition=SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION > 100 and name="test/t6" +#--source include/wait_condition.inc + + +--let $assert_text= table t6 should be marked as unencrypted +--let $assert_cond= "[SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 and name=\\'test/t6\\']" = 1 +--source include/assert.inc + +--source include/shutdown_mysqld.inc + +--echo # Make sure t6 is unencrypted +--let SEARCH_PATTERN=nosecret +--let ABORT_ON=NOT_FOUND +--let SEARCH_FILE=$t6_IBD +--source include/search_pattern_in_file.inc + +--source include/start_mysqld.inc + +--echo # Now turn off the encryption. Only one table should remain encrypted - the one with explicite encryption +--echo # ie. t1 + +SET GLOBAL innodb_encrypt_tables = off; + +--let $tables_count= `select count(*) from information_schema.tables where engine = 'InnoDB' and table_schema <> 'information_schema'` +--let $wait_timeout= 600 +# We should have $tables_count tables unencrypted (+ 1 because of additional innodb_system table) +# and one table t1 encrypted with version 4 of key 0 (-1) => thus $tables_count +--let $wait_condition=SELECT COUNT(*) = $tables_count FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 +--source include/wait_condition.inc + +# Table t1 should stay encrypted with version 4 of key 0 +--let $assert_text= table t1 should stay encrypted with version 4 of key 0 +--let $assert_cond= "[SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 4 and name=\\'test/t1\\' AND CURRENT_KEY_ID = 0]" = 1 +--source include/assert.inc + +# t6 has been marked as unencrypted - turn on the encryption - it should stay unencrypted + +SET GLOBAL innodb_encrypt_tables = on; + +--let $wait_timeout= 600 +# Encrypted tables count should be equal all tables ($tables_count) - because INNODB_TABLESPACES_ENCRYPTION +# contains an artificial tabe innodb_system and t6 should stay unencrypted +--let $wait_condition=SELECT COUNT(*) = $tables_count FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0 +--source include/wait_condition.inc + +--let $assert_text= table t6 should be marked as unencrypted +--let $assert_cond= "[SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 and name=\\'test/t6\\']" = 1 +--source include/assert.inc + + +SELECT * FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION; +--die + + +#--sleep 3 + +#--sleep 30 +#SELECT NAME, MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; +#SELECT NAME, MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; + +#--let $encrypted_tables_count= `select count(*) - 1 from information_schema.tables where engine = 'InnoDB' and table_schema <> 'information_schema'` +# In INNODB_TABLESPACE_ENCRYPTION P_S add one tabel which is not present in INNODB_SYS_TABLESPACE, i.e. innodb_system +--echo # encrypted_tables_count is equal to the number of tables inside INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES, even though +--echo # one tablespace remains unencrypted. This is because INNODB_TABLESPACES_ENCRYPTION contains arifical tablespace innodb_system +--echo # which does not exist in INNODB_SYS_TABLESPACES +--let encrypted_tables_count=`select count(*) from INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES` +--echo # Wait max 10 min for key encryption threads to encrypt all spaces +--echo $encrypted_tables_counts +--let $wait_timeout= 600 +#--let $wait_timeout= 60 +#--let $wait_condition=SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0 AND ROTATING_OR_FLUSHING = 0 +--let $wait_condition=SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0 +#--let $wait_condition=SELECT COUNT(*) = $encrypted_tables_count FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 AND ROTATING_OR_FLUSHING = 0 +--let $wait_condition=SELECT COUNT(*) = $encrypted_tables_count FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 +--source include/wait_condition.inc + +SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES; +SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE FLAG = 8225; +--let $assert_text= All encrypted tables should have encrypted flag set, apart from t3 +#--let $assert_cond= "[SELECT COUNT(*) = $encrypted_tables_count - 1] FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE FLAG = 8225" = 1 +# encryted_tables_count - 1 here, as INNODB_SYS_TABLESPACES does not include innodb_system +--let $assert_cond= "[SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE FLAG = 8225]" = $encrypted_tables_count - 1 +--source include/assert.inc + +#SELECT COUNT(*) FROM SYS_TABLES WHERE + +#select table_name, table_schema from information_schema.tables; + +SELECT NAME, MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; +SELECT NAME, MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; +SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES; +SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES; + +#create table t5 (a varchar(255)) engine=innodb encryption='Y'; + +#SELECT * FROM SYS_TABLESPACES; +#SELECT * FROM SYS_TABLES; + +SHOW CREATE TABLE INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES; +SHOW CREATE TABLE INFORMATION_SCHEMA.INNODB_SYS_TABLES; + + +--source include/shutdown_mysqld.inc + +--let SEARCH_PATTERN=foobarsecret +--let ABORT_ON=FOUND +#--let ABORT_ON_NOT_FOUND=0 +#--let ABORT_ON_FOUND=1 +--echo # t1 yes on expecting NOT FOUND +--let SEARCH_FILE=$t1_IBD +--source include/search_pattern_in_file.inc +--let SEARCH_PATTERN=tempsecret +--echo # t2 ... on expecting NOT FOUND +--let SEARCH_FILE=$t2_IBD +--source include/search_pattern_in_file.inc +--let ABORT_ON=NOT_FOUND +--let SEARCH_PATTERN=dummysecret +--echo # t3 no on expecting FOUND +--let SEARCH_FILE=$t3_IBD +--source include/search_pattern_in_file.inc +--let SEARCH_PATTERN=verysecret +--let ABORT_ON=FOUND +--echo # t4 no on expecting NOT FOUND +--let SEARCH_FILE=$t4_IBD +--source include/search_pattern_in_file.inc +--let SEARCH_PATTERN=foobarsecret +--let ABORT_ON=FOUND +--echo # ibdata1 expecting NOT FOUND +-- let SEARCH_FILE=$ib1_IBD +-- source include/search_pattern_in_file.inc + +--let $restart_parameters=restart:--early-plugin-load="keyring_file=$KEYRING_PLUGIN" --loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring $KEYRING_PLUGIN_OPT --innodb-encrypt-tables=ON --innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=1 +#--let $restart_parameters=restart:--loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring --innodb-encrypt-tables=ON --innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=4 +-- source include/start_mysqld.inc + +--echo # Now turn off encryption and wait for threads to decrypt everything + +#SELECT NAME, MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; + +--echo # HERE ROBERT + +SELECT NAME, MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; +SELECT NAME, MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; + +SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES; +SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES; + +SET GLOBAL innodb_encrypt_tables = off; + +#--sleep 10 + +#SELECT NAME, MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; +#SELECT NAME, MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; + +#SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES; +#SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES; + +--echo # Wait max 10 min for key encryption threads to decrypt all spaces (but t1 and t4 for which encryption was overriden to yes) +#--let $wait_timeout= 600 +#--let $tables_count= `select count(*) - 1 from information_schema.tables where engine = 'InnoDB' and table_schema <> 'information_schema'` +#echo $tables_count; +#select * from information_schema.tables where engine = 'InnoDB' and table_schema <> 'information_schema'; + + +#echo ======alll-from-information_schema==== +#select * from information_schema.tables where engine = 'InnoDB'; +--echo # Only two tables should stayed encrypted - the ones with explicite encryption +#--let $wait_condition=SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 AND ROTATING_OR_FLUSHING = 0 +--let $wait_timeout= 600 +--let $wait_condition=SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 +--source include/wait_condition.inc + +SELECT NAME, MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; +SELECT NAME, MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; + +SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES; +SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES; + +--let $assert_text= Only two tables should stayed encrypted - the ones with explicite encryption t1 and t4 +--let $assert_cond= "[SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE FLAG = 8225]" = 2 +--source include/assert.inc + + +# +#--sleep 70 + +SELECT NAME, MIN_KEY_VERSION, ROTATING_OR_FLUSHING FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; +SELECT NAME, MIN_KEY_VERSION, ROTATING_OR_FLUSHING FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; + +SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES; +SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES; + +#--die + + +--source include/shutdown_mysqld.inc + +--let SEARCH_PATTERN=foobarsecret +--let ABORT_ON=FOUND +--echo # t1 yes on expecting NOT FOUND +--let SEARCH_FILE=$t1_IBD +--source include/search_pattern_in_file.inc +--let SEARCH_PATTERN=tempsecret +--let ABORT_ON=NOT_FOUND +--echo # t2 ... default expecting FOUND +--let SEARCH_FILE=$t2_IBD +--source include/search_pattern_in_file.inc +--let SEARCH_PATTERN=dummysecret +--let ABORT_ON=NOT_FOUND +--echo # t3 no on expecting FOUND +--let SEARCH_FILE=$t3_IBD +--source include/search_pattern_in_file.inc +--let SEARCH_PATTERN=verysecret +--let ABORT_ON=FOUND +--echo # t1 yes on expecting NOT FOUND +--let SEARCH_FILE=$t4_IBD +--source include/search_pattern_in_file.inc +--let SEARCH_PATTERN=foobarsecret +--let ABORT_ON=FOUND +--echo # ibdata1 expecting NOT FOUND +--let SEARCH_FILE=$ib1_IBD +--source include/search_pattern_in_file.inc + +--let $restart_parameters=restart:--early-plugin-load="keyring_file=$KEYRING_PLUGIN" --loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring $KEYRING_PLUGIN_OPT --innodb-encrypt-tables=ON --innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=4 + +-- source include/start_mysqld.inc + +--echo # Now turn on encryption and wait for threads to encrypt all spaces +SELECT NAME, MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; +SET GLOBAL innodb_encrypt_tables = on; + + +--echo # Wait max 10 min for key encryption threads to encrypt all spaces +--let $wait_timeout= 600 +#--let $wait_condition=SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0 AND ROTATING_OR_FLUSHING = 0; +--let $wait_condition=SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0 +--source include/wait_condition.inc + +#--let $wait_timeout= 600 +#--let $wait_condition=SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE FLAG <> 8225 +#--source include/wait_condition.inc + +--let $assert_text= Only one table should stay unencrypted i.e. t3 +--let $assert_cond= "[SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE FLAG <> 8225]" = 1 +--source include/assert.inc + +SELECT NAME, MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; +SELECT NAME, MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; + +SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES; +SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES; + +--source include/shutdown_mysqld.inc + +--let SEARCH_PATTERN=foobarsecret +--let ABORT_ON=FOUND +--echo # t1 yes on expecting NOT FOUND +-- let SEARCH_FILE=$t1_IBD +-- source include/search_pattern_in_file.inc +--let SEARCH_PATTERN=tempsecret +--let ABORT_ON=FOUND +--echo # t2 ... on expecting NOT FOUND +-- let SEARCH_FILE=$t2_IBD +-- source include/search_pattern_in_file.inc +--let SEARCH_PATTERN=dummysecret +--let ABORT_ON=NOT_FOUND +--echo # t3 no on expecting FOUND +-- let SEARCH_FILE=$t3_IBD +-- source include/search_pattern_in_file.inc +--let SEARCH_PATTERN=verysecret +--let ABORT_ON=FOUND +--echo # t1 yes on expecting NOT FOUND +--let SEARCH_FILE=$t4_IBD +--source include/search_pattern_in_file.inc +--let SEARCH_PATTERN=foobarsecret +--let ABORT_ON=FOUND +--echo # ibdata1 expecting NOT FOUND +-- let SEARCH_FILE=$ib1_IBD +-- source include/search_pattern_in_file.inc + +-- source include/start_mysqld.inc + +alter table t1 encryption='n'; +alter table t4 encryption='n'; + +--echo # Wait max 10 min for key encryption threads to encrypt all spaces (apart from t1,t3 and t4) +--let $wait_timeout= 600 +#--let $wait_condition=SELECT COUNT(*) = 3 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0 AND ROTATING_OR_FLUSHING = 0 +--let $wait_condition=SELECT COUNT(*) = 3 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0 +--source include/wait_condition.inc + +SELECT NAME, MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; +SELECT NAME, MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; + +SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES; +SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES; + +--let $assert_text= All spaces apart from t1, t3 and t4 should got encrypted +--let $assert_cond= "[SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE FLAG <> 8225]" = 3 +--source include/assert.inc + +SELECT NAME, MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; +SELECT NAME, MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; + +SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES; +SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES; + +--source include/shutdown_mysqld.inc + +--let SEARCH_PATTERN=foobarsecret +--let ABORT_ON=NOT_FOUND +--echo # t1 yes on expecting FOUND +-- let SEARCH_FILE=$t1_IBD +-- source include/search_pattern_in_file.inc +--let SEARCH_PATTERN=tempsecret +--let ABORT_ON=FOUND +--echo # t2 ... on expecting NOT FOUND +-- let SEARCH_FILE=$t2_IBD +-- source include/search_pattern_in_file.inc +--let SEARCH_PATTERN=dummysecret +--let ABORT_ON=NOT_FOUND +--echo # t3 no on expecting FOUND +--let SEARCH_FILE=$t3_IBD +--source include/search_pattern_in_file.inc +--let SEARCH_PATTERN=verysecret +--let ABORT_ON=NOT_FOUND +--echo # t4 no on expecting FOUND +--let SEARCH_FILE=$t4_IBD +--source include/search_pattern_in_file.inc +--let SEARCH_PATTERN=foobarsecret +--let ABORT_ON=FOUND +--echo # ibdata1 expecting NOT FOUND +--let ABORT_ON_NOT_FOUND=0 +--let ABORT_ON_FOUND=1 +-- let SEARCH_FILE=$ib1_IBD +-- source include/search_pattern_in_file.inc + +-- source include/start_mysqld.inc + + +drop table t1, t2, t3, t4; + diff --git a/mysql-test/suite/encryption/t/innodb-missing-key-master.opt b/mysql-test/suite/encryption/t/innodb-missing-key-master.opt new file mode 100644 index 000000000000..64c0f833ed55 --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb-missing-key-master.opt @@ -0,0 +1,6 @@ +$KEYRING_PLUGIN_OPT +--early-plugin-load="keyring_file=$KEYRING_PLUGIN" +--loose-keyring_file_data=$MYSQLTEST_VARDIR/std_data/keys2.txt +--innodb-encrypt-tables=ONLINE_TO_KEYRING +--innodb-encryption-rotate-key-age=15 +--innodb-encryption-threads=4 diff --git a/mysql-test/suite/encryption/t/innodb-missing-key.test b/mysql-test/suite/encryption/t/innodb-missing-key.test new file mode 100644 index 000000000000..761067b695ad --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb-missing-key.test @@ -0,0 +1,86 @@ +--source include/have_64bit.inc +--source include/have_innodb.inc +#-- source include/have_file_key_management_plugin.inc +# embedded does not support restart +-- source include/not_embedded.inc + +# +# MDEV-11004: Unable to start (Segfault or os error 2) when encryption key missing +# + +call mtr.add_suppression("InnoDB: The page \\[page id: space=[1-9][0-9]*, page number=[1-9][0-9]*\\] in file '.*test.t[123]\\.ibd' cannot be decrypted\\."); +call mtr.add_suppression("failed to read or decrypt \\[page id: space=[1-9][0-9]*, page number=[1-9][0-9]*\\]"); +call mtr.add_suppression("\\[Error\\] InnoDB: Page is still encrypted"); +call mtr.add_suppression("\\[Warning\\] InnoDB: Table is encrypted but encryption service or used key_id is not available\. Can't continue reading table\."); + +#--echo # Start server with keys2.tx +#--let $restart_parameters=restart:--keyring-file-data=$MYSQLTEST_VARDIR/std_data/keys2.txt +#--source include/restart_mysqld.inc + +# Key Id 0 and 6 are the same in keys2.txt and keys3.txt +# Key Id 7 is only available in keys2.txt +#CREATE TABLE t1(a int not null primary key auto_increment, b varchar(128)) engine=innodb ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=7; +#CREATE TABLE t2(a int not null primary key auto_increment, b varchar(128)) engine=innodb ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=6; +#CREATE TABLE t3(a int not null primary key auto_increment, b varchar(128)) engine=innodb ENCRYPTION='N'; + +CREATE TABLE t1(a int not null primary key, b varchar(128)) engine=innodb ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=7; +CREATE TABLE t2(a int not null primary key, b varchar(128)) engine=innodb ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=6; +CREATE TABLE t3(a int not null primary key, b varchar(128)) engine=innodb ENCRYPTION='N'; + + +#INSERT INTO t1(b) VALUES ('thisissecretmessage'); + +let $rows = 500; +while($rows) +{ + eval insert into t1 values ($rows, 'thisissecretmessage'); + dec $rows; +} + +#INSERT INTO t1(b) SELECT b FROM t1; +#INSERT INTO t1(b) SELECT b FROM t1; +#INSERT INTO t1(b) SELECT b FROM t1; +#INSERT INTO t1(b) SELECT b FROM t1; +#INSERT INTO t1(b) SELECT b FROM t1; +#INSERT INTO t1(b) SELECT b FROM t1; +#INSERT INTO t1(b) SELECT b FROM t1; +#INSERT INTO t1(b) SELECT b FROM t1; +#INSERT INTO t1(b) SELECT b FROM t1; +#INSERT INTO t1(b) SELECT b FROM t1; +#INSERT INTO t1(b) SELECT b FROM t1; +INSERT INTO t2 SELECT * FROM t1; +INSERT INTO t3 SELECT * FROM t1; + +--echo +--echo # Restart server with keys3.txt +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--let $restart_parameters=restart:--keyring-file-data=$MYSQLTEST_VARDIR/std_data/keys3.txt +--source include/restart_mysqld.inc + +set global innodb_encryption_rotate_key_age = 1; +use test; +#CREATE TABLE t4(a int not null primary key auto_increment, b varchar(128)) engine=innodb ENCRYPTED=YES ENCRYPTION_KEY_ID=6; +CREATE TABLE t4(a int not null primary key, b varchar(128)) engine=innodb ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=6; +SELECT SLEEP(5); +SELECT COUNT(1) FROM t3; +SELECT COUNT(1) FROM t2; +--error 1296 +SELECT COUNT(1) FROM t2,t1 where t2.a = t1.a; +--error 1296 +SELECT COUNT(1) FROM t1 where b = 'ab'; +--error 1296 +SELECT COUNT(1) FROM t1; + +--echo +--echo # Start server with keys2.txt +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--let $restart_parameters=restart:--keyring-file-data=$MYSQLTEST_VARDIR/std_data/keys2.txt +--source include/restart_mysqld.inc + +SELECT COUNT(1) FROM t1; +SELECT COUNT(1) FROM t2; +SELECT COUNT(1) FROM t3; + +DROP TABLE t1, t2, t3; + + diff --git a/mysql-test/suite/encryption/t/innodb-page_encryption-32k-master.opt b/mysql-test/suite/encryption/t/innodb-page_encryption-32k-master.opt new file mode 100644 index 000000000000..c06dd01cd361 --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb-page_encryption-32k-master.opt @@ -0,0 +1,5 @@ +$KEYRING_PLUGIN_OPT +--early-plugin-load="keyring_file=$KEYRING_PLUGIN" +--loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring +--default_storage_engine=InnoDB +--innodb-buffer-pool-size=24M diff --git a/mysql-test/suite/encryption/t/innodb-page_encryption-32k.test b/mysql-test/suite/encryption/t/innodb-page_encryption-32k.test new file mode 100644 index 000000000000..7b000d2edc7c --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb-page_encryption-32k.test @@ -0,0 +1,91 @@ +--skip +--source include/no_valgrind_without_big.inc +--source include/not_embedded.inc +# Tests for setting innodb-page-size=32k; +--source include/have_innodb.inc +--source include/have_innodb_32k.inc +#--source include/have_file_key_management_plugin.inc + +create table innodb_normal(c1 bigint not null, b char(200)) engine=innodb; +create table innodb_compact(c1 bigint not null, b char(200)) engine=innodb row_format=compact ENCRYPTION='KEYRING' encryption_key_id=1; +create table innodb_dynamic(c1 bigint not null, b char(200)) engine=innodb row_format=dynamic ENCRYPTION='KEYRING' encryption_key_id=33; +create table innodb_redundant(c1 bigint not null, b char(200)) engine=innodb row_format=redundant ENCRYPTION='KEYRING' encryption_key_id=4; + +show create table innodb_compact; +show create table innodb_dynamic; +show create table innodb_redundant; + +delimiter //; +create procedure innodb_insert_proc (repeat_count int) +begin + declare current_num int; + set current_num = 0; + while current_num < repeat_count do + insert into innodb_normal values(current_num, substring(MD5(RAND()), -150)); + set current_num = current_num + 1; + end while; +end// +delimiter ;// +commit; + +set autocommit=0; +call innodb_insert_proc(5000); +commit; +set autocommit=1; + +insert into innodb_compact select * from innodb_normal; +insert into innodb_dynamic select * from innodb_normal; +insert into innodb_redundant select * from innodb_normal; + +update innodb_compact set c1 = c1 + 1; +update innodb_dynamic set c1 = c1 + 1; +update innodb_redundant set c1 = c1 + 1; +select count(*) from innodb_compact where c1 < 1500000; +select count(*) from innodb_dynamic where c1 < 1500000; +select count(*) from innodb_redundant where c1 < 1500000; + +--source include/restart_mysqld.inc + +update innodb_compact set c1 = c1 + 1; +update innodb_dynamic set c1 = c1 + 1; +update innodb_redundant set c1 = c1 + 1; +select count(*) from innodb_compact where c1 < 1500000; +select count(*) from innodb_dynamic where c1 < 1500000; +select count(*) from innodb_redundant where c1 < 1500000; + +#TODO: Co zrobić z encryption=DEFAULT ? co tu byc powinno, może już coś jest ? +#alter table innodb_compact engine=innodb encrypted=DEFAULT encryption_key_id=DEFAULT; +#chyba nie bedzie czegos takiego jak default ... +set innodb_default_encryption_key_id = DEFAULT; + +#show warnings; + +#alter table innodb_compact engine=innodb encryption='KEYRING' encryption_key_id=DEFAULT; +alter table innodb_compact engine=innodb encryption='KEYRING'; +show create table innodb_compact; +#alter table innodb_dynamic engine=innodb encrypted=DEFAULT encryption_key_id=DEFAULT; +#alter table innodb_dynamic engine=innodb encryption='KEYRING' encryption_key_id=DEFAULT; +alter table innodb_dynamic engine=innodb encryption='KEYRING'; +show create table innodb_dynamic; +#alter table innodb_redundant engine=innodb encryption='KEYRING' encryption_key_id=DEFAULT; +alter table innodb_redundant engine=innodb encryption='KEYRING'; +show create table innodb_redundant; + +--source include/restart_mysqld.inc + +show create table innodb_compact; +show create table innodb_dynamic; +show create table innodb_redundant; + +update innodb_compact set c1 = c1 + 1; +update innodb_dynamic set c1 = c1 + 1; +update innodb_redundant set c1 = c1 + 1; +select count(*) from innodb_compact where c1 < 1500000; +select count(*) from innodb_dynamic where c1 < 1500000; +select count(*) from innodb_redundant where c1 < 1500000; + +drop procedure innodb_insert_proc; +drop table innodb_normal; +drop table innodb_compact; +drop table innodb_dynamic; +drop table innodb_redundant; diff --git a/mysql-test/suite/encryption/t/innodb-page_encryption-master.opt b/mysql-test/suite/encryption/t/innodb-page_encryption-master.opt new file mode 100644 index 000000000000..e7783ed63dd3 --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb-page_encryption-master.opt @@ -0,0 +1,3 @@ +$KEYRING_PLUGIN_OPT +--early-plugin-load="keyring_file=$KEYRING_PLUGIN" +--loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring diff --git a/mysql-test/suite/encryption/t/innodb-page_encryption.test b/mysql-test/suite/encryption/t/innodb-page_encryption.test new file mode 100644 index 000000000000..54b8276e615e --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb-page_encryption.test @@ -0,0 +1,143 @@ +-- source include/have_innodb.inc +#-- source include/have_file_key_management_plugin.inc + +create table innodb_normal(c1 bigint not null, b char(200)) engine=innodb; +create table innodb_compact(c1 bigint not null, b char(200)) engine=innodb row_format=compact ENCRYPTION='KEYRING' encryption_key_id=1; +create table innodb_compressed(c1 bigint not null, b char(200)) engine=innodb row_format=compressed ENCRYPTION='KEYRING' encryption_key_id=2; +create table innodb_dynamic(c1 bigint not null, b char(200)) engine=innodb row_format=dynamic ENCRYPTION='KEYRING' encryption_key_id=33; +create table innodb_redundant(c1 bigint not null, b char(200)) engine=innodb row_format=redundant ENCRYPTION='KEYRING' encryption_key_id=4; + +set innodb_default_encryption_key_id = 5; +create table innodb_defkey(c1 bigint not null, b char(200)) engine=innodb ENCRYPTION='KEYRING'; +show create table innodb_defkey; + +show create table innodb_compact; +show create table innodb_compressed; +show create table innodb_dynamic; +show create table innodb_redundant; + +delimiter //; +create procedure innodb_insert_proc (repeat_count int) +begin + declare current_num int; + set current_num = 0; + while current_num < repeat_count do + insert into innodb_normal values(current_num, substring(MD5(RAND()), -64)); + set current_num = current_num + 1; + end while; +end// +delimiter ;// +commit; + +set autocommit=0; +call innodb_insert_proc(2000); +commit; +set autocommit=1; + +insert into innodb_compact select * from innodb_normal; +insert into innodb_compressed select * from innodb_normal; +insert into innodb_dynamic select * from innodb_normal; +insert into innodb_redundant select * from innodb_normal; +insert into innodb_defkey select * from innodb_normal; + +update innodb_normal set c1 = c1 +1; +update innodb_compact set c1 = c1 + 1; +update innodb_compressed set c1 = c1 + 1; +update innodb_dynamic set c1 = c1 + 1; +update innodb_redundant set c1 = c1 + 1; +update innodb_defkey set c1 = c1 + 1; + +select count(*) from innodb_compact where c1 < 1500000; +select count(*) from innodb_compressed where c1 < 1500000; +select count(*) from innodb_dynamic where c1 < 1500000; +select count(*) from innodb_redundant where c1 < 1500000; +select count(*) from innodb_defkey where c1 < 1500000; +select count(*) from innodb_compact t1, innodb_normal t2 where +t1.c1 = t2.c1 and t1.b = t2.b; +select count(*) from innodb_dynamic t1, innodb_normal t2 where +t1.c1 = t2.c1 and t1.b = t2.b; +select count(*) from innodb_compressed t1, innodb_normal t2 where +t1.c1 = t2.c1 and t1.b = t2.b; +select count(*) from innodb_redundant t1, innodb_normal t2 where +t1.c1 = t2.c1 and t1.b = t2.b; +select count(*) from innodb_defkey t1, innodb_normal t2 where +t1.c1 = t2.c1 and t1.b = t2.b; + +# Note there that these variables are updated only when real I/O is done, thus they are not reliable +SELECT variable_value >= 0 FROM information_schema.global_status WHERE variable_name = 'innodb_num_pages_encrypted'; +SELECT variable_value >= 0 FROM information_schema.global_status WHERE variable_name = 'innodb_num_pages_decrypted'; + +--source include/restart_mysqld.inc + +update innodb_normal set c1 = c1 +1; +update innodb_compact set c1 = c1 + 1; +update innodb_compressed set c1 = c1 + 1; +update innodb_dynamic set c1 = c1 + 1; +update innodb_redundant set c1 = c1 + 1; +update innodb_defkey set c1 = c1 + 1; +select count(*) from innodb_compact where c1 < 1500000; +select count(*) from innodb_compressed where c1 < 1500000; +select count(*) from innodb_dynamic where c1 < 1500000; +select count(*) from innodb_redundant where c1 < 1500000; +select count(*) from innodb_defkey where c1 < 1500000; +select count(*) from innodb_compact t1, innodb_normal t2 where +t1.c1 = t2.c1 and t1.b = t2.b; +select count(*) from innodb_dynamic t1, innodb_normal t2 where +t1.c1 = t2.c1 and t1.b = t2.b; +select count(*) from innodb_compressed t1, innodb_normal t2 where +t1.c1 = t2.c1 and t1.b = t2.b; +select count(*) from innodb_redundant t1, innodb_normal t2 where +t1.c1 = t2.c1 and t1.b = t2.b; +select count(*) from innodb_defkey t1, innodb_normal t2 where +t1.c1 = t2.c1 and t1.b = t2.b; + +set innodb_default_encryption_key_id = DEFAULT; +SELECT variable_value >= 0 FROM information_schema.global_status WHERE variable_name = 'innodb_num_pages_encrypted'; +SELECT variable_value >= 0 FROM information_schema.global_status WHERE variable_name = 'innodb_num_pages_decrypted'; + +alter table innodb_compact engine=innodb encryption='KEYRING'; +#encryption_key_id=DEFAULT; +show create table innodb_compact; +alter table innodb_compressed engine=innodb encryption='KEYRING'; +show create table innodb_compressed; +alter table innodb_dynamic engine=innodb encryption='KEYRING'; +show create table innodb_dynamic; +alter table innodb_redundant engine=innodb encryption='KEYRING'; +show create table innodb_redundant; + +--source include/restart_mysqld.inc + +show create table innodb_compact; +show create table innodb_compressed; +show create table innodb_dynamic; +show create table innodb_redundant; +show create table innodb_defkey; + +update innodb_normal set c1 = c1 +1; +update innodb_compact set c1 = c1 + 1; +update innodb_compressed set c1 = c1 + 1; +update innodb_dynamic set c1 = c1 + 1; +update innodb_redundant set c1 = c1 + 1; +select count(*) from innodb_compact where c1 < 1500000; +select count(*) from innodb_compressed where c1 < 1500000; +select count(*) from innodb_dynamic where c1 < 1500000; +select count(*) from innodb_redundant where c1 < 1500000; +select count(*) from innodb_compact t1, innodb_normal t2 where +t1.c1 = t2.c1 and t1.b = t2.b; +select count(*) from innodb_dynamic t1, innodb_normal t2 where +t1.c1 = t2.c1 and t1.b = t2.b; +select count(*) from innodb_compressed t1, innodb_normal t2 where +t1.c1 = t2.c1 and t1.b = t2.b; +select count(*) from innodb_redundant t1, innodb_normal t2 where +t1.c1 = t2.c1 and t1.b = t2.b; + +SELECT variable_value >= 0 FROM information_schema.global_status WHERE variable_name = 'innodb_num_pages_encrypted'; +SELECT variable_value >= 0 FROM information_schema.global_status WHERE variable_name = 'innodb_num_pages_decrypted'; + +drop procedure innodb_insert_proc; +drop table innodb_normal; +drop table innodb_compact; +drop table innodb_compressed; +drop table innodb_dynamic; +drop table innodb_redundant; +drop table innodb_defkey; diff --git a/mysql-test/suite/encryption/t/innodb-page_encryption_compression-master.opt b/mysql-test/suite/encryption/t/innodb-page_encryption_compression-master.opt new file mode 100644 index 000000000000..f73683624185 --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb-page_encryption_compression-master.opt @@ -0,0 +1,4 @@ +$KEYRING_PLUGIN_OPT +--early-plugin-load="keyring_file=$KEYRING_PLUGIN" +--loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring +--innodb-encrypt-tables=ONLINE_FROM_KEYRING_TO_UNENCRYPTED diff --git a/mysql-test/suite/encryption/t/innodb-page_encryption_compression.test b/mysql-test/suite/encryption/t/innodb-page_encryption_compression.test new file mode 100644 index 000000000000..bb3cbaadd9b7 --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb-page_encryption_compression.test @@ -0,0 +1,76 @@ +--skip # Test unstable on Jenkins centos6 +-- source include/have_innodb.inc +-- source include/not_embedded.inc +#-- source include/have_file_key_management_plugin.inc + +#let $innodb_compression_algorithm_orig=`SELECT @@innodb_compression_algorithm`; + +# zlib +#set global innodb_compression_algorithm = 1; + +--disable_warnings # Disabling warnings as punch hole get generate ones when compression is enabled and + # filesystem is not supporting them +create table innodb_normal(c1 bigint not null, b char(200)) engine=innodb COMPRESSION="zlib"; +show warnings; +create table innodb_compact(c1 bigint not null, b char(200)) engine=innodb row_format=compact ENCRYPTION='KEYRING' encryption_key_id=1 COMPRESSION="zlib"; +#show warnings; +create table innodb_dynamic(c1 bigint not null, b char(200)) engine=innodb row_format=dynamic ENCRYPTION='KEYRING' encryption_key_id=2 COMPRESSION="zlib"; +--enable_warnings +#show warnings; + +show create table innodb_normal; +show create table innodb_compact; +show create table innodb_dynamic; + +delimiter //; +create procedure innodb_insert_proc (repeat_count int) +begin + declare current_num int; + set current_num = 0; + while current_num < repeat_count do + insert into innodb_normal values(current_num, substring(MD5(RAND()), -128)); + set current_num = current_num + 1; + end while; +end// +delimiter ;// +commit; + +begin; +call innodb_insert_proc(2000); +insert into innodb_compact select * from innodb_normal; +insert into innodb_dynamic select * from innodb_normal; +commit; + +#let $wait_condition= select variable_value > 0 from information_schema.global_status where variable_name = 'INNODB_NUM_PAGES_PAGE_COMPRESSED'; +#--source include/wait_condition.inc + +--let $restart_parameters=restart:--innodb-encrypt-tables=ONLINE_FROM_KEYRING_TO_UNENCRYPTED +--source include/restart_mysqld.inc + +select * from innodb_compact; +select * from innodb_dynamic; + +# zlib +#set global innodb_compression_algorithm = 1; +set innodb_default_encryption_key_id = DEFAULT; + +--disable_warnings # Disabling warnings as punch hole get generate ones when compression is enabled and + # filesystem is not supporting them +alter table innodb_normal engine=innodb COMPRESSION="zlib"; +show create table innodb_normal; +alter table innodb_compact engine=innodb encryption='KEYRING' COMPRESSION="zlib"; +show create table innodb_compact; +alter table innodb_dynamic engine=innodb encryption='KEYRING' COMPRESSION="zlib"; +show create table innodb_dynamic; +--enable_warnings +#let $wait_condition= select variable_value > 0 from information_schema.global_status where variable_name = 'INNODB_NUM_PAGES_PAGE_DECOMPRESSED'; +#--source include/wait_condition.inc + +drop procedure innodb_insert_proc; +drop table innodb_normal; +drop table innodb_compact; +drop table innodb_dynamic; + +#--disable_query_log +#EVAL SET GLOBAL innodb_compression_algorithm = $innodb_compression_algorithm_orig; +#--enable_query_log diff --git a/mysql-test/suite/encryption/t/innodb-read-only-master.opt b/mysql-test/suite/encryption/t/innodb-read-only-master.opt new file mode 100644 index 000000000000..7a622ddf67ae --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb-read-only-master.opt @@ -0,0 +1,5 @@ +$KEYRING_PLUGIN_OPT +--early-plugin-load="keyring_file=$KEYRING_PLUGIN" +--loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring +--innodb-encrypt-tables=ONLINE_TO_KEYRING +--innodb-encryption-threads=4 diff --git a/mysql-test/suite/encryption/t/innodb-read-only.test b/mysql-test/suite/encryption/t/innodb-read-only.test new file mode 100644 index 000000000000..fbfbd2a94992 --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb-read-only.test @@ -0,0 +1,34 @@ +#--source suite/encryption/include/have_file_key_management_plugin.inc +--source include/have_innodb.inc +--source include/not_embedded.inc + +--echo # Wait max 10 min for key encryption threads to encrypt all spaces +let $cnt=600; +while ($cnt) +{ + let $success=`SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0`; + if ($success) + { + let $cnt=0; + } + if (!$success) + { + real_sleep 1; + dec $cnt; + } +} +if (!$success) +{ + SELECT * FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION; + SHOW STATUS LIKE 'innodb_encryption%'; + -- die Timeout waiting for encryption threads +} +--echo # Success! + +# +# MDEV-11835: InnoDB: Failing assertion: free_slot != NULL on +# restarting server with encryption and read-only +# +--let $restart_parameters=restart:--innodb-read-only=1 --innodb-encrypt-tables=ONLINE_TO_KEYRING +--source include/restart_mysqld.inc +--echo # All done diff --git a/mysql-test/suite/encryption/t/innodb-redo-nokeys-master.opt b/mysql-test/suite/encryption/t/innodb-redo-nokeys-master.opt new file mode 100644 index 000000000000..e7a707b73599 --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb-redo-nokeys-master.opt @@ -0,0 +1,6 @@ +$KEYRING_PLUGIN_OPT +--early-plugin-load="keyring_file=$KEYRING_PLUGIN" +--loose-keyring_file_data=$MYSQLTEST_VARDIR/std_data/keys2.txt +--innodb-change-buffering=none +--innodb-encrypt-tables=ONLINE_TO_KEYRING +--innodb-default-encryption-key-id=20 diff --git a/mysql-test/suite/encryption/t/innodb-redo-nokeys.test b/mysql-test/suite/encryption/t/innodb-redo-nokeys.test new file mode 100644 index 000000000000..62de17674d2e --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb-redo-nokeys.test @@ -0,0 +1,109 @@ +--skip +-- source include/have_innodb.inc +#-- source include/have_file_key_management_plugin.inc +# embedded does not support restart +-- source include/not_embedded.inc +--source include/have_64bit.inc + +call mtr.add_suppression("mysqld: File .*"); +call mtr.add_suppression("Plugin 'file_key_management' .*"); +call mtr.add_suppression("InnoDB: cannot enable encryption, encryption plugin is not available"); +call mtr.add_suppression("Plugin 'InnoDB' init function returned error."); +call mtr.add_suppression("Plugin 'InnoDB' registration as a STORAGE ENGINE failed."); +call mtr.add_suppression("InnoDB: The page \\[page id: space=[0-9]+, page number=[0-9]+\\] in file '.*test.t[1-4]\\.ibd' cannot be decrypted\\."); +call mtr.add_suppression("failed to read or decrypt \\[page id: space=[1-9][0-9]*, page number=[1-9][0-9]*\\]"); + +--echo # Restart mysqld --file-key-management-filename=keys2.txt +#-- let $restart_parameters=--file-key-management-filename=$MYSQL_TEST_DIR/std_data/keys2.txt +#-- source include/restart_mysqld.inc + +SET GLOBAL innodb_file_per_table = ON; + +#create table t1(a int not null primary key auto_increment, c char(200), b blob, index(b(10))) engine=innodb row_format=compressed ENCRYPTION='KEYRING' encryption_key_id=20; +create table t1(a int not null primary key, c char(200), b blob, index(b(10))) engine=innodb row_format=compressed ENCRYPTION='KEYRING' encryption_key_id=20; +#create table t2(a int not null primary key auto_increment, c char(200), b blob, index(b(10))) engine=innodb row_format=compressed; +create table t2(a int not null primary key, c char(200), b blob, index(b(10))) engine=innodb row_format=compressed; +#create table t3(a int not null primary key auto_increment, c char(200), b blob, index(b(10))) engine=innodb ENCRYPTION='KEYRING' encryption_key_id=20; +create table t3(a int not null primary key, c char(200), b blob, index(b(10))) engine=innodb ENCRYPTION='KEYRING' encryption_key_id=20; +#create table t4(a int not null primary key auto_increment, c char(200), b blob, index(b(10))) engine=innodb; +create table t4(a int not null primary key, c char(200), b blob, index(b(10))) engine=innodb; + +begin; +--disable_query_log +--let $i = 20 +begin; +while ($i) +{ + eval insert into t1(a,c,b) values ($i, repeat('secret1',20), repeat('secret2',6000)); + dec $i; +} +--enable_query_log + +insert into t2 select * from t1; +insert into t3 select * from t1; +insert into t4 select * from t1; +commit; + +--source include/no_checkpoint_start.inc +# +# We test redo log page read at recv_read_page using +# keys that are not in std_data/keys.txt. If checkpoint +# happens we will skip this test. If no checkpoint +# happens, InnoDB refuses to start as used +# encryption key is not found. +# + +#--disable_reconnect +#--source include/expect_crash.inc + +SET GLOBAL innodb_flush_log_at_trx_commit=1; +begin; +update t1 set c = repeat('secret3', 20); +update t2 set c = repeat('secret4', 20); +update t3 set c = repeat('secret4', 20); +update t4 set c = repeat('secret4', 20); +insert into t1 (a,c,b) values (21, repeat('secret5',20), repeat('secret6',6000)); +insert into t2 (a,c,b) values (21, repeat('secret7',20), repeat('secret8',6000)); +insert into t3 (a,c,b) values (21, repeat('secret9',20), repeat('secre10',6000)); +insert into t4 (a,c,b) values (21, repeat('secre11',20), repeat('secre12',6000)); +COMMIT; +let $cleanup= drop table t1,t2,t3,t4; +--let CLEANUP_IF_CHECKPOINT= $cleanup; +--source include/no_checkpoint_end.inc + +#--disable_reconnect +#--source include/expect_crash.inc + +--echo # Robert: After no_checkpoint_end +--echo # restart + +--let $error_log=$MYSQLTEST_VARDIR/tmp/my_restart.err + +--error 1 +#--exec xterm -e gdb $MYSQLD_CMD --log-error=$error_log +--exec $MYSQLD_CMD --log-error=$error_log + +# We should get error in error log as it should not be possible to apply redo logs +# to encrypted tables + +--let ABORT_ON=NOT_FOUND +--let SEARCH_FILE=$error_log +--let SEARCH_PATTERN=############### CORRUPT LOG RECORD FOUND ################## +--source include/search_pattern_in_file.inc + +#--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect +#--let $restart_parameters=restart: +#--source include/start_mysqld.inc + +--echo # Robert: After start_mysqld.inc +# +# In above server does start but InnoDB refuses to start +# thus we need to restart server with correct key file +# +--echo # Restart mysqld +--let $restart_parameters=restart:--early-plugin-load="keyring_file=$KEYRING_PLUGIN" --keyring-file-data=$MYSQLTEST_VARDIR/std_data/keys2.txt +--source include/start_mysqld.inc + +--remove_file $error_log + +drop table t1, t2,t3,t4; diff --git a/mysql-test/suite/encryption/t/innodb-spatial-index-master.opt b/mysql-test/suite/encryption/t/innodb-spatial-index-master.opt new file mode 100644 index 000000000000..3fba81fc39ea --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb-spatial-index-master.opt @@ -0,0 +1,6 @@ +$KEYRING_PLUGIN_OPT +--early-plugin-load="keyring_file=$KEYRING_PLUGIN" +--loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring +--innodb-encrypt-tables +--innodb-encryption-rotate-key-age=15 +--innodb-encryption-threads=4 diff --git a/mysql-test/suite/encryption/t/innodb-spatial-index.test b/mysql-test/suite/encryption/t/innodb-spatial-index.test new file mode 100644 index 000000000000..828a6a0b88c6 --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb-spatial-index.test @@ -0,0 +1,89 @@ +--skip +--source include/have_innodb.inc +#--source include/have_file_key_management_plugin.inc + +# +# MDEV-11974: MariaDB 10.2 encryption does not support spatial indexes +# + +# +# (1) Do not allow creating table with ENCRYPTED=YES +# +# +--replace_regex /#sql-[0-9a-f_]*`/#sql-temporary`/ +#--error ER_ILLEGAL_HA_CREATE_OPTION +CREATE TABLE t1 (pk INT PRIMARY KEY AUTO_INCREMENT, +c VARCHAR(256), coordinate POINT NOT NULL, SPATIAL index(coordinate)) ENGINE=INNODB +ENCRYPTION='KEYRING'; + +# +# (2) Alter table +# +CREATE TABLE t2 (pk INT PRIMARY KEY AUTO_INCREMENT, +c VARCHAR(256), coordinate POINT NOT NULL, SPATIAL index(coordinate)) ENGINE=INNODB; +#--error ER_ILLEGAL_HA_CREATE_OPTION +ALTER TABLE t2 ENCRYPTION='KEYRING'; +DROP TABLE t1; +DROP TABLE t2; + +# +# Index creation +# +#CREATE TABLE t1 (pk INT PRIMARY KEY AUTO_INCREMENT, +CREATE TABLE t1 (pk INT PRIMARY KEY AUTO_INCREMENT, +c VARCHAR(256), coordinate POINT NOT NULL) ENCRYPTION='KEYRING' ENGINE=INNODB; +#c VARCHAR(256), coordinate POINT NOT NULL) ENCRYPTED=YES ENGINE=INNODB; +# FIXME: MDEV-13851 Encrypted table refuses some form of ALGORITHM=COPY, +# but allows rebuild by FORCE + +#--replace_regex /#sql-[0-9a-f_]*`/#sql-temporary`/ +#--error ER_CANT_CREATE_TABLE +ALTER TABLE t1 ADD SPATIAL INDEX b(coordinate), ALGORITHM=COPY; +DROP INDEX b ON t1; +#--error ER_ILLEGAL_HA_CREATE_OPTION +ALTER TABLE t1 ADD SPATIAL INDEX b(coordinate), FORCE, ALGORITHM=INPLACE; +DROP INDEX b ON t1; +#--error ER_ILLEGAL_HA_CREATE_OPTION +CREATE SPATIAL INDEX b on t1(coordinate); +DROP INDEX b ON t1; +ALTER TABLE t1 ADD SPATIAL INDEX(coordinate); +#--error ER_ILLEGAL_HA_CREATE_OPTION +DROP TABLE t1; + +#CREATE TABLE t1 (pk INT PRIMARY KEY AUTO_INCREMENT, +#c VARCHAR(256), coordinate POINT NOT NULL) ENCRYPTED=DEFAULT ENGINE=INNODB; +CREATE TABLE t1 (pk INT PRIMARY KEY AUTO_INCREMENT, +c VARCHAR(256), coordinate POINT NOT NULL) ENGINE=INNODB; +CREATE SPATIAL INDEX b on t1(coordinate); +INSERT INTO t1 values(1, 'secret', ST_GeomFromText('POINT(903994614 180726515)')); +ALTER TABLE t1 DROP INDEX b; +INSERT INTO t1 values(2, 'secret', ST_GeomFromText('POINT(903994614 180726515)')); +ALTER TABLE t1 ADD SPATIAL INDEX b(coordinate); +INSERT INTO t1 values(3, 'secret', ST_GeomFromText('POINT(903994614 180726515)')); +DROP TABLE t1; +# +# (3) Default encryption should still work +# + +#CREATE TABLE t1 (pk INT PRIMARY KEY AUTO_INCREMENT, +#c VARCHAR(256), coordinate POINT NOT NULL, SPATIAL index(coordinate)) ENGINE=INNODB; +CREATE TABLE t1 (pk INT PRIMARY KEY AUTO_INCREMENT, +c VARCHAR(256), coordinate POINT NOT NULL, SPATIAL index(coordinate)) ENGINE=INNODB; +#CREATE TABLE t2 (pk INT PRIMARY KEY AUTO_INCREMENT, +#c VARCHAR(256), coordinate POINT NOT NULL, SPATIAL index(coordinate)) ENGINE=INNODB PAGE_COMPRESSED=YES; +CREATE TABLE t2 (pk INT PRIMARY KEY AUTO_INCREMENT, +c VARCHAR(256), coordinate POINT NOT NULL, SPATIAL index(coordinate)) ENGINE=INNODB COMPRESSION="zlib"; + +INSERT INTO t1 values(1, 'secret', ST_GeomFromText('POINT(903994614 180726515)')); +INSERT INTO t2 values(1, 'secret', ST_GeomFromText('POINT(903994614 180726515)')); + +--let $wait_timeout=600 +--let $wait_condition=SELECT COUNT(*) <> 0 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; +--source include/wait_condition.inc + +--echo # Success! + +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION > 0; +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; + +DROP TABLE t1, t2; diff --git a/mysql-test/suite/encryption/t/innodb_aborted_flush-master.opt b/mysql-test/suite/encryption/t/innodb_aborted_flush-master.opt new file mode 100644 index 000000000000..33deeb931a9f --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_aborted_flush-master.opt @@ -0,0 +1,5 @@ +$KEYRING_PLUGIN_OPT +--early-plugin-load="keyring_file=$KEYRING_PLUGIN" +--loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring +--innodb-encrypt-tables=OFF +--innodb-encryption-threads=0 diff --git a/mysql-test/suite/encryption/t/innodb_aborted_flush.test b/mysql-test/suite/encryption/t/innodb_aborted_flush.test new file mode 100644 index 000000000000..276a1f357669 --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_aborted_flush.test @@ -0,0 +1,205 @@ +--skip # Test unstable on jenkins +--source include/have_innodb.inc +--source include/have_debug.inc +--source include/have_debug_sync.inc +--source include/not_valgrind.inc +--source include/not_embedded.inc + +--let $error_log=$MYSQL_TMP_DIR/my_restart.err +--let $restart_parameters=restart:--innodb-encryption-threads=0 --log-error=$error_log +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR +--source include/restart_mysqld.inc + +CREATE TABLE t1 (a VARCHAR(255)) ENGINE=InnoDB; +CREATE TABLE t2 (a VARCHAR(255)) ENGINE=InnoDB; +CREATE TABLE t3 (a VARCHAR(255)) ENGINE=InnoDB; +CREATE TABLE t4 (a VARCHAR(255)) ENGINE=InnoDB; + +insert t1 values (repeat('foobarsecret', 12)); +insert t2 values (repeat('tempsecret', 12)); +insert t3 values (repeat('dummysecret', 12)); +insert t4 values (repeat('verysecret', 12)); + +--let $assert_text= Make sure all tables have encrypted flag disabled +--let $assert_cond= "[SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE ((FLAG & 8192) = 8192)]" = 0 +--source include/assert.inc + +--echo # We should encrypt all tables apart from t3 +SET GLOBAL debug="+d,fail_encryption_flag_update_on_t3"; + +--echo # Enable encryption +SET GLOBAL innodb_encryption_rotate_key_age=15; +SET GLOBAL innodb_encryption_threads = 4; +SET GLOBAL innodb_encrypt_tables = ONLINE_TO_KEYRING; + +--echo # Wait for all tables to get encrypted +--let $tables_count= `select count(*) from information_schema.tables where engine = 'InnoDB' and table_schema <> 'information_schema'` +--let $wait_timeout= 600 +# Encrypted tables count should be equal $tables_count - because INNODB_TABLESPACES_ENCRYPTION +# contains an artificial table innodb_system and t3 should not be encrypted +--let $wait_condition=SELECT COUNT(*) = $tables_count FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 1 +--source include/wait_condition.inc + +--let $assert_text= Make sure only t3's encryption flag is not set +--let $assert_cond= "[SELECT NAME FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE ((FLAG & 8192) = 0)]" = "test/t3" +--source include/assert.inc + +--echo # Disable encryption +SET GLOBAL innodb_encryption_threads = 0; +SET GLOBAL debug="-d,fail_encryption_flag_update_on_t3"; + +--source include/shutdown_mysqld.inc + +--echo # Check that error message about t3 being removed from encryption rotation is present in error log +--let SEARCH_PATTERN=Encryption thread failed to flush encryption information for tablespace test/t3. This should not happen and could indicate problem with OS or filesystem. Excluding test/t3 from encryption rotation. You can try decrypting/encrypting with alter statement for this table or restarting the server. +--let ABORT_ON=NOT_FOUND +--let SEARCH_FILE=$error_log +--source include/search_pattern_in_file.inc + +--remove_file $error_log + +--echo # On restart all tables with encrypted flag set should get validated against Data Dictionary. Let's check there is +--echo # no error related to encryption flag mismatch between DD and ibd file. +--let $restart_parameters=restart:--innodb-encryption-threads=0 --log-error=$error_log +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR +--source include/start_mysqld.inc + +SELECT * FROM t1; +SELECT * FROM t2; +SELECT * FROM t3; +SELECT * FROM t4; + +--let $assert_text= Make sure only t3's encryption flag is not set +--let $assert_cond= "[SELECT NAME FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE ((FLAG & 8192) = 0)]" = "test/t3" +--source include/assert.inc + +--source include/shutdown_mysqld.inc +--let SEARCH_PATTERN=This indicates that the rotation of the table was interrupted +--let ABORT_ON=FOUND +--let SEARCH_FILE=$error_log +--source include/search_pattern_in_file.inc + +--remove_file $error_log + +--let $restart_parameters=restart:--innodb-encryption-threads=4 --innodb-encrypt-tables=ONLINE_TO_KEYRING +--source include/start_mysqld.inc + +--echo # Wait for all tables to get encrypted +--let $tables_count= `select count(*) from information_schema.tables where engine = 'InnoDB' and table_schema <> 'information_schema'` +--let $wait_timeout= 600 +# Encrypted tables count should be equal $tables_count + 1 - because INNODB_TABLESPACES_ENCRYPTION +# contains an artificial table innodb_system +--let $wait_condition=SELECT COUNT(*) = $tables_count + 1 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 1 +--source include/wait_condition.inc + +--let $assert_text= Make sure all tablespaces have encryption flag set +--let $assert_cond= "[SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE ((FLAG & 8192) = 0)]" = 0 +--source include/assert.inc + + +--let $error_log2=$MYSQL_TMP_DIR/my_restart2.err +--let $restart_parameters=restart:--innodb-encryption-threads=0 --innodb-encrypt-tables=ONLINE_FROM_KEYRING_TO_UNENCRYPTED --log-error=$error_log2 +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR +--source include/restart_mysqld.inc + +DROP TABLE t1,t2,t3,t4; + +--echo # Recreate t1..t4 inside a tablespace + +CREATE TABLESPACE ts_1 ADD DATAFILE 'ts_1.ibd' ENGINE="InnoDB"; +CREATE TABLE t1 (a varchar(255)) TABLESPACE ts_1 ENGINE="InnoDB"; +CREATE TABLE t2 (a varchar(255)) TABLESPACE ts_1 ENGINE="InnoDB"; +CREATE TABLE t3 (a varchar(255)) TABLESPACE ts_1 ENGINE="InnoDB"; +CREATE TABLE t4 (a varchar(255)) TABLESPACE ts_1 ENGINE="InnoDB"; + +# The purpose of t5 is bit weird. We want to catch the situation when ts_1 rotation has failed due +# to t3 flush problem. So ts_1 should remain marked as unencrypted in this part. How do we know that +# the flush problem occurred if we do not have debug sync point here? We will use only one encryption +# thread and t5 will be processed after ts_1. We will wait for t5 to get encrypted and thus we will know +# that t3's flush problem should have occurred. +CREATE TABLE t5 (a varchar(255)) ENGINE="InnoDB"; + +insert t1 values (repeat('foobarsecret', 12)); +insert t2 values (repeat('tempsecret', 12)); +insert t3 values (repeat('dummysecret', 12)); +insert t4 values (repeat('verysecret', 12)); + +--let $assert_text= Make sure ts_1's encryption flag is not set +--let $assert_cond= "[SELECT FLAG & 8192 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE NAME =\\'test/ts_1\\']" = 0 +--source include/assert.inc + +--echo # Since t3 flag's update will fail, the tablespace ts_1's flag should remain unencrypted +SET GLOBAL debug="+d,fail_encryption_flag_update_on_t3"; + +--echo # Enable encryption +SET GLOBAL innodb_encryption_rotate_key_age=15; +SET GLOBAL innodb_encryption_threads = 1; +SET GLOBAL innodb_encrypt_tables = ONLINE_TO_KEYRING; + +--echo # Wait for all tables to get encrypted (apart from ts_1) +--let $tablespaces_count= `select count(*) from information_schema.innodb_sys_tablespaces` +--let $wait_timeout= 600 +# Encrypted tablespaces count should be equal $tables_count - because INNODB_TABLESPACES_ENCRYPTION +# contains an artificial tablespace innodb_system and ts_1 should not be encrypted +--let $wait_condition=SELECT COUNT(*) = $tablespaces_count FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 1 +--source include/wait_condition.inc + +--echo # Disable encryption +SET GLOBAL innodb_encryption_threads = 0; +SET GLOBAL debug="-d,fail_encryption_flag_update_on_t3"; + +--let $assert_text= Make sure only ts_1's encryption flag is not set +--let $assert_cond= "[SELECT NAME FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE ((FLAG & 8192) = 0)]" = "ts_1" +--source include/assert.inc + +--source include/shutdown_mysqld.inc + +--echo # Check that error message about ts_1 being removed from encryption rotation is present in error log +--let SEARCH_PATTERN=Encryption thread failed to flush encryption information for tablespace ts_1. This should not happen and could indicate problem with OS or filesystem. Excluding ts_1 from encryption rotation. You can try decrypting/encrypting with alter statement for this table or restarting the server. +--let ABORT_ON=NOT_FOUND +--let SEARCH_FILE=$error_log2 +--source include/search_pattern_in_file.inc + +--remove_file $error_log2 + +--echo # On restart all tables with encrypted flag set should get validated against Data Dictionary. Let's check there is +--echo # no error related to encryption flag mismatch between DD and ibd file. + +--let $restart_parameters=restart:--innodb-encryption-threads=0 --log-error=$error_log +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR +--source include/start_mysqld.inc + +SELECT * FROM t1; +SELECT * FROM t2; +SELECT * FROM t3; +SELECT * FROM t4; + +--let $assert_text= Make sure only ts_1's encryption flag is not set +--let $assert_cond= "[SELECT NAME FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE ((FLAG & 8192) = 0)]" = "ts_1" +--source include/assert.inc + +--source include/shutdown_mysqld.inc +--let SEARCH_PATTERN=This indicates that the rotation of the table was interrupted +--let ABORT_ON=FOUND +--let SEARCH_FILE=$error_log +--source include/search_pattern_in_file.inc + +--echo # Turn ON encryption and check that ts_1 gets successfully encrypted after the restart. + +--let $restart_parameters=restart:--innodb-encryption-threads=4 --innodb-encrypt-tables=ONLINE_TO_KEYRING +--source include/start_mysqld.inc + +--echo # Wait for all tables to get encrypted +--let $tablespaces_count= `select count(*) from information_schema.innodb_sys_tablespaces` +--let $wait_timeout= 600 +# Encrypted tablespaces count should be equal $tables_count + 1 because INNODB_TABLESPACES_ENCRYPTION +# contains an artificial tablespace innodb_system +--let $wait_condition=SELECT COUNT(*) = $tablespaces_count + 1 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 1 +--source include/wait_condition.inc + +--let $assert_text= Make sure all tablespaces have encryption flag set +--let $assert_cond= "[SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE ((FLAG & 8192) = 0)]" = 0 +--source include/assert.inc + +DROP TABLE t1,t2,t3,t4; +DROP TABLESPACE ts_1; diff --git a/mysql-test/suite/encryption/t/innodb_alter_mk_to_rk-master.opt b/mysql-test/suite/encryption/t/innodb_alter_mk_to_rk-master.opt new file mode 100644 index 000000000000..e7783ed63dd3 --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_alter_mk_to_rk-master.opt @@ -0,0 +1,3 @@ +$KEYRING_PLUGIN_OPT +--early-plugin-load="keyring_file=$KEYRING_PLUGIN" +--loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring diff --git a/mysql-test/suite/encryption/t/innodb_alter_mk_to_rk.test b/mysql-test/suite/encryption/t/innodb_alter_mk_to_rk.test new file mode 100644 index 000000000000..4b9efa7a2054 --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_alter_mk_to_rk.test @@ -0,0 +1,96 @@ +--skip +-- source include/have_innodb.inc +# embedded does not support restart +-- source include/not_embedded.inc + + +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR +eval SET @@global.keyring_file_data="$MYSQL_TMP_DIR/mysecret_keyring"; + +SHOW PLUGINS; +# +# MDEV-8138: strange results from encrypt-and-grep test +# +--let $MYSQLD_DATADIR=`select @@datadir` +#TODO: Robert - dlaczego tu jest ibdata1 +--let ib1_IBD = $MYSQLD_DATADIR/ibdata1 +--let t1_IBD = $MYSQLD_DATADIR/test/t1.ibd +--let SEARCH_RANGE = 10000000 + +--disable_warnings +SET GLOBAL innodb_file_per_table = ON; +SET GLOBAL innodb_file_format = `Barracuda`; +--enable_warnings + +create table t1 (a varchar(255)) engine=innodb; + +SELECT NAME, MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; +SELECT NAME, MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; +SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES; +SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES; + + +--let $assert_text= Table t1 should be included in INNODB_TABLESPACES_ENCRYPTION yet - since it is not RK +--let $assert_cond= "[SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE NAME = \\"test/t1\\"]" = 0 +--source include/assert.inc + +insert t1 values (repeat('foobarsecret', 12)); +select * from t1; + +--echo # 1. Alter from unencrypted to RK +ALTER TABLE t1 encryption='KEYRING'; +SELECT * FROM t1; + +--let $assert_text= Table t1 should be the only one appearing in INNODB_TABLESPACES_ENCRYPTION +--let $assert_cond= "[SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0]" = "test/t1" +--source include/assert.inc + +create table t2 (a varchar(255)) engine=innodb encryption='y'; +insert t2 values (repeat('foobarsecret', 12)); + +--let $assert_text= Table t2 should be included in INNODB_TABLESPACES_ENCRYPTION yet - since it is not RK +--let $assert_cond= "[SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE NAME = \\"test/t2\\"]" = 0 +--source include/assert.inc + +--echo # 2. Alter from MK encryption to RK +ALTER TABLE t2 encryption='KEYRING'; +SELECT * FROM t2; + +--let $assert_text= Table t2 should be included in INNODB_TABLESPACES_ENCRYPTION with MIN_KEY_VERION 0 (encrypted) +--let $assert_cond= "[SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE NAME = \\"test/t2\\"]" = 1 +--source include/assert.inc + +--echo # 3. Alter from RK to MK +ALTER TABLE t1 encryption='Y'; +SELECT * FROM t1; + +--let $assert_text= Table t1 has been re_encrypted to Master key encryption - should disappear from INNODB_TABLESPACES_ENCRYPTION => thus only t2 should remain +--let $assert_cond= "[SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0]" = "test/t2" +--source include/assert.inc + +--echo # 4. Alter from MK to unencrypted +ALTER TABLE t1 encryption='n'; + +--let $assert_text= t1 should be marked as unencrypted in INNODB_TABLESPACES_ENCRYPTION +--let $assert_cond= "[SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0]" = "test/t1" +--source include/assert.inc +--let $assert_text= t2 should be marked as encrypted in INNODB_TABLESPACES_ENCRYPTION +--let $assert_cond= "[SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0]" = "test/t2" + +SELECT NAME, MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION; + +--echo # 5. Alter from unencrypted to RK +ALTER TABLE t1 encryption='KEYRING'; + +--let $assert_text= Table t1 should be included in INNODB_TABLESPACES_ENCRYPTION +--let $assert_cond= "[SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE NAME = \\"test/t1\\"]" = 1 +--source include/assert.inc + +--echo # 6. Alter from RK to unencrypted +ALTER TABLE t1 encryption='n'; +--let $assert_text= Table t1 should appear in INNODB_TABLESPACES_ENCRYPTION but with MIN_KEY_VERSION marked as UNENCRYPTED +--let $assert_cond= "[SELECT MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE NAME = \\"test/t1\\"]" <> 0 +--source include/assert.inc + +drop table t1,t2; + diff --git a/mysql-test/suite/encryption/t/innodb_alters-master.opt b/mysql-test/suite/encryption/t/innodb_alters-master.opt new file mode 100644 index 000000000000..e7783ed63dd3 --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_alters-master.opt @@ -0,0 +1,3 @@ +$KEYRING_PLUGIN_OPT +--early-plugin-load="keyring_file=$KEYRING_PLUGIN" +--loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring diff --git a/mysql-test/suite/encryption/t/innodb_alters.test b/mysql-test/suite/encryption/t/innodb_alters.test new file mode 100644 index 000000000000..c2704d11efe0 --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_alters.test @@ -0,0 +1,272 @@ +-- source include/have_innodb.inc +# embedded does not support restart +-- source include/not_embedded.inc + +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR +eval SET @@global.keyring_file_data="$MYSQL_TMP_DIR/mysecret_keyring"; + +# +# MDEV-8138: strange results from encrypt-and-grep test +# +--let $MYSQLD_DATADIR=`select @@datadir` +#TODO: Robert - dlaczego tu jest ibdata1 +--let ib1_IBD = $MYSQLD_DATADIR/ibdata1 +--let t1_IBD = $MYSQLD_DATADIR/test/t1.ibd +--let SEARCH_RANGE = 10000000 + +--disable_warnings +SET GLOBAL innodb_file_per_table = ON; +SET GLOBAL innodb_file_format = `Barracuda`; +--enable_warnings + +create table t1 (a varchar(255)) engine=innodb; + +--let $assert_text= Table t1 should be included in INNODB_TABLESPACES_ENCRYPTION yet - since it is not RK +--let $assert_cond= "[SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE NAME = \\"test/t1\\"]" = 0 +--source include/assert.inc + +insert t1 values (repeat('foobarsecret', 12)); +select * from t1; + +--echo # 1. Alter from unencrypted to RK +ALTER TABLE t1 encryption='KEYRING'; +SHOW CREATE TABLE t1; +SELECT * FROM t1; + +--let $assert_text= Table t1 should be the only one appearing in INNODB_TABLESPACES_ENCRYPTION +--let $assert_cond= "[SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 1]" = "test/t1" +--source include/assert.inc + +CREATE TABLE t2 (a varchar(255)) engine=innodb encryption='y'; +SHOW CREATE TABLE t2; +INSERT t2 VALUES (repeat('foobarsecret', 12)); + +--let $assert_text= Table t2 should not be included in INNODB_TABLESPACES_ENCRYPTION - since it is not RK +--let $assert_cond= "[SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE NAME = \\"test/t2\\"]" = 0 +--source include/assert.inc + +--echo # 2. Alter from MK encryption to RK +ALTER TABLE t2 encryption='KEYRING'; +SHOW CREATE TABLE t2; +SELECT * FROM t2; + +--let $assert_text= Table t2 should be included in INNODB_TABLESPACES_ENCRYPTION with MIN_KEY_VERION 1 (encrypted) +--let $assert_cond= "[SELECT MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE NAME = \\"test/t2\\"]" = 1 +--source include/assert.inc + +--echo # 3. Alter from RK to MK +ALTER TABLE t1 encryption='Y'; +SHOW CREATE TABLE t1; +SELECT * FROM t1; + +--let $assert_text= Table t1 has been re_encrypted to Master key encryption - should disappear from INNODB_TABLESPACES_ENCRYPTION => thus only t2 should remain +--let $assert_cond= "[SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 1]" = "test/t2" +--source include/assert.inc + +--echo # 4. Alter from MK to unencrypted +ALTER TABLE t1 encryption='n'; +SHOW CREATE TABLE t1; + +--let $assert_text= t1 should be marked as unencrypted in INNODB_TABLESPACES_ENCRYPTION +--let $assert_cond= "[SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0]" = "test/t1" +--source include/assert.inc +--let $assert_text= t1 should be only table from test database in INNODB_TABLESPACES_ENCRYPTION +--let $assert_cond= "[SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE NAME LIKE \\"test/%\\"]" = 1 + +SELECT NAME, MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION; + +--echo # 5. Alter from unencrypted to RK +ALTER TABLE t1 ENCRYPTION='KEYRING'; +SHOW CREATE TABLE t1; + +--let $assert_text= Table t1 should be included in INNODB_TABLESPACES_ENCRYPTION +--let $assert_cond= "[SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE NAME = \\"test/t1\\"]" = 1 +--source include/assert.inc + +--echo # 6. Alter from RK to unencrypted +ALTER TABLE t1 ENCRYPTION='n'; +SHOW CREATE TABLE t1; +--let $assert_text= Table t1 should appear in INNODB_TABLESPACES_ENCRYPTION but with MIN_KEY_VERSION (0) UNENCRYPTED +--let $assert_cond= "[SELECT MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE NAME = \\"test/t1\\"]" = 0 +--source include/assert.inc + +--echo # 7. Alter to RK INPLACE + +ALTER TABLE t1 ENCRYPTION='KEYRING', ALGORITHM=INPLACE; +SHOW CREATE TABLE t1; +--let $assert_text= Table t1 should appear in INNODB_TABLESPACES_ENCRYPTION with MIN_KEY_VERSION (1) ENCRYPTED +--let $assert_cond= "[SELECT MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE NAME = \\"test/t1\\"]" = 1 +--source include/assert.inc + +--echo # 8. Alter to UNENCRYPTED INPLACE + +ALTER TABLE t1 ENCRYPTION='N', ALGORITHM=INPLACE; +SHOW CREATE TABLE t1; +--let $assert_text= Table t1 should appear in INNODB_TABLESPACES_ENCRYPTION with MIN_KEY_VERSION (0) UNENCRYPTED +--let $assert_cond= "[SELECT MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE NAME = \\"test/t1\\"]" = 0 +--source include/assert.inc + +--echo # 9. Alter ENCRYPTION_KEY_ID + +ALTER TABLE t1 ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=5; +SHOW CREATE TABLE t1; +--let $assert_text= Table t1 should appear in INNODB_TABLESPACES_ENCRYPTION with MIN_KEY_VERSION (1) ENCRYPTED KEY_ID =5 +--let $assert_cond= "[SELECT MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE NAME = \\"test/t1\\" AND CURRENT_KEY_ID = 5]" = 1 +--source include/assert.inc + +--echo # 10. Alter ENCRYPTION_KEY_ID INPLACE + +ALTER TABLE t1 ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=6, ALGORITHM=INPLACE; +SHOW CREATE TABLE t1; +--let $assert_text= Table t1 should appear in INNODB_TABLESPACES_ENCRYPTION with MIN_KEY_VERSION (1) ENCRYPTED KEY_ID =6 +--let $assert_cond= "[SELECT MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE NAME = \\"test/t1\\" AND CURRENT_KEY_ID = 6]" = 1 +--source include/assert.inc + +ALTER TABLE t1 ENCRYPTION_KEY_ID=8; +SHOW CREATE TABLE t1; +--let $assert_text= Table t1 should appear in INNODB_TABLESPACES_ENCRYPTION with MIN_KEY_VERSION (1) ENCRYPTED KEY_ID =8 +--let $assert_cond= "[SELECT MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE NAME = \\"test/t1\\" AND CURRENT_KEY_ID = 8]" = 1 +--source include/assert.inc + +SELECT * FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION; + +ALTER TABLE t1 ENCRYPTION_KEY_ID=9, ALGORITHM=INPLACE; +SHOW CREATE TABLE t1; + +SELECT * FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION; +--let $assert_text= Table t1 should appear in INNODB_TABLESPACES_ENCRYPTION with MIN_KEY_VERSION (1) ENCRYPTED KEY_ID =9 +--let $assert_cond= "[SELECT MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE NAME = \\"test/t1\\" AND CURRENT_KEY_ID = 9]" = 1 +--source include/assert.inc + +--echo # It should not be possible to alter table to Master Key encryption INPLACE +--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON +ALTER TABLE t1 ENCRYPTION='Y', ALGORITHM=INPLACE; + +--echo # It should not be possible to decrypt with ENCRYPTION_KEY_ID set +ALTER TABLE t1 ENCRYPTION='N' ENCRYPTION_KEY_ID=6; +SHOW CREATE TABLE t1; + +ALTER TABLE t1 ENCRYPTION='N'; +SHOW CREATE TABLE t1; + +CREATE TABLE t3 (a varchar(255)) engine=innodb; +SHOW CREATE TABLE t3; +INSERT t3 VALUES (repeat('foobarsecret', 12)); + +CREATE TABLE t_rk_with_encryption_key_id (a varchar(255)) engine=innodb ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=5; +CREATE TABLE t_alter_encryption_key_id (a varchar(255)) engine=innodb; +CREATE TABLE t_alter_to_rk (a varchar(255)) engine=innodb; +ALTER TABLE t_alter_to_rk ENCRYPTION='KEYRING'; +ALTER TABLE t_alter_encryption_key_id ENCRYPTION_KEY_ID = 6; + +SHOW CREATE TABLE t_alter_encryption_key_id; +SHOW CREATE TABLE t_alter_to_rk; + +--echo # Testing alters with innodb-encrypt-tables ONLINE_TO_KEYRING +--let $restart_parameters=restart:--innodb-encrypt-tables=ONLINE_TO_KEYRING --innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=4 +--source include/restart_mysqld.inc + +--echo # Check that tables' definitions are correct after the reset +SHOW CREATE TABLE t1; +SHOW CREATE TABLE t2; +SHOW CREATE TABLE t3; +SHOW CREATE TABLE t_rk_with_encryption_key_id; +SHOW CREATE TABLE t_alter_to_rk; +SHOW CREATE TABLE t_alter_encryption_key_id; + +--let encrypted_tables_count=`select count(*) from INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES` +--echo #Wait for all tables to get encrypted (apart from t1) +--let $wait_timeout= 600 +--let $wait_condition=SELECT COUNT(*) = $encrypted_tables_count FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 1 +--source include/wait_condition.inc + +--echo # Alter ENCRYPTION_KEY_ID when t3 was encrypted with encryption thread +ALTER TABLE t3 ENCRYPTION_KEY_ID=3; +SHOW CREATE TABLE t3; + +--let $assert_text= Table t3 should appear in INNODB_TABLESPACES_ENCRYPTION with MIN_KEY_VERSION (1) ENCRYPTED KEY_ID =3 +--let $assert_cond= "[SELECT MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE NAME = \\"test/t3\\" AND CURRENT_KEY_ID = 3]" = 1 +--source include/assert.inc + +--echo # Alter ENCRYPTION_KEY_ID INPLACE when t3 was encrypted with encryption thread +ALTER TABLE t3 ENCRYPTION_KEY_ID=4, ALGORITHM=INPLACE; +SHOW CREATE TABLE t3; + +--let $assert_text= Table t3 should appear in INNODB_TABLESPACES_ENCRYPTION with MIN_KEY_VERSION (1) ENCRYPTED KEY_ID =4 +--let $assert_cond= "[SELECT MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE NAME = \\"test/t3\\" AND CURRENT_KEY_ID = 4]" = 1 +--source include/assert.inc + +--echo # Now decrypt t3. It should it should still be possible to change the ENCRYPTION_KEY_ID. + +SET GLOBAL innodb_encrypt_tables=ONLINE_FROM_KEYRING_TO_UNENCRYPTED; + +--echo #Wait for all tables to get decrypted (apart from t2, t_rk_with_encryption_key_id, t_alter_to_rk) +--let $wait_timeout= 600 +--let $wait_condition=SELECT COUNT(*) = 3 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 1 +--source include/wait_condition.inc + +--echo # Alter ENCRYPTION_KEY_ID of unencrypted table. The key_id 5 should be used during encryption with encryption +--echo # threads. However note that t3 was already encrypted with rotated threads. +ALTER TABLE t3 ENCRYPTION_KEY_ID=5, ALGORITHM=INPLACE; +SHOW CREATE TABLE t3; + +--let $assert_text= Table t3 should appear in INNODB_TABLESPACES_ENCRYPTION with MIN_KEY_VERSION (0 => UNECRYPTED) AND ENCRYPTED KEY_ID=5 +--let $assert_cond= "[SELECT MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE NAME = \\"test/t3\\" AND CURRENT_KEY_ID = 5]" = 0 +--source include/assert.inc + +--echo # After the re-encryption t3 should get encrypted with key 5 + +SET GLOBAL innodb_encrypt_tables=ONLINE_TO_KEYRING; + +--echo #Wait for all tables to get encrypted (apart from t1) +--let $wait_timeout= 600 +--let $wait_condition=SELECT COUNT(*) = $encrypted_tables_count FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 1 +--source include/wait_condition.inc + +--let $assert_text= Table t3 should appear in INNODB_TABLESPACES_ENCRYPTION with MIN_KEY_VERSION (1) ENCRYPTED KEY_ID =5 +--let $assert_cond= "[SELECT MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE NAME = \\"test/t3\\" AND CURRENT_KEY_ID = 5]" = 1 +--source include/assert.inc + +SHOW CREATE TABLE t3; + +--echo # Testing if alter encryption_encryption_key_id works on tables which was not previously encrypted with KEYRING +--echo # i.e. on plain innodb tables. + +--echo # Turn off encryption threads and encryption +SET GLOBAL innodb_encryption_threads=0; +SET GLOBAL innodb_encrypt_tables=ONLINE_FROM_KEYRING_TO_UNENCRYPTED; + +CREATE TABLE t4 (a varchar(255)) engine=innodb; +SHOW CREATE TABLE t4; + +INSERT t4 VALUES (repeat('foobarsecret', 12)); + +--let $assert_text= Table t4 should NOT appear in INNODB_TABLESPACES_ENCRYPTION +--let $assert_cond= "[SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE NAME = \\"test/t4\\"]" = 0 +--source include/assert.inc + +ALTER TABLE t4 ENCRYPTION_KEY_ID=6; +SHOW CREATE TABLE t4; + +--let $assert_text= Table t4 should appear in INNODB_TABLESPACES_ENCRYPTION with MIN_KEY_VERSION (0 => UNENCRYPTED) AND ENCRYPTION_KEY_ID =6 +--let $assert_cond= "[SELECT MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE NAME = \\"test/t4\\" AND CURRENT_KEY_ID = 6]" = 0 +--source include/assert.inc + +--echo # Encrypt all tables and check if t4 got encrypted with ENCRYPTION KEY 6 +SET GLOBAL innodb_encryption_threads=4; +SET GLOBAL innodb_encrypt_tables=ONLINE_TO_KEYRING; + +#--sleep 15 +#SELECT * FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION; + +--let encrypted_tables_count=`select count(*) from INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES` +--echo #Wait for all tables to get encrypted (apart from t1) +--let $wait_timeout= 600 +--let $wait_condition=SELECT COUNT(*) = $encrypted_tables_count FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 1 +--source include/wait_condition.inc + +--let $assert_text= Table t4 should appear in INNODB_TABLESPACES_ENCRYPTION with MIN_KEY_VERSION (1 => ENCRYPTED) AND ENCRYPTION_KEY_ID =6 +--let $assert_cond= "[SELECT MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE NAME = \\"test/t4\\" AND CURRENT_KEY_ID = 6]" = 1 +--source include/assert.inc + +drop table t1,t2,t3,t4,t_rk_with_encryption_key_id,t_alter_to_rk,t_alter_encryption_key_id; diff --git a/mysql-test/suite/encryption/t/innodb_default_key-master.opt b/mysql-test/suite/encryption/t/innodb_default_key-master.opt new file mode 100644 index 000000000000..e7783ed63dd3 --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_default_key-master.opt @@ -0,0 +1,3 @@ +$KEYRING_PLUGIN_OPT +--early-plugin-load="keyring_file=$KEYRING_PLUGIN" +--loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring diff --git a/mysql-test/suite/encryption/t/innodb_default_key.test b/mysql-test/suite/encryption/t/innodb_default_key.test new file mode 100644 index 000000000000..1d3dcde8a5b5 --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_default_key.test @@ -0,0 +1,106 @@ +-- source include/have_innodb.inc +# embedded does not support restart +-- source include/not_embedded.inc + +--disable_warnings +SET GLOBAL innodb_file_per_table = ON; +SET GLOBAL innodb_file_format = `Barracuda`; +SET GLOBAL innodb_encrypt_tables = ONLINE_FROM_KEYRING_TO_UNENCRYPTED; +SET GLOBAL innodb_encryption_threads= 0; +--enable_warnings + +--echo # Encryption disabled, innodb_default_encryption_key_id set default. Create table KEYRING should assign ENCRYPION_KEY_ID=0 +CREATE TABLE t1 (a varchar(255)) ENCRYPTION="KEYRING" ENGINE=innodb; +SHOW CREATE TABLE t1; +--let $assert_text= Table t1 should be included in INNODB_TABLESPACES_ENCRYPTION with MIN_KEY_VERION 1 (encrypted) and CURRENT_KEY_ID = 0 +--let $assert_cond= "[SELECT MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE NAME = \\"test/t1\\" AND CURRENT_KEY_ID=0]" = 1 +--source include/assert.inc +--echo # Alter to diffrent ENCRYPTION_KEY_ID should work +ALTER TABLE t1 ENCRYPTION_KEY_ID=1; +SHOW CREATE TABLE t1; +--let $assert_text= Table t1 should be included in INNODB_TABLESPACES_ENCRYPTION with MIN_KEY_VERION 1 (encrypted) and CURRENT_KEY_ID = 1 +--let $assert_cond= "[SELECT MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE NAME = \\"test/t1\\" AND CURRENT_KEY_ID = 1]" = 1 +--source include/assert.inc +--echo # Encryption disabled, innodb_default_encryption_key_id set to 5. Create table KEYRING should assign ENCRYPION_KEY_ID=5 +SET SESSION innodb_default_encryption_key_id = 5; +CREATE TABLE t2 (a varchar(255)) ENCRYPTION="KEYRING" ENGINE=innodb; +SHOW CREATE TABLE t2; +--let $assert_text= Table t2 should be included in INNODB_TABLESPACES_ENCRYPTION with MIN_KEY_VERION 1 (encrypted) and CURRENT_KEY_ID = 5 +--let $assert_cond= "[SELECT MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE NAME = \\"test/t2\\" AND CURRENT_KEY_ID = 5]" = 1 +--source include/assert.inc +--echo # Alter to diffrent ENCRYPTION_KEY_ID should work +ALTER TABLE t2 ENCRYPTION_KEY_ID=6; +SHOW CREATE TABLE t2; +--let $assert_text= Table t2 should be included in INNODB_TABLESPACES_ENCRYPTION with MIN_KEY_VERION 1 (encrypted) and CURRENT_KEY_ID = 6 +--let $assert_cond= "[SELECT MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE NAME = \\"test/t2\\" AND CURRENT_KEY_ID = 6]" = 1 +--source include/assert.inc +--echo # Create table t3 (unencrypted), create table t4 with MK encryption, set global innodb_default_encryption_key_id to 8. +CREATE TABLE t3 (a varchar(255)) ENGINE=innodb; +CREATE TABLE t4 (a varchar(255)) ENCRYPTION="Y" ENGINE=innodb; +SET GLOBAL innodb_default_encryption_key_id = 8; + +--echo # Turn on encryption. t3 and t4 should get encrypted with key 8. + +SET GLOBAL innodb_encrypt_tables = ONLINE_TO_KEYRING; +SET GLOBAL innodb_encryption_threads= 4; + +--let encrypted_tables_count=`select count(*) from INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES` +--echo #Wait for all tables to get encrypted (with arificial innodb_system) +--let $wait_timeout= 600 +--let $wait_condition=SELECT COUNT(*) = $encrypted_tables_count + 1 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 1 +--source include/wait_condition.inc + +--let $assert_text= Table t3 should be included in INNODB_TABLESPACES_ENCRYPTION with MIN_KEY_VERION 1 (encrypted) and CURRENT_KEY_ID = 8 +--let $assert_cond= "[SELECT MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE NAME = \\"test/t3\\" AND CURRENT_KEY_ID = 8]" = 1 +--source include/assert.inc +--let $assert_text= Table t4 should be included in INNODB_TABLESPACES_ENCRYPTION with MIN_KEY_VERION 1 (encrypted) and CURRENT_KEY_ID = 8 +--let $assert_cond= "[SELECT MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE NAME = \\"test/t4\\" AND CURRENT_KEY_ID = 8]" = 1 +--source include/assert.inc + +SHOW CREATE TABLE t3; +SHOW CREATE TABLE t4; + +--echo # Change innodb_default_encryption_key_id to 5, create table t5. It should from the begining be encrypted with key 5. +SET SESSION innodb_default_encryption_key_id = 5; +CREATE TABLE t5 (a varchar(255)) ENGINE=innodb; +SHOW CREATE TABLE t5; + +--let $assert_text= Table t5 should be included in INNODB_TABLESPACES_ENCRYPTION with MIN_KEY_VERION 1 (encrypted) and CURRENT_KEY_ID = 5 +--let $assert_cond= "[SELECT MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE NAME = \\"test/t5\\" AND CURRENT_KEY_ID = 5]" = 1 +--source include/assert.inc + +--echo # Turn off encryption, create table t6 (unencrypted), create table t7 with MK encryption, restart server with innodb_default_key = 6 and encryption enabled. t6 and t7 should get encrypted with key 6. + +SET GLOBAL innodb_encryption_threads= 0; +SET GLOBAL innodb_encrypt_tables = ONLINE_FROM_KEYRING_TO_UNENCRYPTED; +CREATE TABLE t6 (a varchar(255)) ENGINE=innodb; +SHOW CREATE TABLE t6; +CREATE TABLE t7 (a varchar(255)) ENCRYPTION="Y" ENGINE=innodb; +SHOW CREATE TABLE t7; + +--let $assert_text= Table t6 and t7 should NOT be included in INNODB_TABLESPACES_ENCRYPTION +--let $assert_cond= "[SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE NAME = \\"test/t6\\" OR NAME = \\"test/t7\\" ]" = 0 +--source include/assert.inc + +--let $restart_parameters=restart:--innodb-encrypt-tables=ONLINE_TO_KEYRING --innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=4 --innodb-default-encryption-key-id=6 +--source include/restart_mysqld.inc + +--let encrypted_tables_count=`select count(*) from INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES` +--echo #Wait for all tables to get encrypted (with arificial innodb_system) +--let $wait_timeout= 600 +--let $wait_condition=SELECT COUNT(*) = $encrypted_tables_count + 1 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 1 +--source include/wait_condition.inc + +--let $assert_text= Table t6 should be included in INNODB_TABLESPACES_ENCRYPTION with MIN_KEY_VERION 1 (encrypted) and CURRENT_KEY_ID = 6 +--let $assert_cond= "[SELECT MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE NAME = \\"test/t6\\" AND CURRENT_KEY_ID = 6]" = 1 +--source include/assert.inc +--let $assert_text= Table t7 should be included in INNODB_TABLESPACES_ENCRYPTION with MIN_KEY_VERION 1 (encrypted) and CURRENT_KEY_ID = 6 +--let $assert_cond= "[SELECT MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE NAME = \\"test/t7\\" AND CURRENT_KEY_ID = 6]" = 1 + +--echo # Both statements should produce warnings +CREATE TABLE t8 (a varchar(255)) ENCRYPTION="Y" ENCRYPTION_KEY_ID=5 ENGINE=innodb; +CREATE TABLE t9 (a varchar(255)) ENCRYPTION="N" ENCRYPTION_KEY_ID=5 ENGINE=innodb; + +--source include/assert.inc + +drop table t1,t2,t3,t4,t5,t6,t7,t8,t9; diff --git a/mysql-test/suite/encryption/t/innodb_encryption-master.opt b/mysql-test/suite/encryption/t/innodb_encryption-master.opt new file mode 100644 index 000000000000..3fba81fc39ea --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_encryption-master.opt @@ -0,0 +1,6 @@ +$KEYRING_PLUGIN_OPT +--early-plugin-load="keyring_file=$KEYRING_PLUGIN" +--loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring +--innodb-encrypt-tables +--innodb-encryption-rotate-key-age=15 +--innodb-encryption-threads=4 diff --git a/mysql-test/suite/encryption/t/innodb_encryption-page-compression-master.opt b/mysql-test/suite/encryption/t/innodb_encryption-page-compression-master.opt new file mode 100644 index 000000000000..d466209803a6 --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_encryption-page-compression-master.opt @@ -0,0 +1,6 @@ +$KEYRING_PLUGIN_OPT +--early-plugin-load="keyring_file=$KEYRING_PLUGIN" +--loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring +--innodb-encrypt-tables=ONLINE_TO_KEYRING +--innodb-encryption-rotate-key-age=15 +--innodb-encryption-threads=4 diff --git a/mysql-test/suite/encryption/t/innodb_encryption-page-compression.test b/mysql-test/suite/encryption/t/innodb_encryption-page-compression.test new file mode 100644 index 000000000000..14e9c50c955b --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_encryption-page-compression.test @@ -0,0 +1,173 @@ +--skip # Test unstable on Jenkins +-- source include/have_innodb.inc +#-- source include/have_example_key_management_plugin.inc +-- source include/not_embedded.inc + +#call mtr.add_suppression(".*"); +--disable_query_log +let $innodb_encrypt_tables_orig = `SELECT @@innodb_encrypt_tables`; +let $innodb_encryption_threads_orig = `SELECT @@innodb_encryption_threads`; +--enable_query_log + +--disable_warnings +SET GLOBAL innodb_encryption_threads = 4; + +# zlib +#set global innodb_compression_algorithm = 1; + +create table innodb_normal (c1 int, b char(20)) engine=innodb; +create table innodb_page_compressed1 (c1 int, b char(20)) engine=innodb COMPRESSION="zlib"; +show create table innodb_page_compressed1; +create table innodb_page_compressed2 (c1 int, b char(20)) engine=innodb COMPRESSION="zlib"; +show create table innodb_page_compressed2; +create table innodb_page_compressed3 (c1 int, b char(20)) engine=innodb COMPRESSION="zlib"; +show create table innodb_page_compressed3; +create table innodb_page_compressed4 (c1 int, b char(20)) engine=innodb COMPRESSION="zlib"; +show create table innodb_page_compressed4; +create table innodb_page_compressed5 (c1 int, b char(20)) engine=innodb COMPRESSION="zlib"; +show create table innodb_page_compressed5; +create table innodb_page_compressed6 (c1 int, b char(20)) engine=innodb COMPRESSION="zlib"; +show create table innodb_page_compressed6; +create table innodb_page_compressed7 (c1 int, b char(20)) engine=innodb COMPRESSION="zlib"; +show create table innodb_page_compressed7; +create table innodb_page_compressed8 (c1 int, b char(20)) engine=innodb COMPRESSION="zlib"; +show create table innodb_page_compressed8; +create table innodb_page_compressed9 (c1 int, b char(20)) engine=innodb COMPRESSION="zlib"; +show create table innodb_page_compressed9; + +--enable_warnings +#create table innodb_normal (c1 int, b char(20)) engine=innodb; +#show warnings; +#create table innodb_page_compressed1 (c1 int, b char(20)) engine=innodb; +#show warnings; +#show create table innodb_page_compressed1; +#create table innodb_page_compressed2 (c1 int, b char(20)) engine=innodb; +#show warnings; +#show create table innodb_page_compressed2; +#create table innodb_page_compressed3 (c1 int, b char(20)) engine=innodb; +#show warnings; +#show create table innodb_page_compressed3; +#create table innodb_page_compressed4 (c1 int, b char(20)) engine=innodb; +#show warnings; +#show create table innodb_page_compressed4; +#create table innodb_page_compressed5 (c1 int, b char(20)) engine=innodb; +#show warnings; +#show create table innodb_page_compressed5; +#create table innodb_page_compressed6 (c1 int, b char(20)) engine=innodb; +#show warnings; +#show create table innodb_page_compressed6; +#create table innodb_page_compressed7 (c1 int, b char(20)) engine=innodb; +#show warnings; +#show create table innodb_page_compressed7; +#create table innodb_page_compressed8 (c1 int, b char(20)) engine=innodb; +#show warnings; +#show create table innodb_page_compressed8; +#create table innodb_page_compressed9 (c1 int, b char(20)) engine=innodb; +#show warnings; +#show create table innodb_page_compressed9; + + + +delimiter //; +create procedure innodb_insert_proc (repeat_count int) +begin + declare current_num int; + set current_num = 0; + while current_num < repeat_count do + insert into innodb_normal values(current_num,'testing..'); + set current_num = current_num + 1; + end while; +end// +delimiter ;// +commit; + +begin; +call innodb_insert_proc(2000); +insert into innodb_page_compressed1 select * from innodb_normal; +insert into innodb_page_compressed2 select * from innodb_normal; +insert into innodb_page_compressed3 select * from innodb_normal; +insert into innodb_page_compressed4 select * from innodb_normal; +insert into innodb_page_compressed5 select * from innodb_normal; +insert into innodb_page_compressed6 select * from innodb_normal; +insert into innodb_page_compressed7 select * from innodb_normal; +insert into innodb_page_compressed8 select * from innodb_normal; +insert into innodb_page_compressed9 select * from innodb_normal; +commit; + +select count(*) from innodb_page_compressed1 where c1 < 500000; +select count(*) from innodb_page_compressed2 where c1 < 500000; +select count(*) from innodb_page_compressed3 where c1 < 500000; +select count(*) from innodb_page_compressed4 where c1 < 500000; +select count(*) from innodb_page_compressed5 where c1 < 500000; +select count(*) from innodb_page_compressed6 where c1 < 500000; +select count(*) from innodb_page_compressed7 where c1 < 500000; +select count(*) from innodb_page_compressed8 where c1 < 500000; +select count(*) from innodb_page_compressed9 where c1 < 500000; + +flush tables innodb_page_compressed1, innodb_page_compressed2, +innodb_page_compressed3, innodb_page_compressed4, +innodb_page_compressed5, innodb_page_compressed6, +innodb_page_compressed7, innodb_page_compressed8, +innodb_page_compressed9 for export; + +unlock tables; + +--echo # Wait until dirty pages are compressed and encrypted +#let $wait_condition= select variable_value > 0 from information_schema.global_status where variable_name = 'INNODB_NUM_PAGES_PAGE_COMPRESSED'; +#--source include/wait_condition.inc +let $wait_condition= select variable_value > 0 from information_schema.global_status where variable_name = 'INNODB_NUM_PAGES_ENCRYPTED'; +--source include/wait_condition.inc + +SELECT variable_value > 0 FROM information_schema.global_status WHERE variable_name = 'innodb_num_pages_encrypted'; +#SELECT variable_value > 0 FROM information_schema.global_status WHERE variable_name = 'innodb_num_pages_page_compressed'; + +--source include/restart_mysqld.inc + +SET GLOBAL innodb_encryption_threads = 4; +SET GLOBAL innodb_encrypt_tables = ONLINE_FROM_KEYRING_TO_UNENCRYPTED; + +update innodb_page_compressed1 set c1 = c1 + 1; +update innodb_page_compressed2 set c1 = c1 + 1; +update innodb_page_compressed3 set c1 = c1 + 1; +update innodb_page_compressed4 set c1 = c1 + 1; +update innodb_page_compressed5 set c1 = c1 + 1; +update innodb_page_compressed6 set c1 = c1 + 1; +update innodb_page_compressed7 set c1 = c1 + 1; +update innodb_page_compressed8 set c1 = c1 + 1; +update innodb_page_compressed9 set c1 = c1 + 1; + +flush tables innodb_page_compressed1, innodb_page_compressed2, +innodb_page_compressed3, innodb_page_compressed4, +innodb_page_compressed5, innodb_page_compressed6, +innodb_page_compressed7, innodb_page_compressed8, +innodb_page_compressed9 for export; + +unlock tables; + +--echo # Wait until dirty pages are compressed and encrypted 2 +#let $wait_condition= select variable_value > 0 from information_schema.global_status where variable_name = 'INNODB_NUM_PAGES_PAGE_COMPRESSED'; +#--source include/wait_condition.inc +let $wait_condition= select variable_value > 0 from information_schema.global_status where variable_name = 'INNODB_NUM_PAGES_DECRYPTED'; +--source include/wait_condition.inc + +SELECT variable_value > 0 FROM information_schema.global_status WHERE variable_name = 'innodb_num_pages_decrypted'; +#SELECT variable_value > 0 FROM information_schema.global_status WHERE variable_name = 'innodb_num_pages_page_compressed'; +#SELECT variable_value > 0 FROM information_schema.global_status WHERE variable_name = 'innodb_num_pages_page_decompressed'; + +drop procedure innodb_insert_proc; +drop table innodb_normal; +drop table innodb_page_compressed1; +drop table innodb_page_compressed2; +drop table innodb_page_compressed3; +drop table innodb_page_compressed4; +drop table innodb_page_compressed5; +drop table innodb_page_compressed6; +drop table innodb_page_compressed7; +drop table innodb_page_compressed8; +drop table innodb_page_compressed9; + +# reset system +--disable_query_log +EVAL SET GLOBAL innodb_encrypt_tables = $innodb_encrypt_tables_orig; +EVAL SET GLOBAL innodb_encryption_threads = $innodb_encryption_threads_orig; +--enable_query_log diff --git a/mysql-test/suite/encryption/t/innodb_encryption.opt b/mysql-test/suite/encryption/t/innodb_encryption.opt new file mode 100644 index 000000000000..0f3634acf1cd --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_encryption.opt @@ -0,0 +1,8 @@ +--aria-encrypt-tables +--encrypt-tmp-disk-tables +--innodb-encrypt-tables +--innodb-encrypt-log +--innodb-encryption-rotate-key-age=15 +--innodb-encryption-threads=4 +--innodb-tablespaces-encryption + diff --git a/mysql-test/suite/encryption/t/innodb_encryption.test b/mysql-test/suite/encryption/t/innodb_encryption.test new file mode 100644 index 000000000000..aad5730371ec --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_encryption.test @@ -0,0 +1,87 @@ +# +# +# +-- source include/have_innodb.inc +#-- source include/have_example_key_management_plugin.inc +#-- source include/innodb_undo_tablespaces.inc # TODO:Robert: to sa kombinacje undo_tablespaces w MariaDB + +# embedded does not support restart +-- source include/not_embedded.inc + +SET @start_global_value = @@global.innodb_encryption_threads; + +SHOW VARIABLES LIKE 'innodb_encrypt%'; + +SET GLOBAL innodb_encrypt_tables = ONLINE_TO_KEYRING; + +--let $tables_count= `select count(*) + 1 from information_schema.tables where engine = 'InnoDB' and table_schema <> 'information_schema'` + +--echo # Wait max 10 min for key encryption threads to encrypt all spaces +--let $wait_timeout= 600 +--let $wait_condition=SELECT COUNT(*) = $tables_count FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 1; +--source include/wait_condition.inc + +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; + +--echo # Success! + +--echo # Now turn off encryption and wait for threads to decrypt everything +SET GLOBAL innodb_encrypt_tables = ONLINE_FROM_KEYRING_TO_UNENCRYPTED; + +--echo # Wait max 10 min for key encryption threads to decrypt all spaces +--let $wait_timeout= 600 +--let $wait_condition=SELECT COUNT(*) = $tables_count FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; +--source include/wait_condition.inc + +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; + +--echo # Success! + +--echo # Shutdown innodb_encryption_threads +SET GLOBAL innodb_encryption_threads=0; + +--echo # Turn on encryption +--echo # since threads are off tables should remain unencrypted +SET GLOBAL innodb_encrypt_tables = ONLINE_TO_KEYRING; + +--echo # Wait 15s to check that nothing gets encrypted +--let $wait_timeout= 15 +--let $wait_condition=SELECT COUNT(*) = $tables_count FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; +--source include/wait_condition.inc + +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; + +--echo # Success! + +--echo # Startup innodb_encryption_threads +SET GLOBAL innodb_encryption_threads=@start_global_value; + +--echo # Wait max 10 min for key encryption threads to encrypt all spaces +--let $wait_timeout= 600 +--let $wait_condition=SELECT COUNT(*) >= $tables_count FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 1; +--source include/wait_condition.inc + +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; + +--echo # Success! +--echo # Restart mysqld --innodb_encrypt_tables=0 --innodb_encryption_threads=0 + +--source include/shutdown_mysqld.inc + +#--innodb-encryption-threads=0 +#--let $restart_parameters=--innodb-encryption-threads=0 +#--let $restart_parameters=--innodb-encrypt-tables=0 +--let $restart_parameters=restart:--innodb-encryption-threads=0 --innodb-encrypt-tables=ONLINE_FROM_KEYRING_TO_UNENCRYPTED +--source include/start_mysqld.inc + +#--let $restart_parameters=--innodb_encrypt_tables=0 --innodb_encryption_threads=0 +#--source include/restart_mysqld.inc + +SHOW VARIABLES LIKE 'innodb_encrypt%'; + +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; diff --git a/mysql-test/suite/encryption/t/innodb_encryption_aborted_key_rotation-master.opt b/mysql-test/suite/encryption/t/innodb_encryption_aborted_key_rotation-master.opt new file mode 100644 index 000000000000..b5229851bb42 --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_encryption_aborted_key_rotation-master.opt @@ -0,0 +1,6 @@ +$KEYRING_PLUGIN_OPT +--early-plugin-load="keyring_file=$KEYRING_PLUGIN" +--loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring +--innodb-encryption-rotate-key-age=1 +--innodb-encryption-threads=0 +--innodb-encrypt-tables=ONLINE_TO_KEYRING diff --git a/mysql-test/suite/encryption/t/innodb_encryption_aborted_key_rotation.inc b/mysql-test/suite/encryption/t/innodb_encryption_aborted_key_rotation.inc new file mode 100644 index 000000000000..451405d49878 --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_encryption_aborted_key_rotation.inc @@ -0,0 +1,127 @@ +--source include/have_innodb.inc +--source include/have_debug.inc +--source include/have_debug_sync.inc +--source include/not_valgrind.inc +--source include/not_embedded.inc + +# This test is to check if tables get rotated correctly with new version of encryption +# key in case of server crash +# 1) Encrypt t1 with version 1 of key 0 +# 2) Rotate key 0 to version 2 +# 1) Rotate 100 pages in t1 +# 2) Shut down the sever - this will make sure the t1's pages are flushed to disk +# However it will still simulated the server crash, as only 100 pages will get rotated +# and the updated to page0 of t1 will not be done +# 3) Restart the server +# 4) Make sure t1 rotation completes + +SET GLOBAL innodb_encryption_threads=4; + +let MYSQLD_DATADIR = `SELECT @@datadir`; + +--let $id = `SELECT RAND()` +--let t1_IBD = $MYSQLD_DATADIR/test/t1.ibd + +--disable_warnings # Disabling warnings as punch hole get generate ones when compression is enabled and + # filesystem is not supporting them +eval CREATE TABLE t1 (id INT NOT NULL PRIMARY KEY, a VARCHAR(255)) ENGINE=InnoDB $t1_table_type ENCRYPTION='KEYRING'; +--enable_warnings + +delimiter //; +create procedure innodb_insert_proc (repeat_count int) +begin + declare current_num int; + set current_num = 0; + while current_num < repeat_count do + insert into t1 values (current_num,repeat('foobar',42)); + set current_num = current_num + 1; + end while; +end// +delimiter ;// +commit; + +set autocommit=0; +call innodb_insert_proc(30000); +commit; +set autocommit=1; + +--let $assert_text= Make sure t1 is encrypted +--let $assert_cond= "[SELECT FLAG & 8192 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE NAME=\\'test/t1\\']" = 8192 +--source include/assert.inc + +--echo # Wait for all tables to get encrypted +--let $tables_count= `select count(*) from information_schema.tables where engine = 'InnoDB' and table_schema <> 'information_schema'` +--let $wait_timeout= 600 +# Encrypted tables count should be equal $tables_count + 1 - because INNODB_TABLESPACES_ENCRYPTION +# contains an artificial table innodb_system +--let $wait_condition=SELECT COUNT(*) = $tables_count+1 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 1 +--source include/wait_condition.inc + +--echo # We want only first 100 pages to be rotated +SET GLOBAL debug="+d,rotate_only_first_100_pages_from_t1"; + +--let $assert_text= Make sure re-encryption will happen per every key rotation +--let $assert_cond= "[SELECT @@GLOBAL.innodb_encryption_rotate_key_age = 1]" = 1 +--source include/assert.inc + +--let $assert_text= Successful rotation of percona_innodb-0 to version 2 +--let $assert_cond= "[SELECT rotate_system_key\\(\\"percona_innodb-0\\"\\) = 1]" = 1 +--source include/assert.inc + +--echo # Table t1 should have min_key_version = 1 assigned and ROTATIONG_OR_FLUSHING=1 <= this means that only 100 pages +--echo # have been rotatted. +--let $wait_timeout= 600 +--let $wait_condition=SELECT name = 'test/t1' FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 1 AND ROTATING_OR_FLUSHING = 1 +--source include/wait_condition.inc + +--echo # Disable rotation threads +SET GLOBAL innodb_encryption_threads = 0; +--echo # Disable rotation of only first 100 pages +SET GLOBAL debug="-d,rotate_only_first_100_pages_from_t1"; + +--source include/shutdown_mysqld.inc + +--echo # Make sure that t1 is still encrypted +--let SEARCH_PATTERN=foobar +--let ABORT_ON=FOUND +--let SEARCH_FILE=$t1_IBD +--source include/search_pattern_in_file.inc + +--echo # t1 is only half rotatted, now we will check if the encryption can be completed after the restart +--let $restart_parameters=restart:--innodb-encryption-threads=4 +--source include/start_mysqld.inc + +--let $wait_timeout= 600 +--echo # All tables should get encrypted. $tables_count + 1 - because INNODB_TABLESPACES_ENCRYPTION contains artificial table +--echo # innodb_system +--let $wait_condition=SELECT COUNT(*) = $tables_count + 1 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 2 +--source include/wait_condition.inc + +SELECT * FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION; + +--echo # Make sure t1 is encrypted +--let SEARCH_PATTERN=foobar +--let ABORT_ON=FOUND +--let SEARCH_FILE=$t1_IBD +--source include/search_pattern_in_file.inc + +--let $wait_timeout= 600 +--echo # All tables should get encrypted. $tables_count + 1 - because INNODB_TABLESPACES_ENCRYPTION contains artificial table +--echo # innodb_system +--let $wait_condition=SELECT COUNT(*) = $tables_count + 1 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 2 +--source include/wait_condition.inc + +SET GLOBAL innodb_encrypt_tables=ONLINE_FROM_KEYRING_TO_UNENCRYPTED; + +--let $wait_timeout= 600 +--echo # All tables should get decrypted, apart from t1. +--let $wait_condition=SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0 +--source include/wait_condition.inc + +#Cleanup + +SET GLOBAL innodb_encryption_threads=0; +SET GLOBAL innodb_encrypt_tables=ONLINE_TO_KEYRING; + +DROP TABLE t1; +DROP PROCEDURE innodb_insert_proc; diff --git a/mysql-test/suite/encryption/t/innodb_encryption_aborted_key_rotation.test b/mysql-test/suite/encryption/t/innodb_encryption_aborted_key_rotation.test new file mode 100644 index 000000000000..52ac8814aab4 --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_encryption_aborted_key_rotation.test @@ -0,0 +1,3 @@ +# Testing basic table's type +let $t1_table_type= ; +--source innodb_encryption_aborted_key_rotation.inc diff --git a/mysql-test/suite/encryption/t/innodb_encryption_aborted_key_rotation_mk-master.opt b/mysql-test/suite/encryption/t/innodb_encryption_aborted_key_rotation_mk-master.opt new file mode 100644 index 000000000000..b5229851bb42 --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_encryption_aborted_key_rotation_mk-master.opt @@ -0,0 +1,6 @@ +$KEYRING_PLUGIN_OPT +--early-plugin-load="keyring_file=$KEYRING_PLUGIN" +--loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring +--innodb-encryption-rotate-key-age=1 +--innodb-encryption-threads=0 +--innodb-encrypt-tables=ONLINE_TO_KEYRING diff --git a/mysql-test/suite/encryption/t/innodb_encryption_aborted_key_rotation_mk.test b/mysql-test/suite/encryption/t/innodb_encryption_aborted_key_rotation_mk.test new file mode 100644 index 000000000000..c6388bb999fe --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_encryption_aborted_key_rotation_mk.test @@ -0,0 +1,3 @@ +# Testing basic table's type +let $t1_table_type=ENCRYPTION='Y'; +--source innodb_encryption_aborted_key_rotation.inc diff --git a/mysql-test/suite/encryption/t/innodb_encryption_aborted_key_rotation_mk_page_compressed-master.opt b/mysql-test/suite/encryption/t/innodb_encryption_aborted_key_rotation_mk_page_compressed-master.opt new file mode 100644 index 000000000000..b5229851bb42 --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_encryption_aborted_key_rotation_mk_page_compressed-master.opt @@ -0,0 +1,6 @@ +$KEYRING_PLUGIN_OPT +--early-plugin-load="keyring_file=$KEYRING_PLUGIN" +--loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring +--innodb-encryption-rotate-key-age=1 +--innodb-encryption-threads=0 +--innodb-encrypt-tables=ONLINE_TO_KEYRING diff --git a/mysql-test/suite/encryption/t/innodb_encryption_aborted_key_rotation_mk_page_compressed.test b/mysql-test/suite/encryption/t/innodb_encryption_aborted_key_rotation_mk_page_compressed.test new file mode 100644 index 000000000000..abd150f5ec25 --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_encryption_aborted_key_rotation_mk_page_compressed.test @@ -0,0 +1,2 @@ +let $t1_table_type=ENCRYPTION='Y' COMPRESSION="zlib"; +--source innodb_encryption_aborted_key_rotation.inc diff --git a/mysql-test/suite/encryption/t/innodb_encryption_aborted_key_rotation_mk_row_compressed-master.opt b/mysql-test/suite/encryption/t/innodb_encryption_aborted_key_rotation_mk_row_compressed-master.opt new file mode 100644 index 000000000000..b5229851bb42 --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_encryption_aborted_key_rotation_mk_row_compressed-master.opt @@ -0,0 +1,6 @@ +$KEYRING_PLUGIN_OPT +--early-plugin-load="keyring_file=$KEYRING_PLUGIN" +--loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring +--innodb-encryption-rotate-key-age=1 +--innodb-encryption-threads=0 +--innodb-encrypt-tables=ONLINE_TO_KEYRING diff --git a/mysql-test/suite/encryption/t/innodb_encryption_aborted_key_rotation_mk_row_compressed.test b/mysql-test/suite/encryption/t/innodb_encryption_aborted_key_rotation_mk_row_compressed.test new file mode 100644 index 000000000000..7570c0ad2370 --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_encryption_aborted_key_rotation_mk_row_compressed.test @@ -0,0 +1,3 @@ +# Testing basic table's type +let $t1_table_type=ENCRYPTION='Y' row_format=compressed; +--source innodb_encryption_aborted_key_rotation.inc diff --git a/mysql-test/suite/encryption/t/innodb_encryption_aborted_key_rotation_page_compressed-master.opt b/mysql-test/suite/encryption/t/innodb_encryption_aborted_key_rotation_page_compressed-master.opt new file mode 100644 index 000000000000..b5229851bb42 --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_encryption_aborted_key_rotation_page_compressed-master.opt @@ -0,0 +1,6 @@ +$KEYRING_PLUGIN_OPT +--early-plugin-load="keyring_file=$KEYRING_PLUGIN" +--loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring +--innodb-encryption-rotate-key-age=1 +--innodb-encryption-threads=0 +--innodb-encrypt-tables=ONLINE_TO_KEYRING diff --git a/mysql-test/suite/encryption/t/innodb_encryption_aborted_key_rotation_page_compressed.test b/mysql-test/suite/encryption/t/innodb_encryption_aborted_key_rotation_page_compressed.test new file mode 100644 index 000000000000..4c4b5d90c05c --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_encryption_aborted_key_rotation_page_compressed.test @@ -0,0 +1,2 @@ +let $t1_table_type=COMPRESSION="zlib"; +--source innodb_encryption_aborted_key_rotation.inc diff --git a/mysql-test/suite/encryption/t/innodb_encryption_aborted_key_rotation_row_compressed-master.opt b/mysql-test/suite/encryption/t/innodb_encryption_aborted_key_rotation_row_compressed-master.opt new file mode 100644 index 000000000000..b5229851bb42 --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_encryption_aborted_key_rotation_row_compressed-master.opt @@ -0,0 +1,6 @@ +$KEYRING_PLUGIN_OPT +--early-plugin-load="keyring_file=$KEYRING_PLUGIN" +--loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring +--innodb-encryption-rotate-key-age=1 +--innodb-encryption-threads=0 +--innodb-encrypt-tables=ONLINE_TO_KEYRING diff --git a/mysql-test/suite/encryption/t/innodb_encryption_aborted_key_rotation_row_compressed.test b/mysql-test/suite/encryption/t/innodb_encryption_aborted_key_rotation_row_compressed.test new file mode 100644 index 000000000000..6674e5e8a0e0 --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_encryption_aborted_key_rotation_row_compressed.test @@ -0,0 +1,2 @@ +let $t1_table_type=row_format=compressed; +--source innodb_encryption_aborted_key_rotation.inc diff --git a/mysql-test/suite/encryption/t/innodb_encryption_aborted_rotation-master.opt b/mysql-test/suite/encryption/t/innodb_encryption_aborted_rotation-master.opt new file mode 100644 index 000000000000..33deeb931a9f --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_encryption_aborted_rotation-master.opt @@ -0,0 +1,5 @@ +$KEYRING_PLUGIN_OPT +--early-plugin-load="keyring_file=$KEYRING_PLUGIN" +--loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring +--innodb-encrypt-tables=OFF +--innodb-encryption-threads=0 diff --git a/mysql-test/suite/encryption/t/innodb_encryption_aborted_rotation.inc b/mysql-test/suite/encryption/t/innodb_encryption_aborted_rotation.inc new file mode 100644 index 000000000000..297ee6abbe3d --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_encryption_aborted_rotation.inc @@ -0,0 +1,363 @@ +--source include/have_innodb.inc +--source include/have_debug.inc +--source include/have_debug_sync.inc +--source include/not_valgrind.inc +--source include/not_embedded.inc + +# This test is to check if tables get rotated correctly in case of server crash +# 1) Rotate 100 pages in t1 +# 2) Shut down the sever - this will make sure the t1's pages are flushed to disk +# However it will still simulated the server crash, as only 100 pages will get rotated +# and the updated to page0 of t1 will not be done +# 3) Restart the server +# 4) Make sure t1 rotation completes + +--echo # First we try rotation unencrypted => encrypted + +let MYSQLD_DATADIR = `SELECT @@datadir`; + +--let $id = `SELECT RAND()` +--let t1_IBD = $MYSQLD_DATADIR/test/t1.ibd + +eval CREATE TABLE t1 (id INT NOT NULL PRIMARY KEY, a VARCHAR(255)) ENGINE=InnoDB $t1_table_type; + +delimiter //; +create procedure innodb_insert_proc (repeat_count int) +begin + declare current_num int; + set current_num = 0; + while current_num < repeat_count do + insert into t1 values (current_num,repeat('foobar',42)); + set current_num = current_num + 1; + end while; +end// +delimiter ;// +commit; + +set autocommit=0; +call innodb_insert_proc(30000); +commit; +set autocommit=1; + +# Make sure encryption is disabled +--let $assert_text= Make sure encryption is disabled +--let $assert_cond= "[SELECT @@GLOBAL.innodb_encrypt_tables]" = 0 +--source include/assert.inc + +if ($is_mk_encrypted) +{ + --let $assert_text= Make sure t1 is encrypted + --let $assert_cond= "[SELECT FLAG & 8192 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE NAME=\\'test/t1\\']" = 8192 +} +if (!$is_mk_encrypted) +{ + --let $assert_text= Make sure t1 is unencrypted + --let $assert_cond= "[SELECT FLAG & 8192 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE NAME=\\'test/t1\\']" = 0 +} +--source include/assert.inc + +--echo # We want only first 100 pages to be rotated +SET GLOBAL debug="+d,rotate_only_first_100_pages_from_t1"; + +--echo # Start rotation unnencrypted => encrypted (tables do not have crypt data stored in page 0) +SET GLOBAL innodb_encryption_threads = 4; +SET GLOBAL innodb_encrypt_tables=ON; + +--let tables_count=`select count(*) from INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES` + +--echo # Wait max 10 min for key encryption threads to encrypt all spaces +--let $wait_timeout= 600 +# All tables should get encrypted. $tables_count - because INNODB_TABLESPACES_ENCRYPTION contains artificial innodb_system +# and t1 will only have half of the pages encrypted = thus min_key_version will still be 0 +--let $wait_condition=SELECT COUNT(*) = $tables_count FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 1 +--source include/wait_condition.inc + +--echo # Table t1 should have min_key_version = 0 assigned and ROTATIONG_OR_FLUSHING=1 <= this means that only 100 pages +--echo # have been rotatted. +--let $wait_timeout= 600 +--let $wait_condition=SELECT name = 'test/t1' FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 AND ROTATING_OR_FLUSHING = 1 +--source include/wait_condition.inc + +--echo # Disable rotation threads +SET GLOBAL innodb_encryption_threads = 0; +--echo # Disable rotation of only first 100 pages +SET GLOBAL debug="-d,rotate_only_first_100_pages_from_t1"; + +--let $grep_log=`SELECT !$is_t1_compressed && !$is_mk_encrypted` + +--source include/shutdown_mysqld.inc + +--echo # Make sure that t1 still contains foobar - as it is only encrypted in half +--echo # unless originaly table was compressed or MK encrypted - then it does not +--echo # make sense to check the table as table will not contain plaintext +if ($grep_log) +{ + --let SEARCH_PATTERN=foobar + --let ABORT_ON=NOT_FOUND + --let SEARCH_FILE=$t1_IBD + --source include/search_pattern_in_file.inc +} + +--echo # t1 is only half rotatted, now we will check if the encryption can be completed after the restart +--let $restart_parameters=restart:--innodb-encrypt-tables=ON --innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=4 +--source include/start_mysqld.inc + +--let $wait_timeout= 600 +--echo # All tables should get encrypted. $tables_count + 1 - because INNODB_TABLESPACES_ENCRYPTION contains artificial table +--echo # innodb_system +--let $wait_condition=SELECT COUNT(*) = $tables_count + 1 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 1 +--source include/wait_condition.inc + +SELECT * FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION; + +--echo # Make sure t1 is encrypted +if (!$is_t1_compressed) +{ + --let SEARCH_PATTERN=foobar + --let ABORT_ON=FOUND + --let SEARCH_FILE=$t1_IBD + --source include/search_pattern_in_file.inc +} + +--echo # Now we try rotation encrypted => unencrypted +--echo # Enable rotation of only first 100 pages +SET GLOBAL debug="+d,rotate_only_first_100_pages_from_t1"; + +SET GLOBAL innodb_encrypt_tables=OFF; + +--let $wait_timeout= 600 +# All tables should get unencrypted, apart from t1. $tables_count - because INNODB_TABLESPACES_ENCRYPTION contains +# artificial innodb_system and t1 will only have half of the pages unencrypted => thus min_key_version will still be 1 +--let $wait_condition=SELECT COUNT(*) = $tables_count FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 +--source include/wait_condition.inc + +--echo # Table t1 should have min_key_version = 1 assigned and ROTATING_OR_FLUSHING=1 <= this means that only 100 pages +--echo # have been rotatted. +--let $wait_timeout= 600 +--let $wait_condition=SELECT name = 'test/t1' FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 1 AND ROTATING_OR_FLUSHING = 1 +--source include/wait_condition.inc + +--echo # Disable rotation threads +SET GLOBAL innodb_encryption_threads = 0; +--echo # Disable rotation of only first 100 pages +SET GLOBAL debug="-d,rotate_only_first_100_pages_from_t1"; + +--source include/shutdown_mysqld.inc + +--echo # Make sure that t1 contains foobar - as it is only decrypted in half +if (!$is_t1_compressed) +{ + --let SEARCH_PATTERN=foobar + --let ABORT_ON=NOT_FOUND + --let SEARCH_FILE=$t1_IBD + --source include/search_pattern_in_file.inc +} + +--echo # t1 is only half rotatted, now we will check if the decryption can be completed after the restart +--let $restart_parameters=restart:--innodb-encrypt-tables=OFF --innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=4 +--source include/start_mysqld.inc + +--let $wait_timeout= 600 +# All tables should get decrypted. $tables_count + 1 - because INNODB_TABLESPACES_ENCRYPTION contains artificial table +# innodb_system +--let $wait_condition=SELECT COUNT(*) = $tables_count + 1 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 +--source include/wait_condition.inc + +--echo # Make sure that t1 contains foobar - as it is decrypted +if (!$is_t1_compressed) +{ + --let SEARCH_PATTERN=foobar + --let ABORT_ON=NOT_FOUND + --let SEARCH_FILE=$t1_IBD + --source include/search_pattern_in_file.inc +} + +--echo # Now we try rotation => unencrypted => encrypted (now tables have crypt data in page 0) +--echo # Enable rotation of only first 100 pages +SET GLOBAL debug="+d,rotate_only_first_100_pages_from_t1"; + +SET GLOBAL innodb_encrypt_tables=ON; + +--let $wait_timeout= 600 +# All tables should get unencrypted, apart from t1. $tables_count - because INNODB_TABLESPACES_ENCRYPTION contains +# artificial innodb_system and t1 will only have half of the pages encrypted => thus min_key_version will still be 0 +--let $wait_condition=SELECT COUNT(*) = $tables_count FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 1 +--source include/wait_condition.inc + +--echo # Table t1 should have min_key_version = 0 assigned and ROTATING_OR_FLUSHING=1 <= this means that only 100 pages +--echo # have been rotatted. +--let $wait_timeout= 600 +--let $wait_condition=SELECT name = 'test/t1' FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 AND ROTATING_OR_FLUSHING = 1 +--source include/wait_condition.inc + +--echo # Disable rotation threads +SET GLOBAL innodb_encryption_threads = 0; +--echo # Disable rotation of only first 100 pages +SET GLOBAL debug="-d,rotate_only_first_100_pages_from_t1"; + +--source include/shutdown_mysqld.inc + +--echo # Make sure that t1 contains foobar - as it is only encrypted in half + +if (!$is_t1_compressed) +{ + --let SEARCH_PATTERN=foobar + --let ABORT_ON=NOT_FOUND + --let SEARCH_FILE=$t1_IBD + --source include/search_pattern_in_file.inc +} + +--echo # t1 is only half rotatted, now we will check if the decryption can be completed after the restart +--let $restart_parameters=restart:--innodb-encrypt-tables=ON --innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=4 +--source include/start_mysqld.inc + +--let $wait_timeout= 600 +# All tables should get encrypted. $tables_count + 1 - because INNODB_TABLESPACES_ENCRYPTION contains artificial table +# innodb_system +--let $wait_condition=SELECT COUNT(*) = $tables_count + 1 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 1 +--source include/wait_condition.inc + +--echo # Make sure that t1 does not contain foobar - as it is encrypted +if (!$is_t1_compressed) +{ + --let SEARCH_PATTERN=foobar + --let ABORT_ON=FOUND + --let SEARCH_FILE=$t1_IBD + --source include/search_pattern_in_file.inc +} + +--echo # After table has been rotated there is update to DD and after that +--echo # there is update to page0 of the table. When a crash occures after DD update we will go out of sync with table's +--echo # flags stored in page 0 of the table. Server discover that and puts a warning into the error log. page0 should get +--echo # updated correctly after the restart. Server will discover that the rotation of the table has not been completed +--echo # and will update page 0. +--echo # In order to check this behavior we will first rotate encrypted=>unencrypted and we will make server commit suicide +--echo # after DD update and before page 0 update. + + +SET GLOBAL debug="+d,crash_on_t1_flush_after_dd_update"; + +--source include/expect_crash.inc +SET GLOBAL innodb_encrypt_tables=OFF; +--source include/wait_until_disconnected.inc + +# The server crashed after but t1's pages have been flushed to disk by encryption thread +--echo # Make sure that t1 has been decrypted +if (!$is_t1_compressed) +{ + --let SEARCH_PATTERN=foobar + --let ABORT_ON=NOT_FOUND + --let SEARCH_FILE=$t1_IBD + --source include/search_pattern_in_file.inc +} + +--echo # First restart the server after crash so any redo logs for t1 were proceed. If there are any logs available +--echo # t1 will be opened without validating idb file to DD. +--let $restart_parameters=restart:--innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=0 +--source include/start_mysqld.inc + +SET GLOBAL debug="-d,crash_on_t1_flush_after_dd_update"; + +--echo # Now restart the server and select from t1. Validation of t1's flags should proceed. +--echo # It should be discovered that there is mismatch of flags in t1. However it shoud be possible to use +--echo # the table. There should be a warning message in the error log file. + +--let $error_log=$MYSQLTEST_VARDIR/tmp/my_restart.err + +--let $restart_parameters=restart:--innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=0 --log-error=$error_log +--source include/restart_mysqld.inc + +SELECT COUNT(1) FROM t1; + +--source include/shutdown_mysqld.inc + +--let ABORT_ON=NOT_FOUND +--let SEARCH_FILE=$error_log +--let SEARCH_PATTERN=Table encryption flag is OFF in the data dictionary but the encryption flag in file \.\/test\/t1\.ibd is ON\. This indicates that the rotation of the table was interrupted before space\'s flags were updated\. Please have encryption_thread variable \(innodb-encryption-threads\) set to value > 0\. So the encryption could finish up the rotation\. +--source include/search_pattern_in_file.inc + +--remove_file $error_log + +--echo # Restart and finish up the rotation +--let $restart_parameters=restart:--innodb-encrypt-tables=OFF --innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=4 +--source include/start_mysqld.inc + +--let $wait_timeout= 600 +# All tables should get unencrypted +--let $wait_condition=SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0 +--source include/wait_condition.inc + +# Restart and make sure that warning is no longer available in error log +--let $restart_parameters=restart:--innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=0 --log-error=$error_log +--source include/restart_mysqld.inc + +SELECT COUNT(1) FROM t1; + +--source include/shutdown_mysqld.inc + +--let ABORT_ON=FOUND +--let SEARCH_FILE=$error_log +--let SEARCH_PATTERN=Table encryption flag is OFF in the data dictionary but the encryption flag in file \.\/test\/t1\.ibd is ON\. This indicates that the rotation of the table was interrupted before space\'s flags were updated\. Please have encryption_thread variable \(innodb-encryption-threads\) set to value > 0\. So the encryption could finish up the rotation\. +--source include/search_pattern_in_file.inc + +--echo # Now we need to test the rotation unencrypted=>encrypted, when we get a crash after all pages +--echo # got rotated and DD was updated but before updating page 0 + +--let $restart_parameters=restart:--innodb-encrypt-tables=ON --innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=0 +--source include/start_mysqld.inc + +SET GLOBAL debug="+d,crash_on_t1_flush_after_dd_update"; + +--source include/expect_crash.inc +SET GLOBAL innodb_encryption_threads=4; +--source include/wait_until_disconnected.inc + +--echo # First restart the server after crash so any redo logs for t1 were proceed. If there are any logs available +--echo # t1 will be opened without validating idb file to DD. +--let $restart_parameters=restart:--innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=0 +--source include/start_mysqld.inc + +SET GLOBAL debug="-d,crash_on_t1_flush_after_dd_update"; + +--source include/shutdown_mysqld.inc + +--echo # Make sure that t1 has been encrypted +if (!$is_t1_compressed) +{ + --let SEARCH_PATTERN=foobar + --let ABORT_ON=FOUND + --let SEARCH_FILE=$t1_IBD + --source include/search_pattern_in_file.inc +} + +--echo # Now start the server and select from t1. Validation of t1's flags should proceed. +--echo # It should be discovered that there is mismatch of flags in t1. However it shoud be possible to use +--echo # the table. There should be a warning message in the error log file. + +--remove_file $error_log + +--let $restart_parameters=restart:--innodb-encryption-threads=0 --log-error=$error_log --loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring --early-plugin-load="keyring_file=$KEYRING_PLUGIN" +--source include/start_mysqld.inc + +SELECT COUNT(1) FROM t1; + +--source include/shutdown_mysqld.inc + +--let ABORT_ON=NOT_FOUND +--let SEARCH_FILE=$error_log +--let SEARCH_PATTERN=Table encryption flag is ON in the data dictionary but the encryption flag in file \.\/test\/t1\.ibd is OFF\. This indicates that the rotation of the table was interrupted before space\'s flags were updated\. Please have encryption_thread variable \(innodb-encryption-threads\) set to value > 0\. So the encryption could finish up the rotation\. +--source include/search_pattern_in_file.inc + +--remove_file $error_log + +--echo # Restart and finish up the rotation +--let $restart_parameters=restart:--innodb-encrypt-tables=ON --innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=4 +--source include/start_mysqld.inc + +--let $wait_timeout= 600 +# All tables should get encrypted +--let $wait_condition=SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 +--source include/wait_condition.inc + +DROP TABLE t1; +DROP PROCEDURE innodb_insert_proc; diff --git a/mysql-test/suite/encryption/t/innodb_encryption_aborted_rotation.test b/mysql-test/suite/encryption/t/innodb_encryption_aborted_rotation.test new file mode 100644 index 000000000000..88a75d6f20ab --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_encryption_aborted_rotation.test @@ -0,0 +1,6 @@ +--skip +# Testing basic table's type +let $t1_table_type= ; +let $is_t1_compressed=0; +let $is_mk_encrypted=0; +--source innodb_encryption_aborted_rotation.inc diff --git a/mysql-test/suite/encryption/t/innodb_encryption_aborted_rotation_mk-master.opt b/mysql-test/suite/encryption/t/innodb_encryption_aborted_rotation_mk-master.opt new file mode 100644 index 000000000000..33deeb931a9f --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_encryption_aborted_rotation_mk-master.opt @@ -0,0 +1,5 @@ +$KEYRING_PLUGIN_OPT +--early-plugin-load="keyring_file=$KEYRING_PLUGIN" +--loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring +--innodb-encrypt-tables=OFF +--innodb-encryption-threads=0 diff --git a/mysql-test/suite/encryption/t/innodb_encryption_aborted_rotation_mk.test b/mysql-test/suite/encryption/t/innodb_encryption_aborted_rotation_mk.test new file mode 100644 index 000000000000..2d06e168f490 --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_encryption_aborted_rotation_mk.test @@ -0,0 +1,6 @@ +--skip +# Testing basic table's type +let $t1_table_type=ENCRYPTION='Y'; +let $is_t1_compressed=0; +let $is_mk_encrypted=1; +--source innodb_encryption_aborted_rotation.inc diff --git a/mysql-test/suite/encryption/t/innodb_encryption_aborted_rotation_mk_page_compressed-master.opt b/mysql-test/suite/encryption/t/innodb_encryption_aborted_rotation_mk_page_compressed-master.opt new file mode 100644 index 000000000000..33deeb931a9f --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_encryption_aborted_rotation_mk_page_compressed-master.opt @@ -0,0 +1,5 @@ +$KEYRING_PLUGIN_OPT +--early-plugin-load="keyring_file=$KEYRING_PLUGIN" +--loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring +--innodb-encrypt-tables=OFF +--innodb-encryption-threads=0 diff --git a/mysql-test/suite/encryption/t/innodb_encryption_aborted_rotation_mk_page_compressed.test b/mysql-test/suite/encryption/t/innodb_encryption_aborted_rotation_mk_page_compressed.test new file mode 100644 index 000000000000..a9443f1d1c2a --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_encryption_aborted_rotation_mk_page_compressed.test @@ -0,0 +1,6 @@ +--skip +# Testing basic table's type +let $t1_table_type=COMPRESSION="zlib" ENCRYPTION='Y'; +let $is_t1_compressed=0; +let $is_mk_encrypted=1; +--source innodb_encryption_aborted_rotation.inc diff --git a/mysql-test/suite/encryption/t/innodb_encryption_aborted_rotation_mk_row_compressed-master.opt b/mysql-test/suite/encryption/t/innodb_encryption_aborted_rotation_mk_row_compressed-master.opt new file mode 100644 index 000000000000..33deeb931a9f --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_encryption_aborted_rotation_mk_row_compressed-master.opt @@ -0,0 +1,5 @@ +$KEYRING_PLUGIN_OPT +--early-plugin-load="keyring_file=$KEYRING_PLUGIN" +--loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring +--innodb-encrypt-tables=OFF +--innodb-encryption-threads=0 diff --git a/mysql-test/suite/encryption/t/innodb_encryption_aborted_rotation_mk_row_compressed.test b/mysql-test/suite/encryption/t/innodb_encryption_aborted_rotation_mk_row_compressed.test new file mode 100644 index 000000000000..2f0a4a43240c --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_encryption_aborted_rotation_mk_row_compressed.test @@ -0,0 +1,6 @@ +--skip +# Testing basic table's type +let $t1_table_type=row_format=compressed ENCRYPTION='Y'; +let $is_t1_compressed=0; +let $is_mk_encrypted=1; +--source innodb_encryption_aborted_rotation.inc diff --git a/mysql-test/suite/encryption/t/innodb_encryption_aborted_rotation_page_compressed-master.opt b/mysql-test/suite/encryption/t/innodb_encryption_aborted_rotation_page_compressed-master.opt new file mode 100644 index 000000000000..33deeb931a9f --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_encryption_aborted_rotation_page_compressed-master.opt @@ -0,0 +1,5 @@ +$KEYRING_PLUGIN_OPT +--early-plugin-load="keyring_file=$KEYRING_PLUGIN" +--loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring +--innodb-encrypt-tables=OFF +--innodb-encryption-threads=0 diff --git a/mysql-test/suite/encryption/t/innodb_encryption_aborted_rotation_page_compressed.test b/mysql-test/suite/encryption/t/innodb_encryption_aborted_rotation_page_compressed.test new file mode 100644 index 000000000000..c35ef7735814 --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_encryption_aborted_rotation_page_compressed.test @@ -0,0 +1,6 @@ +--skip +# Testing table with row_format=compressed +let $t1_table_type=COMPRESSION="zlib"; +let $is_t1_compressed=1; +let $is_mk_encrypted=0; +--source innodb_encryption_aborted_rotation.inc diff --git a/mysql-test/suite/encryption/t/innodb_encryption_aborted_rotation_row_compressed-master.opt b/mysql-test/suite/encryption/t/innodb_encryption_aborted_rotation_row_compressed-master.opt new file mode 100644 index 000000000000..33deeb931a9f --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_encryption_aborted_rotation_row_compressed-master.opt @@ -0,0 +1,5 @@ +$KEYRING_PLUGIN_OPT +--early-plugin-load="keyring_file=$KEYRING_PLUGIN" +--loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring +--innodb-encrypt-tables=OFF +--innodb-encryption-threads=0 diff --git a/mysql-test/suite/encryption/t/innodb_encryption_aborted_rotation_row_compressed.test b/mysql-test/suite/encryption/t/innodb_encryption_aborted_rotation_row_compressed.test new file mode 100644 index 000000000000..c99920b5f0dc --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_encryption_aborted_rotation_row_compressed.test @@ -0,0 +1,6 @@ +--skip +# Testing table with row_format=compressed +let $t1_table_type=row_format=compressed; +let $is_t1_compressed=1; +let $is_mk_encrypted=0; +--source innodb_encryption_aborted_rotation.inc diff --git a/mysql-test/suite/encryption/t/innodb_encryption_discard_import-master.opt b/mysql-test/suite/encryption/t/innodb_encryption_discard_import-master.opt new file mode 100644 index 000000000000..7a622ddf67ae --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_encryption_discard_import-master.opt @@ -0,0 +1,5 @@ +$KEYRING_PLUGIN_OPT +--early-plugin-load="keyring_file=$KEYRING_PLUGIN" +--loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring +--innodb-encrypt-tables=ONLINE_TO_KEYRING +--innodb-encryption-threads=4 diff --git a/mysql-test/suite/encryption/t/innodb_encryption_discard_import.test b/mysql-test/suite/encryption/t/innodb_encryption_discard_import.test new file mode 100644 index 000000000000..2257e7ddc0ae --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_encryption_discard_import.test @@ -0,0 +1,611 @@ +--skip +--source include/have_innodb.inc +--source include/not_valgrind.inc +--source include/not_embedded.inc + +call mtr.add_suppression("\\[Warning\\] InnoDB: Tablespace for table `[^`]+`.`[^`]+` is set as discarded\\."); +call mtr.add_suppression("\\[Warning\\] InnoDB: Page [[:digit:]]+ at offset [[:digit:]]+ looks corrupted in file"); +call mtr.add_suppression("\\[ERROR\\] InnoDB: os_file_read\\(\\) failed"); + +--let $number_of_records = 10000 +--let MYSQLD_DATADIR = `SELECT @@datadir` + +--let DB_NAME = `SELECT DATABASE()` +--let $t1_ibd = $MYSQLD_DATADIR/$DB_NAME/t1.ibd +--let $t2_ibd = $MYSQLD_DATADIR/$DB_NAME/t2.ibd +--let $t3_ibd = $MYSQLD_DATADIR/$DB_NAME/t3.ibd +--let $t4_ibd = $MYSQLD_DATADIR/$DB_NAME/t4.ibd +--let $t5_ibd = $MYSQLD_DATADIR/$DB_NAME/t5.ibd +--let $t6_ibd = $MYSQLD_DATADIR/$DB_NAME/t6.ibd +--let $t7_ibd = $MYSQLD_DATADIR/$DB_NAME/t7.ibd +--let $t8_ibd = $MYSQLD_DATADIR/$DB_NAME/t8.ibd + +CREATE TABLE t1 (id INT NOT NULL PRIMARY KEY, a VARCHAR(255)) ENGINE=InnoDB ENCRYPTION='KEYRING'; +CREATE TABLE t2 (id INT NOT NULL PRIMARY KEY, a VARCHAR(255)) ENGINE=InnoDB ENCRYPTION='Y'; +CREATE TABLE t3 (id INT NOT NULL PRIMARY KEY, a VARCHAR(255)) ENGINE=InnoDB COMPRESSION="zlib" ENCRYPTION='KEYRING'; +CREATE TABLE t4 (id INT NOT NULL PRIMARY KEY, a VARCHAR(255)) ENGINE=InnoDB COMPRESSION="zlib"; +CREATE TABLE t5 (id INT NOT NULL PRIMARY KEY, a VARCHAR(255)) ENGINE=InnoDB ROW_FORMAT=COMPRESSED ENCRYPTION='KEYRING'; +CREATE TABLE t6 (id INT NOT NULL PRIMARY KEY, a VARCHAR(255)) ENGINE=InnoDB ROW_FORMAT=COMPRESSED; +CREATE TABLE t7 (id INT NOT NULL PRIMARY KEY, a VARCHAR(255)) ENGINE=InnoDB ENCRYPTION='N'; +CREATE TABLE t8 (id INT NOT NULL PRIMARY KEY, a VARCHAR(255)) ENGINE=InnoDB; + +delimiter //; +CREATE PROCEDURE innodb_insert_proc(repeat_count INT) +BEGIN + DECLARE current_num INT; + SET current_num = 0; + WHILE current_num < repeat_count DO + INSERT INTO t1 VALUES (current_num, REPEAT('foobar', 42)); + INSERT INTO t2 VALUES (current_num, REPEAT('temp' , 42)); + INSERT INTO t3 VALUES (current_num, REPEAT('barfoo', 42)); + INSERT INTO t4 VALUES (current_num, REPEAT('secret', 42)); + INSERT INTO t5 VALUES (current_num, REPEAT('fbar' , 42)); + INSERT INTO t6 VALUES (current_num, REPEAT('barf' , 42)); + INSERT INTO t7 VALUES (current_num, REPEAT('barb' , 42)); + INSERT INTO t8 VALUES (current_num, REPEAT('baba' , 42)); + SET current_num = current_num + 1; + END WHILE; +END// +delimiter ;// +COMMIT; + +SET autocommit = 0; +eval CALL innodb_insert_proc($number_of_records); +COMMIT; +SET autocommit = 1; + +--let $tables_count = `SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES` + +--echo # Wait max 2 min for key encryption threads to encrypt all spaces +--let $wait_timeout = 120 +# All tables should get encrypted. Exactly ($tables_count) because +# INNODB_TABLESPACES_ENCRYPTION contains artificial 'innodb_system' (+1) +# table and 't7' is unencrypted (-1). +--let $wait_condition = SELECT COUNT(*) = $tables_count FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 1 +--source include/wait_condition.inc + +--let $assert_text = Make sure t7 is not encrypted +--let $assert_cond = [SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 AND NAME = "$DB_NAME/t7"] = 1 +--source include/assert.inc + +--echo # tablespaces should be now encrypted +--let ABORT_ON = FOUND +--let SEARCH_PATTERN = foobar +--let SEARCH_FILE = $t1_ibd +--source include/search_pattern_in_file.inc +--let SEARCH_PATTERN = temp +--let SEARCH_FILE = $t2_ibd +--source include/search_pattern_in_file.inc +--let SEARCH_PATTERN = barfoo +--let SEARCH_FILE = $t3_ibd +--source include/search_pattern_in_file.inc +--let SEARCH_PATTERN = secret +--let SEARCH_FILE = $t4_ibd +--source include/search_pattern_in_file.inc +--let SEARCH_PATTERN = fbar +--let SEARCH_FILE = $t5_ibd +--source include/search_pattern_in_file.inc +--let SEARCH_PATTERN = barf +--let SEARCH_FILE = $t6_ibd +--source include/search_pattern_in_file.inc +--let ABORT_ON = NOT_FOUND +--let SEARCH_PATTERN = barb +--let SEARCH_FILE = $t7_ibd +--source include/search_pattern_in_file.inc +--let ABORT_ON = FOUND +--let SEARCH_PATTERN = baba +--let SEARCH_FILE = $t8_ibd +--source include/search_pattern_in_file.inc + + +--list_files $MYSQLD_DATADIR/$DB_NAME +FLUSH TABLES t1, t2, t3, t4, t5, t6, t7, t8 FOR EXPORT; + +--perl +do "$ENV{MYSQL_TEST_DIR}/include/innodb-util.inc"; +ib_backup_tablespaces("$ENV{DB_NAME}", "t1", "t2", "t3", "t4", "t5", "t6", "t7", "t8"); +EOF +--list_files $MYSQLD_DATADIR/$DB_NAME +UNLOCK TABLES; + +ALTER TABLE t1 DISCARD TABLESPACE; +ALTER TABLE t2 DISCARD TABLESPACE; +ALTER TABLE t3 DISCARD TABLESPACE; +ALTER TABLE t4 DISCARD TABLESPACE; +ALTER TABLE t5 DISCARD TABLESPACE; +ALTER TABLE t6 DISCARD TABLESPACE; +ALTER TABLE t7 DISCARD TABLESPACE; +ALTER TABLE t8 DISCARD TABLESPACE; + +--perl +do "$ENV{MYSQL_TEST_DIR}/include/innodb-util.inc"; +ib_discard_tablespaces("$ENV{DB_NAME}", "t1", "t2", "t3", "t4", "t5", "t6", "t7", "t8"); +ib_restore_tablespaces("$ENV{DB_NAME}", "t1", "t2", "t3", "t4", "t5", "t6", "t7", "t8"); +EOF + +ALTER TABLE t1 IMPORT TABLESPACE; +--let $assert_text = Make sure t1 is readable +--let $assert_cond = [SELECT COUNT(1) FROM t1] = $number_of_records +--source include/assert.inc + +ALTER TABLE t2 IMPORT TABLESPACE; +--let $assert_text = Make sure t2 is readable +--let $assert_cond = [SELECT COUNT(1) FROM t2] = $number_of_records +--source include/assert.inc + +ALTER TABLE t3 IMPORT TABLESPACE; +--let $assert_text = Make sure t3 is readable +--let $assert_cond = [SELECT COUNT(1) FROM t3] = $number_of_records +--source include/assert.inc + +ALTER TABLE t4 IMPORT TABLESPACE; +--let $assert_text = Make sure t4 is readable +--let $assert_cond = [SELECT COUNT(1) FROM t4] = $number_of_records +--source include/assert.inc + +ALTER TABLE t5 IMPORT TABLESPACE; +--let $assert_text = Make sure t5 is readable +--let $assert_cond = [SELECT COUNT(1) FROM t5] = $number_of_records +--source include/assert.inc + +ALTER TABLE t6 IMPORT TABLESPACE; +--let $assert_text = Make sure t6 is readable +--let $assert_cond = [SELECT COUNT(1) FROM t6] = $number_of_records +--source include/assert.inc + +ALTER TABLE t7 IMPORT TABLESPACE; +--let $assert_text = Make sure t7 is readable +--let $assert_cond = [SELECT COUNT(1) FROM t7] = $number_of_records +--source include/assert.inc + +ALTER TABLE t8 IMPORT TABLESPACE; +--let $assert_text = Make sure t8 is readable +--let $assert_cond = [SELECT COUNT(1) FROM t8] = $number_of_records +--source include/assert.inc + +--echo # tablespaces should remain encrypted after import, apart from t7 +--let ABORT_ON = FOUND +--let SEARCH_PATTERN = foobar +--let SEARCH_FILE = $t1_ibd +--source include/search_pattern_in_file.inc +--let SEARCH_PATTERN = temp +--let SEARCH_FILE = $t2_ibd +--source include/search_pattern_in_file.inc +--let SEARCH_PATTERN = barfoo +--let SEARCH_FILE = $t3_ibd +--source include/search_pattern_in_file.inc +--let SEARCH_PATTERN = secret +--let SEARCH_FILE = $t4_ibd +--source include/search_pattern_in_file.inc +--let SEARCH_PATTERN = fbar +--let SEARCH_FILE = $t5_ibd +--source include/search_pattern_in_file.inc +--let SEARCH_PATTERN = barf +--let SEARCH_FILE = $t6_ibd +--source include/search_pattern_in_file.inc +--let ABORT_ON = NOT_FOUND +--let SEARCH_PATTERN = barb +--let SEARCH_FILE = $t7_ibd +--source include/search_pattern_in_file.inc +--let ABORT_ON = FOUND +--let SEARCH_PATTERN = baba +--let SEARCH_FILE = $t8_ibd +--source include/search_pattern_in_file.inc + + +ALTER TABLE t1 ENGINE InnoDB; +SHOW CREATE TABLE t1; +ALTER TABLE t2 ENGINE InnoDB; +SHOW CREATE TABLE t2; +ALTER TABLE t3 ENGINE InnoDB; +SHOW CREATE TABLE t3; +ALTER TABLE t4 ENGINE InnoDB; +SHOW CREATE TABLE t4; +ALTER TABLE t5 ENGINE InnoDB; +SHOW CREATE TABLE t5; +ALTER TABLE t6 ENGINE InnoDB; +SHOW CREATE TABLE t6; +ALTER TABLE t7 ENGINE InnoDB; +SHOW CREATE TABLE t7; +ALTER TABLE t8 ENGINE InnoDB; +SHOW CREATE TABLE t8; + +--echo # Restarting server +--source include/restart_mysqld.inc +--echo # Done restarting server + +--echo # Verify that tables are still usable +--let $assert_text = Make sure t1 is readable +--let $assert_cond = [SELECT COUNT(1) FROM t1] = $number_of_records +--source include/assert.inc +--let $assert_text = Make sure t2 is readable +--let $assert_cond = [SELECT COUNT(1) FROM t2] = $number_of_records +--source include/assert.inc +--let $assert_text = Make sure t3 is readable +--let $assert_cond = [SELECT COUNT(1) FROM t3] = $number_of_records +--source include/assert.inc +--let $assert_text = Make sure t4 is readable +--let $assert_cond = [SELECT COUNT(1) FROM t4] = $number_of_records +--source include/assert.inc +--let $assert_text = Make sure t5 is readable +--let $assert_cond = [SELECT COUNT(1) FROM t5] = $number_of_records +--source include/assert.inc +--let $assert_text = Make sure t6 is readable +--let $assert_cond = [SELECT COUNT(1) FROM t6] = $number_of_records +--source include/assert.inc +--let $assert_text = Make sure t7 is readable +--let $assert_cond = [SELECT COUNT(1) FROM t7] = $number_of_records +--source include/assert.inc +--let $assert_text = Make sure t8 is readable +--let $assert_cond = [SELECT COUNT(1) FROM t8] = $number_of_records +--source include/assert.inc + +--echo # Tablespaces should be encrypted after restart +--let ABORT_ON = FOUND +--let SEARCH_PATTERN = foobar +--let SEARCH_FILE = $t1_ibd +--source include/search_pattern_in_file.inc +--let SEARCH_PATTERN = temp +--let SEARCH_FILE = $t2_ibd +--source include/search_pattern_in_file.inc +--let SEARCH_PATTERN = barfoo +--let SEARCH_FILE = $t3_ibd +--source include/search_pattern_in_file.inc +--let SEARCH_PATTERN = secret +--let SEARCH_FILE = $t4_ibd +--source include/search_pattern_in_file.inc +--let SEARCH_PATTERN = fbar +--let SEARCH_FILE = $t5_ibd +--source include/search_pattern_in_file.inc +--let SEARCH_PATTERN = barf +--let SEARCH_FILE = $t6_ibd +--source include/search_pattern_in_file.inc +--let ABORT_ON = NOT_FOUND +--let SEARCH_PATTERN = barb +--let SEARCH_FILE = $t7_ibd +--source include/search_pattern_in_file.inc +--let ABORT_ON = FOUND +--let SEARCH_PATTERN = baba +--let SEARCH_FILE = $t8_ibd +--source include/search_pattern_in_file.inc + + +--let $assert_text = Make sure all tables, apart from t7, are encrypted +--let $assert_cond = "[SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0]" = 1 +--source include/assert.inc + +--list_files $MYSQLD_DATADIR/$DB_NAME +FLUSH TABLES t1, t2, t3, t4, t5, t6, t7, t8 FOR EXPORT; + +--perl +do "$ENV{MYSQL_TEST_DIR}/include/innodb-util.inc"; +ib_backup_tablespaces("$ENV{DB_NAME}", "t1", "t2", "t3", "t4", "t5", "t6", "t7", "t8"); +EOF +--list_files $MYSQLD_DATADIR/$DB_NAME +UNLOCK TABLES; + +ALTER TABLE t1 DISCARD TABLESPACE; +ALTER TABLE t2 DISCARD TABLESPACE; +ALTER TABLE t3 DISCARD TABLESPACE; +ALTER TABLE t4 DISCARD TABLESPACE; +ALTER TABLE t5 DISCARD TABLESPACE; +ALTER TABLE t6 DISCARD TABLESPACE; +ALTER TABLE t7 DISCARD TABLESPACE; +ALTER TABLE t8 DISCARD TABLESPACE; + +--perl +do "$ENV{MYSQL_TEST_DIR}/include/innodb-util.inc"; +ib_discard_tablespaces("$ENV{DB_NAME}", "t1", "t2", "t3", "t4", "t5", "t6", "t7", "t8"); +ib_restore_tablespaces("$ENV{DB_NAME}", "t1", "t2", "t3", "t4", "t5", "t6", "t7", "t8"); +EOF + +--echo # Disable rotation threads +SET GLOBAL innodb_encryption_threads = 0; +SET GLOBAL innodb_encrypt_tables = OFF; + +ALTER TABLE t1 IMPORT TABLESPACE; +--let $assert_text = Make sure t1 has encrypted flag set after importing +--let $assert_cond = [SELECT FLAG & 8192 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE NAME = "$DB_NAME/t1"] = 8192 +--source include/assert.inc +--let $assert_text = Make sure t1 is visible in INNODB_SYS_TABLESPACES with MIN_KEY_VERSION = 1 +--let $assert_cond = [SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 1 AND NAME = "$DB_NAME/t1"] = 1 +--source include/assert.inc +--let $assert_text = Make sure t1 is readable +--let $assert_cond = [SELECT COUNT(1) FROM t1] = $number_of_records +--source include/assert.inc + +ALTER TABLE t2 IMPORT TABLESPACE; +--let $assert_text = Make sure t2 has encrypted flag set after importing +--let $assert_cond = [SELECT FLAG & 8192 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE NAME = "$DB_NAME/t2"] = 8192 +--source include/assert.inc +--let $assert_text = Make sure t2 is visible in INNODB_SYS_TABLESPACES with MIN_KEY_VERSION = 1 +--let $assert_cond = [SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 1 AND NAME = "$DB_NAME/t2"] = 1 +--source include/assert.inc +--let $assert_text = Make sure t2 is readable +--let $assert_cond = [SELECT COUNT(1) FROM t2] = $number_of_records +--source include/assert.inc + +ALTER TABLE t3 IMPORT TABLESPACE; +--let $assert_text = Make sure t3 has encrypted flag set after importing +--let $assert_cond = [SELECT FLAG & 8192 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE NAME = "$DB_NAME/t3"] = 8192 +--source include/assert.inc +--let $assert_text = Make sure t3 is visible in INNODB_SYS_TABLESPACES with MIN_KEY_VERSION = 1 +--let $assert_cond = [SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 1 AND NAME = "$DB_NAME/t3"] = 1 +--source include/assert.inc +--let $assert_text = Make sure t3 is readable +--let $assert_cond = [SELECT COUNT(1) FROM t3] = $number_of_records +--source include/assert.inc + +ALTER TABLE t4 IMPORT TABLESPACE; +--let $assert_text = Make sure t4 has encrypted flag set after importing +--let $assert_cond = [SELECT FLAG & 8192 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE NAME = "$DB_NAME/t4"] = 8192 +--source include/assert.inc +--let $assert_text = Make sure t4 is visible in INNODB_SYS_TABLESPACES with MIN_KEY_VERSION = 1 +--let $assert_cond = [SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 1 AND NAME = "$DB_NAME/t4"] = 1 +--source include/assert.inc +--let $assert_text = Make sure t4 is readable +--let $assert_cond = [SELECT COUNT(1) FROM t4] = $number_of_records +--source include/assert.inc + +ALTER TABLE t5 IMPORT TABLESPACE; +--let $assert_text = Make sure t5 has encrypted flag set after importing +--let $assert_cond = [SELECT FLAG & 8192 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE NAME = "$DB_NAME/t5"] = 8192 +--source include/assert.inc +--let $assert_text = Make sure t5 is visible in INNODB_SYS_TABLESPACES with MIN_KEY_VERSION = 1 +--let $assert_cond = [SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 1 AND NAME = "$DB_NAME/t5"] = 1 +--source include/assert.inc +--let $assert_text = Make sure t5 is readable +--let $assert_cond = [SELECT COUNT(1) FROM t5] = $number_of_records +--source include/assert.inc + +ALTER TABLE t6 IMPORT TABLESPACE; +--let $assert_text = Make sure t6 has encrypted flag set after importing +--let $assert_cond = [SELECT FLAG & 8192 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE NAME = "$DB_NAME/t6"] = 8192 +--source include/assert.inc +--let $assert_text = Make sure t6 is visible in INNODB_SYS_TABLESPACES with MIN_KEY_VERSION = 1 +--let $assert_cond = [SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 1 AND NAME = "$DB_NAME/t6"] = 1 +--source include/assert.inc +--let $assert_text = Make sure t6 is readable +--let $assert_cond = [SELECT COUNT(1) FROM t6] = $number_of_records +--source include/assert.inc + +ALTER TABLE t7 IMPORT TABLESPACE; +--let $assert_text = Make sure t7 does not have encrypted flag set after importing +--let $assert_cond = [SELECT FLAG & 8192 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE NAME = "$DB_NAME/t7"] = 0 +--source include/assert.inc +--let $assert_text = Make sure t7 is visible in INNODB_SYS_TABLESPACES with MIN_KEY_VERSION = 0 (i.e. unencrypted) +--let $assert_cond = [SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 AND NAME = "$DB_NAME/t7"] = 1 +--source include/assert.inc +--let $assert_text = Make sure t7 is readable +--let $assert_cond = [SELECT COUNT(1) FROM t7] = $number_of_records +--source include/assert.inc + +ALTER TABLE t8 IMPORT TABLESPACE; +--let $assert_text = Make sure t8 has encrypted flag set after importing +--let $assert_cond = [SELECT FLAG & 8192 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE NAME = "$DB_NAME/t8"] = 8192 +--source include/assert.inc +--let $assert_text = Make sure t8 is visible in INNODB_SYS_TABLESPACES with MIN_KEY_VERSION = 1 +--let $assert_cond = [SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 1 AND NAME = "$DB_NAME/t8"] = 1 +--source include/assert.inc +--let $assert_text = Make sure t8 is readable +--let $assert_cond = [SELECT COUNT(1) FROM t8] = $number_of_records +--source include/assert.inc + +--echo # tablespaces should be encrypted, apart from t7 +--let ABORT_ON = FOUND +--let SEARCH_PATTERN = foobar +--let SEARCH_FILE = $t1_ibd +--source include/search_pattern_in_file.inc +--let SEARCH_PATTERN = temp +--let SEARCH_FILE = $t2_ibd +--source include/search_pattern_in_file.inc +--let SEARCH_PATTERN = barfoo +--let SEARCH_FILE = $t3_ibd +--source include/search_pattern_in_file.inc +--let SEARCH_PATTERN = secret +--let SEARCH_FILE = $t4_ibd +--source include/search_pattern_in_file.inc +--let SEARCH_PATTERN = fbar +--let SEARCH_FILE = $t5_ibd +--source include/search_pattern_in_file.inc +--let SEARCH_PATTERN = barf +--let SEARCH_FILE = $t6_ibd +--source include/search_pattern_in_file.inc +--let ABORT_ON = NOT_FOUND +--let SEARCH_PATTERN = barb +--let SEARCH_FILE = $t7_ibd +--source include/search_pattern_in_file.inc +--let ABORT_ON = FOUND +--let SEARCH_PATTERN = baba +--let SEARCH_FILE = $t8_ibd +--source include/search_pattern_in_file.inc + +SET GLOBAL innodb_encryption_threads = 4; + +--echo # Wait max 2 min for key encryption threads to decrypt all spaces, apart from t1, t3 and t5 +--let $wait_timeout = 120 +--let $wait_condition = SELECT COUNT(*) = 3 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0 +--source include/wait_condition.inc + +--let $assert_text = Make sure t1 has encrypted flag set +--let $assert_cond = [SELECT FLAG & 8192 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE NAME = "$DB_NAME/t1"] = 8192 +--source include/assert.inc +--let $assert_text = Make sure t1 is visible in INNODB_SYS_TABLESPACES with MIN_KEY_VERSION = 1 +--let $assert_cond = [SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 1 AND NAME = "$DB_NAME/t1"] = 1 +--source include/assert.inc +--let $assert_text = Make sure t1 is readable +--let $assert_cond = [SELECT COUNT(1) FROM t1] = $number_of_records +--source include/assert.inc + +--let $assert_text = Make sure t2 does not have encrypted flag set +--let $assert_cond = [SELECT FLAG & 8192 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE NAME = "$DB_NAME/t2"] = 0 +--source include/assert.inc +--let $assert_text = Make sure t2 is visible in INNODB_SYS_TABLESPACES with MIN_KEY_VERSION = 0 +--let $assert_cond = [SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 AND NAME = "$DB_NAME/t2"] = 1 +--source include/assert.inc +--let $assert_text = Make sure t2 is readable +--let $assert_cond = [SELECT COUNT(1) FROM t2] = $number_of_records +--source include/assert.inc + +--let $assert_text = Make sure t3 has encrypted flag set +--let $assert_cond = [SELECT FLAG & 8192 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE NAME = "$DB_NAME/t3"] = 8192 +--source include/assert.inc +--let $assert_text = Make sure t3 is visible in INNODB_SYS_TABLESPACES with MIN_KEY_VERSION = 1 +--let $assert_cond = [SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 1 AND NAME = "$DB_NAME/t3"] = 1 +--source include/assert.inc +--let $assert_text = Make sure t3 is readable +--let $assert_cond = [SELECT COUNT(1) FROM t3] = $number_of_records +--source include/assert.inc + +--let $assert_text = Make sure t4 does not have encrypted flag set +--let $assert_cond = [SELECT FLAG & 8192 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE NAME = "$DB_NAME/t4"] = 0 +--source include/assert.inc +--let $assert_text = Make sure t4 is visible in INNODB_SYS_TABLESPACES with MIN_KEY_VERSION = 0 +--let $assert_cond = [SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 AND NAME = "$DB_NAME/t4"] = 1 +--source include/assert.inc +--let $assert_text = Make sure t4 is readable +--let $assert_cond = [SELECT COUNT(1) FROM t4] = $number_of_records +--source include/assert.inc + +--let $assert_text = Make sure t5 has encrypted flag set +--let $assert_cond = [SELECT FLAG & 8192 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE NAME = "$DB_NAME/t5"] = 8192 +--source include/assert.inc +--let $assert_text = Make sure t5 is visible in INNODB_SYS_TABLESPACES with MIN_KEY_VERSION = 1 +--let $assert_cond = [SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 1 AND NAME = "$DB_NAME/t5"] = 1 +--source include/assert.inc +--let $assert_text = Make sure t5 is readable +--let $assert_cond = [SELECT COUNT(1) FROM t5] = $number_of_records +--source include/assert.inc + +--let $assert_text = Make sure t6 does not have encrypted flag set +--let $assert_cond = [SELECT FLAG & 8192 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE NAME = "$DB_NAME/t6"] = 0 +--source include/assert.inc +--let $assert_text = Make sure t6 is visible in INNODB_SYS_TABLESPACES with MIN_KEY_VERSION = 0 +--let $assert_cond = [SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 AND NAME = "$DB_NAME/t6"] = 1 +--source include/assert.inc +--let $assert_text = Make sure t6 is readable +--let $assert_cond = [SELECT COUNT(1) FROM t6] = $number_of_records +--source include/assert.inc + +--let $assert_text = Make sure t7 does not have encrypted flag set +--let $assert_cond = [SELECT FLAG & 8192 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE NAME = "$DB_NAME/t7"] = 0 +--source include/assert.inc +--let $assert_text = Make sure t7 is visible in INNODB_SYS_TABLESPACES with MIN_KEY_VERSION = 0 (i.e. unencrypted) +--let $assert_cond = [SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 AND NAME = "$DB_NAME/t7"] = 1 +--source include/assert.inc +--let $assert_text = Make sure t7 is readable +--let $assert_cond = [SELECT COUNT(1) FROM t7] = $number_of_records +--source include/assert.inc + +--let $assert_text = Make sure t8 does not have encrypted flag set +--let $assert_cond = [SELECT FLAG & 8192 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE NAME = "$DB_NAME/t8"] = 0 +--source include/assert.inc +--let $assert_text = Make sure t8 is visible in INNODB_SYS_TABLESPACES with MIN_KEY_VERSION = 0 +--let $assert_cond = [SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 AND NAME = "$DB_NAME/t8"] = 1 +--source include/assert.inc +--let $assert_text = Make sure t8 is readable +--let $assert_cond = [SELECT COUNT(1) FROM t8] = $number_of_records +--source include/assert.inc + +--echo # tablespaces should not be encrypted, apart from t1,t3 and t5 +--let ABORT_ON = FOUND +--let SEARCH_PATTERN = foobar +--let SEARCH_FILE = $t1_ibd +--source include/search_pattern_in_file.inc +--let ABORT_ON = NOT_FOUND +--let SEARCH_PATTERN = temp +--let SEARCH_FILE = $t2_ibd +--source include/search_pattern_in_file.inc +--let ABORT_ON = FOUND +--let SEARCH_PATTERN = barfoo +--let SEARCH_FILE = $t3_ibd +--source include/search_pattern_in_file.inc +--let ABORT_ON = NOT_FOUND +--let SEARCH_PATTERN = secret +--let SEARCH_FILE = $t4_ibd +--source include/search_pattern_in_file.inc +--let ABORT_ON = FOUND +--let SEARCH_PATTERN = fbar +--let SEARCH_FILE = $t5_ibd +--source include/search_pattern_in_file.inc +--let ABORT_ON = NOT_FOUND +--let SEARCH_PATTERN = barb +# t6 is not encrypted, but unreadable as it is compressed +--let SEARCH_FILE = $t7_ibd +--source include/search_pattern_in_file.inc +--let ABORT_ON = NOT_FOUND +--let SEARCH_PATTERN = baba +--let SEARCH_FILE = $t8_ibd +--source include/search_pattern_in_file.inc + +--echo # Now let's backup keyring file, change encryption key id of encrypt-able tables (all but t7) +--echo # export and dicard them. Next restart the server with backuped keyring file and make sure that +--echo # server starts, but tables cannot be imported gracefully + +SET GLOBAL innodb_encrypt_tables = ONLINE_TO_KEYRING; + +--echo # Wait max 2 min for key encryption threads to encrypt all spaces +--let $wait_timeout = 120 +# All tables should get encrypted. Exactly ($tables_count) because +# INNODB_TABLESPACES_ENCRYPTION contains artificial 'innodb_system' (+1) +# table and 't7' is unencrypted (-1). +--let $wait_condition = SELECT COUNT(*) = $tables_count FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 1 +--source include/wait_condition.inc + +--copy_file $MYSQLTEST_VARDIR/tmp/mysecret_keyring $MYSQLTEST_VARDIR/tmp/mysecret_keyring_backup + +ALTER TABLE t1 encryption_key_id = 5; +ALTER TABLE t2 encryption_key_id = 5; +ALTER TABLE t3 encryption_key_id = 5; +ALTER TABLE t4 encryption_key_id = 5; +ALTER TABLE t5 encryption_key_id = 5; +ALTER TABLE t6 encryption_key_id = 5; +ALTER TABLE t8 encryption_key_id = 5; + +--list_files $MYSQLD_DATADIR/$DB_NAME +FLUSH TABLES t1, t2, t3, t4, t5, t6, t8 FOR EXPORT; + +--perl +do "$ENV{MYSQL_TEST_DIR}/include/innodb-util.inc"; +ib_backup_tablespaces("$ENV{DB_NAME}", "t1", "t2", "t3", "t4", "t5", "t6", "t8"); +EOF +--list_files $MYSQLD_DATADIR/$DB_NAME +UNLOCK TABLES; + +ALTER TABLE t1 DISCARD TABLESPACE; +ALTER TABLE t2 DISCARD TABLESPACE; +ALTER TABLE t3 DISCARD TABLESPACE; +ALTER TABLE t4 DISCARD TABLESPACE; +ALTER TABLE t5 DISCARD TABLESPACE; +ALTER TABLE t6 DISCARD TABLESPACE; +ALTER TABLE t8 DISCARD TABLESPACE; + +--perl +do "$ENV{MYSQL_TEST_DIR}/include/innodb-util.inc"; +ib_discard_tablespaces("$ENV{DB_NAME}", "t1", "t2", "t3", "t4", "t5", "t6", "t8"); +ib_restore_tablespaces("$ENV{DB_NAME}", "t1", "t2", "t3", "t4", "t5", "t6", "t8"); +EOF + +--let $restart_parameters = restart:--loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring_backup +--source include/restart_mysqld.inc + +--error ER_INTERNAL_ERROR +ALTER TABLE t1 IMPORT TABLESPACE; +#--error ER_INTERNAL_ERROR +ALTER TABLE t2 IMPORT TABLESPACE; +--error ER_INTERNAL_ERROR +ALTER TABLE t3 IMPORT TABLESPACE; +--error ER_INTERNAL_ERROR +ALTER TABLE t4 IMPORT TABLESPACE; +--error ER_INTERNAL_ERROR +ALTER TABLE t5 IMPORT TABLESPACE; +--error ER_INTERNAL_ERROR +ALTER TABLE t6 IMPORT TABLESPACE; +--error ER_INTERNAL_ERROR +ALTER TABLE t8 IMPORT TABLESPACE; + +--let $restart_parameters = restart:--loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring +--source include/restart_mysqld.inc + +DROP PROCEDURE innodb_insert_proc; +DROP TABLE t1, t2, t3, t4, t5, t6, t7, t8; diff --git a/mysql-test/suite/encryption/t/innodb_encryption_row_compressed-master.opt b/mysql-test/suite/encryption/t/innodb_encryption_row_compressed-master.opt new file mode 100644 index 000000000000..ced17e2319a6 --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_encryption_row_compressed-master.opt @@ -0,0 +1,4 @@ +$KEYRING_PLUGIN_OPT +--early-plugin-load="keyring_file=$KEYRING_PLUGIN" +--loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring +--innodb-encryption-threads=4 diff --git a/mysql-test/suite/encryption/t/innodb_encryption_row_compressed.test b/mysql-test/suite/encryption/t/innodb_encryption_row_compressed.test new file mode 100644 index 000000000000..22cb42366f87 --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_encryption_row_compressed.test @@ -0,0 +1,111 @@ +-- source include/have_innodb.inc +#-- source include/have_file_key_management_plugin.inc +-- source include/not_embedded.inc + +create table innodb_compressed1(c1 bigint not null primary key, d int, a varchar(20), b char(200)) engine=innodb row_format=compressed ENCRYPTION='KEYRING'; +create table innodb_compressed2(c1 bigint not null primary key, d int, a varchar(20), b char(200)) engine=innodb row_format=compressed key_block_size=1 ENCRYPTION='KEYRING'; +create table innodb_compressed3(c1 bigint not null primary key, d int, a varchar(20), b char(200)) engine=innodb row_format=compressed key_block_size=2 ENCRYPTION='KEYRING'; +create table innodb_compressed4(c1 bigint not null primary key, d int, a varchar(20), b char(200)) engine=innodb row_format=compressed key_block_size=4 ENCRYPTION='KEYRING'; + +insert into innodb_compressed1 values (1, 20, 'private', 'evenmoreprivate'); +insert into innodb_compressed1 values (2, 20, 'private', 'evenmoreprivate'); +insert into innodb_compressed1 values (3, 30, 'private', 'evenmoreprivate'); +insert into innodb_compressed1 values (4, 30, 'private', 'evenmoreprivate'); +insert into innodb_compressed1 values (5, 30, 'private', 'evenmoreprivate'); +insert into innodb_compressed1 values (6, 30, 'private', 'evenmoreprivate'); +insert into innodb_compressed1 values (7, 30, 'private', 'evenmoreprivate'); +insert into innodb_compressed1 values (8, 20, 'private', 'evenmoreprivate'); +insert into innodb_compressed1 values (9, 20, 'private', 'evenmoreprivate'); +insert into innodb_compressed1 values (10, 20, 'private', 'evenmoreprivate'); + +insert into innodb_compressed2 select * from innodb_compressed1; +insert into innodb_compressed3 select * from innodb_compressed1; +insert into innodb_compressed4 select * from innodb_compressed1; + +--source include/restart_mysqld.inc + +--let $MYSQLD_DATADIR=`select @@datadir` +--let t1_IBD = $MYSQLD_DATADIR/test/innodb_compressed1.ibd +--let t2_IBD = $MYSQLD_DATADIR/test/innodb_compressed2.ibd +--let t3_IBD = $MYSQLD_DATADIR/test/innodb_compressed3.ibd +--let t4_IBD = $MYSQLD_DATADIR/test/innodb_compressed4.ibd +#--let SEARCH_RANGE = 10000000 +--let ABORT_ON=FOUND +--let SEARCH_PATTERN=private +--echo # t1 yes on expecting NOT FOUND +-- let SEARCH_FILE=$t1_IBD +-- source include/search_pattern_in_file.inc +--echo # t2 yes on expecting NOT FOUND +-- let SEARCH_FILE=$t2_IBD +-- source include/search_pattern_in_file.inc +--echo # t3 yes on expecting NOT FOUND +-- let SEARCH_FILE=$t3_IBD +-- source include/search_pattern_in_file.inc +--echo # t4 yes on expecting NOT FOUND +-- let SEARCH_FILE=$t4_IBD +-- source include/search_pattern_in_file.inc + +select * from innodb_compressed1 where d = 20; +select * from innodb_compressed1 where d = 30; +select * from innodb_compressed2 where d = 20; +select * from innodb_compressed2 where d = 30; +select * from innodb_compressed3 where d = 20; +select * from innodb_compressed3 where d = 30; +select * from innodb_compressed4 where d = 20; +select * from innodb_compressed4 where d = 30; + +update innodb_compressed1 set d = d + 10 where d = 30; +update innodb_compressed2 set d = d + 10 where d = 30; +update innodb_compressed3 set d = d + 10 where d = 30; +update innodb_compressed4 set d = d + 10 where d = 30; + +insert into innodb_compressed1 values (20, 60, 'newprivate', 'newevenmoreprivate'); +insert into innodb_compressed2 values (20, 60, 'newprivate', 'newevenmoreprivate'); +insert into innodb_compressed3 values (20, 60, 'newprivate', 'newevenmoreprivate'); +insert into innodb_compressed4 values (20, 60, 'newprivate', 'newevenmoreprivate'); + +--let SEARCH_PATTERN=private +--let ABORT_ON=FOUND +--echo # t1 yes on expecting NOT FOUND +-- let SEARCH_FILE=$t1_IBD +-- source include/search_pattern_in_file.inc +--echo # t2 yes on expecting NOT FOUND +-- let SEARCH_FILE=$t2_IBD +-- source include/search_pattern_in_file.inc +--echo # t3 yes on expecting NOT FOUND +-- let SEARCH_FILE=$t3_IBD +-- source include/search_pattern_in_file.inc +--echo # t4 yes on expecting NOT FOUND +-- let SEARCH_FILE=$t4_IBD +-- source include/search_pattern_in_file.inc + +--source include/restart_mysqld.inc + +select * from innodb_compressed1 where d = 40; +select * from innodb_compressed1 where d = 60; +select * from innodb_compressed2 where d = 40; +select * from innodb_compressed2 where d = 60; +select * from innodb_compressed3 where d = 40; +select * from innodb_compressed3 where d = 60; +select * from innodb_compressed4 where d = 40; +select * from innodb_compressed4 where d = 60; + +--let SEARCH_PATTERN=private +--let ABORT_ON=FOUND +--echo # t1 yes on expecting NOT FOUND +-- let SEARCH_FILE=$t1_IBD +-- source include/search_pattern_in_file.inc +--echo # t2 yes on expecting NOT FOUND +-- let SEARCH_FILE=$t2_IBD +-- source include/search_pattern_in_file.inc +--echo # t3 yes on expecting NOT FOUND +-- let SEARCH_FILE=$t3_IBD +-- source include/search_pattern_in_file.inc +--echo # t4 yes on expecting NOT FOUND +-- let SEARCH_FILE=$t4_IBD +-- source include/search_pattern_in_file.inc + +drop table innodb_compressed1; +drop table innodb_compressed2; +drop table innodb_compressed3; +drop table innodb_compressed4; diff --git a/mysql-test/suite/encryption/t/innodb_encryption_row_compressed_big_table-master.opt b/mysql-test/suite/encryption/t/innodb_encryption_row_compressed_big_table-master.opt new file mode 100644 index 000000000000..e7783ed63dd3 --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_encryption_row_compressed_big_table-master.opt @@ -0,0 +1,3 @@ +$KEYRING_PLUGIN_OPT +--early-plugin-load="keyring_file=$KEYRING_PLUGIN" +--loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring diff --git a/mysql-test/suite/encryption/t/innodb_encryption_row_compressed_big_table.test b/mysql-test/suite/encryption/t/innodb_encryption_row_compressed_big_table.test new file mode 100644 index 000000000000..5a2fc6634d37 --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_encryption_row_compressed_big_table.test @@ -0,0 +1,39 @@ +--skip +-- source include/have_innodb.inc +#-- source include/have_file_key_management_plugin.inc +-- source include/not_embedded.inc + +CREATE TABLE t1 (id INT NOT NULL PRIMARY KEY, a VARCHAR(255)) ENGINE=InnoDB row_format=compressed encryption='KEYRING'; + +delimiter //; +create procedure innodb_insert_proc (repeat_count int) +begin + declare current_num int; + set current_num = 0; + while current_num < repeat_count do + insert into t1 values (current_num,repeat('barfoo',42)); + set current_num = current_num + 1; + end while; +end// +delimiter ;// +commit; + +set autocommit=0; +call innodb_insert_proc(10000); +commit; +set autocommit=1; + + +--source include/restart_mysqld.inc + +--let $MYSQLD_DATADIR=`select @@datadir` +--let t1_IBD = $MYSQLD_DATADIR/test/t1.ibd + +--let ABORT_ON=FOUND +--let SEARCH_PATTERN=barfoo +--let SEARCH_FILE=$t1_IBD +--source include/search_pattern_in_file.inc + +select * from t1; + +drop table t1; diff --git a/mysql-test/suite/encryption/t/innodb_encryption_row_compressed_corrupted-master.opt b/mysql-test/suite/encryption/t/innodb_encryption_row_compressed_corrupted-master.opt new file mode 100644 index 000000000000..ced17e2319a6 --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_encryption_row_compressed_corrupted-master.opt @@ -0,0 +1,4 @@ +$KEYRING_PLUGIN_OPT +--early-plugin-load="keyring_file=$KEYRING_PLUGIN" +--loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring +--innodb-encryption-threads=4 diff --git a/mysql-test/suite/encryption/t/innodb_encryption_row_compressed_corrupted.test b/mysql-test/suite/encryption/t/innodb_encryption_row_compressed_corrupted.test new file mode 100644 index 000000000000..5077f833636b --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_encryption_row_compressed_corrupted.test @@ -0,0 +1,112 @@ +--skip +-- source include/have_innodb.inc +#-- source include/have_file_key_management_plugin.inc +-- source include/not_embedded.inc + +create table innodb_compressed1(c1 bigint not null primary key, d int, a varchar(20), b char(200)) engine=innodb row_format=compressed ENCRYPTION='KEYRING'; +create table innodb_compressed2(c1 bigint not null primary key, d int, a varchar(20), b char(200)) engine=innodb row_format=compressed key_block_size=1 ENCRYPTION='KEYRING'; +create table innodb_compressed3(c1 bigint not null primary key, d int, a varchar(20), b char(200)) engine=innodb row_format=compressed key_block_size=2 ENCRYPTION='KEYRING'; +create table innodb_compressed4(c1 bigint not null primary key, d int, a varchar(20), b char(200)) engine=innodb row_format=compressed key_block_size=4 ENCRYPTION='KEYRING'; + +insert into innodb_compressed1 values (1, 20, 'private', 'evenmoreprivate'); +insert into innodb_compressed1 values (2, 20, 'private', 'evenmoreprivate'); +insert into innodb_compressed1 values (3, 30, 'private', 'evenmoreprivate'); +insert into innodb_compressed1 values (4, 30, 'private', 'evenmoreprivate'); +insert into innodb_compressed1 values (5, 30, 'private', 'evenmoreprivate'); +insert into innodb_compressed1 values (6, 30, 'private', 'evenmoreprivate'); +insert into innodb_compressed1 values (7, 30, 'private', 'evenmoreprivate'); +insert into innodb_compressed1 values (8, 20, 'private', 'evenmoreprivate'); +insert into innodb_compressed1 values (9, 20, 'private', 'evenmoreprivate'); +insert into innodb_compressed1 values (10, 20, 'private', 'evenmoreprivate'); + +insert into innodb_compressed2 select * from innodb_compressed1; +insert into innodb_compressed3 select * from innodb_compressed1; +insert into innodb_compressed4 select * from innodb_compressed1; + +--source include/restart_mysqld.inc + +--let $MYSQLD_DATADIR=`select @@datadir` +--let t1_IBD = $MYSQLD_DATADIR/test/innodb_compressed1.ibd +--let t2_IBD = $MYSQLD_DATADIR/test/innodb_compressed2.ibd +--let t3_IBD = $MYSQLD_DATADIR/test/innodb_compressed3.ibd +--let t4_IBD = $MYSQLD_DATADIR/test/innodb_compressed4.ibd +#--let SEARCH_RANGE = 10000000 +--let ABORT_ON=FOUND +--let SEARCH_PATTERN=private +--echo # t1 yes on expecting NOT FOUND +-- let SEARCH_FILE=$t1_IBD +-- source include/search_pattern_in_file.inc +--echo # t2 yes on expecting NOT FOUND +-- let SEARCH_FILE=$t2_IBD +-- source include/search_pattern_in_file.inc +--echo # t3 yes on expecting NOT FOUND +-- let SEARCH_FILE=$t3_IBD +-- source include/search_pattern_in_file.inc +--echo # t4 yes on expecting NOT FOUND +-- let SEARCH_FILE=$t4_IBD +-- source include/search_pattern_in_file.inc + +select * from innodb_compressed1 where d = 20; +select * from innodb_compressed1 where d = 30; +select * from innodb_compressed2 where d = 20; +select * from innodb_compressed2 where d = 30; +select * from innodb_compressed3 where d = 20; +select * from innodb_compressed3 where d = 30; +select * from innodb_compressed4 where d = 20; +select * from innodb_compressed4 where d = 30; + +update innodb_compressed1 set d = d + 10 where d = 30; +update innodb_compressed2 set d = d + 10 where d = 30; +update innodb_compressed3 set d = d + 10 where d = 30; +update innodb_compressed4 set d = d + 10 where d = 30; + +insert into innodb_compressed1 values (20, 60, 'newprivate', 'newevenmoreprivate'); +insert into innodb_compressed2 values (20, 60, 'newprivate', 'newevenmoreprivate'); +insert into innodb_compressed3 values (20, 60, 'newprivate', 'newevenmoreprivate'); +insert into innodb_compressed4 values (20, 60, 'newprivate', 'newevenmoreprivate'); + +--let SEARCH_PATTERN=private +--let ABORT_ON=FOUND +--echo # t1 yes on expecting NOT FOUND +-- let SEARCH_FILE=$t1_IBD +-- source include/search_pattern_in_file.inc +--echo # t2 yes on expecting NOT FOUND +-- let SEARCH_FILE=$t2_IBD +-- source include/search_pattern_in_file.inc +--echo # t3 yes on expecting NOT FOUND +-- let SEARCH_FILE=$t3_IBD +-- source include/search_pattern_in_file.inc +--echo # t4 yes on expecting NOT FOUND +-- let SEARCH_FILE=$t4_IBD +-- source include/search_pattern_in_file.inc + +--source include/restart_mysqld.inc + +select * from innodb_compressed1 where d = 40; +select * from innodb_compressed1 where d = 60; +select * from innodb_compressed2 where d = 40; +select * from innodb_compressed2 where d = 60; +select * from innodb_compressed3 where d = 40; +select * from innodb_compressed3 where d = 60; +select * from innodb_compressed4 where d = 40; +select * from innodb_compressed4 where d = 60; + +--let SEARCH_PATTERN=private +--let ABORT_ON=FOUND +--echo # t1 yes on expecting NOT FOUND +-- let SEARCH_FILE=$t1_IBD +-- source include/search_pattern_in_file.inc +--echo # t2 yes on expecting NOT FOUND +-- let SEARCH_FILE=$t2_IBD +-- source include/search_pattern_in_file.inc +--echo # t3 yes on expecting NOT FOUND +-- let SEARCH_FILE=$t3_IBD +-- source include/search_pattern_in_file.inc +--echo # t4 yes on expecting NOT FOUND +-- let SEARCH_FILE=$t4_IBD +-- source include/search_pattern_in_file.inc + +drop table innodb_compressed1; +drop table innodb_compressed2; +drop table innodb_compressed3; +drop table innodb_compressed4; diff --git a/mysql-test/suite/encryption/t/innodb_encryption_tables-master.opt b/mysql-test/suite/encryption/t/innodb_encryption_tables-master.opt new file mode 100644 index 000000000000..d466209803a6 --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_encryption_tables-master.opt @@ -0,0 +1,6 @@ +$KEYRING_PLUGIN_OPT +--early-plugin-load="keyring_file=$KEYRING_PLUGIN" +--loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring +--innodb-encrypt-tables=ONLINE_TO_KEYRING +--innodb-encryption-rotate-key-age=15 +--innodb-encryption-threads=4 diff --git a/mysql-test/suite/encryption/t/innodb_encryption_tables.test b/mysql-test/suite/encryption/t/innodb_encryption_tables.test new file mode 100644 index 000000000000..c9acc872759e --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_encryption_tables.test @@ -0,0 +1,97 @@ +-- source include/have_innodb.inc +#-- source include/have_example_key_management_plugin.inc +-- source include/not_embedded.inc + +create table innodb_normal(c1 bigint not null, b char(200)) engine=innodb; +create table innodb_compact(c1 bigint not null, b char(200)) engine=innodb row_format=compact; +create table innodb_dynamic(c1 bigint not null, b char(200)) engine=innodb row_format=dynamic; +create table innodb_compressed(c1 bigint not null, b char(200)) engine=innodb row_format=compressed; +create table innodb_redundant(c1 bigint not null, b char(200)) engine=innodb row_format=redundant; + +show warnings; + +show create table innodb_normal; +show create table innodb_compact; +show create table innodb_dynamic; +show create table innodb_compressed; +show create table innodb_redundant; + +delimiter //; +create procedure innodb_insert_proc (repeat_count int) +begin + declare current_num int; + set current_num = 0; + while current_num < repeat_count do + insert into innodb_normal values(current_num, substring(MD5(RAND()), -64)); + set current_num = current_num + 1; + end while; +end// +delimiter ;// +commit; + +set autocommit=0; +call innodb_insert_proc(2000); +commit; +set autocommit=1; + +insert into innodb_compact select * from innodb_normal; +insert into innodb_dynamic select * from innodb_normal; +insert into innodb_compressed select * from innodb_normal; +insert into innodb_redundant select * from innodb_normal; + +update innodb_normal set c1 = c1 + 1; +update innodb_compact set c1 = c1 + 1; +update innodb_dynamic set c1 = c1 + 1; +update innodb_compressed set c1 = c1 + 1; +update innodb_redundant set c1 = c1 + 1; +select count(*) from innodb_normal; +select count(*) from innodb_compact where c1 < 1500000; +select count(*) from innodb_dynamic where c1 < 1500000; +select count(*) from innodb_compressed where c1 < 1500000; +select count(*) from innodb_redundant where c1 < 1500000; +select count(*) from innodb_compact t1, innodb_normal t2 where +t1.c1 = t2.c1 and t1.b = t2.b; +select count(*) from innodb_dynamic t1, innodb_normal t2 where +t1.c1 = t2.c1 and t1.b = t2.b; +select count(*) from innodb_compressed t1, innodb_normal t2 where +t1.c1 = t2.c1 and t1.b = t2.b; +select count(*) from innodb_redundant t1, innodb_normal t2 where +t1.c1 = t2.c1 and t1.b = t2.b; + +SELECT variable_value >= 0 FROM information_schema.global_status WHERE variable_name = 'innodb_num_pages_encrypted'; +SELECT variable_value >= 0 FROM information_schema.global_status WHERE variable_name = 'innodb_num_pages_decrypted'; +SELECT variable_value >= 0 FROM information_schema.global_status WHERE variable_name = 'innodb_num_pages_page_compressed'; +SELECT variable_value >= 0 FROM information_schema.global_status WHERE variable_name = 'innodb_num_pages_page_decompressed'; + +--source include/restart_mysqld.inc + +update innodb_normal set c1 = c1 + 1; +update innodb_compact set c1 = c1 + 1; +update innodb_dynamic set c1 = c1 + 1; +update innodb_compressed set c1 = c1 + 1; +update innodb_redundant set c1 = c1 + 1; +select count(*) from innodb_normal; +select count(*) from innodb_compact where c1 < 1500000; +select count(*) from innodb_dynamic where c1 < 1500000; +select count(*) from innodb_compressed where c1 < 1500000; +select count(*) from innodb_redundant where c1 < 1500000; +select count(*) from innodb_compact t1, innodb_normal t2 where +t1.c1 = t2.c1 and t1.b = t2.b; +select count(*) from innodb_dynamic t1, innodb_normal t2 where +t1.c1 = t2.c1 and t1.b = t2.b; +select count(*) from innodb_compressed t1, innodb_normal t2 where +t1.c1 = t2.c1 and t1.b = t2.b; +select count(*) from innodb_redundant t1, innodb_normal t2 where +t1.c1 = t2.c1 and t1.b = t2.b; + +SELECT variable_value >= 0 FROM information_schema.global_status WHERE variable_name = 'innodb_num_pages_encrypted'; +SELECT variable_value >= 0 FROM information_schema.global_status WHERE variable_name = 'innodb_num_pages_decrypted'; +SELECT variable_value >= 0 FROM information_schema.global_status WHERE variable_name = 'innodb_num_pages_page_compressed'; +SELECT variable_value >= 0 FROM information_schema.global_status WHERE variable_name = 'innodb_num_pages_page_decompressed'; + +drop procedure innodb_insert_proc; +drop table innodb_normal; +drop table innodb_compact; +drop table innodb_dynamic; +drop table innodb_compressed; +drop table innodb_redundant; diff --git a/mysql-test/suite/encryption/t/innodb_first_page-master.opt b/mysql-test/suite/encryption/t/innodb_first_page-master.opt new file mode 100644 index 000000000000..a7281d9f1d04 --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_first_page-master.opt @@ -0,0 +1,4 @@ +$KEYRING_PLUGIN_OPT +--early-plugin-load="keyring_file=$KEYRING_PLUGIN" +--loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring +--innodb-encrypt-tables=ONLINE_TO_KEYRING diff --git a/mysql-test/suite/encryption/t/innodb_first_page.test b/mysql-test/suite/encryption/t/innodb_first_page.test new file mode 100644 index 000000000000..c17dc208793d --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_first_page.test @@ -0,0 +1,22 @@ +--skip +# +# MDEV-8021 "InnoDB: Tablespace id 4 encrypted but encryption service not available. Can't continue opening tablespace" on server restart when there are encrypted tables +# + +--source include/have_innodb.inc +#--source include/have_file_key_management_plugin.inc + +let $datadir=`select @@datadir`; +--source include/shutdown_mysqld.inc + +--remove_file $datadir/ib_logfile0 +--remove_file $datadir/ib_logfile1 +--remove_file $datadir/ibdata1 + +--source include/start_mysqld.inc + +create table t1 (a int); + +--source include/restart_mysqld.inc + +drop table t1; diff --git a/mysql-test/suite/encryption/t/innodb_lotoftables-master.opt b/mysql-test/suite/encryption/t/innodb_lotoftables-master.opt new file mode 100644 index 000000000000..67fc9f3406e5 --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_lotoftables-master.opt @@ -0,0 +1,5 @@ +$KEYRING_PLUGIN_OPT +--early-plugin-load="keyring_file=$KEYRING_PLUGIN" +--loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring +--innodb-encrypt-tables=ONLINE_FROM_KEYRING_TO_UNENCRYPTED +--innodb-encryption-threads=0 diff --git a/mysql-test/suite/encryption/t/innodb_lotoftables.test b/mysql-test/suite/encryption/t/innodb_lotoftables.test new file mode 100644 index 000000000000..77a5e4970697 --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_lotoftables.test @@ -0,0 +1,273 @@ +--skip # Test is unstable on Jenkins +-- source include/have_innodb.inc +#-- source include/have_example_key_management_plugin.inc +-- source include/big_test.inc + +# embedded does not support restart +-- source include/not_embedded.inc + +--disable_query_log +let $innodb_encryption_threads_orig = `SELECT @@global.innodb_encryption_threads`; +--enable_query_log + +# empty the change buffer and the undo logs to avoid extra reads +SET GLOBAL innodb_fast_shutdown=0; +--source include/restart_mysqld.inc + +SHOW VARIABLES LIKE 'innodb_encrypt%'; + +# +# This will create 100 tables where that could be +# encrypted an unencrypt +# +create database innodb_encrypted_1; +use innodb_encrypted_1; +show status like 'innodb_pages0_read%'; +set autocommit=0; +let $tables = 100; + +--disable_query_log +while ($tables) +{ + eval create table t_$tables (a int not null primary key, b varchar(200)) engine=innodb + stats_persistent=0; + commit; + let $rows = 100; + while($rows) + { + eval insert into t_$tables values ($rows, substring(MD5(RAND()), -64)); + dec $rows; + } + commit; + dec $tables; +} +--enable_query_log + +set autocommit=1; +commit work; +show status like 'innodb_pages0_read%'; +# +# Verify +# +--echo # should be empty +SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE NAME LIKE 'innodb_encrypted%'; + +# +# This will create 100 tables that are encrypted always +# +create database innodb_encrypted_2; +use innodb_encrypted_2; +show status like 'innodb_pages0_read%'; +set autocommit=0; + +--disable_query_log +let $tables = 100; +while ($tables) +{ + eval create table t_$tables (a int not null primary key, b varchar(200)) engine=innodb + stats_persistent=0 ENCRYPTION='KEYRING'; + commit; + let $rows = 100; + while($rows) + { + eval insert into t_$tables values ($rows, substring(MD5(RAND()), -64)); + dec $rows; + } + commit; + dec $tables; +} +--enable_query_log + +commit work; +set autocommit=1; +show status like 'innodb_pages0_read%'; +# +# Verify +# +--let $assert_text=Should contain 100 tables +--echo # should contain 100 tables +--let $assert_cond="[SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 1 AND NAME LIKE \\'innodb_encrypted%\\']" = 100 +--source include/assert.inc +--let $assert_text=Should contain 0 tables +--let $assert_cond="[SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 AND NAME LIKE \\'innodb_encrypted%\\']" = 0; +--source include/assert.inc + +# +# This will create 100 tables that are not encrypted +# +create database innodb_encrypted_3; +use innodb_encrypted_3; +show status like 'innodb_pages0_read%'; +set autocommit=0; + +--disable_query_log +let $tables = 100; +while ($tables) +{ + eval create table t_$tables (a int not null primary key, b varchar(200)) engine=innodb + stats_persistent=0 ENCRYPTION='N'; + commit; + let $rows = 100; + while($rows) + { + eval insert into t_$tables values ($rows, substring(MD5(RAND()), -64)); + dec $rows; + } + commit; + dec $tables; +} +--enable_query_log + +commit work; +set autocommit=1; +show status like 'innodb_pages0_read%'; +# +# Verify +# + +--let $assert_text=Should contain 100 tables +--echo # should contain 100 tables +--let $assert_cond="[SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 1 AND NAME LIKE \\'innodb_encrypted%\\']" = 100 +--source include/assert.inc +#SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 AND NAME LIKE 'innodb_encrypted%' ORDER BY NAME; +--let $assert_text=Should contain 100 tables +--let $assert_cond="[SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 AND NAME LIKE \\'innodb_encrypted%\\']" = 100; +--source include/assert.inc + +use test; +show status like 'innodb_pages0_read%'; + +SET GLOBAL innodb_encrypt_tables = ONLINE_TO_KEYRING; +SET GLOBAL innodb_encryption_threads=4; + +--echo #tables in innodb_encrypted_1 and innodb_encrypted_2 should be encrypted + +--let $wait_timeout= 600 +--let $wait_condition=SELECT COUNT(*) = 200 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 1 AND NAME LIKE 'innodb_encrypted%'; +--source include/wait_condition.inc + +--let $assert_text=Should contain 100 tables +--echo # should contain 100 tables +--let $assert_cond="[SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 1 AND NAME LIKE \\'innodb_encrypted_1%\\']" = 100 +--source include/assert.inc + +--let $assert_text=Should contain 100 tables +--echo # should contain 100 tables +--let $assert_cond="[SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 1 AND NAME LIKE \\'innodb_encrypted_2%\\']" = 100 +--source include/assert.inc + +--let $assert_text=Should contain 100 unencrypted tables +--echo # should contain 100 unencrypted tables +--let $assert_cond="[SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 AND NAME LIKE \\'innodb_encrypted_3%\\']" = 100 +--source include/assert.inc + +--echo # Success! +--echo # Restart mysqld --innodb_encrypt_tables=0 --innodb_encryption_threads=0 +-- let $restart_parameters=restart:--innodb_encrypt_tables=ONLINE_FROM_KEYRING_TO_UNENCRYPTED --innodb_encryption_threads=0 +-- source include/restart_mysqld.inc + +--echo # Restart Success! +show status like 'innodb_pages0_read%'; + +show status like 'innodb_pages0_read%'; +use test; +show status like 'innodb_pages0_read%'; +use innodb_encrypted_1; +show status like 'innodb_pages0_read%'; +use innodb_encrypted_2; +show status like 'innodb_pages0_read%'; +use innodb_encrypted_3; +show status like 'innodb_pages0_read%'; + +use innodb_encrypted_1; +show status like 'innodb_pages0_read%'; +--disable_result_log +--disable_query_log +let $tables = 100; +while ($tables) +{ + eval select * from t_$tables; + dec $tables; +} +--enable_query_log +--enable_result_log + +show status like 'innodb_pages0_read%'; + +use innodb_encrypted_2; +show status like 'innodb_pages0_read%'; + +--disable_result_log +--disable_query_log +let $tables = 100; +while ($tables) +{ + eval select * from t_$tables; + dec $tables; +} +--enable_query_log +--enable_result_log + +show status like 'innodb_pages0_read%'; + +use innodb_encrypted_3; +show status like 'innodb_pages0_read%'; +--disable_result_log +--disable_query_log +let $tables = 100; +while ($tables) +{ + eval select * from t_$tables; + dec $tables; +} +--enable_query_log +--enable_result_log + +show status like 'innodb_pages0_read%'; + +--echo #tables in innodb_encrypted_1 and innodb_encrypted_2 should remain encrypted as there is no active +--echo #encryption thread + +--let $assert_text=Should contain 200 tables +--echo # should contain 200 tables +--let $assert_cond="[SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 1 AND NAME LIKE \\'innodb_encrypted%\\']" = 200 +--source include/assert.inc + +--let $assert_text=Should contain 100 unencrypted tables +--echo # should contain 100 unencrypted tables +--let $assert_cond="[SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 AND NAME LIKE \\'innodb_encrypted_3%\\']" = 100 +--source include/assert.inc + +SET GLOBAL innodb_encrypt_tables = ONLINE_FROM_KEYRING_TO_UNENCRYPTED; +SET GLOBAL innodb_encryption_threads=4; + +--let $wait_timeout= 600 +--let $wait_condition=SELECT COUNT(*) = 100 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 1; +--source include/wait_condition.inc + +--let $assert_text=Should contain 100 unencrypted tables +--echo # should contain 100 unencrypted tables +--let $assert_cond="[SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 AND NAME LIKE \\'innodb_encrypted_1%\\']" = 100 +--source include/assert.inc + +--let $assert_text=Should contain 100 tables +--echo # should contain 100 encrypted tables +--let $assert_cond="[SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 1 AND NAME LIKE \\'innodb_encrypted_2%\\']" = 100 +--source include/assert.inc + +--let $assert_text=Should contain 100 unencrypted tables +--echo # should contain 100 unencrypted tables +--let $assert_cond="[SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 AND NAME LIKE \\'innodb_encrypted_3%\\']" = 100 +--source include/assert.inc + +# +# Cleanup +# +use test; +drop database innodb_encrypted_1; +drop database innodb_encrypted_2; +drop database innodb_encrypted_3; + +--disable_query_log +EVAL SET GLOBAL innodb_encryption_threads = $innodb_encryption_threads_orig; +--enable_query_log diff --git a/mysql-test/suite/encryption/t/innodb_onlinealter_encryption-master.opt b/mysql-test/suite/encryption/t/innodb_onlinealter_encryption-master.opt new file mode 100644 index 000000000000..d466209803a6 --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_onlinealter_encryption-master.opt @@ -0,0 +1,6 @@ +$KEYRING_PLUGIN_OPT +--early-plugin-load="keyring_file=$KEYRING_PLUGIN" +--loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring +--innodb-encrypt-tables=ONLINE_TO_KEYRING +--innodb-encryption-rotate-key-age=15 +--innodb-encryption-threads=4 diff --git a/mysql-test/suite/encryption/t/innodb_onlinealter_encryption.test b/mysql-test/suite/encryption/t/innodb_onlinealter_encryption.test new file mode 100644 index 000000000000..913d8d0a8e72 --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_onlinealter_encryption.test @@ -0,0 +1,143 @@ +-- source include/have_innodb.inc +#-- source include/have_file_key_management_plugin.inc +# test uses restart +-- source include/not_embedded.inc + +CREATE TABLE t1 (id INT NOT NULL PRIMARY KEY, a VARCHAR(255)) ENGINE=InnoDB encryption='KEYRING'; +CREATE TABLE t2 (id INT NOT NULL PRIMARY KEY, a VARCHAR(255)) ENGINE=InnoDB; +CREATE TABLE t3 (id INT, a VARCHAR(255)) ENGINE=InnoDB encryption='KEYRING'; +CREATE TABLE t4 (id INT, a VARCHAR(255)) engine=InnoDB; +CREATE TABLE t5 (id INT NOT NULL PRIMARY KEY, a TEXT(500), b VARCHAR(255), FULLTEXT(b)) ENGINE=InnoDB encryption='KEYRING'; +CREATE TABLE t6 (id INT, a TEXT(500), b VARCHAR(255), FULLTEXT(b)) ENGINE=InnoDB; +CREATE TABLE t7 (id INT NOT NULL PRIMARY KEY, a VARCHAR(255)) ENGINE=InnoDB row_format=compressed encryption='KEYRING'; + +delimiter //; +create procedure innodb_insert_proc (repeat_count int) +begin + declare current_num int; + set current_num = 0; + while current_num < repeat_count do + insert into t1 values (current_num,repeat('foobar',12)); + insert into t2 values (current_num,repeat('tempsecret', 12)); + insert into t3 values (current_num,repeat('barfoo',42)); + insert into t4 values (current_num,repeat('repeat',42)); + insert into t5 values (current_num,substring('A BC DEF GHIJ KLM NOPQRS TUV WXYZ 012 3456789', rand()*36+1, 100), repeat('author new',22)); + insert into t6 values (current_num,substring('A BC DEF GHIJ KLM NOPQRS TUV WXYZ 012 3456789', rand()*36+1, 100), repeat('mangled old',22)); + insert into t7 values (current_num,repeat('mysql',42)); + set current_num = current_num + 1; + end while; +end// +delimiter ;// +commit; + +set autocommit=0; +call innodb_insert_proc(1500); +commit; +set autocommit=1; + +--let $tables_count= `select count(*) from information_schema.tables where engine = 'InnoDB' and table_schema <> 'information_schema'` +--echo # Wait max 10 min for key encryption threads to encrypt all test/t_ tables (all should have MIN_KEY_VERSION 1 assigned) +--let $wait_timeout= 600 +--let $wait_condition=SELECT SUM(MIN_KEY_VERSION) = 7 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE NAME LIKE 'test/t_' +--source include/wait_condition.inc +--let $MYSQLD_DATADIR=`select @@datadir` + +--source include/shutdown_mysqld.inc + +--let ABORT_ON=FOUND +--let SEARCH_PATTERN=foobar +--echo # t1 yes on expecting NOT FOUND +--let SEARCH_FILE=$MYSQLD_DATADIR/test/t1.ibd +--source include/search_pattern_in_file.inc +--let SEARCH_PATTERN=tempsecret +--echo # t2 ... on expecting NOT FOUND +--let SEARCH_FILE=$MYSQLD_DATADIR/test/t2.ibd +--source include/search_pattern_in_file.inc +--let SEARCH_PATTERN=barfoo +--echo # t3 ... on expecting NOT FOUND +--let SEARCH_FILE=$MYSQLD_DATADIR/test/t3.ibd +--source include/search_pattern_in_file.inc +--let SEARCH_PATTERN=repeat +--echo # t4 ... on expecting NOT FOUND +--let SEARCH_FILE=$MYSQLD_DATADIR/test/t4.ibd +--source include/search_pattern_in_file.inc +--let SEARCH_PATTERN=author +--echo # t5 ... on expecting NOT FOUND +--let SEARCH_FILE=$MYSQLD_DATADIR/test/t5.ibd +--source include/search_pattern_in_file.inc +--let SEARCH_PATTERN=mangled +--echo # t6 ... on expecting NOT FOUND +--let SEARCH_FILE=$MYSQLD_DATADIR/test/t6.ibd +--source include/search_pattern_in_file.inc +--let SEARCH_PATTERN=mysql +--echo # t7 ... on expecting NOT FOUND +--let SEARCH_FILE=$MYSQLD_DATADIR/test/t7.ibd +--source include/search_pattern_in_file.inc + +--let $restart_parameters=restart: +-- source include/start_mysqld.inc + +--disable_warnings +SET GLOBAL innodb_file_format = `Barracuda`; +SET GLOBAL innodb_file_per_table = ON; +--enable_warnings + +ALTER TABLE t1 ADD COLUMN b int default 2; +ALTER TABLE t2 ADD COLUMN b int default 2; +ALTER TABLE t7 ADD COLUMN b int default 2; +ALTER TABLE t1 ADD KEY a(a), ADD KEY b(b); +ALTER TABLE t2 ADD KEY a(a), ADD KEY b(b); +ALTER TABLE t3 ADD COLUMN c int default 5; +ALTER TABLE t4 ADD COLUMN c int default 5; +ALTER TABLE t3 ADD KEY (a), ADD KEY c(c); +ALTER TABLE t4 ADD KEY (a), ADD KEY c(c); +ALTER TABLE t5 ADD FULLTEXT(a); +ALTER TABLE t6 ADD FULLTEXT(a); +ALTER TABLE t7 ADD KEY a(a), ADD key b(b); + +SHOW CREATE TABLE t1; +SHOW CREATE TABLE t2; +SHOW CREATE TABLE t3; +SHOW CREATE TABLE t4; +SHOW CREATE TABLE t5; +SHOW CREATE TABLE t6; +SHOW CREATE TABLE t7; + +--source include/shutdown_mysqld.inc + +--let ABORT_ON=FOUND +--let SEARCH_PATTERN=foobar +--echo # t1 yes on expecting NOT FOUND +-- let SEARCH_FILE=$MYSQLD_DATADIR/test/t1.ibd +-- source include/search_pattern_in_file.inc +--let SEARCH_PATTERN=tempsecret +--echo # t2 ... on expecting NOT FOUND +-- let SEARCH_FILE=$MYSQLD_DATADIR/test/t2.ibd +-- source include/search_pattern_in_file.inc +--let SEARCH_PATTERN=barfoo +--echo # t3 ... on expecting NOT FOUND +-- let SEARCH_FILE=$MYSQLD_DATADIR/test/t3.ibd +-- source include/search_pattern_in_file.inc +--let SEARCH_PATTERN=repeat +--echo # t4 ... on expecting NOT FOUND +-- let SEARCH_FILE=$MYSQLD_DATADIR/test/t4.ibd +-- source include/search_pattern_in_file.inc +--let SEARCH_PATTERN=author +--echo # t5 ... on expecting NOT FOUND +-- let SEARCH_FILE=$MYSQLD_DATADIR/test/t5.ibd +-- source include/search_pattern_in_file.inc +--let SEARCH_PATTERN=mangled +--echo # t6 ... on expecting NOT FOUND +-- let SEARCH_FILE=$MYSQLD_DATADIR/test/t6.ibd +-- source include/search_pattern_in_file.inc +--let SEARCH_PATTERN=mysql +--echo # t7 ... on expecting NOT FOUND +-- let SEARCH_FILE=$MYSQLD_DATADIR/test/t7.ibd +-- source include/search_pattern_in_file.inc + +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR $KEYRING_PLUGIN KEYRING_PLUGIN $KEYRING_PLUGIN_OPT KEYRING_PLUGIN_OPT +--let $restart_parameters=restart:--early-plugin-load="keyring_file=$KEYRING_PLUGIN" --loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring $KEYRING_PLUGIN_OPT --innodb-encrypt-tables=ONLINE_TO_KEYRING --innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=4 +-- source include/start_mysqld.inc + +DROP PROCEDURE innodb_insert_proc; +DROP TABLE t1, t2, t3, t4, t5, t6, t7; diff --git a/mysql-test/suite/encryption/t/innodb_page_encryption_key_change-master.opt b/mysql-test/suite/encryption/t/innodb_page_encryption_key_change-master.opt new file mode 100644 index 000000000000..f73683624185 --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_page_encryption_key_change-master.opt @@ -0,0 +1,4 @@ +$KEYRING_PLUGIN_OPT +--early-plugin-load="keyring_file=$KEYRING_PLUGIN" +--loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring +--innodb-encrypt-tables=ONLINE_FROM_KEYRING_TO_UNENCRYPTED diff --git a/mysql-test/suite/encryption/t/innodb_page_encryption_key_change.test b/mysql-test/suite/encryption/t/innodb_page_encryption_key_change.test new file mode 100644 index 000000000000..8cec9650bb1a --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_page_encryption_key_change.test @@ -0,0 +1,91 @@ +--source include/have_64bit.inc +--source include/have_innodb.inc +#-- source include/have_file_key_management_plugin.inc +# embedded does not support restart +--source include/not_embedded.inc + +--let $MYSQLD_DATADIR=`select @@datadir` +--let t1_IBD = $MYSQLD_DATADIR/test/t1.ibd +--let t2_IBD = $MYSQLD_DATADIR/test/t2.ibd +--let t3_IBD = $MYSQLD_DATADIR/test/t3.ibd +--let t4_IBD = $MYSQLD_DATADIR/test/t4.ibd + + +--echo # Restart mysqld --loose-file-key-management-filename=keys2.txt +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--let $restart_parameters=restart:--keyring-file-data=$MYSQLTEST_VARDIR/std_data/keys2.txt +#-- let $restart_parameters=--loose-file-key-management-filename=$MYSQLTEST_VARDIR/std_data/keys2.txt +-- source include/restart_mysqld.inc + +create table innodb_normal(c1 bigint not null, b char(200)) engine=innodb; +show warnings; +create table innodb_compact(c1 bigint not null, b char(200)) engine=innodb row_format=compact ENCRYPTION='KEYRING' encryption_key_id=2; +show warnings; +create table innodb_compressed(c1 bigint not null, b char(200)) engine=innodb row_format=compressed ENCRYPTION='KEYRING' encryption_key_id=3; +show warnings; +create table innodb_dynamic(c1 bigint not null, b char(200)) engine=innodb row_format=dynamic ENCRYPTION='KEYRING' encryption_key_id=4; +show warnings; +create table innodb_redundant(c1 bigint not null, b char(200)) engine=innodb row_format=redundant ENCRYPTION='KEYRING' encryption_key_id=5; +show warnings; + +insert into innodb_normal values (1,'test1'),(2,'foo'),(3,'bar'),(4,'mariadb'); +insert into innodb_compact select * from innodb_normal; +insert into innodb_compressed select * from innodb_normal; +insert into innodb_dynamic select * from innodb_normal; +insert into innodb_redundant select * from innodb_normal; + +# Note there that these variables are updated only when real I/O is done, thus they are not reliable +SELECT variable_value >= 0 FROM information_schema.global_status WHERE variable_name = 'innodb_num_pages_encrypted'; +SELECT variable_value >= 0 FROM information_schema.global_status WHERE variable_name = 'innodb_num_pages_decrypted'; + +alter table innodb_compact engine=innodb encryption_key_id = 6; +alter table innodb_compressed engine=innodb encryption_key_id = 6; +alter table innodb_dynamic engine=innodb encryption_key_id = 6; +alter table innodb_redundant engine=innodb encryption_key_id = 6; + +select * from innodb_normal; +select * from innodb_compact; +select * from innodb_compressed; +select * from innodb_dynamic; +select * from innodb_redundant; + +# Note there that these variables are updated only when real I/O is done, thus they are not reliable +SELECT variable_value >= 0 FROM information_schema.global_status WHERE variable_name = 'innodb_num_pages_encrypted'; +SELECT variable_value >= 0 FROM information_schema.global_status WHERE variable_name = 'innodb_num_pages_decrypted'; + +--echo # Restart mysqld --loose-file-key-management-filename=keys3.txt +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--let $restart_parameters=restart:--keyring-file-data=$MYSQLTEST_VARDIR/std_data/keys3.txt +#-- let $restart_parameters=--loose-file-key-management-filename=$MYSQLTEST_VARDIR/std_data/keys3.txt +-- source include/restart_mysqld.inc + +select * from innodb_normal; +select * from innodb_compact; +select * from innodb_compressed; +select * from innodb_dynamic; +select * from innodb_redundant; + +# Note there that these variables are updated only when real I/O is done, thus they are not reliable +SELECT variable_value >= 0 FROM information_schema.global_status WHERE variable_name = 'innodb_num_pages_encrypted'; +SELECT variable_value >= 0 FROM information_schema.global_status WHERE variable_name = 'innodb_num_pages_decrypted'; + +alter table innodb_compact engine=innodb encryption_key_id = 2; +alter table innodb_compressed engine=innodb encryption_key_id = 3; +alter table innodb_dynamic engine=innodb encryption_key_id = 4; +alter table innodb_redundant engine=innodb encryption_key_id = 5; + +select * from innodb_normal; +select * from innodb_compact; +select * from innodb_compressed; +select * from innodb_dynamic; +select * from innodb_redundant; + +# Note there that these variables are updated only when real I/O is done, thus they are not reliable +SELECT variable_value >= 0 FROM information_schema.global_status WHERE variable_name = 'innodb_num_pages_encrypted'; +SELECT variable_value >= 0 FROM information_schema.global_status WHERE variable_name = 'innodb_num_pages_decrypted'; + +drop table innodb_normal; +drop table innodb_compact; +drop table innodb_compressed; +drop table innodb_dynamic; +drop table innodb_redundant; diff --git a/mysql-test/suite/encryption/t/innodb_rotation_mk_to_rk-master.opt b/mysql-test/suite/encryption/t/innodb_rotation_mk_to_rk-master.opt new file mode 100644 index 000000000000..ced17e2319a6 --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_rotation_mk_to_rk-master.opt @@ -0,0 +1,4 @@ +$KEYRING_PLUGIN_OPT +--early-plugin-load="keyring_file=$KEYRING_PLUGIN" +--loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring +--innodb-encryption-threads=4 diff --git a/mysql-test/suite/encryption/t/innodb_rotation_mk_to_rk.test b/mysql-test/suite/encryption/t/innodb_rotation_mk_to_rk.test new file mode 100644 index 000000000000..b031d690e7a6 --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_rotation_mk_to_rk.test @@ -0,0 +1,242 @@ +--skip +-- source include/have_innodb.inc +#-- source include/have_file_key_management_plugin.inc + +# embedded does not support restart +-- source include/not_embedded.inc + +#--echo $KEYRING_PLUGIN_OPT +#--echo $KEYRING_PLUGIN_LOAD + +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR +eval SET @@global.keyring_file_data="$MYSQL_TMP_DIR/mysecret_keyring"; + +SHOW PLUGINS; +# +# MDEV-8138: strange results from encrypt-and-grep test +# +--let $MYSQLD_DATADIR=`select @@datadir` +#TODO: Robert - dlaczego tu jest ibdata1 +--let ib1_IBD = $MYSQLD_DATADIR/ibdata1 +--let t1_IBD = $MYSQLD_DATADIR/test/t1.ibd +--let SEARCH_RANGE = 10000000 + +--disable_warnings +SET GLOBAL innodb_file_per_table = ON; +SET GLOBAL innodb_file_format = `Barracuda`; +--enable_warnings + +create table t1 (a varchar(255)) engine=innodb encryption='Y'; + +insert t1 values (repeat('foobarsecret', 12)); +select * from t1; + +SET GLOBAL innodb_encrypt_tables = on; + +--echo # which does not exist in INNODB_SYS_TABLESPACES +--let encrypted_tables_count=`select count(*) from INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES` +--echo # Wait max 10 min for key encryption threads to encrypt all spaces +--echo $encrypted_tables_counts +--let $wait_timeout= 600 +--let $wait_condition=SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 +#--let $wait_condition=SELECT COUNT(*) = $encrypted_tables_count FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 +--source include/wait_condition.inc + +SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES; +SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE FLAG = 8225; +--let $assert_text= All encrypted tables should have encrypted flag set +#--let $assert_cond= "[SELECT COUNT(*) = $encrypted_tables_count - 1] FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE FLAG = 8225" = 1 +# encryted_tables_count - 1 here, as INNODB_SYS_TABLESPACES does not include innodb_system +# in here innodb_system does not appd +--let $assert_cond= "[SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE FLAG = 8225]" = $encrypted_tables_count +--source include/assert.inc + +SELECT NAME, MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; +SELECT NAME, MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; +SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES; +SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES; + +#create table t5 (a varchar(255)) engine=innodb encryption='Y'; + +#SELECT * FROM SYS_TABLESPACES; +#SELECT * FROM SYS_TABLES; + +#SHOW CREATE TABLE INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES; +#SHOW CREATE TABLE INFORMATION_SCHEMA.INNODB_SYS_TABLES; + + +--source include/shutdown_mysqld.inc + +--let SEARCH_PATTERN=foobarsecret +--let ABORT_ON=FOUND +#--let ABORT_ON_NOT_FOUND=0 +#--let ABORT_ON_FOUND=1 +--echo # t1 yes on expecting NOT FOUND +--let SEARCH_FILE=$t1_IBD +--source include/search_pattern_in_file.inc +#--let SEARCH_PATTERN=tempsecret +#--echo # t2 ... on expecting NOT FOUND +#--let SEARCH_FILE=$t2_IBD +#--source include/search_pattern_in_file.inc +#--let ABORT_ON=NOT_FOUND +#--let SEARCH_PATTERN=dummysecret +#--echo # t3 no on expecting FOUND +#--let SEARCH_FILE=$t3_IBD +#--source include/search_pattern_in_file.inc +#--let SEARCH_PATTERN=verysecret +#--let ABORT_ON=FOUND +#--echo # t4 no on expecting NOT FOUND +#--let SEARCH_FILE=$t4_IBD +#--source include/search_pattern_in_file.inc +#--let SEARCH_PATTERN=foobarsecret +#--let ABORT_ON=FOUND +#--echo # ibdata1 expecting NOT FOUND +#-- let SEARCH_FILE=$ib1_IBD +#-- source include/search_pattern_in_file.inc + +--let $restart_parameters=restart:--early-plugin-load="keyring_file=$KEYRING_PLUGIN" --loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring $KEYRING_PLUGIN_OPT --innodb-encrypt-tables=ON --innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=1 +#--let $restart_parameters=restart:--loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring --innodb-encrypt-tables=ON --innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=4 +-- source include/start_mysqld.inc + +--echo # Now turn off encryption and wait for threads to decrypt everything + +#SELECT NAME, MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; + +--echo # HERE ROBERT + +SELECT NAME, MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; +SELECT NAME, MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; + +SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES; +SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES; + +SET GLOBAL innodb_encrypt_tables = off; + +#--sleep 10 + +#SELECT NAME, MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; +#SELECT NAME, MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; + +#SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES; +#SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES; + +--echo # Wait max 10 min for key encryption threads to decrypt all spaces (but t1 and t4 for which encryption was overriden to yes) +#--let $wait_timeout= 600 +#--let $tables_count= `select count(*) - 1 from information_schema.tables where engine = 'InnoDB' and table_schema <> 'information_schema'` +#echo $tables_count; +#select * from information_schema.tables where engine = 'InnoDB' and table_schema <> 'information_schema'; + + +#echo ======alll-from-information_schema==== +#select * from information_schema.tables where engine = 'InnoDB'; +--echo # Only two tables should stayed encrypted - the ones with explicite encryption +#--let $wait_condition=SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 AND ROTATING_OR_FLUSHING = 0 +--let $wait_timeout= 600 +--let $wait_condition=SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0 +--source include/wait_condition.inc + +SELECT NAME, MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; +SELECT NAME, MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; + +SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES; +SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES; + +--let $assert_text= There should be no encrypted tables left +--let $assert_cond= "[SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE FLAG = 8225]" = 0 +--source include/assert.inc + + +#--sleep 70 + +SELECT NAME, MIN_KEY_VERSION, ROTATING_OR_FLUSHING FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; +SELECT NAME, MIN_KEY_VERSION, ROTATING_OR_FLUSHING FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; + +SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES; +SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES; + +#--die + + +--source include/shutdown_mysqld.inc + +--let SEARCH_PATTERN=foobarsecret +--let ABORT_ON=NOT_FOUND +--echo # t1 yes on expecting NOT FOUND +--let SEARCH_FILE=$t1_IBD +--source include/search_pattern_in_file.inc + +--let $restart_parameters=restart:--early-plugin-load="keyring_file=$KEYRING_PLUGIN" --loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring $KEYRING_PLUGIN_OPT --innodb-encrypt-tables=ON --innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=4 + +-- source include/start_mysqld.inc + +--echo # Now turn on encryption and wait for threads to encrypt all spaces +SELECT NAME, MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; +SET GLOBAL innodb_encrypt_tables = on; + + +--echo # Wait max 10 min for key encryption threads to encrypt all spaces +--let $wait_timeout= 600 +#--let $wait_condition=SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0 AND ROTATING_OR_FLUSHING = 0; +--let $wait_condition=SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 +--source include/wait_condition.inc + +#--let $wait_timeout= 600 +#--let $wait_condition=SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE FLAG <> 8225 +#--source include/wait_condition.inc + +--let $assert_text= All tables should have been encrypted +--let $assert_cond= "[SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE FLAG <> 8225]" = 0 +--source include/assert.inc + +SELECT NAME, MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; +SELECT NAME, MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; + +SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES; +SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES; + +--source include/shutdown_mysqld.inc + +--let SEARCH_PATTERN=foobarsecret +--let ABORT_ON=FOUND +--echo # t1 yes on expecting NOT FOUND +-- let SEARCH_FILE=$t1_IBD +-- source include/search_pattern_in_file.inc + +-- source include/start_mysqld.inc + +alter table t1 encryption='n'; + +--echo # Wait max 10 min for key encryption threads to encrypt all spaces (apart from t1,t3 and t4) +--let $wait_timeout= 600 +#--let $wait_condition=SELECT COUNT(*) = 3 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0 AND ROTATING_OR_FLUSHING = 0 +--let $wait_condition=SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 +--source include/wait_condition.inc + +SELECT NAME, MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; +SELECT NAME, MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; + +SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES; +SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES; + +--let $assert_text= All spaces apart from t1 should got encrypted +--let $assert_cond= "[SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE FLAG <> 8225]" = 1 +--source include/assert.inc + +SELECT NAME, MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; +SELECT NAME, MIN_KEY_VERSION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; + +SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES; +SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES; + +--source include/shutdown_mysqld.inc + +--let SEARCH_PATTERN=foobarsecret +--let ABORT_ON=NOT_FOUND +--echo # t1 yes on expecting FOUND +-- let SEARCH_FILE=$t1_IBD +-- source include/search_pattern_in_file.inc + +-- source include/start_mysqld.inc + +drop table t1; + diff --git a/mysql-test/suite/encryption/t/innodb_rotation_mk_to_rk_post_enc_checksum_fail-master.opt b/mysql-test/suite/encryption/t/innodb_rotation_mk_to_rk_post_enc_checksum_fail-master.opt new file mode 100644 index 000000000000..60d52ef07161 --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_rotation_mk_to_rk_post_enc_checksum_fail-master.opt @@ -0,0 +1,4 @@ +$KEYRING_PLUGIN_OPT +--early-plugin-load="keyring_file=$KEYRING_PLUGIN" +--loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring +--innodb-encryption-threads=1 diff --git a/mysql-test/suite/encryption/t/innodb_rotation_mk_to_rk_post_enc_checksum_fail.test b/mysql-test/suite/encryption/t/innodb_rotation_mk_to_rk_post_enc_checksum_fail.test new file mode 100644 index 000000000000..75f407d6e67f --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb_rotation_mk_to_rk_post_enc_checksum_fail.test @@ -0,0 +1,119 @@ +--skip +-- source include/have_innodb.inc +#-- source include/have_file_key_management_plugin.inc +--source include/have_debug.inc + +# embedded does not support restart +-- source include/not_embedded.inc + +#--echo $KEYRING_PLUGIN_OPT +#--echo $KEYRING_PLUGIN_LOAD + +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR +eval SET @@global.keyring_file_data="$MYSQL_TMP_DIR/mysecret_keyring"; + +let MYSQLD_DATADIR=`select @@datadir`; +--let $MYSQLD_DATADIR=`select @@datadir` +--let t1_IBD = $MYSQLD_DATADIR/test/t1.ibd +--let SEARCH_RANGE = 10000000 + +--disable_warnings +SET GLOBAL innodb_file_per_table = ON; +SET GLOBAL innodb_file_format = `Barracuda`; +--enable_warnings + +create table t1 (a TEXT) engine=innodb encryption='Y'; + +BEGIN; +INSERT INTO t1 (a) VALUES ('foobarsecret'); +--disable_query_log +--let $i = 100 +while ($i) +{ + INSERT INTO t1 (a) VALUES (REPEAT('foobarsecret', 100)); + dec $i; +} +--enable_query_log +COMMIT; + +--source include/shutdown_mysqld.inc + +# Make sure t1 is encrypted +--let SEARCH_PATTERN=foobarsecret +--let ABORT_ON=FOUND +--let SEARCH_FILE=$t1_IBD +--source include/search_pattern_in_file.inc + +--copy_file $MYSQLD_DATADIR/test/t1.ibd $MYSQLD_DATADIR/test/t1.ibd.MK + +--let $restart_parameters=restart:--early-plugin-load="keyring_file=$KEYRING_PLUGIN" --loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring $KEYRING_PLUGIN_OPT --innodb-encrypt-tables=ON --innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=1 +--source include/start_mysqld.inc + +--let tables_count=`select count(*) from INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES` +--echo # Wait max 10 min for key encryption threads to encrypt all spaces +--echo $encrypted_tables_count +--let $wait_timeout= 600 +# encrypted_tables_count + 1 because INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION contains additional, +# artificial innodb_system table +--let $wait_condition=SELECT COUNT(*) = $tables_count + 1 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 +--source include/wait_condition.inc + +--let $assert_text= All encrypted tables should have encrypted flag set +--let $assert_cond= "[SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE FLAG = 8225]" = $tables_count +--source include/assert.inc + +let INNODB_PAGE_SIZE=`select @@innodb_page_size`; + +--source include/shutdown_mysqld.inc + +--let SEARCH_PATTERN=foobarsecret +--let ABORT_ON=FOUND +--let SEARCH_FILE=$t1_IBD +--source include/search_pattern_in_file.inc + +--echo # Backup t1 before corrupting +--copy_file $MYSQLD_DATADIR/test/t1.ibd $MYSQLD_DATADIR/test/t1.ibd.backup + +--echo # Corrupt t1 + +perl; +open(FILE, "+<", "$ENV{MYSQLD_DATADIR}/test/t1.ibd") or die "open"; +binmode FILE; +seek(FILE, $ENV{'INNODB_PAGE_SIZE'} * 3 + 26 + 100, SEEK_SET) or die "seek"; +print FILE pack("H*", "c00lcafedeadb017"); +close FILE or die "close"; +EOF + +--echo # Now restart server with encryption turned off and wait for threads to decrypt everything +--echo # Apart from t1 which is corrupted and it should not be possible to decrypt this table + +--let $restart_parameters=restart:--early-plugin-load="keyring_file=$KEYRING_PLUGIN" --loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring $KEYRING_PLUGIN_OPT --innodb-encrypt-tables=OFF --innodb-encryption-rotate-key-age=15 --innodb-encryption-threads=1 +--source include/start_mysqld.inc + +--let $wait_timeout= 600 +# Note that INNODB_TABLESPACES_ENCRYPTION whill contain also artificail innodb_system tablespace +# thus $tables_count == all tables, but one in INNODB_TABLESPACES_ENCRYPTION +--let $wait_condition=SELECT COUNT(*) = $tables_count FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0 +--source include/wait_condition.inc + +--let $assert_text= Table t1 should stayed encrypted as some of its pages were corrupted +--let $assert_cond= "[SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0]" = "test/t1" +--source include/assert.inc + +--let $assert_text= Table t1 should be the only one with encrypted flag set +--let $assert_cond= "[SELECT NAME FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE FLAG = 8225]" = "test/t1" +--source include/assert.inc + +--error ER_GET_ERRMSG +SELECT * FROM t1; + +--source include/shutdown_mysqld.inc + +--echo # Restore the original t1 + +--move_file $MYSQLD_DATADIR/test/t1.ibd.MK $MYSQLD_DATADIR/test/t1.ibd +--source include/start_mysqld.inc + +SELECT COUNT(*) FROM t1; + +DROP TABLE t1; diff --git a/mysql-test/suite/encryption/t/table_encrypt_2_rotated_keys-master.opt b/mysql-test/suite/encryption/t/table_encrypt_2_rotated_keys-master.opt new file mode 100644 index 000000000000..4be41e0f321b --- /dev/null +++ b/mysql-test/suite/encryption/t/table_encrypt_2_rotated_keys-master.opt @@ -0,0 +1,2 @@ +$KEYRING_PLUGIN_OPT +$KEYRING_PLUGIN_LOAD diff --git a/mysql-test/suite/encryption/t/uninstall_keyring-master.opt b/mysql-test/suite/encryption/t/uninstall_keyring-master.opt new file mode 100644 index 000000000000..69f207daf3f8 --- /dev/null +++ b/mysql-test/suite/encryption/t/uninstall_keyring-master.opt @@ -0,0 +1,6 @@ +$KEYRING_PLUGIN_OPT +--early-plugin-load="keyring_file=$KEYRING_PLUGIN" +--loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring +--innodb-encrypt-tables=ONLINE_TO_KEYRING +--innodb-encryption-rotate-key-age=15 +--innodb-encryption-threads=3 diff --git a/mysql-test/suite/encryption/t/uninstall_keyring.test b/mysql-test/suite/encryption/t/uninstall_keyring.test new file mode 100644 index 000000000000..592df429637b --- /dev/null +++ b/mysql-test/suite/encryption/t/uninstall_keyring.test @@ -0,0 +1,189 @@ +--skip # Test unstable on centos6 +-- source include/have_innodb.inc +#-- source include/have_file_key_management_plugin.inc + +# embedded does not support restart +--source include/not_embedded.inc + +call mtr.add_suppression("\\[Error\\] InnoDB: Encryption can't generate tablespace key"); +call mtr.add_suppression("\\[ERROR\\] Plugin keyring_file reported: 'File .*keyring' not found .*"); +call mtr.add_suppression("keyring_file initialization failure. Please check if the keyring_file_data points to readable keyring file or keyring file can be created in the specified location. The keyring_file will stay unusable until correct path to the keyring file gets provided"); +call mtr.add_suppression("is encrypted but encryption service or used key_id 0 is not available"); +call mtr.add_suppression("Ignoring tablespace `test/t1` because it could not be opened"); +call mtr.add_suppression("Ignoring tablespace `test/t2` because it could not be opened"); +call mtr.add_suppression("Ignoring tablespace `test/t_mk` because it could not be opened"); +call mtr.add_suppression("Failed to find tablespace for table `test`\.`t1` in the cache"); +call mtr.add_suppression("Failed to find tablespace for table `test`\.`t2` in the cache"); +call mtr.add_suppression("Failed to find tablespace for table `test`\.`t_mk` in the cache"); +call mtr.add_suppression("\\[ERROR\\] Function 'keyring_file' already exists"); +call mtr.add_suppression("\\[Warning\\] Couldn't load plugin named 'keyring_file' with soname 'keyring_file\.so'\."); +call mtr.add_suppression("\\[ERROR\\] InnoDB: Encryption can't find tablespace key, please check the keyring plugin is loaded\."); + +--let encrypted_tables_count=`select count(*) from INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES` +--echo # Wait max 10 min for key encryption threads to encrypt all spaces +--let $wait_timeout= 600 +--let $wait_condition=SELECT COUNT(*) = $encrypted_tables_count + 1 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 1 +--source include/wait_condition.inc + +--echo # Encryption threads turned on, try uninstalling keyring +--error ER_PLUGIN_CANNOT_BE_UNINSTALLED +UNINSTALL PLUGIN keyring_file; +--echo # Turn off encryption threads, uninstall keyring +SET GLOBAL innodb_encryption_threads=0; +UNINSTALL PLUGIN keyring_file; +--echo # Turn on encryption back - should not be possible as there is keyring plugin installed +--error ER_WRONG_ARGUMENTS +SET GLOBAL innodb_encryption_threads=1; +--echo # Install keyring plugin and turn encryption threads back on +INSTALL PLUGIN keyring_file SONAME 'keyring_file.so'; +SET GLOBAL innodb_encryption_threads=4; + +CREATE table t_mk (a varchar(255)) engine=innodb; + +--echo # Turn off encryption threads, uninstall keyring. Check CREATE, ALTER etc. +SET GLOBAL innodb_encryption_threads=0; +SET GLOBAL innodb_encrypt_tables=ONLINE_FROM_KEYRING_TO_UNENCRYPTED; +UNINSTALL PLUGIN keyring_file; + +--error ER_ILLEGAL_HA_CREATE_OPTION +CREATE TABLE t1 (a varchar(255)) engine=innodb encryption='KEYRING'; +CREATE TABLE t2 (a varchar(255)) engine=innodb; +--error ER_ILLEGAL_HA_CREATE_OPTION +ALTER TABLE t2 ENCRYPTION='KEYRING'; +--error ER_ILLEGAL_HA_CREATE_OPTION +ALTER TABLE t_mk ENCRYPTION='KEYRING'; + +--echo # Decrypt all tables. The restart without keyring plugin functional should work as there should not be +--echo # any system tables left encrypted with KEYRING +INSTALL PLUGIN keyring_file SONAME 'keyring_file.so'; +SET GLOBAL innodb_encryption_threads=4; +SET GLOBAL innodb_encrypt_tables=ONLINE_FROM_KEYRING_TO_UNENCRYPTED; + +--echo # Wait max 10 min for key encryption threads to decrypt all spaces +--let $wait_timeout= 600 +--let $wait_condition=SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 1 +--source include/wait_condition.inc + +SET GLOBAL innodb_encryption_threads=0; +UNINSTALL PLUGIN keyring_file; + +--source include/shutdown_mysqld.inc + +--let $error_log=$MYSQL_TMP_DIR/my_restart.err +--echo #It should not be possible to start server with encryption threads > 0 and no keyring installed +--error 1 +--exec $MYSQLD_CMD --innodb-encryption-threads=3 --log-error=$error_log + +# We should get error in error log as that it is not possible to start encryption threads +# withouth keyring installed. +--let ABORT_ON=NOT_FOUND +--let SEARCH_FILE=$error_log +--let SEARCH_PATTERN=InnoDB: cannot enable encryption threads, keyring plugin is not available +--source include/search_pattern_in_file.inc + +--remove_file $error_log + +--echo # It should not be possible to start server with encryption threads > 0 and keyring not properly +--echo # intialized +--error 1 +--exec $MYSQLD_CMD --innodb-encryption-threads=3 --early-plugin-load="keyring_file=$KEYRING_PLUGIN" --keyring_file_data=/homeless/root/mysecret_keyring $KEYRING_PLUGIN_OPT --log-error=$error_log + +--echo # Check that keyring_file was not properly intialized by checking error log +--let ABORT_ON=NOT_FOUND +--let SEARCH_FILE=$error_log +--let SEARCH_PATTERN=keyring_file initialization failure +--source include/search_pattern_in_file.inc + +--echo # We should get error in error log as that it is not possible to start encryption threads +--echo # when keyring is not properly initialized. +--let ABORT_ON=NOT_FOUND +--let SEARCH_FILE=$error_log +--let SEARCH_PATTERN=InnoDB: keyring plugin is installed but it seems it was not properly initialized. Cannot enable encryption threads. +--source include/search_pattern_in_file.inc + +--remove_file $error_log + +--echo # Start with keyring plugin installed but not functional (impossible keyring file path). Enabling encryption threads should not be possible as well as creating tables encrypted with KEYRING. + +--let $restart_parameters=restart:--early-plugin-load="keyring_file=$KEYRING_PLUGIN" --loose-keyring_file_data=/homeless/root/mysecret_keyring $KEYRING_PLUGIN_OPT --innodb-encrypt-tables=ONLINE_FROM_KEYRING_TO_UNENCRYPTED --innodb-encryption-threads=0 --log-error=$error_log --innodb-encrypt-tables=OFF +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR $KEYRING_PLUGIN_OPT KEYRING_PLUGIN_OPT +--source include/start_mysqld.inc +#--source include/restart_mysqld.inc + +# Check that keyring_file was not properly intialized by checking error log +--let ABORT_ON=NOT_FOUND +--let SEARCH_FILE=$error_log +--let SEARCH_PATTERN=keyring_file initialization failure +--source include/search_pattern_in_file.inc + +--error ER_WRONG_ARGUMENTS +SET GLOBAL innodb_encryption_threads=1; +--error ER_ILLEGAL_HA_CREATE_OPTION +CREATE TABLE t1 (a varchar(255)) engine=innodb encryption='KEYRING'; +--error ER_ILLEGAL_HA_CREATE_OPTION +ALTER TABLE t2 ENCRYPTION='KEYRING'; +--error ER_ILLEGAL_HA_CREATE_OPTION +ALTER TABLE t_mk ENCRYPTION='KEYRING'; + +--echo # Set valid keyring file path and try above operations +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR +eval SET @@global.keyring_file_data= '$MYSQL_TMP_DIR/mysecret_keyring'; + +# Keyring plugin should now be functional + +SET GLOBAL innodb_encryption_threads=1; +CREATE TABLE t1 (a varchar(255)) engine=innodb encryption='KEYRING'; +ALTER TABLE t2 ENCRYPTION='KEYRING'; +ALTER TABLE t_mk ENCRYPTION='KEYRING'; + +INSERT t2 VALUES (repeat('foobarsecret', 12)); + +SET GLOBAL innodb_encryption_threads=0; +UNINSTALL PLUGIN keyring_file; + +--error ER_ILLEGAL_HA_CREATE_OPTION +ALTER TABLE t2 ENCRYPTION='N'; + +INSTALL PLUGIN keyring_file SONAME 'keyring_file.so'; +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR +eval SET @@global.keyring_file_data= '$MYSQL_TMP_DIR/mysecret_keyring'; + +--replace_result $KEYRING_PLUGIN_OPT KEYRING_PLUGIN_OPT +--let $restart_parameters=restart:--early-plugin-load="keyring_file=$KEYRING_PLUGIN" --loose-keyring_file_data=/homeless/root/mysecret_keyring $KEYRING_PLUGIN_OPT --innodb-encrypt-tables=ONLINE_FROM_KEYRING_TO_UNENCRYPTED --innodb-encryption-threads=0 +--source include/restart_mysqld.inc + +--remove_file $error_log + +# keyring file is not functional, try droping t2 encryption +--error ER_GET_ERRMSG +ALTER TABLE t2 ENCRYPTION='N'; + +DROP TABLE t1,t2,t_mk; + +CREATE TABLE t1 (a varchar(255)) engine=innodb; +INSERT t1 VALUES (repeat('foobarsecret', 12)); +CREATE TABLE t2 (a varchar(255)) engine=innodb; +INSERT t2 VALUES (repeat('foobarsecret', 12)); +CREATE TABLE t3 (a varchar(255)) engine=innodb; +INSERT t3 VALUES (repeat('foobarsecret', 12)); +CREATE TABLE t4 (a varchar(255)) engine=innodb; +INSERT t4 VALUES (repeat('foobarsecret', 12)); +CREATE TABLE t5 (a varchar(255)) engine=innodb; +INSERT t5 VALUES (repeat('foobarsecret', 12)); +CREATE TABLE t6 (a varchar(255)) engine=innodb; +INSERT t6 VALUES (repeat('foobarsecret', 12)); +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR +eval SET @@global.keyring_file_data= '$MYSQL_TMP_DIR/mysecret_keyring'; +SET GLOBAL innodb_encryption_threads=3; +SET GLOBAL innodb_encrypt_tables=ONLINE_TO_KEYRING; +CREATE TABLE t7 (a varchar(255)) engine=innodb; +INSERT t7 VALUES (repeat('foobarsecret', 12)); + +SET GLOBAL innodb_encryption_threads=0; +UNINSTALL PLUGIN keyring_file; + +--let $restart_parameters=restart:--innodb-encrypt-tables=ONLINE_FROM_KEYRING_TO_UNENCRYPTED --innodb-encryption-threads=0 +--source include/restart_mysqld.inc + +DROP TABLE t1,t2,t3,t4,t5,t6,t7; + diff --git a/mysql-test/suite/federated/federated.result b/mysql-test/suite/federated/federated.result index bf11e0c6a2e9..c2b782215cb5 100644 --- a/mysql-test/suite/federated/federated.result +++ b/mysql-test/suite/federated/federated.result @@ -2210,9 +2210,9 @@ a b 3 Moe #We will use the error message returned from server to differentiate between DELETE and TRUNCATE DELETE FROM federated.t2; -ERROR HY000: Got error 10000 'Error on remote system: 1451: Cannot delete or update a parent row: a foreign key constraint fails (' from FEDERATED +ERROR HY000: Got error 10000 'Error on remote system: 1451: Cannot delete or update a parent row: a foreign key constraint fails (`federated`.`t1_child`, CONSTRAINT `dc` FOREIGN KEY (`a`) REFERENCES `t1` (`a`))' from FEDERATED TRUNCATE TABLE federated.t2; -ERROR HY000: Got error 10000 'Error on remote system: 1701: Cannot truncate a table referenced in a foreign key constraint (`feder' from FEDERATED +ERROR HY000: Got error 10000 'Error on remote system: 1701: Cannot truncate a table referenced in a foreign key constraint (`federated`.`t1_child`, CONSTRAINT `dc` FOREIGN KEY (`a`) REFERENCES `federated`.`t1` (`a`))' from FEDERATED SELECT * FROM federated.t2; a b 1 Larry diff --git a/mysql-test/suite/innodb/r/innodb_bug14147491.result b/mysql-test/suite/innodb/r/innodb_bug14147491.result index 4f449740af2e..b60ae2be494b 100644 --- a/mysql-test/suite/innodb/r/innodb_bug14147491.result +++ b/mysql-test/suite/innodb/r/innodb_bug14147491.result @@ -1,21 +1,21 @@ +# Ensure that purge will not crash on the table after we corrupt it. +SET GLOBAL innodb_purge_rseg_truncate_frequency = 1; +SET GLOBAL innodb_fast_shutdown=0; # Create and populate the table to be corrupted -CREATE TABLE t1 (a INT AUTO_INCREMENT PRIMARY KEY, b TEXT) COMPRESSION="none", -ROW_FORMAT=COMPACT ENGINE=InnoDB; +set global innodb_file_per_table=ON; +CREATE TABLE t1 (a INT AUTO_INCREMENT PRIMARY KEY, b TEXT) ENGINE=InnoDB; INSERT INTO t1 (b) VALUES ('corrupt me'); INSERT INTO t1 (b) VALUES ('corrupt me'); -# Backup the t1.ibd before corrupting # Corrupt the table Munged a string. Munged a string. # restart -SET DEBUG = '+d,innodb_page_corruption_retries'; -# Write file to make mysql-test-run.pl expect the "crash", but don't -# start it until it's told to -# The below SELECT query will crash the server because some pages -# on the disk are corrupted +# Now t1 is corrupted but we should not crash SELECT * FROM t1; -ERROR HY000: Lost connection to MySQL server during query -# Restore the original t1.ibd -# restart -# Cleanup +ERROR HY000: Operation cannot be performed. The table 'test.t1' is missing, corrupt or contains bad data. +INSERT INTO t1(b) VALUES('abcdef'); +ERROR HY000: Operation cannot be performed. The table 'test.t1' is missing, corrupt or contains bad data. +UPDATE t1 set b = 'deadbeef' where a = 1; +ERROR HY000: Operation cannot be performed. The table 'test.t1' is missing, corrupt or contains bad data. +# Cleanup, this must be possible DROP TABLE t1; diff --git a/mysql-test/suite/innodb/r/innodb_row_log_encryption.result b/mysql-test/suite/innodb/r/innodb_row_log_encryption.result index 18992900543b..2f468223a5d7 100644 --- a/mysql-test/suite/innodb/r/innodb_row_log_encryption.result +++ b/mysql-test/suite/innodb/r/innodb_row_log_encryption.result @@ -19,6 +19,7 @@ SET DEBUG_SYNC= 'now SIGNAL updated'; DROP TABLE t2; SELECT variable_value > 0 FROM performance_schema.global_status WHERE variable_name = 'innodb_num_pages_encrypted'; variable_value > 0 +1 SELECT variable_value > 0 FROM performance_schema.global_status WHERE variable_name = 'innodb_encryption_n_merge_blocks_encrypted'; variable_value > 0 1 diff --git a/mysql-test/suite/innodb/r/monitor.result b/mysql-test/suite/innodb/r/monitor.result index be931282e783..7807166df4b0 100644 --- a/mysql-test/suite/innodb/r/monitor.result +++ b/mysql-test/suite/innodb/r/monitor.result @@ -37,6 +37,7 @@ buffer_pool_pages_free disabled buffer_pages_created disabled buffer_pages_written disabled buffer_pages_read disabled +buffer_pages0_read disabled buffer_data_reads disabled buffer_data_written disabled buffer_flush_batch_scanned disabled @@ -175,6 +176,8 @@ compress_pages_compressed disabled compress_pages_decompressed disabled compression_pad_increments disabled compression_pad_decrements disabled +pages_encrypted disabled +pages_decrypted disabled index_page_splits disabled index_page_merge_attempts disabled index_page_merge_successful disabled diff --git a/mysql-test/suite/innodb/r/percona_force_encryption.result b/mysql-test/suite/innodb/r/percona_force_encryption.result index 0cf9df161c28..7200fe8b4e17 100644 --- a/mysql-test/suite/innodb/r/percona_force_encryption.result +++ b/mysql-test/suite/innodb/r/percona_force_encryption.result @@ -15,7 +15,7 @@ create table t_unencrypted_tablespace (a text) tablespace ts_unencrypted1 ENGINE ERROR HY000: InnoDB: Tablespace `ts_unencrypted1` cannot contain an ENCRYPTED table. set global innodb_encrypt_tables='FORCE'; create table t5_force_explicit_off (a int) engine=innodb encryption="N"; -ERROR HY000: InnoDB: Only ENCRYPTED tables can be created with innodb_encrypt_tables=FORCE. +ERROR HY000: InnoDB: Only Master Key encrypted tables (ENCRYPTION='Y') can be created with innodb_encrypt_tables=FORCE. create table t6_force_default (a int) engine=innodb; create table t6_force_default_dup like t6_force_default; create table t7_partitioned (a int, primary key(a)) @@ -91,13 +91,13 @@ t7_partitioned CREATE TABLE `t7_partitioned` ( (PARTITION p1 VALUES LESS THAN (20) TABLESPACE = `ts_encrypted1` ENGINE = InnoDB, PARTITION p2 VALUES LESS THAN (40) TABLESPACE = `ts_encrypted2` ENGINE = InnoDB) */ alter table t1_default_explicit_on encryption="N"; -ERROR HY000: InnoDB: Only ENCRYPTED tables can be created with innodb_encrypt_tables=FORCE. +ERROR HY000: InnoDB: Only Master Key encrypted tables (ENCRYPTION='Y') can be created with innodb_encrypt_tables=FORCE. alter table t2_default_explicit_off encryption="Y"; alter table t2_default_explicit_off encryption="N"; -ERROR HY000: InnoDB: Only ENCRYPTED tables can be created with innodb_encrypt_tables=FORCE. +ERROR HY000: InnoDB: Only Master Key encrypted tables (ENCRYPTION='Y') can be created with innodb_encrypt_tables=FORCE. alter table t3_on_default; alter table t4_on_explicit_off encryption="N"; -ERROR HY000: InnoDB: Only ENCRYPTED tables can be created with innodb_encrypt_tables=FORCE. +ERROR HY000: InnoDB: Only Master Key encrypted tables (ENCRYPTION='Y') can be created with innodb_encrypt_tables=FORCE. set global innodb_encrypt_tables='ON'; alter table t1_default_explicit_on encryption="N", ALGORITHM=INPLACE; ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Cannot alter encryption attribute by inplace algorithm.. Try ALGORITHM=COPY. diff --git a/mysql-test/suite/innodb/r/percona_sys_tablespace_encrypt.result b/mysql-test/suite/innodb/r/percona_sys_tablespace_encrypt.result index 1930e46574cf..07f1ed680ab9 100644 --- a/mysql-test/suite/innodb/r/percona_sys_tablespace_encrypt.result +++ b/mysql-test/suite/innodb/r/percona_sys_tablespace_encrypt.result @@ -40,7 +40,7 @@ ERROR HY000: InnoDB: Tablespace `innodb_system` cannot contain an ENCRYPTED tabl CREATE TABLE t10(a TEXT) TABLESPACE = innodb_system, ENCRYPTION='Y'; ERROR HY000: InnoDB: Tablespace `innodb_system` cannot contain an ENCRYPTED table. CREATE TABLE t11(a TEXT) TABLESPACE = innodb_system, ENCRYPTION='N'; -ERROR HY000: InnoDB: Only ENCRYPTED tables can be created with innodb_encrypt_tables=FORCE. +ERROR HY000: InnoDB: Only Master Key encrypted tables (ENCRYPTION='Y') can be created with innodb_encrypt_tables=FORCE. # Stop the instance which was created by MTR # create bootstrap file # start unencrypted system with --innodb-sys-tablespace-encrypt=ON @@ -90,7 +90,7 @@ SELECT @@innodb_encrypt_tables; FORCE CREATE TABLE t5_3(a TEXT) TABLESPACE = innodb_system; CREATE TABLE t5_4(a TEXT) TABLESPACE = innodb_system, ENCRYPTION='N'; -ERROR HY000: InnoDB: Only ENCRYPTED tables can be created with innodb_encrypt_tables=FORCE. +ERROR HY000: InnoDB: Only Master Key encrypted tables (ENCRYPTION='Y') can be created with innodb_encrypt_tables=FORCE. CREATE TABLE t5_5(a TEXT) TABLESPACE = innodb_system, ENCRYPTION='Y'; DROP TABLE t5_5; SET GLOBAL innodb_encrypt_tables=default; diff --git a/mysql-test/suite/innodb/r/table_encrypt_1_rotated_keys.result b/mysql-test/suite/innodb/r/table_encrypt_1_rotated_keys.result new file mode 100644 index 000000000000..89da1995ce09 --- /dev/null +++ b/mysql-test/suite/innodb/r/table_encrypt_1_rotated_keys.result @@ -0,0 +1,276 @@ +call mtr.add_suppression("\\[Error\\] InnoDB: Encryption can't find master key, please check the keyring plugin is loaded."); +call mtr.add_suppression("\\[ERROR\\] InnoDB: Failed to find tablespace for table `\.\.*`\.`\.\.*` in the cache."); +call mtr.add_suppression("\\[ERROR\\] InnoDB: Operating system error number 2 in a file operation."); +call mtr.add_suppression("\\[ERROR\\] InnoDB: The error means the system cannot find the path specified."); +call mtr.add_suppression("\\[ERROR\\] InnoDB: Could not find a valid tablespace file for"); +call mtr.add_suppression("ibd can't be decrypted , please confirm the keyfile is match and keyring plugin is loaded."); +call mtr.add_suppression("\\[Warning\\] InnoDB: Ignoring tablespace .* because it could not be opened"); +call mtr.add_suppression("\\[ERROR\\] InnoDB: If you are installing InnoDB, remember that you must create directories yourself, InnoDB does not create them."); +CREATE TABLE t1(c1 INT, c2 char(20)) ENCRYPTION="KEYRING" ENGINE = InnoDB; +ERROR HY000: Can't find master key from keyring, please check keyring plugin is loaded. +CREATE TABLE t1(c1 INT, c2 char(20)) ENGINE = InnoDB; +ALTER TABLE t1 ENCRYPTION="KEYRING", algorithm=copy; +ERROR HY000: Can't find master key from keyring, please check keyring plugin is loaded. +# restart: +DROP TABLE IF EXISTS t1; +SET GLOBAL innodb_file_per_table = 0; +SELECT @@innodb_file_per_table; +@@innodb_file_per_table +0 +CREATE TABLE t1(c1 INT, c2 char(20)) ENCRYPTION="KEYRING" ENGINE = InnoDB; +ERROR HY000: InnoDB: Tablespace `innodb_system` cannot contain an ENCRYPTED table. +SET GLOBAL innodb_file_per_table = 1; +SELECT @@innodb_file_per_table; +@@innodb_file_per_table +1 +CREATE TABLE t1(c int) ENCRYPTION="KEYRING" tablespace innodb_system; +ERROR HY000: InnoDB: Tablespace `innodb_system` cannot contain an ENCRYPTED table. +CREATE TABLE t1(c int) ENCRYPTION="N" tablespace innodb_system; +DROP TABLE t1; +CREATE TEMPORARY TABLE t1(c int) ENCRYPTION="KEYRING"; +ERROR HY000: InnoDB: Unsupported encryption option for temporary tables. +CREATE TEMPORARY TABLE t1(c int) ENCRYPTION="N"; +DROP TABLE t1; +CREATE TABLE t1(c int) ENCRYPTION="R" ENGINE = InnoDB; +ERROR HY000: Invalid encryption option. +CREATE TABLE t1(c1 INT, c2 char(20)) ENCRYPTION="KEYRING" ENGINE = InnoDB; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) DEFAULT NULL, + `c2` char(20) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='KEYRING' +INSERT INTO t1 VALUES(0, "aaaaa"); +INSERT INTO t1 VALUES(1, "bbbbb"); +INSERT INTO t1 VALUES(2, "ccccc"); +INSERT INTO t1 VALUES(3, "ddddd"); +INSERT INTO t1 VALUES(4, "eeeee"); +INSERT INTO t1 VALUES(5, "fffff"); +INSERT INTO t1 VALUES(6, "ggggg"); +INSERT INTO t1 VALUES(7, "hhhhh"); +INSERT INTO t1 VALUES(8, "iiiii"); +INSERT INTO t1 VALUES(9, "jjjjj"); +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +SELECT * FROM t1 ORDER BY c1 LIMIT 10; +c1 c2 +0 aaaaa +0 aaaaa +0 aaaaa +0 aaaaa +0 aaaaa +0 aaaaa +0 aaaaa +0 aaaaa +0 aaaaa +0 aaaaa +# restart +SELECT * FROM t1 ORDER BY c1 LIMIT 10; +ERROR HY000: Can't find master key from keyring, please check keyring plugin is loaded. +# restart: +SELECT * FROM t1 ORDER BY c1 LIMIT 10; +c1 c2 +0 aaaaa +0 aaaaa +0 aaaaa +0 aaaaa +0 aaaaa +0 aaaaa +0 aaaaa +0 aaaaa +0 aaaaa +0 aaaaa +DROP TABLE t1; +CREATE TABLE t1(c1 INT, c2 char(20)) ENCRYPTION="KEYRING" ENGINE = InnoDB; +INSERT INTO t1 VALUES(0, "aaaaa"); +INSERT INTO t1 VALUES(1, "bbbbb"); +INSERT INTO t1 VALUES(2, "ccccc"); +INSERT INTO t1 VALUES(3, "ddddd"); +INSERT INTO t1 VALUES(4, "eeeee"); +INSERT INTO t1 VALUES(5, "fffff"); +INSERT INTO t1 VALUES(6, "ggggg"); +INSERT INTO t1 VALUES(7, "hhhhh"); +INSERT INTO t1 VALUES(8, "iiiii"); +INSERT INTO t1 VALUES(9, "jjjjj"); +# restart: +SELECT * FROM t1 ORDER BY c1 LIMIT 10; +c1 c2 +0 aaaaa +1 bbbbb +2 ccccc +3 ddddd +4 eeeee +5 fffff +6 ggggg +7 hhhhh +8 iiiii +9 jjjjj +ALTER TABLE t1 ENCRYPTION="N", algorithm=inplace; +ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Cannot alter encryption attribute by inplace algorithm.. Try ALGORITHM=COPY. +ALTER TABLE t1 TABLESPACE=`innodb_system`; +ERROR HY000: InnoDB: Tablespace `innodb_system` cannot contain an ENCRYPTED table. +ALTER TABLE t1 ENCRYPTION="N", algorithm=copy; +SELECT * FROM t1 ORDER BY c1 LIMIT 10; +c1 c2 +0 aaaaa +1 bbbbb +2 ccccc +3 ddddd +4 eeeee +5 fffff +6 ggggg +7 hhhhh +8 iiiii +9 jjjjj +DROP TABLE t1; +CREATE TABLE t1 (c1 int) ENCRYPTION='N'; +ALTER TABLE t1 ENCRYPTION='P',algorithm=copy; +ERROR HY000: Invalid encryption option. +ALTER TABLE t1 ADD KEY k1 (c1) ,algorithm=inplace; +ALTER TABLE t1 ENCRYPTION='Y',algorithm=inplace; +ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Cannot alter encryption attribute by inplace algorithm.. Try ALGORITHM=COPY. +drop table t1; +CREATE TABLE t1(c1 INT PRIMARY KEY) COMPRESSION = "ZLIB" ENCRYPTION = "KEYRING" ENGINE = InnoDB; +INSERT INTO t1 VALUES(0), (1), (2), (3), (4), (5), (6), (7), (8), (9); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) NOT NULL, + PRIMARY KEY (`c1`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMPRESSION='ZLIB' ENCRYPTION='KEYRING' +FLUSH TABLES t1 WITH READ LOCK; +UNLOCK TABLES; +SELECT * FROM t1 ORDER BY c1 LIMIT 10; +c1 +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +# restart: +SELECT * FROM t1 ORDER BY c1; +c1 +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +DROP TABLE t1; +CREATE TABLE t1(c1 int null) ENCRYPTION='KEYRING' ROW_FORMAT=compressed; +INSERT INTO t1 VALUES(0), (1), (2), (3), (4), (5), (6), (7), (8), (9); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPRESSED ENCRYPTION='KEYRING' +FLUSH TABLES t1 WITH READ LOCK; +UNLOCK TABLES; +SELECT * FROM t1 ORDER BY c1 LIMIT 10; +c1 +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +# restart: +SELECT * FROM t1 ORDER BY c1; +c1 +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +DROP TABLE t1; +CREATE TABLE t1(c1 INT PRIMARY KEY, g geometry not null, spatial index(g)) ENCRYPTION = "KEYRING" ENGINE = InnoDB; +INSERT INTO t1 VALUES(0, POINT(0, 0)); +INSERT INTO t1 VALUES(1, POINT(1, 1)); +INSERT INTO t1 VALUES(2, POINT(2, 2)); +INSERT INTO t1 VALUES(3, POINT(3, 3)); +INSERT INTO t1 VALUES(4, POINT(4, 4)); +INSERT INTO t1 VALUES(5, POINT(5, 5)); +INSERT INTO t1 VALUES(6, POINT(6, 6)); +INSERT INTO t1 VALUES(7, POINT(7, 7)); +INSERT INTO t1 VALUES(8, POINT(8, 8)); +INSERT INTO t1 VALUES(9, POINT(9, 9)); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) NOT NULL, + `g` geometry NOT NULL, + PRIMARY KEY (`c1`), + SPATIAL KEY `g` (`g`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='KEYRING' +FLUSH TABLES t1 WITH READ LOCK; +UNLOCK TABLES; +SELECT c1, ST_AsText(g) FROM t1 ORDER BY c1 LIMIT 10; +c1 ST_AsText(g) +0 POINT(0 0) +1 POINT(1 1) +2 POINT(2 2) +3 POINT(3 3) +4 POINT(4 4) +5 POINT(5 5) +6 POINT(6 6) +7 POINT(7 7) +8 POINT(8 8) +9 POINT(9 9) +# restart: +SELECT c1, ST_AsText(g) FROM t1 ORDER BY c1 LIMIT 10; +c1 ST_AsText(g) +0 POINT(0 0) +1 POINT(1 1) +2 POINT(2 2) +3 POINT(3 3) +4 POINT(4 4) +5 POINT(5 5) +6 POINT(6 6) +7 POINT(7 7) +8 POINT(8 8) +9 POINT(9 9) +DROP TABLE t1; +SET GLOBAL innodb_file_per_table=OFF; +CREATE TABLE t1 (c1 int); +ALTER TABLE t1 COMPRESSION='zlib'; +ALTER TABLE t1 ENCRYPTION='Y',ALGORITHM=COPY; +ERROR HY000: InnoDB: Tablespace `innodb_system` cannot contain an ENCRYPTED table. +DROP TABLE t1; +SET GLOBAL innodb_file_per_table=ON; +CREATE TABLE t1 (id int unsigned NOT NULL auto_increment PRIMARY KEY, val varchar(20) NOT NULL) ENGINE=InnoDB; +INSERT INTO t1 (val) VALUES ('Sydney'), ('Melbourne'), ('Brisbane'), ('Perth'), ('Adelaide'); +ALTER TABLE t1 ENCRYPTION = 'Y'; +ALTER TABLE t1 ADD COLUMN is_capital char(1) NOT NULL DEFAULT 'N' AFTER val; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `val` varchar(20) NOT NULL, + `is_capital` char(1) NOT NULL DEFAULT 'N', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1 ENCRYPTION='Y' +Pattern "Sydney" not found +SET GLOBAL innodb_file_per_table=1; +DROP TABLE t1; diff --git a/mysql-test/suite/innodb/r/table_encrypt_2_keyring.result b/mysql-test/suite/innodb/r/table_encrypt_2_keyring.result new file mode 100644 index 000000000000..3fc5171ca6c7 --- /dev/null +++ b/mysql-test/suite/innodb/r/table_encrypt_2_keyring.result @@ -0,0 +1,139 @@ +SET @@global.keyring_file_data="MYSQL_TMP_DIR/keyring"; +CREATE TABLE t1(c1 int) ENGINE=InnoDB ENCRYPTION="KEYRING"; +DROP TABLE t1; +# restart: +DROP TABLE IF EXISTS t1; +SET GLOBAL innodb_file_per_table = 1; +SELECT @@innodb_file_per_table; +@@innodb_file_per_table +1 +CREATE TABLE t1(c1 INT, c2 char(20)) ENCRYPTION="KEYRING" ENGINE = InnoDB; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) DEFAULT NULL, + `c2` char(20) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=0 +INSERT INTO t1 VALUES(0, "aaaaa"); +INSERT INTO t1 VALUES(1, "bbbbb"); +INSERT INTO t1 VALUES(2, "ccccc"); +INSERT INTO t1 VALUES(3, "ddddd"); +INSERT INTO t1 VALUES(4, "eeeee"); +INSERT INTO t1 VALUES(5, "fffff"); +INSERT INTO t1 VALUES(6, "ggggg"); +INSERT INTO t1 VALUES(7, "hhhhh"); +INSERT INTO t1 VALUES(8, "iiiii"); +INSERT INTO t1 VALUES(9, "jjjjj"); +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +SELECT * FROM t1 LIMIT 10; +c1 c2 +0 aaaaa +1 bbbbb +2 ccccc +3 ddddd +4 eeeee +5 fffff +6 ggggg +7 hhhhh +8 iiiii +9 jjjjj +# restart: +SELECT * FROM t1 LIMIT 10; +c1 c2 +0 aaaaa +1 bbbbb +2 ccccc +3 ddddd +4 eeeee +5 fffff +6 ggggg +7 hhhhh +8 iiiii +9 jjjjj +ALTER INSTANCE ROTATE INNODB MASTER KEY; +DROP TABLE t1; +CREATE TABLE t1(c1 INT, c2 char(20)) ENCRYPTION="KEYRING" ENGINE = InnoDB; +INSERT INTO t1 VALUES(0, "aaaaa"); +INSERT INTO t1 VALUES(1, "bbbbb"); +INSERT INTO t1 VALUES(2, "ccccc"); +INSERT INTO t1 VALUES(3, "ddddd"); +INSERT INTO t1 VALUES(4, "eeeee"); +INSERT INTO t1 VALUES(5, "fffff"); +INSERT INTO t1 VALUES(6, "ggggg"); +INSERT INTO t1 VALUES(7, "hhhhh"); +INSERT INTO t1 VALUES(8, "iiiii"); +INSERT INTO t1 VALUES(9, "jjjjj"); +# restart: +SELECT * FROM t1 LIMIT 10; +c1 c2 +0 aaaaa +1 bbbbb +2 ccccc +3 ddddd +4 eeeee +5 fffff +6 ggggg +7 hhhhh +8 iiiii +9 jjjjj +DROP TABLE t1; +# restart: +SET block_encryption_mode = 'aes-256-cbc'; +DROP DATABASE IF EXISTS tde_db; +CREATE DATABASE tde_db; +CREATE TABLE tde_db.t1(c1 INT PRIMARY KEY, c2 char(50)) ENCRYPTION = 'KEYRING' ENGINE = InnoDB; +INSERT INTO tde_db.t1 VALUES(0, 'abc'); +INSERT INTO tde_db.t1 VALUES(1, 'xyz'); +INSERT INTO tde_db.t1 VALUES(2, null); +INSERT INTO tde_db.t1 VALUES(3, null); +SELECT * FROM tde_db.t1 LIMIT 10; +c1 c2 +0 abc +1 xyz +2 NULL +3 NULL +ALTER INSTANCE ROTATE INNODB MASTER KEY; +SELECT * FROM tde_db.t1 LIMIT 10; +c1 c2 +0 abc +1 xyz +2 NULL +3 NULL +# Mysqldump output + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `tde_db` /*!40100 DEFAULT CHARACTER SET latin1 */; + +USE `tde_db`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `t1` ( + `c1` int(11) NOT NULL, + `c2` char(50) DEFAULT NULL, + PRIMARY KEY (`c1`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=0; +/*!40101 SET character_set_client = @saved_cs_client */; +INSERT INTO `t1` VALUES (0,'abc'),(1,'xyz'),(2,NULL),(3,NULL); +# Redirecting mysqlpump output to MYSQL_TMP_DIR/mysqlpump_encrypt.sql +DROP DATABASE tde_db; +# Loading tables from mysqlpump_encrypt.sql +SELECT * FROM tde_db.t1 LIMIT 10; +c1 c2 +0 abc +1 xyz +2 NULL +3 NULL +INSERT INTO tde_db.t1 VALUES(4, null); +SELECT * FROM tde_db.t1 LIMIT 10; +c1 c2 +0 abc +1 xyz +2 NULL +3 NULL +4 NULL +DROP DATABASE tde_db; +SET GLOBAL innodb_file_per_table=1; diff --git a/mysql-test/suite/innodb/r/table_encrypt_2_rotated_keys.result b/mysql-test/suite/innodb/r/table_encrypt_2_rotated_keys.result new file mode 100644 index 000000000000..048f32fa3266 --- /dev/null +++ b/mysql-test/suite/innodb/r/table_encrypt_2_rotated_keys.result @@ -0,0 +1,144 @@ +call mtr.add_suppression("\\[Error\\] InnoDB: Can't generate new master key for tablespace encryption, please check the keyring plugin is loaded."); +call mtr.add_suppression("\\[Error\\] InnoDB: Encryption can't find master key, please check the keyring plugin is loaded."); +call mtr.add_suppression("\\[ERROR\\] Function 'keyring_file' already exists"); +call mtr.add_suppression("\\[ERROR\\] Couldn't load plugin named 'keyring_file' with soname 'keyring_file.*'."); +call mtr.add_suppression("Plugin keyring_file reported"); +SET @@global.keyring_file_data="MYSQL_TMP_DIR/keyring"; +CREATE TABLE t1(c1 int) ENGINE=InnoDB ENCRYPTION="KEYRING"; +DROP TABLE t1; +# restart: +DROP TABLE IF EXISTS t1; +SET GLOBAL innodb_file_per_table = 1; +SELECT @@innodb_file_per_table; +@@innodb_file_per_table +1 +CREATE TABLE t1(c1 INT, c2 char(20)) ENCRYPTION="KEYRING" ENGINE = InnoDB; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) DEFAULT NULL, + `c2` char(20) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=0 +INSERT INTO t1 VALUES(0, "aaaaa"); +INSERT INTO t1 VALUES(1, "bbbbb"); +INSERT INTO t1 VALUES(2, "ccccc"); +INSERT INTO t1 VALUES(3, "ddddd"); +INSERT INTO t1 VALUES(4, "eeeee"); +INSERT INTO t1 VALUES(5, "fffff"); +INSERT INTO t1 VALUES(6, "ggggg"); +INSERT INTO t1 VALUES(7, "hhhhh"); +INSERT INTO t1 VALUES(8, "iiiii"); +INSERT INTO t1 VALUES(9, "jjjjj"); +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +SELECT * FROM t1 LIMIT 10; +c1 c2 +0 aaaaa +1 bbbbb +2 ccccc +3 ddddd +4 eeeee +5 fffff +6 ggggg +7 hhhhh +8 iiiii +9 jjjjj +# restart: +SELECT * FROM t1 LIMIT 10; +c1 c2 +0 aaaaa +1 bbbbb +2 ccccc +3 ddddd +4 eeeee +5 fffff +6 ggggg +7 hhhhh +8 iiiii +9 jjjjj +ALTER INSTANCE ROTATE INNODB MASTER KEY; +DROP TABLE t1; +CREATE TABLE t1(c1 INT, c2 char(20)) ENCRYPTION="KEYRING" ENGINE = InnoDB; +INSERT INTO t1 VALUES(0, "aaaaa"); +INSERT INTO t1 VALUES(1, "bbbbb"); +INSERT INTO t1 VALUES(2, "ccccc"); +INSERT INTO t1 VALUES(3, "ddddd"); +INSERT INTO t1 VALUES(4, "eeeee"); +INSERT INTO t1 VALUES(5, "fffff"); +INSERT INTO t1 VALUES(6, "ggggg"); +INSERT INTO t1 VALUES(7, "hhhhh"); +INSERT INTO t1 VALUES(8, "iiiii"); +INSERT INTO t1 VALUES(9, "jjjjj"); +# restart: +SELECT * FROM t1 LIMIT 10; +c1 c2 +0 aaaaa +1 bbbbb +2 ccccc +3 ddddd +4 eeeee +5 fffff +6 ggggg +7 hhhhh +8 iiiii +9 jjjjj +DROP TABLE t1; +# restart: +SET block_encryption_mode = 'aes-256-cbc'; +DROP DATABASE IF EXISTS tde_db; +CREATE DATABASE tde_db; +CREATE TABLE tde_db.t1(c1 INT PRIMARY KEY, c2 char(50)) ENCRYPTION = 'KEYRING' ENGINE = InnoDB; +INSERT INTO tde_db.t1 VALUES(0, 'abc'); +INSERT INTO tde_db.t1 VALUES(1, 'xyz'); +INSERT INTO tde_db.t1 VALUES(2, null); +INSERT INTO tde_db.t1 VALUES(3, null); +SELECT * FROM tde_db.t1 LIMIT 10; +c1 c2 +0 abc +1 xyz +2 NULL +3 NULL +ALTER INSTANCE ROTATE INNODB MASTER KEY; +SELECT * FROM tde_db.t1 LIMIT 10; +c1 c2 +0 abc +1 xyz +2 NULL +3 NULL +# Mysqldump output + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `tde_db` /*!40100 DEFAULT CHARACTER SET latin1 */; + +USE `tde_db`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `t1` ( + `c1` int(11) NOT NULL, + `c2` char(50) DEFAULT NULL, + PRIMARY KEY (`c1`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=0; +/*!40101 SET character_set_client = @saved_cs_client */; +INSERT INTO `t1` VALUES (0,'abc'),(1,'xyz'),(2,NULL),(3,NULL); +# Redirecting mysqlpump output to MYSQL_TMP_DIR/mysqlpump_encrypt.sql +DROP DATABASE tde_db; +# Loading tables from mysqlpump_encrypt.sql +SELECT * FROM tde_db.t1 LIMIT 10; +c1 c2 +0 abc +1 xyz +2 NULL +3 NULL +INSERT INTO tde_db.t1 VALUES(4, null); +SELECT * FROM tde_db.t1 LIMIT 10; +c1 c2 +0 abc +1 xyz +2 NULL +3 NULL +4 NULL +DROP DATABASE tde_db; +SET GLOBAL innodb_file_per_table=1; diff --git a/mysql-test/suite/innodb/r/table_encrypt_3_rotated_keys.result b/mysql-test/suite/innodb/r/table_encrypt_3_rotated_keys.result new file mode 100644 index 000000000000..cc6302719730 --- /dev/null +++ b/mysql-test/suite/innodb/r/table_encrypt_3_rotated_keys.result @@ -0,0 +1,1415 @@ +call mtr.add_suppression("\\[ERROR\\] InnoDB: Encryption can't find master key, please check the keyring plugin is loaded."); +call mtr.add_suppression("Can't generate new master key for tablespace encryption, please check the keyring plugin is loaded."); +call mtr.add_suppression("InnoDB: The error means that another program is using InnoDB's files"); +call mtr.add_suppression("InnoDB: The error means that another program is using InnoDB's files"); +call mtr.add_suppression("\\[ERROR\\] InnoDB: Operating system error number 32 in a file operation."); +# Create encrypt table before loading keyring plugin +SET GLOBAL innodb_file_per_table = 1; +SELECT @@innodb_file_per_table; +@@innodb_file_per_table +1 +DROP TABLE IF EXISTS t_encrypt; +CREATE TABLE t_encrypt(c1 INT, c2 char(20)) ENCRYPTION="KEYRING" ENGINE = InnoDB; +ERROR HY000: Can't find master key from keyring, please check keyring plugin is loaded. +UNINSTALL PLUGIN keyring_file; +ERROR 42000: PLUGIN keyring_file does not exist +ALTER INSTANCE ROTATE INNODB MASTER KEY; +ERROR HY000: Can't find master key from keyring, please check keyring plugin is loaded. +# Starting server with keyring plugin +# restart: +DROP DATABASE IF EXISTS tde_db; +DROP TABLE IF EXISTS tde_db.t_encrypt; +CREATE DATABASE tde_db; +SET GLOBAL innodb_file_per_table = 1; +SELECT @@innodb_file_per_table; +@@innodb_file_per_table +1 +CREATE TABLE tde_db.t_encrypt(c4 JSON , +c5 INT GENERATED ALWAYS AS (JSON_EXTRACT(c4,'$.key_a')) STORED, +c6 INT GENERATED ALWAYS AS (JSON_EXTRACT(c4,'$.key_b')) VIRTUAL, +c7 POINT NOT NULL, +spatial INDEX idx2 (c7) +) ENCRYPTION="KEYRING" ENGINE = InnoDB; +SHOW CREATE TABLE tde_db.t_encrypt; +Table Create Table +t_encrypt CREATE TABLE `t_encrypt` ( + `c4` json DEFAULT NULL, + `c5` int(11) GENERATED ALWAYS AS (json_extract(`c4`,'$.key_a')) STORED, + `c6` int(11) GENERATED ALWAYS AS (json_extract(`c4`,'$.key_b')) VIRTUAL, + `c7` point NOT NULL, + SPATIAL KEY `idx2` (`c7`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='KEYRING' +INSERT INTO tde_db.t_encrypt(c4,c7) VALUES('{ "key_a": 1, "key_b": 2, "key_c": 3 }',ST_GeomFromText('POINT(383293632 1754448)')); +INSERT INTO tde_db.t_encrypt(c4,c7) select c4,c7 from tde_db.t_encrypt; +SELECT c4,c5,ST_AsText(c7) FROM tde_db.t_encrypt LIMIT 10; +c4 c5 ST_AsText(c7) +{"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +{"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +SELECT c4,c5,c6,ST_AsText(c7) FROM tde_db.t_encrypt LIMIT 10; +c4 c5 c6 ST_AsText(c7) +{"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +{"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +SHOW CREATE TABLE tde_db.t_encrypt; +Table Create Table +t_encrypt CREATE TABLE `t_encrypt` ( + `c4` json DEFAULT NULL, + `c5` int(11) GENERATED ALWAYS AS (json_extract(`c4`,'$.key_a')) STORED, + `c6` int(11) GENERATED ALWAYS AS (json_extract(`c4`,'$.key_b')) VIRTUAL, + `c7` point NOT NULL, + SPATIAL KEY `idx2` (`c7`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='KEYRING' +# In connection 1 +LOCK TABLES tde_db.t_encrypt WRITE; +# In connection default +SHOW OPEN TABLES LIKE 't_encrypt'; +Database Table In_use Name_locked +tde_db t_encrypt 1 0 +"ALTER INSTANCE.." do not conflict with "LOCK TABLE .." COMMAND +ALTER INSTANCE ROTATE INNODB MASTER KEY; +# In connection 1 +INSERT INTO tde_db.t_encrypt(c4,c7) VALUES('{ "key_a": 1, "key_b": 2, "key_c": 3 }',ST_GeomFromText('POINT(383293632 1754448)')); +SELECT c4,c5,c6,ST_AsText(c7) FROM tde_db.t_encrypt LIMIT 10; +c4 c5 c6 ST_AsText(c7) +{"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +{"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +{"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +UNLOCK TABLES; +# In connection default +SELECT c4,c5,c6,ST_AsText(c7) FROM tde_db.t_encrypt LIMIT 10; +c4 c5 c6 ST_AsText(c7) +{"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +{"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +{"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +# restart: +SELECT c4,c5,c6,ST_AsText(c7) FROM tde_db.t_encrypt LIMIT 10; +c4 c5 c6 ST_AsText(c7) +{"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +{"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +{"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +DROP DATABASE tde_db; +SET GLOBAL innodb_file_per_table=1; +DROP DATABASE IF EXISTS tde_db; +CREATE DATABASE tde_db; +USE tde_db; +DROP TABLE IF EXISTS tde_db.t_encrypt; +DROP TABLE IF EXISTS tde_db.t_encrypt_1; +SET GLOBAL innodb_file_per_table = 1; +SELECT @@innodb_file_per_table; +@@innodb_file_per_table +1 +CREATE TABLE tde_db.t_encrypt(c1 INT, c2 char(20), c3 BLOB) ENCRYPTION="KEYRING" ENGINE = InnoDB; +CREATE TABLE tde_db.t_encrypt_1(c1 INT, c2 char(20)) ENCRYPTION="Yes" ENGINE = InnoDB; +ERROR HY000: Invalid encryption option. +CREATE TABLE tde_db.t_encrypt_1(c1 INT, c2 char(20)) ENCRYPTION="y" ENGINE = InnoDB; +DROP TABLE tde_db.t_encrypt_1; +CREATE TABLE tde_db.t_encrypt_1(c1 INT, c2 char(20),c3 BLOB) ENGINE = InnoDB; +SHOW CREATE TABLE tde_db.t_encrypt; +Table Create Table +t_encrypt CREATE TABLE `t_encrypt` ( + `c1` int(11) DEFAULT NULL, + `c2` char(20) DEFAULT NULL, + `c3` blob +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='KEYRING' +INSERT INTO tde_db.t_encrypt VALUES(0, "aaaaa",repeat('A', 20000)); +INSERT INTO tde_db.t_encrypt select * from tde_db.t_encrypt; +INSERT INTO tde_db.t_encrypt select * from tde_db.t_encrypt; +INSERT INTO tde_db.t_encrypt select * from tde_db.t_encrypt; +INSERT INTO tde_db.t_encrypt select * from tde_db.t_encrypt; +INSERT INTO tde_db.t_encrypt select * from tde_db.t_encrypt; +INSERT INTO tde_db.t_encrypt select * from tde_db.t_encrypt; +SELECT c1,c2,right(c3, 20) FROM tde_db.t_encrypt LIMIT 10; +c1 c2 right(c3, 20) +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +#Insert into non encrypted table +INSERT INTO tde_db.t_encrypt_1 SELECT * FROM tde_db.t_encrypt; +SELECT c1,c2,right(c3, 20) FROM tde_db.t_encrypt_1 LIMIT 10; +c1 c2 right(c3, 20) +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +SELECT COUNT(*) FROM tde_db.t_encrypt_1; +COUNT(*) +64 +# Starting server with keyring plugin restart with keying +# restart: +SELECT c1,c2,right(c3, 20) FROM tde_db.t_encrypt LIMIT 10; +c1 c2 right(c3, 20) +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +SELECT COUNT(*) FROM tde_db.t_encrypt; +COUNT(*) +64 +#check non encrypted table +SELECT c1,c2,right(c3, 20) FROM tde_db.t_encrypt_1 LIMIT 10; +c1 c2 right(c3, 20) +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +SELECT COUNT(*) FROM tde_db.t_encrypt_1; +COUNT(*) +64 +DROP TABLE tde_db.t_encrypt; +DROP TABLE tde_db.t_encrypt_1; +SET GLOBAL innodb_file_per_table=1; +DROP DATABASE IF EXISTS tde_db; +DROP TABLE IF EXISTS tde_db.t_encrypt; +CREATE DATABASE tde_db; +USE tde_db; +# File per table is set 0. Encryption not possible. +SET GLOBAL innodb_file_per_table = 0; +SELECT @@innodb_file_per_table; +@@innodb_file_per_table +0 +CREATE TABLE tde_db.t_encrypt(c4 JSON , +c5 INT GENERATED ALWAYS AS (JSON_EXTRACT(c4,'$.key_a')) STORED, +c6 INT GENERATED ALWAYS AS (JSON_EXTRACT(c4,'$.key_b')) VIRTUAL, +c7 POINT NOT NULL, +spatial INDEX idx2 (c7) +) ENCRYPTION="KEYRING" ENGINE = InnoDB; +ERROR HY000: InnoDB: Tablespace `innodb_system` cannot contain an ENCRYPTED table. +SET GLOBAL innodb_file_per_table = 1; +SELECT @@innodb_file_per_table; +@@innodb_file_per_table +1 +CREATE TABLESPACE s_alt1 ADD DATAFILE 's_alt1.ibd'; +CREATE TABLE tde_db.t_encrypt (a int, b text) ENCRYPTION="KEYRING" TABLESPACE=`s_alt1` ENGINE=InnoDB; +ERROR HY000: InnoDB: Tablespace `s_alt1` cannot contain an ENCRYPTED table. +DROP TABLESPACE s_alt1; +CREATE TEMPORARY TABLE tde_db.t_encrypt (a int, b text) ENCRYPTION="KEYRING" ENGINE=InnoDB; +ERROR HY000: InnoDB: Unsupported encryption option for temporary tables. +CREATE TABLE tde_db.t_encrypt_myisam (a int, b text) ENCRYPTION="KEYRING" ENGINE=MyISAM; +ERROR HY000: Table storage engine for 't_encrypt_myisam' doesn't have this option +CREATE PROCEDURE tde_db.row_format_t_encrypt(row_form VARCHAR(1000), encryption_type VARCHAR(20)) +begin +declare i int default 1; +declare has_error int default 0; +DECLARE CONTINUE HANDLER FOR 1062 SET has_error = 1; +DROP TABLE IF EXISTS tde_db.t_encrypt; +SET @sql_text = CONCAT('CREATE TABLE tde_db.t_encrypt ('," c2 INT NOT NULL AUTO_INCREMENT PRIMARY KEY,c3 VARCHAR(255), c4 JSON ,c5 INT GENERATED ALWAYS AS (JSON_EXTRACT(c4,'$.key_a')) STORED,c6 INT GENERATED ALWAYS AS (JSON_EXTRACT(c4,'$.key_b')) VIRTUAL,c7 POINT NOT NULL,spatial INDEX idx2 (c7) ) ", ' ENCRYPTION="', encryption_type ,'" ', row_form ,' ENGINE=InnoDB'); +PREPARE stmt FROM @sql_text; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; +SHOW CREATE TABLE tde_db.t_encrypt; +INSERT INTO tde_db.t_encrypt(c3,c4,c7) VALUES (REPEAT('a',200),'{ "key_a": 1, "key_b": 2, "key_c": 3 }',ST_GeomFromText('POINT(383293632 1754448)')); +INSERT INTO tde_db.t_encrypt(c3,c4,c7) SELECT c3,c4,c7 FROM tde_db.t_encrypt; +INSERT INTO tde_db.t_encrypt(c3,c4,c7) SELECT c3,c4,c7 FROM tde_db.t_encrypt; +INSERT INTO tde_db.t_encrypt(c3,c4,c7) SELECT c3,c4,c7 FROM tde_db.t_encrypt; +INSERT INTO tde_db.t_encrypt(c3,c4,c7) SELECT c3,c4,c7 FROM tde_db.t_encrypt; +INSERT INTO tde_db.t_encrypt(c3,c4,c7) SELECT c3,c4,c7 FROM tde_db.t_encrypt; +SELECT COUNT(*) FROM tde_db.t_encrypt; +SELECT c2,c4,c5,ST_AsText(c7) FROM tde_db.t_encrypt LIMIT 10; +SELECT c2,c4,c5,c6,ST_AsText(c7) FROM tde_db.t_encrypt LIMIT 10; +DELETE FROM tde_db.t_encrypt WHERE c2 > 10; +UPDATE tde_db.t_encrypt SET c2 = 100 WHERE c2=1; +SELECT c2,c4,c5,ST_AsText(c7) FROM tde_db.t_encrypt LIMIT 10; +SELECT c2,c4,c5,c6,ST_AsText(c7) FROM tde_db.t_encrypt LIMIT 10; +SHOW CREATE TABLE tde_db.t_encrypt; +end| +call tde_db.row_format_t_encrypt(" ROW_FORMAT=DYNAMIC ", "KEYRING"); +Table Create Table +t_encrypt CREATE TABLE `t_encrypt` ( + `c2` int(11) NOT NULL AUTO_INCREMENT, + `c3` varchar(255) DEFAULT NULL, + `c4` json DEFAULT NULL, + `c5` int(11) GENERATED ALWAYS AS (json_extract(`c4`,'$.key_a')) STORED, + `c6` int(11) GENERATED ALWAYS AS (json_extract(`c4`,'$.key_b')) VIRTUAL, + `c7` point NOT NULL, + PRIMARY KEY (`c2`), + SPATIAL KEY `idx2` (`c7`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC ENCRYPTION='KEYRING' +COUNT(*) +32 +c2 c4 c5 ST_AsText(c7) +1 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +2 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +3 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +4 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +6 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +7 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +8 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +9 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +13 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +14 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +c2 c4 c5 c6 ST_AsText(c7) +1 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +2 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +3 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +4 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +6 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +7 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +8 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +9 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +13 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +14 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +c2 c4 c5 ST_AsText(c7) +2 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +3 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +4 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +6 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +7 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +8 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +9 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +100 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +c2 c4 c5 c6 ST_AsText(c7) +2 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +3 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +4 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +6 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +7 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +8 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +9 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +100 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +Table Create Table +t_encrypt CREATE TABLE `t_encrypt` ( + `c2` int(11) NOT NULL AUTO_INCREMENT, + `c3` varchar(255) DEFAULT NULL, + `c4` json DEFAULT NULL, + `c5` int(11) GENERATED ALWAYS AS (json_extract(`c4`,'$.key_a')) STORED, + `c6` int(11) GENERATED ALWAYS AS (json_extract(`c4`,'$.key_b')) VIRTUAL, + `c7` point NOT NULL, + PRIMARY KEY (`c2`), + SPATIAL KEY `idx2` (`c7`) +) ENGINE=InnoDB AUTO_INCREMENT=59 DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC ENCRYPTION='KEYRING' +# restart with keying +# restart: +SELECT c2,c4,c5,c6,ST_AsText(c7) FROM tde_db.t_encrypt LIMIT 10; +c2 c4 c5 c6 ST_AsText(c7) +2 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +3 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +4 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +6 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +7 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +8 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +9 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +100 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +SELECT COUNT(*) FROM tde_db.t_encrypt; +COUNT(*) +8 +INSERT INTO tde_db.t_encrypt(c3,c4,c7) SELECT c3,c4,c7 FROM tde_db.t_encrypt; +SELECT COUNT(*) FROM tde_db.t_encrypt; +COUNT(*) +16 +call tde_db.row_format_t_encrypt(" ROW_FORMAT=COMPACT ", "KEYRING"); +Table Create Table +t_encrypt CREATE TABLE `t_encrypt` ( + `c2` int(11) NOT NULL AUTO_INCREMENT, + `c3` varchar(255) DEFAULT NULL, + `c4` json DEFAULT NULL, + `c5` int(11) GENERATED ALWAYS AS (json_extract(`c4`,'$.key_a')) STORED, + `c6` int(11) GENERATED ALWAYS AS (json_extract(`c4`,'$.key_b')) VIRTUAL, + `c7` point NOT NULL, + PRIMARY KEY (`c2`), + SPATIAL KEY `idx2` (`c7`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT ENCRYPTION='KEYRING' +COUNT(*) +32 +c2 c4 c5 ST_AsText(c7) +1 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +2 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +3 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +4 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +6 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +7 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +8 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +9 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +13 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +14 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +c2 c4 c5 c6 ST_AsText(c7) +1 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +2 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +3 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +4 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +6 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +7 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +8 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +9 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +13 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +14 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +c2 c4 c5 ST_AsText(c7) +2 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +3 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +4 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +6 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +7 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +8 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +9 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +100 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +c2 c4 c5 c6 ST_AsText(c7) +2 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +3 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +4 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +6 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +7 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +8 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +9 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +100 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +Table Create Table +t_encrypt CREATE TABLE `t_encrypt` ( + `c2` int(11) NOT NULL AUTO_INCREMENT, + `c3` varchar(255) DEFAULT NULL, + `c4` json DEFAULT NULL, + `c5` int(11) GENERATED ALWAYS AS (json_extract(`c4`,'$.key_a')) STORED, + `c6` int(11) GENERATED ALWAYS AS (json_extract(`c4`,'$.key_b')) VIRTUAL, + `c7` point NOT NULL, + PRIMARY KEY (`c2`), + SPATIAL KEY `idx2` (`c7`) +) ENGINE=InnoDB AUTO_INCREMENT=59 DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT ENCRYPTION='KEYRING' +# restart with keying +# restart: +SELECT c2,c4,c5,c6,ST_AsText(c7) FROM tde_db.t_encrypt LIMIT 10; +c2 c4 c5 c6 ST_AsText(c7) +2 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +3 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +4 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +6 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +7 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +8 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +9 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +100 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +SELECT COUNT(*) FROM tde_db.t_encrypt; +COUNT(*) +8 +INSERT INTO tde_db.t_encrypt(c3,c4,c7) SELECT c3,c4,c7 FROM tde_db.t_encrypt; +SELECT COUNT(*) FROM tde_db.t_encrypt; +COUNT(*) +16 +call tde_db.row_format_t_encrypt(" ROW_FORMAT=REDUNDANT ", "KEYRING"); +Table Create Table +t_encrypt CREATE TABLE `t_encrypt` ( + `c2` int(11) NOT NULL AUTO_INCREMENT, + `c3` varchar(255) DEFAULT NULL, + `c4` json DEFAULT NULL, + `c5` int(11) GENERATED ALWAYS AS (json_extract(`c4`,'$.key_a')) STORED, + `c6` int(11) GENERATED ALWAYS AS (json_extract(`c4`,'$.key_b')) VIRTUAL, + `c7` point NOT NULL, + PRIMARY KEY (`c2`), + SPATIAL KEY `idx2` (`c7`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=REDUNDANT ENCRYPTION='KEYRING' +COUNT(*) +32 +c2 c4 c5 ST_AsText(c7) +1 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +2 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +3 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +4 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +6 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +7 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +8 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +9 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +13 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +14 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +c2 c4 c5 c6 ST_AsText(c7) +1 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +2 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +3 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +4 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +6 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +7 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +8 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +9 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +13 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +14 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +c2 c4 c5 ST_AsText(c7) +2 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +3 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +4 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +6 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +7 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +8 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +9 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +100 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +c2 c4 c5 c6 ST_AsText(c7) +2 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +3 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +4 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +6 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +7 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +8 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +9 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +100 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +Table Create Table +t_encrypt CREATE TABLE `t_encrypt` ( + `c2` int(11) NOT NULL AUTO_INCREMENT, + `c3` varchar(255) DEFAULT NULL, + `c4` json DEFAULT NULL, + `c5` int(11) GENERATED ALWAYS AS (json_extract(`c4`,'$.key_a')) STORED, + `c6` int(11) GENERATED ALWAYS AS (json_extract(`c4`,'$.key_b')) VIRTUAL, + `c7` point NOT NULL, + PRIMARY KEY (`c2`), + SPATIAL KEY `idx2` (`c7`) +) ENGINE=InnoDB AUTO_INCREMENT=59 DEFAULT CHARSET=latin1 ROW_FORMAT=REDUNDANT ENCRYPTION='KEYRING' +# restart with keying +# restart: +SELECT c2,c4,c5,c6,ST_AsText(c7) FROM tde_db.t_encrypt LIMIT 10; +c2 c4 c5 c6 ST_AsText(c7) +2 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +3 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +4 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +6 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +7 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +8 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +9 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +100 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +SELECT COUNT(*) FROM tde_db.t_encrypt; +COUNT(*) +8 +INSERT INTO tde_db.t_encrypt(c3,c4,c7) SELECT c3,c4,c7 FROM tde_db.t_encrypt; +SELECT COUNT(*) FROM tde_db.t_encrypt; +COUNT(*) +16 +call tde_db.row_format_t_encrypt(" ROW_FORMAT=COMPRESSED ", "KEYRING"); +Table Create Table +t_encrypt CREATE TABLE `t_encrypt` ( + `c2` int(11) NOT NULL AUTO_INCREMENT, + `c3` varchar(255) DEFAULT NULL, + `c4` json DEFAULT NULL, + `c5` int(11) GENERATED ALWAYS AS (json_extract(`c4`,'$.key_a')) STORED, + `c6` int(11) GENERATED ALWAYS AS (json_extract(`c4`,'$.key_b')) VIRTUAL, + `c7` point NOT NULL, + PRIMARY KEY (`c2`), + SPATIAL KEY `idx2` (`c7`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPRESSED ENCRYPTION='KEYRING' +COUNT(*) +32 +c2 c4 c5 ST_AsText(c7) +1 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +2 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +3 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +4 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +6 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +7 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +8 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +9 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +13 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +14 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +c2 c4 c5 c6 ST_AsText(c7) +1 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +2 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +3 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +4 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +6 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +7 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +8 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +9 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +13 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +14 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +c2 c4 c5 ST_AsText(c7) +2 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +3 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +4 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +6 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +7 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +8 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +9 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +100 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +c2 c4 c5 c6 ST_AsText(c7) +2 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +3 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +4 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +6 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +7 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +8 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +9 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +100 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +Table Create Table +t_encrypt CREATE TABLE `t_encrypt` ( + `c2` int(11) NOT NULL AUTO_INCREMENT, + `c3` varchar(255) DEFAULT NULL, + `c4` json DEFAULT NULL, + `c5` int(11) GENERATED ALWAYS AS (json_extract(`c4`,'$.key_a')) STORED, + `c6` int(11) GENERATED ALWAYS AS (json_extract(`c4`,'$.key_b')) VIRTUAL, + `c7` point NOT NULL, + PRIMARY KEY (`c2`), + SPATIAL KEY `idx2` (`c7`) +) ENGINE=InnoDB AUTO_INCREMENT=59 DEFAULT CHARSET=latin1 ROW_FORMAT=COMPRESSED ENCRYPTION='KEYRING' +# restart with keying +# restart: +SELECT c2,c4,c5,c6,ST_AsText(c7) FROM tde_db.t_encrypt LIMIT 10; +c2 c4 c5 c6 ST_AsText(c7) +2 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +3 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +4 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +6 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +7 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +8 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +9 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +100 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +SELECT COUNT(*) FROM tde_db.t_encrypt; +COUNT(*) +8 +INSERT INTO tde_db.t_encrypt(c3,c4,c7) SELECT c3,c4,c7 FROM tde_db.t_encrypt; +SELECT COUNT(*) FROM tde_db.t_encrypt; +COUNT(*) +16 +call tde_db.row_format_t_encrypt(" ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4 ", "KEYRING"); +Table Create Table +t_encrypt CREATE TABLE `t_encrypt` ( + `c2` int(11) NOT NULL AUTO_INCREMENT, + `c3` varchar(255) DEFAULT NULL, + `c4` json DEFAULT NULL, + `c5` int(11) GENERATED ALWAYS AS (json_extract(`c4`,'$.key_a')) STORED, + `c6` int(11) GENERATED ALWAYS AS (json_extract(`c4`,'$.key_b')) VIRTUAL, + `c7` point NOT NULL, + PRIMARY KEY (`c2`), + SPATIAL KEY `idx2` (`c7`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4 ENCRYPTION='KEYRING' +COUNT(*) +32 +c2 c4 c5 ST_AsText(c7) +1 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +2 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +3 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +4 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +6 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +7 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +8 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +9 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +13 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +14 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +c2 c4 c5 c6 ST_AsText(c7) +1 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +2 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +3 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +4 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +6 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +7 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +8 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +9 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +13 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +14 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +c2 c4 c5 ST_AsText(c7) +2 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +3 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +4 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +6 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +7 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +8 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +9 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +100 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +c2 c4 c5 c6 ST_AsText(c7) +2 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +3 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +4 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +6 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +7 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +8 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +9 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +100 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +Table Create Table +t_encrypt CREATE TABLE `t_encrypt` ( + `c2` int(11) NOT NULL AUTO_INCREMENT, + `c3` varchar(255) DEFAULT NULL, + `c4` json DEFAULT NULL, + `c5` int(11) GENERATED ALWAYS AS (json_extract(`c4`,'$.key_a')) STORED, + `c6` int(11) GENERATED ALWAYS AS (json_extract(`c4`,'$.key_b')) VIRTUAL, + `c7` point NOT NULL, + PRIMARY KEY (`c2`), + SPATIAL KEY `idx2` (`c7`) +) ENGINE=InnoDB AUTO_INCREMENT=59 DEFAULT CHARSET=latin1 ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4 ENCRYPTION='KEYRING' +# restart with keying +# restart: +SELECT c2,c4,c5,c6,ST_AsText(c7) FROM tde_db.t_encrypt LIMIT 10; +c2 c4 c5 c6 ST_AsText(c7) +2 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +3 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +4 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +6 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +7 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +8 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +9 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +100 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +SELECT COUNT(*) FROM tde_db.t_encrypt; +COUNT(*) +8 +INSERT INTO tde_db.t_encrypt(c3,c4,c7) SELECT c3,c4,c7 FROM tde_db.t_encrypt; +SELECT COUNT(*) FROM tde_db.t_encrypt; +COUNT(*) +16 +# Create partition table +DROP TABLE tde_db.t_encrypt; +CREATE TABLE tde_db.t_encrypt (c2 INT NOT NULL AUTO_INCREMENT PRIMARY KEY,c3 VARCHAR(255), c4 JSON ,c5 INT GENERATED ALWAYS AS (JSON_EXTRACT(c4,'$.key_a')) STORED,c6 INT GENERATED ALWAYS AS (JSON_EXTRACT(c4,'$.key_b')) VIRTUAL ) ENCRYPTION="KEYRING" ENGINE=InnoDB PARTITION BY RANGE (c2) (PARTITION p1 VALUES LESS THAN (4),PARTITION p2 VALUES LESS THAN (8),PARTITION p3 VALUES LESS THAN (1000)) ; +SHOW CREATE TABLE tde_db.t_encrypt; +Table Create Table +t_encrypt CREATE TABLE `t_encrypt` ( + `c2` int(11) NOT NULL AUTO_INCREMENT, + `c3` varchar(255) DEFAULT NULL, + `c4` json DEFAULT NULL, + `c5` int(11) GENERATED ALWAYS AS (json_extract(`c4`,'$.key_a')) STORED, + `c6` int(11) GENERATED ALWAYS AS (json_extract(`c4`,'$.key_b')) VIRTUAL, + PRIMARY KEY (`c2`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='KEYRING' +/*!50100 PARTITION BY RANGE (c2) +(PARTITION p1 VALUES LESS THAN (4) ENGINE = InnoDB, + PARTITION p2 VALUES LESS THAN (8) ENGINE = InnoDB, + PARTITION p3 VALUES LESS THAN (1000) ENGINE = InnoDB) */ +INSERT INTO tde_db.t_encrypt(c3,c4) VALUES (REPEAT('a',200),'{ "key_a": 1, "key_b": 2, "key_c": 3 }'); +INSERT INTO tde_db.t_encrypt(c3,c4) SELECT c3,c4 FROM tde_db.t_encrypt; +INSERT INTO tde_db.t_encrypt(c3,c4) SELECT c3,c4 FROM tde_db.t_encrypt; +INSERT INTO tde_db.t_encrypt(c3,c4) SELECT c3,c4 FROM tde_db.t_encrypt; +INSERT INTO tde_db.t_encrypt(c3,c4) SELECT c3,c4 FROM tde_db.t_encrypt; +INSERT INTO tde_db.t_encrypt(c3,c4) SELECT c3,c4 FROM tde_db.t_encrypt; +SELECT c2,c4,c5 FROM tde_db.t_encrypt LIMIT 10; +c2 c4 c5 +1 {"key_a": 1, "key_b": 2, "key_c": 3} 1 +2 {"key_a": 1, "key_b": 2, "key_c": 3} 1 +3 {"key_a": 1, "key_b": 2, "key_c": 3} 1 +4 {"key_a": 1, "key_b": 2, "key_c": 3} 1 +5 {"key_a": 1, "key_b": 2, "key_c": 3} 1 +6 {"key_a": 1, "key_b": 2, "key_c": 3} 1 +7 {"key_a": 1, "key_b": 2, "key_c": 3} 1 +8 {"key_a": 1, "key_b": 2, "key_c": 3} 1 +9 {"key_a": 1, "key_b": 2, "key_c": 3} 1 +10 {"key_a": 1, "key_b": 2, "key_c": 3} 1 +SELECT c2,c4,c5,c6 FROM tde_db.t_encrypt LIMIT 10; +c2 c4 c5 c6 +1 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 +2 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 +3 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 +4 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 +5 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 +6 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 +7 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 +8 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 +9 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 +10 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 +DELETE FROM tde_db.t_encrypt WHERE c2 > 10; +UPDATE tde_db.t_encrypt SET c2 = 100 WHERE c2=1; +SELECT c2,c4,c5 FROM tde_db.t_encrypt LIMIT 10; +c2 c4 c5 +2 {"key_a": 1, "key_b": 2, "key_c": 3} 1 +3 {"key_a": 1, "key_b": 2, "key_c": 3} 1 +4 {"key_a": 1, "key_b": 2, "key_c": 3} 1 +5 {"key_a": 1, "key_b": 2, "key_c": 3} 1 +6 {"key_a": 1, "key_b": 2, "key_c": 3} 1 +7 {"key_a": 1, "key_b": 2, "key_c": 3} 1 +8 {"key_a": 1, "key_b": 2, "key_c": 3} 1 +9 {"key_a": 1, "key_b": 2, "key_c": 3} 1 +10 {"key_a": 1, "key_b": 2, "key_c": 3} 1 +100 {"key_a": 1, "key_b": 2, "key_c": 3} 1 +SELECT c2,c4,c5,c6 FROM tde_db.t_encrypt LIMIT 10; +c2 c4 c5 c6 +2 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 +3 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 +4 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 +5 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 +6 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 +7 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 +8 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 +9 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 +10 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 +100 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 +ALTER TABLE tde_db.t_encrypt TRUNCATE PARTITION p2; +SELECT c2,c4,c5 FROM tde_db.t_encrypt LIMIT 10; +c2 c4 c5 +2 {"key_a": 1, "key_b": 2, "key_c": 3} 1 +3 {"key_a": 1, "key_b": 2, "key_c": 3} 1 +8 {"key_a": 1, "key_b": 2, "key_c": 3} 1 +9 {"key_a": 1, "key_b": 2, "key_c": 3} 1 +10 {"key_a": 1, "key_b": 2, "key_c": 3} 1 +100 {"key_a": 1, "key_b": 2, "key_c": 3} 1 +SELECT c2,c4,c5,c6 FROM tde_db.t_encrypt LIMIT 10; +c2 c4 c5 c6 +2 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 +3 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 +8 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 +9 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 +10 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 +100 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 +SHOW CREATE TABLE tde_db.t_encrypt; +Table Create Table +t_encrypt CREATE TABLE `t_encrypt` ( + `c2` int(11) NOT NULL AUTO_INCREMENT, + `c3` varchar(255) DEFAULT NULL, + `c4` json DEFAULT NULL, + `c5` int(11) GENERATED ALWAYS AS (json_extract(`c4`,'$.key_a')) STORED, + `c6` int(11) GENERATED ALWAYS AS (json_extract(`c4`,'$.key_b')) VIRTUAL, + PRIMARY KEY (`c2`) +) ENGINE=InnoDB AUTO_INCREMENT=101 DEFAULT CHARSET=latin1 ENCRYPTION='KEYRING' +/*!50100 PARTITION BY RANGE (c2) +(PARTITION p1 VALUES LESS THAN (4) ENGINE = InnoDB, + PARTITION p2 VALUES LESS THAN (8) ENGINE = InnoDB, + PARTITION p3 VALUES LESS THAN (1000) ENGINE = InnoDB) */ +# restart with keying +# restart: +SELECT c2,c4,c5,c6 FROM tde_db.t_encrypt LIMIT 10; +c2 c4 c5 c6 +2 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 +3 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 +8 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 +9 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 +10 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 +100 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 +DROP TABLE tde_db.t_encrypt; +DROP DATABASE tde_db; +SET GLOBAL innodb_file_per_table=1; +DROP DATABASE IF EXISTS tde_db; +DROP TABLE IF EXISTS tde_db. t_encrypt; +CREATE DATABASE tde_db; +USE tde_db; +SET GLOBAL innodb_file_per_table = 1; +SELECT @@innodb_file_per_table; +@@innodb_file_per_table +1 +CREATE TABLE tde_db.t_encrypt(c2 INT NOT NULL PRIMARY KEY, +c3 CHAR(255) Default 'No text', +c4 JSON , +c5 INT GENERATED ALWAYS AS (JSON_EXTRACT(c4,'$.key_a')) STORED, +c6 INT GENERATED ALWAYS AS (JSON_EXTRACT(c4,'$.key_b')) VIRTUAL, +c7 POINT NOT NULL, +spatial INDEX idx2 (c7) +) ENCRYPTION="KEYRING" ENGINE = InnoDB; +CREATE PROCEDURE tde_db.populate_t_encrypt() +begin +declare i int default 1; +declare has_error int default 0; +DECLARE CONTINUE HANDLER FOR 1062 SET has_error = 1; +while (i <= 2000) DO +insert into tde_db.t_encrypt(c2,c3,c4,c7) VALUES(i,CONCAT(REPEAT('a',200),LPAD(CAST(i AS CHAR),4,'0')),'{ "key_a": 1, "key_b": 2, "key_c": 3 }',ST_GeomFromText('POINT(383293632 1754448)')); +set i = i + 1; +end while; +end| +CREATE PROCEDURE tde_db.populate_t_encrypt_small() +begin +declare i int default 1; +declare has_error int default 0; +DECLARE CONTINUE HANDLER FOR 1062 SET has_error = 1; +while (i <= 500) DO +insert into tde_db.t_encrypt(c2,c3,c4,c7) VALUES(i,CONCAT(REPEAT('a',200),LPAD(CAST(i AS CHAR),4,'0')),'{ "key_a": 1, "key_b": 2, "key_c": 3 }',ST_GeomFromText('POINT(383293632 1754448)')); +set i = i + 1; +end while; +end| +CREATE PROCEDURE tde_db.read_t_encrypt() +begin +declare i int default 1; +while (i <= 30) DO +SELECT * FROM (SELECT * FROM tde_db.t_encrypt ORDER BY RAND() LIMIT 1) AS A WHERE A.c2 < 0 ; +set i = i + 1; +end while; +end| +CREATE PROCEDURE tde_db.rotate_master_key() +begin +declare i int default 1; +declare has_error int default 0; +while (i <= 500) DO +ALTER INSTANCE ROTATE INNODB MASTER KEY; +set i = i + 1; +end while; +end| +CREATE PROCEDURE tde_db.create_encrypt_table(encrypt VARCHAR(20)) +begin +declare i int default 1; +declare has_error int default 0; +while (i <= 50) DO +SET @sql_text = CONCAT('CREATE TABLE ',CONCAT('tde_db.t_encrypt_',encrypt,'_',i),' (c1 INT) ENCRYPTION="',encrypt,'"' ,' ENGINE=InnoDB'); +PREPARE stmt FROM @sql_text; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; +set i = i + 1; +end while; +end| +SHOW CREATE TABLE tde_db.t_encrypt; +Table Create Table +t_encrypt CREATE TABLE `t_encrypt` ( + `c2` int(11) NOT NULL, + `c3` char(255) DEFAULT 'No text', + `c4` json DEFAULT NULL, + `c5` int(11) GENERATED ALWAYS AS (json_extract(`c4`,'$.key_a')) STORED, + `c6` int(11) GENERATED ALWAYS AS (json_extract(`c4`,'$.key_b')) VIRTUAL, + `c7` point NOT NULL, + PRIMARY KEY (`c2`), + SPATIAL KEY `idx2` (`c7`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='KEYRING' +# In connection con1 - Running insert +call tde_db.populate_t_encrypt(); +# In connection con2 - Running insert +call tde_db.populate_t_encrypt_small(); +# In connection con3 : Running select +call tde_db.read_t_encrypt(); +# In connection con4 : Running select +call tde_db.read_t_encrypt(); +# In connection con5 - Running "alter instance" +call tde_db.rotate_master_key(); +# In connection con6 - Running "alter instance" +call tde_db.rotate_master_key(); +# In connection con7 - Running "create table" +call tde_db.create_encrypt_table("KEYRING"); +# In connection con8 - Running "create table" +call tde_db.create_encrypt_table("N"); +# In connection con1 +# In connection con2 +# In connection con3 +c2 c3 c4 c5 c6 c7 +c2 c3 c4 c5 c6 c7 +c2 c3 c4 c5 c6 c7 +c2 c3 c4 c5 c6 c7 +c2 c3 c4 c5 c6 c7 +c2 c3 c4 c5 c6 c7 +c2 c3 c4 c5 c6 c7 +c2 c3 c4 c5 c6 c7 +c2 c3 c4 c5 c6 c7 +c2 c3 c4 c5 c6 c7 +c2 c3 c4 c5 c6 c7 +c2 c3 c4 c5 c6 c7 +c2 c3 c4 c5 c6 c7 +c2 c3 c4 c5 c6 c7 +c2 c3 c4 c5 c6 c7 +c2 c3 c4 c5 c6 c7 +c2 c3 c4 c5 c6 c7 +c2 c3 c4 c5 c6 c7 +c2 c3 c4 c5 c6 c7 +c2 c3 c4 c5 c6 c7 +c2 c3 c4 c5 c6 c7 +c2 c3 c4 c5 c6 c7 +c2 c3 c4 c5 c6 c7 +c2 c3 c4 c5 c6 c7 +c2 c3 c4 c5 c6 c7 +c2 c3 c4 c5 c6 c7 +c2 c3 c4 c5 c6 c7 +c2 c3 c4 c5 c6 c7 +c2 c3 c4 c5 c6 c7 +c2 c3 c4 c5 c6 c7 +# In connection con4 +c2 c3 c4 c5 c6 c7 +c2 c3 c4 c5 c6 c7 +c2 c3 c4 c5 c6 c7 +c2 c3 c4 c5 c6 c7 +c2 c3 c4 c5 c6 c7 +c2 c3 c4 c5 c6 c7 +c2 c3 c4 c5 c6 c7 +c2 c3 c4 c5 c6 c7 +c2 c3 c4 c5 c6 c7 +c2 c3 c4 c5 c6 c7 +c2 c3 c4 c5 c6 c7 +c2 c3 c4 c5 c6 c7 +c2 c3 c4 c5 c6 c7 +c2 c3 c4 c5 c6 c7 +c2 c3 c4 c5 c6 c7 +c2 c3 c4 c5 c6 c7 +c2 c3 c4 c5 c6 c7 +c2 c3 c4 c5 c6 c7 +c2 c3 c4 c5 c6 c7 +c2 c3 c4 c5 c6 c7 +c2 c3 c4 c5 c6 c7 +c2 c3 c4 c5 c6 c7 +c2 c3 c4 c5 c6 c7 +c2 c3 c4 c5 c6 c7 +c2 c3 c4 c5 c6 c7 +c2 c3 c4 c5 c6 c7 +c2 c3 c4 c5 c6 c7 +c2 c3 c4 c5 c6 c7 +c2 c3 c4 c5 c6 c7 +c2 c3 c4 c5 c6 c7 +# In connection con5 +# In connection con6 +# In connection con7 +# In connection con8 +USE tde_db; +SELECT c2,right(c3,20),c4,c5,ST_AsText(c7) FROM tde_db.t_encrypt LIMIT 10; +c2 right(c3,20) c4 c5 ST_AsText(c7) +1 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +2 aaaaaaaaaaaaaaaa0002 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +3 aaaaaaaaaaaaaaaa0003 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +4 aaaaaaaaaaaaaaaa0004 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +5 aaaaaaaaaaaaaaaa0005 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +6 aaaaaaaaaaaaaaaa0006 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +7 aaaaaaaaaaaaaaaa0007 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +8 aaaaaaaaaaaaaaaa0008 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +9 aaaaaaaaaaaaaaaa0009 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +10 aaaaaaaaaaaaaaaa0010 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +SELECT c2,right(c3,20),c4,c5,c6,ST_AsText(c7) FROM tde_db.t_encrypt LIMIT 10; +c2 right(c3,20) c4 c5 c6 ST_AsText(c7) +1 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +2 aaaaaaaaaaaaaaaa0002 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +3 aaaaaaaaaaaaaaaa0003 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +4 aaaaaaaaaaaaaaaa0004 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +5 aaaaaaaaaaaaaaaa0005 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +6 aaaaaaaaaaaaaaaa0006 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +7 aaaaaaaaaaaaaaaa0007 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +8 aaaaaaaaaaaaaaaa0008 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +9 aaaaaaaaaaaaaaaa0009 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +10 aaaaaaaaaaaaaaaa0010 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +SELECT COUNT(*) FROM tde_db.t_encrypt; +COUNT(*) +2000 +SELECT c2,right(c3,20),c4,c5,ST_AsText(c7) FROM tde_db.t_encrypt WHERE c2%200 = 0; +c2 right(c3,20) c4 c5 ST_AsText(c7) +200 aaaaaaaaaaaaaaaa0200 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +400 aaaaaaaaaaaaaaaa0400 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +600 aaaaaaaaaaaaaaaa0600 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +800 aaaaaaaaaaaaaaaa0800 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +1000 aaaaaaaaaaaaaaaa1000 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +1200 aaaaaaaaaaaaaaaa1200 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +1400 aaaaaaaaaaaaaaaa1400 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +1600 aaaaaaaaaaaaaaaa1600 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +1800 aaaaaaaaaaaaaaaa1800 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +2000 aaaaaaaaaaaaaaaa2000 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +SELECT c2,right(c3,20),c4,c5,c6,ST_AsText(c7) FROM tde_db.t_encrypt WHERE c2%200 = 0; +c2 right(c3,20) c4 c5 c6 ST_AsText(c7) +200 aaaaaaaaaaaaaaaa0200 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +400 aaaaaaaaaaaaaaaa0400 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +600 aaaaaaaaaaaaaaaa0600 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +800 aaaaaaaaaaaaaaaa0800 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +1000 aaaaaaaaaaaaaaaa1000 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +1200 aaaaaaaaaaaaaaaa1200 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +1400 aaaaaaaaaaaaaaaa1400 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +1600 aaaaaaaaaaaaaaaa1600 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +1800 aaaaaaaaaaaaaaaa1800 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +2000 aaaaaaaaaaaaaaaa2000 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +# restart with keying +# restart: +SELECT c2,right(c3,20),c4,c5,ST_AsText(c7) FROM tde_db.t_encrypt LIMIT 10; +c2 right(c3,20) c4 c5 ST_AsText(c7) +1 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +2 aaaaaaaaaaaaaaaa0002 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +3 aaaaaaaaaaaaaaaa0003 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +4 aaaaaaaaaaaaaaaa0004 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +5 aaaaaaaaaaaaaaaa0005 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +6 aaaaaaaaaaaaaaaa0006 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +7 aaaaaaaaaaaaaaaa0007 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +8 aaaaaaaaaaaaaaaa0008 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +9 aaaaaaaaaaaaaaaa0009 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +10 aaaaaaaaaaaaaaaa0010 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +SELECT c2,right(c3,20),c4,c5,c6,ST_AsText(c7) FROM tde_db.t_encrypt LIMIT 10; +c2 right(c3,20) c4 c5 c6 ST_AsText(c7) +1 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +2 aaaaaaaaaaaaaaaa0002 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +3 aaaaaaaaaaaaaaaa0003 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +4 aaaaaaaaaaaaaaaa0004 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +5 aaaaaaaaaaaaaaaa0005 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +6 aaaaaaaaaaaaaaaa0006 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +7 aaaaaaaaaaaaaaaa0007 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +8 aaaaaaaaaaaaaaaa0008 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +9 aaaaaaaaaaaaaaaa0009 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +10 aaaaaaaaaaaaaaaa0010 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +SELECT COUNT(*) FROM tde_db.t_encrypt; +COUNT(*) +2000 +SELECT c2,right(c3,20),c4,c5,ST_AsText(c7) FROM tde_db.t_encrypt WHERE c2%200 = 0; +c2 right(c3,20) c4 c5 ST_AsText(c7) +200 aaaaaaaaaaaaaaaa0200 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +400 aaaaaaaaaaaaaaaa0400 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +600 aaaaaaaaaaaaaaaa0600 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +800 aaaaaaaaaaaaaaaa0800 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +1000 aaaaaaaaaaaaaaaa1000 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +1200 aaaaaaaaaaaaaaaa1200 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +1400 aaaaaaaaaaaaaaaa1400 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +1600 aaaaaaaaaaaaaaaa1600 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +1800 aaaaaaaaaaaaaaaa1800 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +2000 aaaaaaaaaaaaaaaa2000 {"key_a": 1, "key_b": 2, "key_c": 3} 1 POINT(383293632 1754448) +SELECT c2,right(c3,20),c4,c5,c6,ST_AsText(c7) FROM tde_db.t_encrypt WHERE c2%200 = 0; +c2 right(c3,20) c4 c5 c6 ST_AsText(c7) +200 aaaaaaaaaaaaaaaa0200 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +400 aaaaaaaaaaaaaaaa0400 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +600 aaaaaaaaaaaaaaaa0600 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +800 aaaaaaaaaaaaaaaa0800 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +1000 aaaaaaaaaaaaaaaa1000 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +1200 aaaaaaaaaaaaaaaa1200 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +1400 aaaaaaaaaaaaaaaa1400 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +1600 aaaaaaaaaaaaaaaa1600 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +1800 aaaaaaaaaaaaaaaa1800 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +2000 aaaaaaaaaaaaaaaa2000 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +DROP DATABASE tde_db; +SET GLOBAL innodb_file_per_table=1; +DROP DATABASE IF EXISTS tde_db; +CREATE DATABASE tde_db; +USE tde_db; +DROP TABLE IF EXISTS tde_db.t_encrypt; +SET GLOBAL innodb_file_per_table = 1; +SELECT @@innodb_file_per_table; +@@innodb_file_per_table +1 +CREATE TABLE tde_db.t_encrypt(c1 INT, c2 char(20), c3 BLOB) ENCRYPTION="KEYRING" ENGINE = InnoDB; +SHOW CREATE TABLE tde_db.t_encrypt; +Table Create Table +t_encrypt CREATE TABLE `t_encrypt` ( + `c1` int(11) DEFAULT NULL, + `c2` char(20) DEFAULT NULL, + `c3` blob +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='KEYRING' +INSERT INTO tde_db.t_encrypt VALUES(0, "aaaaa",repeat('A', 20000)); +INSERT INTO tde_db.t_encrypt select * from tde_db.t_encrypt; +INSERT INTO tde_db.t_encrypt select * from tde_db.t_encrypt; +INSERT INTO tde_db.t_encrypt select * from tde_db.t_encrypt; +INSERT INTO tde_db.t_encrypt select * from tde_db.t_encrypt; +INSERT INTO tde_db.t_encrypt select * from tde_db.t_encrypt; +INSERT INTO tde_db.t_encrypt select * from tde_db.t_encrypt; +SELECT c1,c2,right(c3, 20) FROM tde_db.t_encrypt LIMIT 10; +c1 c2 right(c3, 20) +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +CREATE USER encryptprivuser@localhost IDENTIFIED BY 'auth'; +GRANT ALL PRIVILEGES ON *.* to encryptprivuser@localhost; +FLUSH PRIVILEGES; +CREATE USER encryptnonprivuser@localhost IDENTIFIED BY 'noauth'; +GRANT SELECT ON *.* to encryptnonprivuser@localhost; +FLUSH PRIVILEGES; +SELECT c1,c2,right(c3, 20) FROM tde_db.t_encrypt LIMIT 10; +c1 c2 right(c3, 20) +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +# In connection 1 +SELECT CURRENT_USER(); +CURRENT_USER() +encryptprivuser@localhost +SELECT c1,c2,right(c3, 20) FROM tde_db.t_encrypt LIMIT 10; +c1 c2 right(c3, 20) +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +ALTER INSTANCE ROTATE INNODB MASTER KEY; +SELECT c1,c2,right(c3, 20) FROM tde_db.t_encrypt LIMIT 10; +c1 c2 right(c3, 20) +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +# In connection 2 +SELECT CURRENT_USER(); +CURRENT_USER() +encryptnonprivuser@localhost +SELECT c1,c2,right(c3, 20) FROM tde_db.t_encrypt LIMIT 10; +c1 c2 right(c3, 20) +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +ALTER INSTANCE ROTATE INNODB MASTER KEY; +ERROR 42000: Access denied; you need (at least one of) the SUPER privilege(s) for this operation +CREATE TABLE tde_db.t_encrypt_np(c1 INT, c2 char(20), c3 BLOB) ENCRYPTION="KEYRING" ENGINE = InnoDB; +ERROR 42000: CREATE command denied to user 'encryptnonprivuser'@'localhost' for table 't_encrypt_np' +SELECT c1,c2,right(c3, 20) FROM tde_db.t_encrypt LIMIT 10; +c1 c2 right(c3, 20) +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +# In connection default +# Starting server with keyring plugin +# restart: +SELECT c1,c2,right(c3, 20) FROM tde_db.t_encrypt LIMIT 10; +c1 c2 right(c3, 20) +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +0 aaaaa AAAAAAAAAAAAAAAAAAAA +DROP TABLE tde_db.t_encrypt; +DROP USER encryptnonprivuser@localhost; +DROP USER encryptprivuser@localhost; +SET GLOBAL innodb_file_per_table=1; +DROP DATABASE IF EXISTS tde_db; +CREATE DATABASE tde_db; +USE tde_db; +DROP TABLE IF EXISTS tde_db.t_encrypt; +SET GLOBAL innodb_file_per_table = 1; +SELECT @@innodb_file_per_table; +@@innodb_file_per_table +1 +CREATE TABLE tde_db.t_encrypt(c1 INT NOT NULL AUTO_INCREMENT PRIMARY KEY, c2 char(100), c3 BLOB , FULLTEXT INDEX `idx1` (c2)) ENCRYPTION="KEYRING" ENGINE = InnoDB; +CREATE TABLE tde_db.t_encrypt1(c11 INT , c22 char(100), c33 BLOB , FULLTEXT INDEX `idx1` (c22)) ENCRYPTION="KEYRING" ENGINE = InnoDB; +SHOW CREATE TABLE tde_db.t_encrypt; +Table Create Table +t_encrypt CREATE TABLE `t_encrypt` ( + `c1` int(11) NOT NULL AUTO_INCREMENT, + `c2` char(100) DEFAULT NULL, + `c3` blob, + PRIMARY KEY (`c1`), + FULLTEXT KEY `idx1` (`c2`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='KEYRING' +CREATE TABLE tde_db.t_encrypt2 (f1 INT PRIMARY KEY, f2 CHAR(100), +FOREIGN KEY (f1) REFERENCES tde_db.t_encrypt(c1) ON UPDATE CASCADE) ENCRYPTION="KEYRING" ENGINE=InnoDB; +CREATE TRIGGER tde_db.trigger_encrypt_table AFTER INSERT ON tde_db.t_encrypt +FOR EACH ROW +begin +INSERT INTO tde_db.t_encrypt1 SET c11 = NEW.c1*-1, c22 = NEW.c2 , c33 = NEW.c3; +end| +INSERT INTO tde_db.t_encrypt(c2,c3) VALUES("transparanet tablespace encryption",repeat('A', 200)); +INSERT INTO tde_db.t_encrypt(c2,c3) VALUES("general tablespace option",repeat('A', 200)); +INSERT INTO tde_db.t_encrypt(c2,c3) VALUES("page level encryption",repeat('A', 200)); +INSERT INTO tde_db.t_encrypt2(f1,f2) VALUES(1,"transparanet tablespace encryption"); +INSERT INTO tde_db.t_encrypt2(f1,f2) VALUES(2,"general tablespace option"); +SELECT c1,c2,right(c3, 20) FROM tde_db.t_encrypt LIMIT 10; +c1 c2 right(c3, 20) +1 transparanet tablespace encryption AAAAAAAAAAAAAAAAAAAA +2 general tablespace option AAAAAAAAAAAAAAAAAAAA +3 page level encryption AAAAAAAAAAAAAAAAAAAA +SELECT c1,c2,right(c3, 20) FROM tde_db.t_encrypt WHERE MATCH c2 AGAINST ('tablespace'); +c1 c2 right(c3, 20) +1 transparanet tablespace encryption AAAAAAAAAAAAAAAAAAAA +2 general tablespace option AAAAAAAAAAAAAAAAAAAA +SELECT c1,c2,right(c3, 20) FROM tde_db.t_encrypt WHERE MATCH c2 AGAINST ('tablespace' IN BOOLEAN MODE); +c1 c2 right(c3, 20) +1 transparanet tablespace encryption AAAAAAAAAAAAAAAAAAAA +2 general tablespace option AAAAAAAAAAAAAAAAAAAA +SELECT c1,c2,right(c3, 20) FROM tde_db.t_encrypt WHERE MATCH c2 AGAINST ('+tablespace -encryption' IN BOOLEAN MODE); +c1 c2 right(c3, 20) +2 general tablespace option AAAAAAAAAAAAAAAAAAAA +ALTER TABLE tde_db.t_encrypt DROP INDEX idx1; +SELECT c1,c2,right(c3, 20) FROM tde_db.t_encrypt LIMIT 10; +c1 c2 right(c3, 20) +1 transparanet tablespace encryption AAAAAAAAAAAAAAAAAAAA +2 general tablespace option AAAAAAAAAAAAAAAAAAAA +3 page level encryption AAAAAAAAAAAAAAAAAAAA +ALTER TABLE tde_db.t_encrypt ADD COLUMN c4 CHAR(20) DEFAULT 'text'; +SELECT c1,c2,right(c3, 20),c4 FROM tde_db.t_encrypt LIMIT 10; +c1 c2 right(c3, 20) c4 +1 transparanet tablespace encryption AAAAAAAAAAAAAAAAAAAA text +2 general tablespace option AAAAAAAAAAAAAAAAAAAA text +3 page level encryption AAAAAAAAAAAAAAAAAAAA text +CREATE VIEW tde_db.t_encrypt_view AS SELECT c1,c2 FROM tde_db.t_encrypt; +SELECT c2 FROM tde_db.t_encrypt_view LIMIT 10; +c2 +transparanet tablespace encryption +general tablespace option +page level encryption +SELECT A.c2,B.c2,right(B.c3,20) FROM tde_db.t_encrypt_view A , tde_db.t_encrypt B WHERE A.c2 = B.c2; +c2 c2 right(B.c3,20) +transparanet tablespace encryption transparanet tablespace encryption AAAAAAAAAAAAAAAAAAAA +general tablespace option general tablespace option AAAAAAAAAAAAAAAAAAAA +page level encryption page level encryption AAAAAAAAAAAAAAAAAAAA +DROP VIEW tde_db.t_encrypt_view; +SELECT c11,c22,right(c33, 20) FROM tde_db.t_encrypt1 LIMIT 10; +c11 c22 right(c33, 20) +-1 transparanet tablespace encryption AAAAAAAAAAAAAAAAAAAA +-2 general tablespace option AAAAAAAAAAAAAAAAAAAA +-3 page level encryption AAAAAAAAAAAAAAAAAAAA +INSERT INTO tde_db.t_encrypt2(f1,f2) VALUES(2,"general tablespace option"); +ERROR 23000: Duplicate entry '2' for key 'PRIMARY' +INSERT INTO tde_db.t_encrypt2(f1,f2) VALUES(8,"general tablespace option"); +ERROR 23000: Cannot add or update a child row: a foreign key constraint fails (`tde_db`.`t_encrypt2`, CONSTRAINT `t_encrypt2_ibfk_1` FOREIGN KEY (`f1`) REFERENCES `t_encrypt` (`c1`) ON UPDATE CASCADE) +SELECT f1,f2 FROM tde_db.t_encrypt2; +f1 f2 +1 transparanet tablespace encryption +2 general tablespace option +UPDATE tde_db.t_encrypt SET c1=10 WHERE c1=1; +SELECT f1,f2 FROM tde_db.t_encrypt2; +f1 f2 +2 general tablespace option +10 transparanet tablespace encryption +DROP DATABASE tde_db; +SET GLOBAL innodb_file_per_table=1; +DROP DATABASE IF EXISTS tde_db; +CREATE DATABASE tde_db; +USE tde_db; +DROP TABLE IF EXISTS tde_db.t_encrypt; +SET GLOBAL innodb_file_per_table = 1; +SELECT @@innodb_file_per_table; +@@innodb_file_per_table +1 +CREATE TABLE tde_db.t_encrypt (c2 INT NOT NULL AUTO_INCREMENT ,c3 VARCHAR(255), c4 JSON ,c5 INT GENERATED ALWAYS AS (JSON_EXTRACT(c4,'$.key_a')) STORED,c6 INT GENERATED ALWAYS AS (JSON_EXTRACT(c4,'$.key_b')) VIRTUAL,c7 POINT NOT NULL,spatial INDEX idx2 (c7) , PRIMARY KEY (c2,c3(100))) ENCRYPTION="KEYRING" ENGINE=InnoDB; +CREATE PROCEDURE tde_db.txn_t_encrypt() +BEGIN +declare i int default 0; +declare rowcnt int default 0; +START TRANSACTION; +WHILE (i <= 2000) DO +SET i = i + 1; +SET rowcnt = rowcnt + 1; +INSERT INTO tde_db.t_encrypt(c3,c4,c7) VALUES (CONCAT(REPEAT('a',10),REPEAT(i,10)),'{ "key_a": 1, "key_b": 2, "key_c": 3 }',ST_GeomFromText('POINT(383293632 1754448)')); +IF (rowcnt = 3) THEN +UPDATE tde_db.t_encrypt SET c4 = '{ "key_a": 21, "key_b": 22, "key_c": 23 }' WHERE c2 = i-1 ; +DELETE FROM tde_db.t_encrypt WHERE c2 = i; +SAVEPOINT A; +END IF; +IF (rowcnt = 5) THEN +UPDATE tde_db.t_encrypt SET c4 = '{ "key_a": 41, "key_b": 42, "key_c": 43 }' WHERE c2 = i-1 ; +DELETE FROM tde_db.t_encrypt WHERE c2 = i; +SAVEPOINT B; +END IF; +IF (rowcnt = 10) THEN +ROLLBACK TO SAVEPOINT A; +COMMIT; +SET rowcnt = 0; +START TRANSACTION; +END IF; +END WHILE; +COMMIT; +end| +call tde_db.txn_t_encrypt(); +SELECT COUNT(*) FROM tde_db.t_encrypt; +COUNT(*) +401 +SELECT c2,RIGHT(c3,20),c4 FROM tde_db.t_encrypt LIMIT 10; +c2 RIGHT(c3,20) c4 +1 aaaaaaaaaa1111111111 {"key_a": 1, "key_b": 2, "key_c": 3} +2 aaaaaaaaaa2222222222 {"key_a": 21, "key_b": 22, "key_c": 23} +11 11111111111111111111 {"key_a": 1, "key_b": 2, "key_c": 3} +12 12121212121212121212 {"key_a": 21, "key_b": 22, "key_c": 23} +21 21212121212121212121 {"key_a": 1, "key_b": 2, "key_c": 3} +22 22222222222222222222 {"key_a": 21, "key_b": 22, "key_c": 23} +31 31313131313131313131 {"key_a": 1, "key_b": 2, "key_c": 3} +32 32323232323232323232 {"key_a": 21, "key_b": 22, "key_c": 23} +41 41414141414141414141 {"key_a": 1, "key_b": 2, "key_c": 3} +42 42424242424242424242 {"key_a": 21, "key_b": 22, "key_c": 23} +SELECT c2,RIGHT(c3,20),c4 FROM tde_db.t_encrypt WHERE c2 > 500 AND c2 < 600; +c2 RIGHT(c3,20) c4 +501 01501501501501501501 {"key_a": 1, "key_b": 2, "key_c": 3} +502 02502502502502502502 {"key_a": 21, "key_b": 22, "key_c": 23} +511 11511511511511511511 {"key_a": 1, "key_b": 2, "key_c": 3} +512 12512512512512512512 {"key_a": 21, "key_b": 22, "key_c": 23} +521 21521521521521521521 {"key_a": 1, "key_b": 2, "key_c": 3} +522 22522522522522522522 {"key_a": 21, "key_b": 22, "key_c": 23} +531 31531531531531531531 {"key_a": 1, "key_b": 2, "key_c": 3} +532 32532532532532532532 {"key_a": 21, "key_b": 22, "key_c": 23} +541 41541541541541541541 {"key_a": 1, "key_b": 2, "key_c": 3} +542 42542542542542542542 {"key_a": 21, "key_b": 22, "key_c": 23} +551 51551551551551551551 {"key_a": 1, "key_b": 2, "key_c": 3} +552 52552552552552552552 {"key_a": 21, "key_b": 22, "key_c": 23} +561 61561561561561561561 {"key_a": 1, "key_b": 2, "key_c": 3} +562 62562562562562562562 {"key_a": 21, "key_b": 22, "key_c": 23} +571 71571571571571571571 {"key_a": 1, "key_b": 2, "key_c": 3} +572 72572572572572572572 {"key_a": 21, "key_b": 22, "key_c": 23} +581 81581581581581581581 {"key_a": 1, "key_b": 2, "key_c": 3} +582 82582582582582582582 {"key_a": 21, "key_b": 22, "key_c": 23} +591 91591591591591591591 {"key_a": 1, "key_b": 2, "key_c": 3} +592 92592592592592592592 {"key_a": 21, "key_b": 22, "key_c": 23} +SELECT c2,RIGHT(c3,20),c4 FROM tde_db.t_encrypt ORDER BY c2 DESC LIMIT 10; +c2 RIGHT(c3,20) c4 +2001 20012001200120012001 {"key_a": 1, "key_b": 2, "key_c": 3} +1992 19921992199219921992 {"key_a": 21, "key_b": 22, "key_c": 23} +1991 19911991199119911991 {"key_a": 1, "key_b": 2, "key_c": 3} +1982 19821982198219821982 {"key_a": 21, "key_b": 22, "key_c": 23} +1981 19811981198119811981 {"key_a": 1, "key_b": 2, "key_c": 3} +1972 19721972197219721972 {"key_a": 21, "key_b": 22, "key_c": 23} +1971 19711971197119711971 {"key_a": 1, "key_b": 2, "key_c": 3} +1962 19621962196219621962 {"key_a": 21, "key_b": 22, "key_c": 23} +1961 19611961196119611961 {"key_a": 1, "key_b": 2, "key_c": 3} +1952 19521952195219521952 {"key_a": 21, "key_b": 22, "key_c": 23} +# Starting server with keyring plugin +# restart: +SELECT COUNT(*) FROM tde_db.t_encrypt; +COUNT(*) +401 +SELECT c2,RIGHT(c3,20),c4 FROM tde_db.t_encrypt LIMIT 10; +c2 RIGHT(c3,20) c4 +1 aaaaaaaaaa1111111111 {"key_a": 1, "key_b": 2, "key_c": 3} +2 aaaaaaaaaa2222222222 {"key_a": 21, "key_b": 22, "key_c": 23} +11 11111111111111111111 {"key_a": 1, "key_b": 2, "key_c": 3} +12 12121212121212121212 {"key_a": 21, "key_b": 22, "key_c": 23} +21 21212121212121212121 {"key_a": 1, "key_b": 2, "key_c": 3} +22 22222222222222222222 {"key_a": 21, "key_b": 22, "key_c": 23} +31 31313131313131313131 {"key_a": 1, "key_b": 2, "key_c": 3} +32 32323232323232323232 {"key_a": 21, "key_b": 22, "key_c": 23} +41 41414141414141414141 {"key_a": 1, "key_b": 2, "key_c": 3} +42 42424242424242424242 {"key_a": 21, "key_b": 22, "key_c": 23} +SELECT c2,RIGHT(c3,20),c4 FROM tde_db.t_encrypt WHERE c2 > 500 AND c2 < 600; +c2 RIGHT(c3,20) c4 +501 01501501501501501501 {"key_a": 1, "key_b": 2, "key_c": 3} +502 02502502502502502502 {"key_a": 21, "key_b": 22, "key_c": 23} +511 11511511511511511511 {"key_a": 1, "key_b": 2, "key_c": 3} +512 12512512512512512512 {"key_a": 21, "key_b": 22, "key_c": 23} +521 21521521521521521521 {"key_a": 1, "key_b": 2, "key_c": 3} +522 22522522522522522522 {"key_a": 21, "key_b": 22, "key_c": 23} +531 31531531531531531531 {"key_a": 1, "key_b": 2, "key_c": 3} +532 32532532532532532532 {"key_a": 21, "key_b": 22, "key_c": 23} +541 41541541541541541541 {"key_a": 1, "key_b": 2, "key_c": 3} +542 42542542542542542542 {"key_a": 21, "key_b": 22, "key_c": 23} +551 51551551551551551551 {"key_a": 1, "key_b": 2, "key_c": 3} +552 52552552552552552552 {"key_a": 21, "key_b": 22, "key_c": 23} +561 61561561561561561561 {"key_a": 1, "key_b": 2, "key_c": 3} +562 62562562562562562562 {"key_a": 21, "key_b": 22, "key_c": 23} +571 71571571571571571571 {"key_a": 1, "key_b": 2, "key_c": 3} +572 72572572572572572572 {"key_a": 21, "key_b": 22, "key_c": 23} +581 81581581581581581581 {"key_a": 1, "key_b": 2, "key_c": 3} +582 82582582582582582582 {"key_a": 21, "key_b": 22, "key_c": 23} +591 91591591591591591591 {"key_a": 1, "key_b": 2, "key_c": 3} +592 92592592592592592592 {"key_a": 21, "key_b": 22, "key_c": 23} +SELECT c2,RIGHT(c3,20),c4 FROM tde_db.t_encrypt ORDER BY c2 DESC LIMIT 10; +c2 RIGHT(c3,20) c4 +2001 20012001200120012001 {"key_a": 1, "key_b": 2, "key_c": 3} +1992 19921992199219921992 {"key_a": 21, "key_b": 22, "key_c": 23} +1991 19911991199119911991 {"key_a": 1, "key_b": 2, "key_c": 3} +1982 19821982198219821982 {"key_a": 21, "key_b": 22, "key_c": 23} +1981 19811981198119811981 {"key_a": 1, "key_b": 2, "key_c": 3} +1972 19721972197219721972 {"key_a": 21, "key_b": 22, "key_c": 23} +1971 19711971197119711971 {"key_a": 1, "key_b": 2, "key_c": 3} +1962 19621962196219621962 {"key_a": 21, "key_b": 22, "key_c": 23} +1961 19611961196119611961 {"key_a": 1, "key_b": 2, "key_c": 3} +1952 19521952195219521952 {"key_a": 21, "key_b": 22, "key_c": 23} +DROP DATABASE tde_db; +# +# Bug#24404091 FAILING ASSERTION: !SRV_READ_ONLY_MODE || +# M_IMPL.M_LOG_MODE == MTR_LOG_NO_REDO +# +# restart: +ALTER INSTANCE ROTATE INNODB MASTER KEY; +ERROR HY000: InnoDB is in read only mode. +# restart: +SET GLOBAL innodb_file_per_table=1; diff --git a/mysql-test/suite/innodb/r/table_encrypt_4_rotated_keys.result b/mysql-test/suite/innodb/r/table_encrypt_4_rotated_keys.result new file mode 100644 index 000000000000..cc65431c9ef8 --- /dev/null +++ b/mysql-test/suite/innodb/r/table_encrypt_4_rotated_keys.result @@ -0,0 +1,153 @@ +# restart: +DROP TABLE IF EXISTS t1; +SET GLOBAL innodb_file_per_table = 1; +SELECT @@innodb_file_per_table; +@@innodb_file_per_table +1 +# Create a table with encryption +CREATE TABLE t1(c1 INT, c2 char(20)) ENCRYPTION="KEYRING" ENGINE = InnoDB; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) DEFAULT NULL, + `c2` char(20) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='KEYRING' +INSERT INTO t1 VALUES(0, "aaaaa"); +INSERT INTO t1 VALUES(1, "bbbbb"); +INSERT INTO t1 VALUES(2, "ccccc"); +INSERT INTO t1 VALUES(3, "ddddd"); +INSERT INTO t1 VALUES(4, "eeeee"); +INSERT INTO t1 VALUES(5, "fffff"); +INSERT INTO t1 VALUES(6, "ggggg"); +INSERT INTO t1 VALUES(7, "hhhhh"); +INSERT INTO t1 VALUES(8, "iiiii"); +INSERT INTO t1 VALUES(9, "jjjjj"); +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +SELECT * FROM t1 LIMIT 10; +c1 c2 +0 aaaaa +1 bbbbb +2 ccccc +3 ddddd +4 eeeee +5 fffff +6 ggggg +7 hhhhh +8 iiiii +9 jjjjj +# Test export/import encrypted tablespace. +FLUSH TABLES test.t1 FOR EXPORT; +UNLOCK TABLES; +ALTER TABLE test.t1 DISCARD TABLESPACE; +ALTER TABLE test.t1 IMPORT TABLESPACE; +CHECK TABLE test.t1; +Table Op Msg_type Msg_text +test.t1 check status OK +SHOW CREATE TABLE test.t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) DEFAULT NULL, + `c2` char(20) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='KEYRING' +SELECT * FROM test.t1 LIMIT 10; +c1 c2 +0 aaaaa +1 bbbbb +2 ccccc +3 ddddd +4 eeeee +5 fffff +6 ggggg +7 hhhhh +8 iiiii +9 jjjjj +# restart: +SELECT * FROM test.t1 LIMIT 10; +c1 c2 +0 aaaaa +1 bbbbb +2 ccccc +3 ddddd +4 eeeee +5 fffff +6 ggggg +7 hhhhh +8 iiiii +9 jjjjj +ALTER TABLE test.t1 DISCARD TABLESPACE; +# Try import in another session. +ALTER TABLE test.t1 IMPORT TABLESPACE; +SELECT * FROM test.t1 LIMIT 10; +c1 c2 +0 aaaaa +1 bbbbb +2 ccccc +3 ddddd +4 eeeee +5 fffff +6 ggggg +7 hhhhh +8 iiiii +9 jjjjj +ALTER TABLE test.t1 DISCARD TABLESPACE; +# Import without .cfg file is posible +# copying .cfp and .ibd file +ALTER TABLE test.t1 IMPORT TABLESPACE; +Warnings: +Warning 1810 InnoDB: IO Read error: (2, No such file or directory) Error opening './test/t1.cfg', will attempt to import without schema verification +SELECT * FROM test.t1 LIMIT 10; +c1 c2 +0 aaaaa +1 bbbbb +2 ccccc +3 ddddd +4 eeeee +5 fffff +6 ggggg +7 hhhhh +8 iiiii +9 jjjjj +ALTER INSTANCE ROTATE INNODB MASTER KEY; +SELECT * FROM test.t1 LIMIT 10; +c1 c2 +0 aaaaa +1 bbbbb +2 ccccc +3 ddddd +4 eeeee +5 fffff +6 ggggg +7 hhhhh +8 iiiii +9 jjjjj +ALTER TABLE test.t1 DISCARD TABLESPACE; +# Import without .cfp file +# copying .cfg and .ibd file +ALTER TABLE test.t1 IMPORT TABLESPACE; +ERROR HY000: Schema mismatch (Table is in an encrypted tablespace, but can't find the encryption meta-data file in importing) +ALTER INSTANCE ROTATE INNODB MASTER KEY; +# Import without .idb file +# copying .cfp and .cfg file +ALTER TABLE test.t1 IMPORT TABLESPACE; +ERROR HY000: Internal error: Cannot reset LSNs in table `test`.`t1` : Tablespace not found +ALTER INSTANCE ROTATE INNODB MASTER KEY; +# Schema mismatch dest table without encryption - fix result +DROP TABLE t1; +CREATE TABLE test.t1(c1 INT, c2 char(20)) ENGINE = InnoDB; +ALTER TABLE test.t1 DISCARD TABLESPACE; +ALTER TABLE test.t1 IMPORT TABLESPACE; +ERROR HY000: Schema mismatch (Encryption attribute is no matched) +# Import got expected error. +DROP TABLE t1; +CREATE TABLE test.t1(c1 INT, c2 char(20)) ENCRYPTION="KEYRING" ENGINE = InnoDB; +ALTER TABLE test.t1 DISCARD TABLESPACE; +SET SESSION DEBUG="+d, fsp_header_rotate_encryption_failure"; +ALTER TABLE test.t1 IMPORT TABLESPACE; +ERROR HY000: Got error 168 from storage engine +Warnings: +Note 1051 Unknown table 'test.t1' diff --git a/mysql-test/suite/innodb/r/table_encrypt_5_rotated_keys.result b/mysql-test/suite/innodb/r/table_encrypt_5_rotated_keys.result new file mode 100644 index 000000000000..52759d4b9cc3 --- /dev/null +++ b/mysql-test/suite/innodb/r/table_encrypt_5_rotated_keys.result @@ -0,0 +1,1053 @@ +call mtr.add_suppression("\\[ERROR\\] Plugin keyring_file reported: 'Could not create keyring directory"); +call mtr.add_suppression("\\[ERROR\\] Plugin keyring_file reported: 'keyring_file initialization failure."); +call mtr.add_suppression("\\[ERROR\\] Plugin keyring_file reported: 'File .*keyring' not found .*"); +call mtr.add_suppression("\\[ERROR\\] InnoDB: Encryption can't find master key, please check the keyring plugin is loaded."); +call mtr.add_suppression("ibd can't be decrypted , please confirm the keyfile is match and keyring plugin is loaded"); +call mtr.add_suppression("Can't generate new master key for tablespace encryption, please check the keyring plugin is loaded."); +call mtr.add_suppression("InnoDB: Operating system error number"); +call mtr.add_suppression("The error means the system cannot find the path specified"); +call mtr.add_suppression("InnoDB: If you are installing InnoDB, remember that you must create directories yourself, InnoDB does not create them"); +call mtr.add_suppression("Could not find a valid tablespace file"); +call mtr.add_suppression("InnoDB: Ignoring tablespace"); +call mtr.add_suppression("InnoDB: Failed to find tablespace for table"); +call mtr.add_suppression("InnoDB: Cannot open table tde_db/t_encrypt.* from the internal data dictionary of InnoDB though the .frm file for the table exists"); +call mtr.add_suppression("\\[ERROR\\] InnoDB: Table tde_db/t_encrypt.* in the InnoDB data dictionary has tablespace id .*, but tablespace with that id or name does not exist"); +call mtr.add_suppression("\\[Warning\\] InnoDB: Please refer to .* for how to resolve the issue"); +call mtr.add_suppression("Error while loading keyring content. The keyring might be malformed"); +# Starting server with keyring plugin +# restart: +DROP DATABASE IF EXISTS tde_db; +DROP TABLE IF EXISTS tde_db. t_encrypt; +CREATE DATABASE tde_db; +USE tde_db; +SET GLOBAL innodb_file_per_table = 1; +SELECT @@innodb_file_per_table; +@@innodb_file_per_table +1 +CREATE PROCEDURE tde_db.init_setup() +begin +/* Create encrypt table with encryption */ +CREATE TABLE tde_db.t_encrypt(c2 INT NOT NULL AUTO_INCREMENT PRIMARY KEY, +c3 CHAR(255) Default 'No text', +c4 JSON , +c5 INT GENERATED ALWAYS AS (JSON_EXTRACT(c4,'$.key_a')) STORED, +c6 INT GENERATED ALWAYS AS (JSON_EXTRACT(c4,'$.key_b')) VIRTUAL, +c7 POINT NOT NULL, +spatial INDEX idx2 (c7) +) ENCRYPTION="KEYRING" ENGINE = InnoDB; +/* Create NON encrypt table with encryption */ +CREATE TABLE tde_db.t_non_encrypt(c2 INT NOT NULL AUTO_INCREMENT PRIMARY KEY, +c3 CHAR(255) Default 'No text', +c4 JSON , +c5 INT GENERATED ALWAYS AS (JSON_EXTRACT(c4,'$.key_a')) STORED, +c6 INT GENERATED ALWAYS AS (JSON_EXTRACT(c4,'$.key_b')) VIRTUAL, +c7 POINT NOT NULL, +spatial INDEX idx2 (c7) +) ENGINE = InnoDB; +/* insert into encrypt table */ +INSERT INTO tde_db.t_encrypt(c3,c4,c7) VALUES(CONCAT(REPEAT('a',200),LPAD(CAST(1 AS CHAR),4,'0')),'{ "key_a": 1, "key_b": 2, "key_c": 3 }',ST_GeomFromText('POINT(383293632 1754448)')); +INSERT INTO tde_db.t_encrypt(c3,c4,c7) SELECT c3,c4,c7 FROM tde_db.t_encrypt; +INSERT INTO tde_db.t_encrypt(c3,c4,c7) SELECT c3,c4,c7 FROM tde_db.t_encrypt; +INSERT INTO tde_db.t_encrypt(c3,c4,c7) SELECT c3,c4,c7 FROM tde_db.t_encrypt; +INSERT INTO tde_db.t_encrypt(c3,c4,c7) SELECT c3,c4,c7 FROM tde_db.t_encrypt; +INSERT INTO tde_db.t_encrypt(c3,c4,c7) SELECT c3,c4,c7 FROM tde_db.t_encrypt; +INSERT INTO tde_db.t_encrypt(c3,c4,c7) SELECT c3,c4,c7 FROM tde_db.t_encrypt; +SELECT '/* select tde_db.t_encrypt */'; +SELECT COUNT(*) FROM tde_db.t_encrypt; +SELECT c2,right(c3,20),c4,c5,c6,ST_AsText(c7) FROM tde_db.t_encrypt LIMIT 10; +/* insert into non encrypt table */ +INSERT INTO tde_db.t_non_encrypt(c2,c3,c4,c7) SELECT c2,c3,c4,c7 FROM tde_db.t_encrypt; +SELECT '/* select tde_db.t_non_encrypt */'; +SELECT COUNT(*) FROM tde_db.t_non_encrypt; +SELECT c2 ,right(c3,20),c4,c5,c6,ST_AsText(c7) FROM tde_db.t_non_encrypt LIMIT 10; +ALTER INSTANCE ROTATE INNODB MASTER KEY; +CREATE TABLE tde_db.t_encrypt_2(c2 INT NOT NULL AUTO_INCREMENT PRIMARY KEY, +c3 CHAR(255) Default 'No text', +c4 JSON , +c5 INT GENERATED ALWAYS AS (JSON_EXTRACT(c4,'$.key_a')) STORED, +c6 INT GENERATED ALWAYS AS (JSON_EXTRACT(c4,'$.key_b')) VIRTUAL, +c7 POINT NOT NULL, +spatial INDEX idx2 (c7) +) ENCRYPTION="KEYRING" ENGINE = InnoDB; +CREATE TABLE tde_db.t_non_encrypt_2(c2 INT NOT NULL AUTO_INCREMENT PRIMARY KEY, +c3 CHAR(255) Default 'No text', +c4 JSON , +c5 INT GENERATED ALWAYS AS (JSON_EXTRACT(c4,'$.key_a')) STORED, +c6 INT GENERATED ALWAYS AS (JSON_EXTRACT(c4,'$.key_b')) VIRTUAL, +c7 POINT NOT NULL, +spatial INDEX idx2 (c7) +) ENGINE = InnoDB; +/* insert into encrypt table 2 */ +INSERT INTO tde_db.t_encrypt_2(c3,c4,c7) SELECT c3,c4,c7 FROM tde_db.t_encrypt; +SELECT '/* select tde_db.t_encrypt_2 */'; +SELECT COUNT(*) FROM tde_db.t_encrypt_2; +SELECT c2 ,right(c3,20),c4,c5,c6,ST_AsText(c7) FROM tde_db.t_encrypt_2 LIMIT 10; +/* insert into NON encrypt table 2 */ +INSERT INTO tde_db.t_non_encrypt_2(c2,c3,c4,c7) SELECT c2,c3,c4,c7 FROM tde_db.t_encrypt; +SELECT '/* select tde_db.t_non_encrypt_2 */'; +SELECT COUNT(*) FROM tde_db.t_non_encrypt_2; +SELECT c2 ,right(c3,20),c4,c5,c6,ST_AsText(c7) FROM tde_db.t_non_encrypt_2 LIMIT 10; +end| +#----------------------------------------------------------------------- +# init tables +call tde_db.init_setup(); +/* select tde_db.t_encrypt */ +/* select tde_db.t_encrypt */ +COUNT(*) +64 +c2 right(c3,20) c4 c5 c6 ST_AsText(c7) +1 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +2 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +3 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +4 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +6 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +7 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +8 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +9 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +13 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +14 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +/* select tde_db.t_non_encrypt */ +/* select tde_db.t_non_encrypt */ +COUNT(*) +64 +c2 right(c3,20) c4 c5 c6 ST_AsText(c7) +1 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +2 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +3 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +4 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +6 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +7 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +8 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +9 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +13 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +14 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +/* select tde_db.t_encrypt_2 */ +/* select tde_db.t_encrypt_2 */ +COUNT(*) +64 +c2 right(c3,20) c4 c5 c6 ST_AsText(c7) +1 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +2 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +3 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +4 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +5 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +6 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +7 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +8 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +9 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +10 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +/* select tde_db.t_non_encrypt_2 */ +/* select tde_db.t_non_encrypt_2 */ +COUNT(*) +64 +c2 right(c3,20) c4 c5 c6 ST_AsText(c7) +1 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +2 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +3 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +4 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +6 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +7 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +8 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +9 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +13 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +14 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +# plugin already installed error +INSTALL PLUGIN keyring_file SONAME 'keyring_file.so'; +ERROR HY000: Function 'keyring_file' already exists +SELECT @@global.keyring_file_data; +@@global.keyring_file_data +MYSQL_TMP_DIR/mysecret_keyring +# Uninstall is possible when server started with --early-plugin-load +UNINSTALL PLUGIN keyring_file; +# variable not accessible after uninstall +SELECT @@global.keyring_file_data; +ERROR HY000: Unknown system variable 'keyring_file_data' +# Select non encrypt table : Pass +SELECT COUNT(*) FROM tde_db.t_non_encrypt; +COUNT(*) +64 +SELECT COUNT(*) FROM tde_db.t_non_encrypt_2; +COUNT(*) +64 +# Select encrypt table : No Error (after uninstall plugin -master key is cached) +SELECT c2 ,right(c3,20),c4,c5,c6,ST_AsText(c7) FROM tde_db.t_encrypt LIMIT 10; +c2 right(c3,20) c4 c5 c6 ST_AsText(c7) +1 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +2 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +3 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +4 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +6 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +7 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +8 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +9 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +13 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +14 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +SELECT c2 ,right(c3,20),c4,c5,c6,ST_AsText(c7) FROM tde_db.t_encrypt_2 LIMIT 10; +c2 right(c3,20) c4 c5 c6 ST_AsText(c7) +1 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +2 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +3 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +4 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +5 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +6 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +7 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +8 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +9 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +10 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +SELECT COUNT(*) FROM tde_db.t_encrypt; +COUNT(*) +64 +SELECT COUNT(*) FROM tde_db.t_encrypt_2; +COUNT(*) +64 +# Error on "ALTER INSTANCE ..." after UNINSTALL PLUGIN +ALTER INSTANCE ROTATE INNODB MASTER KEY; +ERROR HY000: Can't find master key from keyring, please check keyring plugin is loaded. +# new encrypt table creation is blocked after uninstall +CREATE TABLE tde_db.t_encrypt_3(c2 INT NOT NULL AUTO_INCREMENT PRIMARY KEY, +c3 CHAR(255) Default 'No text', +c4 JSON , +c5 INT GENERATED ALWAYS AS (JSON_EXTRACT(c4,'$.key_a')) STORED, +c6 INT GENERATED ALWAYS AS (JSON_EXTRACT(c4,'$.key_b')) VIRTUAL, +c7 POINT NOT NULL, +spatial INDEX idx2 (c7) +) ENCRYPTION="KEYRING" ENGINE = InnoDB; +ERROR HY000: Can't find master key from keyring, please check keyring plugin is loaded. +# new non encrypt table +CREATE TABLE tde_db.t_non_encrypt_3(c2 INT NOT NULL AUTO_INCREMENT PRIMARY KEY, +c3 CHAR(255) Default 'No text', +c4 JSON , +c5 INT GENERATED ALWAYS AS (JSON_EXTRACT(c4,'\$.key_a')) STORED, +c6 INT GENERATED ALWAYS AS (JSON_EXTRACT(c4,'\$.key_b')) VIRTUAL, +c7 POINT NOT NULL, +spatial INDEX idx2 (c7) +) ENGINE = InnoDB; +DROP TABLE tde_db.t_encrypt , tde_db.t_encrypt_2 ; +DROP TABLE tde_db.t_non_encrypt , tde_db.t_non_encrypt_2 , tde_db.t_non_encrypt_3; +SELECT PLUGIN_NAME,PLUGIN_VERSION,PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE plugin_name='keyring_file'; +PLUGIN_NAME PLUGIN_VERSION PLUGIN_STATUS +#----------------------------------------------------------------------- +# Test 1 : Restart with same keyring option , all tables accesible +# restart with --early-plugin-load +# restart: +SELECT PLUGIN_NAME,PLUGIN_VERSION,PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE plugin_name='keyring_file'; +PLUGIN_NAME PLUGIN_VERSION PLUGIN_STATUS +keyring_file 1.0 ACTIVE +# init tables +call tde_db.init_setup(); +/* select tde_db.t_encrypt */ +/* select tde_db.t_encrypt */ +COUNT(*) +64 +c2 right(c3,20) c4 c5 c6 ST_AsText(c7) +1 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +2 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +3 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +4 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +6 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +7 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +8 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +9 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +13 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +14 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +/* select tde_db.t_non_encrypt */ +/* select tde_db.t_non_encrypt */ +COUNT(*) +64 +c2 right(c3,20) c4 c5 c6 ST_AsText(c7) +1 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +2 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +3 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +4 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +6 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +7 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +8 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +9 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +13 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +14 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +/* select tde_db.t_encrypt_2 */ +/* select tde_db.t_encrypt_2 */ +COUNT(*) +64 +c2 right(c3,20) c4 c5 c6 ST_AsText(c7) +1 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +2 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +3 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +4 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +5 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +6 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +7 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +8 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +9 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +10 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +/* select tde_db.t_non_encrypt_2 */ +/* select tde_db.t_non_encrypt_2 */ +COUNT(*) +64 +c2 right(c3,20) c4 c5 c6 ST_AsText(c7) +1 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +2 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +3 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +4 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +6 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +7 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +8 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +9 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +13 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +14 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +# restart with same --early-plugin-load and keyring_file_data option +# restart: +SELECT COUNT(*) FROM tde_db.t_encrypt; +COUNT(*) +64 +SELECT c2,right(c3,20),c4,c5,c6,ST_AsText(c7) FROM tde_db.t_encrypt LIMIT 10; +c2 right(c3,20) c4 c5 c6 ST_AsText(c7) +1 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +2 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +3 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +4 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +6 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +7 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +8 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +9 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +13 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +14 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +SELECT COUNT(*) FROM tde_db.t_non_encrypt; +COUNT(*) +64 +SELECT c2,right(c3,20),c4,c5,c6,ST_AsText(c7) FROM tde_db.t_non_encrypt LIMIT 10; +c2 right(c3,20) c4 c5 c6 ST_AsText(c7) +1 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +2 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +3 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +4 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +6 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +7 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +8 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +9 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +13 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +14 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +SELECT COUNT(*) FROM tde_db.t_encrypt_2; +COUNT(*) +64 +SELECT c2,right(c3,20),c4,c5,c6,ST_AsText(c7) FROM tde_db.t_encrypt_2 LIMIT 10; +c2 right(c3,20) c4 c5 c6 ST_AsText(c7) +1 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +2 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +3 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +4 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +5 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +6 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +7 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +8 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +9 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +10 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +SELECT COUNT(*) FROM tde_db.t_non_encrypt_2; +COUNT(*) +64 +SELECT c2,right(c3,20),c4,c5,c6,ST_AsText(c7) FROM tde_db.t_non_encrypt_2 LIMIT 10; +c2 right(c3,20) c4 c5 c6 ST_AsText(c7) +1 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +2 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +3 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +4 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +6 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +7 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +8 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +9 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +13 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +14 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +# insert into old encrypt tables +SELECT COUNT(*) FROM tde_db.t_encrypt_2; +COUNT(*) +64 +INSERT INTO tde_db.t_encrypt_2(c3,c4,c7) SELECT c3,c4,c7 FROM tde_db.t_encrypt; +SELECT COUNT(*) FROM tde_db.t_encrypt_2; +COUNT(*) +128 +# insert into old non encrypt tables +SELECT COUNT(*) FROM tde_db.t_non_encrypt_2; +COUNT(*) +64 +INSERT INTO tde_db.t_non_encrypt_2(c3,c4,c7) SELECT c3,c4,c7 FROM tde_db.t_encrypt; +SELECT COUNT(*) FROM tde_db.t_non_encrypt_2; +COUNT(*) +128 +# update into old encrypt tables +UPDATE tde_db.t_encrypt_2 SET c2 = 1000 WHERE c2 = 1; +SELECT COUNT(*) FROM tde_db.t_encrypt_2 WHERE c2 = 1000 ; +COUNT(*) +1 +# update into old non encrypt tables +UPDATE tde_db.t_non_encrypt_2 SET c2 = 1000 WHERE c2 = 1; +SELECT COUNT(*) FROM tde_db.t_non_encrypt_2 WHERE c2 = 1000 ; +COUNT(*) +1 +# delete into old encrypt tables +DELETE FROM tde_db.t_encrypt_2 WHERE c2 = 1000 ; +SELECT COUNT(*) FROM tde_db.t_encrypt_2 WHERE c2 = 1000 ; +COUNT(*) +0 +# delete into old non encrypt tables +DELETE FROM tde_db.t_non_encrypt_2 WHERE c2 = 1000 ; +SELECT COUNT(*) FROM tde_db.t_non_encrypt_2 WHERE c2 = 1000 ; +COUNT(*) +0 +# new table +CREATE TABLE tde_db.t_encrypt_4(c2 INT NOT NULL AUTO_INCREMENT PRIMARY KEY, +c3 CHAR(255) Default 'No text', +c4 JSON , +c5 INT GENERATED ALWAYS AS (JSON_EXTRACT(c4,'$.key_a')) STORED, +c6 INT GENERATED ALWAYS AS (JSON_EXTRACT(c4,'$.key_b')) VIRTUAL, +c7 POINT NOT NULL, +spatial INDEX idx2 (c7) +) ENCRYPTION="KEYRING" ENGINE = InnoDB; +CREATE TABLE tde_db.t_non_encrypt_4(c2 INT NOT NULL AUTO_INCREMENT PRIMARY KEY, +c3 CHAR(255) Default 'No text', +c4 JSON , +c5 INT GENERATED ALWAYS AS (JSON_EXTRACT(c4,'\$.key_a')) STORED, +c6 INT GENERATED ALWAYS AS (JSON_EXTRACT(c4,'\$.key_b')) VIRTUAL, +c7 POINT NOT NULL, +spatial INDEX idx2 (c7) +) ENGINE = InnoDB; +INSERT INTO tde_db.t_encrypt_4(c3,c4,c7) SELECT c3,c4,c7 FROM tde_db.t_encrypt; +INSERT INTO tde_db.t_non_encrypt_4(c3,c4,c7) SELECT c3,c4,c7 FROM tde_db.t_encrypt; +SELECT COUNT(*) FROM tde_db.t_encrypt_4; +COUNT(*) +64 +SELECT c2,right(c3,20),c4,c5,c6,ST_AsText(c7) FROM tde_db.t_encrypt_4 LIMIT 10; +c2 right(c3,20) c4 c5 c6 ST_AsText(c7) +1 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +2 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +3 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +4 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +5 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +6 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +7 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +8 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +9 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +10 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +SELECT COUNT(*) FROM tde_db.t_non_encrypt_4; +COUNT(*) +64 +SELECT c2,right(c3,20),c4,c5,c6,ST_AsText(c7) FROM tde_db.t_non_encrypt_4 LIMIT 10; +c2 right(c3,20) c4 c5 c6 ST_AsText(c7) +1 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +2 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +3 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +4 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +5 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +6 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +7 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +8 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +9 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +10 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +ALTER INSTANCE ROTATE INNODB MASTER KEY; +SELECT COUNT(*) FROM tde_db.t_encrypt; +COUNT(*) +64 +SELECT COUNT(*) FROM tde_db.t_non_encrypt; +COUNT(*) +64 +SELECT COUNT(*) FROM tde_db.t_encrypt_2; +COUNT(*) +127 +SELECT COUNT(*) FROM tde_db.t_non_encrypt_2; +COUNT(*) +127 +SELECT COUNT(*) FROM tde_db.t_encrypt_4; +COUNT(*) +64 +SELECT COUNT(*) FROM tde_db.t_non_encrypt_4; +COUNT(*) +64 +DROP TABLE tde_db.t_encrypt , tde_db.t_encrypt_2 , tde_db.t_encrypt_4; +DROP TABLE tde_db.t_non_encrypt , tde_db.t_non_encrypt_2 , tde_db.t_non_encrypt_4; +#----------------------------------------------------------------------- +# Test 2 : Restart without keyring option - old encrypt table not +# accessible but rest are. +# restart with --early-plugin-load to load initial data +# restart: +SELECT PLUGIN_NAME,PLUGIN_VERSION,PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE plugin_name='keyring_file'; +PLUGIN_NAME PLUGIN_VERSION PLUGIN_STATUS +keyring_file 1.0 ACTIVE +# init tables +call tde_db.init_setup(); +/* select tde_db.t_encrypt */ +/* select tde_db.t_encrypt */ +COUNT(*) +64 +c2 right(c3,20) c4 c5 c6 ST_AsText(c7) +1 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +2 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +3 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +4 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +6 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +7 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +8 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +9 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +13 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +14 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +/* select tde_db.t_non_encrypt */ +/* select tde_db.t_non_encrypt */ +COUNT(*) +64 +c2 right(c3,20) c4 c5 c6 ST_AsText(c7) +1 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +2 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +3 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +4 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +6 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +7 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +8 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +9 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +13 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +14 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +/* select tde_db.t_encrypt_2 */ +/* select tde_db.t_encrypt_2 */ +COUNT(*) +64 +c2 right(c3,20) c4 c5 c6 ST_AsText(c7) +1 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +2 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +3 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +4 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +5 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +6 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +7 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +8 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +9 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +10 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +/* select tde_db.t_non_encrypt_2 */ +/* select tde_db.t_non_encrypt_2 */ +COUNT(*) +64 +c2 right(c3,20) c4 c5 c6 ST_AsText(c7) +1 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +2 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +3 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +4 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +6 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +7 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +8 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +9 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +13 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +14 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +# restart without --early-plugin-load and keyring_file_data +# restart: +# encrypt table not accessible +SELECT COUNT(*) FROM tde_db.t_encrypt; +ERROR HY000: Can't find master key from keyring, please check keyring plugin is loaded. +SELECT COUNT(*) FROM tde_db.t_encrypt_2; +ERROR HY000: Can't find master key from keyring, please check keyring plugin is loaded. +# NON encrypt table are accessible +SELECT COUNT(*) FROM tde_db.t_non_encrypt; +COUNT(*) +64 +SELECT COUNT(*) FROM tde_db.t_non_encrypt_2; +COUNT(*) +64 +# encrypt table not possible +CREATE TABLE tde_db.t_non_encrypt_4(c2 INT NOT NULL AUTO_INCREMENT PRIMARY KEY, +c3 CHAR(255) Default 'No text', +c4 JSON , +c5 INT GENERATED ALWAYS AS (JSON_EXTRACT(c4,'$.key_a')) STORED, +c6 INT GENERATED ALWAYS AS (JSON_EXTRACT(c4,'$.key_b')) VIRTUAL, +c7 POINT NOT NULL, +spatial INDEX idx2 (c7) +) ENCRYPTION="KEYRING" ENGINE = InnoDB; +ERROR HY000: Can't find master key from keyring, please check keyring plugin is loaded. +# non encrypt table possible +CREATE TABLE tde_db.t_non_encrypt_4(c2 INT NOT NULL AUTO_INCREMENT PRIMARY KEY, +c3 CHAR(255) Default 'No text', +c4 JSON , +c5 INT GENERATED ALWAYS AS (JSON_EXTRACT(c4,'\$.key_a')) STORED, +c6 INT GENERATED ALWAYS AS (JSON_EXTRACT(c4,'\$.key_b')) VIRTUAL, +c7 POINT NOT NULL, +spatial INDEX idx2 (c7) +) ENGINE = InnoDB; +INSERT INTO tde_db.t_non_encrypt_4(c3,c4,c7) SELECT c3,c4,c7 FROM tde_db.t_non_encrypt; +SELECT COUNT(*) FROM tde_db.t_non_encrypt_4; +COUNT(*) +64 +ALTER INSTANCE ROTATE INNODB MASTER KEY; +ERROR HY000: Can't find master key from keyring, please check keyring plugin is loaded. +# encrypt table not accessible +SELECT COUNT(*) FROM tde_db.t_encrypt; +ERROR HY000: Can't find master key from keyring, please check keyring plugin is loaded. +SELECT COUNT(*) FROM tde_db.t_encrypt_2; +ERROR HY000: Can't find master key from keyring, please check keyring plugin is loaded. +DROP TABLE tde_db.t_encrypt , tde_db.t_encrypt_2; +DROP TABLE tde_db.t_non_encrypt , tde_db.t_non_encrypt_2 ,tde_db.t_non_encrypt_4; +DROP DATABASE tde_db; +# Initial setup +# Starting server with keyring plugin +# restart: +DROP DATABASE IF EXISTS tde_db; +CREATE DATABASE tde_db; +USE tde_db; +SET GLOBAL innodb_file_per_table = 1; +SELECT @@innodb_file_per_table; +@@innodb_file_per_table +1 +CREATE PROCEDURE tde_db.init_setup() +begin +/* Create encrypt table with encryption */ +CREATE TABLE tde_db.t_encrypt(c2 INT NOT NULL AUTO_INCREMENT PRIMARY KEY, +c3 CHAR(255) Default 'No text', +c4 JSON , +c5 INT GENERATED ALWAYS AS (JSON_EXTRACT(c4,'$.key_a')) STORED, +c6 INT GENERATED ALWAYS AS (JSON_EXTRACT(c4,'$.key_b')) VIRTUAL, +c7 POINT NOT NULL, +spatial INDEX idx2 (c7) +) ENCRYPTION="KEYRING" ENGINE = InnoDB; +/* Create NON encrypt table with encryption */ +CREATE TABLE tde_db.t_non_encrypt(c2 INT NOT NULL AUTO_INCREMENT PRIMARY KEY, +c3 CHAR(255) Default 'No text', +c4 JSON , +c5 INT GENERATED ALWAYS AS (JSON_EXTRACT(c4,'$.key_a')) STORED, +c6 INT GENERATED ALWAYS AS (JSON_EXTRACT(c4,'$.key_b')) VIRTUAL, +c7 POINT NOT NULL, +spatial INDEX idx2 (c7) +) ENGINE = InnoDB; +/* insert into encrypt table */ +INSERT INTO tde_db.t_encrypt(c3,c4,c7) VALUES(CONCAT(REPEAT('a',200),LPAD(CAST(1 AS CHAR),4,'0')),'{ "key_a": 1, "key_b": 2, "key_c": 3 }',ST_GeomFromText('POINT(383293632 1754448)')); +INSERT INTO tde_db.t_encrypt(c3,c4,c7) SELECT c3,c4,c7 FROM tde_db.t_encrypt; +INSERT INTO tde_db.t_encrypt(c3,c4,c7) SELECT c3,c4,c7 FROM tde_db.t_encrypt; +INSERT INTO tde_db.t_encrypt(c3,c4,c7) SELECT c3,c4,c7 FROM tde_db.t_encrypt; +INSERT INTO tde_db.t_encrypt(c3,c4,c7) SELECT c3,c4,c7 FROM tde_db.t_encrypt; +INSERT INTO tde_db.t_encrypt(c3,c4,c7) SELECT c3,c4,c7 FROM tde_db.t_encrypt; +INSERT INTO tde_db.t_encrypt(c3,c4,c7) SELECT c3,c4,c7 FROM tde_db.t_encrypt; +SELECT '/* select tde_db.t_encrypt */'; +SELECT COUNT(*) FROM tde_db.t_encrypt; +SELECT c2,right(c3,20),c4,c5,c6,ST_AsText(c7) FROM tde_db.t_encrypt LIMIT 10; +/* insert into non encrypt table */ +INSERT INTO tde_db.t_non_encrypt(c2,c3,c4,c7) SELECT c2,c3,c4,c7 FROM tde_db.t_encrypt; +SELECT '/* select tde_db.t_non_encrypt */'; +SELECT COUNT(*) FROM tde_db.t_non_encrypt; +SELECT c2 ,right(c3,20),c4,c5,c6,ST_AsText(c7) FROM tde_db.t_non_encrypt LIMIT 10; +ALTER INSTANCE ROTATE INNODB MASTER KEY; +CREATE TABLE tde_db.t_encrypt_2(c2 INT NOT NULL AUTO_INCREMENT PRIMARY KEY, +c3 CHAR(255) Default 'No text', +c4 JSON , +c5 INT GENERATED ALWAYS AS (JSON_EXTRACT(c4,'$.key_a')) STORED, +c6 INT GENERATED ALWAYS AS (JSON_EXTRACT(c4,'$.key_b')) VIRTUAL, +c7 POINT NOT NULL, +spatial INDEX idx2 (c7) +) ENCRYPTION="KEYRING" ENGINE = InnoDB; +CREATE TABLE tde_db.t_non_encrypt_2(c2 INT NOT NULL AUTO_INCREMENT PRIMARY KEY, +c3 CHAR(255) Default 'No text', +c4 JSON , +c5 INT GENERATED ALWAYS AS (JSON_EXTRACT(c4,'$.key_a')) STORED, +c6 INT GENERATED ALWAYS AS (JSON_EXTRACT(c4,'$.key_b')) VIRTUAL, +c7 POINT NOT NULL, +spatial INDEX idx2 (c7) +) ENGINE = InnoDB; +/* insert into encrypt table 2 */ +INSERT INTO tde_db.t_encrypt_2(c3,c4,c7) SELECT c3,c4,c7 FROM tde_db.t_encrypt; +SELECT '/* select tde_db.t_encrypt_2 */'; +SELECT COUNT(*) FROM tde_db.t_encrypt_2; +SELECT c2 ,right(c3,20),c4,c5,c6,ST_AsText(c7) FROM tde_db.t_encrypt_2 LIMIT 10; +/* insert into NON encrypt table 2 */ +INSERT INTO tde_db.t_non_encrypt_2(c2,c3,c4,c7) SELECT c2,c3,c4,c7 FROM tde_db.t_encrypt; +SELECT '/* select tde_db.t_non_encrypt_2 */'; +SELECT COUNT(*) FROM tde_db.t_non_encrypt_2; +SELECT c2 ,right(c3,20),c4,c5,c6,ST_AsText(c7) FROM tde_db.t_non_encrypt_2 LIMIT 10; +end| +# Test 3 : Restart without keyring option but load plugin using command +# Access all tables +#----------------------------------------------------------------------- +SELECT PLUGIN_NAME,PLUGIN_VERSION,PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE plugin_name='keyring_file'; +PLUGIN_NAME PLUGIN_VERSION PLUGIN_STATUS +keyring_file 1.0 ACTIVE +SELECT @@global.keyring_file_data; +@@global.keyring_file_data +MYSQL_TMP_DIR/mysecret_keyring +# init tables +call tde_db.init_setup(); +/* select tde_db.t_encrypt */ +/* select tde_db.t_encrypt */ +COUNT(*) +64 +c2 right(c3,20) c4 c5 c6 ST_AsText(c7) +1 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +2 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +3 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +4 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +6 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +7 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +8 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +9 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +13 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +14 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +/* select tde_db.t_non_encrypt */ +/* select tde_db.t_non_encrypt */ +COUNT(*) +64 +c2 right(c3,20) c4 c5 c6 ST_AsText(c7) +1 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +2 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +3 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +4 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +6 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +7 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +8 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +9 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +13 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +14 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +/* select tde_db.t_encrypt_2 */ +/* select tde_db.t_encrypt_2 */ +COUNT(*) +64 +c2 right(c3,20) c4 c5 c6 ST_AsText(c7) +1 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +2 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +3 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +4 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +5 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +6 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +7 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +8 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +9 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +10 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +/* select tde_db.t_non_encrypt_2 */ +/* select tde_db.t_non_encrypt_2 */ +COUNT(*) +64 +c2 right(c3,20) c4 c5 c6 ST_AsText(c7) +1 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +2 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +3 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +4 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +6 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +7 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +8 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +9 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +13 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +14 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +# restart without --early-plugin-load and keyring_file_data +# AND explicitly install plugin to access old table +# restart: +# Install keyring plugin +INSTALL PLUGIN keyring_file SONAME 'keyring_file.so'; +# Set keyring_file_data as old file so as to access old tables +SET @@global.keyring_file_data='MYSQL_TMP_DIR/mysecret_keyring'; +SELECT @@global.keyring_file_data; +@@global.keyring_file_data +MYSQL_TMP_DIR/mysecret_keyring +SELECT COUNT(*) FROM tde_db.t_encrypt; +COUNT(*) +64 +SELECT c2,right(c3,20),c4,c5,c6,ST_AsText(c7) FROM tde_db.t_encrypt LIMIT 10; +c2 right(c3,20) c4 c5 c6 ST_AsText(c7) +1 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +2 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +3 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +4 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +6 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +7 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +8 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +9 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +13 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +14 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +SELECT COUNT(*) FROM tde_db.t_non_encrypt; +COUNT(*) +64 +SELECT c2,right(c3,20),c4,c5,c6,ST_AsText(c7) FROM tde_db.t_non_encrypt LIMIT 10; +c2 right(c3,20) c4 c5 c6 ST_AsText(c7) +1 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +2 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +3 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +4 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +6 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +7 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +8 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +9 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +13 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +14 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +SELECT COUNT(*) FROM tde_db.t_encrypt_2; +COUNT(*) +64 +SELECT c2,right(c3,20),c4,c5,c6,ST_AsText(c7) FROM tde_db.t_encrypt_2 LIMIT 10; +c2 right(c3,20) c4 c5 c6 ST_AsText(c7) +1 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +2 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +3 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +4 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +5 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +6 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +7 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +8 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +9 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +10 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +SELECT COUNT(*) FROM tde_db.t_non_encrypt_2; +COUNT(*) +64 +SELECT c2,right(c3,20),c4,c5,c6,ST_AsText(c7) FROM tde_db.t_non_encrypt_2 LIMIT 10; +c2 right(c3,20) c4 c5 c6 ST_AsText(c7) +1 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +2 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +3 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +4 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +6 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +7 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +8 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +9 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +13 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +14 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +# insert into old encrypt tables +SELECT COUNT(*) FROM tde_db.t_encrypt_2; +COUNT(*) +64 +INSERT INTO tde_db.t_encrypt_2(c3,c4,c7) SELECT c3,c4,c7 FROM tde_db.t_encrypt; +SELECT COUNT(*) FROM tde_db.t_encrypt_2; +COUNT(*) +128 +# insert into old non encrypt tables +SELECT COUNT(*) FROM tde_db.t_non_encrypt_2; +COUNT(*) +64 +INSERT INTO tde_db.t_non_encrypt_2(c3,c4,c7) SELECT c3,c4,c7 FROM tde_db.t_encrypt; +SELECT COUNT(*) FROM tde_db.t_non_encrypt_2; +COUNT(*) +128 +# update into old encrypt tables +UPDATE tde_db.t_encrypt_2 SET c2 = 1000 WHERE c2 = 1; +SELECT COUNT(*) FROM tde_db.t_encrypt_2 WHERE c2 = 1000 ; +COUNT(*) +1 +# update into old non encrypt tables +UPDATE tde_db.t_non_encrypt_2 SET c2 = 1000 WHERE c2 = 1; +SELECT COUNT(*) FROM tde_db.t_non_encrypt_2 WHERE c2 = 1000 ; +COUNT(*) +1 +# delete into old encrypt tables +DELETE FROM tde_db.t_encrypt_2 WHERE c2 = 1000 ; +SELECT COUNT(*) FROM tde_db.t_encrypt_2 WHERE c2 = 1000 ; +COUNT(*) +0 +# delete into old non encrypt tables +DELETE FROM tde_db.t_non_encrypt_2 WHERE c2 = 1000 ; +SELECT COUNT(*) FROM tde_db.t_non_encrypt_2 WHERE c2 = 1000 ; +COUNT(*) +0 +# new table +CREATE TABLE tde_db.t_encrypt_4(c2 INT NOT NULL AUTO_INCREMENT PRIMARY KEY, +c3 CHAR(255) Default 'No text', +c4 JSON , +c5 INT GENERATED ALWAYS AS (JSON_EXTRACT(c4,'$.key_a')) STORED, +c6 INT GENERATED ALWAYS AS (JSON_EXTRACT(c4,'$.key_b')) VIRTUAL, +c7 POINT NOT NULL, +spatial INDEX idx2 (c7) +) ENCRYPTION="KEYRING" ENGINE = InnoDB; +CREATE TABLE tde_db.t_non_encrypt_4(c2 INT NOT NULL AUTO_INCREMENT PRIMARY KEY, +c3 CHAR(255) Default 'No text', +c4 JSON , +c5 INT GENERATED ALWAYS AS (JSON_EXTRACT(c4,'\$.key_a')) STORED, +c6 INT GENERATED ALWAYS AS (JSON_EXTRACT(c4,'\$.key_b')) VIRTUAL, +c7 POINT NOT NULL, +spatial INDEX idx2 (c7) +) ENGINE = InnoDB; +INSERT INTO tde_db.t_encrypt_4(c3,c4,c7) SELECT c3,c4,c7 FROM tde_db.t_encrypt; +INSERT INTO tde_db.t_non_encrypt_4(c3,c4,c7) SELECT c3,c4,c7 FROM tde_db.t_encrypt; +SELECT COUNT(*) FROM tde_db.t_encrypt_4; +COUNT(*) +64 +SELECT c2,right(c3,20),c4,c5,c6,ST_AsText(c7) FROM tde_db.t_encrypt_4 LIMIT 10; +c2 right(c3,20) c4 c5 c6 ST_AsText(c7) +1 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +2 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +3 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +4 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +5 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +6 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +7 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +8 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +9 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +10 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +SELECT COUNT(*) FROM tde_db.t_non_encrypt_4; +COUNT(*) +64 +SELECT c2,right(c3,20),c4,c5,c6,ST_AsText(c7) FROM tde_db.t_non_encrypt_4 LIMIT 10; +c2 right(c3,20) c4 c5 c6 ST_AsText(c7) +1 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +2 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +3 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +4 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +5 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +6 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +7 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +8 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +9 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +10 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +ALTER INSTANCE ROTATE INNODB MASTER KEY; +SELECT COUNT(*) FROM tde_db.t_encrypt; +COUNT(*) +64 +SELECT COUNT(*) FROM tde_db.t_non_encrypt; +COUNT(*) +64 +SELECT COUNT(*) FROM tde_db.t_encrypt_2; +COUNT(*) +127 +SELECT COUNT(*) FROM tde_db.t_non_encrypt_2; +COUNT(*) +127 +SELECT COUNT(*) FROM tde_db.t_encrypt_4; +COUNT(*) +64 +SELECT COUNT(*) FROM tde_db.t_non_encrypt_4; +COUNT(*) +64 +DROP TABLE tde_db.t_encrypt , tde_db.t_encrypt_2 , tde_db.t_encrypt_4; +DROP TABLE tde_db.t_non_encrypt , tde_db.t_non_encrypt_2 , tde_db.t_non_encrypt_4; +UNINSTALL PLUGIN keyring_file; +CREATE TABLE tde_db.t_encrypt_4(c2 INT NOT NULL AUTO_INCREMENT PRIMARY KEY, +c3 CHAR(255) Default 'No text', +c4 JSON , +c5 INT GENERATED ALWAYS AS (JSON_EXTRACT(c4,'$.key_a')) STORED, +c6 INT GENERATED ALWAYS AS (JSON_EXTRACT(c4,'$.key_b')) VIRTUAL, +c7 POINT NOT NULL, +spatial INDEX idx2 (c7) +) ENCRYPTION="KEYRING" ENGINE = InnoDB; +ERROR HY000: Can't find master key from keyring, please check keyring plugin is loaded. +ALTER INSTANCE ROTATE INNODB MASTER KEY; +ERROR HY000: Can't find master key from keyring, please check keyring plugin is loaded. +#----------------------------------------------------------------------- +# Test 4 : Restart with new keyring_data_file +# Old encrypt table not accessible , non encrypt tables accessible +# And creation of new encrypt,non encrypt table is also posible +# restart with --early-plugin-load to load initial data +# restart: +SELECT PLUGIN_NAME,PLUGIN_VERSION,PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE plugin_name='keyring_file'; +PLUGIN_NAME PLUGIN_VERSION PLUGIN_STATUS +keyring_file 1.0 ACTIVE +# init tables +call tde_db.init_setup(); +/* select tde_db.t_encrypt */ +/* select tde_db.t_encrypt */ +COUNT(*) +64 +c2 right(c3,20) c4 c5 c6 ST_AsText(c7) +1 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +2 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +3 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +4 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +6 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +7 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +8 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +9 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +13 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +14 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +/* select tde_db.t_non_encrypt */ +/* select tde_db.t_non_encrypt */ +COUNT(*) +64 +c2 right(c3,20) c4 c5 c6 ST_AsText(c7) +1 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +2 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +3 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +4 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +6 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +7 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +8 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +9 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +13 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +14 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +/* select tde_db.t_encrypt_2 */ +/* select tde_db.t_encrypt_2 */ +COUNT(*) +64 +c2 right(c3,20) c4 c5 c6 ST_AsText(c7) +1 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +2 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +3 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +4 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +5 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +6 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +7 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +8 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +9 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +10 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +/* select tde_db.t_non_encrypt_2 */ +/* select tde_db.t_non_encrypt_2 */ +COUNT(*) +64 +c2 right(c3,20) c4 c5 c6 ST_AsText(c7) +1 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +2 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +3 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +4 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +6 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +7 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +8 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +9 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +13 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +14 aaaaaaaaaaaaaaaa0001 {"key_a": 1, "key_b": 2, "key_c": 3} 1 2 POINT(383293632 1754448) +# restart with with different keyring_file_data file +# restart: +# encrypt table not accessible +SELECT COUNT(*) FROM tde_db.t_encrypt; +ERROR HY000: Can't find master key from keyring, please check keyring plugin is loaded. +SELECT COUNT(*) FROM tde_db.t_encrypt_2; +ERROR HY000: Can't find master key from keyring, please check keyring plugin is loaded. +# NON encrypt table are accessible +SELECT COUNT(*) FROM tde_db.t_non_encrypt; +COUNT(*) +64 +SELECT COUNT(*) FROM tde_db.t_non_encrypt_2; +COUNT(*) +64 +# new encrypt table is possible +CREATE TABLE tde_db.t_encrypt_4(c2 INT NOT NULL AUTO_INCREMENT PRIMARY KEY, +c3 CHAR(255) Default 'No text', +c4 JSON , +c5 INT GENERATED ALWAYS AS (JSON_EXTRACT(c4,'$.key_a')) STORED, +c6 INT GENERATED ALWAYS AS (JSON_EXTRACT(c4,'$.key_b')) VIRTUAL, +c7 POINT NOT NULL, +spatial INDEX idx2 (c7) +) ENCRYPTION="KEYRING" ENGINE = InnoDB; +# non encrypt table possible +CREATE TABLE tde_db.t_non_encrypt_4(c2 INT NOT NULL AUTO_INCREMENT PRIMARY KEY, +c3 CHAR(255) Default 'No text', +c4 JSON , +c5 INT GENERATED ALWAYS AS (JSON_EXTRACT(c4,'\$.key_a')) STORED, +c6 INT GENERATED ALWAYS AS (JSON_EXTRACT(c4,'\$.key_b')) VIRTUAL, +c7 POINT NOT NULL, +spatial INDEX idx2 (c7) +) ENGINE = InnoDB; +INSERT INTO tde_db.t_encrypt_4(c3,c4,c7) SELECT c3,c4,c7 FROM tde_db.t_non_encrypt; +SELECT COUNT(*) FROM tde_db.t_encrypt_4; +COUNT(*) +64 +INSERT INTO tde_db.t_non_encrypt_4(c3,c4,c7) SELECT c3,c4,c7 FROM tde_db.t_non_encrypt; +SELECT COUNT(*) FROM tde_db.t_non_encrypt_4; +COUNT(*) +64 +ALTER INSTANCE ROTATE INNODB MASTER KEY; +# old encrypt table not accessible +SELECT COUNT(*) FROM tde_db.t_encrypt; +Got one of the listed errors +SELECT COUNT(*) FROM tde_db.t_encrypt_2; +Got one of the listed errors +# NON encrypt old table are accessible +SELECT COUNT(*) FROM tde_db.t_non_encrypt; +COUNT(*) +64 +SELECT COUNT(*) FROM tde_db.t_non_encrypt_2; +COUNT(*) +64 +# new encrypt table accessible +SELECT COUNT(*) FROM tde_db.t_encrypt_4; +COUNT(*) +64 +# new NON encrypt table accessible +SELECT COUNT(*) FROM tde_db.t_non_encrypt_4; +COUNT(*) +64 +DROP TABLE tde_db.t_encrypt , tde_db.t_encrypt_2 ,tde_db.t_encrypt_4; +DROP TABLE tde_db.t_non_encrypt , tde_db.t_non_encrypt_2 ,tde_db.t_non_encrypt_4; +DROP DATABASE tde_db; +# Starting server without keyring +# restart: +SET GLOBAL innodb_file_per_table=1; diff --git a/mysql-test/suite/innodb/t/innodb-import-partition.test b/mysql-test/suite/innodb/t/innodb-import-partition.test index dbe9692c3cb0..9d510432b831 100644 --- a/mysql-test/suite/innodb/t/innodb-import-partition.test +++ b/mysql-test/suite/innodb/t/innodb-import-partition.test @@ -281,6 +281,8 @@ SELECT * FROM t1 ORDER BY c1; DROP TABLE t1; --disable_query_log +call mtr.add_suppression("InnoDB: Trying to access missing tablespace"); +call mtr.add_suppression("InnoDB: Cannot save statistics for table `test`\.`t1` .* because the \.ibd file is missing\."); call mtr.add_suppression("InnoDB: Cannot calculate statistics for table .* because the \.ibd file is missing"); call mtr.add_suppression("InnoDB: Cannot delete tablespace .* in DISCARD TABLESPACE. Tablespace not found"); call mtr.add_suppression("InnoDB: Cannot delete tablespace .* because it is not found in the tablespace memory cache."); diff --git a/mysql-test/suite/innodb/t/innodb-wl5522-debug.test b/mysql-test/suite/innodb/t/innodb-wl5522-debug.test index a94159fa99eb..843fafff4ee7 100644 --- a/mysql-test/suite/innodb/t/innodb-wl5522-debug.test +++ b/mysql-test/suite/innodb/t/innodb-wl5522-debug.test @@ -1237,10 +1237,11 @@ call mtr.add_suppression("\\[Warning\\] InnoDB: Please refer to .*innodb-trouble call mtr.add_suppression("\\[Warning\\] InnoDB: Ignoring tablespace `test_wl5522/t1` because it could not be opened"); call mtr.add_suppression("\\[Warning\\] InnoDB: Tablespace for table `test_wl5522`\.`t1` is set as discarded"); call mtr.add_suppression("\\[Warning\\] InnoDB: t1.ibd: Page .* at offset .* looks corrupted"); -call mtr.add_suppression("\\[Warning\\] InnoDB: Cannot calculate statistics for table `test_wl5522`\.`t1` because the \.ibd file is missing"); +call mtr.add_suppression("\\[Warning\\] InnoDB: Cannot save statistics for table `test_wl5522`\\.`t1` because the \\.ibd file is missing"); call mtr.add_suppression("\\[Warning\\] InnoDB: Monitor ibuf_merges is already enabled"); call mtr.add_suppression("\\[Warning\\] InnoDB: Monitor ibuf_merges_insert is already enabled"); call mtr.add_suppression("\\[Warning\\] InnoDB: Page 0 at offset 0 looks corrupted in file"); +call mtr.add_suppression("\\[Warning\\] InnoDB: Trying to access missing tablespace"); call mtr.add_suppression("\\[ERROR\\] InnoDB: Cannot open datafile for read-only:"); call mtr.add_suppression("\\[ERROR\\] InnoDB: Could not find a valid tablespace file for `test_wl5522/t1`"); call mtr.add_suppression("\\[ERROR\\] InnoDB: Failed to find tablespace for table `test_wl5522`.`t1` in the cache"); diff --git a/mysql-test/suite/innodb/t/innodb-wl5522.test b/mysql-test/suite/innodb/t/innodb-wl5522.test index c2fc5c035983..09563cb08677 100644 --- a/mysql-test/suite/innodb/t/innodb-wl5522.test +++ b/mysql-test/suite/innodb/t/innodb-wl5522.test @@ -10,6 +10,9 @@ call mtr.add_suppression("Got error -1 when reading table '.*'"); call mtr.add_suppression("InnoDB: Error: tablespace id and flags in file '.*'.*"); call mtr.add_suppression("InnoDB: The table .* doesn't have a corresponding tablespace, it was discarded"); call mtr.add_suppression("InnoDB: Unable to import tablespace `test`\.`t1` because it already exists. Please DISCARD the tablespace before IMPORT."); +call mtr.add_suppression("InnoDB: Trying to access missing tablespace"); +call mtr.add_suppression("InnoDB: Cannot save statistics for table `test`\.`t1` because the \.ibd file is missing\."); + --enable_query_log --disable_warnings diff --git a/mysql-test/suite/innodb/t/innodb-wl6045-1-master.opt b/mysql-test/suite/innodb/t/innodb-wl6045-1-master.opt deleted file mode 100644 index 22f41d57091e..000000000000 --- a/mysql-test/suite/innodb/t/innodb-wl6045-1-master.opt +++ /dev/null @@ -1,2 +0,0 @@ ---skip-stack-trace --skip-core-file ---innodb_buffer_pool_load_at_startup=OFF diff --git a/mysql-test/suite/innodb/t/innodb-wl6045-1.test b/mysql-test/suite/innodb/t/innodb-wl6045-1.test deleted file mode 100644 index 801a93ed32f5..000000000000 --- a/mysql-test/suite/innodb/t/innodb-wl6045-1.test +++ /dev/null @@ -1,225 +0,0 @@ -#************************************************************ -# WL6045:Improve Innochecksum -#************************************************************ ---source include/have_innodb.inc - -# Valgrind would complain about memory leaks when we crash on purpose. ---source include/not_valgrind.inc - -# Embedded server does not support crashing. ---source include/not_embedded.inc - -# Avoid CrashReporter popup on Mac. ---source include/not_crashrep.inc - ---echo # Set the environmental variables -let MYSQLD_BASEDIR= `SELECT @@basedir`; -let MYSQLD_DATADIR= `SELECT @@datadir`; -let SEARCH_FILE= $MYSQLTEST_VARDIR/log/my_restart.err; -call mtr.add_suppression("\\[ERROR\\] \\[FATAL\\] InnoDB: Unable to read page \\[page id: space=.*, page number=.*\\] into the buffer pool after 100 attempts"); -call mtr.add_suppression("\\[ERROR\\] InnoDB: Database page corruption on disk or a failed"); -SET GLOBAL innodb_file_per_table=on; - ---echo [1]: Test is to corrupt the ibd file, & do repair for (innodb|crc32|none) checksum through innochecksum tool - -# Disable compression for this table, otherwise our pattern matching below -# will not work ---echo # Create and populate the table to be corrupted -CREATE TABLE t1 (a INT AUTO_INCREMENT PRIMARY KEY, b TEXT) COMPRESSION="none", -ROW_FORMAT=COMPACT ENGINE=InnoDB; -INSERT INTO t1 (b) VALUES ('corrupt me'); ---disable_query_log ---let $i = 10 -while ($i) -{ - INSERT INTO t1 (b) VALUES (REPEAT('abcdefghijklmnopqrstuvwxyz', 100)); - dec $i; -} ---enable_query_log -INSERT INTO t1 (b) VALUES ('corrupt me'); - -let $MYSQLD_DATADIR=`select @@datadir`; -let t1_IBD = $MYSQLD_DATADIR/test/t1.ibd; - ---echo # Shutdown the server ---source include/shutdown_mysqld.inc - ---echo # Corrupt the t1 table - -perl; -use strict; -use warnings; -use Fcntl qw(:DEFAULT :seek); -my $ibd_file = $ENV{'t1_IBD'}; -my $chunk; -my $len; - -sysopen IBD_FILE, $ibd_file, O_RDWR || die "Unable to open $ibd_file"; - -while ($len = sysread IBD_FILE, $chunk, 1024) -{ - if ($chunk =~ s/corrupt me/korrupt me/) - { - print "Munged a string.\n"; - sysseek IBD_FILE, -$len, SEEK_CUR; - syswrite IBD_FILE, $chunk, $len; - } -} - -close IBD_FILE; -EOF - ---echo # Backup the corrupted t1.ibd for reuse for further testing. ---copy_file $t1_IBD $MYSQLD_DATADIR/test/t1.ibd.backup1 - ---echo # Write file to make mysql-test-run.pl start up the server again ---source include/start_mysqld.inc - ---echo # Write file to make mysql-test-run.pl expect the "crash", but don't ---echo # start it until it's told to ---exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect - ---echo # The below SELECT query will crash the server because some pages ---echo # on the disk are corrupted ---error 2013 -SELECT * FROM t1; ---source include/wait_until_disconnected.inc ---echo [1(a)]: Repair the ibd file with innochecksum with --write=innodb ---exec $INNOCHECKSUM --no-check --write=innodb $MYSQLD_DATADIR/test/t1.ibd -# Verify the t1.ibd for --strict-check=innodb ---exec $INNOCHECKSUM --strict-check=innodb $MYSQLD_DATADIR/test/t1.ibd - ---echo # Start the server ---source include/start_mysqld.inc - ---disable_result_log -select count(*) from t1; - ---echo # Shutdown the server ---source include/shutdown_mysqld.inc - ---echo # Move the corrupted ibd file to t1.ibd ---remove_file $MYSQLD_DATADIR/test/t1.ibd ---copy_file $MYSQLD_DATADIR/test/t1.ibd.backup1 $MYSQLD_DATADIR/test/t1.ibd - ---echo [1(b)]: Repair the ibd file with innochecksum with --write=crc32 ---exec $INNOCHECKSUM --no-check --write=crc32 $MYSQLD_DATADIR/test/t1.ibd -#Verify the t1.ibd for --strict-check=crc32 ---exec $INNOCHECKSUM --strict-check=crc32 $MYSQLD_DATADIR/test/t1.ibd - ---echo # Start the server ---source include/start_mysqld.inc - ---disable_result_log -select count(*) from t1; - ---echo # Shutdown the server ---source include/shutdown_mysqld.inc - ---echo # Move the corrupted ib file to t1.ibd ---remove_file $MYSQLD_DATADIR/test/t1.ibd ---copy_file $MYSQLD_DATADIR/test/t1.ibd.backup1 $MYSQLD_DATADIR/test/t1.ibd - ---echo [1(c)]: Repair the ibd file with innochecksum with --write=none ---exec $INNOCHECKSUM --no-check --write=none $MYSQLD_DATADIR/test/t1.ibd -# Verify the t1.ibd for --strict-check=none ---exec $INNOCHECKSUM --strict-check=none $MYSQLD_DATADIR/test/t1.ibd - ---echo # Start the server ---source include/start_mysqld.inc - ---disable_result_log -select * from t1; - -DROP TABLE t1; ---echo [19]: Test Completed - -CREATE TABLE tab1(c1 INT PRIMARY KEY,c2 VARCHAR(20)) COMPRESSION="none", ENGINE=InnoDB; -CREATE INDEX idx1 ON tab1(c2(10)); -INSERT INTO tab1 VALUES(1, 'Innochecksum InnoDB1'); - ---echo # shutdown the server ---source include/shutdown_mysqld.inc - ---remove_file $MYSQLD_DATADIR/test/t1.ibd.backup1 ---echo [2]: Test for verbose short option, output from innochecksum ---exec $INNOCHECKSUM -v $MYSQLD_DATADIR/test/tab1.ibd 2>$MYSQLTEST_VARDIR/tmp/ver_output - -perl; -use strict; -use warnings; -use File::Copy; -my $dir = $ENV{'MYSQLTEST_VARDIR'}; -opendir(DIR, $dir) or die $!; -my $file= 'ver_output'; -# open file in write mode -open IN_FILE,"<", "$dir/tmp/$file" or die $!; -open OUT_FILE, ">", "$dir/tmp/tmpfile" or die $!; -while() -{ - unless ($_=~ /^debug.*$/) { - print OUT_FILE $_; - } -} -close(IN_FILE); -close(OUT_FILE); -# move the new content from tmp file to the original file. -move ("$dir/tmp/tmpfile", "$dir/tmp/$file"); -closedir(DIR); -EOF - ---echo # Print the verbose output -cat_file $MYSQLTEST_VARDIR/tmp/ver_output; ---remove_file $MYSQLTEST_VARDIR/tmp/ver_output - ---echo [3]: test for --verbose option with --strict-check=innodb for innochecksum ---echo : With verbose long option. ---exec $INNOCHECKSUM --verbose --strict-check=crc32 $MYSQLD_DATADIR/test/tab1.ibd 2>$MYSQLTEST_VARDIR/tmp/ver_output - -perl; -use strict; -use warnings; -use File::Copy; -my $dir = $ENV{'MYSQLTEST_VARDIR'}; -opendir(DIR, $dir) or die $!; -my $file= 'ver_output'; -# open file in write mode -open IN_FILE,"<", "$dir/tmp/$file" or die $!; -open OUT_FILE, ">", "$dir/tmp/tmpfile" or die $!; -while() -{ - unless ($_=~ /^debug.*$/) { - print OUT_FILE $_; - } -} -close(IN_FILE); -close(OUT_FILE); -# move the new content from tmp file to the orginal file. -move ("$dir/tmp/tmpfile", "$dir/tmp/$file"); -closedir(DIR); -EOF - ---echo # Print the verbose output -cat_file $MYSQLTEST_VARDIR/tmp/ver_output; ---remove_file $MYSQLTEST_VARDIR/tmp/ver_output - ---echo [4]: Test for --allow-mismatches =99 ---exec $INNOCHECKSUM --allow-mismatches=99 --strict-check=none $MYSQLD_DATADIR/test/tab1.ibd 2>$MYSQLTEST_VARDIR/log/my_restart.err - ---echo # Expect the fails for checksum mismatches. Print the error message. -cat_file $SEARCH_FILE; - ---echo [5]: Test checksum check for page: 2 to page:5 ---exec $INNOCHECKSUM -s 2 -e 5 $MYSQLD_DATADIR/test/tab1.ibd - ---echo [6]: Test for checksum check for only pageno.= 2 ---exec $INNOCHECKSUM -p 2 $MYSQLD_DATADIR/test/tab1.ibd - ---echo [7]: Further Test are for rewrite checksum (innodb|crc32|none) for all ibd file & start the server. - -# Cleanup ---echo # Restart the server ---source include/start_mysqld.inc - -DROP TABLE tab1; -SET GLOBAL innodb_file_per_table=default; diff --git a/mysql-test/suite/innodb/t/innodb_bug14147491-master.opt b/mysql-test/suite/innodb/t/innodb_bug14147491-master.opt index e0ad537e7c47..410738202bdb 100644 --- a/mysql-test/suite/innodb/t/innodb_bug14147491-master.opt +++ b/mysql-test/suite/innodb/t/innodb_bug14147491-master.opt @@ -1,2 +1,4 @@ ---innodb_file_per_table=1 --skip-stack-trace --skip-core-file ---innodb_buffer_pool_load_at_startup=OFF +--innodb_file_per_table=1 +--skip-stack-trace +--skip-core-file +--loose-innodb_buffer_pool_load_at_startup=OFF diff --git a/mysql-test/suite/innodb/t/innodb_bug14147491.test b/mysql-test/suite/innodb/t/innodb_bug14147491.test index dff117e5eb59..44eeaf89d892 100644 --- a/mysql-test/suite/innodb/t/innodb_bug14147491.test +++ b/mysql-test/suite/innodb/t/innodb_bug14147491.test @@ -1,28 +1,28 @@ # # Test opening a corrupted table. # - -# Valgrind can hang or return spurious messages on DBUG_SUICIDE -source include/not_valgrind.inc; -# Avoid CrashReporter popup on Mac -source include/not_crashrep.inc; # Restarting is not supported under embedded -source include/not_embedded.inc; +-- source include/not_embedded.inc # Require InnoDB -source include/have_innodb.inc; -# Require Debug for SET DEBUG -source include/have_debug.inc; +-- source include/have_innodb.inc +#-- source include/not_encrypted.inc --disable_query_log -CALL mtr.add_suppression("\\[ERROR\\] \\[FATAL\\] InnoDB: Unable to read page \\[page id: space=.*, page number=.*\\] into the buffer pool after 100 attempts"); -CALL mtr.add_suppression("\\[ERROR\\] InnoDB: Database page corruption on disk or a failed"); +call mtr.add_suppression("InnoDB: Table `test`\\.`t1` is corrupt\\."); +call mtr.add_suppression("InnoDB: Database page corruption on disk or a failed file read of tablespace test/t1 page"); +call mtr.add_suppression("InnoDB: We detected index corruption in an InnoDB type table"); +call mtr.add_suppression("Index for table 't1' is corrupt; try to repair it"); --enable_query_log -# Disable compression for this table, otherwise our pattern matching below -# will not work +--echo # Ensure that purge will not crash on the table after we corrupt it. +SET GLOBAL innodb_purge_rseg_truncate_frequency = 1; +SET GLOBAL innodb_fast_shutdown=0; + --echo # Create and populate the table to be corrupted -CREATE TABLE t1 (a INT AUTO_INCREMENT PRIMARY KEY, b TEXT) COMPRESSION="none", -ROW_FORMAT=COMPACT ENGINE=InnoDB; + +set global innodb_file_per_table=ON; + +CREATE TABLE t1 (a INT AUTO_INCREMENT PRIMARY KEY, b TEXT) ENGINE=InnoDB; INSERT INTO t1 (b) VALUES ('corrupt me'); --disable_query_log --let $i = 10 @@ -39,9 +39,6 @@ let t1_IBD = $MYSQLD_DATADIR/test/t1.ibd; --source include/shutdown_mysqld.inc ---echo # Backup the t1.ibd before corrupting ---copy_file $t1_IBD $MYSQLD_DATADIR/test/t1.ibd.backup - --echo # Corrupt the table perl; @@ -71,33 +68,19 @@ EOF --source include/start_mysqld.inc -SET DEBUG = '+d,innodb_page_corruption_retries'; +--echo # Now t1 is corrupted but we should not crash ---echo # Write file to make mysql-test-run.pl expect the "crash", but don't ---echo # start it until it's told to ---exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect - ---echo # The below SELECT query will crash the server because some pages ---echo # on the disk are corrupted ---error 2013 +#--error 1030,1712,1932 +--error 1877 SELECT * FROM t1; -# The below mtr command --remove_file fails randomly on windows with -# error number 13 which is permission denied on nix systems. We sleep -# 1 second hoping that any process holding lock on t1.ibd is released. -SLEEP 1; - ---echo # Restore the original t1.ibd ---remove_file $MYSQLD_DATADIR/test/t1.ibd ---move_file $MYSQLD_DATADIR/test/t1.ibd.backup $MYSQLD_DATADIR/test/t1.ibd -# Remove the separate doublewrite buffer from the crashed instance as we -# are making the instance clean manually ---remove_file $MYSQLD_DATADIR/xb_doublewrite - ---source include/start_mysqld.inc +#--error 126,1030,1034,1712,1932 +--error 1877 +INSERT INTO t1(b) VALUES('abcdef'); -# Note SET DEBUG = '-d,innodb_page_corruption_retries' is not required -# because the session information is lost after server restart +#--error 1030,1712,1932 +--error 1877 +UPDATE t1 set b = 'deadbeef' where a = 1; ---echo # Cleanup +--echo # Cleanup, this must be possible DROP TABLE t1; diff --git a/mysql-test/suite/innodb/t/innodb_rename_index_err.test b/mysql-test/suite/innodb/t/innodb_rename_index_err.test index 511b010236f7..a8113ca09e19 100644 --- a/mysql-test/suite/innodb/t/innodb_rename_index_err.test +++ b/mysql-test/suite/innodb/t/innodb_rename_index_err.test @@ -1,5 +1,4 @@ # - -- source include/have_innodb.inc -- source include/have_debug.inc @@ -10,8 +9,12 @@ call mtr.add_suppression("Build InnoDB index translation table"); call mtr.add_suppression("InnoDB: Table test/t contains 0 indexes inside InnoDB, which is different from the number of indexes 1 defined in MySQL"); call mtr.add_suppression("Innodb could not find key no 0 with name i1 from dict cache for table test/t"); call mtr.add_suppression("Table test/t contains fewer indexes inside InnoDB than are defined in the MySQL .frm file"); +call mtr.add_suppression("InnoDB: Trying to access missing tablespace 911"); +call mtr.add_suppression("InnoDB: Cannot save statistics for table `test`\.`t` because the \.ibd file is missing\."); + --enable_query_log + CREATE TABLE t (c1 INT, c2 INT, KEY i2 (c2)) ENGINE=INNODB; SET DEBUG='+d,ib_rename_index_fail1'; diff --git a/mysql-test/suite/innodb/t/table_encrypt_1_rotated_keys_small.test b/mysql-test/suite/innodb/t/table_encrypt_1_rotated_keys_small.test new file mode 100644 index 000000000000..e88911e1500a --- /dev/null +++ b/mysql-test/suite/innodb/t/table_encrypt_1_rotated_keys_small.test @@ -0,0 +1,3 @@ +--let $keyring_restart_param=restart:--early-plugin-load="keyring_file=$KEYRING_PLUGIN" --loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring $KEYRING_PLUGIN_OPT +--let $encryption_type=KEYRING +--source include/table_encrypt_1_small.inc diff --git a/mysql-test/suite/innodb/t/table_encrypt_2.test b/mysql-test/suite/innodb/t/table_encrypt_2.test index b5b654c8254a..e333ba9fa2e7 100644 --- a/mysql-test/suite/innodb/t/table_encrypt_2.test +++ b/mysql-test/suite/innodb/t/table_encrypt_2.test @@ -18,6 +18,7 @@ call mtr.add_suppression("Plugin keyring_file reported"); --replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR eval SET @@global.keyring_file_data="$MYSQL_TMP_DIR/keyring"; +--let $encryption_type=Y --source include/table_encrypt_2.inc #Cleanup diff --git a/mysql-test/suite/innodb/t/table_encrypt_2_keyring-master.opt b/mysql-test/suite/innodb/t/table_encrypt_2_keyring-master.opt new file mode 100644 index 000000000000..4be41e0f321b --- /dev/null +++ b/mysql-test/suite/innodb/t/table_encrypt_2_keyring-master.opt @@ -0,0 +1,2 @@ +$KEYRING_PLUGIN_OPT +$KEYRING_PLUGIN_LOAD diff --git a/mysql-test/suite/innodb_zip/t/wl5522_debug_zip.test b/mysql-test/suite/innodb_zip/t/wl5522_debug_zip.test index fd6ac674a9a0..c6867ffc69ac 100644 --- a/mysql-test/suite/innodb_zip/t/wl5522_debug_zip.test +++ b/mysql-test/suite/innodb_zip/t/wl5522_debug_zip.test @@ -725,6 +725,9 @@ call mtr.add_suppression("\\[Warning\\] InnoDB: Ignoring tablespace `test_wl5522 call mtr.add_suppression("\\[Warning\\] InnoDB: Monitor ibuf_merges is already enabled"); call mtr.add_suppression("\\[Warning\\] InnoDB: Monitor ibuf_merges_insert is already enabled"); call mtr.add_suppression("\\[Warning\\] InnoDB: Tablespace for table .* is set as discarded."); +call mtr.add_suppression("\\[Warning\\] InnoDB: Cannot save statistics for table"); +call mtr.add_suppression("\\[Warning\\] InnoDB: Trying to access missing tablespace"); + --enable_query_log #cleanup diff --git a/mysql-test/suite/innodb_zip/t/wl5522_zip.test b/mysql-test/suite/innodb_zip/t/wl5522_zip.test index 4318f948c6f8..d27ce262df55 100644 --- a/mysql-test/suite/innodb_zip/t/wl5522_zip.test +++ b/mysql-test/suite/innodb_zip/t/wl5522_zip.test @@ -10,8 +10,10 @@ --source include/have_innodb_16k.inc --disable_query_log -call mtr.add_suppression("\\[Warning\\] InnoDB: cannot calculate statistics for table `test`\.`t1` because the \.ibd file is missing"); +call mtr.add_suppression("\\[Warning\\] InnoDB: Cannot save statistics for table `test`\\.`t1` because the \\.ibd file is missing"); +call mtr.add_suppression("\\[Warning\\] InnoDB: Trying to access missing tablespace"); call mtr.add_suppression("\\[ERROR\\] InnoDB: Unable to import tablespace `test`\.`t1` because it already exists. Please DISCARD the tablespace before IMPORT."); + --enable_query_log --disable_warnings diff --git a/mysql-test/suite/perfschema/t/show_sanity.test b/mysql-test/suite/perfschema/t/show_sanity.test index 5ec9ed1d9c98..c6e44701d497 100644 --- a/mysql-test/suite/perfschema/t/show_sanity.test +++ b/mysql-test/suite/perfschema/t/show_sanity.test @@ -443,6 +443,9 @@ insert into test.sanity values ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_EMPTY_FREE_LIST_ALGORITHM"), ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_ENCRYPT_ONLINE_ALTER_LOGS"), ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_ENCRYPT_TABLES"), + ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_ENCRYPTION_ROTATE_KEY_AGE"), + ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_ENCRYPTION_ROTATION_IOPS"), + ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_ENCRYPTION_THREADS"), ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_FAST_SHUTDOWN"), ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_FILE_FORMAT"), ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_FILE_FORMAT_CHECK"), @@ -837,10 +840,16 @@ insert into test.sanity values ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_DATA_WRITTEN"), ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_DBLWR_PAGES_WRITTEN"), ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_DBLWR_WRITES"), + ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_ENCRYPTION_KEY_ROTATION_LIST_LENGTH"), ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_ENCRYPTION_N_MERGE_BLOCKS_DECRYPTED"), ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_ENCRYPTION_N_MERGE_BLOCKS_ENCRYPTED"), ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_ENCRYPTION_N_ROWLOG_BLOCKS_DECRYPTED"), ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_ENCRYPTION_N_ROWLOG_BLOCKS_ENCRYPTED"), + ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_ENCRYPTION_ROTATION_ESTIMATED_IOPS"), + ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_ENCRYPTION_ROTATION_PAGES_FLUSHED"), + ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_ENCRYPTION_ROTATION_PAGES_MODIFIED"), + ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_ENCRYPTION_ROTATION_PAGES_READ_FROM_CACHE"), + ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_ENCRYPTION_ROTATION_PAGES_READ_FROM_DISK"), ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_HAVE_ATOMIC_BUILTINS"), ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_IBUF_FREE_LIST"), ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_IBUF_SEGMENT_SIZE"), @@ -856,6 +865,8 @@ insert into test.sanity values ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_MEM_ADAPTIVE_HASH"), ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_MEM_DICTIONARY"), ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_NUM_OPEN_FILES"), + ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_NUM_PAGES_DECRYPTED"), + ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_NUM_PAGES_ENCRYPTED"), ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_OLDEST_VIEW_LOW_LIMIT_TRX_ID"), ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_OS_LOG_FSYNCS"), ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_OS_LOG_PENDING_FSYNCS"), @@ -864,6 +875,7 @@ insert into test.sanity values ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_PAGES_CREATED"), ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_PAGES_READ"), ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_PAGES_WRITTEN"), + ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_PAGES0_READ"), ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_PAGE_SIZE"), ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_PURGE_TRX_ID"), ("JUNK: GLOBAL-ONLY", "I_S.SESSION_STATUS", "INNODB_PURGE_TRX_ID_AGE"), diff --git a/mysql-test/suite/query_rewrite_plugins/r/optional_columns.result b/mysql-test/suite/query_rewrite_plugins/r/optional_columns.result index 02d34b1ed3c9..022ac96774fc 100644 --- a/mysql-test/suite/query_rewrite_plugins/r/optional_columns.result +++ b/mysql-test/suite/query_rewrite_plugins/r/optional_columns.result @@ -27,7 +27,7 @@ Warnings: Warning 1681 'RESET QUERY CACHE' is deprecated and will be removed in a future release. SELECT * FROM query_rewrite.rewrite_rules; id pattern pattern_database replacement enabled message pattern_digest normalized_pattern -1 SELECT ? NULL SELECT "literal" YES NULL 24e5a8c19fe8009f403640dabf2a9e0f select ? +1 SELECT ? NULL SELECT "literal" YES NULL 3fff4c5a5ca5e1e484663cab257efd1e select ? SELECT NULL; literal literal @@ -82,11 +82,11 @@ id pattern pattern_database replacement enabled message pattern_digest normalize CALL query_rewrite.flush_rewrite_rules(); SELECT * FROM query_rewrite.rewrite_rules; id pattern pattern_database replacement enabled message pattern_digest normalized_pattern -2 SELECT * FROM test.t1 WHERE ( a = ? AND TRUE ) OR b = ? NULL SELECT a FROM test.t1 WHERE a = ? YES NULL 27e1b96aff83a17ac1ba7eadd7c59c4e select `*` from `test`.`t1` where (((`a` = ?) and ?) or (`b` = ?)) -3 SELECT a FROM test.t1 NULL SELECT * FROM test.t1 WHERE a = 'abc' YES NULL 0373fbe41d5baf3362e8f6ce2733b224 select `a` from `test`.`t1` -4 SELECT a FROM test.t1 WHERE b = ? NULL SELECT * FROM test.t1 WHERE b = ? YES NULL 3404933f97b5c385c8bf9c474384bfe4 select `a` from `test`.`t1` where (`b` = ?) -5 SELECT * FROM test.t2 NULL SELECT * FROM test.t1 JOIN test.t2 ON t1.a = t2.a YES NULL e36be074fe57a838ca5044457a6c7224 select `*` from `test`.`t2` -6 SELECT * FROM test.t1 WHERE a = ? OR b = ? NULL SELECT * FROM test.t1 WHERE b = ? OR a = ? YES NULL 9cd3fb40c494c610b504363165b66658 select `*` from `test`.`t1` where ((`a` = ?) or (`b` = ?)) +2 SELECT * FROM test.t1 WHERE ( a = ? AND TRUE ) OR b = ? NULL SELECT a FROM test.t1 WHERE a = ? YES NULL b893182789d620f41dbbf72aac0b7ebe select `*` from `test`.`t1` where (((`a` = ?) and ?) or (`b` = ?)) +3 SELECT a FROM test.t1 NULL SELECT * FROM test.t1 WHERE a = 'abc' YES NULL 320e6e9686ed89a59f8415e110691107 select `a` from `test`.`t1` +4 SELECT a FROM test.t1 WHERE b = ? NULL SELECT * FROM test.t1 WHERE b = ? YES NULL 4f66faff1f968eef78e5540f3c6cf914 select `a` from `test`.`t1` where (`b` = ?) +5 SELECT * FROM test.t2 NULL SELECT * FROM test.t1 JOIN test.t2 ON t1.a = t2.a YES NULL 34d498a84c9928b740bbed830bc02923 select `*` from `test`.`t2` +6 SELECT * FROM test.t1 WHERE a = ? OR b = ? NULL SELECT * FROM test.t1 WHERE b = ? OR a = ? YES NULL b42ba82c98f4675675f3d104d344b6f2 select `*` from `test`.`t1` where ((`a` = ?) or (`b` = ?)) # Check a query that doesn't have a rewrite rule doesn't get rewritten. SELECT b FROM test.t1; b @@ -187,9 +187,9 @@ id pattern pattern_database replacement enabled message pattern_digest normalize CALL query_rewrite.flush_rewrite_rules(); SELECT * FROM query_rewrite.rewrite_rules; id pattern pattern_database replacement enabled message pattern_digest normalized_pattern -7 SELECT 1, ? NULL SELECT "rewritten w/rule 1" YES NULL fba269d51992d7d4707d190d7e43e463 select ?,? -8 SELECT 2, ? NULL SELECT "rewritten w/rule 2" YES NULL fba269d51992d7d4707d190d7e43e463 select ?,? -9 SELECT "The_original_query" NULL SELECT "The_rewritten_query" YES NULL 24e5a8c19fe8009f403640dabf2a9e0f select ? +7 SELECT 1, ? NULL SELECT "rewritten w/rule 1" YES NULL cea49e11d5a38cbb4d487197d644cd00 select ?,? +8 SELECT 2, ? NULL SELECT "rewritten w/rule 2" YES NULL cea49e11d5a38cbb4d487197d644cd00 select ?,? +9 SELECT "The_original_query" NULL SELECT "The_rewritten_query" YES NULL 3fff4c5a5ca5e1e484663cab257efd1e select ? SELECT 1, 1; rewritten w/rule 1 rewritten w/rule 1 diff --git a/mysql-test/suite/rpl_encryption/r/encrypted_master_switch_to_unencrypted.result b/mysql-test/suite/rpl_encryption/r/encrypted_master_switch_to_unencrypted.result index c359cd619171..bef1bd351948 100644 --- a/mysql-test/suite/rpl_encryption/r/encrypted_master_switch_to_unencrypted.result +++ b/mysql-test/suite/rpl_encryption/r/encrypted_master_switch_to_unencrypted.result @@ -67,7 +67,7 @@ NOT FOUND /table2_to_encrypt/ in master-bin.0* ##################################################### # Part 3: restart master again without encryption ##################################################### -call mtr.add_suppression("Failed to fetch percona_binlog key \\(version 0\\) from keyring and thus failed to initialize binlog encryption."); +call mtr.add_suppression("Failed to fetch percona_binlog key \\(version 1\\) from keyring and thus failed to initialize binlog encryption."); call mtr.add_suppression("Error initializing decryption while reading GTIDs from binary log"); call mtr.add_suppression("Found invalid Format description event in binary log"); include/rpl_restart_server.inc [server_number=1] diff --git a/mysql-test/suite/rpl_encryption/t/encrypted_master_switch_to_unencrypted.test b/mysql-test/suite/rpl_encryption/t/encrypted_master_switch_to_unencrypted.test index 2610e4a289fd..ce7a0faeac8a 100644 --- a/mysql-test/suite/rpl_encryption/t/encrypted_master_switch_to_unencrypted.test +++ b/mysql-test/suite/rpl_encryption/t/encrypted_master_switch_to_unencrypted.test @@ -99,7 +99,7 @@ INSERT INTO table2_to_encrypt SELECT NULL,NOW(),b FROM table2_to_encrypt; # before the restart. master-verify-checksum should help us detect that the encrypted events # are incorrect as checksum will not be correct. -call mtr.add_suppression("Failed to fetch percona_binlog key \\(version 0\\) from keyring and thus failed to initialize binlog encryption."); +call mtr.add_suppression("Failed to fetch percona_binlog key \\(version 1\\) from keyring and thus failed to initialize binlog encryption."); call mtr.add_suppression("Error initializing decryption while reading GTIDs from binary log"); # Legit Format description events is never encrypted - as it comes before Start encryption event and is the # first event in binlog. However garbage data can get interpreted as Format description event - in case of this event diff --git a/mysql-test/suite/sys_vars/r/innodb_default_encryption_key_id_basic.result b/mysql-test/suite/sys_vars/r/innodb_default_encryption_key_id_basic.result new file mode 100644 index 000000000000..5f7aa9011e0c --- /dev/null +++ b/mysql-test/suite/sys_vars/r/innodb_default_encryption_key_id_basic.result @@ -0,0 +1,3 @@ +SELECT @@global.innodb_default_encryption_key_id; +@@global.innodb_default_encryption_key_id +0 diff --git a/mysql-test/suite/sys_vars/r/innodb_encryption_rotate_key_age_basic.result b/mysql-test/suite/sys_vars/r/innodb_encryption_rotate_key_age_basic.result new file mode 100644 index 000000000000..9ba73ebec4a6 --- /dev/null +++ b/mysql-test/suite/sys_vars/r/innodb_encryption_rotate_key_age_basic.result @@ -0,0 +1,3 @@ +SELECT @@global.innodb_encryption_rotate_key_age; +@@global.innodb_encryption_rotate_key_age +1 diff --git a/mysql-test/suite/sys_vars/r/innodb_encryption_rotation_iops_basic.result b/mysql-test/suite/sys_vars/r/innodb_encryption_rotation_iops_basic.result new file mode 100644 index 000000000000..66755bb25618 --- /dev/null +++ b/mysql-test/suite/sys_vars/r/innodb_encryption_rotation_iops_basic.result @@ -0,0 +1,3 @@ +SELECT @@global.innodb_encryption_rotation_iops; +@@global.innodb_encryption_rotation_iops +100 diff --git a/mysql-test/suite/sys_vars/r/innodb_encryption_threads_basic.result b/mysql-test/suite/sys_vars/r/innodb_encryption_threads_basic.result new file mode 100644 index 000000000000..60a89be14aef --- /dev/null +++ b/mysql-test/suite/sys_vars/r/innodb_encryption_threads_basic.result @@ -0,0 +1,3 @@ +SELECT @@global.innodb_encryption_threads; +@@global.innodb_encryption_threads +0 diff --git a/mysql-test/suite/sys_vars/r/innodb_monitor_disable_basic.result b/mysql-test/suite/sys_vars/r/innodb_monitor_disable_basic.result index a0bbe110397c..9ae8a4453f88 100644 --- a/mysql-test/suite/sys_vars/r/innodb_monitor_disable_basic.result +++ b/mysql-test/suite/sys_vars/r/innodb_monitor_disable_basic.result @@ -37,6 +37,7 @@ buffer_pool_pages_free disabled buffer_pages_created disabled buffer_pages_written disabled buffer_pages_read disabled +buffer_pages0_read disabled buffer_data_reads disabled buffer_data_written disabled buffer_flush_batch_scanned disabled @@ -175,6 +176,8 @@ compress_pages_compressed disabled compress_pages_decompressed disabled compression_pad_increments disabled compression_pad_decrements disabled +pages_encrypted disabled +pages_decrypted disabled index_page_splits disabled index_page_merge_attempts disabled index_page_merge_successful disabled diff --git a/mysql-test/suite/sys_vars/r/innodb_monitor_enable_basic.result b/mysql-test/suite/sys_vars/r/innodb_monitor_enable_basic.result index a0bbe110397c..9ae8a4453f88 100644 --- a/mysql-test/suite/sys_vars/r/innodb_monitor_enable_basic.result +++ b/mysql-test/suite/sys_vars/r/innodb_monitor_enable_basic.result @@ -37,6 +37,7 @@ buffer_pool_pages_free disabled buffer_pages_created disabled buffer_pages_written disabled buffer_pages_read disabled +buffer_pages0_read disabled buffer_data_reads disabled buffer_data_written disabled buffer_flush_batch_scanned disabled @@ -175,6 +176,8 @@ compress_pages_compressed disabled compress_pages_decompressed disabled compression_pad_increments disabled compression_pad_decrements disabled +pages_encrypted disabled +pages_decrypted disabled index_page_splits disabled index_page_merge_attempts disabled index_page_merge_successful disabled diff --git a/mysql-test/suite/sys_vars/r/innodb_monitor_reset_all_basic.result b/mysql-test/suite/sys_vars/r/innodb_monitor_reset_all_basic.result index a0bbe110397c..9ae8a4453f88 100644 --- a/mysql-test/suite/sys_vars/r/innodb_monitor_reset_all_basic.result +++ b/mysql-test/suite/sys_vars/r/innodb_monitor_reset_all_basic.result @@ -37,6 +37,7 @@ buffer_pool_pages_free disabled buffer_pages_created disabled buffer_pages_written disabled buffer_pages_read disabled +buffer_pages0_read disabled buffer_data_reads disabled buffer_data_written disabled buffer_flush_batch_scanned disabled @@ -175,6 +176,8 @@ compress_pages_compressed disabled compress_pages_decompressed disabled compression_pad_increments disabled compression_pad_decrements disabled +pages_encrypted disabled +pages_decrypted disabled index_page_splits disabled index_page_merge_attempts disabled index_page_merge_successful disabled diff --git a/mysql-test/suite/sys_vars/r/innodb_monitor_reset_basic.result b/mysql-test/suite/sys_vars/r/innodb_monitor_reset_basic.result index a0bbe110397c..9ae8a4453f88 100644 --- a/mysql-test/suite/sys_vars/r/innodb_monitor_reset_basic.result +++ b/mysql-test/suite/sys_vars/r/innodb_monitor_reset_basic.result @@ -37,6 +37,7 @@ buffer_pool_pages_free disabled buffer_pages_created disabled buffer_pages_written disabled buffer_pages_read disabled +buffer_pages0_read disabled buffer_data_reads disabled buffer_data_written disabled buffer_flush_batch_scanned disabled @@ -175,6 +176,8 @@ compress_pages_compressed disabled compress_pages_decompressed disabled compression_pad_increments disabled compression_pad_decrements disabled +pages_encrypted disabled +pages_decrypted disabled index_page_splits disabled index_page_merge_attempts disabled index_page_merge_successful disabled diff --git a/mysql-test/suite/sys_vars/t/innodb_default_encryption_key_id_basic.test b/mysql-test/suite/sys_vars/t/innodb_default_encryption_key_id_basic.test new file mode 100644 index 000000000000..a48bbb332551 --- /dev/null +++ b/mysql-test/suite/sys_vars/t/innodb_default_encryption_key_id_basic.test @@ -0,0 +1,5 @@ +--source include/have_innodb.inc + +--skip Not implemented + +SELECT @@global.innodb_default_encryption_key_id; diff --git a/mysql-test/suite/sys_vars/t/innodb_encryption_rotate_key_age_basic.test b/mysql-test/suite/sys_vars/t/innodb_encryption_rotate_key_age_basic.test new file mode 100644 index 000000000000..76f561bf7058 --- /dev/null +++ b/mysql-test/suite/sys_vars/t/innodb_encryption_rotate_key_age_basic.test @@ -0,0 +1,5 @@ +--source include/have_innodb.inc + +--skip Not implemented + +SELECT @@global.innodb_encryption_rotate_key_age; diff --git a/mysql-test/suite/sys_vars/t/innodb_encryption_rotation_iops_basic.test b/mysql-test/suite/sys_vars/t/innodb_encryption_rotation_iops_basic.test new file mode 100644 index 000000000000..6ad1f9317685 --- /dev/null +++ b/mysql-test/suite/sys_vars/t/innodb_encryption_rotation_iops_basic.test @@ -0,0 +1,5 @@ +--source include/have_innodb.inc + +--skip Not implemented + +SELECT @@global.innodb_encryption_rotation_iops; diff --git a/mysql-test/suite/sys_vars/t/innodb_encryption_threads_basic.test b/mysql-test/suite/sys_vars/t/innodb_encryption_threads_basic.test new file mode 100644 index 000000000000..9ab711d32abe --- /dev/null +++ b/mysql-test/suite/sys_vars/t/innodb_encryption_threads_basic.test @@ -0,0 +1,5 @@ +--source include/have_innodb.inc + +--skip Not implemented + +SELECT @@global.innodb_encryption_threads; diff --git a/mysys/system_key.c b/mysys/system_key.c index d30e6d45011e..c100b475894a 100644 --- a/mysys/system_key.c +++ b/mysys/system_key.c @@ -18,13 +18,38 @@ #include #include "my_sys.h" +struct Valid_percona_system_key +{ + const char *key_name; + size_t key_length; + my_bool is_prefix; // If set valid percona key must start with prefix key_name. If is_prefix is not set + // valid key must match exactly the name from key_name +}; + /** System keys cannot have ':' in their name. We use ':' as a separator between system key's name and system key's version. */ -const char* valid_percona_system_keys[] = {PERCONA_BINLOG_KEY_NAME}; +struct Valid_percona_system_key valid_percona_system_keys[] = { {PERCONA_BINLOG_KEY_NAME, 16, FALSE}, + {PERCONA_INNODB_KEY_NAME, 32, TRUE} }; const size_t valid_percona_system_keys_size = array_elements(valid_percona_system_keys); +my_bool is_valid_percona_system_key(const char *key_name, size_t *key_length) +{ + uint i= 0; + for(; i < valid_percona_system_keys_size; ++i) + { + if ((valid_percona_system_keys[i].is_prefix && strstr(key_name, valid_percona_system_keys[i].key_name) == key_name) || + (!valid_percona_system_keys[i].is_prefix && strcmp(valid_percona_system_keys[i].key_name, key_name) == 0)) + { + *key_length = valid_percona_system_keys[i].key_length; + return TRUE; + } + } + return FALSE; +} + +// Only parse the latest key - from system_keys_container - do not parse keys from keys_container uchar* parse_system_key(const uchar *key, const size_t key_length, uint *key_version, uchar **key_data, size_t *key_data_length) { @@ -53,11 +78,9 @@ uchar* parse_system_key(const uchar *key, const size_t key_length, uint *key_ver my_free(version); return NULL; // conversion failed } + my_free(version); DBUG_ASSERT(ulong_key_version <= UINT_MAX); // sanity check - *key_version= (uint)ulong_key_version; - - my_free(version); *key_data_length= key_length - (key_version_length + 1); // skip ':' after key version if (*key_data_length == 0) @@ -69,5 +92,6 @@ uchar* parse_system_key(const uchar *key, const size_t key_length, uint *key_ver return NULL; memcpy(*key_data, key+key_version_length+1, *key_data_length); // skip ':' after key version + *key_version= (uint)ulong_key_version; return *key_data; } diff --git a/plugin/keyring/common/system_keys_container.cc b/plugin/keyring/common/system_keys_container.cc index faed203d6a5f..863c941f5047 100644 --- a/plugin/keyring/common/system_keys_container.cc +++ b/plugin/keyring/common/system_keys_container.cc @@ -98,7 +98,7 @@ bool System_keys_container::rotate_key_id_if_system_key_without_version(IKey *ke if (!is_system_key_without_version(key)) return false; - uint key_version = 0; // if we rotate from plain system key, we assign version 0 to it + uint key_version = 1; // if we rotate from plain system key, we assign version 1 to it if (system_key_id_to_system_key.count(*key->get_key_id()) != 0) { key_version = system_key_id_to_system_key[*key->get_key_id()]->get_key_version(); diff --git a/plugin/keyring_vault/tests/mtr/innodb_row_log_encryption.result b/plugin/keyring_vault/tests/mtr/innodb_row_log_encryption.result index a1d7b4435210..20f92e0043de 100644 --- a/plugin/keyring_vault/tests/mtr/innodb_row_log_encryption.result +++ b/plugin/keyring_vault/tests/mtr/innodb_row_log_encryption.result @@ -20,6 +20,7 @@ SET DEBUG_SYNC= 'now SIGNAL updated'; DROP TABLE t2; SELECT variable_value > 0 FROM performance_schema.global_status WHERE variable_name = 'innodb_num_pages_encrypted'; variable_value > 0 +1 SELECT variable_value > 0 FROM performance_schema.global_status WHERE variable_name = 'innodb_encryption_n_merge_blocks_encrypted'; variable_value > 0 1 diff --git a/plugin/keyring_vault/tests/mtr/table_encrypt_2.test b/plugin/keyring_vault/tests/mtr/table_encrypt_2.test index 6df7a8a4b17a..9beb6e9ea75f 100644 --- a/plugin/keyring_vault/tests/mtr/table_encrypt_2.test +++ b/plugin/keyring_vault/tests/mtr/table_encrypt_2.test @@ -26,6 +26,7 @@ call mtr.add_suppression("Plugin keyring_vault reported"); --replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR eval SET @@global.keyring_vault_config="$KEYRING_CONF_FILE_1"; +--let $encryption_type=Y --source include/table_encrypt_2.inc # Delete mount points diff --git a/plugin/keyring_vault/tests/mtr/table_encrypt_2_keyring-master.opt b/plugin/keyring_vault/tests/mtr/table_encrypt_2_keyring-master.opt new file mode 100644 index 000000000000..1f8fd2247925 --- /dev/null +++ b/plugin/keyring_vault/tests/mtr/table_encrypt_2_keyring-master.opt @@ -0,0 +1,2 @@ +$KEYRING_VAULT_PLUGIN_OPT +$KEYRING_VAULT_PLUGIN_LOAD diff --git a/plugin/keyring_vault/tests/mtr/table_encrypt_2_keyring.result b/plugin/keyring_vault/tests/mtr/table_encrypt_2_keyring.result new file mode 100644 index 000000000000..f15139dfcdbb --- /dev/null +++ b/plugin/keyring_vault/tests/mtr/table_encrypt_2_keyring.result @@ -0,0 +1,142 @@ +call mtr.add_suppression("\\[ERROR\\] Function 'keyring_vault' already exists"); +call mtr.add_suppression("\\[ERROR\\] Couldn't load plugin named 'keyring_vault' with soname 'keyring_vault.*'."); +call mtr.add_suppression("Plugin keyring_vault reported"); +SET @@global.keyring_vault_config="MYSQLTEST_VARDIR/std_data/keyring_vault_confs/keyring_vault1.conf"; +CREATE TABLE t1(c1 int) ENGINE=InnoDB ENCRYPTION="KEYRING"; +DROP TABLE t1; +# restart: +DROP TABLE IF EXISTS t1; +SET GLOBAL innodb_file_per_table = 1; +SELECT @@innodb_file_per_table; +@@innodb_file_per_table +1 +CREATE TABLE t1(c1 INT, c2 char(20)) ENCRYPTION="KEYRING" ENGINE = InnoDB; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) DEFAULT NULL, + `c2` char(20) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=0 +INSERT INTO t1 VALUES(0, "aaaaa"); +INSERT INTO t1 VALUES(1, "bbbbb"); +INSERT INTO t1 VALUES(2, "ccccc"); +INSERT INTO t1 VALUES(3, "ddddd"); +INSERT INTO t1 VALUES(4, "eeeee"); +INSERT INTO t1 VALUES(5, "fffff"); +INSERT INTO t1 VALUES(6, "ggggg"); +INSERT INTO t1 VALUES(7, "hhhhh"); +INSERT INTO t1 VALUES(8, "iiiii"); +INSERT INTO t1 VALUES(9, "jjjjj"); +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +SELECT * FROM t1 LIMIT 10; +c1 c2 +0 aaaaa +1 bbbbb +2 ccccc +3 ddddd +4 eeeee +5 fffff +6 ggggg +7 hhhhh +8 iiiii +9 jjjjj +# restart: +SELECT * FROM t1 LIMIT 10; +c1 c2 +0 aaaaa +1 bbbbb +2 ccccc +3 ddddd +4 eeeee +5 fffff +6 ggggg +7 hhhhh +8 iiiii +9 jjjjj +ALTER INSTANCE ROTATE INNODB MASTER KEY; +DROP TABLE t1; +CREATE TABLE t1(c1 INT, c2 char(20)) ENCRYPTION="KEYRING" ENGINE = InnoDB; +INSERT INTO t1 VALUES(0, "aaaaa"); +INSERT INTO t1 VALUES(1, "bbbbb"); +INSERT INTO t1 VALUES(2, "ccccc"); +INSERT INTO t1 VALUES(3, "ddddd"); +INSERT INTO t1 VALUES(4, "eeeee"); +INSERT INTO t1 VALUES(5, "fffff"); +INSERT INTO t1 VALUES(6, "ggggg"); +INSERT INTO t1 VALUES(7, "hhhhh"); +INSERT INTO t1 VALUES(8, "iiiii"); +INSERT INTO t1 VALUES(9, "jjjjj"); +# restart: +SELECT * FROM t1 LIMIT 10; +c1 c2 +0 aaaaa +1 bbbbb +2 ccccc +3 ddddd +4 eeeee +5 fffff +6 ggggg +7 hhhhh +8 iiiii +9 jjjjj +DROP TABLE t1; +# restart: +SET block_encryption_mode = 'aes-256-cbc'; +DROP DATABASE IF EXISTS tde_db; +CREATE DATABASE tde_db; +CREATE TABLE tde_db.t1(c1 INT PRIMARY KEY, c2 char(50)) ENCRYPTION = 'KEYRING' ENGINE = InnoDB; +INSERT INTO tde_db.t1 VALUES(0, 'abc'); +INSERT INTO tde_db.t1 VALUES(1, 'xyz'); +INSERT INTO tde_db.t1 VALUES(2, null); +INSERT INTO tde_db.t1 VALUES(3, null); +SELECT * FROM tde_db.t1 LIMIT 10; +c1 c2 +0 abc +1 xyz +2 NULL +3 NULL +ALTER INSTANCE ROTATE INNODB MASTER KEY; +SELECT * FROM tde_db.t1 LIMIT 10; +c1 c2 +0 abc +1 xyz +2 NULL +3 NULL +# Mysqldump output + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `tde_db` /*!40100 DEFAULT CHARACTER SET latin1 */; + +USE `tde_db`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `t1` ( + `c1` int(11) NOT NULL, + `c2` char(50) DEFAULT NULL, + PRIMARY KEY (`c1`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='KEYRING' ENCRYPTION_KEY_ID=0; +/*!40101 SET character_set_client = @saved_cs_client */; +INSERT INTO `t1` VALUES (0,'abc'),(1,'xyz'),(2,NULL),(3,NULL); +# Redirecting mysqlpump output to MYSQL_TMP_DIR/mysqlpump_encrypt.sql +DROP DATABASE tde_db; +# Loading tables from mysqlpump_encrypt.sql +SELECT * FROM tde_db.t1 LIMIT 10; +c1 c2 +0 abc +1 xyz +2 NULL +3 NULL +INSERT INTO tde_db.t1 VALUES(4, null); +SELECT * FROM tde_db.t1 LIMIT 10; +c1 c2 +0 abc +1 xyz +2 NULL +3 NULL +4 NULL +DROP DATABASE tde_db; +SET GLOBAL innodb_file_per_table=1; diff --git a/plugin/keyring_vault/tests/mtr/table_encrypt_2_keyring.test b/plugin/keyring_vault/tests/mtr/table_encrypt_2_keyring.test new file mode 100644 index 000000000000..56ac9a450c4f --- /dev/null +++ b/plugin/keyring_vault/tests/mtr/table_encrypt_2_keyring.test @@ -0,0 +1,37 @@ +# InnoDB transparent tablespace data encryption +# This test case will test basic encryption support features. + +--source include/have_keyring_vault_plugin.inc +--source include/no_valgrind_without_big.inc +--source include/have_innodb.inc +--source include/not_embedded.inc + +--source generate_default_conf_files.inc +--source is_vault_server_up.inc + +# Create mount points +--let MOUNT_POINT_SERVICE_OP=CREATE +--let $KEYRING_CONF_FILE=$KEYRING_CONF_FILE_1 +--source mount_point_service.inc +--let $KEYRING_CONF_FILE=$KEYRING_CONF_FILE_2 +--source mount_point_service.inc + +--let $keyring1_restart_param=restart:--early-plugin-load="keyring_vault=$KEYRING_VAULT_PLUGIN" --loose-keyring_vault_config=$KEYRING_CONF_FILE_1 $KEYRING_VAULT_PLUGIN_OPT +--let $keyring2_restart_param=restart:--early-plugin-load="keyring_vault=$KEYRING_VAULT_PLUGIN" --loose-keyring_vault_config=$KEYRING_CONF_FILE_2 $KEYRING_VAULT_PLUGIN_OPT + +call mtr.add_suppression("\\[ERROR\\] Function 'keyring_vault' already exists"); +call mtr.add_suppression("\\[ERROR\\] Couldn't load plugin named 'keyring_vault' with soname 'keyring_vault.*'."); +call mtr.add_suppression("Plugin keyring_vault reported"); + +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +eval SET @@global.keyring_vault_config="$KEYRING_CONF_FILE_1"; + +--let $encryption_type=KEYRING +--source include/table_encrypt_2.inc + +# Delete mount points +--let MOUNT_POINT_SERVICE_OP=DELETE +--let $KEYRING_CONF_FILE=$KEYRING_CONF_FILE_1 +--source mount_point_service.inc +--let $KEYRING_CONF_FILE=$KEYRING_CONF_FILE_2 +--source mount_point_service.inc diff --git a/rapid/plugin/x/tests/mtr/r/performance_schema.result b/rapid/plugin/x/tests/mtr/r/performance_schema.result index 5354a9138d06..8e34e4e91584 100644 --- a/rapid/plugin/x/tests/mtr/r/performance_schema.result +++ b/rapid/plugin/x/tests/mtr/r/performance_schema.result @@ -301,8 +301,8 @@ command ok 1 0 rows affected SCHEMA_NAME DIGEST DIGEST_TEXT COUNT_STAR -null 24e5a8c19fe8009f403640dabf2a9e0f SELECT ? 1 -null d7489b635c366c316798af318e01ab74 TRUNCATE TABLE `performance_schema` . `events_statements_summary_by_digest` 1 +null 3e334f40198e0b2d2d3732777c7a44ad TRUNCATE TABLE `performance_schema` . `events_statements_summary_by_digest` 1 +null 3fff4c5a5ca5e1e484663cab257efd1e SELECT ? 1 0 rows affected Mysqlx.Ok { msg: "bye!" diff --git a/regex/CMakeLists.txt b/regex/CMakeLists.txt index b5ffabad135f..9885b41c1633 100644 --- a/regex/CMakeLists.txt +++ b/regex/CMakeLists.txt @@ -15,6 +15,8 @@ INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include) +INCLUDE(${MYSQL_CMAKE_SCRIPT_DIR}/compile_flags.cmake) + MY_CHECK_C_COMPILER_FLAG("-Wstringop-truncation" HAVE_STRINGOP_TRUNCATION) IF(HAVE_STRINGOP_TRUNCATION) ADD_COMPILE_FLAGS( diff --git a/sql/binlog.cc b/sql/binlog.cc index 3c41e7b19cd0..7522c5ed650f 100644 --- a/sql/binlog.cc +++ b/sql/binlog.cc @@ -5299,7 +5299,7 @@ bool MYSQL_BIN_LOG::open_binlog(const char *log_name, goto err; } DBUG_EXECUTE_IF("check_consecutive_binlog_key_versions", - { static uint next_key_version = 0; + { static uint next_key_version = 1; DBUG_ASSERT(crypto.get_key_version() == next_key_version++);}); uchar nonce[Binlog_crypt_data::BINLOG_NONCE_LENGTH]; diff --git a/sql/handler.h b/sql/handler.h index 1ce7f10a1ca9..7a654cdb3f99 100644 --- a/sql/handler.h +++ b/sql/handler.h @@ -545,6 +545,8 @@ namespace AQP { /** ENCRYPTION="Y" used during table create. */ #define HA_CREATE_USED_ENCRYPT (1L << 27) +#define HA_CREATE_USED_ENCRYPTION_KEY_ID (1L << 28) + /* These structures are used to pass information from a set of SQL commands on add/drop/change tablespace definitions to the proper hton. @@ -1235,6 +1237,8 @@ typedef struct st_ha_create_information and ignored by the Server layer. */ LEX_STRING encrypt_type; + uint32_t encryption_key_id; + bool was_encryption_key_id_set; const char *data_file_name, *index_file_name; const char *alias; diff --git a/sql/item_keyring_func.cc b/sql/item_keyring_func.cc index 0485f550a514..68b7944b0246 100644 --- a/sql/item_keyring_func.cc +++ b/sql/item_keyring_func.cc @@ -51,13 +51,9 @@ longlong Item_func_rotate_system_key::val_int() bool Item_func_rotate_system_key::calc_value(const String *arg) { - bool found= false; - for (uint i= 0; i < valid_percona_system_keys_size; ++i) - { - if (strcmp(valid_percona_system_keys[i], arg->ptr()) == 0) - found = true; - } - return found && !(my_key_generate(arg->ptr(), "AES", NULL, 16)); + size_t key_length = 0; + return is_valid_percona_system_key(arg->ptr(), &key_length) && + !(my_key_generate(arg->ptr(), "AES", NULL, key_length)); } bool Item_func_rotate_system_key::fix_fields(THD *thd, Item **ref) diff --git a/sql/lex.h b/sql/lex.h index c6f6abfc04ff..39ce743a2396 100644 --- a/sql/lex.h +++ b/sql/lex.h @@ -144,6 +144,7 @@ static const SYMBOL symbols[] = { { SYM("COMPRESSED", COMPRESSED_SYM)}, { SYM("COMPRESSION_DICTIONARY", COMPRESSION_DICTIONARY_SYM)}, { SYM("ENCRYPTION", ENCRYPTION_SYM)}, + { SYM("ENCRYPTION_KEY_ID", ENCRYPTION_KEY_ID_SYM)}, { SYM("CONCURRENT", CONCURRENT)}, { SYM("CONDITION", CONDITION_SYM)}, { SYM("CONNECTION", CONNECTION_SYM)}, diff --git a/sql/share/errmsg-utf8.txt b/sql/share/errmsg-utf8.txt index a8b2033286a1..b3b3fafe5ee0 100644 --- a/sql/share/errmsg-utf8.txt +++ b/sql/share/errmsg-utf8.txt @@ -5085,12 +5085,12 @@ ER_UNSUPPORTED_PS eng "This command is not supported in the prepared statement protocol yet" ger "Dieser Befehl wird im Protokoll für vorbereitete Anweisungen noch nicht unterstützt" ER_GET_ERRMSG - dan "Modtog fejl %d '%-.100s' fra %s" - eng "Got error %d '%-.100s' from %s" - ger "Fehler %d '%-.100s' von %s" - jpn "エラー %d '%-.100s' が %s から返されました。" - nor "Mottok feil %d '%-.100s' fa %s" - norwegian-ny "Mottok feil %d '%-.100s' fra %s" + dan "Modtog fejl %d '%-.200s' fra %s" + eng "Got error %d '%-.200s' from %s" + ger "Fehler %d '%-.200s' von %s" + jpn "エラー %d '%-.200s' が %s から返されました。" + nor "Mottok feil %d '%-.200s' fa %s" + norwegian-ny "Mottok feil %d '%-.200s' fra %s" ER_GET_TEMPORARY_ERRMSG dan "Modtog temporary fejl %d '%-.100s' fra %s" eng "Got temporary error %d '%-.100s' from %s" diff --git a/sql/sql_class.cc b/sql/sql_class.cc index 8018ae8f8db1..327fcde99027 100644 --- a/sql/sql_class.cc +++ b/sql/sql_class.cc @@ -5175,3 +5175,84 @@ bool THD::is_current_stmt_binlog_row_enabled_with_write_set_extraction() const is_current_stmt_binlog_format_row() && !is_current_stmt_binlog_disabled()); } + +static my_bool lock_keyring(THD *thd, plugin_ref plugin, void *arg); + +class KeyringsLocker +{ +public: + static KeyringsLocker &get_instance() + { + static KeyringsLocker instance; + return instance; + } + + ~KeyringsLocker() + { + mysql_mutex_destroy(&mutex); + } + + int lock_keyrings(THD *thd) + { + mysql_mutex_lock(&mutex); + + uint number_of_keyrings_locked= locked_keyring_plugins.size(); + if (number_of_keyrings_locked > 0) + { + mysql_mutex_unlock(&mutex); + return number_of_keyrings_locked; // keyrings were already locked + } + plugin_foreach(thd, lock_keyring, MYSQL_KEYRING_PLUGIN, this); + + number_of_keyrings_locked= locked_keyring_plugins.size(); + + mysql_mutex_unlock(&mutex); + return number_of_keyrings_locked; + } + + int unlock_keyrings(THD *thd) + { + mysql_mutex_lock(&mutex); + + for(LockedKeyringsPlugins::reverse_iterator riter = locked_keyring_plugins.rbegin(); + riter != locked_keyring_plugins.rend(); ++riter) + { + plugin_unlock(thd, *riter); + locked_keyring_plugins.pop_back(); + } + + mysql_mutex_unlock(&mutex); + return 0; + } + + // esentialy I am using this vector as a stack, but I did not want to import stack.h just for + // this usage + typedef std::vector LockedKeyringsPlugins; + LockedKeyringsPlugins locked_keyring_plugins; + +private: + KeyringsLocker() + { + mysql_mutex_init(0, &mutex, MY_MUTEX_INIT_FAST); + } + mysql_mutex_t mutex; +}; + +static my_bool lock_keyring(THD *thd, plugin_ref plugin, void *arg) +{ + KeyringsLocker *keyrings_locker= reinterpret_cast(arg); + plugin= plugin_lock(thd, &plugin); + if (plugin) + keyrings_locker->locked_keyring_plugins.push_back(plugin); + return FALSE; +} + +int lock_keyrings(THD *thd) +{ + return KeyringsLocker::get_instance().lock_keyrings(thd); +} + +int unlock_keyrings(THD *thd) +{ + return KeyringsLocker::get_instance().unlock_keyrings(thd); +} diff --git a/sql/sql_class.h b/sql/sql_class.h index 46ed6d0ae035..614e0b2d8e06 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -764,6 +764,8 @@ mysqld_collation_get_by_name(const char *name, return cs; } +int lock_keyrings(THD *thd); +int unlock_keyrings(THD *thd); #ifdef MYSQL_SERVER diff --git a/sql/sql_plugin.cc b/sql/sql_plugin.cc index 3181de7c6c57..9ce2296bce60 100644 --- a/sql/sql_plugin.cc +++ b/sql/sql_plugin.cc @@ -1991,6 +1991,7 @@ void plugin_shutdown(void) st_plugin_int **plugins, *plugin; st_plugin_dl **dl; bool skip_binlog = true; + std::list keyring_plugins; DBUG_ENTER("plugin_shutdown"); @@ -2015,16 +2016,19 @@ void plugin_shutdown(void) { plugin= plugin_array->at(i); - if (plugin->state == PLUGIN_IS_READY - && strcmp(plugin->name.str, "binlog") == 0 && skip_binlog) - { - skip_binlog = false; - - } else if (plugin->state == PLUGIN_IS_READY) + if (plugin->state == PLUGIN_IS_READY) { - plugin->state= PLUGIN_IS_DELETED; - reap_needed= true; - } + if(strcmp(plugin->name.str, "binlog") == 0 && skip_binlog) + { + skip_binlog = false; + } + else if (plugin->plugin->type != MYSQL_KEYRING_PLUGIN) + { + plugin->state= PLUGIN_IS_DELETED; + reap_needed= true; + } else if (plugin->plugin->type == MYSQL_KEYRING_PLUGIN) + keyring_plugins.push_back(plugin); + } } if (!reap_needed) { @@ -2050,6 +2054,13 @@ void plugin_shutdown(void) } mysql_mutex_unlock(&LOCK_plugin); + for(std::list::iterator keyring_iter = keyring_plugins.begin(); + keyring_iter != keyring_plugins.end(); ++keyring_iter) + { + if (!((*keyring_iter)->state & PLUGIN_IS_UNINITIALIZED)) + plugin_deinitialize(*keyring_iter, false); + } + /* We loop through all plugins and call deinit() if they have one. */ @@ -2444,6 +2455,15 @@ static bool mysql_uninstall_plugin(THD *thd, const LEX_STRING *name) " PLUGIN group_replication."); goto err; } + + if (plugin->ref_count && plugin->plugin->type == MYSQL_KEYRING_PLUGIN) + { + mysql_mutex_unlock(&LOCK_plugin); + + my_error(ER_PLUGIN_CANNOT_BE_UNINSTALLED, MYF(0), name->str, + "Plugin is busy, it cannot be uninstalled. "); + goto err; + } #endif plugin->state= PLUGIN_IS_DELETED; diff --git a/sql/sql_show.cc b/sql/sql_show.cc index f9399e658854..26207c8bfbbf 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -1943,6 +1943,18 @@ int store_create_info(THD *thd, TABLE_LIST *table_list, String *packet, packet->append(STRING_WITH_LEN(" ENCRYPTION=")); append_unescaped(packet, share->encrypt_type.str, share->encrypt_type.length); } + + if (share->was_encryption_key_id_set) + { + DBUG_ASSERT(share->encrypt_type.length == 0 || my_strcasecmp(system_charset_info, share->encrypt_type.str, "KEYRING") != 0 + || share->encrypt_type.length == strlen("KEYRING")); + + char *end; + packet->append(STRING_WITH_LEN(" ENCRYPTION_KEY_ID=")); + end= longlong10_to_str(table->s->encryption_key_id, buff, 10); + packet->append(buff, static_cast(end - buff)); + } + table->file->append_create_info(packet); if (share->comment.length) { @@ -5621,9 +5633,12 @@ static int get_schema_tables_record(THD *thd, TABLE_LIST *tables, { /* In the .frm file this option has a max length of 2K. Currently, InnoDB uses only the first 1 bytes and the only supported values - are (Y | N). */ + are (Y | N | KEYRING). */ ptr= my_stpcpy(ptr, " ENCRYPTION=\""); - ptr= strxnmov(ptr, 3, share->encrypt_type.str, NullS); + if (strncmp(share->encrypt_type.str, "KEYRING", strlen("KEYRING")) == 0) + ptr= strxnmov(ptr, 14, share->encrypt_type.str, NullS); + else + ptr= strxnmov(ptr, 3, share->encrypt_type.str, NullS); ptr= my_stpcpy(ptr, "\""); } diff --git a/sql/sql_table.cc b/sql/sql_table.cc index e3aaae2b6cdc..c1ebae0db852 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -8274,6 +8274,12 @@ mysql_prepare_alter_table(THD *thd, TABLE *table, if (!(used_fields & HA_CREATE_USED_CONNECTION)) create_info->connect_string= table->s->connect_string; + if (!(used_fields & HA_CREATE_USED_ENCRYPTION_KEY_ID)) + { + create_info->encryption_key_id= table->s->encryption_key_id; + create_info->was_encryption_key_id_set= table->s->was_encryption_key_id_set; + } + restore_record(table, s->default_values); // Empty record for DEFAULT Create_field *def; @@ -8818,6 +8824,16 @@ mysql_prepare_alter_table(THD *thd, TABLE *table, create_info->encrypt_type.length= table->s->encrypt_type.length; } + // Encryption was changed to not KEYRING and ALTER does not contain encryption_key_id + // mark encryption_key_id as not set then + if (used_fields & HA_CREATE_USED_ENCRYPT && + 0 != strncmp(create_info->encrypt_type.str, "KEYRING", create_info->encrypt_type.length) && + !(used_fields & HA_CREATE_USED_ENCRYPTION_KEY_ID)) + { + create_info->used_fields&= ~(HA_CREATE_USED_ENCRYPTION_KEY_ID); + create_info->was_encryption_key_id_set = false; + } + /* Do not pass the update_create_info through to each partition. */ if (table->file->ht->db_type == DB_TYPE_PARTITION_DB) create_info->data_file_name = (char*) -1; diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 139401f1a608..ae91fa52d464 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -563,6 +563,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, YYLTYPE **c, ulong *yystacksize); %token COMPRESSION_DICTIONARY_SYM %token COMPRESSION_SYM %token ENCRYPTION_SYM +%token ENCRYPTION_KEY_ID_SYM %token CONCURRENT %token CONDITION_SYM /* SQL-2003-R, SQL-2008-R */ %token CONNECTION_SYM @@ -6022,6 +6023,12 @@ create_table_option: Lex->create_info.used_fields|= HA_CREATE_USED_ENCRYPT; Lex->create_info.encrypt_type= $3; } + | ENCRYPTION_KEY_ID_SYM opt_equal real_ulong_num + { + Lex->create_info.used_fields|= HA_CREATE_USED_ENCRYPTION_KEY_ID; + Lex->create_info.was_encryption_key_id_set= true; + Lex->create_info.encryption_key_id= $3; + } | AUTO_INC opt_equal ulonglong_num { Lex->create_info.auto_increment_value=$3; @@ -13661,6 +13668,7 @@ keyword_sp: | COMPRESSION_DICTIONARY_SYM {} | COMPRESSION_SYM {} | ENCRYPTION_SYM {} + | ENCRYPTION_KEY_ID_SYM {} | CONCURRENT {} | CONNECTION_SYM {} | CONSISTENT_SYM {} diff --git a/sql/table.cc b/sql/table.cc index de91f4083d9f..78a088e57020 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -2203,6 +2203,16 @@ static int open_binary_frm(THD *thd, TABLE_SHARE *share, uchar *head, } next_chunk+= 2 + share->encrypt_type.length; } + + if (next_chunk + strlen("ENCRYPTION_KEY_ID") + 4 // + 4 for encryption_key_id value, ENCRYPTION_KEY_ID is used here as a marker + <= buff_end && + strncmp(reinterpret_cast(next_chunk), "ENCRYPTION_KEY_ID", + strlen("ENCRYPTION_KEY_ID")) == 0) + { + share->encryption_key_id= uint4korr(next_chunk + strlen("ENCRYPTION_KEY_ID")); + share->was_encryption_key_id_set= true; + next_chunk += 4 + strlen("ENCRYPTION_KEY_ID"); + } } share->key_block_size= uint2korr(head+62); diff --git a/sql/table.h b/sql/table.h index d57a2b9ae8b8..9d3f838aa423 100644 --- a/sql/table.h +++ b/sql/table.h @@ -594,6 +594,8 @@ struct TABLE_SHARE LEX_STRING comment; /* Comment about table */ LEX_STRING compress; /* Compression algorithm */ LEX_STRING encrypt_type; /* encryption algorithm */ + uint32_t encryption_key_id; + bool was_encryption_key_id_set; const CHARSET_INFO *table_charset; /* Default charset of string fields */ MY_BITMAP all_set; diff --git a/sql/unireg.cc b/sql/unireg.cc index 501a51040567..39ede5194821 100644 --- a/sql/unireg.cc +++ b/sql/unireg.cc @@ -272,6 +272,9 @@ bool mysql_create_frm(THD *thd, const char *file_name, create_info->extra_size+= 2 + create_info->encrypt_type.length; + if (create_info->was_encryption_key_id_set) + create_info->extra_size += strlen("ENCRYPTION_KEY_ID") + 4; + if ((file=create_frm(thd, file_name, db, table, reclength, fileinfo, create_info, keys, key_info)) < 0) { @@ -460,6 +463,17 @@ bool mysql_create_frm(THD *thd, const char *file_name, goto err; } + if (create_info->was_encryption_key_id_set) + { + uchar encryption_key_id_buff[4]; + int4store(encryption_key_id_buff, create_info->encryption_key_id); + + if (mysql_file_write(file, (uchar*) "ENCRYPTION_KEY_ID", + strlen("ENCRYPTION_KEY_ID"), MYF(MY_NABP)) || + mysql_file_write(file, encryption_key_id_buff, 4, MYF(MY_NABP))) + goto err; + } + mysql_file_seek(file, filepos, MY_SEEK_SET, MYF(0)); if (mysql_file_write(file, forminfo, 288, MYF_RW) || mysql_file_write(file, screen_buff, info_length, MYF_RW) || diff --git a/storage/innobase/CMakeLists.txt b/storage/innobase/CMakeLists.txt index 5140465c9d90..5e63561014f1 100644 --- a/storage/innobase/CMakeLists.txt +++ b/storage/innobase/CMakeLists.txt @@ -45,6 +45,7 @@ SET(INNOBASE_SOURCES eval/eval0eval.cc eval/eval0proc.cc fil/fil0fil.cc + fil/fil0crypt.cc fsp/fsp0fsp.cc fsp/fsp0file.cc fsp/fsp0space.cc diff --git a/storage/innobase/api/api0api.cc b/storage/innobase/api/api0api.cc index 5e08b32b4217..2db7ba4f7a8b 100644 --- a/storage/innobase/api/api0api.cc +++ b/storage/innobase/api/api0api.cc @@ -237,7 +237,7 @@ ib_open_table_by_id( table = dict_table_open_on_id(table_id, TRUE, DICT_TABLE_OP_NORMAL); - if (table != NULL && table->ibd_file_missing) { + if (table != NULL && table->file_unreadable) { table = NULL; } @@ -262,7 +262,7 @@ ib_open_table_by_name( table = dict_table_open_on_name(name, FALSE, FALSE, DICT_ERR_IGNORE_NONE); - if (table != NULL && table->ibd_file_missing) { + if (table != NULL && table->file_unreadable) { table = NULL; } @@ -282,7 +282,7 @@ ib_lookup_table_by_name( table = dict_table_get_low(name); - if (table != NULL && table->ibd_file_missing) { + if (table != NULL && table->file_unreadable) { table = NULL; } diff --git a/storage/innobase/btr/btr0btr.cc b/storage/innobase/btr/btr0btr.cc index d3db2fd2f72d..e41f59dd7583 100644 --- a/storage/innobase/btr/btr0btr.cc +++ b/storage/innobase/btr/btr0btr.cc @@ -176,6 +176,14 @@ btr_root_block_get( buf_block_t* block = btr_block_get(page_id, page_size, mode, index, mtr); + if (!block && index && index->table && !index->table->is_readable()) { + + ib::warn() << "Table in tablespace is encrypted but encryption service or" + " used key_id is not available. " + " Can't continue reading table."; + return NULL; + } + SRV_CORRUPT_TABLE_CHECK(block, return(0);); btr_assert_not_corrupted(block, index); @@ -216,8 +224,15 @@ btr_root_get( /* Intended to be used for segment list access. SX lock doesn't block reading user data by other threads. And block the segment list access by others.*/ - return(buf_block_get_frame(btr_root_block_get(index, RW_SX_LATCH, - mtr))); + + buf_block_t* root = btr_root_block_get(index, RW_SX_LATCH, + mtr); + + if (root && root->page.encrypted == true) { + root = NULL; + } + + return(root ? buf_block_get_frame(root) : NULL); } /**************************************************************//** @@ -231,7 +246,7 @@ btr_height_get( dict_index_t* index, /*!< in: index tree */ mtr_t* mtr) /*!< in/out: mini-transaction */ { - ulint height; + ulint height=0; buf_block_t* root_block; ut_ad(srv_read_only_mode @@ -244,12 +259,14 @@ btr_height_get( /* S latches the page */ root_block = btr_root_block_get(index, RW_S_LATCH, mtr); - height = btr_page_get_level(buf_block_get_frame(root_block), mtr); + if (root_block) { + height = btr_page_get_level(buf_block_get_frame(root_block), mtr); - /* Release the S latch on the root page. */ - mtr->memo_release(root_block, MTR_MEMO_PAGE_S_FIX); + /* Release the S latch on the root page. */ + mtr->memo_release(root_block, MTR_MEMO_PAGE_S_FIX); - ut_d(sync_check_unlock(&root_block->lock)); + ut_d(sync_check_unlock(&root_block->lock)); + } return(height); } @@ -548,6 +565,9 @@ btr_get_size( root = btr_root_get(index, mtr); + if (!root && index->table->is_readable() == false) + return ULINT_UNDEFINED; + SRV_CORRUPT_TABLE_CHECK(root, { mtr_commit(mtr); @@ -951,17 +971,20 @@ btr_free_root_check( buf_block_t* block = buf_page_get( page_id, page_size, RW_X_LATCH, mtr); - buf_block_dbg_add_level(block, SYNC_TREE_NODE); - - if (fil_page_index_page_check(block->frame) - && index_id == btr_page_get_index_id(block->frame)) { - /* This should be a root page. - It should not be possible to reassign the same - index_id for some other index in the tablespace. */ - ut_ad(page_is_root(block->frame)); - } else { - block = NULL; - } + + if (block) { + buf_block_dbg_add_level(block, SYNC_TREE_NODE); + + if (fil_page_index_page_check(block->frame) + && index_id == btr_page_get_index_id(block->frame)) { + /* This should be a root page. + It should not be possible to reassign the same + index_id for some other index in the tablespace. */ + ut_ad(page_is_root(block->frame)); + } else { + block = NULL; + } + } return(block); } @@ -5075,22 +5098,26 @@ btr_validate_spatial_index( /**************************************************************//** Checks the consistency of an index tree. -@return true if ok */ -bool +@return DB_SUCCESS if ok, error code if not */ +dberr_t btr_validate_index( /*===============*/ dict_index_t* index, /*!< in: index */ const trx_t* trx, /*!< in: transaction or NULL */ bool lockout)/*!< in: true if X-latch index is intended */ { + dberr_t err = DB_SUCCESS; + /* Full Text index are implemented by auxiliary tables, not the B-tree */ if (dict_index_is_online_ddl(index) || (index->type & DICT_FTS)) { - return(true); + return(err); } if (dict_index_is_spatial(index)) { - return(btr_validate_spatial_index(index, trx)); + if (!btr_validate_spatial_index(index, trx)) { + err = DB_ERROR; + } } mtr_t mtr; @@ -5105,13 +5132,18 @@ btr_validate_index( } } - bool ok = true; page_t* root = btr_root_get(index, &mtr); + if (root == NULL && !index->is_readable()) { + err = DB_DECRYPTION_FAILED; + mtr_commit(&mtr); + return err; + } + SRV_CORRUPT_TABLE_CHECK(root, { mtr_commit(&mtr); - return(false); + return DB_CORRUPTION; }); ulint n = btr_page_get_level(root, &mtr); @@ -5119,14 +5151,14 @@ btr_validate_index( for (ulint i = 0; i <= n; ++i) { if (!btr_validate_level(index, trx, n - i, lockout)) { - ok = false; + err = DB_CORRUPTION; break; } } mtr_commit(&mtr); - return(ok); + return(err); } /**************************************************************//** diff --git a/storage/innobase/btr/btr0bulk.cc b/storage/innobase/btr/btr0bulk.cc index b813a8ec3fca..5b89b558c044 100644 --- a/storage/innobase/btr/btr0bulk.cc +++ b/storage/innobase/btr/btr0bulk.cc @@ -598,7 +598,7 @@ PageBulk::release() } /** Start mtr and latch the block */ -void +dberr_t PageBulk::latch() { ibool ret; @@ -618,13 +618,20 @@ PageBulk::latch() m_block = buf_page_get_gen(page_id, page_size, RW_X_LATCH, m_block, BUF_GET_IF_IN_POOL, - __FILE__, __LINE__, m_mtr); + __FILE__, __LINE__, m_mtr, false, &m_err); + + if (m_err != DB_SUCCESS) { + return (m_err); + } + ut_ad(m_block != NULL); } buf_block_buf_fix_dec(m_block); ut_ad(m_cur_rec > m_page && m_cur_rec < m_heap_top); + + return (m_err); } /** Split a page diff --git a/storage/innobase/btr/btr0cur.cc b/storage/innobase/btr/btr0cur.cc index 0da06a4a34f7..92f4c41803d7 100644 --- a/storage/innobase/btr/btr0cur.cc +++ b/storage/innobase/btr/btr0cur.cc @@ -735,7 +735,7 @@ If mode is PAGE_CUR_LE , cursor is left at the place where an insert of the search tuple should be performed in the B-tree. InnoDB does an insert immediately after the cursor. Thus, the cursor may end up on a user record, or on a page infimum record. */ -void +dberr_t btr_cur_search_to_nth_level( /*========================*/ dict_index_t* index, /*!< in: index */ @@ -785,6 +785,7 @@ btr_cur_search_to_nth_level( page_cur_t* page_cursor; btr_op_t btr_op; ulint root_height = 0; /* remove warning */ + dberr_t err = DB_SUCCESS; ulint upper_rw_latch, root_leaf_rw_latch; btr_intention_t lock_intention; @@ -951,7 +952,7 @@ btr_cur_search_to_nth_level( || mode != PAGE_CUR_LE); btr_cur_n_sea++; - DBUG_VOID_RETURN; + DBUG_RETURN(err); } # endif /* BTR_CUR_HASH_ADAPT */ #endif /* BTR_CUR_ADAPT */ @@ -1118,9 +1119,29 @@ btr_cur_search_to_nth_level( ut_ad(n_blocks < BTR_MAX_LEVELS); tree_savepoints[n_blocks] = mtr_set_savepoint(mtr); block = buf_page_get_gen(page_id, page_size, rw_latch, guess, - buf_mode, file, line, mtr); + buf_mode, file, line, mtr, false, &err); tree_blocks[n_blocks] = block; + if (err != DB_SUCCESS) { + ut_ad(block == NULL); + if (err == DB_DECRYPTION_FAILED) { + ib::warn() << "Table is encrypted but encryption service or" + " used key_id is not available. " + " Can't continue reading table."; + + page_cursor->block = 0; + page_cursor->rec = 0; + index->table->set_file_unreadable(); + if (estimate) { + + cursor->path_arr->nth_rec = + ULINT_UNDEFINED; + } + } + + goto func_exit; + } + if (block == NULL) { SRV_CORRUPT_TABLE_CHECK(buf_mode == BUF_GET_IF_IN_POOL || buf_mode == BUF_GET_IF_IN_POOL_OR_WATCH, @@ -1230,10 +1251,28 @@ btr_cur_search_to_nth_level( get_block = buf_page_get_gen( page_id_t(page_id.space(), left_page_no), page_size, rw_latch, NULL, buf_mode, - file, line, mtr); + file, line, mtr, false, &err); prev_tree_blocks[prev_n_blocks] = get_block; prev_n_blocks++; + if (err != DB_SUCCESS) { + if (err == DB_DECRYPTION_FAILED) { + ib::warn() << "Table is encrypted but encryption service or" + " used key_id is not available. " + " Can't continue reading table."; + if (estimate) { + + page_cursor->block = 0; + page_cursor->rec = 0; + cursor->path_arr->nth_rec = + ULINT_UNDEFINED; + } + index->table->set_file_unreadable(); + } + goto func_exit; + } + + /* BTR_MODIFY_TREE doesn't update prev/next_page_no, without their parent page's lock. So, not needed to retry here, because we have the parent page's lock. */ @@ -1246,8 +1285,26 @@ btr_cur_search_to_nth_level( tree_savepoints[n_blocks] = mtr_set_savepoint(mtr); block = buf_page_get_gen(page_id, page_size, rw_latch, NULL, - buf_mode, file, line, mtr); + buf_mode, file, line, mtr, false, &err); tree_blocks[n_blocks] = block; + + if (err != DB_SUCCESS) { + if (err == DB_DECRYPTION_FAILED) { + ib::warn() << "Table is encrypted but encryption service or" + " used key_id is not available. " + " Can't continue reading table."; + if (estimate) { + page_cursor->block = 0; + page_cursor->rec = 0; + + cursor->path_arr->nth_rec = + ULINT_UNDEFINED; + } + index->table->set_file_unreadable(); + } + + goto func_exit; + } } page = buf_block_get_frame(block); @@ -2002,7 +2059,7 @@ btr_cur_search_to_nth_level( cursor->rtr_info->mbr_adj = true; } - DBUG_VOID_RETURN; + DBUG_RETURN(err); } /** Searches an index tree and positions a tree cursor on a given level. @@ -2166,7 +2223,7 @@ btr_cur_search_to_nth_level_with_no_latch( /*****************************************************************//** Opens a cursor at either end of an index. */ -void +dberr_t btr_cur_open_at_index_side_func( /*============================*/ bool from_left, /*!< in: true if open to the low end, @@ -2196,6 +2253,7 @@ btr_cur_open_at_index_side_func( mem_heap_t* heap = NULL; ulint offsets_[REC_OFFS_NORMAL_SIZE]; ulint* offsets = offsets_; + dberr_t err = DB_SUCCESS; rec_offs_init(offsets_); estimate = latch_mode & BTR_ESTIMATE; @@ -2293,9 +2351,26 @@ btr_cur_open_at_index_side_func( tree_savepoints[n_blocks] = mtr_set_savepoint(mtr); block = buf_page_get_gen(page_id, page_size, rw_latch, NULL, - BUF_GET, file, line, mtr); + BUF_GET, file, line, mtr, false, &err); tree_blocks[n_blocks] = block; + if (err != DB_SUCCESS) { + if (err == DB_DECRYPTION_FAILED) { + ib::warn() << "Table is encrypted but encryption service or" + " used key_id is not available. " + " Can't continue reading table."; + page_cursor->block = 0; + page_cursor->rec = 0; + if (estimate) { + + cursor->path_arr->nth_rec = ULINT_UNDEFINED; + } + + index->table->set_file_unreadable(); + } + goto exit_loop; + } + page = buf_block_get_frame(block); SRV_CORRUPT_TABLE_CHECK(page, @@ -2531,6 +2606,8 @@ btr_cur_open_at_index_side_func( if (heap) { mem_heap_free(heap); } + + return err; } /** Opens a cursor at either end of an index. @@ -2726,6 +2803,7 @@ btr_cur_open_at_rnd_pos_func( page_id_t page_id(dict_index_get_space(index), dict_index_get_page(index)); const page_size_t& page_size = dict_table_page_size(index->table); + dberr_t err = DB_SUCCESS; if (root_leaf_rw_latch == RW_X_LATCH) { node_ptr_max_size = dict_index_node_ptr_max_size(index); @@ -2749,9 +2827,25 @@ btr_cur_open_at_rnd_pos_func( tree_savepoints[n_blocks] = mtr_set_savepoint(mtr); block = buf_page_get_gen(page_id, page_size, rw_latch, NULL, - BUF_GET, file, line, mtr); + BUF_GET, file, line, mtr, false, &err); tree_blocks[n_blocks] = block; + ut_ad((block != NULL) == (err == DB_SUCCESS)); + + if (err != DB_SUCCESS) { + if (err == DB_DECRYPTION_FAILED) { + ib::warn() << "Table %s is encrypted but encryption service or" + " used key_id is not available. " + " Can't continue reading table."; + page_cursor->block = 0; + page_cursor->rec = 0; + index->table->set_file_unreadable(); + } + + goto exit_loop; + } + + page = buf_block_get_frame(block); SRV_CORRUPT_TABLE_CHECK(page, @@ -5615,6 +5709,7 @@ btr_estimate_n_rows_in_range_on_level( mtr_t mtr; page_t* page; buf_block_t* block; + dberr_t err = DB_SUCCESS; mtr_start(&mtr); @@ -5627,6 +5722,21 @@ btr_estimate_n_rows_in_range_on_level( NULL, BUF_GET_POSSIBLY_FREED, __FILE__, __LINE__, &mtr); + ut_ad((block != NULL) == (err == DB_SUCCESS)); + + if (err != DB_SUCCESS) { + if (err == DB_DECRYPTION_FAILED) { + ib::warn() << "Table is encrypted but encryption service or" + " used key_id is not available. " + " Can't continue reading table."; + + index->table->set_file_unreadable(); + } + + mtr_commit(&mtr); + goto inexact; + } + page = buf_block_get_frame(block); /* It is possible that the tree has been reorganized in the @@ -5761,7 +5871,7 @@ btr_estimate_n_rows_in_range_low( cursor.path_arr = path1; - bool should_count_the_left_border; + bool should_count_the_left_border = false; if (dtuple_get_n_fields(tuple1) > 0) { @@ -5770,32 +5880,50 @@ btr_estimate_n_rows_in_range_low( &cursor, 0, __FILE__, __LINE__, &mtr); - ut_ad(!page_rec_is_infimum(btr_cur_get_rec(&cursor))); + if (index->is_readable()) + { + ut_ad(!page_rec_is_infimum(btr_cur_get_rec(&cursor))); - /* We should count the border if there are any records to - match the criteria, i.e. if the maximum record on the tree is - 5 and x > 3 is specified then the cursor will be positioned at - 5 and we should count the border, but if x > 7 is specified, - then the cursor will be positioned at 'sup' on the rightmost - leaf page in the tree and we should not count the border. */ - should_count_the_left_border - = !page_rec_is_supremum(btr_cur_get_rec(&cursor)); + /* We should count the border if there are any records to + match the criteria, i.e. if the maximum record on the tree is + 5 and x > 3 is specified then the cursor will be positioned at + 5 and we should count the border, but if x > 7 is specified, + then the cursor will be positioned at 'sup' on the rightmost + leaf page in the tree and we should not count the border. */ + should_count_the_left_border + = !page_rec_is_supremum(btr_cur_get_rec(&cursor)); + } } else { - btr_cur_open_at_index_side(true, index, + dberr_t err = btr_cur_open_at_index_side(true, index, BTR_SEARCH_LEAF | BTR_ESTIMATE, &cursor, 0, &mtr); - ut_ad(page_rec_is_infimum(btr_cur_get_rec(&cursor))); + if (err != DB_SUCCESS) { + ib::warn() << " Error code: " << err + << " btr_estimate_n_rows_in_range_low " + << " called from file: " + << __FILE__ << " line: " << __LINE__ + << " table: " << index->table->name + << " index: " << index->name; + } - /* The range specified is wihout a left border, just - 'x < 123' or 'x <= 123' and btr_cur_open_at_index_side() - positioned the cursor on the infimum record on the leftmost - page, which must not be counted. */ - should_count_the_left_border = false; + if (index->is_readable()) { + ut_ad(page_rec_is_infimum(btr_cur_get_rec(&cursor))); + + /* The range specified is wihout a left border, just + 'x < 123' or 'x <= 123' and btr_cur_open_at_index_side() + positioned the cursor on the infimum record on the leftmost + page, which must not be counted. */ + should_count_the_left_border = false; + } } mtr_commit(&mtr); + if (!index->is_readable()) { + return 0; + } + #ifdef UNIV_DEBUG if (!strcmp(index->name, "iC")) { DEBUG_SYNC_C("btr_estimate_n_rows_in_range_between_dives"); @@ -5842,10 +5970,19 @@ btr_estimate_n_rows_in_range_low( the requested one (can also be positioned on the 'sup') and we should not count the right border. */ } else { - btr_cur_open_at_index_side(false, index, + dberr_t err = btr_cur_open_at_index_side(false, index, BTR_SEARCH_LEAF | BTR_ESTIMATE, &cursor, 0, &mtr); + if (err != DB_SUCCESS) { + ib::warn() << " Error code: " << err + << " btr_estimate_n_rows_in_range_low " + << " called from file: " + << __FILE__ << " line: " << __LINE__ + << " table: " << index->table->name + << " index: " << index->name; + } + ut_ad(page_rec_is_supremum(btr_cur_get_rec(&cursor))); /* The range specified is wihout a right border, just diff --git a/storage/innobase/btr/btr0pcur.cc b/storage/innobase/btr/btr0pcur.cc index d530754b980c..49bf4bab97a0 100644 --- a/storage/innobase/btr/btr0pcur.cc +++ b/storage/innobase/btr/btr0pcur.cc @@ -486,6 +486,9 @@ btr_pcur_move_to_next_page( block->page.size, mode, btr_pcur_get_btr_cur(cursor)->index, mtr); + if (!next_block && !btr_pcur_get_btr_cur(cursor)->index->table->is_readable()) + return; /* decryption failure */ + next_page = buf_block_get_frame(next_block); SRV_CORRUPT_TABLE_CHECK(next_page, diff --git a/storage/innobase/buf/buf0buf.cc b/storage/innobase/buf/buf0buf.cc index 820a6679b85c..e8bdfcff2bac 100644 --- a/storage/innobase/buf/buf0buf.cc +++ b/storage/innobase/buf/buf0buf.cc @@ -71,6 +71,7 @@ Created 11/5/1995 Heikki Tuuri #include "ut0new.h" #include "trx0trx.h" #include "srv0start.h" +#include "fil0crypt.h" #include #include @@ -545,7 +546,6 @@ buf_page_is_zeroes( @param[in] curr_algo current checksum algorithm @param[in] use_legacy_big_endian use legacy big endian algorithm @return true if the page is in crc32 checksum format. */ -UNIV_INLINE bool buf_page_is_checksum_valid_crc32( const byte* read_buf, @@ -594,7 +594,6 @@ buf_page_is_checksum_valid_crc32( @param[in] log_file file pointer to log_file @param[in] curr_algo current checksum algorithm @return true if the page is in innodb checksum format. */ -UNIV_INLINE bool buf_page_is_checksum_valid_innodb( const byte* read_buf, @@ -828,7 +827,9 @@ buf_page_is_corrupted( if ((i < FIL_PAGE_FILE_FLUSH_LSN || i >= FIL_PAGE_ARCH_LOG_NO_OR_SPACE_ID) && read_buf[i] != 0) { - + if (i >= FIL_PAGE_ENCRYPTION_KEY_VERSION && + i <= FIL_PAGE_ENCRYPTION_KEY_VERSION + 3) //those four bytes might not be 0 for keyring encryption + continue; break; } } @@ -4105,7 +4106,9 @@ buf_page_get_gen( const char* file, ulint line, mtr_t* mtr, - bool dirty_with_no_latch) + bool dirty_with_no_latch, + dberr_t* err) + { buf_block_t* block; unsigned access_time; @@ -4120,6 +4123,11 @@ buf_page_get_gen( || (rw_latch == RW_X_LATCH) || (rw_latch == RW_SX_LATCH) || (rw_latch == RW_NO_LATCH)); + + if (err) { + *err = DB_SUCCESS; + } + #ifdef UNIV_DEBUG switch (mode) { case BUF_GET_NO_LATCH: @@ -4241,7 +4249,15 @@ buf_page_get_gen( return(NULL); } - if (buf_read_page(page_id, page_size, trx)) { + /* Decryption, decompression as + well as error handling takes place at a lower level. + Here we only need to know whether the page really is + corrupted, or if an encrypted page with a valid + checksum cannot be decypted. */ + + dberr_t local_err = buf_read_page(page_id, page_size, trx); + + if (local_err == DB_SUCCESS) { buf_read_ahead_random(page_id, page_size, ibuf_inside(mtr), trx); @@ -4253,6 +4269,36 @@ buf_page_get_gen( retries = BUF_PAGE_READ_MAX_RETRIES; ); } else { + + if (err) { + *err = local_err; + } + + /* Pages whose encryption key is unavailable or used + key, encryption algorithm or encryption method is + incorrect are marked as encrypted in + buf_page_check_corrupt(). Unencrypted page could be + corrupted in a way where the key_id field is + nonzero. There is no checksum on field + FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION. */ + if (local_err == DB_DECRYPTION_FAILED) { + return (NULL); + } + + /* Try to set table as corrupted instead of + asserting. */ + if (page_id.space() != TRX_SYS_SPACE) { + if (fil_space_t* space + = fil_space_acquire_for_io ( + page_id.space())) { + bool set = dict_set_corrupted_by_space(space->id); + fil_space_release_for_io(space); + if (set) { + return NULL; + } + } + } + ib::fatal() << "Unable to read page " << page_id << " into the buffer pool after " << BUF_PAGE_READ_MAX_RETRIES << " attempts." @@ -5056,6 +5102,7 @@ buf_page_init_low( bpage->oldest_modification = 0; HASH_INVALIDATE(bpage, hash); bpage->is_corrupt = false; + bpage->encrypted = false; ut_d(bpage->file_page_was_freed = FALSE); } @@ -5638,14 +5685,22 @@ buf_mark_space_corrupt( BUF_IO_READ); } - /* Find the table with specified space id, and mark it corrupted */ - if (dict_set_corrupted_by_space(space)) { - buf_LRU_free_one_page(bpage); + /* If block is not encrypted find the table with specified + space id, and mark it corrupted. Encrypted tables + are marked unusable later e.g. in ::open(). */ + if (!bpage->encrypted) { + if (dict_set_corrupted_by_space(space)) { + buf_LRU_free_one_page(bpage); + } else { + rw_lock_x_unlock(hash_lock); + mutex_exit(buf_page_get_mutex(bpage)); + ret = FALSE; + } } else { - rw_lock_x_unlock(hash_lock); - mutex_exit(buf_page_get_mutex(bpage)); - ret = FALSE; - } + dict_set_encrypted_by_space(space); + /* After this point bpage can't be referenced. */ + buf_LRU_free_one_page(bpage); + } mutex_exit(&buf_pool->LRU_list_mutex); ut_ad(buf_pool->n_pend_reads > 0); @@ -5654,11 +5709,83 @@ buf_mark_space_corrupt( return(ret); } +static +dberr_t +buf_page_check_corrupt(buf_page_t* bpage, fil_space_t* space) +{ + ut_ad(space->n_pending_ios > 0); + byte* dst_frame = (bpage->zip.data) ? bpage->zip.data : + ((buf_block_t*) bpage)->frame; +#ifdef UNIV_INNOCHECKSUM + return buf_page_is_corrupted(true, dst_frame, bpage->size, fsp_is_checksum_disabled(bpage->id.space())); +#else + + dberr_t err = DB_SUCCESS; + fil_space_crypt_t* crypt_data = space->crypt_data; + ulint page_type = mach_read_from_2(dst_frame + FIL_PAGE_TYPE); + ulint original_page_type = mach_read_from_2(dst_frame + FIL_PAGE_ORIGINAL_TYPE_V1); + bool was_page_read_encrypted = original_page_type == FIL_PAGE_ENCRYPTED; + bpage->encrypted = bpage->encrypted || was_page_read_encrypted || page_type == FIL_PAGE_ENCRYPTED || page_type == FIL_PAGE_ENCRYPTED_RTREE || + page_type == FIL_PAGE_COMPRESSED_AND_ENCRYPTED; + + ut_ad(bpage->id.page_no() != 0 || + (original_page_type != FIL_PAGE_ENCRYPTED && page_type != FIL_PAGE_ENCRYPTED)); + + bool corrupted = bpage->is_corrupt || buf_page_is_corrupted( + true, dst_frame, bpage->size, fsp_is_checksum_disabled(bpage->id.space())); + + if (!corrupted) { + bpage->encrypted = false; + } else { + err = DB_PAGE_CORRUPTED; + } + + if (corrupted && !bpage->encrypted) { + /* An error will be reported by + buf_page_io_complete(). */ + } else if (bpage->encrypted && corrupted) { + bpage->encrypted = true; + err = DB_DECRYPTION_FAILED; + ib::error() + << "The page " << bpage->id << " in file '" + << space->chain.start->name + << "' cannot be decrypted."; + + if (crypt_data) { + ib::info() + << "However key management plugin or used key_version " + << mach_read_from_4(dst_frame + + FIL_PAGE_FILE_FLUSH_LSN) + << " is not found or" + " used encryption algorithm or method does not match."; + } + + if (bpage->id.space() != TRX_SYS_SPACE) { + ib::info() + << "Marking tablespace as missing." + " You may drop this table or" + " install correct key management plugin" + " and key file."; + } + } + return err; + +#endif // UNIV_INNOCHECKSUM +} + + /********************************************************************//** Completes an asynchronous read or write request of a file page to or from the buffer pool. -@return true if successful */ -bool +@return whether the operation succeeded +@retval DB_SUCCESS always when writing, or if a read page was OK +@retval DB_TABLESPACE_DELETED if the tablespace does not exist +@retval DB_PAGE_CORRUPTED if the checksum fails on a page read +@retval DB_DECRYPTION_FAILED if page post encryption checksum matches but + after decryption normal page checksum does + not match */ + +dberr_t buf_page_io_complete( /*=================*/ buf_page_t* bpage, /*!< in: pointer to the block in question */ @@ -5686,9 +5813,18 @@ buf_page_io_complete( if (io_type == BUF_IO_READ) { ulint read_page_no; ulint read_space_id; + uint key_version = 0; byte* frame; bool compressed_page; + fil_space_t* space = fil_space_acquire_for_io( + bpage->id.space()); + if (!space) { + return DB_TABLESPACE_DELETED; + } + + dberr_t err = DB_SUCCESS; + if (bpage->size.is_compressed()) { frame = bpage->zip.data; os_atomic_increment_ulint(&buf_pool->n_pend_unzip, 1); @@ -5700,6 +5836,7 @@ buf_page_io_complete( os_atomic_decrement_ulint( &buf_pool->n_pend_unzip, 1); compressed_page = false; + err = DB_PAGE_CORRUPTED; goto corrupt; } os_atomic_decrement_ulint(&buf_pool->n_pend_unzip, 1); @@ -5714,6 +5851,9 @@ buf_page_io_complete( read_page_no = mach_read_from_4(frame + FIL_PAGE_OFFSET); read_space_id = mach_read_from_4( frame + FIL_PAGE_ARCH_LOG_NO_OR_SPACE_ID); + key_version = mach_read_from_4( + frame + FIL_PAGE_ENCRYPTION_KEY_VERSION); + if (bpage->id.space() == TRX_SYS_SPACE && buf_dblwr_page_inside(bpage->id.page_no())) { @@ -5761,9 +5901,15 @@ buf_page_io_complete( /* From version 3.23.38 up we store the page checksum to the 4 first bytes of the page end lsn field */ if (compressed_page - || buf_page_is_corrupted( - true, frame, bpage->size, - fsp_is_checksum_disabled(bpage->id.space()))) { + || (err = buf_page_check_corrupt(bpage, space)) != DB_SUCCESS) { + + // Here bpage should not be encrypted. If it is still encrypted it means + // that decryption failed and whole space is not readable + if (bpage->encrypted) { + ib::error() << "Page is still encrypted - which means decryption failed. " + "Marking whole space as encrypted"; + fil_space_set_encrypted(bpage->id.space()); + } /* Not a real corruption if it was triggered by error injection */ @@ -5775,19 +5921,21 @@ buf_page_io_complete( && buf_mark_space_corrupt(bpage)) { ib::info() << "Simulated IMPORT " "corruption"; - return(true); + fil_space_release_for_io(space); + return(err); } + err = DB_SUCCESS; goto page_not_corrupt; ;); corrupt: /* Compressed pages are basically gibberish avoid printing the contents. */ - if (!compressed_page) { + if (!compressed_page && err == DB_PAGE_CORRUPTED) { ib::error() << "Database page corruption on disk" - " or a failed file read of page " - << bpage->id + " or a failed file read of tablespace " + << space->name << " page " << bpage->id << ". You may have to recover from " << "a backup."; @@ -5835,8 +5983,8 @@ buf_page_io_complete( if (bpage->id.space() > TRX_SYS_SPACE && buf_mark_space_corrupt(bpage)) { - - return(false); + fil_space_release_for_io(space); + return(err); } else { ib::fatal() << "Aborting because of a" @@ -5846,6 +5994,7 @@ buf_page_io_complete( " tagging the tablespace " " as corrupt."; } + fil_space_release_for_io(space); } } } /**/ @@ -5864,31 +6013,51 @@ buf_page_io_complete( if (uncompressed && !Compression::is_compressed_page(frame) && !recv_no_ibuf_operations - && !Tablespace::is_undo_tablespace(bpage->id.space()) + && !Tablespace::is_undo_tablespace(bpage->id.space()) && bpage->id.space() != srv_tmp_space.space_id() && !srv_is_tablespace_truncated(bpage->id.space()) && fil_page_get_type(frame) == FIL_PAGE_INDEX && page_is_leaf(frame)) { - buf_block_t* block; - ibool update_ibuf_bitmap; + if (bpage->encrypted) { + ib::warn() + << "Table in tablespace " + << bpage->id.space() + << " encrypted. However key " + "management plugin or used " + << "key_version " << key_version + << "is not found or" + " used encryption algorithm or method does not match." + " Can't continue opening the table."; + + buf_block_t* block = (buf_block_t *) bpage; + + ibuf_merge_or_delete_for_page( + block, bpage->id, + &bpage->size, TRUE); + } else { + buf_block_t* block; + ibool update_ibuf_bitmap; - if (UNIV_UNLIKELY(bpage->is_corrupt && - srv_pass_corrupt_table)) { + if (UNIV_UNLIKELY(bpage->is_corrupt && + srv_pass_corrupt_table)) { - block = NULL; + block = NULL; update_ibuf_bitmap = FALSE; - } else { + } else { - block = (buf_block_t *) bpage; - update_ibuf_bitmap = TRUE; - } + block = (buf_block_t *) bpage; + update_ibuf_bitmap = TRUE; + } - ibuf_merge_or_delete_for_page( - block, bpage->id, + ibuf_merge_or_delete_for_page( + block, bpage->id, &bpage->size, update_ibuf_bitmap); + } } + + fil_space_release_for_io(space); } if (io_type == BUF_IO_WRITE @@ -6007,7 +6176,7 @@ buf_page_io_complete( io_type == BUF_IO_READ ? "read" : "wrote", bpage->id.space(), bpage->id.page_no())); - return(true); + return DB_SUCCESS; } /*********************************************************************//** diff --git a/storage/innobase/buf/buf0checksum.cc b/storage/innobase/buf/buf0checksum.cc index a88497a76ebb..177844da0058 100644 --- a/storage/innobase/buf/buf0checksum.cc +++ b/storage/innobase/buf/buf0checksum.cc @@ -79,6 +79,28 @@ buf_calc_page_crc32( return(c1 ^ c2); } +uint32_t +buf_calc_page_crc32_encrypted_with_keyring( + const byte* page, + uint page_size, + bool use_legacy_big_endian /* = false */) +{ + ut_crc32_func_t crc32_func = use_legacy_big_endian + ? ut_crc32_legacy_big_endian + : ut_crc32; + + const uint32_t c1 = crc32_func( + page + FIL_PAGE_OFFSET, + FIL_PAGE_FILE_FLUSH_LSN - FIL_PAGE_OFFSET); + + const uint32_t c2 = crc32_func( + page + FIL_PAGE_DATA, + page_size - FIL_PAGE_DATA - FIL_PAGE_END_LSN_OLD_CHKSUM); + + return(c1 ^ c2); + +} + /********************************************************************//** Calculates a page checksum which is stored to the page when it is written to a file. Note that we must be careful to calculate the same value on diff --git a/storage/innobase/buf/buf0dblwr.cc b/storage/innobase/buf/buf0dblwr.cc index d053814ae490..2e3c143390e0 100644 --- a/storage/innobase/buf/buf0dblwr.cc +++ b/storage/innobase/buf/buf0dblwr.cc @@ -853,7 +853,10 @@ buf_dblwr_process(void) << ". Trying to recover it from the" << " doublewrite buffer."; - dberr_t err = os_dblwr_decrypt_page( + dberr_t err = DB_SUCCESS; + + if (space->crypt_data == NULL) // if it was crypt_data encrypted it was already decrypted + err = os_dblwr_decrypt_page( space, page); if (err != DB_SUCCESS || buf_page_is_corrupted( @@ -1124,8 +1127,8 @@ buf_dblwr_check_block( /* TODO: validate also non-index pages */ return; case FIL_PAGE_TYPE_ALLOCATED: - /* empty pages should never be flushed */ - break; + /* empty pages could be flushed by encryption threads */ + return; } buf_dblwr_assert_on_corrupt_block(block); @@ -1301,7 +1304,9 @@ buf_dblwr_flush_buffered_writes( buffer has sane LSN values. */ buf_dblwr_check_page_lsn(dblwr_page); - if (encrypt_parallel_dblwr + // it can be already encrypted by encryption threads + FilSpace space (TRX_SYS_SPACE); + if (encrypt_parallel_dblwr && space()->crypt_data == NULL && !buf_dblwr_disable_encryption(block)) { buf_dblwr_encrypt_page(block, dblwr_page); } diff --git a/storage/innobase/buf/buf0flu.cc b/storage/innobase/buf/buf0flu.cc index 4d7947ef54b8..2970cb044362 100644 --- a/storage/innobase/buf/buf0flu.cc +++ b/storage/innobase/buf/buf0flu.cc @@ -1104,9 +1104,14 @@ buf_flush_write_block_low( ut_ad(flush_type == BUF_FLUSH_SINGLE_PAGE); fil_flush(bpage->id.space()); +#ifdef UNIV_DEBUG + dberr_t err = +#endif /* true means we want to evict this page from the LRU list as well. */ buf_page_io_complete(bpage, true); + + ut_ad(err == DB_SUCCESS); } /* Increment the counter of I/O operations used @@ -3899,7 +3904,8 @@ FlushObserver::FlushObserver( m_stage(stage), m_interrupted(false), m_estimate(), - m_lsn(log_get_lsn()) + m_lsn(log_get_lsn()), + m_number_of_pages_flushed(0) { m_flushed = UT_NEW_NOKEY(std::vector(srv_buf_pool_instances)); m_removed = UT_NEW_NOKEY(std::vector(srv_buf_pool_instances)); @@ -3973,6 +3979,8 @@ FlushObserver::notify_remove( m_removed->at(buf_pool->instance_no)++; + os_atomic_increment_ulint(&m_number_of_pages_flushed, 1); + #ifdef FLUSH_LIST_OBSERVER_DEBUG ib::info() << "Remove <" << bpage->id.space() << ", " << bpage->id.page_no() << ">"; diff --git a/storage/innobase/buf/buf0lru.cc b/storage/innobase/buf/buf0lru.cc index 32dcf73dd49e..faf5426206cb 100644 --- a/storage/innobase/buf/buf0lru.cc +++ b/storage/innobase/buf/buf0lru.cc @@ -743,6 +743,9 @@ buf_flush_dirty_pages( err = buf_flush_or_remove_pages( buf_pool, id, observer, flush, trx); + ut_ad(err == DB_INTERRUPTED || err == DB_FAIL + || buf_pool_get_dirty_pages_count(buf_pool, id, observer) == 0); + mutex_exit(&buf_pool->LRU_list_mutex); ut_ad(buf_flush_validate(buf_pool)); @@ -765,8 +768,6 @@ buf_flush_dirty_pages( } while (err == DB_FAIL); - ut_ad(err == DB_INTERRUPTED - || buf_pool_get_dirty_pages_count(buf_pool, id, observer) == 0); } /******************************************************************//** diff --git a/storage/innobase/buf/buf0rea.cc b/storage/innobase/buf/buf0rea.cc index 681c51a10680..fb2d8b326545 100644 --- a/storage/innobase/buf/buf0rea.cc +++ b/storage/innobase/buf/buf0rea.cc @@ -210,6 +210,8 @@ buf_read_page_low( thd_wait_end(NULL); } + bpage->is_corrupt = bpage->encrypted = false; + if (*err != DB_SUCCESS) { if (*err == DB_TABLESPACE_TRUNCATED) { /* Remove the page which is outside the @@ -227,9 +229,12 @@ buf_read_page_low( || *err == DB_TABLESPACE_DELETED) { buf_read_page_handle_error(bpage); return(0); - } + } else if (*err == DB_IO_DECRYPT_FAIL) + { + bpage->encrypted= true; + } - SRV_CORRUPT_TABLE_CHECK(*err == DB_SUCCESS, + SRV_CORRUPT_TABLE_CHECK(*err == DB_SUCCESS || bpage->encrypted, bpage->is_corrupt = true;); } @@ -237,7 +242,10 @@ buf_read_page_low( if (sync) { /* The i/o is already completed when we arrive from fil_read */ - if (!buf_page_io_complete(bpage)) { + + *err = buf_page_io_complete(bpage); + + if (*err != DB_SUCCESS) { return(0); } } @@ -408,12 +416,20 @@ buf_read_ahead_random( ibuf_mode, cur_page_id, page_size, false, trx, false); - if (err == DB_TABLESPACE_DELETED) { - ib::warn() << "Random readahead trying to" + switch (err) { + case DB_SUCCESS: + case DB_TABLESPACE_TRUNCATED: + case DB_ERROR: + case DB_IO_DECRYPT_FAIL: + break; + case DB_TABLESPACE_DELETED: + ib::info() << "Random readahead trying to" " access page " << cur_page_id << " in nonexisting or" " being-dropped tablespace"; break; + default: + ut_error; } } } @@ -446,15 +462,19 @@ an exclusive lock on the buffer frame. The flag is cleared and the x-lock released by the i/o-handler thread. @param[in] page_id page id @param[in] page_size page size -@return TRUE if page has been read in, FALSE in case of failure */ -ibool +@retval DB_SUCCESS if the page was read and is not corrupted, +@retval DB_PAGE_CORRUPTED if page based on checksum check is corrupted, +@retval DB_DECRYPTION_FAILED if page post encryption checksum matches but +after decryption normal page checksum does not match. +@retval DB_TABLESPACE_DELETED if tablespace .ibd file is missing */ +dberr_t buf_read_page( const page_id_t& page_id, const page_size_t& page_size, trx_t* trx) { ulint count; - dberr_t err; + dberr_t err = DB_SUCCESS; /* We do synchronous IO because our AIO completion code is sub-optimal. See buf_page_io_complete(), we have to @@ -476,7 +496,7 @@ buf_read_page( /* Increment number of I/O operations used for LRU policy. */ buf_LRU_stat_inc_io(); - return(count > 0); + return(err); } /** High-level function which reads a page asynchronously from a file to the @@ -780,12 +800,26 @@ buf_read_ahead_linear( ibuf_mode, cur_page_id, page_size, false, trx, true); - if (err == DB_TABLESPACE_DELETED) { - ib::warn() << "linear readahead trying to" + switch (err) { + case DB_TABLESPACE_DELETED: + ib::warn() << "linear readahead trying to" " access page " << page_id_t(page_id.space(), i) << " in nonexisting or being-dropped" " tablespace"; + break; + case DB_SUCCESS: + case DB_TABLESPACE_TRUNCATED: + case DB_ERROR: + break; + case DB_PAGE_CORRUPTED: + case DB_DECRYPTION_FAILED: + ib::error() << "linear readahead failed to" + " read or decrypt " + << page_id_t(page_id.space(), i); + break; + default: + ut_error; } } } @@ -868,11 +902,24 @@ buf_read_ibuf_merge_pages( BUF_READ_ANY_PAGE, page_id, page_size, true, NULL, false); - if (err == DB_TABLESPACE_DELETED) { + switch(err) { + case DB_SUCCESS: + case DB_TABLESPACE_TRUNCATED: + case DB_ERROR: + break; + case DB_TABLESPACE_DELETED: /* We have deleted or are deleting the single-table tablespace: remove the entries for that page */ ibuf_merge_or_delete_for_page(NULL, page_id, &page_size, FALSE); + // fallthrough + case DB_PAGE_CORRUPTED: + case DB_DECRYPTION_FAILED: + ib::error() << "Failed to read or decrypt " << page_id + << " for change buffer merge"; + break; + default: + ut_error; } } @@ -951,6 +998,14 @@ buf_read_recv_pages( BUF_READ_ANY_PAGE, cur_page_id, page_size, true, NULL, false); } + + if (err == DB_DECRYPTION_FAILED) { + ib::error() << "Recovery failed to decrypt page " + << cur_page_id; + } else if (err == DB_PAGE_CORRUPTED) { + ib::error() << "Recovery failed due to corrupted page " + << cur_page_id; + } } os_aio_simulated_wake_handler_threads(); diff --git a/storage/innobase/dict/dict0crea.cc b/storage/innobase/dict/dict0crea.cc index abc38802b909..7af56c2edde5 100644 --- a/storage/innobase/dict/dict0crea.cc +++ b/storage/innobase/dict/dict0crea.cc @@ -51,6 +51,11 @@ Created 1/8/1996 Heikki Tuuri #include "fsp0sysspace.h" #include "srv0start.h" +//TODO:Robert - może to nie powinno być tutaj, includuje tylko dla fil_encryption_t +#include "fil0fil.h" + +#include "fil0crypt.h" //dla FIL_ENCRYPTION_KEY_DEFAULT + /*****************************************************************//** Based on a table object, this function builds the entry to be inserted in the SYS_TABLES system table. @@ -365,7 +370,7 @@ dict_build_table_def_step( trx_t* trx = thr_get_trx(thr); dict_table_assign_new_id(table, trx); - err = dict_build_tablespace_for_table(table); + err = dict_build_tablespace_for_table(table, node); if (err != DB_SUCCESS) { return(err); } @@ -382,7 +387,8 @@ dict_build_table_def_step( @return DB_SUCCESS or error code. */ dberr_t dict_build_tablespace( - Tablespace* tablespace) + Tablespace* tablespace, + tab_node_t* node) { dberr_t err = DB_SUCCESS; mtr_t mtr; @@ -415,7 +421,9 @@ dict_build_tablespace( tablespace->name(), datafile->filepath(), tablespace->flags(), - FIL_IBD_FILE_INITIAL_SIZE); + FIL_IBD_FILE_INITIAL_SIZE, + node ? node->mode : FIL_ENCRYPTION_DEFAULT, + node ? node->create_info_encryption_key_id : CreateInfoEncryptionKeyId()); if (err != DB_SUCCESS) { return(err); } @@ -435,7 +443,6 @@ dict_build_tablespace( /* Once we allow temporary general tablespaces, we must do this; mtr_set_log_mode(&mtr, MTR_LOG_NO_REDO); */ ut_a(!FSP_FLAGS_GET_TEMPORARY(tablespace->flags())); - bool ret = fsp_header_init(space, FIL_IBD_FILE_INITIAL_SIZE, &mtr); mtr_commit(&mtr); @@ -451,7 +458,8 @@ dict_build_tablespace( @return DB_SUCCESS or error code */ dberr_t dict_build_tablespace_for_table( - dict_table_t* table) + dict_table_t* table, + tab_node_t* node) { dberr_t err = DB_SUCCESS; mtr_t mtr; @@ -470,6 +478,12 @@ dict_build_tablespace_for_table( DICT_TF2_FLAG_UNSET(table, DICT_TF2_FTS_AUX_HEX_NAME);); + if (node && (node->mode == FIL_ENCRYPTION_ON || + (node->mode == FIL_ENCRYPTION_DEFAULT && + (srv_encrypt_tables == SRV_ENCRYPT_TABLES_ONLINE_TO_KEYRING + || srv_encrypt_tables == SRV_ENCRYPT_TABLES_KEYRING_FORCE)))) + DICT_TF2_FLAG_SET(table, DICT_TF2_ENCRYPTION); + if (needs_file_per_table) { /* This table will need a new tablespace. */ @@ -531,7 +545,9 @@ dict_build_tablespace_for_table( err = fil_ibd_create( space, table->name.m_name, filepath, fsp_flags, - FIL_IBD_FILE_INITIAL_SIZE); + FIL_IBD_FILE_INITIAL_SIZE, + node ? node->mode : FIL_ENCRYPTION_DEFAULT, + node ? node->create_info_encryption_key_id : CreateInfoEncryptionKeyId()); ut_free(filepath); @@ -999,7 +1015,7 @@ dict_create_index_tree_step( mtr_start(&mtr); - const bool missing = index->table->ibd_file_missing + const bool missing = index->table->file_unreadable || dict_table_is_discarded(index->table); if (!missing) { @@ -1073,7 +1089,7 @@ dict_create_index_tree_in_mem( /* Currently this function is being used by temp-tables only. Import/Discard of temp-table is blocked and so this assert. */ - ut_ad(index->table->ibd_file_missing == 0 + ut_ad(index->table->file_unreadable == 0 && !dict_table_is_discarded(index->table)); page_no = btr_create( @@ -1356,7 +1372,9 @@ tab_create_graph_create( /*====================*/ dict_table_t* table, /*!< in: table to create, built as a memory data structure */ - mem_heap_t* heap) /*!< in: heap where created */ + mem_heap_t* heap, /*!< in: heap where created */ + fil_encryption_t mode, /*!< in: encryption mode */ + const CreateInfoEncryptionKeyId &create_info_encryption_key_id) /*!< in: encryption key_id */ { tab_node_t* node; @@ -1369,6 +1387,8 @@ tab_create_graph_create( node->state = TABLE_BUILD_TABLE_DEF; node->heap = mem_heap_create(256); + node->mode= mode; + node->create_info_encryption_key_id= create_info_encryption_key_id; node->tab_def = ins_node_create(INS_DIRECT, dict_sys->sys_tables, heap); diff --git a/storage/innobase/dict/dict0dict.cc b/storage/innobase/dict/dict0dict.cc index 8cb88463774b..f3ab59a23ad9 100644 --- a/storage/innobase/dict/dict0dict.cc +++ b/storage/innobase/dict/dict0dict.cc @@ -5796,6 +5796,20 @@ dict_find_single_table_by_space( return(NULL); } +/** Flags a table with specified space_id encrypted in the data dictionary +cache +@param[in] space_id Tablespace id */ +void +dict_set_encrypted_by_space(ulint space_id) +{ + dict_table_t* table; + + table = dict_find_single_table_by_space(space_id); + + if (table) + table->set_file_unreadable(); +} + /**********************************************************************//** Flags a table with specified space_id corrupted in the data dictionary cache @@ -6089,6 +6103,7 @@ dict_table_set_corrupt_by_space( while (table) { if (table->space == space_id) { table->is_corrupt = true; + table->file_unreadable = true; found = true; } @@ -6354,7 +6369,8 @@ dict_table_schema_check( return(DB_TABLE_NOT_FOUND); } - if (table->ibd_file_missing) { + if (!table->is_readable() && + fil_space_get(table->space) == NULL) { /* missing tablespace */ ut_snprintf(errstr, errstr_sz, diff --git a/storage/innobase/dict/dict0load.cc b/storage/innobase/dict/dict0load.cc index 859c78978465..7f8eeac417fc 100644 --- a/storage/innobase/dict/dict0load.cc +++ b/storage/innobase/dict/dict0load.cc @@ -84,7 +84,7 @@ key constraints are loaded into memory. constraints are loaded. @return table, NULL if does not exist; if the table is stored in an .ibd file, but the file does not exist, then we set the -ibd_file_missing flag TRUE in the table object we return */ +file_unreadable flag TRUE in the table object we return */ static dict_table_t* dict_load_table_one( @@ -1371,6 +1371,8 @@ dict_check_sys_tablespaces( opened. */ char* filepath = dict_get_first_path(space_id); + Keyring_encryption_info keyring_encryption_info; + /* Check that the .ibd file exists. */ dberr_t err = fil_ibd_open( validate, @@ -1379,7 +1381,8 @@ dict_check_sys_tablespaces( space_id, fsp_flags, space_name, - filepath); + filepath, + keyring_encryption_info); if (err != DB_SUCCESS) { ib::warn() << "Ignoring tablespace " @@ -1612,6 +1615,8 @@ dict_check_sys_tables( is_temp, is_encrypted); + Keyring_encryption_info keyring_encryption_info; + dberr_t err = fil_ibd_open( validate, !srv_read_only_mode && srv_log_file_size != 0, @@ -1619,7 +1624,8 @@ dict_check_sys_tables( space_id, fsp_flags, space_name, - filepath); + filepath, + keyring_encryption_info); if (err != DB_SUCCESS) { ib::warn() << "Ignoring tablespace " @@ -2716,7 +2722,7 @@ dict_load_indexes( dict_mem_index_free(index); goto func_exit; } else if (index->page == FIL_NULL - && !table->ibd_file_missing + && !table->file_unreadable && (!(index->type & DICT_FTS))) { ib::error() << "Trying to load index " << index->name @@ -2839,7 +2845,7 @@ dict_load_table_low( *table = dict_mem_table_create( name.m_name, space_id, n_cols + n_v_col, n_v_col, flags, flags2); (*table)->id = table_id; - (*table)->ibd_file_missing = FALSE; + (*table)->set_file_readable(); return(NULL); } @@ -2995,7 +3001,7 @@ a foreign key references columns in this table. @param[in] ignore_err Error to be ignored when loading table and its index definition @return table, NULL if does not exist; if the table is stored in an -.ibd file, but the file does not exist, then we set the ibd_file_missing +.ibd file, but the file does not exist, then we set the file_unreadable flag in the table object we return. */ dict_table_t* dict_load_table( @@ -3058,13 +3064,13 @@ dict_load_tablespace( if (table->flags2 & DICT_TF2_DISCARDED) { ib::warn() << "Tablespace for table " << table->name << " is set as discarded."; - table->ibd_file_missing = TRUE; + table->set_file_unreadable(); return; } if (dict_table_is_temporary(table)) { /* Do not bother to retry opening temporary tables. */ - table->ibd_file_missing = TRUE; + table->set_file_unreadable(); return; } @@ -3144,15 +3150,20 @@ dict_load_tablespace( ulint fsp_flags = dict_tf_to_fsp_flags(table->flags, false, dict_table_is_encrypted(table)); + + Keyring_encryption_info keyring_encryption_info; + dberr_t err = fil_ibd_open( true, false, FIL_TYPE_TABLESPACE, table->space, - fsp_flags, space_name, filepath); + fsp_flags, space_name, filepath, keyring_encryption_info); if (err != DB_SUCCESS) { /* We failed to find a sensible tablespace file */ - table->ibd_file_missing = TRUE; + table->set_file_unreadable(); } + table->keyring_encryption_info = keyring_encryption_info; + ut_free(shared_space_name); ut_free(filepath); } @@ -3174,7 +3185,7 @@ key constraints are loaded into memory. constraints are loaded. @return table, NULL if does not exist; if the table is stored in an .ibd file, but the file does not exist, then we set the -ibd_file_missing flag TRUE in the table object we return */ +file_unreadable flag TRUE in the table object we return */ static dict_table_t* dict_load_table_one( @@ -3283,7 +3294,7 @@ dict_load_table_one( were not allowed while the table is being locked by a transaction. */ dict_err_ignore_t index_load_err = !(ignore_err & DICT_ERR_IGNORE_RECOVER_LOCK) - && table->ibd_file_missing + && table->file_unreadable ? DICT_ERR_IGNORE_ALL : ignore_err; err = dict_load_indexes(table, heap, index_load_err); @@ -3344,7 +3355,7 @@ dict_load_table_one( 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 (!cached || table->ibd_file_missing) { + if (!cached || table->file_unreadable) { /* Don't attempt to load the indexes from disk. */ } else if (err == DB_SUCCESS) { err = dict_load_foreigns(table->name.m_name, NULL, @@ -3378,7 +3389,7 @@ dict_load_table_one( table = NULL; } else if (dict_index_is_corrupted(index) - && !table->ibd_file_missing) { + && !table->file_unreadable) { /* It is possible we force to load a corrupted clustered index if srv_load_corrupted is set. @@ -3392,7 +3403,7 @@ dict_load_table_one( ut_ad(!table || ignore_err != DICT_ERR_IGNORE_NONE - || table->ibd_file_missing + || table->file_unreadable || !table->corrupted); if (table && table->fts) { diff --git a/storage/innobase/dict/dict0mem.cc b/storage/innobase/dict/dict0mem.cc index 87987dca1f4d..5562a893b4a4 100644 --- a/storage/innobase/dict/dict0mem.cc +++ b/storage/innobase/dict/dict0mem.cc @@ -171,6 +171,8 @@ dict_mem_table_create( table->is_corrupt = false; + table->file_unreadable = false; + #endif /* !UNIV_HOTBACKUP */ if (DICT_TF_HAS_SHARED_SPACE(table->flags)) { diff --git a/storage/innobase/dict/dict0stats.cc b/storage/innobase/dict/dict0stats.cc index 9cf08509834f..cb0ceeacf563 100644 --- a/storage/innobase/dict/dict0stats.cc +++ b/storage/innobase/dict/dict0stats.cc @@ -856,10 +856,14 @@ dict_stats_update_transient_for_index( index->stat_n_leaf_pages = size; + /* Do not continue if table decryption has failed or + table is already marked as corrupted. */ + if (index->is_readable()) { /* We don't handle the return value since it will be false only when some thread is dropping the table and we don't have to empty the statistics of the to be dropped index */ - btr_estimate_number_of_different_key_vals(index); + btr_estimate_number_of_different_key_vals(index); + } } } @@ -909,6 +913,12 @@ dict_stats_update_transient( continue; } + /* Do not continue if table decryption has failed or + table is already marked as corrupted. */ + if (!index->is_readable()) { + break; + } + dict_stats_update_transient_for_index(index); sum_of_index_sizes += index->stat_index_size; @@ -2349,6 +2359,45 @@ dict_stats_save_index_stat( return(ret); } +/** Report an error if updating table statistics failed because +.ibd file is missing, table decryption failed or table is corrupted. +@param[in,out] table Table +@retval DB_DECRYPTION_FAILED if decryption of the table failed +@retval DB_TABLESPACE_DELETED if .ibd file is missing +@retval DB_CORRUPTION if table is marked as corrupted */ +dberr_t +dict_stats_report_error(dict_table_t* table) +{ + dberr_t err; + + uint32_t space_id = table->space; + + DBUG_EXECUTE_IF( + "ib_rename_index_fail2", + space_id = 911; + ); + FilSpace space(space_id); + + if (!space()) { + ib::warn() << "Cannot save statistics for table " + << table->name + << " because the .ibd file is missing. " + << TROUBLESHOOTING_MSG; + err = DB_TABLESPACE_DELETED; + } else { + ib::warn() << "Cannot save statistics for table " + << table->name + << " because file " << space()->chain.start->name + << (table->corrupted + ? " is corrupted." + : " cannot be decrypted."); + err = table->corrupted ? DB_CORRUPTION : DB_DECRYPTION_FAILED; + } + + dict_stats_empty_table(table); + return err; +} + /** Save the table's statistics into the persistent statistics storage. @param[in] table_orig table whose stats to save @param[in] only_for_index if this is non-NULL, then stats for indexes @@ -2368,6 +2417,10 @@ dict_stats_save( char db_utf8[MAX_DB_UTF8_LEN]; char table_utf8[MAX_TABLE_UTF8_LEN]; + if (!table_orig->is_readable()) { + return (dict_stats_report_error(table_orig)); + } + table = dict_stats_snapshot_create(table_orig); dict_fs2utf8(table->name.m_name, db_utf8, sizeof(db_utf8), @@ -3061,15 +3114,8 @@ dict_stats_update( { ut_ad(!mutex_own(&dict_sys->mutex)); - if (table->ibd_file_missing) { - - ib::warn() << "Cannot calculate statistics for table " - << table->name - << " because the .ibd file is missing. " - << TROUBLESHOOTING_MSG; - - dict_stats_empty_table(table); - return(DB_TABLESPACE_DELETED); + if (!table->is_readable()) { + return (dict_stats_report_error(table)); } else if (srv_force_recovery >= SRV_FORCE_NO_IBUF_MERGE) { /* If we have set a high innodb_force_recovery level, do not calculate statistics, as a badly corrupted index can diff --git a/storage/innobase/fil/fil0crypt.cc b/storage/innobase/fil/fil0crypt.cc new file mode 100644 index 000000000000..9712b1683471 --- /dev/null +++ b/storage/innobase/fil/fil0crypt.cc @@ -0,0 +1,2996 @@ +/***************************************************************************** +Copyright (C) 2013, 2015, Google Inc. All Rights Reserved. +Copyright (c) 2014, 2017, MariaDB Corporation. + +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 + +*****************************************************************************/ +/**************************************************//** +@file fil0crypt.cc +Innodb file space encrypt/decrypt + +Created Jonas Oreland Google +Modified Jan Lindström jan.lindstrom@mariadb.com +*******************************************************/ + +#include "fil0fil.h" +#include "mtr0types.h" +#include "mach0data.h" +#include "page0size.h" +#include "page0zip.h" +#ifndef UNIV_INNOCHECKSUM +#include "fil0crypt.h" +#include "srv0srv.h" +#include "srv0start.h" +#include "log0recv.h" +#include "mtr0mtr.h" +#include "mtr0log.h" +#include "ut0ut.h" +#include "fsp0fsp.h" +#include "ha_prototypes.h" // IB_LOG_ +#include +#include "buf0flu.h" +#include "buf0buf.h" + +#include "trx0trx.h" // for updating data dictionary +#include "row0mysql.h" +#include "pars0pars.h" +#include "que0que.h" +#include "row0sel.h" +#include "dict0dict.h" +#include "fts0priv.h" +#include "lock0lock.h" +#include "my_dbug.h" + +#include "os0file.h" + +#include + +#define ENCRYPTION_MASTER_KEY_NAME_MAX_LEN 100 + +#ifdef UNIV_DEBUG +static int number_of_t1_pages_rotated = 0; +#endif + +/** Mutex for keys */ +static ib_mutex_t fil_crypt_key_mutex; + +static bool fil_crypt_threads_inited = false; +extern ulong srv_encrypt_tables; + +/** No of key rotation threads requested */ +uint srv_n_fil_crypt_threads = 0; + +/** No of key rotation threads started */ +uint srv_n_fil_crypt_threads_started = 0; + +/** At this age or older a space/page will be rotated */ +uint srv_fil_crypt_rotate_key_age; + +/** Event to signal FROM the key rotation threads. */ +static os_event_t fil_crypt_event; + +/** Event to signal TO the key rotation threads. */ +os_event_t fil_crypt_threads_event; + +/** Event for waking up threads throttle. */ +static os_event_t fil_crypt_throttle_sleep_event; + +/** Mutex for key rotation threads. */ +ib_mutex_t fil_crypt_threads_mutex; + +/** Variable ensuring only 1 thread at time does initial conversion */ +static bool fil_crypt_start_converting = false; + +/** Variables for throttling */ +uint srv_n_fil_crypt_iops = 100; // 10ms per iop +static uint srv_alloc_time = 3; // allocate iops for 3s at a time +static uint n_fil_crypt_iops_allocated = 0; + +uint get_global_default_encryption_key_id_value(); + +bool is_online_encryption_on() { + return srv_encrypt_tables == SRV_ENCRYPT_TABLES_ONLINE_TO_KEYRING || + srv_encrypt_tables == SRV_ENCRYPT_TABLES_ONLINE_TO_KEYRING_FORCE; +} + +#define DEBUG_KEYROTATION_THROTTLING 0 + +uint fil_get_encrypt_info_size(const uint iv_len) { + return ENCRYPTION_MAGIC_SIZE + + 2 //length of iv + + 4 //space id + + 2 //offset + + 1 //type + + 4 //min_key_version + + 4 //key_id + + 1 //encryption + + iv_len //iv + + 4 //encryption rotation type + + ENCRYPTION_KEY_LEN //tablespace key + + ENCRYPTION_KEY_LEN; //tablespace iv +} + +uchar* fil_space_crypt_t::get_key_currently_used_for_encryption() { + //ut_ad(mutex_own(&this->mutex)); + return get_cached_key(cached_encryption_key, encrypting_with_key_version); +} + +uchar * fil_space_crypt_t::get_min_key_version_key() { + //ut_ad(mutex_own(&this->mutex)); + return get_cached_key(cached_min_key_version_key, min_key_version); +} + +uchar * fil_space_crypt_t::get_cached_key(Cached_key &cached_key, uint key_version) { + //ut_ad(mutex_own(&this->mutex)); + ut_ad(key_version != ENCRYPTION_KEY_VERSION_NOT_ENCRYPTED); + if (cached_key.key_version == key_version) + return cached_key.key; + + if (cached_key.key != NULL) { + fetched_keys.push_back(cached_key.key); + //my_free(cached_key.key); + cached_key.key= NULL; + } + cached_key.key_version = ENCRYPTION_KEY_VERSION_INVALID; + + Encryption::get_tablespace_key(this->key_id, key_version, &cached_key.key, + &cached_key.key_len); + ut_ad(cached_key.key == NULL || + cached_key.key_len == ENCRYPTION_KEY_LEN); + + return cached_key.key; +} + +bool fil_space_crypt_t::load_needed_keys_into_local_cache() { + return (encrypting_with_key_version == ENCRYPTION_KEY_VERSION_NOT_ENCRYPTED || + get_key_currently_used_for_encryption() != NULL) && + (min_key_version == ENCRYPTION_KEY_VERSION_NOT_ENCRYPTED || + get_min_key_version_key() != NULL); +} + +/** Statistics variables */ +static fil_crypt_stat_t crypt_stat; +static ib_mutex_t crypt_stat_mutex; + +/*********************************************************************** +Check if a key needs rotation given a key_state +@param[in] encrypt_mode Encryption mode +@param[in] key_version Current key version +@param[in] latest_key_version Latest key version +@param[in] rotate_key_age when to rotate +@return true if key needs rotation, false if not */ +static bool +fil_crypt_needs_rotation( + fil_encryption_t encrypt_mode, + uint key_version, + uint latest_key_version, + uint rotate_key_age) + MY_ATTRIBUTE((warn_unused_result)); + +/********************************************************************* +Init space crypt */ +void +fil_space_crypt_init() +{ + mutex_create(LATCH_ID_FIL_CRYPT_MUTEX, &fil_crypt_key_mutex); + + fil_crypt_throttle_sleep_event = os_event_create(0); + + mutex_create(LATCH_ID_FIL_CRYPT_STAT_MUTEX, &crypt_stat_mutex); + memset(&crypt_stat, 0, sizeof(crypt_stat)); +} + +/********************************************************************* +Cleanup space crypt */ +void +fil_space_crypt_cleanup() { + os_event_destroy(fil_crypt_throttle_sleep_event); + mutex_free(&fil_crypt_key_mutex); + mutex_free(&crypt_stat_mutex); +} + +fil_space_crypt_t::fil_space_crypt_t( + uint new_type, + uint new_min_key_version, + uint new_key_id, + fil_encryption_t new_encryption, + bool create_key, // is used when we have a new tablespace to encrypt and is not used when we read a crypto from page0 + Encryption::Encryption_rotation encryption_rotation) + : min_key_version(new_min_key_version), + page0_offset(0), + encryption(new_encryption), + key_found(false), + rotate_state(), + encryption_rotation(encryption_rotation), + tablespace_key(NULL) + { + key_id = new_key_id; + if (my_random_bytes(iv, sizeof(iv)) != MY_AES_OK) // TODO:Robert: This can return error and because of that it should not be in constructor + type = 0; //TODO:Robert: This is temporary to get rid of unused variable problem + mutex_create(LATCH_ID_FIL_CRYPT_START_ROTATE_MUTEX, &start_rotate_mutex); + mutex_create(LATCH_ID_FIL_CRYPT_DATA_MUTEX, &mutex); + //locker = crypt_data_scheme_locker; // TODO:Robert: Co to za locker, nie mogę znaleść jego definicji nawet w mariadb + type = new_type; + + if (new_encryption == FIL_ENCRYPTION_OFF || + (is_online_encryption_on() == false && + new_encryption == FIL_ENCRYPTION_DEFAULT)) { + type = CRYPT_SCHEME_UNENCRYPTED; + min_key_version = ENCRYPTION_KEY_VERSION_NOT_ENCRYPTED; + key_found = true; + } else { + type = CRYPT_SCHEME_1; + //key_found = true; // cheat key_get_latest_version that the key exists - if it does not it will return ENCRYPTION_KEY_VERSION_INVALID + uchar *key = NULL; + uint key_version = 0; + Encryption::get_latest_tablespace_key_or_create_new_one(key_id, &key_version, &key); + if (key == NULL) { + key_found = false; + min_key_version = ENCRYPTION_KEY_VERSION_INVALID; + } else { + key_found = true; + min_key_version = key_version; + } + my_free(key); + } + + //found_key_version = min_key_version; // TODO:This does not make much sense now - always true + } + +/** +Get latest key version from encryption plugin. +@return key version or ENCRYPTION_KEY_VERSION_INVALID */ +uint +fil_space_crypt_t::key_get_latest_version(void) { + uint key_version = ENCRYPTION_KEY_VERSION_INVALID; + + if (is_key_found()) { //TODO:Robert:This blocks new version from being found - if it once read - it stays the same + key_version = Encryption::encryption_get_latest_version(key_id); + srv_stats.n_key_requests.inc(); + //found_key_version = key_version; + } + + return key_version; +} + +/****************************************************************** +Get the latest(key-version), waking the encrypt thread, if needed +@param[in,out] crypt_data Crypt data */ +static inline +uint +fil_crypt_get_latest_key_version( + fil_space_crypt_t* crypt_data) { + ut_ad(crypt_data != NULL); + + uint key_version = crypt_data->key_get_latest_version(); + + if (crypt_data->is_key_found()) { + + if (fil_crypt_needs_rotation(crypt_data->encryption, + crypt_data->min_key_version, + key_version, + srv_fil_crypt_rotate_key_age)) { + /* Below event seen as NULL-pointer at startup + when new database was created and we create a + checkpoint. Only seen when debugging. */ + if (fil_crypt_threads_inited) { + os_event_set(fil_crypt_threads_event); + } + } + } + + return key_version; +} + +/****************************************************************** +Create a fil_space_crypt_t object +@param[in] type CRYPT_SCHEME_UNENCRYPTE or + CRYPT_SCHEME_1 +@param[in] encrypt_mode FIL_ENCRYPTION_DEFAULT or + FIL_ENCRYPTION_ON or + FIL_ENCRYPTION_OFF +@param[in] min_key_version key_version or 0 +@param[in] key_id Used key id +@return crypt object */ + +static +fil_space_crypt_t* +fil_space_create_crypt_data( + uint type, + fil_encryption_t encrypt_mode, + uint min_key_version, + uint key_id, + bool create_key = true) { + fil_space_crypt_t* crypt_data = NULL; + if (void* buf = ut_zalloc_nokey(sizeof(fil_space_crypt_t))) { + crypt_data = new(buf) + fil_space_crypt_t( + type, + min_key_version, + key_id, + encrypt_mode, + create_key); + } + + return crypt_data; +} + +void fil_space_rotate_state_t::create_flush_observer(uint space_id) { + destroy_flush_observer(); + trx = trx_allocate_for_background(); + flush_observer = UT_NEW_NOKEY(FlushObserver(space_id, + trx, + NULL)); + trx_set_flush_observer(trx, flush_observer); +} + +void fil_space_rotate_state_t::destroy_flush_observer() { + if (flush_observer != NULL) { + flush_observer->flush(); + UT_DELETE(flush_observer); + flush_observer = NULL; + } + if (trx != NULL) { + trx_free_for_background(trx); + trx = NULL; + } +} + +/****************************************************************** +Create a fil_space_crypt_t object +@param[in] encrypt_mode FIL_ENCRYPTION_DEFAULT or + FIL_ENCRYPTION_ON or + FIL_ENCRYPTION_OFF + +@param[in] key_id Encryption key id +@return crypt object */ +fil_space_crypt_t* +fil_space_create_crypt_data( + fil_encryption_t encrypt_mode, + uint key_id, + bool create_key) { + + return (fil_space_create_crypt_data(0, encrypt_mode, ENCRYPTION_KEY_VERSION_NOT_ENCRYPTED, key_id, create_key)); +} + +/****************************************************************** +Merge fil_space_crypt_t object +@param[in,out] dst Destination cryp data +@param[in] src Source crypt data */ +void +fil_space_merge_crypt_data( + fil_space_crypt_t* dst, + const fil_space_crypt_t* src) { + + mutex_enter(&dst->mutex); + + /* validate that they are mergeable */ + ut_a(src->type == CRYPT_SCHEME_UNENCRYPTED || + src->type == CRYPT_SCHEME_1); + + ut_a(dst->type == CRYPT_SCHEME_UNENCRYPTED || + dst->type == CRYPT_SCHEME_1); + + dst->encryption = src->encryption; + dst->type = src->type; + dst->min_key_version = src->min_key_version; + dst->keyserver_requests += src->keyserver_requests; + + mutex_exit(&dst->mutex); +} + +static +ulint +fsp_header_get_encryption_offset( + const page_size_t& page_size) { + ulint offset; +#ifdef UNIV_DEBUG + ulint left_size; +#endif + + offset = XDES_ARR_OFFSET + XDES_SIZE * xdes_arr_size(page_size); +#ifdef UNIV_DEBUG + left_size = page_size.physical() - FSP_HEADER_OFFSET - offset + - FIL_PAGE_DATA_END; + ut_ad(left_size >= fil_get_encrypt_info_size(CRYPT_SCHEME_1_IV_LEN)); +#endif + + return offset; +} + +fil_space_crypt_t* +fil_space_read_crypt_data(const page_size_t& page_size, const byte* page) { + + ulint bytes_read = 0; + + const ulint offset = fsp_header_get_encryption_offset(page_size); + + if (memcmp(page + offset, ENCRYPTION_KEY_MAGIC_PS_V1, ENCRYPTION_MAGIC_SIZE) != 0) { + /* Crypt data is not stored. */ + return NULL; + } + + bytes_read += ENCRYPTION_MAGIC_SIZE; + + uint8_t iv_length = mach_read_from_2(page + offset + bytes_read); + bytes_read += 2; + bytes_read += 4; // skip space_id + bytes_read += 2; // skip offset + + uint8_t type = mach_read_from_1(page + offset + bytes_read); + bytes_read += 1; + + fil_space_crypt_t* crypt_data; + + if (!(type == CRYPT_SCHEME_UNENCRYPTED || + type == CRYPT_SCHEME_1) + || iv_length != sizeof crypt_data->iv) { + ib::error() << "Found non sensible crypt scheme: " + << type << "," << iv_length << " for space: " + << page_get_space_id(page) << " offset: " + << offset << " bytes: [" + << page[offset + 2 + ENCRYPTION_MAGIC_SIZE] + << page[offset + 3 + ENCRYPTION_MAGIC_SIZE] + << page[offset + 4 + ENCRYPTION_MAGIC_SIZE] + << page[offset + 5 + ENCRYPTION_MAGIC_SIZE] + << "]."; + return NULL; + } + + uint min_key_version = mach_read_from_4 + (page + offset + bytes_read); + bytes_read += 4; + + uint key_id = mach_read_from_4 + (page + offset + bytes_read); + bytes_read += 4; + + ut_ad(key_id != (uint)(~0)); + + fil_encryption_t encryption = (fil_encryption_t)mach_read_from_1( + page + offset + bytes_read); + bytes_read += 1; + + crypt_data = fil_space_create_crypt_data(encryption, key_id, false); + + /* We need to overwrite these as above function will initialize + members */ + crypt_data->type = type; + crypt_data->min_key_version = min_key_version; + crypt_data->encrypting_with_key_version = min_key_version; + crypt_data->page0_offset = offset; + memcpy(crypt_data->iv, page + offset + bytes_read, iv_length); + + bytes_read += iv_length; + + crypt_data->encryption_rotation = (Encryption::Encryption_rotation) mach_read_from_4(page + offset + bytes_read); + bytes_read += 4; + + uchar tablespace_key[ENCRYPTION_KEY_LEN]; + memcpy(tablespace_key, page + offset + bytes_read, ENCRYPTION_KEY_LEN); + bytes_read += ENCRYPTION_KEY_LEN; + + if (std::search_n(tablespace_key, tablespace_key + ENCRYPTION_KEY_LEN, ENCRYPTION_KEY_LEN, + 0) == tablespace_key) { // tablespace_key is all zeroes which means there is no + // tablepsace in mtr log + crypt_data->set_tablespace_key(NULL); + crypt_data->set_tablespace_iv(NULL); // No tablespace_key => no iv + } else { + + ut_ad(tablespace_key != NULL); + crypt_data->set_tablespace_key(tablespace_key); // Since there is tablespace_key present - we also need to read + // tablespace_iv + uchar tablespace_iv[ENCRYPTION_KEY_LEN]; + ut_ad(tablespace_iv != NULL); + memcpy(tablespace_iv, page + offset + bytes_read, ENCRYPTION_KEY_LEN); + bytes_read += ENCRYPTION_KEY_LEN; + crypt_data->set_tablespace_iv(tablespace_iv); + } + + return crypt_data; +} + +/****************************************************************** +Free a crypt data object +@param[in,out] crypt_data crypt data to be freed */ +void +fil_space_destroy_crypt_data( + fil_space_crypt_t **crypt_data) { + + if (crypt_data != NULL && (*crypt_data) != NULL) { + fil_space_crypt_t* c; + if (UNIV_LIKELY(fil_crypt_threads_inited)) { + mutex_enter(&fil_crypt_threads_mutex); + c = *crypt_data; + *crypt_data = NULL; + mutex_exit(&fil_crypt_threads_mutex); + } else { + ut_ad(srv_read_only_mode || !srv_was_started); + c = *crypt_data; + *crypt_data = NULL; + } + if (c) { + c->~fil_space_crypt_t(); + ut_free(c); + } + else { + ut_ad(0); + } + } +} + + +/****************************************************************** +Write crypt data to a page (0) +@param[in] space tablespace +@param[in,out] page0 first page of the tablespace +@param[in,out] mtr mini-transaction */ + +void +fil_space_crypt_t::write_page0( + const fil_space_t* space, + byte* page, + mtr_t* mtr, + uint a_min_key_version, + uint a_type, + Encryption::Encryption_rotation current_encryption_rotation) +{ + ut_ad(this == space->crypt_data); + const uint iv_len = sizeof(iv); + const ulint offset = fsp_header_get_encryption_offset(page_size_t(space->flags)); + page0_offset = offset; + + const uint encrypt_info_size = fil_get_encrypt_info_size(iv_len); + + byte *encrypt_info = new byte[encrypt_info_size]; + byte *encrypt_info_ptr = encrypt_info; + + mlog_write_ulint(page + FSP_HEADER_OFFSET + FSP_SPACE_FLAGS, space->flags, MLOG_4BYTES, mtr); // done + + memcpy(encrypt_info_ptr, ENCRYPTION_KEY_MAGIC_PS_V1, ENCRYPTION_MAGIC_SIZE); + encrypt_info_ptr += ENCRYPTION_MAGIC_SIZE; + mach_write_to_2(encrypt_info_ptr, iv_len); + encrypt_info_ptr += 2; + + mach_write_to_4(encrypt_info_ptr, space->id); + encrypt_info_ptr += 4; + mach_write_to_2(encrypt_info_ptr, offset); + encrypt_info_ptr += 2; + + mach_write_to_1(encrypt_info_ptr, a_type); + encrypt_info_ptr += 1; + mach_write_to_4(encrypt_info_ptr, a_min_key_version); + encrypt_info_ptr += 4; + ut_ad(key_id != (uint)(~0)); + mach_write_to_4(encrypt_info_ptr, key_id); + encrypt_info_ptr += 4; + mach_write_to_1(encrypt_info_ptr, encryption); + encrypt_info_ptr += 1; + + memcpy(encrypt_info_ptr, iv, iv_len); + encrypt_info_ptr += iv_len; + + mach_write_to_4(encrypt_info_ptr, current_encryption_rotation); + encrypt_info_ptr += 4; + + if (tablespace_key == NULL) { + ut_ad(tablespace_iv == NULL); + memset(encrypt_info_ptr, 0, ENCRYPTION_KEY_LEN); + encrypt_info_ptr += ENCRYPTION_KEY_LEN; + memset(encrypt_info_ptr, 0, ENCRYPTION_KEY_LEN); + encrypt_info_ptr += ENCRYPTION_KEY_LEN; + } else { + ut_ad(tablespace_iv != NULL); + memcpy(encrypt_info_ptr, tablespace_key, ENCRYPTION_KEY_LEN); + encrypt_info_ptr += ENCRYPTION_KEY_LEN; + memcpy(encrypt_info_ptr, tablespace_iv, ENCRYPTION_KEY_LEN); + encrypt_info_ptr += ENCRYPTION_KEY_LEN; + } + + mlog_write_string(page + offset, + encrypt_info, + encrypt_info_size, + mtr); + + delete[] encrypt_info; +} + +/****************************************************************** +Set crypt data for a tablespace +@param[in,out] space Tablespace +@param[in,out] crypt_data Crypt data to be set +@return crypt_data in tablespace */ +static +fil_space_crypt_t* +fil_space_set_crypt_data( + fil_space_t* space, + fil_space_crypt_t* crypt_data) { + + fil_space_crypt_t* free_crypt_data = NULL; + fil_space_crypt_t* ret_crypt_data = NULL; + + /* Provided space is protected using fil_space_acquire() + from concurrent operations. */ + if (space->crypt_data != NULL) { + /* There is already crypt data present, + merge new crypt_data */ + fil_space_merge_crypt_data(space->crypt_data, + crypt_data); + ret_crypt_data = space->crypt_data; + free_crypt_data = crypt_data; + } else { + space->crypt_data = crypt_data; + ret_crypt_data = space->crypt_data; + } + + if (free_crypt_data != NULL) { + /* there was already crypt data present and the new crypt + * data provided as argument to this function has been merged + * into that => free new crypt data + */ + fil_space_destroy_crypt_data(&free_crypt_data); + } + + return ret_crypt_data; +} + +/****************************************************************** +Parse a MLOG_FILE_WRITE_CRYPT_DATA log entry +@param[in] ptr Log entry start +@param[in] end_ptr Log entry end +@param[in] block buffer block +@return position on log buffer */ + +byte* +fil_parse_write_crypt_data( + byte* ptr, + const byte* end_ptr, + const buf_block_t* block, + ulint len) { + + const uint iv_len = mach_read_from_2(ptr + ENCRYPTION_MAGIC_SIZE); + ut_a(iv_len == CRYPT_SCHEME_1_IV_LEN); // only supported + + const uint encrypt_info_size = fil_get_encrypt_info_size(iv_len); + + if(len != encrypt_info_size) { + recv_sys->set_corrupt_log(); + return NULL; + } + + if (ptr + encrypt_info_size > end_ptr) { + return NULL; + } + + // We should only enter this function if ENCRYPTION_KEY_MAGIC_PS_V1 is set + ut_ad((memcmp(ptr, ENCRYPTION_KEY_MAGIC_PS_V1, + ENCRYPTION_MAGIC_SIZE) == 0)); + ptr += ENCRYPTION_MAGIC_SIZE; + + ptr += 2; // length of iv has been already read + + ulint space_id = mach_read_from_4(ptr); + ptr += 4; + uint offset = mach_read_from_2(ptr); + ptr += 2; + + uint type = mach_read_from_1(ptr); + ptr += 1; + + ut_a(type == CRYPT_SCHEME_UNENCRYPTED || + type == CRYPT_SCHEME_1); // only supported + + uint min_key_version = mach_read_from_4(ptr); + ptr += 4; + + uint key_id = mach_read_from_4(ptr); + ptr += 4; + + fil_encryption_t encryption = (fil_encryption_t)mach_read_from_1(ptr); + ptr += 1; + + fil_space_crypt_t* crypt_data = fil_space_create_crypt_data(encryption, key_id, false); + /* Need to overwrite these as above will initialize fields. */ + crypt_data->page0_offset = offset; + crypt_data->min_key_version = min_key_version; + crypt_data->encryption = encryption; + memcpy(crypt_data->iv, ptr, iv_len); + ptr += iv_len; + crypt_data->encryption_rotation = (Encryption::Encryption_rotation) mach_read_from_4(ptr); + ptr += 4; + uchar tablespace_key[ENCRYPTION_KEY_LEN]; + memcpy(tablespace_key, ptr, ENCRYPTION_KEY_LEN); + ptr += ENCRYPTION_KEY_LEN; + + if (std::search_n(tablespace_key, tablespace_key + ENCRYPTION_KEY_LEN, ENCRYPTION_KEY_LEN, + 0) == tablespace_key) { // tablespace_key is all zeroes which means there is no + // tablepsace in mtr log + crypt_data->set_tablespace_key(NULL); + crypt_data->set_tablespace_iv(NULL); // No tablespace_key => no iv + ptr += ENCRYPTION_KEY_LEN; + } else { + crypt_data->set_tablespace_key(tablespace_key); + uchar tablespace_iv[ENCRYPTION_KEY_LEN]; + memcpy(tablespace_iv, ptr, ENCRYPTION_KEY_LEN); + ptr += ENCRYPTION_KEY_LEN; + crypt_data->set_tablespace_iv(tablespace_iv); + } + + /* update fil_space memory cache with crypt_data */ + if (fil_space_t* space = fil_space_acquire_silent(space_id)) { + + crypt_data = fil_space_set_crypt_data(space, crypt_data); + fil_space_release(space); + /* Check is used key found from encryption plugin */ + if (crypt_data->should_encrypt() + && !crypt_data->is_key_found()) { + ib::error() << "Key cannot be read for SPACE ID = " << space_id; //TODO: To jest zmienione w MariaDB - zmienić! + recv_sys->set_corrupt_log(); + } + } else { + fil_space_destroy_crypt_data(&crypt_data); + } + + return ptr; +} + +/***********************************************************************/ + +/** A copy of global key state */ +struct key_state_t { + key_state_t() : key_id((~0)), key_version(ENCRYPTION_KEY_VERSION_NOT_ENCRYPTED), + rotate_key_age(srv_fil_crypt_rotate_key_age) {} + bool operator==(const key_state_t& other) const { + return key_version == other.key_version && + rotate_key_age == other.rotate_key_age; + } + uint key_id; + uint key_version; + uint rotate_key_age; +}; + +/*********************************************************************** +Copy global key state +@param[in,out] new_state key state +@param[in] crypt_data crypt data */ +static void +fil_crypt_get_key_state( + key_state_t* new_state, + fil_space_crypt_t* crypt_data) { + + if (srv_encrypt_tables == SRV_ENCRYPT_TABLES_ONLINE_TO_KEYRING || + srv_encrypt_tables == SRV_ENCRYPT_TABLES_ONLINE_TO_KEYRING_FORCE) { + new_state->key_version = crypt_data->key_get_latest_version(); + new_state->rotate_key_age = srv_fil_crypt_rotate_key_age; + ut_a(new_state->key_version != ENCRYPTION_KEY_VERSION_NOT_ENCRYPTED); + } else if (srv_encrypt_tables == SRV_ENCRYPT_TABLES_ONLINE_FROM_KEYRING_TO_UNENCRYPTED) { + new_state->key_version = ENCRYPTION_KEY_VERSION_NOT_ENCRYPTED; + new_state->rotate_key_age = 0; + } +} + +/*********************************************************************** +Check if a key needs rotation given a key_state +@param[in] encrypt_mode Encryption mode +@param[in] key_version Current key version +@param[in] latest_key_version Latest key version +@param[in] rotate_key_age when to rotate +@return true if key needs rotation, false if not */ +static bool +fil_crypt_needs_rotation( + fil_encryption_t encrypt_mode, + uint key_version, + uint latest_key_version, + uint rotate_key_age) { + + if (key_version == ENCRYPTION_KEY_VERSION_INVALID) { + ut_ad(0); + return false; + } + + if (key_version == ENCRYPTION_KEY_VERSION_NOT_ENCRYPTED && latest_key_version != ENCRYPTION_KEY_VERSION_NOT_ENCRYPTED) { + /* this is rotation unencrypted => encrypted + * ignore rotate_key_age */ + return true; + } + + if (latest_key_version == ENCRYPTION_KEY_VERSION_NOT_ENCRYPTED && key_version != ENCRYPTION_KEY_VERSION_NOT_ENCRYPTED) { + if (encrypt_mode == FIL_ENCRYPTION_DEFAULT) { + //this is rotation encrypted => unencrypted + return true; + } + return false; + } + + //TODO:Robert dodałem to nie wiem co robić gdy oba są not_encrypted - czy to możliwe, żeby doszedł tutaj ?: + //ut_ad(!(latest_key_version == ENCRYPTION_KEY_VERSION_NOT_ENCRYPTED && key_version == ENCRYPTION_KEY_VERSION_NOT_ENCRYPTED)); + + /* this is rotation encrypted => encrypted, + * only reencrypt if key is sufficiently old */ + if (rotate_key_age > 0 && (key_version + rotate_key_age <= latest_key_version)) { + return true; + } + + return false; +} + +/** Read page 0 and possible crypt data from there. +@param[in,out] space Tablespace */ +static inline +void +fil_crypt_read_crypt_data(fil_space_t* space) { + + if (space->crypt_data && space->size) { + /* The encryption metadata has already been read, or + the tablespace is not encrypted and the file has been + opened already. */ + return; + } + + const page_size_t page_size(space->flags); + mtr_t mtr; + mtr.start(); + if (buf_block_t* block = buf_page_get(page_id_t(space->id, 0), + page_size, RW_S_LATCH, &mtr)) { + mutex_enter(&fil_system->mutex); + if (!space->crypt_data) { + space->crypt_data = fil_space_read_crypt_data( + page_size, block->frame); + } + mutex_exit(&fil_system->mutex); + } + mtr.commit(); +} + +/*********************************************************************** +Start encrypting a space +@param[in,out] space Tablespace +@return true if a recheck is needed */ +static +bool +fil_crypt_start_encrypting_space( + fil_space_t* space) { + + bool recheck = false; + + mutex_enter(&fil_crypt_threads_mutex); + + fil_space_crypt_t *crypt_data = space->crypt_data; + + /* If space is not encrypted and encryption is not enabled, then + do not continue encrypting the space. */ + if (!crypt_data && is_online_encryption_on() == false) { + mutex_exit(&fil_crypt_threads_mutex); + return false; + } + + if (crypt_data != NULL || fil_crypt_start_converting) { + /* someone beat us to it */ + if (fil_crypt_start_converting) { + recheck = true; + } + + mutex_exit(&fil_crypt_threads_mutex); + return recheck; + } + + /* NOTE: we need to write and flush page 0 before publishing + * the crypt data. This so that after restart there is no + * risk of finding encrypted pages without having + * crypt data in page 0 */ + + crypt_data = fil_space_create_crypt_data(FIL_ENCRYPTION_DEFAULT, get_global_default_encryption_key_id_value(), false); // TODO:Robert : zmiana na zero key_id - będzie to trzeba zmienić + + if (crypt_data == NULL || crypt_data->key_found == false) { + mutex_exit(&fil_crypt_threads_mutex); + return false; + } + + crypt_data->type = CRYPT_SCHEME_UNENCRYPTED; + crypt_data->min_key_version = ENCRYPTION_KEY_VERSION_NOT_ENCRYPTED; // all pages are unencrypted + crypt_data->rotate_state.start_time = time(0); + crypt_data->rotate_state.starting = true; + crypt_data->rotate_state.active_threads = 1; + + if (space->encryption_type == Encryption::AES) {// We are re-encrypting space from MK encryption to RK encryption + crypt_data->encryption_rotation = Encryption::MASTER_KEY_TO_KEYRING; + ut_ad(space->encryption_key != NULL && space->encryption_iv != NULL); + crypt_data->set_tablespace_key(space->encryption_key); + crypt_data->set_tablespace_iv(space->encryption_iv); //space key and encryption are always initalized for MK encrypted tables + } + + crypt_data->encrypting_with_key_version = crypt_data->key_get_latest_version(); + ut_ad(crypt_data->encrypting_with_key_version != 0 && crypt_data->encrypting_with_key_version != ENCRYPTION_KEY_VERSION_INVALID); + + if (crypt_data->key_found == false || crypt_data->load_needed_keys_into_local_cache() == false) { + // This should not happen, we have locked the keyring before encryption threads could have even started + // unless something realy strange have happend like removing keyring file from under running server. + ib::error() << "Encryption thread could not retrieve a key from a keyring for tablespace " << space->name + << " . Removing space from encrypting. Please make sure keyring is functional and try restarting the server"; + space->exclude_from_rotation = true; + mutex_exit(&fil_crypt_threads_mutex); + fil_space_destroy_crypt_data(&crypt_data); + return false; + } + mutex_enter(&crypt_data->mutex); + crypt_data = fil_space_set_crypt_data(space, crypt_data); + mutex_exit(&crypt_data->mutex); + + space->encryption_type= Encryption::KEYRING; // This works like this - if Encryption::KEYRING is set - it means that + fil_crypt_start_converting = true; + mutex_exit(&fil_crypt_threads_mutex); + + do + { + mtr_t mtr; + mtr.start(); + mtr.set_named_space(space); + + /* 2 - get page 0 */ + + buf_block_t* block = buf_page_get_gen( + page_id_t(space->id, 0), page_size_t(space->flags), + RW_X_LATCH, NULL, BUF_GET, + __FILE__, __LINE__, + &mtr); + + /* 3 - write crypt data to page 0 */ + byte* frame = buf_block_get_frame(block); + crypt_data->type = CRYPT_SCHEME_1; + crypt_data->write_page0(space, frame, &mtr, crypt_data->min_key_version, crypt_data->type, crypt_data->encryption_rotation); + + mtr.commit(); + + /* 4 - sync tablespace before publishing crypt data */ + buf_flush_request_force(LSN_MAX); + buf_flush_wait_flushed(LSN_MAX); + + /* 5 - publish crypt data */ + mutex_enter(&fil_crypt_threads_mutex); + mutex_enter(&crypt_data->mutex); + crypt_data->type = CRYPT_SCHEME_1; + ut_a(crypt_data->rotate_state.active_threads == 1); + crypt_data->rotate_state.active_threads = 0; + crypt_data->rotate_state.starting = false; + + fil_crypt_start_converting = false; + mutex_exit(&crypt_data->mutex); + mutex_exit(&fil_crypt_threads_mutex); + + return recheck; + } while (0); + + mutex_enter(&crypt_data->mutex); + ut_a(crypt_data->rotate_state.active_threads == 1); + crypt_data->rotate_state.active_threads = 0; + mutex_exit(&crypt_data->mutex); + + mutex_enter(&fil_crypt_threads_mutex); + fil_crypt_start_converting = false; + mutex_exit(&fil_crypt_threads_mutex); + + return recheck; +} + +/** State of a rotation thread */ +struct rotate_thread_t { + explicit rotate_thread_t(uint no) { + memset(this, 0, sizeof(* this)); + thread_no = no; + first = true; + estimated_max_iops = 20; + } + + uint thread_no; + bool first; /*!< is position before first space */ + fil_space_t* space; /*!< current space or NULL */ + ulint offset; /*!< current offset */ + ulint batch; /*!< #pages to rotate */ + uint min_key_version_found;/*!< min key version found but not rotated */ + lsn_t end_lsn; /*!< max lsn when rotating this space */ + + uint estimated_max_iops; /*!< estimation of max iops */ + uint allocated_iops; /*!< allocated iops */ + ulint cnt_waited; /*!< #times waited during this slot */ + uintmax_t sum_waited_us; /*!< wait time during this slot */ + + fil_crypt_stat_t crypt_stat; // statistics + + /** @return whether this thread should terminate */ + bool should_shutdown() const { + switch (srv_shutdown_state) { + case SRV_SHUTDOWN_NONE: + return thread_no >= srv_n_fil_crypt_threads; + case SRV_SHUTDOWN_EXIT_THREADS: + /* srv_init_abort() must have been invoked */ + case SRV_SHUTDOWN_CLEANUP: + return true; + case SRV_SHUTDOWN_FLUSH_PHASE: + case SRV_SHUTDOWN_LAST_PHASE: + break; + } + ut_ad(0); + return true; + } +}; + +/*********************************************************************** +Check if space needs rotation given a key_state +@param[in,out] state Key rotation state +@param[in,out] key_state Key state +@param[in,out] recheck needs recheck ? +@return true if space needs key rotation */ +static +bool +fil_crypt_space_needs_rotation( + rotate_thread_t* state, + key_state_t* key_state, + bool* recheck) { + + fil_space_t* space = state->space; + + DBUG_EXECUTE_IF( + "rotate_only_first_100_pages_from_t1", + if (strcmp(space->name, "test/t1") == 0 && number_of_t1_pages_rotated >= 100) + return false; + ); + + /* Make sure that tablespace is normal tablespace */ + if (space->purpose != FIL_TYPE_TABLESPACE && space->purpose != FIL_TYPE_TEMPORARY) { + return false; + } + + ut_ad(space->n_pending_ops > 0); + + fil_space_crypt_t *crypt_data = space->crypt_data; + + if (crypt_data == NULL) { + /** + * space has no crypt data + * start encrypting it... + */ + key_state->key_id= get_global_default_encryption_key_id_value(); + + *recheck = fil_crypt_start_encrypting_space(space); + crypt_data = space->crypt_data; + + if (crypt_data == NULL) { + return false; + } + + key_state->key_version = crypt_data->encrypting_with_key_version; + } + + /* If used key_id is not found from encryption plugin we can't + continue to rotate the tablespace */ + if (!crypt_data->is_key_found()) { + return false; + } + + mutex_enter(&crypt_data->mutex); + + do { + /* prevent threads from starting to rotate space */ + if (crypt_data->rotate_state.starting) { + /* recheck this space later */ + *recheck = true; + break; + } + + /* prevent threads from starting to rotate space */ + if (space->is_stopping()) { + break; + } + + if (crypt_data->rotate_state.flushing) { + break; + } + + /* No need to rotate space if encryption is disabled */ + if (crypt_data->not_encrypted()) { + break; + } + + if (crypt_data->key_id != key_state->key_id) { + key_state->key_id= crypt_data->key_id; + fil_crypt_get_key_state(key_state, crypt_data); + } + + bool need_key_rotation = fil_crypt_needs_rotation( + crypt_data->encryption, + crypt_data->min_key_version, + key_state->key_version, key_state->rotate_key_age); + + if (need_key_rotation && crypt_data->rotate_state.active_threads > 0 && + crypt_data->rotate_state.next_offset > crypt_data->rotate_state.max_offset) { + break; // the space is already being processed and there are no more pages to rotate + } + + crypt_data->rotate_state.scrubbing.is_active = false; + + if (need_key_rotation == false) { + break; + } + + mutex_exit(&crypt_data->mutex); + + return true; + } while (0); + + mutex_exit(&crypt_data->mutex); + + return false; +} + +/*********************************************************************** +Update global statistics with thread statistics +@param[in,out] state key rotation statistics */ +static void +fil_crypt_update_total_stat( + rotate_thread_t *state) { + + mutex_enter(&crypt_stat_mutex); + crypt_stat.pages_read_from_cache += + state->crypt_stat.pages_read_from_cache; + crypt_stat.pages_read_from_disk += + state->crypt_stat.pages_read_from_disk; + crypt_stat.pages_modified += state->crypt_stat.pages_modified; + crypt_stat.pages_flushed += state->crypt_stat.pages_flushed; + // remote old estimate + crypt_stat.estimated_iops -= state->crypt_stat.estimated_iops; + // add new estimate + crypt_stat.estimated_iops += state->estimated_max_iops; + mutex_exit(&crypt_stat_mutex); + + // make new estimate "current" estimate + memset(&state->crypt_stat, 0, sizeof(state->crypt_stat)); + // record our old (current) estimate + state->crypt_stat.estimated_iops = state->estimated_max_iops; +} + +/*********************************************************************** +Allocate iops to thread from global setting, +used before starting to rotate a space. +@param[in,out] state Rotation state +@return true if allocation succeeded, false if failed */ +static +bool +fil_crypt_alloc_iops( + rotate_thread_t *state) { + + ut_ad(state->allocated_iops == 0); + + /* We have not yet selected the space to rotate, thus + state might not contain space and we can't check + its status yet. */ + + uint max_iops = state->estimated_max_iops; + mutex_enter(&fil_crypt_threads_mutex); + + if (n_fil_crypt_iops_allocated >= srv_n_fil_crypt_iops) { + /* this can happen when user decreases srv_fil_crypt_iops */ + mutex_exit(&fil_crypt_threads_mutex); + return false; + } + + uint alloc = srv_n_fil_crypt_iops - n_fil_crypt_iops_allocated; + + if (alloc > max_iops) { + alloc = max_iops; + } + + n_fil_crypt_iops_allocated += alloc; + mutex_exit(&fil_crypt_threads_mutex); + + state->allocated_iops = alloc; + + return alloc > 0; +} + +/*********************************************************************** +Reallocate iops to thread, +used when inside a space +@param[in,out] state Rotation state */ +static +void +fil_crypt_realloc_iops( + rotate_thread_t *state) { + + ut_a(state->allocated_iops > 0); + + if (10 * state->cnt_waited > state->batch) { + /* if we waited more than 10% re-estimate max_iops */ + ulint avg_wait_time_us = + ulint(state->sum_waited_us / state->cnt_waited); + + if (avg_wait_time_us == 0) { + avg_wait_time_us = 1; // prevent division by zero + } + + DBUG_PRINT("ib_crypt", + ("thr_no: %u - update estimated_max_iops from %u to " + ULINTPF ".", + state->thread_no, + state->estimated_max_iops, + 1000000 / avg_wait_time_us)); + + state->estimated_max_iops = uint(1000000 / avg_wait_time_us); + state->cnt_waited = 0; + state->sum_waited_us = 0; + } else { + DBUG_PRINT("ib_crypt", + ("thr_no: %u only waited " ULINTPF + "%% skip re-estimate.", + state->thread_no, + (100 * state->cnt_waited) + / (state->batch ? state->batch : 1))); + } + + if (state->estimated_max_iops <= state->allocated_iops) { + /* return extra iops */ + uint extra = state->allocated_iops - state->estimated_max_iops; + + if (extra > 0) { + mutex_enter(&fil_crypt_threads_mutex); + if (n_fil_crypt_iops_allocated < extra) { + /* unknown bug! + * crash in debug + * keep n_fil_crypt_iops_allocated unchanged + * in release */ + ut_ad(0); + extra = 0; + } + n_fil_crypt_iops_allocated -= extra; + state->allocated_iops -= extra; + + if (state->allocated_iops == 0) { + /* no matter how slow io system seems to be + * never decrease allocated_iops to 0... */ + state->allocated_iops ++; + n_fil_crypt_iops_allocated ++; + } + + os_event_set(fil_crypt_threads_event); + mutex_exit(&fil_crypt_threads_mutex); + } + } else { + /* see if there are more to get */ + mutex_enter(&fil_crypt_threads_mutex); + if (n_fil_crypt_iops_allocated < srv_n_fil_crypt_iops) { + /* there are extra iops free */ + uint extra = srv_n_fil_crypt_iops - + n_fil_crypt_iops_allocated; + if (state->allocated_iops + extra > + state->estimated_max_iops) { + /* but don't alloc more than our max */ + extra = state->estimated_max_iops - + state->allocated_iops; + } + n_fil_crypt_iops_allocated += extra; + state->allocated_iops += extra; + + DBUG_PRINT("ib_crypt", + ("thr_no: %u increased iops from %u to %u.", + state->thread_no, + state->allocated_iops - extra, + state->allocated_iops)); + } + mutex_exit(&fil_crypt_threads_mutex); + } + + fil_crypt_update_total_stat(state); +} + +/*********************************************************************** +Return allocated iops to global +@param[in,out] state Rotation state */ +static +void +fil_crypt_return_iops( + rotate_thread_t *state) { + + if (state->allocated_iops > 0) { + uint iops = state->allocated_iops; + mutex_enter(&fil_crypt_threads_mutex); + if (n_fil_crypt_iops_allocated < iops) { + /* unknown bug! + * crash in debug + * keep n_fil_crypt_iops_allocated unchanged + * in release */ + ut_ad(0); + iops = 0; + } + + n_fil_crypt_iops_allocated -= iops; + state->allocated_iops = 0; + os_event_set(fil_crypt_threads_event); + mutex_exit(&fil_crypt_threads_mutex); + } + + fil_crypt_update_total_stat(state); +} + +/*********************************************************************** +Search for a space needing rotation +@param[in,out] key_state Key state +@param[in,out] state Rotation state +@param[in,out] recheck recheck ? */ +static +bool +fil_crypt_find_space_to_rotate( + key_state_t* key_state, + rotate_thread_t* state, + bool* recheck) { + + /* we need iops to start rotating */ + while (!state->should_shutdown() && !fil_crypt_alloc_iops(state)) { + os_event_reset(fil_crypt_threads_event); + os_event_wait_time(fil_crypt_threads_event, 100000); + } + + if (state->should_shutdown()) { + if (state->space) { + fil_space_release(state->space); + state->space = NULL; + } + return false; + } + + if (state->first) { + state->first = false; + if (state->space) { + fil_space_release(state->space); + } + state->space = NULL; + } + + /* If key rotation is enabled (default) we iterate all tablespaces. + If key rotation is not enabled we iterate only the tablespaces + added to keyrotation list. */ + if (srv_fil_crypt_rotate_key_age) { + state->space = fil_space_next(state->space); + } else { + state->space = fil_space_keyrotate_next(state->space); + } + + while (!state->should_shutdown() && state->space) { + /* If there is no crypt data and we have not yet read + page 0 for this tablespace, we need to read it before + we can continue. */ + fil_crypt_read_crypt_data(state->space); + + ut_ad(state->space->size); + + // if space is marked as encrytped this means some of the pages are encrypted and space should be skipped + // size must be set - i.e. tablespace has been read + if (!state->space->is_encrypted && !state->space->exclude_from_rotation && fil_crypt_space_needs_rotation(state, key_state, recheck)) { + ut_ad(key_state->key_id != ENCRYPTION_KEY_VERSION_INVALID); + /* init state->min_key_version_found before + * starting on a space */ + state->min_key_version_found = key_state->key_version; + + return true; + } + + if (srv_fil_crypt_rotate_key_age) { + state->space = fil_space_next(state->space); + } else { + state->space = fil_space_keyrotate_next(state->space); + } + } + + /* if we didn't find any space return iops */ + fil_crypt_return_iops(state); + + return false; +} + +/*********************************************************************** +Start rotating a space +@param[in] key_state Key state +@param[in,out] state Rotation state */ +static +bool +fil_crypt_start_rotate_space( + const key_state_t* key_state, + rotate_thread_t* state) { + + fil_space_crypt_t *crypt_data = state->space->crypt_data; + + ut_ad(crypt_data); + + mutex_enter(&crypt_data->start_rotate_mutex); + // flush observer needs to be created outside crypt_data->mutex; + // active threads is increased only in this function - thus once it's 0 under + // start_rotate_mutex it will stay 0. + if (crypt_data->rotate_state.active_threads == 0) + crypt_data->rotate_state.create_flush_observer(state->space->id); + + mutex_enter(&crypt_data->mutex); + ut_ad(key_state->key_id == crypt_data->key_id); + + if (crypt_data->rotate_state.active_threads == 0) { + + crypt_data->encrypting_with_key_version = key_state->key_version; + if (crypt_data->load_needed_keys_into_local_cache() == false) { + ib::error() << "Encryption thread could not retrieve a key from a keyring for tablespace " << state->space->name + << " . Removing space from encrypting. Please make sure keyring is functional and try restarting the server"; + state->space->exclude_from_rotation = true; + mutex_exit(&crypt_data->mutex); + mutex_exit(&crypt_data->start_rotate_mutex); + return false; + } + /* only first thread needs to init */ + crypt_data->rotate_state.next_offset = 1; // skip page 0 + /* no need to rotate beyond current max + * if space extends, it will be encrypted with newer version */ + + crypt_data->rotate_state.max_offset = state->space->size; + crypt_data->rotate_state.end_lsn = 0; + crypt_data->rotate_state.min_key_version_found = + key_state->key_version; + + crypt_data->rotate_state.start_time = time(0); + + crypt_data->rotate_state.create_flush_observer(state->space->id); + + if (crypt_data->type == CRYPT_SCHEME_UNENCRYPTED && + crypt_data->is_encrypted() && + key_state->key_version != ENCRYPTION_KEY_VERSION_NOT_ENCRYPTED) { + /* this is rotation unencrypted => encrypted */ + crypt_data->type = CRYPT_SCHEME_1; + } + } + + /* count active threads in space */ + crypt_data->rotate_state.active_threads++; + + /* Initialize thread local state */ + state->min_key_version_found = + crypt_data->rotate_state.min_key_version_found; + + mutex_exit(&crypt_data->mutex); + mutex_exit(&crypt_data->start_rotate_mutex); + return true; +} + +/*********************************************************************** +Search for batch of pages needing rotation +@param[in] key_state Key state +@param[in,out] state Rotation state +@return true if page needing key rotation found, false if not found */ +static +bool +fil_crypt_find_page_to_rotate( + const key_state_t* key_state, + rotate_thread_t* state) { + + ulint batch = srv_alloc_time * state->allocated_iops; + fil_space_t* space = state->space; + + ut_ad(!space || space->n_pending_ops > 0); + + /* If space is marked to be dropped stop rotation. */ + if (!space || space->is_stopping()) { + return false; + } + + fil_space_crypt_t *crypt_data = space->crypt_data; + + mutex_enter(&crypt_data->mutex); + ut_ad(key_state->key_id == crypt_data->key_id); + + bool found = crypt_data->rotate_state.max_offset >= + crypt_data->rotate_state.next_offset; + + if (found) { + state->offset = crypt_data->rotate_state.next_offset; + ulint remaining = crypt_data->rotate_state.max_offset - + crypt_data->rotate_state.next_offset; + + if (batch <= remaining) { + state->batch = batch; + } else { + state->batch = remaining; + } + } + + crypt_data->rotate_state.next_offset += batch; + mutex_exit(&crypt_data->mutex); + return found; +} + +#define fil_crypt_get_page_throttle(state,offset,mtr,sleeptime_ms) \ + fil_crypt_get_page_throttle_func(state, offset, mtr, \ + sleeptime_ms, __FILE__, __LINE__) + +/*********************************************************************** +Get a page and compute sleep time +@param[in,out] state Rotation state +@param[in] offset Page offset +@param[in,out] mtr Minitransaction +@param[out] sleeptime_ms Sleep time +@param[in] file File where called +@param[in] line Line where called +@return page or NULL*/ +static +buf_block_t* +fil_crypt_get_page_throttle_func( + rotate_thread_t* state, + ulint offset, + mtr_t* mtr, + ulint* sleeptime_ms, + const char* file, + unsigned line) { + + fil_space_t* space = state->space; + + const page_size_t page_size = page_size_t(space->flags); + const page_id_t page_id(space->id, offset); + ut_ad(space->n_pending_ops > 0); + + /* Before reading from tablespace we need to make sure that + the tablespace is not about to be dropped or truncated. */ + if (space->is_stopping()) { + return NULL; + } + + buf_block_t* block = buf_page_get_gen(page_id, page_size, RW_X_LATCH, + NULL, + BUF_PEEK_IF_IN_POOL, file, line, + mtr); + + if (block != NULL) { + /* page was in buffer pool */ + state->crypt_stat.pages_read_from_cache++; + return block; + } + + if (space->is_stopping()) { + return NULL; + } + + state->crypt_stat.pages_read_from_disk++; + + uintmax_t start = ut_time_us(NULL); + block = buf_page_get_gen(page_id, page_size, + RW_X_LATCH, + NULL, BUF_GET_POSSIBLY_FREED, + file, line, mtr); + uintmax_t end = ut_time_us(NULL); + + if (end < start) { + end = start; // safety... + } + + state->cnt_waited++; + state->sum_waited_us += (end - start); + + /* average page load */ + ulint add_sleeptime_ms = 0; + ulint avg_wait_time_us =ulint(state->sum_waited_us / state->cnt_waited); + ulint alloc_wait_us = 1000000 / state->allocated_iops; + + if (avg_wait_time_us < alloc_wait_us) { + /* we reading faster than we allocated */ + add_sleeptime_ms = (alloc_wait_us - avg_wait_time_us) / 1000; + } else { + /* if page load time is longer than we want, skip sleeping */ + } + + *sleeptime_ms += add_sleeptime_ms; + + return block; +} + +/*********************************************************************** +Rotate one page +@param[in,out] key_state Key state +@param[in,out] state Rotation state */ +static +void +fil_crypt_rotate_page( + const key_state_t* key_state, + rotate_thread_t* state) +{ + fil_space_t*space = state->space; + ulint space_id = space->id; + ulint offset = state->offset; + ulint sleeptime_ms = 0; + fil_space_crypt_t *crypt_data = space->crypt_data; + + ut_ad(space->n_pending_ops > 0); + ut_ad(offset > 0); + + /* In fil_crypt_thread where key rotation is done we have + acquired space and checked that this space is not yet + marked to be dropped. Similarly, in fil_crypt_find_page_to_rotate(). + Check here also to give DROP TABLE or similar a change. */ + if (space->is_stopping()) { + return; + } + + if (space_id == TRX_SYS_SPACE && offset == TRX_SYS_PAGE_NO) { + /* don't encrypt this as it contains address to dblwr buffer */ + return; + } + + mtr_t mtr; + mtr.start(); + mtr.set_log_mode(MTR_LOG_NO_REDO); // We do not need those pages to be redo log. Before we flush page 0, we make sure + // that all pages have been flushed to disk. If we fail to update page 0 we will rotate + // those pages again after restart - when encryption threads discover that there is work to do. + if (buf_block_t* block = fil_crypt_get_page_throttle(state, + offset, &mtr, + &sleeptime_ms)) { + + byte* frame = buf_block_get_frame(block); + + // We always assume that page needs to be encrypted with RK when rotating from MK encryption + // This might not be the case if the rotation was aborted (due to server crash) and some of the pages + // might be already encrypted with RK. We re-encrypt them anyways. We could be calculating post - encryption checksum + // here and decide based on them if the page is RK encrypted or MK encrypted, but this should be very rare case + // and some extra-re-encryption will do no harm - and we safe on calculating checksums in normal execution + // + // This is now also true for all the other encryption rotations + // + // We will rotate the pages from the begining if there was a crash + uint kv= space->crypt_data->encryption_rotation == Encryption::MASTER_KEY_TO_KEYRING + ? ENCRYPTION_KEY_VERSION_NOT_ENCRYPTED + : mach_read_from_4(frame + FIL_PAGE_ENCRYPTION_KEY_VERSION); + + if (space->is_stopping()) { + /* The tablespace is closing (in DROP TABLE or + TRUNCATE TABLE or similar): avoid further access */ + } else if (!*reinterpret_cast(FIL_PAGE_OFFSET + + frame)) { + /* It looks like this page was never + allocated. Because key rotation is accessing + pages in a pattern that is unlike the normal + B-tree and undo log access pattern, we cannot + invoke fseg_page_is_free() here, because that + could result in a deadlock. If we invoked + fseg_page_is_free() and released the + tablespace latch before acquiring block->lock, + then the fseg_page_is_free() information + could be stale already. */ + ut_ad(page_get_space_id(frame) == 0); + } else if (fil_crypt_needs_rotation( + crypt_data->encryption, + kv, crypt_data->encrypting_with_key_version, + key_state->rotate_key_age) + ) { + + mtr.set_named_space(space); + mtr.set_flush_observer(crypt_data->rotate_state.flush_observer); + + /* force rotation by dummy updating page */ + mlog_write_ulint(frame + FIL_PAGE_SPACE_ID, + space_id, MLOG_4BYTES, &mtr); + // assign key version to a page in a buffer - so it would not be rotated more times + mlog_write_ulint(frame + FIL_PAGE_ENCRYPTION_KEY_VERSION, crypt_data->encrypting_with_key_version, MLOG_4BYTES, &mtr); + + /* statistics */ + state->crypt_stat.pages_modified++; + } else { + if (crypt_data->is_encrypted()) { + if (kv == ENCRYPTION_KEY_VERSION_NOT_ENCRYPTED || kv < state->min_key_version_found) { + state->min_key_version_found = kv; + } + } + } + + mtr.commit(); + } else { + /* If block read failed mtr memo and log should be empty. */ + ut_ad(!mtr.has_modifications()); + ut_ad(!mtr.is_dirty()); + ut_ad(mtr.get_memo()->size() == 0); + ut_ad(mtr.get_log()->size() == 0); + mtr.commit(); + } + + if (sleeptime_ms) { + os_event_reset(fil_crypt_throttle_sleep_event); + os_event_wait_time(fil_crypt_throttle_sleep_event, + 1000 * sleeptime_ms); + } +} + +/*********************************************************************** +Rotate a batch of pages +@param[in,out] key_state Key state +@param[in,out] state Rotation state */ +static +void +fil_crypt_rotate_pages( + const key_state_t* key_state, + rotate_thread_t* state) { + + ulint space = state->space->id; + ulint end = std::min(state->offset + state->batch, + state->space->free_limit); + + ut_ad(state->space->n_pending_ops > 0); + + for (; state->offset < end && !state->space->is_encrypted; state->offset++) { + + /* we can't rotate pages in dblwr buffer as + * it's not possible to read those due to lots of asserts + * in buffer pool. + * + * However since these are only (short-lived) copies of + * real pages, they will be updated anyway when the + * real page is updated + */ + if (space == TRX_SYS_SPACE && + buf_dblwr_page_inside(state->offset)) { + continue; + } + + DBUG_EXECUTE_IF( + "rotate_only_first_100_pages_from_t1", + if (strcmp(state->space->name, "test/t1") == 0) { + //ib::error() << "rotate_only_first_100_pages_from_t1 is active" << '\n'; + if(number_of_t1_pages_rotated >= 100) { + state->offset = end; + return; + } else + ++number_of_t1_pages_rotated; + } + ); + + fil_crypt_rotate_page(key_state, state); + } +} + + +/******************************************************************//** +Callback that sets a hex formatted FTS table's flags2 in +SYS_TABLES. The flags is stored in MIX_LEN column. +@return FALSE if all OK */ +static +ibool +fts_set_encrypted_flag_for_table( + void* row, // in: sel_node_t* + void* user_arg) { // in: bool set/unset flag + + sel_node_t* node = static_cast(row); + dfield_t* dfield = que_node_get_val(node->select_list); + + ut_ad(dtype_get_mtype(dfield_get_type(dfield)) == DATA_INT); + ut_ad(dfield_get_len(dfield) == sizeof(ib_uint32_t)); + /* There should be at most one matching record. So the value + must be the default value. */ + ut_ad(mach_read_from_4(static_cast(user_arg)) + == ULINT32_UNDEFINED); + + ulint flags2 = mach_read_from_4( + static_cast(dfield_get_data(dfield))); + + flags2 |= DICT_TF2_ENCRYPTION; + + mach_write_to_4(static_cast(user_arg), flags2); + + return(FALSE); +} + +static +ibool +fts_unset_encrypted_flag_for_table( + void* row, // in: sel_node_t* + void* user_arg) { // in: bool set/unset flag + + sel_node_t* node = static_cast(row); + dfield_t* dfield = que_node_get_val(node->select_list); + + ut_ad(dtype_get_mtype(dfield_get_type(dfield)) == DATA_INT); + + ulint flags = mach_read_from_4( + static_cast(dfield_get_data(dfield))); + + flags &= ~DICT_TF2_ENCRYPTION; + mach_write_to_4(static_cast(user_arg), flags); + + return(FALSE); +} + +static +dberr_t +fts_update_encrypted_tables_flag( + trx_t* trx, /* in/out: transaction that + covers the update */ + table_id_t table_id, + bool set) { /* in: Table for which we want + to set the root table->flags2 */ + pars_info_t* info; + ib_uint32_t flags2; + + static const char sql[] = + "PROCEDURE UPDATE_ENCRYPTED_FLAG() IS\n" + "DECLARE FUNCTION my_func;\n" + "DECLARE CURSOR c IS\n" + " SELECT MIX_LEN" + " FROM SYS_TABLES" + " WHERE ID = :table_id FOR UPDATE;" + "\n" + "BEGIN\n" + "OPEN c;\n" + "WHILE 1 = 1 LOOP\n" + " FETCH c INTO my_func();\n" + " IF c % NOTFOUND THEN\n" + " EXIT;\n" + " END IF;\n" + "END LOOP;\n" + "UPDATE SYS_TABLES" + " SET MIX_LEN = :flags2" + " WHERE ID = :table_id;\n" + "CLOSE c;\n" + "END;\n"; + + flags2 = ULINT32_UNDEFINED; + + info = pars_info_create(); + + pars_info_add_ull_literal(info, "table_id", table_id); + pars_info_bind_int4_literal(info, "flags2", &flags2); + + pars_info_bind_function( + info, "my_func", set ? fts_set_encrypted_flag_for_table + : fts_unset_encrypted_flag_for_table, &flags2); + + if (trx_get_dict_operation(trx) == TRX_DICT_OP_NONE) { + trx_set_dict_operation(trx, TRX_DICT_OP_INDEX); + } + + dberr_t err = que_eval_sql(info, sql, false, trx); + + ut_a(flags2 != ULINT32_UNDEFINED); + + return(err); +} + +static +ibool +fts_unset_encrypted_flag_for_tablespace( + void* row, // in: sel_node_t* + void* user_arg) { // in: bool set/unset flag + + sel_node_t* node = static_cast(row); + dfield_t* dfield = que_node_get_val(node->select_list); + + ut_ad(dtype_get_mtype(dfield_get_type(dfield)) == DATA_INT); + ut_ad(dfield_get_len(dfield) == sizeof(ib_uint32_t)); + // There should be at most one matching record. So the value + // must be the default value. + ut_ad(mach_read_from_4(static_cast(user_arg)) + == ULINT32_UNDEFINED); + + ulint flags = mach_read_from_4( + static_cast(dfield_get_data(dfield))); + + flags &= ~(1U << FSP_FLAGS_POS_ENCRYPTION); + + mach_write_to_4(static_cast(user_arg), flags); + + return(FALSE); +} + +static +ibool +fts_set_encrypted_flag_for_tablespace( + void* row, // in: sel_node_t* + void* user_arg) { // in: bool set/unset flag + + sel_node_t* node = static_cast(row); + dfield_t* dfield = que_node_get_val(node->select_list); + + ut_ad(dtype_get_mtype(dfield_get_type(dfield)) == DATA_INT); + ut_ad(dfield_get_len(dfield) == sizeof(ib_uint32_t)); + // There should be at most one matching record. So the value + // must be the default value. + ut_ad(mach_read_from_4(static_cast(user_arg)) + == ULINT32_UNDEFINED); + + ulint flags = mach_read_from_4( + static_cast(dfield_get_data(dfield))); + + flags |= (1U << FSP_FLAGS_POS_ENCRYPTION); + + mach_write_to_4(static_cast(user_arg), flags); + + return(FALSE); +} + +static +ibool +read_table_id( +/*============*/ + void* row, /*!< in: sel_node_t* */ + void* user_arg) /*!< in: pointer to ib_vector_t */ +{ + ib_vector_t* tables_ids = static_cast(user_arg); + + sel_node_t* node = static_cast(row); + dfield_t* dfield = que_node_get_val(node->select_list); + + ut_ad(dfield_get_len(dfield) == 8); + + table_id_t *table_id = static_cast(ib_vector_push(tables_ids, NULL)); + + *table_id = mach_read_from_8(static_cast(dfield_get_data(dfield))); + + return(TRUE); +} + +static +dberr_t +fts_update_encrypted_flag_for_tablespace_sql( + trx_t* trx, // in/out: transaction that + // covers the update + ulint space_id, + bool set) { + + pars_info_t* info; + ib_uint32_t flags; + + static const char sql[] = + "PROCEDURE UPDATE_ENCRYPTED_FLAG() IS\n" + "DECLARE FUNCTION my_func;\n" + "DECLARE CURSOR c IS\n" + " SELECT FLAGS" + " FROM SYS_TABLESPACES" + " WHERE SPACE=:space_id FOR UPDATE;" + "\n" + "BEGIN\n" + "OPEN c;\n" + "WHILE 1 = 1 LOOP\n" + " FETCH c INTO my_func();\n" + " IF c % NOTFOUND THEN\n" + " EXIT;\n" + " END IF;\n" + "END LOOP;\n" + "UPDATE SYS_TABLESPACES" + " SET FLAGS=:flags" + " WHERE SPACE=:space_id;\n" + "CLOSE c;\n" + "END;\n"; + + flags = ULINT32_UNDEFINED; + + info = pars_info_create(); + + pars_info_add_int4_literal(info, "space_id", space_id); + pars_info_bind_int4_literal(info, "flags", &flags); + + pars_info_bind_function( + info, "my_func", set ? fts_set_encrypted_flag_for_tablespace + : fts_unset_encrypted_flag_for_tablespace, &flags); + + if (trx_get_dict_operation(trx) == TRX_DICT_OP_NONE) { // TODO:Robert - is this needed - I think not, they are not using it in + // fts_drop_orphaned tables for getting a list of tables + // może trx_set_dict_operation(trx, TRX_DICT_OP_TABLE); ? + trx_set_dict_operation(trx, TRX_DICT_OP_INDEX); + } + + dberr_t err = que_eval_sql(info, sql, false, trx); + + + ut_a(flags != ULINT32_UNDEFINED); + + if (flags == ULINT32_UNDEFINED) + return DB_ERROR; + + return(err); +} + +static +dberr_t +get_table_ids_in_space_sql( + trx_t* trx, // in/out: transaction that + fil_space_t *space, + ib_vector_t* tables_ids +) { + pars_info_t *info = pars_info_create(); + + static const char sql[] = + "PROCEDURE GET_TABLES_IDS() IS\n" + "DECLARE FUNCTION my_func;\n" + "DECLARE CURSOR c IS" + " SELECT ID" + " FROM SYS_TABLES" + " WHERE SPACE=:space_id;\n" + "BEGIN\n" + "\n" + "OPEN c;\n" + "WHILE 1 = 1 LOOP\n" + " FETCH c INTO my_func();\n" + " IF c % NOTFOUND THEN\n" + " EXIT;\n" + " END IF;\n" + "END LOOP;\n" + "CLOSE c;\n" + "END;\n"; + + pars_info_bind_function(info, "my_func", read_table_id, tables_ids); + pars_info_add_int4_literal(info, "space_id", space->id); + + dberr_t err = que_eval_sql(info, sql, false, trx); + + return(err); +} + +static +void +fil_revert_encryption_flag_updates(ib_vector_t* tables_ids_to_revert_if_error, bool set) { + + while (!ib_vector_is_empty(tables_ids_to_revert_if_error)) { + table_id_t *table_id = static_cast( + ib_vector_pop(tables_ids_to_revert_if_error)); + + dict_table_t *table = dict_table_open_on_id(*table_id, TRUE, + DICT_TABLE_OP_NORMAL); + + ut_ad(table != NULL); + + if (set) { + DICT_TF2_FLAG_SET(table, DICT_TF2_ENCRYPTION); + } else + DICT_TF2_FLAG_UNSET(table, DICT_TF2_ENCRYPTION); + + dict_table_close(table, TRUE, FALSE); + } +} + +class TransactionAndHeapGuard +{ +public: + TransactionAndHeapGuard(): + dict_operation_locked(false), + trx(NULL), + dict_sys_mutex_entered(false), + heap(NULL), + heap_alloc(NULL), + table_ids(NULL), + table_ids_to_revert(NULL), + do_rollback(true) + {} + + bool lock_x_dict_operation_lock(fil_space_t *space) { + ut_ad(!dict_operation_locked && trx == NULL && + !dict_sys_mutex_entered && heap == NULL && + heap_alloc == NULL && table_ids == NULL && + table_ids_to_revert == NULL); + + // This should only wait in rare cases + while (!rw_lock_x_lock_nowait(dict_operation_lock)) { + //os_thread_sleep(6000); + os_thread_sleep(6); + if (space->stop_new_ops) // space is about to be dropped + return false; // do not try to lock the DD + } + dict_operation_locked = true; + return true; + } + + bool allocate_trx() { + ut_ad(dict_operation_locked && trx == NULL && + !dict_sys_mutex_entered && heap == NULL && + heap_alloc == NULL && table_ids == NULL && + table_ids_to_revert == NULL); + + trx = trx_allocate_for_background(); + if(trx == NULL) + return false; + trx->op_info = "setting encrypted flag"; + trx->dict_operation_lock_mode = RW_X_LATCH; + return true; + } + + void enter_dict_sys_mutex() { + ut_ad(dict_operation_locked && trx != NULL && + !dict_sys_mutex_entered && heap == NULL && + heap_alloc == NULL && table_ids == NULL && + table_ids_to_revert == NULL); + + dict_mutex_enter_for_mysql(); + dict_sys_mutex_entered = true; + } + + bool create_heap() { + ut_ad(dict_operation_locked && trx != NULL && + dict_sys_mutex_entered && heap == NULL && + heap_alloc == NULL && table_ids == NULL && + table_ids_to_revert == NULL); + + // TODO: consider moving expensive operation out of dict_sys->mutex + heap = mem_heap_create(1024); + return heap != NULL; + } + + bool create_allocator() { + ut_ad(dict_operation_locked && trx != NULL && + dict_sys_mutex_entered && heap != NULL && + heap_alloc == NULL && table_ids == NULL && + table_ids_to_revert == NULL); + + heap_alloc = ib_heap_allocator_create(heap); + return heap_alloc != NULL; + } + + bool create_table_ids_vector() { + ut_ad(dict_operation_locked && trx != NULL && + dict_sys_mutex_entered && heap != NULL && + heap_alloc != NULL && table_ids == NULL && + table_ids_to_revert == NULL); + + table_ids = ib_vector_create(heap_alloc, sizeof(table_id_t), 128); + return table_ids != NULL; + } + + bool create_table_ids_to_revert_vector() { + ut_ad(dict_operation_locked && trx != NULL && + dict_sys_mutex_entered && heap != NULL && + heap_alloc != NULL && table_ids != NULL && + table_ids_to_revert == NULL); + + table_ids_to_revert = ib_vector_create(heap_alloc, sizeof(table_id_t), 128); + return table_ids_to_revert != NULL; + } + + bool is_table_ids_empty() const { + ut_ad(dict_operation_locked && trx != NULL && + dict_sys_mutex_entered && heap != NULL && + heap_alloc != NULL && table_ids != NULL && + table_ids_to_revert != NULL); + + return ib_vector_is_empty(table_ids); + } + + table_id_t pop_from_table_ids() { + ut_ad(table_ids != NULL); + + return *static_cast(ib_vector_pop(table_ids)); + } + + void push_to_table_ids_to_revert(table_id_t table_id) { + ut_ad(table_ids_to_revert != NULL); + + ib_vector_push(table_ids_to_revert, &table_id); + } + + trx_t* get_trx() { + ut_ad(trx != NULL); + return trx; + } + + ib_vector_t* get_table_ids() { + ut_ad(table_ids != NULL); + return table_ids; + } + + ib_vector_t* get_table_ids_to_revert() { + ut_ad(table_ids_to_revert != NULL); + return table_ids_to_revert; + } + + void commit() { + ut_ad(dict_operation_locked && trx != NULL && + dict_sys_mutex_entered && heap != NULL && + heap_alloc != NULL && table_ids != NULL && + table_ids_to_revert != NULL); + + fts_sql_commit(trx); + do_rollback = false; + } + + ~TransactionAndHeapGuard() { + if (trx && do_rollback) + fts_sql_rollback(trx); + + + /* + if (table_ids_to_revert != NULL) + ib_vector_free(table_ids_to_revert); + + if (table_ids != NULL) + ib_vector_free(table_ids); + + if (heap_alloc != NULL) + ib_heap_allocator_free(heap_alloc); + */ + + if (heap != NULL) + mem_heap_free(heap); + + if (dict_sys_mutex_entered) + dict_mutex_exit_for_mysql(); + + if (dict_operation_locked) { + rw_lock_x_unlock(dict_operation_lock); + trx->dict_operation_lock_mode = 0; + } + + if (trx != NULL) + trx_free_for_background(trx); + } + +private: + TransactionAndHeapGuard(const TransactionAndHeapGuard&); + TransactionAndHeapGuard& operator =(const TransactionAndHeapGuard&); + + bool dict_operation_locked; + trx_t* trx; + bool dict_sys_mutex_entered; + mem_heap_t* heap; + ib_alloc_t* heap_alloc; + ib_vector_t* table_ids; + ib_vector_t* table_ids_to_revert; + + bool do_rollback; +}; + + +static +dberr_t +fil_update_encrypted_flag(fil_space_t *space, bool set){ + // We are only modifying DD so the lock on DD is enough, we do not need + // lock on space + + //trx_t* trx_set_encrypted = trx_allocate_for_background(); + //TransactionAndHeapGuard transaction_and_heap_guard(trx_set_encrypted); + //trx_set_encrypted->op_info = "setting encrypted flag"; + + TransactionAndHeapGuard guard; + + if (!guard.lock_x_dict_operation_lock(space)) + return DB_SUCCESS; + + + if(!guard.allocate_trx()) + return DB_ERROR; + + guard.enter_dict_sys_mutex(); + + if (space->stop_new_ops) // space is about to be dropped + return DB_SUCCESS; + + if (!guard.create_heap()) + return DB_OUT_OF_MEMORY; + + if (!guard.create_allocator()) + return DB_OUT_OF_MEMORY; + + /* We store the table ids of all the FTS indexes that were found. */ + if(!guard.create_table_ids_vector()) + return DB_OUT_OF_MEMORY; + + dberr_t error = get_table_ids_in_space_sql(guard.get_trx(), space, + guard.get_table_ids()); + if (error != DB_SUCCESS) + return error; + + // First update tablespace's encryption flag + error = fts_update_encrypted_flag_for_tablespace_sql(guard.get_trx(), + space->id, set); + if (error != DB_SUCCESS) + return error; + + if (!guard.create_table_ids_to_revert_vector()) + return DB_OUT_OF_MEMORY; + + while (!guard.is_table_ids_empty()) + { + table_id_t table_id = guard.pop_from_table_ids(); + + // Update table's encryption flag + error = fts_update_encrypted_tables_flag(guard.get_trx(), + table_id, set); + + DBUG_EXECUTE_IF( + "fail_encryption_flag_update_on_t3", + dict_table_t* table = + dict_table_open_on_id(table_id, TRUE, + DICT_TABLE_OP_NORMAL); + + if (strcmp(table->name.m_name, "test/t3") == 0) + error = DB_ERROR; + dict_table_close(table, TRUE, FALSE); + ); + + if (error != DB_SUCCESS) + { + fil_revert_encryption_flag_updates( + guard.get_table_ids_to_revert(), !set); + return error; + } + + dict_table_t* table = dict_table_open_on_id(table_id, TRUE, + DICT_TABLE_OP_NORMAL); + + ut_ad(table != NULL); + + if (set) + { + //ib::error() << "Setting encryption for table " << table->name.m_name; + DICT_TF2_FLAG_SET(table, DICT_TF2_ENCRYPTION); + } + else + DICT_TF2_FLAG_UNSET(table, DICT_TF2_ENCRYPTION); + + + guard.push_to_table_ids_to_revert(table_id); + + dict_table_close(table, TRUE, FALSE); + } + + guard.commit(); + + return DB_SUCCESS; +} + +/*********************************************************************** +Flush rotated pages and then update page 0 + +@param[in,out] state rotation state */ +static +dberr_t +fil_crypt_flush_space( + rotate_thread_t* state) { + + fil_space_t* space = state->space; + fil_space_crypt_t *crypt_data = space->crypt_data; + + ut_ad(space->n_pending_ops > 0); + + /* flush tablespace pages so that there are no pages left with old key */ + + ulint number_of_pages_flushed_so_far = crypt_data->rotate_state.flush_observer->get_number_of_pages_flushed(); + + if (space->is_stopping()) { + crypt_data->rotate_state.destroy_flush_observer(); + return DB_SUCCESS; + } + + ulint number_of_pages_flushed_now = 0; + log_free_check(); + uintmax_t start = ut_time_us(NULL); + + crypt_data->rotate_state.flush_observer->flush(); + + uintmax_t end = ut_time_us(NULL); + + number_of_pages_flushed_now = crypt_data->rotate_state.flush_observer->get_number_of_pages_flushed() + - number_of_pages_flushed_so_far; + + if (number_of_pages_flushed_now > 0 && end > start) { + state->cnt_waited += number_of_pages_flushed_now; + state->sum_waited_us += (end - start); + + /* statistics */ + state->crypt_stat.pages_flushed += number_of_pages_flushed_now; + } + + crypt_data->rotate_state.destroy_flush_observer(); + + // We do not assign the type to crypt_data just yet. We do it after write_page0 so the in-memory crypt_data + // would be in sync with the crypt_data on disk + ut_ad(crypt_data->rotate_state.flushing); + + uint current_type = crypt_data->rotate_state.min_key_version_found == ENCRYPTION_KEY_VERSION_NOT_ENCRYPTED + ? CRYPT_SCHEME_UNENCRYPTED + : crypt_data->type; + + if (space->id != 0) { + + if (DB_SUCCESS != fil_update_encrypted_flag(space, current_type == CRYPT_SCHEME_UNENCRYPTED ? false : true)) { + ut_ad(DBUG_EVALUATE_IF("fail_encryption_flag_update_on_t3", 1, 0)); + return DB_ERROR; + } + + DBUG_EXECUTE_IF( + "crash_on_t1_flush_after_dd_update", + if (strcmp(state->space->name, "test/t1") == 0) + DBUG_ABORT(); + ); + + mutex_enter(&fil_system->mutex); + if (current_type == CRYPT_SCHEME_UNENCRYPTED) + space->flags &= ~(1U << FSP_FLAGS_POS_ENCRYPTION); + else + space->flags |= (1U << FSP_FLAGS_POS_ENCRYPTION); + + mutex_exit(&fil_system->mutex); // TODO:Robert - I am not sure if I need this mutex + + } + + /* update page 0 */ + mtr_t mtr; + mtr.start(); + + if (buf_block_t* block = buf_page_get_gen( + page_id_t(space->id, 0), page_size_t(space->flags), + RW_X_LATCH, NULL, BUF_GET, + __FILE__, __LINE__, &mtr)) { + mtr.set_named_space(space); + crypt_data->write_page0(space, block->frame, &mtr, crypt_data->rotate_state.min_key_version_found, current_type, + Encryption::NO_ROTATION); + } + + mtr.commit(); + return DB_SUCCESS; +} + +/*********************************************************************** +Complete rotating a space +@param[in,out] key_state Key state +@param[in,out] state Rotation state */ +static +void +fil_crypt_complete_rotate_space( + const key_state_t* key_state, + rotate_thread_t* state) { + + fil_space_crypt_t *crypt_data = state->space->crypt_data; + + ut_ad(crypt_data); + ut_ad(state->space->n_pending_ops > 0); + + /* Space might already be dropped */ + if (!state->space->is_stopping()) { + mutex_enter(&crypt_data->mutex); + + /** + * Update crypt data state with state from thread + */ + if (state->min_key_version_found == ENCRYPTION_KEY_VERSION_NOT_ENCRYPTED || state->min_key_version_found < + crypt_data->rotate_state.min_key_version_found) { + crypt_data->rotate_state.min_key_version_found = + state->min_key_version_found; + } + + ut_a(crypt_data->rotate_state.active_threads > 0); + bool last = crypt_data->rotate_state.active_threads - 1 == 0; + + /** + * check if space is fully done + * this as when threads shutdown, it could be that we "complete" + * iterating before we have scanned the full space. + */ + bool done = crypt_data->rotate_state.next_offset >= + crypt_data->rotate_state.max_offset; + + /** + * we should flush space if we're last thread AND + * the iteration is done + */ + bool should_flush = last && done; + + if (should_flush) { + /* we're the last active thread */ + ut_ad(crypt_data->rotate_state.flushing == false); + crypt_data->rotate_state.flushing = true; + crypt_data->set_tablespace_iv(NULL); + crypt_data->set_tablespace_key(NULL); + crypt_data->encryption_rotation = Encryption::NO_ROTATION; + + } + + /* In case we simulate only 100 pages being rotated - we stop ourselves from writting to page0. Pages should be + * flushed in mtr test with FLUSH FOR EXPORT - this will make sure that buffers will get flushed * + * In MTR we can check if we reached this point by checking flushing field - it should be 1 if we are here */ + DBUG_EXECUTE_IF( + "rotate_only_first_100_pages_from_t1", + if (strcmp(state->space->name, "test/t1") == 0 && number_of_t1_pages_rotated >= 100) + should_flush = false; + ); + + DBUG_EXECUTE_IF( + "crash_on_t1_flush_after_dd_update", + if (strcmp(state->space->name, "test/t1") == 0 && number_of_t1_pages_rotated >= 100) + should_flush = true; + ); + + /* inform scrubbing */ + crypt_data->rotate_state.scrubbing.is_active = false; + + mutex_exit(&crypt_data->mutex); + + if (should_flush) { + if (fil_crypt_flush_space(state) == DB_SUCCESS) { + uint current_type = crypt_data->rotate_state.min_key_version_found == ENCRYPTION_KEY_VERSION_NOT_ENCRYPTED + ? CRYPT_SCHEME_UNENCRYPTED + : crypt_data->type; + mutex_enter(&crypt_data->mutex); + crypt_data->min_key_version = crypt_data->rotate_state.min_key_version_found; + crypt_data->type = current_type; + crypt_data->rotate_state.flushing = false; + } else { + mutex_enter(&crypt_data->mutex); + crypt_data->rotate_state.flushing = false; + ib::error() << "Encryption thread failed to flush encryption information for tablespace " << state->space->name + << ". This should not happen and could indicate problem with OS or filesystem. Excluding " + << state->space->name << " from encryption rotation. " + << "You can try decrypting/encrypting with alter statement for this table or restarting the server."; + state->space->exclude_from_rotation = true; // This will stop encryption threads from picking up this tablespace for rotation + } + } + + if (!should_flush) // If we are flushing we have already optained the mutex + mutex_enter(&crypt_data->mutex); + + ut_a(crypt_data->rotate_state.active_threads > 0); + crypt_data->rotate_state.active_threads--; + mutex_exit(&crypt_data->mutex); + } else { + mutex_enter(&crypt_data->mutex); + ut_a(crypt_data->rotate_state.active_threads > 0); + crypt_data->rotate_state.active_threads--; + mutex_exit(&crypt_data->mutex); + } +} + +/*********************************************************************//** +A thread which monitors global key state and rotates tablespaces accordingly +@return a dummy parameter */ +extern "C" +os_thread_ret_t +DECLARE_THREAD(fil_crypt_thread)( +/*=============================*/ + void* arg __attribute__((unused))) { /*!< in: a dummy parameter required + * by os_thread_create */ + UT_NOT_USED(arg); + + my_thread_init(); + + /* TODO: Add this later */ +//#ifdef UNIV_PFS_THREAD + //pfs_register_thread(page_cleaner_thread_key); +//#endif + mutex_enter(&fil_crypt_threads_mutex); + uint thread_no = srv_n_fil_crypt_threads_started; + srv_n_fil_crypt_threads_started++; + os_event_set(fil_crypt_event); /* signal that we started */ + mutex_exit(&fil_crypt_threads_mutex); + + /* state of this thread */ + rotate_thread_t thr(thread_no); + + /* if we find a space that is starting, skip over it and recheck it later */ + bool recheck = false; + + while (!thr.should_shutdown()) { + + key_state_t new_state; + + while (!thr.should_shutdown()) { + + /* wait for key state changes + * i.e either new key version of change or + * new rotate_key_age */ + os_event_reset(fil_crypt_threads_event); + + if (os_event_wait_time(fil_crypt_threads_event, 1000000) == 0) { + break; + } + + if (recheck) { + /* check recheck here, after sleep, so + * that we don't busy loop while when one thread is starting + * a space*/ + break; + } + } + + recheck = false; + thr.first = true; // restart from first tablespace + + /* iterate all spaces searching for those needing rotation */ + while (!thr.should_shutdown() && + fil_crypt_find_space_to_rotate(&new_state, &thr, &recheck)) { + + bool rotation_started = fil_crypt_start_rotate_space(&new_state, &thr); + + /* we found a space to rotate */ + if (rotation_started) { + + /* iterate all pages (cooperativly with other threads) */ + while (!thr.should_shutdown() && + fil_crypt_find_page_to_rotate(&new_state, &thr)) { + + if (!thr.space->is_stopping()) { + /* rotate a (set) of pages */ + fil_crypt_rotate_pages(&new_state, &thr); + } + + if (thr.space->is_encrypted) { + /* There were some pages that were corrupted or could not have been + * decrypted - abort rotating space */ + fil_space_release(thr.space); + thr.space = NULL; + break; + } + + /* If space is marked as stopping, release + space and stop rotation. */ + if (thr.space->is_stopping()) { + fil_crypt_complete_rotate_space( + &new_state, &thr); + fil_space_release(thr.space); + thr.space = NULL; + break; + } + + /* realloc iops */ + fil_crypt_realloc_iops(&thr); + } + /* complete rotation */ + if (thr.space) { + fil_crypt_complete_rotate_space(&new_state, &thr); + } + } + + /* force key state refresh */ + new_state.key_id = (~0); // Marking key_id in new_state invalid - so it will have to be read from crypt_data + + /* return iops */ + fil_crypt_return_iops(&thr); + } + } + + /* return iops if shutting down */ + fil_crypt_return_iops(&thr); + + /* release current space if shutting down */ + if (thr.space) { + fil_space_release(thr.space); + thr.space = NULL; + } + + mutex_enter(&fil_crypt_threads_mutex); + srv_n_fil_crypt_threads_started--; + os_event_set(fil_crypt_event); /* signal that we stopped */ + mutex_exit(&fil_crypt_threads_mutex); + + /* We count the number of threads in os_thread_exit(). A created + thread should always use that to exit and not use return() to exit. */ + + my_thread_end(); + + os_thread_exit(); + + OS_THREAD_DUMMY_RETURN; +} + +/********************************************************************* +Adjust thread count for key rotation +@param[in] enw_cnt Number of threads to be used */ + +void +fil_crypt_set_thread_cnt( + const uint new_cnt) { + + if (!fil_crypt_threads_inited) { + fil_crypt_threads_init(); + } + + mutex_enter(&fil_crypt_threads_mutex); + + if (new_cnt > srv_n_fil_crypt_threads) { + uint add = new_cnt - srv_n_fil_crypt_threads; + srv_n_fil_crypt_threads = new_cnt; + for (uint i = 0; i < add; i++) { + os_thread_id_t rotation_thread_id; + os_thread_create(fil_crypt_thread, NULL, &rotation_thread_id); + ib::info() << "Creating #" + << i+1 << " encryption thread id " + << os_thread_pf(rotation_thread_id) + << " total threads " << new_cnt << "."; + } + } else if (new_cnt < srv_n_fil_crypt_threads) { + srv_n_fil_crypt_threads = new_cnt; + os_event_set(fil_crypt_threads_event); + } + + mutex_exit(&fil_crypt_threads_mutex); + + while(srv_n_fil_crypt_threads_started != srv_n_fil_crypt_threads) { + os_event_reset(fil_crypt_event); + os_event_wait_time(fil_crypt_event, 100000); + } + + /* Send a message to encryption threads that there could be + something to do. */ + if (srv_n_fil_crypt_threads) { + os_event_set(fil_crypt_threads_event); + } +} + +/********************************************************************* +Adjust max key age +@param[in] val New max key age */ + +void +fil_crypt_set_rotate_key_age( + uint val) { + srv_fil_crypt_rotate_key_age = val; + os_event_set(fil_crypt_threads_event); +} + +/********************************************************************* +Adjust rotation iops +@param[in] val New max roation iops */ + +void +fil_crypt_set_rotation_iops( + uint val) { + srv_n_fil_crypt_iops = val; + os_event_set(fil_crypt_threads_event); +} + +/********************************************************************* +Adjust encrypt tables +@param[in] val New setting for innodb-encrypt-tables */ + +void +fil_crypt_set_encrypt_tables( + uint val) { + srv_encrypt_tables = val; + os_event_set(fil_crypt_threads_event); +} + +/********************************************************************* +Init threads for key rotation */ + +void +fil_crypt_threads_init() { + if (!fil_crypt_threads_inited) { + fil_crypt_event = os_event_create(0); + fil_crypt_threads_event = os_event_create(0); + mutex_create(LATCH_ID_FIL_CRYPT_THREADS_MUTEX, + &fil_crypt_threads_mutex); + + uint cnt = srv_n_fil_crypt_threads; + srv_n_fil_crypt_threads = 0; + fil_crypt_threads_inited = true; + fil_crypt_set_thread_cnt(cnt); + } +} + +/********************************************************************* +Clean up key rotation threads resources */ + +void +fil_crypt_threads_cleanup() { + + if (!fil_crypt_threads_inited) { + return; + } + ut_a(!srv_n_fil_crypt_threads_started); + os_event_destroy(fil_crypt_event); + os_event_destroy(fil_crypt_threads_event); + mutex_free(&fil_crypt_threads_mutex); + fil_crypt_threads_inited = false; +} + +/********************************************************************* +Wait for crypt threads to stop accessing space +@param[in] space Tablespace */ + +void +fil_space_crypt_close_tablespace( + const fil_space_t* space) +{ + fil_space_crypt_t* crypt_data = space->crypt_data; + + if (!crypt_data) { + return; + } + + mutex_enter(&fil_crypt_threads_mutex); + + time_t start = time(0); + time_t last = start; + + mutex_enter(&crypt_data->mutex); + mutex_exit(&fil_crypt_threads_mutex); + + ulint cnt = crypt_data->rotate_state.active_threads; + bool flushing = crypt_data->rotate_state.flushing; + + while (cnt > 0 || flushing) { + mutex_exit(&crypt_data->mutex); + /* release dict mutex so that scrub threads can release their + * table references */ + dict_mutex_exit_for_mysql(); + + /* wakeup throttle (all) sleepers */ + os_event_set(fil_crypt_throttle_sleep_event); + + os_thread_sleep(20000); + dict_mutex_enter_for_mysql(); + + mutex_enter(&crypt_data->mutex); + cnt = crypt_data->rotate_state.active_threads; + flushing = crypt_data->rotate_state.flushing; + + time_t now = time(0); + + if (now >= last + 30) { + ib::warn() << "Waited " + << now - start + << " seconds to drop space: " + << space->name << " (" + << space->id << ") active threads " + << cnt << "flushing=" + << flushing << "."; + last = now; + } + } + + mutex_exit(&crypt_data->mutex); +} + +/********************************************************************* +Get crypt status for a space (used by information_schema) +@param[in] space Tablespace +@param[out] status Crypt status */ + +void +fil_space_crypt_get_status( + const fil_space_t* space, + struct fil_space_crypt_status_t* status) { + + memset(status, 0, sizeof(*status)); + + ut_ad(space->n_pending_ops > 0); + + /* If there is no crypt data and we have not yet read + page 0 for this tablespace, we need to read it before + we can continue. */ + if (!space->crypt_data) { + fil_crypt_read_crypt_data(const_cast(space)); + } + + status->space = ULINT_UNDEFINED; + + if (fil_space_crypt_t* crypt_data = space->crypt_data) { + status->space = space->id; + mutex_enter(&crypt_data->mutex); + status->scheme = crypt_data->type; + status->keyserver_requests = crypt_data->keyserver_requests; + status->min_key_version = crypt_data->min_key_version; + status->key_id= crypt_data->key_id; + + if (crypt_data->rotate_state.active_threads > 0 || + crypt_data->rotate_state.flushing) { + + status->rotating = true; + status->flushing = + crypt_data->rotate_state.flushing; + status->rotate_next_page_number = + crypt_data->rotate_state.next_offset; + status->rotate_max_page_number = + crypt_data->rotate_state.max_offset; + } + + mutex_exit(&crypt_data->mutex); + + if (is_online_encryption_on() || crypt_data->min_key_version != ENCRYPTION_KEY_VERSION_NOT_ENCRYPTED) { + status->current_key_version = + fil_crypt_get_latest_key_version(crypt_data); + } + } +} + +/********************************************************************* +Return crypt statistics +@param[out] stat Crypt statistics */ + +void +fil_crypt_total_stat( + fil_crypt_stat_t *stat) { + + mutex_enter(&crypt_stat_mutex); + *stat = crypt_stat; + mutex_exit(&crypt_stat_mutex); +} + +#endif /* UNIV_INNOCHECKSUM */ + +/****************************************************************** +Calculate post encryption checksum +@param[in] page_size page size +@param[in] dst_frame Block where checksum is calculated +@return page checksum +not needed. */ +uint32_t +fil_crypt_calculate_checksum( + const ulint page_size, + const byte* page, + const bool is_zip_compressed) { + + /* For encrypted tables we use only crc32 and strict_crc32 */ + return is_zip_compressed + ? page_zip_calc_checksum(page, page_size, + SRV_CHECKSUM_ALGORITHM_CRC32) // calculate for checksum + : buf_calc_page_crc32_encrypted_with_keyring(page, page_size); +} + +/** +Verify that post encryption checksum match calculated checksum. +This function should be called only if tablespace contains crypt_data +metadata (this is strong indication that tablespace is encrypted). +Function also verifies that traditional checksum does not match +calculated checksum as if it does page could be valid unencrypted, +encrypted, or corrupted. + +@param[in,out] page page frame (checksum is temporarily modified) +@param[in] page_size page size +@param[in] space tablespace identifier +@param[in] offset page number +@return true if page is encrypted AND OK, false otherwise */ +bool +fil_space_verify_crypt_checksum( + byte* page, + ulint page_size, + bool is_zip_compressed, + bool is_new_schema_compressed, + ulint offset) { + + + if (is_new_schema_compressed) { + page_size = static_cast(mach_read_from_2(page + FIL_PAGE_COMPRESS_SIZE_V1)); + } + + /* Read stored post encryption checksum. */ + uint32_t checksum = 0; + if (is_new_schema_compressed) { + checksum = mach_read_from_4(page + FIL_PAGE_DATA); + memset(page + FIL_PAGE_DATA, 0, 4); // those bits were 0s before the checksum was calcualted thus -- need to calculate checksum with those + } else if (!is_zip_compressed) { + // page_size can be smaller than UNIV_PAGE_SIZE for row compressed tables + checksum = mach_read_from_4(page + page_size - 4); + } else if (is_zip_compressed) { + checksum = mach_read_from_4(page + FIL_PAGE_LSN + 4); + } + + uint32 cchecksum1, cchecksum2; + + /* Calculate checksums */ + if (is_zip_compressed) { + cchecksum1 = page_zip_calc_checksum( + page, page_size, + SRV_CHECKSUM_ALGORITHM_CRC32); + + cchecksum2 = (cchecksum1 == checksum) + ? 0 + : page_zip_calc_checksum( + page, page_size, + SRV_CHECKSUM_ALGORITHM_INNODB); + } else { + cchecksum1 = buf_calc_page_crc32_encrypted_with_keyring(page, page_size); + cchecksum2 = (cchecksum1 == checksum) + ? 0 + : buf_calc_page_new_checksum(page); + } + + if (is_new_schema_compressed) + mach_write_to_4(page + FIL_PAGE_DATA, checksum); + + bool encrypted = (checksum == cchecksum1 || checksum == cchecksum2 + || checksum == BUF_NO_CHECKSUM_MAGIC); + + return(encrypted); +} diff --git a/storage/innobase/fil/fil0fil.cc b/storage/innobase/fil/fil0fil.cc index 0b306a6ba421..2669bb9a5ee9 100644 --- a/storage/innobase/fil/fil0fil.cc +++ b/storage/innobase/fil/fil0fil.cc @@ -24,6 +24,7 @@ Created 10/25/1995 Heikki Tuuri *******************************************************/ #include "ha_prototypes.h" +#include "fil0crypt.h" #ifndef UNIV_HOTBACKUP #include "btr0btr.h" @@ -55,6 +56,11 @@ Created 10/25/1995 Heikki Tuuri #include "btr0sea.h" #include "log0log.h" +#include "system_key.h" + + +extern uint srv_n_fil_crypt_threads; + /** Tries to close a file in the LRU list. The caller must hold the fil_sys mutex. @return true if success, false if should retry later; since i/o's @@ -151,63 +157,13 @@ ulint fil_n_file_opened = 0; /** The null file address */ fil_addr_t fil_addr_null = {FIL_NULL, 0}; -/** The tablespace memory cache; also the totality of logs (the log -data space) is stored here; below we talk about tablespaces, but also -the ib_logfiles form a 'space' and it is handled here */ -struct fil_system_t { -#ifndef UNIV_HOTBACKUP - ib_mutex_t mutex; /*!< The mutex protecting the cache */ -#endif /* !UNIV_HOTBACKUP */ - hash_table_t* spaces; /*!< The hash table of spaces in the - system; they are hashed on the space - id */ - hash_table_t* name_hash; /*!< hash table based on the space - name */ - UT_LIST_BASE_NODE_T(fil_node_t) LRU; - /*!< base node for the LRU list of the - most recently used open files with no - pending i/o's; if we start an i/o on - the file, we first remove it from this - list, and return it to the start of - the list when the i/o ends; - log files and the system tablespace are - not put to this list: they are opened - after the startup, and kept open until - shutdown */ - UT_LIST_BASE_NODE_T(fil_space_t) unflushed_spaces; - /*!< base node for the list of those - tablespaces whose files contain - unflushed writes; those spaces have - at least one file node where - modification_counter > flush_counter */ - ulint n_open; /*!< number of files currently open */ - ulint max_n_open; /*!< n_open is not allowed to exceed - this */ - int64_t modification_counter;/*!< when we write to a file we - increment this by one */ - ulint max_assigned_id;/*!< maximum space id in the existing - tables, or assigned during the time - mysqld has been up; at an InnoDB - startup we scan the data dictionary - and set here the maximum of the - space id's of the tables there */ - UT_LIST_BASE_NODE_T(fil_space_t) space_list; - /*!< list of all file spaces */ - UT_LIST_BASE_NODE_T(fil_space_t) named_spaces; - /*!< list of all file spaces - for which a MLOG_FILE_NAME - record has been written since - the latest redo log checkpoint. - Protected only by log_sys->mutex. */ - bool space_id_reuse_warned; - /* !< true if fil_space_create() - has issued a warning about - potential space_id reuse */ -}; - /** The tablespace memory cache. This variable is NULL before the module is initialized. */ -static fil_system_t* fil_system = NULL; +fil_system_t* fil_system = NULL; + +/** At this age or older a space/page will be rotated */ +extern uint srv_fil_crypt_rotate_key_age; +extern ib_mutex_t fil_crypt_threads_mutex; #ifdef UNIV_HOTBACKUP static ulint srv_data_read; @@ -775,11 +731,29 @@ fil_node_open_file( request, node->handle, page, 0, UNIV_PAGE_SIZE); + srv_stats.page0_read.add(1); space_id = fsp_header_get_space_id(page); flags = fsp_header_get_flags(page); /* Close the file now that we have read the space id from it */ + /* Try to read crypt_data from page 0 if it is not yet + read. */ + if (!space->crypt_data) { + space->crypt_data = fil_space_read_crypt_data( + page_size_t(space->flags), page); + + + if (space->crypt_data && fil_set_encryption(space->id, + Encryption::KEYRING, + NULL, + space->crypt_data->iv, + false) != DB_SUCCESS) { + ut_ad(0); + } + } + + os_file_close(node->handle); const page_size_t page_size(flags); @@ -814,10 +788,34 @@ fil_node_open_file( /* Validate the flags but do not compare the data directory flag, in case this tablespace was relocated. */ - const unsigned relevant_space_flags + unsigned relevant_space_flags = space->flags & ~FSP_FLAGS_MASK_DATA_DIR; - const unsigned relevant_flags + unsigned relevant_flags = flags & ~FSP_FLAGS_MASK_DATA_DIR; + + // in case of Keyring encryption it can so happen that there will be a crash after all pages of tablespace is rotated + // and DD is updated, but page0 of the tablespace has not been yet update. We handle this here. + if (space->crypt_data != NULL && + ( + (FSP_FLAGS_GET_ENCRYPTION(relevant_space_flags) && space->crypt_data->min_key_version == 0) || + (!FSP_FLAGS_GET_ENCRYPTION(relevant_space_flags) && space->crypt_data->min_key_version != 0) + ) && FSP_FLAGS_GET_ENCRYPTION(relevant_space_flags) != FSP_FLAGS_GET_ENCRYPTION(relevant_flags) + ) + { + if (srv_n_fil_crypt_threads == 0) + { + ib::warn() << "Table encryption flag is " << (FSP_FLAGS_GET_ENCRYPTION(relevant_space_flags) ? "ON" : "OFF") + << " in the data dictionary but the encryption flag in file " << node->name << " is " + << (FSP_FLAGS_GET_ENCRYPTION(relevant_flags) ? "ON" : "OFF") + << ". This indicates that the rotation of the table was interrupted before space's flags were updated." + << " Please have encryption_thread variable (innodb-encryption-threads) set to value > 0. So the encryption" + << " could finish up the rotation."; + } + // exclude encryption flag from validation + relevant_space_flags &= ~FSP_FLAGS_MASK_ENCRYPTION; + relevant_flags &= ~FSP_FLAGS_MASK_ENCRYPTION; + } + if (UNIV_UNLIKELY(relevant_space_flags != relevant_flags)) { ib::fatal() @@ -846,9 +844,9 @@ fil_node_open_file( ut_free(buf2); - /* For encrypted tablespace, we need to check the + /* For Master Key encrypted tablespace, we need to check the encrytion key and iv(initial vector) is readed. */ - if (FSP_FLAGS_GET_ENCRYPTION(flags) + if (FSP_FLAGS_GET_ENCRYPTION(flags) && !space->crypt_data && !recv_recovery_is_on()) { if (space->encryption_type != Encryption::AES) { ib::error() @@ -859,6 +857,16 @@ fil_node_open_file( } } + if (space->crypt_data && space->crypt_data->type == CRYPT_SCHEME_1 && + Encryption::tablespace_key_exists(space->crypt_data->key_id) == false && + !recv_recovery_is_on()) { + ib::error() << "There is no key for tablespace " << space->name; + return (false); + } + + + + if (node->size == 0) { ulint extent_size; @@ -1216,6 +1224,12 @@ fil_space_detach( UT_LIST_REMOVE(fil_system->unflushed_spaces, space); } + if (space->is_in_rotation_list) { + space->is_in_rotation_list = false; + + UT_LIST_REMOVE(fil_system->rotation_list, space); + } + UT_LIST_REMOVE(fil_system->space_list, space); ut_a(space->magic_n == FIL_SPACE_MAGIC_N); @@ -1240,6 +1254,13 @@ fil_space_free_low( /* The tablespace must not be in fil_system->named_spaces. */ ut_ad(srv_fast_shutdown == 2 || space->max_lsn == 0); + /* Wait for fil_space_t::release_for_io(); after + fil_space_detach(), the tablespace cannot be found, so + fil_space_acquire_for_io() would return NULL */ + while (space->n_pending_ios) { + os_thread_sleep(100); + } + for (fil_node_t* node = UT_LIST_GET_FIRST(space->chain); node != NULL; ) { ut_d(space->size -= node->size); @@ -1253,6 +1274,7 @@ fil_space_free_low( ut_ad(space->size == 0); rw_lock_free(&space->latch); + fil_space_destroy_crypt_data(&space->crypt_data); ut_free(space->name); ut_free(space); @@ -1319,10 +1341,12 @@ Error messages are issued to the server log. @retval NULL on failure (such as when the same tablespace exists) */ fil_space_t* fil_space_create( - const char* name, - ulint id, - ulint flags, - fil_type_t purpose) + const char* name, + ulint id, + ulint flags, + fil_type_t purpose, + fil_space_crypt_t* crypt_data, + fil_encryption_t mode) { fil_space_t* space; @@ -1387,6 +1411,8 @@ fil_space_create( space->magic_n = FIL_SPACE_MAGIC_N; + space->crypt_data = crypt_data; + space->encryption_type = Encryption::NONE; rw_lock_create(fil_space_latch_key, &space->latch, SYNC_FSP); @@ -1404,6 +1430,10 @@ fil_space_create( space->is_corrupt = false; + space->is_encrypted = false; + + space->exclude_from_rotation = false; + UT_LIST_ADD_LAST(fil_system->space_list, space); if (id < SRV_LOG_SPACE_FIRST_ID && id > fil_system->max_assigned_id) { @@ -1411,7 +1441,24 @@ fil_space_create( fil_system->max_assigned_id = id; } - mutex_exit(&fil_system->mutex); + /* Inform key rotation that there could be something + to do */ + if (purpose == FIL_TYPE_TABLESPACE + && !srv_fil_crypt_rotate_key_age && fil_crypt_threads_event && + (mode == FIL_ENCRYPTION_ON || (mode == FIL_ENCRYPTION_DEFAULT && + srv_encrypt_tables == SRV_ENCRYPT_TABLES_KEYRING_ON ))) { + //srv_encrypt_tables && !FSP_FLAGS_GET_ENCRYPTION(space->flags)))) { + /* Key rotation is not enabled, need to inform background + encryption threads. */ + UT_LIST_ADD_LAST(fil_system->rotation_list, space); + space->is_in_rotation_list = true; + mutex_exit(&fil_system->mutex); + mutex_enter(&fil_crypt_threads_mutex); + os_event_set(fil_crypt_threads_event); + mutex_exit(&fil_crypt_threads_mutex); + } else { + mutex_exit(&fil_system->mutex); + } return(space); } @@ -1743,11 +1790,15 @@ fil_init( UT_LIST_INIT(fil_system->LRU, &fil_node_t::LRU); UT_LIST_INIT(fil_system->space_list, &fil_space_t::space_list); + UT_LIST_INIT(fil_system->rotation_list, &fil_space_t::rotation_list); + UT_LIST_INIT(fil_system->unflushed_spaces, &fil_space_t::unflushed_spaces); UT_LIST_INIT(fil_system->named_spaces, &fil_space_t::named_spaces); fil_system->max_n_open = max_n_open; + + fil_space_crypt_init(); } /*******************************************************************//** @@ -2037,6 +2088,181 @@ fil_space_release( space->n_pending_ops--; mutex_exit(&fil_system->mutex); } + +/** Acquire a tablespace for reading or writing a block, +when it could be dropped concurrently. +@param[in] id tablespace ID +@return the tablespace +@retval NULL if missing */ +fil_space_t* +fil_space_acquire_for_io(ulint id) +{ + mutex_enter(&fil_system->mutex); + + fil_space_t* space = fil_space_get_by_id(id); + + if (space) { + space->n_pending_ios++; + } + + mutex_exit(&fil_system->mutex); + + return(space); +} + +/** Release a tablespace acquired with fil_space_acquire_for_io(). +@param[in,out] space tablespace to release */ +void +fil_space_release_for_io(fil_space_t* space) +{ + mutex_enter(&fil_system->mutex); + ut_ad(space->magic_n == FIL_SPACE_MAGIC_N); + ut_ad(space->n_pending_ios > 0); + space->n_pending_ios--; + mutex_exit(&fil_system->mutex); +} + + +/** Return the next fil_space_t. +Once started, the caller must keep calling this until it returns NULL. +fil_space_acquire() and fil_space_t::release() are invoked here which +blocks a concurrent operation from dropping the tablespace. +@param[in] prev_space Pointer to the previous fil_space_t. +If NULL, use the first fil_space_t on fil_system.space_list. +@return pointer to the next fil_space_t. +@retval NULL if this was the last*/ +fil_space_t* +fil_space_next(fil_space_t* prev_space) +{ + fil_space_t* space=prev_space; + + mutex_enter(&fil_system->mutex); + + if (prev_space == NULL) { + space = UT_LIST_GET_FIRST(fil_system->space_list); + + /* We can trust that space is not NULL because at least the + system tablespace is always present and loaded first. */ + space->n_pending_ops++; + space->n_pending_ops_from_space_list++; + } + + if (prev_space != NULL ) { + ut_ad(space->n_pending_ops > 0); + + /* Move on to the next fil_space_t */ + space->n_pending_ops--; + space->n_pending_ops_from_space_list--; + space = UT_LIST_GET_NEXT(space_list, space); + + /* Skip spaces that are being created by + fil_ibd_create(), or dropped, or !tablespace. */ + while (space != NULL + && (UT_LIST_GET_LEN(space->chain) == 0 + || space->is_stopping() + || space->purpose != FIL_TYPE_TABLESPACE) + ) { + space = UT_LIST_GET_NEXT(space_list, space); + } + + if (space != NULL) { + space->n_pending_ops++; + space->n_pending_ops_from_space_list++; + } + } + + mutex_exit(&fil_system->mutex); + + return(space); +} + +/** +Remove space from key rotation list if there are no more +pending operations. +@param[in] space Tablespace */ +static +void +fil_space_remove_from_keyrotation( + fil_space_t* space) +{ + ut_ad(mutex_own(&fil_system->mutex)); + ut_ad(space); + + if (space->n_pending_ops == 0 && space->is_in_rotation_list) { + space->is_in_rotation_list = false; + ut_a(UT_LIST_GET_LEN(fil_system->rotation_list) > 0); + UT_LIST_REMOVE(fil_system->rotation_list, space); + } +} + +/** Return the next fil_space_t from key rotation list. +Once started, the caller must keep calling this until it returns NULL. +fil_space_acquire() and fil_space_release() are invoked here which +blocks a concurrent operation from dropping the tablespace. +@param[in] prev_space Pointer to the previous fil_space_t. +If NULL, use the first fil_space_t on fil_system->space_list. +@return pointer to the next fil_space_t. +@retval NULL if this was the last*/ +fil_space_t* +fil_space_keyrotate_next( + fil_space_t* prev_space) +{ + fil_space_t* space = prev_space; + fil_space_t* old = NULL; + + mutex_enter(&fil_system->mutex); + + if (UT_LIST_GET_LEN(fil_system->rotation_list) == 0) { + if (space) { + ut_ad(space->n_pending_ops > 0); + space->n_pending_ops--; + fil_space_remove_from_keyrotation(space); + } + mutex_exit(&fil_system->mutex); + return(NULL); + } + + if (prev_space == NULL) { + space = UT_LIST_GET_FIRST(fil_system->rotation_list); + + /* We can trust that space is not NULL because we + checked list length above */ + } else { + ut_ad(space->n_pending_ops > 0); + + /* Move on to the next fil_space_t */ + space->n_pending_ops--; + + old = space; + space = UT_LIST_GET_NEXT(rotation_list, space); + + fil_space_remove_from_keyrotation(old); + } + + /* Skip spaces that are being created by fil_ibd_create(), + or dropped or truncated. Note that rotation_list contains only + space->purpose == FIL_TYPE_TABLESPACE. */ + while (space != NULL + && (UT_LIST_GET_LEN(space->chain) == 0 + || space->is_stopping() + //|| space_should_not_be_rotated(space) + )) { + + old = space; + space = UT_LIST_GET_NEXT(rotation_list, space); + fil_space_remove_from_keyrotation(old); + } + + if (space != NULL) { + space->n_pending_ops++; + } + + mutex_exit(&fil_system->mutex); + + return(space); +} + + #endif /* !UNIV_HOTBACKUP */ /********************************************************//** @@ -2563,7 +2789,7 @@ fil_check_pending_ops( ib::warn() << "Trying to close/delete/truncate" " tablespace '" << space->name << "' but there are " << n_pending_ops - << " pending operations on it."; + << " pending operations on it." << " n_pending_ops_from_space_list= " << space->n_pending_ops_from_space_list; } return(count + 1); @@ -2645,14 +2871,19 @@ fil_check_pending_operations( fil_space_t* sp = fil_space_get_by_id(id); if (sp) { sp->stop_new_ops = true; + if (sp->crypt_data) { + sp->n_pending_ops++; + mutex_exit(&fil_system->mutex); + fil_space_crypt_close_tablespace(sp); + mutex_enter(&fil_system->mutex); + ut_ad(sp->n_pending_ops > 0); + sp->n_pending_ops--; + } } - mutex_exit(&fil_system->mutex); /* Check for pending operations. */ do { - mutex_enter(&fil_system->mutex); - sp = fil_space_get_by_id(id); count = fil_check_pending_ops(sp, count); @@ -2663,6 +2894,8 @@ fil_check_pending_operations( os_thread_sleep(20000); } + mutex_enter(&fil_system->mutex); + } while (count > 0); /* Check for pending IO. */ @@ -2670,8 +2903,6 @@ fil_check_pending_operations( *path = 0; do { - mutex_enter(&fil_system->mutex); - sp = fil_space_get_by_id(id); if (sp == NULL) { @@ -2689,10 +2920,13 @@ fil_check_pending_operations( mutex_exit(&fil_system->mutex); - if (count > 0) { - os_thread_sleep(20000); + if (count == 0) { + break; } + os_thread_sleep(20000); + mutex_enter(&fil_system->mutex); + } while (count > 0); ut_ad(sp); @@ -3528,7 +3762,9 @@ fil_ibd_create( const char* name, const char* path, ulint flags, - ulint size) + ulint size, + fil_encryption_t mode, + const CreateInfoEncryptionKeyId &create_info_encryption_key_id) { pfs_os_file_t file; dberr_t err; @@ -3539,6 +3775,7 @@ fil_ibd_create( bool has_data_dir = FSP_FLAGS_HAS_DATA_DIR(flags); bool has_shared_space = FSP_FLAGS_GET_SHARED(flags); fil_space_t* space = NULL; + fil_space_crypt_t *crypt_data = NULL; ut_ad(!is_shared_system_tablespace(space_id)); ut_ad(!srv_read_only_mode); @@ -3758,8 +3995,22 @@ fil_ibd_create( } } #endif /* !UNIV_HOTBACKUP */ - space = fil_space_create(name, space_id, flags, is_temp - ? FIL_TYPE_TEMPORARY : FIL_TYPE_TABLESPACE); + + /* Create crypt data if the tablespace is either encrypted or user has + requested it to remain unencrypted. */ + if (mode == FIL_ENCRYPTION_ON || mode == FIL_ENCRYPTION_OFF + || (srv_encrypt_tables == SRV_ENCRYPT_TABLES_ONLINE_TO_KEYRING || create_info_encryption_key_id.was_encryption_key_id_set)) { + crypt_data = fil_space_create_crypt_data(mode, + create_info_encryption_key_id.encryption_key_id); + + if (crypt_data->should_encrypt() || create_info_encryption_key_id.was_encryption_key_id_set) { + crypt_data->encrypting_with_key_version = crypt_data->key_get_latest_version(); + crypt_data->load_needed_keys_into_local_cache(); + } + } + + space = fil_space_create(name, space_id, flags, is_temp ? FIL_TYPE_TEMPORARY : FIL_TYPE_TABLESPACE, + crypt_data, mode); DEBUG_SYNC_C("fil_ibd_created_space"); @@ -3771,11 +4022,15 @@ fil_ibd_create( } /* For encryption tablespace, initial encryption information. */ - if (FSP_FLAGS_GET_ENCRYPTION(space->flags)) { + if (FSP_FLAGS_GET_ENCRYPTION(space->flags) || crypt_data) { err = fil_set_encryption(space->id, - Encryption::AES, + crypt_data != NULL + ? Encryption::KEYRING + : Encryption::AES, NULL, - NULL); + crypt_data != NULL + ? crypt_data->iv + : NULL); ut_ad(err == DB_SUCCESS); } @@ -3848,7 +4103,8 @@ fil_ibd_open( ulint id, ulint flags, const char* space_name, - const char* path_in) + const char* path_in, + Keyring_encryption_info &keyring_encryption_info) { dberr_t err = DB_SUCCESS; bool dict_filepath_same_as_default = false; @@ -3862,6 +4118,7 @@ fil_ibd_open( ulint tablespaces_found = 0; ulint valid_tablespaces_found = 0; bool for_import = (purpose == FIL_TYPE_IMPORT); + Datafile::ValidateOutput validate_output; ut_ad(!fix_dict || rw_lock_own(dict_operation_lock, RW_LOCK_X)); @@ -3986,17 +4243,29 @@ fil_ibd_open( /* Read and validate the first page of these three tablespace locations, if found. */ + valid_tablespaces_found += - (df_remote.validate_to_dd(id, flags, for_import) - == DB_SUCCESS) ? 1 : 0; + (validate_output = df_remote.validate_to_dd(id, flags, for_import)).error + == DB_SUCCESS ? 1 : 0; + + if (validate_output.keyring_encryption_info.page0_has_crypt_data) + keyring_encryption_info = validate_output.keyring_encryption_info; valid_tablespaces_found += - (df_default.validate_to_dd(id, flags, for_import) - == DB_SUCCESS) ? 1 : 0; + (validate_output = df_default.validate_to_dd(id, flags, for_import)).error + == DB_SUCCESS ? 1 : 0; + + if (validate_output.error == DB_SUCCESS || + (valid_tablespaces_found == 0 && validate_output.keyring_encryption_info.page0_has_crypt_data)) + keyring_encryption_info = validate_output.keyring_encryption_info; valid_tablespaces_found += - (df_dict.validate_to_dd(id, flags, for_import) - == DB_SUCCESS) ? 1 : 0; + (validate_output = df_dict.validate_to_dd(id, flags, for_import)).error + == DB_SUCCESS ? 1 : 0; + + if (validate_output.error == DB_SUCCESS || + (valid_tablespaces_found == 0 && validate_output.keyring_encryption_info.page0_has_crypt_data)) + keyring_encryption_info = validate_output.keyring_encryption_info; /* Make sense of these three possible locations. First, bail out if no tablespace files were found. */ @@ -4166,8 +4435,20 @@ fil_ibd_open( skip_validate: if (err == DB_SUCCESS) { + fil_space_crypt_t* crypt_data = NULL; + + const byte* first_page = + df_default.is_open() ? df_default.get_first_page() : + df_dict.is_open() ? df_dict.get_first_page() : + df_remote.get_first_page(); + + crypt_data = first_page + ? fil_space_read_crypt_data(page_size_t(flags), + first_page) + : NULL; + fil_space_t* space = fil_space_create( - space_name, id, flags, purpose); + space_name, id, flags, purpose, crypt_data); /* We do not measure the size of the file, that is why we pass the 0 below */ @@ -4183,7 +4464,8 @@ fil_ibd_open( /* For encryption tablespace, initialize encryption information.*/ - if (err == DB_SUCCESS && is_encrypted && !for_import) { + if (err == DB_SUCCESS) { + if (is_encrypted && !for_import && crypt_data == NULL) { Datafile& df_current = df_remote.is_open() ? df_remote: df_dict.is_open() ? df_dict : df_default; @@ -4192,9 +4474,20 @@ fil_ibd_open( byte* iv = df_current.m_encryption_iv; ut_ad(key && iv); - err = fil_set_encryption(space->id, Encryption::AES, - key, iv); + err = fil_set_encryption(space->id, + Encryption::AES, + key, + iv); + ut_ad(err == DB_SUCCESS); + } else if (space->crypt_data) { + err = fil_set_encryption(space->id, + Encryption::KEYRING, + NULL, + space->crypt_data->iv); + + ut_ad(err == DB_SUCCESS); + } } } @@ -4340,7 +4633,7 @@ fil_ibd_discover( df_def_gen.init(basename, 0); df_def_gen.make_filepath(NULL, basename, IBD); if (df_def_gen.open_read_only(false) == DB_SUCCESS - && df_def_gen.validate_for_recovery() == DB_SUCCESS + && df_def_gen.validate_for_recovery().error == DB_SUCCESS && df_def_gen.space_id() == space_id) { df.set_filepath(df_def_gen.filepath()); df.open_read_only(false); @@ -4360,7 +4653,7 @@ fil_ibd_discover( df_def_per.init(db, 0); df_def_per.make_filepath(NULL, db, IBD); if (df_def_per.open_read_only(false) == DB_SUCCESS - && df_def_per.validate_for_recovery() == DB_SUCCESS + && df_def_per.validate_for_recovery().error == DB_SUCCESS && df_def_per.space_id() == space_id) { df.set_filepath(df_def_per.filepath()); df.open_read_only(false); @@ -4375,7 +4668,7 @@ fil_ibd_discover( /* An ISL file was found with contents. */ if (df_rem_gen.open_read_only(false) != DB_SUCCESS - || df_rem_gen.validate_for_recovery() != DB_SUCCESS) { + || df_rem_gen.validate_for_recovery().error != DB_SUCCESS) { /* Assume that this ISL file is intended to be used. Do not continue looking for another if this file @@ -4409,7 +4702,7 @@ fil_ibd_discover( /* An ISL file was found with contents. */ if (df_rem_per.open_read_only(false) != DB_SUCCESS - || df_rem_per.validate_for_recovery() + || df_rem_per.validate_for_recovery().error != DB_SUCCESS) { /* Assume that this ISL file is intended to @@ -4444,7 +4737,7 @@ fil_ibd_discover( /* No ISL files were found in the default location. Use the location given in the redo log. */ if (df.open_read_only(false) == DB_SUCCESS - && df.validate_for_recovery() == DB_SUCCESS + && df.validate_for_recovery().error == DB_SUCCESS && df.space_id() == space_id) { return(true); } @@ -4524,7 +4817,7 @@ fil_ibd_load( /* Read and validate the first page of the tablespace. Assign a tablespace name based on the tablespace type. */ - switch (file.validate_for_recovery()) { + switch (file.validate_for_recovery().error) { os_offset_t minimum_size; case DB_SUCCESS: if (file.space_id() != space_id) { @@ -4650,10 +4943,16 @@ fil_ibd_load( } #endif /* UNIV_HOTBACKUP */ + const byte* first_page = file.get_first_page(); + + fil_space_crypt_t *crypt_data = first_page + ? fil_space_read_crypt_data(page_size_t(file.flags()), first_page) + : NULL; + bool is_temp = FSP_FLAGS_GET_TEMPORARY(file.flags()); space = fil_space_create( file.name(), space_id, file.flags(), - is_temp ? FIL_TYPE_TEMPORARY : FIL_TYPE_TABLESPACE); + is_temp ? FIL_TYPE_TEMPORARY : FIL_TYPE_TABLESPACE, crypt_data); if (space == NULL) { return(FIL_LOAD_INVALID); @@ -4672,12 +4971,17 @@ fil_ibd_load( } /* For encryption tablespace, initial encryption information. */ - if (FSP_FLAGS_GET_ENCRYPTION(space->flags) - && file.m_encryption_key != NULL) { + if ((FSP_FLAGS_GET_ENCRYPTION(space->flags) + && file.m_encryption_key != NULL) + || crypt_data) { dberr_t err = fil_set_encryption(space->id, - Encryption::AES, + crypt_data + ? Encryption::KEYRING + : Encryption::AES, file.m_encryption_key, - file.m_encryption_iv); + crypt_data + ? crypt_data->iv + : file.m_encryption_iv); if (err != DB_SUCCESS) { ib::error() << "Can't set encryption information for" " tablespace " << space->name << "!"; @@ -5477,6 +5781,83 @@ fil_report_invalid_page_access( _exit(1); } +static bool set_min_key_version; +static byte key_min[32]; +inline +void +fil_io_set_keyring_encryption(IORequest& req_type, + fil_space_t *space, + const page_id_t& page_id) +{ + set_min_key_version= false; + ut_ad(space->crypt_data != NULL); + + byte* key = NULL; + ulint key_len = 32; //32*8=256 + byte* iv = NULL; + byte *tablespace_iv = NULL; + byte *tablespace_key = NULL; + uint key_version = 0; + uint key_id = FIL_DEFAULT_ENCRYPTION_KEY; + + mutex_enter(&space->crypt_data->mutex); + + iv = space->crypt_data->iv; + key_id= space->crypt_data->key_id; + + if (req_type.is_write()) { + if (space->crypt_data->should_encrypt() && space->crypt_data->encrypting_with_key_version != 0) { + key = space->crypt_data->get_key_currently_used_for_encryption(); + key_version = space->crypt_data->encrypting_with_key_version; + key_len = 32; + } + else { + key = NULL; + key_len = 0; + iv = NULL; + key_version=ENCRYPTION_KEY_VERSION_NOT_ENCRYPTED; + } + } + + if (req_type.is_read()) { + tablespace_iv = space->crypt_data->tablespace_iv; + tablespace_key = space->crypt_data->tablespace_key; + ut_ad(space->crypt_data->encryption_rotation != Encryption::MASTER_KEY_TO_KEYRING || + space->crypt_data->tablespace_key != NULL); + // retrieve key with min_key_version from local cache. In normal situation this is the key needed for + // decryption. In rare cases when re-encryption was aborted - due to server crash or shutdown there + // can be one more key version needed to decrypt tablespace - we will find this version in decrypt and + // retrieve needed version. + if (space->crypt_data->min_key_version != ENCRYPTION_KEY_VERSION_NOT_ENCRYPTED) { + key= space->crypt_data->get_min_key_version_key(); + memcpy(key_min, key, 32); + set_min_key_version = true; + char testblock[32]; + memset(testblock,0,32); + ut_ad(memcmp(key,testblock, 32) != 0); + ut_ad(key != NULL); + key_version = key == NULL ? ENCRYPTION_KEY_VERSION_INVALID + : space->crypt_data->min_key_version; + } else { + key= NULL; + key_version= ENCRYPTION_KEY_VERSION_INVALID; + } + } + + req_type.encryption_key(key, + key_len, + false, + iv, + key_version, + key_id, + tablespace_iv, + tablespace_key); + + req_type.encryption_rotation(space->crypt_data->encryption_rotation); + + mutex_exit(&space->crypt_data->mutex); +} + /** Set encryption information for IORequest. @param[in,out] req_type IO request @param[in] page_id page id @@ -5498,7 +5879,7 @@ fil_io_set_encryption( /* Don't encrypt pages of system tablespace upto TRX_SYS_PAGE(including). The doublewrite buffer header is on TRX_SYS_PAGE */ - if (is_shared_system_tablespace(space->id) + if (is_shared_system_tablespace(space->id) && space->crypt_data == NULL && page_id.page_no() <= FSP_TRX_SYS_PAGE_NO) { req_type.clear_encrypted(); return; @@ -5527,10 +5908,29 @@ fil_io_set_encryption( return; } - req_type.encryption_key(space->encryption_key, - space->encryption_klen, - space->encryption_iv); - req_type.encryption_algorithm(Encryption::AES); + + /* Don't encrypt the log, page 0 of all tablespaces, all pages + don't encrypt TRX_SYS_SPACE.TRX_SYS_PAGE_NO as it contains address to dblwr buffer */ + if (!req_type.is_log() && page_id.page_no() > 0 && (TRX_SYS_SPACE != page_id.space() || TRX_SYS_PAGE_NO != page_id.page_no()) + && space->encryption_type != Encryption::NONE) { + if (space->encryption_type == Encryption::KEYRING) { + ut_ad(space->crypt_data != NULL); + + fil_io_set_keyring_encryption(req_type, space, page_id); + } else { + ut_ad(space->encryption_type == Encryption::AES); + req_type.encryption_key(space->encryption_key, + 32, + false, + space->encryption_iv, + 0, 0, NULL, NULL); // not relevant for Master Key encryption + + req_type.encryption_rotation(Encryption::NO_ROTATION); + } + req_type.encryption_algorithm(space->encryption_type); + } else { + req_type.clear_encrypted(); + } } /** Reads or writes data. This operation could be asynchronous (aio). @@ -5768,6 +6168,12 @@ _fil_io( space->name, byte_offset, len, req_type.is_read()); } + if (page_size.is_compressed()) { + req_type.mark_page_zip_compressed(); + req_type.set_zip_page_physical_size(page_size.physical()); + ut_ad(page_size.physical() > 0); + } + /* Set encryption information. */ fil_io_set_encryption(req_type, page_id, space); @@ -5902,17 +6308,9 @@ _fil_io( fil_no_punch_hole(node); } - /* We an try to recover the page from the double write buffer if - the decompression fails or the page is corrupt. */ - - ut_a(req_type.is_dblwr_recover() || err == DB_SUCCESS); - - if (sync) { - /* The i/o operation is already completed when we return from - os_aio: */ - - mutex_enter(&fil_system->mutex); - + /* We can try to recover the page from the double write buffer if the decompression fails or the page is corrupt. */ + + if (sync) { /* The i/o operation is already completed when we return from os_aio: */ mutex_enter(&fil_system->mutex); fil_node_complete_io(node, fil_system, req_type); mutex_exit(&fil_system->mutex); @@ -5955,6 +6353,8 @@ fil_aio_wait( mutex_enter(&fil_system->mutex); fil_node_complete_io(node, fil_system, type); + const fil_type_t purpose = node->space->purpose; + const ulint space_id= node->space->id; mutex_exit(&fil_system->mutex); @@ -5966,7 +6366,7 @@ fil_aio_wait( deadlocks in the i/o system. We keep tablespace 0 data files always open, and use a special i/o thread to serve insert buffer requests. */ - switch (node->space->purpose) { + switch (purpose) { case FIL_TYPE_TABLESPACE: case FIL_TYPE_TEMPORARY: case FIL_TYPE_IMPORT: @@ -5975,7 +6375,32 @@ fil_aio_wait( /* async single page writes from the dblwr buffer don't have access to the page */ if (message != NULL) { - buf_page_io_complete(static_cast(message)); + buf_page_t* bpage = static_cast(message); + if (!bpage) { + return; + } + + ulint offset = bpage->id.page_no(); + dberr_t err = buf_page_io_complete(bpage); + if (err == DB_SUCCESS) { + return; + } + + ut_ad(type.is_read()); + if (recv_recovery_is_on() && !srv_force_recovery) { + recv_sys->found_corrupt_fs = true; + } + + if (fil_space_t* space = fil_space_acquire_for_io(space_id)) { + if (space == node->space) { + ib::error() << "Failed to read file '" + << node->name + << "' at offset " << offset + << ": " << ut_strerr(err); + } + + fil_space_release_for_io(space); + } } return; case FIL_TYPE_LOG: @@ -6360,6 +6785,8 @@ fil_close(void) ut_free(fil_system); fil_system = NULL; + + fil_space_crypt_cleanup(); } #ifndef UNIV_HOTBACKUP @@ -6396,6 +6823,9 @@ struct fil_iterator_t { byte* io_buffer; /*!< Buffer to use for IO */ byte* encryption_key; /*!< Encryption key */ byte* encryption_iv; /*!< Encryption iv */ + uint encryption_key_version; + uint encryption_key_id; + fil_space_crypt_t *crypt_data; /*!< Crypt data (if encrypted) */ }; /********************************************************************//** @@ -6434,6 +6864,8 @@ fil_iterate( for (offset = iter.start; offset < iter.end; offset += n_bytes) { + IORequest read_request(read_type); + byte* io_buffer = iter.io_buffer; block->frame = io_buffer; @@ -6452,6 +6884,9 @@ fil_iterate( ut_ad(iter.page_size == callback.get_page_size().physical()); + read_request.mark_page_zip_compressed(); + read_request.set_zip_page_physical_size(iter.page_size); + /* Zip IO is done in the compressed page buffer. */ io_buffer = block->page.zip.data; } else { @@ -6468,15 +6903,28 @@ fil_iterate( ut_ad(n_bytes > 0); ut_ad(!(n_bytes % iter.page_size)); + const bool encrypted_with_keyring = iter.crypt_data != NULL + && iter.crypt_data->type != CRYPT_SCHEME_UNENCRYPTED; + dberr_t err; - IORequest read_request(read_type); /* For encrypted table, set encryption information. */ - if (iter.encryption_key != NULL && offset != 0) { - read_request.encryption_key(iter.encryption_key, + if ((iter.encryption_key != NULL || encrypted_with_keyring) && offset != 0) { + read_request.encryption_key(encrypted_with_keyring ? iter.crypt_data->tablespace_key : iter.encryption_key, ENCRYPTION_KEY_LEN, - iter.encryption_iv); - read_request.encryption_algorithm(Encryption::AES); + false, + encrypted_with_keyring ? iter.crypt_data->iv : iter.encryption_iv, + 0, + iter.encryption_key_id, + encrypted_with_keyring ? iter.crypt_data->tablespace_iv : NULL, + encrypted_with_keyring ? iter.crypt_data->tablespace_key : NULL); + + read_request.encryption_algorithm(iter.crypt_data ? Encryption::KEYRING + : Encryption::AES); + if (iter.crypt_data) { + read_request.encryption_rotation(iter.crypt_data->encryption_rotation); + } else + read_request.encryption_rotation(Encryption::NO_ROTATION); } err = os_file_read( @@ -6518,11 +6966,33 @@ fil_iterate( IORequest write_request(write_type); /* For encrypted table, set encryption information. */ - if (iter.encryption_key != NULL && offset != 0) { + if (iter.encryption_key != NULL && offset != 0 && iter.crypt_data == NULL) { + write_request.encryption_key(iter.encryption_key, + ENCRYPTION_KEY_LEN, + false, + iter.encryption_iv, + iter.encryption_key_version, + iter.encryption_key_id, + NULL, + NULL); + write_request.encryption_algorithm(iter.crypt_data ? Encryption::KEYRING + : Encryption::AES); + } else if (offset != 0 && iter.crypt_data) { write_request.encryption_key(iter.encryption_key, ENCRYPTION_KEY_LEN, - iter.encryption_iv); - write_request.encryption_algorithm(Encryption::AES); + false, + iter.encryption_iv, + iter.encryption_key_version, + iter.crypt_data->key_id, + NULL, + NULL); + + write_request.encryption_algorithm(Encryption::KEYRING); + + if (callback.get_page_size().is_compressed()) { + write_request.mark_page_zip_compressed(); + write_request.set_zip_page_physical_size(iter.page_size); + } } /* A page was updated in the set, write back to disk. @@ -6666,14 +7136,28 @@ fil_tablespace_iterate( iter.n_io_buffers = n_io_buffers; iter.page_size = callback.get_page_size().physical(); - /* Set encryption info. */ - iter.encryption_key = table->encryption_key; - iter.encryption_iv = table->encryption_iv; + ulint space_flags = callback.get_space_flags(); + iter.crypt_data = fil_space_read_crypt_data( + callback.get_page_size(), page); + + /* read (optional) crypt data */ + if(iter.crypt_data && iter.crypt_data->type != CRYPT_SCHEME_UNENCRYPTED) { + ut_ad(FSP_FLAGS_GET_ENCRYPTION(space_flags)); + iter.encryption_key_id = iter.crypt_data->key_id; + + Encryption::get_latest_tablespace_key(iter.crypt_data->key_id, &iter.encryption_key_version, &iter.encryption_key); + if (iter.encryption_key == NULL) + err= DB_DECRYPTION_FAILED; + } else { + /* Set encryption info. */ + iter.encryption_key = table->encryption_key; + iter.encryption_iv = table->encryption_iv; + iter.encryption_key_version = ~0; //TODO:Robert:flipping bits so to make this a marker that tablespace key id used + } /* Check encryption is matched or not. */ - ulint space_flags = callback.get_space_flags(); - if (FSP_FLAGS_GET_ENCRYPTION(space_flags)) { - ut_ad(table->encryption_key != NULL); + if (err == DB_SUCCESS && FSP_FLAGS_GET_ENCRYPTION(space_flags)) { + ut_ad(iter.encryption_key != NULL); if (!dict_table_is_encrypted(table)) { ib::error() << "Table is not in an encrypted" @@ -6707,6 +7191,12 @@ fil_tablespace_iterate( ut_free(io_buffer); } + + if (iter.crypt_data) { + fil_space_destroy_crypt_data(&iter.crypt_data); + if (iter.encryption_key != NULL) + my_free(iter.encryption_key); + } } if (err == DB_SUCCESS) { @@ -7313,7 +7803,7 @@ fil_set_compression( COMPRESSION is set by TABLE DDL, not TABLESPACE DDL. There is no other technical reason. Also, do not use it for missing tables or tables with compressed row_format. */ - if (table->ibd_file_missing + if (table->file_unreadable || !DICT_TF2_FLAG_IS_SET(table, DICT_TF2_USE_FILE_PER_TABLE) || DICT_TF2_FLAG_IS_SET(table, DICT_TF2_TEMPORARY) || page_size_t(table->flags).is_compressed()) { @@ -7400,9 +7890,11 @@ fil_set_encryption( ulint space_id, Encryption::Type algorithm, byte* key, - byte* iv) + byte* iv, + bool aquire_mutex) { - mutex_enter(&fil_system->mutex); + if (aquire_mutex) + mutex_enter(&fil_system->mutex); fil_space_t* space = fil_space_get_by_id(space_id); @@ -7413,7 +7905,8 @@ fil_set_encryption( ut_ad(algorithm != Encryption::NONE); space->encryption_type = algorithm; - space->flags |= FSP_FLAGS_MASK_ENCRYPTION; + if (space->crypt_data == NULL) + space->flags |= FSP_FLAGS_MASK_ENCRYPTION; if (key == NULL) { Encryption::random_value(space->encryption_key); @@ -7430,7 +7923,8 @@ fil_set_encryption( iv, ENCRYPTION_KEY_LEN); } - mutex_exit(&fil_system->mutex); + if (aquire_mutex) + mutex_exit(&fil_system->mutex); return(DB_SUCCESS); } @@ -7477,7 +7971,7 @@ bool fil_encryption_rotate_low(const fil_space_t* space) { bool success = true; - if (space->encryption_type != Encryption::NONE) { + if (space->encryption_type == Encryption::AES) { mtr_t mtr; mtr_start(&mtr); @@ -7513,6 +8007,7 @@ fil_encryption_rotate() space != NULL; ) { /* Skip unencypted tablespaces. */ if (srv_is_undo_tablespace(space->id) + || space->crypt_data || space->purpose == FIL_TYPE_LOG) { space = UT_LIST_GET_NEXT(space_list, space); continue; @@ -7768,6 +8263,24 @@ fil_space_set_corrupt( mutex_exit(&fil_system->mutex); } +void +fil_space_set_encrypted( +/*==================*/ + ulint space_id) +{ + fil_space_t* space; + + mutex_enter(&fil_system->mutex); + + space = fil_space_get_by_id(space_id); + + if (space) { + space->is_encrypted = true; + } + + mutex_exit(&fil_system->mutex); +} + /** Release the reserved free extents. @param[in] n_reserved number of reserved extents */ void diff --git a/storage/innobase/fsp/fsp0file.cc b/storage/innobase/fsp/fsp0file.cc index 5283869cff76..4d10e0385c84 100644 --- a/storage/innobase/fsp/fsp0file.cc +++ b/storage/innobase/fsp/fsp0file.cc @@ -32,6 +32,7 @@ Created 2013-7-26 by Kevin Lewis #include "page0page.h" #include "srv0start.h" #include "ut0new.h" +#include "fil0crypt.h" #ifdef UNIV_HOTBACKUP #include "my_sys.h" #endif /* UNIV_HOTBACKUP */ @@ -386,26 +387,49 @@ in order for this function to validate it. @param[in] for_import if it is for importing @retval DB_SUCCESS if tablespace is valid, DB_ERROR if not. m_is_valid is also set true on success, else false. */ -dberr_t +Datafile::ValidateOutput Datafile::validate_to_dd( ulint space_id, ulint flags, bool for_import) { - dberr_t err; + ValidateOutput output; if (!is_open()) { - return DB_ERROR; + output.error = DB_ERROR; + return output; } /* Validate this single-table-tablespace with the data dictionary, but do not compare the DATA_DIR flag, in case the tablespace was remotely located. */ - err = validate_first_page(0, for_import); - if (err != DB_SUCCESS) { - return(err); + output = validate_first_page(0, for_import); + if (output.error != DB_SUCCESS) { + return(output); } + // in case of keyring encryption it can be so happen that there will be a crash after all pages of tablespace is rotated + // and DD is updated, but page0 of the tablespace has not been yet update. We handle this here. + + if (output.encryption_type == ValidateOutput::KEYRING && + ( + (FSP_FLAGS_GET_ENCRYPTION(flags) && output.keyring_encryption_info.keyring_encryption_min_key_version == 0) || + (!FSP_FLAGS_GET_ENCRYPTION(flags) && output.keyring_encryption_info.keyring_encryption_min_key_version != 0) + ) && FSP_FLAGS_GET_ENCRYPTION(flags) != FSP_FLAGS_GET_ENCRYPTION(m_flags) + ) + { + ib::warn() << "In file '" << m_filepath << "' (tablespace id = " << m_space_id + << ") encryption flag is " << (FSP_FLAGS_GET_ENCRYPTION(m_flags) ? "ON" : "OFF") + << ". However the encryption flag in the data dictionary is " + << (FSP_FLAGS_GET_ENCRYPTION(flags) ? "ON" : "OFF") + << ". This indicates that the rotation of the table was interrupted before space's flags were updated." + << " Please have encryption_thread variable (innodb-encryption-threads) set to value > 0. So the encryption" + << " could finish up the rotation."; + // exclude encryption flag from validation + m_flags &= ~FSP_FLAGS_MASK_ENCRYPTION; + flags &= ~FSP_FLAGS_MASK_ENCRYPTION; + } + /* Make sure the datafile we found matched the space ID. If the datafile is a file-per-table tablespace then also match the row format and zip page size. */ @@ -414,7 +438,8 @@ Datafile::validate_to_dd( || (m_flags & ~FSP_FLAGS_MASK_DATA_DIR) == (flags & ~FSP_FLAGS_MASK_DATA_DIR))) { /* Datafile matches the tablespace expected. */ - return(DB_SUCCESS); + output.error = DB_SUCCESS; + return(output); } /* else do not use this tablespace. */ @@ -427,7 +452,8 @@ Datafile::validate_to_dd( " using the commands DISCARD TABLESPACE and IMPORT TABLESPACE?" " " << TROUBLESHOOT_DATADICT_MSG; - return(DB_ERROR); + output.error = DB_ERROR; + return(output); } /** Validates this datafile for the purpose of recovery. The file should @@ -437,17 +463,19 @@ corrupt and needs to be restored from the doublewrite buffer, we will reopen it in write mode and ry to restore that page. @retval DB_SUCCESS if tablespace is valid, DB_ERROR if not. m_is_valid is also set true on success, else false. */ -dberr_t +Datafile::ValidateOutput Datafile::validate_for_recovery() { - dberr_t err; + ValidateOutput output; ut_ad(is_open()); ut_ad(!srv_read_only_mode); - err = validate_first_page(0, false); - switch (err) { + + output = validate_first_page(0, false); + + switch (output.error) { case DB_SUCCESS: case DB_TABLESPACE_EXISTS: #ifdef UNIV_HOTBACKUP @@ -457,22 +485,22 @@ Datafile::validate_for_recovery() } /* Free the previously read first page and then re-validate. */ free_first_page(); - err = validate_first_page(0, false); - if (err == DB_SUCCESS) { + output = validate_first_page(0, false); + if (output.error == DB_SUCCESS) { std::string filepath = fil_space_get_first_path( m_space_id); if (is_intermediate_file(filepath.c_str())) { /* Existing intermediate file with same space id is obsolete.*/ if (fil_space_free(m_space_id, FALSE)) { - err = DB_SUCCESS; + output.error = DB_SUCCESS; } } else { filepath.assign(m_filepath); if (is_intermediate_file(filepath.c_str())) { /* New intermediate file with same space id shall be ignored.*/ - err = DB_TABLESPACE_EXISTS; + output.error = DB_TABLESPACE_EXISTS; /* Set all bits of 'flags' as a special indicator for "ignore tablespace". Hopefully InnoDB will never use all bits or at least all @@ -489,43 +517,43 @@ Datafile::validate_for_recovery() /* For encryption tablespace, we skip the retry step, since it is only because the keyring is not ready. */ if (FSP_FLAGS_GET_ENCRYPTION(m_flags)) { - return(err); + return(output); } /* Re-open the file in read-write mode Attempt to restore page 0 from doublewrite and read the space ID from a survey of the first few pages. */ close(); - err = open_read_write(srv_read_only_mode); - if (err != DB_SUCCESS) { + output.error = open_read_write(srv_read_only_mode); + if (output.error != DB_SUCCESS) { ib::error() << "Datafile '" << m_filepath << "' could not" " be opened in read-write mode so that the" " doublewrite pages could be restored."; - return(err); + return(output); }; - err = find_space_id(); - if (err != DB_SUCCESS || m_space_id == 0) { + output.error = find_space_id(); + if (output.error != DB_SUCCESS || m_space_id == 0) { ib::error() << "Datafile '" << m_filepath << "' is" " corrupted. Cannot determine the space ID from" " the first 64 pages."; - return(err); + return(output); } - err = restore_from_doublewrite(0); - if (err != DB_SUCCESS) { - return(err); + output.error = restore_from_doublewrite(0); + if (output.error != DB_SUCCESS) { + return(output); } /* Free the previously read first page and then re-validate. */ free_first_page(); - err = validate_first_page(0, false); + output = validate_first_page(0, false); } - if (err == DB_SUCCESS) { + if (output.error == DB_SUCCESS) { set_name(NULL); } - return(err); + return(output); } /** Check the consistency of the first page of a datafile when the @@ -538,13 +566,14 @@ m_is_valid is set true on success, else false. @retval DB_SUCCESS on if the datafile is valid @retval DB_CORRUPTION if the datafile is not readable @retval DB_TABLESPACE_EXISTS if there is a duplicate space_id */ -dberr_t +Datafile::ValidateOutput Datafile::validate_first_page(lsn_t* flush_lsn, bool for_import) { char* prev_name; char* prev_filepath; const char* error_txt = NULL; + ValidateOutput output; m_is_valid = true; @@ -596,8 +625,9 @@ Datafile::validate_first_page(lsn_t* flush_lsn, << univ_page_size.logical(); free_first_page(); + output.error = DB_ERROR; - return(DB_ERROR); + return(output); } else if (page_get_page_no(m_first_page) != 0) { @@ -625,50 +655,82 @@ Datafile::validate_first_page(lsn_t* flush_lsn, free_first_page(); - return(DB_CORRUPTION); + output.error = DB_CORRUPTION; + return(output); } + fil_space_crypt_t* crypt_data = fil_space_read_crypt_data(page_size_t(m_flags), m_first_page); + + if(crypt_data) { + output.encryption_type = ValidateOutput::KEYRING; + output.keyring_encryption_info.page0_has_crypt_data = true; + output.keyring_encryption_info.keyring_encryption_min_key_version = crypt_data->min_key_version; + output.keyring_encryption_info.type = crypt_data->type; + } else if (FSP_FLAGS_GET_ENCRYPTION(m_flags)) + output.encryption_type = ValidateOutput::MASTER_KEY; + else + output.encryption_type = ValidateOutput::NONE; + /* For encrypted tablespace, check the encryption info in the first page can be decrypt by master key, otherwise, this table can't be open. And for importing, we skip checking it. */ - if (FSP_FLAGS_GET_ENCRYPTION(m_flags) && !for_import) { - m_encryption_key = static_cast( - ut_zalloc_nokey(ENCRYPTION_KEY_LEN)); - m_encryption_iv = static_cast( - ut_zalloc_nokey(ENCRYPTION_KEY_LEN)); + if (FSP_FLAGS_GET_ENCRYPTION(m_flags) && !for_import) { + if(crypt_data == NULL) { + m_encryption_key = static_cast( + ut_zalloc_nokey(ENCRYPTION_KEY_LEN)); + m_encryption_iv = static_cast( + ut_zalloc_nokey(ENCRYPTION_KEY_LEN)); #ifdef UNIV_ENCRYPT_DEBUG - fprintf(stderr, "Got from file %lu:", m_space_id); + fprintf(stderr, "Got from file %lu:", m_space_id); #endif - if (!fsp_header_get_encryption_key(m_flags, - m_encryption_key, - m_encryption_iv, - m_first_page)) { - ib::error() - << "Encryption information in" - << " datafile: " << m_filepath - << " can't be decrypted," - << " please check if a keyring plugin" - << " is loaded and initialized successfully."; + if (!fsp_header_get_encryption_key(m_flags, + m_encryption_key, + m_encryption_iv, + m_first_page)) { + ib::error() + << "Encryption information in" + << " datafile: " << m_filepath + << " can't be decrypted," + << " please check if a keyring plugin" + << " is loaded and initialized successfully."; + + m_is_valid = false; + free_first_page(); + ut_free(m_encryption_key); + ut_free(m_encryption_iv); + m_encryption_key = NULL; + m_encryption_iv = NULL; + output.error = DB_CORRUPTION; + return(output); + } + + if (recv_recovery_is_on() + && memcmp(m_encryption_key, + m_encryption_iv, + ENCRYPTION_KEY_LEN) == 0) { + ut_free(m_encryption_key); + ut_free(m_encryption_iv); + m_encryption_key = NULL; + m_encryption_iv = NULL; + } + } else if (Encryption::tablespace_key_exists(crypt_data->key_id) == false) { + ib::error() << "Table " << m_name << " in file " << m_filename << ' ' + << "is encrypted but encryption service or " + << "used key_id " << crypt_data->key_id << " is not available. " + << "Can't continue reading table."; m_is_valid = false; free_first_page(); - ut_free(m_encryption_key); - ut_free(m_encryption_iv); - m_encryption_key = NULL; - m_encryption_iv = NULL; - return(DB_CORRUPTION); + fil_space_destroy_crypt_data(&crypt_data); + output.keyring_encryption_info.keyring_encryption_key_is_missing = true; + output.error = DB_CORRUPTION; + return output; } + } - if (recv_recovery_is_on() - && memcmp(m_encryption_key, - m_encryption_iv, - ENCRYPTION_KEY_LEN) == 0) { - ut_free(m_encryption_key); - ut_free(m_encryption_iv); - m_encryption_key = NULL; - m_encryption_iv = NULL; - } + if (crypt_data != NULL) { + fil_space_destroy_crypt_data(&crypt_data); } if (fil_space_read_name_and_filepath( @@ -677,7 +739,8 @@ Datafile::validate_first_page(lsn_t* flush_lsn, if (0 == strcmp(m_filepath, prev_filepath)) { ut_free(prev_name); ut_free(prev_filepath); - return(DB_SUCCESS); + output.error = DB_SUCCESS; + return(output); } /* Make sure the space_id has not already been opened. */ @@ -695,12 +758,14 @@ Datafile::validate_first_page(lsn_t* flush_lsn, free_first_page(); - return(is_predefined_tablespace(m_space_id) - ? DB_CORRUPTION - : DB_TABLESPACE_EXISTS); + output.error = is_predefined_tablespace(m_space_id) + ? DB_CORRUPTION + : DB_TABLESPACE_EXISTS; + return output; } - return(DB_SUCCESS); + output.error = DB_SUCCESS; + return(output); } /** Determine the space id of the given file descriptor by reading a few diff --git a/storage/innobase/fsp/fsp0fsp.cc b/storage/innobase/fsp/fsp0fsp.cc index bfdbe04fe616..a7dc972e93da 100644 --- a/storage/innobase/fsp/fsp0fsp.cc +++ b/storage/innobase/fsp/fsp0fsp.cc @@ -36,6 +36,7 @@ Created 11/29/1995 Heikki Tuuri #else /* UNIV_HOTBACKUP */ #include "buf0buf.h" #include "fil0fil.h" +#include "fil0crypt.h" #include "mtr0log.h" #include "ut0byte.h" #include "page0page.h" @@ -1162,7 +1163,8 @@ fsp_header_init( /* For encryption tablespace, we need to save the encryption info to the page 0. */ - if (FSP_FLAGS_GET_ENCRYPTION(space->flags)) { + if (FSP_FLAGS_GET_ENCRYPTION(space->flags) && + !space->crypt_data) { ulint offset = fsp_header_get_encryption_offset(page_size); byte encryption_info[ENCRYPTION_INFO_SIZE_V2]; @@ -1183,6 +1185,17 @@ fsp_header_init( mtr); } + if (space->crypt_data) { + /* Write encryption metadata to page 0 if tablespace is + encrypted or encryption is disabled by table option. */ + if (space->crypt_data && + (space->crypt_data->should_encrypt() || + space->crypt_data->not_encrypted())) { + space->crypt_data->write_page0(space, page, mtr, space->crypt_data->min_key_version, space->crypt_data->type, + space->crypt_data->encryption_rotation); + } + } + if (space_id == srv_sys_space.space_id()) { if (btr_create(DICT_CLUSTERED | DICT_IBUF, 0, univ_page_size, DICT_IBUF_ID_MIN + space_id, diff --git a/storage/innobase/fsp/fsp0space.cc b/storage/innobase/fsp/fsp0space.cc index c391e5c338f9..d324dd5b3cbc 100644 --- a/storage/innobase/fsp/fsp0space.cc +++ b/storage/innobase/fsp/fsp0space.cc @@ -150,7 +150,8 @@ Tablespace::open_or_create(bool is_temp) tablespace in the tablespace manager. */ space = fil_space_create( m_name, m_space_id, flags, is_temp - ? FIL_TYPE_TEMPORARY : FIL_TYPE_TABLESPACE); + ? FIL_TYPE_TEMPORARY : FIL_TYPE_TABLESPACE, + NULL); } ut_a(fil_validate()); diff --git a/storage/innobase/fsp/fsp0sysspace.cc b/storage/innobase/fsp/fsp0sysspace.cc index e4420cf53986..28a0251cbab3 100644 --- a/storage/innobase/fsp/fsp0sysspace.cc +++ b/storage/innobase/fsp/fsp0sysspace.cc @@ -45,6 +45,8 @@ direct reference to server header and global variable */ my_bool opt_initialize = 0; #endif /* !UNIV_HOTBACKUP */ +#include "fil0crypt.h" + /** The control info of the system tablespace. */ SysTablespace srv_sys_space; @@ -581,7 +583,8 @@ SysTablespace::read_lsn_and_check_flags(lsn_t* flushed_lsn) first datafile. */ for (int retry = 0; retry < 2; ++retry) { - err = it->validate_first_page(flushed_lsn, false); + err = it->validate_first_page(flushed_lsn, false).error; + if (err != DB_SUCCESS && (retry == 1 @@ -957,7 +960,8 @@ SysTablespace::open_or_create( tablespace in the tablespace manager. */ space = fil_space_create( name(), space_id(), flags(), is_temp - ? FIL_TYPE_TEMPORARY : FIL_TYPE_TABLESPACE); + ? FIL_TYPE_TEMPORARY : FIL_TYPE_TABLESPACE, + NULL); } ut_a(fil_validate()); diff --git a/storage/innobase/fts/fts0fts.cc b/storage/innobase/fts/fts0fts.cc index b81b6a973f79..7127179095a5 100644 --- a/storage/innobase/fts/fts0fts.cc +++ b/storage/innobase/fts/fts0fts.cc @@ -41,6 +41,8 @@ Full Text Search interface #include "sync0sync.h" #include "ut0new.h" +#include "fil0crypt.h" + static const ulint FTS_MAX_ID_LEN = 32; /** Column name from the FTS config table */ @@ -1857,7 +1859,8 @@ fts_create_one_common_table( FTS_CONFIG_TABLE_VALUE_COL_LEN); } - error = row_create_table_for_mysql(new_table, NULL, trx, false); + error = row_create_table_for_mysql(new_table, NULL, trx, false, + FIL_ENCRYPTION_DEFAULT, CreateInfoEncryptionKeyId()); if (error == DB_SUCCESS) { @@ -2071,7 +2074,8 @@ fts_create_one_index_table( (DATA_MTYPE_MAX << 16) | DATA_UNSIGNED | DATA_NOT_NULL, FTS_INDEX_ILIST_LEN); - error = row_create_table_for_mysql(new_table, NULL, trx, false); + error = row_create_table_for_mysql(new_table, NULL, trx, false, + FIL_ENCRYPTION_DEFAULT, CreateInfoEncryptionKeyId()); if (error == DB_SUCCESS) { dict_index_t* index = dict_mem_index_create( diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index cb10ab5d341a..1b1d718bbea7 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -71,6 +71,7 @@ this program; if not, write to the Free Software Foundation, Inc., #include "dict0stats.h" #include "dict0stats_bg.h" #include "fil0fil.h" +#include "fil0crypt.h" #include "fsp0fsp.h" #include "fsp0space.h" #include "fsp0sysspace.h" @@ -197,6 +198,9 @@ static my_bool innodb_optimize_fulltext_only = FALSE; static char* innodb_version_str = (char*) INNODB_VERSION_STR; +extern uint srv_fil_crypt_rotate_key_age; +extern uint srv_n_fil_crypt_iops; + /** Note we cannot use rec_format_enum because we do not allow COMPRESSED row format for innodb_default_row_format option. */ enum default_row_format_enum { @@ -545,6 +549,68 @@ static PSI_file_info all_innodb_files[] = { # endif /* UNIV_PFS_IO */ #endif /* HAVE_PSI_INTERFACE */ +static int +default_encryption_key_id_validate( +/*=================================*/ + THD* thd, /*!< in: thread handle */ + struct st_mysql_sys_var* var, /*!< in: pointer to system + variable */ + void* save, /*!< out: immediate result + for update function */ + struct st_mysql_value* value) /*!< in: incoming string */ +{ + long long intbuf; + + DBUG_ENTER("default_encryption_key_id_validate"); + + if (value->val_int(value, &intbuf)) { + /* The value is NULL. That is invalid. */ + DBUG_RETURN(1); + } + + if (intbuf < 0 || intbuf >= UINT_MAX) { + push_warning_printf(thd, Sql_condition::SL_WARNING, + HA_ERR_UNSUPPORTED, + "InnoDB: value out of scope"); + DBUG_RETURN(1); + } + + if(!Encryption::tablespace_key_exists_or_create_new_one_if_does_not_exist(static_cast(intbuf))) { + push_warning_printf(thd, Sql_condition::SL_WARNING, + HA_ERR_UNSUPPORTED, + "InnoDB: cannot enable encryption, " + "keyring plugin is not available"); + DBUG_RETURN(1); + } + + *reinterpret_cast(save) = static_cast(intbuf); + + DBUG_RETURN(0); +} + +static +void default_encryption_key_id_update( + THD* thd, // in: thread handle <] + struct st_mysql_sys_var* var, // in: pointer to + // system variable */ + void* var_ptr,// where the + // formal string goes */ + const void* save) // in: immediate result + // from check function */ +{ + *static_cast(var_ptr) = *static_cast(save); +} + +static MYSQL_THDVAR_UINT(default_encryption_key_id, PLUGIN_VAR_RQCMDARG, + "Default encryption key id used for table encryption.", + default_encryption_key_id_validate, default_encryption_key_id_update, + FIL_DEFAULT_ENCRYPTION_KEY, 0, UINT_MAX32, 0); + +uint get_global_default_encryption_key_id_value() +{ + return THDVAR(NULL, default_encryption_key_id); +} + /** Set up InnoDB API callback function array */ ib_cb_t innodb_api_cb[] = { (ib_cb_t) ib_cursor_open_table, @@ -844,6 +910,18 @@ static const char* deprecated_innodb_support_xa_off " parameter may be removed in future releases." " Only innodb_support_xa=ON is allowed."; +static +int +innodb_encrypt_tables_validate( +/*==================================*/ + THD* thd, /*!< in: thread handle */ + struct st_mysql_sys_var* var, /*!< in: pointer to system + variable */ + void* save, /*!< out: immediate result + for update function */ + struct st_mysql_value* value); /*!< in: incoming string */ + + /** Update the session variable innodb_support_xa. @param[in] thd current session @param[in] var the system variable innodb_support_xa @@ -1025,6 +1103,8 @@ static SHOW_VAR innodb_status_variables[]= { (char*) &export_vars.innodb_pages_created, SHOW_LONG, SHOW_SCOPE_GLOBAL}, {"pages_read", (char*) &export_vars.innodb_pages_read, SHOW_LONG, SHOW_SCOPE_GLOBAL}, + {"pages0_read", + (char*) &export_vars.innodb_page0_read, SHOW_LONG, SHOW_SCOPE_GLOBAL}, {"pages_written", (char*) &export_vars.innodb_pages_written, SHOW_LONG, SHOW_SCOPE_GLOBAL}, {"purge_trx_id", @@ -1085,6 +1165,26 @@ static SHOW_VAR innodb_status_variables[]= { {"scan_deleted_recs_size", (char*) &export_vars.innodb_fragmentation_stats.scan_deleted_recs_size, SHOW_LONG, SHOW_SCOPE_GLOBAL}, + + /* Encryption */ + {"encryption_rotation_pages_read_from_cache", + (char*) &export_vars.innodb_encryption_rotation_pages_read_from_cache, + SHOW_LONG, SHOW_SCOPE_GLOBAL}, + {"encryption_rotation_pages_read_from_disk", + (char*) &export_vars.innodb_encryption_rotation_pages_read_from_disk, + SHOW_LONG, SHOW_SCOPE_GLOBAL}, + {"encryption_rotation_pages_modified", + (char*) &export_vars.innodb_encryption_rotation_pages_modified, + SHOW_LONG, SHOW_SCOPE_GLOBAL}, + {"encryption_rotation_pages_flushed", + (char*) &export_vars.innodb_encryption_rotation_pages_flushed, + SHOW_LONG, SHOW_SCOPE_GLOBAL}, + {"encryption_rotation_estimated_iops", + (char*) &export_vars.innodb_encryption_rotation_estimated_iops, + SHOW_LONG, SHOW_SCOPE_GLOBAL}, + {"encryption_key_rotation_list_length", + (char*)&export_vars.innodb_key_rotation_list_length, + SHOW_LONGLONG, SHOW_SCOPE_GLOBAL}, {"encryption_n_merge_blocks_encrypted", (char*) &export_vars.innodb_n_merge_blocks_encrypted, SHOW_LONGLONG, SHOW_SCOPE_GLOBAL}, {"encryption_n_merge_blocks_decrypted", @@ -1093,6 +1193,12 @@ static SHOW_VAR innodb_status_variables[]= { (char*) &export_vars.innodb_n_rowlog_blocks_encrypted, SHOW_LONGLONG, SHOW_SCOPE_GLOBAL}, {"encryption_n_rowlog_blocks_decrypted", (char*) &export_vars.innodb_n_rowlog_blocks_decrypted, SHOW_LONGLONG, SHOW_SCOPE_GLOBAL}, + {"num_pages_encrypted", + (char*) &export_vars.innodb_pages_encrypted, + SHOW_LONGLONG, SHOW_SCOPE_GLOBAL }, + {"num_pages_decrypted", + (char*) &export_vars.innodb_pages_decrypted, + SHOW_LONGLONG, SHOW_SCOPE_GLOBAL }, {NullS, NullS, SHOW_LONG, SHOW_SCOPE_GLOBAL} }; @@ -2161,6 +2267,9 @@ convert_error_code_to_mysql( case DB_TABLE_NOT_FOUND: return(HA_ERR_NO_SUCH_TABLE); + case DB_DECRYPTION_FAILED: + return(HA_ERR_DECRYPTION_FAILED); + case DB_TABLESPACE_NOT_FOUND: return(HA_ERR_TABLESPACE_MISSING); @@ -2674,30 +2783,44 @@ Compression::validate(const char* algorithm) return(check(algorithm, &compression)); } +bool +Encryption::is_empty(const char* algorithm) +{ + /* NULL is the same as empty */ + return (algorithm == NULL + || innobase_strcasecmp(algorithm, "") == 0); +} + /** Check if the string is "" or "n". @param[in] algorithm Encryption algorithm to check @return true if no algorithm requested */ bool Encryption::is_none(const char* algorithm) { - /* NULL is the same as NONE */ - if (algorithm == NULL - || innobase_strcasecmp(algorithm, "n") == 0 - || innobase_strcasecmp(algorithm, "") == 0) { - return(true); - } + return Encryption::is_empty(algorithm) + || Encryption::is_no(algorithm); +} - return(false); +bool +Encryption::is_master_key_encryption(const char* algorithm) +{ + return innobase_strcasecmp(algorithm, "y") == 0; } -/** Check if the NO algorithm was explicitly specified. +/** Check if the string is "" or "n". @param[in] algorithm Encryption algorithm to check -@return true if no algorithm explicitly requested */ +@return true if no algorithm requested */ +bool +Encryption::is_no(const char* algorithm) +{ + return innobase_strcasecmp(algorithm, "n") == 0; +} + bool -Encryption::none_explicitly_specified(const char* algorithm) +Encryption::is_keyring(const char *algoritm) { - return (algorithm != NULL && - innobase_strcasecmp(algorithm, "n") == 0); + return (algoritm != NULL && + innobase_strcasecmp(algoritm, "keyring") == 0); } /** Check the encryption option and set it @@ -2717,14 +2840,18 @@ Encryption::set_algorithm( encryption->m_type = AES; - } else { + } else if (innobase_strcasecmp(option, "KEYRING") == 0) { + + encryption->m_type = KEYRING; + + } else { return(DB_UNSUPPORTED); } return(DB_SUCCESS); } -/** Check for supported ENCRYPT := (Y | N) supported values +/** Check for supported ENCRYPT := (Y | N | KEYRING) supported values @param[in] option Encryption option @param[out] encryption The encryption algorithm @return DB_SUCCESS or DB_UNSUPPORTED */ @@ -3996,6 +4123,33 @@ innobase_init( } } + if ((srv_encrypt_tables == SRV_ENCRYPT_TABLES_ONLINE_TO_KEYRING || srv_encrypt_tables == SRV_ENCRYPT_TABLES_ONLINE_TO_KEYRING_FORCE) + && !Encryption::tablespace_key_exists_or_create_new_one_if_does_not_exist(FIL_DEFAULT_ENCRYPTION_KEY)) { + sql_print_error("InnoDB: cannot enable encryption, innodb_encrypt_tables is set to value different than OFF, but " + "keyring plugin is not available"); + + DBUG_RETURN(innobase_init_abort()); + } + + // We are starting encryption threads, we must lock the keyring plugins + if (srv_n_fil_crypt_threads > 0) { + uint number_of_keyring_locked= lock_keyrings(NULL); + + if (number_of_keyring_locked == 0) { + sql_print_error("InnoDB: cannot enable encryption threads, " + "keyring plugin is not available"); + + DBUG_RETURN(innobase_init_abort()); + } + if (Encryption::is_keyring_alive() == false) { + sql_print_error("InnoDB: keyring plugin is installed but it seems it was not " + "properly initialized. Cannot enable encryption threads."); + unlock_keyrings(NULL); + + DBUG_RETURN(innobase_init_abort()); + } + } + os_file_set_umask(my_umask); /* Setup the memory alloc/free tracing mechanisms before calling @@ -6608,6 +6762,9 @@ ha_innobase::innobase_initialize_autoinc() updates should fail. */ err = DB_SUCCESS; break; + case DB_DECRYPTION_FAILED: + ut_ad(index->table->is_readable() == false); + return; default: /* row_search_max_autoinc() should only return one of DB_SUCCESS or DB_RECORD_NOT_FOUND. */ @@ -6715,6 +6872,7 @@ ha_innobase::open( /* Mark this table as corrupted, so the drop table or force recovery can still use it, but not others. */ + ib_table->set_file_unreadable(); ib_table->corrupted = true; dict_table_close(ib_table, FALSE, FALSE); ib_table = NULL; @@ -6728,24 +6886,43 @@ ha_innobase::open( DBUG_RETURN(HA_ERR_CRASHED_ON_USAGE); } + FilSpace space; + if (ib_table) + space = fil_space_acquire_silent(ib_table->space); + /* For encrypted table, check if the encryption info in data file can't be retrieved properly, mark it as corrupted. */ if (ib_table != NULL - && dict_table_is_encrypted(ib_table) - && ib_table->ibd_file_missing - && !dict_table_is_discarded(ib_table)) { + && (dict_table_is_encrypted(ib_table) || + ( + ib_table->keyring_encryption_info.page0_has_crypt_data && + ib_table->keyring_encryption_info.is_encryption_in_progress() + ) + ) + && ib_table->file_unreadable + && !dict_table_is_discarded(ib_table)) { /* Mark this table as corrupted, so the drop table or force recovery can still use it, but not others. */ + if (space() == NULL) { + int ret_err= HA_ERR_TABLE_CORRUPT; + if (ib_table->keyring_encryption_info.keyring_encryption_key_is_missing || + ib_table->keyring_encryption_info.page0_has_crypt_data) { + /* Proper error message has been already printed by Datafile::validate_first_page, + * thus we do not print anything here */ + ret_err= HA_ERR_DECRYPTION_FAILED; + } + else + my_error(ER_CANNOT_FIND_KEY_IN_KEYRING, MYF(0)); - dict_table_close(ib_table, FALSE, FALSE); - ib_table = NULL; - is_part = NULL; + dict_table_close(ib_table, FALSE, FALSE); + ib_table = NULL; + is_part = NULL; - free_share(m_share); - my_error(ER_CANNOT_FIND_KEY_IN_KEYRING, MYF(0)); + free_share(m_share); - DBUG_RETURN(HA_ERR_TABLE_CORRUPT); + DBUG_RETURN(ret_err); + } } if (NULL == ib_table) { @@ -6767,11 +6944,16 @@ ha_innobase::open( innobase_copy_frm_flags_from_table_share(ib_table, table->s); - dict_stats_init(ib_table); + if (ib_table->is_readable()) { + dict_stats_init(ib_table); + } else { + ib_table->stat_initialized = 1; + } MONITOR_INC(MONITOR_TABLE_OPEN); bool no_tablespace; + bool encrypted = false; if (dict_table_is_discarded(ib_table)) { @@ -6786,27 +6968,62 @@ ha_innobase::open( no_tablespace = false; - } else if (ib_table->ibd_file_missing) { + } else if (!ib_table->is_readable()) { - ib_senderrf( - thd, IB_LOG_LEVEL_WARN, - ER_TABLESPACE_MISSING, norm_name); + if (space()) { + if (space()->crypt_data && space()->crypt_data->is_encrypted()) { + /* This means that tablespace was found but we could not + decrypt encrypted page. */ + no_tablespace = true; + encrypted = true; + } else { + no_tablespace = true; + } + } else { + ib_senderrf( + thd, IB_LOG_LEVEL_WARN, + ER_TABLESPACE_MISSING, norm_name); - /* This means we have no idea what happened to the tablespace - file, best to play it safe. */ + /* This means we have no idea what happened to the tablespace + file, best to play it safe. */ - no_tablespace = true; + no_tablespace = true; + } } else { no_tablespace = false; } - + if (!thd_tablespace_op(thd) && no_tablespace) { free_share(m_share); set_my_errno(ENOENT); + int ret_err = HA_ERR_TABLESPACE_MISSING; + + /* If table has no talespace but it has crypt data, check + is tablespace made unaccessible because encryption service + or used key_id is not available. */ + if (encrypted) { + bool warning_pushed = false; + + /* If table is marked as encrypted then we push + warning if it has not been already done as used + key_id might be found but it is incorrect. */ + if (!warning_pushed) { + push_warning_printf( + thd, Sql_condition::SL_WARNING, + HA_ERR_DECRYPTION_FAILED, + "Table %s in file %s is encrypted but encryption service or" + " used key_id is not available. " + " Can't continue reading table.", + table_share->table_name.str, + space()->chain.start->name); + ret_err = HA_ERR_DECRYPTION_FAILED; + } + } + dict_table_close(ib_table, FALSE, FALSE); - DBUG_RETURN(HA_ERR_TABLESPACE_MISSING); + DBUG_RETURN(ret_err); } m_prebuilt = row_create_prebuilt(ib_table, table->s->reclength); @@ -6976,7 +7193,7 @@ ha_innobase::open( /* Only if the table has an AUTOINC column. */ if (m_prebuilt->table != NULL - && !m_prebuilt->table->ibd_file_missing + && m_prebuilt->table->is_readable() && table->found_next_number_field != NULL) { dict_table_autoinc_lock(m_prebuilt->table); @@ -9923,6 +10140,17 @@ ha_innobase::general_fetch( DB_FORCED_ABORT, 0, m_user_thd)); } + if (m_prebuilt->table->is_readable()) { + } else if (m_prebuilt->table->corrupted) { + DBUG_RETURN(HA_ERR_CRASHED); + } else { + FilSpace space(m_prebuilt->table->space, true); + + DBUG_RETURN(space() + ? HA_ERR_DECRYPTION_FAILED + : HA_ERR_NO_SUCH_TABLE); + } + innobase_srv_conc_enter_innodb(m_prebuilt); dberr_t ret; @@ -10781,7 +11009,7 @@ and set the encryption flag in table flags @param[in,out] table table object @return on success DB_SUCCESS else DB_UNSPPORTED on failure */ dberr_t -create_table_info_t::enable_encryption(dict_table_t* table) { +create_table_info_t::enable_master_key_encryption(dict_table_t* table) { const char* encrypt = m_create_info->encrypt_type.str; @@ -10810,6 +11038,34 @@ create_table_info_t::enable_encryption(dict_table_t* table) { return(err); } +dberr_t +create_table_info_t::enable_keyring_encryption(dict_table_t *table, fil_encryption_t &keyring_encryption_option) { + + if (Encryption::is_no(m_create_info->encrypt_type.str)) + keyring_encryption_option= FIL_ENCRYPTION_OFF; + else if(Encryption::is_keyring(m_create_info->encrypt_type.str) || + (srv_encrypt_tables == SRV_ENCRYPT_TABLES_ONLINE_TO_KEYRING)) { + + // Check if keyring is up and the key exists in keyring was already done in encryption option validation + keyring_encryption_option= Encryption::is_keyring(m_create_info->encrypt_type.str) + ? FIL_ENCRYPTION_ON + : FIL_ENCRYPTION_DEFAULT; + DICT_TF2_FLAG_SET(table, DICT_TF2_ENCRYPTION); + + uint tablespace_key_version; + byte *tablespace_key; + Encryption::get_latest_tablespace_key_or_create_new_one(m_create_info->encryption_key_id, &tablespace_key_version, &tablespace_key); + if (tablespace_key == NULL) { + my_printf_error(ER_ILLEGAL_HA_CREATE_OPTION, + "Seems that keyring is down. It is not possible to create encrypted tables " + " without keyring. Please install a keyring and try again.", MYF(0)); + return(DB_UNSUPPORTED); + } else + my_free(tablespace_key); + } + return DB_SUCCESS; +} + /** Create a table definition to an InnoDB database. @return ER_* level error */ inline MY_ATTRIBUTE((warn_unused_result)) @@ -10835,6 +11091,7 @@ create_table_info_t::create_table_def() ulint num_v = 0; ulint space_id = 0; ulint actual_n_cols; + fil_encryption_t keyring_encryption_option= FIL_ENCRYPTION_DEFAULT; DBUG_ENTER("create_table_def"); DBUG_PRINT("enter", ("table_name: %s", m_table_name)); @@ -11136,9 +11393,14 @@ create_table_info_t::create_table_def() ut_ad(trx_state_eq(m_trx, TRX_STATE_NOT_STARTED)); - err = enable_encryption(table); + + err = (Encryption::is_master_key_encryption(m_create_info->encrypt_type.str)) + ? enable_master_key_encryption(table) + : enable_keyring_encryption(table, keyring_encryption_option); + if (err != DB_SUCCESS) { dict_mem_table_free(table); + mem_heap_free(heap); goto error_ret; } @@ -11167,7 +11429,7 @@ create_table_info_t::create_table_def() dict_table_assign_new_id(table, m_trx); /* Create temp tablespace if configured. */ - err = dict_build_tablespace_for_table(table); + err = dict_build_tablespace_for_table(table, NULL); if (err == DB_SUCCESS) { /* Temp-table are maintained in memory and so @@ -11226,8 +11488,13 @@ create_table_info_t::create_table_def() } if (err == DB_SUCCESS) { + CreateInfoEncryptionKeyId create_info_encryption_key_id(m_create_info->was_encryption_key_id_set, + m_create_info->encryption_key_id); + err = row_create_table_for_mysql( - table, algorithm, m_trx, false); + table, algorithm, m_trx, false, + keyring_encryption_option, + create_info_encryption_key_id); } if (err == DB_IO_NO_PUNCH_HOLE_FS) { @@ -11852,12 +12119,9 @@ create_table_info_t::create_option_compression_is_valid() return(true); } -enum srv_encrypt_tables_values { - SRV_ENCRYPT_TABLES_OFF = 0, - SRV_ENCRYPT_TABLES_ON = 1, - SRV_ENCRYPT_TABLES_FORCE = 2, -}; -static const char* srv_encrypt_tables_names[] = { "OFF", "ON", "FORCE", 0 }; +static const char* srv_encrypt_tables_names[] = { "OFF", "ON", "FORCE", "KEYRING_ON", "KEYRING_FORCE", + "ONLINE_TO_KEYRING", "ONLINE_TO_KEYRING_FORCE", + "ONLINE_FROM_KEYRING_TO_UNENCRYPTED", 0 }; /** Validate ENCRYPTION option. @return true if valid, false if not. */ @@ -11877,17 +12141,52 @@ create_table_info_t::create_option_encryption_is_valid() const } } + bool table_is_keyring = Encryption::is_keyring(m_create_info->encrypt_type.str); + + if (table_is_keyring) { + if (!m_allow_file_per_table) { + my_printf_error(ER_ILLEGAL_HA_CREATE_OPTION, + "InnoDB: KEYRING requires innodb_file_per_table.", MYF(0)); + return (false); + } + + /* Currently we do not support keyring encryption for + spatial indexes thus do not allow creating table with forced + encryption */ + + for(ulint i = 0; i < m_form->s->keys; i++) { + const KEY* key = m_form->key_info + i; + if (key->flags & HA_SPATIAL) { + my_printf_error(ER_ILLEGAL_HA_CREATE_OPTION, + "InnoDB: ENCRYPTED='KEYRING' not supported for table because " + "it contains spatial index.", MYF(0)); + return(false); + } + } + } bool table_is_encrypted = !Encryption::is_none(m_create_info->encrypt_type.str); if (srv_encrypt_tables == SRV_ENCRYPT_TABLES_FORCE - && Encryption::none_explicitly_specified(m_create_info->encrypt_type.str)) { + && (Encryption::is_no(m_create_info->encrypt_type.str) || + Encryption::is_keyring(m_create_info->encrypt_type.str))) { my_printf_error(ER_INVALID_ENCRYPTION_OPTION, - "InnoDB: Only ENCRYPTED tables can be created with " + "InnoDB: Only Master Key encrypted tables (ENCRYPTION=\'Y\') can be created with " "innodb_encrypt_tables=FORCE.", MYF(0)); return(false); } + if (srv_encrypt_tables == SRV_ENCRYPT_TABLES_KEYRING_FORCE + && (!Encryption::is_keyring(m_create_info->encrypt_type.str) + && !(Encryption::is_master_key_encryption(m_create_info->encrypt_type.str) && + m_create_info->options & HA_LEX_CREATE_TMP_TABLE)) + && !(m_create_info->options & HA_LEX_CREATE_INTERNAL_TMP_TABLE)) { + my_printf_error(ER_INVALID_ENCRYPTION_OPTION, + "InnoDB: Only KEYRING encrypted tables (ENCRYPTION=\'KEYRING\') can be created with " + "innodb_encrypt_tables=KEYRING_FORCE.", MYF(0)); + return(false); + } + if (m_use_shared_space) { space_id = fil_space_get_id_by_name(m_create_info->tablespace); @@ -12117,6 +12416,7 @@ create_table_info_t::create_options_are_invalid() } static const LEX_STRING yes_string = { C_STRING_WITH_LEN("Y") }; +static const LEX_STRING keyring_string = { C_STRING_WITH_LEN("KEYRING") }; void ha_innobase::adjust_create_info_for_frm( HA_CREATE_INFO* create_info) @@ -12124,16 +12424,54 @@ ha_innobase::adjust_create_info_for_frm( bool is_intrinsic = (create_info->options & HA_LEX_CREATE_INTERNAL_TMP_TABLE) != 0; + bool is_tmp = + (create_info->options & HA_LEX_CREATE_TMP_TABLE) != 0; + /* If table is intrinsic, it will use encryption for table based on temporary tablespace encryption property. For non-intrinsic tables without explicit encryption attribute, table will be forced to be encrypted if innodb_encrypt_tables=ON/FORCE */ if (create_info->encrypt_type.length == 0 - && create_info->encrypt_type.str == NULL - && ((is_intrinsic && srv_tmp_space.is_encrypted()) - || (!is_intrinsic - && srv_encrypt_tables != SRV_ENCRYPT_TABLES_OFF))) { - create_info->encrypt_type = yes_string; + && create_info->encrypt_type.str == NULL) { + if ((!is_intrinsic && (srv_encrypt_tables == SRV_ENCRYPT_TABLES_ON || + srv_encrypt_tables == SRV_ENCRYPT_TABLES_FORCE || + (is_tmp && + (srv_encrypt_tables == SRV_ENCRYPT_TABLES_KEYRING_ON || + srv_encrypt_tables == SRV_ENCRYPT_TABLES_KEYRING_FORCE)))) + || + (is_intrinsic && srv_tmp_space.is_encrypted()) + ) { + create_info->encrypt_type = yes_string; + } else if (!is_intrinsic && + (srv_encrypt_tables == SRV_ENCRYPT_TABLES_KEYRING_ON || + srv_encrypt_tables == SRV_ENCRYPT_TABLES_KEYRING_FORCE || + srv_encrypt_tables == SRV_ENCRYPT_TABLES_ONLINE_TO_KEYRING_FORCE)) { + create_info->encrypt_type = keyring_string; + } + } + + LEX_STRING* encrypt_type = &create_info->encrypt_type; + + if (false == create_info->was_encryption_key_id_set) { + if (Encryption::is_keyring(encrypt_type->str) || + (encrypt_type->length == 0 && srv_encrypt_tables == SRV_ENCRYPT_TABLES_ONLINE_TO_KEYRING)) { + create_info->encryption_key_id = THDVAR(current_thd, default_encryption_key_id); + create_info->was_encryption_key_id_set = true; + } + } else if (Encryption::is_master_key_encryption(encrypt_type->str) || Encryption::is_no(encrypt_type->str)) { + // if it is encrypted table with Master key encryption or marked as not to be encrypted and alter table + // does not have ENCRYPTION_KEY_ID - mark encryption key id as not set. + + push_warning_printf( + current_thd, Sql_condition::SL_WARNING, + HA_WRONG_CREATE_OPTION, + Encryption::is_no(encrypt_type->str) + ? "InnoDB: Ignored ENCRYPTION_KEY_ID %u when encryption is disabled." + : "InnoDB: Ignored ENCRYPTION_KEY_ID %u when Master Key encryption is enabled.", + create_info->encryption_key_id + ); + create_info->encryption_key_id = FIL_DEFAULT_ENCRYPTION_KEY; + create_info->was_encryption_key_id_set = false; } } @@ -12320,6 +12658,14 @@ create_table_info_t::innobase_table_flags() my_error(ER_INVALID_ENCRYPTION_OPTION, MYF(0)); DBUG_RETURN(false); } + + if (m_use_shared_space && !m_use_file_per_table) { + /* Can't encrypt shared tablespace with keyring encryption */ + if (Encryption::is_keyring(encryption)) { + my_error(ER_TABLESPACE_CANNOT_ENCRYPT, MYF(0)); + DBUG_RETURN(false); + } + } } /* Check if there are any FTS indexes defined on this table. */ @@ -13376,7 +13722,7 @@ ha_innobase::discard_or_import_tablespace( user may want to set the DISCARD flag in order to IMPORT a new tablespace. */ - if (dict_table->ibd_file_missing) { + if (!dict_table->is_readable()) { ib_senderrf( m_prebuilt->trx->mysql_thd, IB_LOG_LEVEL_WARN, ER_TABLESPACE_MISSING, @@ -13386,7 +13732,7 @@ ha_innobase::discard_or_import_tablespace( err = row_discard_tablespace_for_mysql( dict_table->name.m_name, m_prebuilt->trx); - } else if (!dict_table->ibd_file_missing) { + } else if (dict_table->is_readable()) { /* Commit the transaction in order to release the table lock. */ trx_commit_for_mysql(m_prebuilt->trx); @@ -13762,7 +14108,8 @@ validate_create_tablespace_info( err = Encryption::validate(alter_info->encrypt_type.str); - if (err == DB_UNSUPPORTED) { + if (err == DB_UNSUPPORTED || + Encryption::is_keyring(alter_info->encrypt_type.str)) { my_error(ER_INVALID_ENCRYPTION_OPTION, MYF(0)); return(HA_WRONG_CREATE_OPTION); } @@ -13911,8 +14258,9 @@ innobase_create_tablespace( bool zipped = (zip_size != UNIV_PAGE_SIZE); page_size_t page_size(zip_size, UNIV_PAGE_SIZE, zipped); bool atomic_blobs = page_size.is_compressed(); - bool is_encrypted = (alter_info->encrypt - && !Encryption::is_none(alter_info->encrypt_type.str)); + bool is_encrypted = ((alter_info->encrypt + && (!Encryption::is_none(alter_info->encrypt_type.str) || + (srv_encrypt_tables == SRV_ENCRYPT_TABLES_ONLINE_TO_KEYRING && !Encryption::is_no(alter_info->encrypt_type.str))))); /* Create the filespace flags */ ulint fsp_flags = fsp_flags_init( @@ -13924,7 +14272,7 @@ innobase_create_tablespace( is_encrypted); /* Create encrypted tablespace if needed */ tablespace.set_flags(fsp_flags); - err = dict_build_tablespace(&tablespace); + err = dict_build_tablespace(&tablespace, NULL); if (err != DB_SUCCESS) { error = convert_error_code_to_mysql(err, 0, NULL); trx_rollback_for_mysql(trx); @@ -14458,7 +14806,7 @@ ha_innobase::records( *num_rows = HA_POS_ERROR; DBUG_RETURN(HA_ERR_NO_SUCH_TABLE); - } else if (m_prebuilt->table->ibd_file_missing) { + } else if (m_prebuilt->table->file_unreadable) { ib_senderrf( m_user_thd, IB_LOG_LEVEL_ERROR, ER_TABLESPACE_MISSING, @@ -15627,7 +15975,8 @@ ha_innobase::check( DBUG_RETURN(HA_ADMIN_CORRUPT); - } else if (m_prebuilt->table->ibd_file_missing) { + } else if (m_prebuilt->table->file_unreadable && + fil_space_get(m_prebuilt->table->space) == NULL) { ib_senderrf( thd, IB_LOG_LEVEL_ERROR, @@ -15693,7 +16042,7 @@ ha_innobase::check( &srv_fatal_semaphore_wait_threshold, SRV_SEMAPHORE_WAIT_EXTENSION); - bool valid = btr_validate_index( + dberr_t err = btr_validate_index( index, m_prebuilt->trx, false); /* Restore the fatal lock wait timeout after @@ -15702,16 +16051,27 @@ ha_innobase::check( &srv_fatal_semaphore_wait_threshold, SRV_SEMAPHORE_WAIT_EXTENSION); - if (!valid) { + if (err != DB_SUCCESS) { is_ok = false; - push_warning_printf( - thd, - Sql_condition::SL_WARNING, - ER_NOT_KEYFILE, - "InnoDB: The B-tree of" - " index %s is corrupted.", - index->name()); + if (err == DB_DECRYPTION_FAILED) { + push_warning_printf( + thd, + Sql_condition::SL_WARNING, + ER_NO_SUCH_TABLE, + "Table %s is encrypted but encryption service or" + " used key_id is not available. " + " Can't continue checking table.", + index->table->name.m_name); + } else { + push_warning_printf( + thd, + Sql_condition::SL_WARNING, + ER_NOT_KEYFILE, + "InnoDB: The B-tree of" + " index %s is corrupted.", + index->name()); + } continue; } } @@ -15775,13 +16135,24 @@ ha_innobase::check( break; } if (ret != DB_SUCCESS) { - /* Assume some kind of corruption. */ - push_warning_printf( - thd, Sql_condition::SL_WARNING, - ER_NOT_KEYFILE, - "InnoDB: The B-tree of" - " index %s is corrupted.", - index->name()); + if (ret == DB_DECRYPTION_FAILED) { + push_warning_printf( + thd, + Sql_condition::SL_WARNING, + ER_NO_SUCH_TABLE, + "Table %s is encrypted but encryption service or" + " used key_id is not available. " + " Can't continue checking table.", + index->table->name.m_name); + } else { + /* Assume some kind of corruption. */ + push_warning_printf( + thd, Sql_condition::SL_WARNING, + ER_NOT_KEYFILE, + "InnoDB: The B-tree of" + " index %s is corrupted.", + index->name()); + } is_ok = false; dict_set_corrupted( index, m_prebuilt->trx, "CHECK TABLE-check index"); @@ -17980,8 +18351,13 @@ ha_innobase::get_error_message( { trx_t* trx = check_trx_exists(ha_thd()); - buf->copy(trx->detailed_error, (uint) strlen(trx->detailed_error), - system_charset_info); + if (error == HA_ERR_DECRYPTION_FAILED) { + const char *msg = "Table encrypted but decryption failed. This could be because correct encryption management plugin is not loaded, used encryption key is not available or encryption method does not match."; + buf->copy(msg, (uint)strlen(msg), system_charset_info); + } else { + buf->copy(trx->detailed_error, (uint) strlen(trx->detailed_error), + system_charset_info); + } return(FALSE); } @@ -20786,6 +21162,117 @@ innodb_srv_empty_free_list_algorithm_validate( return(0); } +static int +innodb_encryption_threads_validate( +/*=================================*/ + THD* thd, /*!< in: thread handle */ + struct st_mysql_sys_var* var, /*!< in: pointer to system + variable */ + void* save, /*!< out: immediate result + for update function */ + struct st_mysql_value* value) /*!< in: incoming string */ +{ + long long intbuf; + + DBUG_ENTER("innodb_encryption_threads_validate"); + + if (value->val_int(value, &intbuf)) { + /* The value is NULL. That is invalid. */ + DBUG_RETURN(1); + } + + if (srv_n_fil_crypt_threads == 0 && intbuf > 0) { // We are starting encryption threads, we must lock + // the keyring plugins + uint number_of_keyrings_locked= lock_keyrings(NULL); + + if (number_of_keyrings_locked == 0) { + my_printf_error(ER_WRONG_ARGUMENTS, "InnoDB: cannot enable encryption threads, " + "keyring plugin is not available", MYF(0)); + DBUG_RETURN(1); + } + if (Encryption::is_keyring_alive() == false) { + my_printf_error(ER_WRONG_ARGUMENTS, "InnoDB: keyring plugin is installed but it seems it was not " + "properly initialized. Cannot enable encryption threads.", MYF(0)); + unlock_keyrings(NULL); + DBUG_RETURN(1); + } + } else if (intbuf == 0 && srv_n_fil_crypt_threads > 0) {// We are disabling encryption threads, unlock the keyrings + unlock_keyrings(NULL); + } + + *reinterpret_cast(save) = static_cast(intbuf); + + DBUG_RETURN(0); +} + +/****************************************************************** +Update the system variable innodb_encryption_threads */ +static +void +innodb_encryption_threads_update( +/*=============================*/ + THD* thd, /*!< in: thread handle */ + struct st_mysql_sys_var* var, /*!< in: pointer to + system variable */ + void* var_ptr,/*!< out: where the + formal string goes */ + const void* save) /*!< in: immediate result + from check function */ +{ + fil_crypt_set_thread_cnt(*static_cast(save)); +} + +/****************************************************************** +Update the system variable innodb_encryption_rotate_key_age */ +static +void +innodb_encryption_rotate_key_age_update( +/*====================================*/ + THD* thd, /*!< in: thread handle */ + struct st_mysql_sys_var* var, /*!< in: pointer to + system variable */ + void* var_ptr,/*!< out: where the + formal string goes */ + const void* save) /*!< in: immediate result + from check function */ +{ + fil_crypt_set_rotate_key_age(*static_cast(save)); +} + +/****************************************************************** +Update the system variable innodb_encryption_rotation_iops */ +static +void +innodb_encryption_rotation_iops_update( +/*===================================*/ + THD* thd, /*!< in: thread handle */ + struct st_mysql_sys_var* var, /*!< in: pointer to + system variable */ + void* var_ptr,/*!< out: where the + formal string goes */ + const void* save) /*!< in: immediate result + from check function */ +{ + fil_crypt_set_rotation_iops(*static_cast(save)); +} + +/****************************************************************** +Update the system variable innodb_encrypt_tables*/ +static +void +innodb_encrypt_tables_update( +/*=========================*/ + THD* thd, /*!< in: thread handle */ + struct st_mysql_sys_var* var, /*!< in: pointer to + system variable */ + void* var_ptr,/*!< out: where the + formal string goes */ + const void* save) /*!< in: immediate result + from check function */ +{ + fil_crypt_set_encrypt_tables(*static_cast(save)); +} + /** Update the innodb_log_checksums parameter. @param[in] thd thread handle @param[in] var system variable @@ -21238,8 +21725,8 @@ static MYSQL_SYSVAR_ENUM(encrypt_tables, srv_encrypt_tables, "specified. When it's set to FORCE, only encrypted tables can be created." "The FORCE setting also disables non inplace alteration of unencrypted," " tables without encrypting them in the process.", - NULL, - NULL, + innodb_encrypt_tables_validate, + innodb_encrypt_tables_update, 0, &srv_encrypt_tables_typelib); @@ -22003,6 +22490,32 @@ static MYSQL_SYSVAR_BOOL(encrypt_online_alter_logs, "Encrypt online alter logs.", NULL, NULL, FALSE); +static MYSQL_SYSVAR_UINT(encryption_threads, srv_n_fil_crypt_threads, + PLUGIN_VAR_RQCMDARG, + "Number of threads performing background key rotation and " + "scrubbing", + innodb_encryption_threads_validate, + innodb_encryption_threads_update, + srv_n_fil_crypt_threads, 0, UINT_MAX32, 0); + +static MYSQL_SYSVAR_UINT(encryption_rotate_key_age, + srv_fil_crypt_rotate_key_age, + PLUGIN_VAR_RQCMDARG, + "Key rotation - re-encrypt in background " + "all pages that were encrypted with a key that " + "many (or more) versions behind. Value 0 indicates " + "that key rotation is disabled.", + NULL, + innodb_encryption_rotate_key_age_update, + 1, 0, UINT_MAX32, 0); + +static MYSQL_SYSVAR_UINT(encryption_rotation_iops, srv_n_fil_crypt_iops, + PLUGIN_VAR_RQCMDARG, + "Use this many iops for background key rotation", + NULL, + innodb_encryption_rotation_iops_update, + srv_n_fil_crypt_iops, 0, UINT_MAX32, 0); + static struct st_mysql_sys_var* innobase_system_variables[]= { MYSQL_SYSVAR(api_trx_level), MYSQL_SYSVAR(api_bk_commit_interval), @@ -22203,7 +22716,12 @@ static struct st_mysql_sys_var* innobase_system_variables[]= { MYSQL_SYSVAR(compressed_columns_zip_level), MYSQL_SYSVAR(compressed_columns_threshold), MYSQL_SYSVAR(ft_ignore_stopwords), + /* Encryption feature */ MYSQL_SYSVAR(encrypt_online_alter_logs), + MYSQL_SYSVAR(encryption_threads), + MYSQL_SYSVAR(encryption_rotate_key_age), + MYSQL_SYSVAR(encryption_rotation_iops), + MYSQL_SYSVAR(default_encryption_key_id), MYSQL_SYSVAR(encrypt_tables), NULL }; @@ -22259,8 +22777,8 @@ i_s_innodb_sys_foreign_cols, i_s_innodb_sys_tablespaces, i_s_innodb_sys_datafiles, i_s_innodb_changed_pages, -i_s_innodb_sys_virtual - +i_s_innodb_sys_virtual, +i_s_innodb_tablespaces_encryption mysql_declare_plugin_end; /** @brief Initialize the default value of innodb_commit_concurrency. @@ -23133,3 +23651,43 @@ innodb_buffer_pool_size_validate( return(0); } + +static +int +innodb_encrypt_tables_validate( +/*=================================*/ + THD* thd, /*!< in: thread handle */ + struct st_mysql_sys_var* var, /*!< in: pointer to system + variable */ + void* save, /*!< out: immediate result + for update function */ + struct st_mysql_value* value) /*!< in: incoming string */ +{ + const char* innodb_encrypt_tables_input; + char buff[STRING_BUFFER_USUAL_SIZE]; + int len = sizeof(buff); + + ut_a(save != NULL); + ut_a(value != NULL); + + innodb_encrypt_tables_input= value->val_str(value, buff, &len); + + bool legit_value= false; + uint use = 0; + for (; + use < array_elements(srv_encrypt_tables_names); + use++) { + if (!innobase_strcasecmp( + innodb_encrypt_tables_input, + srv_encrypt_tables_names[use])) { + legit_value = true; + break; + } + } + + if (legit_value == false) + return 1; + *static_cast(save)= use; + + return 0; +} diff --git a/storage/innobase/handler/ha_innodb.h b/storage/innobase/handler/ha_innodb.h index 4d3c25b20a8f..d905cbe4e0d1 100644 --- a/storage/innobase/handler/ha_innodb.h +++ b/storage/innobase/handler/ha_innodb.h @@ -814,12 +814,21 @@ class create_table_info_t const char* name, ibool set_lower_case); - /** If encryption is requested, check for master key availability + /** If master key encryption is requested, check for master key availability and set the encryption flag in table flags @param[in,out] table table object @return on success DB_SUCCESS else DB_UNSPPORTED on failure */ - dberr_t enable_encryption(dict_table_t* table); + dberr_t enable_master_key_encryption(dict_table_t* table); + + /** If keyring encryption is requested, check for tablespace's key availability + and set the encryption flag in table flags + @param[in,out] table table object + @param[in,out] rotated_keys_encryption_option contains appropriate + FIL_ENCRYPTION_(ON/DEFAULT/OFF) + @return on success DB_SUCCESS else DB_UNSPPORTED on failure */ + + dberr_t enable_keyring_encryption(dict_table_t * table,fil_encryption_t &rotated_keys_encryption_option); private: /** Parses the table name into normal name and either temp path or diff --git a/storage/innobase/handler/ha_innopart.cc b/storage/innobase/handler/ha_innopart.cc index 5982ac9f99de..d4fd342d08b3 100644 --- a/storage/innobase/handler/ha_innopart.cc +++ b/storage/innobase/handler/ha_innopart.cc @@ -1089,7 +1089,7 @@ ha_innopart::open( no_tablespace = false; - } else if (ib_table->ibd_file_missing) { + } else if (ib_table->file_unreadable) { ib_senderrf( thd, IB_LOG_LEVEL_WARN, @@ -1275,7 +1275,7 @@ ha_innopart::open( /* Only if the table has an AUTOINC column. */ if (m_prebuilt->table != NULL - && !m_prebuilt->table->ibd_file_missing + && !m_prebuilt->table->file_unreadable && table->found_next_number_field != NULL) { int error; diff --git a/storage/innobase/handler/handler0alter.cc b/storage/innobase/handler/handler0alter.cc index a593c757f44a..36802c1f1719 100644 --- a/storage/innobase/handler/handler0alter.cc +++ b/storage/innobase/handler/handler0alter.cc @@ -58,6 +58,10 @@ Smart ALTER TABLE #include "partition_info.h" #include "ha_innopart.h" +#include "fil0crypt.h" + +#include "create_info_encryption_key.h" + /** Operations for creating secondary indexes (no rebuild needed) */ static const Alter_inplace_info::HA_ALTER_FLAGS INNOBASE_ONLINE_CREATE = Alter_inplace_info::ADD_INDEX @@ -379,11 +383,26 @@ static MY_ATTRIBUTE((warn_unused_result)) bool innobase_need_rebuild( /*==================*/ - const Alter_inplace_info* ha_alter_info) + const Alter_inplace_info* ha_alter_info, + const TABLE* old_table) + { Alter_inplace_info::HA_ALTER_FLAGS alter_inplace_flags = ha_alter_info->handler_flags & ~(INNOBASE_INPLACE_IGNORE); + if (( + Encryption::is_no(ha_alter_info->create_info->encrypt_type.str) && + (Encryption::is_keyring(old_table->s->encrypt_type.str) || Encryption::is_empty(old_table->s->encrypt_type.str)) + ) || + ( + Encryption::is_keyring(ha_alter_info->create_info->encrypt_type.str) && + !Encryption::is_keyring(old_table->s->encrypt_type.str) + ) || + ha_alter_info->create_info->encryption_key_id != old_table->s->encryption_key_id + + ) + return true; + if (alter_inplace_flags == Alter_inplace_info::CHANGE_CREATE_OPTION && !(ha_alter_info->create_info->used_fields @@ -555,13 +574,13 @@ ha_innobase::check_if_supported_inplace_alter( DBUG_RETURN(HA_ALTER_INPLACE_NOT_SUPPORTED); } - /* We don't support change encryption attribute with + /* We don't support change Mater Key encryption attribute with inplace algorithm. */ - const bool currently_encrypted = - m_prebuilt->table->flags2 & DICT_TF2_ENCRYPTION; + char* old_encryption = this->table->s->encrypt_type.str; char* new_encryption = altered_table->s->encrypt_type.str; - if (currently_encrypted == Encryption::is_none(new_encryption)) { + if (Encryption::is_master_key_encryption(old_encryption) != + Encryption::is_master_key_encryption(new_encryption)) { ha_alter_info->unsupported_reason = innobase_get_err_msg( ER_UNSUPPORTED_ALTER_ENCRYPTION_INPLACE); @@ -848,7 +867,7 @@ ha_innobase::check_if_supported_inplace_alter( operation is possible. */ } else if (((ha_alter_info->handler_flags & Alter_inplace_info::ADD_PK_INDEX) - || innobase_need_rebuild(ha_alter_info)) + || innobase_need_rebuild(ha_alter_info, altered_table)) && (innobase_fulltext_exist(altered_table) || innobase_spatial_exist(altered_table))) { /* Refuse to rebuild the table online, if @@ -2345,9 +2364,10 @@ innobase_create_key_defs( bool& add_fts_doc_id, /*!< in: whether we need to add new DOC ID column for FTS index */ - bool& add_fts_doc_idx) - /*!< in: whether we need to add new DOC ID - index for FTS index */ + bool& add_fts_doc_idx, + + const TABLE* table) + /*!heap, ha_alter_info, altered_table, ctx->num_to_add_index, num_fts_index, row_table_got_default_clust_index(ctx->new_table), - fts_doc_id_col, add_fts_doc_id, add_fts_doc_id_idx); + fts_doc_id_col, add_fts_doc_id, add_fts_doc_id_idx, old_table); new_clustered = DICT_CLUSTERED & index_defs[0].ind_type; @@ -4318,7 +4339,7 @@ prepare_inplace_alter_table_dict( /* This is not an online operation (LOCK=NONE). */ } else if (ctx->add_autoinc == ULINT_UNDEFINED && num_fts_index == 0 - && (!innobase_need_rebuild(ha_alter_info) + && (!innobase_need_rebuild(ha_alter_info, old_table) || !innobase_fulltext_exist(altered_table))) { /* InnoDB can perform an online operation (LOCK=NONE). */ } else { @@ -4335,7 +4356,7 @@ prepare_inplace_alter_table_dict( is just copied from old table and stored in indexdefs[0] */ DBUG_ASSERT(!add_fts_doc_id || new_clustered); DBUG_ASSERT(!!new_clustered == - (innobase_need_rebuild(ha_alter_info) + (innobase_need_rebuild(ha_alter_info, old_table) || add_fts_doc_id)); /* Allocate memory for dictionary index definitions */ @@ -4400,6 +4421,8 @@ prepare_inplace_alter_table_dict( ulint space_id = 0; ulint z = 0; const char* err_zip_dict_name = 0; + ulint key_id = FIL_DEFAULT_ENCRYPTION_KEY; + fil_encryption_t mode = FIL_ENCRYPTION_DEFAULT; if (!innobase_check_zip_dicts(altered_table, zip_dict_ids, ctx->trx, &err_zip_dict_name)) { @@ -4612,16 +4635,80 @@ prepare_inplace_alter_table_dict( const char* encrypt; encrypt = ha_alter_info->create_info->encrypt_type.str; - if (!(ctx->new_table->flags2 & DICT_TF2_USE_FILE_PER_TABLE) + key_id= ha_alter_info->create_info->encryption_key_id; + + // re-encrypting, check that key used to encrypt table is present + if (DICT_TF2_FLAG_SET(ctx->old_table, DICT_TF2_ENCRYPTION)) { + if (Encryption::is_master_key_encryption(old_table->s->encrypt_type.str)) { + // re-encrypting from master key encryption + /* Check if keyring is ready. */ + byte* master_key = NULL; + ulint master_key_id; + Encryption::Version version; + + Encryption::get_master_key(&master_key_id, + &master_key, + &version); + + if (master_key == NULL) { + dict_mem_table_free(ctx->new_table); + my_error(ER_CANNOT_FIND_KEY_IN_KEYRING, + MYF(0)); + goto new_clustered_failed; + } else { + my_free(master_key); + } + } else if (Encryption::is_keyring(old_table->s->encrypt_type.str) && + (old_table->s->encryption_key_id != ha_alter_info->create_info->encryption_key_id || Encryption::is_no(encrypt))) { + // it is KEYRING encryption - check if old's table encryption key is available + if (Encryption::tablespace_key_exists(old_table->s->encryption_key_id) == false) { + my_printf_error(ER_ILLEGAL_HA_CREATE_OPTION, + "Cannot find key to decrypt table to ALTER. Please make sure that keyring is installed " + " and key used to encrypt table is available.", MYF(0)); + goto new_clustered_failed; + } + } + } + + if (Encryption::is_no(encrypt)) + mode= FIL_ENCRYPTION_OFF; + else if (Encryption::is_keyring(encrypt) || + ((srv_encrypt_tables == SRV_ENCRYPT_TABLES_ONLINE_TO_KEYRING || + srv_encrypt_tables == SRV_ENCRYPT_TABLES_ONLINE_TO_KEYRING_FORCE) + && !Encryption::is_no(ha_alter_info->create_info->encrypt_type.str) + && !Encryption::is_master_key_encryption(encrypt)) || + ha_alter_info->create_info->was_encryption_key_id_set) { + mode= Encryption::is_keyring(encrypt) ? FIL_ENCRYPTION_ON + : FIL_ENCRYPTION_DEFAULT; + uint tablespace_key_version; + byte *tablespace_key; + + //TODO: Add checking for error returned from keyring function, not only checking if tablespace is null + Encryption::get_latest_tablespace_key_or_create_new_one(key_id, &tablespace_key_version, &tablespace_key); + if (tablespace_key == NULL) { + dict_mem_table_free(ctx->new_table); + my_printf_error(ER_ILLEGAL_HA_CREATE_OPTION, + "Seems that keyring is down. It is not possible to encrypt table" + " without keyring. Please install a keyring and try again.", MYF(0)); + goto new_clustered_failed; + } else + my_free(tablespace_key); + + if (mode == FIL_ENCRYPTION_ON || (mode == FIL_ENCRYPTION_DEFAULT && + (srv_encrypt_tables == SRV_ENCRYPT_TABLES_ONLINE_TO_KEYRING || + srv_encrypt_tables == SRV_ENCRYPT_TABLES_ONLINE_TO_KEYRING_FORCE))) + DICT_TF2_FLAG_SET(ctx->new_table, DICT_TF2_ENCRYPTION); + + } else if (!(ctx->new_table->flags2 & DICT_TF2_USE_FILE_PER_TABLE) && ha_alter_info->create_info->encrypt_type.length > 0 - && !Encryption::is_none(encrypt) + && Encryption::is_master_key_encryption(encrypt) && !DICT_TF2_FLAG_SET(ctx->old_table, DICT_TF2_ENCRYPTION)) { dict_mem_table_free( ctx->new_table); my_error(ER_TABLESPACE_CANNOT_ENCRYPT, MYF(0)); goto new_clustered_failed; - } else if (!Encryption::is_none(encrypt)) { + } else if (Encryption::is_master_key_encryption(encrypt)) { /* Set the encryption flag. */ byte* master_key = NULL; ulint master_key_id; @@ -4644,8 +4731,12 @@ prepare_inplace_alter_table_dict( } } + create_info_encryption_key_id.was_encryption_key_id_set = + ha_alter_info->create_info->was_encryption_key_id_set; + create_info_encryption_key_id.encryption_key_id = key_id; + error = row_create_table_for_mysql( - ctx->new_table, compression, ctx->trx, false); + ctx->new_table, compression, ctx->trx, false, mode, create_info_encryption_key_id); punch_hole_warning = (error == DB_IO_NO_PUNCH_HOLE_FS) @@ -4728,7 +4819,7 @@ prepare_inplace_alter_table_dict( add_cols, ctx->heap, prebuilt); ctx->add_cols = add_cols; } else { - DBUG_ASSERT(!innobase_need_rebuild(ha_alter_info)); + DBUG_ASSERT(!innobase_need_rebuild(ha_alter_info, old_table)); DBUG_ASSERT(old_table->s->primary_key == altered_table->s->primary_key); @@ -4809,7 +4900,7 @@ prepare_inplace_alter_table_dict( clustered index of the old table, later. */ if (new_clustered || !ctx->online - || user_table->ibd_file_missing + || !user_table->is_readable() || dict_table_is_discarded(user_table)) { /* No need to allocate a modification log. */ ut_ad(!ctx->add_index[a]->online_log); @@ -5538,6 +5629,41 @@ ha_innobase::prepare_inplace_alter_table( } } + if (indexed_table->is_readable()) { + } else { + if (indexed_table->corrupted) { + /* Handled below */ + } else { + FilSpace space(indexed_table->space, true); + + if (space()) { + String str; + const char* engine= table_type(); + + push_warning_printf( + m_user_thd, + Sql_condition::SL_WARNING, + HA_ERR_DECRYPTION_FAILED, + "Table %s in file %s is encrypted but encryption service or" + " used key_id is not available. " + " Can't continue reading table.", + table_share->table_name.str, + space()->chain.start->name); + + my_error(ER_GET_ERRMSG, MYF(0), HA_ERR_DECRYPTION_FAILED, str.c_ptr(), engine); + DBUG_RETURN(true); + } + } + } + + if (indexed_table->corrupted + || dict_table_get_first_index(indexed_table) == NULL + || dict_index_is_corrupted( + dict_table_get_first_index(indexed_table))) { + /* The clustered index is corrupted. */ + my_error(ER_CHECK_NO_SUCH_TABLE, MYF(0)); + DBUG_RETURN(true); + } /* Check if any index name is reserved. */ if (innobase_index_name_is_reserved( m_user_thd, @@ -5630,7 +5756,7 @@ ha_innobase::prepare_inplace_alter_table( flags. There are places where it is done afterwards, there are places where it isn't done. We need to inspect all code paths and check if encryption flag can be set in one place. */ - if (!Encryption::is_none( + if (Encryption::is_master_key_encryption( ha_alter_info->create_info->encrypt_type.str)) { /* Set the encryption flag. */ @@ -5644,6 +5770,8 @@ ha_innobase::prepare_inplace_alter_table( &version); if (master_key == NULL) { + my_error(ER_CANNOT_FIND_KEY_IN_KEYRING, + MYF(0)); goto err_exit_no_heap; } else { my_free(master_key); @@ -6011,7 +6139,7 @@ ha_innobase::prepare_inplace_alter_table( if (!(ha_alter_info->handler_flags & INNOBASE_ALTER_DATA) || ((ha_alter_info->handler_flags & ~INNOBASE_INPLACE_IGNORE) == Alter_inplace_info::CHANGE_CREATE_OPTION - && !innobase_need_rebuild(ha_alter_info))) { + && !innobase_need_rebuild(ha_alter_info, table))) { if (heap) { ha_alter_info->handler_ctx @@ -6296,7 +6424,7 @@ ha_innobase::inplace_alter_table( if ((ha_alter_info->handler_flags & ~INNOBASE_INPLACE_IGNORE) == Alter_inplace_info::CHANGE_CREATE_OPTION - && !innobase_need_rebuild(ha_alter_info)) { + && !innobase_need_rebuild(ha_alter_info, table)) { goto ok_exit; } @@ -6317,7 +6445,7 @@ ha_innobase::inplace_alter_table( ctx->m_stage = UT_NEW_NOKEY(ut_stage_alter_t(pk)); - if (m_prebuilt->table->ibd_file_missing + if (m_prebuilt->table->file_unreadable || dict_table_is_discarded(m_prebuilt->table)) { goto all_done; } @@ -6461,6 +6589,13 @@ ha_innobase::inplace_alter_table( get_error_key_name(m_prebuilt->trx->error_key_num, ha_alter_info, m_prebuilt->table)); break; + case DB_DECRYPTION_FAILED: { + String str; + const char* engine= table_type(); + get_error_message(HA_ERR_DECRYPTION_FAILED, &str); + my_error(ER_GET_ERRMSG, MYF(0), HA_ERR_DECRYPTION_FAILED, str.c_ptr(), engine); + break; + } default: my_error_innodb(error, table_share->table_name.str, @@ -7685,7 +7820,7 @@ commit_try_rebuild( /* The new table must inherit the flag from the "parent" table. */ if (dict_table_is_discarded(user_table)) { - rebuilt_table->ibd_file_missing = true; + rebuilt_table->set_file_unreadable(); rebuilt_table->flags2 |= DICT_TF2_DISCARDED; } @@ -8208,20 +8343,20 @@ alter_stats_rebuild( } #ifndef DBUG_OFF - bool ibd_file_missing_orig = false; + bool file_unreadable_orig = false; #endif /* DBUG_OFF */ DBUG_EXECUTE_IF( "ib_rename_index_fail2", - ibd_file_missing_orig = table->ibd_file_missing; - table->ibd_file_missing = TRUE; + file_unreadable_orig = table->file_unreadable; + table->set_file_unreadable(); ); dberr_t ret = dict_stats_update(table, DICT_STATS_RECALC_PERSISTENT); DBUG_EXECUTE_IF( "ib_rename_index_fail2", - table->ibd_file_missing = ibd_file_missing_orig; + table->file_unreadable = file_unreadable_orig; ); if (ret != DB_SUCCESS) { @@ -8352,6 +8487,19 @@ ha_innobase::commit_inplace_alter_table( = static_cast(*pctx); DBUG_ASSERT(ctx->prebuilt->trx == m_prebuilt->trx); + /* If decryption failed for old table or new table + fail here. */ + if ((!ctx->old_table->is_readable() + && fil_space_get(ctx->old_table->space)) + || (!ctx->new_table->is_readable() + && fil_space_get(ctx->new_table->space))) { + String str; + const char* engine= table_type(); + get_error_message(HA_ERR_DECRYPTION_FAILED, &str); + my_error(ER_GET_ERRMSG, MYF(0), HA_ERR_DECRYPTION_FAILED, str.c_ptr(), engine); + DBUG_RETURN(true); + } + /* Exclusively lock the table, to ensure that no other transaction is holding locks on the table while we change the table definition. The MySQL meta-data lock diff --git a/storage/innobase/handler/i_s.cc b/storage/innobase/handler/i_s.cc index ff15dbbcacdf..052c2fde33f1 100644 --- a/storage/innobase/handler/i_s.cc +++ b/storage/innobase/handler/i_s.cc @@ -58,6 +58,7 @@ Created July 18, 2007 Vasil Dimov #include "log0online.h" #include "btr0btr.h" #include "page0zip.h" +#include "fil0crypt.h" #include "fsp0sysspace.h" #include "ut0new.h" #include "dict0crea.h" @@ -9387,3 +9388,333 @@ i_s_files_table_fill( DBUG_RETURN(0); } + +/** TABLESPACES_ENCRYPTION ********************************************/ +/* Fields of the table INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION */ +static ST_FIELD_INFO innodb_tablespaces_encryption_fields_info[] = +{ +#define TABLESPACES_ENCRYPTION_SPACE 0 + {STRUCT_FLD(field_name, "SPACE"), + STRUCT_FLD(field_length, MY_INT32_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define TABLESPACES_ENCRYPTION_NAME 1 + {STRUCT_FLD(field_name, "NAME"), + STRUCT_FLD(field_length, MAX_FULL_NAME_LEN + 1), + STRUCT_FLD(field_type, MYSQL_TYPE_STRING), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_MAYBE_NULL), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define TABLESPACES_ENCRYPTION_ENCRYPTION_SCHEME 2 + {STRUCT_FLD(field_name, "ENCRYPTION_SCHEME"), + STRUCT_FLD(field_length, MY_INT32_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define TABLESPACES_ENCRYPTION_KEYSERVER_REQUESTS 3 + {STRUCT_FLD(field_name, "KEYSERVER_REQUESTS"), + STRUCT_FLD(field_length, MY_INT32_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define TABLESPACES_ENCRYPTION_MIN_KEY_VERSION 4 + {STRUCT_FLD(field_name, "MIN_KEY_VERSION"), + STRUCT_FLD(field_length, MY_INT32_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define TABLESPACES_ENCRYPTION_CURRENT_KEY_VERSION 5 + {STRUCT_FLD(field_name, "CURRENT_KEY_VERSION"), + STRUCT_FLD(field_length, MY_INT32_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define TABLESPACES_ENCRYPTION_KEY_ROTATION_PAGE_NUMBER 6 + {STRUCT_FLD(field_name, "KEY_ROTATION_PAGE_NUMBER"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED | MY_I_S_MAYBE_NULL), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define TABLESPACES_ENCRYPTION_KEY_ROTATION_MAX_PAGE_NUMBER 7 + {STRUCT_FLD(field_name, "KEY_ROTATION_MAX_PAGE_NUMBER"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED | MY_I_S_MAYBE_NULL), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define TABLESPACES_ENCRYPTION_CURRENT_KEY_ID 8 + {STRUCT_FLD(field_name, "CURRENT_KEY_ID"), + STRUCT_FLD(field_length, MY_INT32_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define TABLESPACES_ENCRYPTION_ROTATING_OR_FLUSHING 9 + {STRUCT_FLD(field_name, "ROTATING_OR_FLUSHING"), + STRUCT_FLD(field_length, 1), + STRUCT_FLD(field_type, MYSQL_TYPE_LONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + + END_OF_ST_FIELD_INFO +}; + +/**********************************************************************//** +Function to fill INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION +with information collected by scanning SYS_TABLESPACES table. +@param[in] thd thread handle +@param[in] space Tablespace +@param[in] table_to_fill I_S table to fill +@return 0 on success */ +static +int +i_s_dict_fill_tablespaces_encryption( + THD* thd, + fil_space_t* space, + TABLE* table_to_fill) +{ + Field** fields; + struct fil_space_crypt_status_t status; + + DBUG_ENTER("i_s_dict_fill_tablespaces_encryption"); + + fields = table_to_fill->field; + + fil_space_crypt_get_status(space, &status); + + /* If tablespace id does not match, we did not find + encryption information for this tablespace. */ + if (!space->crypt_data || space->id != status.space) { + goto skip; + } + + OK(fields[TABLESPACES_ENCRYPTION_SPACE]->store(space->id, true)); + + OK(field_store_string(fields[TABLESPACES_ENCRYPTION_NAME], + space->name)); + + OK(fields[TABLESPACES_ENCRYPTION_ENCRYPTION_SCHEME]->store( + status.scheme, true)); + OK(fields[TABLESPACES_ENCRYPTION_KEYSERVER_REQUESTS]->store( + status.keyserver_requests, true)); + OK(fields[TABLESPACES_ENCRYPTION_MIN_KEY_VERSION]->store( + status.min_key_version, true)); + OK(fields[TABLESPACES_ENCRYPTION_CURRENT_KEY_VERSION]->store( + status.current_key_version, true)); + OK(fields[TABLESPACES_ENCRYPTION_CURRENT_KEY_ID]->store( + status.key_id, true)); + OK(fields[TABLESPACES_ENCRYPTION_ROTATING_OR_FLUSHING]->store( + status.rotating || status.flushing, true)); + + if (status.rotating) { + fields[TABLESPACES_ENCRYPTION_KEY_ROTATION_PAGE_NUMBER]->set_notnull(); + OK(fields[TABLESPACES_ENCRYPTION_KEY_ROTATION_PAGE_NUMBER]->store( + status.rotate_next_page_number, true)); + fields[TABLESPACES_ENCRYPTION_KEY_ROTATION_MAX_PAGE_NUMBER]->set_notnull(); + OK(fields[TABLESPACES_ENCRYPTION_KEY_ROTATION_MAX_PAGE_NUMBER]->store( + status.rotate_max_page_number, true)); + } else { + fields[TABLESPACES_ENCRYPTION_KEY_ROTATION_PAGE_NUMBER] + ->set_null(); + fields[TABLESPACES_ENCRYPTION_KEY_ROTATION_MAX_PAGE_NUMBER] + ->set_null(); + } + + OK(schema_table_store_record(thd, table_to_fill)); + +skip: + DBUG_RETURN(0); +} +/*******************************************************************//** +Function to populate INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION table. +Loop through each record in TABLESPACES_ENCRYPTION, and extract the column +information and fill the INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION table. +@return 0 on success */ +static +int +i_s_tablespaces_encryption_fill_table( +/*===========================*/ + THD* thd, /*!< in: thread */ + TABLE_LIST* tables, /*!< in/out: tables to fill */ + Item* ) /*!< in: condition (not used) */ +{ + btr_pcur_t pcur; + const rec_t* rec; + mem_heap_t* heap; + mtr_t mtr; + bool found_space_0 = false; + + DBUG_ENTER("i_s_tablespaces_encryption_fill_table"); + RETURN_IF_INNODB_NOT_STARTED(tables->schema_table_name); + + /* deny access to user without PROCESS_ACL privilege */ + if (check_global_access(thd, SUPER_ACL)) { + DBUG_RETURN(0); + } + + heap = mem_heap_create(1000); + mutex_enter(&dict_sys->mutex); + mtr_start(&mtr); + + rec = dict_startscan_system(&pcur, &mtr, SYS_TABLESPACES); + + while (rec) { + const char* err_msg; + ulint space_id; + const char* name; + ulint flags; + + /* Extract necessary information from a SYS_TABLESPACES row */ + err_msg = dict_process_sys_tablespaces( + heap, rec, &space_id, &name, &flags); + + mtr_commit(&mtr); + mutex_exit(&dict_sys->mutex); + + if (space_id == 0) { + found_space_0 = true; + } + + fil_space_t* space = fil_space_acquire_silent(space_id); + + if (!err_msg && space) { + i_s_dict_fill_tablespaces_encryption( + thd, space, tables->table); + } else { + push_warning_printf(thd, Sql_condition::SL_WARNING, + ER_CANT_FIND_SYSTEM_REC, "%s", + err_msg); + } + + if (space) { + fil_space_release(space); + } + + mem_heap_empty(heap); + + /* Get the next record */ + mutex_enter(&dict_sys->mutex); + mtr_start(&mtr); + rec = dict_getnext_system(&pcur, &mtr); + } + + mtr_commit(&mtr); + mutex_exit(&dict_sys->mutex); + mem_heap_free(heap); + + if (found_space_0 == false) { + /* space 0 does for what ever unknown reason not show up + * in iteration above, add it manually */ + + fil_space_t* space = fil_space_acquire_silent(0); + + i_s_dict_fill_tablespaces_encryption( + thd, space, tables->table); + + fil_space_release(space); + } + + DBUG_RETURN(0); +} +/*******************************************************************//** +Bind the dynamic table INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION +@return 0 on success */ +static +int +innodb_tablespaces_encryption_init( +/*========================*/ + void* p) /*!< in/out: table schema object */ +{ + ST_SCHEMA_TABLE* schema; + + DBUG_ENTER("innodb_tablespaces_encryption_init"); + + schema = (ST_SCHEMA_TABLE*) p; + + schema->fields_info = innodb_tablespaces_encryption_fields_info; + schema->fill_table = i_s_tablespaces_encryption_fill_table; + + DBUG_RETURN(0); +} + +struct st_mysql_plugin i_s_innodb_tablespaces_encryption = +{ + /* the plugin type (a MYSQL_XXX_PLUGIN value) */ + /* int */ + STRUCT_FLD(type, MYSQL_INFORMATION_SCHEMA_PLUGIN), + + /* pointer to type-specific plugin descriptor */ + /* void* */ + STRUCT_FLD(info, &i_s_info), + + /* plugin name */ + /* const char* */ + STRUCT_FLD(name, "INNODB_TABLESPACES_ENCRYPTION"), + + /* plugin author (for SHOW PLUGINS) */ + /* const char* */ + STRUCT_FLD(author, "Google Inc"), + + /* general descriptive text (for SHOW PLUGINS) */ + /* const char* */ + STRUCT_FLD(descr, "InnoDB TABLESPACES_ENCRYPTION"), + + /* the plugin license (PLUGIN_LICENSE_XXX) */ + /* int */ + STRUCT_FLD(license, PLUGIN_LICENSE_BSD), + + /* the function to invoke when plugin is loaded */ + /* int (*)(void*); */ + STRUCT_FLD(init, innodb_tablespaces_encryption_init), + + /* the function to invoke when plugin is unloaded */ + /* int (*)(void*); */ + STRUCT_FLD(deinit, i_s_common_deinit), + + /* plugin version (for SHOW PLUGINS) */ + /* unsigned int */ + STRUCT_FLD(version, INNODB_VERSION_SHORT), + + /* struct st_mysql_show_var* */ + STRUCT_FLD(status_vars, NULL), + + /* struct st_mysql_sys_var** */ + STRUCT_FLD(system_vars, NULL), + + /* reserved for dependency checking */ + /* void* */ + STRUCT_FLD(__reserved1, NULL), + + /* Plugin flags */ + /* unsigned long */ + STRUCT_FLD(flags, 0UL) +}; + + diff --git a/storage/innobase/handler/i_s.h b/storage/innobase/handler/i_s.h index e3fb9f0b7383..0c31a726e7a9 100644 --- a/storage/innobase/handler/i_s.h +++ b/storage/innobase/handler/i_s.h @@ -59,6 +59,9 @@ extern struct st_mysql_plugin i_s_innodb_sys_tablespaces; extern struct st_mysql_plugin i_s_innodb_sys_datafiles; extern struct st_mysql_plugin i_s_innodb_changed_pages; extern struct st_mysql_plugin i_s_innodb_sys_virtual; +extern struct st_mysql_plugin i_s_innodb_tablespaces_encryption; +//extern struct st_maria_plugin i_s_innodb_tablespaces_scrubbing; + /** Fill handlerton based INFORMATION_SCHEMA.FILES table. @param[in,out] thd thread/connection descriptor diff --git a/storage/innobase/ibuf/ibuf0ibuf.cc b/storage/innobase/ibuf/ibuf0ibuf.cc index 950866ebf53e..040972cd49e5 100644 --- a/storage/innobase/ibuf/ibuf0ibuf.cc +++ b/storage/innobase/ibuf/ibuf0ibuf.cc @@ -504,7 +504,7 @@ ibuf_size_update( /******************************************************************//** Creates the insert buffer data structure at a database startup and initializes the data structures for the insert buffer. */ -void +dberr_t ibuf_init_at_db_start(void) /*=======================*/ { @@ -512,6 +512,7 @@ ibuf_init_at_db_start(void) mtr_t mtr; ulint n_used; page_t* header_page; + dberr_t error= DB_SUCCESS; ibuf = static_cast(ut_zalloc_nokey(sizeof(ibuf_t))); @@ -538,6 +539,10 @@ ibuf_init_at_db_start(void) header_page = ibuf_header_page_get(&mtr); + if (!header_page) { + return (DB_DECRYPTION_FAILED); + } + fseg_n_reserved_pages(header_page + IBUF_HEADER + IBUF_TREE_SEG_HEADER, &n_used, &mtr); ibuf_enter(&mtr); @@ -576,6 +581,7 @@ ibuf_init_at_db_start(void) ibuf->index->search_info = btr_search_info_create(ibuf->index->heap); ibuf->index->page = FSP_IBUF_TREE_ROOT_PAGE_NO; ut_d(ibuf->index->cached = TRUE); + return (error); } /*********************************************************************//** @@ -814,13 +820,21 @@ ibuf_bitmap_get_map_page_func( const page_size_t& page_size, const char* file, ulint line, - mtr_t* mtr) + mtr_t* mtr, + dberr_t *err = NULL) { buf_block_t* block; + dberr_t error = DB_SUCCESS; block = buf_page_get_gen(ibuf_bitmap_page_no_calc(page_id, page_size), page_size, RW_X_LATCH, NULL, BUF_GET, - file, line, mtr); + file, line, mtr, false, &error); + if (err != NULL) + *err = error; + + if (error != DB_SUCCESS) { + return NULL; + } buf_block_dbg_add_level(block, SYNC_IBUF_BITMAP); @@ -4994,8 +5008,13 @@ ibuf_check_bitmap_on_import( ibuf_enter(&mtr); - bitmap_page = ibuf_bitmap_get_map_page( - page_id_t(space_id, page_no), page_size, &mtr); + dberr_t err = DB_SUCCESS; + + bitmap_page = ibuf_bitmap_get_map_page_func(page_id_t(space_id, page_no), page_size, + __FILE__, __LINE__, &mtr, &err); + + if (err != DB_SUCCESS) + return err; if (buf_page_is_zeroes(bitmap_page, page_size)) { /* This means we got all-zero page instead of diff --git a/storage/innobase/include/btr0btr.h b/storage/innobase/include/btr0btr.h index 2ea9c64db032..c7ff26aee20d 100644 --- a/storage/innobase/include/btr0btr.h +++ b/storage/innobase/include/btr0btr.h @@ -209,9 +209,7 @@ btr_block_get_func( ulint mode, const char* file, ulint line, -# ifdef UNIV_DEBUG const dict_index_t* index, -# endif /* UNIV_DEBUG */ mtr_t* mtr); # ifdef UNIV_DEBUG @@ -234,7 +232,7 @@ btr_block_get_func( @param mtr mini-transaction handle @return the block descriptor */ # define btr_block_get(page_id, page_size, mode, index, mtr) \ - btr_block_get_func(page_id, page_size, mode, __FILE__, __LINE__, mtr) + btr_block_get_func(page_id, page_size, mode, __FILE__, __LINE__, index, mtr) # endif /* UNIV_DEBUG */ /** Gets a buffer page and declares its latching order level. @param page_id tablespace/page identifier @@ -681,8 +679,8 @@ btr_index_rec_validate( MY_ATTRIBUTE((warn_unused_result)); /**************************************************************//** Checks the consistency of an index tree. -@return true if ok */ -bool +@return DB_SUCCESS if ok, error code if not */ +dberr_t btr_validate_index( /*===============*/ dict_index_t* index, /*!< in: index */ diff --git a/storage/innobase/include/btr0btr.ic b/storage/innobase/include/btr0btr.ic index b9278d9c50fd..8c4f73560d24 100644 --- a/storage/innobase/include/btr0btr.ic +++ b/storage/innobase/include/btr0btr.ic @@ -52,17 +52,21 @@ btr_block_get_func( ulint mode, const char* file, ulint line, -# ifdef UNIV_DEBUG const dict_index_t* index, -# endif /* UNIV_DEBUG */ mtr_t* mtr) { buf_block_t* block; + dberr_t err=DB_SUCCESS; block = buf_page_get_gen( - page_id, page_size, mode, NULL, BUF_GET, file, line, mtr); - - SRV_CORRUPT_TABLE_CHECK(block, ; /* do nothing */); + page_id, page_size, mode, NULL, BUF_GET, file, line, mtr, false, &err); + + if (err == DB_DECRYPTION_FAILED) { + if (index && index->table) { + index->table->set_file_unreadable(); + } + } else + SRV_CORRUPT_TABLE_CHECK(block, ; /* do nothing */); if (block && mode != RW_NO_LATCH) { diff --git a/storage/innobase/include/btr0bulk.h b/storage/innobase/include/btr0bulk.h index a4d111afb9a2..15b576641ee0 100644 --- a/storage/innobase/include/btr0bulk.h +++ b/storage/innobase/include/btr0bulk.h @@ -80,7 +80,8 @@ class PageBulk m_total_data(0), #endif /* UNIV_DEBUG */ m_modify_clock(0), - m_flush_observer(observer) + m_flush_observer(observer), + m_err(DB_SUCCESS) { ut_ad(!dict_index_is_spatial(m_index)); } @@ -154,7 +155,7 @@ class PageBulk inline void release(); /** Start mtr and latch block */ - inline void latch(); + inline dberr_t latch(); /** Check if required space is available in the page for the rec to be inserted. We check fill factor & padding here. @@ -192,6 +193,11 @@ class PageBulk return(m_page_zip); } + dberr_t getError() + { + return(m_err); + } + /* Memory heap for internal allocation */ mem_heap_t* m_heap; @@ -252,6 +258,9 @@ class PageBulk /** Flush observer */ FlushObserver* m_flush_observer; + + /** Operation result DB_SUCCESS or error code */ + dberr_t m_err; }; typedef std::vector > diff --git a/storage/innobase/include/btr0cur.h b/storage/innobase/include/btr0cur.h index d8fd6c287c9b..1d07dc88ea97 100644 --- a/storage/innobase/include/btr0cur.h +++ b/storage/innobase/include/btr0cur.h @@ -156,7 +156,7 @@ to node pointer page number fields on the upper levels of the tree! Note that if mode is PAGE_CUR_LE, which is used in inserts, then cursor->up_match and cursor->low_match both will have sensible values. If mode is PAGE_CUR_GE, then up_match will a have a sensible value. */ -void +dberr_t btr_cur_search_to_nth_level( /*========================*/ dict_index_t* index, /*!< in: index */ @@ -223,7 +223,7 @@ btr_cur_search_to_nth_level_with_no_latch( /*****************************************************************//** Opens a cursor at either end of an index. */ -void +dberr_t btr_cur_open_at_index_side_func( /*============================*/ bool from_left, /*!< in: true if open to the low end, diff --git a/storage/innobase/include/btr0pcur.h b/storage/innobase/include/btr0pcur.h index eda78f73f237..baf2e63269c0 100644 --- a/storage/innobase/include/btr0pcur.h +++ b/storage/innobase/include/btr0pcur.h @@ -98,7 +98,7 @@ btr_pcur_free( Initializes and opens a persistent cursor to an index tree. It should be closed with btr_pcur_close. */ UNIV_INLINE -void +dberr_t btr_pcur_open_low( /*==============*/ dict_index_t* index, /*!< in: index */ @@ -121,7 +121,7 @@ btr_pcur_open_low( Opens an persistent cursor to an index tree without initializing the cursor. */ UNIV_INLINE -void +dberr_t btr_pcur_open_with_no_init_func( /*============================*/ dict_index_t* index, /*!< in: index */ @@ -151,7 +151,7 @@ btr_pcur_open_with_no_init_func( /*****************************************************************//** Opens a persistent cursor at either end of an index. */ UNIV_INLINE -void +dberr_t btr_pcur_open_at_index_side( /*========================*/ bool from_left, /*!< in: true if open to the low end, diff --git a/storage/innobase/include/btr0pcur.ic b/storage/innobase/include/btr0pcur.ic index 77e29a15d0c8..a44025ed2e20 100644 --- a/storage/innobase/include/btr0pcur.ic +++ b/storage/innobase/include/btr0pcur.ic @@ -417,7 +417,7 @@ btr_pcur_free( Initializes and opens a persistent cursor to an index tree. It should be closed with btr_pcur_close. */ UNIV_INLINE -void +dberr_t btr_pcur_open_low( /*==============*/ dict_index_t* index, /*!< in: index */ @@ -436,6 +436,7 @@ btr_pcur_open_low( mtr_t* mtr) /*!< in: mtr */ { btr_cur_t* btr_cursor; + dberr_t err = DB_SUCCESS; /* Initialize the cursor */ @@ -460,21 +461,33 @@ btr_pcur_open_low( (((latch_mode & BTR_MODIFY_LEAF) || (latch_mode & BTR_MODIFY_TREE)) ? true : false)); } else { - btr_cur_search_to_nth_level( + err = btr_cur_search_to_nth_level( index, level, tuple, mode, latch_mode, btr_cursor, 0, file, line, mtr); } + if (err != DB_SUCCESS) { + ib::warn() << " Error code: " << err + << " btr_pcur_open_low " + << " level: " << level + << " called from file: " + << file << " line: " << line + << " table: " << index->table->name + << " index: " << index->name; + } + cursor->pos_state = BTR_PCUR_IS_POSITIONED; cursor->trx_if_known = NULL; + + return(err); } /**************************************************************//** Opens an persistent cursor to an index tree without initializing the cursor. */ UNIV_INLINE -void +dberr_t btr_pcur_open_with_no_init_func( /*============================*/ dict_index_t* index, /*!< in: index */ @@ -500,6 +513,7 @@ btr_pcur_open_with_no_init_func( mtr_t* mtr) /*!< in: mtr */ { btr_cur_t* btr_cursor; + dberr_t err = DB_SUCCESS; cursor->latch_mode = BTR_LATCH_MODE_WITHOUT_INTENTION(latch_mode); cursor->search_mode = mode; @@ -516,7 +530,7 @@ btr_pcur_open_with_no_init_func( file, line, mtr, ((latch_mode & BTR_MODIFY_LEAF) ? true : false)); } else { - btr_cur_search_to_nth_level( + err = btr_cur_search_to_nth_level( index, 0, tuple, mode, latch_mode, btr_cursor, has_search_latch, file, line, mtr); } @@ -526,12 +540,14 @@ btr_pcur_open_with_no_init_func( cursor->old_stored = false; cursor->trx_if_known = NULL; + + return err; } /*****************************************************************//** Opens a persistent cursor at either end of an index. */ UNIV_INLINE -void +dberr_t btr_pcur_open_at_index_side( /*========================*/ bool from_left, /*!< in: true if open to the low end, @@ -544,6 +560,8 @@ btr_pcur_open_at_index_side( (0=leaf) */ mtr_t* mtr) /*!< in/out: mini-transaction */ { + dberr_t err = DB_SUCCESS; + pcur->latch_mode = BTR_LATCH_MODE_WITHOUT_FLAGS(latch_mode); pcur->search_mode = from_left ? PAGE_CUR_G : PAGE_CUR_L; @@ -557,7 +575,7 @@ btr_pcur_open_at_index_side( from_left, index, btr_pcur_get_btr_cur(pcur), level, mtr); } else { - btr_cur_open_at_index_side( + err = btr_cur_open_at_index_side( from_left, index, latch_mode, btr_pcur_get_btr_cur(pcur), level, mtr); } @@ -566,6 +584,8 @@ btr_pcur_open_at_index_side( pcur->old_stored = false; pcur->trx_if_known = NULL; + + return err; } /**********************************************************************//** diff --git a/storage/innobase/include/buf0buf.h b/storage/innobase/include/buf0buf.h index c52e947140de..6268e91b6bc0 100644 --- a/storage/innobase/include/buf0buf.h +++ b/storage/innobase/include/buf0buf.h @@ -570,7 +570,8 @@ buf_page_get_gen( const char* file, ulint line, mtr_t* mtr, - bool dirty_with_no_latch = false); + bool dirty_with_no_latch = false, + dberr_t* err = NULL); /** Initializes a page to the buffer buf_pool. The page is usually not read from a file even if it cannot be found in the buffer buf_pool. This is one @@ -779,6 +780,32 @@ buf_block_unfix( #endif /* !UNIV_HOTBACKUP */ #endif /* !UNIV_INNOCHECKSUM */ +bool +buf_page_is_checksum_valid_crc32( + const byte* read_buf, + ulint checksum_field1, + ulint checksum_field2, +#ifdef UNIV_INNOCHECKSUM + uintmax_t page_no, + bool is_log_enabled, + FILE* log_file, + const srv_checksum_algorithm_t curr_algo, +#endif /* UNIV_INNOCHECKSUM */ + bool use_legacy_big_endian); + +bool +buf_page_is_checksum_valid_innodb( + const byte* read_buf, + ulint checksum_field1, + ulint checksum_field2 +#ifdef UNIV_INNOCHECKSUM + ,uintmax_t page_no, + bool is_log_enabled, + FILE* log_file, + const srv_checksum_algorithm_t curr_algo +#endif /* UNIV_INNOCHECKSUM */ +); + /** Checks if a page contains only zeroes. @param[in] read_buf database page @param[in] page_size page size @@ -1287,8 +1314,13 @@ buf_page_init_for_read( /********************************************************************//** Completes an asynchronous read or write request of a file page to or from the buffer pool. -@return true if successful */ -bool +@return whether the operation succeeded +@retval DB_SUCCESS always when writing, or if a read page was OK +@retval DB_PAGE_CORRUPTED if the checksum fails on a page read +@retval DB_DECRYPTION_FAILED if page post encryption checksum matches but + after decryption normal page checksum does + not match */ +dberr_t buf_page_io_complete( /*=================*/ buf_page_t* bpage, /*!< in: pointer to the block in question */ @@ -1688,6 +1720,7 @@ class buf_page_t { in the buffer pool. Protected by block mutex */ bool is_corrupt; + bool encrypted; /*!< page is still encrypted */ # ifdef UNIV_DEBUG ibool file_page_was_freed; /*!< this is set to TRUE when diff --git a/storage/innobase/include/buf0checksum.h b/storage/innobase/include/buf0checksum.h index 80fe6076998f..29956068b1ac 100644 --- a/storage/innobase/include/buf0checksum.h +++ b/storage/innobase/include/buf0checksum.h @@ -48,6 +48,14 @@ buf_calc_page_crc32( const byte* page, bool use_legacy_big_endian = false); +// In case of keyring encryption we need to take into accout the page_size- +// That can be different for compressed tables +uint32_t +buf_calc_page_crc32_encrypted_with_keyring( + const byte* page, + uint page_size, + bool use_legacy_big_endian = false); + /********************************************************************//** Calculates a page checksum which is stored to the page when it is written to a file. Note that we must be careful to calculate the same value on diff --git a/storage/innobase/include/buf0flu.h b/storage/innobase/include/buf0flu.h index 50a18bcc39f0..fd544b1ac3d2 100644 --- a/storage/innobase/include/buf0flu.h +++ b/storage/innobase/include/buf0flu.h @@ -413,6 +413,10 @@ class FlushObserver { return(m_estimate); } + ulint get_number_of_pages_flushed() const { + return m_number_of_pages_flushed; + } + private: /** Table space id */ ulint m_space_id; @@ -442,6 +446,8 @@ class FlushObserver { /** LSN at which observer started observing. This is used to find the dirty blocks that are dirtied before Observer */ const lsn_t m_lsn; + + ulint m_number_of_pages_flushed; }; #endif /* !UNIV_HOTBACKUP */ diff --git a/storage/innobase/include/buf0flu.ic b/storage/innobase/include/buf0flu.ic index e95921fc4ec5..fe770ad86c2d 100644 --- a/storage/innobase/include/buf0flu.ic +++ b/storage/innobase/include/buf0flu.ic @@ -91,8 +91,11 @@ buf_flush_note_modification( /* Don't allow to set flush observer from non-null to null, or from one observer to another. */ ut_ad(block->page.flush_observer == NULL - || block->page.flush_observer == observer); - block->page.flush_observer = observer; + || block->page.flush_observer == observer + || observer == NULL); + + if (observer != NULL) + block->page.flush_observer = observer; if (block->page.oldest_modification == 0) { buf_pool_t* buf_pool = buf_pool_from_block(block); diff --git a/storage/innobase/include/buf0rea.h b/storage/innobase/include/buf0rea.h index ff8fe243dd74..2ac4e628b46c 100644 --- a/storage/innobase/include/buf0rea.h +++ b/storage/innobase/include/buf0rea.h @@ -36,8 +36,12 @@ an exclusive lock on the buffer frame. The flag is cleared and the x-lock released by the i/o-handler thread. @param[in] page_id page id @param[in] page_size page size -@return TRUE if page has been read in, FALSE in case of failure */ -ibool +@retval DB_SUCCESS if the page was read and is not corrupted, +@retval DB_PAGE_CORRUPTED if page based on checksum check is corrupted, +@retval DB_DECRYPTION_FAILED if page post encryption checksum matches but +after decryption normal page checksum does not match. +@retval DB_TABLESPACE_DELETED if tablespace .ibd file is missing */ +dberr_t buf_read_page( const page_id_t& page_id, const page_size_t& page_size, diff --git a/storage/innobase/include/db0err.h b/storage/innobase/include/db0err.h index ae5eae718c31..7c752ffc5c6e 100644 --- a/storage/innobase/include/db0err.h +++ b/storage/innobase/include/db0err.h @@ -172,6 +172,15 @@ enum dberr_t { placed on the base column of stored column */ + DB_DECRYPTION_FAILED = 998, /* Tablespace encrypted and + decrypt operation failed because + of missing key management plugin, + or missing or incorrect key or + incorret AES method or algorithm. */ + + DB_PAGE_CORRUPTED = 999, /* Page read from tablespace is + corrupted. */ + /* The following are partial failure codes */ DB_FAIL = 1000, DB_OVERFLOW, diff --git a/storage/innobase/include/dict0crea.h b/storage/innobase/include/dict0crea.h index 18cbe6caed67..9e36154a14dc 100644 --- a/storage/innobase/include/dict0crea.h +++ b/storage/innobase/include/dict0crea.h @@ -34,6 +34,8 @@ Created 1/8/1996 Heikki Tuuri #include "mtr0mtr.h" #include "fsp0space.h" +#include "create_info_encryption_key.h" + /*********************************************************************//** Creates a table create graph. @return own: table create node */ @@ -42,7 +44,9 @@ tab_create_graph_create( /*====================*/ dict_table_t* table, /*!< in: table to create, built as a memory data structure */ - mem_heap_t* heap); /*!< in: heap where created */ + mem_heap_t* heap, /*!< in: heap where created */ + fil_encryption_t mode, /*!< in: encryption mode */ + const CreateInfoEncryptionKeyId &create_info_encryption_key_id); /*!< in: encryption key_id */ /** Creates an index create graph. @param[in] index index to create, built as a memory data structure @param[in,out] heap heap where created @@ -68,14 +72,16 @@ dict_create_table_step( @return DB_SUCCESS or error code. */ dberr_t dict_build_tablespace( - Tablespace* tablespace); + Tablespace* tablespace, + tab_node_t* node); // TODO : change this parameter only to encryption mode /** Builds a tablespace to contain a table, using file-per-table=1. @param[in,out] table Table to build in its own tablespace. @return DB_SUCCESS or error code */ dberr_t dict_build_tablespace_for_table( - dict_table_t* table); + dict_table_t* table, + tab_node_t* node); // TODO : change this parameter only to encryption mode /** Assign a new table ID and put it into the table cache and the transaction. @param[in,out] table Table that needs an ID @@ -378,6 +384,8 @@ struct tab_node_t{ /* Local storage for this graph node */ ulint state; /*!< node execution state */ ulint col_no; /*!< next column definition to insert */ + fil_encryption_t mode; /*!< encryption mode */ + CreateInfoEncryptionKeyId create_info_encryption_key_id; /*!< encryption key_id */ ulint base_col_no; /*!< next base column to insert */ mem_heap_t* heap; /*!< memory heap used as auxiliary storage */ diff --git a/storage/innobase/include/dict0dict.h b/storage/innobase/include/dict0dict.h index d0169c071d87..cc7d384ac36f 100644 --- a/storage/innobase/include/dict0dict.h +++ b/storage/innobase/include/dict0dict.h @@ -1874,6 +1874,15 @@ dict_set_corrupted_by_space( /*========================*/ ulint space_id); /*!< in: space ID */ +bool dict_set_corrupted_by_space(const fil_space_t* space); + +/** Flag a table with specified space_id encrypted in the data dictionary +cache +@param[in] space_id Tablespace id */ +void +dict_set_encrypted_by_space( + ulint space_id); + /** Sets merge_threshold in the SYS_INDEXES @param[in,out] index index @param[in] merge_threshold value to set */ diff --git a/storage/innobase/include/dict0load.h b/storage/innobase/include/dict0load.h index 0959824d4208..15146de3780c 100644 --- a/storage/innobase/include/dict0load.h +++ b/storage/innobase/include/dict0load.h @@ -221,7 +221,7 @@ a foreign key references columns in this table. @param[in] ignore_err Error to be ignored when loading table and its index definition @return table, NULL if does not exist; if the table is stored in an -.ibd file, but the file does not exist, then we set the ibd_file_missing +.ibd file, but the file does not exist, then we set the file_unreadable flag in the table object we return. */ dict_table_t* dict_load_table( diff --git a/storage/innobase/include/dict0mem.h b/storage/innobase/include/dict0mem.h index 6ccf6f434d95..c8f020dd5b94 100644 --- a/storage/innobase/include/dict0mem.h +++ b/storage/innobase/include/dict0mem.h @@ -1025,6 +1025,14 @@ struct dict_index_t{ ut_ad(committed || !(type & DICT_CLUSTERED)); uncommitted = !committed; } + + /** @return whether this index is readable + @retval true normally + @retval false if this is a single-table tablespace + and the .ibd file is missing, or a + page cannot be read or decrypted */ + inline bool is_readable() const; + #endif /* !UNIV_HOTBACKUP */ }; @@ -1336,6 +1344,25 @@ struct dict_table_t { /** Release the table handle. */ inline void release(); + /** @return whether this table is readable + @retval true normally + @retval false if this is a single-table tablespace + and the .ibd file is missing, or a + page cannot be read or decrypted */ + + bool is_readable() const { + return(UNIV_LIKELY(!file_unreadable)); + } + + void set_file_unreadable() { + file_unreadable = true; + } + + void set_file_readable() { + file_unreadable = false; + } + + /** Id of the table. */ table_id_t id; @@ -1392,10 +1419,10 @@ struct dict_table_t { Use DICT_TF2_FLAG_IS_SET() to parse this flag. */ unsigned flags2:DICT_TF2_BITS; - /** TRUE if this is in a single-table tablespace and the .ibd file is - missing. Then we must return in ha_innodb.cc an error if the user - tries to query such an orphaned table. */ - unsigned ibd_file_missing:1; + /*!< whether this is in a single-table tablespace and the .ibd + file is missing or page decryption failed and page is corrupted */ + + unsigned file_unreadable:1; /** TRUE if the table object has been added to the dictionary cache. */ unsigned cached:1; @@ -1732,8 +1759,14 @@ struct dict_table_t { /** encryption iv, it's only for export/import */ byte* encryption_iv; + + Keyring_encryption_info keyring_encryption_info; }; +inline bool dict_index_t::is_readable() const { + return(UNIV_LIKELY(!table->file_unreadable)); +} + /*******************************************************************//** Initialise the table lock list. */ void diff --git a/storage/innobase/include/dict0stats.h b/storage/innobase/include/dict0stats.h index 45c00474f301..2d3db07d6fe7 100644 --- a/storage/innobase/include/dict0stats.h +++ b/storage/innobase/include/dict0stats.h @@ -208,6 +208,17 @@ dict_stats_rename_index( const char* new_index_name) /*!< in: new index name */ MY_ATTRIBUTE((warn_unused_result)); +/** Report an error if updating table statistics failed because +.ibd file is missing, table decryption failed or table is corrupted. +@param[in,out] table Table +@retval DB_DECRYPTION_FAILED if decryption of the table failed +@retval DB_TABLESPACE_DELETED if .ibd file is missing +@retval DB_CORRUPTION if table is marked as corrupted */ +dberr_t +dict_stats_report_error(dict_table_t* table) + MY_ATTRIBUTE((nonnull, warn_unused_result)); + + #ifndef UNIV_NONINL #include "dict0stats.ic" #endif diff --git a/storage/innobase/include/fil0crypt.h b/storage/innobase/include/fil0crypt.h new file mode 100644 index 000000000000..042bfb6ec246 --- /dev/null +++ b/storage/innobase/include/fil0crypt.h @@ -0,0 +1,619 @@ +/***************************************************************************** +Copyright (C) 2013, 2015, Google Inc. All Rights Reserved. +Copyright (c) 2015, 2017, MariaDB Corporation. + +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 Street, Suite 500, Boston, MA 02110-1335 USA + +*****************************************************************************/ + +/**************************************************//** +@file include/fil0crypt.h +The low-level file system encryption support functions + +Created 04/01/2015 Jan Lindström +*******************************************************/ + +#ifndef fil0crypt_h +#define fil0crypt_h + +#ifndef UNIV_INNOCHECKSUM + +#include "os0event.h" +#include "my_crypt.h" +#include "log0types.h" +// TODO: Robert: This is temporary for fil_encryption_t +#include "fil0fil.h" + + +#endif /*! UNIV_INNOCHECKSUM */ + +#include "log0types.h" +/** +* Magic pattern in start of crypt data on page 0 +*/ +#define MAGIC_SZ 6 + +struct trx_t; + +static const unsigned char CRYPT_MAGIC[MAGIC_SZ] = { + 's', 0xE, 0xC, 'R', 'E', 't' }; + +//static const char ENCRYPTION_PERCONA_SYSTEM_KEY_PREFIX[] = "percona_innodb"; + +#ifdef UNIV_INNOCHECKSUM //TODO:Robert INNOCHECKSUM ENCRYPTION_KEY_LEN is not defined - and probably all of this file should not be +static const ulint ENCRYPTION_KEY_LEN = 32; //TODO:Robert kind of workaround +#endif // UNIV_INNOCHECKSUM + +/* This key will be used if nothing else is given */ +//#define FIL_DEFAULT_ENCRYPTION_KEY 0 +//#define ENCRYPTION_KEY_VERSION_INVALID (~(unsigned int)0) +//#define ENCRYPTION_KEY_VERSION_NOT_ENCRYPTED (~(unsigned int)0) - 1 +//#define ENCRYPTION_KEY_VERSION_NOT_ENCRYPTED 0 + +extern os_event_t fil_crypt_threads_event; + +/** + * CRYPT_SCHEME_UNENCRYPTED + * + * Used as intermediate state when convering a space from unencrypted + * to encrypted + */ +/** + * CRYPT_SCHEME_1 + * + * xxx is AES_CTR or AES_CBC (or another block cypher with the same key and iv lengths) + * L = AES_ECB(KEY, IV) + * CRYPT(PAGE) = xxx(KEY=L, IV=C, PAGE) + */ + +//#define CRYPT_SCHEME_1 1 +#define CRYPT_SCHEME_1_IV_LEN 16 +//#define CRYPT_SCHEME_UNENCRYPTED 0 + + +//TODO:Robert:Those are mine +//#define MY_AES_MAX_KEY_LENGTH 16 +//#define ENCRYPTION_SCHEME_BLOCK_LENGTH 16 + + +/* Cached L or key for given key_version */ +struct key_struct +{ + uint key_version; /*!< Version of the key */ + uint key_length; /*!< Key length */ + unsigned char key[ENCRYPTION_KEY_LEN]; /*!< Cached key + (that is L in CRYPT_SCHEME_1) */ +}; + +//enum fil_encryption_t { + //[>* Encrypted if innodb_encrypt_tables=ON (srv_encrypt_tables) <] + //FIL_ENCRYPTION_DEFAULT, + //[>* Encrypted <] + //FIL_ENCRYPTION_ON, + //[>* Not encrypted <] + //FIL_ENCRYPTION_OFF +//}; + +struct st_encryption_scheme_key { + unsigned int version; + //unsigned char key[ENCRYPTION_SCHEME_BLOCK_LENGTH]; + uchar *key; +}; + +struct Cached_key +{ + byte *key; + uint key_version; + size_t key_len; + + ~Cached_key() + { + if (key != NULL) + { + memset_s(key, ENCRYPTION_KEY_LEN, 0, ENCRYPTION_KEY_LEN); + my_free(key); + } + } +}; + + +/** is encryption enabled */ +extern ulong srv_encrypt_tables; + +struct fil_space_rotate_state_t +{ + fil_space_rotate_state_t() + : trx(NULL), + flush_observer(NULL) + {} + + time_t start_time; /*!< time when rotation started */ + ulint active_threads; /*!< active threads in space */ + ulint next_offset; /*!< next "free" offset */ + ulint max_offset; /*!< max offset needing to be rotated */ + uint min_key_version_found; /*!< min key version found but not + rotated */ + lsn_t end_lsn; /*!< max lsn created when rotating this + space */ + bool starting; /*!< initial write of IV */ + bool flushing; /*!< space is being flushed at end of rotate */ + struct { + bool is_active; /*!< is scrubbing active in this space */ + time_t last_scrub_completed; /*!< when was last scrub + completed */ + } scrubbing; + + trx_t *trx; + FlushObserver *flush_observer; + + void create_flush_observer(uint space_id); + + void destroy_flush_observer(); +}; + + +#ifndef UNIV_INNOCHECKSUM + + +struct fil_space_crypt_t +{ + public: + /** Constructor. Does not initialize the members! + The object is expected to be placed in a buffer that + has been zero-initialized. */ + fil_space_crypt_t( + uint new_type, + uint new_min_key_version, + uint new_key_id, + fil_encryption_t new_encryption, + bool create_key, // is used when we have a new tablespace to encrypt and is not used when we read a crypto from page0 + Encryption::Encryption_rotation encryption_rotation = Encryption::NO_ROTATION); + + /** Destructor */ + ~fil_space_crypt_t() + { + mutex_free(&mutex); + mutex_free(&start_rotate_mutex); + if (tablespace_key != NULL) + ut_free(tablespace_key); + if (tablespace_iv != NULL) + ut_free(tablespace_iv); + + for (std::list::iterator iter = fetched_keys.begin(); + iter != fetched_keys.end(); + iter++) + { + memset_s(*iter, ENCRYPTION_KEY_LEN, 0, ENCRYPTION_KEY_LEN); + my_free(*iter); + } + + } + + /** Get latest key version from encryption plugin + @retval key_version or + @retval ENCRYPTION_KEY_VERSION_INVALID if used key_id + is not found from encryption plugin. */ + uint key_get_latest_version(void); + + /** Returns true if key was found from encryption plugin + and false if not. */ + bool is_key_found() const { + //return found_key_version != ENCRYPTION_KEY_VERSION_INVALID; + return key_found; + } + + /** Returns true if tablespace should be encrypted */ + bool should_encrypt() const { + return ((encryption == FIL_ENCRYPTION_ON) || + ((srv_encrypt_tables == SRV_ENCRYPT_TABLES_ONLINE_TO_KEYRING || + srv_encrypt_tables == SRV_ENCRYPT_TABLES_ONLINE_TO_KEYRING_FORCE) && + encryption == FIL_ENCRYPTION_DEFAULT)); + } + + /** Return true if tablespace is encrypted. */ + bool is_encrypted() const { + return (encryption != FIL_ENCRYPTION_OFF); + } + + /** Return true if default tablespace encryption is used, */ + bool is_default_encryption() const { + return (encryption == FIL_ENCRYPTION_DEFAULT); + } + + /** Return true if tablespace is not encrypted. */ + bool not_encrypted() const { + return (encryption == FIL_ENCRYPTION_OFF); + } + + /** Write crypt data to a page (0) + @param[in] space tablespace + @param[in,out] page0 first page of the tablespace + @param[in,out] mtr mini-transaction */ + void write_page0(const fil_space_t* space, byte* page0, mtr_t* mtr, + uint a_min_key_version, uint a_type, + Encryption::Encryption_rotation current_encryption_rotation); + + void set_tablespace_key(const uchar *tablespace_key) + { + if (tablespace_key == NULL) + { + if (this->tablespace_key != NULL) + ut_free(this->tablespace_key); + this->tablespace_key = NULL; + } + else + { + if (this->tablespace_key == NULL) + this->tablespace_key = (byte*)ut_malloc_nokey(ENCRYPTION_KEY_LEN); + memcpy(this->tablespace_key, tablespace_key, ENCRYPTION_KEY_LEN); + } + } + + void set_tablespace_iv(const uchar *tablespace_iv) + { + if (tablespace_iv == NULL) + { + if (this->tablespace_iv != NULL) + ut_free(this->tablespace_iv); + this->tablespace_iv = NULL; + } + else + { + if (this->tablespace_iv == NULL) + this->tablespace_iv = (byte*)ut_malloc_nokey(ENCRYPTION_KEY_LEN); + memcpy(this->tablespace_iv, tablespace_iv, ENCRYPTION_KEY_LEN); + } + } + + bool load_needed_keys_into_local_cache(); + uchar* get_min_key_version_key(); + uchar* get_key_currently_used_for_encryption(); + + uint min_key_version; // min key version for this space + ulint page0_offset; // byte offset on page 0 for crypt data //TODO:Robert: po co to ? + fil_encryption_t encryption; // Encryption setup + + // key being used for encryption + Cached_key cached_encryption_key; + // in normal situation the only key needed to decrypt the tablespace + Cached_key cached_min_key_version_key; + + uchar * get_cached_key(Cached_key &cached_key, uint key_version); + + ib_mutex_t start_rotate_mutex; // mutex protecting starting of rotation of the space + ib_mutex_t mutex; // mutex protecting following variables + + /** Return code from encryption_key_get_latest_version. + If ENCRYPTION_KEY_VERSION_INVALID encryption plugin + could not find the key and there is no need to call + get_latest_key_version again as keys are read only + at startup. */ + //uint key_found; + //uint found_key_version; + bool key_found; + + fil_space_rotate_state_t rotate_state; + + Encryption::Encryption_rotation encryption_rotation; + + uchar *tablespace_key; //TODO:Make it private ? + //In Oracle's tablespace encryption is ENCRYPTION_KEY_LEN long, + //which is incorrect value - it should be always 128 bits, + //nevertheless we need ENCRYPTION_KEY_LEN tablespace_iv + //to be able to store this IV. + uchar *tablespace_iv; + + unsigned char iv[16]; + + uint encrypting_with_key_version; + unsigned int keyserver_requests; + unsigned int key_id; + unsigned int type; + + std::list fetched_keys; // TODO: temp for test + +}; + +/** Status info about encryption */ +struct fil_space_crypt_status_t { + ulint space; /*!< tablespace id */ + ulint scheme; /*!< encryption scheme */ + uint min_key_version; /*!< min key version */ + uint current_key_version;/*!< current key version */ + uint keyserver_requests;/*!< no of key requests to key server */ + uint key_id; /*!< current key_id */ + bool rotating; /*!< is key rotation ongoing */ + bool flushing; /*!< is flush at end of rotation ongoing */ + ulint rotate_next_page_number; /*!< next page if key rotating */ + ulint rotate_max_page_number; /*!< max page if key rotating */ +}; + +/** Statistics about encryption key rotation */ +struct fil_crypt_stat_t { + ulint pages_read_from_cache; + ulint pages_read_from_disk; + ulint pages_modified; + ulint pages_flushed; + ulint estimated_iops; +}; + +/** Status info about scrubbing */ +struct fil_space_scrub_status_t { + ulint space; /*!< tablespace id */ + bool compressed; /*!< is space compressed */ + time_t last_scrub_completed; /*!< when was last scrub completed */ + bool scrubbing; /*!< is scrubbing ongoing */ + time_t current_scrub_started; /*!< when started current scrubbing */ + ulint current_scrub_active_threads; /*!< current scrub active threads */ + ulint current_scrub_page_number; /*!< current scrub page no */ + ulint current_scrub_max_page_number; /*!< current scrub max page no */ +}; + +/********************************************************************* +Init space crypt */ +void +fil_space_crypt_init(); + +/********************************************************************* +Cleanup space crypt */ +void +fil_space_crypt_cleanup(); + +/** +Create a fil_space_crypt_t object +@param[in] encrypt_mode FIL_ENCRYPTION_DEFAULT or + FIL_ENCRYPTION_ON or + FIL_ENCRYPTION_OFF + +@param[in] key_id Encryption key id +@return crypt object */ +fil_space_crypt_t* +fil_space_create_crypt_data( + fil_encryption_t encrypt_mode, + uint key_id, + bool create_key = true) + MY_ATTRIBUTE((warn_unused_result)); + +/****************************************************************** +Merge fil_space_crypt_t object +@param[in,out] dst Destination cryp data +@param[in] src Source crypt data */ +void +fil_space_merge_crypt_data( + fil_space_crypt_t* dst, + const fil_space_crypt_t* src); + +/** Initialize encryption parameters from a tablespace header page. +@param[in] page_size page size of the tablespace +@param[in] page first page of the tablespace +@return crypt data from page 0 +@retval NULL if not present or not valid */ +//UNIV_INTERN +//fil_space_crypt_t* +//fil_space_read_crypt_data(const page_size_t& page_size, const byte* page) + //MY_ATTRIBUTE((nonnull, warn_unused_result)); + +fil_space_crypt_t* +fil_space_read_crypt_data(const page_size_t& page_size, const byte* page); + +//bool fil_space_read_crypt_data(const page_size_t& page_size, const byte* page, ulint space_id); + +/** +Free a crypt data object +@param[in,out] crypt_data crypt data to be freed */ +void +fil_space_destroy_crypt_data( + fil_space_crypt_t **crypt_data); + +/****************************************************************** +Parse a MLOG_FILE_WRITE_CRYPT_DATA log entry +@param[in] ptr Log entry start +@param[in] end_ptr Log entry end +@param[in] block buffer block +@param[out] err DB_SUCCESS or DB_DECRYPTION_FAILED +@return position on log buffer */ +byte* +fil_parse_write_crypt_data( + byte* ptr, + const byte* end_ptr, + const buf_block_t* block, + ulint len) + MY_ATTRIBUTE((warn_unused_result)); + +/** Encrypt a buffer. +@param[in,out] crypt_data Crypt data +@param[in] space space_id +@param[in] offset Page offset +@param[in] lsn Log sequence number +@param[in] src_frame Page to encrypt +@param[in] page_size Page size +@param[in,out] dst_frame Output buffer +@return encrypted buffer or NULL */ +byte* +fil_encrypt_buf( + fil_space_crypt_t* crypt_data, + ulint space, + ulint offset, + lsn_t lsn, + const byte* src_frame, + const page_size_t& page_size, + byte* dst_frame) + MY_ATTRIBUTE((warn_unused_result)); + +/** +Encrypt a page. + +@param[in] space Tablespace +@param[in] offset Page offset +@param[in] lsn Log sequence number +@param[in] src_frame Page to encrypt +@param[in,out] dst_frame Output buffer +@return encrypted buffer or NULL */ +byte* +fil_space_encrypt( + const fil_space_t* space, + ulint offset, + lsn_t lsn, + byte* src_frame, + byte* dst_frame) + MY_ATTRIBUTE((warn_unused_result)); + +/** +Decrypt a page. +@param[in,out] crypt_data crypt_data +@param[in] tmp_frame Temporary buffer +@param[in] page_size Page size +@param[in,out] src_frame Page to decrypt +@param[out] err DB_SUCCESS or error +@return true if page decrypted, false if not.*/ +bool +fil_space_decrypt( + fil_space_crypt_t* crypt_data, + byte* tmp_frame, + const page_size_t& page_size, + byte* src_frame, + dberr_t* err); + +/****************************************************************** +Decrypt a page +@param[in] space Tablespace +@param[in] tmp_frame Temporary buffer used for decrypting +@param[in,out] src_frame Page to decrypt +@param[out] decrypted true if page was decrypted +@return decrypted page, or original not encrypted page if decryption is +not needed.*/ +byte* +fil_space_decrypt( + const fil_space_t* space, + byte* tmp_frame, + byte* src_frame, + bool* decrypted) + MY_ATTRIBUTE((warn_unused_result)); + +/****************************************************************** +Calculate post encryption checksum +@param[in] page_size page size +@param[in] page page where checksum is calculated +@param[in] is_zip_compressed is page compressed with old schema +@return page checksum or BUF_NO_CHECKSUM_MAGIC +not needed. */ +uint32_t +fil_crypt_calculate_checksum( + const ulint page_size, + const byte* page, + const bool is_zip_compressed) + MY_ATTRIBUTE((warn_unused_result)); + +/** +Verify that post encryption checksum match calculated checksum. +This function should be called only if tablespace contains crypt_data +metadata (this is strong indication that tablespace is encrypted). +Function also verifies that traditional checksum does not match +calculated checksum as if it does page could be valid unencrypted, +encrypted, or corrupted. + +@param[in,out] page page frame (checksum is temporarily modified) +@param[in] page_size page size +@param[in] space tablespace identifier +@param[in] offset page number +@return true if page is encrypted AND OK, false otherwise */ +bool +fil_space_verify_crypt_checksum( + byte* page, + //const ulint page_size, + ulint page_size, + bool is_zip_compressed, + bool is_new_schema_compressed, + //ulint space_id, + ulint offset) + MY_ATTRIBUTE((warn_unused_result)); + + +/********************************************************************* +Adjust thread count for key rotation +@param[in] enw_cnt Number of threads to be used */ +void +fil_crypt_set_thread_cnt( + uint new_cnt); + +/********************************************************************* +Adjust max key age +@param[in] val New max key age */ +void +fil_crypt_set_rotate_key_age( + uint val); + +/********************************************************************* +Adjust rotation iops +@param[in] val New max roation iops */ +void +fil_crypt_set_rotation_iops( + uint val); + +/********************************************************************* +Adjust encrypt tables +@param[in] val New setting for innodb-encrypt-tables */ +void +fil_crypt_set_encrypt_tables( + uint val); + +/********************************************************************* +Init threads for key rotation */ +void +fil_crypt_threads_init(); + +/********************************************************************* +Clean up key rotation threads resources */ +void +fil_crypt_threads_cleanup(); + +/********************************************************************* +Wait for crypt threads to stop accessing space +@param[in] space Tablespace */ +void +fil_space_crypt_close_tablespace( + const fil_space_t* space); + +/********************************************************************* +Get crypt status for a space (used by information_schema) +@param[in] space Tablespace +@param[out] status Crypt status +return 0 if crypt data present */ +void +fil_space_crypt_get_status( + const fil_space_t* space, + struct fil_space_crypt_status_t* status); + +/********************************************************************* +Return crypt statistics +@param[out] stat Crypt statistics */ +void +fil_crypt_total_stat( + fil_crypt_stat_t *stat); + +/** +Get scrub status for a space (used by information_schema) + +@param[in] space Tablespace +@param[out] status Scrub status +return 0 if data found */ +void +fil_space_get_scrub_status( + const fil_space_t* space, + fil_space_scrub_status_t* status); + +//#include "fil0crypt.ic" +#endif /* !UNIV_INNOCHECKSUM */ + + +#endif /* fil0crypt_h */ diff --git a/storage/innobase/include/fil0crypt.ic b/storage/innobase/include/fil0crypt.ic new file mode 100644 index 000000000000..6b83521cdde6 --- /dev/null +++ b/storage/innobase/include/fil0crypt.ic @@ -0,0 +1,81 @@ +/***************************************************************************** + +Copyright (c) 2015, 2017, MariaDB Corporation. + +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 Street, Suite 500, Boston, MA 02110-1335 USA + +*****************************************************************************/ + +/**************************************************//** +@file include/fil0crypt.ic +The low-level file system encryption support functions + +Created 04/01/2015 Jan Lindström +*******************************************************/ + +/*******************************************************************//** +Find out whether the page is page encrypted +@return true if page is page encrypted, false if not */ +UNIV_INLINE +bool +fil_page_is_encrypted( +/*==================*/ + const byte *buf) /*!< in: page */ +{ + return(mach_read_from_4(buf+FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION) != 0); +} + +/*******************************************************************//** +Get current encryption mode from crypt_data. +@return string representation */ +UNIV_INLINE +const char * +fil_crypt_get_mode( +/*===============*/ + const fil_space_crypt_t* crypt_data) +{ + switch (crypt_data->encryption) { + case FIL_ENCRYPTION_DEFAULT: + return("Default tablespace encryption mode"); + case FIL_ENCRYPTION_ON: + return("Tablespace encrypted"); + case FIL_ENCRYPTION_OFF: + return("Tablespace not encrypted"); + } + + ut_error; + return ("NULL"); +} + +/*******************************************************************//** +Get current encryption type from crypt_data. +@return string representation */ +UNIV_INLINE +const char * +fil_crypt_get_type( + const fil_space_crypt_t* crypt_data) +{ + ut_ad(crypt_data != NULL); + switch (crypt_data->type) { + case CRYPT_SCHEME_UNENCRYPTED: + return("scheme unencrypted"); + break; + case CRYPT_SCHEME_1: + return("scheme encrypted"); + break; + default: + ut_error; + } + + return ("NULL"); +} diff --git a/storage/innobase/include/fil0fil.h b/storage/innobase/include/fil0fil.h index 96090fe0aa0d..50862960b9f1 100644 --- a/storage/innobase/include/fil0fil.h +++ b/storage/innobase/include/fil0fil.h @@ -45,6 +45,13 @@ Created 10/25/1995 Heikki Tuuri #include #include +#include "fil0rkinfo.h" +#include "create_info_encryption_key.h" + +//#include "fil0crypt.h" //TODO:Robert This should be removed, when fil_space_crypt_t will be moved to appropriate place +/** Structure containing encryption specification */ +struct fil_space_crypt_t; + #ifdef UNIV_HOTBACKUP #include /** determine if file is intermediate / temporary.These files are created during @@ -199,6 +206,9 @@ struct fil_space_t { Dropping of the tablespace is forbidden if this is positive. Protected by fil_system->mutex. */ + ulint n_pending_ops_from_space_list; + + ulint n_pending_ios; hash_node_t hash; /*!< hash chain node */ hash_node_t name_hash;/*!< hash chain the name_hash table */ #ifndef UNIV_HOTBACKUP @@ -215,8 +225,19 @@ struct fil_space_t { /*!< true if this space is currently in unflushed_spaces */ bool is_corrupt; + + bool is_encrypted; + + bool exclude_from_rotation; + UT_LIST_NODE_T(fil_space_t) space_list; /*!< list of all spaces */ + UT_LIST_NODE_T(fil_space_t) rotation_list; + /** whether this tablespace needs key rotation */ + bool is_in_rotation_list; + + /** MariaDB encryption data */ + fil_space_crypt_t* crypt_data; /** Compression algorithm */ Compression::Type compression_type; @@ -231,13 +252,24 @@ struct fil_space_t { ulint encryption_klen; /** Encrypt initial vector */ - byte encryption_iv[ENCRYPTION_KEY_LEN]; + byte encryption_iv[ENCRYPTION_KEY_LEN]; + + //ulint encryption_key_version; //TODO: Should this be minimal key version? + + //fil_encryption_t encryption; /** Release the reserved free extents. @param[in] n_reserved number of reserved extents */ void release_free_extents(ulint n_reserved); ulint magic_n;/*!< FIL_SPACE_MAGIC_N */ + + /** @return whether the tablespace is about to be dropped or + truncated */ + bool is_stopping() const + { + return stop_new_ops || is_being_truncated; + } }; /** Value of fil_space_t::magic_n */ @@ -503,6 +535,10 @@ static const ulint FIL_PAGE_ORIGINAL_SIZE_V1 = FIL_PAGE_ORIGINAL_TYPE_V1 + 2; /** Size after compression (u16) */ static const ulint FIL_PAGE_COMPRESS_SIZE_V1 = FIL_PAGE_ORIGINAL_SIZE_V1 + 2; +static const ulint FIL_PAGE_ENCRYPTION_KEY_VERSION = FIL_PAGE_ORIGINAL_SIZE_V1; + +static const ulint FIL_PAGE_ZIP_KEYRING_ENCRYPTION_MAGIC = FIL_PAGE_VERSION; + /** This overloads FIL_PAGE_FILE_FLUSH_LSN for RTREE Split Sequence Number */ #define FIL_RTREE_SPLIT_SEQ_NUM FIL_PAGE_FILE_FLUSH_LSN @@ -519,6 +555,9 @@ static const ulint FIL_PAGE_COMPRESS_SIZE_V1 = FIL_PAGE_ORIGINAL_SIZE_V1 + 2; to store the page checksum, the last 4 bytes should be identical to the last 4 bytes of FIL_PAGE_LSN */ + +//static const ulint FIL_PAGE_ENCRYPTION_ENCRYPTED_CHECKSUM = FIL_PAGE_END_LSN_OLD_CHKSUM + 4; + #define FIL_PAGE_DATA_END 8 /*!< size of the page trailer */ /* @} */ @@ -563,6 +602,16 @@ index */ #ifndef UNIV_INNOCHECKSUM +/** Enum values for encryption table option */ +enum fil_encryption_t { + /** Encrypted if innodb_encrypt_tables=ON (srv_encrypt_tables) */ + FIL_ENCRYPTION_DEFAULT, + /** Encrypted */ + FIL_ENCRYPTION_ON, + /** Not encrypted */ + FIL_ENCRYPTION_OFF +}; + /** The number of fsyncs done to the log */ extern ulint fil_n_log_flushes; @@ -574,6 +623,66 @@ extern ulint fil_n_pending_tablespace_flushes; /** Number of files currently open */ extern ulint fil_n_file_opened; +//TODO: Robert: Moved here from fil0fil.c the way it is in MariaDB + +struct fil_system_t { +#ifndef UNIV_HOTBACKUP + ib_mutex_t mutex; /*!< The mutex protecting the cache */ +#endif /* !UNIV_HOTBACKUP */ + hash_table_t* spaces; /*!< The hash table of spaces in the + system; they are hashed on the space + id */ + hash_table_t* name_hash; /*!< hash table based on the space + name */ + UT_LIST_BASE_NODE_T(fil_node_t) LRU; + /*!< base node for the LRU list of the + most recently used open files with no + pending i/o's; if we start an i/o on + the file, we first remove it from this + list, and return it to the start of + the list when the i/o ends; + log files and the system tablespace are + not put to this list: they are opened + after the startup, and kept open until + shutdown */ + UT_LIST_BASE_NODE_T(fil_space_t) unflushed_spaces; + /*!< base node for the list of those + tablespaces whose files contain + unflushed writes; those spaces have + at least one file node where + modification_counter > flush_counter */ + ulint n_open; /*!< number of files currently open */ + ulint max_n_open; /*!< n_open is not allowed to exceed + this */ + int64_t modification_counter;/*!< when we write to a file we + increment this by one */ + ulint max_assigned_id;/*!< maximum space id in the existing + tables, or assigned during the time + mysqld has been up; at an InnoDB + startup we scan the data dictionary + and set here the maximum of the + space id's of the tables there */ + UT_LIST_BASE_NODE_T(fil_space_t) space_list; + /*!< list of all file spaces */ + UT_LIST_BASE_NODE_T(fil_space_t) named_spaces; + /*!< list of all file spaces + for which a MLOG_FILE_NAME + record has been written since + the latest redo log checkpoint. + Protected only by log_sys->mutex. */ + UT_LIST_BASE_NODE_T(fil_space_t) rotation_list; + /*!< list of all file spaces needing + key rotation.*/ + bool space_id_reuse_warned; + /* !< true if fil_space_create() + has issued a warning about + potential space_id reuse */ +}; + +/** The tablespace memory cache. This variable is NULL before the module is +initialized. */ +extern fil_system_t* fil_system; + /** Look up a tablespace. The caller should hold an InnoDB table lock or a MDL that prevents the tablespace from being dropped during the operation, @@ -655,6 +764,7 @@ Error messages are issued to the server log. @param[in] purpose tablespace purpose @return pointer to created tablespace, to be filled in with fil_node_create() @retval NULL on failure (such as when the same tablespace exists) */ +/* fil_space_t* fil_space_create( const char* name, @@ -662,6 +772,16 @@ fil_space_create( ulint flags, fil_type_t purpose) MY_ATTRIBUTE((warn_unused_result)); + */ +fil_space_t* +fil_space_create( + const char* name, + ulint id, + ulint flags, + fil_type_t purpose, + fil_space_crypt_t* crypt_data, + fil_encryption_t mode = FIL_ENCRYPTION_DEFAULT) + MY_ATTRIBUTE((warn_unused_result)); /*******************************************************************//** Assigns a new space id for a new single-table tablespace. This works simply by @@ -817,6 +937,51 @@ void fil_space_release( fil_space_t* space); +/** Acquire a tablespace for reading or writing a block, +when it could be dropped concurrently. +@param[in] id tablespace ID +@return the tablespace +@retval NULL if missing */ +fil_space_t* +fil_space_acquire_for_io(ulint id); + +/** Release a tablespace acquired with fil_space_acquire_for_io(). +@param[in,out] space tablespace to release */ +void +fil_space_release_for_io(fil_space_t* space); + +/** Return the next fil_space_t. +Once started, the caller must keep calling this until it returns NULL. +fil_space_acquire() and fil_space_release() are invoked here which +blocks a concurrent operation from dropping the tablespace. +@param[in,out] prev_space Pointer to the previous fil_space_t. +If NULL, use the first fil_space_t on fil_system->space_list. +@return pointer to the next fil_space_t. +@retval NULL if this was the last */ +fil_space_t* +fil_space_next( + fil_space_t* prev_space) + MY_ATTRIBUTE((warn_unused_result)); + +/** Return the next fil_space_t from key rotation list. +Once started, the caller must keep calling this until it returns NULL. +fil_space_acquire() and fil_space_release() are invoked here which +blocks a concurrent operation from dropping the tablespace. +@param[in,out] prev_space Pointer to the previous fil_space_t. +If NULL, use the first fil_space_t on fil_system->space_list. +@return pointer to the next fil_space_t. +@retval NULL if this was the last*/ +fil_space_t* +fil_space_keyrotate_next( + fil_space_t* prev_space) + MY_ATTRIBUTE((warn_unused_result)); + +void +fil_io_set_encryption( + IORequest& req_type, + const page_id_t& page_id, + fil_space_t* space); + /** Wrapper with reference-counting for a fil_space_t. */ class FilSpace { @@ -828,8 +993,9 @@ class FilSpace /** Constructor: Look up the tablespace and increment the referece count if found. @param[in] space_id tablespace ID */ - explicit FilSpace(ulint space_id) - : m_space(fil_space_acquire(space_id)) {} + explicit FilSpace(ulint space_id, bool silent = false) + : m_space(silent ? fil_space_acquire_silent(space_id) + : fil_space_acquire(space_id)) {} /** Assignment operator: This assumes that fil_space_acquire() has already been done for the fil_space_t. The caller must @@ -1057,7 +1223,9 @@ fil_ibd_create( const char* name, const char* path, ulint flags, - ulint size) + ulint size, + fil_encryption_t mode, + const CreateInfoEncryptionKeyId &create_info_encryption_key_id) MY_ATTRIBUTE((warn_unused_result)); /********************************************************************//** Tries to open a single-table tablespace and optionally checks the space id is @@ -1096,7 +1264,8 @@ fil_ibd_open( ulint id, ulint flags, const char* tablename, - const char* path_in) + const char* path_in, + Keyring_encryption_info &keyring_encryption_info) MY_ATTRIBUTE((warn_unused_result)); enum fil_load_status { @@ -1541,6 +1710,12 @@ fil_mtr_rename_log( mtr_t* mtr) MY_ATTRIBUTE((warn_unused_result)); +//TODO:Robert - why exactly do I need those mutexes ? +/** Acquire the fil_system mutex. */ +#define fil_system_enter() mutex_enter(&fil_system->mutex) +/** Release the fil_system mutex. */ +#define fil_system_exit() mutex_exit(&fil_system->mutex) + /** Note that a non-predefined persistent tablespace has been modified by redo log. @param[in,out] space tablespace */ @@ -1582,12 +1757,24 @@ fil_get_compression( @param[in] key Encryption key @param[in] iv Encryption iv @return DB_SUCCESS or error code */ +/* dberr_t fil_set_encryption( ulint space_id, Encryption::Type algorithm, byte* key, - byte* iv) + byte* iv, + ulint key_version, + fil_encryption_t encryption) + MY_ATTRIBUTE((warn_unused_result)); +*/ +dberr_t +fil_set_encryption( + ulint space_id, + Encryption::Type algorithm, + byte* key, + byte* iv, + bool aquire_mutex = true) MY_ATTRIBUTE((warn_unused_result)); /** @@ -1706,6 +1893,12 @@ fil_space_set_corrupt( /*==================*/ ulint space_id); +void +fil_space_set_encrypted( +/*==================*/ + ulint space_id); + + typedef std::vector space_id_vec; /** Rotate tablespace keys of global tablespaces like system, temporary, etc. diff --git a/storage/innobase/include/fil0rkinfo.h b/storage/innobase/include/fil0rkinfo.h new file mode 100644 index 000000000000..ff2e43e8cbde --- /dev/null +++ b/storage/innobase/include/fil0rkinfo.h @@ -0,0 +1,30 @@ +#ifndef fil0rkinfo_h +#define fil0rkinfo_h + +//#ifndef UNIV_INNOCHECKSUM + +#define CRYPT_SCHEME_UNENCRYPTED 0 +#define CRYPT_SCHEME_1 1 + +struct Keyring_encryption_info +{ + Keyring_encryption_info() + : keyring_encryption_key_is_missing(false) + , page0_has_crypt_data(false) + , keyring_encryption_min_key_version(0) + , type(CRYPT_SCHEME_UNENCRYPTED) + {} + bool keyring_encryption_key_is_missing; // initlialized in dict_mem_table_create + bool page0_has_crypt_data; + uint keyring_encryption_min_key_version; + uint type; + + bool is_encryption_in_progress() + { + return keyring_encryption_min_key_version == 0 && type != CRYPT_SCHEME_UNENCRYPTED; + } +}; + +//#endif // UNIV_INNOCHECKSUM + +#endif diff --git a/storage/innobase/include/fsp0file.h b/storage/innobase/include/fsp0file.h index 79611a3f1732..3abe1c90cb12 100644 --- a/storage/innobase/include/fsp0file.h +++ b/storage/innobase/include/fsp0file.h @@ -233,6 +233,24 @@ class Datafile { @param[in] name Tablespace Name if known, NULL if not */ void set_name(const char* name); + struct ValidateOutput { + ValidateOutput() + : error(DB_ERROR) + , encryption_type(DO_NOT_KNOW) + {} + + Keyring_encryption_info keyring_encryption_info; + + enum EncryptionType { + DO_NOT_KNOW, /*error occured before we were able to read encryption type from first page*/ + NONE, + KEYRING, + MASTER_KEY + }; + dberr_t error; + EncryptionType encryption_type; + }; + /** Validates the datafile and checks that it conforms with the expected space ID and flags. The file should exist and be successfully opened in order for this function to validate it. @@ -241,7 +259,7 @@ class Datafile { @param[in] for_import is it for importing @retval DB_SUCCESS if tablespace is valid, DB_ERROR if not. m_is_valid is also set true on success, else false. */ - dberr_t validate_to_dd( + ValidateOutput validate_to_dd( ulint space_id, ulint flags, bool for_import) @@ -255,7 +273,7 @@ class Datafile { ry to restore that page. @retval DB_SUCCESS if tablespace is valid, DB_ERROR if not. m_is_valid is also set true on success, else false. */ - dberr_t validate_for_recovery() + ValidateOutput validate_for_recovery() MY_ATTRIBUTE((warn_unused_result)); /** Checks the consistency of the first page of a datafile when the @@ -268,8 +286,8 @@ class Datafile { @retval DB_SUCCESS on if the datafile is valid @retval DB_CORRUPTION if the datafile is not readable @retval DB_TABLESPACE_EXISTS if there is a duplicate space_id */ - dberr_t validate_first_page(lsn_t* flush_lsn, - bool for_import) + ValidateOutput validate_first_page(lsn_t* flush_lsn, + bool for_import) MY_ATTRIBUTE((warn_unused_result)); /** Get Datafile::m_name. @@ -348,6 +366,11 @@ class Datafile { @return true if it is the same file, else false */ bool same_as(const Datafile& other) const; + /** Get access to the first data page. + It is valid after open_read_only() succeeded. + @return the first data page */ + const byte* get_first_page() const { return(m_first_page); } + private: /** Free the filepath buffer. */ void free_filepath(); diff --git a/storage/innobase/include/fsp0fsp.h b/storage/innobase/include/fsp0fsp.h index bb9b8677d34d..af18665656ad 100644 --- a/storage/innobase/include/fsp0fsp.h +++ b/storage/innobase/include/fsp0fsp.h @@ -333,12 +333,14 @@ fsp_header_decode_encryption_info( byte* iv, byte* encryption_info); + /** Reads the encryption key from the first page of a tablespace. @param[in] fsp_flags tablespace flags @param[in/out] key tablespace key @param[in/out] iv tablespace iv @param[in] page first page of a tablespace @return true if success */ + bool fsp_header_get_encryption_key( ulint fsp_flags, diff --git a/storage/innobase/include/ha_prototypes.h b/storage/innobase/include/ha_prototypes.h index b2cd9380af14..c7bbcd67eae6 100644 --- a/storage/innobase/include/ha_prototypes.h +++ b/storage/innobase/include/ha_prototypes.h @@ -577,6 +577,17 @@ trx_t* innobase_get_trx_for_slow_log(void); extern bool innodb_inited; + +enum srv_encrypt_tables_values { + SRV_ENCRYPT_TABLES_OFF = 0, + SRV_ENCRYPT_TABLES_ON = 1, + SRV_ENCRYPT_TABLES_FORCE = 2, + SRV_ENCRYPT_TABLES_KEYRING_ON = 3, + SRV_ENCRYPT_TABLES_KEYRING_FORCE = 4, + SRV_ENCRYPT_TABLES_ONLINE_TO_KEYRING = 5, + SRV_ENCRYPT_TABLES_ONLINE_TO_KEYRING_FORCE = 6, + SRV_ENCRYPT_TABLES_ONLINE_FROM_KEYRING_TO_UNENCRYPTED = 7 +}; #endif /* !UNIV_HOTBACKUP && !UNIV_INNOCHECKSUM */ #endif /* HA_INNODB_PROTOTYPES_H */ diff --git a/storage/innobase/include/ibuf0ibuf.h b/storage/innobase/include/ibuf0ibuf.h index 74319aa4235c..924612424c69 100644 --- a/storage/innobase/include/ibuf0ibuf.h +++ b/storage/innobase/include/ibuf0ibuf.h @@ -91,8 +91,9 @@ separately committed mini-transaction, because in crash recovery, the free bits could momentarily be set too high. */ /******************************************************************//** -Creates the insert buffer data structure at a database startup. */ -void +Creates the insert buffer data structure at a database startup. +@return DB_SUCCESS or failure */ +dberr_t ibuf_init_at_db_start(void); /*=======================*/ /*********************************************************************//** diff --git a/storage/innobase/include/log0recv.h b/storage/innobase/include/log0recv.h index a6291cdc38ca..4613a4ba4932 100644 --- a/storage/innobase/include/log0recv.h +++ b/storage/innobase/include/log0recv.h @@ -426,6 +426,10 @@ struct recv_sys_t{ encryption_list_t* /*!< Encryption information list */ encryption_list; + + void set_corrupt_log() { + found_corrupt_log = true; + } }; /** The recovery system */ diff --git a/storage/innobase/include/mtr0mtr.h b/storage/innobase/include/mtr0mtr.h index 2ead92b5b5c0..189c97784a55 100644 --- a/storage/innobase/include/mtr0mtr.h +++ b/storage/innobase/include/mtr0mtr.h @@ -225,6 +225,7 @@ struct mtr_t { mtr_t() { m_impl.m_state = MTR_STATE_INIT; + m_impl.m_flush_observer = NULL; } ~mtr_t() { } diff --git a/storage/innobase/include/os0file.h b/storage/innobase/include/os0file.h index cb09528c57bc..70f91732c806 100644 --- a/storage/innobase/include/os0file.h +++ b/storage/innobase/include/os0file.h @@ -310,6 +310,10 @@ struct Compression { static bool is_none(const char* algorithm) MY_ATTRIBUTE((warn_unused_result)); + + static bool is_no(const char* algorithm) + MY_ATTRIBUTE((warn_unused_result)); + /** Decompress the page data contents. Page type must be FIL_PAGE_COMPRESSED, if not then the source contents are left unchanged and DB_SUCCESS is returned. @@ -331,6 +335,12 @@ struct Compression { Type m_type; }; +static const uint ENCRYPTION_KEY_VERSION_INVALID = (~(uint)0); + +static const uint FIL_DEFAULT_ENCRYPTION_KEY = 0; + +static const uint ENCRYPTION_KEY_VERSION_NOT_ENCRYPTED = 0; + /** Encryption key length */ static const ulint ENCRYPTION_KEY_LEN = 32; @@ -345,18 +355,32 @@ static const char ENCRYPTION_KEY_MAGIC_V1[] = "lCA"; version. */ static const char ENCRYPTION_KEY_MAGIC_V2[] = "lCB"; +static const char ENCRYPTION_KEY_MAGIC_PS_V1[] = "PSA"; + /** Encryption master key prifix */ static const char ENCRYPTION_MASTER_KEY_PRIFIX[] = "INNODBKey"; /** Encryption master key prifix size */ static const ulint ENCRYPTION_MASTER_KEY_PRIFIX_LEN = 9; +static const char ENCRYPTION_ZIP_PAGE_KEYRING_ENCRYPTION_MAGIC[] = "RK"; + +static const ulint ENCRYPTION_ZIP_PAGE_KEYRING_ENCRYPTION_MAGIC_LEN = 2; + +/** Encryption master key prifix */ +//TODO: Change this to percona_innodb_idb +static const char ENCRYPTION_PERCONA_SYSTEM_KEY_PREFIX[] = "percona_innodb"; + +/** Encryption master key prifix size */ +static const ulint ENCRYPTION_PERCONA_SYSTEM_KEY_PREFIX_LEN = array_elements(ENCRYPTION_PERCONA_SYSTEM_KEY_PREFIX); + /** Encryption master key prifix size */ static const ulint ENCRYPTION_MASTER_KEY_NAME_MAX_LEN = 100; /** UUID of server instance, it's needed for composing master key name */ static const ulint ENCRYPTION_SERVER_UUID_LEN = 36; + /** Encryption information total size for 5.7.11: magic number + master_key_id + key + iv + checksum */ static const ulint ENCRYPTION_INFO_SIZE_V1 = (ENCRYPTION_MAGIC_SIZE \ @@ -383,8 +407,17 @@ struct Encryption { /** Use AES */ AES = 1, + + KEYRING = 2 }; + enum Encryption_rotation + { + NO_ROTATION, + MASTER_KEY_TO_KEYRING + }; + + /** Encryption information format version */ enum Version { @@ -396,13 +429,34 @@ struct Encryption { }; /** Default constructor */ - Encryption() : m_type(NONE) { }; + Encryption(): + m_type(NONE), + m_key(NULL), + m_klen(0), + m_key_allocated(false), + m_iv(NULL), + m_tablespace_iv(NULL), + m_tablespace_key(NULL), + m_key_version(0), + m_key_id(0), + m_checksum(0), + m_encryption_rotation(NO_ROTATION) + {} /** Specific constructor @param[in] type Algorithm type */ - explicit Encryption(Type type) - : - m_type(type) + explicit Encryption(Type type): + m_type(type), + m_key(NULL), + m_klen(0), + m_key_allocated(false), + m_iv(NULL), + m_tablespace_iv(NULL), + m_tablespace_key(NULL), + m_key_version(0), + m_key_id(0), + m_checksum(0), + m_encryption_rotation(NO_ROTATION) { #ifdef UNIV_DEBUG switch (m_type) { @@ -416,13 +470,57 @@ struct Encryption { } /** Copy constructor */ - Encryption(const Encryption& other) - : + Encryption(const Encryption& other): m_type(other.m_type), m_key(other.m_key), m_klen(other.m_klen), - m_iv(other.m_iv) - { }; + m_key_allocated(other.m_key_allocated), + m_iv(other.m_iv), + m_tablespace_iv(other.m_tablespace_iv), + m_tablespace_key(other.m_tablespace_key), + m_key_version(other.m_key_version), + m_key_id(other.m_key_id), + m_checksum(other.m_checksum), + m_encryption_rotation(other.m_encryption_rotation) + { + if (other.m_key_allocated && other.m_key != NULL) + m_key = static_cast( + my_memdup(PSI_NOT_INSTRUMENTED, + other.m_key, other.m_klen, MYF(0))); + } + + Encryption& operator = (const Encryption& other) { + Encryption tmp(other); + swap(tmp); + return *this; + } + + void swap(Encryption& other) { + std::swap(m_type, other.m_type); + std::swap(m_key, other.m_key); + std::swap(m_klen, other.m_klen); + std::swap(m_key_allocated, other.m_key_allocated); + std::swap(m_iv, other.m_iv); + std::swap(m_tablespace_iv, other.m_tablespace_iv); + std::swap(m_tablespace_key, other.m_tablespace_key); + std::swap(m_key_version, other.m_key_version); + std::swap(m_key_id, other.m_key_id); + std::swap(m_checksum, other.m_checksum); + std::swap(m_encryption_rotation, other.m_encryption_rotation); + } + + ~Encryption() { + if (m_key_allocated && m_key != NULL) + my_free(m_key); + } + + void set_key(byte *key, ulint key_len, bool allocated) { + if (m_key_allocated && m_key != NULL) + my_free(m_key); + m_key = key; + m_klen = key_len; + m_key_allocated = allocated; + } /** Check if page is encrypted page or not @param[in] page page which need to check @@ -455,20 +553,53 @@ struct Encryption { static bool is_none(const char* algorithm) MY_ATTRIBUTE((warn_unused_result)); - /** Check if the NO algorithm was explicitly specified. - @param[in] algorithm Encryption algorithm to check - @return true if no algorithm explicitly requested */ - static bool none_explicitly_specified(const char* algorithm) + static bool is_master_key_encryption(const char* algorithm) + MY_ATTRIBUTE((warn_unused_result)); + + static bool is_no(const char* algorithm) + MY_ATTRIBUTE((warn_unused_result)); + + static bool is_empty(const char* algorithm) + MY_ATTRIBUTE((warn_unused_result)); + + static bool is_keyring(const char *algoritm) MY_ATTRIBUTE((warn_unused_result)); /** Generate random encryption value for key and iv. @param[in,out] value Encryption value */ static void random_value(byte* value); + //TODO:Robert: Czy to powinno być tutaj robione ? + static void create_tablespace_key(byte** tablespace_key, + uint key_id); + /** Create new master key for key rotation. @param[in,out] master_key master key */ static void create_master_key(byte** master_key); + static bool tablespace_key_exists_or_create_new_one_if_does_not_exist(uint key_id); + + static bool tablespace_key_exists(uint key_id); + + static bool is_encrypted_and_compressed(const byte *page); + + static uint encryption_get_latest_version(uint key_id); + + //TODO:Robert: Te dwa są potrzebne. + static void get_latest_tablespace_key(uint key_id, + uint *tablespace_key_version, + byte** tablespace_key); + + + static void get_latest_tablespace_key_or_create_new_one(uint key_id, + uint *tablespace_key_version, + byte** tablespace_key); + + static bool get_tablespace_key(uint key_id, + uint tablespace_key_version, + byte** tablespace_key, + size_t *key_len); + /** Get master key by key id. @param[in] master_key_id master key id @param[in] srv_uuid uuid of server instance @@ -485,6 +616,11 @@ struct Encryption { byte** master_key, Encryption::Version* version); + static bool is_keyring_alive(); + + static bool can_page_be_keyring_encrypted(ulint page_type); + static bool can_page_be_keyring_encrypted(byte* page); + /** Encrypt the page data contents. Page type can't be FIL_PAGE_ENCRYPTED, FIL_PAGE_COMPRESSED_AND_ENCRYPTED, FIL_PAGE_ENCRYPTED_RTREE. @@ -535,14 +671,45 @@ struct Encryption { /** Encrypt key length*/ ulint m_klen; + /** Encrypt key allocated */ + bool m_key_allocated; + /** Encrypt initial vector */ byte* m_iv; + // We decide as the last step in decrypt (after reading the page) + // when re_encryption_type is MK_TO_RK whether page is + // encrypted with MK or RK => thus we do not know which tablespace_iv we are + // going to use RK or MK + byte* m_tablespace_iv; + + byte* m_tablespace_key; + + uint m_key_version; + + uint m_key_id; + + uint32 m_checksum; + + //mutable bool m_was_page_encrypted_when_read; + /** Current master key id */ static ulint master_key_id; /** Current uuid of server instance */ static char uuid[ENCRYPTION_SERVER_UUID_LEN + 1]; + + Encryption_rotation m_encryption_rotation; +private: +//TODO: Robert: Is it needed here? + static void get_keyring_key(const char *key_name, byte** key, size_t *key_len); + + static void get_latest_system_key(const char *system_key_name, byte **key, uint *key_version, + size_t *key_length); + + static void fill_key_name(char *key_name, uint key_id); + + static void fill_key_name(char* key_name, uint key_id, uint key_version); }; /** Types for AIO operations @{ */ @@ -553,6 +720,13 @@ struct Encryption { #define IORequestLogRead IORequest(IORequest::LOG | IORequest::READ) #define IORequestLogWrite IORequest(IORequest::LOG | IORequest::WRITE) +struct Zip_compressed_info +{ + bool is_zip_compressed; + + +}; + /** The IO Context that is passed down to the low level IO code */ class IORequest { @@ -608,7 +782,9 @@ class IORequest { m_block_size(UNIV_SECTOR_SIZE), m_type(READ), m_compression(), - m_encryption() + m_encryption(), + m_is_page_zip_compressed(false), + m_zip_page_physical_size(0) { /* No op */ } @@ -621,7 +797,9 @@ class IORequest { m_block_size(UNIV_SECTOR_SIZE), m_type(static_cast(type)), m_compression(), - m_encryption() + m_encryption(), + m_is_page_zip_compressed(false), + m_zip_page_physical_size(0) { if (is_log()) { disable_compression(); @@ -784,6 +962,27 @@ class IORequest { return(compression_algorithm().m_type != Compression::NONE); } + void mark_page_zip_compressed() + { + m_is_page_zip_compressed = true; + } + + bool is_page_zip_compressed() const + MY_ATTRIBUTE((warn_unused_result)) + { + return m_is_page_zip_compressed; + } + + ulint get_zip_page_physical_size() const + { + return m_zip_page_physical_size; + } + + void set_zip_page_physical_size(ulint zip_page_physical_size) + { + m_zip_page_physical_size = zip_page_physical_size; + } + /** @return true if the page read should not be transformed. */ bool is_compression_enabled() const MY_ATTRIBUTE((warn_unused_result)) @@ -826,13 +1025,27 @@ class IORequest { @param[in] iv The encryption iv to use */ void encryption_key(byte* key, ulint key_len, - byte* iv) + bool key_allocated, + byte* iv, + uint key_version, + uint key_id, + byte *tablespace_iv, + byte *tablespace_key) { - m_encryption.m_key = key; - m_encryption.m_klen = key_len; + //ut_ad(m_encryption.m_key == NULL); //TODO:Robert need to make sure I am not overriding memory here + m_encryption.set_key(key, key_len, key_allocated); m_encryption.m_iv = iv; + m_encryption.m_key_version = key_version; + m_encryption.m_key_id = key_id; + m_encryption.m_tablespace_iv = tablespace_iv; + m_encryption.m_tablespace_key = tablespace_key; } + void encryption_rotation(Encryption::Encryption_rotation encryption_rotation) + { + m_encryption.m_encryption_rotation = encryption_rotation; + } + /** Get the encryption algorithm. @return the encryption algorithm */ Encryption encryption_algorithm() const @@ -851,12 +1064,25 @@ class IORequest { /** Clear all encryption related flags */ void clear_encrypted() { - m_encryption.m_key = NULL; - m_encryption.m_klen = 0; + m_encryption.set_key(NULL, 0, false); m_encryption.m_iv = NULL; m_encryption.m_type = Encryption::NONE; + m_encryption.m_encryption_rotation = Encryption::NO_ROTATION; + m_encryption.m_tablespace_iv = NULL; + m_encryption.m_key_id = 0; + m_encryption.m_tablespace_key = NULL; } + //bool was_page_encrypted_when_read() const + //{ + //return m_encryption.m_was_page_encrypted_when_read; + //} + + //void set_that_page_was_encrypted_when_read() const + //{ + //m_encryption.m_was_page_encrypted_when_read = true; + //} + /** Note that the IO is for double write recovery. */ void dblwr_recover() { @@ -888,6 +1114,11 @@ class IORequest { #endif /* HAVE_FALLOC_PUNCH_HOLE_AND_KEEP_SIZE || _WIN32 */ } + //bool will_encrypt_page() + //{ + //return m_encryption.key != NULL; + //} + private: /* File system best block size */ uint32_t m_block_size; @@ -900,6 +1131,10 @@ class IORequest { /** Encryption algorithm */ Encryption m_encryption; + + bool m_is_page_zip_compressed; + + ulint m_zip_page_physical_size; }; /* @} */ @@ -2148,6 +2383,7 @@ os_aio_func( ulint space_id, trx_t* trx, bool should_buffer); + //bool *was_page_read_encrypted = NULL); /** Wakes up all async i/o threads so that they know to exit themselves in shutdown. */ diff --git a/storage/innobase/include/page0cur.ic b/storage/innobase/include/page0cur.ic index 6184361c8563..269ddb280e66 100644 --- a/storage/innobase/include/page0cur.ic +++ b/storage/innobase/include/page0cur.ic @@ -39,7 +39,7 @@ page_cur_get_page( page_cur_t* cur) /*!< in: page cursor */ { ut_ad(cur); - ut_ad(page_align(cur->rec) == cur->block->frame); + ut_ad(cur->rec == NULL || page_align(cur->rec) == cur->block->frame); return(page_align(cur->rec)); } @@ -54,7 +54,7 @@ page_cur_get_block( page_cur_t* cur) /*!< in: page cursor */ { ut_ad(cur); - ut_ad(page_align(cur->rec) == cur->block->frame); + ut_ad(cur->rec == NULL || page_align(cur->rec) == cur->block->frame); return(cur->block); } @@ -80,7 +80,7 @@ page_cur_get_rec( page_cur_t* cur) /*!< in: page cursor */ { ut_ad(cur); - ut_ad(page_align(cur->rec) == cur->block->frame); + ut_ad(cur->rec == NULL || page_align(cur->rec) == cur->block->frame); return(cur->rec); } diff --git a/storage/innobase/include/row0mysql.h b/storage/innobase/include/row0mysql.h index 45c5f70b7637..3485005d48f9 100644 --- a/storage/innobase/include/row0mysql.h +++ b/storage/innobase/include/row0mysql.h @@ -38,6 +38,8 @@ Created 9/17/2000 Heikki Tuuri #include "trx0types.h" #include "sess0sess.h" +#include "create_info_encryption_key.h" + // Forward declaration struct SysIndexCallback; @@ -469,7 +471,9 @@ row_create_table_for_mysql( /*!< in: compression algorithm to use, can be NULL */ trx_t* trx, /*!< in/out: transaction */ - bool commit) /*!< in: if true, commit the transaction */ + bool commit, /*!< in: if true, commit the transaction */ + fil_encryption_t mode, /*!< in: encryption mode */ + const CreateInfoEncryptionKeyId &create_info_encryption_key_id) /*!< in: encryption key_id */ MY_ATTRIBUTE((warn_unused_result)); /*********************************************************************//** Does an index creation operation for MySQL. TODO: currently failure @@ -584,7 +588,7 @@ row_mysql_drop_temp_tables(void); /*********************************************************************//** Discards the tablespace of a table which stored in an .ibd file. Discarding means that this function deletes the .ibd file and assigns a new table id for -the table. Also the flag table->ibd_file_missing is set TRUE. +the table. Also the flag table->file_unreadable is set TRUE. @return error code or DB_SUCCESS */ dberr_t row_discard_tablespace_for_mysql( diff --git a/storage/innobase/include/row0quiesce.h b/storage/innobase/include/row0quiesce.h index ae14b3c63c14..a3b0fdf2fd13 100644 --- a/storage/innobase/include/row0quiesce.h +++ b/storage/innobase/include/row0quiesce.h @@ -34,6 +34,7 @@ struct trx_t; /** The version number of the export meta-data text file. */ #define IB_EXPORT_CFG_VERSION_V1 0x1UL +#define IB_EXPORT_CFG_VERSION_V1_WITH_RK 0xFFFFFFFF /*********************************************************************//** Quiesce the tablespace that the table resides in. */ diff --git a/storage/innobase/include/row0trunc.h b/storage/innobase/include/row0trunc.h index 87dc37f4af5c..c55ca37a722e 100644 --- a/storage/innobase/include/row0trunc.h +++ b/storage/innobase/include/row0trunc.h @@ -357,6 +357,10 @@ class truncate_t { /** Log file name. */ char* m_log_file_name; + /** Encryption information of the table */ + fil_encryption_t m_encryption; + uint32_t m_encryption_key_id; + /** Vector of tables to truncate. */ typedef std::vector > tables_t; diff --git a/storage/innobase/include/srv0mon.h b/storage/innobase/include/srv0mon.h index 1bd67fd9a176..f59333e90909 100644 --- a/storage/innobase/include/srv0mon.h +++ b/storage/innobase/include/srv0mon.h @@ -171,6 +171,7 @@ enum monitor_id_t { MONITOR_OVLD_PAGE_CREATED, MONITOR_OVLD_PAGES_WRITTEN, MONITOR_OVLD_PAGES_READ, + MONITOR_OVLD_PAGES0_READ, MONITOR_OVLD_BYTE_READ, MONITOR_OVLD_BYTE_WRITTEN, MONITOR_FLUSH_BATCH_SCANNED, @@ -333,6 +334,10 @@ enum monitor_id_t { MONITOR_PAD_INCREMENTS, MONITOR_PAD_DECREMENTS, + /* New monitor variables for page encryption */ + MONITOR_OVLD_PAGES_ENCRYPTED, + MONITOR_OVLD_PAGES_DECRYPTED, + /* Index related counters */ MONITOR_MODULE_INDEX, MONITOR_INDEX_SPLIT, diff --git a/storage/innobase/include/srv0srv.h b/storage/innobase/include/srv0srv.h index a8a0ee42a247..a9b88178954d 100644 --- a/storage/innobase/include/srv0srv.h +++ b/storage/innobase/include/srv0srv.h @@ -153,6 +153,23 @@ struct srv_stats_t { /* Number of row log blocks decrypted */ ulint_ctr_64_t n_rowlog_blocks_decrypted; + + /** Number of times page 0 is read from tablespace */ + ulint_ctr_64_t page0_read; + + /** Number of encryption_get_latest_key_version calls */ + ulint_ctr_64_t n_key_requests; + + /** Number of log scrub operations */ + //ulint_ctr_64_t n_log_scrubs; + + /** Number of spaces in keyrotation list */ + ulint_ctr_64_t key_rotation_list_length; + + /* Number of pages encrypted */ + ulint_ctr_64_t pages_encrypted; + /* Number of pages decrypted */ + ulint_ctr_64_t pages_decrypted; }; extern const char* srv_main_thread_op_info; @@ -291,6 +308,9 @@ extern const char* deprecated_undo_logs; /** Maximum size of undo tablespace. */ extern unsigned long long srv_max_undo_log_size; +extern uint srv_n_fil_crypt_threads; +extern uint srv_n_fil_crypt_threads_started; + /** Rate at which UNDO records should be purged. */ extern ulong srv_purge_rseg_truncate_frequency; @@ -1101,6 +1121,7 @@ struct export_var_t{ ulint innodb_page_size; /*!< UNIV_PAGE_SIZE */ ulint innodb_pages_created; /*!< buf_pool->stat.n_pages_created */ ulint innodb_pages_read; /*!< buf_pool->stat.n_pages_read */ + ulint innodb_page0_read; /*!< srv_stats.page0_read */ ulint innodb_pages_written; /*!< buf_pool->stat.n_pages_written */ trx_id_t innodb_purge_trx_id; undo_no_t innodb_purge_undo_no; @@ -1128,11 +1149,6 @@ struct export_var_t{ index lookups when freeing file pages */ #endif /* UNIV_DEBUG */ - ib_uint64_t innodb_n_merge_blocks_encrypted;/*!< Number of merge blocks encrypted */ - ib_uint64_t innodb_n_merge_blocks_decrypted;/*!< Number of merge blocks decrypted */ - ib_uint64_t innodb_n_rowlog_blocks_encrypted;/*!< Number of row log blocks encrypted */ - ib_uint64_t innodb_n_rowlog_blocks_decrypted;/*!< Number of row log blocks decrypted */ - ulint innodb_sec_rec_cluster_reads; /*!< srv_sec_rec_cluster_reads */ ulint innodb_sec_rec_cluster_reads_avoided; /*!< srv_sec_rec_cluster_reads_avoided */ @@ -1140,6 +1156,28 @@ struct export_var_t{ fragmentation_stats_t innodb_fragmentation_stats;/*!< Fragmentation statistics */ + int64_t innodb_pages_encrypted; /*!< Number of pages + encrypted */ + int64_t innodb_pages_decrypted; /*!< Number of pages + decrypted */ + + /*!< Number of merge blocks encrypted */ + int64_t innodb_n_merge_blocks_encrypted; + /*!< Number of merge blocks decrypted */ + int64_t innodb_n_merge_blocks_decrypted; + /*!< Number of row log blocks encrypted */ + int64_t innodb_n_rowlog_blocks_encrypted; + /*!< Number of row log blocks decrypted */ + int64_t innodb_n_rowlog_blocks_decrypted; + + ulint innodb_encryption_rotation_pages_read_from_cache; + ulint innodb_encryption_rotation_pages_read_from_disk; + ulint innodb_encryption_rotation_pages_modified; + ulint innodb_encryption_rotation_pages_flushed; + ulint innodb_encryption_rotation_estimated_iops; + int64_t innodb_encryption_key_requests; + int64_t innodb_key_rotation_list_length; + }; /** Thread slot in the thread table. */ diff --git a/storage/innobase/include/sync0types.h b/storage/innobase/include/sync0types.h index a8638ab13ecb..363f4861d256 100644 --- a/storage/innobase/include/sync0types.h +++ b/storage/innobase/include/sync0types.h @@ -397,6 +397,11 @@ enum latch_id_t { LATCH_ID_BUF_CHUNK_MAP_LATCH, LATCH_ID_SYNC_DEBUG_MUTEX, LATCH_ID_MASTER_KEY_ID_MUTEX, + LATCH_ID_FIL_CRYPT_MUTEX, + LATCH_ID_FIL_CRYPT_STAT_MUTEX, + LATCH_ID_FIL_CRYPT_DATA_MUTEX, + LATCH_ID_FIL_CRYPT_THREADS_MUTEX, + LATCH_ID_FIL_CRYPT_START_ROTATE_MUTEX, LATCH_ID_TEST_MUTEX, LATCH_ID_MAX = LATCH_ID_TEST_MUTEX }; diff --git a/storage/innobase/lock/lock0lock.cc b/storage/innobase/lock/lock0lock.cc index 9aadb177326f..816e7e78ba66 100644 --- a/storage/innobase/lock/lock0lock.cc +++ b/storage/innobase/lock/lock0lock.cc @@ -5814,6 +5814,7 @@ lock_rec_block_validate( /* Make sure that the tablespace is not deleted while we are trying to access the page. */ if (fil_space_t* space = fil_space_acquire(space_id)) { + dberr_t err = DB_SUCCESS; mtr_start(&mtr); block = buf_page_get_gen( @@ -5821,7 +5822,14 @@ lock_rec_block_validate( page_size_t(space->flags), RW_X_LATCH, NULL, BUF_GET_POSSIBLY_FREED, - __FILE__, __LINE__, &mtr); + __FILE__, __LINE__, &mtr, false, &err); + + if (err != DB_SUCCESS) { + ib::error() << "Lock rec block validate failed for tablespace " + << space->name + << " space_id " << space_id + << " page_no " << page_no << " err " << err; + } buf_block_dbg_add_level(block, SYNC_NO_ORDER_CHECK); diff --git a/storage/innobase/log/log0log.cc b/storage/innobase/log/log0log.cc index bd14a7c80e9a..801b33bd4a85 100644 --- a/storage/innobase/log/log0log.cc +++ b/storage/innobase/log/log0log.cc @@ -46,7 +46,9 @@ Created 12/9/1995 Heikki Tuuri #include "buf0flu.h" #include "srv0srv.h" #include "log0recv.h" +#include "lock0lock.h" #include "fil0fil.h" +#include "fil0crypt.h" #include "dict0boot.h" #include "dict0stats_bg.h" #include "srv0srv.h" @@ -2226,7 +2228,7 @@ logs_empty_and_mark_files_at_shutdown(void) active_thd = srv_get_active_thread_type(); - if (active_thd != SRV_NONE) { + if (active_thd != SRV_NONE || srv_n_fil_crypt_threads_started) { if (active_thd == SRV_PURGE) { srv_purge_wakeup(); @@ -2242,11 +2244,9 @@ logs_empty_and_mark_files_at_shutdown(void) switch (active_thd) { case SRV_NONE: - /* This shouldn't happen because we've - already checked for this case before - entering the if(). We handle it here - to avoid a compiler warning. */ - ut_error; + ut_ad(srv_n_fil_crypt_threads_started); + thread_type = "encryption thread"; + break; case SRV_WORKER: thread_type = "worker threads"; break; diff --git a/storage/innobase/log/log0recv.cc b/storage/innobase/log/log0recv.cc index f3c84f7b93f1..39cf3adfae90 100644 --- a/storage/innobase/log/log0recv.cc +++ b/storage/innobase/log/log0recv.cc @@ -69,6 +69,9 @@ bool recv_replay_file_ops = true; #include "fut0lst.h" #endif /* !UNIV_HOTBACKUP */ + +#include "fil0crypt.h" + /** Log records are stored in the hash table in chunks at most of this size; this must be less than UNIV_PAGE_SIZE as it is stored in the buffer pool */ #define RECV_DATA_BLOCK_SIZE (MEM_MAX_ALLOC_IN_BUF - sizeof(recv_data_t)) @@ -266,6 +269,8 @@ fil_name_process( /* For encrypted tablespace, set key and iv. */ if (FSP_FLAGS_GET_ENCRYPTION(space->flags) && recv_sys->encryption_list != NULL) { + + ut_ad(space->crypt_data == NULL); dberr_t err; encryption_list_t::iterator it; @@ -436,7 +441,7 @@ fil_name_parse( ut_ad(0); // the caller checked this case MLOG_FILE_NAME: if (corrupt) { - recv_sys->found_corrupt_log = true; + recv_sys->set_corrupt_log(); break; } @@ -445,7 +450,7 @@ fil_name_parse( break; case MLOG_FILE_DELETE: if (corrupt) { - recv_sys->found_corrupt_log = true; + recv_sys->set_corrupt_log(); break; } @@ -457,7 +462,7 @@ fil_name_parse( break; case MLOG_FILE_RENAME2: if (corrupt) { - recv_sys->found_corrupt_log = true; + recv_sys->set_corrupt_log(); } /* The new name follows the old name. */ @@ -480,7 +485,7 @@ fil_name_parse( || !memchr(new_name, OS_PATH_SEPARATOR, new_len); if (corrupt) { - recv_sys->found_corrupt_log = true; + recv_sys->set_corrupt_log(); break; } @@ -633,7 +638,7 @@ fil_name_parse( byte* end_ptr = ptr + len; if (corrupt) { - recv_sys->found_corrupt_log = true; + recv_sys->set_corrupt_log(); return(end_ptr); } @@ -705,7 +710,9 @@ fil_name_parse( dberr_t ret = fil_ibd_create( space_id, tablespace_name.c_str(), abs_file_path.c_str(), - flags, FIL_IBD_FILE_INITIAL_SIZE); + flags, FIL_IBD_FILE_INITIAL_SIZE, + FIL_ENCRYPTION_DEFAULT, + 0); if (ret != DB_SUCCESS) { ib::fatal() << "Could not create the" @@ -741,7 +748,7 @@ fil_name_parse( || !memchr(new_table_name, OS_PATH_SEPARATOR, new_len); if (corrupt) { - recv_sys->found_corrupt_log = true; + recv_sys->set_corrupt_log(); break; } @@ -830,6 +837,9 @@ recv_sys_close(void) ut_free(recv_sys->buf); ut_free(recv_sys->last_block_buf_start); + /* Call the destructor for recv_sys_t::dblwr member */ + recv_sys->dblwr.~recv_dblwr_t(); + mutex_free(&recv_sys->mutex); ut_free(recv_sys); @@ -864,6 +874,10 @@ recv_sys_mem_free(void) #endif /* !UNIV_HOTBACKUP */ ut_free(recv_sys->buf); ut_free(recv_sys->last_block_buf_start); + + /* Call the destructor for recv_sys_t::dblwr member */ + recv_sys->dblwr.~recv_dblwr_t(); + ut_free(recv_sys); recv_sys = NULL; } @@ -1504,11 +1518,10 @@ byte* fil_write_encryption_parse( byte* ptr, const byte* end, - ulint space_id) + ulint space_id, + ulint len) { fil_space_t* space; - ulint offset; - ulint len; byte* key = NULL; byte* iv = NULL; bool is_new = false; @@ -1543,20 +1556,9 @@ fil_write_encryption_parse( iv = space->encryption_iv; } - offset = mach_read_from_2(ptr); - ptr += 2; - len = mach_read_from_2(ptr); - - ptr += 2; - if (end < ptr + len) { - return(NULL); - } - - if (offset >= UNIV_PAGE_SIZE - || len + offset > UNIV_PAGE_SIZE - || (len != ENCRYPTION_INFO_SIZE_V1 + if ((len != ENCRYPTION_INFO_SIZE_V1 && len != ENCRYPTION_INFO_SIZE_V2)) { - recv_sys->found_corrupt_log = TRUE; + recv_sys->set_corrupt_log(); return(NULL); } @@ -1568,7 +1570,7 @@ fil_write_encryption_parse( if (!fsp_header_decode_encryption_info(key, iv, ptr)) { - recv_sys->found_corrupt_log = TRUE; + recv_sys->set_corrupt_log(); ib::warn() << "Encryption information" << " in the redo log of space " << space_id << " is invalid"; @@ -1705,16 +1707,42 @@ recv_parse_or_apply_log_rec_body( return(ptr + 8); case MLOG_TRUNCATE: return(truncate_t::parse_redo_entry(ptr, end_ptr, space_id)); - case MLOG_WRITE_STRING: + case MLOG_WRITE_STRING: /* For encrypted tablespace, we need to get the encryption key information before the page 0 is recovered. Otherwise, redo will not find the key to decrypt the data pages. */ - if (page_no == 0 && !is_system_tablespace(space_id) - && !apply) { - return(fil_write_encryption_parse(ptr, - end_ptr, - space_id)); + if (page_no == 0 && !apply) { + byte* ptr_copy = ptr; + ulint offset = mach_read_from_2(ptr_copy); + ptr_copy += 2; + ulint len = mach_read_from_2(ptr_copy); + ptr_copy += 2; + if (end_ptr < ptr_copy + len) + return NULL; + + if (memcmp(ptr_copy, ENCRYPTION_KEY_MAGIC_V1, + ENCRYPTION_MAGIC_SIZE) == 0 || + memcmp(ptr, ENCRYPTION_KEY_MAGIC_V2, + ENCRYPTION_MAGIC_SIZE) == 0) { + + if (offset >= UNIV_PAGE_SIZE + || len + offset > UNIV_PAGE_SIZE) { + recv_sys->set_corrupt_log(); + return NULL; + } + + return(fil_write_encryption_parse(ptr_copy, + end_ptr, + space_id, + len)); + } else if (memcmp(ptr_copy, ENCRYPTION_KEY_MAGIC_PS_V1, + ENCRYPTION_MAGIC_SIZE) == 0) { + return(fil_parse_write_crypt_data(ptr_copy, + end_ptr, + block, + len)); + } } break; @@ -1795,6 +1823,8 @@ recv_parse_or_apply_log_rec_body( redo log been written with something older than InnoDB Plugin 1.0.4. */ ut_ad(0 + /* fil_crypt_rotate_page() writes this */ + || offs == FIL_PAGE_SPACE_ID || offs == IBUF_TREE_SEG_HEADER + IBUF_HEADER + FSEG_HDR_SPACE || offs == IBUF_TREE_SEG_HEADER @@ -2068,7 +2098,7 @@ recv_parse_or_apply_log_rec_body( break; default: ptr = NULL; - recv_sys->found_corrupt_log = true; + recv_sys->set_corrupt_log(); } if (index) { @@ -2588,9 +2618,13 @@ recv_apply_hashed_log_recs( mutex_enter(&(recv_sys->mutex)); if (recv_sys->apply_batch_on) { - + bool abort = recv_sys->found_corrupt_log; mutex_exit(&(recv_sys->mutex)); + if (abort) { + return; + } + os_thread_sleep(500000); goto loop; @@ -2685,9 +2719,14 @@ recv_apply_hashed_log_recs( /* Wait until all the pages have been processed */ while (recv_sys->n_addrs != 0) { + bool abort = recv_sys->found_corrupt_log; mutex_exit(&(recv_sys->mutex)); + if (abort) { + return; + } + os_thread_sleep(500000); mutex_enter(&(recv_sys->mutex)); @@ -2959,7 +2998,7 @@ recv_parse_log_rec( case MLOG_MULTI_REC_END | MLOG_SINGLE_REC_FLAG: case MLOG_DUMMY_RECORD | MLOG_SINGLE_REC_FLAG: case MLOG_CHECKPOINT | MLOG_SINGLE_REC_FLAG: - recv_sys->found_corrupt_log = true; + recv_sys->set_corrupt_log(); return(0); } @@ -3262,7 +3301,7 @@ recv_parse_log_recs( if (recv_sys->found_corrupt_log || type == MLOG_CHECKPOINT || (*ptr & MLOG_SINGLE_REC_FLAG)) { - recv_sys->found_corrupt_log = true; + recv_sys->set_corrupt_log(); recv_report_corrupt_log( ptr, type, space, page_no); return(true); @@ -3649,7 +3688,7 @@ recv_scan_log_recs( ib::error() << "Log parsing buffer overflow." " Recovery may have failed!"; - recv_sys->found_corrupt_log = true; + recv_sys->set_corrupt_log(); #ifndef UNIV_HOTBACKUP if (!srv_force_recovery) { @@ -4096,7 +4135,7 @@ recv_recovery_from_checkpoint_start( break; default: ut_ad(0); - recv_sys->found_corrupt_log = true; + recv_sys->set_corrupt_log(); log_mutex_exit(); return(DB_ERROR); } @@ -4560,7 +4599,10 @@ recv_dblwr_t::decrypt_sys_dblwr_pages() decrypt_request.encryption_key( space->encryption_key, space->encryption_klen, - space->encryption_iv); + false, + space->encryption_iv, + 0, 0, NULL, NULL); + decrypt_request.encryption_algorithm( Encryption::AES); diff --git a/storage/innobase/os/os0file.cc b/storage/innobase/os/os0file.cc index 86729c5e6937..573a0f160afe 100644 --- a/storage/innobase/os/os0file.cc +++ b/storage/innobase/os/os0file.cc @@ -39,6 +39,9 @@ Created 10/21/1995 Heikki Tuuri #include "os0file.h" +#include "fil0crypt.h" +#include "system_key.h" + #ifdef UNIV_NONINL #include "os0file.ic" #endif @@ -63,6 +66,8 @@ Created 10/21/1995 Heikki Tuuri #include #include +#include "fil0crypt.h" + #ifdef LINUX_NATIVE_AIO #include #endif /* LINUX_NATIVE_AIO */ @@ -78,12 +83,15 @@ Created 10/21/1995 Heikki Tuuri #ifdef UNIV_DEBUG /** Set when InnoDB has invoked exit(). */ bool innodb_calling_exit; +#include #endif /* UNIV_DEBUG */ #include #include #include +#include "fil0crypt.h" #include +#include "buf0buf.h" /** Insert buffer segment id */ static const ulint IO_IBUF_SEGMENT = 0; @@ -1264,7 +1272,14 @@ AIOHandler::post_io_processing(Slot* slot) || err == DB_UNSUPPORTED || err == DB_CORRUPTION || err == DB_IO_DECOMPRESS_FAIL); - } else { + } else if (!slot->type.is_log() && slot->type.is_read() && Encryption::can_page_be_keyring_encrypted(slot->buf) + && !slot->type.is_encryption_disabled()) { + ut_ad(is_encrypted_page(slot) == false); + // we did not go to io_complete - so mark read page as unencrypted here + mach_write_to_4(slot->buf + FIL_PAGE_ENCRYPTION_KEY_VERSION, ENCRYPTION_KEY_VERSION_NOT_ENCRYPTED); + err = DB_SUCCESS; + } + else { err = DB_SUCCESS; } @@ -1339,7 +1354,8 @@ os_file_compress_page( byte* src, ulint src_len, byte* dst, - ulint* dst_len) + ulint* dst_len, + bool will_be_encrypted_with_keyring) { ulint len = 0; ulint compression_level = page_zip_level; @@ -1372,13 +1388,15 @@ os_file_compress_page( ut_ad(src_len > FIL_PAGE_DATA + block_size); /* Must compress to <= N-1 FS blocks. */ - ulint out_len = src_len - (FIL_PAGE_DATA + block_size); + /* There need to be at least 4 bytes for key version and 4 bytes for post encryption + checksum */ + ulint out_len = src_len - (FIL_PAGE_DATA + block_size + ((will_be_encrypted_with_keyring) ? 8 : 0)); /* This is the original data page size - the page header. */ ulint content_len = src_len - FIL_PAGE_DATA; - ut_ad(out_len >= block_size - FIL_PAGE_DATA); - ut_ad(out_len <= src_len - (block_size + FIL_PAGE_DATA)); + ut_ad(out_len >= block_size - FIL_PAGE_DATA + ((will_be_encrypted_with_keyring) ? 8 : 0)); + ut_ad(out_len <= src_len - (block_size + FIL_PAGE_DATA + (will_be_encrypted_with_keyring ? 8 : 0))); /* Only compress the data + trailer, leave the header alone */ @@ -1457,9 +1475,14 @@ os_file_compress_page( len += FIL_PAGE_DATA; + if (will_be_encrypted_with_keyring) + len += 8; + + // For encryption with keyring keys we required that there will be at least 8 bytes left + // 4 bytes for key version and 4 bytes for post encryption checksum *dst_len = ut_calc_align(len, block_size); - ut_ad(*dst_len >= len && *dst_len <= out_len + FIL_PAGE_DATA); + ut_ad(*dst_len >= len && *dst_len <= out_len + FIL_PAGE_DATA + (will_be_encrypted_with_keyring ? 8 : 0)); /* Clear out the unused portion of the page. */ if (len % block_size) { @@ -1699,6 +1722,132 @@ os_file_read_string( } } +static +dberr_t +verify_post_encryption_checksum( + const IORequest&type, + Encryption &encryption, + byte* buf, + ulint src_len, + ulint offset) +{ + bool is_crypt_checksum_correct = false; // For MK encryption is_crypt_checksum_correct stays false + ulint original_type = static_cast( + mach_read_from_2(buf + FIL_PAGE_ORIGINAL_TYPE_V1)); + + if (encryption.m_type == Encryption::KEYRING && Encryption::can_page_be_keyring_encrypted(original_type)) { + if (type.is_page_zip_compressed()) { + byte zip_magic[ENCRYPTION_ZIP_PAGE_KEYRING_ENCRYPTION_MAGIC_LEN]; + memcpy(zip_magic, buf + FIL_PAGE_ZIP_KEYRING_ENCRYPTION_MAGIC, + ENCRYPTION_ZIP_PAGE_KEYRING_ENCRYPTION_MAGIC_LEN); + is_crypt_checksum_correct = memcmp(zip_magic, ENCRYPTION_ZIP_PAGE_KEYRING_ENCRYPTION_MAGIC, + ENCRYPTION_ZIP_PAGE_KEYRING_ENCRYPTION_MAGIC_LEN) == 0; + } else + is_crypt_checksum_correct = fil_space_verify_crypt_checksum(buf, src_len, type.is_page_zip_compressed(), + encryption.is_encrypted_and_compressed(buf), offset); + + if (encryption.m_encryption_rotation == Encryption::NO_ROTATION && !is_crypt_checksum_correct) { // There is no re-encryption going on + ulint space_id = mach_read_from_4(buf + FIL_PAGE_ARCH_LOG_NO_OR_SPACE_ID); + ulint page_no = mach_read_from_4(buf + FIL_PAGE_OFFSET); + ib::error() << "Post - encryption checksum verification failed - decryption failed for space id = " << space_id + << " page_no = " << page_no; + + return (DB_IO_DECRYPT_FAIL); + } + } + + if (encryption.m_encryption_rotation == Encryption::MASTER_KEY_TO_KEYRING) { // There is re-encryption going on + encryption.m_type = is_crypt_checksum_correct + ? Encryption::KEYRING // assume page is RK encrypted + : Encryption::AES; // assume page is MK encrypted + } + + return DB_SUCCESS; +} + +static +void +assing_key_version( + byte* buf, + Encryption &encryption, + bool is_page_encrypted) +{ + if (is_page_encrypted && encryption.m_type == Encryption::KEYRING) + { + mach_write_to_2(buf + FIL_PAGE_ORIGINAL_TYPE_V1, FIL_PAGE_ENCRYPTED); + ut_ad(encryption.m_key_version != ENCRYPTION_KEY_VERSION_NOT_ENCRYPTED); + mach_write_to_4(buf + FIL_PAGE_ENCRYPTION_KEY_VERSION, encryption.m_key_version); + } + else + mach_write_to_4(buf + FIL_PAGE_ENCRYPTION_KEY_VERSION, ENCRYPTION_KEY_VERSION_NOT_ENCRYPTED); +} + +static +bool +load_key_needed_for_decryption( + const IORequest& type, + Encryption &encryption, + byte *buf) +{ + if (encryption.m_type == Encryption::KEYRING) + { + ulint key_version_read_from_page = ENCRYPTION_KEY_VERSION_INVALID; + ulint page_type = mach_read_from_2(buf + FIL_PAGE_TYPE); + if (page_type == FIL_PAGE_COMPRESSED_AND_ENCRYPTED) + key_version_read_from_page= mach_read_from_4(buf + FIL_PAGE_DATA + 4); + else + { + ut_ad(page_type == FIL_PAGE_ENCRYPTED); + key_version_read_from_page= mach_read_from_4(buf + FIL_PAGE_ENCRYPTION_KEY_VERSION); + } + + ut_ad(key_version_read_from_page != ENCRYPTION_KEY_VERSION_INVALID && + key_version_read_from_page != ENCRYPTION_KEY_VERSION_NOT_ENCRYPTED); + + // in rare cases - when (re-)encryption was aborted there can be pages encrypted with + // different key versions in a given tablespace - retrieve needed key here + + byte *key_read; + + size_t key_len; + if (Encryption::get_tablespace_key(encryption.m_key_id, + key_version_read_from_page, + &key_read, &key_len) == false) + { + return false; + ut_ad(0); + } + + //For test + if (key_version_read_from_page == encryption.m_key_version) { + ut_ad(memcmp(key_read, encryption.m_key, key_len) == 0); + } + + // TODO: Allocated or not depends on whether key was taken from cache or keyring + encryption.set_key(key_read, static_cast(key_len), true); + //encryption.m_key = key_read; + //****** + + //encryption.m_klen = static_cast(key_len); + encryption.m_key_version = key_version_read_from_page; + //encryption.m_free_key_on_delete= true; // we own the key + } + else { + ut_ad(encryption.m_type == Encryption::AES); + if (encryption.m_encryption_rotation == Encryption::NO_ROTATION) + return true; // we are all set - needed key was alread loaded into encryption module + + ut_ad(encryption.m_encryption_rotation == Encryption::MASTER_KEY_TO_KEYRING); + ut_ad(encryption.m_tablespace_iv != NULL); + encryption.m_iv = encryption.m_tablespace_iv; // iv comes from tablespace header for MK encryption + ut_ad(encryption.m_tablespace_key != NULL); + encryption.set_key(encryption.m_tablespace_key, + ENCRYPTION_KEY_LEN, false); + } + + return true; +} + /** Decompress after a read and punch a hole in the file if it was a write @param[in] type IO context @param[in] fh Open file handle @@ -1733,15 +1882,32 @@ os_file_io_complete( ut_ad(!type.is_log()); - ret = encryption.decrypt(type, buf, src_len, scratch, len); - if (ret == DB_SUCCESS) { - return(os_file_decompress_page( - type.is_dblwr_recover(), - buf, scratch, len)); - } else { - return(ret); + bool is_page_encrypted= type.is_encryption_disabled() + ? false + : encryption.is_encrypted_page(buf); + + if (is_page_encrypted) + { + dberr_t err = verify_post_encryption_checksum(type, encryption, buf, src_len, offset); + if (err != DB_SUCCESS) + return err; + + if (!load_key_needed_for_decryption(type, encryption, buf)) + return DB_DECRYPTION_FAILED; + + ret = encryption.decrypt(type, buf, src_len, scratch, len); + if (ret != DB_SUCCESS) + return ret; } + ret = os_file_decompress_page(type.is_dblwr_recover(), + buf, scratch, len); + if (ret != DB_SUCCESS) + return ret; + if (Encryption::can_page_be_keyring_encrypted(buf) && !type.is_encryption_disabled()) + assing_key_version(buf, encryption, is_page_encrypted); // is_page_encrypted meaning page was encrypted before calling decrypt + + } else if (type.punch_hole()) { ut_ad(len <= src_len); @@ -1772,6 +1938,16 @@ os_file_io_complete( return(os_file_punch_hole(fh, offset, src_len - len)); } +#ifdef UNIV_DEBUG + if (type.is_write() && type.encryption_algorithm().m_type == Encryption::KEYRING) { + Encryption encryption(type.encryption_algorithm()); + bool was_page_encrypted= encryption.is_encrypted_page(buf); + + //TODO:Robert czy bez type.is_page_zip_compressed to działa - powinno + ut_ad(!was_page_encrypted || //!type.is_page_zip_compressed() || + fil_space_verify_crypt_checksum(buf, src_len, type.is_page_zip_compressed(), encryption.is_encrypted_and_compressed(buf), offset)); + } +#endif ut_ad(!type.is_log()); @@ -2129,7 +2305,9 @@ os_file_compress_page( reinterpret_cast(buf), *n, compressed_page, - &compressed_len); + &compressed_len, + type.encryption_algorithm().m_type == Encryption::KEYRING && + type.encryption_algorithm().m_key != NULL); if (buf_ptr != buf) { /* Set new compressed size to uncompressed page. */ @@ -5649,12 +5827,18 @@ os_file_io( /* We do encryption after compression, since if we do encryption before compression, the encrypted data will cause compression fail - or low compression rate. */ - if (type.is_encrypted() && type.is_write()) { + or low compression rate. */ + if (type.is_encrypted() && type.is_write() && + (type.encryption_algorithm().m_type != Encryption::KEYRING || + (type.encryption_algorithm().m_key != NULL && + Encryption::can_page_be_keyring_encrypted(reinterpret_cast(buf)) + ) + )) { /* We don't encrypt the first page of any file. */ Block* compressed_block = block; ut_ad(offset > 0); + ut_ad(type.encryption_algorithm().m_key != NULL); block = os_file_encrypt_page(type, buf, &n); if (compressed_block != NULL) { @@ -5911,6 +6095,10 @@ os_file_read_page( } else if ((ulint) n_bytes == n) { + /*The page decryption failed - will handled by buf_io_comptelete*/ + if (err == DB_IO_DECRYPT_FAIL) + return (DB_IO_DECRYPT_FAIL); + /** The read will succeed but decompress can fail for various reasons. */ @@ -7294,7 +7482,11 @@ AIO::reserve_slot( if (srv_use_native_aio && offset > 0 && type.is_write() - && type.is_encrypted()) { + && type.is_encrypted() + && (type.encryption_algorithm().m_type != Encryption::KEYRING || + (type.encryption_algorithm().m_key != NULL && + Encryption::can_page_be_keyring_encrypted(slot->buf)))) { + ulint encrypted_len = slot->len; Block* encrypted_block; @@ -9011,6 +9203,8 @@ Encryption::to_string(Type type) return("N"); case AES: return("Y"); + case KEYRING: + return("KEYRING"); } ut_ad(0); @@ -9027,6 +9221,83 @@ void Encryption::random_value(byte* value) my_rand_buffer(value, ENCRYPTION_KEY_LEN); } +void +Encryption::fill_key_name(char *key_name, uint key_id) +{ +#ifndef UNIV_INNOCHECKSUM + memset(key_name, 0, ENCRYPTION_MASTER_KEY_NAME_MAX_LEN); + + ut_snprintf(key_name, ENCRYPTION_MASTER_KEY_NAME_MAX_LEN, + "%s-%u", ENCRYPTION_PERCONA_SYSTEM_KEY_PREFIX, + key_id); +#endif +} + +void +Encryption::fill_key_name(char* key_name, uint key_id, uint key_version) +{ +#ifndef UNIV_INNOCHECKSUM + memset(key_name, 0, ENCRYPTION_MASTER_KEY_NAME_MAX_LEN); + + ut_snprintf(key_name, ENCRYPTION_MASTER_KEY_NAME_MAX_LEN, + "%s-%u:%u", ENCRYPTION_PERCONA_SYSTEM_KEY_PREFIX, + key_id, key_version); +#endif +} + +void +Encryption::create_tablespace_key(byte** tablespace_key, + uint key_id) +{ +#ifndef UNIV_INNOCHECKSUM + char* key_type = NULL; + size_t key_len; + char key_name[ENCRYPTION_MASTER_KEY_NAME_MAX_LEN]; + int ret; + + + fill_key_name(key_name, key_id); + + /* We call key ring API to generate tablespace key here. */ + ret = my_key_generate(key_name, "AES", + NULL, ENCRYPTION_KEY_LEN); + + if (ret) { + ib::error() << "Encryption can't generate tablespace key : " << key_name; + *tablespace_key = NULL; + return; + } + + byte *system_tablespace_key = NULL; + /* We call key ring API to get tablespace key here. */ + ret = my_key_fetch(key_name, &key_type, NULL, + reinterpret_cast(&system_tablespace_key), + &key_len); + + if (ret || system_tablespace_key == NULL) { + ib::error() << "Encryption can't find tablespace key " << key_name << " please check" + " that the keyring plugin is loaded."; + *tablespace_key = NULL; + my_free(key_type); + return; + } + my_free(key_type); + + uint tablespace_key_version = 0; + size_t tablespace_key_data_length = 0; + + if (parse_system_key(system_tablespace_key, key_len, &tablespace_key_version, + tablespace_key, &tablespace_key_data_length) == NULL) { + my_free(system_tablespace_key); + return; + } + my_free(system_tablespace_key); + // Newly created key should have 1 assigned as its key version + ut_ad(tablespace_key_version == 1 && tablespace_key_data_length == ENCRYPTION_KEY_LEN); +#endif +} + + /** Create new master key for key rotation. @param[in,out] master_key master key */ void @@ -9073,6 +9344,187 @@ Encryption::create_master_key(byte** master_key) #endif } +void +Encryption::get_keyring_key(const char *key_name, + byte** key, size_t *key_len) +{ +#ifndef UNIV_INNOCHECKSUM + int ret; + char* key_type = NULL; + //size_t key_len; + /* We call key ring API to get master key here. */ + ret = my_key_fetch(key_name, &key_type, NULL, + reinterpret_cast(key), key_len); + + if (key_type) { + my_free(key_type); + } + + if (ret) { + *key = NULL; + } +#endif +} + +bool +Encryption::get_tablespace_key(uint key_id, + uint tablespace_key_version, + byte** tablespace_key, + size_t *key_len) +{ + bool result = true; +#ifndef UNIV_INNOCHECKSUM + char key_name[ENCRYPTION_MASTER_KEY_NAME_MAX_LEN]; + + fill_key_name(key_name, key_id, tablespace_key_version); + + Encryption::get_keyring_key(key_name, tablespace_key, key_len); + + if (*tablespace_key == NULL) { + ib::error() << "Encryption can't find tablespace key, please check" + " the keyring plugin is loaded."; + result = false; + } + +#ifdef UNIV_ENCRYPT_DEBUG + if (*tablespace_key) { + fprintf(stderr, "Fetched tablespace key:%s ", key_name); + ut_print_buf(stderr, *tablespace_key, *key_len); + fprintf(stderr, "\n"); + } +#endif /* DEBUG_TDE */ +#endif + return result; +} + +void +Encryption::get_latest_system_key(const char *system_key_name, + byte **key, + uint *key_version, + size_t *key_length) +{ +#ifndef UNIV_INNOCHECKSUM + size_t system_key_len = 0; + uchar *system_key = NULL; + get_keyring_key(system_key_name, &system_key, &system_key_len); + if (system_key == NULL) + { + *key = NULL; + return; + } + + parse_system_key(system_key, system_key_len, key_version, (uchar**)key, key_length); + my_free(system_key); +#endif +} + +// tablespace_key_version as output parameter +void +Encryption::get_latest_tablespace_key(uint key_id, + uint *tablespace_key_version, + byte** tablespace_key) +{ +#ifndef UNIV_INNOCHECKSUM + size_t key_len; + char key_name[ENCRYPTION_MASTER_KEY_NAME_MAX_LEN]; + + fill_key_name(key_name, key_id); + + get_latest_system_key(key_name, tablespace_key, tablespace_key_version, &key_len); + +#ifdef UNIV_ENCRYPT_DEBUG + if (*tablespace_key) { + fprintf(stderr, "Fetched tablespace key:%s ", key_name); + ut_print_buf(stderr, *tablespace_key, key_len); + fprintf(stderr, "\n"); + } +#endif /* DEBUG_TDE */ + +#endif +} + +bool Encryption::tablespace_key_exists(uint key_id) +{ + uint tablespace_key_version; + byte *tablespace_key; + + get_latest_tablespace_key(key_id, &tablespace_key_version, &tablespace_key); + + if(tablespace_key == NULL) + return false; + + my_free(tablespace_key); + return true; +} + +bool Encryption::tablespace_key_exists_or_create_new_one_if_does_not_exist(uint key_id) +{ + uint tablespace_key_version; + byte *tablespace_key; + + get_latest_tablespace_key_or_create_new_one(key_id, &tablespace_key_version, &tablespace_key); + + if (tablespace_key == NULL) + return false; + + my_free(tablespace_key); + return true; +} + +void +Encryption::get_latest_tablespace_key_or_create_new_one(uint key_id, + uint *tablespace_key_version, + byte** tablespace_key) +{ + get_latest_tablespace_key(key_id, tablespace_key_version, tablespace_key); + if (*tablespace_key == NULL) { + Encryption::create_tablespace_key(tablespace_key, key_id); + *tablespace_key_version = 1; + } +} + +bool Encryption::is_keyring_alive() +{ + return Encryption::tablespace_key_exists_or_create_new_one_if_does_not_exist(0); //DEFAULT ENCRYPTION KEY +} + +bool Encryption::can_page_be_keyring_encrypted(ulint page_type) +{ + switch (page_type) { + case FIL_PAGE_TYPE_FSP_HDR: + case FIL_PAGE_TYPE_XDES: + case FIL_PAGE_RTREE: + /* File space header, extent descriptor or spatial index + are not encrypted. */ + return false; + } + return true; +} + +bool Encryption::can_page_be_keyring_encrypted(byte* page) +{ + ut_ad(page != NULL); + return can_page_be_keyring_encrypted(mach_read_from_2(page+FIL_PAGE_TYPE)); +} + + +uint Encryption::encryption_get_latest_version(uint key_id) +{ +#ifndef UNIV_INNOCHECKSUM + uint tablespace_key_version; + byte *tablespace_key; + + get_latest_tablespace_key(key_id, &tablespace_key_version, &tablespace_key); + + if(tablespace_key == NULL) + return ENCRYPTION_KEY_VERSION_INVALID; + + my_free(tablespace_key); + return tablespace_key_version; +#endif + return ENCRYPTION_KEY_VERSION_INVALID; +} + /** Get master key by key id. @param[in] master_key_id master key id @param[in] srv_uuid uuid of server instance @@ -9083,10 +9535,8 @@ Encryption::get_master_key(ulint master_key_id, byte** master_key) { #ifndef UNIV_INNOCHECKSUM - char* key_type = NULL; size_t key_len; char key_name[ENCRYPTION_MASTER_KEY_NAME_MAX_LEN]; - int ret; memset(key_name, 0, ENCRYPTION_MASTER_KEY_NAME_MAX_LEN); @@ -9104,21 +9554,12 @@ Encryption::get_master_key(ulint master_key_id, } /* We call key ring API to get master key here. */ - ret = my_key_fetch(key_name, &key_type, NULL, - reinterpret_cast(master_key), &key_len); - - if (key_type) { - my_free(key_type); - } - - if (ret) { - *master_key = NULL; + get_keyring_key(key_name, master_key, &key_len); + if (*master_key == NULL) ib::error() << "Encryption can't find master key, please check" " the keyring plugin is loaded."; - } - #ifdef UNIV_ENCRYPT_DEBUG - if (!ret && *master_key) { + if (*master_key) { fprintf(stderr, "Fetched master key:%lu ", master_key_id); ut_print_buf(stderr, *master_key, key_len); fprintf(stderr, "\n"); @@ -9249,6 +9690,14 @@ Encryption::is_encrypted_page(const byte* page) || page_type == FIL_PAGE_ENCRYPTED_RTREE); } +bool +Encryption::is_encrypted_and_compressed(const byte *page) +{ + ulint page_type = mach_read_from_2(page + FIL_PAGE_TYPE); + + return page_type == FIL_PAGE_COMPRESSED_AND_ENCRYPTED; +} + /** Encrypt the page data contents. Page type can't be FIL_PAGE_ENCRYPTED, FIL_PAGE_COMPRESSED_AND_ENCRYPTED, FIL_PAGE_ENCRYPTED_RTREE. @@ -9282,15 +9731,28 @@ Encryption::encrypt( space_id, page_no, src_len); #endif + // Destination header might need to acommodate key_version and checksum after encryption + const uint DST_HEADER_SIZE = (m_type == Encryption::KEYRING && page_type == FIL_PAGE_COMPRESSED) + ? FIL_PAGE_DATA + 8 : FIL_PAGE_DATA; + /* Shouldn't encrypte an already encrypted page. */ ut_ad(page_type != FIL_PAGE_ENCRYPTED && page_type != FIL_PAGE_COMPRESSED_AND_ENCRYPTED && page_type != FIL_PAGE_ENCRYPTED_RTREE); ut_ad(m_type != Encryption::NONE); + ut_ad(m_type != Encryption::KEYRING || m_key != NULL); /* This is data size which need to encrypt. */ - data_len = src_len - FIL_PAGE_DATA; + if (m_type == Encryption::KEYRING && page_type == FIL_PAGE_COMPRESSED) { + data_len = src_len - DST_HEADER_SIZE; // We need those 8 bytes for key_version and post-encryption checksum + //ut_ad((uint)(*(src + src_len -8)) == 0); // There need to be at least 8 bytes left + } else if (m_type == Encryption::KEYRING && !type.is_page_zip_compressed()) { + data_len = src_len - DST_HEADER_SIZE - 4; // For keyring encryption we do not encrypt last four bytes which are equal to the LSN bytes in header + // So they are not encrypted anyways + } else + data_len = src_len - DST_HEADER_SIZE; + main_len = (data_len / MY_AES_BLOCK_SIZE) * MY_AES_BLOCK_SIZE; remain_len = data_len - main_len; @@ -9300,20 +9762,25 @@ Encryption::encrypt( case Encryption::NONE: ut_error; + case Encryption::KEYRING : + //fallthrough + case Encryption::AES: { lint elen; ut_ad(m_klen == ENCRYPTION_KEY_LEN); + ut_ad(m_iv != NULL); elen = my_aes_encrypt( src + FIL_PAGE_DATA, static_cast(main_len), - dst + FIL_PAGE_DATA, + dst + DST_HEADER_SIZE, reinterpret_cast(m_key), static_cast(m_klen), my_aes_256_cbc, reinterpret_cast(m_iv), false); + ut_ad(elen != MY_AES_BAD_DATA); if (elen == MY_AES_BAD_DATA) { ulint page_no =mach_read_from_4( @@ -9339,7 +9806,7 @@ Encryption::encrypt( ut_ad(len == main_len); /* Copy remain bytes and page tailer. */ - memcpy(dst + FIL_PAGE_DATA + len, + memcpy(dst + DST_HEADER_SIZE + len, src + FIL_PAGE_DATA + len, src_len - FIL_PAGE_DATA - len); @@ -9348,7 +9815,7 @@ Encryption::encrypt( remain_len = MY_AES_BLOCK_SIZE * 2; elen = my_aes_encrypt( - dst + FIL_PAGE_DATA + data_len - remain_len, + dst + DST_HEADER_SIZE + data_len - remain_len, static_cast(remain_len), remain_buf, reinterpret_cast(m_key), @@ -9357,6 +9824,8 @@ Encryption::encrypt( reinterpret_cast(m_iv), false); + ut_ad(elen != MY_AES_BAD_DATA); + if (elen == MY_AES_BAD_DATA) { ulint page_no =mach_read_from_4( src + FIL_PAGE_OFFSET); @@ -9377,7 +9846,7 @@ Encryption::encrypt( return(src); } - memcpy(dst + FIL_PAGE_DATA + data_len - remain_len, + memcpy(dst + DST_HEADER_SIZE + data_len - remain_len, remain_buf, remain_len); } @@ -9411,31 +9880,123 @@ Encryption::encrypt( mach_write_to_2(dst + FIL_PAGE_ORIGINAL_TYPE_V1, page_type); } + if (m_type == Encryption::KEYRING) { + /* handle post encryption checksum */ + m_checksum = 0; + + ut_ad(*dst_len == src_len); + + if (page_type == FIL_PAGE_COMPRESSED) { + memset(dst + FIL_PAGE_DATA, 0, 4); // set the checksum data to 0s before the checksum is calculated + mach_write_to_4(dst + FIL_PAGE_DATA + 4, m_key_version); // Add it here so it would be included in the checksum + } + + if (type.is_page_zip_compressed()) + memcpy(dst + FIL_PAGE_ZIP_KEYRING_ENCRYPTION_MAGIC, ENCRYPTION_ZIP_PAGE_KEYRING_ENCRYPTION_MAGIC, + ENCRYPTION_ZIP_PAGE_KEYRING_ENCRYPTION_MAGIC_LEN); + +#ifndef UNIV_INNOCHECKSUM //TODO: Robert - this might need to be included in innodbchecksum + uint page_size = *dst_len; + if (page_type == FIL_PAGE_COMPRESSED) { + page_size = static_cast(mach_read_from_2(dst + FIL_PAGE_COMPRESS_SIZE_V1)); + } else if (type.is_page_zip_compressed()) { + page_size = type.get_zip_page_physical_size(); + } + m_checksum = fil_crypt_calculate_checksum(page_size, dst, type.is_page_zip_compressed()); +#endif + ut_ad(m_key_version != 0); // Since we are encrypting key_version cannot be 0 (i.e. page unencrypted) + + mach_write_to_4(src + FIL_PAGE_ENCRYPTION_KEY_VERSION, m_key_version); + + if (page_type == FIL_PAGE_COMPRESSED) { + mach_write_to_4(dst + FIL_PAGE_DATA, m_checksum); + } else if (!type.is_page_zip_compressed()) { + mach_write_to_4(dst + FIL_PAGE_ENCRYPTION_KEY_VERSION, m_key_version); + ut_ad(m_checksum != 0); + mach_write_to_4(dst + *dst_len - 4, m_checksum); + } + else if (type.is_page_zip_compressed()) { + mach_write_to_4(dst + FIL_PAGE_ENCRYPTION_KEY_VERSION, m_key_version); + ut_ad(m_key_version != 0); + uint32 innodb_checksum = mach_read_from_4(dst + FIL_PAGE_SPACE_OR_CHKSUM); + uint32 xor_checksum = innodb_checksum ^ m_checksum; + mach_write_to_4(dst + FIL_PAGE_SPACE_OR_CHKSUM, xor_checksum); + ut_ad(m_checksum != 0); + } + + #ifdef UNIV_ENCRYPT_DEBUG + ut_ad(type.is_page_zip_compressed() || + fil_space_verify_crypt_checksum(dst, *dst_len, type.is_page_zip_compressed(), type.is_compressed(), + page_no)); // This works only for not zipped compressed pages + #endif + } + #ifdef UNIV_ENCRYPT_DEBUG #ifndef UNIV_INNOCHECKSUM -#if 0 - byte* check_buf = static_cast(ut_malloc_nokey(src_len)); - byte* buf2 = static_cast(ut_malloc_nokey(src_len)); +#if 1 + if (m_type == Encryption::KEYRING) + { - memcpy(check_buf, dst, src_len); + byte* check_buf = static_cast(ut_malloc_nokey(src_len)); + byte* buf2 = static_cast(ut_malloc_nokey(src_len)); - dberr_t err = decrypt(type, check_buf, src_len, buf2, src_len); - if (err != DB_SUCCESS || memcmp(src + FIL_PAGE_DATA, - check_buf + FIL_PAGE_DATA, - src_len - FIL_PAGE_DATA) != 0) { - ut_print_buf(stderr, src, src_len); - ut_print_buf(stderr, check_buf, src_len); - ut_ad(0); - } - ut_free(buf2); - ut_free(check_buf); + memcpy(check_buf, dst, src_len); + + fprintf(stderr, "Robert: Comparing before and after encryption"); + + byte *m_key_used = m_key; + + if (m_type == Encryption::KEYRING) // TODO:Robert:For decryption KEYRING page key needs to be set to NULL + m_key = NULL; + + dberr_t err = decrypt(type, check_buf, src_len, buf2, src_len); + if (space_id == 23 && page_no == 1) + { + fprintf(stderr, "Robert: After encrypting page 23:1:"); + ut_print_buf(stderr, dst, src_len); + } + + if (err != DB_SUCCESS || memcmp(src + FIL_PAGE_DATA, + check_buf + FIL_PAGE_DATA, + src_len - FIL_PAGE_DATA - 4) != 0) { + + fprintf(stderr, "Robert: After and before encryption are different. " + " key_version used for encryption: %d, key used for encryption:", m_key_version); + ut_print_buf(stderr, m_key_used, 32); + m_key_version= mach_read_from_4(check_buf + FIL_PAGE_ENCRYPTION_KEY_VERSION); + fprintf(stderr, "Robert: After and before encryption are different. " + " key_version used for decryption: %d, key used for decryption:", m_key_version); + + size_t key_len; + get_tablespace_key(m_key_id, uuid, m_key_version, &m_key, &key_len); + ut_print_buf(stderr, m_key, 32); + + ut_ad(0); + } + ut_free(buf2); + ut_free(check_buf); + + ut_ad(type.is_page_zip_compressed() || + fil_space_verify_crypt_checksum(dst, *dst_len, type.is_page_zip_compressed(), type.is_compressed(), + page_no)); + + ut_ad(type.is_page_zip_compressed() || + fil_space_verify_crypt_checksum(dst, *dst_len, type.is_page_zip_compressed(), type.is_compressed(), + page_no)); + } #endif fprintf(stderr, "Encrypted page:%lu.%lu\n", space_id, page_no); + #endif #endif *dst_len = src_len; +#ifdef UNIV_ENCRYPT_DEBUG + fprintf(stderr, "Robert:Encrypted page:%lu.%lu\n", space_id, page_no); +#endif - +#if !defined(UNIV_INNOCHECKSUM) + srv_stats.pages_encrypted.inc(); +#endif return(dst); } @@ -9468,6 +10029,15 @@ Encryption::decrypt( if (!is_encrypted_page(src)) { return(DB_SUCCESS); } +#ifndef UNIV_INNOCHECKSUM + if (m_type == Encryption::KEYRING && type.is_page_zip_compressed()) { + uint32 post_enc_checksum = fil_crypt_calculate_checksum(type.get_zip_page_physical_size(), src, type.is_page_zip_compressed()); + uint32 xor_checksum = mach_read_from_4(src + FIL_PAGE_SPACE_OR_CHKSUM); + ut_ad(xor_checksum != 0); + uint32 innodb_checksum = xor_checksum ^ post_enc_checksum; + mach_write_to_4(src + FIL_PAGE_SPACE_OR_CHKSUM, innodb_checksum); + } +#endif /* For compressed page, we need to get the compressed size for decryption */ @@ -9488,11 +10058,13 @@ Encryption::decrypt( fprintf(stderr, "Decrypting page:%lu.%lu len:%lu\n", space_id, page_no, src_len); #endif + const uint HEADER_SIZE = (m_type == Encryption::KEYRING && page_type == FIL_PAGE_COMPRESSED_AND_ENCRYPTED) + ? FIL_PAGE_DATA + 8 : FIL_PAGE_DATA; original_type = static_cast( mach_read_from_2(src + FIL_PAGE_ORIGINAL_TYPE_V1)); - byte* ptr = src + FIL_PAGE_DATA; + byte* ptr = src + HEADER_SIZE; /* The caller doesn't know what to expect */ if (dst == NULL) { @@ -9508,11 +10080,19 @@ Encryption::decrypt( block = NULL; } - data_len = src_len - FIL_PAGE_DATA; + ut_ad(m_key != NULL); + + data_len = src_len - HEADER_SIZE; + + if (page_type == FIL_PAGE_ENCRYPTED && m_type == Encryption::KEYRING && !type.is_page_zip_compressed()) { + data_len -= 4; //last 4 bytes are not encrypted + } + main_len = (data_len / MY_AES_BLOCK_SIZE) * MY_AES_BLOCK_SIZE; remain_len = data_len - main_len; switch(m_type) { + case Encryption::KEYRING: case Encryption::AES: { lint elen; @@ -9520,6 +10100,7 @@ Encryption::decrypt( data is no block aligned. */ if (remain_len != 0) { ut_ad(m_klen == ENCRYPTION_KEY_LEN); + ut_ad(m_iv != NULL); remain_len = MY_AES_BLOCK_SIZE * 2; @@ -9537,6 +10118,9 @@ Encryption::decrypt( my_aes_256_cbc, reinterpret_cast(m_iv), false); + + ut_ad(elen != MY_AES_BAD_DATA); + if (elen == MY_AES_BAD_DATA) { if (block != NULL) { os_free_block(block); @@ -9554,6 +10138,12 @@ Encryption::decrypt( memcpy(dst, ptr, data_len); } + if (m_type == Encryption::KEYRING && page_type == FIL_PAGE_COMPRESSED_AND_ENCRYPTED) { + ptr -= 8; //This much is unused as it was previously used by key version and encrypted checksum + //It is not needed - overwrite this with decrypted data + memset(ptr + data_len, 0, 8); + } + /* Then decrypt the main data */ elen = my_aes_decrypt( dst, @@ -9600,13 +10190,17 @@ Encryption::decrypt( return(DB_UNSUPPORTED); } + if (m_type == Encryption::KEYRING && page_type != FIL_PAGE_COMPRESSED_AND_ENCRYPTED + && !type.is_page_zip_compressed()) { + //restore LSN + memcpy(src + src_len - FIL_PAGE_END_LSN_OLD_CHKSUM + 4, src + FIL_PAGE_LSN + 4, 4); + } + /* Restore the original page type. If it's a compressed and encrypted page, just reset it as compressed page type, since we will do uncompress later. */ - if (page_type == FIL_PAGE_ENCRYPTED) { mach_write_to_2(src + FIL_PAGE_TYPE, original_type); - mach_write_to_2(src + FIL_PAGE_ORIGINAL_TYPE_V1, 0); } else if (page_type == FIL_PAGE_ENCRYPTED_RTREE) { mach_write_to_2(src + FIL_PAGE_TYPE, FIL_PAGE_RTREE); } else { @@ -9614,16 +10208,27 @@ Encryption::decrypt( mach_write_to_2(src + FIL_PAGE_TYPE, FIL_PAGE_COMPRESSED); } + // mark orignal page_type as encrypted - so that when checksum check fail - we will be able + // to report that if failed because decryption failed + if (original_type != FIL_PAGE_TYPE_ALLOCATED && page_type != FIL_PAGE_COMPRESSED_AND_ENCRYPTED) + mach_write_to_2(src + FIL_PAGE_ORIGINAL_TYPE_V1, FIL_PAGE_ENCRYPTED); + if (block != NULL) { os_free_block(block); } + if (m_type == Encryption::KEYRING && type.is_page_zip_compressed()) + memset(src + FIL_PAGE_ZIP_KEYRING_ENCRYPTION_MAGIC, 0, ENCRYPTION_ZIP_PAGE_KEYRING_ENCRYPTION_MAGIC_LEN); #ifdef UNIV_ENCRYPT_DEBUG fprintf(stderr, "Decrypted page:%lu.%lu\n", space_id, page_no); #endif DBUG_EXECUTE_IF("ib_crash_during_decrypt_page", DBUG_SUICIDE();); +#if !defined(UNIV_INNOCHECKSUM) + srv_stats.pages_decrypted.inc(); +#endif + return(DB_SUCCESS); } @@ -9692,7 +10297,9 @@ os_dblwr_encrypt_page( write_request.encryption_key( space->encryption_key, space->encryption_klen, - space->encryption_iv); + false, + space->encryption_iv, + 0, 0, NULL, NULL); write_request.encryption_algorithm( Encryption::AES); @@ -9747,7 +10354,9 @@ os_dblwr_decrypt_page( decrypt_request.encryption_key( space->encryption_key, space->encryption_klen, - space->encryption_iv); + false, + space->encryption_iv, + 0, 0, NULL, NULL); decrypt_request.encryption_algorithm( Encryption::AES); diff --git a/storage/innobase/page/page0cur.cc b/storage/innobase/page/page0cur.cc index d3f39b649a9e..6fc10af63d6c 100644 --- a/storage/innobase/page/page0cur.cc +++ b/storage/innobase/page/page0cur.cc @@ -2350,7 +2350,7 @@ page_copy_rec_list_end_to_created_page( mtr_log_t log_mode; if (dict_table_is_temporary(index->table) - || index->table->ibd_file_missing /* IMPORT TABLESPACE */) { + || index->table->file_unreadable /* IMPORT TABLESPACE */) { log_mode = mtr_get_log_mode(mtr); } else { log_mode = mtr_set_log_mode(mtr, MTR_LOG_SHORT_INSERTS); diff --git a/storage/innobase/pars/pars0pars.cc b/storage/innobase/pars/pars0pars.cc index 06fc49c719ed..8b86bdc06448 100644 --- a/storage/innobase/pars/pars0pars.cc +++ b/storage/innobase/pars/pars0pars.cc @@ -1951,7 +1951,7 @@ pars_create_table( column = static_cast(que_node_get_next(column)); } - node = tab_create_graph_create(table, pars_sym_tab_global->heap); + node = tab_create_graph_create(table, pars_sym_tab_global->heap, FIL_ENCRYPTION_DEFAULT, CreateInfoEncryptionKeyId()); table_sym->resolved = TRUE; table_sym->token_type = SYM_TABLE; diff --git a/storage/innobase/row/row0import.cc b/storage/innobase/row/row0import.cc index b5f169646766..0f20b4b9b6a7 100644 --- a/storage/innobase/row/row0import.cc +++ b/storage/innobase/row/row0import.cc @@ -122,7 +122,8 @@ struct row_import { m_n_indexes(0), m_indexes(NULL), m_missing(true), - m_cfp_missing(true) { } + m_cfp_missing(true), + m_is_keyring_encrypted(false) { } ~row_import() UNIV_NOTHROW; @@ -220,6 +221,8 @@ struct row_import { bool m_cfp_missing; /*!< true if a .cfp file was found and was readable */ + + bool m_is_keyring_encrypted; }; /** Use the page cursor to iterate over records in a block. */ @@ -870,7 +873,8 @@ class PageConverter : public AbstractCallback { enum import_page_status_t { IMPORT_PAGE_STATUS_OK, /*!< Page is OK */ IMPORT_PAGE_STATUS_ALL_ZERO, /*!< Page is all zeros */ - IMPORT_PAGE_STATUS_CORRUPTED /*!< Page is corrupted */ + IMPORT_PAGE_STATUS_CORRUPTED, /*!< Page is corrupted */ + IMPORT_PAGE_STATUS_DECRYPTION_FAILED /*< Page decryption failed */ }; /** Update the page, set the space id, max trx id and index id. @@ -2017,21 +2021,31 @@ PageConverter::validate( the file. Flag as corrupt if it doesn't. Disable the check for LSN in buf_page_is_corrupted() */ + ulint page_type = mach_read_from_2(page + FIL_PAGE_TYPE); + ulint original_page_type = mach_read_from_2(page + FIL_PAGE_ORIGINAL_TYPE_V1); + bool was_page_read_encrypted = original_page_type == FIL_PAGE_ENCRYPTED; + block->page.encrypted = block->page.encrypted || was_page_read_encrypted || page_type == FIL_PAGE_ENCRYPTED || page_type == FIL_PAGE_ENCRYPTED_RTREE || + page_type == FIL_PAGE_COMPRESSED_AND_ENCRYPTED; + if (buf_page_is_corrupted( false, page, get_page_size(), fsp_is_checksum_disabled(block->page.id.space())) - || (page_get_page_no(page) != offset / m_page_size.physical() + || (page_get_page_no(page) != offset / m_page_size.physical() && page_get_page_no(page) != 0)) { - return(IMPORT_PAGE_STATUS_CORRUPTED); + return block->page.encrypted + ? IMPORT_PAGE_STATUS_DECRYPTION_FAILED + : IMPORT_PAGE_STATUS_CORRUPTED; } else if (offset > 0 && page_get_page_no(page) == 0) { /* The page is all zero: do nothing. We already checked for all NULs in buf_page_is_corrupted() */ + block->page.encrypted= false; return(IMPORT_PAGE_STATUS_ALL_ZERO); } + block->page.encrypted= false; return(IMPORT_PAGE_STATUS_OK); } @@ -2100,6 +2114,14 @@ PageConverter::operator() ( /* The page is all zero: leave it as is. */ break; + case IMPORT_PAGE_STATUS_DECRYPTION_FAILED: + ib::warn() << "Page " << (offset / m_page_size.physical()) + << " at offet " << offset + << " in file " << m_filepath << " cannot be decrypted. " + << "Are you using correct keyring that contain the key used to " + << "encrypt the tablespace before it was discared ?"; + return (DB_DECRYPTION_FAILED); + case IMPORT_PAGE_STATUS_CORRUPTED: ib::warn() << "Page " << (offset / m_page_size.physical()) @@ -2154,7 +2176,7 @@ row_import_discard_changes( index->space = FIL_NULL; } - table->ibd_file_missing = TRUE; + table->set_file_unreadable(); fil_close_tablespace(trx, table->space); } @@ -3112,6 +3134,9 @@ row_import_read_meta_data( switch (cfg.m_version) { case IB_EXPORT_CFG_VERSION_V1: + return(row_import_read_v1(file, thd, &cfg)); + case IB_EXPORT_CFG_VERSION_V1_WITH_RK: + cfg.m_is_keyring_encrypted = true; return(row_import_read_v1(file, thd, &cfg)); default: ib_errf(thd, IB_LOG_LEVEL_ERROR, ER_IO_READ_ERROR, @@ -3575,7 +3600,7 @@ row_import_for_mysql( ut_a(table->space); ut_ad(prebuilt->trx); - ut_a(table->ibd_file_missing); + ut_a(table->file_unreadable); ibuf_delete_for_discarded_space(table->space); @@ -3715,7 +3740,7 @@ row_import_for_mysql( /* If table is set to encrypted, but can't find cfp file, then return error. */ - if (cfg.m_cfp_missing== true + if (cfg.m_cfp_missing== true && !cfg.m_is_keyring_encrypted && ((space_flags != 0 && FSP_FLAGS_GET_ENCRYPTION(space_flags)) || dict_table_is_encrypted(table))) { @@ -3771,10 +3796,13 @@ row_import_for_mysql( table_name, sizeof(table_name), table->name.m_name); - ib_errf(trx->mysql_thd, IB_LOG_LEVEL_ERROR, - ER_INTERNAL_ERROR, - "Cannot reset LSNs in table %s : %s", - table_name, ut_strerr(err)); + + if (err != DB_DECRYPTION_FAILED) { + ib_errf(trx->mysql_thd, IB_LOG_LEVEL_ERROR, + ER_INTERNAL_ERROR, + "Cannot reset LSNs in table %s : %s", + table_name, ut_strerr(err)); + } return(row_import_cleanup(prebuilt, trx, err)); } @@ -3815,13 +3843,28 @@ row_import_for_mysql( fil_space_set_imported() to declare it a persistent tablespace. */ ulint fsp_flags = dict_tf_to_fsp_flags(table->flags, false); - if (table->encryption_key != NULL) { + if (table->encryption_key != NULL || cfg.m_is_keyring_encrypted) { fsp_flags |= FSP_FLAGS_MASK_ENCRYPTION; } + Keyring_encryption_info keyring_encryption_info; + err = fil_ibd_open( true, true, FIL_TYPE_IMPORT, table->space, - fsp_flags, table->name.m_name, filepath); + fsp_flags, table->name.m_name, filepath, keyring_encryption_info); + + if (err == DB_SUCCESS && cfg.m_is_keyring_encrypted && + (!keyring_encryption_info.page0_has_crypt_data || !FSP_FLAGS_GET_ENCRYPTION(fsp_flags))) { + ut_ad(!keyring_encryption_info.is_encryption_in_progress()); // it should not be possible to FLUSH FOR EXPORT when encryption + // is in progress + ib_errf(trx->mysql_thd, IB_LOG_LEVEL_ERROR, + ER_TABLE_SCHEMA_MISMATCH, + "Table is marked as encrypted with KEYRING in cfg file, but there" + " is no KEYRING encryption information in tablespace header" + " Please make sure that ibd and cfg files are match"); + + err = DB_ERROR; + } DBUG_EXECUTE_IF("ib_import_open_tablespace_failure", err = DB_TABLESPACE_NOT_FOUND;); @@ -3840,9 +3883,9 @@ row_import_for_mysql( /* For encrypted table, set encryption information. */ if (dict_table_is_encrypted(table)) { - err = fil_set_encryption(table->space, - Encryption::AES, + cfg.m_is_keyring_encrypted ? Encryption::KEYRING + : Encryption::AES, table->encryption_key, table->encryption_iv); } @@ -3944,7 +3987,7 @@ row_import_for_mysql( ib::info() << "Phase IV - Flush complete"; fil_space_set_imported(prebuilt->table->space); - if (dict_table_is_encrypted(table)) { + if (dict_table_is_encrypted(table) && !cfg.m_is_keyring_encrypted) { fil_space_t* space; mtr_t mtr; byte encrypt_info[ENCRYPTION_INFO_SIZE_V2]; @@ -3985,7 +4028,7 @@ row_import_for_mysql( return(row_import_error(prebuilt, trx, err)); } - table->ibd_file_missing = false; + table->set_file_readable(); table->flags2 &= ~DICT_TF2_DISCARDED; /* Set autoinc value read from cfg file. The value is set to zero diff --git a/storage/innobase/row/row0ins.cc b/storage/innobase/row/row0ins.cc index e4dbaab96ac3..3e7e317e8c08 100644 --- a/storage/innobase/row/row0ins.cc +++ b/storage/innobase/row/row0ins.cc @@ -1620,7 +1620,7 @@ row_ins_check_foreign_constraint( } if (check_table == NULL - || check_table->ibd_file_missing + || check_table->file_unreadable || check_index == NULL || fil_space_is_being_truncated(check_table->space)) { @@ -2503,7 +2503,14 @@ row_ins_clust_index_entry_low( /* Note that we use PAGE_CUR_LE as the search mode, because then the function will return in both low_match and up_match of the cursor sensible values */ - btr_pcur_open(index, entry, PAGE_CUR_LE, mode, &pcur, &mtr); + err = btr_pcur_open(index, entry, PAGE_CUR_LE, mode, &pcur, &mtr); + + if (err != DB_SUCCESS) { + index->table->set_file_unreadable(); + mtr.commit(); + goto func_exit; + } + cursor = btr_pcur_get_btr_cur(&pcur); cursor->thr = thr; @@ -2962,7 +2969,7 @@ row_ins_sec_index_entry_low( rtr_init_rtr_info(&rtr_info, false, &cursor, index, false); rtr_info_update_btr(&cursor, &rtr_info); - btr_cur_search_to_nth_level( + err = btr_cur_search_to_nth_level( index, 0, entry, PAGE_CUR_RTREE_INSERT, search_mode, &cursor, 0, __FILE__, __LINE__, &mtr); @@ -2977,7 +2984,7 @@ row_ins_sec_index_entry_low( mtr.set_named_space(index->space); search_mode &= ~BTR_MODIFY_LEAF; search_mode |= BTR_MODIFY_TREE; - btr_cur_search_to_nth_level( + err = btr_cur_search_to_nth_level( index, 0, entry, PAGE_CUR_RTREE_INSERT, search_mode, &cursor, 0, __FILE__, __LINE__, &mtr); @@ -2996,13 +3003,23 @@ row_ins_sec_index_entry_low( ut_ad(cursor.page_cur.block != NULL); ut_ad(cursor.page_cur.block->made_dirty_with_no_latch); } else { - btr_cur_search_to_nth_level( + err = btr_cur_search_to_nth_level( index, 0, entry, PAGE_CUR_LE, search_mode, &cursor, 0, __FILE__, __LINE__, &mtr); } } + if (err != DB_SUCCESS) { + if (err == DB_DECRYPTION_FAILED) { + ib::warn() << "Table is encrypted but encryption service or" + " used key_id is not available. " + " Can't continue reading table."; + index->table->set_file_unreadable(); + } + goto func_exit; + } + if (cursor.flag == BTR_CUR_INSERT_TO_IBUF) { ut_ad(!dict_index_is_spatial(index)); /* The insert was buffered during the search: we are done */ diff --git a/storage/innobase/row/row0log.cc b/storage/innobase/row/row0log.cc index 0dadab76afe0..5ea880b6c848 100644 --- a/storage/innobase/row/row0log.cc +++ b/storage/innobase/row/row0log.cc @@ -3087,7 +3087,7 @@ row_log_table_apply_ops( goto func_exit; } - IORequest request; + IORequest request(IORequest::NO_ENCRYPTION | IORequest::READ); byte* buf = index->online_log->head.block; @@ -3967,7 +3967,7 @@ row_log_apply_ops( goto func_exit; } - IORequest request; + IORequest request(IORequest::NO_ENCRYPTION | IORequest::READ); byte* buf = index->online_log->head.block; diff --git a/storage/innobase/row/row0merge.cc b/storage/innobase/row/row0merge.cc index 019cb2ad9c6e..83a580880e7a 100644 --- a/storage/innobase/row/row0merge.cc +++ b/storage/innobase/row/row0merge.cc @@ -1914,6 +1914,14 @@ row_merge_read_clustered_index( mem_heap_empty(row_heap); + /* Do not continue if table pages are still encrypted */ + if (!old_table->is_readable() || + !new_table->is_readable()) { + err = DB_DECRYPTION_FAILED; + trx->error_key_num = 0; + goto func_exit; + } + page_cur_move_to_next(cur); stage->n_pk_recs_inc(); @@ -4128,7 +4136,7 @@ row_merge_rename_tables_dict( renamed along with the table. */ if (err == DB_SUCCESS && dict_table_is_file_per_table(old_table) - && !old_table->ibd_file_missing) { + && !old_table->file_unreadable) { /* Make pathname to update SYS_DATAFILES. */ char* tmp_path = row_make_new_pathname(old_table, tmp_name); @@ -4560,6 +4568,15 @@ row_merge_build_indexes( duplicate keys. */ innobase_rec_reset(table); + if (!old_table->is_readable() || + !new_table->is_readable()) { + error = DB_DECRYPTION_FAILED; + ib::warn() << "Table %s is encrypted but encryption service or" + " used key_id is not available. " + " Can't continue reading table."; + goto func_exit; + } + /* Read clustered index of the table and create files for secondary index entries for merge sort */ error = row_merge_read_clustered_index( diff --git a/storage/innobase/row/row0mysql.cc b/storage/innobase/row/row0mysql.cc index be5ac2e29e02..3ffe5ee23a6b 100644 --- a/storage/innobase/row/row0mysql.cc +++ b/storage/innobase/row/row0mysql.cc @@ -77,6 +77,7 @@ Created 9/17/2000 Heikki Tuuri #include #include #include +#include "fil0crypt.h" const char* MODIFICATIONS_NOT_ALLOWED_MSG_FORCE_RECOVERY = "innodb_force_recovery is on. We do not allow database modifications" @@ -1293,6 +1294,7 @@ row_mysql_handle_errors( case DB_FTS_INVALID_DOCID: case DB_INTERRUPTED: case DB_CANT_CREATE_GEOMETRY_OBJECT: + case DB_DECRYPTION_FAILED: case DB_COMPUTE_VALUE_FAILED: DBUG_EXECUTE_IF("row_mysql_crash_if_error", { log_buffer_flush_to_disk(); @@ -2187,6 +2189,50 @@ row_insert_for_mysql_using_cursor( return(err); } +/** Determine is tablespace encrypted but decryption failed, is table corrupted +or is tablespace .ibd file missing. +@param[in] table Table +@param[in] trx Transaction +@param[in] push_warning true if we should push warning to user +@retval DB_DECRYPTION_FAILED table is encrypted but decryption failed +@retval DB_CORRUPTION table is corrupted +@retval DB_TABLESPACE_NOT_FOUND tablespace .ibd file not found */ +static +dberr_t +row_mysql_get_table_status( + const dict_table_t* table, + trx_t* trx, + bool push_warning = true) +{ + dberr_t err; + if (fil_space_t* space = fil_space_acquire_silent(table->space)) { + if (space->crypt_data && space->crypt_data->is_encrypted()) { + if (push_warning) { + push_warning_printf(trx->mysql_thd, Sql_condition::SL_WARNING, + HA_ERR_DECRYPTION_FAILED, "Table %s in tablespace %u encrypted." + "However key management plugin or used key_id is not found or" + " used encryption algorithm or method does not match.", + table->name.m_name, table->space); + } + err = DB_DECRYPTION_FAILED; + } else { + if (push_warning) { + push_warning_printf(trx->mysql_thd, Sql_condition::SL_WARNING, + HA_ERR_CRASHED, "Table %s in tablespace %u corrupted.", + table->name.m_name, table->space); + } + err = DB_CORRUPTION; + } + fil_space_release(space); + } else { + ib::error() << ".ibd file is missing for table " + << table->name; + err = DB_TABLESPACE_NOT_FOUND; + } + + return(err); +} + /** Does an insert for MySQL using INSERT graph. This function will run/execute INSERT graph. @param[in] mysql_rec row in the MySQL format @@ -2222,13 +2268,8 @@ row_insert_for_mysql_using_ins_graph( return(DB_TABLESPACE_DELETED); - } else if (prebuilt->table->ibd_file_missing) { - - ib::error() << ".ibd file is missing for table " - << prebuilt->table->name; - - return(DB_TABLESPACE_NOT_FOUND); - + } else if (!prebuilt->table->is_readable()) { + return(row_mysql_get_table_status(prebuilt->table, trx, true)); } else if (srv_force_recovery) { ib::error() << MODIFICATIONS_NOT_ALLOWED_MSG_FORCE_RECOVERY; @@ -2964,7 +3005,7 @@ row_update_for_mysql_using_upd_graph( ut_a(prebuilt->magic_n2 == ROW_PREBUILT_ALLOCATED); UT_NOT_USED(mysql_rec); - if (prebuilt->table->ibd_file_missing) { + if (prebuilt->table->file_unreadable) { ib::error() << "MySQL is trying to use a table handle but the" " .ibd file for table " << prebuilt->table->name << " does not exist. Have you deleted" @@ -3489,8 +3530,10 @@ row_create_table_for_mysql( /*!< in: compression algorithm to use, can be NULL */ trx_t* trx, /*!< in/out: transaction */ - bool commit) /*!< in: if true, commit the transaction */ -{ + bool commit, /*!< in: if true, commit the transaction */ + fil_encryption_t mode, /*!< in: encryption mode */ + const CreateInfoEncryptionKeyId &create_info_encryption_key_id) { /*!< in: encryption key_id */ + tab_node_t* node; mem_heap_t* heap; que_thr_t* thr; @@ -3542,7 +3585,7 @@ row_create_table_for_mysql( ut_ad(strstr(table->name.m_name, "/FTS_") != NULL); } - node = tab_create_graph_create(table, heap); + node = tab_create_graph_create(table, heap, mode, create_info_encryption_key_id); thr = pars_complete_graph_for_exec(node, trx, heap, NULL); @@ -4425,7 +4468,7 @@ row_discard_tablespace( /* All persistent operations successful, update the data dictionary memory cache. */ - table->ibd_file_missing = TRUE; + table->set_file_unreadable(); table->flags2 |= DICT_TF2_DISCARDED; @@ -4464,7 +4507,7 @@ row_discard_tablespace( /*********************************************************************//** Discards the tablespace of a table which stored in an .ibd file. Discarding means that this function renames the .ibd file and assigns a new table id for -the table. Also the flag table->ibd_file_missing is set to TRUE. +the table. Also the flag table->file_unreadable is set to TRUE. @return error code or DB_SUCCESS */ dberr_t row_discard_tablespace_for_mysql( @@ -4781,6 +4824,8 @@ row_drop_table_for_mysql( pars_info_t* info = NULL; mem_heap_t* heap = NULL; bool is_intrinsic_temp_table = false; + bool was_master_key_id_mutex_locked = false; + bool page0_has_crypt_data = false; DBUG_ENTER("row_drop_table_for_mysql"); DBUG_PRINT("row_drop_table_for_mysql", ("table: '%s'", name)); @@ -5221,13 +5266,13 @@ row_drop_table_for_mysql( ulint space_id; bool is_temp; bool is_encrypted; - bool ibd_file_missing; + bool file_unreadable; bool is_discarded; bool shared_tablespace; case DB_SUCCESS: space_id = table->space; - ibd_file_missing = table->ibd_file_missing; + file_unreadable = table->file_unreadable; is_discarded = dict_table_is_discarded(table); is_temp = dict_table_is_temporary(table); is_encrypted = dict_table_is_encrypted(table); @@ -5283,6 +5328,9 @@ row_drop_table_for_mysql( NULL, table->name.m_name, IBD, false); } + page0_has_crypt_data = + table->keyring_encryption_info.page0_has_crypt_data; + /* Free the dict_table_t object. */ err = row_drop_table_from_cache(tablename, table, trx); if (err != DB_SUCCESS) { @@ -5291,19 +5339,20 @@ row_drop_table_for_mysql( /* Do not attempt to drop known-to-be-missing tablespaces, nor system or shared general tablespaces. */ - if (is_discarded || ibd_file_missing || shared_tablespace + if (is_discarded || file_unreadable || shared_tablespace || is_system_tablespace(space_id)) { /* For encrypted table, if ibd file can not be decrypt, - we also set ibd_file_missing. We still need to try to + we also set file_unreadable. We still need to try to remove the ibd file for this. */ if (is_discarded || !is_encrypted - || !ibd_file_missing) { + || !file_unreadable) { break; } } - if (is_encrypted) { + if (is_encrypted && !page0_has_crypt_data) { /* Require the mutex to block key rotation. */ + was_master_key_id_mutex_locked = true; mutex_enter(&master_key_id_mutex); } /* We can now drop the single-table tablespace. */ @@ -5311,7 +5360,7 @@ row_drop_table_for_mysql( space_id, tablename, filepath, is_temp, is_encrypted, trx); - if (is_encrypted) { + if (was_master_key_id_mutex_locked) { mutex_exit(&master_key_id_mutex); } break; @@ -5637,7 +5686,7 @@ row_drop_database_for_mysql( << table->name << ".frm' was lost."; } - if (table->ibd_file_missing) { + if (table->file_unreadable) { ib::warn() << "Missing .ibd file for table " << table->name << "."; } @@ -5853,7 +5902,7 @@ row_rename_table_for_mysql( err = DB_TABLE_NOT_FOUND; goto funct_exit; - } else if (table->ibd_file_missing + } else if (table->file_unreadable && !dict_table_is_discarded(table)) { err = DB_TABLE_NOT_FOUND; @@ -5921,7 +5970,7 @@ row_rename_table_for_mysql( the table is in a single-table tablespace. */ if (err == DB_SUCCESS && dict_table_is_file_per_table(table) - && !table->ibd_file_missing) { + && !table->file_unreadable) { /* Make a new pathname to update SYS_DATAFILES. */ char* new_path = row_make_new_pathname(table, new_name); char* old_path = fil_space_get_first_path(table->space); diff --git a/storage/innobase/row/row0purge.cc b/storage/innobase/row/row0purge.cc index 550108a05a5e..fad3e6545099 100644 --- a/storage/innobase/row/row0purge.cc +++ b/storage/innobase/row/row0purge.cc @@ -910,7 +910,7 @@ row_purge_parse_undo_rec( goto close_exit; } - if (node->table->ibd_file_missing) { + if (node->table->file_unreadable) { /* We skip purge of missing .ibd files */ dict_table_close(node->table, FALSE, FALSE); diff --git a/storage/innobase/row/row0quiesce.cc b/storage/innobase/row/row0quiesce.cc index 4d3b3c2b2615..5d9ab963d9be 100644 --- a/storage/innobase/row/row0quiesce.cc +++ b/storage/innobase/row/row0quiesce.cc @@ -35,6 +35,7 @@ Created 2012-02-08 by Sunny Bains. #include "srv0start.h" #include "trx0purge.h" #include "fsp0sysspace.h" +#include "fil0crypt.h" #include @@ -308,8 +309,16 @@ row_quiesce_write_header( { byte value[sizeof(ib_uint32_t)]; + + fil_space_t* space = fil_space_get(table->space); //TODO:Robert nie muszę tu i wszędzie gdzie jest pobierany space dodać coś + //z ios ? + ut_ad(space != NULL); + /* Write the meta-data version number. */ - mach_write_to_4(value, IB_EXPORT_CFG_VERSION_V1); + if (space->crypt_data != NULL && space->crypt_data->type != CRYPT_SCHEME_UNENCRYPTED) + mach_write_to_4(value, IB_EXPORT_CFG_VERSION_V1_WITH_RK); + else + mach_write_to_4(value, IB_EXPORT_CFG_VERSION_V1); DBUG_EXECUTE_IF("ib_export_io_write_failure_4", close(fileno(file));); @@ -601,8 +610,11 @@ row_quiesce_write_cfp( dberr_t err; char name[OS_FILE_MAX_PATH]; + + fil_space_t* space = fil_space_get(table->space); + /* If table is not encrypted, return. */ - if (!dict_table_is_encrypted(table)) { + if (!dict_table_is_encrypted(table) || space->crypt_data != NULL) { return(DB_SUCCESS); } @@ -620,7 +632,6 @@ row_quiesce_write_cfp( static_cast(mem_heap_alloc(table->heap, ENCRYPTION_KEY_LEN)); - fil_space_t* space = fil_space_get(table->space); ut_ad(space != NULL && FSP_FLAGS_GET_ENCRYPTION(space->flags)); memcpy(table->encryption_key, @@ -742,15 +753,17 @@ row_quiesce_table_start( if (!trx_is_interrupted(trx)) { extern ib_mutex_t master_key_id_mutex; - if (dict_table_is_encrypted(table)) { + bool was_master_key_id_mutex_locked = false; + if (dict_table_is_encrypted(table) && !table->keyring_encryption_info.page0_has_crypt_data) { /* Require the mutex to block key rotation. */ + was_master_key_id_mutex_locked = true; mutex_enter(&master_key_id_mutex); } buf_LRU_flush_or_remove_pages( table->space, BUF_REMOVE_FLUSH_WRITE, trx); - if (dict_table_is_encrypted(table)) { + if (was_master_key_id_mutex_locked) { mutex_exit(&master_key_id_mutex); } diff --git a/storage/innobase/row/row0sel.cc b/storage/innobase/row/row0sel.cc index cbf7fe90e024..45ac779582a0 100644 --- a/storage/innobase/row/row0sel.cc +++ b/storage/innobase/row/row0sel.cc @@ -1125,7 +1125,7 @@ sel_set_rtr_rec_lock( cur_block = buf_page_get_gen( page_id, dict_table_page_size(index->table), RW_X_LATCH, NULL, BUF_GET, - __FILE__, __LINE__, mtr); + __FILE__, __LINE__, mtr, false, &err); } else { mtr_start(mtr); goto func_end; @@ -4430,10 +4430,19 @@ row_search_no_mvcc( } else if (mode == PAGE_CUR_G || mode == PAGE_CUR_L) { - btr_pcur_open_at_index_side( + err = btr_pcur_open_at_index_side( mode == PAGE_CUR_G, index, BTR_SEARCH_LEAF, pcur, false, 0, mtr); + if (err != DB_SUCCESS) { + if (err == DB_DECRYPTION_FAILED) { + ib::warn() << "Table is encrypted but encryption service or" + " used key_id is not available. " + " Can't continue reading table."; + index->table->set_file_unreadable(); + } + return (err); + } } } @@ -4723,7 +4732,11 @@ row_search_mvcc( DBUG_RETURN(DB_TABLESPACE_DELETED); - } else if (prebuilt->table->ibd_file_missing) { + } else if (!prebuilt->table->is_readable()) { + DBUG_RETURN(fil_space_get(prebuilt->table->space) + ? DB_DECRYPTION_FAILED + : DB_TABLESPACE_NOT_FOUND); + } else if (prebuilt->table->file_unreadable) { DBUG_RETURN(DB_TABLESPACE_NOT_FOUND); @@ -5171,9 +5184,14 @@ row_search_mvcc( } } - btr_pcur_open_with_no_init(index, search_tuple, mode, - BTR_SEARCH_LEAF, - pcur, 0, &mtr); + err = btr_pcur_open_with_no_init(index, search_tuple, mode, + BTR_SEARCH_LEAF, + pcur, 0, &mtr); + + if (err != DB_SUCCESS) { + rec = NULL; + goto lock_wait_or_error; + } pcur->trx_if_known = trx; @@ -5208,9 +5226,20 @@ row_search_mvcc( } } } else if (mode == PAGE_CUR_G || mode == PAGE_CUR_L) { - btr_pcur_open_at_index_side( + err = btr_pcur_open_at_index_side( mode == PAGE_CUR_G, index, BTR_SEARCH_LEAF, pcur, false, 0, &mtr); + + if (err != DB_SUCCESS) { + if (err == DB_DECRYPTION_FAILED) { + ib::warn() << "Table is encrypted but encryption service or" + " used key_id is not available. " + " Can't continue reading table."; + index->table->set_file_unreadable(); + } + rec = NULL; + goto lock_wait_or_error; + } } rec_loop: @@ -5228,6 +5257,11 @@ row_search_mvcc( rec = btr_pcur_get_rec(pcur); + if (!index->table->is_readable()) { + err = DB_DECRYPTION_FAILED; + goto lock_wait_or_error; + } + SRV_CORRUPT_TABLE_CHECK(rec, { err = DB_CORRUPTION; @@ -6298,7 +6332,9 @@ row_search_mvcc( /*-------------------------------------------------------------*/ if (!dict_index_is_spatial(index)) { - btr_pcur_store_position(pcur, &mtr); + if (rec) { + btr_pcur_store_position(pcur, &mtr); + } } lock_table_wait: @@ -6703,14 +6739,18 @@ static const rec_t* row_search_get_max_rec( dict_index_t* index, - mtr_t* mtr) + mtr_t* mtr, + dberr_t &error) { btr_pcur_t pcur; const rec_t* rec; /* Open at the high/right end (false), and init cursor */ - btr_pcur_open_at_index_side( + dberr_t err = btr_pcur_open_at_index_side( false, index, BTR_SEARCH_LEAF, &pcur, true, 0, mtr); + if (err != DB_SUCCESS) + return NULL; + do { const page_t* page; @@ -6753,7 +6793,7 @@ row_search_max_autoinc( mtr_start(&mtr); - rec = row_search_get_max_rec(index, &mtr); + rec = row_search_get_max_rec(index, &mtr, error); if (rec != NULL) { ibool unsigned_type = ( diff --git a/storage/innobase/row/row0trunc.cc b/storage/innobase/row/row0trunc.cc index 016f6f389ecb..09c22e55de89 100644 --- a/storage/innobase/row/row0trunc.cc +++ b/storage/innobase/row/row0trunc.cc @@ -1719,10 +1719,14 @@ row_truncate_sanity_checks( return(DB_TABLESPACE_DELETED); - } else if (table->ibd_file_missing) { - - return(DB_TABLESPACE_NOT_FOUND); + } else if (!table->is_readable()) { + if (fil_space_get(table->space) == NULL) { + return(DB_TABLESPACE_NOT_FOUND); + } else { + return(DB_DECRYPTION_FAILED); + } + } else if (dict_table_is_corrupted(table)) { return(DB_TABLE_CORRUPT); @@ -2274,12 +2278,18 @@ truncate_t::fixup_tables_in_non_system_tablespace() fil_create_directory_for_tablename( (*it)->m_tablename); + CreateInfoEncryptionKeyId create_info_encryption_key_id(false, + (*it)->m_encryption_key_id); + err = fil_ibd_create( - (*it)->m_space_id, - (*it)->m_tablename, - (*it)->m_dir_path, - (*it)->m_tablespace_flags, - FIL_IBD_FILE_INITIAL_SIZE); + (*it)->m_space_id, + (*it)->m_tablename, + (*it)->m_dir_path, + (*it)->m_tablespace_flags, + FIL_IBD_FILE_INITIAL_SIZE, + (*it)->m_encryption, + create_info_encryption_key_id + ); if (err != DB_SUCCESS) { /* If checkpoint is not yet done and table is dropped and then we might @@ -2374,7 +2384,8 @@ truncate_t::truncate_t( m_format_flags(), m_indexes(), m_log_lsn(), - m_log_file_name() + m_log_file_name(), + m_encryption(FIL_ENCRYPTION_DEFAULT) { if (dir_path != NULL) { m_dir_path = mem_strdup(dir_path); @@ -2398,7 +2409,8 @@ truncate_t::truncate_t( m_format_flags(), m_indexes(), m_log_lsn(), - m_log_file_name() + m_log_file_name(), + m_encryption(FIL_ENCRYPTION_DEFAULT) { m_log_file_name = mem_strdup(log_file_name); if (m_log_file_name == NULL) { diff --git a/storage/innobase/row/row0uins.cc b/storage/innobase/row/row0uins.cc index 5e4f57de6ce6..f68c9f7d5f6c 100644 --- a/storage/innobase/row/row0uins.cc +++ b/storage/innobase/row/row0uins.cc @@ -350,7 +350,7 @@ row_undo_ins_parse_undo_rec( /* Skip the UNDO if we can't find the table or the .ibd file. */ if (UNIV_UNLIKELY(node->table == NULL)) { - } else if (UNIV_UNLIKELY(node->table->ibd_file_missing)) { + } else if (UNIV_UNLIKELY(node->table->file_unreadable)) { close_table: dict_table_close(node->table, dict_locked, FALSE); node->table = NULL; diff --git a/storage/innobase/row/row0umod.cc b/storage/innobase/row/row0umod.cc index a90ea377f891..2c5d30375b38 100644 --- a/storage/innobase/row/row0umod.cc +++ b/storage/innobase/row/row0umod.cc @@ -1135,7 +1135,7 @@ row_undo_mod_parse_undo_rec( return; } - if (node->table->ibd_file_missing || + if (node->table->file_unreadable || fil_space_is_being_truncated(node->table->space) ) { dict_table_close(node->table, dict_locked, FALSE); node->table = NULL; diff --git a/storage/innobase/srv/srv0mon.cc b/storage/innobase/srv/srv0mon.cc index cfe6d66185bc..4d28b197e6c5 100644 --- a/storage/innobase/srv/srv0mon.cc +++ b/storage/innobase/srv/srv0mon.cc @@ -290,6 +290,12 @@ static monitor_info_t innodb_counter_info[] = MONITOR_EXISTING | MONITOR_DEFAULT_ON), MONITOR_DEFAULT_START, MONITOR_OVLD_PAGES_READ}, + {"buffer_pages0_read", "buffer", + "Number of page 0 read (innodb_pages0_read)", + static_cast( + MONITOR_EXISTING | MONITOR_DEFAULT_ON), + MONITOR_DEFAULT_START, MONITOR_OVLD_PAGES0_READ}, + {"buffer_data_reads", "buffer", "Amount of data read in bytes (innodb_data_reads)", static_cast( @@ -959,6 +965,17 @@ static monitor_info_t innodb_counter_info[] = MONITOR_NONE, MONITOR_DEFAULT_START, MONITOR_PAD_DECREMENTS}, + /* ========== Counters for Encryption ========== */ + {"pages_encrypted", "encryption", + "Number of pages encrypted", + MONITOR_NONE, + MONITOR_DEFAULT_START, MONITOR_OVLD_PAGES_ENCRYPTED}, + + {"pages_decrypted", "encryption", + "Number of pages decrypted", + MONITOR_NONE, + MONITOR_DEFAULT_START, MONITOR_OVLD_PAGES_DECRYPTED}, + /* ========== Counters for Index ========== */ {"module_index", "index", "Index Manager", MONITOR_MODULE, @@ -1649,6 +1666,11 @@ srv_mon_process_existing_counter( value = stat.n_pages_read; break; + /* innodb_pages0_read */ + case MONITOR_OVLD_PAGES0_READ: + value = srv_stats.page0_read; + break; + /* innodb_data_reads, the total number of data reads */ case MONITOR_OVLD_BYTE_READ: value = srv_stats.data_read; @@ -1715,6 +1737,13 @@ srv_mon_process_existing_counter( value = srv_stats.log_padded; break; + case MONITOR_OVLD_PAGES_ENCRYPTED: + value = srv_stats.pages_encrypted; + break; + case MONITOR_OVLD_PAGES_DECRYPTED: + value = srv_stats.pages_decrypted; + break; + /* innodb_dblwr_writes */ case MONITOR_OVLD_SRV_DBLWR_WRITES: value = srv_stats.dblwr_writes; diff --git a/storage/innobase/srv/srv0srv.cc b/storage/innobase/srv/srv0srv.cc index ded587cbf4f5..574a94f9ad36 100644 --- a/storage/innobase/srv/srv0srv.cc +++ b/storage/innobase/srv/srv0srv.cc @@ -76,6 +76,7 @@ Created 10/8/1995 Heikki Tuuri #include "ut0mem.h" #include "handler.h" #include "ha_innodb.h" +#include "fil0crypt.h" #ifndef UNIV_PFS_THREAD @@ -1584,6 +1585,7 @@ srv_export_innodb_status(void) ulint LRU_len; ulint free_len; ulint flush_list_len; + fil_crypt_stat_t crypt_stat; ulint mem_adaptive_hash, mem_dictionary; ReadView* oldest_view; ulint i; @@ -1591,6 +1593,9 @@ srv_export_innodb_status(void) buf_get_total_stat(&stat); buf_get_total_list_len(&LRU_len, &free_len, &flush_list_len); buf_get_total_list_size_in_bytes(&buf_pools_list_size); + if (!srv_read_only_mode) { + fil_crypt_total_stat(&crypt_stat); + } os_rmb; mem_adaptive_hash @@ -1741,6 +1746,7 @@ srv_export_innodb_status(void) export_vars.innodb_pages_created = stat.n_pages_created; export_vars.innodb_pages_read = stat.n_pages_read; + export_vars.innodb_page0_read = srv_stats.page0_read; export_vars.innodb_pages_written = stat.n_pages_written; @@ -1779,6 +1785,9 @@ srv_export_innodb_status(void) export_vars.innodb_available_undo_logs = srv_available_undo_logs; + export_vars.innodb_pages_decrypted = srv_stats.pages_decrypted; + export_vars.innodb_pages_encrypted = srv_stats.pages_encrypted; + export_vars.innodb_n_merge_blocks_encrypted = srv_stats.n_merge_blocks_encrypted; @@ -1833,6 +1842,23 @@ srv_export_innodb_status(void) thd_get_fragmentation_stats(current_thd, &export_vars.innodb_fragmentation_stats); + if (!srv_read_only_mode) { + export_vars.innodb_encryption_rotation_pages_read_from_cache = + crypt_stat.pages_read_from_cache; + export_vars.innodb_encryption_rotation_pages_read_from_disk = + crypt_stat.pages_read_from_disk; + export_vars.innodb_encryption_rotation_pages_modified = + crypt_stat.pages_modified; + export_vars.innodb_encryption_rotation_pages_flushed = + crypt_stat.pages_flushed; + export_vars.innodb_encryption_rotation_estimated_iops = + crypt_stat.estimated_iops; + export_vars.innodb_encryption_key_requests = + srv_stats.n_key_requests; + export_vars.innodb_key_rotation_list_length = + srv_stats.key_rotation_list_length; + } + mutex_exit(&srv_innodb_monitor_mutex); } @@ -2139,6 +2165,8 @@ srv_any_background_threads_are_active(void) thread_active = "buf_resize_thread"; } else if (srv_dict_stats_thread_active) { thread_active = "dict_stats_thread"; + } else if (srv_n_fil_crypt_threads_started) { + thread_active = "fil_crypt_thread"; } os_event_set(srv_error_event); @@ -2147,6 +2175,7 @@ srv_any_background_threads_are_active(void) os_event_set(lock_sys->timeout_event); os_event_set(dict_stats_event); os_event_set(srv_buf_resize_event); + os_event_set(fil_crypt_threads_event); return(thread_active); } diff --git a/storage/innobase/srv/srv0start.cc b/storage/innobase/srv/srv0start.cc index dc13b39645bb..2485f5c1321a 100644 --- a/storage/innobase/srv/srv0start.cc +++ b/storage/innobase/srv/srv0start.cc @@ -57,6 +57,7 @@ Created 2/16/1996 Heikki Tuuri #include "os0file.h" #include "os0thread.h" #include "fil0fil.h" +#include "fil0crypt.h" #include "fsp0fsp.h" #include "rem0rec.h" #include "mtr0mtr.h" @@ -205,6 +206,8 @@ mysql_pfs_key_t srv_log_tracking_thread_key; mysql_pfs_key_t srv_worker_thread_key; #endif /* UNIV_PFS_THREAD */ +int unlock_keyrings(THD *thd); + #ifdef HAVE_PSI_STAGE_INTERFACE /** Array of all InnoDB stage events for monitoring activities via performance schema. */ @@ -456,7 +459,8 @@ create_log_files( fil_space_t* log_space = fil_space_create( "innodb_redo_log", SRV_LOG_SPACE_FIRST_ID, fsp_flags_set_page_size(0, univ_page_size), - FIL_TYPE_LOG); + FIL_TYPE_LOG, + NULL); ut_a(fil_validate()); ut_a(log_space != NULL); @@ -706,7 +710,7 @@ srv_undo_tablespace_open( flags = fsp_flags_init( univ_page_size, false, false, false, false); space = fil_space_create( - undo_name, space_id, flags, FIL_TYPE_TABLESPACE); + undo_name, space_id, flags, FIL_TYPE_TABLESPACE, NULL); ut_a(fil_validate()); ut_a(space); @@ -1339,6 +1343,10 @@ srv_shutdown_all_bg_threads() /* d. Wakeup purge threads. */ srv_purge_wakeup(); } + + if (srv_n_fil_crypt_threads_started) { + os_event_set(fil_crypt_threads_event); + } } if (srv_start_state_is_set(SRV_START_STATE_IO)) { @@ -2226,7 +2234,7 @@ innobase_start_or_create_for_mysql(void) "innodb_redo_log", SRV_LOG_SPACE_FIRST_ID, fsp_flags_set_page_size(0, univ_page_size), - FIL_TYPE_LOG); + FIL_TYPE_LOG, NULL); ut_a(fil_validate()); ut_a(log_space); @@ -2909,6 +2917,10 @@ innobase_start_or_create_for_mysql(void) /* Create the thread that will optimize the FTS sub-system. */ fts_optimize_init(); + fil_system_enter(); + fil_crypt_threads_init(); + fil_system_exit(); + srv_start_state_set(SRV_START_STATE_STAT); } @@ -3008,6 +3020,8 @@ innobase_shutdown_for_mysql(void) if (!srv_read_only_mode) { dict_stats_thread_deinit(); + /* Shutdown key rotation threads */ + fil_crypt_threads_cleanup(); } /* This must be disabled before closing the buffer pool @@ -3066,6 +3080,8 @@ innobase_shutdown_for_mysql(void) srv_was_started = FALSE; srv_start_has_been_called = FALSE; + unlock_keyrings(NULL); + return(DB_SUCCESS); } #endif /* !UNIV_HOTBACKUP */ diff --git a/storage/innobase/sync/sync0debug.cc b/storage/innobase/sync/sync0debug.cc index d4b1abab46d9..72694bfe70c0 100644 --- a/storage/innobase/sync/sync0debug.cc +++ b/storage/innobase/sync/sync0debug.cc @@ -1590,6 +1590,18 @@ sync_latch_meta_init() LATCH_ADD_MUTEX(MASTER_KEY_ID_MUTEX, SYNC_NO_ORDER_CHECK, master_key_id_mutex_key); + LATCH_ADD_MUTEX(FIL_CRYPT_MUTEX, SYNC_NO_ORDER_CHECK, + PFS_NOT_INSTRUMENTED); + LATCH_ADD_MUTEX(FIL_CRYPT_STAT_MUTEX, SYNC_NO_ORDER_CHECK, + PFS_NOT_INSTRUMENTED); + LATCH_ADD_MUTEX(FIL_CRYPT_DATA_MUTEX, SYNC_NO_ORDER_CHECK, + PFS_NOT_INSTRUMENTED); + LATCH_ADD_MUTEX(FIL_CRYPT_THREADS_MUTEX, SYNC_NO_ORDER_CHECK, + PFS_NOT_INSTRUMENTED); + LATCH_ADD_MUTEX(FIL_CRYPT_START_ROTATE_MUTEX, SYNC_NO_ORDER_CHECK, + PFS_NOT_INSTRUMENTED); + + latch_id_t id = LATCH_ID_NONE; /* The array should be ordered on latch ID.We need to diff --git a/storage/innobase/trx/trx0trx.cc b/storage/innobase/trx/trx0trx.cc index 2d12b1ddfde0..b3753a7e1757 100644 --- a/storage/innobase/trx/trx0trx.cc +++ b/storage/innobase/trx/trx0trx.cc @@ -779,7 +779,7 @@ trx_resurrect_table_locks( i != tables.end(); i++) { if (dict_table_t* table = dict_table_open_on_id( *i, FALSE, DICT_TABLE_OP_LOAD_TABLESPACE)) { - if (table->ibd_file_missing + if (table->file_unreadable || dict_table_is_temporary(table)) { mutex_enter(&dict_sys->mutex); dict_table_close(table, TRUE, FALSE); diff --git a/storage/innobase/ut/ut0ut.cc b/storage/innobase/ut/ut0ut.cc index 6008f79299dc..67da2c8388df 100644 --- a/storage/innobase/ut/ut0ut.cc +++ b/storage/innobase/ut/ut0ut.cc @@ -855,7 +855,11 @@ ut_strerr( "of stored column"); case DB_COMPUTE_VALUE_FAILED: return("Compute generated column failed"); - + case DB_DECRYPTION_FAILED: + return("Table is encrypted but decrypt failed."); + case DB_PAGE_CORRUPTED: + return("Page read from tablespace is corrupted."); + /* do not add default: in order to produce a warning if new code is added to the enum but not added here */ } diff --git a/unittest/gunit/keyring/keyring-api-t.cc b/unittest/gunit/keyring/keyring-api-t.cc index ee51aa1e7e8c..dfa3eb01b469 100644 --- a/unittest/gunit/keyring/keyring-api-t.cc +++ b/unittest/gunit/keyring/keyring-api-t.cc @@ -235,7 +235,7 @@ namespace keyring__api_unittest EXPECT_EQ(mysql_key_fetch("percona_binlog", &key_type, NULL, &key, &key_len), 0); EXPECT_STREQ("AES", key_type); - std::string key_data_with_version= "0:" + sample_key_data; + std::string key_data_with_version= "1:" + sample_key_data; EXPECT_EQ(key_len, key_data_with_version.length() + 1); ASSERT_TRUE(memcmp(reinterpret_cast(key), key_data_with_version.c_str(), key_len) == 0); my_free(key_type); @@ -259,31 +259,31 @@ namespace keyring__api_unittest char *key_type= NULL; size_t key_len= 0; - void *key_ver0= NULL; - EXPECT_EQ(mysql_key_fetch("percona_binlog", &key_type, NULL, &key_ver0, + void *key_ver1= NULL; + EXPECT_EQ(mysql_key_fetch("percona_binlog", &key_type, NULL, &key_ver1, &key_len), 0); EXPECT_STREQ("AES", key_type); EXPECT_EQ(key_len, static_cast(18)); - ASSERT_TRUE(memcmp(reinterpret_cast(key_ver0), "0:", 2) == 0); + ASSERT_TRUE(memcmp(reinterpret_cast(key_ver1), "1:", 2) == 0); my_free(key_type); key_type= NULL; - void *key_ver1= NULL; + void *key_ver2= NULL; EXPECT_EQ(mysql_key_generate("percona_binlog", "AES", NULL, 16), 0); - EXPECT_EQ(mysql_key_fetch("percona_binlog", &key_type, NULL, &key_ver1, + EXPECT_EQ(mysql_key_fetch("percona_binlog", &key_type, NULL, &key_ver2, &key_len), 0); EXPECT_STREQ("AES", key_type); EXPECT_EQ(key_len, static_cast(18)); - ASSERT_TRUE(memcmp(reinterpret_cast(key_ver1), "1:", 2) == 0); + ASSERT_TRUE(memcmp(reinterpret_cast(key_ver2), "2:", 2) == 0); my_free(key_type); key_type= NULL; // make sure that rotated key is different than the original one - ASSERT_TRUE(memcmp(reinterpret_cast(key_ver0) + 2, reinterpret_cast(key_ver1) + 2, 16) != 0); + ASSERT_TRUE(memcmp(reinterpret_cast(key_ver1) + 2, reinterpret_cast(key_ver2) + 2, 16) != 0); - my_free(key_ver0); my_free(key_ver1); + my_free(key_ver2); } TEST_F(Keyring_api_test, GeneratePBRotatePBFetchFirstVersionFetchLatestPB) @@ -294,70 +294,70 @@ namespace keyring__api_unittest char *key_type= NULL; size_t key_len= 0; - void *key_ver0= NULL; + void *key_ver1= NULL; - EXPECT_EQ(mysql_key_fetch("percona_binlog:0", &key_type, NULL, &key_ver0, + EXPECT_EQ(mysql_key_fetch("percona_binlog:1", &key_type, NULL, &key_ver1, &key_len), 0); EXPECT_STREQ("AES", key_type); EXPECT_EQ(key_len, static_cast(16)); my_free(key_type); key_type= NULL; - void *key_ver1= NULL; + void *key_ver2= NULL; - EXPECT_EQ(mysql_key_fetch("percona_binlog", &key_type, NULL, &key_ver1, + EXPECT_EQ(mysql_key_fetch("percona_binlog", &key_type, NULL, &key_ver2, &key_len), 0); EXPECT_STREQ("AES", key_type); EXPECT_EQ(key_len, static_cast(18)); - ASSERT_TRUE(memcmp(reinterpret_cast(key_ver1), "1:", 2) == 0); + ASSERT_TRUE(memcmp(reinterpret_cast(key_ver2), "2:", 2) == 0); my_free(key_type); key_type= NULL; // make sure that rotated key is different than the original one // + 2 to skip key version of retrieved latest percona_binlog key - ASSERT_TRUE(memcmp(reinterpret_cast(key_ver0), reinterpret_cast(key_ver1) + 2, 16) != 0); + ASSERT_TRUE(memcmp(reinterpret_cast(key_ver1), reinterpret_cast(key_ver2) + 2, 16) != 0); - my_free(key_ver0); my_free(key_ver1); + my_free(key_ver2); } TEST_F(Keyring_api_test, StorePBRotatePBFetchFirstVersionFetchLatestPB) { - std::string percona_binlog_key_ver0_data("key_ver0"); - - EXPECT_EQ(mysql_key_store("percona_binlog", "AES", NULL, percona_binlog_key_ver0_data.c_str(), - percona_binlog_key_ver0_data.length() + 1), 0); - std::string percona_binlog_key_ver1_data("key_ver1"); EXPECT_EQ(mysql_key_store("percona_binlog", "AES", NULL, percona_binlog_key_ver1_data.c_str(), percona_binlog_key_ver1_data.length() + 1), 0); + std::string percona_binlog_key_ver2_data("key_ver2"); + + EXPECT_EQ(mysql_key_store("percona_binlog", "AES", NULL, percona_binlog_key_ver2_data.c_str(), + percona_binlog_key_ver2_data.length() + 1), 0); + char *key_type= NULL; size_t key_len= 0; - void *key_ver0= NULL; + void *key_ver1= NULL; - EXPECT_EQ(mysql_key_fetch("percona_binlog:0", &key_type, NULL, &key_ver0, + EXPECT_EQ(mysql_key_fetch("percona_binlog:1", &key_type, NULL, &key_ver1, &key_len), 0); EXPECT_STREQ("AES", key_type); - EXPECT_EQ(key_len, percona_binlog_key_ver0_data.length() + 1); - ASSERT_TRUE(memcmp(reinterpret_cast(key_ver0), percona_binlog_key_ver0_data.c_str(), key_len) == 0); + EXPECT_EQ(key_len, percona_binlog_key_ver1_data.length() + 1); + ASSERT_TRUE(memcmp(reinterpret_cast(key_ver1), percona_binlog_key_ver1_data.c_str(), key_len) == 0); my_free(key_type); key_type= NULL; - void *key_ver1= NULL; + void *key_ver2= NULL; - EXPECT_EQ(mysql_key_fetch("percona_binlog", &key_type, NULL, &key_ver1, + EXPECT_EQ(mysql_key_fetch("percona_binlog", &key_type, NULL, &key_ver2, &key_len), 0); EXPECT_STREQ("AES", key_type); - EXPECT_EQ(key_len, percona_binlog_key_ver1_data.length() + 3); - std::string expected_percona_binlog_key_ver1_data_with_verion= "1:" + percona_binlog_key_ver1_data; - ASSERT_TRUE(memcmp(reinterpret_cast(key_ver1), expected_percona_binlog_key_ver1_data_with_verion.c_str(), key_len) == 0); + EXPECT_EQ(key_len, percona_binlog_key_ver2_data.length() + 3); + std::string expected_percona_binlog_key_ver2_data_with_verion= "2:" + percona_binlog_key_ver2_data; + ASSERT_TRUE(memcmp(reinterpret_cast(key_ver2), expected_percona_binlog_key_ver2_data_with_verion.c_str(), key_len) == 0); my_free(key_type); key_type= NULL; - my_free(key_ver0); my_free(key_ver1); + my_free(key_ver2); } TEST_F(Keyring_api_test, RotatePBStoreSKFetchPBRotatePBFetchPBRotatePBRotateSKFetchPBFetchSK) @@ -378,7 +378,7 @@ namespace keyring__api_unittest EXPECT_EQ(mysql_key_fetch("percona_binlog", &key_type, NULL, &key, &key_len), 0); EXPECT_STREQ("AES", key_type); - std::string key_data_with_version= "0:" + percona_binlog_key_data_1; + std::string key_data_with_version= "1:" + percona_binlog_key_data_1; EXPECT_EQ(key_len, key_data_with_version.length() + 1); ASSERT_TRUE(memcmp(reinterpret_cast(key), key_data_with_version.c_str(), key_len) == 0); my_free(key_type); @@ -394,7 +394,7 @@ namespace keyring__api_unittest EXPECT_EQ(mysql_key_fetch("percona_binlog", &key_type, NULL, &key, &key_len), 0); EXPECT_STREQ("AES", key_type); - key_data_with_version= "1:" + percona_binlog_key_data_2; + key_data_with_version= "2:" + percona_binlog_key_data_2; EXPECT_EQ(key_len, key_data_with_version.length() + 1); ASSERT_TRUE(memcmp(reinterpret_cast(key), key_data_with_version.c_str(), key_len) == 0); my_free(key_type); @@ -415,7 +415,7 @@ namespace keyring__api_unittest EXPECT_EQ(mysql_key_fetch("percona_binlog", &key_type, NULL, &key, &key_len), 0); EXPECT_STREQ("AES", key_type); - key_data_with_version= "2:" + percona_binlog_key_data_3; + key_data_with_version= "3:" + percona_binlog_key_data_3; EXPECT_EQ(key_len, key_data_with_version.length() + 1); ASSERT_TRUE(memcmp(reinterpret_cast(key), key_data_with_version.c_str(), key_len) == 0); my_free(key_type); @@ -426,7 +426,7 @@ namespace keyring__api_unittest EXPECT_EQ(mysql_key_fetch("percona_sk", &key_type, NULL, &key, &key_len), 0); EXPECT_STREQ("AES", key_type); - key_data_with_version= "1:" + percona_sk_data_2; + key_data_with_version= "2:" + percona_sk_data_2; EXPECT_EQ(key_len, key_data_with_version.length() + 1); ASSERT_TRUE(memcmp(reinterpret_cast(key), key_data_with_version.c_str(), key_len) == 0); my_free(key_type); diff --git a/unittest/gunit/keyring/keys_container-t.cc b/unittest/gunit/keyring/keys_container-t.cc index dee497f64a6f..031517292cbc 100644 --- a/unittest/gunit/keyring/keys_container-t.cc +++ b/unittest/gunit/keyring/keys_container-t.cc @@ -607,7 +607,7 @@ namespace keyring__keys_container_unittest delete sample_key; // unused in this test } - // Simulates adding 0 version of percona binlog key + // Simulates adding 1 version of percona binlog key TEST_F(Keys_container_test, StoreWithoutVersionFetchSystemKey) { IKeyring_io *keyring_io= new Buffered_file_io(logger); @@ -619,19 +619,19 @@ namespace keyring__keys_container_unittest EXPECT_EQ(keys_container->store_key(key1), 0); ASSERT_TRUE(keys_container->get_number_of_keys() == 1); - Key pb_key_verion0("percona_binlog:0", NULL, NULL, NULL, 0); - IKey *fetched_pb_key_version0= keys_container->fetch_key(&pb_key_verion0); + Key pb_key_version1("percona_binlog:1", NULL, NULL, NULL, 0); + IKey *fetched_pb_key_version1= keys_container->fetch_key(&pb_key_version1); - ASSERT_TRUE(fetched_pb_key_version0 != NULL); - std::string expected_pb_key_version0_signature= "percona_binlog:0"; - EXPECT_STREQ(fetched_pb_key_version0->get_key_signature()->c_str(), expected_pb_key_version0_signature.c_str()); - EXPECT_EQ(fetched_pb_key_version0->get_key_signature()->length(), expected_pb_key_version0_signature.length()); - uchar *fetched_pb_key_version0_data_fetched= fetched_pb_key_version0->get_key_data(); - size_t fetched_pb_key_data_fetched_size= fetched_pb_key_version0->get_key_data_size(); - EXPECT_STREQ(key_data1.c_str(), reinterpret_cast(fetched_pb_key_version0_data_fetched)); + ASSERT_TRUE(fetched_pb_key_version1 != NULL); + std::string expected_pb_key_version1_signature= "percona_binlog:1"; + EXPECT_STREQ(fetched_pb_key_version1->get_key_signature()->c_str(), expected_pb_key_version1_signature.c_str()); + EXPECT_EQ(fetched_pb_key_version1->get_key_signature()->length(), expected_pb_key_version1_signature.length()); + uchar *fetched_pb_key_version1_data_fetched= fetched_pb_key_version1->get_key_data(); + size_t fetched_pb_key_data_fetched_size= fetched_pb_key_version1->get_key_data_size(); + EXPECT_STREQ(key_data1.c_str(), reinterpret_cast(fetched_pb_key_version1_data_fetched)); ASSERT_TRUE(key_data1.length() + 1 == fetched_pb_key_data_fetched_size); - my_free(fetched_pb_key_version0->release_key_data()); + my_free(fetched_pb_key_version1->release_key_data()); delete sample_key; // unused in this test } diff --git a/unittest/gunit/keyring_vault/vault_keyring-api-t.cc b/unittest/gunit/keyring_vault/vault_keyring-api-t.cc index 153f7f295cf2..4ef95688a3da 100644 --- a/unittest/gunit/keyring_vault/vault_keyring-api-t.cc +++ b/unittest/gunit/keyring_vault/vault_keyring-api-t.cc @@ -369,7 +369,7 @@ namespace keyring__api_unittest EXPECT_EQ(mysql_key_fetch("percona_binlog", &key_type, NULL, &key, &key_len), 0); EXPECT_STREQ("AES", key_type); - std::string key_data_with_version = "0:" + sample_key_data; + std::string key_data_with_version = "1:" + sample_key_data; EXPECT_EQ(key_len, key_data_with_version.length()+1); ASSERT_TRUE(memcmp((char *)key, key_data_with_version.c_str(), key_len) == 0); my_free(key_type); @@ -403,7 +403,7 @@ namespace keyring__api_unittest EXPECT_EQ(mysql_key_fetch("percona_binlog", &key_type, NULL, &key, &key_len), 0); EXPECT_STREQ("AES", key_type); - std::string key_data_with_version = "1:" + percona_binlog_key_data_1; + std::string key_data_with_version = "2:" + percona_binlog_key_data_1; EXPECT_EQ(key_len, key_data_with_version.length()+1); ASSERT_TRUE(memcmp((char *)key, key_data_with_version.c_str(), key_len) == 0); my_free(key_type); @@ -418,7 +418,7 @@ namespace keyring__api_unittest EXPECT_EQ(mysql_key_fetch("percona_binlog", &key_type, NULL, &key, &key_len), 0); EXPECT_STREQ("AES", key_type); - key_data_with_version = "2:" + percona_binlog_key_data_2; + key_data_with_version = "3:" + percona_binlog_key_data_2; EXPECT_EQ(key_len, key_data_with_version.length()+1); ASSERT_TRUE(memcmp((char *)key, key_data_with_version.c_str(), key_len) == 0); my_free(key_type); @@ -436,7 +436,7 @@ namespace keyring__api_unittest EXPECT_EQ(mysql_key_fetch("percona_binlog", &key_type, NULL, &key, &key_len), 0); EXPECT_STREQ("AES", key_type); - key_data_with_version = "3:" + percona_binlog_key_data_3; + key_data_with_version = "4:" + percona_binlog_key_data_3; EXPECT_EQ(key_len, key_data_with_version.length()+1); ASSERT_TRUE(memcmp((char *)key, key_data_with_version.c_str(), key_len) == 0); my_free(key_type); @@ -447,7 +447,7 @@ namespace keyring__api_unittest EXPECT_EQ(mysql_key_fetch("percona_sk", &key_type, NULL, &key, &key_len), 0); EXPECT_STREQ("AES", key_type); - key_data_with_version = "1:" + percona_sk_data_2; + key_data_with_version = "2:" + percona_sk_data_2; EXPECT_EQ(key_len, key_data_with_version.length()+1); ASSERT_TRUE(memcmp((char *)key, key_data_with_version.c_str(), key_len) == 0); my_free(key_type); From 243e2d8cc2dacbbef84806f96ba2ae50312bd5b0 Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Tue, 16 Oct 2018 12:59:46 +0200 Subject: [PATCH 1176/1221] PS-4556: InnoDB redo log encryption This is based on WL#9290 in MySQL 8.0, while also adding a keyring based rotated key encryption. The encryption setting supports two options: * master_key, which works like the redo log encryption in MySQL 8.0 * keyring_key, which encrypts each new redo log tablespace with the latest percona_redo key from the keyring. Related commits in upstream 8.0: * 1a6dd5737ed8cbe732832697e3b5f8320bcbed4b * 8facbb05f9af8f5d13cf52d40cdaee57da40d7a7 --- client/mysqltest.cc | 77 +- include/system_key.h | 1 + mysql-test/include/log_encrypt_1.inc | 118 +++ mysql-test/include/log_encrypt_2.inc | 129 +++ mysql-test/include/log_encrypt_3.inc | 206 +++++ mysql-test/include/log_encrypt_4.inc | 144 ++++ mysql-test/include/log_encrypt_5.inc | 127 +++ mysql-test/include/log_encrypt_6.inc | 136 +++ mysql-test/include/restart_mysqld_no_echo.inc | 46 + mysql-test/include/start_mysqld_no_echo.inc | 20 + .../r/percona_system_key_rotation.result | 7 +- .../t/percona_system_key_rotation.test | 13 +- .../suite/innodb/r/log_encrypt_1_mk.result | 115 +++ .../suite/innodb/r/log_encrypt_1_rk.result | 115 +++ .../suite/innodb/r/log_encrypt_2_mk.result | 146 ++++ .../suite/innodb/r/log_encrypt_2_rk.result | 146 ++++ .../suite/innodb/r/log_encrypt_3_mk.result | 207 +++++ .../suite/innodb/r/log_encrypt_3_rk.result | 207 +++++ .../suite/innodb/r/log_encrypt_4_mk.result | 55 ++ .../suite/innodb/r/log_encrypt_4_rk.result | 55 ++ .../suite/innodb/r/log_encrypt_5_mk.result | 77 ++ .../suite/innodb/r/log_encrypt_5_rk.result | 77 ++ .../suite/innodb/r/log_encrypt_6_mk.result | 66 ++ .../suite/innodb/r/log_encrypt_6_rk.result | 66 ++ .../suite/innodb/r/log_encrypt_kill.result | 200 +++++ mysql-test/suite/innodb/t/disabled.def | 4 + .../suite/innodb/t/log_encrypt_1_mk.test | 3 + .../suite/innodb/t/log_encrypt_1_rk.test | 3 + .../innodb/t/log_encrypt_2_mk-master.opt | 4 + .../suite/innodb/t/log_encrypt_2_mk.test | 2 + .../innodb/t/log_encrypt_2_rk-master.opt | 4 + .../suite/innodb/t/log_encrypt_2_rk.test | 2 + .../suite/innodb/t/log_encrypt_3_mk.test | 3 + .../suite/innodb/t/log_encrypt_3_rk.test | 3 + .../suite/innodb/t/log_encrypt_4_mk.test | 3 + .../suite/innodb/t/log_encrypt_4_rk.test | 3 + .../suite/innodb/t/log_encrypt_5_mk.test | 2 + .../suite/innodb/t/log_encrypt_5_rk.test | 2 + .../suite/innodb/t/log_encrypt_6_mk.test | 2 + .../suite/innodb/t/log_encrypt_6_rk.test | 2 + .../suite/innodb/t/log_encrypt_kill.test | 330 ++++++++ .../suite/perfschema/r/show_sanity.result | 2 + .../r/innodb_redo_log_encrypt_basic.result | 62 ++ .../t/innodb_redo_log_encrypt_basic.test | 64 ++ mysys/system_key.c | 3 +- storage/innobase/fil/fil0fil.cc | 25 +- storage/innobase/fsp/fsp0fsp.cc | 86 +- storage/innobase/handler/ha_innodb.cc | 19 + storage/innobase/include/fil0fil.h | 5 + storage/innobase/include/fsp0fsp.h | 18 + storage/innobase/include/log0log.h | 50 +- storage/innobase/include/log0log.ic | 34 + storage/innobase/include/os0file.h | 87 ++ storage/innobase/include/srv0srv.h | 9 + storage/innobase/log/log0log.cc | 418 ++++++++++ storage/innobase/os/os0file.cc | 786 +++++++++++++++++- storage/innobase/srv/srv0srv.cc | 5 + storage/innobase/srv/srv0start.cc | 38 + 58 files changed, 4554 insertions(+), 85 deletions(-) create mode 100644 mysql-test/include/log_encrypt_1.inc create mode 100644 mysql-test/include/log_encrypt_2.inc create mode 100644 mysql-test/include/log_encrypt_3.inc create mode 100644 mysql-test/include/log_encrypt_4.inc create mode 100644 mysql-test/include/log_encrypt_5.inc create mode 100644 mysql-test/include/log_encrypt_6.inc create mode 100644 mysql-test/include/restart_mysqld_no_echo.inc create mode 100644 mysql-test/include/start_mysqld_no_echo.inc create mode 100644 mysql-test/suite/innodb/r/log_encrypt_1_mk.result create mode 100644 mysql-test/suite/innodb/r/log_encrypt_1_rk.result create mode 100644 mysql-test/suite/innodb/r/log_encrypt_2_mk.result create mode 100644 mysql-test/suite/innodb/r/log_encrypt_2_rk.result create mode 100644 mysql-test/suite/innodb/r/log_encrypt_3_mk.result create mode 100644 mysql-test/suite/innodb/r/log_encrypt_3_rk.result create mode 100644 mysql-test/suite/innodb/r/log_encrypt_4_mk.result create mode 100644 mysql-test/suite/innodb/r/log_encrypt_4_rk.result create mode 100644 mysql-test/suite/innodb/r/log_encrypt_5_mk.result create mode 100644 mysql-test/suite/innodb/r/log_encrypt_5_rk.result create mode 100644 mysql-test/suite/innodb/r/log_encrypt_6_mk.result create mode 100644 mysql-test/suite/innodb/r/log_encrypt_6_rk.result create mode 100644 mysql-test/suite/innodb/r/log_encrypt_kill.result create mode 100644 mysql-test/suite/innodb/t/log_encrypt_1_mk.test create mode 100644 mysql-test/suite/innodb/t/log_encrypt_1_rk.test create mode 100644 mysql-test/suite/innodb/t/log_encrypt_2_mk-master.opt create mode 100644 mysql-test/suite/innodb/t/log_encrypt_2_mk.test create mode 100644 mysql-test/suite/innodb/t/log_encrypt_2_rk-master.opt create mode 100644 mysql-test/suite/innodb/t/log_encrypt_2_rk.test create mode 100644 mysql-test/suite/innodb/t/log_encrypt_3_mk.test create mode 100644 mysql-test/suite/innodb/t/log_encrypt_3_rk.test create mode 100644 mysql-test/suite/innodb/t/log_encrypt_4_mk.test create mode 100644 mysql-test/suite/innodb/t/log_encrypt_4_rk.test create mode 100644 mysql-test/suite/innodb/t/log_encrypt_5_mk.test create mode 100644 mysql-test/suite/innodb/t/log_encrypt_5_rk.test create mode 100644 mysql-test/suite/innodb/t/log_encrypt_6_mk.test create mode 100644 mysql-test/suite/innodb/t/log_encrypt_6_rk.test create mode 100644 mysql-test/suite/innodb/t/log_encrypt_kill.test create mode 100644 mysql-test/suite/sys_vars/r/innodb_redo_log_encrypt_basic.result create mode 100644 mysql-test/suite/sys_vars/t/innodb_redo_log_encrypt_basic.test diff --git a/client/mysqltest.cc b/client/mysqltest.cc index ea41534ca109..4a461346b93b 100644 --- a/client/mysqltest.cc +++ b/client/mysqltest.cc @@ -401,6 +401,7 @@ enum enum_commands { Q_WRITE_FILE, Q_COPY_FILE, Q_PERL, Q_DIE, Q_EXIT, Q_SKIP, Q_CHMOD_FILE, Q_APPEND_FILE, Q_CAT_FILE, Q_DIFF_FILES, Q_SEND_QUIT, Q_CHANGE_USER, Q_MKDIR, Q_RMDIR, + Q_FORCE_RMDIR, Q_LIST_FILES, Q_LIST_FILES_WRITE_FILE, Q_LIST_FILES_APPEND_FILE, Q_SEND_SHUTDOWN, Q_SHUTDOWN_SERVER, Q_RESULT_FORMAT_VERSION, @@ -503,6 +504,7 @@ const char *command_names[]= "change_user", "mkdir", "rmdir", + "force-rmdir", "list_files", "list_files_write_file", "list_files_append_file", @@ -3889,17 +3891,78 @@ void do_mkdir(struct st_command *command) DBUG_VOID_RETURN; } + +/* + SYNOPSIS + do_force_rmdir + command - command handle + ds_dirname - pointer to dynamic string containing directory informtion + + DESCRIPTION + force-rmdir + Remove the directory +*/ + +static void do_force_rmdir(struct st_command *command, DYNAMIC_STRING *ds_dirname) +{ + DBUG_ENTER("do_force_rmdir"); + + char dir_name[FN_REFLEN]; + strncpy(dir_name, ds_dirname->str, sizeof(dir_name)); + + /* Note that my_dir sorts the list if not given any flags */ + MY_DIR *dir_info= my_dir(ds_dirname->str, MYF(MY_DONT_SORT | MY_WANT_STAT)); + + if (dir_info && dir_info->number_off_files > 2) + { + /* Storing the length of the path to the file, so it can be reused */ + size_t length= ds_dirname->length; + + /* Delete the directory recursively */ + for (uint i= 0; i < dir_info->number_off_files; i++) + { + FILEINFO *file= dir_info->dir_entry + i; + + /* Skip the names "." and ".." */ + if (!strcmp(file->name, ".") || + !strcmp(file->name, "..")) + continue; + + ds_dirname->length= length; + char dir_separator[2]= {FN_LIBCHAR, 0}; + dynstr_append(ds_dirname, dir_separator); + dynstr_append(ds_dirname, file->name); + + if (MY_S_ISDIR(file->mystat->st_mode)) + /* It's a directory */ + do_force_rmdir(command, ds_dirname); + else + /* It's a file */ + my_delete(ds_dirname->str, MYF(0)); + } + } + + my_dirend(dir_info); + int error= rmdir(dir_name) != 0; + handle_command_error(command, error); + + DBUG_VOID_RETURN; +} + + /* SYNOPSIS do_rmdir command called command + force Recursively delete a directory if the value is set to true, + otherwise delete an empty direcory DESCRIPTION rmdir Remove the empty directory */ -void do_rmdir(struct st_command *command) +static void do_rmdir(struct st_command *command, bool force) { int error; static DYNAMIC_STRING ds_dirname; @@ -3913,8 +3976,13 @@ void do_rmdir(struct st_command *command) ' '); DBUG_PRINT("info", ("removing directory: %s", ds_dirname.str)); - error= rmdir(ds_dirname.str) != 0; - handle_command_error(command, error); + if (force) + do_force_rmdir(command, &ds_dirname); + else + { + error= rmdir(ds_dirname.str) != 0; + handle_command_error(command, error); + } dynstr_free(&ds_dirname); DBUG_VOID_RETURN; } @@ -9545,7 +9613,8 @@ int main(int argc, char **argv) case Q_REMOVE_FILE: do_remove_file(command); break; case Q_REMOVE_FILES_WILDCARD: do_remove_files_wildcard(command); break; case Q_MKDIR: do_mkdir(command); break; - case Q_RMDIR: do_rmdir(command); break; + case Q_RMDIR: do_rmdir(command, 0); break; + case Q_FORCE_RMDIR: do_rmdir(command, 1); break; case Q_LIST_FILES: do_list_files(command); break; case Q_LIST_FILES_WRITE_FILE: do_list_files_write_file_command(command, FALSE); diff --git a/include/system_key.h b/include/system_key.h index 8119b6020d1d..216485e9b738 100644 --- a/include/system_key.h +++ b/include/system_key.h @@ -22,6 +22,7 @@ C_MODE_START #define PERCONA_BINLOG_KEY_NAME "percona_binlog" #define PERCONA_INNODB_KEY_NAME "percona_innodb" +#define PERCONA_REDO_KEY_NAME "percona_redo" my_bool is_valid_percona_system_key(const char *key_name, size_t *key_length); diff --git a/mysql-test/include/log_encrypt_1.inc b/mysql-test/include/log_encrypt_1.inc new file mode 100644 index 000000000000..8d954508a312 --- /dev/null +++ b/mysql-test/include/log_encrypt_1.inc @@ -0,0 +1,118 @@ +# WL#9290 InnoDB: Support transparent tablespace data encryption for redo log +# This test case will test basic redo log encryption support features. + +--source include/no_valgrind_without_big.inc +--source include/have_innodb.inc +--source include/not_embedded.inc +--source include/have_innodb_max_16k.inc + +call mtr.add_suppression("\\[Error\\] InnoDB: Encryption can't find master key, please check the keyring plugin is loaded."); + +# eNable redo log encryption, should report error in server log, since keyring is not loaded. +eval SET GLOBAL innodb_redo_log_encrypt = $redo_log_mode; + +# Create a table with encryption, should fail since keyring is not +# loaded. +--error ER_CANNOT_FIND_KEY_IN_KEYRING +CREATE TABLE t1(c1 INT, c2 char(20)) ENCRYPTION="Y" ENGINE = InnoDB; + +CREATE TABLE t1(c1 INT, c2 char(20)) ENGINE = InnoDB; + +--error ER_CANNOT_FIND_KEY_IN_KEYRING +ALTER TABLE t1 ENCRYPTION="Y", algorithm=copy; + +let $restart_parameters = restart: $KEYRING_PARAMS --general-log --log-output=FILE --general_log_file=$MYSQL_TMP_DIR/keyring_query_log $KEYRING_PLUGIN_OPT; +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR $KEYRING_PLUGIN_OPT --plugin-dir=KEYRING_PLUGIN_PATH +--replace_regex /\.dll/.so/ +--source include/restart_mysqld_no_echo.inc + +#Enable redo log encryption +eval SET GLOBAL innodb_redo_log_encrypt = $redo_log_mode; + +SHOW CREATE TABLE t1; + +INSERT INTO t1 VALUES(0, "aaaaa"); +INSERT INTO t1 VALUES(1, "bbbbb"); +INSERT INTO t1 VALUES(2, "ccccc"); +INSERT INTO t1 VALUES(3, "ddddd"); +INSERT INTO t1 VALUES(4, "eeeee"); +INSERT INTO t1 VALUES(5, "fffff"); +INSERT INTO t1 VALUES(6, "ggggg"); +INSERT INTO t1 VALUES(7, "hhhhh"); +INSERT INTO t1 VALUES(8, "iiiii"); +INSERT INTO t1 VALUES(9, "jjjjj"); +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; + +SELECT * FROM t1 ORDER BY c1 LIMIT 10; + +# Restart to confirm the encryption info can be retrieved properly. +let $restart_parameters = restart: $KEYRING_PARAMS --general-log --log-output=FILE --general_log_file=$MYSQL_TMP_DIR/keyring_query_log --innodb_redo_log_encrypt=$redo_log_mode; +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR $KEYRING_PLUGIN_OPT --plugin-dir=KEYRING_PLUGIN_PATH +--replace_regex /\.dll/.so/ +--source include/restart_mysqld_no_echo.inc + +SELECT * FROM t1 ORDER BY c1 LIMIT 10; + +DROP TABLE t1; + +# Crash/recovery test. +CREATE TABLE t1(c1 INT, c2 char(20)) ENGINE = InnoDB; + +INSERT INTO t1 VALUES(0, "aaaaa"); +INSERT INTO t1 VALUES(1, "bbbbb"); +INSERT INTO t1 VALUES(2, "ccccc"); +INSERT INTO t1 VALUES(3, "ddddd"); +INSERT INTO t1 VALUES(4, "eeeee"); +INSERT INTO t1 VALUES(5, "fffff"); +INSERT INTO t1 VALUES(6, "ggggg"); +INSERT INTO t1 VALUES(7, "hhhhh"); +INSERT INTO t1 VALUES(8, "iiiii"); +INSERT INTO t1 VALUES(9, "jjjjj"); + +# Restart to confirm the encryption info can be retrieved properly. +--let $restart_parameters = restart: $KEYRING_PARAMS +--source include/restart_mysqld_no_echo.inc + +SELECT * FROM t1 ORDER BY c1 LIMIT 10; +DELETE FROM t1; + +START TRANSACTION; +INSERT INTO t1 VALUES(0, "aaaaa"); +INSERT INTO t1 VALUES(1, "bbbbb"); +INSERT INTO t1 VALUES(2, "ccccc"); +INSERT INTO t1 VALUES(3, "ddddd"); +INSERT INTO t1 VALUES(4, "eeeee"); +INSERT INTO t1 VALUES(5, "fffff"); +INSERT INTO t1 VALUES(6, "ggggg"); +INSERT INTO t1 VALUES(7, "hhhhh"); +INSERT INTO t1 VALUES(8, "iiiii"); +INSERT INTO t1 VALUES(9, "jjjjj"); + +# Restart to confirm the encryption info can be retrieved properly. +let $restart_parameters = restart: $KEYRING_PARAMS --general-log --log-output=FILE --general_log_file=$MYSQL_TMP_DIR/keyring_query_log --innodb_redo_log_encrypt=$redo_log_mode; +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR $KEYRING_PLUGIN_OPT --plugin-dir=KEYRING_PLUGIN_PATH +--replace_regex /\.dll/.so/ +--source include/restart_mysqld_no_echo.inc + +SELECT * FROM t1 ORDER BY c1 LIMIT 10; + +INSERT INTO t1 VALUES(0, "aaaaa"); +INSERT INTO t1 VALUES(1, "bbbbb"); +INSERT INTO t1 VALUES(2, "ccccc"); +INSERT INTO t1 VALUES(3, "ddddd"); +INSERT INTO t1 VALUES(4, "eeeee"); +INSERT INTO t1 VALUES(5, "fffff"); +INSERT INTO t1 VALUES(6, "ggggg"); +INSERT INTO t1 VALUES(7, "hhhhh"); +INSERT INTO t1 VALUES(8, "iiiii"); +INSERT INTO t1 VALUES(9, "jjjjj"); + +SELECT * FROM t1 ORDER BY c1 LIMIT 10; + +# Cleanup +DROP TABLE t1; diff --git a/mysql-test/include/log_encrypt_2.inc b/mysql-test/include/log_encrypt_2.inc new file mode 100644 index 000000000000..6f6040be24ed --- /dev/null +++ b/mysql-test/include/log_encrypt_2.inc @@ -0,0 +1,129 @@ +# InnoDB transparent tablespace data encryption +# This test case will test basic encryption support features. + +--source include/no_valgrind_without_big.inc +--source include/have_innodb.inc +--source include/not_embedded.inc + +CREATE TABLE t1(c1 int) ENGINE=InnoDB ENCRYPTION="Y"; + +DROP TABLE t1; + +# Restart the server with keyring loaded +--let restart_parameters="restart:$KEYRING_PARAMS" +--source include/restart_mysqld_no_echo.inc + +let $innodb_file_per_table = `SELECT @@innodb_file_per_table`; + +SET GLOBAL innodb_file_per_table = 1; +SELECT @@innodb_file_per_table; + +# Create a table with encryption +CREATE TABLE t1(c1 INT, c2 char(20)) ENCRYPTION="Y" ENGINE = InnoDB; + +SHOW CREATE TABLE t1; +INSERT INTO t1 VALUES(0, "aaaaa"); +INSERT INTO t1 VALUES(1, "bbbbb"); +INSERT INTO t1 VALUES(2, "ccccc"); +INSERT INTO t1 VALUES(3, "ddddd"); +INSERT INTO t1 VALUES(4, "eeeee"); +INSERT INTO t1 VALUES(5, "fffff"); +INSERT INTO t1 VALUES(6, "ggggg"); +INSERT INTO t1 VALUES(7, "hhhhh"); +INSERT INTO t1 VALUES(8, "iiiii"); +INSERT INTO t1 VALUES(9, "jjjjj"); +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; + +SELECT * FROM t1 LIMIT 10; + +# Restart to confirm the encryption info can be retrieved properly. +--let restart_parameters="restart:$KEYRING_PARAMS" +--source include/restart_mysqld_no_echo.inc + +SELECT * FROM t1 LIMIT 10; + +# Key rotation. +ALTER INSTANCE ROTATE INNODB MASTER KEY; + +DROP TABLE t1; + +# Crash/recovery test. +CREATE TABLE t1(c1 INT, c2 char(20)) ENCRYPTION="Y" ENGINE = InnoDB; + +INSERT INTO t1 VALUES(0, "aaaaa"); +INSERT INTO t1 VALUES(1, "bbbbb"); +INSERT INTO t1 VALUES(2, "ccccc"); +INSERT INTO t1 VALUES(3, "ddddd"); +INSERT INTO t1 VALUES(4, "eeeee"); +INSERT INTO t1 VALUES(5, "fffff"); +INSERT INTO t1 VALUES(6, "ggggg"); +INSERT INTO t1 VALUES(7, "hhhhh"); +INSERT INTO t1 VALUES(8, "iiiii"); +INSERT INTO t1 VALUES(9, "jjjjj"); +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; + +# Restart to confirm the encryption info can be retrieved properly. +--let restart_parameters="restart:$KEYRING_PARAMS" +--let $restart_hide_args = 1 +--source include/kill_and_restart_mysqld.inc + +SELECT * FROM t1 LIMIT 10; +DROP TABLE t1; + +let $restart_parameters = restart: $KEYRING_PARAMS --general-log --log-output=FILE --general_log_file=$MYSQL_TMP_DIR/keyring_query_log; +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR $KEYRING_PLUGIN_OPT --plugin-dir=KEYRING_PLUGIN_PATH +--replace_regex /\.dll/.so/ +--source include/restart_mysqld_no_echo.inc + +# Check no effect of block_encryption_mode = 'aes-256-cbc' variable on table encryption +SET block_encryption_mode = 'aes-256-cbc'; +# Test encryption . +CREATE DATABASE tde_db; +CREATE TABLE tde_db.t1(c1 INT PRIMARY KEY, c2 char(50)) ENCRYPTION = 'Y' ENGINE = InnoDB; + +INSERT INTO tde_db.t1 VALUES(0, 'abc'); +INSERT INTO tde_db.t1 VALUES(1, 'xyz'); +INSERT INTO tde_db.t1 VALUES(2, null); +INSERT INTO tde_db.t1 VALUES(3, null); +SELECT * FROM tde_db.t1 LIMIT 10; +ALTER INSTANCE ROTATE INNODB MASTER KEY; +SELECT * FROM tde_db.t1 LIMIT 10; +--echo # Mysqldump output +--exec $MYSQL_DUMP --compact --skip-comments --databases tde_db +--echo # Redirecting mysqlpump output to MYSQL_TMP_DIR/mysqlpump_encrypt.sql +--exec $MYSQL_PUMP --default-parallelism=1 --databases tde_db > $MYSQL_TMP_DIR/mysqlpump_encrypt.sql +DROP DATABASE tde_db; + +--let SEARCH_FILE=$MYSQL_TMP_DIR/keyring_query_log +let SEARCH_PATTERN= ALTER INSTANCE ROTATE INNODB MASTER KEY; +--source include/search_pattern.inc + +--echo # Loading tables from mysqlpump_encrypt.sql +--exec $MYSQL --skip-comments < $MYSQL_TMP_DIR/mysqlpump_encrypt.sql +SELECT * FROM tde_db.t1 LIMIT 10; +INSERT INTO tde_db.t1 VALUES(4, null); +SELECT * FROM tde_db.t1 LIMIT 10; +DROP DATABASE tde_db; +# + +# Cleanup +--remove_file $MYSQL_TMP_DIR/keyring_query_log +--remove_file $MYSQL_TMP_DIR/mysecret_keyring2 +--remove_file $MYSQL_TMP_DIR/mysqlpump_encrypt.sql +eval SET GLOBAL innodb_file_per_table=$innodb_file_per_table; diff --git a/mysql-test/include/log_encrypt_3.inc b/mysql-test/include/log_encrypt_3.inc new file mode 100644 index 000000000000..7051323e8a18 --- /dev/null +++ b/mysql-test/include/log_encrypt_3.inc @@ -0,0 +1,206 @@ +# InnoDB transparent encryption on redo log. +# This test case will test basic encryption support features. +--source include/no_valgrind_without_big.inc +--source include/have_innodb.inc +--source include/not_embedded.inc +--source include/have_innodb_max_16k.inc + +let $old_innodb_file_per_table = `SELECT @@innodb_file_per_table`; +let $old_innodb_redo_log_encrypt = `SELECT @@innodb_redo_log_encrypt`; +CREATE DATABASE tde_db; +USE tde_db; + +# Server is not started with keyring plugin and run innodb_redo_log_encrypt=MASTER_KEY/ROTATED_KEY +# Expected Result : Variable is ignored. +# bug : expect warning or error +eval SET GLOBAL innodb_redo_log_encrypt = $redo_log_encrypt_mode; +SHOW WARNINGS; +--let $wait_condition=SELECT @@global.innodb_redo_log_encrypt = 0 +--source include/wait_condition.inc +CREATE TABLE tde_db.t4 (a BIGINT PRIMARY KEY, b LONGBLOB) ENGINE=InnoDB; +INSERT INTO t4 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t4; + +# Restart server +--source include/restart_mysqld.inc + +SELECT a,LEFT(b,10) FROM tde_db.t4; +DROP TABLE tde_db.t4; +DROP DATABASE tde_db; +CREATE DATABASE tde_db; +USE tde_db; + +# Start server with --early-plugin-load and --innodb_redo_log_encrypt=$redo_log_encrypt_mode . +# Explicitly run , INSTALL PLUGIN keyring_file SONAME 'keyring_file.so' +# Expected : plugin already installed +--echo # Starting server with keyring plugin +let $restart_parameters = restart: --early-plugin-load="keyring_file=$KEYRING_PLUGIN" --loose-keyring_file_data=$MYSQL_TMP_DIR/my_key_log3 $KEYRING_PLUGIN_OPT --innodb_redo_log_encrypt=$redo_log_encrypt_mode; +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR $KEYRING_PLUGIN_OPT --plugin-dir=KEYRING_PLUGIN_PATH $KEYRING_PLUGIN keyring_file.so +--source include/restart_mysqld_no_echo.inc + +SELECT @@global.innodb_redo_log_encrypt; + +--replace_regex /\.dll/.so/ +--error ER_UDF_EXISTS +eval INSTALL PLUGIN keyring_file SONAME '$KEYRING_PLUGIN'; +UNINSTALL PLUGIN keyring_file; +--echo # Starting server with keyring plugin +let $restart_parameters = restart: --early-plugin-load="keyring_file=$KEYRING_PLUGIN" --loose-keyring_file_data=$MYSQL_TMP_DIR/my_key_log3 $KEYRING_PLUGIN_OPT --innodb_redo_log_encrypt=$redo_log_encrypt_mode; +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR $KEYRING_PLUGIN_OPT --plugin-dir=KEYRING_PLUGIN_PATH $KEYRING_PLUGIN keyring_file.so +--source include/restart_mysqld_no_echo.inc + +SET GLOBAL innodb_redo_log_encrypt = 0; +SELECT @@global.innodb_redo_log_encrypt; +--replace_regex /\.dll/.so/ +--error ER_UDF_EXISTS +eval INSTALL PLUGIN keyring_file SONAME '$KEYRING_PLUGIN'; +UNINSTALL PLUGIN keyring_file; + +# Flush logs +# (closes and reopens any flushable logs for installed storage engines. +# This causes InnoDB to flush its logs to disk. ) +let $restart_parameters = restart: --early-plugin-load="keyring_file=$KEYRING_PLUGIN" --loose-keyring_file_data=$MYSQL_TMP_DIR/my_key_log3 $KEYRING_PLUGIN_OPT --innodb_redo_log_encrypt=$redo_log_encrypt_mode; +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR $KEYRING_PLUGIN_OPT --plugin-dir=KEYRING_PLUGIN_PATH $KEYRING_PLUGIN keyring_file.so +--source include/restart_mysqld_no_echo.inc + +SELECT @@global.innodb_redo_log_encrypt; +SET GLOBAL innodb_redo_log_encrypt = 1; +SELECT @@global.innodb_redo_log_encrypt; + +CREATE TABLE tde_db.t1 (a BIGINT PRIMARY KEY, b LONGBLOB) ENGINE=InnoDB; +INSERT INTO t1 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t1; + +CREATE TABLE tde_db.t2 (a BIGINT PRIMARY KEY, b LONGBLOB) + ENCRYPTION='Y' ENGINE=InnoDB; +INSERT INTO t2 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t2; +SET GLOBAL innodb_redo_log_encrypt = 0; +SELECT @@global.innodb_redo_log_encrypt; + +CREATE TABLE tde_db.t3 (a BIGINT PRIMARY KEY, b LONGBLOB) ENGINE=InnoDB; +INSERT INTO t3 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t3; + +CREATE TABLE tde_db.t4 (a BIGINT PRIMARY KEY, b LONGBLOB) + ENCRYPTION='Y' ENGINE=InnoDB; +INSERT INTO t4 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t4; +FLUSH LOGS; + +let $restart_parameters = restart: --early-plugin-load="keyring_file=$KEYRING_PLUGIN" --loose-keyring_file_data=$MYSQL_TMP_DIR/my_key_log3 $KEYRING_PLUGIN_OPT --innodb_redo_log_encrypt=$redo_log_encrypt_mode; +let $restart_hide_args = 1 +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR $KEYRING_PLUGIN_OPT --plugin-dir=KEYRING_PLUGIN_PATH $KEYRING_PLUGIN keyring_file.so +--source include/kill_and_restart_mysqld.inc + +SELECT + PLUGIN_NAME, PLUGIN_STATUS, PLUGIN_TYPE +FROM INFORMATION_SCHEMA.PLUGINS + WHERE PLUGIN_NAME LIKE '%keyring_file%'; + +SELECT a,LEFT(b,10) FROM tde_db.t1; +SELECT a,LEFT(b,10) FROM tde_db.t2; +SELECT a,LEFT(b,10) FROM tde_db.t3; +SELECT a,LEFT(b,10) FROM tde_db.t4; + +DROP TABLE tde_db.t1,tde_db.t2,tde_db.t3,tde_db.t4; + +# innodb_redo_log_encrypt=ON/OFF with transaction +SELECT @@global.innodb_redo_log_encrypt; +CREATE TABLE tde_db.t1 (a BIGINT PRIMARY KEY, b LONGBLOB) ENGINE=InnoDB; +CREATE TABLE tde_db.t2 (a BIGINT PRIMARY KEY, b LONGBLOB) + ENCRYPTION='Y' ENGINE=InnoDB; + +START TRANSACTION; +SET GLOBAL innodb_redo_log_encrypt = 1; +INSERT INTO t1 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +INSERT INTO t2 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t1; +SELECT a,LEFT(b,10) FROM tde_db.t2; +ROLLBACK; + +START TRANSACTION; +INSERT INTO t1 (a, b) VALUES (2, REPEAT('a', 6*512*512)); +INSERT INTO t2 (a, b) VALUES (2, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t1; +SELECT a,LEFT(b,10) FROM tde_db.t2; +COMMIT; + +CREATE TABLE tde_db.t3 (a BIGINT PRIMARY KEY, b LONGBLOB) ENGINE=InnoDB; +CREATE TABLE tde_db.t4 (a BIGINT PRIMARY KEY, b LONGBLOB) + ENCRYPTION='Y' ENGINE=InnoDB; + +START TRANSACTION; +SET GLOBAL innodb_redo_log_encrypt = 0; +SELECT @@global.innodb_redo_log_encrypt; +INSERT INTO t3 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +INSERT INTO t4 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t3; +SELECT a,LEFT(b,10) FROM tde_db.t4; +ROLLBACK; + +START TRANSACTION; +INSERT INTO t3 (a, b) VALUES (2, REPEAT('a', 6*512*512)); +INSERT INTO t4 (a, b) VALUES (2, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t3; +SELECT a,LEFT(b,10) FROM tde_db.t4; +COMMIT; + +let $restart_hide_args = 1 +let $restart_parameters = restart: --early-plugin-load="keyring_file=$KEYRING_PLUGIN" --loose-keyring_file_data=$MYSQL_TMP_DIR/my_key_log3 $KEYRING_PLUGIN_OPT --innodb_redo_log_encrypt=$redo_log_encrypt_mode; +--source include/kill_and_restart_mysqld.inc + +SELECT + PLUGIN_NAME, PLUGIN_STATUS, PLUGIN_TYPE +FROM INFORMATION_SCHEMA.PLUGINS + WHERE PLUGIN_NAME LIKE '%keyring_file%'; + +SELECT a,LEFT(b,10) FROM tde_db.t1; +SELECT a,LEFT(b,10) FROM tde_db.t2; +SELECT a,LEFT(b,10) FROM tde_db.t3; +SELECT a,LEFT(b,10) FROM tde_db.t4; + +# Rotate master key when innodb_redo_log_encrypt=ON/OFF +SET GLOBAL innodb_redo_log_encrypt = 0; +SELECT @@global.innodb_redo_log_encrypt; +ALTER INSTANCE ROTATE INNODB MASTER KEY; +SELECT a,LEFT(b,10) FROM tde_db.t1; +SELECT a,LEFT(b,10) FROM tde_db.t2; +SELECT a,LEFT(b,10) FROM tde_db.t3; +SELECT a,LEFT(b,10) FROM tde_db.t4; + +eval SET GLOBAL innodb_redo_log_encrypt = $redo_log_encrypt_mode; +SELECT @@global.innodb_redo_log_encrypt; +ALTER INSTANCE ROTATE INNODB MASTER KEY; +SELECT a,LEFT(b,10) FROM tde_db.t1; +SELECT a,LEFT(b,10) FROM tde_db.t2; +SELECT a,LEFT(b,10) FROM tde_db.t3; +SELECT a,LEFT(b,10) FROM tde_db.t4; + +# Non-privileged user can not set innodb_redo_log_encrypt variable. +CREATE USER encryptnonprivuser@localhost IDENTIFIED BY 'noauth'; +GRANT SELECT ON *.* to encryptnonprivuser@localhost; +FLUSH PRIVILEGES; + +--echo # In connection 1 - with encryptnonprivuser +connect (con1,localhost,encryptnonprivuser,'noauth',); +SELECT @@global.innodb_redo_log_encrypt; +--error ER_SPECIFIC_ACCESS_DENIED_ERROR +SET GLOBAL innodb_redo_log_encrypt = 0; +SELECT @@global.innodb_redo_log_encrypt; +--error ER_SPECIFIC_ACCESS_DENIED_ERROR +eval SET GLOBAL innodb_redo_log_encrypt = $redo_log_encrypt_mode; +SELECT @@global.innodb_redo_log_encrypt; +disconnect con1; + +--echo # In connection default +connection default; +UNINSTALL PLUGIN keyring_file; +DROP TABLE tde_db.t1,tde_db.t2,tde_db.t3,tde_db.t4; + +# Cleanup +--disable_query_log +eval SET GLOBAL innodb_file_per_table=$old_innodb_file_per_table; +eval SET GLOBAL innodb_redo_log_encrypt=$old_innodb_redo_log_encrypt; +DROP DATABASE tde_db; +--enable_query_log diff --git a/mysql-test/include/log_encrypt_4.inc b/mysql-test/include/log_encrypt_4.inc new file mode 100644 index 000000000000..41bfd7b1a6cf --- /dev/null +++ b/mysql-test/include/log_encrypt_4.inc @@ -0,0 +1,144 @@ +# InnoDB transparent encryption on redo log. +# This test case will check innodb_redo_log_encrypt=ON/OFF with bootstrap +# and start server by setting innodb_redo_log_encrypt=ON/OFF + +--source include/no_valgrind_without_big.inc +--source include/have_innodb.inc +--source include/not_embedded.inc +--source include/have_innodb_max_16k.inc + +let $old_innodb_file_per_table = `SELECT @@innodb_file_per_table`; +let $old_innodb_redo_log_encrypt = `SELECT @@innodb_redo_log_encrypt`; +let $START_PAGE_SIZE= `select @@innodb_page_size`; +let $LOG_FILE_SIZE= `select @@innodb_log_file_size`; +let $MYSQLD_BASEDIR= `select @@basedir`; + +let MYSQLD_LOG=$MYSQL_TMP_DIR/server.log; +let extra_args=--no-defaults --console --log-syslog=0 --loose-skip-auto_generate_certs --loose-skip-sha256_password_auto_generate_rsa_keys --skip-ssl --basedir=$BASEDIR --lc-messages-dir=$MYSQL_SHAREDIR; + +--mkdir $MYSQL_TMP_DIR/log_encrypt_dir1_$redo_log_mode +--mkdir $MYSQL_TMP_DIR/log_encrypt_dir2_$redo_log_mode +--mkdir $MYSQL_TMP_DIR/log_encrypt_dir3_$redo_log_mode + +let $MYSQLD_DATADIR1 = $MYSQL_TMP_DIR/log_encrypt_dir1_$redo_log_mode; +let $MYSQLD_DATADIR2 = $MYSQL_TMP_DIR/log_encrypt_dir2_$redo_log_mode; +let $MYSQLD_DATADIR3 = $MYSQL_TMP_DIR/log_encrypt_dir3_$redo_log_mode; + +let BOOTSTRAP_SQL=$MYSQL_TMP_DIR/boot.sql; + +--echo # create bootstrap file +write_file $BOOTSTRAP_SQL; +CREATE DATABASE test; +EOF +--echo # Stop the MTR default DB server +--source include/shutdown_mysqld.inc + +let NEW_CMD = $MYSQLD $extra_args --initialize-insecure $KEYRING_PARAMS --innodb_log_file_size=$LOG_FILE_SIZE --innodb_page_size=$START_PAGE_SIZE --datadir=$MYSQLD_DATADIR1 --init-file=$BOOTSTRAP_SQL --secure-file-priv="" --innodb_redo_log_encrypt=$redo_log_mode --innodb_undo_tablespaces=2 >>$MYSQLD_LOG 2>&1; + +--echo # Run the bootstrap command of datadir1 +--exec $NEW_CMD +--sleep 5 + +--echo # Start the DB server with datadir1 +--replace_result $MYSQL_TMP_DIR TMP_DIR $KEYRING_PLUGIN_OPT --plugin-dir=KEYRING_PLUGIN_PATH $MYSQLD_DATADIR1 DATADIR1 $START_PAGE_SIZE PAGE_SIZE $LOG_FILE_SIZE LOG_FILE_SIZE +--let $restart_parameters="restart: $KEYRING_PARAMS --innodb_redo_log_encrypt=$redo_log_mode --innodb_undo_tablespaces=2 --datadir=$MYSQLD_DATADIR1 --innodb_page_size=$START_PAGE_SIZE --innodb_log_file_size=$LOG_FILE_SIZE" +--replace_regex /\.dll/.so/ +--source include/start_mysqld_no_echo.inc + + +SELECT @@global.innodb_redo_log_encrypt; + +USE test; +CREATE TABLE tab1(c1 INT, c2 VARCHAR(30)); +INSERT INTO tab1 VALUES(1, 'Test consistency undo*'); +SELECT * FROM tab1; +CREATE TABLE tab2(c1 INT, c2 VARCHAR(30)) ENCRYPTION="Y"; +INSERT INTO tab2 VALUES(1, 'Test consistency undo*'); +SELECT * FROM tab2; +DROP TABLE tab1,tab2; + +--let $restart_parameters= restart: +--source include/restart_mysqld.inc + +--force-rmdir $MYSQL_TMP_DIR/log_encrypt_dir1_$redo_log_mode +#------------------------------------------------------------------------------ + + +--echo # Stop the MTR default DB server +--source include/shutdown_mysqld.inc + +#bootstrap should fail if keyring plugin is not loaded along with +#innodb_redo_log_encrypt=ON +let NEW_CMD = $MYSQLD $extra_args --initialize-insecure --datadir=$MYSQLD_DATADIR2 --init-file=$BOOTSTRAP_SQL --secure-file-priv="" --innodb_redo_log_encrypt=$redo_log_mode >>$MYSQLD_LOG 2>&1; + +--echo # Run the bootstrap command of datadir2, it should fail since the keyring is not loaded. +--error 1,42 +--exec $NEW_CMD +--sleep 10 + +--force-rmdir $MYSQL_TMP_DIR/log_encrypt_dir2_$redo_log_mode + +let NEW_CMD = $MYSQLD $extra_args --initialize-insecure $KEYRING_PARAMS --innodb_log_file_size=$LOG_FILE_SIZE --innodb_page_size=$START_PAGE_SIZE --datadir=$MYSQLD_DATADIR2 --init-file=$BOOTSTRAP_SQL --secure-file-priv="" --innodb_redo_log_encrypt=$redo_log_mode --innodb_undo_tablespaces=2 >>$MYSQLD_LOG 2>&1; + +--echo # Run the bootstrap command of datadir2 +--exec $NEW_CMD +--sleep 10 + +--echo # Start the DB server with datadir2 +--replace_result $MYSQL_TMP_DIR TMP_DIR $KEYRING_PLUGIN_OPT --plugin-dir=KEYRING_PLUGIN_PATH $MYSQLD_DATADIR2 DATADIR2 $START_PAGE_SIZE PAGE_SIZE $LOG_FILE_SIZE LOG_FILE_SIZE +--let $restart_parameters="restart: $KEYRING_PARAMS --innodb_redo_log_encrypt=$redo_log_mode --innodb_undo_tablespaces=2 --datadir=$MYSQLD_DATADIR2 --innodb_page_size=$START_PAGE_SIZE --innodb_log_file_size=$LOG_FILE_SIZE" +--replace_regex /\.dll/.so/ +--source include/start_mysqld_no_echo.inc + +SELECT @@global.innodb_redo_log_encrypt; + +USE test; +CREATE TABLE tab1(c1 INT, c2 VARCHAR(30)); +INSERT INTO tab1 VALUES(1, 'Test consistency undo*'); +SELECT * FROM tab1; +CREATE TABLE tab2(c1 INT, c2 VARCHAR(30)) ENCRYPTION="Y"; +INSERT INTO tab2 VALUES(1, 'Test consistency undo*'); +SELECT * FROM tab2; +DROP TABLE tab1,tab2; + +--let $restart_parameters= restart: +--source include/restart_mysqld.inc + +--force-rmdir $MYSQL_TMP_DIR/log_encrypt_dir2_$redo_log_mode + +#------------------------------------------------------------------------------ +--echo # Stop the MTR default DB server +--source include/shutdown_mysqld.inc + +let NEW_CMD = $MYSQLD $extra_args --initialize-insecure --innodb_log_file_size=$LOG_FILE_SIZE --innodb_page_size=$START_PAGE_SIZE --datadir=$MYSQLD_DATADIR3 --init-file=$BOOTSTRAP_SQL --secure-file-priv="" --innodb_redo_log_encrypt=$redo_log_mode --innodb_undo_tablespaces=2 $KEYRING_PARAMS >>$MYSQLD_LOG 2>&1; + +--echo # Run the bootstrap command of datadir3 +--exec $NEW_CMD +--sleep 10 + +--echo # Start the DB server with datadir3 and keyring loaded. +--replace_result $MYSQL_TMP_DIR TMP_DIR $KEYRING_PLUGIN_OPT --plugin-dir=KEYRING_PLUGIN_PATH $MYSQLD_DATADIR3 DATADIR3 $START_PAGE_SIZE PAGE_SIZE $LOG_FILE_SIZE LOG_FILE_SIZE +--let $restart_parameters="restart: $KEYRING_PARAMS --innodb_undo_tablespaces=2 --datadir=$MYSQLD_DATADIR3 --innodb_page_size=$START_PAGE_SIZE --innodb_log_file_size=$LOG_FILE_SIZE" +--replace_regex /\.dll/.so/ +--source include/start_mysqld_no_echo.inc + +SELECT @@global.innodb_redo_log_encrypt; + +USE test; +CREATE TABLE tab1(c1 INT, c2 VARCHAR(30)); +INSERT INTO tab1 VALUES(1, 'Test consistency undo*'); +SELECT * FROM tab1; +CREATE TABLE tab2(c1 INT, c2 VARCHAR(30)) ENCRYPTION="Y"; +DROP TABLE tab1; + +--let $restart_parameters= restart: +--source include/restart_mysqld.inc + +--force-rmdir $MYSQL_TMP_DIR/log_encrypt_dir3_$redo_log_mode +--remove_file $BOOTSTRAP_SQL + +#cleanup +--disable_query_log +eval SET GLOBAL innodb_file_per_table=$old_innodb_file_per_table; +eval SET GLOBAL innodb_redo_log_encrypt=$old_innodb_redo_log_encrypt; +--enable_query_log diff --git a/mysql-test/include/log_encrypt_5.inc b/mysql-test/include/log_encrypt_5.inc new file mode 100644 index 000000000000..5086302d9c1e --- /dev/null +++ b/mysql-test/include/log_encrypt_5.inc @@ -0,0 +1,127 @@ +# InnoDB transparent encryption on redo log. +# This test case will test basic encryption support features. + +--source include/no_valgrind_without_big.inc +--source include/have_innodb.inc +--source include/not_embedded.inc +--source include/not_windows.inc + +--disable_query_log +call mtr.add_suppression("keyring_file initialization failure. Please check if the keyring_file_data points to readable keyring file or keyring file can be created in the specified location. The keyring_file will stay unusable until correct path to the keyring file gets provided"); +call mtr.add_suppression("Error while loading keyring content. The keyring might be malformed"); +call mtr.add_suppression("\\[Error\\] InnoDB: Encryption can't find master key, please check the keyring plugin is loaded."); +call mtr.add_suppression("\\[ERROR\\] InnoDB: Failed to find tablespace for table `\.\.*`\.`\.\.*` in the cache."); +call mtr.add_suppression("ibd can't be decrypted , please confirm the keyfile is match and keyring plugin is loaded."); +call mtr.add_suppression("\\[Warning\\] InnoDB: Ignoring tablespace .* because it could not be opened"); +call mtr.add_suppression("\\[ERROR\\] InnoDB: Can't set redo log tablespace to be encrypted."); +call mtr.add_suppression("InnoDB: Resizing redo log from"); +call mtr.add_suppression("InnoDB: Starting to delete and rewrite log files."); +call mtr.add_suppression("InnoDB: New log files created, LSN="); +call mtr.add_suppression("Plugin keyring_file reported: 'File"); +--enable_query_log + +let $old_innodb_file_per_table = `SELECT @@innodb_file_per_table`; +let $old_innodb_redo_log_encrypt = `SELECT @@innodb_redo_log_encrypt`; +let $START_PAGE_SIZE= `select @@innodb_page_size`; +let $LOG_FILE_SIZE= `select @@innodb_log_file_size`; + +let MYSQLD_DATADIR =`SELECT @@datadir`; +let $MYSQLD_BASEDIR= `select @@basedir`; +--mkdir $MYSQL_TMP_DIR/log_encrypt_dir1 +--mkdir $MYSQL_TMP_DIR/innodb_undo_data_dir +let $MYSQLD_DATADIR1 = $MYSQL_TMP_DIR/log_encrypt_dir1; +# Set path for undo* files. +let $MYSQLD_UNDO_DATADIR = $MYSQL_TMP_DIR/innodb_undo_data_dir; + +let BOOTSTRAP_SQL=$MYSQL_TMP_DIR/boot.sql; + +--echo # create bootstrap file +write_file $BOOTSTRAP_SQL; +CREATE DATABASE test; +EOF +--echo # Stop the MTR default DB server +--source include/shutdown_mysqld.inc +let NEW_CMD = $MYSQLD --no-defaults --initialize-insecure --innodb_log_file_size=$LOG_FILE_SIZE --innodb_page_size=$START_PAGE_SIZE --basedir=$MYSQLD_BASEDIR --datadir=$MYSQLD_DATADIR1 --init-file=$BOOTSTRAP_SQL --innodb_undo_directory=$MYSQLD_UNDO_DATADIR --innodb_undo_tablespaces=2 --secure-file-priv="" >$MYSQLTEST_VARDIR/tmp/bootstrap1.log 2>&1; + +--echo # Run the bootstrap command of datadir1 +--exec $NEW_CMD + +--let $restart_parameters= restart: --innodb_log_file_size=$LOG_FILE_SIZE --innodb_page_size=$START_PAGE_SIZE --datadir=$MYSQLD_DATADIR1 --innodb_undo_directory=$MYSQLD_UNDO_DATADIR --innodb_undo_tablespaces=2 $KEYRING_PLUGIN_OPT +--replace_regex /\.dll/.so/ +--source include/start_mysqld_no_echo.inc + +CREATE DATABASE tde_db; +USE tde_db; + +# Install Plugin : Start server without --early-plugin-load. +# Explicitly run , INSTALL PLUGIN keyring_file SONAME 'keyring_file.so'; +# and Set innodb_redo_log_encrypt = MASTER_KEY/ROTATED_KEY/OFF +# Expected result : Plugin should install without any error and it's should +# show in SHOW PLUGINS; Redo file encryption is enabled/disable for redo log. +--replace_regex /\.dll/.so/ +--disable_warnings +eval INSTALL PLUGIN keyring_file SONAME '$KEYRING_PLUGIN'; +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR +--enable_warnings +eval SET @@global.keyring_file_data= '$MYSQL_TMP_DIR/my_key_log3'; +SELECT + PLUGIN_NAME, PLUGIN_STATUS, PLUGIN_TYPE +FROM INFORMATION_SCHEMA.PLUGINS + WHERE PLUGIN_NAME LIKE '%keyring_file%' ; +eval SET GLOBAL innodb_redo_log_encrypt = $redo_log_encrypt_mode; +SELECT @@global.innodb_redo_log_encrypt ; +CREATE TABLE tde_db.t1 (a BIGINT PRIMARY KEY, b LONGBLOB) ENGINE=InnoDB; +INSERT INTO t1 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t1; +CREATE TABLE tde_db.t2 (a BIGINT PRIMARY KEY, b LONGBLOB) + ENCRYPTION='Y' ENGINE=InnoDB; +INSERT INTO t2 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t2; +SET GLOBAL innodb_redo_log_encrypt = 0; +SELECT @@global.innodb_redo_log_encrypt ; +CREATE TABLE tde_db.t3 (a BIGINT PRIMARY KEY, b LONGBLOB) ENGINE=InnoDB; +INSERT INTO t3 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t3; +CREATE TABLE tde_db.t4 (a BIGINT PRIMARY KEY, b LONGBLOB) + ENCRYPTION='Y' ENGINE=InnoDB; +INSERT INTO t4 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t4; + +eval SET GLOBAL innodb_redo_log_encrypt = $redo_log_encrypt_mode; +SELECT @@global.innodb_redo_log_encrypt ; +CREATE TABLE tde_db.t5 (a BIGINT PRIMARY KEY, b LONGBLOB) ENGINE=InnoDB; +INSERT INTO t5 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t5; +CREATE TABLE tde_db.t6 (a BIGINT PRIMARY KEY, b LONGBLOB) + ENCRYPTION='Y' ENGINE=InnoDB; +INSERT INTO t6 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t6; +START TRANSACTION; +INSERT INTO t5 (a, b) VALUES (2, REPEAT('a', 6*512*512)); +INSERT INTO t6 (a, b) VALUES (2, REPEAT('a', 6*512*512)); +COMMIT; +START TRANSACTION; +INSERT INTO t5 (a, b) VALUES (3, REPEAT('a', 6*512*512)); +INSERT INTO t6 (a, b) VALUES (3, REPEAT('a', 6*512*512)); +ROLLBACK; +SELECT a,LEFT(b,10) FROM tde_db.t5; +SELECT a,LEFT(b,10) FROM tde_db.t6; + +UNINSTALL PLUGIN keyring_file; + +DROP TABLE tde_db.t1,tde_db.t2,tde_db.t3,tde_db.t4,tde_db.t5,tde_db.t6; +DROP DATABASE tde_db; +--let $restart_parameters= restart: +--replace_regex /\.dll/.so/ +--source include/restart_mysqld_no_echo.inc + +# Cleanup + +--force-rmdir $MYSQL_TMP_DIR/log_encrypt_dir1 +--force-rmdir $MYSQL_TMP_DIR/innodb_undo_data_dir +--remove_file $MYSQLTEST_VARDIR/tmp/bootstrap1.log +--remove_file $BOOTSTRAP_SQL +--disable_query_log +eval SET GLOBAL innodb_file_per_table=$old_innodb_file_per_table; +eval SET GLOBAL innodb_redo_log_encrypt=$old_innodb_redo_log_encrypt; +--enable_query_log diff --git a/mysql-test/include/log_encrypt_6.inc b/mysql-test/include/log_encrypt_6.inc new file mode 100644 index 000000000000..8c053ee2cd84 --- /dev/null +++ b/mysql-test/include/log_encrypt_6.inc @@ -0,0 +1,136 @@ +# Test tries restart after redo log encryption is enabled +# - Error :restart without keyring plugin +# - Pass :restart without keyring plugin and --innodb_force_recovery=6 +# - Pass :remove redo files,restart without keyring plugin + +--source include/no_valgrind_without_big.inc +--source include/have_innodb.inc +--source include/not_embedded.inc + +--disable_query_log +call mtr.add_suppression("keyring_file initialization failure. Please check if the keyring_file_data points to readable keyring file or keyring file can be created in the specified location. The keyring_file will stay unusable until correct path to the keyring file gets provided"); +call mtr.add_suppression("Error while loading keyring content. The keyring might be malformed"); +call mtr.add_suppression("\\[Error\\] InnoDB: Encryption can't find masterkey, please check the keyring plugin is loaded."); +call mtr.add_suppression("\\[ERROR\\] InnoDB: Failed to find tablespace for table `\.\.*`\.`\.\.*` in the cache."); +call mtr.add_suppression("\\[ERROR\\] InnoDB: If you are installing InnoDB, remember that you must create directories yourself, InnoDB does not create them."); +call mtr.add_suppression ("InnoDB: New log files created"); +--enable_query_log + +let $old_innodb_file_per_table = `SELECT @@innodb_file_per_table`; +let $old_innodb_redo_log_encrypt = `SELECT @@innodb_redo_log_encrypt`; +let $START_PAGE_SIZE= `select @@innodb_page_size`; +let $LOG_FILE_SIZE= `select @@innodb_log_file_size`; +let $MYSQLD_BASEDIR= `select @@basedir`; + +--mkdir $MYSQL_TMP_DIR/log_encrypt_dir1_$redo_log_mode + +let $MYSQLD_DATADIR1 = $MYSQL_TMP_DIR/log_encrypt_dir1_$redo_log_mode; + +let BOOTSTRAP_SQL=$MYSQL_TMP_DIR/boot.sql; + +--echo # create bootstrap file +write_file $BOOTSTRAP_SQL; +CREATE DATABASE test; +EOF +--echo # Stop the MTR default DB server +--source include/shutdown_mysqld.inc + +let NEW_CMD = $MYSQLD --no-defaults --initialize-insecure --innodb_log_file_size=$LOG_FILE_SIZE --innodb_page_size=$START_PAGE_SIZE --basedir=$MYSQLD_BASEDIR --datadir=$MYSQLD_DATADIR1 --init-file=$BOOTSTRAP_SQL --secure-file-priv="" --innodb_redo_log_encrypt=$redo_log_encrypt_mode --innodb_undo_tablespaces=2 --early-plugin-load="keyring_file=$KEYRING_PLUGIN" --keyring_file_data=$MYSQL_TMP_DIR/my_key_redo4 $KEYRING_PLUGIN_OPT >$MYSQLTEST_VARDIR/tmp/bootstrap1.log 2>&1; + +--echo # Run the bootstrap command of datadir1 +--exec $NEW_CMD + +--echo # Start the DB server with datadir1 +--replace_result $MYSQL_TMP_DIR TMP_DIR $KEYRING_PLUGIN_OPT --plugin-dir=KEYRING_PLUGIN_PATH $MYSQLD_DATADIR1 DATADIR1 $START_PAGE_SIZE PAGE_SIZE $LOG_FILE_SIZE LOG_FILE_SIZE +--let $restart_parameters="restart: --early-plugin-load="keyring_file=$KEYRING_PLUGIN" $KEYRING_PLUGIN_OPT --keyring_file_data=$MYSQL_TMP_DIR/my_key_redo4 --innodb_redo_log_encrypt=$redo_log_encrypt_mode --innodb_undo_tablespaces=2 --datadir=$MYSQLD_DATADIR1 --innodb_page_size=$START_PAGE_SIZE --innodb_log_file_size=$LOG_FILE_SIZE" +--replace_regex /\.dll/.so/ +--source include/start_mysqld_no_echo.inc + +CREATE DATABASE tde_db; +USE tde_db; + +eval SET GLOBAL innodb_redo_log_encrypt = $redo_log_encrypt_mode; +SELECT @@global.innodb_redo_log_encrypt ; + +SELECT @@global.innodb_redo_log_encrypt ; +CREATE TABLE tde_db.t1 (a BIGINT PRIMARY KEY, b LONGBLOB) ENGINE=InnoDB; +INSERT INTO t1 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t1; +CREATE TABLE tde_db.t2 (a BIGINT PRIMARY KEY, b LONGBLOB) + ENCRYPTION='Y' ENGINE=InnoDB; +INSERT INTO t2 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t2; +SELECT @@global.innodb_redo_log_encrypt ; +CREATE TABLE tde_db.t3 (a BIGINT PRIMARY KEY, b LONGBLOB) ENGINE=InnoDB; +INSERT INTO t3 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t3; +CREATE TABLE tde_db.t4 (a BIGINT PRIMARY KEY, b LONGBLOB) + ENCRYPTION='Y' ENGINE=InnoDB; +INSERT INTO t4 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t4; + +SELECT @@global.innodb_redo_log_encrypt ; +CREATE TABLE tde_db.t5 (a BIGINT PRIMARY KEY, b LONGBLOB) ENGINE=InnoDB; +INSERT INTO t5 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t5; +CREATE TABLE tde_db.t6 (a BIGINT PRIMARY KEY, b LONGBLOB) + ENCRYPTION='Y' ENGINE=InnoDB; +INSERT INTO t6 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t6; + +UNINSTALL PLUGIN keyring_file; +DROP DATABASE tde_db; + +# shutdown server +--let $_server_id= `SELECT @@server_id` +--source include/shutdown_mysqld.inc + +--echo # Try starting without keyring : Error +let NEW_CMD = $MYSQLD --no-defaults --innodb_undo_tablespaces=2 --innodb_page_size=$START_PAGE_SIZE --innodb_log_file_size=$LOG_FILE_SIZE --basedir=$MYSQLD_BASEDIR --datadir=$MYSQLD_DATADIR1 --secure-file-priv="" --console >$MYSQL_TMP_DIR/wl9290.err 2>&1; +--error 1,42 +--exec $NEW_CMD + +--echo # Search for error message +let SEARCH_FILE= $MYSQL_TMP_DIR/wl9290.err; +let SEARCH_PATTERN= InnoDB: Redo log was encrypted, but keyring plugin is not loaded; +--source include/search_pattern.inc +let SEARCH_PATTERN= Aborting; +--source include/search_pattern.inc + +--echo # Restart without keyring plugin possible if redo files removed +--remove_file $MYSQLD_DATADIR1/ib_logfile0 +--remove_file $MYSQLD_DATADIR1/ib_logfile1 + +--echo # Start the DB server with datadir1 +--replace_result $MYSQL_TMP_DIR TMP_DIR $KEYRING_PLUGIN_OPT --plugin-dir=KEYRING_PLUGIN_PATH $MYSQLD_DATADIR1 DATADIR1 $START_PAGE_SIZE PAGE_SIZE $LOG_FILE_SIZE LOG_FILE_SIZE +--let $restart_parameters="restart: --innodb_undo_tablespaces=2 --datadir=$MYSQLD_DATADIR1 --innodb_page_size=$START_PAGE_SIZE --innodb_log_file_size=$LOG_FILE_SIZE" +--replace_regex /\.dll/.so/ +--source include/start_mysqld_no_echo.inc + +# shutdown server +--let $_server_id= `SELECT @@server_id` +--source include/shutdown_mysqld.inc + +--echo # Try starting without keyring and --innodb_force_recovery=SRV_FORCE_NO_LOG_REDO. +--echo # Start the DB server with datadir1 +--replace_result $MYSQL_TMP_DIR TMP_DIR $KEYRING_PLUGIN_OPT --plugin-dir=KEYRING_PLUGIN_PATH $MYSQLD_DATADIR1 DATADIR1 $START_PAGE_SIZE PAGE_SIZE $LOG_FILE_SIZE LOG_FILE_SIZE +--let $restart_parameters="restart: --innodb_undo_tablespaces=2 --datadir=$MYSQLD_DATADIR1 --innodb_page_size=$START_PAGE_SIZE --innodb_log_file_size=$LOG_FILE_SIZE --innodb_force_recovery=6 --no-console --log-error=$MYSQL_TMP_DIR/wl9290_2.err" +--replace_regex /\.dll/.so/ +--source include/start_mysqld_no_echo.inc +SELECT 1; + +# shutdown server +--let $_server_id= `SELECT @@server_id` +--source include/shutdown_mysqld.inc + +# restart the server with MTR default +--let $restart_parameters= +--source include/start_mysqld.inc + +--remove_file $BOOTSTRAP_SQL +--remove_file $MYSQL_TMP_DIR/my_key_redo4 +--remove_file $MYSQL_TMP_DIR/wl9290.err +--remove_file $MYSQL_TMP_DIR/wl9290_2.err + +# Remove residue files +--force-rmdir $MYSQLD_DATADIR1 diff --git a/mysql-test/include/restart_mysqld_no_echo.inc b/mysql-test/include/restart_mysqld_no_echo.inc new file mode 100644 index 000000000000..674f9c9f384f --- /dev/null +++ b/mysql-test/include/restart_mysqld_no_echo.inc @@ -0,0 +1,46 @@ + +if ($rpl_inited) +{ + if (!$allow_rpl_inited) + { + --die ERROR IN TEST: When using the replication test framework (master-slave.inc, rpl_init.inc etc), use rpl_restart_server.inc instead of restart_mysqld.inc. If you know what you are doing and you really have to use restart_mysqld.inc, set allow_rpl_inited=1 before you source restart_mysqld.inc + } +} + +if (!$restart_parameters) +{ + let $restart_parameters = restart; +} + +# Write file to make mysql-test-run.pl expect the "crash", but don't start +# it until it's told to +--let $_server_id= `SELECT @@server_id` +--let $_expect_file_name= $MYSQLTEST_VARDIR/tmp/mysqld.$_server_id.expect + +# Allow restarting different server than the one currently +# connected to, actually one where suffix is not .serverid but +# .serverid.clusterid +if ($mysqld_name) +{ + let $_expect_file_name= $MYSQLTEST_VARDIR/tmp/$mysqld_name.expect; + # echo expect_file_name: $_expect_file_name; +} +--exec echo "wait" > $_expect_file_name + +# Send shutdown to the connected server. +shutdown_server; + +--source include/wait_until_disconnected.inc + +# Write file to make mysql-test-run.pl start up the server again +--exec echo "$restart_parameters" > $_expect_file_name + +# Turn on reconnect +--enable_reconnect + +# Call script that will poll the server waiting for it to be back online again +--source include/wait_until_connected_again.inc + +# Turn off reconnect again +--disable_reconnect + diff --git a/mysql-test/include/start_mysqld_no_echo.inc b/mysql-test/include/start_mysqld_no_echo.inc new file mode 100644 index 000000000000..116cf28a773b --- /dev/null +++ b/mysql-test/include/start_mysqld_no_echo.inc @@ -0,0 +1,20 @@ +if (!$restart_parameters) +{ + let $restart_parameters = restart; +} + +# Include this script only after using shutdown_mysqld.inc +# or kill_mysqld.inc or expect_crash.inc +# where $_expect_file_name was initialized. +# Write file to make mysql-test-run.pl start up the server again +--exec echo "$restart_parameters" > $_expect_file_name + +# Turn on reconnect +--enable_reconnect + +# Call script that will poll the server waiting for it to be back online again +--source include/wait_until_connected_again.inc + +# Turn off reconnect again +--disable_reconnect + diff --git a/mysql-test/suite/binlog_encryption/r/percona_system_key_rotation.result b/mysql-test/suite/binlog_encryption/r/percona_system_key_rotation.result index 700c38c179b4..c1751de887a5 100644 --- a/mysql-test/suite/binlog_encryption/r/percona_system_key_rotation.result +++ b/mysql-test/suite/binlog_encryption/r/percona_system_key_rotation.result @@ -1,15 +1,18 @@ -# Check that only percona_binlog key can be rotated with rotate_system_key. This part of the test needs updating +# Check that only percona_binlog and percona_redo key can be rotated +# with rotate_system_key. This part of the test needs updating # each time a new system key is added. include/assert.inc [It should not be possible to rotate key percona_binlog:] +include/assert.inc [It should not be possible to rotate key percona_redo:] include/assert.inc [It should not be possible to rotate key percona_key] include/assert.inc [It should not be possible to rotate key percona_123] include/assert.inc [It should not be possible to rotate key percona_bin] +include/assert.inc [It should not be possible to rotate key percona_red] include/assert.inc [It should not be possible to rotate key percona_b] include/assert.inc [It should not be possible to rotate key percona_] include/assert.inc [It should not be possible to rotate key percona] include/assert.inc [It should not be possible to rotate key system_key] include/assert.inc [It should not be possible to rotate key system_key] -include/assert.inc [It should not be possible to rotate key system_key] +include/assert.inc [It should not be possible to rotate key 123] UNINSTALL PLUGIN keyring_file; include/assert.inc [It should not be possible to rotate key percona_binlog without keyring_file installed] # restart: diff --git a/mysql-test/suite/binlog_encryption/t/percona_system_key_rotation.test b/mysql-test/suite/binlog_encryption/t/percona_system_key_rotation.test index c6009fc675f3..069d51fb185a 100644 --- a/mysql-test/suite/binlog_encryption/t/percona_system_key_rotation.test +++ b/mysql-test/suite/binlog_encryption/t/percona_system_key_rotation.test @@ -1,10 +1,15 @@ ---echo # Check that only percona_binlog key can be rotated with rotate_system_key. This part of the test needs updating +--echo # Check that only percona_binlog and percona_redo key can be rotated +--echo # with rotate_system_key. This part of the test needs updating --echo # each time a new system key is added. --let $assert_text= It should not be possible to rotate key percona_binlog: --let $assert_cond= "[SELECT rotate_system_key\\(\\"percona_binlog:\\"\\) = 0]" = 1 --source include/assert.inc +--let $assert_text= It should not be possible to rotate key percona_redo: +--let $assert_cond= "[SELECT rotate_system_key\\(\\"percona_redo:\\"\\) = 0]" = 1 +--source include/assert.inc + --let $assert_text= It should not be possible to rotate key percona_key --let $assert_cond= "[SELECT rotate_system_key\\(\\"percona_key\\"\\) = 0]" = 1 --source include/assert.inc @@ -17,6 +22,10 @@ --let $assert_cond= "[SELECT rotate_system_key\\(\\"percona_bin\\"\\) = 0]" = 1 --source include/assert.inc +--let $assert_text= It should not be possible to rotate key percona_red +--let $assert_cond= "[SELECT rotate_system_key\\(\\"percona_red\\"\\) = 0]" = 1 +--source include/assert.inc + --let $assert_text= It should not be possible to rotate key percona_b --let $assert_cond= "[SELECT rotate_system_key\\(\\"percona_b\\"\\) = 0]" = 1 --source include/assert.inc @@ -37,7 +46,7 @@ --let $assert_cond= "[SELECT rotate_system_key\\(\\"system_key\\"\\) = 0]" = 1 --source include/assert.inc ---let $assert_text= It should not be possible to rotate key system_key +--let $assert_text= It should not be possible to rotate key 123 --let $assert_cond= "[SELECT rotate_system_key\\(\\"123\\"\\) = 0]" = 1 --source include/assert.inc diff --git a/mysql-test/suite/innodb/r/log_encrypt_1_mk.result b/mysql-test/suite/innodb/r/log_encrypt_1_mk.result new file mode 100644 index 000000000000..f76b0376be04 --- /dev/null +++ b/mysql-test/suite/innodb/r/log_encrypt_1_mk.result @@ -0,0 +1,115 @@ +call mtr.add_suppression("\\[Error\\] InnoDB: Encryption can't find master key, please check the keyring plugin is loaded."); +SET GLOBAL innodb_redo_log_encrypt = MASTER_KEY; +CREATE TABLE t1(c1 INT, c2 char(20)) ENCRYPTION="Y" ENGINE = InnoDB; +ERROR HY000: Can't find master key from keyring, please check in the server log if a keyring plugin is loaded and initialized successfully. +CREATE TABLE t1(c1 INT, c2 char(20)) ENGINE = InnoDB; +ALTER TABLE t1 ENCRYPTION="Y", algorithm=copy; +ERROR HY000: Can't find master key from keyring, please check in the server log if a keyring plugin is loaded and initialized successfully. +SET GLOBAL innodb_redo_log_encrypt = MASTER_KEY; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) DEFAULT NULL, + `c2` char(20) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +INSERT INTO t1 VALUES(0, "aaaaa"); +INSERT INTO t1 VALUES(1, "bbbbb"); +INSERT INTO t1 VALUES(2, "ccccc"); +INSERT INTO t1 VALUES(3, "ddddd"); +INSERT INTO t1 VALUES(4, "eeeee"); +INSERT INTO t1 VALUES(5, "fffff"); +INSERT INTO t1 VALUES(6, "ggggg"); +INSERT INTO t1 VALUES(7, "hhhhh"); +INSERT INTO t1 VALUES(8, "iiiii"); +INSERT INTO t1 VALUES(9, "jjjjj"); +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +SELECT * FROM t1 ORDER BY c1 LIMIT 10; +c1 c2 +0 aaaaa +0 aaaaa +0 aaaaa +0 aaaaa +0 aaaaa +0 aaaaa +0 aaaaa +0 aaaaa +0 aaaaa +0 aaaaa +SELECT * FROM t1 ORDER BY c1 LIMIT 10; +c1 c2 +0 aaaaa +0 aaaaa +0 aaaaa +0 aaaaa +0 aaaaa +0 aaaaa +0 aaaaa +0 aaaaa +0 aaaaa +0 aaaaa +DROP TABLE t1; +CREATE TABLE t1(c1 INT, c2 char(20)) ENGINE = InnoDB; +INSERT INTO t1 VALUES(0, "aaaaa"); +INSERT INTO t1 VALUES(1, "bbbbb"); +INSERT INTO t1 VALUES(2, "ccccc"); +INSERT INTO t1 VALUES(3, "ddddd"); +INSERT INTO t1 VALUES(4, "eeeee"); +INSERT INTO t1 VALUES(5, "fffff"); +INSERT INTO t1 VALUES(6, "ggggg"); +INSERT INTO t1 VALUES(7, "hhhhh"); +INSERT INTO t1 VALUES(8, "iiiii"); +INSERT INTO t1 VALUES(9, "jjjjj"); +SELECT * FROM t1 ORDER BY c1 LIMIT 10; +c1 c2 +0 aaaaa +1 bbbbb +2 ccccc +3 ddddd +4 eeeee +5 fffff +6 ggggg +7 hhhhh +8 iiiii +9 jjjjj +DELETE FROM t1; +START TRANSACTION; +INSERT INTO t1 VALUES(0, "aaaaa"); +INSERT INTO t1 VALUES(1, "bbbbb"); +INSERT INTO t1 VALUES(2, "ccccc"); +INSERT INTO t1 VALUES(3, "ddddd"); +INSERT INTO t1 VALUES(4, "eeeee"); +INSERT INTO t1 VALUES(5, "fffff"); +INSERT INTO t1 VALUES(6, "ggggg"); +INSERT INTO t1 VALUES(7, "hhhhh"); +INSERT INTO t1 VALUES(8, "iiiii"); +INSERT INTO t1 VALUES(9, "jjjjj"); +SELECT * FROM t1 ORDER BY c1 LIMIT 10; +c1 c2 +INSERT INTO t1 VALUES(0, "aaaaa"); +INSERT INTO t1 VALUES(1, "bbbbb"); +INSERT INTO t1 VALUES(2, "ccccc"); +INSERT INTO t1 VALUES(3, "ddddd"); +INSERT INTO t1 VALUES(4, "eeeee"); +INSERT INTO t1 VALUES(5, "fffff"); +INSERT INTO t1 VALUES(6, "ggggg"); +INSERT INTO t1 VALUES(7, "hhhhh"); +INSERT INTO t1 VALUES(8, "iiiii"); +INSERT INTO t1 VALUES(9, "jjjjj"); +SELECT * FROM t1 ORDER BY c1 LIMIT 10; +c1 c2 +0 aaaaa +1 bbbbb +2 ccccc +3 ddddd +4 eeeee +5 fffff +6 ggggg +7 hhhhh +8 iiiii +9 jjjjj +DROP TABLE t1; diff --git a/mysql-test/suite/innodb/r/log_encrypt_1_rk.result b/mysql-test/suite/innodb/r/log_encrypt_1_rk.result new file mode 100644 index 000000000000..8df6f7349e13 --- /dev/null +++ b/mysql-test/suite/innodb/r/log_encrypt_1_rk.result @@ -0,0 +1,115 @@ +call mtr.add_suppression("\\[Error\\] InnoDB: Encryption can't find master key, please check the keyring plugin is loaded."); +SET GLOBAL innodb_redo_log_encrypt = KEYRING_KEY; +CREATE TABLE t1(c1 INT, c2 char(20)) ENCRYPTION="Y" ENGINE = InnoDB; +ERROR HY000: Can't find master key from keyring, please check in the server log if a keyring plugin is loaded and initialized successfully. +CREATE TABLE t1(c1 INT, c2 char(20)) ENGINE = InnoDB; +ALTER TABLE t1 ENCRYPTION="Y", algorithm=copy; +ERROR HY000: Can't find master key from keyring, please check in the server log if a keyring plugin is loaded and initialized successfully. +SET GLOBAL innodb_redo_log_encrypt = KEYRING_KEY; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) DEFAULT NULL, + `c2` char(20) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +INSERT INTO t1 VALUES(0, "aaaaa"); +INSERT INTO t1 VALUES(1, "bbbbb"); +INSERT INTO t1 VALUES(2, "ccccc"); +INSERT INTO t1 VALUES(3, "ddddd"); +INSERT INTO t1 VALUES(4, "eeeee"); +INSERT INTO t1 VALUES(5, "fffff"); +INSERT INTO t1 VALUES(6, "ggggg"); +INSERT INTO t1 VALUES(7, "hhhhh"); +INSERT INTO t1 VALUES(8, "iiiii"); +INSERT INTO t1 VALUES(9, "jjjjj"); +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +SELECT * FROM t1 ORDER BY c1 LIMIT 10; +c1 c2 +0 aaaaa +0 aaaaa +0 aaaaa +0 aaaaa +0 aaaaa +0 aaaaa +0 aaaaa +0 aaaaa +0 aaaaa +0 aaaaa +SELECT * FROM t1 ORDER BY c1 LIMIT 10; +c1 c2 +0 aaaaa +0 aaaaa +0 aaaaa +0 aaaaa +0 aaaaa +0 aaaaa +0 aaaaa +0 aaaaa +0 aaaaa +0 aaaaa +DROP TABLE t1; +CREATE TABLE t1(c1 INT, c2 char(20)) ENGINE = InnoDB; +INSERT INTO t1 VALUES(0, "aaaaa"); +INSERT INTO t1 VALUES(1, "bbbbb"); +INSERT INTO t1 VALUES(2, "ccccc"); +INSERT INTO t1 VALUES(3, "ddddd"); +INSERT INTO t1 VALUES(4, "eeeee"); +INSERT INTO t1 VALUES(5, "fffff"); +INSERT INTO t1 VALUES(6, "ggggg"); +INSERT INTO t1 VALUES(7, "hhhhh"); +INSERT INTO t1 VALUES(8, "iiiii"); +INSERT INTO t1 VALUES(9, "jjjjj"); +SELECT * FROM t1 ORDER BY c1 LIMIT 10; +c1 c2 +0 aaaaa +1 bbbbb +2 ccccc +3 ddddd +4 eeeee +5 fffff +6 ggggg +7 hhhhh +8 iiiii +9 jjjjj +DELETE FROM t1; +START TRANSACTION; +INSERT INTO t1 VALUES(0, "aaaaa"); +INSERT INTO t1 VALUES(1, "bbbbb"); +INSERT INTO t1 VALUES(2, "ccccc"); +INSERT INTO t1 VALUES(3, "ddddd"); +INSERT INTO t1 VALUES(4, "eeeee"); +INSERT INTO t1 VALUES(5, "fffff"); +INSERT INTO t1 VALUES(6, "ggggg"); +INSERT INTO t1 VALUES(7, "hhhhh"); +INSERT INTO t1 VALUES(8, "iiiii"); +INSERT INTO t1 VALUES(9, "jjjjj"); +SELECT * FROM t1 ORDER BY c1 LIMIT 10; +c1 c2 +INSERT INTO t1 VALUES(0, "aaaaa"); +INSERT INTO t1 VALUES(1, "bbbbb"); +INSERT INTO t1 VALUES(2, "ccccc"); +INSERT INTO t1 VALUES(3, "ddddd"); +INSERT INTO t1 VALUES(4, "eeeee"); +INSERT INTO t1 VALUES(5, "fffff"); +INSERT INTO t1 VALUES(6, "ggggg"); +INSERT INTO t1 VALUES(7, "hhhhh"); +INSERT INTO t1 VALUES(8, "iiiii"); +INSERT INTO t1 VALUES(9, "jjjjj"); +SELECT * FROM t1 ORDER BY c1 LIMIT 10; +c1 c2 +0 aaaaa +1 bbbbb +2 ccccc +3 ddddd +4 eeeee +5 fffff +6 ggggg +7 hhhhh +8 iiiii +9 jjjjj +DROP TABLE t1; diff --git a/mysql-test/suite/innodb/r/log_encrypt_2_mk.result b/mysql-test/suite/innodb/r/log_encrypt_2_mk.result new file mode 100644 index 000000000000..fe4e04ece01d --- /dev/null +++ b/mysql-test/suite/innodb/r/log_encrypt_2_mk.result @@ -0,0 +1,146 @@ +CREATE TABLE t1(c1 int) ENGINE=InnoDB ENCRYPTION="Y"; +DROP TABLE t1; +SET GLOBAL innodb_file_per_table = 1; +SELECT @@innodb_file_per_table; +@@innodb_file_per_table +1 +CREATE TABLE t1(c1 INT, c2 char(20)) ENCRYPTION="Y" ENGINE = InnoDB; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) DEFAULT NULL, + `c2` char(20) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='Y' +INSERT INTO t1 VALUES(0, "aaaaa"); +INSERT INTO t1 VALUES(1, "bbbbb"); +INSERT INTO t1 VALUES(2, "ccccc"); +INSERT INTO t1 VALUES(3, "ddddd"); +INSERT INTO t1 VALUES(4, "eeeee"); +INSERT INTO t1 VALUES(5, "fffff"); +INSERT INTO t1 VALUES(6, "ggggg"); +INSERT INTO t1 VALUES(7, "hhhhh"); +INSERT INTO t1 VALUES(8, "iiiii"); +INSERT INTO t1 VALUES(9, "jjjjj"); +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +SELECT * FROM t1 LIMIT 10; +c1 c2 +0 aaaaa +1 bbbbb +2 ccccc +3 ddddd +4 eeeee +5 fffff +6 ggggg +7 hhhhh +8 iiiii +9 jjjjj +SELECT * FROM t1 LIMIT 10; +c1 c2 +0 aaaaa +1 bbbbb +2 ccccc +3 ddddd +4 eeeee +5 fffff +6 ggggg +7 hhhhh +8 iiiii +9 jjjjj +ALTER INSTANCE ROTATE INNODB MASTER KEY; +DROP TABLE t1; +CREATE TABLE t1(c1 INT, c2 char(20)) ENCRYPTION="Y" ENGINE = InnoDB; +INSERT INTO t1 VALUES(0, "aaaaa"); +INSERT INTO t1 VALUES(1, "bbbbb"); +INSERT INTO t1 VALUES(2, "ccccc"); +INSERT INTO t1 VALUES(3, "ddddd"); +INSERT INTO t1 VALUES(4, "eeeee"); +INSERT INTO t1 VALUES(5, "fffff"); +INSERT INTO t1 VALUES(6, "ggggg"); +INSERT INTO t1 VALUES(7, "hhhhh"); +INSERT INTO t1 VALUES(8, "iiiii"); +INSERT INTO t1 VALUES(9, "jjjjj"); +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +# Kill and restart: +SELECT * FROM t1 LIMIT 10; +c1 c2 +0 aaaaa +1 bbbbb +2 ccccc +3 ddddd +4 eeeee +5 fffff +6 ggggg +7 hhhhh +8 iiiii +9 jjjjj +DROP TABLE t1; +SET block_encryption_mode = 'aes-256-cbc'; +CREATE DATABASE tde_db; +CREATE TABLE tde_db.t1(c1 INT PRIMARY KEY, c2 char(50)) ENCRYPTION = 'Y' ENGINE = InnoDB; +INSERT INTO tde_db.t1 VALUES(0, 'abc'); +INSERT INTO tde_db.t1 VALUES(1, 'xyz'); +INSERT INTO tde_db.t1 VALUES(2, null); +INSERT INTO tde_db.t1 VALUES(3, null); +SELECT * FROM tde_db.t1 LIMIT 10; +c1 c2 +0 abc +1 xyz +2 NULL +3 NULL +ALTER INSTANCE ROTATE INNODB MASTER KEY; +SELECT * FROM tde_db.t1 LIMIT 10; +c1 c2 +0 abc +1 xyz +2 NULL +3 NULL +# Mysqldump output + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `tde_db` /*!40100 DEFAULT CHARACTER SET latin1 */; + +USE `tde_db`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `t1` ( + `c1` int(11) NOT NULL, + `c2` char(50) DEFAULT NULL, + PRIMARY KEY (`c1`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='Y'; +/*!40101 SET character_set_client = @saved_cs_client */; +INSERT INTO `t1` VALUES (0,'abc'),(1,'xyz'),(2,NULL),(3,NULL); +# Redirecting mysqlpump output to MYSQL_TMP_DIR/mysqlpump_encrypt.sql +DROP DATABASE tde_db; +Pattern "ALTER INSTANCE ROTATE INNODB MASTER KEY" found +# Loading tables from mysqlpump_encrypt.sql +SELECT * FROM tde_db.t1 LIMIT 10; +c1 c2 +0 abc +1 xyz +2 NULL +3 NULL +INSERT INTO tde_db.t1 VALUES(4, null); +SELECT * FROM tde_db.t1 LIMIT 10; +c1 c2 +0 abc +1 xyz +2 NULL +3 NULL +4 NULL +DROP DATABASE tde_db; +SET GLOBAL innodb_file_per_table=1; diff --git a/mysql-test/suite/innodb/r/log_encrypt_2_rk.result b/mysql-test/suite/innodb/r/log_encrypt_2_rk.result new file mode 100644 index 000000000000..fe4e04ece01d --- /dev/null +++ b/mysql-test/suite/innodb/r/log_encrypt_2_rk.result @@ -0,0 +1,146 @@ +CREATE TABLE t1(c1 int) ENGINE=InnoDB ENCRYPTION="Y"; +DROP TABLE t1; +SET GLOBAL innodb_file_per_table = 1; +SELECT @@innodb_file_per_table; +@@innodb_file_per_table +1 +CREATE TABLE t1(c1 INT, c2 char(20)) ENCRYPTION="Y" ENGINE = InnoDB; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` int(11) DEFAULT NULL, + `c2` char(20) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='Y' +INSERT INTO t1 VALUES(0, "aaaaa"); +INSERT INTO t1 VALUES(1, "bbbbb"); +INSERT INTO t1 VALUES(2, "ccccc"); +INSERT INTO t1 VALUES(3, "ddddd"); +INSERT INTO t1 VALUES(4, "eeeee"); +INSERT INTO t1 VALUES(5, "fffff"); +INSERT INTO t1 VALUES(6, "ggggg"); +INSERT INTO t1 VALUES(7, "hhhhh"); +INSERT INTO t1 VALUES(8, "iiiii"); +INSERT INTO t1 VALUES(9, "jjjjj"); +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +SELECT * FROM t1 LIMIT 10; +c1 c2 +0 aaaaa +1 bbbbb +2 ccccc +3 ddddd +4 eeeee +5 fffff +6 ggggg +7 hhhhh +8 iiiii +9 jjjjj +SELECT * FROM t1 LIMIT 10; +c1 c2 +0 aaaaa +1 bbbbb +2 ccccc +3 ddddd +4 eeeee +5 fffff +6 ggggg +7 hhhhh +8 iiiii +9 jjjjj +ALTER INSTANCE ROTATE INNODB MASTER KEY; +DROP TABLE t1; +CREATE TABLE t1(c1 INT, c2 char(20)) ENCRYPTION="Y" ENGINE = InnoDB; +INSERT INTO t1 VALUES(0, "aaaaa"); +INSERT INTO t1 VALUES(1, "bbbbb"); +INSERT INTO t1 VALUES(2, "ccccc"); +INSERT INTO t1 VALUES(3, "ddddd"); +INSERT INTO t1 VALUES(4, "eeeee"); +INSERT INTO t1 VALUES(5, "fffff"); +INSERT INTO t1 VALUES(6, "ggggg"); +INSERT INTO t1 VALUES(7, "hhhhh"); +INSERT INTO t1 VALUES(8, "iiiii"); +INSERT INTO t1 VALUES(9, "jjjjj"); +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +INSERT INTO t1 select * from t1; +# Kill and restart: +SELECT * FROM t1 LIMIT 10; +c1 c2 +0 aaaaa +1 bbbbb +2 ccccc +3 ddddd +4 eeeee +5 fffff +6 ggggg +7 hhhhh +8 iiiii +9 jjjjj +DROP TABLE t1; +SET block_encryption_mode = 'aes-256-cbc'; +CREATE DATABASE tde_db; +CREATE TABLE tde_db.t1(c1 INT PRIMARY KEY, c2 char(50)) ENCRYPTION = 'Y' ENGINE = InnoDB; +INSERT INTO tde_db.t1 VALUES(0, 'abc'); +INSERT INTO tde_db.t1 VALUES(1, 'xyz'); +INSERT INTO tde_db.t1 VALUES(2, null); +INSERT INTO tde_db.t1 VALUES(3, null); +SELECT * FROM tde_db.t1 LIMIT 10; +c1 c2 +0 abc +1 xyz +2 NULL +3 NULL +ALTER INSTANCE ROTATE INNODB MASTER KEY; +SELECT * FROM tde_db.t1 LIMIT 10; +c1 c2 +0 abc +1 xyz +2 NULL +3 NULL +# Mysqldump output + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `tde_db` /*!40100 DEFAULT CHARACTER SET latin1 */; + +USE `tde_db`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `t1` ( + `c1` int(11) NOT NULL, + `c2` char(50) DEFAULT NULL, + PRIMARY KEY (`c1`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ENCRYPTION='Y'; +/*!40101 SET character_set_client = @saved_cs_client */; +INSERT INTO `t1` VALUES (0,'abc'),(1,'xyz'),(2,NULL),(3,NULL); +# Redirecting mysqlpump output to MYSQL_TMP_DIR/mysqlpump_encrypt.sql +DROP DATABASE tde_db; +Pattern "ALTER INSTANCE ROTATE INNODB MASTER KEY" found +# Loading tables from mysqlpump_encrypt.sql +SELECT * FROM tde_db.t1 LIMIT 10; +c1 c2 +0 abc +1 xyz +2 NULL +3 NULL +INSERT INTO tde_db.t1 VALUES(4, null); +SELECT * FROM tde_db.t1 LIMIT 10; +c1 c2 +0 abc +1 xyz +2 NULL +3 NULL +4 NULL +DROP DATABASE tde_db; +SET GLOBAL innodb_file_per_table=1; diff --git a/mysql-test/suite/innodb/r/log_encrypt_3_mk.result b/mysql-test/suite/innodb/r/log_encrypt_3_mk.result new file mode 100644 index 000000000000..30237ce6a0d6 --- /dev/null +++ b/mysql-test/suite/innodb/r/log_encrypt_3_mk.result @@ -0,0 +1,207 @@ +CREATE DATABASE tde_db; +USE tde_db; +SET GLOBAL innodb_redo_log_encrypt = MASTER_KEY; +SHOW WARNINGS; +Level Code Message +CREATE TABLE tde_db.t4 (a BIGINT PRIMARY KEY, b LONGBLOB) ENGINE=InnoDB; +INSERT INTO t4 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t4; +a LEFT(b,10) +1 aaaaaaaaaa +# restart +SELECT a,LEFT(b,10) FROM tde_db.t4; +a LEFT(b,10) +1 aaaaaaaaaa +DROP TABLE tde_db.t4; +DROP DATABASE tde_db; +CREATE DATABASE tde_db; +USE tde_db; +# Starting server with keyring plugin +SELECT @@global.innodb_redo_log_encrypt; +@@global.innodb_redo_log_encrypt +master_key +INSTALL PLUGIN keyring_file SONAME 'keyring_file.so'; +ERROR HY000: Function 'keyring_file' already exists +UNINSTALL PLUGIN keyring_file; +# Starting server with keyring plugin +SET GLOBAL innodb_redo_log_encrypt = 0; +SELECT @@global.innodb_redo_log_encrypt; +@@global.innodb_redo_log_encrypt +off +INSTALL PLUGIN keyring_file SONAME 'keyring_file.so'; +ERROR HY000: Function 'keyring_file' already exists +UNINSTALL PLUGIN keyring_file; +SELECT @@global.innodb_redo_log_encrypt; +@@global.innodb_redo_log_encrypt +master_key +SET GLOBAL innodb_redo_log_encrypt = 1; +SELECT @@global.innodb_redo_log_encrypt; +@@global.innodb_redo_log_encrypt +master_key +CREATE TABLE tde_db.t1 (a BIGINT PRIMARY KEY, b LONGBLOB) ENGINE=InnoDB; +INSERT INTO t1 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t1; +a LEFT(b,10) +1 aaaaaaaaaa +CREATE TABLE tde_db.t2 (a BIGINT PRIMARY KEY, b LONGBLOB) +ENCRYPTION='Y' ENGINE=InnoDB; +INSERT INTO t2 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t2; +a LEFT(b,10) +1 aaaaaaaaaa +SET GLOBAL innodb_redo_log_encrypt = 0; +SELECT @@global.innodb_redo_log_encrypt; +@@global.innodb_redo_log_encrypt +off +CREATE TABLE tde_db.t3 (a BIGINT PRIMARY KEY, b LONGBLOB) ENGINE=InnoDB; +INSERT INTO t3 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t3; +a LEFT(b,10) +1 aaaaaaaaaa +CREATE TABLE tde_db.t4 (a BIGINT PRIMARY KEY, b LONGBLOB) +ENCRYPTION='Y' ENGINE=InnoDB; +INSERT INTO t4 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t4; +a LEFT(b,10) +1 aaaaaaaaaa +FLUSH LOGS; +SELECT a,LEFT(b,10) FROM tde_db.t1; +a LEFT(b,10) +1 aaaaaaaaaa +SELECT a,LEFT(b,10) FROM tde_db.t2; +a LEFT(b,10) +1 aaaaaaaaaa +SELECT a,LEFT(b,10) FROM tde_db.t3; +a LEFT(b,10) +1 aaaaaaaaaa +SELECT a,LEFT(b,10) FROM tde_db.t4; +a LEFT(b,10) +1 aaaaaaaaaa +DROP TABLE tde_db.t1,tde_db.t2,tde_db.t3,tde_db.t4; +SELECT @@global.innodb_redo_log_encrypt; +@@global.innodb_redo_log_encrypt +off +CREATE TABLE tde_db.t1 (a BIGINT PRIMARY KEY, b LONGBLOB) ENGINE=InnoDB; +CREATE TABLE tde_db.t2 (a BIGINT PRIMARY KEY, b LONGBLOB) +ENCRYPTION='Y' ENGINE=InnoDB; +START TRANSACTION; +SET GLOBAL innodb_redo_log_encrypt = 1; +INSERT INTO t1 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +INSERT INTO t2 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t1; +a LEFT(b,10) +1 aaaaaaaaaa +SELECT a,LEFT(b,10) FROM tde_db.t2; +a LEFT(b,10) +1 aaaaaaaaaa +ROLLBACK; +START TRANSACTION; +INSERT INTO t1 (a, b) VALUES (2, REPEAT('a', 6*512*512)); +INSERT INTO t2 (a, b) VALUES (2, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t1; +a LEFT(b,10) +2 aaaaaaaaaa +SELECT a,LEFT(b,10) FROM tde_db.t2; +a LEFT(b,10) +2 aaaaaaaaaa +COMMIT; +CREATE TABLE tde_db.t3 (a BIGINT PRIMARY KEY, b LONGBLOB) ENGINE=InnoDB; +CREATE TABLE tde_db.t4 (a BIGINT PRIMARY KEY, b LONGBLOB) +ENCRYPTION='Y' ENGINE=InnoDB; +START TRANSACTION; +SET GLOBAL innodb_redo_log_encrypt = 0; +SELECT @@global.innodb_redo_log_encrypt; +@@global.innodb_redo_log_encrypt +off +INSERT INTO t3 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +INSERT INTO t4 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t3; +a LEFT(b,10) +1 aaaaaaaaaa +SELECT a,LEFT(b,10) FROM tde_db.t4; +a LEFT(b,10) +1 aaaaaaaaaa +ROLLBACK; +START TRANSACTION; +INSERT INTO t3 (a, b) VALUES (2, REPEAT('a', 6*512*512)); +INSERT INTO t4 (a, b) VALUES (2, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t3; +a LEFT(b,10) +2 aaaaaaaaaa +SELECT a,LEFT(b,10) FROM tde_db.t4; +a LEFT(b,10) +2 aaaaaaaaaa +COMMIT; +# Kill and restart: +SELECT +PLUGIN_NAME, PLUGIN_STATUS, PLUGIN_TYPE +FROM INFORMATION_SCHEMA.PLUGINS +WHERE PLUGIN_NAME LIKE '%keyring_file%'; +PLUGIN_NAME PLUGIN_STATUS PLUGIN_TYPE +keyring_file ACTIVE KEYRING +SELECT a,LEFT(b,10) FROM tde_db.t1; +a LEFT(b,10) +2 aaaaaaaaaa +SELECT a,LEFT(b,10) FROM tde_db.t2; +a LEFT(b,10) +2 aaaaaaaaaa +SELECT a,LEFT(b,10) FROM tde_db.t3; +a LEFT(b,10) +2 aaaaaaaaaa +SELECT a,LEFT(b,10) FROM tde_db.t4; +a LEFT(b,10) +2 aaaaaaaaaa +SET GLOBAL innodb_redo_log_encrypt = 0; +SELECT @@global.innodb_redo_log_encrypt; +@@global.innodb_redo_log_encrypt +off +ALTER INSTANCE ROTATE INNODB MASTER KEY; +SELECT a,LEFT(b,10) FROM tde_db.t1; +a LEFT(b,10) +2 aaaaaaaaaa +SELECT a,LEFT(b,10) FROM tde_db.t2; +a LEFT(b,10) +2 aaaaaaaaaa +SELECT a,LEFT(b,10) FROM tde_db.t3; +a LEFT(b,10) +2 aaaaaaaaaa +SELECT a,LEFT(b,10) FROM tde_db.t4; +a LEFT(b,10) +2 aaaaaaaaaa +SET GLOBAL innodb_redo_log_encrypt = MASTER_KEY; +SELECT @@global.innodb_redo_log_encrypt; +@@global.innodb_redo_log_encrypt +master_key +ALTER INSTANCE ROTATE INNODB MASTER KEY; +SELECT a,LEFT(b,10) FROM tde_db.t1; +a LEFT(b,10) +2 aaaaaaaaaa +SELECT a,LEFT(b,10) FROM tde_db.t2; +a LEFT(b,10) +2 aaaaaaaaaa +SELECT a,LEFT(b,10) FROM tde_db.t3; +a LEFT(b,10) +2 aaaaaaaaaa +SELECT a,LEFT(b,10) FROM tde_db.t4; +a LEFT(b,10) +2 aaaaaaaaaa +CREATE USER encryptnonprivuser@localhost IDENTIFIED BY 'noauth'; +GRANT SELECT ON *.* to encryptnonprivuser@localhost; +FLUSH PRIVILEGES; +# In connection 1 - with encryptnonprivuser +SELECT @@global.innodb_redo_log_encrypt; +@@global.innodb_redo_log_encrypt +master_key +SET GLOBAL innodb_redo_log_encrypt = 0; +ERROR 42000: Access denied; you need (at least one of) the SUPER privilege(s) for this operation +SELECT @@global.innodb_redo_log_encrypt; +@@global.innodb_redo_log_encrypt +master_key +SET GLOBAL innodb_redo_log_encrypt = MASTER_KEY; +ERROR 42000: Access denied; you need (at least one of) the SUPER privilege(s) for this operation +SELECT @@global.innodb_redo_log_encrypt; +@@global.innodb_redo_log_encrypt +master_key +# In connection default +UNINSTALL PLUGIN keyring_file; +DROP TABLE tde_db.t1,tde_db.t2,tde_db.t3,tde_db.t4; diff --git a/mysql-test/suite/innodb/r/log_encrypt_3_rk.result b/mysql-test/suite/innodb/r/log_encrypt_3_rk.result new file mode 100644 index 000000000000..2e869a733990 --- /dev/null +++ b/mysql-test/suite/innodb/r/log_encrypt_3_rk.result @@ -0,0 +1,207 @@ +CREATE DATABASE tde_db; +USE tde_db; +SET GLOBAL innodb_redo_log_encrypt = KEYRING_KEY; +SHOW WARNINGS; +Level Code Message +CREATE TABLE tde_db.t4 (a BIGINT PRIMARY KEY, b LONGBLOB) ENGINE=InnoDB; +INSERT INTO t4 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t4; +a LEFT(b,10) +1 aaaaaaaaaa +# restart +SELECT a,LEFT(b,10) FROM tde_db.t4; +a LEFT(b,10) +1 aaaaaaaaaa +DROP TABLE tde_db.t4; +DROP DATABASE tde_db; +CREATE DATABASE tde_db; +USE tde_db; +# Starting server with keyring plugin +SELECT @@global.innodb_redo_log_encrypt; +@@global.innodb_redo_log_encrypt +keyring_key +INSTALL PLUGIN keyring_file SONAME 'keyring_file.so'; +ERROR HY000: Function 'keyring_file' already exists +UNINSTALL PLUGIN keyring_file; +# Starting server with keyring plugin +SET GLOBAL innodb_redo_log_encrypt = 0; +SELECT @@global.innodb_redo_log_encrypt; +@@global.innodb_redo_log_encrypt +off +INSTALL PLUGIN keyring_file SONAME 'keyring_file.so'; +ERROR HY000: Function 'keyring_file' already exists +UNINSTALL PLUGIN keyring_file; +SELECT @@global.innodb_redo_log_encrypt; +@@global.innodb_redo_log_encrypt +keyring_key +SET GLOBAL innodb_redo_log_encrypt = 1; +SELECT @@global.innodb_redo_log_encrypt; +@@global.innodb_redo_log_encrypt +master_key +CREATE TABLE tde_db.t1 (a BIGINT PRIMARY KEY, b LONGBLOB) ENGINE=InnoDB; +INSERT INTO t1 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t1; +a LEFT(b,10) +1 aaaaaaaaaa +CREATE TABLE tde_db.t2 (a BIGINT PRIMARY KEY, b LONGBLOB) +ENCRYPTION='Y' ENGINE=InnoDB; +INSERT INTO t2 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t2; +a LEFT(b,10) +1 aaaaaaaaaa +SET GLOBAL innodb_redo_log_encrypt = 0; +SELECT @@global.innodb_redo_log_encrypt; +@@global.innodb_redo_log_encrypt +off +CREATE TABLE tde_db.t3 (a BIGINT PRIMARY KEY, b LONGBLOB) ENGINE=InnoDB; +INSERT INTO t3 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t3; +a LEFT(b,10) +1 aaaaaaaaaa +CREATE TABLE tde_db.t4 (a BIGINT PRIMARY KEY, b LONGBLOB) +ENCRYPTION='Y' ENGINE=InnoDB; +INSERT INTO t4 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t4; +a LEFT(b,10) +1 aaaaaaaaaa +FLUSH LOGS; +SELECT a,LEFT(b,10) FROM tde_db.t1; +a LEFT(b,10) +1 aaaaaaaaaa +SELECT a,LEFT(b,10) FROM tde_db.t2; +a LEFT(b,10) +1 aaaaaaaaaa +SELECT a,LEFT(b,10) FROM tde_db.t3; +a LEFT(b,10) +1 aaaaaaaaaa +SELECT a,LEFT(b,10) FROM tde_db.t4; +a LEFT(b,10) +1 aaaaaaaaaa +DROP TABLE tde_db.t1,tde_db.t2,tde_db.t3,tde_db.t4; +SELECT @@global.innodb_redo_log_encrypt; +@@global.innodb_redo_log_encrypt +off +CREATE TABLE tde_db.t1 (a BIGINT PRIMARY KEY, b LONGBLOB) ENGINE=InnoDB; +CREATE TABLE tde_db.t2 (a BIGINT PRIMARY KEY, b LONGBLOB) +ENCRYPTION='Y' ENGINE=InnoDB; +START TRANSACTION; +SET GLOBAL innodb_redo_log_encrypt = 1; +INSERT INTO t1 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +INSERT INTO t2 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t1; +a LEFT(b,10) +1 aaaaaaaaaa +SELECT a,LEFT(b,10) FROM tde_db.t2; +a LEFT(b,10) +1 aaaaaaaaaa +ROLLBACK; +START TRANSACTION; +INSERT INTO t1 (a, b) VALUES (2, REPEAT('a', 6*512*512)); +INSERT INTO t2 (a, b) VALUES (2, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t1; +a LEFT(b,10) +2 aaaaaaaaaa +SELECT a,LEFT(b,10) FROM tde_db.t2; +a LEFT(b,10) +2 aaaaaaaaaa +COMMIT; +CREATE TABLE tde_db.t3 (a BIGINT PRIMARY KEY, b LONGBLOB) ENGINE=InnoDB; +CREATE TABLE tde_db.t4 (a BIGINT PRIMARY KEY, b LONGBLOB) +ENCRYPTION='Y' ENGINE=InnoDB; +START TRANSACTION; +SET GLOBAL innodb_redo_log_encrypt = 0; +SELECT @@global.innodb_redo_log_encrypt; +@@global.innodb_redo_log_encrypt +off +INSERT INTO t3 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +INSERT INTO t4 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t3; +a LEFT(b,10) +1 aaaaaaaaaa +SELECT a,LEFT(b,10) FROM tde_db.t4; +a LEFT(b,10) +1 aaaaaaaaaa +ROLLBACK; +START TRANSACTION; +INSERT INTO t3 (a, b) VALUES (2, REPEAT('a', 6*512*512)); +INSERT INTO t4 (a, b) VALUES (2, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t3; +a LEFT(b,10) +2 aaaaaaaaaa +SELECT a,LEFT(b,10) FROM tde_db.t4; +a LEFT(b,10) +2 aaaaaaaaaa +COMMIT; +# Kill and restart: +SELECT +PLUGIN_NAME, PLUGIN_STATUS, PLUGIN_TYPE +FROM INFORMATION_SCHEMA.PLUGINS +WHERE PLUGIN_NAME LIKE '%keyring_file%'; +PLUGIN_NAME PLUGIN_STATUS PLUGIN_TYPE +keyring_file ACTIVE KEYRING +SELECT a,LEFT(b,10) FROM tde_db.t1; +a LEFT(b,10) +2 aaaaaaaaaa +SELECT a,LEFT(b,10) FROM tde_db.t2; +a LEFT(b,10) +2 aaaaaaaaaa +SELECT a,LEFT(b,10) FROM tde_db.t3; +a LEFT(b,10) +2 aaaaaaaaaa +SELECT a,LEFT(b,10) FROM tde_db.t4; +a LEFT(b,10) +2 aaaaaaaaaa +SET GLOBAL innodb_redo_log_encrypt = 0; +SELECT @@global.innodb_redo_log_encrypt; +@@global.innodb_redo_log_encrypt +off +ALTER INSTANCE ROTATE INNODB MASTER KEY; +SELECT a,LEFT(b,10) FROM tde_db.t1; +a LEFT(b,10) +2 aaaaaaaaaa +SELECT a,LEFT(b,10) FROM tde_db.t2; +a LEFT(b,10) +2 aaaaaaaaaa +SELECT a,LEFT(b,10) FROM tde_db.t3; +a LEFT(b,10) +2 aaaaaaaaaa +SELECT a,LEFT(b,10) FROM tde_db.t4; +a LEFT(b,10) +2 aaaaaaaaaa +SET GLOBAL innodb_redo_log_encrypt = KEYRING_KEY; +SELECT @@global.innodb_redo_log_encrypt; +@@global.innodb_redo_log_encrypt +keyring_key +ALTER INSTANCE ROTATE INNODB MASTER KEY; +SELECT a,LEFT(b,10) FROM tde_db.t1; +a LEFT(b,10) +2 aaaaaaaaaa +SELECT a,LEFT(b,10) FROM tde_db.t2; +a LEFT(b,10) +2 aaaaaaaaaa +SELECT a,LEFT(b,10) FROM tde_db.t3; +a LEFT(b,10) +2 aaaaaaaaaa +SELECT a,LEFT(b,10) FROM tde_db.t4; +a LEFT(b,10) +2 aaaaaaaaaa +CREATE USER encryptnonprivuser@localhost IDENTIFIED BY 'noauth'; +GRANT SELECT ON *.* to encryptnonprivuser@localhost; +FLUSH PRIVILEGES; +# In connection 1 - with encryptnonprivuser +SELECT @@global.innodb_redo_log_encrypt; +@@global.innodb_redo_log_encrypt +keyring_key +SET GLOBAL innodb_redo_log_encrypt = 0; +ERROR 42000: Access denied; you need (at least one of) the SUPER privilege(s) for this operation +SELECT @@global.innodb_redo_log_encrypt; +@@global.innodb_redo_log_encrypt +keyring_key +SET GLOBAL innodb_redo_log_encrypt = KEYRING_KEY; +ERROR 42000: Access denied; you need (at least one of) the SUPER privilege(s) for this operation +SELECT @@global.innodb_redo_log_encrypt; +@@global.innodb_redo_log_encrypt +keyring_key +# In connection default +UNINSTALL PLUGIN keyring_file; +DROP TABLE tde_db.t1,tde_db.t2,tde_db.t3,tde_db.t4; diff --git a/mysql-test/suite/innodb/r/log_encrypt_4_mk.result b/mysql-test/suite/innodb/r/log_encrypt_4_mk.result new file mode 100644 index 000000000000..1f4df33e3b75 --- /dev/null +++ b/mysql-test/suite/innodb/r/log_encrypt_4_mk.result @@ -0,0 +1,55 @@ +# create bootstrap file +# Stop the MTR default DB server +# Run the bootstrap command of datadir1 +# Start the DB server with datadir1 +SELECT @@global.innodb_redo_log_encrypt; +@@global.innodb_redo_log_encrypt +master_key +USE test; +CREATE TABLE tab1(c1 INT, c2 VARCHAR(30)); +INSERT INTO tab1 VALUES(1, 'Test consistency undo*'); +SELECT * FROM tab1; +c1 c2 +1 Test consistency undo* +CREATE TABLE tab2(c1 INT, c2 VARCHAR(30)) ENCRYPTION="Y"; +INSERT INTO tab2 VALUES(1, 'Test consistency undo*'); +SELECT * FROM tab2; +c1 c2 +1 Test consistency undo* +DROP TABLE tab1,tab2; +# restart: +# Stop the MTR default DB server +# Run the bootstrap command of datadir2, it should fail since the keyring is not loaded. +# Run the bootstrap command of datadir2 +# Start the DB server with datadir2 +SELECT @@global.innodb_redo_log_encrypt; +@@global.innodb_redo_log_encrypt +master_key +USE test; +CREATE TABLE tab1(c1 INT, c2 VARCHAR(30)); +INSERT INTO tab1 VALUES(1, 'Test consistency undo*'); +SELECT * FROM tab1; +c1 c2 +1 Test consistency undo* +CREATE TABLE tab2(c1 INT, c2 VARCHAR(30)) ENCRYPTION="Y"; +INSERT INTO tab2 VALUES(1, 'Test consistency undo*'); +SELECT * FROM tab2; +c1 c2 +1 Test consistency undo* +DROP TABLE tab1,tab2; +# restart: +# Stop the MTR default DB server +# Run the bootstrap command of datadir3 +# Start the DB server with datadir3 and keyring loaded. +SELECT @@global.innodb_redo_log_encrypt; +@@global.innodb_redo_log_encrypt +off +USE test; +CREATE TABLE tab1(c1 INT, c2 VARCHAR(30)); +INSERT INTO tab1 VALUES(1, 'Test consistency undo*'); +SELECT * FROM tab1; +c1 c2 +1 Test consistency undo* +CREATE TABLE tab2(c1 INT, c2 VARCHAR(30)) ENCRYPTION="Y"; +DROP TABLE tab1; +# restart: diff --git a/mysql-test/suite/innodb/r/log_encrypt_4_rk.result b/mysql-test/suite/innodb/r/log_encrypt_4_rk.result new file mode 100644 index 000000000000..9ab4172945cb --- /dev/null +++ b/mysql-test/suite/innodb/r/log_encrypt_4_rk.result @@ -0,0 +1,55 @@ +# create bootstrap file +# Stop the MTR default DB server +# Run the bootstrap command of datadir1 +# Start the DB server with datadir1 +SELECT @@global.innodb_redo_log_encrypt; +@@global.innodb_redo_log_encrypt +keyring_key +USE test; +CREATE TABLE tab1(c1 INT, c2 VARCHAR(30)); +INSERT INTO tab1 VALUES(1, 'Test consistency undo*'); +SELECT * FROM tab1; +c1 c2 +1 Test consistency undo* +CREATE TABLE tab2(c1 INT, c2 VARCHAR(30)) ENCRYPTION="Y"; +INSERT INTO tab2 VALUES(1, 'Test consistency undo*'); +SELECT * FROM tab2; +c1 c2 +1 Test consistency undo* +DROP TABLE tab1,tab2; +# restart: +# Stop the MTR default DB server +# Run the bootstrap command of datadir2, it should fail since the keyring is not loaded. +# Run the bootstrap command of datadir2 +# Start the DB server with datadir2 +SELECT @@global.innodb_redo_log_encrypt; +@@global.innodb_redo_log_encrypt +keyring_key +USE test; +CREATE TABLE tab1(c1 INT, c2 VARCHAR(30)); +INSERT INTO tab1 VALUES(1, 'Test consistency undo*'); +SELECT * FROM tab1; +c1 c2 +1 Test consistency undo* +CREATE TABLE tab2(c1 INT, c2 VARCHAR(30)) ENCRYPTION="Y"; +INSERT INTO tab2 VALUES(1, 'Test consistency undo*'); +SELECT * FROM tab2; +c1 c2 +1 Test consistency undo* +DROP TABLE tab1,tab2; +# restart: +# Stop the MTR default DB server +# Run the bootstrap command of datadir3 +# Start the DB server with datadir3 and keyring loaded. +SELECT @@global.innodb_redo_log_encrypt; +@@global.innodb_redo_log_encrypt +off +USE test; +CREATE TABLE tab1(c1 INT, c2 VARCHAR(30)); +INSERT INTO tab1 VALUES(1, 'Test consistency undo*'); +SELECT * FROM tab1; +c1 c2 +1 Test consistency undo* +CREATE TABLE tab2(c1 INT, c2 VARCHAR(30)) ENCRYPTION="Y"; +DROP TABLE tab1; +# restart: diff --git a/mysql-test/suite/innodb/r/log_encrypt_5_mk.result b/mysql-test/suite/innodb/r/log_encrypt_5_mk.result new file mode 100644 index 000000000000..737ba9fce647 --- /dev/null +++ b/mysql-test/suite/innodb/r/log_encrypt_5_mk.result @@ -0,0 +1,77 @@ +# create bootstrap file +# Stop the MTR default DB server +# Run the bootstrap command of datadir1 +CREATE DATABASE tde_db; +USE tde_db; +INSTALL PLUGIN keyring_file SONAME 'keyring_file.so'; +SET @@global.keyring_file_data= 'MYSQL_TMP_DIR/my_key_log3'; +SELECT +PLUGIN_NAME, PLUGIN_STATUS, PLUGIN_TYPE +FROM INFORMATION_SCHEMA.PLUGINS +WHERE PLUGIN_NAME LIKE '%keyring_file%' ; +PLUGIN_NAME PLUGIN_STATUS PLUGIN_TYPE +keyring_file ACTIVE KEYRING +SET GLOBAL innodb_redo_log_encrypt = MASTER_KEY; +SELECT @@global.innodb_redo_log_encrypt ; +@@global.innodb_redo_log_encrypt +master_key +CREATE TABLE tde_db.t1 (a BIGINT PRIMARY KEY, b LONGBLOB) ENGINE=InnoDB; +INSERT INTO t1 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t1; +a LEFT(b,10) +1 aaaaaaaaaa +CREATE TABLE tde_db.t2 (a BIGINT PRIMARY KEY, b LONGBLOB) +ENCRYPTION='Y' ENGINE=InnoDB; +INSERT INTO t2 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t2; +a LEFT(b,10) +1 aaaaaaaaaa +SET GLOBAL innodb_redo_log_encrypt = 0; +SELECT @@global.innodb_redo_log_encrypt ; +@@global.innodb_redo_log_encrypt +off +CREATE TABLE tde_db.t3 (a BIGINT PRIMARY KEY, b LONGBLOB) ENGINE=InnoDB; +INSERT INTO t3 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t3; +a LEFT(b,10) +1 aaaaaaaaaa +CREATE TABLE tde_db.t4 (a BIGINT PRIMARY KEY, b LONGBLOB) +ENCRYPTION='Y' ENGINE=InnoDB; +INSERT INTO t4 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t4; +a LEFT(b,10) +1 aaaaaaaaaa +SET GLOBAL innodb_redo_log_encrypt = MASTER_KEY; +SELECT @@global.innodb_redo_log_encrypt ; +@@global.innodb_redo_log_encrypt +master_key +CREATE TABLE tde_db.t5 (a BIGINT PRIMARY KEY, b LONGBLOB) ENGINE=InnoDB; +INSERT INTO t5 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t5; +a LEFT(b,10) +1 aaaaaaaaaa +CREATE TABLE tde_db.t6 (a BIGINT PRIMARY KEY, b LONGBLOB) +ENCRYPTION='Y' ENGINE=InnoDB; +INSERT INTO t6 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t6; +a LEFT(b,10) +1 aaaaaaaaaa +START TRANSACTION; +INSERT INTO t5 (a, b) VALUES (2, REPEAT('a', 6*512*512)); +INSERT INTO t6 (a, b) VALUES (2, REPEAT('a', 6*512*512)); +COMMIT; +START TRANSACTION; +INSERT INTO t5 (a, b) VALUES (3, REPEAT('a', 6*512*512)); +INSERT INTO t6 (a, b) VALUES (3, REPEAT('a', 6*512*512)); +ROLLBACK; +SELECT a,LEFT(b,10) FROM tde_db.t5; +a LEFT(b,10) +1 aaaaaaaaaa +2 aaaaaaaaaa +SELECT a,LEFT(b,10) FROM tde_db.t6; +a LEFT(b,10) +1 aaaaaaaaaa +2 aaaaaaaaaa +UNINSTALL PLUGIN keyring_file; +DROP TABLE tde_db.t1,tde_db.t2,tde_db.t3,tde_db.t4,tde_db.t5,tde_db.t6; +DROP DATABASE tde_db; diff --git a/mysql-test/suite/innodb/r/log_encrypt_5_rk.result b/mysql-test/suite/innodb/r/log_encrypt_5_rk.result new file mode 100644 index 000000000000..285b0a33fe26 --- /dev/null +++ b/mysql-test/suite/innodb/r/log_encrypt_5_rk.result @@ -0,0 +1,77 @@ +# create bootstrap file +# Stop the MTR default DB server +# Run the bootstrap command of datadir1 +CREATE DATABASE tde_db; +USE tde_db; +INSTALL PLUGIN keyring_file SONAME 'keyring_file.so'; +SET @@global.keyring_file_data= 'MYSQL_TMP_DIR/my_key_log3'; +SELECT +PLUGIN_NAME, PLUGIN_STATUS, PLUGIN_TYPE +FROM INFORMATION_SCHEMA.PLUGINS +WHERE PLUGIN_NAME LIKE '%keyring_file%' ; +PLUGIN_NAME PLUGIN_STATUS PLUGIN_TYPE +keyring_file ACTIVE KEYRING +SET GLOBAL innodb_redo_log_encrypt = KEYRING_KEY; +SELECT @@global.innodb_redo_log_encrypt ; +@@global.innodb_redo_log_encrypt +keyring_key +CREATE TABLE tde_db.t1 (a BIGINT PRIMARY KEY, b LONGBLOB) ENGINE=InnoDB; +INSERT INTO t1 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t1; +a LEFT(b,10) +1 aaaaaaaaaa +CREATE TABLE tde_db.t2 (a BIGINT PRIMARY KEY, b LONGBLOB) +ENCRYPTION='Y' ENGINE=InnoDB; +INSERT INTO t2 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t2; +a LEFT(b,10) +1 aaaaaaaaaa +SET GLOBAL innodb_redo_log_encrypt = 0; +SELECT @@global.innodb_redo_log_encrypt ; +@@global.innodb_redo_log_encrypt +off +CREATE TABLE tde_db.t3 (a BIGINT PRIMARY KEY, b LONGBLOB) ENGINE=InnoDB; +INSERT INTO t3 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t3; +a LEFT(b,10) +1 aaaaaaaaaa +CREATE TABLE tde_db.t4 (a BIGINT PRIMARY KEY, b LONGBLOB) +ENCRYPTION='Y' ENGINE=InnoDB; +INSERT INTO t4 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t4; +a LEFT(b,10) +1 aaaaaaaaaa +SET GLOBAL innodb_redo_log_encrypt = KEYRING_KEY; +SELECT @@global.innodb_redo_log_encrypt ; +@@global.innodb_redo_log_encrypt +keyring_key +CREATE TABLE tde_db.t5 (a BIGINT PRIMARY KEY, b LONGBLOB) ENGINE=InnoDB; +INSERT INTO t5 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t5; +a LEFT(b,10) +1 aaaaaaaaaa +CREATE TABLE tde_db.t6 (a BIGINT PRIMARY KEY, b LONGBLOB) +ENCRYPTION='Y' ENGINE=InnoDB; +INSERT INTO t6 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t6; +a LEFT(b,10) +1 aaaaaaaaaa +START TRANSACTION; +INSERT INTO t5 (a, b) VALUES (2, REPEAT('a', 6*512*512)); +INSERT INTO t6 (a, b) VALUES (2, REPEAT('a', 6*512*512)); +COMMIT; +START TRANSACTION; +INSERT INTO t5 (a, b) VALUES (3, REPEAT('a', 6*512*512)); +INSERT INTO t6 (a, b) VALUES (3, REPEAT('a', 6*512*512)); +ROLLBACK; +SELECT a,LEFT(b,10) FROM tde_db.t5; +a LEFT(b,10) +1 aaaaaaaaaa +2 aaaaaaaaaa +SELECT a,LEFT(b,10) FROM tde_db.t6; +a LEFT(b,10) +1 aaaaaaaaaa +2 aaaaaaaaaa +UNINSTALL PLUGIN keyring_file; +DROP TABLE tde_db.t1,tde_db.t2,tde_db.t3,tde_db.t4,tde_db.t5,tde_db.t6; +DROP DATABASE tde_db; diff --git a/mysql-test/suite/innodb/r/log_encrypt_6_mk.result b/mysql-test/suite/innodb/r/log_encrypt_6_mk.result new file mode 100644 index 000000000000..ac5fb2566837 --- /dev/null +++ b/mysql-test/suite/innodb/r/log_encrypt_6_mk.result @@ -0,0 +1,66 @@ +# create bootstrap file +# Stop the MTR default DB server +# Run the bootstrap command of datadir1 +# Start the DB server with datadir1 +CREATE DATABASE tde_db; +USE tde_db; +SET GLOBAL innodb_redo_log_encrypt = MASTER_KEY; +SELECT @@global.innodb_redo_log_encrypt ; +@@global.innodb_redo_log_encrypt +master_key +SELECT @@global.innodb_redo_log_encrypt ; +@@global.innodb_redo_log_encrypt +master_key +CREATE TABLE tde_db.t1 (a BIGINT PRIMARY KEY, b LONGBLOB) ENGINE=InnoDB; +INSERT INTO t1 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t1; +a LEFT(b,10) +1 aaaaaaaaaa +CREATE TABLE tde_db.t2 (a BIGINT PRIMARY KEY, b LONGBLOB) +ENCRYPTION='Y' ENGINE=InnoDB; +INSERT INTO t2 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t2; +a LEFT(b,10) +1 aaaaaaaaaa +SELECT @@global.innodb_redo_log_encrypt ; +@@global.innodb_redo_log_encrypt +master_key +CREATE TABLE tde_db.t3 (a BIGINT PRIMARY KEY, b LONGBLOB) ENGINE=InnoDB; +INSERT INTO t3 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t3; +a LEFT(b,10) +1 aaaaaaaaaa +CREATE TABLE tde_db.t4 (a BIGINT PRIMARY KEY, b LONGBLOB) +ENCRYPTION='Y' ENGINE=InnoDB; +INSERT INTO t4 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t4; +a LEFT(b,10) +1 aaaaaaaaaa +SELECT @@global.innodb_redo_log_encrypt ; +@@global.innodb_redo_log_encrypt +master_key +CREATE TABLE tde_db.t5 (a BIGINT PRIMARY KEY, b LONGBLOB) ENGINE=InnoDB; +INSERT INTO t5 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t5; +a LEFT(b,10) +1 aaaaaaaaaa +CREATE TABLE tde_db.t6 (a BIGINT PRIMARY KEY, b LONGBLOB) +ENCRYPTION='Y' ENGINE=InnoDB; +INSERT INTO t6 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t6; +a LEFT(b,10) +1 aaaaaaaaaa +UNINSTALL PLUGIN keyring_file; +DROP DATABASE tde_db; +# Try starting without keyring : Error +# Search for error message +Pattern "InnoDB: Redo log was encrypted, but keyring plugin is not loaded" found +Pattern "Aborting" found +# Restart without keyring plugin possible if redo files removed +# Start the DB server with datadir1 +# Try starting without keyring and --innodb_force_recovery=SRV_FORCE_NO_LOG_REDO. +# Start the DB server with datadir1 +SELECT 1; +1 +1 +# restart diff --git a/mysql-test/suite/innodb/r/log_encrypt_6_rk.result b/mysql-test/suite/innodb/r/log_encrypt_6_rk.result new file mode 100644 index 000000000000..d77eaa1cd413 --- /dev/null +++ b/mysql-test/suite/innodb/r/log_encrypt_6_rk.result @@ -0,0 +1,66 @@ +# create bootstrap file +# Stop the MTR default DB server +# Run the bootstrap command of datadir1 +# Start the DB server with datadir1 +CREATE DATABASE tde_db; +USE tde_db; +SET GLOBAL innodb_redo_log_encrypt = KEYRING_KEY; +SELECT @@global.innodb_redo_log_encrypt ; +@@global.innodb_redo_log_encrypt +keyring_key +SELECT @@global.innodb_redo_log_encrypt ; +@@global.innodb_redo_log_encrypt +keyring_key +CREATE TABLE tde_db.t1 (a BIGINT PRIMARY KEY, b LONGBLOB) ENGINE=InnoDB; +INSERT INTO t1 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t1; +a LEFT(b,10) +1 aaaaaaaaaa +CREATE TABLE tde_db.t2 (a BIGINT PRIMARY KEY, b LONGBLOB) +ENCRYPTION='Y' ENGINE=InnoDB; +INSERT INTO t2 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t2; +a LEFT(b,10) +1 aaaaaaaaaa +SELECT @@global.innodb_redo_log_encrypt ; +@@global.innodb_redo_log_encrypt +keyring_key +CREATE TABLE tde_db.t3 (a BIGINT PRIMARY KEY, b LONGBLOB) ENGINE=InnoDB; +INSERT INTO t3 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t3; +a LEFT(b,10) +1 aaaaaaaaaa +CREATE TABLE tde_db.t4 (a BIGINT PRIMARY KEY, b LONGBLOB) +ENCRYPTION='Y' ENGINE=InnoDB; +INSERT INTO t4 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t4; +a LEFT(b,10) +1 aaaaaaaaaa +SELECT @@global.innodb_redo_log_encrypt ; +@@global.innodb_redo_log_encrypt +keyring_key +CREATE TABLE tde_db.t5 (a BIGINT PRIMARY KEY, b LONGBLOB) ENGINE=InnoDB; +INSERT INTO t5 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t5; +a LEFT(b,10) +1 aaaaaaaaaa +CREATE TABLE tde_db.t6 (a BIGINT PRIMARY KEY, b LONGBLOB) +ENCRYPTION='Y' ENGINE=InnoDB; +INSERT INTO t6 (a, b) VALUES (1, REPEAT('a', 6*512*512)); +SELECT a,LEFT(b,10) FROM tde_db.t6; +a LEFT(b,10) +1 aaaaaaaaaa +UNINSTALL PLUGIN keyring_file; +DROP DATABASE tde_db; +# Try starting without keyring : Error +# Search for error message +Pattern "InnoDB: Redo log was encrypted, but keyring plugin is not loaded" found +Pattern "Aborting" found +# Restart without keyring plugin possible if redo files removed +# Start the DB server with datadir1 +# Try starting without keyring and --innodb_force_recovery=SRV_FORCE_NO_LOG_REDO. +# Start the DB server with datadir1 +SELECT 1; +1 +1 +# restart diff --git a/mysql-test/suite/innodb/r/log_encrypt_kill.result b/mysql-test/suite/innodb/r/log_encrypt_kill.result new file mode 100644 index 000000000000..8aab98a18d45 --- /dev/null +++ b/mysql-test/suite/innodb/r/log_encrypt_kill.result @@ -0,0 +1,200 @@ +# restart: --no-console --log-error=ERROR_LOG_FILE +SELECT @@global.innodb_redo_log_encrypt ; +@@global.innodb_redo_log_encrypt +off +SET GLOBAL innodb_redo_log_encrypt = MASTER_KEY; +UNINSTALL PLUGIN keyring_file; +ERROR 42000: PLUGIN keyring_file does not exist +CREATE TABLE tne_1(c1 INT, c2 varchar(2000)) ENGINE = InnoDB; +INSERT INTO tne_1 VALUES (1,REPEAT('a',1990)),(2,REPEAT('b',1990)),(100,REPEAT('c',1990)); +SELECT c1,LEFT(c2,10) FROM tne_1; +c1 LEFT(c2,10) +1 aaaaaaaaaa +2 bbbbbbbbbb +100 cccccccccc +DROP TABLE tne_1; +# Stop the MTR default DB server +Pattern "Can\'t set redo log tablespace to be encrypted" not found +# create bootstrap file +# Prepare new datadir +# Run the bootstrap command with keyring +# Starting server with keyring plugin +SELECT @@global.innodb_redo_log_encrypt; +@@global.innodb_redo_log_encrypt +off +SET GLOBAL innodb_redo_log_encrypt = MASTER_KEY; +INSTALL PLUGIN keyring_file SONAME 'keyring_file.so'; +ERROR HY000: Function 'keyring_file' already exists +SET GLOBAL innodb_redo_log_encrypt = 0; +SELECT @@global.innodb_redo_log_encrypt; +@@global.innodb_redo_log_encrypt +off +INSTALL PLUGIN keyring_file SONAME 'keyring_file.so'; +ERROR HY000: Function 'keyring_file' already exists +CREATE DATABASE tde_db; +USE tde_db; +CREATE TABLE tde_db.t_encrypt(c2 INT NOT NULL PRIMARY KEY, +c3 LONGBLOB +) ENCRYPTION="Y" ENGINE = InnoDB; +CREATE TABLE tde_db.t_non_encrypt(c2 INT NOT NULL PRIMARY KEY, +c3 LONGBLOB +) ENGINE = InnoDB; +CREATE PROCEDURE tde_db.populate_table_set_redo_encrypt(IN table_name VARCHAR(50)) +BEGIN +declare i int default 1; +declare has_error int default 0; +DECLARE CONTINUE HANDLER FOR 1062 SET has_error = 1; +while (i <= 2000) DO +SET @sql_text = CONCAT('INSERT INTO ',table_name, '(c2,c3) VALUES (' , i,',' ,'CONCAT(REPEAT("a",6*512*512)))'); +PREPARE stmt FROM @sql_text; +EXECUTE stmt; +set i = i + 1; +IF i%10 = 0 THEN SET GLOBAL innodb_redo_log_encrypt = MASTER_KEY; +END IF; +IF i%20 = 0 THEN SET GLOBAL innodb_redo_log_encrypt = 0; +END IF; +end while; +end| +CREATE PROCEDURE tde_db.update_table(IN table_name VARCHAR(50)) +BEGIN +declare i int default 1; +declare has_error int default 0; +DECLARE CONTINUE HANDLER FOR 1062 SET has_error = 1; +while (i <= 2000) DO +SET @sql_text = CONCAT('UPDATE ',table_name, ' SET c2 = c2 * -1 ORDER BY RAND() LIMIT 2'); +PREPARE stmt FROM @sql_text; +EXECUTE stmt; +set i = i + 1; +end while; +END| +CREATE PROCEDURE tde_db.delete_table(IN table_name VARCHAR(50)) +BEGIN +declare i int default 1; +declare has_error int default 0; +DECLARE CONTINUE HANDLER FOR 1062 SET has_error = 1; +while (i <= 2000) DO +SET @sql_text = CONCAT('DELETE FROM ',table_name, ' ORDER BY RAND() LIMIT 2'); +PREPARE stmt FROM @sql_text; +EXECUTE stmt; +set i = i + 1; +end while; +END| +CREATE PROCEDURE tde_db.transaction_table(IN table_name VARCHAR(50)) +BEGIN +declare i int default 1; +declare iflag int default -1; +declare has_error int default 0; +DECLARE CONTINUE HANDLER FOR 1062 SET has_error = 1; +SET i = 3000; +START TRANSACTION; +while (i <= 9000) DO +SET @sql_text = CONCAT('INSERT INTO ',table_name, '(c2,c3) VALUES (' , i,',' ,'CONCAT(REPEAT("a",6*512*512)))'); +PREPARE stmt FROM @sql_text; +EXECUTE stmt; +SET @sql_text = CONCAT('UPDATE ',table_name, ' SET c2 = c2 * -1 ORDER BY RAND() LIMIT 2'); +PREPARE stmt FROM @sql_text; +EXECUTE stmt; +set i = i + 1; +IF i%10 = 0 THEN SET GLOBAL innodb_redo_log_encrypt = MASTER_KEY; +END IF; +IF i%20 = 0 THEN SET GLOBAL innodb_redo_log_encrypt = 0; +END IF; +IF i%10 = 0 THEN +SET @sql_text = CONCAT('DELETE FROM ',table_name, ' ORDER BY RAND() LIMIT 2'); +PREPARE stmt FROM @sql_text; +EXECUTE stmt; +START TRANSACTION; +SET iflag = -1 * iflag; +END IF; +IF i%9 = 0 THEN +IF iflag < 0 THEN +COMMIT; +ELSE +ROLLBACK; +END IF; +END IF; +end while; +END| +CREATE PROCEDURE tde_db.create_table_rotate_key() +BEGIN +declare i int default 1; +declare has_error int default 0; +DECLARE CONTINUE HANDLER FOR 1062 SET has_error = 1; +while (i <= 2000) DO +IF i%10 = 0 THEN +SET @sql_text = CONCAT('CREATE TABLE ',CONCAT('tde_db.t_non_encrypt_',encrypt,'_',i),' (c1 INT) ' ,' ENGINE=InnoDB'); +ELSE +SET @sql_text = CONCAT('CREATE TABLE ',CONCAT('tde_db.t_encrypt_',encrypt,'_',i),' (c1 INT) ENCRYPTION="Y"' ,' ENGINE=InnoDB'); +END IF; +PREPARE stmt FROM @sql_text; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; +ALTER INSTANCE ROTATE INNODB MASTER KEY; +set i = i + 1; +end while; +END| +CREATE PROCEDURE tde_db.query_table(IN table_name VARCHAR(50)) +BEGIN +declare i int default 1; +declare has_error int default 0; +DECLARE CONTINUE HANDLER FOR 1062 SET has_error = 1; +while (i <= 2000) DO +SET @sql_text = CONCAT('SELECT * FROM ',table_name, ' ORDER BY RAND() LIMIT 2'); +PREPARE stmt FROM @sql_text; +EXECUTE stmt; +set i = i + 1; +end while; +END| +# In connection con1 - Running insert with redo_log_encrypt variable +call tde_db.populate_table_set_redo_encrypt('tde_db.t_encrypt'); +# In connection con2 - Running insert on non encrypt table +call tde_db.populate_table_set_redo_encrypt('tde_db.t_non_encrypt'); +# Starting server with keyring plugin +# Kill and restart: +SELECT COUNT(*)>0 FROM tde_db.t_encrypt; +COUNT(*)>0 +# +SELECT COUNT(*)>0 FROM tde_db.t_non_encrypt; +COUNT(*)>0 +# +DELETE FROM tde_db.t_encrypt; +DELETE FROM tde_db.t_non_encrypt; +# In connection con1 - Running insert with redo_log_encrypt variable +call tde_db.populate_table_set_redo_encrypt('tde_db.t_encrypt'); +# In connection con2 - Running insert on non encrypt table +call tde_db.populate_table_set_redo_encrypt('tde_db.t_non_encrypt'); +# In connection con3 - Running update on encrypt +call tde_db.table_update('tde_db.t_encrypt'); +# In connection con4 - Running update non encrypt +call tde_db.table_update('tde_db.t_non_encrypt'); +# In connection con5 - Running delete on encrypt +call tde_db.table_delete('tde_db.t_encrypt'); +# In connection con6 - Running delete on non encrypt +call tde_db.table_delete('tde_db.t_non_encrypt'); +# In connection con7 - Running transaction on encrypt +call tde_db.transaction_table('tde_db.t_encrypt'); +# In connection con8 - Running transaction on non encrypt +call tde_db.transaction_table('tde_db.t_non_encrypt'); +# In connection con9 - Running create encrypt and non encrypt table with rotate key +call tde_db.create_table_rotate_key(); +# In connection con10 - Running query on encrypt table +call tde_db.query_table('tde_db.t_encrypt'); +# In connection con11 - Running query on non encrypt table +call tde_db.query_table('tde_db.t_non_encrypt'); +# Starting server with keyring plugin +# Kill and restart: +SELECT COUNT(*) > 1 FROM tde_db.t_encrypt; +COUNT(*) > 1 +# +SELECT COUNT(*) > 1 FROM tde_db.t_non_encrypt; +COUNT(*) > 1 +# +# In connection con1 - Running insert with redo_log_encrypt variable +call tde_db.populate_table_set_redo_encrypt('tde_db.t_encrypt'); +# In connection con2 - Running insert on non encrypt table +call tde_db.populate_table_set_redo_encrypt('tde_db.t_non_encrypt'); +DROP DATABASE tde_db; +# restart +# +# Cleanup +# diff --git a/mysql-test/suite/innodb/t/disabled.def b/mysql-test/suite/innodb/t/disabled.def index 888298bbb09e..b816eef4177b 100644 --- a/mysql-test/suite/innodb/t/disabled.def +++ b/mysql-test/suite/innodb/t/disabled.def @@ -9,3 +9,7 @@ # Do not use any TAB characters for whitespace. # ############################################################################## +log_encrypt_4_mk : PS-4958 2018-10-24 Zsolt Parragi Testcase crashes with eatmydata in LD_PRELOAD +log_encrypt_4_rk : PS-4958 2018-10-24 Zsolt Parragi Testcase crashes with eatmydata in LD_PRELOAD +log_encrypt_6_mk : PS-4958 2018-10-24 Zsolt Parragi Testcase crashes with eatmydata in LD_PRELOAD +log_encrypt_6_rk : PS-4958 2018-10-24 Zsolt Parragi Testcase crashes with eatmydata in LD_PRELOAD diff --git a/mysql-test/suite/innodb/t/log_encrypt_1_mk.test b/mysql-test/suite/innodb/t/log_encrypt_1_mk.test new file mode 100644 index 000000000000..aec374286758 --- /dev/null +++ b/mysql-test/suite/innodb/t/log_encrypt_1_mk.test @@ -0,0 +1,3 @@ +--let $KEYRING_PARAMS=--early-plugin-load="keyring_file=$KEYRING_PLUGIN" --loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring1 $KEYRING_PLUGIN_OPT +--let $redo_log_mode=MASTER_KEY +--source include/log_encrypt_1.inc diff --git a/mysql-test/suite/innodb/t/log_encrypt_1_rk.test b/mysql-test/suite/innodb/t/log_encrypt_1_rk.test new file mode 100644 index 000000000000..e280c86622dc --- /dev/null +++ b/mysql-test/suite/innodb/t/log_encrypt_1_rk.test @@ -0,0 +1,3 @@ +--let KEYRING_PARAMS=--early-plugin-load="keyring_file=$KEYRING_PLUGIN" --loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring1 $KEYRING_PLUGIN_OPT +--let $redo_log_mode=KEYRING_KEY +--source include/log_encrypt_1.inc diff --git a/mysql-test/suite/innodb/t/log_encrypt_2_mk-master.opt b/mysql-test/suite/innodb/t/log_encrypt_2_mk-master.opt new file mode 100644 index 000000000000..a7cbd1e7a78d --- /dev/null +++ b/mysql-test/suite/innodb/t/log_encrypt_2_mk-master.opt @@ -0,0 +1,4 @@ +$KEYRING_PLUGIN_OPT +$KEYRING_PLUGIN_EARLY_LOAD +--loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring2 +--innodb_redo_log_encrypt=MASTER_KEY diff --git a/mysql-test/suite/innodb/t/log_encrypt_2_mk.test b/mysql-test/suite/innodb/t/log_encrypt_2_mk.test new file mode 100644 index 000000000000..7d77f9b86d7c --- /dev/null +++ b/mysql-test/suite/innodb/t/log_encrypt_2_mk.test @@ -0,0 +1,2 @@ +--let KEYRING_PARAMS=--early-plugin-load="keyring_file=$KEYRING_PLUGIN" --loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring1 $KEYRING_PLUGIN_OPT +--source include/log_encrypt_2.inc diff --git a/mysql-test/suite/innodb/t/log_encrypt_2_rk-master.opt b/mysql-test/suite/innodb/t/log_encrypt_2_rk-master.opt new file mode 100644 index 000000000000..cfe9b3ea0841 --- /dev/null +++ b/mysql-test/suite/innodb/t/log_encrypt_2_rk-master.opt @@ -0,0 +1,4 @@ +$KEYRING_PLUGIN_OPT +$KEYRING_PLUGIN_EARLY_LOAD +--loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring2 +--innodb_redo_log_encrypt=KEYRING_KEY diff --git a/mysql-test/suite/innodb/t/log_encrypt_2_rk.test b/mysql-test/suite/innodb/t/log_encrypt_2_rk.test new file mode 100644 index 000000000000..0eca7312ade9 --- /dev/null +++ b/mysql-test/suite/innodb/t/log_encrypt_2_rk.test @@ -0,0 +1,2 @@ +--let KEYRING_PARAMS=--early-plugin-load="keyring_file=$KEYRING_PLUGIN" --loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring2 $KEYRING_PLUGIN_OPT +--source include/log_encrypt_2.inc diff --git a/mysql-test/suite/innodb/t/log_encrypt_3_mk.test b/mysql-test/suite/innodb/t/log_encrypt_3_mk.test new file mode 100644 index 000000000000..e1626d87d20c --- /dev/null +++ b/mysql-test/suite/innodb/t/log_encrypt_3_mk.test @@ -0,0 +1,3 @@ +--let $KEYRING_PARAMS=--early-plugin-load="keyring_file=$KEYRING_PLUGIN" --loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring1 $KEYRING_PLUGIN_OPT +--let $redo_log_encrypt_mode=MASTER_KEY +--source include/log_encrypt_3.inc diff --git a/mysql-test/suite/innodb/t/log_encrypt_3_rk.test b/mysql-test/suite/innodb/t/log_encrypt_3_rk.test new file mode 100644 index 000000000000..aaef898f37f9 --- /dev/null +++ b/mysql-test/suite/innodb/t/log_encrypt_3_rk.test @@ -0,0 +1,3 @@ +--let $KEYRING_PARAMS=--early-plugin-load="keyring_file=$KEYRING_PLUGIN" --loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring1 $KEYRING_PLUGIN_OPT +--let $redo_log_encrypt_mode=KEYRING_KEY +--source include/log_encrypt_3.inc diff --git a/mysql-test/suite/innodb/t/log_encrypt_4_mk.test b/mysql-test/suite/innodb/t/log_encrypt_4_mk.test new file mode 100644 index 000000000000..5145e1795404 --- /dev/null +++ b/mysql-test/suite/innodb/t/log_encrypt_4_mk.test @@ -0,0 +1,3 @@ +--let $KEYRING_PARAMS=--early-plugin-load="keyring_file=$KEYRING_PLUGIN" --loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring1 $KEYRING_PLUGIN_OPT +--let $redo_log_mode=MASTER_KEY +--source include/log_encrypt_4.inc diff --git a/mysql-test/suite/innodb/t/log_encrypt_4_rk.test b/mysql-test/suite/innodb/t/log_encrypt_4_rk.test new file mode 100644 index 000000000000..871cce7d51e8 --- /dev/null +++ b/mysql-test/suite/innodb/t/log_encrypt_4_rk.test @@ -0,0 +1,3 @@ +--let $KEYRING_PARAMS=--early-plugin-load="keyring_file=$KEYRING_PLUGIN" --loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring1 $KEYRING_PLUGIN_OPT +--let $redo_log_mode=KEYRING_KEY +--source include/log_encrypt_4.inc diff --git a/mysql-test/suite/innodb/t/log_encrypt_5_mk.test b/mysql-test/suite/innodb/t/log_encrypt_5_mk.test new file mode 100644 index 000000000000..58b06f6e7f8d --- /dev/null +++ b/mysql-test/suite/innodb/t/log_encrypt_5_mk.test @@ -0,0 +1,2 @@ +--let $redo_log_encrypt_mode=MASTER_KEY +--source include/log_encrypt_5.inc diff --git a/mysql-test/suite/innodb/t/log_encrypt_5_rk.test b/mysql-test/suite/innodb/t/log_encrypt_5_rk.test new file mode 100644 index 000000000000..d60a2055f638 --- /dev/null +++ b/mysql-test/suite/innodb/t/log_encrypt_5_rk.test @@ -0,0 +1,2 @@ +--let $redo_log_encrypt_mode=KEYRING_KEY +--source include/log_encrypt_5.inc diff --git a/mysql-test/suite/innodb/t/log_encrypt_6_mk.test b/mysql-test/suite/innodb/t/log_encrypt_6_mk.test new file mode 100644 index 000000000000..6f5d0eb2264d --- /dev/null +++ b/mysql-test/suite/innodb/t/log_encrypt_6_mk.test @@ -0,0 +1,2 @@ +--let $redo_log_encrypt_mode=MASTER_KEY +--source include/log_encrypt_6.inc diff --git a/mysql-test/suite/innodb/t/log_encrypt_6_rk.test b/mysql-test/suite/innodb/t/log_encrypt_6_rk.test new file mode 100644 index 000000000000..31e3cb3c615a --- /dev/null +++ b/mysql-test/suite/innodb/t/log_encrypt_6_rk.test @@ -0,0 +1,2 @@ +--let $redo_log_encrypt_mode=KEYRING_KEY +--source include/log_encrypt_6.inc diff --git a/mysql-test/suite/innodb/t/log_encrypt_kill.test b/mysql-test/suite/innodb/t/log_encrypt_kill.test new file mode 100644 index 000000000000..a2a163aa5ead --- /dev/null +++ b/mysql-test/suite/innodb/t/log_encrypt_kill.test @@ -0,0 +1,330 @@ +# InnoDB transparent encryption on redo log and undo log +# This test case will test basic encryption support with +# concurrent execution + +--source include/no_valgrind_without_big.inc +--source include/have_innodb_max_16k.inc +--source include/not_embedded.inc + +# Create a table with encryption, should fail since keyring is not +# loaded + +let $old_innodb_file_per_table = `SELECT @@innodb_file_per_table`; +let $old_innodb_redo_log_encrypt = `SELECT @@innodb_redo_log_encrypt`; +let $START_PAGE_SIZE= `select @@innodb_page_size`; +let $LOG_FILE_SIZE= `select @@innodb_log_file_size`; +let $MYSQLD_BASEDIR= `select @@basedir`; + +let SEARCH_FILE= $MYSQL_TMP_DIR/encrypt_log_output.err; + +# Test that the output appears. +let $restart_parameters = restart: --no-console --log-error=$SEARCH_FILE; +--replace_result $SEARCH_FILE ERROR_LOG_FILE +--source include/restart_mysqld.inc + +SELECT @@global.innodb_redo_log_encrypt ; +SET GLOBAL innodb_redo_log_encrypt = MASTER_KEY; + +--let $wait_condition=SELECT @@global.innodb_redo_log_encrypt = 0 +--source include/wait_condition.inc + +--error ER_SP_DOES_NOT_EXIST +UNINSTALL PLUGIN keyring_file; + +# Create Non encrypt table with innodb_redo_log_encrypt=ON +CREATE TABLE tne_1(c1 INT, c2 varchar(2000)) ENGINE = InnoDB; +INSERT INTO tne_1 VALUES (1,REPEAT('a',1990)),(2,REPEAT('b',1990)),(100,REPEAT('c',1990)); +SELECT c1,LEFT(c2,10) FROM tne_1; +DROP TABLE tne_1; +--echo # Stop the MTR default DB server +--source include/shutdown_mysqld.inc + +# Grep for message in server error log +let SEARCH_PATTERN=Can\'t set redo log tablespace to be encrypted; +--source include/search_pattern.inc + +# Create path for ibdata* & undo* files both DBs +--mkdir $MYSQL_TMP_DIR/innodb_undo_data_dir +--mkdir $MYSQL_TMP_DIR/datadir +# Set path for --datadir +let $MYSQLD_DATADIR_1 = $MYSQL_TMP_DIR/datadir/data; +# Set path for undo* files. +let $MYSQLD_UNDO_DATADIR = $MYSQL_TMP_DIR/innodb_undo_data_dir; +let BOOTSTRAP_SQL=$MYSQL_TMP_DIR/boot.sql; +--echo # create bootstrap file +write_file $BOOTSTRAP_SQL; +CREATE DATABASE test; +EOF + +--echo # Prepare new datadir +let NEW_CMD = $MYSQLD --no-defaults --initialize-insecure --innodb_log_file_size=$LOG_FILE_SIZE --innodb_page_size=$START_PAGE_SIZE --innodb_undo_directory=$MYSQLD_UNDO_DATADIR --innodb_undo_tablespaces=2 --basedir=$MYSQLD_BASEDIR --datadir=$MYSQLD_DATADIR_1 --init-file=$BOOTSTRAP_SQL --secure-file-priv="" --early-plugin-load="keyring_file=$KEYRING_PLUGIN" --keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring $KEYRING_PLUGIN_OPT >$MYSQLTEST_VARDIR/tmp/bootstrap2.log 2>&1; + +--echo # Run the bootstrap command with keyring +--exec $NEW_CMD + +--echo # Starting server with keyring plugin +--let $restart_parameters=restart: --innodb_log_file_size=$LOG_FILE_SIZE --innodb_page_size=$START_PAGE_SIZE --innodb_undo_tablespaces=2 --innodb_undo_directory=$MYSQLD_UNDO_DATADIR --datadir=$MYSQLD_DATADIR_1 --early-plugin-load="keyring_file=$KEYRING_PLUGIN" --loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring $KEYRING_PLUGIN_OPT +--replace_regex /\.dll/.so/ +--source include/start_mysqld_no_echo.inc + +SELECT @@global.innodb_redo_log_encrypt; +SET GLOBAL innodb_redo_log_encrypt = MASTER_KEY; +--replace_regex /\.dll/.so/ +--error ER_UDF_EXISTS +eval INSTALL PLUGIN keyring_file SONAME '$KEYRING_PLUGIN'; + +SET GLOBAL innodb_redo_log_encrypt = 0; +SELECT @@global.innodb_redo_log_encrypt; +--replace_regex /\.dll/.so/ +--error ER_UDF_EXISTS +eval INSTALL PLUGIN keyring_file SONAME '$KEYRING_PLUGIN'; + +CREATE DATABASE tde_db; +USE tde_db; + +let $innodb_file_per_table = `SELECT @@innodb_file_per_table`; + +# Create a table with encryption +CREATE TABLE tde_db.t_encrypt(c2 INT NOT NULL PRIMARY KEY, + c3 LONGBLOB + ) ENCRYPTION="Y" ENGINE = InnoDB; + +CREATE TABLE tde_db.t_non_encrypt(c2 INT NOT NULL PRIMARY KEY, + c3 LONGBLOB + ) ENGINE = InnoDB; + + +DELIMITER |; +CREATE PROCEDURE tde_db.populate_table_set_redo_encrypt(IN table_name VARCHAR(50)) +BEGIN + declare i int default 1; + declare has_error int default 0; + DECLARE CONTINUE HANDLER FOR 1062 SET has_error = 1; + while (i <= 2000) DO + + SET @sql_text = CONCAT('INSERT INTO ',table_name, '(c2,c3) VALUES (' , i,',' ,'CONCAT(REPEAT("a",6*512*512)))'); + PREPARE stmt FROM @sql_text; + EXECUTE stmt; + set i = i + 1; + IF i%10 = 0 THEN SET GLOBAL innodb_redo_log_encrypt = MASTER_KEY; + END IF; + IF i%20 = 0 THEN SET GLOBAL innodb_redo_log_encrypt = 0; + END IF; + + end while; +end| +CREATE PROCEDURE tde_db.update_table(IN table_name VARCHAR(50)) +BEGIN + declare i int default 1; + declare has_error int default 0; + DECLARE CONTINUE HANDLER FOR 1062 SET has_error = 1; + while (i <= 2000) DO + SET @sql_text = CONCAT('UPDATE ',table_name, ' SET c2 = c2 * -1 ORDER BY RAND() LIMIT 2'); + PREPARE stmt FROM @sql_text; + EXECUTE stmt; + set i = i + 1; + end while; +END| +CREATE PROCEDURE tde_db.delete_table(IN table_name VARCHAR(50)) +BEGIN + declare i int default 1; + declare has_error int default 0; + DECLARE CONTINUE HANDLER FOR 1062 SET has_error = 1; + while (i <= 2000) DO + SET @sql_text = CONCAT('DELETE FROM ',table_name, ' ORDER BY RAND() LIMIT 2'); + PREPARE stmt FROM @sql_text; + EXECUTE stmt; + set i = i + 1; + end while; +END| +CREATE PROCEDURE tde_db.transaction_table(IN table_name VARCHAR(50)) +BEGIN + declare i int default 1; + declare iflag int default -1; + declare has_error int default 0; + DECLARE CONTINUE HANDLER FOR 1062 SET has_error = 1; + SET i = 3000; + START TRANSACTION; + while (i <= 9000) DO + SET @sql_text = CONCAT('INSERT INTO ',table_name, '(c2,c3) VALUES (' , i,',' ,'CONCAT(REPEAT("a",6*512*512)))'); + PREPARE stmt FROM @sql_text; + EXECUTE stmt; + SET @sql_text = CONCAT('UPDATE ',table_name, ' SET c2 = c2 * -1 ORDER BY RAND() LIMIT 2'); + PREPARE stmt FROM @sql_text; + EXECUTE stmt; + set i = i + 1; + IF i%10 = 0 THEN SET GLOBAL innodb_redo_log_encrypt = MASTER_KEY; + END IF; + IF i%20 = 0 THEN SET GLOBAL innodb_redo_log_encrypt = 0; + END IF; + + IF i%10 = 0 THEN + SET @sql_text = CONCAT('DELETE FROM ',table_name, ' ORDER BY RAND() LIMIT 2'); + PREPARE stmt FROM @sql_text; + EXECUTE stmt; + START TRANSACTION; + SET iflag = -1 * iflag; + END IF; + IF i%9 = 0 THEN + IF iflag < 0 THEN + COMMIT; + ELSE + ROLLBACK; + END IF; + END IF; + end while; +END| +CREATE PROCEDURE tde_db.create_table_rotate_key() +BEGIN + declare i int default 1; + declare has_error int default 0; + DECLARE CONTINUE HANDLER FOR 1062 SET has_error = 1; + while (i <= 2000) DO + + IF i%10 = 0 THEN + SET @sql_text = CONCAT('CREATE TABLE ',CONCAT('tde_db.t_non_encrypt_',encrypt,'_',i),' (c1 INT) ' ,' ENGINE=InnoDB'); + ELSE + SET @sql_text = CONCAT('CREATE TABLE ',CONCAT('tde_db.t_encrypt_',encrypt,'_',i),' (c1 INT) ENCRYPTION="Y"' ,' ENGINE=InnoDB'); + END IF; + PREPARE stmt FROM @sql_text; + EXECUTE stmt; + DEALLOCATE PREPARE stmt; + ALTER INSTANCE ROTATE INNODB MASTER KEY; + set i = i + 1; + end while; +END| +CREATE PROCEDURE tde_db.query_table(IN table_name VARCHAR(50)) +BEGIN + declare i int default 1; + declare has_error int default 0; + DECLARE CONTINUE HANDLER FOR 1062 SET has_error = 1; + while (i <= 2000) DO + SET @sql_text = CONCAT('SELECT * FROM ',table_name, ' ORDER BY RAND() LIMIT 2'); + PREPARE stmt FROM @sql_text; + EXECUTE stmt; + set i = i + 1; + end while; +END| +DELIMITER ;| + +--echo # In connection con1 - Running insert with redo_log_encrypt variable +connect (con1,localhost,root,,); +send call tde_db.populate_table_set_redo_encrypt('tde_db.t_encrypt'); + +--echo # In connection con2 - Running insert on non encrypt table +connect (con2,localhost,root,,); +send call tde_db.populate_table_set_redo_encrypt('tde_db.t_non_encrypt'); + +--connection default +--echo # Starting server with keyring plugin +let $restart_parameters = restart: --innodb_log_file_size=$LOG_FILE_SIZE --innodb_page_size=$START_PAGE_SIZE --early-plugin-load="keyring_file=$KEYRING_PLUGIN" --loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring $KEYRING_PLUGIN_OPT --innodb_undo_tablespaces=2 --innodb_undo_directory=$MYSQLD_UNDO_DATADIR --datadir=$MYSQLD_DATADIR_1; +--let $_server_id= `SELECT @@server_id` +--let $restart_hide_args=1 +--source include/kill_and_restart_mysqld.inc + +--disconnect con1 +--disconnect con2 +--connection default + +--replace_column 1 # +SELECT COUNT(*)>0 FROM tde_db.t_encrypt; +--replace_column 1 # +SELECT COUNT(*)>0 FROM tde_db.t_non_encrypt; + +DELETE FROM tde_db.t_encrypt; +DELETE FROM tde_db.t_non_encrypt; + +--echo # In connection con1 - Running insert with redo_log_encrypt variable +connect (con1,localhost,root,,); +send call tde_db.populate_table_set_redo_encrypt('tde_db.t_encrypt'); + +--echo # In connection con2 - Running insert on non encrypt table +connect (con2,localhost,root,,); +send call tde_db.populate_table_set_redo_encrypt('tde_db.t_non_encrypt'); + +--echo # In connection con3 - Running update on encrypt +connect (con3,localhost,root,,); +send call tde_db.table_update('tde_db.t_encrypt'); +--echo # In connection con4 - Running update non encrypt +connect (con4,localhost,root,,); +send call tde_db.table_update('tde_db.t_non_encrypt'); +--echo # In connection con5 - Running delete on encrypt +connect (con5,localhost,root,,); +send call tde_db.table_delete('tde_db.t_encrypt'); +--echo # In connection con6 - Running delete on non encrypt +connect (con6,localhost,root,,); +send call tde_db.table_delete('tde_db.t_non_encrypt'); +--echo # In connection con7 - Running transaction on encrypt +connect (con7,localhost,root,,); +send call tde_db.transaction_table('tde_db.t_encrypt'); +--echo # In connection con8 - Running transaction on non encrypt +connect (con8,localhost,root,,); +send call tde_db.transaction_table('tde_db.t_non_encrypt'); +--echo # In connection con9 - Running create encrypt and non encrypt table with rotate key +connect (con9,localhost,root,,); +send call tde_db.create_table_rotate_key(); +--echo # In connection con10 - Running query on encrypt table +connect (con10,localhost,root,,); +send call tde_db.query_table('tde_db.t_encrypt'); +--echo # In connection con11 - Running query on non encrypt table +connect (con11,localhost,root,,); +send call tde_db.query_table('tde_db.t_non_encrypt'); + +--connection default +--echo # Starting server with keyring plugin +--let $restart_hide_args=1 +let $restart_parameters = restart: --innodb_log_file_size=$LOG_FILE_SIZE --innodb_page_size=$START_PAGE_SIZE --early-plugin-load="keyring_file=$KEYRING_PLUGIN" --loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring $KEYRING_PLUGIN_OPT --innodb_undo_tablespaces=2 --innodb_undo_directory=$MYSQLD_UNDO_DATADIR --datadir=$MYSQLD_DATADIR_1; +--source include/kill_and_restart_mysqld.inc + + +--disconnect con1 +--disconnect con2 +--disconnect con3 +--disconnect con4 +--disconnect con5 +--disconnect con6 +--disconnect con7 +--disconnect con8 +--disconnect con9 +--disconnect con10 +--disconnect con11 + +--connection default +--replace_column 1 # +SELECT COUNT(*) > 1 FROM tde_db.t_encrypt; +--replace_column 1 # +SELECT COUNT(*) > 1 FROM tde_db.t_non_encrypt; + +# Run some load insert retart +--echo # In connection con1 - Running insert with redo_log_encrypt variable +connect (con1,localhost,root,,); +send call tde_db.populate_table_set_redo_encrypt('tde_db.t_encrypt'); + +--echo # In connection con2 - Running insert on non encrypt table +connect (con2,localhost,root,,); +send call tde_db.populate_table_set_redo_encrypt('tde_db.t_non_encrypt'); + +--sleep 2 +--disconnect con1 +--disconnect con2 +--connection default +DROP DATABASE tde_db; + +# restart the server with MTR default +--let $restart_parameters= +--source include/restart_mysqld.inc + +--echo # +--echo # Cleanup +--echo # +--remove_file $MYSQLTEST_VARDIR/tmp/bootstrap2.log +--remove_file $MYSQL_TMP_DIR/mysecret_keyring +--remove_file $BOOTSTRAP_SQL +--remove_file $SEARCH_FILE +--force-rmdir $MYSQL_TMP_DIR/datadir +--force-rmdir $MYSQL_TMP_DIR/innodb_undo_data_dir + +--disable_query_log +eval SET GLOBAL innodb_file_per_table=$old_innodb_file_per_table; +eval SET GLOBAL innodb_redo_log_encrypt=$old_innodb_redo_log_encrypt; +--enable_query_log diff --git a/mysql-test/suite/perfschema/r/show_sanity.result b/mysql-test/suite/perfschema/r/show_sanity.result index ad675f0dcf89..356a7664c5a2 100644 --- a/mysql-test/suite/perfschema/r/show_sanity.result +++ b/mysql-test/suite/perfschema/r/show_sanity.result @@ -414,6 +414,7 @@ SHOW_MODE SOURCE VARIABLE_NAME 5.6 I_S.SESSION_VARIABLES INNODB_COMPRESSED_COLUMNS_THRESHOLD 5.6 I_S.SESSION_VARIABLES INNODB_COMPRESSED_COLUMNS_ZIP_LEVEL 5.6 I_S.SESSION_VARIABLES INNODB_DEADLOCK_DETECT +5.6 I_S.SESSION_VARIABLES INNODB_REDO_LOG_ENCRYPT 5.6 I_S.SESSION_VARIABLES INNODB_STATS_INCLUDE_DELETE_MARKED 5.6 I_S.SESSION_VARIABLES KEYRING_OPERATIONS 5.6 I_S.SESSION_VARIABLES KILL_IDLE_TRANSACTION @@ -446,6 +447,7 @@ SHOW_MODE SOURCE VARIABLE_NAME 5.6 I_S.SESSION_VARIABLES INNODB_COMPRESSED_COLUMNS_THRESHOLD 5.6 I_S.SESSION_VARIABLES INNODB_COMPRESSED_COLUMNS_ZIP_LEVEL 5.6 I_S.SESSION_VARIABLES INNODB_DEADLOCK_DETECT +5.6 I_S.SESSION_VARIABLES INNODB_REDO_LOG_ENCRYPT 5.6 I_S.SESSION_VARIABLES INNODB_STATS_INCLUDE_DELETE_MARKED 5.6 I_S.SESSION_VARIABLES KEYRING_OPERATIONS 5.6 I_S.SESSION_VARIABLES KILL_IDLE_TRANSACTION diff --git a/mysql-test/suite/sys_vars/r/innodb_redo_log_encrypt_basic.result b/mysql-test/suite/sys_vars/r/innodb_redo_log_encrypt_basic.result new file mode 100644 index 000000000000..f4990b45f0b5 --- /dev/null +++ b/mysql-test/suite/sys_vars/r/innodb_redo_log_encrypt_basic.result @@ -0,0 +1,62 @@ +SET @start_global_value = @@global.innodb_redo_log_encrypt; +SELECT @start_global_value; +@start_global_value +off +select @@global.innodb_redo_log_encrypt in (0, 1); +@@global.innodb_redo_log_encrypt in (0, 1) +1 +Warnings: +Warning 1292 Truncated incorrect DOUBLE value: 'off' +select @@global.innodb_redo_log_encrypt; +@@global.innodb_redo_log_encrypt +off +select @@session.innodb_redo_log_encrypt; +ERROR HY000: Variable 'innodb_redo_log_encrypt' is a GLOBAL variable +show global variables like 'innodb_redo_log_encrypt'; +Variable_name Value +innodb_redo_log_encrypt off +show session variables like 'innodb_redo_log_encrypt'; +Variable_name Value +innodb_redo_log_encrypt off +select * from performance_schema.global_variables where variable_name='innodb_redo_log_encrypt'; +VARIABLE_NAME VARIABLE_VALUE +innodb_redo_log_encrypt off +select * from performance_schema.session_variables where variable_name='innodb_redo_log_encrypt'; +VARIABLE_NAME VARIABLE_VALUE +innodb_redo_log_encrypt off +set global innodb_redo_log_encrypt='MASTER_KEY'; +set global innodb_redo_log_encrypt='KEYRING_KEY'; +select * from performance_schema.global_variables where variable_name='innodb_redo_log_encrypt'; +VARIABLE_NAME VARIABLE_VALUE +innodb_redo_log_encrypt keyring_key +select * from performance_schema.session_variables where variable_name='innodb_redo_log_encrypt'; +VARIABLE_NAME VARIABLE_VALUE +innodb_redo_log_encrypt keyring_key +set @@global.innodb_redo_log_encrypt=0; +select @@global.innodb_redo_log_encrypt; +@@global.innodb_redo_log_encrypt +off +select * from performance_schema.global_variables where variable_name='innodb_redo_log_encrypt'; +VARIABLE_NAME VARIABLE_VALUE +innodb_redo_log_encrypt off +select * from performance_schema.session_variables where variable_name='innodb_redo_log_encrypt'; +VARIABLE_NAME VARIABLE_VALUE +innodb_redo_log_encrypt off +set session innodb_redo_log_encrypt='some'; +ERROR HY000: Variable 'innodb_redo_log_encrypt' is a GLOBAL variable and should be set with SET GLOBAL +set @@session.innodb_redo_log_encrypt='some'; +ERROR HY000: Variable 'innodb_redo_log_encrypt' is a GLOBAL variable and should be set with SET GLOBAL +set global innodb_redo_log_encrypt=1.1; +ERROR 42000: Incorrect argument type to variable 'innodb_redo_log_encrypt' +set global innodb_redo_log_encrypt='foo'; +ERROR 42000: Variable 'innodb_redo_log_encrypt' can't be set to the value of 'foo' +set global innodb_redo_log_encrypt=-2; +ERROR 42000: Variable 'innodb_redo_log_encrypt' can't be set to the value of '-2' +set global innodb_redo_log_encrypt=1e1; +ERROR 42000: Incorrect argument type to variable 'innodb_redo_log_encrypt' +set global innodb_redo_log_encrypt=5; +ERROR 42000: Variable 'innodb_redo_log_encrypt' can't be set to the value of '5' +SET @@global.innodb_redo_log_encrypt = @start_global_value; +SELECT @@global.innodb_redo_log_encrypt; +@@global.innodb_redo_log_encrypt +off diff --git a/mysql-test/suite/sys_vars/t/innodb_redo_log_encrypt_basic.test b/mysql-test/suite/sys_vars/t/innodb_redo_log_encrypt_basic.test new file mode 100644 index 000000000000..9093c7702775 --- /dev/null +++ b/mysql-test/suite/sys_vars/t/innodb_redo_log_encrypt_basic.test @@ -0,0 +1,64 @@ +--disable_query_log +call mtr.add_suppression("\\[Error\\] .*MY-\\d+.* Encryption can't find master key, please check the keyring plugin is loaded."); +call mtr.add_suppression("\\[ERROR\\] .*MY-\\d+.* Can't set redo log tablespace to be encrypted."); +--enable_query_log + +SET @start_global_value = @@global.innodb_redo_log_encrypt; +SELECT @start_global_value; + +# +# exists as global only +# +select @@global.innodb_redo_log_encrypt in (0, 1); +select @@global.innodb_redo_log_encrypt; +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +select @@session.innodb_redo_log_encrypt; +show global variables like 'innodb_redo_log_encrypt'; +show session variables like 'innodb_redo_log_encrypt'; +--disable_warnings +select * from performance_schema.global_variables where variable_name='innodb_redo_log_encrypt'; +select * from performance_schema.session_variables where variable_name='innodb_redo_log_encrypt'; +--enable_warnings + +# +# show that it's writable +# +set global innodb_redo_log_encrypt='MASTER_KEY'; +set global innodb_redo_log_encrypt='KEYRING_KEY'; +--let $wait_condition=SELECT @@global.innodb_redo_log_encrypt = 0 +--source include/wait_condition.inc +--disable_warnings +select * from performance_schema.global_variables where variable_name='innodb_redo_log_encrypt'; +select * from performance_schema.session_variables where variable_name='innodb_redo_log_encrypt'; +--enable_warnings +set @@global.innodb_redo_log_encrypt=0; +select @@global.innodb_redo_log_encrypt; +--disable_warnings +select * from performance_schema.global_variables where variable_name='innodb_redo_log_encrypt'; +select * from performance_schema.session_variables where variable_name='innodb_redo_log_encrypt'; +--enable_warnings +--error ER_GLOBAL_VARIABLE +set session innodb_redo_log_encrypt='some'; +--error ER_GLOBAL_VARIABLE +set @@session.innodb_redo_log_encrypt='some'; + +# +# incorrect types +# +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_redo_log_encrypt=1.1; +--error ER_WRONG_VALUE_FOR_VAR +set global innodb_redo_log_encrypt='foo'; +--error ER_WRONG_VALUE_FOR_VAR +set global innodb_redo_log_encrypt=-2; +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_redo_log_encrypt=1e1; +--error ER_WRONG_VALUE_FOR_VAR +set global innodb_redo_log_encrypt=5; + +# +# Cleanup +# + +SET @@global.innodb_redo_log_encrypt = @start_global_value; +SELECT @@global.innodb_redo_log_encrypt; diff --git a/mysys/system_key.c b/mysys/system_key.c index c100b475894a..508aee2ffec7 100644 --- a/mysys/system_key.c +++ b/mysys/system_key.c @@ -31,7 +31,8 @@ struct Valid_percona_system_key system key's name and system key's version. */ struct Valid_percona_system_key valid_percona_system_keys[] = { {PERCONA_BINLOG_KEY_NAME, 16, FALSE}, - {PERCONA_INNODB_KEY_NAME, 32, TRUE} }; + {PERCONA_INNODB_KEY_NAME, 32, TRUE}, + {PERCONA_REDO_KEY_NAME, 16, FALSE}}; const size_t valid_percona_system_keys_size = array_elements(valid_percona_system_keys); my_bool is_valid_percona_system_key(const char *key_name, size_t *key_length) diff --git a/storage/innobase/fil/fil0fil.cc b/storage/innobase/fil/fil0fil.cc index 2669bb9a5ee9..562c3aa67b04 100644 --- a/storage/innobase/fil/fil0fil.cc +++ b/storage/innobase/fil/fil0fil.cc @@ -389,7 +389,6 @@ fil_space_get( mutex_enter(&fil_system->mutex); fil_space_t* space = fil_space_get_by_id(id); mutex_exit(&fil_system->mutex); - ut_ad(space == NULL || space->purpose != FIL_TYPE_LOG); return(space); } #ifndef UNIV_HOTBACKUP @@ -1745,6 +1744,15 @@ fil_space_close( mutex_exit(&fil_system->mutex); } +/** Close each fil_node_t of a fil_space_t if open. +@param[in] id space id */ +void +fil_space_close_by_id( + ulint id) +{ + fil_space_close(fil_space_get_by_id(id)->name); +} + /** Returns the page size of the space and whether it is compressed or not. The tablespace must be cached in the memory cache. @param[in] id space id @@ -5895,7 +5903,7 @@ fil_io_set_encryption( /* For writing redo log, if encryption for redo log is disabled, skip setting encryption. */ - if (req_type.is_log() && req_type.is_write()) { + if (req_type.is_log() && req_type.is_write() && srv_redo_log_encrypt == REDO_LOG_ENCRYPT_OFF) { req_type.clear_encrypted(); return; } @@ -7904,12 +7912,14 @@ fil_set_encryption( } ut_ad(algorithm != Encryption::NONE); + space->encryption_type = algorithm; if (space->crypt_data == NULL) space->flags |= FSP_FLAGS_MASK_ENCRYPTION; if (key == NULL) { Encryption::random_value(space->encryption_key); + space->encryption_key_version = REDO_LOG_ENCRYPT_NO_VERSION; } else { memcpy(space->encryption_key, key, ENCRYPTION_KEY_LEN); @@ -7960,9 +7970,6 @@ fil_temp_update_encryption( return(err); } -/** Default master key id for bootstrap */ -static const ulint ENCRYPTION_DEFAULT_MASTER_KEY_ID = 0; - /** Rotate the tablespace key by new master key. @param[in] space tablespace object @return true if the re-encrypt suceeds */ @@ -8006,9 +8013,11 @@ fil_encryption_rotate() for (space = UT_LIST_GET_FIRST(fil_system->space_list); space != NULL; ) { /* Skip unencypted tablespaces. */ - if (srv_is_undo_tablespace(space->id) - || space->crypt_data - || space->purpose == FIL_TYPE_LOG) { + /* Encrypted redo log tablespaces are handled in function + log_rotate_encryption. */ + if (fsp_is_system_or_temp_tablespace(space->id) + || space->purpose == FIL_TYPE_LOG + || space->crypt_data) { space = UT_LIST_GET_NEXT(space_list, space); continue; } diff --git a/storage/innobase/fsp/fsp0fsp.cc b/storage/innobase/fsp/fsp0fsp.cc index a7dc972e93da..9d655ff6ed0c 100644 --- a/storage/innobase/fsp/fsp0fsp.cc +++ b/storage/innobase/fsp/fsp0fsp.cc @@ -212,6 +212,15 @@ fsp_flags_to_dict_tf( return(flags); } + +bool +fsp_is_system_or_temp_tablespace(uint32 space_id) +{ + return(space_id == srv_sys_space.space_id() + || fsp_is_system_temporary(space_id)); +} + + #endif /* !UNIV_HOTBACKUP */ /** Validate the tablespace flags. @@ -880,13 +889,54 @@ fsp_header_get_encryption_offset( return offset; } +bool +fsp_header_fill_encryption_info( + uint key_version, + byte* iv, + byte* encrypt_info) +{ + byte* ptr = encrypt_info; + ulint crc; + + memset(encrypt_info, 0, ENCRYPTION_INFO_SIZE_V2); + + memcpy(ptr, ENCRYPTION_KEY_MAGIC_RK, ENCRYPTION_MAGIC_SIZE); + ptr += ENCRYPTION_MAGIC_SIZE; + + /* Write master key id. */ + mach_write_to_4(ptr, key_version); + ptr += sizeof(ulint); + + /* Write server uuid. */ + memcpy(ptr, Encryption::uuid, ENCRYPTION_SERVER_UUID_LEN); + ptr += ENCRYPTION_SERVER_UUID_LEN; + + /* Write tablespace iv. */ + memcpy(ptr, + iv, + ENCRYPTION_KEY_LEN); + + ptr += ENCRYPTION_KEY_LEN * 2; + + /* Write checksum bytes. */ + crc = ut_crc32(encrypt_info, ENCRYPTION_KEY_LEN * 2); + mach_write_to_4(ptr, crc); + +#ifdef UNIV_ENCRYPT_DEBUG + fprintf(stderr, "Encrypting log with key version: %u\n", key_version); +#endif + + return true; +} + /** Fill the encryption info. @param[in] space tablespace @param[in,out] encrypt_info buffer for encrypt key. @return true if success. */ bool fsp_header_fill_encryption_info( - fil_space_t* space, + byte* key, + byte* iv, byte* encrypt_info) { byte* ptr; @@ -896,10 +946,6 @@ fsp_header_fill_encryption_info( byte key_info[ENCRYPTION_KEY_LEN * 2]; ulint crc; Encryption::Version version; -#ifdef UNIV_ENCRYPT_DEBUG - const byte* data; - ulint i; -#endif /* Get master key from key ring */ Encryption::get_master_key(&master_key_id, &master_key, &version); @@ -940,30 +986,14 @@ fsp_header_fill_encryption_info( /* Write tablespace key to temp space. */ memcpy(key_info, - space->encryption_key, + key, ENCRYPTION_KEY_LEN); /* Write tablespace iv to temp space. */ memcpy(key_info + ENCRYPTION_KEY_LEN, - space->encryption_iv, + iv, ENCRYPTION_KEY_LEN); -#ifdef UNIV_ENCRYPT_DEBUG - fprintf(stderr, "Set %lu:%lu ",space->id, - Encryption::master_key_id); - for (data = (const byte*) master_key, i = 0; - i < ENCRYPTION_KEY_LEN; i++) - fprintf(stderr, "%02lx", (ulong)*data++); - fprintf(stderr, " "); - for (data = (const byte*) space->encryption_key, - i = 0; i < ENCRYPTION_KEY_LEN; i++) - fprintf(stderr, "%02lx", (ulong)*data++); - fprintf(stderr, " "); - for (data = (const byte*) space->encryption_iv, - i = 0; i < ENCRYPTION_KEY_LEN; i++) - fprintf(stderr, "%02lx", (ulong)*data++); - fprintf(stderr, "\n"); -#endif /* Encrypt tablespace key and iv. */ elen = my_aes_encrypt( key_info, @@ -1014,8 +1044,8 @@ fsp_header_rotate_encryption( return(false);); /* Fill encryption info. */ - if (!fsp_header_fill_encryption_info(space, - encrypt_info)) { + if (!fsp_header_fill_encryption_info(space->encryption_key, + space->encryption_iv, encrypt_info)) { return(false); } @@ -1066,7 +1096,7 @@ fsp_enable_encryption( memset(encrypt_info, 0, ENCRYPTION_INFO_SIZE_V2); - if (!fsp_header_fill_encryption_info(space, encrypt_info)) { + if (!fsp_header_fill_encryption_info(space->encryption_key, space->encryption_iv, encrypt_info)) { return(false); } @@ -1171,8 +1201,8 @@ fsp_header_init( if (offset == 0) return(false); - if (!fsp_header_fill_encryption_info(space, - encryption_info)) { + if (!fsp_header_fill_encryption_info(space->encryption_key, + space->encryption_iv, encryption_info)) { space->encryption_type = Encryption::NONE; memset(space->encryption_key, 0, ENCRYPTION_KEY_LEN); memset(space->encryption_iv, 0, ENCRYPTION_KEY_LEN); diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index 1b1d718bbea7..0cb965d6ecd8 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -337,6 +337,19 @@ static TYPELIB innodb_default_row_format_typelib = { NULL }; +static const char* redo_log_encrypt_names[] = { + "off", + "master_key", + "keyring_key", + NullS +}; + +static TYPELIB redo_log_encrypt_typelib = { + array_elements(redo_log_encrypt_names) - 1, + "redo_log_encrypt_typelib", + redo_log_encrypt_names, + NULL +}; /* The following counter is used to convey information to InnoDB about server activity: in case of normal DML ops it is not sensible to call srv_active_wake_master_thread after each @@ -22388,6 +22401,11 @@ static MYSQL_SYSVAR_ENUM(default_row_format, innodb_default_row_format, NULL, NULL, DEFAULT_ROW_FORMAT_DYNAMIC, &innodb_default_row_format_typelib); +static MYSQL_SYSVAR_ENUM(redo_log_encrypt, srv_redo_log_encrypt, + PLUGIN_VAR_OPCMDARG, + "Enable or disable Encryption of REDO tablespace. Possible values: OFF, MASTER_KEY, KEYRING_KEY.", + NULL, NULL, REDO_LOG_ENCRYPT_OFF, &redo_log_encrypt_typelib); + #ifdef UNIV_DEBUG static MYSQL_SYSVAR_UINT(trx_rseg_n_slots_debug, trx_rseg_n_slots_debug, PLUGIN_VAR_RQCMDARG, @@ -22698,6 +22716,7 @@ static struct st_mysql_sys_var* innobase_system_variables[]= { MYSQL_SYSVAR(compression_failure_threshold_pct), MYSQL_SYSVAR(compression_pad_pct_max), MYSQL_SYSVAR(default_row_format), + MYSQL_SYSVAR(redo_log_encrypt), #ifdef UNIV_DEBUG MYSQL_SYSVAR(trx_rseg_n_slots_debug), MYSQL_SYSVAR(limit_optimistic_insert_debug), diff --git a/storage/innobase/include/fil0fil.h b/storage/innobase/include/fil0fil.h index 50862960b9f1..7d6d2c1b88a6 100644 --- a/storage/innobase/include/fil0fil.h +++ b/storage/innobase/include/fil0fil.h @@ -52,6 +52,8 @@ Created 10/25/1995 Heikki Tuuri /** Structure containing encryption specification */ struct fil_space_crypt_t; +#define REDO_LOG_ENCRYPT_NO_VERSION 0 + #ifdef UNIV_HOTBACKUP #include /** determine if file is intermediate / temporary.These files are created during @@ -251,6 +253,9 @@ struct fil_space_t { /** Encrypt key length*/ ulint encryption_klen; + /** Encrypt key version*/ + ulint encryption_key_version; + /** Encrypt initial vector */ byte encryption_iv[ENCRYPTION_KEY_LEN]; diff --git a/storage/innobase/include/fsp0fsp.h b/storage/innobase/include/fsp0fsp.h index af18665656ad..91779f5a065e 100644 --- a/storage/innobase/include/fsp0fsp.h +++ b/storage/innobase/include/fsp0fsp.h @@ -380,6 +380,24 @@ fsp_header_rotate_encryption( byte* encrypt_info, mtr_t* mtr); +MY_NODISCARD +bool +fsp_header_fill_encryption_info( + byte* key, byte* iv, + byte* encrypt_info); + +MY_NODISCARD +bool +fsp_header_fill_encryption_info( + uint key_version, + byte* iv, + byte* encrypt_info); + +MY_NODISCARD +bool +fsp_is_system_or_temp_tablespace( + uint32 space_id); + /** Initializes the space header of a new created space and creates also the insert buffer tree root if space == 0. @param[in] space_id space id diff --git a/storage/innobase/include/log0log.h b/storage/innobase/include/log0log.h index de5aa65fb5c2..8456dfe60ae8 100644 --- a/storage/innobase/include/log0log.h +++ b/storage/innobase/include/log0log.h @@ -139,7 +139,28 @@ Closes the log. @return lsn */ lsn_t log_close(void); -/*===========*/ + +/** Write the encryption info into the log file header(the 3rd block). +It just need to flush the file header block with current master key. +@param[in] key encryption key +@param[in] iv encryption iv +@param[in] is_boot if it is for bootstrap +@return true if success. */ +bool +log_write_encryption( + byte* key, + byte* iv); + +/** Rotate the redo log encryption + * It will re-encrypt the redo log encryption metadata and write it to + * redo log file header. + * @return true if success. */ +bool +log_rotate_encryption(); + +/** Enables redo log encryption. */ +void +log_enable_encryption_if_set(); /************************************************************//** Gets the current lsn. @return current lsn */ @@ -187,6 +208,12 @@ void log_io_complete( /*============*/ log_group_t* group); /*!< in: log group */ +/* Read the first log file header to get the encryption +information if it exist. +@return true if success */ +MY_NODISCARD +bool +log_read_encryption(); /******************************************************//** This function is called, e.g., when a transaction wants to commit. It checks that the log has been written to the log file up to the last log entry written @@ -366,9 +393,24 @@ ulint log_block_calc_checksum_crc32( const byte* block); +/** Gets a log block encrypt bit. +@param[in] log_block log block +@return TRUE if this block was encrypted */ +MY_NODISCARD +UNIV_INLINE +bool +log_block_get_encrypt_bit( + const byte* log_block); /** Calculates the checksum for a log block using the "no-op" algorithm. @param[in] block the redo log block @return the calculated checksum value */ +/** Sets the log block encrypt bit. +@param[in,out] log_block log block +@param[in] val value to set */ +UNIV_INLINE +void +log_block_set_encrypt_bit(byte* log_block, bool val); + UNIV_INLINE ulint log_block_calc_checksum_none(const byte* block); @@ -509,6 +551,11 @@ extern my_bool innodb_log_checksums; #define LOG_BLOCK_FLUSH_BIT_MASK 0x80000000UL /* mask used to get the highest bit in the preceding field */ +#define LOG_BLOCK_ENCRYPT_BIT_MASK 0x8000UL + /* mask used to get the highest bit in + the data len field, this bit is to + indicate if this block is encrypted or + not */ #define LOG_BLOCK_HDR_DATA_LEN 4 /* number of bytes of log written to this block */ #define LOG_BLOCK_FIRST_REC_GROUP 6 /* offset of the first start of an @@ -555,6 +602,7 @@ because InnoDB never supported more than one copy of the redo log. */ LOG_FILE_START_LSN started here, 4 bytes earlier than LOG_HEADER_START_LSN, which the LOG_FILE_START_LSN was renamed to. */ #define LOG_HEADER_PAD1 4 +#define LOG_HEADER_ENCRYPT_VER 4 /** LSN of the start of data in this log file (with format version 1; in format version 0, it was called LOG_FILE_START_LSN and at offset 4). */ #define LOG_HEADER_START_LSN 8 diff --git a/storage/innobase/include/log0log.ic b/storage/innobase/include/log0log.ic index 5194fa3047e0..3a8a27f6cb51 100644 --- a/storage/innobase/include/log0log.ic +++ b/storage/innobase/include/log0log.ic @@ -73,6 +73,40 @@ log_block_set_flush_bit( mach_write_to_4(log_block + LOG_BLOCK_HDR_NO, field); } +/** Gets a log block encrypt bit. +@param[in] log_block log block +@return TRUE if this block was encrypted */ +UNIV_INLINE +bool +log_block_get_encrypt_bit( + const byte* log_block) +{ + return (LOG_BLOCK_ENCRYPT_BIT_MASK + & mach_read_from_2(log_block + LOG_BLOCK_HDR_DATA_LEN)); +} + +/** Sets the log block encrypt bit. +@param[in,out] log_block log block +@param[in] val value to set */ +UNIV_INLINE +void +log_block_set_encrypt_bit( + byte* log_block, + bool val) +{ + ulint field; + + field = mach_read_from_2(log_block + LOG_BLOCK_HDR_DATA_LEN); + + if (val) { + field = field | LOG_BLOCK_ENCRYPT_BIT_MASK; + } else { + field = field & ~LOG_BLOCK_ENCRYPT_BIT_MASK; + } + + mach_write_to_2(log_block + LOG_BLOCK_HDR_DATA_LEN, field); +} + /************************************************************//** Gets a log block number stored in the header. @return log block number stored in the block header */ diff --git a/storage/innobase/include/os0file.h b/storage/innobase/include/os0file.h index 70f91732c806..d91283b83571 100644 --- a/storage/innobase/include/os0file.h +++ b/storage/innobase/include/os0file.h @@ -357,6 +357,10 @@ static const char ENCRYPTION_KEY_MAGIC_V2[] = "lCB"; static const char ENCRYPTION_KEY_MAGIC_PS_V1[] = "PSA"; +/** Encryption magic bytes for rotated redo log encryption, it's for checking the +encryption information version. */ +static const char ENCRYPTION_KEY_MAGIC_RK[] = "lCR"; + /** Encryption master key prifix */ static const char ENCRYPTION_MASTER_KEY_PRIFIX[] = "INNODBKey"; @@ -396,6 +400,9 @@ static const ulint ENCRYPTION_INFO_SIZE_V2 = (ENCRYPTION_MAGIC_SIZE \ class IORequest; +static const char ENCRYPTION_DEFAULT_MASTER_KEY[] = "DefaultMasterKey"; +static const ulint ENCRYPTION_DEFAULT_MASTER_KEY_ID = 0; + /** Encryption algorithm. */ struct Encryption { @@ -528,6 +535,12 @@ struct Encryption { static bool is_encrypted_page(const byte* page) MY_ATTRIBUTE((warn_unused_result)); + /** Check if a log block is encrypted or not + @param[in] block block which need to check + @return true if it is an encrypted block */ + static bool is_encrypted_log(const byte* block) + MY_ATTRIBUTE((warn_unused_result)); + /** Check the encryption option and set it @param[in] option encryption option @param[in/out] encryption The encryption type @@ -621,6 +634,52 @@ struct Encryption { static bool can_page_be_keyring_encrypted(ulint page_type); static bool can_page_be_keyring_encrypted(byte* page); + /** Fill the encryption information. + @param[in] key encryption key + @param[in] iv encryption iv + @param[in,out] encrypt_info encryption information + @return true if success. */ + MY_NODISCARD + static bool fill_encryption_info(byte* key, + byte* iv, + byte* encrypt_info); + + /** Decoding the encryption info from the first page of a tablespace. + @param[in,out] key key + @param[in,out] iv iv + @param[in] encryption_info encrytion info. + @return true if success */ + MY_NODISCARD + static bool decode_encryption_info(byte* key, + byte* iv, + byte* encryption_info); + + /** Encrypt the redo log block. + @param[in] type IORequest + @param[in,out] src_ptr log block which need to encrypt + @param[in,out] dst_ptr destination area + @return true if success. */ + MY_NODISCARD + bool encrypt_log_block( + const IORequest& type, + byte* src_ptr, + byte* dst_ptr); + + /** Encrypt the redo log data contents. + @param[in] type IORequest + @param[in,out] src page data which need to encrypt + @param[in] src_len size of the source in bytes + @param[in,out] dst destination area + @param[in,out] dst_len size of the destination in bytes + @return buffer data, dst_len will have the length of the data */ + MY_NODISCARD + byte* encrypt_log( + const IORequest& type, + byte* src, + ulint src_len, + byte* dst, + ulint* dst_len); + /** Encrypt the page data contents. Page type can't be FIL_PAGE_ENCRYPTED, FIL_PAGE_COMPRESSED_AND_ENCRYPTED, FIL_PAGE_ENCRYPTED_RTREE. @@ -638,6 +697,34 @@ struct Encryption { ulint* dst_len) MY_ATTRIBUTE((warn_unused_result)); + /** Decrypt the log block. + @param[in] type IORequest + @param[in,out] src data read from disk, decrypted data will be + copied to this page + @param[in,out] dst scratch area to use for decryption + @return DB_SUCCESS or error code */ + MY_NODISCARD + dberr_t decrypt_log_block( + const IORequest& type, + byte* src, + byte* dst); + + /** Decrypt the log data contents. + @param[in] type IORequest + @param[in,out] src data read from disk, decrypted data will be + copied to this page + @param[in] src_len source data length + @param[in,out] dst scratch area to use for decryption + @param[in] dst_len size of the scratch area in bytes + @return DB_SUCCESS or error code */ + MY_NODISCARD + dberr_t decrypt_log( + const IORequest& type, + byte* src, + ulint src_len, + byte* dst, + ulint dst_len); + /** Decrypt the page data contents. Page type must be FIL_PAGE_ENCRYPTED, FIL_PAGE_COMPRESSED_AND_ENCRYPTED, FIL_PAGE_ENCRYPTED_RTREE, if not then the source contents are diff --git a/storage/innobase/include/srv0srv.h b/storage/innobase/include/srv0srv.h index a9b88178954d..04d7ee63d972 100644 --- a/storage/innobase/include/srv0srv.h +++ b/storage/innobase/include/srv0srv.h @@ -346,6 +346,15 @@ extern char* srv_log_group_home_dir; /** Maximum number of srv_n_log_files, or innodb_log_files_in_group */ #define SRV_N_LOG_FILES_MAX 100 extern ulong srv_n_log_files; + +extern ulong srv_redo_log_encrypt; + +enum redo_log_encrypt_enum { + REDO_LOG_ENCRYPT_OFF = 0, + REDO_LOG_ENCRYPT_MK = 1, + REDO_LOG_ENCRYPT_RK = 2, +}; + /** At startup, this is the current redo log file size. During startup, if this is different from srv_log_file_size_requested (innodb_log_file_size), the redo log will be rebuilt and this size diff --git a/storage/innobase/log/log0log.cc b/storage/innobase/log/log0log.cc index 801b33bd4a85..ce687cb95466 100644 --- a/storage/innobase/log/log0log.cc +++ b/storage/innobase/log/log0log.cc @@ -60,6 +60,8 @@ Created 12/9/1995 Heikki Tuuri #include "sync0sync.h" #endif /* !UNIV_HOTBACKUP */ +#include "system_key.h" + /* General philosophy of InnoDB redo-logs: @@ -1074,6 +1076,422 @@ log_group_file_header_flush( srv_stats.os_log_pending_writes.dec(); } +/* Read the first log file header to get the encryption. It's in the +3rd block. +@return true if success */ +bool +log_read_encryption() +{ + byte key[ENCRYPTION_KEY_LEN]; + byte iv[ENCRYPTION_KEY_LEN]; + + byte* log_block_buf_ptr = static_cast(ut_malloc_nokey( + 2 * OS_FILE_LOG_BLOCK_SIZE)); + memset(log_block_buf_ptr, 0, 2 * OS_FILE_LOG_BLOCK_SIZE); + byte* log_block_buf = static_cast( + ut_align(log_block_buf_ptr, OS_FILE_LOG_BLOCK_SIZE)); + + ulint log_space_id = SRV_LOG_SPACE_FIRST_ID; + const page_id_t page_id(log_space_id, 0); + fil_io(IORequestLogRead, true, page_id, univ_page_size, + LOG_CHECKPOINT_1 + OS_FILE_LOG_BLOCK_SIZE, + OS_FILE_LOG_BLOCK_SIZE, log_block_buf, NULL); + + bool encryption_magic = false; + bool encrypted_log = false; + + if (memcmp(log_block_buf + LOG_HEADER_CREATOR_END, + ENCRYPTION_KEY_MAGIC_RK, ENCRYPTION_MAGIC_SIZE) == 0) { + encryption_magic = true; + + /* Make sure the keyring is loaded. */ + if (!Encryption::check_keyring()) { + ut_free(log_block_buf_ptr); + ib::error() + << "Redo log was encrypted," + << " but keyring plugin is not loaded."; + return(false); + } + + unsigned char* info_ptr = log_block_buf + LOG_HEADER_CREATOR_END + ENCRYPTION_MAGIC_SIZE; + uint version = mach_read_from_4(info_ptr); + + memcpy(iv, info_ptr + ENCRYPTION_SERVER_UUID_LEN + 8, ENCRYPTION_KEY_LEN); + +#ifdef UNIV_ENCRYPT_DEBUG + fprintf(stderr, "Using redo log encryption key version: %u\n", version); +#endif + + char *key_type = NULL; + char* rkey = NULL; + std::ostringstream percona_redo_with_ver_ss; + percona_redo_with_ver_ss << PERCONA_REDO_KEY_NAME << ':' << version; + size_t klen; + if (my_key_fetch(percona_redo_with_ver_ss.str().c_str(), &key_type, NULL, + reinterpret_cast(&rkey), &klen) || + key == NULL) + { + ib::error() << "Couldn't fetch redo log encryption key: " << percona_redo_with_ver_ss.str() << "."; + } else if(key_type == NULL || strncmp(key_type, "AES", 3) != 0) { + ib::error() << "Unknown redo log encryption type: " << key_type << "."; + } else { + encrypted_log = true; + memcpy(key, rkey, ENCRYPTION_KEY_LEN); + } + my_free(key_type); + my_free(rkey); + } + + if (memcmp(log_block_buf + LOG_HEADER_CREATOR_END, + ENCRYPTION_KEY_MAGIC_V2, ENCRYPTION_MAGIC_SIZE) == 0) { + encryption_magic = true; + + /* Make sure the keyring is loaded. */ + if (!Encryption::check_keyring()) { + ib::error() + << "Redo log was encrypted," + << " but keyring plugin is not loaded."; + } else if (Encryption::decode_encryption_info( + key, iv, + log_block_buf + LOG_HEADER_CREATOR_END)) { + encrypted_log = true; + } + + } + if (encrypted_log) { + /* If redo log encryption is enabled, set the + space flag. Otherwise, we just fill the encryption + information to space object for decrypting old + redo log blocks. */ + fil_space_t* space = fil_space_get(log_space_id); + space->flags |= FSP_FLAGS_MASK_ENCRYPTION; + dberr_t err = fil_set_encryption(space->id, + Encryption::AES, + key, iv); + + if (err == DB_SUCCESS) { + ut_free(log_block_buf_ptr); + ib::info() << "Read redo log encryption" + << " metadata successful."; + return(true); + } else { + ut_free(log_block_buf_ptr); + ib::error() + << "Can't set redo log tablespace" + << " encryption metadata."; + return(false); + } + } else if (encryption_magic) { + ut_free(log_block_buf_ptr); + ib::error() << "Cannot read the encryption" + " information in log file header, please" + " check if keyring plugin loaded and" + " the key file exists."; + return(false); + } + + ut_free(log_block_buf_ptr); + return(true); +} + + +/** Writes encryption information to log header. +@param[in,out] buf log file header +@param[in] key encryption key +@param[in] iv encryption iv */ +static +bool +log_file_header_fill_encryption( + byte* buf, + byte* key, + byte* iv) +{ + byte encryption_info[ENCRYPTION_INFO_SIZE_V2]; + + if (!fsp_header_fill_encryption_info(key, + iv, encryption_info)) { + return(false); + } + + ut_ad(LOG_HEADER_CREATOR_END + ENCRYPTION_INFO_SIZE_V2 + < OS_FILE_LOG_BLOCK_SIZE); + + memcpy(buf + LOG_HEADER_CREATOR_END, + encryption_info, + ENCRYPTION_INFO_SIZE_V2); + + return(true); +} + +static +bool +log_file_header_fill_encryption( + byte* buf, + ulint key_version, + byte* iv) +{ + byte encryption_info[ENCRYPTION_INFO_SIZE_V2] = {}; + + if (!fsp_header_fill_encryption_info(key_version, iv, + encryption_info)) { + return(false); + } + + ut_ad(LOG_HEADER_CREATOR_END + ENCRYPTION_INFO_SIZE_V2 + < OS_FILE_LOG_BLOCK_SIZE); + + memcpy(buf + LOG_HEADER_CREATOR_END, + encryption_info, + ENCRYPTION_INFO_SIZE_V2); + + return(true); +} + +/** Write the encryption info into the log file header(the 3rd block). +It just need to flush the file header block with current master key. +@param[in] key encryption key +@param[in] iv encryption iv +@return true if success. */ +bool +log_write_encryption( + byte* key, + byte* iv) +{ + const page_id_t page_id(SRV_LOG_SPACE_FIRST_ID, 0); + byte* log_block_buf_ptr; + byte* log_block_buf; + ulint version = 1; + + log_block_buf_ptr = static_cast(ut_malloc_nokey( + 2 * OS_FILE_LOG_BLOCK_SIZE)); + memset(log_block_buf_ptr, 0, 2 * OS_FILE_LOG_BLOCK_SIZE); + log_block_buf = static_cast( + ut_align(log_block_buf_ptr, OS_FILE_LOG_BLOCK_SIZE)); + + if (key == NULL && iv == NULL) { + fil_space_t* space = fil_space_get( + SRV_LOG_SPACE_FIRST_ID); + + key = space->encryption_key; + iv = space->encryption_iv; + version = space->encryption_key_version; + } + + log_write_mutex_enter(); + if (srv_redo_log_encrypt == REDO_LOG_ENCRYPT_MK) { + if (!log_file_header_fill_encryption(log_block_buf, + key, + iv)) { + ut_free(log_block_buf_ptr); + log_write_mutex_exit(); + return(false); + } + } else if (srv_redo_log_encrypt == REDO_LOG_ENCRYPT_RK) { + if (!log_file_header_fill_encryption(log_block_buf, + version, + iv)) { + ut_free(log_block_buf_ptr); + log_write_mutex_exit(); + return(false); + } + } else { + ut_ad(0); + } + + log_sys->n_log_ios++; + + MONITOR_INC(MONITOR_LOG_IO); + + srv_stats.os_log_pending_writes.inc(); + + fil_io(IORequestLogWrite, true, + page_id, + univ_page_size, + LOG_CHECKPOINT_1 + OS_FILE_LOG_BLOCK_SIZE, + OS_FILE_LOG_BLOCK_SIZE, log_block_buf, NULL); + + srv_stats.os_log_pending_writes.dec(); + log_write_mutex_exit(); + + ut_free(log_block_buf_ptr); + return(true); +} + +/** Rotate the redo log encryption +It will re-encrypt the redo log encryption metadata and write it to +redo log file header. +@return true if success. */ +bool +log_rotate_encryption() { + fil_space_t* space = fil_space_get(SRV_LOG_SPACE_FIRST_ID); + if (!FSP_FLAGS_GET_ENCRYPTION(space->flags)) { + return(true); + } + /* Rotate log tablespace */ + return(log_write_encryption(NULL, NULL)); +} + +/** Check the redo log encryption is enabled or not. +It will try to enable the redo log encryption and write the metadata to +redo log file header. */ +void +log_enable_encryption_if_set() +{ + fil_space_t* space = fil_space_get(SRV_LOG_SPACE_FIRST_ID); + + if (srv_shutdown_state != SRV_SHUTDOWN_NONE) { + return; + } + + /* Check encryption for redo log is enabled or not. If it's + enabled, we will start to encrypt the redo log block from now on. + Note: We need the server_uuid initialized, otherwise, the keyname will + not contains server uuid. */ + if (srv_redo_log_encrypt != REDO_LOG_ENCRYPT_OFF + && !FSP_FLAGS_GET_ENCRYPTION(space->flags) + && strlen(server_uuid) > 0) { + byte key[ENCRYPTION_KEY_LEN]; + byte iv[ENCRYPTION_KEY_LEN]; + + if (srv_read_only_mode) { + srv_redo_log_encrypt = REDO_LOG_ENCRYPT_OFF; + ib::error() << "Can't set redo log tablespace to be" + << " encrypted in read-only mode."; + return; + } + + bool encryption_enabled = false; + Encryption::random_value(iv); + + uint version = 1; + + if (srv_redo_log_encrypt == REDO_LOG_ENCRYPT_MK) { + Encryption::random_value(key); + encryption_enabled = true; + if (!log_write_encryption(key, iv)) { + srv_redo_log_encrypt = REDO_LOG_ENCRYPT_OFF; + ib::error() << "Can't set redo log" + << " tablespace to be" + << " encrypted."; + encryption_enabled = false; + } + } else if (srv_redo_log_encrypt == REDO_LOG_ENCRYPT_RK) { + // load latest key & write version + + char *redo_key_type = NULL; + byte *rkey = NULL; + size_t klen = 0; + + encryption_enabled = true; + + if (my_key_fetch(PERCONA_REDO_KEY_NAME, &redo_key_type, NULL, + reinterpret_cast(&rkey), &klen) || rkey == NULL) + { + if (my_key_generate(PERCONA_REDO_KEY_NAME, "AES", NULL, ENCRYPTION_KEY_LEN)) { + ib::error() << "Redo log key generation failed."; + encryption_enabled = false; + } else if (my_key_fetch(PERCONA_REDO_KEY_NAME, &redo_key_type, NULL, + reinterpret_cast(&rkey), &klen)) { + ib::error() << "Couldn't fetch newly generated redo key."; + encryption_enabled = false; + } else { + DBUG_ASSERT(rkey != NULL); + byte *rkey2 = NULL; + size_t klen2 = 0; + bool err = (parse_system_key(rkey, klen, &version, &rkey2, &klen2) + == reinterpret_cast(NullS)); + ut_ad(klen2 == ENCRYPTION_KEY_LEN); + if (err) { + encryption_enabled = false; + } else { + memcpy(key, rkey2, ENCRYPTION_KEY_LEN); + } + } + } + + ut_ad(redo_key_type && strcmp(redo_key_type, "AES") == 0); + my_free(redo_key_type); + +#ifdef UNIV_ENCRYPT_DEBUG + fprintf(stderr, "Fetched redo key: %s.\n", key); +#endif + + if (encryption_enabled && !log_write_encryption(key, iv)) { + srv_redo_log_encrypt = REDO_LOG_ENCRYPT_OFF; + ib::error() << "Can't set redo log" + << " tablespace to be" + << " encrypted."; + encryption_enabled = false; + } + } + + if (encryption_enabled) { + space->flags |= + FSP_FLAGS_MASK_ENCRYPTION; + dberr_t err = fil_set_encryption( + space->id, Encryption::AES, + key, iv); + space->encryption_key_version = version; + if (err != DB_SUCCESS) { + srv_redo_log_encrypt = REDO_LOG_ENCRYPT_OFF; + ib::warn() << "Can't set redo log" + << " tablespace to be" + << " encrypted."; + } else { + ib::info() << "Redo log encryption is" + << " enabled."; + } + } + } + + /* If the redo log space is using default key, rotate it. + We also need the server_uuid initialized. */ + if (space->encryption_type != Encryption::NONE + && Encryption::master_key_id == ENCRYPTION_DEFAULT_MASTER_KEY_ID + && !srv_read_only_mode + && strlen(server_uuid) > 0 + && srv_redo_log_encrypt == REDO_LOG_ENCRYPT_MK) { + ut_ad(FSP_FLAGS_GET_ENCRYPTION(space->flags)); + + log_write_encryption(NULL, NULL); + } + + if (space->encryption_type != Encryption::NONE + && space->encryption_key_version ==REDO_LOG_ENCRYPT_NO_VERSION + && !srv_read_only_mode + && strlen(server_uuid) > 0 + && srv_redo_log_encrypt == REDO_LOG_ENCRYPT_RK) { + /* This only happens when the server uuid was just generated, so we can + * save the key to the keyring */ + if (my_key_store(PERCONA_REDO_KEY_NAME, "AES", NULL, + space->encryption_key, ENCRYPTION_KEY_LEN)) + { + srv_redo_log_encrypt = REDO_LOG_ENCRYPT_OFF; + ib::error() << "Can't store redo log encryption key."; + } + uint version = 0; + size_t klen = 0; + size_t klen2 = 0; + char *redo_key_type = NULL; + byte *rkey = NULL; + unsigned char *rkey2 = NULL; + if (my_key_fetch(PERCONA_REDO_KEY_NAME, &redo_key_type, NULL, + reinterpret_cast(&rkey), &klen)) { + srv_redo_log_encrypt = REDO_LOG_ENCRYPT_OFF; + ib::error() << "Can't fetch latest redo log encryption key."; + } + const bool err = (parse_system_key(rkey, klen, &version, &rkey2, &klen2) == reinterpret_cast(NullS)); + if (err) { + srv_redo_log_encrypt = REDO_LOG_ENCRYPT_OFF; + ib::error() << "Can't parse latest redo log encryption key."; + } + space->encryption_key_version = version; + if (!log_write_encryption(NULL, NULL)) { + ib::error() << "Can't write redo log encryption information."; + } + } +} + /******************************************************//** Stores a 4-byte checksum to the trailer checksum field of a log block before writing it to a log file. This checksum is used in recovery to diff --git a/storage/innobase/os/os0file.cc b/storage/innobase/os/os0file.cc index 573a0f160afe..9fa210710618 100644 --- a/storage/innobase/os/os0file.cc +++ b/storage/innobase/os/os0file.cc @@ -36,6 +36,7 @@ Created 10/21/1995 Heikki Tuuri #include "ha_prototypes.h" #include "sql_const.h" +#include "system_key.h" #include "os0file.h" @@ -309,6 +310,9 @@ struct Slot { /** true, if we shouldn't punch a hole after writing the page */ bool skip_punch_hole; + + /** Buffer for encrypt log */ + void* encrypt_log_buf; }; /** The asynchronous i/o array structure */ @@ -1206,7 +1210,9 @@ AIOHandler::check_read(Slot* slot, ulint n_bytes) err = DB_FAIL; } - } else if (is_encrypted_page(slot)) { + } else if (is_encrypted_page(slot) + || (slot->type.is_log() + && slot->offset >= LOG_FILE_HDR_SIZE)) { ut_a(slot->offset > 0); slot->len = slot->original_len; @@ -1228,6 +1234,11 @@ AIOHandler::check_read(Slot* slot, ulint n_bytes) slot->buf_block = NULL; } + if (slot->encrypt_log_buf != NULL) { + ut_free(slot->encrypt_log_buf); + slot->encrypt_log_buf = NULL; + } + return(err); } @@ -1250,9 +1261,8 @@ AIOHandler::post_io_processing(Slot* slot) && slot->type.is_compressed() && slot->len == static_cast(slot->n_bytes))) { - if (!slot->type.is_log() - && (is_compressed_page(slot) - || is_encrypted_page(slot))) { + if ((slot->type.is_log() && slot->offset >= LOG_FILE_HDR_SIZE) + || is_compressed_page(slot) || is_encrypted_page(slot)) { ut_a(slot->offset > 0); @@ -1289,6 +1299,10 @@ AIOHandler::post_io_processing(Slot* slot) slot->buf_block = NULL; } + if (slot->encrypt_log_buf != NULL) { + ut_free(slot->encrypt_log_buf); + slot->encrypt_log_buf = NULL; + } } else if ((ulint) slot->n_bytes == (ulint) slot->len) { /* It *must* be a partial read. */ @@ -1868,20 +1882,24 @@ os_file_io_complete( ulint offset, ulint len) { + dberr_t ret = DB_SUCCESS; + /* We never compress/decompress the first page */ ut_a(offset > 0); ut_ad(type.validate()); if (!type.is_compression_enabled()) { + if (type.is_log() && offset >= LOG_FILE_HDR_SIZE) { + Encryption encryption(type.encryption_algorithm()); - return(DB_SUCCESS); + ret = encryption.decrypt_log(type, buf, src_len, + scratch, len); + } + return(ret); } else if (type.is_read()) { - dberr_t ret; Encryption encryption(type.encryption_algorithm()); - ut_ad(!type.is_log()); - bool is_page_encrypted= type.is_encryption_disabled() ? false : encryption.is_encrypted_page(buf); @@ -2347,7 +2365,6 @@ os_file_encrypt_page( byte* buf_ptr; Encryption encryption(type.encryption_algorithm()); - ut_ad(!type.is_log()); ut_ad(type.is_write()); ut_ad(type.is_encrypted()); @@ -2371,6 +2388,58 @@ os_file_encrypt_page( return(block); } +/** Encrypt log blocks content when write it to disk. +@param[in] type IO flags +@param[in,out] buf buffer to read or write +@param[in,out] scratch buffer for encrypting log +@param[in,out] n number of bytes to read/write, starting from + offset +@return pointer to the encrypted log blocks */ +static +Block* +os_file_encrypt_log( + const IORequest& type, + void*& buf, + byte*& scratch, + ulint* n) +{ + + byte* buf_ptr; + Block* block = NULL; + + ut_ad(type.is_write() && type.is_encrypted() && type.is_log()); + ut_ad(*n % OS_FILE_LOG_BLOCK_SIZE == 0); + + if (*n <= BUFFER_BLOCK_SIZE - os_io_ptr_align) { + block = os_alloc_block(); + buf_ptr = block->m_ptr; + scratch = NULL; + } else { + buf_ptr = static_cast( + ut_malloc_nokey(*n + os_io_ptr_align)); + scratch = buf_ptr; + } + + byte* encrypted_log; + encrypted_log = static_cast(ut_align(buf_ptr, os_io_ptr_align)); + + ulint encrypted_len = *n; + Encryption encryption(type.encryption_algorithm()); + encrypted_log = encryption.encrypt_log(type, + reinterpret_cast(buf), + *n, encrypted_log, + &encrypted_len); + + bool encrypted = encrypted_log != buf; + + if (encrypted) { + buf = encrypted_log; + *n = encrypted_len; + } + + return(block); +} + #ifndef _WIN32 /** Do the read/write @@ -5810,10 +5879,11 @@ os_file_io( os_offset_t offset, dberr_t* err) { - Block* block; + Block* block = NULL; ulint original_n = n; IORequest type = in_type; ssize_t bytes_returned = 0; + byte* encrypt_log_buf = NULL; if (type.is_compressed()) { @@ -5834,15 +5904,25 @@ os_file_io( Encryption::can_page_be_keyring_encrypted(reinterpret_cast(buf)) ) )) { - /* We don't encrypt the first page of any file. */ - Block* compressed_block = block; - ut_ad(offset > 0); + if (!type.is_log()) { + /* We don't encrypt the first page of any file. */ + Block* compressed_block = block; + ut_ad(offset > 0); - ut_ad(type.encryption_algorithm().m_key != NULL); - block = os_file_encrypt_page(type, buf, &n); + ut_ad(type.encryption_algorithm().m_key != NULL); + block = os_file_encrypt_page(type, buf, &n); - if (compressed_block != NULL) { - os_free_block(compressed_block); + if (compressed_block != NULL) { + os_free_block(compressed_block); + } + } else { + /* Skip encrypt log file header */ + if (offset >= LOG_FILE_HDR_SIZE) { + block = os_file_encrypt_log(type, + buf, + encrypt_log_buf, + &n); + } } } @@ -5878,6 +5958,10 @@ os_file_io( os_free_block(block); } + if (encrypt_log_buf != NULL) { + ut_free(encrypt_log_buf); + } + return(original_n); } @@ -5908,6 +5992,10 @@ os_file_io( os_free_block(block); } + if (encrypt_log_buf != NULL) { + ut_free(encrypt_log_buf); + } + *err = DB_IO_ERROR; if (!type.is_partial_io_warning_disabled()) { @@ -7447,6 +7535,7 @@ AIO::reserve_slot( slot->io_already_done = false; slot->space_id = space_id; slot->buf_block = NULL; + slot->encrypt_log_buf = NULL; if (srv_use_native_aio && offset > 0 @@ -7489,22 +7578,45 @@ AIO::reserve_slot( ulint encrypted_len = slot->len; Block* encrypted_block; - - ut_ad(!type.is_log()); + byte* encrypt_log_buf; release(); void* src_buf = slot->buf; - encrypted_block = os_file_encrypt_page( - type, - src_buf, - &encrypted_len); + if (!type.is_log()) { + encrypted_block = os_file_encrypt_page( + type, + src_buf, + &encrypted_len); + + if (slot->buf_block != NULL) { + os_free_block(slot->buf_block); + } - if (slot->buf_block != NULL) { - os_free_block(slot->buf_block); + slot->buf_block = encrypted_block; + } else { + /* Skip encrypted log file header */ + if (offset >= LOG_FILE_HDR_SIZE) { + encrypted_block = os_file_encrypt_log( + type, + src_buf, + encrypt_log_buf, + &encrypted_len); + + if (slot->buf_block != NULL) { + os_free_block(slot->buf_block); + } + + slot->buf_block = encrypted_block; + + if (slot->encrypt_log_buf != NULL) { + ut_free(slot->encrypt_log_buf); + } + + slot->encrypt_log_buf = encrypt_log_buf; + } } - slot->buf_block = encrypted_block; slot->buf = static_cast(src_buf); slot->ptr = slot->buf; @@ -8919,9 +9031,14 @@ os_file_set_umask(ulint umask) #include "univ.i" #include "db0err.h" #include "mach0data.h" +#include "fsp0fsp.h" #include "fil0fil.h" #include "os0file.h" +#ifdef UNIV_NONINL +#include "os0file.ic" +#endif + #include #include @@ -9332,7 +9449,7 @@ Encryption::create_master_key(byte** master_key) if (ret || *master_key == NULL) { ib::error() << "Encryption can't find master key, please check" - " the keyring plugin is loaded."; + " the keyring plugin is loaded."; *master_key = NULL; } else { master_key_id++; @@ -9555,9 +9672,11 @@ Encryption::get_master_key(ulint master_key_id, /* We call key ring API to get master key here. */ get_keyring_key(key_name, master_key, &key_len); - if (*master_key == NULL) + if (*master_key == NULL) { ib::error() << "Encryption can't find master key, please check" " the keyring plugin is loaded."; + } + #ifdef UNIV_ENCRYPT_DEBUG if (*master_key) { fprintf(stderr, "Fetched master key:%lu ", master_key_id); @@ -9668,7 +9787,7 @@ Encryption::get_master_key(ulint* master_key_id, if (ret) { *master_key = NULL; ib::error() << "Encryption can't find master key, please check" - " the keyring plugin is loaded."; + " the keyring plugin is loaded."; } if (key_type) { @@ -9677,9 +9796,227 @@ Encryption::get_master_key(ulint* master_key_id, #endif } +#ifndef UNIV_INNOCHECKSUM + +/** Fill the encryption information. +@param[in] key encryption key +@param[in] iv encryption iv +@param[in,out] encrypt_info encryption information +@return true if success */ +bool Encryption::fill_encryption_info(byte* key, + byte* iv, + byte* encrypt_info) +{ + byte key_info[ENCRYPTION_KEY_LEN * 2]; + + /* Get master key from key ring. For bootstrap, we use a default + master key which master_key_id is 0. */ + byte* master_key; + ulint master_key_id; + Version version; + get_master_key(&master_key_id, &master_key, &version); + if (master_key == NULL) { + return(false); + } + + memset(encrypt_info, 0, ENCRYPTION_INFO_SIZE_V2); + memset(key_info, 0, ENCRYPTION_KEY_LEN * 2); + + /* Use the new master key to encrypt the key. */ + ut_ad(encrypt_info != NULL); + byte* ptr = encrypt_info; + + if (version == ENCRYPTION_VERSION_1) { + memcpy(ptr, ENCRYPTION_KEY_MAGIC_V1, ENCRYPTION_MAGIC_SIZE); + } else { + memcpy(ptr, ENCRYPTION_KEY_MAGIC_V2, ENCRYPTION_MAGIC_SIZE); + } + ptr += ENCRYPTION_MAGIC_SIZE; + + mach_write_to_4(ptr, master_key_id); + ptr += sizeof(master_key_id); + + if (version == ENCRYPTION_VERSION_2) { + memcpy(ptr, uuid, ENCRYPTION_SERVER_UUID_LEN); + ptr += ENCRYPTION_SERVER_UUID_LEN; + } + + memcpy(key_info, key, ENCRYPTION_KEY_LEN); + + memcpy(key_info + ENCRYPTION_KEY_LEN, iv, ENCRYPTION_KEY_LEN); + + /* Encrypt key and iv. */ + const lint elen = my_aes_encrypt(key_info, + ENCRYPTION_KEY_LEN * 2, + ptr, + master_key, + ENCRYPTION_KEY_LEN, + my_aes_256_ecb, + NULL, false); + + if (elen == MY_AES_BAD_DATA) { + my_free(master_key); + return(false); + } + + ptr += ENCRYPTION_KEY_LEN * 2; + + /* Write checksum bytes. */ + ulint crc = ut_crc32(key_info, ENCRYPTION_KEY_LEN * 2); + mach_write_to_4(ptr, crc); + + my_free(master_key); + + return(true); +} + +/** Decoding the encryption info +from the first page of a tablespace. +@param[in,out] key key +@param[in,out] iv iv +@param[in] encryption_info encrytion info. +@return true if success */ +bool +Encryption::decode_encryption_info(byte* key, + byte* iv, + byte* encryption_info) +{ + byte* master_key = NULL; + byte key_info[ENCRYPTION_KEY_LEN * 2]; + char srv_uuid[ENCRYPTION_SERVER_UUID_LEN + 1]; + + byte* ptr = encryption_info; + + /* For compatibility with 5.7.11, we need to handle the + encryption information which created in this old version. */ + Version version; + if (memcmp(ptr, ENCRYPTION_KEY_MAGIC_V1, + ENCRYPTION_MAGIC_SIZE) == 0) { + version = ENCRYPTION_VERSION_1; + } else { + version = ENCRYPTION_VERSION_2; + } + + /* Check magic. */ + if (version == ENCRYPTION_VERSION_2 + && memcmp(ptr, ENCRYPTION_KEY_MAGIC_V2, ENCRYPTION_MAGIC_SIZE) != 0) { + /* We ignore report error for recovery, + since the encryption info maybe hasn't writen + into datafile when the table is newly created. */ + return recv_recovery_is_on(); + } + + ptr += ENCRYPTION_MAGIC_SIZE; + + /* Get master key id. */ + const ulint m_key_id = mach_read_from_4(ptr); + ptr += sizeof(ptr); + + /* Get server uuid. */ + if (version == ENCRYPTION_VERSION_2) { + memset(srv_uuid, 0, ENCRYPTION_SERVER_UUID_LEN + 1); + memcpy(srv_uuid, ptr, ENCRYPTION_SERVER_UUID_LEN); + ptr += ENCRYPTION_SERVER_UUID_LEN; + } + + /* Get master key by key id. */ + memset(key_info, 0, ENCRYPTION_KEY_LEN * 2); + if (version == ENCRYPTION_VERSION_1) { + get_master_key(m_key_id, NULL, &master_key); + } else { + if (m_key_id == 0) { + /* When m_key_id is 0, which means it's the + default master key for bootstrap. */ + master_key = static_cast(ut_zalloc_nokey( + ENCRYPTION_KEY_LEN)); + memcpy(master_key, ENCRYPTION_DEFAULT_MASTER_KEY, + strlen(ENCRYPTION_DEFAULT_MASTER_KEY)); + } else { + get_master_key(m_key_id, srv_uuid, &master_key); + } + } + + if (master_key == NULL) { + return(false); + } + +#ifdef UNIV_ENCRYPT_DEBUG + fprintf(stderr, "%lu ", m_key_id); + for (const byte* data = (const byte*) master_key, ulint i = 0; + i < ENCRYPTION_KEY_LEN; i++) + fprintf(stderr, "%02lx", (ulong)*data++); +#endif + + /* Decrypt tablespace key and iv. */ + const lint elen = my_aes_decrypt( + ptr, + ENCRYPTION_KEY_LEN * 2, + key_info, + master_key, + ENCRYPTION_KEY_LEN, + my_aes_256_ecb, NULL, false); + + if (elen == MY_AES_BAD_DATA) { + if (m_key_id == 0) { + ut_free(master_key); + } else { + my_free(master_key); + } + return(NULL); + } + + /* Check checksum bytes. */ + ptr += ENCRYPTION_KEY_LEN * 2; + + const ulint crc1 = mach_read_from_4(ptr); + const ulint crc2 = ut_crc32(key_info, ENCRYPTION_KEY_LEN * 2); + if (crc1 != crc2) { + ib::error() << "Failed to decrypt encryption information," + << " please check whether key file has been changed!"; + if (m_key_id == 0) { + ut_free(master_key); + } else { + my_free(master_key); + } + return(false); + } + + /* Get tablespace key */ + memcpy(key, key_info, ENCRYPTION_KEY_LEN); + + /* Get tablespace iv */ + memcpy(iv, key_info + ENCRYPTION_KEY_LEN, + ENCRYPTION_KEY_LEN); + +#ifdef UNIV_ENCRYPT_DEBUG + fprintf(stderr, " "); + for (const byte* data = (const byte*) key, + ulint i = 0; i < ENCRYPTION_KEY_LEN; i++) + fprintf(stderr, "%02lx", (ulong)*data++); + fprintf(stderr, " "); + for (const byte* data = (const byte*) iv, + ulint i = 0; i < ENCRYPTION_KEY_LEN; i++) + fprintf(stderr, "%02lx", (ulong)*data++); + fprintf(stderr, "\n"); +#endif + + if (m_key_id == 0) { + ut_free(master_key); + } else { + my_free(master_key); + } + + if (master_key_id < m_key_id) { + master_key_id = m_key_id; + memcpy(uuid, srv_uuid, ENCRYPTION_SERVER_UUID_LEN); + } + + return(true); +} + /** Check if page is encrypted page or not @param[in] page page which need to check -@return true if it is a encrypted page */ +@return true if it is an encrypted page */ bool Encryption::is_encrypted_page(const byte* page) { @@ -9698,11 +10035,207 @@ Encryption::is_encrypted_and_compressed(const byte *page) return page_type == FIL_PAGE_COMPRESSED_AND_ENCRYPTED; } +/** Check if redo log block is encrypted block or not +@param[in] block log block to check +@return true if it is an encrypted block */ +bool +Encryption::is_encrypted_log(const byte* block) +{ + return(log_block_get_encrypt_bit(block)); +} + +/** Encrypt the redo log block. +@param[in] type IORequest +@param[in] src_ptr log block which need to encrypt +@param[in,out] dst_ptr destination area +@return true if success. */ +bool +Encryption::encrypt_log_block( + const IORequest& type, + byte* src_ptr, + byte* dst_ptr) +{ + byte remain_buf[MY_AES_BLOCK_SIZE * 2]; + +#ifdef UNIV_ENCRYPT_DEBUG + fprintf(stderr, "Encrypting block %lu.\n", + log_block_get_hdr_no(src_ptr)); + ut_print_buf_hex(std::cerr, src_ptr, OS_FILE_LOG_BLOCK_SIZE); + fprintf(stderr, "\n"); +#endif + /* This is data size which need to encrypt. */ + const ulint data_len = OS_FILE_LOG_BLOCK_SIZE - LOG_BLOCK_HDR_SIZE; + const ulint main_len = (data_len / MY_AES_BLOCK_SIZE) * MY_AES_BLOCK_SIZE; + ulint remain_len = data_len - main_len; + + /* Encrypt the block. */ + /* Copy the header as is. */ + memmove(dst_ptr, src_ptr, LOG_BLOCK_HDR_SIZE); + ut_ad(memcmp(src_ptr, dst_ptr, LOG_BLOCK_HDR_SIZE) == 0); + + switch (m_type) { + case Encryption::NONE: + ut_error; + + case Encryption::AES: { + lint elen; + + ut_ad(m_klen == ENCRYPTION_KEY_LEN); + + elen = my_aes_encrypt( + src_ptr + LOG_BLOCK_HDR_SIZE, + static_cast(main_len), + dst_ptr + LOG_BLOCK_HDR_SIZE, + reinterpret_cast(m_key), + static_cast(m_klen), + my_aes_256_cbc, + reinterpret_cast(m_iv), + false); + + if (elen == MY_AES_BAD_DATA) { + return(false); + } + + const ulint len = static_cast(elen); + ut_ad(len == main_len); + + /* Copy remaining bytes. */ + memcpy(dst_ptr + LOG_BLOCK_HDR_SIZE + len, + src_ptr + LOG_BLOCK_HDR_SIZE + len, + OS_FILE_LOG_BLOCK_SIZE + - LOG_BLOCK_HDR_SIZE - len); + + /* Encrypt the remaining bytes. Since my_aes_encrypt + request the content which need to encrypt is + multiple of MY_AES_BLOCK_SIZE, but the block + content is possiblly not, so, we need to handle + the tail bytes first. */ + if (remain_len != 0) { + remain_len = MY_AES_BLOCK_SIZE * 2; + + elen = my_aes_encrypt( + dst_ptr + LOG_BLOCK_HDR_SIZE + + data_len - remain_len, + static_cast(remain_len), + remain_buf, + reinterpret_cast(m_key), + static_cast(m_klen), + my_aes_256_cbc, + reinterpret_cast(m_iv), + false); + + if (elen == MY_AES_BAD_DATA) { + return(false); + } + + memcpy(dst_ptr + LOG_BLOCK_HDR_SIZE + + data_len - remain_len, + remain_buf, remain_len); + } + + break; + } + + default: + ut_error; + } + + /* Set the encrypted flag. */ + log_block_set_encrypt_bit(dst_ptr, true); + +#ifdef UNIV_ENCRYPT_DEBUG + fprintf(stderr, "Encrypted block %lu.\n", + log_block_get_hdr_no(dst_ptr)); + ut_print_buf_hex(std::cerr, dst_ptr, OS_FILE_LOG_BLOCK_SIZE); + fprintf(stderr, "\n"); + + byte* check_buf = static_cast( + ut_malloc_nokey(OS_FILE_LOG_BLOCK_SIZE)); + byte* buf2 = static_cast( + ut_malloc_nokey(OS_FILE_LOG_BLOCK_SIZE)); + + memcpy(check_buf, dst_ptr, OS_FILE_LOG_BLOCK_SIZE); + dberr_t err = decrypt_log(type, check_buf, + OS_FILE_LOG_BLOCK_SIZE, + buf2, OS_FILE_LOG_BLOCK_SIZE); + if (err != DB_SUCCESS + || memcmp(src_ptr, check_buf, + OS_FILE_LOG_BLOCK_SIZE) != 0) { + ut_print_buf_hex(std::cerr, src_ptr, + OS_FILE_LOG_BLOCK_SIZE); + ut_print_buf_hex(std::cerr, check_buf, + OS_FILE_LOG_BLOCK_SIZE); + ut_ad(0); + } + ut_free(buf2); + ut_free(check_buf); +#endif + + return(true); +} + +/** Encrypt the redo log data contents. +@param[in] type IORequest +@param[in] src page data which need to encrypt +@param[in] src_len Size of the source in bytes +@param[in,out] dst destination area +@param[in,out] dst_len Size of the destination in bytes +@return buffer data, dst_len will have the length of the data */ +byte* +Encryption::encrypt_log( + const IORequest& type, + byte* src, + ulint src_len, + byte* dst, + ulint* dst_len) +{ + byte* src_ptr = src; + byte* dst_ptr = dst; + + ut_ad(type.is_log()); + ut_ad(src_len % OS_FILE_LOG_BLOCK_SIZE == 0); + ut_ad(m_type != Encryption::NONE); + + /* Encrypt the log blocks one by one. */ + while (src_ptr != src + src_len) { + if (!encrypt_log_block(type, src_ptr, dst_ptr)) { + *dst_len = src_len; + ib::error() + << " Can't encrypt data of" + << " redo log"; + return(src); + } + + src_ptr += OS_FILE_LOG_BLOCK_SIZE; + dst_ptr += OS_FILE_LOG_BLOCK_SIZE; + } + +#ifdef UNIV_ENCRYPT_DEBUG + byte* check_buf = static_cast(ut_malloc_nokey(src_len)); + byte* buf2 = static_cast(ut_malloc_nokey(src_len)); + + memcpy(check_buf, dst, src_len); + + dberr_t err = decrypt_log(type, check_buf, src_len, buf2, src_len); + if (err != DB_SUCCESS || memcmp(src, check_buf, src_len) != 0) { + ut_print_buf_hex(std::cerr, src, src_len); + ut_print_buf_hex(std::cerr, check_buf, src_len); + ut_ad(0); + } + ut_free(buf2); + ut_free(check_buf); +#endif + + return(dst); +} + +#endif + /** Encrypt the page data contents. Page type can't be FIL_PAGE_ENCRYPTED, FIL_PAGE_COMPRESSED_AND_ENCRYPTED, FIL_PAGE_ENCRYPTED_RTREE. @param[in] type IORequest -@param[in,out] src page data which need to encrypt +@param[in] src page data which need to encrypt @param[in] src_len Size of the source in bytes @param[in,out] dst destination area @param[in,out] dst_len Size of the destination in bytes @@ -9722,6 +10255,9 @@ Encryption::encrypt( ulint remain_len; byte remain_buf[MY_AES_BLOCK_SIZE * 2]; + /* For encrypting redo log, take another way. */ + ut_ad(!type.is_log()); + #ifdef UNIV_ENCRYPT_DEBUG ulint space_id = mach_read_from_4(src + FIL_PAGE_ARCH_LOG_NO_OR_SPACE_ID); @@ -9789,7 +10325,7 @@ Encryption::encrypt( src + FIL_PAGE_ARCH_LOG_NO_OR_SPACE_ID); *dst_len = src_len; #ifndef UNIV_INNOCHECKSUM - ib::warn() + ib::error() << " Can't encrypt data of page," << " page no:" << page_no << " space id:" << space_id; @@ -9805,7 +10341,7 @@ Encryption::encrypt( len = static_cast(elen); ut_ad(len == main_len); - /* Copy remain bytes and page tailer. */ + /* Copy remaining bytes and page tailer. */ memcpy(dst + DST_HEADER_SIZE + len, src + FIL_PAGE_DATA + len, src_len - FIL_PAGE_DATA - len); @@ -9832,7 +10368,7 @@ Encryption::encrypt( ulint space_id = mach_read_from_4( src + FIL_PAGE_ARCH_LOG_NO_OR_SPACE_ID); #ifndef UNIV_INNOCHECKSUM - ib::warn() + ib::error() << " Can't encrypt data of page," << " page no:" << page_no << " space id:" << space_id; @@ -10000,6 +10536,181 @@ Encryption::encrypt( return(dst); } +#ifndef UNIV_INNOCHECKSUM + +/** Decrypt the log block. +@param[in] type IORequest +@param[in,out] src Data read from disk, decrypted data will be + copied to this page +@param[in,out] dst Scratch area to use for decryption +@return DB_SUCCESS or error code */ +dberr_t +Encryption::decrypt_log_block( + const IORequest& type, + byte* src, + byte* dst) +{ + byte remain_buf[MY_AES_BLOCK_SIZE * 2]; + + const ulint data_len = OS_FILE_LOG_BLOCK_SIZE - LOG_BLOCK_HDR_SIZE; + const ulint main_len = (data_len / MY_AES_BLOCK_SIZE) * MY_AES_BLOCK_SIZE; + ulint remain_len = data_len - main_len; + byte* ptr = src + LOG_BLOCK_HDR_SIZE; + + switch (m_type) { + case Encryption::AES: { + lint elen; + + /* First decrypt the last 2 blocks data of data, since + data is no block aligned. */ + if (remain_len != 0) { + ut_ad(m_klen == ENCRYPTION_KEY_LEN); + + remain_len = MY_AES_BLOCK_SIZE * 2; + + /* Copy the last 2 blocks. */ + memcpy(remain_buf, + ptr + data_len - remain_len, + remain_len); + + elen = my_aes_decrypt( + remain_buf, + static_cast(remain_len), + dst + data_len - remain_len, + reinterpret_cast(m_key), + static_cast(m_klen), + my_aes_256_cbc, + reinterpret_cast(m_iv), + false); + if (elen == MY_AES_BAD_DATA) { + return(DB_IO_DECRYPT_FAIL); + } + + /* Copy the other data bytes to temp area. */ + memcpy(dst, ptr, data_len - remain_len); + } else { + ut_ad(data_len == main_len); + + /* Copy the data bytes to temp area. */ + memcpy(dst, ptr, data_len); + } + + /* Then decrypt the main data */ + elen = my_aes_decrypt( + dst, + static_cast(main_len), + ptr, + reinterpret_cast(m_key), + static_cast(m_klen), + my_aes_256_cbc, + reinterpret_cast(m_iv), + false); + if (elen == MY_AES_BAD_DATA) { + return(DB_IO_DECRYPT_FAIL); + } + + ut_ad(static_cast(elen) == main_len); + + /* Copy the remaining bytes. */ + memcpy(ptr + main_len, dst + main_len, data_len - main_len); + + break; + } + + default: + ib::error() + << "Encryption algorithm support missing: " + << Encryption::to_string(m_type); + return(DB_UNSUPPORTED); + } + + ptr -= LOG_BLOCK_HDR_SIZE; + +#ifdef UNIV_ENCRYPT_DEBUG + fprintf(stderr, "Decrypted block %lu.\n", + log_block_get_hdr_no(ptr)); + ut_print_buf_hex(std::cerr, ptr, OS_FILE_LOG_BLOCK_SIZE); + fprintf(stderr, "\n"); +#endif + + /* Reset the encrypted flag. */ + log_block_set_encrypt_bit(ptr, false); + + return(DB_SUCCESS); +} + +/** Decrypt the log data contents. +@param[in] type IORequest +@param[in,out] src Data read from disk, decrypted data will be + copied to this page +@param[in] src_len source data length +@param[in,out] dst Scratch area to use for decryption +@param[in] dst_len Size of the scratch area in bytes +@return DB_SUCCESS or error code */ +dberr_t +Encryption::decrypt_log( + const IORequest& type, + byte* src, + ulint src_len, + byte* dst, + ulint dst_len) +{ + Block* block; + byte* ptr = src; + dberr_t ret; + + ut_ad(type.is_log()); + + /* The caller doesn't know what to expect */ + if (dst == NULL) { + block = os_alloc_block(); +#ifdef UNIV_INNOCHECKSUM + dst = block; +#else + dst = block->m_ptr; +#endif + } else { + block = NULL; + } + + /* Encrypt the log blocks one by one. */ + while (ptr != src + src_len) { + /* If it's not an encrypted block, skip it. */ + if (!is_encrypted_log(ptr)) { + ptr += OS_FILE_LOG_BLOCK_SIZE; + continue; + } +#ifdef UNIV_ENCRYPT_DEBUG + fprintf(stderr, "Decrypting block %lu.\n", + log_block_get_hdr_no(ptr)); + ut_print_buf_hex(std::cerr, ptr, OS_FILE_LOG_BLOCK_SIZE); + fprintf(stderr, "\n"); + ut_print_buf(stderr, m_key, 32); + ut_print_buf(stderr, m_iv, 32); +#endif + + /* Decrypt block */ + ret = decrypt_log_block(type, ptr, dst); + if (ret != DB_SUCCESS) { + if (block != NULL) { + os_free_block(block); + } + + return(ret); + } + + ptr += OS_FILE_LOG_BLOCK_SIZE; + } + + if (block != NULL) { + os_free_block(block); + } + + return(DB_SUCCESS); +} + +#endif + /** Decrypt the page data contents. Page type must be FIL_PAGE_ENCRYPTED, if not then the source contents are left unchanged and DB_SUCCESS is returned. @param[in] type IORequest @@ -10025,11 +10736,11 @@ Encryption::decrypt( byte remain_buf[MY_AES_BLOCK_SIZE * 2]; Block* block; +#ifndef UNIV_INNOCHECKSUM /* Do nothing if it's not an encrypted table. */ - if (!is_encrypted_page(src)) { + if (!Encryption::is_encrypted_page(src)) { return(DB_SUCCESS); } -#ifndef UNIV_INNOCHECKSUM if (m_type == Encryption::KEYRING && type.is_page_zip_compressed()) { uint32 post_enc_checksum = fil_crypt_calculate_checksum(type.get_zip_page_physical_size(), src, type.is_page_zip_compressed()); uint32 xor_checksum = mach_read_from_4(src + FIL_PAGE_SPACE_OR_CHKSUM); @@ -10234,9 +10945,6 @@ Encryption::decrypt( #ifndef UNIV_INNOCHECKSUM -/** Default master key for bootstrap */ -static const char ENCRYPTION_DEFAULT_MASTER_KEY[] = "DefaultMasterKey"; - /** Check if keyring plugin loaded. */ bool Encryption::check_keyring() { diff --git a/storage/innobase/srv/srv0srv.cc b/storage/innobase/srv/srv0srv.cc index 574a94f9ad36..1d4733584f2b 100644 --- a/storage/innobase/srv/srv0srv.cc +++ b/storage/innobase/srv/srv0srv.cc @@ -229,6 +229,9 @@ extern bool trx_commit_disallowed; /*------------------------- LOG FILES ------------------------ */ char* srv_log_group_home_dir = NULL; +/** Enable or disable Encrypt of REDO tablespace. */ +ulong srv_redo_log_encrypt = REDO_LOG_ENCRYPT_OFF; + ulong srv_n_log_files = SRV_N_LOG_FILES_MAX; /** At startup, this is the current redo log file size. During startup, if this is different from srv_log_file_size_requested @@ -2847,6 +2850,8 @@ DECLARE_THREAD(srv_master_thread)( } else { srv_master_do_idle_tasks(); } + + log_enable_encryption_if_set(); } while (srv_shutdown_state != SRV_SHUTDOWN_EXIT_THREADS diff --git a/storage/innobase/srv/srv0start.cc b/storage/innobase/srv/srv0start.cc index 2485f5c1321a..a68857d2eb90 100644 --- a/storage/innobase/srv/srv0start.cc +++ b/storage/innobase/srv/srv0start.cc @@ -464,6 +464,26 @@ create_log_files( ut_a(fil_validate()); ut_a(log_space != NULL); + /* Once the redo log is set to be encrypted, + initialize encryption information. */ + if (srv_redo_log_encrypt != REDO_LOG_ENCRYPT_OFF) { + if (!Encryption::check_keyring()) { + ib::error() + << "Redo log encryption is enabled," + << " but keyring plugin is not loaded."; + + return(DB_ERROR); + } + + log_space->flags |= FSP_FLAGS_MASK_ENCRYPTION; + err = fil_set_encryption(log_space->id, + Encryption::AES, + NULL, + NULL); + ut_ad(err == DB_SUCCESS); + } + + logfile0 = fil_node_create( logfilename, (ulint) srv_log_file_size, log_space, false, false); @@ -499,6 +519,16 @@ create_log_files( recv_reset_logs(lsn); log_mutex_exit(); + /* Write encryption information into the first log file header + if redo log is set with encryption. */ + if (FSP_FLAGS_GET_ENCRYPTION(log_space->flags)) { + if (!log_write_encryption(log_space->encryption_key, + log_space->encryption_iv + )) { + return(DB_ERROR); + } + } + return(DB_SUCCESS); } @@ -2257,6 +2287,14 @@ innobase_start_or_create_for_mysql(void) SRV_LOG_SPACE_FIRST_ID)) { return(srv_init_abort(DB_ERROR)); } + + /* Read the first log file header to get the encryption + information if it exist. */ + if (srv_force_recovery < SRV_FORCE_NO_LOG_REDO) { + if (!log_read_encryption()) { + return(srv_init_abort(DB_ERROR)); + } + } } files_checked: From 2332d3626a6c4b1574e365746cb0cb1b742707fb Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Tue, 30 Oct 2018 08:23:49 +0100 Subject: [PATCH 1177/1221] PS-4976: InnoDB undo log encryption This commit implements undo log encryption loosely based on WL#9289 (71e656a370072dad885736774a513e2d9feb65ff) for MySQL 8.0. Undo log encryption requires the use of separate undo tablepsaces with innodb_undo_tablespaces=N. --- .../suite/innodb/r/undo_encrypt_basic.result | 31 ++++ .../suite/innodb/t/undo_encrypt_basic.test | 111 +++++++++++ .../suite/perfschema/r/show_sanity.result | 2 - .../suite/perfschema/t/show_sanity.test | 2 + .../r/innodb_undo_log_encrypt_basic.result | 61 ++++++ .../t/innodb_undo_log_encrypt_basic.test | 65 +++++++ storage/innobase/fil/fil0crypt.cc | 19 -- storage/innobase/fil/fil0fil.cc | 18 ++ storage/innobase/fsp/fsp0fsp.cc | 89 ++++++--- storage/innobase/handler/ha_innodb.cc | 6 + storage/innobase/include/dict0dict.h | 21 +++ storage/innobase/include/fsp0fsp.h | 26 +++ storage/innobase/include/srv0srv.h | 3 + storage/innobase/srv/srv0srv.cc | 173 ++++++++++++++++++ storage/innobase/srv/srv0start.cc | 83 ++++++++- 15 files changed, 661 insertions(+), 49 deletions(-) create mode 100644 mysql-test/suite/innodb/r/undo_encrypt_basic.result create mode 100644 mysql-test/suite/innodb/t/undo_encrypt_basic.test create mode 100644 mysql-test/suite/sys_vars/r/innodb_undo_log_encrypt_basic.result create mode 100644 mysql-test/suite/sys_vars/t/innodb_undo_log_encrypt_basic.test diff --git a/mysql-test/suite/innodb/r/undo_encrypt_basic.result b/mysql-test/suite/innodb/r/undo_encrypt_basic.result new file mode 100644 index 000000000000..420814da8e1f --- /dev/null +++ b/mysql-test/suite/innodb/r/undo_encrypt_basic.result @@ -0,0 +1,31 @@ +# create bootstrap file +# Stop the MTR default DB server +# Run the bootstrap command with keyring +# Search for particular string of encryption metadata, should success since it's encrypted. +Pattern "lCB" found +# Start the DB server with undo log encryption disabled and keyring plugin loaded. It should success. +INSTALL PLUGIN keyring_file SONAME 'keyring_file.so'; +ERROR HY000: Function 'keyring_file' already exists +SET GLOBAL innodb_undo_log_encrypt = ON; +CREATE TABLE tab1(c1 INT, c2 VARCHAR(30)); +START TRANSACTION; +INSERT INTO tab1 VALUES (100,REPEAT('a',5)),(200,REPEAT('b',5)); +SELECT * FROM tab1; +c1 c2 +100 aaaaa +200 bbbbb +COMMIT; +SET GLOBAL innodb_undo_log_encrypt = OFF; +START TRANSACTION; +INSERT INTO tab1 VALUES (300,REPEAT('a',5)),(400,REPEAT('b',5)); +COMMIT; +SELECT * FROM tab1; +c1 c2 +100 aaaaa +200 bbbbb +300 aaaaa +400 bbbbb +UNINSTALL PLUGIN keyring_file; +DROP TABLE tab1; +Pattern "lCB" found +Pattern "lCB" found diff --git a/mysql-test/suite/innodb/t/undo_encrypt_basic.test b/mysql-test/suite/innodb/t/undo_encrypt_basic.test new file mode 100644 index 000000000000..cedcb82ed7e4 --- /dev/null +++ b/mysql-test/suite/innodb/t/undo_encrypt_basic.test @@ -0,0 +1,111 @@ +--source include/not_embedded.inc +--source include/have_innodb.inc +--source include/big_test.inc + +--disable_query_log +call mtr.add_suppression("\\[Error\\] InnoDB: Encryption can't find master key, please check the keyring plugin is loaded."); +call mtr.add_suppression("\\[ERROR\\] InnoDB: Can't set undo log tablespace to be encrypted."); +# See Bug #25446984: INNODB.UNDO_ENCRYPT_BOOTSTRAP HAS OCCASIONAL FAILURES ON PB2 +call mtr.add_suppression("\\[ERROR\\] InnoDB: Can't rotate encryption on undo tablespace number"); +--enable_query_log + +let $MYSQLD_BASEDIR= `select @@basedir`; +let $START_PAGE_SIZE= `select @@innodb_page_size`; +let $LOG_FILE_SIZE= `select @@innodb_log_file_size`; + +# Create path for ibdata* & undo* files both DBs +--mkdir $MYSQL_TMP_DIR/innodb_undo_data_dir +--mkdir $MYSQL_TMP_DIR/innodb_data_home_dir +--mkdir $MYSQL_TMP_DIR/datadir + +# Set path for --datadir +let $MYSQLD_DATADIR = $MYSQL_TMP_DIR/datadir/data; + +# Set path for undo* files. +let $MYSQLD_UNDO_DATADIR = $MYSQL_TMP_DIR/innodb_undo_data_dir; + +# Set path for ibdata* files. +let $MYSQLD_HOME_DATA_DIR = $MYSQL_TMP_DIR/innodb_data_home_dir; + +let BOOTSTRAP_SQL=$MYSQL_TMP_DIR/boot.sql; + +--echo # create bootstrap file +write_file $BOOTSTRAP_SQL; +CREATE DATABASE test; +EOF + +--echo # Stop the MTR default DB server +--source include/shutdown_mysqld.inc + +# Remove residue files +--force-rmdir $MYSQL_TMP_DIR/datadir +--force-rmdir $MYSQL_TMP_DIR/innodb_data_home_dir +--force-rmdir $MYSQL_TMP_DIR/innodb_undo_data_dir + +# Create path for ibdata* & undo* files both DBs +--mkdir $MYSQL_TMP_DIR/innodb_undo_data_dir +--mkdir $MYSQL_TMP_DIR/innodb_data_home_dir +--mkdir $MYSQL_TMP_DIR/datadir + +# Test: bootstrap with undo encryption and with keyring plugin, it should +# success, then restart with no undo encryption. +let NEW_CMD = $MYSQLD --no-defaults --initialize-insecure --innodb_log_file_size=$LOG_FILE_SIZE --innodb_page_size=$START_PAGE_SIZE --innodb_data_home_dir=$MYSQLD_HOME_DATA_DIR --innodb_undo_directory=$MYSQLD_UNDO_DATADIR --innodb_undo_tablespaces=2 --basedir=$MYSQLD_BASEDIR --datadir=$MYSQLD_DATADIR --init-file=$BOOTSTRAP_SQL --innodb_undo_log_encrypt=ON --secure-file-priv="" --early-plugin-load="keyring_file=$KEYRING_PLUGIN" --keyring_file_data=$MYSQL_TMP_DIR/my_key_undo5 $KEYRING_PLUGIN_OPT >$MYSQLTEST_VARDIR/tmp/bootstrap2.log 2>&1; + +--echo # Run the bootstrap command with keyring +--exec $NEW_CMD + +--echo # Search for particular string of encryption metadata, should success since it's encrypted. +let SEARCH_FILE= $MYSQLD_UNDO_DATADIR/undo001; +let SEARCH_PATTERN= lCB; +--source include/search_pattern.inc + +--echo # Start the DB server with undo log encryption disabled and keyring plugin loaded. It should success. +--let $restart_parameters="restart: --early-plugin-load="keyring_file=$KEYRING_PLUGIN" $KEYRING_PLUGIN_OPT --keyring_file_data=$MYSQL_TMP_DIR/my_key_undo5 --innodb_data_home_dir=$MYSQLD_HOME_DATA_DIR --innodb_undo_directory=$MYSQLD_UNDO_DATADIR --datadir=$MYSQLD_DATADIR --innodb_page_size=$START_PAGE_SIZE --innodb_log_file_size=$LOG_FILE_SIZE --innodb_undo_tablespaces=2" +--replace_result $MYSQL_TMP_DIR TMP_DIR $KEYRING_PLUGIN_OPT --plugin-dir=KEYRING_PLUGIN_PATH $MYSQLD_HOME_DATA_DIR HOME_DIR $MYSQLD_UNDO_DATADIR UNDO_DATADIR $MYSQLD_DATADIR DATADIR $START_PAGE_SIZE PAGE_SIZE $LOG_FILE_SIZE LOG_FILE_SIZE +--source include/start_mysqld_no_echo.inc + +--replace_regex /\.dll/.so/ +--error ER_UDF_EXISTS +eval INSTALL PLUGIN keyring_file SONAME '$KEYRING_PLUGIN'; + +SET GLOBAL innodb_undo_log_encrypt = ON; +--sleep 2 + +CREATE TABLE tab1(c1 INT, c2 VARCHAR(30)); +START TRANSACTION; +INSERT INTO tab1 VALUES (100,REPEAT('a',5)),(200,REPEAT('b',5)); +SELECT * FROM tab1; +COMMIT; +SET GLOBAL innodb_undo_log_encrypt = OFF; +START TRANSACTION; +INSERT INTO tab1 VALUES (300,REPEAT('a',5)),(400,REPEAT('b',5)); +COMMIT; +SELECT * FROM tab1; + +UNINSTALL PLUGIN keyring_file; +# Cleanup +DROP TABLE tab1; + +--source include/shutdown_mysqld.inc +# Search for particular string to confirm the encryption metadata is +# stored. +--sleep 2 +let SEARCH_FILE= $MYSQLD_UNDO_DATADIR/undo001; +let SEARCH_PATTERN= lCB; +--source include/search_pattern.inc + +let SEARCH_FILE= $MYSQLD_UNDO_DATADIR/undo002; +let SEARCH_PATTERN= lCB; +--source include/search_pattern.inc + +# restart the server with MTR default +--let $restart_parameters= +--source include/start_mysqld_no_echo.inc +#--source include/restart_mysqld_no_echo.inc + +--remove_file $BOOTSTRAP_SQL + +# Remove residue files +--force-rmdir $MYSQL_TMP_DIR/datadir +--force-rmdir $MYSQL_TMP_DIR/innodb_data_home_dir +--force-rmdir $MYSQL_TMP_DIR/innodb_undo_data_dir diff --git a/mysql-test/suite/perfschema/r/show_sanity.result b/mysql-test/suite/perfschema/r/show_sanity.result index 356a7664c5a2..ad675f0dcf89 100644 --- a/mysql-test/suite/perfschema/r/show_sanity.result +++ b/mysql-test/suite/perfschema/r/show_sanity.result @@ -414,7 +414,6 @@ SHOW_MODE SOURCE VARIABLE_NAME 5.6 I_S.SESSION_VARIABLES INNODB_COMPRESSED_COLUMNS_THRESHOLD 5.6 I_S.SESSION_VARIABLES INNODB_COMPRESSED_COLUMNS_ZIP_LEVEL 5.6 I_S.SESSION_VARIABLES INNODB_DEADLOCK_DETECT -5.6 I_S.SESSION_VARIABLES INNODB_REDO_LOG_ENCRYPT 5.6 I_S.SESSION_VARIABLES INNODB_STATS_INCLUDE_DELETE_MARKED 5.6 I_S.SESSION_VARIABLES KEYRING_OPERATIONS 5.6 I_S.SESSION_VARIABLES KILL_IDLE_TRANSACTION @@ -447,7 +446,6 @@ SHOW_MODE SOURCE VARIABLE_NAME 5.6 I_S.SESSION_VARIABLES INNODB_COMPRESSED_COLUMNS_THRESHOLD 5.6 I_S.SESSION_VARIABLES INNODB_COMPRESSED_COLUMNS_ZIP_LEVEL 5.6 I_S.SESSION_VARIABLES INNODB_DEADLOCK_DETECT -5.6 I_S.SESSION_VARIABLES INNODB_REDO_LOG_ENCRYPT 5.6 I_S.SESSION_VARIABLES INNODB_STATS_INCLUDE_DELETE_MARKED 5.6 I_S.SESSION_VARIABLES KEYRING_OPERATIONS 5.6 I_S.SESSION_VARIABLES KILL_IDLE_TRANSACTION diff --git a/mysql-test/suite/perfschema/t/show_sanity.test b/mysql-test/suite/perfschema/t/show_sanity.test index c6e44701d497..265ef4dbfc4c 100644 --- a/mysql-test/suite/perfschema/t/show_sanity.test +++ b/mysql-test/suite/perfschema/t/show_sanity.test @@ -523,6 +523,7 @@ insert into test.sanity values ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_READ_AHEAD_THRESHOLD"), ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_READ_IO_THREADS"), ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_READ_ONLY"), + ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_REDO_LOG_ENCRYPT"), ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_REPLICATION_DELAY"), ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_ROLLBACK_ON_TIMEOUT"), ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_ROLLBACK_SEGMENTS"), @@ -556,6 +557,7 @@ insert into test.sanity values ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_TRX_PURGE_VIEW_UPDATE_ONLY_DEBUG"), ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_TRX_RSEG_N_SLOTS_DEBUG"), ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_UNDO_DIRECTORY"), + ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_UNDO_LOG_ENCRYPT"), ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_UNDO_LOG_TRUNCATE"), ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_UNDO_LOGS"), ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_UNDO_TABLESPACES"), diff --git a/mysql-test/suite/sys_vars/r/innodb_undo_log_encrypt_basic.result b/mysql-test/suite/sys_vars/r/innodb_undo_log_encrypt_basic.result new file mode 100644 index 000000000000..1bab21618a30 --- /dev/null +++ b/mysql-test/suite/sys_vars/r/innodb_undo_log_encrypt_basic.result @@ -0,0 +1,61 @@ +SET @start_global_value = @@global.innodb_undo_log_encrypt; +SELECT @start_global_value; +@start_global_value +0 +select @@global.innodb_undo_log_encrypt in (0, 1); +@@global.innodb_undo_log_encrypt in (0, 1) +1 +select @@global.innodb_undo_log_encrypt; +@@global.innodb_undo_log_encrypt +0 +select @@session.innodb_undo_log_encrypt; +ERROR HY000: Variable 'innodb_undo_log_encrypt' is a GLOBAL variable +show global variables like 'innodb_undo_log_encrypt'; +Variable_name Value +innodb_undo_log_encrypt OFF +show session variables like 'innodb_undo_log_encrypt'; +Variable_name Value +innodb_undo_log_encrypt OFF +select * from performance_schema.global_variables where variable_name='innodb_undo_log_encrypt'; +VARIABLE_NAME VARIABLE_VALUE +innodb_undo_log_encrypt OFF +select * from performance_schema.session_variables where variable_name='innodb_undo_log_encrypt'; +VARIABLE_NAME VARIABLE_VALUE +innodb_undo_log_encrypt OFF +set global innodb_undo_log_encrypt=1; +select @@global.innodb_undo_log_encrypt; +@@global.innodb_undo_log_encrypt +0 +select * from performance_schema.global_variables where variable_name='innodb_undo_log_encrypt'; +VARIABLE_NAME VARIABLE_VALUE +innodb_undo_log_encrypt OFF +select * from performance_schema.session_variables where variable_name='innodb_undo_log_encrypt'; +VARIABLE_NAME VARIABLE_VALUE +innodb_undo_log_encrypt OFF +set @@global.innodb_undo_log_encrypt=0; +select @@global.innodb_undo_log_encrypt; +@@global.innodb_undo_log_encrypt +0 +select * from performance_schema.global_variables where variable_name='innodb_undo_log_encrypt'; +VARIABLE_NAME VARIABLE_VALUE +innodb_undo_log_encrypt OFF +select * from performance_schema.session_variables where variable_name='innodb_undo_log_encrypt'; +VARIABLE_NAME VARIABLE_VALUE +innodb_undo_log_encrypt OFF +set session innodb_undo_log_encrypt='some'; +ERROR HY000: Variable 'innodb_undo_log_encrypt' is a GLOBAL variable and should be set with SET GLOBAL +set @@session.innodb_undo_log_encrypt='some'; +ERROR HY000: Variable 'innodb_undo_log_encrypt' is a GLOBAL variable and should be set with SET GLOBAL +set global innodb_undo_log_encrypt=1.1; +ERROR 42000: Incorrect argument type to variable 'innodb_undo_log_encrypt' +set global innodb_undo_log_encrypt='foo'; +ERROR 42000: Variable 'innodb_undo_log_encrypt' can't be set to the value of 'foo' +set global innodb_undo_log_encrypt=-2; +set global innodb_undo_log_encrypt=1e1; +ERROR 42000: Incorrect argument type to variable 'innodb_undo_log_encrypt' +set global innodb_undo_log_encrypt=2; +ERROR 42000: Variable 'innodb_undo_log_encrypt' can't be set to the value of '2' +SET @@global.innodb_undo_log_encrypt = @start_global_value; +SELECT @@global.innodb_undo_log_encrypt; +@@global.innodb_undo_log_encrypt +0 diff --git a/mysql-test/suite/sys_vars/t/innodb_undo_log_encrypt_basic.test b/mysql-test/suite/sys_vars/t/innodb_undo_log_encrypt_basic.test new file mode 100644 index 000000000000..970c84079a47 --- /dev/null +++ b/mysql-test/suite/sys_vars/t/innodb_undo_log_encrypt_basic.test @@ -0,0 +1,65 @@ +--source include/have_innodb.inc + +--disable_query_log +call mtr.add_suppression("\\[ERROR\\] InnoDB: Encryption can't find master key, please check the keyring plugin is loaded."); +call mtr.add_suppression("\\[ERROR\\] InnoDB: Can't set undo tablespaces to be encrypted, since innodb_undo_tablespaces=0"); +call mtr.add_suppression("\\[ERROR\\] InnoDB: Can't set undo tablespace number 1 to be encrypted"); +--enable_query_log + +SET @start_global_value = @@global.innodb_undo_log_encrypt; +SELECT @start_global_value; + +# +# exists as global only +# +select @@global.innodb_undo_log_encrypt in (0, 1); +select @@global.innodb_undo_log_encrypt; +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +select @@session.innodb_undo_log_encrypt; +show global variables like 'innodb_undo_log_encrypt'; +show session variables like 'innodb_undo_log_encrypt'; +--disable_warnings +select * from performance_schema.global_variables where variable_name='innodb_undo_log_encrypt'; +select * from performance_schema.session_variables where variable_name='innodb_undo_log_encrypt'; +--enable_warnings + +# +# show that it's writable +# +set global innodb_undo_log_encrypt=1; +--sleep 2 +select @@global.innodb_undo_log_encrypt; +--disable_warnings +select * from performance_schema.global_variables where variable_name='innodb_undo_log_encrypt'; +select * from performance_schema.session_variables where variable_name='innodb_undo_log_encrypt'; +--enable_warnings +set @@global.innodb_undo_log_encrypt=0; +select @@global.innodb_undo_log_encrypt; +--disable_warnings +select * from performance_schema.global_variables where variable_name='innodb_undo_log_encrypt'; +select * from performance_schema.session_variables where variable_name='innodb_undo_log_encrypt'; +--enable_warnings +--error ER_GLOBAL_VARIABLE +set session innodb_undo_log_encrypt='some'; +--error ER_GLOBAL_VARIABLE +set @@session.innodb_undo_log_encrypt='some'; + +# +# incorrect types +# +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_undo_log_encrypt=1.1; +--error ER_WRONG_VALUE_FOR_VAR +set global innodb_undo_log_encrypt='foo'; +set global innodb_undo_log_encrypt=-2; +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_undo_log_encrypt=1e1; +--error ER_WRONG_VALUE_FOR_VAR +set global innodb_undo_log_encrypt=2; + +# +# Cleanup +# + +SET @@global.innodb_undo_log_encrypt = @start_global_value; +SELECT @@global.innodb_undo_log_encrypt; diff --git a/storage/innobase/fil/fil0crypt.cc b/storage/innobase/fil/fil0crypt.cc index 9712b1683471..54efa73ee0d2 100644 --- a/storage/innobase/fil/fil0crypt.cc +++ b/storage/innobase/fil/fil0crypt.cc @@ -390,25 +390,6 @@ fil_space_merge_crypt_data( mutex_exit(&dst->mutex); } -static -ulint -fsp_header_get_encryption_offset( - const page_size_t& page_size) { - ulint offset; -#ifdef UNIV_DEBUG - ulint left_size; -#endif - - offset = XDES_ARR_OFFSET + XDES_SIZE * xdes_arr_size(page_size); -#ifdef UNIV_DEBUG - left_size = page_size.physical() - FSP_HEADER_OFFSET - offset - - FIL_PAGE_DATA_END; - ut_ad(left_size >= fil_get_encrypt_info_size(CRYPT_SCHEME_1_IV_LEN)); -#endif - - return offset; -} - fil_space_crypt_t* fil_space_read_crypt_data(const page_size_t& page_size, const byte* page) { diff --git a/storage/innobase/fil/fil0fil.cc b/storage/innobase/fil/fil0fil.cc index 562c3aa67b04..0caa3114eea3 100644 --- a/storage/innobase/fil/fil0fil.cc +++ b/storage/innobase/fil/fil0fil.cc @@ -5916,6 +5916,13 @@ fil_io_set_encryption( return; } + /* For writting undo log, if encryption for undo log is disabled, + skip set encryption. */ + if (fsp_is_undo_tablespace(space->id) + && !srv_undo_log_encrypt && req_type.is_write()) { + req_type.clear_encrypted(); + return; + } /* Don't encrypt the log, page 0 of all tablespaces, all pages don't encrypt TRX_SYS_SPACE.TRX_SYS_PAGE_NO as it contains address to dblwr buffer */ @@ -8022,6 +8029,17 @@ fil_encryption_rotate() continue; } + /* Skip the undo tablespace when it's in default + key status, since it's the first server startup + after bootstrap, and the server uuid is not ready + yet. */ + if (fsp_is_undo_tablespace(space->id) + && Encryption::master_key_id == + ENCRYPTION_DEFAULT_MASTER_KEY_ID) { + space = UT_LIST_GET_NEXT(space_list, space); + continue; + } + /* Skip the temporary tablespace when it's in default key status, since it's the first server startup after bootstrap, and the server uuid is not ready diff --git a/storage/innobase/fsp/fsp0fsp.cc b/storage/innobase/fsp/fsp0fsp.cc index 9d655ff6ed0c..4c3f727fa259 100644 --- a/storage/innobase/fsp/fsp0fsp.cc +++ b/storage/innobase/fsp/fsp0fsp.cc @@ -213,6 +213,20 @@ fsp_flags_to_dict_tf( return(flags); } +/** Check whether a space id is an undo tablespace ID + * Undo tablespaces have space_id's starting 1 less than the redo logs. + * They are numbered down from this. Since rseg_id=0 always refers to the + * system tablespace, undo_space_num values start at 1. The current limit + * is 127. The translation from an undo_space_num is: + * undo space_id = log_first_space_id - undo_space_num + * @param[in] space_id space id to check + * @return true if it is undo tablespace else false. */ +bool +fsp_is_undo_tablespace(uint32 space_id) +{ + return srv_is_undo_tablespace(space_id); +} + bool fsp_is_system_or_temp_tablespace(uint32 space_id) { @@ -868,7 +882,7 @@ fsp_header_init_fields( /** Get the offset of encrytion information in page 0. @param[in] page_size page size. @return offset on success, otherwise 0. */ -static +MY_NODISCARD ulint fsp_header_get_encryption_offset( const page_size_t& page_size) @@ -1019,42 +1033,34 @@ fsp_header_fill_encryption_info( return(true); } -/** Rotate the encryption info in the space header. -@param[in] space tablespace -@param[in] encrypt_info buffer for re-encrypt key. -@param[in,out] mtr mini-transaction +/** Write the encryption info into the space header. +@param[in] space_id tablespace id +@param[in] space_flags tablespace flags +@param[in] encrypt_info buffer for re-encrypt key +@param[in] update_fsp_flags if it need to update the space flags +@param[in,out] mtr mini-transaction @return true if success. */ bool -fsp_header_rotate_encryption( - fil_space_t* space, +fsp_header_write_encryption( + ulint space_id, + ulint space_flags, byte* encrypt_info, + bool update_fsp_flags, mtr_t* mtr) { + const page_size_t page_size(space_flags); buf_block_t* block; ulint offset; page_t* page; ulint master_key_id; - ut_ad(mtr); - ut_ad(space->encryption_type != Encryption::NONE); - - const page_size_t page_size(space->flags); - - DBUG_EXECUTE_IF("fsp_header_rotate_encryption_failure", - return(false);); - - /* Fill encryption info. */ - if (!fsp_header_fill_encryption_info(space->encryption_key, - space->encryption_iv, encrypt_info)) { - return(false); - } - /* Save the encryption info to the page 0. */ - block = buf_page_get(page_id_t(space->id, 0), + block = buf_page_get(page_id_t(space_id, 0), page_size, RW_SX_LATCH, mtr); + buf_block_dbg_add_level(block, SYNC_FSP_PAGE); - ut_ad(space->id == page_get_space_id(buf_block_get_frame(block))); + ut_ad(space_id == page_get_space_id(buf_block_get_frame(block))); offset = fsp_header_get_encryption_offset(page_size); ut_ad(offset != 0 && offset < UNIV_PAGE_SIZE); @@ -1081,9 +1087,46 @@ fsp_header_rotate_encryption( ENCRYPTION_INFO_SIZE_V2, mtr); + /* Write the new fsp flags into be update to the header if needed */ + if (update_fsp_flags) { + mlog_write_ulint(page + FSP_HEADER_OFFSET + FSP_SPACE_FLAGS, + space_flags, MLOG_4BYTES, mtr); + } + return(true); } +/** Rotate the encryption info in the space header. +@param[in] space tablespace +@param[in] encrypt_info buffer for re-encrypt key. +@param[in,out] mtr mini-transaction +@return true if success. */ +bool +fsp_header_rotate_encryption( + fil_space_t* space, + byte* encrypt_info, + mtr_t* mtr) +{ + ut_ad(mtr); + ut_ad(space->encryption_type != Encryption::NONE); + + DBUG_EXECUTE_IF("fsp_header_rotate_encryption_failure", + return(false);); + + /* Fill encryption info. */ + if (!fsp_header_fill_encryption_info(space->encryption_key, + space->encryption_iv, encrypt_info)) { + return(false); + } + + /* Write encryption info into space header. */ + return(fsp_header_write_encryption(space->id, + space->flags, + encrypt_info, + false, + mtr)); +} + /** Enable encryption for already existing tablespace. @param[in,out] space tablespace object @return true if success, else false */ diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index 0cb965d6ecd8..dd5bcc59e13b 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -22198,6 +22198,11 @@ static MYSQL_SYSVAR_LONG(autoinc_lock_mode, innobase_autoinc_lock_mode, AUTOINC_OLD_STYLE_LOCKING, /* Minimum value */ AUTOINC_NO_LOCKING, 0); /* Maximum value */ +static MYSQL_SYSVAR_BOOL(undo_log_encrypt, srv_undo_log_encrypt, + PLUGIN_VAR_OPCMDARG, + "Enable or disable Encryption of UNDO tablespaces.", + NULL, NULL, FALSE); + static MYSQL_SYSVAR_STR(version, innodb_version_str, PLUGIN_VAR_NOCMDOPT | PLUGIN_VAR_READONLY, "Percona-InnoDB-plugin version", NULL, NULL, INNODB_VERSION_STR); @@ -22709,6 +22714,7 @@ static struct st_mysql_sys_var* innobase_system_variables[]= { MYSQL_SYSVAR(max_undo_log_size), MYSQL_SYSVAR(purge_rseg_truncate_frequency), MYSQL_SYSVAR(undo_log_truncate), + MYSQL_SYSVAR(undo_log_encrypt), MYSQL_SYSVAR(rollback_segments), MYSQL_SYSVAR(undo_directory), MYSQL_SYSVAR(undo_tablespaces), diff --git a/storage/innobase/include/dict0dict.h b/storage/innobase/include/dict0dict.h index cc7d384ac36f..2cdffef8ad93 100644 --- a/storage/innobase/include/dict0dict.h +++ b/storage/innobase/include/dict0dict.h @@ -39,6 +39,7 @@ Created 1/8/1996 Heikki Tuuri #include "rem0types.h" #include "row0types.h" #include "trx0types.h" +#include "trx0sys.h" #include "ut0byte.h" #include "ut0mem.h" #include "ut0new.h" @@ -1732,6 +1733,26 @@ struct dict_sys_t{ evicted from the cache */ autoinc_map_t* autoinc_map; /*!< Map to store table id and autoinc when table is evicted */ + + /** The first ID of the redo log pseudo-tablespace */ + static const ulint s_log_space_first_id = 0xFFFFFFF0UL; + /** Use maximum UINT value to indicate invalid space ID. */ + static const ulint s_invalid_space_id = 0xFFFFFFFF; + /** The data dictionary tablespace ID. The data dictionary + tablespace does not exist in 5.7, but its ID added here + for assertion checking. */ + static const ulint s_space_id = 0xFFFFFFFE; + /** The innodb_temporary tablespace ID. */ + static const ulint s_temp_space_id = 0xFFFFFFFD; + /** The lowest undo tablespace ID. */ + static const ulint s_min_undo_space_id + = s_log_space_first_id - TRX_SYS_N_RSEGS; + /** The highest undo tablespace ID. */ + static const ulint s_max_undo_space_id + = s_log_space_first_id - 1; + /** The first reserved tablespace ID */ + static const ulint s_reserved_space_id = + s_min_undo_space_id; }; #endif /* !UNIV_HOTBACKUP */ diff --git a/storage/innobase/include/fsp0fsp.h b/storage/innobase/include/fsp0fsp.h index 91779f5a065e..b1e402325fd2 100644 --- a/storage/innobase/include/fsp0fsp.h +++ b/storage/innobase/include/fsp0fsp.h @@ -369,6 +369,29 @@ fsp_header_init_fields( ulint flags); /*!< in: tablespace flags (FSP_SPACE_FLAGS): 0, or table->flags if newer than COMPACT */ +/** Get the offset of encrytion information in page 0. + * @param[in] page_size page size. + * @return offset on success, otherwise 0. */ +MY_NODISCARD +ulint +fsp_header_get_encryption_offset( + const page_size_t& page_size); + +/** Write the encryption info into the space header. +@param[in] space_id tablespace id +@param[in] space_flags tablespace flags +@param[in] encrypt_info buffer for re-encrypt key +@param[in] update_fsp_flags if it need to update the space flags +@param[in,out] mtr mini-transaction +@return true if success. */ +bool +fsp_header_write_encryption( + ulint space_id, + ulint space_flags, + byte* encrypt_info, + bool update_fsp_flags, + mtr_t* mtr); + /** Rotate the encryption info in the space header. @param[in] space tablespace @param[in] encrypt_info buffer for re-encrypt key. @@ -393,6 +416,9 @@ fsp_header_fill_encryption_info( byte* iv, byte* encrypt_info); +bool +fsp_is_undo_tablespace(uint32 space_id); + MY_NODISCARD bool fsp_is_system_or_temp_tablespace( diff --git a/storage/innobase/include/srv0srv.h b/storage/innobase/include/srv0srv.h index 04d7ee63d972..a6f944e84ade 100644 --- a/storage/innobase/include/srv0srv.h +++ b/storage/innobase/include/srv0srv.h @@ -341,6 +341,9 @@ extern ulonglong srv_max_changed_pages; extern const ulint SRV_UNDO_TABLESPACE_SIZE_IN_PAGES; extern char* srv_log_group_home_dir; + +/** Enable or Disable Encrypt of REDO tablespace. */ +extern my_bool srv_undo_log_encrypt; #ifndef UNIV_HOTBACKUP /** Maximum number of srv_n_log_files, or innodb_log_files_in_group */ diff --git a/storage/innobase/srv/srv0srv.cc b/storage/innobase/srv/srv0srv.cc index 1d4733584f2b..c20fed1370c8 100644 --- a/storage/innobase/srv/srv0srv.cc +++ b/storage/innobase/srv/srv0srv.cc @@ -71,6 +71,7 @@ Created 10/8/1995 Heikki Tuuri #include "sync0sync.h" #include "trx0i_s.h" #include "trx0purge.h" +#include "trx0rseg.h" #include "usr0sess.h" #include "ut0crc32.h" #include "ut0mem.h" @@ -153,6 +154,9 @@ my_bool srv_undo_log_truncate = FALSE; /** Maximum size of undo tablespace. */ unsigned long long srv_max_undo_log_size; +/** Enable or disable Encrypt of REDO tablespace. */ +my_bool srv_undo_log_encrypt = 0; + /** UNDO logs that are not redo logged. These logs reside in the temp tablespace.*/ const ulong srv_tmp_undo_logs = 32; @@ -766,6 +770,10 @@ PSI_stage_info srv_stage_buffer_pool_load = {0, "buffer pool load", PSI_FLAG_STAGE_PROGRESS}; #endif /* HAVE_PSI_STAGE_INTERFACE */ +static +void +srv_enable_undo_encryption_if_set(); + /*********************************************************************//** Prints counters for work done by srv_master_thread. */ static @@ -2852,6 +2860,8 @@ DECLARE_THREAD(srv_master_thread)( } log_enable_encryption_if_set(); + + srv_enable_undo_encryption_if_set(); } while (srv_shutdown_state != SRV_SHUTDOWN_EXIT_THREADS @@ -3495,3 +3505,166 @@ srv_is_undo_tablespace( && space_id < (srv_undo_space_id_start + srv_undo_tablespaces_open)); } + +/** Enable the undo log encryption if it is set. +It will try to enable the undo log encryption and write the metadata to +undo log file header, if innodb_undo_log_encrypt is ON. */ +static +void +srv_enable_undo_encryption_if_set() +{ + fil_space_t* space; + const char* cant_set_undo_tablespace = "Can't set undo tablespace"; + const char* to_be_encrypted = " to be encrypted"; + if (srv_shutdown_state != SRV_SHUTDOWN_NONE) { + return; + } + + /* Check if encryption for undo log is enabled or not. If it's + enabled, we will store the encryption metadata to the space header + and start to encrypt the undo log block from now on. */ + if (srv_undo_log_encrypt) { + if (srv_undo_tablespaces == 0) { + srv_undo_log_encrypt = false; + ib::error() << cant_set_undo_tablespace << "s" + << to_be_encrypted + << ", since innodb_undo_tablespaces=0."; + return; + } + if (srv_read_only_mode) { + srv_undo_log_encrypt = false; + ib::error() << cant_set_undo_tablespace << "s" + << to_be_encrypted + << " in read-only mode."; + return; + } + ulint undo_spaces[TRX_SYS_N_RSEGS + 1]; + const ulint undo_spaces_no = trx_rseg_get_n_undo_tablespaces(undo_spaces); + for (ulint undo_idx = 0; undo_idx < undo_spaces_no; ++undo_idx) + { + /* Skip system tablespace, since it's also shared + tablespace. */ + const ulint space_id = undo_spaces[undo_idx]; + if (space_id == TRX_SYS_SPACE) { + continue; + } + space = fil_space_get(space_id); + ut_ad(fsp_is_undo_tablespace(space_id)); + /* This flag will be written to the header + later, by calling the fsp_header_write_encryption() +function: */ + ulint new_flags = + space->flags | FSP_FLAGS_MASK_ENCRYPTION; + /* We need the server_uuid initialized, otherwise, + the keyname will not contains server uuid. */ + if (FSP_FLAGS_GET_ENCRYPTION(space->flags) + || strlen(server_uuid) == 0) { + continue; + } + dberr_t err; + mtr_t mtr; + byte encrypt_info[ENCRYPTION_INFO_SIZE_V2]; + byte key[ENCRYPTION_KEY_LEN]; + byte iv[ENCRYPTION_KEY_LEN]; + Encryption::random_value(key); + Encryption::random_value(iv); + mtr_start(&mtr); + mtr_x_lock_space(space->id, &mtr); + memset(encrypt_info, 0, + ENCRYPTION_INFO_SIZE_V2); + if (!Encryption::fill_encryption_info( + key, iv, + encrypt_info)) { + srv_undo_log_encrypt = false; + ib::error() << cant_set_undo_tablespace + << " number " << space_id + << to_be_encrypted << "."; + mtr_commit(&mtr); + return; + } else { + if (!fsp_header_write_encryption( + space->id, + new_flags, + encrypt_info, + true, + &mtr)) { + srv_undo_log_encrypt = false; + ib::error() << cant_set_undo_tablespace + << " number " + << space_id + << to_be_encrypted + << ". Failed to write header" + << " page."; + mtr_commit(&mtr); + return; + } + space->flags |= + FSP_FLAGS_MASK_ENCRYPTION; + err = fil_set_encryption( + space->id, Encryption::AES, + key, iv); + if (err != DB_SUCCESS) { + srv_undo_log_encrypt = false; + ib::error() << cant_set_undo_tablespace + << " number " + << space_id + << to_be_encrypted + << ". Error=" << err << "."; + mtr_commit(&mtr); + return; + } else { + ib::error() << "Encryption is enabled" + " for undo tablespace number " + << space_id << "."; +#ifdef UNIV_ENCRYPT_DEBUG + ut_print_buf(stderr, key, 32); + ut_print_buf(stderr, iv, 32); +#endif + } + } + mtr_commit(&mtr); + } + //undo::spaces->s_unlock(); + return; + } + /* If the undo log space is using default key, rotate + it. We need the server_uuid initialized, otherwise, + the keyname will not contains server uuid. */ + if (Encryption::master_key_id != 0 + || srv_read_only_mode + || strlen(server_uuid) == 0) { + return; + } + ulint undo_spaces[TRX_SYS_N_RSEGS + 1]; + const ulint undo_spaces_no = trx_rseg_get_n_undo_tablespaces(undo_spaces); + for (ulint undo_idx = 0; undo_idx < undo_spaces_no; ++undo_idx) + { + const ulint space_id = undo_spaces[undo_idx]; + ut_ad(fsp_is_undo_tablespace(space_id)); + space = fil_space_get(space_id); + ut_ad(space); + if (space->encryption_type == Encryption::NONE) { + continue; + } + byte encrypt_info[ENCRYPTION_INFO_SIZE_V2]; + mtr_t mtr; + ut_ad(FSP_FLAGS_GET_ENCRYPTION(space->flags)); + mtr_start(&mtr); + mtr_x_lock_space(space->id, &mtr); + memset(encrypt_info, 0, + ENCRYPTION_INFO_SIZE_V2); + if (!fsp_header_rotate_encryption( + space, + encrypt_info, + &mtr)) { + ib::error() << "Can't rotate encryption on undo" + " tablespace number " + << space_id << "."; + } else { + ib::error() << "Encryption is enabled" + " for undo tablespace number " + << space_id << "."; + } + mtr_commit(&mtr); + } +} diff --git a/storage/innobase/srv/srv0start.cc b/storage/innobase/srv/srv0start.cc index a68857d2eb90..65f00a253862 100644 --- a/storage/innobase/srv/srv0start.cc +++ b/storage/innobase/srv/srv0start.cc @@ -667,6 +667,67 @@ srv_undo_tablespace_create( return(err); } + +/** Try to read encryption metadata from an undo tablespace. +@param[in] fh file handle of undo log file +@param[in] space undo tablespace +@return DB_SUCCESS if success */ +static +dberr_t +srv_undo_tablespace_read_encryption( + pfs_os_file_t fh, + fil_space_t* space) +{ + IORequest request; + ulint n_read = 0; + size_t page_size = UNIV_PAGE_SIZE_MAX; + dberr_t err = DB_ERROR; + byte* first_page_buf = static_cast( + ut_malloc_nokey(2 * UNIV_PAGE_SIZE_MAX)); + /* Align the memory for a possible read from a raw device */ + byte* first_page = static_cast( + ut_align(first_page_buf, UNIV_PAGE_SIZE)); + /* Don't want unnecessary complaints about partial reads. */ + request.disable_partial_io_warnings(); + err = os_file_read_no_error_handling( + request, fh, first_page, 0, page_size, &n_read); + if (err != DB_SUCCESS) { + ib::info() + << "Cannot read first page of '" + << space->name << "' " + << ut_strerr(err); + ut_free(first_page_buf); + return(err); + } + ulint offset; + const page_size_t space_page_size(space->flags); + offset = fsp_header_get_encryption_offset(space_page_size); + ut_ad(offset); + /* Return if the encryption metadata is empty. */ + if (memcmp(first_page + offset, + ENCRYPTION_KEY_MAGIC_V2, + ENCRYPTION_MAGIC_SIZE) != 0) { + ut_free(first_page_buf); + return(DB_SUCCESS); + } + byte key[ENCRYPTION_KEY_LEN]; + byte iv[ENCRYPTION_KEY_LEN]; + if (fsp_header_get_encryption_key(space->flags, key, + iv, first_page)) { + space->flags |= FSP_FLAGS_MASK_ENCRYPTION; + err = fil_set_encryption(space->id, + Encryption::AES, + key, + iv); + ut_ad(err == DB_SUCCESS); + } else { + ut_free(first_page_buf); + return(DB_FAIL); + } + ut_free(first_page_buf); + return(DB_SUCCESS); +} + /*********************************************************************//** Open an undo tablespace. @return DB_SUCCESS or error code */ @@ -724,9 +785,6 @@ srv_undo_tablespace_open( size = os_file_get_size(fh); ut_a(size != (os_offset_t) -1); - ret = os_file_close(fh); - ut_a(ret); - /* Load the tablespace into InnoDB's internal data structures. */ @@ -751,11 +809,26 @@ srv_undo_tablespace_open( is 64 bits. It is OK to cast the n_pages to ulint because the unit has been scaled to pages and page number is always 32 bits. */ - if (fil_node_create( + if (!fil_node_create( name, (ulint) n_pages, space, false, atomic_write)) { + os_file_close(fh); + ib::error() << "Error creating file node for " << undo_name; + return(DB_ERROR); + } + + err = DB_SUCCESS; + /* Read the encryption metadata in this undo tablespace. + If the encryption info in the first page cannot be decrypted + by the master key, this table cannot be opened. */ + err = srv_undo_tablespace_read_encryption(fh, space); + /* The file handle will no longer be needed. */ + os_file_close(fh); - err = DB_SUCCESS; + if (err != DB_SUCCESS) { + ib::error() << "Error reading encryption for " << undo_name; + return(err); } + } return(err); From 869b221c6662d6a5a33cda4195b5c1fa5bf928d4 Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Tue, 30 Oct 2018 08:56:07 +0100 Subject: [PATCH 1178/1221] PS-3834, PS-3839: Basic scrubbing This commit takes the data/log scrubbing from mariadb. The functionality is similar to as of mariadb (incomplete). * Immediate data scrubbing works, and this is verified by the innodb_scrubbing testcase. * Background scrubbing starts, but it is tied to the encryption threads / encryption info. It is only minimally verified as only encrypted tables can be scrubbed, in which case the result isn't fully clear. It's progress can be observed by the changing status variables. * (Redo/undo) log scrubbing is taken from mariadb, but is incomplete - data which should have been scrubbed remains in the logs. This can be verified by adding an index to the tables in the innodb_scrub testcase. This bug is the same as in mariadb. For more description about the existing issues, see MDEV-8139 in the mariadb jira. --- mysql-test/suite/innodb/r/innodb_scrub.result | 141 +++ .../suite/innodb/t/innodb_scrub-master.opt | 7 + mysql-test/suite/innodb/t/innodb_scrub.test | 146 +++ .../t/innodb_scrub_background-master.opt | 10 + .../innodb/t/innodb_scrub_background.test | 172 ++++ .../suite/perfschema/r/show_sanity.result | 44 + ...und_scrub_data_check_interval_basic.result | 76 ++ ...kground_scrub_data_compressed_basic.result | 54 + ...ackground_scrub_data_interval_basic.result | 54 + ...round_scrub_data_uncompressed_basic.result | 54 + .../innodb_debug_force_scrubbing_basic.result | 54 + ...diate_scrub_data_uncompressed_basic.result | 54 + .../sys_vars/r/innodb_scrub_log_basic.result | 52 + .../r/innodb_scrub_log_speed_basic.result | 57 ++ ...round_scrub_data_check_interval_basic.test | 54 + ...ackground_scrub_data_compressed_basic.test | 41 + ..._background_scrub_data_interval_basic.test | 41 + ...kground_scrub_data_uncompressed_basic.test | 41 + .../t/innodb_debug_force_scrubbing_basic.test | 42 + ...mediate_scrub_data_uncompressed_basic.test | 41 + .../sys_vars/t/innodb_scrub_log_basic.test | 50 + .../t/innodb_scrub_log_speed_basic.test | 55 ++ storage/innobase/CMakeLists.txt | 1 + storage/innobase/btr/btr0btr.cc | 22 + storage/innobase/btr/btr0scrub.cc | 922 ++++++++++++++++++ storage/innobase/dict/dict0load.cc | 93 ++ storage/innobase/fil/fil0crypt.cc | 176 +++- storage/innobase/handler/ha_innodb.cc | 112 ++- storage/innobase/handler/i_s.cc | 275 ++++++ storage/innobase/handler/i_s.h | 2 +- storage/innobase/include/btr0scrub.h | 155 +++ storage/innobase/include/dict0dict.h | 7 + storage/innobase/include/dict0mem.h | 7 + storage/innobase/include/log0log.h | 8 + storage/innobase/include/page0page.h | 2 + storage/innobase/include/srv0srv.h | 13 + storage/innobase/include/sync0types.h | 1 + storage/innobase/log/log0log.cc | 120 ++- storage/innobase/page/page0page.cc | 9 +- storage/innobase/row/row0umod.cc | 10 +- storage/innobase/srv/srv0srv.cc | 22 +- storage/innobase/sync/sync0debug.cc | 4 + 42 files changed, 3293 insertions(+), 8 deletions(-) create mode 100644 mysql-test/suite/innodb/r/innodb_scrub.result create mode 100644 mysql-test/suite/innodb/t/innodb_scrub-master.opt create mode 100644 mysql-test/suite/innodb/t/innodb_scrub.test create mode 100644 mysql-test/suite/innodb/t/innodb_scrub_background-master.opt create mode 100644 mysql-test/suite/innodb/t/innodb_scrub_background.test create mode 100644 mysql-test/suite/sys_vars/r/innodb_background_scrub_data_check_interval_basic.result create mode 100644 mysql-test/suite/sys_vars/r/innodb_background_scrub_data_compressed_basic.result create mode 100644 mysql-test/suite/sys_vars/r/innodb_background_scrub_data_interval_basic.result create mode 100644 mysql-test/suite/sys_vars/r/innodb_background_scrub_data_uncompressed_basic.result create mode 100644 mysql-test/suite/sys_vars/r/innodb_debug_force_scrubbing_basic.result create mode 100644 mysql-test/suite/sys_vars/r/innodb_immediate_scrub_data_uncompressed_basic.result create mode 100644 mysql-test/suite/sys_vars/r/innodb_scrub_log_basic.result create mode 100644 mysql-test/suite/sys_vars/r/innodb_scrub_log_speed_basic.result create mode 100644 mysql-test/suite/sys_vars/t/innodb_background_scrub_data_check_interval_basic.test create mode 100644 mysql-test/suite/sys_vars/t/innodb_background_scrub_data_compressed_basic.test create mode 100644 mysql-test/suite/sys_vars/t/innodb_background_scrub_data_interval_basic.test create mode 100644 mysql-test/suite/sys_vars/t/innodb_background_scrub_data_uncompressed_basic.test create mode 100644 mysql-test/suite/sys_vars/t/innodb_debug_force_scrubbing_basic.test create mode 100644 mysql-test/suite/sys_vars/t/innodb_immediate_scrub_data_uncompressed_basic.test create mode 100644 mysql-test/suite/sys_vars/t/innodb_scrub_log_basic.test create mode 100644 mysql-test/suite/sys_vars/t/innodb_scrub_log_speed_basic.test create mode 100644 storage/innobase/btr/btr0scrub.cc create mode 100644 storage/innobase/include/btr0scrub.h diff --git a/mysql-test/suite/innodb/r/innodb_scrub.result b/mysql-test/suite/innodb/r/innodb_scrub.result new file mode 100644 index 000000000000..383d62f29dcb --- /dev/null +++ b/mysql-test/suite/innodb/r/innodb_scrub.result @@ -0,0 +1,141 @@ +create table snapshot_status engine = myisam +select * from performance_schema.global_status +where variable_name like 'innodb_scrub_background%'; +# FIXME: Add index(b) to each table; ensure that undo logs are scrubbed. +# see MDEV-8139 for details +create table delete_3 ( +a int auto_increment primary key, +b varchar(256), +c text) engine = innodb row_format=compressed; +delete from delete_3; +create table delete_rollback_delete_3 ( +a int auto_increment primary key, +b varchar(256), +c text) engine = innodb row_format=compressed; +begin; +delete from delete_rollback_delete_3; +rollback; +delete from delete_rollback_delete_3; +create table insert_rollback_3 ( +a int auto_increment primary key, +b varchar(256), +c text) engine = innodb row_format=compressed; +begin; +rollback; +create table delete_2 ( +a int auto_increment primary key, +b varchar(256), +c text) engine = innodb row_format=compact; +delete from delete_2; +create table delete_rollback_delete_2 ( +a int auto_increment primary key, +b varchar(256), +c text) engine = innodb row_format=compact; +begin; +delete from delete_rollback_delete_2; +rollback; +delete from delete_rollback_delete_2; +create table insert_rollback_2 ( +a int auto_increment primary key, +b varchar(256), +c text) engine = innodb row_format=compact; +begin; +rollback; +create table delete_1 ( +a int auto_increment primary key, +b varchar(256), +c text) engine = innodb row_format=redundant; +delete from delete_1; +create table delete_rollback_delete_1 ( +a int auto_increment primary key, +b varchar(256), +c text) engine = innodb row_format=redundant; +begin; +delete from delete_rollback_delete_1; +rollback; +delete from delete_rollback_delete_1; +create table insert_rollback_1 ( +a int auto_increment primary key, +b varchar(256), +c text) engine = innodb row_format=redundant; +begin; +rollback; +create table delete_0 ( +a int auto_increment primary key, +b varchar(256), +c text) engine = innodb row_format=dynamic; +delete from delete_0; +create table delete_rollback_delete_0 ( +a int auto_increment primary key, +b varchar(256), +c text) engine = innodb row_format=dynamic; +begin; +delete from delete_rollback_delete_0; +rollback; +delete from delete_rollback_delete_0; +create table insert_rollback_0 ( +a int auto_increment primary key, +b varchar(256), +c text) engine = innodb row_format=dynamic; +begin; +rollback; +SET GLOBAL innodb_fast_shutdown=0; +# delete_3.ibd +# delete_rollback_delete_3.ibd +# insert_rollback_3.ibd +# delete_2.ibd +# delete_rollback_delete_2.ibd +# insert_rollback_2.ibd +# delete_1.ibd +# delete_rollback_delete_1.ibd +# insert_rollback_1.ibd +# delete_0.ibd +# delete_rollback_delete_0.ibd +# insert_rollback_0.ibd +# restart +check table delete_3, delete_rollback_delete_3, insert_rollback_3; +Table Op Msg_type Msg_text +test.delete_3 check status OK +test.delete_rollback_delete_3 check status OK +test.insert_rollback_3 check status OK +drop table delete_3, delete_rollback_delete_3, insert_rollback_3; +check table delete_2, delete_rollback_delete_2, insert_rollback_2; +Table Op Msg_type Msg_text +test.delete_2 check status OK +test.delete_rollback_delete_2 check status OK +test.insert_rollback_2 check status OK +drop table delete_2, delete_rollback_delete_2, insert_rollback_2; +check table delete_1, delete_rollback_delete_1, insert_rollback_1; +Table Op Msg_type Msg_text +test.delete_1 check status OK +test.delete_rollback_delete_1 check status OK +test.insert_rollback_1 check status OK +drop table delete_1, delete_rollback_delete_1, insert_rollback_1; +check table delete_0, delete_rollback_delete_0, insert_rollback_0; +Table Op Msg_type Msg_text +test.delete_0 check status OK +test.delete_rollback_delete_0 check status OK +test.insert_rollback_0 check status OK +drop table delete_0, delete_rollback_delete_0, insert_rollback_0; +show variables like 'innodb_%scrub_data%'; +Variable_name Value +innodb_background_scrub_data_check_interval 3600 +innodb_background_scrub_data_compressed OFF +innodb_background_scrub_data_interval 604800 +innodb_background_scrub_data_uncompressed OFF +innodb_immediate_scrub_data_uncompressed ON +# verify that this test have not caused any background scrubbing +select ss.variable_name, gs.variable_value - ss.variable_value as variable_value +from snapshot_status ss, +information_schema.global_status gs +where ss.variable_name = gs.variable_name; +variable_name variable_value +Innodb_scrub_background_page_reorganizations 0 +Innodb_scrub_background_page_split_failures_missing_index 0 +Innodb_scrub_background_page_split_failures_out_of_filespace 0 +Innodb_scrub_background_page_split_failures_underflow 0 +Innodb_scrub_background_page_split_failures_unknown 0 +Innodb_scrub_background_page_splits 0 +Warning 1287 'INFORMATION_SCHEMA.GLOBAL_STATUS' is deprecated and will be removed in a future release. Please use performance_schema.global_status instead +Warnings: +drop table snapshot_status; diff --git a/mysql-test/suite/innodb/t/innodb_scrub-master.opt b/mysql-test/suite/innodb/t/innodb_scrub-master.opt new file mode 100644 index 000000000000..604a7961f1f8 --- /dev/null +++ b/mysql-test/suite/innodb/t/innodb_scrub-master.opt @@ -0,0 +1,7 @@ +--innodb-background-scrub-data-compressed=OFF +--innodb-background-scrub-data-uncompressed=OFF +--innodb-encrypt-tables=OFF +--innodb-encryption-threads=0 +--innodb-immediate-scrub-data-uncompressed=ON +--innodb-scrub-log=ON +--loose-innodb-debug-force-scrubbing=ON diff --git a/mysql-test/suite/innodb/t/innodb_scrub.test b/mysql-test/suite/innodb/t/innodb_scrub.test new file mode 100644 index 000000000000..35ce05d469a2 --- /dev/null +++ b/mysql-test/suite/innodb/t/innodb_scrub.test @@ -0,0 +1,146 @@ +-- source include/have_innodb.inc +-- source include/not_embedded.inc + +let $MYSQLD_DATADIR=`select @@datadir`; +let INNODB_PAGE_SIZE= `select @@innodb_page_size`; + +create table snapshot_status engine = myisam +select * from performance_schema.global_status +where variable_name like 'innodb_scrub_background%'; + +let $rowcount=500; +let $maxformatno= 4; +let $formatno= $maxformatno; + +--echo # FIXME: Add index(b) to each table; ensure that undo logs are scrubbed. +--echo # see MDEV-8139 for details +let $tableformat= ( + a int auto_increment primary key, + b varchar(256), + c text) engine = innodb row_format; + +while ($formatno) +{ +dec $formatno; +let $format = `select case $formatno + when 0 then 'dynamic' + when 1 then 'redundant' + when 2 then 'compact' + when 3 then 'compressed' + end`; + +let $t= delete_$formatno; +eval create table $t $tableformat=$format; + +let $numinserts = $rowcount; +--disable_query_log +begin; +while ($numinserts) +{ + dec $numinserts; + eval insert into $t(b,c) values ('repairman', repeat('unicycle', 1000)); +} +commit; +--enable_query_log + +eval delete from $t; + +let $t= delete_rollback_delete_$formatno; +eval create table $t $tableformat=$format; + +let $numinserts = $rowcount; +--disable_query_log +begin; +while ($numinserts) +{ + dec $numinserts; + eval insert into $t(b,c) values ('breakhuman', repeat('bicycle', 1000)); +} +commit; +--enable_query_log + +begin; +eval delete from $t; +rollback; +eval delete from $t; + +let $t= insert_rollback_$formatno; + +eval create table $t $tableformat=$format; + +let $numinserts = $rowcount; +begin; +--disable_query_log +while ($numinserts) +{ + dec $numinserts; + eval insert into $t(b,c) values ('wonderwoman', repeat('tricycle', 1000)); +} +--enable_query_log + +rollback; +} + +SET GLOBAL innodb_fast_shutdown=0; +-- source include/shutdown_mysqld.inc + +let ABORT_ON=FOUND; +let SEARCH_PATTERN= (un|b|tr)icycle|(repair|breakhu|wonderwo)man; +let SEARCH_RANGE= 12582912; +let SEARCH_FILE= $MYSQLD_DATADIR/ibdata1; + +# We may randomly find copies of unscrubbed pages in the doublewrite buffer. +# Let us scrub the doublewrite buffer ourselves. +perl; +use Fcntl 'SEEK_SET'; +my $page_size = $ENV{INNODB_PAGE_SIZE}; +open(FILE, "+<", "$ENV{SEARCH_FILE}") or die "cannot open: $!\n"; +seek(FILE, $page_size * 64, SEEK_SET) or die "cannot seek: $!\n"; +print(FILE chr(0) x ($page_size * 128)) or die "cannot write: $!\n"; +close FILE or die "cannot close: $!\n";; +EOF + +-- source include/search_pattern_in_file.inc + +let $formatno= $maxformatno; +while ($formatno) +{ +dec $formatno; + +let $t= delete_$formatno.ibd; +let SEARCH_FILE= $MYSQLD_DATADIR/test/$t; +-- echo # $t +-- source include/search_pattern_in_file.inc +let $t= delete_rollback_delete_$formatno.ibd; +let SEARCH_FILE= $MYSQLD_DATADIR/test/$t; +-- echo # $t +-- source include/search_pattern_in_file.inc +let $t= insert_rollback_$formatno.ibd; +let SEARCH_FILE= $MYSQLD_DATADIR/test/$t; +-- echo # $t +-- source include/search_pattern_in_file.inc +} + +-- source include/start_mysqld.inc + +let $formatno= $maxformatno; +while ($formatno) +{ +dec $formatno; + +let $t= delete_$formatno, delete_rollback_delete_$formatno, insert_rollback_$formatno; + +eval check table $t; +eval drop table $t; +} + +show variables like 'innodb_%scrub_data%'; + +--echo # verify that this test have not caused any background scrubbing +--sorted_result +select ss.variable_name, gs.variable_value - ss.variable_value as variable_value +from snapshot_status ss, + information_schema.global_status gs +where ss.variable_name = gs.variable_name; + +drop table snapshot_status; diff --git a/mysql-test/suite/innodb/t/innodb_scrub_background-master.opt b/mysql-test/suite/innodb/t/innodb_scrub_background-master.opt new file mode 100644 index 000000000000..529b467a0734 --- /dev/null +++ b/mysql-test/suite/innodb/t/innodb_scrub_background-master.opt @@ -0,0 +1,10 @@ +--innodb-immediate-scrub-data-uncompressed=OFF +--innodb-background-scrub-data-uncompressed=ON +--innodb-background-scrub-data-compressed=ON +--loose-innodb-debug-force-scrubbing=ON +--innodb-encryption-threads=0 +--innodb-encrypt-tables=KEYRING_FORCE +--innodb-encryption-rotate-key-age=15 +$KEYRING_PLUGIN_OPT +--early-plugin-load="keyring_file=$KEYRING_PLUGIN" +--loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring diff --git a/mysql-test/suite/innodb/t/innodb_scrub_background.test b/mysql-test/suite/innodb/t/innodb_scrub_background.test new file mode 100644 index 000000000000..b240194d546a --- /dev/null +++ b/mysql-test/suite/innodb/t/innodb_scrub_background.test @@ -0,0 +1,172 @@ +--skip # Doesn't really check that background scrubbing works +-- source include/have_innodb.inc +-- source include/not_embedded.inc + +let $MYSQLD_DATADIR=`select @@datadir`; +let INNODB_PAGE_SIZE= `select @@innodb_page_size`; + +--echo # +--echo # immediate scrubbing is off +--echo # background scrubbing is on +--echo # +show variables like 'innodb_%scrub_data%'; + +-- echo # make sure spaces are checked quickly +SET GLOBAL innodb_background_scrub_data_check_interval=1; + +let $rowcount=500; +let $maxformatno= 3; +let $formatno= $maxformatno; + +let $tableformat= ( + a int auto_increment primary key, + b varchar(256), + c text, + index(b)) engine = innodb row_format; + +while ($formatno) +{ +dec $formatno; +let $format = `select case $formatno + when 0 then 'redundant' + when 1 then 'redundant' + when 2 then 'compact' + when 3 then 'compressed' + end`; + +let $t= delete_$formatno; +eval create table $t $tableformat=$format; + +let $numinserts = $rowcount; +-- echo # Populate table with rows +--disable_query_log +begin; +while ($numinserts) +{ + dec $numinserts; + eval insert into $t(b,c) values ('unicycle', repeat('wonderwoman', 1000)); +} +commit; +--enable_query_log + +eval delete from $t; + +let $t= delete_rollback_delete_$formatno; + +eval create table $t $tableformat=$format; + +let $numinserts = $rowcount; +-- echo # Populate table with rows +--disable_query_log +begin; +while ($numinserts) +{ + dec $numinserts; + eval insert into $t(b,c) values ('bicycle', repeat('repairman', 1000)); +} +commit; +--enable_query_log + +begin; +eval delete from $t; +rollback; +eval delete from $t; + +let $t= insert_rollback_$formatno; + +eval create table $t $tableformat=$format; + +let $numinserts = $rowcount; +-- echo # Populate table with rows +begin; +--disable_query_log +while ($numinserts) +{ + dec $numinserts; + eval insert into $t(b,c) values ('tricycle', repeat('superhuman', 1000)); +} +--enable_query_log + +rollback; +} + +-- echo # start scrubbing threads +SET GLOBAL innodb_encryption_threads=5; +-- echo # Wait max 10 min for scrubbing +let $cnt=600; +while ($cnt) +{ + let $success=`SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_SCRUBBING WHERE LAST_SCRUB_COMPLETED IS NULL AND (NAME LIKE 'test/%' OR SPACE = 0)`; + if ($success) + { + let $cnt=0; + } + if (!$success) + { + real_sleep 1; + dec $cnt; + } + SELECT * FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_SCRUBBING; + SHOW STATUS LIKE '%scrub%'; +} +if (!$success) +{ + SELECT * FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_SCRUBBING; + SHOW STATUS LIKE 'innodb_%scrub%'; + -- die Timeout waiting for background threads +} + +SET GLOBAL innodb_fast_shutdown=0; +-- source include/shutdown_mysqld.inc + +let ABORT_ON= FOUND; +let SEARCH_PATTERN= (un|b|tr)icycle|(repair|breakhu|wonderwo)man; +let SEARCH_RANGE= 12582912; +let SEARCH_FILE= $MYSQLD_DATADIR/ibdata1; + +# We may randomly find copies of unscrubbed pages in the doublewrite buffer. +# Let us scrub the doublewrite buffer ourselves. +perl; +use Fcntl 'SEEK_SET'; +my $page_size = $ENV{INNODB_PAGE_SIZE}; +open(FILE, "+<", "$ENV{SEARCH_FILE}") or die "cannot open: $!\n"; +seek(FILE, $page_size * 64, SEEK_SET) or die "cannot seek: $!\n"; +print(FILE chr(0) x ($page_size * 128)) or die "cannot write: $!\n"; +close FILE or die "cannot close: $!\n";; +EOF + +-- source include/search_pattern_in_file.inc + +let $formatno= $maxformatno; +while ($formatno) +{ +dec $formatno; + +let $t= delete_$formatno.ibd; +let SEARCH_FILE= $MYSQLD_DATADIR/test/$t; +-- echo # $t +-- source include/search_pattern_in_file.inc +let $t= delete_rollback_delete_$formatno.ibd; +let SEARCH_FILE= $MYSQLD_DATADIR/test/$t; +-- echo # $t +-- source include/search_pattern_in_file.inc +let $t= insert_rollback_$formatno.ibd; +let SEARCH_FILE= $MYSQLD_DATADIR/test/$t; +-- echo # $t +-- source include/search_pattern_in_file.inc +} + +-- source include/start_mysqld.inc + +let $formatno= $maxformatno; +while ($formatno) +{ +dec $formatno; + +let $t= delete_$formatno, delete_rollback_delete_$formatno, insert_rollback_$formatno; + +eval check table $t; +eval drop table $t; +} + +show variables like 'innodb_%scrub_data%'; diff --git a/mysql-test/suite/perfschema/r/show_sanity.result b/mysql-test/suite/perfschema/r/show_sanity.result index ad675f0dcf89..cf043d997e46 100644 --- a/mysql-test/suite/perfschema/r/show_sanity.result +++ b/mysql-test/suite/perfschema/r/show_sanity.result @@ -411,9 +411,17 @@ SHOW_MODE SOURCE VARIABLE_NAME 5.6 I_S.SESSION_VARIABLES BINLOG_TRANSACTION_DEPENDENCY_TRACKING 5.6 I_S.SESSION_VARIABLES ENCRYPT_BINLOG 5.6 I_S.SESSION_VARIABLES GTID_EXECUTED +5.6 I_S.SESSION_VARIABLES INNODB_BACKGROUND_SCRUB_DATA_CHECK_INTERVAL +5.6 I_S.SESSION_VARIABLES INNODB_BACKGROUND_SCRUB_DATA_COMPRESSED +5.6 I_S.SESSION_VARIABLES INNODB_BACKGROUND_SCRUB_DATA_INTERVAL +5.6 I_S.SESSION_VARIABLES INNODB_BACKGROUND_SCRUB_DATA_UNCOMPRESSED 5.6 I_S.SESSION_VARIABLES INNODB_COMPRESSED_COLUMNS_THRESHOLD 5.6 I_S.SESSION_VARIABLES INNODB_COMPRESSED_COLUMNS_ZIP_LEVEL 5.6 I_S.SESSION_VARIABLES INNODB_DEADLOCK_DETECT +5.6 I_S.SESSION_VARIABLES INNODB_DEBUG_FORCE_SCRUBBING +5.6 I_S.SESSION_VARIABLES INNODB_IMMEDIATE_SCRUB_DATA_UNCOMPRESSED +5.6 I_S.SESSION_VARIABLES INNODB_SCRUB_LOG +5.6 I_S.SESSION_VARIABLES INNODB_SCRUB_LOG_SPEED 5.6 I_S.SESSION_VARIABLES INNODB_STATS_INCLUDE_DELETE_MARKED 5.6 I_S.SESSION_VARIABLES KEYRING_OPERATIONS 5.6 I_S.SESSION_VARIABLES KILL_IDLE_TRANSACTION @@ -443,9 +451,17 @@ SHOW_MODE SOURCE VARIABLE_NAME 5.6 I_S.SESSION_VARIABLES BINLOG_TRANSACTION_DEPENDENCY_TRACKING 5.6 I_S.SESSION_VARIABLES ENCRYPT_BINLOG 5.6 I_S.SESSION_VARIABLES GTID_EXECUTED +5.6 I_S.SESSION_VARIABLES INNODB_BACKGROUND_SCRUB_DATA_CHECK_INTERVAL +5.6 I_S.SESSION_VARIABLES INNODB_BACKGROUND_SCRUB_DATA_COMPRESSED +5.6 I_S.SESSION_VARIABLES INNODB_BACKGROUND_SCRUB_DATA_INTERVAL +5.6 I_S.SESSION_VARIABLES INNODB_BACKGROUND_SCRUB_DATA_UNCOMPRESSED 5.6 I_S.SESSION_VARIABLES INNODB_COMPRESSED_COLUMNS_THRESHOLD 5.6 I_S.SESSION_VARIABLES INNODB_COMPRESSED_COLUMNS_ZIP_LEVEL 5.6 I_S.SESSION_VARIABLES INNODB_DEADLOCK_DETECT +5.6 I_S.SESSION_VARIABLES INNODB_DEBUG_FORCE_SCRUBBING +5.6 I_S.SESSION_VARIABLES INNODB_IMMEDIATE_SCRUB_DATA_UNCOMPRESSED +5.6 I_S.SESSION_VARIABLES INNODB_SCRUB_LOG +5.6 I_S.SESSION_VARIABLES INNODB_SCRUB_LOG_SPEED 5.6 I_S.SESSION_VARIABLES INNODB_STATS_INCLUDE_DELETE_MARKED 5.6 I_S.SESSION_VARIABLES KEYRING_OPERATIONS 5.6 I_S.SESSION_VARIABLES KILL_IDLE_TRANSACTION @@ -678,6 +694,13 @@ where (show_mode = "JUNK: GLOBAL-ONLY") and source = "I_S.SESSION_STATUS") order by show_mode, source, variable_name; SHOW_MODE SOURCE VARIABLE_NAME +5.7 P_S.SESSION_STATUS Innodb_scrub_background_page_reorganizations +5.7 P_S.SESSION_STATUS Innodb_scrub_background_page_splits +5.7 P_S.SESSION_STATUS Innodb_scrub_background_page_split_failures_missing_index +5.7 P_S.SESSION_STATUS Innodb_scrub_background_page_split_failures_out_of_filespace +5.7 P_S.SESSION_STATUS Innodb_scrub_background_page_split_failures_underflow +5.7 P_S.SESSION_STATUS Innodb_scrub_background_page_split_failures_unknown +5.7 P_S.SESSION_STATUS Innodb_scrub_log ================================================================================ TEST 13 @@ -720,6 +743,13 @@ where show_mode = "5.7" and source = "P_S.STATUS_BY_ACCOUNT") order by show_mode, source, variable_name; SHOW_MODE SOURCE VARIABLE_NAME +5.7 P_S.SESSION_STATUS Innodb_scrub_background_page_reorganizations +5.7 P_S.SESSION_STATUS Innodb_scrub_background_page_splits +5.7 P_S.SESSION_STATUS Innodb_scrub_background_page_split_failures_missing_index +5.7 P_S.SESSION_STATUS Innodb_scrub_background_page_split_failures_out_of_filespace +5.7 P_S.SESSION_STATUS Innodb_scrub_background_page_split_failures_underflow +5.7 P_S.SESSION_STATUS Innodb_scrub_background_page_split_failures_unknown +5.7 P_S.SESSION_STATUS Innodb_scrub_log ================================================================================ TEST 15 @@ -775,6 +805,13 @@ where show_mode = "5.7" and source = "P_S.STATUS_BY_USER") order by show_mode, source, variable_name; SHOW_MODE SOURCE VARIABLE_NAME +5.7 P_S.SESSION_STATUS Innodb_scrub_background_page_reorganizations +5.7 P_S.SESSION_STATUS Innodb_scrub_background_page_splits +5.7 P_S.SESSION_STATUS Innodb_scrub_background_page_split_failures_missing_index +5.7 P_S.SESSION_STATUS Innodb_scrub_background_page_split_failures_out_of_filespace +5.7 P_S.SESSION_STATUS Innodb_scrub_background_page_split_failures_underflow +5.7 P_S.SESSION_STATUS Innodb_scrub_background_page_split_failures_unknown +5.7 P_S.SESSION_STATUS Innodb_scrub_log ================================================================================ TEST 18 @@ -829,6 +866,13 @@ where show_mode = "5.7" and source = "P_S.STATUS_BY_HOST") order by show_mode, source, variable_name; SHOW_MODE SOURCE VARIABLE_NAME +5.7 P_S.SESSION_STATUS Innodb_scrub_background_page_reorganizations +5.7 P_S.SESSION_STATUS Innodb_scrub_background_page_splits +5.7 P_S.SESSION_STATUS Innodb_scrub_background_page_split_failures_missing_index +5.7 P_S.SESSION_STATUS Innodb_scrub_background_page_split_failures_out_of_filespace +5.7 P_S.SESSION_STATUS Innodb_scrub_background_page_split_failures_underflow +5.7 P_S.SESSION_STATUS Innodb_scrub_background_page_split_failures_unknown +5.7 P_S.SESSION_STATUS Innodb_scrub_log ================================================================================ TEST 21 diff --git a/mysql-test/suite/sys_vars/r/innodb_background_scrub_data_check_interval_basic.result b/mysql-test/suite/sys_vars/r/innodb_background_scrub_data_check_interval_basic.result new file mode 100644 index 000000000000..3056901fc03c --- /dev/null +++ b/mysql-test/suite/sys_vars/r/innodb_background_scrub_data_check_interval_basic.result @@ -0,0 +1,76 @@ +SET @start_global_value = @@global.innodb_background_scrub_data_check_interval; +# +# default value +# +select @@global.innodb_background_scrub_data_check_interval; +@@global.innodb_background_scrub_data_check_interval +3600 +set global innodb_background_scrub_data_check_interval=10; +select @@global.innodb_background_scrub_data_check_interval; +@@global.innodb_background_scrub_data_check_interval +10 +set global innodb_background_scrub_data_check_interval=DEFAULT; +select @@global.innodb_background_scrub_data_check_interval; +@@global.innodb_background_scrub_data_check_interval +3600 +set global innodb_background_scrub_data_check_interval=20; +select @@global.innodb_background_scrub_data_check_interval; +@@global.innodb_background_scrub_data_check_interval +20 +set global innodb_background_scrub_data_check_interval=DEFAULT; +select @@global.innodb_background_scrub_data_check_interval; +@@global.innodb_background_scrub_data_check_interval +3600 +# +# exists as global only +# +select @@global.innodb_background_scrub_data_check_interval; +@@global.innodb_background_scrub_data_check_interval +3600 +select @@session.innodb_background_scrub_data_check_interval; +ERROR HY000: Variable 'innodb_background_scrub_data_check_interval' is a GLOBAL variable +show global variables like 'innodb_background_scrub_data_check_interval'; +Variable_name Value +innodb_background_scrub_data_check_interval 3600 +show session variables like 'innodb_background_scrub_data_check_interval'; +Variable_name Value +innodb_background_scrub_data_check_interval 3600 +select * from information_schema.global_variables +where variable_name='innodb_background_scrub_data_check_interval'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_BACKGROUND_SCRUB_DATA_CHECK_INTERVAL 3600 +Warnings: +Warning 1287 'INFORMATION_SCHEMA.GLOBAL_VARIABLES' is deprecated and will be removed in a future release. Please use performance_schema.global_variables instead +select * from information_schema.session_variables +where variable_name='innodb_background_scrub_data_check_interval'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_BACKGROUND_SCRUB_DATA_CHECK_INTERVAL 3600 +Warnings: +Warning 1287 'INFORMATION_SCHEMA.SESSION_VARIABLES' is deprecated and will be removed in a future release. Please use performance_schema.session_variables instead +# +# show that it's writable +# +set global innodb_background_scrub_data_check_interval=10; +select @@global.innodb_background_scrub_data_check_interval; +@@global.innodb_background_scrub_data_check_interval +10 +set global innodb_background_scrub_data_check_interval=20; +select @@global.innodb_background_scrub_data_check_interval; +@@global.innodb_background_scrub_data_check_interval +20 +set global innodb_background_scrub_data_check_interval=1; +select @@global.innodb_background_scrub_data_check_interval; +@@global.innodb_background_scrub_data_check_interval +1 +set session innodb_background_scrub_data_check_interval=1; +ERROR HY000: Variable 'innodb_background_scrub_data_check_interval' is a GLOBAL variable and should be set with SET GLOBAL +# +# incorrect types +# +set global innodb_background_scrub_data_check_interval=1.1; +ERROR 42000: Incorrect argument type to variable 'innodb_background_scrub_data_check_interval' +set global innodb_background_scrub_data_check_interval=1e1; +ERROR 42000: Incorrect argument type to variable 'innodb_background_scrub_data_check_interval' +set global innodb_background_scrub_data_check_interval="foo"; +ERROR 42000: Incorrect argument type to variable 'innodb_background_scrub_data_check_interval' +SET @@global.innodb_background_scrub_data_check_interval = @start_global_value; diff --git a/mysql-test/suite/sys_vars/r/innodb_background_scrub_data_compressed_basic.result b/mysql-test/suite/sys_vars/r/innodb_background_scrub_data_compressed_basic.result new file mode 100644 index 000000000000..b50965b089f3 --- /dev/null +++ b/mysql-test/suite/sys_vars/r/innodb_background_scrub_data_compressed_basic.result @@ -0,0 +1,54 @@ +SET @start_global_value = @@global.innodb_background_scrub_data_compressed; +# +# exists as global only +# +select @@global.innodb_background_scrub_data_compressed; +@@global.innodb_background_scrub_data_compressed +0 +select @@session.innodb_background_scrub_data_compressed; +ERROR HY000: Variable 'innodb_background_scrub_data_compressed' is a GLOBAL variable +show global variables like 'innodb_background_scrub_data_compressed'; +Variable_name Value +innodb_background_scrub_data_compressed OFF +show session variables like 'innodb_background_scrub_data_compressed'; +Variable_name Value +innodb_background_scrub_data_compressed OFF +select * from information_schema.global_variables +where variable_name='innodb_background_scrub_data_compressed'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_BACKGROUND_SCRUB_DATA_COMPRESSED OFF +Warnings: +Warning 1287 'INFORMATION_SCHEMA.GLOBAL_VARIABLES' is deprecated and will be removed in a future release. Please use performance_schema.global_variables instead +select * from information_schema.session_variables +where variable_name='innodb_background_scrub_data_compressed'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_BACKGROUND_SCRUB_DATA_COMPRESSED OFF +Warnings: +Warning 1287 'INFORMATION_SCHEMA.SESSION_VARIABLES' is deprecated and will be removed in a future release. Please use performance_schema.session_variables instead +# +# show that it's writable +# +set global innodb_background_scrub_data_compressed=ON; +select @@global.innodb_background_scrub_data_compressed; +@@global.innodb_background_scrub_data_compressed +1 +set global innodb_background_scrub_data_compressed=OFF; +select @@global.innodb_background_scrub_data_compressed; +@@global.innodb_background_scrub_data_compressed +0 +set global innodb_background_scrub_data_compressed=1; +select @@global.innodb_background_scrub_data_compressed; +@@global.innodb_background_scrub_data_compressed +1 +set session innodb_background_scrub_data_compressed=1; +ERROR HY000: Variable 'innodb_background_scrub_data_compressed' is a GLOBAL variable and should be set with SET GLOBAL +# +# incorrect types +# +set global innodb_background_scrub_data_compressed=1.1; +ERROR 42000: Incorrect argument type to variable 'innodb_background_scrub_data_compressed' +set global innodb_background_scrub_data_compressed=1e1; +ERROR 42000: Incorrect argument type to variable 'innodb_background_scrub_data_compressed' +set global innodb_background_scrub_data_compressed="foo"; +ERROR 42000: Variable 'innodb_background_scrub_data_compressed' can't be set to the value of 'foo' +SET @@global.innodb_background_scrub_data_compressed = @start_global_value; diff --git a/mysql-test/suite/sys_vars/r/innodb_background_scrub_data_interval_basic.result b/mysql-test/suite/sys_vars/r/innodb_background_scrub_data_interval_basic.result new file mode 100644 index 000000000000..3a22e76099a2 --- /dev/null +++ b/mysql-test/suite/sys_vars/r/innodb_background_scrub_data_interval_basic.result @@ -0,0 +1,54 @@ +SET @start_global_value = @@global.innodb_background_scrub_data_interval; +# +# exists as global only +# +select @@global.innodb_background_scrub_data_interval; +@@global.innodb_background_scrub_data_interval +604800 +select @@session.innodb_background_scrub_data_interval; +ERROR HY000: Variable 'innodb_background_scrub_data_interval' is a GLOBAL variable +show global variables like 'innodb_background_scrub_data_interval'; +Variable_name Value +innodb_background_scrub_data_interval 604800 +show session variables like 'innodb_background_scrub_data_interval'; +Variable_name Value +innodb_background_scrub_data_interval 604800 +select * from information_schema.global_variables +where variable_name='innodb_background_scrub_data_interval'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_BACKGROUND_SCRUB_DATA_INTERVAL 604800 +Warnings: +Warning 1287 'INFORMATION_SCHEMA.GLOBAL_VARIABLES' is deprecated and will be removed in a future release. Please use performance_schema.global_variables instead +select * from information_schema.session_variables +where variable_name='innodb_background_scrub_data_interval'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_BACKGROUND_SCRUB_DATA_INTERVAL 604800 +Warnings: +Warning 1287 'INFORMATION_SCHEMA.SESSION_VARIABLES' is deprecated and will be removed in a future release. Please use performance_schema.session_variables instead +# +# show that it's writable +# +set global innodb_background_scrub_data_interval=100; +select @@global.innodb_background_scrub_data_interval; +@@global.innodb_background_scrub_data_interval +100 +set global innodb_background_scrub_data_interval=200; +select @@global.innodb_background_scrub_data_interval; +@@global.innodb_background_scrub_data_interval +200 +set global innodb_background_scrub_data_interval=300; +select @@global.innodb_background_scrub_data_interval; +@@global.innodb_background_scrub_data_interval +300 +set session innodb_background_scrub_data_interval=400; +ERROR HY000: Variable 'innodb_background_scrub_data_interval' is a GLOBAL variable and should be set with SET GLOBAL +# +# incorrect types +# +set global innodb_background_scrub_data_interval=1.1; +ERROR 42000: Incorrect argument type to variable 'innodb_background_scrub_data_interval' +set global innodb_background_scrub_data_interval=1e1; +ERROR 42000: Incorrect argument type to variable 'innodb_background_scrub_data_interval' +set global innodb_background_scrub_data_interval="foo"; +ERROR 42000: Incorrect argument type to variable 'innodb_background_scrub_data_interval' +SET @@global.innodb_background_scrub_data_interval = @start_global_value; diff --git a/mysql-test/suite/sys_vars/r/innodb_background_scrub_data_uncompressed_basic.result b/mysql-test/suite/sys_vars/r/innodb_background_scrub_data_uncompressed_basic.result new file mode 100644 index 000000000000..e7e6f4c18672 --- /dev/null +++ b/mysql-test/suite/sys_vars/r/innodb_background_scrub_data_uncompressed_basic.result @@ -0,0 +1,54 @@ +SET @start_global_value = @@global.innodb_background_scrub_data_uncompressed; +# +# exists as global only +# +select @@global.innodb_background_scrub_data_uncompressed; +@@global.innodb_background_scrub_data_uncompressed +0 +select @@session.innodb_background_scrub_data_uncompressed; +ERROR HY000: Variable 'innodb_background_scrub_data_uncompressed' is a GLOBAL variable +show global variables like 'innodb_background_scrub_data_uncompressed'; +Variable_name Value +innodb_background_scrub_data_uncompressed OFF +show session variables like 'innodb_background_scrub_data_uncompressed'; +Variable_name Value +innodb_background_scrub_data_uncompressed OFF +select * from information_schema.global_variables +where variable_name='innodb_background_scrub_data_uncompressed'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_BACKGROUND_SCRUB_DATA_UNCOMPRESSED OFF +Warnings: +Warning 1287 'INFORMATION_SCHEMA.GLOBAL_VARIABLES' is deprecated and will be removed in a future release. Please use performance_schema.global_variables instead +select * from information_schema.session_variables +where variable_name='innodb_background_scrub_data_uncompressed'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_BACKGROUND_SCRUB_DATA_UNCOMPRESSED OFF +Warnings: +Warning 1287 'INFORMATION_SCHEMA.SESSION_VARIABLES' is deprecated and will be removed in a future release. Please use performance_schema.session_variables instead +# +# show that it's writable +# +set global innodb_background_scrub_data_uncompressed=ON; +select @@global.innodb_background_scrub_data_uncompressed; +@@global.innodb_background_scrub_data_uncompressed +1 +set global innodb_background_scrub_data_uncompressed=OFF; +select @@global.innodb_background_scrub_data_uncompressed; +@@global.innodb_background_scrub_data_uncompressed +0 +set global innodb_background_scrub_data_uncompressed=1; +select @@global.innodb_background_scrub_data_uncompressed; +@@global.innodb_background_scrub_data_uncompressed +1 +set session innodb_background_scrub_data_uncompressed=1; +ERROR HY000: Variable 'innodb_background_scrub_data_uncompressed' is a GLOBAL variable and should be set with SET GLOBAL +# +# incorrect types +# +set global innodb_background_scrub_data_uncompressed=1.1; +ERROR 42000: Incorrect argument type to variable 'innodb_background_scrub_data_uncompressed' +set global innodb_background_scrub_data_uncompressed=1e1; +ERROR 42000: Incorrect argument type to variable 'innodb_background_scrub_data_uncompressed' +set global innodb_background_scrub_data_uncompressed="foo"; +ERROR 42000: Variable 'innodb_background_scrub_data_uncompressed' can't be set to the value of 'foo' +SET @@global.innodb_background_scrub_data_uncompressed = @start_global_value; diff --git a/mysql-test/suite/sys_vars/r/innodb_debug_force_scrubbing_basic.result b/mysql-test/suite/sys_vars/r/innodb_debug_force_scrubbing_basic.result new file mode 100644 index 000000000000..09da7d75e5ab --- /dev/null +++ b/mysql-test/suite/sys_vars/r/innodb_debug_force_scrubbing_basic.result @@ -0,0 +1,54 @@ +SET @start_global_value = @@global.innodb_debug_force_scrubbing; +# +# exists as global only +# +select @@global.innodb_debug_force_scrubbing; +@@global.innodb_debug_force_scrubbing +0 +select @@session.innodb_debug_force_scrubbing; +ERROR HY000: Variable 'innodb_debug_force_scrubbing' is a GLOBAL variable +show global variables like 'innodb_debug_force_scrubbing'; +Variable_name Value +innodb_debug_force_scrubbing OFF +show session variables like 'innodb_debug_force_scrubbing'; +Variable_name Value +innodb_debug_force_scrubbing OFF +select * from information_schema.global_variables +where variable_name='innodb_debug_force_scrubbing'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_DEBUG_FORCE_SCRUBBING OFF +Warnings: +Warning 1287 'INFORMATION_SCHEMA.GLOBAL_VARIABLES' is deprecated and will be removed in a future release. Please use performance_schema.global_variables instead +select * from information_schema.session_variables +where variable_name='innodb_debug_force_scrubbing'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_DEBUG_FORCE_SCRUBBING OFF +Warnings: +Warning 1287 'INFORMATION_SCHEMA.SESSION_VARIABLES' is deprecated and will be removed in a future release. Please use performance_schema.session_variables instead +# +# show that it's writable +# +set global innodb_debug_force_scrubbing=ON; +select @@global.innodb_debug_force_scrubbing; +@@global.innodb_debug_force_scrubbing +1 +set global innodb_debug_force_scrubbing=OFF; +select @@global.innodb_debug_force_scrubbing; +@@global.innodb_debug_force_scrubbing +0 +set global innodb_debug_force_scrubbing=1; +select @@global.innodb_debug_force_scrubbing; +@@global.innodb_debug_force_scrubbing +1 +set session innodb_debug_force_scrubbing=1; +ERROR HY000: Variable 'innodb_debug_force_scrubbing' is a GLOBAL variable and should be set with SET GLOBAL +# +# incorrect types +# +set global innodb_debug_force_scrubbing=1.1; +ERROR 42000: Incorrect argument type to variable 'innodb_debug_force_scrubbing' +set global innodb_debug_force_scrubbing=1e1; +ERROR 42000: Incorrect argument type to variable 'innodb_debug_force_scrubbing' +set global innodb_debug_force_scrubbing="foo"; +ERROR 42000: Variable 'innodb_debug_force_scrubbing' can't be set to the value of 'foo' +SET @@global.innodb_debug_force_scrubbing = @start_global_value; diff --git a/mysql-test/suite/sys_vars/r/innodb_immediate_scrub_data_uncompressed_basic.result b/mysql-test/suite/sys_vars/r/innodb_immediate_scrub_data_uncompressed_basic.result new file mode 100644 index 000000000000..96e730d60163 --- /dev/null +++ b/mysql-test/suite/sys_vars/r/innodb_immediate_scrub_data_uncompressed_basic.result @@ -0,0 +1,54 @@ +SET @start_global_value = @@global.innodb_immediate_scrub_data_uncompressed; +# +# exists as global only +# +select @@global.innodb_immediate_scrub_data_uncompressed; +@@global.innodb_immediate_scrub_data_uncompressed +0 +select @@session.innodb_immediate_scrub_data_uncompressed; +ERROR HY000: Variable 'innodb_immediate_scrub_data_uncompressed' is a GLOBAL variable +show global variables like 'innodb_immediate_scrub_data_uncompressed'; +Variable_name Value +innodb_immediate_scrub_data_uncompressed OFF +show session variables like 'innodb_immediate_scrub_data_uncompressed'; +Variable_name Value +innodb_immediate_scrub_data_uncompressed OFF +select * from information_schema.global_variables +where variable_name='innodb_immediate_scrub_data_uncompressed'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_IMMEDIATE_SCRUB_DATA_UNCOMPRESSED OFF +Warnings: +Warning 1287 'INFORMATION_SCHEMA.GLOBAL_VARIABLES' is deprecated and will be removed in a future release. Please use performance_schema.global_variables instead +select * from information_schema.session_variables +where variable_name='innodb_immediate_scrub_data_uncompressed'; +VARIABLE_NAME VARIABLE_VALUE +INNODB_IMMEDIATE_SCRUB_DATA_UNCOMPRESSED OFF +Warnings: +Warning 1287 'INFORMATION_SCHEMA.SESSION_VARIABLES' is deprecated and will be removed in a future release. Please use performance_schema.session_variables instead +# +# show that it's writable +# +set global innodb_immediate_scrub_data_uncompressed=ON; +select @@global.innodb_immediate_scrub_data_uncompressed; +@@global.innodb_immediate_scrub_data_uncompressed +1 +set global innodb_immediate_scrub_data_uncompressed=OFF; +select @@global.innodb_immediate_scrub_data_uncompressed; +@@global.innodb_immediate_scrub_data_uncompressed +0 +set global innodb_immediate_scrub_data_uncompressed=1; +select @@global.innodb_immediate_scrub_data_uncompressed; +@@global.innodb_immediate_scrub_data_uncompressed +1 +set session innodb_immediate_scrub_data_uncompressed=1; +ERROR HY000: Variable 'innodb_immediate_scrub_data_uncompressed' is a GLOBAL variable and should be set with SET GLOBAL +# +# incorrect types +# +set global innodb_immediate_scrub_data_uncompressed=1.1; +ERROR 42000: Incorrect argument type to variable 'innodb_immediate_scrub_data_uncompressed' +set global innodb_immediate_scrub_data_uncompressed=1e1; +ERROR 42000: Incorrect argument type to variable 'innodb_immediate_scrub_data_uncompressed' +set global innodb_immediate_scrub_data_uncompressed="foo"; +ERROR 42000: Variable 'innodb_immediate_scrub_data_uncompressed' can't be set to the value of 'foo' +SET @@global.innodb_immediate_scrub_data_uncompressed = @start_global_value; diff --git a/mysql-test/suite/sys_vars/r/innodb_scrub_log_basic.result b/mysql-test/suite/sys_vars/r/innodb_scrub_log_basic.result new file mode 100644 index 000000000000..c3f96a088b16 --- /dev/null +++ b/mysql-test/suite/sys_vars/r/innodb_scrub_log_basic.result @@ -0,0 +1,52 @@ +SELECT @@GLOBAL.innodb_scrub_log; +@@GLOBAL.innodb_scrub_log +0 +0 Expected +SET @@GLOBAL.innodb_scrub_log=1; +ERROR HY000: Variable 'innodb_scrub_log' is a read only variable +Expected error 'Read only variable' +SELECT @@GLOBAL.innodb_scrub_log; +@@GLOBAL.innodb_scrub_log +0 +0 Expected +SELECT IF(@@GLOBAL.innodb_scrub_log, 'ON', 'OFF') = VARIABLE_VALUE +FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES +WHERE VARIABLE_NAME='innodb_scrub_log'; +IF(@@GLOBAL.innodb_scrub_log, 'ON', 'OFF') = VARIABLE_VALUE +1 +Warnings: +Warning 1287 'INFORMATION_SCHEMA.GLOBAL_VARIABLES' is deprecated and will be removed in a future release. Please use performance_schema.global_variables instead +1 Expected +SELECT @@GLOBAL.innodb_scrub_log; +@@GLOBAL.innodb_scrub_log +0 +0 Expected +SELECT VARIABLE_VALUE +FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES +WHERE VARIABLE_NAME='innodb_scrub_log'; +VARIABLE_VALUE +OFF +Warnings: +Warning 1287 'INFORMATION_SCHEMA.GLOBAL_VARIABLES' is deprecated and will be removed in a future release. Please use performance_schema.global_variables instead +0 Expected +SELECT @@innodb_scrub_log = @@GLOBAL.innodb_scrub_log; +@@innodb_scrub_log = @@GLOBAL.innodb_scrub_log +1 +1 Expected +SELECT @@innodb_scrub_log; +@@innodb_scrub_log +0 +0 Expected +SELECT @@local.innodb_scrub_log; +ERROR HY000: Variable 'innodb_scrub_log' is a GLOBAL variable +Expected error 'Variable is a GLOBAL variable' +SELECT @@SESSION.innodb_scrub_log; +ERROR HY000: Variable 'innodb_scrub_log' is a GLOBAL variable +Expected error 'Variable is a GLOBAL variable' +SELECT @@GLOBAL.innodb_scrub_log; +@@GLOBAL.innodb_scrub_log +0 +0 Expected +SELECT innodb_scrub_log; +ERROR 42S22: Unknown column 'innodb_scrub_log' in 'field list' +Expected error 'Unknow column in field list' diff --git a/mysql-test/suite/sys_vars/r/innodb_scrub_log_speed_basic.result b/mysql-test/suite/sys_vars/r/innodb_scrub_log_speed_basic.result new file mode 100644 index 000000000000..fc7dc357bbea --- /dev/null +++ b/mysql-test/suite/sys_vars/r/innodb_scrub_log_speed_basic.result @@ -0,0 +1,57 @@ +SELECT @@GLOBAL.innodb_scrub_log_speed; +@@GLOBAL.innodb_scrub_log_speed +256 +200 Expected +SET @@GLOBAL.innodb_scrub_log_speed=100; +1 Expected +SELECT @@GLOBAL.innodb_scrub_log_speed; +@@GLOBAL.innodb_scrub_log_speed +100 +100 Expected +SET @@GLOBAL.innodb_scrub_log_speed=DEFAULT; +1 Expected +SELECT @@GLOBAL.innodb_scrub_log_speed; +@@GLOBAL.innodb_scrub_log_speed +256 +200 Expected +SELECT @@GLOBAL.innodb_scrub_log_speed = VARIABLE_VALUE +FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES +WHERE VARIABLE_NAME='innodb_scrub_log_speed'; +@@GLOBAL.innodb_scrub_log_speed = VARIABLE_VALUE +1 +Warnings: +Warning 1287 'INFORMATION_SCHEMA.GLOBAL_VARIABLES' is deprecated and will be removed in a future release. Please use performance_schema.global_variables instead +1 Expected +SELECT @@GLOBAL.innodb_scrub_log_speed; +@@GLOBAL.innodb_scrub_log_speed +256 +200 Expected +SELECT VARIABLE_VALUE +FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES +WHERE VARIABLE_NAME='innodb_scrub_log_speed'; +VARIABLE_VALUE +256 +Warnings: +Warning 1287 'INFORMATION_SCHEMA.GLOBAL_VARIABLES' is deprecated and will be removed in a future release. Please use performance_schema.global_variables instead +200 Expected +SELECT @@innodb_scrub_log_speed = @@GLOBAL.innodb_scrub_log_speed; +@@innodb_scrub_log_speed = @@GLOBAL.innodb_scrub_log_speed +1 +1 Expected +SELECT @@innodb_scrub_log_speed; +@@innodb_scrub_log_speed +256 +200 Expected +SELECT @@local.innodb_scrub_log_speed; +ERROR HY000: Variable 'innodb_scrub_log_speed' is a GLOBAL variable +Expected error 'Variable is a GLOBAL variable' +SELECT @@SESSION.innodb_scrub_log_speed; +ERROR HY000: Variable 'innodb_scrub_log_speed' is a GLOBAL variable +Expected error 'Variable is a GLOBAL variable' +SELECT @@GLOBAL.innodb_scrub_log_speed; +@@GLOBAL.innodb_scrub_log_speed +256 +200 Expected +SELECT innodb_scrub_log_speed; +ERROR 42S22: Unknown column 'innodb_scrub_log_speed' in 'field list' +Expected error 'Unknow column in field list' diff --git a/mysql-test/suite/sys_vars/t/innodb_background_scrub_data_check_interval_basic.test b/mysql-test/suite/sys_vars/t/innodb_background_scrub_data_check_interval_basic.test new file mode 100644 index 000000000000..77c8671a1bcd --- /dev/null +++ b/mysql-test/suite/sys_vars/t/innodb_background_scrub_data_check_interval_basic.test @@ -0,0 +1,54 @@ +# bool global +--source include/have_innodb.inc + +SET @start_global_value = @@global.innodb_background_scrub_data_check_interval; + +--echo # +--echo # default value +--echo # +select @@global.innodb_background_scrub_data_check_interval; +set global innodb_background_scrub_data_check_interval=10; +select @@global.innodb_background_scrub_data_check_interval; +set global innodb_background_scrub_data_check_interval=DEFAULT; +select @@global.innodb_background_scrub_data_check_interval; +set global innodb_background_scrub_data_check_interval=20; +select @@global.innodb_background_scrub_data_check_interval; +set global innodb_background_scrub_data_check_interval=DEFAULT; +select @@global.innodb_background_scrub_data_check_interval; + +--echo # +--echo # exists as global only +--echo # +select @@global.innodb_background_scrub_data_check_interval; +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +select @@session.innodb_background_scrub_data_check_interval; +show global variables like 'innodb_background_scrub_data_check_interval'; +show session variables like 'innodb_background_scrub_data_check_interval'; +select * from information_schema.global_variables +where variable_name='innodb_background_scrub_data_check_interval'; +select * from information_schema.session_variables +where variable_name='innodb_background_scrub_data_check_interval'; + +--echo # +--echo # show that it's writable +--echo # +set global innodb_background_scrub_data_check_interval=10; +select @@global.innodb_background_scrub_data_check_interval; +set global innodb_background_scrub_data_check_interval=20; +select @@global.innodb_background_scrub_data_check_interval; +set global innodb_background_scrub_data_check_interval=1; +select @@global.innodb_background_scrub_data_check_interval; +--error ER_GLOBAL_VARIABLE +set session innodb_background_scrub_data_check_interval=1; + +--echo # +--echo # incorrect types +--echo # +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_background_scrub_data_check_interval=1.1; +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_background_scrub_data_check_interval=1e1; +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_background_scrub_data_check_interval="foo"; + +SET @@global.innodb_background_scrub_data_check_interval = @start_global_value; diff --git a/mysql-test/suite/sys_vars/t/innodb_background_scrub_data_compressed_basic.test b/mysql-test/suite/sys_vars/t/innodb_background_scrub_data_compressed_basic.test new file mode 100644 index 000000000000..fdf77bbb7803 --- /dev/null +++ b/mysql-test/suite/sys_vars/t/innodb_background_scrub_data_compressed_basic.test @@ -0,0 +1,41 @@ +# bool global +--source include/have_innodb.inc + +SET @start_global_value = @@global.innodb_background_scrub_data_compressed; + +--echo # +--echo # exists as global only +--echo # +select @@global.innodb_background_scrub_data_compressed; +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +select @@session.innodb_background_scrub_data_compressed; +show global variables like 'innodb_background_scrub_data_compressed'; +show session variables like 'innodb_background_scrub_data_compressed'; +select * from information_schema.global_variables +where variable_name='innodb_background_scrub_data_compressed'; +select * from information_schema.session_variables +where variable_name='innodb_background_scrub_data_compressed'; + +--echo # +--echo # show that it's writable +--echo # +set global innodb_background_scrub_data_compressed=ON; +select @@global.innodb_background_scrub_data_compressed; +set global innodb_background_scrub_data_compressed=OFF; +select @@global.innodb_background_scrub_data_compressed; +set global innodb_background_scrub_data_compressed=1; +select @@global.innodb_background_scrub_data_compressed; +--error ER_GLOBAL_VARIABLE +set session innodb_background_scrub_data_compressed=1; + +--echo # +--echo # incorrect types +--echo # +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_background_scrub_data_compressed=1.1; +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_background_scrub_data_compressed=1e1; +--error ER_WRONG_VALUE_FOR_VAR +set global innodb_background_scrub_data_compressed="foo"; + +SET @@global.innodb_background_scrub_data_compressed = @start_global_value; diff --git a/mysql-test/suite/sys_vars/t/innodb_background_scrub_data_interval_basic.test b/mysql-test/suite/sys_vars/t/innodb_background_scrub_data_interval_basic.test new file mode 100644 index 000000000000..9f1187a97ff1 --- /dev/null +++ b/mysql-test/suite/sys_vars/t/innodb_background_scrub_data_interval_basic.test @@ -0,0 +1,41 @@ +# bool global +--source include/have_innodb.inc + +SET @start_global_value = @@global.innodb_background_scrub_data_interval; + +--echo # +--echo # exists as global only +--echo # +select @@global.innodb_background_scrub_data_interval; +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +select @@session.innodb_background_scrub_data_interval; +show global variables like 'innodb_background_scrub_data_interval'; +show session variables like 'innodb_background_scrub_data_interval'; +select * from information_schema.global_variables +where variable_name='innodb_background_scrub_data_interval'; +select * from information_schema.session_variables +where variable_name='innodb_background_scrub_data_interval'; + +--echo # +--echo # show that it's writable +--echo # +set global innodb_background_scrub_data_interval=100; +select @@global.innodb_background_scrub_data_interval; +set global innodb_background_scrub_data_interval=200; +select @@global.innodb_background_scrub_data_interval; +set global innodb_background_scrub_data_interval=300; +select @@global.innodb_background_scrub_data_interval; +--error ER_GLOBAL_VARIABLE +set session innodb_background_scrub_data_interval=400; + +--echo # +--echo # incorrect types +--echo # +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_background_scrub_data_interval=1.1; +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_background_scrub_data_interval=1e1; +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_background_scrub_data_interval="foo"; + +SET @@global.innodb_background_scrub_data_interval = @start_global_value; diff --git a/mysql-test/suite/sys_vars/t/innodb_background_scrub_data_uncompressed_basic.test b/mysql-test/suite/sys_vars/t/innodb_background_scrub_data_uncompressed_basic.test new file mode 100644 index 000000000000..76d6535ad81f --- /dev/null +++ b/mysql-test/suite/sys_vars/t/innodb_background_scrub_data_uncompressed_basic.test @@ -0,0 +1,41 @@ +# bool global +--source include/have_innodb.inc + +SET @start_global_value = @@global.innodb_background_scrub_data_uncompressed; + +--echo # +--echo # exists as global only +--echo # +select @@global.innodb_background_scrub_data_uncompressed; +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +select @@session.innodb_background_scrub_data_uncompressed; +show global variables like 'innodb_background_scrub_data_uncompressed'; +show session variables like 'innodb_background_scrub_data_uncompressed'; +select * from information_schema.global_variables +where variable_name='innodb_background_scrub_data_uncompressed'; +select * from information_schema.session_variables +where variable_name='innodb_background_scrub_data_uncompressed'; + +--echo # +--echo # show that it's writable +--echo # +set global innodb_background_scrub_data_uncompressed=ON; +select @@global.innodb_background_scrub_data_uncompressed; +set global innodb_background_scrub_data_uncompressed=OFF; +select @@global.innodb_background_scrub_data_uncompressed; +set global innodb_background_scrub_data_uncompressed=1; +select @@global.innodb_background_scrub_data_uncompressed; +--error ER_GLOBAL_VARIABLE +set session innodb_background_scrub_data_uncompressed=1; + +--echo # +--echo # incorrect types +--echo # +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_background_scrub_data_uncompressed=1.1; +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_background_scrub_data_uncompressed=1e1; +--error ER_WRONG_VALUE_FOR_VAR +set global innodb_background_scrub_data_uncompressed="foo"; + +SET @@global.innodb_background_scrub_data_uncompressed = @start_global_value; diff --git a/mysql-test/suite/sys_vars/t/innodb_debug_force_scrubbing_basic.test b/mysql-test/suite/sys_vars/t/innodb_debug_force_scrubbing_basic.test new file mode 100644 index 000000000000..cc00f0f6f3d5 --- /dev/null +++ b/mysql-test/suite/sys_vars/t/innodb_debug_force_scrubbing_basic.test @@ -0,0 +1,42 @@ +# bool global +--source include/have_innodb.inc +--source include/have_debug.inc + +SET @start_global_value = @@global.innodb_debug_force_scrubbing; + +--echo # +--echo # exists as global only +--echo # +select @@global.innodb_debug_force_scrubbing; +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +select @@session.innodb_debug_force_scrubbing; +show global variables like 'innodb_debug_force_scrubbing'; +show session variables like 'innodb_debug_force_scrubbing'; +select * from information_schema.global_variables +where variable_name='innodb_debug_force_scrubbing'; +select * from information_schema.session_variables +where variable_name='innodb_debug_force_scrubbing'; + +--echo # +--echo # show that it's writable +--echo # +set global innodb_debug_force_scrubbing=ON; +select @@global.innodb_debug_force_scrubbing; +set global innodb_debug_force_scrubbing=OFF; +select @@global.innodb_debug_force_scrubbing; +set global innodb_debug_force_scrubbing=1; +select @@global.innodb_debug_force_scrubbing; +--error ER_GLOBAL_VARIABLE +set session innodb_debug_force_scrubbing=1; + +--echo # +--echo # incorrect types +--echo # +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_debug_force_scrubbing=1.1; +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_debug_force_scrubbing=1e1; +--error ER_WRONG_VALUE_FOR_VAR +set global innodb_debug_force_scrubbing="foo"; + +SET @@global.innodb_debug_force_scrubbing = @start_global_value; diff --git a/mysql-test/suite/sys_vars/t/innodb_immediate_scrub_data_uncompressed_basic.test b/mysql-test/suite/sys_vars/t/innodb_immediate_scrub_data_uncompressed_basic.test new file mode 100644 index 000000000000..f3a3fba153a9 --- /dev/null +++ b/mysql-test/suite/sys_vars/t/innodb_immediate_scrub_data_uncompressed_basic.test @@ -0,0 +1,41 @@ +# bool global +--source include/have_innodb.inc + +SET @start_global_value = @@global.innodb_immediate_scrub_data_uncompressed; + +--echo # +--echo # exists as global only +--echo # +select @@global.innodb_immediate_scrub_data_uncompressed; +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +select @@session.innodb_immediate_scrub_data_uncompressed; +show global variables like 'innodb_immediate_scrub_data_uncompressed'; +show session variables like 'innodb_immediate_scrub_data_uncompressed'; +select * from information_schema.global_variables +where variable_name='innodb_immediate_scrub_data_uncompressed'; +select * from information_schema.session_variables +where variable_name='innodb_immediate_scrub_data_uncompressed'; + +--echo # +--echo # show that it's writable +--echo # +set global innodb_immediate_scrub_data_uncompressed=ON; +select @@global.innodb_immediate_scrub_data_uncompressed; +set global innodb_immediate_scrub_data_uncompressed=OFF; +select @@global.innodb_immediate_scrub_data_uncompressed; +set global innodb_immediate_scrub_data_uncompressed=1; +select @@global.innodb_immediate_scrub_data_uncompressed; +--error ER_GLOBAL_VARIABLE +set session innodb_immediate_scrub_data_uncompressed=1; + +--echo # +--echo # incorrect types +--echo # +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_immediate_scrub_data_uncompressed=1.1; +--error ER_WRONG_TYPE_FOR_VAR +set global innodb_immediate_scrub_data_uncompressed=1e1; +--error ER_WRONG_VALUE_FOR_VAR +set global innodb_immediate_scrub_data_uncompressed="foo"; + +SET @@global.innodb_immediate_scrub_data_uncompressed = @start_global_value; diff --git a/mysql-test/suite/sys_vars/t/innodb_scrub_log_basic.test b/mysql-test/suite/sys_vars/t/innodb_scrub_log_basic.test new file mode 100644 index 000000000000..302f2a963c43 --- /dev/null +++ b/mysql-test/suite/sys_vars/t/innodb_scrub_log_basic.test @@ -0,0 +1,50 @@ +--source include/have_innodb.inc + +# Display default value +SELECT @@GLOBAL.innodb_scrub_log; +--echo 0 Expected + +# Check if value can be set +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +SET @@GLOBAL.innodb_scrub_log=1; +--echo Expected error 'Read only variable' + +SELECT @@GLOBAL.innodb_scrub_log; +--echo 0 Expected + +# Check if the value in GLOBAL TABLE matches value in variable +SELECT IF(@@GLOBAL.innodb_scrub_log, 'ON', 'OFF') = VARIABLE_VALUE +FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES +WHERE VARIABLE_NAME='innodb_scrub_log'; +--echo 1 Expected + +SELECT @@GLOBAL.innodb_scrub_log; +--echo 0 Expected + +SELECT VARIABLE_VALUE +FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES +WHERE VARIABLE_NAME='innodb_scrub_log'; +--echo 0 Expected + +# Check if accessing variable with and without GLOBAL point to same variable +SELECT @@innodb_scrub_log = @@GLOBAL.innodb_scrub_log; +--echo 1 Expected + +# Check if innodb_scrub_log can be accessed with and without @@ sign +SELECT @@innodb_scrub_log; +--echo 0 Expected + +--Error ER_INCORRECT_GLOBAL_LOCAL_VAR +SELECT @@local.innodb_scrub_log; +--echo Expected error 'Variable is a GLOBAL variable' + +--Error ER_INCORRECT_GLOBAL_LOCAL_VAR +SELECT @@SESSION.innodb_scrub_log; +--echo Expected error 'Variable is a GLOBAL variable' + +SELECT @@GLOBAL.innodb_scrub_log; +--echo 0 Expected + +--Error ER_BAD_FIELD_ERROR +SELECT innodb_scrub_log; +--echo Expected error 'Unknow column in field list' diff --git a/mysql-test/suite/sys_vars/t/innodb_scrub_log_speed_basic.test b/mysql-test/suite/sys_vars/t/innodb_scrub_log_speed_basic.test new file mode 100644 index 000000000000..5e750eebd65c --- /dev/null +++ b/mysql-test/suite/sys_vars/t/innodb_scrub_log_speed_basic.test @@ -0,0 +1,55 @@ +--source include/have_innodb.inc + +# Display default value +SELECT @@GLOBAL.innodb_scrub_log_speed; +--echo 200 Expected + +# Check if value can be set +SET @@GLOBAL.innodb_scrub_log_speed=100; +--echo 1 Expected + +SELECT @@GLOBAL.innodb_scrub_log_speed; +--echo 100 Expected + +SET @@GLOBAL.innodb_scrub_log_speed=DEFAULT; +--echo 1 Expected + +SELECT @@GLOBAL.innodb_scrub_log_speed; +--echo 200 Expected + +# Check if the value in GLOBAL TABLE matches value in variable +SELECT @@GLOBAL.innodb_scrub_log_speed = VARIABLE_VALUE +FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES +WHERE VARIABLE_NAME='innodb_scrub_log_speed'; +--echo 1 Expected + +SELECT @@GLOBAL.innodb_scrub_log_speed; +--echo 200 Expected + +SELECT VARIABLE_VALUE +FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES +WHERE VARIABLE_NAME='innodb_scrub_log_speed'; +--echo 200 Expected + +# Check if accessing variable with and without GLOBAL point to same variable +SELECT @@innodb_scrub_log_speed = @@GLOBAL.innodb_scrub_log_speed; +--echo 1 Expected + +# Check if innodb_scrub_log_speed can be accessed with and without @@ sign +SELECT @@innodb_scrub_log_speed; +--echo 200 Expected + +--Error ER_INCORRECT_GLOBAL_LOCAL_VAR +SELECT @@local.innodb_scrub_log_speed; +--echo Expected error 'Variable is a GLOBAL variable' + +--Error ER_INCORRECT_GLOBAL_LOCAL_VAR +SELECT @@SESSION.innodb_scrub_log_speed; +--echo Expected error 'Variable is a GLOBAL variable' + +SELECT @@GLOBAL.innodb_scrub_log_speed; +--echo 200 Expected + +--Error ER_BAD_FIELD_ERROR +SELECT innodb_scrub_log_speed; +--echo Expected error 'Unknow column in field list' diff --git a/storage/innobase/CMakeLists.txt b/storage/innobase/CMakeLists.txt index 5e63561014f1..9a442da14572 100644 --- a/storage/innobase/CMakeLists.txt +++ b/storage/innobase/CMakeLists.txt @@ -25,6 +25,7 @@ SET(INNOBASE_SOURCES btr/btr0pcur.cc btr/btr0sea.cc btr/btr0bulk.cc + btr/btr0scrub.cc buf/buf0buddy.cc buf/buf0buf.cc buf/buf0dblwr.cc diff --git a/storage/innobase/btr/btr0btr.cc b/storage/innobase/btr/btr0btr.cc index e41f59dd7583..097135b3a224 100644 --- a/storage/innobase/btr/btr0btr.cc +++ b/storage/innobase/btr/btr0btr.cc @@ -48,6 +48,8 @@ Created 6/2/1994 Heikki Tuuri #include "ut0new.h" #include "dict0boot.h" +extern my_bool srv_immediate_scrub_data_uncompressed; + /**************************************************************//** Checks if the page in the cursor can be merged with given page. If necessary, re-organize the merge_page. @@ -638,6 +640,18 @@ btr_page_free_low( buf_block_modify_clock_inc(block); + const bool scrub = srv_immediate_scrub_data_uncompressed; + + if (scrub) { + /* MariaDB code says that we can only use this code for blobs, + * but apparently, and can only scrub parts of normal pages - + * but with this approach, data remains there, and this doesn't + * cause any test failures. + */ + page_t* page = buf_block_get_frame(block); + memset(page + PAGE_HEADER, 0, + srv_page_size - PAGE_HEADER); + } if (dict_index_is_ibuf(index)) { btr_page_free_for_ibuf(index, block, mtr); @@ -660,6 +674,14 @@ btr_page_free_low( } #endif + if (scrub) { + /** + * Reset page type so that scrub thread won't try to scrub it + */ + mlog_write_ulint(buf_block_get_frame(block) + FIL_PAGE_TYPE, + FIL_PAGE_TYPE_ALLOCATED, MLOG_2BYTES, mtr); + } + fseg_free_page(seg_header, block->page.id.space(), block->page.id.page_no(), diff --git a/storage/innobase/btr/btr0scrub.cc b/storage/innobase/btr/btr0scrub.cc new file mode 100644 index 000000000000..dcbb448485b9 --- /dev/null +++ b/storage/innobase/btr/btr0scrub.cc @@ -0,0 +1,922 @@ +// Copyright (c) 2014, Google Inc. +// Copyright (c) 2017, MariaDB Corporation. + +/**************************************************//** +@file btr/btr0scrub.cc +Scrubbing of btree pages + +*******************************************************/ + +#include "btr0btr.h" +#include "btr0cur.h" +#include "btr0scrub.h" +#include "ibuf0ibuf.h" +#include "fsp0fsp.h" +#include "dict0dict.h" +#include "mtr0mtr.h" + +/* used when trying to acquire dict-lock */ +bool fil_crypt_is_closing(ulint space); + +/** +* scrub data at delete time (e.g purge thread) +*/ +my_bool srv_immediate_scrub_data_uncompressed = false; + +/** +* background scrub uncompressed data +* +* if srv_immediate_scrub_data_uncompressed is enabled +* this is only needed to handle "old" data +*/ +my_bool srv_background_scrub_data_uncompressed = false; + +/** +* backgrounds scrub compressed data +* +* reorganize compressed page for scrubbing +* (only way to scrub compressed data) +*/ +my_bool srv_background_scrub_data_compressed = false; + +/* check spaces once per hour */ +uint srv_background_scrub_data_check_interval = (60 * 60); + +/* default to scrub spaces that hasn't been scrubbed in a week */ +uint srv_background_scrub_data_interval = (7 * 24 * 60 * 60); + +/** +* statistics for scrubbing by background threads +*/ +static btr_scrub_stat_t scrub_stat; +static ib_mutex_t scrub_stat_mutex; +mysql_pfs_key_t scrub_stat_mutex_key; + +#ifdef UNIV_DEBUG +/** +* srv_scrub_force_testing +* +* - force scrubbing using background threads even for uncompressed tables +* - force pessimistic scrubbing (page split) even if not needed +* (see test_pessimistic_scrub_pct) +*/ +my_bool srv_scrub_force_testing = true; + +/** +* Force pessimistic scrubbing in 50% of the cases (UNIV_DEBUG only) +*/ +static int test_pessimistic_scrub_pct = 50; + +#endif +static uint scrub_compression_level = page_zip_level; + +/**************************************************************//** +Log a scrubbing failure */ +static +void +log_scrub_failure( +/*===============*/ + dict_index_t* index, /*!< in: index */ + btr_scrub_t* scrub_data, /*!< in: data to store statistics on */ + buf_block_t* block, /*!< in: block */ + dberr_t err) /*!< in: error */ +{ + const char* reason = "unknown"; + switch(err) { + case DB_UNDERFLOW: + reason = "too few records on page"; + scrub_data->scrub_stat.page_split_failures_underflow++; + break; + case DB_INDEX_CORRUPT: + reason = "unable to find index!"; + scrub_data->scrub_stat.page_split_failures_missing_index++; + break; + case DB_OUT_OF_FILE_SPACE: + reason = "out of filespace"; + scrub_data->scrub_stat.page_split_failures_out_of_filespace++; + break; + default: + ut_ad(0); + reason = "unknown"; + scrub_data->scrub_stat.page_split_failures_unknown++; + } + + ib::warn() << "Failed to scrub index " << index->name + << " of table " << index->table->name + << " page " << block->page.id << ": " << reason; +} + +/**************************************************************** +Lock dict mutexes */ +static +bool +btr_scrub_lock_dict_func(ulint space_id, bool lock_to_close_table, + const char * file, uint line) +{ + time_t start = time(0); + time_t last = start; + + /* FIXME: this is not the proper way of doing things. The + dict_sys->mutex should not be held by any thread for longer + than a few microseconds. It must not be held during I/O, + for example. So, what is the purpose for this busy-waiting? + This function should be rewritten as part of MDEV-8139: + Fix scrubbing tests. */ + + while (mutex_enter_nowait(&(dict_sys->mutex))) { + /* if we lock to close a table, we wait forever + * if we don't lock to close a table, we check if space + * is closing, and then instead give up + */ + if (lock_to_close_table) { + } else if (fil_space_t* space = fil_space_acquire(space_id)) { + bool stopping = space->is_stopping(); + // TODO + //space->release(); + if (stopping) { + return false; + } + } else { + return false; + } + + os_thread_sleep(250000); + + time_t now = time(0); + + if (now >= last + 30) { + fprintf(stderr, + "WARNING: %s:%u waited %ld seconds for" + " dict_sys lock, space: " ULINTPF + " lock_to_close_table: %d\n", + file, line, long(now - start), space_id, + lock_to_close_table); + + last = now; + } + } + + ut_ad(mutex_own(&dict_sys->mutex)); + return true; +} + +#define btr_scrub_lock_dict(space, lock_to_close_table) \ + btr_scrub_lock_dict_func(space, lock_to_close_table, __FILE__, __LINE__) + +/**************************************************************** +Unlock dict mutexes */ +static +void +btr_scrub_unlock_dict() +{ + dict_mutex_exit_for_mysql(); +} + +/**************************************************************** +Release reference to table +*/ +static +void +btr_scrub_table_close( +/*==================*/ + dict_table_t* table) /*!< in: table */ +{ + bool dict_locked = true; + bool try_drop = false; + table->stats_bg_flag &= ~BG_SCRUB_IN_PROGRESS; + dict_table_close(table, dict_locked, try_drop); +} + +/**************************************************************** +Release reference to table +*/ +static +void +btr_scrub_table_close_for_thread( + btr_scrub_t *scrub_data) +{ + if (scrub_data->current_table == NULL) { + return; + } + + if (fil_space_t* space = fil_space_acquire(scrub_data->space)) { + /* If tablespace is not marked as stopping perform + the actual close. */ + if (!space->is_stopping()) { + mutex_enter(&dict_sys->mutex); + /* perform the actual closing */ + btr_scrub_table_close(scrub_data->current_table); + mutex_exit(&dict_sys->mutex); + } + //TODO:Zsolt + //space->release(); + } + + scrub_data->current_table = NULL; + scrub_data->current_index = NULL; +} + +/**************************************************************//** +Check if scrubbing is turned ON or OFF */ +static +bool +check_scrub_setting( +/*=====================*/ + btr_scrub_t* scrub_data) /*!< in: scrub data */ +{ + if (scrub_data->compressed) + return srv_background_scrub_data_compressed; + else + return srv_background_scrub_data_uncompressed; +} + +#define IBUF_INDEX_ID (DICT_IBUF_ID_MIN + IBUF_SPACE_ID) + +/**************************************************************//** +Check if a page needs scrubbing */ + +int +btr_page_needs_scrubbing( +/*=====================*/ + btr_scrub_t* scrub_data, /*!< in: scrub data */ + buf_block_t* block, /*!< in: block to check, latched */ + btr_scrub_page_allocation_status_t allocated) /*!< in: is block known + to be allocated */ +{ + /** + * Check if scrubbing has been turned OFF. + * + * at start of space, we check if scrubbing is ON or OFF + * here we only check if scrubbing is turned OFF. + * + * Motivation is that it's only valueable to have a full table (space) + * scrubbed. + */ + if (!check_scrub_setting(scrub_data)) { + bool before_value = scrub_data->scrubbing; + scrub_data->scrubbing = false; + + if (before_value == true) { + /* we toggle scrubbing from on to off */ + return BTR_SCRUB_TURNED_OFF; + } + } + + if (scrub_data->scrubbing == false) { + return BTR_SCRUB_SKIP_PAGE_AND_CLOSE_TABLE; + } + + const page_t* page = buf_block_get_frame(block); + + if (allocated == BTR_SCRUB_PAGE_ALLOCATED) { + if (fil_page_get_type(page) != FIL_PAGE_INDEX) { + /* this function is called from fil-crypt-threads. + * these threads iterate all pages of all tablespaces + * and don't know about fil_page_type. + * But scrubbing is only needed for index-pages. */ + + /** + * NOTE: scrubbing is also needed for UNDO pages, + * but they are scrubbed at purge-time, since they are + * uncompressed + */ + + /* if encountering page type not needing scrubbing + release reference to table object */ + return BTR_SCRUB_SKIP_PAGE_AND_CLOSE_TABLE; + } + + if (!page_has_garbage(page)) { + /* no garbage (from deleted/shrunken records) */ + return BTR_SCRUB_SKIP_PAGE_AND_CLOSE_TABLE; + } + + } else if (allocated == BTR_SCRUB_PAGE_FREE || + allocated == BTR_SCRUB_PAGE_ALLOCATION_UNKNOWN) { + + switch (fil_page_get_type(page)) { + case FIL_PAGE_INDEX: + case FIL_PAGE_TYPE_ZBLOB: + case FIL_PAGE_TYPE_ZBLOB2: + break; + default: + /** + * If this is a dropped page, we also need to scrub + * BLOB pages + */ + + /* if encountering page type not needing scrubbing + release reference to table object */ + return BTR_SCRUB_SKIP_PAGE_AND_CLOSE_TABLE; + } + } + + if (block->page.id.space() == TRX_SYS_SPACE + && btr_page_get_index_id(page) == IBUF_INDEX_ID) { + /* skip ibuf */ + return BTR_SCRUB_SKIP_PAGE_AND_CLOSE_TABLE; + } + + return BTR_SCRUB_PAGE; +} + +/**************************************************************** +Handle a skipped page +*/ + +void +btr_scrub_skip_page( +/*==================*/ + btr_scrub_t* scrub_data, /*!< in: data with scrub state */ + int needs_scrubbing) /*!< in: return code from + btr_page_needs_scrubbing */ +{ + switch(needs_scrubbing) { + case BTR_SCRUB_SKIP_PAGE: + /* nothing todo */ + return; + case BTR_SCRUB_SKIP_PAGE_AND_CLOSE_TABLE: + btr_scrub_table_close_for_thread(scrub_data); + return; + case BTR_SCRUB_TURNED_OFF: + case BTR_SCRUB_SKIP_PAGE_AND_COMPLETE_SPACE: + btr_scrub_complete_space(scrub_data); + return; + } + + /* unknown value. should not happen */ + ut_a(0); +} + +/**************************************************************** +Try to scrub a page using btr_page_reorganize_low +return DB_SUCCESS on success or DB_OVERFLOW on failure */ +static +dberr_t +btr_optimistic_scrub( +/*==================*/ + btr_scrub_t* scrub_data, /*!< in: data with scrub state */ + buf_block_t* block, /*!< in: block to scrub */ + dict_index_t* index, /*!< in: index */ + mtr_t* mtr) /*!< in: mtr */ +{ +#ifdef UNIV_DEBUG + if (srv_scrub_force_testing && + page_get_n_recs(buf_block_get_frame(block)) > 2 && + (rand() % 100) < test_pessimistic_scrub_pct) { + + log_scrub_failure(index, scrub_data, block, DB_OVERFLOW); + return DB_OVERFLOW; + } +#endif + + page_cur_t cur; + page_cur_set_before_first(block, &cur); + bool recovery = false; + if (!btr_page_reorganize_low(recovery, scrub_compression_level, + &cur, index, mtr)) { + return DB_OVERFLOW; + } + + /* We play safe and reset the free bits */ + if (!dict_index_is_clust(index) && + block != NULL) { + buf_frame_t* frame = buf_block_get_frame(block); + if (frame && + page_is_leaf(frame)) { + + ibuf_reset_free_bits(block); + } + } + + scrub_data->scrub_stat.page_reorganizations++; + + return DB_SUCCESS; +} + +/**************************************************************** +Try to scrub a page by splitting it +return DB_SUCCESS on success +DB_UNDERFLOW if page has too few records +DB_OUT_OF_FILE_SPACE if we can't find space for split */ +static +dberr_t +btr_pessimistic_scrub( +/*==================*/ + btr_scrub_t* scrub_data, /*!< in: data with scrub state */ + buf_block_t* block, /*!< in: block to scrub */ + dict_index_t* index, /*!< in: index */ + mtr_t* mtr) /*!< in: mtr */ +{ + page_t* page = buf_block_get_frame(block); + + if (page_get_n_recs(page) < 2) { + /** + * There is no way we can split a page with < 2 records + */ + log_scrub_failure(index, scrub_data, block, DB_UNDERFLOW); + return DB_UNDERFLOW; + } + + /** + * Splitting page needs new space, allocate it here + * so that splitting won't fail due to this */ + ulint n_extents = 3; + ulint n_reserved = 0; + if (!fsp_reserve_free_extents(&n_reserved, index->table->space, + n_extents, FSP_NORMAL, mtr)) { + log_scrub_failure(index, scrub_data, block, + DB_OUT_OF_FILE_SPACE); + return DB_OUT_OF_FILE_SPACE; + } + + /* read block variables */ + const ulint page_no = mach_read_from_4(page + FIL_PAGE_OFFSET); + const ulint left_page_no = mach_read_from_4(page + FIL_PAGE_PREV); + const ulint right_page_no = mach_read_from_4(page + FIL_PAGE_NEXT); + fil_space_t* space = fil_space_get(index->table->space); + const page_size_t page_size(space->flags); + + /** + * When splitting page, we need X-latches on left/right brothers + * see e.g btr_cur_latch_leaves + */ + + if (left_page_no != FIL_NULL) { + /** + * pages needs to be locked left-to-right, release block + * and re-lock. We still have x-lock on index + * so this should be safe + */ + mtr->release_block_at_savepoint(scrub_data->savepoint, block); + + buf_block_t* get_block __attribute__((unused)) = btr_block_get( + page_id_t(space->id, left_page_no), + page_size, RW_X_LATCH, index, mtr); + + /** + * Refetch block and re-initialize page + */ + block = btr_block_get( + page_id_t(space->id, page_no), + page_size, RW_X_LATCH, index, mtr); + + page = buf_block_get_frame(block); + + /** + * structure should be unchanged + */ + ut_a(left_page_no == btr_page_get_prev(page, mtr)); + ut_a(right_page_no == btr_page_get_next(page, mtr)); + } + + if (right_page_no != FIL_NULL) { + buf_block_t* get_block __attribute__((unused))= btr_block_get( + page_id_t(space->id, right_page_no), + page_size, RW_X_LATCH, index, mtr); + } + + /* arguments to btr_page_split_and_insert */ + mem_heap_t* heap = NULL; + dtuple_t* entry = NULL; + ulint* offsets = NULL; + ulint n_ext = 0; + ulint flags = BTR_MODIFY_TREE; + + /** + * position a cursor on first record on page + */ + rec_t* rec = page_rec_get_next(page_get_infimum_rec(page)); + btr_cur_t cursor; + btr_cur_position(index, rec, block, &cursor); + + /** + * call split page with NULL as argument for entry to insert + */ + if (dict_index_get_page(index) == page_no) { + /* The page is the root page + * NOTE: ibuf_reset_free_bits is called inside + * btr_root_raise_and_insert */ + rec = btr_root_raise_and_insert( + flags, &cursor, &offsets, &heap, entry, n_ext, mtr); + } else { + /* We play safe and reset the free bits + * NOTE: need to call this prior to btr_page_split_and_insert */ + if (!dict_index_is_clust(index) && + block != NULL) { + buf_frame_t* frame = buf_block_get_frame(block); + if (frame && + page_is_leaf(frame)) { + + ibuf_reset_free_bits(block); + } + } + + rec = btr_page_split_and_insert( + flags, &cursor, &offsets, &heap, entry, n_ext, mtr); + } + + if (heap) { + mem_heap_free(heap); + } + + space->release_free_extents(n_reserved); + scrub_data->scrub_stat.page_splits++; + return DB_SUCCESS; +} + +/**************************************************************** +Location index by id for a table +return index or NULL */ +static +dict_index_t* +find_index( +/*========*/ + dict_table_t* table, /*!< in: table */ + index_id_t index_id) /*!< in: index id */ +{ + if (table != NULL) { + dict_index_t* index = dict_table_get_first_index(table); + while (index != NULL) { + if (index->id == index_id) + return index; + index = dict_table_get_next_index(index); + } + } + + return NULL; +} + +/**************************************************************** +Check if table should be scrubbed +*/ +static +bool +btr_scrub_table_needs_scrubbing( +/*============================*/ + dict_table_t* table) /*!< in: table */ +{ + if (table == NULL) + return false; + + if (table->stats_bg_flag & BG_STAT_SHOULD_QUIT) { + return false; + } + + if (table->to_be_dropped) { + return false; + } + + if (!table->is_readable()) { + return false; + } + + return true; +} + +/**************************************************************** +Check if index should be scrubbed +*/ +static +bool +btr_scrub_index_needs_scrubbing( +/*============================*/ + dict_index_t* index) /*!< in: index */ +{ + if (index == NULL) + return false; + + if (dict_index_is_ibuf(index)) { + return false; + } + + if (dict_index_is_online_ddl(index)) { + return false; + } + + return true; +} + +/**************************************************************** +Get table and index and store it on scrub_data +*/ +static +void +btr_scrub_get_table_and_index( +/*=========================*/ + btr_scrub_t* scrub_data, /*!< in/out: scrub data */ + index_id_t index_id) /*!< in: index id */ +{ + /* first check if it's an index to current table */ + scrub_data->current_index = find_index(scrub_data->current_table, + index_id); + + if (scrub_data->current_index != NULL) { + /* yes it was */ + return; + } + + if (!btr_scrub_lock_dict(scrub_data->space, false)) { + btr_scrub_complete_space(scrub_data); + return; + } + + /* close current table (if any) */ + if (scrub_data->current_table != NULL) { + btr_scrub_table_close(scrub_data->current_table); + scrub_data->current_table = NULL; + } + + /* argument to dict_table_open_on_index_id */ + bool dict_locked = true; + + /* open table based on index_id */ + dict_table_t* table = dict_table_open_on_index_id( + index_id, + dict_locked); + + if (table != NULL) { + /* mark table as being scrubbed */ + table->stats_bg_flag |= BG_SCRUB_IN_PROGRESS; + + if (!btr_scrub_table_needs_scrubbing(table)) { + btr_scrub_table_close(table); + btr_scrub_unlock_dict(); + return; + } + } + + btr_scrub_unlock_dict(); + scrub_data->current_table = table; + scrub_data->current_index = find_index(table, index_id); +} + +/**************************************************************** +Handle free page */ + +int +btr_scrub_free_page( +/*====================*/ + btr_scrub_t* scrub_data, /*!< in/out: scrub data */ + buf_block_t* block, /*!< in: block to scrub */ + mtr_t* mtr) /*!< in: mtr */ +{ + // TODO(jonaso): scrub only what is actually needed + + { + /* note: perform both the memset and setting of FIL_PAGE_TYPE + * wo/ logging. so that if we crash before page is flushed + * it will be found by scrubbing thread again + */ + memset(buf_block_get_frame(block) + PAGE_HEADER, 0, + srv_page_size - PAGE_HEADER); + + mach_write_to_2(buf_block_get_frame(block) + FIL_PAGE_TYPE, + FIL_PAGE_TYPE_ALLOCATED); + } + + page_create(block, mtr, + dict_table_is_comp(scrub_data->current_table), + dict_index_is_spatial(scrub_data->current_index)); + + mtr_commit(mtr); + + /* page doesn't need further processing => SKIP + * and close table/index so that we don't keep references too long */ + return BTR_SCRUB_SKIP_PAGE_AND_CLOSE_TABLE; +} + +/**************************************************************** +Recheck if a page needs scrubbing, and if it does load appropriate +table and index */ + +int +btr_scrub_recheck_page( +/*====================*/ + btr_scrub_t* scrub_data, /*!< inut: scrub data */ + buf_block_t* block, /*!< in: block */ + btr_scrub_page_allocation_status_t allocated, /*!< in: is block + allocated or free */ + mtr_t* mtr) /*!< in: mtr */ +{ + /* recheck if page needs scrubbing (knowing allocation status) */ + int needs_scrubbing = btr_page_needs_scrubbing( + scrub_data, block, allocated); + + if (needs_scrubbing != BTR_SCRUB_PAGE) { + mtr_commit(mtr); + return needs_scrubbing; + } + + if (allocated == BTR_SCRUB_PAGE_FREE) { + /** we don't need to load table/index for free pages + * so scrub directly here */ + /* mtr is committed inside btr_scrub_page_free */ + return btr_scrub_free_page(scrub_data, + block, + mtr); + } + + page_t* page = buf_block_get_frame(block); + index_id_t index_id = btr_page_get_index_id(page); + + if (scrub_data->current_index == NULL || + scrub_data->current_index->id != index_id) { + + /** + * commit mtr (i.e release locks on block) + * and try to get table&index potentially loading it + * from disk + */ + mtr_commit(mtr); + btr_scrub_get_table_and_index(scrub_data, index_id); + } else { + /* we already have correct index + * commit mtr so that we can lock index before fetching page + */ + mtr_commit(mtr); + } + + /* check if table is about to be dropped */ + if (!btr_scrub_table_needs_scrubbing(scrub_data->current_table)) { + return BTR_SCRUB_SKIP_PAGE_AND_CLOSE_TABLE; + } + + /* check if index is scrubbable */ + if (!btr_scrub_index_needs_scrubbing(scrub_data->current_index)) { + return BTR_SCRUB_SKIP_PAGE_AND_CLOSE_TABLE; + } + + mtr_start(mtr); + mtr_x_lock(dict_index_get_lock(scrub_data->current_index), mtr); + /** set savepoint for X-latch of block */ + scrub_data->savepoint = mtr_set_savepoint(mtr); + return BTR_SCRUB_PAGE; +} + +/**************************************************************** +Perform actual scrubbing of page */ + +int +btr_scrub_page( +/*============*/ + btr_scrub_t* scrub_data, /*!< in/out: scrub data */ + buf_block_t* block, /*!< in: block */ + btr_scrub_page_allocation_status_t allocated, /*!< in: is block + allocated or free */ + mtr_t* mtr) /*!< in: mtr */ +{ + /* recheck if page needs scrubbing (knowing allocation status) */ + int needs_scrubbing = BTR_SCRUB_SKIP_PAGE_AND_CLOSE_TABLE; + + if (block) { + btr_page_needs_scrubbing(scrub_data, block, allocated); + } + + if (!block || needs_scrubbing != BTR_SCRUB_PAGE) { + mtr_commit(mtr); + return needs_scrubbing; + } + + if (allocated == BTR_SCRUB_PAGE_FREE) { + /* mtr is committed inside btr_scrub_page_free */ + return btr_scrub_free_page(scrub_data, + block, + mtr); + } + + /* check that table/index still match now that they are loaded */ + + if (!scrub_data->current_table->space + || fil_space_get(scrub_data->current_table->space)->id + != scrub_data->space) { + /* this is truncate table */ + mtr_commit(mtr); + return BTR_SCRUB_SKIP_PAGE_AND_CLOSE_TABLE; + } + + if (scrub_data->current_index->table != scrub_data->current_table) { + /* this is truncate table */ + mtr_commit(mtr); + return BTR_SCRUB_SKIP_PAGE_AND_CLOSE_TABLE; + } + + if (scrub_data->current_index->page == FIL_NULL) { + /* this is truncate table */ + mtr_commit(mtr); + return BTR_SCRUB_SKIP_PAGE_AND_CLOSE_TABLE; + } + + buf_frame_t* frame = buf_block_get_frame(block); + + if (!frame || btr_page_get_index_id(frame) != + scrub_data->current_index->id) { + /* page has been reallocated to new index */ + mtr_commit(mtr); + return BTR_SCRUB_SKIP_PAGE_AND_CLOSE_TABLE; + } + + /* check if I can scrub (reorganize) page wo/ overflow */ + if (btr_optimistic_scrub(scrub_data, + block, + scrub_data->current_index, + mtr) != DB_SUCCESS) { + + /** + * Can't reorganize page...need to split it + */ + btr_pessimistic_scrub(scrub_data, + block, + scrub_data->current_index, + mtr); + } + mtr_commit(mtr); + + return BTR_SCRUB_SKIP_PAGE; // no further action needed +} + +/**************************************************************//** +Start iterating a space */ + +bool +btr_scrub_start_space( +/*===================*/ + ulint space, + btr_scrub_t* scrub_data, + bool compressed) +{ + scrub_data->space = space; + scrub_data->current_table = NULL; + scrub_data->current_index = NULL; + + scrub_data->compressed = compressed; + scrub_data->scrubbing = check_scrub_setting(scrub_data); + return scrub_data->scrubbing; +} + +/*********************************************************************** +Update global statistics with thread statistics */ +static +void +btr_scrub_update_total_stat(btr_scrub_t *scrub_data) +{ + mutex_enter(&scrub_stat_mutex); + scrub_stat.page_reorganizations += + scrub_data->scrub_stat.page_reorganizations; + scrub_stat.page_splits += + scrub_data->scrub_stat.page_splits; + scrub_stat.page_split_failures_underflow += + scrub_data->scrub_stat.page_split_failures_underflow; + scrub_stat.page_split_failures_out_of_filespace += + scrub_data->scrub_stat.page_split_failures_out_of_filespace; + scrub_stat.page_split_failures_missing_index += + scrub_data->scrub_stat.page_split_failures_missing_index; + scrub_stat.page_split_failures_unknown += + scrub_data->scrub_stat.page_split_failures_unknown; + mutex_exit(&scrub_stat_mutex); + + // clear stat + memset(&scrub_data->scrub_stat, 0, sizeof(scrub_data->scrub_stat)); +} + +/** Complete iterating a space. +@param[in,out] scrub_data scrub data */ + +void +btr_scrub_complete_space(btr_scrub_t* scrub_data) +{ + ut_ad(scrub_data->scrubbing); + btr_scrub_table_close_for_thread(scrub_data); + btr_scrub_update_total_stat(scrub_data); +} + +/********************************************************************* +Return scrub statistics */ +void +btr_scrub_total_stat(btr_scrub_stat_t *stat) +{ + mutex_enter(&scrub_stat_mutex); + *stat = scrub_stat; + mutex_exit(&scrub_stat_mutex); +} + +/********************************************************************* +Init global variables */ + +void +btr_scrub_init() +{ + mutex_create(LATCH_ID_SCRUB_STAT_MUTEX, &scrub_stat_mutex); + + memset(&scrub_stat, 0, sizeof(scrub_stat)); +} + +/********************************************************************* +Cleanup globals */ + +void +btr_scrub_cleanup() +{ + mutex_free(&scrub_stat_mutex); +} + diff --git a/storage/innobase/dict/dict0load.cc b/storage/innobase/dict/dict0load.cc index 7f8eeac417fc..9bed21974c37 100644 --- a/storage/innobase/dict/dict0load.cc +++ b/storage/innobase/dict/dict0load.cc @@ -4030,3 +4030,96 @@ dict_load_foreigns( DBUG_RETURN(DB_SUCCESS); } + +/***********************************************************************//** +Loads a table id based on the index id. +@return true if found */ +static +bool +dict_load_table_id_on_index_id( +/*===========================*/ + index_id_t index_id, /*!< in: index id */ + table_id_t* table_id) /*!< out: table id */ +{ + /* check hard coded indexes */ + switch(index_id) { + case DICT_TABLES_ID: + case DICT_COLUMNS_ID: + case DICT_INDEXES_ID: + case DICT_FIELDS_ID: + *table_id = index_id; + return true; + case DICT_TABLE_IDS_ID: + /* The following is a secondary index on SYS_TABLES */ + *table_id = DICT_TABLES_ID; + return true; + } + + bool found = false; + mtr_t mtr; + + ut_ad(mutex_own(&(dict_sys->mutex))); + + /* NOTE that the operation of this function is protected by + the dictionary mutex, and therefore no deadlocks can occur + with other dictionary operations. */ + + mtr_start(&mtr); + + btr_pcur_t pcur; + const rec_t* rec = dict_startscan_system(&pcur, &mtr, SYS_INDEXES); + + while (rec) { + ulint len; + const byte* field = rec_get_nth_field_old( + rec, DICT_FLD__SYS_INDEXES__ID, &len); + ut_ad(len == 8); + + /* Check if the index id is the one searched for */ + if (index_id == mach_read_from_8(field)) { + found = true; + /* Now we get the table id */ + const byte* field = rec_get_nth_field_old( + rec, + DICT_FLD__SYS_INDEXES__TABLE_ID, + &len); + *table_id = mach_read_from_8(field); + break; + } + mtr_commit(&mtr); + mtr_start(&mtr); + rec = dict_getnext_system(&pcur, &mtr); + } + + btr_pcur_close(&pcur); + mtr_commit(&mtr); + + return(found); +} + +dict_table_t* +dict_table_open_on_index_id( +/*========================*/ + index_id_t index_id, /*!< in: index id */ + bool dict_locked) /*!< in: dict locked */ +{ + if (!dict_locked) { + mutex_enter(&dict_sys->mutex); + } + + ut_ad(mutex_own(&dict_sys->mutex)); + table_id_t table_id; + dict_table_t * table = NULL; + if (dict_load_table_id_on_index_id(index_id, &table_id)) { + bool local_dict_locked = true; + table = dict_table_open_on_id(table_id, + local_dict_locked, + DICT_TABLE_OP_LOAD_TABLESPACE); + } + + if (!dict_locked) { + mutex_exit(&dict_sys->mutex); + } + return table; +} + diff --git a/storage/innobase/fil/fil0crypt.cc b/storage/innobase/fil/fil0crypt.cc index 9712b1683471..d699fb6def0b 100644 --- a/storage/innobase/fil/fil0crypt.cc +++ b/storage/innobase/fil/fil0crypt.cc @@ -41,6 +41,7 @@ Modified Jan Lindström jan.lindstrom@mariadb.com #include #include "buf0flu.h" #include "buf0buf.h" +#include "btr0scrub.h" #include "trx0trx.h" // for updating data dictionary #include "row0mysql.h" @@ -97,6 +98,11 @@ uint srv_n_fil_crypt_iops = 100; // 10ms per iop static uint srv_alloc_time = 3; // allocate iops for 3s at a time static uint n_fil_crypt_iops_allocated = 0; +extern uint srv_background_scrub_data_interval; +extern uint srv_background_scrub_data_check_interval; +extern my_bool srv_background_scrub_data_uncompressed; +extern my_bool srv_background_scrub_data_compressed; + uint get_global_default_encryption_key_id_value(); bool is_online_encryption_on() { @@ -1006,6 +1012,8 @@ struct rotate_thread_t { uintmax_t sum_waited_us; /*!< wait time during this slot */ fil_crypt_stat_t crypt_stat; // statistics + btr_scrub_t scrub_data; /*< thread local data used by btr_scrub-functions + when iterating pages of tablespace */ /** @return whether this thread should terminate */ bool should_shutdown() const { @@ -1078,6 +1086,8 @@ fil_crypt_space_needs_rotation( return false; } + const bool space_compressed = space->compression_type != Compression::NONE; + mutex_enter(&crypt_data->mutex); do { @@ -1117,9 +1127,22 @@ fil_crypt_space_needs_rotation( break; // the space is already being processed and there are no more pages to rotate } - crypt_data->rotate_state.scrubbing.is_active = false; + crypt_data->rotate_state.scrubbing.is_active = + btr_scrub_start_space(space->id, &state->scrub_data, space_compressed); + + time_t diff = time(0) - crypt_data->rotate_state.scrubbing. + last_scrub_completed; + btr_scrub_start_space(space->id, &state->scrub_data, space_compressed); - if (need_key_rotation == false) { + bool need_scrubbing = + (srv_background_scrub_data_uncompressed || + srv_background_scrub_data_compressed) && + crypt_data->rotate_state.scrubbing.is_active + && diff >= 0 + && ulint(diff) >= srv_background_scrub_data_interval; + + + if (need_key_rotation == false && need_scrubbing == false) { break; } @@ -1133,6 +1156,7 @@ fil_crypt_space_needs_rotation( return false; } + /*********************************************************************** Update global statistics with thread statistics @param[in,out] state key rotation statistics */ @@ -1594,6 +1618,38 @@ fil_crypt_get_page_throttle_func( return block; } +/*********************************************************************** +Get block and allocation status + note: innodb locks fil_space_latch and then block when allocating page +but locks block and then fil_space_latch when freeing page. + @param[in,out] state Rotation state +@param[in] offset Page offset +@param[in,out] mtr Minitransaction +@param[out] allocation_status Allocation status +@param[out] sleeptime_ms Sleep time +@return block or NULL +*/ +static +buf_block_t* +btr_scrub_get_block_and_allocation_status( + rotate_thread_t* state, + fseg_header_t* seg, + ulint offset, + mtr_t* mtr, + btr_scrub_page_allocation_status_t *allocation_status, + ulint* sleeptime_ms) +{ + mtr_t local_mtr; + buf_block_t *block = NULL; + mtr_start(&local_mtr); + mtr_commit(&local_mtr); + block = fil_crypt_get_page_throttle(state, + offset, mtr, + sleeptime_ms); + *allocation_status = block->page.state == BUF_BLOCK_NOT_USED ? BTR_SCRUB_PAGE_FREE : BTR_SCRUB_PAGE_ALLOCATED; + return block; +} + /*********************************************************************** Rotate one page @param[in,out] key_state Key state @@ -1631,6 +1687,9 @@ fil_crypt_rotate_page( mtr.set_log_mode(MTR_LOG_NO_REDO); // We do not need those pages to be redo log. Before we flush page 0, we make sure // that all pages have been flushed to disk. If we fail to update page 0 we will rotate // those pages again after restart - when encryption threads discover that there is work to do. + + int needs_scrubbing = BTR_SCRUB_SKIP_PAGE; + if (buf_block_t* block = fil_crypt_get_page_throttle(state, offset, &mtr, &sleeptime_ms)) { @@ -1689,6 +1748,9 @@ fil_crypt_rotate_page( state->min_key_version_found = kv; } } + needs_scrubbing = btr_page_needs_scrubbing( + &state->scrub_data, block, + BTR_SCRUB_PAGE_ALLOCATION_UNKNOWN); } mtr.commit(); @@ -1701,6 +1763,54 @@ fil_crypt_rotate_page( mtr.commit(); } + if (needs_scrubbing == BTR_SCRUB_PAGE) { + mtr.start(); + btr_scrub_page_allocation_status_t allocated = BTR_SCRUB_PAGE_ALLOCATION_UNKNOWN; + buf_block_t* block = btr_scrub_get_block_and_allocation_status( + state, NULL, offset, &mtr, + &allocated, + &sleeptime_ms); + if (block) { + mtr.set_named_space(space); + /* get required table/index and index-locks */ + needs_scrubbing = btr_scrub_recheck_page( + &state->scrub_data, block, allocated, &mtr); + if (needs_scrubbing == BTR_SCRUB_PAGE) { + /* we need to refetch it once more now that we have + * index locked */ + block = btr_scrub_get_block_and_allocation_status( + state, NULL, offset, &mtr, + &allocated, + &sleeptime_ms); + needs_scrubbing = btr_scrub_page(&state->scrub_data, + block, allocated, + &mtr); + } + /* NOTE: mtr is committed inside btr_scrub_recheck_page() + * and/or btr_scrub_page. This is to make sure that + * locks & pages are latched in corrected order, + * the mtr is in some circumstances restarted. + * (mtr_commit() + mtr_start()) + */ + } + } + if (needs_scrubbing != BTR_SCRUB_PAGE) { + /* if page didn't need scrubbing it might be that cleanups + are needed. do those outside of any mtr to prevent deadlocks. + the information what kinds of cleanups that are needed are + encoded inside the needs_scrubbing, but this is opaque to + this function (except the value BTR_SCRUB_PAGE) */ + btr_scrub_skip_page(&state->scrub_data, needs_scrubbing); + } + if (needs_scrubbing == BTR_SCRUB_TURNED_OFF) { + /* if we just detected that scrubbing was turned off + * update global state to reflect this */ + ut_ad(crypt_data); + mutex_enter(&crypt_data->mutex); + crypt_data->rotate_state.scrubbing.is_active = false; + mutex_exit(&crypt_data->mutex); + } + if (sleeptime_ms) { os_event_reset(fil_crypt_throttle_sleep_event); os_event_wait_time(fil_crypt_throttle_sleep_event, @@ -2507,6 +2617,19 @@ fil_crypt_complete_rotate_space( mutex_exit(&crypt_data->mutex); + if (state->scrub_data.scrubbing) { + btr_scrub_complete_space(&state->scrub_data); + if (should_flush) { + // only last thread updates last_scrub_completed + ut_ad(crypt_data); + mutex_enter(&crypt_data->mutex); + crypt_data->rotate_state.scrubbing. + last_scrub_completed = time(0); + mutex_exit(&crypt_data->mutex); + } + } + + if (should_flush) { if (fil_crypt_flush_space(state) == DB_SUCCESS) { uint current_type = crypt_data->rotate_state.min_key_version_found == ENCRYPTION_KEY_VERSION_NOT_ENCRYPTED @@ -2573,6 +2696,7 @@ DECLARE_THREAD(fil_crypt_thread)( while (!thr.should_shutdown()) { key_state_t new_state; + time_t wait_start = time(0); while (!thr.should_shutdown()) { @@ -2591,6 +2715,14 @@ DECLARE_THREAD(fil_crypt_thread)( * a space*/ break; } + + time_t waited = time(0) - wait_start; + if (waited >= 0 + && ulint(waited) >= srv_background_scrub_data_check_interval + && (srv_background_scrub_data_uncompressed + || srv_background_scrub_data_compressed)) { + break; + } } recheck = false; @@ -2894,6 +3026,46 @@ fil_space_crypt_get_status( } } +/********************************************************************* + Get scrub status for a space (used by information_schema) + + @param[in] space Tablespace + @param[out] status Scrub status */ + + void +fil_space_get_scrub_status( + const fil_space_t* space, + struct fil_space_scrub_status_t* status) +{ + memset(status, 0, sizeof(*status)); + + fil_space_crypt_t* crypt_data = space->crypt_data; + + status->space = space->id; + + if (crypt_data != NULL) { + status->compressed = FSP_FLAGS_GET_ZIP_SSIZE(space->flags) > 0; + mutex_enter(&crypt_data->mutex); + status->last_scrub_completed = + crypt_data->rotate_state.scrubbing.last_scrub_completed; + if (crypt_data->rotate_state.active_threads > 0 && + crypt_data->rotate_state.scrubbing.is_active) { + status->scrubbing = true; + status->current_scrub_started = + crypt_data->rotate_state.start_time; + status->current_scrub_active_threads = + crypt_data->rotate_state.active_threads; + status->current_scrub_page_number = + crypt_data->rotate_state.next_offset; + status->current_scrub_max_page_number = + crypt_data->rotate_state.max_offset; + } + + mutex_exit(&crypt_data->mutex); + } +} + + /********************************************************************* Return crypt statistics @param[out] stat Crypt statistics */ diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index 1b1d718bbea7..61279120aa81 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -201,6 +201,17 @@ static char* innodb_version_str = (char*) INNODB_VERSION_STR; extern uint srv_fil_crypt_rotate_key_age; extern uint srv_n_fil_crypt_iops; +extern my_bool srv_immediate_scrub_data_uncompressed; +extern my_bool srv_background_scrub_data_uncompressed; +extern my_bool srv_background_scrub_data_compressed; +extern uint srv_background_scrub_data_interval; +extern uint srv_background_scrub_data_check_interval; +#ifdef UNIV_DEBUG +extern my_bool srv_scrub_force_testing; +#endif + +extern mysql_pfs_key_t scrub_stat_mutex_key; + /** Note we cannot use rec_format_enum because we do not allow COMPRESSED row format for innodb_default_row_format option. */ enum default_row_format_enum { @@ -482,6 +493,7 @@ static PSI_mutex_info all_innodb_mutexes[] = { PSI_KEY(zip_pad_mutex), PSI_KEY(row_drop_list_mutex), PSI_KEY(master_key_id_mutex), + PSI_KEY(scrub_stat_mutex), }; # endif /* UNIV_PFS_MUTEX */ @@ -1166,6 +1178,29 @@ static SHOW_VAR innodb_status_variables[]= { (char*) &export_vars.innodb_fragmentation_stats.scan_deleted_recs_size, SHOW_LONG, SHOW_SCOPE_GLOBAL}, + /* scrubing */ + {"scrub_background_page_reorganizations", + (char*) &export_vars.innodb_scrub_page_reorganizations, + SHOW_LONG, SHOW_SCOPE_GLOBAL}, + {"scrub_background_page_splits", + (char*) &export_vars.innodb_scrub_page_splits, + SHOW_LONG, SHOW_SCOPE_GLOBAL}, + {"scrub_background_page_split_failures_underflow", + (char*) &export_vars.innodb_scrub_page_split_failures_underflow, + SHOW_LONG, SHOW_SCOPE_GLOBAL}, + {"scrub_background_page_split_failures_out_of_filespace", + (char*) &export_vars.innodb_scrub_page_split_failures_out_of_filespace, + SHOW_LONG, SHOW_SCOPE_GLOBAL}, + {"scrub_background_page_split_failures_missing_index", + (char*) &export_vars.innodb_scrub_page_split_failures_missing_index, + SHOW_LONG, SHOW_SCOPE_GLOBAL}, + {"scrub_background_page_split_failures_unknown", + (char*) &export_vars.innodb_scrub_page_split_failures_unknown, + SHOW_LONG, SHOW_SCOPE_GLOBAL}, + {"scrub_log", + (char*) &export_vars.innodb_scrub_log, + SHOW_LONGLONG, SHOW_SCOPE_GLOBAL}, + /* Encryption */ {"encryption_rotation_pages_read_from_cache", (char*) &export_vars.innodb_encryption_rotation_pages_read_from_cache, @@ -22516,6 +22551,69 @@ static MYSQL_SYSVAR_UINT(encryption_rotation_iops, srv_n_fil_crypt_iops, innodb_encryption_rotation_iops_update, srv_n_fil_crypt_iops, 0, UINT_MAX32, 0); + +static MYSQL_SYSVAR_BOOL(scrub_log, srv_scrub_log, + PLUGIN_VAR_OPCMDARG | PLUGIN_VAR_READONLY, + "Enable background redo log (ib_logfile0, ib_logfile1...) scrubbing", + 0, 0, 0); + +static MYSQL_SYSVAR_ULONGLONG(scrub_log_speed, innodb_scrub_log_speed, + PLUGIN_VAR_OPCMDARG, + "Background redo log scrubbing speed in bytes/sec", + NULL, NULL, + 256, /* 256 bytes/sec, corresponds to 2000 ms scrub_log_interval */ + 1, /* min */ + 50000, 0); /* 50Kbyte/sec, corresponds to 10 ms scrub_log_interval */ + +static MYSQL_SYSVAR_BOOL(immediate_scrub_data_uncompressed, + srv_immediate_scrub_data_uncompressed, + 0, + "Enable scrubbing of data", + NULL, NULL, FALSE); + +static MYSQL_SYSVAR_BOOL(background_scrub_data_uncompressed, + srv_background_scrub_data_uncompressed, + 0, + "Enable scrubbing of uncompressed data by " + "background threads (same as encryption_threads)", + NULL, NULL, FALSE); + +static MYSQL_SYSVAR_BOOL(background_scrub_data_compressed, + srv_background_scrub_data_compressed, + 0, + "Enable scrubbing of compressed data by " + "background threads (same as encryption_threads)", + NULL, NULL, FALSE); + +static MYSQL_SYSVAR_UINT(background_scrub_data_check_interval, + srv_background_scrub_data_check_interval, + 0, + "check if spaces needs scrubbing every " + "innodb_background_scrub_data_check_interval " + "seconds", + NULL, NULL, + srv_background_scrub_data_check_interval, + 1, + UINT_MAX32, 0); + +static MYSQL_SYSVAR_UINT(background_scrub_data_interval, + srv_background_scrub_data_interval, + 0, + "scrub spaces that were last scrubbed longer than " + " innodb_background_scrub_data_interval seconds ago", + NULL, NULL, + srv_background_scrub_data_interval, + 1, + UINT_MAX32, 0); + +#ifdef UNIV_DEBUG +static MYSQL_SYSVAR_BOOL(debug_force_scrubbing, + srv_scrub_force_testing, + 0, + "Perform extra scrubbing to increase test exposure", + NULL, NULL, FALSE); +#endif /* UNIV_DEBUG */ + static struct st_mysql_sys_var* innobase_system_variables[]= { MYSQL_SYSVAR(api_trx_level), MYSQL_SYSVAR(api_bk_commit_interval), @@ -22723,6 +22821,17 @@ static struct st_mysql_sys_var* innobase_system_variables[]= { MYSQL_SYSVAR(encryption_rotation_iops), MYSQL_SYSVAR(default_encryption_key_id), MYSQL_SYSVAR(encrypt_tables), + /* Scrubing feature */ + MYSQL_SYSVAR(scrub_log), + MYSQL_SYSVAR(scrub_log_speed), + MYSQL_SYSVAR(immediate_scrub_data_uncompressed), + MYSQL_SYSVAR(background_scrub_data_uncompressed), + MYSQL_SYSVAR(background_scrub_data_compressed), + MYSQL_SYSVAR(background_scrub_data_interval), + MYSQL_SYSVAR(background_scrub_data_check_interval), +#ifdef UNIV_DEBUG + MYSQL_SYSVAR(debug_force_scrubbing), +#endif NULL }; @@ -22778,7 +22887,8 @@ i_s_innodb_sys_tablespaces, i_s_innodb_sys_datafiles, i_s_innodb_changed_pages, i_s_innodb_sys_virtual, -i_s_innodb_tablespaces_encryption +i_s_innodb_tablespaces_encryption, +i_s_innodb_tablespaces_scrubbing mysql_declare_plugin_end; /** @brief Initialize the default value of innodb_commit_concurrency. diff --git a/storage/innobase/handler/i_s.cc b/storage/innobase/handler/i_s.cc index 052c2fde33f1..3dda409c792d 100644 --- a/storage/innobase/handler/i_s.cc +++ b/storage/innobase/handler/i_s.cc @@ -9717,4 +9717,279 @@ struct st_mysql_plugin i_s_innodb_tablespaces_encryption = STRUCT_FLD(flags, 0UL) }; +/** TABLESPACES_SCRUBBING ********************************************/ +/* Fields of the table INFORMATION_SCHEMA.INNODB_TABLESPACES_SCRUBBING */ +static ST_FIELD_INFO innodb_tablespaces_scrubbing_fields_info[] = +{ +#define TABLESPACES_SCRUBBING_SPACE 0 + {STRUCT_FLD(field_name, "SPACE"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define TABLESPACES_SCRUBBING_NAME 1 + {STRUCT_FLD(field_name, "NAME"), + STRUCT_FLD(field_length, MAX_FULL_NAME_LEN + 1), + STRUCT_FLD(field_type, MYSQL_TYPE_STRING), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_MAYBE_NULL), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define TABLESPACES_SCRUBBING_COMPRESSED 2 + {STRUCT_FLD(field_name, "COMPRESSED"), + STRUCT_FLD(field_length, MY_INT32_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define TABLESPACES_SCRUBBING_LAST_SCRUB_COMPLETED 3 + {STRUCT_FLD(field_name, "LAST_SCRUB_COMPLETED"), + STRUCT_FLD(field_length, 0), + STRUCT_FLD(field_type, MYSQL_TYPE_DATETIME), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_MAYBE_NULL), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define TABLESPACES_SCRUBBING_CURRENT_SCRUB_STARTED 4 + {STRUCT_FLD(field_name, "CURRENT_SCRUB_STARTED"), + STRUCT_FLD(field_length, 0), + STRUCT_FLD(field_type, MYSQL_TYPE_DATETIME), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_MAYBE_NULL), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define TABLESPACES_SCRUBBING_CURRENT_SCRUB_ACTIVE_THREADS 5 + {STRUCT_FLD(field_name, "CURRENT_SCRUB_ACTIVE_THREADS"), + STRUCT_FLD(field_length, MY_INT32_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED | MY_I_S_MAYBE_NULL), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define TABLESPACES_SCRUBBING_CURRENT_SCRUB_PAGE_NUMBER 6 + {STRUCT_FLD(field_name, "CURRENT_SCRUB_PAGE_NUMBER"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define TABLESPACES_SCRUBBING_CURRENT_SCRUB_MAX_PAGE_NUMBER 7 + {STRUCT_FLD(field_name, "CURRENT_SCRUB_MAX_PAGE_NUMBER"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define TABLESPACES_ENCRYPTION_ROTATING_OR_FLUSHING 9 + {STRUCT_FLD(field_name, "ROTATING_OR_FLUSHING"), + STRUCT_FLD(field_length, MY_INT32_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + + END_OF_ST_FIELD_INFO +}; + +/**********************************************************************//** +Function to fill INFORMATION_SCHEMA.INNODB_TABLESPACES_SCRUBBING +with information collected by scanning SYS_TABLESPACES table and +fil_space. +@param[in] thd Thread handle +@param[in] space Tablespace +@param[in] table_to_fill I_S table +@return 0 on success */ +static +int +i_s_dict_fill_tablespaces_scrubbing( + THD* thd, + fil_space_t* space, + TABLE* table_to_fill) +{ + Field** fields; + struct fil_space_scrub_status_t status; + + DBUG_ENTER("i_s_dict_fill_tablespaces_scrubbing"); + + fields = table_to_fill->field; + + fil_space_get_scrub_status(space, &status); + + OK(fields[TABLESPACES_SCRUBBING_SPACE]->store(space->id, true)); + + OK(field_store_string(fields[TABLESPACES_SCRUBBING_NAME], + space->name)); + + OK(fields[TABLESPACES_SCRUBBING_COMPRESSED]->store( + status.compressed ? 1 : 0, true)); + + if (status.last_scrub_completed == 0) { + fields[TABLESPACES_SCRUBBING_LAST_SCRUB_COMPLETED]->set_null(); + } else { + fields[TABLESPACES_SCRUBBING_LAST_SCRUB_COMPLETED] + ->set_notnull(); + OK(field_store_time_t( + fields[TABLESPACES_SCRUBBING_LAST_SCRUB_COMPLETED], + status.last_scrub_completed)); + } + + int field_numbers[] = { + TABLESPACES_SCRUBBING_CURRENT_SCRUB_STARTED, + TABLESPACES_SCRUBBING_CURRENT_SCRUB_ACTIVE_THREADS, + TABLESPACES_SCRUBBING_CURRENT_SCRUB_PAGE_NUMBER, + TABLESPACES_SCRUBBING_CURRENT_SCRUB_MAX_PAGE_NUMBER }; + + if (status.scrubbing) { + for (uint i = 0; i < array_elements(field_numbers); i++) { + fields[field_numbers[i]]->set_notnull(); + } + + OK(field_store_time_t( + fields[TABLESPACES_SCRUBBING_CURRENT_SCRUB_STARTED], + status.current_scrub_started)); + OK(fields[TABLESPACES_SCRUBBING_CURRENT_SCRUB_ACTIVE_THREADS] + ->store(status.current_scrub_active_threads, true)); + OK(fields[TABLESPACES_SCRUBBING_CURRENT_SCRUB_PAGE_NUMBER] + ->store(status.current_scrub_page_number, true)); + OK(fields[TABLESPACES_SCRUBBING_CURRENT_SCRUB_MAX_PAGE_NUMBER] + ->store(status.current_scrub_max_page_number, true)); + } else { + for (uint i = 0; i < array_elements(field_numbers); i++) { + fields[field_numbers[i]]->set_null(); + } + } + + OK(schema_table_store_record(thd, table_to_fill)); + + DBUG_RETURN(0); +} +/*******************************************************************//** +Function to populate INFORMATION_SCHEMA.INNODB_TABLESPACES_SCRUBBING table. +Loop through each record in TABLESPACES_SCRUBBING, and extract the column +information and fill the INFORMATION_SCHEMA.INNODB_TABLESPACES_SCRUBBING table. +@return 0 on success */ +static +int +i_s_tablespaces_scrubbing_fill_table( +/*===========================*/ + THD* thd, /*!< in: thread */ + TABLE_LIST* tables, /*!< in/out: tables to fill */ + Item* ) /*!< in: condition (not used) */ +{ + DBUG_ENTER("i_s_tablespaces_scrubbing_fill_table"); + RETURN_IF_INNODB_NOT_STARTED(tables->schema_table_name); + + /* deny access to user without SUPER_ACL privilege */ + if (check_global_access(thd, SUPER_ACL)) { + DBUG_RETURN(0); + } + + mutex_enter(&fil_system->mutex); + + for (fil_space_t* space = UT_LIST_GET_FIRST(fil_system->space_list); + space; space = UT_LIST_GET_NEXT(space_list, space)) { + if (space->purpose == FIL_TYPE_TABLESPACE + && !space->is_stopping()) { + //fil_space_acquire_silent(space->id); + mutex_exit(&fil_system->mutex); + if (int err = i_s_dict_fill_tablespaces_scrubbing( + thd, space, tables->table)) { + //fil_space_release(space); + DBUG_RETURN(err); + } + mutex_enter(&fil_system->mutex); + //space->release(); + } + } + + mutex_exit(&fil_system->mutex); + DBUG_RETURN(0); +} +/*******************************************************************//** +Bind the dynamic table INFORMATION_SCHEMA.INNODB_TABLESPACES_SCRUBBING +@return 0 on success */ +static +int +innodb_tablespaces_scrubbing_init( +/*========================*/ + void* p) /*!< in/out: table schema object */ +{ + ST_SCHEMA_TABLE* schema; + + DBUG_ENTER("innodb_tablespaces_scrubbing_init"); + + schema = (ST_SCHEMA_TABLE*) p; + + schema->fields_info = innodb_tablespaces_scrubbing_fields_info; + schema->fill_table = i_s_tablespaces_scrubbing_fill_table; + + DBUG_RETURN(0); +} + +struct st_mysql_plugin i_s_innodb_tablespaces_scrubbing = +{ + /* the plugin type (a MYSQL_XXX_PLUGIN value) */ + /* int */ + STRUCT_FLD(type, MYSQL_INFORMATION_SCHEMA_PLUGIN), + + /* pointer to type-specific plugin descriptor */ + /* void* */ + STRUCT_FLD(info, &i_s_info), + + /* plugin name */ + /* const char* */ + STRUCT_FLD(name, "INNODB_TABLESPACES_SCRUBBING"), + + /* plugin author (for SHOW PLUGINS) */ + /* const char* */ + STRUCT_FLD(author, "Google Inc"), + + /* general descriptive text (for SHOW PLUGINS) */ + /* const char* */ + STRUCT_FLD(descr, "InnoDB TABLESPACES_SCRUBBING"), + + /* the plugin license (PLUGIN_LICENSE_XXX) */ + /* int */ + STRUCT_FLD(license, PLUGIN_LICENSE_BSD), + + /* the function to invoke when plugin is loaded */ + /* int (*)(void*); */ + STRUCT_FLD(init, innodb_tablespaces_scrubbing_init), + + /* the function to invoke when plugin is unloaded */ + /* int (*)(void*); */ + STRUCT_FLD(deinit, i_s_common_deinit), + + /* plugin version (for SHOW PLUGINS) */ + /* unsigned int */ + STRUCT_FLD(version, INNODB_VERSION_SHORT), + + /* struct st_mysql_show_var* */ + STRUCT_FLD(status_vars, NULL), + + /* struct st_mysql_sys_var** */ + STRUCT_FLD(system_vars, NULL), + + /* reserved for dependency checking */ + /* void* */ + STRUCT_FLD(__reserved1, NULL), + + /* Plugin flags */ + /* unsigned long */ + STRUCT_FLD(flags, 0UL) +}; diff --git a/storage/innobase/handler/i_s.h b/storage/innobase/handler/i_s.h index 0c31a726e7a9..0cd510741c22 100644 --- a/storage/innobase/handler/i_s.h +++ b/storage/innobase/handler/i_s.h @@ -60,7 +60,7 @@ extern struct st_mysql_plugin i_s_innodb_sys_datafiles; extern struct st_mysql_plugin i_s_innodb_changed_pages; extern struct st_mysql_plugin i_s_innodb_sys_virtual; extern struct st_mysql_plugin i_s_innodb_tablespaces_encryption; -//extern struct st_maria_plugin i_s_innodb_tablespaces_scrubbing; +extern struct st_mysql_plugin i_s_innodb_tablespaces_scrubbing; /** Fill handlerton based INFORMATION_SCHEMA.FILES table. diff --git a/storage/innobase/include/btr0scrub.h b/storage/innobase/include/btr0scrub.h new file mode 100644 index 000000000000..f4d5d00ac934 --- /dev/null +++ b/storage/innobase/include/btr0scrub.h @@ -0,0 +1,155 @@ +// Copyright 2014 Google + +#ifndef btr0scrub_h +#define btr0scrub_h + +#include "univ.i" + +#include "dict0dict.h" +#include "data0data.h" +#include "page0cur.h" +#include "mtr0mtr.h" +#include "btr0types.h" + +/** + * enum describing page allocation status + */ +enum btr_scrub_page_allocation_status_t { + BTR_SCRUB_PAGE_FREE, + BTR_SCRUB_PAGE_ALLOCATED, + BTR_SCRUB_PAGE_ALLOCATION_UNKNOWN +}; + +/** +* constants returned by btr_page_needs_scrubbing & btr_scrub_recheck_page +*/ +#define BTR_SCRUB_PAGE 1 /* page should be scrubbed */ +#define BTR_SCRUB_SKIP_PAGE 2 /* no scrub & no action */ +#define BTR_SCRUB_SKIP_PAGE_AND_CLOSE_TABLE 3 /* no scrub & close table */ +#define BTR_SCRUB_SKIP_PAGE_AND_COMPLETE_SPACE 4 /* no scrub & complete space */ +#define BTR_SCRUB_TURNED_OFF 5 /* we detected that scrubbing + was disabled by global + variable */ + +/**************************************************************//** +struct for keeping scrub statistics. */ +struct btr_scrub_stat_t { + /* page reorganizations */ + ulint page_reorganizations; + /* page splits */ + ulint page_splits; + /* scrub failures */ + ulint page_split_failures_underflow; + ulint page_split_failures_out_of_filespace; + ulint page_split_failures_missing_index; + ulint page_split_failures_unknown; +}; + +/**************************************************************//** +struct for thread local scrub state. */ +struct btr_scrub_t { + + /* current space */ + ulint space; + + /* is scrubbing enabled for this space */ + bool scrubbing; + + /* is current space compressed */ + bool compressed; + + dict_table_t* current_table; + dict_index_t* current_index; + /* savepoint for X_LATCH of block */ + ulint savepoint; + + /* statistic counters */ + btr_scrub_stat_t scrub_stat; +}; + +/********************************************************************* +Init scrub global variables */ +void +btr_scrub_init(); + +/********************************************************************* +Cleanup scrub globals */ +void +btr_scrub_cleanup(); + +/*********************************************************************** +Return crypt statistics */ +void +btr_scrub_total_stat( +/*==================*/ + btr_scrub_stat_t *stat); /*!< out: stats to update */ + +/**************************************************************//** +Check if a page needs scrubbing +* @return BTR_SCRUB_PAGE if page should be scrubbed +* else btr_scrub_skip_page should be called +* with this return value (and without any latches held) +*/ +int +btr_page_needs_scrubbing( +/*=====================*/ + btr_scrub_t* scrub_data, /*!< in: scrub data */ + buf_block_t* block, /*!< in: block to check, latched */ + btr_scrub_page_allocation_status_t allocated); /*!< in: is block + allocated, free or + unknown */ + +/**************************************************************** +Recheck if a page needs scrubbing, and if it does load appropriate +table and index +* @return BTR_SCRUB_PAGE if page should be scrubbed +* else btr_scrub_skip_page should be called +* with this return value (and without any latches held) +*/ +int +btr_scrub_recheck_page( +/*====================*/ + btr_scrub_t* scrub_data, /*!< inut: scrub data */ + buf_block_t* block, /*!< in: block */ + btr_scrub_page_allocation_status_t allocated, /*!< in: is block + allocated or free */ + mtr_t* mtr); /*!< in: mtr */ + +/**************************************************************** +Perform actual scrubbing of page */ +int +btr_scrub_page( +/*============*/ + btr_scrub_t* scrub_data, /*!< in/out: scrub data */ + buf_block_t* block, /*!< in: block */ + btr_scrub_page_allocation_status_t allocated, /*!< in: is block + allocated or free */ + mtr_t* mtr); /*!< in: mtr */ + +/**************************************************************** +Perform cleanup needed for a page not needing scrubbing */ +void +btr_scrub_skip_page( +/*============*/ + btr_scrub_t* scrub_data, /*!< in/out: scrub data */ + int needs_scrubbing); /*!< in: return value from + btr_page_needs_scrubbing or + btr_scrub_recheck_page which encodes what kind + of cleanup is needed */ + +/**************************************************************** +Start iterating a space +* @return true if scrubbing is turned on */ +bool +btr_scrub_start_space( +/*===================*/ + ulint space, + btr_scrub_t* scrub_data, + bool compressed); + +/** Complete iterating a space. +@param[in,out] scrub_data scrub data */ +void +btr_scrub_complete_space(btr_scrub_t* scrub_data); + +#endif diff --git a/storage/innobase/include/dict0dict.h b/storage/innobase/include/dict0dict.h index cc7d384ac36f..70f9df12fe37 100644 --- a/storage/innobase/include/dict0dict.h +++ b/storage/innobase/include/dict0dict.h @@ -118,6 +118,13 @@ dict_table_open_on_id( ibool dict_locked, /*!< in: TRUE=data dictionary locked */ dict_table_op_t table_op) /*!< in: operation to perform */ MY_ATTRIBUTE((warn_unused_result)); + +dict_table_t* +dict_table_open_on_index_id( +/*==================*/ + table_id_t table_id, /*!< in: table id */ + bool dict_locked) /*!< in: TRUE=data dictionary locked */ + __attribute__((warn_unused_result)); /********************************************************************//** Decrements the count of open handles to a table. */ void diff --git a/storage/innobase/include/dict0mem.h b/storage/innobase/include/dict0mem.h index c8f020dd5b94..0ac2412dcb56 100644 --- a/storage/innobase/include/dict0mem.h +++ b/storage/innobase/include/dict0mem.h @@ -1640,6 +1640,13 @@ struct dict_table_t { proceeding. */ #define BG_STAT_IN_PROGRESS (1 << 0) + #define BG_SCRUB_IN_PROGRESS ((byte)(1 << 2)) + /*!< BG_SCRUB_IN_PROGRESS is set in + stats_bg_flag when the background + scrub code is working on this table. The DROP + TABLE code waits for this to be cleared + before proceeding. */ + /** Set in 'stats_bg_flag' when DROP TABLE starts waiting on BG_STAT_IN_PROGRESS to be cleared. The background stats thread will detect this and will eventually quit sooner. */ diff --git a/storage/innobase/include/log0log.h b/storage/innobase/include/log0log.h index de5aa65fb5c2..1b1eda29ad22 100644 --- a/storage/innobase/include/log0log.h +++ b/storage/innobase/include/log0log.h @@ -823,6 +823,14 @@ struct log_t{ mutex_exit(&log_sys->write_mutex); \ } while (0) +/* log scrubbing speed, in bytes/sec */ +extern ulonglong innodb_scrub_log_speed; + +/** Event to wake up log_scrub_thread */ +extern os_event_t log_scrub_event; +/** Whether log_scrub_thread is active */ +extern bool log_scrub_thread_active; + /** Calculate the offset of an lsn within a log group. @param[in] lsn log sequence number @param[in] group log group diff --git a/storage/innobase/include/page0page.h b/storage/innobase/include/page0page.h index 2ef6291171a3..fe43905eaa6e 100644 --- a/storage/innobase/include/page0page.h +++ b/storage/innobase/include/page0page.h @@ -143,6 +143,8 @@ typedef byte page_header_t; ============== */ +extern my_bool srv_immediate_scrub_data_uncompressed; + typedef byte page_dir_slot_t; typedef page_dir_slot_t page_dir_t; diff --git a/storage/innobase/include/srv0srv.h b/storage/innobase/include/srv0srv.h index a9b88178954d..58ed929a9323 100644 --- a/storage/innobase/include/srv0srv.h +++ b/storage/innobase/include/srv0srv.h @@ -166,6 +166,9 @@ struct srv_stats_t { /** Number of spaces in keyrotation list */ ulint_ctr_64_t key_rotation_list_length; + /** Number of log scrub operations */ + ulint_ctr_64_t n_log_scrubs; + /* Number of pages encrypted */ ulint_ctr_64_t pages_encrypted; /* Number of pages decrypted */ @@ -528,6 +531,9 @@ extern bool srv_buf_resize_thread_active; /* TRUE during the lifetime of the stats thread */ extern ibool srv_dict_stats_thread_active; +/* TRUE if enable log scrubbing */ +extern my_bool srv_scrub_log; + extern ulong srv_n_spin_wait_rounds; extern ulong srv_n_free_tickets_to_enter; extern ulong srv_thread_sleep_delay; @@ -1178,6 +1184,13 @@ struct export_var_t{ int64_t innodb_encryption_key_requests; int64_t innodb_key_rotation_list_length; + ulint innodb_scrub_page_reorganizations; + ulint innodb_scrub_page_splits; + ulint innodb_scrub_page_split_failures_underflow; + ulint innodb_scrub_page_split_failures_out_of_filespace; + ulint innodb_scrub_page_split_failures_missing_index; + ulint innodb_scrub_page_split_failures_unknown; + int64_t innodb_scrub_log; }; /** Thread slot in the thread table. */ diff --git a/storage/innobase/include/sync0types.h b/storage/innobase/include/sync0types.h index 363f4861d256..c8f2e7a4bf01 100644 --- a/storage/innobase/include/sync0types.h +++ b/storage/innobase/include/sync0types.h @@ -396,6 +396,7 @@ enum latch_id_t { LATCH_ID_HASH_TABLE_RW_LOCK, LATCH_ID_BUF_CHUNK_MAP_LATCH, LATCH_ID_SYNC_DEBUG_MUTEX, + LATCH_ID_SCRUB_STAT_MUTEX, LATCH_ID_MASTER_KEY_ID_MUTEX, LATCH_ID_FIL_CRYPT_MUTEX, LATCH_ID_FIL_CRYPT_STAT_MUTEX, diff --git a/storage/innobase/log/log0log.cc b/storage/innobase/log/log0log.cc index 801b33bd4a85..0f2f28ec5e71 100644 --- a/storage/innobase/log/log0log.cc +++ b/storage/innobase/log/log0log.cc @@ -95,6 +95,10 @@ my_bool innodb_log_checksums; /** Pointer to the log checksum calculation function */ log_checksum_func_t log_checksum_algorithm_ptr; +/* Next log block number to do dummy record filling if no log records written +for a while */ +static ulint next_lbn_to_pad = 0; + /* These control how often we print warnings if the last checkpoint is too old */ bool log_has_printed_chkp_warning = false; @@ -126,6 +130,16 @@ the previous */ #define LOG_UNLOCK_NONE_FLUSHED_LOCK 1 #define LOG_UNLOCK_FLUSH_LOCK 2 +/** Event to wake up log_scrub_thread */ +os_event_t log_scrub_event; +/** Whether log_scrub_thread is active */ +bool log_scrub_thread_active; + +extern "C" +os_thread_ret_t +DECLARE_THREAD(log_scrub_thread)(void*); + + /******************************************************//** Completes a checkpoint write i/o to a log file. */ static @@ -920,6 +934,12 @@ log_init(void) MONITOR_SET(MONITOR_LSN_CHECKPOINT_AGE, log_sys->lsn - log_sys->last_checkpoint_lsn); + + log_scrub_thread_active= !srv_read_only_mode && srv_scrub_log; + if (log_scrub_thread_active) { + log_scrub_event= os_event_create("log_scrub_event"); + os_thread_create(log_scrub_thread, NULL, NULL); + } } /******************************************************************//** @@ -2296,7 +2316,7 @@ logs_empty_and_mark_files_at_shutdown(void) const ulint n_flush = log_sys->n_pending_flushes; log_mutex_exit(); - if (n_write != 0 || n_flush != 0) { + if (log_scrub_thread_active || n_write != 0 || n_flush != 0) { if (srv_print_verbose_log && count > 600) { ib::info() << "Pending checkpoint_writes: " << n_write << ". Pending log flush writes: " << n_flush; @@ -2307,6 +2327,13 @@ logs_empty_and_mark_files_at_shutdown(void) pending_io = buf_pool_check_no_pending_io(); + if (log_scrub_thread_active) { + ut_ad(!srv_read_only_mode); + os_event_set(log_scrub_event); + } + + ut_ad(!log_scrub_thread_active); + if (pending_io) { if (srv_print_verbose_log && count > 600) { ib::info() << "Waiting for " << pending_io << " buffer" @@ -2630,6 +2657,10 @@ log_shutdown(void) mutex_free(&log_sys->write_mutex); mutex_free(&log_sys->log_flush_order_mutex); + if (!srv_read_only_mode && srv_scrub_log) { + os_event_destroy(log_scrub_event); + } + recv_sys_close(); } @@ -2646,4 +2677,91 @@ log_mem_free(void) log_sys = NULL; } } + +static +void +log_pad_current_log_block(void) +/*===========================*/ +{ + + ut_ad(!recv_no_log_write); + lsn_t lsn = log_reserve_and_open(OS_FILE_LOG_BLOCK_SIZE); + + ulint pad_length = OS_FILE_LOG_BLOCK_SIZE + - log_sys->buf_free % OS_FILE_LOG_BLOCK_SIZE + - LOG_BLOCK_TRL_SIZE; + if (pad_length == (OS_FILE_LOG_BLOCK_SIZE - LOG_BLOCK_HDR_SIZE + - LOG_BLOCK_TRL_SIZE)) { + pad_length = 0; + } + + if (pad_length) { + srv_stats.n_log_scrubs.inc(); + } + + for (ulint i = 0; i < pad_length; i++) { + byte b = MLOG_DUMMY_RECORD; + log_write_low(&b, 1); + } + + lsn = log_sys->lsn; + + log_close(); + + ut_a(lsn % OS_FILE_LOG_BLOCK_SIZE == LOG_BLOCK_HDR_SIZE); +} + +/*****************************************************************//* +If no log record has been written for a while, fill current log +block with dummy records. */ +static +void +log_scrub() +/*=========*/ +{ + log_mutex_enter(); + ulint cur_lbn = log_block_convert_lsn_to_no(log_sys->lsn); + + if (next_lbn_to_pad == cur_lbn) + { + log_pad_current_log_block(); + } + + next_lbn_to_pad = log_block_convert_lsn_to_no(log_sys->lsn); + log_mutex_exit(); +} + +/* log scrubbing speed, in bytes/sec */ +ulonglong innodb_scrub_log_speed; + +/*****************************************************************//** +This is the main thread for log scrub. It waits for an event and +when waked up fills current log block with dummy records and +sleeps again. +@return this function does not return, it calls os_thread_exit() */ +extern "C" +os_thread_ret_t +DECLARE_THREAD(log_scrub_thread)(void*) +{ + ut_ad(!srv_read_only_mode); + + while (srv_shutdown_state < SRV_SHUTDOWN_FLUSH_PHASE) { + /* log scrubbing interval in µs. */ + ulonglong interval = 1000*1000*512/innodb_scrub_log_speed; + + os_event_wait_time(log_scrub_event, static_cast(interval)); + + log_scrub(); + + os_event_reset(log_scrub_event); + } + + log_scrub_thread_active = false; + + /* We count the number of threads in os_thread_exit(). A created + thread should always use that to exit and not use return() to exit. */ + os_thread_exit(); + + OS_THREAD_DUMMY_RETURN; +} #endif /* !UNIV_HOTBACKUP */ diff --git a/storage/innobase/page/page0page.cc b/storage/innobase/page/page0page.cc index 19c5d88125dd..6b1b49a3f908 100644 --- a/storage/innobase/page/page0page.cc +++ b/storage/innobase/page/page0page.cc @@ -1099,7 +1099,9 @@ page_delete_rec_list_end( last_rec = page_rec_get_prev(page_get_supremum_rec(page)); - if ((size == ULINT_UNDEFINED) || (n_recs == ULINT_UNDEFINED)) { + const bool scrub = srv_immediate_scrub_data_uncompressed; + + if (scrub || (size == ULINT_UNDEFINED) || (n_recs == ULINT_UNDEFINED)) { rec_t* rec2 = rec; /* Calculate the sum of sizes and the number of records */ size = 0; @@ -1116,6 +1118,11 @@ page_delete_rec_list_end( size += s; n_recs++; + if (scrub) { + /* scrub record */ + memset(rec2, 0, rec_offs_data_size(offsets)); + } + rec2 = page_rec_get_next(rec2); } while (!page_rec_is_supremum(rec2)); diff --git a/storage/innobase/row/row0umod.cc b/storage/innobase/row/row0umod.cc index 2c5d30375b38..c09988451fc5 100644 --- a/storage/innobase/row/row0umod.cc +++ b/storage/innobase/row/row0umod.cc @@ -346,7 +346,15 @@ row_undo_mod_clust( } } - ut_ad(rec_get_trx_id(btr_pcur_get_rec(pcur), index) + /** + * when scrubbing, and records gets cleared, + * the transaction id is not present afterwards. + * this is safe as: since the record is on free-list + * it can be reallocated at any time after this mtr-commits + * which is just below + */ + ut_ad(srv_immediate_scrub_data_uncompressed + || rec_get_trx_id(btr_pcur_get_rec(pcur), index) == node->new_trx_id); btr_pcur_commit_specify_mtr(pcur, &mtr); diff --git a/storage/innobase/srv/srv0srv.cc b/storage/innobase/srv/srv0srv.cc index 574a94f9ad36..212a474c3984 100644 --- a/storage/innobase/srv/srv0srv.cc +++ b/storage/innobase/srv/srv0srv.cc @@ -50,6 +50,7 @@ Created 10/8/1995 Heikki Tuuri #include "btr0sea.h" #include "buf0flu.h" #include "buf0lru.h" +#include "btr0scrub.h" #include "dict0boot.h" #include "dict0load.h" #include "dict0stats_bg.h" @@ -101,6 +102,8 @@ bool srv_buf_resize_thread_active = false; ibool srv_dict_stats_thread_active = FALSE; +my_bool srv_scrub_log; + const char* srv_main_thread_op_info = ""; /** Prefix used by MySQL to indicate pre-5.1 table name encoding */ @@ -1586,6 +1589,7 @@ srv_export_innodb_status(void) ulint free_len; ulint flush_list_len; fil_crypt_stat_t crypt_stat; + btr_scrub_stat_t scrub_stat; ulint mem_adaptive_hash, mem_dictionary; ReadView* oldest_view; ulint i; @@ -1595,6 +1599,7 @@ srv_export_innodb_status(void) buf_get_total_list_size_in_bytes(&buf_pools_list_size); if (!srv_read_only_mode) { fil_crypt_total_stat(&crypt_stat); + btr_scrub_total_stat(&scrub_stat); } os_rmb; @@ -1857,7 +1862,22 @@ srv_export_innodb_status(void) srv_stats.n_key_requests; export_vars.innodb_key_rotation_list_length = srv_stats.key_rotation_list_length; - } + + export_vars.innodb_scrub_page_reorganizations = + scrub_stat.page_reorganizations; + export_vars.innodb_scrub_page_splits = + scrub_stat.page_splits; + export_vars.innodb_scrub_page_split_failures_underflow = + scrub_stat.page_split_failures_underflow; + export_vars.innodb_scrub_page_split_failures_out_of_filespace = + scrub_stat.page_split_failures_out_of_filespace; + export_vars.innodb_scrub_page_split_failures_missing_index = + scrub_stat.page_split_failures_missing_index; + export_vars.innodb_scrub_page_split_failures_unknown = + scrub_stat.page_split_failures_unknown; + export_vars.innodb_scrub_log = srv_stats.n_log_scrubs; + + } mutex_exit(&srv_innodb_monitor_mutex); } diff --git a/storage/innobase/sync/sync0debug.cc b/storage/innobase/sync/sync0debug.cc index 72694bfe70c0..f67eaf092867 100644 --- a/storage/innobase/sync/sync0debug.cc +++ b/storage/innobase/sync/sync0debug.cc @@ -1587,6 +1587,10 @@ sync_latch_meta_init() LATCH_ADD_RWLOCK(SYNC_DEBUG_MUTEX, SYNC_NO_ORDER_CHECK, PFS_NOT_INSTRUMENTED); + LATCH_ADD_MUTEX(SCRUB_STAT_MUTEX, SYNC_NO_ORDER_CHECK, + PFS_NOT_INSTRUMENTED); + + LATCH_ADD_MUTEX(MASTER_KEY_ID_MUTEX, SYNC_NO_ORDER_CHECK, master_key_id_mutex_key); From 80fedfbc1e57f881bd4718d83416c6406f8ed635 Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Wed, 31 Oct 2018 08:58:34 +0100 Subject: [PATCH 1179/1221] PS-3829: Post push encryption test disabled as it is unstable on Jenkins --- mysql-test/suite/encryption/t/innodb_alters.test | 1 + 1 file changed, 1 insertion(+) diff --git a/mysql-test/suite/encryption/t/innodb_alters.test b/mysql-test/suite/encryption/t/innodb_alters.test index c2704d11efe0..670cec8783db 100644 --- a/mysql-test/suite/encryption/t/innodb_alters.test +++ b/mysql-test/suite/encryption/t/innodb_alters.test @@ -1,3 +1,4 @@ +--skip # test disabled as it is unstable on Jenkins -- source include/have_innodb.inc # embedded does not support restart -- source include/not_embedded.inc From 175d233efd732b584c39ea832e157c5dfa4bf138 Mon Sep 17 00:00:00 2001 From: Evgeniy Patlan Date: Wed, 31 Oct 2018 11:24:47 +0200 Subject: [PATCH 1180/1221] Update version --- VERSION | 2 +- storage/innobase/include/univ.i | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/VERSION b/VERSION index 17ae0dd9d050..4dd2cfafc861 100644 --- a/VERSION +++ b/VERSION @@ -1,4 +1,4 @@ MYSQL_VERSION_MAJOR=5 MYSQL_VERSION_MINOR=7 MYSQL_VERSION_PATCH=23 -MYSQL_VERSION_EXTRA=-23 +MYSQL_VERSION_EXTRA=-24 diff --git a/storage/innobase/include/univ.i b/storage/innobase/include/univ.i index ad55a502d301..cd8fbfa10530 100644 --- a/storage/innobase/include/univ.i +++ b/storage/innobase/include/univ.i @@ -47,7 +47,7 @@ Created 1/20/1994 Heikki Tuuri #define INNODB_VERSION_BUGFIX MYSQL_VERSION_PATCH #ifndef PERCONA_INNODB_VERSION -#define PERCONA_INNODB_VERSION 23 +#define PERCONA_INNODB_VERSION 24 #endif /* The following is the InnoDB version as shown in From 80bbc70e42d4616ebed4f13248ad77681e584ddf Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Wed, 31 Oct 2018 10:53:52 +0100 Subject: [PATCH 1181/1221] PS-4976: use correct log level when logging undo encryption startup --- storage/innobase/srv/srv0srv.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/storage/innobase/srv/srv0srv.cc b/storage/innobase/srv/srv0srv.cc index c20fed1370c8..4fd251b59e4f 100644 --- a/storage/innobase/srv/srv0srv.cc +++ b/storage/innobase/srv/srv0srv.cc @@ -3613,7 +3613,7 @@ function: */ mtr_commit(&mtr); return; } else { - ib::error() << "Encryption is enabled" + ib::info() << "Encryption is enabled" " for undo tablespace number " << space_id << "."; #ifdef UNIV_ENCRYPT_DEBUG @@ -3661,7 +3661,7 @@ function: */ " tablespace number " << space_id << "."; } else { - ib::error() << "Encryption is enabled" + ib::info() << "Encryption is enabled" " for undo tablespace number " << space_id << "."; } From f11fc4304f3f7b14086d99e85ebed26fac68111b Mon Sep 17 00:00:00 2001 From: Przemek Skibinski Date: Thu, 1 Nov 2018 14:12:39 +0100 Subject: [PATCH 1182/1221] PS-4825: Backport MTR fixes from 8.0 1. Add `DROP TABLESPACE ts_valid2;` in suite/innodb/t/general_ts_encrypt.test 2. Add `drop tablespace ts_unencrypted1;` in suite/innodb/t/percona_force_encryption.test --- mysql-test/suite/innodb/r/general_ts_encrypt.result | 1 + mysql-test/suite/innodb/r/percona_force_encryption.result | 1 + mysql-test/suite/innodb/t/general_ts_encrypt.test | 1 + mysql-test/suite/innodb/t/percona_force_encryption.test | 1 + 4 files changed, 4 insertions(+) diff --git a/mysql-test/suite/innodb/r/general_ts_encrypt.result b/mysql-test/suite/innodb/r/general_ts_encrypt.result index 8a1db23baf97..7050830d2cf2 100644 --- a/mysql-test/suite/innodb/r/general_ts_encrypt.result +++ b/mysql-test/suite/innodb/r/general_ts_encrypt.result @@ -159,3 +159,4 @@ DROP TABLESPACE ts_encrypted; DROP TABLESPACE ts_encrypted_new; DROP TABLESPACE ts_unencrypted; DROP TABLESPACE ts_unencrypted_new; +DROP TABLESPACE ts_valid2; diff --git a/mysql-test/suite/innodb/r/percona_force_encryption.result b/mysql-test/suite/innodb/r/percona_force_encryption.result index 7200fe8b4e17..25cfc8ec3042 100644 --- a/mysql-test/suite/innodb/r/percona_force_encryption.result +++ b/mysql-test/suite/innodb/r/percona_force_encryption.result @@ -234,4 +234,5 @@ drop table t5_off_explicit_off_dup; drop table t7_partitioned; drop tablespace ts_encrypted1; drop tablespace ts_encrypted2; +drop tablespace ts_unencrypted1; set global innodb_encrypt_tables=OFF; diff --git a/mysql-test/suite/innodb/t/general_ts_encrypt.test b/mysql-test/suite/innodb/t/general_ts_encrypt.test index 191f668a1492..8f55930cc2c6 100644 --- a/mysql-test/suite/innodb/t/general_ts_encrypt.test +++ b/mysql-test/suite/innodb/t/general_ts_encrypt.test @@ -262,3 +262,4 @@ DROP TABLESPACE ts_encrypted; DROP TABLESPACE ts_encrypted_new; DROP TABLESPACE ts_unencrypted; DROP TABLESPACE ts_unencrypted_new; +DROP TABLESPACE ts_valid2; diff --git a/mysql-test/suite/innodb/t/percona_force_encryption.test b/mysql-test/suite/innodb/t/percona_force_encryption.test index 026076886dab..4fbc6dc112b4 100644 --- a/mysql-test/suite/innodb/t/percona_force_encryption.test +++ b/mysql-test/suite/innodb/t/percona_force_encryption.test @@ -132,6 +132,7 @@ drop table t7_partitioned; drop tablespace ts_encrypted1; drop tablespace ts_encrypted2; +drop tablespace ts_unencrypted1; eval set global innodb_encrypt_tables=$initial_encrypt_tables_value; From 60a3780385792e93ceafe917e3b3e0b351847b2b Mon Sep 17 00:00:00 2001 From: Przemek Skibinski Date: Thu, 1 Nov 2018 14:43:33 +0100 Subject: [PATCH 1183/1221] PS-4836: Missing PFS signed variable aggregation Add missing SHOW_SIGNED_INT and SHOW_SIGNED_LONGLONG to switch() in PFS_status_variable_cache::can_aggregate --- storage/perfschema/pfs_variable.cc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/storage/perfschema/pfs_variable.cc b/storage/perfschema/pfs_variable.cc index 42180717db62..c8795ec7d40f 100644 --- a/storage/perfschema/pfs_variable.cc +++ b/storage/perfschema/pfs_variable.cc @@ -740,7 +740,9 @@ bool PFS_status_variable_cache::can_aggregate(enum_mysql_show_type variable_type case SHOW_DOUBLE_STATUS: case SHOW_HA_ROWS: case SHOW_LONG_NOFLUSH: + case SHOW_SIGNED_INT: case SHOW_SIGNED_LONG: + case SHOW_SIGNED_LONGLONG: default: return false; break; From 736b69c060a47c434269095ef47ba86d679656c4 Mon Sep 17 00:00:00 2001 From: Przemek Skibinski Date: Thu, 1 Nov 2018 15:02:50 +0100 Subject: [PATCH 1184/1221] PS-4908: UBSan and valgrind errors with encrypted temporary files Fix the following issues: 1. UBSan reports error in my_b_encr_read(IO_CACHE *info, uchar *Buffer, size_t Count) when Count==0 and Buffer==NULL 2. valgrind reports error: usage of crypt_data->block_length before initialization in my_b_encr_write() Fixed also in 8.0 at https://github.com/percona/percona-server/pull/2584 --- sql/mf_iocache_encr.cc | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/sql/mf_iocache_encr.cc b/sql/mf_iocache_encr.cc index 419a48343ef3..e3511f776a0f 100644 --- a/sql/mf_iocache_encr.cc +++ b/sql/mf_iocache_encr.cc @@ -157,9 +157,12 @@ static int my_b_encr_read(IO_CACHE *info, uchar *Buffer, size_t Count) copied= MY_MIN(Count, length - pos_offset); - memcpy(Buffer, info->buffer + pos_offset, copied); - Count-= copied; - Buffer+= copied; + if (copied) { + DBUG_ASSERT(Buffer != NULL); + memcpy(Buffer, info->buffer + pos_offset, copied); + Count-= copied; + Buffer+= copied; + } info->read_pos= info->buffer + pos_offset + copied; info->read_end= info->buffer + length; @@ -192,6 +195,10 @@ static int my_b_encr_write(IO_CACHE *info, const uchar *Buffer, size_t Count) DBUG_RETURN(0); } +#ifndef DBUG_OFF + if (info->pos_in_file == 0) crypt_data->block_length= 0; +#endif + if (info->seek_not_done) { DBUG_ASSERT(info->pos_in_file % info->buffer_length == 0); @@ -216,10 +223,6 @@ static int my_b_encr_write(IO_CACHE *info, const uchar *Buffer, size_t Count) DBUG_RETURN(1); } crypt_data->counter= 0; - -#ifndef DBUG_OFF - crypt_data->block_length= 0; -#endif } do From 05d5283c179a3a3d1628f301a0352b703a449f84 Mon Sep 17 00:00:00 2001 From: Przemek Skibinski Date: Thu, 1 Nov 2018 15:41:39 +0100 Subject: [PATCH 1185/1221] PS-4955: Backport mysqld fixes for valgrind warnings from 8.0 Fix valgrind warnings in `Log_event::wrapper_my_b_safe_write` when running rpl.rpl_bug72457_* Fixed also in 8.0 at https://github.com/percona/percona-server/pull/2604 --- sql/log_event.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/sql/log_event.cc b/sql/log_event.cc index 3f1b7b3431a9..e6150f18aa9c 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -1009,6 +1009,7 @@ bool Log_event::wrapper_my_b_safe_write(IO_CACHE* file, const uchar* buf, size_t { DBUG_EXECUTE_IF("simulate_temp_file_write_error", { + memset(file->write_pos, 0, file->write_end - file->write_pos); file->write_pos=file->write_end; DBUG_SET("+d,simulate_file_write_error"); }); From a7595ff927a1f52201485c13e3edbe9e65005b1f Mon Sep 17 00:00:00 2001 From: Zsolt Parragi Date: Fri, 2 Nov 2018 12:30:23 +0100 Subject: [PATCH 1186/1221] PS-4556: Fix typo reported by clang --- storage/innobase/log/log0log.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage/innobase/log/log0log.cc b/storage/innobase/log/log0log.cc index a8e52df63215..ba25a6226f8a 100644 --- a/storage/innobase/log/log0log.cc +++ b/storage/innobase/log/log0log.cc @@ -1149,7 +1149,7 @@ log_read_encryption() size_t klen; if (my_key_fetch(percona_redo_with_ver_ss.str().c_str(), &key_type, NULL, reinterpret_cast(&rkey), &klen) || - key == NULL) + rkey == NULL) { ib::error() << "Couldn't fetch redo log encryption key: " << percona_redo_with_ver_ss.str() << "."; } else if(key_type == NULL || strncmp(key_type, "AES", 3) != 0) { From d8426b744473952ce1f88f10d97de01632e3b559 Mon Sep 17 00:00:00 2001 From: Przemek Skibinski Date: Fri, 2 Nov 2018 16:24:16 +0100 Subject: [PATCH 1187/1221] PS-4790: Improve user statistics accuracy Currently userstat measures times for mysql_parse, mysqld_stmt_reset, mysqld_stmt_fetch, mysqld_stmt_prepare, mysqld_stmt_execute. MariaDB measures times only for `mysql_parse` and `dispatch_command` which call above functions. Moreover MariaDB adds measurements for COM_INIT_DB, COM_REGISTER_SLAVE, COM_RESET_CONNECTION, and other in `dispatch_command`. It makes measurements of BUSY_TIME and CPU_TIME more accurate. This patch implements a similar solution that measures times only for `dispatch_command` and `mysql_parse` using newly created `sql/userstat.cc` and `sql/userstat.h`. --- libmysqld/CMakeLists.txt | 3 +- mysql-test/r/percona_userstat.result | 8 +- sql/CMakeLists.txt | 2 +- sql/log_event.cc | 3 +- sql/sql_parse.cc | 110 +++------ sql/sql_parse.h | 2 +- sql/sql_prepare.cc | 320 --------------------------- sql/userstat.cc | 98 ++++++++ sql/userstat.h | 25 +++ 9 files changed, 167 insertions(+), 404 deletions(-) create mode 100644 sql/userstat.cc create mode 100644 sql/userstat.h diff --git a/libmysqld/CMakeLists.txt b/libmysqld/CMakeLists.txt index fd7b2552c34c..36314df0cb46 100644 --- a/libmysqld/CMakeLists.txt +++ b/libmysqld/CMakeLists.txt @@ -79,7 +79,8 @@ SET(SQL_EMBEDDED_SOURCES emb_qcache.cc libmysqld.c lib_sql.cc ../sql/sql_trigger.cc ../sql/sql_udf.cc ../sql/sql_union.cc ../sql/sql_update.cc ../sql/sql_view.cc ../sql/sql_profile.cc ../sql/strfunc.cc ../sql/table.cc ../sql/thr_malloc.cc - ../sql/sql_time.cc ../sql/tztime.cc ../sql/uniques.cc ../sql/unireg.cc + ../sql/sql_time.cc ../sql/tztime.cc ../sql/userstat.cc + ../sql/uniques.cc ../sql/unireg.cc ../sql/partition_info.cc ../sql/sql_connect.cc ../sql/scheduler.cc ../sql/sql_audit.cc ../sql/sql_alter.cc ../sql/sql_partition_admin.cc diff --git a/mysql-test/r/percona_userstat.result b/mysql-test/r/percona_userstat.result index 660e55fce058..3bba1bcf1338 100644 --- a/mysql-test/r/percona_userstat.result +++ b/mysql-test/r/percona_userstat.result @@ -41,7 +41,7 @@ SET @thread_statistics_old= @@thread_statistics; SET GLOBAL thread_statistics=ON; SELECT * FROM INFORMATION_SCHEMA.CLIENT_STATISTICS; CLIENT TOTAL_CONNECTIONS CONCURRENT_CONNECTIONS CONNECTED_TIME BUSY_TIME CPU_TIME BYTES_RECEIVED BYTES_SENT BINLOG_BYTES_WRITTEN ROWS_FETCHED ROWS_UPDATED TABLE_ROWS_READ SELECT_COMMANDS UPDATE_COMMANDS OTHER_COMMANDS COMMIT_TRANSACTIONS ROLLBACK_TRANSACTIONS DENIED_CONNECTIONS LOST_CONNECTIONS ACCESS_DENIED EMPTY_QUERIES TOTAL_SSL_CONNECTIONS -localhost 1 CONNECTED_TIME BUSY_TIME CPU_TIME 0 88 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 +localhost 1 CONNECTED_TIME BUSY_TIME CPU_TIME 0 36 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 SELECT * FROM INFORMATION_SCHEMA.INDEX_STATISTICS; TABLE_SCHEMA TABLE_NAME INDEX_NAME ROWS_READ SELECT * FROM INFORMATION_SCHEMA.TABLE_STATISTICS; @@ -51,10 +51,10 @@ THREAD_ID TOTAL_CONNECTIONS CONCURRENT_CONNECTIONS CONNECTED_TIME BUSY_TIME CPU_ THREAD_ID 1 0 CONNECTED_TIME BUSY_TIME CPU_TIME 163 0 0 1 0 0 3 0 0 0 0 0 0 0 2 0 SELECT * FROM INFORMATION_SCHEMA.USER_STATISTICS; USER TOTAL_CONNECTIONS CONCURRENT_CONNECTIONS CONNECTED_TIME BUSY_TIME CPU_TIME BYTES_RECEIVED BYTES_SENT BINLOG_BYTES_WRITTEN ROWS_FETCHED ROWS_UPDATED TABLE_ROWS_READ SELECT_COMMANDS UPDATE_COMMANDS OTHER_COMMANDS COMMIT_TRANSACTIONS ROLLBACK_TRANSACTIONS DENIED_CONNECTIONS LOST_CONNECTIONS ACCESS_DENIED EMPTY_QUERIES TOTAL_SSL_CONNECTIONS -root 1 CONNECTED_TIME BUSY_TIME CPU_TIME 0 306 0 0 2 0 0 4 0 2 0 0 0 0 0 2 0 +root 1 CONNECTED_TIME BUSY_TIME CPU_TIME 0 254 0 0 2 0 0 4 0 1 0 0 0 0 0 2 0 SHOW CLIENT_STATISTICS; Client Total_connections Concurrent_connections Connected_time Busy_time Cpu_time Bytes_received Bytes_sent Binlog_bytes_written Rows_fetched Rows_updated Table_rows_read Select_commands Update_commands Other_commands Commit_transactions Rollback_transactions Denied_connections Lost_connections Access_denied Empty_queries Total_ssl_connections -localhost 1 CONNECTED_TIME BUSY_TIME CPU_TIME 0 359 0 0 3 0 0 5 0 2 0 0 0 0 0 2 0 +localhost 1 CONNECTED_TIME BUSY_TIME CPU_TIME 0 307 0 0 3 0 0 5 0 1 0 0 0 0 0 2 0 SHOW INDEX_STATISTICS; Table_schema Table_name Index_name Rows_read SHOW TABLE_STATISTICS; @@ -64,7 +64,7 @@ Thread_id Total_connections Concurrent_connections Connected_time Busy_time Cpu_ THREAD_ID 1 CONNECTED_TIME BUSY_TIME CPU_TIME 0 350 0 0 4 0 0 8 0 0 0 0 0 0 0 4 0 SHOW USER_STATISTICS; User Total_connections Concurrent_connections Connected_time Busy_time Cpu_time Bytes_received Bytes_sent Binlog_bytes_written Rows_fetched Rows_updated Table_rows_read Select_commands Update_commands Other_commands Commit_transactions Rollback_transactions Denied_connections Lost_connections Access_denied Empty_queries Total_ssl_connections -root 1 CONNECTED_TIME BUSY_TIME CPU_TIME 0 465 0 0 5 0 0 9 0 2 0 0 0 0 0 4 0 +root 1 CONNECTED_TIME BUSY_TIME CPU_TIME 0 413 0 0 5 0 0 9 0 1 0 0 0 0 0 4 0 SET GLOBAL thread_statistics= @thread_statistics_old; CREATE TABLE t1 (id int(10), PRIMARY KEY (id)) ENGINE=InnoDB; INSERT INTO t1 VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10); diff --git a/sql/CMakeLists.txt b/sql/CMakeLists.txt index 33becb58b2a9..23406b79d72a 100644 --- a/sql/CMakeLists.txt +++ b/sql/CMakeLists.txt @@ -68,7 +68,7 @@ SET (SQL_SOURCE sql_repl.cc sql_select.cc sql_show.cc sql_state.c sql_string.cc sql_table.cc sql_test.cc sql_trigger.cc sql_udf.cc sql_union.cc sql_update.cc sql_view.cc strfunc.cc table.cc thr_malloc.cc - sql_time.cc tztime.cc uniques.cc unireg.cc item_xmlfunc.cc + sql_time.cc tztime.cc userstat.cc uniques.cc unireg.cc item_xmlfunc.cc rpl_tblmap.cc sql_binlog.cc event_scheduler.cc event_data_objects.cc event_queue.cc event_db_repository.cc sql_tablespace.cc events.cc ../sql-common/my_user.c diff --git a/sql/log_event.cc b/sql/log_event.cc index 3cada3048fd2..9b822530c34a 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -3572,7 +3572,8 @@ int Query_log_event::do_apply_event(Relay_log_info const *rli, Parser_state parser_state; if (!parser_state.init(thd, thd->query(), thd->query_length())) { - mysql_parse(thd, thd->query(), thd->query_length(), &parser_state); + mysql_parse(thd, thd->query(), thd->query_length(), + &parser_state, true); /* Finalize server status flags after executing a statement. */ thd->update_server_status(); log_slow_statement(thd); diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 3447a0256525..35743c424248 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -98,6 +98,7 @@ #include "debug_sync.h" #include "probes_mysql.h" #include "set_var.h" +#include "userstat.h" #define FLAGSTR(V,F) ((V)&(F)?#F" ":"") @@ -570,7 +571,7 @@ static void handle_bootstrap_impl(THD *thd) break; } - mysql_parse(thd, thd->query(), length, &parser_state); + mysql_parse(thd, thd->query(), length, &parser_state, true); bootstrap_error= thd->is_error(); thd->protocol->end_statement(); @@ -965,6 +966,12 @@ bool dispatch_command(enum enum_server_command command, THD *thd, if (!(server_command_flags[command] & CF_SKIP_QUESTIONS)) statistic_increment(thd->status_var.questions, &LOCK_status); + /* Declare userstat variables and start timer */ + double start_busy_usecs = 0.0; + double start_cpu_nsecs = 0.0; + if (unlikely(opt_userstat)) + userstat_start_timer(&start_busy_usecs, &start_cpu_nsecs); + /** Clear the set of flags that are expected to be cleared at the beginning of each command. @@ -1109,7 +1116,7 @@ bool dispatch_command(enum enum_server_command command, THD *thd, if (parser_state.init(thd, thd->query(), thd->query_length())) break; - mysql_parse(thd, thd->query(), thd->query_length(), &parser_state); + mysql_parse(thd, thd->query(), thd->query_length(), &parser_state, false); while (!thd->killed && (parser_state.m_lip.found_semicolon != NULL) && ! thd->is_error()) @@ -1164,7 +1171,7 @@ bool dispatch_command(enum enum_server_command command, THD *thd, thd->set_time(); /* Reset the query start time. */ parser_state.reset(beginning_of_next_stmt, length); /* TODO: set thd->lex->sql_command to SQLCOM_END here */ - mysql_parse(thd, beginning_of_next_stmt, length, &parser_state); + mysql_parse(thd, beginning_of_next_stmt, length, &parser_state, false); } DBUG_PRINT("info",("query ready")); @@ -1495,6 +1502,18 @@ bool dispatch_command(enum enum_server_command command, THD *thd, (thd->open_tables == NULL || (thd->locked_tables_mode == LTM_LOCK_TABLES))); + /* Update user statistics only if at least one timer was initialized */ + if (unlikely(start_busy_usecs > 0.0 || start_cpu_nsecs > 0.0)) + { + userstat_finish_timer(start_busy_usecs, start_cpu_nsecs, &thd->busy_time, + &thd->cpu_time); + /* Updates THD stats and the global user stats. */ + thd->update_stats(true); +#ifndef EMBEDDED_LIBRARY + update_global_user_stats(thd, true, time(NULL)); +#endif + } + /* Finalize server status flags after executing a command. */ thd->update_server_status(); thd->protocol->end_statement(); @@ -6010,7 +6029,7 @@ void mysql_init_multi_delete(LEX *lex) */ void mysql_parse(THD *thd, char *rawbuf, uint length, - Parser_state *parser_state) + Parser_state *parser_state, bool update_userstat) { int error __attribute__((unused)); DBUG_ENTER("mysql_parse"); @@ -6036,33 +6055,11 @@ void mysql_parse(THD *thd, char *rawbuf, uint length, lex_start(thd); mysql_reset_thd_for_next_command(thd); - int start_time_error= 0; - int end_time_error= 0; - struct timeval start_time, end_time; - double start_usecs= 0; - double end_usecs= 0; - /* cpu time */ - int cputime_error= 0; -#ifdef HAVE_CLOCK_GETTIME - struct timespec tp; -#endif - double start_cpu_nsecs= 0; - double end_cpu_nsecs= 0; - - if (opt_userstat) - { -#ifdef HAVE_CLOCK_GETTIME - /* get start cputime */ - if (!(cputime_error = clock_gettime(CLOCK_THREAD_CPUTIME_ID, &tp))) - start_cpu_nsecs = tp.tv_sec*1000000000.0+tp.tv_nsec; -#endif - - // Gets the start time, in order to measure how long this command takes. - if (!(start_time_error = gettimeofday(&start_time, NULL))) - { - start_usecs = start_time.tv_sec * 1000000.0 + start_time.tv_usec; - } - } + /* Declare userstat variables and start timer */ + double start_busy_usecs = 0.0; + double start_cpu_nsecs = 0.0; + if (unlikely(opt_userstat && update_userstat)) + userstat_start_timer(&start_busy_usecs, &start_cpu_nsecs); if (query_cache_send_result_to_client(thd, rawbuf, length) <= 0) { @@ -6134,52 +6131,13 @@ void mysql_parse(THD *thd, char *rawbuf, uint length, DBUG_ASSERT(thd->change_list.is_empty()); } - if (opt_userstat) - { - // Gets the end time. - if (!(end_time_error= gettimeofday(&end_time, NULL))) - { - end_usecs= end_time.tv_sec * 1000000.0 + end_time.tv_usec; - } - - // Calculates the difference between the end and start times. - if (start_usecs && end_usecs >= start_usecs && !start_time_error && !end_time_error) - { - thd->busy_time= (end_usecs - start_usecs) / 1000000; - // In case there are bad values, 2629743 is the #seconds in a month. - if (thd->busy_time > 2629743) - { - thd->busy_time= 0; - } - } - else - { - // end time went back in time, or gettimeofday() failed. - thd->busy_time= 0; - } - -#ifdef HAVE_CLOCK_GETTIME - /* get end cputime */ - if (!cputime_error && - !(cputime_error = clock_gettime(CLOCK_THREAD_CPUTIME_ID, &tp))) - end_cpu_nsecs = tp.tv_sec*1000000000.0+tp.tv_nsec; -#endif - if (start_cpu_nsecs && !cputime_error) - { - thd->cpu_time = (end_cpu_nsecs - start_cpu_nsecs) / 1000000000; - // In case there are bad values, 2629743 is the #seconds in a month. - if (thd->cpu_time > 2629743) - { - thd->cpu_time = 0; - } - } - else - thd->cpu_time = 0; - } - - // Updates THD stats and the global user stats. - if (unlikely(opt_userstat)) + /* Update user statistics only if at least one timer was initialized */ + if (unlikely(update_userstat && + (start_busy_usecs > 0.0 || start_cpu_nsecs > 0.0))) { + userstat_finish_timer(start_busy_usecs, start_cpu_nsecs, &thd->busy_time, + &thd->cpu_time); + /* Updates THD stats and the global user stats. */ thd->update_stats(true); #ifndef EMBEDDED_LIBRARY update_global_user_stats(thd, true, time(NULL)); diff --git a/sql/sql_parse.h b/sql/sql_parse.h index f7b4d5305439..1245f660c934 100644 --- a/sql/sql_parse.h +++ b/sql/sql_parse.h @@ -87,7 +87,7 @@ bool is_log_table_write_query(enum enum_sql_command command); bool alloc_query(THD *thd, const char *packet, uint packet_length); void mysql_init_select(LEX *lex); void mysql_parse(THD *thd, char *rawbuf, uint length, - Parser_state *parser_state); + Parser_state *parser_state, bool update_userstat); void mysql_reset_thd_for_next_command(THD *thd); bool mysql_new_select(LEX *lex, bool move_down); void create_select_for_variable(const char *var_name); diff --git a/sql/sql_prepare.cc b/sql/sql_prepare.cc index a05f6a041970..8165be007c11 100644 --- a/sql/sql_prepare.cc +++ b/sql/sql_prepare.cc @@ -2188,34 +2188,6 @@ void mysqld_stmt_prepare(THD *thd, const char *packet, uint packet_length) /* First of all clear possible warnings from the previous command */ mysql_reset_thd_for_next_command(thd); - int start_time_error= 0; - int end_time_error= 0; - struct timeval start_time, end_time; - double start_usecs= 0; - double end_usecs= 0; - /* cpu time */ - int cputime_error= 0; -#ifdef HAVE_CLOCK_GETTIME - struct timespec tp; -#endif - double start_cpu_nsecs= 0; - double end_cpu_nsecs= 0; - - if (unlikely(opt_userstat)) - { -#ifdef HAVE_CLOCK_GETTIME - /* get start cputime */ - if (!(cputime_error= clock_gettime(CLOCK_THREAD_CPUTIME_ID, &tp))) - start_cpu_nsecs= tp.tv_sec * 1000000000.0 + tp.tv_nsec; -#endif - - // Gets the start time, in order to measure how long this command takes. - if (!(start_time_error= gettimeofday(&start_time, NULL))) - { - start_usecs= start_time.tv_sec * 1000000.0 + start_time.tv_usec; - } - } - if (! (stmt= new Prepared_statement(thd))) goto end; /* out of memory: error is set in Sql_alloc */ @@ -2241,60 +2213,7 @@ void mysqld_stmt_prepare(THD *thd, const char *packet, uint packet_length) sp_cache_enforce_limit(thd->sp_proc_cache, stored_program_cache_size); sp_cache_enforce_limit(thd->sp_func_cache, stored_program_cache_size); - /* check_prepared_statemnt sends the metadata packet in case of success */ end: - if (unlikely(opt_userstat)) - { - // Gets the end time. - if (!(end_time_error= gettimeofday(&end_time, NULL))) - { - end_usecs= end_time.tv_sec * 1000000.0 + end_time.tv_usec; - } - - // Calculates the difference between the end and start times. - if (start_usecs && end_usecs >= start_usecs && !start_time_error && !end_time_error) - { - thd->busy_time= (end_usecs - start_usecs) / 1000000; - // In case there are bad values, 2629743 is the #seconds in a month. - if (thd->busy_time > 2629743) - { - thd->busy_time= 0; - } - } - else - { - // end time went back in time, or gettimeofday() failed. - thd->busy_time= 0; - } - -#ifdef HAVE_CLOCK_GETTIME - /* get end cputime */ - if (!cputime_error && - !(cputime_error= clock_gettime(CLOCK_THREAD_CPUTIME_ID, &tp))) - end_cpu_nsecs= tp.tv_sec*1000000000.0+tp.tv_nsec; -#endif - if (start_cpu_nsecs && !cputime_error) - { - thd->cpu_time= (end_cpu_nsecs - start_cpu_nsecs) / 1000000000; - // In case there are bad values, 2629743 is the #seconds in a month. - if (thd->cpu_time > 2629743) - { - thd->cpu_time= 0; - } - } - else - thd->cpu_time = 0; - } - - // Updates THD stats and the global user stats. - if (unlikely(opt_userstat)) - { - thd->update_stats(true); -#ifndef EMBEDDED_LIBRARY - update_global_user_stats(thd, true, time(NULL)); -#endif - } - DBUG_VOID_RETURN; } @@ -2647,34 +2566,6 @@ void mysqld_stmt_execute(THD *thd, char *packet_arg, uint packet_length) /* First of all clear possible warnings from the previous command */ mysql_reset_thd_for_next_command(thd); - int start_time_error= 0; - int end_time_error= 0; - struct timeval start_time, end_time; - double start_usecs= 0; - double end_usecs= 0; - /* cpu time */ - int cputime_error= 0; -#ifdef HAVE_CLOCK_GETTIME - struct timespec tp; -#endif - double start_cpu_nsecs= 0; - double end_cpu_nsecs= 0; - - if (opt_userstat) - { -#ifdef HAVE_CLOCK_GETTIME - /* get start cputime */ - if (!(cputime_error = clock_gettime(CLOCK_THREAD_CPUTIME_ID, &tp))) - start_cpu_nsecs = tp.tv_sec*1000000000.0+tp.tv_nsec; -#endif - - // Gets the start time, in order to measure how long this command takes. - if (!(start_time_error = gettimeofday(&start_time, NULL))) - { - start_usecs = start_time.tv_sec * 1000000.0 + start_time.tv_usec; - } - } - if (!(stmt= find_prepared_statement(thd, stmt_id))) { char llbuf[22]; @@ -2702,58 +2593,6 @@ void mysqld_stmt_execute(THD *thd, char *packet_arg, uint packet_length) DBUG_EXECUTE_IF("close_conn_after_stmt_execute", vio_close(thd->net.vio);); end: - if (opt_userstat) - { - // Gets the end time. - if (!(end_time_error= gettimeofday(&end_time, NULL))) - { - end_usecs= end_time.tv_sec * 1000000.0 + end_time.tv_usec; - } - - // Calculates the difference between the end and start times. - if (start_usecs && end_usecs >= start_usecs && !start_time_error && !end_time_error) - { - thd->busy_time= (end_usecs - start_usecs) / 1000000; - // In case there are bad values, 2629743 is the #seconds in a month. - if (thd->busy_time > 2629743) - { - thd->busy_time= 0; - } - } - else - { - // end time went back in time, or gettimeofday() failed. - thd->busy_time= 0; - } - -#ifdef HAVE_CLOCK_GETTIME - /* get end cputime */ - if (!cputime_error && - !(cputime_error= clock_gettime(CLOCK_THREAD_CPUTIME_ID, &tp))) - end_cpu_nsecs= tp.tv_sec*1000000000.0+tp.tv_nsec; -#endif - if (start_cpu_nsecs && !cputime_error) - { - thd->cpu_time= (end_cpu_nsecs - start_cpu_nsecs) / 1000000000; - // In case there are bad values, 2629743 is the #seconds in a month. - if (thd->cpu_time > 2629743) - { - thd->cpu_time= 0; - } - } - else - thd->cpu_time = 0; - } - - // Updates THD stats and the global user stats. - if (unlikely(opt_userstat)) - { - thd->update_stats(true); -#ifndef EMBEDDED_LIBRARY - update_global_user_stats(thd, true, time(NULL)); -#endif - } - DBUG_VOID_RETURN; } @@ -2827,34 +2666,6 @@ void mysqld_stmt_fetch(THD *thd, char *packet, uint packet_length) /* First of all clear possible warnings from the previous command */ mysql_reset_thd_for_next_command(thd); - int start_time_error= 0; - int end_time_error= 0; - struct timeval start_time, end_time; - double start_usecs= 0; - double end_usecs= 0; - /* cpu time */ - int cputime_error= 0; -#ifdef HAVE_CLOCK_GETTIME - struct timespec tp; -#endif - double start_cpu_nsecs= 0; - double end_cpu_nsecs= 0; - - if (opt_userstat) - { -#ifdef HAVE_CLOCK_GETTIME - /* get start cputime */ - if (!(cputime_error= clock_gettime(CLOCK_THREAD_CPUTIME_ID, &tp))) - start_cpu_nsecs= tp.tv_sec*1000000000.0+tp.tv_nsec; -#endif - - // Gets the start time, in order to measure how long this command takes. - if (!(start_time_error= gettimeofday(&start_time, NULL))) - { - start_usecs= start_time.tv_sec * 1000000.0 + start_time.tv_usec; - } - } - status_var_increment(thd->status_var.com_stmt_fetch); if (!(stmt= find_prepared_statement(thd, stmt_id))) { @@ -2886,57 +2697,6 @@ void mysqld_stmt_fetch(THD *thd, char *packet, uint packet_length) thd->stmt_arena= thd; end: - if (opt_userstat) - { - // Gets the end time. - if (!(end_time_error = gettimeofday(&end_time, NULL))) - { - end_usecs = end_time.tv_sec * 1000000.0 + end_time.tv_usec; - } - - // Calculates the difference between the end and start times. - if (start_usecs && end_usecs >= start_usecs && !start_time_error && !end_time_error) - { - thd->busy_time= (end_usecs - start_usecs) / 1000000; - // In case there are bad values, 2629743 is the #seconds in a month. - if (thd->busy_time > 2629743) - { - thd->busy_time= 0; - } - } - else - { - // end time went back in time, or gettimeofday() failed. - thd->busy_time= 0; - } - -#ifdef HAVE_CLOCK_GETTIME - /* get end cputime */ - if (!cputime_error && - !(cputime_error= clock_gettime(CLOCK_THREAD_CPUTIME_ID, &tp))) - end_cpu_nsecs= tp.tv_sec*1000000000.0+tp.tv_nsec; -#endif - if (start_cpu_nsecs && !cputime_error) - { - thd->cpu_time= (end_cpu_nsecs - start_cpu_nsecs) / 1000000000; - // In case there are bad values, 2629743 is the #seconds in a month. - if (thd->cpu_time > 2629743) - { - thd->cpu_time= 0; - } - } else - thd->cpu_time= 0; - } - - // Updates THD stats and the global user stats. - if (unlikely(opt_userstat)) - { - thd->update_stats(true); -#ifndef EMBEDDED_LIBRARY - update_global_user_stats(thd, true, time(NULL)); -#endif - } - DBUG_VOID_RETURN; } @@ -2967,34 +2727,6 @@ void mysqld_stmt_reset(THD *thd, char *packet) /* First of all clear possible warnings from the previous command */ mysql_reset_thd_for_next_command(thd); - int start_time_error= 0; - int end_time_error= 0; - struct timeval start_time, end_time; - double start_usecs= 0; - double end_usecs= 0; - /* cpu time */ - int cputime_error= 0; -#ifdef HAVE_CLOCK_GETTIME - struct timespec tp; -#endif - double start_cpu_nsecs= 0; - double end_cpu_nsecs= 0; - - if (opt_userstat) - { -#ifdef HAVE_CLOCK_GETTIME - /* get start cputime */ - if (!(cputime_error= clock_gettime(CLOCK_THREAD_CPUTIME_ID, &tp))) - start_cpu_nsecs= tp.tv_sec * 1000000000.0+tp.tv_nsec; -#endif - - // Gets the start time, in order to measure how long this command takes. - if (!(start_time_error= gettimeofday(&start_time, NULL))) - { - start_usecs= start_time.tv_sec * 1000000.0 + start_time.tv_usec; - } - } - status_var_increment(thd->status_var.com_stmt_reset); if (!(stmt= find_prepared_statement(thd, stmt_id))) { @@ -3019,58 +2751,6 @@ void mysqld_stmt_reset(THD *thd, char *packet) my_ok(thd); end: - if (opt_userstat) - { - // Gets the end time. - if (!(end_time_error = gettimeofday(&end_time, NULL))) - { - end_usecs = end_time.tv_sec * 1000000.0 + end_time.tv_usec; - } - - // Calculates the difference between the end and start times. - if (start_usecs && end_usecs >= start_usecs && !start_time_error && !end_time_error) - { - thd->busy_time= (end_usecs - start_usecs) / 1000000; - // In case there are bad values, 2629743 is the #seconds in a month. - if (thd->busy_time > 2629743) - { - thd->busy_time= 0; - } - } - else - { - // end time went back in time, or gettimeofday() failed. - thd->busy_time= 0; - } - -#ifdef HAVE_CLOCK_GETTIME - /* get end cputime */ - if (!cputime_error && - !(cputime_error = clock_gettime(CLOCK_THREAD_CPUTIME_ID, &tp))) - end_cpu_nsecs = tp.tv_sec*1000000000.0+tp.tv_nsec; -#endif - if (start_cpu_nsecs && !cputime_error) - { - thd->cpu_time = (end_cpu_nsecs - start_cpu_nsecs) / 1000000000; - // In case there are bad values, 2629743 is the #seconds in a month. - if (thd->cpu_time > 2629743) - { - thd->cpu_time= 0; - } - } - else - thd->cpu_time= 0; - } - - // Updates THD stats and the global user stats. - if (unlikely(opt_userstat)) - { - thd->update_stats(true); -#ifndef EMBEDDED_LIBRARY - update_global_user_stats(thd, true, time(NULL)); -#endif - } - DBUG_VOID_RETURN; } diff --git a/sql/userstat.cc b/sql/userstat.cc new file mode 100644 index 000000000000..8d1cff87502e --- /dev/null +++ b/sql/userstat.cc @@ -0,0 +1,98 @@ +/* Copyright (c) 2018 Percona LLC and/or its affiliates. All rights reserved. + + 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 */ + +#include "my_config.h" + +#include +#ifdef HAVE_SYS_TIME_H +#include +#endif +#include "my_global.h" // unlikely +#include "userstat.h" + +/** + Get start timers for cpu_time and busy_time. + + @return start_busy_usecs Start value of busy_time or 0.0 in case of error + @return start_cpu_nsecs Start value of cpu_time or 0.0 in case of error +*/ +void userstat_start_timer(double *start_busy_usecs, + double *start_cpu_nsecs) +{ + *start_busy_usecs = 0.0; + *start_cpu_nsecs = 0.0; + +#ifdef HAVE_CLOCK_GETTIME + /* Get start cputime */ + struct timespec tp; + if (!clock_gettime(CLOCK_THREAD_CPUTIME_ID, &tp)) + *start_cpu_nsecs = tp.tv_sec * 1000000000.0 + tp.tv_nsec; +#endif + + /* Gets the start time, in order to measure how long this command takes. */ + struct timeval start_time; + if (!gettimeofday(&start_time, NULL)) + *start_busy_usecs = start_time.tv_sec * 1000000.0 + start_time.tv_usec; +} + +/** + Get interval time for cpu_time and busy_time between calls to + userstat_start_timer() and this function. + + @param start_busy_usecs Start value of busy_time or 0.0 in case of error + @param start_cpu_nsecs Start value of cpu_time or 0.0 in case of error + @return busy_sec Interval time for busy_time in seconds or 0.0 in + case of error + @return cpu_sec Interval time for cpu_time in seconds or 0.0 in case + of error +*/ +void userstat_finish_timer(double start_busy_usecs, double start_cpu_nsecs, + double *busy_sec, double *cpu_sec) +{ + *busy_sec = 0.0; + *cpu_sec = 0.0; + + /* Gets the end time. */ + struct timeval end_time; + double end_busy_usecs = 0.0; + if (start_busy_usecs > 0.0 && !gettimeofday(&end_time, NULL)) + end_busy_usecs = end_time.tv_sec * 1000000.0 + end_time.tv_usec; + + /* Calculates the difference between the end and start times. */ + if (end_busy_usecs > start_busy_usecs) { + *busy_sec = (end_busy_usecs - start_busy_usecs) / 1000000.0; + /* In case there are bad values, 2629743 is the #seconds in a month. */ + if (unlikely(*busy_sec > 2629743.0)) { + *busy_sec = 0.0; + } + } + +#ifdef HAVE_CLOCK_GETTIME + /* Get end cputime */ + struct timespec tp; + double end_cpu_nsecs = 0.0; + if (start_cpu_nsecs > 0.0 && !clock_gettime(CLOCK_THREAD_CPUTIME_ID, &tp)) + end_cpu_nsecs = tp.tv_sec * 1000000000.0 + tp.tv_nsec; +#endif + + if (end_cpu_nsecs > start_cpu_nsecs) { + *cpu_sec = (end_cpu_nsecs - start_cpu_nsecs) / 1000000000.0; + /* In case there are bad values, 2629743 is the #seconds in a month. */ + if (unlikely(*cpu_sec > 2629743.0)) { + *cpu_sec = 0.0; + } + } +} diff --git a/sql/userstat.h b/sql/userstat.h new file mode 100644 index 000000000000..4319860cc4ef --- /dev/null +++ b/sql/userstat.h @@ -0,0 +1,25 @@ +/* Copyright (c) 2018 Percona LLC and/or its affiliates. All rights reserved. + + 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 */ + +#ifndef USERSTAT_INCLUDED +#define USERSTAT_INCLUDED + +void userstat_start_timer(double *start_busy_usecs, + double *start_cpu_nsecs); +void userstat_finish_timer(double start_busy_usecs, double start_cpu_nsecs, + double *busy_sec, double *cpu_sec); + +#endif From ea2a17ac7e946348e0cd5f4848485716ebf72482 Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Fri, 2 Nov 2018 11:04:00 -0700 Subject: [PATCH 1188/1221] PS-4943 : Using XA transactions with temporary TokuDB table could lead to a server crash - This actually has nothing to do with either XA or temp tables. It is due to the memory management around the string sysvar tokudb_last_lock_timeout which is not an 'input' variable but is used to relay textual information about the last lock wait timeout to the user. Unfortunately, this is a mis-use/abuse of the MySQL SYAVAR functionality and is incompatible with the expected plugin memory behavior. Changed this option to remove the command line option and made it read-only to prevent further problems. --- storage/tokudb/tokudb_sysvars.cc | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/storage/tokudb/tokudb_sysvars.cc b/storage/tokudb/tokudb_sysvars.cc index e8e9f908275b..d1f58d012ec0 100644 --- a/storage/tokudb/tokudb_sysvars.cc +++ b/storage/tokudb/tokudb_sysvars.cc @@ -662,13 +662,13 @@ static MYSQL_THDVAR_ULONGLONG( ~0ULL, 1); -static MYSQL_THDVAR_STR( - last_lock_timeout, - PLUGIN_VAR_MEMALLOC, - "last lock timeout", - NULL, - NULL, - NULL); +static MYSQL_THDVAR_STR(last_lock_timeout, + PLUGIN_VAR_MEMALLOC | PLUGIN_VAR_NOCMDOPT | + PLUGIN_VAR_READONLY, + "last lock timeout", + NULL, + NULL, + NULL); static MYSQL_THDVAR_BOOL( load_save_space, From e8d060dc51956596359d42831ef9f89010527c24 Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Wed, 7 Nov 2018 10:45:39 +0100 Subject: [PATCH 1189/1221] PS-4951: Many libc-related Valgrind errors on CentOS7 The issue concerns GNU libc version 2.17 when linux hosts doesn't have IPv6 configured. This is because libc points the cache (that is freed on exit) to a static variable if there is no ipv6 address, which later results in freeing an invalid pointer. This patch adds an entry in `valgrind.supp` to solve this issue. --- mysql-test/valgrind.supp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/mysql-test/valgrind.supp b/mysql-test/valgrind.supp index 580dc21f1573..888c194b1283 100644 --- a/mysql-test/valgrind.supp +++ b/mysql-test/valgrind.supp @@ -1787,3 +1787,18 @@ fun:ldap_int_tls_start fun:ldap_start_tls_s } +# The issue with GNU libc version 2.17 when linux hosts doesn't have IPv6 configured. +# This is because libc points the cache (that is freed on exit) to a static variable +# if there is no ipv6 address, which later results in freeing an invalid pointer. +{ + libc_217_ipv6_issue + Memcheck:Free + fun:free + fun:__libc_freeres + fun:_vgnU_freeres + fun:__run_exit_handlers + fun:exit + fun:*mysqld_exit* + fun:*mysqld_main* + fun:main +} From 092f5a21f3e50b40255725687a4404f2ad7ed402 Mon Sep 17 00:00:00 2001 From: Przemek Skibinski Date: Fri, 2 Nov 2018 13:40:47 +0100 Subject: [PATCH 1190/1221] PS-4781: sql_yacc.yy uses SQLCOM_SELECT instead of SQLCOM_SHOW_XXXX_STATS 1. Add missing SQLCOM_SHOW_USER_STATS, SQLCOM_SHOW_TABLE_STATS, SQLCOM_SHOW_INDEX_STATS, SQLCOM_SHOW_CLIENT_STATS, SQLCOM_SHOW_THREAD_STATS to `init_sql_command_flags()` and `mysql_execute_command()` 2. Use proper SQLCOM_SHOW_XXXX_STATS in `sql_yacc.yy` for `SHOW XXXX_STATISTICS;` instead of SQLCOM_SELECT 3. Re-record percona_userstat.result --- mysql-test/r/percona_userstat.result | 4 ++-- sql/sql_parse.cc | 10 ++++++++++ sql/sql_yacc.yy | 10 +++++----- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/mysql-test/r/percona_userstat.result b/mysql-test/r/percona_userstat.result index 3c44a7a9dc7d..39a0caf5779d 100644 --- a/mysql-test/r/percona_userstat.result +++ b/mysql-test/r/percona_userstat.result @@ -61,10 +61,10 @@ SHOW TABLE_STATISTICS; Table_schema Table_name Rows_read Rows_changed Rows_changed_x_#indexes SHOW THREAD_STATISTICS; Thread_id Total_connections Concurrent_connections Connected_time Busy_time Cpu_time Bytes_received Bytes_sent Binlog_bytes_written Rows_fetched Rows_updated Table_rows_read Select_commands Update_commands Other_commands Commit_transactions Rollback_transactions Denied_connections Lost_connections Access_denied Empty_queries Total_ssl_connections -THREAD_ID 1 0 CONNECTED_TIME BUSY_TIME CPU_TIME 350 0 0 4 0 0 8 0 0 0 0 0 0 0 4 0 +THREAD_ID 1 0 CONNECTED_TIME BUSY_TIME CPU_TIME 350 0 0 3 0 0 5 0 3 0 0 0 0 0 2 0 SHOW USER_STATISTICS; User Total_connections Concurrent_connections Connected_time Busy_time Cpu_time Bytes_received Bytes_sent Binlog_bytes_written Rows_fetched Rows_updated Table_rows_read Select_commands Update_commands Other_commands Commit_transactions Rollback_transactions Denied_connections Lost_connections Access_denied Empty_queries Total_ssl_connections -root 1 0 CONNECTED_TIME BUSY_TIME CPU_TIME 413 0 0 5 0 0 9 0 1 0 0 0 0 0 4 0 +root 1 0 CONNECTED_TIME BUSY_TIME CPU_TIME 413 0 0 3 0 0 5 0 5 0 0 0 0 0 2 0 SET GLOBAL thread_statistics= @thread_statistics_old; SELECT Select_commands, Update_commands, Other_commands, Rows_fetched diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 02eb90c7e8ab..abc1bbc1657e 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -482,6 +482,11 @@ void init_update_queries(void) sql_command_flags[SQLCOM_SHOW_TABLE_STATUS]= (CF_STATUS_COMMAND | CF_SHOW_TABLE_COMMAND | CF_REEXECUTION_FRAGILE); + sql_command_flags[SQLCOM_SHOW_USER_STATS]= CF_STATUS_COMMAND; + sql_command_flags[SQLCOM_SHOW_TABLE_STATS]= CF_STATUS_COMMAND; + sql_command_flags[SQLCOM_SHOW_INDEX_STATS]= CF_STATUS_COMMAND; + sql_command_flags[SQLCOM_SHOW_CLIENT_STATS]= CF_STATUS_COMMAND; + sql_command_flags[SQLCOM_SHOW_THREAD_STATS]= CF_STATUS_COMMAND; sql_command_flags[SQLCOM_CREATE_USER]= CF_CHANGES_DATA; sql_command_flags[SQLCOM_RENAME_USER]= CF_CHANGES_DATA; @@ -2967,6 +2972,11 @@ mysql_execute_command(THD *thd, bool first_level) case SQLCOM_SHOW_COLLATIONS: case SQLCOM_SHOW_STORAGE_ENGINES: case SQLCOM_SHOW_PROFILE: + case SQLCOM_SHOW_USER_STATS: + case SQLCOM_SHOW_TABLE_STATS: + case SQLCOM_SHOW_INDEX_STATS: + case SQLCOM_SHOW_CLIENT_STATS: + case SQLCOM_SHOW_THREAD_STATS: case SQLCOM_SELECT: { DBUG_EXECUTE_IF("use_attachable_trx", diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index ae91fa52d464..b0fe4abec076 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -12301,35 +12301,35 @@ show_param: | CLIENT_STATS_SYM opt_wild_or_where { LEX *lex= Lex; - Lex->sql_command= SQLCOM_SELECT; + Lex->sql_command= SQLCOM_SHOW_CLIENT_STATS; if (prepare_schema_table(YYTHD, lex, 0, SCH_CLIENT_STATS)) MYSQL_YYABORT; } | USER_STATS_SYM opt_wild_or_where { LEX *lex= Lex; - lex->sql_command= SQLCOM_SELECT; + lex->sql_command= SQLCOM_SHOW_USER_STATS; if (prepare_schema_table(YYTHD, lex, 0, SCH_USER_STATS)) MYSQL_YYABORT; } | THREAD_STATS_SYM opt_wild_or_where { LEX *lex= Lex; - Lex->sql_command= SQLCOM_SELECT; + Lex->sql_command= SQLCOM_SHOW_THREAD_STATS; if (prepare_schema_table(YYTHD, lex, 0, SCH_THREAD_STATS)) MYSQL_YYABORT; } | TABLE_STATS_SYM opt_wild_or_where { LEX *lex= Lex; - lex->sql_command= SQLCOM_SELECT; + lex->sql_command= SQLCOM_SHOW_TABLE_STATS; if (prepare_schema_table(YYTHD, lex, 0, SCH_TABLE_STATS)) MYSQL_YYABORT; } | INDEX_STATS_SYM opt_wild_or_where { LEX *lex= Lex; - lex->sql_command= SQLCOM_SELECT; + lex->sql_command= SQLCOM_SHOW_INDEX_STATS; if (prepare_schema_table(YYTHD, lex, 0, SCH_INDEX_STATS)) MYSQL_YYABORT; } From ee24b3a9a0340d269ed6cc35a061663d826213bb Mon Sep 17 00:00:00 2001 From: Robert Golebiowski Date: Tue, 6 Nov 2018 19:40:05 +0100 Subject: [PATCH 1191/1221] PS-3829: Post push fix. Fixed zipped page compression encryption by removing assigning key_version to pages in buffers. Key version should not be updated in buffers as there are no guarantees that the page's header being flushed is the only copy of the header in the buffer. This true for instance for zipped pages. Also with parallel double write buffer pages are copied so the os0file layer will update only the key version in the copy of the header. --- storage/innobase/fil/fil0crypt.cc | 3 --- storage/innobase/os/os0file.cc | 1 - 2 files changed, 4 deletions(-) diff --git a/storage/innobase/fil/fil0crypt.cc b/storage/innobase/fil/fil0crypt.cc index dcc6f91862d9..dc19de05dd39 100644 --- a/storage/innobase/fil/fil0crypt.cc +++ b/storage/innobase/fil/fil0crypt.cc @@ -1718,9 +1718,6 @@ fil_crypt_rotate_page( /* force rotation by dummy updating page */ mlog_write_ulint(frame + FIL_PAGE_SPACE_ID, space_id, MLOG_4BYTES, &mtr); - // assign key version to a page in a buffer - so it would not be rotated more times - mlog_write_ulint(frame + FIL_PAGE_ENCRYPTION_KEY_VERSION, crypt_data->encrypting_with_key_version, MLOG_4BYTES, &mtr); - /* statistics */ state->crypt_stat.pages_modified++; } else { diff --git a/storage/innobase/os/os0file.cc b/storage/innobase/os/os0file.cc index 9fa210710618..b48fc97c45bf 100644 --- a/storage/innobase/os/os0file.cc +++ b/storage/innobase/os/os0file.cc @@ -10442,7 +10442,6 @@ Encryption::encrypt( #endif ut_ad(m_key_version != 0); // Since we are encrypting key_version cannot be 0 (i.e. page unencrypted) - mach_write_to_4(src + FIL_PAGE_ENCRYPTION_KEY_VERSION, m_key_version); if (page_type == FIL_PAGE_COMPRESSED) { mach_write_to_4(dst + FIL_PAGE_DATA, m_checksum); From f60ae99e1333c764eedf13219b0ca3b3a01e8588 Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Thu, 8 Nov 2018 14:07:42 -0700 Subject: [PATCH 1192/1221] PS-4979 : Dropping TokuDB table with non-alphanumeric characters could lead to a crash - There seems to be cases where the server doesn't detect an invalid table name and somehow ends up passing in an empty table name during the create call. The engine expects a table name in the form of a relative path like "./databasename/tablename". InnoDB detects this in parsing the table name during the creation and returns an error. TokuDB does not. - This commit adds an up-front parsing of the database and table names during creation and fails in the same way that InnoDB does if anything empty or unexpected is discovered. Also added a new simple test that illustrates the detection of the empty table name and error. --- mysql-test/suite/tokudb.bugs/r/PS-4979.result | 2 ++ mysql-test/suite/tokudb.bugs/t/PS-4979.test | 12 ++++++++++++ storage/tokudb/ha_tokudb.cc | 10 ++++++++++ 3 files changed, 24 insertions(+) create mode 100644 mysql-test/suite/tokudb.bugs/r/PS-4979.result create mode 100644 mysql-test/suite/tokudb.bugs/t/PS-4979.test diff --git a/mysql-test/suite/tokudb.bugs/r/PS-4979.result b/mysql-test/suite/tokudb.bugs/r/PS-4979.result new file mode 100644 index 000000000000..f0d2f93f630c --- /dev/null +++ b/mysql-test/suite/tokudb.bugs/r/PS-4979.result @@ -0,0 +1,2 @@ +CREATE TABLE `#mysql50#q.q`(f1 INT KEY) ENGINE=TOKUDB; +ERROR HY000: Got error 1632 from storage engine diff --git a/mysql-test/suite/tokudb.bugs/t/PS-4979.test b/mysql-test/suite/tokudb.bugs/t/PS-4979.test new file mode 100644 index 000000000000..1e4b5d11922a --- /dev/null +++ b/mysql-test/suite/tokudb.bugs/t/PS-4979.test @@ -0,0 +1,12 @@ +--source include/have_tokudb.inc +# PS-4979 : Dropping TokuDB table with non-alphanumeric characters could lead +# to a crash +# +# `#mysql50#q.q` is an invalid table name, but the server side doesn't detect it +# and complain. Instead it passes in an empty table name to the engine. The +# engine expects a table name in the form of a relative path like +# "./databasename/tablename". InnoDB detects this in parsing the table name +# during the creation and returns an error. + +--error ER_GET_ERRNO +CREATE TABLE `#mysql50#q.q`(f1 INT KEY) ENGINE=TOKUDB; diff --git a/storage/tokudb/ha_tokudb.cc b/storage/tokudb/ha_tokudb.cc index 548ac5c7b092..babbe825f2e1 100644 --- a/storage/tokudb/ha_tokudb.cc +++ b/storage/tokudb/ha_tokudb.cc @@ -7252,6 +7252,16 @@ int ha_tokudb::create( tokudb_trx_data *trx = NULL; THD* thd = ha_thd(); + String database_name, table_name, dictionary_name; + tokudb_split_dname(name, database_name, table_name, dictionary_name); + if (database_name.is_empty() || table_name.is_empty()) { + push_warning_printf(thd, + Sql_condition::WARN_LEVEL_WARN, + ER_TABLE_NAME, + "TokuDB: Table Name or Database Name is empty"); + DBUG_RETURN(ER_TABLE_NAME); + } + memset(&kc_info, 0, sizeof(kc_info)); #if 100000 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 100999 From 2e5b5a0005238a14f2b57db933c2e778e70a3cf8 Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Tue, 6 Nov 2018 13:14:17 +0100 Subject: [PATCH 1193/1221] PS-4881: Add LLVM/clang 7 to Travis-CI 1. Add clang-7 to the list of compilers 2. Cache the commit number of last successful build and use it for pushes to the trunk. It fixes issues when "Auto cancel branch builds" is turned on at https://travis-ci.org/percona/percona-server/settings --- .travis.yml | 63 +++++++++++++++++++++++++++++++++-------------------- 1 file changed, 39 insertions(+), 24 deletions(-) diff --git a/.travis.yml b/.travis.yml index 0b29592e3690..f3ae5fb5d79c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -43,33 +43,37 @@ matrix: os: osx # 2 - if: repo != percona/percona-server OR repo = percona/percona-server AND type IN (push, cron) - env: VERSION=6.0 BUILD=RelWithDebInfo + env: VERSION=7 BUILD=RelWithDebInfo compiler: clang # 3 - if: repo != percona/percona-server OR repo = percona/percona-server AND type IN (push, cron) - env: VERSION=5.0 BUILD=Debug + env: VERSION=6.0 BUILD=Debug compiler: clang # 4 - if: repo != percona/percona-server OR repo = percona/percona-server AND type IN (push, cron) - env: VERSION=4.0 BUILD=Debug + env: VERSION=5.0 BUILD=Debug compiler: clang # 5 + - if: repo != percona/percona-server OR repo = percona/percona-server AND type IN (push, cron) + env: VERSION=4.0 BUILD=Debug + compiler: clang + # 6 - if: repo != percona/percona-server OR repo = percona/percona-server AND type IN (push, cron) env: VERSION=8 BUILD=Debug compiler: gcc - # 6 + # 7 - if: repo != percona/percona-server OR repo = percona/percona-server AND type IN (push, cron) env: VERSION=7 BUILD=Debug compiler: gcc - # 7 + # 8 - if: repo != percona/percona-server OR repo = percona/percona-server AND type IN (push, cron) env: VERSION=6 BUILD=Debug compiler: gcc - # 8 + # 9 - if: repo != percona/percona-server OR repo = percona/percona-server AND type IN (push, cron) env: VERSION=5 BUILD=Debug compiler: gcc - # 9 + # 10 - if: repo != percona/percona-server OR repo = percona/percona-server AND type IN (push, cron) env: VERSION=4.8 BUILD=Debug compiler: gcc @@ -83,33 +87,37 @@ matrix: os: osx # 2 - if: branch =~ fullci OR repo = percona/percona-server AND type IN (push, pull_request, cron) - env: VERSION=6.0 BUILD=Debug + env: VERSION=7 BUILD=Debug compiler: clang # 3 - if: branch =~ fullci OR repo = percona/percona-server AND type IN (push, pull_request, cron) - env: VERSION=5.0 BUILD=RelWithDebInfo + env: VERSION=6.0 BUILD=RelWithDebInfo compiler: clang # 4 - if: branch =~ fullci OR repo = percona/percona-server AND type IN (push, pull_request, cron) - env: VERSION=4.0 BUILD=RelWithDebInfo + env: VERSION=5.0 BUILD=RelWithDebInfo compiler: clang # 5 + - if: branch =~ fullci OR repo = percona/percona-server AND type IN (push, pull_request, cron) + env: VERSION=4.0 BUILD=RelWithDebInfo + compiler: clang + # 6 - if: branch =~ fullci OR repo = percona/percona-server AND type IN (push, pull_request, cron) env: VERSION=8 BUILD=RelWithDebInfo compiler: gcc - # 6 + # 7 - if: branch =~ fullci OR repo = percona/percona-server AND type IN (push, pull_request, cron) env: VERSION=7 BUILD=RelWithDebInfo compiler: gcc - # 7 + # 8 - if: branch =~ fullci OR repo = percona/percona-server AND type IN (push, pull_request, cron) env: VERSION=6 BUILD=RelWithDebInfo compiler: gcc - # 8 + # 9 - if: branch =~ fullci OR repo = percona/percona-server AND type IN (push, pull_request, cron) env: VERSION=5 BUILD=RelWithDebInfo compiler: gcc - # 9 + # 10 - if: branch =~ fullci OR repo = percona/percona-server AND type IN (push, pull_request, cron) env: VERSION=4.8 BUILD=RelWithDebInfo compiler: gcc @@ -118,33 +126,37 @@ matrix: # Configurations to be run after merging a pull request for percona/percona-server # 1 - if: branch =~ extraci OR repo = percona/percona-server AND type IN (push, cron) - env: VERSION=6.0 BUILD=RelWithDebInfo INVERTED=ON + env: VERSION=7 BUILD=RelWithDebInfo INVERTED=ON compiler: clang # 2 - if: branch =~ extraci OR repo = percona/percona-server AND type IN (push, cron) - env: VERSION=5.0 BUILD=RelWithDebInfo INVERTED=ON + env: VERSION=6.0 BUILD=RelWithDebInfo INVERTED=ON compiler: clang # 3 - if: branch =~ extraci OR repo = percona/percona-server AND type IN (push, cron) - env: VERSION=4.0 BUILD=RelWithDebInfo INVERTED=ON + env: VERSION=5.0 BUILD=RelWithDebInfo INVERTED=ON compiler: clang # 4 + - if: branch =~ extraci OR repo = percona/percona-server AND type IN (push, cron) + env: VERSION=4.0 BUILD=RelWithDebInfo INVERTED=ON + compiler: clang + # 5 - if: branch =~ extraci OR repo = percona/percona-server AND type IN (push, cron) env: VERSION=8 BUILD=RelWithDebInfo INVERTED=ON compiler: gcc - # 5 + # 6 - if: branch =~ extraci OR repo = percona/percona-server AND type IN (push, cron) env: VERSION=7 BUILD=RelWithDebInfo INVERTED=ON compiler: gcc - # 6 + # 7 - if: branch =~ extraci OR repo = percona/percona-server AND type IN (push, cron) env: VERSION=6 BUILD=RelWithDebInfo INVERTED=ON compiler: gcc - # 7 + # 8 - if: branch =~ extraci OR repo = percona/percona-server AND type IN (push, cron) env: VERSION=5 BUILD=RelWithDebInfo INVERTED=ON compiler: gcc - #8 + # 9 - if: branch =~ extraci OR repo = percona/percona-server AND type IN (push, cron) env: VERSION=4.8 BUILD=RelWithDebInfo INVERTED=ON compiler: gcc @@ -157,7 +169,7 @@ script: echo --- JOB_NUMBER=$JOB_NUMBER TRAVIS_COMMIT=$TRAVIS_COMMIT TRAVIS_COMMIT_RANGE=$TRAVIS_COMMIT_RANGE TRAVIS_REPO_SLUG=$TRAVIS_REPO_SLUG TRAVIS_BRANCH=$TRAVIS_BRANCH TRAVIS_EVENT_TYPE=$TRAVIS_EVENT_TYPE TRAVIS_PULL_REQUEST=$TRAVIS_PULL_REQUEST TRAVIS_PULL_REQUEST_BRANCH=$TRAVIS_PULL_REQUEST_BRANCH - echo --- Perform all Travis jobs or only jobs that are included in ENV_VAR_JOB_NUMBERS list if it is defined; - JOB_NUMBERS="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"; + JOB_NUMBERS="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"; if [[ "$ENV_VAR_JOB_NUMBERS" != "" ]]; then JOB_NUMBERS=$ENV_VAR_JOB_NUMBERS; fi; @@ -167,13 +179,15 @@ script: travis_terminate 0; fi; - # For the trunk use TRAVIS_COMMIT_RANGE but "Auto cancel branch builds" has to be turned off at https://travis-ci.org/percona/percona-server/settings # For pull requests and feature branches replace TRAVIS_COMMIT_RANGE with the range from the root to the tip of the branch + # For the trunk use the commit number of last successful build if exists - if [[ "$TRAVIS_EVENT_TYPE" == "pull_request" ]] || [[ "$TRAVIS_REPO_SLUG" != "percona/percona-server" ]]; then if [[ "$TRAVIS_EVENT_TYPE" == "pull_request" ]]; then TRAVIS_COMMIT=$TRAVIS_COMMIT^2; fi; git fetch https://github.com/percona/percona-server.git $PARENT_BRANCH:master_repo_$PARENT_BRANCH; PARENT_COMMIT=$(git rev-list --first-parent --topo-order $TRAVIS_COMMIT ^master_repo_$PARENT_BRANCH | tail -1); TRAVIS_COMMIT_RANGE=$PARENT_COMMIT^..$TRAVIS_COMMIT; + else + if [ -s "$CCACHE_DIR/last_commit.txt" ]; then TRAVIS_COMMIT_RANGE=$(cat $CCACHE_DIR/last_commit.txt)..$TRAVIS_COMMIT; fi; fi; if MODIFIED_FILES=$(git diff --name-only $TRAVIS_COMMIT_RANGE 2>/dev/null); then echo -e "--- Modified files in $TRAVIS_COMMIT_RANGE:\n$MODIFIED_FILES"; @@ -306,7 +320,8 @@ script: TIMEOUT_TIME=$((46 * 60 - $SECONDS)); fi; echo --- Timeout $TIMEOUT_TIME seconds. CMake took $CMAKE_TIME seconds. Packages updated in $UPDATE_TIME seconds. Initialization time $INIT_TIME seconds.; - $TIMEOUT_CMD $TIMEOUT_TIME make -j2 + $TIMEOUT_CMD $TIMEOUT_TIME make -j2; + if [[ "$?" == "0" ]]; then echo $TRAVIS_COMMIT > $CCACHE_DIR/last_commit.txt; fi; - ccache --show-stats; BUILD_TIME=$(($SECONDS - $INIT_TIME - $UPDATE_TIME - $CMAKE_TIME)); From 5fa63e05bb8616f0235712780af0ca9644c2830f Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Mon, 12 Nov 2018 21:09:14 -0700 Subject: [PATCH 1194/1221] PS-4529 : MTR: index_merge_rocksdb2 inadvertently tests InnoDB instead of MyRocks - Fixed common includes that restart server without resetting default_storage_engine to that specified. Re-recorded impacted tests to include the new statement re-setting the default_storage_engine. --- mysql-test/include/index_merge1.inc | 3 +++ mysql-test/include/index_merge2.inc | 3 +++ mysql-test/include/index_merge_ror.inc | 3 +++ mysql-test/r/index_merge_innodb.result | 3 +++ mysql-test/r/index_merge_myisam.result | 3 +++ 5 files changed, 15 insertions(+) diff --git a/mysql-test/include/index_merge1.inc b/mysql-test/include/index_merge1.inc index 031aedda1ed6..1e0193e2e522 100644 --- a/mysql-test/include/index_merge1.inc +++ b/mysql-test/include/index_merge1.inc @@ -457,6 +457,9 @@ update t3 set key9=key1,keyA=key1,keyB=key1,keyC=key1; SET @@GLOBAL.innodb_fast_shutdown = 0; --source include/restart_mysqld.inc +# reset default engine after restart +eval SET SESSION DEFAULT_STORAGE_ENGINE = $engine_type; + -- disable_query_log -- disable_result_log analyze table t3; diff --git a/mysql-test/include/index_merge2.inc b/mysql-test/include/index_merge2.inc index 9ae2c82a3754..9df81259b709 100644 --- a/mysql-test/include/index_merge2.inc +++ b/mysql-test/include/index_merge2.inc @@ -375,6 +375,9 @@ update t1 set key2=key1,key3=key1; SET @@GLOBAL.innodb_fast_shutdown = 0; --source include/restart_mysqld.inc +# reset default engine after restart +eval SET SESSION DEFAULT_STORAGE_ENGINE = $engine_type; + -- disable_query_log -- disable_result_log analyze table t1; diff --git a/mysql-test/include/index_merge_ror.inc b/mysql-test/include/index_merge_ror.inc index f48d47bc67d7..12b266c0001c 100644 --- a/mysql-test/include/index_merge_ror.inc +++ b/mysql-test/include/index_merge_ror.inc @@ -188,6 +188,9 @@ delete from t1 where key3=100 and key4=100; SET @@GLOBAL.innodb_fast_shutdown = 0; --source include/restart_mysqld.inc +# reset default engine after restart +eval SET SESSION DEFAULT_STORAGE_ENGINE = $engine_type; + -- disable_query_log -- disable_result_log analyze table t1; diff --git a/mysql-test/r/index_merge_innodb.result b/mysql-test/r/index_merge_innodb.result index 5494d86ad5ce..10b7ec6486ee 100644 --- a/mysql-test/r/index_merge_innodb.result +++ b/mysql-test/r/index_merge_innodb.result @@ -295,6 +295,7 @@ alter table t3 add keyB int not null, add index iB(keyB); alter table t3 add keyC int not null, add index iC(keyC); update t3 set key9=key1,keyA=key1,keyB=key1,keyC=key1; SET @@GLOBAL.innodb_fast_shutdown = 0; +SET SESSION DEFAULT_STORAGE_ENGINE = InnoDB; explain select * from t3 where key1=1 or key2=2 or key3=3 or key4=4 or key5=5 or key6=6 or key7=7 or key8=8 or @@ -704,6 +705,7 @@ key1 key2 key3 key4 filler1 -1 -1 100 100 key4-key3 delete from t1 where key3=100 and key4=100; SET @@GLOBAL.innodb_fast_shutdown = 0; +SET SESSION DEFAULT_STORAGE_ENGINE = InnoDB; explain select key1,key2,key3,key4,filler1 from t1 where key1=100 and key2=100 or key3=100 and key4=100; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 index_merge key1,key2,key3,key4 key1,key2,key3,key4 5,5,5,5 NULL 4 Using union(intersect(key1,key2),intersect(key3,key4)); Using where @@ -1135,6 +1137,7 @@ alter table t1 add index i2(key2); alter table t1 add index i3(key3); update t1 set key2=key1,key3=key1; SET @@GLOBAL.innodb_fast_shutdown = 0; +SET SESSION DEFAULT_STORAGE_ENGINE = InnoDB; explain select * from t1 where (key3 > 30 and key3<35) or (key2 >32 and key2 < 40); id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 index_merge i2,i3 i3,i2 4,4 NULL # Using sort_union(i3,i2); Using where diff --git a/mysql-test/r/index_merge_myisam.result b/mysql-test/r/index_merge_myisam.result index e193d5d65112..83f6c46c7aef 100644 --- a/mysql-test/r/index_merge_myisam.result +++ b/mysql-test/r/index_merge_myisam.result @@ -301,6 +301,7 @@ alter table t3 add keyB int not null, add index iB(keyB); alter table t3 add keyC int not null, add index iC(keyC); update t3 set key9=key1,keyA=key1,keyB=key1,keyC=key1; SET @@GLOBAL.innodb_fast_shutdown = 0; +SET SESSION DEFAULT_STORAGE_ENGINE = MyISAM; explain select * from t3 where key1=1 or key2=2 or key3=3 or key4=4 or key5=5 or key6=6 or key7=7 or key8=8 or @@ -734,6 +735,7 @@ key1 key2 key3 key4 filler1 -1 -1 100 100 key4-key3 delete from t1 where key3=100 and key4=100; SET @@GLOBAL.innodb_fast_shutdown = 0; +SET SESSION DEFAULT_STORAGE_ENGINE = MyISAM; explain select key1,key2,key3,key4,filler1 from t1 where key1=100 and key2=100 or key3=100 and key4=100; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 index_merge key1,key2,key3,key4 key1,key2,key3,key4 5,5,5,5 NULL 152 Using union(intersect(key1,key2),intersect(key3,key4)); Using where @@ -1174,6 +1176,7 @@ alter table t1 add index i2(key2); alter table t1 add index i3(key3); update t1 set key2=key1,key3=key1; SET @@GLOBAL.innodb_fast_shutdown = 0; +SET SESSION DEFAULT_STORAGE_ENGINE = MyISAM; explain select * from t1 where (key3 > 30 and key3<35) or (key2 >32 and key2 < 40); id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 index_merge i2,i3 i3,i2 4,4 NULL 11 Using sort_union(i3,i2); Using where From 2f592dd3bc6087f8229b3e202094b9e894d48051 Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Mon, 12 Nov 2018 16:35:14 +0100 Subject: [PATCH 1195/1221] PS-4998: Valgrind: compilation fails with writing with no trivial copy-assignment Fix compilation failure with Valgrind using buf->stamp.bytes instead of buf in buf_buddy_alloc_zip(). Upstream Bug URL: https://bugs.mysql.com/bug.php?id=93105 --- storage/innobase/buf/buf0buddy.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage/innobase/buf/buf0buddy.cc b/storage/innobase/buf/buf0buddy.cc index f8dd1b4aeaa0..7abb85bb5e1f 100644 --- a/storage/innobase/buf/buf0buddy.cc +++ b/storage/innobase/buf/buf0buddy.cc @@ -370,7 +370,7 @@ buf_buddy_alloc_zip( if (buf) { /* Trash the page other than the BUF_BUDDY_STAMP_NONFREE. */ - UNIV_MEM_TRASH(buf, ~i, BUF_BUDDY_STAMP_OFFSET); + UNIV_MEM_TRASH(buf->stamp.bytes, ~i, BUF_BUDDY_STAMP_OFFSET); UNIV_MEM_TRASH(BUF_BUDDY_STAMP_OFFSET + 4 + buf->stamp.bytes, ~i, (BUF_BUDDY_LOW << i) From 8bc99f9e5284d310b92ea8b0935f0793b0ae01c1 Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Tue, 13 Nov 2018 14:31:57 +0100 Subject: [PATCH 1196/1221] PS-5012: Valgrind: misused UNIV_MEM_ALLOC after ut_zalloc_nokey Remove UNIV_MEM_ALLOC from buf_page_alloc_descriptor() as data is zeroed with ut_zalloc_nokey(). Upstream Bug URL: https://bugs.mysql.com/bug.php?id=93173 --- storage/innobase/include/buf0buf.ic | 1 - 1 file changed, 1 deletion(-) diff --git a/storage/innobase/include/buf0buf.ic b/storage/innobase/include/buf0buf.ic index e895341c5530..62064162d1f6 100644 --- a/storage/innobase/include/buf0buf.ic +++ b/storage/innobase/include/buf0buf.ic @@ -836,7 +836,6 @@ buf_page_alloc_descriptor(void) bpage = (buf_page_t*) ut_zalloc_nokey(sizeof *bpage); ut_ad(bpage); - UNIV_MEM_ALLOC(bpage, sizeof *bpage); return(bpage); } From ff9c5c7dafba04abbccac445c18255cece2aec75 Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Fri, 9 Nov 2018 16:02:02 +0100 Subject: [PATCH 1197/1221] PS-4982, PS-4983: Fix Valgrind errors with uninitialised memory Fix Valgrind warnings with clearing memory allocated for keyring data in `os_file_compress_page()` --- storage/innobase/os/os0file.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/storage/innobase/os/os0file.cc b/storage/innobase/os/os0file.cc index b48fc97c45bf..22d2571cbf6d 100644 --- a/storage/innobase/os/os0file.cc +++ b/storage/innobase/os/os0file.cc @@ -1489,8 +1489,10 @@ os_file_compress_page( len += FIL_PAGE_DATA; - if (will_be_encrypted_with_keyring) + if (will_be_encrypted_with_keyring) { + mach_write_to_8(dst + len, 0); len += 8; + } // For encryption with keyring keys we required that there will be at least 8 bytes left // 4 bytes for key version and 4 bytes for post encryption checksum From 776e5acf73ae2517593f739fc4b553d6c816049e Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Tue, 13 Nov 2018 12:03:54 -0700 Subject: [PATCH 1198/1221] PS-4744 : crash after alter table drop index is executed on slave - Under a specific situation on a slave, when binlog is off and log_slave_updates=0, rocksdb_prepare gets called after an external_lock(F_UNLCK) is called. During the F_UNLCK processing, the current Rdb_transaction is committed and cleared, leaving nothing to do or work with in the rocksdb_prepare call. - This change solves the issue by implementing the same behavior that TokuDB has. That is to check if there is an active transaction at the top of the prepare call and exit immediately with HA_EXIT_SUCCESS if there nothing to prepare. This prevents falling into code that assumes that there is an active transaction and tries to interact with the (missing) transaction instance. - Added new test that would segfault the slave when configured correctly and the slave applier exectues a specific ALTER TABLE. --- ...ksdb_row_alter_table_drop_index_slave.result | 11 +++++++++++ ..._row_alter_table_drop_index_slave-master.opt | 1 + ...b_row_alter_table_drop_index_slave-slave.opt | 1 + ...ocksdb_row_alter_table_drop_index_slave.test | 17 +++++++++++++++++ storage/rocksdb/ha_rocksdb.cc | 4 ++++ 5 files changed, 34 insertions(+) create mode 100644 mysql-test/suite/rocksdb.rpl/r/rpl_rocksdb_row_alter_table_drop_index_slave.result create mode 100644 mysql-test/suite/rocksdb.rpl/t/rpl_rocksdb_row_alter_table_drop_index_slave-master.opt create mode 100644 mysql-test/suite/rocksdb.rpl/t/rpl_rocksdb_row_alter_table_drop_index_slave-slave.opt create mode 100644 mysql-test/suite/rocksdb.rpl/t/rpl_rocksdb_row_alter_table_drop_index_slave.test diff --git a/mysql-test/suite/rocksdb.rpl/r/rpl_rocksdb_row_alter_table_drop_index_slave.result b/mysql-test/suite/rocksdb.rpl/r/rpl_rocksdb_row_alter_table_drop_index_slave.result new file mode 100644 index 000000000000..39b18613c988 --- /dev/null +++ b/mysql-test/suite/rocksdb.rpl/r/rpl_rocksdb_row_alter_table_drop_index_slave.result @@ -0,0 +1,11 @@ +include/master-slave.inc +Warnings: +Note #### Sending passwords in plain text without SSL/TLS is extremely insecure. +Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. +[connection master] +CREATE TABLE t1(a INT PRIMARY KEY, b INT, KEY s_k(b)) ENGINE=ROCKSDB; +INSERT INTO t1 VALUES(1,2); +ALTER TABLE t1 DROP KEY s_k; +include/sync_slave_sql_with_master.inc +DROP TABLE t1; +include/rpl_end.inc diff --git a/mysql-test/suite/rocksdb.rpl/t/rpl_rocksdb_row_alter_table_drop_index_slave-master.opt b/mysql-test/suite/rocksdb.rpl/t/rpl_rocksdb_row_alter_table_drop_index_slave-master.opt new file mode 100644 index 000000000000..f1cd1aa27bc1 --- /dev/null +++ b/mysql-test/suite/rocksdb.rpl/t/rpl_rocksdb_row_alter_table_drop_index_slave-master.opt @@ -0,0 +1 @@ +--binlog_format=row --gtid_mode=ON --enforce_gtid_consistency=ON --log-slave-updates=0 diff --git a/mysql-test/suite/rocksdb.rpl/t/rpl_rocksdb_row_alter_table_drop_index_slave-slave.opt b/mysql-test/suite/rocksdb.rpl/t/rpl_rocksdb_row_alter_table_drop_index_slave-slave.opt new file mode 100644 index 000000000000..07806dd48e70 --- /dev/null +++ b/mysql-test/suite/rocksdb.rpl/t/rpl_rocksdb_row_alter_table_drop_index_slave-slave.opt @@ -0,0 +1 @@ +--gtid_mode=ON --enforce_gtid_consistency=ON --skip-log-bin --log-slave-updates=0 diff --git a/mysql-test/suite/rocksdb.rpl/t/rpl_rocksdb_row_alter_table_drop_index_slave.test b/mysql-test/suite/rocksdb.rpl/t/rpl_rocksdb_row_alter_table_drop_index_slave.test new file mode 100644 index 000000000000..b28cdccd2721 --- /dev/null +++ b/mysql-test/suite/rocksdb.rpl/t/rpl_rocksdb_row_alter_table_drop_index_slave.test @@ -0,0 +1,17 @@ +--source include/not_group_replication_plugin.inc +--source include/have_binlog_format_row.inc +--source include/have_rocksdb.inc +--source include/master-slave.inc + +connection master; +CREATE TABLE t1(a INT PRIMARY KEY, b INT, KEY s_k(b)) ENGINE=ROCKSDB; + +INSERT INTO t1 VALUES(1,2); + +ALTER TABLE t1 DROP KEY s_k; + +--source include/sync_slave_sql_with_master.inc +connection master; +DROP TABLE t1; + +--source include/rpl_end.inc diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index 905bc7bfda25..c21cb628fb6c 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -3068,6 +3068,10 @@ static bool rocksdb_flush_wal(handlerton *const hton static int rocksdb_prepare(handlerton *const hton, THD *const thd, bool prepare_tx) { Rdb_transaction *&tx = get_tx_from_thd(thd); + if (!tx->is_tx_started()) { + // nothing to prepare + return HA_EXIT_SUCCESS; + } if (!tx->can_prepare()) { return HA_EXIT_FAILURE; } From 2cdb8adbe0c902ffa1a0e6b0cd2d2cb9d178d3ff Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Tue, 13 Nov 2018 14:29:52 -0700 Subject: [PATCH 1199/1221] PS-4532 : Replace obsolete HAVE_purify with HAVE_VALGRIND in ha_rocksdb.cc - Replaced HAVE_purify with HAVE_VALGRIND as suggested. --- storage/rocksdb/ha_rocksdb.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index 905bc7bfda25..34ae7f51ad5c 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -4387,11 +4387,11 @@ static int rocksdb_done_func(void *const p) { // Disown the cache data since we're shutting down. // This results in memory leaks but it improved the shutdown time. // Don't disown when running under valgrind -#ifndef HAVE_purify +#ifndef HAVE_VALGRIND if (rocksdb_tbl_options->block_cache) { rocksdb_tbl_options->block_cache->DisownData(); } -#endif /* HAVE_purify */ +#endif // HAVE_VALGRIND rocksdb_db_options = nullptr; rocksdb_tbl_options = nullptr; From 1ff66fffec8a7bff1200e7491a090bd83151004d Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Mon, 19 Nov 2018 15:19:26 -0700 Subject: [PATCH 1200/1221] PS-5049 : Bad rocksdb submodule leads to critical runaway memory usage. Revert "PS-4905 : Merge MyRocks prod201810" This reverts commit e67710e281fedfd217f9943c4cdb861bb2bfb0a4. --- storage/rocksdb/rocksdb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage/rocksdb/rocksdb b/storage/rocksdb/rocksdb index c190eb57ba07..dc4ac5ffa670 160000 --- a/storage/rocksdb/rocksdb +++ b/storage/rocksdb/rocksdb @@ -1 +1 @@ -Subproject commit c190eb57ba07b3aaf8cd1f3f99fd64da1b93ab1f +Subproject commit dc4ac5ffa6708dae4ab70d6fe24b946cca0d20a5 From 3eec5f07e5829ef55f41f82abbc96488082788b5 Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Mon, 19 Nov 2018 15:20:17 -0700 Subject: [PATCH 1201/1221] PS-5049 : Bad rocksdb submodule leads to critical runaway memory usage. Revert "Integrate deadlock timestamp to MySQL (#855)" This reverts commit 60cb77beb1fe9e590893cdfc50675dcd53aefd59. --- .../suite/rocksdb/r/i_s_deadlock.result | 58 +++++++++---------- mysql-test/suite/rocksdb/t/i_s_deadlock.test | 14 ++--- storage/rocksdb/ha_rocksdb.cc | 2 - storage/rocksdb/ha_rocksdb.h | 1 - storage/rocksdb/rdb_i_s.cc | 7 +-- 5 files changed, 37 insertions(+), 45 deletions(-) diff --git a/mysql-test/suite/rocksdb/r/i_s_deadlock.result b/mysql-test/suite/rocksdb/r/i_s_deadlock.result index 5193c4081085..ab4231d6a60d 100644 --- a/mysql-test/suite/rocksdb/r/i_s_deadlock.result +++ b/mysql-test/suite/rocksdb/r/i_s_deadlock.result @@ -20,7 +20,7 @@ set global rocksdb_max_latest_deadlocks = @prior_max_latest_deadlocks; create table t (i int primary key) engine=rocksdb; insert into t values (1), (2), (3); select * from information_schema.rocksdb_deadlock; -DEADLOCK_ID TIMESTAMP TRANSACTION_ID CF_NAME WAITING_KEY LOCK_TYPE INDEX_NAME TABLE_NAME ROLLED_BACK +DEADLOCK_ID TRANSACTION_ID CF_NAME WAITING_KEY LOCK_TYPE INDEX_NAME TABLE_NAME ROLLED_BACK Deadlock #1 begin; select * from t where i=1 for update; @@ -38,9 +38,9 @@ i 2 rollback; select * from information_schema.rocksdb_deadlock; -DEADLOCK_ID TIMESTAMP TRANSACTION_ID CF_NAME WAITING_KEY LOCK_TYPE INDEX_NAME TABLE_NAME ROLLED_BACK -DEADLOCK_ID TIMESTAMP TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 0 -DEADLOCK_ID TIMESTAMP TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 1 +DEADLOCK_ID TRANSACTION_ID CF_NAME WAITING_KEY LOCK_TYPE INDEX_NAME TABLE_NAME ROLLED_BACK +DEADLOCK_ID TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 0 +DEADLOCK_ID TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 1 Deadlock #2 begin; select * from t where i=1 for update; @@ -58,11 +58,11 @@ i 2 rollback; select * from information_schema.rocksdb_deadlock; -DEADLOCK_ID TIMESTAMP TRANSACTION_ID CF_NAME WAITING_KEY LOCK_TYPE INDEX_NAME TABLE_NAME ROLLED_BACK -DEADLOCK_ID TIMESTAMP TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 0 -DEADLOCK_ID TIMESTAMP TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 1 -DEADLOCK_ID TIMESTAMP TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 0 -DEADLOCK_ID TIMESTAMP TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 1 +DEADLOCK_ID TRANSACTION_ID CF_NAME WAITING_KEY LOCK_TYPE INDEX_NAME TABLE_NAME ROLLED_BACK +DEADLOCK_ID TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 0 +DEADLOCK_ID TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 1 +DEADLOCK_ID TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 0 +DEADLOCK_ID TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 1 set global rocksdb_max_latest_deadlocks = 10; Deadlock #3 begin; @@ -81,18 +81,18 @@ i 2 rollback; select * from information_schema.rocksdb_deadlock; -DEADLOCK_ID TIMESTAMP TRANSACTION_ID CF_NAME WAITING_KEY LOCK_TYPE INDEX_NAME TABLE_NAME ROLLED_BACK -DEADLOCK_ID TIMESTAMP TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 0 -DEADLOCK_ID TIMESTAMP TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 1 -DEADLOCK_ID TIMESTAMP TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 0 -DEADLOCK_ID TIMESTAMP TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 1 -DEADLOCK_ID TIMESTAMP TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 0 -DEADLOCK_ID TIMESTAMP TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 1 +DEADLOCK_ID TRANSACTION_ID CF_NAME WAITING_KEY LOCK_TYPE INDEX_NAME TABLE_NAME ROLLED_BACK +DEADLOCK_ID TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 0 +DEADLOCK_ID TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 1 +DEADLOCK_ID TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 0 +DEADLOCK_ID TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 1 +DEADLOCK_ID TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 0 +DEADLOCK_ID TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 1 set global rocksdb_max_latest_deadlocks = 1; select * from information_schema.rocksdb_deadlock; -DEADLOCK_ID TIMESTAMP TRANSACTION_ID CF_NAME WAITING_KEY LOCK_TYPE INDEX_NAME TABLE_NAME ROLLED_BACK -DEADLOCK_ID TIMESTAMP TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 0 -DEADLOCK_ID TIMESTAMP TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 1 +DEADLOCK_ID TRANSACTION_ID CF_NAME WAITING_KEY LOCK_TYPE INDEX_NAME TABLE_NAME ROLLED_BACK +DEADLOCK_ID TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 0 +DEADLOCK_ID TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 1 set rocksdb_deadlock_detect_depth = 2; Deadlock #4 begin; @@ -124,7 +124,7 @@ i rollback; set global rocksdb_max_latest_deadlocks = 5; select * from information_schema.rocksdb_deadlock; -DEADLOCK_ID TIMESTAMP TRANSACTION_ID CF_NAME WAITING_KEY LOCK_TYPE INDEX_NAME TABLE_NAME ROLLED_BACK +DEADLOCK_ID TRANSACTION_ID CF_NAME WAITING_KEY LOCK_TYPE INDEX_NAME TABLE_NAME ROLLED_BACK Deadlock #5 begin; select * from t where i=1 for update; @@ -158,9 +158,9 @@ i rollback; rollback; select * from information_schema.rocksdb_deadlock; -DEADLOCK_ID TIMESTAMP TRANSACTION_ID CF_NAME WAITING_KEY LOCK_TYPE INDEX_NAME TABLE_NAME ROLLED_BACK -DEADLOCK_ID TIMESTAMP TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 0 -DEADLOCK_ID TIMESTAMP TRANSACTION_ID default WAITING_KEY SHARED PRIMARY test.t 1 +DEADLOCK_ID TRANSACTION_ID CF_NAME WAITING_KEY LOCK_TYPE INDEX_NAME TABLE_NAME ROLLED_BACK +DEADLOCK_ID TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 0 +DEADLOCK_ID TRANSACTION_ID default WAITING_KEY SHARED PRIMARY test.t 1 Deadlock #6 create table t1 (id int primary key, value int) engine=rocksdb; insert into t1 values (1,1),(2,2),(3,3),(4,4),(5,5); @@ -184,13 +184,13 @@ set global rocksdb_lock_wait_timeout = @prior_lock_wait_timeout; set global rocksdb_deadlock_detect = @prior_deadlock_detect; drop table t; select * from information_schema.rocksdb_deadlock; -DEADLOCK_ID TIMESTAMP TRANSACTION_ID CF_NAME WAITING_KEY LOCK_TYPE INDEX_NAME TABLE_NAME ROLLED_BACK -DEADLOCK_ID TIMESTAMP TRANSACTION_ID default WAITING_KEY EXCLUSIVE INDEX_NAME TABLE_NAME 0 -DEADLOCK_ID TIMESTAMP TRANSACTION_ID default WAITING_KEY EXCLUSIVE INDEX_NAME TABLE_NAME 1 -DEADLOCK_ID TIMESTAMP TRANSACTION_ID default WAITING_KEY EXCLUSIVE INDEX_NAME TABLE_NAME 0 -DEADLOCK_ID TIMESTAMP TRANSACTION_ID default WAITING_KEY SHARED INDEX_NAME TABLE_NAME 1 +DEADLOCK_ID TRANSACTION_ID CF_NAME WAITING_KEY LOCK_TYPE INDEX_NAME TABLE_NAME ROLLED_BACK +DEADLOCK_ID TRANSACTION_ID default WAITING_KEY EXCLUSIVE INDEX_NAME TABLE_NAME 0 +DEADLOCK_ID TRANSACTION_ID default WAITING_KEY EXCLUSIVE INDEX_NAME TABLE_NAME 1 +DEADLOCK_ID TRANSACTION_ID default WAITING_KEY EXCLUSIVE INDEX_NAME TABLE_NAME 0 +DEADLOCK_ID TRANSACTION_ID default WAITING_KEY SHARED INDEX_NAME TABLE_NAME 1 set global rocksdb_max_latest_deadlocks = 0; # Clears deadlock buffer of any existent deadlocks. set global rocksdb_max_latest_deadlocks = @prior_max_latest_deadlocks; select * from information_schema.rocksdb_deadlock; -DEADLOCK_ID TIMESTAMP TRANSACTION_ID CF_NAME WAITING_KEY LOCK_TYPE INDEX_NAME TABLE_NAME ROLLED_BACK +DEADLOCK_ID TRANSACTION_ID CF_NAME WAITING_KEY LOCK_TYPE INDEX_NAME TABLE_NAME ROLLED_BACK diff --git a/mysql-test/suite/rocksdb/t/i_s_deadlock.test b/mysql-test/suite/rocksdb/t/i_s_deadlock.test index fb462cf79f9d..e63180b23a5e 100644 --- a/mysql-test/suite/rocksdb/t/i_s_deadlock.test +++ b/mysql-test/suite/rocksdb/t/i_s_deadlock.test @@ -37,23 +37,23 @@ select * from information_schema.rocksdb_deadlock; echo Deadlock #1; --source ../include/simple_deadlock.inc connection default; ---replace_column 1 DEADLOCK_ID 2 TIMESTAMP 3 TRANSACTION_ID 5 WAITING_KEY +--replace_column 1 DEADLOCK_ID 2 TRANSACTION_ID 4 WAITING_KEY select * from information_schema.rocksdb_deadlock; echo Deadlock #2; --source ../include/simple_deadlock.inc connection default; ---replace_column 1 DEADLOCK_ID 2 TIMESTAMP 3 TRANSACTION_ID 5 WAITING_KEY +--replace_column 1 DEADLOCK_ID 2 TRANSACTION_ID 4 WAITING_KEY select * from information_schema.rocksdb_deadlock; set global rocksdb_max_latest_deadlocks = 10; echo Deadlock #3; --source ../include/simple_deadlock.inc connection default; ---replace_column 1 DEADLOCK_ID 2 TIMESTAMP 3 TRANSACTION_ID 5 WAITING_KEY +--replace_column 1 DEADLOCK_ID 2 TRANSACTION_ID 4 WAITING_KEY select * from information_schema.rocksdb_deadlock; set global rocksdb_max_latest_deadlocks = 1; ---replace_column 1 DEADLOCK_ID 2 TIMESTAMP 3 TRANSACTION_ID 5 WAITING_KEY +--replace_column 1 DEADLOCK_ID 2 TRANSACTION_ID 4 WAITING_KEY select * from information_schema.rocksdb_deadlock; connection con3; @@ -103,7 +103,7 @@ rollback; connection default; set global rocksdb_max_latest_deadlocks = 5; ---replace_column 1 DEADLOCK_ID 2 TIMESTAMP 3 TRANSACTION_ID 5 WAITING_KEY +--replace_column 1 DEADLOCK_ID 2 TRANSACTION_ID 4 WAITING_KEY select * from information_schema.rocksdb_deadlock; echo Deadlock #5; @@ -145,7 +145,7 @@ connection con3; rollback; connection default; ---replace_column 1 DEADLOCK_ID 2 TIMESTAMP 3 TRANSACTION_ID 5 WAITING_KEY +--replace_column 1 DEADLOCK_ID 2 TRANSACTION_ID 4 WAITING_KEY select * from information_schema.rocksdb_deadlock; @@ -187,7 +187,7 @@ disconnect con3; set global rocksdb_lock_wait_timeout = @prior_lock_wait_timeout; set global rocksdb_deadlock_detect = @prior_deadlock_detect; drop table t; ---replace_column 1 DEADLOCK_ID 2 TIMESTAMP 3 TRANSACTION_ID 5 WAITING_KEY 7 INDEX_NAME 8 TABLE_NAME +--replace_column 1 DEADLOCK_ID 2 TRANSACTION_ID 4 WAITING_KEY 6 INDEX_NAME 7 TABLE_NAME select * from information_schema.rocksdb_deadlock; set global rocksdb_max_latest_deadlocks = 0; --echo # Clears deadlock buffer of any existent deadlocks. diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index 905bc7bfda25..4eccef3f9aeb 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -25,7 +25,6 @@ /* C++ standard header files */ #include -#include #include #include #include @@ -3426,7 +3425,6 @@ class Rdb_snapshot_status : public Rdb_tx_list_walker { if (!path_entry.path.empty() && !path_entry.limit_exceeded) { const auto& deadlocking_txn = *(path_entry.path.end() - 1); deadlock_info.victim_trx_id = deadlocking_txn.m_txn_id; - deadlock_info.deadlock_time = path_entry.deadlock_time; } return deadlock_info; } diff --git a/storage/rocksdb/ha_rocksdb.h b/storage/rocksdb/ha_rocksdb.h index 332c97446800..a316e4334934 100644 --- a/storage/rocksdb/ha_rocksdb.h +++ b/storage/rocksdb/ha_rocksdb.h @@ -109,7 +109,6 @@ struct Rdb_deadlock_info { std::string table_name; }; std::vector path; - int64_t deadlock_time; ulonglong victim_trx_id; }; diff --git a/storage/rocksdb/rdb_i_s.cc b/storage/rocksdb/rdb_i_s.cc index afd2bc935cd7..dd5764987592 100644 --- a/storage/rocksdb/rdb_i_s.cc +++ b/storage/rocksdb/rdb_i_s.cc @@ -1551,21 +1551,19 @@ static int rdb_i_s_trx_info_init(void *const p) { namespace RDB_DEADLOCK_FIELD { enum { DEADLOCK_ID = 0, - TIMESTAMP, TRANSACTION_ID, CF_NAME, WAITING_KEY, LOCK_TYPE, INDEX_NAME, TABLE_NAME, - ROLLED_BACK, + ROLLED_BACK }; } // namespace RDB_TRX_FIELD static ST_FIELD_INFO rdb_i_s_deadlock_info_fields_info[] = { ROCKSDB_FIELD_INFO("DEADLOCK_ID", sizeof(ulonglong), MYSQL_TYPE_LONGLONG, 0), - ROCKSDB_FIELD_INFO("TIMESTAMP", sizeof(ulonglong), MYSQL_TYPE_LONGLONG, 0), ROCKSDB_FIELD_INFO("TRANSACTION_ID", sizeof(ulonglong), MYSQL_TYPE_LONGLONG, 0), ROCKSDB_FIELD_INFO("CF_NAME", NAME_LEN + 1, MYSQL_TYPE_STRING, 0), @@ -1610,11 +1608,8 @@ static int rdb_i_s_deadlock_info_fill_table( ulonglong id = 0; for (const auto &info : all_dl_info) { - auto deadlock_time = info.deadlock_time; for (const auto &trx_info : info.path) { tables->table->field[RDB_DEADLOCK_FIELD::DEADLOCK_ID]->store(id, true); - tables->table->field[RDB_DEADLOCK_FIELD::TIMESTAMP]->store(deadlock_time, - true); tables->table->field[RDB_DEADLOCK_FIELD::TRANSACTION_ID]->store( trx_info.trx_id, true); tables->table->field[RDB_DEADLOCK_FIELD::CF_NAME]->store( From bd502190f8d7fd7d8c4175aea9e483a2e4c04514 Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Tue, 20 Nov 2018 12:48:19 +0100 Subject: [PATCH 1202/1221] PS-4951: Post push fix. Many libc-related Valgrind errors on CentOS7 (5.7) Add support for a different valgrind or glibc version that reports: `(below main) (libc-start.c:287)` instead of `main (main.cc:30)`. This patch fixes issues with debian:jessie. --- mysql-test/valgrind.supp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mysql-test/valgrind.supp b/mysql-test/valgrind.supp index 888c194b1283..539682fdab7d 100644 --- a/mysql-test/valgrind.supp +++ b/mysql-test/valgrind.supp @@ -1800,5 +1800,5 @@ fun:exit fun:*mysqld_exit* fun:*mysqld_main* - fun:main + fun:*main* } From 8800af541d5660a5849d1728776075c191dc9221 Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Mon, 19 Nov 2018 15:19:26 -0700 Subject: [PATCH 1203/1221] PS-5049 : Bad rocksdb submodule leads to critical runaway memory usage. Revert "PS-4905 : Merge MyRocks prod201810" This reverts commit e67710e281fedfd217f9943c4cdb861bb2bfb0a4. (cherry picked from commit 1ff66fffec8a7bff1200e7491a090bd83151004d) --- storage/rocksdb/rocksdb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage/rocksdb/rocksdb b/storage/rocksdb/rocksdb index c190eb57ba07..dc4ac5ffa670 160000 --- a/storage/rocksdb/rocksdb +++ b/storage/rocksdb/rocksdb @@ -1 +1 @@ -Subproject commit c190eb57ba07b3aaf8cd1f3f99fd64da1b93ab1f +Subproject commit dc4ac5ffa6708dae4ab70d6fe24b946cca0d20a5 From 4b9fc4dcf8acf454de5a8aee7349b0f3a9e5ca20 Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Mon, 19 Nov 2018 15:20:17 -0700 Subject: [PATCH 1204/1221] PS-5049 : Bad rocksdb submodule leads to critical runaway memory usage. Revert "Integrate deadlock timestamp to MySQL (#855)" This reverts commit 60cb77beb1fe9e590893cdfc50675dcd53aefd59. (cherry picked from commit 3eec5f07e5829ef55f41f82abbc96488082788b5) --- .../suite/rocksdb/r/i_s_deadlock.result | 58 +++++++++---------- mysql-test/suite/rocksdb/t/i_s_deadlock.test | 14 ++--- storage/rocksdb/ha_rocksdb.cc | 2 - storage/rocksdb/ha_rocksdb.h | 1 - storage/rocksdb/rdb_i_s.cc | 7 +-- 5 files changed, 37 insertions(+), 45 deletions(-) diff --git a/mysql-test/suite/rocksdb/r/i_s_deadlock.result b/mysql-test/suite/rocksdb/r/i_s_deadlock.result index 5193c4081085..ab4231d6a60d 100644 --- a/mysql-test/suite/rocksdb/r/i_s_deadlock.result +++ b/mysql-test/suite/rocksdb/r/i_s_deadlock.result @@ -20,7 +20,7 @@ set global rocksdb_max_latest_deadlocks = @prior_max_latest_deadlocks; create table t (i int primary key) engine=rocksdb; insert into t values (1), (2), (3); select * from information_schema.rocksdb_deadlock; -DEADLOCK_ID TIMESTAMP TRANSACTION_ID CF_NAME WAITING_KEY LOCK_TYPE INDEX_NAME TABLE_NAME ROLLED_BACK +DEADLOCK_ID TRANSACTION_ID CF_NAME WAITING_KEY LOCK_TYPE INDEX_NAME TABLE_NAME ROLLED_BACK Deadlock #1 begin; select * from t where i=1 for update; @@ -38,9 +38,9 @@ i 2 rollback; select * from information_schema.rocksdb_deadlock; -DEADLOCK_ID TIMESTAMP TRANSACTION_ID CF_NAME WAITING_KEY LOCK_TYPE INDEX_NAME TABLE_NAME ROLLED_BACK -DEADLOCK_ID TIMESTAMP TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 0 -DEADLOCK_ID TIMESTAMP TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 1 +DEADLOCK_ID TRANSACTION_ID CF_NAME WAITING_KEY LOCK_TYPE INDEX_NAME TABLE_NAME ROLLED_BACK +DEADLOCK_ID TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 0 +DEADLOCK_ID TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 1 Deadlock #2 begin; select * from t where i=1 for update; @@ -58,11 +58,11 @@ i 2 rollback; select * from information_schema.rocksdb_deadlock; -DEADLOCK_ID TIMESTAMP TRANSACTION_ID CF_NAME WAITING_KEY LOCK_TYPE INDEX_NAME TABLE_NAME ROLLED_BACK -DEADLOCK_ID TIMESTAMP TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 0 -DEADLOCK_ID TIMESTAMP TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 1 -DEADLOCK_ID TIMESTAMP TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 0 -DEADLOCK_ID TIMESTAMP TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 1 +DEADLOCK_ID TRANSACTION_ID CF_NAME WAITING_KEY LOCK_TYPE INDEX_NAME TABLE_NAME ROLLED_BACK +DEADLOCK_ID TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 0 +DEADLOCK_ID TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 1 +DEADLOCK_ID TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 0 +DEADLOCK_ID TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 1 set global rocksdb_max_latest_deadlocks = 10; Deadlock #3 begin; @@ -81,18 +81,18 @@ i 2 rollback; select * from information_schema.rocksdb_deadlock; -DEADLOCK_ID TIMESTAMP TRANSACTION_ID CF_NAME WAITING_KEY LOCK_TYPE INDEX_NAME TABLE_NAME ROLLED_BACK -DEADLOCK_ID TIMESTAMP TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 0 -DEADLOCK_ID TIMESTAMP TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 1 -DEADLOCK_ID TIMESTAMP TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 0 -DEADLOCK_ID TIMESTAMP TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 1 -DEADLOCK_ID TIMESTAMP TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 0 -DEADLOCK_ID TIMESTAMP TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 1 +DEADLOCK_ID TRANSACTION_ID CF_NAME WAITING_KEY LOCK_TYPE INDEX_NAME TABLE_NAME ROLLED_BACK +DEADLOCK_ID TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 0 +DEADLOCK_ID TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 1 +DEADLOCK_ID TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 0 +DEADLOCK_ID TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 1 +DEADLOCK_ID TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 0 +DEADLOCK_ID TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 1 set global rocksdb_max_latest_deadlocks = 1; select * from information_schema.rocksdb_deadlock; -DEADLOCK_ID TIMESTAMP TRANSACTION_ID CF_NAME WAITING_KEY LOCK_TYPE INDEX_NAME TABLE_NAME ROLLED_BACK -DEADLOCK_ID TIMESTAMP TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 0 -DEADLOCK_ID TIMESTAMP TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 1 +DEADLOCK_ID TRANSACTION_ID CF_NAME WAITING_KEY LOCK_TYPE INDEX_NAME TABLE_NAME ROLLED_BACK +DEADLOCK_ID TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 0 +DEADLOCK_ID TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 1 set rocksdb_deadlock_detect_depth = 2; Deadlock #4 begin; @@ -124,7 +124,7 @@ i rollback; set global rocksdb_max_latest_deadlocks = 5; select * from information_schema.rocksdb_deadlock; -DEADLOCK_ID TIMESTAMP TRANSACTION_ID CF_NAME WAITING_KEY LOCK_TYPE INDEX_NAME TABLE_NAME ROLLED_BACK +DEADLOCK_ID TRANSACTION_ID CF_NAME WAITING_KEY LOCK_TYPE INDEX_NAME TABLE_NAME ROLLED_BACK Deadlock #5 begin; select * from t where i=1 for update; @@ -158,9 +158,9 @@ i rollback; rollback; select * from information_schema.rocksdb_deadlock; -DEADLOCK_ID TIMESTAMP TRANSACTION_ID CF_NAME WAITING_KEY LOCK_TYPE INDEX_NAME TABLE_NAME ROLLED_BACK -DEADLOCK_ID TIMESTAMP TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 0 -DEADLOCK_ID TIMESTAMP TRANSACTION_ID default WAITING_KEY SHARED PRIMARY test.t 1 +DEADLOCK_ID TRANSACTION_ID CF_NAME WAITING_KEY LOCK_TYPE INDEX_NAME TABLE_NAME ROLLED_BACK +DEADLOCK_ID TRANSACTION_ID default WAITING_KEY EXCLUSIVE PRIMARY test.t 0 +DEADLOCK_ID TRANSACTION_ID default WAITING_KEY SHARED PRIMARY test.t 1 Deadlock #6 create table t1 (id int primary key, value int) engine=rocksdb; insert into t1 values (1,1),(2,2),(3,3),(4,4),(5,5); @@ -184,13 +184,13 @@ set global rocksdb_lock_wait_timeout = @prior_lock_wait_timeout; set global rocksdb_deadlock_detect = @prior_deadlock_detect; drop table t; select * from information_schema.rocksdb_deadlock; -DEADLOCK_ID TIMESTAMP TRANSACTION_ID CF_NAME WAITING_KEY LOCK_TYPE INDEX_NAME TABLE_NAME ROLLED_BACK -DEADLOCK_ID TIMESTAMP TRANSACTION_ID default WAITING_KEY EXCLUSIVE INDEX_NAME TABLE_NAME 0 -DEADLOCK_ID TIMESTAMP TRANSACTION_ID default WAITING_KEY EXCLUSIVE INDEX_NAME TABLE_NAME 1 -DEADLOCK_ID TIMESTAMP TRANSACTION_ID default WAITING_KEY EXCLUSIVE INDEX_NAME TABLE_NAME 0 -DEADLOCK_ID TIMESTAMP TRANSACTION_ID default WAITING_KEY SHARED INDEX_NAME TABLE_NAME 1 +DEADLOCK_ID TRANSACTION_ID CF_NAME WAITING_KEY LOCK_TYPE INDEX_NAME TABLE_NAME ROLLED_BACK +DEADLOCK_ID TRANSACTION_ID default WAITING_KEY EXCLUSIVE INDEX_NAME TABLE_NAME 0 +DEADLOCK_ID TRANSACTION_ID default WAITING_KEY EXCLUSIVE INDEX_NAME TABLE_NAME 1 +DEADLOCK_ID TRANSACTION_ID default WAITING_KEY EXCLUSIVE INDEX_NAME TABLE_NAME 0 +DEADLOCK_ID TRANSACTION_ID default WAITING_KEY SHARED INDEX_NAME TABLE_NAME 1 set global rocksdb_max_latest_deadlocks = 0; # Clears deadlock buffer of any existent deadlocks. set global rocksdb_max_latest_deadlocks = @prior_max_latest_deadlocks; select * from information_schema.rocksdb_deadlock; -DEADLOCK_ID TIMESTAMP TRANSACTION_ID CF_NAME WAITING_KEY LOCK_TYPE INDEX_NAME TABLE_NAME ROLLED_BACK +DEADLOCK_ID TRANSACTION_ID CF_NAME WAITING_KEY LOCK_TYPE INDEX_NAME TABLE_NAME ROLLED_BACK diff --git a/mysql-test/suite/rocksdb/t/i_s_deadlock.test b/mysql-test/suite/rocksdb/t/i_s_deadlock.test index fb462cf79f9d..e63180b23a5e 100644 --- a/mysql-test/suite/rocksdb/t/i_s_deadlock.test +++ b/mysql-test/suite/rocksdb/t/i_s_deadlock.test @@ -37,23 +37,23 @@ select * from information_schema.rocksdb_deadlock; echo Deadlock #1; --source ../include/simple_deadlock.inc connection default; ---replace_column 1 DEADLOCK_ID 2 TIMESTAMP 3 TRANSACTION_ID 5 WAITING_KEY +--replace_column 1 DEADLOCK_ID 2 TRANSACTION_ID 4 WAITING_KEY select * from information_schema.rocksdb_deadlock; echo Deadlock #2; --source ../include/simple_deadlock.inc connection default; ---replace_column 1 DEADLOCK_ID 2 TIMESTAMP 3 TRANSACTION_ID 5 WAITING_KEY +--replace_column 1 DEADLOCK_ID 2 TRANSACTION_ID 4 WAITING_KEY select * from information_schema.rocksdb_deadlock; set global rocksdb_max_latest_deadlocks = 10; echo Deadlock #3; --source ../include/simple_deadlock.inc connection default; ---replace_column 1 DEADLOCK_ID 2 TIMESTAMP 3 TRANSACTION_ID 5 WAITING_KEY +--replace_column 1 DEADLOCK_ID 2 TRANSACTION_ID 4 WAITING_KEY select * from information_schema.rocksdb_deadlock; set global rocksdb_max_latest_deadlocks = 1; ---replace_column 1 DEADLOCK_ID 2 TIMESTAMP 3 TRANSACTION_ID 5 WAITING_KEY +--replace_column 1 DEADLOCK_ID 2 TRANSACTION_ID 4 WAITING_KEY select * from information_schema.rocksdb_deadlock; connection con3; @@ -103,7 +103,7 @@ rollback; connection default; set global rocksdb_max_latest_deadlocks = 5; ---replace_column 1 DEADLOCK_ID 2 TIMESTAMP 3 TRANSACTION_ID 5 WAITING_KEY +--replace_column 1 DEADLOCK_ID 2 TRANSACTION_ID 4 WAITING_KEY select * from information_schema.rocksdb_deadlock; echo Deadlock #5; @@ -145,7 +145,7 @@ connection con3; rollback; connection default; ---replace_column 1 DEADLOCK_ID 2 TIMESTAMP 3 TRANSACTION_ID 5 WAITING_KEY +--replace_column 1 DEADLOCK_ID 2 TRANSACTION_ID 4 WAITING_KEY select * from information_schema.rocksdb_deadlock; @@ -187,7 +187,7 @@ disconnect con3; set global rocksdb_lock_wait_timeout = @prior_lock_wait_timeout; set global rocksdb_deadlock_detect = @prior_deadlock_detect; drop table t; ---replace_column 1 DEADLOCK_ID 2 TIMESTAMP 3 TRANSACTION_ID 5 WAITING_KEY 7 INDEX_NAME 8 TABLE_NAME +--replace_column 1 DEADLOCK_ID 2 TRANSACTION_ID 4 WAITING_KEY 6 INDEX_NAME 7 TABLE_NAME select * from information_schema.rocksdb_deadlock; set global rocksdb_max_latest_deadlocks = 0; --echo # Clears deadlock buffer of any existent deadlocks. diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index 905bc7bfda25..4eccef3f9aeb 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -25,7 +25,6 @@ /* C++ standard header files */ #include -#include #include #include #include @@ -3426,7 +3425,6 @@ class Rdb_snapshot_status : public Rdb_tx_list_walker { if (!path_entry.path.empty() && !path_entry.limit_exceeded) { const auto& deadlocking_txn = *(path_entry.path.end() - 1); deadlock_info.victim_trx_id = deadlocking_txn.m_txn_id; - deadlock_info.deadlock_time = path_entry.deadlock_time; } return deadlock_info; } diff --git a/storage/rocksdb/ha_rocksdb.h b/storage/rocksdb/ha_rocksdb.h index 332c97446800..a316e4334934 100644 --- a/storage/rocksdb/ha_rocksdb.h +++ b/storage/rocksdb/ha_rocksdb.h @@ -109,7 +109,6 @@ struct Rdb_deadlock_info { std::string table_name; }; std::vector path; - int64_t deadlock_time; ulonglong victim_trx_id; }; diff --git a/storage/rocksdb/rdb_i_s.cc b/storage/rocksdb/rdb_i_s.cc index afd2bc935cd7..dd5764987592 100644 --- a/storage/rocksdb/rdb_i_s.cc +++ b/storage/rocksdb/rdb_i_s.cc @@ -1551,21 +1551,19 @@ static int rdb_i_s_trx_info_init(void *const p) { namespace RDB_DEADLOCK_FIELD { enum { DEADLOCK_ID = 0, - TIMESTAMP, TRANSACTION_ID, CF_NAME, WAITING_KEY, LOCK_TYPE, INDEX_NAME, TABLE_NAME, - ROLLED_BACK, + ROLLED_BACK }; } // namespace RDB_TRX_FIELD static ST_FIELD_INFO rdb_i_s_deadlock_info_fields_info[] = { ROCKSDB_FIELD_INFO("DEADLOCK_ID", sizeof(ulonglong), MYSQL_TYPE_LONGLONG, 0), - ROCKSDB_FIELD_INFO("TIMESTAMP", sizeof(ulonglong), MYSQL_TYPE_LONGLONG, 0), ROCKSDB_FIELD_INFO("TRANSACTION_ID", sizeof(ulonglong), MYSQL_TYPE_LONGLONG, 0), ROCKSDB_FIELD_INFO("CF_NAME", NAME_LEN + 1, MYSQL_TYPE_STRING, 0), @@ -1610,11 +1608,8 @@ static int rdb_i_s_deadlock_info_fill_table( ulonglong id = 0; for (const auto &info : all_dl_info) { - auto deadlock_time = info.deadlock_time; for (const auto &trx_info : info.path) { tables->table->field[RDB_DEADLOCK_FIELD::DEADLOCK_ID]->store(id, true); - tables->table->field[RDB_DEADLOCK_FIELD::TIMESTAMP]->store(deadlock_time, - true); tables->table->field[RDB_DEADLOCK_FIELD::TRANSACTION_ID]->store( trx_info.trx_id, true); tables->table->field[RDB_DEADLOCK_FIELD::CF_NAME]->store( From 7e2732e647aad623319ffdac93c8579a4f37cdee Mon Sep 17 00:00:00 2001 From: Evgeniy Patlan Date: Tue, 20 Nov 2018 18:59:07 +0200 Subject: [PATCH 1205/1221] Update version --- VERSION | 2 +- storage/innobase/include/univ.i | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/VERSION b/VERSION index 4dd2cfafc861..c15a03c3f084 100644 --- a/VERSION +++ b/VERSION @@ -1,4 +1,4 @@ MYSQL_VERSION_MAJOR=5 MYSQL_VERSION_MINOR=7 MYSQL_VERSION_PATCH=23 -MYSQL_VERSION_EXTRA=-24 +MYSQL_VERSION_EXTRA=-25 diff --git a/storage/innobase/include/univ.i b/storage/innobase/include/univ.i index cd8fbfa10530..7490f9e0ad86 100644 --- a/storage/innobase/include/univ.i +++ b/storage/innobase/include/univ.i @@ -47,7 +47,7 @@ Created 1/20/1994 Heikki Tuuri #define INNODB_VERSION_BUGFIX MYSQL_VERSION_PATCH #ifndef PERCONA_INNODB_VERSION -#define PERCONA_INNODB_VERSION 24 +#define PERCONA_INNODB_VERSION 25 #endif /* The following is the InnoDB version as shown in From 70ca87034ed534230ffab49a760dbb995003da4a Mon Sep 17 00:00:00 2001 From: Borys Belinsky Date: Wed, 21 Nov 2018 14:50:17 +0200 Subject: [PATCH 1206/1221] Release notes for Percona Server 5.5.62-38.14 Added the release notes for 5.5.61-38.13 after detecting that they were missing --- doc/source/conf.py | 2 +- .../Percona-Server-5.5.61-38.13.rst | 38 ++++++++++++++++ .../Percona-Server-5.5.62-38.14.rst | 44 +++++++++++++++++++ .../release-notes/release-notes_index.rst | 2 + 4 files changed, 85 insertions(+), 1 deletion(-) create mode 100644 doc/source/release-notes/Percona-Server-5.5.61-38.13.rst create mode 100644 doc/source/release-notes/Percona-Server-5.5.62-38.14.rst diff --git a/doc/source/conf.py b/doc/source/conf.py index 6c6b6205cbfc..900ef9a7c420 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -54,7 +54,7 @@ # The short X.Y version. version = '5.5' # The full version, including alpha/beta/rc tags. -release = '5.5.60-38.12' +release = '5.5.62-38.14' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/doc/source/release-notes/Percona-Server-5.5.61-38.13.rst b/doc/source/release-notes/Percona-Server-5.5.61-38.13.rst new file mode 100644 index 000000000000..b240a76f9dcd --- /dev/null +++ b/doc/source/release-notes/Percona-Server-5.5.61-38.13.rst @@ -0,0 +1,38 @@ +.. rn:: 5.5.61-38.13 + +================================================================================ +|Percona Server| |release| +================================================================================ + +Percona announces the release of `Percona Server for MySQL +`_ |release| on +August 17, 2018 (downloads are available `here +`_ and from the `Percona +Software Repositories +`_). This +release merges changes of `MySQL 5.5.61 +`_, including +all the bug fixes in it. Percona Server for MySQL |release| is now the current +GA release in the 5.5 series. All of Percona’s software is open-source and free. + +Bugs Fixed +================================================================================ + +- The ``--innodb-optimize-keys`` option of the ``mysqldump`` utility fails when + a column name is used as a prefix of a column which has the ``AUTO_INCREMENT`` + attribute. Bug fixed :psbug:`4524`. + +Other Bugs Fixed: + +- :psbug:`4566`: "``stack-use-after-scope`` in ``reinit_io_cache()``" (upstream :mysqlbug:`91603`) +- :psbug:`4581`: "``stack-use-after-scope`` in ``_db_enter_()`` / ``mysql_select_db()``" (upstream :mysqlbug:`91604`) +- :psbug:`4600`: "``stack-use-after-scope`` in ``_db_enter_()`` / ``get_upgrade_info_file_name()``" (upstream :mysqlbug:`91617`) +- :psbug:`3976`: "Errors in MTR tests ``main.variables-big``, ``main.information_schema-big``, ``innodb.innodb_bug14676111``" + +Find the release notes for Percona Server for MySQL |release| in our `online +documentation +`_. Report +bugs in the `Jira bug tracker `_. + + +.. |release| replace:: 5.5.61-38.13 diff --git a/doc/source/release-notes/Percona-Server-5.5.62-38.14.rst b/doc/source/release-notes/Percona-Server-5.5.62-38.14.rst new file mode 100644 index 000000000000..fcf3d6b7dcd7 --- /dev/null +++ b/doc/source/release-notes/Percona-Server-5.5.62-38.14.rst @@ -0,0 +1,44 @@ +.. rn:: 5.5.62-38.14 + +================================================================================ +|Percona Server| |release| +================================================================================ + +Percona announces the release of `Percona Server for MySQL +`_ |release| on +November 21, 2018 (downloads are available `here +`_ and from the `Percona +Software Repositories +`_). This +release merges changes of MySQL 5.5.62, including all the bug fixes in +it. Percona Server for MySQL |release| is now the current GA release in the 5.5 +series. All of Percona’s software is open-source and free. + +Note that Percona Server for MySQL |release| is the last release of the 5.5 +series. This series goes EOL on December 1st, 2018. + +Improvements +================================================================================ + +- :psbug:`4790`: The accuracy of user statistics has been improved + +Bugs Fixed +================================================================================ + +- The binary log could be corrupted when the disk partition used for temporary + files (tmpdir system variable) had little free space. Bug fixed :psbug:`1107` +- ``PURGE CHANGED_PAGE_BITMAPS`` did not work when the ``innodb_data_home_dir`` system + variable was used. Bug fixed :psbug:`4723` + +.. rubric:: Other Bugs Fixed + +- :psbug:`4773`: Percona Server sources can't be compiled without server. +- :psbug:`4781`: ``sql_yacc.yy`` uses ``SQLCOM_SELECT`` instead of ``SQLCOM_SHOW_XXXX_STATS`` + +Find the release notes for Percona Server for MySQL |release| in our `online +documentation +`_. Report +bugs in the `Jira bug tracker `_. + + +.. |release| replace:: 5.5.61-38.13 diff --git a/doc/source/release-notes/release-notes_index.rst b/doc/source/release-notes/release-notes_index.rst index d4b12946b405..ebcd3911fe72 100644 --- a/doc/source/release-notes/release-notes_index.rst +++ b/doc/source/release-notes/release-notes_index.rst @@ -6,6 +6,8 @@ :maxdepth: 1 :glob: + Percona-Server-5.5.62-38.14 + Percona-Server-5.5.61-38.13 Percona-Server-5.5.60-38.12 Percona-Server-5.5.59-38.11 Percona-Server-5.5.58-38.10 From cbf781a13583315818b9e89c3a8424fd9cc58610 Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Wed, 21 Nov 2018 08:48:00 -0700 Subject: [PATCH 1207/1221] PS-5033 : rocksdb.show_engine: Result content mismatch - Re-recorded test that got stomped during a merge. --- mysql-test/suite/rocksdb/r/show_engine.result | 4 ---- 1 file changed, 4 deletions(-) diff --git a/mysql-test/suite/rocksdb/r/show_engine.result b/mysql-test/suite/rocksdb/r/show_engine.result index 7fd8ee68ef9a..6ad302c91d2b 100644 --- a/mysql-test/suite/rocksdb/r/show_engine.result +++ b/mysql-test/suite/rocksdb/r/show_engine.result @@ -140,7 +140,6 @@ __system__ TABLE_FACTORY::FLUSH_BLOCK_POLICY_FACTORY # __system__ TABLE_FACTORY::CACHE_INDEX_AND_FILTER_BLOCKS # __system__ TABLE_FACTORY::CACHE_INDEX_AND_FILTER_BLOCKS_WITH_HIGH_PRIORITY # __system__ TABLE_FACTORY::PIN_L0_FILTER_AND_INDEX_BLOCKS_IN_CACHE # -__system__ TABLE_FACTORY::PIN_TOP_LEVEL_INDEX_AND_FILTER # __system__ TABLE_FACTORY::INDEX_TYPE # __system__ TABLE_FACTORY::HASH_INDEX_ALLOW_COLLISION # __system__ TABLE_FACTORY::CHECKSUM # @@ -213,7 +212,6 @@ cf_t1 TABLE_FACTORY::FLUSH_BLOCK_POLICY_FACTORY # cf_t1 TABLE_FACTORY::CACHE_INDEX_AND_FILTER_BLOCKS # cf_t1 TABLE_FACTORY::CACHE_INDEX_AND_FILTER_BLOCKS_WITH_HIGH_PRIORITY # cf_t1 TABLE_FACTORY::PIN_L0_FILTER_AND_INDEX_BLOCKS_IN_CACHE # -cf_t1 TABLE_FACTORY::PIN_TOP_LEVEL_INDEX_AND_FILTER # cf_t1 TABLE_FACTORY::INDEX_TYPE # cf_t1 TABLE_FACTORY::HASH_INDEX_ALLOW_COLLISION # cf_t1 TABLE_FACTORY::CHECKSUM # @@ -286,7 +284,6 @@ default TABLE_FACTORY::FLUSH_BLOCK_POLICY_FACTORY # default TABLE_FACTORY::CACHE_INDEX_AND_FILTER_BLOCKS # default TABLE_FACTORY::CACHE_INDEX_AND_FILTER_BLOCKS_WITH_HIGH_PRIORITY # default TABLE_FACTORY::PIN_L0_FILTER_AND_INDEX_BLOCKS_IN_CACHE # -default TABLE_FACTORY::PIN_TOP_LEVEL_INDEX_AND_FILTER # default TABLE_FACTORY::INDEX_TYPE # default TABLE_FACTORY::HASH_INDEX_ALLOW_COLLISION # default TABLE_FACTORY::CHECKSUM # @@ -359,7 +356,6 @@ rev:cf_t2 TABLE_FACTORY::FLUSH_BLOCK_POLICY_FACTORY # rev:cf_t2 TABLE_FACTORY::CACHE_INDEX_AND_FILTER_BLOCKS # rev:cf_t2 TABLE_FACTORY::CACHE_INDEX_AND_FILTER_BLOCKS_WITH_HIGH_PRIORITY # rev:cf_t2 TABLE_FACTORY::PIN_L0_FILTER_AND_INDEX_BLOCKS_IN_CACHE # -rev:cf_t2 TABLE_FACTORY::PIN_TOP_LEVEL_INDEX_AND_FILTER # rev:cf_t2 TABLE_FACTORY::INDEX_TYPE # rev:cf_t2 TABLE_FACTORY::HASH_INDEX_ALLOW_COLLISION # rev:cf_t2 TABLE_FACTORY::CHECKSUM # From e7c9cfc260f2cba3364c4ed99a5e0b30d1ce51dd Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Wed, 21 Nov 2018 08:50:48 -0700 Subject: [PATCH 1208/1221] PS-5034 : rocksdb.rocksdb: Result content mismatch - Re-recorded test that was missed during feature development. --- mysql-test/suite/rocksdb/r-native-partitioning/rocksdb.result | 1 + 1 file changed, 1 insertion(+) diff --git a/mysql-test/suite/rocksdb/r-native-partitioning/rocksdb.result b/mysql-test/suite/rocksdb/r-native-partitioning/rocksdb.result index 73bac4195b6f..ecbd1b3095f6 100644 --- a/mysql-test/suite/rocksdb/r-native-partitioning/rocksdb.result +++ b/mysql-test/suite/rocksdb/r-native-partitioning/rocksdb.result @@ -966,6 +966,7 @@ rocksdb_merge_combine_read_size 1073741824 rocksdb_merge_tmp_file_removal_delay_ms 0 rocksdb_new_table_reader_for_compaction_inputs OFF rocksdb_no_block_cache OFF +rocksdb_no_create_column_family OFF rocksdb_override_cf_options rocksdb_paranoid_checks ON rocksdb_pause_background_work ON From e13e014b0f65ce4142f519a256655d6c38a8042b Mon Sep 17 00:00:00 2001 From: Yura Sorokin Date: Wed, 21 Nov 2018 19:34:48 +0200 Subject: [PATCH 1209/1221] Implemented PS-4709 (Merge MySQL 5.7.24) (reverted orphan 913071c) https://jira.percona.com/browse/PS-4709 *** Reverted orphan commit mysql/mysql-server@913071c "BUG#26848813: INDEXED COLUMN CAN'T BE CHANGED FROM VARCHAR(15) TO VARCHAR(40) INSTANTANEOUSLY" which used to be in 5.7.23 but due to 'git push --force ...' in the upstream was lost. It re-appears in 5.7.24 as mysql/mysql-server@f9064a4 "BUG#26848813: INDEXED COLUMN CAN'T BE CHANGED FROM VARCHAR(15) TO VARCHAR(40) INSTANTANEOUSLY" and mysql/mysql-server@005ef9f "Bug26848813: INDEXED COLUMN CAN'T BE CHANGED FROM VARCHAR(15) TO VARCHAR(40) INSTANTANEOUSLY". --- mysql-test/r/alter_table.result | 103 --------------- mysql-test/r/innodb_mysql_sync.result | 19 --- .../r/default_row_format_compatibility.result | 2 +- .../suite/innodb/r/innodb-large-prefix.result | 6 +- .../t/default_row_format_compatibility.test | 2 +- .../suite/innodb/t/innodb-large-prefix.test | 6 +- .../innodb_zip/r/index_large_prefix.result | 8 +- .../innodb_zip/r/index_large_prefix_4k.result | 6 +- .../innodb_zip/r/index_large_prefix_8k.result | 8 +- .../r/prefix_index_liftedlimit.result | 4 +- mysql-test/suite/innodb_zip/r/wl6469.result | 7 +- .../innodb_zip/t/index_large_prefix.test | 8 +- .../innodb_zip/t/index_large_prefix_4k.test | 6 +- .../innodb_zip/t/index_large_prefix_8k.test | 8 +- .../t/prefix_index_liftedlimit.test | 4 +- mysql-test/suite/innodb_zip/t/wl6469.test | 6 +- mysql-test/t/alter_table.test | 123 ------------------ mysql-test/t/innodb_mysql_sync.test | 28 ---- sql/ha_ndbcluster.cc | 5 +- sql/ha_ndbcluster.h | 4 +- sql/handler.cc | 3 +- sql/handler.h | 19 +-- sql/sql_table.cc | 40 ++---- sql/sql_tmp_table.cc | 4 +- storage/archive/ha_archive.h | 6 +- storage/blackhole/ha_blackhole.h | 6 +- storage/federated/ha_federated.h | 6 +- storage/heap/ha_heap.h | 5 +- storage/innobase/handler/ha_innodb.cc | 17 +-- storage/innobase/handler/ha_innodb.h | 4 +- storage/innobase/handler/handler0alter.cc | 3 +- storage/myisam/ha_myisam.cc | 3 +- storage/myisam/ha_myisam.h | 6 +- storage/myisammrg/ha_myisammrg.h | 6 +- storage/partition/ha_partition.cc | 21 +-- storage/partition/ha_partition.h | 6 +- 36 files changed, 87 insertions(+), 431 deletions(-) diff --git a/mysql-test/r/alter_table.result b/mysql-test/r/alter_table.result index 459ded4ae553..f91e0b3bf60a 100644 --- a/mysql-test/r/alter_table.result +++ b/mysql-test/r/alter_table.result @@ -3683,106 +3683,3 @@ ERROR 22004: Invalid use of NULL value ALTER TABLE t2 MODIFY fld0 POINT NOT NULL; ERROR 22004: Invalid use of NULL value DROP TABLE t1, t2; -# -# BUG#26848813: INDEXED COLUMN CAN'T BE CHANGED FROM VARCHAR(15) -# TO VARCHAR(40) INSTANTANEOUSLY -SET @orig_sql_mode= @@sql_mode; -SET @orig_innodb_large_prefix= @@global.innodb_large_prefix; -SET GLOBAL innodb_large_prefix= ON; -Warnings: -Warning 131 Using innodb_large_prefix is deprecated and the parameter may be removed in future releases. See http://dev.mysql.com/doc/refman/5.7/en/innodb-file-format.html -# Tests where an error is reported under strict mode when the index -# limit exceeds the maximum supported length by SE. -CREATE TABLE t1 (fld1 VARCHAR(768), KEY(fld1)) CHARSET latin1 ENGINE =InnoDB -ROW_FORMAT= COMPACT; -ERROR 42000: Specified key was too long; max key length is 767 bytes -CREATE TABLE t2 (fld1 VARCHAR(3073), KEY(fld1)) CHARSET latin1 ENGINE= InnoDB; -ERROR 42000: Specified key was too long; max key length is 3072 bytes -# Test with innodb prefix indexes where the index limit is 767 bytes -CREATE TABLE t1 (fld1 VARCHAR(767), KEY(fld1)) CHARSET latin1 ENGINE=INNODB -ROW_FORMAT=COMPACT; -ALTER TABLE t1 MODIFY fld1 VARCHAR(768), ALGORITHM= INPLACE; -ERROR 42000: Specified key was too long; max key length is 767 bytes -ALTER TABLE t1 MODIFY fld1 VARCHAR(768), ALGORITHM= COPY; -ERROR 42000: Specified key was too long; max key length is 767 bytes -# Test with innodb prefix indexes where the index limit is 3072 bytes -CREATE TABLE t2 (fld1 VARCHAR(3072), KEY(fld1)) CHARSET latin1 ENGINE=INNODB -ROW_FORMAT=DYNAMIC; -ALTER TABLE t2 MODIFY fld1 VARCHAR(3073), ALGORITHM= INPLACE; -ERROR 42000: Specified key was too long; max key length is 3072 bytes -ALTER TABLE t2 MODIFY fld1 VARCHAR(3073), ALGORITHM= COPY; -ERROR 42000: Specified key was too long; max key length is 3072 bytes -# Tests with innodb_large_prefix disabled and strict mode. -SET GLOBAL innodb_large_prefix= OFF; -Warnings: -Warning 131 Using innodb_large_prefix is deprecated and the parameter may be removed in future releases. See http://dev.mysql.com/doc/refman/5.7/en/innodb-file-format.html -CREATE TABLE t3 (fld1 VARCHAR(3072), KEY(fld1)) CHARSET latin1 ENGINE= InnoDB; -ERROR 42000: Specified key was too long; max key length is 767 bytes -DROP TABLE t1, t2; -SET sql_mode= ''; -Warnings: -Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. -SET GLOBAL innodb_large_prefix= ON; -Warnings: -Warning 131 Using innodb_large_prefix is deprecated and the parameter may be removed in future releases. See http://dev.mysql.com/doc/refman/5.7/en/innodb-file-format.html -# Test where the indexes are truncated to fit the index limit and -# a warning is reported under non-strict mode when the index exceeds -# the SE limit. -CREATE TABLE t1 (fld1 VARCHAR(768), KEY(fld1)) ENGINE= InnoDB -ROW_FORMAT=COMPACT; -Warnings: -Warning 1071 Specified key was too long; max key length is 767 bytes -CREATE TABLE t2 (fld1 VARCHAR(3073), KEY(fld1)) ENGINE= InnoDB; -Warnings: -Warning 1071 Specified key was too long; max key length is 3072 bytes -# Test with innodb prefix indexes where the index limit is 767 bytes. -CREATE TABLE t3 (fld1 VARCHAR(767), KEY(fld1))ENGINE=INNODB ROW_FORMAT=COMPACT; -ALTER TABLE t3 MODIFY fld1 VARCHAR(768), ALGORITHM= INPLACE; -Warnings: -Warning 1071 Specified key was too long; max key length is 767 bytes -ALTER TABLE t3 MODIFY fld1 VARCHAR(800), ALGORITHM= COPY; -# Test with innodb prefix indexes where the index limit is 3072 bytes. -CREATE TABLE t4 (fld1 VARCHAR(3072), KEY(fld1))ENGINE=INNODB -ROW_FORMAT=DYNAMIC; -ALTER TABLE t4 MODIFY fld1 VARCHAR(3073), ALGORITHM= INPLACE; -Warnings: -Warning 1071 Specified key was too long; max key length is 3072 bytes -ALTER TABLE t4 MODIFY fld1 VARCHAR(3074), ALGORITHM= COPY; -# For unique and primary keys, an error is reported even in non-strict -# mode. -CREATE TABLE t5(fld1 VARCHAR(768) PRIMARY KEY) ENGINE= InnoDB -ROW_FORMAT=COMPACT; -ERROR 42000: Specified key was too long; max key length is 767 bytes -CREATE TABLE t5(fld1 VARCHAR(3073), UNIQUE KEY(fld1)) ENGINE= InnoDB; -ERROR 42000: Specified key was too long; max key length is 3072 bytes -# Tests with innodb_large_prefix disabled and strict mode. -SET GLOBAL innodb_large_prefix= OFF; -Warnings: -Warning 131 Using innodb_large_prefix is deprecated and the parameter may be removed in future releases. See http://dev.mysql.com/doc/refman/5.7/en/innodb-file-format.html -CREATE TABLE t5 (fld1 VARCHAR(3072), KEY(fld1)) CHARSET latin1 ENGINE= InnoDB; -Warnings: -Warning 1071 Specified key was too long; max key length is 767 bytes -DROP TABLE t1, t2, t3, t4, t5; -SET sql_mode= @orig_sql_mode; -SET GLOBAL innodb_large_prefix= ON; -# Tests added for coverage. -CREATE TABLE t1(fld1 VARCHAR(3), KEY(fld1)) ENGINE=MYISAM; -# Conversion of unpacked keys to packed keys reports -# error for INPLACE Alter. -ALTER TABLE t1 MODIFY fld1 VARCHAR(10), ALGORITHM=INPLACE; -ERROR 0A000: ALGORITHM=INPLACE is not supported for this operation. Try ALGORITHM=COPY. -# Succeeds with index rebuild. -ALTER TABLE t1 MODIFY fld1 VARCHAR(10), ALGORITHM=COPY; -# Succeeds since the row format is dynamic. -CREATE TABLE t2(fld1 VARCHAR(768), KEY(fld1)) ENGINE= InnoDB ROW_FORMAT= DYNAMIC; -# An error is reported when the index exceeds the column size -# in both strict and non-strict mode. -ALTER TABLE t2 ADD INDEX idx1(fld1(769)); -ERROR HY000: Incorrect prefix key; the used key part isn't a string, the used length is longer than the key part, or the storage engine doesn't support unique prefix keys -SET sql_mode= ''; -ALTER TABLE t2 ADD INDEX idx1(fld1(769)); -ERROR HY000: Incorrect prefix key; the used key part isn't a string, the used length is longer than the key part, or the storage engine doesn't support unique prefix keys -# Cleanup. -DROP TABLE t1, t2; -SET sql_mode= @orig_sql_mode; -SET GLOBAL innodb_large_prefix= @orig_innodb_large_prefix; diff --git a/mysql-test/r/innodb_mysql_sync.result b/mysql-test/r/innodb_mysql_sync.result index 960aec1a3d15..3a400e484f7c 100644 --- a/mysql-test/r/innodb_mysql_sync.result +++ b/mysql-test/r/innodb_mysql_sync.result @@ -746,22 +746,3 @@ ALTER TABLE t1 MODIFY fld1 CHAR(20); #cleanup DROP TABLE t1; SET debug="-d,innodb_index_drop_count_zero"; -# -# BUG#26848813: INDEXED COLUMN CAN'T BE CHANGED FROM VARCHAR(15) -# TO VARCHAR(40) INSTANTANEOUSLY -CREATE TABLE t1(fld1 VARCHAR(5), KEY(fld1)) ENGINE= InnoDB; -SET DEBUG="+d,innodb_index_drop_count_zero"; -# Without patch, an error is reported. -ALTER TABLE t1 MODIFY fld1 VARCHAR(7), ALGORITHM= INPLACE; -# Scenario where non-packed keys is converted to packed keys -# before the patch, an error is reported. -ALTER TABLE t1 MODIFY fld1 VARCHAR(9), ALGORITHM= INPLACE; -SET DEBUG="-d,innodb_index_drop_count_zero"; -# Tests added for covering cases where rebuild is required. -# Reducing the size of the field. -ALTER TABLE t1 MODIFY fld1 VARCHAR(3), ALGORITHM= INPLACE; -ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY. -# Increasing the size of the field to boundary condition. -ALTER TABLE t1 MODIFY fld1 VARCHAR(256), ALGORITHM= INPLACE; -ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY. -DROP TABLE t1; diff --git a/mysql-test/suite/innodb/r/default_row_format_compatibility.result b/mysql-test/suite/innodb/r/default_row_format_compatibility.result index 72140352b00a..e98b60a9f72d 100644 --- a/mysql-test/suite/innodb/r/default_row_format_compatibility.result +++ b/mysql-test/suite/innodb/r/default_row_format_compatibility.result @@ -72,7 +72,7 @@ Table Name Tablespace Table Flags Columns Row Format Zip Size Space Type test/tab test/tab 33 5 Dynamic 0 Single SET GLOBAL innodb_default_row_format=COMPACT; ALTER TABLE tab ROW_FORMAT=COMPACT; -ERROR 42000: Specified key was too long; max key length is 767 bytes +ERROR HY000: Index column size too large. The maximum column size is 767 bytes. DROP TABLE tab; SET GLOBAL innodb_default_row_format=Default; SELECT @@innodb_default_row_format; diff --git a/mysql-test/suite/innodb/r/innodb-large-prefix.result b/mysql-test/suite/innodb/r/innodb-large-prefix.result index 311c1742870a..f691d59f56f4 100644 --- a/mysql-test/suite/innodb/r/innodb-large-prefix.result +++ b/mysql-test/suite/innodb/r/innodb-large-prefix.result @@ -5,14 +5,14 @@ CREATE TABLE t1(a int not null,key(a,a)) ENGINE=InnoDB DEFAULT CHARSET=latin1; ERROR 42S21: Duplicate column name 'a' CREATE TABLE t1(a int,b text,key(b(768))) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT; -ERROR 42000: Specified key was too long; max key length is 767 bytes +ERROR HY000: Index column size too large. The maximum column size is 767 bytes. CREATE TABLE t1(a int not null,b text) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT; INSERT INTO t1 VALUES (1,''),(2,''),(3,''),(4,''),(5,''),(6,''),(7,''); CREATE INDEX t1aa ON t1(a,a); ERROR 42S21: Duplicate column name 'a' CREATE INDEX t1b ON t1(b(768)); -ERROR 42000: Specified key was too long; max key length is 767 bytes +ERROR HY000: Index column size too large. The maximum column size is 767 bytes. SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( @@ -35,7 +35,7 @@ INSERT INTO t2 VALUES (1,''),(2,''),(3,''),(4,''),(5,''),(6,''),(7,''); CREATE INDEX t2aa ON t2(a,a); ERROR 42S21: Duplicate column name 'a' CREATE INDEX t2b ON t2(b(768)); -ERROR 42000: Specified key was too long; max key length is 767 bytes +ERROR HY000: Index column size too large. The maximum column size is 767 bytes. SELECT * FROM t2; a b 1 diff --git a/mysql-test/suite/innodb/t/default_row_format_compatibility.test b/mysql-test/suite/innodb/t/default_row_format_compatibility.test index 9753350fa27b..0fce0c4e5157 100644 --- a/mysql-test/suite/innodb/t/default_row_format_compatibility.test +++ b/mysql-test/suite/innodb/t/default_row_format_compatibility.test @@ -160,7 +160,7 @@ SELECT * FROM tab; SET GLOBAL innodb_default_row_format=COMPACT; # Check error ERROR 1709 (HY000): Index column size too large ---error ER_TOO_LONG_KEY +-- error ER_INDEX_COLUMN_TOO_LONG ALTER TABLE tab ROW_FORMAT=COMPACT; # Cleanup diff --git a/mysql-test/suite/innodb/t/innodb-large-prefix.test b/mysql-test/suite/innodb/t/innodb-large-prefix.test index b1e9b7c3cb5d..57dc11002af0 100644 --- a/mysql-test/suite/innodb/t/innodb-large-prefix.test +++ b/mysql-test/suite/innodb/t/innodb-large-prefix.test @@ -9,7 +9,7 @@ --error ER_DUP_FIELDNAME CREATE TABLE t1(a int not null,key(a,a)) ENGINE=InnoDB DEFAULT CHARSET=latin1; --- error ER_TOO_LONG_KEY +-- error ER_INDEX_COLUMN_TOO_LONG CREATE TABLE t1(a int,b text,key(b(768))) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT; CREATE TABLE t1(a int not null,b text) ENGINE=InnoDB DEFAULT CHARSET=latin1 @@ -17,7 +17,7 @@ ROW_FORMAT=COMPACT; INSERT INTO t1 VALUES (1,''),(2,''),(3,''),(4,''),(5,''),(6,''),(7,''); --error ER_DUP_FIELDNAME CREATE INDEX t1aa ON t1(a,a); --- error ER_TOO_LONG_KEY +-- error ER_INDEX_COLUMN_TOO_LONG CREATE INDEX t1b ON t1(b(768)); SHOW CREATE TABLE t1; SELECT * FROM t1; @@ -28,7 +28,7 @@ ROW_FORMAT=COMPACT; INSERT INTO t2 VALUES (1,''),(2,''),(3,''),(4,''),(5,''),(6,''),(7,''); --error ER_DUP_FIELDNAME CREATE INDEX t2aa ON t2(a,a); --- error ER_TOO_LONG_KEY +-- error ER_INDEX_COLUMN_TOO_LONG CREATE INDEX t2b ON t2(b(768)); SELECT * FROM t2; DROP TABLE t2; diff --git a/mysql-test/suite/innodb_zip/r/index_large_prefix.result b/mysql-test/suite/innodb_zip/r/index_large_prefix.result index f4a43c413a01..7f466e957f35 100644 --- a/mysql-test/suite/innodb_zip/r/index_large_prefix.result +++ b/mysql-test/suite/innodb_zip/r/index_large_prefix.result @@ -494,11 +494,11 @@ drop table worklog5743; ### Test 6 ### create table worklog5743(a TEXT not null, primary key (a(1000))) row_format=compact; -ERROR 42000: Specified key was too long; max key length is 767 bytes +ERROR HY000: Index column size too large. The maximum column size is 767 bytes. create table worklog5743(a TEXT) row_format=compact; create index idx on worklog5743(a(768)); -ERROR 42000: Specified key was too long; max key length is 767 bytes +ERROR HY000: Index column size too large. The maximum column size is 767 bytes. create index idx on worklog5743(a(767)); insert into worklog5743 values(repeat("a", 20000)); begin; @@ -546,12 +546,12 @@ drop table worklog5743; SET sql_mode= default; create table worklog5743(a TEXT not null) ROW_FORMAT=REDUNDANT; create index idx on worklog5743(a(768)); -ERROR 42000: Specified key was too long; max key length is 767 bytes +ERROR HY000: Index column size too large. The maximum column size is 767 bytes. create index idx2 on worklog5743(a(767)); drop table worklog5743; create table worklog5743(a TEXT not null) ROW_FORMAT=COMPACT; create index idx on worklog5743(a(768)); -ERROR 42000: Specified key was too long; max key length is 767 bytes +ERROR HY000: Index column size too large. The maximum column size is 767 bytes. create index idx2 on worklog5743(a(767)); drop table worklog5743; SET GLOBAL innodb_file_per_table=1; diff --git a/mysql-test/suite/innodb_zip/r/index_large_prefix_4k.result b/mysql-test/suite/innodb_zip/r/index_large_prefix_4k.result index 923e77892a7a..36d232f1e614 100644 --- a/mysql-test/suite/innodb_zip/r/index_large_prefix_4k.result +++ b/mysql-test/suite/innodb_zip/r/index_large_prefix_4k.result @@ -362,7 +362,7 @@ create table worklog5743(a TEXT not null, primary key (a(1000))); ERROR 42000: Specified key was too long; max key length is 768 bytes create table worklog5743(a TEXT) ROW_FORMAT=COMPACT; create index idx on worklog5743(a(768)); -ERROR 42000: Specified key was too long; max key length is 767 bytes +ERROR HY000: Index column size too large. The maximum column size is 767 bytes. create index idx on worklog5743(a(767)); insert into worklog5743 values(repeat("a", 20000)); begin; @@ -417,12 +417,12 @@ insert into worklog5743 values(repeat("a", 768)); drop table worklog5743; create table worklog5743(a TEXT not null) ROW_FORMAT=REDUNDANT; create index idx on worklog5743(a(768)); -ERROR 42000: Specified key was too long; max key length is 767 bytes +ERROR HY000: Index column size too large. The maximum column size is 767 bytes. create index idx2 on worklog5743(a(767)); drop table worklog5743; create table worklog5743(a TEXT not null) ROW_FORMAT=COMPACT; create index idx on worklog5743(a(768)); -ERROR 42000: Specified key was too long; max key length is 767 bytes +ERROR HY000: Index column size too large. The maximum column size is 767 bytes. create index idx2 on worklog5743(a(767)); drop table worklog5743; SET GLOBAL innodb_file_per_table=1; diff --git a/mysql-test/suite/innodb_zip/r/index_large_prefix_8k.result b/mysql-test/suite/innodb_zip/r/index_large_prefix_8k.result index f7eb850524a1..c9ee289123ee 100644 --- a/mysql-test/suite/innodb_zip/r/index_large_prefix_8k.result +++ b/mysql-test/suite/innodb_zip/r/index_large_prefix_8k.result @@ -404,10 +404,10 @@ drop table worklog5743; ### Test 6 ### create table worklog5743(a TEXT not null, primary key (a(1000))) row_format=compact; -ERROR 42000: Specified key was too long; max key length is 767 bytes +ERROR HY000: Index column size too large. The maximum column size is 767 bytes. create table worklog5743(a TEXT) row_format=compact; create index idx on worklog5743(a(768)); -ERROR 42000: Specified key was too long; max key length is 767 bytes +ERROR HY000: Index column size too large. The maximum column size is 767 bytes. create index idx on worklog5743(a(767)); insert into worklog5743 values(repeat("a", 20000)); begin; @@ -455,12 +455,12 @@ worklog5743 CREATE TABLE `worklog5743` ( drop table worklog5743; create table worklog5743(a TEXT not null) ROW_FORMAT=REDUNDANT; create index idx on worklog5743(a(768)); -ERROR 42000: Specified key was too long; max key length is 767 bytes +ERROR HY000: Index column size too large. The maximum column size is 767 bytes. create index idx2 on worklog5743(a(767)); drop table worklog5743; create table worklog5743(a TEXT not null) ROW_FORMAT=COMPACT; create index idx on worklog5743(a(768)); -ERROR 42000: Specified key was too long; max key length is 767 bytes +ERROR HY000: Index column size too large. The maximum column size is 767 bytes. create index idx2 on worklog5743(a(767)); drop table worklog5743; SET GLOBAL innodb_file_per_table=1; diff --git a/mysql-test/suite/innodb_zip/r/prefix_index_liftedlimit.result b/mysql-test/suite/innodb_zip/r/prefix_index_liftedlimit.result index fd9b2ac93c5e..fd2def62c494 100644 --- a/mysql-test/suite/innodb_zip/r/prefix_index_liftedlimit.result +++ b/mysql-test/suite/innodb_zip/r/prefix_index_liftedlimit.result @@ -30,9 +30,9 @@ col_1_varchar = REPEAT("c", 4000) 0 1 ALTER TABLE worklog5743 ROW_FORMAT=REDUNDANT; -ERROR 42000: Specified key was too long; max key length is 767 bytes +ERROR HY000: Index column size too large. The maximum column size is 767 bytes. ALTER TABLE worklog5743 ROW_FORMAT=COMPACT; -ERROR 42000: Specified key was too long; max key length is 767 bytes +ERROR HY000: Index column size too large. The maximum column size is 767 bytes. ALTER TABLE worklog5743 ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=16; DROP TABLE worklog5743; CREATE TABLE worklog5743 ( diff --git a/mysql-test/suite/innodb_zip/r/wl6469.result b/mysql-test/suite/innodb_zip/r/wl6469.result index 1c64e20e23a5..ad328188efbd 100644 --- a/mysql-test/suite/innodb_zip/r/wl6469.result +++ b/mysql-test/suite/innodb_zip/r/wl6469.result @@ -270,9 +270,8 @@ SET sql_mode = default; set global innodb_large_prefix = 1; Warnings: Warning 131 Using innodb_large_prefix is deprecated and the parameter may be removed in future releases. See http://dev.mysql.com/doc/refman/5.7/en/innodb-file-format.html -SET sql_mode='NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES'; +SET sql_mode='NO_ENGINE_SUBSTITUTION'; Warnings: -Warning 3135 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release. Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. SET innodb_strict_mode=OFF; create temporary table t ( @@ -280,7 +279,7 @@ a int not null, b blob not null, index sk (b(3021)) ) row_format = compact engine=innodb; -ERROR 42000: Specified key was too long; max key length is 767 bytes +ERROR HY000: Index column size too large. The maximum column size is 767 bytes. create temporary table t ( a int not null, b blob not null, @@ -300,7 +299,7 @@ a int not null, b blob not null, index sk (b(3021)) ) row_format = compact engine=innodb; -ERROR 42000: Specified key was too long; max key length is 767 bytes +ERROR HY000: Index column size too large. The maximum column size is 767 bytes. create temporary table t ( a int not null, b blob not null, diff --git a/mysql-test/suite/innodb_zip/t/index_large_prefix.test b/mysql-test/suite/innodb_zip/t/index_large_prefix.test index 694eb69bdd77..532ffc4b60e5 100644 --- a/mysql-test/suite/innodb_zip/t/index_large_prefix.test +++ b/mysql-test/suite/innodb_zip/t/index_large_prefix.test @@ -370,7 +370,7 @@ drop table worklog5743; -- echo ### Test 6 ### # Create a table with old format, and the limit is 768 bytes. --- error ER_TOO_LONG_KEY +-- error ER_INDEX_COLUMN_TOO_LONG create table worklog5743(a TEXT not null, primary key (a(1000))) row_format=compact; @@ -378,7 +378,7 @@ create table worklog5743(a TEXT) row_format=compact; # Excercise the column length check in ha_innobase::add_index() --- error ER_TOO_LONG_KEY +-- error ER_INDEX_COLUMN_TOO_LONG create index idx on worklog5743(a(768)); # This should be successful @@ -426,13 +426,13 @@ SET sql_mode= default; # We have a limit of 767 bytes for Antelope tables create table worklog5743(a TEXT not null) ROW_FORMAT=REDUNDANT; --- error ER_TOO_LONG_KEY +-- error ER_INDEX_COLUMN_TOO_LONG create index idx on worklog5743(a(768)); create index idx2 on worklog5743(a(767)); drop table worklog5743; create table worklog5743(a TEXT not null) ROW_FORMAT=COMPACT; --- error ER_TOO_LONG_KEY +-- error ER_INDEX_COLUMN_TOO_LONG create index idx on worklog5743(a(768)); create index idx2 on worklog5743(a(767)); drop table worklog5743; diff --git a/mysql-test/suite/innodb_zip/t/index_large_prefix_4k.test b/mysql-test/suite/innodb_zip/t/index_large_prefix_4k.test index 0d4b86d6a4de..a0229abc4f8f 100644 --- a/mysql-test/suite/innodb_zip/t/index_large_prefix_4k.test +++ b/mysql-test/suite/innodb_zip/t/index_large_prefix_4k.test @@ -334,7 +334,7 @@ create table worklog5743(a TEXT not null, primary key (a(1000))); create table worklog5743(a TEXT) ROW_FORMAT=COMPACT; # Excercise the column length check in ha_innobase::add_index() --- error ER_TOO_LONG_KEY +-- error ER_INDEX_COLUMN_TOO_LONG create index idx on worklog5743(a(768)); # This should be successful @@ -385,13 +385,13 @@ drop table worklog5743; # We have a limit of 767 bytes for Antelope tables create table worklog5743(a TEXT not null) ROW_FORMAT=REDUNDANT; --- error ER_TOO_LONG_KEY +-- error ER_INDEX_COLUMN_TOO_LONG create index idx on worklog5743(a(768)); create index idx2 on worklog5743(a(767)); drop table worklog5743; create table worklog5743(a TEXT not null) ROW_FORMAT=COMPACT; --- error ER_TOO_LONG_KEY +-- error ER_INDEX_COLUMN_TOO_LONG create index idx on worklog5743(a(768)); create index idx2 on worklog5743(a(767)); drop table worklog5743; diff --git a/mysql-test/suite/innodb_zip/t/index_large_prefix_8k.test b/mysql-test/suite/innodb_zip/t/index_large_prefix_8k.test index c940915c01ca..00a97249a957 100644 --- a/mysql-test/suite/innodb_zip/t/index_large_prefix_8k.test +++ b/mysql-test/suite/innodb_zip/t/index_large_prefix_8k.test @@ -360,14 +360,14 @@ drop table worklog5743; -- echo ### Test 6 ### # Create a table with old format, and the limit is 768 bytes. --- error ER_TOO_LONG_KEY +-- error ER_INDEX_COLUMN_TOO_LONG create table worklog5743(a TEXT not null, primary key (a(1000))) row_format=compact; create table worklog5743(a TEXT) row_format=compact; # Excercise the column length check in ha_innobase::add_index() --- error ER_TOO_LONG_KEY +-- error ER_INDEX_COLUMN_TOO_LONG create index idx on worklog5743(a(768)); # This should be successful @@ -414,13 +414,13 @@ drop table worklog5743; # We have a limit of 767 bytes for Antelope tables create table worklog5743(a TEXT not null) ROW_FORMAT=REDUNDANT; --- error ER_TOO_LONG_KEY +-- error ER_INDEX_COLUMN_TOO_LONG create index idx on worklog5743(a(768)); create index idx2 on worklog5743(a(767)); drop table worklog5743; create table worklog5743(a TEXT not null) ROW_FORMAT=COMPACT; --- error ER_TOO_LONG_KEY +-- error ER_INDEX_COLUMN_TOO_LONG create index idx on worklog5743(a(768)); create index idx2 on worklog5743(a(767)); drop table worklog5743; diff --git a/mysql-test/suite/innodb_zip/t/prefix_index_liftedlimit.test b/mysql-test/suite/innodb_zip/t/prefix_index_liftedlimit.test index 9c21b7982984..dfc3777c58a0 100644 --- a/mysql-test/suite/innodb_zip/t/prefix_index_liftedlimit.test +++ b/mysql-test/suite/innodb_zip/t/prefix_index_liftedlimit.test @@ -47,9 +47,9 @@ WHERE col_1_varchar = REPEAT("c", 4000) AND col_2_varchar = REPEAT("o", 4000); INSERT INTO worklog5743 VALUES(REPEAT("a", 4000),REPEAT("o", 4000)); DELETE FROM worklog5743 WHERE col_1_varchar = REPEAT("b", 4000); SELECT col_1_varchar = REPEAT("c", 4000) FROM worklog5743; ---error ER_TOO_LONG_KEY +--error ER_INDEX_COLUMN_TOO_LONG ALTER TABLE worklog5743 ROW_FORMAT=REDUNDANT; ---error ER_TOO_LONG_KEY +--error ER_INDEX_COLUMN_TOO_LONG ALTER TABLE worklog5743 ROW_FORMAT=COMPACT; ALTER TABLE worklog5743 ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=16; DROP TABLE worklog5743; diff --git a/mysql-test/suite/innodb_zip/t/wl6469.test b/mysql-test/suite/innodb_zip/t/wl6469.test index 1c49d3b1e775..ebd5f727009f 100644 --- a/mysql-test/suite/innodb_zip/t/wl6469.test +++ b/mysql-test/suite/innodb_zip/t/wl6469.test @@ -219,10 +219,10 @@ SET sql_mode = default; # set global innodb_large_prefix = 1; # -SET sql_mode='NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES'; +SET sql_mode='NO_ENGINE_SUBSTITUTION'; SET innodb_strict_mode=OFF; --disable_warnings ---error ER_TOO_LONG_KEY +--error ER_INDEX_COLUMN_TOO_LONG create temporary table t ( a int not null, b blob not null, @@ -246,7 +246,7 @@ drop table t; SET GLOBAL innodb_large_prefix=default; set global innodb_file_per_table = 0; # ---error ER_TOO_LONG_KEY +--error ER_INDEX_COLUMN_TOO_LONG create temporary table t ( a int not null, b blob not null, diff --git a/mysql-test/t/alter_table.test b/mysql-test/t/alter_table.test index e5832548829c..4b7a9aba0741 100644 --- a/mysql-test/t/alter_table.test +++ b/mysql-test/t/alter_table.test @@ -3044,126 +3044,3 @@ ALTER TABLE t1 MODIFY fld0 DATETIME NOT NULL; ALTER TABLE t2 MODIFY fld0 POINT NOT NULL; DROP TABLE t1, t2; - - ---echo # ---echo # BUG#26848813: INDEXED COLUMN CAN'T BE CHANGED FROM VARCHAR(15) ---echo # TO VARCHAR(40) INSTANTANEOUSLY - -SET @orig_sql_mode= @@sql_mode; -SET @orig_innodb_large_prefix= @@global.innodb_large_prefix; - -SET GLOBAL innodb_large_prefix= ON; - ---echo # Tests where an error is reported under strict mode when the index ---echo # limit exceeds the maximum supported length by SE. - ---error ER_TOO_LONG_KEY -CREATE TABLE t1 (fld1 VARCHAR(768), KEY(fld1)) CHARSET latin1 ENGINE =InnoDB -ROW_FORMAT= COMPACT; - ---error ER_TOO_LONG_KEY -CREATE TABLE t2 (fld1 VARCHAR(3073), KEY(fld1)) CHARSET latin1 ENGINE= InnoDB; - ---echo # Test with innodb prefix indexes where the index limit is 767 bytes -CREATE TABLE t1 (fld1 VARCHAR(767), KEY(fld1)) CHARSET latin1 ENGINE=INNODB -ROW_FORMAT=COMPACT; - ---error ER_TOO_LONG_KEY -ALTER TABLE t1 MODIFY fld1 VARCHAR(768), ALGORITHM= INPLACE; - ---error ER_TOO_LONG_KEY -ALTER TABLE t1 MODIFY fld1 VARCHAR(768), ALGORITHM= COPY; - ---echo # Test with innodb prefix indexes where the index limit is 3072 bytes -CREATE TABLE t2 (fld1 VARCHAR(3072), KEY(fld1)) CHARSET latin1 ENGINE=INNODB -ROW_FORMAT=DYNAMIC; - ---error ER_TOO_LONG_KEY -ALTER TABLE t2 MODIFY fld1 VARCHAR(3073), ALGORITHM= INPLACE; - ---error ER_TOO_LONG_KEY -ALTER TABLE t2 MODIFY fld1 VARCHAR(3073), ALGORITHM= COPY; - ---echo # Tests with innodb_large_prefix disabled and strict mode. -SET GLOBAL innodb_large_prefix= OFF; ---error ER_TOO_LONG_KEY -CREATE TABLE t3 (fld1 VARCHAR(3072), KEY(fld1)) CHARSET latin1 ENGINE= InnoDB; - -DROP TABLE t1, t2; - -SET sql_mode= ''; -SET GLOBAL innodb_large_prefix= ON; - ---enable_warnings - ---echo # Test where the indexes are truncated to fit the index limit and ---echo # a warning is reported under non-strict mode when the index exceeds ---echo # the SE limit. -CREATE TABLE t1 (fld1 VARCHAR(768), KEY(fld1)) ENGINE= InnoDB -ROW_FORMAT=COMPACT; -CREATE TABLE t2 (fld1 VARCHAR(3073), KEY(fld1)) ENGINE= InnoDB; - ---echo # Test with innodb prefix indexes where the index limit is 767 bytes. -CREATE TABLE t3 (fld1 VARCHAR(767), KEY(fld1))ENGINE=INNODB ROW_FORMAT=COMPACT; - -ALTER TABLE t3 MODIFY fld1 VARCHAR(768), ALGORITHM= INPLACE; - -ALTER TABLE t3 MODIFY fld1 VARCHAR(800), ALGORITHM= COPY; - ---echo # Test with innodb prefix indexes where the index limit is 3072 bytes. -CREATE TABLE t4 (fld1 VARCHAR(3072), KEY(fld1))ENGINE=INNODB -ROW_FORMAT=DYNAMIC; - -ALTER TABLE t4 MODIFY fld1 VARCHAR(3073), ALGORITHM= INPLACE; - -ALTER TABLE t4 MODIFY fld1 VARCHAR(3074), ALGORITHM= COPY; - ---echo # For unique and primary keys, an error is reported even in non-strict ---echo # mode. - ---error ER_TOO_LONG_KEY -CREATE TABLE t5(fld1 VARCHAR(768) PRIMARY KEY) ENGINE= InnoDB -ROW_FORMAT=COMPACT; - ---error ER_TOO_LONG_KEY -CREATE TABLE t5(fld1 VARCHAR(3073), UNIQUE KEY(fld1)) ENGINE= InnoDB; - ---echo # Tests with innodb_large_prefix disabled and strict mode. -SET GLOBAL innodb_large_prefix= OFF; -CREATE TABLE t5 (fld1 VARCHAR(3072), KEY(fld1)) CHARSET latin1 ENGINE= InnoDB; - ---disable_warnings -DROP TABLE t1, t2, t3, t4, t5; - -SET sql_mode= @orig_sql_mode; -SET GLOBAL innodb_large_prefix= ON; - ---echo # Tests added for coverage. -CREATE TABLE t1(fld1 VARCHAR(3), KEY(fld1)) ENGINE=MYISAM; - ---echo # Conversion of unpacked keys to packed keys reports ---echo # error for INPLACE Alter. ---error ER_ALTER_OPERATION_NOT_SUPPORTED -ALTER TABLE t1 MODIFY fld1 VARCHAR(10), ALGORITHM=INPLACE; - ---echo # Succeeds with index rebuild. -ALTER TABLE t1 MODIFY fld1 VARCHAR(10), ALGORITHM=COPY; - ---echo # Succeeds since the row format is dynamic. -CREATE TABLE t2(fld1 VARCHAR(768), KEY(fld1)) ENGINE= InnoDB ROW_FORMAT= DYNAMIC; - ---echo # An error is reported when the index exceeds the column size ---echo # in both strict and non-strict mode. ---error ER_WRONG_SUB_KEY -ALTER TABLE t2 ADD INDEX idx1(fld1(769)); - -SET sql_mode= ''; - ---error ER_WRONG_SUB_KEY -ALTER TABLE t2 ADD INDEX idx1(fld1(769)); - ---echo # Cleanup. -DROP TABLE t1, t2; -SET sql_mode= @orig_sql_mode; -SET GLOBAL innodb_large_prefix= @orig_innodb_large_prefix; diff --git a/mysql-test/t/innodb_mysql_sync.test b/mysql-test/t/innodb_mysql_sync.test index 166122697cdf..364e1ab926be 100644 --- a/mysql-test/t/innodb_mysql_sync.test +++ b/mysql-test/t/innodb_mysql_sync.test @@ -1098,34 +1098,6 @@ DROP TABLE t1; SET debug="-d,innodb_index_drop_count_zero"; ---echo # ---echo # BUG#26848813: INDEXED COLUMN CAN'T BE CHANGED FROM VARCHAR(15) ---echo # TO VARCHAR(40) INSTANTANEOUSLY - -CREATE TABLE t1(fld1 VARCHAR(5), KEY(fld1)) ENGINE= InnoDB; -SET DEBUG="+d,innodb_index_drop_count_zero"; - ---echo # Without patch, an error is reported. -ALTER TABLE t1 MODIFY fld1 VARCHAR(7), ALGORITHM= INPLACE; - ---echo # Scenario where non-packed keys is converted to packed keys ---echo # before the patch, an error is reported. -ALTER TABLE t1 MODIFY fld1 VARCHAR(9), ALGORITHM= INPLACE; - -SET DEBUG="-d,innodb_index_drop_count_zero"; - ---echo # Tests added for covering cases where rebuild is required. - ---echo # Reducing the size of the field. ---error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON -ALTER TABLE t1 MODIFY fld1 VARCHAR(3), ALGORITHM= INPLACE; - ---echo # Increasing the size of the field to boundary condition. ---error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON -ALTER TABLE t1 MODIFY fld1 VARCHAR(256), ALGORITHM= INPLACE; - -DROP TABLE t1; - # Check that all connections opened by test cases in this file are really # gone so execution of other tests won't be affected by their presence. --source include/wait_until_count_sessions.inc diff --git a/sql/ha_ndbcluster.cc b/sql/ha_ndbcluster.cc index a438a7f340a0..61c345f5e75b 100644 --- a/sql/ha_ndbcluster.cc +++ b/sql/ha_ndbcluster.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2004, 2018, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2004, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -13768,8 +13768,7 @@ uint ha_ndbcluster::max_supported_key_length() const { return NDB_MAX_KEY_SIZE; } -uint ha_ndbcluster::max_supported_key_part_length(HA_CREATE_INFO - *create_info MY_ATTRIBUTE((unused))) const +uint ha_ndbcluster::max_supported_key_part_length() const { return NDB_MAX_KEY_SIZE; } diff --git a/sql/ha_ndbcluster.h b/sql/ha_ndbcluster.h index 3f4cba5524a0..9d1c75575a1d 100644 --- a/sql/ha_ndbcluster.h +++ b/sql/ha_ndbcluster.h @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. 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 @@ -238,7 +238,7 @@ class ha_ndbcluster: public handler, public Partition_handler uint max_supported_keys() const; uint max_supported_key_parts() const; uint max_supported_key_length() const; - uint max_supported_key_part_length(HA_CREATE_INFO *create_info) const; + uint max_supported_key_part_length() const; virtual bool is_fk_defined_on_table_or_index(uint index); int get_child_or_parent_fk_list(THD *thd, diff --git a/sql/handler.cc b/sql/handler.cc index 28b93c8c4877..e0c9aa0637a1 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -5153,8 +5153,7 @@ handler::check_if_supported_inplace_alter(TABLE *altered_table, Alter_inplace_info::CHANGE_CREATE_OPTION | Alter_inplace_info::ALTER_RENAME | Alter_inplace_info::RENAME_INDEX | - Alter_inplace_info::ALTER_INDEX_COMMENT | - Alter_inplace_info::ALTER_COLUMN_INDEX_LENGTH; + Alter_inplace_info::ALTER_INDEX_COMMENT; /* Is there at least one operation that requires copy algorithm? */ if (ha_alter_info->handler_flags & ~inplace_offline_operations) diff --git a/sql/handler.h b/sql/handler.h index 7a654cdb3f99..2a4bad01d6c3 100644 --- a/sql/handler.h +++ b/sql/handler.h @@ -1168,9 +1168,6 @@ struct handlerton */ #define HTON_SUPPORTS_COMPRESSED_COLUMNS (1 << 14) -// Engine supports packed keys. -#define HTON_SUPPORTS_PACKED_KEYS (1 << 12) - enum enum_tx_isolation { ISO_READ_UNCOMMITTED, ISO_READ_COMMITTED, ISO_REPEATABLE_READ, ISO_SERIALIZABLE}; @@ -1483,14 +1480,6 @@ class Alter_inplace_info // New/changed virtual generated column require validation static const HA_ALTER_FLAGS VALIDATE_VIRTUAL_COLUMN = 1ULL << 41; - /** - Change in index length such that it does not require index rebuild. - For example, change in index length due to column expansion like - varchar(X) changed to varchar(X + N). - */ - static const HA_ALTER_FLAGS ALTER_COLUMN_INDEX_LENGTH = 1ULL << 42; - - /** Create options (like MAX_ROWS) for the new version of table. @@ -3324,18 +3313,16 @@ class handler :public Sql_alloc { return std::min(MAX_KEY_LENGTH, max_supported_key_length()); } - uint max_key_part_length(HA_CREATE_INFO *create_info) const + uint max_key_part_length() const { - return std::min(MAX_KEY_LENGTH, max_supported_key_part_length(create_info)); + return std::min(MAX_KEY_LENGTH, max_supported_key_part_length()); } virtual uint max_supported_record_length() const { return HA_MAX_REC_LENGTH; } virtual uint max_supported_keys() const { return 0; } virtual uint max_supported_key_parts() const { return MAX_REF_PARTS; } virtual uint max_supported_key_length() const { return MAX_KEY_LENGTH; } - virtual uint max_supported_key_part_length(HA_CREATE_INFO - *create_info MY_ATTRIBUTE((unused))) const - { return 255; } + virtual uint max_supported_key_part_length() const { return 255; } virtual uint min_record_length(uint options) const { return 1; } virtual bool low_byte_first() const { return 1; } diff --git a/sql/sql_table.cc b/sql/sql_table.cc index c1ebae0db852..dfb24cba8b5a 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -4573,11 +4573,10 @@ mysql_prepare_create_table(THD *thd, const char *error_schema_name, size_t max_field_size= blob_length_by_type(sql_field->sql_type); if (key_part_length > max_field_size || key_part_length > max_key_length || - key_part_length > file->max_key_part_length(create_info)) + key_part_length > file->max_key_part_length()) { // Given prefix length is too large, adjust it. - key_part_length= min(max_key_length, - file->max_key_part_length(create_info)); + key_part_length= min(max_key_length, file->max_key_part_length()); if (max_field_size) key_part_length= min(key_part_length, max_field_size); if (key->type & KEYTYPE_MULTIPLE) @@ -4628,10 +4627,10 @@ mysql_prepare_create_table(THD *thd, const char *error_schema_name, my_error(ER_WRONG_KEY_COLUMN, MYF(0), column->field_name.str); DBUG_RETURN(TRUE); } - if (key_part_length > file->max_key_part_length(create_info) && + if (key_part_length > file->max_key_part_length() && key->type != KEYTYPE_FULLTEXT) { - key_part_length= file->max_key_part_length(create_info); + key_part_length= file->max_key_part_length(); if (key->type & KEYTYPE_MULTIPLE) { /* not a critical problem */ @@ -4655,8 +4654,7 @@ mysql_prepare_create_table(THD *thd, const char *error_schema_name, } key_part_info->length= (uint16) key_part_length; /* Use packed keys for long strings on the first column */ - if ((create_info->db_type->flags & HTON_SUPPORTS_PACKED_KEYS) && - !((*db_options) & HA_OPTION_NO_PACK_KEYS) && + if (!((*db_options) & HA_OPTION_NO_PACK_KEYS) && !((create_info->table_options & HA_OPTION_NO_PACK_KEYS)) && (key_part_length >= KEY_DEFAULT_PACK_LENGTH && (sql_field->sql_type == MYSQL_TYPE_STRING || @@ -6581,30 +6579,18 @@ static bool has_index_def_changed(Alter_inplace_info *ha_alter_info, key_part < end; key_part++, new_part++) { - - new_field= get_field_by_index(alter_info, new_part->fieldnr); - /* - If there is a change in index length due to column expansion - like varchar(X) changed to varchar(X + N) and has a compatible - packed data representation, we mark it for fast/INPLACE change - in index definition. Some engines like InnoDB supports INPLACE - alter for such cases. - - In other cases, key definition has changed if we are using a - different field or if the used key part length is different, or - key part direction has changed. + Key definition has changed if we are using a different field or + if the used key part length is different. It makes sense to + check lengths first as in case when fields differ it is likely + that lengths differ too and checking fields is more expensive + in general case. */ - if (key_part->length != new_part->length && - ha_alter_info->alter_info->flags == Alter_info::ALTER_CHANGE_COLUMN && - (key_part->field->is_equal((Create_field *)new_field) == IS_EQUAL_PACK_LENGTH)) - { - ha_alter_info->handler_flags|= - Alter_inplace_info::ALTER_COLUMN_INDEX_LENGTH; - } - else if (key_part->length != new_part->length) + if (key_part->length != new_part->length) return true; + new_field= get_field_by_index(alter_info, new_part->fieldnr); + /* For prefix keys KEY_PART_INFO::field points to cloned Field object with adjusted length. So below we have to check field diff --git a/sql/sql_tmp_table.cc b/sql/sql_tmp_table.cc index d1e9ccc94ada..005370892e9a 100644 --- a/sql/sql_tmp_table.cc +++ b/sql/sql_tmp_table.cc @@ -469,7 +469,7 @@ void Cache_temp_engine_properties::init(THD *thd) db_plugin= ha_lock_engine(0, heap_hton); handler= get_new_handler((TABLE_SHARE *)0, thd->mem_root, heap_hton); HEAP_MAX_KEY_LENGTH= handler->max_key_length(); - HEAP_MAX_KEY_PART_LENGTH= handler->max_key_part_length(0); + HEAP_MAX_KEY_PART_LENGTH= handler->max_key_part_length(); HEAP_MAX_KEY_PARTS= handler->max_key_parts(); delete handler; plugin_unlock(0, db_plugin); @@ -477,7 +477,7 @@ void Cache_temp_engine_properties::init(THD *thd) db_plugin= ha_lock_engine(0, myisam_hton); handler= get_new_handler((TABLE_SHARE *)0, thd->mem_root, myisam_hton); MYISAM_MAX_KEY_LENGTH= handler->max_key_length(); - MYISAM_MAX_KEY_PART_LENGTH= handler->max_key_part_length(0); + MYISAM_MAX_KEY_PART_LENGTH= handler->max_key_part_length(); MYISAM_MAX_KEY_PARTS= handler->max_key_parts(); delete handler; plugin_unlock(0, db_plugin); diff --git a/storage/archive/ha_archive.h b/storage/archive/ha_archive.h index 670254c58869..e3b508906425 100644 --- a/storage/archive/ha_archive.h +++ b/storage/archive/ha_archive.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. 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 @@ -118,9 +118,7 @@ class ha_archive: public handler ulonglong *nb_reserved_values); uint max_supported_keys() const { return 1; } uint max_supported_key_length() const { return sizeof(ulonglong); } - uint max_supported_key_part_length(HA_CREATE_INFO - *create_info MY_ATTRIBUTE((unused))) const - { return sizeof(ulonglong); } + uint max_supported_key_part_length() const { return sizeof(ulonglong); } virtual int records(ha_rows *num_rows) { *num_rows= share->rows_recorded; diff --git a/storage/blackhole/ha_blackhole.h b/storage/blackhole/ha_blackhole.h index b1cfadc6c668..634c717394a0 100644 --- a/storage/blackhole/ha_blackhole.h +++ b/storage/blackhole/ha_blackhole.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2005, 2018, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. 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 @@ -70,9 +70,7 @@ class ha_blackhole: public handler #define BLACKHOLE_MAX_KEY_LENGTH 3500 /* Like in InnoDB */ uint max_supported_keys() const { return BLACKHOLE_MAX_KEY; } uint max_supported_key_length() const { return BLACKHOLE_MAX_KEY_LENGTH; } - uint max_supported_key_part_length(HA_CREATE_INFO - *create_info MY_ATTRIBUTE((unused))) const - { return BLACKHOLE_MAX_KEY_LENGTH; } + uint max_supported_key_part_length() const { return BLACKHOLE_MAX_KEY_LENGTH; } int open(const char *name, int mode, uint test_if_locked); int close(void); int truncate(); diff --git a/storage/federated/ha_federated.h b/storage/federated/ha_federated.h index 650a19df2d3a..f60aa79967ca 100644 --- a/storage/federated/ha_federated.h +++ b/storage/federated/ha_federated.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2004, 2018, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2004, 2014, Oracle and/or its affiliates. All rights reserved. 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 @@ -168,9 +168,7 @@ class ha_federated: public handler uint max_supported_keys() const { return MAX_KEY; } uint max_supported_key_parts() const { return MAX_REF_PARTS; } uint max_supported_key_length() const { return FEDERATED_MAX_KEY_LENGTH; } - uint max_supported_key_part_length(HA_CREATE_INFO - *create_info MY_ATTRIBUTE((unused))) const - { return FEDERATED_MAX_KEY_LENGTH; } + uint max_supported_key_part_length() const { return FEDERATED_MAX_KEY_LENGTH; } /* Called in test_quick_select to determine if indexes should be used. Normally, we need to know number of blocks . For federated we need to diff --git a/storage/heap/ha_heap.h b/storage/heap/ha_heap.h index 5fbf4a93ce07..f88323731b0b 100644 --- a/storage/heap/ha_heap.h +++ b/storage/heap/ha_heap.h @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. 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 @@ -61,8 +61,7 @@ class ha_heap: public handler const key_map *keys_to_use_for_scanning() { return &btree_keys; } uint max_supported_keys() const { return HP_MAX_KEY; } uint max_supported_key_length() const { return HP_MAX_KEY_LENGTH; } - uint max_supported_key_part_length(HA_CREATE_INFO - *create_info MY_ATTRIBUTE((unused))) const + uint max_supported_key_part_length() const { return HP_MAX_KEY_LENGTH; } double scan_time() { return (double) (stats.records+stats.deleted) / 20.0+10; } diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index c7852c380410..e649e8146e0e 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -7420,23 +7420,14 @@ ha_innobase::clone( uint -ha_innobase::max_supported_key_part_length(HA_CREATE_INFO *create_info) const +ha_innobase::max_supported_key_part_length() const /*==============================================*/ { /* A table format specific index column length check will be performed at ha_innobase::add_index() and row_create_index_for_mysql() */ - switch (create_info->row_type) { - case ROW_TYPE_REDUNDANT: - case ROW_TYPE_COMPACT: - return (REC_ANTELOPE_MAX_INDEX_COL_LEN - 1); - break; - default: - if (innobase_large_prefix) - return (REC_VERSION_56_MAX_INDEX_COL_LEN); - else - return (REC_ANTELOPE_MAX_INDEX_COL_LEN - 1); - } - + return(innobase_large_prefix + ? REC_VERSION_56_MAX_INDEX_COL_LEN + : REC_ANTELOPE_MAX_INDEX_COL_LEN - 1); } /******************************************************************//** diff --git a/storage/innobase/handler/ha_innodb.h b/storage/innobase/handler/ha_innodb.h index d905cbe4e0d1..a8c6c6902be6 100644 --- a/storage/innobase/handler/ha_innodb.h +++ b/storage/innobase/handler/ha_innodb.h @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2000, 2018, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2000, 2017, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -92,7 +92,7 @@ class ha_innobase: public handler uint max_supported_key_length() const; - uint max_supported_key_part_length(HA_CREATE_INFO *create_info) const; + uint max_supported_key_part_length() const; const key_map* keys_to_use_for_scanning(); diff --git a/storage/innobase/handler/handler0alter.cc b/storage/innobase/handler/handler0alter.cc index 36802c1f1719..3568e160eca6 100644 --- a/storage/innobase/handler/handler0alter.cc +++ b/storage/innobase/handler/handler0alter.cc @@ -114,8 +114,7 @@ static const Alter_inplace_info::HA_ALTER_FLAGS INNOBASE_ALTER_NOREBUILD | Alter_inplace_info::ALTER_INDEX_COMMENT | Alter_inplace_info::ADD_VIRTUAL_COLUMN | Alter_inplace_info::DROP_VIRTUAL_COLUMN - | Alter_inplace_info::ALTER_VIRTUAL_COLUMN_ORDER - | Alter_inplace_info::ALTER_COLUMN_INDEX_LENGTH; + | Alter_inplace_info::ALTER_VIRTUAL_COLUMN_ORDER; /* | Alter_inplace_info::ALTER_VIRTUAL_COLUMN_TYPE; */ struct ha_innobase_inplace_ctx : public inplace_alter_handler_ctx diff --git a/storage/myisam/ha_myisam.cc b/storage/myisam/ha_myisam.cc index 7717a02a2a2f..95a8b5f110de 100644 --- a/storage/myisam/ha_myisam.cc +++ b/storage/myisam/ha_myisam.cc @@ -2304,8 +2304,7 @@ static int myisam_init(void *p) myisam_hton->create= myisam_create_handler; myisam_hton->panic= myisam_panic; myisam_hton->close_connection= myisam_close_connection; - myisam_hton->flags= HTON_CAN_RECREATE | HTON_SUPPORT_LOG_TABLES | - HTON_SUPPORTS_PACKED_KEYS; + myisam_hton->flags= HTON_CAN_RECREATE | HTON_SUPPORT_LOG_TABLES; myisam_hton->is_supported_system_table= myisam_is_supported_system_table; main_thread_keycache_var= st_keycache_thread_var(); diff --git a/storage/myisam/ha_myisam.h b/storage/myisam/ha_myisam.h index 11890c26032b..f7794b7c85fc 100644 --- a/storage/myisam/ha_myisam.h +++ b/storage/myisam/ha_myisam.h @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. 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 @@ -83,9 +83,7 @@ class ha_myisam: public handler } uint max_supported_keys() const { return MI_MAX_KEY; } uint max_supported_key_length() const { return MI_MAX_KEY_LENGTH; } - uint max_supported_key_part_length(HA_CREATE_INFO - *create_info MY_ATTRIBUTE((unused))) const - { return MI_MAX_KEY_LENGTH; } + uint max_supported_key_part_length() const { return MI_MAX_KEY_LENGTH; } uint checksum() const; int open(const char *name, int mode, uint test_if_locked); diff --git a/storage/myisammrg/ha_myisammrg.h b/storage/myisammrg/ha_myisammrg.h index 9d201ddc769c..2f91986d1f47 100644 --- a/storage/myisammrg/ha_myisammrg.h +++ b/storage/myisammrg/ha_myisammrg.h @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. 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 @@ -99,9 +99,7 @@ class ha_myisammrg: public handler } uint max_supported_keys() const { return MI_MAX_KEY; } uint max_supported_key_length() const { return MI_MAX_KEY_LENGTH; } - uint max_supported_key_part_length(HA_CREATE_INFO - *create_info MY_ATTRIBUTE((unused))) const - { return MI_MAX_KEY_LENGTH; } + uint max_supported_key_part_length() const { return MI_MAX_KEY_LENGTH; } double scan_time() { return ulonglong2double(stats.data_file_length) / IO_SIZE + file->tables; } diff --git a/storage/partition/ha_partition.cc b/storage/partition/ha_partition.cc index c88c7d0f2336..d996c8400832 100644 --- a/storage/partition/ha_partition.cc +++ b/storage/partition/ha_partition.cc @@ -5622,21 +5622,6 @@ uint ha_partition::min_of_the_max_uint( } -uint ha_partition::min_of_the_max_uint(HA_CREATE_INFO *create_info, - uint (handler::*operator_func)(HA_CREATE_INFO *) const) const -{ - handler **file; - uint min_of_the_max= ((*m_file)->*operator_func)(create_info); - - for (file= m_file+1; *file; file++) - { - uint tmp= ((*file)->*operator_func)(create_info); - set_if_smaller(min_of_the_max, tmp); - } - return min_of_the_max; -} - - uint ha_partition::max_supported_key_parts() const { return min_of_the_max_uint(&handler::max_supported_key_parts); @@ -5649,11 +5634,9 @@ uint ha_partition::max_supported_key_length() const } -uint ha_partition::max_supported_key_part_length(HA_CREATE_INFO - *create_info) const +uint ha_partition::max_supported_key_part_length() const { - return - min_of_the_max_uint(create_info, &handler::max_supported_key_part_length); + return min_of_the_max_uint(&handler::max_supported_key_part_length); } diff --git a/storage/partition/ha_partition.h b/storage/partition/ha_partition.h index b1d0f989fa74..36ed57b3f8b3 100644 --- a/storage/partition/ha_partition.h +++ b/storage/partition/ha_partition.h @@ -2,7 +2,7 @@ #define HA_PARTITION_INCLUDED /* - Copyright (c) 2005, 2018, Oracle and/or its affiliates. All rights reserved. + Copyright (c) 2005, 2017, Oracle and/or its affiliates. All rights reserved. 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 @@ -916,13 +916,11 @@ class ha_partition : The maximum supported values is the minimum of all handlers in the table */ uint min_of_the_max_uint(uint (handler::*operator_func)(void) const) const; - uint min_of_the_max_uint(HA_CREATE_INFO *create_info, - uint (handler::*operator_func)(HA_CREATE_INFO *) const) const; virtual uint max_supported_record_length() const; virtual uint max_supported_keys() const; virtual uint max_supported_key_parts() const; virtual uint max_supported_key_length() const; - virtual uint max_supported_key_part_length(HA_CREATE_INFO *create_info) const; + virtual uint max_supported_key_part_length() const; /* All handlers in a partitioned table must have the same low_byte_first From 7e88b08786d6a7a7ff7dbbd108c79e9dea18fafe Mon Sep 17 00:00:00 2001 From: Yura Sorokin Date: Wed, 21 Nov 2018 19:37:42 +0200 Subject: [PATCH 1210/1221] Implemented PS-4709 (Merge MySQL 5.7.24) (reverted orphan 3e38cf4) https://jira.percona.com/browse/PS-4709 *** Reverted orphan commit mysql/mysql-server@3e38cf4 "BUG#26225783 MYSQL CRASH ON CREATE TABLE (REPRODUCEABLE) -> INNODB: A LONG SEMAPHORE WAIT" which used to be in 5.7.23 but due to 'git push --force ...' in the upstream was lost. It re-appears in 5.7.24 as mysql/mysql-server@af43dc2 "BUG#26225783 MYSQL CRASH ON CREATE TABLE (REPRODUCEABLE) -> INNODB: A LONG SEMAPHORE WAIT". --- storage/innobase/btr/btr0cur.cc | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/storage/innobase/btr/btr0cur.cc b/storage/innobase/btr/btr0cur.cc index 92f4c41803d7..1b64d01549b3 100644 --- a/storage/innobase/btr/btr0cur.cc +++ b/storage/innobase/btr/btr0cur.cc @@ -5380,7 +5380,7 @@ btr_cur_pessimistic_delete( ulint level; mem_heap_t* heap; ulint* offsets; - bool allow_merge = true; /* if true, implies we have taken appropriate page + bool allow_merge;/* if true, implies we have taken appropriate page latches needed to merge this page.*/ #ifdef UNIV_DEBUG bool parent_latched = false; @@ -5534,10 +5534,7 @@ btr_cur_pessimistic_delete( btr_search_update_hash_on_delete(cursor); - if (page_is_leaf(page) || dict_index_is_spatial(index)) { - /* Set allow merge to true for spatial indexes as the tree is X - locked incase of delete operation on spatial indexes thus avoiding - possibility of upward locking.*/ + if (page_is_leaf(page)) { allow_merge = true; } else { allow_merge = btr_cur_will_modify_tree(index,page,BTR_INTENTION_DELETE, From ec98922f25518eb105739aa33d9351f3ee38af3d Mon Sep 17 00:00:00 2001 From: Yura Sorokin Date: Wed, 21 Nov 2018 21:37:05 +0200 Subject: [PATCH 1211/1221] Implemented PS-4709 (Merge MySQL 5.7.24) (docs) https://jira.percona.com/browse/PS-4709 *** Updated man pages from MySQL Server 5.7.24 source tarball. *** Updated 'scripts/fill_help_tables.sql' from MySQL Server 5.7.24 source tarball. --- man/comp_err.1 | 6 +- man/innochecksum.1 | 14 +- man/lz4_decompress.1 | 4 +- man/my_print_defaults.1 | 4 +- man/myisam_ftdump.1 | 4 +- man/myisamchk.1 | 4 +- man/myisamlog.1 | 4 +- man/myisampack.1 | 4 +- man/mysql.1 | 225 ++++++++++++++++---- man/mysql.server.1 | 12 +- man/mysql_config.1 | 4 +- man/mysql_config_editor.1 | 30 +-- man/mysql_install_db.1 | 4 +- man/mysql_plugin.1 | 4 +- man/mysql_secure_installation.1 | 4 +- man/mysql_ssl_rsa_setup.1 | 6 +- man/mysql_tzinfo_to_sql.1 | 4 +- man/mysql_upgrade.1 | 50 ++++- man/mysqladmin.1 | 4 +- man/mysqlbinlog.1 | 367 ++------------------------------ man/mysqlcheck.1 | 6 +- man/mysqld.8 | 4 +- man/mysqld_multi.1 | 4 +- man/mysqld_safe.1 | 12 +- man/mysqldump.1 | 20 +- man/mysqlimport.1 | 4 +- man/mysqlpump.1 | 10 +- man/mysqlshow.1 | 4 +- man/mysqlslap.1 | 4 +- man/ndb-common-options.1 | 54 ++--- man/ndb_blob_tool.1 | 16 +- man/ndb_config.1 | 68 ++---- man/ndb_cpcd.1 | 4 +- man/ndb_delete_all.1 | 6 +- man/ndb_desc.1 | 6 +- man/ndb_drop_index.1 | 8 +- man/ndb_drop_table.1 | 6 +- man/ndb_error_reporter.1 | 14 +- man/ndb_import.1 | 336 ++++++++++++++--------------- man/ndb_index_stat.1 | 34 +-- man/ndb_mgm.1 | 24 +-- man/ndb_mgmd.8 | 40 ++-- man/ndb_move_data.1 | 26 +-- man/ndb_perror.1 | 16 +- man/ndb_print_backup_file.1 | 4 +- man/ndb_print_file.1 | 4 +- man/ndb_print_frag_file.1 | 4 +- man/ndb_print_schema_file.1 | 4 +- man/ndb_print_sys_file.1 | 4 +- man/ndb_redo_log_reader.1 | 28 +-- man/ndb_restore.1 | 72 +++---- man/ndb_select_all.1 | 6 +- man/ndb_select_count.1 | 6 +- man/ndb_setup.py.1 | 72 +++++-- man/ndb_show_tables.1 | 6 +- man/ndb_size.pl.1 | 6 +- man/ndb_top.1 | 38 ++-- man/ndb_waiter.1 | 6 +- man/ndbd.8 | 34 +-- man/ndbinfo_select_all.1 | 10 +- man/ndbmtd.8 | 4 +- man/perror.1 | 4 +- man/replace.1 | 4 +- man/resolve_stack_dump.1 | 4 +- man/resolveip.1 | 4 +- man/zlib_decompress.1 | 4 +- scripts/fill_help_tables.sql | 133 ++++++------ 67 files changed, 901 insertions(+), 1044 deletions(-) diff --git a/man/comp_err.1 b/man/comp_err.1 index 70a3f7b45b85..3511784075f9 100644 --- a/man/comp_err.1 +++ b/man/comp_err.1 @@ -2,12 +2,12 @@ .\" Title: \fBcomp_err\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBCOMP_ERR\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBCOMP_ERR\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -253,7 +253,7 @@ You should have received a copy of the GNU General Public License along with the .IP " 1." 4 MySQL Internals Manual .RS 4 -\%http://dev.mysql.com/doc/internals/en +\%https://dev.mysql.com/doc/internals/en .RE .SH "SEE ALSO" For more information, please refer to the MySQL Reference Manual, diff --git a/man/innochecksum.1 b/man/innochecksum.1 index 44fc28b8b09a..faf4cc4bccf0 100644 --- a/man/innochecksum.1 +++ b/man/innochecksum.1 @@ -2,12 +2,12 @@ .\" Title: \fBinnochecksum\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBINNOCHECKSUM\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBINNOCHECKSUM\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -41,15 +41,7 @@ files\&. This tool reads an InnoDB tablespace file, calculates the checksum for each page, compares the calculated checksum to the stored checksum, and reports mismatches, which indicate damaged pages\&. It was originally developed to speed up verifying the integrity of tablespace files after power outages but can also be used after file copies\&. Because checksum mismatches cause InnoDB -to deliberately shut down a running server, it may be preferable to use this tool rather than waiting for an in\-production server to encounter the damaged pages\&. As of MySQL 5\&.7\&.2, -\fBinnochecksum\fR -supports files greater than 2GB in size\&. Previously, -\fBinnochecksum\fR -only supported files up to 2GB in size\&. -.PP -As of MySQL 5\&.7\&.2, -\fBinnochecksum\fR -supports tablespaces that contain compressed pages\&. +to deliberately shut down a running server, it may be preferable to use this tool rather than waiting for an in\-production server to encounter the damaged pages\&. .PP \fBinnochecksum\fR cannot be used on tablespace files that the server already has open\&. For such files, you should use diff --git a/man/lz4_decompress.1 b/man/lz4_decompress.1 index 0d8d42cc9ef5..e7f8288e4731 100644 --- a/man/lz4_decompress.1 +++ b/man/lz4_decompress.1 @@ -2,12 +2,12 @@ .\" Title: \fBlz4_decompress\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBLZ4_DECOMPRESS\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBLZ4_DECOMPRESS\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/my_print_defaults.1 b/man/my_print_defaults.1 index be474899f6e4..5ba34a9c920d 100644 --- a/man/my_print_defaults.1 +++ b/man/my_print_defaults.1 @@ -2,12 +2,12 @@ .\" Title: \fBmy_print_defaults\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBMY_PRINT_DEFAULTS\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBMY_PRINT_DEFAULTS\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/myisam_ftdump.1 b/man/myisam_ftdump.1 index 5d45fc0c7591..a3e4aa19ea3d 100644 --- a/man/myisam_ftdump.1 +++ b/man/myisam_ftdump.1 @@ -2,12 +2,12 @@ .\" Title: \fBmyisam_ftdump\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBMYISAM_FTDUMP\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBMYISAM_FTDUMP\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/myisamchk.1 b/man/myisamchk.1 index 26a48c885e74..06979ebf4556 100644 --- a/man/myisamchk.1 +++ b/man/myisamchk.1 @@ -2,12 +2,12 @@ .\" Title: \fBmyisamchk\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBMYISAMCHK\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBMYISAMCHK\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/myisamlog.1 b/man/myisamlog.1 index 4dcf596e5360..76fd6dfd1621 100644 --- a/man/myisamlog.1 +++ b/man/myisamlog.1 @@ -2,12 +2,12 @@ .\" Title: \fBmyisamlog\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBMYISAMLOG\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBMYISAMLOG\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/myisampack.1 b/man/myisampack.1 index 7d63beab0acc..a1a509baea10 100644 --- a/man/myisampack.1 +++ b/man/myisampack.1 @@ -2,12 +2,12 @@ .\" Title: \fBmyisampack\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBMYISAMPACK\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBMYISAMPACK\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/mysql.1 b/man/mysql.1 index 7b97029b7644..d88a45e889f7 100644 --- a/man/mysql.1 +++ b/man/mysql.1 @@ -2,12 +2,12 @@ .\" Title: \fBmysql\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBMYSQL\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBMYSQL\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -59,7 +59,7 @@ mysql_store_result()\&. .br .PP Alternatively, MySQL Shell offers access to the X DevAPI\&. For details, see -Chapter\ \&18, MySQL Shell User Guide\&. +\m[blue]\fBMySQL Shell 8\&.0 (part of MySQL 8\&.0)\fR\m[]\&\s-2\u[1]\d\s+2\&. .sp .5v .RE .PP @@ -228,8 +228,7 @@ option\&. .sp -1 .IP \(bu 2.3 .\} -\fB\-\-binary\-as\-hex\fR, -\fB\-b\fR +\fB\-\-binary\-as\-hex\fR .sp When this option is given, \fBmysql\fR @@ -1218,14 +1217,20 @@ If the connection to the server is lost, automatically try to reconnect\&. A sin \fB\-\-i\-am\-a\-dummy\fR, \fB\-U\fR .sp -Permit only those +If this option is enabled, UPDATE and DELETE -statements that specify which rows to modify by using key values\&. If you have set this option in an option file, you can override it by using -\fB\-\-safe\-updates\fR -on the command line\&. See -the section called \(lqMYSQL TIPS\(rq, for more information about this option\&. +statements that do not use a key in the +WHERE +clause or a +LIMIT +clause produce an error\&. In addition, restrictions are placed on +SELECT +statements that produce (or are estimated to produce) very large result sets\&. If you have set this option in an option file, you can use +\fB\-\-skip\-safe\-updates\fR +on the command line to override it\&. For more information about this option, see +the section called \(lqUsing Safe\-Updates Mode (\-\-safe\-updates)\(rq\&. .RE .sp .RS 4 @@ -2198,6 +2203,8 @@ Read the named file and executes the statements contained therein\&. On Windows, / or \e\e\&. +.sp +Quote characters are taken as part of the file name itself\&. For best results, the name should not include space characters\&. .RE .sp .RS 4 @@ -2211,9 +2218,9 @@ or status, \es .sp -Provide status information about the connection and the server you are using\&. If you are running in +Provide status information about the connection and the server you are using\&. If you are running with \fB\-\-safe\-updates\fR -mode, +enabled, status also prints the values for the \fBmysql\fR @@ -2827,6 +2834,39 @@ file\&. .RE .PP The following discussion describes characteristics that apply to all logging types and provides information specific to each logging type\&. +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +How Logging Occurs +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +Controlling the History File +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +syslog Logging Characteristics +.RE How Logging Occurs.PP For each enabled logging destination, statement logging occurs as follows: .sp @@ -3179,7 +3219,7 @@ command, uses it as a search string to access server\-side help from the contents of the MySQL Reference Manual\&. The proper operation of this command requires that the help tables in the mysql database be initialized with help topic information (see -Section\ \&5.1.13, \(lqServer-Side Help\(rq)\&. +Section\ \&5.1.14, \(lqServer-Side Help\(rq)\&. .PP If there is no match for the search string, the search fails: .sp @@ -3528,7 +3568,8 @@ with the (or utf8mb4) option\&. This option is necessary because utf16le -is not supported as a connection character set\&. +is one of the character sets that cannot be used as the client character set\&. See +the section called \(lqImpermissible Client Character Sets\(rq\&. .RE .PP With those changes, @@ -3590,23 +3631,33 @@ Monty .if n \{\ .RE .\} -.SS "Using the \-\-safe\-updates Option" +.SS "Using Safe\-Updates Mode (\-\-safe\-updates)" .PP For beginners, a useful startup option is \fB\-\-safe\-updates\fR (or -\fB\-\-i\-am\-a\-dummy\fR, which has the same effect)\&. It is helpful for cases when you might have issued a -DELETE FROM \fItbl_name\fR +\fB\-\-i\-am\-a\-dummy\fR, which has the same effect)\&. Safe\-updates mode is helpful for cases when you might have issued an +UPDATE +or +DELETE statement but forgotten the WHERE -clause\&. Normally, such a statement deletes all rows from the table\&. With -\fB\-\-safe\-updates\fR, you can delete rows only by specifying the key values that identify them\&. This helps prevent accidents\&. +clause indicating which rows to modify\&. Normally, such statements update or delete all rows in the table\&. With +\fB\-\-safe\-updates\fR, you can modify rows only by specifying the key values that identify them, or a +LIMIT +clause, or both\&. This helps prevent accidents\&. Safe\-updates mode also restricts +SELECT +statements that produce (or are estimated to produce) very large result sets\&. .PP -When you use the +The \fB\-\-safe\-updates\fR -option, +option causes \fBmysql\fR -issues the following statement when it connects to the MySQL server: +to execute the following statement when it connects to the MySQL server, to set the session values of the +sql_safe_updates, +sql_select_limit, and +max_join_size +system variables: .sp .if n \{\ .RS 4 @@ -3618,12 +3669,9 @@ SET sql_safe_updates=1, sql_select_limit=1000, max_join_size=1000000; .RE .\} .PP -See -Section\ \&5.1.7, \(lqServer System Variables\(rq\&. -.PP The SET -statement has the following effects: +statement affects statement processing as follows: .sp .RS 4 .ie n \{\ @@ -3633,15 +3681,17 @@ statement has the following effects: .sp -1 .IP \(bu 2.3 .\} -You are not permitted to execute an +Enabling +sql_safe_updates +causes UPDATE -or +and DELETE -statement unless you specify a key constraint in the +statements to produce an error if they do not specify a key constraint in the WHERE -clause or provide a +clause, or provide a LIMIT -clause (or both)\&. For example: +clause, or both\&. For example: .sp .if n \{\ .RS 4 @@ -3663,9 +3713,11 @@ UPDATE \fItbl_name\fR SET \fInot_key_column\fR=\fIval\fR LIMIT 1; .sp -1 .IP \(bu 2.3 .\} -The server limits all large +Setting +sql_select_limit +to 1,000 causes the server to limit all SELECT -results to 1,000 rows unless the statement includes a +result sets to 1,000 rows unless the statement includes a LIMIT clause\&. .RE @@ -3678,26 +3730,117 @@ clause\&. .sp -1 .IP \(bu 2.3 .\} -The server aborts multiple\-table +Setting +max_join_size +to 1,000,000 causes multiple\-table SELECT -statements that probably need to examine more than 1,000,000 row combinations\&. +statements to produce an error if the server estimates it must examine more than 1,000,000 row combinations\&. .RE .PP -To specify limits different from 1,000 and 1,000,000, you can override the defaults by using the +To specify result set limits different from 1,000 and 1,000,000, you can override the defaults by using the \fB\-\-select_limit\fR and \fB\-\-max_join_size\fR -options: +options when you invoke +\fBmysql\fR: .sp .if n \{\ .RS 4 .\} .nf -shell> \fBmysql \-\-safe\-updates \-\-select_limit=500 \-\-max_join_size=10000\fR +mysql \-\-safe\-updates \-\-select_limit=500 \-\-max_join_size=10000 .fi .if n \{\ .RE .\} +.PP +It is possible for +UPDATE +and +DELETE +statements to produce an error in safe\-updates mode even with a key specified in the +WHERE +clause, if the optimizer decides not to use the index on the key column: +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +Range access on the index cannot be used if memory usage exceeds that permitted by the +range_optimizer_max_mem_size +system variable\&. The optimizer then falls back to a table scan\&. See +the section called \(lqLimiting Memory Use for Range Optimization\(rq\&. +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +If key comparisons require type conversion, the index may not be used (see +Section\ \&8.3.1, \(lqHow MySQL Uses Indexes\(rq)\&. Suppose that an indexed string column +c1 +is compared to a numeric value using +WHERE c1 = 2222\&. For such comparisons, the string value is converted to a number and the operands are compared numerically (see +Section\ \&12.2, \(lqType Conversion in Expression Evaluation\(rq), preventing use of the index\&. If safe\-updates mode is enabled, an error occurs\&. +.RE +.PP +As of MySQL 5\&.7\&.25, safe\-updates mode includes these behaviors: +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +EXPLAIN +with +UPDATE +and +DELETE +statements does not produce safe\-updates errors\&. This enables use of +EXPLAIN +plus +SHOW WARNINGS +to see why an index is not used, which can be helpful in cases such as when a +range_optimizer_max_mem_size +violation or type conversion occurs and the optimizer does not use an index even though a key column was specified in the +WHERE +clause\&. +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +When a safe\-updates error occurs, the error message includes the first diagnostic that was produced, to provide information about the reason for failure\&. For example, the message may indicate that the +range_optimizer_max_mem_size +value was exceeded or type conversion occurred, either of which can preclude use of an index\&. +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +For multiple\-table deletes and updates, an error is produced with safe updates enabled only if any target table uses a table scan\&. +.RE .SS "Disabling mysql Auto\-Reconnect" .PP If the @@ -3753,6 +3896,12 @@ This documentation is distributed in the hope that it will be useful, but WITHOU .PP You should have received a copy of the GNU General Public License along with the program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA or see http://www.gnu.org/licenses/. .sp +.SH "NOTES" +.IP " 1." 4 +MySQL Shell 8.0 (part of MySQL 8.0) +.RS 4 +\%http://dev.mysql.com/doc/mysql-shell/8.0/en/ +.RE .SH "SEE ALSO" For more information, please refer to the MySQL Reference Manual, which may already be installed locally and which is also available diff --git a/man/mysql.server.1 b/man/mysql.server.1 index 3983e624eed8..b5f02b3725cd 100644 --- a/man/mysql.server.1 +++ b/man/mysql.server.1 @@ -2,12 +2,12 @@ .\" Title: \fBmysql.server\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBMYSQL\&.SERVER\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBMYSQL\&.SERVER\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -312,28 +312,28 @@ basedir T}:T{ Path to MySQL installation directory T}:T{ -directory name +Directory name T} T{ datadir T}:T{ Path to MySQL data directory T}:T{ -directory name +Directory name T} T{ pid-file T}:T{ File in which server should write its process ID T}:T{ -file name +File name T} T{ service-startup-timeout T}:T{ How long to wait for server startup T}:T{ -integer +Integer T} .TE .sp 1 diff --git a/man/mysql_config.1 b/man/mysql_config.1 index 3f576af32c20..b1c0bea19014 100644 --- a/man/mysql_config.1 +++ b/man/mysql_config.1 @@ -2,12 +2,12 @@ .\" Title: \fBmysql_config\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBMYSQL_CONFIG\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBMYSQL_CONFIG\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/mysql_config_editor.1 b/man/mysql_config_editor.1 index d4ea4062d383..de1f35e60e9c 100644 --- a/man/mysql_config_editor.1 +++ b/man/mysql_config_editor.1 @@ -2,12 +2,12 @@ .\" Title: \fBmysql_config_editor\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBMYSQL_CONFIG_EDITOR\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBMYSQL_CONFIG_EDITOR\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -36,12 +36,12 @@ mysql_config_editor \- configure authentication information for connecting to My .PP The \fBmysql_config_editor\fR -utility enables you to store authentication credentials in an encrypted login path file named +utility enables you to store authentication credentials in an obfuscated login path file named \&.mylogin\&.cnf\&. The file location is the %APPDATA%\eMySQL directory on Windows and the current user\*(Aqs home directory on non\-Windows systems\&. The file can be read later by MySQL client programs to obtain authentication credentials for connecting to MySQL Server\&. .PP -The unencrypted format of the +The unobfuscated format of the \&.mylogin\&.cnf login path file consists of option groups, similar to other option files\&. Each option group in \&.mylogin\&.cnf @@ -53,7 +53,7 @@ which is a group that permits only certain options: \fBpassword\fR, \fBport\fR and -\fBsocket\fR\&. Think of a login path option group as a set of options that specify which MySQL server to connect to and which account to authenticate as\&. Here is an unencrypted example: +\fBsocket\fR\&. Think of a login path option group as a set of options that specify which MySQL server to connect to and which account to authenticate as\&. Here is an unobfuscated example: .sp .if n \{\ .RS 4 @@ -185,22 +185,22 @@ is present\&. .RE .PP \fBmysql_config_editor\fR -encrypts the +obfuscates the \&.mylogin\&.cnf -file so it cannot be read as cleartext, and its contents when decrypted by client programs are used only in memory\&. In this way, passwords can be stored in a file in non\-cleartext format and used later without ever needing to be exposed on the command line or in an environment variable\&. +file so it cannot be read as cleartext, and its contents when unobfuscated by client programs are used only in memory\&. In this way, passwords can be stored in a file in non\-cleartext format and used later without ever needing to be exposed on the command line or in an environment variable\&. \fBmysql_config_editor\fR provides a print command for displaying the login path file contents, but even in this case, password values are masked so as never to appear in a way that other users can see them\&. .PP -The encryption used by +The obfuscation used by \fBmysql_config_editor\fR prevents passwords from appearing in \&.mylogin\&.cnf -as cleartext and provides a measure of security by preventing inadvertent password exposure\&. For example, if you display a regular unencrypted +as cleartext and provides a measure of security by preventing inadvertent password exposure\&. For example, if you display a regular unobfuscated my\&.cnf option file on the screen, any passwords it contains are visible for anyone to see\&. With -\&.mylogin\&.cnf, that is not true\&. But the encryption used will not deter a determined attacker and you should not consider it unbreakable\&. A user who can gain system administration privileges on your machine to access your files could decrypt the +\&.mylogin\&.cnf, that is not true\&. But the obfuscation used will not deter a determined attacker and you should not consider it unbreakable\&. A user who can gain system administration privileges on your machine to access your files could unobfuscate the \&.mylogin\&.cnf file with some effort\&. .PP @@ -629,7 +629,7 @@ shell> \fBmysql_config_editor \fR\fB\fIcommand\fR\fR\fB \-\-help\fR .\} print [\fIoptions\fR] .sp -Print the contents of the login path file in unencrypted form, with the exception that passwords are displayed as +Print the contents of the login path file in unobfuscated form, with the exception that passwords are displayed as *****\&. .sp The default login path name is @@ -823,7 +823,7 @@ Remove the password from the login path\&. \fB\-\-port\fR, \fB\-P\fR .sp -Remove the TCP/IP port number from the login path\&. This option was added in MySQL 5\&.7\&.1\&. +Remove the TCP/IP port number from the login path\&. .RE .sp .RS 4 @@ -837,7 +837,7 @@ Remove the TCP/IP port number from the login path\&. This option was added in My \fB\-\-socket\fR, \fB\-S\fR .sp -Remove the Unix socket file name from the login path\&. This option was added in MySQL 5\&.7\&.1\&. +Remove the Unix socket file name from the login path\&. .RE .sp .RS 4 @@ -1025,7 +1025,7 @@ password = \fB\-\-port=\fR\fB\fIport_num\fR\fR, \fB\-P \fR\fB\fIport_num\fR\fR .sp -The TCP/IP port number to write to the login path\&. This option was added in MySQL 5\&.7\&.1\&. +The TCP/IP port number to write to the login path\&. .RE .sp .RS 4 @@ -1039,7 +1039,7 @@ The TCP/IP port number to write to the login path\&. This option was added in My \fB\-\-socket=\fR\fB\fIfile_name\fR\fR, \fB\-S \fR\fB\fIfile_name\fR\fR .sp -The Unix socket file name to write to the login path\&. This option was added in MySQL 5\&.7\&.1\&. +The Unix socket file name to write to the login path\&. .RE .sp .RS 4 diff --git a/man/mysql_install_db.1 b/man/mysql_install_db.1 index 7513c4dc26c1..b6e4ce4ea091 100644 --- a/man/mysql_install_db.1 +++ b/man/mysql_install_db.1 @@ -2,12 +2,12 @@ .\" Title: \fBmysql_install_db\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBMYSQL_INSTALL_DB\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBMYSQL_INSTALL_DB\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/mysql_plugin.1 b/man/mysql_plugin.1 index ff66554e8be4..13d668371e9e 100644 --- a/man/mysql_plugin.1 +++ b/man/mysql_plugin.1 @@ -2,12 +2,12 @@ .\" Title: \fBmysql_plugin\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBMYSQL_PLUGIN\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBMYSQL_PLUGIN\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/mysql_secure_installation.1 b/man/mysql_secure_installation.1 index 18cf6d4665cb..3a66ec197b57 100644 --- a/man/mysql_secure_installation.1 +++ b/man/mysql_secure_installation.1 @@ -2,12 +2,12 @@ .\" Title: \fBmysql_secure_installation\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBMYSQL_SECURE_INSTALLATION\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBMYSQL_SECURE_INSTALLATION\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/mysql_ssl_rsa_setup.1 b/man/mysql_ssl_rsa_setup.1 index 299d5baac3f7..bd3dcd6b0946 100644 --- a/man/mysql_ssl_rsa_setup.1 +++ b/man/mysql_ssl_rsa_setup.1 @@ -2,12 +2,12 @@ .\" Title: \fBmysql_ssl_rsa_setup\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBMYSQL_SSL_RSA_SETUP\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBMYSQL_SSL_RSA_SETUP\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -403,7 +403,7 @@ should check for default SSL and RSA files and in which it should create files i .\} \fB\-\-suffix=\fR\fB\fIstr\fR\fR .sp -The suffix for the Common Name attribute in X509 certificates\&. The suffix value is limited to 17 characters\&. The default is based on the MySQL version number\&. +The suffix for the Common Name attribute in X\&.509 certificates\&. The suffix value is limited to 17 characters\&. The default is based on the MySQL version number\&. .RE .sp .RS 4 diff --git a/man/mysql_tzinfo_to_sql.1 b/man/mysql_tzinfo_to_sql.1 index 622b06f07fba..6c33b7d04c2e 100644 --- a/man/mysql_tzinfo_to_sql.1 +++ b/man/mysql_tzinfo_to_sql.1 @@ -2,12 +2,12 @@ .\" Title: \fBmysql_tzinfo_to_sql\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBMYSQL_TZINFO_TO_SQL\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBMYSQL_TZINFO_TO_SQL\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/mysql_upgrade.1 b/man/mysql_upgrade.1 index 730b29c2ed0f..8f9cc44d1aca 100644 --- a/man/mysql_upgrade.1 +++ b/man/mysql_upgrade.1 @@ -2,12 +2,12 @@ .\" Title: \fBmysql_upgrade\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBMYSQL_UPGRADE\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBMYSQL_UPGRADE\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -120,7 +120,7 @@ If you upgrade to MySQL 5\&.7\&.2 or later from a version older than 5\&.7\&.2, mysql\&.user table requires a special sequence of steps to perform an upgrade using \fBmysql_upgrade\fR\&. For details, see -Section\ \&2.11.1.2, \(lqChanges Affecting Upgrades to MySQL 5.7\(rq\&. +Section\ \&2.11.1.3, \(lqChanges in MySQL 5.7\(rq\&. .sp .5v .RE .if n \{\ @@ -136,7 +136,7 @@ Section\ \&2.11.1.2, \(lqChanges Affecting Upgrades to MySQL 5.7\(rq\&. .ps -1 .br .PP -On Windows Server 2008, Vista, and newer, you must run +On Windows, you must run \fBmysql_upgrade\fR with administrator privileges\&. You can do this by running a Command Prompt as Administrator and running the command\&. Failure to do so may result in the upgrade failing to execute correctly\&. .sp .5v @@ -200,6 +200,46 @@ shell> \fBmysql_upgrade \-\-protocol=tcp \-P 3308 [\fR\fB\fIother_options\fR\fR\ For local host connections on Unix, the \fB\-\-protocol=tcp\fR option forces a connection using TCP/IP rather than the Unix socket file\&. +.if n \{\ +.sp +.\} +.RS 4 +.it 1 an-trap +.nr an-no-space-flag 1 +.nr an-break-flag 1 +.br +.ps +1 +\fBNote\fR +.ps -1 +.br +.PP +If you run the server with the +disabled_storage_engines +system variable set to disable certain storage engines (for example, +MyISAM), +\fBmysql_upgrade\fR +might fail with an error like this: +.sp +.if n \{\ +.RS 4 +.\} +.nf +mysql_upgrade: [ERROR] 3161: Storage engine MyISAM is disabled +(Table creation is disallowed)\&. +.fi +.if n \{\ +.RE +.\} +.PP +To handle this, restart the server with +disabled_storage_engines +disabled\&. Then you should be able to run +\fBmysql_upgrade\fR +successfully\&. After that, restart the server with +disabled_storage_engines +set to its original value\&. +.sp .5v +.RE .PP \fBmysql_upgrade\fR processes all tables in all databases, which might take a long time to complete\&. Each table is locked and therefore unavailable to other sessions while it is being processed\&. Check and repair operations can be time\-consuming, particularly for large tables\&. @@ -247,7 +287,7 @@ Section\ \&6.5.1.3, \(lqMigrating Away from Pre-4.1 Password Hashing and the mys .PP \fBmysql_upgrade\fR does not upgrade the contents of the help tables\&. For upgrade instructions, see -Section\ \&5.1.13, \(lqServer-Side Help\(rq\&. +Section\ \&5.1.14, \(lqServer-Side Help\(rq\&. .PP As of MySQL 5\&.7\&.7, unless invoked with the \fB\-\-skip\-sys\-schema\fR diff --git a/man/mysqladmin.1 b/man/mysqladmin.1 index c83f18562740..f8c7a0628556 100644 --- a/man/mysqladmin.1 +++ b/man/mysqladmin.1 @@ -2,12 +2,12 @@ .\" Title: \fBmysqladmin\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBMYSQLADMIN\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBMYSQLADMIN\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/mysqlbinlog.1 b/man/mysqlbinlog.1 index 44e91eef63d2..663197230dd7 100644 --- a/man/mysqlbinlog.1 +++ b/man/mysqlbinlog.1 @@ -2,12 +2,12 @@ .\" Title: \fBmysqlbinlog\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBMYSQLBINLOG\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBMYSQLBINLOG\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -314,22 +314,22 @@ T}:T{ --binlog-row-event-max-size=# T} T{ -\fBType\fR (64-bit platforms) +\fBType\fR T}:T{ -numeric +Numeric T} T{ -\fBDefault Value\fR (64-bit platforms) +\fBDefault Value\fR T}:T{ 4294967040 T} T{ -\fBMinimum Value\fR (64-bit platforms) +\fBMinimum Value\fR T}:T{ 256 T} T{ -\fBMaximum Value\fR (64-bit platforms) +\fBMaximum Value\fR T}:T{ 18446744073709547520 T} @@ -364,15 +364,13 @@ Section\ \&10.14, \(lqCharacter Set Configuration\(rq\&. .sp This option is used to test a MySQL server for support of the BINLOG_DUMP_NON_BLOCK -connection flag, which was inadvertently removed in MySQL 5\&.6\&.5, and restored in MySQL 5\&.7\&.5 (Bug #18000079, Bug #71178)\&. It is not required for normal operations\&. +connection flag\&. It is not required for normal operations\&. .sp The effective default and minimum values for this option depend on whether \fBmysqlbinlog\fR is run in blocking mode or non\-blocking mode\&. When \fBmysqlbinlog\fR is run in blocking mode, the default (and minimum) value is 1; when run in non\-blocking mode, the default (and minimum) value is 0\&. -.sp -This option was added in MySQL 5\&.7\&.5 .RE .sp .RS 4 @@ -520,13 +518,9 @@ with the option, you must ensure that tables that are modified are in the database selected by USE\&. (In particular, no cross\-database updates should be used\&.) .sp -Prior to MySQL 5\&.7\&.1, the -\fB\-\-database\fR -option did not work correctly with a log written by a GTID\-enabled MySQL server\&. (Bug #15912728) -.sp When used together with the \fB\-\-rewrite\-db\fR -option (available in MySQL 5\&.7\&.1 and later), the +option, the \fB\-\-rewrite\-db\fR option is applied first; then the \fB\-\-database\fR @@ -668,17 +662,14 @@ Disable binary logging\&. This is useful for avoiding an endless loop if you use \fB\-\-to\-last\-log\fR option and are sending the output to the same MySQL server\&. This option also is useful when restoring after a crash to avoid duplication of the statements you have logged\&. .sp -This option requires that you have the -SUPER -privilege\&. It causes +This option causes \fBmysqlbinlog\fR to include a SET sql_log_bin = 0 -statement in its output to disable binary logging of the remaining output\&. The -SET -statement is ineffective unless you have the -SUPER -privilege\&. +statement in its output to disable binary logging of the remaining output\&. Manipulating the session value of the +sql_log_bin +system variable is a restricted operation, so this option requires that you have privileges sufficient to set restricted session variables\&. See +Section\ \&5.1.8.1, \(lqSystem Variable Privileges\(rq\&. .RE .sp .RS 4 @@ -800,10 +791,6 @@ Tell the MySQL Server to use idempotent mode while processing updates; this caus The scope of effect for this option includes the current \fBmysqlbinlog\fR client and session only\&. -.sp -The -\fB\-\-idempotent\fR -option was introduced in MySQL 5\&.7\&.0\&. .RE .sp .RS 4 @@ -1118,7 +1105,7 @@ option value is treated as a prefix that modifies output file names\&. .\} \fB\-\-rewrite\-db=\*(Aq\fR\fB\fIfrom_name\fR\fR\fB\->\fR\fB\fIto_name\fR\fR\fB\*(Aq\fR .sp -In MySQL 5\&.7\&.8 and later, when reading from a row\-based or statement\-based log, rewrite all occurrences of +When reading from a row\-based or statement\-based log, rewrite all occurrences of \fIfrom_name\fR to \fIto_name\fR\&. Rewriting is done on the rows, for row\-based logs, as well as on the @@ -1181,8 +1168,6 @@ before applying the \fB\-\-database\fR option, there remain no updates that match \fB\-\-database=mydb\fR\&. -.sp -This option was added in MySQL 5\&.7\&.1\&. .RE .sp .RS 4 @@ -1195,7 +1180,7 @@ This option was added in MySQL 5\&.7\&.1\&. .\} \fB\-\-secure\-auth\fR .sp -Do not send passwords to the server in old (pre\-4\&.1) format\&. This prevents connections except for servers that use the newer password format\&. This option was added in MySQL 5\&.7\&.4\&. +Do not send passwords to the server in old (pre\-4\&.1) format\&. This prevents connections except for servers that use the newer password format\&. .sp As of MySQL 5\&.7\&.5, this option is deprecated and will be removed in a future MySQL release\&. It is always enabled and attempting to disable it (\fB\-\-skip\-secure\-auth\fR, \fB\-\-secure\-auth=0\fR) produces an error\&. Before MySQL 5\&.7\&.5, this option is enabled by default but can be disabled\&. @@ -1862,7 +1847,7 @@ ROLLBACK; .RE .\} .PP -Hex dump output currently contains the elements in the following list\&. This format is subject to change\&. (For more information about binary log format, see +Hex dump output currently contains the elements in the following list\&. This format is subject to change\&. For more information about binary log format, see \m[blue]\fBMySQL Internals: The Binary Log\fR\m[]\&\s-2\u[1]\d\s+2\&. .sp .RS 4 @@ -1899,265 +1884,7 @@ in hexadecimal\&. .sp -1 .IP \(bu 2.3 .\} -Type: The event type code\&. In the example shown, -\*(Aq0f\*(Aq -indicates a -FORMAT_DESCRIPTION_EVENT\&. The following table lists the possible type codes\&. -.TS -allbox tab(:); -lB lB lB. -T{ -Type -T}:T{ -Name -T}:T{ -Meaning -T} -.T& -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l. -T{ -00 -T}:T{ -UNKNOWN_EVENT -T}:T{ -This event should never be present in the log. -T} -T{ -01 -T}:T{ -START_EVENT_V3 -T}:T{ -This indicates the start of a log file written by MySQL 4 or earlier. -T} -T{ -02 -T}:T{ -QUERY_EVENT -T}:T{ -The most common type of events. These contain statements executed on the - master. -T} -T{ -03 -T}:T{ -STOP_EVENT -T}:T{ -Indicates that master has stopped. -T} -T{ -04 -T}:T{ -ROTATE_EVENT -T}:T{ -Written when the master switches to a new log file. -T} -T{ -05 -T}:T{ -INTVAR_EVENT -T}:T{ -Used for AUTO_INCREMENT values or when the - LAST_INSERT_ID() - function is used in the statement. -T} -T{ -06 -T}:T{ -LOAD_EVENT -T}:T{ -Used for LOAD DATA - INFILE in MySQL 3.23. -T} -T{ -07 -T}:T{ -SLAVE_EVENT -T}:T{ -Reserved for future use. -T} -T{ -08 -T}:T{ -CREATE_FILE_EVENT -T}:T{ -Used for LOAD DATA - INFILE statements. This indicates the start - of execution of such a statement. A temporary file is - created on the slave. Used in MySQL 4 only. -T} -T{ -09 -T}:T{ -APPEND_BLOCK_EVENT -T}:T{ -Contains data for use in a - LOAD DATA - INFILE statement. The data is stored in the - temporary file on the slave. -T} -T{ -0a -T}:T{ -EXEC_LOAD_EVENT -T}:T{ -Used for LOAD DATA - INFILE statements. The contents of the - temporary file is stored in the table on the slave. - Used in MySQL 4 only. -T} -T{ -0b -T}:T{ -DELETE_FILE_EVENT -T}:T{ -Rollback of a LOAD DATA - INFILE statement. The temporary file should - be deleted on the slave. -T} -T{ -0c -T}:T{ -NEW_LOAD_EVENT -T}:T{ -Used for LOAD DATA - INFILE in MySQL 4 and earlier. -T} -T{ -0d -T}:T{ -RAND_EVENT -T}:T{ -Used to send information about random values if the - RAND() function is used - in the statement. -T} -T{ -0e -T}:T{ -USER_VAR_EVENT -T}:T{ -Used to replicate user variables. -T} -T{ -0f -T}:T{ -FORMAT_DESCRIPTION_EVENT -T}:T{ -This indicates the start of a log file written by MySQL 5 or later. -T} -T{ -10 -T}:T{ -XID_EVENT -T}:T{ -Event indicating commit of an XA transaction. -T} -T{ -11 -T}:T{ -BEGIN_LOAD_QUERY_EVENT -T}:T{ -Used for LOAD DATA - INFILE statements in MySQL 5 and later. -T} -T{ -12 -T}:T{ -EXECUTE_LOAD_QUERY_EVENT -T}:T{ -Used for LOAD DATA - INFILE statements in MySQL 5 and later. -T} -T{ -13 -T}:T{ -TABLE_MAP_EVENT -T}:T{ -Information about a table definition. Used in MySQL 5.1.5 and later. -T} -T{ -14 -T}:T{ -PRE_GA_WRITE_ROWS_EVENT -T}:T{ -Row data for a single table that should be created. Used in MySQL 5.1.5 - to 5.1.17. -T} -T{ -15 -T}:T{ -PRE_GA_UPDATE_ROWS_EVENT -T}:T{ -Row data for a single table that needs to be updated. Used in MySQL - 5.1.5 to 5.1.17. -T} -T{ -16 -T}:T{ -PRE_GA_DELETE_ROWS_EVENT -T}:T{ -Row data for a single table that should be deleted. Used in MySQL 5.1.5 - to 5.1.17. -T} -T{ -17 -T}:T{ -WRITE_ROWS_EVENT -T}:T{ -Row data for a single table that should be created. Used in MySQL 5.1.18 - and later. -T} -T{ -18 -T}:T{ -UPDATE_ROWS_EVENT -T}:T{ -Row data for a single table that needs to be updated. Used in MySQL - 5.1.18 and later. -T} -T{ -19 -T}:T{ -DELETE_ROWS_EVENT -T}:T{ -Row data for a single table that should be deleted. Used in MySQL 5.1.18 - and later. -T} -T{ -1a -T}:T{ -INCIDENT_EVENT -T}:T{ -Something out of the ordinary happened. Added in MySQL 5.1.18. -T} -.TE -.sp 1 +Type: The event type code\&. .RE .sp .RS 4 @@ -2201,61 +1928,7 @@ Master Pos: The position of the next event in the original master log file\&. .sp -1 .IP \(bu 2.3 .\} -Flags: 16 flags\&. The following flags are used\&. The others are reserved for future use\&. -.TS -allbox tab(:); -lB lB lB. -T{ -Flag -T}:T{ -Name -T}:T{ -Meaning -T} -.T& -l l l -l l l -l l l -l l l. -T{ -01 -T}:T{ -LOG_EVENT_BINLOG_IN_USE_F -T}:T{ -Log file correctly closed. (Used only in - FORMAT_DESCRIPTION_EVENT.) If this - flag is set (if the flags are, for example, - '01 00') in a - FORMAT_DESCRIPTION_EVENT, the log - file has not been properly closed. Most probably this - is because of a master crash (for example, due to - power failure). -T} -T{ -02 -T}:T{ -T}:T{ -Reserved for future use. -T} -T{ -04 -T}:T{ -LOG_EVENT_THREAD_SPECIFIC_F -T}:T{ -Set if the event is dependent on the connection it was executed in (for - example, '04 00'), for example, if - the event uses temporary tables. -T} -T{ -08 -T}:T{ -LOG_EVENT_SUPPRESS_USE_F -T}:T{ -Set in some circumstances when the event is not dependent on the default - database. -T} -.TE -.sp 1 +Flags: Event flag values\&. .RE .SH "MYSQLBINLOG ROW EVENT DISPLAY" .PP @@ -3075,7 +2748,7 @@ You should have received a copy of the GNU General Public License along with the .IP " 1." 4 MySQL Internals: The Binary Log .RS 4 -\%http://dev.mysql.com/doc/internals/en/binary-log.html +\%https://dev.mysql.com/doc/internals/en/binary-log.html .RE .SH "SEE ALSO" For more information, please refer to the MySQL Reference Manual, diff --git a/man/mysqlcheck.1 b/man/mysqlcheck.1 index 7923e44494b5..6b8f4434b697 100644 --- a/man/mysqlcheck.1 +++ b/man/mysqlcheck.1 @@ -2,12 +2,12 @@ .\" Title: \fBmysqlcheck\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBMYSQLCHECK\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBMYSQLCHECK\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -219,7 +219,7 @@ Check all tables in all databases\&. This is the same as using the option and naming all the databases on the command line, except that the INFORMATION_SCHEMA and -performace_schema +performance_schema databases are not checked\&. They can be checked by explicitly naming them with the \fB\-\-databases\fR option\&. diff --git a/man/mysqld.8 b/man/mysqld.8 index 9764ad4ca6b9..42334ec45340 100644 --- a/man/mysqld.8 +++ b/man/mysqld.8 @@ -2,12 +2,12 @@ .\" Title: \fBmysqld\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBMYSQLD\FR" "8" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBMYSQLD\FR" "8" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/mysqld_multi.1 b/man/mysqld_multi.1 index 239dbed827ea..7645a69b29a2 100644 --- a/man/mysqld_multi.1 +++ b/man/mysqld_multi.1 @@ -2,12 +2,12 @@ .\" Title: \fBmysqld_multi\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBMYSQLD_MULTI\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBMYSQLD_MULTI\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/mysqld_safe.1 b/man/mysqld_safe.1 index 2c27368c34b0..f7434ebe3bb4 100644 --- a/man/mysqld_safe.1 +++ b/man/mysqld_safe.1 @@ -2,12 +2,12 @@ .\" Title: \fBmysqld_safe\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBMYSQLD_SAFE\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBMYSQLD_SAFE\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -733,7 +733,7 @@ syslog; messages are written to an error log file\&. .sp When syslog -is used, the +is used for error logging, the daemon\&.err facility/severity is used for all log messages\&. .sp @@ -744,7 +744,7 @@ log_syslog system variable instead\&. To control the facility, use the server log_syslog_facility system variable\&. See -Section\ \&5.4.2, \(lqThe Error Log\(rq\&. +Section\ \&5.4.2.3, \(lqError Logging to the System Log\(rq\&. .RE .sp .RS 4 @@ -776,7 +776,7 @@ Using this option to control logging is deprecated as of MySQL 5\&.7\&.5\&. Use the server log_syslog_tag system variable instead\&. See -Section\ \&5.4.2, \(lqThe Error Log\(rq\&. +Section\ \&5.4.2.3, \(lqError Logging to the System Log\(rq\&. .RE .sp .RS 4 @@ -1010,7 +1010,7 @@ logging from is deprecated as of MySQL 5\&.7\&.5\&. Use the server\*(Aqs native syslog support instead\&. For more information, see -Section\ \&5.4.2, \(lqThe Error Log\(rq\&. +Section\ \&5.4.2.3, \(lqError Logging to the System Log\(rq\&. .sp .5v .RE .SH "COPYRIGHT" diff --git a/man/mysqldump.1 b/man/mysqldump.1 index af65ad602c5e..9bf287ea77ff 100644 --- a/man/mysqldump.1 +++ b/man/mysqldump.1 @@ -2,12 +2,12 @@ .\" Title: \fBmysqldump\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBMYSQLDUMP\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBMYSQLDUMP\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -299,7 +299,7 @@ shell> \fBmysqldump [options] > dump\&.sql\fR .\} .PP However, UTF\-16 is not permitted as a connection character set (see -Section\ \&10.4, \(lqConnection Character Sets and Collations\(rq), so the dump file will not load correctly\&. To work around this issue, use the +the section called \(lqImpermissible Client Character Sets\(rq), so the dump file will not load correctly\&. To work around this issue, use the \fB\-\-result\-file\fR option, which creates the output in ASCII format: .sp @@ -2088,7 +2088,7 @@ statements are included in the output before each new database\&. This option may be used to dump the INFORMATION_SCHEMA and -performace_schema +performance_schema databases, which normally are not dumped even with the \fB\-\-all\-databases\fR option\&. (Also use the @@ -2247,7 +2247,7 @@ Multiple triggers are permitted\&. dumps triggers in activation order so that when the dump file is reloaded, triggers are created in the same activation order\&. However, if a \fBmysqldump\fR dump file contains multiple triggers for a table that have the same trigger event and action time, an error occurs for attempts to load the dump file into an older server that does not support multiple triggers\&. (For a workaround, see -Section\ \&2.11.2.1, \(lqChanges Affecting Downgrades from MySQL 5.7\(rq; you can convert triggers to be compatible with older servers\&.) +Section\ \&2.11.2.3, \(lqDowngrade Notes\(rq; you can convert triggers to be compatible with older servers\&.) .RE .sp .RS 4 @@ -2489,7 +2489,7 @@ database for proper restoration\&. .br For upgrades to MySQL 5\&.7 or higher from older versions, do not use \fB\-\-flush\-privileges\fR\&. For upgrade instructions in this case, see -Section\ \&2.11.1.2, \(lqChanges Affecting Upgrades to MySQL 5.7\(rq\&. +Section\ \&2.11.1.3, \(lqChanges in MySQL 5.7\(rq\&. .sp .5v .RE .RE @@ -2888,10 +2888,16 @@ does not dump the NDB Cluster ndbinfo information database\&. .PP +\fBmysqldump\fR +does not dump +InnoDB +CREATE TABLESPACE +statements\&. +.PP It is not recommended to restore from a dump made using \fBmysqldump\fR to a MySQL 5\&.6\&.9 or earlier server that has GTIDs enabled\&. See -Section\ \&16.1.3.4, \(lqRestrictions on Replication with GTIDs\(rq\&. +Section\ \&16.1.3.6, \(lqRestrictions on Replication with GTIDs\(rq\&. .PP \fBmysqldump\fR includes statements to recreate the diff --git a/man/mysqlimport.1 b/man/mysqlimport.1 index 2b2c9520897e..44d7a897c645 100644 --- a/man/mysqlimport.1 +++ b/man/mysqlimport.1 @@ -2,12 +2,12 @@ .\" Title: \fBmysqlimport\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBMYSQLIMPORT\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBMYSQLIMPORT\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/mysqlpump.1 b/man/mysqlpump.1 index ff87341306df..f8c36fb31116 100644 --- a/man/mysqlpump.1 +++ b/man/mysqlpump.1 @@ -2,12 +2,12 @@ .\" Title: \fBmysqlpump\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBMYSQLPUMP\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBMYSQLPUMP\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -2346,6 +2346,12 @@ or option\&. .PP \fBmysqlpump\fR +does not dump +InnoDB +CREATE TABLESPACE +statements\&. +.PP +\fBmysqlpump\fR dumps user accounts in logical form using CREATE USER and diff --git a/man/mysqlshow.1 b/man/mysqlshow.1 index b2061590c004..0dd9d33fb2df 100644 --- a/man/mysqlshow.1 +++ b/man/mysqlshow.1 @@ -2,12 +2,12 @@ .\" Title: \fBmysqlshow\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBMYSQLSHOW\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBMYSQLSHOW\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/mysqlslap.1 b/man/mysqlslap.1 index 0f483d2376db..18ab7d84cbdc 100644 --- a/man/mysqlslap.1 +++ b/man/mysqlslap.1 @@ -2,12 +2,12 @@ .\" Title: \fBmysqlslap\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBMYSQLSLAP\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBMYSQLSLAP\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/ndb-common-options.1 b/man/ndb-common-options.1 index 85343e9a058c..29089ef5c9fc 100644 --- a/man/ndb-common-options.1 +++ b/man/ndb-common-options.1 @@ -2,12 +2,12 @@ .\" Title: Options Common to NDB Cluster Programs .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "OPTIONS COMMON TO NDB CLUSTER PROGRAMS" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "OPTIONS COMMON TO NDB CLUSTER PROGRAMS" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -105,7 +105,7 @@ The options in the following table are common to all NDB Cluster executables (ex .nr an-no-space-flag 1 .nr an-break-flag 1 .br -.B Table\ \&21.340.\ \&Command\-line options common to all MySQL NDB Cluster programs +.B Table\ \&21.355.\ \&Command\-line options common to all MySQL NDB Cluster programs .TS allbox tab(:); lB lB lB. @@ -341,7 +341,7 @@ T} T{ \fBType\fR T}:T{ -directory name +Directory name T} T{ \fBDefault Value\fR @@ -383,7 +383,7 @@ T} T{ \fBType\fR T}:T{ -numeric +Numeric T} T{ \fBDefault Value\fR @@ -446,9 +446,6 @@ l l l l l l l l -l l -l l -l l l l. T{ \fBCommand-Line Format\fR @@ -456,19 +453,9 @@ T}:T{ --connect-retry-delay=# T} T{ -\fBType\fR (>= 5.7.10-ndb-7.5.0) -T}:T{ -numeric -T} -T{ \fBType\fR T}:T{ -numeric -T} -T{ -\fBDefault Value\fR (>= 5.7.10-ndb-7.5.0) -T}:T{ -5 +Numeric T} T{ \fBDefault Value\fR @@ -486,11 +473,6 @@ T}:T{ 0 T} T{ -\fBMaximum Value\fR (>= 5.7.10-ndb-7.5.0) -T}:T{ -4294967295 -T} -T{ \fBMaximum Value\fR T}:T{ 4294967295 @@ -530,7 +512,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -583,7 +565,7 @@ T} T{ \fBType\fR T}:T{ -string +String T} T{ \fBDefault Value\fR @@ -626,7 +608,7 @@ T} T{ \fBType\fR T}:T{ -string +String T} T{ \fBDefault Value\fR @@ -667,7 +649,7 @@ T} T{ \fBType\fR T}:T{ -string +String T} T{ \fBDefault Value\fR @@ -708,7 +690,7 @@ T} T{ \fBType\fR T}:T{ -string +String T} T{ \fBDefault Value\fR @@ -783,7 +765,7 @@ T} T{ \fBType\fR T}:T{ -string +String T} T{ \fBDefault Value\fR @@ -829,7 +811,7 @@ T} T{ \fBType\fR T}:T{ -string +String T} T{ \fBDefault Value\fR @@ -883,7 +865,7 @@ T} T{ \fBType\fR T}:T{ -string +String T} T{ \fBDefault Value\fR @@ -926,7 +908,7 @@ T} T{ \fBType\fR T}:T{ -numeric +Numeric T} T{ \fBDefault Value\fR @@ -969,7 +951,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -1010,7 +992,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -1051,7 +1033,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR diff --git a/man/ndb_blob_tool.1 b/man/ndb_blob_tool.1 index 230c4197c31b..3fb3cc0363ac 100644 --- a/man/ndb_blob_tool.1 +++ b/man/ndb_blob_tool.1 @@ -2,12 +2,12 @@ .\" Title: \fBndb_blob_tool\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBNDB_BLOB_TOOL\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBNDB_BLOB_TOOL\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -93,7 +93,7 @@ Options Common to NDB Cluster Programs(1)\&. .nr an-no-space-flag 1 .nr an-break-flag 1 .br -.B Table\ \&21.318.\ \&Command\-line options for the ndb_blob_tool program +.B Table\ \&21.333.\ \&Command\-line options for the ndb_blob_tool program .TS allbox tab(:); lB lB lB. @@ -191,7 +191,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -233,7 +233,7 @@ T} T{ \fBType\fR T}:T{ -string +String T} T{ \fBDefault Value\fR @@ -274,7 +274,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -315,7 +315,7 @@ T} T{ \fBType\fR T}:T{ -file name +File name T} T{ \fBDefault Value\fR @@ -357,7 +357,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR diff --git a/man/ndb_config.1 b/man/ndb_config.1 index 1509a22d51aa..ecedaee04f06 100644 --- a/man/ndb_config.1 +++ b/man/ndb_config.1 @@ -2,12 +2,12 @@ .\" Title: \fBndb_config\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBNDB_CONFIG\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBNDB_CONFIG\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -68,7 +68,7 @@ Options Common to NDB Cluster Programs(1)\&. .nr an-no-space-flag 1 .nr an-break-flag 1 .br -.B Table\ \&21.319.\ \&Command\-line options for the ndb_config program +.B Table\ \&21.334.\ \&Command\-line options for the ndb_config program .TS allbox tab(:); lB lB lB. @@ -413,7 +413,7 @@ T} T{ \fBType\fR T}:T{ -file name +File name T} T{ \fBDefault Value\fR @@ -457,7 +457,7 @@ T} T{ \fBType\fR T}:T{ -numeric +Numeric T} T{ \fBDefault Value\fR @@ -512,7 +512,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -564,10 +564,6 @@ T} l l l l l l -l l -l l -l l -l l l l. T{ \fBCommand-Line Format\fR @@ -580,29 +576,9 @@ T}:T{ 5.7.18-ndb-7.6.3 T} T{ -\fBType\fR (>= 5.7.18-ndb-7.6.3) -T}:T{ -boolean -T} -T{ -\fBType\fR (>= 5.7.18-ndb-7.5.7) -T}:T{ -boolean -T} -T{ \fBType\fR T}:T{ -boolean -T} -T{ -\fBDefault Value\fR (>= 5.7.18-ndb-7.6.3) -T}:T{ -FALSE -T} -T{ -\fBDefault Value\fR (>= 5.7.18-ndb-7.5.7) -T}:T{ -FALSE +Boolean T} T{ \fBDefault Value\fR @@ -645,7 +621,7 @@ T} T{ \fBType\fR T}:T{ -string +String T} T{ \fBDefault Value\fR @@ -708,7 +684,7 @@ T} T{ \fBType\fR T}:T{ -string +String T} T{ \fBDefault Value\fR @@ -778,7 +754,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -825,7 +801,7 @@ T} T{ \fBType\fR T}:T{ -string +String T} T{ \fBDefault Value\fR @@ -869,7 +845,7 @@ T} T{ \fBType\fR T}:T{ -numeric +Numeric T} T{ \fBDefault Value\fR @@ -912,7 +888,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -967,7 +943,7 @@ T} T{ \fBType\fR T}:T{ -string +String T} T{ \fBDefault Value\fR @@ -1040,12 +1016,12 @@ T}:T{ 5.7.18-ndb-7.5.7 T} T{ -\fBType\fR (>= 5.7.18-ndb-7.4.16,5.7.18-ndb-7.5.7) +\fBType\fR T}:T{ -string +String T} T{ -\fBDefault Value\fR (>= 5.7.18-ndb-7.4.16,5.7.18-ndb-7.5.7) +\fBDefault Value\fR T}:T{ T} .TE @@ -1086,7 +1062,7 @@ T} T{ \fBType\fR T}:T{ -string +String T} T{ \fBDefault Value\fR @@ -1147,7 +1123,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -1201,7 +1177,7 @@ T} T{ \fBType\fR T}:T{ -enumeration +Enumeration T} T{ \fBDefault Value\fR @@ -1325,7 +1301,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -1344,7 +1320,7 @@ to provide output as XML by adding this option\&. A portion of such output is sh .\} .nf shell> \fBndb_config \-\-configinfo \-\-xml\fR -
    diff --git a/man/ndb_cpcd.1 b/man/ndb_cpcd.1 index 98c71015acef..2d338d2a3994 100644 --- a/man/ndb_cpcd.1 +++ b/man/ndb_cpcd.1 @@ -2,12 +2,12 @@ .\" Title: \fBndb_cpcd\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBNDB_CPCD\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBNDB_CPCD\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/ndb_delete_all.1 b/man/ndb_delete_all.1 index 593f669122cd..ff8e4cf8e56d 100644 --- a/man/ndb_delete_all.1 +++ b/man/ndb_delete_all.1 @@ -2,12 +2,12 @@ .\" Title: \fBndb_delete_all\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBNDB_DELETE_ALL\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBNDB_DELETE_ALL\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -69,7 +69,7 @@ Options Common to NDB Cluster Programs(1)\&. .nr an-no-space-flag 1 .nr an-break-flag 1 .br -.B Table\ \&21.320.\ \&Command\-line options for the ndb_delete_all program +.B Table\ \&21.335.\ \&Command\-line options for the ndb_delete_all program .TS allbox tab(:); lB lB lB. diff --git a/man/ndb_desc.1 b/man/ndb_desc.1 index 7d640754b0b9..3ebc7eba0c95 100644 --- a/man/ndb_desc.1 +++ b/man/ndb_desc.1 @@ -2,12 +2,12 @@ .\" Title: \fBndb_desc\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBNDB_DESC\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBNDB_DESC\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -479,7 +479,7 @@ Options Common to NDB Cluster Programs(1)\&. .nr an-no-space-flag 1 .nr an-break-flag 1 .br -.B Table\ \&21.321.\ \&Command\-line options for the ndb_desc program +.B Table\ \&21.336.\ \&Command\-line options for the ndb_desc program .TS allbox tab(:); lB lB lB. diff --git a/man/ndb_drop_index.1 b/man/ndb_drop_index.1 index cb39b9c5bc2e..89ebd421282c 100644 --- a/man/ndb_drop_index.1 +++ b/man/ndb_drop_index.1 @@ -2,12 +2,12 @@ .\" Title: \fBndb_drop_index\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBNDB_DROP_INDEX\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBNDB_DROP_INDEX\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -67,7 +67,7 @@ Options Common to NDB Cluster Programs(1)\&. .nr an-no-space-flag 1 .nr an-break-flag 1 .br -.B Table\ \&21.322.\ \&Command\-line options for the ndb_drop_index program +.B Table\ \&21.337.\ \&Command\-line options for the ndb_drop_index program .TS allbox tab(:); lB lB lB. @@ -122,7 +122,7 @@ Enter password: ******* Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with \-A Welcome to the MySQL monitor\&. Commands end with ; or \eg\&. -Your MySQL connection id is 7 to server version: 5\&.7\&.23\-ndb\-7\&.5\&.11 +Your MySQL connection id is 7 to server version: 5\&.7\&.24\-ndb\-7\&.5\&.13 Type \*(Aqhelp;\*(Aq or \*(Aq\eh\*(Aq for help\&. Type \*(Aq\ec\*(Aq to clear the buffer\&. mysql> \fBSHOW TABLES;\fR +\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ diff --git a/man/ndb_drop_table.1 b/man/ndb_drop_table.1 index a5a32ce3dea9..117fcbbae97d 100644 --- a/man/ndb_drop_table.1 +++ b/man/ndb_drop_table.1 @@ -2,12 +2,12 @@ .\" Title: \fBndb_drop_table\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBNDB_DROP_TABLE\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBNDB_DROP_TABLE\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -65,7 +65,7 @@ Options Common to NDB Cluster Programs(1)\&. .nr an-no-space-flag 1 .nr an-break-flag 1 .br -.B Table\ \&21.323.\ \&Command\-line options for the ndb_drop_table program +.B Table\ \&21.338.\ \&Command\-line options for the ndb_drop_table program .TS allbox tab(:); lB lB lB. diff --git a/man/ndb_error_reporter.1 b/man/ndb_error_reporter.1 index 7b5df3d923d6..a92d179f301d 100644 --- a/man/ndb_error_reporter.1 +++ b/man/ndb_error_reporter.1 @@ -2,12 +2,12 @@ .\" Title: \fBndb_error_reporter\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBNDB_ERROR_REPORTER\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBNDB_ERROR_REPORTER\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -47,7 +47,7 @@ Options Common to NDB Cluster Programs(1)\&. .nr an-no-space-flag 1 .nr an-break-flag 1 .br -.B Table\ \&21.324.\ \&Command\-line options for the ndb_error_reporter program +.B Table\ \&21.339.\ \&Command\-line options for the ndb_error_reporter program .TS allbox tab(:); lB lB lB. @@ -154,7 +154,7 @@ T} T{ \fBType\fR T}:T{ -integer +Integer T} T{ \fBDefault Value\fR @@ -195,7 +195,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -238,7 +238,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -283,7 +283,7 @@ T} T{ \fBType\fR T}:T{ -integer +Integer T} T{ \fBDefault Value\fR diff --git a/man/ndb_import.1 b/man/ndb_import.1 index 0135a17d4512..e350d450f28f 100644 --- a/man/ndb_import.1 +++ b/man/ndb_import.1 @@ -2,12 +2,12 @@ .\" Title: \fBndb_import\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBNDB_IMPORT\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBNDB_IMPORT\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -182,7 +182,7 @@ Options Common to NDB Cluster Programs(1)\&. .nr an-no-space-flag 1 .nr an-break-flag 1 .br -.B Table\ \&21.325.\ \&Command\-line options for the ndb_import program +.B Table\ \&21.340.\ \&Command\-line options for the ndb_import program .TS allbox tab(:); lB lB lB. @@ -635,12 +635,12 @@ T}:T{ 5.7.18-ndb-7.6.2 T} T{ -\fBType\fR (>= 5.7.18-ndb-7.6.2) +\fBType\fR T}:T{ -boolean +Boolean T} T{ -\fBDefault Value\fR (>= 5.7.18-ndb-7.6.2) +\fBDefault Value\fR T}:T{ FALSE T} @@ -684,22 +684,22 @@ T}:T{ 5.7.18-ndb-7.6.2 T} T{ -\fBType\fR (>= 5.7.18-ndb-7.6.2) +\fBType\fR T}:T{ -integer +Integer T} T{ -\fBDefault Value\fR (>= 5.7.18-ndb-7.6.2) +\fBDefault Value\fR T}:T{ 1 T} T{ -\fBMinimum Value\fR (>= 5.7.18-ndb-7.6.2) +\fBMinimum Value\fR T}:T{ 1 T} T{ -\fBMaximum Value\fR (>= 5.7.18-ndb-7.6.2) +\fBMaximum Value\fR T}:T{ 4294967295 T} @@ -745,22 +745,22 @@ T}:T{ 5.7.18-ndb-7.6.2 T} T{ -\fBType\fR (>= 5.7.18-ndb-7.6.2) +\fBType\fR T}:T{ -integer +Integer T} T{ -\fBDefault Value\fR (>= 5.7.18-ndb-7.6.2) +\fBDefault Value\fR T}:T{ 1 T} T{ -\fBMinimum Value\fR (>= 5.7.18-ndb-7.6.2) +\fBMinimum Value\fR T}:T{ 1 T} T{ -\fBMaximum Value\fR (>= 5.7.18-ndb-7.6.2) +\fBMaximum Value\fR T}:T{ 4294967295 T} @@ -806,22 +806,22 @@ T}:T{ 5.7.18-ndb-7.6.2 T} T{ -\fBType\fR (>= 5.7.18-ndb-7.6.2) +\fBType\fR T}:T{ -integer +Integer T} T{ -\fBDefault Value\fR (>= 5.7.18-ndb-7.6.2) +\fBDefault Value\fR T}:T{ 1024 T} T{ -\fBMinimum Value\fR (>= 5.7.18-ndb-7.6.2) +\fBMinimum Value\fR T}:T{ 1 T} T{ -\fBMaximum Value\fR (>= 5.7.18-ndb-7.6.2) +\fBMaximum Value\fR T}:T{ 4294967295 T} @@ -867,22 +867,22 @@ T}:T{ 5.7.18-ndb-7.6.2 T} T{ -\fBType\fR (>= 5.7.18-ndb-7.6.2) +\fBType\fR T}:T{ -integer +Integer T} T{ -\fBDefault Value\fR (>= 5.7.18-ndb-7.6.2) +\fBDefault Value\fR T}:T{ 1 T} T{ -\fBMinimum Value\fR (>= 5.7.18-ndb-7.6.2) +\fBMinimum Value\fR T}:T{ 1 T} T{ -\fBMaximum Value\fR (>= 5.7.18-ndb-7.6.2) +\fBMaximum Value\fR T}:T{ 4294967295 T} @@ -924,12 +924,12 @@ T}:T{ 5.7.18-ndb-7.6.2 T} T{ -\fBType\fR (>= 5.7.18-ndb-7.6.2) +\fBType\fR T}:T{ -boolean +Boolean T} T{ -\fBDefault Value\fR (>= 5.7.18-ndb-7.6.2) +\fBDefault Value\fR T}:T{ FALSE T} @@ -973,22 +973,22 @@ T}:T{ 5.7.18-ndb-7.6.2 T} T{ -\fBType\fR (>= 5.7.18-ndb-7.6.2) +\fBType\fR T}:T{ -integer +Integer T} T{ -\fBDefault Value\fR (>= 5.7.18-ndb-7.6.2) +\fBDefault Value\fR T}:T{ 1 T} T{ -\fBMinimum Value\fR (>= 5.7.18-ndb-7.6.2) +\fBMinimum Value\fR T}:T{ 1 T} T{ -\fBMaximum Value\fR (>= 5.7.18-ndb-7.6.2) +\fBMaximum Value\fR T}:T{ 4294967295 T} @@ -1031,17 +1031,17 @@ T}:T{ 5.7.18-ndb-7.6.2 T} T{ -\fBType\fR (>= 5.7.18-ndb-7.6.2) +\fBType\fR T}:T{ -enumeration +Enumeration T} T{ -\fBDefault Value\fR (>= 5.7.18-ndb-7.6.2) +\fBDefault Value\fR T}:T{ [none] T} T{ -\fBValid Values\fR (>= 5.7.18-ndb-7.6.2) +\fBValid Values\fR T}:T{ .PP stopjob @@ -1098,22 +1098,22 @@ T}:T{ 5.7.18-ndb-7.6.2 T} T{ -\fBType\fR (>= 5.7.18-ndb-7.6.2) +\fBType\fR T}:T{ -integer +Integer T} T{ -\fBDefault Value\fR (>= 5.7.18-ndb-7.6.2) +\fBDefault Value\fR T}:T{ 1000 T} T{ -\fBMinimum Value\fR (>= 5.7.18-ndb-7.6.2) +\fBMinimum Value\fR T}:T{ 0 T} T{ -\fBMaximum Value\fR (>= 5.7.18-ndb-7.6.2) +\fBMaximum Value\fR T}:T{ 4294967295 T} @@ -1155,12 +1155,12 @@ T}:T{ 5.7.18-ndb-7.6.2 T} T{ -\fBType\fR (>= 5.7.18-ndb-7.6.2) +\fBType\fR T}:T{ -string +String T} T{ -\fBDefault Value\fR (>= 5.7.18-ndb-7.6.2) +\fBDefault Value\fR T}:T{ [none] T} @@ -1207,12 +1207,12 @@ T}:T{ 5.7.18-ndb-7.6.2 T} T{ -\fBType\fR (>= 5.7.18-ndb-7.6.2) +\fBType\fR T}:T{ -string +String T} T{ -\fBDefault Value\fR (>= 5.7.18-ndb-7.6.2) +\fBDefault Value\fR T}:T{ \ T} @@ -1258,12 +1258,12 @@ T}:T{ 5.7.18-ndb-7.6.2 T} T{ -\fBType\fR (>= 5.7.18-ndb-7.6.2) +\fBType\fR T}:T{ -string +String T} T{ -\fBDefault Value\fR (>= 5.7.18-ndb-7.6.2) +\fBDefault Value\fR T}:T{ [none] T} @@ -1310,12 +1310,12 @@ T}:T{ 5.7.18-ndb-7.6.2 T} T{ -\fBType\fR (>= 5.7.18-ndb-7.6.2) +\fBType\fR T}:T{ -string +String T} T{ -\fBDefault Value\fR (>= 5.7.18-ndb-7.6.2) +\fBDefault Value\fR T}:T{ \t T} @@ -1363,22 +1363,22 @@ T}:T{ 5.7.18-ndb-7.6.2 T} T{ -\fBType\fR (>= 5.7.18-ndb-7.6.2) +\fBType\fR T}:T{ -integer +Integer T} T{ -\fBDefault Value\fR (>= 5.7.18-ndb-7.6.2) +\fBDefault Value\fR T}:T{ 1 T} T{ -\fBMinimum Value\fR (>= 5.7.18-ndb-7.6.2) +\fBMinimum Value\fR T}:T{ 1 T} T{ -\fBMaximum Value\fR (>= 5.7.18-ndb-7.6.2) +\fBMaximum Value\fR T}:T{ 4294967295 T} @@ -1422,22 +1422,22 @@ T}:T{ 5.7.18-ndb-7.6.2 T} T{ -\fBType\fR (>= 5.7.18-ndb-7.6.2) +\fBType\fR T}:T{ -integer +Integer T} T{ -\fBDefault Value\fR (>= 5.7.18-ndb-7.6.2) +\fBDefault Value\fR T}:T{ 0 T} T{ -\fBMinimum Value\fR (>= 5.7.18-ndb-7.6.2) +\fBMinimum Value\fR T}:T{ 0 T} T{ -\fBMaximum Value\fR (>= 5.7.18-ndb-7.6.2) +\fBMaximum Value\fR T}:T{ 4294967295 T} @@ -1481,22 +1481,22 @@ T}:T{ 5.7.18-ndb-7.6.2 T} T{ -\fBType\fR (>= 5.7.18-ndb-7.6.2) +\fBType\fR T}:T{ -integer +Integer T} T{ -\fBDefault Value\fR (>= 5.7.18-ndb-7.6.2) +\fBDefault Value\fR T}:T{ 0 T} T{ -\fBMinimum Value\fR (>= 5.7.18-ndb-7.6.2) +\fBMinimum Value\fR T}:T{ 0 T} T{ -\fBMaximum Value\fR (>= 5.7.18-ndb-7.6.2) +\fBMaximum Value\fR T}:T{ 4294967295 T} @@ -1541,17 +1541,17 @@ T}:T{ 5.7.18-ndb-7.6.2 T} T{ -\fBType\fR (>= 5.7.18-ndb-7.6.2) +\fBType\fR T}:T{ -enumeration +Enumeration T} T{ -\fBDefault Value\fR (>= 5.7.18-ndb-7.6.2) +\fBDefault Value\fR T}:T{ csv T} T{ -\fBValid Values\fR (>= 5.7.18-ndb-7.6.2) +\fBValid Values\fR T}:T{ .PP random @@ -1601,22 +1601,22 @@ T}:T{ 5.7.18-ndb-7.6.2 T} T{ -\fBType\fR (>= 5.7.18-ndb-7.6.2) +\fBType\fR T}:T{ -integer +Integer T} T{ -\fBDefault Value\fR (>= 5.7.18-ndb-7.6.2) +\fBDefault Value\fR T}:T{ 2 T} T{ -\fBMinimum Value\fR (>= 5.7.18-ndb-7.6.2) +\fBMinimum Value\fR T}:T{ 1 T} T{ -\fBMaximum Value\fR (>= 5.7.18-ndb-7.6.2) +\fBMaximum Value\fR T}:T{ 4294967295 T} @@ -1658,12 +1658,12 @@ T}:T{ 5.7.18-ndb-7.6.2 T} T{ -\fBType\fR (>= 5.7.18-ndb-7.6.2) +\fBType\fR T}:T{ -string +String T} T{ -\fBDefault Value\fR (>= 5.7.18-ndb-7.6.2) +\fBDefault Value\fR T}:T{ \n T} @@ -1711,22 +1711,22 @@ T}:T{ 5.7.18-ndb-7.6.2 T} T{ -\fBType\fR (>= 5.7.18-ndb-7.6.2) +\fBType\fR T}:T{ -integer +Integer T} T{ -\fBDefault Value\fR (>= 5.7.18-ndb-7.6.2) +\fBDefault Value\fR T}:T{ 0 T} T{ -\fBMinimum Value\fR (>= 5.7.18-ndb-7.6.2) +\fBMinimum Value\fR T}:T{ 0 T} T{ -\fBMaximum Value\fR (>= 5.7.18-ndb-7.6.2) +\fBMaximum Value\fR T}:T{ 4294967295 T} @@ -1770,22 +1770,22 @@ T}:T{ 5.7.18-ndb-7.6.2 T} T{ -\fBType\fR (>= 5.7.18-ndb-7.6.2) +\fBType\fR T}:T{ -integer +Integer T} T{ -\fBDefault Value\fR (>= 5.7.18-ndb-7.6.2) +\fBDefault Value\fR T}:T{ 2 T} T{ -\fBMinimum Value\fR (>= 5.7.18-ndb-7.6.2) +\fBMinimum Value\fR T}:T{ 0 T} T{ -\fBMaximum Value\fR (>= 5.7.18-ndb-7.6.2) +\fBMaximum Value\fR T}:T{ 4294967295 T} @@ -1827,12 +1827,12 @@ T}:T{ 5.7.18-ndb-7.6.2 T} T{ -\fBType\fR (>= 5.7.18-ndb-7.6.2) +\fBType\fR T}:T{ -boolean +Boolean T} T{ -\fBDefault Value\fR (>= 5.7.18-ndb-7.6.2) +\fBDefault Value\fR T}:T{ FALSE T} @@ -1874,12 +1874,12 @@ T}:T{ 5.7.18-ndb-7.6.2 T} T{ -\fBType\fR (>= 5.7.18-ndb-7.6.2) +\fBType\fR T}:T{ -boolean +Boolean T} T{ -\fBDefault Value\fR (>= 5.7.18-ndb-7.6.2) +\fBDefault Value\fR T}:T{ FALSE T} @@ -1923,22 +1923,22 @@ T}:T{ 5.7.18-ndb-7.6.2 T} T{ -\fBType\fR (>= 5.7.18-ndb-7.6.2) +\fBType\fR T}:T{ -integer +Integer T} T{ -\fBDefault Value\fR (>= 5.7.18-ndb-7.6.2) +\fBDefault Value\fR T}:T{ 256 T} T{ -\fBMinimum Value\fR (>= 5.7.18-ndb-7.6.2) +\fBMinimum Value\fR T}:T{ 1 T} T{ -\fBMaximum Value\fR (>= 5.7.18-ndb-7.6.2) +\fBMaximum Value\fR T}:T{ 4294967295 T} @@ -1982,22 +1982,22 @@ T}:T{ 5.7.18-ndb-7.6.2 T} T{ -\fBType\fR (>= 5.7.18-ndb-7.6.2) +\fBType\fR T}:T{ -integer +Integer T} T{ -\fBDefault Value\fR (>= 5.7.18-ndb-7.6.2) +\fBDefault Value\fR T}:T{ 0 T} T{ -\fBMinimum Value\fR (>= 5.7.18-ndb-7.6.2) +\fBMinimum Value\fR T}:T{ 0 T} T{ -\fBMaximum Value\fR (>= 5.7.18-ndb-7.6.2) +\fBMaximum Value\fR T}:T{ 4294967295 T} @@ -2040,17 +2040,17 @@ T}:T{ 5.7.18-ndb-7.6.2 T} T{ -\fBType\fR (>= 5.7.18-ndb-7.6.2) +\fBType\fR T}:T{ -enumeration +Enumeration T} T{ -\fBDefault Value\fR (>= 5.7.18-ndb-7.6.2) +\fBDefault Value\fR T}:T{ ndb T} T{ -\fBValid Values\fR (>= 5.7.18-ndb-7.6.2) +\fBValid Values\fR T}:T{ null T} @@ -2098,22 +2098,22 @@ T}:T{ 5.7.18-ndb-7.6.2 T} T{ -\fBType\fR (>= 5.7.18-ndb-7.6.2) +\fBType\fR T}:T{ -integer +Integer T} T{ -\fBDefault Value\fR (>= 5.7.18-ndb-7.6.2) +\fBDefault Value\fR T}:T{ 2 T} T{ -\fBMinimum Value\fR (>= 5.7.18-ndb-7.6.2) +\fBMinimum Value\fR T}:T{ 1 T} T{ -\fBMaximum Value\fR (>= 5.7.18-ndb-7.6.2) +\fBMaximum Value\fR T}:T{ 4294967295 T} @@ -2157,22 +2157,22 @@ T}:T{ 5.7.18-ndb-7.6.2 T} T{ -\fBType\fR (>= 5.7.18-ndb-7.6.2) +\fBType\fR T}:T{ -integer +Integer T} T{ -\fBDefault Value\fR (>= 5.7.18-ndb-7.6.2) +\fBDefault Value\fR T}:T{ 4096 T} T{ -\fBMinimum Value\fR (>= 5.7.18-ndb-7.6.2) +\fBMinimum Value\fR T}:T{ 1 T} T{ -\fBMaximum Value\fR (>= 5.7.18-ndb-7.6.2) +\fBMaximum Value\fR T}:T{ 4294967295 T} @@ -2216,22 +2216,22 @@ T}:T{ 5.7.18-ndb-7.6.2 T} T{ -\fBType\fR (>= 5.7.18-ndb-7.6.2) +\fBType\fR T}:T{ -integer +Integer T} T{ -\fBDefault Value\fR (>= 5.7.18-ndb-7.6.2) +\fBDefault Value\fR T}:T{ 64 T} T{ -\fBMinimum Value\fR (>= 5.7.18-ndb-7.6.2) +\fBMinimum Value\fR T}:T{ 1 T} T{ -\fBMaximum Value\fR (>= 5.7.18-ndb-7.6.2) +\fBMaximum Value\fR T}:T{ 4294967295 T} @@ -2275,22 +2275,22 @@ T}:T{ 5.7.18-ndb-7.6.2 T} T{ -\fBType\fR (>= 5.7.18-ndb-7.6.2) +\fBType\fR T}:T{ -integer +Integer T} T{ -\fBDefault Value\fR (>= 5.7.18-ndb-7.6.2) +\fBDefault Value\fR T}:T{ 1000 T} T{ -\fBMinimum Value\fR (>= 5.7.18-ndb-7.6.2) +\fBMinimum Value\fR T}:T{ 1 T} T{ -\fBMaximum Value\fR (>= 5.7.18-ndb-7.6.2) +\fBMaximum Value\fR T}:T{ 4294967295 T} @@ -2334,22 +2334,22 @@ T}:T{ 5.7.18-ndb-7.6.2 T} T{ -\fBType\fR (>= 5.7.18-ndb-7.6.2) +\fBType\fR T}:T{ -integer +Integer T} T{ -\fBDefault Value\fR (>= 5.7.18-ndb-7.6.2) +\fBDefault Value\fR T}:T{ 0 T} T{ -\fBMinimum Value\fR (>= 5.7.18-ndb-7.6.2) +\fBMinimum Value\fR T}:T{ 0 T} T{ -\fBMaximum Value\fR (>= 5.7.18-ndb-7.6.2) +\fBMaximum Value\fR T}:T{ 4294967295 T} @@ -2393,12 +2393,12 @@ T}:T{ 5.7.18-ndb-7.6.2 T} T{ -\fBType\fR (>= 5.7.18-ndb-7.6.2) +\fBType\fR T}:T{ -boolean +Boolean T} T{ -\fBDefault Value\fR (>= 5.7.18-ndb-7.6.2) +\fBDefault Value\fR T}:T{ FALSE T} @@ -2442,22 +2442,22 @@ T}:T{ 5.7.18-ndb-7.6.2 T} T{ -\fBType\fR (>= 5.7.18-ndb-7.6.2) +\fBType\fR T}:T{ -integer +Integer T} T{ -\fBDefault Value\fR (>= 5.7.18-ndb-7.6.2) +\fBDefault Value\fR T}:T{ 0 T} T{ -\fBMinimum Value\fR (>= 5.7.18-ndb-7.6.2) +\fBMinimum Value\fR T}:T{ 0 T} T{ -\fBMaximum Value\fR (>= 5.7.18-ndb-7.6.2) +\fBMaximum Value\fR T}:T{ 4294967295 T} @@ -2501,22 +2501,22 @@ T}:T{ 5.7.18-ndb-7.6.2 T} T{ -\fBType\fR (>= 5.7.18-ndb-7.6.2) +\fBType\fR T}:T{ -integer +Integer T} T{ -\fBDefault Value\fR (>= 5.7.18-ndb-7.6.2) +\fBDefault Value\fR T}:T{ 262144 T} T{ -\fBMinimum Value\fR (>= 5.7.18-ndb-7.6.2) +\fBMinimum Value\fR T}:T{ 0 T} T{ -\fBMaximum Value\fR (>= 5.7.18-ndb-7.6.2) +\fBMaximum Value\fR T}:T{ 4294967295 T} @@ -2558,12 +2558,12 @@ T}:T{ 5.7.18-ndb-7.6.2 T} T{ -\fBType\fR (>= 5.7.18-ndb-7.6.2) +\fBType\fR T}:T{ -string +String T} T{ -\fBDefault Value\fR (>= 5.7.18-ndb-7.6.2) +\fBDefault Value\fR T}:T{ . T} @@ -2610,22 +2610,22 @@ T}:T{ 5.7.18-ndb-7.6.2 T} T{ -\fBType\fR (>= 5.7.18-ndb-7.6.2) +\fBType\fR T}:T{ -integer +Integer T} T{ -\fBDefault Value\fR (>= 5.7.18-ndb-7.6.2) +\fBDefault Value\fR T}:T{ 10 T} T{ -\fBMinimum Value\fR (>= 5.7.18-ndb-7.6.2) +\fBMinimum Value\fR T}:T{ 0 T} T{ -\fBMaximum Value\fR (>= 5.7.18-ndb-7.6.2) +\fBMaximum Value\fR T}:T{ 4294967295 T} @@ -2669,22 +2669,22 @@ T}:T{ 5.7.18-ndb-7.6.2 T} T{ -\fBType\fR (>= 5.7.18-ndb-7.6.2) +\fBType\fR T}:T{ -integer +Integer T} T{ -\fBDefault Value\fR (>= 5.7.18-ndb-7.6.2) +\fBDefault Value\fR T}:T{ 0 T} T{ -\fBMinimum Value\fR (>= 5.7.18-ndb-7.6.2) +\fBMinimum Value\fR T}:T{ 0 T} T{ -\fBMaximum Value\fR (>= 5.7.18-ndb-7.6.2) +\fBMaximum Value\fR T}:T{ 4294967295 T} @@ -2731,22 +2731,22 @@ T}:T{ 5.7.18-ndb-7.6.2 T} T{ -\fBType\fR (>= 5.7.18-ndb-7.6.2) +\fBType\fR T}:T{ -integer +Integer T} T{ -\fBDefault Value\fR (>= 5.7.18-ndb-7.6.2) +\fBDefault Value\fR T}:T{ 0 T} T{ -\fBMinimum Value\fR (>= 5.7.18-ndb-7.6.2) +\fBMinimum Value\fR T}:T{ 0 T} T{ -\fBMaximum Value\fR (>= 5.7.18-ndb-7.6.2) +\fBMaximum Value\fR T}:T{ 2 T} diff --git a/man/ndb_index_stat.1 b/man/ndb_index_stat.1 index f7163d67dc7a..cd113a152fde 100644 --- a/man/ndb_index_stat.1 +++ b/man/ndb_index_stat.1 @@ -2,12 +2,12 @@ .\" Title: \fBndb_index_stat\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBNDB_INDEX_STAT\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBNDB_INDEX_STAT\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -176,7 +176,7 @@ Options Common to NDB Cluster Programs(1)\&. .nr an-no-space-flag 1 .nr an-break-flag 1 .br -.B Table\ \&21.326.\ \&Command\-line options for the ndb_index_stat program +.B Table\ \&21.341.\ \&Command\-line options for the ndb_index_stat program .TS allbox tab(:); lB lB lB. @@ -377,7 +377,7 @@ T} T{ \fBType\fR T}:T{ -string +String T} T{ \fBDefault Value\fR @@ -428,7 +428,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -479,7 +479,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -530,7 +530,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -581,7 +581,7 @@ T} T{ \fBType\fR T}:T{ -numeric +Numeric T} T{ \fBDefault Value\fR @@ -637,7 +637,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -689,7 +689,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -740,7 +740,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -791,7 +791,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -842,7 +842,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -893,7 +893,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -946,7 +946,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -999,7 +999,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -1050,7 +1050,7 @@ T} T{ \fBType\fR T}:T{ -numeric +Numeric T} T{ \fBDefault Value\fR diff --git a/man/ndb_mgm.1 b/man/ndb_mgm.1 index eb4974585c26..6e30fbc8266b 100644 --- a/man/ndb_mgm.1 +++ b/man/ndb_mgm.1 @@ -2,12 +2,12 @@ .\" Title: \fBndb_mgm\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBNDB_MGM\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBNDB_MGM\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -76,7 +76,7 @@ Options Common to NDB Cluster Programs(1)\&. .nr an-no-space-flag 1 .nr an-break-flag 1 .br -.B Table\ \&21.317.\ \&Command\-line options for the ndb_mgm program +.B Table\ \&21.332.\ \&Command\-line options for the ndb_mgm program .TS allbox tab(:); lB lB lB. @@ -147,7 +147,7 @@ T} T{ \fBType\fR T}:T{ -numeric +Numeric T} T{ \fBDefault Value\fR @@ -273,8 +273,6 @@ l l l l l l l l -l l -l l l l. T{ \fBCommand-Line Format\fR @@ -289,12 +287,12 @@ T} T{ \fBType\fR (>= 5.7.10-ndb-7.5.0) T}:T{ -numeric +Numeric T} T{ \fBType\fR T}:T{ -integer +Integer T} T{ \fBDefault Value\fR (>= 5.7.10-ndb-7.5.0) @@ -307,21 +305,11 @@ T}:T{ 3 T} T{ -\fBMinimum Value\fR (>= 5.7.10-ndb-7.5.0) -T}:T{ -0 -T} -T{ \fBMinimum Value\fR T}:T{ 0 T} T{ -\fBMaximum Value\fR (>= 5.7.10-ndb-7.5.0) -T}:T{ -4294967295 -T} -T{ \fBMaximum Value\fR T}:T{ 4294967295 diff --git a/man/ndb_mgmd.8 b/man/ndb_mgmd.8 index 47fecc551668..edb2efbf0dd5 100644 --- a/man/ndb_mgmd.8 +++ b/man/ndb_mgmd.8 @@ -2,12 +2,12 @@ .\" Title: \fBndb_mgmd\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBNDB_MGMD\FR" "8" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBNDB_MGMD\FR" "8" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -45,7 +45,7 @@ Options Common to NDB Cluster Programs(1)\&. .nr an-no-space-flag 1 .nr an-break-flag 1 .br -.B Table\ \&21.316.\ \&Command\-line options for the ndb_mgmd program +.B Table\ \&21.331.\ \&Command\-line options for the ndb_mgmd program .TS allbox tab(:); lB lB lB. @@ -283,7 +283,7 @@ T} T{ \fBType\fR T}:T{ -string +String T} T{ \fBDefault Value\fR @@ -324,7 +324,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -479,7 +479,7 @@ T} T{ \fBType\fR T}:T{ -file name +File name T} T{ \fBDefault Value\fR @@ -539,7 +539,7 @@ T} T{ \fBType\fR T}:T{ -file name +File name T} T{ \fBDefault Value\fR @@ -583,7 +583,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -630,7 +630,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -705,7 +705,7 @@ T} T{ \fBType\fR T}:T{ -string +String T} T{ \fBDefault Value\fR @@ -768,7 +768,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -813,7 +813,7 @@ T} T{ \fBType\fR T}:T{ -string +String T} T{ \fBDefault Value\fR @@ -854,7 +854,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -897,7 +897,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -938,7 +938,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -987,7 +987,7 @@ T} T{ \fBType\fR T}:T{ -numeric +Numeric T} T{ \fBDefault Value\fR @@ -1145,7 +1145,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -1190,7 +1190,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -1257,7 +1257,7 @@ T} T{ \fBType\fR T}:T{ -string +String T} T{ \fBDefault Value\fR @@ -1299,7 +1299,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR diff --git a/man/ndb_move_data.1 b/man/ndb_move_data.1 index 4db14da2c768..3806ec133c66 100644 --- a/man/ndb_move_data.1 +++ b/man/ndb_move_data.1 @@ -2,12 +2,12 @@ .\" Title: \fBndb_move_data\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBNDB_MOVE_DATA\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBNDB_MOVE_DATA\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -58,7 +58,7 @@ Options Common to NDB Cluster Programs(1)\&. .nr an-no-space-flag 1 .nr an-break-flag 1 .br -.B Table\ \&21.327.\ \&Command\-line options for the ndb_move_data program +.B Table\ \&21.342.\ \&Command\-line options for the ndb_move_data program .TS allbox tab(:); lB lB lB. @@ -209,7 +209,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -250,7 +250,7 @@ T} T{ \fBType\fR T}:T{ -string +String T} T{ \fBDefault Value\fR @@ -292,7 +292,7 @@ T} T{ \fBType\fR T}:T{ -string +String T} T{ \fBDefault Value\fR @@ -333,7 +333,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -374,7 +374,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -415,7 +415,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -457,7 +457,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -499,7 +499,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -540,7 +540,7 @@ T} T{ \fBType\fR T}:T{ -string +String T} T{ \fBDefault Value\fR @@ -581,7 +581,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR diff --git a/man/ndb_perror.1 b/man/ndb_perror.1 index 617ff862e3b1..134cc061851d 100644 --- a/man/ndb_perror.1 +++ b/man/ndb_perror.1 @@ -2,12 +2,12 @@ .\" Title: \fBndb_perror\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBNDB_PERROR\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBNDB_PERROR\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -122,7 +122,7 @@ The following table includes all options that are specific to the NDB Cluster pr .nr an-no-space-flag 1 .nr an-break-flag 1 .br -.B Table\ \&21.328.\ \&Command\-line options for the ndb_perror program +.B Table\ \&21.343.\ \&Command\-line options for the ndb_perror program .TS allbox tab(:); lB lB lB. @@ -233,7 +233,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -280,7 +280,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -334,7 +334,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -382,7 +382,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -430,7 +430,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR diff --git a/man/ndb_print_backup_file.1 b/man/ndb_print_backup_file.1 index afd99a54dc3e..e7669423b5d6 100644 --- a/man/ndb_print_backup_file.1 +++ b/man/ndb_print_backup_file.1 @@ -2,12 +2,12 @@ .\" Title: \fBndb_print_backup_file\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBNDB_PRINT_BACKUP_FILE\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBNDB_PRINT_BACKUP_FILE\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/ndb_print_file.1 b/man/ndb_print_file.1 index 6aa86541e3ce..4d82441144ac 100644 --- a/man/ndb_print_file.1 +++ b/man/ndb_print_file.1 @@ -2,12 +2,12 @@ .\" Title: \fBndb_print_file\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBNDB_PRINT_FILE\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBNDB_PRINT_FILE\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/ndb_print_frag_file.1 b/man/ndb_print_frag_file.1 index 00c1196af64f..c1281e7ab663 100644 --- a/man/ndb_print_frag_file.1 +++ b/man/ndb_print_frag_file.1 @@ -2,12 +2,12 @@ .\" Title: \fBndb_print_frag_file\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBNDB_PRINT_FRAG_FILE\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBNDB_PRINT_FRAG_FILE\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/ndb_print_schema_file.1 b/man/ndb_print_schema_file.1 index a88c238b3daf..7543e8bac001 100644 --- a/man/ndb_print_schema_file.1 +++ b/man/ndb_print_schema_file.1 @@ -2,12 +2,12 @@ .\" Title: \fBndb_print_schema_file\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBNDB_PRINT_SCHEMA_FILE\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBNDB_PRINT_SCHEMA_FILE\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/ndb_print_sys_file.1 b/man/ndb_print_sys_file.1 index f97e23b376c9..1529442cae82 100644 --- a/man/ndb_print_sys_file.1 +++ b/man/ndb_print_sys_file.1 @@ -2,12 +2,12 @@ .\" Title: \fBndb_print_sys_file\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBNDB_PRINT_SYS_FILE\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBNDB_PRINT_SYS_FILE\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/ndb_redo_log_reader.1 b/man/ndb_redo_log_reader.1 index 4c9a01b083df..5cb0b5cc9917 100644 --- a/man/ndb_redo_log_reader.1 +++ b/man/ndb_redo_log_reader.1 @@ -2,12 +2,12 @@ .\" Title: \fBndb_redo_log_reader\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBNDB_REDO_LOG_READER\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBNDB_REDO_LOG_READER\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -71,7 +71,7 @@ Options Common to NDB Cluster Programs(1)\&. .nr an-no-space-flag 1 .nr an-break-flag 1 .br -.B Table\ \&21.329.\ \&Command\-line options for the ndb_redo_log_reader program +.B Table\ \&21.344.\ \&Command\-line options for the ndb_redo_log_reader program .TS allbox tab(:); lB lB lB. @@ -263,7 +263,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -303,7 +303,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -372,7 +372,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -414,7 +414,7 @@ T} T{ \fBType\fR T}:T{ -numeric +Numeric T} T{ \fBDefault Value\fR @@ -467,7 +467,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -507,7 +507,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -547,7 +547,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -589,7 +589,7 @@ T} T{ \fBType\fR T}:T{ -integer +Integer T} T{ \fBDefault Value\fR @@ -642,7 +642,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -684,7 +684,7 @@ T} T{ \fBType\fR T}:T{ -integer +Integer T} T{ \fBDefault Value\fR @@ -738,7 +738,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR diff --git a/man/ndb_restore.1 b/man/ndb_restore.1 index 3c887e89d76c..37f93d956b9b 100644 --- a/man/ndb_restore.1 +++ b/man/ndb_restore.1 @@ -2,12 +2,12 @@ .\" Title: \fBndb_restore\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBNDB_RESTORE\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBNDB_RESTORE\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -72,7 +72,7 @@ Options Common to NDB Cluster Programs(1)\&. .nr an-no-space-flag 1 .nr an-break-flag 1 .br -.B Table\ \&21.330.\ \&Command\-line options for the ndb_restore program +.B Table\ \&21.345.\ \&Command\-line options for the ndb_restore program .TS allbox tab(:); lB lB lB. @@ -718,7 +718,7 @@ T} T{ \fBType\fR T}:T{ -directory name +Directory name T} T{ \fBDefault Value\fR @@ -750,7 +750,7 @@ and must be run twice\(emonce for each storage node in the cluster where the backup was taken\&. However, \fBndb_restore\fR cannot always restore backups made from a cluster running one version of MySQL to a cluster running a different MySQL version\&. See -Section\ \&21.2.8, \(lqUpgrading and Downgrading NDB Cluster\(rq, for more information\&. +Section\ \&21.2.9, \(lqUpgrading and Downgrading NDB Cluster\(rq, for more information\&. .if n \{\ .sp .\} @@ -768,9 +768,9 @@ It is not possible to restore a backup made from a newer version of NDB Cluster \fBndb_restore\fR from the newer NDB Cluster version to do so\&. .sp -For example, to restore a cluster backup taken from a cluster running NDB Cluster 7\&.5\&.11 to a cluster running NDB Cluster 7\&.4\&.21, you must use the +For example, to restore a cluster backup taken from a cluster running NDB Cluster 7\&.5\&.13 to a cluster running NDB Cluster 7\&.4\&.23, you must use the \fBndb_restore\fR -that comes with the NDB Cluster 7\&.5\&.11 distribution\&. +that comes with the NDB Cluster 7\&.5\&.13 distribution\&. .sp .5v .RE For more rapid restoration, the data may be restored in parallel, provided that there is a sufficient number of cluster connections available\&. That is, when restoring to multiple nodes in parallel, you must have an @@ -814,7 +814,7 @@ T} T{ \fBType\fR T}:T{ -numeric +Numeric T} T{ \fBDefault Value\fR @@ -874,7 +874,7 @@ T} T{ \fBType\fR T}:T{ -string +String T} T{ \fBDefault Value\fR @@ -985,7 +985,7 @@ T} T{ \fBType\fR T}:T{ -string +String T} T{ \fBDefault Value\fR @@ -1028,7 +1028,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -1147,7 +1147,7 @@ T} T{ \fBType\fR T}:T{ -string +String T} T{ \fBDefault Value\fR @@ -1175,7 +1175,7 @@ options (other options possibly required have been omitted for clarity), and the .nr an-no-space-flag 1 .nr an-break-flag 1 .br -.B Table\ \&21.331.\ \&Several invocations of ndb_restore using \-\-exclude\-* options, and the effects these options have on restoring from an NDB Cluster backup\&. +.B Table\ \&21.346.\ \&Several invocations of ndb_restore using \-\-exclude\-* options, and the effects these options have on restoring from an NDB Cluster backup\&. .TS allbox tab(:); lB lB. @@ -1369,7 +1369,7 @@ T} T{ \fBType\fR T}:T{ -string +String T} T{ \fBDefault Value\fR @@ -1410,7 +1410,7 @@ T} T{ \fBType\fR T}:T{ -string +String T} T{ \fBDefault Value\fR @@ -1455,7 +1455,7 @@ T} T{ \fBType\fR T}:T{ -string +String T} T{ \fBDefault Value\fR @@ -1525,7 +1525,7 @@ T} T{ \fBType\fR T}:T{ -string +String T} T{ \fBDefault Value\fR @@ -1566,7 +1566,7 @@ T} T{ \fBType\fR T}:T{ -string +String T} T{ \fBDefault Value\fR @@ -1593,7 +1593,7 @@ options (other options possibly required have been omitted for clarity), and the .nr an-no-space-flag 1 .nr an-break-flag 1 .br -.B Table\ \&21.332.\ \&Several invocations of ndb_restore using \-\-include\-* options, and their effects on restoring from an NDB Cluster backup\&. +.B Table\ \&21.347.\ \&Several invocations of ndb_restore using \-\-include\-* options, and their effects on restoring from an NDB Cluster backup\&. .TS allbox tab(:); lB lB. @@ -1733,7 +1733,7 @@ T} T{ \fBType\fR T}:T{ -string +String T} T{ \fBDefault Value\fR @@ -1775,7 +1775,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -1856,7 +1856,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -1967,7 +1967,7 @@ T} T{ \fBType\fR T}:T{ -numeric +Numeric T} T{ \fBDefault Value\fR @@ -2014,7 +2014,7 @@ T} T{ \fBType\fR T}:T{ -numeric +Numeric T} T{ \fBDefault Value\fR @@ -2137,7 +2137,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -2207,7 +2207,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -2263,7 +2263,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -2307,7 +2307,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -2355,7 +2355,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -2405,7 +2405,7 @@ T} T{ \fBType\fR T}:T{ -numeric +Numeric T} T{ \fBDefault Value\fR @@ -2627,7 +2627,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -2708,7 +2708,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -2780,7 +2780,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -2829,7 +2829,7 @@ T} T{ \fBType\fR T}:T{ -string +String T} T{ \fBDefault Value\fR @@ -3094,7 +3094,7 @@ T} T{ \fBType\fR T}:T{ -directory name +Directory name T} .TE .sp 1 @@ -3137,7 +3137,7 @@ T} T{ \fBType\fR T}:T{ -numeric +Numeric T} T{ \fBDefault Value\fR diff --git a/man/ndb_select_all.1 b/man/ndb_select_all.1 index d51c97783018..4419cd7bb1d1 100644 --- a/man/ndb_select_all.1 +++ b/man/ndb_select_all.1 @@ -2,12 +2,12 @@ .\" Title: \fBndb_select_all\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBNDB_SELECT_ALL\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBNDB_SELECT_ALL\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -60,7 +60,7 @@ Options Common to NDB Cluster Programs(1)\&. .nr an-no-space-flag 1 .nr an-break-flag 1 .br -.B Table\ \&21.333.\ \&Command\-line options for the ndb_select_all program +.B Table\ \&21.348.\ \&Command\-line options for the ndb_select_all program .TS allbox tab(:); lB lB lB. diff --git a/man/ndb_select_count.1 b/man/ndb_select_count.1 index 383293bd7a9b..21c98d36a769 100644 --- a/man/ndb_select_count.1 +++ b/man/ndb_select_count.1 @@ -2,12 +2,12 @@ .\" Title: \fBndb_select_count\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBNDB_SELECT_COUNT\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBNDB_SELECT_COUNT\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -60,7 +60,7 @@ Options Common to NDB Cluster Programs(1)\&. .nr an-no-space-flag 1 .nr an-break-flag 1 .br -.B Table\ \&21.334.\ \&Command\-line options for the ndb_select_count program +.B Table\ \&21.349.\ \&Command\-line options for the ndb_select_count program .TS allbox tab(:); lB lB lB. diff --git a/man/ndb_setup.py.1 b/man/ndb_setup.py.1 index 507bad57d051..0a85f5b485b6 100644 --- a/man/ndb_setup.py.1 +++ b/man/ndb_setup.py.1 @@ -2,12 +2,12 @@ .\" Title: \fBndb_setup.py\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBNDB_SETUP\&.PY\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBNDB_SETUP\&.PY\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -59,7 +59,7 @@ or other administrative account\&. This section describes usage of and program options for the command\-line tool only\&. For information about using the Auto\-Installer GUI that is spawned when \fBndb_setup\&.py\fR is invoked, see -Section\ \&21.2.1, \(lqThe NDB Cluster Auto-Installer\(rq\&. +Section\ \&21.2.1, \(lqThe NDB Cluster Auto-Installer (NDB 7.5)\(rq\&. Usage.PP All platforms: .sp @@ -92,7 +92,7 @@ The following table includes all options that are supported by the NDB Cluster i .nr an-no-space-flag 1 .nr an-break-flag 1 .br -.B Table\ \&21.335.\ \&Command\-line options for the ndb_setup\&.py program +.B Table\ \&21.350.\ \&Command\-line options for the ndb_setup\&.py program .TS allbox tab(:); lB lB lB. @@ -114,6 +114,7 @@ l l l l l l l l l l l l +l l l l l l. T{ .PP @@ -230,6 +231,17 @@ All MySQL 5.7 based releases T} T{ .PP +--use-http, +.PP +-H +T}:T{ +Use unencrypted (HTTP) client/server connection +T}:T{ +.PP +NDB 7.6 and later +T} +T{ +.PP --use-https, .PP -S @@ -272,7 +284,7 @@ T} T{ \fBType\fR T}:T{ -string +String T} T{ \fBDefault Value\fR @@ -315,7 +327,7 @@ T} T{ \fBType\fR T}:T{ -file name +File name T} T{ \fBDefault Value\fR @@ -357,7 +369,7 @@ T} T{ \fBType\fR T}:T{ -file name +File name T} T{ \fBDefault Value\fR @@ -366,7 +378,7 @@ cfg.pem T} .TE .sp 1 -Specify a file containing an X509 certificate which identifies the server\&. It is possible for the certificate to be self\-signed\&. The default is +Specify a file containing an X\&.509 certificate which identifies the server\&. It is possible for the certificate to be self\-signed\&. The default is cfg\&.pem\&. .RE .sp @@ -401,7 +413,7 @@ T} T{ \fBType\fR T}:T{ -enumeration +Enumeration T} T{ \fBDefault Value\fR @@ -494,7 +506,7 @@ T} T{ \fBType\fR T}:T{ -file name +File name T} T{ \fBDefault Value\fR @@ -503,7 +515,7 @@ T}:T{ T} .TE .sp 1 -Specify a file containing the private key if this is not included in the X509 certificate file (\fB\-\-cert\-file\fR)\&. The default is an empty string, which means that no such file is used\&. +Specify a file containing the private key if this is not included in the X\&. 509 certificate file (\fB\-\-cert\-file\fR)\&. The default is an empty string, which means that no such file is used\&. .RE .sp .RS 4 @@ -568,7 +580,7 @@ T} T{ \fBType\fR T}:T{ -numeric +Numeric T} T{ \fBDefault Value\fR @@ -624,7 +636,7 @@ T} T{ \fBType\fR T}:T{ -file name +File name T} T{ \fBDefault Value\fR @@ -679,7 +691,7 @@ T} T{ \fBType\fR T}:T{ -string +String T} T{ \fBDefault Value\fR @@ -700,6 +712,38 @@ localhost\&. .sp -1 .IP \(bu 2.3 .\} +\fB\-\-use\-http\fR, +\fB\-H\fR +.TS +allbox tab(:); +lB lB. +T{ +Property +T}:T{ +Value +T} +.T& +l l. +T{ +\fBCommand-Line Format\fR +T}:T{ +--use-http +T} +.TE +.sp 1 +Make the browser use HTTP to connect with the server\&. This means that the connection is unencrypted and not secured in any way\&. +.sp +This option was added in NDB 7\&.6\&. +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} \fB\-\-use\-https\fR, \fB\-S\fR .TS diff --git a/man/ndb_show_tables.1 b/man/ndb_show_tables.1 index f312a1ac0709..0e15bb93941b 100644 --- a/man/ndb_show_tables.1 +++ b/man/ndb_show_tables.1 @@ -2,12 +2,12 @@ .\" Title: \fBndb_show_tables\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBNDB_SHOW_TABLES\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBNDB_SHOW_TABLES\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -51,7 +51,7 @@ Options Common to NDB Cluster Programs(1)\&. .nr an-no-space-flag 1 .nr an-break-flag 1 .br -.B Table\ \&21.336.\ \&Command\-line options for the ndb_show_tables program +.B Table\ \&21.351.\ \&Command\-line options for the ndb_show_tables program .TS allbox tab(:); lB lB lB. diff --git a/man/ndb_size.pl.1 b/man/ndb_size.pl.1 index cfe8855e5f79..1f3639ceb8b5 100644 --- a/man/ndb_size.pl.1 +++ b/man/ndb_size.pl.1 @@ -2,12 +2,12 @@ .\" Title: \fBndb_size.pl\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBNDB_SIZE\&.PL\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBNDB_SIZE\&.PL\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -101,7 +101,7 @@ Options Common to NDB Cluster Programs(1)\&. .nr an-no-space-flag 1 .nr an-break-flag 1 .br -.B Table\ \&21.337.\ \&Command\-line options for the ndb_size\&.pl program +.B Table\ \&21.352.\ \&Command\-line options for the ndb_size\&.pl program .TS allbox tab(:); lB lB lB. diff --git a/man/ndb_top.1 b/man/ndb_top.1 index f6f90b8c7b91..a85b173ea31d 100644 --- a/man/ndb_top.1 +++ b/man/ndb_top.1 @@ -2,12 +2,12 @@ .\" Title: \fBndb_top\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBNDB_TOP\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBNDB_TOP\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -135,7 +135,7 @@ The following table includes all options that are specific to the NDB Cluster pr .nr an-no-space-flag 1 .nr an-break-flag 1 .br -.B Table\ \&21.338.\ \&Command\-line options for the ndb_top program +.B Table\ \&21.353.\ \&Command\-line options for the ndb_top program .TS allbox tab(:); lB lB lB. @@ -388,7 +388,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -438,7 +438,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -490,7 +490,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -538,7 +538,7 @@ T} T{ \fBType\fR T}:T{ -string +String T} T{ \fBDefault Value\fR @@ -586,7 +586,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -636,7 +636,7 @@ T} T{ \fBType\fR T}:T{ -integer +Integer T} T{ \fBDefault Value\fR @@ -684,7 +684,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -740,7 +740,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -792,7 +792,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -846,7 +846,7 @@ T} T{ \fBType\fR T}:T{ -integer +Integer T} T{ \fBDefault Value\fR @@ -901,7 +901,7 @@ T} T{ \fBType\fR T}:T{ -integer +Integer T} T{ \fBDefault Value\fR @@ -949,7 +949,7 @@ T} T{ \fBType\fR T}:T{ -path name +Path name T} T{ \fBDefault Value\fR @@ -999,7 +999,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -1051,7 +1051,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -1107,7 +1107,7 @@ T} T{ \fBType\fR T}:T{ -string +String T} T{ \fBDefault Value\fR @@ -1129,7 +1129,7 @@ data node under a moderate load\&. Here, the program has been invoked using \fB\-x\fR to provide both text and graph output: .PP -\fBFigure\ \&21.17.\ \&ndb_top Running in Terminal\fR +\fBFigure\ \&21.37.\ \&ndb_top Running in Terminal\fR .sp .RS 4 [IMAGE]\&\s-2\u[1]\d\s+2 diff --git a/man/ndb_waiter.1 b/man/ndb_waiter.1 index 2e10b1b0bba7..642f2898d333 100644 --- a/man/ndb_waiter.1 +++ b/man/ndb_waiter.1 @@ -2,12 +2,12 @@ .\" Title: \fBndb_waiter\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBNDB_WAITER\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBNDB_WAITER\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -141,7 +141,7 @@ Options Common to NDB Cluster Programs(1)\&. .nr an-no-space-flag 1 .nr an-break-flag 1 .br -.B Table\ \&21.339.\ \&Command\-line options for the ndb_waiter program +.B Table\ \&21.354.\ \&Command\-line options for the ndb_waiter program .TS allbox tab(:); lB lB lB. diff --git a/man/ndbd.8 b/man/ndbd.8 index 30ee3c6cabc9..45bfe9d3cd9d 100644 --- a/man/ndbd.8 +++ b/man/ndbd.8 @@ -2,12 +2,12 @@ .\" Title: \fBndbd\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBNDBD\FR" "8" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBNDBD\FR" "8" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -50,7 +50,7 @@ Options Common to NDB Cluster Programs(1)\&. .nr an-no-space-flag 1 .nr an-break-flag 1 .br -.B Table\ \&21.314.\ \&Command\-line options for the ndbd program +.B Table\ \&21.329.\ \&Command\-line options for the ndbd program .TS allbox tab(:); lB lB lB. @@ -282,7 +282,7 @@ T} T{ \fBType\fR T}:T{ -string +String T} T{ \fBDefault Value\fR @@ -332,7 +332,7 @@ T} T{ \fBType\fR T}:T{ -numeric +Numeric T} T{ \fBDefault Value\fR @@ -391,7 +391,7 @@ T} T{ \fBType\fR T}:T{ -numeric +Numeric T} T{ \fBDefault Value\fR @@ -446,7 +446,7 @@ T} T{ \fBType\fR T}:T{ -numeric +Numeric T} T{ \fBDefault Value\fR @@ -504,7 +504,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -557,7 +557,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -610,7 +610,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -775,7 +775,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -859,7 +859,7 @@ T} T{ \fBType\fR T}:T{ -string +String T} T{ \fBDefault Value\fR @@ -934,7 +934,7 @@ T} T{ \fBType\fR T}:T{ -integer +Integer T} T{ \fBDefault Value\fR @@ -985,7 +985,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -1039,7 +1039,7 @@ T} T{ \fBType\fR T}:T{ -boolean +Boolean T} T{ \fBDefault Value\fR @@ -1087,7 +1087,7 @@ T} T{ \fBType\fR T}:T{ -string +String T} T{ \fBDefault Value\fR @@ -1147,7 +1147,7 @@ T} T{ \fBType\fR T}:T{ -string +String T} T{ \fBDefault Value\fR diff --git a/man/ndbinfo_select_all.1 b/man/ndbinfo_select_all.1 index bce026e57cf6..f1f563bc43b9 100644 --- a/man/ndbinfo_select_all.1 +++ b/man/ndbinfo_select_all.1 @@ -2,12 +2,12 @@ .\" Title: \fBndbinfo_select_all\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBNDBINFO_SELECT_ALL\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBNDBINFO_SELECT_ALL\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -114,7 +114,7 @@ Options Common to NDB Cluster Programs(1)\&. .nr an-no-space-flag 1 .nr an-break-flag 1 .br -.B Table\ \&21.315.\ \&Command\-line options for the ndbinfo_select_all program +.B Table\ \&21.330.\ \&Command\-line options for the ndbinfo_select_all program .TS allbox tab(:); lB lB lB. @@ -206,7 +206,7 @@ T} T{ \fBType\fR T}:T{ -numeric +Numeric T} T{ \fBDefault Value\fR @@ -262,7 +262,7 @@ T} T{ \fBType\fR T}:T{ -numeric +Numeric T} T{ \fBDefault Value\fR diff --git a/man/ndbmtd.8 b/man/ndbmtd.8 index edf18456321e..baef5d4ef68d 100644 --- a/man/ndbmtd.8 +++ b/man/ndbmtd.8 @@ -2,12 +2,12 @@ .\" Title: \fBndbmtd\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBNDBMTD\FR" "8" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBNDBMTD\FR" "8" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/perror.1 b/man/perror.1 index aa026b2ab559..4d5587daa7d2 100644 --- a/man/perror.1 +++ b/man/perror.1 @@ -2,12 +2,12 @@ .\" Title: \fBperror\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBPERROR\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBPERROR\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/replace.1 b/man/replace.1 index 7734c79ef898..41814d79adaf 100644 --- a/man/replace.1 +++ b/man/replace.1 @@ -2,12 +2,12 @@ .\" Title: \fBreplace\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBREPLACE\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBREPLACE\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/resolve_stack_dump.1 b/man/resolve_stack_dump.1 index 685639ea94a4..c89d1b000c0d 100644 --- a/man/resolve_stack_dump.1 +++ b/man/resolve_stack_dump.1 @@ -2,12 +2,12 @@ .\" Title: \fBresolve_stack_dump\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBRESOLVE_STACK_DUMP\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBRESOLVE_STACK_DUMP\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/resolveip.1 b/man/resolveip.1 index cc0b5aefa7ce..639dae3975be 100644 --- a/man/resolveip.1 +++ b/man/resolveip.1 @@ -2,12 +2,12 @@ .\" Title: \fBresolveip\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBRESOLVEIP\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBRESOLVEIP\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/man/zlib_decompress.1 b/man/zlib_decompress.1 index e1e851ef92c9..019f659888ed 100644 --- a/man/zlib_decompress.1 +++ b/man/zlib_decompress.1 @@ -2,12 +2,12 @@ .\" Title: \fBzlib_decompress\fR .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 -.\" Date: 06/07/2018 +.\" Date: 10/03/2018 .\" Manual: MySQL Database System .\" Source: MySQL 5.7 .\" Language: English .\" -.TH "\FBZLIB_DECOMPRESS\FR" "1" "06/07/2018" "MySQL 5\&.7" "MySQL Database System" +.TH "\FBZLIB_DECOMPRESS\FR" "1" "10/03/2018" "MySQL 5\&.7" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/scripts/fill_help_tables.sql b/scripts/fill_help_tables.sql index 58ab4b3e9a51..e79342edef2d 100644 --- a/scripts/fill_help_tables.sql +++ b/scripts/fill_help_tables.sql @@ -17,9 +17,9 @@ -- team. If you require changes to the format of this file, contact the -- docs team. --- File generation date: 2018-06-07 +-- File generation date: 2018-10-03 -- MySQL series: 5.7 --- Document repository revision: 57614 +-- Document repository revision: 59320 -- To use this file, load its contents into the mysql database. For example, -- with the mysql client program, process the file like this, where @@ -91,23 +91,23 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example, INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (10,38,'CHAR FUNCTION','Syntax:\nCHAR(N,... [USING charset_name])\n\nCHAR() interprets each argument N as an integer and returns a string\nconsisting of the characters given by the code values of those\nintegers. NULL values are skipped.\nBy default, CHAR() returns a binary string. To produce a string in a\ngiven character set, use the optional USING clause:\n\nmysql> SELECT CHARSET(CHAR(X\'65\')), CHARSET(CHAR(X\'65\' USING utf8));\n+----------------------+---------------------------------+\n| CHARSET(CHAR(X\'65\')) | CHARSET(CHAR(X\'65\' USING utf8)) |\n+----------------------+---------------------------------+\n| binary | utf8 |\n+----------------------+---------------------------------+\n\nIf USING is given and the result string is illegal for the given\ncharacter set, a warning is issued. Also, if strict SQL mode is\nenabled, the result from CHAR() becomes NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/string-functions.html\n\n','mysql> SELECT CHAR(77,121,83,81,\'76\');\n -> \'MySQL\'\nmysql> SELECT CHAR(77,77.3,\'77.3\');\n -> \'MMM\'\n','http://dev.mysql.com/doc/refman/5.7/en/string-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (11,7,'ASYMMETRIC_DECRYPT','Syntax:\nASYMMETRIC_DECRYPT(algorithm, crypt_str, key_str)\n\nDecrypts an encrypted string using the given algorithm and key string,\nand returns the resulting cleartext as a binary string. If decryption\nfails, the result is NULL.\n\nkey_str must be a valid key string in PEM format. For successful\ndecryption, it must be the public or private key string corresponding\nto the private or public key string used with ASYMMETRIC_ENCRYPT() to\nproduce the encrypted string. algorithm indicates the encryption\nalgorithm used to create the key.\n\nSupported algorithm values: \'RSA\'\n\nFor a usage example, see the description of ASYMMETRIC_ENCRYPT().\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/enterprise-encryption-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/enterprise-encryption-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (12,27,'SHOW CREATE TRIGGER','Syntax:\nSHOW CREATE TRIGGER trigger_name\n\nThis statement shows the CREATE TRIGGER statement that creates the\nnamed trigger. This statement requires the TRIGGER privilege for the\ntable associated with the trigger.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/show-create-trigger.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/show-create-trigger.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (13,27,'SHOW CREATE PROCEDURE','Syntax:\nSHOW CREATE PROCEDURE proc_name\n\nThis statement is a MySQL extension. It returns the exact string that\ncan be used to re-create the named stored procedure. A similar\nstatement, SHOW CREATE FUNCTION, displays information about stored\nfunctions (see [HELP SHOW CREATE FUNCTION]).\n\nTo use either statement, you must be the user named in the routine\nDEFINER clause or have SELECT access to the mysql.proc table. If you do\nnot have privileges for the routine itself, the value displayed for the\nCreate Procedure or Create Function field will be NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/show-create-procedure.html\n\n','mysql> SHOW CREATE PROCEDURE test.simpleproc\\G\n*************************** 1. row ***************************\n Procedure: simpleproc\n sql_mode:\n Create Procedure: CREATE PROCEDURE `simpleproc`(OUT param1 INT)\n BEGIN\n SELECT COUNT(*) INTO param1 FROM t;\n END\ncharacter_set_client: latin1\ncollation_connection: latin1_swedish_ci\n Database Collation: latin1_swedish_ci\n\nmysql> SHOW CREATE FUNCTION test.hello\\G\n*************************** 1. row ***************************\n Function: hello\n sql_mode:\n Create Function: CREATE FUNCTION `hello`(s CHAR(20))\n RETURNS CHAR(50)\n RETURN CONCAT(\'Hello, \',s,\'!\')\ncharacter_set_client: latin1\ncollation_connection: latin1_swedish_ci\n Database Collation: latin1_swedish_ci\n','http://dev.mysql.com/doc/refman/5.7/en/show-create-procedure.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (13,27,'SHOW CREATE PROCEDURE','Syntax:\nSHOW CREATE PROCEDURE proc_name\n\nThis statement is a MySQL extension. It returns the exact string that\ncan be used to re-create the named stored procedure. A similar\nstatement, SHOW CREATE FUNCTION, displays information about stored\nfunctions (see [HELP SHOW CREATE FUNCTION]).\n\nTo use either statement, you must be the user named in the routine\nDEFINER clause or have SELECT access to the mysql.proc table. If you do\nnot have privileges for the routine itself, the value displayed for the\nCreate Procedure or Create Function field will be NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/show-create-procedure.html\n\n','mysql> SHOW CREATE PROCEDURE test.simpleproc\\G\n*************************** 1. row ***************************\n Procedure: simpleproc\n sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,\n NO_ZERO_IN_DATE,NO_ZERO_DATE,\n ERROR_FOR_DIVISION_BY_ZERO,\n NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION\n Create Procedure: CREATE PROCEDURE `simpleproc`(OUT param1 INT)\n BEGIN\n SELECT COUNT(*) INTO param1 FROM t;\n END\ncharacter_set_client: utf8\ncollation_connection: utf8_general_ci\n Database Collation: latin1_swedish_ci\n\nmysql> SHOW CREATE FUNCTION test.hello\\G\n*************************** 1. row ***************************\n Function: hello\n sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,\n NO_ZERO_IN_DATE,NO_ZERO_DATE,\n ERROR_FOR_DIVISION_BY_ZERO,\n NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION\n Create Function: CREATE FUNCTION `hello`(s CHAR(20))\n RETURNS char(50) CHARSET latin1\n RETURN CONCAT(\'Hello, \',s,\'!\')\ncharacter_set_client: utf8\ncollation_connection: utf8_general_ci\n Database Collation: latin1_swedish_ci\n','http://dev.mysql.com/doc/refman/5.7/en/show-create-procedure.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (14,24,'OPEN','Syntax:\nOPEN cursor_name\n\nThis statement opens a previously declared cursor. For an example, see\nhttp://dev.mysql.com/doc/refman/5.7/en/cursors.html.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/open.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/open.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (15,31,'ST_INTERSECTS','ST_Intersects(g1, g2)\n\nReturns 1 or 0 to indicate whether g1 spatially intersects g2.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-object-shapes.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-object-shapes.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (16,38,'LOWER','Syntax:\nLOWER(str)\n\nReturns the string str with all characters changed to lowercase\naccording to the current character set mapping. The default is latin1\n(cp1252 West European).\n\nmysql> SELECT LOWER(\'QUADRATICALLY\');\n -> \'quadratically\'\n\nLOWER() (and UPPER()) are ineffective when applied to binary strings\n(BINARY, VARBINARY, BLOB). To perform lettercase conversion, convert\nthe string to a nonbinary string:\n\nmysql> SET @str = BINARY \'New York\';\nmysql> SELECT LOWER(@str), LOWER(CONVERT(@str USING latin1));\n+-------------+-----------------------------------+\n| LOWER(@str) | LOWER(CONVERT(@str USING latin1)) |\n+-------------+-----------------------------------+\n| New York | new york |\n+-------------+-----------------------------------+\n\nFor collations of Unicode character sets, LOWER() and UPPER() work\naccording to the Unicode Collation Algorithm (UCA) version in the\ncollation name, if there is one, and UCA 4.0.0 if no version is\nspecified. For example, utf8_unicode_520_ci works according to UCA\n5.2.0, whereas utf8_unicode_ci works according to UCA 4.0.0. See\nhttp://dev.mysql.com/doc/refman/5.7/en/charset-unicode-sets.html.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/string-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/string-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (17,40,'CREATE TRIGGER','Syntax:\nCREATE\n [DEFINER = { user | CURRENT_USER }]\n TRIGGER trigger_name\n trigger_time trigger_event\n ON tbl_name FOR EACH ROW\n [trigger_order]\n trigger_body\n\ntrigger_time: { BEFORE | AFTER }\n\ntrigger_event: { INSERT | UPDATE | DELETE }\n\ntrigger_order: { FOLLOWS | PRECEDES } other_trigger_name\n\nThis statement creates a new trigger. A trigger is a named database\nobject that is associated with a table, and that activates when a\nparticular event occurs for the table. The trigger becomes associated\nwith the table named tbl_name, which must refer to a permanent table.\nYou cannot associate a trigger with a TEMPORARY table or a view.\n\nTrigger names exist in the schema namespace, meaning that all triggers\nmust have unique names within a schema. Triggers in different schemas\ncan have the same name.\n\nThis section describes CREATE TRIGGER syntax. For additional\ndiscussion, see\nhttp://dev.mysql.com/doc/refman/5.7/en/trigger-syntax.html.\n\nCREATE TRIGGER requires the TRIGGER privilege for the table associated\nwith the trigger. The statement might also require the SUPER privilege,\ndepending on the DEFINER value, as described later in this section. If\nbinary logging is enabled, CREATE TRIGGER might require the SUPER\nprivilege, as described in\nhttp://dev.mysql.com/doc/refman/5.7/en/stored-programs-logging.html.\n\nThe DEFINER clause determines the security context to be used when\nchecking access privileges at trigger activation time, as described\nlater in this section.\n\ntrigger_time is the trigger action time. It can be BEFORE or AFTER to\nindicate that the trigger activates before or after each row to be\nmodified.\n\nBasic column value checks occur prior to trigger activation, so you\ncannot use BEFORE triggers to convert values inappropriate for the\ncolumn type to valid values.\n\ntrigger_event indicates the kind of operation that activates the\ntrigger. These trigger_event values are permitted:\n\no INSERT: The trigger activates whenever a new row is inserted into the\n table; for example, through INSERT, LOAD DATA, and REPLACE\n statements.\n\no UPDATE: The trigger activates whenever a row is modified; for\n example, through UPDATE statements.\n\no DELETE: The trigger activates whenever a row is deleted from the\n table; for example, through DELETE and REPLACE statements. DROP TABLE\n and TRUNCATE TABLE statements on the table do not activate this\n trigger, because they do not use DELETE. Dropping a partition does\n not activate DELETE triggers, either.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/create-trigger.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/create-trigger.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (18,32,'MONTH','Syntax:\nMONTH(date)\n\nReturns the month for date, in the range 1 to 12 for January to\nDecember, or 0 for dates such as \'0000-00-00\' or \'2008-00-00\' that have\na zero month part.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html\n\n','mysql> SELECT MONTH(\'2008-02-03\');\n -> 2\n','http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (19,7,'ASYMMETRIC_ENCRYPT','Syntax:\nASYMMETRIC_ENCRYPT(algorithm, str, key_str)\n\nEncrypts a string using the given algorithm and key string, and returns\nthe resulting ciphertext as a binary string. If encryption fails, the\nresult is NULL.\n\nThe str length cannot be greater than the key_str length − 11, in\nbytes\n\nkey_str must be a valid key string in PEM format. algorithm indicates\nthe encryption algorithm used to create the key.\n\nSupported algorithm values: \'RSA\'\n\nTo encrypt a string, pass a private or public key string to\nASYMMETRIC_ENCRYPT(). To recover the original unencrypted string, pass\nthe encrypted string to ASYMMETRIC_DECRYPT(), along with the public or\nprivate key string correponding to the private or public key string\nused for encryption.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/enterprise-encryption-functions.html\n\n','-- Generate private/public key pair\nSET @priv = CREATE_ASYMMETRIC_PRIV_KEY(\'RSA\', 1024);\nSET @pub = CREATE_ASYMMETRIC_PUB_KEY(\'RSA\', @priv);\n\n-- Encrypt using private key, decrypt using public key\nSET @ciphertext = ASYMMETRIC_ENCRYPT(\'RSA\', \'The quick brown fox\', @priv);\nSET @cleartext = ASYMMETRIC_DECRYPT(\'RSA\', @ciphertext, @pub);\n\n-- Encrypt using public key, decrypt using private key\nSET @ciphertext = ASYMMETRIC_ENCRYPT(\'RSA\', \'The quick brown fox\', @pub);\nSET @cleartext = ASYMMETRIC_DECRYPT(\'RSA\', @ciphertext, @priv);\n','http://dev.mysql.com/doc/refman/5.7/en/enterprise-encryption-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (20,27,'SHOW TRIGGERS','Syntax:\nSHOW TRIGGERS\n [{FROM | IN} db_name]\n [LIKE \'pattern\' | WHERE expr]\n\nSHOW TRIGGERS lists the triggers currently defined for tables in a\ndatabase (the default database unless a FROM clause is given). This\nstatement returns results only for databases and tables for which you\nhave the TRIGGER privilege. The LIKE clause, if present, indicates\nwhich table names to match (not trigger names) and causes the statement\nto display triggers for those tables. The WHERE clause can be given to\nselect rows using more general conditions, as discussed in\nhttp://dev.mysql.com/doc/refman/5.7/en/extended-show.html.\n\nFor the trigger ins_sum as defined in\nhttp://dev.mysql.com/doc/refman/5.7/en/triggers.html, the output of\nthis statement is as shown here:\n\nmysql> SHOW TRIGGERS LIKE \'acc%\'\\G\n*************************** 1. row ***************************\n Trigger: ins_sum\n Event: INSERT\n Table: account\n Statement: SET @sum = @sum + NEW.amount\n Timing: BEFORE\n Created: 2013-07-09 10:39:34.96\n sql_mode: NO_ENGINE_SUBSTITUTION\n Definer: me@localhost\ncharacter_set_client: utf8\ncollation_connection: utf8_general_ci\n Database Collation: latin1_swedish_ci\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/show-triggers.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/show-triggers.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (20,27,'SHOW TRIGGERS','Syntax:\nSHOW TRIGGERS\n [{FROM | IN} db_name]\n [LIKE \'pattern\' | WHERE expr]\n\nSHOW TRIGGERS lists the triggers currently defined for tables in a\ndatabase (the default database unless a FROM clause is given). This\nstatement returns results only for databases and tables for which you\nhave the TRIGGER privilege. The LIKE clause, if present, indicates\nwhich table names (not trigger names) to match and causes the statement\nto display triggers for those tables. The WHERE clause can be given to\nselect rows using more general conditions, as discussed in\nhttp://dev.mysql.com/doc/refman/5.7/en/extended-show.html.\n\nFor the ins_sum trigger defined in\nhttp://dev.mysql.com/doc/refman/5.7/en/triggers.html, the output of\nSHOW TRIGGERS is as shown here:\n\nmysql> SHOW TRIGGERS LIKE \'acc%\'\\G\n*************************** 1. row ***************************\n Trigger: ins_sum\n Event: INSERT\n Table: account\n Statement: SET @sum = @sum + NEW.amount\n Timing: BEFORE\n Created: 2018-08-08 10:10:12.61\n sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,\n NO_ZERO_IN_DATE,NO_ZERO_DATE,\n ERROR_FOR_DIVISION_BY_ZERO,\n NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION\n Definer: me@localhost\ncharacter_set_client: utf8\ncollation_connection: utf8_general_ci\n Database Collation: latin1_swedish_ci\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/show-triggers.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/show-triggers.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (21,13,'ISCLOSED','IsClosed(ls)\n\nST_IsClosed() and IsClosed() are synonyms. For more information, see\nthe description of ST_IsClosed().\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/gis-linestring-property-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/gis-linestring-property-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (22,38,'REGEXP','Syntax:\nexpr REGEXP pat, expr RLIKE pat\n\nReturns 1 if the string expr matches the regular expression specified\nby the pattern pat, 0 otherwise. If either expr or pat is NULL, the\nreturn value is NULL.\n\nRLIKE is a synonym for REGEXP.\n\nThe pattern can be an extended regular expression, the syntax for which\nis discussed in\nhttp://dev.mysql.com/doc/refman/5.7/en/regexp.html#regexp-syntax. The\npattern need not be a literal string. For example, it can be specified\nas a string expression or table column.\n\n*Note*:\n\nBecause MySQL uses the C escape syntax in strings (for example, \\n to\nrepresent the newline character), you must double any \\ that you use in\nyour REGEXP arguments.\n\nRegular expression operations use the character set and collation of\nthe string expression and pattern arguments when deciding the type of a\ncharacter and performing the comparison. If the arguments have\ndifferent character sets or collations, coercibility rules apply as\ndescribed in\nhttp://dev.mysql.com/doc/refman/5.7/en/charset-collation-coercibility.h\ntml. If either argument is a binary string, the arguments are handled\nin case-sensitive fashion as binary strings.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/regexp.html\n\n','mysql> SELECT \'Michael!\' REGEXP \'.*\';\n+------------------------+\n| \'Michael!\' REGEXP \'.*\' |\n+------------------------+\n| 1 |\n+------------------------+\nmysql> SELECT \'new*\\n*line\' REGEXP \'new\\\\*.\\\\*line\';\n+---------------------------------------+\n| \'new*\\n*line\' REGEXP \'new\\\\*.\\\\*line\' |\n+---------------------------------------+\n| 0 |\n+---------------------------------------+\nmysql> SELECT \'a\' REGEXP \'^[a-d]\';\n+---------------------+\n| \'a\' REGEXP \'^[a-d]\' |\n+---------------------+\n| 1 |\n+---------------------+\nmysql> SELECT \'a\' REGEXP \'A\', \'a\' REGEXP BINARY \'A\';\n+----------------+-----------------------+\n| \'a\' REGEXP \'A\' | \'a\' REGEXP BINARY \'A\' |\n+----------------+-----------------------+\n| 1 | 0 |\n+----------------+-----------------------+\n','http://dev.mysql.com/doc/refman/5.7/en/regexp.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (23,13,'ST_POINTN','ST_PointN(ls, N)\n\nReturns the N-th Point in the Linestring value ls. Points are numbered\nbeginning with 1. If any argument is NULL or the geometry argument is\nan empty geometry, the return value is NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/gis-linestring-property-functions.html\n\n','mysql> SET @ls = \'LineString(1 1,2 2,3 3)\';\nmysql> SELECT ST_AsText(ST_PointN(ST_GeomFromText(@ls),2));\n+----------------------------------------------+\n| ST_AsText(ST_PointN(ST_GeomFromText(@ls),2)) |\n+----------------------------------------------+\n| POINT(2 2) |\n+----------------------------------------------+\n','http://dev.mysql.com/doc/refman/5.7/en/gis-linestring-property-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (24,24,'IF STATEMENT','Syntax:\nIF search_condition THEN statement_list\n [ELSEIF search_condition THEN statement_list] ...\n [ELSE statement_list]\nEND IF\n\nThe IF statement for stored programs implements a basic conditional\nconstruct.\n\n*Note*:\n\nThere is also an IF() function, which differs from the IF statement\ndescribed here. See\nhttp://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html. The\nIF statement can have THEN, ELSE, and ELSEIF clauses, and it is\nterminated with END IF.\n\nIf the search_condition evaluates to true, the corresponding THEN or\nELSEIF clause statement_list executes. If no search_condition matches,\nthe ELSE clause statement_list executes.\n\nEach statement_list consists of one or more SQL statements; an empty\nstatement_list is not permitted.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/if.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/if.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (25,12,'VALIDATE_PASSWORD_STRENGTH','Syntax:\nVALIDATE_PASSWORD_STRENGTH(str)\n\nGiven an argument representing a cleartext password, this function\nreturns an integer to indicate how strong the password is. The return\nvalue ranges from 0 (weak) to 100 (strong).\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (26,7,'WITHIN','Within(g1, g2)\n\nMBRWithin() and Within() are synonyms. For more information, see the\ndescription of MBRWithin().\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-mbr.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-mbr.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (27,27,'SHOW PLUGINS','Syntax:\nSHOW PLUGINS\n\nSHOW PLUGINS displays information about server plugins. Plugin\ninformation is also available in the INFORMATION_SCHEMA.PLUGINS table.\nSee http://dev.mysql.com/doc/refman/5.7/en/plugins-table.html.\n\nExample of SHOW PLUGINS output:\n\nmysql> SHOW PLUGINS\\G\n*************************** 1. row ***************************\n Name: binlog\n Status: ACTIVE\n Type: STORAGE ENGINE\nLibrary: NULL\nLicense: GPL\n*************************** 2. row ***************************\n Name: CSV\n Status: ACTIVE\n Type: STORAGE ENGINE\nLibrary: NULL\nLicense: GPL\n*************************** 3. row ***************************\n Name: MEMORY\n Status: ACTIVE\n Type: STORAGE ENGINE\nLibrary: NULL\nLicense: GPL\n*************************** 4. row ***************************\n Name: MyISAM\n Status: ACTIVE\n Type: STORAGE ENGINE\nLibrary: NULL\nLicense: GPL\n...\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/show-plugins.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/show-plugins.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (27,27,'SHOW PLUGINS','Syntax:\nSHOW PLUGINS\n\nSHOW PLUGINS displays information about server plugins.\n\nExample of SHOW PLUGINS output:\n\nmysql> SHOW PLUGINS\\G\n*************************** 1. row ***************************\n Name: binlog\n Status: ACTIVE\n Type: STORAGE ENGINE\nLibrary: NULL\nLicense: GPL\n*************************** 2. row ***************************\n Name: CSV\n Status: ACTIVE\n Type: STORAGE ENGINE\nLibrary: NULL\nLicense: GPL\n*************************** 3. row ***************************\n Name: MEMORY\n Status: ACTIVE\n Type: STORAGE ENGINE\nLibrary: NULL\nLicense: GPL\n*************************** 4. row ***************************\n Name: MyISAM\n Status: ACTIVE\n Type: STORAGE ENGINE\nLibrary: NULL\nLicense: GPL\n...\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/show-plugins.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/show-plugins.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (28,8,'PREPARE','Syntax:\nPREPARE stmt_name FROM preparable_stmt\n\nThe PREPARE statement prepares a SQL statement and assigns it a name,\nstmt_name, by which to refer to the statement later. The prepared\nstatement is executed with EXECUTE and released with DEALLOCATE\nPREPARE. For examples, see\nhttp://dev.mysql.com/doc/refman/5.7/en/sql-syntax-prepared-statements.h\ntml.\n\nStatement names are not case-sensitive. preparable_stmt is either a\nstring literal or a user variable that contains the text of the SQL\nstatement. The text must represent a single statement, not multiple\nstatements. Within the statement, ? characters can be used as parameter\nmarkers to indicate where data values are to be bound to the query\nlater when you execute it. The ? characters should not be enclosed\nwithin quotation marks, even if you intend to bind them to string\nvalues. Parameter markers can be used only where data values should\nappear, not for SQL keywords, identifiers, and so forth.\n\nIf a prepared statement with the given name already exists, it is\ndeallocated implicitly before the new statement is prepared. This means\nthat if the new statement contains an error and cannot be prepared, an\nerror is returned and no statement with the given name exists.\n\nThe scope of a prepared statement is the session within which it is\ncreated, which as several implications:\n\no A prepared statement created in one session is not available to other\n sessions.\n\no When a session ends, whether normally or abnormally, its prepared\n statements no longer exist. If auto-reconnect is enabled, the client\n is not notified that the connection was lost. For this reason,\n clients may wish to disable auto-reconnect. See\n http://dev.mysql.com/doc/refman/5.7/en/c-api-auto-reconnect.html.\n\no A prepared statement created within a stored program continues to\n exist after the program finishes executing and can be executed\n outside the program later.\n\no A statement prepared in stored program context cannot refer to stored\n procedure or function parameters or local variables because they go\n out of scope when the program ends and would be unavailable were the\n statement to be executed later outside the program. As a workaround,\n refer instead to user-defined variables, which also have session\n scope; see\n http://dev.mysql.com/doc/refman/5.7/en/user-variables.html.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/prepare.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/prepare.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (29,8,'LOCK','Syntax:\nLOCK TABLES\n tbl_name [[AS] alias] lock_type\n [, tbl_name [[AS] alias] lock_type] ...\n\nlock_type:\n READ [LOCAL]\n | [LOW_PRIORITY] WRITE\n\nUNLOCK TABLES\n\nMySQL enables client sessions to acquire table locks explicitly for the\npurpose of cooperating with other sessions for access to tables, or to\nprevent other sessions from modifying tables during periods when a\nsession requires exclusive access to them. A session can acquire or\nrelease locks only for itself. One session cannot acquire locks for\nanother session or release locks held by another session.\n\nLocks may be used to emulate transactions or to get more speed when\nupdating tables. This is explained in more detail later in this\nsection.\n\nLOCK TABLES explicitly acquires table locks for the current client\nsession. Table locks can be acquired for base tables or views. You must\nhave the LOCK TABLES privilege, and the SELECT privilege for each\nobject to be locked.\n\nFor view locking, LOCK TABLES adds all base tables used in the view to\nthe set of tables to be locked and locks them automatically. If you\nlock a table explicitly with LOCK TABLES, any tables used in triggers\nare also locked implicitly, as described in\nhttp://dev.mysql.com/doc/refman/5.7/en/lock-tables-and-triggers.html.\n\nUNLOCK TABLES explicitly releases any table locks held by the current\nsession. LOCK TABLES implicitly releases any table locks held by the\ncurrent session before acquiring new locks.\n\nAnother use for UNLOCK TABLES is to release the global read lock\nacquired with the FLUSH TABLES WITH READ LOCK statement, which enables\nyou to lock all tables in all databases. See [HELP FLUSH]. (This is a\nvery convenient way to get backups if you have a file system such as\nVeritas that can take snapshots in time.)\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/lock-tables.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/lock-tables.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (29,8,'LOCK','Syntax:\nLOCK TABLES\n tbl_name [[AS] alias] lock_type\n [, tbl_name [[AS] alias] lock_type] ...\n\nlock_type: {\n READ [LOCAL]\n | [LOW_PRIORITY] WRITE\n}\n\nUNLOCK TABLES\n\nMySQL enables client sessions to acquire table locks explicitly for the\npurpose of cooperating with other sessions for access to tables, or to\nprevent other sessions from modifying tables during periods when a\nsession requires exclusive access to them. A session can acquire or\nrelease locks only for itself. One session cannot acquire locks for\nanother session or release locks held by another session.\n\nLocks may be used to emulate transactions or to get more speed when\nupdating tables. This is explained in more detail later in this\nsection.\n\nLOCK TABLES explicitly acquires table locks for the current client\nsession. Table locks can be acquired for base tables or views. You must\nhave the LOCK TABLES privilege, and the SELECT privilege for each\nobject to be locked.\n\nFor view locking, LOCK TABLES adds all base tables used in the view to\nthe set of tables to be locked and locks them automatically. If you\nlock a table explicitly with LOCK TABLES, any tables used in triggers\nare also locked implicitly, as described in\nhttp://dev.mysql.com/doc/refman/5.7/en/lock-tables-and-triggers.html.\n\nUNLOCK TABLES explicitly releases any table locks held by the current\nsession. LOCK TABLES implicitly releases any table locks held by the\ncurrent session before acquiring new locks.\n\nAnother use for UNLOCK TABLES is to release the global read lock\nacquired with the FLUSH TABLES WITH READ LOCK statement, which enables\nyou to lock all tables in all databases. See [HELP FLUSH]. (This is a\nvery convenient way to get backups if you have a file system such as\nVeritas that can take snapshots in time.)\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/lock-tables.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/lock-tables.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (30,27,'SHOW BINARY LOGS','Syntax:\nSHOW BINARY LOGS\nSHOW MASTER LOGS\n\nLists the binary log files on the server. This statement is used as\npart of the procedure described in [HELP PURGE BINARY LOGS], that shows\nhow to determine which logs can be purged.\n\nmysql> SHOW BINARY LOGS;\n+---------------+-----------+\n| Log_name | File_size |\n+---------------+-----------+\n| binlog.000015 | 724935 |\n| binlog.000016 | 733481 |\n+---------------+-----------+\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/show-binary-logs.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/show-binary-logs.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (31,25,'POLYGON','Polygon(ls [, ls] ...)\n\nConstructs a Polygon value from a number of LineString or WKB\nLineString arguments. If any argument does not represent a LinearRing\n(that is, not a closed and simple LineString), the return value is\nNULL.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/gis-mysql-specific-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/gis-mysql-specific-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (32,32,'MINUTE','Syntax:\nMINUTE(time)\n\nReturns the minute for time, in the range 0 to 59.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html\n\n','mysql> SELECT MINUTE(\'2008-02-03 10:05:03\');\n -> 5\n','http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html'); @@ -117,7 +117,7 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example, INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (36,7,'JSON_SEARCH','Syntax:\nJSON_SEARCH(json_doc, one_or_all, search_str[, escape_char[, path]\n...])\n\nReturns the path to the given string within a JSON document. Returns\nNULL if any of the json_doc, search_str, or path arguments are NULL; no\npath exists within the document; or search_str is not found. An error\noccurs if the json_doc argument is not a valid JSON document, any path\nargument is not a valid path expression, one_or_all is not \'one\' or\n\'all\', or escape_char is not a constant expression.\n\nThe one_or_all argument affects the search as follows:\n\no \'one\': The search terminates after the first match and returns one\n path string. It is undefined which match is considered first.\n\no \'all\': The search returns all matching path strings such that no\n duplicate paths are included. If there are multiple strings, they are\n autowrapped as an array. The order of the array elements is\n undefined.\n\nWithin the search_str search string argument, the % and _ characters\nwork as for the LIKE operator: % matches any number of characters\n(including zero characters), and _ matches exactly one character.\n\nTo specify a literal % or _ character in the search string, precede it\nby the escape character. The default is \\ if the escape_char argument\nis missing or NULL. Otherwise, escape_char must be a constant that is\nempty or one character.\n\nFor more information about matching and escape character behavior, see\nthe description of LIKE in\nhttp://dev.mysql.com/doc/refman/5.7/en/string-comparison-functions.html\n. For escape character handling, a difference from the LIKE behavior is\nthat the escape character for JSON_SEARCH() must evaluate to a constant\nat compile time, not just at execution time. For example, if\nJSON_SEARCH() is used in a prepared statement and the escape_char\nargument is supplied using a ? parameter, the parameter value might be\nconstant at execution time, but is not at compile time.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html\n\n','mysql> SET @j = \'["abc", [{"k": "10"}, "def"], {"x":"abc"}, {"y":"bcd"}]\';\n\nmysql> SELECT JSON_SEARCH(@j, \'one\', \'abc\');\n+-------------------------------+\n| JSON_SEARCH(@j, \'one\', \'abc\') |\n+-------------------------------+\n| "$[0]" |\n+-------------------------------+\n\nmysql> SELECT JSON_SEARCH(@j, \'all\', \'abc\');\n+-------------------------------+\n| JSON_SEARCH(@j, \'all\', \'abc\') |\n+-------------------------------+\n| ["$[0]", "$[2].x"] |\n+-------------------------------+\n\nmysql> SELECT JSON_SEARCH(@j, \'all\', \'ghi\');\n+-------------------------------+\n| JSON_SEARCH(@j, \'all\', \'ghi\') |\n+-------------------------------+\n| NULL |\n+-------------------------------+\n\nmysql> SELECT JSON_SEARCH(@j, \'all\', \'10\');\n+------------------------------+\n| JSON_SEARCH(@j, \'all\', \'10\') |\n+------------------------------+\n| "$[1][0].k" |\n+------------------------------+\n\nmysql> SELECT JSON_SEARCH(@j, \'all\', \'10\', NULL, \'$\');\n+-----------------------------------------+\n| JSON_SEARCH(@j, \'all\', \'10\', NULL, \'$\') |\n+-----------------------------------------+\n| "$[1][0].k" |\n+-----------------------------------------+\n\nmysql> SELECT JSON_SEARCH(@j, \'all\', \'10\', NULL, \'$[*]\');\n+--------------------------------------------+\n| JSON_SEARCH(@j, \'all\', \'10\', NULL, \'$[*]\') |\n+--------------------------------------------+\n| "$[1][0].k" |\n+--------------------------------------------+\n\nmysql> SELECT JSON_SEARCH(@j, \'all\', \'10\', NULL, \'$**.k\');\n+---------------------------------------------+\n| JSON_SEARCH(@j, \'all\', \'10\', NULL, \'$**.k\') |\n+---------------------------------------------+\n| "$[1][0].k" |\n+---------------------------------------------+\n\nmysql> SELECT JSON_SEARCH(@j, \'all\', \'10\', NULL, \'$[*][0].k\');\n+-------------------------------------------------+\n| JSON_SEARCH(@j, \'all\', \'10\', NULL, \'$[*][0].k\') |\n+-------------------------------------------------+\n| "$[1][0].k" |\n+-------------------------------------------------+\n\nmysql> SELECT JSON_SEARCH(@j, \'all\', \'10\', NULL, \'$[1]\');\n+--------------------------------------------+\n| JSON_SEARCH(@j, \'all\', \'10\', NULL, \'$[1]\') |\n+--------------------------------------------+\n| "$[1][0].k" |\n+--------------------------------------------+\n\nmysql> SELECT JSON_SEARCH(@j, \'all\', \'10\', NULL, \'$[1][0]\');\n+-----------------------------------------------+\n| JSON_SEARCH(@j, \'all\', \'10\', NULL, \'$[1][0]\') |\n+-----------------------------------------------+\n| "$[1][0].k" |\n+-----------------------------------------------+\n\nmysql> SELECT JSON_SEARCH(@j, \'all\', \'abc\', NULL, \'$[2]\');\n+---------------------------------------------+\n| JSON_SEARCH(@j, \'all\', \'abc\', NULL, \'$[2]\') |\n+---------------------------------------------+\n| "$[2].x" |\n+---------------------------------------------+\n\nmysql> SELECT JSON_SEARCH(@j, \'all\', \'%a%\');\n+-------------------------------+\n| JSON_SEARCH(@j, \'all\', \'%a%\') |\n+-------------------------------+\n| ["$[0]", "$[2].x"] |\n+-------------------------------+\n\nmysql> SELECT JSON_SEARCH(@j, \'all\', \'%b%\');\n+-------------------------------+\n| JSON_SEARCH(@j, \'all\', \'%b%\') |\n+-------------------------------+\n| ["$[0]", "$[2].x", "$[3].y"] |\n+-------------------------------+\n\nmysql> SELECT JSON_SEARCH(@j, \'all\', \'%b%\', NULL, \'$[0]\');\n+---------------------------------------------+\n| JSON_SEARCH(@j, \'all\', \'%b%\', NULL, \'$[0]\') |\n+---------------------------------------------+\n| "$[0]" |\n+---------------------------------------------+\n\nmysql> SELECT JSON_SEARCH(@j, \'all\', \'%b%\', NULL, \'$[2]\');\n+---------------------------------------------+\n| JSON_SEARCH(@j, \'all\', \'%b%\', NULL, \'$[2]\') |\n+---------------------------------------------+\n| "$[2].x" |\n+---------------------------------------------+\n\nmysql> SELECT JSON_SEARCH(@j, \'all\', \'%b%\', NULL, \'$[1]\');\n+---------------------------------------------+\n| JSON_SEARCH(@j, \'all\', \'%b%\', NULL, \'$[1]\') |\n+---------------------------------------------+\n| NULL |\n+---------------------------------------------+\n\nmysql> SELECT JSON_SEARCH(@j, \'all\', \'%b%\', \'\', \'$[1]\');\n+-------------------------------------------+\n| JSON_SEARCH(@j, \'all\', \'%b%\', \'\', \'$[1]\') |\n+-------------------------------------------+\n| NULL |\n+-------------------------------------------+\n\nmysql> SELECT JSON_SEARCH(@j, \'all\', \'%b%\', \'\', \'$[3]\');\n+-------------------------------------------+\n| JSON_SEARCH(@j, \'all\', \'%b%\', \'\', \'$[3]\') |\n+-------------------------------------------+\n| "$[3].y" |\n+-------------------------------------------+\n','http://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (37,24,'CLOSE','Syntax:\nCLOSE cursor_name\n\nThis statement closes a previously opened cursor. For an example, see\nhttp://dev.mysql.com/doc/refman/5.7/en/cursors.html.\n\nAn error occurs if the cursor is not open.\n\nIf not closed explicitly, a cursor is closed at the end of the BEGIN\n... END block in which it was declared.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/close.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/close.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (38,38,'REPLACE FUNCTION','Syntax:\nREPLACE(str,from_str,to_str)\n\nReturns the string str with all occurrences of the string from_str\nreplaced by the string to_str. REPLACE() performs a case-sensitive\nmatch when searching for from_str.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/string-functions.html\n\n','mysql> SELECT REPLACE(\'www.mysql.com\', \'w\', \'Ww\');\n -> \'WwWwWw.mysql.com\'\n','http://dev.mysql.com/doc/refman/5.7/en/string-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (39,29,'USE','Syntax:\nUSE db_name\n\nThe USE db_name statement tells MySQL to use the db_name database as\nthe default (current) database for subsequent statements. The database\nremains the default until the end of the session or another USE\nstatement is issued:\n\nUSE db1;\nSELECT COUNT(*) FROM mytable; # selects from db1.mytable\nUSE db2;\nSELECT COUNT(*) FROM mytable; # selects from db2.mytable\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/use.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/use.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (39,29,'USE','Syntax:\nUSE db_name\n\nThe USE db_name statement tells MySQL to use the db_name database as\nthe default (current) database for subsequent statements. The database\nremains the default until the end of the session or another USE\nstatement is issued:\n\nUSE db1;\nSELECT COUNT(*) FROM mytable; # selects from db1.mytable\nUSE db2;\nSELECT COUNT(*) FROM mytable; # selects from db2.mytable\n\nThe database name must be specified on a single line. Newlines in\ndatabase names are not supported.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/use.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/use.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (40,6,'CASE OPERATOR','Syntax:\nCASE value WHEN [compare_value] THEN result [WHEN [compare_value] THEN\nresult ...] [ELSE result] END\n\nCASE WHEN [condition] THEN result [WHEN [condition] THEN result ...]\n[ELSE result] END\n\nThe first CASE syntax returns the result for the first\nvalue=compare_value comparison that is true. The second syntax returns\nthe result for the first condition that is true. If no comparison or\ncondition is true, the result after ELSE is returned, or NULL if there\nis no ELSE part.\n\n*Note*:\n\nThe syntax of the CASE expression described here differs slightly from\nthat of the SQL CASE statement described in [HELP CASE statement], for\nuse inside stored programs. The CASE statement cannot have an ELSE NULL\nclause, and it is terminated with END CASE instead of END.\n\nThe return type of a CASE expression result is the aggregated type of\nall result values.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html\n\n','mysql> SELECT CASE 1 WHEN 1 THEN \'one\'\n -> WHEN 2 THEN \'two\' ELSE \'more\' END;\n -> \'one\'\nmysql> SELECT CASE WHEN 1>0 THEN \'true\' ELSE \'false\' END;\n -> \'true\'\nmysql> SELECT CASE BINARY \'B\'\n -> WHEN \'a\' THEN 1 WHEN \'b\' THEN 2 END;\n -> NULL\n','http://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (41,27,'SHOW MASTER STATUS','Syntax:\nSHOW MASTER STATUS\n\nThis statement provides status information about the binary log files\nof the master. It requires either the SUPER or REPLICATION CLIENT\nprivilege.\n\nExample:\n\nmysql> SHOW MASTER STATUS\\G\n*************************** 1. row ***************************\n File: master-bin.000002\n Position: 1307\n Binlog_Do_DB: test\n Binlog_Ignore_DB: manual, mysql\nExecuted_Gtid_Set: 3E11FA47-71CA-11E1-9E33-C80AA9429562:1-5\n1 row in set (0.00 sec)\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/show-master-status.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/show-master-status.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (42,32,'TO_SECONDS','Syntax:\nTO_SECONDS(expr)\n\nGiven a date or datetime expr, returns the number of seconds since the\nyear 0. If expr is not a valid date or datetime value, returns NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html\n\n','mysql> SELECT TO_SECONDS(950501);\n -> 62966505600\nmysql> SELECT TO_SECONDS(\'2009-11-29\');\n -> 63426672000\nmysql> SELECT TO_SECONDS(\'2009-11-29 13:43:32\');\n -> 63426721412\nmysql> SELECT TO_SECONDS( NOW() );\n -> 63426721458\n','http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html'); @@ -131,7 +131,7 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example, INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (50,23,'BLOB DATA TYPE','A BLOB is a binary large object that can hold a variable amount of\ndata. The four BLOB types are TINYBLOB, BLOB, MEDIUMBLOB, and LONGBLOB.\nThese differ only in the maximum length of the values they can hold.\nThe four TEXT types are TINYTEXT, TEXT, MEDIUMTEXT, and LONGTEXT. These\ncorrespond to the four BLOB types and have the same maximum lengths and\nstorage requirements. See\nhttp://dev.mysql.com/doc/refman/5.7/en/storage-requirements.html.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/blob.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/blob.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (51,17,'CURRENT_USER','Syntax:\nCURRENT_USER, CURRENT_USER()\n\nReturns the user name and host name combination for the MySQL account\nthat the server used to authenticate the current client. This account\ndetermines your access privileges. The return value is a string in the\nutf8 character set.\n\nThe value of CURRENT_USER() can differ from the value of USER().\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/information-functions.html\n\n','mysql> SELECT USER();\n -> \'davida@localhost\'\nmysql> SELECT * FROM mysql.user;\nERROR 1044: Access denied for user \'\'@\'localhost\' to\ndatabase \'mysql\'\nmysql> SELECT CURRENT_USER();\n -> \'@localhost\'\n','http://dev.mysql.com/doc/refman/5.7/en/information-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (52,20,'<=','Syntax:\n<=\n\nLess than or equal:\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html\n\n','mysql> SELECT 0.1 <= 2;\n -> 1\n','http://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (53,27,'SHOW PROFILES','Syntax:\nSHOW PROFILES\n\nThe SHOW PROFILES statement, together with SHOW PROFILE, displays\nprofiling information that indicates resource usage for statements\nexecuted during the course of the current session. For more\ninformation, see [HELP SHOW PROFILE].\n\n*Note*:\n\nThese statements are deprecated and will be removed in a future MySQL\nrelease. Use the Performance Schema instead; see\nhttp://dev.mysql.com/doc/refman/5.7/en/performance-schema.html.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/show-profiles.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/show-profiles.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (53,27,'SHOW PROFILES','Syntax:\nSHOW PROFILES\n\nThe SHOW PROFILES statement, together with SHOW PROFILE, displays\nprofiling information that indicates resource usage for statements\nexecuted during the course of the current session. For more\ninformation, see [HELP SHOW PROFILE].\n\n*Note*:\n\nThe SHOW PROFILE and SHOW PROFILES statements are deprecated and will\nbe removed in a future MySQL release. Use the Performance Schema\ninstead; see\nhttp://dev.mysql.com/doc/refman/5.7/en/performance-schema-query-profili\nng.html.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/show-profiles.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/show-profiles.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (54,28,'UPDATE','Syntax:\nUPDATE is a DML statement that modifies rows in a table.\n\nSingle-table syntax:\n\nUPDATE [LOW_PRIORITY] [IGNORE] table_reference\n SET assignment_list\n [WHERE where_condition]\n [ORDER BY ...]\n [LIMIT row_count]\n\nvalue:\n {expr | DEFAULT}\n\nassignment:\n col_name = value\n\nassignment_list:\n assignment [, assignment] ...\n\nMultiple-table syntax:\n\nUPDATE [LOW_PRIORITY] [IGNORE] table_references\n SET assignment_list\n [WHERE where_condition]\n\nFor the single-table syntax, the UPDATE statement updates columns of\nexisting rows in the named table with new values. The SET clause\nindicates which columns to modify and the values they should be given.\nEach value can be given as an expression, or the keyword DEFAULT to set\na column explicitly to its default value. The WHERE clause, if given,\nspecifies the conditions that identify which rows to update. With no\nWHERE clause, all rows are updated. If the ORDER BY clause is\nspecified, the rows are updated in the order that is specified. The\nLIMIT clause places a limit on the number of rows that can be updated.\n\nFor the multiple-table syntax, UPDATE updates rows in each table named\nin table_references that satisfy the conditions. Each matching row is\nupdated once, even if it matches the conditions multiple times. For\nmultiple-table syntax, ORDER BY and LIMIT cannot be used.\n\nFor partitioned tables, both the single-single and multiple-table forms\nof this statement support the use of a PARTITION option as part of a\ntable reference. This option takes a list of one or more partitions or\nsubpartitions (or both). Only the partitions (or subpartitions) listed\nare checked for matches, and a row that is not in any of these\npartitions or subpartitions is not updated, whether it satisfies the\nwhere_condition or not.\n\n*Note*:\n\nUnlike the case when using PARTITION with an INSERT or REPLACE\nstatement, an otherwise valid UPDATE ... PARTITION statement is\nconsidered successful even if no rows in the listed partitions (or\nsubpartitions) match the where_condition.\n\nFor more information and examples, see\nhttp://dev.mysql.com/doc/refman/5.7/en/partitioning-selection.html.\n\nwhere_condition is an expression that evaluates to true for each row to\nbe updated. For expression syntax, see\nhttp://dev.mysql.com/doc/refman/5.7/en/expressions.html.\n\ntable_references and where_condition are specified as described in\nhttp://dev.mysql.com/doc/refman/5.7/en/select.html.\n\nYou need the UPDATE privilege only for columns referenced in an UPDATE\nthat are actually updated. You need only the SELECT privilege for any\ncolumns that are read but not modified.\n\nThe UPDATE statement supports the following modifiers:\n\no With the LOW_PRIORITY modifier, execution of the UPDATE is delayed\n until no other clients are reading from the table. This affects only\n storage engines that use only table-level locking (such as MyISAM,\n MEMORY, and MERGE).\n\no With the IGNORE modifier, the update statement does not abort even if\n errors occur during the update. Rows for which duplicate-key\n conflicts occur on a unique key value are not updated. Rows updated\n to values that would cause data conversion errors are updated to the\n closest valid values instead. For more information, see\n http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#ignore-strict-co\n mparison.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/update.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/update.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (55,24,'CASE STATEMENT','Syntax:\nCASE case_value\n WHEN when_value THEN statement_list\n [WHEN when_value THEN statement_list] ...\n [ELSE statement_list]\nEND CASE\n\nOr:\n\nCASE\n WHEN search_condition THEN statement_list\n [WHEN search_condition THEN statement_list] ...\n [ELSE statement_list]\nEND CASE\n\nThe CASE statement for stored programs implements a complex conditional\nconstruct.\n\n*Note*:\n\nThere is also a CASE expression, which differs from the CASE statement\ndescribed here. See\nhttp://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html. The\nCASE statement cannot have an ELSE NULL clause, and it is terminated\nwith END CASE instead of END.\n\nFor the first syntax, case_value is an expression. This value is\ncompared to the when_value expression in each WHEN clause until one of\nthem is equal. When an equal when_value is found, the corresponding\nTHEN clause statement_list executes. If no when_value is equal, the\nELSE clause statement_list executes, if there is one.\n\nThis syntax cannot be used to test for equality with NULL because NULL\n= NULL is false. See\nhttp://dev.mysql.com/doc/refman/5.7/en/working-with-null.html.\n\nFor the second syntax, each WHEN clause search_condition expression is\nevaluated until one is true, at which point its corresponding THEN\nclause statement_list executes. If no search_condition is equal, the\nELSE clause statement_list executes, if there is one.\n\nIf no when_value or search_condition matches the value tested and the\nCASE statement contains no ELSE clause, a Case not found for CASE\nstatement error results.\n\nEach statement_list consists of one or more SQL statements; an empty\nstatement_list is not permitted.\n\nTo handle situations where no value is matched by any WHEN clause, use\nan ELSE containing an empty BEGIN ... END block, as shown in this\nexample. (The indentation used here in the ELSE clause is for purposes\nof clarity only, and is not otherwise significant.)\n\nDELIMITER |\n\nCREATE PROCEDURE p()\n BEGIN\n DECLARE v INT DEFAULT 1;\n\n CASE v\n WHEN 2 THEN SELECT v;\n WHEN 3 THEN SELECT 0;\n ELSE\n BEGIN\n END;\n END CASE;\n END;\n |\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/case.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/case.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (56,7,'ST_SIMPLIFY','ST_Simplify(g, max_distance)\n\nSimplifies a geometry using the Douglas-Peucker algorithm and returns a\nsimplified value of the same type. If any argument is NULL, the return\nvalue is NULL.\n\nThe geometry may be any geometry type, although the Douglas-Peucker\nalgorithm may not actually process every type. A geometry collection is\nprocessed by giving its components one by one to the simplification\nalgorithm, and the returned geometries are put into a geometry\ncollection as result.\n\nThe max_distance argument is the distance (in units of the input\ncoordinates) of a vertex to other segments to be removed. Vertices\nwithin this distance of the simplified linestring are removed. If the\nmax_distance argument is not positive, or is NaN, an ER_WRONG_ARGUMENTS\nerror occurs.\n\nAccording to Boost.Geometry, geometries might become invalid as a\nresult of the simplification process, and the process might create\nself-intersections. To check the validity of the result, pass it to\nST_IsValid().\n\nIf the geometry argument is not a syntactically well-formed geometry\nbyte string, an ER_GIS_INVALID_DATA error occurs.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/spatial-convenience-functions.html\n\n','mysql> SET @g = ST_GeomFromText(\'LINESTRING(0 0,0 1,1 1,1 2,2 2,2 3,3 3)\');\nmysql> SELECT ST_AsText(ST_Simplify(@g, 0.5));\n+---------------------------------+\n| ST_AsText(ST_Simplify(@g, 0.5)) |\n+---------------------------------+\n| LINESTRING(0 0,0 1,1 1,2 3,3 3) |\n+---------------------------------+\nmysql> SELECT ST_AsText(ST_Simplify(@g, 1.0));\n+---------------------------------+\n| ST_AsText(ST_Simplify(@g, 1.0)) |\n+---------------------------------+\n| LINESTRING(0 0,3 3) |\n+---------------------------------+\n','http://dev.mysql.com/doc/refman/5.7/en/spatial-convenience-functions.html'); @@ -143,14 +143,14 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example, INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (62,38,'NOT LIKE','Syntax:\nexpr NOT LIKE pat [ESCAPE \'escape_char\']\n\nThis is the same as NOT (expr LIKE pat [ESCAPE \'escape_char\']).\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/string-comparison-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/string-comparison-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (63,38,'SPACE','Syntax:\nSPACE(N)\n\nReturns a string consisting of N space characters.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/string-functions.html\n\n','mysql> SELECT SPACE(6);\n -> \' \'\n','http://dev.mysql.com/doc/refman/5.7/en/string-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (64,16,'MAX','Syntax:\nMAX([DISTINCT] expr)\n\nReturns the maximum value of expr. MAX() may take a string argument; in\nsuch cases, it returns the maximum string value. See\nhttp://dev.mysql.com/doc/refman/5.7/en/mysql-indexes.html. The DISTINCT\nkeyword can be used to find the maximum of the distinct values of expr,\nhowever, this produces the same result as omitting DISTINCT.\n\nIf there are no matching rows, MAX() returns NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html\n\n','mysql> SELECT student_name, MIN(test_score), MAX(test_score)\n FROM student\n GROUP BY student_name;\n','http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (65,22,'CREATE FUNCTION UDF','Syntax:\nCREATE [AGGREGATE] FUNCTION function_name\n RETURNS {STRING|INTEGER|REAL|DECIMAL}\n SONAME shared_library_name\n\nA user-defined function (UDF) is a way to extend MySQL with a new\nfunction that works like a native (built-in) MySQL function such as\nABS() or CONCAT().\n\nfunction_name is the name that should be used in SQL statements to\ninvoke the function. The RETURNS clause indicates the type of the\nfunction\'s return value. DECIMAL is a legal value after RETURNS, but\ncurrently DECIMAL functions return string values and should be written\nlike STRING functions.\n\nshared_library_name is the base name of the shared library file that\ncontains the code that implements the function. The file must be\nlocated in the plugin directory. This directory is given by the value\nof the plugin_dir system variable. For more information, see\nhttp://dev.mysql.com/doc/refman/5.7/en/udf-compiling.html.\n\nTo create a function, you must have the INSERT privilege for the mysql\ndatabase. This is necessary because CREATE FUNCTION adds a row to the\nmysql.func system table that records the function\'s name, type, and\nshared library name. If you do not have this table, you should run the\nmysql_upgrade command to create it. See\nhttp://dev.mysql.com/doc/refman/5.7/en/mysql-upgrade.html.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/create-function-udf.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/create-function-udf.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (65,22,'CREATE FUNCTION UDF','Syntax:\nCREATE [AGGREGATE] FUNCTION function_name\n RETURNS {STRING|INTEGER|REAL|DECIMAL}\n SONAME shared_library_name\n\nA user-defined function (UDF) is a way to extend MySQL with a new\nfunction that works like a native (built-in) MySQL function such as\nABS() or CONCAT().\n\nfunction_name is the name that should be used in SQL statements to\ninvoke the function. The RETURNS clause indicates the type of the\nfunction\'s return value. DECIMAL is a legal value after RETURNS, but\ncurrently DECIMAL functions return string values and should be written\nlike STRING functions.\n\nshared_library_name is the base name of the shared library file that\ncontains the code that implements the function. The file must be\nlocated in the plugin directory. This directory is given by the value\nof the plugin_dir system variable. For more information, see\nhttp://dev.mysql.com/doc/refman/5.7/en/udf-compiling.html.\n\nTo create a function, you must have the INSERT privilege for the mysql\nsystem database. This is necessary because CREATE FUNCTION adds a row\nto the mysql.func system table that records the function\'s name, type,\nand shared library name. If you do not have this table, you should run\nthe mysql_upgrade command to create it. See\nhttp://dev.mysql.com/doc/refman/5.7/en/mysql-upgrade.html.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/create-function-udf.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/create-function-udf.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (66,23,'TIMESTAMP','TIMESTAMP[(fsp)]\n\nA timestamp. The range is \'1970-01-01 00:00:01.000000\' UTC to\n\'2038-01-19 03:14:07.999999\' UTC. TIMESTAMP values are stored as the\nnumber of seconds since the epoch (\'1970-01-01 00:00:00\' UTC). A\nTIMESTAMP cannot represent the value \'1970-01-01 00:00:00\' because that\nis equivalent to 0 seconds from the epoch and the value 0 is reserved\nfor representing \'0000-00-00 00:00:00\', the "zero" TIMESTAMP value.\n\nAn optional fsp value in the range from 0 to 6 may be given to specify\nfractional seconds precision. A value of 0 signifies that there is no\nfractional part. If omitted, the default precision is 0.\n\nThe way the server handles TIMESTAMP definitions depends on the value\nof the explicit_defaults_for_timestamp system variable (see\nhttp://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html).\n\nIf explicit_defaults_for_timestamp is enabled, there is no automatic\nassignment of the DEFAULT CURRENT_TIMESTAMP or ON UPDATE\nCURRENT_TIMESTAMP attributes to any TIMESTAMP column. They must be\nincluded explicitly in the column definition. Also, any TIMESTAMP not\nexplicitly declared as NOT NULL permits NULL values.\n\nIf explicit_defaults_for_timestamp is disabled, the server handles\nTIMESTAMP as follows:\n\nUnless specified otherwise, the first TIMESTAMP column in a table is\ndefined to be automatically set to the date and time of the most recent\nmodification if not explicitly assigned a value. This makes TIMESTAMP\nuseful for recording the timestamp of an INSERT or UPDATE operation.\nYou can also set any TIMESTAMP column to the current date and time by\nassigning it a NULL value, unless it has been defined with the NULL\nattribute to permit NULL values.\n\nAutomatic initialization and updating to the current date and time can\nbe specified using DEFAULT CURRENT_TIMESTAMP and ON UPDATE\nCURRENT_TIMESTAMP column definition clauses. By default, the first\nTIMESTAMP column has these properties, as previously noted. However,\nany TIMESTAMP column in a table can be defined to have these\nproperties.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/date-and-time-type-overview.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/date-and-time-type-overview.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (67,7,'CREATE_ASYMMETRIC_PUB_KEY','Syntax:\nCREATE_ASYMMETRIC_PUB_KEY(algorithm, priv_key_str)\n\nDerives a public key from the given private key using the given\nalgorithm, and returns the key as a binary string in PEM format. If key\nderivation fails, the result is NULL.\n\npriv_key_str must be a valid key string in PEM format. algorithm\nindicates the encryption algorithm used to create the key.\n\nSupported algorithm values: \'RSA\', \'DSA\', \'DH\'\n\nFor a usage example, see the description of\nCREATE_ASYMMETRIC_PRIV_KEY().\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/enterprise-encryption-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/enterprise-encryption-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (68,27,'CACHE INDEX','Syntax:\nCACHE INDEX\n tbl_index_list [, tbl_index_list] ...\n [PARTITION (partition_list | ALL)]\n IN key_cache_name\n\ntbl_index_list:\n tbl_name [[INDEX|KEY] (index_name[, index_name] ...)]\n\npartition_list:\n partition_name[, partition_name][, ...]\n\nThe CACHE INDEX statement assigns table indexes to a specific key\ncache. It is used only for MyISAM tables. After the indexes have been\nassigned, they can be preloaded into the cache if desired with LOAD\nINDEX INTO CACHE.\n\nThe following statement assigns indexes from the tables t1, t2, and t3\nto the key cache named hot_cache:\n\nmysql> CACHE INDEX t1, t2, t3 IN hot_cache;\n+---------+--------------------+----------+----------+\n| Table | Op | Msg_type | Msg_text |\n+---------+--------------------+----------+----------+\n| test.t1 | assign_to_keycache | status | OK |\n| test.t2 | assign_to_keycache | status | OK |\n| test.t3 | assign_to_keycache | status | OK |\n+---------+--------------------+----------+----------+\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/cache-index.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/cache-index.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (69,12,'COMPRESS','Syntax:\nCOMPRESS(string_to_compress)\n\nCompresses a string and returns the result as a binary string. This\nfunction requires MySQL to have been compiled with a compression\nlibrary such as zlib. Otherwise, the return value is always NULL. The\ncompressed string can be uncompressed with UNCOMPRESS().\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html\n\n','mysql> SELECT LENGTH(COMPRESS(REPEAT(\'a\',1000)));\n -> 21\nmysql> SELECT LENGTH(COMPRESS(\'\'));\n -> 0\nmysql> SELECT LENGTH(COMPRESS(\'a\'));\n -> 13\nmysql> SELECT LENGTH(COMPRESS(REPEAT(\'a\',16)));\n -> 15\n','http://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (70,28,'HANDLER','Syntax:\nHANDLER tbl_name OPEN [ [AS] alias]\n\nHANDLER tbl_name READ index_name { = | <= | >= | < | > } (value1,value2,...)\n [ WHERE where_condition ] [LIMIT ... ]\nHANDLER tbl_name READ index_name { FIRST | NEXT | PREV | LAST }\n [ WHERE where_condition ] [LIMIT ... ]\nHANDLER tbl_name READ { FIRST | NEXT }\n [ WHERE where_condition ] [LIMIT ... ]\n\nHANDLER tbl_name CLOSE\n\nThe HANDLER statement provides direct access to table storage engine\ninterfaces. It is available for InnoDB and MyISAM tables.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/handler.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/handler.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (71,9,'HELP_DATE','This help information was generated from the MySQL 5.7 Reference Manual\non: 2018-06-07\n','',''); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (72,40,'RENAME TABLE','Syntax:\nRENAME TABLE\n tbl_name TO new_tbl_name\n [, tbl_name2 TO new_tbl_name2] ...\n\nRENAME TABLE renames one or more tables. You must have ALTER and DROP\nprivileges for the original table, and CREATE and INSERT privileges for\nthe new table.\n\nFor example, to rename a table named old_table to to new_table, use\nthis statement:\n\nRENAME TABLE old_table TO new_table;\n\nThat statement is equivalent to the following ALTER TABLE statement:\n\nALTER TABLE old_table RENAME new_table;\n\nRENAME TABLE, unlike ALTER TABLE, can rename multiple tables within a\nsingle statement:\n\nRENAME TABLE old_table1 TO new_table1,\n old_table2 TO new_table2,\n old_table3 TO new_table3;\n\nRenaming operations are performed left to right. Thus, to swap two\ntable names, do this (assuming that a table with the intermediary name\ntmp_table does not already exist):\n\nRENAME TABLE old_table TO tmp_table,\n new_table TO old_table,\n tmp_table TO new_table;\n\nWhen you execute RENAME TABLE, you cannot have any locked tables or\nactive transactions. With that condition satisfied, the rename\noperation is done atomically; no other session can access any of the\ntables while the rename is in progress.\n\nIf any errors occur during a RENAME TABLE, the statement fails and no\nchanges are made.\n\nYou can use RENAME TABLE to move a table from one database to another:\n\nRENAME TABLE current_db.tbl_name TO other_db.tbl_name;\n\nUsing this method to move all tables from one database to a different\none in effect renames the database (an operation for which MySQL has no\nsingle statement), except that the original database continues to\nexist, albeit with no tables.\n\nLike RENAME TABLE, ALTER TABLE ... RENAME can also be used to move a\ntable to a different database. Regardless of the statement used, if the\nrename operation would move the table to a database located on a\ndifferent file system, the success of the outcome is platform specific\nand depends on the underlying operating system calls used to move the\ntable files.\n\nIf a table has triggers, attempts to rename the table into a different\ndatabase fail with a Trigger in wrong schema error.\n\nRENAME TABLE does not work for TEMPORARY tables. However, you can use\nALTER TABLE to rename TEMPORARY tables.\n\nRENAME TABLE works for views, except that views cannot be renamed into\na different database.\n\nAny privileges granted specifically for a renamed table or view are not\nmigrated to the new name. They must be changed manually.\n\nRENAME TABLE changes internally generated foreign key constraint names\nand user-defined foreign key constraint names that contain the string\n"tbl_name_ibfk_" to reflect the new table name. InnoDB interprets\nforeign key constraint names that contain the string "tbl_name_ibfk_"\nas internally generated names.\n\nForeign key constraint names that point to the renamed table are\nautomatically updated unless there is a conflict, in which case, the\nstatement fails with an error. A conflict occurs if the renamed\nconstraint name already exists. In such cases, you must drop and\nre-create the foreign keys in order for them to function properly.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/rename-table.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/rename-table.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (71,9,'HELP_DATE','This help information was generated from the MySQL 5.7 Reference Manual\non: 2018-10-03\n','',''); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (72,40,'RENAME TABLE','Syntax:\nRENAME TABLE\n tbl_name TO new_tbl_name\n [, tbl_name2 TO new_tbl_name2] ...\n\nRENAME TABLE renames one or more tables. You must have ALTER and DROP\nprivileges for the original table, and CREATE and INSERT privileges for\nthe new table.\n\nFor example, to rename a table named old_table to to new_table, use\nthis statement:\n\nRENAME TABLE old_table TO new_table;\n\nThat statement is equivalent to the following ALTER TABLE statement:\n\nALTER TABLE old_table RENAME new_table;\n\nRENAME TABLE, unlike ALTER TABLE, can rename multiple tables within a\nsingle statement:\n\nRENAME TABLE old_table1 TO new_table1,\n old_table2 TO new_table2,\n old_table3 TO new_table3;\n\nRenaming operations are performed left to right. Thus, to swap two\ntable names, do this (assuming that a table with the intermediary name\ntmp_table does not already exist):\n\nRENAME TABLE old_table TO tmp_table,\n new_table TO old_table,\n tmp_table TO new_table;\n\nTo execute RENAME TABLE, there must be no active transactions or tables\nlocked with LOCK TABLES. With the transaction table locking conditions\nsatisfied, the rename operation is done atomically; no other session\ncan access any of the tables while the rename is in progress.\n\nIf any errors occur during a RENAME TABLE, the statement fails and no\nchanges are made.\n\nYou can use RENAME TABLE to move a table from one database to another:\n\nRENAME TABLE current_db.tbl_name TO other_db.tbl_name;\n\nUsing this method to move all tables from one database to a different\none in effect renames the database (an operation for which MySQL has no\nsingle statement), except that the original database continues to\nexist, albeit with no tables.\n\nLike RENAME TABLE, ALTER TABLE ... RENAME can also be used to move a\ntable to a different database. Regardless of the statement used, if the\nrename operation would move the table to a database located on a\ndifferent file system, the success of the outcome is platform specific\nand depends on the underlying operating system calls used to move table\nfiles.\n\nIf a table has triggers, attempts to rename the table into a different\ndatabase fail with a Trigger in wrong schema (ER_TRG_IN_WRONG_SCHEMA)\nerror.\n\nTo rename TEMPORARY tables, RENAME TABLE does not work. Use ALTER TABLE\ninstead.\n\nRENAME TABLE works for views, except that views cannot be renamed into\na different database.\n\nAny privileges granted specifically for a renamed table or view are not\nmigrated to the new name. They must be changed manually.\n\nRENAME TABLE changes internally generated foreign key constraint names\nand user-defined foreign key constraint names that contain the string\n"tbl_name_ibfk_" to reflect the new table name. InnoDB interprets\nforeign key constraint names that contain the string "tbl_name_ibfk_"\nas internally generated names.\n\nForeign key constraint names that point to the renamed table are\nautomatically updated unless there is a conflict, in which case the\nstatement fails with an error. A conflict occurs if the renamed\nconstraint name already exists. In such cases, you must drop and\nre-create the foreign keys for them to function properly.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/rename-table.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/rename-table.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (73,23,'BOOLEAN','BOOL, BOOLEAN\n\nThese types are synonyms for TINYINT(1). A value of zero is considered\nfalse. Nonzero values are considered true:\n\nmysql> SELECT IF(0, \'true\', \'false\');\n+------------------------+\n| IF(0, \'true\', \'false\') |\n+------------------------+\n| false |\n+------------------------+\n\nmysql> SELECT IF(1, \'true\', \'false\');\n+------------------------+\n| IF(1, \'true\', \'false\') |\n+------------------------+\n| true |\n+------------------------+\n\nmysql> SELECT IF(2, \'true\', \'false\');\n+------------------------+\n| IF(2, \'true\', \'false\') |\n+------------------------+\n| true |\n+------------------------+\n\nHowever, the values TRUE and FALSE are merely aliases for 1 and 0,\nrespectively, as shown here:\n\nmysql> SELECT IF(0 = FALSE, \'true\', \'false\');\n+--------------------------------+\n| IF(0 = FALSE, \'true\', \'false\') |\n+--------------------------------+\n| true |\n+--------------------------------+\n\nmysql> SELECT IF(1 = TRUE, \'true\', \'false\');\n+-------------------------------+\n| IF(1 = TRUE, \'true\', \'false\') |\n+-------------------------------+\n| true |\n+-------------------------------+\n\nmysql> SELECT IF(2 = TRUE, \'true\', \'false\');\n+-------------------------------+\n| IF(2 = TRUE, \'true\', \'false\') |\n+-------------------------------+\n| false |\n+-------------------------------+\n\nmysql> SELECT IF(2 = FALSE, \'true\', \'false\');\n+--------------------------------+\n| IF(2 = FALSE, \'true\', \'false\') |\n+--------------------------------+\n| false |\n+--------------------------------+\n\nThe last two statements display the results shown because 2 is equal to\nneither 1 nor 0.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/numeric-type-overview.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/numeric-type-overview.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (74,7,'JSON_EXTRACT','Syntax:\nJSON_EXTRACT(json_doc, path[, path] ...)\n\nReturns data from a JSON document, selected from the parts of the\ndocument matched by the path arguments. Returns NULL if any argument is\nNULL or no paths locate a value in the document. An error occurs if the\njson_doc argument is not a valid JSON document or any path argument is\nnot a valid path expression.\n\nThe return value consists of all values matched by the path arguments.\nIf it is possible that those arguments could return multiple values,\nthe matched values are autowrapped as an array, in the order\ncorresponding to the paths that produced them. Otherwise, the return\nvalue is the single matched value.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html\n\n','mysql> SELECT JSON_EXTRACT(\'[10, 20, [30, 40]]\', \'$[1]\');\n+--------------------------------------------+\n| JSON_EXTRACT(\'[10, 20, [30, 40]]\', \'$[1]\') |\n+--------------------------------------------+\n| 20 |\n+--------------------------------------------+\nmysql> SELECT JSON_EXTRACT(\'[10, 20, [30, 40]]\', \'$[1]\', \'$[0]\');\n+----------------------------------------------------+\n| JSON_EXTRACT(\'[10, 20, [30, 40]]\', \'$[1]\', \'$[0]\') |\n+----------------------------------------------------+\n| [20, 10] |\n+----------------------------------------------------+\nmysql> SELECT JSON_EXTRACT(\'[10, 20, [30, 40]]\', \'$[2][*]\');\n+-----------------------------------------------+\n| JSON_EXTRACT(\'[10, 20, [30, 40]]\', \'$[2][*]\') |\n+-----------------------------------------------+\n| [30, 40] |\n+-----------------------------------------------+\n','http://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (75,3,'MOD','Syntax:\nMOD(N,M), N % M, N MOD M\n\nModulo operation. Returns the remainder of N divided by M.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html\n\n','mysql> SELECT MOD(234, 10);\n -> 4\nmysql> SELECT 253 % 7;\n -> 1\nmysql> SELECT MOD(29,9);\n -> 2\nmysql> SELECT 29 MOD 9;\n -> 2\n','http://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html'); @@ -186,21 +186,21 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example, INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (105,27,'SHOW DATABASES','Syntax:\nSHOW {DATABASES | SCHEMAS}\n [LIKE \'pattern\' | WHERE expr]\n\nSHOW DATABASES lists the databases on the MySQL server host. SHOW\nSCHEMAS is a synonym for SHOW DATABASES. The LIKE clause, if present,\nindicates which database names to match. The WHERE clause can be given\nto select rows using more general conditions, as discussed in\nhttp://dev.mysql.com/doc/refman/5.7/en/extended-show.html.\n\nYou see only those databases for which you have some kind of privilege,\nunless you have the global SHOW DATABASES privilege. You can also get\nthis list using the mysqlshow command.\n\nIf the server was started with the --skip-show-database option, you\ncannot use this statement at all unless you have the SHOW DATABASES\nprivilege.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/show-databases.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/show-databases.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (106,32,'SEC_TO_TIME','Syntax:\nSEC_TO_TIME(seconds)\n\nReturns the seconds argument, converted to hours, minutes, and seconds,\nas a TIME value. The range of the result is constrained to that of the\nTIME data type. A warning occurs if the argument corresponds to a value\noutside that range.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html\n\n','mysql> SELECT SEC_TO_TIME(2378);\n -> \'00:39:38\'\nmysql> SELECT SEC_TO_TIME(2378) + 0;\n -> 3938\n','http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (107,38,'LOCATE','Syntax:\nLOCATE(substr,str), LOCATE(substr,str,pos)\n\nThe first syntax returns the position of the first occurrence of\nsubstring substr in string str. The second syntax returns the position\nof the first occurrence of substring substr in string str, starting at\nposition pos. Returns 0 if substr is not in str. Returns NULL if substr\nor str is NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/string-functions.html\n\n','mysql> SELECT LOCATE(\'bar\', \'foobarbar\');\n -> 4\nmysql> SELECT LOCATE(\'xbar\', \'foobar\');\n -> 0\nmysql> SELECT LOCATE(\'bar\', \'foobarbar\', 5);\n -> 7\n','http://dev.mysql.com/doc/refman/5.7/en/string-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (108,27,'SHOW EVENTS','Syntax:\nSHOW EVENTS\n [{FROM | IN} schema_name]\n [LIKE \'pattern\' | WHERE expr]\n\nThis statement displays information about Event Manager events. It\nrequires the EVENT privilege for the database from which the events are\nto be shown.\n\nIn its simplest form, SHOW EVENTS lists all of the events in the\ncurrent schema:\n\nmysql> SELECT CURRENT_USER(), SCHEMA();\n+----------------+----------+\n| CURRENT_USER() | SCHEMA() |\n+----------------+----------+\n| jon@ghidora | myschema |\n+----------------+----------+\n1 row in set (0.00 sec)\n\nmysql> SHOW EVENTS\\G\n*************************** 1. row ***************************\n Db: myschema\n Name: e_daily\n Definer: jon@ghidora\n Time zone: SYSTEM\n Type: RECURRING\n Execute at: NULL\n Interval value: 10\n Interval field: SECOND\n Starts: 2006-02-09 10:41:23\n Ends: NULL\n Status: ENABLED\n Originator: 0\ncharacter_set_client: latin1\ncollation_connection: latin1_swedish_ci\n Database Collation: latin1_swedish_ci\n\nTo see events for a specific schema, use the FROM clause. For example,\nto see events for the test schema, use the following statement:\n\nSHOW EVENTS FROM test;\n\nThe LIKE clause, if present, indicates which event names to match. The\nWHERE clause can be given to select rows using more general conditions,\nas discussed in\nhttp://dev.mysql.com/doc/refman/5.7/en/extended-show.html.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/show-events.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/show-events.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (108,27,'SHOW EVENTS','Syntax:\nSHOW EVENTS\n [{FROM | IN} schema_name]\n [LIKE \'pattern\' | WHERE expr]\n\nThis statement displays information about Event Manager events, which\nare discussed in\nhttp://dev.mysql.com/doc/refman/5.7/en/event-scheduler.html. It\nrequires the EVENT privilege for the database from which the events are\nto be shown.\n\nIn its simplest form, SHOW EVENTS lists all of the events in the\ncurrent schema:\n\nmysql> SELECT CURRENT_USER(), SCHEMA();\n+----------------+----------+\n| CURRENT_USER() | SCHEMA() |\n+----------------+----------+\n| jon@ghidora | myschema |\n+----------------+----------+\n1 row in set (0.00 sec)\n\nmysql> SHOW EVENTS\\G\n*************************** 1. row ***************************\n Db: myschema\n Name: e_daily\n Definer: jon@ghidora\n Time zone: SYSTEM\n Type: RECURRING\n Execute at: NULL\n Interval value: 1\n Interval field: DAY\n Starts: 2018-08-08 11:06:34\n Ends: NULL\n Status: ENABLED\n Originator: 1\ncharacter_set_client: utf8\ncollation_connection: utf8_general_ci\n Database Collation: latin1_swedish_ci\n\nTo see events for a specific schema, use the FROM clause. For example,\nto see events for the test schema, use the following statement:\n\nSHOW EVENTS FROM test;\n\nThe LIKE clause, if present, indicates which event names to match. The\nWHERE clause can be given to select rows using more general conditions,\nas discussed in\nhttp://dev.mysql.com/doc/refman/5.7/en/extended-show.html.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/show-events.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/show-events.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (109,7,'JSON_INSERT','Syntax:\nJSON_INSERT(json_doc, path, val[, path, val] ...)\n\nInserts data into a JSON document and returns the result. Returns NULL\nif any argument is NULL. An error occurs if the json_doc argument is\nnot a valid JSON document or any path argument is not a valid path\nexpression or contains a * or ** wildcard.\n\nThe path-value pairs are evaluated left to right. The document produced\nby evaluating one pair becomes the new value against which the next\npair is evaluated.\n\nA path-value pair for an existing path in the document is ignored and\ndoes not overwrite the existing document value. A path-value pair for a\nnonexisting path in the document adds the value to the document if the\npath identifies one of these types of values:\n\no A member not present in an existing object. The member is added to\n the object and associated with the new value.\n\no A position past the end of an existing array. The array is extended\n with the new value. If the existing value is not an array, it is\n autowrapped as an array, then extended with the new value.\n\nOtherwise, a path-value pair for a nonexisting path in the document is\nignored and has no effect.\n\nFor a comparison of JSON_INSERT(), JSON_REPLACE(), and JSON_SET(), see\nthe discussion of JSON_SET().\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/json-modification-functions.html\n\n','mysql> SET @j = \'{ "a": 1, "b": [2, 3]}\';\nmysql> SELECT JSON_INSERT(@j, \'$.a\', 10, \'$.c\', \'[true, false]\');\n+----------------------------------------------------+\n| JSON_INSERT(@j, \'$.a\', 10, \'$.c\', \'[true, false]\') |\n+----------------------------------------------------+\n| {"a": 1, "b": [2, 3], "c": "[true, false]"} |\n+----------------------------------------------------+\n\nmysql> SELECT JSON_INSERT(@j, \'$.a\', 10, \'$.c\', CAST(\'[true, false]\' AS JSON));\n+------------------------------------------------------------------+\n| JSON_INSERT(@j, \'$.a\', 10, \'$.c\', CAST(\'[true, false]\' AS JSON)) |\n+------------------------------------------------------------------+\n| {"a": 1, "b": [2, 3], "c": [true, false]} |\n+------------------------------------------------------------------+\n1 row in set (0.00 sec)\n','http://dev.mysql.com/doc/refman/5.7/en/json-modification-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (110,7,'JSON_UNQUOTE','Syntax:\nJSON_UNQUOTE(json_val)\n\nUnquotes JSON value and returns the result as a utf8mb4 string. Returns\nNULL if the argument is NULL. An error occurs if the value starts and\nends with double quotes but is not a valid JSON string literal.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/json-modification-functions.html\n\n','mysql> SET @j = \'"abc"\';\nmysql> SELECT @j, JSON_UNQUOTE(@j);\n+-------+------------------+\n| @j | JSON_UNQUOTE(@j) |\n+-------+------------------+\n| "abc" | abc |\n+-------+------------------+\nmysql> SET @j = \'[1, 2, 3]\';\nmysql> SELECT @j, JSON_UNQUOTE(@j);\n+-----------+------------------+\n| @j | JSON_UNQUOTE(@j) |\n+-----------+------------------+\n| [1, 2, 3] | [1, 2, 3] |\n+-----------+------------------+\n\nmysql> SELECT @@sql_mode;\n+------------+\n| @@sql_mode |\n+------------+\n| |\n+------------+\n\nmysql> SELECT JSON_UNQUOTE(\'"\\\\t\\\\u0032"\');\n+------------------------------+\n| JSON_UNQUOTE(\'"\\\\t\\\\u0032"\') |\n+------------------------------+\n| 2 |\n+------------------------------+\n\nmysql> SET @@sql_mode = \'NO_BACKSLASH_ESCAPES\';\nmysql> SELECT JSON_UNQUOTE(\'"\\\\t\\\\u0032"\');\n+------------------------------+\n| JSON_UNQUOTE(\'"\\\\t\\\\u0032"\') |\n+------------------------------+\n| \\t\\u0032 |\n+------------------------------+\n\nmysql> SELECT JSON_UNQUOTE(\'"\\t\\u0032"\');\n+----------------------------+\n| JSON_UNQUOTE(\'"\\t\\u0032"\') |\n+----------------------------+\n| 2 |\n+----------------------------+\n','http://dev.mysql.com/doc/refman/5.7/en/json-modification-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (111,23,'LONGTEXT','LONGTEXT [CHARACTER SET charset_name] [COLLATE collation_name]\n\nA TEXT column with a maximum length of 4,294,967,295 or 4GB (232 − 1)\ncharacters. The effective maximum length is less if the value contains\nmultibyte characters. The effective maximum length of LONGTEXT columns\nalso depends on the configured maximum packet size in the client/server\nprotocol and available memory. Each LONGTEXT value is stored using a\n4-byte length prefix that indicates the number of bytes in the value.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/string-type-overview.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/string-type-overview.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (112,27,'KILL','Syntax:\nKILL [CONNECTION | QUERY] processlist_id\n\nEach connection to mysqld runs in a separate thread. You can kill a\nthread with the KILL processlist_id statement.\n\nThread processlist identifiers can be determined from the ID column of\nthe INFORMATION_SCHEMA.PROCESSLIST table, the Id column of SHOW\nPROCESSLIST output, and the PROCESSLIST_ID column of the Performance\nSchema threads table. The value for the current thread is returned by\nthe CONNECTION_ID() function.\n\nKILL permits an optional CONNECTION or QUERY modifier:\n\no KILL CONNECTION is the same as KILL with no modifier: It terminates\n the connection associated with the given processlist_id, after\n terminating any statement the connection is executing.\n\no KILL QUERY terminates the statement the connection is currently\n executing, but leaves the connection itself intact.\n\nIf you have the PROCESS privilege, you can see all threads. If you have\nthe SUPER privilege, you can kill all threads and statements.\nOtherwise, you can see and kill only your own threads and statements.\n\nYou can also use the mysqladmin processlist and mysqladmin kill\ncommands to examine and kill threads.\n\n*Note*:\n\nYou cannot use KILL with the Embedded MySQL Server library because the\nembedded server merely runs inside the threads of the host application.\nIt does not create any connection threads of its own.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/kill.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/kill.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (112,27,'KILL','Syntax:\nKILL [CONNECTION | QUERY] processlist_id\n\nEach connection to mysqld runs in a separate thread. You can kill a\nthread with the KILL processlist_id statement.\n\nThread processlist identifiers can be determined from the ID column of\nthe INFORMATION_SCHEMA PROCESSLIST table, the Id column of SHOW\nPROCESSLIST output, and the PROCESSLIST_ID column of the Performance\nSchema threads table. The value for the current thread is returned by\nthe CONNECTION_ID() function.\n\nKILL permits an optional CONNECTION or QUERY modifier:\n\no KILL CONNECTION is the same as KILL with no modifier: It terminates\n the connection associated with the given processlist_id, after\n terminating any statement the connection is executing.\n\no KILL QUERY terminates the statement the connection is currently\n executing, but leaves the connection itself intact.\n\nIf you have the PROCESS privilege, you can see all threads. If you have\nthe SUPER privilege, you can kill all threads and statements.\nOtherwise, you can see and kill only your own threads and statements.\n\nYou can also use the mysqladmin processlist and mysqladmin kill\ncommands to examine and kill threads.\n\n*Note*:\n\nYou cannot use KILL with the Embedded MySQL Server library because the\nembedded server merely runs inside the threads of the host application.\nIt does not create any connection threads of its own.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/kill.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/kill.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (113,7,'DISJOINT','Disjoint(g1, g2)\n\nMBRDisjoint() and Disjoint() are synonyms. For more information, see\nthe description of MBRDisjoint().\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-mbr.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-mbr.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (114,38,'LPAD','Syntax:\nLPAD(str,len,padstr)\n\nReturns the string str, left-padded with the string padstr to a length\nof len characters. If str is longer than len, the return value is\nshortened to len characters.\n\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/string-functions.html\n\n','mysql> SELECT LPAD(\'hi\',4,\'??\');\n -> \'??hi\'\nmysql> SELECT LPAD(\'hi\',1,\'??\');\n -> \'h\'\n','http://dev.mysql.com/doc/refman/5.7/en/string-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (115,7,'OVERLAPS','Overlaps(g1, g2)\n\nMBROverlaps() and Overlaps() are synonyms. For more information, see\nthe description of MBROverlaps().\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-mbr.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-mbr.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (116,8,'SET GLOBAL SQL_SLAVE_SKIP_COUNTER','Syntax:\nSET GLOBAL sql_slave_skip_counter = N\n\nThis statement skips the next N events from the master. This is useful\nfor recovering from replication stops caused by a statement.\n\nThis statement is valid only when the slave threads are not running.\nOtherwise, it produces an error.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/set-global-sql-slave-skip-counter.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/set-global-sql-slave-skip-counter.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (117,7,'MBREQUAL','MBREqual(g1, g2)\n\nReturns 1 or 0 to indicate whether the minimum bounding rectangles of\nthe two geometries g1 and g2 are the same.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-mbr.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-mbr.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (118,34,'PROCEDURE ANALYSE','Syntax:\nANALYSE([max_elements[,max_memory]])\n\n*Note*:\n\nPROCEDURE ANALYSE() is deprecated as of MySQL 5.7.18, and is removed in\nMySQL 8.0.\n\nANALYSE() examines the result from a query and returns an analysis of\nthe results that suggests optimal data types for each column that may\nhelp reduce table sizes. To obtain this analysis, append PROCEDURE\nANALYSE to the end of a SELECT statement:\n\nSELECT ... FROM ... WHERE ... PROCEDURE ANALYSE([max_elements,[max_memory]])\n\nFor example:\n\nSELECT col1, col2 FROM table1 PROCEDURE ANALYSE(10, 2000);\n\nThe results show some statistics for the values returned by the query,\nand propose an optimal data type for the columns. This can be helpful\nfor checking your existing tables, or after importing new data. You may\nneed to try different settings for the arguments so that PROCEDURE\nANALYSE() does not suggest the ENUM data type when it is not\nappropriate.\n\nThe arguments are optional and are used as follows:\n\no max_elements (default 256) is the maximum number of distinct values\n that ANALYSE() notices per column. This is used by ANALYSE() to check\n whether the optimal data type should be of type ENUM; if there are\n more than max_elements distinct values, then ENUM is not a suggested\n type.\n\no max_memory (default 8192) is the maximum amount of memory that\n ANALYSE() should allocate per column while trying to find all\n distinct values.\n\nA PROCEDURE clause is not permitted in a UNION statement.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/procedure-analyse.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/procedure-analyse.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (119,9,'HELP_VERSION','This help information was generated from the MySQL 5.7 Reference Manual\non: 2018-06-07 (revision: 57614)\n\nThis information applies to MySQL 5.7 through 5.7.24.\n','',''); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (119,9,'HELP_VERSION','This help information was generated from the MySQL 5.7 Reference Manual\non: 2018-10-03 (revision: 59320)\n\nThis information applies to MySQL 5.7 through 5.7.25.\n','',''); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (120,38,'CHARACTER_LENGTH','Syntax:\nCHARACTER_LENGTH(str)\n\nCHARACTER_LENGTH() is a synonym for CHAR_LENGTH().\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/string-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/string-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (121,27,'SHOW PRIVILEGES','Syntax:\nSHOW PRIVILEGES\n\nSHOW PRIVILEGES shows the list of system privileges that the MySQL\nserver supports. The exact list of privileges depends on the version of\nyour server.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/show-privileges.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/show-privileges.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (122,40,'CREATE TABLESPACE','Syntax:\nCREATE TABLESPACE tablespace_name\n\n InnoDB and NDB:\n ADD DATAFILE \'file_name\'\n\n InnoDB only:\n [FILE_BLOCK_SIZE = value]\n\n NDB only:\n USE LOGFILE GROUP logfile_group\n [EXTENT_SIZE [=] extent_size]\n [INITIAL_SIZE [=] initial_size]\n [AUTOEXTEND_SIZE [=] autoextend_size]\n [MAX_SIZE [=] max_size]\n [NODEGROUP [=] nodegroup_id]\n [WAIT]\n [COMMENT [=] \'string\']\n\n InnoDB and NDB:\n [ENGINE [=] engine_name]\n\nThis statement is used to create a tablespace. The precise syntax and\nsemantics depend on the storage engine used. In standard MySQL 5.7\nreleases, this is always an InnoDB tablespace. MySQL NDB Cluster 7.5\nalso supports tablespaces using the NDB storage engine in addition to\nthose using InnoDB.\n\nConsiderations for InnoDB\n\nAn InnoDB tablespace created using CREATE TABLESPACE is referred to as\na general tablespace. This is a shared tablespace, similar to the\nsystem tablespace. It can hold multiple tables, and supports all table\nrow formats. General tablespaces can be created in a location relative\nto or independent of the MySQL data directory.\n\nAfter creating an InnoDB general tablespace, you can use CREATE TABLE\ntbl_name ... TABLESPACE [=] tablespace_name or ALTER TABLE tbl_name\nTABLESPACE [=] tablespace_name to add tables to the tablespace.\n\nFor more information, see\nhttp://dev.mysql.com/doc/refman/5.7/en/general-tablespaces.html.\n\nConsiderations for NDB Cluster\n\nThis statement is used to create a tablespace, which can contain one or\nmore data files, providing storage space for NDB Cluster Disk Data\ntables (see\nhttp://dev.mysql.com/doc/refman/5.7/en/mysql-cluster-disk-data.html).\nOne data file is created and added to the tablespace using this\nstatement. Additional data files may be added to the tablespace by\nusing the ALTER TABLESPACE statement (see [HELP ALTER TABLESPACE]).\n\n*Note*:\n\nAll NDB Cluster Disk Data objects share the same namespace. This means\nthat each Disk Data object must be uniquely named (and not merely each\nDisk Data object of a given type). For example, you cannot have a\ntablespace and a log file group with the same name, or a tablespace and\na data file with the same name.\n\nA log file group of one or more UNDO log files must be assigned to the\ntablespace to be created with the USE LOGFILE GROUP clause.\nlogfile_group must be an existing log file group created with CREATE\nLOGFILE GROUP (see [HELP CREATE LOGFILE GROUP]). Multiple tablespaces\nmay use the same log file group for UNDO logging.\n\nWhen setting EXTENT_SIZE or INITIAL_SIZE, you may optionally follow the\nnumber with a one-letter abbreviation for an order of magnitude,\nsimilar to those used in my.cnf. Generally, this is one of the letters\nM (for megabytes) or G (for gigabytes).\n\nINITIAL_SIZE and EXTENT_SIZE are subject to rounding as follows:\n\no EXTENT_SIZE is rounded up to the nearest whole multiple of 32K.\n\no INITIAL_SIZE is rounded down to the nearest whole multiple of 32K;\n this result is rounded up to the nearest whole multiple of\n EXTENT_SIZE (after any rounding).\n\nThe rounding just described is done explicitly, and a warning is issued\nby the MySQL Server when any such rounding is performed. The rounded\nvalues are also used by the NDB kernel for calculating\nINFORMATION_SCHEMA.FILES column values and other purposes. However, to\navoid an unexpected result, we suggest that you always use whole\nmultiples of 32K in specifying these options.\n\nWhen CREATE TABLESPACE is used with ENGINE [=] NDB, a tablespace and\nassociated data file are created on each Cluster data node. You can\nverify that the data files were created and obtain information about\nthem by querying the INFORMATION_SCHEMA.FILES table. (See the example\nlater in this section.)\n\n(See http://dev.mysql.com/doc/refman/5.7/en/files-table.html.)\n\nOptions\n\no ADD DATAFILE: Defines the name of a tablespace data file; this option\n is always required. An InnoDB tablespace supports only a single data\n file, whose name must include a .ibd extension. An NDB Cluster\n tablespace supports multiple data files which can have any legal file\n names; more data files can be added to an NDB Cluster tablespace\n following its creation by using an ALTER TABLESPACE statement.\n\n *Note*:\n\n ALTER TABLESPACE is not supported by InnoDB.\n\n To place the data file in a location outside of the MySQL data\n directory (datadir), include an absolute directory path or a path\n relative to the MySQL data directory. If you do not specify a path,\n the tablespace is created in the MySQL data directory. An isl file is\n created in the MySQL data directory when an InnoDB tablespace is\n created outside of the MySQL data directory.\n\n To avoid conflicts with implicitly created file-per-table\n tablespaces, creating a general tablespace in a subdirectory under\n the MySQL data directory is not supported. Also, when creating a\n general tablespace outside of the MySQL data directory, the directory\n must exist prior to creating the tablespace.\n\n The file_name, including the path (optional), must be quoted with\n single or double quotations marks. File names (not counting any\n ".ibd" extension for InnoDB files) and directory names must be at\n least one byte in length. Zero length file names and directory names\n are not supported.\n\no FILE_BLOCK_SIZE: This option---which is specific to InnoDB, and is\n ignored by NDB---defines the block size for the tablespace data file.\n If you do not specify this option, FILE_BLOCK_SIZE defaults to\n innodb_page_size. FILE_BLOCK_SIZE is required when you intend to use\n the tablespace for storing compressed InnoDB tables\n (ROW_FORMAT=COMPRESSED).\n\n If FILE_BLOCK_SIZE is equal innodb_page_size, the tablespace can\n contain only tables having an uncompressed row format (COMPACT,\n REDUNDANT, or DYNAMIC). The physical page size for tables using\n COMPRESSED differs from that of uncompressed tables; this means that\n compressed tables and uncompressed tables cannot coexist in the same\n tablespace.\n\n For a general tablespace to contain compressed tables,\n FILE_BLOCK_SIZE must be specified, and the FILE_BLOCK_SIZE value must\n be a valid compressed page size in relation to the innodb_page_size\n value. Also, the physical page size of the compressed table\n (KEY_BLOCK_SIZE) must be equal to FILE_BLOCK_SIZE/1024. For example,\n if innodb_page_size=16K, and FILE_BLOCK_SIZE=8K, the KEY_BLOCK_SIZE\n of the table must be 8. For more information, see\n http://dev.mysql.com/doc/refman/5.7/en/general-tablespaces.html.\n\no USE LOGFILE GROUP: Required for NDB, this is the name of a log file\n group previously created using CREATE LOGFILE GROUP. Not supported\n for InnoDB, where it fails with an error.\n\no EXTENT_SIZE: This option is specific to NDB, and is not supported by\n InnoDB, where it fails with an error. EXTENT_SIZE sets the size, in\n bytes, of the extents used by any files belonging to the tablespace.\n The default value is 1M. The minimum size is 32K, and theoretical\n maximum is 2G, although the practical maximum size depends on a\n number of factors. In most cases, changing the extent size does not\n have any measurable effect on performance, and the default value is\n recommended for all but the most unusual situations.\n\n An extent is a unit of disk space allocation. One extent is filled\n with as much data as that extent can contain before another extent is\n used. In theory, up to 65,535 (64K) extents may used per data file;\n however, the recommended maximum is 32,768 (32K). The recommended\n maximum size for a single data file is 32G---that is, 32K extents x 1\n MB per extent. In addition, once an extent is allocated to a given\n partition, it cannot be used to store data from a different\n partition; an extent cannot store data from more than one partition.\n This means, for example that a tablespace having a single datafile\n whose INITIAL_SIZE (described in the following item) is 256 MB and\n whose EXTENT_SIZE is 128M has just two extents, and so can be used to\n store data from at most two different disk data table partitions.\n\n You can see how many extents remain free in a given data file by\n querying the INFORMATION_SCHEMA.FILES table, and so derive an\n estimate for how much space remains free in the file. For further\n discussion and examples, see\n http://dev.mysql.com/doc/refman/5.7/en/files-table.html.\n\no INITIAL_SIZE: This option is specific to NDB, and is not supported by\n InnoDB, where it fails with an error.\n\n The INITIAL_SIZE parameter sets the total size in bytes of the data\n file that was specific using ADD DATATFILE. Once this file has been\n created, its size cannot be changed; however, you can add more data\n files to the tablespace using ALTER TABLESPACE ... ADD DATAFILE.\n\n INITIAL_SIZE is optional; its default value is 134217728 (128 MB).\n\n On 32-bit systems, the maximum supported value for INITIAL_SIZE is\n 4294967296 (4 GB).\n\no AUTOEXTEND_SIZE: Currently ignored by MySQL; reserved for possible\n future use. Has no effect in any release of MySQL 5.7 or MySQL NDB\n Cluster 7.5, regardless of the storage engine used.\n\no MAX_SIZE: Currently ignored by MySQL; reserved for possible future\n use. Has no effect in any release of MySQL 5.7 or MySQL NDB Cluster\n 7.5, regardless of the storage engine used.\n\no NODEGROUP: Currently ignored by MySQL; reserved for possible future\n use. Has no effect in any release of MySQL 5.7 or MySQL NDB Cluster\n 7.5, regardless of the storage engine used.\n\no WAIT: Currently ignored by MySQL; reserved for possible future use.\n Has no effect in any release of MySQL 5.7 or MySQL NDB Cluster 7.5,\n regardless of the storage engine used.\n\no COMMENT: Currently ignored by MySQL; reserved for possible future\n use. Has no effect in any release of MySQL 5.7 or MySQL NDB Cluster\n 7.5, regardless of the storage engine used.\n\no ENGINE: Defines the storage engine which uses the tablespace, where\n engine_name is the name of the storage engine. Currently, only the\n InnoDB storage engine is supported by standard MySQL 5.7 releases.\n MySQL NDB Cluster 7.5 supports both NDB and InnoDB tablespaces. The\n value of the default_storage_engine system variable is used for\n ENGINE if the option is not specified.\n\nNotes\n\no For the rules covering the naming of MySQL tablespaces, see\n http://dev.mysql.com/doc/refman/5.7/en/identifiers.html. In addition\n to these rules, the slash character ("/") is not permitted, nor can\n you use names beginning with innodb_, as this prefix is reserved for\n system use.\n\no Tablespaces do not support temporary tables.\n\no The TABLESPACE option may be used with CREATE TABLE or ALTER TABLE to\n assign InnoDB table partitions or subpartitions to a general\n tablespace, a separate file-per-table tablespace, or the system\n tablespace. TABLESPACE option support for table partitions and\n subpartitions was added in MySQL 5.7. All partitions must belong to\n the same storage engine. For more information, see\n http://dev.mysql.com/doc/refman/5.7/en/general-tablespaces.html.\n\no innodb_file_per_table, innodb_file_format, and innodb_file_format_max\n settings have no influence on CREATE TABLESPACE operations.\n innodb_file_per_table does not need to be enabled. General\n tablespaces support all table row formats regardless of file format\n settings. Likewise, general tablespaces support the addition of\n tables of any row format using CREATE TABLE ... TABLESPACE,\n regardless of file format settings.\n\no innodb_strict_mode is not applicable to general tablespaces.\n Tablespace management rules are strictly enforced independently of\n innodb_strict_mode. If CREATE TABLESPACE parameters are incorrect or\n incompatible, the operation fails regardless of the\n innodb_strict_mode setting. When a table is added to a general\n tablespace using CREATE TABLE ... TABLESPACE or ALTER TABLE ...\n TABLESPACE, innodb_strict_mode is ignored but the statement is\n evaluated as if innodb_strict_mode is enabled.\n\no Use DROP TABLESPACE to remove a tablespace. All tables must be\n dropped from a tablespace using DROP TABLE prior to dropping the\n tablespace. Before dropping an NDB Cluster tablespace you must also\n remove all its data files using one or more ALTER TABLESPACE ... DROP\n DATATFILE statements. See\n http://dev.mysql.com/doc/refman/5.7/en/mysql-cluster-disk-data-object\n s.html.\n\no All parts of an InnoDB table added to an InnoDB general tablespace\n reside in the general tablespace, including indexes and BLOB pages.\n\n For an NDB table assigned to a tablespace, only those columns which\n are not indexed are stored on disk, and actually use the tablespace\n data files. Indexes and indexed columns for all NDB tables are always\n kept in memory.\n\no Similar to the system tablespace, truncating or dropping tables\n stored in a general tablespace creates free space internally in the\n general tablespace .ibd data file which can only be used for new\n InnoDB data. Space is not released back to the operating system as it\n is for file-per-table tablespaces.\n\no A general tablespace is not associated with any database or schema.\n\no ALTER TABLE ... DISCARD TABLESPACE and ALTER TABLE ...IMPORT\n TABLESPACE are not supported for tables that belong to a general\n tablespace.\n\no The server uses tablespace-level metadata locking for DDL that\n references general tablespaces. By comparison, the server uses\n table-level metadata locking for DDL that references file-per-table\n tablespaces.\n\no A generated or existing tablespace cannot be changed to a general\n tablespace.\n\no Tables stored in a general tablespace can only be opened in MySQL\n 5.7.6 or later due to the addition of new table flags.\n\no There is no conflict between general tablespace names and\n file-per-table tablespace names. The "/" character, which is present\n in file-per-table tablespace names, is not permitted in general\n tablespace names.\n\nInnoDB Examples\n\nThis example demonstrates creating a general tablespace and adding\nthree uncompressed tables of different row formats.\n\nmysql> CREATE TABLESPACE `ts1`\n -> ADD DATAFILE \'ts1.ibd\'\n -> ENGINE=INNODB;\nQuery OK, 0 rows affected (0.01 sec)\n\nmysql> CREATE TABLE t1 (c1 INT PRIMARY KEY)\n -> TABLESPACE ts1\n -> ROW_FORMAT=REDUNDANT;\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> CREATE TABLE t2 (c1 INT PRIMARY KEY)\n -> TABLESPACE ts1\n -> ROW_FORMAT=COMPACT;\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> CREATE TABLE t3 (c1 INT PRIMARY KEY)\n -> TABLESPACE ts1\n -> ROW_FORMAT=DYNAMIC;\nQuery OK, 0 rows affected (0.00 sec)\n\nThis example demonstrates creating a general tablespace and adding a\ncompressed table. The example assumes a default innodb_page_size of\n16K. The FILE_BLOCK_SIZE of 8192 requires that the compressed table\nhave a KEY_BLOCK_SIZE of 8.\n\nmysql> CREATE TABLESPACE `ts2`\n -> ADD DATAFILE \'ts2.ibd\'\n -> FILE_BLOCK_SIZE = 8192\n -> ENGINE=INNODB;\nQuery OK, 0 rows affected (0.01 sec)\n\nmysql> CREATE TABLE t4 (c1 INT PRIMARY KEY)\n -> TABLESPACE ts2\n -> ROW_FORMAT=COMPRESSED\n -> KEY_BLOCK_SIZE=8;\nQuery OK, 0 rows affected (0.00 sec)\n\nNDB Example\n\nSuppose that you wish to create an NDB Cluster Disk Data tablespace\nnamed myts using a datafile named mydata-1.dat. An NDB tablespace\nalways requires the use of a log file group consisting of one or more\nundo log files. For this example, we first create a log file group\nnamed mylg that contains one undo long file named myundo-1.dat, using\nthe CREATE LOGFILE GROUP statement shown here:\n\nmysql> CREATE LOGFILE GROUP myg1\n -> ADD UNDOFILE \'myundo-1.dat\'\n -> ENGINE=NDB;\nQuery OK, 0 rows affected (3.29 sec)\n\nNow you can create the tablespace previously described using the\nfollowing statement:\n\nmysql> CREATE TABLESPACE myts\n -> ADD DATAFILE \'mydata-1.dat\'\n -> USE LOGFILE GROUP mylg\n -> ENGINE=NDB;\nQuery OK, 0 rows affected (2.98 sec)\n\nYou can now create a Disk Data table using a CREATE TABLE statement\nwith the TABLESPACE and STORAGE DISK options, similar to what is shown\nhere:\n\nmysql> CREATE TABLE mytable (\n -> id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,\n -> lname VARCHAR(50) NOT NULL,\n -> fname VARCHAR(50) NOT NULL,\n -> dob DATE NOT NULL,\n -> joined DATE NOT NULL,\n -> INDEX(last_name, first_name)\n -> )\n -> TABLESPACE myts STORAGE DISK\n -> ENGINE=NDB;\nQuery OK, 0 rows affected (1.41 sec)\n\nIt is important to note that only the dob and joined columns from\nmytable are actually stored on disk, due to the fact that the id,\nlname, and fname columns are all indexed.\n\nAs mentioned previously, when CREATE TABLESPACE is used with ENGINE [=]\nNDB, a tablespace and associated data file are created on each NDB\nCluster data node. You can verify that the data files were created and\nobtain information about them by querying the INFORMATION_SCHEMA.FILES\ntable, as shown here:\n\nmysql> SELECT FILE_NAME, FILE_TYPE, LOGFILE_GROUP_NAME, STATUS, EXTRA\n -> FROM INFORMATION_SCHEMA.FILES\n -> WHERE TABLESPACE_NAME = \'myts\';\n\n+--------------+------------+--------------------+--------+----------------+\n| file_name | file_type | logfile_group_name | status | extra |\n+--------------+------------+--------------------+--------+----------------+\n| mydata-1.dat | DATAFILE | mylg | NORMAL | CLUSTER_NODE=5 |\n| mydata-1.dat | DATAFILE | mylg | NORMAL | CLUSTER_NODE=6 |\n| NULL | TABLESPACE | mylg | NORMAL | NULL |\n+--------------+------------+--------------------+--------+----------------+\n3 rows in set (0.01 sec)\n\nFor additional information and examples, see\nhttp://dev.mysql.com/doc/refman/5.7/en/mysql-cluster-disk-data-objects.\nhtml.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/create-tablespace.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/create-tablespace.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (122,40,'CREATE TABLESPACE','Syntax:\nCREATE TABLESPACE tablespace_name\n\n InnoDB and NDB:\n ADD DATAFILE \'file_name\'\n\n InnoDB only:\n [FILE_BLOCK_SIZE = value]\n\n NDB only:\n USE LOGFILE GROUP logfile_group\n [EXTENT_SIZE [=] extent_size]\n [INITIAL_SIZE [=] initial_size]\n [AUTOEXTEND_SIZE [=] autoextend_size]\n [MAX_SIZE [=] max_size]\n [NODEGROUP [=] nodegroup_id]\n [WAIT]\n [COMMENT [=] \'string\']\n\n InnoDB and NDB:\n [ENGINE [=] engine_name]\n\nThis statement is used to create a tablespace. The precise syntax and\nsemantics depend on the storage engine used. In standard MySQL 5.7\nreleases, this is always an InnoDB tablespace. MySQL NDB Cluster 7.5\nalso supports tablespaces using the NDB storage engine in addition to\nthose using InnoDB.\n\nConsiderations for InnoDB\n\nAn InnoDB tablespace created using CREATE TABLESPACE is referred to as\na general tablespace. This is a shared tablespace, similar to the\nsystem tablespace. It can hold multiple tables, and supports all table\nrow formats. General tablespaces can be created in a location relative\nto or independent of the MySQL data directory.\n\nAfter creating an InnoDB general tablespace, you can use CREATE TABLE\ntbl_name ... TABLESPACE [=] tablespace_name or ALTER TABLE tbl_name\nTABLESPACE [=] tablespace_name to add tables to the tablespace.\n\nFor more information, see\nhttp://dev.mysql.com/doc/refman/5.7/en/general-tablespaces.html.\n\nConsiderations for NDB Cluster\n\nThis statement is used to create a tablespace, which can contain one or\nmore data files, providing storage space for NDB Cluster Disk Data\ntables (see\nhttp://dev.mysql.com/doc/refman/5.7/en/mysql-cluster-disk-data.html).\nOne data file is created and added to the tablespace using this\nstatement. Additional data files may be added to the tablespace by\nusing the ALTER TABLESPACE statement (see [HELP ALTER TABLESPACE]).\n\n*Note*:\n\nAll NDB Cluster Disk Data objects share the same namespace. This means\nthat each Disk Data object must be uniquely named (and not merely each\nDisk Data object of a given type). For example, you cannot have a\ntablespace and a log file group with the same name, or a tablespace and\na data file with the same name.\n\nA log file group of one or more UNDO log files must be assigned to the\ntablespace to be created with the USE LOGFILE GROUP clause.\nlogfile_group must be an existing log file group created with CREATE\nLOGFILE GROUP (see [HELP CREATE LOGFILE GROUP]). Multiple tablespaces\nmay use the same log file group for UNDO logging.\n\nWhen setting EXTENT_SIZE or INITIAL_SIZE, you may optionally follow the\nnumber with a one-letter abbreviation for an order of magnitude,\nsimilar to those used in my.cnf. Generally, this is one of the letters\nM (for megabytes) or G (for gigabytes).\n\nINITIAL_SIZE and EXTENT_SIZE are subject to rounding as follows:\n\no EXTENT_SIZE is rounded up to the nearest whole multiple of 32K.\n\no INITIAL_SIZE is rounded down to the nearest whole multiple of 32K;\n this result is rounded up to the nearest whole multiple of\n EXTENT_SIZE (after any rounding).\n\nThe rounding just described is done explicitly, and a warning is issued\nby the MySQL Server when any such rounding is performed. The rounded\nvalues are also used by the NDB kernel for calculating\nINFORMATION_SCHEMA.FILES column values and other purposes. However, to\navoid an unexpected result, we suggest that you always use whole\nmultiples of 32K in specifying these options.\n\nWhen CREATE TABLESPACE is used with ENGINE [=] NDB, a tablespace and\nassociated data file are created on each Cluster data node. You can\nverify that the data files were created and obtain information about\nthem by querying the INFORMATION_SCHEMA.FILES table. (See the example\nlater in this section.)\n\n(See http://dev.mysql.com/doc/refman/5.7/en/files-table.html.)\n\nOptions\n\no ADD DATAFILE: Defines the name of a tablespace data file; this option\n is always required. An InnoDB tablespace supports only a single data\n file, whose name must include a .ibd extension. An NDB Cluster\n tablespace supports multiple data files which can have any legal file\n names; more data files can be added to an NDB Cluster tablespace\n following its creation by using an ALTER TABLESPACE statement.\n\n *Note*:\n\n ALTER TABLESPACE is not supported by InnoDB.\n\n To place the data file in a location outside of the MySQL data\n directory (datadir), include an absolute directory path or a path\n relative to the MySQL data directory. If you do not specify a path,\n the tablespace is created in the MySQL data directory. An isl file is\n created in the MySQL data directory when an InnoDB tablespace is\n created outside of the MySQL data directory.\n\n To avoid conflicts with implicitly created file-per-table\n tablespaces, creating a general tablespace in a subdirectory under\n the MySQL data directory is not supported. Also, when creating a\n general tablespace outside of the MySQL data directory, the directory\n must exist prior to creating the tablespace.\n\n The file_name, including the path (optional), must be quoted with\n single or double quotations marks. File names (not counting any\n ".ibd" extension for InnoDB files) and directory names must be at\n least one byte in length. Zero length file names and directory names\n are not supported.\n\no FILE_BLOCK_SIZE: This option---which is specific to InnoDB, and is\n ignored by NDB---defines the block size for the tablespace data file.\n Values can be specified in bytes or kilobytes. For example, an 8\n kilobyte file block size can be specified as 8192 or 8K. If you do\n not specify this option, FILE_BLOCK_SIZE defaults to\n innodb_page_size. FILE_BLOCK_SIZE is required when you intend to use\n the tablespace for storing compressed InnoDB tables\n (ROW_FORMAT=COMPRESSED).\n\n If FILE_BLOCK_SIZE is equal innodb_page_size, the tablespace can\n contain only tables having an uncompressed row format (COMPACT,\n REDUNDANT, or DYNAMIC). The physical page size for tables using\n COMPRESSED differs from that of uncompressed tables; this means that\n compressed tables and uncompressed tables cannot coexist in the same\n tablespace.\n\n For a general tablespace to contain compressed tables,\n FILE_BLOCK_SIZE must be specified, and the FILE_BLOCK_SIZE value must\n be a valid compressed page size in relation to the innodb_page_size\n value. Also, the physical page size of the compressed table\n (KEY_BLOCK_SIZE) must be equal to FILE_BLOCK_SIZE/1024. For example,\n if innodb_page_size=16K, and FILE_BLOCK_SIZE=8K, the KEY_BLOCK_SIZE\n of the table must be 8. For more information, see\n http://dev.mysql.com/doc/refman/5.7/en/general-tablespaces.html.\n\no USE LOGFILE GROUP: Required for NDB, this is the name of a log file\n group previously created using CREATE LOGFILE GROUP. Not supported\n for InnoDB, where it fails with an error.\n\no EXTENT_SIZE: This option is specific to NDB, and is not supported by\n InnoDB, where it fails with an error. EXTENT_SIZE sets the size, in\n bytes, of the extents used by any files belonging to the tablespace.\n The default value is 1M. The minimum size is 32K, and theoretical\n maximum is 2G, although the practical maximum size depends on a\n number of factors. In most cases, changing the extent size does not\n have any measurable effect on performance, and the default value is\n recommended for all but the most unusual situations.\n\n An extent is a unit of disk space allocation. One extent is filled\n with as much data as that extent can contain before another extent is\n used. In theory, up to 65,535 (64K) extents may used per data file;\n however, the recommended maximum is 32,768 (32K). The recommended\n maximum size for a single data file is 32G---that is, 32K extents x 1\n MB per extent. In addition, once an extent is allocated to a given\n partition, it cannot be used to store data from a different\n partition; an extent cannot store data from more than one partition.\n This means, for example that a tablespace having a single datafile\n whose INITIAL_SIZE (described in the following item) is 256 MB and\n whose EXTENT_SIZE is 128M has just two extents, and so can be used to\n store data from at most two different disk data table partitions.\n\n You can see how many extents remain free in a given data file by\n querying the INFORMATION_SCHEMA.FILES table, and so derive an\n estimate for how much space remains free in the file. For further\n discussion and examples, see\n http://dev.mysql.com/doc/refman/5.7/en/files-table.html.\n\no INITIAL_SIZE: This option is specific to NDB, and is not supported by\n InnoDB, where it fails with an error.\n\n The INITIAL_SIZE parameter sets the total size in bytes of the data\n file that was specific using ADD DATATFILE. Once this file has been\n created, its size cannot be changed; however, you can add more data\n files to the tablespace using ALTER TABLESPACE ... ADD DATAFILE.\n\n INITIAL_SIZE is optional; its default value is 134217728 (128 MB).\n\n On 32-bit systems, the maximum supported value for INITIAL_SIZE is\n 4294967296 (4 GB).\n\no AUTOEXTEND_SIZE: Currently ignored by MySQL; reserved for possible\n future use. Has no effect in any release of MySQL 5.7 or MySQL NDB\n Cluster 7.5, regardless of the storage engine used.\n\no MAX_SIZE: Currently ignored by MySQL; reserved for possible future\n use. Has no effect in any release of MySQL 5.7 or MySQL NDB Cluster\n 7.5, regardless of the storage engine used.\n\no NODEGROUP: Currently ignored by MySQL; reserved for possible future\n use. Has no effect in any release of MySQL 5.7 or MySQL NDB Cluster\n 7.5, regardless of the storage engine used.\n\no WAIT: Currently ignored by MySQL; reserved for possible future use.\n Has no effect in any release of MySQL 5.7 or MySQL NDB Cluster 7.5,\n regardless of the storage engine used.\n\no COMMENT: Currently ignored by MySQL; reserved for possible future\n use. Has no effect in any release of MySQL 5.7 or MySQL NDB Cluster\n 7.5, regardless of the storage engine used.\n\no ENGINE: Defines the storage engine which uses the tablespace, where\n engine_name is the name of the storage engine. Currently, only the\n InnoDB storage engine is supported by standard MySQL 5.7 releases.\n MySQL NDB Cluster 7.5 supports both NDB and InnoDB tablespaces. The\n value of the default_storage_engine system variable is used for\n ENGINE if the option is not specified.\n\nNotes\n\no For the rules covering the naming of MySQL tablespaces, see\n http://dev.mysql.com/doc/refman/5.7/en/identifiers.html. In addition\n to these rules, the slash character ("/") is not permitted, nor can\n you use names beginning with innodb_, as this prefix is reserved for\n system use.\n\no Tablespaces do not support temporary tables.\n\no innodb_file_per_table, innodb_file_format, and innodb_file_format_max\n settings have no influence on CREATE TABLESPACE operations.\n innodb_file_per_table does not need to be enabled. General\n tablespaces support all table row formats regardless of file format\n settings. Likewise, general tablespaces support the addition of\n tables of any row format using CREATE TABLE ... TABLESPACE,\n regardless of file format settings.\n\no innodb_strict_mode is not applicable to general tablespaces.\n Tablespace management rules are strictly enforced independently of\n innodb_strict_mode. If CREATE TABLESPACE parameters are incorrect or\n incompatible, the operation fails regardless of the\n innodb_strict_mode setting. When a table is added to a general\n tablespace using CREATE TABLE ... TABLESPACE or ALTER TABLE ...\n TABLESPACE, innodb_strict_mode is ignored but the statement is\n evaluated as if innodb_strict_mode is enabled.\n\no Use DROP TABLESPACE to remove a tablespace. All tables must be\n dropped from a tablespace using DROP TABLE prior to dropping the\n tablespace. Before dropping an NDB Cluster tablespace you must also\n remove all its data files using one or more ALTER TABLESPACE ... DROP\n DATATFILE statements. See\n http://dev.mysql.com/doc/refman/5.7/en/mysql-cluster-disk-data-object\n s.html.\n\no All parts of an InnoDB table added to an InnoDB general tablespace\n reside in the general tablespace, including indexes and BLOB pages.\n\n For an NDB table assigned to a tablespace, only those columns which\n are not indexed are stored on disk, and actually use the tablespace\n data files. Indexes and indexed columns for all NDB tables are always\n kept in memory.\n\no Similar to the system tablespace, truncating or dropping tables\n stored in a general tablespace creates free space internally in the\n general tablespace .ibd data file which can only be used for new\n InnoDB data. Space is not released back to the operating system as it\n is for file-per-table tablespaces.\n\no A general tablespace is not associated with any database or schema.\n\no ALTER TABLE ... DISCARD TABLESPACE and ALTER TABLE ...IMPORT\n TABLESPACE are not supported for tables that belong to a general\n tablespace.\n\no The server uses tablespace-level metadata locking for DDL that\n references general tablespaces. By comparison, the server uses\n table-level metadata locking for DDL that references file-per-table\n tablespaces.\n\no A generated or existing tablespace cannot be changed to a general\n tablespace.\n\no Tables stored in a general tablespace can only be opened in MySQL\n 5.7.6 or later due to the addition of new table flags.\n\no There is no conflict between general tablespace names and\n file-per-table tablespace names. The "/" character, which is present\n in file-per-table tablespace names, is not permitted in general\n tablespace names.\n\no mysqldump and mysqlpump do not dump InnoDB CREATE TABLESPACE\n statements.\n\nInnoDB Examples\n\nThis example demonstrates creating a general tablespace and adding\nthree uncompressed tables of different row formats.\n\nmysql> CREATE TABLESPACE `ts1`\n -> ADD DATAFILE \'ts1.ibd\'\n -> ENGINE=INNODB;\nQuery OK, 0 rows affected (0.01 sec)\n\nmysql> CREATE TABLE t1 (c1 INT PRIMARY KEY)\n -> TABLESPACE ts1\n -> ROW_FORMAT=REDUNDANT;\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> CREATE TABLE t2 (c1 INT PRIMARY KEY)\n -> TABLESPACE ts1\n -> ROW_FORMAT=COMPACT;\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> CREATE TABLE t3 (c1 INT PRIMARY KEY)\n -> TABLESPACE ts1\n -> ROW_FORMAT=DYNAMIC;\nQuery OK, 0 rows affected (0.00 sec)\n\nThis example demonstrates creating a general tablespace and adding a\ncompressed table. The example assumes a default innodb_page_size of\n16KB. The FILE_BLOCK_SIZE of 8192 requires that the compressed table\nhave a KEY_BLOCK_SIZE of 8.\n\nmysql> CREATE TABLESPACE `ts2`\n -> ADD DATAFILE \'ts2.ibd\'\n -> FILE_BLOCK_SIZE = 8192\n -> ENGINE=INNODB;\nQuery OK, 0 rows affected (0.01 sec)\n\nmysql> CREATE TABLE t4 (c1 INT PRIMARY KEY)\n -> TABLESPACE ts2\n -> ROW_FORMAT=COMPRESSED\n -> KEY_BLOCK_SIZE=8;\nQuery OK, 0 rows affected (0.00 sec)\n\nNDB Example\n\nSuppose that you wish to create an NDB Cluster Disk Data tablespace\nnamed myts using a datafile named mydata-1.dat. An NDB tablespace\nalways requires the use of a log file group consisting of one or more\nundo log files. For this example, we first create a log file group\nnamed mylg that contains one undo long file named myundo-1.dat, using\nthe CREATE LOGFILE GROUP statement shown here:\n\nmysql> CREATE LOGFILE GROUP myg1\n -> ADD UNDOFILE \'myundo-1.dat\'\n -> ENGINE=NDB;\nQuery OK, 0 rows affected (3.29 sec)\n\nNow you can create the tablespace previously described using the\nfollowing statement:\n\nmysql> CREATE TABLESPACE myts\n -> ADD DATAFILE \'mydata-1.dat\'\n -> USE LOGFILE GROUP mylg\n -> ENGINE=NDB;\nQuery OK, 0 rows affected (2.98 sec)\n\nYou can now create a Disk Data table using a CREATE TABLE statement\nwith the TABLESPACE and STORAGE DISK options, similar to what is shown\nhere:\n\nmysql> CREATE TABLE mytable (\n -> id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,\n -> lname VARCHAR(50) NOT NULL,\n -> fname VARCHAR(50) NOT NULL,\n -> dob DATE NOT NULL,\n -> joined DATE NOT NULL,\n -> INDEX(last_name, first_name)\n -> )\n -> TABLESPACE myts STORAGE DISK\n -> ENGINE=NDB;\nQuery OK, 0 rows affected (1.41 sec)\n\nIt is important to note that only the dob and joined columns from\nmytable are actually stored on disk, due to the fact that the id,\nlname, and fname columns are all indexed.\n\nAs mentioned previously, when CREATE TABLESPACE is used with ENGINE [=]\nNDB, a tablespace and associated data file are created on each NDB\nCluster data node. You can verify that the data files were created and\nobtain information about them by querying the INFORMATION_SCHEMA.FILES\ntable, as shown here:\n\nmysql> SELECT FILE_NAME, FILE_TYPE, LOGFILE_GROUP_NAME, STATUS, EXTRA\n -> FROM INFORMATION_SCHEMA.FILES\n -> WHERE TABLESPACE_NAME = \'myts\';\n\n+--------------+------------+--------------------+--------+----------------+\n| file_name | file_type | logfile_group_name | status | extra |\n+--------------+------------+--------------------+--------+----------------+\n| mydata-1.dat | DATAFILE | mylg | NORMAL | CLUSTER_NODE=5 |\n| mydata-1.dat | DATAFILE | mylg | NORMAL | CLUSTER_NODE=6 |\n| NULL | TABLESPACE | mylg | NORMAL | NULL |\n+--------------+------------+--------------------+--------+----------------+\n3 rows in set (0.01 sec)\n\nFor additional information and examples, see\nhttp://dev.mysql.com/doc/refman/5.7/en/mysql-cluster-disk-data-objects.\nhtml.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/create-tablespace.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/create-tablespace.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (123,4,'ST_GEOMFROMTEXT','ST_GeomFromText(wkt[, srid]), ST_GeometryFromText(wkt[, srid])\n\nConstructs a geometry value of any type using its WKT representation\nand SRID.\n\nIf the geometry argument is NULL or not a syntactically well-formed\ngeometry, or if the SRID argument is NULL, the return value is NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (124,38,'INSERT FUNCTION','Syntax:\nINSERT(str,pos,len,newstr)\n\nReturns the string str, with the substring beginning at position pos\nand len characters long replaced by the string newstr. Returns the\noriginal string if pos is not within the length of the string. Replaces\nthe rest of the string from position pos if len is not within the\nlength of the rest of the string. Returns NULL if any argument is NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/string-functions.html\n\n','mysql> SELECT INSERT(\'Quadratic\', 3, 4, \'What\');\n -> \'QuWhattic\'\nmysql> SELECT INSERT(\'Quadratic\', -1, 4, \'What\');\n -> \'Quadratic\'\nmysql> SELECT INSERT(\'Quadratic\', 3, 100, \'What\');\n -> \'QuWhat\'\n','http://dev.mysql.com/doc/refman/5.7/en/string-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (125,15,'XOR','Syntax:\nXOR\n\nLogical XOR. Returns NULL if either operand is NULL. For non-NULL\noperands, evaluates to 1 if an odd number of operands is nonzero,\notherwise 0 is returned.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/logical-operators.html\n\n','mysql> SELECT 1 XOR 1;\n -> 0\nmysql> SELECT 1 XOR 0;\n -> 1\nmysql> SELECT 1 XOR NULL;\n -> NULL\nmysql> SELECT 1 XOR 1 XOR 1;\n -> 1\n','http://dev.mysql.com/doc/refman/5.7/en/logical-operators.html'); @@ -209,7 +209,7 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example, INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (128,20,'IS NOT','Syntax:\nIS NOT boolean_value\n\nTests a value against a boolean value, where boolean_value can be TRUE,\nFALSE, or UNKNOWN.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html\n\n','mysql> SELECT 1 IS NOT UNKNOWN, 0 IS NOT UNKNOWN, NULL IS NOT UNKNOWN;\n -> 1, 1, 0\n','http://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (129,3,'SQRT','Syntax:\nSQRT(X)\n\nReturns the square root of a nonnegative number X.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html\n\n','mysql> SELECT SQRT(4);\n -> 2\nmysql> SELECT SQRT(20);\n -> 4.4721359549996\nmysql> SELECT SQRT(-16);\n -> NULL\n','http://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (130,33,'ST_MPOLYFROMWKB','ST_MPolyFromWKB(wkb[, srid]), ST_MultiPolygonFromWKB(wkb[, srid])\n\nConstructs a MultiPolygon value using its WKB representation and SRID.\n\nThe result is NULL if the WKB or SRID argument is NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/gis-wkb-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/gis-wkb-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (131,40,'CREATE INDEX','Syntax:\nCREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name\n [index_type]\n ON tbl_name (index_col_name,...)\n [index_option]\n [algorithm_option | lock_option] ...\n\nindex_col_name:\n col_name [(length)] [ASC | DESC]\n\nindex_option:\n KEY_BLOCK_SIZE [=] value\n | index_type\n | WITH PARSER parser_name\n | COMMENT \'string\'\n\nindex_type:\n USING {BTREE | HASH}\n\nalgorithm_option:\n ALGORITHM [=] {DEFAULT|INPLACE|COPY}\n\nlock_option:\n LOCK [=] {DEFAULT|NONE|SHARED|EXCLUSIVE}\n\nCREATE INDEX is mapped to an ALTER TABLE statement to create indexes.\nSee [HELP ALTER TABLE]. CREATE INDEX cannot be used to create a PRIMARY\nKEY; use ALTER TABLE instead. For more information about indexes, see\nhttp://dev.mysql.com/doc/refman/5.7/en/mysql-indexes.html.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/create-index.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/create-index.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (131,40,'CREATE INDEX','Syntax:\nCREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX index_name\n [index_type]\n ON tbl_name (key_part,...)\n [index_option]\n [algorithm_option | lock_option] ...\n\nkey_part:\n col_name [(length)] [ASC | DESC]\n\nindex_option:\n KEY_BLOCK_SIZE [=] value\n | index_type\n | WITH PARSER parser_name\n | COMMENT \'string\'\n\nindex_type:\n USING {BTREE | HASH}\n\nalgorithm_option:\n ALGORITHM [=] {DEFAULT | INPLACE | COPY}\n\nlock_option:\n LOCK [=] {DEFAULT | NONE | SHARED | EXCLUSIVE}\n\nNormally, you create all indexes on a table at the time the table\nitself is created with CREATE TABLE. See [HELP CREATE TABLE]. This\nguideline is especially important for InnoDB tables, where the primary\nkey determines the physical layout of rows in the data file. CREATE\nINDEX enables you to add indexes to existing tables.\n\nCREATE INDEX is mapped to an ALTER TABLE statement to create indexes.\nSee [HELP ALTER TABLE]. CREATE INDEX cannot be used to create a PRIMARY\nKEY; use ALTER TABLE instead. For more information about indexes, see\nhttp://dev.mysql.com/doc/refman/5.7/en/mysql-indexes.html.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/create-index.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/create-index.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (132,40,'ALTER DATABASE','Syntax:\nALTER {DATABASE | SCHEMA} [db_name]\n alter_specification ...\nALTER {DATABASE | SCHEMA} db_name\n UPGRADE DATA DIRECTORY NAME\n\nalter_specification:\n [DEFAULT] CHARACTER SET [=] charset_name\n | [DEFAULT] COLLATE [=] collation_name\n\nALTER DATABASE enables you to change the overall characteristics of a\ndatabase. These characteristics are stored in the db.opt file in the\ndatabase directory. To use ALTER DATABASE, you need the ALTER privilege\non the database. ALTER SCHEMA is a synonym for ALTER DATABASE.\n\nThe database name can be omitted from the first syntax, in which case\nthe statement applies to the default database.\n\nNational Language Characteristics\n\nThe CHARACTER SET clause changes the default database character set.\nThe COLLATE clause changes the default database collation.\nhttp://dev.mysql.com/doc/refman/5.7/en/charset.html, discusses\ncharacter set and collation names.\n\nYou can see what character sets and collations are available using,\nrespectively, the SHOW CHARACTER SET and SHOW COLLATION statements. See\n[HELP SHOW CHARACTER SET], and [HELP SHOW COLLATION], for more\ninformation.\n\nIf you change the default character set or collation for a database,\nstored routines that use the database defaults must be dropped and\nrecreated so that they use the new defaults. (In a stored routine,\nvariables with character data types use the database defaults if the\ncharacter set or collation are not specified explicitly. See [HELP\nCREATE PROCEDURE].)\n\nUpgrading from Versions Older than MySQL 5.1\n\nThe syntax that includes the UPGRADE DATA DIRECTORY NAME clause updates\nthe name of the directory associated with the database to use the\nencoding implemented in MySQL 5.1 for mapping database names to\ndatabase directory names (see\nhttp://dev.mysql.com/doc/refman/5.7/en/identifier-mapping.html). This\nclause is for use under these conditions:\n\no It is intended when upgrading MySQL to 5.1 or later from older\n versions.\n\no It is intended to update a database directory name to the current\n encoding format if the name contains special characters that need\n encoding.\n\no The statement is used by mysqlcheck (as invoked by mysql_upgrade).\n\nFor example, if a database in MySQL 5.0 has the name a-b-c, the name\ncontains instances of the - (dash) character. In MySQL 5.0, the\ndatabase directory is also named a-b-c, which is not necessarily safe\nfor all file systems. In MySQL 5.1 and later, the same database name is\nencoded as a@002db@002dc to produce a file system-neutral directory\nname.\n\nWhen a MySQL installation is upgraded to MySQL 5.1 or later from an\nolder version,the server displays a name such as a-b-c (which is in the\nold format) as #mysql50#a-b-c, and you must refer to the name using the\n#mysql50# prefix. Use UPGRADE DATA DIRECTORY NAME in this case to\nexplicitly tell the server to re-encode the database directory name to\nthe current encoding format:\n\nALTER DATABASE `#mysql50#a-b-c` UPGRADE DATA DIRECTORY NAME;\n\nAfter executing this statement, you can refer to the database as a-b-c\nwithout the special #mysql50# prefix.\n\n*Note*:\n\nThe UPGRADE DATA DIRECTORY NAME clause is deprecated in MySQL 5.7.6 and\nwill be removed in a future version of MySQL. If it is necessary to\nconvert MySQL 5.0 database or table names, a workaround is to upgrade a\nMySQL 5.0 installation to MySQL 5.1 before upgrading to a more recent\nrelease.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/alter-database.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/alter-database.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (133,7,'JSON_ARRAY','Syntax:\nJSON_ARRAY([val[, val] ...])\n\nEvaluates a (possibly empty) list of values and returns a JSON array\ncontaining those values.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/json-creation-functions.html\n\n','mysql> SELECT JSON_ARRAY(1, "abc", NULL, TRUE, CURTIME());\n+---------------------------------------------+\n| JSON_ARRAY(1, "abc", NULL, TRUE, CURTIME()) |\n+---------------------------------------------+\n| [1, "abc", null, true, "11:30:24.000000"] |\n+---------------------------------------------+\n','http://dev.mysql.com/doc/refman/5.7/en/json-creation-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (134,26,'GEOMETRYN','GeometryN(gc, N)\n\nST_GeometryN() and GeometryN() are synonyms. For more information, see\nthe description of ST_GeometryN().\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/gis-geometrycollection-property-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/gis-geometrycollection-property-functions.html'); @@ -235,7 +235,7 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example, INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (154,32,'CURRENT_TIME','Syntax:\nCURRENT_TIME, CURRENT_TIME([fsp])\n\nCURRENT_TIME and CURRENT_TIME() are synonyms for CURTIME().\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (155,4,'WKT DEFINITION','The Well-Known Text (WKT) representation of geometry values is designed\nfor exchanging geometry data in ASCII form. The OpenGIS specification\nprovides a Backus-Naur grammar that specifies the formal production\nrules for writing WKT values (see\nhttp://dev.mysql.com/doc/refman/5.7/en/spatial-types.html).\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/gis-data-formats.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/gis-data-formats.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (156,11,'ST_Y','ST_Y(p)\n\nReturns the Y-coordinate value for the Point object p as a\ndouble-precision number.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/gis-point-property-functions.html\n\n','mysql> SELECT ST_Y(Point(56.7, 53.34));\n+--------------------------+\n| ST_Y(Point(56.7, 53.34)) |\n+--------------------------+\n| 53.34 |\n+--------------------------+\n','http://dev.mysql.com/doc/refman/5.7/en/gis-point-property-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (157,10,'REVOKE','Syntax:\nREVOKE\n priv_type [(column_list)]\n [, priv_type [(column_list)]] ...\n ON [object_type] priv_level\n FROM user [, user] ...\n\nREVOKE ALL [PRIVILEGES], GRANT OPTION\n FROM user [, user] ...\n\nREVOKE PROXY ON user\n FROM user [, user] ...\n\nThe REVOKE statement enables system administrators to revoke privileges\nfrom MySQL accounts.\n\nWhen the read_only system variable is enabled, REVOKE requires the\nSUPER privilege in addition to any other required privileges described\nin the following discussion.\n\nEach account name uses the format described in\nhttp://dev.mysql.com/doc/refman/5.7/en/account-names.html. For example:\n\nREVOKE INSERT ON *.* FROM \'jeffrey\'@\'localhost\';\n\nThe host name part of the account name, if omitted, defaults to \'%\'.\n\nFor details on the levels at which privileges exist, the permissible\npriv_type, priv_level, and object_type values, and the syntax for\nspecifying users and passwords, see [HELP GRANT]\n\nTo use the first REVOKE syntax, you must have the GRANT OPTION\nprivilege, and you must have the privileges that you are revoking.\n\nTo revoke all privileges, use the second syntax, which drops all\nglobal, database, table, column, and routine privileges for the named\nuser or users:\n\nREVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user] ...\n\nTo use this REVOKE syntax, you must have the global CREATE USER\nprivilege, or the UPDATE privilege for the mysql database.\n\nUser accounts from which privileges are to be revoked must exist.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/revoke.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/revoke.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (157,10,'REVOKE','Syntax:\nREVOKE\n priv_type [(column_list)]\n [, priv_type [(column_list)]] ...\n ON [object_type] priv_level\n FROM user [, user] ...\n\nREVOKE ALL [PRIVILEGES], GRANT OPTION\n FROM user [, user] ...\n\nREVOKE PROXY ON user\n FROM user [, user] ...\n\nThe REVOKE statement enables system administrators to revoke privileges\nfrom MySQL accounts.\n\nWhen the read_only system variable is enabled, REVOKE requires the\nSUPER privilege in addition to any other required privileges described\nin the following discussion.\n\nEach account name uses the format described in\nhttp://dev.mysql.com/doc/refman/5.7/en/account-names.html. For example:\n\nREVOKE INSERT ON *.* FROM \'jeffrey\'@\'localhost\';\n\nThe host name part of the account name, if omitted, defaults to \'%\'.\n\nFor details on the levels at which privileges exist, the permissible\npriv_type, priv_level, and object_type values, and the syntax for\nspecifying users and passwords, see [HELP GRANT].\n\nTo use the first REVOKE syntax, you must have the GRANT OPTION\nprivilege, and you must have the privileges that you are revoking.\n\nTo revoke all privileges, use the second syntax, which drops all\nglobal, database, table, column, and routine privileges for the named\nuser or users:\n\nREVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user] ...\n\nTo use this REVOKE syntax, you must have the global CREATE USER\nprivilege, or the UPDATE privilege for the mysql system database.\n\nUser accounts from which privileges are to be revoked must exist.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/revoke.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/revoke.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (158,32,'LAST_DAY','Syntax:\nLAST_DAY(date)\n\nTakes a date or datetime value and returns the corresponding value for\nthe last day of the month. Returns NULL if the argument is invalid.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html\n\n','mysql> SELECT LAST_DAY(\'2003-02-05\');\n -> \'2003-02-28\'\nmysql> SELECT LAST_DAY(\'2004-02-05\');\n -> \'2004-02-29\'\nmysql> SELECT LAST_DAY(\'2004-01-01 01:01:01\');\n -> \'2004-01-31\'\nmysql> SELECT LAST_DAY(\'2003-03-32\');\n -> NULL\n','http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (159,23,'MEDIUMINT','MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]\n\nA medium-sized integer. The signed range is -8388608 to 8388607. The\nunsigned range is 0 to 16777215.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/numeric-type-overview.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/numeric-type-overview.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (160,12,'RANDOM_BYTES','Syntax:\nRANDOM_BYTES(len)\n\nThis function returns a binary string of len random bytes generated\nusing the random number generator of the SSL library. Permitted values\nof len range from 1 to 1024. For values outside that range,\nRANDOM_BYTES() generates a warning and returns NULL.\n\nRANDOM_BYTES() can be used to provide the initialization vector for the\nAES_DECRYPT() and AES_ENCRYPT() functions. For use in that context, len\nmust be at least 16. Larger values are permitted, but bytes in excess\nof 16 are ignored.\n\nRANDOM_BYTES() generates a random value, which makes its result\nnondeterministic. Consequently, statements that use this function are\nunsafe for statement-based replication and cannot be stored in the\nquery cache.\n\nThis function is available as of MySQL 5.7.4.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html'); @@ -265,17 +265,17 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example, INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (184,13,'POINTN','PointN(ls, N)\n\nST_PointN() and PointN() are synonyms. For more information, see the\ndescription of ST_PointN().\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/gis-linestring-property-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/gis-linestring-property-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (185,38,'OCT','Syntax:\nOCT(N)\n\nReturns a string representation of the octal value of N, where N is a\nlonglong (BIGINT) number. This is equivalent to CONV(N,10,8). Returns\nNULL if N is NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/string-functions.html\n\n','mysql> SELECT OCT(12);\n -> \'14\'\n','http://dev.mysql.com/doc/refman/5.7/en/string-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (186,32,'SYSDATE','Syntax:\nSYSDATE([fsp])\n\nReturns the current date and time as a value in \'YYYY-MM-DD HH:MM:SS\'\nor YYYYMMDDHHMMSS format, depending on whether the function is used in\na string or numeric context.\n\nIf the fsp argument is given to specify a fractional seconds precision\nfrom 0 to 6, the return value includes a fractional seconds part of\nthat many digits.\n\nSYSDATE() returns the time at which it executes. This differs from the\nbehavior for NOW(), which returns a constant time that indicates the\ntime at which the statement began to execute. (Within a stored function\nor trigger, NOW() returns the time at which the function or triggering\nstatement began to execute.)\n\nmysql> SELECT NOW(), SLEEP(2), NOW();\n+---------------------+----------+---------------------+\n| NOW() | SLEEP(2) | NOW() |\n+---------------------+----------+---------------------+\n| 2006-04-12 13:47:36 | 0 | 2006-04-12 13:47:36 |\n+---------------------+----------+---------------------+\n\nmysql> SELECT SYSDATE(), SLEEP(2), SYSDATE();\n+---------------------+----------+---------------------+\n| SYSDATE() | SLEEP(2) | SYSDATE() |\n+---------------------+----------+---------------------+\n| 2006-04-12 13:47:44 | 0 | 2006-04-12 13:47:46 |\n+---------------------+----------+---------------------+\n\nIn addition, the SET TIMESTAMP statement affects the value returned by\nNOW() but not by SYSDATE(). This means that timestamp settings in the\nbinary log have no effect on invocations of SYSDATE().\n\nBecause SYSDATE() can return different values even within the same\nstatement, and is not affected by SET TIMESTAMP, it is nondeterministic\nand therefore unsafe for replication if statement-based binary logging\nis used. If that is a problem, you can use row-based logging.\n\nAlternatively, you can use the --sysdate-is-now option to cause\nSYSDATE() to be an alias for NOW(). This works if the option is used on\nboth the master and the slave.\n\nThe nondeterministic nature of SYSDATE() also means that indexes cannot\nbe used for evaluating expressions that refer to it.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (187,5,'UNINSTALL PLUGIN','Syntax:\nUNINSTALL PLUGIN plugin_name\n\nThis statement removes an installed server plugin. It requires the\nDELETE privilege for the mysql.plugin system table. UNINSTALL PLUGIN is\nthe complement of INSTALL PLUGIN.\n\nplugin_name must be the name of some plugin that is listed in the\nmysql.plugin table. The server executes the plugin\'s deinitialization\nfunction and removes the row for the plugin from the mysql.plugin\ntable, so that subsequent server restarts will not load and initialize\nthe plugin. UNINSTALL PLUGIN does not remove the plugin\'s shared\nlibrary file.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/uninstall-plugin.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/uninstall-plugin.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (187,5,'UNINSTALL PLUGIN','Syntax:\nUNINSTALL PLUGIN plugin_name\n\nThis statement removes an installed server plugin. It requires the\nDELETE privilege for the mysql.plugin system table. UNINSTALL PLUGIN is\nthe complement of INSTALL PLUGIN.\n\nplugin_name must be the name of some plugin that is listed in the\nmysql.plugin table. The server executes the plugin\'s deinitialization\nfunction and removes the row for the plugin from the mysql.plugin\nsystem table, so that subsequent server restarts will not load and\ninitialize the plugin. UNINSTALL PLUGIN does not remove the plugin\'s\nshared library file.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/uninstall-plugin.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/uninstall-plugin.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (188,33,'ASBINARY','AsBinary(g), AsWKB(g)\n\nST_AsBinary(), ST_AsWKB(), AsBinary(), and AsWKB() are synonyms. For\nmore information, see the description of ST_AsBinary().\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/gis-format-conversion-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/gis-format-conversion-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (189,33,'ST_MLINEFROMWKB','ST_MLineFromWKB(wkb[, srid]), ST_MultiLineStringFromWKB(wkb[, srid])\n\nConstructs a MultiLineString value using its WKB representation and\nSRID.\n\nThe result is NULL if the WKB or SRID argument is NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/gis-wkb-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/gis-wkb-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (190,27,'SHOW TABLES','Syntax:\nSHOW [FULL] TABLES\n [{FROM | IN} db_name]\n [LIKE \'pattern\' | WHERE expr]\n\nSHOW TABLES lists the non-TEMPORARY tables in a given database. You can\nalso get this list using the mysqlshow db_name command. The LIKE\nclause, if present, indicates which table names to match. The WHERE\nclause can be given to select rows using more general conditions, as\ndiscussed in http://dev.mysql.com/doc/refman/5.7/en/extended-show.html.\n\nMatching performed by the LIKE clause is dependent on the setting of\nthe lower_case_table_names system variable.\n\nThis statement also lists any views in the database. The optional FULL\nmodifier causes SHOW TABLES to display a second output column with\nvalues of BASE TABLE for a table and VIEW for a view.\n\nIf you have no privileges for a base table or view, it does not show up\nin the output from SHOW TABLES or mysqlshow db_name.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/show-tables.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/show-tables.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (190,27,'SHOW TABLES','Syntax:\nSHOW [FULL] TABLES\n [{FROM | IN} db_name]\n [LIKE \'pattern\' | WHERE expr]\n\nSHOW TABLES lists the non-TEMPORARY tables in a given database. You can\nalso get this list using the mysqlshow db_name command. The LIKE\nclause, if present, indicates which table names to match. The WHERE\nclause can be given to select rows using more general conditions, as\ndiscussed in http://dev.mysql.com/doc/refman/5.7/en/extended-show.html.\n\nMatching performed by the LIKE clause is dependent on the setting of\nthe lower_case_table_names system variable.\n\nThis statement also lists any views in the database. The optional FULL\nmodifier causes SHOW TABLES to display a second output column with\nvalues of BASE TABLE for a table, VIEW for a view, or SYSTEM VIEW for\nan INFORMATION_SCHEMA table.\n\nIf you have no privileges for a base table or view, it does not show up\nin the output from SHOW TABLES or mysqlshow db_name.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/show-tables.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/show-tables.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (191,32,'MAKEDATE','Syntax:\nMAKEDATE(year,dayofyear)\n\nReturns a date, given year and day-of-year values. dayofyear must be\ngreater than 0 or the result is NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html\n\n','mysql> SELECT MAKEDATE(2011,31), MAKEDATE(2011,32);\n -> \'2011-01-31\', \'2011-02-01\'\nmysql> SELECT MAKEDATE(2011,365), MAKEDATE(2014,365);\n -> \'2011-12-31\', \'2014-12-31\'\nmysql> SELECT MAKEDATE(2011,0);\n -> NULL\n','http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (192,38,'BINARY OPERATOR','Syntax:\nBINARY expr\n\nThe BINARY operator converts the expression to a binary string. A\ncommon use for BINARY is to force a character string comparison to be\ndone byte by byte rather than character by character, in effect\nbecoming case-sensitive. The BINARY operator also causes trailing\nspaces in comparisons to be significant.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/cast-functions.html\n\n','mysql> SELECT \'a\' = \'A\';\n -> 1\nmysql> SELECT BINARY \'a\' = \'A\';\n -> 0\nmysql> SELECT \'a\' = \'a \';\n -> 1\nmysql> SELECT BINARY \'a\' = \'a \';\n -> 0\n','http://dev.mysql.com/doc/refman/5.7/en/cast-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (193,7,'MBROVERLAPS','MBROverlaps(g1, g2)\n\nTwo geometries spatially overlap if they intersect and their\nintersection results in a geometry of the same dimension but not equal\nto either of the given geometries.\n\nThis function returns 1 or 0 to indicate whether the minimum bounding\nrectangles of the two geometries g1 and g2 overlap.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-mbr.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-mbr.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (194,33,'ST_LINEFROMWKB','ST_LineFromWKB(wkb[, srid]), ST_LineStringFromWKB(wkb[, srid])\n\nConstructs a LineString value using its WKB representation and SRID.\n\nThe result is NULL if the WKB or SRID argument is NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/gis-wkb-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/gis-wkb-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (195,7,'ASYMMETRIC_DERIVE','Syntax:\nASYMMETRIC_DERIVE(pub_key_str, priv_key_str)\n\nDerives a symmetric key using the private key of one party and the\npublic key of another, and returns the resulting key as a binary\nstring. If key derivation fails, the result is NULL.\n\npub_key_str and priv_key_str must be valid key strings in PEM format.\nThey must be created using the DH algorithm.\n\nSuppose that you have two pairs of public and private keys:\n\nSET @dhp = CREATE_DH_PARAMETERS(1024);\nSET @priv1 = CREATE_ASYMMETRIC_PRIV_KEY(\'DH\', @dhp);\nSET @pub1 = CREATE_ASYMMETRIC_PUB_KEY(\'DH\', @priv1);\nSET @priv2 = CREATE_ASYMMETRIC_PRIV_KEY(\'DH\', @dhp);\nSET @pub2 = CREATE_ASYMMETRIC_PUB_KEY(\'DH\', @priv2);\n\nSuppose further that you use the private key from one pair and the\npublic key from the other pair to create a symmetric key string. Then\nthis symmetric key identity relationship holds:\n\nASYMMETRIC_DERIVE(@pub1, @priv2) = ASYMMETRIC_DERIVE(@pub2, @priv1)\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/enterprise-encryption-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/enterprise-encryption-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (196,28,'INSERT SELECT','Syntax:\nINSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]\n [INTO] tbl_name\n [PARTITION (partition_name [, partition_name] ...)]\n [(col_name [, col_name] ...)]\n SELECT ...\n [ON DUPLICATE KEY UPDATE assignment_list]\n\nvalue:\n {expr | DEFAULT}\n\nassignment:\n col_name = value\n\nassignment_list:\n assignment [, assignment] ...\n\nWith INSERT ... SELECT, you can quickly insert many rows into a table\nfrom the result of a SELECT statement, which can select from one or\nmany tables. For example:\n\nINSERT INTO tbl_temp2 (fld_id)\n SELECT tbl_temp1.fld_order_id\n FROM tbl_temp1 WHERE tbl_temp1.fld_order_id > 100;\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/insert-select.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/insert-select.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (197,40,'CREATE PROCEDURE','Syntax:\nCREATE\n [DEFINER = { user | CURRENT_USER }]\n PROCEDURE sp_name ([proc_parameter[,...]])\n [characteristic ...] routine_body\n\nCREATE\n [DEFINER = { user | CURRENT_USER }]\n FUNCTION sp_name ([func_parameter[,...]])\n RETURNS type\n [characteristic ...] routine_body\n\nproc_parameter:\n [ IN | OUT | INOUT ] param_name type\n\nfunc_parameter:\n param_name type\n\ntype:\n Any valid MySQL data type\n\ncharacteristic:\n COMMENT \'string\'\n | LANGUAGE SQL\n | [NOT] DETERMINISTIC\n | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }\n | SQL SECURITY { DEFINER | INVOKER }\n\nroutine_body:\n Valid SQL routine statement\n\nThese statements create stored routines. By default, a routine is\nassociated with the default database. To associate the routine\nexplicitly with a given database, specify the name as db_name.sp_name\nwhen you create it.\n\nThe CREATE FUNCTION statement is also used in MySQL to support UDFs\n(user-defined functions). See\nhttp://dev.mysql.com/doc/refman/5.7/en/adding-functions.html. A UDF can\nbe regarded as an external stored function. Stored functions share\ntheir namespace with UDFs. See\nhttp://dev.mysql.com/doc/refman/5.7/en/function-resolution.html, for\nthe rules describing how the server interprets references to different\nkinds of functions.\n\nTo invoke a stored procedure, use the CALL statement (see [HELP CALL]).\nTo invoke a stored function, refer to it in an expression. The function\nreturns a value during expression evaluation.\n\nCREATE PROCEDURE and CREATE FUNCTION require the CREATE ROUTINE\nprivilege. They might also require the SUPER privilege, depending on\nthe DEFINER value, as described later in this section. If binary\nlogging is enabled, CREATE FUNCTION might require the SUPER privilege,\nas described in\nhttp://dev.mysql.com/doc/refman/5.7/en/stored-programs-logging.html.\n\nBy default, MySQL automatically grants the ALTER ROUTINE and EXECUTE\nprivileges to the routine creator. This behavior can be changed by\ndisabling the automatic_sp_privileges system variable. See\nhttp://dev.mysql.com/doc/refman/5.7/en/stored-routines-privileges.html.\n\nThe DEFINER and SQL SECURITY clauses specify the security context to be\nused when checking access privileges at routine execution time, as\ndescribed later in this section.\n\nIf the routine name is the same as the name of a built-in SQL function,\na syntax error occurs unless you use a space between the name and the\nfollowing parenthesis when defining the routine or invoking it later.\nFor this reason, avoid using the names of existing SQL functions for\nyour own stored routines.\n\nThe IGNORE_SPACE SQL mode applies to built-in functions, not to stored\nroutines. It is always permissible to have spaces after a stored\nroutine name, regardless of whether IGNORE_SPACE is enabled.\n\nThe parameter list enclosed within parentheses must always be present.\nIf there are no parameters, an empty parameter list of () should be\nused. Parameter names are not case sensitive.\n\nEach parameter is an IN parameter by default. To specify otherwise for\na parameter, use the keyword OUT or INOUT before the parameter name.\n\n*Note*:\n\nSpecifying a parameter as IN, OUT, or INOUT is valid only for a\nPROCEDURE. For a FUNCTION, parameters are always regarded as IN\nparameters.\n\nAn IN parameter passes a value into a procedure. The procedure might\nmodify the value, but the modification is not visible to the caller\nwhen the procedure returns. An OUT parameter passes a value from the\nprocedure back to the caller. Its initial value is NULL within the\nprocedure, and its value is visible to the caller when the procedure\nreturns. An INOUT parameter is initialized by the caller, can be\nmodified by the procedure, and any change made by the procedure is\nvisible to the caller when the procedure returns.\n\nFor each OUT or INOUT parameter, pass a user-defined variable in the\nCALL statement that invokes the procedure so that you can obtain its\nvalue when the procedure returns. If you are calling the procedure from\nwithin another stored procedure or function, you can also pass a\nroutine parameter or local routine variable as an IN or INOUT\nparameter.\n\nRoutine parameters cannot be referenced in statements prepared within\nthe routine; see\nhttp://dev.mysql.com/doc/refman/5.7/en/stored-program-restrictions.html\n.\n\nThe following example shows a simple stored procedure that uses an OUT\nparameter:\n\nmysql> delimiter //\n\nmysql> CREATE PROCEDURE simpleproc (OUT param1 INT)\n -> BEGIN\n -> SELECT COUNT(*) INTO param1 FROM t;\n -> END//\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> delimiter ;\n\nmysql> CALL simpleproc(@a);\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> SELECT @a;\n+------+\n| @a |\n+------+\n| 3 |\n+------+\n1 row in set (0.00 sec)\n\nThe example uses the mysql client delimiter command to change the\nstatement delimiter from ; to // while the procedure is being defined.\nThis enables the ; delimiter used in the procedure body to be passed\nthrough to the server rather than being interpreted by mysql itself.\nSee\nhttp://dev.mysql.com/doc/refman/5.7/en/stored-programs-defining.html.\n\nThe RETURNS clause may be specified only for a FUNCTION, for which it\nis mandatory. It indicates the return type of the function, and the\nfunction body must contain a RETURN value statement. If the RETURN\nstatement returns a value of a different type, the value is coerced to\nthe proper type. For example, if a function specifies an ENUM or SET\nvalue in the RETURNS clause, but the RETURN statement returns an\ninteger, the value returned from the function is the string for the\ncorresponding ENUM member of set of SET members.\n\nThe following example function takes a parameter, performs an operation\nusing an SQL function, and returns the result. In this case, it is\nunnecessary to use delimiter because the function definition contains\nno internal ; statement delimiters:\n\nmysql> CREATE FUNCTION hello (s CHAR(20))\nmysql> RETURNS CHAR(50) DETERMINISTIC\n -> RETURN CONCAT(\'Hello, \',s,\'!\');\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> SELECT hello(\'world\');\n+----------------+\n| hello(\'world\') |\n+----------------+\n| Hello, world! |\n+----------------+\n1 row in set (0.00 sec)\n\nParameter types and function return types can be declared to use any\nvalid data type. The COLLATE attribute can be used if preceded by the\nCHARACTER SET attribute.\n\nThe routine_body consists of a valid SQL routine statement. This can be\na simple statement such as SELECT or INSERT, or a compound statement\nwritten using BEGIN and END. Compound statements can contain\ndeclarations, loops, and other control structure statements. The syntax\nfor these statements is described in\nhttp://dev.mysql.com/doc/refman/5.7/en/sql-syntax-compound-statements.h\ntml.\n\nMySQL permits routines to contain DDL statements, such as CREATE and\nDROP. MySQL also permits stored procedures (but not stored functions)\nto contain SQL transaction statements such as COMMIT. Stored functions\nmay not contain statements that perform explicit or implicit commit or\nrollback. Support for these statements is not required by the SQL\nstandard, which states that each DBMS vendor may decide whether to\npermit them.\n\nStatements that return a result set can be used within a stored\nprocedure but not within a stored function. This prohibition includes\nSELECT statements that do not have an INTO var_list clause and other\nstatements such as SHOW, EXPLAIN, and CHECK TABLE. For statements that\ncan be determined at function definition time to return a result set, a\nNot allowed to return a result set from a function error occurs\n(ER_SP_NO_RETSET). For statements that can be determined only at\nruntime to return a result set, a PROCEDURE %s can\'t return a result\nset in the given context error occurs (ER_SP_BADSELECT).\n\nUSE statements within stored routines are not permitted. When a routine\nis invoked, an implicit USE db_name is performed (and undone when the\nroutine terminates). The causes the routine to have the given default\ndatabase while it executes. References to objects in databases other\nthan the routine default database should be qualified with the\nappropriate database name.\n\nFor additional information about statements that are not permitted in\nstored routines, see\nhttp://dev.mysql.com/doc/refman/5.7/en/stored-program-restrictions.html\n.\n\nFor information about invoking stored procedures from within programs\nwritten in a language that has a MySQL interface, see [HELP CALL].\n\nMySQL stores the sql_mode system variable setting in effect when a\nroutine is created or altered, and always executes the routine with\nthis setting in force, regardless of the current server SQL mode when\nthe routine begins executing.\n\nThe switch from the SQL mode of the invoker to that of the routine\noccurs after evaluation of arguments and assignment of the resulting\nvalues to routine parameters. If you define a routine in strict SQL\nmode but invoke it in nonstrict mode, assignment of arguments to\nroutine parameters does not take place in strict mode. If you require\nthat expressions passed to a routine be assigned in strict SQL mode,\nyou should invoke the routine with strict mode in effect.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/create-procedure.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/create-procedure.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (197,40,'CREATE PROCEDURE','Syntax:\nCREATE\n [DEFINER = { user | CURRENT_USER }]\n PROCEDURE sp_name ([proc_parameter[,...]])\n [characteristic ...] routine_body\n\nCREATE\n [DEFINER = { user | CURRENT_USER }]\n FUNCTION sp_name ([func_parameter[,...]])\n RETURNS type\n [characteristic ...] routine_body\n\nproc_parameter:\n [ IN | OUT | INOUT ] param_name type\n\nfunc_parameter:\n param_name type\n\ntype:\n Any valid MySQL data type\n\ncharacteristic:\n COMMENT \'string\'\n | LANGUAGE SQL\n | [NOT] DETERMINISTIC\n | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }\n | SQL SECURITY { DEFINER | INVOKER }\n\nroutine_body:\n Valid SQL routine statement\n\nThese statements create stored routines. By default, a routine is\nassociated with the default database. To associate the routine\nexplicitly with a given database, specify the name as db_name.sp_name\nwhen you create it.\n\nThe CREATE FUNCTION statement is also used in MySQL to support UDFs\n(user-defined functions). See\nhttp://dev.mysql.com/doc/refman/5.7/en/adding-functions.html. A UDF can\nbe regarded as an external stored function. Stored functions share\ntheir namespace with UDFs. See\nhttp://dev.mysql.com/doc/refman/5.7/en/function-resolution.html, for\nthe rules describing how the server interprets references to different\nkinds of functions.\n\nTo invoke a stored procedure, use the CALL statement (see [HELP CALL]).\nTo invoke a stored function, refer to it in an expression. The function\nreturns a value during expression evaluation.\n\nCREATE PROCEDURE and CREATE FUNCTION require the CREATE ROUTINE\nprivilege. They might also require the SUPER privilege, depending on\nthe DEFINER value, as described later in this section. If binary\nlogging is enabled, CREATE FUNCTION might require the SUPER privilege,\nas described in\nhttp://dev.mysql.com/doc/refman/5.7/en/stored-programs-logging.html.\n\nBy default, MySQL automatically grants the ALTER ROUTINE and EXECUTE\nprivileges to the routine creator. This behavior can be changed by\ndisabling the automatic_sp_privileges system variable. See\nhttp://dev.mysql.com/doc/refman/5.7/en/stored-routines-privileges.html.\n\nThe DEFINER and SQL SECURITY clauses specify the security context to be\nused when checking access privileges at routine execution time, as\ndescribed later in this section.\n\nIf the routine name is the same as the name of a built-in SQL function,\na syntax error occurs unless you use a space between the name and the\nfollowing parenthesis when defining the routine or invoking it later.\nFor this reason, avoid using the names of existing SQL functions for\nyour own stored routines.\n\nThe IGNORE_SPACE SQL mode applies to built-in functions, not to stored\nroutines. It is always permissible to have spaces after a stored\nroutine name, regardless of whether IGNORE_SPACE is enabled.\n\nThe parameter list enclosed within parentheses must always be present.\nIf there are no parameters, an empty parameter list of () should be\nused. Parameter names are not case sensitive.\n\nEach parameter is an IN parameter by default. To specify otherwise for\na parameter, use the keyword OUT or INOUT before the parameter name.\n\n*Note*:\n\nSpecifying a parameter as IN, OUT, or INOUT is valid only for a\nPROCEDURE. For a FUNCTION, parameters are always regarded as IN\nparameters.\n\nAn IN parameter passes a value into a procedure. The procedure might\nmodify the value, but the modification is not visible to the caller\nwhen the procedure returns. An OUT parameter passes a value from the\nprocedure back to the caller. Its initial value is NULL within the\nprocedure, and its value is visible to the caller when the procedure\nreturns. An INOUT parameter is initialized by the caller, can be\nmodified by the procedure, and any change made by the procedure is\nvisible to the caller when the procedure returns.\n\nFor each OUT or INOUT parameter, pass a user-defined variable in the\nCALL statement that invokes the procedure so that you can obtain its\nvalue when the procedure returns. If you are calling the procedure from\nwithin another stored procedure or function, you can also pass a\nroutine parameter or local routine variable as an OUT or INOUT\nparameter. If you are calling the procedure from within a trigger, you\ncan also pass NEW.col_name as an OUT or INOUT parameter.\n\nRoutine parameters cannot be referenced in statements prepared within\nthe routine; see\nhttp://dev.mysql.com/doc/refman/5.7/en/stored-program-restrictions.html\n.\n\nThe following example shows a simple stored procedure that uses an OUT\nparameter:\n\nmysql> delimiter //\n\nmysql> CREATE PROCEDURE simpleproc (OUT param1 INT)\n -> BEGIN\n -> SELECT COUNT(*) INTO param1 FROM t;\n -> END//\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> delimiter ;\n\nmysql> CALL simpleproc(@a);\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> SELECT @a;\n+------+\n| @a |\n+------+\n| 3 |\n+------+\n1 row in set (0.00 sec)\n\nThe example uses the mysql client delimiter command to change the\nstatement delimiter from ; to // while the procedure is being defined.\nThis enables the ; delimiter used in the procedure body to be passed\nthrough to the server rather than being interpreted by mysql itself.\nSee\nhttp://dev.mysql.com/doc/refman/5.7/en/stored-programs-defining.html.\n\nThe RETURNS clause may be specified only for a FUNCTION, for which it\nis mandatory. It indicates the return type of the function, and the\nfunction body must contain a RETURN value statement. If the RETURN\nstatement returns a value of a different type, the value is coerced to\nthe proper type. For example, if a function specifies an ENUM or SET\nvalue in the RETURNS clause, but the RETURN statement returns an\ninteger, the value returned from the function is the string for the\ncorresponding ENUM member of set of SET members.\n\nThe following example function takes a parameter, performs an operation\nusing an SQL function, and returns the result. In this case, it is\nunnecessary to use delimiter because the function definition contains\nno internal ; statement delimiters:\n\nmysql> CREATE FUNCTION hello (s CHAR(20))\nmysql> RETURNS CHAR(50) DETERMINISTIC\n -> RETURN CONCAT(\'Hello, \',s,\'!\');\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> SELECT hello(\'world\');\n+----------------+\n| hello(\'world\') |\n+----------------+\n| Hello, world! |\n+----------------+\n1 row in set (0.00 sec)\n\nParameter types and function return types can be declared to use any\nvalid data type. The COLLATE attribute can be used if preceded by the\nCHARACTER SET attribute.\n\nThe routine_body consists of a valid SQL routine statement. This can be\na simple statement such as SELECT or INSERT, or a compound statement\nwritten using BEGIN and END. Compound statements can contain\ndeclarations, loops, and other control structure statements. The syntax\nfor these statements is described in\nhttp://dev.mysql.com/doc/refman/5.7/en/sql-syntax-compound-statements.h\ntml.\n\nMySQL permits routines to contain DDL statements, such as CREATE and\nDROP. MySQL also permits stored procedures (but not stored functions)\nto contain SQL transaction statements such as COMMIT. Stored functions\nmay not contain statements that perform explicit or implicit commit or\nrollback. Support for these statements is not required by the SQL\nstandard, which states that each DBMS vendor may decide whether to\npermit them.\n\nStatements that return a result set can be used within a stored\nprocedure but not within a stored function. This prohibition includes\nSELECT statements that do not have an INTO var_list clause and other\nstatements such as SHOW, EXPLAIN, and CHECK TABLE. For statements that\ncan be determined at function definition time to return a result set, a\nNot allowed to return a result set from a function error occurs\n(ER_SP_NO_RETSET). For statements that can be determined only at\nruntime to return a result set, a PROCEDURE %s can\'t return a result\nset in the given context error occurs (ER_SP_BADSELECT).\n\nUSE statements within stored routines are not permitted. When a routine\nis invoked, an implicit USE db_name is performed (and undone when the\nroutine terminates). The causes the routine to have the given default\ndatabase while it executes. References to objects in databases other\nthan the routine default database should be qualified with the\nappropriate database name.\n\nFor additional information about statements that are not permitted in\nstored routines, see\nhttp://dev.mysql.com/doc/refman/5.7/en/stored-program-restrictions.html\n.\n\nFor information about invoking stored procedures from within programs\nwritten in a language that has a MySQL interface, see [HELP CALL].\n\nMySQL stores the sql_mode system variable setting in effect when a\nroutine is created or altered, and always executes the routine with\nthis setting in force, regardless of the current server SQL mode when\nthe routine begins executing.\n\nThe switch from the SQL mode of the invoker to that of the routine\noccurs after evaluation of arguments and assignment of the resulting\nvalues to routine parameters. If you define a routine in strict SQL\nmode but invoke it in nonstrict mode, assignment of arguments to\nroutine parameters does not take place in strict mode. If you require\nthat expressions passed to a routine be assigned in strict SQL mode,\nyou should invoke the routine with strict mode in effect.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/create-procedure.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/create-procedure.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (198,24,'GET DIAGNOSTICS','Syntax:\nGET [CURRENT | STACKED] DIAGNOSTICS\n{\n statement_information_item\n [, statement_information_item] ...\n | CONDITION condition_number\n condition_information_item\n [, condition_information_item] ...\n}\n\nstatement_information_item:\n target = statement_information_item_name\n\ncondition_information_item:\n target = condition_information_item_name\n\nstatement_information_item_name:\n NUMBER\n | ROW_COUNT\n\ncondition_information_item_name:\n CLASS_ORIGIN\n | SUBCLASS_ORIGIN\n | RETURNED_SQLSTATE\n | MESSAGE_TEXT\n | MYSQL_ERRNO\n | CONSTRAINT_CATALOG\n | CONSTRAINT_SCHEMA\n | CONSTRAINT_NAME\n | CATALOG_NAME\n | SCHEMA_NAME\n | TABLE_NAME\n | COLUMN_NAME\n | CURSOR_NAME\n\ncondition_number, target:\n (see following discussion)\n\nSQL statements produce diagnostic information that populates the\ndiagnostics area. The GET DIAGNOSTICS statement enables applications to\ninspect this information. (You can also use SHOW WARNINGS or SHOW\nERRORS to see conditions or errors.)\n\nNo special privileges are required to execute GET DIAGNOSTICS.\n\nThe keyword CURRENT means to retrieve information from the current\ndiagnostics area. The keyword STACKED means to retrieve information\nfrom the second diagnostics area, which is available only if the\ncurrent context is a condition handler. If neither keyword is given,\nthe default is to use the current diagnostics area.\n\nThe GET DIAGNOSTICS statement is typically used in a handler within a\nstored program. It is a MySQL extension that GET [CURRENT] DIAGNOSTICS\nis permitted outside handler context to check the execution of any SQL\nstatement. For example, if you invoke the mysql client program, you can\nenter these statements at the prompt:\n\nmysql> DROP TABLE test.no_such_table;\nERROR 1051 (42S02): Unknown table \'test.no_such_table\'\nmysql> GET DIAGNOSTICS CONDITION 1\n -> @p1 = RETURNED_SQLSTATE, @p2 = MESSAGE_TEXT;\nmysql> SELECT @p1, @p2;\n+-------+------------------------------------+\n| @p1 | @p2 |\n+-------+------------------------------------+\n| 42S02 | Unknown table \'test.no_such_table\' |\n+-------+------------------------------------+\n\nThis extension applies only to the current diagnostics area. It does\nnot apply to the second diagnostics area because GET STACKED\nDIAGNOSTICS is permitted only if the current context is a condition\nhandler. If that is not the case, a GET STACKED DIAGNOSTICS when\nhandler not active error occurs.\n\nFor a description of the diagnostics area, see\nhttp://dev.mysql.com/doc/refman/5.7/en/diagnostics-area.html. Briefly,\nit contains two kinds of information:\n\no Statement information, such as the number of conditions that occurred\n or the affected-rows count.\n\no Condition information, such as the error code and message. If a\n statement raises multiple conditions, this part of the diagnostics\n area has a condition area for each one. If a statement raises no\n conditions, this part of the diagnostics area is empty.\n\nFor a statement that produces three conditions, the diagnostics area\ncontains statement and condition information like this:\n\nStatement information:\n row count\n ... other statement information items ...\nCondition area list:\n Condition area 1:\n error code for condition 1\n error message for condition 1\n ... other condition information items ...\n Condition area 2:\n error code for condition 2:\n error message for condition 2\n ... other condition information items ...\n Condition area 3:\n error code for condition 3\n error message for condition 3\n ... other condition information items ...\n\nGET DIAGNOSTICS can obtain either statement or condition information,\nbut not both in the same statement:\n\no To obtain statement information, retrieve the desired statement items\n into target variables. This instance of GET DIAGNOSTICS assigns the\n number of available conditions and the rows-affected count to the\n user variables @p1 and @p2:\n\nGET DIAGNOSTICS @p1 = NUMBER, @p2 = ROW_COUNT;\n\no To obtain condition information, specify the condition number and\n retrieve the desired condition items into target variables. This\n instance of GET DIAGNOSTICS assigns the SQLSTATE value and error\n message to the user variables @p3 and @p4:\n\nGET DIAGNOSTICS CONDITION 1\n @p3 = RETURNED_SQLSTATE, @p4 = MESSAGE_TEXT;\n\nThe retrieval list specifies one or more target = item_name\nassignments, separated by commas. Each assignment names a target\nvariable and either a statement_information_item_name or\ncondition_information_item_name designator, depending on whether the\nstatement retrieves statement or condition information.\n\nValid target designators for storing item information can be stored\nprocedure or function parameters, stored program local variables\ndeclared with DECLARE, or user-defined variables.\n\nValid condition_number designators can be stored procedure or function\nparameters, stored program local variables declared with DECLARE,\nuser-defined variables, system variables, or literals. A character\nliteral may include a _charset introducer. A warning occurs if the\ncondition number is not in the range from 1 to the number of condition\nareas that have information. In this case, the warning is added to the\ndiagnostics area without clearing it.\n\nWhen a condition occurs, MySQL does not populate all condition items\nrecognized by GET DIAGNOSTICS. For example:\n\nmysql> GET DIAGNOSTICS CONDITION 1\n -> @p5 = SCHEMA_NAME, @p6 = TABLE_NAME;\nmysql> SELECT @p5, @p6;\n+------+------+\n| @p5 | @p6 |\n+------+------+\n| | |\n+------+------+\n\nIn standard SQL, if there are multiple conditions, the first condition\nrelates to the SQLSTATE value returned for the previous SQL statement.\nIn MySQL, this is not guaranteed. To get the main error, you cannot do\nthis:\n\nGET DIAGNOSTICS CONDITION 1 @errno = MYSQL_ERRNO;\n\nInstead, retrieve the condition count first, then use it to specify\nwhich condition number to inspect:\n\nGET DIAGNOSTICS @cno = NUMBER;\nGET DIAGNOSTICS CONDITION @cno @errno = MYSQL_ERRNO;\n\nFor information about permissible statement and condition information\nitems, and which ones are populated when a condition occurs, see\nhttp://dev.mysql.com/doc/refman/5.7/en/diagnostics-area.html#diagnostic\ns-area-information-items.\n\nHere is an example that uses GET DIAGNOSTICS and an exception handler\nin stored procedure context to assess the outcome of an insert\noperation. If the insert was successful, the procedure uses GET\nDIAGNOSTICS to get the rows-affected count. This shows that you can use\nGET DIAGNOSTICS multiple times to retrieve information about a\nstatement as long as the current diagnostics area has not been cleared.\n\nCREATE PROCEDURE do_insert(value INT)\nBEGIN\n -- Declare variables to hold diagnostics area information\n DECLARE code CHAR(5) DEFAULT \'00000\';\n DECLARE msg TEXT;\n DECLARE rows INT;\n DECLARE result TEXT;\n -- Declare exception handler for failed insert\n DECLARE CONTINUE HANDLER FOR SQLEXCEPTION\n BEGIN\n GET DIAGNOSTICS CONDITION 1\n code = RETURNED_SQLSTATE, msg = MESSAGE_TEXT;\n END;\n\n -- Perform the insert\n INSERT INTO t1 (int_col) VALUES(value);\n -- Check whether the insert was successful\n IF code = \'00000\' THEN\n GET DIAGNOSTICS rows = ROW_COUNT;\n SET result = CONCAT(\'insert succeeded, row count = \',rows);\n ELSE\n SET result = CONCAT(\'insert failed, error = \',code,\', message = \',msg);\n END IF;\n -- Say what happened\n SELECT result;\nEND;\n\nSuppose that t1.int_col is an integer column that is declared as NOT\nNULL. The procedure produces these results when invoked to insert\nnon-NULL and NULL values, respectively:\n\nmysql> CALL do_insert(1);\n+---------------------------------+\n| result |\n+---------------------------------+\n| insert succeeded, row count = 1 |\n+---------------------------------+\n\nmysql> CALL do_insert(NULL);\n+-------------------------------------------------------------------------+\n| result |\n+-------------------------------------------------------------------------+\n| insert failed, error = 23000, message = Column \'int_col\' cannot be null |\n+-------------------------------------------------------------------------+\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/get-diagnostics.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/get-diagnostics.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (199,38,'NOT REGEXP','Syntax:\nexpr NOT REGEXP pat, expr NOT RLIKE pat\n\nThis is the same as NOT (expr REGEXP pat).\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/regexp.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/regexp.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (200,24,'LEAVE','Syntax:\nLEAVE label\n\nThis statement is used to exit the flow control construct that has the\ngiven label. If the label is for the outermost stored program block,\nLEAVE exits the program.\n\nLEAVE can be used within BEGIN ... END or loop constructs (LOOP,\nREPEAT, WHILE).\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/leave.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/leave.html'); @@ -289,21 +289,21 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example, INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (208,7,'->>','Syntax:\ncolumn->>path\n\nThis is an improved, unquoting extraction operator available in MySQL\n5.7.13 and later. Whereas the -> operator simply extracts a value, the\n->> operator in addition unquotes the extracted result. In other words,\ngiven a JSON column value column and a path expression path, the\nfollowing three expressions return the same value:\n\no JSON_UNQUOTE( JSON_EXTRACT(column, path) )\n\no JSON_UNQUOTE(column -> path)\n\no column->>path\n\nThe ->> operator can be used wherever JSON_UNQUOTE(JSON_EXTRACT())\nwould be allowed. This includes (but is not limited to) SELECT lists,\nWHERE and HAVING clauses, and ORDER BY and GROUP BY clauses.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html\n\n','mysql> SELECT * FROM jemp WHERE g > 2;\n+-------------------------------+------+\n| c | g |\n+-------------------------------+------+\n| {"id": "3", "name": "Barney"} | 3 |\n| {"id": "4", "name": "Betty"} | 4 |\n+-------------------------------+------+\n2 rows in set (0.01 sec)\n\nmysql> SELECT c->\'$.name\' AS name\n -> FROM jemp WHERE g > 2;\n+----------+\n| name |\n+----------+\n| "Barney" |\n| "Betty" |\n+----------+\n2 rows in set (0.00 sec)\n\nmysql> SELECT JSON_UNQUOTE(c->\'$.name\') AS name\n -> FROM jemp WHERE g > 2;\n+--------+\n| name |\n+--------+\n| Barney |\n| Betty |\n+--------+\n2 rows in set (0.00 sec)\n\nmysql> SELECT c->>\'$.name\' AS name\n -> FROM jemp WHERE g > 2;\n+--------+\n| name |\n+--------+\n| Barney |\n| Betty |\n+--------+\n2 rows in set (0.00 sec)\n\nmysql> CREATE TABLE tj10 (a JSON, b INT);\nQuery OK, 0 rows affected (0.26 sec)\n\nmysql> INSERT INTO tj10 VALUES\n -> (\'[3,10,5,"x",44]\', 33),\n -> (\'[3,10,5,17,[22,"y",66]]\', 0);\nQuery OK, 2 rows affected (0.04 sec)\nRecords: 2 Duplicates: 0 Warnings: 0\n\nmysql> SELECT a->"$[3]", a->"$[4][1]" FROM tj10;\n+-----------+--------------+\n| a->"$[3]" | a->"$[4][1]" |\n+-----------+--------------+\n| "x" | NULL |\n| 17 | "y" |\n+-----------+--------------+\n2 rows in set (0.00 sec)\n\nmysql> SELECT a->>"$[3]", a->>"$[4][1]" FROM tj10;\n+------------+---------------+\n| a->>"$[3]" | a->>"$[4][1]" |\n+------------+---------------+\n| x | NULL |\n| 17 | y |\n+------------+---------------+\n2 rows in set (0.00 sec)\n\nmysql> EXPLAIN SELECT c->>\'$.name\' AS name\n -> FROM jemp WHERE g > 2\\G\n*************************** 1. row ***************************\n id: 1\n select_type: SIMPLE\n table: jemp\n partitions: NULL\n type: range\npossible_keys: i\n key: i\n key_len: 5\n ref: NULL\n rows: 2\n filtered: 100.00\n Extra: Using where\n1 row in set, 1 warning (0.00 sec)\n\nmysql> SHOW WARNINGS\\G\n*************************** 1. row ***************************\n Level: Note\n Code: 1003\nMessage: /* select#1 */ select\njson_unquote(json_extract(`jtest`.`jemp`.`c`,\'$.name\')) AS `name` from\n`jtest`.`jemp` where (`jtest`.`jemp`.`g` > 2)\n1 row in set (0.00 sec)\n','http://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (209,27,'FLUSH','Syntax:\nFLUSH [NO_WRITE_TO_BINLOG | LOCAL] {\n flush_option [, flush_option] ...\n | tables_option\n}\n\nflush_option: {\n BINARY LOGS\n | DES_KEY_FILE\n | ENGINE LOGS\n | ERROR LOGS\n | GENERAL LOGS\n | HOSTS\n | LOGS\n | PRIVILEGES\n | OPTIMIZER_COSTS\n | QUERY CACHE\n | RELAY LOGS [FOR CHANNEL channel]\n | SLOW LOGS\n | STATUS\n | USER_RESOURCES\n}\n\ntables_option: {\n TABLES\n | TABLES tbl_name [, tbl_name] ...\n | TABLES WITH READ LOCK\n | TABLES tbl_name [, tbl_name] ... WITH READ LOCK\n | TABLES tbl_name [, tbl_name] ... FOR EXPORT\n}\n\nThe FLUSH statement has several variant forms that clear or reload\nvarious internal caches, flush tables, or acquire locks. To execute\nFLUSH, you must have the RELOAD privilege. Specific flush options might\nrequire additional privileges, as described later.\n\n*Note*:\n\nIt is not possible to issue FLUSH statements within stored functions or\ntriggers. However, you may use FLUSH in stored procedures, so long as\nthese are not called from stored functions or triggers. See\nhttp://dev.mysql.com/doc/refman/5.7/en/stored-program-restrictions.html\n.\n\nBy default, the server writes FLUSH statements to the binary log so\nthat they replicate to replication slaves. To suppress logging, specify\nthe optional NO_WRITE_TO_BINLOG keyword or its alias LOCAL.\n\n*Note*:\n\nFLUSH LOGS, FLUSH TABLES WITH READ LOCK (with or without a table list),\nand FLUSH TABLES tbl_name ... FOR EXPORT are not written to the binary\nlog in any case because they would cause problems if replicated to a\nslave.\n\nThe FLUSH statement causes an implicit commit. See\nhttp://dev.mysql.com/doc/refman/5.7/en/implicit-commit.html.\n\nThe mysqladmin utility provides a command-line interface to some flush\noperations, using commands such as flush-hosts, flush-logs,\nflush-privileges, flush-status, and flush-tables. See\nhttp://dev.mysql.com/doc/refman/5.7/en/mysqladmin.html.\n\nSending a SIGHUP signal to the server causes several flush operations\nto occur that are similar to various forms of the FLUSH statement. See\nhttp://dev.mysql.com/doc/refman/5.7/en/server-signal-response.html.\n\nThe RESET statement is similar to FLUSH. See [HELP RESET], for\ninformation about using the RESET statement with replication.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/flush.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/flush.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (210,24,'BEGIN END','Syntax:\n[begin_label:] BEGIN\n [statement_list]\nEND [end_label]\n\nBEGIN ... END syntax is used for writing compound statements, which can\nappear within stored programs (stored procedures and functions,\ntriggers, and events). A compound statement can contain multiple\nstatements, enclosed by the BEGIN and END keywords. statement_list\nrepresents a list of one or more statements, each terminated by a\nsemicolon (;) statement delimiter. The statement_list itself is\noptional, so the empty compound statement (BEGIN END) is legal.\n\nBEGIN ... END blocks can be nested.\n\nUse of multiple statements requires that a client is able to send\nstatement strings containing the ; statement delimiter. In the mysql\ncommand-line client, this is handled with the delimiter command.\nChanging the ; end-of-statement delimiter (for example, to //) permit ;\nto be used in a program body. For an example, see\nhttp://dev.mysql.com/doc/refman/5.7/en/stored-programs-defining.html.\n\nA BEGIN ... END block can be labeled. See [HELP labels].\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/begin-end.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/begin-end.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (211,27,'SHOW PROCEDURE STATUS','Syntax:\nSHOW PROCEDURE STATUS\n [LIKE \'pattern\' | WHERE expr]\n\nThis statement is a MySQL extension. It returns characteristics of a\nstored procedure, such as the database, name, type, creator, creation\nand modification dates, and character set information. A similar\nstatement, SHOW FUNCTION STATUS, displays information about stored\nfunctions (see [HELP SHOW FUNCTION STATUS]).\n\nThe LIKE clause, if present, indicates which procedure or function\nnames to match. The WHERE clause can be given to select rows using more\ngeneral conditions, as discussed in\nhttp://dev.mysql.com/doc/refman/5.7/en/extended-show.html.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/show-procedure-status.html\n\n','mysql> SHOW PROCEDURE STATUS LIKE \'sp1\'\\G\n*************************** 1. row ***************************\n Db: test\n Name: sp1\n Type: PROCEDURE\n Definer: testuser@localhost\n Modified: 2004-08-03 15:29:37\n Created: 2004-08-03 15:29:37\n Security_type: DEFINER\n Comment:\ncharacter_set_client: latin1\ncollation_connection: latin1_swedish_ci\n Database Collation: latin1_swedish_ci\n','http://dev.mysql.com/doc/refman/5.7/en/show-procedure-status.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (211,27,'SHOW PROCEDURE STATUS','Syntax:\nSHOW PROCEDURE STATUS\n [LIKE \'pattern\' | WHERE expr]\n\nThis statement is a MySQL extension. It returns characteristics of a\nstored procedure, such as the database, name, type, creator, creation\nand modification dates, and character set information. A similar\nstatement, SHOW FUNCTION STATUS, displays information about stored\nfunctions (see [HELP SHOW FUNCTION STATUS]).\n\nThe LIKE clause, if present, indicates which procedure or function\nnames to match. The WHERE clause can be given to select rows using more\ngeneral conditions, as discussed in\nhttp://dev.mysql.com/doc/refman/5.7/en/extended-show.html.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/show-procedure-status.html\n\n','mysql> SHOW PROCEDURE STATUS LIKE \'sp1\'\\G\n*************************** 1. row ***************************\n Db: test\n Name: sp1\n Type: PROCEDURE\n Definer: testuser@localhost\n Modified: 2018-08-08 13:54:11\n Created: 2018-08-08 13:54:11\n Security_type: DEFINER\n Comment:\ncharacter_set_client: utf8\ncollation_connection: utf8_general_ci\n Database Collation: latin1_swedish_ci\n','http://dev.mysql.com/doc/refman/5.7/en/show-procedure-status.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (212,16,'STDDEV_POP','Syntax:\nSTDDEV_POP(expr)\n\nReturns the population standard deviation of expr (the square root of\nVAR_POP()). You can also use STD() or STDDEV(), which are equivalent\nbut not standard SQL.\n\nIf there are no matching rows, STDDEV_POP() returns NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (213,27,'SHOW CHARACTER SET','Syntax:\nSHOW CHARACTER SET\n [LIKE \'pattern\' | WHERE expr]\n\nThe SHOW CHARACTER SET statement shows all available character sets.\nThe LIKE clause, if present, indicates which character set names to\nmatch. The WHERE clause can be given to select rows using more general\nconditions, as discussed in\nhttp://dev.mysql.com/doc/refman/5.7/en/extended-show.html. For example:\n\nmysql> SHOW CHARACTER SET LIKE \'latin%\';\n+---------+-----------------------------+-------------------+--------+\n| Charset | Description | Default collation | Maxlen |\n+---------+-----------------------------+-------------------+--------+\n| latin1 | cp1252 West European | latin1_swedish_ci | 1 |\n| latin2 | ISO 8859-2 Central European | latin2_general_ci | 1 |\n| latin5 | ISO 8859-9 Turkish | latin5_turkish_ci | 1 |\n| latin7 | ISO 8859-13 Baltic | latin7_general_ci | 1 |\n+---------+-----------------------------+-------------------+--------+\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/show-character-set.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/show-character-set.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (214,16,'JSON_OBJECTAGG','Syntax:\nJSON_OBJECTAGG(key, value)\n\nTakes two column names or expressions as arguments, the first of these\nbeing used as a key and the second as a value, and returns a JSON\nobject containing key-value pairs. Returns NULL if the result contains\nno rows, or in the event of an error. An error occurs if any key name\nis NULL or the number of arguments is not equal to 2.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html\n\n','mysql> SELECT o_id, attribute, value FROM t3;\n+------+-----------+-------+\n| o_id | attribute | value |\n+------+-----------+-------+\n| 2 | color | red |\n| 2 | fabric | silk |\n| 3 | color | green |\n| 3 | shape | square|\n+------+-----------+-------+\n4 rows in set (0.00 sec)\n\nmysql> SELECT o_id, JSON_OBJECTAGG(attribute, value) FROM t3 GROUP BY o_id;\n+------+----------------------------------------+\n| o_id | JSON_OBJECTAGG(attribute, name) |\n+------+----------------------------------------+\n| 2 | {"color": "red", "fabric": "silk"} |\n| 3 | {"color": "green", "shape": "square"} |\n+------+----------------------------------------+\n1 row in set (0.00 sec)\n','http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (215,7,'INTERSECTS','Intersects(g1, g2)\n\nMBRIntersects() and Intersects() are synonyms. For more information,\nsee the description of MBRIntersects().\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-mbr.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-mbr.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (216,24,'LOOP','Syntax:\n[begin_label:] LOOP\n statement_list\nEND LOOP [end_label]\n\nLOOP implements a simple loop construct, enabling repeated execution of\nthe statement list, which consists of one or more statements, each\nterminated by a semicolon (;) statement delimiter. The statements\nwithin the loop are repeated until the loop is terminated. Usually,\nthis is accomplished with a LEAVE statement. Within a stored function,\nRETURN can also be used, which exits the function entirely.\n\nNeglecting to include a loop-termination statement results in an\ninfinite loop.\n\nA LOOP statement can be labeled. For the rules regarding label use, see\n[HELP labels].\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/loop.html\n\n','CREATE PROCEDURE doiterate(p1 INT)\nBEGIN\n label1: LOOP\n SET p1 = p1 + 1;\n IF p1 < 10 THEN\n ITERATE label1;\n END IF;\n LEAVE label1;\n END LOOP label1;\n SET @x = p1;\nEND;\n','http://dev.mysql.com/doc/refman/5.7/en/loop.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (217,20,'GREATEST','Syntax:\nGREATEST(value1,value2,...)\n\nWith two or more arguments, returns the largest (maximum-valued)\nargument. The arguments are compared using the same rules as for\nLEAST().\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html\n\n','mysql> SELECT GREATEST(2,0);\n -> 2\nmysql> SELECT GREATEST(34.0,3.0,5.0,767.0);\n -> 767.0\nmysql> SELECT GREATEST(\'B\',\'A\',\'C\');\n -> \'C\'\n','http://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (218,40,'ALTER INSTANCE','Syntax:\nALTER INSTANCE ROTATE INNODB MASTER KEY\n\nALTER INSTANCE, introduced in MySQL 5.7.11, defines actions applicable\nto a MySQL server instance.\n\nThe ALTER INSTANCE ROTATE INNODB MASTER KEY statement is used to rotate\nthe master encryption key used for InnoDB tablespace encryption. A\nkeyring plugin must be loaded to use this statement. For information\nabout keyring plugins, see\nhttp://dev.mysql.com/doc/refman/5.7/en/keyring.html. Key rotation\nrequires the SUPER privilege.\n\nALTER INSTANCE ROTATE INNODB MASTER KEY supports concurrent DML.\nHowever, it cannot be run concurrently with CREATE TABLE ... ENCRYPTION\nor ALTER TABLE ... ENCRYPTION operations, and locks are taken to\nprevent conflicts that could arise from concurrent execution of these\nstatements. If one of the conflicting statements is running, it must\ncomplete before another can proceed.\n\nALTER INSTANCE actions are written to the binary log so that they can\nbe executed on replicated servers.\n\nFor additional ALTER INSTANCE ROTATE INNODB MASTER KEY usage\ninformation, see\nhttp://dev.mysql.com/doc/refman/5.7/en/innodb-tablespace-encryption.htm\nl. For information about keyring plugins, see\nhttp://dev.mysql.com/doc/refman/5.7/en/keyring.html.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/alter-instance.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/alter-instance.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (218,40,'ALTER INSTANCE','Syntax:\nALTER INSTANCE ROTATE INNODB MASTER KEY\n\nALTER INSTANCE, introduced in MySQL 5.7.11, defines actions applicable\nto a MySQL server instance.\n\nThe ALTER INSTANCE ROTATE INNODB MASTER KEY statement is used to rotate\nthe master encryption key used for InnoDB tablespace encryption. A\nkeyring plugin must be installed and configured to use this statement.\nFor information about keyring plugins, see\nhttp://dev.mysql.com/doc/refman/5.7/en/keyring.html. Key rotation\nrequires the SUPER privilege.\n\nALTER INSTANCE ROTATE INNODB MASTER KEY supports concurrent DML.\nHowever, it cannot be run concurrently with CREATE TABLE ... ENCRYPTION\nor ALTER TABLE ... ENCRYPTION operations, and locks are taken to\nprevent conflicts that could arise from concurrent execution of these\nstatements. If one of the conflicting statements is running, it must\ncomplete before another can proceed.\n\nALTER INSTANCE actions are written to the binary log so that they can\nbe executed on replicated servers.\n\nFor additional ALTER INSTANCE ROTATE INNODB MASTER KEY usage\ninformation, see\nhttp://dev.mysql.com/doc/refman/5.7/en/innodb-tablespace-encryption.htm\nl. For information about keyring plugins, see\nhttp://dev.mysql.com/doc/refman/5.7/en/keyring.html.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/alter-instance.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/alter-instance.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (219,31,'ST_CONTAINS','ST_Contains(g1, g2)\n\nReturns 1 or 0 to indicate whether g1 completely contains g2. This\ntests the opposite relationship as ST_Within().\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-object-shapes.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-object-shapes.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (220,16,'BIT_AND','Syntax:\nBIT_AND(expr)\n\nReturns the bitwise AND of all bits in expr. The calculation is\nperformed with 64-bit (BIGINT) precision.\n\nIf there are no matching rows, BIT_AND() returns a neutral value (all\nbits set to 1).\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (221,32,'SECOND','Syntax:\nSECOND(time)\n\nReturns the second for time, in the range 0 to 59.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html\n\n','mysql> SELECT SECOND(\'10:05:03\');\n -> 3\n','http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (222,7,'MBRCONTAINS','MBRContains(g1, g2)\n\nReturns 1 or 0 to indicate whether the minimum bounding rectangle of g1\ncontains the minimum bounding rectangle of g2. This tests the opposite\nrelationship as MBRWithin().\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-mbr.html\n\n','mysql> SET @g1 = ST_GeomFromText(\'Polygon((0 0,0 3,3 3,3 0,0 0))\');\nmysql> SET @g2 = ST_GeomFromText(\'Point(1 1)\');\nmysql> SELECT MBRContains(@g1,@g2), MBRWithin(@g2,@g1);\n+----------------------+--------------------+\n| MBRContains(@g1,@g2) | MBRWithin(@g2,@g1) |\n+----------------------+--------------------+\n| 1 | 1 |\n+----------------------+--------------------+\n','http://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-mbr.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (223,14,'RELEASE_ALL_LOCKS','Syntax:\nRELEASE_ALL_LOCKS()\n\nReleases all named locks held by the current session and returns the\nnumber of locks released (0 if there were none)\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (224,3,'COT','Syntax:\nCOT(X)\n\nReturns the cotangent of X.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html\n\n','mysql> SELECT COT(12);\n -> -1.5726734063977\nmysql> SELECT COT(0);\n -> out-of-range error\n','http://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (225,27,'SHOW CREATE EVENT','Syntax:\nSHOW CREATE EVENT event_name\n\nThis statement displays the CREATE EVENT statement needed to re-create\na given event. It requires the EVENT privilege for the database from\nwhich the event is to be shown. For example (using the same event\ne_daily defined and then altered in [HELP SHOW EVENTS]):\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/show-create-event.html\n\n','mysql> SHOW CREATE EVENT test.e_daily\\G\n*************************** 1. row ***************************\n Event: e_daily\n sql_mode:\n time_zone: SYSTEM\n Create Event: CREATE EVENT `e_daily`\n ON SCHEDULE EVERY 1 DAY\n STARTS CURRENT_TIMESTAMP + INTERVAL 6 HOUR\n ON COMPLETION NOT PRESERVE\n ENABLE\n COMMENT \'Saves total number of sessions then\n clears the table each day\'\n DO BEGIN\n INSERT INTO site_activity.totals (time, total)\n SELECT CURRENT_TIMESTAMP, COUNT(*)\n FROM site_activity.sessions;\n DELETE FROM site_activity.sessions;\n END\ncharacter_set_client: latin1\ncollation_connection: latin1_swedish_ci\n Database Collation: latin1_swedish_ci\n','http://dev.mysql.com/doc/refman/5.7/en/show-create-event.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (225,27,'SHOW CREATE EVENT','Syntax:\nSHOW CREATE EVENT event_name\n\nThis statement displays the CREATE EVENT statement needed to re-create\na given event. It requires the EVENT privilege for the database from\nwhich the event is to be shown. For example (using the same event\ne_daily defined and then altered in [HELP SHOW EVENTS]):\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/show-create-event.html\n\n','mysql> SHOW CREATE EVENT myschema.e_daily\\G\n*************************** 1. row ***************************\n Event: e_daily\n sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,\n NO_ZERO_IN_DATE,NO_ZERO_DATE,\n ERROR_FOR_DIVISION_BY_ZERO,\n NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION\n time_zone: SYSTEM\n Create Event: CREATE DEFINER=`jon`@`ghidora` EVENT `e_daily`\n ON SCHEDULE EVERY 1 DAY\n STARTS CURRENT_TIMESTAMP + INTERVAL 6 HOUR\n ON COMPLETION NOT PRESERVE\n ENABLE\n COMMENT \'Saves total number of sessions then\n clears the table each day\'\n DO BEGIN\n INSERT INTO site_activity.totals (time, total)\n SELECT CURRENT_TIMESTAMP, COUNT(*)\n FROM site_activity.sessions;\n DELETE FROM site_activity.sessions;\n END\ncharacter_set_client: utf8\ncollation_connection: utf8_general_ci\n Database Collation: latin1_swedish_ci\n','http://dev.mysql.com/doc/refman/5.7/en/show-create-event.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (226,15,'OR','Syntax:\nOR, ||\n\nLogical OR. When both operands are non-NULL, the result is 1 if any\noperand is nonzero, and 0 otherwise. With a NULL operand, the result is\n1 if the other operand is nonzero, and NULL otherwise. If both operands\nare NULL, the result is NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/logical-operators.html\n\n','mysql> SELECT 1 OR 1;\n -> 1\nmysql> SELECT 1 OR 0;\n -> 1\nmysql> SELECT 0 OR 0;\n -> 0\nmysql> SELECT 0 OR NULL;\n -> NULL\nmysql> SELECT 1 OR NULL;\n -> 1\n','http://dev.mysql.com/doc/refman/5.7/en/logical-operators.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (227,38,'LOAD_FILE','Syntax:\nLOAD_FILE(file_name)\n\nReads the file and returns the file contents as a string. To use this\nfunction, the file must be located on the server host, you must specify\nthe full path name to the file, and you must have the FILE privilege.\nThe file must be readable by all and its size less than\nmax_allowed_packet bytes. If the secure_file_priv system variable is\nset to a nonempty directory name, the file to be loaded must be located\nin that directory.\n\nIf the file does not exist or cannot be read because one of the\npreceding conditions is not satisfied, the function returns NULL.\n\nThe character_set_filesystem system variable controls interpretation of\nfile names that are given as literal strings.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/string-functions.html\n\n','mysql> UPDATE t\n SET blob_col=LOAD_FILE(\'/tmp/picture\')\n WHERE id=1;\n','http://dev.mysql.com/doc/refman/5.7/en/string-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (228,4,'POINTFROMTEXT','PointFromText(wkt[, srid])\n\nST_PointFromText() and PointFromText() are synonyms. For more\ninformation, see the description of ST_PointFromText().\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html'); @@ -340,7 +340,7 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example, INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (259,32,'PERIOD_ADD','Syntax:\nPERIOD_ADD(P,N)\n\nAdds N months to period P (in the format YYMM or YYYYMM). Returns a\nvalue in the format YYYYMM. Note that the period argument P is not a\ndate value.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html\n\n','mysql> SELECT PERIOD_ADD(200801,2);\n -> 200803\n','http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (260,38,'RIGHT','Syntax:\nRIGHT(str,len)\n\nReturns the rightmost len characters from the string str, or NULL if\nany argument is NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/string-functions.html\n\n','mysql> SELECT RIGHT(\'foobarbar\', 4);\n -> \'rbar\'\n','http://dev.mysql.com/doc/refman/5.7/en/string-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (261,40,'DROP TABLESPACE','Syntax:\nDROP TABLESPACE tablespace_name\n [ENGINE [=] engine_name]\n\nThis statement drops a tablespace that was previously created using\nCREATE TABLESPACE. It is supported with all MySQL NDB Cluster 7.5\nreleases, and with InnoDB in the standard MySQL Server as well.\n\nENGINE sets the storage engine that uses the tablespace, where\nengine_name is the name of the storage engine. Currently, the values\nInnoDB and NDB are supported. If not set, the value of\ndefault_storage_engine is used. If it is not the same as the storage\nengine used to create the tablespace, the DROP TABLESPACE statement\nfails.\n\nFor an InnoDB tablespace, all tables must be dropped from the\ntablespace prior to a DROP TABLESPACE operation. If the tablespace is\nnot empty, DROP TABLESPACE returns an error.\n\nAs with the InnoDB system tablespace, truncating or dropping InnoDB\ntables stored in a general tablespace creates free space in the\ntablespace .ibd data file, which can only be used for new InnoDB data.\nSpace is not released back to the operating system by such operations\nas it is for file-per-table tablespaces.\n\nAn NDB tablespace to be dropped must not contain any data files; in\nother words, before you can drop an NDB tablespace, you must first drop\neach of its data files using ALTER TABLESPACE ... DROP DATAFILE.\n\nNotes\n\no Tablespaces are not deleted automatically. A tablespace must be\n dropped explicitly using DROP TABLESPACE. DROP DATABASE has no effect\n in this regard, even if the operation drops all tables belonging to\n the tablespace.\n\no A DROP DATABASE operation can drop tables that belong to a general\n tablespace but it cannot drop the tablespace, even if the operation\n drops all tables that belong to the tablespace. The tablespace must\n be dropped explicitly using DROP TABLESPACE tablespace_name.\n\no Similar to the system tablespace, truncating or dropping tables\n stored in a general tablespace creates free space internally in the\n general tablespace .ibd data file which can only be used for new\n InnoDB data. Space is not released back to the operating system as it\n is for file-per-table tablespaces.\n\nInnoDB Example\n\nThis example demonstrates how to drop an InnoDB general tablespace. The\ngeneral tablespace ts1 is created with a single table. Before dropping\nthe tablespace, the table must be dropped.\n\nmysql> CREATE TABLESPACE `ts1`\n -> ADD DATAFILE \'ts1.ibd\'\n -> ENGINE=INNODB;\nQuery OK, 0 rows affected (0.01 sec)\n\nmysql> CREATE TABLE t1 (c1 INT PRIMARY KEY)\n -> TABLESPACE ts10\n -> ENGINE=INNODB;\nQuery OK, 0 rows affected (0.02 sec)\n\nmysql> DROP TABLE t1;\nQuery OK, 0 rows affected (0.01 sec)\n\nmysql> DROP TABLESPACE ts1;\nQuery OK, 0 rows affected (0.01 sec)\n\nNDB Example\n\nThis example shows how to drop an NDB tablespace myts having a data\nfile named mydata-1.dat after first creating the tablespace, and\nassumes the existence of a log file group named mylg (see [HELP CREATE\nLOGFILE GROUP]).\n\nmysql> CREATE TABLESPACE myts\n -> ADD DATAFILE \'mydata-1.dat\'\n -> USE LOGFILE GROUP mylg\n -> ENGINE=NDB;\n\nYou must remove all data files from the tablespace using ALTER\nTABLESPACE, as shown here, before it can be dropped:\n\nmysql> ALTER TABLESPACE myts\n -> DROP DATAFILE \'mydata-1.dat\'\n -> ENGINE=NDB;\n\nmysql> DROP TABLESPACE myts;\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/drop-tablespace.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/drop-tablespace.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (262,21,'CHECK TABLE','Syntax:\nCHECK TABLE tbl_name [, tbl_name] ... [option] ...\n\noption = {\n FOR UPGRADE\n | QUICK\n | FAST\n | MEDIUM\n | EXTENDED\n | CHANGED\n}\n\nCHECK TABLE checks a table or tables for errors. For MyISAM tables, the\nkey statistics are updated as well. CHECK TABLE can also check views\nfor problems, such as tables that are referenced in the view definition\nthat no longer exist.\n\nTo check a table, you must have some privilege for it.\n\nCHECK TABLE works for InnoDB, MyISAM, ARCHIVE, and CSV tables.\n\nBefore running CHECK TABLE on InnoDB tables, see\nhttp://dev.mysql.com/doc/refman/5.7/en/check-table.html#check-table-inn\nodb.\n\nCHECK TABLE is supported for partitioned tables, and you can use ALTER\nTABLE ... CHECK PARTITION to check one or more partitions; for more\ninformation, see [HELP ALTER TABLE], and\nhttp://dev.mysql.com/doc/refman/5.7/en/partitioning-maintenance.html.\n\nCHECK TABLE ignores virtual generated columns that are not indexed.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/check-table.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/check-table.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (262,21,'CHECK TABLE','Syntax:\nCHECK TABLE tbl_name [, tbl_name] ... [option] ...\n\noption: {\n FOR UPGRADE\n | QUICK\n | FAST\n | MEDIUM\n | EXTENDED\n | CHANGED\n}\n\nCHECK TABLE checks a table or tables for errors. For MyISAM tables, the\nkey statistics are updated as well. CHECK TABLE can also check views\nfor problems, such as tables that are referenced in the view definition\nthat no longer exist.\n\nTo check a table, you must have some privilege for it.\n\nCHECK TABLE works for InnoDB, MyISAM, ARCHIVE, and CSV tables.\n\nBefore running CHECK TABLE on InnoDB tables, see\nhttp://dev.mysql.com/doc/refman/5.7/en/check-table.html#check-table-inn\nodb.\n\nCHECK TABLE is supported for partitioned tables, and you can use ALTER\nTABLE ... CHECK PARTITION to check one or more partitions; for more\ninformation, see [HELP ALTER TABLE], and\nhttp://dev.mysql.com/doc/refman/5.7/en/partitioning-maintenance.html.\n\nCHECK TABLE ignores virtual generated columns that are not indexed.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/check-table.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/check-table.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (263,38,'BIN','Syntax:\nBIN(N)\n\nReturns a string representation of the binary value of N, where N is a\nlonglong (BIGINT) number. This is equivalent to CONV(N,10,2). Returns\nNULL if N is NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/string-functions.html\n\n','mysql> SELECT BIN(12);\n -> \'1100\'\n','http://dev.mysql.com/doc/refman/5.7/en/string-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (264,7,'JSON_STORAGE_SIZE','JSON_STORAGE_SIZE(json_val)\n\nThis function returns the number of bytes used to store the binary\nrepresentation of a JSON document. When the argument is a JSON column,\nthis is the space used to store the JSON document. json_val must be a\nvalid JSON document or a string which can be parsed as one. In the case\nwhere it is string, the function returns the amount of storage space in\nthe JSON binary representation that is created by parsing the string as\nJSON and converting it to binary. It returns NULL if the argument is\nNULL.\n\nAn error results when json_val is not NULL, and is not---or cannot be\nsuccessfully parsed as---a JSON document.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/json-utility-functions.html\n\n','mysql> CREATE TABLE jtable (jcol JSON);\nQuery OK, 0 rows affected (0.42 sec)\n\nmysql> INSERT INTO jtable VALUES\n -> (\'{"a": 1000, "b": "wxyz", "c": "[1, 3, 5, 7]"}\');\nQuery OK, 1 row affected (0.04 sec)\n\nmysql> SELECT\n -> jcol,\n -> JSON_STORAGE_SIZE(jcol) AS Size\n -> FROM jtable;\n+-----------------------------------------------+------+\n| jcol | Size |\n+-----------------------------------------------+------+\n| {"a": 1000, "b": "wxyz", "c": "[1, 3, 5, 7]"} | 47 |\n+-----------------------------------------------+------+\n1 row in set (0.00 sec)\n\nmysql> UPDATE jtable\nmysql> SET jcol = \'{"a": 4.55, "b": "wxyz", "c": "[true, false]"}\';\nQuery OK, 1 row affected (0.04 sec)\nRows matched: 1 Changed: 1 Warnings: 0\n\nmysql> SELECT\n -> jcol,\n -> JSON_STORAGE_SIZE(jcol) AS Size\n -> FROM jtable;\n+------------------------------------------------+------+\n| jcol | Size |\n+------------------------------------------------+------+\n| {"a": 4.55, "b": "wxyz", "c": "[true, false]"} | 56 |\n+------------------------------------------------+------+\n1 row in set (0.00 sec)\n\nmysql> SET @j = \'[100, "sakila", [1, 3, 5], 425.05]\';\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> SELECT @j, JSON_STORAGE_SIZE(@j) AS Size;\n+------------------------------------+------+\n| @j | Size |\n+------------------------------------+------+\n| [100, "sakila", [1, 3, 5], 425.05] | 45 |\n+------------------------------------+------+\n1 row in set (0.00 sec)\n\nmysql> SET @j = JSON_SET(@j, \'$[1]\', "json");\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> SELECT @j, JSON_STORAGE_SIZE(@j) AS Size;\n+----------------------------------+------+\n| @j | Size |\n+----------------------------------+------+\n| [100, "json", [1, 3, 5], 425.05] | 43 |\n+----------------------------------+------+\n1 row in set (0.00 sec)\n\nmysql> SET @j = JSON_SET(@j, \'$[2][0]\', JSON_ARRAY(10, 20, 30));\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> SELECT @j, JSON_STORAGE_SIZE(@j) AS Size;\n+---------------------------------------------+------+\n| @j | Size |\n+---------------------------------------------+------+\n| [100, "json", [[10, 20, 30], 3, 5], 425.05] | 56 |\n+---------------------------------------------+------+\n1 row in set (0.00 sec)\n\nmysql> SELECT\n -> JSON_STORAGE_SIZE(\'[100, "sakila", [1, 3, 5], 425.05]\') AS A,\n -> JSON_STORAGE_SIZE(\'{"a": 1000, "b": "a", "c": "[1, 3, 5, 7]"}\') AS B,\n -> JSON_STORAGE_SIZE(\'{"a": 1000, "b": "wxyz", "c": "[1, 3, 5, 7]"}\') AS C,\n -> JSON_STORAGE_SIZE(\'[100, "json", [[10, 20, 30], 3, 5], 425.05]\') AS D;\n+----+----+----+----+\n| A | B | C | D |\n+----+----+----+----+\n| 45 | 44 | 47 | 56 |\n+----+----+----+----+\n1 row in set (0.00 sec)\n','http://dev.mysql.com/doc/refman/5.7/en/json-utility-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (265,25,'MULTILINESTRING','MultiLineString(ls [, ls] ...)\n\nConstructs a MultiLineString value using LineString or WKB LineString\narguments.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/gis-mysql-specific-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/gis-mysql-specific-functions.html'); @@ -356,10 +356,10 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example, INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (275,19,'BIT_COUNT','Syntax:\nBIT_COUNT(N)\n\nReturns the number of bits that are set in the argument N as an\nunsigned 64-bit integer, or NULL if the argument is NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/bit-functions.html\n\n','mysql> SELECT BIT_COUNT(29), BIT_COUNT(b\'101010\');\n -> 4, 3\n','http://dev.mysql.com/doc/refman/5.7/en/bit-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (276,33,'ST_POINTFROMWKB','ST_PointFromWKB(wkb[, srid])\n\nConstructs a Point value using its WKB representation and SRID.\n\nThe result is NULL if the WKB or SRID argument is NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/gis-wkb-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/gis-wkb-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (277,7,'JSON_PRETTY','JSON_PRETTY(json_val)\n\nProvides pretty-printing of JSON values similar to that implemented in\nPHP and by other languages and database systems. The value supplied\nmust be a JSON value or a valid string representation of a JSON value.\nExtraneous whitespaces and newlines present in this value have no\neffect on the output. For a NULL value, the function returns NULL. If\nthe value is not a JSON document, or if it cannot cannot be parsed as\none, the function fails with an error.\n\nFormatting of the output from this function adheres to the following\nrules:\n\no Each array element or object member appears on a separate line,\n indented by one additional level as compared to its parent.\n\no Each level of indentation adds two leading spaces.\n\no A comma separating individual array elements or object members is\n printed before the newline that separates the two elements or\n members.\n\no The key and the value of an object member are separated by a colon\n followed by a space (\': \').\n\no An empty object or array is printed on a single line. No space is\n printed between the opening and closing brace.\n\no Special characters in string scalars and key names are escaped\n employing the same rules used by the JSON_QUOTE() function.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/json-utility-functions.html\n\n','mysql> SELECT JSON_PRETTY(\'123\'); # scalar\n+--------------------+\n| JSON_PRETTY(\'123\') |\n+--------------------+\n| 123 |\n+--------------------+\n\nmysql> SELECT JSON_PRETTY("[1,3,5]"); # array\n+------------------------+\n| JSON_PRETTY("[1,3,5]") |\n+------------------------+\n| [\n 1,\n 3,\n 5\n] |\n+------------------------+\n\nmysql> SELECT JSON_PRETTY(\'{"a":"10","b":"15","x":"25"}\'); # object\n+---------------------------------------------+\n| JSON_PRETTY(\'{"a":"10","b":"15","x":"25"}\') |\n+---------------------------------------------+\n| {\n "a": "10",\n "b": "15",\n "x": "25"\n} |\n+---------------------------------------------+\n\nmysql> SELECT JSON_PRETTY(\'["a",1,{"key1":\n > "value1"},"5", "77" ,\n > {"key2":["value3","valueX",\n > "valueY"]},"j", "2" ]\')\\G # nested arrays and objects\n*************************** 1. row ***************************\nJSON_PRETTY(\'["a",1,{"key1":\n "value1"},"5", "77" ,\n {"key2":["value3","valuex",\n "valuey"]},"j", "2" ]\'): [\n "a",\n 1,\n {\n "key1": "value1"\n },\n "5",\n "77",\n {\n "key2": [\n "value3",\n "valuex",\n "valuey"\n ]\n },\n "j",\n "2"\n]\n','http://dev.mysql.com/doc/refman/5.7/en/json-utility-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (278,7,'ST_MAKEENVELOPE','ST_MakeEnvelope(pt1, pt2)\n\nReturns the rectangle that forms the envelope around two points, as a\nPoint, LineString, or Polygon. If any argument is NULL, the return\nvalue is NULL.\n\nCalculations are done using the Cartesian coordinate system rather than\non a sphere, spheroid, or on earth.\n\nGiven two points pt1 and pt2, ST_MakeEnvelope() creates the result\ngeometry on an abstract plane like this:\n\no If pt1 and pt2 are equal, the result is the point pt1.\n\no Otherwise, if (pt1, pt2) is a vertical or horizontal line segment,\n the result is the line segment (pt1, pt2).\n\no Otherwise, the result is a polygon using pt1 and pt2 as diagonal\n points.\n\nThe result geometry has an SRID of 0.\n\nST_MakeEnvelope() requires Point geometry arguments with an SRID of 0.\nAn ER_WRONG_ARGUMENTS error occurs otherwise.\n\nIf any argument is not a syntactically well-formed geometry byte\nstring, or if any coordinate value of the two points is infinite (that\nis, NaN), an ER_GIS_INVALID_DATA error occurs.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/spatial-convenience-functions.html\n\n','mysql> SET @pt1 = ST_GeomFromText(\'POINT(0 0)\');\nmysql> SET @pt2 = ST_GeomFromText(\'POINT(1 1)\');\nmysql> SELECT ST_AsText(ST_MakeEnvelope(@pt1, @pt2));\n+----------------------------------------+\n| ST_AsText(ST_MakeEnvelope(@pt1, @pt2)) |\n+----------------------------------------+\n| POLYGON((0 0,1 0,1 1,0 1,0 0)) |\n+----------------------------------------+\n','http://dev.mysql.com/doc/refman/5.7/en/spatial-convenience-functions.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (278,7,'ST_MAKEENVELOPE','ST_MakeEnvelope(pt1, pt2)\n\nReturns the rectangle that forms the envelope around two points, as a\nPoint, LineString, or Polygon. If any argument is NULL, the return\nvalue is NULL.\n\nCalculations are done using the Cartesian coordinate system rather than\non a sphere, spheroid, or on earth.\n\nGiven two points pt1 and pt2, ST_MakeEnvelope() creates the result\ngeometry on an abstract plane like this:\n\no If pt1 and pt2 are equal, the result is the point pt1.\n\no Otherwise, if (pt1, pt2) is a vertical or horizontal line segment,\n the result is the line segment (pt1, pt2).\n\no Otherwise, the result is a polygon using pt1 and pt2 as diagonal\n points.\n\nThe result geometry has an SRID of 0.\n\nST_MakeEnvelope() requires Point geometry arguments with an SRID of 0.\nAn ER_WRONG_ARGUMENTS error occurs otherwise.\n\nIf any argument is not a syntactically well-formed geometry byte\nstring, or if any coordinate value of the two points is infinite or\nNaN, an ER_GIS_INVALID_DATA error occurs.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/spatial-convenience-functions.html\n\n','mysql> SET @pt1 = ST_GeomFromText(\'POINT(0 0)\');\nmysql> SET @pt2 = ST_GeomFromText(\'POINT(1 1)\');\nmysql> SELECT ST_AsText(ST_MakeEnvelope(@pt1, @pt2));\n+----------------------------------------+\n| ST_AsText(ST_MakeEnvelope(@pt1, @pt2)) |\n+----------------------------------------+\n| POLYGON((0 0,1 0,1 1,0 1,0 0)) |\n+----------------------------------------+\n','http://dev.mysql.com/doc/refman/5.7/en/spatial-convenience-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (279,31,'ST_WITHIN','ST_Within(g1, g2)\n\nReturns 1 or 0 to indicate whether g1 is spatially within g2. This\ntests the opposite relationship as ST_Contains().\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-object-shapes.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-object-shapes.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (280,3,'ACOS','Syntax:\nACOS(X)\n\nReturns the arc cosine of X, that is, the value whose cosine is X.\nReturns NULL if X is not in the range -1 to 1.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html\n\n','mysql> SELECT ACOS(1);\n -> 0\nmysql> SELECT ACOS(1.0001);\n -> NULL\nmysql> SELECT ACOS(0);\n -> 1.5707963267949\n','http://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (281,8,'ISOLATION','Syntax:\nSET [GLOBAL | SESSION] TRANSACTION\n transaction_characteristic [, transaction_characteristic] ...\n\ntransaction_characteristic:\n ISOLATION LEVEL level\n | READ WRITE\n | READ ONLY\n\nlevel:\n REPEATABLE READ\n | READ COMMITTED\n | READ UNCOMMITTED\n | SERIALIZABLE\n\nThis statement specifies transaction characteristics. It takes a list\nof one or more characteristic values separated by commas. These\ncharacteristics set the transaction isolation level or access mode. The\nisolation level is used for operations on InnoDB tables. The access\nmode may be specified as to whether transactions operate in read/write\nor read-only mode.\n\nIn addition, SET TRANSACTION can include an optional GLOBAL or SESSION\nkeyword to indicate the scope of the statement.\n\nScope of Transaction Characteristics\n\nYou can set transaction characteristics globally, for the current\nsession, or for the next transaction:\n\no With the GLOBAL keyword, the statement applies globally for all\n subsequent sessions. Existing sessions are unaffected.\n\no With the SESSION keyword, the statement applies to all subsequent\n transactions performed within the current session.\n\no Without any SESSION or GLOBAL keyword, the statement applies to the\n next (not started) transaction performed within the current session.\n Subsequent transactions revert to using the SESSION isolation level.\n\nA global change to transaction characteristics requires the SUPER\nprivilege. Any session is free to change its session characteristics\n(even in the middle of a transaction), or the characteristics for its\nnext transaction.\n\nSET TRANSACTION without GLOBAL or SESSION is not permitted while there\nis an active transaction:\n\nmysql> START TRANSACTION;\nQuery OK, 0 rows affected (0.02 sec)\n\nmysql> SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;\nERROR 1568 (25001): Transaction characteristics can\'t be changed\nwhile a transaction is in progress\n\nTo set the global default isolation level at server startup, use the\n--transaction-isolation=level option to mysqld on the command line or\nin an option file. Values of level for this option use dashes rather\nthan spaces, so the permissible values are READ-UNCOMMITTED,\nREAD-COMMITTED, REPEATABLE-READ, or SERIALIZABLE. For example, to set\nthe default isolation level to REPEATABLE READ, use these lines in the\n[mysqld] section of an option file:\n\n[mysqld]\ntransaction-isolation = REPEATABLE-READ\n\nIt is possible to check or set the global and session transaction\nisolation levels at runtime by using the transaction_isolation system\nvariable:\n\nSELECT @@GLOBAL.transaction_isolation, @@transaction_isolation;\nSET GLOBAL transaction_isolation=\'REPEATABLE-READ\';\nSET SESSION transaction_isolation=\'SERIALIZABLE\';\n\nPrior to MySQL 5.7.20, use tx_isolation rather than\ntransaction_isolation.\n\nSimilarly, to set the transaction access mode at server startup or at\nruntime, use the --transaction-read-only option or\ntransaction_read_only system variable. By default, these are OFF (the\nmode is read/write) but can be set to ON for a default mode of read\nonly.\n\nPrior to MySQL 5.7.20, use tx_read_only rather than\ntransaction_read_only.\n\nSetting the global or session value of transaction_isolation or\ntransaction_read_only is equivalent to setting the isolation level or\naccess mode with SET GLOBAL TRANSACTION or SET SESSION TRANSACTION.\n\nTransaction Isolation Levels\n\nFor information about transaction isolation levels, see\nhttp://dev.mysql.com/doc/refman/5.7/en/innodb-transaction-isolation-lev\nels.html.\n\nTransaction Access Mode\n\nThe transaction access mode may be specified with SET TRANSACTION. By\ndefault, a transaction takes place in read/write mode, with both reads\nand writes permitted to tables used in the transaction. This mode may\nbe specified explicitly using an access mode of READ WRITE.\n\nIf the transaction access mode is set to READ ONLY, changes to tables\nare prohibited. This may enable storage engines to make performance\nimprovements that are possible when writes are not permitted.\n\nIt is not permitted to specify both READ WRITE and READ ONLY in the\nsame statement.\n\nIn read-only mode, it remains possible to change tables created with\nthe TEMPORARY keyword using DML statements. Changes made with DDL\nstatements are not permitted, just as with permanent tables.\n\nThe READ WRITE and READ ONLY access modes also may be specified for an\nindividual transaction using the START TRANSACTION statement.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/set-transaction.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/set-transaction.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (281,8,'ISOLATION','Syntax:\nSET [GLOBAL | SESSION] TRANSACTION\n transaction_characteristic [, transaction_characteristic] ...\n\ntransaction_characteristic: {\n ISOLATION LEVEL level\n | READ WRITE\n | READ ONLY\n}\n\nlevel: {\n REPEATABLE READ\n | READ COMMITTED\n | READ UNCOMMITTED\n | SERIALIZABLE\n}\n\nThis statement specifies transaction characteristics. It takes a list\nof one or more characteristic values separated by commas. These\ncharacteristics set the transaction isolation level or access mode. The\nisolation level is used for operations on InnoDB tables. The access\nmode may be specified as to whether transactions operate in read/write\nor read-only mode.\n\nIn addition, SET TRANSACTION can include an optional GLOBAL or SESSION\nkeyword to indicate the scope of the statement.\n\nScope of Transaction Characteristics\n\nYou can set transaction characteristics globally, for the current\nsession, or for the next transaction:\n\no With the GLOBAL keyword, the statement applies globally for all\n subsequent sessions. Existing sessions are unaffected.\n\no With the SESSION keyword, the statement applies to all subsequent\n transactions performed within the current session.\n\no Without any SESSION or GLOBAL keyword, the statement applies to the\n next (not started) transaction performed within the current session.\n Subsequent transactions revert to using the SESSION isolation level.\n\nA global change to transaction characteristics requires the SUPER\nprivilege. Any session is free to change its session characteristics\n(even in the middle of a transaction), or the characteristics for its\nnext transaction.\n\nSET TRANSACTION without GLOBAL or SESSION is not permitted while there\nis an active transaction:\n\nmysql> START TRANSACTION;\nQuery OK, 0 rows affected (0.02 sec)\n\nmysql> SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;\nERROR 1568 (25001): Transaction characteristics can\'t be changed\nwhile a transaction is in progress\n\nTo set the global default isolation level at server startup, use the\n--transaction-isolation=level option to mysqld on the command line or\nin an option file. Values of level for this option use dashes rather\nthan spaces, so the permissible values are READ-UNCOMMITTED,\nREAD-COMMITTED, REPEATABLE-READ, or SERIALIZABLE. For example, to set\nthe default isolation level to REPEATABLE READ, use these lines in the\n[mysqld] section of an option file:\n\n[mysqld]\ntransaction-isolation = REPEATABLE-READ\n\nIt is possible to check or set the global and session transaction\nisolation levels at runtime by using the transaction_isolation system\nvariable:\n\nSELECT @@GLOBAL.transaction_isolation, @@transaction_isolation;\nSET GLOBAL transaction_isolation=\'REPEATABLE-READ\';\nSET SESSION transaction_isolation=\'SERIALIZABLE\';\n\nPrior to MySQL 5.7.20, use tx_isolation rather than\ntransaction_isolation.\n\nSimilarly, to set the transaction access mode at server startup or at\nruntime, use the --transaction-read-only option or\ntransaction_read_only system variable. By default, these are OFF (the\nmode is read/write) but can be set to ON for a default mode of read\nonly.\n\nPrior to MySQL 5.7.20, use tx_read_only rather than\ntransaction_read_only.\n\nSetting the global or session value of transaction_isolation or\ntransaction_read_only is equivalent to setting the isolation level or\naccess mode with SET GLOBAL TRANSACTION or SET SESSION TRANSACTION.\n\nTransaction Isolation Levels\n\nFor information about transaction isolation levels, see\nhttp://dev.mysql.com/doc/refman/5.7/en/innodb-transaction-isolation-lev\nels.html.\n\nTransaction Access Mode\n\nThe transaction access mode may be specified with SET TRANSACTION. By\ndefault, a transaction takes place in read/write mode, with both reads\nand writes permitted to tables used in the transaction. This mode may\nbe specified explicitly using an access mode of READ WRITE.\n\nIf the transaction access mode is set to READ ONLY, changes to tables\nare prohibited. This may enable storage engines to make performance\nimprovements that are possible when writes are not permitted.\n\nIt is not permitted to specify both READ WRITE and READ ONLY in the\nsame statement.\n\nIn read-only mode, it remains possible to change tables created with\nthe TEMPORARY keyword using DML statements. Changes made with DDL\nstatements are not permitted, just as with permanent tables.\n\nThe READ WRITE and READ ONLY access modes also may be specified for an\nindividual transaction using the START TRANSACTION statement.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/set-transaction.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/set-transaction.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (282,3,'SIN','Syntax:\nSIN(X)\n\nReturns the sine of X, where X is given in radians.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html\n\n','mysql> SELECT SIN(PI());\n -> 1.2246063538224e-16\nmysql> SELECT ROUND(SIN(PI()));\n -> 0\n','http://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (283,26,'ST_BUFFER','ST_Buffer(g, d[, strategy1[, strategy2[, strategy3]]])\n\nReturns a geometry that represents all points whose distance from the\ngeometry value g is less than or equal to a distance of d, or NULL if\nany argument is NULL. The SRID of the geometry argument must be 0\nbecause ST_Buffer() supports only the Cartesian coordinate system. If\nany geometry argument is not a syntactically well-formed geometry, an\nER_GIS_INVALID_DATA error occurs.\n\nIf the geometry argument is empty, ST_Buffer() returns an empty\ngeometry.\n\nIf the distance is 0, ST_Buffer() returns the geometry argument\nunchanged:\n\nmysql> SET @pt = ST_GeomFromText(\'POINT(0 0)\');\nmysql> SELECT ST_AsText(ST_Buffer(@pt, 0));\n+------------------------------+\n| ST_AsText(ST_Buffer(@pt, 0)) |\n+------------------------------+\n| POINT(0 0) |\n+------------------------------+\n\nST_Buffer() supports negative distances for Polygon and MultiPolygon\nvalues, and for geometry collections containing Polygon or MultiPolygon\nvalues. The result may be an empty geometry. An ER_WRONG_ARGUMENTS\nerror occurs for ST_Buffer() with a negative distance for Point,\nMultiPoint, LineString, and MultiLineString values, and for geometry\ncollections not containing any Polygon or MultiPolygon values.\n\nAs of MySQL 5.7.7, ST_Buffer() permits up to three optional strategy\narguments following the distance argument. Strategies influence buffer\ncomputation. These arguments are byte string values produced by the\nST_Buffer_Strategy() function, to be used for point, join, and end\nstrategies:\n\no Point strategies apply to Point and MultiPoint geometries. If no\n point strategy is specified, the default is\n ST_Buffer_Strategy(\'point_circle\', 32).\n\no Join strategies apply to LineString, MultiLineString, Polygon, and\n MultiPolygon geometries. If no join strategy is specified, the\n default is ST_Buffer_Strategy(\'join_round\', 32).\n\no End strategies apply to LineString and MultiLineString geometries. If\n no end strategy is specified, the default is\n ST_Buffer_Strategy(\'end_round\', 32).\n\nUp to one strategy of each type may be specified, and they may be given\nin any order. If multiple strategies of a given type are specified, an\nER_WRONG_ARGUMENTS error occurs.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/spatial-operator-functions.html\n\n','mysql> SET @pt = ST_GeomFromText(\'POINT(0 0)\');\nmysql> SET @pt_strategy = ST_Buffer_Strategy(\'point_square\');\nmysql> SELECT ST_AsText(ST_Buffer(@pt, 2, @pt_strategy));\n+--------------------------------------------+\n| ST_AsText(ST_Buffer(@pt, 2, @pt_strategy)) |\n+--------------------------------------------+\n| POLYGON((-2 -2,2 -2,2 2,-2 2,-2 -2)) |\n+--------------------------------------------+\n\nmysql> SET @ls = ST_GeomFromText(\'LINESTRING(0 0,0 5,5 5)\');\nmysql> SET @end_strategy = ST_Buffer_Strategy(\'end_flat\');\nmysql> SET @join_strategy = ST_Buffer_Strategy(\'join_round\', 10);\nmysql> SELECT ST_AsText(ST_Buffer(@ls, 5, @end_strategy, @join_strategy))\n+---------------------------------------------------------------+\n| ST_AsText(ST_Buffer(@ls, 5, @end_strategy, @join_strategy)) |\n+---------------------------------------------------------------+\n| POLYGON((5 5,5 10,0 10,-3.5355339059327373 8.535533905932738, |\n| -5 5,-5 0,0 0,5 0,5 5)) |\n+---------------------------------------------------------------+\n','http://dev.mysql.com/doc/refman/5.7/en/spatial-operator-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (284,26,'BUFFER','Buffer(g, d[, strategy1[, strategy2[, strategy3]]])\n\nST_Buffer() and Buffer() are synonyms. For more information, see the\ndescription of ST_Buffer().\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/spatial-operator-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/spatial-operator-functions.html'); @@ -367,32 +367,32 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example, INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (286,7,'WAIT_FOR_EXECUTED_GTID_SET','Syntax:\nWAIT_FOR_EXECUTED_GTID_SET(gtid_set[, timeout])\n\nWait until the server has applied all of the transactions whose global\ntransaction identifiers are contained in gtid_set; that is, until the\ncondition GTID_SUBSET(gtid_subset, @@global.gtid_executed) holds. See\nhttp://dev.mysql.com/doc/refman/5.7/en/replication-gtids-concepts.html\nfor a definition of GTID sets.\n\nIf a timeout is specified, and timeout seconds elapse before all of the\ntransactions in the GTID set have been applied, the function stops\nwaiting. timeout is optional, and the default timeout is 0 seconds, in\nwhich case the function always waits until all of the transactions in\nthe GTID set have been applied.\n\nWAIT_FOR_EXECUTED_GTID_SET() monitors all the GTIDs that are applied on\nthe server, including transactions that arrive from all replication\nchannels and user clients. It does not take into account whether\nreplication channels have been started or stopped.\n\nFor more information, see\nhttp://dev.mysql.com/doc/refman/5.7/en/replication-gtids.html.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/gtid-functions.html\n\n','mysql> SELECT WAIT_FOR_EXECUTED_GTID_SET(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:1-5\');\n -> 0\n','http://dev.mysql.com/doc/refman/5.7/en/gtid-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (287,20,'IS','Syntax:\nIS boolean_value\n\nTests a value against a boolean value, where boolean_value can be TRUE,\nFALSE, or UNKNOWN.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html\n\n','mysql> SELECT 1 IS TRUE, 0 IS FALSE, NULL IS UNKNOWN;\n -> 1, 1, 1\n','http://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (288,32,'GET_FORMAT','Syntax:\nGET_FORMAT({DATE|TIME|DATETIME}, {\'EUR\'|\'USA\'|\'JIS\'|\'ISO\'|\'INTERNAL\'})\n\nReturns a format string. This function is useful in combination with\nthe DATE_FORMAT() and the STR_TO_DATE() functions.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html\n\n','mysql> SELECT DATE_FORMAT(\'2003-10-03\',GET_FORMAT(DATE,\'EUR\'));\n -> \'03.10.2003\'\nmysql> SELECT STR_TO_DATE(\'10.31.2003\',GET_FORMAT(DATE,\'USA\'));\n -> \'2003-10-31\'\n','http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (289,2,'ST_CENTROID','ST_Centroid(mpoly)\n\nReturns the mathematical centroid for the MultiPolygon value mpoly as a\nPoint. The result is not guaranteed to be on the MultiPolygon. If the\nargument is NULL or an empty geometry, the return value is NULL.\n\nThis function processes geometry collections by computing the centroid\npoint for components of highest dimension in the collection. Such\ncomponents are extracted and made into a single MultiPolygon,\nMultiLineString, or MultiPoint for centroid computation. If the\nargument is an empty geometry collection, the return value is NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/gis-polygon-property-functions.html\n\n','mysql> SET @poly =\n -> ST_GeomFromText(\'POLYGON((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7,5 5))\');\nmysql> SELECT ST_GeometryType(@poly),ST_AsText(ST_Centroid(@poly));\n+------------------------+--------------------------------------------+\n| ST_GeometryType(@poly) | ST_AsText(ST_Centroid(@poly)) |\n+------------------------+--------------------------------------------+\n| POLYGON | POINT(4.958333333333333 4.958333333333333) |\n+------------------------+--------------------------------------------+\n','http://dev.mysql.com/doc/refman/5.7/en/gis-polygon-property-functions.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (289,2,'ST_CENTROID','ST_Centroid({poly|mpoly})\n\nReturns the mathematical centroid for the Polygon or MultiPolygon\nargument as a Point. The result is not guaranteed to be on the\nMultiPolygon. If the argument is NULL or an empty geometry, the return\nvalue is NULL.\n\nThis function processes geometry collections by computing the centroid\npoint for components of highest dimension in the collection. Such\ncomponents are extracted and made into a single MultiPolygon,\nMultiLineString, or MultiPoint for centroid computation. If the\nargument is an empty geometry collection, the return value is NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/gis-polygon-property-functions.html\n\n','mysql> SET @poly =\n ST_GeomFromText(\'POLYGON((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7,5 5))\');\nmysql> SELECT ST_GeometryType(@poly),ST_AsText(ST_Centroid(@poly));\n+------------------------+--------------------------------------------+\n| ST_GeometryType(@poly) | ST_AsText(ST_Centroid(@poly)) |\n+------------------------+--------------------------------------------+\n| POLYGON | POINT(4.958333333333333 4.958333333333333) |\n+------------------------+--------------------------------------------+\n','http://dev.mysql.com/doc/refman/5.7/en/gis-polygon-property-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (290,23,'TINYBLOB','TINYBLOB\n\nA BLOB column with a maximum length of 255 (28 − 1) bytes. Each\nTINYBLOB value is stored using a 1-byte length prefix that indicates\nthe number of bytes in the value.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/string-type-overview.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/string-type-overview.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (291,17,'USER','Syntax:\nUSER()\n\nReturns the current MySQL user name and host name as a string in the\nutf8 character set.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/information-functions.html\n\n','mysql> SELECT USER();\n -> \'davida@localhost\'\n','http://dev.mysql.com/doc/refman/5.7/en/information-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (292,21,'REPAIR TABLE','Syntax:\nREPAIR [NO_WRITE_TO_BINLOG | LOCAL]\n TABLE tbl_name [, tbl_name] ...\n [QUICK] [EXTENDED] [USE_FRM]\n\nREPAIR TABLE repairs a possibly corrupted table, for certain storage\nengines only.\n\nThis statement requires SELECT and INSERT privileges for the table.\n\nAlthough normally you should never have to run REPAIR TABLE, if\ndisaster strikes, this statement is very likely to get back all your\ndata from a MyISAM table. If your tables become corrupted often, try to\nfind the reason for it, to eliminate the need to use REPAIR TABLE. See\nhttp://dev.mysql.com/doc/refman/5.7/en/crashing.html, and\nhttp://dev.mysql.com/doc/refman/5.7/en/myisam-table-problems.html.\n\nREPAIR TABLE checks the table to see whether an upgrade is required. If\nso, it performs the upgrade, following the same rules as CHECK TABLE\n... FOR UPGRADE. See [HELP CHECK TABLE], for more information.\n\n*Important*:\n\no Make a backup of a table before performing a table repair operation;\n under some circumstances the operation might cause data loss.\n Possible causes include but are not limited to file system errors.\n See http://dev.mysql.com/doc/refman/5.7/en/backup-and-recovery.html.\n\no If the server crashes during a REPAIR TABLE operation, it is\n essential after restarting it that you immediately execute another\n REPAIR TABLE statement for the table before performing any other\n operations on it. In the worst case, you might have a new clean index\n file without information about the data file, and then the next\n operation you perform could overwrite the data file. This is an\n unlikely but possible scenario that underscores the value of making a\n backup first.\n\no In the event that a table on the master becomes corrupted and you run\n REPAIR TABLE on it, any resulting changes to the original table are\n not propagated to slaves.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/repair-table.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/repair-table.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (293,18,'MERGE','The MERGE storage engine, also known as the MRG_MyISAM engine, is a\ncollection of identical MyISAM tables that can be used as one.\n"Identical" means that all tables have identical column data types and\nindex information. You cannot merge MyISAM tables in which the columns\nare listed in a different order, do not have exactly the same data\ntypes in corresponding columns, or have the indexes in different order.\nHowever, any or all of the MyISAM tables can be compressed with\nmyisampack. See http://dev.mysql.com/doc/refman/5.7/en/myisampack.html.\nDifferences between tables such as these do not matter:\n\no Names of corresponding columns and indexes can differ.\n\no Comments for tables, columns, and indexes can differ.\n\no Table options such as AVG_ROW_LENGTH, MAX_ROWS, or PACK_KEYS can\n differ.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/merge-storage-engine.html\n\n','mysql> CREATE TABLE t1 (\n -> a INT NOT NULL AUTO_INCREMENT PRIMARY KEY,\n -> message CHAR(20)) ENGINE=MyISAM;\nmysql> CREATE TABLE t2 (\n -> a INT NOT NULL AUTO_INCREMENT PRIMARY KEY,\n -> message CHAR(20)) ENGINE=MyISAM;\nmysql> INSERT INTO t1 (message) VALUES (\'Testing\'),(\'table\'),(\'t1\');\nmysql> INSERT INTO t2 (message) VALUES (\'Testing\'),(\'table\'),(\'t2\');\nmysql> CREATE TABLE total (\n -> a INT NOT NULL AUTO_INCREMENT,\n -> message CHAR(20), INDEX(a))\n -> ENGINE=MERGE UNION=(t1,t2) INSERT_METHOD=LAST;\n','http://dev.mysql.com/doc/refman/5.7/en/merge-storage-engine.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (294,27,'SHOW CREATE USER','Syntax:\nSHOW CREATE USER user\n\nThis statement shows the CREATE USER statement that creates the named\nuser. An error occurs if the user does not exist. The statement\nrequires the SELECT privilege for the mysql database, except to display\ninformation for the current user.\n\nTo name the account, use the format described in\nhttp://dev.mysql.com/doc/refman/5.7/en/account-names.html. The host\nname part of the account name, if omitted, defaults to \'%\'. It is also\npossible to specify CURRENT_USER or CURRENT_USER() to refer to the\naccount associated with the current session.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/show-create-user.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/show-create-user.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (294,27,'SHOW CREATE USER','Syntax:\nSHOW CREATE USER user\n\nThis statement shows the CREATE USER statement that creates the named\nuser. An error occurs if the user does not exist. The statement\nrequires the SELECT privilege for the mysql system database, except to\ndisplay information for the current user.\n\nTo name the account, use the format described in\nhttp://dev.mysql.com/doc/refman/5.7/en/account-names.html. The host\nname part of the account name, if omitted, defaults to \'%\'. It is also\npossible to specify CURRENT_USER or CURRENT_USER() to refer to the\naccount associated with the current session.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/show-create-user.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/show-create-user.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (295,31,'ST_DISTANCE','ST_Distance(g1, g2)\n\nReturns the distance between g1 and g2. If either argument is NULL or\nan empty geometry, the return value is NULL.\n\nThis function processes geometry collections by returning the shortest\ndistance among all combinations of the components of the two geometry\narguments.\n\nIf an intermediate or final result produces NaN or a negative number,\nan ER_GIS_INVALID_DATA error occurs.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-object-shapes.html\n\n','mysql> SET @g1 = Point(1,1);\nmysql> SET @g2 = Point(2,2);\nmysql> SELECT ST_Distance(@g1, @g2);\n+-----------------------+\n| ST_Distance(@g1, @g2) |\n+-----------------------+\n| 1.4142135623730951 |\n+-----------------------+\n','http://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-object-shapes.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (296,40,'CREATE TABLE','Syntax:\nCREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name\n (create_definition,...)\n [table_options]\n [partition_options]\n\nCREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name\n [(create_definition,...)]\n [table_options]\n [partition_options]\n [IGNORE | REPLACE]\n [AS] query_expression\n\nCREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name\n { LIKE old_tbl_name | (LIKE old_tbl_name) }\n\ncreate_definition:\n col_name column_definition\n | [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_col_name,...)\n [index_option] ...\n | {INDEX|KEY} [index_name] [index_type] (index_col_name,...)\n [index_option] ...\n | [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY]\n [index_name] [index_type] (index_col_name,...)\n [index_option] ...\n | {FULLTEXT|SPATIAL} [INDEX|KEY] [index_name] (index_col_name,...)\n [index_option] ...\n | [CONSTRAINT [symbol]] FOREIGN KEY\n [index_name] (index_col_name,...) reference_definition\n | CHECK (expr)\n\ncolumn_definition:\n data_type [NOT NULL | NULL] [DEFAULT default_value]\n [AUTO_INCREMENT] [UNIQUE [KEY]] [[PRIMARY] KEY]\n [COMMENT \'string\']\n [COLUMN_FORMAT {FIXED|DYNAMIC|DEFAULT}]\n [STORAGE {DISK|MEMORY|DEFAULT}]\n [reference_definition]\n | data_type [GENERATED ALWAYS] AS (expression)\n [VIRTUAL | STORED] [NOT NULL | NULL]\n [UNIQUE [KEY]] [[PRIMARY] KEY]\n [COMMENT \'string\']\n\ndata_type:\n BIT[(length)]\n | TINYINT[(length)] [UNSIGNED] [ZEROFILL]\n | SMALLINT[(length)] [UNSIGNED] [ZEROFILL]\n | MEDIUMINT[(length)] [UNSIGNED] [ZEROFILL]\n | INT[(length)] [UNSIGNED] [ZEROFILL]\n | INTEGER[(length)] [UNSIGNED] [ZEROFILL]\n | BIGINT[(length)] [UNSIGNED] [ZEROFILL]\n | REAL[(length,decimals)] [UNSIGNED] [ZEROFILL]\n | DOUBLE[(length,decimals)] [UNSIGNED] [ZEROFILL]\n | FLOAT[(length,decimals)] [UNSIGNED] [ZEROFILL]\n | DECIMAL[(length[,decimals])] [UNSIGNED] [ZEROFILL]\n | NUMERIC[(length[,decimals])] [UNSIGNED] [ZEROFILL]\n | DATE\n | TIME[(fsp)]\n | TIMESTAMP[(fsp)]\n | DATETIME[(fsp)]\n | YEAR\n | CHAR[(length)]\n [CHARACTER SET charset_name] [COLLATE collation_name]\n | VARCHAR(length)\n [CHARACTER SET charset_name] [COLLATE collation_name]\n | BINARY[(length)]\n | VARBINARY(length)\n | TINYBLOB\n | BLOB[(length)]\n | MEDIUMBLOB\n | LONGBLOB\n | TINYTEXT\n [CHARACTER SET charset_name] [COLLATE collation_name]\n | TEXT[(length)]\n [CHARACTER SET charset_name] [COLLATE collation_name]\n | MEDIUMTEXT\n [CHARACTER SET charset_name] [COLLATE collation_name]\n | LONGTEXT\n [CHARACTER SET charset_name] [COLLATE collation_name]\n | ENUM(value1,value2,value3,...)\n [CHARACTER SET charset_name] [COLLATE collation_name]\n | SET(value1,value2,value3,...)\n [CHARACTER SET charset_name] [COLLATE collation_name]\n | JSON\n | spatial_type\n\nindex_col_name:\n col_name [(length)] [ASC | DESC]\n\nindex_type:\n USING {BTREE | HASH}\n\nindex_option:\n KEY_BLOCK_SIZE [=] value\n | index_type\n | WITH PARSER parser_name\n | COMMENT \'string\'\n\nreference_definition:\n REFERENCES tbl_name (index_col_name,...)\n [MATCH FULL | MATCH PARTIAL | MATCH SIMPLE]\n [ON DELETE reference_option]\n [ON UPDATE reference_option]\n\nreference_option:\n RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT\n\ntable_options:\n table_option [[,] table_option] ...\n\ntable_option:\n AUTO_INCREMENT [=] value\n | AVG_ROW_LENGTH [=] value\n | [DEFAULT] CHARACTER SET [=] charset_name\n | CHECKSUM [=] {0 | 1}\n | [DEFAULT] COLLATE [=] collation_name\n | COMMENT [=] \'string\'\n | COMPRESSION [=] {\'ZLIB\'|\'LZ4\'|\'NONE\'}\n | CONNECTION [=] \'connect_string\'\n | {DATA|INDEX} DIRECTORY [=] \'absolute path to directory\'\n | DELAY_KEY_WRITE [=] {0 | 1}\n | ENCRYPTION [=] {\'Y\' | \'N\'}\n | ENGINE [=] engine_name\n | INSERT_METHOD [=] { NO | FIRST | LAST }\n | KEY_BLOCK_SIZE [=] value\n | MAX_ROWS [=] value\n | MIN_ROWS [=] value\n | PACK_KEYS [=] {0 | 1 | DEFAULT}\n | PASSWORD [=] \'string\'\n | ROW_FORMAT [=] {DEFAULT|DYNAMIC|FIXED|COMPRESSED|REDUNDANT|COMPACT}\n | STATS_AUTO_RECALC [=] {DEFAULT|0|1}\n | STATS_PERSISTENT [=] {DEFAULT|0|1}\n | STATS_SAMPLE_PAGES [=] value\n | TABLESPACE tablespace_name [STORAGE {DISK|MEMORY|DEFAULT}]\n | UNION [=] (tbl_name[,tbl_name]...)\n\npartition_options:\n PARTITION BY\n { [LINEAR] HASH(expr)\n | [LINEAR] KEY [ALGORITHM={1|2}] (column_list)\n | RANGE{(expr) | COLUMNS(column_list)}\n | LIST{(expr) | COLUMNS(column_list)} }\n [PARTITIONS num]\n [SUBPARTITION BY\n { [LINEAR] HASH(expr)\n | [LINEAR] KEY [ALGORITHM={1|2}] (column_list) }\n [SUBPARTITIONS num]\n ]\n [(partition_definition [, partition_definition] ...)]\n\npartition_definition:\n PARTITION partition_name\n [VALUES\n {LESS THAN {(expr | value_list) | MAXVALUE}\n |\n IN (value_list)}]\n [[STORAGE] ENGINE [=] engine_name]\n [COMMENT [=] \'string\' ]\n [DATA DIRECTORY [=] \'data_dir\']\n [INDEX DIRECTORY [=] \'index_dir\']\n [MAX_ROWS [=] max_number_of_rows]\n [MIN_ROWS [=] min_number_of_rows]\n [TABLESPACE [=] tablespace_name]\n [(subpartition_definition [, subpartition_definition] ...)]\n\nsubpartition_definition:\n SUBPARTITION logical_name\n [[STORAGE] ENGINE [=] engine_name]\n [COMMENT [=] \'string\' ]\n [DATA DIRECTORY [=] \'data_dir\']\n [INDEX DIRECTORY [=] \'index_dir\']\n [MAX_ROWS [=] max_number_of_rows]\n [MIN_ROWS [=] min_number_of_rows]\n [TABLESPACE [=] tablespace_name]\n\nquery_expression:\n SELECT ... (Some valid select or union statement)\n\nCREATE TABLE creates a table with the given name. You must have the\nCREATE privilege for the table.\n\nBy default, tables are created in the default database, using the\nInnoDB storage engine. An error occurs if the table exists, if there is\nno default database, or if the database does not exist.\n\nFor information about the physical representation of a table, see\nhttp://dev.mysql.com/doc/refman/5.7/en/create-table-files.html.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/create-table.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/create-table.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (296,40,'CREATE TABLE','Syntax:\nCREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name\n (create_definition,...)\n [table_options]\n [partition_options]\n\nCREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name\n [(create_definition,...)]\n [table_options]\n [partition_options]\n [IGNORE | REPLACE]\n [AS] query_expression\n\nCREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name\n { LIKE old_tbl_name | (LIKE old_tbl_name) }\n\ncreate_definition:\n col_name column_definition\n | [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (key_part,...)\n [index_option] ...\n | {INDEX|KEY} [index_name] [index_type] (key_part,...)\n [index_option] ...\n | [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY]\n [index_name] [index_type] (key_part,...)\n [index_option] ...\n | {FULLTEXT|SPATIAL} [INDEX|KEY] [index_name] (key_part,...)\n [index_option] ...\n | [CONSTRAINT [symbol]] FOREIGN KEY\n [index_name] (col_name,...) reference_definition\n | CHECK (expr)\n\ncolumn_definition:\n data_type [NOT NULL | NULL] [DEFAULT default_value]\n [AUTO_INCREMENT] [UNIQUE [KEY]] [[PRIMARY] KEY]\n [COMMENT \'string\']\n [COLUMN_FORMAT {FIXED|DYNAMIC|DEFAULT}]\n [STORAGE {DISK|MEMORY|DEFAULT}]\n [reference_definition]\n | data_type [GENERATED ALWAYS] AS (expression)\n [VIRTUAL | STORED] [NOT NULL | NULL]\n [UNIQUE [KEY]] [[PRIMARY] KEY]\n [COMMENT \'string\']\n\ndata_type:\n (see http://dev.mysql.com/doc/refman/5.7/en/data-types.html)\n\nkey_part:\n col_name [(length)] [ASC | DESC]\n\nindex_type:\n USING {BTREE | HASH}\n\nindex_option:\n KEY_BLOCK_SIZE [=] value\n | index_type\n | WITH PARSER parser_name\n | COMMENT \'string\'\n\nreference_definition:\n REFERENCES tbl_name (key_part,...)\n [MATCH FULL | MATCH PARTIAL | MATCH SIMPLE]\n [ON DELETE reference_option]\n [ON UPDATE reference_option]\n\nreference_option:\n RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT\n\ntable_options:\n table_option [[,] table_option] ...\n\ntable_option:\n AUTO_INCREMENT [=] value\n | AVG_ROW_LENGTH [=] value\n | [DEFAULT] CHARACTER SET [=] charset_name\n | CHECKSUM [=] {0 | 1}\n | [DEFAULT] COLLATE [=] collation_name\n | COMMENT [=] \'string\'\n | COMPRESSION [=] {\'ZLIB\'|\'LZ4\'|\'NONE\'}\n | CONNECTION [=] \'connect_string\'\n | {DATA|INDEX} DIRECTORY [=] \'absolute path to directory\'\n | DELAY_KEY_WRITE [=] {0 | 1}\n | ENCRYPTION [=] {\'Y\' | \'N\'}\n | ENGINE [=] engine_name\n | INSERT_METHOD [=] { NO | FIRST | LAST }\n | KEY_BLOCK_SIZE [=] value\n | MAX_ROWS [=] value\n | MIN_ROWS [=] value\n | PACK_KEYS [=] {0 | 1 | DEFAULT}\n | PASSWORD [=] \'string\'\n | ROW_FORMAT [=] {DEFAULT|DYNAMIC|FIXED|COMPRESSED|REDUNDANT|COMPACT}\n | STATS_AUTO_RECALC [=] {DEFAULT|0|1}\n | STATS_PERSISTENT [=] {DEFAULT|0|1}\n | STATS_SAMPLE_PAGES [=] value\n | TABLESPACE tablespace_name [STORAGE {DISK|MEMORY|DEFAULT}]\n | UNION [=] (tbl_name[,tbl_name]...)\n\npartition_options:\n PARTITION BY\n { [LINEAR] HASH(expr)\n | [LINEAR] KEY [ALGORITHM={1|2}] (column_list)\n | RANGE{(expr) | COLUMNS(column_list)}\n | LIST{(expr) | COLUMNS(column_list)} }\n [PARTITIONS num]\n [SUBPARTITION BY\n { [LINEAR] HASH(expr)\n | [LINEAR] KEY [ALGORITHM={1|2}] (column_list) }\n [SUBPARTITIONS num]\n ]\n [(partition_definition [, partition_definition] ...)]\n\npartition_definition:\n PARTITION partition_name\n [VALUES\n {LESS THAN {(expr | value_list) | MAXVALUE}\n |\n IN (value_list)}]\n [[STORAGE] ENGINE [=] engine_name]\n [COMMENT [=] \'string\' ]\n [DATA DIRECTORY [=] \'data_dir\']\n [INDEX DIRECTORY [=] \'index_dir\']\n [MAX_ROWS [=] max_number_of_rows]\n [MIN_ROWS [=] min_number_of_rows]\n [TABLESPACE [=] tablespace_name]\n [(subpartition_definition [, subpartition_definition] ...)]\n\nsubpartition_definition:\n SUBPARTITION logical_name\n [[STORAGE] ENGINE [=] engine_name]\n [COMMENT [=] \'string\' ]\n [DATA DIRECTORY [=] \'data_dir\']\n [INDEX DIRECTORY [=] \'index_dir\']\n [MAX_ROWS [=] max_number_of_rows]\n [MIN_ROWS [=] min_number_of_rows]\n [TABLESPACE [=] tablespace_name]\n\nquery_expression:\n SELECT ... (Some valid select or union statement)\n\nCREATE TABLE creates a table with the given name. You must have the\nCREATE privilege for the table.\n\nBy default, tables are created in the default database, using the\nInnoDB storage engine. An error occurs if the table exists, if there is\nno default database, or if the database does not exist.\n\nFor information about the physical representation of a table, see\nhttp://dev.mysql.com/doc/refman/5.7/en/create-table-files.html.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/create-table.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/create-table.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (297,32,'MICROSECOND','Syntax:\nMICROSECOND(expr)\n\nReturns the microseconds from the time or datetime expression expr as a\nnumber in the range from 0 to 999999.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html\n\n','mysql> SELECT MICROSECOND(\'12:00:00.123456\');\n -> 123456\nmysql> SELECT MICROSECOND(\'2009-12-31 23:59:59.000010\');\n -> 10\n','http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (298,40,'CREATE SERVER','Syntax:\nCREATE SERVER server_name\n FOREIGN DATA WRAPPER wrapper_name\n OPTIONS (option [, option] ...)\n\noption:\n { HOST character-literal\n | DATABASE character-literal\n | USER character-literal\n | PASSWORD character-literal\n | SOCKET character-literal\n | OWNER character-literal\n | PORT numeric-literal }\n\nThis statement creates the definition of a server for use with the\nFEDERATED storage engine. The CREATE SERVER statement creates a new row\nin the servers table in the mysql database. This statement requires the\nSUPER privilege.\n\nThe server_name should be a unique reference to the server. Server\ndefinitions are global within the scope of the server, it is not\npossible to qualify the server definition to a specific database.\nserver_name has a maximum length of 64 characters (names longer than 64\ncharacters are silently truncated), and is case insensitive. You may\nspecify the name as a quoted string.\n\nThe wrapper_name should be mysql, and may be quoted with single\nquotation marks. Other values for wrapper_name are not currently\nsupported.\n\nFor each option you must specify either a character literal or numeric\nliteral. Character literals are UTF-8, support a maximum length of 64\ncharacters and default to a blank (empty) string. String literals are\nsilently truncated to 64 characters. Numeric literals must be a number\nbetween 0 and 9999, default value is 0.\n\n*Note*:\n\nThe OWNER option is currently not applied, and has no effect on the\nownership or operation of the server connection that is created.\n\nThe CREATE SERVER statement creates an entry in the mysql.servers table\nthat can later be used with the CREATE TABLE statement when creating a\nFEDERATED table. The options that you specify will be used to populate\nthe columns in the mysql.servers table. The table columns are\nServer_name, Host, Db, Username, Password, Port and Socket.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/create-server.html\n\n','CREATE SERVER s\nFOREIGN DATA WRAPPER mysql\nOPTIONS (USER \'Remote\', HOST \'198.51.100.106\', DATABASE \'test\');\n','http://dev.mysql.com/doc/refman/5.7/en/create-server.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (298,40,'CREATE SERVER','Syntax:\nCREATE SERVER server_name\n FOREIGN DATA WRAPPER wrapper_name\n OPTIONS (option [, option] ...)\n\noption:\n { HOST character-literal\n | DATABASE character-literal\n | USER character-literal\n | PASSWORD character-literal\n | SOCKET character-literal\n | OWNER character-literal\n | PORT numeric-literal }\n\nThis statement creates the definition of a server for use with the\nFEDERATED storage engine. The CREATE SERVER statement creates a new row\nin the servers table in the mysql database. This statement requires the\nSUPER privilege.\n\nThe server_name should be a unique reference to the server. Server\ndefinitions are global within the scope of the server, it is not\npossible to qualify the server definition to a specific database.\nserver_name has a maximum length of 64 characters (names longer than 64\ncharacters are silently truncated), and is case insensitive. You may\nspecify the name as a quoted string.\n\nThe wrapper_name is an identifier and may be quoted with single\nquotation marks.\n\nFor each option you must specify either a character literal or numeric\nliteral. Character literals are UTF-8, support a maximum length of 64\ncharacters and default to a blank (empty) string. String literals are\nsilently truncated to 64 characters. Numeric literals must be a number\nbetween 0 and 9999, default value is 0.\n\n*Note*:\n\nThe OWNER option is currently not applied, and has no effect on the\nownership or operation of the server connection that is created.\n\nThe CREATE SERVER statement creates an entry in the mysql.servers table\nthat can later be used with the CREATE TABLE statement when creating a\nFEDERATED table. The options that you specify will be used to populate\nthe columns in the mysql.servers table. The table columns are\nServer_name, Host, Db, Username, Password, Port and Socket.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/create-server.html\n\n','CREATE SERVER s\nFOREIGN DATA WRAPPER mysql\nOPTIONS (USER \'Remote\', HOST \'198.51.100.106\', DATABASE \'test\');\n','http://dev.mysql.com/doc/refman/5.7/en/create-server.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (299,7,'ST_DISTANCE_SPHERE','ST_Distance_Sphere(g1, g2 [, radius])\n\nReturns the mimimum spherical distance between two points and/or\nmultipoints on a sphere, in meters, or NULL if any geometry argument is\nNULL or empty.\n\nCalculations use a spherical earth and a configurable radius. The\noptional radius argument should be given in meters. If omitted, the\ndefault radius is 6,370,986 meters. An ER_WRONG_ARGUMENTS error occurs\nif the radius argument is present but not positive.\n\nThe geometry arguments should consist of points that specify\n(longitude, latitude) coordinate values:\n\no Longitude and latitude are the first and second coordinates of the\n point, respectively.\n\no Both coordinates are in degrees.\n\no Longitude values must be in the range (-180, 180]. Positive values\n are east of the prime meridian.\n\no Latitude values must be in the range [-90, 90]. Positive values are\n north of the equator.\n\nSupported argument combinations are (Point, Point), (Point,\nMultiPoint), and (MultiPoint, Point). An ER_GIS_UNSUPPORTED_ARGUMENT\nerror occurs for other combinations.\n\nIf any geometry argument is not a syntactically well-formed geometry\nbyte string, an ER_GIS_INVALID_DATA error occurs.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/spatial-convenience-functions.html\n\n','mysql> SET @pt1 = ST_GeomFromText(\'POINT(0 0)\');\nmysql> SET @pt2 = ST_GeomFromText(\'POINT(180 0)\');\nmysql> SELECT ST_Distance_Sphere(@pt1, @pt2);\n+--------------------------------+\n| ST_Distance_Sphere(@pt1, @pt2) |\n+--------------------------------+\n| 20015042.813723423 |\n+--------------------------------+\n','http://dev.mysql.com/doc/refman/5.7/en/spatial-convenience-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (300,33,'ST_POLYFROMWKB','ST_PolyFromWKB(wkb[, srid]), ST_PolygonFromWKB(wkb[, srid])\n\nConstructs a Polygon value using its WKB representation and SRID.\n\nThe result is NULL if the WKB or SRID argument is NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/gis-wkb-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/gis-wkb-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (301,32,'MAKETIME','Syntax:\nMAKETIME(hour,minute,second)\n\nReturns a time value calculated from the hour, minute, and second\narguments.\n\nThe second argument can have a fractional part.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html\n\n','mysql> SELECT MAKETIME(12,15,30);\n -> \'12:15:30\'\n','http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (302,32,'CURDATE','Syntax:\nCURDATE()\n\nReturns the current date as a value in \'YYYY-MM-DD\' or YYYYMMDD format,\ndepending on whether the function is used in a string or numeric\ncontext.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html\n\n','mysql> SELECT CURDATE();\n -> \'2008-06-13\'\nmysql> SELECT CURDATE() + 0;\n -> 20080613\n','http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (303,10,'SET PASSWORD','Syntax:\nSET PASSWORD [FOR user] = password_option\n\npassword_option: {\n \'auth_string\'\n | PASSWORD(\'auth_string\')\n}\n\nThe SET PASSWORD statement assigns a password to a MySQL user account.\n\'auth_string\' represents a cleartext (unencrypted) password.\n\n*Note*:\n\no SET PASSWORD ... = PASSWORD(\'auth_string\') syntax is deprecated as of\n MySQL 5.7.6 and will be removed in a future MySQL release.\n\no SET PASSWORD ... = \'auth_string\' syntax is not deprecated, but ALTER\n USER is the preferred statement for account alterations, including\n assigning passwords. For example:\n\nALTER USER user IDENTIFIED BY \'auth_string\';\n\n*Important*:\n\nUnder some circumstances, SET PASSWORD may be recorded in server logs\nor on the client side in a history file such as ~/.mysql_history, which\nmeans that cleartext passwords may be read by anyone having read access\nto that information. For information about the conditions under which\nthis occurs for the server logs and how to control it, see\nhttp://dev.mysql.com/doc/refman/5.7/en/password-logging.html. For\nsimilar information about client-side logging, see\nhttp://dev.mysql.com/doc/refman/5.7/en/mysql-logging.html.\n\nSET PASSWORD can be used with or without a FOR clause that explicitly\nnames a user account:\n\no With a FOR user clause, the statement sets the password for the named\n account, which must exist:\n\nSET PASSWORD FOR \'jeffrey\'@\'localhost\' = \'auth_string\';\n\no With no FOR user clause, the statement sets the password for the\n current user:\n\nSET PASSWORD = \'auth_string\';\n\n Any client who connects to the server using a nonanonymous account\n can change the password for that account. To see which account the\n server authenticated you as, invoke the CURRENT_USER() function:\n\nSELECT CURRENT_USER();\n\nSetting the password for a named account (with a FOR clause) requires\nthe UPDATE privilege for the mysql database. Setting the password for\nyourself (for a nonanonymous account with no FOR clause) requires no\nspecial privileges. When the read_only system variable is enabled, SET\nPASSWORD requires the SUPER privilege in addition to any other required\nprivileges.\n\nIf a FOR user clause is given, the account name uses the format\ndescribed in http://dev.mysql.com/doc/refman/5.7/en/account-names.html.\nFor example:\n\nSET PASSWORD FOR \'bob\'@\'%.example.org\' = \'auth_string\';\n\nThe host name part of the account name, if omitted, defaults to \'%\'.\n\nThe password can be specified in these ways:\n\no Use a string without PASSWORD()\n\nSET PASSWORD FOR \'jeffrey\'@\'localhost\' = \'password\';\n\n SET PASSWORD interprets the string as a cleartext string, passes it\n to the authentication plugin associated with the account, and stores\n the result returned by the plugin in the mysql.user account row. (The\n plugin is given the opportunity to hash the value into the encryption\n format it expects. The plugin may use the value as specified, in\n which case no hashing occurs.)\n\no Use the PASSWORD() function (deprecated as of MySQL 5.7.6)\n\nSET PASSWORD FOR \'jeffrey\'@\'localhost\' = PASSWORD(\'password\');\n\n The PASSWORD() argument is the cleartext (unencrypted) password.\n PASSWORD() hashes the password and returns the encrypted password\n string for storage in the mysql.user account row.\n\n The PASSWORD() function hashes the password using the hashing method\n determined by the value of the old_passwords system variable value.\n Be sure that old_passwords has the value corresponding to the hashing\n method expected by the authentication plugin associated with the\n account. For example, if the account uses the mysql_native_password\n plugin, the old_passwords value must be 0:\n\nSET old_passwords = 0;\nSET PASSWORD FOR \'jeffrey\'@\'localhost\' = PASSWORD(\'password\');\n\n If the old_passwords value differs from that required by the\n authentication plugin, the hashed password value returned by\n PASSWORD() will not by usable by the plugin and correct\n authentication of client connections will not occur.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/set-password.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/set-password.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (303,10,'SET PASSWORD','Syntax:\nSET PASSWORD [FOR user] = password_option\n\npassword_option: {\n \'auth_string\'\n | PASSWORD(\'auth_string\')\n}\n\nThe SET PASSWORD statement assigns a password to a MySQL user account.\n\'auth_string\' represents a cleartext (unencrypted) password.\n\n*Note*:\n\no SET PASSWORD ... = PASSWORD(\'auth_string\') syntax is deprecated as of\n MySQL 5.7.6 and will be removed in a future MySQL release.\n\no SET PASSWORD ... = \'auth_string\' syntax is not deprecated, but ALTER\n USER is the preferred statement for account alterations, including\n assigning passwords. For example:\n\nALTER USER user IDENTIFIED BY \'auth_string\';\n\n*Important*:\n\nUnder some circumstances, SET PASSWORD may be recorded in server logs\nor on the client side in a history file such as ~/.mysql_history, which\nmeans that cleartext passwords may be read by anyone having read access\nto that information. For information about the conditions under which\nthis occurs for the server logs and how to control it, see\nhttp://dev.mysql.com/doc/refman/5.7/en/password-logging.html. For\nsimilar information about client-side logging, see\nhttp://dev.mysql.com/doc/refman/5.7/en/mysql-logging.html.\n\nSET PASSWORD can be used with or without a FOR clause that explicitly\nnames a user account:\n\no With a FOR user clause, the statement sets the password for the named\n account, which must exist:\n\nSET PASSWORD FOR \'jeffrey\'@\'localhost\' = \'auth_string\';\n\no With no FOR user clause, the statement sets the password for the\n current user:\n\nSET PASSWORD = \'auth_string\';\n\n Any client who connects to the server using a nonanonymous account\n can change the password for that account. (In particular, you can\n change your own password.) To see which account the server\n authenticated you as, invoke the CURRENT_USER() function:\n\nSELECT CURRENT_USER();\n\nSetting the password for a named account (with a FOR clause) requires\nthe UPDATE privilege for the mysql system database. Setting the\npassword for yourself (for a nonanonymous account with no FOR clause)\nrequires no special privileges. When the read_only system variable is\nenabled, SET PASSWORD requires the SUPER privilege in addition to any\nother required privileges.\n\nIf a FOR user clause is given, the account name uses the format\ndescribed in http://dev.mysql.com/doc/refman/5.7/en/account-names.html.\nFor example:\n\nSET PASSWORD FOR \'bob\'@\'%.example.org\' = \'auth_string\';\n\nThe host name part of the account name, if omitted, defaults to \'%\'.\n\nThe password can be specified in these ways:\n\no Use a string without PASSWORD()\n\nSET PASSWORD FOR \'jeffrey\'@\'localhost\' = \'password\';\n\n SET PASSWORD interprets the string as a cleartext string, passes it\n to the authentication plugin associated with the account, and stores\n the result returned by the plugin in the mysql.user account row. (The\n plugin is given the opportunity to hash the value into the encryption\n format it expects. The plugin may use the value as specified, in\n which case no hashing occurs.)\n\no Use the PASSWORD() function (deprecated as of MySQL 5.7.6)\n\nSET PASSWORD FOR \'jeffrey\'@\'localhost\' = PASSWORD(\'password\');\n\n The PASSWORD() argument is the cleartext (unencrypted) password.\n PASSWORD() hashes the password and returns the encrypted password\n string for storage in the mysql.user account row.\n\n The PASSWORD() function hashes the password using the hashing method\n determined by the value of the old_passwords system variable value.\n Be sure that old_passwords has the value corresponding to the hashing\n method expected by the authentication plugin associated with the\n account. For example, if the account uses the mysql_native_password\n plugin, the old_passwords value must be 0:\n\nSET old_passwords = 0;\nSET PASSWORD FOR \'jeffrey\'@\'localhost\' = PASSWORD(\'password\');\n\n If the old_passwords value differs from that required by the\n authentication plugin, the hashed password value returned by\n PASSWORD() will not by usable by the plugin and correct\n authentication of client connections will not occur.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/set-password.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/set-password.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (304,7,'JSON_QUOTE','Syntax:\nJSON_QUOTE(string)\n\nQuotes a string as a JSON value by wrapping it with double quote\ncharacters and escaping interior quote and other characters, then\nreturning the result as a utf8mb4 string. Returns NULL if the argument\nis NULL.\n\nThis function is typically used to produce a valid JSON string literal\nfor inclusion within a JSON document.\n\nCertain special characters are escaped with backslashes per the escape\nsequences shown in\nhttp://dev.mysql.com/doc/refman/5.7/en/json-modification-functions.html\n#json-unquote-character-escape-sequences.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/json-creation-functions.html\n\n','mysql> SELECT JSON_QUOTE(\'null\'), JSON_QUOTE(\'"null"\');\n+--------------------+----------------------+\n| JSON_QUOTE(\'null\') | JSON_QUOTE(\'"null"\') |\n+--------------------+----------------------+\n| "null" | "\\"null\\"" |\n+--------------------+----------------------+\nmysql> SELECT JSON_QUOTE(\'[1, 2, 3]\');\n+-------------------------+\n| JSON_QUOTE(\'[1, 2, 3]\') |\n+-------------------------+\n| "[1, 2, 3]" |\n+-------------------------+\n','http://dev.mysql.com/doc/refman/5.7/en/json-creation-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (305,17,'DATABASE','Syntax:\nDATABASE()\n\nReturns the default (current) database name as a string in the utf8\ncharacter set. If there is no default database, DATABASE() returns\nNULL. Within a stored routine, the default database is the database\nthat the routine is associated with, which is not necessarily the same\nas the database that is the default in the calling context.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/information-functions.html\n\n','mysql> SELECT DATABASE();\n -> \'test\'\n','http://dev.mysql.com/doc/refman/5.7/en/information-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (306,6,'IF FUNCTION','Syntax:\nIF(expr1,expr2,expr3)\n\nIf expr1 is TRUE (expr1 <> 0 and expr1 <> NULL), IF() returns expr2.\nOtherwise, it returns expr3.\n\n*Note*:\n\nThere is also an IF statement, which differs from the IF() function\ndescribed here. See [HELP IF statement].\n\nIf only one of expr2 or expr3 is explicitly NULL, the result type of\nthe IF() function is the type of the non-NULL expression.\n\nThe default return type of IF() (which may matter when it is stored\ninto a temporary table) is calculated as follows:\n\no If expr2 or expr3 produce a string, the result is a string.\n\n If expr2 and expr3 are both strings, the result is case-sensitive if\n either string is case sensitive.\n\no If expr2 or expr3 produce a floating-point value, the result is a\n floating-point value.\n\no If expr2 or expr3 produce an integer, the result is an integer.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html\n\n','mysql> SELECT IF(1>2,2,3);\n -> 3\nmysql> SELECT IF(1<2,\'yes\',\'no\');\n -> \'yes\'\nmysql> SELECT IF(STRCMP(\'test\',\'test1\'),\'no\',\'yes\');\n -> \'no\'\n','http://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (307,33,'POINTFROMWKB','PointFromWKB(wkb[, srid])\n\nST_PointFromWKB() and PointFromWKB() are synonyms. For more\ninformation, see the description of ST_PointFromWKB().\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/gis-wkb-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/gis-wkb-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (308,3,'POWER','Syntax:\nPOWER(X,Y)\n\nThis is a synonym for POW().\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (309,3,'ATAN','Syntax:\nATAN(X)\n\nReturns the arc tangent of X, that is, the value whose tangent is X.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html\n\n','mysql> SELECT ATAN(2);\n -> 1.1071487177941\nmysql> SELECT ATAN(-2);\n -> -1.1071487177941\n','http://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (310,27,'SHOW PROFILE','Syntax:\nSHOW PROFILE [type [, type] ... ]\n [FOR QUERY n]\n [LIMIT row_count [OFFSET offset]]\n\ntype:\n ALL\n | BLOCK IO\n | CONTEXT SWITCHES\n | CPU\n | IPC\n | MEMORY\n | PAGE FAULTS\n | SOURCE\n | SWAPS\n\nThe SHOW PROFILE and SHOW PROFILES statements display profiling\ninformation that indicates resource usage for statements executed\nduring the course of the current session.\n\n*Note*:\n\nThese statements are deprecated and will be removed in a future MySQL\nrelease. Use the Performance Schema instead; see\nhttp://dev.mysql.com/doc/refman/5.7/en/performance-schema-query-profili\nng.html.\n\nProfiling is controlled by the profiling session variable, which has a\ndefault value of 0 (OFF). Profiling is enabled by setting profiling to\n1 or ON:\n\nmysql> SET profiling = 1;\n\nSHOW PROFILES displays a list of the most recent statements sent to the\nserver. The size of the list is controlled by the\nprofiling_history_size session variable, which has a default value of\n15. The maximum value is 100. Setting the value to 0 has the practical\neffect of disabling profiling.\n\nAll statements are profiled except SHOW PROFILE and SHOW PROFILES, so\nyou will find neither of those statements in the profile list.\nMalformed statements are profiled. For example, SHOW PROFILING is an\nillegal statement, and a syntax error occurs if you try to execute it,\nbut it will show up in the profiling list.\n\nSHOW PROFILE displays detailed information about a single statement.\nWithout the FOR QUERY n clause, the output pertains to the most\nrecently executed statement. If FOR QUERY n is included, SHOW PROFILE\ndisplays information for statement n. The values of n correspond to the\nQuery_ID values displayed by SHOW PROFILES.\n\nThe LIMIT row_count clause may be given to limit the output to\nrow_count rows. If LIMIT is given, OFFSET offset may be added to begin\nthe output offset rows into the full set of rows.\n\nBy default, SHOW PROFILE displays Status and Duration columns. The\nStatus values are like the State values displayed by SHOW PROCESSLIST,\nalthough there might be some minor differences in interpretion for the\ntwo statements for some status values (see\nhttp://dev.mysql.com/doc/refman/5.7/en/thread-information.html).\n\nOptional type values may be specified to display specific additional\ntypes of information:\n\no ALL displays all information\n\no BLOCK IO displays counts for block input and output operations\n\no CONTEXT SWITCHES displays counts for voluntary and involuntary\n context switches\n\no CPU displays user and system CPU usage times\n\no IPC displays counts for messages sent and received\n\no MEMORY is not currently implemented\n\no PAGE FAULTS displays counts for major and minor page faults\n\no SOURCE displays the names of functions from the source code, together\n with the name and line number of the file in which the function\n occurs\n\no SWAPS displays swap counts\n\nProfiling is enabled per session. When a session ends, its profiling\ninformation is lost.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/show-profile.html\n\n','mysql> SELECT @@profiling;\n+-------------+\n| @@profiling |\n+-------------+\n| 0 |\n+-------------+\n1 row in set (0.00 sec)\n\nmysql> SET profiling = 1;\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> DROP TABLE IF EXISTS t1;\nQuery OK, 0 rows affected, 1 warning (0.00 sec)\n\nmysql> CREATE TABLE T1 (id INT);\nQuery OK, 0 rows affected (0.01 sec)\n\nmysql> SHOW PROFILES;\n+----------+----------+--------------------------+\n| Query_ID | Duration | Query |\n+----------+----------+--------------------------+\n| 0 | 0.000088 | SET PROFILING = 1 |\n| 1 | 0.000136 | DROP TABLE IF EXISTS t1 |\n| 2 | 0.011947 | CREATE TABLE t1 (id INT) |\n+----------+----------+--------------------------+\n3 rows in set (0.00 sec)\n\nmysql> SHOW PROFILE;\n+----------------------+----------+\n| Status | Duration |\n+----------------------+----------+\n| checking permissions | 0.000040 |\n| creating table | 0.000056 |\n| After create | 0.011363 |\n| query end | 0.000375 |\n| freeing items | 0.000089 |\n| logging slow query | 0.000019 |\n| cleaning up | 0.000005 |\n+----------------------+----------+\n7 rows in set (0.00 sec)\n\nmysql> SHOW PROFILE FOR QUERY 1;\n+--------------------+----------+\n| Status | Duration |\n+--------------------+----------+\n| query end | 0.000107 |\n| freeing items | 0.000008 |\n| logging slow query | 0.000015 |\n| cleaning up | 0.000006 |\n+--------------------+----------+\n4 rows in set (0.00 sec)\n\nmysql> SHOW PROFILE CPU FOR QUERY 2;\n+----------------------+----------+----------+------------+\n| Status | Duration | CPU_user | CPU_system |\n+----------------------+----------+----------+------------+\n| checking permissions | 0.000040 | 0.000038 | 0.000002 |\n| creating table | 0.000056 | 0.000028 | 0.000028 |\n| After create | 0.011363 | 0.000217 | 0.001571 |\n| query end | 0.000375 | 0.000013 | 0.000028 |\n| freeing items | 0.000089 | 0.000010 | 0.000014 |\n| logging slow query | 0.000019 | 0.000009 | 0.000010 |\n| cleaning up | 0.000005 | 0.000003 | 0.000002 |\n+----------------------+----------+----------+------------+\n7 rows in set (0.00 sec)\n','http://dev.mysql.com/doc/refman/5.7/en/show-profile.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (310,27,'SHOW PROFILE','Syntax:\nSHOW PROFILE [type [, type] ... ]\n [FOR QUERY n]\n [LIMIT row_count [OFFSET offset]]\n\ntype: {\n ALL\n | BLOCK IO\n | CONTEXT SWITCHES\n | CPU\n | IPC\n | MEMORY\n | PAGE FAULTS\n | SOURCE\n | SWAPS\n}\n\nThe SHOW PROFILE and SHOW PROFILES statements display profiling\ninformation that indicates resource usage for statements executed\nduring the course of the current session.\n\n*Note*:\n\nThe SHOW PROFILE and SHOW PROFILES statements are deprecated and will\nbe removed in a future MySQL release. Use the Performance Schema\ninstead; see\nhttp://dev.mysql.com/doc/refman/5.7/en/performance-schema-query-profili\nng.html.\n\nTo control profiling, use the profiling session variable, which has a\ndefault value of 0 (OFF). Enable profiling by setting profiling to 1 or\nON:\n\nmysql> SET profiling = 1;\n\nSHOW PROFILES displays a list of the most recent statements sent to the\nserver. The size of the list is controlled by the\nprofiling_history_size session variable, which has a default value of\n15. The maximum value is 100. Setting the value to 0 has the practical\neffect of disabling profiling.\n\nAll statements are profiled except SHOW PROFILE and SHOW PROFILES, so\nyou will find neither of those statements in the profile list.\nMalformed statements are profiled. For example, SHOW PROFILING is an\nillegal statement, and a syntax error occurs if you try to execute it,\nbut it will show up in the profiling list.\n\nSHOW PROFILE displays detailed information about a single statement.\nWithout the FOR QUERY n clause, the output pertains to the most\nrecently executed statement. If FOR QUERY n is included, SHOW PROFILE\ndisplays information for statement n. The values of n correspond to the\nQuery_ID values displayed by SHOW PROFILES.\n\nThe LIMIT row_count clause may be given to limit the output to\nrow_count rows. If LIMIT is given, OFFSET offset may be added to begin\nthe output offset rows into the full set of rows.\n\nBy default, SHOW PROFILE displays Status and Duration columns. The\nStatus values are like the State values displayed by SHOW PROCESSLIST,\nalthough there might be some minor differences in interpretion for the\ntwo statements for some status values (see\nhttp://dev.mysql.com/doc/refman/5.7/en/thread-information.html).\n\nOptional type values may be specified to display specific additional\ntypes of information:\n\no ALL displays all information\n\no BLOCK IO displays counts for block input and output operations\n\no CONTEXT SWITCHES displays counts for voluntary and involuntary\n context switches\n\no CPU displays user and system CPU usage times\n\no IPC displays counts for messages sent and received\n\no MEMORY is not currently implemented\n\no PAGE FAULTS displays counts for major and minor page faults\n\no SOURCE displays the names of functions from the source code, together\n with the name and line number of the file in which the function\n occurs\n\no SWAPS displays swap counts\n\nProfiling is enabled per session. When a session ends, its profiling\ninformation is lost.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/show-profile.html\n\n','mysql> SELECT @@profiling;\n+-------------+\n| @@profiling |\n+-------------+\n| 0 |\n+-------------+\n1 row in set (0.00 sec)\n\nmysql> SET profiling = 1;\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> DROP TABLE IF EXISTS t1;\nQuery OK, 0 rows affected, 1 warning (0.00 sec)\n\nmysql> CREATE TABLE T1 (id INT);\nQuery OK, 0 rows affected (0.01 sec)\n\nmysql> SHOW PROFILES;\n+----------+----------+--------------------------+\n| Query_ID | Duration | Query |\n+----------+----------+--------------------------+\n| 0 | 0.000088 | SET PROFILING = 1 |\n| 1 | 0.000136 | DROP TABLE IF EXISTS t1 |\n| 2 | 0.011947 | CREATE TABLE t1 (id INT) |\n+----------+----------+--------------------------+\n3 rows in set (0.00 sec)\n\nmysql> SHOW PROFILE;\n+----------------------+----------+\n| Status | Duration |\n+----------------------+----------+\n| checking permissions | 0.000040 |\n| creating table | 0.000056 |\n| After create | 0.011363 |\n| query end | 0.000375 |\n| freeing items | 0.000089 |\n| logging slow query | 0.000019 |\n| cleaning up | 0.000005 |\n+----------------------+----------+\n7 rows in set (0.00 sec)\n\nmysql> SHOW PROFILE FOR QUERY 1;\n+--------------------+----------+\n| Status | Duration |\n+--------------------+----------+\n| query end | 0.000107 |\n| freeing items | 0.000008 |\n| logging slow query | 0.000015 |\n| cleaning up | 0.000006 |\n+--------------------+----------+\n4 rows in set (0.00 sec)\n\nmysql> SHOW PROFILE CPU FOR QUERY 2;\n+----------------------+----------+----------+------------+\n| Status | Duration | CPU_user | CPU_system |\n+----------------------+----------+----------+------------+\n| checking permissions | 0.000040 | 0.000038 | 0.000002 |\n| creating table | 0.000056 | 0.000028 | 0.000028 |\n| After create | 0.011363 | 0.000217 | 0.001571 |\n| query end | 0.000375 | 0.000013 | 0.000028 |\n| freeing items | 0.000089 | 0.000010 | 0.000014 |\n| logging slow query | 0.000019 | 0.000009 | 0.000010 |\n| cleaning up | 0.000005 | 0.000003 | 0.000002 |\n+----------------------+----------+----------+------------+\n7 rows in set (0.00 sec)\n','http://dev.mysql.com/doc/refman/5.7/en/show-profile.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (311,3,'LN','Syntax:\nLN(X)\n\nReturns the natural logarithm of X; that is, the base-e logarithm of X.\nIf X is less than or equal to 0.0E0, the function returns NULL and (as\nof MySQL 5.7.4) a warning "Invalid argument for logarithm" is reported.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html\n\n','mysql> SELECT LN(2);\n -> 0.69314718055995\nmysql> SELECT LN(-2);\n -> NULL\n','http://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (312,27,'SET CHARACTER SET','Syntax:\nSET {CHARACTER SET | CHARSET}\n {\'charset_name\' | DEFAULT}\n\nThis statement maps all strings sent between the server and the current\nclient with the given mapping. SET CHARACTER SET sets three session\nsystem variables: character_set_client and character_set_results are\nset to the given character set, and character_set_connection to the\nvalue of character_set_database. See\nhttp://dev.mysql.com/doc/refman/5.7/en/charset-connection.html.\n\ncharset_name may be quoted or unquoted.\n\nThe default character set mapping can be restored by using the value\nDEFAULT. The default depends on the server configuration.\n\nucs2, utf16, and utf32 cannot be used as a client character set, which\nmeans that they do not work for SET CHARACTER SET.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/set-character-set.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/set-character-set.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (312,27,'SET CHARACTER SET','Syntax:\nSET {CHARACTER SET | CHARSET}\n {\'charset_name\' | DEFAULT}\n\nThis statement maps all strings sent between the server and the current\nclient with the given mapping. SET CHARACTER SET sets three session\nsystem variables: character_set_client and character_set_results are\nset to the given character set, and character_set_connection to the\nvalue of character_set_database. See\nhttp://dev.mysql.com/doc/refman/5.7/en/charset-connection.html.\n\ncharset_name may be quoted or unquoted.\n\nThe default character set mapping can be restored by using the value\nDEFAULT. The default depends on the server configuration.\n\nSome character sets cannot be used as the client character set.\nAttempting to use them with SET CHARACTER SET produces an error. See\nhttp://dev.mysql.com/doc/refman/5.7/en/charset-connection.html#charset-\nconnection-impermissible-client-charset.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/set-character-set.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/set-character-set.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (313,24,'RETURN','Syntax:\nRETURN expr\n\nThe RETURN statement terminates execution of a stored function and\nreturns the value expr to the function caller. There must be at least\none RETURN statement in a stored function. There may be more than one\nif the function has multiple exit points.\n\nThis statement is not used in stored procedures, triggers, or events.\nThe LEAVE statement can be used to exit a stored program of those\ntypes.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/return.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/return.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (314,8,'SET SQL_LOG_BIN','Syntax:\nSET sql_log_bin = {0|1}\n\nThe sql_log_bin variable controls whether logging to the binary log is\ndone. The default value is 1 (do logging). To change logging for the\ncurrent session, change the session value of this variable. The session\nuser must have the SUPER privilege to set this variable. Set this\nvariable to 0 for a session to temporarily disable binary logging while\nmaking changes to the master which you do not want to replicate to the\nslave.\n\nThe global sql_log_bin variable is read only and cannot be modified.\nThe global scope is deprecated and will be removed in a future MySQL\nrelease.\n\nIt is not possible to set @@session.sql_log_bin within a transaction or\nsubquery.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/set-sql-log-bin.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/set-sql-log-bin.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (314,8,'SET SQL_LOG_BIN','Syntax:\nSET sql_log_bin = {OFF|ON}\n\nThe sql_log_bin variable controls whether logging to the binary log is\nenabled for the current session (assuming that the binary log itself is\nenabled). The default value is ON. To disable or enable binary logging\nfor the current session, set the session sql_log_bin variable to OFF or\nON.\n\nSet this variable to OFF for a session to temporarily disable binary\nlogging while making changes to the master you do not want replicated\nto the slave.\n\nSetting the session value of this system variable is a restricted\noperation. The session user must have privileges sufficient to set\nrestricted session variables. See\nhttp://dev.mysql.com/doc/refman/5.7/en/system-variable-privileges.html.\n\nIt is not possible to set the session value of sql_log_bin within a\ntransaction or subquery.\n\nSetting this variable to OFF prevents GTIDs from being assigned to\ntransactions in the binary log. If you are using GTIDs for replication,\nthis means that even when binary logging is later enabled again, the\nGTIDs written into the log from this point do not account for any\ntransactions that occurred in the meantime, so in effect those\ntransactions are lost.\n\nThe global sql_log_bin variable is read only and cannot be modified.\nThe global scope is deprecated and will be removed in a future MySQL\nrelease.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/set-sql-log-bin.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/set-sql-log-bin.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (315,12,'AES_DECRYPT','Syntax:\nAES_DECRYPT(crypt_str,key_str[,init_vector])\n\nThis function decrypts data using the official AES (Advanced Encryption\nStandard) algorithm. For more information, see the description of\nAES_ENCRYPT().\n\nThe optional initialization vector argument, init_vector, is available\nas of MySQL 5.7.4. As of that version, statements that use\nAES_DECRYPT() are unsafe for statement-based replication and cannot be\nstored in the query cache.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (316,17,'COERCIBILITY','Syntax:\nCOERCIBILITY(str)\n\nReturns the collation coercibility value of the string argument.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/information-functions.html\n\n','mysql> SELECT COERCIBILITY(\'abc\' COLLATE latin1_swedish_ci);\n -> 0\nmysql> SELECT COERCIBILITY(USER());\n -> 3\nmysql> SELECT COERCIBILITY(\'abc\');\n -> 4\nmysql> SELECT COERCIBILITY(1000);\n -> 5\n','http://dev.mysql.com/doc/refman/5.7/en/information-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (317,23,'INT','INT[(M)] [UNSIGNED] [ZEROFILL]\n\nA normal-size integer. The signed range is -2147483648 to 2147483647.\nThe unsigned range is 0 to 4294967295.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/numeric-type-overview.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/numeric-type-overview.html'); @@ -407,21 +407,21 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example, INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (326,28,'REPLACE','Syntax:\nREPLACE [LOW_PRIORITY | DELAYED]\n [INTO] tbl_name\n [PARTITION (partition_name [, partition_name] ...)]\n [(col_name [, col_name] ...)]\n {VALUES | VALUE} (value_list) [, (value_list)] ...\n\nREPLACE [LOW_PRIORITY | DELAYED]\n [INTO] tbl_name\n [PARTITION (partition_name [, partition_name] ...)]\n SET assignment_list\n\nREPLACE [LOW_PRIORITY | DELAYED]\n [INTO] tbl_name\n [PARTITION (partition_name [, partition_name] ...)]\n [(col_name [, col_name] ...)]\n SELECT ...\n\nvalue:\n {expr | DEFAULT}\n\nvalue_list:\n value [, value] ...\n\nassignment:\n col_name = value\n\nassignment_list:\n assignment [, assignment] ...\n\nREPLACE works exactly like INSERT, except that if an old row in the\ntable has the same value as a new row for a PRIMARY KEY or a UNIQUE\nindex, the old row is deleted before the new row is inserted. See [HELP\nINSERT].\n\nREPLACE is a MySQL extension to the SQL standard. It either inserts, or\ndeletes and inserts. For another MySQL extension to standard SQL---that\neither inserts or updates---see\nhttp://dev.mysql.com/doc/refman/5.7/en/insert-on-duplicate.html.\n\nDELAYED inserts and replaces were deprecated in MySQL 5.6. In MySQL\n5.7, DELAYED is not supported. The server recognizes but ignores the\nDELAYED keyword, handles the replace as a nondelayed replace, and\ngenerates an ER_WARN_LEGACY_SYNTAX_CONVERTED warning. ("REPLACE DELAYED\nis no longer supported. The statement was converted to REPLACE.") The\nDELAYED keyword will be removed in a future release.\n\n*Note*:\n\nREPLACE makes sense only if a table has a PRIMARY KEY or UNIQUE index.\nOtherwise, it becomes equivalent to INSERT, because there is no index\nto be used to determine whether a new row duplicates another.\n\nValues for all columns are taken from the values specified in the\nREPLACE statement. Any missing columns are set to their default values,\njust as happens for INSERT. You cannot refer to values from the current\nrow and use them in the new row. If you use an assignment such as SET\ncol_name = col_name + 1, the reference to the column name on the right\nhand side is treated as DEFAULT(col_name), so the assignment is\nequivalent to SET col_name = DEFAULT(col_name) + 1.\n\nTo use REPLACE, you must have both the INSERT and DELETE privileges for\nthe table.\n\nIf a generated column is replaced explicitly, the only permitted value\nis DEFAULT. For information about generated columns, see\nhttp://dev.mysql.com/doc/refman/5.7/en/create-table-generated-columns.h\ntml.\n\nREPLACE supports explicit partition selection using the PARTITION\nkeyword with a list of comma-separated names of partitions,\nsubpartitions, or both. As with INSERT, if it is not possible to insert\nthe new row into any of these partitions or subpartitions, the REPLACE\nstatement fails with the error Found a row not matching the given\npartition set. For more information and examples, see\nhttp://dev.mysql.com/doc/refman/5.7/en/partitioning-selection.html.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/replace.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/replace.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (327,32,'CURRENT_TIMESTAMP','Syntax:\nCURRENT_TIMESTAMP, CURRENT_TIMESTAMP([fsp])\n\nCURRENT_TIMESTAMP and CURRENT_TIMESTAMP() are synonyms for NOW().\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (328,26,'ST_SYMDIFFERENCE','ST_SymDifference(g1, g2)\n\nReturns a geometry that represents the point set symmetric difference\nof the geometry values g1 and g2, which is defined as:\n\ng1 symdifference g2 := (g1 union g2) difference (g1 intersection g2)\n\nOr, in function call notation:\n\nST_SymDifference(g1, g2) = ST_Difference(ST_Union(g1, g2), ST_Intersection(g1, g2))\n\nIf any argument is NULL, the return value is NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/spatial-operator-functions.html\n\n','mysql> SET @g1 = Point(1,1), @g2 = Point(2,2);\nmysql> SELECT ST_AsText(ST_SymDifference(@g1, @g2));\n+---------------------------------------+\n| ST_AsText(ST_SymDifference(@g1, @g2)) |\n+---------------------------------------+\n| MULTIPOINT((1 1),(2 2)) |\n+---------------------------------------+\n','http://dev.mysql.com/doc/refman/5.7/en/spatial-operator-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (329,7,'GTID_SUBSET','Syntax:\nGTID_SUBSET(subset,set)\n\nGiven two sets of global transaction IDs subset and set, returns true\nif all GTIDs in subset are also in set. Returns false otherwise.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/gtid-functions.html\n\n','mysql> SELECT GTID_SUBSET(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:23\',\n -> \'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\')\\G\n*************************** 1. row ***************************\nGTID_SUBSET(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:23\',\n \'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\'): 1\n1 row in set (0.00 sec)\n\nmysql> SELECT GTID_SUBSET(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:23-25\',\n -> \'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\')\\G\n*************************** 1. row ***************************\nGTID_SUBSET(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:23-25\',\n \'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\'): 1\n1 row in set (0.00 sec)\n\nmysql> SELECT GTID_SUBSET(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:20-25\',\n -> \'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\')\\G\n*************************** 1. row ***************************\nGTID_SUBSET(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:20-25\',\n \'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\'): 0\n1 row in set (0.00 sec)\n','http://dev.mysql.com/doc/refman/5.7/en/gtid-functions.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (329,7,'GTID_SUBSET','Syntax:\nGTID_SUBSET(set1,set2)\n\nGiven two sets of global transaction IDs set1 and set2, returns true if\nall GTIDs in set1 are also in set2. Returns false otherwise.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/gtid-functions.html\n\n','mysql> SELECT GTID_SUBSET(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:23\',\n -> \'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\')\\G\n*************************** 1. row ***************************\nGTID_SUBSET(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:23\',\n \'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\'): 1\n1 row in set (0.00 sec)\n\nmysql> SELECT GTID_SUBSET(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:23-25\',\n -> \'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\')\\G\n*************************** 1. row ***************************\nGTID_SUBSET(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:23-25\',\n \'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\'): 1\n1 row in set (0.00 sec)\n\nmysql> SELECT GTID_SUBSET(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:20-25\',\n -> \'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\')\\G\n*************************** 1. row ***************************\nGTID_SUBSET(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:20-25\',\n \'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\'): 0\n1 row in set (0.00 sec)\n','http://dev.mysql.com/doc/refman/5.7/en/gtid-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (330,16,'VAR_SAMP','Syntax:\nVAR_SAMP(expr)\n\nReturns the sample variance of expr. That is, the denominator is the\nnumber of rows minus one.\n\nIf there are no matching rows, VAR_SAMP() returns NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (331,23,'DATETIME','DATETIME[(fsp)]\n\nA date and time combination. The supported range is \'1000-01-01\n00:00:00.000000\' to \'9999-12-31 23:59:59.999999\'. MySQL displays\nDATETIME values in \'YYYY-MM-DD HH:MM:SS[.fraction]\' format, but permits\nassignment of values to DATETIME columns using either strings or\nnumbers.\n\nAn optional fsp value in the range from 0 to 6 may be given to specify\nfractional seconds precision. A value of 0 signifies that there is no\nfractional part. If omitted, the default precision is 0.\n\nAutomatic initialization and updating to the current date and time for\nDATETIME columns can be specified using DEFAULT and ON UPDATE column\ndefinition clauses, as described in\nhttp://dev.mysql.com/doc/refman/5.7/en/timestamp-initialization.html.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/date-and-time-type-overview.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/date-and-time-type-overview.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (332,8,'CHANGE REPLICATION FILTER','Syntax:\nCHANGE REPLICATION FILTER filter[, filter][, ...]\n\nfilter:\n REPLICATE_DO_DB = (db_list)\n | REPLICATE_IGNORE_DB = (db_list)\n | REPLICATE_DO_TABLE = (tbl_list)\n | REPLICATE_IGNORE_TABLE = (tbl_list)\n | REPLICATE_WILD_DO_TABLE = (wild_tbl_list)\n | REPLICATE_WILD_IGNORE_TABLE = (wild_tbl_list)\n | REPLICATE_REWRITE_DB = (db_pair_list)\n\ndb_list:\n db_name[, db_name][, ...]\n\ntbl_list:\n db_name.table_name[, db_table_name][, ...]\nwild_tbl_list:\n \'db_pattern.table_pattern\'[, \'db_pattern.table_pattern\'][, ...]\n\ndb_pair_list:\n (db_pair)[, (db_pair)][, ...]\n\ndb_pair:\n from_db, to_db\n\nCHANGE REPLICATION FILTER sets one or more replication filtering rules\non the slave in the same way as starting the slave mysqld with\nreplication filtering options such as --replicate-do-db or\n--replicate-wild-ignore-table. Unlike the case with the server options,\nthis statement does not require restarting the server to take effect,\nonly that the slave SQL thread be stopped using STOP SLAVE SQL_THREAD\nfirst (and restarted with START SLAVE SQL_THREAD afterwards). CHANGE\nREPLICATION FILTER requires the SUPER privilege.\n\nThe following list shows the CHANGE REPLICATION FILTER options and how\nthey relate to --replicate-* server options:\n\no REPLICATE_DO_DB: Include updates based on database name. Equivalent\n to --replicate-do-db.\n\no REPLICATE_IGNORE_DB: Exclude updates based on database name.\n Equivalent to --replicate-ignore-db.\n\no REPLICATE_DO_TABLE: Include updates based on table name. Equivalent\n to --replicate-do-table.\n\no REPLICATE_IGNORE_TABLE: Exclude updates based on table name.\n Equivalent to --replicate-ignore-table.\n\no REPLICATE_WILD_DO_TABLE: Include updates based on wildcard pattern\n matching table name. Equivalent to --replicate-wild-do-table.\n\no REPLICATE_WILD_IGNORE_TABLE: Exclude updates based on wildcard\n pattern matching table name. Equivalent to\n --replicate-wild-ignore-table.\n\no REPLICATE_REWRITE_DB: Perform updates on slave after substituting new\n name on slave for specified database on master. Equivalent to\n --replicate-rewrite-db.\n\nThe precise effects of REPLICATE_DO_DB and REPLICATE_IGNORE_DB filters\nare dependent on whether statement-based or row-based replication is in\neffect. See\nhttp://dev.mysql.com/doc/refman/5.7/en/replication-rules.html, for more\ninformation.\n\nMultiple replication filtering rules can be created in a single CHANGE\nREPLICATION FILTER statement by separating the rules with commas, as\nshown here:\n\nCHANGE REPLICATION FILTER\n REPLICATE_DO_DB = (d1), REPLICATE_IGNORE_DB = (d2);\n\nIssuing the statement just shown is equivalent to starting the slave\nmysqld with the options --replicate-do-db=d1 --replicate-ignore-db=d2.\n\nIf the same filtering rule is specified multiple times, only the last\nsuch rule is actually used. For example, the two statements shown here\nhave exactly the same effect, because the first REPLICATE_DO_DB rule in\nthe first statement is ignored:\n\nCHANGE REPLICATION FILTER\n REPLICATE_DO_DB = (db1, db2), REPLICATE_DO_DB = (db3, db4);\n\nCHANGE REPLICATION FILTER\n REPLICATE_DO_DB = (db3,db4);\n\n*Caution*:\n\nThis behavior differs from that of the --replicate-* filter options\nwhere specifying the same option multiple times causes the creation of\nmultiple filter rules.\n\nNames of tables and database not containing any special characters need\nnot be quoted. Values used with REPLICATION_WILD_TABLE and\nREPLICATION_WILD_IGNORE_TABLE are string expressions, possibly\ncontaining (special) wildcard characters, and so must be quoted. This\nis shown in the following example statements:\n\nCHANGE REPLICATION FILTER\n REPLICATE_WILD_DO_TABLE = (\'db1.old%\');\n\nCHANGE REPLICATION FILTER\n REPLICATE_WILD_IGNORE_TABLE = (\'db1.new%\', \'db2.new%\');\n\nValues used with REPLICATE_REWRITE_DB represent pairs of database\nnames; each such value must be enclosed in parentheses. The following\nstatement rewrites statements occurring on database db1 on the master\nto database db2 on the slave:\n\nCHANGE REPLICATION FILTER REPLICATE_REWRITE_DB = ((db1, db2));\n\nThe statement just shown contains two sets of parentheses, one\nenclosing the pair of database names, and the other enclosing the\nentire list. This is perhap more easily seen in the following example,\nwhich creates two rewrite-db rules, one rewriting database dbA to dbB,\nand one rewriting database dbC to dbD:\n\nCHANGE REPLICATION FILTER\n REPLICATE_REWRITE_DB = ((dbA, dbB), (dbC, dbD));\n\nThis statement leaves any existing replication filtering rules\nunchanged; to unset all filters of a given type, set the filter\'s value\nto an explicitly empty list, as shown in this example, which removes\nall existing REPLICATE_DO_DB and REPLICATE_IGNORE_DB rules:\n\nCHANGE REPLICATION FILTER\n REPLICATE_DO_DB = (), REPLICATE_IGNORE_DB = ();\n\nSetting a filter to empty in this way removes all existing rules, does\nnot create any new ones, and does not restore any rules set at mysqld\nstartup using --replicate-* options on the command line or in the\nconfiguration file.\n\nValues employed with REPLICATE_WILD_DO_TABLE and\nREPLICATE_WILD_IGNORE_TABLE must be in the format db_name.tbl_name.\nPrior to MySQL 5.7.5, this was not strictly enforced, although using\nnonconforming values with these options could lead to erroneous results\n(Bug #18095449).\n\nFor more information, see\nhttp://dev.mysql.com/doc/refman/5.7/en/replication-rules.html.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/change-replication-filter.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/change-replication-filter.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (332,8,'CHANGE REPLICATION FILTER','Syntax:\nCHANGE REPLICATION FILTER filter[, filter][, ...]\n\nfilter:\n REPLICATE_DO_DB = (db_list)\n | REPLICATE_IGNORE_DB = (db_list)\n | REPLICATE_DO_TABLE = (tbl_list)\n | REPLICATE_IGNORE_TABLE = (tbl_list)\n | REPLICATE_WILD_DO_TABLE = (wild_tbl_list)\n | REPLICATE_WILD_IGNORE_TABLE = (wild_tbl_list)\n | REPLICATE_REWRITE_DB = (db_pair_list)\n\ndb_list:\n db_name[, db_name][, ...]\n\ntbl_list:\n db_name.table_name[, db_table_name][, ...]\nwild_tbl_list:\n \'db_pattern.table_pattern\'[, \'db_pattern.table_pattern\'][, ...]\n\ndb_pair_list:\n (db_pair)[, (db_pair)][, ...]\n\ndb_pair:\n from_db, to_db\n\nCHANGE REPLICATION FILTER sets one or more replication filtering rules\non the slave in the same way as starting the slave mysqld with\nreplication filtering options such as --replicate-do-db or\n--replicate-wild-ignore-table. Unlike the case with the server options,\nthis statement does not require restarting the server to take effect,\nonly that the slave SQL thread be stopped using STOP SLAVE SQL_THREAD\nfirst (and restarted with START SLAVE SQL_THREAD afterwards). CHANGE\nREPLICATION FILTER requires the SUPER privilege.\n\nReplication filters cannot be set on a MySQL server instance that is\nconfigured for Group Replication, because filtering transactions on\nsome servers would make the group unable to reach agreement on a\nconsistent state.\n\nThe following list shows the CHANGE REPLICATION FILTER options and how\nthey relate to --replicate-* server options:\n\no REPLICATE_DO_DB: Include updates based on database name. Equivalent\n to --replicate-do-db.\n\no REPLICATE_IGNORE_DB: Exclude updates based on database name.\n Equivalent to --replicate-ignore-db.\n\no REPLICATE_DO_TABLE: Include updates based on table name. Equivalent\n to --replicate-do-table.\n\no REPLICATE_IGNORE_TABLE: Exclude updates based on table name.\n Equivalent to --replicate-ignore-table.\n\no REPLICATE_WILD_DO_TABLE: Include updates based on wildcard pattern\n matching table name. Equivalent to --replicate-wild-do-table.\n\no REPLICATE_WILD_IGNORE_TABLE: Exclude updates based on wildcard\n pattern matching table name. Equivalent to\n --replicate-wild-ignore-table.\n\no REPLICATE_REWRITE_DB: Perform updates on slave after substituting new\n name on slave for specified database on master. Equivalent to\n --replicate-rewrite-db.\n\nThe precise effects of REPLICATE_DO_DB and REPLICATE_IGNORE_DB filters\nare dependent on whether statement-based or row-based replication is in\neffect. See\nhttp://dev.mysql.com/doc/refman/5.7/en/replication-rules.html, for more\ninformation.\n\nMultiple replication filtering rules can be created in a single CHANGE\nREPLICATION FILTER statement by separating the rules with commas, as\nshown here:\n\nCHANGE REPLICATION FILTER\n REPLICATE_DO_DB = (d1), REPLICATE_IGNORE_DB = (d2);\n\nIssuing the statement just shown is equivalent to starting the slave\nmysqld with the options --replicate-do-db=d1 --replicate-ignore-db=d2.\n\nIf the same filtering rule is specified multiple times, only the last\nsuch rule is actually used. For example, the two statements shown here\nhave exactly the same effect, because the first REPLICATE_DO_DB rule in\nthe first statement is ignored:\n\nCHANGE REPLICATION FILTER\n REPLICATE_DO_DB = (db1, db2), REPLICATE_DO_DB = (db3, db4);\n\nCHANGE REPLICATION FILTER\n REPLICATE_DO_DB = (db3,db4);\n\n*Caution*:\n\nThis behavior differs from that of the --replicate-* filter options\nwhere specifying the same option multiple times causes the creation of\nmultiple filter rules.\n\nNames of tables and database not containing any special characters need\nnot be quoted. Values used with REPLICATION_WILD_TABLE and\nREPLICATION_WILD_IGNORE_TABLE are string expressions, possibly\ncontaining (special) wildcard characters, and so must be quoted. This\nis shown in the following example statements:\n\nCHANGE REPLICATION FILTER\n REPLICATE_WILD_DO_TABLE = (\'db1.old%\');\n\nCHANGE REPLICATION FILTER\n REPLICATE_WILD_IGNORE_TABLE = (\'db1.new%\', \'db2.new%\');\n\nValues used with REPLICATE_REWRITE_DB represent pairs of database\nnames; each such value must be enclosed in parentheses. The following\nstatement rewrites statements occurring on database db1 on the master\nto database db2 on the slave:\n\nCHANGE REPLICATION FILTER REPLICATE_REWRITE_DB = ((db1, db2));\n\nThe statement just shown contains two sets of parentheses, one\nenclosing the pair of database names, and the other enclosing the\nentire list. This is perhap more easily seen in the following example,\nwhich creates two rewrite-db rules, one rewriting database dbA to dbB,\nand one rewriting database dbC to dbD:\n\nCHANGE REPLICATION FILTER\n REPLICATE_REWRITE_DB = ((dbA, dbB), (dbC, dbD));\n\nThis statement leaves any existing replication filtering rules\nunchanged; to unset all filters of a given type, set the filter\'s value\nto an explicitly empty list, as shown in this example, which removes\nall existing REPLICATE_DO_DB and REPLICATE_IGNORE_DB rules:\n\nCHANGE REPLICATION FILTER\n REPLICATE_DO_DB = (), REPLICATE_IGNORE_DB = ();\n\nSetting a filter to empty in this way removes all existing rules, does\nnot create any new ones, and does not restore any rules set at mysqld\nstartup using --replicate-* options on the command line or in the\nconfiguration file.\n\nValues employed with REPLICATE_WILD_DO_TABLE and\nREPLICATE_WILD_IGNORE_TABLE must be in the format db_name.tbl_name.\nPrior to MySQL 5.7.5, this was not strictly enforced, although using\nnonconforming values with these options could lead to erroneous results\n(Bug #18095449).\n\nFor more information, see\nhttp://dev.mysql.com/doc/refman/5.7/en/replication-rules.html.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/change-replication-filter.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/change-replication-filter.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (333,23,'INTEGER','INTEGER[(M)] [UNSIGNED] [ZEROFILL]\n\nThis type is a synonym for INT.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/numeric-type-overview.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/numeric-type-overview.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (334,27,'SHOW COLUMNS','Syntax:\nSHOW [FULL] {COLUMNS | FIELDS}\n {FROM | IN} tbl_name\n [{FROM | IN} db_name]\n [LIKE \'pattern\' | WHERE expr]\n\nSHOW COLUMNS displays information about the columns in a given table.\nIt also works for views. SHOW COLUMNS displays information only for\nthose columns for which you have some privilege.\n\nYou can use db_name.tbl_name as an alternative to the tbl_name FROM\ndb_name syntax. In other words, these two statements are equivalent:\n\nSHOW COLUMNS FROM mytable FROM mydb;\nSHOW COLUMNS FROM mydb.mytable;\n\nThe optional FULL keyword causes the output to include the column\ncollation and comments, as well as the privileges you have for each\ncolumn.\n\nThe LIKE clause, if present, indicates which column names to match. The\nWHERE clause can be given to select rows using more general conditions,\nas discussed in\nhttp://dev.mysql.com/doc/refman/5.7/en/extended-show.html.\n\nmysql> SHOW COLUMNS FROM City;\n+-------------+----------+------+-----+---------+----------------+\n| Field | Type | Null | Key | Default | Extra |\n+-------------+----------+------+-----+---------+----------------+\n| ID | int(11) | NO | PRI | NULL | auto_increment |\n| Name | char(35) | NO | | | |\n| CountryCode | char(3) | NO | MUL | | |\n| District | char(20) | NO | | | |\n| Population | int(11) | NO | | 0 | |\n+-------------+----------+------+-----+---------+----------------+\n\nThe data types may differ from what you expect them to be based on a\nCREATE TABLE statement because MySQL sometimes changes data types when\nyou create or alter a table. The conditions under which this occurs are\ndescribed in\nhttp://dev.mysql.com/doc/refman/5.7/en/silent-column-changes.html.\n\nSHOW COLUMNS displays the following values for each table column:\n\no Field\n\n The column name.\n\no Type\n\n The column data type.\n\no Collation\n\n The collation for nonbinary string columns, or NULL for other\n columns. This value is displayed only if you use the FULL keyword.\n\no Null\n\n Column nullability. The value is YES if NULL values can be stored in\n the column, NO if not.\n\no Key\n\n Whether the column is indexed:\n\n o If Key is empty, the column either is not indexed or is indexed\n only as a secondary column in a multiple-column, nonunique index.\n\n o If Key is PRI, the column is a PRIMARY KEY or is one of the columns\n in a multiple-column PRIMARY KEY.\n\n o If Key is UNI, the column is the first column of a UNIQUE index. (A\n UNIQUE index permits multiple NULL values, but you can tell whether\n the column permits NULL by checking the Null field.)\n\n o If Key is MUL, the column is the first column of a nonunique index\n in which multiple occurrences of a given value are permitted within\n the column.\n\n If more than one of the Key values applies to a given column of a\n table, Key displays the one with the highest priority, in the order\n PRI, UNI, MUL.\n\n A UNIQUE index may be displayed as PRI if it cannot contain NULL\n values and there is no PRIMARY KEY in the table. A UNIQUE index may\n display as MUL if several columns form a composite UNIQUE index;\n although the combination of the columns is unique, each column can\n still hold multiple occurrences of a given value.\n\no Default\n\n The default value for the column. This is NULL if the column has an\n explicit default of NULL, or if the column definition includes no\n DEFAULT clause.\n\no Extra\n\n Any additional information that is available about a given column.\n The value is nonempty in these cases:\n\n o auto_increment for columns that have the AUTO_INCREMENT attribute\n\n o on update CURRENT_TIMESTAMP for TIMESTAMP or DATETIME columns that\n have the ON UPDATE CURRENT_TIMESTAMP attribute\n\n o VIRTUAL GENERATED or VIRTUAL STORED for generated columns\n\no Privileges\n\n The privileges you have for the column. This value is displayed only\n if you use the FULL keyword.\n\no Comment\n\n Any comment included in the column definition. This value is\n displayed only if you use the FULL keyword.\n\nYou can also obtain information about table columns from\nINFORMATION_SCHEMA, which contains a COLUMNS table. See\nhttp://dev.mysql.com/doc/refman/5.7/en/columns-table.html.\n\nYou can list a table\'s columns with the mysqlshow db_name tbl_name\ncommand.\n\nThe DESCRIBE statement provides information similar to SHOW COLUMNS.\nSee http://dev.mysql.com/doc/refman/5.7/en/describe.html.\n\nThe SHOW CREATE TABLE, SHOW TABLE STATUS, and SHOW INDEX statements\nalso provide information about tables. See [HELP SHOW].\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/show-columns.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/show-columns.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (334,27,'SHOW COLUMNS','Syntax:\nSHOW [FULL] {COLUMNS | FIELDS}\n {FROM | IN} tbl_name\n [{FROM | IN} db_name]\n [LIKE \'pattern\' | WHERE expr]\n\nSHOW COLUMNS displays information about the columns in a given table.\nIt also works for views. SHOW COLUMNS displays information only for\nthose columns for which you have some privilege.\n\nmysql> SHOW COLUMNS FROM City;\n+-------------+----------+------+-----+---------+----------------+\n| Field | Type | Null | Key | Default | Extra |\n+-------------+----------+------+-----+---------+----------------+\n| ID | int(11) | NO | PRI | NULL | auto_increment |\n| Name | char(35) | NO | | | |\n| CountryCode | char(3) | NO | MUL | | |\n| District | char(20) | NO | | | |\n| Population | int(11) | NO | | 0 | |\n+-------------+----------+------+-----+---------+----------------+\n\nAn alternative to tbl_name FROM db_name syntax is db_name.tbl_name.\nThese two statements are equivalent:\n\nSHOW COLUMNS FROM mytable FROM mydb;\nSHOW COLUMNS FROM mydb.mytable;\n\nThe optional FULL keyword causes the output to include the column\ncollation and comments, as well as the privileges you have for each\ncolumn.\n\nThe LIKE clause, if present, indicates which column names to match. The\nWHERE clause can be given to select rows using more general conditions,\nas discussed in\nhttp://dev.mysql.com/doc/refman/5.7/en/extended-show.html.\n\nThe data types may differ from what you expect them to be based on a\nCREATE TABLE statement because MySQL sometimes changes data types when\nyou create or alter a table. The conditions under which this occurs are\ndescribed in\nhttp://dev.mysql.com/doc/refman/5.7/en/silent-column-changes.html.\n\nSHOW COLUMNS displays the following values for each table column:\n\no Field\n\n The column name.\n\no Type\n\n The column data type.\n\no Collation\n\n The collation for nonbinary string columns, or NULL for other\n columns. This value is displayed only if you use the FULL keyword.\n\no Null\n\n The column nullability. The value is YES if NULL values can be stored\n in the column, NO if not.\n\no Key\n\n Whether the column is indexed:\n\n o If Key is empty, the column either is not indexed or is indexed\n only as a secondary column in a multiple-column, nonunique index.\n\n o If Key is PRI, the column is a PRIMARY KEY or is one of the columns\n in a multiple-column PRIMARY KEY.\n\n o If Key is UNI, the column is the first column of a UNIQUE index. (A\n UNIQUE index permits multiple NULL values, but you can tell whether\n the column permits NULL by checking the Null field.)\n\n o If Key is MUL, the column is the first column of a nonunique index\n in which multiple occurrences of a given value are permitted within\n the column.\n\n If more than one of the Key values applies to a given column of a\n table, Key displays the one with the highest priority, in the order\n PRI, UNI, MUL.\n\n A UNIQUE index may be displayed as PRI if it cannot contain NULL\n values and there is no PRIMARY KEY in the table. A UNIQUE index may\n display as MUL if several columns form a composite UNIQUE index;\n although the combination of the columns is unique, each column can\n still hold multiple occurrences of a given value.\n\no Default\n\n The default value for the column. This is NULL if the column has an\n explicit default of NULL, or if the column definition includes no\n DEFAULT clause.\n\no Extra\n\n Any additional information that is available about a given column.\n The value is nonempty in these cases:\n\n o auto_increment for columns that have the AUTO_INCREMENT attribute.\n\n o on update CURRENT_TIMESTAMP for TIMESTAMP or DATETIME columns that\n have the ON UPDATE CURRENT_TIMESTAMP attribute.\n\n o VIRTUAL GENERATED or VIRTUAL STORED for generated columns.\n\no Privileges\n\n The privileges you have for the column. This value is displayed only\n if you use the FULL keyword.\n\no Comment\n\n Any comment included in the column definition. This value is\n displayed only if you use the FULL keyword.\n\nTable column information is also available from the INFORMATION_SCHEMA\nCOLUMNS table. See\nhttp://dev.mysql.com/doc/refman/5.7/en/columns-table.html.\n\nYou can list a table\'s columns with the mysqlshow db_name tbl_name\ncommand.\n\nThe DESCRIBE statement provides information similar to SHOW COLUMNS.\nSee http://dev.mysql.com/doc/refman/5.7/en/describe.html.\n\nThe SHOW CREATE TABLE, SHOW TABLE STATUS, and SHOW INDEX statements\nalso provide information about tables. See [HELP SHOW].\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/show-columns.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/show-columns.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (335,23,'TINYINT','TINYINT[(M)] [UNSIGNED] [ZEROFILL]\n\nA very small integer. The signed range is -128 to 127. The unsigned\nrange is 0 to 255.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/numeric-type-overview.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/numeric-type-overview.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (336,14,'MASTER_POS_WAIT','Syntax:\nMASTER_POS_WAIT(log_name,log_pos[,timeout][,channel])\n\nThis function is useful for control of master/slave synchronization. It\nblocks until the slave has read and applied all updates up to the\nspecified position in the master log. The return value is the number of\nlog events the slave had to wait for to advance to the specified\nposition. The function returns NULL if the slave SQL thread is not\nstarted, the slave\'s master information is not initialized, the\narguments are incorrect, or an error occurs. It returns -1 if the\ntimeout has been exceeded. If the slave SQL thread stops while\nMASTER_POS_WAIT() is waiting, the function returns NULL. If the slave\nis past the specified position, the function returns immediately.\n\nOn a multithreaded slave, the function waits until expiry of the limit\nset by the slave_checkpoint_group or slave_checkpoint_period system\nvariable, when the checkpoint operation is called to update the status\nof the slave. Depending on the setting for the system variables, the\nfunction might therefore return some time after the specified position\nwas reached.\n\nIf a timeout value is specified, MASTER_POS_WAIT() stops waiting when\ntimeout seconds have elapsed. timeout must be greater than 0; a zero or\nnegative timeout means no timeout.\n\nThe optional channel value enables you to name which replication\nchannel the function applies to. See\nhttp://dev.mysql.com/doc/refman/5.7/en/replication-channels.html for\nmore information.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (337,19,'^','Syntax:\n^\n\nBitwise XOR.\n\nThe result is an unsigned 64-bit integer.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/bit-functions.html\n\n','mysql> SELECT 1 ^ 1;\n -> 0\nmysql> SELECT 1 ^ 0;\n -> 1\nmysql> SELECT 11 ^ 3;\n -> 8\n','http://dev.mysql.com/doc/refman/5.7/en/bit-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (338,40,'DROP VIEW','Syntax:\nDROP VIEW [IF EXISTS]\n view_name [, view_name] ...\n [RESTRICT | CASCADE]\n\nDROP VIEW removes one or more views. You must have the DROP privilege\nfor each view.\n\nIf any views named in the argument list do not exist, the statement\nreturns an error indicating by name which nonexisting views it was\nunable to drop, but also drops all views in the list that do exist.\n\n*Note*:\n\nIn MySQL 8.0, DROP VIEW fails if any views named in the argument list\ndo not exist. Due to the change in behavior, a partially completed DROP\nVIEW operation on a MySQL 5.7 master fails when replicated to a MySQL\n8.0 slave. To avoid this failure scenario, use IF EXISTS syntax in DROP\nVIEW statements to prevent an error from occurring for views that do\nnot exist. For more information, see Atomic Data Definition Statement\nSupport (http://dev.mysql.com/doc/refman/8.0/en/atomic-ddl.html).\n\nThe IF EXISTS clause prevents an error from occurring for views that\ndon\'t exist. When this clause is given, a NOTE is generated for each\nnonexistent view. See [HELP SHOW WARNINGS].\n\nRESTRICT and CASCADE, if given, are parsed and ignored.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/drop-view.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/drop-view.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (339,32,'WEEK','Syntax:\nWEEK(date[,mode])\n\nThis function returns the week number for date. The two-argument form\nof WEEK() enables you to specify whether the week starts on Sunday or\nMonday and whether the return value should be in the range from 0 to 53\nor from 1 to 53. If the mode argument is omitted, the value of the\ndefault_week_format system variable is used. See\nhttp://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html\n\n','mysql> SELECT WEEK(\'2008-02-20\');\n -> 7\nmysql> SELECT WEEK(\'2008-02-20\',0);\n -> 7\nmysql> SELECT WEEK(\'2008-02-20\',1);\n -> 8\nmysql> SELECT WEEK(\'2008-12-31\',1);\n -> 53\n','http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (340,22,'DROP FUNCTION UDF','Syntax:\nDROP FUNCTION function_name\n\nThis statement drops the user-defined function (UDF) named\nfunction_name.\n\nTo drop a function, you must have the DELETE privilege for the mysql\ndatabase. This is because DROP FUNCTION removes a row from the\nmysql.func system table that records the function\'s name, type, and\nshared library name.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/drop-function-udf.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/drop-function-udf.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (340,22,'DROP FUNCTION UDF','Syntax:\nDROP FUNCTION function_name\n\nThis statement drops the user-defined function (UDF) named\nfunction_name.\n\nTo drop a function, you must have the DELETE privilege for the mysql\nsystem database. This is because DROP FUNCTION removes a row from the\nmysql.func system table that records the function\'s name, type, and\nshared library name.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/drop-function-udf.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/drop-function-udf.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (341,7,'ST_VALIDATE','ST_Validate(g)\n\nValidates a geometry according to the OGC specification. A geometry can\nbe syntactically well-formed (WKB value plus SRID) but geometrically\ninvalid. For example, this polygon is geometrically invalid: POLYGON((0\n0, 0 0, 0 0, 0 0, 0 0))\n\nST_Validate() returns the geometry if it is syntactically well-formed\nand is geometrically valid, NULL if the argument is not syntactically\nwell-formed or is not geometrically valid or is NULL.\n\nST_Validate() can be used to filter out invalid geometry data, although\nat a cost. For applications that require more precise results not\ntainted by invalid data, this penalty may be worthwhile.\n\nIf the geometry argument is valid, it is returned as is, except that if\nan input Polygon or MultiPolygon has clockwise rings, those rings are\nreversed before checking for validity. If the geometry is valid, the\nvalue with the reversed rings is returned.\n\nThe only valid empty geometry is represented in the form of an empty\ngeometry collection value. ST_Validate() returns it directly without\nfurther checks in this case.\n\nST_Validate() works only for the Cartesian coordinate system and\nrequires a geometry argument with an SRID of 0. An ER_WRONG_ARGUMENTS\nerror occurs otherwise.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/spatial-convenience-functions.html\n\n','mysql> SET @ls1 = ST_GeomFromText(\'LINESTRING(0 0)\');\nmysql> SET @ls2 = ST_GeomFromText(\'LINESTRING(0 0, 1 1)\');\nmysql> SELECT ST_AsText(ST_Validate(@ls1));\n+------------------------------+\n| ST_AsText(ST_Validate(@ls1)) |\n+------------------------------+\n| NULL |\n+------------------------------+\nmysql> SELECT ST_AsText(ST_Validate(@ls2));\n+------------------------------+\n| ST_AsText(ST_Validate(@ls2)) |\n+------------------------------+\n| LINESTRING(0 0,1 1) |\n+------------------------------+\n','http://dev.mysql.com/doc/refman/5.7/en/spatial-convenience-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (342,38,'UPDATEXML','Syntax:\nUpdateXML(xml_target, xpath_expr, new_xml)\n\nThis function replaces a single portion of a given fragment of XML\nmarkup xml_target with a new XML fragment new_xml, and then returns the\nchanged XML. The portion of xml_target that is replaced matches an\nXPath expression xpath_expr supplied by the user.\n\nIf no expression matching xpath_expr is found, or if multiple matches\nare found, the function returns the original xml_target XML fragment.\nAll three arguments should be strings.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/xml-functions.html\n\n','mysql> SELECT\n -> UpdateXML(\'ccc\', \'/a\', \'fff\') AS val1,\n -> UpdateXML(\'ccc\', \'/b\', \'fff\') AS val2,\n -> UpdateXML(\'ccc\', \'//b\', \'fff\') AS val3,\n -> UpdateXML(\'ccc\', \'/a/d\', \'fff\') AS val4,\n -> UpdateXML(\'ccc\', \'/a/d\', \'fff\') AS val5\n -> \\G\n\n*************************** 1. row ***************************\nval1: fff\nval2: ccc\nval3: fff\nval4: cccfff\nval5: ccc\n','http://dev.mysql.com/doc/refman/5.7/en/xml-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (343,8,'RESET SLAVE','Syntax:\nRESET SLAVE [ALL] [channel_option]\n\nchannel_option:\n FOR CHANNEL channel\n\nRESET SLAVE makes the slave forget its replication position in the\nmaster\'s binary log. This statement is meant to be used for a clean\nstart: It clears the master info and relay log info repositories,\ndeletes all the relay log files, and starts a new relay log file. It\nalso resets to 0 the replication delay specified with the MASTER_DELAY\noption to CHANGE MASTER TO. RESET SLAVE does not change the values of\ngtid_executed or gtid_purged. To use RESET SLAVE, the slave replication\nthreads must be stopped, so on a running slave use STOP SLAVE before\nissuing RESET SLAVE.\n\n*Note*:\n\nAll relay log files are deleted, even if they have not been completely\nexecuted by the slave SQL thread. (This is a condition likely to exist\non a replication slave if you have issued a STOP SLAVE statement or if\nthe slave is highly loaded.)\n\nThe optional FOR CHANNEL channel clause enables you to name which\nreplication channel the statement applies to. Providing a FOR CHANNEL\nchannel clause applies the RESET SLAVE statement to a specific\nreplication channel. Combining a FOR CHANNEL channel clause with the\nALL option deletes the specified channel. If no channel is named and no\nextra channels exist, the statement applies to the default channel.\nIssuing a RESET SLAVE ALL statement without a FOR CHANNEL channel\nclause when multiple replication channels exist deletes all replication\nchannels and recreates only the default channel. See\nhttp://dev.mysql.com/doc/refman/5.7/en/replication-channels.html for\nmore information.\n\nRESET SLAVE does not change any replication connection parameters such\nas master host, master port, master user, or master password, which are\nretained in memory. This means that START SLAVE can be issued without\nrequiring a CHANGE MASTER TO statement following RESET SLAVE.\n\nConnection parameters are reset by RESET SLAVE ALL. (RESET SLAVE\nfollowed by a restart of the slave mysqld also does this.)\n\nRESET SLAVE causes an implicit commit of an ongoing transaction. See\nhttp://dev.mysql.com/doc/refman/5.7/en/implicit-commit.html.\n\nIf the slave SQL thread was in the middle of replicating temporary\ntables when it was stopped, and RESET SLAVE is issued, these replicated\ntemporary tables are deleted on the slave.\n\nPrior to MySQL 5.7.5, RESET SLAVE also had the effect of resetting both\nthe heartbeat period (Slave_heartbeat_period) and\nSSL_VERIFY_SERVER_CERT. This issue is fixed in MySQL 5.7.5 and later.\n(Bug #18777899, Bug #18778485)\n\nPrior to MySQL 5.7.5, RESET SLAVE ALL did not clear the\nIGNORE_SERVER_IDS list set by CHANGE MASTER TO. In MySQL 5.7.5 and\nlater, the statement clears the list. (Bug #18816897)\n\n*Note*:\n\nWhen used on an NDB Cluster replication slave SQL node, RESET SLAVE\nclears the mysql.ndb_apply_status table. You should keep in mind when\nusing this statement that ndb_apply_status uses the NDB storage engine\nand so is shared by all SQL nodes attached to the slave cluster.\n\nYou can override this behavior by issuing SET GLOBAL\n@@ndb_clear_apply_status=OFF prior to executing RESET SLAVE, which\nkeeps the slave from purging the ndb_apply_status table in such cases.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/reset-slave.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/reset-slave.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (343,8,'RESET SLAVE','Syntax:\nRESET SLAVE [ALL] [channel_option]\n\nchannel_option:\n FOR CHANNEL channel\n\nRESET SLAVE makes the slave forget its replication position in the\nmaster\'s binary log. This statement is meant to be used for a clean\nstart: It clears the master info and relay log info repositories,\ndeletes all the relay log files, and starts a new relay log file. It\nalso resets to 0 the replication delay specified with the MASTER_DELAY\noption to CHANGE MASTER TO. RESET SLAVE does not change the values of\ngtid_executed or gtid_purged.\n\n*Note*:\n\nAll relay log files are deleted, even if they have not been completely\nexecuted by the slave SQL thread. (This is a condition likely to exist\non a replication slave if you have issued a STOP SLAVE statement or if\nthe slave is highly loaded.)\n\nTo use RESET SLAVE, the slave replication threads must be stopped, so\non a running slave use STOP SLAVE before issuing RESET SLAVE. To use\nRESET SLAVE on a Group Replication group member, the member status must\nbe OFFLINE, meaning that the plugin is loaded but the member does not\ncurrently belong to any group. A group member can be taken offline by\nusing a STOP GROUP REPLICATION statement.\n\nThe optional FOR CHANNEL channel clause enables you to name which\nreplication channel the statement applies to. Providing a FOR CHANNEL\nchannel clause applies the RESET SLAVE statement to a specific\nreplication channel. Combining a FOR CHANNEL channel clause with the\nALL option deletes the specified channel. If no channel is named and no\nextra channels exist, the statement applies to the default channel.\nIssuing a RESET SLAVE ALL statement without a FOR CHANNEL channel\nclause when multiple replication channels exist deletes all replication\nchannels and recreates only the default channel. See\nhttp://dev.mysql.com/doc/refman/5.7/en/replication-channels.html for\nmore information.\n\nRESET SLAVE does not change any replication connection parameters such\nas master host, master port, master user, or master password.\n\no From MySQL 5.7.24, when master_info_repository=TABLE is set on the\n server, replication connection parameters are preserved in the\n crash-safe InnoDB table mysql.slave_master_info as part of the RESET\n SLAVE operation. They are also retained in memory. In the event of a\n server crash or deliberate restart after issuing RESET SLAVE but\n before issuing START SLAVE, the replication connection parameters are\n retrieved from the table and reused for the new connection.\n\no When master_info_repository=FILE is set on the server (which is the\n default in MySQL 5.7), replication connection parameters are only\n retained in memory. If the slave mysqld is restarted immediately\n after issuing RESET SLAVE due to a server crash or deliberate\n restart, the connection parameters are lost. In that case, you must\n issue a CHANGE MASTER TO statement after the server start to\n respecify the connection parameters before issuing START SLAVE.\n\nIf you want to reset the connection parameters intentionally, you need\nto use RESET SLAVE ALL, which clears the connection parameters. In that\ncase, you must issue a CHANGE MASTER TO statement after the server\nstart to specify the new connection parameters.\n\nRESET SLAVE causes an implicit commit of an ongoing transaction. See\nhttp://dev.mysql.com/doc/refman/5.7/en/implicit-commit.html.\n\nIf the slave SQL thread was in the middle of replicating temporary\ntables when it was stopped, and RESET SLAVE is issued, these replicated\ntemporary tables are deleted on the slave.\n\nPrior to MySQL 5.7.5, RESET SLAVE also had the effect of resetting both\nthe heartbeat period (Slave_heartbeat_period) and\nSSL_VERIFY_SERVER_CERT. This issue is fixed in MySQL 5.7.5 and later.\n(Bug #18777899, Bug #18778485)\n\nPrior to MySQL 5.7.5, RESET SLAVE ALL did not clear the\nIGNORE_SERVER_IDS list set by CHANGE MASTER TO. In MySQL 5.7.5 and\nlater, the statement clears the list. (Bug #18816897)\n\n*Note*:\n\nWhen used on an NDB Cluster replication slave SQL node, RESET SLAVE\nclears the mysql.ndb_apply_status table. You should keep in mind when\nusing this statement that ndb_apply_status uses the NDB storage engine\nand so is shared by all SQL nodes attached to the slave cluster.\n\nYou can override this behavior by issuing SET GLOBAL\n@@ndb_clear_apply_status=OFF prior to executing RESET SLAVE, which\nkeeps the slave from purging the ndb_apply_status table in such cases.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/reset-slave.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/reset-slave.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (344,7,'ST_POINTFROMGEOHASH','ST_PointFromGeoHash(geohash_str, srid)\n\nReturns a POINT value containing the decoded geohash value, given a\ngeohash string value.\n\nThe X and Y coordinates of the point are the longitude in the range\n[−180, 180] and the latitude in the range [−90, 90], respectively.\n\nIf any argument is NULL, the return value is NULL. If any argument is\ninvalid, an error occurs.\n\nThe srid argument is an unsigned 32-bit integer.\n\nThe remarks in the description of ST_LatFromGeoHash() regarding the\nmaximum number of characters processed from the geohash_str argument\nalso apply to ST_PointFromGeoHash().\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/spatial-geohash-functions.html\n\n','mysql> SET @gh = ST_GeoHash(45,-20,10);\nmysql> SELECT ST_AsText(ST_PointFromGeoHash(@gh,0));\n+---------------------------------------+\n| ST_AsText(ST_PointFromGeoHash(@gh,0)) |\n+---------------------------------------+\n| POINT(45 -20) |\n+---------------------------------------+\n','http://dev.mysql.com/doc/refman/5.7/en/spatial-geohash-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (345,32,'DAY','Syntax:\nDAY(date)\n\nDAY() is a synonym for DAYOFMONTH().\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (346,14,'UUID','Syntax:\nUUID()\n\nReturns a Universal Unique Identifier (UUID) generated according to RFC\n4122, "A Universally Unique IDentifier (UUID) URN Namespace"\n(http://www.ietf.org/rfc/rfc4122.txt).\n\nA UUID is designed as a number that is globally unique in space and\ntime. Two calls to UUID() are expected to generate two different\nvalues, even if these calls are performed on two separate devices not\nconnected to each other.\n\n*Warning*:\n\nAlthough UUID() values are intended to be unique, they are not\nnecessarily unguessable or unpredictable. If unpredictability is\nrequired, UUID values should be generated some other way.\n\nUUID() returns a value that conforms to UUID version 1 as described in\nRFC 4122. The value is a 128-bit number represented as a utf8 string of\nfive hexadecimal numbers in aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\nformat:\n\no The first three numbers are generated from the low, middle, and high\n parts of a timestamp. The high part also includes the UUID version\n number.\n\no The fourth number preserves temporal uniqueness in case the timestamp\n value loses monotonicity (for example, due to daylight saving time).\n\no The fifth number is an IEEE 802 node number that provides spatial\n uniqueness. A random number is substituted if the latter is not\n available (for example, because the host device has no Ethernet card,\n or it is unknown how to find the hardware address of an interface on\n the host operating system). In this case, spatial uniqueness cannot\n be guaranteed. Nevertheless, a collision should have very low\n probability.\n\n The MAC address of an interface is taken into account only on FreeBSD\n and Linux. On other operating systems, MySQL uses a randomly\n generated 48-bit number.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html\n\n','mysql> SELECT UUID();\n -> \'6ccd780c-baba-1026-9564-5b8c656024db\'\n','http://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html'); @@ -441,12 +441,12 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example, INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (360,6,'IFNULL','Syntax:\nIFNULL(expr1,expr2)\n\nIf expr1 is not NULL, IFNULL() returns expr1; otherwise it returns\nexpr2.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html\n\n','mysql> SELECT IFNULL(1,0);\n -> 1\nmysql> SELECT IFNULL(NULL,10);\n -> 10\nmysql> SELECT IFNULL(1/0,10);\n -> 10\nmysql> SELECT IFNULL(1/0,\'yes\');\n -> \'yes\'\n','http://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (361,27,'SHOW FUNCTION CODE','Syntax:\nSHOW FUNCTION CODE func_name\n\nThis statement is similar to SHOW PROCEDURE CODE but for stored\nfunctions. See [HELP SHOW PROCEDURE CODE].\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/show-function-code.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/show-function-code.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (362,27,'SHOW ERRORS','Syntax:\nSHOW ERRORS [LIMIT [offset,] row_count]\nSHOW COUNT(*) ERRORS\n\nSHOW ERRORS is a diagnostic statement that is similar to SHOW WARNINGS,\nexcept that it displays information only for errors, rather than for\nerrors, warnings, and notes.\n\nThe LIMIT clause has the same syntax as for the SELECT statement. See\nhttp://dev.mysql.com/doc/refman/5.7/en/select.html.\n\nThe SHOW COUNT(*) ERRORS statement displays the number of errors. You\ncan also retrieve this number from the error_count variable:\n\nSHOW COUNT(*) ERRORS;\nSELECT @@error_count;\n\nSHOW ERRORS and error_count apply only to errors, not warnings or\nnotes. In other respects, they are similar to SHOW WARNINGS and\nwarning_count. In particular, SHOW ERRORS cannot display information\nfor more than max_error_count messages, and error_count can exceed the\nvalue of max_error_count if the number of errors exceeds\nmax_error_count.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/show-errors.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/show-errors.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (363,27,'SET NAMES','Syntax:\nSET NAMES {\'charset_name\'\n [COLLATE \'collation_name\'] | DEFAULT}\n\nThis statement sets the three session system variables\ncharacter_set_client, character_set_connection, and\ncharacter_set_results to the given character set. Setting\ncharacter_set_connection to charset_name also sets collation_connection\nto the default collation for charset_name. See\nhttp://dev.mysql.com/doc/refman/5.7/en/charset-connection.html.\n\nThe optional COLLATE clause may be used to specify a collation\nexplicitly. If given, the collation must one of the permitted\ncollations for charset_name.\n\ncharset_name and collation_name may be quoted or unquoted.\n\nThe default mapping can be restored by using a value of DEFAULT. The\ndefault depends on the server configuration.\n\nucs2, utf16, and utf32 cannot be used as a client character set, which\nmeans that they do not work for SET NAMES.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/set-names.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/set-names.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (363,27,'SET NAMES','Syntax:\nSET NAMES {\'charset_name\'\n [COLLATE \'collation_name\'] | DEFAULT}\n\nThis statement sets the three session system variables\ncharacter_set_client, character_set_connection, and\ncharacter_set_results to the given character set. Setting\ncharacter_set_connection to charset_name also sets collation_connection\nto the default collation for charset_name. See\nhttp://dev.mysql.com/doc/refman/5.7/en/charset-connection.html.\n\nThe optional COLLATE clause may be used to specify a collation\nexplicitly. If given, the collation must one of the permitted\ncollations for charset_name.\n\ncharset_name and collation_name may be quoted or unquoted.\n\nThe default mapping can be restored by using a value of DEFAULT. The\ndefault depends on the server configuration.\n\nSome character sets cannot be used as the client character set.\nAttempting to use them with SET NAMES produces an error. See\nhttp://dev.mysql.com/doc/refman/5.7/en/charset-connection.html#charset-\nconnection-impermissible-client-charset.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/set-names.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/set-names.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (364,20,'LEAST','Syntax:\nLEAST(value1,value2,...)\n\nWith two or more arguments, returns the smallest (minimum-valued)\nargument. The arguments are compared using the following rules:\n\no If any argument is NULL, the result is NULL. No comparison is needed.\n\no If all arguments are integer-valued, they are compared as integers.\n\no If at least one argument is double precision, they are compared as\n double-precision values. Otherwise, if at least one argument is a\n DECIMAL value, they are compared as DECIMAL values.\n\no If the arguments comprise a mix of numbers and strings, they are\n compared as numbers.\n\no If any argument is a nonbinary (character) string, the arguments are\n compared as nonbinary strings.\n\no In all other cases, the arguments are compared as binary strings.\n\nThe return type of LEAST() is the aggregated type of the comparison\nargument types.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html\n\n','mysql> SELECT LEAST(2,0);\n -> 0\nmysql> SELECT LEAST(34.0,3.0,5.0,767.0);\n -> 3.0\nmysql> SELECT LEAST(\'B\',\'A\',\'C\');\n -> \'A\'\n','http://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (365,20,'=','=\n\nEqual:\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html\n\n','mysql> SELECT 1 = 0;\n -> 0\nmysql> SELECT \'0\' = 0;\n -> 1\nmysql> SELECT \'0.0\' = 0;\n -> 1\nmysql> SELECT \'0.01\' = 0;\n -> 0\nmysql> SELECT \'.01\' = 0.01;\n -> 1\n','http://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (366,4,'ST_GEOMCOLLFROMTEXT','ST_GeomCollFromText(wkt[, srid]), ST_GeometryCollectionFromText(wkt[,\nsrid]), ST_GeomCollFromTxt(wkt[, srid])\n\nConstructs a GeometryCollection value using its WKT representation and\nSRID.\n\nIf the geometry argument is NULL or not a syntactically well-formed\ngeometry, or if the SRID argument is NULL, the return value is NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html\n\n','mysql> SET @g = "MULTILINESTRING((10 10, 11 11), (9 9, 10 10))";\nmysql> SELECT ST_AsText(ST_GeomCollFromText(@g));\n+--------------------------------------------+\n| ST_AsText(ST_GeomCollFromText(@g)) |\n+--------------------------------------------+\n| MULTILINESTRING((10 10,11 11),(9 9,10 10)) |\n+--------------------------------------------+\n','http://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (367,14,'IS_IPV4_MAPPED','Syntax:\nIS_IPV4_MAPPED(expr)\n\nThis function takes an IPv6 address represented in numeric form as a\nbinary string, as returned by INET6_ATON(). It returns 1 if the\nargument is a valid IPv4-mapped IPv6 address, 0 otherwise. IPv4-mapped\naddresses have the form ::ffff:ipv4_address.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html\n\n','mysql> SELECT IS_IPV4_MAPPED(INET6_ATON(\'::10.0.5.9\'));\n -> 0\nmysql> SELECT IS_IPV4_MAPPED(INET6_ATON(\'::ffff:10.0.5.9\'));\n -> 1\n','http://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (368,10,'CREATE USER','Syntax:\nCREATE USER [IF NOT EXISTS]\n user [auth_option] [, user [auth_option]] ...\n [REQUIRE {NONE | tls_option [[AND] tls_option] ...}]\n [WITH resource_option [resource_option] ...]\n [password_option | lock_option] ...\n\nuser:\n (see )\n\nauth_option: {\n IDENTIFIED BY \'auth_string\'\n | IDENTIFIED WITH auth_plugin\n | IDENTIFIED WITH auth_plugin BY \'auth_string\'\n | IDENTIFIED WITH auth_plugin AS \'hash_string\'\n | IDENTIFIED BY PASSWORD \'hash_string\'\n}\n\ntls_option: {\n SSL\n | X509\n | CIPHER \'cipher\'\n | ISSUER \'issuer\'\n | SUBJECT \'subject\'\n}\n\nresource_option: {\n MAX_QUERIES_PER_HOUR count\n | MAX_UPDATES_PER_HOUR count\n | MAX_CONNECTIONS_PER_HOUR count\n | MAX_USER_CONNECTIONS count\n}\n\npassword_option: {\n PASSWORD EXPIRE\n | PASSWORD EXPIRE DEFAULT\n | PASSWORD EXPIRE NEVER\n | PASSWORD EXPIRE INTERVAL N DAY\n}\n\nlock_option: {\n ACCOUNT LOCK\n | ACCOUNT UNLOCK\n}\n\nThe CREATE USER statement creates new MySQL accounts. It enables\nauthentication, SSL/TLS, resource-limit, and password-management\nproperties to be established for new accounts, and controls whether\naccounts are initially locked or unlocked.\n\nTo use CREATE USER, you must have the global CREATE USER privilege, or\nthe INSERT privilege for the mysql database. When the read_only system\nvariable is enabled, CREATE USER additionally requires the SUPER\nprivilege.\n\nAn error occurs if you try to create an account that already exists. If\nthe IF NOT EXISTS clause is given, the statement produces a warning for\neach named account that already exists, rather than an error.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/create-user.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/create-user.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (368,10,'CREATE USER','Syntax:\nCREATE USER [IF NOT EXISTS]\n user [auth_option] [, user [auth_option]] ...\n [REQUIRE {NONE | tls_option [[AND] tls_option] ...}]\n [WITH resource_option [resource_option] ...]\n [password_option | lock_option] ...\n\nuser:\n (see )\n\nauth_option: {\n IDENTIFIED BY \'auth_string\'\n | IDENTIFIED WITH auth_plugin\n | IDENTIFIED WITH auth_plugin BY \'auth_string\'\n | IDENTIFIED WITH auth_plugin AS \'hash_string\'\n | IDENTIFIED BY PASSWORD \'hash_string\'\n}\n\ntls_option: {\n SSL\n | X509\n | CIPHER \'cipher\'\n | ISSUER \'issuer\'\n | SUBJECT \'subject\'\n}\n\nresource_option: {\n MAX_QUERIES_PER_HOUR count\n | MAX_UPDATES_PER_HOUR count\n | MAX_CONNECTIONS_PER_HOUR count\n | MAX_USER_CONNECTIONS count\n}\n\npassword_option: {\n PASSWORD EXPIRE\n | PASSWORD EXPIRE DEFAULT\n | PASSWORD EXPIRE NEVER\n | PASSWORD EXPIRE INTERVAL N DAY\n}\n\nlock_option: {\n ACCOUNT LOCK\n | ACCOUNT UNLOCK\n}\n\nThe CREATE USER statement creates new MySQL accounts. It enables\nauthentication, SSL/TLS, resource-limit, and password-management\nproperties to be established for new accounts, and controls whether\naccounts are initially locked or unlocked.\n\nTo use CREATE USER, you must have the global CREATE USER privilege, or\nthe INSERT privilege for the mysql system database. When the read_only\nsystem variable is enabled, CREATE USER additionally requires the SUPER\nprivilege.\n\nAn error occurs if you try to create an account that already exists. If\nthe IF NOT EXISTS clause is given, the statement produces a warning for\neach named account that already exists, rather than an error.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/create-user.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/create-user.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (369,25,'POINT','Point(x, y)\n\nConstructs a Point using its coordinates.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/gis-mysql-specific-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/gis-mysql-specific-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (370,38,'LCASE','Syntax:\nLCASE(str)\n\nLCASE() is a synonym for LOWER().\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/string-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/string-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (371,7,'CREATE_DH_PARAMETERS','CREATE_DH_PARAMETERS(key_len)\n\nCreates a shared secret for generating a DH private/public key pair and\nreturns a binary string that can be passed to\nCREATE_ASYMMETRIC_PRIV_KEY(). If secret generation fails, the result is\nnull.\n\nSupported key_len values: The minimum and maximum key lengths in bits\nare 1,024 and 10,000. These key-length limits are constraints imposed\nby OpenSSL. Server administrators can impose additional limits on\nmaximum key length by setting environment variables. See\nhttp://dev.mysql.com/doc/refman/5.7/en/enterprise-encryption-usage.html\n.\n\nFor an example showing how to use the return value for generating\nsymmetric keys, see the description of ASYMMETRIC_DERIVE().\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/enterprise-encryption-functions.html\n\n','SET @dhp = CREATE_DH_PARAMETERS(1024);\n','http://dev.mysql.com/doc/refman/5.7/en/enterprise-encryption-functions.html'); @@ -460,7 +460,7 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example, INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (379,33,'ST_ASBINARY','ST_AsBinary(g), ST_AsWKB(g)\n\nConverts a value in internal geometry format to its WKB representation\nand returns the binary result.\n\nIf the argument is NULL, the return value is NULL. If the argument is\nnot a syntactically well-formed geometry, an ER_GIS_INVALID_DATA error\noccurs.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/gis-format-conversion-functions.html\n\n','SELECT ST_AsBinary(g) FROM geom;\n','http://dev.mysql.com/doc/refman/5.7/en/gis-format-conversion-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (380,38,'TO_BASE64','Syntax:\nTO_BASE64(str)\n\nConverts the string argument to base-64 encoded form and returns the\nresult as a character string with the connection character set and\ncollation. If the argument is not a string, it is converted to a string\nbefore conversion takes place. The result is NULL if the argument is\nNULL. Base-64 encoded strings can be decoded using the FROM_BASE64()\nfunction.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/string-functions.html\n\n','mysql> SELECT TO_BASE64(\'abc\'), FROM_BASE64(TO_BASE64(\'abc\'));\n -> \'JWJj\', \'abc\'\n','http://dev.mysql.com/doc/refman/5.7/en/string-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (381,12,'DES_DECRYPT','Syntax:\nDES_DECRYPT(crypt_str[,key_str])\n\nDecrypts a string encrypted with DES_ENCRYPT(). If an error occurs,\nthis function returns NULL.\n\nThis function works only if MySQL has been configured with SSL support.\nSee http://dev.mysql.com/doc/refman/5.7/en/encrypted-connections.html.\n\nIf no key_str argument is given, DES_DECRYPT() examines the first byte\nof the encrypted string to determine the DES key number that was used\nto encrypt the original string, and then reads the key from the DES key\nfile to decrypt the message. For this to work, the user must have the\nSUPER privilege. The key file can be specified with the --des-key-file\nserver option.\n\nIf you pass this function a key_str argument, that string is used as\nthe key for decrypting the message.\n\nIf the crypt_str argument does not appear to be an encrypted string,\nMySQL returns the given crypt_str.\n\n*Note*:\n\nThe DES_ENCRYPT() and DES_DECRYPT() functions are deprecated as of\nMySQL 5.7.6, will be removed in a future MySQL release, and should no\nlonger be used. Consider using AES_ENCRYPT() and AES_DECRYPT() instead.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (382,2,'ST_AREA','ST_Area(poly)\n\nReturns a double-precision number indicating the area of the argument,\nas measured in its spatial reference system. For arguments of dimension\n0 or 1, the result is 0. If the argument is an empty geometry the\nreturn value is 0. If the argument is NULL the return value is NULL.\n\nThe result is the sum of the area values of all components for a\ngeometry collection. If a geometry collection is empty, its area is\nreturned as 0.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/gis-polygon-property-functions.html\n\n','mysql> SET @poly =\n \'Polygon((0 0,0 3,3 0,0 0),(1 1,1 2,2 1,1 1))\';\nmysql> SELECT ST_Area(ST_GeomFromText(@poly));\n+---------------------------------+\n| ST_Area(ST_GeomFromText(@poly)) |\n+---------------------------------+\n| 4 |\n+---------------------------------+\n\nmysql> SET @mpoly =\n -> \'MultiPolygon(((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1)))\';\nmysql> SELECT ST_Area(ST_GeomFromText(@mpoly));\n+----------------------------------+\n| ST_Area(ST_GeomFromText(@mpoly)) |\n+----------------------------------+\n| 8 |\n+----------------------------------+\n','http://dev.mysql.com/doc/refman/5.7/en/gis-polygon-property-functions.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (382,2,'ST_AREA','ST_Area({poly|mpoly})\n\nReturns a double-precision number indicating the area of the Polygon or\nMultiPolygon argument, as measured in its spatial reference system. For\narguments of dimension 0 or 1, the result is 0. If the argument is an\nempty geometry the return value is 0. If the argument is NULL the\nreturn value is NULL.\n\nThe result is the sum of the area values of all components for a\ngeometry collection. If a geometry collection is empty, its area is\nreturned as 0.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/gis-polygon-property-functions.html\n\n','mysql> SET @poly =\n \'Polygon((0 0,0 3,3 0,0 0),(1 1,1 2,2 1,1 1))\';\nmysql> SELECT ST_Area(ST_GeomFromText(@poly));\n+---------------------------------+\n| ST_Area(ST_GeomFromText(@poly)) |\n+---------------------------------+\n| 4 |\n+---------------------------------+\n\nmysql> SET @mpoly =\n \'MultiPolygon(((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1)))\';\nmysql> SELECT ST_Area(ST_GeomFromText(@mpoly));\n+----------------------------------+\n| ST_Area(ST_GeomFromText(@mpoly)) |\n+----------------------------------+\n| 8 |\n+----------------------------------+\n','http://dev.mysql.com/doc/refman/5.7/en/gis-polygon-property-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (383,13,'ENDPOINT','EndPoint(ls)\n\nST_EndPoint() and EndPoint() are synonyms. For more information, see\nthe description of ST_EndPoint().\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/gis-linestring-property-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/gis-linestring-property-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (384,28,'INSERT','Syntax:\nINSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]\n [INTO] tbl_name\n [PARTITION (partition_name [, partition_name] ...)]\n [(col_name [, col_name] ...)]\n {VALUES | VALUE} (value_list) [, (value_list)] ...\n [ON DUPLICATE KEY UPDATE assignment_list]\n\nINSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]\n [INTO] tbl_name\n [PARTITION (partition_name [, partition_name] ...)]\n SET assignment_list\n [ON DUPLICATE KEY UPDATE assignment_list]\n\nINSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]\n [INTO] tbl_name\n [PARTITION (partition_name [, partition_name] ...)]\n [(col_name [, col_name] ...)]\n SELECT ...\n [ON DUPLICATE KEY UPDATE assignment_list]\n\nvalue:\n {expr | DEFAULT}\n\nvalue_list:\n value [, value] ...\n\nassignment:\n col_name = value\n\nassignment_list:\n assignment [, assignment] ...\n\nINSERT inserts new rows into an existing table. The INSERT ... VALUES\nand INSERT ... SET forms of the statement insert rows based on\nexplicitly specified values. The INSERT ... SELECT form inserts rows\nselected from another table or tables. INSERT with an ON DUPLICATE KEY\nUPDATE clause enables existing rows to be updated if a row to be\ninserted would cause a duplicate value in a UNIQUE index or PRIMARY\nKEY.\n\nFor additional information about INSERT ... SELECT and INSERT ... ON\nDUPLICATE KEY UPDATE, see [HELP INSERT SELECT], and\nhttp://dev.mysql.com/doc/refman/5.7/en/insert-on-duplicate.html.\n\nIn MySQL 5.7, the DELAYED keyword is accepted but ignored by the\nserver. For the reasons for this, see [HELP INSERT DELAYED],\n\nInserting into a table requires the INSERT privilege for the table. If\nthe ON DUPLICATE KEY UPDATE clause is used and a duplicate key causes\nan UPDATE to be performed instead, the statement requires the UPDATE\nprivilege for the columns to be updated. For columns that are read but\nnot modified you need only the SELECT privilege (such as for a column\nreferenced only on the right hand side of an col_name=expr assignment\nin an ON DUPLICATE KEY UPDATE clause).\n\nWhen inserting into a partitioned table, you can control which\npartitions and subpartitions accept new rows. The PARTITION option\ntakes a list of the comma-separated names of one or more partitions or\nsubpartitions (or both) of the table. If any of the rows to be inserted\nby a given INSERT statement do not match one of the partitions listed,\nthe INSERT statement fails with the error Found a row not matching the\ngiven partition set. For more information and examples, see\nhttp://dev.mysql.com/doc/refman/5.7/en/partitioning-selection.html.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/insert.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/insert.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (385,16,'COUNT','Syntax:\nCOUNT(expr)\n\nReturns a count of the number of non-NULL values of expr in the rows\nretrieved by a SELECT statement. The result is a BIGINT value.\n\nIf there are no matching rows, COUNT() returns 0.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html\n\n','mysql> SELECT student.student_name,COUNT(*)\n FROM student,course\n WHERE student.student_id=course.student_id\n GROUP BY student_name;\n','http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html'); @@ -474,12 +474,12 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example, INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (393,12,'DECODE','Syntax:\nDECODE(crypt_str,pass_str)\n\nDECODE() decrypts the encrypted string crypt_str using pass_str as the\npassword. crypt_str should be a string returned from ENCODE().\n\n*Note*:\n\nThe ENCODE() and DECODE() functions are deprecated in MySQL 5.7, will\nbe removed in a future MySQL release, and should no longer be used.\nConsider using AES_ENCRYPT() and AES_DECRYPT() instead.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (394,7,'JSON_ARRAY_INSERT','Syntax:\nJSON_ARRAY_INSERT(json_doc, path, val[, path, val] ...)\n\nUpdates a JSON document, inserting into an array within the document\nand returning the modified document. Returns NULL if any argument is\nNULL. An error occurs if the json_doc argument is not a valid JSON\ndocument or any path argument is not a valid path expression or\ncontains a * or ** wildcard or does not end with an array element\nidentifier.\n\nThe path-value pairs are evaluated left to right. The document produced\nby evaluating one pair becomes the new value against which the next\npair is evaluated.\n\nPairs for which the path does not identify any array in the JSON\ndocument are ignored. If a path identifies an array element, the\ncorresponding value is inserted at that element position, shifting any\nfollowing values to the right. If a path identifies an array position\npast the end of an array, the value is inserted at the end of the\narray.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/json-modification-functions.html\n\n','mysql> SET @j = \'["a", {"b": [1, 2]}, [3, 4]]\';\nmysql> SELECT JSON_ARRAY_INSERT(@j, \'$[1]\', \'x\');\n+------------------------------------+\n| JSON_ARRAY_INSERT(@j, \'$[1]\', \'x\') |\n+------------------------------------+\n| ["a", "x", {"b": [1, 2]}, [3, 4]] |\n+------------------------------------+\nmysql> SELECT JSON_ARRAY_INSERT(@j, \'$[100]\', \'x\');\n+--------------------------------------+\n| JSON_ARRAY_INSERT(@j, \'$[100]\', \'x\') |\n+--------------------------------------+\n| ["a", {"b": [1, 2]}, [3, 4], "x"] |\n+--------------------------------------+\nmysql> SELECT JSON_ARRAY_INSERT(@j, \'$[1].b[0]\', \'x\');\n+-----------------------------------------+\n| JSON_ARRAY_INSERT(@j, \'$[1].b[0]\', \'x\') |\n+-----------------------------------------+\n| ["a", {"b": ["x", 1, 2]}, [3, 4]] |\n+-----------------------------------------+\nmysql> SELECT JSON_ARRAY_INSERT(@j, \'$[2][1]\', \'y\');\n+---------------------------------------+\n| JSON_ARRAY_INSERT(@j, \'$[2][1]\', \'y\') |\n+---------------------------------------+\n| ["a", {"b": [1, 2]}, [3, "y", 4]] |\n+---------------------------------------+\nmysql> SELECT JSON_ARRAY_INSERT(@j, \'$[0]\', \'x\', \'$[2][1]\', \'y\');\n+----------------------------------------------------+\n| JSON_ARRAY_INSERT(@j, \'$[0]\', \'x\', \'$[2][1]\', \'y\') |\n+----------------------------------------------------+\n| ["x", "a", {"b": [1, 2]}, [3, 4]] |\n+----------------------------------------------------+\n','http://dev.mysql.com/doc/refman/5.7/en/json-modification-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (395,20,'<=>','Syntax:\n<=>\n\nNULL-safe equal. This operator performs an equality comparison like the\n= operator, but returns 1 rather than NULL if both operands are NULL,\nand 0 rather than NULL if one operand is NULL.\n\nThe <=> operator is equivalent to the standard SQL IS NOT DISTINCT FROM\noperator.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html\n\n','mysql> SELECT 1 <=> 1, NULL <=> NULL, 1 <=> NULL;\n -> 1, 1, 0\nmysql> SELECT 1 = 1, NULL = NULL, 1 = NULL;\n -> 1, NULL, NULL\n','http://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (396,27,'RESET','Syntax:\nRESET reset_option [, reset_option] ...\n\nreset_option: {\n MASTER\n | QUERY CACHE\n | SLAVE\n}\n\nThe RESET statement is used to clear the state of various server\noperations. You must have the RELOAD privilege to execute RESET.\n\nRESET acts as a stronger version of the FLUSH statement. See [HELP\nFLUSH].\n\nThe RESET statement causes an implicit commit. See\nhttp://dev.mysql.com/doc/refman/5.7/en/implicit-commit.html.\n\nIn MySQL 5.7.1, gtid_next must be set to AUTOMATIC before issuing this\nstatement. This restriction does not apply in MySQL 5.7.2 or later.\n(Bug #16062608, Bug #16715809, Bug #69045)\n\nThe following list describes the permitted RESET statement reset_option\nvalues:\n\no RESET MASTER\n\n Deletes all binary logs listed in the index file, resets the binary\n log index file to be empty, and creates a new binary log file.\n\no RESET QUERY CACHE\n\n Removes all query results from the query cache.\n\n *Note*:\n\n The query cache is deprecated as of MySQL 5.7.20, and is removed in\n MySQL 8.0. Deprecation includes RESET QUERY CACHE.\n\no RESET SLAVE\n\n Makes the slave forget its replication position in the master binary\n logs. Also resets the relay log by deleting any existing relay log\n files and beginning a new one.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/reset.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/reset.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (396,27,'RESET','Syntax:\nRESET reset_option [, reset_option] ...\n\nreset_option: {\n MASTER\n | QUERY CACHE\n | SLAVE\n}\n\nThe RESET statement is used to clear the state of various server\noperations. You must have the RELOAD privilege to execute RESET.\n\nRESET acts as a stronger version of the FLUSH statement. See [HELP\nFLUSH].\n\nThe RESET statement causes an implicit commit. See\nhttp://dev.mysql.com/doc/refman/5.7/en/implicit-commit.html.\n\nThe following list describes the permitted RESET statement reset_option\nvalues:\n\no RESET MASTER\n\n Deletes all binary logs listed in the index file, resets the binary\n log index file to be empty, and creates a new binary log file.\n\no RESET QUERY CACHE\n\n Removes all query results from the query cache.\n\n *Note*:\n\n The query cache is deprecated as of MySQL 5.7.20, and is removed in\n MySQL 8.0. Deprecation includes RESET QUERY CACHE.\n\no RESET SLAVE\n\n Makes the slave forget its replication position in the master binary\n logs. Also resets the relay log by deleting any existing relay log\n files and beginning a new one.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/reset.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/reset.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (397,14,'GET_LOCK','Syntax:\nGET_LOCK(str,timeout)\n\nTries to obtain a lock with a name given by the string str, using a\ntimeout of timeout seconds. A negative timeout value means infinite\ntimeout. The lock is exclusive. While held by one session, other\nsessions cannot obtain a lock of the same name.\n\nReturns 1 if the lock was obtained successfully, 0 if the attempt timed\nout (for example, because another client has previously locked the\nname), or NULL if an error occurred (such as running out of memory or\nthe thread was killed with mysqladmin kill).\n\nA lock obtained with GET_LOCK() is released explicitly by executing\nRELEASE_LOCK() or implicitly when your session terminates (either\nnormally or abnormally). Lock release may also occur with another call\nto GET_LOCK():\n\no Before 5.7.5, only a single simultaneous lock can be acquired and\n GET_LOCK() releases any existing lock.\n\no In MySQL 5.7.5, GET_LOCK() was reimplemented using the metadata\n locking (MDL) subsystem and its capabilities were extended. Multiple\n simultaneous locks can be acquired and GET_LOCK() does not release\n any existing locks. It is even possible for a given session to\n acquire multiple locks for the same name. Other sessions cannot\n acquire a lock with that name until the acquiring session releases\n all its locks for the name.\n\n As a result of the MDL reimplementation, locks acquired with\n GET_LOCK() appear in the Performance Schema metadata_locks table. The\n OBJECT_TYPE column says USER LEVEL LOCK and the OBJECT_NAME column\n indicates the lock name. Also, the capability of acquiring multiple\n locks introduces the possibility of deadlock among clients. When this\n happens, the server chooses a caller and terminates its\n lock-acquisition request with an ER_USER_LOCK_DEADLOCK error. This\n error does not cause transactions to roll back.\n\nThe difference in lock acquisition behavior as of MySQL 5.7.5 can be\nseen by the following example. Suppose that you execute these\nstatements:\n\nSELECT GET_LOCK(\'lock1\',10);\nSELECT GET_LOCK(\'lock2\',10);\nSELECT RELEASE_LOCK(\'lock2\');\nSELECT RELEASE_LOCK(\'lock1\');\n\nIn MySQL 5.7.5 or later, the second GET_LOCK() acquires a second lock\nand both RELEASE_LOCK() calls return 1 (success). Before MySQL 5.7.5,\nthe second GET_LOCK() releases the first lock (\'lock1\') and the second\nRELEASE_LOCK() returns NULL (failure) because there is no \'lock1\' to\nrelease.\n\nMySQL 5.7.5 and later enforces a maximum length on lock names of 64\ncharacters. Previously, no limit was enforced.\n\nLocks obtained with GET_LOCK() are not released when transactions\ncommit or roll back.\n\nGET_LOCK() can be used to implement application locks or to simulate\nrecord locks. Names are locked on a server-wide basis. If a name has\nbeen locked within one session, GET_LOCK() blocks any request by\nanother session for a lock with the same name. This enables clients\nthat agree on a given lock name to use the name to perform cooperative\nadvisory locking. But be aware that it also enables a client that is\nnot among the set of cooperating clients to lock a name, either\ninadvertently or deliberately, and thus prevent any of the cooperating\nclients from locking that name. One way to reduce the likelihood of\nthis is to use lock names that are database-specific or\napplication-specific. For example, use lock names of the form\ndb_name.str or app_name.str.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (398,23,'BIGINT','BIGINT[(M)] [UNSIGNED] [ZEROFILL]\n\nA large integer. The signed range is -9223372036854775808 to\n9223372036854775807. The unsigned range is 0 to 18446744073709551615.\n\nSERIAL is an alias for BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/numeric-type-overview.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/numeric-type-overview.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (399,32,'CURTIME','Syntax:\nCURTIME([fsp])\n\nReturns the current time as a value in \'HH:MM:SS\' or HHMMSS format,\ndepending on whether the function is used in a string or numeric\ncontext. The value is expressed in the current time zone.\n\nIf the fsp argument is given to specify a fractional seconds precision\nfrom 0 to 6, the return value includes a fractional seconds part of\nthat many digits.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html\n\n','mysql> SELECT CURTIME();\n -> \'23:50:26\'\nmysql> SELECT CURTIME() + 0;\n -> 235026.000000\n','http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (400,37,'ST_DIMENSION','ST_Dimension(g)\n\nReturns the inherent dimension of the geometry value g, or NULL if the\nargument is NULL. The dimension can be −1, 0, 1, or 2. The meaning of\nthese values is given in\nhttp://dev.mysql.com/doc/refman/5.7/en/gis-class-geometry.html.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/gis-general-property-functions.html\n\n','mysql> SELECT ST_Dimension(ST_GeomFromText(\'LineString(1 1,2 2)\'));\n+------------------------------------------------------+\n| ST_Dimension(ST_GeomFromText(\'LineString(1 1,2 2)\')) |\n+------------------------------------------------------+\n| 1 |\n+------------------------------------------------------+\n','http://dev.mysql.com/doc/refman/5.7/en/gis-general-property-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (401,27,'SET','Syntax:\nSET variable_assignment [, variable_assignment] ...\n\nvariable_assignment:\n user_var_name = expr\n | param_name = expr\n | local_var_name = expr\n | [GLOBAL | SESSION]\n system_var_name = expr\n | [@@global. | @@session. | @@]\n system_var_name = expr\n\nSET syntax for variable assignment enables you to assign values to\ndifferent types of variables that affect the operation of the server or\nclients:\n\no System variables. See\n http://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html.\n System variables also can be set at server startup, as described in\n http://dev.mysql.com/doc/refman/5.7/en/using-system-variables.html.\n (To display system variable names and values, use the SHOW VARIABLES\n statement; see [HELP SHOW VARIABLES].)\n\no User-defined variables. See\n http://dev.mysql.com/doc/refman/5.7/en/user-variables.html.\n\no Stored procedure and function parameters, and stored program local\n variables. See\n http://dev.mysql.com/doc/refman/5.7/en/stored-program-variables.html.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/set-variable.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/set-variable.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (401,27,'SET','Syntax:\nSET variable = expr [, variable = expr] ...\n\nvariable: {\n user_var_name\n | param_name\n | local_var_name\n | {GLOBAL | @@global.} system_var_name\n | [SESSION | @@session. | @@] system_var_name\n}\n\nSET syntax for variable assignment enables you to assign values to\ndifferent types of variables that affect the operation of the server or\nclients:\n\no User-defined variables. See\n http://dev.mysql.com/doc/refman/5.7/en/user-variables.html.\n\no Stored procedure and function parameters, and stored program local\n variables. See\n http://dev.mysql.com/doc/refman/5.7/en/stored-program-variables.html.\n\no System variables. See\n http://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html.\n System variables also can be set at server startup, as described in\n http://dev.mysql.com/doc/refman/5.7/en/using-system-variables.html.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/set-variable.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/set-variable.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (402,7,'JSON_MERGE','Syntax:\nJSON_MERGE(json_doc, json_doc[, json_doc] ...)\n\nMerges two or more JSON documents. Synonym for JSON_MERGE_PRESERVE();\ndeprecated in MySQL 5.7.22 and subject to removal in a future release.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/json-modification-functions.html\n\n','mysql> SELECT JSON_MERGE(\'[1, 2]\', \'[true, false]\');\n+---------------------------------------+\n| JSON_MERGE(\'[1, 2]\', \'[true, false]\') |\n+---------------------------------------+\n| [1, 2, true, false] |\n+---------------------------------------+\n1 row in set, 1 warning (0.00 sec)\n\nmysql> SHOW WARNINGS\\G\n*************************** 1. row ***************************\n Level: Warning\n Code: 1287\nMessage: \'JSON_MERGE\' is deprecated and will be removed in a future release. \\\n Please use JSON_MERGE_PRESERVE/JSON_MERGE_PATCH instead\n1 row in set (0.00 sec)\n','http://dev.mysql.com/doc/refman/5.7/en/json-modification-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (403,28,'LOAD XML','Syntax:\nLOAD XML [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE \'file_name\'\n [REPLACE | IGNORE]\n INTO TABLE [db_name.]tbl_name\n [CHARACTER SET charset_name]\n [ROWS IDENTIFIED BY \'\']\n [IGNORE number {LINES | ROWS}]\n [(field_name_or_user_var\n [, field_name_or_user_var] ...)]\n [SET col_name={expr | DEFAULT},\n [, col_name={expr | DEFAULT}] ...]\n\nThe LOAD XML statement reads data from an XML file into a table. The\nfile_name must be given as a literal string. The tagname in the\noptional ROWS IDENTIFIED BY clause must also be given as a literal\nstring, and must be surrounded by angle brackets (< and >).\n\nLOAD XML acts as the complement of running the mysql client in XML\noutput mode (that is, starting the client with the --xml option). To\nwrite data from a table to an XML file, you can invoke the mysql client\nwith the --xml and -e options from the system shell, as shown here:\n\nshell> mysql --xml -e \'SELECT * FROM mydb.mytable\' > file.xml\n\nTo read the file back into a table, use LOAD XML INFILE. By default,\nthe element is considered to be the equivalent of a database\ntable row; this can be changed using the ROWS IDENTIFIED BY clause.\n\nThis statement supports three different XML formats:\n\no Column names as attributes and column values as attribute values:\n\n\n\no Column names as tags and column values as the content of these tags:\n\n\n value1\n value2\n\n\no Column names are the name attributes of tags, and values are\n the contents of these tags:\n\n\n value1\n value2\n\n\n This is the format used by other MySQL tools, such as mysqldump.\n\nAll three formats can be used in the same XML file; the import routine\nautomatically detects the format for each row and interprets it\ncorrectly. Tags are matched based on the tag or attribute name and the\ncolumn name.\n\nThe following clauses work essentially the same way for LOAD XML as\nthey do for LOAD DATA:\n\no LOW_PRIORITY or CONCURRENT\n\no LOCAL\n\no REPLACE or IGNORE\n\no CHARACTER SET\n\no SET\n\nSee [HELP LOAD DATA], for more information about these clauses.\n\n(field_name_or_user_var, ...) is a list of one or more comma-separated\nXML fields or user variables. The name of a user variable used for this\npurpose must match the name of a field from the XML file, prefixed with\n@. You can use field names to select only desired fields. User\nvariables can be employed to store the corresponding field values for\nsubsequent re-use.\n\nThe IGNORE number LINES or IGNORE number ROWS clause causes the first\nnumber rows in the XML file to be skipped. It is analogous to the LOAD\nDATA statement\'s IGNORE ... LINES clause.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/load-xml.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/load-xml.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (404,3,'CONV','Syntax:\nCONV(N,from_base,to_base)\n\nConverts numbers between different number bases. Returns a string\nrepresentation of the number N, converted from base from_base to base\nto_base. Returns NULL if any argument is NULL. The argument N is\ninterpreted as an integer, but may be specified as an integer or a\nstring. The minimum base is 2 and the maximum base is 36. If from_base\nis a negative number, N is regarded as a signed number. Otherwise, N is\ntreated as unsigned. CONV() works with 64-bit precision.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html\n\n','mysql> SELECT CONV(\'a\',16,2);\n -> \'1010\'\nmysql> SELECT CONV(\'6E\',18,8);\n -> \'172\'\nmysql> SELECT CONV(-17,10,-18);\n -> \'-H\'\nmysql> SELECT CONV(10+\'10\'+\'10\'+X\'0a\',10,10);\n -> \'40\'\n','http://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html'); @@ -489,11 +489,11 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example, INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (408,32,'EXTRACT','Syntax:\nEXTRACT(unit FROM date)\n\nThe EXTRACT() function uses the same kinds of unit specifiers as\nDATE_ADD() or DATE_SUB(), but extracts parts from the date rather than\nperforming date arithmetic.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html\n\n','mysql> SELECT EXTRACT(YEAR FROM \'2009-07-02\');\n -> 2009\nmysql> SELECT EXTRACT(YEAR_MONTH FROM \'2009-07-02 01:02:03\');\n -> 200907\nmysql> SELECT EXTRACT(DAY_MINUTE FROM \'2009-07-02 01:02:03\');\n -> 20102\nmysql> SELECT EXTRACT(MICROSECOND\n -> FROM \'2003-01-02 10:30:00.000123\');\n -> 123\n','http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (409,12,'ENCRYPT','Syntax:\nENCRYPT(str[,salt])\n\nEncrypts str using the Unix crypt() system call and returns a binary\nstring. The salt argument must be a string with at least two characters\nor the result will be NULL. If no salt argument is given, a random\nvalue is used.\n\n*Note*:\n\nThe ENCRYPT() function is deprecated as of MySQL 5.7.6, will be removed\nin a future MySQL release, and should no longer be used. For one-way\nhashing, consider using SHA2() instead.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html\n\n','mysql> SELECT ENCRYPT(\'hello\');\n -> \'VxuFAJXVARROc\'\n','http://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (410,27,'SHOW STATUS','Syntax:\nSHOW [GLOBAL | SESSION] STATUS\n [LIKE \'pattern\' | WHERE expr]\n\n*Note*:\n\nAs of MySQL 5.7.6, the value of the show_compatibility_56 system\nvariable affects the information available from and privileges required\nfor the statement described here. For details, see the description of\nthat variable in\nhttp://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html.\n\nSHOW STATUS provides server status information (see\nhttp://dev.mysql.com/doc/refman/5.7/en/server-status-variables.html).\nThis statement does not require any privilege. It requires only the\nability to connect to the server.\n\nStatus variable information is also available from these sources:\n\no Performance Schema tables. See\n http://dev.mysql.com/doc/refman/5.7/en/performance-schema-status-vari\n able-tables.html.\n\no The GLOBAL_STATUS and SESSION_STATUS tables. See\n http://dev.mysql.com/doc/refman/5.7/en/status-table.html.\n\no The mysqladmin extended-status command. See\n http://dev.mysql.com/doc/refman/5.7/en/mysqladmin.html.\n\nFor SHOW STATUS, a LIKE clause, if present, indicates which variable\nnames to match. A WHERE clause can be given to select rows using more\ngeneral conditions, as discussed in\nhttp://dev.mysql.com/doc/refman/5.7/en/extended-show.html.\n\nSHOW STATUS accepts an optional GLOBAL or SESSION variable scope\nmodifier:\n\no With a GLOBAL modifier, the statement displays the global status\n values. A global status variable may represent status for some aspect\n of the server itself (for example, Aborted_connects), or the\n aggregated status over all connections to MySQL (for example,\n Bytes_received and Bytes_sent). If a variable has no global value,\n the session value is displayed.\n\no With a SESSION modifier, the statement displays the status variable\n values for the current connection. If a variable has no session\n value, the global value is displayed. LOCAL is a synonym for SESSION.\n\no If no modifier is present, the default is SESSION.\n\nThe scope for each status variable is listed at\nhttp://dev.mysql.com/doc/refman/5.7/en/server-status-variables.html.\n\nEach invocation of the SHOW STATUS statement uses an internal temporary\ntable and increments the global Created_tmp_tables value.\nWith a LIKE clause, the statement displays only rows for those\nvariables with names that match the pattern:\n\nmysql> SHOW STATUS LIKE \'Key%\';\n+--------------------+----------+\n| Variable_name | Value |\n+--------------------+----------+\n| Key_blocks_used | 14955 |\n| Key_read_requests | 96854827 |\n| Key_reads | 162040 |\n| Key_write_requests | 7589728 |\n| Key_writes | 3813196 |\n+--------------------+----------+\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/show-status.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/show-status.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (411,2,'ST_NUMINTERIORRINGS','ST_NumInteriorRing(poly), ST_NumInteriorRings(poly)\n\nReturns the number of interior rings in the Polygon value poly. If the\nargument is NULL or an empty geometry, the return value is NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/gis-polygon-property-functions.html\n\n','mysql> SET @poly =\n -> \'Polygon((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1))\';\nmysql> SELECT ST_NumInteriorRings(ST_GeomFromText(@poly));\n+---------------------------------------------+\n| ST_NumInteriorRings(ST_GeomFromText(@poly)) |\n+---------------------------------------------+\n| 1 |\n+---------------------------------------------+\n','http://dev.mysql.com/doc/refman/5.7/en/gis-polygon-property-functions.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (411,2,'ST_NUMINTERIORRINGS','ST_NumInteriorRing(poly), ST_NumInteriorRings(poly)\n\nReturns the number of interior rings in the Polygon value poly. If the\nargument is NULL or an empty geometry, the return value is NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/gis-polygon-property-functions.html\n\n','mysql> SET @poly =\n \'Polygon((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1))\';\nmysql> SELECT ST_NumInteriorRings(ST_GeomFromText(@poly));\n+---------------------------------------------+\n| ST_NumInteriorRings(ST_GeomFromText(@poly)) |\n+---------------------------------------------+\n| 1 |\n+---------------------------------------------+\n','http://dev.mysql.com/doc/refman/5.7/en/gis-polygon-property-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (412,7,'JSON_KEYS','Syntax:\nJSON_KEYS(json_doc[, path])\n\nReturns the keys from the top-level value of a JSON object as a JSON\narray, or, if a path argument is given, the top-level keys from the\nselected path. Returns NULL if any argument is NULL, the json_doc\nargument is not an object, or path, if given, does not locate an\nobject. An error occurs if the json_doc argument is not a valid JSON\ndocument or the path argument is not a valid path expression or\ncontains a * or ** wildcard.\n\nThe result array is empty if the selected object is empty. If the\ntop-level value has nested subobjects, the return value does not\ninclude keys from those subobjects.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html\n\n','mysql> SELECT JSON_KEYS(\'{"a": 1, "b": {"c": 30}}\');\n+---------------------------------------+\n| JSON_KEYS(\'{"a": 1, "b": {"c": 30}}\') |\n+---------------------------------------+\n| ["a", "b"] |\n+---------------------------------------+\nmysql> SELECT JSON_KEYS(\'{"a": 1, "b": {"c": 30}}\', \'$.b\');\n+----------------------------------------------+\n| JSON_KEYS(\'{"a": 1, "b": {"c": 30}}\', \'$.b\') |\n+----------------------------------------------+\n| ["c"] |\n+----------------------------------------------+\n','http://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (413,14,'INET6_ATON','Syntax:\nINET6_ATON(expr)\n\nGiven an IPv6 or IPv4 network address as a string, returns a binary\nstring that represents the numeric value of the address in network byte\norder (big endian). Because numeric-format IPv6 addresses require more\nbytes than the largest integer type, the representation returned by\nthis function has the VARBINARY data type: VARBINARY(16) for IPv6\naddresses and VARBINARY(4) for IPv4 addresses. If the argument is not a\nvalid address, INET6_ATON() returns NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html\n\n','mysql> SELECT HEX(INET6_ATON(\'fdfe::5a55:caff:fefa:9089\'));\n -> \'FDFE0000000000005A55CAFFFEFA9089\'\nmysql> SELECT HEX(INET6_ATON(\'10.0.5.9\'));\n -> \'0A000509\'\n','http://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (414,27,'SHOW SLAVE HOSTS','Syntax:\nSHOW SLAVE HOSTS\n\nDisplays a list of replication slaves currently registered with the\nmaster.\n\nSHOW SLAVE HOSTS should be executed on a server that acts as a\nreplication master. The statement displays information about servers\nthat are or have been connected as replication slaves, with each row of\nthe result corresponding to one slave server, as shown here:\n\nmysql> SHOW SLAVE HOSTS;\n+------------+-----------+------+-----------+--------------------------------------+\n| Server_id | Host | Port | Master_id | Slave_UUID |\n+------------+-----------+------+-----------+--------------------------------------+\n| 192168010 | iconnect2 | 3306 | 192168011 | 14cb6624-7f93-11e0-b2c0-c80aa9429562 |\n| 1921680101 | athena | 3306 | 192168011 | 07af4990-f41f-11df-a566-7ac56fdaf645 |\n+------------+-----------+------+-----------+--------------------------------------+\n\no Server_id: The unique server ID of the slave server, as configured in\n the slave server\'s option file, or on the command line with\n --server-id=value.\n\no Host: The host name of the slave server as specified on the slave\n with the --report-host option. This can differ from the machine name\n as configured in the operating system.\n\no User: The slave server user name as, specified on the slave with the\n --report-user option. Statement output includes this column only if\n the master server is started with the --show-slave-auth-info option.\n\no Password: The slave server password as, specified on the slave with\n the --report-password option. Statement output includes this column\n only if the master server is started with the --show-slave-auth-info\n option.\n\no Port: The port on the master to which the slave server is listening,\n as specified on the slave with the --report-port option.\n\n A zero in this column means that the slave port (--report-port) was\n not set.\n\no Master_id: The unique server ID of the master server that the slave\n server is replicating from. This is the server ID of the server on\n which SHOW SLAVE HOSTS is executed, so this same value is listed for\n each row in the result.\n\no Slave_UUID: The globally unique ID of this slave, as generated on the\n slave and found in the slave\'s auto.cnf file.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/show-slave-hosts.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/show-slave-hosts.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (415,8,'START TRANSACTION','Syntax:\nSTART TRANSACTION\n [transaction_characteristic [, transaction_characteristic] ...]\n\ntransaction_characteristic:\n WITH CONSISTENT SNAPSHOT\n | READ WRITE\n | READ ONLY\n\nBEGIN [WORK]\nCOMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE]\nROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE]\nSET autocommit = {0 | 1}\n\nThese statements provide control over use of transactions:\n\no START TRANSACTION or BEGIN start a new transaction.\n\no COMMIT commits the current transaction, making its changes permanent.\n\no ROLLBACK rolls back the current transaction, canceling its changes.\n\no SET autocommit disables or enables the default autocommit mode for\n the current session.\n\nBy default, MySQL runs with autocommit mode enabled. This means that as\nsoon as you execute a statement that updates (modifies) a table, MySQL\nstores the update on disk to make it permanent. The change cannot be\nrolled back.\n\nTo disable autocommit mode implicitly for a single series of\nstatements, use the START TRANSACTION statement:\n\nSTART TRANSACTION;\nSELECT @A:=SUM(salary) FROM table1 WHERE type=1;\nUPDATE table2 SET summary=@A WHERE type=1;\nCOMMIT;\n\nWith START TRANSACTION, autocommit remains disabled until you end the\ntransaction with COMMIT or ROLLBACK. The autocommit mode then reverts\nto its previous state.\n\nSTART TRANSACTION permits several modifiers that control transaction\ncharacteristics. To specify multiple modifiers, separate them by\ncommas.\n\no The WITH CONSISTENT SNAPSHOT modifier starts a consistent read for\n storage engines that are capable of it. This applies only to InnoDB.\n The effect is the same as issuing a START TRANSACTION followed by a\n SELECT from any InnoDB table. See\n http://dev.mysql.com/doc/refman/5.7/en/innodb-consistent-read.html.\n The WITH CONSISTENT SNAPSHOT modifier does not change the current\n transaction isolation level, so it provides a consistent snapshot\n only if the current isolation level is one that permits a consistent\n read. The only isolation level that permits a consistent read is\n REPEATABLE READ. For all other isolation levels, the WITH CONSISTENT\n SNAPSHOT clause is ignored. As of MySQL 5.7.2, a warning is generated\n when the WITH CONSISTENT SNAPSHOT clause is ignored.\n\no The READ WRITE and READ ONLY modifiers set the transaction access\n mode. They permit or prohibit changes to tables used in the\n transaction. The READ ONLY restriction prevents the transaction from\n modifying or locking both transactional and nontransactional tables\n that are visible to other transactions; the transaction can still\n modify or lock temporary tables.\n\n MySQL enables extra optimizations for queries on InnoDB tables when\n the transaction is known to be read-only. Specifying READ ONLY\n ensures these optimizations are applied in cases where the read-only\n status cannot be determined automatically. See\n http://dev.mysql.com/doc/refman/5.7/en/innodb-performance-ro-txn.html\n for more information.\n\n If no access mode is specified, the default mode applies. Unless the\n default has been changed, it is read/write. It is not permitted to\n specify both READ WRITE and READ ONLY in the same statement.\n\n In read-only mode, it remains possible to change tables created with\n the TEMPORARY keyword using DML statements. Changes made with DDL\n statements are not permitted, just as with permanent tables.\n\n For additional information about transaction access mode, including\n ways to change the default mode, see [HELP ISOLATION].\n\n If the read_only system variable is enabled, explicitly starting a\n transaction with START TRANSACTION READ WRITE requires the SUPER\n privilege.\n\n*Important*:\n\nMany APIs used for writing MySQL client applications (such as JDBC)\nprovide their own methods for starting transactions that can (and\nsometimes should) be used instead of sending a START TRANSACTION\nstatement from the client. See\nhttp://dev.mysql.com/doc/refman/5.7/en/connectors-apis.html, or the\ndocumentation for your API, for more information.\n\nTo disable autocommit mode explicitly, use the following statement:\n\nSET autocommit=0;\n\nAfter disabling autocommit mode by setting the autocommit variable to\nzero, changes to transaction-safe tables (such as those for InnoDB or\nNDB) are not made permanent immediately. You must use COMMIT to store\nyour changes to disk or ROLLBACK to ignore the changes.\n\nautocommit is a session variable and must be set for each session. To\ndisable autocommit mode for each new connection, see the description of\nthe autocommit system variable at\nhttp://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html.\n\nBEGIN and BEGIN WORK are supported as aliases of START TRANSACTION for\ninitiating a transaction. START TRANSACTION is standard SQL syntax, is\nthe recommended way to start an ad-hoc transaction, and permits\nmodifiers that BEGIN does not.\n\nThe BEGIN statement differs from the use of the BEGIN keyword that\nstarts a BEGIN ... END compound statement. The latter does not begin a\ntransaction. See [HELP BEGIN END].\n\n*Note*:\n\nWithin all stored programs (stored procedures and functions, triggers,\nand events), the parser treats BEGIN [WORK] as the beginning of a BEGIN\n... END block. Begin a transaction in this context with START\nTRANSACTION instead.\n\nThe optional WORK keyword is supported for COMMIT and ROLLBACK, as are\nthe CHAIN and RELEASE clauses. CHAIN and RELEASE can be used for\nadditional control over transaction completion. The value of the\ncompletion_type system variable determines the default completion\nbehavior. See\nhttp://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html.\n\nThe AND CHAIN clause causes a new transaction to begin as soon as the\ncurrent one ends, and the new transaction has the same isolation level\nas the just-terminated transaction. The new transaction also uses the\nsame access mode (READ WRITE or READ ONLY) as the just-terminated\ntransaction. The RELEASE clause causes the server to disconnect the\ncurrent client session after terminating the current transaction.\nIncluding the NO keyword suppresses CHAIN or RELEASE completion, which\ncan be useful if the completion_type system variable is set to cause\nchaining or release completion by default.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/commit.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/commit.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (415,8,'START TRANSACTION','Syntax:\nSTART TRANSACTION\n [transaction_characteristic [, transaction_characteristic] ...]\n\ntransaction_characteristic: {\n WITH CONSISTENT SNAPSHOT\n | READ WRITE\n | READ ONLY\n}\n\nBEGIN [WORK]\nCOMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE]\nROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE]\nSET autocommit = {0 | 1}\n\nThese statements provide control over use of transactions:\n\no START TRANSACTION or BEGIN start a new transaction.\n\no COMMIT commits the current transaction, making its changes permanent.\n\no ROLLBACK rolls back the current transaction, canceling its changes.\n\no SET autocommit disables or enables the default autocommit mode for\n the current session.\n\nBy default, MySQL runs with autocommit mode enabled. This means that as\nsoon as you execute a statement that updates (modifies) a table, MySQL\nstores the update on disk to make it permanent. The change cannot be\nrolled back.\n\nTo disable autocommit mode implicitly for a single series of\nstatements, use the START TRANSACTION statement:\n\nSTART TRANSACTION;\nSELECT @A:=SUM(salary) FROM table1 WHERE type=1;\nUPDATE table2 SET summary=@A WHERE type=1;\nCOMMIT;\n\nWith START TRANSACTION, autocommit remains disabled until you end the\ntransaction with COMMIT or ROLLBACK. The autocommit mode then reverts\nto its previous state.\n\nSTART TRANSACTION permits several modifiers that control transaction\ncharacteristics. To specify multiple modifiers, separate them by\ncommas.\n\no The WITH CONSISTENT SNAPSHOT modifier starts a consistent read for\n storage engines that are capable of it. This applies only to InnoDB.\n The effect is the same as issuing a START TRANSACTION followed by a\n SELECT from any InnoDB table. See\n http://dev.mysql.com/doc/refman/5.7/en/innodb-consistent-read.html.\n The WITH CONSISTENT SNAPSHOT modifier does not change the current\n transaction isolation level, so it provides a consistent snapshot\n only if the current isolation level is one that permits a consistent\n read. The only isolation level that permits a consistent read is\n REPEATABLE READ. For all other isolation levels, the WITH CONSISTENT\n SNAPSHOT clause is ignored. As of MySQL 5.7.2, a warning is generated\n when the WITH CONSISTENT SNAPSHOT clause is ignored.\n\no The READ WRITE and READ ONLY modifiers set the transaction access\n mode. They permit or prohibit changes to tables used in the\n transaction. The READ ONLY restriction prevents the transaction from\n modifying or locking both transactional and nontransactional tables\n that are visible to other transactions; the transaction can still\n modify or lock temporary tables.\n\n MySQL enables extra optimizations for queries on InnoDB tables when\n the transaction is known to be read-only. Specifying READ ONLY\n ensures these optimizations are applied in cases where the read-only\n status cannot be determined automatically. See\n http://dev.mysql.com/doc/refman/5.7/en/innodb-performance-ro-txn.html\n for more information.\n\n If no access mode is specified, the default mode applies. Unless the\n default has been changed, it is read/write. It is not permitted to\n specify both READ WRITE and READ ONLY in the same statement.\n\n In read-only mode, it remains possible to change tables created with\n the TEMPORARY keyword using DML statements. Changes made with DDL\n statements are not permitted, just as with permanent tables.\n\n For additional information about transaction access mode, including\n ways to change the default mode, see [HELP ISOLATION].\n\n If the read_only system variable is enabled, explicitly starting a\n transaction with START TRANSACTION READ WRITE requires the SUPER\n privilege.\n\n*Important*:\n\nMany APIs used for writing MySQL client applications (such as JDBC)\nprovide their own methods for starting transactions that can (and\nsometimes should) be used instead of sending a START TRANSACTION\nstatement from the client. See\nhttp://dev.mysql.com/doc/refman/5.7/en/connectors-apis.html, or the\ndocumentation for your API, for more information.\n\nTo disable autocommit mode explicitly, use the following statement:\n\nSET autocommit=0;\n\nAfter disabling autocommit mode by setting the autocommit variable to\nzero, changes to transaction-safe tables (such as those for InnoDB or\nNDB) are not made permanent immediately. You must use COMMIT to store\nyour changes to disk or ROLLBACK to ignore the changes.\n\nautocommit is a session variable and must be set for each session. To\ndisable autocommit mode for each new connection, see the description of\nthe autocommit system variable at\nhttp://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html.\n\nBEGIN and BEGIN WORK are supported as aliases of START TRANSACTION for\ninitiating a transaction. START TRANSACTION is standard SQL syntax, is\nthe recommended way to start an ad-hoc transaction, and permits\nmodifiers that BEGIN does not.\n\nThe BEGIN statement differs from the use of the BEGIN keyword that\nstarts a BEGIN ... END compound statement. The latter does not begin a\ntransaction. See [HELP BEGIN END].\n\n*Note*:\n\nWithin all stored programs (stored procedures and functions, triggers,\nand events), the parser treats BEGIN [WORK] as the beginning of a BEGIN\n... END block. Begin a transaction in this context with START\nTRANSACTION instead.\n\nThe optional WORK keyword is supported for COMMIT and ROLLBACK, as are\nthe CHAIN and RELEASE clauses. CHAIN and RELEASE can be used for\nadditional control over transaction completion. The value of the\ncompletion_type system variable determines the default completion\nbehavior. See\nhttp://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html.\n\nThe AND CHAIN clause causes a new transaction to begin as soon as the\ncurrent one ends, and the new transaction has the same isolation level\nas the just-terminated transaction. The new transaction also uses the\nsame access mode (READ WRITE or READ ONLY) as the just-terminated\ntransaction. The RELEASE clause causes the server to disconnect the\ncurrent client session after terminating the current transaction.\nIncluding the NO keyword suppresses CHAIN or RELEASE completion, which\ncan be useful if the completion_type system variable is set to cause\nchaining or release completion by default.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/commit.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/commit.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (416,32,'TIME_FORMAT','Syntax:\nTIME_FORMAT(time,format)\n\nThis is used like the DATE_FORMAT() function, but the format string may\ncontain format specifiers only for hours, minutes, seconds, and\nmicroseconds. Other specifiers produce a NULL value or 0.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html\n\n','mysql> SELECT TIME_FORMAT(\'100:00:00\', \'%H %k %h %I %l\');\n -> \'100 100 04 04 4\'\n','http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (417,40,'CREATE DATABASE','Syntax:\nCREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name\n [create_specification] ...\n\ncreate_specification:\n [DEFAULT] CHARACTER SET [=] charset_name\n | [DEFAULT] COLLATE [=] collation_name\n\nCREATE DATABASE creates a database with the given name. To use this\nstatement, you need the CREATE privilege for the database. CREATE\nSCHEMA is a synonym for CREATE DATABASE.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/create-database.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/create-database.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (418,16,'VAR_POP','Syntax:\nVAR_POP(expr)\n\nReturns the population standard variance of expr. It considers rows as\nthe whole population, not as a sample, so it has the number of rows as\nthe denominator. You can also use VARIANCE(), which is equivalent but\nis not standard SQL.\n\nIf there are no matching rows, VAR_POP() returns NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html'); @@ -515,10 +515,10 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example, INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (434,24,'DECLARE CONDITION','Syntax:\nDECLARE condition_name CONDITION FOR condition_value\n\ncondition_value:\n mysql_error_code\n | SQLSTATE [VALUE] sqlstate_value\n\nThe DECLARE ... CONDITION statement declares a named error condition,\nassociating a name with a condition that needs specific handling. The\nname can be referred to in a subsequent DECLARE ... HANDLER statement\n(see [HELP DECLARE HANDLER]).\n\nCondition declarations must appear before cursor or handler\ndeclarations.\n\nThe condition_value for DECLARE ... CONDITION indicates the specific\ncondition or class of conditions to associate with the condition name.\nIt can take the following forms:\n\no mysql_error_code: An integer literal indicating a MySQL error code.\n\n Do not use MySQL error code 0 because that indicates success rather\n than an error condition. For a list of MySQL error codes, see\n http://dev.mysql.com/doc/refman/5.7/en/error-messages-server.html.\n\no SQLSTATE [VALUE] sqlstate_value: A 5-character string literal\n indicating an SQLSTATE value.\n\n Do not use SQLSTATE values that begin with \'00\' because those\n indicate success rather than an error condition. For a list of\n SQLSTATE values, see\n http://dev.mysql.com/doc/refman/5.7/en/error-messages-server.html.\n\nCondition names referred to in SIGNAL or use RESIGNAL statements must\nbe associated with SQLSTATE values, not MySQL error codes.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/declare-condition.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/declare-condition.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (435,32,'MONTHNAME','Syntax:\nMONTHNAME(date)\n\nReturns the full name of the month for date. The language used for the\nname is controlled by the value of the lc_time_names system variable\n(http://dev.mysql.com/doc/refman/5.7/en/locale-support.html).\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html\n\n','mysql> SELECT MONTHNAME(\'2008-02-03\');\n -> \'February\'\n','http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (436,26,'NUMGEOMETRIES','NumGeometries(gc)\n\nST_NumGeometries() and NumGeometries() are synonyms. For more\ninformation, see the description of ST_NumGeometries().\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/gis-geometrycollection-property-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/gis-geometrycollection-property-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (437,8,'CHANGE MASTER TO','Syntax:\nCHANGE MASTER TO option [, option] ... [ channel_option ]\n\noption:\n MASTER_BIND = \'interface_name\'\n | MASTER_HOST = \'host_name\'\n | MASTER_USER = \'user_name\'\n | MASTER_PASSWORD = \'password\'\n | MASTER_PORT = port_num\n | MASTER_CONNECT_RETRY = interval\n | MASTER_RETRY_COUNT = count\n | MASTER_DELAY = interval\n | MASTER_HEARTBEAT_PERIOD = interval\n | MASTER_LOG_FILE = \'master_log_name\'\n | MASTER_LOG_POS = master_log_pos\n | MASTER_AUTO_POSITION = {0|1}\n | RELAY_LOG_FILE = \'relay_log_name\'\n | RELAY_LOG_POS = relay_log_pos\n | MASTER_SSL = {0|1}\n | MASTER_SSL_CA = \'ca_file_name\'\n | MASTER_SSL_CAPATH = \'ca_directory_name\'\n | MASTER_SSL_CERT = \'cert_file_name\'\n | MASTER_SSL_CRL = \'crl_file_name\'\n | MASTER_SSL_CRLPATH = \'crl_directory_name\'\n | MASTER_SSL_KEY = \'key_file_name\'\n | MASTER_SSL_CIPHER = \'cipher_list\'\n | MASTER_SSL_VERIFY_SERVER_CERT = {0|1}\n | MASTER_TLS_VERSION = \'protocol_list\'\n | IGNORE_SERVER_IDS = (server_id_list)\n\nchannel_option:\n FOR CHANNEL channel\n\nserver_id_list:\n [server_id [, server_id] ... ]\n\nCHANGE MASTER TO changes the parameters that the slave server uses for\nconnecting to the master server, for reading the master binary log, and\nreading the slave relay log. It also updates the contents of the master\ninfo and relay log info repositories (see\nhttp://dev.mysql.com/doc/refman/5.7/en/slave-logs.html). CHANGE MASTER\nTO requires the SUPER privilege.\n\nPrior to MySQL 5.7.4, the slave replication threads must be stopped,\nusing STOP SLAVE if necessary, before issuing this statement. In MySQL\n5.7.4 and later, you can issue CHANGE MASTER TO statements on a running\nslave without doing this, depending on the states of the slave SQL\nthread and slave I/O thread. The rules governing such use are provided\nlater in this section.\n\nWhen using a multithreaded slave (in other words slave_parallel_workers\nis greater than 0), stopping the slave can cause "gaps" in the sequence\nof transactions that have been executed from the relay log, regardless\nof whether the slave was stopped intentionally or otherwise. When such\ngaps exist, issuing CHANGE MASTER TO fails. The solution in this\nsituation is to issue START SLAVE UNTIL SQL_AFTER_MTS_GAPS which\nensures that the gaps are closed.\n\nThe optional FOR CHANNEL channel clause enables you to name which\nreplication channel the statement applies to. Providing a FOR CHANNEL\nchannel clause applies the CHANGE MASTER TO statement to a specific\nreplication channel, and is used to add a new channel or modify an\nexisting channel. For example, to add a new channel called channel2:\n\nCHANGE MASTER TO MASTER_HOST=host1, MASTER_PORT=3002 FOR CHANNEL \'channel2\'\n\nIf no clause is named and no extra channels exist, the statement\napplies to the default channel.\n\nWhen using multiple replication channels, if a CHANGE MASTER TO\nstatement does not name a channel using a FOR CHANNEL channel clause,\nan error occurs. See\nhttp://dev.mysql.com/doc/refman/5.7/en/replication-channels.html for\nmore information.\n\nOptions not specified retain their value, except as indicated in the\nfollowing discussion. Thus, in most cases, there is no need to specify\noptions that do not change. For example, if the password to connect to\nyour MySQL master has changed, issue this statement to tell the slave\nabout the new password:\n\nCHANGE MASTER TO MASTER_PASSWORD=\'new3cret\';\n\nMASTER_HOST, MASTER_USER, MASTER_PASSWORD, and MASTER_PORT provide\ninformation to the slave about how to connect to its master:\n\no MASTER_HOST and MASTER_PORT are the host name (or IP address) of the\n master host and its TCP/IP port.\n\n *Note*:\n\n Replication cannot use Unix socket files. You must be able to connect\n to the master MySQL server using TCP/IP.\n\n If you specify the MASTER_HOST or MASTER_PORT option, the slave\n assumes that the master server is different from before (even if the\n option value is the same as its current value.) In this case, the old\n values for the master binary log file name and position are\n considered no longer applicable, so if you do not specify\n MASTER_LOG_FILE and MASTER_LOG_POS in the statement,\n MASTER_LOG_FILE=\'\' and MASTER_LOG_POS=4 are silently appended to it.\n\n Setting MASTER_HOST=\'\' (that is, setting its value explicitly to an\n empty string) is not the same as not setting MASTER_HOST at all.\n Beginning with MySQL 5.5, trying to set MASTER_HOST to an empty\n string fails with an error. Previously, setting MASTER_HOST to an\n empty string caused START SLAVE subsequently to fail. (Bug #28796)\n\n Values used for MASTER_HOST and other CHANGE MASTER TO options are\n checked for linefeed (\\n or 0x0A) characters; the presence of such\n characters in these values causes the statement to fail with\n ER_MASTER_INFO. (Bug #11758581, Bug #50801)\n\no MASTER_USER and MASTER_PASSWORD are the user name and password of the\n account to use for connecting to the master.\n\n MASTER_USER cannot be made empty; setting MASTER_USER = \'\' or leaving\n it unset when setting a value for MASTER_PASSWORD causes an error\n (Bug #13427949).\n\n The password used for a MySQL Replication slave account in a CHANGE\n MASTER TO statement is limited to 32 characters in length; prior to\n MySQL 5.7.5, if the password was longer, the statement succeeded, but\n any excess characters were silently truncated. In MySQL 5.7.5 and\n later, trying to use a password of more than 32 characters causes\n CHANGE MASTER TO to fail. (Bug #11752299, Bug #43439)\n\n The text of a running CHANGE MASTER TO statement, including values\n for MASTER_USER and MASTER_PASSWORD, can be seen in the output of a\n concurrent SHOW PROCESSLIST statement. (The complete text of a START\n SLAVE statement is also visible to SHOW PROCESSLIST.)\n\nThe MASTER_SSL_xxx options, and the MASTER_TLS_VERSION option, specify\nhow the slave uses encryption and ciphers to secure the replication\nconnection. These options can be changed even on slaves that are\ncompiled without SSL support. They are saved to the master info\nrepository, but are ignored if the slave does not have SSL support\nenabled. The MASTER_SSL_xxx options perform the same functions as the\n--ssl-xxx options described in\nhttp://dev.mysql.com/doc/refman/5.7/en/encrypted-connection-options.htm\nl. The correspondence between the two sets of options, and the use of\nthe MASTER_SSL_xxx and MASTER_TLS_VERSION options to set up a secure\nconnection, is explained in\nhttp://dev.mysql.com/doc/refman/5.7/en/replication-solutions-encrypted-\nconnections.html.\n\nAs of MySQL 5.7.3, setting MASTER_SSL=1 means that the slave connection\nto the master must use SSL, or the connection attempt fails. Before\n5.7.3, the use of an SSL connection by the slave was not enforced with\nMASTER_SSL=1. This is analogous to the client-side meaning of the --ssl\ncommand-line option; see\nhttp://dev.mysql.com/doc/refman/5.7/en/encrypted-connection-options.htm\nl.\n\nMASTER_CONNECT_RETRY specifies how many seconds to wait between connect\nretries. The default is 60.\n\nMASTER_RETRY_COUNT limits the number of reconnection attempts and\nupdates the value of the Master_Retry_Count column in the output of\nSHOW SLAVE STATUS. The default value is 24 * 3600 = 86400.\nMASTER_RETRY_COUNT is intended to replace the older\n--master-retry-count server option, and is now the preferred method for\nsetting this limit. You are encouraged not to rely on\n--master-retry-count in new applications and, when upgrading from\nversions earlier than MySQL 5.6, to update any existing applications\nthat rely on it, so that they use CHANGE MASTER TO ...\nMASTER_RETRY_COUNT instead.\n\nMASTER_DELAY specifies how many seconds behind the master the slave\nmust lag. An event received from the master is not executed until at\nleast interval seconds later than its execution on the master. The\ndefault is 0. An error occurs if interval is not a nonnegative integer\nin the range from 0 to 231−1. For more information, see\nhttp://dev.mysql.com/doc/refman/5.7/en/replication-delayed.html.\n\nFrom MySQL 5.7, a CHANGE MASTER TO statement employing the MASTER_DELAY\noption can be executed on a running slave when the slave SQL thread is\nstopped.\n\nMASTER_BIND is for use on replication slaves having multiple network\ninterfaces, and determines which of the slave\'s network interfaces is\nchosen for connecting to the master.\n\nThe address configured with this option, if any, can be seen in the\nMaster_Bind column of the output from SHOW SLAVE STATUS. If you are\nusing slave status log tables (server started with\n--master-info-repository=TABLE), the value can also be seen as the\nMaster_bind column of the mysql.slave_master_info table.\n\nThe ability to bind a replication slave to a specific network interface\nis also supported by NDB Cluster.\n\nMASTER_HEARTBEAT_PERIOD sets the interval in seconds between\nreplication heartbeats. Whenever the master\'s binary log is updated\nwith an event, the waiting period for the next heartbeat is reset.\ninterval is a decimal value having the range 0 to 4294967 seconds and a\nresolution in milliseconds; the smallest nonzero value is 0.001.\nHeartbeats are sent by the master only if there are no unsent events in\nthe binary log file for a period longer than interval.\n\nPrior to MySQL 5.7.4, not including MASTER_HEARTBEAT_PERIOD caused\nCHANGE MASTER TO to reset the heartbeat period (Slave_heartbeat_period)\nto the default, and Slave_received_heartbeats to 0. (Bug #18185490)\n\nIf you are logging master connection information to tables,\nMASTER_HEARTBEAT_PERIOD can be seen as the value of the Heartbeat\ncolumn of the mysql.slave_master_info table.\n\nSetting interval to 0 disables heartbeats altogether. The default value\nfor interval is equal to the value of slave_net_timeout divided by 2.\n\nSetting @@global.slave_net_timeout to a value less than that of the\ncurrent heartbeat interval results in a warning being issued. The\neffect of issuing RESET SLAVE on the heartbeat interval is to reset it\nto the default value.\n\nMASTER_LOG_FILE and MASTER_LOG_POS are the coordinates at which the\nslave I/O thread should begin reading from the master the next time the\nthread starts. RELAY_LOG_FILE and RELAY_LOG_POS are the coordinates at\nwhich the slave SQL thread should begin reading from the relay log the\nnext time the thread starts. If you specify either of MASTER_LOG_FILE\nor MASTER_LOG_POS, you cannot specify RELAY_LOG_FILE or RELAY_LOG_POS.\nIf you specify either of MASTER_LOG_FILE or MASTER_LOG_POS, you also\ncannot specify MASTER_AUTO_POSITION = 1 (described later in this\nsection). If neither of MASTER_LOG_FILE or MASTER_LOG_POS is specified,\nthe slave uses the last coordinates of the slave SQL thread before\nCHANGE MASTER TO was issued. This ensures that there is no\ndiscontinuity in replication, even if the slave SQL thread was late\ncompared to the slave I/O thread, when you merely want to change, say,\nthe password to use.\n\nFrom MySQL 5.7, a CHANGE MASTER TO statement employing RELAY_LOG_FILE,\nRELAY_LOG_POS, or both options can be executed on a running slave when\nthe slave SQL thread is stopped.\n\nIf MASTER_AUTO_POSITION = 1 is used with CHANGE MASTER TO, the slave\nattempts to connect to the master using the GTID-based replication\nprotocol. From MySQL 5.7, this option can be employed by CHANGE MASTER\nTO only if both the slave SQL and slave I/O threads are stopped.\n\nWhen using GTIDs, the slave tells the master which transactions it has\nalready received, executed, or both. To compute this set, it reads the\nglobal value of gtid_executed and the value of the Retrieved_gtid_set\ncolumn from SHOW SLAVE STATUS. The GTID of the last transmitted\ntransaction is included in Retrieved_gtid_set only when the full\ntransaction is received. The slave computes the following set:\n\nUNION(@@global.gtid_executed, Retrieved_gtid_set)\n\nPrior to MySQL 5.7.5, the GTID of the last transmitted transaction was\nincluded in Retrieved_gtid_set even if the transaction was only\npartially transmitted, and the last received GTID was subtracted from\nthis set. (Bug #17943188) Thus, the slave computed the following set:\n\nUNION(@@global.gtid_executed, Retrieved_gtid_set - last_received_GTID)\n\nThis set is sent to the master as part of the initial handshake, and\nthe master sends back all transactions that it has executed which are\nnot part of the set. If any of these transactions have been already\npurged from the master\'s binary log, the master sends the error\nER_MASTER_HAS_PURGED_REQUIRED_GTIDS to the slave, and replication does\nnot start.\n\nWhen GTID-based replication is employed, the coordinates represented by\nMASTER_LOG_FILE and MASTER_LOG_POS are not used, and global transaction\nidentifiers are used instead. Thus the use of either or both of these\noptions together with MASTER_AUTO_POSITION causes an error.\n\nYou can see whether replication is running with autopositioning enabled\nby checking the output of SHOW SLAVE STATUS. (Bug #15992220)\n\ngtid_mode must also be enabled before issuing CHANGE MASTER TO ...\nMASTER_AUTO_POSITION = 1. Otherwise, the statement fails with an error.\n\nTo revert to the older file-based replication protocol after using\nGTIDs, you can issue a new CHANGE MASTER TO statement that specifies\nMASTER_AUTO_POSITION = 0, as well as at least one of MASTER_LOG_FILE or\nMASTER_LOG_POS.\n\nPrior to MySQL 5.7.4, CHANGE MASTER TO deletes all relay log files and\nstarts a new one, unless you specify RELAY_LOG_FILE or RELAY_LOG_POS.\nIn that case, relay log files are kept; the relay_log_purge global\nvariable is set silently to 0. In MySQL 5.7.4 and later, relay logs are\npreserved if at least one of the slave SQL thread and the slave I/O\nthread is running; if both threads are stopped, all relay log files are\ndeleted unless at least one of RELAY_LOG_FILE or RELAY_LOG_POS is\nspecified.\n\nRELAY_LOG_FILE can use either an absolute or relative path, and uses\nthe same base name as MASTER_LOG_FILE. (Bug #12190)\n\nIGNORE_SERVER_IDS takes a comma-separated list of 0 or more server IDs.\nEvents originating from the corresponding servers are ignored, with the\nexception of log rotation and deletion events, which are still recorded\nin the relay log.\n\nIn circular replication, the originating server normally acts as the\nterminator of its own events, so that they are not applied more than\nonce. Thus, this option is useful in circular replication when one of\nthe servers in the circle is removed. Suppose that you have a circular\nreplication setup with 4 servers, having server IDs 1, 2, 3, and 4, and\nserver 3 fails. When bridging the gap by starting replication from\nserver 2 to server 4, you can include IGNORE_SERVER_IDS = (3) in the\nCHANGE MASTER TO statement that you issue on server 4 to tell it to use\nserver 2 as its master instead of server 3. Doing so causes it to\nignore and not to propagate any statements that originated with the\nserver that is no longer in use.\n\nIf a CHANGE MASTER TO statement is issued without any IGNORE_SERVER_IDS\noption, any existing list is preserved. To clear the list of ignored\nservers, it is necessary to use the option with an empty list:\n\nCHANGE MASTER TO IGNORE_SERVER_IDS = ();\n\nPrior to MySQL 5.7.5, RESET SLAVE ALL has no effect on the server ID\nlist. In MySQL 5.7.5 and later, RESET SLAVE ALL clears\nIGNORE_SERVER_IDS. (Bug #18816897)\n\nIf IGNORE_SERVER_IDS contains the server\'s own ID and the server was\nstarted with the --replicate-same-server-id option enabled, an error\nresults.\n\nThe master info repository and the output of SHOW SLAVE STATUS provide\nthe list of servers that are currently ignored. For more information,\nsee http://dev.mysql.com/doc/refman/5.7/en/slave-logs-status.html, and\n[HELP SHOW SLAVE STATUS].\n\nInvoking CHANGE MASTER TO causes the previous values for MASTER_HOST,\nMASTER_PORT, MASTER_LOG_FILE, and MASTER_LOG_POS to be written to the\nerror log, along with other information about the slave\'s state prior\nto execution.\n\nCHANGE MASTER TO causes an implicit commit of an ongoing transaction.\nSee http://dev.mysql.com/doc/refman/5.7/en/implicit-commit.html.\n\nIn MySQL 5.7.4 and later, the strict requirement to execute STOP SLAVE\nprior to issuing any CHANGE MASTER TO statement (and START SLAVE\nafterward) is removed. Instead of depending on whether the slave is\nstopped, the behavior of CHANGE MASTER TO depends (in MySQL 5.7.4 and\nlater) on the states of the slave SQL thread and slave I/O threads;\nwhich of these threads is stopped or running now determines the options\nthat can or cannot be used with a CHANGE MASTER TO statement at a given\npoint in time. The rules for making this determination are listed here:\n\no If the SQL thread is stopped, you can execute CHANGE MASTER TO using\n any combination that is otherwise allowed of RELAY_LOG_FILE,\n RELAY_LOG_POS, and MASTER_DELAY options, even if the slave I/O thread\n is running. No other options may be used with this statement when the\n I/O thread is running.\n\no If the I/O thread is stopped, you can execute CHANGE MASTER TO using\n any of the options for this statement (in any allowed combination)\n except RELAY_LOG_FILE, RELAY_LOG_POS, or MASTER_DELAY, even when the\n SQL thread is running. These three options may not be used when the\n I/O thread is running.\n\no Both the SQL thread and the I/O thread must be stopped before issuing\n a CHANGE MASTER TO statement that employs MASTER_AUTO_POSITION = 1.\n\nYou can check the current state of the slave SQL and I/O threads using\nSHOW SLAVE STATUS.\n\nFor more information, see\nhttp://dev.mysql.com/doc/refman/5.7/en/replication-solutions-switch.htm\nl.\n\nIf you are using statement-based replication and temporary tables, it\nis possible for a CHANGE MASTER TO statement following a STOP SLAVE\nstatement to leave behind temporary tables on the slave. From MySQL\n5.7, a warning (ER_WARN_OPEN_TEMP_TABLES_MUST_BE_ZERO) is issued\nwhenever this occurs. You can avoid this in such cases by making sure\nthat the value of the Slave_open_temp_tables system status variable is\nequal to 0 prior to executing such a CHANGE MASTER TO statement.\n\nCHANGE MASTER TO is useful for setting up a slave when you have the\nsnapshot of the master and have recorded the master binary log\ncoordinates corresponding to the time of the snapshot. After loading\nthe snapshot into the slave to synchronize it with the master, you can\nrun CHANGE MASTER TO MASTER_LOG_FILE=\'log_name\', MASTER_LOG_POS=log_pos\non the slave to specify the coordinates at which the slave should begin\nreading the master binary log.\n\nThe following example changes the master server the slave uses and\nestablishes the master binary log coordinates from which the slave\nbegins reading. This is used when you want to set up the slave to\nreplicate the master:\n\nCHANGE MASTER TO\n MASTER_HOST=\'master2.example.com\',\n MASTER_USER=\'replication\',\n MASTER_PASSWORD=\'password\',\n MASTER_PORT=3306,\n MASTER_LOG_FILE=\'master2-bin.001\',\n MASTER_LOG_POS=4,\n MASTER_CONNECT_RETRY=10;\n\nThe next example shows an operation that is less frequently employed.\nIt is used when the slave has relay log files that you want it to\nexecute again for some reason. To do this, the master need not be\nreachable. You need only use CHANGE MASTER TO and start the SQL thread\n(START SLAVE SQL_THREAD):\n\nCHANGE MASTER TO\n RELAY_LOG_FILE=\'slave-relay-bin.006\',\n RELAY_LOG_POS=4025;\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/change-master-to.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/change-master-to.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (437,8,'CHANGE MASTER TO','Syntax:\nCHANGE MASTER TO option [, option] ... [ channel_option ]\n\noption:\n MASTER_BIND = \'interface_name\'\n | MASTER_HOST = \'host_name\'\n | MASTER_USER = \'user_name\'\n | MASTER_PASSWORD = \'password\'\n | MASTER_PORT = port_num\n | MASTER_CONNECT_RETRY = interval\n | MASTER_RETRY_COUNT = count\n | MASTER_DELAY = interval\n | MASTER_HEARTBEAT_PERIOD = interval\n | MASTER_LOG_FILE = \'master_log_name\'\n | MASTER_LOG_POS = master_log_pos\n | MASTER_AUTO_POSITION = {0|1}\n | RELAY_LOG_FILE = \'relay_log_name\'\n | RELAY_LOG_POS = relay_log_pos\n | MASTER_SSL = {0|1}\n | MASTER_SSL_CA = \'ca_file_name\'\n | MASTER_SSL_CAPATH = \'ca_directory_name\'\n | MASTER_SSL_CERT = \'cert_file_name\'\n | MASTER_SSL_CRL = \'crl_file_name\'\n | MASTER_SSL_CRLPATH = \'crl_directory_name\'\n | MASTER_SSL_KEY = \'key_file_name\'\n | MASTER_SSL_CIPHER = \'cipher_list\'\n | MASTER_SSL_VERIFY_SERVER_CERT = {0|1}\n | MASTER_TLS_VERSION = \'protocol_list\'\n | IGNORE_SERVER_IDS = (server_id_list)\n\nchannel_option:\n FOR CHANNEL channel\n\nserver_id_list:\n [server_id [, server_id] ... ]\n\nCHANGE MASTER TO changes the parameters that the slave server uses for\nconnecting to the master server, for reading the master binary log, and\nreading the slave relay log. It also updates the contents of the master\ninfo and relay log info repositories (see\nhttp://dev.mysql.com/doc/refman/5.7/en/slave-logs.html). CHANGE MASTER\nTO requires the SUPER privilege.\n\nPrior to MySQL 5.7.4, the slave replication threads must be stopped,\nusing STOP SLAVE if necessary, before issuing this statement. In MySQL\n5.7.4 and later, you can issue CHANGE MASTER TO statements on a running\nslave without doing this, depending on the states of the slave SQL\nthread and slave I/O thread. The rules governing such use are provided\nlater in this section.\n\nWhen using a multithreaded slave (in other words slave_parallel_workers\nis greater than 0), stopping the slave can cause "gaps" in the sequence\nof transactions that have been executed from the relay log, regardless\nof whether the slave was stopped intentionally or otherwise. When such\ngaps exist, issuing CHANGE MASTER TO fails. The solution in this\nsituation is to issue START SLAVE UNTIL SQL_AFTER_MTS_GAPS which\nensures that the gaps are closed.\n\nThe optional FOR CHANNEL channel clause enables you to name which\nreplication channel the statement applies to. Providing a FOR CHANNEL\nchannel clause applies the CHANGE MASTER TO statement to a specific\nreplication channel, and is used to add a new channel or modify an\nexisting channel. For example, to add a new channel called channel2:\n\nCHANGE MASTER TO MASTER_HOST=host1, MASTER_PORT=3002 FOR CHANNEL \'channel2\'\n\nIf no clause is named and no extra channels exist, the statement\napplies to the default channel.\n\nWhen using multiple replication channels, if a CHANGE MASTER TO\nstatement does not name a channel using a FOR CHANNEL channel clause,\nan error occurs. See\nhttp://dev.mysql.com/doc/refman/5.7/en/replication-channels.html for\nmore information.\n\nOptions not specified retain their value, except as indicated in the\nfollowing discussion. Thus, in most cases, there is no need to specify\noptions that do not change. For example, if the password to connect to\nyour MySQL master has changed, issue this statement to tell the slave\nabout the new password:\n\nCHANGE MASTER TO MASTER_PASSWORD=\'new3cret\';\n\nMASTER_HOST, MASTER_USER, MASTER_PASSWORD, and MASTER_PORT provide\ninformation to the slave about how to connect to its master:\n\no MASTER_HOST and MASTER_PORT are the host name (or IP address) of the\n master host and its TCP/IP port.\n\n *Note*:\n\n Replication cannot use Unix socket files. You must be able to connect\n to the master MySQL server using TCP/IP.\n\n If you specify the MASTER_HOST or MASTER_PORT option, the slave\n assumes that the master server is different from before (even if the\n option value is the same as its current value.) In this case, the old\n values for the master binary log file name and position are\n considered no longer applicable, so if you do not specify\n MASTER_LOG_FILE and MASTER_LOG_POS in the statement,\n MASTER_LOG_FILE=\'\' and MASTER_LOG_POS=4 are silently appended to it.\n\n Setting MASTER_HOST=\'\' (that is, setting its value explicitly to an\n empty string) is not the same as not setting MASTER_HOST at all.\n Beginning with MySQL 5.5, trying to set MASTER_HOST to an empty\n string fails with an error. Previously, setting MASTER_HOST to an\n empty string caused START SLAVE subsequently to fail. (Bug #28796)\n\n Values used for MASTER_HOST and other CHANGE MASTER TO options are\n checked for linefeed (\\n or 0x0A) characters; the presence of such\n characters in these values causes the statement to fail with\n ER_MASTER_INFO. (Bug #11758581, Bug #50801)\n\no MASTER_USER and MASTER_PASSWORD are the user name and password of the\n account to use for connecting to the master.\n\n MASTER_USER cannot be made empty; setting MASTER_USER = \'\' or leaving\n it unset when setting a value for MASTER_PASSWORD causes an error\n (Bug #13427949).\n\n The password used for a MySQL Replication slave account in a CHANGE\n MASTER TO statement is limited to 32 characters in length; prior to\n MySQL 5.7.5, if the password was longer, the statement succeeded, but\n any excess characters were silently truncated. In MySQL 5.7.5 and\n later, trying to use a password of more than 32 characters causes\n CHANGE MASTER TO to fail. (Bug #11752299, Bug #43439)\n\n The text of a running CHANGE MASTER TO statement, including values\n for MASTER_USER and MASTER_PASSWORD, can be seen in the output of a\n concurrent SHOW PROCESSLIST statement. (The complete text of a START\n SLAVE statement is also visible to SHOW PROCESSLIST.)\n\nThe MASTER_SSL_xxx options, and the MASTER_TLS_VERSION option, specify\nhow the slave uses encryption and ciphers to secure the replication\nconnection. These options can be changed even on slaves that are\ncompiled without SSL support. They are saved to the master info\nrepository, but are ignored if the slave does not have SSL support\nenabled. The MASTER_SSL_xxx options perform the same functions as the\n--ssl-xxx options described in\nhttp://dev.mysql.com/doc/refman/5.7/en/encrypted-connection-options.htm\nl. The correspondence between the two sets of options, and the use of\nthe MASTER_SSL_xxx and MASTER_TLS_VERSION options to set up a secure\nconnection, is explained in\nhttp://dev.mysql.com/doc/refman/5.7/en/replication-solutions-encrypted-\nconnections.html.\n\nAs of MySQL 5.7.3, setting MASTER_SSL=1 means that the slave connection\nto the master must use SSL, or the connection attempt fails. Before\n5.7.3, the use of an SSL connection by the slave was not enforced with\nMASTER_SSL=1. This is analogous to the client-side meaning of the --ssl\ncommand-line option; see\nhttp://dev.mysql.com/doc/refman/5.7/en/encrypted-connection-options.htm\nl.\n\nMASTER_CONNECT_RETRY specifies how many seconds to wait between connect\nretries. The default is 60.\n\nMASTER_RETRY_COUNT limits the number of reconnection attempts and\nupdates the value of the Master_Retry_Count column in the output of\nSHOW SLAVE STATUS. The default value is 24 * 3600 = 86400.\nMASTER_RETRY_COUNT is intended to replace the older\n--master-retry-count server option, and is now the preferred method for\nsetting this limit. You are encouraged not to rely on\n--master-retry-count in new applications and, when upgrading from\nversions earlier than MySQL 5.6, to update any existing applications\nthat rely on it, so that they use CHANGE MASTER TO ...\nMASTER_RETRY_COUNT instead.\n\nMASTER_DELAY specifies how many seconds behind the master the slave\nmust lag. An event received from the master is not executed until at\nleast interval seconds later than its execution on the master. The\ndefault is 0. An error occurs if interval is not a nonnegative integer\nin the range from 0 to 231−1. For more information, see\nhttp://dev.mysql.com/doc/refman/5.7/en/replication-delayed.html.\n\nFrom MySQL 5.7, a CHANGE MASTER TO statement employing the MASTER_DELAY\noption can be executed on a running slave when the slave SQL thread is\nstopped.\n\nMASTER_BIND is for use on replication slaves having multiple network\ninterfaces, and determines which of the slave\'s network interfaces is\nchosen for connecting to the master.\n\nThe address configured with this option, if any, can be seen in the\nMaster_Bind column of the output from SHOW SLAVE STATUS. If you are\nusing slave status log tables (server started with\n--master-info-repository=TABLE), the value can also be seen as the\nMaster_bind column of the mysql.slave_master_info table.\n\nThe ability to bind a replication slave to a specific network interface\nis also supported by NDB Cluster.\n\nMASTER_HEARTBEAT_PERIOD sets the interval in seconds between\nreplication heartbeats. Whenever the master\'s binary log is updated\nwith an event, the waiting period for the next heartbeat is reset.\ninterval is a decimal value having the range 0 to 4294967 seconds and a\nresolution in milliseconds; the smallest nonzero value is 0.001.\nHeartbeats are sent by the master only if there are no unsent events in\nthe binary log file for a period longer than interval.\n\nPrior to MySQL 5.7.4, not including MASTER_HEARTBEAT_PERIOD caused\nCHANGE MASTER TO to reset the heartbeat period (Slave_heartbeat_period)\nto the default, and Slave_received_heartbeats to 0. (Bug #18185490)\n\nIf you are logging master connection information to tables,\nMASTER_HEARTBEAT_PERIOD can be seen as the value of the Heartbeat\ncolumn of the mysql.slave_master_info table.\n\nSetting interval to 0 disables heartbeats altogether. The default value\nfor interval is equal to the value of slave_net_timeout divided by 2.\n\nSetting @@global.slave_net_timeout to a value less than that of the\ncurrent heartbeat interval results in a warning being issued. The\neffect of issuing RESET SLAVE on the heartbeat interval is to reset it\nto the default value.\n\nMASTER_LOG_FILE and MASTER_LOG_POS are the coordinates at which the\nslave I/O thread should begin reading from the master the next time the\nthread starts. RELAY_LOG_FILE and RELAY_LOG_POS are the coordinates at\nwhich the slave SQL thread should begin reading from the relay log the\nnext time the thread starts. If you specify either of MASTER_LOG_FILE\nor MASTER_LOG_POS, you cannot specify RELAY_LOG_FILE or RELAY_LOG_POS.\nIf you specify either of MASTER_LOG_FILE or MASTER_LOG_POS, you also\ncannot specify MASTER_AUTO_POSITION = 1 (described later in this\nsection). If neither of MASTER_LOG_FILE or MASTER_LOG_POS is specified,\nthe slave uses the last coordinates of the slave SQL thread before\nCHANGE MASTER TO was issued. This ensures that there is no\ndiscontinuity in replication, even if the slave SQL thread was late\ncompared to the slave I/O thread, when you merely want to change, say,\nthe password to use.\n\nFrom MySQL 5.7, a CHANGE MASTER TO statement employing RELAY_LOG_FILE,\nRELAY_LOG_POS, or both options can be executed on a running slave when\nthe slave SQL thread is stopped. Prior to MySQL 5.7.4, CHANGE MASTER TO\ndeletes all relay log files and starts a new one, unless you specify\nRELAY_LOG_FILE or RELAY_LOG_POS. In that case, relay log files are\nkept; the relay_log_purge global variable is set silently to 0. In\nMySQL 5.7.4 and later, relay logs are preserved if at least one of the\nslave SQL thread and the slave I/O thread is running; if both threads\nare stopped, all relay log files are deleted unless at least one of\nRELAY_LOG_FILE or RELAY_LOG_POS is specified.\n\nRELAY_LOG_FILE can use either an absolute or relative path, and uses\nthe same base name as MASTER_LOG_FILE. (Bug #12190)\n\nWhen MASTER_AUTO_POSITION = 1 is used with CHANGE MASTER TO, the slave\nattempts to connect to the master using the GTID-based replication\nprotocol. From MySQL 5.7, this option can be employed by CHANGE MASTER\nTO only if both the slave SQL and slave I/O threads are stopped. Both\nthe slave and the master must have GTIDs enabled (GTID_MODE=ON,\nON_PERMISSIVE, or OFF_PERMISSIVE on the slave, and GTID_MODE=ON on the\nmaster). Auto-positioning is used for the connection, so the\ncoordinates represented by MASTER_LOG_FILE and MASTER_LOG_POS are not\nused, and the use of either or both of these options together with\nMASTER_AUTO_POSITION = 1 causes an error. If multi-source replication\nis enabled on the slave, you need to set the MASTER_AUTO_POSITION = 1\noption for each applicable replication channel.\n\nWith MASTER_AUTO_POSITION = 1 set, in the initial connection handshake,\nthe slave sends a GTID set containing the transactions that it has\nalready received, committed, or both. The master responds by sending\nall transactions recorded in its binary log whose GTID is not included\nin the GTID set sent by the slave. This exchange ensures that the\nmaster only sends the transactions with a GTID that the slave has not\nalready recorded or committed. If the slave receives transactions from\nmore than one master, as in the case of a diamond topology, the\nauto-skip function ensures that the transactions are not applied twice.\nFor details of how the GTID set sent by the slave is computed, see\nhttp://dev.mysql.com/doc/refman/5.7/en/replication-gtids-auto-positioni\nng.html.\n\nIf any of the transactions that should be sent by the master have been\npurged from the master\'s binary log, or added to the set of GTIDs in\nthe gtid_purged system variable by another method, the master sends the\nerror ER_MASTER_HAS_PURGED_REQUIRED_GTIDS to the slave, and replication\ndoes not start. Also, if during the exchange of transactions it is\nfound that the slave has recorded or committed transactions with the\nmaster\'s UUID in the GTID, but the master itself has not committed\nthem, the master sends the error ER_SLAVE_HAS_MORE_GTIDS_THAN_MASTER to\nthe slave and replication does not start. For information on how to\nhandle these situations, see\nhttp://dev.mysql.com/doc/refman/5.7/en/replication-gtids-auto-positioni\nng.html.\n\nYou can see whether replication is running with auto-positioning\nenabled by checking the Performance Schema\nreplication_connection_status table or the output of SHOW SLAVE STATUS.\nDisabling the MASTER_AUTO_POSITION option again makes the slave revert\nto file-based replication, in which case you must also specify one or\nboth of the MASTER_LOG_FILE or MASTER_LOG_POS options.\n\nIGNORE_SERVER_IDS takes a comma-separated list of 0 or more server IDs.\nEvents originating from the corresponding servers are ignored, with the\nexception of log rotation and deletion events, which are still recorded\nin the relay log.\n\nIn circular replication, the originating server normally acts as the\nterminator of its own events, so that they are not applied more than\nonce. Thus, this option is useful in circular replication when one of\nthe servers in the circle is removed. Suppose that you have a circular\nreplication setup with 4 servers, having server IDs 1, 2, 3, and 4, and\nserver 3 fails. When bridging the gap by starting replication from\nserver 2 to server 4, you can include IGNORE_SERVER_IDS = (3) in the\nCHANGE MASTER TO statement that you issue on server 4 to tell it to use\nserver 2 as its master instead of server 3. Doing so causes it to\nignore and not to propagate any statements that originated with the\nserver that is no longer in use.\n\nIf a CHANGE MASTER TO statement is issued without any IGNORE_SERVER_IDS\noption, any existing list is preserved. To clear the list of ignored\nservers, it is necessary to use the option with an empty list:\n\nCHANGE MASTER TO IGNORE_SERVER_IDS = ();\n\nPrior to MySQL 5.7.5, RESET SLAVE ALL has no effect on the server ID\nlist. In MySQL 5.7.5 and later, RESET SLAVE ALL clears\nIGNORE_SERVER_IDS. (Bug #18816897)\n\nIf IGNORE_SERVER_IDS contains the server\'s own ID and the server was\nstarted with the --replicate-same-server-id option enabled, an error\nresults.\n\nThe master info repository and the output of SHOW SLAVE STATUS provide\nthe list of servers that are currently ignored. For more information,\nsee http://dev.mysql.com/doc/refman/5.7/en/slave-logs-status.html, and\n[HELP SHOW SLAVE STATUS].\n\nInvoking CHANGE MASTER TO causes the previous values for MASTER_HOST,\nMASTER_PORT, MASTER_LOG_FILE, and MASTER_LOG_POS to be written to the\nerror log, along with other information about the slave\'s state prior\nto execution.\n\nCHANGE MASTER TO causes an implicit commit of an ongoing transaction.\nSee http://dev.mysql.com/doc/refman/5.7/en/implicit-commit.html.\n\nIn MySQL 5.7.4 and later, the strict requirement to execute STOP SLAVE\nprior to issuing any CHANGE MASTER TO statement (and START SLAVE\nafterward) is removed. Instead of depending on whether the slave is\nstopped, the behavior of CHANGE MASTER TO depends (in MySQL 5.7.4 and\nlater) on the states of the slave SQL thread and slave I/O threads;\nwhich of these threads is stopped or running now determines the options\nthat can or cannot be used with a CHANGE MASTER TO statement at a given\npoint in time. The rules for making this determination are listed here:\n\no If the SQL thread is stopped, you can execute CHANGE MASTER TO using\n any combination that is otherwise allowed of RELAY_LOG_FILE,\n RELAY_LOG_POS, and MASTER_DELAY options, even if the slave I/O thread\n is running. No other options may be used with this statement when the\n I/O thread is running.\n\no If the I/O thread is stopped, you can execute CHANGE MASTER TO using\n any of the options for this statement (in any allowed combination)\n except RELAY_LOG_FILE, RELAY_LOG_POS, or MASTER_DELAY, even when the\n SQL thread is running. These three options may not be used when the\n I/O thread is running.\n\no Both the SQL thread and the I/O thread must be stopped before issuing\n a CHANGE MASTER TO statement that employs MASTER_AUTO_POSITION = 1.\n\nYou can check the current state of the slave SQL and I/O threads using\nSHOW SLAVE STATUS.\n\nFor more information, see\nhttp://dev.mysql.com/doc/refman/5.7/en/replication-solutions-switch.htm\nl.\n\nIf you are using statement-based replication and temporary tables, it\nis possible for a CHANGE MASTER TO statement following a STOP SLAVE\nstatement to leave behind temporary tables on the slave. From MySQL\n5.7, a warning (ER_WARN_OPEN_TEMP_TABLES_MUST_BE_ZERO) is issued\nwhenever this occurs. You can avoid this in such cases by making sure\nthat the value of the Slave_open_temp_tables system status variable is\nequal to 0 prior to executing such a CHANGE MASTER TO statement.\n\nCHANGE MASTER TO is useful for setting up a slave when you have the\nsnapshot of the master and have recorded the master binary log\ncoordinates corresponding to the time of the snapshot. After loading\nthe snapshot into the slave to synchronize it with the master, you can\nrun CHANGE MASTER TO MASTER_LOG_FILE=\'log_name\', MASTER_LOG_POS=log_pos\non the slave to specify the coordinates at which the slave should begin\nreading the master binary log.\n\nThe following example changes the master server the slave uses and\nestablishes the master binary log coordinates from which the slave\nbegins reading. This is used when you want to set up the slave to\nreplicate the master:\n\nCHANGE MASTER TO\n MASTER_HOST=\'master2.example.com\',\n MASTER_USER=\'replication\',\n MASTER_PASSWORD=\'password\',\n MASTER_PORT=3306,\n MASTER_LOG_FILE=\'master2-bin.001\',\n MASTER_LOG_POS=4,\n MASTER_CONNECT_RETRY=10;\n\nThe next example shows an operation that is less frequently employed.\nIt is used when the slave has relay log files that you want it to\nexecute again for some reason. To do this, the master need not be\nreachable. You need only use CHANGE MASTER TO and start the SQL thread\n(START SLAVE SQL_THREAD):\n\nCHANGE MASTER TO\n RELAY_LOG_FILE=\'slave-relay-bin.006\',\n RELAY_LOG_POS=4025;\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/change-master-to.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/change-master-to.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (438,32,'TIMESTAMP FUNCTION','Syntax:\nTIMESTAMP(expr), TIMESTAMP(expr1,expr2)\n\nWith a single argument, this function returns the date or datetime\nexpression expr as a datetime value. With two arguments, it adds the\ntime expression expr2 to the date or datetime expression expr1 and\nreturns the result as a datetime value.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html\n\n','mysql> SELECT TIMESTAMP(\'2003-12-31\');\n -> \'2003-12-31 00:00:00\'\nmysql> SELECT TIMESTAMP(\'2003-12-31 12:00:00\',\'12:00:00\');\n -> \'2004-01-01 00:00:00\'\n','http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (439,40,'DROP DATABASE','Syntax:\nDROP {DATABASE | SCHEMA} [IF EXISTS] db_name\n\nDROP DATABASE drops all tables in the database and deletes the\ndatabase. Be very careful with this statement! To use DROP DATABASE,\nyou need the DROP privilege on the database. DROP SCHEMA is a synonym\nfor DROP DATABASE.\n\n*Important*:\n\nWhen a database is dropped, privileges granted specifically for the\ndatabase are not automatically dropped. They must be dropped manually.\nSee [HELP GRANT].\n\nIF EXISTS is used to prevent an error from occurring if the database\ndoes not exist.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/drop-database.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/drop-database.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (440,27,'SHOW GRANTS','Syntax:\nSHOW GRANTS [FOR user]\n\nThis statement displays the privileges that are assigned to a MySQL\nuser account, in the form of GRANT statements that must be executed to\nduplicate the privilege assignments.\n\n*Note*:\n\nTo display nonprivilege information for MySQL accounts, use the SHOW\nCREATE USER statement. See [HELP SHOW CREATE USER].\n\nSHOW GRANTS requires the SELECT privilege for the mysql database,\nexcept to display privileges for the current user.\n\nTo name the account for SHOW GRANTS, use the same format as for the\nGRANT statement; for example, \'jeffrey\'@\'localhost\':\n\nmysql> SHOW GRANTS FOR \'jeffrey\'@\'localhost\';\n+------------------------------------------------------------------+\n| Grants for jeffrey@localhost |\n+------------------------------------------------------------------+\n| GRANT USAGE ON *.* TO `jeffrey`@`localhost` |\n| GRANT SELECT, INSERT, UPDATE ON `db1`.* TO `jeffrey`@`localhost` |\n+------------------------------------------------------------------+\n\nThe host part, if omitted, defaults to \'%\'. For additional information\nabout specifying account names, see\nhttp://dev.mysql.com/doc/refman/5.7/en/account-names.html.\n\nTo display the privileges granted to the current user (the account you\nare using to connect to the server), you can use any of the following\nstatements:\n\nSHOW GRANTS;\nSHOW GRANTS FOR CURRENT_USER;\nSHOW GRANTS FOR CURRENT_USER();\n\nIf SHOW GRANTS FOR CURRENT_USER (or any of the equivalent syntaxes) is\nused in definer context, such as within a stored procedure that\nexecutes with definer rather than invoker privileges), the grants\ndisplayed are those of the definer and not the invoker.\n\nSHOW GRANTS does not display privileges that are available to the named\naccount but are granted to a different account. For example, if an\nanonymous account exists, the named account might be able to use its\nprivileges, but SHOW GRANTS does not display them.\n\nSHOW GRANTS output does not include IDENTIFIED BY PASSWORD clauses. Use\nthe SHOW CREATE USER statement instead. See [HELP SHOW CREATE USER].\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/show-grants.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/show-grants.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (440,27,'SHOW GRANTS','Syntax:\nSHOW GRANTS [FOR user]\n\nThis statement displays the privileges that are assigned to a MySQL\nuser account, in the form of GRANT statements that must be executed to\nduplicate the privilege assignments.\n\n*Note*:\n\nTo display nonprivilege information for MySQL accounts, use the SHOW\nCREATE USER statement. See [HELP SHOW CREATE USER].\n\nSHOW GRANTS requires the SELECT privilege for the mysql system\ndatabase, except to display privileges for the current user.\n\nTo name the account for SHOW GRANTS, use the same format as for the\nGRANT statement; for example, \'jeffrey\'@\'localhost\':\n\nmysql> SHOW GRANTS FOR \'jeffrey\'@\'localhost\';\n+------------------------------------------------------------------+\n| Grants for jeffrey@localhost |\n+------------------------------------------------------------------+\n| GRANT USAGE ON *.* TO `jeffrey`@`localhost` |\n| GRANT SELECT, INSERT, UPDATE ON `db1`.* TO `jeffrey`@`localhost` |\n+------------------------------------------------------------------+\n\nThe host part, if omitted, defaults to \'%\'. For additional information\nabout specifying account names, see\nhttp://dev.mysql.com/doc/refman/5.7/en/account-names.html.\n\nTo display the privileges granted to the current user (the account you\nare using to connect to the server), you can use any of the following\nstatements:\n\nSHOW GRANTS;\nSHOW GRANTS FOR CURRENT_USER;\nSHOW GRANTS FOR CURRENT_USER();\n\nIf SHOW GRANTS FOR CURRENT_USER (or any of the equivalent syntaxes) is\nused in definer context, such as within a stored procedure that\nexecutes with definer rather than invoker privileges, the grants\ndisplayed are those of the definer and not the invoker.\n\nSHOW GRANTS does not display privileges that are available to the named\naccount but are granted to a different account. For example, if an\nanonymous account exists, the named account might be able to use its\nprivileges, but SHOW GRANTS does not display them.\n\nSHOW GRANTS output does not include IDENTIFIED BY PASSWORD clauses. Use\nthe SHOW CREATE USER statement instead. See [HELP SHOW CREATE USER].\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/show-grants.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/show-grants.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (441,7,'JSON_CONTAINS_PATH','Syntax:\nJSON_CONTAINS_PATH(json_doc, one_or_all, path[, path] ...)\n\nReturns 0 or 1 to indicate whether a JSON document contains data at a\ngiven path or paths. Returns NULL if any argument is NULL. An error\noccurs if the json_doc argument is not a valid JSON document, any path\nargument is not a valid path expression, or one_or_all is not \'one\' or\n\'all\'.\n\nTo check for a specific value at a path, use JSON_CONTAINS() instead.\n\nThe return value is 0 if no specified path exists within the document.\nOtherwise, the return value depends on the one_or_all argument:\n\no \'one\': 1 if at least one path exists within the document, 0\n otherwise.\n\no \'all\': 1 if all paths exist within the document, 0 otherwise.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html\n\n','mysql> SET @j = \'{"a": 1, "b": 2, "c": {"d": 4}}\';\nmysql> SELECT JSON_CONTAINS_PATH(@j, \'one\', \'$.a\', \'$.e\');\n+---------------------------------------------+\n| JSON_CONTAINS_PATH(@j, \'one\', \'$.a\', \'$.e\') |\n+---------------------------------------------+\n| 1 |\n+---------------------------------------------+\nmysql> SELECT JSON_CONTAINS_PATH(@j, \'all\', \'$.a\', \'$.e\');\n+---------------------------------------------+\n| JSON_CONTAINS_PATH(@j, \'all\', \'$.a\', \'$.e\') |\n+---------------------------------------------+\n| 0 |\n+---------------------------------------------+\nmysql> SELECT JSON_CONTAINS_PATH(@j, \'one\', \'$.c.d\');\n+----------------------------------------+\n| JSON_CONTAINS_PATH(@j, \'one\', \'$.c.d\') |\n+----------------------------------------+\n| 1 |\n+----------------------------------------+\nmysql> SELECT JSON_CONTAINS_PATH(@j, \'one\', \'$.a.d\');\n+----------------------------------------+\n| JSON_CONTAINS_PATH(@j, \'one\', \'$.a.d\') |\n+----------------------------------------+\n| 0 |\n+----------------------------------------+\n','http://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (442,33,'ST_MPOINTFROMWKB','ST_MPointFromWKB(wkb[, srid]), ST_MultiPointFromWKB(wkb[, srid])\n\nConstructs a MultiPoint value using its WKB representation and SRID.\n\nThe result is NULL if the WKB or SRID argument is NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/gis-wkb-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/gis-wkb-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (443,3,'CRC32','Syntax:\nCRC32(expr)\n\nComputes a cyclic redundancy check value and returns a 32-bit unsigned\nvalue. The result is NULL if the argument is NULL. The argument is\nexpected to be a string and (if possible) is treated as one if it is\nnot.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html\n\n','mysql> SELECT CRC32(\'MySQL\');\n -> 3259397556\nmysql> SELECT CRC32(\'mysql\');\n -> 2501908538\n','http://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html'); @@ -536,7 +536,7 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example, INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (455,32,'DAYOFMONTH','Syntax:\nDAYOFMONTH(date)\n\nReturns the day of the month for date, in the range 1 to 31, or 0 for\ndates such as \'0000-00-00\' or \'2008-00-00\' that have a zero day part.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html\n\n','mysql> SELECT DAYOFMONTH(\'2007-02-03\');\n -> 3\n','http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (456,32,'UNIX_TIMESTAMP','Syntax:\nUNIX_TIMESTAMP(), UNIX_TIMESTAMP(date)\n\nIf called with no argument, returns a Unix timestamp (seconds since\n\'1970-01-01 00:00:00\' UTC). The return value is an integer if no\nargument is given or the argument does not include a fractional seconds\npart, or DECIMAL if an argument is given that includes a fractional\nseconds part.\n\nIf UNIX_TIMESTAMP() is called with a date argument, it returns the\nvalue of the argument as seconds since \'1970-01-01 00:00:00\' UTC. The\ndate argument may be a DATE, DATETIME, or TIMESTAMP string, or a number\nin YYMMDD, YYMMDDHHMMSS, YYYYMMDD, or YYYYMMDDHHMMSS format. If the\nargument includes a time part, it may optionally include a fractional\nseconds part. The server interprets date as a value in the current time\nzone and converts it to an internal value in UTC. Clients can set their\ntime zone as described in\nhttp://dev.mysql.com/doc/refman/5.7/en/time-zone-support.html.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html\n\n','mysql> SELECT UNIX_TIMESTAMP();\n -> 1447431666\nmysql> SELECT UNIX_TIMESTAMP(\'2015-11-13 10:20:19\');\n -> 1447431619\nmysql> SELECT UNIX_TIMESTAMP(\'2015-11-13 10:20:19.012\');\n -> 1447431619.012\n','http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (457,26,'ST_INTERSECTION','ST_Intersection(g1, g2)\n\nReturns a geometry that represents the point set intersection of the\ngeometry values g1 and g2. If any argument is NULL, the return value is\nNULL.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/spatial-operator-functions.html\n\n','mysql> SET @g1 = ST_GeomFromText(\'LineString(1 1, 3 3)\');\nmysql> SET @g2 = ST_GeomFromText(\'LineString(1 3, 3 1)\');\nmysql> SELECT ST_AsText(ST_Intersection(@g1, @g2));\n+--------------------------------------+\n| ST_AsText(ST_Intersection(@g1, @g2)) |\n+--------------------------------------+\n| POINT(2 2) |\n+--------------------------------------+\n','http://dev.mysql.com/doc/refman/5.7/en/spatial-operator-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (458,10,'RENAME USER','Syntax:\nRENAME USER old_user TO new_user\n [, old_user TO new_user] ...\n\nThe RENAME USER statement renames existing MySQL accounts. An error\noccurs for old accounts that do not exist or new accounts that already\nexist.\n\nTo use RENAME USER, you must have the global CREATE USER privilege, or\nthe UPDATE privilege for the mysql database. When the read_only system\nvariable is enabled, RENAME USER additionally requires the SUPER\nprivilege.\n\nEach account name uses the format described in\nhttp://dev.mysql.com/doc/refman/5.7/en/account-names.html. For example:\n\nRENAME USER \'jeffrey\'@\'localhost\' TO \'jeff\'@\'127.0.0.1\';\n\nThe host name part of the account name, if omitted, defaults to \'%\'.\n\nRENAME USER causes the privileges held by the old user to be those held\nby the new user. However, RENAME USER does not automatically drop or\ninvalidate databases or objects within them that the old user created.\nThis includes stored programs or views for which the DEFINER attribute\nnames the old user. Attempts to access such objects may produce an\nerror if they execute in definer security context. (For information\nabout security context, see\nhttp://dev.mysql.com/doc/refman/5.7/en/stored-programs-security.html.)\n\nThe privilege changes take effect as indicated in\nhttp://dev.mysql.com/doc/refman/5.7/en/privilege-changes.html.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/rename-user.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/rename-user.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (458,10,'RENAME USER','Syntax:\nRENAME USER old_user TO new_user\n [, old_user TO new_user] ...\n\nThe RENAME USER statement renames existing MySQL accounts. An error\noccurs for old accounts that do not exist or new accounts that already\nexist.\n\nTo use RENAME USER, you must have the global CREATE USER privilege, or\nthe UPDATE privilege for the mysql system database. When the read_only\nsystem variable is enabled, RENAME USER additionally requires the SUPER\nprivilege.\n\nEach account name uses the format described in\nhttp://dev.mysql.com/doc/refman/5.7/en/account-names.html. For example:\n\nRENAME USER \'jeffrey\'@\'localhost\' TO \'jeff\'@\'127.0.0.1\';\n\nThe host name part of the account name, if omitted, defaults to \'%\'.\n\nRENAME USER causes the privileges held by the old user to be those held\nby the new user. However, RENAME USER does not automatically drop or\ninvalidate databases or objects within them that the old user created.\nThis includes stored programs or views for which the DEFINER attribute\nnames the old user. Attempts to access such objects may produce an\nerror if they execute in definer security context. (For information\nabout security context, see\nhttp://dev.mysql.com/doc/refman/5.7/en/stored-programs-security.html.)\n\nThe privilege changes take effect as indicated in\nhttp://dev.mysql.com/doc/refman/5.7/en/privilege-changes.html.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/rename-user.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/rename-user.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (459,13,'NUMPOINTS','NumPoints(ls)\n\nST_NumPoints() and NumPoints() are synonyms. For more information, see\nthe description of ST_NumPoints().\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/gis-linestring-property-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/gis-linestring-property-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (460,40,'ALTER LOGFILE GROUP','Syntax:\nALTER LOGFILE GROUP logfile_group\n ADD UNDOFILE \'file_name\'\n [INITIAL_SIZE [=] size]\n [WAIT]\n ENGINE [=] engine_name\n\nThis statement adds an UNDO file named \'file_name\' to an existing log\nfile group logfile_group. An ALTER LOGFILE GROUP statement has one and\nonly one ADD UNDOFILE clause. No DROP UNDOFILE clause is currently\nsupported.\n\n*Note*:\n\nAll NDB Cluster Disk Data objects share the same namespace. This means\nthat each Disk Data object must be uniquely named (and not merely each\nDisk Data object of a given type). For example, you cannot have a\ntablespace and an undo log file with the same name, or an undo log file\nand a data file with the same name.\n\nThe optional INITIAL_SIZE parameter sets the UNDO file\'s initial size\nin bytes; if not specified, the initial size defaults to 134217728 (128\nMB). You may optionally follow size with a one-letter abbreviation for\nan order of magnitude, similar to those used in my.cnf. Generally, this\nis one of the letters M (megabytes) or G (gigabytes). (Bug #13116514,\nBug #16104705, Bug #62858)\n\nOn 32-bit systems, the maximum supported value for INITIAL_SIZE is\n4294967296 (4 GB). (Bug #29186)\n\nThe minimum allowed value for INITIAL_SIZE is 1048576 (1 MB). (Bug\n#29574)\n\n*Note*:\n\nWAIT is parsed but otherwise ignored. This keyword currently has no\neffect, and is intended for future expansion.\n\nThe ENGINE parameter (required) determines the storage engine which is\nused by this log file group, with engine_name being the name of the\nstorage engine. Currently, the only accepted values for engine_name are\n"NDBCLUSTER" and "NDB". The two values are equivalent.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/alter-logfile-group.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/alter-logfile-group.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (461,32,'LOCALTIMESTAMP','Syntax:\nLOCALTIMESTAMP, LOCALTIMESTAMP([fsp])\n\nLOCALTIMESTAMP and LOCALTIMESTAMP() are synonyms for NOW().\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html'); @@ -551,7 +551,7 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example, INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (470,23,'AUTO_INCREMENT','The AUTO_INCREMENT attribute can be used to generate a unique identity\nfor new rows:\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/example-auto-increment.html\n\n','CREATE TABLE animals (\n id MEDIUMINT NOT NULL AUTO_INCREMENT,\n name CHAR(30) NOT NULL,\n PRIMARY KEY (id)\n);\n\nINSERT INTO animals (name) VALUES\n (\'dog\'),(\'cat\'),(\'penguin\'),\n (\'lax\'),(\'whale\'),(\'ostrich\');\n\nSELECT * FROM animals;\n','http://dev.mysql.com/doc/refman/5.7/en/example-auto-increment.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (471,12,'UNCOMPRESS','Syntax:\nUNCOMPRESS(string_to_uncompress)\n\nUncompresses a string compressed by the COMPRESS() function. If the\nargument is not a compressed value, the result is NULL. This function\nrequires MySQL to have been compiled with a compression library such as\nzlib. Otherwise, the return value is always NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html\n\n','mysql> SELECT UNCOMPRESS(COMPRESS(\'any string\'));\n -> \'any string\'\nmysql> SELECT UNCOMPRESS(\'any string\');\n -> NULL\n','http://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (472,4,'GEOMCOLLFROMTEXT','GeomCollFromText(wkt[, srid]), GeometryCollectionFromText(wkt[, srid])\n\nST_GeomCollFromText(), ST_GeometryCollectionFromText(),\nST_GeomCollFromTxt(), GeomCollFromText(), and\nGeometryCollectionFromText() are synonyms. For more information, see\nthe description of ST_GeomCollFromText().\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (473,2,'ST_INTERIORRINGN','ST_InteriorRingN(poly, N)\n\nReturns the N-th interior ring for the Polygon value poly as a\nLineString. Rings are numbered beginning with 1. If the argument is\nNULL or an empty geometry, the return value is NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/gis-polygon-property-functions.html\n\n','mysql> SET @poly =\n -> \'Polygon((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1))\';\nmysql> SELECT ST_AsText(ST_InteriorRingN(ST_GeomFromText(@poly),1));\n+-------------------------------------------------------+\n| ST_AsText(ST_InteriorRingN(ST_GeomFromText(@poly),1)) |\n+-------------------------------------------------------+\n| LINESTRING(1 1,1 2,2 2,2 1,1 1) |\n+-------------------------------------------------------+\n','http://dev.mysql.com/doc/refman/5.7/en/gis-polygon-property-functions.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (473,2,'ST_INTERIORRINGN','ST_InteriorRingN(poly, N)\n\nReturns the N-th interior ring for the Polygon value poly as a\nLineString. Rings are numbered beginning with 1. If the argument is\nNULL or an empty geometry, the return value is NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/gis-polygon-property-functions.html\n\n','mysql> SET @poly =\n \'Polygon((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1))\';\nmysql> SELECT ST_AsText(ST_InteriorRingN(ST_GeomFromText(@poly),1));\n+-------------------------------------------------------+\n| ST_AsText(ST_InteriorRingN(ST_GeomFromText(@poly),1)) |\n+-------------------------------------------------------+\n| LINESTRING(1 1,1 2,2 2,2 1,1 1) |\n+-------------------------------------------------------+\n','http://dev.mysql.com/doc/refman/5.7/en/gis-polygon-property-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (474,17,'LAST_INSERT_ID','Syntax:\nLAST_INSERT_ID(), LAST_INSERT_ID(expr)\n\nWith no argument, LAST_INSERT_ID() returns a BIGINT UNSIGNED (64-bit)\nvalue representing the first automatically generated value successfully\ninserted for an AUTO_INCREMENT column as a result of the most recently\nexecuted INSERT statement. The value of LAST_INSERT_ID() remains\nunchanged if no rows are successfully inserted.\n\nWith an argument, LAST_INSERT_ID() returns an unsigned integer.\n\nFor example, after inserting a row that generates an AUTO_INCREMENT\nvalue, you can get the value like this:\n\nmysql> SELECT LAST_INSERT_ID();\n -> 195\n\nThe currently executing statement does not affect the value of\nLAST_INSERT_ID(). Suppose that you generate an AUTO_INCREMENT value\nwith one statement, and then refer to LAST_INSERT_ID() in a\nmultiple-row INSERT statement that inserts rows into a table with its\nown AUTO_INCREMENT column. The value of LAST_INSERT_ID() will remain\nstable in the second statement; its value for the second and later rows\nis not affected by the earlier row insertions. (However, if you mix\nreferences to LAST_INSERT_ID() and LAST_INSERT_ID(expr), the effect is\nundefined.)\n\nIf the previous statement returned an error, the value of\nLAST_INSERT_ID() is undefined. For transactional tables, if the\nstatement is rolled back due to an error, the value of LAST_INSERT_ID()\nis left undefined. For manual ROLLBACK, the value of LAST_INSERT_ID()\nis not restored to that before the transaction; it remains as it was at\nthe point of the ROLLBACK.\n\nPrior to MySQL 5.7.3, this function was not replicated correctly if\nreplication filtering rules were in use. (Bug #17234370, Bug #69861)\n\nWithin the body of a stored routine (procedure or function) or a\ntrigger, the value of LAST_INSERT_ID() changes the same way as for\nstatements executed outside the body of these kinds of objects. The\neffect of a stored routine or trigger upon the value of\nLAST_INSERT_ID() that is seen by following statements depends on the\nkind of routine:\n\no If a stored procedure executes statements that change the value of\n LAST_INSERT_ID(), the changed value is seen by statements that follow\n the procedure call.\n\no For stored functions and triggers that change the value, the value is\n restored when the function or trigger ends, so following statements\n will not see a changed value.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/information-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/information-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (475,3,'FLOOR','Syntax:\nFLOOR(X)\n\nReturns the largest integer value not greater than X.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html\n\n','mysql> SELECT FLOOR(1.23), FLOOR(-1.23);\n -> 1, -2\n','http://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (476,3,'COS','Syntax:\nCOS(X)\n\nReturns the cosine of X, where X is given in radians.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html\n\n','mysql> SELECT COS(PI());\n -> -1\n','http://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html'); @@ -566,7 +566,7 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example, INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (485,40,'DROP TABLE','Syntax:\nDROP [TEMPORARY] TABLE [IF EXISTS]\n tbl_name [, tbl_name] ...\n [RESTRICT | CASCADE]\n\nDROP TABLE removes one or more tables. You must have the DROP privilege\nfor each table.\n\nBe careful with this statement! It removes the table definition and all\ntable data. For a partitioned table, it permanently removes the table\ndefinition, all its partitions, and all data stored in those\npartitions. It also removes partition definitions associated with the\ndropped table.\n\nDROP TABLE causes an implicit commit, except when used with the\nTEMPORARY keyword. See\nhttp://dev.mysql.com/doc/refman/5.7/en/implicit-commit.html.\n\n*Important*:\n\nWhen a table is dropped, privileges granted specifically for the table\nare not automatically dropped. They must be dropped manually. See [HELP\nGRANT].\n\nIf any tables named in the argument list do not exist, the statement\nreturns an error indicating by name which nonexisting tables it was\nunable to drop, but also drops all tables in the list that do exist.\n\nUse IF EXISTS to prevent an error from occurring for tables that do not\nexist. Instead of an error, a NOTE is generated for each nonexistent\ntable; these notes can be displayed with SHOW WARNINGS. See [HELP SHOW\nWARNINGS].\n\nIF EXISTS can also be useful for dropping tables in unusual\ncircumstances under which there is an .frm file but no table managed by\nthe storage engine. (For example, if an abnormal server exit occurs\nafter removal of the table from the storage engine but before .frm file\nremoval.)\n\nThe TEMPORARY keyword has the following effects:\n\no The statement drops only TEMPORARY tables.\n\no The statement does not cause an implicit commit.\n\no No access rights are checked. A TEMPORARY table is visible only with\n the session that created it, so no check is necessary.\n\nUsing TEMPORARY is a good way to ensure that you do not accidentally\ndrop a non-TEMPORARY table.\n\nThe RESTRICT and CASCADE keywords do nothing. They are permitted to\nmake porting easier from other database systems.\n\nDROP TABLE is not supported with all innodb_force_recovery settings.\nSee\nhttp://dev.mysql.com/doc/refman/5.7/en/forcing-innodb-recovery.html.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/drop-table.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/drop-table.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (486,3,'POW','Syntax:\nPOW(X,Y)\n\nReturns the value of X raised to the power of Y.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html\n\n','mysql> SELECT POW(2,2);\n -> 4\nmysql> SELECT POW(2,-2);\n -> 0.25\n','http://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (487,32,'NOW','Syntax:\nNOW([fsp])\n\nReturns the current date and time as a value in \'YYYY-MM-DD HH:MM:SS\'\nor YYYYMMDDHHMMSS format, depending on whether the function is used in\na string or numeric context. The value is expressed in the current time\nzone.\n\nIf the fsp argument is given to specify a fractional seconds precision\nfrom 0 to 6, the return value includes a fractional seconds part of\nthat many digits.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html\n\n','mysql> SELECT NOW();\n -> \'2007-12-15 23:50:26\'\nmysql> SELECT NOW() + 0;\n -> 20071215235026.000000\n','http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (488,27,'SHOW ENGINES','Syntax:\nSHOW [STORAGE] ENGINES\n\nSHOW ENGINES displays status information about the server\'s storage\nengines. This is particularly useful for checking whether a storage\nengine is supported, or to see what the default engine is. This\ninformation can also be obtained from the INFORMATION_SCHEMA ENGINES\ntable. See http://dev.mysql.com/doc/refman/5.7/en/engines-table.html.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/show-engines.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/show-engines.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (488,27,'SHOW ENGINES','Syntax:\nSHOW [STORAGE] ENGINES\n\nSHOW ENGINES displays status information about the server\'s storage\nengines. This is particularly useful for checking whether a storage\nengine is supported, or to see what the default engine is.\n\nFor information about MySQL storage engines, see\nhttp://dev.mysql.com/doc/refman/5.7/en/innodb-storage-engine.html, and\nhttp://dev.mysql.com/doc/refman/5.7/en/storage-engines.html.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/show-engines.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/show-engines.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (489,4,'ST_POINTFROMTEXT','ST_PointFromText(wkt[, srid])\n\nConstructs a Point value using its WKT representation and SRID.\n\nIf the geometry argument is NULL or not a syntactically well-formed\ngeometry, or if the SRID argument is NULL, the return value is NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (490,13,'ST_ENDPOINT','ST_EndPoint(ls)\n\nReturns the Point that is the endpoint of the LineString value ls. If\nthe argument is NULL or an empty geometry, the return value is NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/gis-linestring-property-functions.html\n\n','mysql> SET @ls = \'LineString(1 1,2 2,3 3)\';\nmysql> SELECT ST_AsText(ST_EndPoint(ST_GeomFromText(@ls)));\n+----------------------------------------------+\n| ST_AsText(ST_EndPoint(ST_GeomFromText(@ls))) |\n+----------------------------------------------+\n| POINT(3 3) |\n+----------------------------------------------+\n','http://dev.mysql.com/doc/refman/5.7/en/gis-linestring-property-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (491,14,'IS_IPV6','Syntax:\nIS_IPV6(expr)\n\nReturns 1 if the argument is a valid IPv6 address specified as a\nstring, 0 otherwise. This function does not consider IPv4 addresses to\nbe valid IPv6 addresses.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html\n\n','mysql> SELECT IS_IPV6(\'10.0.5.9\'), IS_IPV6(\'::1\');\n -> 0, 1\n','http://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html'); @@ -583,7 +583,7 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example, INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (502,27,'LOAD INDEX','Syntax:\nLOAD INDEX INTO CACHE\n tbl_index_list [, tbl_index_list] ...\n\ntbl_index_list:\n tbl_name\n [PARTITION (partition_list | ALL)]\n [[INDEX|KEY] (index_name[, index_name] ...)]\n [IGNORE LEAVES]\n\npartition_list:\n partition_name[, partition_name][, ...]\n\nThe LOAD INDEX INTO CACHE statement preloads a table index into the key\ncache to which it has been assigned by an explicit CACHE INDEX\nstatement, or into the default key cache otherwise.\n\nLOAD INDEX INTO CACHE is used only for MyISAM tables. In MySQL 5.7, it\nis also supported for partitioned MyISAM tables; in addition, indexes\non partitioned tables can be preloaded for one, several, or all\npartitions.\n\nThe IGNORE LEAVES modifier causes only blocks for the nonleaf nodes of\nthe index to be preloaded.\n\nIGNORE LEAVES is also supported for partitioned MyISAM tables.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/load-index.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/load-index.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (503,28,'UNION','Syntax:\nSELECT ...\nUNION [ALL | DISTINCT] SELECT ...\n[UNION [ALL | DISTINCT] SELECT ...]\n\nUNION is used to combine the result from multiple SELECT statements\ninto a single result set.\n\nThe column names from the first SELECT statement are used as the column\nnames for the results returned. Selected columns listed in\ncorresponding positions of each SELECT statement should have the same\ndata type. (For example, the first column selected by the first\nstatement should have the same type as the first column selected by the\nother statements.)\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/union.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/union.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (504,32,'TO_DAYS','Syntax:\nTO_DAYS(date)\n\nGiven a date date, returns a day number (the number of days since year\n0).\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html\n\n','mysql> SELECT TO_DAYS(950501);\n -> 728779\nmysql> SELECT TO_DAYS(\'2007-10-07\');\n -> 733321\n','http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (505,27,'SHOW INDEX','Syntax:\nSHOW {INDEX | INDEXES | KEYS}\n {FROM | IN} tbl_name\n [{FROM | IN} db_name]\n [WHERE expr]\n\nSHOW INDEX returns table index information. The format resembles that\nof the SQLStatistics call in ODBC. This statement requires some\nprivilege for any column in the table.\n\nYou can use db_name.tbl_name as an alternative to the tbl_name FROM\ndb_name syntax. These two statements are equivalent:\n\nSHOW INDEX FROM mytable FROM mydb;\nSHOW INDEX FROM mydb.mytable;\n\nThe WHERE clause can be given to select rows using more general\nconditions, as discussed in\nhttp://dev.mysql.com/doc/refman/5.7/en/extended-show.html.\n\nmysql> SHOW INDEX FROM City\\G\n*************************** 1. row ***************************\n Table: city\n Non_unique: 0\n Key_name: PRIMARY\n Seq_in_index: 1\n Column_name: ID\n Collation: A\n Cardinality: 4321\n Sub_part: NULL\n Packed: NULL\n Null: \n Index_type: BTREE\n Comment: \nIndex_comment: \n*************************** 2. row ***************************\n Table: city\n Non_unique: 1\n Key_name: CountryCode\n Seq_in_index: 1\n Column_name: CountryCode\n Collation: A\n Cardinality: 4321\n Sub_part: NULL\n Packed: NULL\n Null: \n Index_type: BTREE\n Comment: \nIndex_comment: \n\nSHOW INDEX returns the following fields:\n\no Table\n\n The name of the table.\n\no Non_unique\n\n 0 if the index cannot contain duplicates, 1 if it can.\n\no Key_name\n\n The name of the index. If the index is the primary key, the name is\n always PRIMARY.\n\no Seq_in_index\n\n The column sequence number in the index, starting with 1.\n\no Column_name\n\n The column name.\n\no Collation\n\n How the column is sorted in the index. This can have values A\n (ascending) or NULL (not sorted).\n\no Cardinality\n\n An estimate of the number of unique values in the index. To update\n this number, run ANALYZE TABLE or (for MyISAM tables) myisamchk -a.\n\n Cardinality is counted based on statistics stored as integers, so the\n value is not necessarily exact even for small tables. The higher the\n cardinality, the greater the chance that MySQL uses the index when\n doing joins.\n\no Sub_part\n\n The index prefix. That is, the number of indexed characters if the\n column is only partly indexed, NULL if the entire column is indexed.\n\n *Note*:\n\n Prefix limits are measured in bytes, whereas the prefix length in\n CREATE TABLE, ALTER TABLE, and CREATE INDEX statements is interpreted\n as number of characters for nonbinary string types (CHAR, VARCHAR,\n TEXT) and number of bytes for binary string types (BINARY, VARBINARY,\n BLOB). Take this into account when specifying a prefix length for a\n nonbinary string column that uses a multibyte character set.\n\n For additional information about index prefixes, see\n http://dev.mysql.com/doc/refman/5.7/en/column-indexes.html, and [HELP\n CREATE INDEX].\n\no Packed\n\n Indicates how the key is packed. NULL if it is not.\n\no Null\n\n Contains YES if the column may contain NULL values and \'\' if not.\n\no Index_type\n\n The index method used (BTREE, FULLTEXT, HASH, RTREE).\n\no Comment\n\n Information about the index not described in its own column, such as\n disabled if the index is disabled.\n\no Index_comment\n\n Any comment provided for the index with a COMMENT attribute when the\n index was created.\n\nYou can also obtain information about table indexes from\nINFORMATION_SCHEMA, which contains a STATISTICS table. See\nhttp://dev.mysql.com/doc/refman/5.7/en/statistics-table.html.\n\nYou can list a table\'s indexes with the mysqlshow -k db_name tbl_name\ncommand.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/show-index.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/show-index.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (505,27,'SHOW INDEX','Syntax:\nSHOW {INDEX | INDEXES | KEYS}\n {FROM | IN} tbl_name\n [{FROM | IN} db_name]\n [WHERE expr]\n\nSHOW INDEX returns table index information. The format resembles that\nof the SQLStatistics call in ODBC. This statement requires some\nprivilege for any column in the table.\n\nmysql> SHOW INDEX FROM City\\G\n*************************** 1. row ***************************\n Table: city\n Non_unique: 0\n Key_name: PRIMARY\n Seq_in_index: 1\n Column_name: ID\n Collation: A\n Cardinality: 4188\n Sub_part: NULL\n Packed: NULL\n Null:\n Index_type: BTREE\n Comment:\nIndex_comment:\n*************************** 2. row ***************************\n Table: city\n Non_unique: 1\n Key_name: CountryCode\n Seq_in_index: 1\n Column_name: CountryCode\n Collation: A\n Cardinality: 232\n Sub_part: NULL\n Packed: NULL\n Null:\n Index_type: BTREE\n Comment:\nIndex_comment:\n\nAn alternative to tbl_name FROM db_name syntax is db_name.tbl_name.\nThese two statements are equivalent:\n\nSHOW INDEX FROM mytable FROM mydb;\nSHOW INDEX FROM mydb.mytable;\n\nThe WHERE clause can be given to select rows using more general\nconditions, as discussed in\nhttp://dev.mysql.com/doc/refman/5.7/en/extended-show.html.\n\nSHOW INDEX returns the following fields:\n\no Table\n\n The name of the table.\n\no Non_unique\n\n 0 if the index cannot contain duplicates, 1 if it can.\n\no Key_name\n\n The name of the index. If the index is the primary key, the name is\n always PRIMARY.\n\no Seq_in_index\n\n The column sequence number in the index, starting with 1.\n\no Column_name\n\n The name of the column.\n\no Collation\n\n How the column is sorted in the index. This can have values A\n (ascending) or NULL (not sorted).\n\no Cardinality\n\n An estimate of the number of unique values in the index. To update\n this number, run ANALYZE TABLE or (for MyISAM tables) myisamchk -a.\n\n Cardinality is counted based on statistics stored as integers, so the\n value is not necessarily exact even for small tables. The higher the\n cardinality, the greater the chance that MySQL uses the index when\n doing joins.\n\no Sub_part\n\n The index prefix. That is, the number of indexed characters if the\n column is only partly indexed, NULL if the entire column is indexed.\n\n *Note*:\n\n Prefix limits are measured in bytes. However, prefix lengths for\n index specifications in CREATE TABLE, ALTER TABLE, and CREATE INDEX\n statements are interpreted as number of characters for nonbinary\n string types (CHAR, VARCHAR, TEXT) and number of bytes for binary\n string types (BINARY, VARBINARY, BLOB). Take this into account when\n specifying a prefix length for a nonbinary string column that uses a\n multibyte character set.\n\n For additional information about index prefixes, see\n http://dev.mysql.com/doc/refman/5.7/en/column-indexes.html, and [HELP\n CREATE INDEX].\n\no Packed\n\n Indicates how the key is packed. NULL if it is not.\n\no Null\n\n Contains YES if the column may contain NULL values and \'\' if not.\n\no Index_type\n\n The index method used (BTREE, FULLTEXT, HASH, RTREE).\n\no Comment\n\n Information about the index not described in its own column, such as\n disabled if the index is disabled.\n\no Index_comment\n\n Any comment provided for the index with a COMMENT attribute when the\n index was created.\n\nInformation about table indexes is also available from the\nINFORMATION_SCHEMA STATISTICS table. See\nhttp://dev.mysql.com/doc/refman/5.7/en/statistics-table.html.\n\nYou can list a table\'s indexes with the mysqlshow -k db_name tbl_name\ncommand.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/show-index.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/show-index.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (506,27,'SHOW CREATE DATABASE','Syntax:\nSHOW CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name\n\nShows the CREATE DATABASE statement that creates the named database. If\nthe SHOW statement includes an IF NOT EXISTS clause, the output too\nincludes such a clause. SHOW CREATE SCHEMA is a synonym for SHOW CREATE\nDATABASE.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/show-create-database.html\n\n','mysql> SHOW CREATE DATABASE test\\G\n*************************** 1. row ***************************\n Database: test\nCreate Database: CREATE DATABASE `test`\n /*!40100 DEFAULT CHARACTER SET latin1 */\n\nmysql> SHOW CREATE SCHEMA test\\G\n*************************** 1. row ***************************\n Database: test\nCreate Database: CREATE DATABASE `test`\n /*!40100 DEFAULT CHARACTER SET latin1 */\n','http://dev.mysql.com/doc/refman/5.7/en/show-create-database.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (507,15,'!','Syntax:\nNOT, !\n\nLogical NOT. Evaluates to 1 if the operand is 0, to 0 if the operand is\nnonzero, and NOT NULL returns NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/logical-operators.html\n\n','mysql> SELECT NOT 10;\n -> 0\nmysql> SELECT NOT 0;\n -> 1\nmysql> SELECT NOT NULL;\n -> NULL\nmysql> SELECT ! (1+1);\n -> 0\nmysql> SELECT ! 1+1;\n -> 1\n','http://dev.mysql.com/doc/refman/5.7/en/logical-operators.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (508,24,'DECLARE HANDLER','Syntax:\nDECLARE handler_action HANDLER\n FOR condition_value [, condition_value] ...\n statement\n\nhandler_action:\n CONTINUE\n | EXIT\n | UNDO\n\ncondition_value:\n mysql_error_code\n | SQLSTATE [VALUE] sqlstate_value\n | condition_name\n | SQLWARNING\n | NOT FOUND\n | SQLEXCEPTION\n\nThe DECLARE ... HANDLER statement specifies a handler that deals with\none or more conditions. If one of these conditions occurs, the\nspecified statement executes. statement can be a simple statement such\nas SET var_name = value, or a compound statement written using BEGIN\nand END (see [HELP BEGIN END]).\n\nHandler declarations must appear after variable or condition\ndeclarations.\n\nThe handler_action value indicates what action the handler takes after\nexecution of the handler statement:\n\no CONTINUE: Execution of the current program continues.\n\no EXIT: Execution terminates for the BEGIN ... END compound statement\n in which the handler is declared. This is true even if the condition\n occurs in an inner block.\n\no UNDO: Not supported.\n\nThe condition_value for DECLARE ... HANDLER indicates the specific\ncondition or class of conditions that activates the handler. It can\ntake the following forms:\n\no mysql_error_code: An integer literal indicating a MySQL error code,\n such as 1051 to specify "unknown table":\n\nDECLARE CONTINUE HANDLER FOR 1051\n BEGIN\n -- body of handler\n END;\n\n Do not use MySQL error code 0 because that indicates success rather\n than an error condition. For a list of MySQL error codes, see\n http://dev.mysql.com/doc/refman/5.7/en/error-messages-server.html.\n\no SQLSTATE [VALUE] sqlstate_value: A 5-character string literal\n indicating an SQLSTATE value, such as \'42S01\' to specify "unknown\n table":\n\nDECLARE CONTINUE HANDLER FOR SQLSTATE \'42S02\'\n BEGIN\n -- body of handler\n END;\n\n Do not use SQLSTATE values that begin with \'00\' because those\n indicate success rather than an error condition. For a list of\n SQLSTATE values, see\n http://dev.mysql.com/doc/refman/5.7/en/error-messages-server.html.\n\no condition_name: A condition name previously specified with DECLARE\n ... CONDITION. A condition name can be associated with a MySQL error\n code or SQLSTATE value. See [HELP DECLARE CONDITION].\n\no SQLWARNING: Shorthand for the class of SQLSTATE values that begin\n with \'01\'.\n\nDECLARE CONTINUE HANDLER FOR SQLWARNING\n BEGIN\n -- body of handler\n END;\n\no NOT FOUND: Shorthand for the class of SQLSTATE values that begin with\n \'02\'. This is relevant within the context of cursors and is used to\n control what happens when a cursor reaches the end of a data set. If\n no more rows are available, a No Data condition occurs with SQLSTATE\n value \'02000\'. To detect this condition, you can set up a handler for\n it or for a NOT FOUND condition.\n\nDECLARE CONTINUE HANDLER FOR NOT FOUND\n BEGIN\n -- body of handler\n END;\n\n For another example, see\n http://dev.mysql.com/doc/refman/5.7/en/cursors.html. The NOT FOUND\n condition also occurs for SELECT ... INTO var_list statements that\n retrieve no rows.\n\no SQLEXCEPTION: Shorthand for the class of SQLSTATE values that do not\n begin with \'00\', \'01\', or \'02\'.\n\nDECLARE CONTINUE HANDLER FOR SQLEXCEPTION\n BEGIN\n -- body of handler\n END;\n\nFor information about how the server chooses handlers when a condition\noccurs, see http://dev.mysql.com/doc/refman/5.7/en/handler-scope.html.\n\nIf a condition occurs for which no handler has been declared, the\naction taken depends on the condition class:\n\no For SQLEXCEPTION conditions, the stored program terminates at the\n statement that raised the condition, as if there were an EXIT\n handler. If the program was called by another stored program, the\n calling program handles the condition using the handler selection\n rules applied to its own handlers.\n\no For SQLWARNING conditions, the program continues executing, as if\n there were a CONTINUE handler.\n\no For NOT FOUND conditions, if the condition was raised normally, the\n action is CONTINUE. If it was raised by SIGNAL or RESIGNAL, the\n action is EXIT.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/declare-handler.html\n\n','mysql> CREATE TABLE test.t (s1 INT, PRIMARY KEY (s1));\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> delimiter //\n\nmysql> CREATE PROCEDURE handlerdemo ()\n -> BEGIN\n -> DECLARE CONTINUE HANDLER FOR SQLSTATE \'23000\' SET @x2 = 1;\n -> SET @x = 1;\n -> INSERT INTO test.t VALUES (1);\n -> SET @x = 2;\n -> INSERT INTO test.t VALUES (1);\n -> SET @x = 3;\n -> END;\n -> //\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> CALL handlerdemo()//\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> SELECT @x//\n +------+\n | @x |\n +------+\n | 3 |\n +------+\n 1 row in set (0.00 sec)\n','http://dev.mysql.com/doc/refman/5.7/en/declare-handler.html'); @@ -593,10 +593,10 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example, INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (512,40,'TRUNCATE TABLE','Syntax:\nTRUNCATE [TABLE] tbl_name\n\nTRUNCATE TABLE empties a table completely. It requires the DROP\nprivilege.\n\nLogically, TRUNCATE TABLE is similar to a DELETE statement that deletes\nall rows, or a sequence of DROP TABLE and CREATE TABLE statements. To\nachieve high performance, it bypasses the DML method of deleting data.\nThus, it cannot be rolled back, it does not cause ON DELETE triggers to\nfire, and it cannot be performed for InnoDB tables with parent-child\nforeign key relationships.\n\nAlthough TRUNCATE TABLE is similar to DELETE, it is classified as a DDL\nstatement rather than a DML statement. It differs from DELETE in the\nfollowing ways:\n\no Truncate operations drop and re-create the table, which is much\n faster than deleting rows one by one, particularly for large tables.\n\no Truncate operations cause an implicit commit, and so cannot be rolled\n back. See\n http://dev.mysql.com/doc/refman/5.7/en/implicit-commit.html.\n\no Truncation operations cannot be performed if the session holds an\n active table lock.\n\no TRUNCATE TABLE fails for an InnoDB table or NDB table if there are\n any FOREIGN KEY constraints from other tables that reference the\n table. Foreign key constraints between columns of the same table are\n permitted.\n\no Truncation operations do not return a meaningful value for the number\n of deleted rows. The usual result is "0 rows affected," which should\n be interpreted as "no information."\n\no As long as the table format file tbl_name.frm is valid, the table can\n be re-created as an empty table with TRUNCATE TABLE, even if the data\n or index files have become corrupted.\n\no Any AUTO_INCREMENT value is reset to its start value. This is true\n even for MyISAM and InnoDB, which normally do not reuse sequence\n values.\n\no When used with partitioned tables, TRUNCATE TABLE preserves the\n partitioning; that is, the data and index files are dropped and\n re-created, while the partition definitions (.par) file is\n unaffected.\n\no The TRUNCATE TABLE statement does not invoke ON DELETE triggers.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/truncate-table.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/truncate-table.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (513,32,'CURRENT_DATE','Syntax:\nCURRENT_DATE, CURRENT_DATE()\n\nCURRENT_DATE and CURRENT_DATE() are synonyms for CURDATE().\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (514,8,'START SLAVE','Syntax:\nSTART SLAVE [thread_types] [until_option] [connection_options] [channel_option]\n\nthread_types:\n [thread_type [, thread_type] ... ]\n\nthread_type:\n IO_THREAD | SQL_THREAD\n\nuntil_option:\n UNTIL { {SQL_BEFORE_GTIDS | SQL_AFTER_GTIDS} = gtid_set\n | MASTER_LOG_FILE = \'log_name\', MASTER_LOG_POS = log_pos\n | RELAY_LOG_FILE = \'log_name\', RELAY_LOG_POS = log_pos\n | SQL_AFTER_MTS_GAPS }\n\nconnection_options:\n [USER=\'user_name\'] [PASSWORD=\'user_pass\'] [DEFAULT_AUTH=\'plugin_name\'] [PLUGIN_DIR=\'plugin_dir\']\n\n\nchannel_option:\n FOR CHANNEL channel\n\ngtid_set:\n uuid_set [, uuid_set] ...\n | \'\'\n\nuuid_set:\n uuid:interval[:interval]...\n\nuuid:\n hhhhhhhh-hhhh-hhhh-hhhh-hhhhhhhhhhhh\n\nh:\n [0-9,A-F]\n\ninterval:\n n[-n]\n\n (n >= 1)\n\nSTART SLAVE with no thread_type options starts both of the slave\nthreads. The I/O thread reads events from the master server and stores\nthem in the relay log. The SQL thread reads events from the relay log\nand executes them. START SLAVE requires the SUPER privilege.\n\nIf START SLAVE succeeds in starting the slave threads, it returns\nwithout any error. However, even in that case, it might be that the\nslave threads start and then later stop (for example, because they do\nnot manage to connect to the master or read its binary log, or some\nother problem). START SLAVE does not warn you about this. You must\ncheck the slave\'s error log for error messages generated by the slave\nthreads, or check that they are running satisfactorily with SHOW SLAVE\nSTATUS.\n\nIn MySQL 5.7, START SLAVE causes an implicit commit of an ongoing\ntransaction. See\nhttp://dev.mysql.com/doc/refman/5.7/en/implicit-commit.html.\n\ngtid_next must be set to AUTOMATIC before issuing this statement.\n\nThe optional FOR CHANNEL channel clause enables you to name which\nreplication channel the statement applies to. Providing a FOR CHANNEL\nchannel clause applies the START SLAVE statement to a specific\nreplication channel. If no clause is named and no extra channels exist,\nthe statement applies to the default channel. If a START SLAVE\nstatement does not have a channel defined when using multiple channels,\nthis statement starts the specified threads for all channels. This\nstatement is disallowed for the group_replication_recovery channel. See\nhttp://dev.mysql.com/doc/refman/5.7/en/replication-channels.html for\nmore information.\n\nMySQL supports pluggable user-password authentication with START SLAVE\nwith the USER, PASSWORD, DEFAULT_AUTH and PLUGIN_DIR options, as\ndescribed in the following list:\n\no USER: User name. Cannot be set to an empty or null string, or left\n unset if PASSWORD is used.\n\no PASSWORD: Password.\n\no DEFAULT_AUTH: Name of plugin; default is MySQL native authentication.\n\no PLUGIN_DIR: Location of plugin.\n\nYou cannot use the SQL_THREAD option when specifying any of USER,\nPASSWORD, DEFAULT_AUTH, or PLUGIN_DIR, unless the IO_THREAD option is\nalso provided.\n\nSee\nhttp://dev.mysql.com/doc/refman/5.7/en/pluggable-authentication.html,\nfor more information.\n\nIf an insecure connection is used with any these options, the server\nissues the warning Sending passwords in plain text without SSL/TLS is\nextremely insecure.\n\nSTART SLAVE ... UNTIL supports two additional options for use with\nglobal transaction identifiers (GTIDs) (see\nhttp://dev.mysql.com/doc/refman/5.7/en/replication-gtids.html). Each of\nthese takes a set of one or more global transaction identifiers\ngtid_set as an argument (see\nhttp://dev.mysql.com/doc/refman/5.7/en/replication-gtids-concepts.html#\nreplication-gtids-concepts-gtid-sets, for more information).\n\nWhen no thread_type is specified, START SLAVE UNTIL SQL_BEFORE_GTIDS\ncauses the slave SQL thread to process transactions until it has\nreached the first transaction whose GTID is listed in the gtid_set.\nSTART SLAVE UNTIL SQL_AFTER_GTIDS causes the slave threads to process\nall transactions until the last transaction in the gtid_set has been\nprocessed by both threads. In other words, START SLAVE UNTIL\nSQL_BEFORE_GTIDS causes the slave SQL thread to process all\ntransactions occurring before the first GTID in the gtid_set is\nreached, and START SLAVE UNTIL SQL_AFTER_GTIDS causes the slave threads\nto handle all transactions, including those whose GTIDs are found in\ngtid_set, until each has encountered a transaction whose GTID is not\npart of the set. SQL_BEFORE_GTIDS and SQL_AFTER_GTIDS each support the\nSQL_THREAD and IO_THREAD options, although using IO_THREAD with them\ncurrently has no effect.\n\nFor example, START SLAVE SQL_THREAD UNTIL SQL_BEFORE_GTIDS =\n3E11FA47-71CA-11E1-9E33-C80AA9429562:11-56 causes the slave SQL thread\nto process all transactions originating from the master whose\nserver_uuid is 3E11FA47-71CA-11E1-9E33-C80AA9429562 until it encounters\nthe transaction having sequence number 11; it then stops without\nprocessing this transaction. In other words, all transactions up to and\nincluding the transaction with sequence number 10 are processed.\nExecuting START SLAVE SQL_THREAD UNTIL SQL_AFTER_GTIDS =\n3E11FA47-71CA-11E1-9E33-C80AA9429562:11-56, on the other hand, would\ncause the slave SQL thread to obtain all transactions just mentioned\nfrom the master, including all of the transactions having the sequence\nnumbers 11 through 56, and then to stop without processing any\nadditional transactions; that is, the transaction having sequence\nnumber 56 would be the last transaction fetched by the slave SQL\nthread.\n\nPrior to MySQL 5.7.3, SQL_AFTER_GTIDS did not stop the slave once the\nindicated transaction was completed, but waited until another GTID\nevent was received (Bug #14767986).\n\nWhen using a multithreaded slave, there is a chance of gaps in the\nsequence of transactions that have been executed from the relay log in\nthe following cases:\n\no killing the coordinator thread\n\no after an error occurs in the worker threads\n\no mysqld shuts down unexpectedly\n\nUse the START SLAVE UNTIL SQL_AFTER_MTS_GAPS statement to cause a\nmultithreaded slave\'s worker threads to only run until no more gaps are\nfound in the relay log, and then to stop. This statement can take an\nSQL_THREAD option, but the effects of the statement remain unchanged.\nIt has no effect on the slave I/O thread (and cannot be used with the\nIO_THREAD option).\n\nIssuing START SLAVE on a multithreaded slave with gaps in the sequence\nof transactions executed from the relay log generates a warning. In\nsuch a situation, the solution is to use START SLAVE UNTIL\nSQL_AFTER_MTS_GAPS, then issue RESET SLAVE to remove any remaining\nrelay logs. See\nhttp://dev.mysql.com/doc/refman/5.7/en/replication-features-transaction\n-inconsistencies.html for more information.\n\nTo change a failed multithreaded slave to single-threaded mode, you can\nissue the following series of statements, in the order shown:\n\nSTART SLAVE UNTIL SQL_AFTER_MTS_GAPS;\n\nSET @@GLOBAL.slave_parallel_workers = 0;\n\nSTART SLAVE SQL_THREAD;\n\n*Note*:\n\nIt is possible to view the entire text of a running START SLAVE ...\nstatement, including any USER or PASSWORD values used, in the output of\nSHOW PROCESSLIST. This is also true for the text of a running CHANGE\nMASTER TO statement, including any values it employs for MASTER_USER or\nMASTER_PASSWORD.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/start-slave.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/start-slave.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (515,2,'AREA','Area(poly)\n\nST_Area() and Area() are synonyms. For more information, see the\ndescription of ST_Area().\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/gis-polygon-property-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/gis-polygon-property-functions.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (515,2,'AREA','Area({poly|mpoly})\n\nST_Area() and Area() are synonyms. For more information, see the\ndescription of ST_Area().\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/gis-polygon-property-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/gis-polygon-property-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (516,27,'SHOW WARNINGS','Syntax:\nSHOW WARNINGS [LIMIT [offset,] row_count]\nSHOW COUNT(*) WARNINGS\n\nSHOW WARNINGS is a diagnostic statement that displays information about\nthe conditions (errors, warnings, and notes) resulting from executing a\nstatement in the current session. Warnings are generated for DML\nstatements such as INSERT, UPDATE, and LOAD DATA INFILE as well as DDL\nstatements such as CREATE TABLE and ALTER TABLE.\n\nThe LIMIT clause has the same syntax as for the SELECT statement. See\nhttp://dev.mysql.com/doc/refman/5.7/en/select.html.\n\nSHOW WARNINGS is also used following EXPLAIN, to display the extended\ninformation generated by EXPLAIN. See\nhttp://dev.mysql.com/doc/refman/5.7/en/explain-extended.html.\n\nSHOW WARNINGS displays information about the conditions resulting from\nexecution of the most recent nondiagnostic statement in the current\nsession. If the most recent statement resulted in an error during\nparsing, SHOW WARNINGS shows the resulting conditions, regardless of\nstatement type (diagnostic or nondiagnostic).\n\nThe SHOW COUNT(*) WARNINGS diagnostic statement displays the total\nnumber of errors, warnings, and notes. You can also retrieve this\nnumber from the warning_count system variable:\n\nSHOW COUNT(*) WARNINGS;\nSELECT @@warning_count;\n\nA difference in these statements is that the first is a diagnostic\nstatement that does not clear the message list. The second, because it\nis a SELECT statement is considered nondiagnostic and does clear the\nmessage list.\n\nA related diagnostic statement, SHOW ERRORS, shows only error\nconditions (it excludes warnings and notes), and SHOW COUNT(*) ERRORS\nstatement displays the total number of errors. See [HELP SHOW ERRORS].\nGET DIAGNOSTICS can be used to examine information for individual\nconditions. See [HELP GET DIAGNOSTICS].\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/show-warnings.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/show-warnings.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (517,4,'ST_LINEFROMTEXT','ST_LineFromText(wkt[, srid]), ST_LineStringFromText(wkt[, srid])\n\nConstructs a LineString value using its WKT representation and SRID.\n\nIf the geometry argument is NULL or not a syntactically well-formed\ngeometry, or if the SRID argument is NULL, the return value is NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (518,10,'DROP USER','Syntax:\nDROP USER [IF EXISTS] user [, user] ...\n\nThe DROP USER statement removes one or more MySQL accounts and their\nprivileges. It removes privilege rows for the account from all grant\ntables.\n\nTo use DROP USER, you must have the global CREATE USER privilege, or\nthe DELETE privilege for the mysql database. When the read_only system\nvariable is enabled, DROP USER additionally requires the SUPER\nprivilege.\n\nAn error occurs if you try to drop an account that does not exist. If\nthe IF EXISTS clause is given, the statement produces a warning for\neach named user that does not exist, rather than an error.\n\nEach account name uses the format described in\nhttp://dev.mysql.com/doc/refman/5.7/en/account-names.html. For example:\n\nDROP USER \'jeffrey\'@\'localhost\';\n\nThe host name part of the account name, if omitted, defaults to \'%\'.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/drop-user.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/drop-user.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (518,10,'DROP USER','Syntax:\nDROP USER [IF EXISTS] user [, user] ...\n\nThe DROP USER statement removes one or more MySQL accounts and their\nprivileges. It removes privilege rows for the account from all grant\ntables.\n\nTo use DROP USER, you must have the global CREATE USER privilege, or\nthe DELETE privilege for the mysql system database. When the read_only\nsystem variable is enabled, DROP USER additionally requires the SUPER\nprivilege.\n\nAn error occurs if you try to drop an account that does not exist. If\nthe IF EXISTS clause is given, the statement produces a warning for\neach named user that does not exist, rather than an error.\n\nEach account name uses the format described in\nhttp://dev.mysql.com/doc/refman/5.7/en/account-names.html. For example:\n\nDROP USER \'jeffrey\'@\'localhost\';\n\nThe host name part of the account name, if omitted, defaults to \'%\'.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/drop-user.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/drop-user.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (519,38,'SUBSTRING','Syntax:\nSUBSTRING(str,pos), SUBSTRING(str FROM pos), SUBSTRING(str,pos,len),\nSUBSTRING(str FROM pos FOR len)\n\nThe forms without a len argument return a substring from string str\nstarting at position pos. The forms with a len argument return a\nsubstring len characters long from string str, starting at position\npos. The forms that use FROM are standard SQL syntax. It is also\npossible to use a negative value for pos. In this case, the beginning\nof the substring is pos characters from the end of the string, rather\nthan the beginning. A negative value may be used for pos in any of the\nforms of this function.\n\nFor all forms of SUBSTRING(), the position of the first character in\nthe string from which the substring is to be extracted is reckoned as\n1.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/string-functions.html\n\n','mysql> SELECT SUBSTRING(\'Quadratically\',5);\n -> \'ratically\'\nmysql> SELECT SUBSTRING(\'foobarbar\' FROM 4);\n -> \'barbar\'\nmysql> SELECT SUBSTRING(\'Quadratically\',5,6);\n -> \'ratica\'\nmysql> SELECT SUBSTRING(\'Sakila\', -3);\n -> \'ila\'\nmysql> SELECT SUBSTRING(\'Sakila\', -5, 3);\n -> \'aki\'\nmysql> SELECT SUBSTRING(\'Sakila\' FROM -4 FOR 2);\n -> \'ki\'\n','http://dev.mysql.com/doc/refman/5.7/en/string-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (520,37,'ISEMPTY','IsEmpty(g)\n\nST_IsEmpty() and IsEmpty() are synonyms. For more information, see the\ndescription of ST_IsEmpty().\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/gis-general-property-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/gis-general-property-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (521,27,'SHOW FUNCTION STATUS','Syntax:\nSHOW FUNCTION STATUS\n [LIKE \'pattern\' | WHERE expr]\n\nThis statement is similar to SHOW PROCEDURE STATUS but for stored\nfunctions. See [HELP SHOW PROCEDURE STATUS].\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/show-function-status.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/show-function-status.html'); @@ -623,7 +623,7 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example, INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (542,16,'GROUP_CONCAT','Syntax:\nGROUP_CONCAT(expr)\n\nThis function returns a string result with the concatenated non-NULL\nvalues from a group. It returns NULL if there are no non-NULL values.\nThe full syntax is as follows:\n\nGROUP_CONCAT([DISTINCT] expr [,expr ...]\n [ORDER BY {unsigned_integer | col_name | expr}\n [ASC | DESC] [,col_name ...]]\n [SEPARATOR str_val])\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html\n\n','mysql> SELECT student_name,\n GROUP_CONCAT(test_score)\n FROM student\n GROUP BY student_name;\n','http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (543,17,'BENCHMARK','Syntax:\nBENCHMARK(count,expr)\n\nThe BENCHMARK() function executes the expression expr repeatedly count\ntimes. It may be used to time how quickly MySQL processes the\nexpression. The result value is always 0. The intended use is from\nwithin the mysql client, which reports query execution times:\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/information-functions.html\n\n','mysql> SELECT BENCHMARK(1000000,AES_ENCRYPT(\'hello\',\'goodbye\'));\n+---------------------------------------------------+\n| BENCHMARK(1000000,AES_ENCRYPT(\'hello\',\'goodbye\')) |\n+---------------------------------------------------+\n| 0 |\n+---------------------------------------------------+\n1 row in set (4.74 sec)\n','http://dev.mysql.com/doc/refman/5.7/en/information-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (544,38,'FROM_BASE64','Syntax:\nFROM_BASE64(str)\n\nTakes a string encoded with the base-64 encoded rules used by\nTO_BASE64() and returns the decoded result as a binary string. The\nresult is NULL if the argument is NULL or not a valid base-64 string.\nSee the description of TO_BASE64() for details about the encoding and\ndecoding rules.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/string-functions.html\n\n','mysql> SELECT TO_BASE64(\'abc\'), FROM_BASE64(TO_BASE64(\'abc\'));\n -> \'JWJj\', \'abc\'\n','http://dev.mysql.com/doc/refman/5.7/en/string-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (545,27,'SHOW ENGINE','Syntax:\nSHOW ENGINE engine_name {STATUS | MUTEX}\n\nSHOW ENGINE displays operational information about a storage engine. It\nrequires the PROCESS privilege. The statement has these variants:\n\nSHOW ENGINE INNODB STATUS\nSHOW ENGINE INNODB MUTEX\nSHOW ENGINE PERFORMANCE_SCHEMA STATUS\n\nSHOW ENGINE INNODB STATUS displays extensive information from the\nstandard InnoDB Monitor about the state of the InnoDB storage engine.\nFor information about the standard monitor and other InnoDB Monitors\nthat provide information about InnoDB processing, see\nhttp://dev.mysql.com/doc/refman/5.7/en/innodb-monitors.html.\n\nSHOW ENGINE INNODB MUTEX displays InnoDB mutex and rw-lock statistics.\n\n*Note*:\n\nInnoDB mutexes and rwlocks can also be monitored using Performance\nSchema tables. See\nhttp://dev.mysql.com/doc/refman/5.7/en/monitor-innodb-mutex-waits-perfo\nrmance-schema.html.\n\nSHOW ENGINE INNODB MUTEX output was removed in MySQL 5.7.2. It was\nrevised and reintroduced in MySQL 5.7.8.\n\nIn MySQL 5.7.8, mutex statistics collection is configured dynamically\nusing the following options:\n\no To enable the collection of mutex statistics, run:\n\nSET GLOBAL innodb_monitor_enable=\'latch\';\n\no To reset mutex statistics, run:\n\nSET GLOBAL innodb_monitor_reset=\'latch\';\n\no To disable the collection of mutex statistics, run:\n\nSET GLOBAL innodb_monitor_disable=\'latch\';\n\nCollection of mutex statistics for SHOW ENGINE INNODB MUTEX can also be\nenabled by setting innodb_monitor_enable=\'all\', or disabled by setting\ninnodb_monitor_disable=\'all\'.\n\nSHOW ENGINE INNODB MUTEX output has the following columns:\n\no Type\n\n Always InnoDB.\n\no Name\n\n Prior to MySQL 5.7.8, the Name field reports the source file where\n the mutex is implemented, and the line number in the file where the\n mutex is created. The line number is specific to your version of\n MySQL. As of MySQL 5.7.8, only the mutex name is reported. File name\n and line number are still reported for rwlocks.\n\no Status\n\n The mutex status.\n\n Prior to MySQL 5.7.8, the Status field displays several values if\n WITH_DEBUG was defined at MySQL compilation time. If WITH_DEBUG was\n not defined, the statement displays only the os_waits value. In the\n latter case (without WITH_DEBUG), the information on which the output\n is based is insufficient to distinguish regular mutexes and mutexes\n that protect rwlocks (which permit multiple readers or a single\n writer). Consequently, the output may appear to contain multiple rows\n for the same mutex. Pre-MySQL 5.7.8 Status field values include:\n\n o count indicates how many times the mutex was requested.\n\n o spin_waits indicates how many times the spinlock had to run.\n\n o spin_rounds indicates the number of spinlock rounds. (spin_rounds\n divided by spin_waits provides the average round count.)\n\n o os_waits indicates the number of operating system waits. This\n occurs when the spinlock did not work (the mutex was not locked\n during the spinlock and it was necessary to yield to the operating\n system and wait).\n\n o os_yields indicates the number of times a thread trying to lock a\n mutex gave up its timeslice and yielded to the operating system (on\n the presumption that permitting other threads to run will free the\n mutex so that it can be locked).\n\n o os_wait_times indicates the amount of time (in ms) spent in\n operating system waits. In MySQL 5.7 timing is disabled and this\n value is always 0.\n\n As of MySQL 5.7.8, the Status field reports the number of spins,\n waits, and calls. Statistics for low-level operating system mutexes,\n which are implemented outside of InnoDB, are not reported.\n\n o spins indicates the number of spins.\n\n o waits indicates the number of mutex waits.\n\n o calls indicates how many times the mutex was requested.\n\nSHOW ENGINE INNODB MUTEX skips the mutexes and rw-locks of buffer pool\nblocks, as the amount of output can be overwhelming on systems with a\nlarge buffer pool. (There is one mutex and one rw-lock in each 16K\nbuffer pool block, and there are 65,536 blocks per gigabyte.) SHOW\nENGINE INNODB MUTEX also does not list any mutexes or rw-locks that\nhave never been waited on (os_waits=0). Thus, SHOW ENGINE INNODB MUTEX\nonly displays information about mutexes and rw-locks outside of the\nbuffer pool that have caused at least one OS-level wait.\n\nUse SHOW ENGINE PERFORMANCE_SCHEMA STATUS to inspect the internal\noperation of the Performance Schema code:\n\nmysql> SHOW ENGINE PERFORMANCE_SCHEMA STATUS\\G\n...\n*************************** 3. row ***************************\n Type: performance_schema\n Name: events_waits_history.size\nStatus: 76\n*************************** 4. row ***************************\n Type: performance_schema\n Name: events_waits_history.count\nStatus: 10000\n*************************** 5. row ***************************\n Type: performance_schema\n Name: events_waits_history.memory\nStatus: 760000\n...\n*************************** 57. row ***************************\n Type: performance_schema\n Name: performance_schema.memory\nStatus: 26459600\n...\n\nThis statement is intended to help the DBA understand the effects that\ndifferent Performance Schema options have on memory requirements.\n\nName values consist of two parts, which name an internal buffer and a\nbuffer attribute, respectively. Interpret buffer names as follows:\n\no An internal buffer that is not exposed as a table is named within\n parentheses. Examples: (pfs_cond_class).size,\n (pfs_mutex_class).memory.\n\no An internal buffer that is exposed as a table in the\n performance_schema database is named after the table, without\n parentheses. Examples: events_waits_history.size,\n mutex_instances.count.\n\no A value that applies to the Performance Schema as a whole begins with\n performance_schema. Example: performance_schema.memory.\n\nBuffer attributes have these meanings:\n\no size is the size of the internal record used by the implementation,\n such as the size of a row in a table. size values cannot be changed.\n\no count is the number of internal records, such as the number of rows\n in a table. count values can be changed using Performance Schema\n configuration options.\n\no For a table, tbl_name.memory is the product of size and count. For\n the Performance Schema as a whole, performance_schema.memory is the\n sum of all the memory used (the sum of all other memory values).\n\nIn some cases, there is a direct relationship between a Performance\nSchema configuration parameter and a SHOW ENGINE value. For example,\nevents_waits_history_long.count corresponds to\nperformance_schema_events_waits_history_long_size. In other cases, the\nrelationship is more complex. For example, events_waits_history.count\ncorresponds to performance_schema_events_waits_history_size (the number\nof rows per thread) multiplied by\nperformance_schema_max_thread_instances ( the number of threads).\n\nSHOW ENGINE NDB STATUS If the server has the NDB storage engine\nenabled, SHOW ENGINE NDB STATUS displays cluster status information\nsuch as the number of connected data nodes, the cluster connectstring,\nand cluster binary log epochs, as well as counts of various Cluster API\nobjects created by the MySQL Server when connected to the cluster.\nSample output from this statement is shown here:\n\nmysql> SHOW ENGINE NDB STATUS;\n+------------+-----------------------+--------------------------------------------------+\n| Type | Name | Status |\n+------------+-----------------------+--------------------------------------------------+\n| ndbcluster | connection | cluster_node_id=7,\n connected_host=198.51.100.103, connected_port=1186, number_of_data_nodes=4,\n number_of_ready_data_nodes=3, connect_count=0 |\n| ndbcluster | NdbTransaction | created=6, free=0, sizeof=212 |\n| ndbcluster | NdbOperation | created=8, free=8, sizeof=660 |\n| ndbcluster | NdbIndexScanOperation | created=1, free=1, sizeof=744 |\n| ndbcluster | NdbIndexOperation | created=0, free=0, sizeof=664 |\n| ndbcluster | NdbRecAttr | created=1285, free=1285, sizeof=60 |\n| ndbcluster | NdbApiSignal | created=16, free=16, sizeof=136 |\n| ndbcluster | NdbLabel | created=0, free=0, sizeof=196 |\n| ndbcluster | NdbBranch | created=0, free=0, sizeof=24 |\n| ndbcluster | NdbSubroutine | created=0, free=0, sizeof=68 |\n| ndbcluster | NdbCall | created=0, free=0, sizeof=16 |\n| ndbcluster | NdbBlob | created=1, free=1, sizeof=264 |\n| ndbcluster | NdbReceiver | created=4, free=0, sizeof=68 |\n| ndbcluster | binlog | latest_epoch=155467, latest_trans_epoch=148126,\n latest_received_binlog_epoch=0, latest_handled_binlog_epoch=0,\n latest_applied_binlog_epoch=0 |\n+------------+-----------------------+--------------------------------------------------+\n\nThe Status column in each of these rows provides information about the\nMySQL server\'s connection to the cluster and about the cluster binary\nlog\'s status, respectively. The Status information is in the form of\ncomma-delimited set of name/value pairs.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/show-engine.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/show-engine.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (545,27,'SHOW ENGINE','Syntax:\nSHOW ENGINE engine_name {STATUS | MUTEX}\n\nSHOW ENGINE displays operational information about a storage engine. It\nrequires the PROCESS privilege. The statement has these variants:\n\nSHOW ENGINE INNODB STATUS\nSHOW ENGINE INNODB MUTEX\nSHOW ENGINE PERFORMANCE_SCHEMA STATUS\n\nSHOW ENGINE INNODB STATUS displays extensive information from the\nstandard InnoDB Monitor about the state of the InnoDB storage engine.\nFor information about the standard monitor and other InnoDB Monitors\nthat provide information about InnoDB processing, see\nhttp://dev.mysql.com/doc/refman/5.7/en/innodb-monitors.html.\n\nSHOW ENGINE INNODB MUTEX displays InnoDB mutex and rw-lock statistics.\n\n*Note*:\n\nInnoDB mutexes and rwlocks can also be monitored using Performance\nSchema tables. See\nhttp://dev.mysql.com/doc/refman/5.7/en/monitor-innodb-mutex-waits-perfo\nrmance-schema.html.\n\nSHOW ENGINE INNODB MUTEX output was removed in MySQL 5.7.2. It was\nrevised and reintroduced in MySQL 5.7.8.\n\nIn MySQL 5.7.8, mutex statistics collection is configured dynamically\nusing the following options:\n\no To enable the collection of mutex statistics, run:\n\nSET GLOBAL innodb_monitor_enable=\'latch\';\n\no To reset mutex statistics, run:\n\nSET GLOBAL innodb_monitor_reset=\'latch\';\n\no To disable the collection of mutex statistics, run:\n\nSET GLOBAL innodb_monitor_disable=\'latch\';\n\nCollection of mutex statistics for SHOW ENGINE INNODB MUTEX can also be\nenabled by setting innodb_monitor_enable=\'all\', or disabled by setting\ninnodb_monitor_disable=\'all\'.\n\nSHOW ENGINE INNODB MUTEX output has these columns:\n\no Type\n\n Always InnoDB.\n\no Name\n\n Prior to MySQL 5.7.8, the Name field reports the source file where\n the mutex is implemented, and the line number in the file where the\n mutex is created. The line number is specific to your version of\n MySQL. As of MySQL 5.7.8, only the mutex name is reported. File name\n and line number are still reported for rwlocks.\n\no Status\n\n The mutex status.\n\n Prior to MySQL 5.7.8, the Status field displays several values if\n WITH_DEBUG was defined at MySQL compilation time. If WITH_DEBUG was\n not defined, the statement displays only the os_waits value. In the\n latter case (without WITH_DEBUG), the information on which the output\n is based is insufficient to distinguish regular mutexes and mutexes\n that protect rwlocks (which permit multiple readers or a single\n writer). Consequently, the output may appear to contain multiple rows\n for the same mutex. Pre-MySQL 5.7.8 Status field values include:\n\n o count indicates how many times the mutex was requested.\n\n o spin_waits indicates how many times the spinlock had to run.\n\n o spin_rounds indicates the number of spinlock rounds. (spin_rounds\n divided by spin_waits provides the average round count.)\n\n o os_waits indicates the number of operating system waits. This\n occurs when the spinlock did not work (the mutex was not locked\n during the spinlock and it was necessary to yield to the operating\n system and wait).\n\n o os_yields indicates the number of times a thread trying to lock a\n mutex gave up its timeslice and yielded to the operating system (on\n the presumption that permitting other threads to run will free the\n mutex so that it can be locked).\n\n o os_wait_times indicates the amount of time (in ms) spent in\n operating system waits. In MySQL 5.7 timing is disabled and this\n value is always 0.\n\n As of MySQL 5.7.8, the Status field reports the number of spins,\n waits, and calls. Statistics for low-level operating system mutexes,\n which are implemented outside of InnoDB, are not reported.\n\n o spins indicates the number of spins.\n\n o waits indicates the number of mutex waits.\n\n o calls indicates how many times the mutex was requested.\n\nSHOW ENGINE INNODB MUTEX skips the mutexes and rw-locks of buffer pool\nblocks, as the amount of output can be overwhelming on systems with a\nlarge buffer pool. (There is one mutex and one rw-lock in each 16K\nbuffer pool block, and there are 65,536 blocks per gigabyte.) SHOW\nENGINE INNODB MUTEX also does not list any mutexes or rw-locks that\nhave never been waited on (os_waits=0). Thus, SHOW ENGINE INNODB MUTEX\nonly displays information about mutexes and rw-locks outside of the\nbuffer pool that have caused at least one OS-level wait.\n\nUse SHOW ENGINE PERFORMANCE_SCHEMA STATUS to inspect the internal\noperation of the Performance Schema code:\n\nmysql> SHOW ENGINE PERFORMANCE_SCHEMA STATUS\\G\n...\n*************************** 3. row ***************************\n Type: performance_schema\n Name: events_waits_history.size\nStatus: 76\n*************************** 4. row ***************************\n Type: performance_schema\n Name: events_waits_history.count\nStatus: 10000\n*************************** 5. row ***************************\n Type: performance_schema\n Name: events_waits_history.memory\nStatus: 760000\n...\n*************************** 57. row ***************************\n Type: performance_schema\n Name: performance_schema.memory\nStatus: 26459600\n...\n\nThis statement is intended to help the DBA understand the effects that\ndifferent Performance Schema options have on memory requirements.\n\nName values consist of two parts, which name an internal buffer and a\nbuffer attribute, respectively. Interpret buffer names as follows:\n\no An internal buffer that is not exposed as a table is named within\n parentheses. Examples: (pfs_cond_class).size,\n (pfs_mutex_class).memory.\n\no An internal buffer that is exposed as a table in the\n performance_schema database is named after the table, without\n parentheses. Examples: events_waits_history.size,\n mutex_instances.count.\n\no A value that applies to the Performance Schema as a whole begins with\n performance_schema. Example: performance_schema.memory.\n\nBuffer attributes have these meanings:\n\no size is the size of the internal record used by the implementation,\n such as the size of a row in a table. size values cannot be changed.\n\no count is the number of internal records, such as the number of rows\n in a table. count values can be changed using Performance Schema\n configuration options.\n\no For a table, tbl_name.memory is the product of size and count. For\n the Performance Schema as a whole, performance_schema.memory is the\n sum of all the memory used (the sum of all other memory values).\n\nIn some cases, there is a direct relationship between a Performance\nSchema configuration parameter and a SHOW ENGINE value. For example,\nevents_waits_history_long.count corresponds to\nperformance_schema_events_waits_history_long_size. In other cases, the\nrelationship is more complex. For example, events_waits_history.count\ncorresponds to performance_schema_events_waits_history_size (the number\nof rows per thread) multiplied by\nperformance_schema_max_thread_instances ( the number of threads).\n\nSHOW ENGINE NDB STATUS If the server has the NDB storage engine\nenabled, SHOW ENGINE NDB STATUS displays cluster status information\nsuch as the number of connected data nodes, the cluster connectstring,\nand cluster binary log epochs, as well as counts of various Cluster API\nobjects created by the MySQL Server when connected to the cluster.\nSample output from this statement is shown here:\n\nmysql> SHOW ENGINE NDB STATUS;\n+------------+-----------------------+--------------------------------------------------+\n| Type | Name | Status |\n+------------+-----------------------+--------------------------------------------------+\n| ndbcluster | connection | cluster_node_id=7,\n connected_host=198.51.100.103, connected_port=1186, number_of_data_nodes=4,\n number_of_ready_data_nodes=3, connect_count=0 |\n| ndbcluster | NdbTransaction | created=6, free=0, sizeof=212 |\n| ndbcluster | NdbOperation | created=8, free=8, sizeof=660 |\n| ndbcluster | NdbIndexScanOperation | created=1, free=1, sizeof=744 |\n| ndbcluster | NdbIndexOperation | created=0, free=0, sizeof=664 |\n| ndbcluster | NdbRecAttr | created=1285, free=1285, sizeof=60 |\n| ndbcluster | NdbApiSignal | created=16, free=16, sizeof=136 |\n| ndbcluster | NdbLabel | created=0, free=0, sizeof=196 |\n| ndbcluster | NdbBranch | created=0, free=0, sizeof=24 |\n| ndbcluster | NdbSubroutine | created=0, free=0, sizeof=68 |\n| ndbcluster | NdbCall | created=0, free=0, sizeof=16 |\n| ndbcluster | NdbBlob | created=1, free=1, sizeof=264 |\n| ndbcluster | NdbReceiver | created=4, free=0, sizeof=68 |\n| ndbcluster | binlog | latest_epoch=155467, latest_trans_epoch=148126,\n latest_received_binlog_epoch=0, latest_handled_binlog_epoch=0,\n latest_applied_binlog_epoch=0 |\n+------------+-----------------------+--------------------------------------------------+\n\nThe Status column in each of these rows provides information about the\nMySQL server\'s connection to the cluster and about the cluster binary\nlog\'s status, respectively. The Status information is in the form of\ncomma-delimited set of name/value pairs.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/show-engine.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/show-engine.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (546,14,'NAME_CONST','Syntax:\nNAME_CONST(name,value)\n\nReturns the given value. When used to produce a result set column,\nNAME_CONST() causes the column to have the given name. The arguments\nshould be constants.\n\nmysql> SELECT NAME_CONST(\'myname\', 14);\n+--------+\n| myname |\n+--------+\n| 14 |\n+--------+\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (547,14,'RELEASE_LOCK','Syntax:\nRELEASE_LOCK(str)\n\nReleases the lock named by the string str that was obtained with\nGET_LOCK(). Returns 1 if the lock was released, 0 if the lock was not\nestablished by this thread (in which case the lock is not released),\nand NULL if the named lock did not exist. The lock does not exist if it\nwas never obtained by a call to GET_LOCK() or if it has previously been\nreleased.\n\nThe DO statement is convenient to use with RELEASE_LOCK(). See [HELP\nDO].\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (548,32,'WEEKDAY','Syntax:\nWEEKDAY(date)\n\nReturns the weekday index for date (0 = Monday, 1 = Tuesday, ... 6 =\nSunday).\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html\n\n','mysql> SELECT WEEKDAY(\'2008-02-03 22:23:00\');\n -> 6\nmysql> SELECT WEEKDAY(\'2007-11-06\');\n -> 1\n','http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html'); @@ -643,7 +643,7 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example, INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (562,14,'IS_USED_LOCK','Syntax:\nIS_USED_LOCK(str)\n\nChecks whether the lock named str is in use (that is, locked). If so,\nit returns the connection identifier of the client session that holds\nthe lock. Otherwise, it returns NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (563,4,'POLYFROMTEXT','PolyFromText(wkt[, srid]), PolygonFromText(wkt[, srid])\n\nST_PolyFromText(), ST_PolygonFromText(), PolyFromText(), and\nPolygonFromText() are synonyms. For more information, see the\ndescription of ST_PolyFromText().\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (564,37,'ST_SRID','ST_SRID(g)\n\nReturns an integer indicating the spatial reference system ID\nassociated with the geometry value g, or NULL if the argument is NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/gis-general-property-functions.html\n\n','mysql> SELECT ST_SRID(ST_GeomFromText(\'LineString(1 1,2 2)\',101));\n+-----------------------------------------------------+\n| ST_SRID(ST_GeomFromText(\'LineString(1 1,2 2)\',101)) |\n+-----------------------------------------------------+\n| 101 |\n+-----------------------------------------------------+\n','http://dev.mysql.com/doc/refman/5.7/en/gis-general-property-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (565,10,'ALTER USER','Syntax:\nALTER USER [IF EXISTS]\n user [auth_option] [, user [auth_option]] ...\n [REQUIRE {NONE | tls_option [[AND] tls_option] ...}]\n [WITH resource_option [resource_option] ...]\n [password_option | lock_option] ...\n\nALTER USER [IF EXISTS]\n USER() IDENTIFIED BY \'auth_string\'\n\nuser:\n (see )\n\nauth_option: {\n IDENTIFIED BY \'auth_string\'\n | IDENTIFIED WITH auth_plugin\n | IDENTIFIED WITH auth_plugin BY \'auth_string\'\n | IDENTIFIED WITH auth_plugin AS \'hash_string\'\n}\n\ntls_option: {\n SSL\n | X509\n | CIPHER \'cipher\'\n | ISSUER \'issuer\'\n | SUBJECT \'subject\'\n}\n\nresource_option: {\n MAX_QUERIES_PER_HOUR count\n | MAX_UPDATES_PER_HOUR count\n | MAX_CONNECTIONS_PER_HOUR count\n | MAX_USER_CONNECTIONS count\n}\n\npassword_option: {\n PASSWORD EXPIRE\n | PASSWORD EXPIRE DEFAULT\n | PASSWORD EXPIRE NEVER\n | PASSWORD EXPIRE INTERVAL N DAY\n}\n\nlock_option: {\n ACCOUNT LOCK\n | ACCOUNT UNLOCK\n}\n\nThe ALTER USER statement modifies MySQL accounts. It enables\nauthentication, SSL/TLS, resource-limit, and password-management\nproperties to be modified for existing accounts, and enables account\nlocking and unlocking.\n\nTo use ALTER USER, you must have the global CREATE USER privilege or\nthe UPDATE privilege for the mysql database. When the read_only system\nvariable is enabled, ALTER USER additionally requires the SUPER\nprivilege.\n\nBy default, an error occurs if you try to modify a user that does not\nexist. If the IF EXISTS clause is given, the statement produces a\nwarning for each named user that does not exist, rather than an error.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/alter-user.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/alter-user.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (565,10,'ALTER USER','Syntax:\nALTER USER [IF EXISTS]\n user [auth_option] [, user [auth_option]] ...\n [REQUIRE {NONE | tls_option [[AND] tls_option] ...}]\n [WITH resource_option [resource_option] ...]\n [password_option | lock_option] ...\n\nALTER USER [IF EXISTS]\n USER() IDENTIFIED BY \'auth_string\'\n\nuser:\n (see )\n\nauth_option: {\n IDENTIFIED BY \'auth_string\'\n | IDENTIFIED WITH auth_plugin\n | IDENTIFIED WITH auth_plugin BY \'auth_string\'\n | IDENTIFIED WITH auth_plugin AS \'hash_string\'\n}\n\ntls_option: {\n SSL\n | X509\n | CIPHER \'cipher\'\n | ISSUER \'issuer\'\n | SUBJECT \'subject\'\n}\n\nresource_option: {\n MAX_QUERIES_PER_HOUR count\n | MAX_UPDATES_PER_HOUR count\n | MAX_CONNECTIONS_PER_HOUR count\n | MAX_USER_CONNECTIONS count\n}\n\npassword_option: {\n PASSWORD EXPIRE\n | PASSWORD EXPIRE DEFAULT\n | PASSWORD EXPIRE NEVER\n | PASSWORD EXPIRE INTERVAL N DAY\n}\n\nlock_option: {\n ACCOUNT LOCK\n | ACCOUNT UNLOCK\n}\n\nThe ALTER USER statement modifies MySQL accounts. It enables\nauthentication, SSL/TLS, resource-limit, and password-management\nproperties to be modified for existing accounts, and enables account\nlocking and unlocking.\n\nTo use ALTER USER, you must have the global CREATE USER privilege or\nthe UPDATE privilege for the mysql system database. When the read_only\nsystem variable is enabled, ALTER USER additionally requires the SUPER\nprivilege.\n\nBy default, an error occurs if you try to modify a user that does not\nexist. If the IF EXISTS clause is given, the statement produces a\nwarning for each named user that does not exist, rather than an error.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/alter-user.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/alter-user.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (566,12,'DES_ENCRYPT','Syntax:\nDES_ENCRYPT(str[,{key_num|key_str}])\n\nEncrypts the string with the given key using the Triple-DES algorithm.\n\nThis function works only if MySQL has been configured with SSL support.\nSee http://dev.mysql.com/doc/refman/5.7/en/encrypted-connections.html.\n\nThe encryption key to use is chosen based on the second argument to\nDES_ENCRYPT(), if one was given. With no argument, the first key from\nthe DES key file is used. With a key_num argument, the given key number\n(0 to 9) from the DES key file is used. With a key_str argument, the\ngiven key string is used to encrypt str.\n\nThe key file can be specified with the --des-key-file server option.\n\nThe return string is a binary string where the first character is\nCHAR(128 | key_num). If an error occurs, DES_ENCRYPT() returns NULL.\n\nThe 128 is added to make it easier to recognize an encrypted key. If\nyou use a string key, key_num is 127.\n\nThe string length for the result is given by this formula:\n\nnew_len = orig_len + (8 - (orig_len % 8)) + 1\n\nEach line in the DES key file has the following format:\n\nkey_num des_key_str\n\nEach key_num value must be a number in the range from 0 to 9. Lines in\nthe file may be in any order. des_key_str is the string that is used to\nencrypt the message. There should be at least one space between the\nnumber and the key. The first key is the default key that is used if\nyou do not specify any key argument to DES_ENCRYPT().\n\nYou can tell MySQL to read new key values from the key file with the\nFLUSH DES_KEY_FILE statement. This requires the RELOAD privilege.\n\nOne benefit of having a set of default keys is that it gives\napplications a way to check for the existence of encrypted column\nvalues, without giving the end user the right to decrypt those values.\n\n*Note*:\n\nThe DES_ENCRYPT() and DES_DECRYPT() functions are deprecated as of\nMySQL 5.7.6, will be removed in a future MySQL release, and should no\nlonger be used. Consider using AES_ENCRYPT() and AES_DECRYPT() instead.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html\n\n','mysql> SELECT customer_address FROM customer_table \n > WHERE crypted_credit_card = DES_ENCRYPT(\'credit_card_number\');\n','http://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (567,3,'CEIL','Syntax:\nCEIL(X)\n\nCEIL() is a synonym for CEILING().\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (568,7,'WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS','Syntax:\nWAIT_UNTIL_SQL_THREAD_AFTER_GTIDS(gtid_set[, timeout][,channel])\n\nWAIT_UNTIL_SQL_THREAD_AFTER_GTIDS() is similar to\nWAIT_FOR_EXECUTED_GTID_SET() in that it waits until all of the\ntransactions whose global transaction identifiers are contained in\ngtid_set have been applied, or until timeout seconds have elapsed,\nwhichever occurs first. However, WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS()\napplies to a specific replication channel, and stops only after the\ntransactions have been applied on the specified channel, for which the\napplier must be running. In contrast, WAIT_FOR_EXECUTED_GTID_SET()\nstops after the transactions have been applied, regardless of where\nthey were applied (on any replication channel or any user client), and\nwhether or not any replication channels are running.\n\nThe channel option names which replication channel the function applies\nto. If no channel is named and no channels other than the default\nreplication channel exist, the function applies to the default\nreplication channel. If multiple replication channels exist, you must\nspecify a channel as otherwise it is not known which replication\nchannel the function applies to. See\nhttp://dev.mysql.com/doc/refman/5.7/en/replication-channels.html for\nmore information on replication channels.\n\n*Note*:\n\nBecause WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS() applies to a specific\nreplication channel, if an expected transaction arrives on a different\nreplication channel or from a user client, for example in a failover or\nmanual recovery situation, the function can hang indefinitely if no\ntimeout is set. Use WAIT_FOR_EXECUTED_GTID_SET() instead to ensure\ncorrect handling of transactions in these situations.\n\nGTID sets used with WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS() are represented\nas strings and must be quoted in the same way as for\nWAIT_FOR_EXECUTED_GTID_SET(). For WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS(),\nthe return value for the function is an arbitrary positive number. If\nGTID-based replication is not active (that is, if the value of the\ngtid_mode variable is OFF), then this value is undefined and\nWAIT_UNTIL_SQL_THREAD_AFTER_GTIDS() returns NULL. If the slave is not\nrunning then the function also returns NULL.\n\ngtid_mode cannot be changed to OFF while any client is using this\nfunction to wait for GTIDs to be applied.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/gtid-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/gtid-functions.html'); @@ -660,12 +660,12 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example, INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (579,40,'DROP PROCEDURE','Syntax:\nDROP {PROCEDURE | FUNCTION} [IF EXISTS] sp_name\n\nThis statement is used to drop a stored procedure or function. That is,\nthe specified routine is removed from the server. You must have the\nALTER ROUTINE privilege for the routine. (If the\nautomatic_sp_privileges system variable is enabled, that privilege and\nEXECUTE are granted automatically to the routine creator when the\nroutine is created and dropped from the creator when the routine is\ndropped. See\nhttp://dev.mysql.com/doc/refman/5.7/en/stored-routines-privileges.html.\n)\n\nThe IF EXISTS clause is a MySQL extension. It prevents an error from\noccurring if the procedure or function does not exist. A warning is\nproduced that can be viewed with SHOW WARNINGS.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/drop-procedure.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/drop-procedure.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (580,7,'ST_LATFROMGEOHASH','ST_LatFromGeoHash(geohash_str)\n\nReturns the latitude from a geohash string value, as a DOUBLE value in\nthe range [−90, 90].\n\nIf the argument is NULL, the return value is NULL. If the argument is\ninvalid, an error occurs.\n\nThe ST_LatFromGeoHash() decoding function reads no more than 433\ncharacters from the geohash_str argument. That represents the upper\nlimit on information in the internal representation of coordinate\nvalues. Characters past the 433rd are ignored, even if they are\notherwise illegal and produce an error.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/spatial-geohash-functions.html\n\n','mysql> SELECT ST_LatFromGeoHash(ST_GeoHash(45,-20,10));\n+------------------------------------------+\n| ST_LatFromGeoHash(ST_GeoHash(45,-20,10)) |\n+------------------------------------------+\n| -20 |\n+------------------------------------------+\n','http://dev.mysql.com/doc/refman/5.7/en/spatial-geohash-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (581,7,'ST_GEOMFROMGEOJSON','ST_GeomFromGeoJSON(str [, options [, srid]])\n\nParses a string str representing a GeoJSON object and returns a\ngeometry.\n\nIf any argument is NULL, the return value is NULL. If any non-NULL\nargument is invalid, an error occurs.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/spatial-geojson-functions.html\n\n','mysql> SET @json = \'{ "type": "Point", "coordinates": [102.0, 0.0]}\';\nmysql> SELECT ST_AsText(ST_GeomFromGeoJSON(@json));\n+--------------------------------------+\n| ST_AsText(ST_GeomFromGeoJSON(@json)) |\n+--------------------------------------+\n| POINT(102 0) |\n+--------------------------------------+\n','http://dev.mysql.com/doc/refman/5.7/en/spatial-geojson-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (582,5,'INSTALL PLUGIN','Syntax:\nINSTALL PLUGIN plugin_name SONAME \'shared_library_name\'\n\nThis statement installs a server plugin. It requires the INSERT\nprivilege for the mysql.plugin system table.\n\nplugin_name is the name of the plugin as defined in the plugin\ndescriptor structure contained in the library file (see\nhttp://dev.mysql.com/doc/refman/5.7/en/plugin-data-structures.html).\nPlugin names are not case-sensitive. For maximal compatibility, plugin\nnames should be limited to ASCII letters, digits, and underscore\nbecause they are used in C source files, shell command lines, M4 and\nBourne shell scripts, and SQL environments.\n\nshared_library_name is the name of the shared library that contains the\nplugin code. The name includes the file name extension (for example,\nlibmyplugin.so, libmyplugin.dll, or libmyplugin.dylib).\n\nThe shared library must be located in the plugin directory (the\ndirectory named by the plugin_dir system variable). The library must be\nin the plugin directory itself, not in a subdirectory. By default,\nplugin_dir is the plugin directory under the directory named by the\npkglibdir configuration variable, but it can be changed by setting the\nvalue of plugin_dir at server startup. For example, set its value in a\nmy.cnf file:\n\n[mysqld]\nplugin_dir=/path/to/plugin/directory\n\nIf the value of plugin_dir is a relative path name, it is taken to be\nrelative to the MySQL base directory (the value of the basedir system\nvariable).\n\nINSTALL PLUGIN loads and initializes the plugin code to make the plugin\navailable for use. A plugin is initialized by executing its\ninitialization function, which handles any setup that the plugin must\nperform before it can be used. When the server shuts down, it executes\nthe deinitialization function for each plugin that is loaded so that\nthe plugin has a chance to perform any final cleanup.\n\nINSTALL PLUGIN also registers the plugin by adding a line that\nindicates the plugin name and library file name to the mysql.plugin\ntable. At server startup, the server loads and initializes any plugin\nthat is listed in the mysql.plugin table. This means that a plugin is\ninstalled with INSTALL PLUGIN only once, not every time the server\nstarts. Plugin loading at startup does not occur if the server is\nstarted with the --skip-grant-tables option.\n\nA plugin library can contain multiple plugins. For each of them to be\ninstalled, use a separate INSTALL PLUGIN statement. Each statement\nnames a different plugin, but all of them specify the same library\nname.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/install-plugin.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/install-plugin.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (582,5,'INSTALL PLUGIN','Syntax:\nINSTALL PLUGIN plugin_name SONAME \'shared_library_name\'\n\nThis statement installs a server plugin. It requires the INSERT\nprivilege for the mysql.plugin system table.\n\nplugin_name is the name of the plugin as defined in the plugin\ndescriptor structure contained in the library file (see\nhttp://dev.mysql.com/doc/refman/5.7/en/plugin-data-structures.html).\nPlugin names are not case-sensitive. For maximal compatibility, plugin\nnames should be limited to ASCII letters, digits, and underscore\nbecause they are used in C source files, shell command lines, M4 and\nBourne shell scripts, and SQL environments.\n\nshared_library_name is the name of the shared library that contains the\nplugin code. The name includes the file name extension (for example,\nlibmyplugin.so, libmyplugin.dll, or libmyplugin.dylib).\n\nThe shared library must be located in the plugin directory (the\ndirectory named by the plugin_dir system variable). The library must be\nin the plugin directory itself, not in a subdirectory. By default,\nplugin_dir is the plugin directory under the directory named by the\npkglibdir configuration variable, but it can be changed by setting the\nvalue of plugin_dir at server startup. For example, set its value in a\nmy.cnf file:\n\n[mysqld]\nplugin_dir=/path/to/plugin/directory\n\nIf the value of plugin_dir is a relative path name, it is taken to be\nrelative to the MySQL base directory (the value of the basedir system\nvariable).\n\nINSTALL PLUGIN loads and initializes the plugin code to make the plugin\navailable for use. A plugin is initialized by executing its\ninitialization function, which handles any setup that the plugin must\nperform before it can be used. When the server shuts down, it executes\nthe deinitialization function for each plugin that is loaded so that\nthe plugin has a chance to perform any final cleanup.\n\nINSTALL PLUGIN also registers the plugin by adding a line that\nindicates the plugin name and library file name to the mysql.plugin\nsystem table. At server startup, the server loads and initializes any\nplugin that is listed in mysql.plugin. This means that a plugin is\ninstalled with INSTALL PLUGIN only once, not every time the server\nstarts. Plugin loading at startup does not occur if the server is\nstarted with the --skip-grant-tables option.\n\nA plugin library can contain multiple plugins. For each of them to be\ninstalled, use a separate INSTALL PLUGIN statement. Each statement\nnames a different plugin, but all of them specify the same library\nname.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/install-plugin.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/install-plugin.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (583,24,'DECLARE CURSOR','Syntax:\nDECLARE cursor_name CURSOR FOR select_statement\n\nThis statement declares a cursor and associates it with a SELECT\nstatement that retrieves the rows to be traversed by the cursor. To\nfetch the rows later, use a FETCH statement. The number of columns\nretrieved by the SELECT statement must match the number of output\nvariables specified in the FETCH statement.\n\nThe SELECT statement cannot have an INTO clause.\n\nCursor declarations must appear before handler declarations and after\nvariable and condition declarations.\n\nA stored program may contain multiple cursor declarations, but each\ncursor declared in a given block must have a unique name. For an\nexample, see http://dev.mysql.com/doc/refman/5.7/en/cursors.html.\n\nFor information available through SHOW statements, it is possible in\nmany cases to obtain equivalent information by using a cursor with an\nINFORMATION_SCHEMA table.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/declare-cursor.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/declare-cursor.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (584,28,'LOAD DATA','Syntax:\nLOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE \'file_name\'\n [REPLACE | IGNORE]\n INTO TABLE tbl_name\n [PARTITION (partition_name [, partition_name] ...)]\n [CHARACTER SET charset_name]\n [{FIELDS | COLUMNS}\n [TERMINATED BY \'string\']\n [[OPTIONALLY] ENCLOSED BY \'char\']\n [ESCAPED BY \'char\']\n ]\n [LINES\n [STARTING BY \'string\']\n [TERMINATED BY \'string\']\n ]\n [IGNORE number {LINES | ROWS}]\n [(col_name_or_user_var\n [, col_name_or_user_var] ...)]\n [SET col_name={expr | DEFAULT},\n [, col_name={expr | DEFAULT}] ...]\n\nThe LOAD DATA INFILE statement reads rows from a text file into a table\nat a very high speed. LOAD DATA INFILE is the complement of SELECT ...\nINTO OUTFILE. (See\nhttp://dev.mysql.com/doc/refman/5.7/en/select-into.html.) To write data\nfrom a table to a file, use SELECT ... INTO OUTFILE. To read the file\nback into a table, use LOAD DATA INFILE. The syntax of the FIELDS and\nLINES clauses is the same for both statements. Both clauses are\noptional, but FIELDS must precede LINES if both are specified.\n\nYou can also load data files by using the mysqlimport utility; it\noperates by sending a LOAD DATA INFILE statement to the server. The\n--local option causes mysqlimport to read data files from the client\nhost. You can specify the --compress option to get better performance\nover slow networks if the client and server support the compressed\nprotocol. See http://dev.mysql.com/doc/refman/5.7/en/mysqlimport.html.\n\nFor more information about the efficiency of INSERT versus LOAD DATA\nINFILE and speeding up LOAD DATA INFILE, see\nhttp://dev.mysql.com/doc/refman/5.7/en/insert-optimization.html.\n\nThe file name must be given as a literal string. On Windows, specify\nbackslashes in path names as forward slashes or doubled backslashes.\nThe character_set_filesystem system variable controls the\ninterpretation of the file name.\n\nLOAD DATA supports explicit partition selection using the PARTITION\noption with a list of one or more comma-separated names of partitions,\nsubpartitions, or both. When this option is used, if any rows from the\nfile cannot be inserted into any of the partitions or subpartitions\nnamed in the list, the statement fails with the error Found a row not\nmatching the given partition set. For more information and examples,\nsee http://dev.mysql.com/doc/refman/5.7/en/partitioning-selection.html.\n\nFor partitioned tables using storage engines that employ table locks,\nsuch as MyISAM, LOAD DATA cannot prune any partition locks. This does\nnot apply to tables using storage engines which employ row-level\nlocking, such as InnoDB. For more information, see\nhttp://dev.mysql.com/doc/refman/5.7/en/partitioning-limitations-locking\n.html.\n\nThe server uses the character set indicated by the\ncharacter_set_database system variable to interpret the information in\nthe file. SET NAMES and the setting of character_set_client do not\naffect interpretation of input. If the contents of the input file use a\ncharacter set that differs from the default, it is usually preferable\nto specify the character set of the file by using the CHARACTER SET\nclause. A character set of binary specifies "no conversion."\n\nLOAD DATA INFILE interprets all fields in the file as having the same\ncharacter set, regardless of the data types of the columns into which\nfield values are loaded. For proper interpretation of file contents,\nyou must ensure that it was written with the correct character set. For\nexample, if you write a data file with mysqldump -T or by issuing a\nSELECT ... INTO OUTFILE statement in mysql, be sure to use a\n--default-character-set option so that output is written in the\ncharacter set to be used when the file is loaded with LOAD DATA INFILE.\n\n*Note*:\n\nIt is not possible to load data files that use the ucs2, utf16,\nutf16le, or utf32 character set.\n\nIf you use LOW_PRIORITY, execution of the LOAD DATA statement is\ndelayed until no other clients are reading from the table. This affects\nonly storage engines that use only table-level locking (such as MyISAM,\nMEMORY, and MERGE).\n\nIf you specify CONCURRENT with a MyISAM table that satisfies the\ncondition for concurrent inserts (that is, it contains no free blocks\nin the middle), other threads can retrieve data from the table while\nLOAD DATA is executing. This option affects the performance of LOAD\nDATA a bit, even if no other thread is using the table at the same\ntime.\n\nWith row-based replication, CONCURRENT is replicated regardless of\nMySQL version. With statement-based replication CONCURRENT is not\nreplicated prior to MySQL 5.5.1 (see Bug #34628). For more information,\nsee\nhttp://dev.mysql.com/doc/refman/5.7/en/replication-features-load-data.h\ntml.\n\nThe LOCAL keyword affects expected location of the file and error\nhandling, as described later. LOCAL works only if your server and your\nclient both have been configured to permit it. For example, if mysqld\nwas started with the local_infile system variable disabled, LOCAL does\nnot work. See\nhttp://dev.mysql.com/doc/refman/5.7/en/load-data-local.html.\n\nThe LOCAL keyword affects where the file is expected to be found:\n\no If LOCAL is specified, the file is read by the client program on the\n client host and sent to the server. The file can be given as a full\n path name to specify its exact location. If given as a relative path\n name, the name is interpreted relative to the directory in which the\n client program was started.\n\n When using LOCAL with LOAD DATA, a copy of the file is created in the\n server\'s temporary directory. This is not the directory determined by\n the value of tmpdir or slave_load_tmpdir, but rather the operating\n system\'s temporary directory, and is not configurable in the MySQL\n Server. (Typically the system temporary directory is /tmp on Linux\n systems and C:\\WINDOWS\\TEMP on Windows.) Lack of sufficient space for\n the copy in this directory can cause the LOAD DATA LOCAL statement to\n fail.\n\no If LOCAL is not specified, the file must be located on the server\n host and is read directly by the server. The server uses the\n following rules to locate the file:\n\n o If the file name is an absolute path name, the server uses it as\n given.\n\n o If the file name is a relative path name with one or more leading\n components, the server searches for the file relative to the\n server\'s data directory.\n\n o If a file name with no leading components is given, the server\n looks for the file in the database directory of the default\n database.\n\nIn the non-LOCAL case, these rules mean that a file named as\n./myfile.txt is read from the server\'s data directory, whereas the file\nnamed as myfile.txt is read from the database directory of the default\ndatabase. For example, if db1 is the default database, the following\nLOAD DATA statement reads the file data.txt from the database directory\nfor db1, even though the statement explicitly loads the file into a\ntable in the db2 database:\n\nLOAD DATA INFILE \'data.txt\' INTO TABLE db2.my_table;\n\nNon-LOCAL load operations read text files located on the server. For\nsecurity reasons, such operations require that you have the FILE\nprivilege. See\nhttp://dev.mysql.com/doc/refman/5.7/en/privileges-provided.html. Also,\nnon-LOCAL load operations are subject to the secure_file_priv system\nvariable setting. If the variable value is a nonempty directory name,\nthe file to be loaded must be located in that directory. If the\nvariable value is empty (which is insecure), the file need only be\nreadable by the server.\n\nUsing LOCAL is a bit slower than letting the server access the files\ndirectly, because the contents of the file must be sent over the\nconnection by the client to the server. On the other hand, you do not\nneed the FILE privilege to load local files.\n\nLOCAL also affects error handling:\n\no With LOAD DATA INFILE, data-interpretation and duplicate-key errors\n terminate the operation.\n\no With LOAD DATA LOCAL INFILE, data-interpretation and duplicate-key\n errors become warnings and the operation continues because the server\n has no way to stop transmission of the file in the middle of the\n operation. For duplicate-key errors, this is the same as if IGNORE is\n specified. IGNORE is explained further later in this section.\n\nThe REPLACE and IGNORE keywords control handling of input rows that\nduplicate existing rows on unique key values:\n\no If you specify REPLACE, input rows replace existing rows. In other\n words, rows that have the same value for a primary key or unique\n index as an existing row. See [HELP REPLACE].\n\no If you specify IGNORE, rows that duplicate an existing row on a\n unique key value are discarded. For more information, see\n http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#ignore-strict-co\n mparison.\n\no If you do not specify either option, the behavior depends on whether\n the LOCAL keyword is specified. Without LOCAL, an error occurs when a\n duplicate key value is found, and the rest of the text file is\n ignored. With LOCAL, the default behavior is the same as if IGNORE is\n specified; this is because the server has no way to stop transmission\n of the file in the middle of the operation.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/load-data.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/load-data.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (584,28,'LOAD DATA','Syntax:\nLOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE \'file_name\'\n [REPLACE | IGNORE]\n INTO TABLE tbl_name\n [PARTITION (partition_name [, partition_name] ...)]\n [CHARACTER SET charset_name]\n [{FIELDS | COLUMNS}\n [TERMINATED BY \'string\']\n [[OPTIONALLY] ENCLOSED BY \'char\']\n [ESCAPED BY \'char\']\n ]\n [LINES\n [STARTING BY \'string\']\n [TERMINATED BY \'string\']\n ]\n [IGNORE number {LINES | ROWS}]\n [(col_name_or_user_var\n [, col_name_or_user_var] ...)]\n [SET col_name={expr | DEFAULT},\n [, col_name={expr | DEFAULT}] ...]\n\nThe LOAD DATA INFILE statement reads rows from a text file into a table\nat a very high speed. LOAD DATA INFILE is the complement of SELECT ...\nINTO OUTFILE. (See\nhttp://dev.mysql.com/doc/refman/5.7/en/select-into.html.) To write data\nfrom a table to a file, use SELECT ... INTO OUTFILE. To read the file\nback into a table, use LOAD DATA INFILE. The syntax of the FIELDS and\nLINES clauses is the same for both statements. Both clauses are\noptional, but FIELDS must precede LINES if both are specified.\n\nYou can also load data files by using the mysqlimport utility; it\noperates by sending a LOAD DATA INFILE statement to the server. The\n--local option causes mysqlimport to read data files from the client\nhost. You can specify the --compress option to get better performance\nover slow networks if the client and server support the compressed\nprotocol. See http://dev.mysql.com/doc/refman/5.7/en/mysqlimport.html.\n\nFor more information about the efficiency of INSERT versus LOAD DATA\nINFILE and speeding up LOAD DATA INFILE, see\nhttp://dev.mysql.com/doc/refman/5.7/en/insert-optimization.html.\n\nThe file name must be given as a literal string. On Windows, specify\nbackslashes in path names as forward slashes or doubled backslashes.\nThe character_set_filesystem system variable controls the\ninterpretation of the file name.\n\nLOAD DATA supports explicit partition selection using the PARTITION\noption with a list of one or more comma-separated names of partitions,\nsubpartitions, or both. When this option is used, if any rows from the\nfile cannot be inserted into any of the partitions or subpartitions\nnamed in the list, the statement fails with the error Found a row not\nmatching the given partition set. For more information and examples,\nsee http://dev.mysql.com/doc/refman/5.7/en/partitioning-selection.html.\n\nFor partitioned tables using storage engines that employ table locks,\nsuch as MyISAM, LOAD DATA cannot prune any partition locks. This does\nnot apply to tables using storage engines which employ row-level\nlocking, such as InnoDB. For more information, see\nhttp://dev.mysql.com/doc/refman/5.7/en/partitioning-limitations-locking\n.html.\n\nThe server uses the character set indicated by the\ncharacter_set_database system variable to interpret the information in\nthe file. SET NAMES and the setting of character_set_client do not\naffect interpretation of input. If the contents of the input file use a\ncharacter set that differs from the default, it is usually preferable\nto specify the character set of the file by using the CHARACTER SET\nclause. A character set of binary specifies "no conversion."\n\nLOAD DATA INFILE interprets all fields in the file as having the same\ncharacter set, regardless of the data types of the columns into which\nfield values are loaded. For proper interpretation of file contents,\nyou must ensure that it was written with the correct character set. For\nexample, if you write a data file with mysqldump -T or by issuing a\nSELECT ... INTO OUTFILE statement in mysql, be sure to use a\n--default-character-set option so that output is written in the\ncharacter set to be used when the file is loaded with LOAD DATA INFILE.\n\n*Note*:\n\nIt is not possible to load data files that use the ucs2, utf16,\nutf16le, or utf32 character set.\n\nIf you use LOW_PRIORITY, execution of the LOAD DATA statement is\ndelayed until no other clients are reading from the table. This affects\nonly storage engines that use only table-level locking (such as MyISAM,\nMEMORY, and MERGE).\n\nIf you specify CONCURRENT with a MyISAM table that satisfies the\ncondition for concurrent inserts (that is, it contains no free blocks\nin the middle), other threads can retrieve data from the table while\nLOAD DATA is executing. This option affects the performance of LOAD\nDATA a bit, even if no other thread is using the table at the same\ntime.\n\nWith row-based replication, CONCURRENT is replicated regardless of\nMySQL version. With statement-based replication CONCURRENT is not\nreplicated prior to MySQL 5.5.1 (see Bug #34628). For more information,\nsee\nhttp://dev.mysql.com/doc/refman/5.7/en/replication-features-load-data.h\ntml.\n\nThe LOCAL keyword affects expected location of the file and error\nhandling, as described later. LOCAL works only if your server and your\nclient both have been configured to permit it. For example, if mysqld\nwas started with the local_infile system variable disabled, LOCAL does\nnot work. See\nhttp://dev.mysql.com/doc/refman/5.7/en/load-data-local.html.\n\nThe LOCAL keyword affects where the file is expected to be found:\n\no If LOCAL is specified, the file is read by the client program on the\n client host and sent to the server. The file can be given as a full\n path name to specify its exact location. If given as a relative path\n name, the name is interpreted relative to the directory in which the\n client program was started.\n\n When using LOCAL with LOAD DATA, a copy of the file is created in the\n directory where the MySQL server stores temporary files. See\n http://dev.mysql.com/doc/refman/5.7/en/temporary-files.html. Lack of\n sufficient space for the copy in this directory can cause the LOAD\n DATA LOCAL statement to fail.\n\no If LOCAL is not specified, the file must be located on the server\n host and is read directly by the server. The server uses the\n following rules to locate the file:\n\n o If the file name is an absolute path name, the server uses it as\n given.\n\n o If the file name is a relative path name with one or more leading\n components, the server searches for the file relative to the\n server\'s data directory.\n\n o If a file name with no leading components is given, the server\n looks for the file in the database directory of the default\n database.\n\nIn the non-LOCAL case, these rules mean that a file named as\n./myfile.txt is read from the server\'s data directory, whereas the file\nnamed as myfile.txt is read from the database directory of the default\ndatabase. For example, if db1 is the default database, the following\nLOAD DATA statement reads the file data.txt from the database directory\nfor db1, even though the statement explicitly loads the file into a\ntable in the db2 database:\n\nLOAD DATA INFILE \'data.txt\' INTO TABLE db2.my_table;\n\nNon-LOCAL load operations read text files located on the server. For\nsecurity reasons, such operations require that you have the FILE\nprivilege. See\nhttp://dev.mysql.com/doc/refman/5.7/en/privileges-provided.html. Also,\nnon-LOCAL load operations are subject to the secure_file_priv system\nvariable setting. If the variable value is a nonempty directory name,\nthe file to be loaded must be located in that directory. If the\nvariable value is empty (which is insecure), the file need only be\nreadable by the server.\n\nUsing LOCAL is a bit slower than letting the server access the files\ndirectly, because the contents of the file must be sent over the\nconnection by the client to the server. On the other hand, you do not\nneed the FILE privilege to load local files.\n\nLOCAL also affects error handling:\n\no With LOAD DATA INFILE, data-interpretation and duplicate-key errors\n terminate the operation.\n\no With LOAD DATA LOCAL INFILE, data-interpretation and duplicate-key\n errors become warnings and the operation continues because the server\n has no way to stop transmission of the file in the middle of the\n operation. For duplicate-key errors, this is the same as if IGNORE is\n specified. IGNORE is explained further later in this section.\n\nThe REPLACE and IGNORE keywords control handling of input rows that\nduplicate existing rows on unique key values:\n\no If you specify REPLACE, input rows replace existing rows. In other\n words, rows that have the same value for a primary key or unique\n index as an existing row. See [HELP REPLACE].\n\no If you specify IGNORE, rows that duplicate an existing row on a\n unique key value are discarded. For more information, see\n http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#ignore-strict-co\n mparison.\n\no If you do not specify either option, the behavior depends on whether\n the LOCAL keyword is specified. Without LOCAL, an error occurs when a\n duplicate key value is found, and the rest of the text file is\n ignored. With LOCAL, the default behavior is the same as if IGNORE is\n specified; this is because the server has no way to stop transmission\n of the file in the middle of the operation.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/load-data.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/load-data.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (585,32,'LOCALTIME','Syntax:\nLOCALTIME, LOCALTIME([fsp])\n\nLOCALTIME and LOCALTIME() are synonyms for NOW().\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (586,33,'ST_GEOMFROMWKB','ST_GeomFromWKB(wkb[, srid]), ST_GeometryFromWKB(wkb[, srid])\n\nConstructs a geometry value of any type using its WKB representation\nand SRID.\n\nThe result is NULL if the WKB or SRID argument is NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/gis-wkb-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/gis-wkb-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (587,12,'SHA1','Syntax:\nSHA1(str), SHA(str)\n\nCalculates an SHA-1 160-bit checksum for the string, as described in\nRFC 3174 (Secure Hash Algorithm). The value is returned as a string of\n40 hexadecimal digits, or NULL if the argument was NULL. One of the\npossible uses for this function is as a hash key. See the notes at the\nbeginning of this section about storing hash values efficiently. You\ncan also use SHA1() as a cryptographic function for storing passwords.\nSHA() is synonymous with SHA1().\n\nThe return value is a string in the connection character set.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html\n\n','mysql> SELECT SHA1(\'abc\');\n -> \'a9993e364706816aba3e25717850c26c9cd0d89d\'\n','http://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (587,12,'SHA1','Syntax:\nSHA1(str), SHA(str)\n\nCalculates an SHA-1 160-bit checksum for the string, as described in\nRFC 3174 (Secure Hash Algorithm). The value is returned as a string of\n40 hexadecimal digits, or NULL if the argument was NULL. One of the\npossible uses for this function is as a hash key. See the notes at the\nbeginning of this section about storing hash values efficiently. SHA()\nis synonymous with SHA1().\n\nThe return value is a string in the connection character set.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html\n\n','mysql> SELECT SHA1(\'abc\');\n -> \'a9993e364706816aba3e25717850c26c9cd0d89d\'\n','http://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (588,23,'BLOB','BLOB[(M)]\n\nA BLOB column with a maximum length of 65,535 (216 − 1) bytes. Each\nBLOB value is stored using a 2-byte length prefix that indicates the\nnumber of bytes in the value.\n\nAn optional length M can be given for this type. If this is done, MySQL\ncreates the column as the smallest BLOB type large enough to hold\nvalues M bytes long.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/string-type-overview.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/string-type-overview.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (589,12,'PASSWORD','Syntax:\nPASSWORD(str)\n\n*Note*:\n\nThis function is deprecated as of MySQL 5.7.6 and will be removed in a\nfuture MySQL release.\n\nReturns a hashed password string calculated from the cleartext password\nstr. The return value is a string in the connection character set, or\nNULL if the argument is NULL. This function is the SQL interface to the\nalgorithm used by the server to encrypt MySQL passwords for storage in\nthe mysql.user grant table.\n\nThe old_passwords system variable controls the password hashing method\nused by the PASSWORD() function. It also influences password hashing\nperformed by CREATE USER and GRANT statements that specify a password\nusing an IDENTIFIED BY clause.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (590,32,'UTC_DATE','Syntax:\nUTC_DATE, UTC_DATE()\n\nReturns the current UTC date as a value in \'YYYY-MM-DD\' or YYYYMMDD\nformat, depending on whether the function is used in a string or\nnumeric context.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html\n\n','mysql> SELECT UTC_DATE(), UTC_DATE() + 0;\n -> \'2003-08-14\', 20030814\n','http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html'); @@ -673,16 +673,16 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example, INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (592,23,'BIT','BIT[(M)]\n\nA bit-value type. M indicates the number of bits per value, from 1 to\n64. The default is 1 if M is omitted.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/numeric-type-overview.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/numeric-type-overview.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (593,8,'XA','Syntax:\nXA {START|BEGIN} xid [JOIN|RESUME]\n\nXA END xid [SUSPEND [FOR MIGRATE]]\n\nXA PREPARE xid\n\nXA COMMIT xid [ONE PHASE]\n\nXA ROLLBACK xid\n\nXA RECOVER [CONVERT XID]\n\nFor XA START, the JOIN and RESUME clauses are not supported.\n\nFor XA END the SUSPEND [FOR MIGRATE] clause is not supported.\n\nEach XA statement begins with the XA keyword, and most of them require\nan xid value. An xid is an XA transaction identifier. It indicates\nwhich transaction the statement applies to. xid values are supplied by\nthe client, or generated by the MySQL server. An xid value has from one\nto three parts:\n\nxid: gtrid [, bqual [, formatID ]]\n\ngtrid is a global transaction identifier, bqual is a branch qualifier,\nand formatID is a number that identifies the format used by the gtrid\nand bqual values. As indicated by the syntax, bqual and formatID are\noptional. The default bqual value is \'\' if not given. The default\nformatID value is 1 if not given.\n\ngtrid and bqual must be string literals, each up to 64 bytes (not\ncharacters) long. gtrid and bqual can be specified in several ways. You\ncan use a quoted string (\'ab\'), hex string (X\'6162\', 0x6162), or bit\nvalue (b\'nnnn\').\n\nformatID is an unsigned integer.\n\nThe gtrid and bqual values are interpreted in bytes by the MySQL\nserver\'s underlying XA support routines. However, while an SQL\nstatement containing an XA statement is being parsed, the server works\nwith some specific character set. To be safe, write gtrid and bqual as\nhex strings.\n\nxid values typically are generated by the Transaction Manager. Values\ngenerated by one TM must be different from values generated by other\nTMs. A given TM must be able to recognize its own xid values in a list\nof values returned by the XA RECOVER statement.\n\nXA START xid starts an XA transaction with the given xid value. Each XA\ntransaction must have a unique xid value, so the value must not\ncurrently be used by another XA transaction. Uniqueness is assessed\nusing the gtrid and bqual values. All following XA statements for the\nXA transaction must be specified using the same xid value as that given\nin the XA START statement. If you use any of those statements but\nspecify an xid value that does not correspond to some existing XA\ntransaction, an error occurs.\n\nOne or more XA transactions can be part of the same global transaction.\nAll XA transactions within a given global transaction must use the same\ngtrid value in the xid value. For this reason, gtrid values must be\nglobally unique so that there is no ambiguity about which global\ntransaction a given XA transaction is part of. The bqual part of the\nxid value must be different for each XA transaction within a global\ntransaction. (The requirement that bqual values be different is a\nlimitation of the current MySQL XA implementation. It is not part of\nthe XA specification.)\n\nThe XA RECOVER statement returns information for those XA transactions\non the MySQL server that are in the PREPARED state. (See\nhttp://dev.mysql.com/doc/refman/5.7/en/xa-states.html.) The output\nincludes a row for each such XA transaction on the server, regardless\nof which client started it.\n\nXA RECOVER output rows look like this (for an example xid value\nconsisting of the parts \'abc\', \'def\', and 7):\n\nmysql> XA RECOVER;\n+----------+--------------+--------------+--------+\n| formatID | gtrid_length | bqual_length | data |\n+----------+--------------+--------------+--------+\n| 7 | 3 | 3 | abcdef |\n+----------+--------------+--------------+--------+\n\nThe output columns have the following meanings:\n\no formatID is the formatID part of the transaction xid\n\no gtrid_length is the length in bytes of the gtrid part of the xid\n\no bqual_length is the length in bytes of the bqual part of the xid\n\no data is the concatenation of the gtrid and bqual parts of the xid\n\nXID values may contain nonprintable characters. As of MySQL 5.7.5, XA\nRECOVER permits an optional CONVERT XID clause so that clients can\nrequest XID values in hexadecimal.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/xa-statements.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/xa-statements.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (594,7,'EQUALS','Equals(g1, g2)\n\nMBREquals() and Equals() are synonyms. For more information, see the\ndescription of MBREquals().\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-mbr.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-mbr.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (595,2,'CENTROID','Centroid(mpoly)\n\nST_Centroid() and Centroid() are synonyms. For more information, see\nthe description of ST_Centroid().\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/gis-polygon-property-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/gis-polygon-property-functions.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (595,2,'CENTROID','Centroid({poly|mpoly})\n\nST_Centroid() and Centroid() are synonyms. For more information, see\nthe description of ST_Centroid().\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/gis-polygon-property-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/gis-polygon-property-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (596,38,'OCTET_LENGTH','Syntax:\nOCTET_LENGTH(str)\n\nOCTET_LENGTH() is a synonym for LENGTH().\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/string-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/string-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (597,32,'UTC_TIMESTAMP','Syntax:\nUTC_TIMESTAMP, UTC_TIMESTAMP([fsp])\n\nReturns the current UTC date and time as a value in \'YYYY-MM-DD\nHH:MM:SS\' or YYYYMMDDHHMMSS format, depending on whether the function\nis used in a string or numeric context.\n\nIf the fsp argument is given to specify a fractional seconds precision\nfrom 0 to 6, the return value includes a fractional seconds part of\nthat many digits.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html\n\n','mysql> SELECT UTC_TIMESTAMP(), UTC_TIMESTAMP() + 0;\n -> \'2003-08-14 18:08:04\', 20030814180804.000000\n','http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (598,12,'AES_ENCRYPT','Syntax:\nAES_ENCRYPT(str,key_str[,init_vector])\n\nAES_ENCRYPT() and AES_DECRYPT() implement encryption and decryption of\ndata using the official AES (Advanced Encryption Standard) algorithm,\npreviously known as "Rijndael." The AES standard permits various key\nlengths. By default these functions implement AES with a 128-bit key\nlength. As of MySQL 5.7.4, key lengths of 196 or 256 bits can be used,\nas described later. The key length is a trade off between performance\nand security.\n\nAES_ENCRYPT() encrypts the string str using the key string key_str and\nreturns a binary string containing the encrypted output. AES_DECRYPT()\ndecrypts the encrypted string crypt_str using the key string key_str\nand returns the original cleartext string. If either function argument\nis NULL, the function returns NULL.\n\nThe str and crypt_str arguments can be any length, and padding is\nautomatically added to str so it is a multiple of a block as required\nby block-based algorithms such as AES. This padding is automatically\nremoved by the AES_DECRYPT() function. The length of crypt_str can be\ncalculated using this formula:\n\n16 * (trunc(string_length / 16) + 1)\n\nFor a key length of 128 bits, the most secure way to pass a key to the\nkey_str argument is to create a truly random 128-bit value and pass it\nas a binary value. For example:\n\nINSERT INTO t\nVALUES (1,AES_ENCRYPT(\'text\',UNHEX(\'F3229A0B371ED2D9441B830D21A390C3\')));\n\nA passphrase can be used to generate an AES key by hashing the\npassphrase. For example:\n\nINSERT INTO t\nVALUES (1,AES_ENCRYPT(\'text\', UNHEX(SHA2(\'My secret passphrase\',512))));\n\nDo not pass a password or passphrase directly to crypt_str, hash it\nfirst. Previous versions of this documentation suggested the former\napproach, but it is no longer recommended as the examples shown here\nare more secure.\n\nIf AES_DECRYPT() detects invalid data or incorrect padding, it returns\nNULL. However, it is possible for AES_DECRYPT() to return a non-NULL\nvalue (possibly garbage) if the input data or the key is invalid.\n\nAs of MySQL 5.7.4, AES_ENCRYPT() and AES_DECRYPT() permit control of\nthe block encryption mode and take an optional init_vector\ninitialization vector argument:\n\no The block_encryption_mode system variable controls the mode for\n block-based encryption algorithms. Its default value is aes-128-ecb,\n which signifies encryption using a key length of 128 bits and ECB\n mode. For a description of the permitted values of this variable, see\n http://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html.\n\no The optional init_vector argument provides an initialization vector\n for block encryption modes that require it.\n\nFor modes that require the optional init_vector argument, it must be 16\nbytes or longer (bytes in excess of 16 are ignored). An error occurs if\ninit_vector is missing.\n\nFor modes that do not require init_vector, it is ignored and a warning\nis generated if it is specified.\n\nA random string of bytes to use for the initialization vector can be\nproduced by calling RANDOM_BYTES(16). For encryption modes that require\nan initialization vector, the same vector must be used for encryption\nand decryption.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html\n\n','mysql> SET block_encryption_mode = \'aes-256-cbc\';\nmysql> SET @key_str = SHA2(\'My secret passphrase\',512);\nmysql> SET @init_vector = RANDOM_BYTES(16);\nmysql> SET @crypt_str = AES_ENCRYPT(\'text\',@key_str,@init_vector);\nmysql> SELECT AES_DECRYPT(@crypt_str,@key_str,@init_vector);\n+-----------------------------------------------+\n| AES_DECRYPT(@crypt_str,@key_str,@init_vector) |\n+-----------------------------------------------+\n| text |\n+-----------------------------------------------+\n','http://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (599,3,'+','Syntax:\n+\n\nAddition:\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/arithmetic-functions.html\n\n','mysql> SELECT 3+5;\n -> 8\n','http://dev.mysql.com/doc/refman/5.7/en/arithmetic-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (600,7,'GTID_SUBTRACT','Syntax:\nGTID_SUBTRACT(set,subset)\n\nGiven two sets of global transaction IDs subset and set, returns only\nthose GTIDs from set that are not in subset.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/gtid-functions.html\n\n','mysql> SELECT GTID_SUBTRACT(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\',\n -> \'3E11FA47-71CA-11E1-9E33-C80AA9429562:21\')\\G\n*************************** 1. row ***************************\nGTID_SUBTRACT(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\',\n \'3E11FA47-71CA-11E1-9E33-C80AA9429562:21\'): 3e11fa47-71ca-11e1-9e33-c80aa9429562:22-57\n1 row in set (0.00 sec)\n\nmysql> SELECT GTID_SUBTRACT(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\',\n -> \'3E11FA47-71CA-11E1-9E33-C80AA9429562:20-25\')\\G\n*************************** 1. row ***************************\nGTID_SUBTRACT(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\',\n \'3E11FA47-71CA-11E1-9E33-C80AA9429562:20-25\'): 3e11fa47-71ca-11e1-9e33-c80aa9429562:26-57\n1 row in set (0.00 sec)\n\nmysql> SELECT GTID_SUBTRACT(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\',\n -> \'3E11FA47-71CA-11E1-9E33-C80AA9429562:23-24\')\\G\n*************************** 1. row ***************************\nGTID_SUBTRACT(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\',\n \'3E11FA47-71CA-11E1-9E33-C80AA9429562:23-24\'): 3e11fa47-71ca-11e1-9e33-c80aa9429562:21-22:25-57\n1 row in set (0.01 sec)\n','http://dev.mysql.com/doc/refman/5.7/en/gtid-functions.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (600,7,'GTID_SUBTRACT','Syntax:\nGTID_SUBTRACT(set1,set2)\n\nGiven two sets of global transaction IDs set1 and set2, returns only\nthose GTIDs from set1 that are not in set2.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/gtid-functions.html\n\n','mysql> SELECT GTID_SUBTRACT(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\',\n -> \'3E11FA47-71CA-11E1-9E33-C80AA9429562:21\')\\G\n*************************** 1. row ***************************\nGTID_SUBTRACT(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\',\n \'3E11FA47-71CA-11E1-9E33-C80AA9429562:21\'): 3e11fa47-71ca-11e1-9e33-c80aa9429562:22-57\n1 row in set (0.00 sec)\n\nmysql> SELECT GTID_SUBTRACT(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\',\n -> \'3E11FA47-71CA-11E1-9E33-C80AA9429562:20-25\')\\G\n*************************** 1. row ***************************\nGTID_SUBTRACT(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\',\n \'3E11FA47-71CA-11E1-9E33-C80AA9429562:20-25\'): 3e11fa47-71ca-11e1-9e33-c80aa9429562:26-57\n1 row in set (0.00 sec)\n\nmysql> SELECT GTID_SUBTRACT(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\',\n -> \'3E11FA47-71CA-11E1-9E33-C80AA9429562:23-24\')\\G\n*************************** 1. row ***************************\nGTID_SUBTRACT(\'3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57\',\n \'3E11FA47-71CA-11E1-9E33-C80AA9429562:23-24\'): 3e11fa47-71ca-11e1-9e33-c80aa9429562:21-22:25-57\n1 row in set (0.01 sec)\n','http://dev.mysql.com/doc/refman/5.7/en/gtid-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (601,14,'INET_NTOA','Syntax:\nINET_NTOA(expr)\n\nGiven a numeric IPv4 network address in network byte order, returns the\ndotted-quad string representation of the address as a string in the\nconnection character set. INET_NTOA() returns NULL if it does not\nunderstand its argument.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html\n\n','mysql> SELECT INET_NTOA(167773449);\n -> \'10.0.5.9\'\n','http://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (602,32,'DAYOFWEEK','Syntax:\nDAYOFWEEK(date)\n\nReturns the weekday index for date (1 = Sunday, 2 = Monday, ..., 7 =\nSaturday). These index values correspond to the ODBC standard.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html\n\n','mysql> SELECT DAYOFWEEK(\'2007-02-03\');\n -> 7\n','http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (603,3,'CEILING','Syntax:\nCEILING(X)\n\nReturns the smallest integer value not less than X.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html\n\n','mysql> SELECT CEILING(1.23);\n -> 2\nmysql> SELECT CEILING(-1.23);\n -> -1\n','http://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (604,27,'SHOW PROCESSLIST','Syntax:\nSHOW [FULL] PROCESSLIST\n\nSHOW PROCESSLIST shows you which threads are running. You can also get\nthis information from the INFORMATION_SCHEMA PROCESSLIST table or the\nmysqladmin processlist command. If you have the PROCESS privilege, you\ncan see all threads. Otherwise, you can see only your own threads (that\nis, threads associated with the MySQL account that you are using). If\nyou do not use the FULL keyword, only the first 100 characters of each\nstatement are shown in the Info field.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/show-processlist.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/show-processlist.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (604,27,'SHOW PROCESSLIST','Syntax:\nSHOW [FULL] PROCESSLIST\n\nSHOW PROCESSLIST shows which threads are running. If you have the\nPROCESS privilege, you can see all threads. Otherwise, you can see only\nyour own threads (that is, threads associated with the MySQL account\nthat you are using). If you do not use the FULL keyword, only the first\n100 characters of each statement are shown in the Info field.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/show-processlist.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/show-processlist.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (605,33,'LINEFROMWKB','LineFromWKB(wkb[, srid]), LineStringFromWKB(wkb[, srid])\n\nST_LineFromWKB(), ST_LineStringFromWKB(), LineFromWKB(), and\nLineStringFromWKB() are synonyms. For more information, see the\ndescription of ST_LineFromWKB().\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/gis-wkb-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/gis-wkb-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (606,37,'GEOMETRYTYPE','GeometryType(g)\n\nST_GeometryType() and GeometryType() are synonyms. For more\ninformation, see the description of ST_GeometryType().\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/gis-general-property-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/gis-general-property-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (607,40,'CREATE VIEW','Syntax:\nCREATE\n [OR REPLACE]\n [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]\n [DEFINER = { user | CURRENT_USER }]\n [SQL SECURITY { DEFINER | INVOKER }]\n VIEW view_name [(column_list)]\n AS select_statement\n [WITH [CASCADED | LOCAL] CHECK OPTION]\n\nThe CREATE VIEW statement creates a new view, or replaces an existing\nview if the OR REPLACE clause is given. If the view does not exist,\nCREATE OR REPLACE VIEW is the same as CREATE VIEW. If the view does\nexist, CREATE OR REPLACE VIEW replaces it.\n\nFor information about restrictions on view use, see\nhttp://dev.mysql.com/doc/refman/5.7/en/view-restrictions.html.\n\nThe select_statement is a SELECT statement that provides the definition\nof the view. (Selecting from the view selects, in effect, using the\nSELECT statement.) The select_statement can select from base tables or\nother views.\n\nThe view definition is "frozen" at creation time and is not affected by\nsubsequent changes to the definitions of the underlying tables. For\nexample, if a view is defined as SELECT * on a table, new columns added\nto the table later do not become part of the view, and columns dropped\nfrom the table will result in an error when selecting from the view.\n\nThe ALGORITHM clause affects how MySQL processes the view. The DEFINER\nand SQL SECURITY clauses specify the security context to be used when\nchecking access privileges at view invocation time. The WITH CHECK\nOPTION clause can be given to constrain inserts or updates to rows in\ntables referenced by the view. These clauses are described later in\nthis section.\n\nThe CREATE VIEW statement requires the CREATE VIEW privilege for the\nview, and some privilege for each column selected by the SELECT\nstatement. For columns used elsewhere in the SELECT statement, you must\nhave the SELECT privilege. If the OR REPLACE clause is present, you\nmust also have the DROP privilege for the view. CREATE VIEW might also\nrequire the SUPER privilege, depending on the DEFINER value, as\ndescribed later in this section.\n\nWhen a view is referenced, privilege checking occurs as described later\nin this section.\n\nA view belongs to a database. By default, a new view is created in the\ndefault database. To create the view explicitly in a given database,\nuse db_name.view_name syntax to qualify the view name with the database\nname:\n\nCREATE VIEW test.v AS SELECT * FROM t;\n\nUnqualified table or view names in the SELECT statement are also\ninterpreted with respect to the default database. A view can refer to\ntables or views in other databases by qualifying the table or view name\nwith the appropriate database name.\n\nWithin a database, base tables and views share the same namespace, so a\nbase table and a view cannot have the same name.\n\nColumns retrieved by the SELECT statement can be simple references to\ntable columns, or expressions that use functions, constant values,\noperators, and so forth.\n\nA view must have unique column names with no duplicates, just like a\nbase table. By default, the names of the columns retrieved by the\nSELECT statement are used for the view column names. To define explicit\nnames for the view columns, specify the optional column_list clause as\na list of comma-separated identifiers. The number of names in\ncolumn_list must be the same as the number of columns retrieved by the\nSELECT statement.\n\nA view can be created from many kinds of SELECT statements. It can\nrefer to base tables or other views. It can use joins, UNION, and\nsubqueries. The SELECT need not even refer to any tables:\n\nCREATE VIEW v_today (today) AS SELECT CURRENT_DATE;\n\nThe following example defines a view that selects two columns from\nanother table as well as an expression calculated from those columns:\n\nmysql> CREATE TABLE t (qty INT, price INT);\nmysql> INSERT INTO t VALUES(3, 50);\nmysql> CREATE VIEW v AS SELECT qty, price, qty*price AS value FROM t;\nmysql> SELECT * FROM v;\n+------+-------+-------+\n| qty | price | value |\n+------+-------+-------+\n| 3 | 50 | 150 |\n+------+-------+-------+\n\nA view definition is subject to the following restrictions:\n\no The SELECT statement cannot refer to system variables or user-defined\n variables.\n\no Within a stored program, the SELECT statement cannot refer to program\n parameters or local variables.\n\no The SELECT statement cannot refer to prepared statement parameters.\n\no Any table or view referred to in the definition must exist. If, after\n the view has been created, a table or view that the definition refers\n to is dropped, use of the view results in an error. To check a view\n definition for problems of this kind, use the CHECK TABLE statement.\n\no The definition cannot refer to a TEMPORARY table, and you cannot\n create a TEMPORARY view.\n\no You cannot associate a trigger with a view.\n\no Aliases for column names in the SELECT statement are checked against\n the maximum column length of 64 characters (not the maximum alias\n length of 256 characters).\n\nORDER BY is permitted in a view definition, but it is ignored if you\nselect from a view using a statement that has its own ORDER BY.\n\nFor other options or clauses in the definition, they are added to the\noptions or clauses of the statement that references the view, but the\neffect is undefined. For example, if a view definition includes a LIMIT\nclause, and you select from the view using a statement that has its own\nLIMIT clause, it is undefined which limit applies. This same principle\napplies to options such as ALL, DISTINCT, or SQL_SMALL_RESULT that\nfollow the SELECT keyword, and to clauses such as INTO, FOR UPDATE,\nLOCK IN SHARE MODE, and PROCEDURE.\n\nThe results obtained from a view may be affected if you change the\nquery processing environment by changing system variables:\n\nmysql> CREATE VIEW v (mycol) AS SELECT \'abc\';\nQuery OK, 0 rows affected (0.01 sec)\n\nmysql> SET sql_mode = \'\';\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> SELECT "mycol" FROM v;\n+-------+\n| mycol |\n+-------+\n| mycol |\n+-------+\n1 row in set (0.01 sec)\n\nmysql> SET sql_mode = \'ANSI_QUOTES\';\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> SELECT "mycol" FROM v;\n+-------+\n| mycol |\n+-------+\n| abc |\n+-------+\n1 row in set (0.00 sec)\n\nThe DEFINER and SQL SECURITY clauses determine which MySQL account to\nuse when checking access privileges for the view when a statement is\nexecuted that references the view. The valid SQL SECURITY\ncharacteristic values are DEFINER (the default) and INVOKER. These\nindicate that the required privileges must be held by the user who\ndefined or invoked the view, respectively.\n\nIf a user value is given for the DEFINER clause, it should be a MySQL\naccount specified as \'user_name\'@\'host_name\', CURRENT_USER, or\nCURRENT_USER(). The default DEFINER value is the user who executes the\nCREATE VIEW statement. This is the same as specifying DEFINER =\nCURRENT_USER explicitly.\n\nIf the DEFINER clause is present, these rules determine the valid\nDEFINER user values:\n\no If you do not have the SUPER privilege, the only valid user value is\n your own account, either specified literally or by using\n CURRENT_USER. You cannot set the definer to some other account.\n\no If you have the SUPER privilege, you can specify any syntactically\n valid account name. If the account does not exist, a warning is\n generated.\n\no Although it is possible to create a view with a nonexistent DEFINER\n account, an error occurs when the view is referenced if the SQL\n SECURITY value is DEFINER but the definer account does not exist.\n\nFor more information about view security, see\nhttp://dev.mysql.com/doc/refman/5.7/en/stored-programs-security.html.\n\nWithin a view definition, CURRENT_USER returns the view\'s DEFINER value\nby default. For views defined with the SQL SECURITY INVOKER\ncharacteristic, CURRENT_USER returns the account for the view\'s\ninvoker. For information about user auditing within views, see\nhttp://dev.mysql.com/doc/refman/5.7/en/account-activity-auditing.html.\n\nWithin a stored routine that is defined with the SQL SECURITY DEFINER\ncharacteristic, CURRENT_USER returns the routine\'s DEFINER value. This\nalso affects a view defined within such a routine, if the view\ndefinition contains a DEFINER value of CURRENT_USER.\n\nMySQL checks view privileges like this:\n\no At view definition time, the view creator must have the privileges\n needed to use the top-level objects accessed by the view. For\n example, if the view definition refers to table columns, the creator\n must have some privilege for each column in the select list of the\n definition, and the SELECT privilege for each column used elsewhere\n in the definition. If the definition refers to a stored function,\n only the privileges needed to invoke the function can be checked. The\n privileges required at function invocation time can be checked only\n as it executes: For different invocations, different execution paths\n within the function might be taken.\n\no The user who references a view must have appropriate privileges to\n access it (SELECT to select from it, INSERT to insert into it, and so\n forth.)\n\no When a view has been referenced, privileges for objects accessed by\n the view are checked against the privileges held by the view DEFINER\n account or invoker, depending on whether the SQL SECURITY\n characteristic is DEFINER or INVOKER, respectively.\n\no If reference to a view causes execution of a stored function,\n privilege checking for statements executed within the function depend\n on whether the function SQL SECURITY characteristic is DEFINER or\n INVOKER. If the security characteristic is DEFINER, the function runs\n with the privileges of the DEFINER account. If the characteristic is\n INVOKER, the function runs with the privileges determined by the\n view\'s SQL SECURITY characteristic.\n\nExample: A view might depend on a stored function, and that function\nmight invoke other stored routines. For example, the following view\ninvokes a stored function f():\n\nCREATE VIEW v AS SELECT * FROM t WHERE t.id = f(t.name);\n\nSuppose that f() contains a statement such as this:\n\nIF name IS NULL then\n CALL p1();\nELSE\n CALL p2();\nEND IF;\n\nThe privileges required for executing statements within f() need to be\nchecked when f() executes. This might mean that privileges are needed\nfor p1() or p2(), depending on the execution path within f(). Those\nprivileges must be checked at runtime, and the user who must possess\nthe privileges is determined by the SQL SECURITY values of the view v\nand the function f().\n\nThe DEFINER and SQL SECURITY clauses for views are extensions to\nstandard SQL. In standard SQL, views are handled using the rules for\nSQL SECURITY DEFINER. The standard says that the definer of the view,\nwhich is the same as the owner of the view\'s schema, gets applicable\nprivileges on the view (for example, SELECT) and may grant them. MySQL\nhas no concept of a schema "owner", so MySQL adds a clause to identify\nthe definer. The DEFINER clause is an extension where the intent is to\nhave what the standard has; that is, a permanent record of who defined\nthe view. This is why the default DEFINER value is the account of the\nview creator.\n\nThe optional ALGORITHM clause is a MySQL extension to standard SQL. It\naffects how MySQL processes the view. ALGORITHM takes three values:\nMERGE, TEMPTABLE, or UNDEFINED. For more information, see\nhttp://dev.mysql.com/doc/refman/5.7/en/view-algorithms.html, as well as\nhttp://dev.mysql.com/doc/refman/5.7/en/derived-table-optimization.html.\n\nSome views are updatable. That is, you can use them in statements such\nas UPDATE, DELETE, or INSERT to update the contents of the underlying\ntable. For a view to be updatable, there must be a one-to-one\nrelationship between the rows in the view and the rows in the\nunderlying table. There are also certain other constructs that make a\nview nonupdatable.\n\nA generated column in a view is considered updatable because it is\npossible to assign to it. However, if such a column is updated\nexplicitly, the only permitted value is DEFAULT. For information about\ngenerated columns, see\nhttp://dev.mysql.com/doc/refman/5.7/en/create-table-generated-columns.h\ntml.\n\nThe WITH CHECK OPTION clause can be given for an updatable view to\nprevent inserts or updates to rows except those for which the WHERE\nclause in the select_statement is true.\n\nIn a WITH CHECK OPTION clause for an updatable view, the LOCAL and\nCASCADED keywords determine the scope of check testing when the view is\ndefined in terms of another view. The LOCAL keyword restricts the CHECK\nOPTION only to the view being defined. CASCADED causes the checks for\nunderlying views to be evaluated as well. When neither keyword is\ngiven, the default is CASCADED.\n\nFor more information about updatable views and the WITH CHECK OPTION\nclause, see\nhttp://dev.mysql.com/doc/refman/5.7/en/view-updatability.html, and\nhttp://dev.mysql.com/doc/refman/5.7/en/view-check-option.html.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/create-view.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/create-view.html'); @@ -694,14 +694,14 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example, INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (613,7,'JSON_DEPTH','Syntax:\nJSON_DEPTH(json_doc)\n\nReturns the maximum depth of a JSON document. Returns NULL if the\nargument is NULL. An error occurs if the argument is not a valid JSON\ndocument.\n\nAn empty array, empty object, or scalar value has depth 1. A nonempty\narray containing only elements of depth 1 or nonempty object containing\nonly member values of depth 1 has depth 2. Otherwise, a JSON document\nhas depth greater than 2.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/json-attribute-functions.html\n\n','mysql> SELECT JSON_DEPTH(\'{}\'), JSON_DEPTH(\'[]\'), JSON_DEPTH(\'true\');\n+------------------+------------------+--------------------+\n| JSON_DEPTH(\'{}\') | JSON_DEPTH(\'[]\') | JSON_DEPTH(\'true\') |\n+------------------+------------------+--------------------+\n| 1 | 1 | 1 |\n+------------------+------------------+--------------------+\nmysql> SELECT JSON_DEPTH(\'[10, 20]\'), JSON_DEPTH(\'[[], {}]\');\n+------------------------+------------------------+\n| JSON_DEPTH(\'[10, 20]\') | JSON_DEPTH(\'[[], {}]\') |\n+------------------------+------------------------+\n| 2 | 2 |\n+------------------------+------------------------+\nmysql> SELECT JSON_DEPTH(\'[10, {"a": 20}]\');\n+-------------------------------+\n| JSON_DEPTH(\'[10, {"a": 20}]\') |\n+-------------------------------+\n| 3 |\n+-------------------------------+\n','http://dev.mysql.com/doc/refman/5.7/en/json-attribute-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (614,24,'LABELS','Syntax:\n[begin_label:] BEGIN\n [statement_list]\nEND [end_label]\n\n[begin_label:] LOOP\n statement_list\nEND LOOP [end_label]\n\n[begin_label:] REPEAT\n statement_list\nUNTIL search_condition\nEND REPEAT [end_label]\n\n[begin_label:] WHILE search_condition DO\n statement_list\nEND WHILE [end_label]\n\nLabels are permitted for BEGIN ... END blocks and for the LOOP, REPEAT,\nand WHILE statements. Label use for those statements follows these\nrules:\n\no begin_label must be followed by a colon.\n\no begin_label can be given without end_label. If end_label is present,\n it must be the same as begin_label.\n\no end_label cannot be given without begin_label.\n\no Labels at the same nesting level must be distinct.\n\no Labels can be up to 16 characters long.\n\nTo refer to a label within the labeled construct, use an ITERATE or\nLEAVE statement. The following example uses those statements to\ncontinue iterating or terminate the loop:\n\nCREATE PROCEDURE doiterate(p1 INT)\nBEGIN\n label1: LOOP\n SET p1 = p1 + 1;\n IF p1 < 10 THEN ITERATE label1; END IF;\n LEAVE label1;\n END LOOP label1;\nEND;\n\nThe scope of a block label does not include the code for handlers\ndeclared within the block. For details, see [HELP DECLARE HANDLER].\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/statement-labels.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/statement-labels.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (615,33,'MPOINTFROMWKB','MPointFromWKB(wkb[, srid]), MultiPointFromWKB(wkb[, srid])\n\nST_MPointFromWKB(), ST_MultiPointFromWKB(), MPointFromWKB(), and\nMultiPointFromWKB() are synonyms. For more information, see the\ndescription of ST_MPointFromWKB().\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/gis-wkb-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/gis-wkb-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (616,40,'ALTER TABLE','Syntax:\nALTER TABLE tbl_name\n [alter_specification [, alter_specification] ...]\n [partition_options]\n\nalter_specification:\n table_options\n | ADD [COLUMN] col_name column_definition\n [FIRST | AFTER col_name]\n | ADD [COLUMN] (col_name column_definition,...)\n | ADD {INDEX|KEY} [index_name]\n [index_type] (index_col_name,...) [index_option] ...\n | ADD [CONSTRAINT [symbol]] PRIMARY KEY\n [index_type] (index_col_name,...) [index_option] ...\n | ADD [CONSTRAINT [symbol]]\n UNIQUE [INDEX|KEY] [index_name]\n [index_type] (index_col_name,...) [index_option] ...\n | ADD FULLTEXT [INDEX|KEY] [index_name]\n (index_col_name,...) [index_option] ...\n | ADD SPATIAL [INDEX|KEY] [index_name]\n (index_col_name,...) [index_option] ...\n | ADD [CONSTRAINT [symbol]]\n FOREIGN KEY [index_name] (index_col_name,...)\n reference_definition\n | ALGORITHM [=] {DEFAULT|INPLACE|COPY}\n | ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}\n | CHANGE [COLUMN] old_col_name new_col_name column_definition\n [FIRST|AFTER col_name]\n | [DEFAULT] CHARACTER SET [=] charset_name [COLLATE [=] collation_name]\n | CONVERT TO CHARACTER SET charset_name [COLLATE collation_name]\n | {DISABLE|ENABLE} KEYS\n | {DISCARD|IMPORT} TABLESPACE\n | DROP [COLUMN] col_name\n | DROP {INDEX|KEY} index_name\n | DROP PRIMARY KEY\n | DROP FOREIGN KEY fk_symbol\n | FORCE\n | LOCK [=] {DEFAULT|NONE|SHARED|EXCLUSIVE}\n | MODIFY [COLUMN] col_name column_definition\n [FIRST | AFTER col_name]\n | ORDER BY col_name [, col_name] ...\n | RENAME {INDEX|KEY} old_index_name TO new_index_name\n | RENAME [TO|AS] new_tbl_name\n | {WITHOUT|WITH} VALIDATION\n | ADD PARTITION (partition_definition)\n | DROP PARTITION partition_names\n | DISCARD PARTITION {partition_names | ALL} TABLESPACE\n | IMPORT PARTITION {partition_names | ALL} TABLESPACE\n | TRUNCATE PARTITION {partition_names | ALL}\n | COALESCE PARTITION number\n | REORGANIZE PARTITION partition_names INTO (partition_definitions)\n | EXCHANGE PARTITION partition_name WITH TABLE tbl_name [{WITH|WITHOUT} VALIDATION]\n | ANALYZE PARTITION {partition_names | ALL}\n | CHECK PARTITION {partition_names | ALL}\n | OPTIMIZE PARTITION {partition_names | ALL}\n | REBUILD PARTITION {partition_names | ALL}\n | REPAIR PARTITION {partition_names | ALL}\n | REMOVE PARTITIONING\n | UPGRADE PARTITIONING\n\nindex_col_name:\n col_name [(length)] [ASC | DESC]\n\nindex_type:\n USING {BTREE | HASH}\n\nindex_option:\n KEY_BLOCK_SIZE [=] value\n | index_type\n | WITH PARSER parser_name\n | COMMENT \'string\'\n\ntable_options:\n table_option [[,] table_option] ...\n\ntable_option:\n AUTO_INCREMENT [=] value\n | AVG_ROW_LENGTH [=] value\n | [DEFAULT] CHARACTER SET [=] charset_name\n | CHECKSUM [=] {0 | 1}\n | [DEFAULT] COLLATE [=] collation_name\n | COMMENT [=] \'string\'\n | COMPRESSION [=] {\'ZLIB\'|\'LZ4\'|\'NONE\'}\n | CONNECTION [=] \'connect_string\'\n | {DATA|INDEX} DIRECTORY [=] \'absolute path to directory\'\n | DELAY_KEY_WRITE [=] {0 | 1}\n | ENCRYPTION [=] {\'Y\' | \'N\'}\n | ENGINE [=] engine_name\n | INSERT_METHOD [=] { NO | FIRST | LAST }\n | KEY_BLOCK_SIZE [=] value\n | MAX_ROWS [=] value\n | MIN_ROWS [=] value\n | PACK_KEYS [=] {0 | 1 | DEFAULT}\n | PASSWORD [=] \'string\'\n | ROW_FORMAT [=] {DEFAULT|DYNAMIC|FIXED|COMPRESSED|REDUNDANT|COMPACT}\n | STATS_AUTO_RECALC [=] {DEFAULT|0|1}\n | STATS_PERSISTENT [=] {DEFAULT|0|1}\n | STATS_SAMPLE_PAGES [=] value\n | TABLESPACE tablespace_name [STORAGE {DISK|MEMORY|DEFAULT}]\n | UNION [=] (tbl_name[,tbl_name]...)\n\npartition_options:\n (see CREATE TABLE options)\n\nALTER TABLE changes the structure of a table. For example, you can add\nor delete columns, create or destroy indexes, change the type of\nexisting columns, or rename columns or the table itself. You can also\nchange characteristics such as the storage engine used for the table or\nthe table comment.\n\no To use ALTER TABLE, you need ALTER, CREATE, and INSERT privileges for\n the table. Renaming a table requires ALTER and DROP on the old table,\n ALTER, CREATE, and INSERT on the new table.\n\no Following the table name, specify the alterations to be made. If none\n are given, ALTER TABLE does nothing.\n\no The syntax for many of the permissible alterations is similar to\n clauses of the CREATE TABLE statement. column_definition clauses use\n the same syntax for ADD and CHANGE as for CREATE TABLE. For more\n information, see [HELP CREATE TABLE].\n\no The word COLUMN is optional and can be omitted.\n\no Multiple ADD, ALTER, DROP, and CHANGE clauses are permitted in a\n single ALTER TABLE statement, separated by commas. This is a MySQL\n extension to standard SQL, which permits only one of each clause per\n ALTER TABLE statement. For example, to drop multiple columns in a\n single statement, do this:\n\nALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;\n\no If a storage engine does not support an attempted ALTER TABLE\n operation, a warning may result. Such warnings can be displayed with\n SHOW WARNINGS. See [HELP SHOW WARNINGS]. For information on\n troubleshooting ALTER TABLE, see\n http://dev.mysql.com/doc/refman/5.7/en/alter-table-problems.html.\n\no For information about generated columns, see\n http://dev.mysql.com/doc/refman/5.7/en/alter-table-generated-columns.\n html.\n\no For usage examples, see\n http://dev.mysql.com/doc/refman/5.7/en/alter-table-examples.html.\n\no With the mysql_info() C API function, you can find out how many rows\n were copied by ALTER TABLE. See\n http://dev.mysql.com/doc/refman/5.7/en/mysql-info.html.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/alter-table.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/alter-table.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (616,40,'ALTER TABLE','Syntax:\nALTER TABLE tbl_name\n [alter_specification [, alter_specification] ...]\n [partition_options]\n\nalter_specification:\n table_options\n | ADD [COLUMN] col_name column_definition\n [FIRST | AFTER col_name]\n | ADD [COLUMN] (col_name column_definition,...)\n | ADD {INDEX|KEY} [index_name]\n [index_type] (key_part,...) [index_option] ...\n | ADD [CONSTRAINT [symbol]] PRIMARY KEY\n [index_type] (key_part,...) [index_option] ...\n | ADD [CONSTRAINT [symbol]]\n UNIQUE [INDEX|KEY] [index_name]\n [index_type] (key_part,...) [index_option] ...\n | ADD FULLTEXT [INDEX|KEY] [index_name]\n (key_part,...) [index_option] ...\n | ADD SPATIAL [INDEX|KEY] [index_name]\n (key_part,...) [index_option] ...\n | ADD [CONSTRAINT [symbol]]\n FOREIGN KEY [index_name] (col_name,...)\n reference_definition\n | ALGORITHM [=] {DEFAULT|INPLACE|COPY}\n | ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}\n | CHANGE [COLUMN] old_col_name new_col_name column_definition\n [FIRST|AFTER col_name]\n | [DEFAULT] CHARACTER SET [=] charset_name [COLLATE [=] collation_name]\n | CONVERT TO CHARACTER SET charset_name [COLLATE collation_name]\n | {DISABLE|ENABLE} KEYS\n | {DISCARD|IMPORT} TABLESPACE\n | DROP [COLUMN] col_name\n | DROP {INDEX|KEY} index_name\n | DROP PRIMARY KEY\n | DROP FOREIGN KEY fk_symbol\n | FORCE\n | LOCK [=] {DEFAULT|NONE|SHARED|EXCLUSIVE}\n | MODIFY [COLUMN] col_name column_definition\n [FIRST | AFTER col_name]\n | ORDER BY col_name [, col_name] ...\n | RENAME {INDEX|KEY} old_index_name TO new_index_name\n | RENAME [TO|AS] new_tbl_name\n | {WITHOUT|WITH} VALIDATION\n | ADD PARTITION (partition_definition)\n | DROP PARTITION partition_names\n | DISCARD PARTITION {partition_names | ALL} TABLESPACE\n | IMPORT PARTITION {partition_names | ALL} TABLESPACE\n | TRUNCATE PARTITION {partition_names | ALL}\n | COALESCE PARTITION number\n | REORGANIZE PARTITION partition_names INTO (partition_definitions)\n | EXCHANGE PARTITION partition_name WITH TABLE tbl_name [{WITH|WITHOUT} VALIDATION]\n | ANALYZE PARTITION {partition_names | ALL}\n | CHECK PARTITION {partition_names | ALL}\n | OPTIMIZE PARTITION {partition_names | ALL}\n | REBUILD PARTITION {partition_names | ALL}\n | REPAIR PARTITION {partition_names | ALL}\n | REMOVE PARTITIONING\n | UPGRADE PARTITIONING\n\nkey_part:\n col_name [(length)] [ASC | DESC]\n\nindex_type:\n USING {BTREE | HASH}\n\nindex_option:\n KEY_BLOCK_SIZE [=] value\n | index_type\n | WITH PARSER parser_name\n | COMMENT \'string\'\n\ntable_options:\n table_option [[,] table_option] ...\n\ntable_option:\n AUTO_INCREMENT [=] value\n | AVG_ROW_LENGTH [=] value\n | [DEFAULT] CHARACTER SET [=] charset_name\n | CHECKSUM [=] {0 | 1}\n | [DEFAULT] COLLATE [=] collation_name\n | COMMENT [=] \'string\'\n | COMPRESSION [=] {\'ZLIB\'|\'LZ4\'|\'NONE\'}\n | CONNECTION [=] \'connect_string\'\n | {DATA|INDEX} DIRECTORY [=] \'absolute path to directory\'\n | DELAY_KEY_WRITE [=] {0 | 1}\n | ENCRYPTION [=] {\'Y\' | \'N\'}\n | ENGINE [=] engine_name\n | INSERT_METHOD [=] { NO | FIRST | LAST }\n | KEY_BLOCK_SIZE [=] value\n | MAX_ROWS [=] value\n | MIN_ROWS [=] value\n | PACK_KEYS [=] {0 | 1 | DEFAULT}\n | PASSWORD [=] \'string\'\n | ROW_FORMAT [=] {DEFAULT|DYNAMIC|FIXED|COMPRESSED|REDUNDANT|COMPACT}\n | STATS_AUTO_RECALC [=] {DEFAULT|0|1}\n | STATS_PERSISTENT [=] {DEFAULT|0|1}\n | STATS_SAMPLE_PAGES [=] value\n | TABLESPACE tablespace_name [STORAGE {DISK|MEMORY|DEFAULT}]\n | UNION [=] (tbl_name[,tbl_name]...)\n\npartition_options:\n (see CREATE TABLE options)\n\nALTER TABLE changes the structure of a table. For example, you can add\nor delete columns, create or destroy indexes, change the type of\nexisting columns, or rename columns or the table itself. You can also\nchange characteristics such as the storage engine used for the table or\nthe table comment.\n\no To use ALTER TABLE, you need ALTER, CREATE, and INSERT privileges for\n the table. Renaming a table requires ALTER and DROP on the old table,\n ALTER, CREATE, and INSERT on the new table.\n\no Following the table name, specify the alterations to be made. If none\n are given, ALTER TABLE does nothing.\n\no The syntax for many of the permissible alterations is similar to\n clauses of the CREATE TABLE statement. column_definition clauses use\n the same syntax for ADD and CHANGE as for CREATE TABLE. For more\n information, see [HELP CREATE TABLE].\n\no The word COLUMN is optional and can be omitted.\n\no Multiple ADD, ALTER, DROP, and CHANGE clauses are permitted in a\n single ALTER TABLE statement, separated by commas. This is a MySQL\n extension to standard SQL, which permits only one of each clause per\n ALTER TABLE statement. For example, to drop multiple columns in a\n single statement, do this:\n\nALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;\n\no If a storage engine does not support an attempted ALTER TABLE\n operation, a warning may result. Such warnings can be displayed with\n SHOW WARNINGS. See [HELP SHOW WARNINGS]. For information on\n troubleshooting ALTER TABLE, see\n http://dev.mysql.com/doc/refman/5.7/en/alter-table-problems.html.\n\no For information about generated columns, see\n http://dev.mysql.com/doc/refman/5.7/en/alter-table-generated-columns.\n html.\n\no For usage examples, see\n http://dev.mysql.com/doc/refman/5.7/en/alter-table-examples.html.\n\no With the mysql_info() C API function, you can find out how many rows\n were copied by ALTER TABLE. See\n http://dev.mysql.com/doc/refman/5.7/en/mysql-info.html.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/alter-table.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/alter-table.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (617,23,'CHAR BYTE','The CHAR BYTE data type is an alias for the BINARY data type. This is a\ncompatibility feature.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/string-type-overview.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/string-type-overview.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (618,4,'ST_MLINEFROMTEXT','ST_MLineFromText(wkt[, srid]), ST_MultiLineStringFromText(wkt[, srid])\n\nConstructs a MultiLineString value using its WKT representation and\nSRID.\n\nIf the geometry argument is NULL or not a syntactically well-formed\ngeometry, or if the SRID argument is NULL, the return value is NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (619,20,'>','Syntax:\n>\n\nGreater than:\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html\n\n','mysql> SELECT 2 > 2;\n -> 0\n','http://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (620,21,'ANALYZE TABLE','Syntax:\nANALYZE [NO_WRITE_TO_BINLOG | LOCAL]\n TABLE tbl_name [, tbl_name] ...\n\nANALYZE TABLE performs a key distribution analysis and stores the\ndistribution for the named table or tables. For MyISAM tables, this\nstatement is equivalent to using myisamchk --analyze.\n\nThis statement requires SELECT and INSERT privileges for the table.\n\nANALYZE TABLE works with InnoDB, NDB, and MyISAM tables. It does not\nwork with views.\n\nANALYZE TABLE is supported for partitioned tables, and you can use\nALTER TABLE ... ANALYZE PARTITION to analyze one or more partitions;\nfor more information, see [HELP ALTER TABLE], and\nhttp://dev.mysql.com/doc/refman/5.7/en/partitioning-maintenance.html.\n\nDuring the analysis, the table is locked with a read lock for InnoDB\nand MyISAM.\n\nBy default, the server writes ANALYZE TABLE statements to the binary\nlog so that they replicate to replication slaves. To suppress logging,\nspecify the optional NO_WRITE_TO_BINLOG keyword or its alias LOCAL.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/analyze-table.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/analyze-table.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (621,2,'ST_EXTERIORRING','ST_ExteriorRing(poly)\n\nReturns the exterior ring of the Polygon value poly as a LineString. If\nthe argument is NULL or an empty geometry, the return value is NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/gis-polygon-property-functions.html\n\n','mysql> SET @poly =\n -> \'Polygon((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1))\';\nmysql> SELECT ST_AsText(ST_ExteriorRing(ST_GeomFromText(@poly)));\n+----------------------------------------------------+\n| ST_AsText(ST_ExteriorRing(ST_GeomFromText(@poly))) |\n+----------------------------------------------------+\n| LINESTRING(0 0,0 3,3 3,3 0,0 0) |\n+----------------------------------------------------+\n','http://dev.mysql.com/doc/refman/5.7/en/gis-polygon-property-functions.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (621,2,'ST_EXTERIORRING','ST_ExteriorRing(poly)\n\nReturns the exterior ring of the Polygon value poly as a LineString. If\nthe argument is NULL or an empty geometry, the return value is NULL.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/gis-polygon-property-functions.html\n\n','mysql> SET @poly =\n \'Polygon((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1))\';\nmysql> SELECT ST_AsText(ST_ExteriorRing(ST_GeomFromText(@poly)));\n+----------------------------------------------------+\n| ST_AsText(ST_ExteriorRing(ST_GeomFromText(@poly))) |\n+----------------------------------------------------+\n| LINESTRING(0 0,0 3,3 3,3 0,0 0) |\n+----------------------------------------------------+\n','http://dev.mysql.com/doc/refman/5.7/en/gis-polygon-property-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (622,38,'FIELD','Syntax:\nFIELD(str,str1,str2,str3,...)\n\nReturns the index (position) of str in the str1, str2, str3, ... list.\nReturns 0 if str is not found.\n\nIf all arguments to FIELD() are strings, all arguments are compared as\nstrings. If all arguments are numbers, they are compared as numbers.\nOtherwise, the arguments are compared as double.\n\nIf str is NULL, the return value is 0 because NULL fails equality\ncomparison with any value. FIELD() is the complement of ELT().\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/string-functions.html\n\n','mysql> SELECT FIELD(\'Bb\', \'Aa\', \'Bb\', \'Cc\', \'Dd\', \'Ff\');\n -> 2\nmysql> SELECT FIELD(\'Gg\', \'Aa\', \'Bb\', \'Cc\', \'Dd\', \'Ff\');\n -> 0\n','http://dev.mysql.com/doc/refman/5.7/en/string-functions.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (623,40,'CONSTRAINT','MySQL supports foreign keys, which let you cross-reference related data\nacross tables, and foreign key constraints, which help keep this\nspread-out data consistent. The essential syntax for a foreign key\nconstraint definition in a CREATE TABLE or ALTER TABLE statement looks\nlike this:\n\n[CONSTRAINT [symbol]] FOREIGN KEY\n [index_name] (index_col_name, ...)\n REFERENCES tbl_name (index_col_name,...)\n [ON DELETE reference_option]\n [ON UPDATE reference_option]\n\nreference_option:\n RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/create-table-foreign-keys.html\n\n','CREATE TABLE product (\n category INT NOT NULL, id INT NOT NULL,\n price DECIMAL,\n PRIMARY KEY(category, id)\n) ENGINE=INNODB;\n\nCREATE TABLE customer (\n id INT NOT NULL,\n PRIMARY KEY (id)\n) ENGINE=INNODB;\n\nCREATE TABLE product_order (\n no INT NOT NULL AUTO_INCREMENT,\n product_category INT NOT NULL,\n product_id INT NOT NULL,\n customer_id INT NOT NULL,\n\n PRIMARY KEY(no),\n INDEX (product_category, product_id),\n INDEX (customer_id),\n\n FOREIGN KEY (product_category, product_id)\n REFERENCES product(category, id)\n ON UPDATE CASCADE ON DELETE RESTRICT,\n\n FOREIGN KEY (customer_id)\n REFERENCES customer(id)\n) ENGINE=INNODB;\n','http://dev.mysql.com/doc/refman/5.7/en/create-table-foreign-keys.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (623,40,'CONSTRAINT','MySQL supports foreign keys, which let you cross-reference related data\nacross tables, and foreign key constraints, which help keep this\nspread-out data consistent. The essential syntax for a foreign key\nconstraint definition in a CREATE TABLE or ALTER TABLE statement looks\nlike this:\n\n[CONSTRAINT [symbol]] FOREIGN KEY\n [index_name] (col_name, ...)\n REFERENCES tbl_name (col_name,...)\n [ON DELETE reference_option]\n [ON UPDATE reference_option]\n\nreference_option:\n RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/create-table-foreign-keys.html\n\n','CREATE TABLE product (\n category INT NOT NULL, id INT NOT NULL,\n price DECIMAL,\n PRIMARY KEY(category, id)\n) ENGINE=INNODB;\n\nCREATE TABLE customer (\n id INT NOT NULL,\n PRIMARY KEY (id)\n) ENGINE=INNODB;\n\nCREATE TABLE product_order (\n no INT NOT NULL AUTO_INCREMENT,\n product_category INT NOT NULL,\n product_id INT NOT NULL,\n customer_id INT NOT NULL,\n\n PRIMARY KEY(no),\n INDEX (product_category, product_id),\n INDEX (customer_id),\n\n FOREIGN KEY (product_category, product_id)\n REFERENCES product(category, id)\n ON UPDATE CASCADE ON DELETE RESTRICT,\n\n FOREIGN KEY (customer_id)\n REFERENCES customer(id)\n) ENGINE=INNODB;\n','http://dev.mysql.com/doc/refman/5.7/en/create-table-foreign-keys.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (624,7,'CREATE_ASYMMETRIC_PRIV_KEY','Syntax:\nCREATE_ASYMMETRIC_PRIV_KEY(algorithm, {key_len|dh_secret})\n\nCreates a private key using the given algorithm and key length or DH\nsecret, and returns the key as a binary string in PEM format. If key\ngeneration fails, the result is NULL.\n\nSupported algorithm values: \'RSA\', \'DSA\', \'DH\'\n\nSupported key_len values: The minimum key length in bits is 1,024. The\nmaximum key length depends on the algorithm: 16,384 for RSA and 10,000\nfor DSA. These key-length limits are constraints imposed by OpenSSL.\nServer administrators can impose additional limits on maximum key\nlength by setting environment variables. See\nhttp://dev.mysql.com/doc/refman/5.7/en/enterprise-encryption-usage.html\n.\n\nFor DH keys, pass a shared DH secret instead of a key length. To create\nthe secret, pass the key length to CREATE_DH_PARAMETERS().\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/enterprise-encryption-functions.html\n\n','SET @priv = CREATE_ASYMMETRIC_PRIV_KEY(\'DSA\', 2048);\nSET @pub = CREATE_ASYMMETRIC_PUB_KEY(\'DSA\', @priv);\n','http://dev.mysql.com/doc/refman/5.7/en/enterprise-encryption-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (625,40,'ALTER TABLESPACE','Syntax:\nALTER TABLESPACE tablespace_name\n {ADD|DROP} DATAFILE \'file_name\'\n [INITIAL_SIZE [=] size]\n [WAIT]\n ENGINE [=] engine_name\n\nThis statement can be used either to add a new data file, or to drop a\ndata file from a tablespace.\n\nThe ADD DATAFILE variant enables you to specify an initial size using\nan INITIAL_SIZE clause, where size is measured in bytes; the default\nvalue is 134217728 (128 MB). You may optionally follow size with a\none-letter abbreviation for an order of magnitude, similar to those\nused in my.cnf. Generally, this is one of the letters M (megabytes) or\nG (gigabytes).\n\n*Note*:\n\nAll NDB Cluster Disk Data objects share the same namespace. This means\nthat each Disk Data object must be uniquely named (and not merely each\nDisk Data object of a given type). For example, you cannot have a\ntablespace and an data file with the same name, or an undo log file and\na tablespace with the same name.\n\nOn 32-bit systems, the maximum supported value for INITIAL_SIZE is\n4294967296 (4 GB). (Bug #29186)\n\nINITIAL_SIZE is rounded, explicitly, as for CREATE TABLESPACE.\n\nOnce a data file has been created, its size cannot be changed; however,\nyou can add more data files to the tablespace using additional ALTER\nTABLESPACE ... ADD DATAFILE statements.\n\nUsing DROP DATAFILE with ALTER TABLESPACE drops the data file\n\'file_name\' from the tablespace. You cannot drop a data file from a\ntablespace which is in use by any table; in other words, the data file\nmust be empty (no extents used). See\nhttp://dev.mysql.com/doc/refman/5.7/en/mysql-cluster-disk-data-objects.\nhtml. In addition, any data file to be dropped must previously have\nbeen added to the tablespace with CREATE TABLESPACE or ALTER\nTABLESPACE.\n\nBoth ALTER TABLESPACE ... ADD DATAFILE and ALTER TABLESPACE ... DROP\nDATAFILE require an ENGINE clause which specifies the storage engine\nused by the tablespace. Currently, the only accepted values for\nengine_name are NDB and NDBCLUSTER.\n\nWAIT is parsed but otherwise ignored, and so has no effect in MySQL\n5.7. It is intended for future expansion.\n\nWhen ALTER TABLESPACE ... ADD DATAFILE is used with ENGINE = NDB, a\ndata file is created on each Cluster data node. You can verify that the\ndata files were created and obtain information about them by querying\nthe INFORMATION_SCHEMA.FILES table. For example, the following query\nshows all data files belonging to the tablespace named newts:\n\nmysql> SELECT LOGFILE_GROUP_NAME, FILE_NAME, EXTRA\n -> FROM INFORMATION_SCHEMA.FILES\n -> WHERE TABLESPACE_NAME = \'newts\' AND FILE_TYPE = \'DATAFILE\';\n+--------------------+--------------+----------------+\n| LOGFILE_GROUP_NAME | FILE_NAME | EXTRA |\n+--------------------+--------------+----------------+\n| lg_3 | newdata.dat | CLUSTER_NODE=3 |\n| lg_3 | newdata.dat | CLUSTER_NODE=4 |\n| lg_3 | newdata2.dat | CLUSTER_NODE=3 |\n| lg_3 | newdata2.dat | CLUSTER_NODE=4 |\n+--------------------+--------------+----------------+\n2 rows in set (0.03 sec)\n\nSee http://dev.mysql.com/doc/refman/5.7/en/files-table.html.\n\nALTER TABLESPACE is useful only with Disk Data storage for NDB Cluster.\nSee\nhttp://dev.mysql.com/doc/refman/5.7/en/mysql-cluster-disk-data.html.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/alter-tablespace.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/alter-tablespace.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (626,23,'ENUM','ENUM(\'value1\',\'value2\',...) [CHARACTER SET charset_name] [COLLATE\ncollation_name]\n\nAn enumeration. A string object that can have only one value, chosen\nfrom the list of values \'value1\', \'value2\', ..., NULL or the special \'\'\nerror value. ENUM values are represented internally as integers.\n\nAn ENUM column can have a maximum of 65,535 distinct elements. (The\npractical limit is less than 3000.) A table can have no more than 255\nunique element list definitions among its ENUM and SET columns\nconsidered as a group. For more information on these limits, see\nhttp://dev.mysql.com/doc/refman/5.7/en/limits-frm-file.html.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/string-type-overview.html\n\n','','http://dev.mysql.com/doc/refman/5.7/en/string-type-overview.html'); @@ -720,7 +720,7 @@ INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example, INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (639,3,'RADIANS','Syntax:\nRADIANS(X)\n\nReturns the argument X, converted from degrees to radians. (Note that\nπ radians equals 180 degrees.)\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html\n\n','mysql> SELECT RADIANS(90);\n -> 1.5707963267949\n','http://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (640,17,'COLLATION','Syntax:\nCOLLATION(str)\n\nReturns the collation of the string argument.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/information-functions.html\n\n','mysql> SELECT COLLATION(\'abc\');\n -> \'latin1_swedish_ci\'\nmysql> SELECT COLLATION(_utf8\'abc\');\n -> \'utf8_general_ci\'\n','http://dev.mysql.com/doc/refman/5.7/en/information-functions.html'); INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (641,20,'COALESCE','Syntax:\nCOALESCE(value,...)\n\nReturns the first non-NULL value in the list, or NULL if there are no\nnon-NULL values.\n\nThe return type of COALESCE() is the aggregated type of the argument\ntypes.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html\n\n','mysql> SELECT COALESCE(NULL,1);\n -> 1\nmysql> SELECT COALESCE(NULL,NULL,NULL);\n -> NULL\n','http://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html'); -INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (642,17,'VERSION','Syntax:\nVERSION()\n\nReturns a string that indicates the MySQL server version. The string\nuses the utf8 character set. The value might have a suffix in addition\nto the version number. See the description of the version system\nvariable in\nhttp://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/information-functions.html\n\n','mysql> SELECT VERSION();\n -> \'5.7.24-standard\'\n','http://dev.mysql.com/doc/refman/5.7/en/information-functions.html'); +INSERT INTO help_topic (help_topic_id,help_category_id,name,description,example,url) VALUES (642,17,'VERSION','Syntax:\nVERSION()\n\nReturns a string that indicates the MySQL server version. The string\nuses the utf8 character set. The value might have a suffix in addition\nto the version number. See the description of the version system\nvariable in\nhttp://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html.\n\nURL: http://dev.mysql.com/doc/refman/5.7/en/information-functions.html\n\n','mysql> SELECT VERSION();\n -> \'5.7.25-standard\'\n','http://dev.mysql.com/doc/refman/5.7/en/information-functions.html'); INSERT INTO help_keyword (help_keyword_id,name) VALUES (0,'JOIN'); INSERT INTO help_keyword (help_keyword_id,name) VALUES (1,'HOST'); @@ -1629,6 +1629,7 @@ INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (209,109); INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (434,109); INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (540,109); INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (437,109); +INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (303,109); INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (583,109); INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (533,110); INSERT INTO help_relation (help_topic_id,help_keyword_id) VALUES (516,110); From 9757a2242613a7c39e944a95a5412b3f421c4444 Mon Sep 17 00:00:00 2001 From: Evgeniy Patlan Date: Thu, 22 Nov 2018 13:55:16 +0200 Subject: [PATCH 1212/1221] [BLD-1013] SELinux messages for Percona Server 5.7 --- build-ps/percona-server.spec | 34 ++++++++++++++++++++++++++++++-- policy/selinux/percona-server.te | 4 ++-- 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/build-ps/percona-server.spec b/build-ps/percona-server.spec index fd3a6183d203..3319655492d7 100644 --- a/build-ps/percona-server.spec +++ b/build-ps/percona-server.spec @@ -193,7 +193,7 @@ Requires: procps Requires: shadow-utils Requires: net-tools Requires(pre): Percona-Server-shared%{product_suffix} -Requires: Percona-Server-client%{product_suffix} +Requires: Percona-Server-client%{product_suffix} Provides: MySQL-server%{?_isa} = %{version}-%{release} Provides: mysql-server = %{version}-%{release} Provides: mysql-server%{?_isa} = %{version}-%{release} @@ -310,6 +310,18 @@ Requires: Percona-Server-client%{product_suffix} = %{version}-%{release} Requires: jemalloc >= 3.3.0 Provides: tokudb-plugin = %{version}-%{release} +Requires: selinux-policy +Requires: policycoreutils +Requires(pre): policycoreutils +Requires(post): policycoreutils +Requires(postun): policycoreutils + +%if 0%{?rhel} == 6 +BuildRequires: selinux-policy +%else +BuildRequires: selinux-policy-devel +%endif + %description -n Percona-Server-tokudb%{product_suffix} This package contains the TokuDB plugin for Percona Server %{version}-%{release} %endif @@ -403,7 +415,7 @@ mkdir release -DBUILD_CONFIG=mysql_release \ -DINSTALL_LAYOUT=RPM \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \ - -DWITH_BOOST=.. \ + -DWITH_BOOST=.. \ -DCMAKE_C_FLAGS="%{optflags}" \ -DCMAKE_CXX_FLAGS="%{optflags}" \ -DENABLE_DTRACE=0 \ @@ -448,6 +460,15 @@ install -d -m 0755 %{buildroot}/var/run/mysqld install -d -m 0750 %{buildroot}/var/lib/mysql-files install -d -m 0750 %{buildroot}/var/lib/mysql-keyring +# SElinux +%if 0%{?tokudb} +pushd $MBD/%{src_dir}/policy/selinux +make -f /usr/share/selinux/devel/Makefile +install -D -m 0644 $MBD/%{src_dir}/policy/selinux/percona-server.pp %{buildroot}%{_datadir}/selinux/packages/percona-server/percona-server.pp +popd +# SElinux END +%endif + # Install all binaries cd $MBD/release make DESTDIR=%{buildroot} install @@ -643,6 +664,7 @@ done %if 0%{?tokudb} %post -n Percona-Server-tokudb%{product_suffix} +/usr/sbin/semodule -i %{_datadir}/selinux/packages/percona-server/percona-server.pp >/dev/null 2>&1 || : if [ $1 -eq 1 ] ; then echo -e "\n\n * This release of Percona Server is distributed with TokuDB storage engine." echo -e " * Run the following script to enable the TokuDB storage engine in Percona Server:\n" @@ -650,6 +672,12 @@ if [ $1 -eq 1 ] ; then echo -e " * See http://www.percona.com/doc/percona-server/5.7/tokudb/tokudb_installation.html for more installation details\n" echo -e " * See http://www.percona.com/doc/percona-server/5.7/tokudb/tokudb_intro.html for an introduction to TokuDB\n\n" fi + +%postun -n Percona-Server-tokudb%{product_suffix} +if [ $1 -eq 0 ] ; then + /usr/sbin/semodule -r percona-server >/dev/null 2>&1 || : +fi + %endif %if 0%{?rocksdb} @@ -986,6 +1014,8 @@ fi %if 0%{?tokudb} %files -n Percona-Server-tokudb%{product_suffix} +%dir %attr(755, root, root) %{_datadir}/selinux/packages/percona-server +%attr(644, root, root) %{_datadir}/selinux/packages/percona-server/percona-server.pp %attr(-, root, root) %{_bindir}/tokuftdump %{_libdir}/mysql/plugin/ha_tokudb.so diff --git a/policy/selinux/percona-server.te b/policy/selinux/percona-server.te index b45b7feb9842..80e8b67bad94 100644 --- a/policy/selinux/percona-server.te +++ b/policy/selinux/percona-server.te @@ -12,7 +12,7 @@ require { class capability { sys_nice sys_resource }; class blk_file { read write open }; class file { append write getattr read create unlink open setattr }; - class dir { search read write remove_name open add_name }; + class dir { search read write create addname remove_name open add_name }; class process { siginh noatsecure rlimitinh }; } @@ -33,7 +33,7 @@ allow mysqld_t tmp_t:sock_file { create unlink }; allow mysqld_t tmpfs_t:dir { write search read remove_name open add_name }; allow mysqld_t tmpfs_t:file { write getattr read create unlink open }; -allow mysqld_t user_tmp_t:dir { write add_name }; +allow mysqld_t user_tmp_t:dir { write read create add_name }; allow mysqld_t user_tmp_t:file create; allow mysqld_t tmp_t:file { append create read write open getattr unlink setattr }; From 1ab64921e7bd831bef3674b25092f4ebdbd6500f Mon Sep 17 00:00:00 2001 From: Evgeniy Patlan Date: Thu, 22 Nov 2018 15:58:54 +0200 Subject: [PATCH 1213/1221] [BLD-1013] Make ps-admin script not to check selinux policy --- scripts/ps-admin.sh | 17 ----------------- scripts/ps_tokudb_admin.sh | 17 ----------------- 2 files changed, 34 deletions(-) diff --git a/scripts/ps-admin.sh b/scripts/ps-admin.sh index fb2e5cada83b..b2da7079798e 100755 --- a/scripts/ps-admin.sh +++ b/scripts/ps-admin.sh @@ -292,23 +292,6 @@ elif [ ${ENABLE_MYSQLX} = 1 -a ${DISABLE_MYSQLX} = 1 ]; then exit 1 fi -# Check SELinux status - needs to be disabled/permissive for LD_PRELOAD -if [ -n "$(which sestatus)" -a ${ENABLE_TOKUDB} = 1 ]; then - printf "Checking SELinux status...\n" - STATUS_SELINUX=$(sestatus | grep "SELinux status:" | awk '{print $3}') - if [ ${STATUS_SELINUX} = "enabled" ]; then - MODE_SELINUX=$(sestatus | grep "Current mode:" | awk '{print $3}') - if [ ${MODE_SELINUX} = "enforcing" ]; then - printf "ERROR: SELinux is in enforcing mode and needs to be disabled (or put into permissive mode) for TokuDB to work correctly.\n\n" - exit 1 - else - printf "INFO: SELinux is in permissive mode.\n\n" - fi - else - printf "INFO: SELinux is disabled.\n\n" - fi -fi - # List plugins LIST_PLUGINS=$(${MYSQL_CLIENT_BIN} -e "select CONCAT(PLUGIN_NAME,'#') from information_schema.plugins where plugin_status = 'ACTIVE';" -u ${USER} ${PASSWORD} ${SOCKET} ${HOST} ${PORT} 2>/tmp/ps-admin.err) if [ $? -ne 0 ]; then diff --git a/scripts/ps_tokudb_admin.sh b/scripts/ps_tokudb_admin.sh index 5f2370ab7c0e..9ce0ad81d471 100755 --- a/scripts/ps_tokudb_admin.sh +++ b/scripts/ps_tokudb_admin.sh @@ -176,23 +176,6 @@ elif [ $ENABLE_TOKUBACKUP = 1 -a $DISABLE_TOKUBACKUP = 1 ]; then exit 1 fi -# Check SELinux status - needs to be disabled/permissive for LD_PRELOAD -if [ -n "$(which sestatus)" ]; then - printf "Checking SELinux status...\n" - STATUS_SELINUX=$(sestatus | grep "SELinux status:" | awk '{print $3}') - if [ $STATUS_SELINUX = "enabled" ]; then - MODE_SELINUX=$(sestatus | grep "Current mode:" | awk '{print $3}') - if [ $MODE_SELINUX = "enforcing" ]; then - printf "ERROR: SELinux is in enforcing mode and needs to be disabled (or put into permissive mode) for TokuDB to work correctly.\n\n" - exit 1 - else - printf "INFO: SELinux is in permissive mode.\n\n" - fi - else - printf "INFO: SELinux is disabled.\n\n" - fi -fi - # List plugins LIST_ENGINE=$($MYSQL_CLIENT_BIN -e "select CONCAT(PLUGIN_NAME,'#') from information_schema.plugins where PLUGIN_NAME like 'TokuDB%';" -u $USER $PASSWORD $SOCKET $HOST $PORT 2>/dev/null) if [ $? -ne 0 ]; then From 53371b029266587b8624d544d33b753d93f2d9ff Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Wed, 21 Nov 2018 12:35:24 -0700 Subject: [PATCH 1214/1221] PS-5035 : rocksdb.show_table_status: 1051: Unknown table 'db_new' MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - This is not a simple test failure, it is a regression introduced as a part of the native partitioning implementation. The handler::delete_table method takes in a 'database.table' name in the expanded/converted format of the file system character set or fscs.  The character set has file system special characters expanded into '@xxxx' format so a '.' in a database or table name is represented as a '@002e' in the expanded name. The delete_table method needs to determine if the table is partitioned or not. It does this through the helper function native_part::get_part_str_for_table in sql/partitioning/partition_base.cc by parsing, then building the filename of the .frm file so that it can open and read partition info. This parsing makes use of the function build_table_filename in sql/sql_table.cc.  The build_table_filename function expects that the given database and table names are in system charset and again, encodes these into the fscs, therefore double encoding the database and table name into something that does not exist and can not be opened or read from. This results in delete_table returning ERR_TABLE_CORRUPT to the server which then complains that it can't DROP the database because it can't properly remove all of the tables within. - Since there seems to be no other obvious helper function to take the database.table name in fscs encoding and turn it into a proper fully qualified path to the .frm file, we need to extend the flag set and functionality of build_table_filename that allows us to compose the full path but without the additional encoding. - This is already covered by the test which revealed the issue within rocksdb.show_table_status so no new test is implemented. --- sql/partitioning/partition_base.cc | 4 ++-- sql/sql_table.cc | 8 ++++++-- sql/sql_table.h | 2 ++ 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/sql/partitioning/partition_base.cc b/sql/partitioning/partition_base.cc index 0858e3bc7fe2..4694c66c5000 100644 --- a/sql/partitioning/partition_base.cc +++ b/sql/partitioning/partition_base.cc @@ -207,10 +207,10 @@ bool get_part_str_for_table(const char *name, std::string &result) table_name, sizeof(table_name)); // Prepare the path to the .FRM file and open the file + // The 'name' is coming into this function already encoded in fscs. char path[FN_REFLEN + 1]; //< Path to .FRM file - bool temp_table= (bool)is_prefix(table_name, tmp_file_prefix); build_table_filename(path, sizeof(path) - 1, db_name, table_name, reg_ext, - temp_table ? FN_IS_TMP : 0); + FN_IS_ENCODED); return get_part_str_for_path(path, result); } diff --git a/sql/sql_table.cc b/sql/sql_table.cc index c1ebae0db852..6413256bdd6d 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -573,12 +573,16 @@ size_t build_table_filename(char *buff, size_t bufflen, const char *db, DBUG_PRINT("enter", ("db: '%s' table_name: '%s' ext: '%s' flags: %x", db, table_name, ext, flags)); - if (flags & FN_IS_TMP) // FN_FROM_IS_TMP | FN_TO_IS_TMP + if ((flags & FN_IS_TMP) || // FN_FROM_IS_TMP | FN_TO_IS_TMP + (flags & FN_IS_ENCODED)) tab_len= my_stpnmov(tbbuff, table_name, sizeof(tbbuff)) - tbbuff; else tab_len= tablename_to_filename(table_name, tbbuff, sizeof(tbbuff)); - db_len= tablename_to_filename(db, dbbuff, sizeof(dbbuff)); + if (flags & FN_IS_ENCODED) + db_len= my_stpnmov(dbbuff, db, sizeof(dbbuff)) - dbbuff; + else + db_len= tablename_to_filename(db, dbbuff, sizeof(dbbuff)); char *end = buff + bufflen; /* Don't add FN_ROOTDIR if mysql_data_home already includes it */ diff --git a/sql/sql_table.h b/sql/sql_table.h index 762d4ad7fe0c..1efd2abaed83 100644 --- a/sql/sql_table.h +++ b/sql/sql_table.h @@ -144,6 +144,8 @@ static const uint FRM_ONLY= 1 << 3; static const uint NO_HA_TABLE= 1 << 4; /** Don't check foreign key constraints while renaming table */ static const uint NO_FK_CHECKS= 1 << 5; +/** Percona : Database and table name are encoded in fscs already */ +static const uint FN_IS_ENCODED= 1 << 6; size_t filename_to_tablename(const char *from, char *to, size_t to_length #ifndef DBUG_OFF From 712cf0f778ad06f048aef940e5bd51e553e11b3a Mon Sep 17 00:00:00 2001 From: Sergei Glushchenko Date: Tue, 6 Nov 2018 00:52:35 +0700 Subject: [PATCH 1215/1221] PS-4950: Invalid audit log file size when audit_log_rotations is changed during runtime audit_log_rotations and audit_log_rotate_on_size were messed up when set at runtime. --- mysql-test/r/audit_log_rotate.result | 13 +++++++++ mysql-test/t/audit_log_rotate.test | 40 ++++++++++++++++++++++++++++ plugin/audit_log/audit_file.c | 4 +-- 3 files changed, 55 insertions(+), 2 deletions(-) diff --git a/mysql-test/r/audit_log_rotate.result b/mysql-test/r/audit_log_rotate.result index 2e9ba477f89e..c66c32f360eb 100644 --- a/mysql-test/r/audit_log_rotate.result +++ b/mysql-test/r/audit_log_rotate.result @@ -1 +1,14 @@ +# +# Rotate with "rotations" and "size" given as startup options +# +success +# +# PS-4950: Invalid audit log file size when audit_log_rotations is changed during runtime +# +SET @audit_log_rotations_orig = @@audit_log_rotations; +SET @audit_log_rotate_on_size_orig = @@audit_log_rotate_on_size; +SET GLOBAL audit_log_rotations = 3; +SET GLOBAL audit_log_rotate_on_size = 4096; +SET GLOBAL audit_log_rotations = @audit_log_rotations_orig; +SET GLOBAL audit_log_rotate_on_size = @audit_log_rotate_on_size_orig; success diff --git a/mysql-test/t/audit_log_rotate.test b/mysql-test/t/audit_log_rotate.test index 0ae541386242..f719af9fdf63 100644 --- a/mysql-test/t/audit_log_rotate.test +++ b/mysql-test/t/audit_log_rotate.test @@ -3,6 +3,10 @@ let $MYSQLD_DATADIR= `select @@datadir`; let MYSQLD_DATADIR= $MYSQLD_DATADIR; +--echo # +--echo # Rotate with "rotations" and "size" given as startup options +--echo # + --disable_result_log --disable_query_log --source include/audit_log_events.inc @@ -24,6 +28,42 @@ perl; } die "Rotation doesn't work!" unless scalar(@files) > 1 EOF + +--echo success + +--echo # +--echo # PS-4950: Invalid audit log file size when audit_log_rotations is changed during runtime +--echo # + +SET @audit_log_rotations_orig = @@audit_log_rotations; +SET @audit_log_rotate_on_size_orig = @@audit_log_rotate_on_size; +SET GLOBAL audit_log_rotations = 3; +SET GLOBAL audit_log_rotate_on_size = 4096; + +--remove_files_wildcard $MYSQLD_DATADIR test_audit.log.* + +--disable_result_log +--disable_query_log +--source include/audit_log_events.inc +--source include/audit_log_events.inc +--source include/audit_log_events.inc +--source include/audit_log_events.inc +--enable_query_log +--enable_result_log + +perl; + my @files = glob ($ENV{'MYSQLD_DATADIR'} . "/test_audit.log.[0-9][0-9]"); + foreach (@files) { + my $size = -s $_; + print $_; + die "Files are too small!" unless $size >= 4096; + } + die "Too many rotations!" unless scalar(@files) <= 3; +EOF + +SET GLOBAL audit_log_rotations = @audit_log_rotations_orig; +SET GLOBAL audit_log_rotate_on_size = @audit_log_rotate_on_size_orig; + --remove_files_wildcard $MYSQLD_DATADIR test_audit.log* --echo success diff --git a/plugin/audit_log/audit_file.c b/plugin/audit_log/audit_file.c index 5ede95690a74..50a5436e232f 100644 --- a/plugin/audit_log/audit_file.c +++ b/plugin/audit_log/audit_file.c @@ -203,10 +203,10 @@ void audit_handler_file_set_option(audit_handler_t *handler, switch (opt) { - case OPT_ROTATIONS: + case OPT_ROTATE_ON_SIZE: logger_set_size_limit(data->logger, *(ulonglong*)(val)); break; - case OPT_ROTATE_ON_SIZE: + case OPT_ROTATIONS: logger_set_rotations(data->logger, *(ulonglong*)(val)); break; } From 6751da9910d01956927ec611dc272d9f70437b79 Mon Sep 17 00:00:00 2001 From: Yura Sorokin Date: Mon, 26 Nov 2018 23:10:34 +0200 Subject: [PATCH 1216/1221] Implemented PS-4709 (Merge MySQL 5.7.24) (conflicts resolved) https://jira.percona.com/browse/PS-4709 *** Our fix in for PS-3937 "Some file operations in mf_iocache2.c are not instrumented" (https://jira.percona.com/browse/PS-3937) (commit b9deeac) left intact as it is identical to the upstream fix for Bug #27788907 / #90264 "Some file operations in mf_iocache2.c are not instrumented" (https://bugs.mysql.com/bug.php?id=90264) (commit mysql/mysql-server@bac287c). Only formatting changes. *** Our fix for PS-1134 "LP #1739734: Federated table returns error 1430 from storage engine" (https://jira.percona.com/browse/PS-1134) (commit 78a728f) left intact as it is identical to the upstream fix for Bug #27493633 / #89537 "Regression in FEDERATED storage engine after GCC 7 fixes" (https://bugs.mysql.com/bug.php?id=89537) (commit mysql/mysql-server@b15b4ac). Only formatting changes. *** The fix for Oracle's Bug #27799513 "POTENTIAL DOUBLE FREE OR CORRUPTION OF HEAP INFO (HP_INFO)" (commit mysql/mysql-server@22e99fc) re-applied to Percona's extended Heap Storage Engine. 'main.heap_btree' MTR test case extended with additional checks for this issue. *** Our fix for PS-4513 "Inconsistent SELECT...ORDER BY results with euckr charset / euckr_bin collation" (https://jira.percona.com/browse/PS-4513) (commit 919b2c8) left intact as it is identical to the upstream fix for Bug #28104394 / #91032 "InnoDB 5.7 Primary key scan lack data" (https://bugs.mysql.com/bug.php?id=91032) (commit mysql/mysql-server@94208bc) and Bug #91091 "Inconsistent SELECT...ORDER BY results with euckr charset / euckr_bin collation" (https://bugs.mysql.com/bug.php?id=91091). Our MTR test case 'innodb.bug91091' left as is. *** Reverted 'xdr_utils.h' part of our fix for PS-3767 "LP #1738417: Fix compilation warnings/errors with clang" (https://jira.percona.com/browse/PS-3767) (commit 320473c) in favor of the upstream fix for the Bug #28099963 / #91071 (https://bugs.mysql.com/bug.php?id=91071) (commit mysql/mysql-server@1f610f7). *** Re-recorded 'innodb.xtradb_compressed_columns_mysqldump' and 'innodb.xtradb_compressed_columns_with_dictionaries' MTR test cases because of the changed error code values. *** Re-recorded 'main.mysqlshow' MTR test case: added missing 'INNODB_TABLESPACES_SCRUBBING' into the list of known tables. This should have been done when 'scrubbing' was merged. *** Fixed and re-recorded 'main.percona_heap_blob' MTR test case because of the new warning added in the fix for the upstream Bug #27788685 / #90266 "No warning when truncating a string with data loss" (https://bugs.mysql.com/bug.php?id=90266) (commit mysql/mysql-server@1501557). *** Re-recorded 'innodb.general_ts_encrypt' and 'innodb.percona_force_encryption' MTR test cases because of the new warning introduced in WL #11571 "Deprecate Shared tablespaces in partitioned table" (commit mysql/mysql-server@e08dee47). *** Re-recorded 'main.mysqldump' MTR test case because of the rocksdb-related changes done previously. *** Added 'innodb.bug88747' MTR test case for Bug #27216817 / #88747 "InnoDB: Failing assertion: prebuilt->table->n_mysql_handles_opened == 1" fixed in 5.5.60, 5.6.40, 5.7.22, 8.0.11 (commit mysql/mysql-server@c0b4d74). Adding a unique index to an InnoDB table on which multiple locks were held could raise an assertion. *** Added 'main.bug88781' MTR test case for Bug #26881798 / #88781 "handle_fatal_signal (sig=11) in replace_db_table" fixed in 5.5.60, 5.6.40, 5.7.22, 8.0.4 (commit mysql/mysql-server@9e1035c). Dropping an index from a system table could cause a server exit. *** Added 'innodb.bug88782' MTR test case for Bug #27225649, #27229072 / #88782 "Failing assertion: prebuilt->sql_stat_start || prebuilt->select_lock_type != LOC" fixed in 5.5.60, 5.6.40, 5.7.22, 8.0.11 (commit mysql/mysql-server@ddaf0f1). InnoDB: A REPLACE operation on a temporary table raised an assertion. *** Added 'main.bug88800' MTR test case for Bug #27230925 / #88800 "handle_fatal_signal (sig=11) in show_routine_grants" fixed in 5.5.61, 5.6.41, 5.7.23, 8.0.12 (commit mysql/mysql-server@6d570d7). Mishandling of internal privilege structures could cause a server exit. *** Added 'main.bug83739' MTR test case for Bug #25062396 / #83739 "Assertion `cur_shape != Gcalc_function::shape_point' failed." fixed in 5.6.39, 5.7.21, 8.0.4 (commit mysql/mysql-server@b5323d156da) (commit mysql/mysql-server@180adbe271e). For geometry calculations, invalid input parameters could lead to an incorrect result buffer and cause an assertion to be raised or a server exit. *** Added 'innodb.bug79821' MTR test case for Bug #22486025 / #79821 "InnoDB: Failing assertion: key_len != 0 || find_flag != HA_READ_KEY_EXACT" fixed in 5.7.21, 8.0.4 (commit mysql/mysql-server@1a13f7f) A "wrong key column" error was added to address an unsupported index creation scenario. *** VERSION raised to "5.7.24-26". univ.i version raised to "26". *** This merge also fixes PS-1017 "LP #1631816: slave replication breaks after bug #74145 happens in master" (https://jira.percona.com/browse/PS-1017) as corresponding upstream Bug #24786290 / #83232 "replication breaks after bug #74145 happens in master" (https://bugs.mysql.com/bug.php?id=83232) was fixed in 5.7.24 (commit mysql/mysql-server@4a3761a) (commit mysql/mysql-server@093c654). Replication: When FLUSH statements for specific log types (such as FLUSH SLOW LOGS) resulted in an error, the statements were still written to the binary log. This stopped replication because the error had occurred on the master, but did not occur on the slave. MySQL Server now checks on the outcome of these FLUSH statements, and if an error occurred, the statement is not written to the binary log. --- VERSION | 10 +--- cmake/zlib.cmake | 6 --- mysql-test/r/bug83739.result | 20 ++++++++ mysql-test/r/bug88781.result | 14 ++++++ mysql-test/r/bug88800.result | 34 +++++++++++++ mysql-test/r/connect.result | 6 +-- mysql-test/r/heap_btree.result | 7 +++ mysql-test/r/mysqldump.result | 13 +++++ mysql-test/r/mysqlshow.result | 6 ++- mysql-test/r/percona_heap_blob.result | 3 ++ mysql-test/suite/innodb/r/bug79821.result | 19 +++++++ mysql-test/suite/innodb/r/bug88747.result | 16 ++++++ mysql-test/suite/innodb/r/bug88782.result | 15 ++++++ .../suite/innodb/r/general_ts_encrypt.result | 22 +++++++++ .../innodb/r/percona_force_encryption.result | 2 + ...xtradb_compressed_columns_mysqldump.result | 12 ++--- ...ompressed_columns_with_dictionaries.result | 6 +-- mysql-test/suite/innodb/t/bug79821.test | 18 +++++++ mysql-test/suite/innodb/t/bug88747.test | 23 +++++++++ mysql-test/suite/innodb/t/bug88782.test | 22 +++++++++ mysql-test/t/bug83739.test | 16 ++++++ mysql-test/t/bug88781.test | 22 +++++++++ mysql-test/t/bug88800.test | 36 ++++++++++++++ mysql-test/t/heap_btree.test | 7 +++ mysql-test/t/percona_heap_blob.test | 1 + mysys/mf_iocache2.c | 36 +------------- .../src/bindings/xcom/xcom/xdr_utils.h | 14 ++---- sql/handler.cc | 13 ++--- sql/mysqld.cc | 8 --- sql/share/errmsg-utf8.txt | 10 ++-- sql/sql_table.cc | 10 +--- storage/federated/ha_federated.cc | 12 ----- storage/heap/ha_heap.h | 12 +---- storage/heap/hp_create.c | 49 ++----------------- storage/innobase/handler/ha_innodb.cc | 5 -- storage/innobase/include/univ.i | 2 +- 36 files changed, 344 insertions(+), 183 deletions(-) create mode 100644 mysql-test/r/bug83739.result create mode 100644 mysql-test/r/bug88781.result create mode 100644 mysql-test/r/bug88800.result create mode 100644 mysql-test/suite/innodb/r/bug79821.result create mode 100644 mysql-test/suite/innodb/r/bug88747.result create mode 100644 mysql-test/suite/innodb/r/bug88782.result create mode 100644 mysql-test/suite/innodb/t/bug79821.test create mode 100644 mysql-test/suite/innodb/t/bug88747.test create mode 100644 mysql-test/suite/innodb/t/bug88782.test create mode 100644 mysql-test/t/bug83739.test create mode 100644 mysql-test/t/bug88781.test create mode 100644 mysql-test/t/bug88800.test diff --git a/VERSION b/VERSION index 895f9e55f586..41dc80043516 100644 --- a/VERSION +++ b/VERSION @@ -1,12 +1,4 @@ MYSQL_VERSION_MAJOR=5 MYSQL_VERSION_MINOR=7 -<<<<<<< HEAD -MYSQL_VERSION_PATCH=23 -MYSQL_VERSION_EXTRA=-24 -||||||| merged common ancestors -MYSQL_VERSION_PATCH=23 -MYSQL_VERSION_EXTRA= -======= MYSQL_VERSION_PATCH=24 -MYSQL_VERSION_EXTRA= ->>>>>>> mysql-5.7.24 +MYSQL_VERSION_EXTRA=-26 diff --git a/cmake/zlib.cmake b/cmake/zlib.cmake index 718dd48082e5..e97c7841c0d6 100644 --- a/cmake/zlib.cmake +++ b/cmake/zlib.cmake @@ -16,12 +16,6 @@ MACRO (MYSQL_USE_BUNDLED_ZLIB) SET(BUILD_BUNDLED_ZLIB 1) SET(ZLIB_LIBRARY zlib CACHE INTERNAL "Bundled zlib library") -<<<<<<< HEAD - SET(ZLIB_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/zlib CACHE STRING "Will not be redefined by FindZLIB") -||||||| merged common ancestors - SET(ZLIB_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/zlib) -======= ->>>>>>> mysql-5.7.24 SET(ZLIB_FOUND TRUE) SET(WITH_ZLIB "bundled" CACHE STRING "Use bundled zlib") ADD_SUBDIRECTORY(zlib) diff --git a/mysql-test/r/bug83739.result b/mysql-test/r/bug83739.result new file mode 100644 index 000000000000..b9544ebd8676 --- /dev/null +++ b/mysql-test/r/bug83739.result @@ -0,0 +1,20 @@ +# +# Bug #25062396 / #83739 "Assertion `cur_shape != Gcalc_function::shape_point' failed" +# fixed in 5.6.39, 5.7.21, 8.0.4 +# For geometry calculations, invalid input parameters could lead to an +# incorrect result buffer and cause an assertion to be raised or a +# server exit +# +SELECT ST_ASTEXT( +ST_DIFFERENCE( +ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(' 'POINT(-5 -4),' 'POLYGON((-5 1,7 -7,10 0,-10 8,-7 9,-5 1)))'), +ST_GEOMFROMTEXT('LINESTRING(5 3,7 -3,5 0,-6 -9,-4 9,-3 -8,10 1,10 -9,5 -3,4 -2,1 -3,-8 -5,4 -7,-2 -8)') +) +); +ST_ASTEXT( +ST_DIFFERENCE( +ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(' 'POINT(-5 -4),' 'POLYGON((-5 1,7 -7,10 0,-10 8,-7 9,-5 1)))'), +ST_GEOMFROMTEXT('LINESTRING(5 3,7 -3,5 0,-6 -9,-4 9,-3 -8,10 1,10 -9,5 -3,4 -2,1 -3,-8 -5,4 -7,-2 -8)') +) +) +GEOMETRYCOLLECTION(POINT(-5 -4),POLYGON((-5 1,-7 9,-10 8,10 0,7 -7,-5 1))) diff --git a/mysql-test/r/bug88781.result b/mysql-test/r/bug88781.result new file mode 100644 index 000000000000..5841530bef7f --- /dev/null +++ b/mysql-test/r/bug88781.result @@ -0,0 +1,14 @@ +# +# Bug #26881798 / #88781 "handle_fatal_signal (sig=11) in replace_db_table" +# fixed in 5.5.60, 5.6.40, 5.7.22, 8.0.4 +# Dropping an index from a system table could cause a server exit +# +CALL mtr.add_suppression("Did not write failed 'GRANT DROP ON none\\.\\* TO 'bug88781'@'localhost'' into binary log while granting/revoking privileges in databases\\."); +CREATE USER 'bug88781'@'localhost'; +RENAME TABLE mysql.db TO mysql.bak; +CREATE TABLE mysql.db ENGINE=MyISAM SELECT * FROM mysql.bak; +GRANT DROP ON none.* TO 'bug88781'@'localhost'; +ERROR HY000: The table 'mysql.db' does not have the necessary key(s) defined on it. Please check the table definition and create index(s) accordingly. +DROP TABLE mysql.db; +RENAME TABLE mysql.bak TO mysql.db; +DROP USER 'bug88781'@'localhost'; diff --git a/mysql-test/r/bug88800.result b/mysql-test/r/bug88800.result new file mode 100644 index 000000000000..4e3dc30c0267 --- /dev/null +++ b/mysql-test/r/bug88800.result @@ -0,0 +1,34 @@ +# +# Bug #27230925 / #88800 "handle_fatal_signal (sig=11) in show_routine_grants" +# fixed in 5.5.61, 5.6.41, 5.7.23, 8.0.12 +# Mishandling of internal privilege structures could cause a server exit +# +CREATE TABLE t1 ( +id INT UNSIGNED AUTO_INCREMENT, +name CHAR(50), +PRIMARY KEY (id) +); +CREATE PROCEDURE p1() BEGIN END; +CREATE USER 'bug88800'@'localhost'; +GRANT ALL ON test.* TO 'bug88800'@'localhost'; +GRANT EXECUTE ON PROCEDURE test.p1 TO 'bug88800'@'localhost' WITH GRANT OPTION; +RENAME TABLE mysql.procs_priv TO mysql.procs_gone; +FLUSH PRIVILEGES; +ERROR 42S02: Table 'mysql.procs_priv' doesn't exist +SHOW GRANTS FOR 'bug88800'@'localhost'; +Grants for bug88800@localhost +GRANT USAGE ON *.* TO 'bug88800'@'localhost' +GRANT ALL PRIVILEGES ON `test`.* TO 'bug88800'@'localhost' +GRANT EXECUTE ON PROCEDURE `test`.`p1` TO 'bug88800'@'localhost' WITH GRANT OPTION +FLUSH PRIVILEGES; +ERROR 42S02: Table 'mysql.procs_priv' doesn't exist +SHOW GRANTS FOR 'bug88800'@'localhost'; +Grants for bug88800@localhost +GRANT USAGE ON *.* TO 'bug88800'@'localhost' +GRANT ALL PRIVILEGES ON `test`.* TO 'bug88800'@'localhost' +GRANT EXECUTE ON PROCEDURE `test`.`p1` TO 'bug88800'@'localhost' WITH GRANT OPTION +RENAME TABLE mysql.procs_gone TO mysql.procs_priv; +DROP USER 'bug88800'@'localhost'; +DROP PROCEDURE p1; +DROP TABLE t1; +CALL mtr.add_suppression("Fatal error: Can't open and lock privilege tables: Table 'mysql.procs_priv' doesn't exist"); diff --git a/mysql-test/r/connect.result b/mysql-test/r/connect.result index 4e394eaf0a83..32524e5bd3c7 100644 --- a/mysql-test/r/connect.result +++ b/mysql-test/r/connect.result @@ -345,10 +345,6 @@ DROP USER wl6587@localhost; # ------------------------------------------------------------------ # -- End of 5.6 tests # ------------------------------------------------------------------ -<<<<<<< HEAD -set global log_error_verbosity= STARTVAL; -||||||| merged common ancestors -======= # # BUG#27539838: NOT ALL ABORTED CONNECTS ARE REPORTED TO ERROR.LOG # PROPERLY @@ -375,4 +371,4 @@ ERROR 42000: Access denied for user 'new1'@'localhost' to database 'test1' # Case 4: SSL connection attempt without necessary certificates DROP USER 'new1'@'localhost'; DROP DATABASE test1; ->>>>>>> mysql-5.7.24 +set global log_error_verbosity= STARTVAL; diff --git a/mysql-test/r/heap_btree.result b/mysql-test/r/heap_btree.result index dcb283481cee..7bc68d52c097 100644 --- a/mysql-test/r/heap_btree.result +++ b/mysql-test/r/heap_btree.result @@ -372,3 +372,10 @@ INSERT INTO t1 VALUES(1),(1); DELETE a1 FROM t1 AS a1, t1 AS a2 WHERE a1.a=a2.a; DROP TABLE t1; End of 5.0 tests +# +# Bug#27799513: POTENTIAL DOUBLE FREE OR CORRUPTION OF HEAP INFO (HP_INFO) +# +CREATE TABLE t1 (id INT, a VARCHAR(300) NOT NULL, KEY USING BTREE(a)) ENGINE=Heap; +INSERT t1 VALUES (1, REPEAT('a', 300)); +DROP TABLE t1; +End of 5.5 tests diff --git a/mysql-test/r/mysqldump.result b/mysql-test/r/mysqldump.result index 68af2f645513..287e3017d96f 100644 --- a/mysql-test/r/mysqldump.result +++ b/mysql-test/r/mysqldump.result @@ -6444,6 +6444,15 @@ CREATE FUNCTION f1() RETURNS INT RETURN 1; /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; +/*!50717 SELECT COUNT(*) INTO @rocksdb_has_p_s_session_variables FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'performance_schema' AND TABLE_NAME = 'session_variables' */; +/*!50717 SET @rocksdb_get_is_supported = IF (@rocksdb_has_p_s_session_variables, 'SELECT COUNT(*) INTO @rocksdb_is_supported FROM performance_schema.session_variables WHERE VARIABLE_NAME=\'rocksdb_bulk_load\'', 'SELECT 0') */; +/*!50717 PREPARE s FROM @rocksdb_get_is_supported */; +/*!50717 EXECUTE s */; +/*!50717 DEALLOCATE PREPARE s */; +/*!50717 SET @rocksdb_enable_bulk_load = IF (@rocksdb_is_supported, 'SET SESSION rocksdb_bulk_load = 1', 'SET @rocksdb_dummy_bulk_load = 0') */; +/*!50717 PREPARE s FROM @rocksdb_enable_bulk_load */; +/*!50717 EXECUTE s */; +/*!50717 DEALLOCATE PREPARE s */; CREATE DATABASE /*!32312 IF NOT EXISTS*/ `bug27931181` /*!40100 DEFAULT CHARACTER SET latin1 */; @@ -6509,6 +6518,10 @@ DELIMITER ; /*!50003 SET character_set_client = @saved_cs_client */ ; /*!50003 SET character_set_results = @saved_cs_results */ ; /*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50112 SET @disable_bulk_load = IF (@is_rocksdb_supported, 'SET SESSION rocksdb_bulk_load = @old_rocksdb_bulk_load', 'SET @dummy_rocksdb_bulk_load = 0') */; +/*!50112 PREPARE s FROM @disable_bulk_load */; +/*!50112 EXECUTE s */; +/*!50112 DEALLOCATE PREPARE s */; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; diff --git a/mysql-test/r/mysqlshow.result b/mysql-test/r/mysqlshow.result index a120afe62115..e8e6c59b6bc8 100644 --- a/mysql-test/r/mysqlshow.result +++ b/mysql-test/r/mysqlshow.result @@ -135,7 +135,7 @@ Database: information_schema | INNODB_CMPMEM_RESET | | INNODB_SYS_FIELDS | | XTRADB_ZIP_DICT | -| INNODB_CHANGED_PAGES | +| INNODB_TABLESPACES_SCRUBBING | | INNODB_TEMP_TABLE_INFO | | INNODB_FT_INDEX_TABLE | | INNODB_CMPMEM | @@ -154,6 +154,7 @@ Database: information_schema | XTRADB_ZIP_DICT_COLS | | INNODB_SYS_INDEXES | | INNODB_SYS_VIRTUAL | +| INNODB_CHANGED_PAGES | +---------------------------------------+ Database: INFORMATION_SCHEMA +---------------------------------------+ @@ -215,7 +216,7 @@ Database: INFORMATION_SCHEMA | INNODB_CMPMEM_RESET | | INNODB_SYS_FIELDS | | XTRADB_ZIP_DICT | -| INNODB_CHANGED_PAGES | +| INNODB_TABLESPACES_SCRUBBING | | INNODB_TEMP_TABLE_INFO | | INNODB_FT_INDEX_TABLE | | INNODB_CMPMEM | @@ -234,6 +235,7 @@ Database: INFORMATION_SCHEMA | XTRADB_ZIP_DICT_COLS | | INNODB_SYS_INDEXES | | INNODB_SYS_VIRTUAL | +| INNODB_CHANGED_PAGES | +---------------------------------------+ Wildcard: inf_rmation_schema +--------------------+ diff --git a/mysql-test/r/percona_heap_blob.result b/mysql-test/r/percona_heap_blob.result index 38fff03afc97..1be9de43523f 100644 --- a/mysql-test/r/percona_heap_blob.result +++ b/mysql-test/r/percona_heap_blob.result @@ -905,6 +905,7 @@ SET @old_max_heap_table_size = @@global.max_heap_table_size; SET @old_max_allowed_packet = @@global.max_allowed_packet; SET GLOBAL max_heap_table_size = 18 * 1024 * 1024; SET GLOBAL max_allowed_packet = 24 * 1024 * 1024; +SET sql_mode = 'NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; SET default_storage_engine=MEMORY; drop table if exists t1; CREATE TABLE t1 (data LONGBLOB); @@ -925,6 +926,8 @@ select length(data) from t1; length(data) 18874368 alter table t1 modify data blob; +Warnings: +Warning 1265 Data truncated for column 'data' at row 1 select length(data) from t1; length(data) 0 diff --git a/mysql-test/suite/innodb/r/bug79821.result b/mysql-test/suite/innodb/r/bug79821.result new file mode 100644 index 000000000000..ce8a51f048f8 --- /dev/null +++ b/mysql-test/suite/innodb/r/bug79821.result @@ -0,0 +1,19 @@ +# +# Bug #22486025 / #79821 "InnoDB: Failing assertion: key_len != 0 || find_flag != HA_READ_KEY_EXACT" +# fixed in 5.7.21, 8.0.4 +# A "wrong key column" error was added to address an unsupported index creation scenario +# +SET sql_mode = ''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +CREATE TEMPORARY TABLE t1 (c1 INT NOT NULL) ENGINE=InnoDB; +CREATE TABLE t1(c1 CHAR(0) NOT NULL); +DROP TABLE t1; +ALTER TABLE t1 ADD COLUMN c4 INT COMMENT 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'; +SET big_tables = 1; +INSERT INTO t1 VALUES(0, 0); +Warnings: +Warning 1265 Data truncated for column 'c1' at row 1 +SELECT AVG(sum_c1) FROM (SELECT SUM(c1) AS sum_c1 FROM t1 GROUP BY c1) AS t1; +ERROR 42000: The used storage engine can't index column 'c1' +DROP TABLE t1; diff --git a/mysql-test/suite/innodb/r/bug88747.result b/mysql-test/suite/innodb/r/bug88747.result new file mode 100644 index 000000000000..00c5a7131c1d --- /dev/null +++ b/mysql-test/suite/innodb/r/bug88747.result @@ -0,0 +1,16 @@ +# +# Bug #27216817 / #88747 "InnoDB: Failing assertion: prebuilt->table->n_mysql_handles_opened == 1" +# fixed in 5.5.60, 5.6.40, 5.7.22, 8.0.11 +# Adding a unique index to an InnoDB table on which multiple locks were +# held could raise an assertion +# +CREATE TABLE t1( +c1 INT NOT NULL, +c2 TIMESTAMP NOT NULL, +c3 INT NULL, +c4 CHAR(1) NOT NULL +) ENGINE=InnoDB; +LOCK TABLES t1 WRITE, t1 AS a READ; +ALTER TABLE t1 ADD PRIMARY KEY(c1); +UNLOCK TABLES; +DROP TABLE t1; diff --git a/mysql-test/suite/innodb/r/bug88782.result b/mysql-test/suite/innodb/r/bug88782.result new file mode 100644 index 000000000000..fffe2545c79e --- /dev/null +++ b/mysql-test/suite/innodb/r/bug88782.result @@ -0,0 +1,15 @@ +# +# Bug #27225649, #27229072 / #88782 "Failing assertion: prebuilt->sql_stat_start || prebuilt->select_lock_type != LOC" +# fixed in 5.5.60, 5.6.40, 5.7.22, 8.0.11 +# InnoDB: A REPLACE operation on a temporary table raised an assertion +# +CREATE TEMPORARY TABLE t2(c1 INT); +CREATE TEMPORARY TABLE t1(a int) ENGINE=InnoDB; +ALTER TABLE t1 ADD UNIQUE INDEX(a); +LOCK TABLES t1 READ, t2 READ; +INSERT INTO t2 VALUES(8403+0.75); +SELECT DAYNAME(c1) FROM t1; +ERROR 42S22: Unknown column 'c1' in 'field list' +INSERT INTO t1 VALUES(0xAFBA); +REPLACE INTO t1 SELECT * FROM t2; +REPLACE INTO t1 SELECT * FROM t2; diff --git a/mysql-test/suite/innodb/r/general_ts_encrypt.result b/mysql-test/suite/innodb/r/general_ts_encrypt.result index 7050830d2cf2..8874ace954a8 100644 --- a/mysql-test/suite/innodb/r/general_ts_encrypt.result +++ b/mysql-test/suite/innodb/r/general_ts_encrypt.result @@ -58,17 +58,27 @@ PARTITION BY RANGE (a) PARTITIONS 3 ( PARTITION p1 VALUES LESS THAN (20), PARTITION p2 VALUES LESS THAN (40) TABLESPACE innodb_file_per_table, PARTITION p3 VALUES LESS THAN (60) TABLESPACE innodb_system); +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. CREATE TABLE pt2 (a INT NOT NULL, PRIMARY KEY(a)) ENGINE=InnoDB TABLESPACE ts_encrypted ENCRYPTION='y' PARTITION BY RANGE (a) PARTITIONS 3 ( PARTITION p1 VALUES LESS THAN (20), PARTITION p2 VALUES LESS THAN (40) TABLESPACE innodb_file_per_table, PARTITION p3 VALUES LESS THAN (60) TABLESPACE ts_encrypted_new); +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. ALTER TABLE pt1 ADD PARTITION (PARTITION p4 VALUES LESS THAN (80) TABLESPACE ts_unencrypted_new); +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. ALTER TABLE pt1 ADD PARTITION (PARTITION p5 VALUES LESS THAN (100) TABLESPACE ts_encrypted); ERROR HY000: InnoDB: Tablespace `ts_encrypted` can contain only an ENCRYPTED tables. ALTER TABLE pt1 ADD PARTITION (PARTITION p6 VALUES LESS THAN (120) TABLESPACE innodb_system); +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. ALTER TABLE pt2 ADD PARTITION (PARTITION p4 VALUES LESS THAN (80) TABLESPACE ts_encrypted_new); +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. ALTER TABLE pt2 ADD PARTITION (PARTITION p5 VALUES LESS THAN (100) TABLESPACE ts_unencrypted); ERROR HY000: InnoDB: Tablespace `ts_unencrypted` cannot contain an ENCRYPTED table. ALTER TABLE pt2 ADD PARTITION (PARTITION p6 VALUES LESS THAN (120) TABLESPACE innodb_system); @@ -88,6 +98,8 @@ PARTITION p3 VALUES LESS THAN (60) TABLESPACE innodb_system ( SUBPARTITION p31 TABLESPACE ts_unencrypted, SUBPARTITION p32 TABLESPACE innodb_file_per_table, SUBPARTITION p33 TABLESPACE ts_unencrypted_new)); +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. ALTER TABLE spt1 ADD PARTITION (PARTITION p4 VALUES LESS THAN (130) ( SUBPARTITION p41 TABLESPACE ts_unencrypted, SUBPARTITION p42 TABLESPACE ts_encrypted, @@ -97,10 +109,14 @@ ALTER TABLE spt1 ADD PARTITION (PARTITION p5 VALUES LESS THAN (140) ( SUBPARTITION p51 TABLESPACE ts_unencrypted, SUBPARTITION p52 TABLESPACE innodb_system, SUBPARTITION p53 TABLESPACE ts_unencrypted_new)); +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. ALTER TABLE spt1 ADD PARTITION (PARTITION p6 VALUES LESS THAN (150) TABLESPACE ts_encrypted ( SUBPARTITION p61 TABLESPACE ts_unencrypted, SUBPARTITION p62 TABLESPACE innodb_system, SUBPARTITION p63 TABLESPACE ts_unencrypted_new)); +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. CREATE TABLE spt2 (a INT NOT NULL, b INT) ENGINE=InnoDB TABLESPACE ts_encrypted ENCRYPTION='y' PARTITION BY RANGE (a) PARTITIONS 3 SUBPARTITION BY KEY (b) ( @@ -116,6 +132,8 @@ PARTITION p3 VALUES LESS THAN (60) TABLESPACE ts_encrypted_new ( SUBPARTITION p31 TABLESPACE ts_encrypted, SUBPARTITION p32 TABLESPACE innodb_file_per_table, SUBPARTITION p33 TABLESPACE ts_encrypted_new)); +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. ALTER TABLE spt2 ADD PARTITION (PARTITION p4 VALUES LESS THAN (130) ( SUBPARTITION p41 TABLESPACE ts_encrypted, SUBPARTITION p42 TABLESPACE ts_unencrypted, @@ -125,10 +143,14 @@ ALTER TABLE spt2 ADD PARTITION (PARTITION p5 VALUES LESS THAN (140) ( SUBPARTITION p51 TABLESPACE ts_encrypted, SUBPARTITION p52 TABLESPACE ts_encrypted_new, SUBPARTITION p53 TABLESPACE ts_encrypted_new)); +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. ALTER TABLE spt2 ADD PARTITION (PARTITION p6 VALUES LESS THAN (150) TABLESPACE ts_unencrypted ( SUBPARTITION p61 TABLESPACE ts_encrypted, SUBPARTITION p62 TABLESPACE ts_encrypted_new, SUBPARTITION p63 TABLESPACE ts_encrypted_new)); +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. ALTER TABLE spt2 ADD PARTITION (PARTITION p7 VALUES LESS THAN (160) ( SUBPARTITION p71 ENGINE=MyISAM, SUBPARTITION p72 ENGINE=MyISAM, diff --git a/mysql-test/suite/innodb/r/percona_force_encryption.result b/mysql-test/suite/innodb/r/percona_force_encryption.result index 25cfc8ec3042..5131ca5f9797 100644 --- a/mysql-test/suite/innodb/r/percona_force_encryption.result +++ b/mysql-test/suite/innodb/r/percona_force_encryption.result @@ -23,6 +23,8 @@ engine=innodb tablespace ts_encrypted1 partition by range (a) partitions 2 ( partition p1 values less than (20), partition p2 values less than (40) tablespace ts_encrypted2); +Warnings: +Warning 1681 'InnoDB : A table partition in a shared tablespace' is deprecated and will be removed in a future release. create table t_unencrypted_tablespace (a text) tablespace ts_unencrypted1 ENGINE="InnoDB"; ERROR HY000: InnoDB: Tablespace `ts_unencrypted1` cannot contain an ENCRYPTED table. set global innodb_encrypt_tables='OFF'; diff --git a/mysql-test/suite/innodb/r/xtradb_compressed_columns_mysqldump.result b/mysql-test/suite/innodb/r/xtradb_compressed_columns_mysqldump.result index 9b4164dc61a5..b4f6bc60fa19 100644 --- a/mysql-test/suite/innodb/r/xtradb_compressed_columns_mysqldump.result +++ b/mysql-test/suite/innodb/r/xtradb_compressed_columns_mysqldump.result @@ -82,11 +82,11 @@ COUNT(*) = 0 1 # Importing SQL dump with compressed columns enabled and dictionaries disabled Warnings: -Note 3231 Compression dictionary 'd1' does not exist +Note 3232 Compression dictionary 'd1' does not exist Warnings: -Note 3231 Compression dictionary 'd2' does not exist +Note 3232 Compression dictionary 'd2' does not exist Warnings: -Note 3231 Compression dictionary 'd3' does not exist +Note 3232 Compression dictionary 'd3' does not exist number_of_short_rows_in_first_match 1 number_of_long_rows_in_first_match @@ -99,11 +99,11 @@ COUNT(*) = 0 1 # Importing SQL dump with compressed columns and dictionaries enabled Warnings: -Note 3231 Compression dictionary 'd1' does not exist +Note 3232 Compression dictionary 'd1' does not exist Warnings: -Note 3231 Compression dictionary 'd2' does not exist +Note 3232 Compression dictionary 'd2' does not exist Warnings: -Note 3231 Compression dictionary 'd3' does not exist +Note 3232 Compression dictionary 'd3' does not exist number_of_short_rows_in_first_match 1 number_of_long_rows_in_first_match diff --git a/mysql-test/suite/innodb/r/xtradb_compressed_columns_with_dictionaries.result b/mysql-test/suite/innodb/r/xtradb_compressed_columns_with_dictionaries.result index 7a48ab766b32..3c30a3ee982a 100644 --- a/mysql-test/suite/innodb/r/xtradb_compressed_columns_with_dictionaries.result +++ b/mysql-test/suite/innodb/r/xtradb_compressed_columns_with_dictionaries.result @@ -1,14 +1,14 @@ CREATE COMPRESSION_DICTIONARY IF NOT EXISTS ddd('foo'); CREATE COMPRESSION_DICTIONARY IF NOT EXISTS ddd('foo'); Warnings: -Note 3230 Compression dictionary 'ddd' already exists +Note 3231 Compression dictionary 'ddd' already exists CREATE COMPRESSION_DICTIONARY IF NOT EXISTS ddd('bar'); Warnings: -Note 3230 Compression dictionary 'ddd' already exists +Note 3231 Compression dictionary 'ddd' already exists DROP COMPRESSION_DICTIONARY IF EXISTS ddd; DROP COMPRESSION_DICTIONARY IF EXISTS ddd; Warnings: -Note 3231 Compression dictionary 'ddd' does not exist +Note 3232 Compression dictionary 'ddd' does not exist CREATE COMPRESSION_DICTIONARY d1(''); CREATE COMPRESSION_DICTIONARY d2(_ucs2''); CREATE COMPRESSION_DICTIONARY d3('aaaaaaaabbbbbbbbccccccccdddddddd'); diff --git a/mysql-test/suite/innodb/t/bug79821.test b/mysql-test/suite/innodb/t/bug79821.test new file mode 100644 index 000000000000..27daf16b439b --- /dev/null +++ b/mysql-test/suite/innodb/t/bug79821.test @@ -0,0 +1,18 @@ +--source include/have_innodb.inc + +--echo # +--echo # Bug #22486025 / #79821 "InnoDB: Failing assertion: key_len != 0 || find_flag != HA_READ_KEY_EXACT" +--echo # fixed in 5.7.21, 8.0.4 +--echo # A "wrong key column" error was added to address an unsupported index creation scenario +--echo # + +SET sql_mode = ''; +CREATE TEMPORARY TABLE t1 (c1 INT NOT NULL) ENGINE=InnoDB; +CREATE TABLE t1(c1 CHAR(0) NOT NULL); +DROP TABLE t1; +ALTER TABLE t1 ADD COLUMN c4 INT COMMENT 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'; +SET big_tables = 1; +INSERT INTO t1 VALUES(0, 0); +--error ER_WRONG_KEY_COLUMN +SELECT AVG(sum_c1) FROM (SELECT SUM(c1) AS sum_c1 FROM t1 GROUP BY c1) AS t1; +DROP TABLE t1; diff --git a/mysql-test/suite/innodb/t/bug88747.test b/mysql-test/suite/innodb/t/bug88747.test new file mode 100644 index 000000000000..5d9e6d5ac569 --- /dev/null +++ b/mysql-test/suite/innodb/t/bug88747.test @@ -0,0 +1,23 @@ +--source include/have_innodb.inc + +--echo # +--echo # Bug #27216817 / #88747 "InnoDB: Failing assertion: prebuilt->table->n_mysql_handles_opened == 1" +--echo # fixed in 5.5.60, 5.6.40, 5.7.22, 8.0.11 +--echo # Adding a unique index to an InnoDB table on which multiple locks were +--echo # held could raise an assertion +--echo # + +CREATE TABLE t1( + c1 INT NOT NULL, + c2 TIMESTAMP NOT NULL, + c3 INT NULL, + c4 CHAR(1) NOT NULL +) ENGINE=InnoDB; + +LOCK TABLES t1 WRITE, t1 AS a READ; + +ALTER TABLE t1 ADD PRIMARY KEY(c1); + +UNLOCK TABLES; + +DROP TABLE t1; diff --git a/mysql-test/suite/innodb/t/bug88782.test b/mysql-test/suite/innodb/t/bug88782.test new file mode 100644 index 000000000000..807dac2696f6 --- /dev/null +++ b/mysql-test/suite/innodb/t/bug88782.test @@ -0,0 +1,22 @@ +--source include/have_innodb.inc + +--echo # +--echo # Bug #27225649, #27229072 / #88782 "Failing assertion: prebuilt->sql_stat_start || prebuilt->select_lock_type != LOC" +--echo # fixed in 5.5.60, 5.6.40, 5.7.22, 8.0.11 +--echo # InnoDB: A REPLACE operation on a temporary table raised an assertion +--echo # + +CREATE TEMPORARY TABLE t2(c1 INT); +CREATE TEMPORARY TABLE t1(a int) ENGINE=InnoDB; + +ALTER TABLE t1 ADD UNIQUE INDEX(a); + +LOCK TABLES t1 READ, t2 READ; + +INSERT INTO t2 VALUES(8403+0.75); +--error ER_BAD_FIELD_ERROR +SELECT DAYNAME(c1) FROM t1; +INSERT INTO t1 VALUES(0xAFBA); + +REPLACE INTO t1 SELECT * FROM t2; +REPLACE INTO t1 SELECT * FROM t2; diff --git a/mysql-test/t/bug83739.test b/mysql-test/t/bug83739.test new file mode 100644 index 000000000000..bd10efa4ca59 --- /dev/null +++ b/mysql-test/t/bug83739.test @@ -0,0 +1,16 @@ +--source include/have_geometry.inc + +--echo # +--echo # Bug #25062396 / #83739 "Assertion `cur_shape != Gcalc_function::shape_point' failed" +--echo # fixed in 5.6.39, 5.7.21, 8.0.4 +--echo # For geometry calculations, invalid input parameters could lead to an +--echo # incorrect result buffer and cause an assertion to be raised or a +--echo # server exit +--echo # + +SELECT ST_ASTEXT( + ST_DIFFERENCE( + ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(' 'POINT(-5 -4),' 'POLYGON((-5 1,7 -7,10 0,-10 8,-7 9,-5 1)))'), + ST_GEOMFROMTEXT('LINESTRING(5 3,7 -3,5 0,-6 -9,-4 9,-3 -8,10 1,10 -9,5 -3,4 -2,1 -3,-8 -5,4 -7,-2 -8)') + ) +); diff --git a/mysql-test/t/bug88781.test b/mysql-test/t/bug88781.test new file mode 100644 index 000000000000..effd108a196d --- /dev/null +++ b/mysql-test/t/bug88781.test @@ -0,0 +1,22 @@ +--echo # +--echo # Bug #26881798 / #88781 "handle_fatal_signal (sig=11) in replace_db_table" +--echo # fixed in 5.5.60, 5.6.40, 5.7.22, 8.0.4 +--echo # Dropping an index from a system table could cause a server exit +--echo # + +CALL mtr.add_suppression("Did not write failed 'GRANT DROP ON none\\.\\* TO 'bug88781'@'localhost'' into binary log while granting/revoking privileges in databases\\."); + +CREATE USER 'bug88781'@'localhost'; + +RENAME TABLE mysql.db TO mysql.bak; + +CREATE TABLE mysql.db ENGINE=MyISAM SELECT * FROM mysql.bak; + +--error ER_MISSING_KEY +GRANT DROP ON none.* TO 'bug88781'@'localhost'; + +DROP TABLE mysql.db; + +RENAME TABLE mysql.bak TO mysql.db; + +DROP USER 'bug88781'@'localhost'; diff --git a/mysql-test/t/bug88800.test b/mysql-test/t/bug88800.test new file mode 100644 index 000000000000..72a591cb0440 --- /dev/null +++ b/mysql-test/t/bug88800.test @@ -0,0 +1,36 @@ +--echo # +--echo # Bug #27230925 / #88800 "handle_fatal_signal (sig=11) in show_routine_grants" +--echo # fixed in 5.5.61, 5.6.41, 5.7.23, 8.0.12 +--echo # Mishandling of internal privilege structures could cause a server exit +--echo # + +CREATE TABLE t1 ( + id INT UNSIGNED AUTO_INCREMENT, + name CHAR(50), + PRIMARY KEY (id) +); +CREATE PROCEDURE p1() BEGIN END; + +CREATE USER 'bug88800'@'localhost'; +GRANT ALL ON test.* TO 'bug88800'@'localhost'; +GRANT EXECUTE ON PROCEDURE test.p1 TO 'bug88800'@'localhost' WITH GRANT OPTION; + +RENAME TABLE mysql.procs_priv TO mysql.procs_gone; + +--error ER_NO_SUCH_TABLE +FLUSH PRIVILEGES; +SHOW GRANTS FOR 'bug88800'@'localhost'; + +--error ER_NO_SUCH_TABLE +FLUSH PRIVILEGES; +SHOW GRANTS FOR 'bug88800'@'localhost'; + +RENAME TABLE mysql.procs_gone TO mysql.procs_priv; + +DROP USER 'bug88800'@'localhost'; + +DROP PROCEDURE p1; + +DROP TABLE t1; + +CALL mtr.add_suppression("Fatal error: Can't open and lock privilege tables: Table 'mysql.procs_priv' doesn't exist"); diff --git a/mysql-test/t/heap_btree.test b/mysql-test/t/heap_btree.test index b68cefc47fe4..9a8ec263675a 100644 --- a/mysql-test/t/heap_btree.test +++ b/mysql-test/t/heap_btree.test @@ -265,3 +265,10 @@ DELETE a1 FROM t1 AS a1, t1 AS a2 WHERE a1.a=a2.a; DROP TABLE t1; --echo End of 5.0 tests +--echo # +--echo # Bug#27799513: POTENTIAL DOUBLE FREE OR CORRUPTION OF HEAP INFO (HP_INFO) +--echo # + CREATE TABLE t1 (id INT, a VARCHAR(300) NOT NULL, KEY USING BTREE(a)) ENGINE=Heap; +INSERT t1 VALUES (1, REPEAT('a', 300)); +DROP TABLE t1; +--echo End of 5.5 tests diff --git a/mysql-test/t/percona_heap_blob.test b/mysql-test/t/percona_heap_blob.test index e82509893b93..d43d41ad102d 100644 --- a/mysql-test/t/percona_heap_blob.test +++ b/mysql-test/t/percona_heap_blob.test @@ -584,6 +584,7 @@ SET GLOBAL max_allowed_packet = 24 * 1024 * 1024; connect(con1, localhost, root,,); connection con1; +SET sql_mode = 'NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; SET default_storage_engine=MEMORY; diff --git a/mysys/mf_iocache2.c b/mysys/mf_iocache2.c index 095fe8384c08..17043450c3df 100644 --- a/mysys/mf_iocache2.c +++ b/mysys/mf_iocache2.c @@ -1,12 +1,6 @@ -<<<<<<< HEAD -/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. Copyright (c) 2018, Percona and/or its affiliates. All rights reserved. Copyright (c) 2010, 2017, MariaDB -||||||| merged common ancestors -/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. -======= -/* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. ->>>>>>> mysql-5.7.24 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 @@ -111,30 +105,14 @@ my_off_t my_b_append_tell(IO_CACHE* info) */ { volatile my_off_t save_pos; -<<<<<<< HEAD - save_pos= mysql_file_tell(info->file, MYF(0)); - mysql_file_seek(info->file, (my_off_t)0, MY_SEEK_END,MYF(0)); -||||||| merged common ancestors - save_pos = my_tell(info->file,MYF(0)); - my_seek(info->file,(my_off_t)0,MY_SEEK_END,MYF(0)); -======= save_pos = mysql_file_tell(info->file,MYF(0)); mysql_file_seek(info->file,(my_off_t)0,MY_SEEK_END,MYF(0)); ->>>>>>> mysql-5.7.24 /* Save the value of my_tell in res so we can see it when studying coredump */ DBUG_ASSERT(info->end_of_file - (info->append_read_pos-info->write_buffer) -<<<<<<< HEAD - == (res= mysql_file_tell(info->file, MYF(0)))); - mysql_file_seek(info->file, save_pos, MY_SEEK_SET,MYF(0)); -||||||| merged common ancestors - == (res=my_tell(info->file,MYF(0)))); - my_seek(info->file,save_pos,MY_SEEK_SET,MYF(0)); -======= == (res=mysql_file_tell(info->file,MYF(0)))); mysql_file_seek(info->file,save_pos,MY_SEEK_SET,MYF(0)); ->>>>>>> mysql-5.7.24 } #endif res = info->end_of_file + (info->write_pos-info->append_read_pos); @@ -234,13 +212,7 @@ size_t my_b_fill(IO_CACHE *info) if (info->seek_not_done) { /* File touched, do seek */ -<<<<<<< HEAD - if (mysql_file_seek(info->file, pos_in_file, MY_SEEK_SET,MYF(0)) == -||||||| merged common ancestors - if (my_seek(info->file,pos_in_file,MY_SEEK_SET,MYF(0)) == -======= if (mysql_file_seek(info->file,pos_in_file,MY_SEEK_SET,MYF(0)) == ->>>>>>> mysql-5.7.24 MY_FILEPOS_ERROR) { info->error= 0; @@ -260,13 +232,7 @@ size_t my_b_fill(IO_CACHE *info) } DBUG_EXECUTE_IF ("simulate_my_b_fill_error", {DBUG_SET("+d,simulate_file_read_error");}); -<<<<<<< HEAD - if ((length= mysql_file_read(info->file, info->buffer, max_length, -||||||| merged common ancestors - if ((length= my_read(info->file,info->buffer,max_length, -======= if ((length= mysql_file_read(info->file,info->buffer,max_length, ->>>>>>> mysql-5.7.24 info->myflags)) == (size_t) -1) { info->error= -1; diff --git a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xdr_utils.h b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xdr_utils.h index 7f2d09d52dc8..2f18bb4e56e6 100644 --- a/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xdr_utils.h +++ b/rapid/plugin/group_replication/libmysqlgcs/src/bindings/xcom/xcom/xdr_utils.h @@ -25,9 +25,7 @@ extern "C" { /** Initialize an array */ -#define def_init_xdr_array(name) \ - MY_ATTRIBUTE((unused)) \ - static inline void init_##name##_array(name##_array *x) +#define def_init_xdr_array(name) static inline void init_##name##_array(name##_array *x) #define init_xdr_array(name) \ def_init_xdr_array(name) { \ x->name##_array_len = 2; \ @@ -37,9 +35,7 @@ extern "C" { /** Free the contents of an array */ -#define def_free_xdr_array(name) \ - MY_ATTRIBUTE((unused)) \ - static inline void free_##name##_array(name##_array *x) +#define def_free_xdr_array(name) static inline void free_##name##_array(name##_array *x) #define free_xdr_array(name)\ def_free_xdr_array(name)\ {\ @@ -66,7 +62,6 @@ def_free_xdr_array(name)\ Define a set function for an array */ #define def_set_xdr_array(name) \ - MY_ATTRIBUTE((unused)) \ static inline void set_##name(name##_array *x, name a, u_int n) #define set_xdr_array(name) \ def_set_xdr_array(name) { \ @@ -78,9 +73,7 @@ def_free_xdr_array(name)\ /** Define a get function for an array */ -#define def_get_xdr_array(name) \ - MY_ATTRIBUTE((unused)) \ - static inline name get_##name(name##_array *x, u_int n) +#define def_get_xdr_array(name) static inline name get_##name(name##_array *x, u_int n) #define get_xdr_array(name) \ def_get_xdr_array(name) \ { \ @@ -94,7 +87,6 @@ def_free_xdr_array(name)\ Define a function to clone an array */ #define def_clone_xdr_array(name) \ - MY_ATTRIBUTE((unused)) \ static inline name##_array clone_##name##_array(name##_array x) #define clone_xdr_array(name) \ def_clone_xdr_array(name) { \ diff --git a/sql/handler.cc b/sql/handler.cc index de1578f3f61d..607bc9cd1718 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -2847,14 +2847,11 @@ handler *handler::clone(const char *name, MEM_ROOT *mem_root) void handler::ha_statistic_increment(ulonglong SSV::*offset) const { -<<<<<<< HEAD - DBUG_ASSERT(!table->in_use->status_var_aggregated); - (table->in_use->status_var.*offset)++; -||||||| merged common ancestors - (table->in_use->status_var.*offset)++; -======= - if (table && table->in_use) (table->in_use->status_var.*offset)++; ->>>>>>> mysql-5.7.24 + if (table && table->in_use) + { + DBUG_ASSERT(!table->in_use->status_var_aggregated); + (table->in_use->status_var.*offset)++; + } } diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 563294520174..bffe8753c857 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -3490,7 +3490,6 @@ static int init_thread_environment() &LOCK_compress_gtid_table, MY_MUTEX_INIT_FAST); mysql_cond_init(key_COND_compress_gtid_table, &COND_compress_gtid_table); -<<<<<<< HEAD mysql_mutex_init(key_LOCK_global_user_client_stats, &LOCK_global_user_client_stats, MY_MUTEX_INIT_FAST); @@ -3499,13 +3498,6 @@ static int init_thread_environment() mysql_mutex_init(key_LOCK_global_index_stats, &LOCK_global_index_stats, MY_MUTEX_INIT_FAST); - mysql_mutex_init(key_LOCK_group_replication_handler, - &LOCK_group_replication_handler, MY_MUTEX_INIT_FAST); -||||||| merged common ancestors - mysql_mutex_init(key_LOCK_group_replication_handler, - &LOCK_group_replication_handler, MY_MUTEX_INIT_FAST); -======= ->>>>>>> mysql-5.7.24 #ifndef EMBEDDED_LIBRARY Events::init_mutexes(); #if defined(_WIN32) diff --git a/sql/share/errmsg-utf8.txt b/sql/share/errmsg-utf8.txt index 9b17e2279070..ac8bae86c3d2 100644 --- a/sql/share/errmsg-utf8.txt +++ b/sql/share/errmsg-utf8.txt @@ -7771,7 +7771,9 @@ WARN_DEPRECATED_MAXDB_SQL_MODE_FOR_TIMESTAMP ER_XA_REPLICATION_FILTERS eng "The use of replication filters with XA transactions is not supported, and can lead to an undefined state in the replication slave." -<<<<<<< HEAD +ER_CANT_OPEN_ERROR_LOG + eng "Could not open file '%s' for error logging%s%s" + ER_COMPRESSED_COLUMN_USED_AS_KEY eng "Compressed column '%-.192s' is not allowed in the key list" @@ -7793,12 +7795,6 @@ ER_COMPRESSION_DICTIONARY_DATA_TOO_LONG ER_COMPRESSION_DICTIONARY_IS_REFERENCED eng "Compression dictionary '%-.192s' is in use" -||||||| merged common ancestors -======= -ER_CANT_OPEN_ERROR_LOG - eng "Could not open file '%s' for error logging%s%s" - ->>>>>>> mysql-5.7.24 # # End of 5.7 error messages. # diff --git a/sql/sql_table.cc b/sql/sql_table.cc index cdc02bd1f3dc..c1ebae0db852 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -4631,16 +4631,8 @@ mysql_prepare_create_table(THD *thd, const char *error_schema_name, if (key_part_length > file->max_key_part_length(create_info) && key->type != KEYTYPE_FULLTEXT) { -<<<<<<< HEAD - key_part_length= file->max_key_part_length(); - if (key->type & KEYTYPE_MULTIPLE) -||||||| merged common ancestors - key_part_length= file->max_key_part_length(); - if (key->type == KEYTYPE_MULTIPLE) -======= key_part_length= file->max_key_part_length(create_info); - if (key->type == KEYTYPE_MULTIPLE) ->>>>>>> mysql-5.7.24 + if (key->type & KEYTYPE_MULTIPLE) { /* not a critical problem */ push_warning_printf(thd, Sql_condition::SL_WARNING, diff --git a/storage/federated/ha_federated.cc b/storage/federated/ha_federated.cc index 50f04532f457..e5e33f6bc68e 100644 --- a/storage/federated/ha_federated.cc +++ b/storage/federated/ha_federated.cc @@ -1428,13 +1428,7 @@ bool ha_federated::create_where_from_key(String *to, } break; } -<<<<<<< HEAD - // fallthrough -||||||| merged common ancestors - break; -======= // Fall through ->>>>>>> mysql-5.7.24 case HA_READ_KEY_OR_NEXT: DBUG_PRINT("info", ("federated HA_READ_KEY_OR_NEXT %d", i)); if (emit_key_part_name(&tmp, key_part) || @@ -1454,13 +1448,7 @@ bool ha_federated::create_where_from_key(String *to, goto err; break; } -<<<<<<< HEAD - // fallthrough -||||||| merged common ancestors - break; -======= // Fall through ->>>>>>> mysql-5.7.24 case HA_READ_KEY_OR_PREV: DBUG_PRINT("info", ("federated HA_READ_KEY_OR_PREV %d", i)); if (emit_key_part_name(&tmp, key_part) || diff --git a/storage/heap/ha_heap.h b/storage/heap/ha_heap.h index c56350c096f1..041489a0d2d9 100644 --- a/storage/heap/ha_heap.h +++ b/storage/heap/ha_heap.h @@ -59,20 +59,12 @@ class ha_heap: public handler HA_ONLY_WHOLE_INDEX | HA_KEY_SCAN_NOT_ROR); } const key_map *keys_to_use_for_scanning() { return &btree_keys; } -<<<<<<< HEAD uint max_supported_keys() const { return HP_MAX_KEY; } uint max_supported_key_length() const { return HP_MAX_KEY_LENGTH; } - uint max_supported_key_part_length() const - { return HP_MAX_KEY_LENGTH; } -||||||| merged common ancestors - uint max_supported_keys() const { return MAX_KEY; } - uint max_supported_key_part_length() const { return MAX_KEY_LENGTH; } -======= - uint max_supported_keys() const { return MAX_KEY; } uint max_supported_key_part_length(HA_CREATE_INFO *create_info MY_ATTRIBUTE((unused))) const - { return MAX_KEY_LENGTH; } ->>>>>>> mysql-5.7.24 + { return HP_MAX_KEY_LENGTH; } + double scan_time() { return (double) (stats.records+stats.deleted) / 20.0+10; } double read_time(uint index, uint ranges, ha_rows rows) diff --git a/storage/heap/hp_create.c b/storage/heap/hp_create.c index 8a05bd95a2a4..f3380976049f 100644 --- a/storage/heap/hp_create.c +++ b/storage/heap/hp_create.c @@ -231,59 +231,16 @@ int heap_create(const char *name, HP_CREATE_INFO *create_info, switch (keyinfo->seg[j].type) { case HA_KEYTYPE_VARBINARY1: case HA_KEYTYPE_VARTEXT1: -<<<<<<< HEAD -||||||| merged common ancestors - keyinfo->flag|= HA_VAR_LENGTH_KEY; - length+= 2; - /* Save number of bytes used to store length */ - keyinfo->seg[j].bit_start= 1; - break; -======= - keyinfo->flag|= HA_VAR_LENGTH_KEY; - /* - For BTREE algorithm, key length, greater than or equal - to 255, is packed on 3 bytes. - */ - if (keyinfo->algorithm == HA_KEY_ALG_BTREE) - length+= size_to_store_key_length(keyinfo->seg[j].length); - else - length+= 2; - /* Save number of bytes used to store length */ - keyinfo->seg[j].bit_start= 1; - break; ->>>>>>> mysql-5.7.24 case HA_KEYTYPE_VARBINARY2: case HA_KEYTYPE_VARTEXT2: -<<<<<<< HEAD - length+= 2; -||||||| merged common ancestors - keyinfo->flag|= HA_VAR_LENGTH_KEY; - length+= 2; - /* Save number of bytes used to store length */ - keyinfo->seg[j].bit_start= 2; - /* - Make future comparison simpler by only having to check for - one type - */ - keyinfo->seg[j].type= HA_KEYTYPE_VARTEXT1; -======= - keyinfo->flag|= HA_VAR_LENGTH_KEY; /* For BTREE algorithm, key length, greater than or equal to 255, is packed on 3 bytes. */ - if (keyinfo->algorithm == HA_KEY_ALG_BTREE) - length+= size_to_store_key_length(keyinfo->seg[j].length); + if(keyinfo->algorithm == HA_KEY_ALG_BTREE) + length += size_to_store_key_length(keyinfo->seg[j].length); else - length+= 2; - /* Save number of bytes used to store length */ - keyinfo->seg[j].bit_start= 2; - /* - Make future comparison simpler by only having to check for - one type - */ - keyinfo->seg[j].type= HA_KEYTYPE_VARTEXT1; ->>>>>>> mysql-5.7.24 + length += 2; break; default: break; diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index 91356bea1be8..ab74584fb866 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -3750,12 +3750,7 @@ ha_innobase::reset_template(void) m_prebuilt->keep_other_fields_on_keyread = 0; m_prebuilt->read_just_key = 0; m_prebuilt->in_fts_query = 0; -<<<<<<< HEAD - m_prebuilt->m_end_range = false; -||||||| merged common ancestors -======= m_prebuilt->m_end_range = false; ->>>>>>> mysql-5.7.24 /* Reset index condition pushdown state. */ if (m_prebuilt->idx_cond) { diff --git a/storage/innobase/include/univ.i b/storage/innobase/include/univ.i index cd8fbfa10530..8210693c1103 100644 --- a/storage/innobase/include/univ.i +++ b/storage/innobase/include/univ.i @@ -47,7 +47,7 @@ Created 1/20/1994 Heikki Tuuri #define INNODB_VERSION_BUGFIX MYSQL_VERSION_PATCH #ifndef PERCONA_INNODB_VERSION -#define PERCONA_INNODB_VERSION 24 +#define PERCONA_INNODB_VERSION 26 #endif /* The following is the InnoDB version as shown in From 3511dc73c4b8a841ead68c33dfdf381c7c1fd5b5 Mon Sep 17 00:00:00 2001 From: Yura Sorokin Date: Tue, 27 Nov 2018 17:42:41 +0200 Subject: [PATCH 1217/1221] Implemented PS-4709 (Merge MySQL 5.7.24) (reverted e93e8db) https://jira.percona.com/browse/PS-4709 Reverted mysql/mysql-server@e93e8db "Bug#28505638 REWRITE INNODB TESTS TO IGNORE EXPECTED ASAN ERRORS" because it just suppresses ASan errors instead of fixing them. See Bug #93164 "Memory leak in innochecksum utility detected by ASan" (https://bugs.mysql.com/bug.php?id=93164), Bug #93165 "Memory leak in sync_latch_meta_init() after mysqld shutdown detected by ASan" (https://bugs.mysql.com/bug.php?id=93165) and Bug #92131 "ASan: Direct leak of 272 byte(s) in main.mysqlpump_partial_bkp MTR test case" (https://bugs.mysql.com/bug.php?id=92131). --- mysql-test/suite/innodb/t/alter_kill.test | 2 +- .../suite/innodb/t/innodb-wl6045-linux.test | 2 +- .../suite/innodb/t/innodb-wl6445-2.test | 2 +- .../suite/innodb/t/innodb_bug70867.test | 2 +- .../suite/innodb/t/innodb_page_size_func.test | 10 +++---- .../t/innodb_pagesize_max_recordsize.test | 2 +- mysql-test/suite/innodb/t/log_corruption.test | 24 +++++++-------- mysql-test/suite/innodb/t/log_file.test | 30 +++++++++---------- mysql-test/suite/innodb/t/log_file_name.test | 16 +++++----- mysql-test/suite/innodb/t/log_file_size.test | 12 ++++---- .../suite/innodb/t/log_file_size_1.test | 8 ++--- .../suite/innodb/t/tablespace_crash.test | 4 +-- .../suite/innodb_zip/t/innochecksum.test | 2 +- mysql-test/suite/innodb_zip/t/wl6560.test | 4 +-- 14 files changed, 60 insertions(+), 60 deletions(-) diff --git a/mysql-test/suite/innodb/t/alter_kill.test b/mysql-test/suite/innodb/t/alter_kill.test index 25787916c8e6..432716c6ce66 100644 --- a/mysql-test/suite/innodb/t/alter_kill.test +++ b/mysql-test/suite/innodb/t/alter_kill.test @@ -135,7 +135,7 @@ XA PREPARE 'x'; -- echo # Attempt to start without an *.ibd file. let SEARCH_FILE= $MYSQLTEST_VARDIR/log/my_restart.err; --- error 3,42 +-- error 3 -- exec $MYSQLD_CMD --core-file --console > $SEARCH_FILE 2>&1; let SEARCH_PATTERN= \[ERROR\] InnoDB: Tablespace [0-9]+ was not found at .*test.bug16735660.ibd; diff --git a/mysql-test/suite/innodb/t/innodb-wl6045-linux.test b/mysql-test/suite/innodb/t/innodb-wl6045-linux.test index 88f0f6f16dc0..c1263a80d837 100644 --- a/mysql-test/suite/innodb/t/innodb-wl6045-linux.test +++ b/mysql-test/suite/innodb/t/innodb-wl6045-linux.test @@ -390,7 +390,7 @@ select * from t1; --echo # Test[5] for lock. --echo # Test Scenario: As mysqld is running, & then start the innochecksum which must fail. ---error 1,42 +--error 1 --exec $INNOCHECKSUM $MYSQLD_DATADIR/test/t1.ibd 2> $SEARCH_FILE let SEARCH_PATTERN=Error: Unable to lock file:: $MYSQLD_DATADIR/test/t1.ibd; --source include/search_pattern_in_file.inc diff --git a/mysql-test/suite/innodb/t/innodb-wl6445-2.test b/mysql-test/suite/innodb/t/innodb-wl6445-2.test index 3274e3e4ea87..22e00ec583c4 100644 --- a/mysql-test/suite/innodb/t/innodb-wl6445-2.test +++ b/mysql-test/suite/innodb/t/innodb-wl6445-2.test @@ -178,7 +178,7 @@ let SEARCH_FILE= $error_log; --echo # This confirms server is not automatically started in read-only mode. #---------------------------------------------------------------------------------- # Detailed explanations of what happens are placed nearby the checks. ---error 1,42 +--error 1 --exec $MYSQLD_CMD --core-file --loose-console > $error_log 2>&1 # We get depending on the platform either "./ibdata1" or ".\ibdata1". diff --git a/mysql-test/suite/innodb/t/innodb_bug70867.test b/mysql-test/suite/innodb/t/innodb_bug70867.test index 71080c9cbebd..692d92e07f78 100644 --- a/mysql-test/suite/innodb/t/innodb_bug70867.test +++ b/mysql-test/suite/innodb/t/innodb_bug70867.test @@ -25,7 +25,7 @@ let $args = --loose-console --core-file > $SEARCH_FILE 2>&1; --mkdir $MYSQL_DATA_DIR/tmpdata --chmod 0400 $MYSQL_DATA_DIR/tmpdata ---error 1,42 +--error 1 --exec $MYSQLD_CMD --innodb_data_home_dir=$MYSQL_DATA_DIR/tmpdata $args let SEARCH_PATTERN = returned OS error 113; --source ./include/search_pattern.inc diff --git a/mysql-test/suite/innodb/t/innodb_page_size_func.test b/mysql-test/suite/innodb/t/innodb_page_size_func.test index 93d5af83ceef..3255d1a95eef 100644 --- a/mysql-test/suite/innodb/t/innodb_page_size_func.test +++ b/mysql-test/suite/innodb/t/innodb_page_size_func.test @@ -120,7 +120,7 @@ let $mysqld=$MYSQLD_CMD --core-file --console > $error_log 2>&1 --innodb-page-si #---------------------------------------------------------------------------------- --echo # 1.1 The value assigned is a number. # Detailed explanations of what happens are placed nearby the checks. ---error 1,42 +--error 1 --exec $mysqld=$other_page_size if ( $default_page_size != $other_page_size ) { @@ -134,7 +134,7 @@ let SEARCH_PATTERN=Data file '.*ibdata1' uses page size $start_page_size, but th let SEARCH_PATTERN= \[ERROR\] Aborting; --source include/search_pattern_in_file.inc --echo # 1.2 The value assigned is a number followed by 'k'. ---error 1,42 +--error 1 --exec $mysqld=$other_page_size_nk if ( $default_page_size != $other_page_size ) { @@ -159,7 +159,7 @@ let SEARCH_PATTERN= \[ERROR\] Aborting; # 1. not supported # 2. below the smallest supported one # The restart attempt has to fail. ---error 1,42 +--error 1 --exec $mysqld=$out_range_page_size # The innodb page size gets raised to the lowest or biggest legal value. let SEARCH_PATTERN= \[Warning\] option 'innodb-page-size': unsigned value $out_range_page_size adjusted to $adjust_page_size; @@ -185,7 +185,7 @@ if ($zero_test) { --echo # We do not omit the test. } ---error 1,42 +--error 1 --exec $mysqld=garbage # General server properties cause that # - the plain wrong value "garbage" assigned to innodb page size gets @@ -220,7 +220,7 @@ let SEARCH_PATTERN= \[ERROR\] InnoDB: Invalid page size=$illegal_pagesize; --echo # k is a legal page size. #--------------------------------------------------------------------------------- # The restart attempt has to fail. ---error 1,42 +--error 1 --exec $mysqld=$other_page_size_nkaramel # The plain wrong value "karamel" assigned to innodb page size seems # to get mangled to "k" which is a legal value. diff --git a/mysql-test/suite/innodb/t/innodb_pagesize_max_recordsize.test b/mysql-test/suite/innodb/t/innodb_pagesize_max_recordsize.test index 2a94bf27d7b2..07cdfb4db014 100644 --- a/mysql-test/suite/innodb/t/innodb_pagesize_max_recordsize.test +++ b/mysql-test/suite/innodb/t/innodb_pagesize_max_recordsize.test @@ -204,7 +204,7 @@ DROP TABLE tab5; let NEW_CMD = $MYSQLD --no-defaults $KEYRING_PLUGIN_OPT --lc_messages_dir=$MYSQL_SHAREDIR --innodb_page_size=64K --basedir=$MYSQLD_BASEDIR --datadir=$MYSQLD_DATADIR1 --innodb_log_file_size=5M --innodb_log_files_in_group=2 --innodb_undo_tablespaces=0>$MYSQLTEST_VARDIR/tmp/bootstrap.log 2>&1; --echo # Check Server startup failure when page size 64K ---error 1,42 +--error 1 --exec $NEW_CMD # Search for particular warning during server startup diff --git a/mysql-test/suite/innodb/t/log_corruption.test b/mysql-test/suite/innodb/t/log_corruption.test index 33553330f19f..56c49bffe914 100644 --- a/mysql-test/suite/innodb/t/log_corruption.test +++ b/mysql-test/suite/innodb/t/log_corruption.test @@ -8,7 +8,7 @@ let $args=--no-defaults --datadir=$newdir --secure-file-priv="" --loose-skip-sha --echo # redo log from before MySQL 5.7.9 --exec unzip $MYSQL_TEST_DIR/suite/innodb/t/log_corruption.zip -d $newdir > $SEARCH_FILE ---error 1,42 +--error 1 --exec $MYSQLD $args let SEARCH_PATTERN=InnoDB: Upgrade after a crash is not supported. This redo log was created before MySQL 5\\.7\\.9\\.; --source include/search_pattern_in_file.inc @@ -16,7 +16,7 @@ let SEARCH_PATTERN=InnoDB: Upgrade after a crash is not supported. This redo log --echo # redo log from before MySQL 5.7.9, with corrupted log checkpoint --remove_file $newdir/ib_logfile0 --copy_file $newdir/ib_logfile1 $newdir/ib_logfile0 ---error 1,42 +--error 1 --exec $MYSQLD $args let SEARCH_PATTERN=InnoDB: Upgrade after a crash is not supported. This redo log was created before MySQL 5\\.7\\.9, and we did not find a valid checkpoint; --source include/search_pattern_in_file.inc @@ -24,7 +24,7 @@ let SEARCH_PATTERN=InnoDB: Upgrade after a crash is not supported. This redo log --echo # redo log from before MySQL 5.7.9, with corrupted log block --remove_file $newdir/ib_logfile0 --exec unzip $MYSQL_TEST_DIR/suite/innodb/t/log_corruption0.zip -d $newdir > $SEARCH_FILE ---error 1,42 +--error 1 --exec $MYSQLD $args let SEARCH_PATTERN=InnoDB: Upgrade after a crash is not supported. This redo log was created before MySQL 5\\.7\\.9, and it appears corrupted; --source include/search_pattern_in_file.inc @@ -32,7 +32,7 @@ let SEARCH_PATTERN=InnoDB: Upgrade after a crash is not supported. This redo log --echo # redo log from "after" MySQL 5.7.9, but with invalid header checksum --remove_file $newdir/ib_logfile0 --exec unzip $MYSQL_TEST_DIR/suite/innodb/t/log_corruption1.zip -d $newdir > $SEARCH_FILE ---error 1,42 +--error 1 --exec $MYSQLD $args let SEARCH_PATTERN=InnoDB: Invalid redo log header checksum; --source include/search_pattern_in_file.inc @@ -40,7 +40,7 @@ let SEARCH_PATTERN=InnoDB: Invalid redo log header checksum; --echo # distant future redo log format, with valid header checksum --remove_file $newdir/ib_logfile0 --exec unzip $MYSQL_TEST_DIR/suite/innodb/t/log_corruption2.zip -d $newdir > $SEARCH_FILE ---error 1,42 +--error 1 --exec $MYSQLD $args let SEARCH_PATTERN=InnoDB: Unsupported redo log format. The redo log was created with malicious intentions, or perhaps\. Please follow the instructions at http://dev.mysql.com/doc/refman/5.7/en/upgrading-downgrading.html; --source include/search_pattern_in_file.inc @@ -48,7 +48,7 @@ let SEARCH_PATTERN=InnoDB: Unsupported redo log format. The redo log was created --echo # valid header, but old-format checkpoint blocks --remove_file $newdir/ib_logfile0 --exec unzip $MYSQL_TEST_DIR/suite/innodb/t/log_corruption3.zip -d $newdir > $SEARCH_FILE ---error 1,42 +--error 1 --exec $MYSQLD $args let SEARCH_PATTERN=InnoDB: No valid checkpoint found .corrupted redo log; --source include/search_pattern_in_file.inc @@ -58,7 +58,7 @@ let SEARCH_PATTERN=InnoDB: No valid checkpoint found .corrupted redo log; --exec unzip $MYSQL_TEST_DIR/suite/innodb/t/log_corruption4.zip -d $newdir > $SEARCH_FILE # Anything below innodb_force_recovery=6 must find a valid redo log. # Missing tablespace files are tolerated already with innodb_force_recovery=1. ---error 1,42 +--error 1 --exec $MYSQLD $args --innodb-force-recovery=5 let SEARCH_PATTERN=InnoDB: Log block 2372 at lsn 1213952 has valid header, but checksum field contains 144444122, should be 3362026715; --source include/search_pattern_in_file.inc @@ -67,7 +67,7 @@ let SEARCH_PATTERN=InnoDB: Ignoring the redo log due to missing MLOG_CHECKPOINT let SEARCH_PATTERN=Plugin 'InnoDB' registration as a STORAGE ENGINE failed; --source include/search_pattern_in_file.inc --echo # --innodb-force-recovery=6 (skip the entire redo log) ---error 1,42 +--error 1 --exec $MYSQLD $args --innodb-force-recovery=6 let SEARCH_PATTERN=InnoDB: Cannot create sys_virtual system tables. running in read-only mode; --source include/search_pattern_in_file.inc @@ -77,7 +77,7 @@ let SEARCH_PATTERN=InnoDB: Cannot create sys_virtual system tables. running in r --exec unzip $MYSQL_TEST_DIR/suite/innodb/t/log_corruption4a.zip -d $newdir > $SEARCH_FILE # Anything below innodb_force_recovery=6 must find a valid redo log. # Missing tablespace files are tolerated already with innodb_force_recovery=1. ---error 1,42 +--error 1 --exec $MYSQLD $args --innodb-force-recovery=5 let SEARCH_PATTERN=InnoDB: Ignoring the redo log due to missing MLOG_CHECKPOINT between the checkpoint 1213964 and the end 1213952\.; --source include/search_pattern_in_file.inc @@ -85,7 +85,7 @@ let SEARCH_PATTERN=Plugin 'InnoDB' registration as a STORAGE ENGINE failed; --source include/search_pattern_in_file.inc --echo # --innodb-force-recovery=6 (skip the entire redo log) ---error 1,42 +--error 1 --exec $MYSQLD $args --innodb-force-recovery=6 let SEARCH_PATTERN=InnoDB: Cannot create sys_virtual system tables. running in read-only mode; --source include/search_pattern_in_file.inc @@ -94,7 +94,7 @@ let SEARCH_PATTERN=InnoDB: Cannot create sys_virtual system tables. running in r --echo # valid header, valid checkpoint 1, all-zero (invalid) checkpoint 2 --remove_file $newdir/ib_logfile0 --exec unzip $MYSQL_TEST_DIR/suite/innodb/t/log_corruption5.zip -d $newdir > $SEARCH_FILE ---error 1,42 +--error 1 --exec $MYSQLD $args let SEARCH_PATTERN=InnoDB: Log scan progressed past the checkpoint lsn 1213964; --source include/search_pattern_in_file.inc @@ -111,7 +111,7 @@ let SEARCH_PATTERN=InnoDB: Set innodb_force_recovery to ignore this error; --echo # valid header, invalid checkpoint 1, valid checkpoint 2 --remove_file $newdir/ib_logfile0 --exec unzip $MYSQL_TEST_DIR/suite/innodb/t/log_corruption6.zip -d $newdir > $SEARCH_FILE ---error 1,42 +--error 1 --exec $MYSQLD $args let SEARCH_PATTERN=InnoDB: The log file was created by mysqlbackup --apply-log at ibbackup was here!!!1!\. The following crash recovery is part of a normal restore\.; --source include/search_pattern_in_file.inc diff --git a/mysql-test/suite/innodb/t/log_file.test b/mysql-test/suite/innodb/t/log_file.test index 9b848382773a..2559c285e308 100644 --- a/mysql-test/suite/innodb/t/log_file.test +++ b/mysql-test/suite/innodb/t/log_file.test @@ -25,7 +25,7 @@ EOF --echo # Start mysqld without the possibility to create innodb_undo_tablespaces --mkdir $bugdir/undo002 ---error 1,42 +--error 1 --exec $MYSQLD $args let SEARCH_PATTERN=\[ERROR\] InnoDB: Could not create undo tablespace '.*undo002'; --source include/search_pattern_in_file.inc @@ -43,7 +43,7 @@ let SEARCH_PATTERN=\[ERROR\] Aborting; --list_files $bugdir --echo # Start mysqld with non existent innodb_log_group_home_dir ---error 1,42 +--error 1 --exec $MYSQLD $args --innodb_log_group_home_dir=/path/to/non-existent/ let SEARCH_PATTERN=File .path.to.non-existent.*ib_logfile101: 'create' returned OS error \d+; --source include/search_pattern_in_file.inc @@ -59,7 +59,7 @@ let SEARCH_PATTERN=\[ERROR\] Aborting; # complaining about mysql.* tables. This is sufficient for testing # missing tablespaces. --echo # Start mysqld to create tablespaces according to my.cnf ---error 1,42 +--error 1 --exec $MYSQLD $args --skip-grant-tables --innodb-unknown-parameter let SEARCH_PATTERN=unknown option '--innodb-unknown-parameter'; --source include/search_pattern_in_file.inc @@ -78,7 +78,7 @@ let SEARCH_PATTERN=\[ERROR\] Aborting; --echo # 1. With ibdata2, Without ibdata1 --remove_file $bugdir/ibdata1 ---error 1,42 +--error 1 --exec $MYSQLD $args let SEARCH_PATTERN=The innodb_system data file 'ibdata1' was not found but one of the other data files 'ibdata2' exists; --source include/search_pattern_in_file.inc @@ -90,7 +90,7 @@ let SEARCH_PATTERN=\[ERROR\] Aborting; --echo # 2. With ibdata1, without ibdata2 --remove_file $bugdir/ibdata2 ---error 1,42 +--error 1 --exec $MYSQLD $args let SEARCH_PATTERN=Tablespace size stored in header is \d+ pages, but; --source include/search_pattern_in_file.inc @@ -104,7 +104,7 @@ let SEARCH_PATTERN=\[ERROR\] Aborting; --remove_file $bugdir/ibdata1 --remove_file $bugdir/ibdata2 --list_files $bugdir ---error 1,42 +--error 1 --exec $MYSQLD $args let SEARCH_PATTERN=undo tablespace .*undo001.* exists\. Creating system tablespace with existing undo tablespaces is not supported\. Please delete all undo tablespaces before creating new system tablespace\.; --source include/search_pattern_in_file.inc @@ -118,7 +118,7 @@ let SEARCH_PATTERN=\[ERROR\] Aborting; --remove_files_wildcard $bugdir ibdata* --remove_files_wildcard $bugdir ib_logfile* --list_files $bugdir ---error 1,42 +--error 1 --exec $MYSQLD $args let SEARCH_PATTERN=undo tablespace .*undo001.* exists\. Creating system tablespace with existing undo tablespaces is not supported\. Please delete all undo tablespaces before creating new system tablespace\.; --source include/search_pattern_in_file.inc @@ -134,7 +134,7 @@ let SEARCH_PATTERN=\[ERROR\] Aborting; --remove_files_wildcard $bugdir ib_logfile* --remove_file $bugdir/undo002 --list_files $bugdir ---error 1,42 +--error 1 --exec $MYSQLD $args let SEARCH_PATTERN=undo tablespace .*undo001.* exists\. Creating system tablespace with existing undo tablespaces is not supported\. Please delete all undo tablespaces before creating new system tablespace\.; --source include/search_pattern_in_file.inc @@ -151,7 +151,7 @@ let SEARCH_PATTERN=\[ERROR\] Aborting; --remove_file $bugdir/undo001 --remove_file $bugdir/undo002 --list_files $bugdir ---error 1,42 +--error 1 --exec $MYSQLD $args let SEARCH_PATTERN=undo tablespace .*undo003.* exists\. Creating system tablespace with existing undo tablespaces is not supported\. Please delete all undo tablespaces before creating new system tablespace\.; --source include/search_pattern_in_file.inc @@ -164,7 +164,7 @@ let SEARCH_PATTERN=\[ERROR\] Aborting; --echo # 7. With ibdata files & Without undo002 --remove_file $bugdir/undo002 --list_files $bugdir ---error 1,42 +--error 1 --exec $MYSQLD $args let SEARCH_PATTERN=Expected to open 3 undo tablespaces but was able; --source include/search_pattern_in_file.inc @@ -179,7 +179,7 @@ let SEARCH_PATTERN=\[ERROR\] Aborting; --remove_file $bugdir/undo001 --remove_file $bugdir/undo002 --list_files $bugdir ---error 1,42 +--error 1 --exec $MYSQLD $args let SEARCH_PATTERN=Expected to open 3 undo tablespaces but was able; --source include/search_pattern_in_file.inc @@ -196,7 +196,7 @@ let SEARCH_PATTERN=\[ERROR\] Aborting; --remove_files_wildcard $bugdir undo00* --remove_file $bugdir/ib_logfile1 --list_files $bugdir ---error 1,42 +--error 1 --exec $MYSQLD $args let SEARCH_PATTERN=redo log file .*ib_logfile0.* exists\. Creating system tablespace with existing redo log files is not recommended\. Please delete all redo log files before creating new system tablespace\.; --source include/search_pattern_in_file.inc @@ -210,7 +210,7 @@ let SEARCH_PATTERN=\[ERROR\] Aborting; #--remove_file $bugdir/ib_logfile0 # The below would start the server. Since we cannot start a parallel # server, do not test the below case -#--error 1,42 +#--error 1 #--exec $MYSQLD $args # clean up & Restore @@ -219,7 +219,7 @@ let SEARCH_PATTERN=\[ERROR\] Aborting; --echo # 11. With ibdata*, without ib_logfile1 --remove_file $bugdir/ib_logfile1 --list_files $bugdir ---error 1,42 +--error 1 --exec $MYSQLD $args let SEARCH_PATTERN=Only one log file found; --source include/search_pattern_in_file.inc @@ -232,7 +232,7 @@ let SEARCH_PATTERN=\[ERROR\] Aborting; --echo # 12. With ibdata*, without ib_logfile2 --remove_file $bugdir/ib_logfile2 --list_files $bugdir ---error 1,42 +--error 1 --exec $MYSQLD $args let SEARCH_PATTERN=Resizing redo log from \d+\*\d+ to \d+\*\d+ pages, LSN=\d+; --source include/search_pattern_in_file.inc diff --git a/mysql-test/suite/innodb/t/log_file_name.test b/mysql-test/suite/innodb/t/log_file_name.test index 8a2054dd2241..abe80bb81b7f 100644 --- a/mysql-test/suite/innodb/t/log_file_name.test +++ b/mysql-test/suite/innodb/t/log_file_name.test @@ -35,7 +35,7 @@ let $mysqld=$MYSQLD_CMD --core-file --console > $SEARCH_FILE 2>&1; # This could fail to refuse startup, in case there was a log # checkpoint after the INSERT. That is what we checked above. ---error 1,42 +--error 1 --exec $mysqld let SEARCH_PATTERN= InnoDB: Ignoring data file '.*t2.ibd' with space ID \d+. Another data file called .*t1.ibd exists with the same space ID; @@ -49,7 +49,7 @@ let SEARCH_PATTERN= InnoDB: Ignoring data file '.*t2.ibd' with space ID \d+. Ano --echo # Fault 2: Wrong space_id in a dirty file, and a missing file. --move_file $MYSQLD_DATADIR/test/t3.ibd $MYSQLD_DATADIR/test/t1.ibd ---error 3,42 +--error 3 --exec $mysqld let SEARCH_PATTERN= InnoDB: Ignoring data file '.*t1.ibd' with space ID; @@ -67,7 +67,7 @@ let SEARCH_PATTERN= InnoDB: Tablespace \d+ was not found at.*t3.ibd; --move_file $MYSQLD_DATADIR/test/t2.ibd $MYSQLD_DATADIR/test/t3.ibd --move_file $MYSQLD_DATADIR/test/t.ibd $MYSQLD_DATADIR/test/t2.ibd ---error 3,42 +--error 3 --exec $mysqld let SEARCH_PATTERN= InnoDB: Ignoring data file '.*t[23].ibd' with space ID; @@ -88,7 +88,7 @@ let SEARCH_PATTERN= InnoDB: Set innodb_force_recovery=1 to ignore this and to pe --echo # Fault 4: Missing data file ---error 3,42 +--error 3 --exec $mysqld let SEARCH_PATTERN= InnoDB: Tablespace \d+ was not found at .*t[12].ibd. @@ -108,7 +108,7 @@ let SEARCH_PATTERN= InnoDB: Tablespace \d+ was not found at .*t[12].ibd. # Create a short file. --exec echo "" > $MYSQLD_DATADIR/test/t2.ibd ---error 3,42 +--error 3 --exec $mysqld let SEARCH_PATTERN= \[ERROR\] InnoDB: Datafile .*t2.*\. Cannot determine the space ID from the first 64 pages; @@ -188,7 +188,7 @@ EOF --copy_file $MYSQLD_DATADIR/test/u6.ibd $MYSQLD_DATADIR/test/u4.ibd ---error 1,42 +--error 1 --exec $mysqld --innodb-force-recovery=1 let SEARCH_PATTERN= \[ERROR\] InnoDB: Header page consists of zero bytes in datafile: .*u1.ibd; @@ -213,7 +213,7 @@ let SEARCH_PATTERN= \[ERROR\] InnoDB: Cannot read first page of .*u2.ibd.*; --echo # Fault 7: Missing or wrong data file and innodb_force_recovery ---error 1,42 +--error 1 --exec $mysqld --innodb-force-recovery=1 let SEARCH_PATTERN= \[ERROR\] InnoDB: Header page consists of zero bytes in datafile: .*u1.ibd; @@ -227,7 +227,7 @@ let SEARCH_PATTERN= \[ERROR\] InnoDB: Cannot rename '.*u5.ibd' to '.*u6.ibd' for --remove_file $MYSQLD_DATADIR/test/u6.ibd ---error 1,42 +--error 1 --exec $mysqld --innodb-force-recovery=1 --innodb-nonexistent-option let SEARCH_PATTERN= \[ERROR\] unknown option '--innodb-nonexistent-option'; --source include/search_pattern_in_file.inc diff --git a/mysql-test/suite/innodb/t/log_file_size.test b/mysql-test/suite/innodb/t/log_file_size.test index 6650c5a45357..a08dd3d63ae4 100644 --- a/mysql-test/suite/innodb/t/log_file_size.test +++ b/mysql-test/suite/innodb/t/log_file_size.test @@ -68,7 +68,7 @@ let SEARCH_PATTERN= InnoDB: Starting an apply batch of log records; --source include/search_pattern_in_file.inc --remove_file $SEARCH_FILE ---error 1,42 +--error 1 --exec $MYSQLD_CMD $args --innodb-read-only let SEARCH_PATTERN= InnoDB: Recovery skipped, --innodb-read-only set!; --source include/search_pattern_in_file.inc @@ -93,7 +93,7 @@ let SEARCH_PATTERN= InnoDB: Resizing redo log from 3\*[0-9]+ to 2\*[0-9]+ pages; --source include/search_pattern_in_file.inc --remove_file $SEARCH_FILE ---error 1,42 +--error 1 --exec $MYSQLD_CMD $args --innodb-read-only let SEARCH_PATTERN= InnoDB: Can.t initiate database recovery, running in read-only-mode; --source include/search_pattern_in_file.inc @@ -113,7 +113,7 @@ let SEARCH_PATTERN= InnoDB: Resizing redo log from 3\*[0-9]+ to 2\*[0-9]+ pages; # this crashes right after deleting all log files --remove_file $SEARCH_FILE ---error 1,42 +--error 1 --exec $MYSQLD_CMD $args --innodb-read-only let SEARCH_PATTERN= InnoDB: Cannot create log files in read-only mode; --source include/search_pattern_in_file.inc @@ -136,7 +136,7 @@ let SEARCH_PATTERN= InnoDB: Setting log file .*ib_logfile[0-9]+ size to; # Rename the log files, and trigger an error in recovery. --move_file $MYSQLD_DATADIR/ib_logfile101 $MYSQLD_DATADIR/ib_logfile0 --move_file $MYSQLD_DATADIR/ib_logfile1 $MYSQLD_DATADIR/ib_logfile1_hidden ---error 1,42 +--error 1 --exec $MYSQLD_CMD $args let SEARCH_PATTERN= InnoDB: Only one log file found; --source include/search_pattern_in_file.inc @@ -148,7 +148,7 @@ die unless open(FILE, ">$ENV{MYSQLD_DATADIR}/ib_logfile0"); print FILE "garbage"; close(FILE); EOF ---error 1,42 +--error 1 --exec $MYSQLD_CMD $args let SEARCH_PATTERN= InnoDB: Log file .*ib_logfile0 size 7 is not a multiple of innodb_page_size; --source include/search_pattern_in_file.inc @@ -162,7 +162,7 @@ print FILE "junkfill" x 131072; close(FILE); EOF ---error 1,42 +--error 1 --exec $MYSQLD_CMD $args let SEARCH_PATTERN= InnoDB: Log file .*ib_logfile1 is of different size 1048576 bytes than other log files; --source include/search_pattern_in_file.inc diff --git a/mysql-test/suite/innodb/t/log_file_size_1.test b/mysql-test/suite/innodb/t/log_file_size_1.test index 3f16bd0e47c4..5494d4f522e1 100644 --- a/mysql-test/suite/innodb/t/log_file_size_1.test +++ b/mysql-test/suite/innodb/t/log_file_size_1.test @@ -180,7 +180,7 @@ let SEARCH_PATTERN= syntax error in innodb_log_group_home_dir; --remove_file $SEARCH_FILE --echo "test misc 3" ---error 1,42 +--error 1 --exec $MYSQLD_CMD $args --innodb-read-only let SEARCH_PATTERN= InnoDB: Cannot resize log files in read-only mode; --source include/search_pattern_in_file.inc @@ -191,7 +191,7 @@ let SEARCH_PATTERN= InnoDB: Cannot resize log files in read-only mode; # Rename the log files, and trigger an error in recovery. #--move_file $MYSQLD_DATADIR/ib_logfile101 $MYSQLD_DATADIR/ib_logfile0 --move_file $MYSQLD_DATADIR/ib_logfile1 $MYSQLD_DATADIR/ib_logfile1_hidden ---error 1,42 +--error 1 --exec $MYSQLD_CMD $args let SEARCH_PATTERN= InnoDB: Only one log file found; --source include/search_pattern_in_file.inc @@ -207,7 +207,7 @@ die unless open(FILE, ">$ENV{MYSQLD_DATADIR}/ib_logfile0"); print FILE "garbage"; close(FILE); EOF ---error 1,42 +--error 1 --exec $MYSQLD_CMD $args let SEARCH_PATTERN= InnoDB: .*ib_logfile0 size 7 is not a multiple of innodb_page_size; --source include/search_pattern_in_file.inc @@ -224,7 +224,7 @@ print FILE "junkfill" x 131072; close(FILE); EOF ---error 1,42 +--error 1 --exec $MYSQLD_CMD $args let SEARCH_PATTERN= InnoDB: .*ib_logfile1 is of different size; --source include/search_pattern_in_file.inc diff --git a/mysql-test/suite/innodb/t/tablespace_crash.test b/mysql-test/suite/innodb/t/tablespace_crash.test index c75affe94c11..0ea200d3e389 100644 --- a/mysql-test/suite/innodb/t/tablespace_crash.test +++ b/mysql-test/suite/innodb/t/tablespace_crash.test @@ -146,7 +146,7 @@ INSERT INTO t4 VALUES (6); --exec echo $MYSQL_TMP_DIR/bad/tablespace1.ibd > $MYSQLD_DATADIR/tablespace1.isl let SEARCH_FILE= $MYSQLTEST_VARDIR/log/my_restart.err; ---error 3,42 +--error 3 --exec $MYSQLD_CMD --core-file --console > $SEARCH_FILE 2>&1; let SEARCH_PATTERN= \[ERROR\] InnoDB: ISL file '.*tablespace1.isl' was found but the linked file '.*tablespace1.ibd' could not be opened or is not correct; @@ -166,7 +166,7 @@ let SEARCH_PATTERN= \[ERROR\] InnoDB: Cannot continue operation; --exec echo $MYSQL_TMP_DIR/tablespace1.ibd > $MYSQLD_DATADIR/tablespace1.isl --exec echo $MYSQL_TMP_DIR/bad/t3.ibd > $MYSQLD_DATADIR/test/t3.isl ---error 3,42 +--error 3 --exec $MYSQLD_CMD --core-file --console > $SEARCH_FILE 2>&1; let SEARCH_PATTERN= \[ERROR\] InnoDB: ISL file '.*t3.isl' was found but the linked file '.*t3.ibd' could not be opened or is not correct; diff --git a/mysql-test/suite/innodb_zip/t/innochecksum.test b/mysql-test/suite/innodb_zip/t/innochecksum.test index a3cbfaf65058..2f4d3510da4b 100644 --- a/mysql-test/suite/innodb_zip/t/innochecksum.test +++ b/mysql-test/suite/innodb_zip/t/innochecksum.test @@ -31,7 +31,7 @@ insert into t1 values(3,"compressed table"); --echo # Server Default checksum = innodb --echo [1a]: check the innochecksum when file doesn't exists ---error 1,42 +--error 1 --exec $INNOCHECKSUM $MYSQLD_DATADIR/test/aa.ibd 2> $SEARCH_FILE let SEARCH_PATTERN= Error: $MYSQLD_DATADIR/test/aa.ibd cannot be found; --source include/search_pattern_in_file.inc diff --git a/mysql-test/suite/innodb_zip/t/wl6560.test b/mysql-test/suite/innodb_zip/t/wl6560.test index c01aa87f4f9f..609e5808a0bc 100644 --- a/mysql-test/suite/innodb_zip/t/wl6560.test +++ b/mysql-test/suite/innodb_zip/t/wl6560.test @@ -378,14 +378,14 @@ drop table t1; # --source include/shutdown_mysqld.inc --echo "try starting server with temp-tablespace size < min. threshold" ---error 1,42 +--error 1 --exec $MYSQLD_CMD $sizeoftempfile1 let SEARCH_PATTERN = Tablespace size must be at least; --source ./include/search_pattern_in_file.inc --remove_file $SEARCH_FILE --remove_file $MYSQL_DATA_DIR/xb_doublewrite --echo "try starting server with sys-tablespace size < min. threshold" ---error 1,42 +--error 1 --exec $MYSQLD_CMD $sizeoftempfile2 let SEARCH_PATTERN = Tablespace size must be at least; --source ./include/search_pattern_in_file.inc From 4c3081f29cb3db37598462a10cfd394debb4346b Mon Sep 17 00:00:00 2001 From: "George O. Lorch III" Date: Wed, 28 Nov 2018 20:56:38 -0700 Subject: [PATCH 1218/1221] PS-5056 : handle_fatal_signal (sig=11) in ha_tokudb::write_row - Regression introduced by PS-4811 at commit 23c0a7280150636dc3f4d12e01748f31b2be06a2 Fixed minor regression and introduced test case that exposed it. - Will be cherry-picked to 8.0, GCA point is earlier than commit introducing regression. --- mysql-test/suite/tokudb.bugs/r/PS-5056.result | 10 ++++++++++ mysql-test/suite/tokudb.bugs/t/PS-5056.test | 8 ++++++++ storage/tokudb/ha_tokudb.cc | 2 +- 3 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 mysql-test/suite/tokudb.bugs/r/PS-5056.result create mode 100644 mysql-test/suite/tokudb.bugs/t/PS-5056.test diff --git a/mysql-test/suite/tokudb.bugs/r/PS-5056.result b/mysql-test/suite/tokudb.bugs/r/PS-5056.result new file mode 100644 index 000000000000..7e02b4c22db6 --- /dev/null +++ b/mysql-test/suite/tokudb.bugs/r/PS-5056.result @@ -0,0 +1,10 @@ +SET sql_mode=''; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +CREATE TEMPORARY TABLE t1(a INT AUTO_INCREMENT,PRIMARY KEY(a)) ENGINE=TokuDB; +INSERT INTO t1 VALUES(0xF0908080); +Warnings: +Warning 1264 Out of range value for column 'a' at row 1 +DELETE FROM t1; +INSERT IGNORE INTO t1 VALUES(),(),(); +ERROR HY000: Failed to read auto-increment value from storage engine diff --git a/mysql-test/suite/tokudb.bugs/t/PS-5056.test b/mysql-test/suite/tokudb.bugs/t/PS-5056.test new file mode 100644 index 000000000000..09d80d424ed8 --- /dev/null +++ b/mysql-test/suite/tokudb.bugs/t/PS-5056.test @@ -0,0 +1,8 @@ +--source include/have_tokudb.inc + +SET sql_mode=''; +CREATE TEMPORARY TABLE t1(a INT AUTO_INCREMENT,PRIMARY KEY(a)) ENGINE=TokuDB; +INSERT INTO t1 VALUES(0xF0908080); +DELETE FROM t1; +--error ER_AUTOINC_READ_FAILED +INSERT IGNORE INTO t1 VALUES(),(),(); diff --git a/storage/tokudb/ha_tokudb.cc b/storage/tokudb/ha_tokudb.cc index 2293071bd7e6..cdf68305bd41 100644 --- a/storage/tokudb/ha_tokudb.cc +++ b/storage/tokudb/ha_tokudb.cc @@ -4079,7 +4079,7 @@ int ha_tokudb::write_row(uchar * record) { if (error == DB_KEYEXIST) { error = HA_ERR_FOUND_DUPP_KEY; } - if (using_ignore) { + if (sub_trans) { // no point in recording error value of abort. // nothing we can do about it anyway and it is not what // we want to return. From 085e4de2ccf009db7ed7c0a28719921e0cdbbfb6 Mon Sep 17 00:00:00 2001 From: "przemyslaw.skibinski@percona.com" Date: Thu, 29 Nov 2018 10:18:29 +0100 Subject: [PATCH 1219/1221] PS-5084: innodb_buffer_pool_size is an uninitialized variable Fix issue in `innodb_buffer_pool_size_validate` when ```srv_buf_pool_size == static_cast(intbuf)``` leads to ```*static_cast(save) = requested_buf_pool_size;``` is not called at all. Then there is an uninitialized read of var->save_result in innodb_buffer_pool_size_update. --- storage/innobase/handler/ha_innodb.cc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index c7852c380410..77e1b7d0b951 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -23751,16 +23751,16 @@ innodb_buffer_pool_size_validate( return(1); } - if (srv_buf_pool_size == static_cast(intbuf)) { - /* nothing to do */ - return(0); - } - ulint requested_buf_pool_size = buf_pool_size_align(static_cast(intbuf)); *static_cast(save) = requested_buf_pool_size; + if (srv_buf_pool_size == static_cast(intbuf)) { + /* nothing to do */ + return(0); + } + if (srv_buf_pool_size == requested_buf_pool_size) { push_warning_printf(thd, Sql_condition::SL_WARNING, ER_WRONG_ARGUMENTS, From c0f7f79e188cbbd77efa24098f0f062ef022ce17 Mon Sep 17 00:00:00 2001 From: Evgeniy Patlan Date: Fri, 30 Nov 2018 11:33:56 +0200 Subject: [PATCH 1220/1221] Fix rpm patch --- build-ps/rpm/mysql-5.7-sharedlib-rename.patch | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/build-ps/rpm/mysql-5.7-sharedlib-rename.patch b/build-ps/rpm/mysql-5.7-sharedlib-rename.patch index 3b81aff0564c..6b0cb7266d46 100644 --- a/build-ps/rpm/mysql-5.7-sharedlib-rename.patch +++ b/build-ps/rpm/mysql-5.7-sharedlib-rename.patch @@ -541,12 +541,12 @@ diff -rup old/rapid/unittest/gunit/xplugin/CMakeLists.txt new/rapid/unittest/gun ${PROTOBUF_LIBRARY} --- old/storage/tokudb/PerconaFT/tools/CMakeLists.txt +++ new/storage/tokudb/PerconaFT/tools/CMakeLists.txt -@@ -23,7 +23,7 @@ - if (MYSQL_BASE_VERSION VERSION_EQUAL "8.0") - target_link_libraries(${tool} mysqlclient) - else () -- target_link_libraries(${tool} perconaserverclient) -+ target_link_libraries(${tool} mysqlclient) +@@ -20,7 +20,7 @@ + target_link_libraries(${tool} sql binlog rpl master slave) endif () + else () +- target_link_libraries(${tool} perconaserverclient) ++ target_link_libraries(${tool} mysqlserverclient) endif () endif () + From 1390dbe3e6075b5b7eb2ea78aa1a62825495d753 Mon Sep 17 00:00:00 2001 From: Evgeniy Patlan Date: Fri, 30 Nov 2018 14:02:02 +0200 Subject: [PATCH 1221/1221] Fix rpm patch --- build-ps/rpm/mysql-5.7-sharedlib-rename.patch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build-ps/rpm/mysql-5.7-sharedlib-rename.patch b/build-ps/rpm/mysql-5.7-sharedlib-rename.patch index 6b0cb7266d46..700db44b5f4b 100644 --- a/build-ps/rpm/mysql-5.7-sharedlib-rename.patch +++ b/build-ps/rpm/mysql-5.7-sharedlib-rename.patch @@ -546,7 +546,7 @@ diff -rup old/rapid/unittest/gunit/xplugin/CMakeLists.txt new/rapid/unittest/gun endif () else () - target_link_libraries(${tool} perconaserverclient) -+ target_link_libraries(${tool} mysqlserverclient) ++ target_link_libraries(${tool} mysqlclient) endif () endif ()

    J%`Ug$eX{=_ z<@$){wze;Xl?CCeKIM0PX@P6IvWMDh73?%|25s_{*}gwT*=Z6GDD^4n>r0YmS1Q6J?PO{_{0HU4QfH z+QV14w?rya-~RKE9cFdTOtFiPOk8&Rtti)|s1c8@Qv?r}!J!OQCUD@W;_4zKjIu`h-WRmOK zYZF?jXz){qQ1wN&$t+ zZo|pJdeix;r?57|3ZurG)(_!5&h;BKhvl&a;L$^cHMp8=`X||8NifqfnQMGW959VT z%lSb5XxR9t#dbYjhWz8^5_((k0A)Vx)y0mBp^x#gjBFB}*1F|0)e3d+WJv7FJSmM5 zu*7!ew%eMCY=gfk(^UOpd~!Yx#*oq>!e0nbRFd8?gVY06YBMP9l!8f^(TJ-i>#U)h zwdKzD(ySFi3%|L$vRn7TQ^I%!;_v5;rMLO_>=d%)WYK8RZ!=W`24JwO-jT&?jh-YFQn6@(Q}_zd5l<7{HeNU>G$ zotsuWq+~vZd?Zg#GQ`9_+o?1~xbFRk0dA8JOFufOr4vW4dZ?raL0RGzWm6%6UU`l#W3!%llSZ#CjbOw% zO})%xOvT5|hN6agds|_47m{&BtY}&bBLt4IGC8>1lbSCYHr8z|ZYzk1d#XzhZ>>V2 z7Ol{%L#&M+gdiRpw8Z$R;|wODX?a!mCapVlc!Q&gmiY$IVMOc}Q-!*L55U7S-q}XR z$rtx60Pd7W16e8MR9D9cvEw*JaGW}DZhmp*AK>c|#BJ9r%-O%rDTQD#@3AN)+#TDM zWZUqx5LcnNYYDby|NVE~crDXv5jq@qV8dA|i&;D%3!X69VL?Y!ncEygr}`-i+>@co zmn1Gj39VyTr(@`;`6OiPeF6WGnTc~1I#XClzi~*^^xgCh&KS$>AQeRA4DMzW`C1F9 zUX8*&iL4?D*v3Vff#;BEqF@AK z19GEGT+Z!5n~vJ#Ph^=T{HB2+eJ{ROU@e1mFp;uA@_7m)&fOZ*$ar&R9-%4 z<=E@l)tnRM#~xR$Zg?`qVJ}D3TsmJdcpXZ2b29?NERw5yhO3#bjHi$YaEi5RE<+u3 zmpmp5xH{R*h*(juctxf7It!AVypKznGKvg7em{HeO08OJpWw zDYN!+0h<~I4=^iO=(_bc=46)Cvarjcdt;(j(I0<@xt(0=VJ91U-+hYeuuKjY z3g|uwj9BGPcoPUl@~Y2l6HM}`PhfkO*00JBIKEc@&U;a18fdH+);VhWNna**r+;_q z9L_91%Gsp71;xKVXt+acfkA(%+nITLqxOROx>+yzKn1aV$wTbj+u~VtK2*}%aES(s z!Wpe9NWnr@x^^7DqlH3!WW>L)WSlYPNrh&?Gyb0zh7#ULy?Qd@0-2S5$cq1!TBb=i z`(!f$5oh%v2t;(vLdjX`0{X-X21qs`p?Hjlzi;rZbs+Uo@y_La^bUeU|Wa;2p>CUI?VLa3k;ZiiKBHk2K!T=AlPA3@5Pu z9sWRK3+RaM#k(&(58Cf=)6cVbYjN<>A377k4p=v#<}H4HqI561d-Fv0+2*NhWSWk! zQk(nb!mu*Q0~`ZqCM>m3xvcs<#doJVntS~&IYzZ^Zv5;^(9@fJ(JKCjoSGf75?9=l z6WgWm_{!={AZ)*C2pMu6|5hhUK23PNi4!w3SswCyr1x#G6Z>{W- zCPCToAL;Zhmf0H-)3DN^crDvaN>FlrRvc4D!yMJ2D#wn~J9%}DFxma8hFm!T+lBR6Q zN$k{bv4YKf?4wW{yOO%y&v8}saEcn%L9xK`{0jAzd*b&70?R*D%8}M>H2-}EAg5iY zlfdxW?jq3Vg}(+6o<{v`9EUxqt` zz;khVD(dU0*jO@xhza=trPp@Qm1F+Capmrx36N{TMi~`Cu;Mus+cU%RXs2h}G@8d! zY$Wt?6`Xp(&`&CXl2i3$HTUG=iqbi~Dz0B@r!DHTvPeeV_{i@NmEs)ocwQrYa=vJ+;_;vUFhv*rXWJn@f&7QeHRk8EL4UB!@ns2F zlK6DvkKuI($)JWnX(Z_8;^5UhObUvITtRjhG6>x!4@06LauSZ_ch!y=78fwm0@Pr2 zAh0d#))17mc>QHljxt94f>U*iE@Rnx+q~)4*EKk`?zYN2j}PhB%rfUvOBn0G-TSnR z+D_4Db>c?AO^RvjPq4;9Iy2TeVk*UX`r<L^Oze-h$P~0}%|gF?>DIaTyU^ z=K_Sl)Mm@!9nP;OiOmCV!!)rWh9ZgWw@40QcgvBmAX*0Mp zE0Z12c46PpN{l}qa*-1MVHvWoa|^tGTnf?ISUk6sOC17*=7+GpN%1kHD=c!VKdepC zl*8)qSAXF$NyPH&D_y>0jA4&%g&EoeM`+?k>}q}edY^@Tx@ZV+4NNkxy~B9r5?@Xe zA>%fDZu{YO=#BN|{fdnZ9|>K6&b^OA3om+6#Ch0D$s}x57s^D84Y)2*=cjcy6{A7m z7yX&WR&`_k)w+**-Zy30;XmIPEmgX)%D%c-jjDIdJCwiw5(-p)N9m!@6NLQ!9$By9 zzs?UF-^l8&MY2-{-RN~0z3RZM@67SY?J}cF-VvAi)iJJwmr6@lV|P#{7`wedg@ep- z>t2iGocF0E55&hZDsDwmgE_Gw^@{R;1v9O;e6Gt93T(AcU#!Wf6l=;kszSGJa_$2o za$7Y|-cH^b%%mjl-Y9O6iIxANo%O!olX(kpX_f zDp%7+18+xInnGf{>15l_+6&)-x`gsoK;)(-`x)(X(_(TWpVm>bSPxo4I{W^8;fZ`B zKb`J|9c1$*eks6yaOb1gdbq&0Kz%j#kU;Ua z1GW2bbj-$!^}$!eloJqv^;%1d<6xxCs}o*gCWWk#w(pOkWgi{MD6vWl#u|#fiyhXn zDv@qjY|&2@;T&ir-uaqY6^8V%e49hTmB(B35Sh;Cb2Xpvb$?=*$+WFT9u8i{ z`fK+-;@S1@{(}TB?^tz~w?4=p`qK_ei8t)tyh%*M-qaXXQ&A$B^mpj5V0u?+=fixe z2qB~rKY4y;;3 zT_$;D-k9&xmSIjRPNn|7cr2YImq0BK3I`9<>egl=vG}`-{J9Gg7KJW zA;YljuOBTKe@sumk-j~;{X=$FcIu4yDBzUBR?)#m@{x{jMiiODIem(_yY{qEb&rFy zL9N&>!}xf0;+k1lEtGB#bBd1exYk3-G++~U9OtweealcOJCp)N^ohovnKFdpBP`dQ z#7)22Tcg)Td+cS3R^OTsn@X9oiY)1A{li-w2`yc61~6>7LU6Y9dF;C_5LuHMZ_xF_a%&#S;WF5ReA;r1&ld`dP2 zI7DVRiO$4Q`L8z!gnRUTgUO{kt})BiwOdW3pyyMK`dt1ta0(KwuS8e9ZJUC~;@y3B zDma(SnE6|){HT5vBA6LbadQR4dwK0ckA^nvHDr91_XRCYrdjAm(N`u~1{F)I&3f&i z(DoOp%%;RB?7Z-HiRpFML32?rST{OhIN)i&3*7K5$2?)}!F_X0<~q5p2U1z9%_3h& zUdC6x2eYMp;9Z?o4`OpO<{ulIO&n9us@OVm!D*2vtp4IBmcf&D^Tgo-;T~vB=s}l{ zqf@{LfB4m@btuv^>wjL!XS64kb>!kVMNw6w!owrnu_3d= z=?TL@Pv^(friKmR;AuhpaN~e9Ub-nEe~A%7wRhIvxt6i*99)i=q#9GRF1DJ%Wh)cv z5RgkCXOKcW45O(;^3H`By0+-Dj@PKQp-yG1GLL=v;En{}%Qr_6hNrA&mdVQB&@}C+ z{;-RFeLGNM|HCX`XgLpfa*TIM)a1cw*X|&-+Zoky>ljkpF!pd$Dbxz*@V;zIGQFP?#R2WS`E5%XV z8l><(^yS@zJSYp`hwk*izF_^WHIz)i4gpH@&(@KOE}-sX+*so2-uHC9r&tm}kO1>a zYg1>ZumZpesr44!mNn0ctMf$V$n|PHTrPl6WFz^b1k2Bgl81hn)2t877`h2or6LU( zWtLh0-P%W=8HkilU@DJb(~n7j`?!pbpX}+kz|cj?g`mm5e&u&?h7RgZp2HYI>{=q3Q(?t468eI;#I$& z!%_Z^PpPPCz)i*W8YWkZpFF`4M)dq*+^ac z+yyKl`Nd}9Lvwwg5iyP{R6LPN*s=Xm-Stwj?gA_BlcD8C3Pe>r5_P&&!HlY*ySz%M z@2~S9ff`ZOwB1lfrk#Z_bLv%8lPGMrpfqeQrsPb{BRTwZzewn~O!o=Bw(GX=;$4n8 z7z-o!=Ral>(3qvg^Vj1K6%Wn{hLEm{4Tj(}q;T37+k{+A>#h$cBGkG|p*5+M&>-?tZOs26};$&1Q3P)+@U<@htGgLODwKG#5uV zz%=FMkbRwF36kolSxB|(1oxy%@dvMtoH*sqRcyI26IwrrI7ZE(8>%e&N1PK7-S?g| zaSiE+9ovtK*F|;h+39W4K}}RREH&MT!xxlWO&hVgpvT{;%66ay7cvsozHuY|I15ad zh^|e5@k54Q3@r9TOZWF5RoZWGbF=^1C<{;F`qx*(xa-09EkhKu`6xB>KqzNNdf%n;>VBoe7Ud%xhlH9hRhP>V zXogC|hs~QOB{MFFNYe-GsfhlFU*bD2*&&^Pc)!b@Xw0iBj-wq2JeK*lmfjXjK}>va zY3Cl`?^@o~#ZHukv(V3RtEmDfP5iBI__WEXOT&BWG2eN^jvUfUjuBPfB&-**Dm+m* zlx#MSiCa0lbG)vdxO5T@QnwWRJ~i%b@HxDprE2PiU5)ewEJaH0^KeLWbH(jH@Hh%w zgCD=uZ=58vd|RV=Fg}DxUl+_BPJwzwtH>ta_qY39(nOMuj4|5C{c}{wiI2Wa$f&vK znVPbQL8D8+ZA?ziY~xZHe><*A;8Ib-Huz%c6RU>OA&=El|9NNF&S%h(lB7@W{0I37 z@}7HGKw}LaM}F%{yMJwFS`(UslQ7^19By4S#Fo?$YmE1(opg z!xvpOLG~aQJ7X+oOwYwbxZh-H6`9pWO^A6GgL>gTYTrC6mSl6qqCpBJ%WjSFrj6qL zg8rzJ*Wfocq8de(^YPw9&V?w(^JH&(c@|L*hsK}>CTBf`v25Z`%60>qTOr@Bzq>xI zW8m#%w0ZhjX83Yun%G`HO8ncg^t6!aZcA*oPgjueDB9v{nmeroD(j#o8sYEzZecmb z;g4_G(H0Gzr^yV7J-o^9-Taml%(24pB6OBgN|I%EpDX%1cm zD;pt4n`Y%0j|&}-(`j=fNZnLs$Gs6AkMVPUSKYdCoWWHAEA6a!XL7ctwgBty^9I}r+;**s7_wq$+Xx+dAw{M-<{kjR}54f~2;4E=TgLpbhH_GbXDvXoS* zDwcGnj2$}2=}D}GN6Qr;BK-R?fv2z5;*sO=H6d_vTnfhcROr<0SpE0(=8ta|c_ErT zEj5L$#1`#$h2wV-J25mlm2GZ!Uvtt3Bhl>MTX5?~7tohAZWZ2MC=2`g<<6!kITV|6 zfjEX%AUQ~*P5K=Ha+O|w3NZTSQ4 zabfL-yr-rn7uRH$2-19>OSwo!VWiy2SE_X-&sjKv+Ug@^m-Nyw;DL(}AAC&b)~k!# z!IKrPY!awdC}>gpCh(oaw_b^j=8~&c+M%{& zdlJLl$nfsV2ijuPgRFOJ4S6HOWiG92J~<#&HF@;uE?-jQXN|Ku!yJ@o?#T?ilE?l_pNU-cV zHhg36&)WF#%Wlpyh#q;!Qc)~q5^JfBr&hKWw$`YUo^LQE%P1)WDYZD@yT1cTKmR}qL zpZKZ*ZmG1pF3v1WVV_{uJG*@)(U8VxVQ;epnLa2KLBFT= zwXZn}s)2r}B>29kbgdixnnZtX%H@AsBSMGS;!0xzrvjFcppP9Trvu<@NwA|(N;2?B1D)TOAXT-LBPVyvk`+pj_nb$XpP@pw~?J2PWJ5XlVV%hBSiP@tEgQKrUM zs9ARO-U#`s9jS^{&Xbz{qt7Ww2Zzo`=YR|q<9Wv*F`a^iq0pdISo zGQu1DUdZh%ZaSTt{bMV?8~v(gpb|uEkA_1CAegYN*Aj$qu!|@$g{O`*fMTc#&O#fF z8Eiva@QZY217ZyHZc3DK;2DTNA`I6k%HDM#ppZR4(X>=SN)1CUd{RkJ0AqnIYExxS ze!XC~kS)y~hy%!j`>n`Pqmxd!vjTs@a2JS_ykAoeDOn71VZ%u%>1jVn%k^e|(8x^7 zPFcFNrQnHC0wvK=M-78`Yr&F@1}aq}{}y>+RY0jnrFCOCInAKsUDM6;Oy%6nL*AK=4r{D94(Tv1kG(Dc%Kh$uje#;x6YnXUKWXlw)g z^;3ZDzh+j+cDzD32wOd2t}#!}bpr9->JXdR5%0kvs(X1X+r$NNFd8QK-Vc8gESz|4 zEN-@K-hiw3AkffcDYXHnU?0p>_ske`QOMIQi)*56TDHRDDXGCl-@b}vNo)?6b^!fZ zX6*RpPl1Eoun!pUF1aw(riS$w)SzWKV(7M|tUS77T(#$E;%olgP!#`-{LJjp2STnN zvH97otRn{5DndhpkK4s~ZNx-9_n}cHuMZ0f5vv3qzpQ!o zW5n?xix<6)70RwyYzbvoOuGy~(6a-Gap2}EG+q*4J3ea<9CNAO zd{p}5mcrU@(<&D}i}YxojRQgI86?|CZ{5LzBlCEVwj=&t5SHtZpHekQSXTx5qu}6= zRG@rp^$fW*9MR&j7(Pt!vF#@m_@W_)Wnf&l^((21|CShtifN?jZnEfd07T?A_qT$H zu3S4NhqoZ-uVAtpHY?o3!{9z3u+4uA6dtZXfxgz~lkx4G>t|B(*9?pD9a!+0=9gXV zz5*FD+RjuvlqRjB91b0iKW#bdwN8^lHH*?k8X}DSucp<{pd(p2nyjR?o1E)dfe(LN z70f_ZR#)KCnO(j@1WK~!4OO_wN(x+g z8kdME-#ykn4`$+5ZmoHOL$JDSY-Q_jgYfvw>_*}->(8zNq1eF{eiyqLcgbW|Trqkk9;Y&M^bF9f z7fBzO70RMkZC$M50Fc^uiD;yJo=VB_MUNKl9>({ ziaZgVqPs|577;oef~B9OC2+9wQ%?oSchQJ(7nL=%@m>dTOwG#b*dOdVaZR(2IRi-Z zcn|k?^#IsCn7d0Lgbs`j34d)sWo#^vNe}=?bF4H0`ZZ*%Xh-g7 zp>HWzEuJp$bE3}dqGVt1YU7EBsJMm3a$k^PY$J;{Soj3b>F7)M`6!64AO|;)}xo-`N*~IB_H>iY5YU>jC zJrkBbPtYAbNQ^e|Sgyn?M6sLEr&2($-(j*!%Mb9PI=*=dBtwIwdvA(dqCo-j%>6)3 z;70_|G?{ZnR&C=} zUw&ASy-y93iPxAzq;o#?4;iSTn1aIq+ZUR7<^lJA8xg&V^Na@NkHUyPG#aW2U+6x8 z$!|jitZv^p2iPJmpcjH}*RFt~LvSFE{Su5XKAmHdpowr`#JqW7QVUqb3@Ltt6k*uX83X53mo9VN zbu&F+Cj%O=iQ+flE&CO7{L!;Cb|)*BxnF}>R60$gg1Mi_-#Pid_ED-<-4uy8Dq~r4 zpq{%c&6vI_$ z_|67L%K(Wt?#WDPf-z0}^88Qkq=jANvXUDQ3tdAG6+@sW9wh!hx*T-fYM2fa?^Xwa zYR2PDnfkTsBfjhw{5oav4oIMe4Kc31+rO5)c82Eu!S&^`HyKdj9q*IgWeK!?s50Xo zumyxj4%U1qbWrc`Gn3mArIGZ226y~q(bqg`77_nX1o3RDGUK`f2ks1ij;%hJRC0>= zzla~Y`2B4X4AzU09?NW%C9D#-$7HRB(v}Q9P-z$O|9uHmXjV4~iq=T{p5*)grpLnL zA{jd#zqty|pW!1Zr6rwYY8bgf-~8(UPJ`#aqT})sf$1+s1{eGG@8I{Q@A!3Uxye>o z)Xs`hdHZ(~%K2^s?e(e{UycE{GbqHXZFEJh94KCnGC_sVv7A6s?Rqw6>iDFnINHCv z3RyZ6%7b4b%s@mhD#)3=Kh8i3Pn`Br+g1wtAO$rmmt|2bAAr3WHJ65ZC?W)ekn-T2 zg%X1dFf3K!UEbq=Cld9&Iy@w&g1@2xMt|P=u{ChHB>)KZ54A;HtGf%_aTIF_e6$dW za=ZQgD4)p_q*vhH{zAPZZ60S#4wv_?Aw4DyPSpLcd zyw*=dOp%Xj-tQmNi{Eo9oCR4%olq!W3z&GJ6lNKaZEs)kL+(%OhR>i&zLMVMqHbje zP~dXpunW^PC%&w0jUk=zNhw?|-$V()KKBi~#)vs$p`UGQ;0$$RaG?v1c{h{TQ6Qu- z@6p~R1zu1|U8`30I^ zZyG;Ps2P@?QuxW}89c31O3=ZlIPQs%zVf84@vq*mzmGsDIu*>OPG38Mjfq2}zlrYA zY~|U<|_5Tp|ORqv(4@=!#MBai1QYbxPjSLU7ugo|5uYl4gYXcGWi{j&ZDiKQw zdhr%I8Xp5-%|J7Yp&Gu9Oy?Xt105YB+>)~GCO#3TMNYEt-Fw?;?Fb%oCl;%#x)-^i zm-;>PvV3VLjCy*N{9k-eSuDx5g!;$mAtKorXQn#=#D}?L-=v!7QiYIohSt8ege;yyFl+l&>V+S4<@U^V+=PZ z3%+o#3D5Fm{qb)v_oCp|_@i{Miwp%EGH6fM@KrY{!MDN^2O_RSleeES`n2=t$$bc|y^SPdRRu=n$9wuJ+2posrMjB(?O z`kK1O;X@Gm9!z1PD88tlD&;)J!EJaFa&y%z~Q5SaxsC5y_eD@wq!Ku^Zi(|e(1hdrMIgj(S$)En} z7*kTN`qTr@Ib{c(H(UITyKU?q$t-4BA&K|~h_~*mT+**Isg&Dji4{;^=;04LHbpra zK_Q-8xx?8wNxE0w&Bf7sP|w0o+O2?Z|4`-o9?Cm!Wn+5wOYuHtDs zaLo5@ElUdq$9Qw|ZBSlZ!c8RZ69`#EsqykS_id=^PO?ni;F8 zY{i@hW2JAJS(cQIv0*;~W008fU-L;DXI+#n3*G9|_%%yNRldbaPzR%BYiKcliHk)1 z17XI=Bhmm@Wo;~BK+8L|13Wf0E8oh0Z0IrVXnE&gP)cKv1ce8{JI1x77L8|T| zfP-zm@n-89=PmoIuh5P-VJ>Pm{skv+2PVZ4$?oF<C4f5uI3=Zv zz#bU}y7Y(+eS3VE1E_+rLLA>`wek6n`ZzmM-ZW2wj@obpPaD)Wm|Mc_*&ZGE6J_t@ z&AC51I7z9G)Z4ihgG{$L@h>-B32Wy{GX)h}t-YcX^gx$}>Af{XF=^%NXK1cpdW-QW zV2{`X5%FwsRiGU?_R00bJ-YyVa8hm~eOLd^1B87fGT$)D-P7E8t6-I_aV~&A!ct&< zvG$(EjAPD`4N8-4*li{l`SlBKkO)>1H0OMi5)R?1ZOLW=IQV}A6m6~*n1fPu#mXlR zz3>|b%IidMqK3tTKXA}*(h~*_%Tq*sfrNW1{2!Q9+sBGB9>rXR0r-Uvhx0=#_K4TA zQ|hXO_2V;TcvQ4f5}_{pFDT8CvKY6mJ`%i1h)mKERb zCsJiYOR&IlhxJmtM2M9;tN0yg;#-)MuXDH;Fx8=y{iV`DXS3S6#>-wmKr-vjvaFq6 z6@xU%U|B921_6pGOd#ht%4IR*O~MB8x6#C>Qz_&0tWTaX9&siwC{xDdAi_I0gp*dz zy!&znBEyT4ya7TjRr95-&D>=-yp;ZGZJ<)T(oIMOz#6F$L&Gt)+5moP7(qUK$CJZ- z0c11Ta>;N>O)e>;i9k9R*N1CQoLwW07jV2gePyi!eu+b@G3u2$r4N?{Xk$jAtEg0> zcB#3esA&y#p6bkKA@9&VG!uGb|7u?I!4e!N>+jy_{{s4Qh_k$)I^Q}!Ip!Xs8L1l6 zJKp{OSbOIv(VcG3yKURHZQHhOcb~RxyHDG;ZJ)Mn+n)1#p1Cu3t$Ej)duP3WWL0IS zl2j_Gtn5_n&-V=0>)3PoiKN5L6}GV!&Yp9*A-}lBL;sJBkpkjh4f{Isrnbvmj;I5HWv{56&@5J z2Y}90L!gR-%^3nP{oSH-I8uR(7%LZ}Pa@MRqfmh{2m-;`-(*z-GoOsnJnsTX>JHj} z(V2Oa8B7?)Xcedtmug_l0YJh|6j2fYsrb|iqqZQ5L00r>8V%wXfDmckZ5|4AWaxh) z?nVdx#|kkLz<+}8{?iocuh>EVP>oyuBBuWz;Jg1fruuq!j zNb;=%ne|wR!?Wp8GG*h9F>qII;C}+D&&Wvhv0KBH`0KO_w3`Z79p=w=`<8B8!#@>b z`~1oP>^L2Aynpg|o!~FQ|2NHY8UHfS4(O>#X=979G)!A%Mex^2~ zeDh?K*(TE0YmTuU2V06g2icN2G<%-BHwnT{SEOm%y5}O=V24G3SVclfzSQsFlv+hU z_xZAsd2cExkdbJ%0WB0z*b)IKS7A*Q3QZFHO#+oYFJ{m19?4E_4F|sN{08#Bw=&r6 zx4j;Yr>Fi@ynhukk8t4ivYBrtNXVZ-$L9p`tM7Tj)X;3V!$JH2DLuZZAM_f}AhvGh z>8!g`y<5wSC4FZ@{CM#SGV-R{Q)QSJnSllM8!%wN{5O+t{rt$2Z~R`i7vF=7M8uqR zct;xIMNFTVa`=J~WbwqG|NbHWRR;zbt`|QV;+od)2XulAJdfAcW=>)c8NYL`K88j8 znA0f0gBiQjo~xV7-T-a!8o%IK8{;Va-+i@KE4f2{Ni(cJueQM(dt6W}xDH#8X^<Pm*mp!55U%enq*A-!H^J<@hy2;)v^uw6}4dUJx~wZA|!xKmXlk`{x?(00aJf z@%!3dm;QW5^%{}L9WDsB>Ax3>98(_TJigTA4CS8PU|AltITCrI`GW8I3TL0mVgDe0 zab*PZ!>@IxZsEGbY}|Tx@t=AjDZOC5%rSZl*}4~CBfF=5yYf88Lh_LKxlD{H?L$7f zgd)vgxEy|yQ{Ht6n%_hvYlL3ZP!`HWJb-17_=O=O6^Ac7>C|{B#-?)?N3%Rhu!Sj4}S>=+jTwV-{@pTwo_{WKiP<1q{%Oo z^_H_QfZqW~vJyO;rk~8DU|>FsyE~MQs7TJCclyb%n!q8cQi}W1@f_SK9Z5*NFcBVy z=*ap3LxBlIUqwA|5sCk#-zZ1CDSy-LAdxkR1YaeJAZM}2$E0_Ai7uNW34Y7Z(}4+< zzlITd(kd*FzF=7bDUEC027LL#XWi@r-12L8)zmpGzal-mRy zp&qk%@^cau?~aXxZa0tm-|i`YcQ^-77>@L44@})*CI#zPSzQOD@WI5gZ zIaoRVzUywR#ftbr%#p&K46lFqIa|EZ9sar7miTqs=KI;(Dt_{VKkK$&N&lJhj+OJ{ z=f3~;!}$r&*ULj{2dgm2+J^UgkRC!sZJA2?X+GqgR$(yc03NV;v?jNfwzivUx$@}Y zC}m!$+!e!0xUD2W>)F#ezoUf?jh*V@>0awdp(`Pe89y-Q|Ebp=6bkKF%(nj+W8Q(+ zrsW25x1KfrxQy()zP5vp{`rxg_T4)l#rtX%_eFjf_%(```66EdG4ta`#PgFYmGi^D z=W}s#40EvU)q{G>dk>i5iw2?%6Hm)c9USRJLaMmJH-K3OR3(a2#w3fn4VD^+*!0iCk zc{9e7f(#vBu2(>geE}`{`u8V2>$Ky3BbgKBSLjmO^i_SS5wlyNxORa8Mfx#p4poIQ z``$L{U5f@c`?o+>V^}RoKM!6zNsP+v1#K@A(rniZyo1(A0;HNh*+o3y!c5 zRU5hyFR+`POeIaQYM4)-C35r98DXiR?qpe>If}2id-5CX7p3;EoJ{jw_9iBaqi!s; z*L8F%BU=+rsI8Yk6|UE!)Ke?0u`g~9vS}0MMnqjxNWmthQ<~2WC5Dqx2*>#RDqW^H z5>O(~rP@WLpo_~`h>dL5cO!9jQ0*T#w{q$TMA--w2IhMGmDcT?6y@y*}NQ^{8CJzO&>2 zMZCMt*kXg8JJfDookN&MO>f*)*iVUTu|oGxL3F{R0YVB!xlyF%;R93-j|2jn5o@hB zgYgw$XPbNstXAN-$fC`=OO9AUdDN9+uQg&qF9+KsjBuPeIgvz72*}0?pbvdIDaX%k z;5h>`4T>%$^xubQ8A3*4j!&d-kj9P^Rczji##7_f3Ja@XGh}D+AKcks21H;a1&awh zFDdV*1ANAv@|2kT2-Yqn<2v9iM;4|0>$T&4i=8W47#n!Rh;Vx|180J&11UY5?9>ZT7xA8c&QGF&EGDqj{LZ_SfRh=G zhD1$l4k!cTJ4LcZehM>AH14k^i8G{2s#tIK(aa-jCZ*VLa+2&M{&p?+j!Rk z0i@St>w`28L)=W9Hk5OjbWQh#^tDz*b0 zmypVkJ)c}WjsOxxPnS**BDsrlf>m)%L({{s_bSHS`!21l$`gf>!f7lA%E)Vnql{DI?48yG_N1#hz zg0Q!N8?87xLqDWoTqu&&7-(exI8Y#wJai zF3svMaVyJpTkI+c6E(+3i6$Z}lvRHQ$JLz#0^RZs%pp=OaJD2G<~vtj4R`K z@Yfh!WcO7}CGqvLvX)jbUe@O@r}F@J9*6OSJgP7hCDpzsO5DON3T&I&2suSjv&8djZsWY2B|LNj^35+}rgmJvOv~sdzVa2zO zQN@I`0nDF}vjyf-`5Zph>LFI!E0&Ueh?L(4+-v9s0c<~sd0w3PQpYMz(R66MZ=22n zR94`ms?uWRv~)m>?j82(EaiqL(fqwo-6}=5jnQW&^k2fed3rSJaNm}Lb!m9n>c$1R zmNSPUA0&@|mKv8%%~C(TnaT@5TG=nRU49E{2T}Cyt$odYik;%A?D^!`a(c*fsYue~ zd%KM;od4`vWHa|T{<51GD{4_#m5lJ~RHLQeOw{*AqBL12IMwpW@}(vW<9{JHxSTpp z_b2uQN3q*@e&8yac;UTl>35LddEd3@HZj=&b>>TWZ^`c!!h(9K{exb4WCU7r9EN(` zy_biqG-2=w-cVzu9^ty?_5ob{&f!q(5F(U_77`7Ls5myS^S7%+L^I{4~*3oiy`Au2~&V8Ld1r1^iPvsz<=??-h(eypTNDpWe;9B zJH0WFtSE%dl%_peITa1w%$h4%7oU4TJi!+a%9IU~6w4~=p%gR=EDAf;5>Rsrw$%=DOWH^eZbn>5ufYqRjvV(p@Cl~6Br1jW8O`k2%= zDO8|c6oaOS)B2~gI2I710cGT9QA%(@2ttdnKyQeCSd|6j1X|U%>u71RpH!0S9I6d$ zaplRf=Hq%S1qNX*xcA4GRDD5xn|LSizn==1VX1-SjVn(!m5 z#ZWbff>%`U>rtg&RF2cv81LS4_3|nr@G-!{u&^H^FQ>A4vO@!3QV>76bBK`Pl=-=2 zr&c(*;=9!mZfF5mG!riZ7jIeuj-%)_RwnKRl88Dl~>~PG2~st-PVktd7Hz>Ngn=Y#wCnf7-NtIo$#SbwtkO$-=EtdB@_gTsGWN62ihDM+R*L(?GX-4>{gaSX3c4dCI~Qmu@O#GRKezNBEYwtDTDZ_>Y`~uDd%Qo z9-;QFiViF>YuRI`MHMT$=Bp)~CES*?MVoD-09d}zWpP=%cu7b^aFj$@iq4c;Buk!o zJL6`BL?Y=S8U?8?y6FP>ZZfNbrzkM*qB_Kxc&t$BFV2wdR_)gF@j_4<$B8bXpsKY> zhJgtRT}^2l&^)c27N?w^tEFFnLo$ZU&_Za8N7auBw3 z7ljRArSOy~Q+X{&qjI+xg9{tzQFE5-)4pwj5KofQ4*oX5EOgDU$epbily|uoA=;@I z{H0gO%rhmlEKAXS`h9I~h~Q~^e!=jaJ}!6~@OEVMl=@wo&Orn$l>s$kXr$bo6Xb=M zr~G6FDK?f)Tv>(ii84amc7(-Y%3i{f`5a3+6}a>^Fryg@BtD*8^`uos@Enx z=igIVV5e^i>Sk}XZV-sFayr_S_!hc#Gilb(Bb{m)Fwy^tI?0G`?5Msq+{}ELc1MTU zJy^gI;pQR$$GOf4!%j5LXvH~acYm290C65_X&dU^#^CeberChQzE@Mi1feyvV?y>G zMDD_&_*Gf7M7TLc?dv-Jxh z*t*7a26KBx5_9{B{83KsxNI(GcdvkU8jo{{0~A#M4)3syeyGgyPBP#I8{pYigWsj%hmp`)9fyHUVv(kiy+{P0D$oa9zAog>R?fSWoFx(yZ zYaOU$>k^bkoUbuKg^Z}|H8C_IA|n$mK>@Q+S%!mc{d>L3U;qTQKcZ~)@J%)|8!Gtg zw&`R;Hm|d=EnTMR9In7+chI$@=r|+#Y1y)Lr4a2%1uTx=tpDAPJuD7$4SAUTZHSA7 zx>4PMLHx~JCS&LgWCigaq8v|o@SiYIl|7M&*Q?B6At}`2c$%J2#CHu6R=Ou4p(!?% zNM$en3}jMNb4BX;8a>Mr?>;Dqs*>&8{yx%)s?ab^M%`-E(m~nl0Q+Xs*K?hwLDrrS zj&e%y%V8zhVt0$h`FX%rndq=V zIra!7iiWLNS4pu}s^A?+{RJFqRP+2Xb<1R@Osf4AlTmj5p|N9e3EK5!JN+x2VtSz=mOgoBnTn+dnEacenG!ZpXn;DA z7e%u4v7{CF9YKh-knLS_?7w)+P|UE7g)Hl%Yq2W?5VA?C1d}zs>HczdK;qHJmcQ6C(=&XNi)9l%t{j7eVzlt?H^1+C{{OOTe zUy{=-GM)*hsDUzTbN#s5-I>_c zKqH-i>Txx;(olOaCRe2qdmw(fnrNyWX~JD!`^)%)tEb(`XosZ7cj!iZ|D*d)xiY9f zNFSbM3cl33Wx@IHo35F+KQFI-*u(ST_F87`$`z#g+2Ty5qKU9>_R(XS6xCro*0}U$ zF{$9pzlO!2gIt$|Bmrr|Jj<$7@h|!#pplQtwr~AEJAj?xLG`VvChJ@VLlyN|Em7h& z)h7LFfXm1!ri4j+M^=YRA14HGcLtoipAPiPb0mcf`bojfhNfST*{{v3UTKu>blCQu<#D-AZiPm7uJDq?869aap>sRQ@ax>14{+F2yn zp`S0C6AiT-xVYSCcKmR5_&Edk{2H^D+011I@65>=3D=J61NI9N?ES}2iM-!~{cGjV zv1Q=&$t+URln2tzBe6c_?a$Agxyw22*Vd5f>sJ8a1o798?a|K<-olUmT9LPfSrSvD zWX4)io$Q1(b5?SO?8FqA>33j!gM0 zwok4U{lVO`iG1otzIF+?&V^?QChUxsfb%(zjdb2;NEJ(meQKz8_r{0!k(^D<$(ao% z;@}y$I60$U<-qGX(&3aHG+r>1rZhArXw1*eXJM>>;so_Kin$XAD2fZ88d)FCv;gCj z3Y^shE?`q@55m@XNk*JvWD)1sso|##h$j`3Ys>uXk)G`1TP#AsE{W@uq23R^RY!b{ zURbt`T6VY1Wl#|4t^+Fvh7ysF#hMPat)`v*$rWWU+fpUUWUHrasxH5*L39{YpCwHt0*cT0W%^4vx0_U5eV|H^oc#-0K*k*AA?OB ztJ*8}_?Jkq`(0&ORT0Rs!TBl$A>jsWMBs6Xz553&ac@d;8b`o!w@wB($ykvP4fs8- zEr<2sjuH!F>>?dYrRut7-J0Eu{*VNR+xnB7JOzP7rF57<03i61kp!+# zD5vzJv=0G3IYxz-(56Jmv6b zrq(z_{0zdb;&8)sZ_3IuAaXhE`kA1T7No@VBAZCLzOAL9!gRx6FEO_QjS-}h!XtdV zNIi)QZzI^_NZ7@3s0$R@1?#w8)Iu5PTDvga6AlS!(+* zh&U5`P|CsVN;rqrOR;0Fzq3fNBk$IZzPu z712SuObtJL)-}Pha)gqKm3!^SuLHMepH!`LV5P$2RM#!jMR7%JF6Q})f?bpXwk^S7 zvqU-vInj*F#bxM$f|f+&Xhe)+ZO2JI+0+yexW8qZIqh=r91diewDys$NE>9uTRqVM z>E3JzMPzOC`pPyO3Q53b5;^$UhuVbOs<#zaZt(FWF~=B=S8O@JAH1tnpf&k(Eq-N-&mvh zqYiyQ0J4CA4Kufam;w-GTLy=Jq@dg8!Q+|%8DbQW z@1)gNFe;1OM$o96Uk$-x9{x7Y6U{TMJ^Q<=rMXUQO$#Hn>?A{rL5wAvz9V-Bu`t+W zeVagdF{ftMTFjO~AX&75{SyM+#VqVXEY3zf^5xtO8a|07mXbSboVLHEKjZyl@Zqv5 zQ!||7uz!6_D;d?o#Z(G&u}r=rRVTH6(+-aLJig)Bffev&+uh{GjnQr+;Af}|C~3Zg zmpv?|yW*FIQDi1p7idQ&Ff7Ezv$vK2YkCjhCg6;ttFHW1zO?8Gx*x#vD|{CA7komA z;XAf3Ww=3$ILN(s^#|pPqK%Kez#hYL6NLluM zG~@(@6)iFIrzvGQdh#kciw>nfubU4`v(%PLkyg$+ntBEv6l@cwb{+K+~w)Y2$Py%<2mn7Y=aMGSS99f~xl=S$g3R@E9Cg2sUqN58O)P6Lf!)F$mYXww_J5#Rk5QKM(S zlduHM&P7r&k+IK3%vMdntP`rt-|PP5{Le47<1_CI{mqeW!h3n=w=mvG*T8mA9YXmB*hQsZXGZMLriu z+k{@o1*+%I(a5FdX{Tm}UwKVK;F0}U9#>@AfZ|dM^y!K$escJUbV6=WtvzT|@*1Gu zJV2${@^q~q#rzS=GW6XyFM@u4Lzj=aWhiV=@GYfRP79fkH_R>ZL6dS5$LK>81NIBS zGW(_B>4EczVK-E6X~N5o=M-IrF51$YFNa*iq^6e)%k&X#tLvE%g?WQ>fwZKTSXej_ z7gA6*%y!tVk|IVGI_>1~TX`V!cvWl<>qtS`JIM_D4=m`QdGJM+BKmv1DVfRp3FVp1 zx_ML$Trde+g;9}60Ae&MUE2bW29t~+i6a1I)TI_JdF*<$Z@e$6ZTMA@Nd7TzPpUT4 zp{55eE+3qURGE%ziZ*q3K;HLeLVWZwkc24?kOP|d(En;#{)izpo z<#}O+4d8zJ0RI(H+o|%QFI;wVXg zn3#06rqaX+_JM$ch&T}@^<9*ih)q|{AI{pa4L@kyx;pT|wY`v=d-KGyt!KiYH!Ye* zLW`w=ddH#blla|GM!|(@jeb3P>9pO%fWWJxG!N(*60f-%fQ+Lk56&3X2idA`3^}}n z;H+K8g4_C3&&ld_jHZ{(P5c`pa~yWYMQxUDiuG|kC!1PLQv<)&x8;kfCZW#4{cUZg zrvu=p@Z}&(sIVkj*eTG#gcuvkiwSuy`d1M0^5e=4*V*y*n3ys$cv2jVxBHVg{Jf?r z@tftVc1GfHn5wIa`p`wLxZu7*!C-|u+LAl)D1Pyr3b}r)wwL}Zh9~;^jTBXh(jA2# z3I-ii7JK!Az&@}9ARvyE&Gu^eL&7F zi{Z7tCB1bbBH~!Iw9SmOb+oWtLMdk*~|P`%TncB>kxGvM+gl8taUD*K}I^&h&g6!^w=F zuDqK)dv!Ex)vZ&6ERA)53x`%h?(U&lBQVk5} zBZw)yy6l@Py8ODD&tmZ0F@oFMY16OTqSWgvWxU(|FloYl->|J#J4B7D8Nfe)tdaPG zh^&LjlA9~OefM3&0D7{}k^0KWvfS|`gvRxzJ)QHND*@f!-QK83BU?BScX1n%i2C-6 z3<6-(;HK%l@0Czl!cW6Y$ftwHwF^z$&%CBVqeHjG=16fzy|!kH(&h+VC1PL8zkYf2 zQmkAs(>Zdzt&a&cQ7IGF=$E}r8Z~}y)O*WeUKZ5mwDxztXveZ|ozcmP)v#9)Yjw8k zu2-{K%^^D!8?`{StbH%E+Z(Fb*5)IY!%mnA_C}WZG6lO}%yPxc_Srd&oI-Z>fLi$lN+5g@s6rUl7X0s{`O6&A9dGVLq$BSVrbO347Z$#TFcv zw!^15(#NvEd&0xHs;yGkrsg&EAiQd8D6l^n%$(@SKy<=iSXiY&Vt_)bhPQx*L2~i9 zbw>xR!Yk%MlF0d1lx25&vW26 zP9=&jQVL7nL4T|7g>gr>&uZizo7;vu;1s2XYOQJxzHxX{DGSPD{I=7VXG6@-3 zCPq!c`fv`8Mb81LD|Y6sfDHm9x=kaf*G}GjXAtpvJ|LcJH?^6`e{{}Q(1c=)KbL8)x zhNyHC_dIcU3Svx(Zp<`fqtlv|F8#_rrtCZbrEFJV)h!Jn<2VceqVBVHw}>SF7AU9) zUzabx2ho7~dYPR-Pf-9Db~>euKu@(>xrvm`YG_qEtaC&ozXjSWbX;!Aa@pW&wA~~# zUD~=8g=eg?<~dp!?tskz?D}y?tIPhSteZNg1LLD^u;d6{{~Unhdp{@@|2c-b_a&P` z^3o7*9VjVc#rwFn$8ss$mmfczJRdGX9)Tagq)4M&BP+~AWU|wuO>bTU4*1h2b)3cwEwf@5@2f~`ZZZS%f6mYe>^4~6*M-bfcJpK96rOo#L`lc+B9(+ za#qI-lz}pNJ0LH@>0iN*;uSMX-B*=#)=4)uQJ@&Kd!i+mwyw6URt)=iiN z)Cf=-k;MdrfYp2fPS`_a8nQNd3AY2nk)jE=6q_YiMT=KH3bi89Pd#6u#(`$$wjjl1 zl|po6(8UBb3%KU7UR8V=zxR8+AD^;5n!;d5Vqw#hu%$koHBA#g7&Vp_z<3~-d6>kk zZt?)3aq&`FTHf6z$FhxVooR6l?AY{ek1=L}WF3xvx08up$0$_$oA3AC*gi6>w7kJI z{m%C0-(U+Ag@VZ}<~i1Dd+(Bo?Wkihn4yq^xLurleYg>5MLOo8Zb&tXl*U#A@}+fG z8iQQRY(_8y37L?tl*4IV~su@d55rN(O+@iPn`4aBi!a1OfOq8LvOY z5{s@}4sitlLeZfN{A(GuQ+eZmuG~jfkbhuQ3E=4p&6jJL|6HSQi{DEy8m`jV%h0UF zNdAJA`ZS`}7p(*LG_HH3hKr6O#Gz9@0iNBRw#d#DtgNJ%wNoVL(MT(!a)e@SK;AX zzAMFYvMa?SFKuc`OjJ5guB4^yk+_1an@c%tkX073wLPjd#nW$J6X8X$g5;qu7Pt)n zb(4@mAqh6bO)#N9Iz8WV1C$QaFg&0xQj;{bFaXpv{O|@LE6Do&+t)fms#~K|+j6$3 zrEEth+uwicT2~Zte+PC-RUEY_@?v>0TQtjV|4K2kBu>0m$3LOVeIswX<9Vb08{}V^ zHVxO=qDGej6-=v>TXBJ;Z$HEjLrH4Py!bb4kFgFPL0Ls77ybs2YZ$0Q+f|;Hcm^?S zFQ5u)Ms{}ew{h_kx}BC6UF9W2$0QIvqG%+hf1)W6F-B!On)v=*@ntC|`Z|NPjZ?9q zuKJj?6C1p8JJGXibBAWtGKgEO9l&r&LdsL2n2=gts5$d_5?BeOs-&%fAt3Z^|_nvBLBd)Gi79J-U1Gy*( zVt;O=M*2|0V%?RVQ+ztC(%6~1Mp?5J;unQo>{MJw4wxzeJ*BmGrW-M zpN#7>C?wPmV=P0}5Dvvlaj4zipjWn93D4Laim^epT*v!sfOlPaY+B{2?g@sVS}36Cr|KD?}tJ17bUVH#$bdl}2&GE}ragteI-o5GRVtr6EHqhV@+t%DCmI@5wJF z+pz73kR~k=<}|MZv5CGOSNS<*k)C&Ff4L42e;qu-L#b#rKN;swCKg(SprikZV}Y+IbwuFzv(0nd+No`dxi*rQWL*1 z_UJM8VM_~UFPkWSa||Hhc<~nN%`J@V!>PYhH6F1Jq@cl*-)V_A;_2lC%1teBnqIwl z<)fNC63fBYPye=36o(OTMc3P6rschLJDney%$-sm7Z|l=hd6bAbjm4$OPD^ojC6oW zAGd0#He92HauA?E>UKbeOu0XWBIMGU*D++r=7!2l0|JbKh=(1KSmHaU)o>z90yx1k z6*Sb0M9D&Wa%_A$Mq@?YFU+3{T*0d*Z|8SV>#iMAc~uYY6U zbO357H+`b{xIF(Oz@sDnJ{h@YJi?X$>Q%aRk5|4eJABvH{8U<8xRWTFV<;M^m0u>8 z?lMc}-J0*xQUH26=R1QXwP=4sxuDP>GKXtSWRj-~y+)RI2R>|V6mSKoGI|5H%o0wf zBZc*HY<%;e5+BRs-`6GBOYOQ5tI-IDXDPKMI&qzIGf3v2dSB*A*iM%rWvQEh%T2i? z7P6o?m--bQa2=OTJ~o8mECv@bW=E=hZa^ews2E&*oga}Y!)*lB>{7ED4c7#Fe$s4I zT7T_H1$dTdn_Mt4O$^8hNN`g~*;b0yEJKZ{lk{Ntg>S5DRjZEHK@Cqf3YCr{L~T#K z3~HrhEDh0|0UF(bvz~=Hd!qyNjcTN8jW&MIU4l#pM}dzUpw>Ld!sR*-*bZnwUe_zI zh`2aEoWO{rvhJQBVoloX#xhgAXopHRMIPp2LFB?4d*zyr%{^nyuJvWshOGER5xr)( zL0)O^*Z^~}$F_u)A2=AyJJ6{`p2Rd|S}0I5U)}YyK_;A$L2eq2M+H}iCVJ}zL{0L0 zM}!(;+sJb-2f5e-SUc25SI#UY3EBB_&*0I9&azj8*}cy9oP; z&>}oL7IiO|0ji8kbe2tlD!&7lTMk|hW&QM0FUfPYc4Ja8C*2mz&`cvCG?bu~H>n*3 zN<-1$(C+kouYDx-Vq|JTj&_VUYM|R~5xvmOSQxeyXf1hg;sMC8QG6{j1vbM;0P&jK z7b=1i?|A5{W{2>?lO=p;OX<{gvj(uM(yUF?=aib|))23BF}<88*abYlK;;H*Asr2R zhA$y-c`Rw?-IhNjb(r4gBCbFCk$WoY?76hEjF;w++Ik_x8v+;vBRSC?%;7GGtJneO z+_x3(f~L6ZI7knDl^blfqA(Xu7u`$T>(s0jUHNn${OEmfw8&l9vIlT7q_APm{Dy2? zCKP8(WH$H+m#s=wBPrRx40rf8li>q4y%){L7#~@cY+ea;JI_ZWNm&mW+~QAa7X$op@0+^5z>E}*~WFES*xdbf>eLoAhBhtaEI-Ce=O%-Y9o zS5yRukkYy7P_qm^_dS^8XHZ3Jsvbb^-|sDU?xUKgKK;hasB{;0g6_t>oj{x@o`iA( z@sKPOB<<*RERj`6zM1lp9+66#15z{@uW9O5w@>j^EP0c0I^gSG`X zxdZYjHa&Iz?jox*6(JTi087eavv^*D1k08t2xe(sf&Cb3ZP8`;o@?Q!ef!WT2;r^2 zUI~TaUOn;VGmx!8lY!F+XKrFaZcM^QA@>UtAmt&((OdfvT8Q=F0~-z$Xt@sc24OX= zD?%%109z?$>H(Ed_D4C`kK4sl2qJ<|Dr%a?MxWY(j{9wVL%El;()$(1sB++<&_IKD z>I#P4^F!Vh6kq-| z-rqwNyJP$P9*FxAdpK%EjQcynXZ(Cu&92<_Ld>`6YitMOPt!Ecn>2(0pek{2bhA2r z+07Gaj2SlKakWqUD0Ian8NF7cYo`H)oxY*%et*Bsy;w6yd{b~mgk;nL#(TubbAeC8 z$N9F&7L()*!kwhz1KC+FWT(Zsp6An2h&Zy_!t2-2A$chJ@4C{GJpQBTf_Is1{R&xR zG-gg3W6%4ZtdgI$-{tQNA96Jlmp`Ivq$_5b9&D2Oiipb5Ux&;#nM`E6L(ytSC8x~~ zZA}<&mTt^Oo7)jf9IpC4n{Th8?c79nOC!y`-aq?S>%9VR z5Am2wl?C2++VoovfBuZCW)cf`#_{&z=Oy;Eqcs*< zG0GK#eR5A5@>ig=us>LXemu)XeBzShxn610B#%jB z3_ldzUcMm}ZK*Uywm>|I+sw>b-R;)-WS`4QmRJ}X5H|%bcKG1#VfWIlR(yJ(fk9}-o57mA zzFa^$4Cu)xmc+?NdJu;_D_k2cn7ryDlmq%k#p0wqJ7$T6EW7+&gdILn z_nuGx$uSWAHv}2eOn&~i(9H7vZ1lZreqwD3^@2?P%c(IiW&Qg(U#R4&scyb@shbxL zcYv{F($m!~N@|h71zbc-zx}g=d`lZjinitzTq*A(bvqPHzV?C{s7he46*Deiu)mUz zvXR)YZcNKC#1fg!uJJDJON37_kB|Bg))$_gFrWv6#QP({O8 zvCmR60R`^v;^4V%2@}z2(l{0EiU1+=5IQq*WljJv0WH%`Qd3M)2Q`(X;^@8p^+~)h zvtOMzHJvTO8Ny)W@Z6GpBq()8$eAM%rX)nq`Yb^QB@{Can^aV4m--`(E^D#a!~AY0 zZ#DsZu&$$C&d8DRe~4^KTj_paE{h(HUEj53;%Q+7o0tg$)nR(6g)IGH!_K}j%=mlH z;i2alU^b)!oN+lEjHkJ;LdV%r*w{9DnVvd^sH*u1!VU08isJ5%M&8$)c~Jq;ZhyIpCMX7u$Z zboF}@wZ}`+s%e@b4Lx;t{g@QQH{Z!ceiQf6SyIH^q4?_uy{&vtH~Ix?h`RaKKs&#v zIs^F?tA$!WX|*@;sVX2MV^S3*4|OxZbOcS|VwNBDTGR-6nOcRf;1a?v1YqV3DhJUP z$_G5OGUMnW18VS|?~q+%uJ0ySA9tx^`Qt)wweX4pJBIgq-2O`y8_ktShgBQjRj z3|>l|)Qn!EsiUPisn_U)+#HyOq1H7twKb$;i=9}}btX^8lo+Q?yzFtY5uMyOp8#gD zmcLy8odfpQ#nU-FEAnNUBk28!^WGiS|K9%jqW))SG1vG0PTsrdp7yVEhhCGM>x289 zu`Q(|=WV+W46Gvl{-rSciWC9geQ`ptMb1#q73`;9-KGk#Y-#P) z?f&sR4EH~XdWSGU0(5D&Y}>YN+qP}n>auOywr$(CyX^XVW}b8JG8ehaMaCBqZx|*i zHSWE5QM%Ht{=J_T^FM`=)PMT(J*EF+$eqdxqhi!OVx5dSbtO?5D6B8qL?GdGG&;O~ zkXjEl*_&Fz6-(wQ{1=If!A72lUE$g-1;((=_1KXngTeZYDFgN6m(x;gOVs5bU+(=S z+_&W5;KV5v#`rrymEkizoFj>eqDj9LkcKHlIUj@0#q@;5?!2``+A~@trlkSS zi{kO>3M{gpdty?AY)-91r7KBj*C=71rOEknjOi!b2{Ot&(Mw}oox)j;X(`So^M_xI zGKaTIE%<@6QOk`jEIw~)im`HIyTy7f7y9rlHFJoT^i-KYQzr8DO5!6n;v=7aGS zF?iZv>T*%a)~%lpDq5ge#ZqIqdK@&}4GyCST0~Grg~ZQbhZV$gH4?T!_v;oM$c&Tw z?NXn1w$58ae10i8HoCRiid3rz5NxgbwP9^sdX5I6l&n8W$pGk@$fa4qHpjPrf>ZKv zih0O*3{csStvI>`kBLPzP^?peUJgRrPURzUZOP$pVuU=a6smZZQ6)AiaYq)t4g?<% zfElSHL#5BxK?u7pB&9A4T;WihiS_J17$g}J8HCpPnh&JtI_jg()o+C!Fe{4 zHCe-en9mSE&%-b*G~?Sh3^%NXEYfl1XKBH`7(glrNRd295YWu(lr&S5Q_}WiAbizP zQ8!RG+79#gjNaf~-X)jFt4=<{UuTsSMZ1me_W@3Q7$&*FPVy>OfmPvH-gsWiMSWYw z^hD1GvGbfLm7LOxqTwD=9$N8+3Lec3w1PFSha9*>ATlJE$9Ew>Y1~l5$mcl#uJfga zU5~4cV@E)Rd()*4a1{^By~SX%YthmsHHj_iSVl<_RFLC|8KXW~!e$FDlJ^3ojT%6B zB>-DVe*@Q+7b+}A9m*pQJ6UsNlv_)ip^~V8nF`>ZX{hqHKM(E6TtA@oMMh`0yM9?P zF^;KIzJ|U=M_IgI!-#5YBbAW2pudSki4xTt4RkmMP4fH0-_RlJ#cy-2cie@tgI@k7 z0nAI~ledeM8XKI$jsMe_u@{IFf2tWHaF&%38zX=KZ*!w|iz+99YkI6?dxEU8b1Q81 z>&1L-D#;6+;b>5QZIvvZYxnMoUymFQk91=6Um1dR;MG8{Y3!uh#ogldmrE%Sll_Lc zK$^DXhraIFkv+Whu|7~Yqvw>d)eB?+L5`0CoA#cuz8LSd;-1DvH009R`@OL6 z{}4Z=CS~Vc4KeYT2}y6t^3xUKtm-dlR%`RypH&&^gRnhniHyr=?c+Oo@9x=OW4Ffr&{M|0!?OZ?h`EJ4Y7E8sI zUH3to#yvly4)G3|1V#BOH3e6c%C(>PM*{Uk#ZF*kY*uAYU%xk%L58j^a7t9R706LA z-s?yQ9I3hag(%s{klq8|`OMrH^Y78f88&c`!1vd9W>i*6v=e5Ti7xZWT~o4X=lz_N z#b}AW^ffbD$#WZ5^;;k6(y)sE7Lg&qO(U*ysWUZVFa3*ZPHfeD;(MU4u>IyJTXPApz(%h`Nvj^81k#7cj#jc>+xb;lN;{(FG;9 zzuRTp97KytG+s#M@_kG%Zt&8MGK&6?sc8w9XT7-@UL0MlBa6yrf*=G2?B0ve@r-E~ z+v)V}yJ}_Tp|U5p?&M~3=!O#RZaB)pR16EGsm$dSBBPW}1&j1y+@4kPiqf$s#~8>7 z7!0fC?2XJ}|Fug7UVDIpq{Zlhuvcp1Yp-U|%h5dQSB!GWtfM)wPeKowf*3C}7)ebx zaA4wo;)PP(D~MhZRYeHDT&(6kAFT@PKd*(O}N8j?!bG#J` z(2FFr>?nIhFHRUOz(4ol_cB#M2asK06b#xq1#p94B){oJ3uYXC}FlXEH7Fj zTpK{V4iucav@4Xs({J&P&Leu;6O)t$7b~l{thWO=61e)P*_IK#9=;7+Q-Emz^nUdG zu|5qweIYvVG{_X^4m9hafse5$Tyn~Erx}G!ihG!pJ!@EVu~Wn_#|dfwR|A~nK&1}& z<2FR4LUj_EGebjLv+jA@N(QEHVh9I&y}e!25l?aeM9sX*NyKW0ZC=I3mx^eCGCI;0Wm^(<9zD-Ix~}I~s1Ms$>dn zk%F?5jhY+186Gyq>H`!L7Gs$PbwuC-FU;^2)KjMc6z-EZ#Jv=E5!7zC!CkoPcRYob zQJ9x8QSd;#3>N{@5{{OM(&!OW1&tenHJ#%PxPcm;FM#U4`m|=o_J-aZKR%340Sgpx z-k_5=)a&9>`Ya&`A9O!3VcGdeK_%*oFN|$wDx=;UPP%TGElpc&lv z)%BfT5zjR;XfkP-$G$khT+l410V;y^o;MfJ0CHGHBJhK^+C>Jh zq}CvAdw6hN_Od`-_VE3;RZ^kMHy-OQ@)e$?W@(v{D1H3_u`TtJ4H@*4Y8>i8f0i`N z>DO5(Sz7Ti5y4Y00q`HnBou>y&z@P-jBLhPN=dM27>Mdw3kkh2&Syt*$^_OTu+w@m z035|;s_B`GHDe1Kgrpi4$MfP)RS}Wh6gjJ;K|bYS_P+*$6dX%&7sM}bld}Sfqm50m z9oF4I;I^;;!(vJ$fL8E7aV8k(U${^z^awGDuLyw$)iuI|HOECv=WT$E**LHZwHwFR zlUh(6WpXolpfY*!9DpeV#gdp2<9#zp$6J%YNweI8b7p$8ZM!spT6;=mejlwvk#X6k z;0{ILr!b!->YYCi3Z6}N_ z$}t?6!?w_m7k5geIoL--SrLr?0R3F%Q%*y&oy_w0OIq;!>J3LrHoC%Ikt~v8*u={v zF$wUTd>}TK$)*XtA=%M$wGVb0M2SP9R$EthS8fz00PECqhybKEkOxdF5aVx}R+KRq zcY;>ciy|_|TO}Gq=LpcuC<&NU)vMO>9DmzXDQr+o(~E3QeB~?%ZBAM`go>6qyf}8H zmB1fMF5uUHwtI>zM~j9WR#>ci##Cj4>5U7ew)z6ldqo0i(n(;LNfZ!~Kp%JKGK;AC z0itT8WGeol<09m%5ySzJ;;Khk_B||@^p&j*E=kb93=%z`Xf21yeyc>&qrQ1-L2`=i zYUW#$5*BY#zoW)6CyXJg7Ng%0ShsZj%)3`2&*9B*c1$NvdW+EywbnWN4K$pt&0K3I zb=noCXJA9k{K9%w8t%b>r+;ZIu?BkoJkTV|Z99G`BiDW6a?~4SutM+#AM4ec1Yd5P z+(CU2hPxsN-#n1>a+4jE$>(*LA;8N~b>fP^gPYBx5Ty#C&|0oCUy`s)bDD;J)>nY5wu!^(F;(c>KlRKf zsn)wo)>Ojk_Dy>=b~@;xEH#~%a3RUH;35p>ZFG|0+PQ7hid0@G1YHv5XXU^Hj#|U% z>sRX5Tf*SDiHi$^u0dzxz8?>t!@v#|z_7OgyZoyoW?`^B6pm^rd0LaCEE#}>=nX?7 zIdnN!j$Zgsec&nrK9Ijqrb|0Lz0YsMA1+qxA{g5uK|^?i7!RRKkUX|K4~DHq)2GwI z)sFx4_M`uZ*@Z{n*6;KnE5alCr4TZ#E11sa(ZEawr3t5P1)fM}(CycNMc7Wr4a6S& zz=nd7)0{FialZEf`u_%R6DHeyjvt2j(+&FkS)_llq#hIS-$K)Wf4kDG z=XwEubw2(?Ohwd5`&j&c)@Rh-{m9ucaXgC0KVnSnTs8@k%DsE<2Gz-Pg}BT5<{duJ2J|mkxW}4+m!s zu2_*R=W2m}&1p6J%@-tFril4k$A9G zji_pvknzWwmT+9UdDGkTc_%8B8SoM8U#XEZR|$|vWT)7>1>yogKDPX!+}x5&_k$gC zhL{?XxHBHv%=VLxJO7U z=#?C-kb@J5TEkIr!sqp*0j!OvF66J6pDDbchOr!^i$Z8r&z~tymPNUBHrM$M9ab3( z0}wdd77DY>ue(D3O1`-X{8eVa17*H>Ss|0wetTBU(s*jNu4dTtH z?KOW`jKo}k)k)IaX3SF>67xJ{J5#b^6ETiaBs_Ul;0BH8!2X5NGXBwpgLCWuIPyul ztq2@xX5W$9Ri%if2y^Vn(X#x@0w8v9vq!FYHMr3CY3kG^fqGZ-lQSVByK66IH}fu^ z=Uj9-S?o0*$q_ndjVKjpRiQ{@PekWPnqJ#bN&ikIXiLxPnXIM0H~DHW^LapPWol~R z&1IO*dz%JKYs8XBn2T_$e2*0~+aWhWXPhmF5HZ^#S7@Fx*Ob)X^t-bXpK_CD3_ z0gPR`KHBWi@K99WESIWFk?xkUC`BsGbKf#LG5PK7R0z?px8ZTafK3l26q;*xEvRKxcN$&l;bh&t_h*KbNACiAs2 zDr8-m>7PtCTEvnccB_A%fofye@duRFh$eob z)RSh<>M!lXu6;jFpP}57nV+i^fGX?4UI`hOf)ro)yEf-%;NImcjCm0_GTno*%c%%4 z%0A+pBg-JvaiJcMI!JC{5cIP5Ten4kB$IJCWtnVbZjeKd~H&|AcA!Cw&@ zWY5i)t+KHJOfj8dg%O3%!Qq;$T!kMR)} zXg0HKazf&NJKo0mv(eZVT(V{@7Q_K;?1bx4l57kP;$%z~h4zR#%rB3MF%8LU@lKA2 z)>Xjrbdr@|L;+Td)0XAbAy$@?To3XJCYeT#`ej$_pRj8homBG@{Sa{LSgPQ(Etgcr z+u>2rMw&|OdH_YfGEa5+YvQR%>E;wI8d8N9O1u{RrF?TM40`1qGI~pisy$2dYGf1G z=)-?LR1Vn+BltXC>4#Y6vYfy9ksq;f&#ldUnJo5)#hWQkDThkrvzZwrg1p2&9&0;bgZN@ zqZ{fgF!++=vhY%4t62765C)Q86dGN1NjC_Tk1nMqXK5=b9VlMTO-pNF)U{mt)M%K^ zvmTYKy+e%1*MARs-TV=T7sTMQBQ|G#Z>A(Reg~Lt){2*A<#fwc42DM^fVgs)(scbi z))H@zhY%%zcRe}TT-soZyCWrBU3wrr3`u=CB-F(kLZ%1+v#68&Mg3;wn-FV{;h+hb zEREGg<8ae}RryY&YoJL~DPMR5xRk^$x6n_RE#*?&5`dVs{A6nzDH{fsaCSP`ef6?s zsCxN5Yq)0l@6^;V#3Xn@TgN_9Kyh69*ZIuo`8GRrAREZj1tKtJ7}X`!R_BTWr|j3n0f8W-PE3_t2Lpc+b#!Rq6x9k{+x?+IK_3H>mf#izIF3f&rBY+974_5 zXK*Hb>}<+h+fWPxeSAQ&td-vr23yQ4LC;hlU7LVb=NLkCyA>ZzRN6o?NrYjf3b-wE zRzJ1)^lLalL*V`XXt(CixhsjYtRieOAVKMEw7cXHUM_`MeTrHFaux&A(<`~_V1-K{ zJg1@}jbJ-y3?J+>US*bSTKC|%Xtrm&S1g3MM?|1Aj1-C9Q5u8ET==Kdm>cBYu;`-S zf;s2?aB{^r#Oxuo!y2kk)`H*3UoEzbS@aPw#h|{Vl@`mM*^vA}rh?7ueybs^k zhZLLsam29LxT8gPOe9(PwDBxI2_0B8z&F|Q8q6%9?r57v>2~XfM3dos#dC^KMsN}sbslg8C13^7rm95;yk($7o zac>ULgLIw{bdjQXhD;SzwI>CmEI?EpB3p24?d zseK+-A;SwNzkunPtVvDpkJFK>k1Ju?;WYX>RrYt)t9NLltoG8~>|XA;LX?&onuKdQ z{>Qme*O#v7e$L$wKYTRm4=}6by-F)U`t!zR2lEKAy(2emG8eF9?l8rp2=aDa^`?(K zfwRgk>UNzf5P=7rdeq^==CCt+)0F1Q$zk_);hhP~7O2^06*+s`+2T*-Mv&m`yAD|5wc#d(%WB0Ut(qGpQam9A8^Vu* zC842Q!TjYu-Nqu&qCyAQ6R5ro;P&eXp}uKDKhUbnJ{+Kz7-{=VIJNWme>&J>4hVvWaZvz)(>`OZca)YpP=h zW}JPq1tRm$HPf<4KO7>F7&h6J5-MHrGt)w%PDW#m7LprruUo`^#AkyAsR)g$-;^}WPe;>ZB@TyV4ooxj8ix- z6%eY2(3+an|4I+nH15mR$b<19(A!E+RHCd;oE?k=>Bj2Og4G*sbcW1Y1mP;6Oms)B z*cBRBV&|2=7G0 zCyM+-vc@(A^;g6f8woBa|anY;-5f0kA2! zhq4Sy+D&5Yo`dNp}n>NM~9lgddSKbftbpzogq`)@6&=LG#X^#7RMseQkg?_X#CHMFz>%WX3wv`#)W0bf|k<#Ca{LJKqI@>0>fBKapbihMkx zN~PG&0X#rn5X4DVQX5}PCUd0CA< zmwWX^XG6NgSvVhOoN$DP9)*q@viA8H> zCE8nwj5P(gZVZkfV^Zd7mJaM0g(5(wg>;?zz)#QbsHS4BVwlF0@id0{9 z&$6~}1%=j#E+v=lXJQ7UU=m0WDTO_PM_Q4=O$&g#I*z`Z-hOo;$O39t4L%bJpq zCT276u!Z%m8f9Z(5m&;kt^*|KLf^u*#F>Um@O&^ z=7ZtIn^D(d6>?UxQ0Cj>E8`Ikh?K|$JWXh?B@tlXO!t<-RkscyM2Qeq1u#adqeA1g zY;;3iaHg?HV|D-&Ah$JGY+b=LWV2x-GDizS=6Q`*W11`rTA6#Kl*!Sie@<%>`gv^Uzj`WY`npgT97 z0S^d^R8d{JS&5oCfaaMr*5Iz1=f=&h%iW)WqK_#a7I0cP5i17$$@{F3Q#@^z_MZOC zQVnjs>XYbmAfln@JT=Eepciyz4%^#{^8jE6&Tnw174);K1-@=^qOw7(=vdcfCtdv=3pX>2rJ(Y0m3sYhgxL%uS6 z22v@LtEMc!WQukUBb=jiCRnk7+3&-B-+JxvJx{xPkm?16p7M<@`+8yY}-dJkJq3k(75K)VF@uaf~& zFE=J+rgI1E&Ba7Q&gOwH`MksTGUkF;26R$v>*VIASk<;}nVWDEE_$|<9J3+TSy`p6 z!c0BHEj`GcidHz;TBc!j9c_;g2eL5K(|FBPVxWyWNlnQlNkTe}vC>~WfS%OD4%;Q6 za;%?Z$hqa(Mmx@636AqQv*)#poipdX0~L^{LqA!ij#h=SB#dGuv-TStETJ-oQEk>N z5sX``Mvv_dU35Iya|BGcHauOn#sT)`RtZ#b#o4iI0k7q3 zI(hd$*`TKl(zUEfI72sl*Jyf2M58-JlE?m+(*Cbe4oq8jBOFKn_LWc5_;hL0E_sS0gaxBCdP*+A& zSluBKiLrgfGtHeDnk;M^xXj=_EJTV9GO!vfnT^fz?*(HEn?6D4GjX`fj(|;XXg0YY z{veQpcaS*U9zQg{B}7SRMsxL_VCWz}?33$?)g5A#%e7r)ml8Sh*I4wU#9)Pe&qebA zBgX^p{e@`iMQ}=`!=(X>Shg5M4Hr&7<)A!UzYrz+*tSE{=*0Q5cSrnbO5WHS%DLut zYw|X}3H{4!>vL#K$TV7h#$-%?9Z?~_A^Bu)_Atwo#p-F8#5PA`i*9Mo?2UY#sGP5rk_*EKXxZYX%y+E2oBZYUU@efN{HKYs^0f-&F?AJ@9_JNN^zGde(G+MvPO>a zF+dIy3M@6DWM$1~nsyzxrTqqvwAWZoyAG(`d%$3!PV}-e2B#I^hKW;tQLsW{`=)(| z6ON+Hb{VWdM*Y2N-4?6+v`k)XJM#Ecc<-Lt>VGykIFwE@jZ-4WVlB}%R=Zg#h%wp* z_~pdVfJs}J(Xd{Zf~G$HnD2Lp%Nao5qf5pamy?r+4bSK~ZpWfYxMXvp0fmU^k0h%) z`G_4Zb9i?Uapk;V}g%mw@{(*k-Xt9mNNHNwAe?tBzgdwaGQu2y8jig7d>(1=h+2A=k*C-FHVLxHztF8!f;X%l8QYTcu zfy_C1zEgMZ+ZU~f>z9~@4XN|U&PGAI_YyzhK7pcCqcrO;ZNDxNUzy(C#x9)-*^3ia zAcF_ta{us}Pap$^KmU{1#&x3Bv)p@cj~0z>D*N>yFAOfDVVXtQj-b@I^);IGi_R23 z3GC`NUJnrnXFKyF{fpDaGdvtnTiT|uOevR6##RsSR3)CFgVn>fpNzYuCcM)F@D4|B zV*UVz=>uxk0^^`h(BMJ=!%8?3_O{qxgDknjaXL#THHpdn;Wy zUe??Cs>RbfEsA6|IAIrSI3YI;ej;`d2{+3H=z&RF@8!J-IqRz^GSBSer(Z^>q+vflM3&IE+ubj zAkv`K9odCGqZLVePKx>3nAwH1~&o3f*vL90Ebw9lCrKPnHa|qj+smt*sZBXSYqhCl*q9mRzmeifemxn z$lW7(h{Ypleh=)q6=Ea-)tR2-uKxt3TwjKB?dTU^3IrwBg_Nh4|KX+T_nT$)(g+z0 zo`*`YpSrfMz$jXB+9Z?(3M!twv)&2=4gf@y>iDUmX*WkKx#De8Q4bBO@|nRczA~l7 zEr+a9F2m-BD4L2P0ki`)`WZ$Z>iC?y5vzerU}VRxU!__&Cbx?_-rqriB}|1co|Ne;SVJ3ZA;eH&Omy@ z+hjrM(E%5m1~mjl!W^4`1TB$zC|{KXHaUW_zAi;4y!Oy{Nl;?@zUBIv<`T`B+7D=lyv zm!A%_abPkK;omTVtm;`D8KPM2aJrg|*EE$!YK6tpx&n#+VPu#W*h##0woBLCs+KV& zV{cQB&RxvG%A&@h>~UjBLvg~l*aS>;kRgbzvNTOub4CjvaJXHQ=T`q0O8);#s7w4g zala33E6D$0RF2bsMd^R#`~nO?74GpH0r&(gcE9!JMSlM3Q}TaueK|KIw!>8LGYGu; z{QkbC|NLG>3vZg$T|6`q~wMazBTK!vDVI;eFg{#HA zqmQX4Q~YZ=+`S6IiY{RH#JJlUL`>^M1ovIjelZ1dubZV;V!&JP|p)CLSGNtbog$Rz}FV(QcgY*KS;H z0rrSuFOubxQ;lzw~X(^G-XxdTO zwz~1N@=GKJXf{4W(OEFC`XB5oQ`GVeojqm5t^%VILbJ5~#Uqc^E0t{xALn1x+)lH% zXNSCwSr^gAdaKtaoBAv8^(&xno{t3o93=jgiC$eIVESoZGIBZa*mH?!$6Pvbi3e(_ z^|K~bD)5=A!CR_Wt`V?0{5kc_w)FZ^&CfaMXOpTL-Mw|*C6>_SZExie>`PLtz(+Aw+>=+m(26{$dqR*%ZiNthoO8pHUMV{GC z5>RXE!g!Aho-Jl>1Ak+@Oi~3A}9pd_nG`OVS6NV62?DMc5>*+K-J77 z)$WYHNx42r_Y6epig5pFSPq9Pf1(*Gi@8GQcO2c`hriyJ-go~Fc+7pzjeMfmdtW;q9M>&qVTMWDj=v)p3K7(o$&m|b6+i=KQIX7<&o>K zjj`G1p#wrRMGZLFh_=e>(ig1No=&+oq#m0_BC7DIr6=|zY~>@T75p>9PoOL&IGfAooZo{zj+X@9`w@ix@OQRe#EXaJFju&}Y zxpfu!9aZwYZyewQVojDZUgCqxcTjD+rB$KL<3olpM1q8jXhPFd7?ohbQ&qlAx(n5t zMcshvlR_GViC3{cd)dSwbe1ATvREAPBX9aW?Vg2K53C!Wxo&p=G`AVYV`hf1$%N)k zp{1^I+mXt*(;*U5W-oM?9F?x$=F3KZ|0Kn_JYY$YF#_I6o&! z3F{!PE8fpIu!&X3u>!8ucZz*td08SaMR-|a|J;CjQBd0NF(j)1Q^ux?B8zTnHQES$OY1(Fx{is@LYV|PPoaFejeY_E~ z9hGzj$4noS=lPpddlg$b`~WLGGvD-+fGH0w{d@eDC;DR^@v9j-{l<7MD9R{?yuADt zwg&qh6e%xYe+lVI{nuGP*gE%{4&BZJe%g9hK8=0tYU|zV*{_2sh1>zdYND6~EImQ} z(Px-tp)1X%Y=T}{RLebCUy!Azgy6!U*x%TOK5GD7?pYIO)z1B$I!rJexO#@#B_xS`iOCg!nuR`6^EdJIwji|$vq!k)xtw_ zLVd}b_PW(3i0&D2MlFki(E=5>MX+2-(kn&+4mlK0Embm~QxGxn?PqIk`JpZ`FL4Db z1%)0C#{;b!o1sl}&8!2GZCHTr${Ge`IS;lyl3pVf9Z3jt@fA^JG2`KUYKZA!z+Y#V z^gR8q$|xm|Z+zZQc*cE;hYeR{)#ybwQ%V`icY>DQETII^Dbc(9 zEtAR7HTVeopMV14k$}Ye^fNulo(HIJ`-2p9gS_iQ-Ei~6&J`EzUB=LDJ42Ylf%!r+ z3>MU1m|E*A6mM?Q@Y3Yq1sz-2_;@%&&fz1krnQn-Zn!dM^aP{MSw^RFq#dmYGYlwJ zB-b=QZ4>%Bx-BK(+n^2tE%55%J$M|b_gf=D-oB|>#jtr)-0YG|wyHjG=odCR7esYw zRhVRqo4X4Tw5<$$F03B0m8zBe{UukhfNqInhgyN@hE+1hVA7PwXo!`CfC~$Xo7OAt zm5wuGW;|0{Q!6v)sHhImx4XrMl;j>1P|@_MQ>6z_&)ey*3Pn!ljOh$c=Zfk1>@$DMA-ty84TG5@p<&aavkqZ=YPgwaz3rObXnpjXXg zxjtm&!SZ<=D0QQpE)KS@k@-cwoVTp?vNby1KeyYgpHFw_c*{^JMjb&`Ar&7_O!wJ# zYmZ&1&H1-)HOg*-(cNU2<+%Q=%O#6gr%IOaoho7xvW8T|BN3VO+*PvOwLWd;g(942DB)`>fhDdPLjN=a729f-O9FXjyF0}Yc zwD;>8kxKFs&HqUTR8Ntj2py9z0d>FD%5!dhn$A ze9qEgQOo=ZKv&r0A-pA|=q(t6r^zO;5+`MNT#B_0=x%Uhd}2W8LHnzL5f9*@htfca zanAR^Eu|=Tc+D7=_2o5aWKlm6HsQpTlgc1n`O;HVdzDGxl{E7E92dy?piou5PZ@gm z&B@EBc{x3j{MRaBlmk0NRSFiwb>qX@@2rh~a5%c%kB6pdWw zmjrhz0h62Hp**)c=?#--t(6|PAL#q}l6Mquk-TQ=nP1zBEui||H36Lv;`(#xtYPiQY*9w7l}K&We_=)^LNn0sZbRX zWVK)dl=Dv%Z!jav2@r1l*c!7vE6|Mvxx_d7VZ}tI4RhDivhu7h>Lngy9tSLH;X-ZS|QF45$XnE#k zv_F@!DQBI9(h+olQaWOuRmOO@Q*G?-mG0Mb*CADFn77V( z#OVoOHcmuwA`0wXdyfbbadN@N=(XWxgz;Mjs?7~y`Ir{tXu>5E4W;|VV?exX`%vXJ z2{~#|9G{_!Xjp)b-#XTyU$qjNV#e)MI_gl*%B&Iz6*#JJwu@xjITi6NsEJ~U-vRp& z2#+mit%$eIOucq8UTsMBMEVQwQ+;r!BfXrQY7KMal>SnAsl!nMgq-5!25xjC{>P_E z<9u6P7O9!~L;H#va1XBilu7&U@O-K4?1;042W?s;eEaYa_JQkcZhG4KNwQ5KBte!E z{Q@Yfq7wul-Py1^0f^+t^wcoNAXR$;$twE+PBvGQTb(Z`-!Qc1F-f|{v<}HssCN>D z__$2fqPf^o3>b#GiZeeTJJI#a)Y6+SG6K4YdZL541&?s1f?IU@&C+gmo*TDqyco8& zy`*Nx;K4eQh?sE;RB-6Hn?G7cA61B)(dF#LEd+$W4wP_1h@OF>p?)+=nCb*^oIy{5 zuN*N8bIC!rP;Os96!^rH(JtIs|3d)%-(WzWl>8ZYZ0|EY$$wBlho63z_Wq}2I25|(;jy1zWPzy3FIjlaJS{JG1&dw7?>eINQhul$1TYw$h(u#2n=4V?`C%GQ@4 zDwY`4bookiZC}1X z7HcBMdPeGn?>y7$fj;)7%>`QJZ%uagsZ%M%=Kh1FP_tWgn-lCe|7Ab#e)&v00uM>S z&@V@#VE(wOqUO$ol!U1bnKgTxW(qxbKs`%dLeUmMgcB!RsagGXq%?aP3TQFGA`Nd1 ztP+w;Fuw7PEs;Ug!%gPDvH&1lQAtmj7a8&Zd#Hu2NCuaPZ)N*^FE0kym-#E>lQz z%7RtsxySb0x#@Bs9O?81izc@&cfC=$XCP9`j9Z^fV9Bl$7%93z*Is^({Rj*kwieXy zfZO{6OaV}!*?_jFNB3v@DO4*{I$fW*NN3k|zTsQh?&h#NmM+wl_>Q>sNmygO!U1wD zqP0nlGT*vBc%juW0#&-DX~BybTDqhBOr$}DR>dm435I1Hza?{ewk(nJZO?8VFnZ?iZ^ur4ES{)s|exDbqGwJ5nNL5ruRs6n| z8)H*Dj;){Dh1Th2%JjqG;={`I^V#;7e#3yiPOsbZWy@6tH3MKRy_j}hmzyu77_alQ z6qj2Y2>+8qQry}9s#S`=ZZ>vn2WpnDS_oxPi z%|ZZ5%BUcfF-tfsuS_>!-KRfN?!y;CIkAaB&P_QS+F^xfF3UK9Hc=B&$vN>U6KJV? zGW52H)4f|}Nkten?)_4MoyNE0S<M0d8-|*6X7lm#-J#C? zy-(@}Z@SKK|FSAAQ8IwRgLKt5WNmKBSKg1_FSl|PTH6$;s|Ry;R4S8gQCV5ulp*ho zG&!cFUAjIB8vJ3KoCO!4Rw6Fq67plaf)v4Hv1>xJql3*R*UOJDJ*jI+>)_Em`Nm2O zs$a!P$G9=9UmveL+Joi16I0=u{syt9M}wy!GQlz)(KA|&$w3>*BfrP@{85yxBZKma ztBt`1h)}AB1ch6O^M6sl{=o1^y~uKB3Bf;Pe`FZ5vGlKd{6P$nR{S$XLzOkGuvEw% z>JP~^5Y`aUQ8;LHs1c^xtxIDgcU#W9dN`)kMCm>2i_EI&zRiyN^&0Mv_vYtgI}}EU zl1i2zP)FCykHYs6(l<1K<He?+i3@~uCkj_*+ab34e&=?(j5TyN@{ zm%ZOLLRV10k1R4Z7AGd2o(pXy|KhoHiJ2R4ZN6Y>Wgc6K9dp)n2mqc=-hm!!+G9tI z{L)IR7)|_hQ<>*7)a85F8P8o}pQ^a|@knwM+QbY(ASi` zuS2mG#oE2qz}e5btXZ#JH&_^BU5jIc9qQix-&}<3>si|?2RM0!fmiaq3*pSBT!|9J z$|bjhVyi0GQ+74lzH-A0LSm&&xQa)e54(&6>>zQR4dV3<2{ittNAh0#qjaGxsW>P(OL43Hb7w}0Y*@w^Q%Wz~d zNL^?&<~F$kyb&W!WZ!+Ti0*EKctEZnMINFiFe~`;YZnUHf=3tooF71{B}tL7c_$)} zheWOVIi$mg}*iK-zYTbb2`j@QA9|E z4Kr4~TIme6gf$r!HbZSfO7+qMG+UGEd#4o=fXrtklczX7z5ZnilnyG4Q;{o0q7ahH zErWhwR79%7;Gg4T9bp-?l(r1RCdn+!Ln;|!&_i@3@eN4KnaQN-t^bd+bBN9?;JS1r zRk3Z`wr$(CZ6|MRR&3k0ZQHg{>3rY6R(DT&(&KxFcW~}Gdp}Qgpz-`BofqKw&vsau zJycp0A^7pjC+_&3a)MX7|k$)Qjl$5b4JLiQ8vl_;`+cuk=*r~9ExX_W;J%XM`q4kL)#By z(9kVO+SKIkeSE*^RmTiJ;|qcd>1m{^+uf$USCK(r^~UeHgCgeqsOPuSMLb8}KXylO zGzbXO*Jb!3CBL%<=mU$>x_B z4}?4a$vUw3J=vdnk`z%rPxxV^$Z^OsT zf-j#8yctVJ!KWsY&>X%^izaGH!0f?o0%zyr@^Ut$%SU%ety~Zj&Si_o z3r;H<}jt83Dq0|6(^=~V8Q$x;_}z+)XW>UBV4TfT^U`k~jDHmmqDFv9Lt2 zggt#;mC5(MHmUPBpJ2OKJsFA$sQhyU`f|>Vc-S2bs&JRE zaN+gTBCTXhFjA(=-v)Ch7&&%d(e{CCnyH5g zO+g3`yZXfLNt<=B!-HD*hv{nj3I1EFf!MVW)|_>bXSWIK=b>c%?b`^Q3*J*m?pn+$Jyk{qEcL5DH8Djtl~~s}7I*FCXqs9$%@nMx z`$gt{EXwIw&RyAzl}MPJIoflgNsvJcydBylYtYaQv?M4COZy$zW;Xp;je$_59nAfV z74%IZ$QXS`Lm1)f_*(EG_M__tWuNC-5i1e&{w zLf2ae`WC52M5cYnoq-cYd=}s)3j!M*0{fD&`4Z+VP*Wy22;ot`1A-TB-pF)>L(IS^ zvT{RReab8Mre?v(z(@F;m9Lz{P?os&tQBh=uwQk(nnUq1Rt1h}|7>D^RsIjq3g~Xn z?KGE7&Q`myECFVlDNH^BqQx4r$o`V;j@SiY2o4KKsHaF#W;N;QjAbZtr0{Z3=BBVn zh3!qs-`%-2`)$Y6fnGyA)F=5oECz-y%CzH? z=smC#r1{)DhV+Gl8I?6}<~qI*o@dA%FV9G{e$~jg@)92kW5k&SQGyZeRkDV6QHifc zw1!6;6D$IhHBTEsX@O+-?!(NSGHw7JY`{<|d`vtSv;9VMZ(`PSci$TmHbFe!6VLBO zL=6#uFFO|yHC%}kpGXPBv6rLp;A1`=uzcCSp0C1U5IJqL)JDS<6j=R3D&TPzfh&Ty z8>4wu2~}`4;v!yB^^3YeVYvG4T`}lru{__L$oaCqX~?-UV~lJ|9bx}^tmX>refv;X z-`K>+=tDOqbRxdQPNOPv^kM07ZE62ovt5Q(ZuNF0=)!JwTd@HX7sROD2?l5`WwZ4H zG!?VCY7Jw|I!SPs*xafTMyir#>A8cFCEDT2ePe0*8^|{>k#7B!+y7|{P*X#Cfun*P zp%MX*o|hF+l?Wm(6)D|(C|thARbJgNYI>!xDqI=C7XILr)IX$H2uH1;A73J1bBju2 z;E2l7yYw}a6E6ODa>kCR#v5n9h5c~q zPKmhMH9T$vb$!f(7j|zWx7G@IIT5IX|4F6N+8qGG(|%G*JzkeGzldK(tIY$~Nmj`P z4Wh50B_&;RwY5lN4a&&yzx$z|>)xC@`+mDr;h=9{J+B@A-ta1W9-02jP5M_;!c6z? zNqX`JkF@gdu_1OhN9voh;uJgnuYIMl5;$Y-r#5`{FOJ1xeakoF z6<=)VRG;6f1S1`c_g=F%TjP^6Nl)o)E>K!XyJGk(8aab<3Yi7j-pckTp;3z)-&Q@j}RzN zRNCWXu{JI|o^%V!0A2o3&Egjub)_OSltCQekyS&^+%tFqRt@N+4h#D548->0S8|DL z0ot(G(s2XoDjboa2=xa_Env+fS)};asgSV0(Q@ihB*$GqMAGcY^NK41EF1OzG033(hLZFc z4`a(THlF)~Mx%IM_vMyM6QZ^4ixw1o(*Yx9Y2HRzq>hBwfn1>bOi~Bz;?iK^kWa$F z0Ts@#-$#k*p9AAqU%+8*>q!8iZD7s7GL{ABWmwOZJ$-jJNJq%|E|uDDkL*3o4!8Ys z{bcyGU=pRvcja-r?Lz0CXkQ4|K=DD(W~ZT5f%28GS3H$-AhK5rX#Hv1%bvx63}7Yh z6~?}FAZ=&OlstI`b&gz3+yJJp(|P{EWXw!?c{>r_I5aA}Qaa-LfmJFsQN1c!UMv0X z-pzSO_Qw26!bLp+vNd9{))gl{Uk^1YaXWY4C1}Fb!;_^$LDRu#twvLVB%G4vJ2o-> z>5*rGhWLK2>#7Bj^XWk6$K>ofb9sjhDZ|D(QQ^T3$J?M$V|#q_BR=XFx_a02C+7du? zp1VWn_ffsUkAYLIEV=C>lva>?;ue=f;$8Zs1bJ#!-xn|G9zYIurVK}rqd6Hgy0-0t z(b~Raixg>G3$8o!iyJZPsPIRhShU7LE(63YAE+pm7EH9 zz$tdy`%ycV*@=X|5P}RQLZ%vugqr%#P1H`{M+Q!@Z=J#jIiCAOZG{y;{oZm~52dNM z&2L)ex>LCXXAa_=obTtI6bWSUcA*>32>0`EnbW%ITcwVj>h6)DzIm4|(m#=Un+jbD z&)d>l)@{w?YxBC~E`ur-tj*}xqn_Fk%H*8lg+-q92a_2bwVkaRAW)@=(n#+bW@DR) zvaq~+v4X;A99T#S4v0nv3)A8qXv_fpGs--`bHRN3m`i2vrbzhbYd{EX>iA9+a7Wh^ zszkqAD2Wl1rF1cBW3EH2SliOut57!Zyh*sayx`)Dp<9S!p*Bt|`XvxMZ4mffY$HGh#Nv&6vy^O6>SR-hhgC$EH(_a-AK-=vm zCKGhjA51Tx&>FY}HZ5d1XqT?Bs9ohkA3)9ZE8L7CI)K;h)!-rVY8^$lCtnnWMe~UH zmO`VnQ4ouUAg71lGDR4fHv7hJTo?#c#}5>$*oS%1$L%wD?=?wt`6y*N#~P4a;NB?#(1-QUuVG8)Jy4@^hIj+2GaB|j8wrZ%&Z zaROeIK$&N5@fJCVfzIbNU-ZDGNx2QCQ_Fxi8K{FM9C{2N5MhM(r$PN*9t%p}%Mrq2plj)Q{VB)X0EN=oxUxxMp=W zN%+~5b=e-<gUUw9f>yPLv%O8p1x@pkj=@`agl~?&`dSt zH8j;fjEoP?kkcENfZ``Wmg4_GE>9lAV$-WW3tLK-Orl5)L0&~omEBvUwLs4}0!^;0 zE~PJc>TYPb;NBl>BE1KLG~vy3x0ll$GI!{U2-tf#R`=fiLtJHhvO;={n^@>8K@9Kx z#-&lF`1*AK>P<|cmmYf^LlkdmOX|zRd4Q+$zQTV&)6m=lA>c+Fcdbk+5RSILmm`b& z6eZqXH`@A}!mtltg`YEi<@GX6XaozZIXCJ4-cDVl_Wp{R7%lL_R*8(0 zWYZ0)|2ciCw5Pd09>?;0h`CSlwtYIN)7oWN9lvms=a9v6nN4|TX)^JT)w6yHZF*V1 zGO(Xli%s%{TpdC2ZXE6uUsYt0j)=TPFtiUo#i&}R93m^B{Po|MNnfe>c2I0U6zr}~f^~h{2ytY|$y%;VOTK_JFg1>xK!x&d;m|SF34}JVMMLd(sRjtao#JD0<>K zfH6@zbqKzEMs-6wXce$sg%6mpYE9U)nXEN)P}}9X=@YUBRVCLnsV-EY$+txWqZB<* zyKG7ORd0d%&QqEg=NqgT-aV)5COfeit9?>^!@hVc!5qqrz6MsX!ncT<9wwBJfd~-RdxeI zcd{NOhDtjZGh7=Ny&tik*y#mP#lOU||H|_AOfk}A&*U8+!m~c=!nb*rL9x+5{lyBl z7zc$H4v3}%|B&DC5MItRs1FE@m9#lqyqmx+<}brk32ROJkc+b9>R28?H;VDGPyDF)V}B0yTS7qTmMqp z`mf7nZZhnIwS;s<&~4@#?x{P8V#}jvRCM)PfY1nYw^v0>Kwq}GslDM|47raj5YdV| z%uAHE0a;Wj&ee_3%g9CVcnD-Qa7)?~u1&__qHf2WVDM?P9jhYHFtUY=kk#J%f-wf; zHH*DXAjlPnSo1lA13!xwq5zVK!CVq?5LqxpAjckmMh3SM2cT1$+-PL6={QXMI3F#* z(VJ`86RISnW19l5)7qBV&)8y@+LleHC`Un_VR$>hOI_^%BW)Mh8H^_R;w?+FZF>R{Bv>87nLb1k%9RBfY6(a#$>fU+${? zF_CsKYea7qcCwxQCQe0zlo9JZH#UavD5t?GlwhW%;fx_1&Z9vC2~R2OzmRFy$%j$p zHO)$-ek_Q!QGKw4+>~-fmRQ<@r|m*U3hqg=B%w3v9NEv8(zVxnl1`i-Vmjclq*;|p zq|v6VpOiVe3So^E9u#e|NB5S>a(B1Pu&2EW%hqRQCKvu7l=e&F^wrGt=G(gtvSS2< zwlo~hst-?T{pBm=0-jM|2V^^F5;zmxFs>khV)7el{gcQe*|uGEjiRt}<88_^;7=`A zQAg4J*L*M!Zhw0wRZ1K{oTJtFz)qYJ$p-_4tnl`m=^$ozw7rVg>siZTx7+ayt}o4} z54%;b+}BhxjE2RYQ-zeec3bkR%b(u1BR zmNb2=Iy&FrQKN>jZI=d$z3)){F2zu z`t>uz=n1_|ICHorb2)DZr1(I6Y%6=cH-nGS#5M(mWYm!KX<}QZUK6;0`KZE*U%yLU zXG5t?7*^2Z8Wnf>$FpwbcCobYCQx8^4Z+JIN#9R8C)bW@eL^)V?E;UHiv`)YJg%h` zcFS4vhf6i>uhe=Osub3<+05~1Y61ifPuDF(5?#2_QZ|VN-mNF_}a5w zb=w!*BU*RQdNsxz7TJ)uYI{r#@w8@izY^<2FeTva}@ z_3KVcv&jGwTT($1DP#=wiGSJvH}wB1wTAO#g-o-3ci6ovTzvh{8e)YB?|tX{ES6-o zliFL?`@x`}(YGf~-1{7DcL#1LO?#k{hMCc*dRkEbvAL&PQZ01;y}Z`+;sQDQ*cHJ& zsqJ^o(AY`TV=2!5U`N{cA)OtgTU%(ERD2=V67a1ZmauDq;`SP7@k`t&p6i!y=ok=I z4ERU73d!i2F3uKgum^2Q#Asot1o3LeUr>=MVGABMyqUK^Zam&qDNOR z%22FL&zYjgg}oY5vP-vmA|Hxd6a`9XCtG=_8&pxWp#%0x05i% zbe{;_t<0KL1b6Zl%4>$nQRt$4dkqE(CYDvuW1N9GD_Jcz3=H0t!x;=0yCZqszqANI z?!ctRbeYe1TdX7%$1zMcD$)}ggro+AQEat+82$bdnf?1~^iT|6C@ zac%_G`0s%cWPLz$yiGQuXr($Xm!q<|C%J~mEaR!DBf%VGs{JNd2g&2x2vy8lTS_;6 z0aWbV4*QeQhXQ%`$wfSCA3GTqteO%`@I4bFXO>O?;G-;ts$!QE%e4Jnm&KS6b3(r# zr79oWPz`bwM<~UOrkoE3(e^LUI^0`q7b%wc{r%ow+zKGhDZYGmgp@~l$NdW9Ac>+3 z{)m1+-O_lViY=B4Av4t9pu_E!CqCX#?T$)Ad4f%sL9=ANwKBu+N9 zK@C}u!Hc_O6PukS>_hE2z%_ff4XpE0$QY6F7kx9pXvLynscgY0ww)b_b)R2BVBOJ=kFk{5Je!rn7*kMK2x{{N&b+V(@$jtRq6c zM>FB3uzFxX4qk;}Fzbz`YLc@fzPb4!mnhs;#Pxn7TimgFUaCCZkR&fY3B=1N!NEw} zTXgHr8Yx;ZSw`P|7zI3XF885+bFCcqQ!e;FkbEQn{+1)ducWKXn*u!e97x3Vz8luH z#m7|+Yo*PTBovOp*TW;BqgUs=Io??@`3vSlnEqNw)>Kq=EmuS+4p%sw{<6#wfc5Q! zkX)DWgI{9KfP^J$_ATh@d?c_DIf(uw-0Wl^83*aWKzG4&RP#mL(KAG5r>*2H_ z+n5}!B218I;;rRyu4524L{~3-r<^?8s5L9$7;L7wMD;p%&Eb1F-1Z=bEjk@gOX$Ha zuRx7&jaV~(@eTm^oLj)ZVYgOH%>_ls1(V_l|vdidI~k zwOFrHqLvL;E#@Um*^0T6R^iZPcx-BI1(hSo(ow<idlH0uL$?t8|tIs`9VIQmOijYSY=y{+tAIpocJup zSTK8~{a?sj@-`y1%xA0eCvZiUiP2&FC>mkA_V$?V))*y6;Z||^u*P^-Ky{4eld%q! zqbwRYxkO^3x%~;`FgJBn=(y}D1`qr3A!vE%Q(CA+*oi~A@Oa&xD5Z}JxVq(G@;0G1POFfYA z(&aFX6OY%Sb$*fRY0kZeM$oSbc$rIh;?a*NG6i}k4fI?0>8|I`@Q0$uV!1}qD7yho z(R0M#N6**MaEhW?A~y{!{VVGyw$15NqS-xCeUN$9mz47eRwDASnq6VTqA?p4A>#}+ zN<~8vblEKy^c`|kt4n+Z^_?#159kfY?FGy`MF%500#>miwv8_);@7i7bwiLPH5X1m z!*NiNBp{A687e`sE}LfXGsNr)QVg>KrqSCLX?cvdMa82oTSrl1MFpTQKA(ZGv3TkL z{i~7QVde?yGtAf^oytT^7`8-vJPxB@^0gQr9|l~b>9X&(=0XPxVDC_{f05nz)iLAH z6}Qo+2^7|&0KgmVbcOQVw zM~?%a9S!hd+az(hw#3ZcBOZbZwn!k*U}Y}?A>j{_~weHI?9b!(Z2)5AXKwjq8tXHo|4-q7hF=_mjMxwU1A>=cCWLe(-?Lzvi+q3 zW1Y6pGfmsQ5q>loV>CmA;p^tH$TjOzm&qNQ2n>*HHCsm!qLHAKiZa8biYRTasEk=W z%^nNpe{=ZAL)7c2EaxJB(RSj9{Z%1>>`jae2Eyq~`S|K(w<1zJ7w3R-9osYrkGwel zO0Z$>%J$iHr{Nff@opLw;iyL#VcS(~{eZQ1&@6M1^@xYE*?k_gjDN;+R3Jj&mmIMt zm5~Fl3&N&*X#Ak{jD@O~{=`3aQYYB>xi?>?44NS?80g{x={`Pc2E7T02D(2(fx{M# z+VBUe-h{=;t-46kgE>YY5Y+yQ9FS zozWla&?P=FXXnKuAni%qZ_@WKuR^Bn3Ukb$RMP-i5{v_yedX-dW$;8AF{A&==jE4L z*}`!}Hz}BNqicjHglb4}c!1OZZQmmfhLQ*;u zsz3)pz2w$6aKqpVd&)a7!Xr!~x2|2-8HPx5d<27PrsxZ!(+)i(65(AY0U`?6-{j2B z!^MCM!&~<46^}Hc7l$FfG#=6pJiUA($CkpgNHSi}J)9*T(#f37dz4Gbq!MyMhBrM{ zH=9Vq(1b8(o!`dz!Xw8OR`t%9jQe-C7k83ah7T1sfY=@#E&A12U4tHb4*Eeh=bY+;JCi?lK;-Iz1hbs%xHSnB~+8X1IoDl#E!cdEULVD1uCSqh^GMD0maOjkZ~t?+8Cv#9&CI{pKtfV8q}M-kiSO&#%I`6+~QTD#RbiTd+~o zXN(47GFJ?Mk#{9gTGT$D65DNLVIz(~TGrO;`dqKzTtAT3vnppo_N>!X$_fX=YFReq ze6*_R(AYvi86TOicNX*76r;h>E^jyZh0;R}gQyM8MM2^iLB!TrAAyAkqHy<+o0WK; z{R_lr z7eGiAEBY(srjV$OMzO{=hZqy`P^&#baJgbG7Tku6b0)f#4cJ|uzLuQoPQ*;KX}191 zoTE?SG}D?)&-d!+4XAbo`SUUY8d9#yH}^1#U=UrZNJBqv9}C2iltYq`O6TdF-!+CS zO_kYMeyTP_v7QfC6)T~y2YoiE1F#^p70sj!=p96&_gPufrm*b_)+Whd6DE!9V=_$1 z?Xm0Bm(2lzL%35KkFr5d9u!j?6NcZ73HxOw9;A$C&XK9Xaa>dIBy=6BB30WFoW0JP zK861Cicp%}BHTJGVR!nD1xNHGI^u#*>{5sWtDaL^zcp-U&2P4#tz7%~v%qc9ez4lf z_@#%?vXG_}fNIMPakrU{x2nTsUSIft)>P{Jh){$N8D=2} z?&Mp9ulJhE*i<3?w(iyFJZY-4)vvX*YOuVT1 z!cjd8F|}LL4KxJT5PQ63to9l^b4U}+r05pErESQHD#TF%e<4CS74KvVb=+JUIwi|P z@fYjuL#5sT@%oFJs_gv8KoI7{*(9(f*5T8W_=~gh#ejKi zR8p9qJMJd_K5kKHXjw05P@pZRvX87NHK4DARV449Dm8p_+f{b(CL0)fDJ2m&ScPnaBpw>(r(N6EqcuRVpLz1p~~eDpAB()PQx zi=lJP?t0s5G3+z-`u!iSj$-6xLXfAOQk{e%(G*nlYB|dSMJ|`O!FK#z>3XQ}D73XA=->+Z_mfiW z%g*ZkZXP=zbSBhe?G1gc0Ac}XgOJsTs*F|XlQET&Hs=nbS9-+lXufPWy+eG?OM@(?zOQ=LDERks0Se`{g-;z`uL{EKUR{uU!^hGY!i%a zsrXjD4A5+i(SshzW0@*{Hy_HPR&BLQDI;e}C=F>CZB=M_*=$B4W+ZXW{7V_ba4ZFr zg}H6({LuhE(@iFgZ5t30_V22++O(L6Usw(0`b~D&<-Z{^8!#P*EyHR;w5@5NJuMBN z`fq0Jim0=ghzKA0O8ev=if^47y=--{+{%;sWv1%O-NnId&Cz`WbAw62kHNw4gXoM? zvkn%r_s?;vRvMSs44WFDZev-2S;>WE;x*1Gay@_Za>6{)9}qE}D;qs+$nZIrYru2p zx6+OxW*hJ|HE1NY+Dcx;{X{SxF6RjzH$q(tEnd?zQV=_6D*w@2p)lF!fyQZv&!n5D z94ri2dq;}tVPr3xo((*|&2uQZIS{z%$Uw0>B_+tTlNBp6Q9B6^HM+7l2yQiE3|SvK z4!tqHUox6W7a9b?%CT!IG4r(8f2A|)P?T@Xf_Rz^7Pn`w$2V1JSz5$aq7P_SB~!gc z1K%&WC4UPKvOEXV5W9=23z_{%1;G(Tkw}kzN^h*YOe!CWRy4@^wGF--vC9%klFJ{n zIy{}o_|PKWW>2Trr!O#eG}&1UFX2kBTVLE0Yow0;55)*tXeL&c|5act1?h1xEDe?F z3uc4lKPj4Hp%cBYw{L8okC}&Wzn7hVFSqnh3MX_nn#b@m4Dt0)QkEZPyNWSPC-lLH zx0&@FlwZ(Kh_Wzea6T5I`qC_;&N`}YcdsH_`qOjml-v?srsI|lD+WN^mJz%=y;|q> zF}e}vP4mMP;mv}cE|Ds4tJ^%w@;A6%);G9|)UnUEb!4}f^b@=n{h_T*vowbV}R z0SF8qNN1xD;qiQ+y0G3~!B5Q0ha>$*WFThv)~o|{Nk}|J(Y1KJc-Kg~TsB|aKHDrz zaG--8N@SqRQPWqa56G^Vr<*du)*G8;hP}*-r#sq!bRITCwJ>y>4g*D_txPfMgon15 zH9|Xe+_weMRux1VK+JKx3X}fXqxN8>eO4B(|5ThOJ>&*gFbC8BPA&Z(s>1)ZNBpk@ z?*IGAu;=K__YfN%?Y~$*J}AB(+}oj1Y3H}Kr?PNF<=>7e;m5pRD6{8tq2j*;NQR_wDvC4X3y{PM*m zDkAi|Nb^RYsVd9zKzg0Zz<6_K7-Tv>&Wmd4T?h2_GAAFqhzw33SX$TEJBZn?Bgzf}Xda z2>%M)o!lM_5ko&TaCmi7@0N=P#|U9hikUVWA+c5zX#CQgh65F-VDX%NBdhuaJq)Kk zWoMZjM4L>ucc3@kIB=nPhnI&Gx{cfh!m{F`{}(KF)&SZjBgC)bTx;NT4sg=4c!=LC z5&Ln7n%3x~0()#{oSLd*2xPZ1r}w;uh&3Wy@l>cd?yxL01IW-MHn}VmD*@zMg!srZ)MuAQpj@QL;9w6r+T z1#1bV5ldW0A9dM8#^|0hJ_^*Sp#Cx()6e?bJj2iQd{mfT*uH??IA}B9!TJM!zu`bd z9-J%GKe#Jh{dGQz@`cnIf;v4rNd8`dT&_e9Jkao^`>_=Cnu90)$t31D0W}Cbg0%|4 zXv%MBm&Wn?#-frk8jvKq{TabeC;ZGMIBe_%icy4iS#y>!dS$ss(eU%kjGIp>y#@bG zsy$^%8o&`fT|2{ez~+_BQFfiU{!XVjLKQ_VITe5;avLD8+QkCsl z5DsIb!X?I!62Sob73~Zes#o~Wegh^az#QQY$jktFk$VDZ!eDf1^jSC_AB;^7rN9aJ zGz?ymkA`H9uozz%ms;PpF*jfFV`Hw0;-BV6vT2@PBc8!5qK2}9&e0; z|CM1FyO>Fb@K#uIV!m5KC<~I{wLpwUn(5pK^upEFgt6_I_bauZ-lg5QA@)|(l;W&; z@2u*U)h$@(C0UUE*8Mw$O9 z%(hddJy(+#ZGLK~4Po2^b1c90@7NmJ33Z*jrY6Q-^=<^48!R)GSI|S=Qw3wrmbp~> z5%AgKWli)b%6WzMYD;)+xmL2_nCU<)!TLVjqXr}GJLmz@T>W--N=$3WGDix zj({GTuzvVC5tBqHKLNd8>@!?bp=_O(fr8L{b{$w+?;Nxu>1cb5&%PTThrOVaKjS*C zh2w8K+~Zhk|IxzK+R(j!()J^NAmOS8uax{7$Od8ZGo&@0+MqF+eYTtAy!U#1K-qdz zX}@J#KYd~yetUm^@cjo{_a;g5ZGXRkxAkkM!q%Ul={ZR0m+0e;^f z`!zC>+qtqUTsO~>2UjSe=l)*BNt|QV4%#Tr`f}EJkmKTu%yO6vGuC`RM*xJ^%T%vj z35E{pKlalWEbP6Y4vvUqQ)bGH`v37qqkqp-tGMn;HZ?1ip|n7by}e;MJXSd2{sGDG z|HN-!Mt^h@D!=lr5K(`$*YD1ps-`wob(Dg_@YLPL0&Kg`ex1zjaE14TGc9yKe$i9( ztYrShTO&_ufovKdn0H26koBGbT;O$dU0YCifRl+pm>M*x!s$5*KaJj0S6sLDX$aW7 z;s%Q6=r%nG;yWK}^pSlN zIgo2Q|Gg&}PItA_y^NKxNf8w0=p@fu&x-@&Y z2KN^I8JA34(e|_;;wWMWZgsaAOky!Ik6&P8MC^S1HA~1KEddzct5)sYC%1)lpaHB9 zb4V$^?W(=2@L?QO>id$df>B?28%EWTGt^QIsop{Yvoc&+sL~P^@cqF9znDEd6+6=K z`q#`PsDB{`u_&0INuDAlD)pU#x!7PcKwLwR1QTLp3<;Ps*w#i)WX2=4xi*GS{CT=< zmLSiQ91pHsZe$aerRP={$j=kF3!V-Ftoc+wf}I z-L6WlYy9#qOLHhHIhMN;Qcy?;4XMNOK4QCKC2Rz`e?8cDct48xD6mQqVb?Sb-j7zi>evKg*X17bN_7)`OBcH0scIhXpt05E%_a?@XDt&oN0)B9qqorC;*OSu#vf61D_00S zWzmQ(xA**_wl&k12^?hSCzFCtUpWO7QbdNpiYuLx>7#RVTZ#tAv34Ix>kTc4Dax-F zi(jSyg|lZMKjHt}Yt9TImSgTuHVF0#q(9z32%XTSt3*KgGk0JU6kb(^}nu3q1!L7jYwy2=Go^aVxF2KPIcj{?r4312o$| z=4%axYI1&nox`RC48#qmEK2C!{bltxZQ9LkU`rLYlrcdnZx%ol(l6YR~V` zX~7JEb%uK3CGdzD{|vrZ zqn;xgf5Vor>Tx@X0wALVwnpo&z?83--0M)#Ku7Q;8yL2RS_qDY0>%MrY4?uD=_p^U z3NBL!6^|6HR}o*cFqM7COEcCnvVkE=!jsur|D%Cku9XvkTtffAo|5cqd^`!LjGx(C z`OvMv7{mEsrgl4A8!QD2v2D4kSq)Me6yJ3VJ*?rq=X_%6blX#Aen87^jdnN|Vy{N7 zgPqsb>PD4n_|2sO6@jqrHbnbo!={TNTPWt2TfOI2E?HQmIP;UN&mPeyv_+agk2j>@ zQx|-EV71o1gG{5)PmSOus*mwWwTgFmyk&Whi|1z{{z zlUSZA8qpMkgJGr)jZf?or#EJtRnw*_xX*xK|L!GDr9{mTi0ZVAeurH+jPh|PY3(+o zYhSwzX!wuHdc%HxtujMK&kYT2A=(OKq^&!tquZN=tuc-;v#>s>^Lh1*vEJK>-~|)X zMDIYx1SodHpkinkwE7@3=J}Tm;WdL4p9=8dH_245YQZ$ZrrI5Lo)D3-h(*s}9Jr7v z!PQA8WnK<|#!{jcQc2Xs+1UPq1@5|v=cJV=r@)Bq*26y6p43f?XhpnbDZB=uvI(rp zdYR2r7YWeLwvAqGyf6{3i7f8p=)n1U_`!qs0=4EAC4n}*72ySpeb{?EJ%jmRM=XK9 zjMX${snhsG#ro-GjRRe?;$boe%zn{tf=S-6z^u8-`#02<`HihM$b zdCE*EFxO1%=}RzREV8O71QWvex0)&+j=^^Sl0N~YMy4gSFPRK-Zx%u;^B6qOqCn*= zdnkUd1Vw|sfT3yB5dWiHXQ<=s`3P=cYPThAC8#*T2d=vFE_;xwvXJqQUg@4~zsn-8 z13kYhx-MPs?()wL)M%HotWLy~!a55Hlt?HjN<6s4{L>-=$10&wyc##Wyxm2!^0-A2 z(UH}}i5NF(K~tkcDOh5FDd|d8{1(t66D5Hh)+wu^C4z670a-`84%iU&b+Svh#~~Mj zU$-dhfp#q%TNQG>pH(Gd@iVgKs%emH`*(LE>N6T7b(=E?m*%wZw8L>_Ebk-;wb!#y zuiAwR8r$*{f|MY>oY6|i>ag`AtKC|FjGX4Gnc%ukK z7eVE$joD={$q{|rTqu8UB~37c@jrL013+kK+~E)v@IyOE57^faWxeZ3!GE%!VY1X* z8`p`rB)uQc1}kUSdD@4(l`QQg`FB}$LEFYKp%wiN2QX@>D5_C}kZjm7LX&k69nFlw z4MY1#Aj!`Nw7d}?G>j#2pp`r)@y&2YfIg|HNLfWnR`-Xq>Ys5eBVcgv98591>Po~u?tEZf54uQy5N?5dGq#wDrX2Troo4*uz1V3l~x$5$f0*=?D`s~ zi%)Y(7ZYeePg&`S!73@d%$qMyxfe)A5>DN?^;`oP>y0LK#GW?Lc`^PU|M^Zo?WJ2V z#2=)h-`Pc~-{%SMHOYS|9^LVZoz8q1KkJv7Xgb~x@P8gxMS~{dPkTV+Cm-KET<724 zQ|5rjyqY%(@#mm4)iL27zbfr^wbI36gwT3vuOi^ z0_^HZxU%NMel`uoi4DmN$zP)IN@xNc2rJpK=IA7l{bkUxBm&JrV5Z05A#A9Wrs?Bq zK}tmvNyeH^&DhQAQXFWw$0qM&B(1k{8kxmyOY>hKAq|(}3cBj*ajpY;53Cuib*P|C zOxoyJPx(g-WF&WWe)=Ikz;ELh6;_m8CflT*d)I$^CQ_IkMXmLP4kEtKk_yZY9`YtQmeBKfVfUB*^ZfG z`s7D!k76(>wCf|qYj(I=QLAPmOu};|o{&=qaYD{c>;}CMTqHkn%uu7BxMliRu?K4| ztEUpD_BC8Fk>D1hkkmuz8D6ZxWESBO1Gs(FB8$9__H65!d(1SNyQ)qaEsI_KkCXCx z*grNl4l0b+WnY-TR?qJBh^dUsJn#`8%mk!dF$KVm;l^WyILvaRxxao=+5Me-!ICNd zumFw!|6NiaoI6G5q%(fo52vO;mcYt{{8&OepT5kZ%#A9Geze-+{` zrqhnzbkSIO0_{gtW>}`WO0EpbYS=6+9|N;Dh|Bn8q~urP%xW_*OCak@*nzM*U-C4E zoxt|Oqxb4&j{Z0g28iYqt$; zD)VXlUxb}gdthC-Ak(pJJ007$ZQHhO+qP}n=-9SxPQEi|uIFk$>lf^Wx2kH3wFz`m z#(nAy$?8?S9rn;NWG;Z|NoI4R>O{3Fk3MiV{3+Vp_TR5SjUrfJ&^!Tt5HCY_Nc{jf zVg|E4U$WybVt z%3fx=9E-fpr%69bpU7=*f8`~A>Q;3a-OXN^O_FV! z_W91Cft6 zfOq=pKvG)z2x!HxPW};hZIchiW4l@FET%Pf)tiXk0u8gw*j5${(<-isPJp7)8*w`< zq2$=aq;1ci39@<(N271?*2>d1AY^8N0MdXf))$f~OVGz#!q)xxgMqMk;jtnByBnn8 z_0uAOQIl15UUM4|;#)QYHiB1VtJghPcgmIT)Fw${J$V@$npVnHC{r(($Fk!y5oRr> zsAO^jmM%SOH7(2qC%D}vfA{C^D3>MKqOr2R+-kwb z+|{7+N5j*^eJa|^m!diTj#&u0p!~E=gd;baof%;aq^RlWXyw=;gpImk(!!e$fqP%J zlO@{6{6-0o@I=4q9nVbjJ$*CRMtxnny8@RdH&EK1l;;Q>_jzIz{d#1oW6!UUvyPme zqDbne{y+p9@dNt@v#`?G^wV&ex8b-H#7*OouRJWhUrjUAVY)qViab&$4I^S&CPLu} z(G)`?oXC+MR+@q9{>vH<}bydgM(|0uLG9Ld*)$W31QC-`9?kA_n1eiI`}A~yz$ zBk(f?3E>kr0nzibAolw&3tT3H<68mq64ZSHG0=!ycbz=Fy9w3T$+iPACJ`?76NJk% zVA(-ZIB&lPWluF{?qPi>bGCW~Z_~PfZ4W+&0SuWw`r8o>YFZo8o+ob1D>xbh$Oxeb z1+GKwK=6T9jnc7&L?+#tZ&o9PYo^BNgMNn|Gkso20d}UMUea z|6r>J1~C#T?;Q8#zgRaDch!&?Ev4jkg*sqFQQme3P0-)Y-25NoC@TM`G*D&aB+U=#|Jn6ySjVmt_|vfylBVcFoM-GqA#$m zrD!U}EPe07Wwx#QM!6DXu|~Gg^}=IJwX`U-M37s#FNrH$0Bk|12qe*0SGtAI?RuU) zBUzRgcuaN(;5_$@n;g|0c34-=>7M&+dlUiRH&LVL$@Nb4+C}ijutGh{@HDi?BZxq# zAo==Mi|>4k{FpwO|K(>~HLr&V7!^$72X*HM;wcZqCI@+WuRf)z5VOnj2*V^!YqY4d zkc$b%%xL8=x^Lx3Qo7R&*Ew@nPh=W44-BGV6EeZ0Fbf|oM<2>_uZD3+Qhra2ekH-c zzar&tn(L)I04w(J%sMQ?6!$Tc>-8LJSL*A45!m&a#*USu2bJw{lD~G#EJm;v&cDPh zg#{?UQ;`g9pXpTf{hbMpzp9U$clLr{CR=GEtjj695)bP77{Y^p=8;zPPMlgxr6s*K z83`3Bd7^h2acF5a(l}=wDmHMN-*s~2rK24usr9at2KjG0@cwJZSSHx3*sj*g^_&Q= zB%ruOqeLhaSio*+oWY!RyeGQ|DRU>0$cUAh10tV8kz=*g#eGC>fO}@aVQ)lu2Vy6& zE5;x9ds4lakfp-ZrS<=UmLmBbsST_Y?s}J#8*Lylg8H2bKDY3d{<$;1A^3CzV@PHP z3cFauWY*Yj7N+=Y2#jT%K=>ei2f)Z8R4-k7OkfPGzhhp@JZ#e(>=vdN!R;NOm~HyWk? zJ=SA@lct$)@-<-6MgLKKv_p|pZek6-^Kjl%#;s^)-3kn>@#Ju|lrc=1-rBtz=xt9a zd8k$Q4!BJQ7c8gKf_z-r96ceH6Pj8LG%@w7&~Mph@|g1m4E(1-++cy9=CCpkMPNK- zJ5otU+KVkoZoE|xC7!P1xcAzu#O z0Sn5gkne`ROhhtssKpEsXQ(2UEp}*SGpBJpM!uy-(%>4TDe82B-VITv6Flr@6YB7k zY~lrGQnOaAAbKYRms(xHMTCl(Ujc6;Yl}hkiJj(W9CS2S;eJG1s=E(n^|)mxAxl!I}kVD)6J7>Ai_K-4}aOle<% zfT1@_rPj#kL}H!4CYso9W5)IAa$^QB!CE7Vim~k2%_@|RwRPOCMcSA)b2y)Vl*Y#I zJFcC{N%=BAw)sfn`qj0m{_4w_sGa|VCqtU4GnFF_O3{&~6D64gL9xsJsKaw7IY#(1 zTMS^bd&5$?cdeq|-PXw5JwkU^P+}J|0^dSV>zf7J^)Ix;xV)p@k2L&=4YbwoBQ!OHdEUN*z?lEy|U-MP9+VwA*J)vl9|#% zPNHS=*-wrm3Si*)TmlSa5+lKol|>)Sco=@t&BIB}OwdaPAG9Q4U`E4a#9TAmTi93U0d5~ zGkl@gk91_YBxt{0%YeHiKIGMdTF(l1+ot>9!_zl?Ft!3&d@`-l#jkX4V(=e6 znDao%MfP1FEmN_By)CA>JGQif1rhm2A1anOSfawBpsVb5zvLg!siU3RMT+5Sa#u}_Z;cnJq!7L{tO%19YZaB@ zKLwo`G>C}A=hiqsv2qMY@M;B$@QHjOymof6QeXAJfEZIGC(9}mc{ZHs|&SDkHbr#rhY z7TwRYCCz(CQ#bBYoELl`|M*l%l2cWqDXb`r=y<2@deudF$$_WDxtm+Tp|z{`NY+G1gNW66My%rg~}NWLos*kR~t~(5F_XXVGhN9Rhnt zf~zRsS;bjPf~hyXCZvwg{E*t6zEg{!)#YGrZPj7FrUkXLu6A)Jc6^Yn)s_V8KTKlb zx!7F`3?@#52h`U?H?0{7OUgy0$$b-j(rwci=^<~^GdcfbMRoMyfbzXR`gz~b`6{WE zWcnS3DE=7Vc^?st&lKqO9Rkqn{Z9Qp$xi$E>8$E>4}muja47lxXP+49|* zcpvyOoc0jMuY*|YdJ~PxEo>w zI8a(I*ipzfBrd&R91A`#y&*oIvC}i3Kriqz9J=W}jJliDN9nQ zc;q$S{qsFNh^sRbmd0`#o5RX}wbgCR$qvORtIFcn&D4XID6~DIIiR=jgGo`Y&&s+i zgb4FM+K-GSO@IwlvDkr#C|J+(WOGYm1i&us(Eva&lXDYMP8}F35vVH2%IVI;uY%5 zDdU>aw_0C=Vj^Vp7>U9T!%phU$3(WfrHVX@cHJ$EYtrDC;)?G*^*k{etZGo``^eavZ+U8 z09St!ts!f+;C*1LCz4KP(4e40x=Y|5r zD5CX#X+6pD%R9eYLu|ZZc`HRyf?$_Hm~8c4AAq}QS75Sf7AUh|U>5CBm#>eJqdrkruK&`J<{yFvOS)JxoKqv0?8q`6y)r_MI++$%ALQ5>-SC z@=QYs#^Ah4EYls7Nuy>k4>g1)0a}TUPq}o5+bPrDl2MK1P_CA1b|{4;AXaoun3R*R zPv-hXzJ8gATk}`{hCQ?&QXSkw2%}=-u1^O1{(4ZB?_a~U)*uXsy)oY2?w;Tf3R!QA z3E_l%$&iwTaKN}t$z@+Sy{F6+9$tq*326>;IufN*+ST4`07KgMQ=%M?o#dgA&oVvJ zBov%Et45aM_~iIQ>3Q*mr55emrr3p7WO=t%}3-dG#dLcPt>zy_PWHJWbEgGeQdFhkoUvyc=)s8 zb*BHN*kd-peudt+GRX#RNc{VIEU znxnW}Fe9I519%{q&LS(>RB**Rkq=yX2*VA6&jW zBg8ALz+C2LZsWz<)Q@ujYh7xN#E>N7uO7tQXDdz0Yfo~v7+m6PK|P4^x(2iu#*$8b z6pCbr;Te-%kzB0_f~lDZZE*ffo$+`@bVbrbk~2uQ>hJ`RBx3y7O*grtF!S}9Jpw?Y zCnw6Q_Jf7vZvk6=3f9qvzmj4VGGuLOB^&k|(vaax%YUww@>^&gLGkE}zC_)uxS2kV z9I-iyV+8GytUE5+u$JIDeR>slc#WlLo@sG!03#c2SlVzV9^^wT>Tn!FG^`;qrt_24 z;!suOD7HjKoRt=Cy|_VHk}r+TYVMTeoWZ}iz^}z_+fMCD&V*nJDxg>A7SSPFErpZ` z^Qv?H<)t+IrZH`I)iE^s;oHo6mKq}cgS^@2=61hbgZcZ+geNkXEYJO86NK6mwN`&ZB?I11d9PFMdoa+h?Y)A zn#%1I!zh^#dmQc_Q&A(NXBy2Vh?*h~N~<6uh3ns+ht`u|0x?=7*2u(0!X2R4-^R)F zJuNo~$6^~*tEj?=K!6&B0+&K|GZUFB>X2hbCEO~r!&+}C$u9-jSAE7=pdT+-(|g&KFG%cOf9M^Y}9z(|^SpRfD-N%E(4_ zy(6MobntJrUs3JOzbwG*?dg+eB1Wr9s>(Age)+(l3Zq*GlSVgy8Mvg_rRdj0lv^u@ z{@{04D2B6`vQ4~(=<=8&y@HIb4w!Pd7bV}1{DPe-~XoS7wui^$g z0Xe8KoC=TP5r_>ga_y-F>nVzkgM-L|dR1p!F+m45&h$QXR{TnF*Qc5})b|OSgcsL{ zH~V+qAtKw8Nakymry%y_Qh}6fJ94DL0+TyxS-2uC$$!(VJ0Y6!&jHSZT4{T^?CA%P z^7&l&NEshprN%MraX6G;#>8sjly;CN3y!xa&-QMzmc`h1U?P2(ETW`rg1%$G?QQ5| z4@hRLRX*D}dFOaCA4))V7lgYPdk10r*}xVZO2ZiO@<1vzCt|=QgCjGdfYazbm28Hv)qDE1`k%sK0AE-)5LbQkio}% z>mbP;FSBjL&wX=bI5;#$za_fG9{twh4t-tVN`W3&dN8FSmPr)V;c>TY-oaoXS`W(m z5icXhiKWi!cDWTYGX9W>yP-m6x?IV4(zZfV4u$;AhEU3t*_Fmxj^!IRks<7S6{<}t zLZb3!{yDOOpp>|DKIxSOjk`pHnv&)nTr1FU^+3S1;)PPYre%jjF7bp#>xUXSL>)2` ziz*}pUa181g@p*}l|J7>2K zI+w7C>CKwgB5E}SATH*lDi(u=$$|3{dA3m`0yN16Eiz%?&Wb(rRcEZQ2u7tK>AQb8 zCJb(|E6so^kTZWkaScV~mpEK7qRf5ZV|%V9P0Bxa-2COD!!_tC(U0Fg+BR z_^B32b676-2gj2mh&yCLfvQv9chL_#@Fmhb2ok5Kw$KwKR3JEtwIvgwva%yczC#^R1quC3m1Y2k;nLLuzZ6msg-(&X+!ylhQWv6f^_*#R=Gjy@*cT zU|-!=x&ZErR;SAH^-xKsoAr14#3?lk)eyM8Uf|uOT-cI z7S-9P?f%_`%BHWqL{IH|@r#AKeg`_-UD*2?JP0(NZ*Fy?JA|Dn_%=Xr#q;%>YNC zPX-mdt=20i7gIln$zmSyqz+R@P7Ng4!$Ycszv{DWk-idZdqR=OKUzwh?$u1XxbIy`G~)Sk zusI;}Oud3qB+5;b^`O1P&lKPIjeq23GQJ`yr*&z*ote;1@7At-fXhq3j=nMG%dI># ze_Hf#u*)R$i%WG5i6*`}?f;0Ev88T@T)z#P;AwAYR3q~=ChlY{8?oQ%6aiovO{yIx zKcqsMV|25m3(b2JaU+c^_hT91bI3IKGcGey(H+9UIwDvPJY+VFejrsqkLEcu#`F7C zn5M#8ewR+o&{`4buxv}*>}Y3KJn*(OpEYX_?SMj#CyIV__O1V(Q*m`X?d1l1L0bBgS|9~LvRJ>&Tk(ell54jM-uopoL+WfmCGqf&1OXtOdqh}_GP6cf~c=FDp94>9Yt|3IYcZUg+OXNIe?Y}e! zN%`hj&2dx68#glV~zix3Vd}=7vSSOJZO`G`DexiwVtL z?tad}I(p1l;&tU3FAq;L$S}uc3yxbi zk0cJ&J?}7f?YP$$}|CY z?>QvpI!a;<(TK zupiI!B0rV{`>LNJ42damrSCfwx3R!qf4OPY)>D8G>S|g_3ad#IcbH|~Td0%|Atz2k zPyJN`-Uv)&J7jcdte2TS1iPOpoYx)zxFYZXd=ss1Cax8v@xFFLcbX7b--~2XI#!?0 z6Zp!{UZ#_gGcsEpJ%ioN*SZX>+%9ukdsx7 zj_Ko%P27ptZOPV5Bru$V2+f)x2@Gqd=Z759AufmNzv#>SDxo4*YD`mVjcRl|d(zrD zhy^)Ph#KRxwRE(!X0$b@sCC*Ca1uxud2wtVL==BRT^+OopKfOiGts;@GqF1&{-!kW z4g!Gx&lXwzm~j9T2Km6qB{9zXrH}Bdn@OESPwyp>rv{F8 zod_@^2@7oM2x-zNNQ+CY)G~|kXCkCHr`8r)xb`_8l z?ZM#M##u%ic6%fWyOBPwHGYL&=d36Rfv=()9BwrXfA9;LD*_g4`)k-fYJ_do*RImC zZ>{J_R-{|yzg4iv6vkHKuV{=W&c=*c?iM6UorbI~#d}zRp)aG5d z6`H;`B?FI4k-jpFTD;jI<}rIaG`IN^M8W)=>Z`O`9?f?fkta_V)l6IF=}B4xk{BNG z{_I-M-dfRI$8|Z;yB;pWM=kpr!>;)%d#jOXb(Dun5wSs$;8YBA{iq8p z7&4jOSKX;S?*DClY~g-^&v{%{@$la2aWplywETU08hq`2^|7?{{+h|IuC`FV{Z=rT z7UiqE3iF^jju*Op^7zivZy72@6kDL%$5Y~J=zRFL0;k9M;1hW1voaiW6fn@!Wr79o z>!UOQFxV1W%L!G~SM!W~J~a$_we<+a6-JiB!OBr5t}DP*ntjrd)jucq%KaSz;;R|j zceTFi6rC}Yoz;^(`X~cEm?G$-5!P_BL%?@_j--nhsxm7Nm>}Rt_I{bwkHoJT56JGS z1?-7z;D>>Mt$c+qZKE-5qGl-37h(G0D!ldY+nPT-H_7*d&Pd{WA2q}VV&SQ5qT4g*!YEanu9X<+DKs_^3N-=`;fOZO@U6{1Q*en)c% z)rN&(xEzh;80IYrbXQX^MTU$Px<*j@GuuyeowzS;k^Mvo?|B8W?O5A=ap8~hu1L!J z=*UT;lqx3{Kb;*tUZ09|qw+ZmP%Kjkr)a_k3#ADdnatEhy1-FCa^!XBfeL{{95zG* z7(->p5`2tr0uPjYzp96hf=XQjITdV%iOyYkzFsV^ZXUNBZAIJ0*BnI1hOJU0vra0g ziA{MN{N$Bn0o%P=;P$K%HZK#Sy=gjR-anu)ohrbz8>QYvVsDy+!%P8zfupljbdj*c zxE|c35iqyMq|AG2jBz)inxfmZ^Kg~G0 z%Looa2vZ?@KVzDt2qS>9&9C`@ZODd{XY5ZNg3L)TOX$ImAgBpiU5}&}l}!O^a}Soa zFdB2;U>zhdW{jyZRp>1hRj9BKaFyBRehjGFl7ziBYzaJiKXS7^kJ@6IP1@>}>Q>#g z#r{h{=Ik?+s(#pa6uZn%TvhUzof!wzQkwP_jYq{b1i#3ZZ)BAaeBifrXFKg!!K3m2 zBO@3{Pnn#4WbzgAkUai1Ol35Wd5U89EHn@N0?`4M+E%uw=cpZs3a=C&1dME`^$?*p zu}8Ou?T8~<`8`5d#LCQE`Y{MHDK6es`NJx7LB<4%M8=yeN7tp(L4YC9r_3>Fz|G=j ze@|9#2V_Dhp&j~?3!(*p!$YKyvx}+i9}WgBteD<#-w|0BR>fe>%Cr7**r2Vrg^h{| z5+)Y|RMM}Q?9C*<*+DhqIy*U4DZ(wbgBgrT1 z1F#!A0)`BF*{jG60MXUK80MVuq2Xg4t9Imbv=rz$KBh(TxL9~dO6g@UgF{jeH06gG zYQDNneFFzPbZZ7m4l8?~ONIY1BTv*WNbrN(<=V!VY?dMf|_SbAh6uVhzepu-meb&=-bU%3X zk0v&PC3;kHHqB^}XQ4>A6kmZ;(Fm&A04YgQFW~{fxjPE|yWsuNWx;Z3r`xWB(?m0Q z-XaU_7=%WQS%{h%5Wkd>y34^4QChS^M4W}Fpc|Q{;B;Yj&4B3%)&hlTl7ui^vY9x7 zJ>9BLa2U7wMsg0m6!>8@0huqGqbI^$qWhM{yIl-iNy=nyvOwrhrq)=m+CR0V$g!nK ztkHAWV0~%Ju{{wp?iLNPP+`pvN|AP6KpgHT`>?+;90`3FmMx0CYUS3ZY-PuF@;_uT zNX;hCq7IHu92NAXWCg*vNlflKRD`~!IP(qilT0+(LGc9_gNipwNb-f;jb_a9p*J3V z62I81mYHyU1~*fx!Zs2b0&uQdh_8MuUer9$Y`n51(V0K~r9T`Qw=HXpnTFR$n{H>2 zcF;+CsW$jd?<8N7eiLjb=XCjr4DedQ&RD*k4^~$TR4Zsz)}m1idm??{cdKSg03{`4 zfBSsJduouG*+i^S^&TULp!#%PLb_A6V1VKM`i(GUfY7@BG;EoN6J+x~e=ITU~f z4xtc-2`W7z5Ufa>#~9ibS!49E=ujez;pl%V4rx>tsa*Z&GfP9ArAH=II1(^pT&J-L z2TksSlXbRuMlr{X*6jr{-OQJDQ7;R*bmj2D*WjOSJc#kHJ8lXVvn|6E|3`16KHam# zb>4^2FT?!w#QAjPMFLl-T&9$W&V{r}AQ7V8s4rkBML*&AWwWR6VDklQry(Y1dVUi- z*4SuaLa=Wl-cBxo8E;xgY$V`3iu2eRfw2dxL;>iSLQl#(%~;E6m0?~_%9$a@ut-vO zpx{MOd8RD**Wx)h((C0G@%)L70?4+qKYpb?_EQB()Y^_+p7&yepA}j*VS$_5oK6yO z>c#KF1J|DVADIjHU8p?L?WK0BzTo@Aam{1L&@&Q^X#~;126QWGQB$XSPb^ZU7Wp## z^^uJILCklz=?yBY#E}HQ5!+fZtQ9 z^Wc)SL~EK5{iN3y#n8lYRbfew??QWw2`Q1?5T*c>qUWK7Vu9d~9PFI#vlh$Uqyewu z^5>c^e|Y0n<+I}mFdihmQ6RQ&7g=r(!)UnjcX*y`<336`bz607L zBK8H^waIHymR%{3pjZ&a8-its=@8dl8-gDwe>@mimtr zl?iVCnf@SrU~2&G1~Co4_8sX02a^*r_r|_^q#;d&K$<-0ulQSPP1-dg zq62;#?2AMYj9C0>PHJ;SmAG&-H+%CTt1{9fW1T#@N>V1b8r+xeKUUnNlHw?%Mw^Bu z#ay71+oAR1#f2R>nRhnk~qT+VviEWLZkpVYEyxa9uWIDW0{Ek zT>dWRyoj4#D z?n!Q~SHN+7xyf?elOwLa!szLx(Xbu(2vNZjBaOPDFF3rLUk>d-{|`t3mvEn0pVrPV zrp8i;Igqh_k{<@n%%$>J93KMLM3Rnl+=k4d8P!xDQ}~{b4^komJ*Ec%QHCCp?hjSd z*O{IbN5peT6iC*L!DXLNZ1*4$EJo~~7Ep-HyL@Cm8h6~XjaB?#(Sg^L>R!)5vpmj1 zD6d8tT|c*|_FWTw6~hv|JJPUqh(q2n=(RbO zY*t3P5(|=clet%RNO-C?u6Z8YfRQW)BrN5i4@X5@JZZp5(!EhH(T}N>itLpdeE97o zQ!!U6L0j@GBm;@>>pX+iWUt=!bT3A`Kh#hq>t;9e&!58trb}O`U1RRz!cYGUiIMN3(`e1fJ9^OVIJ>W z>pzdHpF@o=T}K9mnn8TPU|@?Zd?9=i~G$lcP0u0Nyoiyu$bPC+}W&3u(ph4bEa_M2%4Az6CEK z9E#xIrl1l@*Qz}wiZvosylXs)mqn_pg%M%+&-GeT2qphxwV5#62_NAnt?xvu?2!j~ zpEkO#Ka#NJ`1s0%CO9ZsNWQR-52Nn->bNa3T@zaOD#*3-KOIr-Rh4=rp>d*aU#KlP z%Qr$N(3IdAqkFKZevV$DRTbbE+FCSQG^mlz)^OnODpWl=xxL$zYEWp-L!CDo*m&b~ z?eV1^QR*Ty%TH=#=Q(P2J832+d9H9f2?v0|c8?0epS@-s`TKx;c}?XgzCn?>R%e0w zTQW#DdNX&J+LZ)08hfCnr03;DSV(j@QK@euSPf)_7$#6H?^-fMfOyr=#O0*>^1tjx ze=7t%^Z@YNMmIPwT7f9TDG90t94%X%eF(cm9}%(a_J>a!<$%|=uM5leX9<$r$aW(+ zMfsvUH3Zt{(DwcH;-?`smkXv5T}fH=3ojV9Kw3cbUJhy?Nn z5rhfma_~f=tfH;a>gLK{6Vzk59^;+{>x7H|4-!+?iC7!`V21nBuW zX(+4XdI*~9aw!$|6bvL8c_uaIGc6c=?B~qV2ZbykJdrDV6eOGU@WeK*rtp zI(G4G(RU(t(=!!GC{Sw5J++*$sv5-G{2FhE;mj@VKz9bt@7%g^vU(qWQq~9=C#>`~ zfsfQM!h3%%Gnor>fk5smS{T;Zy@Cnyx+{gZVNdu!;=Y(Ok)I^hl}|Yq^=TQ(My)%^ z211Ww#Xy(c7bH6mC^0E!i^=ckv;Sdx_TDsmnBxacLjrZO6RO6D4bZP* zEvsVav9a9vA}&p_F%LZxMrng){jnmn1MomhOlomwuB+$(9)ZGw#B#DHLKAwIL9~XJ zgyg$RHB6$hgT- zgpz?{n2X2;M<>>zqI1UY*C4)!ue|A+j5a>NX9p$CAQp^JYIwx=mGA($p=|OV&|QrL zvCD{X8Sh_*g9)yw@<$LZgqWKnY3@w1cYS38!JgHkJ|5#=_-M#KI%DUMTX@gIoSfG! zQu;<8)wVV7XOC-P52;Pe|Dr}OKmWEj`r7T4-3ykkY&MYV?Zv=nT<5|UEJQ6Nx4x}7 zb;^q!TCKdDh?{v4qo`UBZAdJ{;}=^v-AuCM(x2|#s#1;J)JZ#O2k+gs)lvK=nj^tY5>c>+&m>6}X8>!0Z5F1R;KOx^VI-!T!H!~|2 z5vKILUBXyaF(^L-C}28a9(Rg5D!OX+`W2Sa3TFMinbcX5(Gp zJoHUWniG+5*Ya(g$B0%Q7}VH&)P=pE$Ot4CQo;R_v|4GXNGb>P606hoW+jegZVC6S zcOgeSdD4~&(i0n&9F%hb(I`uD*(M)zdn8`-X_`@xV-R126*Jfta_!`t3E;S5d$3qieC4bW*iwzIoqOFw0q{SqY zv0)UI*E=E|`@Q^UwDX@?tQl-rs$163;ME_{acKR%HKw5VHm19XhwwrMQ6+&p?fu$a z?pA~XM84~C!uncmOQq7ry>+Jleg11{hv2y!p#S)rJvqq#r#Ds4G-OMnxFO^?*qW4) zbaRG5w17nh5GN3_sv1pAp_owBmB#^DY#3sIww_QjkupOMVe zoMxmK1TIO!J!R5;GjpoZIBRN`SW8@J;60=%^eMwq2SGz1S!9wbo`Y^w_)sx{IGGoWo0K*~~YRgF2gI>D}p&o$l-VrTSb0n=C)wTT{ zI`hUOS2m2u_!Czk4#udYfZ^OY;p;&$W|de97JE4L({M4I|Tpw&V zqZF0h*gJfM4@TM1q&Xjfp56?$5*pr^Y@2XVQ-~BR&?=rDbNSSlISH}-??U$8^QNXs zGje<`bSe48Hmh)EF~{%Ri18_lay0U-UR(ti+Qi9O@a>YTfGG!SXjabCLImt zk|djB{b+6MzWK}Xh|TDpq+F8-Yiz-^_}#<7dD${XOgYOjXcO-Dxq_B`O7yhBW-3Z5 zv0-9=R9g~m{j-n=pvpir++HwC(9O>VvG#@loua(_`k@$y3#Ck|k%}&jl zu^-UAPe@c!1j?3&LmoYsXX#|JfwLDs`t=L$m9g#*T^B4}J}JDOO8emE&5S%FCeh6S-`Q_NJ{Q!Da%Il8)H* z7;mG9iZ#h^mzG93@$~}IClHcWhfPtVk%bG`iS-hWqTfgisEq_<1Ad&?}RPbIya8(^vm z9v%mm7n{!j-~r2+Ta`u!08QnBWy(q6T7hpJmOCuWRzH|d6w%PcI4dt3GI7fGgO|Ap z7zArpNCX+D3#{jE^D5C@R+B9-k2B(-;E?vu%}OC}1J3Q=>1H99g3w2_`feJ34%Ec0 z));uee5edF6B{)(87ZW4RA}JlEySbG41glE(l0=klHjsM0Ln=n+2%FEn1Wrc*|4vq zV^&t?P(3-<%C2;Du9;bC|Nkt0oM%=k$R^#k z*wQQ8+Gj;keFD4>Ta}#k+137f5UCDA3${`d()}xKy&bg@gW?^FPkBWSl$06~eL`MR zq;SWVl>ZY6LC}pE6Fh%r#eibG2Qr(GSSbCH)>?r(USb=|FNt(CKu%p#x{y!LojC_* zvKlRT>!~7Jj3_>5awbKAEN#@VCr64b8M9_vI(Xp0Wz?GqKD>tZs(B3a-1WxlZYutd z%rNmT=<&sfB3r7ySJ|`o?p{UjiLZXO#FJ5W09ckNdFiSFiI5}Z@T7#!I3Q27nXR0T zw^zcs#^{hdB}{29o^%vD;_|bm1gspKBu`H~{;f$~KGJv}+z57Vo)wJw9|3z%C_{lk zPd-q-5@7~sktpUYd#X`k=U8*L_^v-#-iNTZ_88ISgOGnuxNsrtp$h9LrbW=w~B@pTb zE-1bBzRw;(Hv#D$Jtny#xo|10;0RVWiK)uQNnO2A^U1BArrlfl7}MDa83iwquz?&r zQ^EvPLlvF!ud6r;?&5PDgp+l=mj)F*mzD>Sgft21lZol7mSE88lnPeK2~P*u!>2AC zHdf$~1Zp;qI%#9J6`$FkpA^62HLj#*IG8B2#G}qh^pz<@?e1ItqY}#D+dgAX$GT~4asD`T2p~*f>o}68q4<2=O0f>SR9z+5qeErwEGH^5&P!b$(4P&aws< z_{EY#W|5vE^r?izUh^~2!xAzP^yHv4ea-mOi8g)s0D91_$8hwVfHg1abxZYN79pPtm=4NC z3MDYG!%;hgpDcch^=lsZ{kSK5pK^98anA~ z)gDmooFS6_3*zh^k(GHBY>3-#g;6VhKA}Y?5g}<8R~T@Qf#Asm_(}zgE+k_b#`nO~ z1NQJJ=D5|+479Nm4iZ>DykTCQw~S)FH%E`RN74^KQSFQ)VYm1kxro1X({L__REdY% z8bMMz0|8&)dH>c?o)hBEZEYhjyBv(h)7ckc>9`OPsaUND(-#sd5Hhu@ouU;SkAl_d z;^=GR5u^AB`c6QBI^Lhf*lI_&bST%Cu{(7liGfZhWEH-}&3xd5aZppu zr0IajW2wgE?ElUHN_z@0GBHXy^od;9HfjxafJHH-kpvFMZxI2WIQEz7lC1?BDaw1` z6tMzS7cMTaCUF={jZP(y8o=UpJzOigE#J*3WOaA_>5p!qh62ef3kQCP zaU@D+1f#sR(4rda-ZOwr5PZXK0DG?KNRWyNVg*CgYdQsrLzk%j1PSW1@x;sovDs48 zEwp}M|1L)-%b-v6ZL478j)m!5F#+CIS7y^t6xeKdc&64U0_te&4Tn2agL+ee{ zmdFhXM}xH9Mwl#XJk!q_5%cXLF*&7fo$cGKC<}k%nz0Fe7P=!tM)4CXiA`d>UCJkm zYP&AA^h!(A$u)clLF*ya)~;Xv@F?!1#*e@oBYp^HoHT-Kc5e0kVBsxdA~idbDHJsb zZ4zbisYKd=Oa&~eMr*spg6`x0Fm_czaW%mj4GzIAxCD2COVGs$?(P~qI0W~_-GaNj zyW3*H0t8(&xU+Zvs{3#sZ`Ho+o-@)867z$>Q1#-Lgk88yU>m; z=|2{KG}j#SX|oe7La;@ROn8`C5Rt=Hvn_;_s?dIg{X{B5)m&pK%lcYeij!WgIb1wK zK&P6JK^00|^`r93vPm^ZyVMWNHe7*dQW>~tb2qxWxZl#_HVsrf(@tAvj^pWtvCiWX z(Av{Vxg$i)L`_}w(y4dxIXojFzcU17&Y}pp3g^kw8n{jI*ei|9hV0E)C$$@^Wpv`v zWVC62MEi-d4qA!YvJL-OldlNFkhv(x%Aj5I48O8LkCY0~6Qd(9Y@YqwvG&|Ny5f2$ z(uggEyW-1Isw>PC^?S)1kZL-s-dLj+$l(G+5y;9|YPnLS##vNf&$B?)%njhER@vbw zUF)}S0Hx&!{KnSmo%dOeK4_}byTTB`hHVi?%-rdQv*HVTNox*-oq=cmd8SdqQ*e$o zLVw3&-wJDlZ_4#&k~mA>(<^j~#^S)S&~ns6OU+lH0-r^QAa1;h>ldpNH-qZq>ahY~ zcbB&Y>5-0IBC*95kGCl zBKR*Z@5{P!s%AGGq9YB*cvU(xn=&Xwx8=}kDjacM2eVO%lW8h9wW0ju#P^UdPKn*w z&0GoJj}|dn-H7o%yF3+A7YEk&>*nlFr>N0rQM0?9eIS^Xv}k&|?lcM~_IAk`(HE>& z%t4F}!LP5zVSUh3o=Ep)EweZuZxOeqAPN7*_;AZ{8uHd1aj)>|dmy0m$yl#reQI%$ zdd}kW@Am(fclCdqFueskBw;y-uM#~TbpLSU=@l!w8 zYe%dtKozXTroO@h+uOCQ-MO<%8gpPiveuz%S#s?uT`{L=kNC)}5%Aty@T>YX0Fm4m zF5l1v*RRojzft8vPMMy1P2*a8Ju^SdwWENMBT*Q>k_2@2B;)KR7L1F>_+bdnf7uNZH?iHO#IkmPSJ zWv7>G<(F=UFm0Yr#pHe#`;2zOY-Up3AiASIut9?`gLF*&ZC@%blfa)JGx7xp{A=GC z2xjHaRV!Ro)DB@Bs$}XWC5=NvlIXRCr{KR+YfmLKAAO>J3D;Yk+i){(!SSY<3;oeN zY{pw}{pe|rG&dnX_Am|Ro?KOtbT;0;gFQYDWPP|7 z!z@bzH(%6OnLGD!8dMc1piSo&3_99f@E&*hrwS5rwM zrjaiY=rR?xW@;1|&6xhxrVvQdw;LP7DR?~L?y&pHbKwliSj>$QNVjYEHO1@4o-xZ ziD|JAf>OTEOq;v|>ydMZ8x_N3^^*eTZO%ncspIL5S z>Lzj_buvYnX9E_K9q+oIt@Pvf2NXYpkoyC?n|~KH|9zx#Z(>jVM^GX%SSB4^0$MVV z+n?5&QB=YcYVl~oGFlKW8dpdrF0cq35sZ;-I?_Q>`obI1L^)ewq=fv1vIN3Hcu2xa zL)D5zt0qVNDVl@#Wkb_tv1QU=*~`7xw!Pg~>^8x=*Hf&V6=FG7u#lIce_^|Qu@$c$ zr{|PvBXC%P{$oDIiXR^S!91^Kg=uV|$Gz5X&Y)xC9(+Zi(&XsUu@H&PYM~?zkX`{kn7TBb@CeSJE7ec*fCZBvPWX;&CM%4}n%`jem@^vh`1omIv#oxH_7u45} zsh-VQQgd?p#U5!KnM8+S3nlHvU8YMm1Q3rH^Aam}&Pn{(U17PvNi&e&3r81|*7t=Ngds+HSy9 ztph-=)(?7ziMiM37k%Cz#eUa?fwH?WDZ`Tb zH9ykkX+q7ZWL-@~-n=k<;R7xSoVO=LFArxTUQAn%s)|?U5L&%2KapJD&pddyIf=y1 zJ+pFQv;dO3Gbd7*6n7Cg;O1-+1xCxYg2djkJcFdE_bBdLC!ahYw)~F%nG*S(XU4amBhF9va=IgWcKuq2|8BZ9Y1k2aEqMRY*4K`n`Hn5cp&9F$ z044GWyroj3HKr3(GoZyQfA;2%xc{cn6C}xx1do~zxA021?uhJTm|bnsX!z5A^38^O zS+)xs!LYt$n;r_01{ZxF>xK=qPzbw@Y?bzbqqh|LqIHH`*1QmpuWL1h-P|ZnN16a` zS0!DbXI$lF{l-!;+@se|iEOhhXQ?-&@NI@uhbpyzwjL;jJ(TJfEJd!h#}Z&Cwb7io z`lbZyxJUo)jK4~y+lz2FPvM7hBH&7RT|h=G{Bs5t;(QXhnvrf}CioK~Dlv>&d1tCc zrH4Cwi+!dAk4A6k)#HiEuq_1N6?^WS9fmQwdSEz;^)O7oxR-UK(6LfKiUZ1xvbYy# z%35g3wD9D~iliGeAsS2CRXwX8q7l^j5l zsE~vaODj#M_7Ut-5lh*^jpIyG6@lH5+wu$Igd+)z2cwAKM`!YlCWFym(p~JS@wc$P zn+v{h3nWI37I__4IQ;%`e=kQ?j2tnzCs?Kt7nY&1o=YV9i5!a##|IrOGI<~Y<|q=1 z`)bYC`*Wc``7A$~qsvO&M^GRWbx5}GIIZ)eWf@r5k*lN>!<<2@^07^~@U;+rVVWPA zDB7gxOn>Dx{?CAGNUKsQmk!+KWId*tUJWN+PrN?S*9x^##p5RG65bDGG+*UwR4ezd zrAkAZaZ@GHR$ zi#JCpMYaTrrL&11YU-@BZyEt-hEHay9k5K%r!$r29CZ83qM3PBSCW21a||^!U;6EW zLZ$@UclT_dPPT??MLI+x_miaM?=4Ts6j?;g))ibCs9zFGc-KUg^#=~{q>%bIoCZNS z3zs;}DMJ8~uBo1%I(J`YZ}VD#>=9x@rM9Tw!0l|kl4B)70Fhg>&g=k5gGOdJb%Rv* zcVF_EdI!4kS#R`ThBZb%39S8piE5XSiS~+MK-0>VN*C8w_Y@lHA9H_&k0C&7woZwj z-zomPZ)L@`2lL?iq#rLnBY9sZKf}K_;WDVS>4#N6L^$;_n$d*GU4$Vm@1Q_dp(AT! z%s980m^u(EcQ-PPaQ1-**UvxACN$Q^Vl7s)vUgx*D6>p8J-LZSNvmN&%NYCe`LRn% zWkM8CcW~XL8r>n&pb;APQLirg39iU82Qj0&Zuna2#(jJE{O6cEPqflH77@H#v&?SY zGKP$t&pe;{*C8Ybd}Zy0*8zc5v0tJCz&DbQVjD`VUOzl_hKM0~6m?!<^ zultFP*nwfHw|Ic7XCcFh_{({b&^z4I=e3@YP9ytCMF;JRUOxz!H0qzN#ZWnVkKTRA zte;YY)o;f9`^HkoT7-_h)rfB8BX#lj_TPH!1o~cTb`K7WUU)0e>b-(VLQ0+jOB4}_ zvl3mn&p5vK^^*VtfY*+S2i&kHWfe77QNjC;WRYGbvqET$$Jfd@#Th_BV$~WwL+##a zR+;UJDZG>-y^;B|84Z#k#}3v<6um{SiGLHsiWt$KGzqFy^O!VGVlUBz5SVG<%&9sC z!>Md*$TS6O%?*nAQ7yE@r}%(pb-}TUmILs}Bn=$;IhFkumENA10GuPV>6}R{vFhy+ z+aguL@G(lWyh4FY#jWw@^-4@(nM>mSLpZXOp>LLsvqjB^*x`S3Ir`#5hgh!Olu>Umao#Zr*!LrXY=Ry-mF?tdwh%6y1qHv z+_WgOiy@loT&m#45&x)j+z(v&)g$G$fGkbgQvn0kdi$RJ9Fr1)WmhIbX64U%JMACn z7g#S#eA$EV{+rK2`kugXNvV;c)!U`n-XUt3N0+5jW%aqL<3sJki|O2e1IG^zw~Tx< zUHT;Y6W_mRgw{Vlw3sD+Q{NRRvC~%5G6VZzTDekx89qo$pJq04tkg0Y&c4Mm14yla z<;lI!9DF8=Fp|K$drc%ojw$W9l4d8|Na^XB;`fU5gHn_ul|wPa%#|gZ-E`~-`3M5r zr5*BR7KGIg&2U1({bgpAMxOGL)4>L~znWC@biZ{pI?p6clq-|I@}$`ctcY(8MSIzK za>&{turg1Jk6Ae_)t|T*Dk>0WmVA6rVUb0`m_N8TwtEyt7o*k3rKx2-LjEyljh9|` z=1``>>MMF$d1qGuNg_dd!WR&f0ApkY$eWZB{%%Fc3YY-W%>x&oeM2+k?9uT$DK*8yREY6*+K)Z<{e>d$ zK(iNA`q|UQeAB{o(_+nl^QSM^OdtqpeL9g6t*6u=!^{f%-n=#77fh}-y-*mzEHcI5 zc+#+u?Oo34MT7oY*hM_9;r0jCCnY(}+76c7D5=}GwW$4JS3L6@OF@$iK#d;<{{W4n zD#CrqN^kVPVgZh+E1 zlA$XD6!lKzQRhscyX`7Q1)%gH9KNn}8|XXgbU|f(X4R9@{uDK1kQaLra;^lwlBrl8xSadE+WxE^$bHhs zyX+j}W1gy%Wh&X{2iN)t>sMvWD%)l{yXuFUQVVvn?fa*lCOJOukm17Yg%h53Fh5no zqj=snvPAafq)ttZ;Eh z*r_1usIfarf5@Ss|7@Pit)*)>+jXn{s1f5{!9K&0AfvzjOBS=~1)I=xD`Ihnl;-BU z-4Kzc=rO&c;CO35;KSa7SakA2;-9Inrv3^mdTl^iX;=3;^4ZYQ(e*{0;+EKn@#y_v zvextt>4D~yi7i8uHS_iaTy+8-Jf$)w#nQnZ1J>cCX-rM_a#^%;I-6vfDD53m8JrJ! zm!Cg-C-171!c$I`afz9Fm!T4g9ujEH;4j4HCef26zC>_KM5iz^P3t>!nz7k6D~Kt7 zdX{2ToQ|!}Vb|w+q$DEI|7Itsb@<*%y&IR}D6#aDpCHIKmH0WFZJEc$1Fqa6#=E@k zgTub*I@`bSJ#v^K&tI-necxhsPJdjm|A`3Xh7pqXUd;Y(YQ)%_zVui=d`>9za3n@P zMOM=g?2CFYThbLr5#i{pyoy>(7Dq8bmIE12<5xg#_Rdtst?qRY`D5e{|La|mkl(M) z(vhv!Y?{gFG5L2MBNAjk2gx+GtHLe^on3p>lS z%l}S9%miz&sq_;bLwr-6O&t0aS6{vo2Iy-=4lN*5!+=!#ltU7=q_4_hLmdFvBv%V5 z?%9a8I?gO)Wrf%L7``7kNbgIaQTrl#T^6t;a8rt}j6 zRFx}{EUyKoEJ*0LMTV2D)$0yZdR?stos)4_3}{hvjXtg}N0V`86R#LIiX;@DmgrC2 zGF(7asJ;$PsB!bEKw{IB8Cy<~X5)0M2+V&DDfdHWb(7_@Gc&YpZPD_KIV{&i#54lv zFa(9{rjt!lrX*fy7T_8Hl^;X93Sg$KQzo8NrdY{3=Z6jgZa@fr>RIj5>C0xkVMhIy6GfG-Qas7qh%xY6oF+S~(ZBk<`6Y~J3W_z4Mnsc{~NJE%n^VA+fW-3iSbuRMq% z8y*O`26oWkNisX~B+iE7m~MRyyo!7`la!}poYUn=1jxv=@beJ7cB+UKuandtVaQb_kpSJ)+%(U|LLUOdF zqN@SIU&^61^hUx{#7e$sr{%HCG&ut4a-s!XL)9a6oEXY+=@qJsdDq^6aMlyLpJmr% zFH6mF@S9Gry7$HkNO?oKc?4|!j_)#(mcWf~s5%MqwuKHehygTv-PC4EP#NMc$;}K1Leq+$Smi0fJzmk(g60Fp-BSBfGBS$$`q7aCk zz9RN1WsOme@#3DuiqtMTeGsRE)KsUJC34bcj)xYY$5*s5Ib_b+Mf(DC17ucN2byAFVz`&A{L!-AcO>32ys4=zcV+F zal01r0MV)Te-A9pKEMECu0(bs-dF#L6qq>v6G3>7`X>^~=Z`0w+{cXNcyHLTd!cZe z!8h;HWgBh9kM}VNi5sxK9+#i>jeeEdr&(7Gc2Q@ev1les!kCXj(1ZG~nv}9)<9krx zaG&L{n1jA7CcDtvG4=N5OX5py|K8j=vzcno+@#0r?xW3Q?x)7VCK zp&^|(sZ4x9Io-xJPo|B&c0BEhN83ZMsZ#yC64RphwsKaORVRzX=9gMler<{fdEeo~ za}+%iBm#1e#gZ&&1DBZsbSy(O1#U8oUxwU@8dd!M$G53ZOK3K=A@#5brz^A!=VMwK zj@Y1Y09!M1F6~Os7UU1s3 zMu}j)geAg{Hl7BUesg{qMY7wUUyH$q_;*}G&~C`heZ~Fz@@(1|&+-DfaL(U|3JbRe zw!XuT(KmKmh^m*SRIwZ`$Xa6!LXx9IN+N>5kNnG0g`yssN~zkvUUzg`4E7__EwiliY1FuwVg4I^-1iOh zvN6>@inI5&g7y6LyB9(OARVZrTk`n9VzMe%u%xnKl4q7vk4u`?+frwd??(!o40)3w z+tdx~577zOhDd$XLz(jHvdkEhr#})kgNl&>G9eKgE{Acj*`|k9<3{zcm9V?};||_v z16;_s#I5@Tg_?Mssr{Ha4+_;jY5eEN;&&*{NZlqUSj|4eeaAHKhq7l!WVgr!L)UoF zbQ6yTiy^@WLV#wb`&uFGKp4TpM0~ckR&2^{m$r;B*=Lk4EEq1OR7Q>!=c#*2^3Lm5>`ZO^G#GCxi$fQoIQSj? zCLPz3=8EjQ5SLk_(fah>*JYYqbc-{tAo}s-Nm(pr^!WbSgz#T~dnhSEUwN!tEj_+? zaZNGeHZ5;1Z6W^f?)_$R=Nkqd%^=lgH%BTpe8>;F!_eOR- z$~ziK;h|prwu`1{|9zrB$E;Lq+Uxjx{P)z8e6SE^e(}e{EWc3L1KxJ>X*U>Q>kOuS z-Hf)#?vL+d9;&S#=&#p$WX%q+f)@Kt<$fvQt06st^?OT9bjsUs#?F!bw5gN*dvXX0 zuw^&Z_H@@VOi|@~o)|>8D-tiji74dSqUx{CHX;0am7l_FE8VjNRG;~Ht*WvsM;Ob0 zO7wX=;}`F>A*P*^EvwaUq&Vk?lWi+%V}!q9?KeQCrEt>l`8lm`LzM3W?9j2o!CvK9wDNy5N=TJOe zvYX~6lkTye-h}*M`{w#|Nl8eENyx8WUV8K(;qdF>?XA1OEhI`2?Qq2AGz7#jdsn}% zK$J(vnw>G(FL<(Fmd^i;a>tl{@O*qz%HYb+_q%hBv>`og!4PniG}_>(a^$acY@d2x zo8fqPeABbCQih)oqL?bfaNKAOB@)VtX{{&PTMzGQ!T9DVsk8xH_)^@0@i|KY3-I_9 zl)r0>>jF=TxY?N^F68$P^D3+9r@B$U{f_vIPhjtQpHu5xpOZl=b`WMA2n3nmsNUlBfZ(*OprRGC1pby8V6Y zFQ7iU03O{%Ims<`(`2ny9X2kI;>js4P;KGSc!l*RAw>UvGTqCCO;Zf#=Y55Z2 zL6+fIH}SaC-|~o!+#CcPeT!@XwWR&1q!nR$$gknUm#MJw?$>>jVoe);*m2!l=b zu+n>7jY!?fHtz*yJP|hL8MEcmU|@KMY)Wm*qbVS9O!OWi^s(Z{l678q9Y#NylEH9xmh zg;`aJk)A2C*fs{*Z+82P4WN*zV&En9jr>7BLzt=Q7ktSfeq;J_8Ow3`g?wY^Uz3OO z)wsd*65SuGeB?0+u=|(HXfFL7#$#1z;MiXuK{ArXrgj}`K1@?g8j)0aTJR-@d!ix} zg8j1te+tS-lKK6HO+#G7nHO#$zd6x?b0**Ko5St>Kzfn1&~|c#JJ-m&R*lD* zVR4cU*~g*SO!nZhlc72O^ypfR8B;c@hE?mthS3NX!LTp>MBizDpf0@{#996Ve%f#a zZNxH7?vPKl6iodzlgyR?usydeQDARB=GHb!5_=}o-Aa6B-pn#rB#IQjQXIawPQ&R*ImW=}do;qur#d=y zXmeg0(8m>V@m%muD^#Eh|K&}8P_U%hgjZwO+?bfukf7Ow{g*{Iboz@XYl@7VDd+7k z|FAZS84MDE0X^jB3_ERabD!)N1Y%a5Zoa_s{EjtpLL=$+8HXjNo8u@OyvV_sc{yx_ zQ9Wg|!m2q9yJO}UPfaJQk6S2Y*xs3m=Gk|hJ`J4d+~|6ic6PgR6ZSpMwUfdVF$WS9 zf-a~ka+tBOj`&u;8$XU*{}ay2Ef4ul2>5C{9&J9G#4nJp*eX*Y#_>gOSIssjCb{K; zb}hI#p3ZI)WT2M598E`^zQ?E@YpgsC@Ia)~s9;1*EBE3-+Xd60GZQJTl)!h^fRx)Z zve~qW&qctHTsxFvKinXjjLA~PSZDS^ig$5TPm26{lr@s@{+79r?La>YY7%Y zWn?4G3JZ|XI<-Q6Nty_2@8>G7CRB9ko@V}55(8K7)_stJwJ(~by04q!v4E=yX>RVk0UZd(jtYEY}spq>!O=H*wNSDg2%=_ zimC0a-}bV?$akJQW+N+RfF**)bq!QFBBl7z4tXQ(>CcALG36Wq=l1OD_(@ptqsaI|| z7?!>uh!k?lx|z>8TG{WX>T$*QX&k+cV)y7bDCac1E)_?ktGA3&^YB4&TRG%8msjNq zApPYK_r~g~oP}@cC5l*W`8jXj_H#OnzEku#;;U56>c8s+He3I;Xyo(%jgh_U+pqld zXq^rj*~n8bWw?N3@ovO0YfJCGFFOw)LbfGU?%oFATOT2(?`su{a|TWR=c5lxDMsx# z6l++_PF#7q+b3>@@(=hoHG2?z%dNv@XtLFoaWo?7r|po(^B&Q}lL-M(A0qAfwaR0& z9G`gP?Su*Y(!S9uiVyyQ9B`uVZIfP`KlC;q#*$nTyqDrjgCo6V@VxgZ^DL1DV2Tyys102P5h@8GJe-?CHQ&OVS z1bB88tI%OVi|h796BdeC&|rK##Nwk5At|Y3oRmCIVSl(JOn~0bA@p>G=P?c=Pz%YoOITYQma$NM z$g)V82aobDSn+)Ts}uFa3a}N_Y?upM{6;jq2M0EWRr_d{)6q%f@5a?wW>~EH-DCA} zCc%|NPrt3S+2UXzvA4pr@-Hh7rC*XyXlDC!hmXq8Kja;;W^z6omr#!tPZJ1~f#PcktE0 z3Fw4cdm`v{Pz&JcA#}WC175&pn!MpfU3js5lzgV76j{0XP76jwPE-rJZNFXsxZ)63 znrI=*E@INFh(GfMxxa@Cadcf}urZ`_IVzMh7}ocl`rtgPGYRaPsfPmsKLAv={|4s~ zqXqxmppci2imLK2hF}8bw!R}#O7G3)o_$2QM>b@C-($Wf9)JZA!h#38t{vux72?0O z!O0uBt&K0kRT<{=b& z*mvrR2pE&YfmUH{-*{2<2tR%DI(tC}Y$MQ~A6Qo;2<>8UBpSif&UIa1x_qFdc|!%h z66WI+A%1YBJv8xwEshCle$x&dZ;2+&48Q;kREZ9|v37}{1n^PD)omd^({k>ALQbsx zP#lGpPaM|s_Cq*j{pb@|MqKdmRQ6GjJG*0u6T}+i9_k4VjueMM@wD9H=5xY2{dQy* zPc=|m-Q{zIPUx}IrO@dg=eQ0AU z+8hrYg#n+b2nnK=+$t5f6JPbqQd>UZG4_XUj--|qiv4RNAN zs{LfvuKqwfO@b$1B7w=;3Uez&x!74HW=}0JNe~X`HMxwwGoXJn`Jm*0X}ONZWxE;} z1>|3jmMqpS|D5prxi-0wakA~F2=i-I0*;y@#IYXF}lxb?=z)k>HE@B+*DyD1+? zkK3j~pX;F_&Lp`J$L#wcy%lRL0r%Ey_IGkSZa|NY)McF=1-uOp`fABOW$;(N^d`vN zVq_wtckJLD;=Kc~!;>z{E8LB1zhIeoY10LYrsx5lMKZpprt@q)~K_9toPVOWC zY(2n&I*hFhB0`xaV}fqS_5C#jf1e1Y%RQk`iriPN0;+)OwdTdzCe6aVo-~#Q9xkvT zL?HO}!N?UH9t^0110^$WlV(lRnmPp|W-hu_)H*}wOZK`rsoZ#e$B?myUfKo&zB~F-G&7G~7!|y9 zH}-$AL&_>?tB#WZz)@RdHBQ$>_regfNxX9fFYZ8nXqDOyt+A_10H z_j$&Y6HVTh+^#1LFI~>NR{Ys1a|1?k*DnV%CV);D_qRFT@30E**s=gaav=CjKS2*n z^ohz5p%{rhFWBYi{*&oPAo;~Re@pJ3AsW>aEO>Lf#>)jr3xtE(PVBZH*%NgzvGcQd zmGJ%EhxK1uR3477ndHW}F&)`@A8kn~b1&b{fq9;X0Bh>=P>@K69c|8%`tGp}4}nK% z0gNr-`0ees@UE*|1TUsXD95rDHiNqshyX7*wSUfHlSc$& z5lcbtM8MH)rb0!wax82x1EtdI3Da-5E^tO94J(ktmM8yj< z;0zW#ovp(CpngP1xeT2mAJ}k3vG&%YRGIKrxgEo6;nm21Iveg?GHX%p??oH0dq@p;fr|Cf7yf5=g^@2UlTbeG1$w0@f8Lu2 zb%R{h_CaUJxj_8688T)?i4&RJr~R4wSSRw&IT@5I(7 zLCqaW;Gv-69v{MLovqmc2r5vxFJSmgB|cFU4)9JP5`KidKG5z)FH&;44FkHb6N?WJ zQU1mcl7(e_1fdBVO}dB^QTn3;NBg{Gr6Qn7#Y^c;7|HBbGY|nPu%Kb%fI-XeRMc;X zlw^L~5{_*uV*43jX|NA6F#dG}t*tYy;su6sru&^v)J^aUX^>(d3}Cr#YtW3g5y>Fs z0_tc?+!&*jZ22I%`=bJtAvHKI2fp%vIXF;e-^%>YSUgfTi)X0EbDyeBm!AIS!_--} zWr$AspSfQD3@zmwga*TatYN^rF)9n4{fKiMlyBISxi9%!q@Sn(fCLy2&E%iAW8IxW zhdPEy2qGW>TW#r}Lj#Lar1nhY<4kN9I6KH4gEAMX*q<1~>egm(f?3! z*Xrvtv$&7mx6NUAS6amldgJ8{<@3q2+xT0DK&y>>r?>gE*F(c0?GHxxfi8=ZAsEKf zzBi*W@^_^#X4(S3y_7!# z+g@8ocaF5jw6?mh9WF=o=kER7M#^4fwW==z3Ql{n1GO`MwL^Nve(a>{&aF0-;uE}V zt0diu+~zx8K~~LPAxfX?{6MQpR}czQF&3J4;||Y($H3c2Kx~J=c8E&<1=b$Ke8Qru zlvN0{7*tFJg5`@qk8H+tyX?JTZioU_Vc<{>h^k#}`%saumvwRG!-Jrodq@2}Dlc;w z;LjjDjr&nq^?36Z0gyqxHZfmf&RjU^@mI^AKn8eSJuD%!VYuQzOaM|uCoD?Tp;;kH zM5YP;K_Cn$@%%F8H1XJC^XV@U@O^Ga-g4B7=VBAAMcIR7QR(!C5XlV&;mW}mC#&ua zK6;wu(@a4v$Vr*|p}6=IbROa(=(c9g_T?N7oIB4wcTX0hLTetend$^5|F9!O9zEpA z6K!KYtH>X8D=O}zvlcUPZ7^G9j8dyM%Sp>;^d+d7)WT=KaqJ^wNdg#&?8HR;SwY(@Pzv!hm^!9ONIu-ln4~;^Y(C+@H+MG`U1FuU`i(@nmm*V zpFjO%J{Sg`1l{I9&O%9_F~e^u3iFH%7L}wzFMJNoDHjnf>!wU20Bx|K(>GkU@Eq|@ z>^;a=`p^32%pi|}Wy30LxyRV~3iS;kIdQ@GD@Zn*vf?k75I3vgBy-0j9jz3VrbkGM zf;k(dlIg3Mr2J?T(bGV9owuZ zjP1ugNS!x1Fv;na4;H))6*;~ifS)_|2w|>Ov{YMY7b+I(|L=>%1fBuaf2`_$CeW#{ z;+7lRg+#g&jzWt$G+?zCq<5u&H1&GnK(7eB zg0vY?($*dW$!!|nj5va>AYvkN0NjQN&WLJ`Aa~YLh;e}G_oUOrZ)KuNM;z~vO00$6 z5otei$~Q40$hKw?C~iRUtbMeLJfzk4?ND|vkrlIq6W9ywxNhrjbVU}`8$Ps;mq#fO zRcc<;E!-&NflQ%Y_8EH=0(mA{Zg<0Bm3o$qg&5y(dLsx4*ufO@L8YuZe@trVwh8QJ zkbl^Ke*au%UTZz;gue#~yv8SDt+i2yvHfpsrU9rhA0DUFN?FzE@GhC_X2GKrXsI zGUCcx(tomZ6~8ur6`M$rQyvVT+#Q4gisBk9zx{o-hOy<^-IT^m1XdjnW)V?#xMm<0 zM{vATJTDeDPqiZ*G_kyIS0J^8@J)o z6p6WlTz1lz6wP(zg>mLc&mth*UtOBMLZaEnq0VsaV$iLBECjMEovsuCm@|KcSX$cg z5pH0JKmRAKcg17fUD_LV53=gsH7iifAoihnEbyLnwc`)o0UeZFueh~~7L1eI(1!Th zNtr8T*|$?r12B~afpA~$bU;+eXq0bwdyqZ|V?g5>wVm-3@hGG(fGIgE6clErTt+1B zgRuv(O}~_fg$Ie5yoyzG-|;l2b(priAwq9VNs_Hkrbj3?hOR<4#<}zA3l_Ae87!FY z^fDv0T|Y(*H3%kdKR|DMjY8CqO;{>JFvG|wy9-BF*50prMok#}Q z;7(z{j!>1hqS_VU@hJVtp%xJ%@)GEP0d0hch{ziGbBhR|9=KA*M!6GH&b*ehB$#~G z2n@Q#gg%~s#0^EBz0mrbI8b9f(_UOlzPOKdegf7GK0@;Sk%0y$(`>&F9&(=EeV>S1 zNXd8ep_a+Ixc$Mfqxva+sRz2UYD4~tGh}^zFRl(y#Zs}l1$eUHhOv&hs%(pwl0pYb ztiqMEuw`)%lgUK{={pHlQ<9_zGrW+3m6N1ul2^3WXiulQ*w<;$Rw&Is%C4EPZ#L7vcl58W6=xHDZX zy^q&}p&D!^s1?A=un44i4B{aIXoB{k1O!)4?_!ppN<;5{500`}FC>$q^gx1+k#KD5 zRz4mNy2xCl^6RCEB{xf)phBUk&OW+z;{t|?$`#$+I)JmqfwG7^qk480uq;`Qf92fFnHRRZ$jYY5awD~8TrkfED-w9tVSMiA{N#49jo?N=^R z6CBR9T#oO7{Gk`%!c;jC6Y59SX&&6QC&LSi3qrvw_J>~p%m#o1UO<<~{EO&>QiD7N zkGD^I5Xcqgep|fYVe04N2PjlFL^I@-J6#tMi&;h?fj9W3#2%BhXzLI3|4|yfR(1XvxGTuqQuQDH^Cnan zHK=Qm9}qfoSfK$bbi@N*3_b?VGjRkgyo`jYtZeFFlxk5WOpyj*doYw zB0&x9XZcBvwt1e2oR+^ieEQpKAhCP!6n8-_F0|3)%U`zi1&)h)F~rn_Kcd9)0`89l zfRKSdse5w?7D>A9TpK4Tm*miTV|x(eH+8~hKM8tvs9sM7n{*Yp|+V z*cAX3X8b!j2gZ=lLmB4-z#6LM1VXkzu5r*U6%^LrF&5otr;vE#MQ(1ZoI8^vEuL2g z@=~pPyOO+n`S~c|K>tmGe3z6;vb)-`FU!G-5F{ulT;pYf+D#*#QK6Rmr}Eo2$<17d z(v;`9<3^v;PI-UFgJCfr3aDf(HIa_?0>W-I=qLh+t=+tYj|`zpCj|Q9+ZBgG_;oGl z7K#bT0MZtxI4Q3)} zH$8;D&QP3q*==FjP>?;#ullAkM!#J89*b??Rh*lO_i348zpgH{)ykdMk3i}^b)4R6 zKF&GLF>X!bPo^qe_jIMs6G7^t9w9~o?_z%Ux7I31_?CvN+e2>bdqd1l&(M<_)p6~j zmdl`<1DT8c$Y?;`;Dnu{xaM6l^!!}qw^b5u#F}q8tTxLAHHDh-nS4yVtoinM$J>uu zg+}aJlea3Y+Ot(H66Up9we}<7X;tk9BQF4mI+Hp)+9}Ink9T*_OJah z`8%FR{>BBWVJ(*uNG+Yp-{E zQ1IM6r$S(AUU54roV{{?^xN14?|=Q)U7Tk+G`;RrYv6$XgLlBBbBCrfE0b{vEsLs8 zi*+ep)2?ZWwb`KNcSdH|1t)L$K*-<2+f9eU&H0n%L5(Y&2373_v1QWvjsmy(i2ZmE zVeKqt^u{`ZLc-L8+EMYtU13H~{QA7?)MK6az1S4t<(t4Fm~=5kiA zP&tY5uD{3U`>nN2VP9n-Sj3;(ek6Em%!H+GaerNIs_wp468tcpvGpQ6RMD{We&jUH znOyk%&-W1qJ+jf$tdyTuvTgtGw8o*l_eVWC#dfU0_YY%e_qXTWWmp&q4r{QGJNq^} z8GR%kPb-u2yMHT~`C>2-+W-jin>7Uh2QI1N4^v=eAQg`g@_Ta_1R=GzStI-0vH_MP zmz?5$gW|sO(_{dz|BnLjR50C%s!LL6-z9g zNphX?vvS$udmd&x0SOz*52$b+^+9;Q&fnJO=f~5|W3;4AkTj%U)E>pr#ga{h1u`4u zKK|}CM@pxxe}b4_f_+FkYKvCl+cHWkLTH1ssb^+L^b`L@Qnr93iypf|tn?F3`6iBPy(j8;je4}J|R>kvom~SJn zi7AyMDa$|F`;#dosfHt6@-HMRRcUrwl&lHL-y3F?9yg}#CEnTHHYvWzo484se0z?Al(tDyF389Cpo<|+|Q^n z57U-5k9^y1r_9H%YBxj#c-|_8auMczg=5&m;|Dj?IXNf)l~4sKghKFmZ|5P9$&5oQ zoW_#>^~NNA74?tyKlGX-QAF39y3&8bIg{gE&sGM;S$eS_V!X*j4(gmQFsZ_*_O|EfC??dbKz13Xr7o zReKP_Im{$z1VG(OhzJ@GMEHSq;0Ny8J{XU-XalxHC|lUZ7A9g#A}~ZEfrLM>k);|T z=c4nE$??D;+X9U1sm92X@Wb`k$aI;(=g)_~sviXYs-81{r4^tF_)!$w`S8~$_PynX zQ!NQ9$!Sk@13+02_4=&*`N6s)A7L7yav?0>AyI}=cry080)JV1R1`21xGw16hs(9a z1u!&|GHf_qxz{*wg2`RbvS7Gm;6WrEH4c!|<52NC%4L`Drao0w6tT9xgi=%yMJll` zm95o%AzhLi>J@Hwoy1<)ByXv`Q2rMh5d|LtcCZbeA5l^OL^DF{>7L(``!| zqy7er4gztVrf8ZeEHh?DNq6dPG&k+IwUJZTtxl`;v3$Ha|DXIOkt` z*?_uwe3Q#dmk%%JTb$EqR|?-oC;sJ$8gSdcnJo8}vA13P!WvN4-9+tL>;kLVq8m-` zigLLOMtBiM5Ct)&D;<$OsJsp4woR>=aV3#|Xd4iYNHvr`x<94ZqcM&g9}8*j#hWO_ zHz(c)Y<}NF={LrHPva?1gR%{jaMtQ+3RPd68_%fIYb+hypTs7+^IK-qjfko(#)k)uZ&X+lbpvkl5%D z#{_~EvzcxM5*m`^%eP{XT^^Bjc7klq2%yOH*(9qU zdbRMGUk9Il<=H<1n*X~=_&>P4ynV(OV=KbHpb5{A9zI-Oez3hOaQ$&tG~yuigFVmb zNK6%M0O`~(kU9OG1P^%tkQqim74mTQCFpm_evk(~fC&7fBm_`cN}qPZ&~LcN3Kk_+ ziQa_<|2<8-mLgxbiR!HTvd;Qg$5kt9=1!(dl@LcFX zC<~37z+BKGcEbae(NBg(&``@ANE5Z)w$qTbSdl)7R085-aNr+#;?^>5o(K67_@0@1 z+iyG;p|7Ic#4$;whpDVvtEr8s-AFV>GhJzuR|-Eyv%fik$DIGbR8@aG_8!S!+GhNL zJYW=0@KE|0rbL#;Y#q>|O4lnks(FwpT$*Y3NP;chp5!}J7!*f=3yvYiT+p&7+7jKw zh7-zi-?}37YNO=>UZ#$1u@4+2v%22Kf6#wrM8o3yZRvPZ${`)mff(5Owcq>FC(&zo z@XS3R#t%)3{Mp!hO)nw@;@DyfCfu4faza&h*$3rOPe>PmYHU?ezLYSW;_+!DE_xI) zRLj(Ux9f+12rH0n5-o5bx~Ls+b2NtWt``2DAW;@gx`Fen>zsKL0v3-<6WS_ zlZ(?pfcH%*{Bv!43(qe;`@WQckiS0+BF!PxIf7NZwUUv4&n4&BACXOAK}${8p|Cg07Mp zGl&gB@&Y+PzSr(0l|v~U^4cR+d1PC7!|tywf(Rf}7KBqr47S^{<+SbW zRFj%ETD!twcLTo}HwbqSsCZo9hE8iJ137j40fvpLIcPucg2D76@9jY7yN=3Z=s zIF}FRFT3-X!@lZ9{mf}04FN z`gbg5=MWv8!Hwrm)wmyvT)Hzid7d?e=Ky4-@GbOP-kDefWBC))V*X_8Gk<<|r`Tm* zWk)$FJE!+fM9w?0*gM%7*)73DKV>J+W$Eu&Nb`jseHk3^-+bn4fXDwdkoof$7gv@S zU$5O;JM)&DPiglf2PvwzlN_=BPB~)n@Qr(`i?2f@xBOsxd3|YlY1hg(4rJFS9SO=! zHXes@CrKKk?USl}!{LRtve@DDq{Z31jH3_Q5{$09-(wS#0l{fRmD;PzeWW**sXO}- z)p^yO#^bnai@nLbZ=P&k98A&k3-I7vQ$ICSL^yF8e_4PsAZ(QG*_be1C2jqoU^ z#1}Qfll2*=edP4?nku`1%CEt~W?hB@W1=K4jKiZ8J0YL*(S6j-c}%=+9ihu)r7qJ_ z9O&F@!Uaa2H^Byu5mTZ%?}@tFY0@Q1Pp^8OzjTW_TI;RW7S=`-RNeU$<9;O39MJZ) z!at&B`})M!K@R`R6vj`EeFoWu^|-T&>m9BiYytAZB9@J?uIszSs&CNcftt`dNfW9# ztsmf-6eH!e&Pg>M3+uJQ_mCdHJMkMpivKq0@i~(iXWB<|!NkNm5yKYiOpoj>CPv@2 zu_%#)_Q58@;>Pb|g8ID+zYP@lACnB_u@BTsLSzle7W!N9;eOcN%@r{=;vhiv1rMEZvbI*M>0rfb%C6+xG_K-0pe@=?REo2gA}xrfq2gQE7jU`UPu0KmrT6^Uz0A(#%hiS;NJ#juouzp7Wg zajMCD8tu4A(dr;5yu-^PBiF%2k*3>nM=p;TWeZ9|nUX=Jl6Xl}^7Zxem22~}5Pym4 z%av=hSGfATaxOcre&-#D-1x1(L?!*dCO2MRt?jLD-k;f9+*sQ@%O20d$22!)A?a;) zWZ4sDQCS#ItZp7&#hpu7WrY3_{2%y%*+{Vt@gVW4Rd+pHkYw(%@mf+YTknb0_2uoW zdkfnes1-2R6C|rOoKLZ`wUAta2qT!`N}tF@vulpX#)5fd^&=No%kqz^r=*I-bOuPw z&%52jnLTxTM5gMvVMDgtjwk&%Jb|fls5THVIX_>mlq==g^4w&pbZp(!u|W3WGZfOP znewr2yz>eC`f{&uq40d+<9)D)?*IR+-v9rcx&MEza2Gw4=O_LFpTdv! zP*#?a`ZTQ2*?QB=5C2Lv#83Ffe+-$tJR~K+G;F5!xw)f zo~j}W1i7`X)ulALN%n!|_j^%H?*e%*n3S&9wwIQc@1H@4HKm_VmxmFOjxx3~833YduN=v)G}!4+Ntz$GV^S#qMzP2iTefg=fDxD6g-gW(*6{)cXpvy+w% z58SpJ^*D340RbpwH<>pu8w-D)pKcSuYF9fQiJ3_pm5_lScc~`i90)MYbYx_ zJNT`X?yzyJB)yS&93Lx-bw846{#*f1WNcHXpB;-<-}r!zpI(N*m_D8%QK{O~*>H=l zUOA6Mz$@3jgUP`PCI=^;HOcvO?AI40Tc!vSm29-7my=D}ThZ~uNWeXFsnZSFaq7(DpNec!J;0sNb^#Y}FEkuHz8qbS?y^}_7efDAAH++P9i zKVp*MtK_Ee;bxm>IWM?SOb)=wL86p>*mW9`OUUr)hw6Q)4{z)W>9xR_;DxQe1sOEw zpXq`;uitO9?i`Gryy(4rsaw4|CW&mj)gDpfi; z8&jQuv<#f+iX-~&?+<`h7K@x{#jJRww*-aef(_1(lHeKvw46mtT{1EnVU7}x%M&sPeB2+z-lAl>o?Cbwrf>1mGM*9z0<6}f_0AiLwVZq>yfcSj z@4G?BddHGZgLc266P|XVJoAOSc<8CY2e>9ryn!#vzP);P8D@h9Kg6hNJDsF*#-I<0 zRWslK#F3A|7Ww66v0zSKu{9`7jR0^W+it@JVOImm@uM*adSmy2gR~QJe_u8tfJ5v- z=RUMRf7wFfDv0v=)75yTcT@SQOWeB1C3XNMDeJ z5q{i}tqToN4~Ri6vl`(9g#aK-l_1Wb5=j1$`A(q$RA0-y$4z+zYR4PMOou{dn)iW! zl%!8m1JOTS-m5eK4N+LdA!+YHl|3MV^{C3?7V8g99BYsb<7wnfP+BM0=Z}atq31Wv z6QnSj(RxEn!d;}$r1=DU6gO7a*Eg1KUANwdB?S8$uj7gl?_DGThglRWF_PTnOu1Pm8aiq8tY)t9wZiv*4T8Cw&%O&0+;e6y_f0AkJNvu4^3{kZ zmm>O9FQfLZ^AB-De1Xt2u(S-np9(5lq;IzuYTNXM4-coWx|orEEUql9 z-+}L6v@!$XYA_uYCI^MEZ6P0ARrzq8nz~D>+IlSM%+Uz<7dO}!i@Qxy|2ldTnZAJC zc#ku7%C&$N_R|e~fZ7SuozkYSfpCF@z`G#X$qsaE&4+2xre!V%0p|?;5;}baMukO* zx;IBx{w3Zit@~5mbhf6^#dhYn!TWv82w}5mD`eOLUy{9gf0;wu#oB!}ZrT%0LIzF= zRVA9>{9ODs+SYTNj8VGxqH$r$^}u0o)^o$p1nY!uJj4Q#h5@A-0!~2t^;oiMXc1yd z2DrJfwau?fh%{aSiqM7031EmF_J>x6vEDUw%r0y4Q(_?L1amSShiY7L6PDhMpP4#s zGYElMf(Xyz&{du3@d^otp#$c6P5ETx!))^;8Lbl2X!uI$2bic`nfMN6E ze8<}M#@51}<-HodW@1FLUF?HU#6uSM_+-#*U6y&kTY8p9y%))Jd6c3cgRoXV)g3yO zQo!sfQCk+DKak#l)9C0a79-n=jQxDt8OisU1FPqe`1+LZS7(0#G?@`=1|U(=z6nEy`zaLr$a~g(B>pg1?uq6N=B`uAcrhnX0KzOdXEN` zoX)|6c0xMRl{9R__vqw4T8*S^3<1s*ybU>U(o$lvpi*OM_fLr8=%vV1p=4Sa&ljeq zrl5(6|MA4IxPd2x?8g}0CYXe$^3*@W>9BD`>u1BHF%v*NVz;CC2pEZaE}amG%;e&r z)%Du));6C3q=4ODxO;E8X1bxtL9&%f#TJ+9@b%Ksliu5x;70?0JgnN{iY;bsac%b! z9Z{POqDn{fWTK&&>=;uGDGN&335My|xBo=C-=DscUqqusmrZM_4h%cq56c9R3 z{dr1bIKyFsMvo&Qn2t=Cxi(IZOcj@p|3R8mvNYj0;wfC}i}=BlD+oO|gyM>s^6c#3 zLGxiMbczbH#p$?W3t5&{haseb=fvWH11>3l|2%Ic3Fq+umJb&DoSlEp&OrSfbXsB% z3(Z~~tIv~ohz>b$KJmHHkM}Pp{T0*F+H0Z=y^BufIT%c zSniSBmR+uLRZn%SvSnM{w&a%Ndf+KE+t#+NX<71UOXc!(HR*W(eP9R!ISG>&my<&{ zTtadQ;pUJR;SiDxoR9+vAp{bb0D<9g$dC{qJd(2>|NrlQZ%MW#b;EG)`ewRYmiAu% z`?dbHzLl#avFaw?y_LB$0Xf2j=fY`g$1B!u&sAz;Gfy)$v@V{7_nW(pV9`m)>c?IcltKm2$R_mZ5Ur-dh7TslN_}| z_LQZm&t}UTxYI&`*M}E);_eM)E}kZHh~{C5ORDF^{{>B*#r|@gv~2jVB}3fY=UJQ^ z-HR9TU$6nPTD|AlL5({8UVJt2f1nA`t#i9@OntR|V*Q6ifg7?`pMAh6C<L zp`B;LyXza*@LCIxt&a953`?R;@^mp2O2fbk_23ZxM6;Tx;gb`&ws%{Kx6eZhrBPV1 zC{;)_%|#o56|0|wYl+lHh>`4{LKpc0ySMzCu>x;mZ+UQ?sH6v2R)-0o*jnY!s+!Tjwkf_U^e}}#E&w!8P2S)v0L#M%bV9>P947WOe-1{ zE=wZoOc=}97Um0AkMPL1_!t>-+Fv^QQ5wN)=Ba+|L*d82U>t*?xz76QX2*GZA@LcU zS?`^H0jl=3b}j!V%tYga8+Q|L*(zl5h9kRn2dA~tR&ssvj=O~)vx|6Tf%{=JdW9)d zUE6J8glxP-hEp>et!oR+EKF4Q{8}1ncMnN=I*LAm^@fVYg6wJ2ha3Ws$$Z$jNim0q zL_kUmY5drpWy)O-wUWwHoK&*<*?Q9nEp%198dOJ6#1YH{d124Y&C$$D-?R>pa<;}3 ztrinF8EE&%(Fp7DtBzA?d$6%UqmMO?%`YBuU_vw{A?Sh9`mQWYOW zMxf=*wYBP6uCP*BC42pYR*ei}{3fb1hP{(f-KKMV=%*o5ZM-cUspIuZcQ6_5R89|bgMiP2Eq_)WCVQT75!hbXR6hA z>FyM7N1JKVE~6ket`AQ4Y=~whba0q{xx5>q2f$d#m6m&wC$^x|twBki9MdD>eTnbI zCVc5!0ov`0tR{T)3vBYt8~NPO5t#e4f088ZLH(IO1G8JQpSK8uh>1>Fs96;7*d<4& z^&DYL^m}{Z@4R>eXX8))v)_R#eAKSZ$4nHz5s`SKAtq3gl7&F zIRL(do_g!g|6eix{|7Sei*!VN;!}z9iB~6_9?7Ts|G&!i|6jcF^|-Biln%edCZIP0 z@4?+$bt!v$X#P085ipLXMiN;utq}1P+7ch@&2J$Uqk4YDoj=1YU7nr3bm>ZO+~?`^ z^yT#Q?8_2`_{qdyM_bj$9$bW~eZ5`FGi*~Avc(Tw%f|6AF6pq{+EE6p<~T`apQzMj z#h~>iD+U*f>+3l<4^8ks}XI`-Xn3q|z-w!%yN zC0ZJzX=`yQznsrm-@QO0$ZIgSxLL|qZiBp~+;YAExxWvaiyOsf;L{5|J8qlSnM@h! zOw7EFc1aYcr=r`(TJUS#whzZ{wrV0b4`083;E}^eBw7+Y5vxom44dSxwvOOX+&0mS z$Qvun4D4f|&dIqJ_LSSL+A-zFQO+zTKT2aBUO)(C#)m2o^jW^g+$e+5NuT)u$ zG2%r1hS1PdNs5@8#*7o|9m@n4@44zRQ^Nw0$2FY+ar>6*@>r z9zC}`m`^1hsgl`LuAjiBQt63xsv8O4L!ELzT9lEr_}k-Y@#C*w|E`a}`Kw@nOgr09 z*Ke|`{We`CZ)BH<^SOr=c?Y*$EBB%}M) zfhJybHdZ&N5n!HU-`xhxdtGnO=RgeTsI%<_+J!Q(17D(-Km(R7$5`ZA39Go%WT89I zV%&aV%Ar^QL>q{fyB*`R3)yJ;M;LaR3L8-CD_2@hi`I~4%ZXmuaackXxsN*(JwCv= zm-RdOT_<$O*Q6j(BUeq;6MD!RL)p+a)`4|CmJo+TU{A-;VV#3f=#~rftzEWky^vQ! z#jDoz!^+rbw2tt4yWMU00g+PW&~e&pw_$7Hb2}5`H^p;t4}6+Qy~9J_!#x7gxB9qi z=x|)`6nQDvxOZTeXcF^fU2&>5VDr(y8J2Y>ycxogjen5!ugU;Fi2mCoOpSGew6P3(f7LzhyJ=uqUa1*gtY=a0V3N3AL9xZd{$X9mv7*CW#QPR@j1327LlW0*C0vAbE9<}i783lk9Wr^cqmO;&u$hel#by9d-<)y)hcVx zkrSDjSy)uvcd610h^*$^@AKBcIBf7VJP@Cp2R?m5_R#!jHZ^zW0%egJe6Sf;JeT3i zCmDZ{IT^H628Z)3{%g*;b7GE9%{ALpUC2ydNTEg5h0Gj$xCb9*=EwjZio(5kSd+AP zGn|~x@Fs6)DGU`r7GWe7{~((%6peq}!#_a0^TNsXGeG`Hm9~YJY?;*a7ho)9F7Pqe zB@?p?G@)cJypXy8*`V()T)uq4O+N{YzJV!b=^yeKT`hzTb=7MwQ zWw5}@w>~oUaoAzbKa5(OH`_bRT{LaUK9kE8ZsgXA8zX3OUWF3i+@EX0q792j^01Sk zNc3?cFB7ShmQyskQ8ruZMd)Q1;)#}4isllen9G}v11ZZMkG4>XbddvF_u=}o84sPi zF~-A1ud$;j|9F9_wVI(`!*>_GHmvk@3N_Yh!*&C=IO>cJOEpv4!$FZ3*h6-8r~kI< zHI9-3%QFbspVDf>uvkzz9GMp?iA|gA>YI$*z4DR9@I2Crj?|t31!%+A$xU3^pX0DE zw1<*)!NNa|j=kzLC#RY}Wf zmte#|ljL~VtfL40;GI{+UBEW&7tIGfO6wgV^?8EsdJ1&(E$p?@-|Y5Hdxq-hK#^<`_hO5zt$i??v@&%?U$ z7JCT^pbo~1pZ%pMVfgsjd&B{xvfen>ak6z3Y^OI0wi}Ov4GF&zQLz80!m3{X=!;|l zx_a(6peY`+Tjj;))%}IE)-wJ&F z6g1VXDI-EF=x*tWP@8PiZA3al;p>Nuhk*;TQrVw!;-eyE;wB&cp246hnNx!|(z7uW zlFZcH<>|{;F3rwdx_ss0l`}`c7+i`c6JPg@(ApcXe-||I7u&7<_4#sfEjuFJIkom9 zVYuyzyS1`byq?8tF%@k4j$0{Z3*{^kgHs_<*%olPoNDZn4q0Xf{;H^E20y^t|FAr3 zIoO%9N{H^?@S@JWS;|*(;h)9A+HJ?7XVmGTl-tN<+3Ophz%SLacu|8u(89u8=}* z;&N|gq8_vqk+ssHwOx;V@5#cI>D1!SXxlHmDGQk&dx&FLcgxZovX||-fb>YWXktEv z`3jU^;<&`%bWa?$VLEn*Siq~LiM)<-h%9nOXPBZ@-|BgEy`};-kuL2}sTNg#MKwQn zSfmR=9?8hUK^mtWJZcy^R(&^$;c3+m6{|iMqjk;~kC+Ln{K2j7?loH5xG1HI6`KR5qm3Q@=G~D`AVHef&*LM5+p>N|cJ`9M!Q6?29@@5(*!Xg|NFFz}A-fET>#ycgoE|y{H@#DI+pShBgIt3dPI6#^gFlCf!sHN%dN-p_uEe%uG_Z z>}Q$4TvdS+@2WU*VuSQZHDS-7)N4IdKU@9dO${jokUF_eCpDCM*N+Vbz1UW=rASgk z(ip}w8ee4WS^r5VS1J`tZf5S%yqlbv!(G7D$lMUGA($2>I@aaC!-ex=6EwEKVY{`5 z0l$bbOwZ%0lPJ@Ko~fL!AUJ+Hc4-XD%F$kZC!MyENShb0sWsqGTLn`!)bs@xtuAn) zrsH|5?XdZXdK!8ErraC6C_yh_QO4F-J%t&lc>yd>N-N@!kqY0;P>|^k)8!x3p-&=R zisht%D{tCbc~cI36aH;2;%WRT#a$_EBfgwdoRBHv|M6Aa*#VUZkHmHcrWONMRA}cx zXNzm=4t61P;~1$Q=$QH;r*8wmSv6J!Sl;O9562O%kC54{9q$NaNv_7SB|g4>Q_%Bv zw@Gmtw~wtE$=+jyFR>QO(UvAxas09~`~nZyslM;Qp?0C~4^PtgS7W{J6W1nUwJ^c& z=viUFOLj}c8_tF%0cYlR*e*|@3pF+0J*$AWey*=*oU-^@n|Rk-eRopUwyAgM(Y~tV zs9HB&$c+xfaBHJF4Gc0nL->1@e($mVxqj?gCQ8^hal{mtmr;x3JK9|-+)7On>$0*w z;$ZBsE9Sj`84dIry6eDe4kkQxTCIjz98|0339MDWW0+G_C#G)AeK^!n_3f7fE2oFm zEwGa5-S9eg%aPvB>Yw)PPm@X53$34~$mPs*g}g~)jRqVO+xLcAI${^Hz%0-tkKG+;K6m5Oj4@rKCX)|8^scGQ|l9$vg=%53loH6$fBy+15XdrrKPpdShY{lQ|<@RQpi)LaLnjq`? z0$^att;P=oY4_{ECd39Kp+qZ1OkCTAozU1;j8|2Vu$?x z-}>|a*TdiS;7o%3{*eRVOX-QXec`8L{{Iiof9^#hKbrf~iSvoqBwpJib)f&htNs5U zw*CK?-~I95d1)b$c=Wa350AYKAJ(dl|E*l9Uf*0^&W%dWmUt^l=pvO>axdl9&{2^> z*XU0Hjt{-F(~bhABH|P@3PLE7$+5vnMcGz zWYEhY7|q+QUAK061Z1+}&}OWpsPBnCuO0HH9ZeS$*2bic?h|mt!BdQ-$s-Q)(KpKd zSq)&(R@FI!t!jQyiSP=6W5C)avE#quucq2VQKoW{yRQG+eN%M0O?3-=HE!}cgvD#G z0jo+K#H8HmGnlRR7^}tvoNi3YhN(Jxea6ZeBshKhPt)J?=&oN^G8-8vyMEH%DjrYz zLQ%+ZoDqD`R5}tN`pPmx1(!ultrmpg#Cqi@c0x86SDIkm5sYXwx9DT#?L@4+iLlZt zpbAFWQ#@5V^kuLJN~3-arqFSg;y&ee>~dRyb@?vjcu@IWL&cY+oBi7Mq#zCykCA{lJu4=6C9J$G!`hXi~6POwK`<&~C@mw?2I1Y4fC^ z4ZQX`n7SQu?SByd!*%O7YffOYNG4e94-kGy zhDJmN!M|92)N&lCWACCU-P$|BR2Lg8tNRAFVhT+a(BP=I2oofsx>IlOG?0*ZR(Vc5 z-D1bfo~+sZDb|-#x>GPst{d$bJ=v$qIU(;Du-D|iZ{ATrmE3x)oadUgQ!?In97MB+ zMqVv!v$5(H-j8K(lX^QEY8tsPNGPB*vUB!a8l|+8@3H=g?mQe7;2PFL3{M8td4R>C z*rj37$^44%NJuz&1KX0FQ(R0&G+Eb7b*Fe|4C|axHC1-)gq|G0-lgpivCz$=BEpCA z);M($>=8b!6KBM8BR%7$XHx24GpV%tS9-?yZwxIxQpb&;Uz>ys`s6w??arm<+_|0x z!p?q53*jTX4X+b_mB#TY??%RYX8LUHi)IZW`Z&f8m?csX6**ZnEFT ztRG&EQoKBK%`*EFJ$CLTII_LnKD~YKSVuQHy^VBqv-dtYr-y%xMI5iiyxddu%Ohv; z4Ii08K3(_xe}Kw=huseU2l;3huRom|gTIHpbLu>7&?i(_iisT$3PAJp z*+;aYOE_KZP%{MwRIAr6TqR)_P#8MQv#<*jYV7C4tDgLUcKX@ z`DlZ!XV|=yyp@?2iPS``9-B3-Gh*{f+hWqKBUcXY9NTvS%j4E^*>>TvjK zvcrwbx!$}UW*j{rI%xdMDNfP1{yl%EOI{WGtwt>vimlFy!jeW|0Xm)T_=h^Si7{DK zv9_@iFk5Jzr<6RNuF2SzpLXKvm%ztT1+L%l4xzpjt4~;|PNY(m?V(PGDWSHJ5=S*h zjEpJhvJ%z` z?BM)E#huVcCt*c{+HSR3JE=uk)`_}Twm2c~uPNn=Mf0nj9raop)gPqPM5$K8>(D+t zcf*mq?e2hhG7QXj+*-?LjRu;TBKckmt@kMOfO0N#>{vcVSXgT1^+V>z&{T(10Rva= zk-P3F{EGPEDO3LmEj2Nl%Vd_b7cZwTXBM;ROeU8}U&+nRrWfa@v)L;bXRgd$nz@=u z&rOVI$<`-(3;BPDTeazP-v-m>m)bMv&*aB)F^*8~m)-4FtKoaZP}fBRW^&*5ln&h6 zLrYZD7puoK8yj02M&8wS@RibLF6As|*UC9kjBgg6DHLxOUMXh#j0=UJG+}_lN0l(C z)*l_UsTTunC920#E_WV>t zRb_?+|9H}gZxpp?pY+|BvMip1=-54p6mZ!5sG5yW5Bdu7;?$M7`B@8Y&o?Ji8xEJB zm#=#*Bz_;6l~>Pw3g*iT*3|jB^Obzz_Vu;m@RZ7W>U@iqfS%?gNd;w77m)|vJ+z+C z!PQ`*n39ciHXoMVsYubdb<4uhZKml$4AuXPRt) zZ(r#IM4Bg@fZ>4OQGZcjM85t~o?G3{?tJKaj)%P=YtuUXoU*Iod`I^bHScb{<}EZ@ zunc29&%Co3oa}sJ`)i;LZoTSvq2k|dx53*>xs7bT zUC$RVjO~4Qt+<$7<0!P8RA;-P;!mW^XC|(}XSSZ*%r8E3$KA@^s^khwxh41rbyZz1 zt>1B+NS@)u$SO+LC^IoCSND*d_Rw!FrPj+f>T0z6prhRfm1Av;fW|OHsD{E$lP^GP zRa`5ifZiKXGI-tJKw5^qec1UxL!hk<#%2iMy9QEZv;OHW`S`WFP1i05@&P&+$RMCT z2OaV`pO~H^*+N2XWMe=&LcY=6^E>XgxAPpG{~@)ugN)!xB>;UtU(T+p{Haj9ZS7dN z?L$BEt=eksc6{6tphZ>7*{!S1e%tqgR#VYa&?Ud$s2{Km5>u=2<_^u6>>>@Nv)XBU z0R}0g{>pdfXLSrahFUvFQ=xEifd3pAwLzq-5Dh>OwitUlhiqrCQ|cb>wLR_m&9UL= zDm-YBx2EzjWf|((RLm^HB3y>aWpOpP_zb5{0p&0@>*mHvDZ9k=<8H0y);8?N?r?vN zt5GmoXZ`@~dSE;KIN44hEgqiMq508ap0svUE~Sc7x#d-bf8o&*k`Uq4({0wU%TZsb zw|BY++E$2p-PDur0fseo*;->+Rw| zged^^TpS>Q7hxRI^@9VyR)+zAS0}8gh2BGCl#UxsBpkev*`i+?H5J7_h={U8)!}HB z=hgkFg@LkBlc@r~P^-|af(B7X?ha{gkkfUuwF-4q^P91318V?YatjKz%TPsYrD@!(?#aJx6r| za#TO3P~qIxoKXt8trViFaw9Rp)kGIqGaVKbivzQ8yuGNpQ`8uIlEvh0FLfLg?K&(T zXdX(bK_@3$84PpNI`sBD?JtfI(1%ru@CfDUY`860&zlSGM|}(}^?`?BKYZ>z_PRg0 zo-3`4wBYM?|Mhs*XDLyS{1m%>Ki6y>HHohbpDV3Y)mo$g*3fnYaKiP*t2LD^M?)D5cz5i#iGA$-n1e+|Y2vz&tseC(^~i<~2CP zTO;g#oC2uq9o)+u*Adkgs?Am6o>?SAh@&d!q zO{S6))XMxRW2t~5LS}{#GGhseRzV91xzAh+CzU(}FD~V7CB4Z>>nU9uG_h_L^2Nfn zWG9nCif}GXbv;*EEiPSK%a$u=j+;HOhrKWHA}XBsA9yP)3twih5SQ$D*Q1=&`$x_u zNq87PJ!m#PdTP*Yl-1YVgtq8->Nj_tKJqfMlG=!MqFjJ{+Ut#NN0n=WEu}yd-lyXt z4`;T+hIj1Po2wWhC1qoZnCR%p+hLYZyloAMt<*gYTQ_ZU?5DGagkxE03I@Y7FBKBC z2M(op2zyw)0O)&O{DD~LTbleuU8B=BXW~5*I!HDy=Z?)!qj_)^H%lexhQoJ0@%ryf z?2zC8+rIGA-}#%r|9c7c`$y|)m!5gs!iQu2|L33RzW8eVnEv|2`NYGCSM|sp=>Pwv z+W-F%+y8$)@lU^bA(43WvG>DMNqkmsfj1(D;!(E1CNjN}v}IT=?E}zyVbaJ$JYP2TcmKSqIUC+o8&*V(6HTH z{Tx@4z74+bK2M60`ylBB{Rm$dk14l*#y1Q3XE(7{b)t8oQeKv%pI?UaS0#6=a=*Nh zt>m+7FW3o2lX|%dwhVm@dK|V$zY_IJh7a(lzl}FKUsxuwgTm3Zr(8*)(`x-rTW($*KQ$XwnydT1Y2}WSU;?7 zt{1eC?(@s}Te+qCOScQz_59*}m6I3D)8z^bu$7$qJRI|%xxb!UFP3iiKGm;o?oj1e zCbtL;ZSuBd-nw(*YlY4A zTq(ae>}zQCta`;dlx;USG`(a!SFU8&H|#I9iMsvW?Oe8`CW~w-($%H`K{@EONsb1bqW{eBe`X`A-^k+8 z&*znsPX4j@L212c&UKvV`Wo9>*)vnNyhx+Hym&{y70%k5<$Phqeg1l-l*66lYPP)k zf_{qk0sI`S1y$&Ji_cWc`7ejX;@TZn{!+$5q4X!lmUK6=CDh{|Vlmr#19{(#uOp7r zZ{6cGOS$D-DOXs`l|%c!lXfq#7B8;4%e=(#ACL>&4w=8p`Sp#poayAn0@TY|u9CBM zCTjO%J+irh(@~#CocLEd-^lH-Si#~#IzE9lsddLwnmjdoak%I>t`wynImPQN}s4c}y5h)YpDo8FJ~ z?nr;YpG}`oKWvm#qz{rl@#Smz>l61U*1r5A{JT&r*j-xu>0IBEM*H7 z`Vx8+rvPhyrCg$9dDav>srgRJC&Fimt>0F)RNNQFtR9=!{^;^#9TPe5S_cU|DZpZ2OW4zhI zXN)3*4_RdQVg9CqLmw-ga+KfNQ>u~JJ$UJo5-K+A=X|=Um#aMs#llIhf zP;U-?(i*q;Y;5dW4<>`|_Mk2>;3v}y2K>$)A=1ektv$5;i}eI)l~}7dagC#@O1^(a z({gXR$EV7$$HwWWe8dYW!=I)5@@1560d?SWjGU? zo;Mf2=Ea|2a;o1?B+gCRcMEr5Pf{wDbFfPs(bL&@(_50XrZVF2T;FN8G>eI51||{_ zY&~?;rqAJ!ppWeEteo#6G1W=LG;T<*5MDudc)Mg1nVGB8)A0YP%*^b?xl1u#3jXq> z_h+W3ucR|G>Di1sGkbOJ3j7~qvQKBGvt~5S@-e~S4-vI6XxZU(0RD&Ki z**8XV4eYsAQj*vmBwPZtDx9Y7o2Bdq>{i{Qws&}FKULh|eM?fG=2EV8ii6G+9^jsL zSBvFJ=rx#b)ZyP=L+i$}*R$o^fS<{HuK!PFQ{VsRGMp}QgHkQtEDV-gELCtj=C|uR z`UkuKikW2E)|OGaAWwVP;H-=$jCxjgmUBx=;T@k>E1_wpZkC>u*oOs{E=P?lP9{*Z zuMVvovBp&HCViauh_V*LJBQ1NieYDU2<@MT?8La1!8#af4z$MyKaa-n_+KZi3|@3p zC{8QXbuC z*bl*6#bHL_0mpiPSorD~0~8$-+AwHwC7o0@^8xcG)tdoQAE23?TDHAoM_Ytyvs`wo z{ZO}sE3u*;;fl8hnN{=DqA5j=Kpd~?W$IVVk>KE0$`{RRKNn27MY4iaT*cTEBht0+ znX)ZyKsK2e+fWq|=d2ps$9e~%%c5;8EmvSYQs7lJcpUZBR2auzKgIRASy@icr!*z^ zfL4k$0#t$Fv%yMUvDZ$^>1{id5a|R{Zhj!~!%Cx*}r3@^qsr6FZBpb>^Vg9AD&p?FGavOmW1Oua?s~YC`_@ z>lFDnbUJHA{rOl^MB{=<*7SZ)b+1$B7g)oaXxD1bBvX+|#xd?j4UfIY*y+gZTO+&M zFbN7O$_#nruog~)%Kf&oA3B#9PeR?>j_QquNeWu+uyxqQ^c~B?=!8tObe<%Qiwty$ zayUz*+|^b9d*!9=l)DKp^LHCw5MT^ZDiSY&;$|S<8%h- zF$PDgX%*iB8tjQy+hOW!{t6Eg{5IP6!({2>$hYHGxP#(FIGS~bW*g`Ni(X@=+fY{A zxXyc4zI-@IJj5gPV zyElv(v&FFjHeh~VDOU&RZ7@FTxE(%)%|0_Mo&C(<7odX;3f2;zQ88uWm_NxSVvuh{ zA0cO9&{f_N25^SX%uQdMnVQecUWOC*%XMQ^+6 zb!(}KIA-zbnO2~1hK0#TQBdr*nV}XIeALgsk}5D==*&ziGnbm3j`1jEX0B%DuFg)s zEX<6H+n>W`T=rO{r!gr=GWoBQF79ZVuUmy?&1OkCTAP@)y0)gOcI85x2-~ZbdKKzcq z@xT1p1pECX2LQzdNxbc)xtRa|1M`&^zW_g8nopchJd${IkId8k{~wO}|9{svEF=<- zK8kVOp1^0d((A9I{@xfTjiU5&3^|-FX$$F*k%Q}wd(AymSJTQiA1%KlUtD#cC*{wC z*X`^_oJX|0WaOtw=LJ?@Mv@FK@IiWgkMyKEAvVCU2;>!o*_0Cz94fByWhCHjqt47t zcAI{4r+s`#aon^}+i;>4%?n!DUK^Bqz7e{I3cDJn#|9oqg^H1y!x-b2NOP<037{cc zceQ$Nx7+Eqef4bHhm4{nQU6>-OBkk&w^L#IDY`Pvu2pjA=}DLO^*~+xp$%1=?0;+q zWWxg2=xB;#E65q%AW}1+8dBGo3JL1p^9~LhK2#f}7g7nj`K4T;l3&i}mfY*Nqd9*v zPMf_sfbBXJtpsI-gap&=8rPq)L20!10t{QJIEFc@nj6$9qzhE?ejN?pjup?fA`$({ zCs+|#RllZ~Ki08WYr}qH${psyqY&&~^BBWs?|XN#dgxoIPCp2oPD@9Kut;nNn-`mK zgn?rJ=G+k5ymfVHS>9l&Rp^8x92Te-Znql5l{|zYvMyR0~)DP+nuV0S2 ziqllZ>b;>7rQf0{I?;K@CKo0ez*)zPAiP3pYJ>_FrC zCPxO*^O<^|x%e#3OTVK=i=J_GwKKV;8}dXl-!R>klll17SP?L#i4Xd_yKVn?Vqqc- z9}yqRPnzsCTO;QWa%PiT#xv8Kr0Zsz$9k|F?YFckR}i(ZG(k|Bt)@rufLmy)!IglC zdQC;f-7j0n{j6qax1zcIvD);c!#P(;VGfxX8YfaT#`0(?y4!k=rN{Uz_5A=9R^LQe z4?ro)e#Zopisa4X1~nN;9);&B41V*CtE=YQ90*V#@taQ!BJs?oISn2r%;TaB9L z()3xYg=Vjs58s4haI9>oFr~2$j46{jQL2aQ)TQ7AA=Rp5Q>~u$Vyh3;suNwCdI#lp zYa0gSd#2PgQ?2%1zd@-PTir1jTUm@BBqu0Y>vk0Q*N@t=2hxp)yY(Z4BTCGoAnL_WZCzEeJg|k zMR_9=CEf`#e~u#itzl(`6sFUE76o~+YH_|owiGM?br7?jz?sYvxAabH4G)vkKkO- zU2T`c)RI5K$xYoS@21xJ<-)j=nKn4^VH9E7H8f2;s9T-QgtefK)2LO$tzLWzRbjkb z_d4z(+iL3(eP`dZqh&;i@>RD}nQ~l}E!E+|ES-61g`1Jcc3iu{nMyR%EN^(5#K>E< znuL=`^{E3DR#MpmPOI58`ph-F^B=!^=KHk)r_UVz#v{x#4kfzIuqOJ|TFTV8)d!VO zYubtSY&xjnp=uikJ%@&g%uF8HdbW|_pf_QRkHCAX&@?^>Wzuvotl6L6Nt;nP9FcbX z&BY)8NcW=)iNs?M{!$`wZrau$d>@jeRG-}}j%qm*Murb1C3&>N{Piq)k65AIXsN*m zRdYZUldp&h>_dIL*6L#IljBL;BLlVy9zTpLSsl7RJx0GN15fh;b%Ul8rOH;T59I>` z%pGiBG`<|#*vGbO)AOY>h^rgt(c?p99%{S>m=c>!gz7aeaS(A8q3G{)-X@Pm<+7wI z2ilZUMayp;FHP+LV}3$ZA$oSe$UH%VC&xo&V8jnN0Sq0E|A92?%^_IrKZr4y4_YDy>zY9}a#-8Q=iE&gJ5n+f+Eh%mtsC^@n>O4Lf`kN03 za7puz6Af^w)->o>E?e=1=S+80uy@>^Jn|%#=gkn@4r*T=h=m$Jv;3A$Lm(D+VW8 zD4o$z>An%$v-zB$t}*MVkHYN0i?*;ktW+S42I^T`T*?`8h{9}0um8=NJ_Y^kVOz4xjRn&SotxT!?G{3G}f0nih+vs=1j|K7f z@$8y5&cqo1)YVS6dcIOV$DzmZX*u0(w8;N5%@N#bv)7YvJb?Fk?lj>Xj${uVxnly& zFT*-bvJyQFxj8yzHi5>^JT;S=NzF#5li5Dcy>BKpaqI^ZsflJQ#^6BT_r6lDlor=F zk~}x1=sy|Q%i#MgDkcTKKeNZ>;4)rI{3~`@X~48KYtLXmM?OF!JFK9~3b||bcSs?J z73a_8%&>8-i6sGF_2_v%FVV>v?Lai`3y&UQjS&#hB2S=3aiRTy44+R5#U9{`^ z*Efnc$BM(9ctEcfBq@0-b$e2sR(O`+S|l9|JTY{2KyB~)SmiKzjanxs$hf}yt>oHq z?%Sa{=IomJZ?J-owt)833`$Dgif!Gz_6|(V%{>a-xa;0Z>1|8O(&`-Tw{SnB9)k+K z^>S8UbS9u&&crxhrZUr)GZ*JCXD(m9axv5Ijdbjlbo`z1b2|USFa7hcgH~F7)8o)I zm#kKL{lgSqZiA?cM~g)e4OFKkZ83p&%4LpsycJixb*ON9b~9JH?JCyMt+o7mzJlt* zD(k?uip$HSy4u}^-SwS2juR5NX4lpn#U8x)jGHfNN=)RUzEd*PoSgN;bOO2$L(<> zo}Ic{uF+K)M#c_W-S!UNsCepT$`YmGA=exgbeZp)@h-}Q0qY6&W^eWa-G)pl$)RqqLow-q#H5KeEv>4}39pwobVbr8hS$J` zb?ab$R+V5Bzj{YYoGwn3cLVBg+D$^=nw)YY38>39lpd)2z%YeQ%gNw&rdYTdao7!? zxaMZ?@-osnRFA+3yipJRxexG$3R;8OFKj0Ao>y`HG*=FJ3f4btnw`Y-s}0BGM4Lxc z>Ae%H#*J5vlbPc*HN%SGDnZ_e$UQ0l0@c(Gj4Ittt(w#VKdqYbbB<0a=OZ=&cMO zeKd#WhUEP{uVJ62n9M<0`@~uBFwf|$4i%?^p4U4m2Q7d|hl&-0<{{m~Xr@{FNQ`%p znlW9h=65`*zh2u9Pm%wGnVfQNs%uJ2!J3OBHVp9lA%+`gEvB(D!0zjC_YFh0Ta`$P z5L;&5#IvtOYBA@S+{Yt-hUODZ?vRSN02SD45HGWX<*mVK(K==}}LsDT`T6k?9S-G@OuU2CP^R~ZNZ#tGx^&E-|?>cw8 z*cE&lM3hjJt+9V6C_}Y%S=+wURqQ{C%7&Rl)B_<4go|z{Om-jNG{? z$7^8k+1pq8u7mpCK3zAFN!UTXiPV2q*y?&SyuH>fjLn7|EY{eghDQlOB$vq{R+r8` z8dRih6E0j#aJyX8Br3Eg(YzVlHsS4l7>zb04ATY`FtKrPag4Jbra(u3*pXP%Jv5#5 z0Fj5Nol5u+^&u|wcB8fP9K3;@fo?-ozt9X$0fpp_ZEyNYx(kgB^A56MP>gQ#H`@KM zvd#^T>K#~kS?I=QD2MNH@y?&`QSnFKo}h0pJrCQczUivK%xV$iTjd=eMnetX;!T%U zK8CDTb(~nS?fEflL)JeL?}IJQAa}7t+BuQ&1{q+|{w;h{n}AV!nXPcB-clQ|ofb07 zbXt4l*o{^J+75zszeps5N>#;HsTN{dM%o^@DYiL~62?lI2>qtx&46BW$(7kHO>wBVESTM=OuO0Bp!1}r8njp&X zG2Q3)3{Gxr8QO7^(^J#a$c!*~(k6>0d$;&Z3Ix)e>CtWjDzDG`OQqt5q8ZCCtMFcK z=Oig9H{%|8eCyapV1&7>l5vyu8V1psJS|_DSh?&)DN?QdKlZzF;Ly+z{2hm}2A zS!VSTJFv4^jWY0t%}xzzaCohXRkhV1XOsgo^3HR#Peywe8t{Rs@{7|{NroAZN$PZ3 z{LI`XdM3Mz3T@_Sv+_fgI(uoBo}mL5PAAbklbqShbM(w^+xPiq-#-Xq&rHu>p=Xpi zup2aB41Y-VJN-Z|RHu!X^Jzc!%oN_b-l8oa>=s>OCPw825+jqAW@B?;8;^oZz^xWK)D|5Xs#Fgt<;Fm$6K8j1CKp+qZ1cFx-hmX059rF8s+e>p_^5kbe zo?yR!7yh|GPrU7)ti=5PAA0h8Uwi|8oPS;7eB#l>>w2UP>HmK%G5N8DMB>p0{xLi? zkI(9zB&krM;U5RL7!O!-;2p9CTbZ1(O4rb) zhi<00W3;ZK9qpJJjZJmH9s*N+imNOonR(~M$ef`Tz~L!b_NqA zw;Sd5t(+0rmnK^0J+AtY*s)t{(T%`StNk1uCVKkF2!1!A69XD$5AA%@`}$1cr|>ZN z*!evew^!^ToG#@mo24-hgo(%W5LS}VT#{Q`eG!gJ_Jbqi5x#Q`!w7MUn{yqsk7GOa zabKpmTjp|6J&K0h%Fdu2dW}Kzpz%k?K?~lVjM#?iT9A>zeHhLB)ETtt>zDzy3!uxv z7C0DONAdno^~^=;#z>Rvszl+WzT?-rZ6ut4IcjfDhi35aGQl$4@aD2N?9d`MJpo<5 z*E?Y`K;mB8J218be9t#z=i@3LuE$yLJel~Nk3u(dAHa}aSM6?g6^8{J$*XI{mFo5U z@ck|Eh`myvM!88->TUA;X? zCefIXviiy~wLo?*%mJWtfaO=#;pj%ehAwt}P?=!fYxvHAN6JSoM`%a^Lrn9AkYR|P z4m~ymYWrv=kD5bm71Z#;cp4lot8bf;BF3w+6+W$YW}aqeFkDk?ArxpUMv60(m6+q? z&1kjba$)5zEa(eOJF~`VuG5A!feFuDq%i4jlg@F3nO`xKq(S`f^M3s0g~T6x1YJYU z|3w&sPujzAC7UZ(mvR*UdbC;pHO8bhl$0dLYveLWJ?9_ef45Q?zpQ$f!gAl4j5{yZ ze0n1whaGFJZ|&~Z$=eWwyUA?rE}Gia++658U+zHTdhOaIZ1eV7q`V8Qv)waTXH&ja z1aLA%uI%fuOdeW3)G^LN{ll!%=lmO`Val~il_D#uyI#FPQKRBs^cSbxtP0EmOA|t=@l!#cf6f_f5`3_G8K$! zZ9Pyz_NQO`Yh?0&{vFUA-)HyC%3?8BTFhV1ujMPZN9vizRnC@#F2Qj=eI3*uKKbpP z`gXm6+zk=meC;-@8vYe?5{qPY!rR`Nz?j}^cyWw*Y-Xy#kq^`Jes!lF(;S~9i3w>= z_7v$&I{N&@lb+8^Psidd%#H8TmQDO5$I9qHkGN)c4liFAZMrg@<1HXzE4e;-$KBd2 zl=CZv+!B2J@*G_iuHA8*EJhSM@EU0{J=Oj^%7}FjJ@+{<5e)kDOy=U{i}SOWF3#gR zVg9a_^&gY$71G40Fg%y57|{8SWgTfY8bvtb zt>nw-v||K>JNIPh9oS@EEF88t2b;CVyoK|vV;takE(oJAsu9n&bx5Extj7)-TCotk zjzh!K<8eHAP8WAEQNmSz_1rH)d;KZ9>7FmIZdR6xH%C6**)9<*spohDtIZ+TA+LGb z>O0?wkvwSub_iCJzau<$*A&5CxOiS6IZ*Dq^%_TQgkRDPI3qRK8gtj%@g2<^h6)H> zH6G37W?8oO7F6M0?EueW``u2hb<}jA`VYux(c;#s>R+MDEV|i^eAwNFHBMtWL+%;r%0qij*@24T$ntNo#ioQyiZ&;egl7W ztiayLi4nN(#{c4>kxa%t_i_CD@yGEjQQPs_TA3A*tmrUs-k`Hb!{6lt5ZV>1*(nGKFMEDG*oR@PpO*M*h-Lh*&%hv&}Crvg`Ep`;NP_icP8S2;_P0%@WGTj@$Rk6S=lFgUptk3f^&sAi4L=ukA32VTFQOh zM{eUXe(Qm+hRGpo&l7(R7S3#WC0C?DGTJ-=5`q=Kg%Xl`=n{9}-K)YGu3D?_p-Ha^ zj2_&9E zit#B$duo#(z0v0IWTRfuZupMgLLHu({__`bcY5Kfdx4y%X>f-DOX2%1NNb9p&es+KDl6?$dJGj8IoD4~mfDb;cZN7vpl zo^9y^F4Lriu43?Wq&05%y-Jt1i36zLbFB!Xq-;PxBDw=Ji6tj-n+0dK29YVb+w?7l zGd=8f6wmM(2A|V^@C_PsgChAlW*FvsJjGO@>V6PW%;1H<^%lAowAy=4QnmBZ(b3el z{#I*&RES-jr!X+Oq0b=?SSF}7b*RY5(PIMjP)sNhW+ugEo5T-=-R{8 zUj`rQ!Xpz?TI2^?bboM~M0~8;ZgrbABagm1K;o}Znoq=-rwN0nELr^bE=;!*JlS@7 zs|zYUTBuYcOQ}e1@XEun5>cCrcqi^{489bl%Q_vT*-@uk#o`h10qvD&I%0Ucq@pL| zqNbjQe3}I+PRtlr^v$Q-OLM8Y*-MbUU8IP>9g`+h8eB=Lk#UC^RxXFTKCK#*I-IM5 zcDsEBj1yb8EO*f0B<2b|>_=Sc*zc>=9`)#Zik$a7@{tZ6diNiA6U?iN_7wa7!GNIE z;Y|_3DfY|kc&aEVxedFU6bzOO{%a5aM(Yu$7NWL2RynqV%4SGY4h`%penZVJ_qP6ZqAgMxAqeM*o>n%(yKVXKvc~ zsA11@Ooks%5#IsM1hmaR#CvvMyR7O{-H<(ml^Lf8b)}lmq$a$H)WkOY6IV>a4+GzF z@4FXM6Z?Lnfy_0{`VLG(6GyFfqZSuJ&!qULp~TVBc7n`-(xy)+(wXUW`qtw6E`J2I z1cwhi3nO949u)szIbT?+<_jZ_i*Qg_l5pdJBLbbeBLl(&rlnp&>QCs?8SFO&eG*mU z1pdRTKHm;%j>>@6PWo?jU=*z3H05Sp`wb#>GUM+676vpz*&RFpEjG*OOdUA|c$5VU z9AWMQl-ZC9fUKTDA7vW5=$s4HlcKYWU0+cqFx)X5)IZGQ3AbE0Fxe2@@6>mUw#1pn zI#U&egkX4r`@v$^I4`!d*_SHIugn2u}(2X89DOHWOBgwElU9fjO zOmFw9`J+8H=yYq)DpjWM$5fGDts1~$?N7oN*<1D(x)US$nSND&w^Ax@ZeWNTTjY~x zzE$X--Py$7L1v{FU$YDyeA({nKUvCctYsI+2yOoM&_s+SZLJk=RyRudVhL|~(UNm5 zdpozJXq57WO7V`{*=|t5_`8j4sgfrq%Ou7`ATk5CIV9z@{SB+Bm8>Mp%jP-#*?!{r z8`-tZTp2P!A6{^i)cdNmsNqZY-}IvMM_&wFwmBdY4s6QHA44uquT0g|sgkJLnCt3! zGTgHbcEdX5CwOWDsq{frb68@2$fSNvS%W&UI^oB{FHvClSFG`HT|+xWSfU!o%psC5 zlyjv@O7r)y%NnXEkRV=r`4j609RW3I5Y0g*LW4&-dwiIUt)OMrv!&baGr8MzN^>_0 z`DZtC4$Yf}{+^|y`BKBD?Fk(s%@u(96_!|^eA7beQin5r$0`}^NBCsw-|HZ0rZEbp zJ5hb%O1EojJHV332GQX>1d4xyzGveaugN6mePo+UT)d%6r|FV4Dw@oJ4{NB!g9nBn zMB(?-t!BE`Rn}zM_*ivylLX&89X32%9*+DdX_$4jcnONG{&FCdlxqa>o+s!YDknf? zjYk&67zJ#v2|Koc!kt04YN_i@lM%JzrJ!##YYkuDeo>B8=YSof&%8A1dpe3ad!e?R z&+*w(p}Lk^$u8cmmTwm-*<01cV&MifH6)|_8K>Oj1>NW>2M!ZAH(IdiZugYKT-)M> zD{R{CQg6ccQ(~qrOcKdXtUM>0(S-(dhQCc`>Hsz-WPOjUZ)nMfqsa|NPtWM!vEkC# zh*JaWYcaf5hS8?3vGkaQUsY(XkiMG4IDFToHyRZr$)EOez@m}?JXhC&KB=i{pra7la^mk^)1FUt96Jo=WX;Cr z<9kuDz+GN3C+T@d9gpZKWv5S9qs~6*At-Dfj27}TCo6olR+uGc68X~TJu5%;z=`$- zTqv!K^$5WnqMDZvT&iJGRNBzWme`6hC9YiNqJovp4#Y*ZPX|2e%{mU19>q0XV0I|R zVP3O1qt&#JBO<1E#qn#L9QsG@i>DC`6$OtS`O}o^v=Noo6kGca&#b1;@(dCZUWfYw zNVTDE8W00^dpzQ;4P6**E>eu|ijR^+pi-2eEQ>8FklCL`(%UVh$L_eaEpY zt<&F9RZ(VJs@bzgQ&ht71Zx^auaU#q|5H~T)&U@VX)*DGXuJ2)IlTH>u}=}dprhnf z^6R;BCA+>c>?y)EhMjRqDYxgVUGtw;?I>UuvJ)J%HsuNt}y(Gjcymq#|KM>_%68z6Z+mv zM7w9ML{v~D6ZF>H-Ow@?93S9g^&N{x&rv6RBSI}vdl_n#y%{UW1FU`&Gs{C_dUycj zg@WKw_v$qlvgdZ2ICvnBRyy=F`6zQ8*2_E_CnPg26f8O8qLe6xk@@n}{t3Rl0)ap<2#4={^XuQ~ zJek-bzyG)Wla(J$|1$biqTfGq0KAKydi(iri247Yzw`|+z8XKyT~3@&Je+t{kK}>= z|E~7`f5i6xzxr=J_N%z5d-S1O@K_!n);o?rT&d)js^!h=Bi}0;>tjn&5-;rhP73}( zGeTxEK5DVEJ?tQq%b)FamtP88ev9w5(O=u#b+o(Wz>AALrowmJ>S4SVz<@$^wKLb- zoL%_V=a_z|fEe~lpi{4%avflocVae|$t-6tUQS=mEN0W0OfHkYlAE1PFV0VAvsW(8 zT$#Hxb9H8RB1H<$^ix!KXM8J@p1V9T`TiB>@xg#YF`Zscc*Gea!$alts+&0jrRvCa zn4X#Y6IYF4og7zta+-QaMNTn+J@&&DKh&PUA{ zdfpo@icotWx)4sF$7Omt1OIoXr?1lgnSgS7f}+1)0i-iC>Di1sGkbOJ3jBZS3SnYO zU4LjQZ^x7=H2s>m4M?xArsQO=t*PBMFSB|@P>hFR4I(<wA_BY=b;DSQXOG289QqxY zG}6&xjiPFd>bS;mYCTO*F0t|FU{ELD^q*lQui1n8-HWT)!b*e6-hnwzX`v&jJka|(aYuM~=< z+{w>?45k~0NATkR1UaWZcQe1X6cLC{aMcr^j*C9=jZ*GrDPOS)bm-OF>PbhHkLw8j zz`FvdKlLfBN-aF{;1pePSnq^?n>Qm_Mry-0_s_qhON(k;;wCr{pe&A?oEM#BN(Do5V?e>>g-D$oy=L@JQce81tw@{2v zbG4%G+*KNAOBwMyHs*=S%a~Zh>@x7{IK`rI97l6XIdtV_f(>&)aZTi)D>S!uT8D>b zW-V8W8*X_Gd6sV_pTZpKsyJzOSR?GCC>#o&iLf1T|#E8^4#RoUt*-#kL&OYU;<ohzvd|SM8*H=Dl<=d|*IZ$ey1fM+&mjV4sDM zx&u8}+5YF)u`-xcxtk1Ez%ZZ22TpsH>bznrp&^zUxV&8scV4RBTitz#&ewCGf-^;C zs@15yXJVL+*7u}EqF@nw&jcM+X81FT9a#I36PU5(aPdGwoj|v|Lv~tEy1oZ<0!<98 zL(x^|!_K3nI8I?U1{r8##UUHRs zo0FPi;JGuL39zy%gQjrf=49VSS*1-8S1ebB9++5@c15zmTgv#5u|;*{9gxtew^fW+ zS4U7k^xOO1As_X8FF?Z10O_m;b#=!b_d4mo+ifyaY3)h!u4~d| zAH~_FO%$^ZE4|_Ip`TJ5s(Ln@P@y{=vKh22HaZPM_4M9H4Q|cRMS(2IE|!K$gyow;T81XuP^?Dl zxOc{jPQmtq({EnYGn^S`xW5gROvQasteybd4&v0yKxCPK4X!9aJNm zFtk(!P_0cYQ41~9H4B~D4hG?daHrL6Ajy=+OwjE%RDP=)C{MV+NnY>nx$nx%PhXk4 zc=5`la{TX0jym4ne@Lw_56ZMHi@V`)I^UDUWD{Rc?4sx1n@F5nw>7?*e4&zCIkSGZ z-!+bsa3YB$&0XXMOs+V}s8reO4@(IDit;|rCziems%rlA{}$?}U{}>s6hm*ZxVE`o zD34TC7I`2@+FIU(x^bV^67Rz-mRnmYtKbgg=Xf8g=Y^QBn*EDb{PHhr`Db$OgjT@9 zBR5xbr5x=E@2C*tI1;#+qisc>a^@f(h4@56UPMitH=xuW5})XMB=ZE;n4{iPLEOpTiMJYP zl+QQ2LC>j;IPAwxl0EAWvIYn1ZDv)nUG?P7)FuGL{tCVDz_9vvyZzU!)uZ%VWK;Izxz zr_gbQE;UJ6#gWLlzp1$EN{ta-MUovp-;eY1Mzb$_T%a3Kv!=ZrJPKC6(+z^5ZsW-R zuIAU$xChabu^j+2(j<%Z&T&ud%>b#{vd?zwbWd zW6aMbbvb(9&E4y?y>MdaiJ&}MF7iv3NS7>{Gn15yB7L(_%Hto{+vsmNgtw~Dwc5O) z#88iT)D1=8!7w>HHyMg>&A+3cOhN9uix>&JeZ1I${;EaTxme#^J59t=o%aP+E@q~O z%f&|Pu&c&L-@4!zrw5C88Crw`ydWhgN0`UEc~)?+e&Y!B8#pRqf>vyi2a1Q%D2F{K z5-!=&@+mEmBAG?+0oHA(a0FJmNBe%$!F1I2l>GKOEqUV3M#`Q2`(fm5TB*LzfsFPWTk9C623qRL4}~$Dm5)*Noezb|@rH z6l)2fEaAj~xmi?Yfj>RwW9QZ~a&PC#D2%e9s!7{KXxe+cr7=ZM;Rt{iVE0W4!PJE5 z+*BHK%QKO5;>cuynnc%ap|J-}Wc7fLM=ASZ?b)pPSm-^)9;^PMJqky!V2&v4aagN5 zJ=|+(9b8)H7An8ntbd4XUdRPDmKB)PQn6h3_|VqXweYUJx1sFxOVfV4C%Mf+PjaCa zHe|fGE2$XUut8aP&sL}A)6B&t6fhA7j$)}L2|4NXespa_Hh^#8K0r$XBWo? z@^eK?0`u_MN)l@UU2i-+n9Q@L3Vl{0ssu#>0PB3{*2z&qVg;d^hTKJ>4CyArENc?J zLpb5^#zUuJWfr?S&J8JgB{G|!ICG7#U*Ch>9@;6@F;>QLN*`un{81fKx1z>|dZN5# zqphb5t-@jLQD0OJn9A{3smGX3%r!+|MVE2PwtK6}hMJdq(*!9hNlXyeQe-0 zC)#L0Ar&h~_Xwlt(?m^HZzW%O%!Tp7)uLLv%9||Yc-E7CX!oTy)MV7=8f!7$xKci8 zhepkgo@zB-87U4*c%D%KoNY=?IzUDH<&-L_nXzF!S?VP}U^|aMO|r2~*)9=pb8AFt z@3NbfVl`iY?E%snx^U=&Wx3n&Sq!=$)BSF*V<*WB|AIeytm=rY0>`IGEi|I*<31Wq z`bNG~+03rFE4e}r8C{n!3H@ccQY^tYn1vp%ZLIeVb6(M1WY7twr=tv5YC+6ti|rzx zo^*4o!<6nMCUQ(qH;N@3j?J^J^7>Fq=jqlq%@lo(FUFjFVYygZ=i8w2;%aU^ zn=)rJLp!FoR2?1u>g*2joR%^qP}?+}Su(Ow8^?*j`ZxyE;Bz!rmMWoua>cU|9EX>+mr}!)0XhYAgY?fJh zOJC;;OSxN?X279VQ#l^gY=K2fLt^d>9V(%96fzME7cL?8W;XFdr~_R1Kd&Sb=Zdys z>zPWvaC@9UGKse+38w^-xr>pPf&)~cpBzUfGeZGnGBcO?0UbHUiAIi@nfts788f